[cut: only the first 33554432 bytes of this file were read]
/* This file has been generated by the Hex-Rays decompiler.
   Copyright (c) 2007-2011 Hex-Rays <info@hex-rays.com>

   Detected compiler: Visual C++
*/

#include <windows.h>
#include <math.h>
#include <defs.h>


//-------------------------------------------------------------------------
// Data declarations

extern MainChar::MoveState End;
extern _UNKNOWN loc_67CB3D; // weak
extern _UNKNOWN loc_67CCAA; // weak
extern $C7A66656BD20095141AF9DA597C58E36 error;
extern _UNKNOWN loc_6860E8; // weak
extern _UNKNOWN loc_6A6367; // weak
extern char byte_6E0028[8]; // weak
extern _UNKNOWN loc_73AF9B; // weak
extern _UNKNOWN loc_750BB7; // weak
extern _UNKNOWN loc_750C17; // weak
extern _UNKNOWN loc_750C77; // weak
extern _UNKNOWN loc_750CD7; // weak
extern _UNKNOWN loc_750D07; // weak
extern _UNKNOWN loc_750D37; // weak
extern _UNKNOWN loc_750EFA; // weak
extern _UNKNOWN sub_750F88; // weak
extern int ownRDTSCh[4]; // weak
extern _UNKNOWN loc_7A5BD3; // weak
extern _UNKNOWN loc_7A5E1B; // weak
extern _UNKNOWN _LN17_94; // weak
extern _UNKNOWN loc_7A6010; // weak
extern _UNKNOWN loc_7A6697; // weak
extern _UNKNOWN loc_7A675D; // weak
extern _UNKNOWN loc_7A6876; // weak
extern _UNKNOWN _LN29_53; // weak
extern _UNKNOWN loc_7A73C7; // weak
extern _UNKNOWN loc_7A74C8; // weak
extern _UNKNOWN _LN27_61; // weak
extern _UNKNOWN start_0; // weak
extern _UNKNOWN _LN16_96; // weak
extern _UNKNOWN loc_7A8722; // weak
extern _UNKNOWN loc_7A891B; // weak
extern _UNKNOWN loc_7A8A21; // weak
extern _UNKNOWN _LN52_18; // weak
extern _UNKNOWN _LN19_80; // weak
extern _UNKNOWN _LN19_81; // weak
extern _UNKNOWN loc_7AA564; // weak
extern _UNKNOWN _LN24_74; // weak
extern _UNKNOWN _LN18_94; // weak
extern _UNKNOWN loc_7AA741; // weak
extern _UNKNOWN _LN19_83; // weak
extern _UNKNOWN loc_7AAA2B; // weak
extern _UNKNOWN loc_7ABC40; // weak
extern _UNKNOWN _pow_default; // weak
extern _UNKNOWN start_4; // weak
extern _UNKNOWN _LN18_95; // weak
extern _UNKNOWN loc_7AD56F; // weak
extern _UNKNOWN _LN26_61; // weak
extern _UNKNOWN _LN21_78; // weak
extern _UNKNOWN loc_7AEA71; // weak
extern _UNKNOWN loc_7AEA7D; // weak
extern _UNKNOWN _LN21_79; // weak
extern _UNKNOWN _LN25_67; // weak
extern _UNKNOWN loc_7AF69C; // weak
extern _UNKNOWN _LN52_19; // weak
extern _UNKNOWN loc_7AFC89; // weak
extern _UNKNOWN loc_7AFD2E; // weak
extern _UNKNOWN loc_7B00EE; // weak
extern _UNKNOWN loc_7B0D1F; // weak
extern _UNKNOWN _LN18_97; // weak
extern _UNKNOWN loc_7B119E; // weak
extern _UNKNOWN loc_7B1B77; // weak
extern _UNKNOWN loc_7B1C69; // weak
extern _UNKNOWN loc_7B1F77; // weak
extern _UNKNOWN loc_7B1F80; // weak
extern _UNKNOWN _LN20_91; // weak
extern _UNKNOWN _LN24_78; // weak
extern _UNKNOWN loc_7B2598; // weak
extern _UNKNOWN loc_7B2F90; // weak
extern _UNKNOWN loc_7B319E; // weak
extern _UNKNOWN _LN35_38; // weak
extern _UNKNOWN _LN29_56; // weak
extern _UNKNOWN loc_7B34A8; // weak
extern _UNKNOWN _LN19_90; // weak
extern _UNKNOWN loc_7B5A73; // weak
extern _UNKNOWN _LN25_70; // weak
extern _UNKNOWN loc_7B61C6; // weak
extern _UNKNOWN loc_7B7AC3; // weak
extern _UNKNOWN _load_CW;
extern _UNKNOWN _check_range_exit; // weak
extern _UNKNOWN ContinueErrorHandling; // weak
extern _UNKNOWN _LN38_39; // weak
extern _UNKNOWN loc_7B8C70; // weak
extern _UNKNOWN loc_7B8CB1; // weak
extern _UNKNOWN loc_7B9483; // weak
extern _UNKNOWN _LN37_47; // weak
extern _UNKNOWN loc_7BAB4F; // weak
extern _UNKNOWN loc_7BAC72; // weak
extern _UNKNOWN loc_7BADDF; // weak
extern _UNKNOWN loc_7C08A4; // weak
extern _UNKNOWN loc_7C08CA; // weak
extern _UNKNOWN loc_7C10F2; // weak
extern _UNKNOWN _LN48_34; // weak
extern _UNKNOWN _LN23_71; // weak
extern _UNKNOWN _LN27_65; // weak
extern _UNKNOWN loc_7C9CA8; // weak
extern _UNKNOWN loc_7CE504; // weak
extern char byte_7D7B2A[6]; // weak
extern _UNKNOWN loc_89F276; // weak
extern int (__cdecl *__xi_a)(); // idb
extern int (__cdecl *__xi_z)(); // idb
extern _UNKNOWN __xp_a; // weak
extern _UNKNOWN __xp_z; // weak
extern _UNKNOWN __xt_a; // weak
extern _UNKNOWN __xt_z; // weak
extern __int16 word_9774E4; // weak
extern char aRb_21[3]; // idb
extern char format[]; // idb
extern int (__thiscall *std::bad_alloc::_vftable_)(void *p, char); // weak
extern char aStringTooLong[]; // idb
extern char Message[]; // idb
extern int (__thiscall *Argv::_vftable_)(void *p, char); // weak
extern char pcName[]; // idb
extern int (__stdcall *BoxAnnounceWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *BoxAnnounceWin::_vftable_)(void *p, char); // weak
extern char aListTTooLong[]; // idb
extern int (__thiscall *CameraCtrl::_vftable_)(void *p, char); // weak
extern char aV_5[1]; // idb
extern char aLgjv[4]; // idb
extern char asc_977900[1]; // idb
extern char aZalbe_0[5]; // idb
extern char aEgekl[5]; // idb
extern char byte_97796C; // idb
extern char aZalbe[5]; // idb
extern char aEd[2]; // idb
extern char byte_9779D8; // idb
extern char aGdal[4]; // idb
extern char aLlj[3]; // idb
extern char byte_977A44; // idb
extern char byte_977A68; // idb
extern char aDbkl[4]; // idb
extern char byte_977AB0; // idb
extern char aK_2[1]; // idb
extern char byte_977AF8; // idb
extern char aKg[2]; // idb
extern char asc_977B40[1]; // idb
extern char byte_977B64; // idb
extern char byte_977B88; // idb
extern char aLjeje[5]; // idb
extern char asc_977BD0[1]; // idb
extern char byte_977BF4; // idb
extern char byte_977C18; // idb
extern char byte_977C3C; // idb
extern char aE_5[1]; // idb
extern char aKjd[3]; // idb
extern char aKag[3]; // idb
extern char aAva[3]; // idb
extern char byte_977CF0; // idb
extern char aBzlevez[7]; // idb
extern char byte_977D38; // idb
extern char aDlj[3]; // idb
extern char aDv[2]; // idb
extern char aEv[2]; // idb
extern char aVz[2]; // idb
extern char aE_4[1]; // idb
extern char asc_977E10[1]; // idb
extern char aA_19[1]; // idb
extern char byte_977E58; // idb
extern char aVaaka[5]; // idb
extern char aDjgeb[5]; // idb
extern char byte_977EC4; // idb
extern char aZ_4[1]; // idb
extern char aB_7[1]; // idb
extern char byte_977F30; // idb
extern char byte_977F54; // idb
extern char aLbd[3]; // idb
extern char byte_977F9C; // idb
extern char byte_977FC0; // idb
extern char byte_977FE4; // idb
extern char aDdadjz[6]; // idb
extern char aKj[2]; // idb
extern char aG_10[1]; // idb
extern char aLdz[3]; // idb
extern char aK_1[1]; // idb
extern char aAk[2]; // idb
extern char aJ_0[1]; // idb
extern char byte_978104; // idb
extern char byte_978128; // idb
extern char aKzg[3]; // idb
extern char aVdl[3]; // idb
extern char aVjzdlkdak[9]; // idb
extern char byte_9781B8; // idb
extern char aKvzl[4]; // idb
extern char aDezejzd[7]; // idb
extern char byte_978224; // idb
extern char byte_978248; // idb
extern char asc_97826C[1]; // idb
extern char aEkzjdz[6]; // idb
extern char aLgjlkedal[9]; // idb
extern char byte_9782D8; // idb
extern char aE_3[1]; // idb
extern char byte_978320; // idb
extern char byte_978344; // idb
extern char aAv[2]; // idb
extern char byte_97838C; // idb
extern char aB_6[1]; // idb
extern char aV_4[1]; // idb
extern char byte_9783F8; // idb
extern char aV_3[1]; // idb
extern char aAl[2]; // idb
extern char byte_978464; // idb
extern char aBl[2]; // idb
extern char byte_9784AC; // idb
extern char aZd[2]; // idb
extern char aEzzzk[5]; // idb
extern char aEz[2]; // idb
extern char aBdz[3]; // idb
extern char byte_978560; // idb
extern char byte_978584; // idb
extern char byte_9785A8; // idb
extern char asc_9785CC[1]; // idb
extern char aJk[2]; // idb
extern char byte_978614; // idb
extern char aB_5[1]; // idb
extern char aLzedl[5]; // idb
extern char byte_978680; // idb
extern char byte_9786A4; // idb
extern char byte_9786C8; // idb
extern char aZ_3[1]; // idb
extern char byte_978710; // idb
extern char asc_978734[1]; // idb
extern char asc_978758[3]; // idb
extern char Caption[]; // idb
extern char Text[]; // idb
extern char pcFile[]; // idb
extern _UNKNOWN unk_9787BE; // weak
extern char pcCaption[]; // idb
extern char pcText[]; // idb
extern char pcTriShapeName[]; // idb
extern char aCharcreateclas[]; // idb
extern char pcTag[]; // idb
extern char aPlane_name[]; // idb
extern char pkButtonName[]; // idb
extern char aClass_archer[]; // idb
extern char aClass_cleric[]; // idb
extern char aClass_mage[]; // idb
extern char aClass_joker[]; // idb
extern char aJob[]; // idb
extern char aName_2[]; // idb
extern char aClass_sentinel[]; // idb
extern char aClass_sentin_0[]; // idb
extern char aClass_sentin_1[]; // idb
extern char aClass_sentin_2[]; // idb
extern char aJob01[]; // idb
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vftable_)(void *p, char); // weak
extern char aD_0[]; // idb
extern char byte_9788EB; // idb
extern int (__thiscall *NiTMap<unsigned_long_NiPointer<PgWinBut>>::_vftable_)(void *p, char); // weak
extern char aNone_0[5]; // weak
extern int (__stdcall *CharCreateClassWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharCreateClassWin::_vftable_)(void *p, char); // weak
extern char aCharcreateClas[]; // idb
extern char aLoadfail_0[]; // idb
extern char aClasstree_nifL[]; // idb
extern char aPlane_1[]; // idb
extern char aCharcreatedesc[]; // idb
extern char aClasssmall_fig[]; // idb
extern char aClasssmall_arc[]; // idb
extern char aClasssmall_cle[]; // idb
extern char aClasssmall_mag[]; // idb
extern char aClasssmall_jok[]; // idb
extern char aClasssmall_sen[]; // idb
extern char aClasstree0D[]; // idb
extern char aText0D[]; // idb
extern char asc_978C40[]; // idb
extern char aArrow_0D[]; // idb
extern char Ptr[]; // idb
extern char aColumn[]; // idb
extern char aTextbox_classe[]; // idb
extern char aSlidebar_slide[]; // idb
extern char pName2[]; // idb
extern char pName1[]; // idb
extern char pName[]; // idb
extern char aSS_5[]; // idb
extern char szText[2]; // idb
extern char asc_978CD0[2]; // idb
extern char asc_978CD4[2]; // idb
extern char asc_978CD8[2]; // idb
extern char asc_978CDC[2]; // idb
extern char asc_978CE0[2]; // idb
extern char asc_978CE4[2]; // idb
extern char asc_978CE8[2]; // idb
extern char asc_978CEC[2]; // idb
extern char asc_978CF0[2]; // idb
extern char asc_978CF4[2]; // idb
extern char asc_978CF8[2]; // idb
extern char asc_978CFC[2]; // idb
extern char asc_978D00[2]; // idb
extern char asc_978D04[2]; // idb
extern char asc_978D08[2]; // idb
extern char asc_978D0C[2]; // idb
extern char asc_978D10[2]; // idb
extern char aVectorTTooLong[]; // idb
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_long_NiPointer<PgWinSpr>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *CharCreateDescritWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharCreateDescritWin::_vftable_)(void *p, char); // weak
extern char pcFileName[]; // idb
extern char aCharcreateCr_0[]; // idb
extern char aLoadfail_1[]; // idb
extern char aCreatcharinfoL[]; // idb
extern char aPlane_2[]; // idb
extern char aCharcreateinfo[]; // idb
extern char aFacearrowl[]; // idb
extern char aFacearrowr[]; // idb
extern char aHairarrowl[]; // idb
extern char aHairarrowr[]; // idb
extern char aColorarrowl[]; // idb
extern char aColorarrowr[]; // idb
extern char aGenderarrowl[]; // idb
extern char aGenderarrowr[]; // idb
extern char aPlane01[]; // idb
extern char asc_9790A8[]; // idb
extern char aFace_0[]; // idb
extern char asc_9790B4[]; // idb
extern char aColor_2[]; // idb
extern char asc_9790C0[]; // idb
extern char aHair_0[]; // idb
extern char asc_9790CC[]; // idb
extern char aGender[]; // idb
extern int (__stdcall *CharCreateInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharCreateInfoWin::_vftable_)(void *p, char); // weak
extern char aCharcreatefram[]; // idb
extern char aLoginbackgro_0[]; // idb
extern char aChrlevel_cancr[]; // idb
extern char aCharcreateCr_1[]; // idb
extern char aAvatar01[9]; // weak
extern char aObject03[9]; // weak
extern char aCharcreateCr_3[]; // idb
extern char aCharcreateCr_2[]; // idb
extern char aShadownode[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiProperty::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiVertexColorProperty::_vftable_)(void *p, char); // weak
extern int (__stdcall *IDirectMessenger::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiAlphaProperty::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiFogProperty::_vftable_)(void *p, char); // weak
extern int (__stdcall *PgFrameWork::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PgTList<NiPointer<Shadow>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *CharCreateFrameWork::_vftable_)(int uiFlags); // weak
extern char aCharcreateCr_4[]; // idb
extern char aLoadfail_2[]; // idb
extern char aCreatcharexitb[]; // idb
extern char aBtn01[]; // idb
extern char aBtn02[]; // idb
extern int (__stdcall *CharCreateOkCancelWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharCreateOkCancelWin::_vftable_)(void *p, char); // weak
extern char aCharcreateCl_0[]; // idb
extern char aLoadfail_3[]; // idb
extern char aClassstat_nifL[]; // idb
extern char aPlane01_0[]; // idb
extern char aCharcreatestat[]; // idb
extern char aPlane02[]; // idb
extern char aStat01_middle[]; // idb
extern char aStat02_right[]; // idb
extern char aStat03_right[]; // idb
extern char aStat04_middle[]; // idb
extern char aStat05_left[]; // idb
extern char aStat06_left[]; // idb
extern char aCharcreateCl_1[]; // idb
extern int (__stdcall *CharCreateStatWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharCreateStatWin::_vftable_)(void *p, char); // weak
extern char aCharcreateCr_5[]; // idb
extern char aCharcreateview[]; // idb
extern char aTurnl[]; // idb
extern char aTurnr[]; // idb
extern int (__stdcall *CharCreateViewCtrlWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharCreateViewCtrlWin::_vftable_)(void *p, char); // weak
extern char aCharselectfram[]; // idb
extern char aS_title_wav[12]; // weak
extern char pcMapName[]; // idb
extern char aCharselectChar[]; // idb
extern char aLoginbackgro_1[]; // idb
extern char aCharselectSele[]; // idb
extern char aAvatarD[]; // idb
extern char aObject02[9]; // weak
extern char aObject03_0[9]; // weak
extern char aObject04[9]; // weak
extern char aObject07[9]; // weak
extern char aLoft01[7]; // weak
extern char aCylinder25[11]; // weak
extern char aCharselectSe_1[31]; // weak
extern char aCharselectSe_0[30]; // weak
extern char aShadownode_0[]; // idb
extern int (__stdcall *CharSelectFrameWork::_vftable_)(int uiFlags); // weak
extern char aGameMessagewin[]; // idb
extern char aPanel01[]; // idb
extern char aCalculatorwin[]; // idb
extern _UNKNOWN unk_979FEA; // weak
extern _UNKNOWN unk_979FEB; // weak
extern char aTheme[6]; // weak
extern _UNKNOWN unk_979FF2; // weak
extern char aTheme_0[]; // idb
extern char aLotinput[]; // idb
extern char aLotinput_0[]; // idb
extern char aBtnnor02[]; // idb
extern char aBtnclick02[]; // idb
extern char aBtnover02[]; // idb
extern char aBtnnor04[]; // idb
extern char aBtnclick04[]; // idb
extern char aBtnover04[]; // idb
extern char aLoginbackgro_2[]; // idb
extern char aAvatar0[8]; // weak
extern char aAvatar1[8]; // weak
extern char aAvatar2[8]; // weak
extern char aAvatar3[8]; // weak
extern char aAvatar4[8]; // weak
extern char aAvatar5[8]; // weak
extern char aAvatar6[8]; // weak
extern int (__stdcall *ChangeNameWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChangeNameWin::_vftable_)(void *p, char); // weak
extern char aGameChatcolors[]; // idb
extern char byte_97A313; // idb
extern char aLoadfail_4[]; // idb
extern char byte_97A31D[3]; // idb
extern char aChatcolorspin_[]; // idb
extern char aFrame[]; // idb
extern char aChatcolorspin[]; // idb
extern char aWintitle[]; // idb
extern char aPanel01_0[]; // idb
extern char aTheme_1[]; // idb
extern char aBaseslot[]; // idb
extern char aSlot01[]; // idb
extern char aDeco01[]; // idb
extern char aOk_0[]; // idb
extern char aCls[]; // idb
extern char aText01[]; // idb
extern char aText01_0[]; // idb
extern char asc_97A3A4[]; // idb
extern __int16 word_97A3A8; // weak
extern char aChatcolorspine[]; // idb
extern char aLoadfail_5[]; // idb
extern char aChatcolorspi_0[]; // idb
extern char aEffect01[]; // idb
extern char aMoverupgrade_s[]; // idb
extern int (__stdcall *ChatColorSpinWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChatColorSpinWin::_vftable_)(void *p, char); // weak
extern char aGameClasschang[]; // idb
extern char aLoadfail_6[]; // idb
extern char byte_97A691; // idb
extern char byte_97A692; // idb
extern char byte_97A693; // idb
extern char aClasschangew_0[]; // idb
extern char byte_97A6AD; // idb
extern char byte_97A6AE[2]; // idb
extern char aFrame_0[]; // idb
extern char aClasschagewin[]; // idb
extern char aTheme_2[6]; // weak
extern char aTheme_3[]; // idb
extern char aPanel01_1[]; // idb
extern char aPanel02[]; // idb
extern char aClasschangeima[]; // idb
extern char aClasschangew_1[]; // idb
extern char aArrowicon[]; // idb
extern char aClasschangew_2[]; // idb
extern char aOk_1[]; // idb
extern char aCancel_0[]; // idb
extern char aCautiontext[]; // idb
extern char aClassnametext0[]; // idb
extern char aClassnametex_0[]; // idb
extern char aCls_0[]; // idb
extern char aCopperbtn[]; // idb
extern char aCopperinput[]; // idb
extern char aSilverbtn_0[]; // idb
extern char aSilverinput[]; // idb
extern char aGoldbtn[]; // idb
extern char aGoldinput[]; // idb
extern char aGembtn[]; // idb
extern char aGeminput[]; // idb
extern char aIconslot[]; // idb
extern char aRecompensetext[]; // idb
extern char aHelplinknor[12]; // weak
extern char pcPushed[]; // idb
extern char pcFocus[]; // idb
extern char pcNormal[]; // idb
extern char aText01_1[]; // idb
extern char aWintitle_0[]; // idb
extern char aSlidebar_sli_0[]; // idb
extern char aSlidebar_dnb_0[]; // idb
extern char aSlidebar_upb_0[]; // idb
extern char aSlidebar_0[]; // idb
extern char aClassemblemass[]; // idb
extern char aClassemblemclo[]; // idb
extern char aClassemblemgla[]; // idb
extern char aClassemblemgua[]; // idb
extern char aClassemblemhol[]; // idb
extern char aClassemblemkni[]; // idb
extern char aClassemblemran[]; // idb
extern char aClassemblemsen[]; // idb
extern char aClassemblemsha[]; // idb
extern char aClassemblemwar[]; // idb
extern char aClassemblemwiz[]; // idb
extern char aClassemblema_0[]; // idb
extern char aClassemblemc_0[]; // idb
extern char aClassemblemg_0[]; // idb
extern char aClassemblemg_1[]; // idb
extern char aClassemblemh_0[]; // idb
extern char aClassemblemk_0[]; // idb
extern char aClassemblemr_0[]; // idb
extern char aClassemblems_0[]; // idb
extern char aClassemblems_1[]; // idb
extern char aClassemblemw_0[]; // idb
extern char aClassemblemw_1[]; // idb
extern char acUIFile[]; // idb
extern char aI64d_0[]; // idb
extern char aI64d_1[]; // idb
extern char aI64d_2[]; // idb
extern char aI64d_3[]; // idb
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ClassChangeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ClassChangeWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *DShowMovie::_vftable_)(void *p, char); // weak
extern char aShader_0[]; // idb
extern int dword_97AD38; // weak
extern int (*off_97AD3C)(); // weak
extern char aError_1[]; // idb
extern char aShaderLoadingE[]; // idb
extern char aError_2[]; // idb
extern char aShaderLoadin_0[]; // idb
extern char aShader_1[]; // idb
extern char aDbError[9]; // weak
extern _UNKNOWN unk_97AD95; // weak
extern _UNKNOWN unk_97AD96; // weak
extern _UNKNOWN unk_97AD97; // weak
extern char aDbError_0[9]; // weak
extern _UNKNOWN unk_97ADA1; // weak
extern _UNKNOWN unk_97ADA2; // weak
extern _UNKNOWN unk_97ADA3; // weak
extern char aMixminupgrade[]; // idb
extern char aAddmixitem[]; // idb
extern char aLimitrandomopt[]; // idb
extern char aSD_3[]; // idb
extern char aGameRankingwin[]; // idb
extern char aFrame_1[]; // idb
extern char aEventrankwin[]; // idb
extern char aTheme_4[]; // idb
extern char aPlane_3[]; // idb
extern char aWintitle_1[]; // idb
extern char aText01_2[]; // idb
extern char aText02[]; // idb
extern char aText03[]; // idb
extern char pcClick[]; // idb
extern char aClsover[]; // idb
extern char aClsnor[]; // idb
extern char aHelplinkclic_0[]; // idb
extern char aHelplinkover_0[]; // idb
extern char aHelplinknor_1[]; // idb
extern char aBtnclick01[]; // idb
extern char aBtnover01[]; // idb
extern char aBtnnor01[]; // idb
extern char aBtnclick02_0[]; // idb
extern char aBtnover02_0[]; // idb
extern char aBtnnor02_0[]; // idb
extern char aColumnbarnor[]; // idb
extern char aColumn01[]; // idb
extern char aColumn02[]; // idb
extern char aColumn03[]; // idb
extern char aTextbox02[]; // idb
extern char aD_91[]; // idb
extern char aD_92[]; // idb
extern char aRankingwin_oly[]; // idb
extern int (__stdcall *EventRankWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EventRankWin::_vftable_)(void *p, char); // weak
extern char aGameQuesttime_[]; // idb
extern char aFrame_2[]; // idb
extern char aEventtimewin[]; // idb
extern char aReward[]; // idb
extern char aPanel01_2[]; // idb
extern char aTime_1[]; // idb
extern char a000000[9]; // weak
extern char a02d02d[]; // idb
extern int (__stdcall *EventTimeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EventTimeWin::_vftable_)(void *p, char); // weak
extern char filename[4]; // idb
extern int dword_97B418; // weak
extern int dword_97B41C; // weak
extern char byte_97B420; // weak
extern int dword_97B424; // weak
extern int (__thiscall *off_97B428)(GuildNpcMenuWin *this, int iYOff); // weak
extern int dword_97B42C; // weak
extern int dword_97B430; // weak
extern __int16 word_97B434; // weak
extern int dword_97B438; // weak
extern int dword_97B43C; // weak
extern __int16 word_97B440; // weak
extern char byte_97B442; // weak
extern int dword_97B444; // weak
extern int dword_97B448; // weak
extern char byte_97B44C; // weak
extern int dword_97B450; // weak
extern int dword_97B454; // weak
extern char byte_97B458; // weak
extern int dword_97B45C; // weak
extern int dword_97B460; // weak
extern __int16 word_97B464; // weak
extern char byte_97B466; // weak
extern int dword_97B468; // weak
extern int dword_97B46C; // weak
extern __int16 word_97B470; // weak
extern char byte_97B472; // weak
extern int dword_97B474; // weak
extern int dword_97B478; // weak
extern char byte_97B47C; // weak
extern int dword_97B480; // weak
extern int (__thiscall *off_97B484)(GuildNpcMenuWin *this, int iYOff); // weak
extern int dword_97B488; // weak
extern int dword_97B48C; // weak
extern char byte_97B490; // weak
extern int dword_97B494; // weak
extern __int16 word_97B498; // weak
extern int dword_97B49C; // weak
extern int dword_97B4A0; // weak
extern __int16 word_97B4A4; // weak
extern char byte_97B4A6; // weak
extern _UNKNOWN unk_97B4CB; // weak
extern _UNKNOWN unk_97B4E7; // weak
extern _UNKNOWN unk_97B4F6; // weak
extern _UNKNOWN unk_97B4F7; // weak
extern char aVerdana_ttf[]; // idb
extern char asc_97B504[]; // idb
extern _UNKNOWN unk_97B506; // weak
extern _UNKNOWN unk_97B507; // weak
extern char dst[]; // idb
extern _UNKNOWN unk_97B50E; // weak
extern _UNKNOWN unk_97B50F; // weak
extern char aVerdanab[9]; // weak
extern _UNKNOWN unk_97B519; // weak
extern _UNKNOWN unk_97B51A; // weak
extern _UNKNOWN unk_97B51B; // weak
extern char aVerdanab_0[9]; // weak
extern char aFontset_shn[]; // idb
extern char aApplicationIni[]; // idb
extern char aFontset_shnIni[]; // idb
extern char aVerdana[8]; // weak
extern char pcIndex[]; // idb
extern char aFs_gm[]; // idb
extern char aR_25[2]; // idb
extern char aFont_ini[]; // idb
extern char aSD_4[]; // idb
extern char a_ttf[5]; // weak
extern char a_ttf_0[5]; // weak
extern char a_ttf_1[5]; // weak
extern char a_ttf_2[5]; // weak
extern char a_ttf_3[5]; // weak
extern char a_ttf_4[5]; // weak
extern char a_ttf_5[5]; // weak
extern char a_ttf_6[5]; // weak
extern char asc_97B5FC[]; // idb
extern char aS_ttf[]; // idb
extern int (__thiscall *Encrypt::FileStream::_vftable_)(void *p, char); // weak
extern int (__cdecl *ITableBase<FontSet_FontSetTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *FontSetTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern char aGameForumwin_n[]; // idb
extern char byte_97B642[2]; // idb
extern char aPanel01_3[8]; // weak
extern char aFrame_3[]; // idb
extern char aShopwin[]; // idb
extern char aWintitle_2[]; // idb
extern char aPanel01_4[]; // idb
extern char aPanel01_5[]; // idb
extern char aPanel02_0[]; // idb
extern char aClsnor_0[]; // idb
extern char aClsclick_0[]; // idb
extern char aClsover_0[]; // idb
extern char aUnableToCloseF[]; // idb
extern char aError_3[]; // idb
extern char aHttpFiesta_gam[]; // idb
extern char aCreatewindowFa[]; // idb
extern char ClassName[]; // idb
extern int (__stdcall *ForumWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ForumWin::_vftable_)(void *p, char); // weak
extern char aGuildemblempic[16]; // weak
extern char aGuildemblem03d[]; // idb
extern int (__stdcall *GuildEmblemIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildEmblemIcon::_vftable_)(void *p, char); // weak
extern char aGameGuildemble[]; // idb
extern char aFrame_4[]; // idb
extern char aGuildemblemw_0[]; // idb
extern char aTheme_5[6]; // weak
extern char aTheme_6[]; // idb
extern char aIconslot_0[]; // idb
extern char aPanel01_6[]; // idb
extern char aPanel02_1[]; // idb
extern char aPanel03[]; // idb
extern char aWintitle_3[]; // idb
extern char aOutlinetext[]; // idb
extern char aSymboltext01[]; // idb
extern char aNoticetext00[]; // idb
extern char aHelplinkover_1[]; // idb
extern char aHelplinkclic_1[]; // idb
extern char aHelplinknor_2[]; // idb
extern char aClsover_1[]; // idb
extern char aClsclick_1[]; // idb
extern char aClsnor_1[]; // idb
extern char aOkover[]; // idb
extern char aOkclick[]; // idb
extern char aOknor[]; // idb
extern char aOutlinecolorsl[]; // idb
extern char aSymbolemblemsl[]; // idb
extern char aGuildemblem0_0[]; // idb
extern char aEmblemslot[]; // idb
extern char aOutlinepage_ov[]; // idb
extern char aOutlinepage_cl[]; // idb
extern char aOutlinepage_no[]; // idb
extern char aOutlinepage__0[]; // idb
extern char aOutlinepage__1[]; // idb
extern char aOutlinepage__2[]; // idb
extern char aGuildemblemwin[]; // idb
extern int (__stdcall *GuildEmblemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildEmblemWin::_vftable_)(void *p, char); // weak
extern char aSiconS_dds[]; // idb
extern char aSiconS_nif[]; // idb
extern char aBox[4]; // weak
extern char aSiconPngS_png[]; // idb
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<char_const___NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<char_const___NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringMap<NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringMap<NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern char aMixminupgrad_0[]; // idb
extern char aAddmixitem_0[]; // idb
extern char aGameItemmix_ni[]; // idb
extern char aFrame_5[]; // idb
extern char aItemmixwin[]; // idb
extern char aTheme_7[6]; // weak
extern char aTheme_8[]; // idb
extern char aPlan01[]; // idb
extern char aIconslot_1[]; // idb
extern char aPanel01_7[]; // idb
extern char aWintitle_4[]; // idb
extern char aClsclick_2[]; // idb
extern char aClsover_2[]; // idb
extern char aClsnor_2[]; // idb
extern char pcDisable[]; // idb
extern char aOkover_0[]; // idb
extern char aOkclick_0[]; // idb
extern char aOknor_0[]; // idb
extern char aOknor_1[]; // idb
extern char aMixitemslot01[]; // idb
extern char aMixitemslot02[]; // idb
extern char aMaterialslot[]; // idb
extern char aCplmixitem[]; // idb
extern char aSucc_1_nif[]; // idb
extern int (__thiscall *ItemMixDataTab::_vftable_)(void *p, char); // weak
extern int (__stdcall *MixItemIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MixItemIcon::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgWinDrop::_vftable_)(void *p, char); // weak
extern int (__thiscall *DropContents::_vftable_)(void *p, char); // weak
extern int (__stdcall *ItemMixWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemMixWin::_vftable_)(void *p, char); // weak
extern char aGameKdteamscor[]; // idb
extern char aFrame_6[]; // idb
extern char aKdteamscorewin[]; // idb
extern char aTheme_9[]; // idb
extern char aPanel00[]; // idb
extern char aTextround[]; // idb
extern char aFrame_7[]; // idb
extern char aBlueonenumD[]; // idb
extern char aBluetennumD[]; // idb
extern char aBluehnumD[]; // idb
extern char aRedonenumD[]; // idb
extern char aRedtennumD[]; // idb
extern char aRedhnumD[]; // idb
extern char aBlueflag0D[]; // idb
extern char aRedflag0D[]; // idb
extern int (__stdcall *KDTeamScoreWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KDTeamScoreWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiRefObject::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<KeyMap::KeyNode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *KeyMap::_vftable_)(void *p, char); // weak
extern char aSS_6[]; // idb
extern char aSS_7[]; // idb
extern __int16 word_97CA88; // weak
extern __int16 word_97CA8C; // weak
extern char aCgetcurtime[12]; // weak
extern char aCaddsysmsg[11]; // weak
extern char byte_97CAA7; // idb
extern char aCsetenableinpu[16]; // weak
extern char aCscriptmsg[11]; // weak
extern char First2; // idb
extern char aCgetuser[9]; // weak
extern char aCgetremainstat[20]; // weak
extern char aCgethp[7]; // weak
extern char aCgetmaxhp[10]; // weak
extern char aCloadchar[10]; // weak
extern char aCdeletechar[12]; // weak
extern char aCmovechar[10]; // weak
extern char aCgetcharpos[12]; // weak
extern char aCactchar[9]; // weak
extern char aCactskill[10]; // weak
extern char aCgetclass[10]; // weak
extern char aCisduringmove[14]; // weak
extern char aCisattack[10]; // weak
extern char aCgetcharmode[13]; // weak
extern char aCgetmaincharha[19]; // weak
extern char aCmovemainchar[14]; // weak
extern char aCgetqueststatu[16]; // weak
extern char aCloadeffect[12]; // weak
extern char aCloadkfm[9]; // weak
extern char aCshowgroundobj[18]; // weak
extern char aCshowinterface[15]; // weak
extern char aCshowbasicinfo[15]; // weak
extern char aCshowhelpwin[13]; // weak
extern char aCshowcharwin[13]; // weak
extern char aCshowinvenwin[14]; // weak
extern char aCshowskillwin[14]; // weak
extern char aCshowannouncew[17]; // weak
extern char aCshowquestnews[18]; // weak
extern char aCshowminimapsi[20]; // weak
extern char aCshowhpbar[11]; // weak
extern char aCshowspbar[11]; // weak
extern char aCshownpcname[13]; // weak
extern char aCopennpcdialog[15]; // weak
extern char aCclosenpcdialo[16]; // weak
extern char aCopenfreestat[14]; // weak
extern char aCcloseshopwin[14]; // weak
extern char aCenableplaygui[17]; // weak
extern char aCgetwin[8]; // weak
extern char aCgetshowwin[12]; // weak
extern char aCresetcamera[13]; // weak
extern char aCmovecamera[12]; // weak
extern char aCcameraeffect[14]; // weak
extern char aCgetcameractrl[15]; // weak
extern char aCsetcameractrl[15]; // weak
extern char aCcreatesprite[14]; // weak
extern char aCcreatetext[12]; // weak
extern char aCcreatebutton[14]; // weak
extern char aCshowquestwin[14]; // weak
extern char aCpersonalscrip[19]; // weak
extern char aSS_kfm[]; // idb
extern char aS_8[]; // idb
extern int (__thiscall *LuaArgument::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *LuaScript::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<DamageInfo__>::_vftable_)(void *p, char); // weak
extern char a__lua[]; // idb
extern char option[]; // idb
extern char aLua_pathSS[]; // idb
extern char a__script[]; // idb
extern char aLua_path_1[]; // idb
extern char aLua_pathSS_0[]; // idb
extern char aTutorial__lua[]; // idb
extern char aLua_path_2[]; // idb
extern char aLua_pathSS_1[]; // idb
extern char aTutorial__scri[]; // idb
extern char aLua_path_3[]; // idb
extern char aLua_pathSS_2[]; // idb
extern char aNewbieimprove_[]; // idb
extern char aLua_path_4[]; // idb
extern char aLua_pathSS_3[]; // idb
extern char aNewbieimprov_0[]; // idb
extern char aLua_path_5[]; // idb
extern char aLua_pathSS_4[]; // idb
extern char aTutorialTutori[]; // idb
extern char aNewbieimproveN[]; // idb
extern int (__thiscall *Singleton<LuaScriptMgr>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *LuaScriptMgr::_vftable_)(void *p, char); // weak
extern char aNewbieguide[]; // idb
extern char szAreaName[]; // idb
extern char aOpenplayguide_[26]; // weak
extern char aRou[4]; // weak
extern char aMain_0[5]; // weak
extern char aCopenplayguide[15]; // weak
extern char aCopenplaygui_0[27]; // weak
extern char aBil_quest_1[]; // idb
extern int (__thiscall *LuaScriptNewBie::_vftable_)(void *p, char); // weak
extern int (__thiscall *LuaArgumentNewBie::_vftable_)(void *p, char); // weak
extern int (__thiscall *LuaArgumentBIL_QUEST_1::_vftable_)(void *p, char); // weak
extern char aTutorial[]; // idb
extern char aTutorial_0[]; // idb
extern char aMain_1[5]; // weak
extern char aUpdatestep[11]; // weak
extern char aCackmainstep[13]; // weak
extern char aCtutorialenabl[16]; // weak
extern char aCblinkmainmenu[15]; // weak
extern char aCblinkfreestat[15]; // weak
extern char aCblinkitemshop[15]; // weak
extern char aCblinkinven[12]; // weak
extern char aCblinkskillsho[16]; // weak
extern char aCblinkstonesho[16]; // weak
extern char aCblinkskill[12]; // weak
extern char aCblinkshortcut[15]; // weak
extern char aCblinkeffect[13]; // weak
extern char aCremoveblinkef[19]; // weak
extern char aCremoveblinkma[21]; // weak
extern char aCstarttextscre[23]; // weak
extern char aCstoptextscree[22]; // weak
extern char aCblinkquestacc[18]; // weak
extern char aCremovequestbl[24]; // weak
extern char aCshowtutorialm[18]; // weak
extern char aCopenquestcond[23]; // weak
extern char aCclosequestcon[24]; // weak
extern char aCopenboxannoun[20]; // weak
extern char aCcloseboxannou[21]; // weak
extern char aCopentextboxms[19]; // weak
extern char aCclosetextboxm[20]; // weak
extern char aChidenewbietoo[19]; // weak
extern char aCsetitemshopta[16]; // weak
extern char aCisopencharwin[15]; // weak
extern char aCisopenitemsho[16]; // weak
extern char aCishaveitem[12]; // weak
extern char aCisopeninvenwi[16]; // weak
extern char aCisequipitem[13]; // weak
extern char aCisbuystone[12]; // weak
extern char aCisusestone[12]; // weak
extern char aCisendwar[10]; // weak
extern char aCisopenskillsh[17]; // weak
extern char aCislearnskill[14]; // weak
extern char aCisopenskillwi[16]; // weak
extern char aCisselectskill[15]; // weak
extern char aCisregistskill[15]; // weak
extern char aCisendtextscre[23]; // weak
extern char aCisopennpcdial[17]; // weak
extern char aCisopenquestwi[16]; // weak
extern char aClockitemshopi[17]; // weak
extern char aClockstoneshop[18]; // weak
extern char aClockskillshop[18]; // weak
extern char aCsetlockitemse[17]; // weak
extern char aCsetlockitemsh[17]; // weak
extern char aCsetlockstones[18]; // weak
extern char aCsetlockskills[18]; // weak
extern char aCsetlockitem_0[20]; // weak
extern char aCsetlockskil_0[21]; // weak
extern char aCsethidequestg[20]; // weak
extern char aCsetopencharwi[16]; // weak
extern char aCsetopeninvenw[17]; // weak
extern char aCsetopenskillw[17]; // weak
extern char aCsetbuystone[13]; // weak
extern char aCsetusestone[13]; // weak
extern char aCsetregistskil[16]; // weak
extern char aCsetopenquestw[17]; // weak
extern int (__thiscall *LuaScriptTutorial::_vftable_)(void *p, char); // weak
extern int (__thiscall *LuaArgumentTutorial::_vftable_)(void *p, char); // weak
extern int (__thiscall *LuaArgumentTutorialStep::_vftable_)(void *p, char); // weak
extern char aSS_tga[]; // idb
extern char aD_5[]; // idb
extern char aGameMinimon_au[]; // idb
extern char aFrame_8[]; // idb
extern char aMinimonautoite[]; // idb
extern char aTheme_10[6]; // weak
extern char aTheme_11[]; // idb
extern char aPanel01_8[]; // idb
extern char aWintitle_5[]; // idb
extern char aHelplinkclic_2[]; // idb
extern char aHelplinkover_2[]; // idb
extern char aHelplinknor_3[]; // idb
extern char aClsover_3[]; // idb
extern char aClsclick_3[]; // idb
extern char aClsnor_3[]; // idb
extern char aBufficon[]; // idb
extern char aChargedicon[]; // idb
extern char aBufftiptext[]; // idb
extern char aChargedtiptext[]; // idb
extern char aTiptext[]; // idb
extern char aBuffbtnover[]; // idb
extern char aBuffbtnclick[]; // idb
extern char aBuffbtnnor[]; // idb
extern char aChargedbtnover[]; // idb
extern char aChargedbtnclic[]; // idb
extern char aChargedbtnnor[]; // idb
extern char aCancelover[]; // idb
extern char aCancelclick[]; // idb
extern char aCancelnor[]; // idb
extern char aBuffslot02d[]; // idb
extern char aChargedslot02d[]; // idb
extern char aMinimon_autoit[]; // idb
extern int (__stdcall *ItemSlot::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemSlot::_vftable_)(void *p, char); // weak
extern int (__stdcall *MinimonAutoItemUseWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MinimonAutoItemUseWin::_vftable_)(void *p, char); // weak
extern char aMobkillcountwi[]; // idb
extern char aDD_0[]; // idb
extern char aDD[]; // idb
extern int (__stdcall *MobKillCountWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MobKillCountWin::_vftable_)(void *p, char); // weak
extern char aGameMoverupgra[]; // idb
extern char byte_97E0C6; // idb
extern char byte_97E0C7; // idb
extern char aFrame_9[]; // idb
extern char byte_97E0CE; // idb
extern _UNKNOWN unk_97E0CF; // weak
extern char aMoverupgradewi[]; // idb
extern char aTheme_12[6]; // weak
extern _UNKNOWN unk_97E0E6; // weak
extern _UNKNOWN unk_97E0E7; // weak
extern char aTheme_13[]; // idb
extern _UNKNOWN unk_97E0EE; // weak
extern _UNKNOWN unk_97E0EF; // weak
extern char aIconslot_2[]; // idb
extern char aPanel01_9[]; // idb
extern char aPanel02_2[]; // idb
extern char aPanel03_0[]; // idb
extern char aWintitle_6[]; // idb
extern char aHelplinkclic_3[]; // idb
extern char aHelplinkover_3[]; // idb
extern char aHelplinknor_4[]; // idb
extern char aClsclick_4[]; // idb
extern char aClsover_4[]; // idb
extern char aClsnor_4[]; // idb
extern char aOkclick_1[]; // idb
extern char aOkover_1[]; // idb
extern char aOknor_2[]; // idb
extern char aCancelclick_0[]; // idb
extern char aCancelover_0[]; // idb
extern char aCancelnor_0[]; // idb
extern char aMainslot[]; // idb
extern char aSubslot[]; // idb
extern char aMaintext[]; // idb
extern char aSubtext[]; // idb
extern char aText01_3[]; // idb
extern char aMoverupgrade_0[]; // idb
extern char aMoverupgrade_1[]; // idb
extern char aDS[]; // idb
extern char asc_97E208[2]; // weak
extern char asc_97E20C[2]; // weak
extern char aMoverupgrade[]; // idb
extern char aDS_0[]; // idb
extern char aDS_1[]; // idb
extern int (__stdcall *SlotWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SlotWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MoverUpgradeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MoverUpgradeWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<void___CMsgEater__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *CMsgMgr::_vftable_)(void *p, char); // weak
extern char aCam_nif[]; // idb
extern char OutputString[]; // idb
extern char aLoadnifvideo_0[]; // idb
extern char aMycamosc[]; // idb
extern char aFmycamosc[]; // idb
extern char aAllcamosc[]; // idb
extern char aFallcamosc[]; // idb
extern char aEnecamosc[]; // idb
extern char aFenecamosc[]; // idb
extern char aParcamosc[]; // idb
extern char aFparcamosc[]; // idb
extern char aDmgosc[]; // idb
extern int (*Oscillation::_vftable_)(); // weak
extern int (*OscillationEx::_vftable_)(); // weak
extern char aGamePartyscore[]; // idb
extern _UNKNOWN unk_97E857; // weak
extern char aFrame_10[]; // idb
extern _UNKNOWN unk_97E85E; // weak
extern char aPartyscorewi_0[]; // idb
extern char aTheme_14[6]; // weak
extern char aTheme_15[]; // idb
extern char aPanel01_10[]; // idb
extern char aPanel02_3[]; // idb
extern char aPanel03_1[]; // idb
extern char aWintitle_7[]; // idb
extern char aClsover_5[]; // idb
extern char aClsclick_5[]; // idb
extern char aClsnor_5[]; // idb
extern char aHelplinkover_4[]; // idb
extern char aHelplinkclic_4[]; // idb
extern char aHelplinknor_5[]; // idb
extern char aColumnbarnor_0[]; // idb
extern char aColumnbarclick[]; // idb
extern char aColumnbarover[]; // idb
extern char aColumn_2d[]; // idb
extern char aSubtext01[]; // idb
extern char aParty_2dnor[]; // idb
extern char aTitle01over[]; // idb
extern char aTitle01click[]; // idb
extern char aTitle01nor[]; // idb
extern char aTitle02over[]; // idb
extern char aTitle02click[]; // idb
extern char aTitle02nor[]; // idb
extern char aTitle03over[]; // idb
extern char aTitle03click[]; // idb
extern char aTitle03nor[]; // idb
extern char aTitle04over[]; // idb
extern char aTitle04click[]; // idb
extern char aTitle04nor[]; // idb
extern char aTitle05over[]; // idb
extern char aTitle05click[]; // idb
extern char aTitle05nor[]; // idb
extern char aTitle06over[]; // idb
extern char aTitle06click[]; // idb
extern char aTitle06nor[]; // idb
extern char aPartyscorewin[]; // idb
extern char a__2[2]; // weak
extern char aD_6[]; // idb
extern int (__stdcall *PartyScoreWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PartyScoreWin::_vftable_)(void *p, char); // weak
extern int (*Pet::_vftable_[2])(); // weak
extern int (__stdcall *Pet::_vftable_)(int); // weak
extern int (__thiscall *Pet::_vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual); // weak
extern char pkInxName[]; // idb
extern char aEmotion_actpet[]; // idb
extern char aGameMessagew_0[]; // idb
extern char aPanel01_11[]; // idb
extern char aPetnameeditwin[]; // idb
extern _UNKNOWN unk_97EFB7; // weak
extern char aTheme_16[]; // idb
extern char aLotinput_1[]; // idb
extern char aLotinput_2[]; // idb
extern char aBtnnor02_1[]; // idb
extern char aBtnclick02_1[]; // idb
extern char aBtnover02_1[]; // idb
extern char aBtnnor04_0[]; // idb
extern char aBtnclick04_0[]; // idb
extern char aBtnover04_0[]; // idb
extern int (__stdcall *PetNameEditWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PetNameEditWin::_vftable_)(void *p, char); // weak
extern char aW_26[2]; // idb
extern char file[]; // idb
extern char aSCallsUTimeF[]; // idb
extern char aGameStopwatch_[]; // idb
extern char aPanel01_12[]; // idb
extern char aPuzzletimewin[]; // idb
extern char aPanel02_4[]; // idb
extern char aNum01_D[]; // idb
extern char aNum03_D[]; // idb
extern char aNum02_D[]; // idb
extern char aNum04_D[]; // idb
extern int dword_97F2F4; // weak
extern int dword_97F2F8; // weak
extern int dword_97F2FC; // weak
extern int dword_97F300; // weak
extern __int16 word_97F304; // weak
extern char aStopwatchfire[]; // idb
extern int (__stdcall *PuzzleTimeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PuzzleTimeWin::_vftable_)(void *p, char); // weak
extern char aLimitrandomo_0[]; // idb
extern char byte_97F56E; // idb
extern char byte_97F56F; // idb
extern char aGameMessagew_1[]; // idb
extern char byte_97F586[2]; // idb
extern char aFrame_11[]; // idb
extern char aRandomoptcount[]; // idb
extern char aTheme_17[6]; // weak
extern char aTheme_18[]; // idb
extern char aPanel01_13[]; // idb
extern char aWintitle_8[]; // idb
extern char aClsover_6[]; // idb
extern char aClsclick_6[]; // idb
extern char aClsnor_6[]; // idb
extern char aFrontpageover[]; // idb
extern char aFrontpageclick[]; // idb
extern char aFrontpagenor[]; // idb
extern char aNextpageover[]; // idb
extern char aNextpageclick[]; // idb
extern char aNextpagenor[]; // idb
extern char aBtn01over[]; // idb
extern char aBtn01click[]; // idb
extern char aBtn01nor[]; // idb
extern char aBtn02over[]; // idb
extern char aBtn02click[]; // idb
extern char aBtn02nor[]; // idb
extern char aItemslot[]; // idb
extern char aText01_4[]; // idb
extern char aMygoldinput[]; // idb
extern char aD_7[]; // idb
extern char aText02_0[]; // idb
extern char aText03_0[]; // idb
extern char aD_93[]; // idb
extern char aD_94[]; // idb
extern char aD_95[]; // idb
extern int (__stdcall *RandomOptCountRecoverWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RandomOptCountRecoverWin::_vftable_)(void *p, char); // weak
extern char aLimitrandomo_1[]; // idb
extern char byte_97F926; // idb
extern char byte_97F927; // idb
extern char aGameRandomopti[]; // idb
extern _UNKNOWN unk_97F942; // weak
extern char pcFormat; // idb
extern char aLoadfail_7[]; // idb
extern char aGameRandomop_0[]; // idb
extern char aFrame_12[]; // idb
extern char aRandomoption_0[]; // idb
extern char aTheme_19[6]; // weak
extern char aTheme_20[]; // idb
extern char aHelplinknor_6[12]; // weak
extern char aHelplinknor_7[]; // idb
extern char aHelplinkclic_5[]; // idb
extern char aHelplinkover_5[]; // idb
extern char aClsnor_7[]; // idb
extern char aClsclick_7[]; // idb
extern char aClsover_7[]; // idb
extern char aIconslot_3[]; // idb
extern char aWintitle_9[]; // idb
extern char aPanel01_14[]; // idb
extern char aPanel02_5[]; // idb
extern char aPanel03_2[]; // idb
extern char aText01_5[]; // idb
extern char aText02_1[]; // idb
extern char aText03_1[]; // idb
extern char aText04[]; // idb
extern char aItemtext02d[]; // idb
extern char asc_97FA50[]; // idb
extern char aBeforecount02d[]; // idb
extern char asc_97FA64[]; // idb
extern char aAftercount02d[]; // idb
extern char aForgeslot[]; // idb
extern char aOk_2[]; // idb
extern char aRandomoptionpr[]; // idb
extern char pcInxName[]; // idb
extern char aD_96[]; // idb
extern char aD_8[]; // idb
extern char a_1f[]; // idb
extern char a_1f_0[]; // idb
extern char aD_9[]; // idb
extern char aD_10[]; // idb
extern char asc_97FADC[2]; // weak
extern char asc_97FAE0[2]; // weak
extern char asc_97FAE4[2]; // weak
extern char aRandomoption_1[]; // idb
extern char aRandomoptionwi[]; // idb
extern int (__stdcall *ChangeSlotWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChangeSlotWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *RandomOptionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RandomOptionWin::_vftable_)(void *p, char); // weak
extern char aRanking_camera[]; // idb
extern char byte_97FFEF; // idb
extern char aGameIdrankin_0[]; // idb
extern _UNKNOWN unk_980006; // weak
extern _UNKNOWN unk_980007; // weak
extern char aFrame_13[]; // idb
extern _UNKNOWN unk_98000E; // weak
extern _UNKNOWN unk_98000F; // weak
extern char aIdrankingwin_0[]; // idb
extern _UNKNOWN unk_98001D; // weak
extern _UNKNOWN unk_98001E; // weak
extern _UNKNOWN unk_98001F; // weak
extern char aTheme_21[6]; // weak
extern _UNKNOWN unk_980026; // weak
extern _UNKNOWN unk_980027; // weak
extern char aTheme_22[]; // idb
extern _UNKNOWN unk_98002E; // weak
extern _UNKNOWN unk_98002F; // weak
extern char aPanel01_15[]; // idb
extern char aPanel02_6[]; // idb
extern char aPanel03_3[]; // idb
extern char aWintitle_10[]; // idb
extern _UNKNOWN unk_980051; // weak
extern _UNKNOWN unk_980052; // weak
extern _UNKNOWN unk_980053; // weak
extern char aHelplinkover_6[]; // idb
extern _UNKNOWN unk_980061; // weak
extern _UNKNOWN unk_980062; // weak
extern _UNKNOWN unk_980063; // weak
extern char aHelplinkclic_6[]; // idb
extern char aHelplinknor_8[]; // idb
extern char aClsover_8[]; // idb
extern char aClsclick_8[]; // idb
extern char aClsnor_8[]; // idb
extern char aBottomrank[]; // idb
extern char aTab01_off[]; // idb
extern char aTab01_on[]; // idb
extern char aTab02_off[]; // idb
extern char aTab02_on[]; // idb
extern char aTab03_off[]; // idb
extern char aTab03_on[]; // idb
extern char aTab04_off[]; // idb
extern char aTab04_on[]; // idb
extern char aColumnbarnor_1[]; // idb
extern char aColumnbarcli_0[]; // idb
extern char aColumnbarove_0[]; // idb
extern char aColumn_2d_0[]; // idb
extern char aSubtext01_0[]; // idb
extern char aTitle01over_0[]; // idb
extern char aTitle01click_0[]; // idb
extern char aTitle01nor_0[]; // idb
extern char aTitle02over_0[]; // idb
extern char aTitle02click_0[]; // idb
extern char aTitle02nor_0[]; // idb
extern char aTitle03over_0[]; // idb
extern char aTitle03click_0[]; // idb
extern char aTitle03nor_0[]; // idb
extern char aTitle04over_0[]; // idb
extern char aTitle04click_0[]; // idb
extern char aTitle04nor_0[]; // idb
extern char aObject02_0[]; // idb
extern char aTitle[]; // idb
extern char aName_3[]; // idb
extern char aLevel[]; // idb
extern char aJob_0[]; // idb
extern char aPastrecord[]; // idb
extern char aNewrecord[]; // idb
extern char aDamage[]; // idb
extern char aDamagepastval[]; // idb
extern char aDamagenewval[]; // idb
extern char aDamagereceive[]; // idb
extern char aDamagereceivep[]; // idb
extern char aDamagereceiven[]; // idb
extern char aHeal[]; // idb
extern char aHealpastval[]; // idb
extern char aHealnewval[]; // idb
extern char aCleartime[]; // idb
extern char aCleartimepastv[]; // idb
extern char aCleartimenewva[]; // idb
extern char aToprankname_2d[]; // idb
extern char aTopdamage_2d[]; // idb
extern char aPanel02d[]; // idb
extern char aBtnover[]; // idb
extern char aBtnclick[]; // idb
extern char aBtnnor[]; // idb
extern char aColumnbarnor01[]; // idb
extern char aColumnbarcli_1[]; // idb
extern char aColumnbarover0[]; // idb
extern char aColumn05[]; // idb
extern char aSubtext02[]; // idb
extern char aSlidebar_sli_1[]; // idb
extern char aSlidebar_dnb_1[20]; // weak
extern char aSlidebar_dnb_2[]; // idb
extern char aSlidebar_dnb_3[22]; // weak
extern char aSlidebar_dnb_4[]; // idb
extern char aSlidebar_dnb_5[21]; // weak
extern char aSlidebar_dnb_6[]; // idb
extern char aSlidebar_upb_1[20]; // weak
extern char aSlidebar_upb_2[]; // idb
extern char aSlidebar_upb_3[22]; // weak
extern char aSlidebar_upb_4[]; // idb
extern char aSlidebar_upb_5[21]; // weak
extern char aSlidebar_upb_6[]; // idb
extern char aSlidebar_dnb_7[]; // idb
extern char aSlidebar_upb_7[]; // idb
extern char aSlidebar01[]; // idb
extern char aIdrankingwin[]; // idb
extern char aD_11[]; // idb
extern char aGameIdrankingw[]; // idb
extern char aFacecut_mask_2[]; // idb
extern char aFacecut_mask_0[]; // idb
extern char aFill_exp_2d[]; // idb
extern char aFill_exp_2d_0[]; // idb
extern int (__stdcall *FaceCutMaskWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FaceCutMaskWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *IDRankingWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *IDRankingWin::_vftable_)(void *p, char); // weak
extern char aIDonTOpenTheDi[]; // idb
extern int (__stdcall *CCallback<SteamCallback_GetAuthSessionTicketResponse_t_0>::_vftable_)(int pvParam, char __formal, int, int); // weak
extern int (__stdcall *CCallback<SteamCallback_GameOverlayActivated_t_0>::_vftable_)(int pvParam, char __formal, int, int); // weak
extern char aSsteamstarturl[]; // idb
extern char aI64d_4[]; // idb
extern char aQfgt3l9li88ljm[]; // idb
extern char aGameTermextend[]; // idb
extern char byte_980C0B; // idb
extern char aFrame_14[]; // idb
extern char byte_980C12; // idb
extern _UNKNOWN unk_980C13; // weak
extern char aTermextendwi_0[]; // idb
extern _UNKNOWN unk_980C22; // weak
extern char aTheme_23[6]; // weak
extern char aTheme_24[]; // idb
extern char aIconslot_4[]; // idb
extern char aPanel01_16[]; // idb
extern char aPanel02_7[]; // idb
extern char aPanel03_4[]; // idb
extern char aWintitle_11[]; // idb
extern char aHelplinkclic_7[]; // idb
extern char aHelplinkover_7[]; // idb
extern char aHelplinknor_9[]; // idb
extern char aClsclick_9[]; // idb
extern char aClsover_9[]; // idb
extern char aClsnor_9[]; // idb
extern char aOkdisable_0[]; // idb
extern char aOkclick_2[]; // idb
extern char aOkover_2[]; // idb
extern char aOknor_3[]; // idb
extern char aCancelclick_1[]; // idb
extern char aCancelover_1[]; // idb
extern char aCancelnor_1[]; // idb
extern char aMainslot_0[]; // idb
extern char aNoticetext01[]; // idb
extern char aNoticetext02[]; // idb
extern char aNoticetext03[]; // idb
extern char aTermextend_nif[]; // idb
extern char aMoverupgrade_2[]; // idb
extern char aTermextendwin[]; // idb
extern char a04d02d02d02d02[]; // idb
extern int (__stdcall *ItemSlotWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemSlotWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *TermExtendWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *TermExtendWin::_vftable_)(void *p, char); // weak
extern char s2[2]; // idb
extern char asc_98126C[2]; // weak
extern char asc_981270[2]; // idb
extern char a____[32]; // weak
extern _WORD word_981298[48]; // idb
extern char aOlbasbtbgallll[96]; // weak
extern int (*TextFilter::_vftable_)(); // weak
extern int (__stdcall *TextFilterReplace::_vftable_)(int pkStr, int pcFindPos, int pcKey); // weak
extern int (__thiscall *NiTListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_)(void *p, char); // weak
extern char aSlanderfilte_0[]; // idb
extern _UNKNOWN unk_9813A2; // weak
extern char aSlanderfilte_1[]; // idb
extern char pcAlternate[]; // idb
extern char pcKey[]; // idb
extern char aBadnamefilter_[]; // idb
extern char aSBlist_shd_0[]; // idb
extern char aRb_1[]; // idb
extern char aSBlist_shd[]; // idb
extern char aWb_1[]; // idb
extern int (__stdcall *::::TextFilterEmotion::_vftable_)(int pkStr, int pcFindPos); // weak
extern int (__cdecl *ITableBase<SlanderFilter_SlanderFilterTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BadNameFilter_BadNameFilterTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<EmotionFilter_EmotionFilterTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__thiscall *NiTList<TextFilter__>::_vftable_)(void *p, char); // weak
extern int (__cdecl *SlanderFilterTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *EmotionFilterTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BadNameFilterTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__thiscall *Singleton<TextScreenEffect>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<int>::_vftable_)(void *p, char); // weak
extern int (__stdcall *TextScreenWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *TextScreenWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *TextScreenEffect::_vftable_)(void *p, char); // weak
extern char aMiscTutorialma[]; // idb
extern char aPlane01_1[8]; // weak
extern int (__thiscall *Singleton<Tutorial>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<int_NiPointer<PgWin>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *Tutorial::_vftable_)(void *p, char); // weak
extern char aWireabvtemp[]; // idb
extern int (__stdcall *UIBlinkEffect::_vftable_)(int uiFlags); // weak
extern int (__thiscall *UIBlinkEffect::_vftable_)(void *p, char); // weak
extern char Right[4]; // idb
extern char aClick[]; // idb
extern char aOver[]; // idb
extern char aDisable_0[]; // idb
extern char aNor[]; // idb
extern char aClick_0[]; // idb
extern char aOver_0[]; // idb
extern char aDisable_1[]; // idb
extern int (__thiscall *UIUtil::_vftable_)(void *p, char); // weak
extern char aRb_22[3]; // idb
extern char aWb_10[3]; // idb
extern char a1_2_2[]; // idb
extern char aUserAbort[11]; // weak
extern char aZlibError[11]; // weak
extern char aSuccess_0[8]; // weak
extern char aRb_2[]; // idb
extern char a1_2_2_1[]; // idb
extern char aUserAbort_0[11]; // weak
extern char aZlibError_0[11]; // weak
extern char aSuccess_1[8]; // weak
extern char aRb_3[]; // idb
extern char aWb_2[]; // idb
extern char a1_2_2_2[]; // idb
extern char aUserAbort_1[11]; // weak
extern char aZlibError_1[11]; // weak
extern char aSuccess_2[8]; // weak
extern char aRb_4[]; // idb
extern char a1_2_2_3[]; // idb
extern char aUserAbort_2[11]; // weak
extern char aZlibError_2[11]; // weak
extern char aSuccess_3[8]; // weak
extern char a1_2_2_4[]; // idb
extern char a1_2_2_5[]; // idb
extern int (__stdcall *ZlibUtil::_vftable_[2])(int); // weak
extern int (__thiscall *zlibUtil2::_vftable_)(void *p, char); // weak
extern int (__stdcall *AutoSizingTextWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AutoSizingTextWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ClientWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ClientWin::_vftable_)(void *p, char); // weak
extern char asc_981EE4[2]; // idb
extern int (__stdcall *EditWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EditWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *EditWinEx::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EditWinEx::_vftable_)(void *p, char); // weak
extern char aGameMessagew_2[]; // idb
extern char aTheme_25[6]; // weak
extern char aTheme_26[]; // idb
extern char aBtnnor01_0[]; // idb
extern char aBtnclick01_0[]; // idb
extern char aBtnover01_0[]; // idb
extern int (__stdcall *FlexMsgBox::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FlexMsgBox::_vftable_)(void *p, char); // weak
extern int (__stdcall *FrameBoxWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FrameBoxWin::_vftable_)(void *p, char); // weak
extern char aW_27[2]; // idb
extern _UNKNOWN unk_982802; // weak
extern char asc_982804[2]; // idb
extern char aDD_1[]; // idb
extern char aDS_3[]; // idb
extern char aDD_2[]; // idb
extern char aDS_2[]; // idb
extern int (__stdcall *ImeCandListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ImeCandListWin::_vftable_)(void *p, char); // weak
extern char asc_982A74[2]; // idb
extern char asc_982A78[2]; // idb
extern int (__stdcall *ImeEditWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ImeEditWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ImeEditWinEx::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ImeEditWinEx::_vftable_)(void *p, char); // weak
extern char aGameAddfriendl[]; // idb
extern _UNKNOWN unk_982EBF; // weak
extern char aPanel01_17[]; // idb
extern char aInputbox[]; // idb
extern char aTheme_27[6]; // weak
extern char aTheme_28[]; // idb
extern char aTextbox[]; // idb
extern char aBtnnor02_2[]; // idb
extern char aBtnclick02_2[]; // idb
extern char aBtnover02_2[]; // idb
extern char aBtnnor03[]; // idb
extern char aBtnclick03[]; // idb
extern char aBtnover03[]; // idb
extern char aInputbox_0[]; // idb
extern int (__stdcall *InputBox::_vftable_)(int uiFlags); // weak
extern int (__thiscall *InputBox::_vftable_)(void *p, char); // weak
extern char aW_28[2]; // idb
extern _UNKNOWN unk_983186; // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *ListItem::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NiPointer<ListItem>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<PgWinBut__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NiPointer<PgWinText>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ListWin::_vftable_)(void *p, char); // weak
extern char aTexmat[]; // idb
extern char aTexmat_0[]; // idb
extern int (__thiscall *NiBinaryExtraData::_vftable_)(void *p, char); // weak
extern int (__stdcall *MaskedWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MaskedWin::_vftable_)(void *p, char); // weak
extern char aMaskshader[]; // idb
extern char aShportrait[]; // idb
extern char pszName[]; // idb
extern char aTexmat_1[]; // idb
extern char aMaskshader_noa[]; // idb
extern int (__thiscall *MaskShader::_vftable_)(void *p, char); // weak
extern int (__thiscall *MaskShader_NoAlphaBlend::_vftable_)(void *p, char); // weak
extern char aGameMessagew_3[]; // idb
extern char aPanel01_18[]; // idb
extern char aTheme_29[6]; // weak
extern _UNKNOWN unk_9837D6; // weak
extern char aTheme_30[]; // idb
extern char aBtnnor01_1[]; // idb
extern char aBtnclick01_1[]; // idb
extern char aBtnover01_1[]; // idb
extern char aBtnnor02_3[]; // idb
extern char aBtnclick02_3[]; // idb
extern char aBtnover02_3[]; // idb
extern char aBtnnor03_0[]; // idb
extern char aBtnclick03_0[]; // idb
extern char aBtnover03_0[]; // idb
extern char aBtnnor01_2[]; // idb
extern char aBtnclick01_2[]; // idb
extern char aBtnover01_2[]; // idb
extern char aBtnnor02_4[]; // idb
extern char aBtnclick02_4[]; // idb
extern char aBtnover02_4[]; // idb
extern char aBtnnor03_1[]; // idb
extern char aBtnclick03_1[]; // idb
extern char aBtnover03_1[]; // idb
extern char aBtnnor06[]; // idb
extern char aBtnclick06[]; // idb
extern char aBtnover06[]; // idb
extern char aBtnnor07[]; // idb
extern char aBtnclick07[]; // idb
extern char aBtnover07[]; // idb
extern char aBtnnor08[]; // idb
extern char aBtnclick08[]; // idb
extern char aBtnover08[]; // idb
extern char aBtnnor09[]; // idb
extern char aBtnclick09[]; // idb
extern char aBtnover09[]; // idb
extern char aBtnnor02_5[]; // idb
extern char aBtnclick02_5[]; // idb
extern char aBtnover02_5[]; // idb
extern char aBtnnor03_2[]; // idb
extern char aBtnclick03_2[]; // idb
extern char aBtnover03_2[]; // idb
extern char aBtnnor01_3[]; // idb
extern char aBtnclick01_3[]; // idb
extern char aBtnover01_3[]; // idb
extern char aBtnnor02_6[]; // idb
extern char aBtnclick02_6[]; // idb
extern char aBtnover02_6[]; // idb
extern char aBtnnor03_3[]; // idb
extern char aBtnclick03_3[]; // idb
extern char aBtnover03_3[]; // idb
extern char aItemslot_0[]; // idb
extern char aRandomoption_2[]; // idb
extern char aText01_6[]; // idb
extern char asc_983A20[2]; // weak
extern int (__stdcall *MsgBox::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MsgBox::_vftable_)(void *p, char); // weak
extern int (__stdcall *PgWinProxy::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PgWinProxy::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_983E48; // weak
extern char aNor_1[4]; // idb
extern char aClick_1[]; // idb
extern char aOver_1[]; // idb
extern char aNor_0[]; // idb
extern char aClick_2[]; // idb
extern char aOver_2[]; // idb
extern int (__stdcall *SlideBar::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SlideBar::_vftable_)(void *p, char); // weak
extern char aColumn_0[7]; // weak
extern char asc_984060[]; // idb
extern int (__thiscall *boost::detail::sp_counted_base::_vftable_)(void *p, char); // weak
extern int (__thiscall *boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *boost::detail::sp_counted_base_impl<SLWCreateInfo::Item___boost::checked_deleter<SLWCreateInfo::Item>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ColumnBut::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ColumnBut::_vftable_)(void *p, char); // weak
extern char aInvalidMapSetT[]; // idb
extern int (__stdcall *SlideListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SlideListWin::_vftable_)(void *p, char); // weak
extern char aGameSpeechbubb[]; // idb
extern char aFrame_15[]; // idb
extern char aSpeechbubblewi[]; // idb
extern char aCorner01nor[]; // idb
extern char aCorner01arrowu[]; // idb
extern char aCorner01arrowl[]; // idb
extern char aMiddle_up[]; // idb
extern char aCorner02nor[]; // idb
extern char aCorner02arrowu[]; // idb
extern char aCorner02arrowr[]; // idb
extern char aMiddle_left[]; // idb
extern char aCorner03nor[]; // idb
extern char aCorner03arrowd[]; // idb
extern char aCorner03arrowl[]; // idb
extern char aMiddle_down[]; // idb
extern char aCorner04nor[]; // idb
extern char aCorner04arrowd[]; // idb
extern char aCorner04arrowr[]; // idb
extern char aMiddle_right[]; // idb
extern char aCenter_0[]; // idb
extern int (__stdcall *SpeechBubbleWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SpeechBubbleWin::_vftable_)(void *p, char); // weak
extern char aAccountSpawnap[]; // idb
extern char aFrame_16[]; // idb
extern char aTitle_0[]; // idb
extern char aWebpage[]; // idb
extern char aClsnor_10[]; // idb
extern char aClsclick_10[]; // idb
extern char aClsover_10[]; // idb
extern int (__stdcall *WebMsgWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WebMsgWin::_vftable_)(void *p, char); // weak
extern char szAgent[]; // idb
extern char aSS_8[]; // idb
extern char aS_11[]; // idb
extern char aS_12[]; // idb
extern char szVerb[]; // idb
extern const wchar_t sz[]; // idb
extern char aThis_0[]; // idb
extern char aThis_1[]; // idb
extern char aThis_2[]; // idb
extern char String[]; // idb
extern char aWebctrl32_2[]; // idb
extern char aWebctrl32_3[10]; // weak
extern char aWebctrl32_0[]; // idb
extern char aWebctrl32_1[]; // idb
extern int (__stdcall *CWebContainer::_vftable_)(int, int, int); // weak
extern int (__stdcall *CWebContainer::_vftable_)(int, int, int); // weak
extern int (__stdcall *CWebContainer::_vftable_)(int, int, int); // weak
extern int (__stdcall *CWebContainer::_vftable_)(int, int, int); // weak
extern int (__stdcall *CWebContainer::_vftable_)(int this, int riid, int ppv); // weak
extern int (__stdcall *CWebEventSink::_vftable_)(int this, int riid, int ppv); // weak
extern char aGameItemcursor[]; // idb
extern char aItemcurser[]; // idb
extern int (__thiscall *NiZBufferProperty::_vftable_)(void *p, char); // weak
extern int (__thiscall *Singleton<CursorState>::_vftable_)(void *p, char); // weak
extern int (__thiscall *CursorState::_vftable_)(void *p, char); // weak
extern char aA_18[2]; // idb
extern char aS_9[3]; // idb
extern char aM_DH_M[]; // idb
extern char aSS_9[]; // idb
extern char aWt_0[]; // idb
extern char acMsg[]; // idb
extern char aYMD[]; // idb
extern char aIMSP[]; // idb
extern char aDescriptorS[]; // idb
extern char aDateS[]; // idb
extern char aTimeS[]; // idb
extern char asc_9850D8[]; // idb
extern char aV_8[1]; // idb
extern char aLgjv_0[4]; // idb
extern char asc_985240[1]; // idb
extern char aZalbe_2[5]; // idb
extern char aEgekl_0[5]; // idb
extern char byte_9852AC; // idb
extern char aZalbe_1[5]; // idb
extern char aEd_0[2]; // idb
extern char byte_985318; // idb
extern char aGdal_0[4]; // idb
extern char aLlj_0[3]; // idb
extern char byte_985384; // idb
extern char byte_9853A8; // idb
extern char aDbkl_0[4]; // idb
extern char byte_9853F0; // idb
extern char aK_4[1]; // idb
extern char byte_985438; // idb
extern char aKg_0[2]; // idb
extern char asc_985480[1]; // idb
extern char byte_9854A4; // idb
extern char byte_9854C8; // idb
extern char aLjeje_0[5]; // idb
extern char asc_985510[1]; // idb
extern char byte_985534; // idb
extern char byte_985558; // idb
extern char byte_98557C; // idb
extern char aE_8[1]; // idb
extern char aKjd_0[3]; // idb
extern char aKag_0[3]; // idb
extern char aAva_0[3]; // idb
extern char byte_985630; // idb
extern char aBzlevez_0[7]; // idb
extern char byte_985678; // idb
extern char aDlj_0[3]; // idb
extern char aDv_0[2]; // idb
extern char aEv_0[2]; // idb
extern char aVz_0[2]; // idb
extern char aE_7[1]; // idb
extern char asc_985750[1]; // idb
extern char aA_20[1]; // idb
extern char byte_985798; // idb
extern char aVaaka_0[5]; // idb
extern char aDjgeb_0[5]; // idb
extern char byte_985804; // idb
extern char aZ_6[1]; // idb
extern char aB_10[1]; // idb
extern char byte_985870; // idb
extern char byte_985894; // idb
extern char aLbd_0[3]; // idb
extern char byte_9858DC; // idb
extern char byte_985900; // idb
extern char byte_985924; // idb
extern char aDdadjz_0[6]; // idb
extern char aKj_0[2]; // idb
extern char aG_11[1]; // idb
extern char aLdz_0[3]; // idb
extern char aK_3[1]; // idb
extern char aAk_0[2]; // idb
extern char aJ_1[1]; // idb
extern char byte_985A44; // idb
extern char byte_985A68; // idb
extern char aKzg_0[3]; // idb
extern char aVdl_0[3]; // idb
extern char aVjzdlkdak_0[9]; // idb
extern char byte_985AF8; // idb
extern char aKvzl_0[4]; // idb
extern char aDezejzd_0[7]; // idb
extern char byte_985B64; // idb
extern char byte_985B88; // idb
extern char asc_985BAC[1]; // idb
extern char aEkzjdz_0[6]; // idb
extern char aLgjlkedal_0[9]; // idb
extern char byte_985C18; // idb
extern char aE_6[1]; // idb
extern char byte_985C60; // idb
extern char byte_985C84; // idb
extern char aAv_0[2]; // idb
extern char byte_985CCC; // idb
extern char aB_9[1]; // idb
extern char aV_7[1]; // idb
extern char byte_985D38; // idb
extern char aV_6[1]; // idb
extern char aAl_0[2]; // idb
extern char byte_985DA4; // idb
extern char aBl_0[2]; // idb
extern char byte_985DEC; // idb
extern char aZd_0[2]; // idb
extern char aEzzzk_0[5]; // idb
extern char aEz_0[2]; // idb
extern char aBdz_0[3]; // idb
extern char byte_985EA0; // idb
extern char byte_985EC4; // idb
extern char byte_985EE8; // idb
extern char asc_985F0C[1]; // idb
extern char aJk_0[2]; // idb
extern char byte_985F54; // idb
extern char aB_8[1]; // idb
extern char aLzedl_0[5]; // idb
extern char byte_985FC0; // idb
extern char byte_985FE4; // idb
extern char byte_986008; // idb
extern char aZ_5[1]; // idb
extern char byte_986050; // idb
extern char asc_986074[1]; // idb
extern char aEu[3]; // idb
extern char a_release[]; // idb
extern char aAug212017[]; // idb
extern char asc_9860B4[]; // idb
extern char a163140[]; // idb
extern char aFiestaonline[13]; // weak
extern char a46_253_154_134[15]; // weak
extern char pcWindowCaption[]; // idb
extern char first[]; // idb
extern char aIexplore_exe[13]; // weak
extern char aTextdata_shn[]; // idb
extern char pcErrMsg[]; // idb
extern char aTextdata2_shn[]; // idb
extern char aTextData2Initi[]; // idb
extern char aTextdata3_shn[]; // idb
extern char aTextData3Initi[]; // idb
extern char aLoadingNowload[]; // idb
extern char aLoadingProgres[]; // idb
extern char aPginstanceInit[]; // idb
extern char aApphandleIniti[27]; // weak
extern char aInputInitializ[23]; // weak
extern char aFontInitialize[22]; // weak
extern char aNetworkInitial[25]; // weak
extern char aGameDataInitia[27]; // weak
extern char aCharacterManag[35]; // weak
extern char aCharacterResou[44]; // weak
extern char aMapObjectManag[36]; // weak
extern char aDropitemManage[34]; // weak
extern char aMenuTextureMan[38]; // weak
extern char aWorldInitializ[23]; // weak
extern char aEngine3dInitia[26]; // weak
extern char aEffectInitiali[24]; // weak
extern char aSpeechInitiali[24]; // weak
extern char aTextEffectInit[29]; // weak
extern char aDefault_conf[]; // idb
extern char aS_13[]; // idb
extern char aS_14[]; // idb
extern char aSfiesta_ini[]; // idb
extern char aOriginal[]; // idb
extern char last[]; // idb
extern char aSpawnappsOff_[]; // idb
extern char aWindowMode[]; // idb
extern char aSpawnappsDetac[]; // idb
extern int (__cdecl *ITableBase<TextDataType_TextData>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<TextDataType2_TextData2>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<TextDataType3_TextData3>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (*TextData::_vftable_[2])(); // weak
extern int (*TextData2::_vftable_[2])(); // weak
extern int (*TextData3::_vftable_[2])(); // weak
extern int (__thiscall *MainApp::_vftable_)(void *p, char); // weak
extern char aWm_app_fullscr[]; // idb
extern char aApplicationI_0[]; // idb
extern char aClassname_sh_0[]; // idb
extern char aClassname_shnI[]; // idb
extern char aRacenameinfo_s[]; // idb
extern char aRacenameinfo_0[]; // idb
extern char aMobinfo_shn_0[]; // idb
extern char aMobinfo_shnIni[]; // idb
extern char aMobviewinfo__0[]; // idb
extern char aMobviewinfo__1[]; // idb
extern char aNpcviewinfo__0[]; // idb
extern char aNpcviewinfo__1[]; // idb
extern char aRiding_shn_0[]; // idb
extern char aRiding_shnInit[]; // idb
extern char aMovermain_shn[]; // idb
extern char aMovermain_shnI[]; // idb
extern char aMoveruseskill_[]; // idb
extern char aMoveruseskil_0[]; // idb
extern char aMoverhg_shn[]; // idb
extern char aMoverhg_shnIni[]; // idb
extern char aMoverview_shn[]; // idb
extern char aMoverview_shnI[]; // idb
extern char aMoverslotview_[]; // idb
extern char aMoverslotvie_0[]; // idb
extern char aMoverslotchara[]; // idb
extern char aMoverslotcha_0[]; // idb
extern char aMoverability_s[]; // idb
extern char aMoverability_0[]; // idb
extern char aMoveritem_shn[]; // idb
extern char aMoveritem_shnI[]; // idb
extern char aPupmain_shn_0[]; // idb
extern char aPupmain_shnIni[]; // idb
extern char aPupview_shn[]; // idb
extern char aPupview_shnIni[]; // idb
extern char aMoverupgradeef[]; // idb
extern char aMoverupgrade_3[]; // idb
extern char aMapinfo_shn_0[]; // idb
extern char aMapinfo_shnIni[]; // idb
extern char aMapviewinfo__0[]; // idb
extern char aMapviewinfo__1[]; // idb
extern char aMobcoordinate_[]; // idb
extern char aMobcoordinat_0[]; // idb
extern char aIteminfo_shn_0[]; // idb
extern char aIteminfo_shnIn[]; // idb
extern char aItemviewinfo_0[]; // idb
extern char aItemviewinfo_1[]; // idb
extern char aItemviewequi_0[]; // idb
extern char aItemviewequi_1[]; // idb
extern char aItemviewdummy_[]; // idb
extern char aItemviewdumm_0[]; // idb
extern char aActiveskillgro[]; // idb
extern char aActiveskillg_0[]; // idb
extern char aItemactioncond[]; // idb
extern char aItemactionco_0[]; // idb
extern char aActioneffectit[]; // idb
extern char aActioneffect_0[]; // idb
extern char aItemactioneffe[]; // idb
extern char aItemactionef_0[]; // idb
extern char aSeteffect_shn[]; // idb
extern char aSeteffect_shnI[]; // idb
extern char aItemactionef_1[]; // idb
extern char aItemactionef_2[]; // idb
extern char aSetitemname_sh[]; // idb
extern char aSetitemname__0[]; // idb
extern char aItemaction_shn[]; // idb
extern char aItemaction_s_0[]; // idb
extern char aUpgradeinfo__0[]; // idb
extern char aUpgradeinfo__1[]; // idb
extern char aActionviewin_0[]; // idb
extern char aActionviewin_1[]; // idb
extern char aKingdomquestde[]; // idb
extern char aKingdomquest_0[]; // idb
extern char aHairinfo_shn[]; // idb
extern char aHairinfo_shnIn[]; // idb
extern char aHaircolorinfo_[]; // idb
extern char aHaircolorinf_0[]; // idb
extern char aFaceinfo_shn[]; // idb
extern char aFaceinfo_shnIn[]; // idb
extern char aWeaponattrib_0[]; // idb
extern char aWeaponattrib_1[]; // idb
extern char aAbstate_shn_0[]; // idb
extern char aAbstate_shnIni[]; // idb
extern char aAbstateview__0[]; // idb
extern char aAbstateview__1[]; // idb
extern char aSubabstate_s_0[]; // idb
extern char aSubabstate_s_1[]; // idb
extern char aDamagesoundinf[]; // idb
extern char aDamagesoundi_0[]; // idb
extern char aWeapontitled_0[]; // idb
extern char aWeapontitled_1[]; // idb
extern char aCharactertit_1[]; // idb
extern char aCharactertit_2[]; // idb
extern char aProduce_shn[]; // idb
extern char aProduce_shnIni[]; // idb
extern char aProduceview__0[]; // idb
extern char aProduceview__1[]; // idb
extern char aGather_shn_0[]; // idb
extern char aGather_shnInit[]; // idb
extern char aNpcdialogdata_[]; // idb
extern char aNpcdialogdat_0[]; // idb
extern char aGradeitemopt_0[]; // idb
extern char aGradeitemopt_1[]; // idb
extern char aUpeffect_shn[]; // idb
extern char aUpeffect_shnIn[]; // idb
extern char aItemdismantl_0[]; // idb
extern char aItemdismantl_1[]; // idb
extern char aColorinfo_shn[]; // idb
extern char aColorinfo_shnI[]; // idb
extern char aMinihouse_sh_0[]; // idb
extern char aMinihouse_shnI[]; // idb
extern char aItemshopview_0[]; // idb
extern char aItemshopview_1[]; // idb
extern char aChargedeffec_0[]; // idb
extern char aChargedeffec_1[]; // idb
extern char aItemmix_shn[]; // idb
extern char aItemmix_shnIni[]; // idb
extern char aFilterslanderI[]; // idb
extern char aMinihousefur_1[]; // idb
extern char aMinihousefur_2[]; // idb
extern char aMinihouseobj_0[]; // idb
extern char aMinihouseobj_1[]; // idb
extern char aMinihouseend_0[]; // idb
extern char aMinihouseend_1[]; // idb
extern char aWorldmapavatar[]; // idb
extern char aWorldmapavat_0[]; // idb
extern char aMinihousefur_3[]; // idb
extern char aMinihousefur_4[]; // idb
extern char aTownportal_shn[]; // idb
extern char aTownportal_s_0[]; // idb
extern char aEffectviewin_0[]; // idb
extern char aEffectviewin_1[]; // idb
extern char aGuildtournamen[]; // idb
extern char aGuildtournam_0[]; // idb
extern char aGuildtournam_1[]; // idb
extern char aGuildtournam_2[]; // idb
extern char aGuildtournam_3[]; // idb
extern char aGuildtournam_4[]; // idb
extern char aActioneffectin[]; // idb
extern char aActioneffect_1[]; // idb
extern char aDicedividind_0[]; // idb
extern char aDicedividind_1[]; // idb
extern char aMobrandomidlea[]; // idb
extern char aMobrandomidl_0[]; // idb
extern char aGbhouse_shn[]; // idb
extern char aGbhouse_shnIni[]; // idb
extern char aGbdicedividind[]; // idb
extern char aGbdicedividi_0[]; // idb
extern char aCharactertit_3[]; // idb
extern char aCharactertit_4[]; // idb
extern char aMhemotion_shn[]; // idb
extern char aMhemotion_sh_0[]; // idb
extern char aMobkillannounc[]; // idb
extern char aMobkillannou_0[]; // idb
extern char aGtiview_shn_0[]; // idb
extern char aGtiview_shnIni[]; // idb
extern char aDamageeffect_s[]; // idb
extern char aDamageeffect_0[]; // idb
extern char aMapwaypoint__0[]; // idb
extern char aMapwaypoint__1[]; // idb
extern char aMaplinkpoint_0[]; // idb
extern char aMaplinkpoint_1[]; // idb
extern char aBasicinfotitle[]; // idb
extern char aBasicinfotit_0[]; // idb
extern char aBasicinfolink_[]; // idb
extern char aBasicinfolin_0[]; // idb
extern char aBasicinfotip_s[]; // idb
extern char aBasicinfotip_0[]; // idb
extern char aBasicinfotipcy[]; // idb
extern char aBasicinfotip_1[]; // idb
extern char aBasicinfofind_[]; // idb
extern char aBasicinfofin_0[]; // idb
extern char aBasicinfofindu[]; // idb
extern char aBasicinfofin_1[]; // idb
extern char aBasicinfofindw[]; // idb
extern char aBasicinfofin_2[]; // idb
extern char aBelongtypeinfo[]; // idb
extern char aBelongtypein_0[]; // idb
extern char aChargediconite[]; // idb
extern char aChargediconi_0[]; // idb
extern char aChargedmessage[]; // idb
extern char aChargedmessa_0[]; // idb
extern char aChargeddelet_0[]; // idb
extern char aChargeddelet_1[]; // idb
extern char aCollectcard_sh[]; // idb
extern char aCollectcard__0[]; // idb
extern char aCollectcardv_0[]; // idb
extern char aCollectcardv_1[]; // idb
extern char aCollectcardgro[]; // idb
extern char aCollectcardg_0[]; // idb
extern char aCollectcardrew[]; // idb
extern char aCollectcardr_0[]; // idb
extern char aCollectcardtit[]; // idb
extern char aCollectcardt_0[]; // idb
extern char aScriptmsg_shn[]; // idb
extern char aScriptmsg_shnI[]; // idb
extern char aFacecutmsg_shn[]; // idb
extern char aFacecutmsg_s_0[]; // idb
extern char aAttendreward_s[]; // idb
extern char aAttendreward_0[]; // idb
extern char aKqvotedesc_shn[]; // idb
extern char aKqvotedesc_s_0[]; // idb
extern char aKqvotemajority[]; // idb
extern char aKqvotemajori_0[]; // idb
extern char aKqisvote_shn[]; // idb
extern char aKqisvote_shn_I[]; // idb
extern char aKqteam_shn[]; // idb
extern char aKqteam_shn_Ini[]; // idb
extern char aSingledata_s_0[]; // idb
extern char aSingledata_s_1[]; // idb
extern char aMobconditionvi[]; // idb
extern char aMobcondition_0[]; // idb
extern char aMobnofadein_sh[]; // idb
extern char aMobnofadein__0[]; // idb
extern char aMarketsearch_0[]; // idb
extern char aMarketsearch_1[]; // idb
extern char aChrcreateequip[]; // idb
extern char aChrcreateequ_0[]; // idb
extern char aItemmoney_sh_0[]; // idb
extern char aItemmoney_shnI[]; // idb
extern char aChatcolor_sh_0[]; // idb
extern char aChatcolortab_s[]; // idb
extern char aTermextendma_0[]; // idb
extern char aTermextendma_1[]; // idb
extern char aTermextendma_2[]; // idb
extern char aTermextendma_3[]; // idb
extern char aAbstatemsg_shn[]; // idb
extern char aAbstatemsg_s_0[]; // idb
extern char aMinimoninfo__0[]; // idb
extern char aMinimoninfo__1[]; // idb
extern char aMinimonautou_0[]; // idb
extern char aMinimonautou_1[]; // idb
extern char aUseclasstypein[]; // idb
extern char aUseclasstype_0[]; // idb
extern char aChrbasicequip_[]; // idb
extern char aChrbasicequi_0[]; // idb
extern char aBraccupgradein[]; // idb
extern char aBraccupgrade_0[]; // idb
extern char asc_987DC4[3]; // weak
extern char aD_97[3]; // weak
extern char aWin[5]; // weak
extern char aW_4[3]; // weak
extern char aSteam_login[13]; // weak
extern char aI_0[3]; // weak
extern char aU_2[3]; // weak
extern char aP_0[3]; // weak
extern char asc_987DF4[3]; // weak
extern char aOsk_server[12]; // weak
extern char aOsk_store[11]; // weak
extern char aTip[5]; // weak
extern char aC_6[3]; // weak
extern char aG_0[3]; // weak
extern char asc_987E20[3]; // weak
extern char aFace_1[6]; // weak
extern char aM_0[3]; // weak
extern char aT_0[3]; // weak
extern char aN_1[3]; // weak
extern char aS_15[3]; // weak
extern char aA_5[3]; // weak
extern char aApp[5]; // weak
extern char aBP[]; // idb
extern char aBP_0[]; // idb
extern char aBP2[]; // idb
extern char aBP2_0[]; // idb
extern int (__cdecl *ITableBase<RaceName_CharRace>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MapInfo_MapInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<MapInfo_MapInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MapViewInfo_MapViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<MapViewInfo_MapViewInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<UpGradeInfo_UpGradeInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<UpGradeInfo_UpGradeInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<FaceInfo_FaceInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<DmgSndMapByArmorType_DmgSndTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ActionViewInfo_ActionViewTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ProduceInfo_ProduceInfoTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GatherInfo_GatherInfoTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ProduceViewInfo_ProduceViewInfoTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<NpcDialogData_NpcDialogDataTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GradeItemOption_GradeItemOptionTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MiniHouse_MiniHouseTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemShopView_ItemShopViewTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<RIDING_RidePetTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<RIDING_RidePetTable_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<WeaponAttrib_WeaponAttribTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemDismantle_ItemDismantleTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<TownPortal_TownPortalInfoTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<SetItemName_SetItemNameTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<SetEffect_SetEffectTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ActionEffectItem_ActionEffectItemTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemAction_ItemActionTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemActionEffect_ItemActionEffectTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemActionCondition_ItemActionConditionTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<DICE_Dividind_DiceDividIndTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GBHouse_GBHouseTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MobCoordinate_MobCoordinateTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<MobCoordinate_MobCoordinateTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<MobKillAnnounceText_MobKillAnnounceTextTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<GTIView_GTIViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<DamageEffect_DamageEffectTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MapWayPoint_MapWayPointTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MapLinkPoint_MapLinkPointTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BelongTypeInfo_BelongTypeInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ChargedIconItem_ChargedIconItemTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<ChargedIconItem_ChargedIconItemTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ChargedMessageItem_ChargedMsgItemTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<ChargedMessageItem_ChargedMsgItemTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BasicInfoTitle_BasicInfoTitleTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BasicInfoLink_BasicInfoLinkTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BasicInfoTip_BasicInfoTipTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BasicInfoFind_BasicInfoFindTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<CollectCard_CollectCardTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<CollectCardView_CollectCardViewTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<CollectCardReward_CollectCardRewardTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<CollectCardTitle_CollectCardTitleTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<AttendReward_AttendRewardTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<AttendReward_AttendRewardTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverMain_MoverMainTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverUseSkill_MoverUseSkillTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverHG_MoverHGTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverView_MoverViewTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverSlotView_MoverSlotViewTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverAbility_MoverAbilityTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverItem_MoverItemTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<PupMain_PetMainTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<PupView_PetViewTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<KQVoteDesc_KQVoteDescTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<KQIsVote_KQIsVoteTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<KQTeam_KQTeamTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MobConditionView_MobConditionViewTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MobNoFadeIn_MobNoFadeInTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MarketSearchInfo_MarketSearchInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ChrCreateEquip_ChrCreateEquipTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ChatColor_ChatColorTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<TermExtendMatch_TermExtendMatchTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<AbStateMsg_AbStateMsgTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MinimonInfo_MinimonInfoTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemViewDummy_ItemViewDummyTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<UseClassTypeInfo_UseCalssTypeTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ChrBasicEquip_ChrBasicEquipTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ColorInfoType_ColorInfoTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemInfo_ItemInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemViewInfo_ItemViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ItemMoney_ItemMoneyTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ClassName_CharClass>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ActionEffectInfo_ActionEffectInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<HairInfo_HairInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<HairColorInfo_HairColorInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MobInfo_MobInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MobViewInfo_MobViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<MHEmotion_MiniHouseEmotionTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<UpEffectData_UpEffectTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<SubAbStateInfo_SubAbStateInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<SubAbStateInfo_SubAbStateInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ScriptMsg_ScriptMsgTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<FaceCutMsg_FaceCutMsgTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ChargedItemEffect_ChargedEffectTable>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ColorInfoTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemViewEquipTypeInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemMoneyTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CharClass::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ActionEffectInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *HairInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *HairColorInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ShakeEffectViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MHFurnitureObjEffectTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MiniHouseObjAniInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MiniHouseEndureInfoTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MiniHouseFuritureInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MiniHouseEmotionTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *UpEffectTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ScriptMsgTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ChargedEffectTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CharRace::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *FaceInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *DmgSndTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ProduceInfoTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GatherInfoTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *KQDescTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ProduceViewInfoTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *NpcDialogDataTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GradeItemOptionTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MiniHouseTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemShopViewTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *WeaponAttribTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *WorldMapAvatarInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemDismantleTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *TownPortalInfoTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *SetItemNameTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemActionEffectDescTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *SetEffectTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ActionEffectItemTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemActionTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemActionEffectTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemActionConditionTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GuildTournamentStateDescTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GuildTournamentStateTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GTRequireTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *DiceDividIndTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GBDiceDividIndTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GBHouseTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MobRandomIdleAniTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CharacterTitleStateViewTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *GTIViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *DamageEffectTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ActiveSkillGroupTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MapWayPointTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MapLinkPointTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BelongTypeInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ChargedDeletableBuffTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BasicInfoTitleTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BasicInfoLinkTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BasicInfoTipTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BasicInfoTipCycleTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BasicInfoFindTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BasicInfoFindUITab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BasicInfoFindWordTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CollectCardTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CollectCardViewTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CollectCardGroupDescTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CollectCardRewardTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *CollectCardTitleTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverMainTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverUseSkillTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverHGTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverViewTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverSlotViewTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverSlotCharAniTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverAbilityTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverItemTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *PetMainTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *PetViewTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *KQVoteDescTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *KQVoteMajorityRateTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *KQIsVoteTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *KQTeamTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MobConditionViewTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MobNoFadeInTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MarketSearchInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ChrCreateEquipTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MoverUpgradeEffectTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ChatColorTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *TermExtendMatchTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *TermExtendMatchGroupDescTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *AbStateMsgTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MinimonInfoTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MinimonAutoUseItemTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemViewDummyTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *UseCalssTypeTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ChrBasicEquipTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *FaceCutMsgTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ItemViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MobInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MobViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *NPCViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *AbnormalStateInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *AbnormalStateViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *SubAbStateInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MapInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MapViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *UpGradeInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ActionViewTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *RidePetTable::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MobCoordinateTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *MobKillAnnounceTextTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ChargedIconItemTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ChargedMsgItemTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *AttendRewardTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *BRAccUpgradeInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern char aReseleroot[]; // idb
extern char aRooot[]; // idb
extern char aRoot_0[]; // idb
extern char aWall[]; // idb
extern char aFloor_0[]; // idb
extern char aRoof[]; // idb
extern char aRootblock[]; // idb
extern char aT_1[]; // idb
extern char aR_20[]; // idb
extern char aMhbasic[]; // idb
extern char aCollnode[]; // idb
extern char aGeomnode[]; // idb
extern char aPick[]; // idb
extern char aNone_9[]; // idb
extern char aLightambnormal[]; // idb
extern char aLightambmoveok[]; // idb
extern char aLightambmoveno[]; // idb
extern char aLightambmovere[]; // idb
extern char aCharcolinode[]; // idb
extern char a_charshine_[]; // idb
extern char a_charshine_oth[]; // idb
extern int (__thiscall *NiActionData::_vftable_)(void *p, char); // weak
extern char aSS_10[]; // idb
extern char aLoginbackgro_3[]; // idb
extern char aAccountAccount[]; // idb
extern char aSaccountS_tga[]; // idb
extern char aSaccountS_tg_0[]; // idb
extern char aSaccountS_tg_1[]; // idb
extern char aSaccountS_tg_2[]; // idb
extern char aAccountLoginba[]; // idb
extern char aDragon[7]; // weak
extern char aCat[4]; // weak
extern char aSphere01[9]; // weak
extern char aObject05[9]; // weak
extern char aObject049[10]; // weak
extern char aObject04_0[9]; // weak
extern char aLogin_bg_1_c[13]; // weak
extern char aNote[5]; // weak
extern char aLogo02[7]; // weak
extern char aLogo01[7]; // weak
extern char aShadownode_1[]; // idb
extern int dword_98920C; // weak
extern int (__cdecl *off_989210)(int result, int _Val1, int _Val2); // weak
extern int dword_989214; // weak
extern int (__cdecl *off_989218)(int result, int _Val1, int _Val2); // weak
extern int dword_98921C; // weak
extern int (__cdecl *off_989220)(int result, int _Val1, int _Val2); // weak
extern char aConnectworldin[21]; // weak
extern char aWorldnameS[17]; // weak
extern char a33b543b0ca6e7c[29]; // weak
extern char aServer_ack[]; // idb
extern int (__thiscall *std::runtime_error::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::locale::facet::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::ios_base::_vftable_)(void *p, char); // weak
extern int (__stdcall *std::basic_istream<char_std::char_traits<char>>::_vftable_)(char); // weak
extern int (__thiscall *std::basic_ios<char_std::char_traits<char>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::codecvt<char_char_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::ctype<char>::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::system_error::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::ios_base::failure::_vftable_)(void *p, char); // weak
extern char aIos_baseEofbit[21]; // weak
extern char aIos_baseFailbi[22]; // weak
extern char aIos_baseBadbit[21]; // weak
extern int (__thiscall *std::basic_streambuf<char_std::char_traits<char>>::_vftable_)(void *p, char); // weak
extern char aBadLocaleName[16]; // weak
extern char aBadCast[]; // idb
extern int (__thiscall *std::basic_filebuf<char_std::char_traits<char>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *std::basic_ifstream<char_std::char_traits<char>>::_vftable_)(char); // weak
extern _UNKNOWN std::basic_ifstream<char_std::char_traits<char>>::_vbtable_; // weak
extern char aAccountframewo[]; // idb
extern char aLoginbackgro_4[]; // idb
extern char aSError_codeO[]; // idb
extern char aIXI[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<PgWin__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *AccountFrameWork::_vftable_)(int uiFlags); // weak
extern char aLoginworldnetf[]; // idb
extern int (__stdcall *LoginWorldNetFrameWork::_vftable_)(int uiFlags); // weak
extern char aAccountSpawn_0[]; // idb
extern char aFrame_17[]; // idb
extern char aSignupwin[]; // idb
extern char aRegisternor[]; // idb
extern char aRegisterclick[]; // idb
extern char aRegisterover[]; // idb
extern char Operation[]; // idb
extern char aSspawnapps_hb[]; // idb
extern char aAccountSpawn_1[]; // idb
extern char aFrame_18[]; // idb
extern char aSpawnappswin[]; // idb
extern char aTitle_1[]; // idb
extern char aWebpage_0[]; // idb
extern char aWebpage_1[]; // idb
extern char aClsnor_11[]; // idb
extern char aClsclick_11[]; // idb
extern char aClsover_11[]; // idb
extern char aSspawnapps_h_0[]; // idb
extern int (__stdcall *SignUpWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SignUpWin::_vftable_)(void *p, char); // weak
extern int (__cdecl *off_989680)(int, int kParams); // weak
extern int (__stdcall *SpawnAppsWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SpawnAppsWin::_vftable_)(void *p, char); // weak
extern char aAccountLoginin[]; // idb
extern _UNKNOWN unk_989AD1; // weak
extern char aInputpanel[]; // idb
extern char aAccountwin[]; // idb
extern char aLogin_0[]; // idb
extern char aLoginclick[]; // idb
extern char aLoginover[]; // idb
extern char aQuit[]; // idb
extern char aQuitclick[]; // idb
extern char aQuitover[]; // idb
extern char aId[]; // idb
extern char aPassword[]; // idb
extern char aRegisternomal[]; // idb
extern char aRegisterclic_0[]; // idb
extern char aRegisterover_0[]; // idb
extern char aForgotpwnomal[]; // idb
extern char aForgotpwclick[]; // idb
extern char aForgotpwover[]; // idb
extern char aOpen_1[]; // idb
extern char aOpen_2[]; // idb
extern int (__stdcall *AccountWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AccountWin::_vftable_)(void *p, char); // weak
extern char aAccountLoginse[]; // idb
extern char aFrame_20[]; // idb
extern char aWorldselectwin[]; // idb
extern char aPanel01_19[]; // idb
extern char aSelectnor[]; // idb
extern char aSelectclick[]; // idb
extern char aSelectover[]; // idb
extern char aServernamenor_[]; // idb
extern char aServernameclic[]; // idb
extern char aServernameover[]; // idb
extern char aServercongood_[15]; // weak
extern char aServerconbusy_[15]; // weak
extern char aServerconnorma[17]; // weak
extern char aServerconcheck[16]; // weak
extern char aServerconclose[17]; // weak
extern char aS_2d[]; // idb
extern char aBtnleft_nor[]; // idb
extern char aBtnleft_click[]; // idb
extern char aBtnleft_over[]; // idb
extern char aBtnright_nor[]; // idb
extern char aBtnright_click[]; // idb
extern char aBtnright_over[]; // idb
extern char aNum_01[]; // idb
extern char aNum_02[]; // idb
extern char aNum_03[]; // idb
extern char aNum_04[]; // idb
extern char aNum_05[]; // idb
extern char aNum_06[]; // idb
extern char aNum_07[]; // idb
extern char aNum_08[]; // idb
extern char aNum_09[]; // idb
extern char aSWcinfo_hsb[]; // idb
extern char aWB_1[]; // idb
extern char aSWcinfo_hsb_0[]; // idb
extern char aRb_5[]; // idb
extern char aSSorder_sdf[]; // idb
extern char aRb_6[]; // idb
extern char aAccountExit_ni[]; // idb
extern char aFrame_21[]; // idb
extern char aWorldselectexi[]; // idb
extern char aCancelnor_2[]; // idb
extern char aCancelclick_2[]; // idb
extern char aCancelover_2[]; // idb
extern char aAccountOption_[]; // idb
extern char aFrame_19[]; // idb
extern char aOption[]; // idb
extern char aOption_0[]; // idb
extern char aAccountOptions[]; // idb
extern char aPanel01_20[]; // idb
extern char aOptionset[]; // idb
extern char aTheme_31[6]; // weak
extern char aTheme_32[]; // idb
extern char aPanel02_8[]; // idb
extern char aApply[]; // idb
extern char aCls_1[]; // idb
extern char aResolution_0[]; // idb
extern char asc_98A0B8[]; // idb
extern char pkButtonTagName[]; // idb
extern char aWinmodetext[]; // idb
extern char aIXI_0[]; // idb
extern int (__stdcall *WorldSelectExitWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WorldSelectExitWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *WorldSelectOptionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WorldSelectOptionWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *WorldSelectOptionSetWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WorldSelectOptionSetWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *WorldSelectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WorldSelectWin::_vftable_)(void *p, char); // weak
extern char aZoneloginnetfr[]; // idb
extern char aUserinfo_txt[13]; // weak
extern char aUseraccountS[19]; // weak
extern char aCharidD[14]; // weak
extern char aCharnameS[16]; // weak
extern char aCharclassS[17]; // weak
extern int (__stdcall *ZoneLoginNetFrameWork::_vftable_)(int uiFlags); // weak
extern char aCharselectSe_2[]; // idb
extern _UNKNOWN unk_98AAD7; // weak
extern char aCharinfopanel[]; // idb
extern _UNKNOWN unk_98AAE6; // weak
extern _UNKNOWN unk_98AAE7; // weak
extern char aCharselectinfo[]; // idb
extern _UNKNOWN unk_98AAFA; // weak
extern _UNKNOWN unk_98AAFB; // weak
extern char aName_4[]; // idb
extern _UNKNOWN unk_98AB01; // weak
extern _UNKNOWN unk_98AB02; // weak
extern _UNKNOWN unk_98AB03; // weak
extern char aLevel_0[]; // idb
extern char aJob_1[]; // idb
extern char aPosition_0[]; // idb
extern char aHpdark[]; // idb
extern char aSpdark[]; // idb
extern char aD_12[]; // idb
extern int (__stdcall *CharSelectInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharSelectInfoWin::_vftable_)(void *p, char); // weak
extern char aCharselectSe_3[]; // idb
extern char aPlane01_2[]; // idb
extern char aCharselectmenu[]; // idb
extern char aTextpanel[]; // idb
extern char aCreatcharnor[]; // idb
extern char aCreatcharclick[]; // idb
extern char aCreatcharover[]; // idb
extern char aDelcharnor[]; // idb
extern char aDelcharclick[]; // idb
extern char aDelcharover[]; // idb
extern char aStartnor[]; // idb
extern char aStartclick[]; // idb
extern char aStartover[]; // idb
extern char aPrepagenor[]; // idb
extern char aPrepageclick[]; // idb
extern char aPrepageover[]; // idb
extern char aEldpri[7]; // weak
extern int (__stdcall *CharSelectMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharSelectMenuWin::_vftable_)(void *p, char); // weak
extern char aGameMessagew_4[]; // idb
extern char aPanel01_21[]; // idb
extern char aEventfriendcou[]; // idb
extern char aTheme_33[6]; // weak
extern char aTheme_34[]; // idb
extern char aEventfriendwin[15]; // weak
extern int (__stdcall *EventFriendCountWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EventFriendCountWin::_vftable_)(void *p, char); // weak
extern char aSS_12[]; // idb
extern char byte_98B35E; // idb
extern _UNKNOWN unk_98B35F; // weak
extern char aSS_13[]; // idb
extern _UNKNOWN unk_98B36A; // weak
extern _UNKNOWN unk_98B36B; // weak
extern char aSS_14[]; // idb
extern char aColorFfff00SS[]; // idb
extern char aSS_15[]; // idb
extern char aSS_16[]; // idb
extern char aColorFfff00S_0[]; // idb
extern char aColorFfff00S_1[]; // idb
extern char aColorFfff00S_2[]; // idb
extern char aColorFfff00S_3[]; // idb
extern char aSS_17[]; // idb
extern char aSS_18[]; // idb
extern char aColorFfff00S_4[]; // idb
extern char aColorFfff00S_5[]; // idb
extern char aColorFfff00Fro[]; // idb
extern char aColorFfff00F_0[]; // idb
extern char aToSS[]; // idb
extern char aToSS_0[]; // idb
extern char aSS_19[]; // idb
extern char aSS_20[10]; // weak
extern char aColorFfff00S_6[]; // idb
extern char aColorFfff00S_7[]; // idb
extern char aFromSS[]; // idb
extern char aFromSS_0[]; // idb
extern char aToSS_1[]; // idb
extern char aColorFfff00S_8[]; // idb
extern char aS_16[]; // idb
extern char aS_17[]; // idb
extern char src[]; // idb
extern char aDb[5]; // weak
extern char aWS[]; // idb
extern char aW_5[]; // idb
extern char aD_13[5]; // weak
extern char aWS_0[]; // idb
extern char aWS_1[7]; // weak
extern char aWS_2[]; // idb
extern char aW_6[]; // idb
extern char aW_20[]; // idb
extern char aW_21[]; // idb
extern char aV_0[]; // idb
extern char aV_1[]; // idb
extern char aFriendship[]; // idb
extern char aSS_11[]; // idb
extern char aColor_3[]; // idb
extern char Source[]; // idb
extern char aP_7[]; // idb
extern char aP_8[]; // idb
extern char aG_6[]; // idb
extern char aG_7[]; // idb
extern char aA_15[]; // idb
extern char aA_16[]; // idb
extern char asc_98B5F8[]; // idb
extern char asc_98B5FC[]; // idb
extern char aR_22[]; // idb
extern char aR_23[]; // idb
extern char aDb_0[]; // idb
extern char asc_98B60C[]; // idb
extern char asc_98B610[]; // idb
extern char aN_2[]; // idb
extern char aN_3[]; // idb
extern char aContract[]; // idb
extern char aServer[]; // idb
extern char aGftGrm0[9]; // weak
extern char aGftGrm1[9]; // weak
extern char aGftEng0[9]; // weak
extern char aGftGrm2[9]; // weak
extern char aGftGrm3[9]; // weak
extern char aGftGrm4[9]; // weak
extern char aGftFra0[9]; // weak
extern char aGftGrm5[9]; // weak
extern char aGftSpa0[9]; // weak
extern char aGftFra1[9]; // weak
extern char aGftGrm6[9]; // weak
extern char aGftIta0[9]; // weak
extern char aGftEng1[9]; // weak
extern char aGftGrm7[9]; // weak
extern char aGftFra2[9]; // weak
extern char aEnid[5]; // weak
extern char aPagel[6]; // weak
extern char aIsya[5]; // weak
extern char aJenira[7]; // weak
extern char aFriendship_0[]; // idb
extern char aAttack[]; // idb
extern char aLooting[]; // idb
extern char aPm_1[]; // idb
extern char aTrade[]; // idb
extern char aWhisper[]; // idb
extern char aW_7[]; // idb
extern char asc_98B738[]; // idb
extern char aStick[]; // idb
extern char aAssist[]; // idb
extern char aAutorun[]; // idb
extern char aHpston[]; // idb
extern char aSpston[]; // idb
extern char aIgnore[]; // idb
extern char aVote[]; // idb
extern char aNote_0[]; // idb
extern char aGoto_0[]; // idb
extern char aAmblight[]; // idb
extern char aFdel[]; // idb
extern char aAction_0[]; // idb
extern char aGo[]; // idb
extern char aShowchr[]; // idb
extern char aHidechr[]; // idb
extern char aZoomrate[]; // idb
extern char aKillme[]; // idb
extern char aZoommin[]; // idb
extern char aZoommax[]; // idb
extern char aTon[]; // idb
extern char aToff[]; // idb
extern char aGm[]; // idb
extern char aShopwin_0[]; // idb
extern char aSenddt[7]; // weak
extern char aTimetest[]; // idb
extern char aTime_2[]; // idb
extern char aOnedaytime[]; // idb
extern char aRun15[6]; // weak
extern char aEffecton[9]; // weak
extern char aEffectoff[10]; // weak
extern char aGetdir[]; // idb
extern char aSFFF[]; // idb
extern char aGetpos[]; // idb
extern char aSFFF_0[13]; // weak
extern char aFogon[]; // idb
extern char aFogoff[]; // idb
extern char aDlighton[]; // idb
extern char aDlightoff[]; // idb
extern char aBeautyshop[]; // idb
extern char aShowhp[]; // idb
extern char aHidehp[]; // idb
extern char aOpenkq[]; // idb
extern char aDecal_0[]; // idb
extern char aMinearea100_ni[]; // idb
extern char aRideon[]; // idb
extern char aRideoff[]; // idb
extern char aSound[]; // idb
extern char aSndmin[]; // idb
extern char aMinFMaxF[]; // idb
extern char aSndmax[]; // idb
extern char aMinFMaxF_0[]; // idb
extern char aSndinfo[]; // idb
extern char aMinFMaxF_1[]; // idb
extern char aI_3[]; // idb
extern char asc_98B948[]; // idb
extern _UNKNOWN unk_98B950; // weak
extern char byte_98B953; // idb
extern char aA_4[2]; // idb
extern char byte_98B956[2]; // idb
extern char aMDHMS[]; // idb
extern char aTimeS_0[]; // idb
extern char aShortcutsubwin[]; // idb
extern char aShortcutsubw_0[]; // idb
extern char aDicegamenpcdlg[]; // idb
extern char aNpcdialogwin[]; // idb
extern char aM_pkmhinputpas[]; // idb
extern char aReairwinError[]; // idb
extern char aWelcomemsgwin[]; // idb
extern char aClearM_pkmhinp[]; // idb
extern char aClearM_pkmhann[]; // idb
extern char aClearM_pkmhjoi[]; // idb
extern char aClearM_pkmhj_0[]; // idb
extern char aClearM_pkmhj_1[]; // idb
extern char aClearM_pkmhinf[]; // idb
extern char aClearM_pkmhset[]; // idb
extern char aClearM_pkmhpor[]; // idb
extern char aClearM_pkmhgue[]; // idb
extern char aClearM_pkmhedi[]; // idb
extern char aClearM_pkmhmin[]; // idb
extern char aClearM_pkmhite[]; // idb
extern int (__thiscall *NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_)(void *p, char); // weak
extern char aMapSetTTooLong[]; // idb
extern char aPrdctsucc[]; // idb
extern char pcEffectName[]; // idb
extern char asc_98BC70[12]; // idb
extern char aGoddesswing[]; // idb
extern char aD_EmptySpace[]; // idb
extern char aD_[]; // idb
extern char aWall_0[]; // idb
extern char aFloor_1[]; // idb
extern char aRoof_0[]; // idb
extern char asc_98BCD8[2]; // idb
extern _UNKNOWN unk_98BCDA; // weak
extern char pcPassWord; // idb
extern char aPgfm_charinv_l[]; // idb
extern _UNKNOWN unk_98BCEF; // weak
extern char aPgfm_charinv_u[]; // idb
extern char aAdminlevel[]; // idb
extern char aAura120[8]; // weak
extern char aAura100[]; // idb
extern char aMinigame[9]; // weak
extern char a________[9]; // weak
extern char aServer_ack_0[11]; // weak
extern char aOpendlg[8]; // weak
extern char aHolyreward_req[15]; // weak
extern char aLinkto[7]; // weak
extern char aDD_3[]; // idb
extern char aQuest_ack[10]; // weak
extern char aLogout[7]; // weak
extern char aBeautyshop_0[11]; // weak
extern char aGetin[6]; // weak
extern char aWeddinghall[12]; // weak
extern char aGladiator[10]; // weak
extern char aKnight[7]; // weak
extern char aHolyknight[11]; // weak
extern char aGuardian[9]; // weak
extern char aSharpshooter[13]; // weak
extern char aRanger[7]; // weak
extern char aWarrock[8]; // weak
extern char aWizard[7]; // weak
extern char aNpcact[7]; // weak
extern char aMsgbox[]; // idb
extern char aMhguestbookwin[15]; // weak
extern char aMheditroomwin[14]; // weak
extern char aMhguestbookw_0[15]; // weak
extern char aMheditroomwi_0[14]; // weak
extern char pString[]; // idb
extern char aPetsetnamecanc[]; // idb
extern int (__thiscall *NiIntegerExtraData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<PgWin__>_PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_)(void *p, char); // weak
extern char aI64d[]; // idb
extern int (__thiscall *NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<PgWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<ScriptBtn__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildJoinReqTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildJoinReqTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildJoinReqTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildJoinReqTask::_vftable_)(void *p, char); // weak
extern char aKdmine[]; // idb
extern char aSD_5[]; // idb
extern char cName; // idb
extern char byte_98C03E[2]; // idb
extern char aS_22[]; // idb
extern char byte_98C047; // idb
extern char aMarketsearchta[]; // idb
extern char aMarketsearch_2[]; // idb
extern char aMarketsearch_3[]; // idb
extern char aMarketsearchme[]; // idb
extern char aMarketsearch_4[]; // idb
extern char aMarketsearch_5[]; // idb
extern char aMhguestbookw_1[]; // idb
extern char byte_98C0C3; // idb
extern char aMheditroomwi_1[]; // idb
extern char byte_98C0D2; // idb
extern _UNKNOWN unk_98C0D3; // weak
extern char aItemMallWebKey[]; // idb
extern char aChar_dead_menu[]; // idb
extern _UNKNOWN unk_98C109; // weak
extern char aKq_g_boss[10]; // weak
extern char aRegen[]; // idb
extern char aAura120_0[8]; // weak
extern char aAura100_0[]; // idb
extern char aAura120_1[8]; // weak
extern char aAura100_1[]; // idb
extern char aRegen_0[]; // idb
extern char aSS_21[10]; // weak
extern char aColorFfff00S_9[]; // idb
extern char aSS_22[]; // idb
extern char aS_18[]; // idb
extern char aS_19[]; // idb
extern char aSS_23[]; // idb
extern char aIDonTOpenThe_0[]; // idb
extern char aPet_st01_1[]; // idb
extern char aPet_st01[]; // idb
extern char aPet_fi01[]; // idb
extern char aPet_fi01_0[]; // idb
extern char aG_pkmainchar_o[]; // idb
extern char aAura120_3[]; // idb
extern char aAura120_2[]; // idb
extern char aHavenTChar_0[]; // idb
extern char aHavenTChar[]; // idb
extern char aS_20[]; // idb
extern char aGroundstrike[13]; // weak
extern char aOn_nc_bat_sk_0[]; // idb
extern char aOn_nc_bat_some[]; // idb
extern char aRevival01[10]; // weak
extern char aRevival01_0[10]; // weak
extern char aRevival01_1[10]; // weak
extern char aRevival01_2[10]; // weak
extern char aRevival01_3[10]; // weak
extern char aOn_nc_bat_skil[]; // idb
extern char aS_21[]; // idb
extern char aUnknownText[]; // idb
extern char aUnknownText_0[]; // idb
extern char aUnknownText_1[13]; // weak
extern char aSkilllevelup[13]; // weak
extern char aSkilllevelup_0[]; // idb
extern char aSummonmate01[13]; // weak
extern char aSErrcodeD[]; // idb
extern char aRevivaltarget[]; // idb
extern char aRevivaltarge_0[]; // idb
extern char aUnknown_4[8]; // weak
extern char aHpsoulstone[]; // idb
extern char aSpsoulstone[]; // idb
extern char aHpsoulstone_0[]; // idb
extern char aSpsoulstone_0[]; // idb
extern char aDbError_1[9]; // weak
extern char aDbError_2[10]; // weak
extern char aSkilllevelup_1[]; // idb
extern char aAura100_2[]; // idb
extern char aSkilllevelup_2[]; // idb
extern char aAura100_3[]; // idb
extern char asc_98C42C[]; // idb
extern char asc_98C430[]; // idb
extern char asc_98C434[]; // idb
extern char asc_98C438[]; // idb
extern char aUnknownText_2[]; // idb
extern char aUnknownText_3[]; // idb
extern char aUnknownText_4[]; // idb
extern char aUnknownText_5[13]; // weak
extern char aUnknownText_6[]; // idb
extern char aUnknownText_7[]; // idb
extern char aUnknown_5[]; // idb
extern char aUnknownText_8[]; // idb
extern char aUnknownText_9[]; // idb
extern char aRevivaltarge_1[]; // idb
extern char a_________0[9]; // weak
extern char a_________1[]; // idb
extern char aInmyhome_repai[]; // idb
extern char aInmyhome_rep_0[]; // idb
extern char aErrorD[]; // idb
extern char aI64d_5[]; // idb
extern char byte_98C554; // weak
extern char aI64d_6[]; // idb
extern char byte_98C560; // weak
extern char aI64d_7[]; // idb
extern char byte_98C56C; // weak
extern char aI64d_8[]; // idb
extern char byte_98C578; // weak
extern char aI64d_9[]; // idb
extern char byte_98C584; // weak
extern char aI64d_10[]; // idb
extern char byte_98C590; // weak
extern char aI64d_11[]; // idb
extern char byte_98C59C; // weak
extern char aI64d_12[]; // idb
extern char byte_98C5A8; // weak
extern char aSS___[11]; // weak
extern char aSS_24[]; // idb
extern char aSS_25[]; // idb
extern char aNone_2[5]; // weak
extern char aGround[7]; // weak
extern char aHairlink[9]; // weak
extern char aChest[6]; // weak
extern char aNone_3[5]; // weak
extern char aGround_0[7]; // weak
extern char aHairlink_0[9]; // weak
extern char aChest_0[6]; // weak
extern char aNone_4[5]; // weak
extern char aGround_1[7]; // weak
extern char aHairlink_1[9]; // weak
extern char aChest_1[6]; // weak
extern char aNone_5[5]; // weak
extern char aGround_2[7]; // weak
extern char aHairlink_2[9]; // weak
extern char aChest_2[6]; // weak
extern char aD___ReadOk[]; // idb
extern char aRcvOn_nc_sce_0[]; // idb
extern char aSS_26[]; // idb
extern char aScenario_npcch[]; // idb
extern char aRcvOn_nc_scena[]; // idb
extern char aPet_st01_2[]; // idb
extern char aPet_st01_0[]; // idb
extern char aPet_fi01_2[]; // idb
extern char aPet_fi01_1[]; // idb
extern char aMarketsearch_6[]; // idb
extern char aMarketsearch_7[]; // idb
extern char aMarketsearch_8[]; // idb
extern char aPopupdialognpc[]; // idb
extern char aPopupdialogn_0[]; // idb
extern char aErrorChatcolor[]; // idb
extern char aChargedoff[]; // idb
extern char aErrorClassChan[]; // idb
extern char aSSS_2[]; // idb
extern char aSS_0[]; // idb
extern int (__stdcall *ISingletonTask<ItemUseTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<ItemUseTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ItemUseTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemUseTask::_vftable_)(void *p, char); // weak
extern int (__thiscall *EffectObjectMgr::_vftable_)(void *p, char); // weak
extern int (__thiscall *AreaInfoMgr::_vftable_)(void *p, char); // weak
extern char aActpos[]; // idb
extern char aGameframework[]; // idb
extern char byte_98C89A; // idb
extern char byte_98C89B; // idb
extern char byte_98C89C[4]; // idb
extern char aSloadingS_png[]; // idb
extern char aR_4[]; // idb
extern char aSloadingS_tga[]; // idb
extern char aR_5[]; // idb
extern char aSloadingS_pn_0[]; // idb
extern char aR_6[]; // idb
extern char aSloadingS_tg_0[]; // idb
extern char aLoadingNowlo_0[]; // idb
extern char aSS_27[]; // idb
extern char aI64d_13[]; // idb
extern char aI64d_S_S_S[]; // idb
extern char aI64d_S_S[]; // idb
extern char aI64d_S[]; // idb
extern char aColor_5[]; // idb
extern char asc_98C960[]; // idb
extern int (__thiscall *NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<IOptionBase__>_IOptionBase__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GameFrameWork::_vftable_)(int uiFlags); // weak
extern char aGameIconmateri[]; // idb
extern char aPlane01_3[8]; // weak
extern char aGameActionwi_0[]; // idb
extern char aFrame_23[]; // idb
extern char aActionwin_0[]; // idb
extern char aTheme_37[6]; // weak
extern char aTheme_38[]; // idb
extern char aIconslot_6[]; // idb
extern char aWintitle_13[]; // idb
extern char aPanel01_23[]; // idb
extern char aPanel02_10[]; // idb
extern char aTab00off_0[]; // idb
extern char aTab00on_0[]; // idb
extern char aTab01off_0[]; // idb
extern char aTab01on_0[]; // idb
extern char aNum01_0[]; // idb
extern char aClsnor_13[]; // idb
extern char aClsclick_13[]; // idb
extern char aClsover_13[]; // idb
extern char aHelplinknor_12[12]; // weak
extern char aHelplinknor_13[]; // idb
extern char aHelplinkclic_9[]; // idb
extern char aHelplinkover_9[]; // idb
extern char aTitle01_0[]; // idb
extern char aTitle02[]; // idb
extern char aSIconAction000[]; // idb
extern char aIconslot03d_0[]; // idb
extern char aIconslot03d_1[]; // idb
extern char aSpston_0[7]; // weak
extern char aAttack_0[7]; // weak
extern char aSS_28[]; // idb
extern char aGameActionwin_[]; // idb
extern char aFrame_22[]; // idb
extern char aPremiumactionw[]; // idb
extern char aTheme_35[6]; // weak
extern char aTheme_36[]; // idb
extern char aIconslot_5[]; // idb
extern char aWintitle_12[]; // idb
extern char aPanel01_22[]; // idb
extern char aPanel02_9[]; // idb
extern char aTab00off[]; // idb
extern char aTab00on[]; // idb
extern char aTab01off[]; // idb
extern char aTab01on[]; // idb
extern char aNum01[]; // idb
extern char aClsnor_12[]; // idb
extern char aClsclick_12[]; // idb
extern char aClsover_12[]; // idb
extern char aHelplinknor_10[12]; // weak
extern char aHelplinknor_11[]; // idb
extern char aHelplinkclic_8[]; // idb
extern char aHelplinkover_8[]; // idb
extern char aTitle01[]; // idb
extern char aIconslot03d[]; // idb
extern char aSIconS_dds[]; // idb
extern char aSIconS_dds_0[]; // idb
extern char aActionwin_prem[]; // idb
extern char aActionwin[]; // idb
extern int (__stdcall *PremiumActionIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PremiumActionIcon::_vftable_)(void *p, char); // weak
extern int (__stdcall *ActionInvTabButWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ActionInvTabButWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ActionIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ActionIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ActionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ActionWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *PremiumActionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PremiumActionWin::_vftable_)(void *p, char); // weak
extern char aAnnouncewin[]; // idb
extern char aW_8[]; // idb
extern _UNKNOWN unk_98D8CE; // weak
extern int (__thiscall *PgFadeTextGeometry::_vftable_)(void *p, char); // weak
extern int (__stdcall *AnnounceWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AnnounceWin::_vftable_)(void *p, char); // weak
extern char aGameAttendstam[]; // idb
extern char aLoadfail_8[]; // idb
extern char aGameAttendst_0[]; // idb
extern char aBasestamp[]; // idb
extern char aSuccessstamp[]; // idb
extern char aSuccessstamp00[]; // idb
extern char aFailstamp[]; // idb
extern char aMonth_0[]; // idb
extern char aSlash[]; // idb
extern char asc_98DD60[2]; // weak
extern char aDay_0[]; // idb
extern char aGameAttendst_1[]; // idb
extern char aLoadfail_9[]; // idb
extern char aGameAttendst_2[]; // idb
extern char aBasestamp_0[]; // idb
extern char aSuccessstamp_0[]; // idb
extern char aSuccessstamp_1[]; // idb
extern char aFailstamp_0[]; // idb
extern char aGiftdisablebtn[]; // idb
extern char aGiftbtnnor[]; // idb
extern char aGiftbtnclick[]; // idb
extern char aGiftbtnnor_0[]; // idb
extern char aMissoncomplete[]; // idb
extern char aMissoncomple_0[]; // idb
extern char aMonth_1[]; // idb
extern char aSlash_0[]; // idb
extern char asc_98DE50[2]; // weak
extern char aDay_1[]; // idb
extern char aAttendreward_n[]; // idb
extern char aGameAttendwin_[]; // idb
extern char aLoadfail_10[]; // idb
extern char aGameAttendwi_0[]; // idb
extern char aFrame_24[6]; // weak
extern char aFrame_25[]; // idb
extern char aAttendcheckwin[]; // idb
extern char aPanel01_24[]; // idb
extern char aClosebtnnor[]; // idb
extern char aClosebtnclick[]; // idb
extern char aClosebtnover[]; // idb
extern char aWintitle_14[]; // idb
extern char aText02_2[]; // idb
extern char aText01_7[]; // idb
extern char aStart_1[]; // idb
extern char aFrame_26[]; // idb
extern char aAttendrewardfu[]; // idb
extern int (__thiscall *AttendCheckBut::_vftable_)(void *p, char); // weak
extern int (__stdcall *AttendCheckWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AttendCheckWin::_vftable_)(void *p, char); // weak
extern char aGameAttendbutt[]; // idb
extern char aInertnor[]; // idb
extern char aInert00_nor[]; // idb
extern char aAttendbutton[]; // idb
extern char aInertnor_0[]; // idb
extern char aInert00_nor_0[]; // idb
extern char aInert00_click[14]; // weak
extern char aInertclick[]; // idb
extern char aActivenor[]; // idb
extern char aActive00_nor[]; // idb
extern char aAcctive00_clic[16]; // weak
extern char aAcctiveclick[]; // idb
extern char aAttendbuttonef[]; // idb
extern int (__stdcall *AttendIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AttendIconWin::_vftable_)(void *p, char); // weak
extern char aGameAttendmsg_[]; // idb
extern char aLoadfail_11[]; // idb
extern char aGameAttendms_0[]; // idb
extern char aFrame_27[6]; // weak
extern char aFrame_28[]; // idb
extern char aAttendrewardwi[]; // idb
extern char aClosebtnnor_0[]; // idb
extern char aClosebtnclic_0[]; // idb
extern char aClosebtnover_0[]; // idb
extern char aTitle_2[]; // idb
extern char aPanel01_25[]; // idb
extern char aText01_8[]; // idb
extern char aIconslot_7[]; // idb
extern char aImage[]; // idb
extern char aText02_3[]; // idb
extern char aOkbtnnor[]; // idb
extern char aOkbtnclick[]; // idb
extern char aOkbtnover[]; // idb
extern int (__stdcall *AttendRewardWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AttendRewardWin::_vftable_)(void *p, char); // weak
extern char aBasicinfotipwi[]; // idb
extern _UNKNOWN unk_98E7D8; // weak
extern int (__stdcall *BasicInfoTipWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *BasicInfoTipWin::_vftable_)(void *p, char); // weak
extern char aGameBuffdebuff[]; // idb
extern char aBuffbox[8]; // weak
extern char aDebuffbox[10]; // weak
extern char aChargedbuff[12]; // weak
extern char aStatusbuffwin[]; // idb
extern char aResizebox[]; // idb
extern char aCharbuffbox00[]; // idb
extern char aCharbuffbox0_0[]; // idb
extern char aChardebuffbox0[]; // idb
extern char aChardebuffbo_0[16]; // weak
extern char aChargedbuffbox[]; // idb
extern char aChargedbuffb_0[15]; // weak
extern char aSSS_4[]; // idb
extern char asc_98EAE4[2]; // weak
extern char aSS_29[]; // idb
extern char aSSS_3[]; // idb
extern char aSS_30[]; // idb
extern char aS_23[]; // idb
extern char aS_24[]; // idb
extern int (__stdcall *StatusBuffWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StatusBuffWin::_vftable_)(void *p, char); // weak
extern char aGameCalculator[]; // idb
extern char aFrame_29[]; // idb
extern _UNKNOWN unk_98ED76; // weak
extern _UNKNOWN unk_98ED77; // weak
extern char aCalculatorwi_0[]; // idb
extern _UNKNOWN unk_98ED86; // weak
extern _UNKNOWN unk_98ED87; // weak
extern char aPanel01_26[]; // idb
extern char aPanel02_11[]; // idb
extern char aOknor_4[]; // idb
extern _UNKNOWN unk_98ED9E; // weak
extern char aOkclick_3[]; // idb
extern char aOkover_3[]; // idb
extern char aCancelnor_3[]; // idb
extern char aCancelclick_3[]; // idb
extern char aCancelover_3[]; // idb
extern char aCalnum02d[]; // idb
extern char aD_14[]; // idb
extern char aCalnum000[]; // idb
extern char a00_0[3]; // weak
extern char aCalmax[]; // idb
extern char aM_1[2]; // weak
extern char aCalclear[]; // idb
extern char aC_7[2]; // weak
extern char aCaltex[]; // idb
extern char aCalnuminput[]; // idb
extern char aPlusnor[]; // idb
extern char aPlusclick[]; // idb
extern char aPlusover[]; // idb
extern char aMinusnor[]; // idb
extern char aMinusclick[]; // idb
extern char aMinusover[]; // idb
extern char aU_14[]; // idb
extern int (__stdcall *CalculatorWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CalculatorWin::_vftable_)(void *p, char); // weak
extern char aGameProductbar[]; // idb
extern char aGameCastingbar[20]; // weak
extern char aPanel01_27[]; // idb
extern char aCastingprogres[]; // idb
extern char aPanel02_12[]; // idb
extern char aFill_hp[]; // idb
extern char aFill_hp_start[]; // idb
extern char aFill_hp_end[]; // idb
extern int (__stdcall *CastingProgressWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CastingProgressWin::_vftable_)(void *p, char); // weak
extern char a04d02d02d02d_0[]; // idb
extern char byte_98F381; // idb
extern _UNKNOWN unk_98F382; // weak
extern _UNKNOWN unk_98F383; // weak
extern char aSS_31[]; // idb
extern _UNKNOWN unk_98F38A; // weak
extern _UNKNOWN unk_98F38B; // weak
extern char aS_25[]; // idb
extern _UNKNOWN unk_98F391; // weak
extern _UNKNOWN unk_98F392; // weak
extern char byte_98F393; // idb
extern char aGameComitemwin[]; // idb
extern char aPanel01_28[]; // idb
extern char aChargeditemwin[]; // idb
extern char byte_98F3BF; // idb
extern char aPanel02_13[]; // idb
extern char aClsclick_14[]; // idb
extern char byte_98F3D1[3]; // idb
extern char aClsover_14[]; // idb
extern char aClsnor_14[]; // idb
extern char aHelplinknor_14[12]; // weak
extern char aHelplinkcli_10[]; // idb
extern char aHelplinkove_10[]; // idb
extern char aHelplinknor_15[]; // idb
extern char aWintitle_15[]; // idb
extern char aTheme_39[6]; // weak
extern char aTheme_40[]; // idb
extern char aSlot02d[]; // idb
extern char aItemtxt02d[]; // idb
extern char aItemuseterm02d[]; // idb
extern char aPanel03_5[]; // idb
extern char aPrepageover_0[]; // idb
extern char aPrepageclick_0[]; // idb
extern char aPrepagenor_0[]; // idb
extern char aNextpageover_0[]; // idb
extern char aNextpageclic_0[]; // idb
extern char aNextpagenor_0[]; // idb
extern char aNumber_1[]; // idb
extern char aNumber01[]; // idb
extern char aComitemwin[]; // idb
extern char aDD_4[]; // idb
extern int (__stdcall *ChargedItemListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChargedItemListWin::_vftable_)(void *p, char); // weak
extern char aGameChrstatus_[]; // idb
extern char byte_98F737; // idb
extern char aFrame_30[]; // idb
extern char aCharinfowin[]; // idb
extern char aTheme_41[6]; // weak
extern char aTheme_42[]; // idb
extern char aClsnor_15[]; // idb
extern char aClsclick_15[]; // idb
extern char aClsover_15[]; // idb
extern char aHelplinknor_16[12]; // weak
extern char aHelplinknor_17[]; // idb
extern char aHelplinkcli_11[]; // idb
extern char aHelplinkove_11[]; // idb
extern char aPanel01_29[]; // idb
extern char aPanel02_14[]; // idb
extern char aWintitle_16[]; // idb
extern char aSubnamebtnnor[]; // idb
extern char aSubnamebtnclic[]; // idb
extern char aSubnamebtnover[]; // idb
extern char aStrupnor[]; // idb
extern char aStrupclick[]; // idb
extern char aStrupover[]; // idb
extern char aStrdnnor[]; // idb
extern char aStrdnclick[]; // idb
extern char aStrdnover[]; // idb
extern char aDexupnor[]; // idb
extern char aDexupclick[]; // idb
extern char aDexupover[]; // idb
extern char aDexdnnor[]; // idb
extern char aDexdnclick[]; // idb
extern char aDexdnover[]; // idb
extern char aConupnor[]; // idb
extern char aConupclick[]; // idb
extern char aConupover[]; // idb
extern char aCondnnor[]; // idb
extern char aCondnclick[]; // idb
extern char aCondnover[]; // idb
extern char aIntupnor[]; // idb
extern char aIntupclick[]; // idb
extern char aIntupover[]; // idb
extern char aIntdnnor[]; // idb
extern char aIntdnclick[]; // idb
extern char aIntdnover[]; // idb
extern char aMenupnor[]; // idb
extern char aMenupclick[]; // idb
extern char aMenupover[]; // idb
extern char aMendnnor[]; // idb
extern char aMendnclick[]; // idb
extern char aMendnover[]; // idb
extern char aIconslot_8[]; // idb
extern char aSubname[]; // idb
extern char aSubnametxt[]; // idb
extern char asc_98F984[2]; // weak
extern char aSid[]; // idb
extern char aSidtxt[]; // idb
extern char asc_98F994[2]; // weak
extern char aJob_2[]; // idb
extern char aJobtxt[]; // idb
extern char asc_98F9A4[2]; // weak
extern char aGuild[]; // idb
extern char aGuildtxt[]; // idb
extern char asc_98F9BC[2]; // weak
extern char aNexp[]; // idb
extern char aNexpval[]; // idb
extern char aHonor[]; // idb
extern char aHonorval[]; // idb
extern char aStrength_0[]; // idb
extern char aDexterity[]; // idb
extern char aConstitution[]; // idb
extern char aIntelligence[]; // idb
extern char aMentalpower[]; // idb
extern char aStrnum[]; // idb
extern char aDexnum[]; // idb
extern char aConnum[]; // idb
extern char aIntnum[]; // idb
extern char aHp[]; // idb
extern char aHpnum[]; // idb
extern char asc_98FA54[2]; // weak
extern char aSp[]; // idb
extern char aLp[3]; // weak
extern char aSpnum[]; // idb
extern char asc_98FA68[2]; // weak
extern char asc_98FA6C[2]; // weak
extern char aPoint_0[]; // idb
extern char aPointnum[]; // idb
extern char asc_98FA84[2]; // weak
extern char aKillpoint[]; // idb
extern char aKillpointval[]; // idb
extern char asc_98FAA4[2]; // weak
extern char aPoint01[]; // idb
extern char aPointnum01[]; // idb
extern char asc_98FABC[2]; // weak
extern char aMennum[]; // idb
extern char aWeaponclass[]; // idb
extern char aWpnum[]; // idb
extern char aArmorclass[]; // idb
extern char aAcnum[]; // idb
extern char aTohit[]; // idb
extern char aThnum[]; // idb
extern char aToblock[]; // idb
extern char aTbnum[]; // idb
extern char aMagicatt[]; // idb
extern char aManum[]; // idb
extern char aMagicres[]; // idb
extern char aMrnum[]; // idb
extern char aBtn04nor[]; // idb
extern char aBtn04click[]; // idb
extern char aBtn04over[]; // idb
extern char aBtn04disable[]; // idb
extern char aFreestatnor[]; // idb
extern char aFreestatclick[]; // idb
extern char aFreestatover[]; // idb
extern char aI64d_14[]; // idb
extern char aI64d_S_S_S_0[]; // idb
extern char aI64d_S_S_0[]; // idb
extern char aI64d_S_0[]; // idb
extern char aS_27[3]; // weak
extern char aSLvD[]; // idb
extern char aS_28[]; // idb
extern char aS_29[]; // idb
extern char aSS_32[]; // idb
extern char aSSD[13]; // weak
extern char aSSD_0[13]; // weak
extern char asc_98FC08[2]; // weak
extern char aD_17[]; // idb
extern char aDD_7[6]; // weak
extern char aDD_8[6]; // weak
extern char aDD_9[6]; // weak
extern char aD_18[]; // idb
extern char aDPoint[]; // idb
extern char a2d[]; // idb
extern char aD_98[3]; // weak
extern char aDD_5[8]; // weak
extern char aDD_6[9]; // weak
extern char aD_15[3]; // weak
extern char aD_16[3]; // weak
extern char aChrstatus[]; // idb
extern char aS_26[]; // idb
extern char aMoveevasion[12]; // weak
extern char aStrongfury[11]; // weak
extern char aStrongendure[13]; // weak
extern char aInvalidVectorT[]; // idb
extern int (__stdcall *StatPointReqTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StatPointReqTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *CharInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharInfoWin::_vftable_)(void *p, char); // weak
extern char aGameChartitle_[]; // idb
extern _UNKNOWN unk_98FF3F; // weak
extern char aPlane01_4[]; // idb
extern char aChartitlewin[]; // idb
extern _UNKNOWN unk_98FF55; // weak
extern _UNKNOWN unk_98FF56; // weak
extern _UNKNOWN unk_98FF57; // weak
extern char aTheme_43[6]; // weak
extern _UNKNOWN unk_98FF5E; // weak
extern _UNKNOWN unk_98FF5F; // weak
extern char aTheme_44[]; // idb
extern char aClsnor_16[]; // idb
extern char aClsclick_16[]; // idb
extern char aClsover_16[]; // idb
extern char aHelplinknor_18[12]; // weak
extern char aHelplinknor_19[]; // idb
extern char aHelplinkcli_12[]; // idb
extern char aHelplinkove_12[]; // idb
extern char aPanel01_30[]; // idb
extern char aPanel02_15[]; // idb
extern char aPanel03_6[]; // idb
extern char aPanel04[]; // idb
extern char aWintitle_17[]; // idb
extern char aOknor_5[]; // idb
extern char aOknor_6[]; // idb
extern char aOkclick_4[]; // idb
extern char aOkover_4[]; // idb
extern char aColumnbarnor_2[]; // idb
extern char aColumnbarcli_2[]; // idb
extern char aColumnbarove_1[]; // idb
extern char aColumn01_0[]; // idb
extern char aColumnbox[]; // idb
extern char aSlidebar_sli_2[]; // idb
extern char aSlidebar_dnb_8[18]; // weak
extern char aSlidebar_dnb_9[]; // idb
extern char aSlidebar_dn_10[20]; // weak
extern char aSlidebar_dn_11[]; // idb
extern char aSlidebar_dn_12[19]; // weak
extern char aSlidebar_dn_13[]; // idb
extern char aSlidebar_upb_8[18]; // weak
extern char aSlidebar_upb_9[]; // idb
extern char aSlidebar_up_10[20]; // weak
extern char aSlidebar_up_11[]; // idb
extern char aSlidebar_up_12[19]; // weak
extern char aSlidebar_up_13[]; // idb
extern char aSlidebar_dn_14[]; // idb
extern char aSlidebar_up_14[]; // idb
extern char aSlidebar_1[]; // idb
extern char aPrepagenor_1[]; // idb
extern char aPrepageclick_1[]; // idb
extern char aPrepageover_1[]; // idb
extern char aNextpagenor_1[]; // idb
extern char aNextpageclic_1[]; // idb
extern char aNextpageover_1[]; // idb
extern char aChartitle[]; // idb
extern int (__stdcall *CharTitleWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CharTitleWin::_vftable_)(void *p, char); // weak
extern char aGameChatblockl[]; // idb
extern char aFrame_31[6]; // weak
extern char aFrame_32[]; // idb
extern char aBlocklistwin[]; // idb
extern char aTheme_45[6]; // weak
extern char aTheme_46[]; // idb
extern char aWintitle_18[]; // idb
extern char aClsnor_17[]; // idb
extern char aClsclick_17[]; // idb
extern char aClsover_17[]; // idb
extern char aHelplinknor_20[12]; // weak
extern char aHelplinknor_21[]; // idb
extern char aHelplinkcli_13[]; // idb
extern char aHelplinkove_13[]; // idb
extern char aPanel01_31[]; // idb
extern char aColumnbarnor_3[]; // idb
extern char aColumnbarove_2[]; // idb
extern char aColumn01_1[]; // idb
extern char aTextbox_0[]; // idb
extern char aSlidebar_sli_3[]; // idb
extern char aSlidebar_dn_15[]; // idb
extern char aSlidebar_up_15[]; // idb
extern char aSlidebar_2[]; // idb
extern char aBtn01over_0[]; // idb
extern char aBtn01click_0[]; // idb
extern char aBtn01nor_0[]; // idb
extern char aBtn02over_0[]; // idb
extern char aBtn02click_0[]; // idb
extern char aBtn02nor_0[]; // idb
extern int (__stdcall *ChatBlockListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChatBlockListWin::_vftable_)(void *p, char); // weak
extern char aChatblocklist[]; // idb
extern char aChatinputwin_n[]; // idb
extern char aFrame_33[]; // idb
extern char aChareditwin[]; // idb
extern char aChatInput[]; // idb
extern int (__stdcall *ChatEditWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChatEditWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ClockShadowWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ClockShadowWin::_vftable_)(void *p, char); // weak
extern char aCollectMaxAnci[]; // idb
extern char aGameCollect_bc[]; // idb
extern _UNKNOWN unk_990CA3; // weak
extern char aFrame_34[]; // idb
extern _UNKNOWN unk_990CAA; // weak
extern _UNKNOWN unk_990CAB; // weak
extern char aCollectcardwin[]; // idb
extern _UNKNOWN unk_990CBB; // weak
extern char aPanel01_32[]; // idb
extern char aS_30[]; // idb
extern _UNKNOWN unk_990CC6; // weak
extern _UNKNOWN unk_990CC7; // weak
extern char aA_6[]; // idb
extern char aB_0[]; // idb
extern char aC_8[]; // idb
extern char aScardback[]; // idb
extern char aScard[]; // idb
extern char aStar02d[]; // idb
extern char aSerialnumber[]; // idb
extern char aAt_normal[]; // idb
extern char aAt_chief[]; // idb
extern char aAt_boss[]; // idb
extern char aAt_hero[]; // idb
extern char aAt_elite[]; // idb
extern char aMt_human[]; // idb
extern char aMt_magiclife[]; // idb
extern char aMt_spirit[]; // idb
extern char aMt_beast[]; // idb
extern char aMt_elemental[]; // idb
extern char aMt_undead[]; // idb
extern char aUnidentified[]; // idb
extern char aTitle_3[]; // idb
extern char aText_2[]; // idb
extern char asc_990DA8[]; // idb
extern char aCollectMaxS_pn[]; // idb
extern int (__stdcall *CollectCardWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectCardWin::_vftable_)(void *p, char); // weak
extern char aGameCollect_sc[]; // idb
extern _UNKNOWN unk_99101F; // weak
extern char aSmallimage[]; // idb
extern char aS_31[]; // idb
extern char aA_7[]; // idb
extern char aB_1[]; // idb
extern char aC_9[]; // idb
extern char aScardback_0[]; // idb
extern char aScard_0[]; // idb
extern char aUnidentified_0[]; // idb
extern char aCollectMinS_pn[]; // idb
extern char aPagebtn02d[]; // idb
extern char aFirst[]; // idb
extern char aFront[]; // idb
extern char aNext_0[]; // idb
extern char aLast[]; // idb
extern char aSpagenor[]; // idb
extern char aSpageclick[]; // idb
extern char aSpageover[]; // idb
extern char asc_9910C4[]; // idb
extern char aGameCollect_rw[]; // idb
extern char aFrame_35[]; // idb
extern char aCollectrwchoic[]; // idb
extern char aTextwin[]; // idb
extern char aReward02d[]; // idb
extern char aOkbtnnor_0[]; // idb
extern char aOkbtnclick_0[]; // idb
extern char aOkbtnover_0[]; // idb
extern char aOkbtndisable[]; // idb
extern char aCancelbtnnor[]; // idb
extern char aCancelbtnclick[]; // idb
extern char aCancelbtnover[]; // idb
extern char aD_19[]; // idb
extern char aGameCollect_ca[]; // idb
extern char aFrame_36[]; // idb
extern char aCollectcardc_0[]; // idb
extern char aPanel01_34[]; // idb
extern char aS_32[]; // idb
extern char aA_8[]; // idb
extern char aB_2[]; // idb
extern char aC_10[]; // idb
extern char aSranknor[]; // idb
extern char aSrankclick[]; // idb
extern char aSrankover[]; // idb
extern char aSelectcard02d[]; // idb
extern char aFirstpagenor[]; // idb
extern char aLastpagenor[]; // idb
extern char aOkbtnnor_1[]; // idb
extern char aOkbtnclick_1[]; // idb
extern char aOkbtnover_1[]; // idb
extern char aCancelbtnnor_0[]; // idb
extern char aCancelbtncli_0[]; // idb
extern char aCancelbtnove_0[]; // idb
extern char aGameCollect_ge[]; // idb
extern char aPanel01_33[]; // idb
extern char aCollectcardcho[]; // idb
extern char aClsnor_18[]; // idb
extern char aClsclick_18[]; // idb
extern char aClsover_18[]; // idb
extern char aBtnmiddle[]; // idb
extern char aLeft[]; // idb
extern char aBtnright[]; // idb
extern char aText_3[]; // idb
extern int (__stdcall *CollectRwItemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectRwItemWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CollectRwChoiceInv::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectRwChoiceInv::_vftable_)(void *p, char); // weak
extern int (__stdcall *CollectPopupWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectPopupWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CardSlotWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CardSlotWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CollectPageWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectPageWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CollectRwChoiceWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectRwChoiceWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CollectCardChoiceWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectCardChoiceWin::_vftable_)(void *p, char); // weak
extern char aPanel03_7[]; // idb
extern char aPanel07[]; // idb
extern char aRwgaugebar[]; // idb
extern _UNKNOWN unk_992307; // weak
extern char aAllrank[]; // idb
extern char aSrank[]; // idb
extern _UNKNOWN unk_992316; // weak
extern _UNKNOWN unk_992317; // weak
extern char aArank[]; // idb
extern char byte_99231E; // idb
extern _UNKNOWN unk_99231F; // weak
extern char aBrank[]; // idb
extern _UNKNOWN unk_992326; // weak
extern char aCrank[]; // idb
extern char aRw[]; // idb
extern char aSgauge[]; // idb
extern char aAll_0[]; // idb
extern char aS_33[]; // idb
extern char aA_9[]; // idb
extern char aB_3[]; // idb
extern char aC_11[]; // idb
extern char aSranknonselect[]; // idb
extern char aSrankselect[]; // idb
extern char aText01_9[]; // idb
extern char aText02_4[]; // idb
extern char aCard02d_0[]; // idb
extern char aText03_2[]; // idb
extern char aRwall[]; // idb
extern char aReward02effe_0[]; // idb
extern char aReward02disa_0[]; // idb
extern char aReward02able[]; // idb
extern char aFront_0[]; // idb
extern char aNext_1[]; // idb
extern char aRwSnor[]; // idb
extern char aRwSclick[]; // idb
extern char aRwSover[]; // idb
extern char aDD_10[]; // idb
extern char aDD_11[]; // idb
extern char aD_20[]; // idb
extern char aPanel04_0[]; // idb
extern char aPanel05[]; // idb
extern char aPanel06[]; // idb
extern char aCard02d[]; // idb
extern char aFirstpagenor_0[]; // idb
extern char aLastpagenor_0[]; // idb
extern char aPanel08[]; // idb
extern char aText05[]; // idb
extern char aText07[]; // idb
extern char aText04_0[]; // idb
extern char aText06[]; // idb
extern char aReward02effect[]; // idb
extern char pcDisableName[]; // idb
extern char pcAbleName[]; // idb
extern char aCardbtnnor[]; // idb
extern char aCardbtnclick[]; // idb
extern char aCardbtnover[]; // idb
extern char aCardbtn02d[]; // idb
extern char asc_9924E4[]; // idb
extern char asc_9924E8[]; // idb
extern char aGameCollect_ma[]; // idb
extern char aFrame_37[]; // idb
extern char aCollectwin[]; // idb
extern char aWintitle_19[]; // idb
extern char aTheme_47[]; // idb
extern char aClsnor_19[]; // idb
extern char aClsclick_19[]; // idb
extern char aClsover_19[]; // idb
extern char aHelplinknor_22[]; // idb
extern char aHelplinkcli_14[]; // idb
extern char aHelplinkove_14[]; // idb
extern char aPanel01_35[]; // idb
extern char aPanel02_16[]; // idb
extern char aMain_2[]; // idb
extern char aMylist[]; // idb
extern char aSrank_0[]; // idb
extern char aArank_0[]; // idb
extern char aBrank_0[]; // idb
extern char aCrank_0[]; // idb
extern char aSnor[]; // idb
extern char aSclick[]; // idb
extern char aSover[]; // idb
extern char aCollect_main[]; // idb
extern int (__stdcall *CollectMainWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectMainWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CollectCardListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectCardListWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CollectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CollectWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *DesktopWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *DesktopWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ItemDropTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemDropTask::_vftable_)(void *p, char); // weak
extern char aGameMessagew_5[]; // idb
extern char aPanel01_36[]; // idb
extern char aCalculatorwi_1[]; // idb
extern char aTheme_48[6]; // weak
extern char aTheme_49[]; // idb
extern char aLotinput_3[]; // idb
extern char aLotinput_4[]; // idb
extern char aBtnnor02_7[]; // idb
extern char aBtnclick02_7[]; // idb
extern char aBtnover02_7[]; // idb
extern char aBtnnor04_1[]; // idb
extern char aBtnclick04_1[]; // idb
extern char aBtnover04_1[]; // idb
extern char aU_15[]; // idb
extern char aU_16[]; // idb
extern int (__stdcall *DivideWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *DivideWin::_vftable_)(void *p, char); // weak
extern char aGameEnchanttoo[]; // idb
extern char aPanel01_37[]; // idb
extern char aEnchantgemtool[]; // idb
extern char byte_9931A1; // idb
extern char byte_9931A2; // idb
extern _UNKNOWN unk_9931A3; // weak
extern char aPanel02d_0[]; // idb
extern char byte_9931AE; // idb
extern _UNKNOWN unk_9931AF; // weak
extern char aPanel02d_1[]; // idb
extern _UNKNOWN unk_9931BA; // weak
extern char byte_9931BB; // idb
extern char aTitlename02d[]; // idb
extern _UNKNOWN unk_9931CA; // weak
extern char aSlot02d_0[]; // idb
extern char aRegcancelbtnno[]; // idb
extern char aText01_10[]; // idb
extern char aGameEnchantw_1[]; // idb
extern char aGameEnchantw_0[22]; // weak
extern char aGameEnchantwin[22]; // weak
extern char aPanel01_38[]; // idb
extern char aEnchantgemwin2[]; // idb
extern char aTheme_50[6]; // weak
extern char aTheme_51[]; // idb
extern char aPanel02_17[]; // idb
extern char aPanel03_8[]; // idb
extern char aPanel04_1[]; // idb
extern char aNpctext[]; // idb
extern char aItemname[]; // idb
extern char aClsclick_20[]; // idb
extern char aClsover_20[]; // idb
extern char aClsnor_20[]; // idb
extern char aQuitbtnclick[]; // idb
extern char aQuitbtnover[]; // idb
extern char aQuitbtnnor[]; // idb
extern char aWintitle_20[]; // idb
extern char aTgetslot[]; // idb
extern char aTitlename02d_0[]; // idb
extern char aRegbtnlock02d[]; // idb
extern char aRegbtnclick02d[]; // idb
extern char aRegbtnover02d[]; // idb
extern char aRegbtnnor02d[]; // idb
extern char aSlot02d_1[]; // idb
extern char aRegbtnnor02d_0[]; // idb
extern char aRegcancelbtn_0[]; // idb
extern char aGameEnchantw_4[]; // idb
extern char aGameEnchantw_3[22]; // weak
extern char aGameEnchantw_2[22]; // weak
extern char aPanel01_39[]; // idb
extern char aEnchantgemdele[]; // idb
extern char aTheme_52[6]; // weak
extern char aTheme_53[]; // idb
extern char aPanel02_18[]; // idb
extern char aPanel03_9[]; // idb
extern char aPanel04_2[]; // idb
extern char aNpctext_0[]; // idb
extern char aItemname_0[]; // idb
extern char aClsclick_21[]; // idb
extern char aClsover_21[]; // idb
extern char aClsnor_21[]; // idb
extern char aQuitbtnclick_0[]; // idb
extern char aQuitbtnover_0[]; // idb
extern char aQuitbtnnor_0[]; // idb
extern char aWintitle_21[]; // idb
extern char aTgetslot_0[]; // idb
extern char aTitlename02d_1[]; // idb
extern char aRegbtnlock02_0[]; // idb
extern char aRegbtnclick0_0[]; // idb
extern char aRegbtnover02_0[]; // idb
extern char aRegbtnnor02d_1[]; // idb
extern char aSlot02d_2[]; // idb
extern char aRegbtnnor02d_2[]; // idb
extern char aRegcancelbtn_1[]; // idb
extern int (__stdcall *EnchantGemToolTipWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EnchantGemToolTipWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *EnchantGemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EnchantGemWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *EnchantGemDeleteWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EnchantGemDeleteWin::_vftable_)(void *p, char); // weak
extern char aGameEvent01_ni[]; // idb
extern char aObject01[]; // idb
extern char aEventfriendw_0[]; // idb
extern char aClsnor_22[]; // idb
extern char aClsclick_22[]; // idb
extern char aClsover_22[]; // idb
extern char aRegistnor[]; // idb
extern char aRegistclick[]; // idb
extern char aRegistover[]; // idb
extern char aChecknor[]; // idb
extern char aCheckclick[]; // idb
extern char aText01_11[]; // idb
extern char aText01_12[]; // idb
extern char aText01_13[]; // idb
extern int (__stdcall *EventFriendWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EventFriendWin::_vftable_)(void *p, char); // weak
extern char aGamePetface_ni[]; // idb
extern _UNKNOWN unk_993EAD; // weak
extern char aFrame_38[]; // idb
extern char aFeedmoverwin[]; // idb
extern char aPanel03_10[]; // idb
extern char aSgameMobportra[]; // idb
extern char aSgameMobport_0[]; // idb
extern char aFacecut_mon[]; // idb
extern char aPanel04_3[]; // idb
extern char aPanel02_19[]; // idb
extern char aFill_hp_star_0[]; // idb
extern char aFill_hp_end_0[]; // idb
extern char aFill_hp_0[]; // idb
extern char aCharname[]; // idb
extern char a2[]; // idb
extern char aTestname[9]; // weak
extern char aNum_hungry[]; // idb
extern char a2_0[]; // idb
extern char aNum_velocity[]; // idb
extern char a2_1[]; // idb
extern char asc_993F98[2]; // weak
extern char aD_21[]; // idb
extern char aDS_4[]; // idb
extern char aSgameMobport_1[]; // idb
extern char aSgameMobport_2[]; // idb
extern int (__stdcall *FeedMoverWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FeedMoverWin::_vftable_)(void *p, char); // weak
extern char aGameMessagew_6[]; // idb
extern char aBtnnor01_4[]; // idb
extern _UNKNOWN unk_994241; // weak
extern _UNKNOWN unk_994242; // weak
extern _UNKNOWN unk_994243; // weak
extern char aBtnclick01_4[]; // idb
extern _UNKNOWN unk_99424F; // weak
extern char aBtnover01_4[]; // idb
extern _UNKNOWN unk_99425A; // weak
extern _UNKNOWN unk_99425B; // weak
extern char aD_22[]; // idb
extern char aD_23[]; // idb
extern _UNKNOWN unk_994263; // weak
extern char a_1f_1[]; // idb
extern char a_1f_2[]; // idb
extern _UNKNOWN unk_994273; // weak
extern char aSS_33[]; // idb
extern char aSS_34[]; // idb
extern char aSS_35[]; // idb
extern char aSS_36[]; // idb
extern char aSS_37[]; // idb
extern char aSS_38[]; // idb
extern char aSS_39[]; // idb
extern char aSS_40[]; // idb
extern char aMaxhpS[]; // idb
extern _UNKNOWN unk_9942BF; // weak
extern char aMaxspS[]; // idb
extern _UNKNOWN unk_9942CB; // weak
extern char asc_9942CC[2]; // weak
extern _UNKNOWN unk_9942CE; // weak
extern char asc_9942D0[2]; // weak
extern int (__stdcall *FreeStatView::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FreeStatView::_vftable_)(void *p, char); // weak
extern char aGameCallfrnd_n[]; // idb
extern char aPlane01_5[]; // idb
extern char aFriendcallwin[]; // idb
extern char aTheme_54[6]; // weak
extern char aTheme_55[]; // idb
extern char aPanel01_40[]; // idb
extern char aPanel02_20[]; // idb
extern char aClsclick_23[]; // idb
extern char aClsover_23[]; // idb
extern char aClsnor_23[]; // idb
extern char aGP[]; // idb
extern char aWintitle_22[]; // idb
extern char aGPTBI[]; // idb
extern char aColumnbox_0[]; // idb
extern char aHelplinknor_23[12]; // weak
extern char aHelplinkcli_15[]; // idb
extern char aHelplinkove_15[]; // idb
extern char aHelplinknor_24[]; // idb
extern char aOkclick_5[]; // idb
extern char aOkover_5[]; // idb
extern char aOknor_7[]; // idb
extern char aGGT[]; // idb
extern char aColumnbarnor_4[]; // idb
extern char aColumnbarcli_3[]; // idb
extern char aColumnbarove_3[]; // idb
extern char aColumn01_2[]; // idb
extern char aListbox[]; // idb
extern char aSlidebar_sli_4[]; // idb
extern char aSlidebar_dn_16[]; // idb
extern char aSlidebar_up_16[]; // idb
extern char aSlidebar_3[]; // idb
extern char asc_9946B4[]; // idb
extern char aCallfrnd[]; // idb
extern int (__stdcall *FriendCallWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FriendCallWin::_vftable_)(void *p, char); // weak
extern char aGameAddfrien_0[]; // idb
extern _UNKNOWN unk_99491B; // weak
extern char aPanel01_41[]; // idb
extern char aFriendaddwin[]; // idb
extern char byte_994931; // idb
extern _UNKNOWN unk_994932; // weak
extern _UNKNOWN unk_994933; // weak
extern char aTheme_56[6]; // weak
extern _UNKNOWN unk_99493A; // weak
extern char aTheme_57[]; // idb
extern char aTextbox_1[]; // idb
extern char aBtnnor02_8[]; // idb
extern char aBtnclick02_8[]; // idb
extern char aBtnover02_8[]; // idb
extern char aBtnnor03_4[]; // idb
extern char aBtnclick03_4[]; // idb
extern char aBtnover03_4[]; // idb
extern char aInputbox_1[]; // idb
extern char aFriendusepoint[]; // idb
extern char aGameFriendlist[]; // idb
extern char aFrame_39[]; // idb
extern char aFriendwin[]; // idb
extern char aTheme_60[6]; // weak
extern char aTheme_61[]; // idb
extern char aIconslot_9[]; // idb
extern char aWintitle_23[]; // idb
extern char aClsnor_24[]; // idb
extern char aClsclick_24[]; // idb
extern char aClsover_24[]; // idb
extern char aHelplinknor_25[12]; // weak
extern char aHelplinknor_26[]; // idb
extern char aHelplinkcli_16[]; // idb
extern char aHelplinkove_16[]; // idb
extern char aPlane_4[]; // idb
extern char aFindplane[]; // idb
extern char aText01_15[]; // idb
extern char aCategory[]; // idb
extern char aColumnbarnor_5[]; // idb
extern char aColumnbarcli_4[]; // idb
extern char aColumnbarove_4[]; // idb
extern char aColumn01_3[]; // idb
extern char aColumn02_0[]; // idb
extern char aColumn03_0[]; // idb
extern char aColumn04[]; // idb
extern char aMoreinfotitlec[]; // idb
extern char aMoreinfotitl_0[]; // idb
extern char aPlane01_6[]; // idb
extern char aSlidebar_sli_5[]; // idb
extern char aSlidebar_dn_17[]; // idb
extern char aSlidebar_up_17[]; // idb
extern char aSlidebar_4[]; // idb
extern char aTitle01nor_1[]; // idb
extern char aTitle01click_1[]; // idb
extern char aTitle01over_1[]; // idb
extern char aTitle02nor_1[]; // idb
extern char aTitle02click_1[]; // idb
extern char aTitle02over_1[]; // idb
extern char aTitle03nor_1[]; // idb
extern char aTitle03click_1[]; // idb
extern char aTitle03over_1[]; // idb
extern char aTitle04nor_1[]; // idb
extern char aTitle04click_1[]; // idb
extern char aTitle04over_1[]; // idb
extern char aAddfrndnor[]; // idb
extern char aAddfrndclick[]; // idb
extern char aAddfrndover[]; // idb
extern char aAddinfobtnnor[]; // idb
extern char aAddinfobtnclic[]; // idb
extern char aAddinfobtnover[]; // idb
extern char aShowallfrndnor[]; // idb
extern char aShowallfrndcli[]; // idb
extern char aShowallfrndove[]; // idb
extern char aBtn01nor_1[]; // idb
extern char aBtn01click_1[]; // idb
extern char aBtn01over_1[]; // idb
extern char aBase_0[]; // idb
extern char aFriendnor[]; // idb
extern char aFriendclick[]; // idb
extern char aFriendover[]; // idb
extern char aMasternor[]; // idb
extern char aMasterclick[]; // idb
extern char aMasterover[]; // idb
extern char aGuildnor[]; // idb
extern char aGuildclick[]; // idb
extern char aGuildover[]; // idb
extern char aWeddingnor[]; // idb
extern char aWeddingclick[]; // idb
extern char aWeddingover[]; // idb
extern char aPartymatchnor[]; // idb
extern char aPartymatchclic[]; // idb
extern char aPartymatchover[]; // idb
extern char aGuildacademyno[]; // idb
extern char aGuildacademycl[]; // idb
extern char aGuildacademyov[]; // idb
extern char aFriend[]; // idb
extern char aHolypromise[]; // idb
extern char aGuild_0[]; // idb
extern char aWedding[]; // idb
extern char aGuildacademy[]; // idb
extern char aPartymatch[]; // idb
extern char aList_tab_off[]; // idb
extern char aList_tab_on[]; // idb
extern char aFind_tab_off[]; // idb
extern char aFind_tab_on[]; // idb
extern char aMoreinfotitle0[]; // idb
extern char aMoreinfotitl_1[]; // idb
extern char aMoreinfotitl_2[]; // idb
extern char aMoreinfotitl_3[]; // idb
extern char aMoreinfotitl_4[]; // idb
extern char aMoreinfotitl_5[]; // idb
extern char aUsebtnnor[]; // idb
extern char aUsebtnclick[]; // idb
extern char aUsebtnover[]; // idb
extern char aUsebtndis[]; // idb
extern char aFriendhelpnor[]; // idb
extern char aFriendhelpclic[]; // idb
extern char aFriendhelpover[]; // idb
extern char aFindcolumnbarn[]; // idb
extern char aFindcolumnbarc[]; // idb
extern char aFindcolumnbaro[]; // idb
extern char aFindcolumn00[]; // idb
extern char aFindcolumn01[]; // idb
extern char aFindcolumn02[]; // idb
extern char aFindcolumn03[]; // idb
extern char aFindplane01[]; // idb
extern char aInvitecolumnba[]; // idb
extern char aInvitecolumn_0[]; // idb
extern char aInvitecolumn_1[]; // idb
extern char aInvitecolumn00[]; // idb
extern char aInvitecolumn01[]; // idb
extern char aInvitecolumn02[]; // idb
extern char aInvitecolumn03[]; // idb
extern char aInviteplane[]; // idb
extern char aSlidebar_sli_6[]; // idb
extern char aFindslidebar_d[]; // idb
extern char aFindslidebar_u[]; // idb
extern char aFindslidebar[]; // idb
extern char aFindtitle00nor[]; // idb
extern char aFindtitle00cli[]; // idb
extern char aFindtitle00ove[]; // idb
extern char aFindtitle01nor[]; // idb
extern char aFindtitle01cli[]; // idb
extern char aFindtitle01ove[]; // idb
extern char aFindtitle02nor[]; // idb
extern char aFindtitle02cli[]; // idb
extern char aFindtitle02ove[]; // idb
extern char aFindtitle03nor[]; // idb
extern char aFindtitle03cli[]; // idb
extern char aFindtitle03ove[]; // idb
extern char aFrind_point_te[]; // idb
extern char aFirendaddnor[]; // idb
extern char aFirendaddover[]; // idb
extern char aFirendaddclick[]; // idb
extern char aTooltip[]; // idb
extern char a____7[]; // idb
extern char aDD_12[]; // idb
extern char aD_24[]; // idb
extern char aLvD[]; // idb
extern char aWb_9[]; // idb
extern char aFplist_ons[]; // idb
extern char aRb_7[]; // idb
extern char aFplist_ons_0[]; // idb
extern char aRb_8[]; // idb
extern char aFplist_ons_1[]; // idb
extern char aFriendlist[]; // idb
extern char aD_25[]; // idb
extern char aD_26[]; // idb
extern char aGameFriendpoin[]; // idb
extern char aPanel01_42[]; // idb
extern char aTheme_58[6]; // weak
extern char aTheme_59[]; // idb
extern char aBtnnor01_5[]; // idb
extern char aBtnclick01_5[]; // idb
extern char aBtnover01_5[]; // idb
extern char aText00[]; // idb
extern char aText01_14[]; // idb
extern char aTable_0[]; // idb
extern int (__stdcall *FriendAddWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FriendAddWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *FriendPointTipMsg::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FriendPointTipMsg::_vftable_)(void *p, char); // weak
extern int (__stdcall *FriendWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FriendWin::_vftable_)(void *p, char); // weak
extern char aGameMinimapful[]; // idb
extern _UNKNOWN unk_995921; // weak
extern char byte_995922; // idb
extern char byte_995923; // idb
extern char aAutoruntarget[]; // idb
extern char byte_995932; // idb
extern char byte_995933; // idb
extern char aNpclink[]; // idb
extern char aNpcsoulstone[]; // idb
extern char byte_995949; // idb
extern char byte_99594A[2]; // idb
extern char aNpcguild[]; // idb
extern char aNpcquest[]; // idb
extern char aNpcstore[]; // idb
extern char aNpckingdom[]; // idb
extern char aNpcmine[]; // idb
extern char aNpcfurniture[]; // idb
extern char aNpcsmith[]; // idb
extern char aNpcskill[]; // idb
extern char aNpchelp[]; // idb
extern char aNpctempler[]; // idb
extern char aNpcitem[]; // idb
extern char aNpcnormal[]; // idb
extern char aNpcwtitle[]; // idb
extern char aNpcquesting[]; // idb
extern char aNpcquest_0[]; // idb
extern char aNpcquestend[]; // idb
extern char aNpclinktown[]; // idb
extern char aNpcquestlowlev[]; // idb
extern char aParty[]; // idb
extern char aMe01[]; // idb
extern char aMinihouse[]; // idb
extern char aMe02[]; // idb
extern char aGuilwarflag_ye[]; // idb
extern char aGuilwarflag_re[]; // idb
extern char aGuilwarflag_bl[]; // idb
extern char aWarpgray[]; // idb
extern char aWarpred[]; // idb
extern char aWarpblue[]; // idb
extern char aForcered[]; // idb
extern char aForceblue[]; // idb
extern char aChiefmonster[]; // idb
extern char aNormalmonster[]; // idb
extern char aBroken[]; // idb
extern char aRedwood[]; // idb
extern char aBluewood[]; // idb
extern char aFlag[]; // idb
extern char aFrame_40[]; // idb
extern char aFullmapwin[]; // idb
extern char aPanel01_43[]; // idb
extern char aClsnor_25[]; // idb
extern char aClsclick_25[]; // idb
extern char aClsover_25[]; // idb
extern char aHelplinknor_27[12]; // weak
extern char aHelplinknor_28[]; // idb
extern char aHelplinkcli_17[]; // idb
extern char aHelplinkove_17[]; // idb
extern char aWintitle_24[]; // idb
extern char aGride_num[]; // idb
extern char aFullmap[]; // idb
extern char aMovingpoint[]; // idb
extern char aAlphaoptbarhig[]; // idb
extern char aAlphaoptbarlow[]; // idb
extern char aAlphaoptbar[]; // idb
extern char aPanel02_21[]; // idb
extern char aGridnor[]; // idb
extern char aGridclick[]; // idb
extern char aGridover[]; // idb
extern char aAllmapbtnnor[]; // idb
extern char aAllmapbtnclick[]; // idb
extern char aAllmapbtnover[]; // idb
extern char aGridD[]; // idb
extern char aGrid0D[8]; // weak
extern char aGridD_0[]; // idb
extern char aPanel06_0[]; // idb
extern char aPanel05_0[]; // idb
extern char aText02d[]; // idb
extern char aText_autorun[]; // idb
extern char aExbtn_l_nor[]; // idb
extern char aExbtn_l_over[]; // idb
extern char aExbtn_l_click[]; // idb
extern char aExbtn_l_nor01[]; // idb
extern char aExbtn_l_over01[]; // idb
extern char aExbtn_l_click0[]; // idb
extern char aQuestlistnumba[]; // idb
extern char aQuestlistnum02[]; // idb
extern char aMobrange[]; // idb
extern char aPanel02d_2[]; // idb
extern char aColumnbarnor_6[]; // idb
extern char aColumnbarcli_5[]; // idb
extern char aColumnbarove_5[]; // idb
extern char aColumn03_1[]; // idb
extern char aColumn01_4[]; // idb
extern char aSubtext01_1[]; // idb
extern char aSlidebar_sli_7[]; // idb
extern char aSlidebar_dn_18[]; // idb
extern char aSlidebar_up_18[]; // idb
extern char aSlidebar_5[]; // idb
extern char aExbtn_r_nor[]; // idb
extern char aExbtn_r_over[]; // idb
extern char aExbtn_r_click[]; // idb
extern char aExbtn_r_nor01[]; // idb
extern char aExbtn_r_over01[]; // idb
extern char aExbtn_r_click0[]; // idb
extern char aQuestlistnum_0[]; // idb
extern char aQuestlistnum_1[]; // idb
extern char aBtnnor_0[]; // idb
extern char aBtnover_0[]; // idb
extern char aBtnclick_0[]; // idb
extern char aBtn_arrow[]; // idb
extern char aPanel02d_3[]; // idb
extern char aColumnbarnor_7[]; // idb
extern char aColumnbarcli_6[]; // idb
extern char aColumnbarove_6[]; // idb
extern char aColumn02_1[]; // idb
extern char aSubtext02_0[]; // idb
extern char aSlidebar_sli_8[]; // idb
extern char aSlidebar_dn_19[20]; // weak
extern char aSlidebar_dn_20[]; // idb
extern char aSlidebar_dn_21[22]; // weak
extern char aSlidebar_dn_22[]; // idb
extern char aSlidebar_dn_23[21]; // weak
extern char aSlidebar_dn_24[]; // idb
extern char aSlidebar_up_19[20]; // weak
extern char aSlidebar_up_20[]; // idb
extern char aSlidebar_up_21[22]; // weak
extern char aSlidebar_up_22[]; // idb
extern char aSlidebar_up_23[21]; // weak
extern char aSlidebar_up_24[]; // idb
extern char aSlidebar_dn_25[]; // idb
extern char aSlidebar_up_25[]; // idb
extern char aSlidebar01_0[]; // idb
extern char aKq_g_boss_0[10]; // weak
extern char aNpcS[]; // idb
extern char asc_99600C[]; // idb
extern int dword_996010; // weak
extern char aMinimapfull[]; // idb
extern int (__stdcall *InvisibleWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *InvisibleWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NpcMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_int_MapMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_short_KQTeamMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<MobCoordinate__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<float>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<float>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<RaidMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<PartyMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<GTIScanMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<QuestHelperMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<PgWinSpr__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<MobAreaMarkWin__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *FullMapWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FullMapWin::_vftable_)(void *p, char); // weak
extern char aGameGatechanne[]; // idb
extern char aLoadfail_12[]; // idb
extern char aGameGatechan_0[]; // idb
extern char aPanel01_44[]; // idb
extern char aGatechannelwin[]; // idb
extern char aTheme_62[6]; // weak
extern char aTheme_63[]; // idb
extern char aTextbox_2[]; // idb
extern char aBtn01nor_2[]; // idb
extern char aBtn01click_2[]; // idb
extern char aBtn01over_2[]; // idb
extern char aBtn02nor_1[]; // idb
extern char aBtn02click_1[]; // idb
extern char aBtn02over_1[]; // idb
extern char aBtn03nor[]; // idb
extern char aBtn03click[]; // idb
extern char aBtn03over[]; // idb
extern int (__stdcall *GateChannelWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GateChannelWin::_vftable_)(void *p, char); // weak
extern char aGameProductb_0[]; // idb
extern char aPanel01_45[]; // idb
extern char aGatheringwin[]; // idb
extern char aPanel02_22[]; // idb
extern char aFill_hp_1[]; // idb
extern char aFill_hp_star_1[]; // idb
extern char aFill_hp_end_1[]; // idb
extern char aPickpoint[]; // idb
extern char aGathersucc[]; // idb
extern char aGatherfail[]; // idb
extern int (__stdcall *GatheringWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GatheringWin::_vftable_)(void *p, char); // weak
extern char aGameGuildlist_[]; // idb
extern _UNKNOWN unk_996CA3; // weak
extern char aFrame_41[]; // idb
extern _UNKNOWN unk_996CAA; // weak
extern _UNKNOWN unk_996CAB; // weak
extern char aGuildlistwin[]; // idb
extern _UNKNOWN unk_996CB9; // weak
extern char aTheme_64[6]; // weak
extern char aTheme_65[]; // idb
extern char aClsnor_26[]; // idb
extern char aClsclick_26[]; // idb
extern char aClsover_26[]; // idb
extern char aHelplinknor_29[12]; // weak
extern char aHelplinknor_30[]; // idb
extern char aHelplinkcli_18[]; // idb
extern char aHelplinkove_18[]; // idb
extern char aPanel01_46[]; // idb
extern char aWintitle_25[]; // idb
extern char aIconslot_10[]; // idb
extern char aColumnbarnor_8[]; // idb
extern char aColumnbarcli_7[]; // idb
extern char aColumnbarove_7[]; // idb
extern char aColumn01_5[]; // idb
extern char aColumn02_2[]; // idb
extern char aColumn03_2[]; // idb
extern char aColumn04_0[]; // idb
extern char aColumn05_0[]; // idb
extern char aColumn06[]; // idb
extern char aSubtext01_2[]; // idb
extern char aSlidebar_sli_9[]; // idb
extern char aSlidebar_dn_26[]; // idb
extern char aSlidebar_up_26[]; // idb
extern char aSlidebar_6[]; // idb
extern char aTitle01nor_2[]; // idb
extern char aTitle01click_2[]; // idb
extern char aTitle01over_2[]; // idb
extern char aTitle02nor_2[]; // idb
extern char aTitle02click_2[]; // idb
extern char aTitle02over_2[]; // idb
extern char aTitle03nor_2[]; // idb
extern char aTitle03click_2[]; // idb
extern char aTitle03over_2[]; // idb
extern char aTitle04nor_2[]; // idb
extern char aTitle04click_2[]; // idb
extern char aTitle04over_2[]; // idb
extern char aTitle05nor_0[]; // idb
extern char aTitle05click_0[]; // idb
extern char aTitle05over_0[]; // idb
extern char aTitle06nor_0[]; // idb
extern char aTitle06click_0[]; // idb
extern char aTitle06over_0[]; // idb
extern char aCount_total[]; // idb
extern char aSearchchoiceno[]; // idb
extern char aSearchchoicecl[]; // idb
extern char aSearchchoiceov[]; // idb
extern char aSearch_input[]; // idb
extern char aSearchnor[]; // idb
extern char aSearchclick[]; // idb
extern char aSearchover[]; // idb
extern char aBtn01nor_3[]; // idb
extern char aBtn01click_3[]; // idb
extern char aBtn01over_3[]; // idb
extern char Val[2]; // idb
extern int dword_996FA0; // weak
extern int dword_996FA4; // weak
extern int dword_996FA8; // weak
extern int dword_996FAC; // weak
extern char byte_996FB2; // weak
extern char asc_996FB4[2]; // idb
extern int dword_996FB8; // weak
extern int dword_996FBC; // weak
extern int dword_996FC0; // weak
extern int dword_996FC4; // weak
extern char byte_996FCA; // weak
extern char aGuildlist[]; // idb
extern int (__thiscall *boost::bad_function_call::_vftable_)(void *p, char); // weak
extern char aCallToEmptyBoo[30]; // weak
extern int (__stdcall *std::basic_ostream<char_std::char_traits<char>>::_vftable_)(char); // weak
extern int (__thiscall *std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_vftable_)(void *p, char); // weak
extern char aFalse_0[6]; // weak
extern char aTrue_0[]; // idb
extern int (__thiscall *std::numpunct<char>::_vftable_)(void *p, char); // weak
extern int (__stdcall *std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_)(char); // weak
extern char Spec[]; // idb
extern char aLu[]; // idb
extern char aLd[]; // idb
extern char aLu_0[]; // idb
extern char aP[]; // idb
extern char aE[2]; // weak
extern char aE_0[]; // idb
extern int (__stdcall *GuildListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildListWin::_vftable_)(void *p, char); // weak
extern char aGameGuildselec[]; // idb
extern char aFrame_42[]; // idb
extern char aGuildselectwin[]; // idb
extern char aTheme_66[6]; // weak
extern char aTheme_67[]; // idb
extern char aWintitle_26[]; // idb
extern char aPanel01_47[]; // idb
extern char aPanel02_23[]; // idb
extern char aClsnor_27[]; // idb
extern char aClsclick_27[]; // idb
extern char aClsover_27[]; // idb
extern char aHelplinknor_31[12]; // weak
extern char aHelplinknor_32[]; // idb
extern char aHelplinkcli_19[]; // idb
extern char aHelplinkove_19[]; // idb
extern char aBtn01nor_4[]; // idb
extern char aBtn01click_4[]; // idb
extern char aBtn01over_4[]; // idb
extern char aText01_16[]; // idb
extern char aBtn02nor_2[]; // idb
extern char aBtn02click_2[]; // idb
extern char aBtn02over_2[]; // idb
extern char aText02_5[]; // idb
extern char aGuildselect[]; // idb
extern int (__stdcall *GuildSelectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildSelectWin::_vftable_)(void *p, char); // weak
extern char aAccountSpawn_2[]; // idb
extern char aFrame_43[]; // idb
extern char aHelpwin[]; // idb
extern char aTitle_4[]; // idb
extern char aWebpage_2[]; // idb
extern char aClsnor_28[]; // idb
extern char aClsclick_28[]; // idb
extern char aClsover_28[]; // idb
extern char aShelppage_hb[]; // idb
extern int (__stdcall *HelpWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *HelpWin::_vftable_)(void *p, char); // weak
extern char aGameAddfrien_1[]; // idb
extern _UNKNOWN unk_997943; // weak
extern char aPanel01_48[]; // idb
extern char aHolypromiseadd[]; // idb
extern char byte_99795E; // idb
extern _UNKNOWN unk_99795F; // weak
extern char aTheme_68[6]; // weak
extern _UNKNOWN unk_997966; // weak
extern char byte_997967; // idb
extern char aTheme_69[]; // idb
extern char byte_99796E; // idb
extern char byte_99796F; // idb
extern char aTextbox_3[]; // idb
extern char aBtnnor02_9[]; // idb
extern char byte_997981; // idb
extern char byte_997982; // idb
extern char byte_997983; // idb
extern char aBtnclick02_9[]; // idb
extern char aBtnover02_9[]; // idb
extern char aBtnnor03_5[]; // idb
extern char aBtnclick03_5[]; // idb
extern char aBtnover03_5[]; // idb
extern char aInputbox_2[]; // idb
extern char aGameHolypromis[]; // idb
extern char aFrame_44[]; // idb
extern char aHolypromiswin[]; // idb
extern char aTheme_70[6]; // weak
extern char aTheme_71[]; // idb
extern char aIconslot_11[]; // idb
extern char aWintitle_27[]; // idb
extern char aClsnor_29[]; // idb
extern char aClsclick_29[]; // idb
extern char aClsover_29[]; // idb
extern char aHelplinknor_33[12]; // weak
extern char aHelplinknor_34[]; // idb
extern char aHelplinkcli_20[]; // idb
extern char aHelplinkove_20[]; // idb
extern char aPlane_5[]; // idb
extern char aPromis01[]; // idb
extern char aText01_17[]; // idb
extern char aCategory_0[]; // idb
extern char aColumnbar01nor[]; // idb
extern char aColumnbar01cli[]; // idb
extern char aColumnbar01ove[]; // idb
extern char aColumn01_6[]; // idb
extern char aColumn02_3[]; // idb
extern char aColumn03_3[]; // idb
extern char aColumn04_1[]; // idb
extern char aTextbox01[]; // idb
extern char aPromis02[]; // idb
extern char aColumnbar02nor[]; // idb
extern char aColumnbar02cli[]; // idb
extern char aColumnbar02ove[]; // idb
extern char aColumn05_1[]; // idb
extern char aColumn06_0[]; // idb
extern char aColumn07[]; // idb
extern char aColumn08[]; // idb
extern char aTextbox02_0[]; // idb
extern char aSlidebar_sl_10[]; // idb
extern char aSlidebar_dn_27[]; // idb
extern char aSlidebar_up_27[]; // idb
extern char aSlidebar_7[]; // idb
extern char aTitle01nor_3[]; // idb
extern char aTitle01click_3[]; // idb
extern char aTitle01over_3[]; // idb
extern char aTitle02nor_3[]; // idb
extern char aTitle02click_3[]; // idb
extern char aTitle02over_3[]; // idb
extern char aTitle03nor_3[]; // idb
extern char aTitle03click_3[]; // idb
extern char aTitle03over_3[]; // idb
extern char aTitle04nor_3[]; // idb
extern char aTitle04click_3[]; // idb
extern char aTitle04over_3[]; // idb
extern char aBtn01nor_5[]; // idb
extern char aBtn01click_5[]; // idb
extern char aBtn01over_5[]; // idb
extern char aBtn02nor_3[]; // idb
extern char aBtn01click_6[]; // idb
extern char aBtn01over_6[]; // idb
extern char aBtn03nor_0[]; // idb
extern char aBtn01click_7[]; // idb
extern char aBtn01over_7[]; // idb
extern char aBase_1[]; // idb
extern char aFriendnor_0[]; // idb
extern char aFriendclick_0[]; // idb
extern char aFriendover_0[]; // idb
extern char aMasternor_0[]; // idb
extern char aMasterclick_0[]; // idb
extern char aMasterover_0[]; // idb
extern char aGuildnor_0[]; // idb
extern char aGuildclick_0[]; // idb
extern char aGuildover_0[]; // idb
extern char aWeddingnor_0[]; // idb
extern char aWeddingclick_0[]; // idb
extern char aWeddingover_0[]; // idb
extern char aPartymatchno_0[]; // idb
extern char aPartymatchcl_0[]; // idb
extern char aPartymatchov_0[]; // idb
extern char aGuildacademy_0[]; // idb
extern char aGuildacademy_1[]; // idb
extern char aGuildacademy_2[]; // idb
extern char aFriend_0[]; // idb
extern char aHolypromise_0[]; // idb
extern char aGuild_1[]; // idb
extern char aGuildacademy_3[]; // idb
extern char aWedding_0[]; // idb
extern char aPartymatch_0[]; // idb
extern char aDDD[]; // idb
extern char aD_27[]; // idb
extern char aDDD_0[]; // idb
extern char aD_28[]; // idb
extern char aHolypromis[]; // idb
extern int (__stdcall *HolyPromiseAddWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *HolyPromiseAddWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *HolyPromiseWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *HolyPromiseWin::_vftable_)(void *p, char); // weak
extern char aGameQuesttim_0[]; // idb
extern char aFrame_45[]; // idb
extern char aIdtimewin[]; // idb
extern char aReward_0[]; // idb
extern char aPanel01_49[]; // idb
extern char aTime_3[]; // idb
extern char a000000_0[9]; // weak
extern char a02d02d02d[]; // idb
extern int (__stdcall *IDTimeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *IDTimeWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_99856C; // weak
extern char byte_99856D; // idb
extern _UNKNOWN unk_99856E; // weak
extern char byte_99856F; // idb
extern char aGameModeidwin_[]; // idb
extern char byte_998583; // idb
extern char aPanel01_50[]; // idb
extern char aIndunlevelsele[]; // idb
extern char aTheme_72[]; // idb
extern _UNKNOWN unk_9985A6; // weak
extern _UNKNOWN unk_9985A7; // weak
extern char aTextbox_4[]; // idb
extern char aBtn02d[]; // idb
extern char aQuitbtn[]; // idb
extern char aGameModeidmsg_[]; // idb
extern char aPanel01_51[]; // idb
extern char aIndunlevelmsgw[]; // idb
extern char aTheme_73[]; // idb
extern char aTextbox01_0[]; // idb
extern char aTextbox02_1[]; // idb
extern char aBtn01_0[]; // idb
extern char aBtn02_0[]; // idb
extern char aSS_41[]; // idb
extern int (__stdcall *IndunLevelSelectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *IndunLevelSelectWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *IndunLevelMsgWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *IndunLevelMsgWin::_vftable_)(void *p, char); // weak
extern char aGameMessagew_7[]; // idb
extern char aPanel01_52[]; // idb
extern char aCalculatorwi_2[]; // idb
extern char aTheme_74[6]; // weak
extern char aTheme_75[]; // idb
extern char aLotinput_5[]; // idb
extern char aLotinput_6[]; // idb
extern char aBtnnor02_10[]; // idb
extern char aBtnclick02_10[]; // idb
extern char aBtnover02_10[]; // idb
extern char aBtnnor04_2[]; // idb
extern char aBtnclick04_2[]; // idb
extern char aBtnover04_2[]; // idb
extern int (__stdcall *InputTextWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *InputTextWin::_vftable_)(void *p, char); // weak
extern char aSD_6[]; // idb
extern char aInvwin[]; // idb
extern _UNKNOWN unk_998D9B; // weak
extern char asc_998D9C[2]; // weak
extern char aChargediteminv[]; // idb
extern char aGameChrinv_nif[]; // idb
extern char aFrame_46[]; // idb
extern char aInvitemslot03d[]; // idb
extern char aPrepagenor_2[]; // idb
extern char aPrepageclick_2[]; // idb
extern char aPrepageover_2[]; // idb
extern char aNextpagenor_2[]; // idb
extern char aNextpageclic_2[]; // idb
extern char aNextpageover_2[]; // idb
extern char aHelplinknor_35[12]; // weak
extern char aHelplinknor_36[]; // idb
extern char aHelplinkcli_21[]; // idb
extern char aHelplinkove_21[]; // idb
extern char aPagenum[]; // idb
extern char a0_2[2]; // weak
extern char asc_998E74[]; // idb
extern char aChrinv[]; // idb
extern char aCompensationin[]; // idb
extern char aGameChrinv_n_0[]; // idb
extern char aFrame_47[]; // idb
extern char aInvitemslot0_0[]; // idb
extern char aPrepagenor_3[]; // idb
extern char aPrepageclick_3[]; // idb
extern char aPrepageover_3[]; // idb
extern char aNextpagenor_3[]; // idb
extern char aNextpageclic_3[]; // idb
extern char aNextpageover_3[]; // idb
extern char aHelplinknor_37[12]; // weak
extern char aHelplinknor_38[]; // idb
extern char aHelplinkcli_22[]; // idb
extern char aHelplinkove_22[]; // idb
extern char aPagenum_0[]; // idb
extern char a1[2]; // weak
extern char asc_998F54[]; // idb
extern char aChrinv_0[]; // idb
extern char aPutonclear_nif[]; // idb
extern char aGameChrinv_n_1[]; // idb
extern char aFrame_48[]; // idb
extern char aInventorywin[]; // idb
extern char aTheme_76[6]; // weak
extern char aTheme_77[]; // idb
extern char aPanel01_53[]; // idb
extern char aPanel02_24[]; // idb
extern char aPlane01_7[]; // idb
extern char aObject02_1[]; // idb
extern char aPanel03_11[]; // idb
extern char aTheme01[8]; // weak
extern char aTheme01_0[]; // idb
extern char aPanel04_4[]; // idb
extern char aPanel05_1[]; // idb
extern char aClsnor_30[]; // idb
extern char aClsclick_30[]; // idb
extern char aClsover_30[]; // idb
extern char aHelplinknor_39[12]; // weak
extern char aHelplinknor_40[]; // idb
extern char aHelplinkcli_23[]; // idb
extern char aHelplinkove_23[]; // idb
extern char aWintitle_28[]; // idb
extern char aInv1thtaboff[]; // idb
extern char aInv1thtabdis[]; // idb
extern char aInv1thtabon[]; // idb
extern char aInv2thtaboff[]; // idb
extern char aInv2thtabdis[]; // idb
extern char aInv2thtabon[]; // idb
extern char aInv3thtaboff[]; // idb
extern char aInv3thtabdis[]; // idb
extern char aInv3thtabon[]; // idb
extern char aInv4thtaboff[]; // idb
extern char aInv4thtabdis[]; // idb
extern char aInv4thtabon[]; // idb
extern char aInv5thtaboff[]; // idb
extern char aInv5thtabdis[]; // idb
extern char aInv5thtabon[]; // idb
extern char aInv6thtaboff[]; // idb
extern char aInv6thtabdis[]; // idb
extern char aInv6thtabon[]; // idb
extern char aPcbangoff[]; // idb
extern char aPcbangon[]; // idb
extern char aPcbangdis[]; // idb
extern char aNewitem01[]; // idb
extern char aInvcommercialo[]; // idb
extern char aInvcommercia_0[]; // idb
extern char aInvcommerciald[]; // idb
extern char aNewitem[]; // idb
extern char aIconslot_12[]; // idb
extern char aEquipslot03d[]; // idb
extern char aInvitemslot0_1[]; // idb
extern char aCopperbtn_0[]; // idb
extern char aCopperinput_0[]; // idb
extern char a0_3[2]; // weak
extern char aSilverbtn_1[]; // idb
extern char aSilverinput_0[]; // idb
extern char a0_4[2]; // weak
extern char aGoldbtn_0[]; // idb
extern char aGoldinput_0[]; // idb
extern char a0_5[2]; // weak
extern char aGembtn_0[]; // idb
extern char aGeminput_0[]; // idb
extern char a0_6[2]; // weak
extern char aMinimonnor[]; // idb
extern char aMinimonclick[]; // idb
extern char aMinimonover[]; // idb
extern char aMinimondisable[]; // idb
extern char aMinimonon[]; // idb
extern char aMinimonoff[]; // idb
extern char aAutoarraynor[]; // idb
extern char aAutoarrayclick[]; // idb
extern char aAutoarrayover[]; // idb
extern char aAutoarraydisab[]; // idb
extern char aInventoryopenn[]; // idb
extern char aInventoryopenc[]; // idb
extern char aInventoryopeno[]; // idb
extern char aInventoryopend[]; // idb
extern char aMinimonautou_2[]; // idb
extern char aMinimonautou_3[]; // idb
extern char aMinimonautou_4[]; // idb
extern char aMinimonautou_5[]; // idb
extern char aInv7thtaboff[]; // idb
extern char aInv7thtabdis[]; // idb
extern char aInv7thtabon[]; // idb
extern char aInv8thtaboff[]; // idb
extern char aInv8thtabdis[]; // idb
extern char aInv8thtabon[]; // idb
extern char aNum02d[]; // idb
extern char aChrequipon[]; // idb
extern char aChrequipoff[]; // idb
extern char aItemsort_butto[23]; // weak
extern int dword_99942C; // weak
extern int dword_999430; // weak
extern int dword_999434; // weak
extern int dword_999438; // weak
extern int (__fastcall *off_99943C)(Char *this); // weak
extern char aI64d_15[]; // idb
extern char aI64d_16[]; // idb
extern char aI64d_17[]; // idb
extern char aI64d_18[]; // idb
extern char aLimitrandomo_2[]; // idb
extern char aProposering[12]; // weak
extern char aChrinv_1[]; // idb
extern char aD_29[]; // idb
extern char aS_34[]; // idb
extern int (__stdcall *InvTabButWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *InvTabButWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ChargedItemIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChargedItemIcon::_vftable_)(void *p, char); // weak
extern int (__stdcall *ChargedItemInvenWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChargedItemInvenWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CompensationInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CompensationInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *InvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *InvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CompensationItemIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CompensationItemIcon::_vftable_)(void *p, char); // weak
extern int (__stdcall *InventoryWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *InventoryWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<ChargedItemUseTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<ChargedItemUseTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ChargedItemUseTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChargedItemUseTask::_vftable_)(void *p, char); // weak
extern char aLimitrandomo_3[]; // idb
extern _UNKNOWN unk_99A526; // weak
extern _UNKNOWN unk_99A527; // weak
extern char aGameMoney_nif[]; // idb
extern _UNKNOWN unk_99A537; // weak
extern char aMygembtn[]; // idb
extern _UNKNOWN unk_99A541; // weak
extern _UNKNOWN unk_99A542; // weak
extern _UNKNOWN unk_99A543; // weak
extern char aMygoldbtn[]; // idb
extern _UNKNOWN unk_99A54E; // weak
extern _UNKNOWN unk_99A54F; // weak
extern char aMysilverbtn[]; // idb
extern char aMycopperbtn[]; // idb
extern char aMygembtn_0[]; // idb
extern _UNKNOWN unk_99A571; // weak
extern char aMygoldbtn_0[]; // idb
extern char aMysilverbtn_0[]; // idb
extern char aMycopperbtn_0[]; // idb
extern char aGameClosebutto[]; // idb
extern char aBtnnor_1[]; // idb
extern char aBtnclick_1[]; // idb
extern char aBtnover_1[]; // idb
extern char aI64d_19[]; // idb
extern char aI64d_20[]; // idb
extern char aI64d_21[]; // idb
extern _UNKNOWN unk_99A5E2; // weak
extern char aI64d_22[]; // idb
extern char asc_99A5EC[2]; // weak
extern char aSI64d[]; // idb
extern char aSD_7[]; // idb
extern char asc_99A604[2]; // weak
extern char aSD_41[]; // idb
extern char asc_99A610[2]; // weak
extern char asc_99A614[2]; // weak
extern char aSDS_0[]; // idb
extern char asc_99A624[2]; // weak
extern char aSDS_1[]; // idb
extern char asc_99A634[2]; // weak
extern char aI64d_23[]; // idb
extern char aI64d_24[]; // idb
extern char aI64d_25[]; // idb
extern char aI64d_26[]; // idb
extern char aD_30[]; // idb
extern char aI64d_27[]; // idb
extern char aI64d_28[]; // idb
extern char aI64d_29[]; // idb
extern char aI64d_30[]; // idb
extern char aD_31[]; // idb
extern char aDS_6[8]; // weak
extern char aSD_8[]; // idb
extern char asc_99A690[2]; // weak
extern char asc_99A694[2]; // weak
extern char asc_99A698[2]; // weak
extern char asc_99A69C[2]; // weak
extern char asc_99A6A0[2]; // weak
extern char aSDD[]; // idb
extern char aSD_9[]; // idb
extern char aSD_10[]; // idb
extern char aSDD_0[]; // idb
extern char aSD_11[]; // idb
extern char aSD_12[]; // idb
extern char aSDD_1[]; // idb
extern char aSD_13[]; // idb
extern char aSD_14[]; // idb
extern char aSDD_2[]; // idb
extern char aSD_15[]; // idb
extern char aSD_16[]; // idb
extern char aSDD_3[]; // idb
extern char aSD_17[]; // idb
extern char aSD_18[]; // idb
extern char aSD_19[]; // idb
extern char aSD_20[]; // idb
extern char aSD_21[]; // idb
extern char aSD_22[]; // idb
extern char aSD_23[]; // idb
extern char aSD_24[]; // idb
extern char aSDD_4[]; // idb
extern char aSD_25[]; // idb
extern char aSD_26[]; // idb
extern char aSDD_5[]; // idb
extern char aSD_27[]; // idb
extern char aSD_28[]; // idb
extern char aSDD_6[]; // idb
extern char aSD_29[]; // idb
extern char aSD_30[]; // idb
extern char aSDD_7[]; // idb
extern char aSD_31[]; // idb
extern char aSD_32[]; // idb
extern char aSDD_8[]; // idb
extern char aSD_33[]; // idb
extern char aSD_34[9]; // weak
extern char aSD_35[]; // idb
extern char aSD_36[]; // idb
extern char aSD_37[]; // idb
extern char aSD_38[]; // idb
extern char aSD_39[]; // idb
extern char aMaxhpID[]; // idb
extern char aMaxhpI[12]; // weak
extern char aMaxhpD_0[]; // idb
extern char aMaxspI[]; // idb
extern char aMaxhpD[]; // idb
extern char asc_99A8DC[2]; // weak
extern char asc_99A8E0[2]; // weak
extern char asc_99A8E4[2]; // weak
extern char asc_99A8E8[2]; // weak
extern char aDS_5[]; // idb
extern char a0_44[2]; // weak
extern char a0_45[2]; // weak
extern char a0_46[2]; // weak
extern char aUseskill[9]; // weak
extern char aRecipe_[8]; // weak
extern char asc_99A930[2]; // weak
extern char asc_99A934[2]; // weak
extern char asc_99A938[2]; // weak
extern char asc_99A93C[2]; // weak
extern char asc_99A940[2]; // weak
extern char asc_99A944[2]; // weak
extern char asc_99A948[2]; // weak
extern char aMinigame_0[9]; // weak
extern char asc_99A958[2]; // weak
extern char asc_99A95C[2]; // weak
extern char aSS_44[8]; // weak
extern char aSS_45[8]; // weak
extern char aSS_46[8]; // weak
extern char aSS_47[]; // idb
extern char aSS_48[]; // idb
extern char aSD_40[]; // idb
extern char asc_99A990[2]; // weak
extern char asc_99A994[2]; // weak
extern char asc_99A998[2]; // weak
extern char asc_99A99C[2]; // weak
extern char asc_99A9A0[]; // idb
extern char asc_99A9A4[2]; // weak
extern char aS_36[]; // idb
extern char asc_99A9B0[2]; // weak
extern char asc_99A9B4[2]; // weak
extern char asc_99A9B8[2]; // weak
extern char aSS_42[6]; // weak
extern char aSS_43[]; // idb
extern char asc_99A9CC[2]; // weak
extern char asc_99A9D0[2]; // weak
extern char asc_99A9D4[]; // idb
extern char asc_99A9D8[2]; // weak
extern char aS_37[]; // idb
extern char asc_99A9E4[]; // idb
extern char aD_32[]; // idb
extern char asc_99A9F0[]; // idb
extern char asc_99A9F4[2]; // weak
extern char asc_99A9F8[]; // idb
extern char asc_99A9FC[2]; // weak
extern char asc_99AA00[2]; // weak
extern char aS_35[]; // idb
extern int (__stdcall *ItemInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemInfoWin::_vftable_)(void *p, char); // weak
extern char aSSSSS[]; // idb
extern char aSSSS[]; // idb
extern char aD_3[]; // idb
extern char aS_3[]; // idb
extern char aGameMallmenu_n[]; // idb
extern char aFrame_49[]; // idb
extern char aItemmallmenuwi[]; // idb
extern char aTheme_78[6]; // weak
extern char aTheme_79[]; // idb
extern char aPanel01_54[]; // idb
extern char aPanel02_25[]; // idb
extern char aClsnor_31[]; // idb
extern char aClsclick_31[]; // idb
extern char aClsover_31[]; // idb
extern char aHelplinknor_41[12]; // weak
extern char aHelplinknor_42[]; // idb
extern char aHelplinkcli_24[]; // idb
extern char aHelplinkove_24[]; // idb
extern char aWintitle_29[]; // idb
extern char aBtn01nor_6[]; // idb
extern char aBtn01click_8[]; // idb
extern char aBtn01over_8[]; // idb
extern char aBtn02nor_4[]; // idb
extern char aBtn02click_3[]; // idb
extern char aBtn02over_3[]; // idb
extern char aBtn03nor_1[]; // idb
extern char aBtn03click_0[]; // idb
extern char aBtn03over_0[]; // idb
extern char aMallmenu[]; // idb
extern int (__stdcall *ItemMallMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemMallMenuWin::_vftable_)(void *p, char); // weak
extern char aGameNpcitem_ni[]; // idb
extern char aFrame_50[]; // idb
extern char aItemshopwin[]; // idb
extern char aTheme_80[6]; // weak
extern char aTheme_81[]; // idb
extern char aClsnor_32[]; // idb
extern char aClsclick_32[]; // idb
extern char aClsover_32[]; // idb
extern char aHelplinknor_43[12]; // weak
extern char aHelplinknor_44[]; // idb
extern char aHelplinkcli_25[]; // idb
extern char aHelplinkove_25[]; // idb
extern char aPanel01_55[]; // idb
extern char aPanel02_26[]; // idb
extern char aWintitle_30[]; // idb
extern char aIconslot_13[]; // idb
extern char aIconslot03d_2[]; // idb
extern char aWeanor[]; // idb
extern char aWeaclick[]; // idb
extern char aWeaover[]; // idb
extern char aArmnor[]; // idb
extern char aArmclick[]; // idb
extern char aArmover[]; // idb
extern char aAccnor[]; // idb
extern char aAccclick[]; // idb
extern char aAccover[]; // idb
extern char aRepurchasenor[]; // idb
extern char aRepurchaseclic[]; // idb
extern char aRepurchaseover[]; // idb
extern char aPrepagenor_4[]; // idb
extern char aPrepageclick_4[]; // idb
extern char aPrepageover_4[]; // idb
extern char aNextpagenor_4[]; // idb
extern char aNextpageclic_4[]; // idb
extern char aNextpageover_4[]; // idb
extern char aNumber_2[]; // idb
extern char aNumber01_0[]; // idb
extern char aNpcitem_0[]; // idb
extern char aDD_13[]; // idb
extern int (__stdcall *ShopInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ShopInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ItemShopWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemShopWin::_vftable_)(void *p, char); // weak
extern char aGameItemtrade_[]; // idb
extern _UNKNOWN unk_99B697; // weak
extern char aPanel01_56[]; // idb
extern char aItemtradewin[]; // idb
extern _UNKNOWN unk_99B6AD; // weak
extern _UNKNOWN unk_99B6AE; // weak
extern _UNKNOWN unk_99B6AF; // weak
extern char aTheme_82[6]; // weak
extern _UNKNOWN unk_99B6B6; // weak
extern _UNKNOWN unk_99B6B7; // weak
extern char aTheme_83[]; // idb
extern char aLotinput_7[]; // idb
extern char aLotinput_8[]; // idb
extern char aBtnnor01_6[]; // idb
extern char aBtnclick01_6[]; // idb
extern char aBtnover01_6[]; // idb
extern char aBtnnor02_11[]; // idb
extern char aBtnclick02_11[]; // idb
extern char aBtnover02_11[]; // idb
extern char aText01_18[]; // idb
extern char aItemslot_1[]; // idb
extern char aItemname_1[]; // idb
extern char aPanel02_27[]; // idb
extern char aGeminput_1[]; // idb
extern char aGoldinput_1[]; // idb
extern char aSilverinput_1[]; // idb
extern char aCopperinput_1[]; // idb
extern char aU_17[]; // idb
extern char aU_18[]; // idb
extern char asc_99B780[]; // idb
extern char asc_99B784[]; // idb
extern char asc_99B788[]; // idb
extern char asc_99B78C[]; // idb
extern char asc_99B790[]; // idb
extern int (__stdcall *ItemTradeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemTradeWin::_vftable_)(void *p, char); // weak
extern char aGrade6[]; // idb
extern char aBr_upsorce0D[]; // idb
extern char aSucc_1_nif_0[]; // idb
extern char aSucc_2_nif[]; // idb
extern char aFail_0_nif[]; // idb
extern char aFail_1_nif[]; // idb
extern char aDestroy_nif[]; // idb
extern char aGameItemupgr_0[]; // idb
extern char aFrame_51[]; // idb
extern char aItemupgradewin[]; // idb
extern char aTheme_85[6]; // weak
extern char aTheme_86[]; // idb
extern char aWintitle_31[]; // idb
extern char aPanel01_58[]; // idb
extern char aPanel02_29[]; // idb
extern char aPanel03_12[8]; // weak
extern char aPanel03_13[]; // idb
extern char aClsnor_33[]; // idb
extern char aClsclick_33[]; // idb
extern char aClsover_33[]; // idb
extern char aHelplinknor_45[12]; // weak
extern char aHelplinknor_46[]; // idb
extern char aHelplinkcli_26[]; // idb
extern char aHelplinkove_26[]; // idb
extern char aObject01_0[]; // idb
extern char aOknor_8[]; // idb
extern char aOkclick_6[]; // idb
extern char aOkover_6[]; // idb
extern char aCancelnor_4[]; // idb
extern char aCancelclick_4[]; // idb
extern char aCancelover_4[]; // idb
extern char aForgetext[]; // idb
extern char aIconslot_14[]; // idb
extern char aForgeslot02d[]; // idb
extern char aSloton[]; // idb
extern char aSlotbomb[]; // idb
extern char aUpgradeErrorCo[]; // idb
extern char aSfx_slotone[]; // idb
extern char aSfx_slotend[]; // idb
extern char aItemupgrade_0[]; // idb
extern char aGameItemupgrad[]; // idb
extern char aPanel01_57[]; // idb
extern char aItemupgrademsg[]; // idb
extern char aTheme_84[]; // idb
extern char aPanel02_28[]; // idb
extern char aGoldnine[]; // idb
extern char aBluemile[]; // idb
extern char aRedeye[]; // idb
extern char aBtn01_1[]; // idb
extern char aBtn02_1[]; // idb
extern char aText01_19[]; // idb
extern char aText02_6[]; // idb
extern int (__stdcall *ForgeSlotInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ForgeSlotInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ItemUpgradeMsgWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemUpgradeMsgWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ItemUpgradeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemUpgradeWin::_vftable_)(void *p, char); // weak
extern char aGameKeyremappi[]; // idb
extern _UNKNOWN unk_99C371; // weak
extern _UNKNOWN unk_99C372; // weak
extern char aFrame_52[]; // idb
extern char aKeyremapping_0[]; // idb
extern char aTheme_87[6]; // weak
extern char aTheme_88[]; // idb
extern char aClsnor_34[]; // idb
extern char aClsclick_34[]; // idb
extern char aClsover_34[]; // idb
extern char aHelplinknor_47[12]; // weak
extern char aHelplinknor_48[]; // idb
extern char aHelplinkcli_27[]; // idb
extern char aHelplinkove_27[]; // idb
extern char aPanel01_59[]; // idb
extern char aPanel02_30[]; // idb
extern char aWintitle_32[]; // idb
extern char aIconslot_15[]; // idb
extern char aTab01_on_0[]; // idb
extern char aTab01_off_0[]; // idb
extern char aTab01_on_1[]; // idb
extern char aTab02_on_0[]; // idb
extern char aTab02_off_0[]; // idb
extern char aTab02_on_1[]; // idb
extern char aTab03_on_0[]; // idb
extern char aTab03_off_0[]; // idb
extern char aTab03_on_1[]; // idb
extern char aPlane_6[]; // idb
extern char aSlotbox02d[]; // idb
extern char aSlotmap02d[]; // idb
extern char aSlotmap02dover[]; // idb
extern char aD_33[]; // idb
extern char aPrepagenor_5[]; // idb
extern char aPrepageclick_5[]; // idb
extern char aPrepageover_5[]; // idb
extern char aNextpagenor_5[]; // idb
extern char aNextpageclic_5[]; // idb
extern char aNextpageover_5[]; // idb
extern char aApplyclick[]; // idb
extern char aApplyover[]; // idb
extern char aApplynor[]; // idb
extern char aDefaultclick[]; // idb
extern char aDefaultover[]; // idb
extern char aDefaultnor[]; // idb
extern char aCancelclick_5[]; // idb
extern char aCancelover_5[]; // idb
extern char aCancelnor_5[]; // idb
extern char asc_99C57C[2]; // weak
extern char asc_99C580[]; // idb
extern char aSS_49[]; // idb
extern char aWb_3[]; // idb
extern char aEsc[5]; // weak
extern char aLshift_0[8]; // weak
extern char aRshift_0[8]; // weak
extern char aLctrl[7]; // weak
extern char aRctrl[7]; // weak
extern char aLmenu[7]; // weak
extern char aRmenu[7]; // weak
extern char aEnter[7]; // weak
extern char aEnter_0[7]; // weak
extern char a1_0[3]; // weak
extern char a2_2[3]; // weak
extern char a3[3]; // weak
extern char a4[3]; // weak
extern char a5[3]; // weak
extern char a6[3]; // weak
extern char a7[3]; // weak
extern char a8[3]; // weak
extern char a9[3]; // weak
extern char a0_7[3]; // weak
extern char asc_99C7C0[3]; // weak
extern char asc_99C7C4[3]; // weak
extern char a0000040c_3[9]; // weak
extern char a00000484_3[9]; // weak
extern char a0000047e_3[9]; // weak
extern char a00000483_3[9]; // weak
extern char a00000482_3[9]; // weak
extern char aA_10[3]; // weak
extern char aQ_1[3]; // weak
extern char a0000040c_4[9]; // weak
extern char a00000484_4[9]; // weak
extern char a0000047e_4[9]; // weak
extern char a00000483_4[9]; // weak
extern char a00000482_4[9]; // weak
extern char aZ[3]; // weak
extern char aW_22[3]; // weak
extern char aE_1[3]; // weak
extern char aR_24[3]; // weak
extern char aT_3[3]; // weak
extern char a00000407_1[9]; // weak
extern char aZ_0[3]; // weak
extern char aY[3]; // weak
extern char aU_3[3]; // weak
extern char aI_1[3]; // weak
extern char aO[3]; // weak
extern char aP_1[3]; // weak
extern char asc_99C880[3]; // weak
extern char asc_99C884[3]; // weak
extern char a0000040c_5[9]; // weak
extern char a00000484_5[9]; // weak
extern char a0000047e_5[9]; // weak
extern char a00000483_5[9]; // weak
extern char a00000482_5[9]; // weak
extern char aQ_0[3]; // weak
extern char aA_17[3]; // weak
extern char asc_99C8CC[3]; // weak
extern char asc_99C8D0[3]; // weak
extern char asc_99C8D4[3]; // weak
extern char aG_8[3]; // weak
extern char asc_99C8DC[3]; // weak
extern char aJ[3]; // weak
extern char aK_0[3]; // weak
extern char asc_99C8E8[3]; // weak
extern char asc_99C8EC[3]; // weak
extern char asc_99C8F0[3]; // weak
extern char asc_99C8F4[3]; // weak
extern char a00000407_2[9]; // weak
extern char aY_0[3]; // weak
extern char a0000040c_6[9]; // weak
extern char a00000484_6[9]; // weak
extern char a0000047e_6[9]; // weak
extern char a00000483_6[9]; // weak
extern char a00000482_6[9]; // weak
extern char aW_9[3]; // weak
extern char aZ_2[3]; // weak
extern char asc_99C94C[3]; // weak
extern char aC_12[3]; // weak
extern char aV_2[3]; // weak
extern char aB_4[3]; // weak
extern char aN_4[3]; // weak
extern char aM_2[3]; // weak
extern char asc_99C964[3]; // weak
extern char a__6[3]; // weak
extern char asc_99C96C[3]; // weak
extern char asc_99C970[3]; // weak
extern char asc_99C974[3]; // weak
extern char aF1_0[4]; // weak
extern char aF2_0[4]; // weak
extern char aF3_0[4]; // weak
extern char aF4_0[4]; // weak
extern char aF5_0[4]; // weak
extern char aF6_0[4]; // weak
extern char aF7_0[4]; // weak
extern char aF8_0[4]; // weak
extern char aF9_0[4]; // weak
extern char aF10[5]; // weak
extern char aNp[5]; // weak
extern char aNp_0[5]; // weak
extern char aNp0[5]; // weak
extern char aNp1[5]; // weak
extern char aNp2[5]; // weak
extern char aNp3[5]; // weak
extern char aNp4[5]; // weak
extern char aNp5[5]; // weak
extern char aNp6[5]; // weak
extern char aNp7[5]; // weak
extern char aNp8[5]; // weak
extern char aNp9[5]; // weak
extern char aNp_[5]; // weak
extern char aF11[5]; // weak
extern char aF12[5]; // weak
extern char aNp_1[5]; // weak
extern char asc_99CA24[3]; // weak
extern char aCap[5]; // weak
extern char aNuml[6]; // weak
extern char aScroll[8]; // weak
extern char aHome[6]; // weak
extern char aUp[4]; // weak
extern char aLeft_0[6]; // weak
extern char aRight[7]; // weak
extern char aEnd_1[5]; // weak
extern char aDown[6]; // weak
extern char aPgdn[5]; // weak
extern char aPgup[6]; // weak
extern char aIns[5]; // weak
extern char aDel[5]; // weak
extern char aLwin[6]; // weak
extern char aRwin[6]; // weak
extern char aApps[6]; // weak
extern char aTab[5]; // weak
extern char asc_99CAAC[3]; // weak
extern char aPauseBreak[13]; // weak
extern char aShift[6]; // weak
extern char aShift_0[7]; // weak
extern char aCtrl[5]; // weak
extern char aCtrl_0[6]; // weak
extern char aAlt[4]; // weak
extern char aAlt_0[4]; // weak
extern char aMmb_0[4]; // weak
extern char aMmod_x1[8]; // weak
extern char aMmod_x2[8]; // weak
extern char aMmod_x3[8]; // weak
extern char aMmmod_x4[9]; // weak
extern char aMmod_x5[8]; // weak
extern char a0000040c[9]; // weak
extern char a00000484[9]; // weak
extern char a0000047e[9]; // weak
extern char a00000483[9]; // weak
extern char a00000482[9]; // weak
extern char a0000040c_0[9]; // weak
extern char a00000484_0[9]; // weak
extern char a0000047e_0[9]; // weak
extern char a00000483_0[9]; // weak
extern char a00000482_0[9]; // weak
extern char a0000040c_1[9]; // weak
extern char a00000484_1[9]; // weak
extern char a0000047e_1[9]; // weak
extern char a00000483_1[9]; // weak
extern char a00000482_1[9]; // weak
extern char a00000407[9]; // weak
extern char a00000407_0[9]; // weak
extern char a0000040c_2[9]; // weak
extern char a00000484_2[9]; // weak
extern char a0000047e_2[9]; // weak
extern char a00000483_2[9]; // weak
extern char a00000482_2[9]; // weak
extern char aS_38[]; // idb
extern char aS_39[3]; // weak
extern char aS_40[3]; // weak
extern char aS_41[3]; // weak
extern char aS_42[3]; // weak
extern char aS_43[3]; // weak
extern char aS_44[3]; // weak
extern char aS_45[3]; // weak
extern char aS_46[3]; // weak
extern char aS_47[3]; // weak
extern char aS_48[3]; // weak
extern char aS_49[3]; // weak
extern char aS_50[3]; // weak
extern char aS_51[3]; // weak
extern char aS_52[3]; // weak
extern char aS_53[3]; // weak
extern char aS_54[3]; // weak
extern char aS_55[3]; // weak
extern char aS_56[3]; // weak
extern char aS_57[3]; // weak
extern char aS_58[3]; // weak
extern char aS_59[3]; // weak
extern char aS_60[3]; // weak
extern char aS_61[3]; // weak
extern char aS_62[3]; // weak
extern char aS_63[3]; // weak
extern char aS_64[3]; // weak
extern char aS_65[3]; // weak
extern char aS_66[3]; // weak
extern char aS_67[3]; // weak
extern char aS_68[3]; // weak
extern char aS_69[3]; // weak
extern char aS_70[3]; // weak
extern char aS_71[3]; // weak
extern char aS_72[3]; // weak
extern char aS_73[3]; // weak
extern char aS_74[3]; // weak
extern char aS_75[3]; // weak
extern char aS_76[3]; // weak
extern char aS_77[3]; // weak
extern char aS_78[3]; // weak
extern char aS_79[3]; // weak
extern char aS_80[3]; // weak
extern char aS_81[3]; // weak
extern char aS_82[3]; // weak
extern char aS_83[3]; // weak
extern char aS_84[3]; // weak
extern char aS_85[3]; // weak
extern char aS_86[3]; // weak
extern char aS_87[3]; // weak
extern char aS_88[3]; // weak
extern char aS_89[3]; // weak
extern char aS_90[3]; // weak
extern char aS_91[3]; // weak
extern char aS_92[3]; // weak
extern char aS_93[3]; // weak
extern char aS_94[3]; // weak
extern char aS_95[3]; // weak
extern char aS_96[3]; // weak
extern char aS_97[3]; // weak
extern char aS_98[3]; // weak
extern char asc_99CE64[3]; // weak
extern char asc_99CE70[3]; // weak
extern char asc_99CE7C[3]; // weak
extern char asc_99CE88[3]; // weak
extern char asc_99CE94[3]; // weak
extern char asc_99CEA0[3]; // weak
extern char asc_99CEAC[3]; // weak
extern char asc_99CEB8[3]; // weak
extern char asc_99CEC4[3]; // weak
extern char asc_99CED0[3]; // weak
extern char asc_99CEDC[3]; // weak
extern char asc_99CEE4[3]; // weak
extern char asc_99CEEC[3]; // weak
extern char asc_99CEF4[3]; // weak
extern char asc_99CF00[3]; // weak
extern char asc_99CF0C[3]; // weak
extern char asc_99CF18[3]; // weak
extern char asc_99CF24[3]; // weak
extern char asc_99CF30[3]; // weak
extern char asc_99CF34[]; // idb
extern char aShiftS[11]; // weak
extern char aCtrlS[]; // idb
extern char aAltS[9]; // weak
extern char asc_99CF5C[3]; // weak
extern char asc_99CF60[]; // idb
extern char asc_99CF64[]; // idb
extern char asc_99CF68[]; // idb
extern char asc_99CF6C[]; // idb
extern char asc_99CF70[]; // idb
extern char asc_99CF74[]; // idb
extern char asc_99CF78[]; // idb
extern char asc_99CF7C[]; // idb
extern char asc_99CF80[]; // idb
extern char asc_99CF84[]; // idb
extern char asc_99CF88[]; // idb
extern char asc_99CF8C[]; // idb
extern char asc_99CF90[]; // idb
extern char asc_99CF94[]; // idb
extern char asc_99CF98[]; // idb
extern char asc_99CF9C[]; // idb
extern char asc_99CFA0[]; // idb
extern char asc_99CFA4[]; // idb
extern char asc_99CFA8[]; // idb
extern char asc_99CFAC[]; // idb
extern char asc_99CFB0[]; // idb
extern char asc_99CFB4[]; // idb
extern char asc_99CFB8[]; // idb
extern char asc_99CFBC[]; // idb
extern char asc_99CFC0[]; // idb
extern char asc_99CFC4[]; // idb
extern char asc_99CFC8[]; // idb
extern char asc_99CFCC[]; // idb
extern char asc_99CFD0[]; // idb
extern char asc_99CFD4[]; // idb
extern char asc_99CFD8[]; // idb
extern char asc_99CFDC[]; // idb
extern char asc_99CFE0[]; // idb
extern char asc_99CFE4[]; // idb
extern char asc_99CFE8[]; // idb
extern char asc_99CFEC[]; // idb
extern char asc_99CFF0[]; // idb
extern char asc_99CFF4[]; // idb
extern char asc_99CFF8[]; // idb
extern char asc_99CFFC[]; // idb
extern char asc_99D000[]; // idb
extern char asc_99D004[]; // idb
extern char asc_99D008[]; // idb
extern char asc_99D00C[]; // idb
extern char asc_99D010[]; // idb
extern char asc_99D014[]; // idb
extern char asc_99D018[]; // idb
extern char asc_99D01C[]; // idb
extern char asc_99D020[]; // idb
extern char asc_99D024[]; // idb
extern char asc_99D028[]; // idb
extern char asc_99D02C[]; // idb
extern char asc_99D030[]; // idb
extern char asc_99D034[]; // idb
extern char asc_99D038[]; // idb
extern char asc_99D03C[]; // idb
extern char asc_99D040[]; // idb
extern char asc_99D044[]; // idb
extern char asc_99D048[]; // idb
extern char asc_99D04C[]; // idb
extern char asc_99D050[]; // idb
extern char asc_99D054[]; // idb
extern char asc_99D058[]; // idb
extern char asc_99D05C[]; // idb
extern char asc_99D060[]; // idb
extern char asc_99D064[]; // idb
extern char asc_99D068[]; // idb
extern char asc_99D06C[]; // idb
extern char asc_99D070[]; // idb
extern char asc_99D074[]; // idb
extern char asc_99D078[]; // idb
extern char asc_99D07C[]; // idb
extern char asc_99D080[]; // idb
extern char asc_99D084[]; // idb
extern char asc_99D088[]; // idb
extern char asc_99D08C[]; // idb
extern char asc_99D090[]; // idb
extern char asc_99D094[]; // idb
extern char asc_99D098[]; // idb
extern char asc_99D09C[]; // idb
extern char asc_99D0A0[]; // idb
extern char asc_99D0A4[]; // idb
extern char asc_99D0A8[]; // idb
extern char asc_99D0AC[]; // idb
extern char asc_99D0B0[]; // idb
extern char asc_99D0B4[]; // idb
extern char asc_99D0B8[]; // idb
extern char asc_99D0BC[]; // idb
extern char asc_99D0C0[]; // idb
extern char asc_99D0C4[]; // idb
extern char asc_99D0CC[]; // idb
extern char asc_99D0D0[]; // idb
extern char aKeyremappingwi[]; // idb
extern int (__stdcall *KeyRemappingBut::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KeyRemappingBut::_vftable_)(void *p, char); // weak
extern int (__stdcall *KeyRemappingWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KeyRemappingWin::_vftable_)(void *p, char); // weak
extern char aGameKqscorewin[]; // idb
extern char aPanel01_60[]; // idb
extern char aKqscorewin[]; // idb
extern char byte_99D5A7; // idb
extern char aTheme_89[]; // idb
extern char byte_99D5AE[2]; // idb
extern char aPanel02_31[]; // idb
extern char aTeam[]; // idb
extern char aText01_20[]; // idb
extern char aScore[]; // idb
extern char aText02_7[]; // idb
extern char aGuildname01[]; // idb
extern char aGuildname02[]; // idb
extern char aScore01[]; // idb
extern char aScore02[]; // idb
extern char aD_34[]; // idb
extern int (__stdcall *KQScoreWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KQScoreWin::_vftable_)(void *p, char); // weak
extern char aGamePtywin_nif[]; // idb
extern char aHpground01[]; // idb
extern char aFill_hp_2[]; // idb
extern char aSpground01[]; // idb
extern char aFill_sp[]; // idb
extern char aLpground01[]; // idb
extern char aFill_lp[]; // idb
extern int (__stdcall *MainCharHPBarWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MainCharHPBarWin::_vftable_)(void *p, char); // weak
extern char aGameMenu_nif[]; // idb
extern char aGameMenu01_nif[]; // idb
extern char aMainmenuwin[]; // idb
extern char aSystemnor[]; // idb
extern char aSystemover[]; // idb
extern char aSystemnor_0[]; // idb
extern char aSystemnor_1[]; // idb
extern char aSystemover_0[]; // idb
extern char aMinihousenor[]; // idb
extern char aMinihouseover[]; // idb
extern char aMinihousenor_0[]; // idb
extern char aMinihousenor_1[]; // idb
extern char aMinihouseove_0[]; // idb
extern char aActionnor[]; // idb
extern char aActionover[]; // idb
extern char aActionnor_0[]; // idb
extern char aActionnor_1[]; // idb
extern char aActionover_0[]; // idb
extern char aComunor[]; // idb
extern char aComuover[]; // idb
extern char aComunor_0[]; // idb
extern char aComunor_1[]; // idb
extern char aComuover_0[]; // idb
extern char aQuestnor[]; // idb
extern char aQuestover[]; // idb
extern char aQuestnor_0[]; // idb
extern char aQuestnor_1[]; // idb
extern char aQuestover_0[]; // idb
extern char aSkillnor[]; // idb
extern char aSkillover[]; // idb
extern char aSkillnor_0[]; // idb
extern char aSkillnor_1[]; // idb
extern char aSkillover_0[]; // idb
extern char aInventorynor[]; // idb
extern char aInventoryover[]; // idb
extern char aInventorynor_0[]; // idb
extern char aInventorynor_1[]; // idb
extern char aInventoryove_0[]; // idb
extern char aNewitem_0[]; // idb
extern char aItemmallnor[]; // idb
extern char aItemmallover[]; // idb
extern char aItemmallnor_0[]; // idb
extern char aItemmallnor_1[]; // idb
extern char aItemmallover_0[]; // idb
extern char aForumnor[]; // idb
extern char aForumover[]; // idb
extern char aForumnor_0[]; // idb
extern char aForumnor_1[]; // idb
extern char aForumover_0[]; // idb
extern char aStatusnor[]; // idb
extern char aStatusover[]; // idb
extern char aStatusnor_0[]; // idb
extern char aStatusnor_1[]; // idb
extern char aStatusover_0[]; // idb
extern char aQuestionnor[]; // idb
extern char aQuestionover[]; // idb
extern char aQuestionnor_0[]; // idb
extern char aQuestionnor_1[]; // idb
extern char aQuestionover_0[]; // idb
extern char aPanelbtn01nor[]; // idb
extern char aPanelbtn01over[]; // idb
extern char aPanelbtn01no_0[]; // idb
extern char aPanelbtn01no_1[]; // idb
extern char aPanelbtn01ov_0[]; // idb
extern char aPanelbtn02nor[]; // idb
extern char aPanelbtn02over[]; // idb
extern char aPanelbtn02no_0[]; // idb
extern char aPanelbtn02no_1[]; // idb
extern char aPanelbtn02ov_0[]; // idb
extern char aGameMenu_parti[]; // idb
extern char aDummy_system[13]; // weak
extern char aDummy_comu[11]; // weak
extern char aDummy_minihous[16]; // weak
extern char aDummy_quest[12]; // weak
extern char aDummy_action[13]; // weak
extern char aDummy_skill[12]; // weak
extern char aDummy_inventor[16]; // weak
extern char aDummy_status[13]; // weak
extern char aDummy_forum[12]; // weak
extern char aDummy_status_0[13]; // weak
extern char aDummy_status_1[13]; // weak
extern char aDummy_noise[12]; // weak
extern int (__stdcall *MainMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MainMenuWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_99E154; // weak
extern _UNKNOWN unk_99E155; // weak
extern char aKaris_effect01[]; // idb
extern char aGameMakekaris_[]; // idb
extern char aFrame_53[]; // idb
extern char aMakekariswin[]; // idb
extern char aWintitle_33[]; // idb
extern char aPanel01_61[]; // idb
extern char aImageback01[]; // idb
extern char aPanel02_32[]; // idb
extern char aIconslot_16[]; // idb
extern char aForgeslot02[]; // idb
extern char aForgeslot02d_0[]; // idb
extern char aForgetext01[]; // idb
extern char aForgetext01_0[]; // idb
extern char aForgetext_0[]; // idb
extern char aForgetext_1[]; // idb
extern char aClsnor_35[]; // idb
extern char aClsclick_35[]; // idb
extern char aClsover_35[]; // idb
extern char aHelplinknor_49[12]; // weak
extern char aHelplinknor_50[]; // idb
extern char aHelplinkcli_28[]; // idb
extern char aHelplinkove_28[]; // idb
extern char aOknor_9[]; // idb
extern char aOkclick_7[]; // idb
extern char aOkover_7[]; // idb
extern char aCancelnor_6[]; // idb
extern char aCancelclick_6[]; // idb
extern char aCancelover_6[]; // idb
extern char aMakekaris[]; // idb
extern int (__stdcall *KarisForgeSlotInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KarisForgeSlotInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MakeKarisWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MakeKarisWin::_vftable_)(void *p, char); // weak
extern char aGameMaplinkgat[]; // idb
extern char byte_99E7A1; // idb
extern char byte_99E7A2[2]; // idb
extern char aPanel01_62[]; // idb
extern char aMaplinkgatewin[]; // idb
extern char aPanel02_33[]; // idb
extern char aCls_nor[]; // idb
extern char aCls_click[]; // idb
extern char aCls_over[]; // idb
extern char aMapslot_2d_nor[]; // idb
extern char aMapslot_2d_cli[]; // idb
extern char aMapslot_2d_ove[]; // idb
extern char aText01_21[]; // idb
extern char aText02_8[]; // idb
extern char aPage_nor00[]; // idb
extern char aPage_click00[]; // idb
extern char aPage_over00[]; // idb
extern char aPage_nor01[]; // idb
extern char aPage_click01[]; // idb
extern char aPage_over01[]; // idb
extern char aMaplinkgatew_0[]; // idb
extern char aNeverCountOver[]; // idb
extern char aError_4[]; // idb
extern char aMaplinkgatew_1[]; // idb
extern char aAction_4[]; // idb
extern char aMinlv[]; // idb
extern char aSTownportalNon[]; // idb
extern char aAction_1[]; // idb
extern char aMinlv_0[]; // idb
extern char aSTownportalS_d[]; // idb
extern char aSTownportalS_0[]; // idb
extern char aSTownportalS_1[]; // idb
extern char aAction_2[]; // idb
extern char aAction_3[]; // idb
extern char aMinlv_1[]; // idb
extern char aD_35[]; // idb
extern char aMinlv_2[]; // idb
extern int (__stdcall *MapLinkGateWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MapLinkGateWin::_vftable_)(void *p, char); // weak
extern char aGameMarketsear[]; // idb
extern char byte_99EBCA; // idb
extern _UNKNOWN unk_99EBCB; // weak
extern char aLoadfail_13[]; // idb
extern char aGameMarketse_0[]; // idb
extern char aFrame_54[]; // idb
extern char aMarketsearchwi[]; // idb
extern char aTheme_90[6]; // weak
extern char aTheme_91[]; // idb
extern char aPlane01_8[]; // idb
extern char aLine01[]; // idb
extern char aClsclick_36[]; // idb
extern char aClsover_36[]; // idb
extern char aClsnor_36[]; // idb
extern char aHelplinknor_51[12]; // weak
extern char aHelplinknor_52[]; // idb
extern char aHelplinkcli_29[]; // idb
extern char aHelplinkove_29[]; // idb
extern char aWintitle_34[]; // idb
extern char aColumnbarnor_9[]; // idb
extern char aColumnbarcli_8[]; // idb
extern char aColumnbarove_8[]; // idb
extern char aColumn01_7[]; // idb
extern char pcNodeName[]; // idb
extern char aColumn02_4[]; // idb
extern char aColumn03_4[]; // idb
extern char aGeminput_2[]; // idb
extern char aGoldinput_2[]; // idb
extern char aSilverinput_2[]; // idb
extern char aCopperinput_2[]; // idb
extern char aColumnbox_1[]; // idb
extern char aSlidebar_sl_11[]; // idb
extern char aSlidebar_dn_28[]; // idb
extern char aSlidebar_up_28[]; // idb
extern char aSlidebar_8[]; // idb
extern char aMarketsearch_9[]; // idb
extern char aTitle01_1[]; // idb
extern char aTitle02_0[]; // idb
extern char aTitle03[]; // idb
extern char aGembtn_1[]; // idb
extern char aGoldbtn_1[]; // idb
extern char aSilverbtn_2[]; // idb
extern char aCopperbtn_1[]; // idb
extern char aText_itemname[]; // idb
extern char aText_itemnamei[]; // idb
extern char aMynmch[]; // idb
extern char aText01_22[]; // idb
extern char aSearchbtn[]; // idb
extern char aBtn01_2[]; // idb
extern char aText_itemgrade[]; // idb
extern char aItemgradepulld[]; // idb
extern char aItemgrade[]; // idb
extern char asc_99EE48[]; // idb
extern char aItemgrade01[]; // idb
extern char aText_itemgra_0[]; // idb
extern char aText_itemgra_1[]; // idb
extern char aText_itemgra_2[]; // idb
extern char aText_itemgra_3[]; // idb
extern char aText_itemgra_4[]; // idb
extern char aText_itemgra_5[]; // idb
extern char aText_itemgra_6[]; // idb
extern char aText_itemgra_7[]; // idb
extern char aD_36[]; // idb
extern char aD_37[]; // idb
extern char aD_38[]; // idb
extern char aD_39[]; // idb
extern char aD_40[]; // idb
extern char aInvitemslot001[]; // idb
extern int (__thiscall *MarketSearchItem::_vftable_)(void *p, char); // weak
extern int (__stdcall *MarketSearchWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MarketSearchWin::_vftable_)(void *p, char); // weak
extern char aGameMinihousei[]; // idb
extern char aFrame_55[]; // idb
extern char aMinihouseinven[]; // idb
extern char aTheme_92[6]; // weak
extern char aTheme_93[]; // idb
extern char aClsnor_37[]; // idb
extern char aClsclick_37[]; // idb
extern char aClsover_37[]; // idb
extern char aHelplinknor_53[12]; // weak
extern char aHelplinknor_54[]; // idb
extern char aHelplinkcli_30[]; // idb
extern char aHelplinkove_30[]; // idb
extern char aPanel01_63[]; // idb
extern char aPanel02_34[]; // idb
extern char aWintitle_35[]; // idb
extern char aPrepagenor_6[]; // idb
extern char aPrepageclick_6[]; // idb
extern char aPrepageover_6[]; // idb
extern char aNextpagenor_6[]; // idb
extern char aNextpageclic_6[]; // idb
extern char aNextpageover_6[]; // idb
extern char aIconslot_17[]; // idb
extern char aSgameMinihou_0[24]; // weak
extern char aSgameMinihou_1[]; // idb
extern char aPlane01_9[]; // idb
extern char aEquipslot02d[]; // idb
extern char aMinihouseslot[14]; // weak
extern char aInvitemslot0_3[]; // idb
extern char aInvitemslot0_4[]; // idb
extern char aSgameMinihouse[]; // idb
extern char aMinihouseinv[]; // idb
extern char aHouse_mushroom[]; // idb
extern int (__stdcall *MiniHouseInvTabButWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniHouseInvTabButWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MiniHouseInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniHouseInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MiniHouseInventoryWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniHouseInventoryWin::_vftable_)(void *p, char); // weak
extern char aGameMinihousem[]; // idb
extern char aFrame_56[]; // idb
extern char aMinihousemenuw[]; // idb
extern char aTheme_94[6]; // weak
extern char aTheme_95[]; // idb
extern char aPanel01_64[]; // idb
extern char aPanel02_35[]; // idb
extern char aClsnor_38[]; // idb
extern char aClsclick_38[]; // idb
extern char aClsover_38[]; // idb
extern char aHelplinknor_55[12]; // weak
extern char aHelplinknor_56[]; // idb
extern char aHelplinkcli_31[]; // idb
extern char aHelplinkove_31[]; // idb
extern char aWintitle_36[]; // idb
extern char aRestnor[]; // idb
extern char aRestclick[]; // idb
extern char aRestover[]; // idb
extern char aPrivatstorenor[]; // idb
extern char aPrivatstorecli[]; // idb
extern char aPrivatstoreove[]; // idb
extern char aEntancenor[]; // idb
extern char aEntanceclick[]; // idb
extern char aEntanceover[]; // idb
extern char aChangenor[]; // idb
extern char aChangeclick[]; // idb
extern char aChangeover[]; // idb
extern char aQuitnor[]; // idb
extern char aQuitclick_0[]; // idb
extern char aQuitover_0[]; // idb
extern char aMinihousemenu[]; // idb
extern int (__stdcall *MiniHouseMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniHouseMenuWin::_vftable_)(void *p, char); // weak
extern char aGameMinimap_ni[]; // idb
extern _UNKNOWN unk_99FE89; // weak
extern char aChrimg01[]; // idb
extern char aLinkimg[]; // idb
extern char aLinkdirimg[]; // idb
extern char aParimg[]; // idb
extern char aNpcimg[]; // idb
extern char aFrame_57[]; // idb
extern char aMinimapwin[]; // idb
extern char aEventpanel[11]; // weak
extern char aEventpanel_0[]; // idb
extern char aMap_mask01[]; // idb
extern char aMap_mask[9]; // weak
extern char aMap_mask_0[]; // idb
extern char aMap_mask_1[]; // idb
extern char aPlane01_10[]; // idb
extern char aMap_coordinate[]; // idb
extern char aPlane02d[]; // idb
extern char aMaxbtnnor[]; // idb
extern char aMaxbtnclick[]; // idb
extern char aMaxbtnover[]; // idb
extern char aMinbtnnor[]; // idb
extern char aMinbtnclick[]; // idb
extern char aMinbtnover[]; // idb
extern char aAllmapbtnnor_0[]; // idb
extern char aAllmapbtncli_0[]; // idb
extern char aAllmapbtnove_0[]; // idb
extern char aSchedulebtnnor[]; // idb
extern char aSchedulebtncli[]; // idb
extern char aSchedulebtnove[]; // idb
extern char aNewkquest[]; // idb
extern char aExpeditionnor[]; // idb
extern char aExpeditionclic[]; // idb
extern char aExpeditionover[]; // idb
extern char aPartymatchingn[]; // idb
extern char aPartymatchingc[]; // idb
extern char aPartymatchingo[]; // idb
extern char aProductnor[]; // idb
extern char aProductclick[]; // idb
extern char aProductover[]; // idb
extern char aWintitle_37[]; // idb
extern char aGuildquitpanel[]; // idb
extern char aClsnor_39[]; // idb
extern char aClsclick_39[]; // idb
extern char aClsover_39[]; // idb
extern char aForcered_0[]; // idb
extern char aForceblue_0[]; // idb
extern char aSta_gti_scan_u[]; // idb
extern char aHardmodeflag[]; // idb
extern char aGameHeromode_n[]; // idb
extern int (__stdcall *MiniMapMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniMapMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MainCharMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MainCharMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *NpcMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NpcMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *PartyMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PartyMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *RaidMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RaidMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GTIScanMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTIScanMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *KQTeamMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KQTeamMarkWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *QuestHelperMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *QuestHelperMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MobAreaMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MobAreaMarkWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MapMarkWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MapMarkWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<MiniMapWin::sKQAlarmInfo__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *MiniMapWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniMapWin::_vftable_)(void *p, char); // weak
extern char aGamePtywin_min[]; // idb
extern _UNKNOWN unk_9A16D9; // weak
extern _UNKNOWN unk_9A16DA; // weak
extern _UNKNOWN unk_9A16DB; // weak
extern char aPanel01_65[]; // idb
extern char aPartymemberwin[]; // idb
extern char aEventpanel_1[11]; // weak
extern char aEventpanel_2[]; // idb
extern char aSpground[]; // idb
extern char aLpground[]; // idb
extern char aPanel02_36[]; // idb
extern char aFill_hp_star_2[]; // idb
extern char aFill_sp_start[]; // idb
extern char aFill_hp_end_2[]; // idb
extern char aFill_sp_end[]; // idb
extern char aFill_hp_3[]; // idb
extern char aFill_hp_4[]; // idb
extern char aFill_sp_0[]; // idb
extern char aFill_sp_1[]; // idb
extern char aFill_lp_start[]; // idb
extern char aFill_lp_end[]; // idb
extern char aFill_lp_0[]; // idb
extern char aFill_lp_1[]; // idb
extern char aCharbuffbox02d[]; // idb
extern char aChardbuffbox02[]; // idb
extern char aBuffextendnor[]; // idb
extern char aBuffextendclic[]; // idb
extern char aBuffextendover[]; // idb
extern char aOpen_3[]; // idb
extern char aDebuffextendno[]; // idb
extern char aDebuffextendcl[]; // idb
extern char aDebuffextendov[]; // idb
extern char aOpen_4[]; // idb
extern char aCharname_0[]; // idb
extern char a2_4[]; // idb
extern char aChief_party[]; // idb
extern char aPanel_job[]; // idb
extern char aChar_job[]; // idb
extern int (__stdcall *MiniPartyWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniPartyWin::_vftable_)(void *p, char); // weak
extern char aGameMoney_ni_0[]; // idb
extern _UNKNOWN unk_9A1ACF; // weak
extern char aPlane01_11[]; // idb
extern char aMoneywin[]; // idb
extern _UNKNOWN unk_9A1AE1; // weak
extern _UNKNOWN unk_9A1AE2; // weak
extern _UNKNOWN unk_9A1AE3; // weak
extern char aTheme_96[6]; // weak
extern _UNKNOWN unk_9A1AEA; // weak
extern _UNKNOWN unk_9A1AEB; // weak
extern char aTheme_97[]; // idb
extern _UNKNOWN unk_9A1AF2; // weak
extern _UNKNOWN unk_9A1AF3; // weak
extern char aOknor_10[]; // idb
extern _UNKNOWN unk_9A1AFA; // weak
extern _UNKNOWN unk_9A1AFB; // weak
extern char aOkclick_8[]; // idb
extern char aOkover_8[]; // idb
extern char aCancelnor_7[]; // idb
extern char aCancelclick_7[]; // idb
extern char aCancelover_7[]; // idb
extern char aMycopperbtn_1[]; // idb
extern char aMycopperbtn_2[]; // idb
extern char aMycopperbtn_3[]; // idb
extern char aMycopperbtn_4[]; // idb
extern char aMysilverbtn_1[]; // idb
extern char aMysilverbtn_2[]; // idb
extern char aMysilverbtn_3[]; // idb
extern char aMysilverbtn_4[]; // idb
extern char aMygoldbtn_1[]; // idb
extern char aMygoldbtn_2[]; // idb
extern char aMygoldbtn_3[]; // idb
extern char aMygoldbtn_4[]; // idb
extern char aMygembtn_1[]; // idb
extern char aMygembtn_2[]; // idb
extern char aMygembtn_3[]; // idb
extern char aMygembtn_4[]; // idb
extern char aMycopperinput[]; // idb
extern char aMycopperinpu_0[]; // idb
extern char aMysilverinput[]; // idb
extern char aMysilverinpu_0[]; // idb
extern char aMygoldinput_0[]; // idb
extern char aMygoldinput_1[]; // idb
extern char aMygeminput[]; // idb
extern char aMygeminput_0[]; // idb
extern char aTextbox_5[]; // idb
extern char aTextbox01_1[]; // idb
extern char aGameHolyprewar[]; // idb
extern char aPlane01_12[]; // idb
extern char aHolyrewardmone[]; // idb
extern char aTheme_98[6]; // weak
extern char asc_9A1CB0[]; // idb
extern char aOknor_11[]; // idb
extern char aOkclick_9[]; // idb
extern char aOkover_9[]; // idb
extern char aCancelnor_8[]; // idb
extern char aCancelclick_8[]; // idb
extern char aCancelover_8[]; // idb
extern char aMycopperbtn_5[]; // idb
extern char aMycopperbtn_6[]; // idb
extern char aMycopperbtn_7[]; // idb
extern char aMycopperbtn_8[]; // idb
extern char aMysilv[6]; // idb
extern char aErbtn[6]; // weak
extern char aMysi[4]; // idb
extern char aLverbtn[8]; // weak
extern char aMy[2]; // idb
extern char aSilverbtn[10]; // weak
extern char aMysilverbtn_5[]; // idb
extern char aMygoldbtn_5[]; // idb
extern char aMygoldbtn_6[]; // idb
extern char aMygoldbtn_7[]; // idb
extern char aMygoldbtn_8[]; // idb
extern char aMygembtn_5[]; // idb
extern char aMygembtn_6[]; // idb
extern char aMygembtn_7[]; // idb
extern char aMygembtn_8[]; // idb
extern char aMycopperinpu_1[]; // idb
extern char aMycopperinpu_2[]; // idb
extern char aMysilverinpu_1[]; // idb
extern char aMysilverinpu_2[]; // idb
extern char aMygoldinput_2[]; // idb
extern char aMygoldinput_3[]; // idb
extern char aMygeminput_1[]; // idb
extern char aMygeminput_2[]; // idb
extern char aTextbox01_2[]; // idb
extern char aTextbox02_2[]; // idb
extern int (__stdcall *MoneyWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MoneyWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *HolyRewardMoneyWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *HolyRewardMoneyWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *off_9A2110)(NiNode *pkParent, int pkChild, int bFirstAvail); // weak
extern int (__thiscall *off_9A211C)(NiNode *pkParent, int result, int i, int pkChild); // weak
extern int (*off_9A2124)(); // weak
extern char aGameRunbutton_[]; // idb
extern char aLoadfail_14[]; // idb
extern char aGameRunbutto_0[]; // idb
extern char aPanel01_66[]; // idb
extern char aMovemodewin[]; // idb
extern char aBtnnormal[]; // idb
extern char aBtnclick_2[]; // idb
extern char aBtnover_2[]; // idb
extern int (__stdcall *MoveModeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MoveModeWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *off_9A24F8)(int); // weak
extern int (*off_9A2504)(); // weak
extern int (*off_9A250C)(); // weak
extern char aGameMysteryvau[]; // idb
extern char aPlane01_13[]; // idb
extern char aMysteryvaultwi[]; // idb
extern char aBtn01_nor[]; // idb
extern char aBtn01_click[]; // idb
extern char aBtn01_over[]; // idb
extern char aNum00[]; // idb
extern char aNum01_1[]; // idb
extern char aNum02[]; // idb
extern char aNum03[]; // idb
extern char aNum04[]; // idb
extern char aNum05[]; // idb
extern char aNum06[]; // idb
extern char aNum07[]; // idb
extern char aNum08[]; // idb
extern char aNum09[]; // idb
extern char aNum10[]; // idb
extern char aNum20[]; // idb
extern char aNum30[]; // idb
extern char aNum40[]; // idb
extern char aNum50[]; // idb
extern char aNum60[]; // idb
extern char aNum70[]; // idb
extern char aNum80[]; // idb
extern char aNum90[]; // idb
extern char aPlane02_0[]; // idb
extern char aGameMysteryv_0[]; // idb
extern int (__stdcall *MysteryVaultWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MysteryVaultWin::_vftable_)(void *p, char); // weak
extern char asc_9A28C4[3]; // idb
extern char byte_9A28C7; // idb
extern _UNKNOWN unk_9A28C8; // weak
extern char byte_9A28C9[3]; // idb
extern char aGameNpcwtitle_[]; // idb
extern char aFrame_58[]; // idb
extern char aNpci[4]; // idb
extern char aTemwin[7]; // weak
extern char asc_9A28F4[6]; // weak
extern char asc_9A28FC[]; // idb
extern char aClsnor_40[]; // idb
extern char aClsclick_40[]; // idb
extern char aClsover_40[]; // idb
extern char aHelplinknor_57[12]; // weak
extern char aHelplinknor_58[]; // idb
extern char aHelplinkcli_32[]; // idb
extern char aHelplinkove_32[]; // idb
extern char aPanel01_67[]; // idb
extern char aPanel02_37[]; // idb
extern char aWintitle_38[]; // idb
extern char aIconslot_18[]; // idb
extern char aIconslot03d_3[]; // idb
extern char aPrepageover_7[]; // idb
extern char aPrepageclick_7[]; // idb
extern char aPrepagenor_7[]; // idb
extern char aNextpageover_7[]; // idb
extern char aNextpageclic_7[]; // idb
extern char aNextpagenor_7[]; // idb
extern char aNumber_3[]; // idb
extern char aNumber01_1[]; // idb
extern char aWtitlenor[]; // idb
extern char aWtitleclick[]; // idb
extern char aWtitleover[]; // idb
extern char aEnchantnor[]; // idb
extern char aEnchantclick[]; // idb
extern char aEnchantover[]; // idb
extern char aGeneralnor[]; // idb
extern char aGeneralclick[]; // idb
extern char aGeneralover[]; // idb
extern char aRepurchaseno_0[]; // idb
extern char aRepurchasecl_0[]; // idb
extern char aRepurchaseov_0[]; // idb
extern char aNpcwtitle_0[]; // idb
extern char aDD_14[]; // idb
extern int (__stdcall *ItemShopInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemShopInvWin::_vftable_)(void *p, char); // weak
extern int (*off_9A2CC8)(); // weak
extern int (__stdcall *off_9A2CD4)(int pkTexture, int iXPos, int iYPos, int uiWidth, int uiHeight, int pkParent, int pcName, int uiExtStyle); // weak
extern int (__stdcall *off_9A2CDC)(int uiCmdMsgParam); // weak
extern int (__stdcall *NPCItemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NPCItemWin::_vftable_)(void *p, char); // weak
extern char aGameNpcskill_n[]; // idb
extern _UNKNOWN unk_9A2F96; // weak
extern char aFrame_59[]; // idb
extern char aNpcskillwin[]; // idb
extern char asc_9A2FAC[6]; // weak
extern char asc_9A2FB4[]; // idb
extern char aIconslot_19[]; // idb
extern char aClsnor_41[]; // idb
extern char aClsclick_41[]; // idb
extern char aClsover_41[]; // idb
extern char aHelplinknor_59[12]; // weak
extern char aHelplinknor_60[]; // idb
extern char aHelplinkcli_33[]; // idb
extern char aHelplinkove_33[]; // idb
extern char aPanel01_68[]; // idb
extern char aPanel02_38[]; // idb
extern char aWintitle_39[]; // idb
extern char aIconslot03d_4[]; // idb
extern char aActsknor[]; // idb
extern char aActskclick[]; // idb
extern char aActskover[]; // idb
extern char aPassknor[]; // idb
extern char aPasskclick[]; // idb
extern char aPasskover[]; // idb
extern char aProsknor[]; // idb
extern char aProskclick[]; // idb
extern char aProskover[]; // idb
extern _UNKNOWN unk_9A30B2; // weak
extern char aPrepagenor_8[]; // idb
extern char aPrepag[6]; // idb
extern char aEclick[7]; // weak
extern char aPrepageover_8[]; // idb
extern char aNextpagenor_8[]; // idb
extern char aNextpageclic_8[]; // idb
extern char aNextpageover_8[]; // idb
extern char aNumber_4[]; // idb
extern char aNumber01_2[]; // idb
extern char aJobtaboff02d[]; // idb
extern char aJobtabon02d[]; // idb
extern char aNpcskill_0[]; // idb
extern char aDD_15[]; // idb
extern int (__stdcall *NPCSkillInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NPCSkillInvWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *off_9A33BC)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak
extern int (__stdcall *NPCSkillWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NPCSkillWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *off_9A3498)(int uiHeight); // weak
extern int (*off_9A34A4)(); // weak
extern int (__stdcall *off_9A34AC)(int iYPos); // weak
extern char aGameNpcsoul_ni[]; // idb
extern char aHpsoulnor[]; // idb
extern char aSpsoulnor[]; // idb
extern char aFrame_60[]; // idb
extern char aNpcsoulwin[]; // idb
extern char asc_9A3664[6]; // weak
extern char asc_9A366C[]; // idb
extern char aIconslot_20[]; // idb
extern char aClsnor_42[]; // idb
extern char aClsclick_42[]; // idb
extern char aClsover_42[]; // idb
extern char aHelplinknor_61[12]; // weak
extern char aHelplinknor_62[]; // idb
extern char aHelplinkcli_34[]; // idb
extern char aHelplinkove_34[]; // idb
extern char aPanel01_69[]; // idb
extern char aPanel02_39[]; // idb
extern char aWintitle_40[]; // idb
extern char aIconslot03d_5[]; // idb
extern char aPwrsoulnor[]; // idb
extern char aPwrsoulclick[]; // idb
extern char aPwrsoulover[]; // idb
extern char aPrepagenor_9[]; // idb
extern char aPrepageclick_8[]; // idb
extern char aPrepageover_9[]; // idb
extern char aNextpagenor_9[]; // idb
extern char aNextpageclic_9[]; // idb
extern char aNextpageover_9[]; // idb
extern char aNpcsoul[]; // idb
extern int (__stdcall *NPCSoulInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NPCSoulInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *NPCSoulWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NPCSoulWin::_vftable_)(void *p, char); // weak
extern char aGameMessagew_8[]; // idb
extern char aPanel01_70[]; // idb
extern char aPartyjoinpropo[]; // idb
extern char asc_9A3C64[6]; // weak
extern _UNKNOWN unk_9A3C6A; // weak
extern char asc_9A3C6C[]; // idb
extern char aBtnnor02_12[]; // idb
extern char aBtnclick02_12[]; // idb
extern char aBtnover02_12[]; // idb
extern char aBtnnor03_6[]; // idb
extern char aBtnclick03_6[]; // idb
extern char aBtnover03_6[]; // idb
extern int (__stdcall *PartyJoinProposeWin::_vftable_)(int); // weak
extern int (__stdcall *PartyJoinProposeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PartyJoinProposeWin::_vftable_)(void *p, char); // weak
extern char aGamePartyrooto[]; // idb
extern char byte_9A3F25[3]; // idb
extern char aFrame_61[6]; // weak
extern char aFrame_62[]; // idb
extern char aPartylootsetup[]; // idb
extern char asc_9A3F4C[6]; // weak
extern char asc_9A3F54[]; // idb
extern char aPanel01_71[]; // idb
extern char aPanel02_40[]; // idb
extern char aWintitle_41[]; // idb
extern char aClsover_43[]; // idb
extern char aClsclick_43[]; // idb
extern char aClsnor_43[]; // idb
extern char aGainmethod[]; // idb
extern char aItemgrade_0[]; // idb
extern char aRootselect[]; // idb
extern char aGainmethodover[]; // idb
extern char aGainmethodclic[]; // idb
extern char aGainmethodnor[]; // idb
extern char aItemgradeover[]; // idb
extern char aItemgradeclick[]; // idb
extern char aItemgradenor[]; // idb
extern char aRootselectover[]; // idb
extern char aRootselectclic[]; // idb
extern char aRootselectnor[]; // idb
extern char aGainmethod_tex[]; // idb
extern char aItemgrade_text[]; // idb
extern char aRootselect_tex[]; // idb
extern char aHelplinknor_63[12]; // weak
extern char aHelplinkove_35[]; // idb
extern char aHelplinkcli_35[]; // idb
extern char aHelplinknor_64[]; // idb
extern char aPartyrootoptio[]; // idb
extern char aGameRaidrootse[]; // idb
extern char aFrame_63[6]; // weak
extern char aFrame_64[]; // idb
extern char aExpeditionloot[]; // idb
extern char asc_9A4100[6]; // weak
extern char asc_9A4108[]; // idb
extern char aPanel01_72[]; // idb
extern char aPanel02_41[]; // idb
extern char aWintitle_42[]; // idb
extern char aColumnbarno_10[]; // idb
extern char aColumnbarove_9[]; // idb
extern char aColumnbarcli_9[]; // idb
extern char aColumn_1[]; // idb
extern char aTextbox_6[]; // idb
extern char aSlidebar_sl_12[]; // idb
extern char aSlidebar_dn_29[]; // idb
extern char aSlidebar_up_29[]; // idb
extern char aSlidebar_9[]; // idb
extern char aClsover_44[]; // idb
extern char aClsclick_44[]; // idb
extern char aClsnor_44[]; // idb
extern char aHelplinknor_65[12]; // weak
extern char aHelplinkove_36[]; // idb
extern char aHelplinkcli_36[]; // idb
extern char aHelplinknor_66[]; // idb
extern char aRaidrootselect[]; // idb
extern int (__stdcall *PartyLootSelectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PartyLootSelectWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *PartyLootSetupWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PartyLootSetupWin::_vftable_)(void *p, char); // weak
extern char aGamePartymatch[]; // idb
extern char aFrame_65[6]; // weak
extern char aFrame_66[]; // idb
extern char aFriendwin_0[]; // idb
extern char asc_9A46C8[6]; // weak
extern char asc_9A46D0[]; // idb
extern char aPanel01_73[]; // idb
extern char aPanel02_42[]; // idb
extern char aIconslot_21[]; // idb
extern char aWintitle_43[]; // idb
extern char aClsnor_45[]; // idb
extern char aClsclick_45[]; // idb
extern char aClsover_45[]; // idb
extern char aHelplinknor_67[12]; // weak
extern char aHelplinknor_68[]; // idb
extern char aHelplinkcli_37[]; // idb
extern char aHelplinkove_37[]; // idb
extern char aText02_9[]; // idb
extern char aCategory_1[]; // idb
extern char aColumnbarno_11[]; // idb
extern char aColumnbarcl_10[]; // idb
extern char aColumnbarov_10[]; // idb
extern char aCharname01[]; // idb
extern char aTitle01_2[]; // idb
extern char aText01_23[]; // idb
extern char aCharname_1[]; // idb
extern char aTitle_5[]; // idb
extern char aBase_2[]; // idb
extern char aFriendnor_1[]; // idb
extern char aFriendclick_1[]; // idb
extern char aFriendover_1[]; // idb
extern char aGuildnor_1[]; // idb
extern char aGuildclick_1[]; // idb
extern char aGuildover_1[]; // idb
extern char aMasternor_1[]; // idb
extern char aMasterclick_1[]; // idb
extern char aMasterover_1[]; // idb
extern char aWeddingnor_1[]; // idb
extern char aWeddingclick_1[]; // idb
extern char aWeddingover_1[]; // idb
extern char aPartymatchno_1[]; // idb
extern char aPartymatchcl_1[]; // idb
extern char aPartymatchov_1[]; // idb
extern char aGuildacademy_4[]; // idb
extern char aGuildacademy_5[]; // idb
extern char aGuildacademy_6[]; // idb
extern char aFriend_1[]; // idb
extern char aHolypromise_1[]; // idb
extern char aGuild_2[]; // idb
extern char aGuildacademy_7[]; // idb
extern char aWedding_1[]; // idb
extern char aPartymatch_1[]; // idb
extern char aPrepagenor_10[]; // idb
extern char aPrepageclick_9[]; // idb
extern char aPrepageover_10[]; // idb
extern char aNextpagenor_10[]; // idb
extern char aNextpagecli_10[]; // idb
extern char aNextpageove_10[]; // idb
extern char aTextinput[]; // idb
extern char aTextinput01[]; // idb
extern char aTextinput01_0[]; // idb
extern char aBtn01nor_7[]; // idb
extern char aBtn01click_9[]; // idb
extern char aBtn01over_9[]; // idb
extern char aBtn01disable[]; // idb
extern char aBtn02nor_5[]; // idb
extern char aBtn02click_4[]; // idb
extern char aBtn02over_4[]; // idb
extern char aBtn02disable[]; // idb
extern char aBtn03nor_2[]; // idb
extern char aBtn03click_1[]; // idb
extern char aBtn03over_1[]; // idb
extern char aBtn03disable[]; // idb
extern char aBtn04nor_0[]; // idb
extern char aBtn04click_0[]; // idb
extern char aBtn04over_0[]; // idb
extern char aBtn04disable_0[]; // idb
extern int dword_9A4A54; // weak
extern char aPartymatching[]; // idb
extern int (__stdcall *CPartyMatchWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CPartyMatchWin::_vftable_)(void *p, char); // weak
extern char aGamePtywin_n_0[]; // idb
extern char aPanel03_14[]; // idb
extern char aPartymemberw_0[]; // idb
extern _UNKNOWN unk_9A4CD3; // weak
extern char aEventpanel_3[11]; // weak
extern _UNKNOWN unk_9A4CDF; // weak
extern char aEventpanel_4[]; // idb
extern _UNKNOWN unk_9A4CEB; // weak
extern char aSpground_0[]; // idb
extern _UNKNOWN unk_9A4CF5; // weak
extern char aLpground_0[]; // idb
extern char aHpground[]; // idb
extern char aFacecut_mask[13]; // weak
extern char aFacecut_mon_0[]; // idb
extern char aFacecut_otherm[]; // idb
extern char aFacecut_logoff[]; // idb
extern char aFacecut_miniho[]; // idb
extern char aPanel04_5[]; // idb
extern char aFill_hp_star_3[]; // idb
extern char aFill_sp_star_0[]; // idb
extern char aFill_hp_end_3[]; // idb
extern char aFill_sp_end_0[]; // idb
extern char aFill_hp_5[]; // idb
extern char aFill_hp_6[]; // idb
extern char aFill_sp_2[]; // idb
extern char aFill_sp_3[]; // idb
extern char aFill_lp_star_0[]; // idb
extern char aFill_lp_end_0[]; // idb
extern char aFill_lp_2[]; // idb
extern char aCharname_2[]; // idb
extern char a2_5[]; // idb
extern char aChief_party_0[]; // idb
extern char aNum_level[]; // idb
extern char a__3[2]; // weak
extern char aCharbuffbox0_1[]; // idb
extern char aChardbuffbox_0[]; // idb
extern char aBuffextendno_0[]; // idb
extern char aBuffextendcl_0[]; // idb
extern char aBuffextendov_0[]; // idb
extern char aOpen_5[]; // idb
extern char aDebuffextend_0[]; // idb
extern char aDebuffextend_1[]; // idb
extern char aDebuffextend_2[]; // idb
extern char aOpen_6[]; // idb
extern char aPanel_job_0[]; // idb
extern char aChar_job_0[]; // idb
extern char a__4[2]; // weak
extern int (__stdcall *PartyWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PartyWin::_vftable_)(void *p, char); // weak
extern char aPartywinnameI[]; // idb
extern char aMinipartywinna[]; // idb
extern char aGameRankingw_0[]; // idb
extern char aFrame_67[]; // idb
extern char aPkkqrankingwin[]; // idb
extern char aPanel01_74[]; // idb
extern char asc_9A5164[6]; // weak
extern char asc_9A516C[]; // idb
extern char aIconslot_22[]; // idb
extern char aWintitle_44[]; // idb
extern char aTxt02[]; // idb
extern char aTxt01[]; // idb
extern char aBtn01click_10[]; // idb
extern char aBtn01over_10[]; // idb
extern char aBtn01nor_8[]; // idb
extern char aClsclick_46[]; // idb
extern char aClsover_46[]; // idb
extern char aClsnor_46[]; // idb
extern char aHelplinknor_69[12]; // weak
extern char aHelplinkcli_38[]; // idb
extern char aHelplinkove_38[]; // idb
extern char aHelplinknor_70[]; // idb
extern char aColumnbarno_12[]; // idb
extern char aColumnbarcl_11[]; // idb
extern char aColumnbarov_11[]; // idb
extern char aColumn01_8[]; // idb
extern char aColumn02_5[]; // idb
extern char aColumn03_5[]; // idb
extern char aColumn04_2[]; // idb
extern char aColumn05_2[]; // idb
extern char aColumn06_1[]; // idb
extern char aText01_24[]; // idb
extern char aSlidebar_sl_13[]; // idb
extern char aSlidebar_dn_30[]; // idb
extern char aSlidebar_up_30[]; // idb
extern char aSlidebar_10[]; // idb
extern char aTitle01over_4[]; // idb
extern char aTitle01over_5[]; // idb
extern char aTitle01nor_4[]; // idb
extern char aTitle02over_4[]; // idb
extern char aTitle02over_5[]; // idb
extern char aTitle02nor_4[]; // idb
extern char aTitle03over_4[]; // idb
extern char aTitle03over_5[]; // idb
extern char aTitle03nor_4[]; // idb
extern char aTitle04over_4[]; // idb
extern char aTitle04over_5[]; // idb
extern char aTitle04nor_4[]; // idb
extern char aTitle05over_1[]; // idb
extern char aTitle05over_2[]; // idb
extern char aTitle05nor_1[]; // idb
extern char aTitle06over_1[]; // idb
extern char aTitle06over_2[]; // idb
extern char aTitle06nor_1[]; // idb
extern char asc_9A53B0[]; // idb
extern char aD_41[]; // idb
extern char aD_42[]; // idb
extern char aD_43[]; // idb
extern char aD_44[]; // idb
extern char aD_45[]; // idb
extern char aRankingwin[]; // idb
extern int (__stdcall *PkKqRankingWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PkKqRankingWin::_vftable_)(void *p, char); // weak
extern char aGameKdscorerea[]; // idb
extern _UNKNOWN unk_9A5631; // weak
extern _UNKNOWN unk_9A5632; // weak
extern char aFrame_68[]; // idb
extern char aPkrealtiemrank[]; // idb
extern char asc_9A5650[]; // idb
extern char aPlane_7[]; // idb
extern char aWintitle_45[]; // idb
extern char aCls_2[]; // idb
extern char aHelplinknor_71[12]; // weak
extern char aHelplinkcli_39[]; // idb
extern char aHelplinkove_39[]; // idb
extern char aHelplinknor_72[]; // idb
extern char aTitle02d[]; // idb
extern int (__thiscall *off_9A56B4)(PgWin *pkParent, int pkFrameWork); // weak
extern char aWin_1[4]; // idb
extern char aLose[]; // idb
extern char aColumnbarno_13[]; // idb
extern char aColumn02d[]; // idb
extern char aPlane01_14[]; // idb
extern char asc_9A56E8[]; // idb
extern char aKdscorerealtim[]; // idb
extern int (__stdcall *PkRealTiemRankWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PkRealTiemRankWin::_vftable_)(void *p, char); // weak
extern char aGamePlayguidem[]; // idb
extern char byte_9A5952; // idb
extern char byte_9A5953; // idb
extern char aMinimumnor[]; // idb
extern char byte_9A595F; // idb
extern char aPlayguideminwi[]; // idb
extern char aMinimumnor_0[]; // idb
extern _UNKNOWN unk_9A597B; // weak
extern char aMinimumclick[]; // idb
extern _UNKNOWN unk_9A5989; // weak
extern char aMinimumover[]; // idb
extern char aGamePlayguidew[]; // idb
extern char aPanel01_75[8]; // weak
extern char aFrame_69[]; // idb
extern char aPlayguideconte[]; // idb
extern char aWintitle_46[]; // idb
extern char asc_9A59E0[]; // idb
extern char aPanel01_76[]; // idb
extern char aPanel02_43[]; // idb
extern char aClsnor_47[]; // idb
extern char aClsclick_47[]; // idb
extern char aClsover_47[]; // idb
extern char aGuidetitle[]; // idb
extern char aGuideexplanati[]; // idb
extern char aGuideimage[]; // idb
extern char aGuidepagenumte[]; // idb
extern char aGuidepage_nor0[]; // idb
extern char aGuidepage_clic[]; // idb
extern char aGuidepage_over[]; // idb
extern char aGuidepage_no_0[]; // idb
extern char aGuidepage_cl_0[]; // idb
extern char aGuidepage_ov_0[]; // idb
extern char aGuideserchtext[]; // idb
extern char aListbtnnor[]; // idb
extern char aListbtnclick[]; // idb
extern char aListbtnover[]; // idb
extern char aTextlist02dnor[]; // idb
extern char aTextlist02dn_0[]; // idb
extern char aTextlist02dcli[]; // idb
extern char aTextlist02dove[]; // idb
extern char aSlidebar_sl_14[]; // idb
extern char aSlidebar_dn_31[]; // idb
extern char aSlidebar_up_31[]; // idb
extern char aSlidebar_11[]; // idb
extern char aSPlayguideS_pn[]; // idb
extern int (__stdcall *PlayGuideMinWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PlayGuideMinWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *PageWinSpr::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PageWinSpr::_vftable_)(void *p, char); // weak
extern int (__stdcall *PlayGuideWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PlayGuideWin::_vftable_)(void *p, char); // weak
extern char a800x600[]; // idb
extern char a1024x768[]; // idb
extern char a1280x768Wide[]; // idb
extern char a1280x960[]; // idb
extern char a1280x1024[]; // idb
extern char a1400x1050[]; // idb
extern char a1600x1200[]; // idb
extern char a1600x900Wide[]; // idb
extern char a1920x1440[]; // idb
extern char a1920x1200Wide[]; // idb
extern char a1680x1050Wide[]; // idb
extern char a1280x800Wide[]; // idb
extern char a1600x900Wide_0[]; // idb
extern char a1440x900Wide[]; // idb
extern char a1920x1080Wide[]; // idb
extern char a2560x1440[]; // idb
extern char a2560x1600Wide[]; // idb
extern char a3840x2160Wide[]; // idb
extern char a1366x768[]; // idb
extern char a3440x1440Wide[]; // idb
extern char a800x600_0[]; // idb
extern char a1024x768_0[]; // idb
extern char a1280x768Wide_0[]; // idb
extern char a1280x960_0[]; // idb
extern char a1280x1024_0[]; // idb
extern char a1400x1050_0[]; // idb
extern char a1600x1200_0[]; // idb
extern char a1600x900Wide_1[]; // idb
extern char a1920x1440_0[]; // idb
extern char a1920x1200Wid_0[]; // idb
extern char a1680x1050Wid_0[]; // idb
extern char a1280x800Wide_0[]; // idb
extern char a1600x900Wide_2[]; // idb
extern char a1440x900Wide_0[]; // idb
extern char a1920x1080Wid_0[]; // idb
extern char a2560x1440_0[]; // idb
extern char a2560x1600Wid_0[]; // idb
extern char a3840x2160Wid_0[]; // idb
extern char a1366x768_0[]; // idb
extern char a3440x1440Wid_0[]; // idb
extern char aStick_0[]; // idb
extern char aStick_1[]; // idb
extern char asc_9A648C[]; // idb
extern char aG1I[]; // idb
extern char aGameOption_gra[]; // idb
extern char aChrolinechnor[]; // idb
extern char aChrolinechclic[]; // idb
extern int (__stdcall *PopupMenu::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PopupMenu::_vftable_)(void *p, char); // weak
extern int (__stdcall *PopupMenuText::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PopupMenuText::_vftable_)(void *p, char); // weak
extern int (__stdcall *PopupMenuTextCheck::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PopupMenuTextCheck::_vftable_)(void *p, char); // weak
extern int (__stdcall *PopupMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PopupMenuWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *PopupMenuSubMenu::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PopupMenuSubMenu::_vftable_)(void *p, char); // weak
extern char aGamePrisontime[]; // idb
extern char aFrame_70[]; // idb
extern char aPrisontimewin[]; // idb
extern char aTime_4[]; // idb
extern char a000000_1[9]; // weak
extern char aDay_2[]; // idb
extern char a0_9[2]; // weak
extern char a02d02d02d_0[]; // idb
extern char a02d[]; // idb
extern int (__stdcall *PrisonTimeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PrisonTimeWin::_vftable_)(void *p, char); // weak
extern char asc_9A7334[3]; // idb
extern _UNKNOWN unk_9A7337; // weak
extern char asc_9A7338[3]; // idb
extern char byte_9A733B; // idb
extern char aGamePrivatesto[]; // idb
extern char byte_9A7352; // idb
extern char byte_9A7353; // idb
extern char aFrame_71[]; // idb
extern char byte_9A735A; // idb
extern _UNKNOWN unk_9A735B; // weak
extern char aPrivatestorewi[]; // idb
extern char asc_9A736C[6]; // weak
extern _UNKNOWN unk_9A7372; // weak
extern _UNKNOWN unk_9A7373; // weak
extern char asc_9A7374[]; // idb
extern _UNKNOWN unk_9A737A; // weak
extern _UNKNOWN unk_9A737B; // weak
extern char aIconslot_23[]; // idb
extern _UNKNOWN unk_9A7385; // weak
extern _UNKNOWN unk_9A7386; // weak
extern char aClsnor_48[]; // idb
extern char aClsclick_48[]; // idb
extern char aClsover_48[]; // idb
extern char aHelplinknor_73[12]; // weak
extern char aHelplinknor_74[]; // idb
extern char aHelplinkcli_40[]; // idb
extern char aHelplinkove_40[]; // idb
extern char aPanel01_77[]; // idb
extern char aWintitle_47[]; // idb
extern char aStorename[]; // idb
extern char aStorenameinput[]; // idb
extern char aStorenameinp_0[]; // idb
extern char aSlot03d[]; // idb
extern char aText01_25[]; // idb
extern char aText02_10[]; // idb
extern char aPricemy[]; // idb
extern char aOknor_12[]; // idb
extern char aOkclick_10[]; // idb
extern char aOkover_10[]; // idb
extern char aCancelnor_9[]; // idb
extern char aCancelclick_9[]; // idb
extern char aCancelover_9[]; // idb
extern char aCopperbtn01[]; // idb
extern char aCopperbtn01_0[]; // idb
extern char aCopperbtn01_1[]; // idb
extern char aCopperbtn01_2[]; // idb
extern char aSilverbtn01[]; // idb
extern char aSilverbtn01_0[]; // idb
extern char aSilverbtn01_1[]; // idb
extern char aSilverbtn01_2[]; // idb
extern char aGoldbtn01[]; // idb
extern char aGoldbtn01_0[]; // idb
extern char aGoldbtn01_1[]; // idb
extern char aGoldbtn01_2[]; // idb
extern char aGembtn01[]; // idb
extern char aGembtn01_0[]; // idb
extern char aGembtn01_1[]; // idb
extern char aGembtn01_2[]; // idb
extern char aCopperinput01[]; // idb
extern char aSilverinput01[]; // idb
extern char aGoldinput01[]; // idb
extern char aGeminput01[]; // idb
extern char a0_30[2]; // weak
extern char a0_31[2]; // weak
extern char a0_32[2]; // weak
extern char a0_33[2]; // weak
extern char a0_34[2]; // weak
extern char a0_35[2]; // weak
extern char a0_36[2]; // weak
extern char a0_37[2]; // weak
extern char aI64d_31[]; // idb
extern char aI64d_32[]; // idb
extern char aI64d_33[]; // idb
extern char aI64d_34[]; // idb
extern char aI64d_35[]; // idb
extern char aI64d_36[]; // idb
extern char aI64d_37[]; // idb
extern char aI64d_38[]; // idb
extern char aPrivatestore[]; // idb
extern int (__stdcall *PrivateStoreInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PrivateStoreInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *PrivateStoreWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PrivateStoreWin::_vftable_)(void *p, char); // weak
extern char asc_9A7AB4[3]; // idb
extern char byte_9A7AB7; // idb
extern char aS_10[4]; // idb
extern char a6d[]; // idb
extern char byte_9A7AC1; // idb
extern char byte_9A7AC2; // idb
extern char byte_9A7AC3; // idb
extern char aGameProductwin[]; // idb
extern char aFrame_72[]; // idb
extern char byte_9A7ADE; // idb
extern _UNKNOWN unk_9A7ADF; // weak
extern char aProductionwin[]; // idb
extern _UNKNOWN unk_9A7AEE; // weak
extern char asc_9A7AF0[6]; // weak
extern char asc_9A7AF8[]; // idb
extern char aPanel01_78[]; // idb
extern char aIconslot_24[]; // idb
extern char aProductskill[]; // idb
extern char aProductskill_0[]; // idb
extern char aProduct[]; // idb
extern char aMaterial_0[]; // idb
extern char aProductname[]; // idb
extern char aProductitemint[]; // idb
extern char aClsclick_49[]; // idb
extern char aClsover_49[]; // idb
extern char aClsnor_49[]; // idb
extern char aCancelclick_10[]; // idb
extern char aCancelover_10[]; // idb
extern char aCancelnor_10[]; // idb
extern char aHelplinknor_75[12]; // weak
extern char aHelplinkcli_41[]; // idb
extern char aHelplinkove_41[]; // idb
extern char aHelplinknor_76[]; // idb
extern char aProductclick_0[]; // idb
extern char aProductover_0[]; // idb
extern char aProductnor_0[]; // idb
extern char aNextnumclick[]; // idb
extern char aNextnumover[]; // idb
extern char aNextnumnor[]; // idb
extern char aPrenumclick[]; // idb
extern char aPrenumover[]; // idb
extern char aPrenumnor[]; // idb
extern char aWintitle_48[]; // idb
extern char aFill_skill_pan[]; // idb
extern char aFill_skill_bac[]; // idb
extern char aFill_skill[]; // idb
extern char aFill_skill_0[]; // idb
extern char aTargetslot[]; // idb
extern char aMaterialslot02[]; // idb
extern char aMaterialintro0[]; // idb
extern char aMaterialintron[]; // idb
extern char aNum[]; // idb
extern char aColumnbarno_14[]; // idb
extern char aColumnbarcl_12[]; // idb
extern char aColumnbarov_12[]; // idb
extern char aColumn_2[]; // idb
extern char aProductskillta[]; // idb
extern char aColumnbox_2[]; // idb
extern char aSlidebar_sl_15[]; // idb
extern char aSlidebar_dn_32[]; // idb
extern char aSlidebar_up_32[]; // idb
extern char aSlidebar_12[]; // idb
extern char asc_9A7D84[]; // idb
extern char aDD_16[]; // idb
extern char asc_9A7D90[]; // idb
extern char aDD_17[]; // idb
extern char aDS_7[]; // idb
extern char aProductwin[]; // idb
extern int (__stdcall *MaterialItemIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MaterialItemIcon::_vftable_)(void *p, char); // weak
extern int (__stdcall *ProductionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ProductionWin::_vftable_)(void *p, char); // weak
extern char aGameProductski[]; // idb
extern char aFrame_73[]; // idb
extern char byte_9A82A6; // idb
extern char byte_9A82A7; // idb
extern char aProductselectw[]; // idb
extern char aPanel01_79[]; // idb
extern char asc_9A82C4[6]; // weak
extern char asc_9A82CC[]; // idb
extern char aIconslot_25[]; // idb
extern char aPlane_8[]; // idb
extern char aWintitle_49[]; // idb
extern char aIconslotbox01[]; // idb
extern char aIconslotbox02[]; // idb
extern char aIconslotbox03[]; // idb
extern char aIconslotbox04[]; // idb
extern char aIconslotbox05[]; // idb
extern char aIconslotbox06[]; // idb
extern char aIconslotbox07[]; // idb
extern char aIconslotbox08[]; // idb
extern char aClsclick_50[]; // idb
extern char aClsover_50[]; // idb
extern char aClsnor_50[]; // idb
extern char aBtn01click_11[]; // idb
extern char aBtn01over_11[]; // idb
extern char aBtn01nor_9[]; // idb
extern char aBtn02click_5[]; // idb
extern char aBtn02over_5[]; // idb
extern char aBtn02nor_6[]; // idb
extern char aHelplinknor_77[12]; // weak
extern char aHelplinkcli_42[]; // idb
extern char aHelplinkove_42[]; // idb
extern char aHelplinknor_78[]; // idb
extern char aIconslot00[]; // idb
extern char aIcontxt01[]; // idb
extern char aIconslot01[]; // idb
extern char aIcontxt02[]; // idb
extern char aIconslot02[]; // idb
extern char aIcontxt03[]; // idb
extern char aIcontxt03_[]; // idb
extern char aIconslot03[]; // idb
extern char aIcontxt04[]; // idb
extern char aIcontxt04_[]; // idb
extern char aIconslot04[]; // idb
extern char aIcontxt05[]; // idb
extern char aIcontxt05_[]; // idb
extern char aIconslot05[]; // idb
extern char aIcontxt06[]; // idb
extern char aIcontxt06_[]; // idb
extern char aIconslot06[]; // idb
extern char aIcontxt07[]; // idb
extern char aIcontxt07_[]; // idb
extern char aSS_50[]; // idb
extern char aProductskillse[]; // idb
extern int (__stdcall *ProductSkillSelectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ProductSkillSelectWin::_vftable_)(void *p, char); // weak
extern char aGameMessagew_9[]; // idb
extern char aPanel01_80[]; // idb
extern char aRebirthmenuwin[]; // idb
extern char asc_9A8780[6]; // weak
extern char asc_9A8788[]; // idb
extern char aBtnnor02_13[]; // idb
extern char aBtnclick02_13[]; // idb
extern char aBtnover02_13[]; // idb
extern char aBtnnor03_7[]; // idb
extern char aBtnclick03_7[]; // idb
extern char aBtnover03_7[]; // idb
extern int (__stdcall *RebirthMenuWin::_vftable_)(int); // weak
extern int (__stdcall *RebirthMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RebirthMenuWin::_vftable_)(void *p, char); // weak
extern char aGameReportwin_[]; // idb
extern _UNKNOWN unk_9A8A37; // weak
extern char aFrame_74[]; // idb
extern _UNKNOWN unk_9A8A3E; // weak
extern _UNKNOWN unk_9A8A3F; // weak
extern char aPrivatestore_0[]; // idb
extern char asc_9A8A50[6]; // weak
extern _UNKNOWN unk_9A8A56; // weak
extern _UNKNOWN unk_9A8A57; // weak
extern char asc_9A8A58[]; // idb
extern _UNKNOWN unk_9A8A5E; // weak
extern char aClsnor_51[]; // idb
extern char aClsclick_51[]; // idb
extern char aClsover_51[]; // idb
extern char aHelplinknor_79[12]; // weak
extern char aHelplinknor_80[]; // idb
extern char aHelplinkcli_43[]; // idb
extern char aHelplinkove_43[]; // idb
extern char aPanel01_81[]; // idb
extern char aWintitle_50[]; // idb
extern char aCharname_3[]; // idb
extern char aReporttext[]; // idb
extern char aCharnameinput[]; // idb
extern char aReportinfoinpu[]; // idb
extern char aReportinfoin_0[]; // idb
extern char aReporttype[]; // idb
extern char aReporttypeinpu[]; // idb
extern char aReporttypein_0[]; // idb
extern char aReportinfo[]; // idb
extern char aReportprocess[]; // idb
extern char aOknor_13[]; // idb
extern char aOkclick_11[]; // idb
extern char aOkover_11[]; // idb
extern char aCancelnor_11[]; // idb
extern char aCancelclick_11[]; // idb
extern char aCancelover_11[]; // idb
extern char aI_2[]; // idb
extern char aReportwin[]; // idb
extern int (__stdcall *ReportWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ReportWin::_vftable_)(void *p, char); // weak
extern char aCommonRevivalm[]; // idb
extern _UNKNOWN unk_9A8DFB; // weak
extern char aFrame_75[]; // idb
extern _UNKNOWN unk_9A8E02; // weak
extern char aRevivemenuwin[]; // idb
extern char aWintitle_51[]; // idb
extern char aPanel01_82[]; // idb
extern char asc_9A8E28[]; // idb
extern char asc_9A8E30[]; // idb
extern char aPanel02_44[]; // idb
extern char aTextbox_7[]; // idb
extern char aBtn01nor_10[]; // idb
extern char aBtn01click_12[]; // idb
extern char aBtn01over_12[]; // idb
extern char aBtn02nor_7[]; // idb
extern char aBtn02click_6[]; // idb
extern char aBtn02over_6[]; // idb
extern char aBtn03nor_3[]; // idb
extern char aBtn03click_2[]; // idb
extern char aBtn03over_2[]; // idb
extern char aBtn04nor_1[]; // idb
extern char aBtn04click_1[]; // idb
extern char aBtn04over_1[]; // idb
extern char aHelplinknor_81[12]; // weak
extern char aHelplinknor_82[]; // idb
extern char aHelplinkcli_44[]; // idb
extern char aHelplinkove_44[]; // idb
extern char aRevivalmenu[]; // idb
extern int (__stdcall *ReviveMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ReviveMenuWin::_vftable_)(void *p, char); // weak
extern char aVaritem000[]; // idb
extern char aVaritem000_0[11]; // weak
extern char aVaritem000_1[11]; // weak
extern char aVaritem000_2[11]; // weak
extern char aVaritem000_3[11]; // weak
extern char aVaritem000_4[11]; // weak
extern char aVaritem000_5[11]; // weak
extern char aGameRewardwin_[]; // idb
extern char aPanel01_83[]; // idb
extern char aRewardwin[]; // idb
extern char aIconslot03d_6[]; // idb
extern char aSelecticonslot[]; // idb
extern char aRewardtxt[]; // idb
extern char aRewardselecttx[]; // idb
extern int (__stdcall *RewardWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RewardWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *RewardInvItem::_vftable_)(void *p, char); // weak
extern int (__stdcall *RewardInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RewardInvWin::_vftable_)(void *p, char); // weak
extern char aGamePetface__0[]; // idb
extern char aFrame_76[]; // idb
extern char aRidepetwin[]; // idb
extern char aPanel03_15[]; // idb
extern char aSgameMobport_3[]; // idb
extern char aSgameMobport_4[]; // idb
extern char aFacecut_mon_1[]; // idb
extern char aPanel04_6[]; // idb
extern char aPanel02_45[]; // idb
extern char aFill_hp_star_4[]; // idb
extern char aFill_hp_end_4[]; // idb
extern char aFill_hp_7[]; // idb
extern char aCharname_4[]; // idb
extern char a2_6[]; // idb
extern char aTestname_0[9]; // weak
extern char aNum_hungry_0[]; // idb
extern char a2_7[]; // idb
extern char aNum_velocity_0[]; // idb
extern char a2_8[]; // idb
extern char asc_9A97E0[2]; // weak
extern char aPicking01[]; // idb
extern char asc_9A97F0[2]; // weak
extern char aSS_51[]; // idb
extern char aSgameMobport_5[]; // idb
extern char aSgameMobport_6[]; // idb
extern char aSgameMobport_7[]; // idb
extern char aSgameMobport_8[]; // idb
extern char aSgameMobport_9[]; // idb
extern char aSgameMobpor_10[]; // idb
extern char asc_9A98A4[2]; // weak
extern char aDD_18[]; // idb
extern int (__stdcall *RidePetWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RidePetWin::_vftable_)(void *p, char); // weak
extern char aGameRoar_nif[]; // idb
extern char aFrame_77[]; // idb
extern char aRoarwin[]; // idb
extern char asc_9A9B14[6]; // weak
extern char asc_9A9B1C[]; // idb
extern char aPanel01_84[]; // idb
extern char aPanel02_46[]; // idb
extern char aWintitle_52[]; // idb
extern char aSlot00[]; // idb
extern char aSlot00_0[]; // idb
extern char aD_47[]; // idb
extern char aTestbox[]; // idb
extern char aBtnnor_2[]; // idb
extern char aBtnclick_3[]; // idb
extern char aBtnover_3[]; // idb
extern char aBtnnor01_7[]; // idb
extern char aBtnclick01_7[]; // idb
extern char aBtnover01_7[]; // idb
extern char aHelplinknor_83[12]; // weak
extern char aHelplinknor_84[]; // idb
extern char aHelplinkcli_45[]; // idb
extern char aHelplinkove_45[]; // idb
extern char aTestbox01[]; // idb
extern char aUnknownUseStri[19]; // weak
extern char aTestbox_count[]; // idb
extern char aDD_24[]; // idb
extern char aUnknownNotice[15]; // weak
extern int dword_9A9C1C; // weak
extern int dword_9A9C20; // weak
extern int dword_9A9C24; // weak
extern __int16 word_9A9C28; // weak
extern char byte_9A9C2A; // weak
extern char aErrorGlobalNot[22]; // weak
extern char aErrorColltime[17]; // weak
extern char aColor_6[]; // idb
extern char aErrorStringOve[20]; // weak
extern char aErrorNotInput[18]; // weak
extern char asc_9A9C88[]; // idb
extern char aDD_19[]; // idb
extern char aDD_20[6]; // weak
extern char aDD_21[]; // idb
extern char aDD_22[6]; // weak
extern char aDD_23[6]; // weak
extern char aD_46[]; // idb
extern char aRoar[]; // idb
extern int (__stdcall *RoarWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RoarWin::_vftable_)(void *p, char); // weak
extern char aGameBelongdice[]; // idb
extern char aPanel01_85[]; // idb
extern char aRollingdicewin[]; // idb
extern _UNKNOWN unk_9A9F33; // weak
extern char asc_9A9F34[6]; // weak
extern _UNKNOWN unk_9A9F3A; // weak
extern char asc_9A9F3C[]; // idb
extern char aInvitemslot0_5[]; // idb
extern char aInvitemslot0_6[]; // idb
extern char aTextbox01_3[]; // idb
extern char aTextbox02_3[]; // idb
extern char aFill_skill_p_0[]; // idb
extern char aFill_skill_1[]; // idb
extern char aFill_skill_sta[]; // idb
extern char aFill_skill_end[]; // idb
extern char aBtnnor02_14[]; // idb
extern char aBtnclick02_14[]; // idb
extern char aBtnover02_14[]; // idb
extern char aBtnnor03_8[]; // idb
extern char aBtnclick03_8[]; // idb
extern char aBtnover03_8[]; // idb
extern char aGameBelongdi_0[]; // idb
extern char aPanel01_86[]; // idb
extern char aRollingdicemsg[]; // idb
extern char asc_9AA03C[6]; // weak
extern char asc_9AA044[]; // idb
extern char aInvitemslot0_7[]; // idb
extern char aInvitemslot0_8[]; // idb
extern char aTextbox_8[]; // idb
extern char aBtnnor02_15[]; // idb
extern char aBtnclick02_15[]; // idb
extern char aBtnover02_15[]; // idb
extern char aBtnnor03_9[]; // idb
extern char aBtnclick03_9[]; // idb
extern char aBtnover03_9[]; // idb
extern int (__stdcall *RollingDiceWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RollingDiceWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *RollingDiceMsgWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *RollingDiceMsgWin::_vftable_)(void *p, char); // weak
extern char aScreenwin[]; // idb
extern int (__stdcall *ScreenWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ScreenWin::_vftable_)(void *p, char); // weak
extern char aGameMessage_10[]; // idb
extern char aPanel01_87[]; // idb
extern char aServermenuwin[]; // idb
extern _UNKNOWN unk_9AA7B6; // weak
extern char asc_9AA7B8[6]; // weak
extern char asc_9AA7C0[]; // idb
extern char aBtnnor01_8[]; // idb
extern char aBtnclick01_8[]; // idb
extern char aBtnover01_8[]; // idb
extern char aBtnnor02_16[]; // idb
extern char aBtnclick02_16[]; // idb
extern char aBtnover02_16[]; // idb
extern char aBtnnor03_10[]; // idb
extern char aBtnclick03_10[]; // idb
extern char aBtnover03_10[]; // idb
extern char aBtnnor04_3[]; // idb
extern char aBtnclick04_3[]; // idb
extern char aBtnover04_3[]; // idb
extern char aBtnnor05[]; // idb
extern char aBtnclick05[]; // idb
extern char aBtnover05[]; // idb
extern int (__stdcall *ServerMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ServerMenuWin::_vftable_)(void *p, char); // weak
extern char aGameTimeserver[]; // idb
extern char aPanel01_88[]; // idb
extern char aServertimewin[]; // idb
extern _UNKNOWN unk_9AAAE6; // weak
extern char aTimelocknor[]; // idb
extern char aTimelocklock[]; // idb
extern char aHM[]; // idb
extern char aColorYellowGmt[]; // idb
extern char aColorYellowG_0[]; // idb
extern char aYMDA[]; // idb
extern int (__stdcall *ServerTimeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ServerTimeWin::_vftable_)(void *p, char); // weak
extern char aGameItemmall_n[]; // idb
extern char byte_9AADA6[2]; // idb
extern char aPanel01_89[8]; // weak
extern char aFrame_78[]; // idb
extern char aShopwin_1[]; // idb
extern char aWintitle_53[]; // idb
extern char aPanel01_90[]; // idb
extern char aPanel01_91[]; // idb
extern char aClsnor_52[]; // idb
extern char aClsclick_52[]; // idb
extern char aClsover_52[]; // idb
extern char aHelplinknor_85[12]; // weak
extern char aHelplinknor_86[]; // idb
extern char aHelplinkcli_46[]; // idb
extern char aHelplinkove_46[]; // idb
extern char aSL[]; // idb
extern char aError_5[]; // idb
extern char aCreatewindow_0[]; // idb
extern char aSitemmall_hb[]; // idb
extern char aLocaleitemshop[]; // idb
extern char aItemmall[]; // idb
extern int (__stdcall *ShopWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ShopWin::_vftable_)(void *p, char); // weak
extern char asc_9AB0DC[3]; // idb
extern _UNKNOWN unk_9AB0DF; // weak
extern char asc_9AB0E0[2]; // idb
extern _UNKNOWN unk_9AB0E2; // weak
extern _UNKNOWN unk_9AB0E3; // weak
extern _UNKNOWN unk_9AB0E4; // weak
extern _UNKNOWN unk_9AB0E5; // weak
extern _UNKNOWN unk_9AB0E7; // weak
extern char asc_9AB0E8[3]; // idb
extern char aToggle_skillon[]; // idb
extern char aGameQuickslot_[]; // idb
extern char aFrame01[]; // idb
extern char aShortcuthorizo[]; // idb
extern char aShortcuthori_0[25]; // weak
extern char aPanel01_92[]; // idb
extern char aPanel01_93[]; // idb
extern char aQslot01_1[]; // idb
extern char aQslot01_2[]; // idb
extern char aQslot01_3[]; // idb
extern char aGameMainnumber[]; // idb
extern char aGameMainnumb_0[]; // idb
extern char aQslot01_1_0[]; // idb
extern char aQslot01_2_0[]; // idb
extern char aQslot01_3_0[]; // idb
extern char aWeapontitle_0[]; // idb
extern char aShiftplus_0[]; // idb
extern char a48[]; // idb
extern char aSmallnumtran_6[]; // idb
extern char aSmallnumtran_7[]; // idb
extern char aMovepanelbtn01[]; // idb
extern char aSubpanelbtnnor[]; // idb
extern char aSubpanelbtnn_0[]; // idb
extern char aSubpanelbtnn_1[]; // idb
extern char aSubpanelbtnove[]; // idb
extern char aMovepanel01[]; // idb
extern char aPanelturnbtnno[]; // idb
extern char aPanelturnbtn_0[]; // idb
extern char aPanelturnbtn_1[]; // idb
extern char aPanelturnbtnov[]; // idb
extern char aPrepanelnor01[]; // idb
extern char aNextpanelnor01[]; // idb
extern char aPagenum01[]; // idb
extern char aPagenum01_0[]; // idb
extern char aFrame02[]; // idb
extern char aShortcutvertic[]; // idb
extern char aShortcutvert_0[23]; // weak
extern char aPanel02_47[]; // idb
extern char aPanel02_48[]; // idb
extern char aQslot02_1[]; // idb
extern char aQslot02_2[]; // idb
extern char aQslot02_3[]; // idb
extern char aGameMainnumb_1[]; // idb
extern char aGameMainnumb_2[]; // idb
extern char aQslot02_1_0[]; // idb
extern char aQslot02_2_0[]; // idb
extern char aQslot02_3_0[]; // idb
extern char aWeapontitle_1[]; // idb
extern char aShiftplus_1[]; // idb
extern char a48_0[]; // idb
extern char aSmallnumtran_8[]; // idb
extern char aSmallnumtran_9[]; // idb
extern char aMovepanelbtn02[]; // idb
extern char aSubpanelbtnn_2[]; // idb
extern char aSubpanelbtnn_3[]; // idb
extern char aSubpanelbtnn_4[]; // idb
extern char aSubpanelbtno_0[]; // idb
extern char aMovepanel02[]; // idb
extern char aPanelturnbtn_2[]; // idb
extern char aPanelturnbtn_3[]; // idb
extern char aPanelturnbtn_4[]; // idb
extern char aPanelturnbtn_5[]; // idb
extern char aPrepanelnor02[]; // idb
extern char aNextpanelnor02[]; // idb
extern char aPagenum02[]; // idb
extern char aPagenum02_0[]; // idb
extern char asc_9AB4E4[]; // idb
extern char asc_9AB4E8[]; // idb
extern char meshName[]; // idb
extern char aSmallnumtran_0[16]; // weak
extern char aSmallnumtran_2[]; // idb
extern char aSmallnumtran_3[16]; // weak
extern char aSmallnumtran_4[]; // idb
extern char aSmallnumtran_5[]; // idb
extern char aI_4[]; // idb
extern char aShiftplus[10]; // weak
extern char aCtrlplus[9]; // weak
extern char aAltplus[8]; // weak
extern char aSmallnumtran_1[16]; // weak
extern char aU_4[]; // idb
extern char aOncmdshortcutl[]; // idb
extern char asc_9AB5A4[]; // idb
extern char asc_9AB5A8[]; // idb
extern char aSetshortcutT_0[]; // idb
extern char aSetshortcutTyp[]; // idb
extern int (__stdcall *ShortCutIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ShortCutIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ShortCutWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ShortCutWin::_vftable_)(void *p, char); // weak
extern char aGameMoney_ni_1[]; // idb
extern _UNKNOWN unk_9ABACB; // weak
extern char aMygembtn_9[]; // idb
extern _UNKNOWN unk_9ABAD5; // weak
extern _UNKNOWN unk_9ABAD6; // weak
extern char aMygoldbtn_9[]; // idb
extern char aMysilverbtn_6[]; // idb
extern char aMycopperbtn_9[]; // idb
extern char asc_9ABB04[2]; // weak
extern char asc_9ABB08[2]; // weak
extern char asc_9ABB0C[2]; // weak
extern char asc_9ABB10[2]; // weak
extern char asc_9ABB14[2]; // weak
extern char asc_9ABB18[2]; // weak
extern char aRecipe__0[8]; // weak
extern char asc_9ABB24[2]; // weak
extern char asc_9ABB28[2]; // weak
extern char asc_9ABB2C[2]; // weak
extern char asc_9ABB30[2]; // weak
extern char aD_57[]; // idb
extern char asc_9ABB3C[2]; // weak
extern char asc_9ABB40[2]; // weak
extern int dword_9ABB44; // weak
extern int dword_9ABB48; // weak
extern char byte_9ABB4C; // weak
extern char aD_58[6]; // weak
extern char aD_59[]; // idb
extern char aSDSS[]; // idb
extern char aSDS_2[]; // idb
extern char aSSS_5[]; // idb
extern char aSS_52[]; // idb
extern char aSDS_3[]; // idb
extern char aSD_44[]; // idb
extern char aSS_53[]; // idb
extern __int16 word_9ABBAC; // weak
extern char byte_9ABBAE; // weak
extern char a_1f_3[9]; // weak
extern char a_1f_4[]; // idb
extern char aS_1fSSS[]; // idb
extern char aS_1fSS[]; // idb
extern char aSSS_6[]; // idb
extern char aSS_54[]; // idb
extern __int16 word_9ABBFC; // weak
extern char byte_9ABBFE; // weak
extern char aS_1fSS_0[]; // idb
extern char aS_1fS[]; // idb
extern char aSS_55[]; // idb
extern __int16 word_9ABC24; // weak
extern _UNKNOWN unk_9ABC28; // weak
extern _UNKNOWN unk_9ABC2C; // weak
extern char aS_1fm[8]; // weak
extern char aS_1fm_0[]; // idb
extern char aD_60[7]; // weak
extern char aD_61[]; // idb
extern char asc_9ABC50[]; // idb
extern char asc_9ABC54[]; // idb
extern char aSS_56[]; // idb
extern char aSS_57[]; // idb
extern char aSS_58[]; // idb
extern char aRevival01_4[10]; // weak
extern char aSS_59[]; // idb
extern char aSS_60[]; // idb
extern char aSS_61[]; // idb
extern char aSS_62[]; // idb
extern char aSS_63[]; // idb
extern char asc_9ABCA4[2]; // weak
extern char asc_9ABCA8[2]; // weak
extern char asc_9ABCAC[]; // idb
extern char asc_9ABCB0[2]; // weak
extern char asc_9ABCB4[]; // idb
extern char asc_9ABCB8[2]; // weak
extern char asc_9ABCBC[2]; // weak
extern char aI64d_39[]; // idb
extern char aI64d_40[]; // idb
extern char aI64d_41[]; // idb
extern char aI64d_42[]; // idb
extern char aD_48[]; // idb
extern char asc_9ABCE4[]; // idb
extern char asc_9ABCE8[2]; // weak
extern char asc_9ABCEC[2]; // weak
extern char asc_9ABCF0[2]; // weak
extern char asc_9ABCF4[2]; // weak
extern char asc_9ABCF8[2]; // weak
extern char asc_9ABCFC[2]; // weak
extern char asc_9ABD00[2]; // weak
extern char asc_9ABD04[2]; // weak
extern char asc_9ABD08[2]; // weak
extern char asc_9ABD0C[2]; // weak
extern char aSD_43[]; // idb
extern char asc_9ABD18[2]; // weak
extern char asc_9ABD1C[]; // idb
extern char aHealreinforce[14]; // weak
extern char aD_49[]; // idb
extern char aBifftimeincrea[17]; // weak
extern char aD_50[]; // idb
extern char asc_9ABD54[]; // idb
extern char aS0D[6]; // weak
extern char aSD_42[]; // idb
extern char asc_9ABD68[]; // idb
extern char aHealreinforc_0[14]; // weak
extern char aD_51[]; // idb
extern char aBifftimeincr_0[17]; // weak
extern char aD_52[]; // idb
extern char asc_9ABDA0[]; // idb
extern char aHealreinforc_1[14]; // weak
extern char asc_9ABDB4[]; // idb
extern char asc_9ABDB8[2]; // weak
extern char aBifftimeincr_1[17]; // weak
extern char asc_9ABDD0[]; // idb
extern char asc_9ABDD4[2]; // weak
extern char aDD_25[]; // idb
extern char aD_53[6]; // weak
extern char aD_54[6]; // weak
extern char aDD_26[]; // idb
extern char aD_55[6]; // weak
extern char aD_56[6]; // weak
extern int (__thiscall *NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<ItemAction__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *SkillInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SkillInfoWin::_vftable_)(void *p, char); // weak
extern char aGameProducts_0[]; // idb
extern char aFrame_79[]; // idb
extern char byte_9AC0AE[2]; // idb
extern char aProductinitwin[]; // idb
extern char aPanel01_94[]; // idb
extern char asc_9AC0C8[6]; // weak
extern char asc_9AC0D0[]; // idb
extern char aIconslot_26[]; // idb
extern char aPlane_9[]; // idb
extern char aWintitle_54[]; // idb
extern char aIconslotbox0_0[]; // idb
extern char aClsclick_53[]; // idb
extern char aClsover_53[]; // idb
extern char aClsnor_53[]; // idb
extern char aIcontxt01_[]; // idb
extern char aBtn01click_13[]; // idb
extern char aBtn01over_13[]; // idb
extern char aBtn01nor_11[]; // idb
extern char aBtn02click_7[]; // idb
extern char aBtn02over_7[]; // idb
extern char aBtn02nor_8[]; // idb
extern char aHelplinknor_87[12]; // weak
extern char aHelplinkcli_47[]; // idb
extern char aHelplinkove_47[]; // idb
extern char aHelplinknor_88[]; // idb
extern char aIconslot01_0[]; // idb
extern char aIcontxt01_0[]; // idb
extern char aProductskillre[]; // idb
extern int (__stdcall *CSkillInitWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CSkillInitWin::_vftable_)(void *p, char); // weak
extern char aGameChrskillpw[]; // idb
extern char byte_9AC431; // idb
extern _UNKNOWN unk_9AC432; // weak
extern _UNKNOWN unk_9AC433; // weak
extern char aPlane01_15[]; // idb
extern char aSkillpowerwin[]; // idb
extern _UNKNOWN unk_9AC44A; // weak
extern _UNKNOWN unk_9AC44B; // weak
extern char asc_9AC44C[6]; // weak
extern char asc_9AC454[]; // idb
extern char aPlane02_1[]; // idb
extern char aPlane03[]; // idb
extern char aSelectionname[]; // idb
extern char aOkclick_12[]; // idb
extern char aOkover_12[]; // idb
extern char aOknor_14[]; // idb
extern char aCancelclick_12[]; // idb
extern char aCancelover_12[]; // idb
extern char aCancelnor_12[]; // idb
extern char aClsover_54[]; // idb
extern char aClsclick_54[]; // idb
extern char aClsnor_54[]; // idb
extern char aHelplinknor_89[12]; // weak
extern char aHelplinkove_48[]; // idb
extern char aHelplinkcli_48[]; // idb
extern char aHelplinknor_90[]; // idb
extern char aWintitle_55[]; // idb
extern char aPwrtgetslot[]; // idb
extern char aPwrslot1[9]; // weak
extern char aPwrupnor01[11]; // weak
extern char aPwrupover01[12]; // weak
extern char aPwrupclick01[13]; // weak
extern char aPwrdnnor01[11]; // weak
extern char aPwrdnover01[12]; // weak
extern char aPwrdnclick01[13]; // weak
extern char aTitle1name[11]; // weak
extern char aTitle1desc[11]; // weak
extern char aPwrslot2[9]; // weak
extern char aPwrupnor02[11]; // weak
extern char aPwrupover02[12]; // weak
extern char aPwrupclick02[13]; // weak
extern char aPwrdnnor02[11]; // weak
extern char aPwrdnover02[12]; // weak
extern char aPwrdnclick02[13]; // weak
extern char aTitle2name[11]; // weak
extern char aTitle2desc[11]; // weak
extern char aPwrslot3[9]; // weak
extern char aPwrupnor03[11]; // weak
extern char aPwrupover03[12]; // weak
extern char aPwrupclick03[13]; // weak
extern char aPwrdnnor03[11]; // weak
extern char aPwrdnover03[12]; // weak
extern char aPwrdnclick03[13]; // weak
extern char aTitle3name[11]; // weak
extern char aTitle3desc[11]; // weak
extern char aPwrslot4[9]; // weak
extern char aPwrupnor04[11]; // weak
extern char aPwrupover04[12]; // weak
extern char aPwrupclick04[13]; // weak
extern char aPwrdnnor04[11]; // weak
extern char aPwrdnover04[12]; // weak
extern char aPwrdnclick04[13]; // weak
extern char aTitle4name[11]; // weak
extern char aTitle4desc[11]; // weak
extern char aChrskillpwr[]; // idb
extern int (__stdcall *SkillPowerIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SkillPowerIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *SkillPowerListItemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SkillPowerListItemWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *SkillPowerWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SkillPowerWin::_vftable_)(void *p, char); // weak
extern char aGameChrskill_n[]; // idb
extern _UNKNOWN unk_9ACDCA; // weak
extern _UNKNOWN unk_9ACDCB; // weak
extern char aFrame_80[]; // idb
extern _UNKNOWN unk_9ACDD2; // weak
extern _UNKNOWN unk_9ACDD3; // weak
extern char aSkillwin[]; // idb
extern _UNKNOWN unk_9ACDDD; // weak
extern _UNKNOWN unk_9ACDDE; // weak
extern char asc_9ACDE0[6]; // weak
extern char asc_9ACDE8[]; // idb
extern char aClsnor_55[]; // idb
extern char aClsclick_55[]; // idb
extern char aClsover_55[]; // idb
extern char aHelplinknor_91[12]; // weak
extern char aHelplinknor_92[]; // idb
extern char aHelplinkcli_49[]; // idb
extern char aHelplinkove_49[]; // idb
extern char aPanel01_95[]; // idb
extern char aPanel02_49[]; // idb
extern char aBtnback[]; // idb
extern char aWintitle_56[]; // idb
extern char aIconslot_27[]; // idb
extern char aIconslot00_0[]; // idb
extern char aIcontxtpro[]; // idb
extern char aIconlevelpro[]; // idb
extern char aImpowernor[]; // idb
extern char aNextlevelnor[]; // idb
extern char aPrelevelnor[]; // idb
extern char aText01_26[]; // idb
extern char aIconslotbox02d[]; // idb
extern char aIconslot00_1[]; // idb
extern char aImpowernor_0[]; // idb
extern char aImpowerclick[]; // idb
extern char aImpowerover[]; // idb
extern char aNextlevelnor_0[]; // idb
extern char aNextlevelclick[]; // idb
extern char aNextlevelover[]; // idb
extern char aPrelevelnor_0[]; // idb
extern char aPrelevelclick[]; // idb
extern char aPrelevelover[]; // idb
extern char aActsknor_0[]; // idb
extern char aActskclick_0[]; // idb
extern char aActskover_0[]; // idb
extern char aPassknor_0[]; // idb
extern char aPasskclick_0[]; // idb
extern char aPasskover_0[]; // idb
extern char aProsknor_0[]; // idb
extern char aProskclick_0[]; // idb
extern char aProskover_0[]; // idb
extern char aPrepagenor_11[]; // idb
extern char aPrepageclic_10[]; // idb
extern char aPrepageover_11[]; // idb
extern char aNextpagenor_11[]; // idb
extern char aNextpagecli_11[]; // idb
extern char aNextpageove_11[]; // idb
extern char aNumber_5[]; // idb
extern char aNumber01_3[]; // idb
extern char aSpwrpt[]; // idb
extern char a0_10[]; // idb
extern char aSpwrptbox[]; // idb
extern char aSpwrpt01[]; // idb
extern char a0_11[]; // idb
extern char aSpwrptbox01[]; // idb
extern char aPbtn[]; // idb
extern char aSummonmate01_0[13]; // weak
extern char a02d02d_1[]; // idb
extern char a02d_0[]; // idb
extern char a2d_0[]; // idb
extern char a2d_1[4]; // weak
extern char a2d_2[]; // idb
extern char a2d_3[]; // idb
extern char a02d02d_0[]; // idb
extern char aChrskill[]; // idb
extern char aDD_27[]; // idb
extern int (__stdcall *PosInfoWinBut::_vftable_)(int uiFlags); // weak
extern int (__thiscall *PosInfoWinBut::_vftable_)(void *p, char); // weak
extern int (__stdcall *LevelSelectWinBut::_vftable_)(int uiFlags); // weak
extern int (__thiscall *LevelSelectWinBut::_vftable_)(void *p, char); // weak
extern int (__stdcall *SkillInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SkillInvWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NiPointer<PgFont>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *SkillWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SkillWin::_vftable_)(void *p, char); // weak
extern char aGameMoney_ni_2[]; // idb
extern _UNKNOWN unk_9ADA9B; // weak
extern char aMygembtn_10[]; // idb
extern _UNKNOWN unk_9ADAA5; // weak
extern char aMygoldbtn_10[]; // idb
extern char aMysilverbtn_7[]; // idb
extern char aMycopperbtn_10[]; // idb
extern char aI64d_43[]; // idb
extern char aI64d_44[]; // idb
extern char aI64d_45[]; // idb
extern char aI64d_46[]; // idb
extern char aD_62[]; // idb
extern char asc_9ADAF0[2]; // weak
extern char asc_9ADAF4[2]; // weak
extern int (__stdcall *SoulStoneInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SoulStoneInfoWin::_vftable_)(void *p, char); // weak
extern char aGameSoulpanel_[]; // idb
extern char aFrame_81[]; // idb
extern char aSoulstonewin[]; // idb
extern char aPanel01_96[]; // idb
extern char aObject01_1[]; // idb
extern char aPresoul[]; // idb
extern char aNextsoul[]; // idb
extern char aHpsoul[]; // idb
extern char aSpsoul[]; // idb
extern char aPwrsoul[]; // idb
extern char aGrdsoul[]; // idb
extern char aSoullot01[]; // idb
extern char a0_12[2]; // weak
extern char a0_13[2]; // weak
extern char aSoullot02[]; // idb
extern char a0_14[2]; // weak
extern char a0_15[2]; // weak
extern char asc_9ADDE0[]; // idb
extern char asc_9ADDE4[]; // idb
extern int (__stdcall *SoulStoneWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SoulStoneWin::_vftable_)(void *p, char); // weak
extern char byte_9AE030; // idb
extern char byte_9AE031; // idb
extern char byte_9AE032; // idb
extern char byte_9AE033; // idb
extern char byte_9AE034; // idb
extern char byte_9AE035[3]; // idb
extern char aGameStattitle_[]; // idb
extern char aPlane01_16[]; // idb
extern char aStattitlewin[]; // idb
extern char aPlane02_2[]; // idb
extern char aSelectionnam_0[]; // idb
extern char aSelectionnam_1[]; // idb
extern char aOkclick_13[]; // idb
extern char aOkover_13[]; // idb
extern char aOknor_15[]; // idb
extern char aCancelclick_13[]; // idb
extern char aCancelover_13[]; // idb
extern char aCancelnor_13[]; // idb
extern char aClsclick_56[]; // idb
extern char aClsover_56[]; // idb
extern char aClsnor_56[]; // idb
extern char aWintitle_57[]; // idb
extern char aSelecticon[]; // idb
extern char aTitle1icon[11]; // weak
extern char aTitle1name_0[11]; // weak
extern char aTitle1rank[11]; // weak
extern char aTitle1desc_0[11]; // weak
extern char aTitle1nexttxt[14]; // weak
extern char aTitle1nextdesc[15]; // weak
extern char aTitle2icon[11]; // weak
extern char aTitle2name01[13]; // weak
extern char aTitle2rank01[13]; // weak
extern char aTitle2desc01[13]; // weak
extern char aTitle2nexttxt0[16]; // weak
extern char aTitle2nextdesc[17]; // weak
extern char aTitle3icon[11]; // weak
extern char aTitle3name02[13]; // weak
extern char aTitle3rank02[13]; // weak
extern char aTitle3desc02[13]; // weak
extern char aTitle3nexttxt0[16]; // weak
extern char aTitle3nextdesc[17]; // weak
extern char aTitle4icon[11]; // weak
extern char aTitle4name03[13]; // weak
extern char aTitle4rank03[13]; // weak
extern char aTitle4desc03[13]; // weak
extern char aTitle4nexttxt0[16]; // weak
extern char aTitle4nextdesc[17]; // weak
extern int (__stdcall *StatTitleListItemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StatTitleListItemWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *StatTitleWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StatTitleWin::_vftable_)(void *p, char); // weak
extern char aGameMaingauge_[]; // idb
extern _UNKNOWN unk_9AE6A7; // weak
extern char aFrame_82[]; // idb
extern _UNKNOWN unk_9AE6AE; // weak
extern char byte_9AE6AF; // idb
extern char aStatuswin[]; // idb
extern _UNKNOWN unk_9AE6BA; // weak
extern char byte_9AE6BB; // idb
extern char aEventpanel_5[11]; // weak
extern char aEventpanel_6[]; // idb
extern char aFace_panel[]; // idb
extern char aFacecut_mask_1[13]; // weak
extern char aFacecut_mon_2[]; // idb
extern char aPanel01_97[]; // idb
extern char aLpground_1[]; // idb
extern char aChief_party_1[]; // idb
extern char aNum_level_0[]; // idb
extern char aCharname_5[]; // idb
extern char aExp02d[]; // idb
extern char aFill_exp[9]; // weak
extern char aPanel05_2[]; // idb
extern char aPanel03_16[]; // idb
extern char aLpground_2[9]; // weak
extern char aSpground_1[]; // idb
extern char aSp_panel[]; // idb
extern char aLplight[]; // idb
extern char aSplight[]; // idb
extern char aSpcooltime[11]; // weak
extern char aPanel04_7[]; // idb
extern char aHp_panel[]; // idb
extern char aHplight[]; // idb
extern char aHpcooltime[11]; // weak
extern char aPanel02_50[]; // idb
extern char aFill_sp_03[]; // idb
extern char aFill_sp_01[]; // idb
extern char aFill_hp_01[]; // idb
extern char aFill_hp_03[]; // idb
extern char aFill_sp_4[8]; // weak
extern char aFill_sp_02[]; // idb
extern char aFill_hp_8[8]; // weak
extern char aFill_hp_02[]; // idb
extern char aFill_lp_03[]; // idb
extern char aFill_lp_01[]; // idb
extern char aFill_lp_3[8]; // weak
extern char aFill_lp_02[]; // idb
extern char aNum_sp[]; // idb
extern char aNum_hp[]; // idb
extern char aU_5[]; // idb
extern char aDD_28[]; // idb
extern char aU_6[]; // idb
extern char aDD_29[]; // idb
extern char aDD_30[]; // idb
extern char aU_19[3]; // idb
extern char asc_9AE890[3]; // idb
extern char asc_9AE894[3]; // idb
extern char asc_9AE898[3]; // idb
extern char asc_9AE89C[3]; // idb
extern char asc_9AE8A0[3]; // idb
extern char asc_9AE8A4[3]; // idb
extern char aDD_31[]; // idb
extern char aDD_32[]; // idb
extern char aDD_33[]; // idb
extern int (__stdcall *StatusWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StatusWin::_vftable_)(void *p, char); // weak
extern char aGameNpcbank_ni[]; // idb
extern _UNKNOWN unk_9AEB15; // weak
extern _UNKNOWN unk_9AEB16; // weak
extern _UNKNOWN unk_9AEB17; // weak
extern char aFrame_83[]; // idb
extern _UNKNOWN unk_9AEB1E; // weak
extern char byte_9AEB1F; // idb
extern char aNpcbankwin[]; // idb
extern char byte_9AEB2B; // idb
extern char asc_9AEB2C[6]; // weak
extern char asc_9AEB34[]; // idb
extern char aClsnor_57[]; // idb
extern char aClsclick_57[]; // idb
extern char aClsover_57[]; // idb
extern char aHelplinknor_93[12]; // weak
extern char aHelplinknor_94[]; // idb
extern char aHelplinkcli_50[]; // idb
extern char aHelplinkove_50[]; // idb
extern char aPanel01_98[]; // idb
extern char aPanel02_51[]; // idb
extern char aWintitle_58[]; // idb
extern char aIconslot_28[]; // idb
extern char aIconslot03d_7[]; // idb
extern char aTab01_off_1[]; // idb
extern char aTab01_dis[]; // idb
extern char aTab01_on_2[]; // idb
extern char aNum01_2[]; // idb
extern char aTab02_off_1[]; // idb
extern char aTab02_dis[]; // idb
extern char aTab02_on_2[]; // idb
extern char aNum02_0[]; // idb
extern char aTab03_off_1[]; // idb
extern char aTab03_dis[]; // idb
extern char aTab03_on_2[]; // idb
extern char aNum03_0[]; // idb
extern char aTab04_off_0[]; // idb
extern char aTab04_dis[]; // idb
extern char aTab04_on_0[]; // idb
extern char aNum04_0[]; // idb
extern char aDrawnor[]; // idb
extern char aDrawclick[]; // idb
extern char aDrawover[]; // idb
extern char aPaynor[]; // idb
extern char aPayclick[]; // idb
extern char aPayover[]; // idb
extern char aGeminput_3[]; // idb
extern char aGembtn_2[]; // idb
extern char aGembtn_3[]; // idb
extern char aGembtn_4[]; // idb
extern char aGoldinput_3[]; // idb
extern char aGoldbtn_2[]; // idb
extern char aGoldbtn_3[]; // idb
extern char aGoldbtn_4[]; // idb
extern char aSilverinput_3[]; // idb
extern char aSilverbtn_3[]; // idb
extern char aSilverbtn_4[]; // idb
extern char aSilverbtn_5[]; // idb
extern char aCopperinput_3[]; // idb
extern char aCopperbtn_2[]; // idb
extern char aCopperbtn_3[]; // idb
extern char aCopperbtn_4[]; // idb
extern char aI64d_47[]; // idb
extern char aI64d_48[]; // idb
extern char aI64d_49[]; // idb
extern char aI64d_50[]; // idb
extern char aNpcbank[]; // idb
extern int (__stdcall *StorageTabButWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StorageTabButWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *StorageInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StorageInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *StorageWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *StorageWin::_vftable_)(void *p, char); // weak
extern char aGameSystemmess[]; // idb
extern char aFrame_84[]; // idb
extern char aSysmsgdisplayw[]; // idb
extern char aChabox[]; // idb
extern char aUnlocknor[]; // idb
extern char aLocknor[]; // idb
extern char aPreupnor[]; // idb
extern char aPreupover[]; // idb
extern char aPreupclick[]; // idb
extern char aNextdownnor[]; // idb
extern char aNextdownover[]; // idb
extern char aNextdownclick[]; // idb
extern char aDownnor[]; // idb
extern char aDownover[]; // idb
extern char aDownclick[]; // idb
extern char aFillternor[]; // idb
extern char aFillterover[]; // idb
extern char aFillterclick[]; // idb
extern int (__stdcall *SysMsgDisplayWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SysMsgDisplayWin::_vftable_)(void *p, char); // weak
extern char aGameSystemwin_[]; // idb
extern char aFrame_85[]; // idb
extern char aSystemwin_0[]; // idb
extern char asc_9AF804[6]; // weak
extern char asc_9AF80C[]; // idb
extern char asc_9AF814[]; // idb
extern char aPanel02_52[]; // idb
extern char aClsnor_58[]; // idb
extern char aClsclick_58[]; // idb
extern char aClsover_58[]; // idb
extern char aHelplinknor_95[12]; // weak
extern char aHelplinknor_96[]; // idb
extern char aHelplinkcli_51[]; // idb
extern char aHelplinkove_51[]; // idb
extern char aWintitle_59[]; // idb
extern char aHelpnor[]; // idb
extern char aHelpclick[]; // idb
extern char aHelpover[]; // idb
extern char aGamenor[]; // idb
extern char aGameclick[]; // idb
extern char aGameover[]; // idb
extern char aGraphicnor[]; // idb
extern char aGraphicclick[]; // idb
extern char aGraphicover[]; // idb
extern char aSoundnor[]; // idb
extern char aSoundclick[]; // idb
extern char aSoundover[]; // idb
extern char aKeyremappingno[]; // idb
extern char aKeyremappingcl[]; // idb
extern char aKeyremappingov[]; // idb
extern char aSelectcharnor[]; // idb
extern char aSelectcharclic[]; // idb
extern char aSelectcharover[]; // idb
extern char aLogoutnor[]; // idb
extern char aLogoutclick[]; // idb
extern char aLogoutover[]; // idb
extern char aQuitnor_0[]; // idb
extern char aQuitclick_1[]; // idb
extern char aQuitover_1[]; // idb
extern char aCancelnor_14[]; // idb
extern char aCancelclick_14[]; // idb
extern char aCancelover_14[]; // idb
extern char aSystemwin[]; // idb
extern int (__stdcall *SystemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SystemWin::_vftable_)(void *p, char); // weak
extern char aGameTargetwin_[]; // idb
extern _UNKNOWN unk_9AFC3F; // weak
extern char aFrame_87[]; // idb
extern _UNKNOWN unk_9AFC46; // weak
extern _UNKNOWN unk_9AFC47; // weak
extern char aTargetwin[]; // idb
extern _UNKNOWN unk_9AFC52; // weak
extern char aEventpanel_9[11]; // weak
extern char aEventpanel_10[]; // idb
extern char aFace_mask_0[]; // idb
extern char aFacecut_mask_5[13]; // weak
extern char aFacecut_mask_6[]; // idb
extern char aMonlevelyellow[]; // idb
extern char aMonlevelorange[]; // idb
extern char aMonlevelred[]; // idb
extern char aMonlevelgreen[]; // idb
extern char aMonlevelgray[]; // idb
extern char aFacecut_mon_4[]; // idb
extern char asc_9AFCF0[]; // idb
extern char aPanel02_54[]; // idb
extern char aSpground_2[]; // idb
extern char aLpground_3[]; // idb
extern char aFill_sp_03_0[]; // idb
extern char aFill_lp_03_0[]; // idb
extern char aFill_sp_01_0[]; // idb
extern char aFill_lp_01_0[]; // idb
extern char aFill_hp_01_1[]; // idb
extern char aFill_hp_03_1[]; // idb
extern char aFill_hp_02_2[]; // idb
extern char aFill_hp_02_3[]; // idb
extern char a00_1[4]; // weak
extern char aFill_sp_02_0[]; // idb
extern char aFill_sp_02_1[]; // idb
extern char aFill_lp_02_0[]; // idb
extern char a00_2[4]; // weak
extern char a00_3[4]; // weak
extern char aCharbuffbox0_2[]; // idb
extern char aChardbuffbox_1[]; // idb
extern char aCharname_7[]; // idb
extern char aMonlev_mask[]; // idb
extern char aMonclass_mask[]; // idb
extern char aLevel_2[]; // idb
extern char aMinbtnnor_0[]; // idb
extern char aMinbtnclick_0[]; // idb
extern char aMinbtnover_0[]; // idb
extern char aMaxbtnnor_0[]; // idb
extern char aMaxbtnclick_0[]; // idb
extern char aMaxbtnover_0[]; // idb
extern char aLevel_over_0[]; // idb
extern char aSoul_add_nif[]; // idb
extern char aSoul_use_nif[]; // idb
extern char aSouloff02d[12]; // weak
extern char aSoulon02d[]; // idb
extern char aU_7[]; // idb
extern char aSD_45[]; // idb
extern char aU_8[]; // idb
extern char aSD_46[]; // idb
extern char aU_9[]; // idb
extern char aSD_47[]; // idb
extern char asc_9AFEAC[2]; // weak
extern char aD_64[]; // idb
extern char aU_10[]; // idb
extern char aSD_48[]; // idb
extern char aU_11[]; // idb
extern char aSD_49[]; // idb
extern char aU_12[]; // idb
extern char aSD_50[]; // idb
extern char asc_9AFED8[2]; // weak
extern char aD_65[]; // idb
extern char aGameTargetoppo[]; // idb
extern char aFrame_86[]; // idb
extern char aTargetofthetar[]; // idb
extern char aEventpanel_7[11]; // weak
extern char aEventpanel_8[]; // idb
extern char aFace_mask[]; // idb
extern char aFacecut_mask_3[13]; // weak
extern char aFacecut_mask_4[]; // idb
extern char aFacecut_mon_3[]; // idb
extern char asc_9AFF6C[]; // idb
extern char aPanel02_53[]; // idb
extern char aPanel03_17[]; // idb
extern char aFill_hp_02_0[]; // idb
extern char aFill_hp_02_1[]; // idb
extern char aFill_hp_01_0[]; // idb
extern char aFill_hp_03_0[]; // idb
extern char aLevel_1[]; // idb
extern char aCharname_6[]; // idb
extern char aLevel_over[]; // idb
extern char asc_9AFFD4[2]; // weak
extern char aD_63[]; // idb
extern int dword_9AFFDC; // weak
extern int (__stdcall *MobIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MobIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *AbStateIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AbStateIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *TargetOfTheTargetWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *TargetOfTheTargetWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__stdcall *TargetWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *TargetWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_9B09A4; // weak
extern _UNKNOWN unk_9B09A5; // weak
extern int (__stdcall *ToolTipWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ToolTipWin::_vftable_)(void *p, char); // weak
extern char aGameUsertrade_[]; // idb
extern _UNKNOWN unk_9B0C13; // weak
extern char aFrame_88[]; // idb
extern _UNKNOWN unk_9B0C1A; // weak
extern _UNKNOWN unk_9B0C1B; // weak
extern char aUsertradewin[]; // idb
extern _UNKNOWN unk_9B0C29; // weak
extern char asc_9B0C2C[6]; // weak
extern char asc_9B0C34[]; // idb
extern char aClsnor_59[]; // idb
extern char aClsclick_59[]; // idb
extern char aClsover_59[]; // idb
extern char aHelplinknor_97[12]; // weak
extern char aHelplinknor_98[]; // idb
extern char aHelplinkcli_52[]; // idb
extern char aHelplinkove_52[]; // idb
extern char asc_9B0C90[]; // idb
extern char aPanel02_55[]; // idb
extern char aWintitle_60[]; // idb
extern char aOtherslot03d[]; // idb
extern char aMyslot03d[]; // idb
extern char aOthername[]; // idb
extern char aMyname[]; // idb
extern char aIconslot_29[]; // idb
extern char aObject01_2[]; // idb
extern char aOtherlocknor[]; // idb
extern char aOtherlocklock[]; // idb
extern char aOtheroknor[]; // idb
extern char aOtherokoff[]; // idb
extern char aMylocknor[]; // idb
extern char aMylockover[]; // idb
extern char aMylockclick[]; // idb
extern char aMylocklock[]; // idb
extern char aMyoknor[]; // idb
extern char aMyokclick[]; // idb
extern char aMyokclick_0[]; // idb
extern char aMyokoff[]; // idb
extern char aMycancelnor[]; // idb
extern char aMycancelclick[]; // idb
extern char aMycancelclic_0[]; // idb
extern char aMycanceloff[]; // idb
extern char aMycopperbtn_11[]; // idb
extern char aMycopperbtn_12[]; // idb
extern char aMycopperbtn_13[]; // idb
extern char aMycopperbtn_14[]; // idb
extern char aMysilverbtn_8[]; // idb
extern char aMysilverbtn_9[]; // idb
extern char aMysilverbtn_10[]; // idb
extern char aMysilverbtn_11[]; // idb
extern char aMygoldbtn_11[]; // idb
extern char aMygoldbtn_12[]; // idb
extern char aMygoldbtn_13[]; // idb
extern char aMygoldbtn_14[]; // idb
extern char aMygembtn_11[]; // idb
extern char aMygembtn_12[]; // idb
extern char aMygembtn_13[]; // idb
extern char aMygembtn_14[]; // idb
extern char aMycopperinpu_3[]; // idb
extern char aMysilverinpu_3[]; // idb
extern char aMygoldinput_4[]; // idb
extern char aMygeminput_3[]; // idb
extern char aOthercopperbtn[]; // idb
extern char aOthercopperb_0[]; // idb
extern char aOthercopperb_1[]; // idb
extern char aOthercopperb_2[]; // idb
extern char aOthersilverbtn[]; // idb
extern char aOthersilverb_0[]; // idb
extern char aOthersilverb_1[]; // idb
extern char aOthersilverb_2[]; // idb
extern char aOthergoldbtn[]; // idb
extern char aOthergoldbtn_0[]; // idb
extern char aOthergoldbtn_1[]; // idb
extern char aOthergoldbtn_2[]; // idb
extern char aOthergembtn[]; // idb
extern char aOthergembtn_0[]; // idb
extern char aOthergembtn_1[]; // idb
extern char aOthergembtn_2[]; // idb
extern char a0_16[]; // idb
extern char aOthercopperinp[]; // idb
extern char a0_17[]; // idb
extern char aOthersilverinp[]; // idb
extern char a0_18[]; // idb
extern char aOthergoldinput[]; // idb
extern char a0_19[]; // idb
extern char aOthergeminput[]; // idb
extern char a0_38[2]; // weak
extern char a0_39[2]; // weak
extern char a0_40[2]; // weak
extern char a0_41[2]; // weak
extern char aUsertrade[]; // idb
extern int (__stdcall *UserTradeInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *UserTradeInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *UserTradeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *UserTradeWin::_vftable_)(void *p, char); // weak
extern char aGameKqvote_nif[]; // idb
extern char aFrame_89[]; // idb
extern char byte_9B1502; // idb
extern char byte_9B1503; // idb
extern char aVotewin[]; // idb
extern char asc_9B150C[]; // idb
extern char byte_9B1512; // idb
extern _UNKNOWN unk_9B1513; // weak
extern char asc_9B1514[]; // idb
extern char aWintitle_61[]; // idb
extern char aClsclick_60[]; // idb
extern char aClsover_60[]; // idb
extern char aClsnor_60[]; // idb
extern char aHelplink[]; // idb
extern char aUser[]; // idb
extern char aText01_27[]; // idb
extern char aTargetname[]; // idb
extern char aText02_11[]; // idb
extern char aReason01[]; // idb
extern char aReason[]; // idb
extern char aText04_1[]; // idb
extern char aText07_0[]; // idb
extern char aBtn01_3[]; // idb
extern char aBtn02_2[]; // idb
extern char aKqvote[]; // idb
extern char aReasonpulldown[]; // idb
extern char aText_reasonlis[]; // idb
extern int (__stdcall *VoteWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *VoteWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *VoteReasonWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *VoteReasonWin::_vftable_)(void *p, char); // weak
extern char aGameMessage_11[]; // idb
extern char asc_9B1A58[]; // idb
extern char aLogoutaftermin[]; // idb
extern char asc_9B1A78[6]; // weak
extern char asc_9B1A80[]; // idb
extern char aBtnnor01_9[]; // idb
extern char aBtnclick01_9[]; // idb
extern char aBtnover01_9[]; // idb
extern int (__stdcall *WaitingForLogoutWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WaitingForLogoutWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *LogoutAfterMinutesWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *LogoutAfterMinutesWin::_vftable_)(void *p, char); // weak
extern char aGameWtitlewin_[]; // idb
extern char byte_9B1EE7; // idb
extern char asc_9B1EE8[]; // idb
extern char aWeapontitlewin[]; // idb
extern char byte_9B1EFF; // idb
extern char asc_9B1F00[6]; // weak
extern _UNKNOWN unk_9B1F06; // weak
extern _UNKNOWN unk_9B1F07; // weak
extern char asc_9B1F08[]; // idb
extern _UNKNOWN unk_9B1F0E; // weak
extern char byte_9B1F0F; // idb
extern char aPanel02_56[]; // idb
extern char aPanel03_18[]; // idb
extern char aNpctext_1[]; // idb
extern char aItemname_2[]; // idb
extern char byte_9B1F31; // idb
extern _UNKNOWN unk_9B1F32; // weak
extern _UNKNOWN unk_9B1F33; // weak
extern char aClsclick_61[]; // idb
extern char aClsover_61[]; // idb
extern char aClsnor_61[]; // idb
extern char aQuitbtnclick_1[]; // idb
extern char aQuitbtnover_1[]; // idb
extern char aQuitbtnnor_1[]; // idb
extern char aWintitle_62[]; // idb
extern char aTgetslot_1[]; // idb
extern char aTitlename02d_2[]; // idb
extern char aRegbtnlock02_1[]; // idb
extern char aRegbtnclick0_1[]; // idb
extern char aRegbtnover02_1[]; // idb
extern char aRegbtnnor02d_3[]; // idb
extern char aSlot02d_3[]; // idb
extern char aRegbtnlock04[]; // idb
extern char aRegbtnclick04[]; // idb
extern char aRegbtnover04[]; // idb
extern char aRegbtnnor04[]; // idb
extern char aMakernametext[]; // idb
extern char aMakername[]; // idb
extern char aWtl_S[]; // idb
extern char aGameWtitlewi_0[]; // idb
extern char asc_9B2060[]; // idb
extern char aWeapontitledel[]; // idb
extern char asc_9B2080[6]; // weak
extern char asc_9B2088[]; // idb
extern char aPanel02_57[]; // idb
extern char aPanel03_19[]; // idb
extern char aNpctext_2[]; // idb
extern char aItemname_3[]; // idb
extern char aClsclick_62[]; // idb
extern char aClsover_62[]; // idb
extern char aClsnor_62[]; // idb
extern char aQuitbtnclick_2[]; // idb
extern char aQuitbtnover_2[]; // idb
extern char aQuitbtnnor_2[]; // idb
extern char aWintitle_63[]; // idb
extern char aTgetslot_2[]; // idb
extern char aTitlename02d_3[]; // idb
extern char aRegcancelbtnlo[]; // idb
extern char aRegcancelbtncl[]; // idb
extern char aRegcancelbtnov[]; // idb
extern char aRegcancelbtn_2[]; // idb
extern char aSlot02d_4[]; // idb
extern char aRegcancelbtn_3[]; // idb
extern char aRegcancelbtn_4[]; // idb
extern char aRegcancelbtn_5[]; // idb
extern char aRegcancelbtn_6[]; // idb
extern char aMakernametex_0[]; // idb
extern char aMakername_0[]; // idb
extern char aWtl_S_0[]; // idb
extern int (__stdcall *WeaponTitleWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeaponTitleWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *WeaponTitleDeleteWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeaponTitleDeleteWin::_vftable_)(void *p, char); // weak
extern char aGameMinimapf_0[]; // idb
extern _UNKNOWN unk_9B26A1; // weak
extern char aNpcguild_0[]; // idb
extern char aFrame_90[]; // idb
extern char aWingstonemapwi[]; // idb
extern char asc_9B26C8[]; // idb
extern char aClsnor_63[]; // idb
extern char aClsclick_63[]; // idb
extern char aClsover_63[]; // idb
extern char asc_9B26EC[12]; // weak
extern char asc_9B26F8[]; // idb
extern char aHelplinkcli_53[]; // idb
extern char aHelplinkove_53[]; // idb
extern char aWintitle_64[]; // idb
extern char aFullmap_0[]; // idb
extern char aSminimapS_dds[]; // idb
extern char aMinimapfull_0[]; // idb
extern int (__stdcall *WingStoneMapWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WingStoneMapWin::_vftable_)(void *p, char); // weak
extern char aGameGoddesswin[]; // idb
extern char aFrame_91[]; // idb
extern char aWingstonewin[]; // idb
extern char asc_9B29CC[]; // idb
extern char aWintitle_65[]; // idb
extern char aGoddesswingwin[15]; // weak
extern char aClsnor_64[]; // idb
extern char aClsclick_64[]; // idb
extern char aClsover_64[]; // idb
extern char aSlot00_1[]; // idb
extern char aSlot00_2[]; // idb
extern char aWingstone01_1[]; // idb
extern char aD_66[]; // idb
extern char aTextbox_exp[]; // idb
extern char aTextbox_exp_0[]; // idb
extern char aUnknownText_12[13]; // weak
extern char aUnknownText_13[13]; // weak
extern char aListnor[]; // idb
extern char aListclick[]; // idb
extern char aListover[]; // idb
extern char aBtnnor02_17[]; // idb
extern char aBtnclick02_17[]; // idb
extern char aBtnover02_17[]; // idb
extern char aFly[4]; // weak
extern char aBtnnor01_10[]; // idb
extern char aBtnclick01_10[]; // idb
extern char aBtnover01_10[]; // idb
extern char aSavePosition[14]; // weak
extern char aBtnnor03_11[]; // idb
extern char aBtnclick03_11[]; // idb
extern char aBtnover03_11[]; // idb
extern char aCancel_1[7]; // weak
extern char aUnknownText_10[13]; // weak
extern char aUnknownText_11[13]; // weak
extern char aUnknownText_14[13]; // weak
extern char aUnknownText_15[13]; // weak
extern char aD_67[]; // idb
extern char aD__1[]; // idb
extern char aGoddesswing_0[]; // idb
extern char aD__0[]; // idb
extern char aGoddesswing_1[]; // idb
extern char aGoddesswing_2[]; // idb
extern int (__stdcall *WingStoneWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WingStoneWin::_vftable_)(void *p, char); // weak
extern char aGameWorldmap_n[]; // idb
extern char byte_9B2DEE; // idb
extern char byte_9B2DEF; // idb
extern char aPanel02_58[]; // idb
extern char aWorldmapwin[]; // idb
extern char aPlane01_17[]; // idb
extern char aPanel02_59[]; // idb
extern char aWm_2dclick[]; // idb
extern char aWm_2dover[]; // idb
extern char aWm_2dnor[]; // idb
extern char aClsclick_65[]; // idb
extern char aClsover_65[]; // idb
extern char aClsnor_65[]; // idb
extern char aMapname[]; // idb
extern char aAvatar01_0[]; // idb
extern char aAvatar02[]; // idb
extern char aWm_2d_nif[]; // idb
extern char aWorldlink[]; // idb
extern char pkText[]; // idb
extern int (__stdcall *WorldMapWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WorldMapWin::_vftable_)(void *p, char); // weak
extern char aGameOption_com[]; // idb
extern _UNKNOWN unk_9B3103; // weak
extern char aFrame_92[6]; // weak
extern char aFrame_93[]; // idb
extern char aOptionbasewin[]; // idb
extern char asc_9B3124[6]; // weak
extern char asc_9B312C[]; // idb
extern char aWintitle_66[]; // idb
extern char asc_9B3140[]; // idb
extern char aPanel02_60[]; // idb
extern char aIconslot_30[]; // idb
extern char aClsnor_66[]; // idb
extern char aClsclick_66[]; // idb
extern char aClsover_66[]; // idb
extern char asc_9B3178[12]; // weak
extern char asc_9B3184[]; // idb
extern char aHelplinkcli_54[]; // idb
extern char aHelplinkove_54[]; // idb
extern char aOknor_16[]; // idb
extern char aOkclick_14[]; // idb
extern char aOkover_14[]; // idb
extern char aCreatnor[]; // idb
extern char aCreatclick[]; // idb
extern char aCreatover[]; // idb
extern char aQuitnor_1[]; // idb
extern char aQuitclick_2[]; // idb
extern char aQuitover_2[]; // idb
extern char aSubtitle01[]; // idb
extern char aSubtitle02[]; // idb
extern char aOption_common[]; // idb
extern int (__stdcall *OptionBaseWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *OptionBaseWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_9B3474; // weak
extern char aGameOption_g_0[]; // idb
extern char aPanel_graphic[14]; // weak
extern char aPanel_graphi_0[]; // idb
extern char aLongground[]; // idb
extern char aLongobject[]; // idb
extern char aChrshadow[]; // idb
extern char aChroline[]; // idb
extern char aMovingpoint_0[]; // idb
extern char aLonggroundbarh[]; // idb
extern char aLonggroundbarl[]; // idb
extern char aLonggroundbar[]; // idb
extern char aLongobjectbarh[]; // idb
extern char aLongobjectbarl[]; // idb
extern char aLongobjectbar[]; // idb
extern char aChrshadowbarhi[]; // idb
extern char aChrshadowbarlo[]; // idb
extern char aChrshadowbar[]; // idb
extern char aChrolinechno_0[]; // idb
extern char aChrolinechcl_0[]; // idb
extern char aResolutionnor[]; // idb
extern char aResolutionclic[]; // idb
extern char aResolutionover[]; // idb
extern char aResolution_1[]; // idb
extern char aWindowmod[]; // idb
extern char aWindowmodnor[]; // idb
extern char aWindowmodclick[]; // idb
extern char aMultisample_0[]; // idb
extern char aMultisamplenor[]; // idb
extern char aMultisamplecli[]; // idb
extern char aGloweffect[]; // idb
extern char aGloweffectnor[]; // idb
extern char aGloweffectclic[]; // idb
extern char aCamerashake[]; // idb
extern char aCamerashakenor[]; // idb
extern char aCamerashaketcl[]; // idb
extern char aChraura[]; // idb
extern char aChrauranor[]; // idb
extern char aChrauraclick[]; // idb
extern char aHideuititle[]; // idb
extern char aHideui[]; // idb
extern char aHideuinor[]; // idb
extern char aHideuiclick[]; // idb
extern char aIXI_1[]; // idb
extern int (__stdcall *OptionGraphicWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *OptionGraphicWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_9B38F8; // weak
extern char aGameOption_sou[]; // idb
extern char aPanel_sound[]; // idb
extern char aTosdopt[]; // idb
extern char aBagdopt[]; // idb
extern char aEfsdopt[]; // idb
extern char aEnefopt[]; // idb
extern char aMovingpoint_1[]; // idb
extern char aTosdoptbarhigh[]; // idb
extern char aTosdoptbarlow[]; // idb
extern char aTosdoptbar[]; // idb
extern char aBagdoptbarhigh[]; // idb
extern char aBagdoptbarlow[]; // idb
extern char aBagdoptbar[]; // idb
extern char aEfsdoptbarhigh[]; // idb
extern char aEfsdoptbarlow[]; // idb
extern char aEfsdoptbar[]; // idb
extern char aEnefoptbarhigh[]; // idb
extern char aEnefoptbarlow[]; // idb
extern char aEnefoptbar[]; // idb
extern int (__stdcall *OptionSoundWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *OptionSoundWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_9B3BE4; // weak
extern char aGameOption_sys[]; // idb
extern char aPanel_system[13]; // weak
extern char aPanel_system_0[]; // idb
extern char aMychrname[]; // idb
extern char aMynmchnor[]; // idb
extern char aMynmchclick[]; // idb
extern char aOtchrname[]; // idb
extern char aOtnmchnor[]; // idb
extern char aOtnmchclick[]; // idb
extern char aNpcname[]; // idb
extern char aNpcnmchnor[]; // idb
extern char aNpcnmchclick[]; // idb
extern char aMonname[]; // idb
extern char aMonnmchnor[]; // idb
extern char aMonnmchclick[]; // idb
extern char aItname[]; // idb
extern char aItnmchnor[]; // idb
extern char aItnmchclick[]; // idb
extern char aHpname[]; // idb
extern char aHpnmchnor[]; // idb
extern char aHpnmchclick[]; // idb
extern char aSpname[]; // idb
extern char aSpnmchnor[]; // idb
extern char aSpnmchclick[]; // idb
extern char aInterfacename[]; // idb
extern char aInterfacenmchn[]; // idb
extern char aInterfacenmchc[]; // idb
extern char aSpeechname[]; // idb
extern char aSpeechnmchnor[]; // idb
extern char aSpeechnmchclic[]; // idb
extern char aInterfaceposna[]; // idb
extern char aInterfaceposch[]; // idb
extern char aInterfacepos_0[]; // idb
extern char aChattinghidena[]; // idb
extern char aChattinghidech[]; // idb
extern char aChattinghide_0[]; // idb
extern char aWisrej[]; // idb
extern char aWisrejchnor[]; // idb
extern char aWisrejchclick[]; // idb
extern char aTrdrej[]; // idb
extern char aTrdrejchnor[]; // idb
extern char aTrdrejchclick[]; // idb
extern char aParrej[]; // idb
extern char aParrejchnor[]; // idb
extern char aParrejchclick[]; // idb
extern char aAgrej[]; // idb
extern char aAgrejchnor[]; // idb
extern char aAgrejchclick[]; // idb
extern char aSystemmsgrej[]; // idb
extern char aSystemmsgchnor[]; // idb
extern char aSystemmsgchcli[]; // idb
extern char aOkmsgboxrej[]; // idb
extern char aOkmsgboxchnor[]; // idb
extern char aOkmsgboxchclic[]; // idb
extern char aChatinputrej[]; // idb
extern char aChatinputchnor[]; // idb
extern char aChatinputchcli[]; // idb
extern char aNamepanel3d[]; // idb
extern char aNamepanel3dnor[]; // idb
extern char aNamepanel3dcli[]; // idb
extern char aGametipon[]; // idb
extern char aGametiponchnor[]; // idb
extern char aGametiponchcli[]; // idb
extern char aPlayguideon[]; // idb
extern char aPlayguideonchn[]; // idb
extern char aPlayguideonchc[]; // idb
extern char aInvautostack[]; // idb
extern char aInvautostackch[]; // idb
extern char aInvautostack_0[]; // idb
extern int (__stdcall *OptionSystemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *OptionSystemWin::_vftable_)(void *p, char); // weak
extern char aAbstate01[]; // idb
extern _UNKNOWN unk_9B41CE; // weak
extern char aXD[]; // idb
extern int (__stdcall *AbstateIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AbstateIcon::_vftable_)(void *p, char); // weak
extern int (__stdcall *ActionIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ActionIcon::_vftable_)(void *p, char); // weak
extern int (__stdcall *AniIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AniIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *IconSlotWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *IconSlotWin::_vftable_)(void *p, char); // weak
extern char aGameItempick_n[]; // idb
extern char aItemclick[10]; // weak
extern char aItemover[9]; // weak
extern char aWeapontitle_2[]; // idb
extern char aSgameS_nif[]; // idb
extern char aSclick_0[]; // idb
extern char aSover_0[]; // idb
extern int (__stdcall *IconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *IconWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_9B4E30; // weak
extern _UNKNOWN unk_9B4E32; // weak
extern _UNKNOWN unk_9B4E33; // weak
extern char aD_68[]; // idb
extern _UNKNOWN unk_9B4E39; // weak
extern _UNKNOWN unk_9B4E3A; // weak
extern _UNKNOWN unk_9B4E3B; // weak
extern char aVaritem000_7[11]; // weak
extern _UNKNOWN unk_9B4E47; // weak
extern char aD_69[]; // idb
extern _UNKNOWN unk_9B4E4B; // weak
extern char aVaritem000_8[11]; // weak
extern char aVaritem000_9[11]; // weak
extern char aD_70[]; // idb
extern char pcFn[]; // idb
extern int (__stdcall *ItemIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemIcon::_vftable_)(void *p, char); // weak
extern char aGameIconmate_1[]; // idb
extern char aPlane01_19[8]; // weak
extern char aGameIconmate_2[]; // idb
extern char aPlane01_20[8]; // weak
extern char aGameIconmate_0[]; // idb
extern char aPlane01_18[8]; // weak
extern int (__thiscall *NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<SkillIcon__>_SkillIcon__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *SkillIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SkillIcon::_vftable_)(void *p, char); // weak
extern char aGameGuildchang[]; // idb
extern char byte_9B5436[2]; // idb
extern char aFrame_94[]; // idb
extern char aGuildcombatpro[]; // idb
extern char asc_9B5460[]; // idb
extern char aPanel02_61[]; // idb
extern char asc_9B5470[6]; // weak
extern char asc_9B5478[]; // idb
extern char aWintitle_67[]; // idb
extern char aRadiobox01[]; // idb
extern char aRadiobox02[]; // idb
extern char aBtn01_4[]; // idb
extern char aBtn02_3[]; // idb
extern char asc_9B54B4[12]; // weak
extern char aHelplinkcli_55[]; // idb
extern char aHelplinkove_55[]; // idb
extern char asc_9B54E0[]; // idb
extern char aTest_0[]; // idb
extern char aText01_28[]; // idb
extern char aTest2[]; // idb
extern char aText02_12[]; // idb
extern char aTest3[]; // idb
extern char aText03_3[]; // idb
extern char aGuildchangeatt[]; // idb
extern int (__stdcall *GuildCombatPropensityChangeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildCombatPropensityChangeWin::_vftable_)(void *p, char); // weak
extern char aGameGuildcreat[]; // idb
extern char aFrame_95[]; // idb
extern char aGuildcreatewin[]; // idb
extern char asc_9B57A4[6]; // weak
extern char asc_9B57AC[]; // idb
extern char asc_9B57B4[]; // idb
extern char aPanel02_62[]; // idb
extern char aWintitle_68[]; // idb
extern char aClsnor_67[]; // idb
extern char aClsclick_67[]; // idb
extern char aClsover_67[]; // idb
extern char asc_9B57EC[12]; // weak
extern char asc_9B57F8[]; // idb
extern char aHelplinkcli_56[]; // idb
extern char aHelplinkove_56[]; // idb
extern char aAddfrndnor_0[]; // idb
extern char aAddfrndclick_0[]; // idb
extern char aAddfrndover_0[]; // idb
extern char aAddfrndnor01[]; // idb
extern char aAddfrndclick01[]; // idb
extern char aAddfrndover01[]; // idb
extern char aMynmchnor_0[]; // idb
extern char aMynmchclick_0[]; // idb
extern char aMynmchnor01[]; // idb
extern char aMynmchclick01[]; // idb
extern char aText01_29[]; // idb
extern char aText03_4[]; // idb
extern char aText05_0[]; // idb
extern char aText09[]; // idb
extern char aText06_0[]; // idb
extern char aText08[]; // idb
extern char aText02_13[]; // idb
extern char aText02_14[]; // idb
extern char aText07_1[]; // idb
extern char aText07_2[]; // idb
extern char aGuildcreate[]; // idb
extern int (__stdcall *GuildFoundWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildFoundWin::_vftable_)(void *p, char); // weak
extern char aGameGuildmenu_[]; // idb
extern char aFrame_96[]; // idb
extern char aGuildmastermen[]; // idb
extern char asc_9B5B7C[6]; // weak
extern char asc_9B5B84[]; // idb
extern char asc_9B5B8C[]; // idb
extern char aPanel02_63[]; // idb
extern char aClsnor_68[]; // idb
extern char aClsclick_68[]; // idb
extern char aClsover_68[]; // idb
extern char asc_9B5BB8[12]; // weak
extern char asc_9B5BC4[]; // idb
extern char aHelplinkcli_57[]; // idb
extern char aHelplinkove_57[]; // idb
extern char aWintitle_69[]; // idb
extern char aBtn01nor_12[]; // idb
extern char aBtn01click_14[]; // idb
extern char aBtn01over_14[]; // idb
extern char aBtn02nor_9[]; // idb
extern char aBtn02click_8[]; // idb
extern char aBtn03over_3[]; // idb
extern char aBtn03nor_4[]; // idb
extern char aBtn03click_3[]; // idb
extern char aBtn03over_4[]; // idb
extern char aBtn04nor_2[]; // idb
extern char aBtn04click_2[]; // idb
extern char aBtn04over_2[]; // idb
extern char aBtn05nor[]; // idb
extern char aBtn05click[]; // idb
extern char aBtn05over[]; // idb
extern char aBtn06nor[]; // idb
extern char aBtn06click[]; // idb
extern char aBtn06over[]; // idb
extern char aGuildmenu_0[]; // idb
extern int (__stdcall *GuildMasterMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildMasterMenuWin::_vftable_)(void *p, char); // weak
extern char aGameGuildmen_0[]; // idb
extern _UNKNOWN unk_9B5F37; // weak
extern char aFrame_97[]; // idb
extern char aGuildmenuwin[]; // idb
extern char asc_9B5F50[6]; // weak
extern char asc_9B5F58[]; // idb
extern char asc_9B5F60[]; // idb
extern char aPanel02_64[]; // idb
extern char aClsnor_69[]; // idb
extern char aClsclick_69[]; // idb
extern char aClsover_69[]; // idb
extern char asc_9B5F8C[12]; // weak
extern char asc_9B5F98[]; // idb
extern char aHelplinkcli_58[]; // idb
extern char aHelplinkove_58[]; // idb
extern char aWintitle_70[]; // idb
extern char aBtn02dnor[]; // idb
extern char aBtn02dclick[]; // idb
extern char aBtn02dover[]; // idb
extern char aSS_64[]; // idb
extern char aGuildmenu_1[]; // idb
extern int (__stdcall *GuildMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildMenuWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildLeaveTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildLeaveTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildLeaveTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildLeaveTask::_vftable_)(void *p, char); // weak
extern char aGuild_cannotle[]; // idb
extern char aGameGuildcha_0[]; // idb
extern char byte_9B62ED; // idb
extern char byte_9B62EE[2]; // idb
extern char aFrame_98[]; // idb
extern char aGuildnamechang[]; // idb
extern char asc_9B630C[]; // idb
extern char aPanel02_65[]; // idb
extern char asc_9B631C[6]; // weak
extern char asc_9B6324[]; // idb
extern char aWintitle_71[]; // idb
extern char aText01_30[]; // idb
extern char aCls_3[]; // idb
extern char aBtn01_5[]; // idb
extern char asc_9B634C[12]; // weak
extern char aHelplinkcli_59[]; // idb
extern char aHelplinkove_59[]; // idb
extern char asc_9B6378[]; // idb
extern char aBtn02_4[]; // idb
extern char aPanel03_20[]; // idb
extern char aGuildchangenam[]; // idb
extern int (__stdcall *GuildNameChangeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildNameChangeWin::_vftable_)(void *p, char); // weak
extern char aGameGuildedito[]; // idb
extern char asc_9B65FC[]; // idb
extern char aGuildnoticeedi[]; // idb
extern char asc_9B661C[6]; // weak
extern char asc_9B6624[]; // idb
extern char asc_9B662C[]; // idb
extern char aPanel02_66[]; // idb
extern char aClsnor_70[]; // idb
extern char aClsclick_70[]; // idb
extern char aClsover_70[]; // idb
extern char asc_9B6658[12]; // weak
extern char asc_9B6664[]; // idb
extern char aHelplinkcli_60[]; // idb
extern char aHelplinkove_60[]; // idb
extern char aWintitle_72[]; // idb
extern char aAddfrndnor_1[]; // idb
extern char aAddfrndclick_1[]; // idb
extern char aAddfrndover_1[]; // idb
extern char aAddfrndnor01_0[]; // idb
extern char aAddfrndclick_2[]; // idb
extern char aAddfrndover0_0[]; // idb
extern char aText01_31[]; // idb
extern char aGuildeditor[]; // idb
extern int (__stdcall *GuildNoticeEditorWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildNoticeEditorWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildNotifyTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildNotifyTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildNotifyTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildNotifyTask::_vftable_)(void *p, char); // weak
extern char aGameGuildmen_1[]; // idb
extern _UNKNOWN unk_9B69C7; // weak
extern char asc_9B69C8[]; // idb
extern char aGuildnpcmenuwi[]; // idb
extern char asc_9B69E0[6]; // weak
extern char asc_9B69E8[]; // idb
extern char asc_9B69F0[]; // idb
extern char aPanel02_67[]; // idb
extern char aClsnor_71[]; // idb
extern char aClsclick_71[]; // idb
extern char aClsover_71[]; // idb
extern char asc_9B6A1C[12]; // weak
extern char asc_9B6A28[]; // idb
extern char aHelplinkcli_61[]; // idb
extern char aHelplinkove_61[]; // idb
extern char aWintitle_73[]; // idb
extern char aBtn02dnor_0[]; // idb
extern char aBtn02dclick_0[]; // idb
extern char aBtn02dover_0[]; // idb
extern char aGuildmenu_2[]; // idb
extern int (__stdcall *GuildNpcMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildNpcMenuWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildDismissTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildDismissTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildDismissTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildDismissTask::_vftable_)(void *p, char); // weak
extern char aGuildwarinform[]; // idb
extern char aW_10[]; // idb
extern int (__stdcall *GuildWarInformWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildWarInformWin::_vftable_)(void *p, char); // weak
extern char aGuildwarkillco[]; // idb
extern char aW_11[]; // idb
extern int (__stdcall *GuildWarKillCountWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildWarKillCountWin::_vftable_)(void *p, char); // weak
extern char aGameGuildwarme[]; // idb
extern char asc_9B7204[]; // idb
extern char aGuildwarstatew[]; // idb
extern char asc_9B7220[6]; // weak
extern char asc_9B7228[]; // idb
extern char aWintitle_74[]; // idb
extern char aClsnor_72[]; // idb
extern char aClsclick_72[]; // idb
extern char aClsover_72[]; // idb
extern char asc_9B7258[12]; // weak
extern char asc_9B7264[]; // idb
extern char aHelplinkcli_62[]; // idb
extern char aHelplinkove_62[]; // idb
extern char asc_9B7290[]; // idb
extern char aIconslot_31[]; // idb
extern char aColumnbarno_15[]; // idb
extern char aColumnbarcl_13[]; // idb
extern char aColumnbarov_13[]; // idb
extern char aColumn01_9[]; // idb
extern char aColumn02_6[]; // idb
extern char aColumn03_6[]; // idb
extern char aColumn04_3[]; // idb
extern char aColumn05_3[]; // idb
extern char aColumn06_2[]; // idb
extern char aText01_32[]; // idb
extern char aSlidebar_sl_16[]; // idb
extern char aSlidebar_dn_33[]; // idb
extern char aSlidebar_up_33[]; // idb
extern char aSlidebar_13[]; // idb
extern char aTitle01nor_5[]; // idb
extern char aTitle01click_4[]; // idb
extern char aTitle01over_6[]; // idb
extern char aTitle02nor_5[]; // idb
extern char aTitle02click_4[]; // idb
extern char aTitle02over_6[]; // idb
extern char aTitle03nor_5[]; // idb
extern char aTitle03click_4[]; // idb
extern char aTitle03over_6[]; // idb
extern char aTitle04nor_5[]; // idb
extern char aTitle04click_4[]; // idb
extern char aTitle04over_6[]; // idb
extern char aTitle05nor_2[]; // idb
extern char aTitle05click_1[]; // idb
extern char aTitle05over_3[]; // idb
extern char aTitle06nor_2[]; // idb
extern char aTitle06click_1[]; // idb
extern char aTitle06over_3[]; // idb
extern char aGuildlist_0[]; // idb
extern char aColumnbarno_16[]; // idb
extern char aColumnbarcl_14[]; // idb
extern char aColumnbarov_14[]; // idb
extern char aColumn07_0[]; // idb
extern char aColumn08_0[]; // idb
extern char aColumn09[]; // idb
extern char aColumn10[]; // idb
extern char aColumn11[]; // idb
extern char aText02_15[]; // idb
extern char aSlidebar_sl_17[]; // idb
extern char aSlidebar01_dnb[]; // idb
extern char aSlidebar01_upb[]; // idb
extern char aSlidebar01_1[]; // idb
extern char aTitle07nor[]; // idb
extern char aTitle07click[]; // idb
extern char aTitle07over[]; // idb
extern char aTitle08nor[]; // idb
extern char aTitle08click[]; // idb
extern char aTitle08over[]; // idb
extern char aTitle09nor[]; // idb
extern char aTitle09click[]; // idb
extern char aTitle09over[]; // idb
extern char aTitle10nor[]; // idb
extern char aTitle10click[]; // idb
extern char aTitle10over[]; // idb
extern char aTitle11nor[]; // idb
extern char aTitle11click[]; // idb
extern char aTitle11over[]; // idb
extern char aGuildwarlist[]; // idb
extern char aGuildwarapplyn[]; // idb
extern char aGuildwarapplyc[]; // idb
extern char aGuildwarapplyo[]; // idb
extern char aText03_5[]; // idb
extern char aSearch_input_0[]; // idb
extern char aSearchbtnnor[]; // idb
extern char aSearchbtnclick[]; // idb
extern char aSearchbtnover[]; // idb
extern char aBtn01nor_13[]; // idb
extern char aBtn01click_15[]; // idb
extern char aBtn01over_15[]; // idb
extern char aDS_8[]; // idb
extern char aDS_9[]; // idb
extern char aDS_10[]; // idb
extern char a__1[2]; // weak
extern char a__7[2]; // idb
extern char asc_9B76CC[3]; // idb
extern char asc_9B76D0[3]; // idb
extern char asc_9B76D4[3]; // idb
extern char asc_9B76D8[3]; // idb
extern char aSS_65[]; // idb
extern char aD_71[]; // idb
extern char aGuildwarmenu[]; // idb
extern int (__stdcall *GuildWarStateWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildWarStateWin::_vftable_)(void *p, char); // weak
extern char aGuild_cannot_0[]; // idb
extern _UNKNOWN unk_9B7952; // weak
extern _UNKNOWN unk_9B7953; // weak
extern _UNKNOWN unk_9B7956; // weak
extern char byte_9B7957; // idb
extern char byte_9B795E; // idb
extern char byte_9B795F; // idb
extern char byte_9B7966; // idb
extern _UNKNOWN unk_9B7967; // weak
extern _UNKNOWN unk_9B796E; // weak
extern char byte_9B796F; // idb
extern char aGameGuildwin_n[]; // idb
extern char asc_9B7A68[]; // idb
extern char aGuildwin_0[]; // idb
extern char asc_9B7A7C[6]; // weak
extern char asc_9B7A84[]; // idb
extern char aIconslot_32[]; // idb
extern char aWintitle_75[]; // idb
extern char aClsnor_73[]; // idb
extern char aClsclick_73[]; // idb
extern char aClsover_73[]; // idb
extern char asc_9B7AC0[12]; // weak
extern char asc_9B7ACC[]; // idb
extern char aHelplinkcli_63[]; // idb
extern char aHelplinkove_63[]; // idb
extern char aText04_2[]; // idb
extern char aCategory_2[]; // idb
extern char asc_9B7B0C[]; // idb
extern char aPanel02_68[]; // idb
extern char aPanel03_21[]; // idb
extern char aPanel04_8[]; // idb
extern char aColumnbarno_17[]; // idb
extern char aColumnbarcl_15[]; // idb
extern char aColumnbarov_15[]; // idb
extern char aColumn01_10[]; // idb
extern char aColumn02_7[]; // idb
extern char aColumn03_7[]; // idb
extern char aColumn04_4[]; // idb
extern char aColumn05_4[]; // idb
extern char aSubtext01_3[]; // idb
extern char aColumnbarno_18[]; // idb
extern char aColumn06_3[]; // idb
extern char aSubtext02_1[]; // idb
extern char aColumnbar01n_0[]; // idb
extern char aColumnbar01c_0[]; // idb
extern char aColumnbar01o_0[]; // idb
extern char aColumnhis01[]; // idb
extern char aColumnhis02[]; // idb
extern char aColumnhis03[]; // idb
extern char aSubtext03[]; // idb
extern char aSlidebar_sl_18[]; // idb
extern char aSlidebar_dn_34[]; // idb
extern char aSlidebar_up_34[]; // idb
extern char aSlidebar02[]; // idb
extern char aSlidebar_dn_35[]; // idb
extern char aSlidebar_up_35[]; // idb
extern char aSlidebar01_2[]; // idb
extern char aSlidebar_sl_19[]; // idb
extern char aSlidebar_dn_36[]; // idb
extern char aSlidebar_up_36[]; // idb
extern char aSlidebar03[]; // idb
extern char aTab01_off_2[]; // idb
extern char aTab01_on_3[]; // idb
extern char aTab02_off_2[]; // idb
extern char aTab02_on_3[]; // idb
extern char aTab03_off_2[]; // idb
extern char aTab03_on_3[]; // idb
extern char aTitle01nor_6[]; // idb
extern char aTitle01click_5[]; // idb
extern char aTitle01over_7[]; // idb
extern char aTitle02nor_6[]; // idb
extern char aTitle02click_5[]; // idb
extern char aTitle02over_7[]; // idb
extern char aTitle03nor_6[]; // idb
extern char aTitle03click_5[]; // idb
extern char aTitle03over_7[]; // idb
extern char aTitle04nor_6[]; // idb
extern char aTitle04click_5[]; // idb
extern char aTitle04over_7[]; // idb
extern char aTitle05nor_3[]; // idb
extern char aTitle05click_2[]; // idb
extern char aTitle05over_4[]; // idb
extern char aTitlehis01nor[]; // idb
extern char aTitlehis01clic[]; // idb
extern char aTitlehis01over[]; // idb
extern char aTitlehis02nor[]; // idb
extern char aTitlehis02clic[]; // idb
extern char aTitlehis02over[]; // idb
extern char aTitlehis03nor[]; // idb
extern char aTitlehis03clic[]; // idb
extern char aTitlehis03over[]; // idb
extern char aText01_33[]; // idb
extern char aText02_16[]; // idb
extern char aBtn01nor_14[]; // idb
extern char aBtn01click_16[]; // idb
extern char aBtn01over_16[]; // idb
extern char aBtn02nor_10[]; // idb
extern char aBtn02click_9[]; // idb
extern char aBtn02over_8[]; // idb
extern char aBtn03nor_5[]; // idb
extern char aBtn03click_4[]; // idb
extern char aBtn03over_5[]; // idb
extern char aBtn05nor_0[]; // idb
extern char aBtn05click_0[]; // idb
extern char aBtn05over_0[]; // idb
extern char aBase_3[]; // idb
extern char aFriendnor_2[]; // idb
extern char aFriendclick_2[]; // idb
extern char aFriendover_2[]; // idb
extern char aMasternor_2[]; // idb
extern char aMasterclick_2[]; // idb
extern char aMasterover_2[]; // idb
extern char aGuildnor_2[]; // idb
extern char aGuildclick_2[]; // idb
extern char aGuildover_2[]; // idb
extern char aGuildacademy_8[]; // idb
extern char aGuildacademy_9[]; // idb
extern char aGuildacadem_10[]; // idb
extern char aWeddingnor_2[]; // idb
extern char aWeddingclick_2[]; // idb
extern char aWeddingover_2[]; // idb
extern char aPartymatchno_2[]; // idb
extern char aPartymatchcl_2[]; // idb
extern char aPartymatchov_2[]; // idb
extern char aFriend_2[]; // idb
extern char aHolypromise_2[]; // idb
extern char aGuild_3[]; // idb
extern char aGuildacadem_11[]; // idb
extern char aWedding_2[]; // idb
extern char aPartymatch_2[]; // idb
extern char aSS_69[]; // idb
extern char aSS_70[]; // idb
extern char aSS_71[]; // idb
extern char aSS_72[]; // idb
extern char aSS_73[]; // idb
extern char aGuildemblemdis[]; // idb
extern char aGuildemblemact[]; // idb
extern char aGuildemblem[]; // idb
extern char asc_9B80D8[]; // idb
extern char asc_9B80DC[]; // idb
extern char aLvD_0[]; // idb
extern char pFormat[]; // idb
extern char aSS_66[]; // idb
extern char asc_9B80FC[]; // idb
extern char aSS_67[]; // idb
extern char aSS_68[]; // idb
extern char asc_9B8110[]; // idb
extern char aGuildwin[]; // idb
extern char aDDD_1[]; // idb
extern char aDefault[8]; // weak
extern int (__stdcall *ISingletonTask<GuildMemberVanishTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildMemberVanishTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildMemberGradeSetupTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildMemberGradeSetupTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildAcademyMasterAppointTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildAcademyMasterAppointTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildAcademyMasterInitializeTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildAcademyMasterInitializeTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildMemberVanishTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildMemberVanishTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildMemberGradeSetupTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildMemberGradeSetupTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyMasterAppointTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyMasterAppointTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyMasterInitializeTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyMasterInitializeTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildWin::_vftable_)(void *p, char); // weak
extern char aGameGuildtflag[]; // idb
extern char aPlane01_21[]; // idb
extern char aGtiflagwin[]; // idb
extern int (__stdcall *GTIFlagWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTIFlagWin::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_9B8794; // weak
extern _UNKNOWN unk_9B8795; // weak
extern char aGtinformwin[]; // idb
extern char aW_12[]; // idb
extern int (__stdcall *GTInformWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTInformWin::_vftable_)(void *p, char); // weak
extern char aGameGuildtba_0[]; // idb
extern char asc_9B8A04[]; // idb
extern _UNKNOWN unk_9B8A0A; // weak
extern _UNKNOWN unk_9B8A0B; // weak
extern char aGtstatuswin[]; // idb
extern char asc_9B8A18[6]; // weak
extern _UNKNOWN unk_9B8A1E; // weak
extern _UNKNOWN unk_9B8A1F; // weak
extern char asc_9B8A20[]; // idb
extern _UNKNOWN unk_9B8A26; // weak
extern _UNKNOWN unk_9B8A27; // weak
extern char aWintitle_77[]; // idb
extern _UNKNOWN unk_9B8A31; // weak
extern _UNKNOWN unk_9B8A32; // weak
extern _UNKNOWN unk_9B8A33; // weak
extern char asc_9B8A34[]; // idb
extern char aPanel02_70[]; // idb
extern char aTab01[]; // idb
extern _UNKNOWN unk_9B8A4A; // weak
extern _UNKNOWN unk_9B8A4B; // weak
extern char aTab01text[]; // idb
extern _UNKNOWN unk_9B8A56; // weak
extern _UNKNOWN unk_9B8A57; // weak
extern char aTab02[]; // idb
extern _UNKNOWN unk_9B8A5E; // weak
extern _UNKNOWN unk_9B8A5F; // weak
extern char aTab02text[]; // idb
extern _UNKNOWN unk_9B8A6A; // weak
extern char aTab03[]; // idb
extern char aTab03text[]; // idb
extern char aColumnbar01n_1[]; // idb
extern char aColumnbar01c_1[]; // idb
extern char aColumnbar01o_1[]; // idb
extern char aColumn0D[]; // idb
extern char aSubtext01_4[]; // idb
extern char aSlidebar_sl_20[]; // idb
extern char aSlidebar_dn_37[]; // idb
extern char aSlidebar_up_37[]; // idb
extern char aSlidebar_14[]; // idb
extern char aTitle01nor_7[]; // idb
extern char aTitle01click_6[]; // idb
extern char aTitle01over_8[]; // idb
extern char aTitle02nor_7[]; // idb
extern char aTitle02click_6[]; // idb
extern char aTitle02over_8[]; // idb
extern char aTitle03nor_7[]; // idb
extern char aTitle03click_6[]; // idb
extern char aTitle03over_8[]; // idb
extern char aTitle04nor_7[]; // idb
extern char aTitle04click_6[]; // idb
extern char aTitle04over_8[]; // idb
extern char aTitle05nor_4[]; // idb
extern char aTitle05click_3[]; // idb
extern char aTitle05over_5[]; // idb
extern char aTitle06nor_3[]; // idb
extern char aTitle06click_2[]; // idb
extern char aTitle06over_4[]; // idb
extern char aTitle07nor_0[]; // idb
extern char aTitle07click_0[]; // idb
extern char aTitle07over_0[]; // idb
extern char aMinnor[]; // idb
extern char aMinclick[]; // idb
extern char aMinover[]; // idb
extern char asc_9B8C44[12]; // weak
extern char asc_9B8C50[]; // idb
extern char aHelplinkcli_65[]; // idb
extern char aHelplinkove_65[]; // idb
extern char aGuildname01_1[]; // idb
extern char aScore01_1[]; // idb
extern char aGuildname02_1[]; // idb
extern char aScore02_1[]; // idb
extern char asc_9B8CA4[]; // idb
extern char asc_9B8CA8[]; // idb
extern char asc_9B8CAC[]; // idb
extern char asc_9B8CB0[]; // idb
extern char asc_9B8CB4[]; // idb
extern char aGuildtbattlest[]; // idb
extern char aGameGuildtbatt[]; // idb
extern char asc_9B8CEC[]; // idb
extern char aGtstatusminiwi[]; // idb
extern char asc_9B8D04[6]; // weak
extern char asc_9B8D0C[]; // idb
extern char aWintitle_76[]; // idb
extern char asc_9B8D20[]; // idb
extern char aPanel02_69[]; // idb
extern char aText01_34[]; // idb
extern char aText02_17[]; // idb
extern char aText03_6[]; // idb
extern char aGuildname01_0[]; // idb
extern char aGuildname02_0[]; // idb
extern char aScore01_0[]; // idb
extern char aScore02_0[]; // idb
extern char aFlag01[]; // idb
extern char aFlag02[]; // idb
extern char aMaxnor[]; // idb
extern char aMaxclick[]; // idb
extern char aMaxover[]; // idb
extern char asc_9B8D9C[12]; // weak
extern char asc_9B8DA8[]; // idb
extern char aHelplinkcli_64[]; // idb
extern char aHelplinkove_64[]; // idb
extern char asc_9B8DD4[]; // idb
extern char asc_9B8DD8[]; // idb
extern char asc_9B8DDC[]; // idb
extern char asc_9B8DE0[]; // idb
extern char asc_9B8DE4[]; // idb
extern char asc_9B8DE8[]; // idb
extern char asc_9B8DEC[]; // idb
extern char asc_9B8DF0[]; // idb
extern char aGuildtbattle_0[]; // idb
extern int (__stdcall *GTStatusMiniWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTStatusMiniWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GTStatusWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTStatusWin::_vftable_)(void *p, char); // weak
extern char aGameGuildtdice[]; // idb
extern _UNKNOWN unk_9B92A3; // weak
extern char asc_9B92A4[]; // idb
extern _UNKNOWN unk_9B92AA; // weak
extern char aGttdicewin[]; // idb
extern char asc_9B92B8[6]; // weak
extern char asc_9B92C0[]; // idb
extern char asc_9B92C8[]; // idb
extern char aPanel03_22[]; // idb
extern char aPanel02_71[]; // idb
extern char aPanel05_3[]; // idb
extern char aText01_35[]; // idb
extern char aText02_18[]; // idb
extern char aDice0D[]; // idb
extern char aDice0D_0[]; // idb
extern char aDiceD[]; // idb
extern char aBtnnor_3[]; // idb
extern char aBtnclick_4[]; // idb
extern char aBtnover_4[]; // idb
extern char asc_9B932C[]; // idb
extern int (__stdcall *GTTDiceWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTTDiceWin::_vftable_)(void *p, char); // weak
extern char aGameGuildski_0[]; // idb
extern char asc_9B9588[]; // idb
extern _UNKNOWN unk_9B958E; // weak
extern char aGttskillwin[]; // idb
extern char asc_9B959C[6]; // weak
extern char asc_9B95A4[]; // idb
extern char asc_9B95AC[]; // idb
extern char aPanel02_72[]; // idb
extern char aIconslot_34[]; // idb
extern char aWintitle_78[]; // idb
extern char aTab01_off_3[]; // idb
extern char aTab01_on_4[]; // idb
extern char aTab02_off_3[]; // idb
extern char aTab02_on_4[]; // idb
extern char aText01_36[]; // idb
extern char aDeathcount10[]; // idb
extern char a0_21[2]; // weak
extern char aClsnor_74[]; // idb
extern char aClsclick_74[]; // idb
extern char aClsover_74[]; // idb
extern char asc_9B963C[12]; // weak
extern char asc_9B9648[]; // idb
extern char aHelplinkcli_66[]; // idb
extern char aHelplinkove_66[]; // idb
extern char aPrepagenor_12[]; // idb
extern char aPrepageclic_11[]; // idb
extern char aPrepageover_12[]; // idb
extern char aNextpagenor_12[]; // idb
extern char aNextpagecli_12[]; // idb
extern char aNextpageove_12[]; // idb
extern char aDeathcount0D[]; // idb
extern char a0_22[2]; // weak
extern char aIconslot00D[]; // idb
extern char asc_9B96EC[]; // idb
extern char asc_9B96F0[]; // idb
extern char aGuildskill[]; // idb
extern char aGameGuildskill[]; // idb
extern char asc_9B9718[]; // idb
extern char aGttminiskillwi[]; // idb
extern char aIconslot_33[]; // idb
extern char aDeathcount01[]; // idb
extern char a0_20[2]; // weak
extern char asc_9B9750[]; // idb
extern int (__stdcall *GTTSkillWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTTSkillWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GTTMiniSkillWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTTMiniSkillWin::_vftable_)(void *p, char); // weak
extern char aGameGuildmen_2[]; // idb
extern _UNKNOWN unk_9B9BE7; // weak
extern char asc_9B9BE8[]; // idb
extern _UNKNOWN unk_9B9BEE; // weak
extern _UNKNOWN unk_9B9BEF; // weak
extern char aGuildtournam_5[]; // idb
extern _UNKNOWN unk_9B9C07; // weak
extern char asc_9B9C08[6]; // weak
extern char asc_9B9C10[]; // idb
extern char asc_9B9C18[]; // idb
extern char aPanel02_73[]; // idb
extern char aClsnor_75[]; // idb
extern char aClsclick_75[]; // idb
extern char aClsover_75[]; // idb
extern char asc_9B9C44[12]; // weak
extern char asc_9B9C50[]; // idb
extern char aHelplinkcli_67[]; // idb
extern char aHelplinkove_67[]; // idb
extern char aWintitle_79[]; // idb
extern char aBtn01nor_15[]; // idb
extern char aBtn01click_17[]; // idb
extern char aBtn01over_17[]; // idb
extern char aBtn02nor_11[]; // idb
extern char aBtn02click_10[]; // idb
extern char aBtn02over_9[]; // idb
extern char aBtn03nor_6[]; // idb
extern char aBtn03click_5[]; // idb
extern char aBtn03over_6[]; // idb
extern char aBtn04nor_3[]; // idb
extern char aBtn04click_3[]; // idb
extern char aBtn04over_3[]; // idb
extern char aI64d_51[]; // idb
extern char byte_9B9D20; // weak
extern char aI64d_52[]; // idb
extern char byte_9B9D2C; // weak
extern char aI64d_53[]; // idb
extern char byte_9B9D38; // weak
extern char aI64d_54[]; // idb
extern char byte_9B9D44; // weak
extern char aGuildmenu_3[]; // idb
extern char asc_9B9D5C[]; // idb
extern int dword_9B9D60; // weak
extern int dword_9B9D64; // weak
extern int dword_9B9D68; // weak
extern int dword_9B9D6C; // weak
extern char byte_9B9D72; // weak
extern char asc_9B9D74[2]; // idb
extern int dword_9B9D78; // weak
extern int dword_9B9D7C; // weak
extern int dword_9B9D80; // weak
extern int dword_9B9D84; // weak
extern char byte_9B9D8A; // weak
extern char aGameGuildlis_0[]; // idb
extern char asc_9B9DA0[]; // idb
extern char aGuildlistwin_0[]; // idb
extern char asc_9B9DB8[6]; // weak
extern char asc_9B9DC0[]; // idb
extern char aClsnor_76[]; // idb
extern char aClsclick_76[]; // idb
extern char aClsover_76[]; // idb
extern char asc_9B9DE4[12]; // weak
extern char asc_9B9DF0[]; // idb
extern char aHelplinkcli_68[]; // idb
extern char aHelplinkove_68[]; // idb
extern char asc_9B9E1C[]; // idb
extern char aWintitle_80[]; // idb
extern char aIconslot_35[]; // idb
extern char aColumnbarno_19[]; // idb
extern char aColumnbarcl_16[]; // idb
extern char aColumnbarov_16[]; // idb
extern char aColumn01_11[]; // idb
extern char aColumn02_8[]; // idb
extern char aColumn03_8[]; // idb
extern char aColumn04_5[]; // idb
extern char aColumn05_5[]; // idb
extern char aColumn06_4[]; // idb
extern char aSubtext01_5[]; // idb
extern char aSlidebar_sl_21[]; // idb
extern char aSlidebar_dn_38[]; // idb
extern char aSlidebar_up_38[]; // idb
extern char aSlidebar_15[]; // idb
extern char aTitle01nor_8[]; // idb
extern char aTitle01click_7[]; // idb
extern char aTitle01over_9[]; // idb
extern char aTitle02nor_8[]; // idb
extern char aTitle02click_7[]; // idb
extern char aTitle02over_9[]; // idb
extern char aTitle03nor_8[]; // idb
extern char aTitle03click_7[]; // idb
extern char aTitle03over_9[]; // idb
extern char aTitle04nor_8[]; // idb
extern char aTitle04click_7[]; // idb
extern char aTitle04over_9[]; // idb
extern char aTitle05nor_5[]; // idb
extern char aTitle05click_4[]; // idb
extern char aTitle05over_6[]; // idb
extern char aTitle06nor_4[]; // idb
extern char aTitle06click_3[]; // idb
extern char aTitle06over_5[]; // idb
extern char aCount_total_0[]; // idb
extern char aSearchchoice_0[]; // idb
extern char aSearchchoice_1[]; // idb
extern char aSearchchoice_2[]; // idb
extern char aSearch_input_1[]; // idb
extern char aSearchnor_0[]; // idb
extern char aSearchclick_0[]; // idb
extern char aSearchover_0[]; // idb
extern char aBtn01nor_16[]; // idb
extern char aBtn01click_18[]; // idb
extern char aBtn01over_18[]; // idb
extern char aGuildlist_1[]; // idb
extern int (__stdcall *GuildTournamentBaseWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildTournamentBaseWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GTRequestListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTRequestListWin::_vftable_)(void *p, char); // weak
extern int (*off_9BA3C8)(); // weak
extern int (__stdcall *off_9BA3D4)(int kRect); // weak
extern int (__stdcall *off_9BA3DC)(int iScreenX, int iScreenY); // weak
extern char aGameGuildtorna[]; // idb
extern char asc_9BA534[]; // idb
extern char aGuildtournam_6[]; // idb
extern _UNKNOWN unk_9BA557; // weak
extern char asc_9BA558[6]; // weak
extern _UNKNOWN unk_9BA55E; // weak
extern _UNKNOWN unk_9BA55F; // weak
extern char asc_9BA560[]; // idb
extern _UNKNOWN unk_9BA566; // weak
extern _UNKNOWN unk_9BA567; // weak
extern char aPanel02_74[]; // idb
extern char aClsnor_77[]; // idb
extern _UNKNOWN unk_9BA577; // weak
extern char aClsclick_77[]; // idb
extern _UNKNOWN unk_9BA581; // weak
extern _UNKNOWN unk_9BA582; // weak
extern _UNKNOWN unk_9BA583; // weak
extern char aClsover_77[]; // idb
extern char aText01_37[]; // idb
extern _UNKNOWN unk_9BA593; // weak
extern char aText02_19[]; // idb
extern _UNKNOWN unk_9BA59B; // weak
extern char aText03_7[]; // idb
extern _UNKNOWN unk_9BA5A3; // weak
extern char aStep1_0Dnor[]; // idb
extern _UNKNOWN unk_9BA5B1; // weak
extern _UNKNOWN unk_9BA5B2; // weak
extern _UNKNOWN unk_9BA5B3; // weak
extern char aStep1_0Dclick[]; // idb
extern _UNKNOWN unk_9BA5C3; // weak
extern int iTop[]; // idb
extern _UNKNOWN unk_9BA5D2; // weak
extern _UNKNOWN unk_9BA5D3; // weak
extern char aStep1_Dnor[]; // idb
extern char aStep1_Dclick[]; // idb
extern _UNKNOWN unk_9BA5EE; // weak
extern _UNKNOWN unk_9BA5EF; // weak
extern char aStep1_Dover[]; // idb
extern _UNKNOWN unk_9BA5FD; // weak
extern _UNKNOWN unk_9BA5FE; // weak
extern _UNKNOWN unk_9BA5FF; // weak
extern char aStep2_0Dnor[]; // idb
extern _UNKNOWN unk_9BA60D; // weak
extern _UNKNOWN unk_9BA60E; // weak
extern _UNKNOWN unk_9BA60F; // weak
extern char aStep2_0Dclick[]; // idb
extern char aStep2_0Dover[]; // idb
extern char aStep3_0Dnor[]; // idb
extern char aStep3_0Dclick[]; // idb
extern char aStep3_0Dover[]; // idb
extern char aStep4_0Dnor[]; // idb
extern char aStep4_0Dclick[]; // idb
extern char aStep4_0Dover[]; // idb
extern char aStep5_01nor[]; // idb
extern char aStep5_01click[]; // idb
extern char aStep5_01over[]; // idb
extern char aPanel03_23[]; // idb
extern char aTypeD[]; // idb
extern char aTypeD_0[]; // idb
extern int (__stdcall *GuildTournamentScheduleWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildTournamentScheduleWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *off_9BA7B0)(int iXPos, int iYPos); // weak
extern int (*off_9BA7BC[4])(); // weak
extern int (*off_9BA7C4[2])(); // weak
extern char aGameGuildtstor[]; // idb
extern _UNKNOWN unk_9BA931; // weak
extern _UNKNOWN unk_9BA932; // weak
extern _UNKNOWN unk_9BA933; // weak
extern char asc_9BA934[]; // idb
extern _UNKNOWN unk_9BA93A; // weak
extern char byte_9BA93B; // idb
extern char aGuildtournam_7[]; // idb
extern char aClsnor_78[]; // idb
extern char aClsclick_78[]; // idb
extern char aClsover_78[]; // idb
extern char asc_9BA974[12]; // weak
extern char asc_9BA980[]; // idb
extern char aHelplinkcli_69[]; // idb
extern char aHelplinkove_69[]; // idb
extern char asc_9BA9AC[]; // idb
extern char aPanel02_75[]; // idb
extern char aWintitle_81[]; // idb
extern char aIconslot_36[]; // idb
extern char aIconslot03d_8[]; // idb
extern char aTab01_off_4[]; // idb
extern char aTab01_dis_0[]; // idb
extern char aTab01_on_5[]; // idb
extern char aNum01_3[]; // idb
extern char aDrawnor_0[]; // idb
extern char aDrawclick_0[]; // idb
extern char aDrawover_0[]; // idb
extern char aGeminput_4[]; // idb
extern char aGembtn_5[]; // idb
extern char aGembtn_6[]; // idb
extern char aGembtn_7[]; // idb
extern char aGoldinput_4[]; // idb
extern char aGoldbtn_5[]; // idb
extern char aGoldbtn_6[]; // idb
extern char aGoldbtn_7[]; // idb
extern char aSilverinput_4[]; // idb
extern char aSilverbtn_6[]; // idb
extern char aSilverbtn_7[]; // idb
extern char aSilverbtn_8[]; // idb
extern char aCopperinput_4[]; // idb
extern char aCopperbtn_5[]; // idb
extern char aCopperbtn_6[]; // idb
extern char aCopperbtn_7[]; // idb
extern char aText01_38[]; // idb
extern char aI64d_55[]; // idb
extern char aI64d_56[]; // idb
extern char aI64d_57[]; // idb
extern char aI64d_58[]; // idb
extern char aGuildtstore[]; // idb
extern int (__stdcall *GTStorageInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GTStorageInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *off_9BAB98[2])(int kCuller); // weak
extern int (__stdcall *off_9BABA4[2])(int result, int pkChild); // weak
extern int (__thiscall *off_9BABAC)(NiNode *pkParent, int result, int i, int pkChild); // weak
extern int (__stdcall *GuildTournamentStorageWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildTournamentStorageWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *off_9BAF80)(int pkTexture); // weak
extern int (*off_9BAF8C)(); // weak
extern int (__thiscall *off_9BAF94)(NiAVObject *this, int uiHeight); // weak
extern char aW_29[2]; // idb
extern int (__stdcall *ChatBoard::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChatBoard::_vftable_)(void *p, char); // weak
extern char aFrom[6]; // weak
extern _UNKNOWN unk_9BB1D2; // weak
extern const char byte_9BB1D3; // idb
extern char aTo[4]; // weak
extern char aItemlinktablim[]; // idb
extern _UNKNOWN unk_9BB1E9; // weak
extern const char byte_9BB1EA; // idb
extern _UNKNOWN unk_9BB1EB; // weak
extern char byte_9BB1EC[2]; // idb
extern _UNKNOWN unk_9BB1EE; // weak
extern char byte_9BB1F0[4]; // idb
extern char aW_23[]; // idb
extern char aColor_12[]; // idb
extern char asc_9BB200[]; // idb
extern char aSS_75[5]; // weak
extern char aSS_74[]; // idb
extern char control[]; // idb
extern char asc_9BB218[]; // idb
extern char aPfindS[]; // idb
extern char aColor_7[]; // idb
extern char aColorS_0[]; // idb
extern char aColor_9[]; // idb
extern char aColorS_1[]; // idb
extern char asc_9BB254[]; // idb
extern char aColor_8[]; // idb
extern char aColor_10[]; // idb
extern char aColorS_2[]; // idb
extern char aColor_11[]; // idb
extern char asc_9BB27C[]; // idb
extern char asc_9BB280[]; // idb
extern char asc_9BB284[]; // idb
extern int (__stdcall *ChatBoardFlex::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChatBoardFlex::_vftable_)(void *p, char); // weak
extern int (__stdcall *off_9BB368)(int kRect); // weak
extern int (*off_9BB374[2])(); // weak
extern int (__thiscall *off_9BB37C)(PgWin *this, int uiPos); // weak
extern char aGameChatting_n[]; // idb
extern _UNKNOWN unk_9BB48A; // weak
extern char byte_9BB48B; // idb
extern char asc_9BB48C[]; // idb
extern char aChatdisplaywin[]; // idb
extern char aChabox_0[]; // idb
extern char asc_9BB4AC[]; // idb
extern char aChatcommandnor[]; // idb
extern char aChatcommandove[]; // idb
extern char aChatcommandcli[]; // idb
extern char aChatcommandpan[]; // idb
extern char aChatcommandp_0[]; // idb
extern char aChat_cmd_nam_0[]; // idb
extern char aChat_cmd_nam_1[]; // idb
extern char aChat_cmd_nam_2[]; // idb
extern char aW_13[3]; // weak
extern char aWSS[]; // idb
extern char asc_9BB56C[3]; // weak
extern char aSS_76[]; // idb
extern char aP_2[3]; // weak
extern char aPS[]; // idb
extern char aG_1[3]; // weak
extern char aGS[]; // idb
extern char asc_9BB590[]; // idb
extern char aSS_77[]; // idb
extern char aR_7[3]; // weak
extern char aRINI[]; // idb
extern char aUnlocknor_0[]; // idb
extern char aLocknor_0[]; // idb
extern char aFillternor_0[]; // idb
extern char aFillterover_0[]; // idb
extern char aFillterclick_0[]; // idb
extern char aEmoticon[]; // idb
extern char aPreupnor_0[]; // idb
extern char aPreupover_0[]; // idb
extern char aPreupclick_0[]; // idb
extern char aNextdownnor_0[]; // idb
extern char aNextdownover_0[]; // idb
extern char aNextdownclic_0[]; // idb
extern char aDownnor_0[]; // idb
extern char aDownover_0[]; // idb
extern char aDownclick_0[]; // idb
extern char aChamsgview[]; // idb
extern char aChak[]; // idb
extern char aChae[]; // idb
extern char aW_14[]; // idb
extern char asc_9BB68C[]; // idb
extern char aP_3[]; // idb
extern char aG_2[]; // idb
extern char asc_9BB698[]; // idb
extern char aR_8[]; // idb
extern char aP_9[4]; // weak
extern char aG_9[4]; // weak
extern char asc_9BB6AC[3]; // idb
extern char asc_9BB6B0[3]; // idb
extern char asc_9BB6B4[3]; // idb
extern char asc_9BB6B8[3]; // idb
extern char asc_9BB6BC[3]; // idb
extern char asc_9BB6C0[3]; // idb
extern char asc_9BB6C4[3]; // idb
extern char asc_9BB6C8[3]; // idb
extern char asc_9BB6CC[3]; // idb
extern char asc_9BB6D0[3]; // idb
extern char asc_9BB6D4[3]; // idb
extern char asc_9BB6D8[3]; // idb
extern char asc_9BB6DC[3]; // idb
extern char asc_9BB6E0[3]; // idb
extern char asc_9BB6E4[3]; // idb
extern char asc_9BB6E8[4]; // idb
extern int (__stdcall *ChatDisplayWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChatDisplayWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *off_9BB750)(int kMat, int kTrn, char bOnLeft); // weak
extern int (__stdcall *off_9BB75C)(float fTime, int bUpdateControllers); // weak
extern int (__thiscall *off_9BB764)(NiAVObject *this, float fTime); // weak
extern char aGameChatting_0[]; // idb
extern _UNKNOWN unk_9BB94A; // weak
extern char byte_9BB94B; // idb
extern char aPanel[]; // idb
extern char byte_9BB952; // idb
extern char byte_9BB953; // idb
extern char aChatdisplayw_0[]; // idb
extern char aChabox_1[]; // idb
extern char aFillternor_1[]; // idb
extern char aFillterover_1[]; // idb
extern char aFillterclick_1[]; // idb
extern char str; // idb
extern char byte_9BB993; // idb
extern char aChatblocknor[]; // idb
extern char byte_9BB9A1; // idb
extern char byte_9BB9A2; // idb
extern char byte_9BB9A3; // idb
extern char aChatblockclick[]; // idb
extern _UNKNOWN unk_9BB9B3; // weak
extern char aChatblockover[]; // idb
extern char aSpamblocknor[]; // idb
extern char aSpamblockover[]; // idb
extern char aSpamblockclick[]; // idb
extern char aSpamblockpanel[]; // idb
extern char aSpammovingpoin[]; // idb
extern char aSpamblockhigh[]; // idb
extern char aSpamblocklow[]; // idb
extern char aSpamblockslide[]; // idb
extern char a0_23[]; // idb
extern char aSpamfiltering[]; // idb
extern char aSpamonoffnor[]; // idb
extern char aSpamonoffclick[]; // idb
extern char aSpamonoff[]; // idb
extern char aSpamviewnor[]; // idb
extern char aSpamviewclick[]; // idb
extern char aSpamview[]; // idb
extern char aTab02d[]; // idb
extern char aChatcommandn_0[]; // idb
extern char aChatcommando_0[]; // idb
extern char aChatcommandc_0[]; // idb
extern char aChatcommandp_1[]; // idb
extern char aChatcommandp_2[]; // idb
extern char aChat_cmd_nam_3[]; // idb
extern char aChat_cmd_name[14]; // idb
extern char a02d_click[10]; // weak
extern char aChat_cmd_name0[]; // idb
extern char aW_15[3]; // weak
extern char aWSS_0[]; // idb
extern char asc_9BBB70[3]; // weak
extern char aSS_78[]; // idb
extern char aP_4[3]; // weak
extern char aPS_0[]; // idb
extern char aG_3[3]; // weak
extern char aGS_0[]; // idb
extern char asc_9BBB94[]; // idb
extern char aSS_79[]; // idb
extern char aR_9[3]; // weak
extern char aRS[]; // idb
extern char aA_11[3]; // weak
extern char aAS[]; // idb
extern char asc_9BBBBC[3]; // weak
extern char aFS[]; // idb
extern char asc_9BBBC8[]; // idb
extern char aSS_80[]; // idb
extern char aUnlocknor_1[]; // idb
extern char aLocknor_1[]; // idb
extern char aPreupnor_1[]; // idb
extern char aPreupover_1[]; // idb
extern char aPreupclick_1[]; // idb
extern char aNextdownnor_1[]; // idb
extern char aNextdownover_1[]; // idb
extern char aNextdownclic_1[]; // idb
extern char aDownnor_1[]; // idb
extern char aDownover_1[]; // idb
extern char aDownclick_1[]; // idb
extern char aCharnameedit[]; // idb
extern char aChamsgview_0[]; // idb
extern char aDownnor01[]; // idb
extern char aDownover01[]; // idb
extern char aDownclick01[]; // idb
extern char aChak_0[]; // idb
extern char aChae_0[]; // idb
extern char aW_16[]; // idb
extern char asc_9BBCB0[]; // idb
extern char aP_5[]; // idb
extern char aG_4[]; // idb
extern char asc_9BBCBC[]; // idb
extern char aR_10[]; // idb
extern char aA_12[]; // idb
extern char asc_9BBCCC[5]; // weak
extern char asc_9BBCD4[]; // idb
extern char aColor_14[]; // idb
extern char aP_6[4]; // weak
extern char aG_5[4]; // weak
extern char aA_13[4]; // weak
extern char aSS_81[]; // idb
extern char aW_17[4]; // weak
extern char aSS_82[]; // idb
extern char aW_18[4]; // weak
extern char pcDefaultCmd[]; // idb
extern char asc_9BBD08[]; // idb
extern char asc_9BBD0C[]; // idb
extern char asc_9BBD10[]; // idb
extern char asc_9BBD14[]; // idb
extern char asc_9BBD18[]; // idb
extern char asc_9BBD1C[]; // idb
extern char asc_9BBD20[]; // idb
extern char asc_9BBD24[]; // idb
extern char asc_9BBD28[]; // idb
extern char asc_9BBD2C[]; // idb
extern char asc_9BBD30[]; // idb
extern char asc_9BBD34[]; // idb
extern char asc_9BBD38[]; // idb
extern char asc_9BBD3C[]; // idb
extern char asc_9BBD40[3]; // idb
extern char asc_9BBD44[3]; // idb
extern char asc_9BBD48[4]; // idb
extern char asc_9BBD4C[3]; // idb
extern char aColor_13[]; // idb
extern char aColorS_3[11]; // weak
extern char aColorS_4[11]; // weak
extern char aColorS_5[11]; // weak
extern char aColorS_6[11]; // weak
extern char aColorS_7[11]; // weak
extern char aColorS_8[11]; // weak
extern char aColorS_9[11]; // weak
extern char aColorS_10[]; // idb
extern char aColorS_11[]; // idb
extern __int16 word_9BBE14; // weak
extern char asc_9BBE18[2]; // idb
extern char asc_9BBE1C[2]; // idb
extern int (__stdcall *ChatDisplayWin2::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ChatDisplayWin2::_vftable_)(void *p, char); // weak
extern char asc_9BC06C[3]; // idb
extern char aC_13[3]; // idb
extern char aGameNpckdquest[]; // idb
extern char asc_9BC088[8]; // weak
extern char asc_9BC090[]; // idb
extern _UNKNOWN unk_9BC096; // weak
extern char byte_9BC097; // idb
extern char aKingdomquest_1[]; // idb
extern char asc_9BC0A8[6]; // weak
extern char byte_9BC0AE; // idb
extern char byte_9BC0AF; // idb
extern char asc_9BC0B0[]; // idb
extern char byte_9BC0B6; // idb
extern _UNKNOWN unk_9BC0B7; // weak
extern char aWintitle_82[]; // idb
extern _UNKNOWN unk_9BC0C1; // weak
extern char asc_9BC0C4[]; // idb
extern char aIconslot_37[]; // idb
extern char aColumnbarno_20[]; // idb
extern char aColumnbarcl_17[]; // idb
extern char aColumnbarov_17[]; // idb
extern char aColumn01_12[]; // idb
extern char aColumn02_9[]; // idb
extern char aColumn03_9[]; // idb
extern char aColumn04_6[]; // idb
extern char aSubtext01_6[]; // idb
extern char aColumnbarno_21[]; // idb
extern char aColumn05_6[]; // idb
extern char aColumn06_5[]; // idb
extern char aSubtext02_2[]; // idb
extern char aSlidebar_sl_22[]; // idb
extern char aSlidebar_dn_39[]; // idb
extern char aSlidebar_up_39[]; // idb
extern char aSlidebar_16[]; // idb
extern char aSlidebar_dn_40[20]; // weak
extern char aSlidebar_dn_41[]; // idb
extern char aSlidebar_dn_42[22]; // weak
extern char aSlidebar_dn_43[]; // idb
extern char aSlidebar_dn_44[21]; // weak
extern char aSlidebar_dn_45[]; // idb
extern char aSlidebar_up_40[20]; // weak
extern char aSlidebar_up_41[]; // idb
extern char aSlidebar_up_42[22]; // weak
extern char aSlidebar_up_43[]; // idb
extern char aSlidebar_up_44[21]; // weak
extern char aSlidebar_up_45[]; // idb
extern char aSlidebar_dn_46[]; // idb
extern char aSlidebar_up_46[]; // idb
extern char aSlidebar01_3[]; // idb
extern char aTitle01nor_9[]; // idb
extern char aTitle01click_8[]; // idb
extern char aTitle01over_10[]; // idb
extern char aTitle02nor_9[]; // idb
extern char aTitle02click_8[]; // idb
extern char aTitle02over_10[]; // idb
extern char aTitle03nor_9[]; // idb
extern char aTitle03click_8[]; // idb
extern char aTitle03over_10[]; // idb
extern char aTitle04nor_9[]; // idb
extern char aTitle04click_8[]; // idb
extern char aTitle04over_10[]; // idb
extern char aOknor_17[]; // idb
extern char aOkclick_15[]; // idb
extern char aOkover_15[]; // idb
extern char aOkdisable_1[]; // idb
extern char aTab01_0[]; // idb
extern char aTab02_0[]; // idb
extern char aCancelbtnnor_1[]; // idb
extern char aOkclick_16[]; // idb
extern char aOkover_16[]; // idb
extern char aClsnor_79[]; // idb
extern char aClsclick_79[]; // idb
extern char aClsover_79[]; // idb
extern char asc_9BC410[12]; // weak
extern char asc_9BC41C[]; // idb
extern char aHelplinkcli_70[]; // idb
extern char aHelplinkove_70[]; // idb
extern char aPlayerlistbtnn[]; // idb
extern char aPlayerlistbtnc[]; // idb
extern char aPlayerlistbtno[]; // idb
extern char aTime_5[]; // idb
extern char a02d02d_2[]; // idb
extern char a02d02d_3[]; // idb
extern char aS02d02d[]; // idb
extern char a02d02d_4[]; // idb
extern char a02d02d_5[]; // idb
extern char aS02d02d_0[]; // idb
extern char asc_9BC4DC[]; // idb
extern char asc_9BC4E0[]; // idb
extern char asc_9BC4E8[]; // idb
extern char asc_9BC4EC[]; // idb
extern char aDKqdescNotFoun[]; // idb
extern char aNpckdquest[]; // idb
extern char aKqplayerlist_r[]; // idb
extern char asc_9BC530[]; // idb
extern char asc_9BC534[]; // idb
extern char asc_9BC53C[]; // idb
extern char asc_9BC540[]; // idb
extern char aDKqdescNotFo_0[]; // idb
extern char aGameNpckdque_0[]; // idb
extern char aPanel03_24[]; // idb
extern char aClsnor01[]; // idb
extern char aClsclick01[]; // idb
extern char aClsover01[]; // idb
extern char aBtnnor_4[]; // idb
extern char aBtnclick_5[]; // idb
extern char aBtnover_5[]; // idb
extern char aTitle02dnor[]; // idb
extern char aTitle02dclick[]; // idb
extern char aTitle02dover[]; // idb
extern char aColumnbarnor02[]; // idb
extern char aColumnbarcl_18[]; // idb
extern char aColumnbarov_18[]; // idb
extern char aColumn09_0[]; // idb
extern char aColumn07_1[]; // idb
extern char aColumn08_1[]; // idb
extern char aObject01_3[]; // idb
extern char aSlidebar_dn_47[20]; // weak
extern char aSlidebar_dn_48[]; // idb
extern char aSlidebar_dn_49[22]; // weak
extern char aSlidebar_dn_50[]; // idb
extern char aSlidebar_dn_51[21]; // weak
extern char aSlidebar_dn_52[]; // idb
extern char aSlidebar_up_47[20]; // weak
extern char aSlidebar_up_48[]; // idb
extern char aSlidebar_up_49[22]; // weak
extern char aSlidebar_up_50[]; // idb
extern char aSlidebar_up_51[21]; // weak
extern char aSlidebar_up_52[]; // idb
extern char aSlidebar_sl_23[]; // idb
extern char aSlidebar_dn_53[]; // idb
extern char aSlidebar_up_53[]; // idb
extern char aSlidebar02_0[]; // idb
extern char aJoinplayerlist[]; // idb
extern char asc_9BC7C0[]; // idb
extern char aKqplayerlist_0[]; // idb
extern char aGameNpckdque_1[]; // idb
extern char aPanel03_25[]; // idb
extern char aClsnor01_0[]; // idb
extern char aClsclick01_0[]; // idb
extern char aClsover01_0[]; // idb
extern char aRednor[]; // idb
extern char aRedclick[]; // idb
extern char aRedover[]; // idb
extern char aBluenor[]; // idb
extern char aBlueclick[]; // idb
extern char aBlueover[]; // idb
extern char aBtnnor_5[]; // idb
extern char aBtnclick_6[]; // idb
extern char aBtnover_6[]; // idb
extern char aRed_select[]; // idb
extern char aBlue_select[]; // idb
extern char aTitle02dnor_0[]; // idb
extern char aTitle02dclic_0[]; // idb
extern char aTitle02dover_0[]; // idb
extern char aColumnbarno_22[]; // idb
extern char aColumnbarcl_19[]; // idb
extern char aColumnbarov_19[]; // idb
extern char aColumn09_1[]; // idb
extern char aColumn07_2[]; // idb
extern char aColumn08_2[]; // idb
extern char aObject01_4[]; // idb
extern char aSlidebar_dn_54[20]; // weak
extern char aSlidebar_dn_55[]; // idb
extern char aSlidebar_dn_56[22]; // weak
extern char aSlidebar_dn_57[]; // idb
extern char aSlidebar_dn_58[21]; // weak
extern char aSlidebar_dn_59[]; // idb
extern char aSlidebar_up_54[20]; // weak
extern char aSlidebar_up_55[]; // idb
extern char aSlidebar_up_56[22]; // weak
extern char aSlidebar_up_57[]; // idb
extern char aSlidebar_up_58[21]; // weak
extern char aSlidebar_up_59[]; // idb
extern char aSlidebar_sl_24[]; // idb
extern char aSlidebar_dn_60[]; // idb
extern char aSlidebar_up_60[]; // idb
extern char aSlidebar02_1[]; // idb
extern char aColumnbarnor03[]; // idb
extern char aColumnbarcl_20[]; // idb
extern char aColumnbarov_20[]; // idb
extern char aColumn10_0[]; // idb
extern char aColumn11_0[]; // idb
extern char aColumn12[]; // idb
extern char aObject02_2[]; // idb
extern char aSlidebar_dn_61[20]; // weak
extern char aSlidebar_dn_62[]; // idb
extern char aSlidebar_dn_63[22]; // weak
extern char aSlidebar_dn_64[]; // idb
extern char aSlidebar_dn_65[21]; // weak
extern char aSlidebar_dn_66[]; // idb
extern char aSlidebar_up_61[20]; // weak
extern char aSlidebar_up_62[]; // idb
extern char aSlidebar_up_63[22]; // weak
extern char aSlidebar_up_64[]; // idb
extern char aSlidebar_up_65[21]; // weak
extern char aSlidebar_up_66[]; // idb
extern char aSlidebar_sl_25[]; // idb
extern char aSlidebar_dn_67[]; // idb
extern char aSlidebar_up_67[]; // idb
extern char aSlidebar03_0[]; // idb
extern char aJoinplayerli_0[]; // idb
extern char asc_9BCC64[]; // idb
extern char aKqplayerlist_1[]; // idb
extern int (__stdcall *KingdomQuestPlayerList::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KingdomQuestPlayerList::_vftable_)(void *p, char); // weak
extern int (__stdcall *KingdomQuestTeamList::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KingdomQuestTeamList::_vftable_)(void *p, char); // weak
extern int (__stdcall *KingdomQuestWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KingdomQuestWin::_vftable_)(void *p, char); // weak
extern char aGameQuesttim_1[]; // idb
extern char asc_9BD330[]; // idb
extern _UNKNOWN unk_9BD336; // weak
extern char aKquesttimewin[]; // idb
extern char aKillcount_off[]; // idb
extern char aKillcount_on[]; // idb
extern char aReward_1[]; // idb
extern char asc_9BD370[]; // idb
extern char asc_9BD374[]; // idb
extern char aTime_6[]; // idb
extern char a0000[6]; // weak
extern char aLife02d[]; // idb
extern char a02d02d_6[]; // idb
extern char aD_72[]; // idb
extern int (__stdcall *KQuestTimeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *KQuestTimeWin::_vftable_)(void *p, char); // weak
extern char aAction[]; // idb
extern _UNKNOWN unk_9BD5F3; // weak
extern char aType[5]; // weak
extern char aBtn[4]; // weak
extern char aScript[7]; // weak
extern char aText[]; // idb
extern char aGameDialogbtn_[]; // idb
extern char aBtnnor_6[]; // idb
extern char aBtnclick_7[]; // idb
extern char aBtnover_7[]; // idb
extern char aLine_0[]; // idb
extern char aAction_5[]; // idb
extern char aQuest_ack_0[]; // idb
extern char asc_9BD65C[]; // idb
extern __int16 word_9BD668; // weak
extern char aType_4[]; // idb
extern char aType_5[]; // idb
extern char aAction_8[]; // idb
extern char aQuest_ackD[]; // idb
extern char aAction_9[]; // idb
extern char aI_5[5]; // idb
extern __int16 word_9BD6BC; // weak
extern __int16 word_9BD6C0; // weak
extern char aGameDialogbt_0[]; // idb
extern char aBtnleft01[]; // idb
extern char aBtnright01[]; // idb
extern char aBtnmiddle01[]; // idb
extern char aBtnleft[]; // idb
extern char aBtnright_0[]; // idb
extern char aBtnmiddle_0[]; // idb
extern char aType_2[]; // idb
extern char aType_3[]; // idb
extern char aAction_6[]; // idb
extern char aAction_7[]; // idb
extern __int16 word_9BD73C; // weak
extern char aWeddingdreian[14]; // weak
extern char aMarryrequest[]; // idb
extern char aWeddingdreia_0[14]; // weak
extern char aDivorcerequest[]; // idb
extern char aClose_0[]; // idb
extern char aClose_1[]; // idb
extern char a__3[2]; // weak
extern char aClose_2[]; // idb
extern char aQuestlist_0[]; // idb
extern char aType_6[]; // idb
extern char aAction_10[]; // idb
extern char aClose_3[6]; // weak
extern char aQuestlist_1[10]; // weak
extern char aDivorcereque_0[15]; // weak
extern char aMarryrequest_0[13]; // weak
extern char aPetsetname_0[11]; // weak
extern char aPetsetnameca_0[17]; // weak
extern char aGameNpcface_ni[]; // idb
extern char aNpcface[]; // idb
extern char aSGameNpcface_3[]; // idb
extern char aSGameNpcface_4[]; // idb
extern char aSGameNpcface_1[]; // idb
extern char aSGameNpcface_2[]; // idb
extern char aSGameNpcfacecu[]; // idb
extern char aSGameNpcface_0[]; // idb
extern char aGameQuestlist_[]; // idb
extern char asc_9BD8E4[8]; // weak
extern char asc_9BD8EC[]; // idb
extern char aDlgquestlistwi[]; // idb
extern char asc_9BD904[6]; // weak
extern char asc_9BD90C[]; // idb
extern char aWintitle_83[]; // idb
extern char asc_9BD920[]; // idb
extern char aPanel02_76[]; // idb
extern char aIconslot_38[]; // idb
extern char aTitle01nor_10[]; // idb
extern char aClsnor_80[]; // idb
extern char aClsclick_80[]; // idb
extern char aClsover_80[]; // idb
extern char asc_9BD964[12]; // weak
extern char asc_9BD970[]; // idb
extern char aHelplinkcli_71[]; // idb
extern char aHelplinkove_71[]; // idb
extern char aColumnbarno_23[]; // idb
extern char aColumnbarcl_21[]; // idb
extern char aColumnbarcl_22[]; // idb
extern char aColumn01_13[]; // idb
extern char aSubtext01_7[]; // idb
extern char aSlidebar_sl_26[]; // idb
extern char aSlidebar_dn_68[20]; // weak
extern char aSlidebar_dn_69[]; // idb
extern char aSlidebar_dn_70[22]; // weak
extern char aSlidebar_dn_71[]; // idb
extern char aSlidebar_dn_72[21]; // weak
extern char aSlidebar_dn_73[]; // idb
extern char aSlidebar_up_68[20]; // weak
extern char aSlidebar_up_69[]; // idb
extern char aSlidebar_up_70[22]; // weak
extern char aSlidebar_up_71[]; // idb
extern char aSlidebar_up_72[21]; // weak
extern char aSlidebar_up_73[]; // idb
extern char aSlidebar_dn_74[]; // idb
extern char aSlidebar_up_74[]; // idb
extern char aSlidebar01_4[]; // idb
extern char aDSS[]; // idb
extern char aQuestlist[]; // idb
extern int (__stdcall *FlexDlgBtn::_vftable_)(int uiFlags); // weak
extern int (__thiscall *FlexDlgBtn::_vftable_)(void *p, char); // weak
extern int (__stdcall *TextBtn::_vftable_)(int uiFlags); // weak
extern int (__thiscall *TextBtn::_vftable_)(void *p, char); // weak
extern int (__stdcall *AutoSizingDialogWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AutoSizingDialogWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *SpeechBubbleDlgWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SpeechBubbleDlgWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *DlgQuestListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *DlgQuestListWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *NpcDialogWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NpcDialogWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<AutoSizingDialogWin::VirtualRect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *off_9BE8E4)(_DWORD); // weak
extern char aNpcquestwin_ni[]; // idb
extern char asc_9BE8FC[]; // idb
extern char aNpcquestwin_0[]; // idb
extern char aClosebutton[]; // idb
extern char aClosebuttoncli[]; // idb
extern char aPanel_0[]; // idb
extern char aLine_1[]; // idb
extern char aTitle1[]; // idb
extern char aTitle2[]; // idb
extern char aTab1[]; // idb
extern char aTab1on[]; // idb
extern char aTab2[]; // idb
extern char aTab2on[]; // idb
extern char aButton1[]; // idb
extern char aButton1click[]; // idb
extern char asc_9BE988[12]; // weak
extern char asc_9BE994[]; // idb
extern char aHelplinkcli_72[]; // idb
extern char aHelplinkove_72[]; // idb
extern char aNpcquestwin[]; // idb
extern int (__stdcall *NpcQuestWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *NpcQuestWin::_vftable_)(void *p, char); // weak
extern char aGameQuestfinis[]; // idb
extern char aPlane01_22[]; // idb
extern char aQuestfinishwin[]; // idb
extern char aQuest02d[]; // idb
extern char aNpcfaceback[]; // idb
extern char aFace_mask_1[10]; // weak
extern char aFace_mask_2[]; // idb
extern char aFace_panel_nor[]; // idb
extern char aFace_panel_cli[]; // idb
extern char aFace_panel_ove[]; // idb
extern char aNpcfacenor[]; // idb
extern char aNpcfaceclick[]; // idb
extern char aNpcfaceover[]; // idb
extern char aPlane01_23[]; // idb
extern char aGameQuestfin_0[]; // idb
extern int (__stdcall *QuestFinishWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *QuestFinishWin::_vftable_)(void *p, char); // weak
extern char aGameNewquest_n[]; // idb
extern char byte_9BEF3E[2]; // idb
extern char aPlane04[]; // idb
extern char aQuestnewswin[]; // idb
extern char aPicking[]; // idb
extern char aGameNewquestef[]; // idb
extern int (__stdcall *QuestNewsWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *QuestNewsWin::_vftable_)(void *p, char); // weak
extern char aQuestpigeoneff[]; // idb
extern char aQuestpigeonEff[]; // idb
extern char aAe[]; // idb
extern int (__stdcall *QuestPigeonEffect::_vftable_[3])(int); // weak
extern int (__thiscall *QuestPigeonEffect::_vftable_)(void *p, char); // weak
extern char aGameQuestwin_q[]; // idb
extern char byte_9BF2C5; // idb
extern char byte_9BF2C6; // idb
extern char asc_9BF2C8[]; // idb
extern char aQueststartitem[]; // idb
extern char byte_9BF2E2; // idb
extern char byte_9BF2E3; // idb
extern char asc_9BF2E4[6]; // weak
extern char byte_9BF2EA; // idb
extern char byte_9BF2EB; // idb
extern char asc_9BF2EC[]; // idb
extern char byte_9BF2F2[2]; // idb
extern char asc_9BF2F4[]; // idb
extern char aWintitle_84[]; // idb
extern char aClsnor_81[]; // idb
extern char aClsclick_81[]; // idb
extern char aClsover_81[]; // idb
extern char asc_9BF324[12]; // weak
extern char asc_9BF330[]; // idb
extern char aHelplinkcli_73[]; // idb
extern char aHelplinkove_73[]; // idb
extern char aColumnbar01n_2[]; // idb
extern char aColumn04_7[]; // idb
extern char aSubtext02_3[]; // idb
extern char a__4[]; // idb
extern char a___2[]; // idb
extern char a____3[]; // idb
extern char aSlidebar_sl_27[]; // idb
extern char aSlidebar_dn_75[20]; // weak
extern char aSlidebar_dn_76[]; // idb
extern char aSlidebar_dn_77[22]; // weak
extern char aSlidebar_dn_78[]; // idb
extern char aSlidebar_dn_79[21]; // weak
extern char aSlidebar_dn_80[]; // idb
extern char aSlidebar_up_75[20]; // weak
extern char aSlidebar_up_76[]; // idb
extern char aSlidebar_up_77[22]; // weak
extern char aSlidebar_up_78[]; // idb
extern char aSlidebar_up_79[21]; // weak
extern char aSlidebar_up_80[]; // idb
extern char aSlidebar_dn_81[]; // idb
extern char aSlidebar_up_81[]; // idb
extern char aSlidebar01_5[]; // idb
extern char aGiveupnor[]; // idb
extern char aGiveupclick[]; // idb
extern char aGiveupover[]; // idb
extern char aEpicquestnor[]; // idb
extern char aEpicquestclick[]; // idb
extern char aEpicquestover[]; // idb
extern char asc_9BF540[]; // idb
extern char asc_9BF548[]; // idb
extern char aLevelD[]; // idb
extern char aSDD_9[9]; // weak
extern char aSDD_10[9]; // weak
extern char aSDD_11[9]; // weak
extern char aSDD_12[9]; // weak
extern char aSDD_13[]; // idb
extern char aSDD_14[]; // idb
extern char asc_9BF5A4[]; // idb
extern char asc_9BF5AC[]; // idb
extern char aSS_83[]; // idb
extern char asc_9BF5BC[]; // idb
extern char aQuestwin_quick[]; // idb
extern int (__stdcall *QuestStartItemWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *QuestStartItemWin::_vftable_)(void *p, char); // weak
extern char aGameQuestwin_n[]; // idb
extern char byte_9BF826; // idb
extern char byte_9BF827; // idb
extern char asc_9BF828[8]; // weak
extern char asc_9BF830[]; // idb
extern char byte_9BF836; // idb
extern char byte_9BF837; // idb
extern char aQuestwin_0[]; // idb
extern char asc_9BF844[6]; // weak
extern char byte_9BF84A; // idb
extern char byte_9BF84B; // idb
extern char asc_9BF84C[]; // idb
extern char byte_9BF852; // idb
extern char byte_9BF853; // idb
extern char aWintitle_85[]; // idb
extern char byte_9BF85D; // idb
extern char byte_9BF85E; // idb
extern char byte_9BF85F; // idb
extern char asc_9BF860[]; // idb
extern char aIconslot_39[]; // idb
extern char byte_9BF871; // idb
extern char byte_9BF872; // idb
extern char byte_9BF873; // idb
extern char aClsnor_82[]; // idb
extern char byte_9BF87B; // idb
extern char aClsclick_82[]; // idb
extern char aClsover_82[]; // idb
extern char asc_9BF890[12]; // weak
extern char asc_9BF89C[]; // idb
extern char aHelplinkcli_74[]; // idb
extern char byte_9BF8B6; // idb
extern char byte_9BF8B7; // idb
extern char aHelplinkove_74[]; // idb
extern char byte_9BF8C5; // idb
extern char byte_9BF8C6; // idb
extern char byte_9BF8C7; // idb
extern char aTab01_off_5[]; // idb
extern char aTab01_on_6[]; // idb
extern char aTab02_off_4[]; // idb
extern char aTab02_on_5[]; // idb
extern char aGiveupnor_0[]; // idb
extern char aGiveupclick_0[]; // idb
extern char aGiveupover_0[]; // idb
extern char aGiveupdisable[]; // idb
extern char aGiveupdisabl_0[]; // idb
extern char aTitle01nor_11[]; // idb
extern char aTitle01click_9[]; // idb
extern char aTitle01over_11[]; // idb
extern char aTitle02nor_10[]; // idb
extern char aTitle02click_9[]; // idb
extern char aTitle02over_11[]; // idb
extern char aTitle03nor_10[]; // idb
extern char aTitle03click_9[]; // idb
extern char aTitle03over_11[]; // idb
extern char aTitle04nor_10[]; // idb
extern char aColumnbarno_24[]; // idb
extern char aColumnbarcl_23[]; // idb
extern char aColumnbarov_21[]; // idb
extern char aColumn03_10[]; // idb
extern char aColumn04_8[]; // idb
extern char aColumn02_10[]; // idb
extern char aColumn01_14[]; // idb
extern char aSubtext01_8[]; // idb
extern char aColumnbar01n_3[]; // idb
extern char aColumn05_7[]; // idb
extern char aSubtext02_4[]; // idb
extern char a__5[]; // idb
extern char a___3[]; // idb
extern char a____6[]; // idb
extern char aSlidebar_sl_28[]; // idb
extern char aSlidebar_dn_82[]; // idb
extern char aSlidebar_up_82[]; // idb
extern char aSlidebar_17[]; // idb
extern char aSlidebar_dn_83[20]; // weak
extern char aSlidebar_dn_84[]; // idb
extern char aSlidebar_dn_85[22]; // weak
extern char aSlidebar_dn_86[]; // idb
extern char aSlidebar_dn_87[21]; // weak
extern char aSlidebar_dn_88[]; // idb
extern char aSlidebar_up_83[20]; // weak
extern char aSlidebar_up_84[]; // idb
extern char aSlidebar_up_85[22]; // weak
extern char aSlidebar_up_86[]; // idb
extern char aSlidebar_up_87[21]; // weak
extern char aSlidebar_up_88[]; // idb
extern char aSlidebar_dn_89[]; // idb
extern char aSlidebar_up_89[]; // idb
extern char aSlidebar01_6[]; // idb
extern char aAutorunnor[]; // idb
extern char aAutorunclick[]; // idb
extern char aAutorunover[]; // idb
extern char aAutorundisable[]; // idb
extern char aIconqstnor[]; // idb
extern char aIconqstepic[]; // idb
extern char aIconqstjob[]; // idb
extern char aIconqstevent[]; // idb
extern char aIconqstdaily[]; // idb
extern char aNewquest_text[]; // idb
extern char aNewquest_ready[]; // idb
extern char aIconqstindun[]; // idb
extern char aEpicquestnor_0[]; // idb
extern char aEpicquestcli_0[]; // idb
extern char aEpicquestove_0[]; // idb
extern char aEpicquestdisab[]; // idb
extern char aBtn01nor_17[]; // idb
extern char aBtn01over_19[]; // idb
extern char aBtn01click_19[]; // idb
extern char aNone_6[5]; // weak
extern char a____4[]; // idb
extern char asc_9BFD08[]; // idb
extern char asc_9BFD10[]; // idb
extern char asc_9BFD18[]; // idb
extern char asc_9BFD20[]; // idb
extern char aLevelD_0[]; // idb
extern char aSDD_15[9]; // weak
extern char aSDD_16[9]; // weak
extern char aSDD_17[9]; // weak
extern char aSDD_18[9]; // weak
extern char aSDD_19[]; // idb
extern char aSDD_20[]; // idb
extern char asc_9BFD7C[]; // idb
extern char asc_9BFD84[]; // idb
extern char aSS_84[]; // idb
extern char asc_9BFD94[]; // idb
extern char aQuestwin[]; // idb
extern char aGameEpicquestw[]; // idb
extern char asc_9BFDBC[8]; // weak
extern char asc_9BFDC4[]; // idb
extern char aEpicquestwin_0[]; // idb
extern char asc_9BFDDC[6]; // weak
extern char asc_9BFDE4[]; // idb
extern char aWintitle_86[]; // idb
extern char asc_9BFDF8[]; // idb
extern char aPanel02_77[]; // idb
extern char aIconslot_40[]; // idb
extern char aClsnor_83[]; // idb
extern char aClsclick_83[]; // idb
extern char aClsover_83[]; // idb
extern char asc_9BFE30[12]; // weak
extern char asc_9BFE3C[]; // idb
extern char aHelplinkcli_75[]; // idb
extern char aHelplinkove_75[]; // idb
extern char aTitle01nor_12[]; // idb
extern char aColumnbarno_25[]; // idb
extern char aColumnbarov_22[]; // idb
extern char aColumnbarcl_24[]; // idb
extern char aColumn03_11[]; // idb
extern char aColumn01_15[]; // idb
extern char aColumn02_11[]; // idb
extern char aSubtext01_9[]; // idb
extern char aColumnbar02n_0[]; // idb
extern char aColumn04_9[]; // idb
extern char aSubtext02_5[]; // idb
extern char aSlidebar_sl_29[]; // idb
extern char aSlidebar_dn_90[20]; // weak
extern char aSlidebar_dn_91[]; // idb
extern char aSlidebar_dn_92[22]; // weak
extern char aSlidebar_dn_93[]; // idb
extern char aSlidebar_dn_94[21]; // weak
extern char aSlidebar_dn_95[]; // idb
extern char aSlidebar_up_90[20]; // weak
extern char aSlidebar_up_91[]; // idb
extern char aSlidebar_up_92[22]; // weak
extern char aSlidebar_up_93[]; // idb
extern char aSlidebar_up_94[21]; // weak
extern char aSlidebar_up_95[]; // idb
extern char aSlidebar_dn_96[]; // idb
extern char aSlidebar_up_96[]; // idb
extern char aSlidebar01_7[]; // idb
extern char aSlidebar_dn_97[20]; // weak
extern char aSlidebar_dn_98[]; // idb
extern char asc_9C0080[22]; // weak
extern char asc_9C0098[]; // idb
extern char asc_9C00B0[21]; // weak
extern char asc_9C00C8[]; // idb
extern char aSlidebar_up_97[20]; // weak
extern char aSlidebar_up_98[]; // idb
extern char asc_9C0108[22]; // weak
extern char asc_9C0120[]; // idb
extern char asc_9C0138[21]; // weak
extern char asc_9C0150[]; // idb
extern char asc_9C0168[]; // idb
extern char asc_9C017C[]; // idb
extern char aSlidebar02_2[]; // idb
extern char aIconqstnor_0[]; // idb
extern char aIconqstepic_0[]; // idb
extern char aIconqstjob_0[]; // idb
extern char aIconqstevent_0[]; // idb
extern char aIconqstindun_0[]; // idb
extern char aBtnnor_7[]; // idb
extern char aBtnover_8[]; // idb
extern char aBtnclick_8[]; // idb
extern char aBtndisable[]; // idb
extern char aBtndisable_0[]; // idb
extern char aNone_7[]; // idb
extern char a____5[]; // idb
extern char asc_9C0220[]; // idb
extern char asc_9C0228[]; // idb
extern char asc_9C0230[]; // idb
extern char asc_9C0238[]; // idb
extern char aLevelD_1[]; // idb
extern char aSDD_21[9]; // weak
extern char aSDD_22[9]; // weak
extern char aSDD_23[9]; // weak
extern char aSDD_24[9]; // weak
extern char aSDD_25[]; // idb
extern char aSDD_26[]; // idb
extern char asc_9C0294[]; // idb
extern char asc_9C029C[]; // idb
extern char aSS_85[]; // idb
extern char asc_9C02AC[]; // idb
extern char aEpicquestwin[]; // idb
extern int (__stdcall *AutoRunBut::_vftable_)(int uiFlags); // weak
extern int (__thiscall *AutoRunBut::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<PgWinBut__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *EpicQuestWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EpicQuestWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CQuestWin2::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CQuestWin2::_vftable_)(void *p, char); // weak
extern char aGameMonstercar[]; // idb
extern char byte_9C09BA[2]; // idb
extern char asc_9C09BC[]; // idb
extern char asc_9C09C4[]; // idb
extern char aPanel02_78[]; // idb
extern char aPanel04_9[]; // idb
extern char aMonface[]; // idb
extern char aSubtext01_10[]; // idb
extern char aTab01_1[]; // idb
extern char aTab02_1[]; // idb
extern char aTab03_0[]; // idb
extern char aTab04[]; // idb
extern char aTab05[]; // idb
extern char aTab06[]; // idb
extern char aTab07[]; // idb
extern char aTab08[]; // idb
extern char aTab09[]; // idb
extern char aTab10[]; // idb
extern char aAtbtab01[]; // idb
extern char aAtbtab02[]; // idb
extern char aAtbtab03[]; // idb
extern char aAtbtab04[]; // idb
extern char aAtbtab05[]; // idb
extern char aAtbtab06[]; // idb
extern char aBtnclick02_18[]; // idb
extern char aBtnover02_18[]; // idb
extern char aBtnnor02_18[]; // idb
extern char aYouOut[]; // idb
extern char aBtnclick01_11[]; // idb
extern char aBtnover01_11[]; // idb
extern char aBtnnor01_11[]; // idb
extern char aMetamorphoisi[]; // idb
extern char aIconslot02d[]; // idb
extern char aPanel03_26[]; // idb
extern char aColumnbarno_26[]; // idb
extern char aColumnbarcl_25[]; // idb
extern char aColumnbarov_23[]; // idb
extern char aColumn_3[]; // idb
extern char aListbox_0[]; // idb
extern char aSlidebar_sl_30[]; // idb
extern char asc_9C0B58[]; // idb
extern char asc_9C0B68[]; // idb
extern char aSlidebar_18[]; // idb
extern char asc_9C0B84[4]; // idb
extern int (__stdcall *std::basic_iostream<char_std::char_traits<char>>::_vftable_)(char); // weak
extern int (__stdcall *std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_)(char); // weak
extern _UNKNOWN std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_; // weak
extern _UNKNOWN std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_; // weak
extern int (__stdcall *MonsterCardInventoryWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MonsterCardInventoryWin::_vftable_)(void *p, char); // weak
extern char aItemdropQueueD[]; // idb
extern char aItemdropQueu_0[]; // idb
extern char aItemdropQueu_1[]; // idb
extern char aLevelup[]; // idb
extern char aLevelup_0[]; // idb
extern int (__thiscall *NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_vftable_)(void *p, char); // weak
extern int (*ICharDeadEvent::_vftable_)(); // weak
extern int (*CharDeadEvent_LevelUp::_vftable_)(); // weak
extern int (*CharDeadEvent_DropItem::_vftable_)(); // weak
extern int (*CharDeadEvent_ExpGain::_vftable_)(); // weak
extern int (*CharDeadEvent_SomeoneLevelUp::_vftable_)(); // weak
extern int (*CharDeadEvent_InformWhoKilledMe::_vftable_)(); // weak
extern int (__thiscall *NiTListBase<DFALL<MagicField__>_MagicField__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<MagicField__>_MagicField__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *IEffectDestroyMessenger::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<IEffectDestroyMessenger__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *MagicField::_vftable_)(void *p, char); // weak
extern char byte_9C0F70; // idb
extern char byte_9C0F71[7]; // idb
extern int (__thiscall *MapNavigator::_vftable_)(void *p, char); // weak
extern char aSellItemD_Inde[]; // idb
extern int (__thiscall *NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *ShortCutInvPosItem::_vftable_)(void *p, char); // weak
extern int (__thiscall *ShortCutSkill::_vftable_)(void *p, char); // weak
extern int (__thiscall *ShortCutAction::_vftable_)(void *p, char); // weak
extern int (__thiscall *ShortCutSoulStone::_vftable_)(void *p, char); // weak
extern int (__thiscall *ShortCutItem::_vftable_)(void *p, char); // weak
extern int (__stdcall *ShortCutMgr::_vftable_[2])(int rkStream); // weak
extern char aSS_86[]; // idb
extern char asc_9C10AC[]; // idb
extern char asc_9C10B4[]; // idb
extern char aSS_87[]; // idb
extern char aName_5[5]; // weak
extern int (__thiscall *CharScreenBoardBase::_vftable_)(void *p, char); // weak
extern int (__thiscall *CharScreenBoardUserChar::_vftable_)(void *p, char); // weak
extern int (__thiscall *CharScreenBoardDropItem::_vftable_)(void *p, char); // weak
extern int (__thiscall *CharScreenBoardMiniHouse::_vftable_)(void *p, char); // weak
extern char aSS_88[]; // idb
extern char asc_9C115C[]; // idb
extern char aW_24[]; // idb
extern int (__thiscall *GuildBD::_vftable_)(void *p, char); // weak
extern int (__thiscall *IConBD::_vftable_)(void *p, char); // weak
extern char asc_9C1190[3]; // idb
extern char asc_9C1194[3]; // weak
extern char asc_9C1198[3]; // idb
extern char asc_9C119C[3]; // weak
extern char asc_9C11A0[3]; // idb
extern char asc_9C11A4[3]; // weak
extern char asc_9C11A8[3]; // idb
extern char asc_9C11AC[3]; // idb
extern char aSS_89[]; // idb
extern char asc_9C11B8[]; // idb
extern char asc_9C11BC[]; // idb
extern char asc_9C11C0[]; // idb
extern char asc_9C11C4[]; // idb
extern char aName_6[5]; // weak
extern char aW_25[]; // idb
extern char asc_9C11D4[]; // idb
extern char asc_9C11D8[3]; // idb
extern int (__thiscall *NameBD::_vftable_)(void *p, char); // weak
extern char asc_9C11F4[3]; // idb
extern char aW_19[2]; // idb
extern int (__thiscall *PrivateStoreBD::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<SpeechBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NameBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<CharScreenBoardBase__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<PrivateStoreBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<GuildBD__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *ScreenBoardGeometry::_vftable_)(void *p, char); // weak
extern char asc_9C1314[]; // idb
extern int (__thiscall *ScreenBoardTexture::DescInfo::_vftable_)(void *p, char); // weak
extern int (__thiscall *ScreenBoardTexture::_vftable_)(ScreenBoardTexture *this, int); // weak
extern int (__thiscall *FrameScreenBoardTexture::_vftable_)(ScreenBoardTexture *this, int); // weak
extern char aW_30[2]; // idb
extern int (__thiscall *SpeechBD::_vftable_)(void *p, char); // weak
extern char aGameGmcommand_[]; // idb
extern char asc_9C137C[]; // idb
extern char aGmcommandwin[]; // idb
extern char asc_9C1394[]; // idb
extern char aClsnor_84[]; // idb
extern char aClsclick_84[]; // idb
extern char aClsover_84[]; // idb
extern char aWintitle_87[]; // idb
extern char aGmAU[9]; // weak
extern char aBtn01nor_18[]; // idb
extern _UNKNOWN unk_9C13DC; // weak
extern char aBtn02nor_12[]; // idb
extern _UNKNOWN unk_9C13F0; // weak
extern char aBtn03nor_7[]; // idb
extern char aBtn04nor_4[]; // idb
extern _UNKNOWN unk_9C1414; // weak
extern int (__stdcall *GMCommandWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GMCommandWin::_vftable_)(void *p, char); // weak
extern char aGameGmarrest_n[]; // idb
extern char asc_9C1678[]; // idb
extern char aPrivatestore_1[]; // idb
extern char aClsnor_85[]; // idb
extern char aClsclick_85[]; // idb
extern char aClsover_85[]; // idb
extern char asc_9C16AC[]; // idb
extern char aWintitle_88[]; // idb
extern char aId_0[]; // idb
extern char aInputid[]; // idb
extern char aTime_7[]; // idb
extern char aInputtime[]; // idb
extern char aReason_0[]; // idb
extern char aInputreason[]; // idb
extern char aEditor[]; // idb
extern char aEditor_0[]; // idb
extern char aOk_3[]; // idb
extern char aOk_4[]; // idb
extern char aModif[]; // idb
extern char aModif_0[]; // idb
extern int (__stdcall *GMPrisonWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GMPrisonWin::_vftable_)(void *p, char); // weak
extern char aSloadingS_pn_1[]; // idb
extern char aR_11[]; // idb
extern char aSloadingS_tg_1[]; // idb
extern char aSloadingS_pn_2[]; // idb
extern char aR_12[]; // idb
extern char aSloadingS_tg_2[]; // idb
extern char aEldpri_0[7]; // weak
extern char aLinkframework[]; // idb
extern char aJob1_dn01[]; // idb
extern char aJob1_dn01_0[]; // idb
extern int (__stdcall *LinkFrameWork::_vftable_)(int uiFlags); // weak
extern char aSloadingS_pn_3[]; // idb
extern char aR_13[]; // idb
extern char aSloadingS_tg_3[]; // idb
extern char aSloadingS_pn_4[]; // idb
extern char aR_14[]; // idb
extern char aSloadingS_tg_4[]; // idb
extern char aLoadingframewo[]; // idb
extern int (__stdcall *LoadingFrameWork::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ITimer::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<ITimer__>_ITimer__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<ITimer__>_ITimer__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *FrameWorkTimer::_vftable_)(void *p, char); // weak
extern char aChairshopframe[]; // idb
extern char aShopShop_conf[]; // idb
extern char aShopHairshopba[]; // idb
extern char aAvatar01_1[9]; // weak
extern char aAvatar_face[12]; // weak
extern char aObject33[9]; // weak
extern char aShadownode_2[]; // idb
extern int (__stdcall *CHairShopFrameWork::_vftable_)(int uiFlags); // weak
extern char aSD_51[]; // idb
extern char aSD_52[7]; // weak
extern char aShopShoppanel_[]; // idb
extern char aPlane01_24[]; // idb
extern char aChairshopokcan[]; // idb
extern char aTextpanel_0[]; // idb
extern char aPrepagenor_13[]; // idb
extern char aPrepageclic_12[]; // idb
extern char aPrepageover_13[]; // idb
extern char aCreatcharnor_0[]; // idb
extern char aCreatcharcli_0[]; // idb
extern char aCreatcharove_0[]; // idb
extern char aStartnor_0[]; // idb
extern char aStartclick_0[]; // idb
extern char aStartover_0[]; // idb
extern int (__stdcall *CHairShopOkCancelWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CHairShopOkCancelWin::_vftable_)(void *p, char); // weak
extern char aShopCreatchart[]; // idb
extern char aHairshopviewct[]; // idb
extern char aTurnl_0[]; // idb
extern char aTurnlclick[]; // idb
extern char aTurnr_0[]; // idb
extern char aTurnrclick[]; // idb
extern int (__stdcall *CHairShopViewCtrlWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CHairShopViewCtrlWin::_vftable_)(void *p, char); // weak
extern char aHaircolor[]; // idb
extern char aShopHairshopwi[]; // idb
extern char asc_9C21C4[]; // idb
extern char aHairshopwin[]; // idb
extern char asc_9C21D8[]; // idb
extern char aPanel03_27[]; // idb
extern char asc_9C21E8[6]; // weak
extern char asc_9C21F0[]; // idb
extern char aWintitle01[]; // idb
extern char aWintitle02[]; // idb
extern char aShape_tab01_on[]; // idb
extern char aShape_tab04_cl[]; // idb
extern char aShape_tab04_ov[]; // idb
extern char aShape_tab04_of[]; // idb
extern char aShape_tab02_on[]; // idb
extern char aShape_tab04__0[]; // idb
extern char aShape_tab04__1[]; // idb
extern char aShape_tab04__2[]; // idb
extern char aShape_tab03_on[]; // idb
extern char aShape_tab04__3[]; // idb
extern char aShape_tab04__4[]; // idb
extern char aShape_tab04__5[]; // idb
extern char aShape_tab01_of[]; // idb
extern char aShape_tab01__0[]; // idb
extern char aShape_tab02_of[]; // idb
extern char aShape_tab02__0[]; // idb
extern char aShape_tab03_of[]; // idb
extern char aShape_tab03__0[]; // idb
extern char aShape_tab04_no[]; // idb
extern char aShape_tab04__6[]; // idb
extern char aShape_tab04__7[]; // idb
extern char aColor_tab01_of[]; // idb
extern char aColor_tab01_on[]; // idb
extern char aColor_tab02_of[]; // idb
extern char aColor_tab02_on[]; // idb
extern char aColor_tab03_of[]; // idb
extern char aColor_tab03_on[]; // idb
extern char aIconslot02d_0[]; // idb
extern char aColumnbarno_27[]; // idb
extern char aColumnbarcl_26[]; // idb
extern char aColumnbarov_24[]; // idb
extern char aColumn01_16[]; // idb
extern char aTextbox_9[]; // idb
extern char aSlidebar_sl_31[]; // idb
extern char asc_9C244C[]; // idb
extern char asc_9C245C[]; // idb
extern char aSlidebar_19[]; // idb
extern int (__stdcall *CColorIcon::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CColorIcon::_vftable_)(void *p, char); // weak
extern int (__stdcall *CHairShopwin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CHairShopwin::_vftable_)(void *p, char); // weak
extern char aSword[]; // idb
extern char aTwohand[]; // idb
extern char aTwohandaxe[]; // idb
extern char aHammer[]; // idb
extern char aMace[]; // idb
extern char aBow[]; // idb
extern char aCrossbow[]; // idb
extern char aStaff[]; // idb
extern char aWand[]; // idb
extern char aPickaxe[]; // idb
extern char aAxe[]; // idb
extern char aHoe[]; // idb
extern char aInvinciblehamm[]; // idb
extern char aClaw[]; // idb
extern char aDsword[]; // idb
extern char aBlade[]; // idb
extern char aNone_8[]; // idb
extern char aAll_1[]; // idb
extern char asc_9C29D8[]; // idb
extern char aHoe_0[]; // idb
extern char aAxe_0[]; // idb
extern char aSactionS_dat[]; // idb
extern char aRb_9[]; // idb
extern char aHairlink_3[9]; // weak
extern char aChest_3[6]; // weak
extern char aLefthand[9]; // weak
extern char aRighthand[10]; // weak
extern char aLeftshoesacc[13]; // weak
extern char aRightshoesacc[14]; // weak
extern char aBc_chestparall[17]; // weak
extern char aBc_chesttoches[16]; // weak
extern char aGround_3[7]; // weak
extern char aOp_ground[10]; // weak
extern char aOp_chest[9]; // weak
extern char aWorld_0[6]; // weak
extern char aOp_world[9]; // weak
extern char aSpot_0[5]; // weak
extern char aOp_hairlink[12]; // weak
extern char aToplink[8]; // weak
extern char aOp_toplink[11]; // weak
extern char asc_9C2B44[2]; // weak
extern char a0_24[2]; // weak
extern int (__thiscall *ActionInfoSet::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_long_ActionInfoSet__>::_vftable_)(void *p, char); // weak
extern char pText[4]; // idb
extern int (__stdcall *ActorCallBack::_vftable_[2])(int, int pkManager, int eEventCode, float fCurrentTime); // weak
extern _UNKNOWN unk_9C2BC0; // weak
extern char aLastSequenceAp[]; // idb
extern char aE_2[5]; // idb
extern int (__thiscall *NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_)(void *p, char); // weak
extern char asc_9C2C80[2]; // weak
extern int (__thiscall *NiTList<AttackSequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<SkillSequence__>::_vftable_)(void *p, char); // weak
extern int (*AttackSequenceManager::_vftable_[6])(); // weak
extern int (*Avatar::_vftable_[2])(); // weak
extern int (__stdcall *Avatar::_vftable_)(int); // weak
extern int (__thiscall *Avatar::_vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual); // weak
extern int (__stdcall *Ns_TourScene::_vftable_)(int _pkObject, int _pData); // weak
extern char aIsNotCallbackF[]; // idb
extern int (__stdcall *LODNodeInActivate::_vftable_)(float fNear, int _pData); // weak
extern char aBuff[5]; // weak
extern char aDebuff[7]; // weak
extern char asc_9C2FD0[2]; // weak
extern int (__thiscall *NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<AbStateInst__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *AbStateInfectee::_vftable_[2])(int pkAbState, char bNoVisual); // weak
extern int (__thiscall *AbStateInst::_vftable_)(void *p, char); // weak
extern char szName[]; // idb
extern char byte_9C3046; // idb
extern _UNKNOWN unk_9C3047; // weak
extern char aEf[]; // idb
extern char aSceneRoot_0[]; // idb
extern char aOx_gate[]; // idb
extern char aKqspringdoor[]; // idb
extern char asc_9C3074[3]; // idb
extern _UNKNOWN unk_9C309C; // weak
extern char aFxnoskinning_2[]; // idb
extern char aFxskinning_s_2[]; // idb
extern char aJumpstand_jump[]; // idb
extern char aJumprun_jumpst[]; // idb
extern char aJump_downhill[]; // idb
extern char aJumpstand_land[]; // idb
extern char aJumprun_land[]; // idb
extern char aWireabvtemp_0[]; // idb
extern char aWireabvtemp_1[]; // idb
extern char aKq_gate5[9]; // weak
extern char aFxnoskinning_3[]; // idb
extern char aFxskinning_g_0[]; // idb
extern char aArrow_0[6]; // weak
extern char aArrow[6]; // weak
extern char aStatimeattack[14]; // weak
extern char aStatimeattackm[18]; // weak
extern char asc_9C31BC[]; // idb
extern char aName_10[5]; // weak
extern char aName_7[6]; // weak
extern char aName_8[6]; // weak
extern char aName02d[]; // idb
extern char aName_9[6]; // weak
extern char aMetamorphosis[]; // idb
extern char aUnmetamorphosi[]; // idb
extern char aHit_0[4]; // weak
extern char aFatalshadow[]; // idb
extern char aStashadowbindi[]; // idb
extern char aSd_kingcrabski[]; // idb
extern char aStasdvale01_wh[]; // idb
extern char aShootUseDefaul[]; // idb
extern char pcShaderName2[]; // idb
extern char pcShaderName1[]; // idb
extern char aFxnoskinning_0[]; // idb
extern char aFxskinning_s_0[]; // idb
extern char aFxnoskinning_1[]; // idb
extern char aFxskinning_s_1[]; // idb
extern char aSta_gti_speed[]; // idb
extern int (__stdcall *NsFindObjectByName::_vftable_)(int _pkObject, int _pData); // weak
extern int (*Char::_vftable_[2])(); // weak
extern int (__stdcall *Char::_vftable_)(int); // weak
extern int (__thiscall *Char::_vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual); // weak
extern char aJumpstand_ju_1[]; // idb
extern char aChair[7]; // weak
extern char aFxnoskinning_4[]; // idb
extern char aFxskinning_s_3[]; // idb
extern char aShakeinfoFaile[]; // idb
extern char aShakeinfoFai_0[]; // idb
extern char aShakeinfoFai_1[]; // idb
extern char aActioncollec_0[14]; // weak
extern char aActioncollect[14]; // weak
extern char asc_9C3724[8]; // idb
extern _UNKNOWN unk_9C3734; // weak
extern char asc_9C3738[8]; // idb
extern _UNKNOWN unk_9C3748; // weak
extern char pcActInxName[]; // idb
extern char aActionproduc_0[]; // idb
extern char aActionproduct[14]; // weak
extern char aActionflag_0[]; // idb
extern char aActionflag[11]; // weak
extern char aMyweapon[]; // idb
extern char aRun_bow[8]; // weak
extern char aRun_cbow[9]; // weak
extern char aRun_non[8]; // weak
extern char aRun_spHam[11]; // weak
extern char aRun_one[8]; // weak
extern char aRun_two[8]; // weak
extern char aRun_twohandaxe[15]; // weak
extern char aRun_twos[9]; // weak
extern char aRun_1claw[10]; // weak
extern char aRun_1dsword[12]; // weak
extern char aJumpstand_ju_0[]; // idb
extern char aEf_0[4]; // idb
extern char aNooutline_0[10]; // weak
extern char aFxskinningba_3[]; // idb
extern char aFxskinningha_2[]; // idb
extern char aFxskinningba_0[]; // idb
extern char aFxskinningdmwi[]; // idb
extern char aFxskinningba_1[]; // idb
extern char aFxskinningha_0[]; // idb
extern char aFxskinningba_2[]; // idb
extern char aFxskinningha_1[]; // idb
extern char aFxskinninghair[24]; // weak
extern char aFxskinningbase[18]; // weak
extern int (__thiscall *NiTArray<NiNode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiGeometry__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *FindChildGeometry::_vftable_)(int pGeome, int _pData); // weak
extern int (__stdcall *Find_EF_ExtraData::_vftable_)(int _pkObject, int _pData); // weak
extern int (__thiscall *CSpactralGlow_Shader_Controller::_vftable_)(void *p, char); // weak
extern int (__thiscall *CarToonShader::_vftable_)(void *p, char); // weak
extern __int16 word_9C3960; // weak
extern char byte_9C3962; // weak
extern __int16 word_9C3964; // weak
extern char asc_9C3968[4]; // idb
extern __int16 word_9C396C; // weak
extern char asc_9C3970[4]; // idb
extern __int16 word_9C3974; // weak
extern char asc_9C3978[4]; // idb
extern __int16 word_9C397C; // weak
extern char asc_9C3980[4]; // idb
extern __int16 word_9C3984; // weak
extern char asc_9C3988[4]; // idb
extern __int16 word_9C398C; // weak
extern char asc_9C3990[4]; // idb
extern char aJump_nif[]; // idb
extern char aJump[5]; // weak
extern char pcTextKey[]; // idb
extern char aJumpError[11]; // weak
extern char aNotFoundAni[14]; // weak
extern char aJumpError_0[]; // idb
extern char aNotFoundAni_0[]; // idb
extern char aCharSettingErr[]; // idb
extern char aCharSettingE_0[]; // idb
extern char aIfYouUseSkillT[]; // idb
extern char aAe_0[]; // idb
extern char aSe[]; // idb
extern char aDe[]; // idb
extern char aSe_0[]; // idb
extern int (__stdcall *ActionMgr::_vftable_[2])(int, int pkManager, int eEventCode, float fCurrentTime); // weak
extern _UNKNOWN unk_9C3A8C; // weak
extern _UNKNOWN unk_9C3A8D; // weak
extern char byte_9C3A8E[2]; // idb
extern char aInsertDeletedc[]; // idb
extern char aKq_gate5_0[9]; // weak
extern char aBarrier01[10]; // weak
extern char aBarrier02[10]; // weak
extern char aDequeTTooLong[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<Char__>::_vftable_)(void *p, char); // weak
extern char aChardamageshak[]; // idb
extern char aChardamagesh_0[]; // idb
extern char aSMinihouseS_ni[]; // idb
extern char asc_9C3B5C[]; // idb
extern _UNKNOWN unk_9C3B5E; // weak
extern _UNKNOWN unk_9C3B5F; // weak
extern char aSMinihouseS_dd[]; // idb
extern char aMushroom_0[9]; // weak
extern _UNKNOWN unk_9C3B7D; // weak
extern _UNKNOWN unk_9C3B7E; // weak
extern char aSMinihouseS__0[]; // idb
extern char aSgetquestlowle[23]; // weak
extern char aSgetquest_nif[15]; // weak
extern char aSgetquest_ni_0[15]; // weak
extern char aSingquest_nif[15]; // weak
extern char aSfinquest_nif[15]; // weak
extern char aSgetquestlow_0[]; // idb
extern char aM_kfm_0[7]; // weak
extern char aCharselectCh_0[]; // idb
extern char aSSS_9[7]; // weak
extern char aF_kfm_0[7]; // weak
extern char aCharselectCh_1[]; // idb
extern char aSSS_10[]; // idb
extern char aM_kfm[7]; // weak
extern char aCharcreateChar[]; // idb
extern char aSSS_7[7]; // weak
extern char aF_kfm[7]; // weak
extern char aCharcreateCh_0[]; // idb
extern char aSSS_8[7]; // weak
extern char aSSMSM_kfm[16]; // weak
extern char aSSFSF_kfm[16]; // weak
extern char aSSMS[10]; // weak
extern char aSSFS[]; // idb
extern char aHaduriLight_0[13]; // weak
extern char aSSS_kfm_0[]; // idb
extern char aSSS_dds[]; // idb
extern char asc_9C3D14[2]; // weak
extern char aSSS_kfm_2[]; // idb
extern char aSSS_dds_1[]; // idb
extern char asc_9C3D30[2]; // weak
extern char aSSS_kfm_3[]; // idb
extern char aSSS_dds_2[]; // idb
extern char asc_9C3D4C[2]; // weak
extern char aSSS_kfm_1[]; // idb
extern char aSSS_dds_0[]; // idb
extern char asc_9C3D68[2]; // weak
extern char aSSMSM_nif[16]; // weak
extern char aSSMSet03d_nif[19]; // weak
extern char aSSFSF_nif[16]; // weak
extern char aSSFSet03d_nif[]; // idb
extern char aCharset[]; // idb
extern char aSS_91[]; // idb
extern char aHair_1[]; // idb
extern char aSS_92[]; // idb
extern char aSS_93[]; // idb
extern char aShdetailS_tga[]; // idb
extern char aHairdetailtext[]; // idb
extern char aSSMFace03d_nif[20]; // weak
extern char aSSFFace03d_nif[]; // idb
extern char aFace_2[]; // idb
extern char aSSMSMFace03d_d[25]; // weak
extern char aSSFSFFace03d_d[]; // idb
extern char aFacetexture[]; // idb
extern char aSTattoo03d_tga[]; // idb
extern char aFacetattoo[]; // idb
extern char aSSMEyeshape03d[24]; // weak
extern char aSSFEyeshape03d[]; // idb
extern char aEyetexture[]; // idb
extern char aSS_90[]; // idb
extern char aSettexture[]; // idb
extern char aSS_nif_0[9]; // weak
extern char aSfemaleS_nif[16]; // weak
extern char aSmaleS_nif[14]; // weak
extern char aSS_nif_1[]; // idb
extern char aD_S[]; // idb
extern char aSS_dds[9]; // weak
extern char aSfemaleS_dds[16]; // weak
extern char aSmaleS_dds[14]; // weak
extern char aSS_dds_0[]; // idb
extern char aSS_94[]; // idb
extern char aSS_95[]; // idb
extern char aGrounditem[11]; // weak
extern char aSS_nif[]; // idb
extern char aDropitem[]; // idb
extern char aSupgradetexeff[]; // idb
extern char aCommon[]; // idb
extern __int16 word_9C3FB4; // weak
extern char byte_9C3FB6; // weak
extern __int16 word_9C3FB8; // weak
extern char byte_9C3FBA; // weak
extern int dword_9C3FBC; // weak
extern int dword_9C3FC0; // weak
extern char aSM[6]; // weak
extern char aSF[]; // idb
extern char aS_nif[7]; // weak
extern char aS_dds[]; // idb
extern char aSSMSM_nif_0[16]; // weak
extern char aSSMSet03d_ni_0[]; // idb
extern char aCharset_0[]; // idb
extern char aSSFSF_nif_0[16]; // weak
extern char aSSFSet03d_ni_0[]; // idb
extern char aCharset_1[]; // idb
extern char aSSMSet03d_ni_1[]; // idb
extern char aCharset_2[]; // idb
extern char aSSFSet03d_ni_1[]; // idb
extern char aCharset_3[]; // idb
extern char aSSMSet03d_ni_2[]; // idb
extern char aCharset_4[]; // idb
extern char aSSFSet03d_ni_2[]; // idb
extern char aCharset_5[]; // idb
extern char asc_9C40AC[2]; // weak
extern char aSSMSMFace03d_0[]; // idb
extern char aFacetexture_0[]; // idb
extern char aSSFSFFace03d_0[]; // idb
extern char aFacetexture_1[]; // idb
extern char aSSS_kfm[]; // idb
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ResetTexture::_vftable_)(int _pkObject, int _pData); // weak
extern int (__stdcall *BonePartitionReCreate::_vftable_)(int _pkObject, int _pData); // weak
extern char aSceneRoot[11]; // weak
extern int (__thiscall *NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_long_NiPointer<CharSet>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_char_NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *CharSet::_vftable_)(void *p, char); // weak
extern char a_subitem02d[]; // idb
extern char aEquipednode_1[12]; // weak
extern char aLeft_2[5]; // weak
extern char aRight_1[6]; // weak
extern char kNodeName[]; // idb
extern char aLeft_3[]; // idb
extern char aLeft_4[5]; // weak
extern char aRight_3[6]; // weak
extern char aRight_4[6]; // weak
extern char aLeft_5[5]; // weak
extern char aEyeshape_0[9]; // weak
extern char aEquipednode[12]; // weak
extern char aHairpartsnode[14]; // weak
extern char aEquipednode_0[]; // idb
extern char aLodgroup01[11]; // weak
extern char aEyeshape[9]; // weak
extern char str2[]; // idb
extern char aHairpartsnod_0[14]; // weak
extern char asc_9C4354[2]; // weak
extern char asc_9C4358[]; // idb
extern char asc_9C435C[2]; // weak
extern char aMini[5]; // weak
extern char aMinimon_auto[]; // idb
extern char aMini_0[5]; // weak
extern char aMinimon_auto_0[]; // idb
extern char aWup[]; // idb
extern char aItemeffect03d[]; // idb
extern char aLodgroup02[11]; // weak
extern char aLodgroup03[11]; // weak
extern char aLodgroup01_0[11]; // weak
extern char aEffectnode[11]; // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *FindFaceNode::_vftable_)(int _pkObject, int _pData); // weak
extern int (__stdcall *FindHairNode::_vftable_)(int _pkObject, int _pData); // weak
extern int (__stdcall *FindGeometry::_vftable_)(int _pkObject, int _pData); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiSkinInstance::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiGeometry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NiGeometry__>::_vftable_)(void *p, char); // weak
extern char pcStr[]; // idb
extern char aFace[]; // idb
extern int (__thiscall *CharShape::_vftable_)(void *p, char); // weak
extern int (__stdcall *FindBoneNode::_vftable_)(int _pkObject, int _pData); // weak
extern _UNKNOWN unk_9C44A0; // weak
extern char aMsgbox_0[]; // idb
extern char aFxnoskinning_5[]; // idb
extern char aFxskinning_s_4[]; // idb
extern char aLookatcamera[13]; // weak
extern char aJumpstand_ju_2[]; // idb
extern char aJumprun_jump_0[]; // idb
extern char aJump_downhil_0[]; // idb
extern char aJumpstand_la_0[]; // idb
extern char aJumprun_land_0[]; // idb
extern int (*MainChar::_vftable_[2])(); // weak
extern int (__stdcall *MainChar::_vftable_)(int); // weak
extern int (__thiscall *MainChar::_vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual); // weak
extern int (__thiscall *Ns_XYFlatMoveToTarget::_vftable_)(void *p, char); // weak
extern int (__thiscall *MoveToTarget::_vftable_)(void *p, char); // weak
extern int (*ObjectChar::_vftable_[2])(); // weak
extern int (__stdcall *ObjectChar::_vftable_)(int); // weak
extern int (__thiscall *ObjectChar::_vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual); // weak
extern char aSgameMobpor_11[]; // idb
extern char aSgameMobpor_13[]; // idb
extern char aSgameMobpor_14[]; // idb
extern char aSgameMobpor_12[]; // idb
extern char aSgameMobpor_15[]; // idb
extern char aSgameMobpor_16[]; // idb
extern char aSgameMobpor_17[]; // idb
extern char aSgameMobpor_18[]; // idb
extern int (__thiscall *NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_)(void *p, char); // weak
extern char aFxskinning_gre[]; // idb
extern char aFxnoskinning_g[]; // idb
extern char aHaduri02d[]; // idb
extern char aRou_0[4]; // idb
extern char aTester[]; // idb
extern int (__thiscall *NiTListBase<DFALL<int>_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<int>_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemAuthority::_vftable_)(void *p, char); // weak
extern char pcNifName[]; // idb
extern char aIcon[]; // idb
extern char aSgrounditemS_n[]; // idb
extern char aSiconS_dds_0[]; // idb
extern char aSgrounditemGrd[]; // idb
extern char aSgrounditemG_0[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *DropItem::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<DropItem__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiSourceTexture>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *NsFindGeometry::_vftable_)(int _pkObject, int _pData); // weak
extern char aDynaminuv[]; // idb
extern char aShdynamicuv[]; // idb
extern char aIcon_0[]; // idb
extern int (__thiscall *DynaminUV::_vftable_)(void *p, char); // weak
extern char aFreestatusrelo[20]; // weak
extern char aSkillreloadbun[21]; // weak
extern char aEnchantsocketa[17]; // weak
extern char aEnchantsocketr[20]; // weak
extern char aLicenseclear[13]; // weak
extern char aMvault[]; // idb
extern char aRandomoption_r[21]; // weak
extern int (__thiscall *Item::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemByteLot::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemWordLot::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemDwrdLot::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemQuest::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemAmulet::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemWeapon::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemCostumeWeapon::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemArmor::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemShield::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemCostumeShield::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemBoot::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemFurniture::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemDecoration::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemSkillScroll::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemRecallScroll::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemUpgradeSource::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemBind::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemChest::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemGBCoin::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemCapsule::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemEnchant::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemWeaponTitleLicense::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemKQ::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemHouseSkin::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemUpRed::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemUpBlue::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemKQStep::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemFeed::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemRiding::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemAmount::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemUpGold::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemChargedAction::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemCollectCloseCard::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemCollectOpenCard::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemNoEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemActiveskill::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemPet::_vftable_)(void *p, char); // weak
extern int (__thiscall *ItemBracelet::_vftable_)(void *p, char); // weak
extern char aGameMyhomerepa[]; // idb
extern _UNKNOWN unk_9C5E71; // weak
extern _UNKNOWN unk_9C5E72; // weak
extern _UNKNOWN unk_9C5E73; // weak
extern char aLoadfail_15[]; // idb
extern char aGameMyhomere_0[]; // idb
extern char asc_9C5EA4[]; // idb
extern char aItemrepairwin[]; // idb
extern char asc_9C5EBC[6]; // weak
extern char asc_9C5EC4[]; // idb
extern char aIconslot_41[]; // idb
extern char aWintitle_89[]; // idb
extern char asc_9C5EE4[]; // idb
extern char aPlane_10[]; // idb
extern char aClsnor_86[]; // idb
extern char aClsclick_86[]; // idb
extern char aClsover_86[]; // idb
extern char aBtn01nor_19[]; // idb
extern char aBtn01click_20[]; // idb
extern char aBtn01over_20[]; // idb
extern char aBtn02nor_13[]; // idb
extern char aBtn02click_11[]; // idb
extern char aBtn02over_10[]; // idb
extern char aText02_20[]; // idb
extern char aText03_8[]; // idb
extern char aText01_39[]; // idb
extern char aTextval02[]; // idb
extern char aTextval03[]; // idb
extern char asc_9C5F88[]; // idb
extern char aDDD_2[]; // idb
extern int (__stdcall *ItemRepairWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemRepairWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ItemRepairTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ItemRepairTask::_vftable_)(void *p, char); // weak
extern int (__thiscall *Singleton<FadeObjectMgr>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<FadeObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *FadeObjectMgr::_vftable_)(void *p, char); // weak
extern _UNKNOWN unk_9C6234; // weak
extern char aLight[6]; // weak
extern char aBackground[11]; // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NiTimeController__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *LightFogCtrl::_vftable_)(void *p, char); // weak
extern char aPlane01_25[8]; // weak
extern int (__thiscall *CMagicCircleController::_vftable_)(void *p, char); // weak
extern char aMiscDecalplane[]; // idb
extern char aEditableMesh[14]; // weak
extern int (__thiscall *Shadow::_vftable_)(void *p, char); // weak
extern char aKdvictor[]; // idb
extern int (__thiscall *SkyCtrl::_vftable_)(void *p, char); // weak
extern char aNitextureaccum[]; // idb
extern char aNonmap[]; // idb
extern char aSloadingS_pn_5[]; // idb
extern char aR_15[]; // idb
extern char aSloadingS_tg_5[]; // idb
extern char aR_16[]; // idb
extern char aSloadingS_pn_6[]; // idb
extern char aR_17[]; // idb
extern char aSloadingS_tg_6[]; // idb
extern char aLoadingNowlo_1[]; // idb
extern char aSfieldSS_S[17]; // weak
extern char aSkdfieldSS_S[19]; // weak
extern char aSmhfieldSS_S[19]; // weak
extern char aSidfieldSS_S[19]; // weak
extern char aSfieldSS_S_0[]; // idb
extern int (__thiscall *NiAccumulator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NsPathFinding::_vftable_)(void *p, char); // weak
extern int (__thiscall *InstantBlock::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiNode>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTextureAccumulator::_vftable_)(void *p, char); // weak
extern char szStopFlag[]; // idb
extern char striFilename[]; // idb
extern char aWorldsetting[]; // idb
extern char aSceneRoot_2[11]; // weak
extern char aMinihouseOut[]; // idb
extern char aShmd[]; // idb
extern int dword_9C6528; // weak
extern char byte_9C652C; // weak
extern char inTwo[4]; // idb
extern char aRou_1[4]; // weak
extern char aEld[4]; // weak
extern char aRoun[5]; // weak
extern char aUrg[4]; // weak
extern char aAdl[4]; // weak
extern char aBera[5]; // weak
extern char aIni[]; // idb
extern char aShmd_0[]; // idb
extern char aR_18[]; // idb
extern char aWelcomeToMinih[]; // idb
extern char asc_9C657C[]; // idb
extern char aShmd0_5[8]; // weak
extern char aSD_53[]; // idb
extern char aSky[4]; // weak
extern char asc_9C6594[]; // idb
extern char aSS_96[]; // idb
extern char asc_9C65A0[2]; // weak
extern char aSS_nif_2[]; // idb
extern char aSD_54[]; // idb
extern char aWater[6]; // weak
extern char asc_9C65C0[]; // idb
extern char aSS_97[]; // idb
extern char aSD_55[]; // idb
extern char aGroundobject[13]; // weak
extern char asc_9C65E4[]; // idb
extern char aSS_98[]; // idb
extern char aSFFF_1[]; // idb
extern char aGloballight[12]; // weak
extern char aSFFFF[]; // idb
extern char aFog[4]; // weak
extern char aSFFF_2[]; // idb
extern char aBackgroundcolo[16]; // weak
extern char aSF_0[]; // idb
extern char aFrustum[8]; // weak
extern char asc_9C6648[]; // idb
extern char aDataobjectload[21]; // weak
extern char aSD_56[]; // idb
extern char asc_9C666C[]; // idb
extern char aFFFFFFFF[]; // idb
extern char aCd_0[4]; // weak
extern char aWireabvtemp_2[]; // idb
extern char aWireabvtemp_3[]; // idb
extern char aSFFF_3[]; // idb
extern char aDirectionlight[22]; // weak
extern char aSFFF_4[]; // idb
extern char aDirectionlig_0[22]; // weak
extern char aShbd[]; // idb
extern char aSbi[]; // idb
extern char aAid[]; // idb
extern char aConf[]; // idb
extern char aDefault_conf_0[]; // idb
extern char aIdm[]; // idb
extern char pkExt[]; // idb
extern char aR_0[]; // idb
extern int (__stdcall *FindMultiMNode::_vftable_)(int _pkObject, int _pData); // weak
extern int (__stdcall *FindMultiCDNode::_vftable_)(int _pkObject, int _pData); // weak
extern char aCd[]; // idb
extern char aM[]; // idb
extern char asc_9C673C[]; // idb
extern char aSminimapS_dd_0[]; // idb
extern char aSminimapS_dd_1[]; // idb
extern char aMiscMovetarget[]; // idb
extern char aMiscCharselect[]; // idb
extern char aPlane01_26[8]; // weak
extern char aMiscSkillaream[]; // idb
extern char asc_9C67CC[]; // idb
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDefaultTexturePalette::_vftable_)(void *p, char); // weak
extern int (__thiscall *NsMakeBlockInfo_Byte::_vftable_)(IMakeBlockInfo *this, int _uiMapSize, int _uiSplitCnt, float _fTileLength); // weak
extern char aErrorDoorBlock[]; // idb
extern char aError_0[]; // idb
extern char aBB[11]; // idb
extern char aWall_1[]; // idb
extern char aFloor_2[]; // idb
extern char aPn_0[]; // idb
extern int (__stdcall *FindCullUpdateNode::_vftable_)(float fNodeRadius, int _pData); // weak
extern char aOsk_token[11]; // weak
extern char a46_253_147_179[]; // idb
extern char byte_9C696F; // idb
extern int (*CVirtualServer::IProtoStruct::_vftable_[12])(); // weak
extern int (__stdcall *CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::_vftable_[2])(float _fRecordTime); // weak
extern int (__stdcall *CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::_vftable_[2])(float _fRecordTime); // weak
extern char aAfterimgeff[]; // idb
extern char aSupaftimgef02d[]; // idb
extern char aSupaftimgef0_0[]; // idb
extern char aType_7[5]; // weak
extern char aExpandtime[11]; // weak
extern char asc_9C6A70[3]; // weak
extern char aWidth_1[6]; // weak
extern char asc_9C6A7C[]; // idb
extern char aType_8[5]; // weak
extern char aExpandtime_0[11]; // weak
extern char asc_9C6A9C[3]; // weak
extern char aWidth_2[6]; // weak
extern char asc_9C6AA8[]; // idb
extern char aAftimgdummy0[13]; // weak
extern char aAftimgdummy1[13]; // weak
extern char aAftimgdummy0_0[13]; // weak
extern char aOn[]; // idb
extern char aOff[]; // idb
extern int (__stdcall *AfterImgEff::_vftable_[3])(int); // weak
extern int (__thiscall *AfterImgEff::_vftable_)(void *p, char); // weak
extern char aTheSwoosh[]; // idb
extern char aAfterimgshap_4[]; // idb
extern char aAfterimgshape0[]; // idb
extern char aAfterimgshap_0[56]; // weak
extern char aAfterimgshap_1[]; // idb
extern char aAfterimgshap_2[]; // idb
extern char aAfterimgshap_3[]; // idb
extern char aTheSwoosh_0[]; // idb
extern char aAfterimgshape1[]; // idb
extern int (__thiscall *NiStencilProperty::_vftable_)(void *p, char); // weak
extern int (__thiscall *AfterImgShape::_vftable_)(void *p, char); // weak
extern int (__thiscall *AfterImgShape0::_vftable_)(void *p, char); // weak
extern int (__thiscall *AfterImgShape1::_vftable_)(void *p, char); // weak
extern char aArroweff[]; // idb
extern char aMyweapon_0[9]; // weak
extern char aAfterimg000[12]; // weak
extern char aShootEffDamage[35]; // idb
extern int (__stdcall *ArrowEff::_vftable_[3])(int); // weak
extern int (__thiscall *ArrowEff::_vftable_)(void *p, char); // weak
extern char aAttacheff[]; // idb
extern int (__thiscall *NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *AttachEff::_vftable_[3])(int); // weak
extern int (__thiscall *AttachEff::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<AttachEff__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *IEffectHolder::_vftable_)(void *p, char); // weak
extern char aEffect[]; // idb
extern char byte_9C6F9F; // idb
extern char aCameffnode[11]; // weak
extern char aSClear[]; // idb
extern char aAfterimg03d[]; // idb
extern char aAeeffnode[10]; // weak
extern char aAe_1[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *CDecalEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NiPointer<Effect>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *Effect::_vftable_[3])(int); // weak
extern int (__thiscall *Effect::_vftable_)(void *p, char); // weak
extern char aDecal_1[7]; // weak
extern int (__thiscall *NiTArray<NiTimeController__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *EffectCtrl::_vftable_)(void *p, char); // weak
extern int (__stdcall *FindDecalGeometry::_vftable_)(int _pkObject, int _pData); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<CharDecal__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *CharDecal::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<CharDecal__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *DecalMgr::_vftable_)(void *p, char); // weak
extern char aPkskillinfoAre[]; // idb
extern char aHit[4]; // weak
extern char aHittimeDU[20]; // idb
extern char aSS_nif_3[]; // idb
extern char aSizebound_1[10]; // weak
extern char aSizebound_2[10]; // weak
extern char aSizebound[10]; // weak
extern char aSizebound_0[10]; // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<Effect__>_Effect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<Effect__>_Effect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<Effect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<Effect__>::_vftable_)(void *p, char); // weak
extern char aMyweapon_1[]; // idb
extern char aMyweapon_2[]; // idb
extern char aMyweapon_3[]; // idb
extern char aMyweapon_4[]; // idb
extern char aSta_timeattack[19]; // weak
extern char aMyweapon_5[]; // idb
extern char aMyweapon_6[]; // idb
extern char aGuildtwin_nif[]; // idb
extern char aGuildtlose_nif[]; // idb
extern char aGuildtdraw_nif[]; // idb
extern char aStart_nif[]; // idb
extern char aStacount8_nif[]; // idb
extern char aKquestsucc_n_0[]; // idb
extern char aKquestfail_n_0[]; // idb
extern char aStart_olympic_[]; // idb
extern char aGoal_olympic_n[]; // idb
extern char aWin_soccer_nif[]; // idb
extern char aLose_soccer_ni[]; // idb
extern char aDraw_soccer_ni[]; // idb
extern char aStart_soccer_n[]; // idb
extern char aGoal_soccer_ni[]; // idb
extern char aStart2_nif[]; // idb
extern char aKqspringwin[]; // idb
extern char aKqspringlose[]; // idb
extern char aKqspringdraw[]; // idb
extern char aStart_2[]; // idb
extern char aStacount8[]; // idb
extern char aKdsuccess[]; // idb
extern char aKdfail[]; // idb
extern char aStart_3[]; // idb
extern char aDicefinalresul[]; // idb
extern char aKqspringwin_0[]; // idb
extern char aKqspringlose_0[]; // idb
extern char aKqspringdraw_0[]; // idb
extern char aKdsoccer_whist[]; // idb
extern char aDicefinalres_0[]; // idb
extern char aStart2[]; // idb
extern char aExpeffect[]; // idb
extern int (__stdcall *ExpEffect::_vftable_[3])(int); // weak
extern int (__thiscall *ExpEffect::_vftable_)(void *p, char); // weak
extern char aStretcheffect[]; // idb
extern int (__stdcall *StretchEffect::_vftable_[3])(int); // weak
extern int (__thiscall *StretchEffect::_vftable_)(void *p, char); // weak
extern char aWeddingeffect[]; // idb
extern int (__stdcall *WeddingEffect::_vftable_[3])(int); // weak
extern int (__thiscall *WeddingEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *TextEff::_vftable_)(void *p, char); // weak
extern char aU_20[3]; // idb
extern char aNumber_nif[]; // idb
extern char aW20p02d[9]; // weak
extern char aR20p02d[9]; // weak
extern char aY20p02d[9]; // weak
extern char aG20p02d[9]; // weak
extern char aS02d[6]; // weak
extern char aH02d[6]; // weak
extern char aMiss[5]; // weak
extern char aBlock[6]; // weak
extern char aResist[7]; // weak
extern char aImmune[7]; // weak
extern char aSCriticaleffec[]; // idb
extern char aNormalhitctrl_[]; // idb
extern char aMove_0[5]; // weak
extern char aPlane01_27[8]; // weak
extern char aCriticalhitctr[]; // idb
extern char aMove_1[5]; // weak
extern char aNoise[6]; // weak
extern char aSize[5]; // weak
extern char aPlane01_28[8]; // weak
extern char aCritical_chest[]; // idb
extern char aDonTExistCriti[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<TextEff__>::_vftable_)(void *p, char); // weak
extern char aBlindeffect_dd[]; // idb
extern int (__thiscall *CBlindEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *CameraEffect::_vftable_)(void *p, char); // weak
extern int (__stdcall *ClientEffect::_vftable_[3])(int); // weak
extern int (__thiscall *ClientEffect::_vftable_)(void *p, char); // weak
extern int (__stdcall *LookAtEffect::_vftable_[3])(int); // weak
extern int (__thiscall *LookAtEffect::_vftable_)(void *p, char); // weak
extern char asc_9C78C0[]; // idb
extern char asc_9C78C8[]; // idb
extern char asc_9C78D0[]; // idb
extern int (__thiscall *NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<SoundGroup__>_SoundGroup__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<NiAudioSource__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *SoundGroup::_vftable_)(int result, int uiType); // weak
extern int (__stdcall *SoundGroupStatic::_vftable_)(int result, int uiType); // weak
extern char aNameS[]; // idb
extern char asc_9C7A18[]; // idb
extern char asc_9C7A68[]; // idb
extern char aEnableSkipeed[]; // idb
extern char acFn[]; // idb
extern char aBogus_0[]; // idb
extern char aSAmbiencesound[]; // idb
extern char aInterfaceKdsuc[]; // idb
extern char aInterfaceKdfai[]; // idb
extern char aInterfaceIssue[]; // idb
extern char aInterfaceWeapo[]; // idb
extern char aInterfaceSfx_c[]; // idb
extern char aInterfaceSfx_q[]; // idb
extern char aInterfaceSfx_r[]; // idb
extern char aInterfaceSfx_s[]; // idb
extern char aInterfaceSfx_e[]; // idb
extern char aInterfaceSfx_l[]; // idb
extern char aInterfaceSfx_0[]; // idb
extern char aInterfaceSfx_u[]; // idb
extern char aInterfaceSfx_1[]; // idb
extern char aInterfaceSfx_2[]; // idb
extern char aInterfaceSfx_3[]; // idb
extern char aInterfaceSfx_m[]; // idb
extern char aInterfaceCharc[]; // idb
extern char aInterfaceCha_0[]; // idb
extern char aInterfaceCha_1[]; // idb
extern char aInterfaceCha_2[]; // idb
extern char aInterfaceCha_3[]; // idb
extern char aInterfaceCha_4[]; // idb
extern char aInterfaceCha_5[]; // idb
extern char aInterfaceSfx_4[]; // idb
extern char aInterfaceSfx_k[]; // idb
extern char aInterfaceSfx_5[]; // idb
extern char aInterfaceSfx_w[]; // idb
extern char aInterfaceSfx_6[]; // idb
extern char aInterfaceSfx_7[]; // idb
extern char aInterfaceSfx_o[]; // idb
extern char aInterfaceSfx_8[]; // idb
extern char aInterfaceDicec[]; // idb
extern char aInterfaceDices[]; // idb
extern char aInterfaceDiceb[]; // idb
extern char aInterfaceDiceo[]; // idb
extern char aInterfaceDic_0[]; // idb
extern char aInterfaceDic_1[]; // idb
extern char aInterfaceDic_2[]; // idb
extern char aInterfaceCast_[]; // idb
extern char aInterfaceCas_0[]; // idb
extern char aInterfaceDice_[]; // idb
extern char aInterfaceDicer[]; // idb
extern char aInterfaceDic_3[]; // idb
extern char aInterfaceDicef[]; // idb
extern char aInterfaceDic_4[]; // idb
extern char aInterfaceMyste[]; // idb
extern char aInterfacePuton[]; // idb
extern char aInterfaceColle[]; // idb
extern char aInterfaceCol_0[]; // idb
extern char aInterfaceGb_sm[]; // idb
extern char aInterfaceGb__0[]; // idb
extern char aInterfaceGb__1[]; // idb
extern char aInterfaceGb__2[]; // idb
extern char aInterfaceGb__3[]; // idb
extern char aInterfaceGb__4[]; // idb
extern char aInterfaceGb__5[]; // idb
extern char aInterfaceGb__6[]; // idb
extern char aInterfaceGb__7[]; // idb
extern char aInterfaceGb__8[]; // idb
extern char aInterfaceGb__9[]; // idb
extern char aInterfaceGb_10[]; // idb
extern char aInterfaceCha_6[]; // idb
extern char aInterfaceSfx_i[]; // idb
extern char aInterfaceSfx_9[]; // idb
extern char aInterfaceSf_10[]; // idb
extern char aInterfaceRando[]; // idb
extern char aInterfaceS_wav[]; // idb
extern char aRun_nor_wav[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_)(void *p, char); // weak
extern int (__cdecl *ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *SoundGroupBgm::_vftable_)(int result, int uiType); // weak
extern int (__cdecl *MapAmbienceSoundInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__stdcall *CircleAmbientArea::_vftable_)(float dy, float y); // weak
extern int (__stdcall *SoundGroupAmbient::_vftable_)(float fRadius); // weak
extern int (__stdcall *SoundGroupAmbient::_vftable_)(int result, int uiType); // weak
extern char aResvoice[]; // idb
extern char aMiles[]; // idb
extern char aMilesFast2dPos[31]; // weak
extern char aS_wav_0[]; // idb
extern char aS_wav_1[]; // idb
extern char aRb_23[3]; // idb
extern char aSS02d_wav[]; // idb
extern char aResvoiceSS[]; // idb
extern char aS02d_wav[]; // idb
extern char aFemalevoiceS_w[19]; // weak
extern char aMalevoiceS_wav[]; // idb
extern char aS_wav[]; // idb
extern int (*IAmbientSoundManager::_vftable_[2])(); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *SoundGroupMainChar::_vftable_)(int result, int uiType); // weak
extern int (__thiscall *NiTList<IAmbientArea__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<SoundGroupAmbient::PlayingAreaInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<NiPointer<NiAudioSource>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<void__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<NiPointer<NiAudioSource>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *SpTList<void__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *SoundGroupDynamic::_vftable_)(NiPointer<NiAudioSource> *result, int spSource); // weak
extern int (__stdcall *SoundGroupInterface::_vftable_)(int result, int uiType); // weak
extern int (__stdcall *SoundGroupFieldEffect::_vftable_)(NiPointer<NiAudioSource> *result, int spSource); // weak
extern int (__stdcall *SoundGroup3DAmbient::_vftable_)(NiPointer<NiAudioSource> *result, int spSource); // weak
extern int (__stdcall *SoundGroupNPCVoice::_vftable_)(NiPointer<NiAudioSource> *result, int spSource); // weak
extern char asc_9C875C[]; // idb
extern char aWb_4[]; // idb
extern char asc_9C8774[]; // idb
extern char aRb_10[]; // idb
extern char aRb_11[]; // idb
extern char asc_9C8794[]; // idb
extern char aWb_5[]; // idb
extern char asc_9C87B0[]; // idb
extern char aRb_12[]; // idb
extern char aRb_13[]; // idb
extern char asc_9C87D0[]; // idb
extern char aWb_6[]; // idb
extern char asc_9C87EC[]; // idb
extern char aRb_14[]; // idb
extern char aRb_15[]; // idb
extern char pkName[]; // idb
extern char pFindName[]; // idb
extern char aWorldsetting_0[]; // idb
extern char aGround_dl_en_0[]; // idb
extern char aWb_7[]; // idb
extern char aFplist_ons_2[]; // idb
extern char aFplist_ons_3[11]; // weak
extern char asc_9C8858[]; // idb
extern char aRb_16[]; // idb
extern char asc_9C8870[]; // idb
extern char aRb_17[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<MachineOpt::WinPos__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *Option::_vftable_)(void *p, char); // weak
extern int (__thiscall *OptMgr::_vftable_)(void *p, char); // weak
extern char aActiveskill__0[]; // idb
extern char aActiveskillv_0[]; // idb
extern char aPassiveskill_0[]; // idb
extern char aPassiveskill_1[]; // idb
extern char aHerbing[8]; // weak
extern char aWoodcutting[12]; // weak
extern char aA_14[]; // idb
extern char aLogSkilllog_tx[]; // idb
extern __int16 word_9C8974; // weak
extern char aMiniroomskill[]; // idb
extern char aS02d_0[]; // idb
extern char aS02d_1[]; // idb
extern char aS02d_2[]; // idb
extern char aS02d_3[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *SkillUseRecord::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vftable_)(void *p, char); // weak
extern int (__cdecl *ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<PassiveSkillViewInfo_PasSkillViewInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ActiveSkillInfo_ActSkillInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<PassiveSkillInfo_PasSkillInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<PassiveSkillInfo_PasSkillInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__thiscall *PgTList<NiPointer<SkillUseRecord>>::_vftable_)(void *p, char); // weak
extern int (__cdecl *ActSkillViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *PasSkillViewInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *ActSkillInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__cdecl *PasSkillInfoTab::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern char byte_9C8B1C; // idb
extern char byte_9C8B1D; // idb
extern char byte_9C8B1E[2]; // idb
extern int (__thiscall *Party::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTList<NiPointer<ITask>>::_vftable_)(void *p, char); // weak
extern int (__stdcall *ITask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ITask::_vftable_)(void *p, char); // weak
extern char aEnchantsocke_0[17]; // weak
extern char byte_9C8B7D; // idb
extern char byte_9C8B7E; // idb
extern char byte_9C8B7F; // idb
extern char aEnchantsocke_1[20]; // weak
extern char aRandomoption_3[21]; // weak
extern char byte_9C8BA9[3]; // idb
extern char aUsesilverwings[15]; // weak
extern char aUseride[8]; // weak
extern char aUseride_0[8]; // weak
extern char asc_9C8BCC[]; // idb
extern char aRoar_0[5]; // weak
extern char aProdreload01[13]; // weak
extern char asc_9C8BE8[]; // idb
extern char asc_9C8BEC[]; // idb
extern char asc_9C8BF0[]; // idb
extern char aMsgboxaskuseit[]; // idb
extern char aProposering_0[12]; // weak
extern char asc_9C8C14[2]; // weak
extern char aGuildname[]; // idb
extern char aGuildtendency[]; // idb
extern char aRoar_1[5]; // weak
extern char aGoddesswing_3[12]; // weak
extern char aEnchantsocke_2[17]; // weak
extern char aEnchantsocke_3[20]; // weak
extern char aRandomoption_4[21]; // weak
extern char pcSndName[]; // idb
extern char aD_74[]; // idb
extern char byte_9C8C9B; // idb
extern char aInitializeFail[]; // idb
extern char aD_73[]; // idb
extern char asc_9C8CC4[3]; // weak
extern char asc_9C8CC8[]; // idb
extern char asc_9C8CCC[3]; // weak
extern char asc_9C8CD0[]; // idb
extern char asc_9C8CD4[]; // idb
extern char asc_9C8CD8[]; // idb
extern char asc_9C8CDC[]; // idb
extern char asc_9C8CE0[]; // idb
extern char asc_9C8CE4[]; // idb
extern char asc_9C8CE8[]; // idb
extern char asc_9C8CEC[]; // idb
extern char asc_9C8CF0[]; // idb
extern char asc_9C8CF4[]; // idb
extern char asc_9C8CF8[]; // idb
extern char asc_9C8CFC[]; // idb
extern char asc_9C8D00[]; // idb
extern char asc_9C8D04[]; // idb
extern char asc_9C8D08[]; // idb
extern char asc_9C8D0C[]; // idb
extern char asc_9C8D10[]; // idb
extern char asc_9C8D14[]; // idb
extern char asc_9C8D18[]; // idb
extern char asc_9C8D1C[2]; // weak
extern char asc_9C8D20[]; // idb
extern char asc_9C8D24[2]; // weak
extern char asc_9C8D28[]; // idb
extern char asc_9C8D2C[]; // idb
extern char asc_9C8D30[2]; // weak
extern char asc_9C8D34[]; // idb
extern char asc_9C8D38[]; // idb
extern char asc_9C8D3C[]; // idb
extern char asc_9C8D40[]; // idb
extern char asc_9C8D44[]; // idb
extern char aI64d_59[]; // idb
extern char aI64d_60[]; // idb
extern char aI64d_61[]; // idb
extern char aI64d_62[]; // idb
extern int (__stdcall *MHDiceGameTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MHDiceGameTask::_vftable_)(void *p, char); // weak
extern char aErrD[]; // idb
extern char aErrD_0[]; // idb
extern char aWb_8[]; // idb
extern char aRb_18[]; // idb
extern char aS03d_jpg[11]; // weak
extern char aSD_jpg[]; // idb
extern char asc_9C8E0C[]; // idb
extern char aRb_19[]; // idb
extern char aNoname_0[]; // idb
extern char a04d_02d_02d_02[]; // idb
extern char aS_jpg[]; // idb
extern char aS_D_jpg[]; // idb
extern char asc_9C8E5C[]; // idb
extern char aRb_20[]; // idb
extern char asc_9C8E68[]; // idb
extern char aSDDD_0[14]; // weak
extern char aSDDD_1[14]; // weak
extern char aSDDD_2[14]; // weak
extern char aSDDD_3[14]; // weak
extern char aSDDD_4[]; // idb
extern char aSDDD[]; // idb
extern char aQuestdialog_sh[]; // idb
extern char aQuestdata_shn[]; // idb
extern int (__stdcall *CClientQuest::_vftable_)(__int16 kID); // weak
extern char aName_11[5]; // weak
extern char aButton_0[7]; // weak
extern char asc_9C8F88[]; // idb
extern char aButton_npc[11]; // weak
extern char asc_9C8F98[]; // idb
extern char asc_9C8F9C[]; // idb
extern char aLine_2[5]; // weak
extern char aShow_reward[12]; // weak
extern char aEvent[6]; // weak
extern char aScenario[9]; // weak
extern char aNext_2[5]; // weak
extern char asc_9C8FD0[]; // idb
extern char aMenu[5]; // weak
extern char aEmotion[8]; // weak
extern char aDelay[6]; // weak
extern char aEnd_3[4]; // weak
extern char aColorYellowS[]; // idb
extern char aDDS[]; // idb
extern char aDDS_0[]; // idb
extern char aDDS_1[11]; // weak
extern char aDDS_2[11]; // weak
extern char aDDS_3[]; // idb
extern char asc_9C9040[]; // idb
extern char asc_9C9044[]; // idb
extern char asc_9C904C[]; // idb
extern char asc_9C9050[]; // idb
extern char Left[]; // idb
extern char aDDS_4[]; // idb
extern char asc_9C9068[]; // idb
extern char aLevelD_2[]; // idb
extern char asc_9C907C[]; // idb
extern char asc_9C9080[]; // idb
extern char asc_9C9088[]; // idb
extern char asc_9C908C[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<QuestMC__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<QUEST_DATA__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *Scenario::_vftable_)(int); // weak
extern int (__stdcall *Scenario_15::_vftable_)(int); // weak
extern int (__stdcall *CClientGuildList::_vftable_[2])(int); // weak
extern int (__stdcall *GuildListTask::_vftable_[2])(int); // weak
extern int (__stdcall *GuildListTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildListTask::_vftable_)(void *p, char); // weak
extern char byte_9C91C4; // idb
extern char byte_9C91C5[3]; // idb
extern int (__stdcall *CClientGuildMember::_vftable_[21])(int); // weak
extern int (__stdcall *GuildMemberTask::_vftable_[21])(int pkProto); // weak
extern int (__stdcall *GuildMemberTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildMemberTask::_vftable_)(void *p, char); // weak
extern char aGuildtstart_ni[]; // idb
extern char aGuildtwin_ni_0[]; // idb
extern char pcText2; // idb
extern char pcText1; // idb
extern char aGuildtlose_n_0[]; // idb
extern char aSD_57[]; // idb
extern char asc_9C92E4[]; // idb
extern char aDbGetError_0[13]; // weak
extern char aDbSetError[13]; // weak
extern char aParticipationR[30]; // weak
extern char aI64d_63[]; // idb
extern char byte_9C9330; // weak
extern char aI64d_64[]; // idb
extern char byte_9C933C; // weak
extern char aI64d_65[]; // idb
extern char byte_9C9348; // weak
extern char aI64d_66[]; // idb
extern char byte_9C9354; // weak
extern char aErrorD_1[]; // idb
extern char aDbGetError[13]; // weak
extern char aErrorD_0[]; // idb
extern char aI64d_67[]; // idb
extern char byte_9C9388; // weak
extern char aI64d_68[]; // idb
extern char byte_9C9394; // weak
extern char aI64d_69[]; // idb
extern char byte_9C93A0; // weak
extern char aI64d_70[]; // idb
extern char byte_9C93AC; // weak
extern char aErrorD_2[]; // idb
extern char aGuildtstart[]; // idb
extern char aGuildtwin[]; // idb
extern char aGuildtslose[]; // idb
extern char aI64d_71[]; // idb
extern char byte_9C93E8; // weak
extern char aI64d_72[]; // idb
extern char byte_9C93F4; // weak
extern char aI64d_73[]; // idb
extern char byte_9C9400; // weak
extern char aI64d_74[]; // idb
extern char byte_9C940C; // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *PgTList<GUILD_HISTORY__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *CClientGuild::_vftable_[20])(int pAck); // weak
extern int (__thiscall *GuildTask::_vftable_)(CGuild *this, int pkProto); // weak
extern int (__stdcall *GuildTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildNameCache::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildNameCache::_vftable_)(void *p, char); // weak
extern char aCollnode_0[]; // idb
extern char aPick_0[]; // idb
extern char a_charshine__0[]; // idb
extern char a_charshine_o_0[]; // idb
extern char aEffectnode_0[11]; // weak
extern char aI64dS[]; // idb
extern char aI64dS_0[]; // idb
extern char aI64dS_1[]; // idb
extern char asc_9C95B4[]; // idb
extern char aInsertUimapOk[]; // idb
extern char aClearUimapOk[]; // idb
extern char aT_4[16]; // idb
extern char aFurnitureselec[]; // idb
extern char aMinihouseLig_1[44]; // weak
extern char aMinihouseLig_2[46]; // weak
extern char aMinihouseLig_3[47]; // weak
extern char aMinihouseLig_4[]; // idb
extern char aMinihouseLight[46]; // weak
extern char aMinihouseLig_0[]; // idb
extern char aActpos_1[]; // idb
extern char aActpos_0[]; // idb
extern char aActposDTaridD[]; // idb
extern char aS_D_DBDBN[]; // idb
extern char aAddObjectSeats[]; // idb
extern char aReseleroot_0[]; // idb
extern char aRooot_0[]; // idb
extern char aCollnode_1[]; // idb
extern char aPick_1[]; // idb
extern char aLightambnorm_0[]; // idb
extern char aLightambmove_0[]; // idb
extern char aLightambmove_1[]; // idb
extern char aLightambmove_2[]; // idb
extern char aCharcolinode_0[]; // idb
extern char a_charshine_o_1[]; // idb
extern char aMhselectedob_1[]; // idb
extern char aMhselectedob_2[]; // idb
extern char aMhselectedob_0[49]; // weak
extern char aMhselectedobjP[]; // idb
extern int (__thiscall *ResElement::_vftable_)(void *p, char); // weak
extern int (__thiscall *mhResTableElement::_vftable_)(void *p, char); // weak
extern char a_minihouse_nod[17]; // weak
extern char aProotnameError[29]; // weak
extern char aItobjGetnameEr[]; // idb
extern char a_D[]; // idb
extern char a_0D[]; // idb
extern char aRooot_1[]; // idb
extern int (__thiscall *mhObjActor::_vftable_)(void *p, char); // weak
extern int (__thiscall *mhObjAniActor::_vftable_)(void *p, char); // weak
extern int (__thiscall *mhObject::_vftable_)(void *p, char); // weak
extern char aLoadingError[]; // idb
extern char aError_6[]; // idb
extern char aM_mapresmodels[]; // idb
extern char aError_7[]; // idb
extern char aM_maprestexIsN[]; // idb
extern char aD_75[]; // idb
extern char asc_9C9A38[]; // idb
extern char aRoot_1[]; // idb
extern char aWall_2[]; // idb
extern char aFloor_3[]; // idb
extern char aRoof_1[]; // idb
extern char aRootblock_0[]; // idb
extern char aT_2[]; // idb
extern char aR_21[]; // idb
extern char aCollnode_2[]; // idb
extern char a_nif_0[]; // idb
extern char a_kfm[]; // idb
extern char aMinihouseResni[]; // idb
extern char aMinihouseRes_0[]; // idb
extern char asc_9C9AFC[]; // idb
extern char aMinihouseRes_1[]; // idb
extern char asc_9C9B34[]; // idb
extern char byte_9C9B38; // idb
extern char byte_9C9B39[3]; // idb
extern char aGameMinihomeed[]; // idb
extern char asc_9C9B54[]; // idb
extern char aMheditroomwi_2[]; // idb
extern char aWintitle_90[]; // idb
extern char asc_9C9B78[6]; // weak
extern char asc_9C9B80[]; // idb
extern char asc_9C9B88[]; // idb
extern char aPanel02_79[]; // idb
extern char aPanel02_80[]; // idb
extern char aPanel03_28[]; // idb
extern char aPanel04_10[]; // idb
extern char aBtnnor0[]; // idb
extern char aBtnover0[]; // idb
extern char aTab01_off_6[]; // idb
extern char aTab01_on_7[]; // idb
extern char aTab02_off_5[]; // idb
extern char aTab021_on[]; // idb
extern char aTab03_off_3[]; // idb
extern char aTab03_on_4[]; // idb
extern char aTab04_off_1[]; // idb
extern char aTab04_on_1[]; // idb
extern char aInvfittabon[]; // idb
extern char aInvfittabdis[]; // idb
extern char aInvsectabon[]; // idb
extern char aInvsectabdis[]; // idb
extern char aClsnor_87[]; // idb
extern char aClsclick_87[]; // idb
extern char aClsover_87[]; // idb
extern char asc_9C9C7C[12]; // weak
extern char asc_9C9C88[]; // idb
extern char aHelplinkcli_76[]; // idb
extern char aHelplinkove_76[]; // idb
extern char aItemslot02d[]; // idb
extern char asc_9C9CC4[1]; // idb
extern char asc_9C9CD8[1]; // idb
extern char aMinihomeedit[]; // idb
extern char aWrongInventype[]; // idb
extern char aI_6[6]; // idb
extern char aC_14[3]; // idb
extern char aU_13[]; // idb
extern int (__stdcall *mhItemInvIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhItemInvIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *mhEditRoomWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhEditRoomWin::_vftable_)(void *p, char); // weak
extern char aGameMyhomemenu[]; // idb
extern char aLoadfail_16[]; // idb
extern _UNKNOWN unk_9CA259; // weak
extern char aGameMyhomeme_0[]; // idb
extern char asc_9CA27C[]; // idb
extern char aMhemotionwin[]; // idb
extern char aNode[]; // idb
extern char aGameMyhomeme_1[]; // idb
extern char aWintitle_91[]; // idb
extern char asc_9CA2C8[2]; // weak
extern char asc_9CA2CC[]; // idb
extern char aBtnSnor[]; // idb
extern char aBtnSclick[]; // idb
extern char aBtnSover[]; // idb
extern char aMenubtnSnor[]; // idb
extern char aMenubtnSclick[]; // idb
extern char aMenubtnSover[]; // idb
extern int (__stdcall *mhEmotionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhEmotionWin::_vftable_)(void *p, char); // weak
extern char aGameMinihomegu[]; // idb
extern char byte_9CA58D[3]; // idb
extern char aLoadfail_17[]; // idb
extern char aGameMinihome_0[]; // idb
extern char asc_9CA5C4[]; // idb
extern char aMhguestbookw_2[]; // idb
extern char asc_9CA5DC[6]; // weak
extern char asc_9CA5E4[]; // idb
extern char aPanel02_81[]; // idb
extern char asc_9CA5F4[]; // idb
extern char aPanel02_82[]; // idb
extern char aPanel04_11[]; // idb
extern char aWintitle_92[]; // idb
extern char aClsnor_88[]; // idb
extern char aClsclick_88[]; // idb
extern char aClsover_88[]; // idb
extern char asc_9CA634[12]; // weak
extern char asc_9CA640[]; // idb
extern char aHelplinkcli_77[]; // idb
extern char aHelplinkove_77[]; // idb
extern char aBtnnor0_0[]; // idb
extern char aBtnclick0[]; // idb
extern char aBtnover0_0[]; // idb
extern char aMinihomeguestr[]; // idb
extern int (__stdcall *mhGuestBookWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhGuestBookWin::_vftable_)(void *p, char); // weak
extern char aGameHelpwin_ni[]; // idb
extern char byte_9CA8F5[3]; // idb
extern char asc_9CA8F8[8]; // weak
extern char asc_9CA900[]; // idb
extern char aMhguestbookw_3[]; // idb
extern char aWintitle_93[]; // idb
extern char asc_9CA924[]; // idb
extern char asc_9CA92C[]; // idb
extern char aClsnor_89[]; // idb
extern char aClsclick_89[]; // idb
extern char aClsover_89[]; // idb
extern char asc_9CA950[12]; // weak
extern char asc_9CA95C[]; // idb
extern char aHelplinkcli_78[]; // idb
extern char aHelplinkove_78[]; // idb
extern char aHelpwin_0[]; // idb
extern int (__stdcall *mhGuestBookWin2::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhGuestBookWin2::_vftable_)(void *p, char); // weak
extern char aGameMinihomein[]; // idb
extern _UNKNOWN unk_9CABEA; // weak
extern _UNKNOWN unk_9CABEB; // weak
extern char aLoadfail_18[]; // idb
extern _UNKNOWN unk_9CABF5; // weak
extern _UNKNOWN unk_9CABF6; // weak
extern char byte_9CABF7; // idb
extern char aGameMinihome_1[]; // idb
extern char asc_9CAC18[]; // idb
extern char aMhinfowin[]; // idb
extern char asc_9CAC2C[6]; // weak
extern char asc_9CAC34[]; // idb
extern char asc_9CAC3C[]; // idb
extern char aPanel02_83[]; // idb
extern char aPanel04_12[]; // idb
extern char aPanel05_4[]; // idb
extern char aWintitle_94[]; // idb
extern char aClsnor_90[]; // idb
extern char aClsclick_90[]; // idb
extern char aClsover_90[]; // idb
extern char asc_9CAC84[12]; // weak
extern char asc_9CAC90[]; // idb
extern char aHelplinkcli_79[]; // idb
extern char aHelplinkove_79[]; // idb
extern char aText01_40[]; // idb
extern char aTextfield01[]; // idb
extern char aText02_21[]; // idb
extern char aTextfield02[]; // idb
extern char aText03_9[]; // idb
extern char aTextfield03[]; // idb
extern char aText04_3[]; // idb
extern char aTextfield04[]; // idb
extern char aBtnnor0_1[]; // idb
extern char aBtnover0_1[]; // idb
extern char aColumnbarno_28[]; // idb
extern char aColumnbarcl_27[]; // idb
extern char aColumnbarov_25[]; // idb
extern char aColumn01_17[]; // idb
extern char aColumn02_12[]; // idb
extern char aColumnbox_3[]; // idb
extern char aSlidebar_sl_32[]; // idb
extern char asc_9CAD90[]; // idb
extern char asc_9CADA0[]; // idb
extern char aSlidebar_20[]; // idb
extern char aUnknown_6[]; // idb
extern char aDD_34[]; // idb
extern char aMinihomeinfo[]; // idb
extern int (__stdcall *mhInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhInfoWin::_vftable_)(void *p, char); // weak
extern char aGameInputpassw[]; // idb
extern char asc_9CB034[]; // idb
extern char aMhinputpasswor[]; // idb
extern char aTextinput01_1[]; // idb
extern char aText01_41[]; // idb
extern char aBtnnor01_12[]; // idb
extern char aBtnclick01_12[]; // idb
extern char aBtnover01_12[]; // idb
extern char aBtnnor02_19[]; // idb
extern char aBtnclick02_19[]; // idb
extern char aBtnover02_19[]; // idb
extern int (__stdcall *mhInputPassWordWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhInputPassWordWin::_vftable_)(void *p, char); // weak
extern char aGameMinihomeen[]; // idb
extern char aLoadfail_19[]; // idb
extern char aGameMinihome_2[]; // idb
extern char asc_9CB340[]; // idb
extern char aMhjoinwin[]; // idb
extern char asc_9CB354[6]; // weak
extern char asc_9CB35C[]; // idb
extern char asc_9CB364[]; // idb
extern char aPanel02_84[]; // idb
extern char aPanel03_29[]; // idb
extern char aWintitle_95[]; // idb
extern char aTextfield01_0[]; // idb
extern char aTextfield04_0[]; // idb
extern char aTextfield03_0[]; // idb
extern char aTextfield06[]; // idb
extern char aText01_42[]; // idb
extern char aText02_22[]; // idb
extern char aText03_10[]; // idb
extern char aText04_4[]; // idb
extern char aText05_1[]; // idb
extern char aText02_1_0[]; // idb
extern char aText05_1_0[]; // idb
extern char aText06_1[]; // idb
extern char aOkbtnnor_2[]; // idb
extern char aOkbtnclick_2[]; // idb
extern char aOkbtnover_2[]; // idb
extern char aCancelbtnnor_2[]; // idb
extern char aCancelbtncli_1[]; // idb
extern char aCancelbtnove_1[]; // idb
extern char aClsnor_91[]; // idb
extern char aClsclick_91[]; // idb
extern char aClsover_91[]; // idb
extern char asc_9CB470[12]; // weak
extern char asc_9CB47C[]; // idb
extern char aHelplinkcli_80[]; // idb
extern char aHelplinkove_80[]; // idb
extern char aText02nor[]; // idb
extern char aText02click[]; // idb
extern char aText05nor[]; // idb
extern char aText05click[]; // idb
extern char a2_9[2]; // weak
extern char aMinihomeentran[]; // idb
extern int (__stdcall *mhJoinWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhJoinWin::_vftable_)(void *p, char); // weak
extern char aGameMyhomeminb[]; // idb
extern char aLoadfail_20[]; // idb
extern char aGameMyhomemi_0[]; // idb
extern char aMyhomebtnnor[]; // idb
extern char aMyhomebtnclick[]; // idb
extern char aMyhomebtnover[]; // idb
extern int (__stdcall *mhMinimizeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhMinimizeWin::_vftable_)(void *p, char); // weak
extern char aGameMyhomemous[]; // idb
extern char aLoadfail_21[]; // idb
extern char aGameMyhomemo_0[]; // idb
extern char aTurnl_1[]; // idb
extern char aTurnlclick_0[]; // idb
extern char aTurnr_1[]; // idb
extern char aTurnrclick_0[]; // idb
extern char aCtrlnor[]; // idb
extern char aCtrlclick[]; // idb
extern int (__stdcall *mhMouseControlWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhMouseControlWin::_vftable_)(void *p, char); // weak
extern char aGameMinihomepo[]; // idb
extern char aLoadfail_22[]; // idb
extern char byte_9CBCE9[3]; // idb
extern char aGameMinihome_3[]; // idb
extern char asc_9CBD14[]; // idb
extern char aMhportallistwi[]; // idb
extern char asc_9CBD2C[6]; // weak
extern char asc_9CBD34[]; // idb
extern char asc_9CBD3C[]; // idb
extern char aPanel02_85[]; // idb
extern char aPanel03_30[]; // idb
extern char aPanel04_13[]; // idb
extern char aWintitle_96[]; // idb
extern char aBtnnor0_2[]; // idb
extern char aBtnover0_2[]; // idb
extern char aColumnbarno_29[]; // idb
extern char aColumnbarcl_28[]; // idb
extern char aColumnbarov_26[]; // idb
extern char aColumn01_18[]; // idb
extern char aColumnbox_4[]; // idb
extern char aSlidebar_sl_33[]; // idb
extern char asc_9CBDE0[]; // idb
extern char asc_9CBDF0[]; // idb
extern char aSlidebar_21[]; // idb
extern char aOkbtnnor_3[]; // idb
extern char aOkbtnclick_3[]; // idb
extern char aOkbtnover_3[]; // idb
extern char aCancelbtnnor_3[]; // idb
extern char aCancelbtncli_2[]; // idb
extern char aCancelbtnove_2[]; // idb
extern char aClsnor_92[]; // idb
extern char aClsclick_92[]; // idb
extern char aClsover_92[]; // idb
extern char asc_9CBE7C[12]; // weak
extern char asc_9CBE88[]; // idb
extern char aHelplinkcli_81[]; // idb
extern char aHelplinkove_81[]; // idb
extern char a04d_02d_02d02d[]; // idb
extern char aMinihomeportal[]; // idb
extern int (__stdcall *mhPortalListWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhPortalListWin::_vftable_)(void *p, char); // weak
extern char aGameMyhomere_1[]; // idb
extern _UNKNOWN unk_9CC13D; // weak
extern _UNKNOWN unk_9CC13E; // weak
extern _UNKNOWN unk_9CC13F; // weak
extern char aLoadfail_23[]; // idb
extern char aGameMyhomere_2[]; // idb
extern char asc_9CC170[]; // idb
extern char aMhrepairobjwin[]; // idb
extern char asc_9CC188[6]; // weak
extern char asc_9CC190[]; // idb
extern char aWintitle_97[]; // idb
extern char aIconslot_42[]; // idb
extern char aPlane_11[]; // idb
extern char aClsnor_93[]; // idb
extern char aClsclick_93[]; // idb
extern char aClsover_93[]; // idb
extern char asc_9CC1D4[]; // idb
extern char aBtn01nor_20[]; // idb
extern char aBtn01click_21[]; // idb
extern char aBtn01over_21[]; // idb
extern char aBtn02nor_14[]; // idb
extern char aBtn02click_12[]; // idb
extern char aBtn02over_11[]; // idb
extern char aText02_23[]; // idb
extern char aText03_11[]; // idb
extern char aText01_43[]; // idb
extern char aTextval02_0[]; // idb
extern char aTextval03_0[]; // idb
extern char aD_76[]; // idb
extern char aDDD_3[]; // idb
extern int (__stdcall *mhRepairObjWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhRepairObjWin::_vftable_)(void *p, char); // weak
extern char aGameMinihomese[]; // idb
extern _UNKNOWN unk_9CC4D1; // weak
extern _UNKNOWN unk_9CC4D2; // weak
extern char aLoadfail_24[]; // idb
extern char aGameMinihome_4[]; // idb
extern char asc_9CC504[]; // idb
extern char aMhinfowin_0[]; // idb
extern char asc_9CC518[6]; // weak
extern char asc_9CC520[]; // idb
extern char asc_9CC528[]; // idb
extern char aPanel02_86[]; // idb
extern char aPanel03_31[]; // idb
extern char aPanel04_14[]; // idb
extern char aWintitle_98[]; // idb
extern char aTextfield01_1[]; // idb
extern char aTextfield04_1[]; // idb
extern char aTextfield03_1[]; // idb
extern char aTextfield06_0[]; // idb
extern char aText01_44[]; // idb
extern char aText02_24[]; // idb
extern char aText03_12[]; // idb
extern char aText04_5[]; // idb
extern char aText05_2[]; // idb
extern char aText02_1_1[]; // idb
extern char aText05_1_1[]; // idb
extern char aText06_2[]; // idb
extern char aOkbtnnor_4[]; // idb
extern char aOkbtnclick_4[]; // idb
extern char aOkbtnover_4[]; // idb
extern char aText02nor_0[]; // idb
extern char aText02click_0[]; // idb
extern char aText05nor_0[]; // idb
extern char aText05click_0[]; // idb
extern char aBtnnor0_3[]; // idb
extern char aBtnover0_3[]; // idb
extern char aClsnor_94[]; // idb
extern char aClsclick_94[]; // idb
extern char aClsover_94[]; // idb
extern char asc_9CC654[12]; // weak
extern char asc_9CC660[]; // idb
extern char aHelplinkcli_82[]; // idb
extern char aHelplinkove_82[]; // idb
extern char aMinihomesettin[]; // idb
extern int (__stdcall *mhSettingWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhSettingWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_vftable_)(void *p, char); // weak
extern char aLogin_1[6]; // weak
extern char aWorldmgr[9]; // weak
extern char aZoneD[]; // idb
extern int (__thiscall *Net::_vftable_)(void *p, char); // weak
extern int (__thiscall *NetMgr::_vftable_)(void *p, char); // weak
extern char aIndex_1[]; // idb
extern char aString_3[]; // idb
extern char aByte_0[]; // idb
extern char aWord[]; // idb
extern char aDwrd[]; // idb
extern char aDword[]; // idb
extern char aAtLeastOneColu[27]; // weak
extern char aUndefinedColum[22]; // weak
extern char err[]; // idb
extern char aComment[]; // idb
extern char aBrace[]; // idb
extern char aIgnore_0[]; // idb
extern char aDelimiter[]; // idb
extern char aExchange[]; // idb
extern char aTable_1[]; // idb
extern char aColumntype[]; // idb
extern char aColumnname[]; // idb
extern char aRecord[]; // idb
extern char aRecordin[]; // idb
extern char aEnd_4[]; // idb
extern char aColumnnameWith[]; // idb
extern char aColumnheaderWi[]; // idb
extern char aTooManyTables[]; // idb
extern char aR_19[]; // idb
extern char aUndefinedError[]; // idb
extern char aFileNotFound[]; // idb
extern char aUndefinedComma[]; // idb
extern int (__stdcall *List<ORRecord>::_vftable_[3])(__int16 hnd); // weak
extern int (__stdcall *List<ORTable>::_vftable_[3])(__int16 hnd); // weak
extern int (__stdcall *ListIteratorDefault<ORRecord>::_vftable_)(int, int pkGeometry); // weak
extern int (__stdcall *ListIteratorDefault<ORTable>::_vftable_)(int, int pkGeometry); // weak
extern int (__stdcall *ListEraser<ORRecord>::_vftable_)(int ele, int handle); // weak
extern int (__stdcall *ListEraser<ORTable>::_vftable_)(int ele, int handle); // weak
extern char aColumnTypeName[]; // idb
extern char aCannotAllocFie[]; // idb
extern char aStringNeedLeng[]; // idb
extern char aErrorInStringL[]; // idb
extern char aStringLengthMu[]; // idb
extern char aBraceMustBeClo[]; // idb
extern char aTooManyRecords[]; // idb
extern char aRecordAllocErr[]; // idb
extern char aRecordinHasNoT[]; // idb
extern char aUnknownTableNa[19]; // weak
extern char aRecordWithoutT[]; // idb
extern char aD_77[]; // idb
extern char aD_78[]; // idb
extern char aD_79[]; // idb
extern char aD_80[]; // idb
extern char aD_81[]; // idb
extern int (__stdcall *ListIteratorDefault<ORField>::_vftable_)(int, int pkGeometry); // weak
extern int (__stdcall *ListIteratorDefault<ORColumnHeader>::_vftable_)(int, int pkGeometry); // weak
extern int (__stdcall *MakePrimaryKeyColumn::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *MakePrimaryKey::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *OrderArgument::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *ColumnNameArgument::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *DataRecordArgument::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *ColumnCheckArgument::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *TargetColumnFindArgument::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *RecordDataCompareArgument::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *TableNameCompareArgument::_vftable_)(int ele, __int16 handle); // weak
extern int (__stdcall *ORColumnHeader::_vftable_)(int, int token); // weak
extern int (__stdcall *ORColumnHeaderIndex::_vftable_)(int, int token); // weak
extern int (__stdcall *ORColumnHeaderString::_vftable_)(int result, int targ); // weak
extern int (__stdcall *ORColumnHeaderByte::_vftable_)(int, int token); // weak
extern int (__stdcall *ORColumnHeaderWord::_vftable_)(int, int token); // weak
extern int (__stdcall *ORColumnHeaderDwrd::_vftable_)(int, int token); // weak
extern int (__stdcall *RecordNumber::_vftable_)(int ele, __int16 handle); // weak
extern char aCannotReadInde[]; // idb
extern char aCannotReadStri[]; // idb
extern char aCannotReadByte[]; // idb
extern char aD_82[]; // idb
extern char aCannotReadWord[]; // idb
extern char aD_83[]; // idb
extern char aCannotReadDwrd[]; // idb
extern char aD_84[]; // idb
extern int (*ORField::_vftable_[5])(); // weak
extern int (__stdcall *ORFieldIndex::_vftable_)(int contentstring, int contentindex); // weak
extern int (__stdcall *ORFieldString::_vftable_)(int contentstring, int contentindex); // weak
extern int (__stdcall *ORFieldByte::_vftable_)(int num, int contentindex); // weak
extern int (__stdcall *ORFieldWord::_vftable_)(int num, int contentindex); // weak
extern int (__stdcall *ORFieldDwrd::_vftable_)(int num, int contentindex); // weak
extern char aTooManyDelimit[20]; // weak
extern char aTooManyDelim_0[20]; // weak
extern char aTooManyExchang[18]; // weak
extern char aNoerr[6]; // weak
extern char aExtraDataExist[17]; // weak
extern char aUnexpectedEof[15]; // weak
extern char aInvalidCharact[18]; // weak
extern char aInvalidChara_0[18]; // weak
extern char aUnexpectedEo_0[15]; // weak
extern char aCommentExpecte[19]; // weak
extern char aGameWeddingent[]; // idb
extern _UNKNOWN unk_9CCEDF; // weak
extern char asc_9CCEE0[]; // idb
extern _UNKNOWN unk_9CCEE6; // weak
extern _UNKNOWN unk_9CCEE7; // weak
extern char aWeddingpropose[]; // idb
extern _UNKNOWN unk_9CCEFF; // weak
extern char asc_9CCF00[6]; // weak
extern _UNKNOWN unk_9CCF06; // weak
extern _UNKNOWN unk_9CCF07; // weak
extern char asc_9CCF08[]; // idb
extern _UNKNOWN unk_9CCF0E; // weak
extern _UNKNOWN unk_9CCF0F; // weak
extern char asc_9CCF10[]; // idb
extern char aPanel02_87[]; // idb
extern char asc_9CCF20[]; // idb
extern char aClsnor_95[]; // idb
extern char aClsclick_95[]; // idb
extern char aClsover_95[]; // idb
extern char aText01_45[]; // idb
extern char aText01_field[]; // idb
extern char aText02_25[]; // idb
extern char aText02_field[]; // idb
extern char aText03_13[]; // idb
extern char aText03_field[]; // idb
extern char aText04_6[]; // idb
extern char aText04_field[]; // idb
extern char aText05_3[]; // idb
extern char aBtn01nor_21[]; // idb
extern char aBtn01click_22[]; // idb
extern char aBtn01over_22[]; // idb
extern char aBtn02nor_15[]; // idb
extern char aBtn02click_13[]; // idb
extern char aBtn02over_12[]; // idb
extern int (__stdcall *WeddingEntryWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeddingEntryWin::_vftable_)(void *p, char); // weak
extern char aGameWeddinginf[]; // idb
extern _UNKNOWN unk_9CD252; // weak
extern _UNKNOWN unk_9CD253; // weak
extern char asc_9CD254[]; // idb
extern _UNKNOWN unk_9CD25A; // weak
extern _UNKNOWN unk_9CD25B; // weak
extern char aWeddinginfowin[]; // idb
extern _UNKNOWN unk_9CD26B; // weak
extern char asc_9CD26C[6]; // weak
extern _UNKNOWN unk_9CD272; // weak
extern _UNKNOWN unk_9CD273; // weak
extern char asc_9CD274[]; // idb
extern _UNKNOWN unk_9CD27A; // weak
extern _UNKNOWN unk_9CD27B; // weak
extern char aPlane_12[]; // idb
extern _UNKNOWN unk_9CD282; // weak
extern _UNKNOWN unk_9CD283; // weak
extern char asc_9CD284[]; // idb
extern _UNKNOWN unk_9CD28D; // weak
extern _UNKNOWN unk_9CD28E; // weak
extern _UNKNOWN unk_9CD28F; // weak
extern char aClsnor_96[]; // idb
extern _UNKNOWN unk_9CD297; // weak
extern char aClsclick_96[]; // idb
extern _UNKNOWN unk_9CD2A1; // weak
extern _UNKNOWN unk_9CD2A2; // weak
extern _UNKNOWN unk_9CD2A3; // weak
extern char aClsover_96[]; // idb
extern char asc_9CD2AC[12]; // weak
extern char asc_9CD2B8[]; // idb
extern char aHelplinkcli_83[]; // idb
extern _UNKNOWN unk_9CD2D2; // weak
extern _UNKNOWN unk_9CD2D3; // weak
extern char aHelplinkove_83[]; // idb
extern _UNKNOWN unk_9CD2E1; // weak
extern _UNKNOWN unk_9CD2E2; // weak
extern _UNKNOWN unk_9CD2E3; // weak
extern char aIconslot_43[]; // idb
extern _UNKNOWN unk_9CD2ED; // weak
extern char aText04_7[]; // idb
extern char aCategory_3[]; // idb
extern char aBase_4[5]; // weak
extern char aBase_5[]; // idb
extern char aFriendnor_3[]; // idb
extern char aFriendclick_3[]; // idb
extern char aFriendover_3[]; // idb
extern char aGuildnor_3[]; // idb
extern char aGuildclick_3[]; // idb
extern char aGuildover_3[]; // idb
extern char aMasternor_3[]; // idb
extern char aMasterclick_3[]; // idb
extern char aMasterover_3[]; // idb
extern char aWeddingnor_3[]; // idb
extern char aWeddingclick_3[]; // idb
extern char aWeddingover_3[]; // idb
extern char aPartymatchno_3[]; // idb
extern char aPartymatchcl_3[]; // idb
extern char aPartymatchov_3[]; // idb
extern char aGuildacadem_12[]; // idb
extern char aGuildacadem_13[]; // idb
extern char aGuildacadem_14[]; // idb
extern char aFriend_3[]; // idb
extern char aHolypromise_3[]; // idb
extern char aGuild_4[]; // idb
extern char aGuildacadem_15[]; // idb
extern char aWedding_3[]; // idb
extern char aPartymatch_3[]; // idb
extern char aText01_46[]; // idb
extern char aText01_field_0[]; // idb
extern char aText02_26[]; // idb
extern char aText02_field_0[]; // idb
extern char aText03_14[]; // idb
extern char aText03_field_0[]; // idb
extern char aWeddinginfo[]; // idb
extern int (__stdcall *WeddingInfoWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeddingInfoWin::_vftable_)(void *p, char); // weak
extern char aGameWeddingpro[]; // idb
extern _UNKNOWN unk_9CD702; // weak
extern char asc_9CD704[]; // idb
extern char aWeddingpropo_1[]; // idb
extern char asc_9CD724[6]; // weak
extern char asc_9CD72C[]; // idb
extern char asc_9CD734[]; // idb
extern char aPanel02_88[]; // idb
extern char aPanel03_32[]; // idb
extern char asc_9CD74C[]; // idb
extern char aClsnor_97[]; // idb
extern char aClsclick_97[]; // idb
extern char aClsover_97[]; // idb
extern char asc_9CD774[12]; // weak
extern char asc_9CD780[]; // idb
extern char aHelplinkcli_84[]; // idb
extern char aHelplinkove_84[]; // idb
extern char aText01_47[]; // idb
extern char aText01_field_1[]; // idb
extern char aBtn01nor_22[]; // idb
extern char aBtn01click_23[]; // idb
extern char aBtn01over_23[]; // idb
extern char aWeddingpropo_0[]; // idb
extern int (__stdcall *WeddingProposeInputWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeddingProposeInputWin::_vftable_)(void *p, char); // weak
extern char aGameWeddingp_0[]; // idb
extern _UNKNOWN unk_9CDA5B; // weak
extern char asc_9CDA5C[]; // idb
extern char aWeddingpropo_3[]; // idb
extern char asc_9CDA7C[6]; // weak
extern char asc_9CDA84[]; // idb
extern char asc_9CDA8C[]; // idb
extern char aPanel02_89[]; // idb
extern char aPanel03_33[]; // idb
extern char asc_9CDAA4[]; // idb
extern char asc_9CDAB0[12]; // weak
extern char asc_9CDABC[]; // idb
extern char aHelplinkcli_85[]; // idb
extern char aHelplinkove_85[]; // idb
extern char aText01_48[]; // idb
extern char aText01_field_2[]; // idb
extern char aText02_27[]; // idb
extern char aText02_field_1[]; // idb
extern char aBtn01nor_23[]; // idb
extern char aBtn01click_24[]; // idb
extern char aBtn01over_24[]; // idb
extern char aBtn02nor_16[]; // idb
extern char aBtn02click_14[]; // idb
extern char aBtn02over_13[]; // idb
extern char aWeddingpropo_2[]; // idb
extern int (__stdcall *WeddingProposeOutputWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeddingProposeOutputWin::_vftable_)(void *p, char); // weak
extern char aGameWeddingp_1[]; // idb
extern _UNKNOWN unk_9CDDDB; // weak
extern char asc_9CDDDC[]; // idb
extern _UNKNOWN unk_9CDDE2; // weak
extern char aWeddingpropo_5[]; // idb
extern char asc_9CDDFC[6]; // weak
extern char asc_9CDE04[]; // idb
extern char asc_9CDE0C[]; // idb
extern char aPanel02_90[]; // idb
extern char aPanel03_34[]; // idb
extern char asc_9CDE24[]; // idb
extern char aClsnor_98[]; // idb
extern char aClsclick_98[]; // idb
extern char aClsover_98[]; // idb
extern char asc_9CDE4C[12]; // weak
extern char asc_9CDE58[]; // idb
extern char aHelplinkcli_86[]; // idb
extern char aHelplinkove_86[]; // idb
extern char aText02_28[]; // idb
extern char aText02_field_2[]; // idb
extern char aText01_field_3[]; // idb
extern char aBtn01nor_24[]; // idb
extern char aBtn01click_25[]; // idb
extern char aBtn01over_25[]; // idb
extern char aWeddingpropo_4[]; // idb
extern int (__stdcall *WeddingProposeResultWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeddingProposeResultWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *WeddingTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *WeddingTask::_vftable_)(void *p, char); // weak
extern char aMetamorphosi_0[]; // idb
extern char aBird_idle[]; // idb
extern char aMetamorphosi_1[]; // idb
extern char aUnmetamorpho_0[]; // idb
extern char aDummy[]; // idb
extern char aUnmetamorpho_1[]; // idb
extern int (__thiscall *DirectionController::_vftable_)(void *p, std::_Nonscalar_ptr_iterator_tag __formal); // weak
extern int (__thiscall *DirectionControllers::_vftable_)(void *p, char); // weak
extern int (__thiscall *TimerController::_vftable_)(void *p, char); // weak
extern char aGameGuildacade[]; // idb
extern char asc_9CE1F0[6]; // weak
extern char asc_9CE1F8[]; // idb
extern char aGuildacademyra[]; // idb
extern char asc_9CE214[6]; // weak
extern char asc_9CE21C[]; // idb
extern char aIconslot_44[]; // idb
extern char asc_9CE230[]; // idb
extern char asc_9CE23C[]; // idb
extern char asc_9CE244[]; // idb
extern char asc_9CE250[]; // idb
extern char asc_9CE258[12]; // weak
extern char asc_9CE264[]; // idb
extern char aHelplinkcli_87[]; // idb
extern char aHelplinkove_87[]; // idb
extern char asc_9CE290[]; // idb
extern char aPanel03_35[]; // idb
extern char aGuild01[]; // idb
extern char aTitle1desc_1[]; // idb
extern char asc_9CE2B4[2]; // weak
extern char aGuild02[]; // idb
extern char aTitle2desc_0[]; // idb
extern char aGuild03[]; // idb
extern char aTitle3desc_0[]; // idb
extern char aColumnbarno_30[]; // idb
extern char aColumnbarcl_29[]; // idb
extern char aColumnbarov_27[]; // idb
extern char aColumn01_19[]; // idb
extern char aColumn02_13[]; // idb
extern char aColumn03_12[]; // idb
extern char aColumn04_10[]; // idb
extern char aColumn05_8[]; // idb
extern char aPanel02_91[]; // idb
extern char aSlidebar_sl_34[]; // idb
extern char asc_9CE36C[]; // idb
extern char asc_9CE37C[]; // idb
extern char aSlidebar_22[]; // idb
extern char aTitle01nor_13[]; // idb
extern char aTitle01clic_10[]; // idb
extern char aTitle01over_12[]; // idb
extern char aTitle02nor_11[]; // idb
extern char aTitle02clic_10[]; // idb
extern char aTitle02over_12[]; // idb
extern char aTitle03nor_11[]; // idb
extern char aTitle03clic_10[]; // idb
extern char aTitle03over_12[]; // idb
extern char aTitle04nor_11[]; // idb
extern char aTitle04click_9[]; // idb
extern char aTitle04over_11[]; // idb
extern char aTitle05nor_6[]; // idb
extern char aTitle05click_5[]; // idb
extern char aTitle05over_7[]; // idb
extern char aBtn01nor_25[]; // idb
extern char aBtn01click_26[]; // idb
extern char aBtn01over_26[]; // idb
extern char aYMD_3[]; // idb
extern char aD_85[]; // idb
extern char asc_9CE494[]; // idb
extern char aYMD_1[]; // idb
extern char aYMD_2[]; // idb
extern char aGuildacademyho[]; // idb
extern int (__stdcall *GuildAcademyHallOfFameWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyHallOfFameWin::_vftable_)(void *p, char); // weak
extern char aGameGuildaca_0[]; // idb
extern _UNKNOWN unk_9CE722; // weak
extern _UNKNOWN unk_9CE723; // weak
extern char asc_9CE724[6]; // weak
extern _UNKNOWN unk_9CE72A; // weak
extern _UNKNOWN unk_9CE72B; // weak
extern char asc_9CE72C[]; // idb
extern _UNKNOWN unk_9CE732; // weak
extern _UNKNOWN unk_9CE733; // weak
extern char aGuildacadem_16[]; // idb
extern _UNKNOWN unk_9CE751; // weak
extern char asc_9CE754[6]; // weak
extern char asc_9CE75C[]; // idb
extern char aIconslot_45[]; // idb
extern char asc_9CE770[]; // idb
extern char asc_9CE77C[]; // idb
extern char asc_9CE784[]; // idb
extern char asc_9CE790[]; // idb
extern char asc_9CE798[12]; // weak
extern char asc_9CE7A4[]; // idb
extern char aHelplinkcli_88[]; // idb
extern char aHelplinkove_88[]; // idb
extern char asc_9CE7D0[]; // idb
extern char aPanel02_92[]; // idb
extern char aGuildinfotext[]; // idb
extern char aGeminput01_0[]; // idb
extern char aGoldinput01_0[]; // idb
extern char aSilverinput0_0[]; // idb
extern char aCopperinput0_0[]; // idb
extern char aLevel02d[]; // idb
extern char a02dlv[]; // idb
extern char aCount02d[]; // idb
extern char aCount52[]; // idb
extern char aCount53[]; // idb
extern char a60Lv[6]; // weak
extern char aBtn01nor_26[]; // idb
extern char aBtn01click_27[]; // idb
extern char aBtn01over_27[]; // idb
extern char aBtn02nor_17[]; // idb
extern char aBtn02click_15[]; // idb
extern char aBtn02over_14[]; // idb
extern char aBtn03nor_8[]; // idb
extern char aBtn03click_6[]; // idb
extern char aBtn03over_7[]; // idb
extern char aIconslot02d_1[]; // idb
extern char aI64d_76[]; // idb
extern char aI64d_77[]; // idb
extern char aI64d_78[]; // idb
extern char aI64d_79[]; // idb
extern char a1_2[2]; // weak
extern char a1_3[2]; // weak
extern char aI64d_75[]; // idb
extern char aD_86[]; // idb
extern char asc_9CE910[]; // idb
extern char aGuildacademyit[]; // idb
extern int (__stdcall *GuildAcademyItemRewardInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyItemRewardInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyItemRewardWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyItemRewardWin::_vftable_)(void *p, char); // weak
extern char aGameGuildmen_3[]; // idb
extern char asc_9CEE10[]; // idb
extern char aGuildacademyme[]; // idb
extern char asc_9CEE2C[6]; // weak
extern char asc_9CEE34[]; // idb
extern char asc_9CEE3C[]; // idb
extern char aPanel02_93[]; // idb
extern char asc_9CEE4C[]; // idb
extern char asc_9CEE54[]; // idb
extern char asc_9CEE60[]; // idb
extern char asc_9CEE68[12]; // weak
extern char asc_9CEE74[]; // idb
extern char aHelplinkcli_89[]; // idb
extern char aHelplinkove_89[]; // idb
extern char asc_9CEEA0[]; // idb
extern char aBtn01nor_27[]; // idb
extern char aBtn01click_28[]; // idb
extern char aBtn01over_28[]; // idb
extern char aBtn02nor_18[]; // idb
extern char aBtn02click_16[]; // idb
extern char aBtn02over_15[]; // idb
extern char aBtn03nor_9[]; // idb
extern char aBtn03click_7[]; // idb
extern char aBtn03over_8[]; // idb
extern char aBtn04nor_5[]; // idb
extern char aBtn04click_4[]; // idb
extern char aBtn04over_4[]; // idb
extern char aBtn05nor_1[]; // idb
extern char aBtn05click_1[]; // idb
extern char aBtn05over_1[]; // idb
extern char aBtn06nor_0[]; // idb
extern char aBtn06click_0[]; // idb
extern char aBtn06over_0[]; // idb
extern char aBtn07nor[]; // idb
extern char aBtn07click[]; // idb
extern char aBtn07over[]; // idb
extern char aGuildmenu_4[]; // idb
extern int (__stdcall *GuildAcademyMenuWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyMenuWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildAcademyLeaveTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildAcademyLeaveTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyLeaveTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyLeaveTask::_vftable_)(void *p, char); // weak
extern char aGameGuildaca_1[]; // idb
extern _UNKNOWN unk_9CF276; // weak
extern _UNKNOWN unk_9CF277; // weak
extern char asc_9CF278[6]; // weak
extern _UNKNOWN unk_9CF27E; // weak
extern _UNKNOWN unk_9CF27F; // weak
extern char asc_9CF280[]; // idb
extern _UNKNOWN unk_9CF286; // weak
extern _UNKNOWN unk_9CF287; // weak
extern char aGuildacademymo[]; // idb
extern char asc_9CF2A8[6]; // weak
extern char asc_9CF2B0[]; // idb
extern char aIconslot_46[]; // idb
extern char asc_9CF2C4[]; // idb
extern char asc_9CF2D0[]; // idb
extern char asc_9CF2D8[]; // idb
extern char asc_9CF2E4[]; // idb
extern char asc_9CF2EC[12]; // weak
extern char asc_9CF2F8[]; // idb
extern char aHelplinkcli_90[]; // idb
extern char aHelplinkove_90[]; // idb
extern char asc_9CF324[]; // idb
extern char aPanel02_94[]; // idb
extern char aGuildinfotex_0[]; // idb
extern char aGeminput11[]; // idb
extern char aGoldinput11[]; // idb
extern char aSilverinput11[]; // idb
extern char aCopperinput11[]; // idb
extern char aLevel02d_0[]; // idb
extern char aDDlv[]; // idb
extern char aGeminput_5[9]; // weak
extern char aGoldinput_5[10]; // weak
extern char aSilverinput_5[12]; // weak
extern char aCopperinput_5[12]; // weak
extern char aS02d_4[]; // idb
extern char a0_25[2]; // weak
extern char aBtn01nor_28[]; // idb
extern char aBtn01click_29[]; // idb
extern char aBtn01over_29[]; // idb
extern char aBtn02nor_19[]; // idb
extern char aBtn02click_17[]; // idb
extern char aBtn02over_16[]; // idb
extern char aBtn03nor_10[]; // idb
extern char aBtn03click_8[]; // idb
extern char aBtn03over_9[]; // idb
extern char aI64d_84[]; // idb
extern char aI64d_85[]; // idb
extern char aI64d_86[]; // idb
extern char aI64d_87[]; // idb
extern char aI64d_80[]; // idb
extern char aI64d_81[]; // idb
extern char aI64d_82[]; // idb
extern char aI64d_83[]; // idb
extern char aGuildacademygi[]; // idb
extern int (__stdcall *GuildAcademyMoneyRewardWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyMoneyRewardWin::_vftable_)(void *p, char); // weak
extern char aGameGuildedi_0[]; // idb
extern char asc_9CF6EC[]; // idb
extern char aGuildacadem_17[]; // idb
extern char asc_9CF710[6]; // weak
extern char asc_9CF718[]; // idb
extern char asc_9CF720[]; // idb
extern char aPanel02_95[]; // idb
extern char asc_9CF730[]; // idb
extern char asc_9CF738[]; // idb
extern char asc_9CF744[]; // idb
extern char asc_9CF74C[]; // idb
extern char aAddfrndnor_2[]; // idb
extern char aAddfrndclick_3[]; // idb
extern char aAddfrndover_2[]; // idb
extern char aAddfrndnor01_1[]; // idb
extern char aAddfrndclick_4[]; // idb
extern char aAddfrndover0_1[]; // idb
extern char aText01_49[]; // idb
extern int (__stdcall *GuildAcademyNoticeEditorWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyNoticeEditorWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ISingletonTask<GuildAcademyNotifyTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildAcademyNotifyTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyNotifyTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyNotifyTask::_vftable_)(void *p, char); // weak
extern char aGameGuildaca_2[]; // idb
extern char asc_9CFA84[6]; // weak
extern char asc_9CFA8C[]; // idb
extern char aGuildacadem_19[]; // idb
extern char asc_9CFAA8[6]; // weak
extern char asc_9CFAB0[]; // idb
extern char aIconslot_47[]; // idb
extern char asc_9CFAC4[]; // idb
extern char asc_9CFAD0[]; // idb
extern char asc_9CFAD8[]; // idb
extern char asc_9CFAE4[]; // idb
extern char asc_9CFAEC[12]; // weak
extern char asc_9CFAF8[]; // idb
extern char aHelplinkcli_91[]; // idb
extern char aHelplinkove_91[]; // idb
extern char asc_9CFB24[]; // idb
extern char aPanel03_36[]; // idb
extern char aFinalrecruitda[]; // idb
extern char aDate_0[]; // idb
extern char aColumnbarno_31[]; // idb
extern char aColumnbarcl_30[]; // idb
extern char aColumnbarov_28[]; // idb
extern char aColumn01_20[]; // idb
extern char aColumn02_14[]; // idb
extern char aColumn03_13[]; // idb
extern char aColumn04_11[]; // idb
extern char aPanel02_96[]; // idb
extern char aSlidebar_sl_35[]; // idb
extern char asc_9CFBD0[]; // idb
extern char asc_9CFBE0[]; // idb
extern char aSlidebar_23[]; // idb
extern char aTitle01nor_14[]; // idb
extern char aTitle01clic_11[]; // idb
extern char aTitle01over_13[]; // idb
extern char aTitle02nor_12[]; // idb
extern char aTitle02clic_11[]; // idb
extern char aTitle02over_13[]; // idb
extern char aTitle03nor_12[]; // idb
extern char aTitle03clic_11[]; // idb
extern char aTitle03over_13[]; // idb
extern char aTitle04nor_12[]; // idb
extern char aTitle04clic_10[]; // idb
extern char aTitle04over_12[]; // idb
extern char aBtn01nor_29[]; // idb
extern char aBtn01click_30[]; // idb
extern char aBtn01over_30[]; // idb
extern char aBtn02nor_20[]; // idb
extern char aBtn02click_18[]; // idb
extern char aBtn02over_17[]; // idb
extern char aBtn03nor_11[]; // idb
extern char aBtn03click_9[]; // idb
extern char aBtn03over_10[]; // idb
extern char aYMD_4[]; // idb
extern char asc_9CFD14[]; // idb
extern char asc_9CFD18[]; // idb
extern char aGuildacadem_18[]; // idb
extern int (__stdcall *GuildAcademyRankingWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyRankingWin::_vftable_)(void *p, char); // weak
extern char aGameGuildaca_3[]; // idb
extern char asc_9CFF90[6]; // weak
extern _UNKNOWN unk_9CFF96; // weak
extern char asc_9CFF98[]; // idb
extern char aGuildacadem_20[]; // idb
extern char asc_9CFFB4[6]; // weak
extern char asc_9CFFBC[]; // idb
extern char aIconslot_48[]; // idb
extern char asc_9CFFD0[]; // idb
extern char asc_9CFFDC[]; // idb
extern char asc_9CFFE4[]; // idb
extern char asc_9CFFF0[]; // idb
extern char asc_9CFFF8[12]; // weak
extern char asc_9D0004[]; // idb
extern char aHelplinkcli_92[]; // idb
extern char aHelplinkove_92[]; // idb
extern char aPlane_13[]; // idb
extern char aColumnbarno_32[]; // idb
extern char aColumnbarcl_31[]; // idb
extern char aColumnbarov_29[]; // idb
extern char aColumn01_21[]; // idb
extern char aColumn02_15[]; // idb
extern char aColumn03_14[]; // idb
extern char aColumn04_12[]; // idb
extern char aColumn05_9[]; // idb
extern char aPlane01_29[]; // idb
extern char aSlidebar_sl_36[]; // idb
extern char asc_9D00C4[]; // idb
extern char asc_9D00D4[]; // idb
extern char aSlidebar_24[]; // idb
extern char aTitle01nor_15[]; // idb
extern char aTitle01clic_12[]; // idb
extern char aTitle01over_14[]; // idb
extern char aTitle02nor_13[]; // idb
extern char aTitle02clic_12[]; // idb
extern char aTitle02over_14[]; // idb
extern char aTitle03nor_13[]; // idb
extern char aTitle03clic_12[]; // idb
extern char aTitle03over_14[]; // idb
extern char aTitle04nor_13[]; // idb
extern char aTitle04clic_11[]; // idb
extern char aTitle04over_13[]; // idb
extern char aTitle05nor_7[]; // idb
extern char aTitle05click_6[]; // idb
extern char aTitle05over_8[]; // idb
extern char aBtn01nor_30[]; // idb
extern char aBtn01click_31[]; // idb
extern char aBtn01over_31[]; // idb
extern char aBtn02nor_21[]; // idb
extern char aBtn02click_19[]; // idb
extern char aBtn02over_18[]; // idb
extern char aBtn03nor_12[]; // idb
extern char aBtn03click_10[]; // idb
extern char aBtn03over_11[]; // idb
extern char aText01_50[]; // idb
extern char aSearch_input_2[]; // idb
extern char aSearchbtnnor_0[]; // idb
extern char aSearchbtncli_0[]; // idb
extern char aSearchbtnove_0[]; // idb
extern char aBtn04nor_6[]; // idb
extern char aBtn04click_5[]; // idb
extern char aBtn04over_5[]; // idb
extern char asc_9D0290[]; // idb
extern char asc_9D0294[]; // idb
extern char asc_9D0298[]; // idb
extern char aGuildacademyse[]; // idb
extern char asc_9D02B0[]; // idb
extern char aSearchacademy_[]; // idb
extern int (__stdcall *GuildAcademySelectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademySelectWin::_vftable_)(void *p, char); // weak
extern char aGameNpcbank__0[]; // idb
extern _UNKNOWN unk_9D0525; // weak
extern _UNKNOWN unk_9D0526; // weak
extern _UNKNOWN unk_9D0527; // weak
extern char asc_9D0528[]; // idb
extern _UNKNOWN unk_9D052E; // weak
extern char byte_9D052F; // idb
extern char aStoragewin[]; // idb
extern char byte_9D053B; // idb
extern char asc_9D053C[6]; // weak
extern char asc_9D0544[]; // idb
extern char asc_9D054C[]; // idb
extern char asc_9D0554[]; // idb
extern char asc_9D0560[]; // idb
extern char asc_9D0568[12]; // weak
extern char asc_9D0574[]; // idb
extern char aHelplinkcli_93[]; // idb
extern char aHelplinkove_93[]; // idb
extern char asc_9D05A0[]; // idb
extern char aPanel02_97[]; // idb
extern char asc_9D05B0[]; // idb
extern char aIconslot_49[]; // idb
extern char aIconslot03d_9[]; // idb
extern char aTab01_off_7[]; // idb
extern char aTab01_dis_1[]; // idb
extern char aTab01_on_8[]; // idb
extern char aNum01_4[]; // idb
extern char aTab02_off_6[]; // idb
extern char aTab02_dis_0[]; // idb
extern char aTab02_on_6[]; // idb
extern char aNum02_1[]; // idb
extern char aDrawnor_1[]; // idb
extern char aDrawclick_1[]; // idb
extern char aDrawover_1[]; // idb
extern char aPaynor_0[]; // idb
extern char aPayclick_0[]; // idb
extern char aPayover_0[]; // idb
extern char aGeminput_6[]; // idb
extern char aGembtn_8[]; // idb
extern char aGembtn_9[]; // idb
extern char aGembtn_10[]; // idb
extern char aGoldinput_6[]; // idb
extern char aGoldbtn_8[]; // idb
extern char aGoldbtn_9[]; // idb
extern char aGoldbtn_10[]; // idb
extern char aSilverinput_6[]; // idb
extern char aSilverbtn_9[]; // idb
extern char aSilverbtn_10[]; // idb
extern char aSilverbtn_11[]; // idb
extern char aCopperinput_6[]; // idb
extern char aCopperbtn_8[]; // idb
extern char aCopperbtn_9[]; // idb
extern char aCopperbtn_10[]; // idb
extern char aI64d_88[]; // idb
extern char aI64d_89[]; // idb
extern char aI64d_90[]; // idb
extern char aI64d_91[]; // idb
extern char aNpcbank_0[]; // idb
extern int (__stdcall *GuildAcademyStorageTabWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyStorageTabWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyStorageInvWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyStorageInvWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyStorageWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyStorageWin::_vftable_)(void *p, char); // weak
extern char aGameGuildaca_4[]; // idb
extern _UNKNOWN unk_9D0E7D; // weak
extern _UNKNOWN unk_9D0E7E; // weak
extern char byte_9D0E7F; // idb
extern char asc_9D0E80[]; // idb
extern char byte_9D0E86; // idb
extern char byte_9D0E87; // idb
extern char aGuildacadem_21[]; // idb
extern char asc_9D0E98[6]; // weak
extern char byte_9D0E9E[2]; // idb
extern char asc_9D0EA0[]; // idb
extern char aIconslot_50[]; // idb
extern char asc_9D0EB4[]; // idb
extern char asc_9D0EC0[]; // idb
extern char asc_9D0EC8[]; // idb
extern char asc_9D0ED4[]; // idb
extern char asc_9D0EDC[12]; // weak
extern char asc_9D0EE8[]; // idb
extern char aHelplinkcli_94[]; // idb
extern char aHelplinkove_94[]; // idb
extern char asc_9D0F14[]; // idb
extern char aPanel02_98[]; // idb
extern char aPanel03_37[]; // idb
extern char aPanel04_15[]; // idb
extern char aText03_15[]; // idb
extern char aCategory_4[]; // idb
extern char aColumnbarno_33[]; // idb
extern char aColumnbarcl_32[]; // idb
extern char aColumnbarov_30[]; // idb
extern char aColumn01_22[]; // idb
extern char aColumn02_16[]; // idb
extern char aColumn03_15[]; // idb
extern char aColumn04_13[]; // idb
extern char aColumn05_10[]; // idb
extern char aSubtext01_11[]; // idb
extern char aColumnbarno_34[]; // idb
extern char aColumn06_6[]; // idb
extern char aSubtext02_6[]; // idb
extern char aColumnbar01n_4[]; // idb
extern char aColumnbar01c_2[]; // idb
extern char aColumnbar01o_2[]; // idb
extern char aColumnhis01_0[]; // idb
extern char aColumnhis02_0[]; // idb
extern char aColumnhis03_0[]; // idb
extern char aSubtext03_0[]; // idb
extern char aSlidebar_sl_37[]; // idb
extern char asc_9D1064[]; // idb
extern char asc_9D1078[]; // idb
extern char aSlidebar02_3[]; // idb
extern char asc_9D1098[]; // idb
extern char asc_9D10AC[]; // idb
extern char aSlidebar01_8[]; // idb
extern char asc_9D10CC[]; // idb
extern char asc_9D10E0[]; // idb
extern char aSlidebar03_1[]; // idb
extern char aTab01_off_8[]; // idb
extern char aTab01_on_9[]; // idb
extern char aTab02_off_7[]; // idb
extern char aTab02_on_7[]; // idb
extern char aTab03_off_4[]; // idb
extern char aTab03_on_5[]; // idb
extern char aTitle01nor_16[]; // idb
extern char aTitle01clic_13[]; // idb
extern char aTitle01over_15[]; // idb
extern char aTitle02nor_14[]; // idb
extern char aTitle02clic_13[]; // idb
extern char aTitle02over_15[]; // idb
extern char aTitle03nor_14[]; // idb
extern char aTitle03clic_13[]; // idb
extern char aTitle03over_15[]; // idb
extern char aTitle04nor_14[]; // idb
extern char aTitle04clic_12[]; // idb
extern char aTitle04over_14[]; // idb
extern char aTitle05nor_8[]; // idb
extern char aTitle05click_7[]; // idb
extern char aTitle05over_9[]; // idb
extern char aTitlehis01no_0[]; // idb
extern char aTitlehis01cl_0[]; // idb
extern char aTitelhis01over[]; // idb
extern char aTitlehis02no_0[]; // idb
extern char aTitlehis02cl_0[]; // idb
extern char aTitelhis02over[]; // idb
extern char aTitlehis03no_0[]; // idb
extern char aTitlehis03cl_0[]; // idb
extern char aTitelhis03over[]; // idb
extern char aText01_51[]; // idb
extern char aBtn01nor_31[]; // idb
extern char aBtn01click_32[]; // idb
extern char aBtn01over_32[]; // idb
extern char aBtn02nor_22[]; // idb
extern char aBtn02click_20[]; // idb
extern char aBtn02over_19[]; // idb
extern char aBtn03nor_13[]; // idb
extern char aBtn03click_11[]; // idb
extern char aBtn03over_12[]; // idb
extern char aBtn05nor_2[]; // idb
extern char aBtn05click_2[]; // idb
extern char aBtn05over_2[]; // idb
extern char aBase_6[]; // idb
extern char aFriendnor_4[]; // idb
extern char aFriendclick_4[]; // idb
extern char aFriendover_4[]; // idb
extern char aGuildnor_4[]; // idb
extern char aGuildclick_4[]; // idb
extern char aGuildover_4[]; // idb
extern char aGuildacadem_22[]; // idb
extern char aGuildacadem_23[]; // idb
extern char aGuildacadem_24[]; // idb
extern char aMasternor_4[]; // idb
extern char aMasterclick_4[]; // idb
extern char aMasterover_4[]; // idb
extern char aWeddingnor_4[]; // idb
extern char aWeddingclick_4[]; // idb
extern char aWeddingover_4[]; // idb
extern char aPartymatchno_4[]; // idb
extern char aPartymatchcl_4[]; // idb
extern char aPartymatchov_4[]; // idb
extern char aFriend_4[]; // idb
extern char aGuild_5[]; // idb
extern char aGuildacadem_25[]; // idb
extern char aHolypromise_4[]; // idb
extern char aWedding_4[]; // idb
extern char aPartymatch_4[]; // idb
extern char asc_9D147C[]; // idb
extern char aDDD_4[]; // idb
extern char aLvD_1[]; // idb
extern char asc_9D1494[]; // idb
extern char asc_9D1498[]; // idb
extern char asc_9D14A0[]; // idb
extern char asc_9D14A8[]; // idb
extern char aLES[]; // idb
extern char aGuildacademywi[]; // idb
extern char aDDD_5[]; // idb
extern int (__stdcall *ISingletonTask<GuildAcademyMemberVanishTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildAcademyMemberVanishTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyMemberVanishTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyMemberVanishTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyWin::_vftable_)(void *p, char); // weak
extern char aAcademy_cannot[]; // idb
extern int (__stdcall *ISingletonTask<GuildAcademyJoinReqTask>::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ISingletonTask<GuildAcademyJoinReqTask>::_vftable_)(void *p, char); // weak
extern int (__stdcall *GuildAcademyJoinReqTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyJoinReqTask::_vftable_)(void *p, char); // weak
extern char aGuild_cannot_1[]; // idb
extern int (__stdcall *CClientGuildAcademyMember::_vftable_[12])(int pAck); // weak
extern int (__stdcall *GuildAcademyMemberTask::_vftable_[12])(int pAck); // weak
extern int (__stdcall *GuildAcademyMemberTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyMemberTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *CClientGuildAcademySelectList::_vftable_[2])(int); // weak
extern int (__stdcall *GuildAcademySelectTask::_vftable_[2])(int); // weak
extern int (__stdcall *GuildAcademySelectTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademySelectTask::_vftable_)(void *p, char); // weak
extern char aI64d_92[]; // idb
extern char aI64d_93[]; // idb
extern char aI64d_94[]; // idb
extern char aI64d_95[]; // idb
extern char aI64d_96[]; // idb
extern char aI64d_97[]; // idb
extern char aI64d_98[]; // idb
extern char asc_9D1954[]; // idb
extern int (__stdcall *GuildAcademyTask::_vftable_[20])(int pAck); // weak
extern int (__stdcall *GuildAcademyTask::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GuildAcademyTask::_vftable_)(void *p, char); // weak
extern int (__stdcall *CClientGuildAcademy::_vftable_[20])(int pAck); // weak
extern _UNKNOWN unk_9D1A3C; // weak
extern char byte_9D1A3D; // idb
extern char byte_9D1A3E; // idb
extern char byte_9D1A3F; // idb
extern char byte_9D1A40; // idb
extern _UNKNOWN unk_9D1A41; // weak
extern int (__thiscall *RaidInfo::_vftable_)(void *p, char); // weak
extern char aEntryiconwin[]; // idb
extern char asc_9D1A64[6]; // weak
extern _UNKNOWN unk_9D1A6A; // weak
extern _UNKNOWN unk_9D1A6B; // weak
extern char aParty_2dmember[]; // idb
extern _UNKNOWN unk_9D1A85; // weak
extern char byte_9D1A86; // idb
extern _UNKNOWN unk_9D1A87; // weak
extern char aParty_2dmemb_0[]; // idb
extern char aParty_2dmemb_1[]; // idb
extern _UNKNOWN unk_9D1AB9; // weak
extern _UNKNOWN unk_9D1ABA; // weak
extern _UNKNOWN unk_9D1ABB; // weak
extern char aParty_2dmemb_2[]; // idb
extern char aParty_2dmemb_3[]; // idb
extern char aParty_2dmemb_4[]; // idb
extern char aParty_2dmemb_5[]; // idb
extern _UNKNOWN unk_9D1B27; // weak
extern char aParty_2dmemb_6[]; // idb
extern char aParty_2dmemb_7[]; // idb
extern _UNKNOWN unk_9D1B66; // weak
extern _UNKNOWN unk_9D1B67; // weak
extern char aParty_2dmemb_8[]; // idb
extern _UNKNOWN unk_9D1B86; // weak
extern char byte_9D1B87; // idb
extern char aParty_2dmemb_9[]; // idb
extern char aChief01[]; // idb
extern char aChief02[]; // idb
extern char aRooter[]; // idb
extern char aRooter_0[]; // idb
extern char aGameMessage_12[]; // idb
extern char asc_9D1BE0[8]; // weak
extern char asc_9D1BE8[]; // idb
extern char aExpeditionmemb[]; // idb
extern char asc_9D1C08[6]; // weak
extern char asc_9D1C10[]; // idb
extern char aBtnnor02_20[]; // idb
extern char aBtnclick02_20[]; // idb
extern char aBtnover02_20[]; // idb
extern char aBtnnor03_12[]; // idb
extern char aBtnclick03_12[]; // idb
extern char aBtnover03_12[]; // idb
extern char aLotinput_9[]; // idb
extern char aGameRaidwin_ni[]; // idb
extern char asc_9D1C80[6]; // weak
extern char asc_9D1C88[]; // idb
extern char aRaidwin_0[]; // idb
extern char asc_9D1C98[6]; // weak
extern char asc_9D1CA0[]; // idb
extern char aPlane_14[]; // idb
extern char aPlane01_30[]; // idb
extern char asc_9D1CB8[]; // idb
extern char asc_9D1CC4[]; // idb
extern char asc_9D1CCC[]; // idb
extern char asc_9D1CD8[]; // idb
extern char aOkdisable03[]; // idb
extern char aOkover03[]; // idb
extern char aOkclick03[]; // idb
extern char aOknor03[]; // idb
extern char aOkdisable01[]; // idb
extern char aOkover01[]; // idb
extern char aOkclick01[]; // idb
extern char aOknor01[]; // idb
extern char aOkdisable02[]; // idb
extern char aOkover02[]; // idb
extern char aOkclick02[]; // idb
extern char aOknor02[]; // idb
extern char aOknor01_0[]; // idb
extern char asc_9D1D6C[12]; // weak
extern char aHelplinkcli_96[]; // idb
extern char aHelplinkove_96[]; // idb
extern char asc_9D1D98[]; // idb
extern char aGainmethod_0[]; // idb
extern char aItemgrade_1[]; // idb
extern char aGainmethodov_0[]; // idb
extern char aGainmethodcl_0[]; // idb
extern char aGainmethodno_0[]; // idb
extern char aItemgradeove_0[]; // idb
extern char aItemgradecli_0[]; // idb
extern char aItemgradenor_0[]; // idb
extern char aGainmethod_t_0[]; // idb
extern char aItemgrade_te_0[]; // idb
extern char aParty_2dover[]; // idb
extern char aParty_2dclick[]; // idb
extern char aParty_2dnor_0[]; // idb
extern char aParty01membe_1[]; // idb
extern char aParty01membe_2[]; // idb
extern char aChief01_0[]; // idb
extern char aChief02_0[]; // idb
extern char aParty01membe_3[]; // idb
extern char aRooter_1[]; // idb
extern char aParty01membe_4[]; // idb
extern char aParty01membe_5[]; // idb
extern char aParty01membe_6[]; // idb
extern char aParty01membe_7[]; // idb
extern char aParty01membe_8[]; // idb
extern char aParty01membe_9[]; // idb
extern char aParty01memb_10[]; // idb
extern char aParty01memb_11[]; // idb
extern char aParty01memb_12[]; // idb
extern char a__5[2]; // weak
extern char aD_87[]; // idb
extern char aRaidwin[]; // idb
extern char aGameRaidpartyw[]; // idb
extern char asc_9D1FD0[8]; // weak
extern char aParty01member0[]; // idb
extern char aExpedtionparty[]; // idb
extern char asc_9D2004[]; // idb
extern char aParty01over[]; // idb
extern char aParty01click[]; // idb
extern char aParty01nor[]; // idb
extern char aParty01membe_0[]; // idb
extern char asc_9D204C[]; // idb
extern char asc_9D2054[]; // idb
extern char asc_9D2060[]; // idb
extern char aMaxover_0[]; // idb
extern char aMaxclick_0[]; // idb
extern char aMaxnor_0[]; // idb
extern char aMinover_0[]; // idb
extern char aMinclick_0[]; // idb
extern char aMinnor_0[]; // idb
extern char aHp_fighter[11]; // weak
extern char aHp_fighter_0[]; // idb
extern char aHp_cleric[]; // idb
extern char aHp_archer[]; // idb
extern char aHp_mage[]; // idb
extern char aHp_joker[]; // idb
extern char aHp_sentinel[]; // idb
extern char aS_2dname[]; // idb
extern char aParty01member_[]; // idb
extern char a2_10[]; // idb
extern char aGameBuffdebu_0[]; // idb
extern char aCharbuffbox0_3[]; // idb
extern char aCharbuffbox0_4[]; // idb
extern char aGameRaidroot_0[]; // idb
extern char asc_9D2178[6]; // weak
extern char asc_9D2180[]; // idb
extern char aExpeditionro_0[]; // idb
extern char asc_9D21A0[]; // idb
extern char asc_9D21A8[]; // idb
extern char aColumnbarno_35[]; // idb
extern char aColumnbarov_31[]; // idb
extern char aColumnbarcl_33[]; // idb
extern char aColumn_4[]; // idb
extern char aTextbox_10[]; // idb
extern char aSlidebar_sl_38[]; // idb
extern char asc_9D220C[]; // idb
extern char asc_9D221C[]; // idb
extern char aSlidebar_25[]; // idb
extern char asc_9D2238[]; // idb
extern char asc_9D2240[]; // idb
extern char asc_9D224C[]; // idb
extern char aGameRaidrootop[]; // idb
extern char asc_9D226C[6]; // weak
extern char asc_9D2274[]; // idb
extern char aExpeditionroot[]; // idb
extern char asc_9D2294[6]; // weak
extern char asc_9D229C[]; // idb
extern char asc_9D22A4[]; // idb
extern char asc_9D22AC[]; // idb
extern char asc_9D22B4[]; // idb
extern char aRootitemtext01[]; // idb
extern char aRootitemtext02[]; // idb
extern char aRootitemtext03[]; // idb
extern char aRootitemtext04[]; // idb
extern char aRootitemtext05[]; // idb
extern char asc_9D2310[]; // idb
extern char asc_9D2318[]; // idb
extern char asc_9D2324[]; // idb
extern char aBtnover_9[]; // idb
extern char aBtnclick_9[]; // idb
extern char aBtnnor_8[]; // idb
extern char aRootitem01over[]; // idb
extern char aRootitem01clic[]; // idb
extern char aRootitem01nor[]; // idb
extern char aRootitem02over[]; // idb
extern char aRootitem02clic[]; // idb
extern char aRootitem02nor[]; // idb
extern char aRootitem03over[]; // idb
extern char aRootitem03clic[]; // idb
extern char aRootitem03nor[]; // idb
extern char aRootitem04over[]; // idb
extern char aRootitem04clic[]; // idb
extern char aRootitem04nor[]; // idb
extern char aRootitem05over[]; // idb
extern char aRootitem05clic[]; // idb
extern char aRootitem05nor[]; // idb
extern char asc_9D2438[12]; // weak
extern char aHelplinkcli_95[]; // idb
extern char aHelplinkove_95[]; // idb
extern char asc_9D2464[]; // idb
extern char aRootname[]; // idb
extern char aRaidrootoption[]; // idb
extern int (__stdcall *ExpeditionMemberAddWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ExpeditionMemberAddWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ExpeditionLootSelectWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ExpeditionLootSelectWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *EntryIconWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *EntryIconWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ExpeditionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ExpeditionWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ExpeditionPartyWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ExpeditionPartyWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *ExpeditionLootOptionWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ExpeditionLootOptionWin::_vftable_)(void *p, char); // weak
extern char asc_9D31B4[]; // idb
extern char aI64dSSS[]; // idb
extern _UNKNOWN unk_9D31CF; // weak
extern char aI64dSS[]; // idb
extern char aI64dS_2[]; // idb
extern _UNKNOWN unk_9D31E5; // weak
extern _UNKNOWN unk_9D31E6; // weak
extern _UNKNOWN unk_9D31E7; // weak
extern char asc_9D31E8[]; // idb
extern _UNKNOWN unk_9D31EA; // weak
extern _UNKNOWN unk_9D31EB; // weak
extern char asc_9D31EC[]; // idb
extern _UNKNOWN unk_9D31F2; // weak
extern _UNKNOWN unk_9D31F3; // weak
extern char aGameGb_changec[]; // idb
extern _UNKNOWN unk_9D320B; // weak
extern char asc_9D320C[]; // idb
extern _UNKNOWN unk_9D3212; // weak
extern _UNKNOWN unk_9D3213; // weak
extern char aCoinexchangewi[]; // idb
extern char asc_9D3224[6]; // weak
extern _UNKNOWN unk_9D322A; // weak
extern _UNKNOWN unk_9D322B; // weak
extern char asc_9D322C[]; // idb
extern _UNKNOWN unk_9D3232; // weak
extern _UNKNOWN unk_9D3233; // weak
extern char asc_9D3234[]; // idb
extern char asc_9D323C[]; // idb
extern _UNKNOWN unk_9D3245; // weak
extern char aCoinchangeoff[]; // idb
extern char aCoinchangeon[]; // idb
extern char aMoneychangeoff[]; // idb
extern char aMoneychangeon[]; // idb
extern char aText01_54[]; // idb
extern char aText02_31[]; // idb
extern char aText03_18[]; // idb
extern char aCoin_1[]; // idb
extern char aTextcoin01_1[]; // idb
extern char aCoin_2[]; // idb
extern char aTextcoin02_1[]; // idb
extern char a000000000000[]; // idb
extern char aText04_10[]; // idb
extern char aText06_3[]; // idb
extern char aChangebtnoff[]; // idb
extern char aChangebtnover[]; // idb
extern char aChangebtnclick[]; // idb
extern char aChangebtnnor[]; // idb
extern char asc_9D3328[]; // idb
extern char asc_9D3330[]; // idb
extern char asc_9D333C[]; // idb
extern char a0_26[]; // idb
extern char aCopperinput_7[]; // idb
extern char a0_27[]; // idb
extern char aSilverinput_7[]; // idb
extern char a0_28[]; // idb
extern char aGoldinput_7[]; // idb
extern char a0_29[]; // idb
extern char aGeminput_7[]; // idb
extern char aText05_4[]; // idb
extern char aText05_5[]; // idb
extern char asc_9D3394[]; // idb
extern char asc_9D339C[]; // idb
extern char asc_9D33A4[]; // idb
extern char asc_9D33AC[]; // idb
extern char asc_9D33B4[]; // idb
extern char asc_9D33BC[]; // idb
extern char asc_9D33C4[]; // idb
extern char asc_9D33CC[]; // idb
extern char asc_9D33D4[]; // idb
extern char asc_9D33DC[]; // idb
extern char asc_9D33E4[]; // idb
extern char asc_9D33EC[]; // idb
extern char asc_9D33F4[]; // idb
extern char asc_9D33FC[]; // idb
extern char asc_9D3404[]; // idb
extern char asc_9D340C[]; // idb
extern char aGameGb_moneyin[]; // idb
extern char asc_9D3430[]; // idb
extern char aGamblewin[]; // idb
extern char asc_9D3444[6]; // weak
extern char asc_9D344C[]; // idb
extern char asc_9D3454[]; // idb
extern char asc_9D345C[]; // idb
extern char asc_9D3464[]; // idb
extern char asc_9D3470[]; // idb
extern char aBtnover_10[]; // idb
extern char aBtnclick_10[]; // idb
extern char aBtnnor_9[]; // idb
extern char asc_9D3494[]; // idb
extern char aText01_52[]; // idb
extern char aText02_29[]; // idb
extern char aCoin[]; // idb
extern char aTextcoin01[]; // idb
extern char aCoin_0[]; // idb
extern char aTextcoin02[]; // idb
extern char a000000000[]; // idb
extern char aText03_16[]; // idb
extern char a000000000_0[]; // idb
extern char aText04_8[]; // idb
extern char aGameGb_money_0[]; // idb
extern char aLoadfail_25[]; // idb
extern char aGameGb_money_1[]; // idb
extern char aMinimumnor_1[]; // idb
extern char aMinimumclick_0[]; // idb
extern char aMinimumover_0[]; // idb
extern char aGameGb_moneyca[]; // idb
extern char asc_9D358C[]; // idb
extern char aGamblehousecar[]; // idb
extern char asc_9D35A8[6]; // weak
extern char asc_9D35B0[]; // idb
extern char asc_9D35B8[]; // idb
extern char asc_9D35C0[]; // idb
extern char asc_9D35C8[]; // idb
extern char asc_9D35D4[]; // idb
extern char asc_9D35DC[]; // idb
extern char aText01_53[]; // idb
extern char aText02_30[]; // idb
extern char aTextcoin01_0[]; // idb
extern char aTextcoin02_0[]; // idb
extern char a000000000_1[]; // idb
extern char aText03_17[]; // idb
extern char a000000000_2[]; // idb
extern char aText04_9[]; // idb
extern int (__stdcall *CoinEditWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CoinEditWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *CoinExchangeWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *CoinExchangeWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GambleWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GambleWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GambleMiniWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GambleMiniWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GambleHouseCardWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GambleHouseCardWin::_vftable_)(void *p, char); // weak
extern char aAvatar_2d[]; // idb
extern char aD_88[]; // idb
extern char asc_9D415C[]; // idb
extern char asc_9D4160[]; // idb
extern char asc_9D4164[]; // idb
extern char aGameDicegame_0[]; // idb
extern char asc_9D4180[6]; // weak
extern char asc_9D4188[]; // idb
extern char byte_9D418F; // idb
extern char aDicegame[]; // idb
extern _UNKNOWN unk_9D419A; // weak
extern _UNKNOWN unk_9D419B; // weak
extern char aTimmerfill[]; // idb
extern _UNKNOWN unk_9D41A7; // weak
extern char aTimmerfillback[]; // idb
extern _UNKNOWN unk_9D41B7; // weak
extern char asc_9D41B8[]; // idb
extern char asc_9D41C0[]; // idb
extern char aPanel03_38[]; // idb
extern char aPanel04_16[]; // idb
extern char aTimmer[]; // idb
extern _UNKNOWN unk_9D41DF; // weak
extern char aResultlight_2d[]; // idb
extern char aNum_2d[]; // idb
extern char aBet_evennor[12]; // weak
extern char aBet_oddnor[11]; // weak
extern char aBet_bignor[11]; // weak
extern char aBet_smallnor[13]; // weak
extern char aBet_dice11nor[14]; // weak
extern char aBet_dice22nor[14]; // weak
extern char aBet_dice33nor[14]; // weak
extern char aBet_dice44nor[14]; // weak
extern char aBet_dice55nor[14]; // weak
extern char aBet_dice66nor[14]; // weak
extern char aBet_dice111nor[15]; // weak
extern char aBet_dice222nor[15]; // weak
extern char aBet_dice333nor[15]; // weak
extern char aBet_dice444nor[15]; // weak
extern char aBet_dice555nor[15]; // weak
extern char aBet_dice666nor[15]; // weak
extern char aBet_anytriplen[17]; // weak
extern char aBet_num4nor[12]; // weak
extern char aBet_num5nor[12]; // weak
extern char aBet_num6nor[12]; // weak
extern char aBet_num7nor[12]; // weak
extern char aBet_num8nor[12]; // weak
extern char aBet_num9nor[12]; // weak
extern char aBet_num10nor[13]; // weak
extern char aBet_num11nor[13]; // weak
extern char aBet_num12nor[13]; // weak
extern char aBet_num13nor[13]; // weak
extern char aBet_num14nor[13]; // weak
extern char aBet_num15nor[13]; // weak
extern char aBet_num16nor[13]; // weak
extern char aBet_num17nor[13]; // weak
extern char aBet_dice12nor[14]; // weak
extern char aBet_dice13nor[14]; // weak
extern char aBet_dice14nor[14]; // weak
extern char aBet_dice15nor[14]; // weak
extern char aBet_dice16nor[14]; // weak
extern char aBet_dice23nor[14]; // weak
extern char aBet_dice24nor[14]; // weak
extern char aBet_dice25nor[14]; // weak
extern char aBet_dice26nor[14]; // weak
extern char aBet_dice34nor[14]; // weak
extern char aBet_dice35nor[14]; // weak
extern char aBet_dice36nor[14]; // weak
extern char aBet_dice45nor[14]; // weak
extern char aBet_dice46nor[14]; // weak
extern char aBet_dice56nor[14]; // weak
extern char aBet_onenor[11]; // weak
extern char aBet_twonor[11]; // weak
extern char aBet_threenor[13]; // weak
extern char aBet_fournor[12]; // weak
extern char aBet_fivenor[12]; // weak
extern char aBet_sixnor[11]; // weak
extern char aHistory1_1[11]; // weak
extern char aHistory1_2[11]; // weak
extern char aHistory1_3[11]; // weak
extern char aHistory2_1[11]; // weak
extern char aHistory2_2[11]; // weak
extern char aHistory2_3[11]; // weak
extern char aHistory3_1[11]; // weak
extern char aHistory3_2[11]; // weak
extern char aHistory3_3[11]; // weak
extern char aHistory4_1[11]; // weak
extern char aHistory4_2[11]; // weak
extern char aHistory4_3[11]; // weak
extern char aHistory5_1[11]; // weak
extern char aHistory5_2[11]; // weak
extern char aHistory5_3[11]; // weak
extern char aHistory6_1[11]; // weak
extern char aHistory6_2[11]; // weak
extern char aHistory6_3[11]; // weak
extern char aHistory7_1[11]; // weak
extern char aHistory7_2[11]; // weak
extern char aHistory7_3[11]; // weak
extern char aPanel_dice[]; // idb
extern char aTip_betting[]; // idb
extern char aTip_share[]; // idb
extern char aTip_invenmoney[]; // idb
extern char aHistory_dice01[]; // idb
extern char aHistory_dice02[]; // idb
extern char aHistory_dice03[]; // idb
extern char aHistory_dice04[]; // idb
extern char aHistory_dice05[]; // idb
extern char aHistory_dice06[]; // idb
extern char aS01[]; // idb
extern char aS_2d_2[]; // idb
extern char aBetmoneynum00[]; // idb
extern char aBetmoneynum01[]; // idb
extern char aBetmoneynum02[]; // idb
extern char aBetmoneynum03[]; // idb
extern char aBetmoneynum04[]; // idb
extern char aBetmoneynum05[]; // idb
extern char aBetmoneynum06[]; // idb
extern char aBetmoneynum07[]; // idb
extern char aBetmoneynum08[]; // idb
extern char aBetmoneynum09[]; // idb
extern char aBet_gold02[11]; // weak
extern char aBet_gold01[11]; // weak
extern char aBet_silver03[13]; // weak
extern char aBet_silver02[13]; // weak
extern char aBet_silver01[13]; // weak
extern char aBet_cooper03[13]; // weak
extern char aBet_cooper02[13]; // weak
extern char aBet_cooper01[13]; // weak
extern char aShare_gold02[13]; // weak
extern char aShare_gold01[13]; // weak
extern char aShare_silver03[15]; // weak
extern char aShare_silver02[15]; // weak
extern char aShare_silver01[15]; // weak
extern char aShare_cooper03[15]; // weak
extern char aShare_cooper02[15]; // weak
extern char aShare_cooper01[15]; // weak
extern char aNum00_0[]; // idb
extern char aNum01_5[]; // idb
extern char aNum02_2[]; // idb
extern char aNum03_1[]; // idb
extern char aNum04_1[]; // idb
extern char aNum05_0[]; // idb
extern char aNum06_0[]; // idb
extern char aNum07_0[]; // idb
extern char aNum08_0[]; // idb
extern char aNum09_0[]; // idb
extern char aMymoney_gem03[14]; // weak
extern char aMymoney_gem02[14]; // weak
extern char aMymoney_gem01[14]; // weak
extern char aMymoney_gold02[15]; // weak
extern char aMymoney_gold01[15]; // weak
extern char aMymoney_silver[17]; // weak
extern char aMymoney_silv_0[17]; // weak
extern char aMymoney_silv_1[17]; // weak
extern char aMymoney_cooper[17]; // weak
extern char aMymoney_coop_0[17]; // weak
extern char aMymoney_coop_1[17]; // weak
extern char aRankingover[]; // idb
extern char aRankingclick[]; // idb
extern char aRankingnor[]; // idb
extern char aHelpover_0[]; // idb
extern char aHelpclick_0[]; // idb
extern char aHelpnor_0[]; // idb
extern char a100coppernor_0[]; // idb
extern char a100coppercli_0[]; // idb
extern char a100copperove_0[]; // idb
extern char a100S[]; // idb
extern char a1sivernor[]; // idb
extern char a1siverclick[]; // idb
extern char a1siverover[]; // idb
extern char a1S[]; // idb
extern char a10sivernor[]; // idb
extern char a10siverclick[]; // idb
extern char a10siverover[]; // idb
extern char a10siverdisable[]; // idb
extern char a10S[]; // idb
extern char a100sivernor[]; // idb
extern char a100siverclick[]; // idb
extern char a100siverover[]; // idb
extern char a100siverdisabl[]; // idb
extern char a100S_0[]; // idb
extern char aGoldnor[]; // idb
extern char aGoldclick[]; // idb
extern char aGoldover[]; // idb
extern char aGolddisable[]; // idb
extern char a1S_0[]; // idb
extern char aMaxnor_1[]; // idb
extern char aMaxclick_1[]; // idb
extern char aMaxover_1[]; // idb
extern char aMinover_1[]; // idb
extern char aMinclick_1[]; // idb
extern char aMinnor_1[]; // idb
extern char asc_9D4B00[]; // idb
extern char asc_9D4B08[]; // idb
extern char asc_9D4B14[]; // idb
extern char aExitover[]; // idb
extern char aExitclick[]; // idb
extern char aExitnor[]; // idb
extern char aResultdicenum0[]; // idb
extern char aResultdicenu_0[]; // idb
extern char aResultdicenu_1[]; // idb
extern char aResultdicenu_2[]; // idb
extern char aResultdicenu_3[]; // idb
extern char aResultdicenu_4[]; // idb
extern char aResultdice_2d[]; // idb
extern char aTitle_6[]; // idb
extern char aTextbox_dicere[]; // idb
extern char asc_9D4BC8[]; // idb
extern int dword_9D4BD0; // weak
extern int dword_9D4BD4; // weak
extern int dword_9D4BD8; // weak
extern __int16 word_9D4BDC; // weak
extern int dword_9D4BE0; // weak
extern int dword_9D4BE4; // weak
extern int dword_9D4BE8; // weak
extern int dword_9D4BEC; // weak
extern int dword_9D4BF0; // weak
extern char byte_9D4BF4; // weak
extern int dword_9D4BF8; // weak
extern int dword_9D4BFC; // weak
extern int dword_9D4C00; // weak
extern int (__fastcall *off_9D4C04)(Char *this); // weak
extern int dword_9D4C08; // weak
extern int dword_9D4C0C; // weak
extern __int16 word_9D4C10; // weak
extern char byte_9D4C12; // weak
extern int dword_9D4C14; // weak
extern int dword_9D4C18; // weak
extern int dword_9D4C1C; // weak
extern int (__fastcall *off_9D4C20)(Char *this); // weak
extern int dword_9D4C24; // weak
extern int dword_9D4C28; // weak
extern int dword_9D4C2C; // weak
extern int (__fastcall *off_9D4C30)(Char *this); // weak
extern int dword_9D4C34; // weak
extern int dword_9D4C38; // weak
extern int dword_9D4C3C; // weak
extern int dword_9D4C40; // weak
extern int dword_9D4C44; // weak
extern int (__fastcall *off_9D4C48)(Char *this); // weak
extern char aMinigame01_dic[]; // idb
extern char aMinigame01_d_0[]; // idb
extern char asc_9D4C70[]; // idb
extern char a_kfm_0[]; // idb
extern char aMinigame02_dic[]; // idb
extern char aMinigame01_d_1[]; // idb
extern char asc_9D4CA0[]; // idb
extern char a_kfm_1[]; // idb
extern char aMinigame03_dic[]; // idb
extern char aMinigame01_d_2[]; // idb
extern char asc_9D4CD0[]; // idb
extern char a_kfm_2[]; // idb
extern char aS_2d_0[]; // idb
extern char aGameDicegamema[]; // idb
extern char aLoadfail_26[]; // idb
extern char aGameMyhomemi_1[]; // idb
extern char a100coppernor[]; // idb
extern char a100copperclick[]; // idb
extern char a100copperover[]; // idb
extern char aGameDicegamehe[]; // idb
extern char aLoadfail_28[]; // idb
extern char aGameDicegame_1[]; // idb
extern char asc_9D4DA4[6]; // weak
extern char asc_9D4DAC[]; // idb
extern char aDicehelp[]; // idb
extern char asc_9D4DC0[6]; // weak
extern char asc_9D4DC8[]; // idb
extern char asc_9D4DD0[]; // idb
extern char asc_9D4DD8[]; // idb
extern char asc_9D4DE0[]; // idb
extern char aColumn01_23[]; // idb
extern char aColumn01_24[]; // idb
extern char aPlane01_32[]; // idb
extern char asc_9D4E0C[]; // idb
extern char asc_9D4E10[]; // idb
extern char asc_9D4E14[]; // idb
extern char asc_9D4E18[]; // idb
extern char asc_9D4E1C[]; // idb
extern char asc_9D4E20[]; // idb
extern char asc_9D4E24[]; // idb
extern char asc_9D4E28[]; // idb
extern char asc_9D4E2C[]; // idb
extern char byte_9D4E30[4]; // idb
extern char aSlidebar_sl_39[]; // idb
extern char asc_9D4E4C[]; // idb
extern char asc_9D4E5C[]; // idb
extern char aSlidebar_26[]; // idb
extern char asc_9D4E78[]; // idb
extern char asc_9D4E80[]; // idb
extern char asc_9D4E8C[]; // idb
extern char aBtn02over_21[]; // idb
extern char aBtn02click_22[]; // idb
extern char aBtn02nor_24[]; // idb
extern char aGameDicegameha[]; // idb
extern char aLoadfail_29[]; // idb
extern char aGameDicegame_2[]; // idb
extern char asc_9D4F08[6]; // weak
extern char asc_9D4F10[]; // idb
extern char aDicerank[]; // idb
extern char asc_9D4F24[6]; // weak
extern char asc_9D4F2C[]; // idb
extern char asc_9D4F34[]; // idb
extern char asc_9D4F3C[]; // idb
extern char aPanel03_40[]; // idb
extern char aPlane01_33[]; // idb
extern char asc_9D4F54[]; // idb
extern char aBtn01over_35[]; // idb
extern char aBtn01click_35[]; // idb
extern char aBtn01nor_34[]; // idb
extern char asc_9D4F84[]; // idb
extern char asc_9D4F8C[]; // idb
extern char asc_9D4F98[]; // idb
extern char aColumnbarno_36[]; // idb
extern char aColumnbarov_32[]; // idb
extern char aColumn01_25[]; // idb
extern char aColumn02_17[]; // idb
extern char aColumn03_16[]; // idb
extern char aTextbox_12[]; // idb
extern char aSlidebar_sl_40[]; // idb
extern char asc_9D5004[]; // idb
extern char asc_9D5014[]; // idb
extern char aSlidebar_27[]; // idb
extern char aJobtaboff01[]; // idb
extern char aJobtabon01[]; // idb
extern char aJobtaboff02[]; // idb
extern char aJobtabon02[]; // idb
extern char aText01_55[]; // idb
extern char aText02_32[]; // idb
extern char aText03_19[]; // idb
extern char aRank_gold[]; // idb
extern char aRank_silver[]; // idb
extern char aRank_bronze[]; // idb
extern char aDS_11[5]; // weak
extern char asc_9D50A8[]; // idb
extern char aDS_12[]; // idb
extern char aD_89[]; // idb
extern char aGameDicegamere[]; // idb
extern char aPlane01_31[]; // idb
extern char aMhdicerewardmo[]; // idb
extern char aBtn01nor_33[]; // idb
extern char aBtn01click_34[]; // idb
extern char aBtn01over_34[]; // idb
extern char aBtn02nor_23[]; // idb
extern char aBtn02click_21[]; // idb
extern char aBtn02over_20[]; // idb
extern char aMhdiceexpectmo[]; // idb
extern char aOknor_18[]; // idb
extern char aOkclick_17[]; // idb
extern char aOkover_17[]; // idb
extern char aMycopperbtn_15[]; // idb
extern char aMycopperbtn_16[]; // idb
extern char aMycopperbtn_17[]; // idb
extern char aMycopperbtn_18[]; // idb
extern char aMysilverbtn_12[]; // idb
extern char aMysilverbtn_13[]; // idb
extern char aMysilverbtn_14[]; // idb
extern char aMysilverbtn_15[]; // idb
extern char aMygoldbtn_15[]; // idb
extern char aMygoldbtn_16[]; // idb
extern char aMygoldbtn_17[]; // idb
extern char aMygoldbtn_18[]; // idb
extern char aMygembtn_15[]; // idb
extern char aMygembtn_16[]; // idb
extern char aMygembtn_17[]; // idb
extern char aMygembtn_18[]; // idb
extern char aMycopperinpu_4[]; // idb
extern char aMycopperinpu_5[]; // idb
extern char aMysilverinpu_4[]; // idb
extern char aMysilverinpu_5[]; // idb
extern char aMygoldinput_5[]; // idb
extern char aMygoldinput_6[]; // idb
extern char aMygeminput_4[]; // idb
extern char aMygeminput_5[]; // idb
extern char aTextbox_11[]; // idb
extern char asc_9D52A4[]; // idb
extern char asc_9D52A8[]; // idb
extern char aTextbox01_4[]; // idb
extern char aGameDicegamera[]; // idb
extern char aLoadfail_27[]; // idb
extern char aGameDicegaemra[]; // idb
extern char asc_9D5308[6]; // weak
extern char asc_9D5310[]; // idb
extern char aDicegaemratesh[]; // idb
extern char asc_9D532C[6]; // weak
extern char asc_9D5334[]; // idb
extern char asc_9D533C[]; // idb
extern char aPlane02_3[]; // idb
extern char asc_9D534C[]; // idb
extern char asc_9D5358[]; // idb
extern char asc_9D5360[]; // idb
extern char asc_9D536C[]; // idb
extern char aBtn01over_33[]; // idb
extern char aBtn01click_33[]; // idb
extern char aBtn01nor_32[]; // idb
extern char aText_menu01[]; // idb
extern char aText_menu02[]; // idb
extern char aText_menu03[]; // idb
extern char aText_menu04[]; // idb
extern char aText_case01[]; // idb
extern char aText_rate01[]; // idb
extern char aText_case02[]; // idb
extern char aText_rate02[]; // idb
extern char aText_case03[]; // idb
extern char aText_rate03[]; // idb
extern char aText_case04[]; // idb
extern char aText_rate04[]; // idb
extern char aText_case05[]; // idb
extern char aText_rate05[]; // idb
extern char aText_case06[]; // idb
extern char aText_rate06[]; // idb
extern char aText_case07[]; // idb
extern char aText_rate07[]; // idb
extern char aText_case08[]; // idb
extern char aText_rate08[]; // idb
extern char aText_case09[]; // idb
extern char aText_rate09[]; // idb
extern char aText_case10[]; // idb
extern char aText_rate10[]; // idb
extern char aText_case11[]; // idb
extern char aText_rate11[]; // idb
extern char aText_case12[]; // idb
extern char aText_rate12[]; // idb
extern char aText_case13[]; // idb
extern char aText_rate13[]; // idb
extern char aText_case14[]; // idb
extern char aText_rate14[]; // idb
extern char aText_case15[]; // idb
extern char aText_rate15[]; // idb
extern char aText_casenum[]; // idb
extern char aGameGb_dicegam[]; // idb
extern char asc_9D555C[6]; // weak
extern char asc_9D5564[]; // idb
extern char aGambledicegame[]; // idb
extern char aTimmerfill_0[]; // idb
extern char aTimmerfillba_0[]; // idb
extern char asc_9D5598[]; // idb
extern char asc_9D55A0[]; // idb
extern char aPanel03_39[]; // idb
extern char aPanel04_17[]; // idb
extern char aTimmer_0[]; // idb
extern char aResultlight__0[]; // idb
extern char aNum_2d_0[]; // idb
extern char aBet_evennor_0[12]; // weak
extern char aBet_oddnor_0[11]; // weak
extern char aBet_bignor_0[11]; // weak
extern char aBet_smallnor_0[13]; // weak
extern char aBet_dice11no_0[14]; // weak
extern char aBet_dice22no_0[14]; // weak
extern char aBet_dice33no_0[14]; // weak
extern char aBet_dice44no_0[14]; // weak
extern char aBet_dice55no_0[14]; // weak
extern char aBet_dice66no_0[14]; // weak
extern char aBet_dice111n_0[15]; // weak
extern char aBet_dice222n_0[15]; // weak
extern char aBet_dice333n_0[15]; // weak
extern char aBet_dice444n_0[15]; // weak
extern char aBet_dice555n_0[15]; // weak
extern char aBet_dice666n_0[15]; // weak
extern char aBet_anytripl_0[17]; // weak
extern char aBet_num4nor_0[12]; // weak
extern char aBet_num5nor_0[12]; // weak
extern char aBet_num6nor_0[12]; // weak
extern char aBet_num7nor_0[12]; // weak
extern char aBet_num8nor_0[12]; // weak
extern char aBet_num9nor_0[12]; // weak
extern char aBet_num10nor_0[13]; // weak
extern char aBet_num11nor_0[13]; // weak
extern char aBet_num12nor_0[13]; // weak
extern char aBet_num13nor_0[13]; // weak
extern char aBet_num14nor_0[13]; // weak
extern char aBet_num15nor_0[13]; // weak
extern char aBet_num16nor_0[13]; // weak
extern char aBet_num17nor_0[13]; // weak
extern char aBet_dice12no_0[14]; // weak
extern char aBet_dice13no_0[14]; // weak
extern char aBet_dice14no_0[14]; // weak
extern char aBet_dice15no_0[14]; // weak
extern char aBet_dice16no_0[14]; // weak
extern char aBet_dice23no_0[14]; // weak
extern char aBet_dice24no_0[14]; // weak
extern char aBet_dice25no_0[14]; // weak
extern char aBet_dice26no_0[14]; // weak
extern char aBet_dice34no_0[14]; // weak
extern char aBet_dice35no_0[14]; // weak
extern char aBet_dice36no_0[14]; // weak
extern char aBet_dice45no_0[14]; // weak
extern char aBet_dice46no_0[14]; // weak
extern char aBet_dice56no_0[14]; // weak
extern char aBet_onenor_0[11]; // weak
extern char aBet_twonor_0[11]; // weak
extern char aBet_threenor_0[13]; // weak
extern char aBet_fournor_0[12]; // weak
extern char aBet_fivenor_0[12]; // weak
extern char aBet_sixnor_0[11]; // weak
extern char aHistory1_1_0[11]; // weak
extern char aHistory1_2_0[11]; // weak
extern char aHistory1_3_0[11]; // weak
extern char aHistory2_1_0[11]; // weak
extern char aHistory2_2_0[11]; // weak
extern char aHistory2_3_0[11]; // weak
extern char aHistory3_1_0[11]; // weak
extern char aHistory3_2_0[11]; // weak
extern char aHistory3_3_0[11]; // weak
extern char aHistory4_1_0[11]; // weak
extern char aHistory4_2_0[11]; // weak
extern char aHistory4_3_0[11]; // weak
extern char aHistory5_1_0[11]; // weak
extern char aHistory5_2_0[11]; // weak
extern char aHistory5_3_0[11]; // weak
extern char aHistory6_1_0[11]; // weak
extern char aHistory6_2_0[11]; // weak
extern char aHistory6_3_0[11]; // weak
extern char aHistory7_1_0[11]; // weak
extern char aHistory7_2_0[11]; // weak
extern char aHistory7_3_0[11]; // weak
extern char aPanel_dice_0[]; // idb
extern char aTip_betting_0[]; // idb
extern char aTip_share_0[]; // idb
extern char aTip_invenmon_0[]; // idb
extern char aHistory_dice_0[]; // idb
extern char aHistory_dice_1[]; // idb
extern char aHistory_dice_2[]; // idb
extern char aHistory_dice_3[]; // idb
extern char aHistory_dice_4[]; // idb
extern char aHistory_dice_5[]; // idb
extern char aS01_0[]; // idb
extern char aS_2d_3[]; // idb
extern char aBetmoneynum0_0[]; // idb
extern char aBetmoneynum0_1[]; // idb
extern char aBetmoneynum0_2[]; // idb
extern char aBetmoneynum0_3[]; // idb
extern char aBetmoneynum0_4[]; // idb
extern char aBetmoneynum0_5[]; // idb
extern char aBetmoneynum0_6[]; // idb
extern char aBetmoneynum0_7[]; // idb
extern char aBetmoneynum0_8[]; // idb
extern char aBetmoneynum0_9[]; // idb
extern char aBetcoin_2d[]; // idb
extern char aSharecoin_2d[]; // idb
extern char aNum00_1[]; // idb
extern char aNum01_6[]; // idb
extern char aNum02_3[]; // idb
extern char aNum03_2[]; // idb
extern char aNum04_2[]; // idb
extern char aNum05_1[]; // idb
extern char aNum06_1[]; // idb
extern char aNum07_1[]; // idb
extern char aNum08_1[]; // idb
extern char aNum09_1[]; // idb
extern char aMymoney_2d[]; // idb
extern char aRankingover_0[]; // idb
extern char aRankingclick_0[]; // idb
extern char aRankingnor_0[]; // idb
extern char aHelpover_1[]; // idb
extern char aHelpclick_1[]; // idb
extern char aHelpnor_1[]; // idb
extern char aCoin01nor[]; // idb
extern char aCoin01click[]; // idb
extern char aCoin01over[]; // idb
extern char aCoin02nor[]; // idb
extern char aCoin02click[]; // idb
extern char aCoin02over[]; // idb
extern char aCoin03nor[]; // idb
extern char aCoin03click[]; // idb
extern char aCoin03over[]; // idb
extern char aCoin03disable[]; // idb
extern char aCoin04nor[]; // idb
extern char aCoin04click[]; // idb
extern char aCoin04over[]; // idb
extern char aCoin04disable[]; // idb
extern char aCoinmaxnor[]; // idb
extern char aCoinmaxclick[]; // idb
extern char aCoinmaxover[]; // idb
extern char aMinover_2[]; // idb
extern char aMinclick_2[]; // idb
extern char aMinnor_2[]; // idb
extern char asc_9D5CE8[]; // idb
extern char asc_9D5CF0[]; // idb
extern char asc_9D5CFC[]; // idb
extern char aExitover_0[]; // idb
extern char aExitclick_0[]; // idb
extern char aExitnor_0[]; // idb
extern char aResultdicenu_5[]; // idb
extern char aResultdicenu_6[]; // idb
extern char aResultdicenu_7[]; // idb
extern char aResultdicenu_8[]; // idb
extern char aResultdicenu_9[]; // idb
extern char aResultdicen_10[]; // idb
extern char aResultdice_2_0[]; // idb
extern char aTitle_7[]; // idb
extern char aTextbox_dice_0[]; // idb
extern char asc_9D5DB0[]; // idb
extern int dword_9D5DB8; // weak
extern int dword_9D5DBC; // weak
extern int dword_9D5DC0; // weak
extern __int16 word_9D5DC4; // weak
extern int dword_9D5DC8; // weak
extern int dword_9D5DCC; // weak
extern int dword_9D5DD0; // weak
extern int dword_9D5DD4; // weak
extern int dword_9D5DD8; // weak
extern char byte_9D5DDC; // weak
extern int dword_9D5DE0; // weak
extern int dword_9D5DE4; // weak
extern int dword_9D5DE8; // weak
extern int (__fastcall *off_9D5DEC)(Char *this); // weak
extern int dword_9D5DF0; // weak
extern int dword_9D5DF4; // weak
extern __int16 word_9D5DF8; // weak
extern char byte_9D5DFA; // weak
extern int dword_9D5DFC; // weak
extern int dword_9D5E00; // weak
extern int dword_9D5E04; // weak
extern int (__fastcall *off_9D5E08)(Char *this); // weak
extern int dword_9D5E0C; // weak
extern int dword_9D5E10; // weak
extern int dword_9D5E14; // weak
extern int (__fastcall *off_9D5E18)(Char *this); // weak
extern int dword_9D5E1C; // weak
extern int dword_9D5E20; // weak
extern int dword_9D5E24; // weak
extern int dword_9D5E28; // weak
extern int dword_9D5E2C; // weak
extern int (__fastcall *off_9D5E30)(Char *this); // weak
extern char aMinigame01_d_3[]; // idb
extern char aMinigame01_d_4[]; // idb
extern char asc_9D5E58[]; // idb
extern char a_kfm_3[]; // idb
extern char aMinigame02_d_0[]; // idb
extern char aMinigame01_d_5[]; // idb
extern char asc_9D5E88[]; // idb
extern char a_kfm_4[]; // idb
extern char aMinigame03_d_0[]; // idb
extern char aMinigame01_d_6[]; // idb
extern char asc_9D5EB8[]; // idb
extern char a_kfm_5[]; // idb
extern char aZ_1[]; // idb
extern char aS_2d_1[]; // idb
extern int (__stdcall *BettingBut::_vftable_)(int uiFlags); // weak
extern int (__thiscall *BettingBut::_vftable_)(void *p, char); // weak
extern int (__stdcall *ToggleBut::_vftable_)(int uiFlags); // weak
extern int (__thiscall *ToggleBut::_vftable_)(void *p, char); // weak
extern int (__stdcall *mhMinimizeDiceGameWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhMinimizeDiceGameWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *mhDiceHelpWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhDiceHelpWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *mhDiceRateSheetWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhDiceRateSheetWin::_vftable_)(void *p, char); // weak
extern int (__thiscall *MHDiceAniActor::_vftable_)(void *p, char); // weak
extern int (__stdcall *MHDiceRewardMoneyWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MHDiceRewardMoneyWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *MiniHouseDiceGameWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniHouseDiceGameWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GambleDiceGameWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GambleDiceGameWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *mhDiceRankWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *mhDiceRankWin::_vftable_)(void *p, char); // weak
extern char aGb_slotmachine[]; // idb
extern char aGb_sm_reelend[]; // idb
extern char byte_9D73B6[2]; // idb
extern char aGameGb_slotmac[]; // idb
extern char asc_9D73D4[]; // idb
extern char byte_9D73DA[2]; // idb
extern char aSlotmachinewin[]; // idb
extern char asc_9D73EC[]; // idb
extern char asc_9D73F4[]; // idb
extern char aPanel03_41[]; // idb
extern char aPanel04_18[]; // idb
extern char aPanel05_5[]; // idb
extern char aPanel06_1[]; // idb
extern char aPanel07_0[]; // idb
extern char aPanel08_0[]; // idb
extern char aPanel09[]; // idb
extern char aCoin_3[]; // idb
extern char aCooper[]; // idb
extern char aSilver[]; // idb
extern char aGold[]; // idb
extern char byte_9D7451; // idb
extern char byte_9D7452[2]; // idb
extern char aTitle01_3[]; // idb
extern char aTitle02_1[]; // idb
extern char aButton1_0[]; // idb
extern char aButton2[]; // idb
extern char aButton3[]; // idb
extern char aButtonall[]; // idb
extern char aButtoncenter[]; // idb
extern char aButtonjackpot[]; // idb
extern char aMinover_3[]; // idb
extern char aMinclick_3[]; // idb
extern char aMinnor_3[]; // idb
extern char aExitover_1[]; // idb
extern char aExitclick_1[]; // idb
extern char aExitnor_1[]; // idb
extern char aRankingover_1[]; // idb
extern char aRankingclick_1[]; // idb
extern char aRankingnor_1[]; // idb
extern char aHelpover_2[]; // idb
extern char aHelpclick_2[]; // idb
extern char aHelpnor_2[]; // idb
extern char aCloseover[]; // idb
extern char aCloseclick[]; // idb
extern char aClosenor[]; // idb
extern char aBetonedisable[]; // idb
extern char aBetoneover[]; // idb
extern char aBetoneclick[]; // idb
extern char aBetonenor[]; // idb
extern char aBeteightdisabl[]; // idb
extern char aBeteightover[]; // idb
extern char aBeteightclick[]; // idb
extern char aBeteightnor[]; // idb
extern char aCancelonebetdi[]; // idb
extern char aCancelonebetov[]; // idb
extern char aCancelonebetcl[]; // idb
extern char aCancelonebetno[]; // idb
extern char aSpindisable[]; // idb
extern char aSpinover[]; // idb
extern char aSpinclick[]; // idb
extern char aSpinnor[]; // idb
extern char aStopdisable[]; // idb
extern char aStopover[]; // idb
extern char aStopclick[]; // idb
extern char aStopnor[]; // idb
extern char aResetdisable[]; // idb
extern char aResetover[]; // idb
extern char aResetclick[]; // idb
extern char aResetnor[]; // idb
extern char aCoin_2d[]; // idb
extern char aLinedarklight_[]; // idb
extern char aLinehighlight_[]; // idb
extern char aBaseslot_0[]; // idb
extern char aSlot_2d[]; // idb
extern char aSlothighlight_[]; // idb
extern char aBet_2d[]; // idb
extern int dword_9D7700; // weak
extern int dword_9D7704; // weak
extern int dword_9D7708; // weak
extern int dword_9D770C; // weak
extern int dword_9D7710; // weak
extern __int16 word_9D7714; // weak
extern char aBetmoneynum_10[]; // idb
extern char aBetmoneynum_2d[]; // idb
extern char aBetcoin08[10]; // weak
extern char aBetcoin01[10]; // weak
extern char aBetcoin02[10]; // weak
extern char aBetcoin03[10]; // weak
extern char aBetcoin04[10]; // weak
extern char aBetcoin05[10]; // weak
extern char aBetcoin06[10]; // weak
extern char aBetcoin07[10]; // weak
extern char aSharecoin08[12]; // weak
extern char aSharecoin01[12]; // weak
extern char aSharecoin02[12]; // weak
extern char aSharecoin03[12]; // weak
extern char aSharecoin04[12]; // weak
extern char aSharecoin05[12]; // weak
extern char aSharecoin06[12]; // weak
extern char aSharecoin07[12]; // weak
extern char aNum00_2[]; // idb
extern char aNum_2d_1[]; // idb
extern char aMymoney01[10]; // weak
extern char aMymoney02[10]; // weak
extern char aMymoney03[10]; // weak
extern char aMymoney04[10]; // weak
extern char aMymoney05[10]; // weak
extern char aMymoney06[10]; // weak
extern char aMymoney07[10]; // weak
extern char aMymoney08[10]; // weak
extern char aMymoney09[10]; // weak
extern char aMymoney10[10]; // weak
extern char aMymoney11[10]; // weak
extern char aMymoney12[10]; // weak
extern int dword_9D7898; // weak
extern int dword_9D789C; // weak
extern int dword_9D78A0; // weak
extern int dword_9D78A4; // weak
extern __int16 word_9D78A8; // weak
extern char byte_9D78AA; // weak
extern int dword_9D78AC; // weak
extern int dword_9D78B0; // weak
extern int dword_9D78B4; // weak
extern int dword_9D78B8; // weak
extern __int16 word_9D78BC; // weak
extern char byte_9D78BE; // weak
extern int dword_9D78C0; // weak
extern int dword_9D78C4; // weak
extern int dword_9D78C8; // weak
extern int dword_9D78CC; // weak
extern __int16 word_9D78D0; // weak
extern int dword_9D78D4; // weak
extern int dword_9D78D8; // weak
extern int dword_9D78DC; // weak
extern int dword_9D78E0; // weak
extern __int16 word_9D78E4; // weak
extern char byte_9D78E6; // weak
extern int dword_9D78E8; // weak
extern int dword_9D78EC; // weak
extern int dword_9D78F0; // weak
extern int dword_9D78F4; // weak
extern int dword_9D78F8; // weak
extern char byte_9D78FC; // weak
extern char aGb_slotleverac[23]; // weak
extern char asc_9D7918[]; // idb
extern char asc_9D7920[]; // idb
extern char asc_9D7924[]; // idb
extern char asc_9D7928[]; // idb
extern char aGameDicegame_3[]; // idb
extern char aLoadfail_31[]; // idb
extern char aGameDicegame_4[]; // idb
extern char asc_9D797C[6]; // weak
extern char asc_9D7984[]; // idb
extern char aSlotrank[]; // idb
extern char asc_9D7998[6]; // weak
extern char asc_9D79A0[]; // idb
extern char asc_9D79A8[]; // idb
extern char asc_9D79B0[]; // idb
extern char aPanel03_42[]; // idb
extern char aPlane01_34[]; // idb
extern char asc_9D79C8[]; // idb
extern char aBtn01over_36[]; // idb
extern char aBtn01click_36[]; // idb
extern char aBtn01nor_35[]; // idb
extern char asc_9D79F8[]; // idb
extern char asc_9D7A00[]; // idb
extern char asc_9D7A0C[]; // idb
extern char aColumnbarno_37[]; // idb
extern char aColumnbarov_33[]; // idb
extern char aColumn01_26[]; // idb
extern char aColumn02_18[]; // idb
extern char aColumn03_17[]; // idb
extern char aTextbox_13[]; // idb
extern char aSlidebar_sl_41[]; // idb
extern char asc_9D7A78[]; // idb
extern char asc_9D7A88[]; // idb
extern char aSlidebar_28[]; // idb
extern char aJobtaboff01_0[]; // idb
extern char aJobtabon01_0[]; // idb
extern char aJobtaboff02_0[]; // idb
extern char aJobtabon02_0[]; // idb
extern char aText01_56[]; // idb
extern char aText02_33[]; // idb
extern char aText03_20[]; // idb
extern char aDS_13[]; // idb
extern char aD_90[]; // idb
extern char aGameGb_slotm_0[]; // idb
extern char aLoadfail_30[]; // idb
extern char aGameMyhomemi_2[]; // idb
extern char aGb_slotmachi_0[]; // idb
extern char aGameDicegame_5[]; // idb
extern char aLoadfail_32[]; // idb
extern char aGameDicegame_6[]; // idb
extern char asc_9D7BA0[6]; // weak
extern char asc_9D7BA8[]; // idb
extern char aSlothelp[]; // idb
extern char asc_9D7BBC[6]; // weak
extern char asc_9D7BC4[]; // idb
extern char asc_9D7BCC[]; // idb
extern char asc_9D7BD4[]; // idb
extern char asc_9D7BDC[]; // idb
extern char asc_9D7BE8[]; // idb
extern char asc_9D7BF0[]; // idb
extern char asc_9D7BFC[]; // idb
extern char aColumn01_27[]; // idb
extern char aColumn01_28[]; // idb
extern char aPlane01_35[]; // idb
extern char asc_9D7C24[]; // idb
extern char asc_9D7C28[]; // idb
extern char asc_9D7C2C[]; // idb
extern char asc_9D7C30[]; // idb
extern char asc_9D7C34[]; // idb
extern char asc_9D7C38[]; // idb
extern char asc_9D7C3C[]; // idb
extern char asc_9D7C40[]; // idb
extern char asc_9D7C44[]; // idb
extern char asc_9D7C48[]; // idb
extern char asc_9D7C4C[]; // idb
extern char asc_9D7C50[]; // idb
extern char asc_9D7C54[]; // idb
extern char asc_9D7C58[]; // idb
extern char asc_9D7C5C[]; // idb
extern char asc_9D7C60[]; // idb
extern char byte_9D7C64[4]; // idb
extern char aSlidebar_sl_42[]; // idb
extern char asc_9D7C80[]; // idb
extern char asc_9D7C90[]; // idb
extern char aSlidebar_29[]; // idb
extern int (__stdcall *MiniSlotMachineWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *MiniSlotMachineWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GBSlotHelpWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GBSlotHelpWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *SlotMachineWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *SlotMachineWin::_vftable_)(void *p, char); // weak
extern int (__stdcall *GBSlotRankWin::_vftable_)(int uiFlags); // weak
extern int (__thiscall *GBSlotRankWin::_vftable_)(void *p, char); // weak
extern char aChair_0[7]; // weak
extern char aChair02d[]; // idb
extern char aHideslot02d[]; // idb
extern char aEfnode[7]; // weak
extern char asc_9D8610[2]; // weak
extern char asc_9D8614[]; // idb
extern char aScale[]; // idb
extern char aSD_58[]; // idb
extern int (__thiscall *NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_)(void *p, char); // weak
extern int (*Mover::_vftable_[2])(); // weak
extern int (__stdcall *Mover::_vftable_)(int); // weak
extern int (__stdcall *Mover::_vftable_)(int pkAbState, char bNoVisual); // weak
extern wchar_t word_9D8938; // idb
extern wchar_t word_9D893C; // idb
extern wchar_t pszFormat[]; // idb
extern _UNKNOWN unk_9D8984; // weak
extern wchar_t aErrorCallspawn[48]; // weak
extern wchar_t aSpawnappsExe_0[]; // idb
extern const wchar_t aErrorCallspa_0[]; // idb
extern wchar_t word_9D8AAC; // idb
extern const wchar_t aErrorCallspa_1[]; // idb
extern wchar_t word_9D8B2C; // idb
extern const wchar_t aErrorCallspa_2[]; // idb
extern int (__thiscall *CMD5Checksum::_vftable_)(void *p, char); // weak
extern char asc_9D8BB4[]; // idb
extern char a0X[4]; // weak
extern char a00[]; // idb
extern int (__thiscall *CDataReader::_vftable_)(void *p, char); // weak
extern char aWb[]; // idb
extern char aRb_0[]; // idb
extern int (__stdcall *CQuest::_vftable_[2])(int); // weak
extern char aUnknown_2[8]; // weak
extern char asc_9D8E68[3]; // weak
extern char aSlanderfilter_[18]; // weak
extern char aChargeddeletab[25]; // weak
extern char aMinimonautouse[23]; // weak
extern char aMinimoninfo_sh[16]; // weak
extern char aTermextendmatc[20]; // weak
extern char aChatcolor_shn[14]; // weak
extern char aPupmain_shn[12]; // weak
extern char aItemmoney_shn[14]; // weak
extern char aMarketsearchin[21]; // weak
extern char aSingledata_shn[15]; // weak
extern char aItemviewequipt[26]; // weak
extern char aGtiview_shn[12]; // weak
extern char aCollectcardvie[20]; // weak
extern char aProduceview_sh[16]; // weak
extern char aPassiveskillvi[21]; // weak
extern char aNpcviewinfo_sh[16]; // weak
extern char aMobviewinfo_sh[16]; // weak
extern char aMapviewinfo_sh[16]; // weak
extern char aItemviewinfo_s[17]; // weak
extern char aItemshopview_s[17]; // weak
extern char aEffectviewinfo[19]; // weak
extern char aCharactertitle[28]; // weak
extern char aActiveskillvie[20]; // weak
extern char aAbstateview_sh[16]; // weak
extern char aMapwaypoint_sh[16]; // weak
extern char aMaplinkpoint_s[17]; // weak
extern char aActionviewinfo[19]; // weak
extern char aDicedividind_s[17]; // weak
extern char aMinihouseendur[20]; // weak
extern char aMinihousefur_0[32]; // weak
extern char aWeapontitledat[20]; // weak
extern char aWeaponattrib_s[17]; // weak
extern char aUpgradeinfo_sh[16]; // weak
extern char aSubabstate_shn[15]; // weak
extern char aRiding_shn[11]; // weak
extern char aPassiveskill_s[17]; // weak
extern char aMobinfo_shn[12]; // weak
extern char aMinihouseobjan[20]; // weak
extern char aMinihousefurni[23]; // weak
extern char aMinihouse_shn[14]; // weak
extern char aMapinfo_shn[12]; // weak
extern char aIteminfo_shn[13]; // weak
extern char aItemdismantle_[18]; // weak
extern char aGradeitemoptio[20]; // weak
extern char aGather_shn[11]; // weak
extern char aClassname_shn[14]; // weak
extern char aChargedeffect_[18]; // weak
extern char aCharactertit_0[23]; // weak
extern char aActiveskill_sh[16]; // weak
extern char aAbstate_shn[12]; // weak
extern int (__thiscall *CItemAuthorityBase::_vftable_)(void *p, char); // weak
extern int (__stdcall *CGuildMember::_vftable_[21])(int); // weak
extern char aUnknown_1[]; // idb
extern int (__stdcall *CGuildAcademyMember::_vftable_[12])(int pAck); // weak
extern int (__stdcall *CGuild::_vftable_[20])(int pAck); // weak
extern int (__thiscall *AreaInfoData::_vftable_)(void *p, char); // weak
extern int (__stdcall *AreaInfoData::AE_Square::_vftable_)(float fSin, float fCos); // weak
extern int (__stdcall *AreaInfoData::AE_Circle::_vftable_)(float fDistY, float fY); // weak
extern int (__stdcall *CGuildList::_vftable_[2])(int); // weak
extern int (__thiscall *Encrypt::Stream::_vftable_)(void *p, char); // weak
extern int (__stdcall *Encrypt::EncryptMethodXor::_vftable_[2])(int rkEncStream, int chCheckSum); // weak
extern char asc_9D9344[2]; // weak
extern char aW_1[]; // idb
extern char aOpen[]; // idb
extern char asc_9D9354[]; // idb
extern char aWt[3]; // weak
extern config_s configuration_table[10];
extern char asc_9D9418[3]; // weak
extern _UNKNOWN unk_9D9C18; // weak
extern const unsigned __int16 order[19];
extern char aIncorrectLengt[23]; // weak
extern char aIncorrectDataC[21]; // weak
extern char aInvalidDista_1[30]; // weak
extern char aInvalidDistanc[22]; // weak
extern char aInvalidLiter_0[28]; // weak
extern char aInvalidDista_0[22]; // weak
extern char aInvalidBitLeng[26]; // weak
extern char aInvalidLiteral[28]; // weak
extern char aTooManyLengthO[36]; // weak
extern char aInvalidCodeLen[25]; // weak
extern char aInvalidStoredB[29]; // weak
extern char aInvalidBlockTy[19]; // weak
extern char aHeaderCrcMisma[20]; // weak
extern char aUnknownHeaderF[25]; // weak
extern char aIncorrectHeade[23]; // weak
extern char aInvalidWindowS[20]; // weak
extern char aUnknownCompr_0[27]; // weak
extern char a1_2_2_0[]; // idb
extern const int extra_lbits[29];
extern char bl_order[19];
extern const int extra_dbits[30];
extern ct_data_s static_ltree;
extern ct_data_s static_dtree;
extern char _dist_code[]; // weak
extern char byte_9DA5D0[]; // weak
extern char _length_code[]; // weak
extern const int base_length[29];
extern const int base_dist[30];
extern const unsigned int crc_table[8][256];
extern char *off_9DC950[5]; // weak
extern char *off_9DC958[3]; // weak
extern char *off_9DC95C[2]; // weak
extern const unsigned __int16 lbase[31];
extern const unsigned __int16 lext[31];
extern const unsigned __int16 dbase[32];
extern const unsigned __int16 dext[32];
extern int (__thiscall *NiImageReader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPNGReader::_vftable_)(void *p, char); // weak
extern char a_png[]; // idb
extern char user_png_ver[]; // idb
extern char aIhdr[5]; // weak
extern const long double version;
extern char fmt[]; // idb
extern char a_[]; // idb
extern char s[]; // idb
extern char what[]; // idb
extern char aFunctionSD[]; // idb
extern char aMainChunk[]; // idb
extern char aFunctionS[]; // idb
extern char a___tailCalls__[]; // idb
extern char aIn[]; // idb
extern char aD_1[]; // idb
extern char aS_6[]; // idb
extern char aSlnt[]; // idb
extern char a____0[]; // idb
extern char aStackTraceback[]; // idb
extern char aS_0[]; // idb
extern char aSD_0[]; // idb
extern char aSl[]; // idb
extern char aSS_3[]; // idb
extern char aExit[]; // idb
extern char aStackOverflow[]; // idb
extern char aStackOverflowS[]; // idb
extern char aBufferTooLarge[]; // idb
extern char aCannotSSS[]; // idb
extern char aQ[4]; // weak
extern char a_S[]; // idb
extern char aReopen[]; // idb
extern char aStdin[]; // idb
extern char aObjectLengthIs[]; // idb
extern char aSP_0[]; // idb
extern char aNil[]; // idb
extern char event[]; // idb
extern char k[]; // idb
extern char aPanicUnprotect[]; // idb
extern char aBadConversionN[]; // idb
extern char aVersionMismatc[]; // idb
extern char aMultipleLuaVms[]; // idb
extern char aBadArgumentDTo[]; // idb
extern char aCallingSOnBadS[]; // idb
extern char aMethod[7]; // weak
extern char aN_0[]; // idb
extern char aBadArgumentDS[]; // idb
extern char aSExpectedGotS[]; // idb
extern char extramsg[]; // idb
extern char aInvalidOptionS[]; // idb
extern char a_g[]; // idb
extern luaL_Reg loadedlibs[11];
extern char fname[]; // idb
extern char aNotEnoughMem_4[]; // idb
extern lua_TValue luaO_nilobject_; // idb
extern char log_2[256];
extern char aXx_0[]; // idb
extern char aNn[]; // idb
extern char aInvalidOptionC[]; // idb
extern char asc_9DD084[]; // idb
extern char aNull_1[7]; // weak
extern char asc_9DD090[3]; // weak
extern char aString_2[10]; // weak
extern char a____1[4]; // weak
extern char aErrorInErrorHa[]; // idb
extern char op[]; // idb
extern char aAttemptToYie_0[]; // idb
extern char aAttemptToYield[]; // idb
extern char aAttemptToLoadA[]; // idb
extern char aCStackOverflow[]; // idb
extern char aCannotResumeDe[]; // idb
extern char aCannotResumeNo[]; // idb
extern char aErrorIn__gcMet[]; // idb
extern char a__mode[]; // idb
extern char a__gc[]; // idb
extern char a__index[]; // idb
extern char aFunction_0[]; // idb
extern char aNoValue[]; // idb
extern char *off_9DD2C0[11]; // weak
extern const char *const luaT_eventname[17];
extern char a_14g[]; // idb
extern char aIndex[]; // idb
extern char aLoopInGettable[]; // idb
extern char aLoopInSettable[]; // idb
extern char aStringLengthOv[]; // idb
extern char aGetLengthOf[]; // idb
extern char aForStepMustBeA[]; // idb
extern char aForLimitMustBe[]; // idb
extern char aForInitialValu[]; // idb
extern Node dummynode_;
extern char aInvalidKeyToNe[]; // idb
extern char aTableOverflow[]; // idb
extern char aTableIndexIsNi[]; // idb
extern char aVararg[10]; // weak
extern char aTemporary[13]; // weak
extern char aC_4[]; // idb
extern char aC_3[5]; // weak
extern char aLua[4]; // weak
extern char aMain[5]; // weak
extern char a__1[3]; // weak
extern char aConstant[9]; // weak
extern char aUpvalue[8]; // weak
extern char aField[6]; // weak
extern char aGlobal_0[7]; // weak
extern char a_env[]; // idb
extern char aLocal[6]; // weak
extern char aMetamethod[11]; // weak
extern char aForIterator[13]; // weak
extern char aSDS[]; // idb
extern char aAttemptToSSSAS[]; // idb
extern char aAttemptToSASVa[]; // idb
extern char aConcatenate[]; // idb
extern char aPerformArithme[]; // idb
extern char aAttemptToCom_0[]; // idb
extern char aAttemptToCompa[]; // idb
extern const char *const hooknames[5];
extern luaL_Reg dblib;
extern char aNilOrTableExpe[]; // idb
extern char aFullUserdataEx[]; // idb
extern char aFunctionOrLeve[]; // idb
extern char aFunc[]; // idb
extern char aActivelines[]; // idb
extern char aIstailcall[]; // idb
extern char aNamewhat[]; // idb
extern char aName_1[]; // idb
extern char aIsvararg[]; // idb
extern char aNparams[]; // idb
extern char aNups[]; // idb
extern char aCurrentline[]; // idb
extern char aWhat[]; // idb
extern char aLastlinedefine[]; // idb
extern char aLinedefined[]; // idb
extern char aShort_src[]; // idb
extern char aSource[]; // idb
extern char aInvalidOption[]; // idb
extern char aS_1[]; // idb
extern char def[]; // idb
extern char aLevelOutOfRang[]; // idb
extern char aInvalidUpvalue[]; // idb
extern char aU_1[]; // idb
extern char aLuaFunctionExp[]; // idb
extern char a_hkey[]; // idb
extern char aK[]; // idb
extern char aExternalHook[]; // idb
extern char name[]; // idb
extern char aCont[6]; // weak
extern char aTan_0[4]; // weak
extern char aSin_0[4]; // weak
extern char aPow_1[4]; // weak
extern char aModf[5]; // weak
extern char aMin[]; // idb
extern char aMax_0[]; // idb
extern char aLog_0[4]; // weak
extern char aFloor[6]; // weak
extern char aExp_0[4]; // weak
extern char aCos_0[4]; // weak
extern char aCeil[5]; // weak
extern char aAtan_0[5]; // weak
extern char aAsin_0[5]; // weak
extern char aAcos_0[5]; // weak
extern luaL_Reg mathlib;
extern char aIntervalIsEmpt[]; // idb
extern char aWrongNumberOfA[]; // idb
extern char aHuge[]; // idb
extern char aPi[]; // idb
extern luaL_Reg bitlib;
extern char aTryingToAccess[]; // idb
extern char aWidthMustBePos[]; // idb
extern char aFieldCannotBeN[]; // idb
extern char aChar_0[5]; // weak
extern luaL_Reg strlib;
extern char aResultingStrin[]; // idb
extern char aStringSliceToo[]; // idb
extern char aValueOutOfRang[]; // idb
extern char aUnableToDumpGi[]; // idb
extern char aInvalidCapture[]; // idb
extern char aInvalidPattern[]; // idb
extern char aMalformedPat_1[]; // idb
extern char aMalformedPatte[]; // idb
extern char aMalformedPat_0[]; // idb
extern char aTooManyCapture[]; // idb
extern char aMissingAfterFI[]; // idb
extern char aPatternTooComp[]; // idb
extern char aUnfinishedCapt[]; // idb
extern char aInvalidCaptu_0[]; // idb
extern char a__[]; // idb
extern char aInvalidUseOfCI[]; // idb
extern char aInvalidReplace[]; // idb
extern char aStringFunction[]; // idb
extern char a03d[]; // idb
extern char aD_4[4]; // weak
extern char aInvalidFormatW[]; // idb
extern char aInvalidFormatR[]; // idb
extern char string[]; // idb
extern char aInvalidOptio_0[]; // idb
extern char aNotANonNegativ[]; // idb
extern char lenmod[]; // idb
extern char aNotANumberInPr[]; // idb
extern char aTime_0[5]; // weak
extern char aAll[]; // idb
extern const char *const options[2];
extern const int cat[6];
extern const char *const catnames[7];
extern luaL_Reg syslib;
extern char aUnableToGenera[]; // idb
extern char aFieldSMissingI[]; // idb
extern char aInvalidConvers[]; // idb
extern char aIsdst[]; // idb
extern char aYday[]; // idb
extern char aWday[]; // idb
extern char aYear[]; // idb
extern char aMonth[]; // idb
extern char aDay[]; // idb
extern char aHour[]; // idb
extern char aSec[]; // idb
extern char aT[3]; // weak
extern char aC[]; // idb
extern char aType_1[]; // idb
extern char aFull[]; // idb
extern char aEnd_0[]; // idb
extern char aCur[]; // idb
extern const int mode[3];
extern const char *const modenames[4];
extern const int mode_0[3];
extern const char *const modenames_0[4];
extern luaL_Reg iolib;
extern luaL_Reg flib;
extern char aFile[]; // idb
extern char aClosedFile[]; // idb
extern char tname[]; // idb
extern char aFileP[]; // idb
extern char aFileClosed[]; // idb
extern char aAttemptToUseAC[]; // idb
extern char a_io_output[]; // idb
extern char aCannotOpenFi_0[]; // idb
extern char aInvalidMode[]; // idb
extern char aRwa[]; // idb
extern char aStandardSFileI[]; // idb
extern char f[]; // idb
extern char aLf[]; // idb
extern char aInvalidFormat[]; // idb
extern char aTooManyArgumen[]; // idb
extern char aFileIsAlreadyC[]; // idb
extern char aNotAnIntegerIn[]; // idb
extern char aCannotCloseSta[]; // idb
extern char aStderr[]; // idb
extern char aStdout[]; // idb
extern char aStdin_0[]; // idb
extern char aTooManyOptions[]; // idb
extern luaL_Reg tab_funcs;
extern char aPositionOutOfB[]; // idb
extern char aWrongNumberO_0[]; // idb
extern char aInvalidValueSA[]; // idb
extern char aTooManyResults[]; // idb
extern char aInvalidOrderFu[]; // idb
extern char aRunning[8]; // weak
extern luaL_Reg co_funcs;
extern char aTooManyResul_0[]; // idb
extern char aTooManyArgum_0[]; // idb
extern char aCoroutineExpec[]; // idb
extern char aSuspended[]; // idb
extern char aNormal[7]; // weak
extern char aDead[5]; // weak
extern luaL_Reg pk_funcs;
extern luaL_Reg ll_funcs;
extern int (__cdecl *const searchers[5])(lua_State *);
extern char aUnableToGetMod[]; // idb
extern char p[]; // idb
extern char aSystemErrorD[]; // idb
extern char a_clibs[]; // idb
extern char aInit[5]; // weak
extern char aNoFileS[]; // idb
extern char aPackage_SMustB[]; // idb
extern char aErrorLoadingMo[]; // idb
extern char aPath_0[]; // idb
extern char aLuaopen_S[]; // idb
extern char r[]; // idb
extern char aCpath[]; // idb
extern char aNoModuleSInFil[]; // idb
extern char aNoFieldPackage[]; // idb
extern char aModuleSNotFoun[]; // idb
extern char aPackage_search[]; // idb
extern char aSearchers[]; // idb
extern char aLua_noenv[]; // idb
extern char byte_9DE7CC[4]; // idb
extern char asc_9DE7D0[]; // idb
extern char asc_9DE7D4[]; // idb
extern char aPreload[]; // idb
extern char aLoaded[]; // idb
extern char aConfig[]; // idb
extern char a__0[]; // idb
extern char aLua_cpath_5_2[]; // idb
extern char aLua_cpath[]; // idb
extern char a__dllLoadall_d[]; // idb
extern char envname1[]; // idb
extern char envname2[]; // idb
extern char aLua__luaLua_In[]; // idb
extern char var[]; // idb
extern char aPcall[6]; // weak
extern char aCollect[]; // idb
extern const char *const opts[12];
extern const int optsnum[11];
extern luaL_Reg base_funcs;
extern char aTostringMustRe[]; // idb
extern char asc_9DEAF4[]; // idb
extern char aBaseOutOfRange[]; // idb
extern char a__metatable[]; // idb
extern char aCannotChangeAP[]; // idb
extern char aTableOrStringE[]; // idb
extern char a__pairs[]; // idb
extern char a__ipairs[]; // idb
extern char aReaderFunction[]; // idb
extern char aTooManyNestedF[]; // idb
extern char aLoad[]; // idb
extern char aBt[]; // idb
extern char aAssertionFaile[]; // idb
extern char aIndexOutOfRang[]; // idb
extern char a_version[]; // idb
extern char aLua5_2[]; // idb
extern char aMemoryAllocati[]; // idb
extern char aTooManySLimi_0[]; // idb
extern char asc_9DEC74[]; // idb
extern char a__[3]; // weak
extern char aBreak[]; // idb
extern const char *const luaX_tokens[33];
extern char aLexicalElement[]; // idb
extern char aS_2[]; // idb
extern char aCharD[]; // idb
extern char aC_2[]; // idb
extern char aSNearS[]; // idb
extern char aChunkHasTooMan[]; // idb
extern char aMalformedNumbe[]; // idb
extern char asc_9DEDE0[]; // idb
extern char aPp[3]; // weak
extern char set[]; // idb
extern char aEe[3]; // weak
extern char aUnfinishedLo_0[24]; // weak
extern char aUnfinishedLong[]; // idb
extern char aHexadecimalDig[]; // idb
extern char aDecimalEscapeT[]; // idb
extern char aInvalidEscapeS[]; // idb
extern char aUnfinishedStri[]; // idb
extern char aInvalidLongStr[]; // idb
extern char byte_9DEEA9[]; // weak
extern $346E9CE2A8D7888D5091AC1B7AE5459B priority[15];
extern char aSExpected[]; // idb
extern char aTooManySLimitI[]; // idb
extern char aFunctionAtLine[]; // idb
extern char aSExpectedToClo[]; // idb
extern char aLocalVariables[]; // idb
extern char aUpvalues[]; // idb
extern char aCLevels[]; // idb
extern char aGotoSAtLineDJu[]; // idb
extern char aLabelsGotos[]; // idb
extern char aNoVisibleLabel[44]; // weak
extern char aSAtLineDNotIns[]; // idb
extern char aFunctions[]; // idb
extern char aItemsInAConstr[]; // idb
extern char aNameOr___Expec[]; // idb
extern char aSelf[]; // idb
extern char aFunctionArgume[]; // idb
extern char aUnexpectedSymb[]; // idb
extern char aCannotUse___Ou[]; // idb
extern char aSyntaxError[]; // idb
extern char aLabelSAlreadyD[]; // idb
extern char aForStep[]; // idb
extern char aForLimit[]; // idb
extern char aForIndex[]; // idb
extern char aForControl[]; // idb
extern char aForState[]; // idb
extern char aForGenerator[]; // idb
extern char aOrInExpected[]; // idb
extern char aSSPrecompiledC[]; // idb
extern char why[]; // idb
extern char aCorrupted[]; // idb
extern int dword_9DF27C; // weak
extern __int16 word_9DF280; // weak
extern char aNotA[]; // idb
extern char aVersionMisma_0[]; // idb
extern char aIncompatible[]; // idb
extern char aBinaryString[14]; // weak
extern char aAdd[]; // idb
extern char luaP_opmodes[]; // weak
extern char aControlStructu[]; // idb
extern char aOpcodes[]; // idb
extern char aFunctionOrExpr[]; // idb
extern char aConstants[]; // idb
extern char aConstructorToo[]; // idb
extern GUID IID_IUnknown;
extern GUID IID_IDispatch;
extern GUID IID_IOleClientSite;
extern GUID IID_IOleObject;
extern GUID IID_IOleWindow;
extern GUID IID_IOleInPlaceUIWindow;
extern GUID IID_IOleInPlaceFrame;
extern GUID IID_IOleInPlaceObject;
extern GUID IID_IOleInPlaceSite;
extern GUID IID_IConnectionPointContainer;
extern GUID IID_IOleControlSite;
extern GUID IID_IPersistStreamInit;
extern GUID IID_IWebBrowser2;
extern GUID DIID_DWebBrowserEvents2;
extern int (__thiscall *std::logic_error::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::length_error::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::out_of_range::_vftable_)(void *p, char); // weak
extern char asc_9DF644[]; // idb
extern int (__thiscall *std::locale::_Locimp::_vftable_)(void *p, char); // weak
extern int (__thiscall *std::error_category::_vftable_)(void *p, char); // weak
extern char aIostreamStream[22]; // weak
extern const __int64 std::_BADOFF; // weak
extern const char *const mods[15];
extern char aAb[3]; // weak
extern const wchar_t *const mods_0[15];
extern const int valid[15];
extern int (__thiscall *std::exception::_vftable_)(void *p, char); // weak
extern char aUnknownExcepti[18]; // weak
extern int (__thiscall *std::bad_cast::_vftable_)(void *p, char); // weak
extern int (__thiscall *type_info::_vftable_)(void *p, char); // weak
extern char aBadAllocation[15]; // weak
extern EHExceptionRecord ExceptionTemplate;
extern char _FPinit[]; // idb
extern char aAP[]; // idb
extern char aAmPm[]; // idb
extern char aCorexitprocess[]; // idb
extern const wchar_t ModuleName[]; // idb
extern _UNKNOWN _OP_FMODjmptab; // weak
extern unsigned __int64 One;
extern unsigned __int64 Bns;
extern unsigned __int64 Zero;
extern unsigned __int64 S;
extern unsigned __int64 NegZero;
extern unsigned __int64 One_0;
extern unsigned __int64 Bns_0;
extern unsigned __int64 NegOne;
extern unsigned __int64 NegZero_0;
extern unsigned __int64 S_0;
extern char aVisualCCrtNotE[64]; // weak
extern unsigned __int64 Mantissa;
extern unsigned __int64 Bns_1;
extern unsigned __int64 Sign;
extern unsigned __int64 Zero_0;
extern char aCmd_exe[]; // idb
extern char aC_0[3]; // weak
extern char varname[]; // idb
extern int (__cdecl *off_9DFB30)(int, int pexcept); // weak
extern char *off_9DFB34[2]; // weak
extern char *off_9DFB64[2]; // weak
extern char first_127char[127];
extern char a___0[]; // idb
extern char Src[]; // idb
extern char asc_9DFBF8[]; // idb
extern char asc_9DFBFC[]; // idb
extern char aPath[]; // idb
extern char aC_1[]; // idb
extern wchar_t asc_9DFD10[33]; // weak
extern _UNKNOWN unk_9E0198; // weak
extern _UNKNOWN unk_9E0318; // weak
extern char _pDestructExceptionObject[]; // idb
extern int (__thiscall *std::bad_exception::_vftable_)(void *p, char); // weak
extern char aBadException[14]; // weak
extern const wchar_t aKernel32_dll_0[]; // idb
extern char aFlsfree[]; // idb
extern char aFlssetvalue[]; // idb
extern char aFlsgetvalue[]; // idb
extern char aFlsalloc[]; // idb
extern _EXCEPTION_POINTERS GS_ExceptionPointers;
extern char ccsField[4];
extern char utf8encoding[6];
extern char utf16encoding[9];
extern char unicodeencoding[8];
extern char aE000[]; // idb
extern char __lookuptable[]; // weak
extern char XAMtoTagTab[1];
extern char aTz[]; // idb
extern rterrmsgs rterrs[22];
extern wchar_t aMicrosoftVisua[]; // idb
extern wchar_t asc_9E1B44[]; // idb
extern wchar_t a____2[]; // idb
extern wchar_t aProgramNameUnk[]; // idb
extern wchar_t aRuntimeErrorPr[]; // idb
extern _UNKNOWN _OP_ATAN2jmptab; // weak
extern _UNKNOWN _OP_EXPjmptab; // weak
extern _UNKNOWN _XcptActTab; // weak
extern int _First_FPE_Indx; // weak
extern int _Num_FPE; // weak
extern int _XcptActTabCount; // weak
extern char aExp10[6]; // weak
extern char aLog10_0[6]; // weak
extern _UNKNOWN _OP_SINHjmptab; // weak
extern char a_[]; // idb
extern tagLOCALETAB __rg_language; // idb
extern tagLOCALETAB __rg_country; // idb
extern __int16 __rglangidNotDefault[]; // weak
extern char aOcp[]; // idb
extern char aAcp[]; // idb
extern char aNorwegianNynor[]; // idb
extern wchar_t ccsField_0;
extern wchar_t utf8encoding_0;
extern wchar_t utf16encoding_0;
extern wchar_t unicodeencoding_0;
extern char prefix[]; // idb
extern char asc_9ECF9C[3]; // weak
extern char asc_9ECFA4[2]; // weak
extern char asc_9ECFB4[]; // idb
extern char asc_9ECFC4[]; // idb
extern char *asc_9ECFCC[]; // idb
extern char aOperator[]; // idb
extern char asc_9ECFE4[]; // idb
extern char *asc_9ECFE8[]; // idb
extern char *a__pascal[]; // idb
extern char a__based[9]; // weak
extern const char *const tokenTable[12];
extern const char *const nameTable[80];
extern const char *const rttiTable[5];
extern int (*charNode::_vftable_[2])(); // weak
extern int (*pDNameNode::_vftable_[2])(); // weak
extern int (*DNameStatusNode::_vftable_[2])(); // weak
extern int (*pairNode::_vftable_[2])(); // weak
extern int (*pcharNode::_vftable_[2])(); // weak
extern char a__[]; // idb
extern char aFlat[]; // idb
extern char aFor_0[]; // idb
extern char aNonTypeTemplat[29]; // weak
extern char aUnsigned[]; // idb
extern char aLong[]; // idb
extern char aInt_0[5]; // weak
extern char aShort_0[7]; // weak
extern char aChar[6]; // weak
extern char aVoid[]; // idb
extern char aEllipsis[11]; // weak
extern char aEllipsis_0[12]; // weak
extern char a___[]; // idb
extern char aThrow[]; // idb
extern char asc_9ED2D4[]; // idb
extern char aS_7[]; // idb
extern char asc_9ED2DC[]; // idb
extern char aTemplatePara_0[]; // idb
extern char aNull_0[]; // idb
extern char aCliPin_ptr[14]; // weak
extern char aCliArray[]; // idb
extern char aVoid_0[]; // idb
extern char asc_9ED320[]; // idb
extern char aAnonymousNames[]; // idb
extern char asc_9ED33C[]; // idb
extern char aGenericType[14]; // weak
extern char aTemplateParame[]; // idb
extern char aUnknownEcsu[15]; // weak
extern char aUnion[]; // idb
extern char aStruct[8]; // weak
extern char aClass[7]; // weak
extern char aEnum[]; // idb
extern char aCoclass[9]; // weak
extern char aCointerface[13]; // weak
extern char asc_9ED3B0[]; // idb
extern char aExternC[]; // idb
extern char aThunk[]; // idb
extern char aPublic[]; // idb
extern char aProtected[12]; // weak
extern char aPrivate[10]; // weak
extern char aVirtual[]; // idb
extern char aStatic[]; // idb
extern char aTemplateStatic[]; // idb
extern char aTemplateStat_0[49]; // weak
extern char aLocalStaticDes[33]; // weak
extern char aAdjustor[]; // idb
extern char aVtordisp[]; // idb
extern char aVtordispex[]; // idb
extern char asc_9ED4B4[]; // idb
extern char asc_9ED4B8[]; // idb
extern char asc_9ED4BC[]; // idb
extern char aConst_0[]; // idb
extern char aVolatile_0[]; // idb
extern char aCv[]; // idb
extern char aVolatile_1[]; // idb
extern char aVolatile_2[]; // idb
extern char aConst[]; // idb
extern char aSigned[]; // idb
extern char aDouble[]; // idb
extern char aBool[5]; // weak
extern char aUnknown_0[10]; // weak
extern char aWchar_t[8]; // weak
extern char a__int128[9]; // weak
extern char a__int32[8]; // weak
extern char a__int64[8]; // weak
extern char a__int16[8]; // weak
extern char a__w64[]; // idb
extern char a__int8[7]; // weak
extern char aFloat[6]; // weak
extern char aLong_0[5]; // weak
extern char aInt[4]; // weak
extern char aShort[6]; // weak
extern char aStdNullptr_t[]; // idb
extern char __lookuptable_s[]; // weak
extern char aGetprocesswind[]; // idb
extern char aGetuserobjecti[]; // idb
extern char aGetlastactivep[]; // idb
extern char aGetactivewindo[]; // idb
extern char aMessageboxw[]; // idb
extern const wchar_t aUser32_dll_0[]; // idb
extern char aSystemroot[11]; // weak
extern char a1Qnan[]; // idb
extern char a1Inf[]; // idb
extern char a1Ind[6]; // weak
extern const wchar_t FileName[]; // idb
extern GUID CLSID_FilterGraph;
extern GUID IID_IMediaControl;
extern GUID IID_IMediaEventEx;
extern GUID IID_IVideoWindow;
extern GUID IID_IGraphBuilder;
extern const unsigned int NiActorManager::INVALID_SEQUENCE_ID; // weak
extern const unsigned int NiActorManager::ANY_EVENT_CODE; // weak
extern unsigned int NiActorManager::INVALID_EVENT_CODE; // idb
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiControllerSequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTObjectAllocator<NiActorManager::TimelineData>_NiActorManager::TimelineData>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTextKeyMatch::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiActorManager::ChainCompletionInfo::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiObject___NiObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiObject___bool>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::Sequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::SequenceGroup__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTObjectList<NiActorManager::TimelineData>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiKFMTool::Sequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiKFMTool::SequenceGroup__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiControllerSequence__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiActorManager::CallbackData>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiInterpController>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<NiObject___NiObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<NiObject___bool>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiActorManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiActorManager::CompletionInfo::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiKFMTool::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::Transition__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiKFMTool::Transition__>::_vftable_)(void *p, char); // weak
extern char aStart_0[]; // idb
extern char aSS_4[]; // idb
extern char aNivisdata[]; // idb
extern char aNiviscontrolle[]; // idb
extern char aNiuvdata[]; // idb
extern char aNiuvcontroller[]; // idb
extern char aNitransformint[]; // idb
extern char aNitransformdat[]; // idb
extern char aNitransformcon[]; // idb
extern char aNitexturetrans[]; // idb
extern char aNitextkeyextra[]; // idb
extern char aNistringpalett[]; // idb
extern char aNisequencestre[]; // idb
extern char aNisequence[]; // idb
extern char aNirotdata[]; // idb
extern char aNirollcontroll[]; // idb
extern char aNiquaternionin[]; // idb
extern char aNiposdata[]; // idb
extern char aNipoint3interp[]; // idb
extern char aNipathinterpol[]; // idb
extern char aNipathcontroll[]; // idb
extern char aNimultitargett[]; // idb
extern char aNimorphdata[]; // idb
extern char aNimaterialcolo[]; // idb
extern char aNilookatinterp[]; // idb
extern char aNilookatcontro[]; // idb
extern char aNilightdimmerc[]; // idb
extern char aNilightcolorco[]; // idb
extern char aNikeyframemana[]; // idb
extern char aNikeyframedata[]; // idb
extern char aNikeyframecont[]; // idb
extern char aNigeommorpherc[]; // idb
extern char aNifloatsextr_0[]; // idb
extern char aNifloatsextr_1[]; // idb
extern char aNifloatinterpo[]; // idb
extern char aNifloatextrada[]; // idb
extern char aNifloatdata[]; // idb
extern char aNiflipcontroll[]; // idb
extern char aNicontrollerse[]; // idb
extern char aNicontrollerma[]; // idb
extern char aNicolorinterpo[]; // idb
extern char aNicolorextra_0[]; // idb
extern char aNicolordata[]; // idb
extern char aNibsplinetrans[]; // idb
extern char aNibsplinepoint[]; // idb
extern char aNibsplinefloat[]; // idb
extern char aNibsplinecompt[]; // idb
extern char aNibsplinecompp[]; // idb
extern char aNibsplinecompf[]; // idb
extern char aNibsplinecompc[]; // idb
extern char aNibsplinecolor[]; // idb
extern char aNibsplinedata[]; // idb
extern char aNibsplinebasis[]; // idb
extern char aNibooltimeline[]; // idb
extern char aNiboolinterpol[]; // idb
extern char aNibooldata[]; // idb
extern char aNibonelodcontr[]; // idb
extern char aNiblendtransfo[]; // idb
extern char aNiblendquatern[]; // idb
extern char aNiblendpoint3i[]; // idb
extern char aNiblendfloatin[]; // idb
extern char aNiblendcolorin[]; // idb
extern char aNiblendboolint[]; // idb
extern char aNiblendaccumtr[]; // idb
extern char aNialphacontrol[]; // idb
extern int (__stdcall *NiTextKeyExtraData::_vftable_)(char); // weak
extern char aTextkey[]; // idb
extern char aSS_1[]; // idb
extern char aText_0[]; // idb
extern char aTime[]; // idb
extern char pcPrefix[]; // idb
extern int (__thiscall *NiTArray<char__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiStringPalette::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiMultiTargetTransformController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiControllerSequence::_vftable_)(void *p, char); // weak
extern char aMorph[]; // idb
extern char aProp[5]; // weak
extern int (__thiscall *NiBlendAccumTransformInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTransformController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiTSet<NiNode__>__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiTSet<NiBoneLODController::SkinInfo__>__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBoneLODController::_vftable_)(void *p, char); // weak
extern char Control[]; // idb
extern char aM_uinumlods[]; // idb
extern char aM_ilod[]; // idb
extern float NiKFMTool::MAX_DURATION; // idb
extern unsigned int NiKFMTool::SYNC_SEQUENCE_ID_NONE; // idb
extern char a___1[]; // idb
extern char asc_9EFA64[]; // idb
extern char asc_9EFA68[]; // idb
extern char aLayers[7]; // weak
extern char aGroupid[8]; // weak
extern char aLayergroup[11]; // weak
extern char aTextkeypairs[13]; // weak
extern char aIntermediatean[18]; // weak
extern char aDuration[9]; // weak
extern char aMorph_0[6]; // weak
extern char aBlend[6]; // weak
extern char aType_0[5]; // weak
extern char aTransition[12]; // weak
extern char aIndex_0[6]; // weak
extern char aEventcode[10]; // weak
extern char asc_9EFAF0[]; // idb
extern char aAnimation[10]; // weak
extern char aModel_0[6]; // weak
extern char aDefaultkfpath[14]; // weak
extern char aDefaultnifpath[15]; // weak
extern char aDefaultpaths[13]; // weak
extern char aEnd_kfm_file[13]; // weak
extern char asc_9EFB48[3]; // weak
extern char aAnimmerseVersi[]; // idb
extern char aGamebryoKfmFil[]; // idb
extern char aDDTt_scale_v[]; // idb
extern char aDDTt_scale_u[]; // idb
extern char aDDTt_rotate[]; // idb
extern char aDDTt_transla_0[]; // idb
extern char aDDTt_translate[]; // idb
extern int (__thiscall *NiTextureTransformController::_vftable_)(void *p, char); // weak
extern char aSelf_illum[11]; // weak
extern char aSpec[5]; // weak
extern char aDiff[5]; // weak
extern char aAmb[4]; // weak
extern int (__thiscall *NiMaterialColorController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiAlphaController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiAVObjectPalette::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiAVObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiAVObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiAVObject__>_NiAVObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___unsigned_int>_unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiControllerSequence>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiControllerManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiAVObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDefaultAVObjectPalette::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiFloatData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPosData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiVisController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiUVData::_vftable_)(void *p, char); // weak
extern char aM_uinumvtiling[]; // idb
extern char aM_uinumvoffset[]; // idb
extern char aM_uinumutiling[]; // idb
extern char aM_uinumuoffset[]; // idb
extern int (__thiscall *NiUVController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTransformInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiSequenceStreamHelper::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiTransformController>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiSequence::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiRotData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiFloatController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiRollController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiQuaternionInterpolator::_vftable_)(void *p, char); // weak
extern char aM_spquaternion[]; // idb
extern char aM_kquaternionv[]; // idb
extern int (__thiscall *NiPoint3Interpolator::_vftable_)(void *p, char); // weak
extern char aM_sppoint3data[]; // idb
extern char pPrefix[]; // idb
extern int (__thiscall *NiPathInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPathController::_vftable_)(void *p, char); // weak
extern char aTargetD[]; // idb
extern char aM_usnuminterps[]; // idb
extern int (__thiscall *NiMorphData::_vftable_)(void *p, char); // weak
extern char aMtD[]; // idb
extern char aM_pcname[]; // idb
extern char pcRttiName[]; // idb
extern char aM_uinumvertspe[]; // idb
extern char aM_uinumtargets[]; // idb
extern int (__thiscall *NiLookAtInterpolator::_vftable_)(void *p, char); // weak
extern char aM_pklookat[]; // idb
extern int (__thiscall *NiLookAtController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiLightDimmerController::_vftable_)(void *p, char); // weak
extern char aDiffuse[8]; // weak
extern char aAmbient[8]; // weak
extern int (__thiscall *NiLightColorController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSequence>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiSequence>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSequence>>_NiPointer<NiSequence>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiSequence>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiKeyframeManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTransformData::_vftable_)(void *p, char); // weak
extern char aM_uinumscaleke[]; // idb
extern char aM_uinumposkeys[]; // idb
extern char aM_uinumrotkeys[]; // idb
extern int (__thiscall *NiGeomMorpherController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiFloatsExtraDataPoint3Controller::_vftable_)(void *p, char); // weak
extern char aSD[]; // idb
extern char aM_ifloatsextra[]; // idb
extern int (__thiscall *NiFloatsExtraDataController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiFloatInterpolator::_vftable_)(void *p, char); // weak
extern char aM_spfloatdata[]; // idb
extern char aM_ffloatvalue[]; // idb
extern int (__thiscall *NiFloatExtraDataController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiTexture>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiFlipController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiColorInterpolator::_vftable_)(void *p, char); // weak
extern char aM_spcolordata[]; // idb
extern char aM_kcolorvalue[]; // idb
extern int (__thiscall *NiColorExtraDataController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiColorData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBSplineTransformInterpolator::_vftable_)(void *p, char); // weak
extern char aM_kscalecphand[]; // idb
extern char aM_krotcphandle[]; // idb
extern char aM_ktranscphand[]; // idb
extern int (__thiscall *NiBSplinePoint3Interpolator::_vftable_)(void *p, char); // weak
extern char aM_kpoint3cphan[]; // idb
extern int (__thiscall *NiBSplineFloatInterpolator::_vftable_)(void *p, char); // weak
extern char aM_kfloatcphand[]; // idb
extern int (__thiscall *NiBSplineCompTransformInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBSplineCompPoint3Interpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBSplineCompFloatInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBSplineCompColorInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBSplineColorInterpolator::_vftable_)(void *p, char); // weak
extern char aM_kcoloracphan[]; // idb
extern int (__thiscall *NiBSplineData::_vftable_)(void *p, char); // weak
extern char aM_uicompactcon[]; // idb
extern char aM_uicontrolpoi[]; // idb
extern int (__thiscall *NiBSplineBasisData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBoolTimelineInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBoolInterpolator::_vftable_)(void *p, char); // weak
extern char aM_spbooldata[]; // idb
extern char aM_bboolvalue[]; // idb
extern int (__thiscall *NiBoolData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBlendTransformInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBlendQuaternionInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBlendPoint3Interpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBlendFloatInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBlendColorInterpolator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBlendBoolInterpolator::_vftable_)(void *p, char); // weak
extern const unsigned __int16 NiInterpController::INVALID_INDEX; // weak
extern int (__thiscall *NiInterpController::_vftable_)(void *p, char); // weak
extern char aIsmanagercontr[]; // idb
extern char aNiinterpcontro[]; // idb
extern const unsigned __int8 NiBlendInterpolator::INVALID_INDEX; // weak
extern int (__thiscall *NiBlendInterpolator::_vftable_)(void *p, char); // weak
extern char aM_ucsingleidx[]; // idb
extern char aM_ucinterpcoun[]; // idb
extern char aM_bonlyusehigh[]; // idb
extern char aM_fweightthres[]; // idb
extern char aManagercontrol[]; // idb
extern char aMs_ucarraygrow[]; // idb
extern char aM_ucarraysize[]; // idb
extern char aNiblendinterpo[]; // idb
extern int (__thiscall *NiSingleInterpController::_vftable_)(void *p, char); // weak
extern char aNisingleinterp[]; // idb
extern char aM_fscale[]; // idb
extern char aM_krotate[]; // idb
extern char aM_ktranslate[]; // idb
extern char aNiquattransfor[]; // idb
extern const unsigned __int8 NiInterpolator::INVALID_BOOL; // weak
extern int (__thiscall *NiInterpolator::_vftable_)(void *p, char); // weak
extern char aNiinterpolator[]; // idb
extern int (__thiscall *NiFloatInterpController::_vftable_)(void *p, char); // weak
extern char aNifloatinterpc[]; // idb
extern int (__thiscall *NiPoint3InterpController::_vftable_)(void *p, char); // weak
extern char aNipoint3inte_0[]; // idb
extern int (__thiscall *NiBoolInterpController::_vftable_)(void *p, char); // weak
extern char aNiboolinterpco[]; // idb
extern int (__thiscall *NiKeyBasedInterpolator::_vftable_)(void *p, char); // weak
extern char aNikeybasedinte[]; // idb
extern char aNifloatcontrol[]; // idb
extern int (__thiscall *NiExtraDataController::_vftable_)(void *p, char); // weak
extern char aExtraDataName[]; // idb
extern char aNiextradatacon[]; // idb
extern int (__thiscall *NiBSplineInterpolator::_vftable_)(void *p, char); // weak
extern char aM_fendtime[]; // idb
extern char aM_fstarttime[]; // idb
extern char aNibsplineinter[]; // idb
extern int (__thiscall *NiTArray<NiCollisionGroup::Record__>::_vftable_)(void *p, char); // weak
extern char aNicollisiondat[]; // idb
extern int (__thiscall *NiCollisionData::_vftable_)(void *p, char); // weak
extern char aSUnknown[]; // idb
extern char aSUse_nibound[]; // idb
extern char aSNotest[]; // idb
extern char aSUse_abv[]; // idb
extern char aSUse_tri[]; // idb
extern char aSUse_obb[]; // idb
extern char aSPropagate_nev[]; // idb
extern char aSPropagate_alw[]; // idb
extern char aSPropagate_o_0[]; // idb
extern char aSPropagate_on_[]; // idb
extern char aM_kworldveloci[]; // idb
extern char aM_klocalveloci[]; // idb
extern char aM_pkmodelabvTy[19]; // weak
extern char aM_ecollisionmo[]; // idb
extern char aM_epropagation[]; // idb
extern int (__stdcall *NiBoundingVolume::_vftable_[2])(int); // weak
extern int (__stdcall *NiSphereBV::_vftable_[2])(int kStream); // weak
extern char aRadiusG[]; // idb
extern char aCenter[]; // idb
extern char aSSphere_bv[]; // idb
extern int (__stdcall *NiHalfSpaceBV::_vftable_[2])(int kStream); // weak
extern char aSHalfspace_bv[]; // idb
extern int (__thiscall *NiTArray<NiBoundingVolume__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiUnionBV::_vftable_)(NiUnionBV *this, int uiSize); // weak
extern char aChildI[]; // idb
extern char aSUnion_bv[]; // idb
extern int (__thiscall *NiCapsuleBV::_vftable_)(NiCapsuleBV *this, int stream); // weak
extern char aSCapsule_bv[]; // idb
extern int (__stdcall *NiBoxBV::_vftable_[2])(int kStream); // weak
extern char aSBox_bv[]; // idb
extern int (__thiscall *NiOBBRoot::_vftable_)(void *p, char); // weak
extern int (__stdcall *NiIntersector::_vftable_)(int kV0, int kV1); // weak
extern int (__stdcall *NiSphereTriIntersector::_vftable_)(int kV0, int kV1); // weak
extern int (__stdcall *NiCapsuleSphereIntersector::_vftable_)(int kV0, int kV1); // weak
extern int (__stdcall *NiCapsuleCapsuleIntersector::_vftable_)(int kV0, int kV1); // weak
extern int (__stdcall *NiCapsuleTriIntersector::_vftable_)(int kV0, int kV1); // weak
extern int (__stdcall *NiBoxCapsuleIntersector::_vftable_)(int kV0, int kV1); // weak
extern int (__stdcall *NiBoxSphereIntersector::_vftable_)(int kV0, int kV1); // weak
extern int (__thiscall *NiOBBNode::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiOBBLeaf::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiDynamicEffect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDynamicEffectState::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDynamicEffect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiDynamicEffect__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiAVObject>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiNode::_vftable_)(void *p, char); // weak
extern char aEffectD[]; // idb
extern char aM_bvisual[]; // idb
extern char aNinode[]; // idb
extern char aExtradata[]; // idb
extern char aEd03d[]; // idb
extern int (__thiscall *NiObjectNET::_vftable_)(void *p, char); // weak
extern char aNiobjectnet[]; // idb
extern int (__thiscall *NiObject::_vftable_)(void *p, char); // weak
extern char aM_uirefcount[]; // idb
extern char aThis[]; // idb
extern char aNiobject[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiAVObject::_vftable_)(void *p, char); // weak
extern char aNicollisionswi[]; // idb
extern char aM_spcollisiono[]; // idb
extern char aSelupdatepropc[]; // idb
extern char aSelupdaterigid[]; // idb
extern char aSelupdatetrans[]; // idb
extern char aSelupdate[]; // idb
extern char aM_kworldbound[]; // idb
extern char aM_worldscale[]; // idb
extern char aM_worldrotate[]; // idb
extern char aM_worldtransla[]; // idb
extern char aM_flocalscale[]; // idb
extern char aM_localrotate[]; // idb
extern char aM_localtransla[]; // idb
extern char aM_bappculled[]; // idb
extern char aNiavobject[]; // idb
extern char aSGGGGGGGGG[]; // idb
extern int (__thiscall *NiMaterialProperty::_vftable_)(void *p, char); // weak
extern char aM_falpha[]; // idb
extern char aM_fshine[]; // idb
extern char aM_emit[]; // idb
extern char aM_spec[]; // idb
extern char aM_diff[]; // idb
extern char aM_amb[]; // idb
extern char aNimaterialprop[]; // idb
extern char aSGGG[]; // idb
extern int (__thiscall *NiRenderer::_vftable_)(void *p, char); // weak
extern char aNirenderer[]; // idb
extern int (__thiscall *NiCullingProcess::_vftable_)(void *p, char); // weak
extern char aNiproperty[]; // idb
extern char aSSource_ignore[]; // idb
extern char aSSource_emissi[]; // idb
extern char aSSource_amb_di[]; // idb
extern char aSLighting_e[]; // idb
extern char aSLighting_e_a_[20]; // weak
extern char aM_esource[]; // idb
extern char aNivertexcolorp[]; // idb
extern char aSAlpha_srcal_0[]; // idb
extern char aSAlpha_invdest[]; // idb
extern char aSAlpha_destalp[]; // idb
extern char aSAlpha_invsrca[]; // idb
extern char aSAlpha_srcalph[]; // idb
extern char aSAlpha_invde_0[]; // idb
extern char aSAlpha_destcol[]; // idb
extern char aSAlpha_invsrcc[]; // idb
extern char aSAlpha_srccolo[]; // idb
extern char aSAlpha_zero[]; // idb
extern char aSAlpha_one[]; // idb
extern char aSTest_never[]; // idb
extern char aSTest_greatere[]; // idb
extern char aSTest_notequal[]; // idb
extern char aSTest_greater[]; // idb
extern char aSTest_lessequa[]; // idb
extern char aSTest_equal[]; // idb
extern char aSTest_less[]; // idb
extern char aSTest_always[]; // idb
extern char aM_bnosorter[]; // idb
extern char aM_uctestref[]; // idb
extern char aM_etestmode[]; // idb
extern char aM_balphatest[]; // idb
extern char aM_edestblend[]; // idb
extern char aM_esrcblend[]; // idb
extern char aM_balpha[]; // idb
extern char aNialphapropert[]; // idb
extern char aS5_3f5_3f5_3f[]; // idb
extern char aS5_3f5_3f5_3f5[]; // idb
extern char aSFog_z_linear[]; // idb
extern char aSFog_range_sq[]; // idb
extern char aSFog_vertex_al[]; // idb
extern char aColor_0[]; // idb
extern char aFunction[]; // idb
extern char aDepth_0[]; // idb
extern char aEnable[]; // idb
extern char aNifogproperty[]; // idb
extern int (__thiscall *NiDirectionalLight::_vftable_)(void *p, char); // weak
extern char aNidirectionall[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiNode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiNode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiNode__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDynamicEffect::_vftable_)(void *p, char); // weak
extern char aUnaffectedNode[]; // idb
extern char aAffectedNodeD[]; // idb
extern char aNidynamiceffec[]; // idb
extern int (__thiscall *NiAmbientLight::_vftable_)(void *p, char); // weak
extern char aNiambientlight[]; // idb
extern int (__thiscall *NiSortAdjustNode::_vftable_)(void *p, char); // weak
extern char aNisortadjustno[]; // idb
extern int (__thiscall *NiCamera::_vftable_)(void *p, char); // weak
extern char aSLGRGTGBG[]; // idb
extern char aM_fmaxfarnearr[]; // idb
extern char aM_fminnearplan[]; // idb
extern char aM_kworldright[]; // idb
extern char aM_kworldup[]; // idb
extern char aM_kworlddir[]; // idb
extern char aM_kviewfrustum[]; // idb
extern char aNicamera[]; // idb
extern int (__thiscall *NiShaderFactory::_vftable_)(void *p, char); // weak
extern char pacFmt[]; // idb
extern char aLoadandregis_0[]; // idb
extern int (__thiscall *NiTArray<NiTexturingProperty::Map__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiTexturingProperty::ShaderMap__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTexturingProperty::_vftable_)(void *p, char); // weak
extern char aSWrap_s_wrap_t[]; // idb
extern char aSWrap_s_clamp_[]; // idb
extern char aSClamp_s_wrap_[]; // idb
extern char aSClamp_s_clamp[]; // idb
extern char aSFilter_bile_0[]; // idb
extern char aSFilter_near_0[]; // idb
extern char aSFilter_near_1[]; // idb
extern char aSFilter_triler[]; // idb
extern char aSFilter_bilerp[]; // idb
extern char aSFilter_neares[]; // idb
extern int (__thiscall *NiTexturingProperty::Map::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTexturingProperty::BumpMap::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTexturingProperty::ShaderMap::_vftable_)(void *p, char); // weak
extern char aM_uiid[]; // idb
extern char aShaderMap[]; // idb
extern char aM_uitexcoord[]; // idb
extern char aM_efilter[]; // idb
extern char aM_eclamp[]; // idb
extern char aM_sptexture[]; // idb
extern char aMultitextureDe[]; // idb
extern char aM_fbumpmat11[]; // idb
extern char aM_fbumpmat10[]; // idb
extern char aM_fbumpmat01[]; // idb
extern char aM_fbumpmat00[]; // idb
extern char aM_flumaoffset[]; // idb
extern char aM_flumascale[]; // idb
extern char aMultitextureBu[]; // idb
extern char aMultitexture_1[]; // idb
extern char aMultitextureGl[]; // idb
extern char aMultitexture_0[]; // idb
extern char aMultitextureDa[]; // idb
extern char aNitexturingpro[]; // idb
extern int (__thiscall *NiTexture::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiSourceTexture::_vftable_)(void *p, char); // weak
extern char aNisourcetextur[]; // idb
extern int (__thiscall *NiImageConverter::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTriShape::_vftable_)(void *p, char); // weak
extern char aNitrishape[]; // idb
extern int (__thiscall *NiRenderTargetGroup::_vftable_)(void *p, char); // weak
extern char aNirendertarget[]; // idb
extern int (__thiscall *NiRenderedTexture::_vftable_)(void *p, char); // weak
extern char aNirenderedtext[]; // idb
extern int (__thiscall *NiScreenElementsData::_vftable_)(void *p, char); // weak
extern char aM_usigrowby[]; // idb
extern char aM_usmaxiquanti[]; // idb
extern char aM_usvgrowby[]; // idb
extern char aM_usmaxvquanti[]; // idb
extern char aM_uspquantity[]; // idb
extern char aM_uspgrowby[]; // idb
extern char aM_usmaxpquanti[]; // idb
extern char aM_auspindexer[]; // idb
extern char aM_akpolygon[]; // idb
extern char aNiscreenelem_0[]; // idb
extern int (__thiscall *NiScreenElements::_vftable_)(void *p, char); // weak
extern char aNiscreenelemen[]; // idb
extern int (__thiscall *NiExtraData::_vftable_)(void *p, char); // weak
extern char aNiextradata[]; // idb
extern char aM_uisize[]; // idb
extern char aNibinaryextrad[]; // idb
extern int (__thiscall *NiShader::_vftable_)(void *p, char); // weak
extern char aNishader[]; // idb
extern int (__thiscall *NiPixelData::_vftable_)(void *p, char); // weak
extern char aFacesizeinbyte[]; // idb
extern char aTotalsizeinbyt[]; // idb
extern char aM_uifaces[]; // idb
extern char aM_uimipmapleve[]; // idb
extern char aHeight_0[]; // idb
extern char aWidth[]; // idb
extern char aNipixeldata[]; // idb
extern char aM_etest[]; // idb
extern char aTest_never[11]; // weak
extern char aTest_greatereq[18]; // weak
extern char aTest_notequal[14]; // weak
extern char aTest_greater[13]; // weak
extern char aTest_lessequal[15]; // weak
extern char aTest_equal[11]; // weak
extern char aTest_less[10]; // weak
extern char aTest_always[12]; // weak
extern char aM_bzwrite[]; // idb
extern char aM_bztest[]; // idb
extern char aNizbufferprope[]; // idb
extern int (__thiscall *NiAlphaAccumulator::_vftable_)(void *p, char); // weak
extern char aNialphaaccumul[]; // idb
extern char aSNGFGLGRGTGBGO[]; // idb
extern char aM_ivalue[]; // idb
extern char aNiintegerextra[]; // idb
extern int (__thiscall *NiStringExtraData::_vftable_)(void *p, char); // weak
extern char aM_pstring[]; // idb
extern char aNistringextrad[]; // idb
extern char aSApp_time[]; // idb
extern char aSApp_init[14]; // weak
extern char aSLoop[]; // idb
extern char aSReverse[]; // idb
extern char aSClamp[]; // idb
extern int (__thiscall *NiTimeController::_vftable_)(void *p, char); // weak
extern char aPlayBackwards[]; // idb
extern char aActive[]; // idb
extern char aCycleType[]; // idb
extern char aM_ptarget[]; // idb
extern char aM_flasttime[]; // idb
extern char aM_fhikeytime[]; // idb
extern char aM_flokeytime[]; // idb
extern char aM_fphase[]; // idb
extern char aM_ffrequency[]; // idb
extern char aNitimecontroll[]; // idb
extern int (__thiscall *NiRangeLODData::_vftable_)(void *p, char); // weak
extern char aRangeDGG[]; // idb
extern char aM_kworldcenter[]; // idb
extern char aM_kcenter[]; // idb
extern char aNirangeloddata[]; // idb
extern int (__thiscall *NiLODNode::_vftable_)(void *p, char); // weak
extern char aNullLodData[14]; // weak
extern char aNilodnode[]; // idb
extern int (__thiscall *NiGeometry::_vftable_)(void *p, char); // weak
extern char aNigeometry[]; // idb
extern int (__thiscall *NiSkinPartition::Partition::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiSkinPartition::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_float>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_float>::_vftable_)(void *p, char); // weak
extern char aNiskinpartitio[]; // idb
extern int (__thiscall *NiTriBasedGeomData::_vftable_)(void *p, char); // weak
extern char aM_ustriangles[]; // idb
extern char aNitribasedgeom[]; // idb
extern int (__thiscall *NiTriBasedGeom::_vftable_)(void *p, char); // weak
extern char aNitribasedge_0[]; // idb
extern char aNoname[9]; // weak
extern char a3d[]; // idb
extern char aBoneCount[]; // idb
extern char aHardwarePartit[]; // idb
extern char aRootParent[]; // idb
extern char aNiskininstance[]; // idb
extern char aNiaccumulator[]; // idb
extern int (*NiCollisionObject::_vftable_[2])(); // weak
extern char aM_pksceneobjec[]; // idb
extern char aNicollisionobj[]; // idb
extern char aNitexture[]; // idb
extern char aGGGG[]; // idb
extern char aSAction_invert[]; // idb
extern char aSAction_decrem[]; // idb
extern char aSAction_increm[]; // idb
extern char aSAction_replac[]; // idb
extern char aSAction_zero[]; // idb
extern char aSAction_keep[]; // idb
extern char aSDraw_both[]; // idb
extern char aSDraw_cw[]; // idb
extern char aSDraw_ccw[]; // idb
extern char aSDraw_ccw_or_b[]; // idb
extern char aM_edrawmode[]; // idb
extern char aM_epassact[]; // idb
extern char aM_ezfailact[]; // idb
extern char aM_efailact[]; // idb
extern char aM_uimask[]; // idb
extern char aM_uiref[]; // idb
extern char aM_benable[]; // idb
extern char aNistencilprope[]; // idb
extern int (__thiscall *NiGeometryGroupManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTriShapeDynamicData::_vftable_)(void *p, char); // weak
extern char aM_usactivetria[]; // idb
extern char aM_usactivevert[]; // idb
extern char aNitrishapedyna[]; // idb
extern char aSWGXGYGZG[]; // idb
extern int (__thiscall *NiPalette::_vftable_)(void *p, char); // weak
extern char aNipalette[]; // idb
extern int (__thiscall *NiTArray<NiObjectGroup__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiObject_const___unsigned_int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<void____cdecl____NiStream___NiObject___>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiObject______cdecl____void_>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___unsigned_short>::_vftable_)(void *p, char); // weak
extern char aCannotFindCrea[]; // idb
extern char aCannotOpenFile[]; // idb
extern int (__thiscall *NiTPointerMap<char_const___NiObject______cdecl____void_>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiObject______cdecl____void_>_NiObject______cdecl____void_>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___unsigned_short>_unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<NiObject_const___unsigned_int>::_vftable_)(void *p, char); // weak
extern char pBuffer[]; // idb
extern int (__thiscall *NiTArray<NiPointer<NiObject>>::_vftable_)(void *p, char); // weak
extern char aUnknownNifUser[]; // idb
extern char aNifUserDefined[]; // idb
extern char aWarningSHasToB[]; // idb
extern char aEndianMismatch[]; // idb
extern char aUnknownNifVers[]; // idb
extern char aNifVersionIsTo[]; // idb
extern char aNotANifFile[]; // idb
extern char aFileFormat[]; // idb
extern int (__thiscall *NiTStringPointerMap<NiObject______cdecl____void_>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<unsigned_short>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiStream::_vftable_)(void *p, char); // weak
extern char aS_4[]; // idb
extern char aSFalse[]; // idb
extern char aSTrue[]; // idb
extern char aSU[]; // idb
extern char aSHd[]; // idb
extern char aSHu[]; // idb
extern char aSD_1[]; // idb
extern char aSG[]; // idb
extern char aSP[]; // idb
extern char aSNull[]; // idb
extern char aSS[]; // idb
extern int (__thiscall *NiSkinData::_vftable_)(void *p, char); // weak
extern char aNiskindata[]; // idb
extern char aNiavobjectpale[]; // idb
extern char aNidefaultavobj[]; // idb
extern int (__thiscall *NiGeometryData::_vftable_)(void *p, char); // weak
extern char aM_spadditional[]; // idb
extern char aM_uccompressfl[]; // idb
extern char aM_uckeepflags[]; // idb
extern char aM_usdirtyflags[]; // idb
extern char aM_pktexture[]; // idb
extern char aNumTextureSets[]; // idb
extern char aM_pkcolor[]; // idb
extern char aM_kbound[]; // idb
extern char aNormalbinormal[]; // idb
extern char aM_pknormal[]; // idb
extern char aM_pkvertex[]; // idb
extern char aM_usvertices[]; // idb
extern char aNigeometrydata[]; // idb
extern int (__thiscall *NiLight::_vftable_)(void *p, char); // weak
extern char aM_kspec[]; // idb
extern char aM_kdiff[]; // idb
extern char aM_kamb[]; // idb
extern char aM_fdimmer[]; // idb
extern char aNilight[]; // idb
extern int (__thiscall *NiFloatsExtraData::_vftable_)(void *p, char); // weak
extern char aM_pfvalueI[]; // idb
extern char aNifloatsextrad[]; // idb
extern int (__thiscall *NiColorExtraData::_vftable_)(void *p, char); // weak
extern char aColor[]; // idb
extern char aNicolorextrada[]; // idb
extern int (__thiscall *NiTriStrips::_vftable_)(void *p, char); // weak
extern char aNitristrips[]; // idb
extern int (__thiscall *NiSwitchNode::_vftable_)(void *p, char); // weak
extern char aM_bupdateonlya[]; // idb
extern char aM_iindex[]; // idb
extern char aNiswitchnode[]; // idb
extern char aSGGGG[]; // idb
extern int (__thiscall *NiPropertyState::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiVertWeightsExtraData::_vftable_)(void *p, char); // weak
extern char aNivertweightse[]; // idb
extern char aNiscreenpolygo[]; // idb
extern char aNiscreengeomet[]; // idb
extern char aNiscreengeom_0[]; // idb
extern char aNiscreenspacec[]; // idb
extern char aNiwireframepro[]; // idb
extern char aNivectorextrad[]; // idb
extern char aNitristripsdat[]; // idb
extern char aNitrishapedata[]; // idb
extern char aNitextureeffec[]; // idb
extern char aNiswitchstring[]; // idb
extern char aNistringsextra[]; // idb
extern char aNispotlight[]; // idb
extern char aNispecularprop[]; // idb
extern char aNisourcecubema[]; // idb
extern char aNishadepropert[]; // idb
extern char aNiscreentextur[]; // idb
extern char aNiscreenloddat[]; // idb
extern char aNirotatingpa_0[]; // idb
extern char aNirotatingpart[]; // idb
extern char aNirendererspec[]; // idb
extern char aNipointlight[]; // idb
extern char aNiparticlesdat[]; // idb
extern char aNiparticles[]; // idb
extern char aNiparticleme_0[]; // idb
extern char aNiparticlemesh[]; // idb
extern char aNilinesdata[]; // idb
extern char aNilines[]; // idb
extern char aNiintegersextr[]; // idb
extern char aNifloatextra_0[]; // idb
extern char aNiditherproper[]; // idb
extern char aNiclusteraccum[]; // idb
extern char aNibspnode[]; // idb
extern char aNibooleanextra[]; // idb
extern char aNibillboardnod[]; // idb
extern char aNiautonormal_0[]; // idb
extern char aNiautonormalpa[]; // idb
extern char aNiadditionalge[]; // idb
extern int (__thiscall *NiShaderLibrary::_vftable_)(void *p, char); // weak
extern char a_nif[]; // idb
extern int (__thiscall *NiNIFImageReader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTriShapeData::_vftable_)(void *p, char); // weak
extern char aM_pustrilist[]; // idb
extern char aM_uitrilistlen[]; // idb
extern int (__thiscall *NiDepthStencilBuffer::_vftable_)(void *p, char); // weak
extern char aNidepthstencil[]; // idb
extern int (__thiscall *Ni2DBuffer::_vftable_)(void *p, char); // weak
extern char aNi2dbuffer[]; // idb
extern int (__thiscall *NiBackToFrontAccumulator::_vftable_)(void *p, char); // weak
extern char aNibacktofronta[]; // idb
extern int (__thiscall *NiLODData::_vftable_)(void *p, char); // weak
extern char aNiloddata[]; // idb
extern int (__thiscall *NiTriStripsData::_vftable_)(void *p, char); // weak
extern char aM_pusstriplist[]; // idb
extern char aM_pusstripleng[]; // idb
extern char aM_usstrips[]; // idb
extern int (__thiscall *NiDitherProperty::_vftable_)(void *p, char); // weak
extern char aM_bdither[]; // idb
extern int (__thiscall *NiRendererSpecificProperty::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiShadeProperty::_vftable_)(void *p, char); // weak
extern char aM_bsmooth[]; // idb
extern int (__thiscall *NiSpecularProperty::_vftable_)(void *p, char); // weak
extern char aM_bspec[]; // idb
extern int (__thiscall *NiWireframeProperty::_vftable_)(void *p, char); // weak
extern char aM_bwireframe[]; // idb
extern int (__thiscall *NiScreenGeometryData::ScreenElement::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiScreenGeometry::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiScreenGeometryData::ScreenElement__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiScreenGeometryData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiScreenPolygon::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiScreenPolygon>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiScreenTexture>>::_vftable_)(void *p, char); // weak
extern char aNumElements[]; // idb
extern char aM_bpixelaccura[]; // idb
extern int (__thiscall *NiScreenSpaceCamera::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiVectorExtraData::_vftable_)(void *p, char); // weak
extern char aVector5_3f5_3f[]; // idb
extern int (__thiscall *NiTextureEffect::_vftable_)(void *p, char); // weak
extern char aSFog_map[]; // idb
extern char aSEnvironment_m[]; // idb
extern char aSProjected_sha[]; // idb
extern char aSProjected_lig[]; // idb
extern char aSDiffuse_cube_[]; // idb
extern char aSSpecular_cube[]; // idb
extern char aSSphere_map[]; // idb
extern char aSWorld_perspec[]; // idb
extern char aSWorld_paralle[]; // idb
extern char aM_kmodelplane[]; // idb
extern char aM_bplaneenable[]; // idb
extern char aM_ecoordmode[]; // idb
extern char aM_eclamp_0[]; // idb
extern char aM_efilter_0[]; // idb
extern char aM_etexturemode[]; // idb
extern char aM_kmodelprojtr[]; // idb
extern char aM_kmodelprojma[]; // idb
extern int (__thiscall *NiSwitchStringExtraData::_vftable_)(void *p, char); // weak
extern char aM_ppcvalueI[]; // idb
extern int (__thiscall *NiStringsExtraData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPointLight::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiSpotLight::_vftable_)(void *p, char); // weak
extern char aM_fspotexponen[]; // idb
extern char aM_fspotangle[]; // idb
extern int (__thiscall *NiSourceCubeMap::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiScreenTexture::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiScreenLODData::_vftable_)(void *p, char); // weak
extern char aProportionDG[]; // idb
extern char aWorldBound[]; // idb
extern char aBound[]; // idb
extern int (__thiscall *NiParticlesData::_vftable_)(void *p, char); // weak
extern char aM_pkrotationax[]; // idb
extern char aM_pfrotationan[]; // idb
extern char aM_pkrotations[]; // idb
extern char aM_pfsizes[]; // idb
extern char aM_usactive[]; // idb
extern char aM_pfradii[]; // idb
extern char aM_fatten2[]; // idb
extern char aM_fatten1[]; // idb
extern char aM_fatten0[]; // idb
extern int (__thiscall *NiParticleMeshesData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiParticleMeshes::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiLinesData::_vftable_)(void *p, char); // weak
extern char aM_pkflags[]; // idb
extern int (__thiscall *NiLines::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiIntegersExtraData::_vftable_)(void *p, char); // weak
extern char aM_pivalueI[]; // idb
extern int (__thiscall *NiFloatExtraData::_vftable_)(void *p, char); // weak
extern char aM_fvalue[]; // idb
extern char aM_kworldplane[]; // idb
extern int (__thiscall *NiBSPNode::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBooleanExtraData::_vftable_)(void *p, char); // weak
extern char aM_bvalue[]; // idb
extern char aSRigid_face_ce[]; // idb
extern char aSAlways_face_0[]; // idb
extern char aSRigid_face_ca[]; // idb
extern char aSRotate_about_[]; // idb
extern char aSAlways_face_c[]; // idb
extern int (__thiscall *NiBillboardNode::_vftable_)(void *p, char); // weak
extern char aM_emode[]; // idb
extern int (__thiscall *NiParticles::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiAdditionalGeometryData::NiAGDDataBlock__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiAdditionalGeometryData::_vftable_)(void *p, char); // weak
extern char aMutable[]; // idb
extern char aStatic_0[]; // idb
extern char aConsistency[]; // idb
extern char aVolatile[]; // idb
extern char aKeep[]; // idb
extern char aM_uiblockoffse[]; // idb
extern char aM_uiblockindex[]; // idb
extern char aM_uistride[]; // idb
extern char aM_uitotalsize[]; // idb
extern char aM_uiunitsize[]; // idb
extern char aUnknown[]; // idb
extern char aAgd_nitype_cou[]; // idb
extern char aAgd_nitype_b_1[]; // idb
extern char aAgd_nitype_b_5[]; // idb
extern char aAgd_nitype_ble[]; // idb
extern char aAgd_nitype_b_2[]; // idb
extern char aAgd_nitype_u_8[]; // idb
extern char aAgd_nitype_u_4[]; // idb
extern char aAgd_nitype_u_2[]; // idb
extern char aAgd_nitype_uby[]; // idb
extern char aAgd_nitype_b_0[]; // idb
extern char aAgd_nitype_b_3[]; // idb
extern char aAgd_nitype_byt[]; // idb
extern char aAgd_nitype_b_4[]; // idb
extern char aAgd_nitype_u_6[]; // idb
extern char aAgd_nitype_u_7[]; // idb
extern char aAgd_nitype_ush[]; // idb
extern char aAgd_nitype_u_5[]; // idb
extern char aAgd_nitype_sho[]; // idb
extern char aAgd_nitype_s_1[]; // idb
extern char aAgd_nitype_s_0[]; // idb
extern char aAgd_nitype_s_2[]; // idb
extern char aAgd_nitype_u_3[]; // idb
extern char aAgd_nitype_ulo[]; // idb
extern char aAgd_nitype_u_0[]; // idb
extern char aAgd_nitype_u_1[]; // idb
extern char aAgd_nitype_l_2[]; // idb
extern char aAgd_nitype_lon[]; // idb
extern char aAgd_nitype_l_0[]; // idb
extern char aAgd_nitype_l_1[]; // idb
extern char aAgd_nitype_flo[]; // idb
extern char aAgd_nitype_f_0[]; // idb
extern char aAgd_nitype_f_1[]; // idb
extern char aAgd_nitype_f_2[]; // idb
extern char aM_uitype[]; // idb
extern char pcValue[]; // idb
extern char aM_pucdatablock[]; // idb
extern char aM_uidatablocks[]; // idb
extern char aDatablockIndex[]; // idb
extern char aM_adatablocks_[]; // idb
extern char aDatastreamInde[]; // idb
extern char aM_uidatastream[]; // idb
extern char aM_usvertexcoun[]; // idb
extern char aNimilesaudiosy[]; // idb
extern char aNimilessource[]; // idb
extern char aNimileslistene[]; // idb
extern char aNiaudiosystem[]; // idb
extern char aNiaudiosource[]; // idb
extern char aNiaudiolistene[]; // idb
extern int (__stdcall *NiTPointerList<NiAudioSource__>::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiAudioSource__>::_vftable_)(int); // weak
extern int (__stdcall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiAudioSource__>::_vftable_)(int); // weak
extern int (__stdcall *NiAudioSystem::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerList<NiProviderInfo__>::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiProviderInfo__>::_vftable_)(int); // weak
extern int (__stdcall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiProviderInfo__>::_vftable_)(int); // weak
extern int (__stdcall *NiMilesAudioSystem::_vftable_)(int); // weak
extern int (__stdcall *NiMilesSource::_vftable_)(int); // weak
extern int (__stdcall *NiMilesListener::_vftable_)(int); // weak
extern int (__stdcall *NiAudioSource::_vftable_)(int); // weak
extern int (__stdcall *NiAudioListener::_vftable_)(int); // weak
extern char aNipsysvortexfi[]; // idb
extern char aNipsysupdatect[]; // idb
extern char aNipsysturbulen[]; // idb
extern char aNipsysspherica[]; // idb
extern char aNipsyssphereem[]; // idb
extern char aNipsysspawnmod[]; // idb
extern char aNipsysrotation[]; // idb
extern char aNipsysresetonl[]; // idb
extern char aNipsysradialfi[]; // idb
extern char aNipsysposition[]; // idb
extern char aNipsysplanarco[]; // idb
extern char aNipsysmodifier[]; // idb
extern char aNipsysmeshupda[]; // idb
extern char aNipsysmeshemit[]; // idb
extern char aNipsysinitialr[]; // idb
extern char aNipsysinitia_2[]; // idb
extern char aNipsysinitia_1[]; // idb
extern char aNipsysinitia_0[]; // idb
extern char aNipsysgrowfade[]; // idb
extern char aNipsysgravitys[]; // idb
extern char aNipsysgravityf[]; // idb
extern char aNipsysgravitym[]; // idb
extern char aNipsysfieldmax[]; // idb
extern char aNipsysfieldmag[]; // idb
extern char aNipsysfieldatt[]; // idb
extern char aNipsysemitters[]; // idb
extern char aNipsysemitterp[]; // idb
extern char aNipsysemitte_1[]; // idb
extern char aNipsysemitterl[]; // idb
extern char aNipsysemitteri[]; // idb
extern char aNipsysemitte_2[]; // idb
extern char aNipsysemitterd[]; // idb
extern char aNipsysemitterc[]; // idb
extern char aNipsysemitte_0[]; // idb
extern char aNipsysdragmodi[]; // idb
extern char aNipsysdragfiel[]; // idb
extern char aNipsysdata[]; // idb
extern char aNipsyscylinder[]; // idb
extern char aNipsyscolormod[]; // idb
extern char aNipsyscollider[]; // idb
extern char aNipsysboxemitt[]; // idb
extern char aNipsysboundupd[]; // idb
extern char aNipsysbombmodi[]; // idb
extern char aNipsysagedeath[]; // idb
extern char aNipsysairfield[]; // idb
extern char aNipsysairfie_2[]; // idb
extern char aNipsysairfie_1[]; // idb
extern char aNipsysairfie_0[]; // idb
extern char aNiparticlesyst[]; // idb
extern char aNimeshpsysdata[]; // idb
extern char aNimeshparticle[]; // idb
extern int (__thiscall *NiPSysEmitterCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysVortexFieldModifier::_vftable_)(void *p, char); // weak
extern char aDirection[]; // idb
extern int (__thiscall *NiPSysUpdateCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysTurbulenceFieldModifier::_vftable_)(void *p, char); // weak
extern char aFrequency[]; // idb
extern int (__thiscall *NiPSysSphericalCollider::_vftable_)(void *p, char); // weak
extern char aRadius[]; // idb
extern char aColliderObject[]; // idb
extern int (__thiscall *NiPSysSphereEmitter::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysSpawnModifier::_vftable_)(void *p, char); // weak
extern char aLifeSpanVariat[]; // idb
extern char aLifeSpan[]; // idb
extern char aSpawnDirChaos[]; // idb
extern char aSpawnSpeedChao[]; // idb
extern char aMaxNumToSpawn[]; // idb
extern char aMinNumToSpawn[]; // idb
extern char aPercentageSpaw[]; // idb
extern char aNumSpawnGenera[]; // idb
extern int (__thiscall *NiPSysRotationModifier::_vftable_)(void *p, char); // weak
extern char aInitialAxis[]; // idb
extern char aRandomInitialA[]; // idb
extern char aInitialRotat_1[]; // idb
extern char aInitialRotatio[]; // idb
extern char aRandomRotSpeed[]; // idb
extern char aInitialRotat_2[]; // idb
extern char aInitialRotat_0[]; // idb
extern int (__thiscall *NiPSysResetOnLoopCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysRadialFieldModifier::_vftable_)(void *p, char); // weak
extern char aRadialtype[]; // idb
extern int (__thiscall *NiPSysPositionModifier::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysPlanarCollider::_vftable_)(void *p, char); // weak
extern char aYAxis[]; // idb
extern char aXAxis[]; // idb
extern int (__thiscall *NiPSysModifierActiveCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysMeshUpdateModifier::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysMeshEmitter::NiSkinnedEmitterData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiGeometry>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiPSysMeshEmitter::NiSkinnedEmitterData>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysMeshEmitter::_vftable_)(void *p, char); // weak
extern char aM_kemissionaxi[]; // idb
extern char aM_kemissiona_1[]; // idb
extern char aM_kemissiona_0[]; // idb
extern char aNi_velocity__1[]; // idb
extern char aNi_velocity__0[]; // idb
extern char aM_einitvelocit[]; // idb
extern char aNi_velocity_us[]; // idb
extern char aNi_emit_from_e[]; // idb
extern char aNi_emit_from_f[]; // idb
extern char aNi_emit_from_1[]; // idb
extern char aNi_emit_from_0[]; // idb
extern char aM_eemissiontyp[]; // idb
extern char aNi_emit_from_v[]; // idb
extern char aEmitterObject[]; // idb
extern int (__thiscall *NiPSysInitialRotSpeedVarCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysInitialRotSpeedCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysInitialRotAngleVarCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysInitialRotAngleCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysGrowFadeModifier::_vftable_)(void *p, char); // weak
extern char aFadeGeneration[]; // idb
extern char aFadeTime[]; // idb
extern char aGrowGeneration[]; // idb
extern char aGrowTime[]; // idb
extern int (__thiscall *NiPSysGravityStrengthCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysGravityFieldModifier::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysGravityModifier::_vftable_)(void *p, char); // weak
extern char aForceType[]; // idb
extern char aForce_spherica[16]; // weak
extern char aForce_planar[]; // idb
extern char aTurbulencescal[]; // idb
extern char aTurbulence[]; // idb
extern char aStrength[]; // idb
extern char aDecay[]; // idb
extern char aGravityAxis[]; // idb
extern char aGravityObject[]; // idb
extern int (__thiscall *NiPSysFieldMaxDistanceCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysFieldMagnitudeCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysFieldAttenuationCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterSpeedCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterPlanarAngleVarCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterPlanarAngleCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterLifeSpanCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterInitialRadiusCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterDeclinationVarCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterDeclinationCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysEmitterCtlrData::_vftable_)(void *p, char); // weak
extern char aNumEmitterActi[]; // idb
extern char aBirthRateKeyTy[]; // idb
extern char aLinkey[7]; // weak
extern char aBezkey[7]; // weak
extern char aTcbkey[7]; // weak
extern char aNumBirthRateKe[]; // idb
extern int (__thiscall *NiPSysDragModifier::_vftable_)(void *p, char); // weak
extern char aRangefalloff[]; // idb
extern char aRange[]; // idb
extern char aPercentage[]; // idb
extern char aDragAxis[]; // idb
extern char aDragObject[]; // idb
extern int (__thiscall *NiPSysDragFieldModifier::_vftable_)(void *p, char); // weak
extern char aUseDirection[]; // idb
extern const unsigned __int16 NiPSysData::INVALID_PARTICLE; // weak
extern int (__thiscall *NiPSysData::_vftable_)(void *p, char); // weak
extern char aAddedparticles[]; // idb
extern char aNumaddedpartic[]; // idb
extern char aM_pfrotationsp[]; // idb
extern char aM_pkparticlein[]; // idb
extern int (__thiscall *NiPSysCylinderEmitter::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysColorModifier::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysColliderManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysBoxEmitter::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysBoundUpdateModifier::_vftable_)(void *p, char); // weak
extern char aUpdateSkip[]; // idb
extern int (__thiscall *NiPSysBombModifier::_vftable_)(void *p, char); // weak
extern char aSymmetryType[]; // idb
extern char aSpherical[10]; // weak
extern char aCylindrical[12]; // weak
extern char aPlanar[7]; // weak
extern char aDecayType[]; // idb
extern char aNone[]; // idb
extern char aLinear[]; // idb
extern char aExponential[12]; // weak
extern char aDeltav[]; // idb
extern char aBombAxis[]; // idb
extern char aBombObject[]; // idb
extern int (__thiscall *NiPSysAgeDeathModifier::_vftable_)(void *p, char); // weak
extern char aSpawnModifier[]; // idb
extern char aSpawnOnDeath[]; // idb
extern int (__thiscall *NiPSysAirFieldSpreadCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysAirFieldModifier::_vftable_)(void *p, char); // weak
extern char aSpread[]; // idb
extern char aEnableSpread[]; // idb
extern char aComponentOnly[]; // idb
extern char aInheritRotatio[]; // idb
extern char aInheritVelocit[]; // idb
extern char aAirfriction[]; // idb
extern char aUnitDirection[]; // idb
extern int (__thiscall *NiPSysAirFieldInheritVelocityCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysAirFieldAirFrictionCtlr::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPSysModifier__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPSysModifier__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPSysModifier__>_NiPSysModifier__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiPSysModifier>>::_vftable_)(void *p, char); // weak
extern char aWorldSpace[]; // idb
extern int (__thiscall *NiTStringPointerMap<NiPSysModifier__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiParticleSystem::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiTArray<NiPointer<NiAVObject>>__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiMeshPSysData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiMeshParticleSystem::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPSysModifierCtlr::_vftable_)(void *p, char); // weak
extern char aModifierName[]; // idb
extern char aNipsysmodifi_2[]; // idb
extern int (__thiscall *NiPSysEmitter::_vftable_)(void *p, char); // weak
extern char aRadiusVariatio[]; // idb
extern char aInitialRadius[]; // idb
extern char aInitialColor[]; // idb
extern char aPlanarAngleVar[]; // idb
extern char aPlanarAngle[]; // idb
extern char aDeclinationVar[]; // idb
extern char aDeclination[]; // idb
extern char aSpeedVariation[]; // idb
extern char aSpeed[]; // idb
extern char aNipsysemitter[]; // idb
extern int (__thiscall *NiPSysModifier::_vftable_)(void *p, char); // weak
extern char aOrder[]; // idb
extern char aName[]; // idb
extern char aNipsysmodifi_0[]; // idb
extern int (__thiscall *NiPSysFieldModifier::_vftable_)(void *p, char); // weak
extern char aMaxDistance[]; // idb
extern char aUseMaxDistance[]; // idb
extern char aAttenuation[]; // idb
extern char aMagnitude[]; // idb
extern char aFieldObject[]; // idb
extern char aNipsysfieldmod[]; // idb
extern int (__thiscall *NiPSysCollider::_vftable_)(void *p, char); // weak
extern char aManager[]; // idb
extern char aDieOnCollide[]; // idb
extern char aSpawnOnCollide[]; // idb
extern char aBounce[]; // idb
extern char aNipsyscollid_0[]; // idb
extern int (__thiscall *NiPSysVolumeEmitter::_vftable_)(void *p, char); // weak
extern char aNipsysvolumeem[]; // idb
extern int (__thiscall *NiPSysModifierBoolCtlr::_vftable_)(void *p, char); // weak
extern char aNipsysmodifi_1[]; // idb
extern int (__thiscall *NiPSysModifierFloatCtlr::_vftable_)(void *p, char); // weak
extern char aNipsysmodifi_3[]; // idb
extern int (__thiscall *NiBinaryStream::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiSearchPath::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiMemStream::_vftable_)(void *p, char); // weak
extern const int NiFile::ms_iSeekCur; // weak
extern int (__thiscall *NiFile::_vftable_)(void *p, char); // weak
extern char asc_9F9A24[]; // idb
extern char a02d02d04d2d02d[]; // idb
extern char aSLogFileClosed[]; // idb
extern char pcMessage[]; // idb
extern char aSLogFileOpened[]; // idb
extern char aC_5[]; // idb
extern char aAT[]; // idb
extern char pcFilename[]; // idb
extern char aNiprofile_log[]; // idb
extern char aNiwall[]; // idb
extern char aNiroomgroup[]; // idb
extern char aNiroom[]; // idb
extern char aNiportal[]; // idb
extern int (__thiscall *NiOldWall::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiRoom::Wall__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPortal>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<bool>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPortal>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiAVObject>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiPortal>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiRoom::_vftable_)(void *p, char); // weak
extern char aNioldwall[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiRoom>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiRoom>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiRoom>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiRoomGroup::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiPortal::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<int>_NiGeometry___int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<NiGeometry___int>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiFixtureCuller::_vftable_)(void *p, char); // weak
extern char aNvperf[]; // idb
extern char aSwvertex[]; // idb
extern char aRefrast[]; // idb
extern char aFps_1f[]; // idb
extern int (*NiInputSystem::CreateParams::_vftable_)(); // weak
extern int (*NiDI8InputSystem::DI8CreateParams::_vftable_)(); // weak
extern char aDx9RendererCre[]; // idb
extern char aCreateinputs_0[]; // idb
extern char aCreateinputsys[]; // idb
extern char aNiapplicationE[]; // idb
extern int (__thiscall *NiTArray<NiPointer<NiScreenElements>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiApplication::_vftable_)(void *p, char); // weak
extern char aOk[]; // idb
extern char aCancel[]; // idb
extern char aMultisample[]; // idb
extern char aUse2432BitZbuf[]; // idb
extern char aButton[]; // idb
extern char aResolution[]; // idb
extern char aAdapter[]; // idb
extern char aMode[]; // idb
extern char aCombobox[]; // idb
extern char aArial[]; // idb
extern char aSelectDesiredD[]; // idb
extern char aUXUXUBpp[]; // idb
extern char aDMultisamples[]; // idb
extern char aNonmaskableLev[]; // idb
extern char aNoMultisamplin[]; // idb
extern char aFullscreen[11]; // weak
extern char aWindowed[9]; // weak
extern char aSelectDx9Displ[]; // idb
extern char aNvperfhud[]; // idb
extern char aApplicationHas[]; // idb
extern char aApplicationIsL[]; // idb
extern char aGamebryoNirefo[]; // idb
extern char aUnableToCreate[]; // idb
extern char a_Cmdline_txt[]; // idb
extern int (__thiscall *NiAppWindow::_vftable_)(NiAppWindow *this, int iWinMode, int hWnd); // weak
extern char aMsctls_statusb[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiInputDevice::Description>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiActionData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiInputDevice::Description>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiActionData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiInputDevice::Description>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiActionData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiInputSystem::_vftable_)(void *p, char); // weak
extern char aNiinputsystem[]; // idb
extern char aNiinputsystemC[]; // idb
extern _GUID g_guidNiInputDefault;
extern int (__thiscall *NiDI8InputSystem::_vftable_)(void *p, char); // weak
extern char pszFmt[]; // idb
extern char aBuildactionmap[34]; // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiInputDevice::ControlDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiInputDevice::ControlDesc__>::_vftable_)(void *p, char); // weak
extern char aNiinputDefault[]; // idb
extern char aB[2]; // weak
extern char aA_1[2]; // weak
extern char aR2[3]; // weak
extern char aL2[3]; // weak
extern char aSelect_0[7]; // weak
extern char aStart[6]; // weak
extern char aR1[3]; // weak
extern char aL1[3]; // weak
extern char aRRight[8]; // weak
extern char aRLeft[7]; // weak
extern char aRDown[7]; // weak
extern char aRUp[5]; // weak
extern char aDPadLupDownLef[28]; // weak
extern char aStick4Vert[13]; // weak
extern char aStick4Horz[13]; // weak
extern char aStick3Vert[13]; // weak
extern char aStick3Horz[13]; // weak
extern char aStick2Vert[13]; // weak
extern char aStick2Horz[13]; // weak
extern char aStick1Vert[13]; // weak
extern char aStick1Horz[13]; // weak
extern int (__thiscall *NiTPointerList<NiInputDevice::ControlDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiInputDevice::Description::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDI8InputSystem::DI8Description::_vftable_)(void *p, char); // weak
extern char aSystemMouseFou[]; // idb
extern char aSystemKeyboard[]; // idb
extern char aAdddefaultac_1[]; // idb
extern char aAdddefaultacti[]; // idb
extern char aAdddefaultac_0[]; // idb
extern char aEdbscbDevicesR[]; // idb
extern char aNidi8inputsy_0[]; // idb
extern char aNidi8inputsyst[]; // idb
extern int (__thiscall *NiInputGamePad::_vftable_)(void *p, char); // weak
extern char aNiinputgamepad[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiAction__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiAction__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiInputDevice::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiAction__>::_vftable_)(void *p, char); // weak
extern char aNiinputdevice[]; // idb
extern int (__thiscall *NiInputDI8Mouse::_vftable_)(void *p, char); // weak
extern char aMouseBufferOve[]; // idb
extern char aNiinputdi8mous[]; // idb
extern int (__thiscall *NiInputDI8Keyboard::_vftable_)(void *p, char); // weak
extern char aNiinputdi8keyb[]; // idb
extern int (__thiscall *NiInputDI8GamePad::_vftable_)(void *p, char); // weak
extern char aDi8gamepadWarn[]; // idb
extern char aNiinputdi8game[]; // idb
extern int (__thiscall *NiInputMouse::_vftable_)(void *p, char); // weak
extern char aNiinputmouse[]; // idb
extern int (__thiscall *NiInputKeyboard::_vftable_)(void *p, char); // weak
extern char aNiinputkeyboar[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NSBShaderLibrary::_vftable_)(void *p, char); // weak
extern char aReleasingBinar[]; // idb
extern int (__thiscall *NiTPointerList<NiPointer<NSBShader>>::_vftable_)(void *p, char); // weak
extern char pcFmt[]; // idb
extern char aNsbshaderlib[]; // idb
extern char aLoadnsbshaders[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_char__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_char__>::_vftable_)(void *p, char); // weak
extern char aFailedToLoadS[]; // idb
extern char aLoadedS[]; // idb
extern char aAttemptingToLo[]; // idb
extern char aSSAlreadyLoade[]; // idb
extern int (__thiscall *NiTPointerList<char__>::_vftable_)(void *p, char); // weak
extern char aFoundSFileS[]; // idb
extern char aRecurseDirecto[]; // idb
extern char pszExt[]; // idb
extern char aSS_nsb[]; // idb
extern char aStoringBinaryV[]; // idb
extern char aParsedShaderS[]; // idb
extern char aFailedToParseS[]; // idb
extern char aAttemptingToPa[]; // idb
extern char a_nsf[]; // idb
extern char aImplementati_2[]; // idb
extern char aShader[7]; // weak
extern const unsigned __int16 yytranslate[542];
extern const unsigned __int16 yyprhs[581];
extern const __int16 yyrhs[1790];
extern const char *const yytname[512];
extern const unsigned __int16 yyr1[581];
extern char yyr2[581];
extern const unsigned __int16 yydefact[1049];
extern const __int16 yypact[1049];
extern const __int16 yytable[1081];
extern const __int16 yycheck[1081];
extern const unsigned __int16 yystos[1049];
extern char aD[]; // idb
extern char aStackNow[]; // idb
extern char aS[]; // idb
extern char aS_5[]; // idb
extern char aReducingStackB[]; // idb
extern char asc_A02610[]; // idb
extern char aNtermS[]; // idb
extern char aTokenS[11]; // weak
extern char a24sD16s[]; // idb
extern char aParseErrorSA_7[]; // idb
extern char aXenon[]; // idb
extern char aDx9[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::_vftable_)(void *p, char); // weak
extern char aCm_operatorOpe[]; // idb
extern char aCm_operatorO_0[]; // idb
extern char aInvalidOpera_0[]; // idb
extern char aInvalidOperato[]; // idb
extern char aCm_operatorO_1[]; // idb
extern char aParserStackOve[]; // idb
extern char aUserdefinedd_2[]; // idb
extern char aParseErrorSUse[]; // idb
extern char aAllocationErro[]; // idb
extern char aUserdefinedd_0[]; // idb
extern char aString________[]; // idb
extern char aParseErrorSU_0[92]; // weak
extern char a8_5f_0[]; // idb
extern char aFloats2d______[]; // idb
extern char aBoolean_______[]; // idb
extern char aParseErrorSU_2[]; // idb
extern char aD_2[]; // idb
extern char aInteger_______[]; // idb
extern char aImplementati_1[]; // idb
extern char aImplementati_5[]; // idb
extern char aPassEndS[]; // idb
extern char aPassStartS[]; // idb
extern char aSyntaxErrorS_2[41]; // weak
extern char aSyntaxErrorSam[40]; // weak
extern char aSyntaxErrorS_5[37]; // weak
extern char aSyntaxErrorS_1[38]; // weak
extern char aParseWarningSD[]; // idb
extern char aParseWarning_5[81]; // weak
extern char aParseWarning_2[82]; // weak
extern char aParseWarning_6[]; // idb
extern char aDmapoffsetS[24]; // weak
extern char aDmapoffsetD[24]; // weak
extern char aElementindexS[24]; // weak
extern char aElementindexD[24]; // weak
extern char aSrgbtextureS[24]; // weak
extern char aSrgbtextureD[24]; // weak
extern char aMaxanisotropyS[24]; // weak
extern char aMaxanisotropyD[24]; // weak
extern char aMaxmiplevelS[24]; // weak
extern char aMaxmiplevelD[24]; // weak
extern char aMipmaplodbiasS[24]; // weak
extern char aMipmaplodbiasD[24]; // weak
extern char aMipfilter0x08x[28]; // weak
extern char aParseWarning_8[90]; // weak
extern char aMinfilter0x08x[28]; // weak
extern char aParseWarnin_11[90]; // weak
extern char aMagfilter0x08x[28]; // weak
extern char aParseWarning_0[90]; // weak
extern char aBordercolorS[25]; // weak
extern char aBordercolor0x0[29]; // weak
extern char aAddressw0x08x[30]; // weak
extern char aParseWarnin_10[89]; // weak
extern char aParseErrorSU_1[94]; // weak
extern char aAddressv0x08x[30]; // weak
extern char aParseWarning_4[89]; // weak
extern char aAddressu0x08x[30]; // weak
extern char aParseWarning_1[89]; // weak
extern char aSyntaxErrorS_3[28]; // weak
extern char aSamplerEnd3dS[]; // idb
extern char aSamplerStart3d[]; // idb
extern char aSyntaxErrorS_6[42]; // weak
extern char aSyntaxErrorSta[40]; // weak
extern char aSyntaxErrorS_4[38]; // weak
extern char aTexturetrans_0[]; // idb
extern char aTexturetrans_1[]; // idb
extern char aTexturetransfo[]; // idb
extern char aTexcoordindex0[]; // idb
extern char aBumpenvloffset[24]; // weak
extern char aBumpenvloffs_0[]; // idb
extern char aBumpenvlscaleS[24]; // weak
extern char aBumpenvlscale8[]; // idb
extern char aBumpenvmat11S[]; // idb
extern char aBumpenvmat118_[]; // idb
extern char aBumpenvmat10S[]; // idb
extern char aBumpenvmat108_[]; // idb
extern char aBumpenvmat01S[24]; // weak
extern char aBumpenvmat018_[]; // idb
extern char aBumpenvmat00S[]; // idb
extern char aBumpenvmat008_[]; // idb
extern char aParseWarning_3[]; // idb
extern char aResultarg0x08x[]; // idb
extern char aAlphaarg20x08x[]; // idb
extern char aAlphaarg10x08x[]; // idb
extern char aAlphaarg00x08x[]; // idb
extern char aAlphaop0x08x[]; // idb
extern char aColorarg20x08x[]; // idb
extern char aColorarg10x08x[]; // idb
extern char aColorarg00x08x[]; // idb
extern char aColorop0x08x[]; // idb
extern char aParseErrorSTex[]; // idb
extern char aParseErrorSInv[73]; // weak
extern char aParseErrorSG_0[]; // idb
extern char aSyntaxErrorS_0[26]; // weak
extern char aStageEnd3dS[]; // idb
extern char aStageStart3dS[]; // idb
extern char aSyntaxErrorBin[36]; // weak
extern char aParseWarning_9[]; // idb
extern char aBinormaltangen[]; // idb
extern char aBonesPartition[]; // idb
extern char aSoftwarevpfa_0[]; // idb
extern char aSoftwarevprequ[]; // idb
extern char aUsesnilights_0[]; // idb
extern char aUsesnirender_0[]; // idb
extern char a15sS[]; // idb
extern char aInvalidPlatfor[]; // idb
extern char aPlatform0x08x[]; // idb
extern char aUserdefined0x0[]; // idb
extern char aPsversion0x08x[]; // idb
extern char aVsversion0x08x[]; // idb
extern char aSyntaxErrorReq[32]; // weak
extern char aRequirementL_0[]; // idb
extern char aRequirementLis[]; // idb
extern char aPixelshaderEnd[17]; // weak
extern char aPixelshaderSta[19]; // weak
extern char aPixelshaderFil[18]; // weak
extern char aPixelshaderF_0[]; // idb
extern char aPixelshaderF_1[]; // idb
extern char aVertexshaderEn[18]; // weak
extern char aVertexshaderSt[]; // idb
extern char aVertexshader_3[]; // idb
extern char aVertexshaderFi[]; // idb
extern char aVertexshader_7[]; // idb
extern char aClassnameS[]; // idb
extern char aPixelshaderC_0[29]; // weak
extern char aPixelshaderCon[]; // idb
extern char aVertexshaderCo[]; // idb
extern char aVertexshader_0[]; // idb
extern char aSyntaxErrorOpe[28]; // weak
extern char aSyntaxErrorSet[]; // idb
extern char aGlobal24s3d3d[]; // idb
extern char aSyntaxErrorAdd[]; // idb
extern char a8_5f[]; // idb
extern char a24s[]; // idb
extern char aConst24s3d3d3d[]; // idb
extern char aAttrib24s3d3d3[]; // idb
extern char aObject24s16s16[]; // idb
extern char aParseErrorSI_1[]; // idb
extern char aObject24s16s3d[]; // idb
extern char aS__S[]; // idb
extern char aParseErrorSIso[]; // idb
extern char aParseErrorSGet[]; // idb
extern char aDefined24s3d24[]; // idb
extern char aDefined24s3d3d[27]; // weak
extern char aSkinbonematr_0[16]; // weak
extern char aDefinedSkinb_0[]; // idb
extern char aDefinedSkinbon[]; // idb
extern char aSkinbonematrix[16]; // weak
extern char aDefinedBonemat[52]; // weak
extern char aDefinedBonem_2[]; // idb
extern char aBonematrix4_0[12]; // weak
extern char aDefinedBonem_0[]; // idb
extern char aDefinedBonem_1[]; // idb
extern char aBonematrix3_0[12]; // weak
extern char aConstantmapP_0[]; // idb
extern char aConstantmapPla[]; // idb
extern char aSyntaxErrorEmb[]; // idb
extern char a32s0x08x[]; // idb
extern char a32s8_5f[]; // idb
extern char a32sS[]; // idb
extern char aParseErrorSI_0[]; // idb
extern char a32sAttributeS[]; // idb
extern char aParseWarning_7[]; // idb
extern char aParseErrorSI_2[62]; // weak
extern char aSyntaxErrorRen[32]; // weak
extern char aRenderstateL_0[]; // idb
extern char aRenderstateLis[]; // idb
extern char a16sReg3d16s[]; // idb
extern char a16sReg3d16s0x0[]; // idb
extern char a16s2dReg3d16s[]; // idb
extern char a16s2dReg3d16s0[]; // idb
extern char aParseErrorSPac[]; // idb
extern char aStreamD[]; // idb
extern char aSyntaxErrorPac[41]; // weak
extern char aSyntaxErrorP_0[38]; // weak
extern char aParseErrorSP_0[]; // idb
extern char aWarningPacki_0[]; // idb
extern char aUsingPackingde[]; // idb
extern char aPackingdefinit[]; // idb
extern char aPackingdefin_0[28]; // weak
extern char aObjectTableEnd[]; // idb
extern char aObjectTableSta[]; // idb
extern char aTexture16s6sSl[]; // idb
extern char aParseErrorSA_0[]; // idb
extern char aColora16s6s8_5[]; // idb
extern char aParseErrorSA_9[]; // idb
extern char aColor16s6s8_5f[]; // idb
extern char aParseErrorSAdd[]; // idb
extern char aTransform16s6s[]; // idb
extern char aParseErrorS_10[]; // idb
extern char aMatrix316s6s8_[]; // idb
extern char aParseErrorSA_5[]; // idb
extern char aRange8_5f8_5_0[]; // idb
extern char aPoint416s6s8_5[]; // idb
extern char aParseErrorSA_6[]; // idb
extern char aRange8_5f8_5f8[]; // idb
extern char aPoint316s6s8_5[]; // idb
extern char aParseErrorSA_8[]; // idb
extern char aRange8_5f8_5f_[]; // idb
extern char aPoint216s6s8_5[]; // idb
extern char aParseErrorSA_3[]; // idb
extern char aRange8_5f__8_5[]; // idb
extern char aFloat16s6s8_5f[]; // idb
extern char aParseErrorSA_1[]; // idb
extern char aRange4d__4d[]; // idb
extern char aUint16s6sD[]; // idb
extern char aParseErrorSA_4[]; // idb
extern char aBoolean16s6sS[]; // idb
extern char aTrue[]; // idb
extern char aParseErrorSA_2[]; // idb
extern char aGlobalAttrib_0[28]; // weak
extern char aGlobalAttribut[]; // idb
extern char aAttributeTab_0[]; // idb
extern char aAttributeTable[]; // idb
extern char aSyntaxErrorSha[]; // idb
extern char aCompletedNsfSh[]; // idb
extern char aDescriptionS[]; // idb
extern char aNsfShaderS[]; // idb
extern char aShiftingErrorT[]; // idb
extern char aSyntaxErrorAls[]; // idb
extern char aOr[5]; // weak
extern char aExpecting[13]; // weak
extern char aSyntaxErrorUne[26]; // weak
extern char aShiftingTokenS[]; // idb
extern char aNowAtEndOfInpu[22]; // weak
extern char aReadingAToken[]; // idb
extern char aEnteringStateD[]; // idb
extern char aStackSizeIncre[]; // idb
extern char aStartingParse[]; // idb
extern char aParseErrorSFai[]; // idb
extern char aFailureDErrors[]; // idb
extern char aErrFileNotFoun[22]; // weak
extern char aErrNeedInputFi[]; // idb
extern const __int16 yy_accept[1932];
extern const int yy_ec[256];
extern const int yy_meta[58];
extern const __int16 yy_base[1940];
extern const __int16 yy_def[1940];
extern const __int16 yy_nxt[6699];
extern const __int16 yy_chk[6699];
extern char aErrorSInvalidI[]; // idb
extern char aErrorInvalidId[]; // idb
extern char aErrEofInCommen[]; // idb
extern char aOutOfDynamicMe[]; // idb
extern char aFatalErrorScan[]; // idb
extern char aFatalFlexSca_0[]; // idb
extern char aFatalFlexScann[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiD3DXEffectFile__>_char_const___NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<char_const___NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTMap<char_const___NiD3DXEffectFile__>_NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DXEffectShaderLibrary::_vftable_)(void *p, char); // weak
extern char aFileSAlreadyIn[]; // idb
extern int (__thiscall *NiTStringMap<NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern char aNid3dxeffect_4[]; // idb
extern char aLoadd3dxeffect[]; // idb
extern char aFailedToComp_0[]; // idb
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern char aInvalidOrNoD3d[]; // idb
extern char aD3dEffectFileN[]; // idb
extern char aSSS_1[]; // idb
extern char aSSS[]; // idb
extern char aNoValidD3dEffe[29]; // weak
extern int (__thiscall *NiTPointerMap<char_const___NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DXEffectFile__>_NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *NiD3DXEffectFactory::_vftable_[3])(int pcShaderName); // weak
extern char aMissingD3dEffe[]; // idb
extern char aInvalidD3dEffe[]; // idb
extern char aFailedToFindD3[]; // idb
extern char a_fx_0[]; // idb
extern int (__thiscall *NiTStringPointerMap<NiD3DXEffectFile__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectParameter__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<DFALL<NiPointer<NiD3DXEffectTechniqueSet>>_char_const___NiPointer<NiD3DXEffectTechniqueSet>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectParameter__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<char_const___NiPointer<NiD3DXEffectTechniqueSet>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiD3DXEffectTechniqueSet>>_NiPointer<NiD3DXEffectTechniqueSet>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiD3DXEffectParameter__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringMap<NiPointer<NiD3DXEffectTechniqueSet>>::_vftable_)(void *p, char); // weak
extern char aKillingNid3d_1[]; // idb
extern char pcExt[]; // idb
extern char pcSrc[]; // idb
extern char aDecal[]; // idb
extern char aBump[]; // idb
extern char aGlow[]; // idb
extern char aGloss[]; // idb
extern char aDetail[]; // idb
extern char aDark[]; // idb
extern char aBase[]; // idb
extern int (__thiscall *NiTArray<NiPointer<NiD3DXEffectTechnique>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DXEffectTechniqueSet::_vftable_)(void *p, char); // weak
extern char aKillingNid3d_0[]; // idb
extern int (__thiscall *NiD3DXEffectTechnique::_vftable_)(void *p, char); // weak
extern char aKillingNid3dxe[]; // idb
extern char aNone_1[]; // idb
extern char aUiwidget[]; // idb
extern char aHidden[]; // idb
extern char aUihelp[]; // idb
extern char aDescription[]; // idb
extern char aDesc[]; // idb
extern char aUimax[]; // idb
extern char aUimin[]; // idb
extern char aUitype[]; // idb
extern char aColorswatch[]; // idb
extern char aColor_1[]; // idb
extern char aNtmindex[]; // idb
extern char aAti[]; // idb
extern char aNid3dxeffect_3[]; // idb
extern char aMax[]; // idb
extern char aNdl[]; // idb
extern char aSoftwarevpfall[]; // idb
extern char aSoftwarevpre_0[]; // idb
extern char aUsesnilightsta[]; // idb
extern char aUsesnirenderst[]; // idb
extern char aNbtmethod[]; // idb
extern char aBonesperpart_0[]; // idb
extern char aUserversion_0[]; // idb
extern char aShadername[]; // idb
extern char aFogmap[]; // idb
extern char aProjectedlight[]; // idb
extern char aProjectedshado[]; // idb
extern char aEnvironmentmap[]; // idb
extern char aSpotlight[]; // idb
extern char aDirectionallig[]; // idb
extern char aPointlight[]; // idb
extern char aGenerallight[]; // idb
extern char aSpot[]; // idb
extern char aModel[]; // idb
extern char aSpace[]; // idb
extern char aUndimmed[]; // idb
extern char pcAnnotation[]; // idb
extern char aNid3dxeffectpa[]; // idb
extern char aCube[]; // idb
extern char aVolume[]; // idb
extern char aObjectindex[]; // idb
extern char aObject[]; // idb
extern char aNtm[]; // idb
extern char aDepth[]; // idb
extern char aHeight[]; // idb
extern char aWidth_0[]; // idb
extern char aTarget[]; // idb
extern char aInverse[]; // idb
extern char aI[]; // idb
extern char aInv_0[]; // idb
extern char aTranspose[]; // idb
extern char aTrans[]; // idb
extern char aIt[]; // idb
extern char aGlobal[7]; // weak
extern char aAttribute[10]; // weak
extern char aStandardsgloba[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiShaderAttributeDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiShaderAttributeDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiShaderAttributeDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DXEffectShader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DTimeSyncController::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiD3DPass>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DShader::_vftable_)(void *p, char); // weak
extern char aNid3dxeffect_8[]; // idb
extern int (__stdcall *NiD3DXEffectStateManager::_vftable_)(int this, int iid, int ppv); // weak
extern char aFileopenerror[]; // idb
extern int (__thiscall *NsTextCodeV0_3::_vftable_)(void *p, char); // weak
extern char aRotatecontrole[]; // idb
extern int (__thiscall *NpNs_MoveToTarget::_vftable_)(void *p, char); // weak
extern int (__stdcall *NsMakeQuadScene::Optimizer::_vftable_)(int _pkObject, int _pData); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiTexturingProperty>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NpSIF_Tool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NpSIF_Tool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NpSIF_Tool>>_NiPointer<NpSIF_Tool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NpSIF_Tool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiKFMTool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiKFMTool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiKFMTool>>_NiPointer<NiKFMTool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiKFMTool>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiActorManager>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiActorManager>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiActorManager>>_NiPointer<NiActorManager>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiActorManager>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NPTR_ISShader_v2::_vftable_)(void *p, char); // weak
extern char aPtsev2[]; // idb
extern char aNspgtoonani[]; // idb
extern char aNspgtoonnoani[]; // idb
extern char aNptr_is[]; // idb
extern char aNptr_isshader_[]; // idb
extern char pcClassName[]; // idb
extern int (__thiscall *NsPgToonRegister_v2::_vftable_)(void *p, char); // weak
extern char aNspgtoonregist[]; // idb
extern int (__thiscall *INpShader::_vftable_)(void *p, char); // weak
extern char aInpshader[]; // idb
extern int (__thiscall *NsPgToonExtraData::_vftable_)(void *p, char); // weak
extern char aM_frevisionfar[]; // idb
extern char aM_frevisionnea[]; // idb
extern char aM_blinesizerev[]; // idb
extern char aM_blinecolorre[]; // idb
extern char aM_flineenablel[]; // idb
extern char aM_pcamera[]; // idb
extern char aM_flinesize[]; // idb
extern char aD3dxvector45_3[]; // idb
extern char aM_bselftexture[]; // idb
extern char aM_bon[]; // idb
extern char aPgline_vsh[]; // idb
extern char aPgline[]; // idb
extern char szPath[]; // idb
extern char pcShaderName[]; // idb
extern int (__thiscall *NsPgCatoonShader::_vftable_)(void *p, char); // weak
extern char aPg_constants4[14]; // weak
extern char aPg_constants3[14]; // weak
extern char aPg_constants1[14]; // weak
extern char aPg_constants0[14]; // weak
extern char aWorldviewprojt[23]; // weak
extern char aPg_ani_bonemat[]; // idb
extern char aPg_ani_const_3[18]; // weak
extern char aPg_ani_const_4[18]; // weak
extern char aPg_ani_const_0[18]; // weak
extern char aPg_ani_const_1[18]; // weak
extern char aPg_ani_constan[18]; // weak
extern char aPg_ani_const_2[18]; // weak
extern char aViewprojtransp[18]; // weak
extern char aNspgcatoonshad[]; // idb
extern int (__thiscall *NsEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NsABVPicking::Record__>::_vftable_)(void *p, char); // weak
extern char a111[]; // idb
extern char aAaa[]; // idb
extern int (__stdcall *NsFadeNode::FindChildGeometry::_vftable_)(int _pkObject, int _pData); // weak
extern int (__thiscall *NiTArray<NiTPointerList<NiPointer<NiProperty>>__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NsFadeNode::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiAlphaRefController::_vftable_)(void *p, char); // weak
extern char aNsfadenode[]; // idb
extern char aNialpharefcont[]; // idb
extern int (__thiscall *MasterPropertyAccumulator::_vftable_)(void *p, char); // weak
extern int (__stdcall *FindMultiLinkNode::_vftable_)(int _pkObject, int _pData); // weak
extern int (__stdcall *FindRoomNode::_vftable_)(int _pkObject, int _pData); // weak
extern char aLink[]; // idb
extern char aSameNameRoomIs[]; // idb
extern char aPortal[]; // idb
extern int (__thiscall *boost::detail::sp_counted_base_impl<PgNsTerrain::CPgBlockObject___boost::checked_deleter<PgNsTerrain::CPgBlockObject>>::_vftable_)(void *p, char); // weak
extern char aLayerimagenotf[]; // idb
extern char aG[]; // idb
extern char aUvscaleblend[]; // idb
extern char aUvscalediffuse[]; // idb
extern char aStartpos_y[]; // idb
extern char aStartpos_x[]; // idb
extern char aBlendfilename[]; // idb
extern char aDiffusefilenam[]; // idb
extern char aLayer[]; // idb
extern char aQuadshigh[]; // idb
extern char aQuadswide[]; // idb
extern char aOneblockheight[]; // idb
extern char aOneblockwidth[]; // idb
extern char aHeightmap_heig[]; // idb
extern char aHeightmap_widt[]; // idb
extern char aHeightfilename[]; // idb
extern char aVertexcolortex[]; // idb
extern char aFile_ver[]; // idb
extern char aPgfile[]; // idb
extern char aLayercountErro[]; // idb
extern char aTerrainlodingE[]; // idb
extern char a_htd[]; // idb
extern char a_ase[]; // idb
extern char a0_01[]; // idb
extern char aHeightmap[]; // idb
extern char pacName[]; // idb
extern int (__stdcall *IMakeBlockInfo::_vftable_)(int _uiMapSize, int _uiSplitCnt, float _fTileLength); // weak
extern char aFxskinningshad[17]; // weak
extern char aMasterproperty[]; // idb
extern char pcDefault[]; // idb
extern char aHazescreeneffe[]; // idb
extern char aFxhazescreenef[]; // idb
extern char aGlowscreeneffe[]; // idb
extern char aFxglowscreenef[]; // idb
extern char aAfterimageeffe[]; // idb
extern char aFxafterimageef[]; // idb
extern char aDofeffect[]; // idb
extern char szShaderName[]; // idb
extern char aPropertyOverla[22]; // weak
extern int (__thiscall *CNullClass::_vftable_)(void *p, char); // weak
extern int (*CProperty<CWorldConfig_bool>::_vftable_[2])(); // weak
extern char aGround_dl_enab[17]; // weak
extern int (__thiscall *CBaseObject::_vftable_)(void *p, char); // weak
extern int (__thiscall *CWorldConfig::_vftable_)(void *p, char); // weak
extern int (__stdcall *FindCDNode2::_vftable_[2])(int _pkObject, int _pData); // weak
extern int (__thiscall *HeightMapMaker::_vftable_)(void *p, char); // weak
extern int (__stdcall *std::basic_fstream<char_std::char_traits<char>>::_vftable_)(char); // weak
extern _UNKNOWN std::basic_fstream<char_std::char_traits<char>>::_vbtable_; // weak
extern int (__thiscall *CPostProcessEffect::_vftable_)(void *p, char); // weak
extern char aCpostprocessef[]; // idb
extern char aFxhazerender[]; // idb
extern char aG_haze_y_scale[]; // idb
extern char aG_haze_x_scale[]; // idb
extern int (__thiscall *HazeAccumulator::_vftable_)(void *p, char); // weak
extern int (__stdcall *CHazeScreenEffect::_vftable_)(int); // weak
extern int (__thiscall *CHazeScreenEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *CRTTIClass<CHazeScreenEffect_CBaseObject>::_vftable_)(void *p, char); // weak
extern char aHazeaccumulato[]; // idb
extern char aChazescreeneff[]; // idb
extern char aG_screensift[]; // idb
extern char aG_fdownscaleof[]; // idb
extern char aG_fglowness[]; // idb
extern char aG_fblendfactor[]; // idb
extern char aG_fsampleoffse[]; // idb
extern char aG_fsampleweigh[]; // idb
extern int (*CProperty<CGlowScreenEffect_bool>::_vftable_[2])(); // weak
extern int (*CProperty<CGlowScreenEffect_float>::_vftable_[2])(); // weak
extern int (*CProperty<CGlowScreenEffect_unsigned_int>::_vftable_[2])(); // weak
extern char aFxblurringfilt[]; // idb
extern char aFxglownessblur[]; // idb
extern char aFxdownscale4x4[]; // idb
extern char aNumblurring[12]; // weak
extern char aDownscaling[12]; // weak
extern char aGaussfactor[12]; // weak
extern char aBlendfactor_0[12]; // weak
extern char aGlowness[9]; // weak
extern int (__stdcall *CGlowScreenEffect::_vftable_)(int); // weak
extern int (__thiscall *CGlowScreenEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *CRTTIClass<CGlowScreenEffect_CBaseObject>::_vftable_)(void *p, char); // weak
extern char aCglowscreeneff[]; // idb
extern char aG_frate[]; // idb
extern char aFxafterimage[]; // idb
extern int (*CProperty<CAfterImageEffect_bool>::_vftable_[2])(); // weak
extern char aReset[6]; // weak
extern int (__stdcall *CAfterImageEffect::_vftable_)(int); // weak
extern int (__thiscall *CAfterImageEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *CRTTIClass<CAfterImageEffect_CBaseObject>::_vftable_)(void *p, char); // weak
extern char aCafterimageeff[]; // idb
extern int (*CProperty<CDepthOfFieldEffect_bool>::_vftable_[2])(); // weak
extern int (__stdcall *CDepthOfFieldEffect::_vftable_)(int); // weak
extern int (__thiscall *CDepthOfFieldEffect::_vftable_)(void *p, char); // weak
extern int (__thiscall *CRTTIClass<CDepthOfFieldEffect_CBaseObject>::_vftable_)(void *p, char); // weak
extern char aG_fdoffalloff[]; // idb
extern char aG_fdofdistance[]; // idb
extern char aReseffectMaskm[]; // idb
extern char aFxdofeffectwit[]; // idb
extern char aFxblur[]; // idb
extern char aCdepthoffielde[]; // idb
extern int (__thiscall *CScreenEffect::_vftable_)(void *p, char); // weak
extern char aCscreeneffect[]; // idb
extern int (__stdcall *PgTList<void__>::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerMap<void___PgFrameWork__>::_vftable_[2])(int); // weak
extern int (__stdcall *PgFrameMgr::_vftable_)(int); // weak
extern char asc_A10518[]; // idb
extern int (__stdcall *NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>::_vftable_[2])(int); // weak
extern char aPgframework[]; // idb
extern int (__stdcall *PgWinFrame::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinFrame::_vftable_)(int); // weak
extern int (__stdcall *PgWin::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWin::_vftable_)(int); // weak
extern char aPgwin[]; // idb
extern int (__stdcall *PgWin::Bool::_vftable_)(int); // weak
extern int (__stdcall *PgWinSpr::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinSpr::_vftable_)(int); // weak
extern int (__stdcall *PgWinText::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinText::_vftable_)(int); // weak
extern unsigned int std::basic_string<char_std::char_traits<char>_std::allocator<char>>::npos; // idb
extern char aPgwintext[]; // idb
extern int (__stdcall *PgWinCullingProcess::_vftable_[2])(int); // weak
extern int (__stdcall *PgTList<NiPointer<PgWin>>::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerList<NiPointer<PgWin>>::_vftable_)(int); // weak
extern int (__stdcall *PgWinMgr::_vftable_)(int); // weak
extern int (__stdcall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>::_vftable_)(int); // weak
extern char pcCallingFunction[]; // idb
extern int (__stdcall *PgSprData::_vftable_)(int); // weak
extern int (__stdcall *NiTArray<NiPointer<NiScreenElementsData>>::_vftable_)(int); // weak
extern int (__stdcall *NiTArray<NiPointer<PgSprData::PgHitTester>>::_vftable_)(int); // weak
extern int (__stdcall *NiTArray<NiPointer<NiAlphaProperty>>::_vftable_)(int); // weak
extern int (__stdcall *PgSpr::_vftable_)(int); // weak
extern int (__stdcall *PgSprData::PgHitTester::_vftable_)(int); // weak
extern int (__stdcall *PgWinBut::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinBut::_vftable_)(int); // weak
extern char aPgwinbut[]; // idb
extern int (__stdcall *NiTList<CBucketBlock__>::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerListBase<DFALL<CBucketBlock__>_CBucketBlock__>::_vftable_)(int); // weak
extern int (__stdcall *NiTListBase<DFALL<CBucketBlock__>_CBucketBlock__>::_vftable_)(int); // weak
extern int (__stdcall *NiTMap<unsigned_short_FontBucket__>::_vftable_)(int); // weak
extern int (__stdcall *NiTList<SpScreenText__>::_vftable_)(int); // weak
extern int (__stdcall *NiTPointerListBase<DFALL<SpScreenText__>_SpScreenText__>::_vftable_)(int); // weak
extern int (__stdcall *NiTListBase<DFALL<SpScreenText__>_SpScreenText__>::_vftable_)(int); // weak
extern int (__stdcall *CSpFont::_vftable_)(int); // weak
extern char aColorS[]; // idb
extern char aPink[]; // idb
extern char aGreen[]; // idb
extern char aViolet[]; // idb
extern char aOrange[]; // idb
extern char aLightgreen[]; // idb
extern char aLightblue[]; // idb
extern char aYellow[]; // idb
extern char aBlue[]; // idb
extern char aRed[]; // idb
extern int (__stdcall *NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::_vftable_)(int); // weak
extern int (__stdcall *PgNet::_vftable_)(int); // weak
extern int (__stdcall *PgFont::_vftable_)(int); // weak
extern int (__stdcall *SpScreenGeometryClip::_vftable_)(int); // weak
extern int (__stdcall *SpScreenText::_vftable_)(int); // weak
extern int (__stdcall *PgWinLRBut::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinLRBut::_vftable_)(int); // weak
extern int (__stdcall *PgCursor::_vftable_)(int); // weak
extern char aPgcursor[]; // idb
extern char aRoot[]; // idb
extern int (__stdcall *PgWinCircleGauge::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinCircleGauge::_vftable_)(int); // weak
extern int (__stdcall *PgWinAbbreviateText::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinAbbreviateText::_vftable_)(int); // weak
extern int (__stdcall *PgWinCloseBut::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinCloseBut::_vftable_)(int); // weak
extern int (__stdcall *PgWinBar::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinBar::_vftable_)(int); // weak
extern int (__stdcall *PgWinEditText::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinEditText::_vftable_)(int); // weak
extern int (__stdcall *PgEditWin::_vftable_)(int); // weak
extern char szClass[]; // idb
extern int (__stdcall *NiTMap<HWND_____PgEditWin__>::_vftable_[2])(int); // weak
extern int (__stdcall *NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::_vftable_[2])(int); // weak
extern int (__stdcall *PgWinPasswdText::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinPasswdText::_vftable_)(int); // weak
extern int (__stdcall *PgTextGeometry::_vftable_)(int); // weak
extern int (__stdcall *PgImeEditWin::_vftable_)(int); // weak
extern int (__stdcall *PgWinImeEditText::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinImeEditText::_vftable_)(int); // weak
extern int (__stdcall *PgImeCtrl::_vftable_)(int); // weak
extern char aWm_ime_startco[]; // idb
extern char aWm_ime_setcont[]; // idb
extern char aWm_ime_select[]; // idb
extern char aWm_ime_request[]; // idb
extern char aWm_ime_notify[]; // idb
extern char aWm_ime_keyup[]; // idb
extern char aWm_ime_keydown[]; // idb
extern char aWm_ime_endcomp[]; // idb
extern char aWm_ime_control[]; // idb
extern char aWm_ime_compo_0[]; // idb
extern char aWm_ime_composi[]; // idb
extern char aWm_ime_char[]; // idb
extern char aU_0[]; // idb
extern char aComattr[]; // idb
extern char aComstringS[]; // idb
extern char aImn_setstatusw[]; // idb
extern char aImn_setsentenc[]; // idb
extern char aImn_setopensta[]; // idb
extern char aImn_setconvers[]; // idb
extern char aImn_setcomposi[]; // idb
extern char aImn_setcompo_0[]; // idb
extern char aImn_setcandida[]; // idb
extern char aImn_openstatus[]; // idb
extern char aImn_opencandid[]; // idb
extern char aImn_guideline[]; // idb
extern char aImn_closestatu[]; // idb
extern char aImn_closecandi[]; // idb
extern char aImn_changecand[]; // idb
extern int (__stdcall *PgWinButExt::_vftable_)(int uiFlags); // weak
extern int (__stdcall *PgWinButExt::_vftable_)(int); // weak
extern int (__stdcall *PgWinCamera::_vftable_)(int); // weak
extern char aPgwinscalectrl[]; // idb
extern char aD_D_D_D[]; // idb
extern int (__stdcall *PgEditTextGeometry::_vftable_)(int); // weak
extern int (__stdcall *PgPasswdTextGeometry::_vftable_)(int); // weak
extern int (__stdcall *PgImeEditTextGeometry::_vftable_)(int); // weak
extern GUID GUID_ATLVer100;
extern int (__stdcall *ATL::CWin32Heap::_vftable_[2])(int nBytes); // weak
extern int (__stdcall *ATL::CAtlStringMgr::_vftable_)(int nTotalSize, int nCharSize); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DVertexShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DPixelShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DShaderProgramCreator__>::_vftable_)(void *p, char); // weak
extern char aInvalidOrNoSha[]; // idb
extern char aShaderProgramF[]; // idb
extern char aNoValidShaderP[]; // idb
extern int (__thiscall *NiTPointerMap<char_const___NiD3DVertexShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DVertexShader__>_NiD3DVertexShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiD3DPixelShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DPixelShader__>_NiD3DPixelShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiD3DShaderProgramCreator__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DShaderProgramCreator__>_NiD3DShaderProgramCreator__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiD3DVertexShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiD3DPixelShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiD3DShaderProgramCreator__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DShaderProgramFactory::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiTextureEffect_const__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DDefaultShader::_vftable_)(void *p, char); // weak
extern char aNid3ddefaultsh[]; // idb
extern int (__thiscall *NiTArray<NiPointer<NiD3DTextureStage>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DPass::_vftable_)(void *p, char); // weak
extern char aNid3dshader[]; // idb
extern int (__thiscall *NiD3DShaderInterface::_vftable_)(void *p, char); // weak
extern char aNid3dshaderint[]; // idb
extern char aD3dfmt_uyvy[12]; // weak
extern char aD3dfmt_r8g8_b8[17]; // weak
extern char aD3dfmt_dxt5[12]; // weak
extern char aD3dfmt_g8r8_g8[17]; // weak
extern char aD3dfmt_dxt4[12]; // weak
extern char aD3dfmt_dxt3[12]; // weak
extern char aD3dfmt_yuy2[12]; // weak
extern char aD3dfmt_dxt1[12]; // weak
extern char aD3dfmt_dxt2[12]; // weak
extern char aD3dfmt_multi2_[20]; // weak
extern char aD3dfmt_cxv8u8[14]; // weak
extern char aD3dfmt_a32b32g[21]; // weak
extern char aD3dfmt_g32r32f[15]; // weak
extern char aD3dfmt_r32f[12]; // weak
extern char aD3dfmt_a16b1_0[21]; // weak
extern char aD3dfmt_g16r16f[15]; // weak
extern char aD3dfmt_r16f[12]; // weak
extern char aD3dfmt_q16w16v[20]; // weak
extern char aD3dfmt_index32[15]; // weak
extern char aD3dfmt_index16[15]; // weak
extern char aD3dfmt_vertexd[18]; // weak
extern char aD3dfmt_l16[11]; // weak
extern char aD3dfmt_d24fs8[14]; // weak
extern char aD3dfmt_d32f_lo[21]; // weak
extern char aD3dfmt_d16[11]; // weak
extern char aD3dfmt_d24x4s4[15]; // weak
extern char aD3dfmt_d24x8[13]; // weak
extern char aD3dfmt_d24s8[13]; // weak
extern char aD3dfmt_d15s1[13]; // weak
extern char aD3dfmt_d32[11]; // weak
extern char aD3dfmt_d16_loc[20]; // weak
extern char aD3dfmt_a2w10v1[19]; // weak
extern char aD3dfmt_v16u16[14]; // weak
extern char aD3dfmt_q8w8v8u[16]; // weak
extern char aD3dfmt_x8l8v8u[16]; // weak
extern char aD3dfmt_l6v5u5[14]; // weak
extern char aD3dfmt_v8u8[12]; // weak
extern char aD3dfmt_a4l4[12]; // weak
extern char aD3dfmt_a8l8[12]; // weak
extern char aD3dfmt_l8[10]; // weak
extern char aD3dfmt_p8[10]; // weak
extern char aD3dfmt_a8p8[12]; // weak
extern char aD3dfmt_a16b16g[20]; // weak
extern char aD3dfmt_a2r10g1[19]; // weak
extern char aD3dfmt_g16r16[14]; // weak
extern char aD3dfmt_x8b8g8r[16]; // weak
extern char aD3dfmt_a8b8g8r[16]; // weak
extern char aD3dfmt_a2b10g1[19]; // weak
extern char aD3dfmt_x4r4g4b[16]; // weak
extern char aD3dfmt_a8r3g3b[16]; // weak
extern char aD3dfmt_a8[10]; // weak
extern char aD3dfmt_r3g3b2[14]; // weak
extern char aD3dfmt_a4r4g4b[16]; // weak
extern char aD3dfmt_a1r5g5b[16]; // weak
extern char aD3dfmt_x1r5g5b[16]; // weak
extern char aD3dfmt_r5g6b5[14]; // weak
extern char aD3dfmt_x8r8g8b[16]; // weak
extern char aD3dfmt_a8r8g8b[16]; // weak
extern char aD3dfmt_r8g8b8[14]; // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_enum___D3DFORMAT_NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiDX9DeviceDesc::DisplayFormatInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiDX9AdapterDesc::ModeDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiDX9AdapterDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9DeviceDesc::DisplayFormatInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<enum___D3DFORMAT_NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiDX9DeviceDesc::DisplayFormatInfo__>::_vftable_)(void *p, char); // weak
extern char aDirect3dcreate[]; // idb
extern char aD3d9_dll[]; // idb
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiVBBlock___NiDX9Renderer::PrePackObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_HWND_____NiPointer<NiRenderTargetGroup>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiRenderedTexture___NiDX9RenderedTextureData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiRenderedCubeMap___NiDX9RenderedCubeMapData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiDynamicTexture___NiDX9DynamicTextureData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiDX92DBufferData>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiD3DShaderInterface__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<bool____cdecl____bool_void___>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<void__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<bool____cdecl____void___>::_vftable_)(void *p, char); // weak
extern char aSwvp[]; // idb
extern char aMixvp[]; // idb
extern char aHwvp[]; // idb
extern char aMt[]; // idb
extern char aPure[]; // idb
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiDX92DBufferData>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DShaderInterface__>::_vftable_)(void *p, char); // weak
extern char aCreationFail_4[]; // idb
extern char aCreationFail_6[]; // idb
extern char aCreationFail_7[]; // idb
extern char aCreationFail_9[]; // idb
extern char aCreationFailed[]; // idb
extern char aSSS_0[]; // idb
extern int (__thiscall *NiTPointerMap<NiVBBlock___NiDX9Renderer::PrePackObject__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<HWND_____NiPointer<NiRenderTargetGroup>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<NiRenderedTexture___NiDX9RenderedTextureData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<NiRenderedCubeMap___NiDX9RenderedCubeMapData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<NiDynamicTexture___NiDX9DynamicTextureData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiDX92DBufferData>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiD3DShaderInterface__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9Renderer::_vftable_)(void *p, char); // weak
extern char aCreationFail_1[]; // idb
extern char aNidx9render_13[76]; // weak
extern char aCreationFail_3[]; // idb
extern char aNidx9render_14[100]; // weak
extern char aNidx9rendere_2[99]; // weak
extern char aCreationFail_2[]; // idb
extern char aNidx9render_19[66]; // weak
extern char aCreationFail_5[]; // idb
extern char aCreationFail_0[]; // idb
extern char aCreationFail_8[]; // idb
extern char aNidx9renderer[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiDX9AdditionalDepthStencilBufferData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX92DBufferData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9AdditionalDepthStencilBufferData__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9TextureBufferData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9AdditionalDepthStencilBufferData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9ImplicitBufferData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9ImplicitDepthStencilBufferData::_vftable_)(void *p, char); // weak
extern char aNidx92dbufferd[]; // idb
extern char aNidx9texture_0[]; // idb
extern char aNidx9depthsten[]; // idb
extern char aNidx9implicitd[]; // idb
extern char aNidx9additiona[]; // idb
extern char aNidx9onscreenb[]; // idb
extern char aNidx9implicitb[]; // idb
extern char aNidx9swapchain[]; // idb
extern char aNidx9swapcha_0[]; // idb
extern int (__thiscall *NiD3DShaderLibrary::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DSCM_Vertex::_vftable_)(void *p, char); // weak
extern char a__[]; // idb
extern int (__thiscall *NiTArray<NiPointer<NiD3DShaderConstantMapEntry>>::_vftable_)(void *p, char); // weak
extern char aInvalidEntries[]; // idb
extern char aInvalidOperand[38]; // weak
extern int (__thiscall *NiD3DShaderConstantMap::_vftable_)(void *p, char); // weak
extern char aSin_time[9]; // weak
extern char aCos_time[9]; // weak
extern char aTan_time[9]; // weak
extern char aTime_sin_cos_t[17]; // weak
extern char aAttemptingTo_0[]; // idb
extern char aFailedToFindSh[]; // idb
extern char aAttemptingToRe[]; // idb
extern int (__thiscall *NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiShaderLibrary>>::_vftable_)(void *p, char); // weak
extern char aSD_2[]; // idb
extern int (__thiscall *NiTPointerMap<char_const___NiShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiShader__>_NiShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NiPointer<NiShaderLibrary>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiShaderLibrary>>_NiPointer<NiShaderLibrary>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DGlobalConstantEntry::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMap<char_const___NiD3DGlobalConstantEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTMap<char_const___NiD3DGlobalConstantEntry__>_NiD3DGlobalConstantEntry__>::_vftable_)(void *p, char); // weak
extern char aSetupgeometryO[]; // idb
extern char aInitializeOnSF[]; // idb
extern char aCannotFindShad[]; // idb
extern char aNid3dshaderD[]; // idb
extern int (__thiscall *NiTStringPointerMap<NiShader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringPointerMap<NiPointer<NiShaderLibrary>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringMap<NiD3DGlobalConstantEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DShaderFactory::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DShaderConstantMapEntry::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9ShaderDeclaration::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DController::_vftable_)(void *p, char); // weak
extern char aNid3dcontrolle[]; // idb
extern char aNid3dtimesyncc[]; // idb
extern int (__thiscall *NiDX9RenderState::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DShaderConstantManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<NiLight___NiDX9LightManager::LightEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiLight__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTexture::RendererData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9TextureData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiDX9VertexBufferManager::NiDX9VBInfo__>::_vftable_)(void *p, char); // weak
extern char aIllegalWeights[]; // idb
extern int (__thiscall *NiTPointerMap<unsigned_int_NiDX9VertexBufferManager::NiDX9VBInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9VertexBufferManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9SourceTextureData::_vftable_)(void *p, char); // weak
extern char a_dds[]; // idb
extern char a_tga[]; // idb
extern char a_bmp[]; // idb
extern int (__thiscall *NiDX9SourceCubeMapData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiDX9IndexBufferManager::NiDX9IBInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiDX9IndexBufferManager::NiDX9IBInfo__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9IndexBufferManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9RenderedTextureData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9RenderedCubeMapData::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9DynamicTextureData::_vftable_)(void *p, char); // weak
extern char aUnknown_3[9]; // weak
extern char aD3derr_unsup_2[32]; // weak
extern char aD3derr_unsup_4[30]; // weak
extern char aD3derr_unsup_3[33]; // weak
extern char aD3derr_unsup_0[27]; // weak
extern char aD3derr_unsup_1[33]; // weak
extern char aD3derr_unsuppo[27]; // weak
extern char aD3derr_toomany[25]; // weak
extern char aD3derr_notfoun[16]; // weak
extern char aD3derr_notavai[20]; // weak
extern char aD3derr_moredat[16]; // weak
extern char aD3derr_inval_0[21]; // weak
extern char aD3derr_invalid[19]; // weak
extern char aD3derr_driveri[27]; // weak
extern char aD3derr_devicen[22]; // weak
extern char aD3derr_devicel[18]; // weak
extern char aD3derr_confl_0[33]; // weak
extern char aD3derr_confl_1[32]; // weak
extern char aD3derr_conflic[30]; // weak
extern char aD3derr_wrongte[26]; // weak
extern char aD3derr_outofvi[24]; // weak
extern char aE_invalidarg[13]; // weak
extern char aE_fail[7]; // weak
extern char aE_outofmemory[14]; // weak
extern char aNidx9direct3dt[]; // idb
extern int (__thiscall *NiD3DGeometryGroupManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9TextureManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DShaderProgramCreator::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DShaderProgramCreatorHLSL::_vftable_)(void *p, char); // weak
extern char aHlsl[]; // idb
extern int (__thiscall *NiD3DShaderProgramCreatorAsm::_vftable_)(void *p, char); // weak
extern char aPsh[]; // idb
extern char aVsh[]; // idb
extern int (__thiscall *NiD3DShaderProgramCreatorObj::_vftable_)(void *p, char); // weak
extern char aPso[]; // idb
extern char aVso[]; // idb
extern int (__thiscall *NiD3DShaderDeclaration::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiD3DShaderDeclaration::NiPackerEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<unsigned_int____cdecl____NiD3DShaderDeclaration::PackingParameters___>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DRenderState::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDX9ShaderConstantManager::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiVBChip__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiVBBlock__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiVBSet__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiVBSet__>::_vftable_)(void *p, char); // weak
extern int (*NiStaticGeometryGroup::_vftable_)(); // weak
extern int (__cdecl *NiUnsharedGeometryGroup::_vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiVBDynamicSet__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiVBChip__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiVBDynamicSet__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiVBDynamicSet__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<unsigned_int_NiVBChip__>::_vftable_)(void *p, char); // weak
extern int (*NiDynamicGeometryGroup::_vftable_)(); // weak
extern int (__thiscall *NiD3DPixelShader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DVertexShader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DHLSLPixelShader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiD3DHLSLVertexShader::_vftable_)(void *p, char); // weak
extern char aInvalidShaderF[]; // idb
extern char aFailedToComp_1[]; // idb
extern char aFailedToCompil[]; // idb
extern char aFailedToFind_0[]; // idb
extern char aInvalidShaderB[]; // idb
extern char aFailedToAsse_1[]; // idb
extern char aFailedToAsse_0[]; // idb
extern char aFailedCreateve[]; // idb
extern char aFailedCreatepi[]; // idb
extern char aFailedToAsse_3[]; // idb
extern char aFailedToAssemb[]; // idb
extern char aFailedToAsse_2[]; // idb
extern char aFailedToAsse_4[]; // idb
extern char aInvalidShade_0[]; // idb
extern int (*NiGeometryGroup::_vftable_[9])(); // weak
extern char aFailedToCreate[]; // idb
extern char aFailedToCrea_0[]; // idb
extern int (__thiscall *NiD3DShaderProgram::_vftable_)(void *p, char); // weak
extern GUID GUID_SysKeyboard;
extern GUID GUID_SysMouse;
extern GUID GUID_POV;
extern GUID GUID_Key;
extern GUID GUID_Button;
extern GUID GUID_Slider;
extern GUID GUID_RzAxis;
extern GUID GUID_RyAxis;
extern GUID GUID_RxAxis;
extern GUID GUID_ZAxis;
extern GUID GUID_YAxis;
extern GUID GUID_XAxis;
extern GUID IID_IDirectInput8A;
extern GUID IID_ID3DXEffect;
extern GUID IID_ID3DXEffectStateManager;
extern GUID IID_IDirect3DTexture9;
extern _UNKNOWN c_dfDIMouse2; // weak
extern const DIDATAFORMAT c_dfDIKeyboard;
extern int PacketEncrypt::pe_encryptlen; // weak
extern char png_libpng_ver[6]; // weak
extern int png_IHDR; // weak
extern int png_IDAT; // weak
extern int png_IEND; // weak
extern int png_PLTE; // weak
extern int png_bKGD; // weak
extern int png_cHRM; // weak
extern int png_gAMA; // weak
extern int png_hIST; // weak
extern int png_iCCP; // weak
extern int png_oFFs; // weak
extern int png_pCAL; // weak
extern int png_sCAL; // weak
extern int png_pHYs; // weak
extern int png_sBIT; // weak
extern int png_sPLT; // weak
extern int png_sRGB; // weak
extern int png_tEXt; // weak
extern int png_tIME; // weak
extern int png_tRNS; // weak
extern int png_zTXt; // weak
extern int png_pass_start[]; // weak
extern int png_pass_inc[]; // weak
extern int png_pass_ystart[]; // weak
extern int png_pass_yinc[]; // weak
extern int png_pass_mask[]; // weak
extern char error_message[]; // idb
extern char warning_message[]; // idb
extern char aUnknownZlibErr[]; // idb
extern char aZlibVersionErr[19]; // weak
extern char aZlibMemoryErro[18]; // weak
extern char aIncompatibleLi[]; // idb
extern char aApplicationIsR[]; // idb
extern char aApplicationWas[]; // idb
extern char aMissingPlteB_0[]; // idb
extern char aMissingIhdrB_4[]; // idb
extern char aPngFileCorrupt[]; // idb
extern char aNotAPngFile[15]; // weak
extern char aIgnoringExtraP[]; // idb
extern char aExtraCompresse[]; // idb
extern char aDecompressio_0[20]; // weak
extern char aNotEnoughImage[]; // idb
extern char aInvalidAttempt[]; // idb
extern char aTooManyIdatSFo[]; // idb
extern char aImageIsTooHigh[]; // idb
extern char aCallToNullRead[]; // idb
extern char aReadError[]; // idb
extern char aSameStructure_[]; // idb
extern char aItSAnErrorToSe[]; // idb
extern char png_digit[34];
extern char aLibpngErrorSOf[]; // idb
extern char aLibpngErrorNo_[25]; // weak
extern char aLibpngWarningS[]; // idb
extern char aLibpngWarningN[]; // idb
extern char aOutOfMemory[]; // idb
extern char aUnknownZtxtCom[]; // idb
extern char aNotEnoughMem_1[]; // idb
extern char aIncompleteComp[]; // idb
extern char aDataErrorInCom[48]; // weak
extern char aBufferErrorInC[50]; // weak
extern char aNotEnoughMem_3[]; // idb
extern char aNotEnoughMem_5[]; // idb
extern char aNotEnoughMemor[]; // idb
extern char aInvalidChunkTy[]; // idb
extern char aIgnoringBadAda[]; // idb
extern char aRowHasTooManyB[]; // idb
extern char aPngUnsignedInt[]; // idb
extern char aCrcError[]; // idb
extern char aInvalidIhdrChu[]; // idb
extern char aOutOfPlaceIhdr[]; // idb
extern char aTruncatingIn_0[]; // idb
extern char aTruncatingInco[]; // idb
extern char aInvalidPalette[]; // idb
extern char aIgnoringPlteCh[]; // idb
extern char aDuplicatePlteC[]; // idb
extern char aInvalidPlteAft[]; // idb
extern char aMissingIhdr_11[25]; // weak
extern char aIncorrectIendC[]; // idb
extern char aNoImageInFile[]; // idb
extern char aGammaD100000[]; // idb
extern char aIgnoringInco_0[]; // idb
extern char aIgnoringGamaCh[]; // idb
extern char aIncorrectGamaC[]; // idb
extern char aDuplicateGamaC[]; // idb
extern char aOutOfPlaceGama[]; // idb
extern char aInvalidGamaAft[]; // idb
extern char aMissingIhdr_12[]; // idb
extern char aIncorrectSbitC[]; // idb
extern char aDuplicateSbitC[]; // idb
extern char aOutOfPlaceSbit[]; // idb
extern char aInvalidSbitAft[]; // idb
extern char aMissingIhdrB_5[]; // idb
extern char aInvalidChrmWhi[]; // idb
extern char aInvalidChrmRed[]; // idb
extern char aInvalidChrmGre[]; // idb
extern char aInvalidChrmBlu[]; // idb
extern char aGxFGyFBxFByF[]; // idb
extern char aWxFWyFRxFRyF[]; // idb
extern char aIgnoringIncorr[]; // idb
extern char aIncorrectChrmC[]; // idb
extern char aDuplicateChrmC[]; // idb
extern char aMissingPlteBef[]; // idb
extern char aInvalidChrmAft[]; // idb
extern char aMissingIhdr_13[]; // idb
extern char aIncorrectGamma[]; // idb
extern char aUnknownSrgbInt[]; // idb
extern char aIncorrectSrgbC[]; // idb
extern char aDuplicateSrgbC[]; // idb
extern char aOutOfPlaceSrgb[]; // idb
extern char aInvalidSrgbAft[]; // idb
extern char aMissingIhdrB_0[]; // idb
extern char aProfileSizeFie[]; // idb
extern char aIgnoringTrunca[]; // idb
extern char aIgnoringNonzer[]; // idb
extern char aMalformedIccpC[]; // idb
extern char aDuplicateIccpC[]; // idb
extern char aOutOfPlaceIccp[]; // idb
extern char aInvalidIccpAft[]; // idb
extern char aMissingIhdrB_1[]; // idb
extern char aSpltChunkRequi[]; // idb
extern char aSpltChunkTooLo[]; // idb
extern char aSpltChunkHasBa[]; // idb
extern char aMalformedSpltC[]; // idb
extern char aInvalidSpltAft[]; // idb
extern char aMissingIhdrB_6[]; // idb
extern char aTrnsChunkNotAl[]; // idb
extern char aZeroLengthTrns[]; // idb
extern char aMissingPlteB_3[]; // idb
extern char aDuplicateTrnsC[]; // idb
extern char aInvalidTrnsAft[]; // idb
extern char aIncorrectTrnsC[]; // idb
extern char aMissingIhdrB_2[]; // idb
extern char aIncorrectBkgdC[]; // idb
extern char aIncorrectBkg_0[]; // idb
extern char aDuplicateBkgdC[]; // idb
extern char aMissingPlteB_1[]; // idb
extern char aInvalidBkgdAft[]; // idb
extern char aMissingIhdrB_8[]; // idb
extern char aIncorrectHistC[]; // idb
extern char aDuplicateHistC[]; // idb
extern char aMissingPlteB_2[]; // idb
extern char aInvalidHistAft[]; // idb
extern char aMissingIhdr_14[]; // idb
extern char aDuplicatePhysC[]; // idb
extern char aInvalidPhysAft[]; // idb
extern char aIncorrectPhysC[]; // idb
extern char aMissingIhdr_15[]; // idb
extern char aDuplicateOffsC[]; // idb
extern char aInvalidOffsAft[]; // idb
extern char aIncorrectOffsC[]; // idb
extern char aMissingIhdrBef[]; // idb
extern char aNoMemoryForPca[]; // idb
extern char aUnrecognizedEq[]; // idb
extern char aInvalidPcalPar[]; // idb
extern char aInvalidPcalDat[]; // idb
extern char aDuplicatePcalC[]; // idb
extern char aInvalidPcalAft[]; // idb
extern char aNoMemoryForP_0[]; // idb
extern char aMissingIhdrB_9[]; // idb
extern char aInvalidScalDat[]; // idb
extern char aMalformedHeigh[]; // idb
extern char aMalformedWidth[]; // idb
extern char aDuplicateScalC[]; // idb
extern char aInvalidScalAft[]; // idb
extern char aOutOfMemoryW_0[]; // idb
extern char aMissingIhdrB_7[]; // idb
extern char aDuplicateTimeC[]; // idb
extern char aIncorrectTimeC[]; // idb
extern char aOutOfPlaceTime[]; // idb
extern char aInsufficient_4[]; // idb
extern char aNotEnoughMem_0[]; // idb
extern char aNoMemoryToProc[]; // idb
extern char aMissingIhdr_10[]; // idb
extern char aInsufficient_1[]; // idb
extern char aNotEnoughMem_2[]; // idb
extern char aUnknownCompres[]; // idb
extern char aZeroLengthZtxt[]; // idb
extern char aOutOfMemoryPro[]; // idb
extern char aMissingIhdrB_3[]; // idb
extern char aUnknownCritica[]; // idb
extern char aExtraCompressi[]; // idb
extern char aExtraCompres_0[]; // idb
extern char aDecompressionE[20]; // weak
extern char aPng_do_ditherR[]; // idb
extern char aPng_do_rgb_to_[]; // idb
extern char aNullRowBufferF[]; // idb
extern char aIgnoringAtte_0[]; // idb
extern char aIgnoringAttemp[]; // idb
extern char aSettingGamma0[]; // idb
extern char aLimitingGammaT[]; // idb
extern char aSettingNegativ[]; // idb
extern char aInsufficient_3[]; // idb
extern char aPaletteSize0Hi[]; // idb
extern char aInvalidFilterM[]; // idb
extern char aUnknownFilterM[]; // idb
extern char aMngFeaturesAre[]; // idb
extern char aUnknownCompr_1[]; // idb
extern char aUnknownInterla[]; // idb
extern char aInvalidColorTy[]; // idb
extern char aInvalidColor_0[]; // idb
extern char aInvalidBitDept[]; // idb
extern char aWidthIsTooLarg[]; // idb
extern char aInvalidImageSi[]; // idb
extern char aImageSizeExcee[]; // idb
extern char aImageWidthOrHe[]; // idb
extern char aInsufficient_7[]; // idb
extern char aInsufficient_8[]; // idb
extern char aInsufficient_5[]; // idb
extern char aInsufficient_2[]; // idb
extern char aInsufficient_0[]; // idb
extern char aInsufficient_6[]; // idb
extern char aItxtChunkNotSu[]; // idb
extern char aNoMemoryForSpl[]; // idb
extern char aOutOfMemoryP_0[]; // idb
extern char aOutOfMemoryWhi[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiImageReader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiImageReader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiImageReader__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDevImageConverter::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiPointer<NiShaderDesc>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiShaderLibraryDesc::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NiShaderRequirementDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiShaderAttributeDesc>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiShaderAttributeDesc>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NiPointer<NiShaderAttributeDesc>>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiShaderDesc::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiShaderRequirementDesc::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiShaderAttributeDesc::_vftable_)(void *p, char); // weak
extern int NiSCMExtraData::m_uiPassShift; // weak
extern int (__thiscall *NiSCMExtraData::_vftable_)(void *p, char); // weak
extern char aNiscmextradata[]; // idb
extern char aNirenderedcube[]; // idb
extern char a_targa[]; // idb
extern int (__thiscall *NiTGAReader::_vftable_)(void *p, char); // weak
extern char a_inta[]; // idb
extern char a_int[]; // idb
extern char a_rgba[]; // idb
extern char a_rgb[]; // idb
extern char a_sgi[]; // idb
extern int (__thiscall *NiSGIReader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiDDSReader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiBMPReader::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiShaderDescBase::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiCursor::_vftable_)(void *p, char); // weak
extern char aM_uihotspoty[]; // idb
extern char aM_uihotspotx[]; // idb
extern char aM_uiflags[]; // idb
extern char aNicursor[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSBObjectTable::ObjectDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTArray<NSBImplementation__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSBImplementation__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBImplementation__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NSBPackingDef__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBObjectTable::ObjectDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerMap<char_const___NSBPackingDef__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTStringTemplateMap<NiTPointerMap<char_const___NSBPackingDef__>_NSBPackingDef__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NSBObjectTable::ObjectDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NSBShader::_vftable_)(void *p, char); // weak
extern char aKillingNsbshad[]; // idb
extern int (__thiscall *NiTPointerList<NSBImplementation__>::_vftable_)(void *p, char); // weak
extern char aErrorUnableToF[]; // idb
extern int (__thiscall *NiTStringPointerMap<NSBPackingDef__>::_vftable_)(void *p, char); // weak
extern int (__stdcall *NSBAttributeDesc::_vftable_[24])(int kStream); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSBAttributeDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBAttributeDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NSBAttributeDesc__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSBConstantMap::NSBCM_Entry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NSBConstantMap::NSBCM_Entry::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBConstantMap::NSBCM_Entry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NSBConstantMap::NSBCM_Entry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NSBConstantMap::_vftable_)(void *p, char); // weak
extern char aErrorNsbcons_0[]; // idb
extern char aErrorNsbconsta[]; // idb
extern char aErrorNsbcons_1[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSBUserDefinedDataBlock__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBUserDefinedDataBlock__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NSBUserDefinedDataBlock::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NSBUserDefinedDataBlock__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NSBUserDefinedDataSet::_vftable_)(void *p, char); // weak
extern char aWarningNsbuser[]; // idb
extern char aErrorNsbuser_0[]; // idb
extern char aErrorNsbuserde[]; // idb
extern int (__thiscall *NiTArray<NSBPass__>::_vftable_)(void *p, char); // weak
extern char aErrorNsbimplem[]; // idb
extern int (__thiscall *NiTArray<NSBTextureStage__>::_vftable_)(void *p, char); // weak
extern char aPsinputtexture[]; // idb
extern char aPsdotmapping[]; // idb
extern char aPscombinercoun[]; // idb
extern char aPsrgboutputs7[]; // idb
extern char aPsrgboutputs6[]; // idb
extern char aPsrgboutputs5[]; // idb
extern char aPsrgboutputs4[]; // idb
extern char aPsrgboutputs3[]; // idb
extern char aPsrgboutputs2[]; // idb
extern char aPsrgboutputs1[]; // idb
extern char aPsrgboutputs0[]; // idb
extern char aPsfinalcombine[]; // idb
extern char aPsfinalcombi_0[]; // idb
extern char aPscomparemode[]; // idb
extern char aPsrgbinputs7[]; // idb
extern char aPsrgbinputs6[]; // idb
extern char aPsrgbinputs5[]; // idb
extern char aPsrgbinputs4[]; // idb
extern char aPsrgbinputs3[]; // idb
extern char aPsrgbinputs2[]; // idb
extern char aPsrgbinputs1[]; // idb
extern char aPsrgbinputs0[]; // idb
extern char aPsalphaoutpu_3[]; // idb
extern char aPsalphaoutpu_4[]; // idb
extern char aPsalphaoutpu_0[]; // idb
extern char aPsalphaoutpu_2[]; // idb
extern char aPsalphaoutputs[]; // idb
extern char aPsalphaoutpu_1[]; // idb
extern char aPsalphaoutpu_6[]; // idb
extern char aPsalphaoutpu_5[]; // idb
extern char aPsconstant1_7[]; // idb
extern char aPsconstant1_6[]; // idb
extern char aPsconstant1_5[]; // idb
extern char aPsconstant1_4[]; // idb
extern char aPsconstant1_3[]; // idb
extern char aPsconstant1_2[]; // idb
extern char aPsconstant1_1[]; // idb
extern char aPsconstant1_0[]; // idb
extern char aPsconstant0_7[]; // idb
extern char aPsconstant0_6[]; // idb
extern char aPsconstant0_5[]; // idb
extern char aPsconstant0_4[]; // idb
extern char aPsconstant0_3[]; // idb
extern char aPsconstant0_2[]; // idb
extern char aPsconstant0_1[]; // idb
extern char aPsconstant0_0[]; // idb
extern char aPsfinalcombi_1[]; // idb
extern char aPsfinalcombi_2[]; // idb
extern char aPsalphainputs7[]; // idb
extern char aPsalphainputs6[]; // idb
extern char aPsalphainputs5[]; // idb
extern char aPsalphainputs4[]; // idb
extern char aPsalphainputs3[]; // idb
extern char aPsalphainputs2[]; // idb
extern char aPsalphainputs1[]; // idb
extern char aPsalphainputs0[]; // idb
extern char aPstexturemodes[]; // idb
extern char aDonotculluncom[]; // idb
extern char aRopzread[]; // idb
extern char aRopzcmpalwaysr[]; // idb
extern char aStencilcullena[]; // idb
extern char aOcclusionculle[]; // idb
extern char aYuvenable[]; // idb
extern char aDxt1noiseenabl[]; // idb
extern char aSamplealpha[]; // idb
extern char aLinewidth[]; // idb
extern char aShadowfunc[]; // idb
extern char aMultisampleren[]; // idb
extern char aMultisamplemod[]; // idb
extern char aLogicop[]; // idb
extern char aFrontface[]; // idb
extern char aTwosidedlighti[]; // idb
extern char aBackfillmode[]; // idb
extern char aPresentationin[]; // idb
extern char aSwapfilter[]; // idb
extern char aBackambient[]; // idb
extern char aBackemissivema[]; // idb
extern char aBackambientmat[]; // idb
extern char aBackdiffusemat[]; // idb
extern char aBackspecularma[]; // idb
extern char aStippleenable[]; // idb
extern char aDepthclipcontr[]; // idb
extern char aSolidoffsetena[]; // idb
extern char aWireframeoffse[]; // idb
extern char aPointoffsetena[]; // idb
extern char aPolygonoffsetz[]; // idb
extern char aPolygonoffse_0[]; // idb
extern char aSwathwidth[]; // idb
extern char aBlendcolor[]; // idb
extern char aNormalorder[]; // idb
extern char aPositionorder[]; // idb
extern char aPatchsegments[]; // idb
extern char aSoftwarevertex[]; // idb
extern char aZbias[]; // idb
extern char aEdgeantialias[]; // idb
extern char aLinepattern[]; // idb
extern char aTessellationmo[]; // idb
extern char aHighprecisio_2[]; // idb
extern char aHighprecisio_0[]; // idb
extern char aHighprecisionb[]; // idb
extern char aHighprecisio_1[]; // idb
extern char aViewportenable[]; // idb
extern char aBlendopalpha[]; // idb
extern char aDestblendalpha[]; // idb
extern char aSrcblendalpha[]; // idb
extern char aSeparatealphab[]; // idb
extern char aWrap15[]; // idb
extern char aWrap14[]; // idb
extern char aWrap13[]; // idb
extern char aWrap12[]; // idb
extern char aWrap11[]; // idb
extern char aWrap10[]; // idb
extern char aWrap9[]; // idb
extern char aWrap8[]; // idb
extern char aDepthbias[]; // idb
extern char aSrgbwriteenabl[]; // idb
extern char aBlendfactor[]; // idb
extern char aColorwriteen_1[]; // idb
extern char aColorwriteenab[]; // idb
extern char aColorwriteen_0[]; // idb
extern char aCcw_stencilfun[]; // idb
extern char aCcw_stencilpas[]; // idb
extern char aCcw_stencilzfa[]; // idb
extern char aCcw_stencilfai[]; // idb
extern char aTwosidedstenci[]; // idb
extern char aEnableadaptive[]; // idb
extern char aEnableadapti_0[]; // idb
extern char aAdaptivetess_w[]; // idb
extern char aAdaptivetess_z[]; // idb
extern char aAdaptivetess_y[]; // idb
extern char aAdaptivetess_x[]; // idb
extern char aMaxtessellatio[]; // idb
extern char aMintessellatio[]; // idb
extern char aAntialiasedlin[]; // idb
extern char aSlopescaledept[]; // idb
extern char aScissortestena[]; // idb
extern char aNormaldegree[]; // idb
extern char aPositiondegree[]; // idb
extern char aBlendop[]; // idb
extern char aTweenfactor[]; // idb
extern char aColorwriteen_2[]; // idb
extern char aIndexedvertexb[]; // idb
extern char aPointsize_max[]; // idb
extern char aDebugmonitorto[]; // idb
extern char aPatchedgestyle[]; // idb
extern char aMultisamplemas[]; // idb
extern char aMultisampleant[]; // idb
extern char aPointscale_c[]; // idb
extern char aPointscale_b[]; // idb
extern char aPointscale_a[]; // idb
extern char aPointscaleenab[]; // idb
extern char aPointspriteena[]; // idb
extern char aPointsize_min[]; // idb
extern char aPointsize[]; // idb
extern char aClipplaneenabl[]; // idb
extern char aVertexblend[]; // idb
extern char aEmissivemateri[]; // idb
extern char aAmbientmateria[]; // idb
extern char aSpecularmateri[]; // idb
extern char aDiffusemateria[]; // idb
extern char aNormalizenorma[]; // idb
extern char aLocalviewer[]; // idb
extern char aColorvertex[]; // idb
extern char aFogvertexmode[]; // idb
extern char aAmbient_0[]; // idb
extern char aLighting[]; // idb
extern char aClipping[]; // idb
extern char aWrap7[]; // idb
extern char aWrap6[]; // idb
extern char aWrap5[]; // idb
extern char aWrap4[]; // idb
extern char aWrap3[]; // idb
extern char aWrap2[]; // idb
extern char aWrap1[]; // idb
extern char aWrap0[]; // idb
extern char aTexturefactor[]; // idb
extern char aStencilwritema[]; // idb
extern char aStencilmask[]; // idb
extern char aStencilref[]; // idb
extern char aStencilfunc[]; // idb
extern char aStencilpass[]; // idb
extern char aStencilzfail[]; // idb
extern char aStencilfail[]; // idb
extern char aStencilenable[]; // idb
extern char aRangefogenable[]; // idb
extern char aFogdensity[]; // idb
extern char aFogend[]; // idb
extern char aFogstart[]; // idb
extern char aFogtablemode[]; // idb
extern char aFogcolor[]; // idb
extern char aSpecularenable[]; // idb
extern char aFogenable[]; // idb
extern char aAlphablendenab[]; // idb
extern char aDitherenable[]; // idb
extern char aAlphafunc[]; // idb
extern char aAlpharef[]; // idb
extern char aZfunc[]; // idb
extern char aCullmode[]; // idb
extern char aDestblend[]; // idb
extern char aSrcblend[]; // idb
extern char aLastpixel[]; // idb
extern char aAlphatestenabl[]; // idb
extern char aZwriteenable[]; // idb
extern char aShademode[]; // idb
extern char aFillmode[]; // idb
extern char aZenable[]; // idb
extern char aPeredge[]; // idb
extern char aQuintic[]; // idb
extern char aCubic[]; // idb
extern char aQuadratic[]; // idb
extern char aEnable_0[]; // idb
extern char aCcw[4]; // weak
extern char aCw[]; // idb
extern char aZb_usew[8]; // weak
extern char aZb_true[]; // idb
extern char aZb_false[]; // idb
extern char aSolid[6]; // weak
extern char aWireframe[]; // idb
extern char aPoint[]; // idb
extern char a4weights4matri[]; // idb
extern char a3weights3matri[]; // idb
extern char a2weights2matri[]; // idb
extern char a0weights[]; // idb
extern char aTweening[]; // idb
extern char a3weights[]; // idb
extern char a2weights[]; // idb
extern char a1weights[]; // idb
extern char aDisable[]; // idb
extern char aContinuous[]; // idb
extern char aDiscrete[]; // idb
extern char aColor2[7]; // weak
extern char aColor1[]; // idb
extern char aMaterial[]; // idb
extern char aUvw[]; // idb
extern char aVw[]; // idb
extern char aUw[]; // idb
extern char aUv[]; // idb
extern char aW_3[]; // idb
extern char aV[]; // idb
extern char aU[]; // idb
extern char aDisabled[]; // idb
extern char aExp2[]; // idb
extern char aExp[]; // idb
extern char aRevsubtractsig[18]; // weak
extern char aAddsigned[]; // idb
extern char aMin_0[]; // idb
extern char aRevsubtract[]; // idb
extern char aSubtract[]; // idb
extern char aDecr[5]; // weak
extern char aIncr[]; // idb
extern char aInvert[]; // idb
extern char aDecrsat[]; // idb
extern char aIncrsat[]; // idb
extern char aReplace[]; // idb
extern char aKeep_0[]; // idb
extern char aPhong[6]; // weak
extern char aGouraud[]; // idb
extern char aFlat_0[]; // idb
extern char aInvconstantalp[]; // idb
extern char aConstantalpha[]; // idb
extern char aInvblendfactor[]; // idb
extern char aInvconstantcol[]; // idb
extern char aConstantcolor[]; // idb
extern char aBothinvsrcalph[]; // idb
extern char aBothsrcalpha[]; // idb
extern char aSrcalphasat[]; // idb
extern char aInvdestcolor[]; // idb
extern char aDestcolor[]; // idb
extern char aInvdestalpha[]; // idb
extern char aDestalpha[]; // idb
extern char aInvsrcalpha[]; // idb
extern char aSrcalpha[]; // idb
extern char aInvsrccolor[]; // idb
extern char aSrccolor[]; // idb
extern char aOne[]; // idb
extern char aZero[]; // idb
extern char aAlways[7]; // weak
extern char aGreaterequal[]; // idb
extern char aNotequal[]; // idb
extern char aGreater[]; // idb
extern char aLessequal[]; // idb
extern char aEqual[]; // idb
extern char aLess[]; // idb
extern char aNever[]; // idb
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSBStateGroup::NSBSGEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBStateGroup::NSBSGEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NSBStateGroup::NSBSGEntry__>::_vftable_)(void *p, char); // weak
extern char aWarningNsbst_0[]; // idb
extern char aWarningNsbstat[]; // idb
extern char aFloat2h[8]; // weak
extern char aPbyte4[7]; // weak
extern char aPbyte3[7]; // weak
extern char aPbyte2[7]; // weak
extern char aPbyte1[7]; // weak
extern char aNormpacked3[12]; // weak
extern char aNormshort4[11]; // weak
extern char aNormshort3[11]; // weak
extern char aNormshort2[11]; // weak
extern char aNormshort1[11]; // weak
extern char aShort4[7]; // weak
extern char aShort3[7]; // weak
extern char aShort2[7]; // weak
extern char aShort1[7]; // weak
extern char aUbyte4[7]; // weak
extern char aUbytecolor[11]; // weak
extern char aFloat4[7]; // weak
extern char aFloat3[7]; // weak
extern char aFloat2[7]; // weak
extern char aFloat1[7]; // weak
extern char aNibinormal[11]; // weak
extern char aNitangent[10]; // weak
extern char aNitexcoord7[12]; // weak
extern char aNitexcoord6[12]; // weak
extern char aNitexcoord5[12]; // weak
extern char aNitexcoord4[12]; // weak
extern char aNitexcoord3[12]; // weak
extern char aNitexcoord2[12]; // weak
extern char aNitexcoord1[12]; // weak
extern char aNitexcoord0[12]; // weak
extern char aNicolor[8]; // weak
extern char aNinormal[9]; // weak
extern char aNiblendindices[15]; // weak
extern char aNiblendweight[14]; // weak
extern char aNiposition[11]; // weak
extern int (__thiscall *NiTListBase<NiTPointerAllocator<unsigned_int>_NSBPackingDef::NSBPDEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBPackingDef::NSBPDEntry__>::_vftable_)(void *p, char); // weak
extern int (__thiscall *NiTPointerList<NSBPackingDef::NSBPDEntry__>::_vftable_)(void *p, char); // weak
extern char aWarningNsbpack[]; // idb
extern char aWarningPacking[]; // idb
extern char aS_vsh[]; // idb
extern char aS_psh[]; // idb
extern int (__thiscall *NiTArray<NiPointer<NSBUserDefinedDataSet>>::_vftable_)(void *p, char); // weak
extern char aSS_2[]; // idb
extern int (__thiscall *NiBinaryShader::_vftable_)(void *p, char); // weak
extern char aNibinaryshader[]; // idb
extern char aErrorNsbuser_1[]; // idb
extern char aErrorNsbuser_2[]; // idb
extern int (__thiscall *NsFNC_35::_vftable_)(void *p, char); // weak
extern char instr[]; // idb
extern char asc_A1B048[]; // idb
extern int (__thiscall *NsFNC_123::_vftable_)(void *p, char); // weak
extern char asc_A1B058[]; // idb
extern int (__thiscall *NsFNC_125::_vftable_)(void *p, char); // weak
extern int (__thiscall *NsFNC_58::_vftable_)(void *p, char); // weak
extern int (__thiscall *NsFNC_34::_vftable_)(void *p, char); // weak
extern char asc_A1B080[6]; // weak
extern int (__thiscall *NsFileReader::_vftable_)(NsFileReader *this, int _strFileName); // weak
extern int (__thiscall *NsTextCodeV0_2::_vftable_)(void *p, char); // weak
extern int (__thiscall *INsFile_NodeCreater::_vftable_)(void *p, char); // weak
extern int (__thiscall *INsFile::_vftable_)(void *p, char); // weak
extern char aMesh_vertex[]; // idb
extern char inOne[]; // idb
extern int (__thiscall *NiD3DSCM_Pixel::_vftable_)(void *p, char); // weak
extern _UNKNOWN __rtc_izz; // weak
extern _UNKNOWN __rtc_tzz; // weak
extern _s__ThrowInfo _TI2_AVbad_alloc_std__; // idb
extern _s__ThrowInfo _TI4_AVfailure_ios_base_std__; // idb
extern _s__ThrowInfo _TI2_AVruntime_error_std__; // idb
extern _s__ThrowInfo _TI2_AVbad_cast_std__; // idb
extern _s__ThrowInfo _TI1_AVCAtlException_ATL__; // idb
extern _s__ThrowInfo _TI3_AVbad_function_call_boost__; // idb
extern _UNKNOWN unk_A62CB0; // weak
extern _UNKNOWN unk_A65188; // weak
extern _s__ThrowInfo _TI3_AVlength_error_std__; // idb
extern _s__ThrowInfo _TI3_AVout_of_range_std__; // idb
extern _s__ThrowInfo _TI2_AVbad_exception_std__; // idb
extern _UNKNOWN unk_A6BA38; // weak
extern _UNKNOWN unk_A6BB88; // weak
extern _UNKNOWN unk_A6BBE8; // weak
extern _s__ThrowInfo _TI1_AVexception_std__; // idb
extern unsigned int crc_32_tab[256];
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > BlockedData;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73594; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A735B0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A735CC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A735E8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73604; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73620; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7363C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73658; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73674; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73690; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A736AC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A736C8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A736E4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73700; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7371C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73738; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73754; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73770; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7378C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A737A8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A737C4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A737E0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A737FC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73818; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73834; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73850; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7386C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73888; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A738A4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A738C0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A738DC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A738F8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73914; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73930; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7394C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73968; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73984; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A739A0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A739BC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A739D8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A739F4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73A10; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73A2C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73A48; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73A64; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73A80; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73A9C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73AB8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73AD4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73AF0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73B0C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73B28; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73B44; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73B60; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73B7C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73B98; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73BB4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73BD0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73BEC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73C08; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73C24; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73C40; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73C5C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73C78; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73C94; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73CB0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73CCC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73CE8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73D04; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73D20; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73D3C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73D58; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73D74; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73D90; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73DAC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73DC8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73DE4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73E00; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73E1C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73E38; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73E54; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73E70; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73E8C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73EA8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73EC4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73EE0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73EFC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73F18; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73F34; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73F50; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73F6C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73F88; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73FA4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73FC0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73FDC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A73FF8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A74014; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A74030; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7404C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A74068; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A74084; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A740A0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A740BC; // idb
extern int (__thiscall **NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>__RTTI_Type_Descriptor_)(void *p, char); // weak
extern char CharSelectFrameWork::bRandomMode; // weak
extern D3DXCOLOR Color::m_kDxWhiteColor; // idb
extern D3DXCOLOR Color::m_kDxBlackColor; // idb
extern D3DXCOLOR Color::m_kDxRedColor; // idb
extern D3DXCOLOR Color::m_kDxGreenColor; // idb
extern __int64 Color::m_kDxBlueColor; // weak
extern __int64 qword_A745F8; // weak
extern D3DXCOLOR Color::m_kDxYellowColor; // idb
extern _UNKNOWN Color::m_kDxGoldColor; // weak
extern float flt_A74618; // weak
extern _UNKNOWN Color::m_kDxOrangeColor; // weak
extern _UNKNOWN Color::m_kDxGrayColor; // weak
extern float flt_A74654; // weak
extern float flt_A74668; // weak
extern float flt_A74674; // weak
extern char Color::m_kDxLPTextColor[13]; // weak
extern _UNKNOWN Color::m_kDxMenuColor; // weak
extern float flt_A746C4; // weak
extern float flt_A746C8; // weak
extern float Color::m_kDxNpcNameColor; // weak
extern float flt_A746D8; // weak
extern __int64 Color::m_kDxWinTitleColor; // weak
extern __int64 qword_A746E8; // weak
extern _UNKNOWN Color::m_kDxWinTabColor; // weak
extern char *ShineFontName::ORIGINAL; // idb
extern char *ShineFontName::ENCRYPTED; // idb
extern char *ShineFontName::DECRYPTED; // idb
extern char *ShineFontName::ORIGINAL_BOLD; // idb
extern char *ShineFontName::ENCRYPTED_BOLD; // idb
extern char *ShineFontName::DECRYPTED_BOLD; // idb
extern char Font::ms_bUsePrivateFont; // weak
extern char *Font::ms_pcEncryptSeed; // idb
extern NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > IconMgr::ms_kTextureMap; // idb
extern char byte_A74BAC; // weak
extern NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > IconMgr::ms_kAniTextureMap; // idb
extern char byte_A74BC0; // weak
extern type_info boost::checked_deleter<SlideListWin::ListItem>__RTTI_Type_Descriptor_; // idb
extern type_info boost::checked_deleter<SLWCreateInfo::Item>__RTTI_Type_Descriptor_; // idb
extern char Cursor::ms_bShow; // weak
extern char Cursor::ms_bEnableHardware; // weak
extern int Cursor::ms_eType; // weak
extern char *apcFileName[16];
extern int (__thiscall **NiZBufferProperty__RTTI_Type_Descriptor_)(void *p, char); // weak
extern int g_iChinaLocaleNo; // idb
extern char (*_RemoveBGMFile)[64]; // weak
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > BlockedData_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76724; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76740; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7675C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76778; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76794; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A767B0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A767CC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A767E8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76804; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76820; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7683C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76858; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76874; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76890; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A768AC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A768C8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A768E4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76900; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7691C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76938; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76954; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76970; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7698C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A769A8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A769C4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A769E0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A769FC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76A18; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76A34; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76A50; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76A6C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76A88; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76AA4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76AC0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76ADC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76AF8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76B14; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76B30; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76B4C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76B68; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76B84; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76BA0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76BBC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76BD8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76BF4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76C10; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76C2C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76C48; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76C64; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76C80; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76C9C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76CB8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76CD4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76CF0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76D0C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76D28; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76D44; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76D60; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76D7C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76D98; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76DB4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76DD0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76DEC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76E08; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76E24; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76E40; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76E5C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76E78; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76E94; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76EB0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76ECC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76EE8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76F04; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76F20; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76F3C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76F58; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76F74; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76F90; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76FAC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76FC8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A76FE4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77000; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7701C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77038; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77054; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77070; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7708C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A770A8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A770C4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A770E0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A770FC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77118; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77134; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77150; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7716C; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77188; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A771A4; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A771C0; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A771DC; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A771F8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77214; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A77230; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_A7724C; // idb
extern int CPropertyType<bool>::ms_TypeID; // weak
extern int CPropertyType<float>::ms_TypeID; // weak
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhResObjDefaultRootName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjDefaultRootName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomDefaultRootName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomWallName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomFloorName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomRoofName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomBlockName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomTexStyleTileName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomTexStyleCustomName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhStoCMapName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCollisionParentName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjGeomParentName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCollisionParentNamePick;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightNULL;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightNormal;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightMoveOK;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightMoveNO;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightRepair;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCharColliNodeName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCharColliRootNodeName;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhOtherCharColliRootName;
extern type_info CBaseObject__RTTI_Type_Descriptor_; // idb
extern type_info CWorldConfig__RTTI_Type_Descriptor_; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomWallName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomFloorName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomRoofName_0;
extern float g_fAttackableDist; // weak
extern unsigned int GameFrameWork::ms_uiDisResWidth; // idb
extern unsigned int GameFrameWork::ms_uiDisResHeight; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > GameFrameWork::ms_strLauncher; // idb
extern OptionManager GameFrameWork::m_kOptionManager; // idb
extern bool InventoryWin::ms_bGetDropItemActionReady; // weak
extern bool InventoryWin::ms_bBuyPrivateStoreActionReady; // weak
extern unsigned int PopupMenuTemplate::ms_uiWingStoneMemorySlot0; // weak
extern unsigned int PopupMenuTemplate::ms_uiWingStoneMemorySlot1; // weak
extern unsigned int PopupMenuTemplate::ms_uiWingStoneMemorySlot2; // weak
extern unsigned int PopupMenuTemplate::ms_uiWingStoneMemorySlot3; // weak
extern unsigned int PopupMenuTemplate::ms_uiWingStoneMemorySlot4; // weak
extern unsigned __int16 PopupMenuTemplate::ms_smiMapID0; // weak
extern unsigned __int16 PopupMenuTemplate::ms_smiMapID1; // weak
extern unsigned __int16 PopupMenuTemplate::ms_smiMapID2; // weak
extern unsigned __int16 PopupMenuTemplate::ms_smiMapID3; // weak
extern unsigned __int16 PopupMenuTemplate::ms_smiMapID4; // weak
extern unsigned int PrivateStoreWin::ms_uiPrivateStoreMode; // weak
extern unsigned __int8 PrivateStoreWin::ms_byBoothSize; // weak
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> SkillIcon::ms_kSkillIconList; // idb
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> ICharDeadEvent::ms_kEventList; // idb
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> MagicField::ms_kMagicFieldList; // idb
extern int (__thiscall **ItemMarket::ms_kItemSellInfoList)(void *p, char); // weak
extern int dword_A7E98C; // weak
extern int dword_A7E990; // weak
extern int dword_A7E994; // weak
extern float CharScreenBoardBase::ms_fMaxDistance; // weak
extern float CharScreenBoardBase::ms_fTransNear; // weak
extern float CharScreenBoardBase::ms_fTransFar; // weak
extern int StandLength;
extern unsigned int LevelGapColor[5];
extern float GuildBD::ms_fMaxDistance; // weak
extern float GuildBD::ms_fTransNear; // weak
extern float GuildBD::ms_fTransFar; // weak
extern float NameBD::ms_fMaxDistance; // weak
extern float NameBD::ms_fTransNear; // weak
extern float NameBD::ms_fTransFar; // weak
extern char ms_abyBoardLeftTopSpr[16];
extern char ms_abyBoardLeftBottomSpr[16];
extern char ms_abyBoardRightTopSpr[16];
extern char ms_abyBoardRightBottomSpr[16];
extern float PrivateStoreBD::ms_fLifeTime; // weak
extern float PrivateStoreBD::ms_fMaxDistance; // weak
extern float PrivateStoreBD::ms_fTransNear; // weak
extern float PrivateStoreBD::ms_fTransFar; // weak
extern char ms_abyBoardLeftTopSpr_0[16];
extern char ms_abyBoardLeftBottomSpr_0[16];
extern char ms_abyBoardRightTopSpr_0[16];
extern char ms_abyBoardRightBottomSpr_0[16];
extern float SpeechBD::ms_fMaxDistance; // weak
extern float SpeechBD::ms_fTransNear; // weak
extern float SpeechBD::ms_fTransFar; // weak
extern int StandLength_0;
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> ITimer::m_kTimerList; // idb
extern char aucGener[12];
extern char akClass[12];
extern char *apcFileName_0[12];
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> ActionInfoTable::m_kCharMap; // idb
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> ActionInfoTable::m_kMobMap; // idb
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> ActionInfoTable::m_kRidePetMap; // idb
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> ActionInfoTable::m_kMoverMap; // idb
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> ActionInfoTable::m_kPetMap; // idb
extern char Char::ms_bEnableCarToon; // weak
extern int LevelGapValue[5];
extern char *ActionName::ITEM_CASTING; // idb
extern NiColor Char::INVALIDPOINT3; // idb
extern char *CharResMgr::ms_pcCharRootNodeName; // idb
extern char *ModelPartName::ms_apcModelPartName[33]; // weak
extern char *off_A7FF8C[32]; // weak
extern char *off_A7FF90[31]; // weak
extern char *off_A7FF94[30]; // weak
extern char *off_A7FF98[29]; // weak
extern char *off_A7FF9C[28]; // weak
extern char *off_A7FFA0[27]; // weak
extern char *off_A7FFA4[26]; // weak
extern char *off_A7FFA8[25]; // weak
extern char *off_A7FFAC[24]; // weak
extern char *off_A7FFB0[23]; // weak
extern char *off_A7FFB4[22]; // weak
extern char *off_A7FFB8[21]; // weak
extern char *off_A7FFBC[20]; // weak
extern char *off_A7FFC0[19]; // weak
extern char *off_A7FFC4[18]; // weak
extern char *off_A7FFC8[17]; // weak
extern char *off_A7FFCC[16]; // weak
extern char *off_A7FFD0[15]; // weak
extern char *off_A7FFD4[14]; // weak
extern char *off_A7FFD8[13]; // weak
extern char *off_A7FFDC[12]; // weak
extern char *pLodNodeName; // idb
extern char *off_A7FFE4; // idb
extern char *off_A7FFE8; // idb
extern char *off_A7FFEC[8]; // weak
extern char *off_A7FFF0[7]; // weak
extern char *off_A7FFF4[6]; // weak
extern char *off_A7FFF8[5]; // weak
extern char *off_A7FFFC[4]; // weak
extern char *off_A80000[3]; // weak
extern char *off_A80004[2]; // weak
extern char *off_A80008; // weak
extern int PortraitTextureBuffer::ms_dwMainCharTag; // weak
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > PortraitTextureBuffer::ms_kMobFaceTextureList; // idb
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > PortraitTextureBuffer::ms_kMoverFaceTextureList; // idb
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > PortraitTextureBuffer::ms_kPetFaceTextureList; // idb
extern char *DropItem::ms_pcRootNodeName; // idb
extern char soundName[256];
extern MapObjMgr g_kMapObjMgr; // idb
extern NiPoint3 World::ms_kUpDir; // idb
extern NiPoint3 World::ms_kDownDir; // idb
extern NiPoint3 World::ms_kNorthDir; // idb
extern float World::ms_kWestDir; // weak
extern float flt_A80EF8; // weak
extern float flt_A80EFC; // weak
extern NiPoint3 World::ms_kDefaultDirectionalLightDir; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomWallName_1;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomFloorName_1;
extern float Server::ONE_DAY_TIME; // weak
extern float fAng;
extern _UNKNOWN Effect::m_iUsedOscTargetList; // weak
extern _UNKNOWN unk_A813FC; // weak
extern type_info CHazeScreenEffect__RTTI_Type_Descriptor_; // idb
extern bool EffectMgr::s_bEnableEffect; // weak
extern float TextEff::ms_fDefLifeTime; // weak
extern float TextEff::ms_fMaxDistance; // weak
extern float SoundGroup::ms_fSoundMax; // weak
extern float SoundGroup::ms_fSoundMin; // weak
extern float SoundGroup::ms_fMasterGain; // weak
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> SoundGroup::ms_kSoundGroupList; // idb
extern SoundMgr g_kSoundMgr; // idb
extern type_info *CPropertyType<bool>::ms_rTypeInfo; // idb
extern Version CURRENT_SOUND_OPTION_VERSION;
extern int (__thiscall **MachineOpt::ms_kWinPosList)(void *p, char); // weak
extern int dword_A82594; // weak
extern int dword_A82598; // weak
extern int dword_A8259C; // weak
extern MachineOpt::GraphicOption MachineOpt::ms_kGraphicOption; // idb
extern int MachineOpt::ms_kSoundOption; // weak
extern __int16 word_A825E4; // weak
extern int dword_A825E8; // weak
extern int dword_A825EC; // weak
extern int dword_A825F0; // weak
extern int dword_A825F4; // weak
extern int dword_A825F8; // weak
extern _UNKNOWN MachineOpt::m_stSaveWinPosOption; // weak
extern _UNKNOWN unk_A82602; // weak
extern char byte_A82603; // weak
extern __int16 word_A82604; // weak
extern int dword_A82606; // weak
extern float flt_A8260A[]; // weak
extern float flt_A8260E[]; // weak
extern unsigned int ruiWidth; // idb
extern unsigned int dword_A826E6; // idb
extern unsigned int ruiHeight; // idb
extern unsigned int dword_A826EE; // idb
extern int dword_A826F2; // weak
extern int dword_A826F6; // weak
extern _UNKNOWN MachineOpt::m_keyMappingBuff; // weak
extern _UNKNOWN unk_A82702; // weak
extern char byte_A82703; // weak
extern __int16 word_A82704; // weak
extern int dword_A82706; // weak
extern char byte_A8270A[]; // weak
extern char byte_A8270B[]; // weak
extern _UNKNOWN unk_A827C9; // weak
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > Skill::m_kUseList; // idb
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> SkillEmpowerRequest::ms_kReqList; // idb
extern ITask ITask::ms_kRootTask; // idb
extern char *SCREENSHOT_PATHNAME; // idb
extern bool QuestDataMgr::m_bUpdate; // weak
extern int (__thiscall **QuestHelperMgr::ms_pQuestMCList)(void *p, char); // weak
extern int dword_A83278; // weak
extern int dword_A8327C; // weak
extern int dword_A83280; // weak
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCollisionParentName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCollisionParentNamePick_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCharColliRootNodeName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhOtherCharColliRootName_0;
extern NiColor MoveOKColor_0;
extern NiColor MoveNOColor_0;
extern NiColor NormalColor_0;
extern NiColor RepairColor_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhResObjDefaultRootName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjDefaultRootName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCollisionParentName_1;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCollisionParentNamePick_1;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightNormal_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightMoveOK_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightMoveNO_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjAmbLightRepair_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCharColliNodeName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhOtherCharColliRootName_1;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhObjDefaultRootName_1;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomDefaultRootName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomWallName_2;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomFloorName_2;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomRoofName_1;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomBlockName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomTexStyleTileName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhRoomTexStyleCustomName_0;
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > mhCollisionParentName_2;
extern int (__thiscall **ChargedItemList::ms_kUsingList)(void *p, char); // weak
extern int dword_A83AA0; // weak
extern int dword_A83AA4; // weak
extern int dword_A83AA8; // weak
extern NetMgr g_kNetMgr; // idb
extern float SlotMachineWin::ms_fk1; // weak
extern float SlotMachineWin::ms_fk2; // weak
extern char PADDING[64];
extern static_tree_desc_s static_l_desc;
extern static_tree_desc_s static_d_desc;
extern static_tree_desc_s static_bl_desc;
extern const char *const ijlkey; // weak
extern char *usecpu; // weak
extern _UNKNOWN unk_A84BC0; // weak
extern int dword_A84BE0; // weak
extern __int64 qword_A84C00; // weak
extern __int64 qword_A84C08; // weak
extern __int64 qword_A84C10; // weak
extern __int64 qword_A84C18; // weak
extern __int64 qword_A84C20; // weak
extern __int64 qword_A84C28; // weak
extern __int64 qword_A84C30; // weak
extern __int64 qword_A84C38; // weak
extern __int64 qword_A84C40; // weak
extern __int64 qword_A84C50; // weak
extern __int64 qword_A84C58; // weak
extern __int64 qword_A84C60; // weak
extern __int64 qword_A84C68; // weak
extern __int64 qword_A84C90; // weak
extern __int128 xmmword_A84CB0; // weak
extern __int128 xmmword_A84CC0; // weak
extern __int128 xmmword_A84CD0; // weak
extern __int128 xmmword_A84CE0; // weak
extern __int128 xmmword_A84CF0; // weak
extern __int128 xmmword_A84D10; // weak
extern __int64 qword_A84D20; // weak
extern __int64 qword_A84D28; // weak
extern __int64 qword_A84D30; // weak
extern __int64 qword_A84D38; // weak
extern __int64 qword_A84D40; // weak
extern __int64 qword_A84D48; // weak
extern __int64 qword_A84D50; // weak
extern __int64 qword_A84D58; // weak
extern __int64 qword_A84D60; // weak
extern __int64 qword_A84D68; // weak
extern __int64 qword_A84D70; // weak
extern __int64 qword_A84D78; // weak
extern __int64 qword_A84D80; // weak
extern __int64 qword_A84D88; // weak
extern __int64 qword_A84D90; // weak
extern __int64 qword_A84D98; // weak
extern __int64 qword_A84DA0; // weak
extern __int64 qword_A84DA8; // weak
extern __int64 qword_A84DB0; // weak
extern __int64 qword_A84DB8; // weak
extern __int64 qword_A84DC0; // weak
extern __int64 qword_A84DC8; // weak
extern __int64 qword_A84DD0; // weak
extern __int64 qword_A84DD8; // weak
extern __int64 qword_A84DE0; // weak
extern __int64 qword_A84DE8; // weak
extern __int64 qword_A84DF0; // weak
extern __int64 qword_A84DF8; // weak
extern __int64 qword_A84E00; // weak
extern __int64 qword_A84E08; // weak
extern __int64 qword_A84E10; // weak
extern __int64 qword_A84E18; // weak
extern __int128 xmmword_A84E20; // weak
extern __int128 xmmword_A84E30; // weak
extern __int128 xmmword_A84E40; // weak
extern __int128 xmmword_A84E50; // weak
extern __int128 xmmword_A84E60; // weak
extern __int128 xmmword_A84E70; // weak
extern __int128 xmmword_A84E80; // weak
extern __int128 xmmword_A84E90; // weak
extern __int128 xmmword_A84EA0; // weak
extern __int128 xmmword_A84EB0; // weak
extern __int128 xmmword_A84EC0; // weak
extern __int128 xmmword_A84ED0; // weak
extern __int128 xmmword_A84EE0; // weak
extern __int128 xmmword_A84EF0; // weak
extern __int128 xmmword_A84F00; // weak
extern __int128 xmmword_A84F10; // weak
extern int dword_A84F20[]; // weak
extern int dword_A85020[]; // weak
extern __int64 qword_A85420; // weak
extern __int64 qword_A85430; // weak
extern __int64 qword_A85440; // weak
extern __int64 qword_A85458; // weak
extern __int64 qword_A85460; // weak
extern __int64 qword_A85468; // weak
extern __int64 qword_A85470; // weak
extern __int64 qword_A85478; // weak
extern __int64 qword_A85480; // weak
extern __int64 qword_A85488; // weak
extern __int64 qword_A85490; // weak
extern __int64 qword_A85498; // weak
extern __int64 qword_A854A0; // weak
extern __int64 qword_A854A8; // weak
extern __int128 xmmword_A854C0; // weak
extern __int128 xmmword_A854D0; // weak
extern __int128 xmmword_A854E0; // weak
extern __int128 xmmword_A854F0; // weak
extern __int128 xmmword_A85500; // weak
extern __int128 xmmword_A85510; // weak
extern __int128 xmmword_A85520; // weak
extern __int128 xmmword_A85530; // weak
extern __int128 xmmword_A85540; // weak
extern __int128 xmmword_A85550; // weak
extern __int64 qword_A85570; // weak
extern __int64 qword_A85578; // weak
extern __int64 qword_A85580; // weak
extern __int64 qword_A85588; // weak
extern __int64 qword_A85590; // weak
extern __int64 qword_A85598; // weak
extern __int64 qword_A855A0; // weak
extern __int64 qword_A855A8; // weak
extern __int64 qword_A855B0; // weak
extern __int64 qword_A855B8; // weak
extern __int64 qword_A855C0; // weak
extern __int64 qword_A855C8; // weak
extern __int64 qword_A855D0; // weak
extern __int64 qword_A855D8; // weak
extern __int64 qword_A855E0; // weak
extern __int64 qword_A855E8; // weak
extern __int64 qword_A855F0; // weak
extern __int64 qword_A855F8; // weak
extern __int64 qword_A85600; // weak
extern __int64 qword_A85608; // weak
extern __int64 qword_A85610; // weak
extern __int64 qword_A85618; // weak
extern __int64 qword_A85620; // weak
extern __int64 qword_A85628; // weak
extern __int64 qword_A85630; // weak
extern __int64 qword_A85638; // weak
extern __int64 qword_A85640; // weak
extern __int64 qword_A85648; // weak
extern __int64 qword_A85650; // weak
extern __int64 qword_A85658; // weak
extern __int64 qword_A85660; // weak
extern __int64 qword_A85668; // weak
extern __int64 qword_A85670; // weak
extern __int64 qword_A85678; // weak
extern __int64 qword_A85680; // weak
extern __int64 qword_A85688; // weak
extern __int64 qword_A85690; // weak
extern __int64 qword_A85698; // weak
extern __int64 qword_A856A0; // weak
extern __int64 qword_A856A8; // weak
extern __int64 qword_A856B0; // weak
extern __int64 qword_A856B8; // weak
extern __int64 qword_A856C0; // weak
extern __int64 qword_A856C8; // weak
extern __int64 qword_A856D0; // weak
extern __int64 qword_A856D8; // weak
extern __int64 qword_A856E0; // weak
extern __int64 qword_A856E8; // weak
extern __int64 qword_A856F0; // weak
extern __int64 qword_A856F8; // weak
extern __int64 qword_A85700; // weak
extern __int64 qword_A85708; // weak
extern __int64 qword_A85710; // weak
extern __int64 qword_A85718; // weak
extern __int64 qword_A85720; // weak
extern __int64 qword_A85728; // weak
extern __int64 qword_A85730; // weak
extern __int64 qword_A85738; // weak
extern __int64 qword_A85740; // weak
extern __int64 qword_A85748; // weak
extern __int64 qword_A85750; // weak
extern __int64 qword_A85758; // weak
extern __int64 qword_A85760; // weak
extern __int64 qword_A85768; // weak
extern __int128 xmmword_A85770; // weak
extern __int128 xmmword_A85780; // weak
extern __int128 xmmword_A85790; // weak
extern __int128 xmmword_A857A0; // weak
extern __int128 xmmword_A857B0; // weak
extern __int128 xmmword_A857C0; // weak
extern __int128 xmmword_A857D0; // weak
extern __int128 xmmword_A857E0; // weak
extern __int128 xmmword_A857F0; // weak
extern __int128 xmmword_A85800; // weak
extern __int128 xmmword_A85810; // weak
extern __int128 xmmword_A85820; // weak
extern __int128 xmmword_A85830; // weak
extern __int128 xmmword_A85840; // weak
extern __int128 xmmword_A85850; // weak
extern __int128 xmmword_A85860; // weak
extern __int64 qword_A85870; // weak
extern __int64 qword_A85878; // weak
extern __int64 qword_A85880; // weak
extern __int64 qword_A85888; // weak
extern __int64 qword_A85890; // weak
extern __int64 qword_A85898; // weak
extern __int64 qword_A858A0; // weak
extern __int64 qword_A858A8; // weak
extern __int64 qword_A858B0; // weak
extern __int64 qword_A858B8; // weak
extern __int64 qword_A858C0; // weak
extern __int64 qword_A858C8; // weak
extern __int64 qword_A858D0; // weak
extern __int64 qword_A858D8; // weak
extern __int64 qword_A858E0; // weak
extern __int64 qword_A858E8; // weak
extern __int64 qword_A858F0; // weak
extern __int64 qword_A85900; // weak
extern __int64 qword_A85920; // weak
extern __int64 qword_A85928; // weak
extern __int64 qword_A85930; // weak
extern __int64 qword_A85938; // weak
extern __int64 qword_A85940; // weak
extern __int64 qword_A85948; // weak
extern __int64 qword_A85950; // weak
extern __int64 qword_A85958; // weak
extern __int64 qword_A85960; // weak
extern __int64 qword_A85970; // weak
extern __int64 qword_A85978; // weak
extern __int64 qword_A85980; // weak
extern __int64 qword_A85988; // weak
extern __int64 qword_A85990; // weak
extern __int64 qword_A85998; // weak
extern __int64 qword_A859A0; // weak
extern __int64 qword_A859A8; // weak
extern __int64 qword_A859B0; // weak
extern __int64 qword_A859B8; // weak
extern __int64 qword_A859C0; // weak
extern __int64 qword_A859C8; // weak
extern __int64 qword_A859D0; // weak
extern __int64 qword_A859D8; // weak
extern __int64 qword_A859E0; // weak
extern __int64 qword_A859E8; // weak
extern __int64 qword_A859F0; // weak
extern __int64 qword_A859F8; // weak
extern __int64 qword_A85A00; // weak
extern __int64 qword_A85A08; // weak
extern __int64 qword_A85A10; // weak
extern __int64 qword_A85A18; // weak
extern __int64 qword_A85A20; // weak
extern __int64 qword_A85A28; // weak
extern volatile LONG init_0;
extern std::_Generic_error_category Generic_object;
extern std::_Iostream_error_category Iostream_object;
extern std::_System_error_category System_object;
extern unsigned int atcount_cdecl;
extern int __security_cookie; // weak
extern int __security_cookie_complement; // weak
extern FILE _iob[];
extern _UNKNOWN unk_A85C50; // weak
extern _UNKNOWN unk_A85CB0; // weak
extern _UNKNOWN unk_A85EA0; // weak
extern char NAME__1[4];
extern char *__lconv_c; // weak
extern void *off_A85ED4; // weak
extern void *off_A85ED8; // weak
extern void *off_A85EDC; // weak
extern void *off_A85EE0; // weak
extern void *off_A85EE4; // weak
extern void *off_A85EE8; // weak
extern void *off_A85EEC; // weak
extern void *off_A85EF0; // weak
extern void *off_A85EF4; // weak
extern char *off_A85F00; // weak
extern void *off_A85F04; // weak
extern void *off_A85F08; // weak
extern void *off_A85F0C; // weak
extern void *off_A85F10; // weak
extern void *off_A85F14; // weak
extern void *off_A85F18; // weak
extern void *off_A85F1C; // weak
extern char **__lconv; // weak
extern int __app_type; // weak
extern errentry errtable[45];
extern int ErrnoNoMem;
extern unsigned int DoserrorNoMem;
extern char __abort_behavior; // weak
extern double _HUGE;
extern const __int16 *ctype_loc_style;
extern _DWORD _NLG_Destination[4]; // idb
extern const wctype_t *_pwctype;
extern type_info std::bad_exception__RTTI_Type_Descriptor_; // idb
extern int __flsindex; // weak
extern DWORD __getvalueindex; // idb
extern char _lookuptrailbytes[]; // weak
extern _UNKNOWN __badioinfo; // weak
extern int (*_cfltcvt_tab[10])(); // weak
extern int (*off_A862C4[9])(); // weak
extern int (*off_A862C8[8])(); // weak
extern int (*off_A862CC[7])(); // weak
extern int (*off_A862D0[6])(); // weak
extern int (*off_A862D4[5])(); // weak
extern PVOID Ptr; // idb
extern PVOID off_A862DC; // idb
extern PVOID off_A862E0; // idb
extern PVOID off_A862E4; // idb
extern char *__nullstring; // idb
extern wchar_t *__wnullstring; // weak
extern _UNKNOWN __initialmbcinfo; // weak
extern unsigned __int8 _mbctype[];
extern unsigned __int8 _mbcasemap[];
extern volatile LONG *___ptmbcinfo; // idb
extern char _rgctypeflag[4];
extern code_page_info _rgcode_page_info[5];
extern int __globallocalestatus; // weak
extern char __clocalestr[2]; // idb
extern char *__lc_time_c[43]; // weak
extern _UNKNOWN __initiallocinfo; // weak
extern wchar_t *off_A86A48; // weak
extern threadlocaleinfostruct *___ptlocinfo; // idb
extern void *__initiallocalestructinfo; // weak
extern LPCRITICAL_SECTION locktable;
extern __int32 _timezone;
extern int _daylight;
extern __int32 _dstbias;
extern char *_tzname[2];
extern transitiondate dststart;
extern transitiondate dstend;
extern int _lpdays; // weak
extern int dword_A86C70[]; // weak
extern int _days[]; // weak
extern unsigned int newcw;
extern unsigned int newcw_0;
extern double _d_inf; // weak
extern double _d_ind; // weak
extern double _d_max; // weak
extern double _d_mzero; // weak
extern int dword_A86CE0[]; // weak
extern _DWORD off_A86CE4[2]; // idb
extern int _DAZ_ENABLED;
extern char *_sys_errlist[];
extern int _sys_nerr;
extern unsigned int newcw_1;
extern char *ext_strings[4];
extern FpFormatDescriptor DoubleFormat;
extern FpFormatDescriptor FloatFormat;
extern _UNKNOWN _pow10pos; // weak
extern _UNKNOWN _pow10neg; // weak
extern int _matherr_flag; // weak
extern HANDLE _confh; // idb
extern int NiTAbstractPoolAllocator<NiActorManager::TimelineData>::ms_uiBlockSize; // weak
extern int NiPosKey::ms_iSampleSize; // weak
extern int NiBoneLODController::ms_iGlobalLOD; // idb
extern char *g_pcCurrentKFMVersion; // idb
extern float flt_A87F6C[]; // weak
extern float s_afModRoot[5];
extern float flt_A87FB4[]; // weak
extern float s_afModRoot_0[5];
extern char NiBlendInterpolator::ms_ucArrayGrowBy; // weak
extern int NiQuatTransform::INVALID_TRANSLATE; // weak
extern int dword_A88744; // weak
extern int dword_A88748; // weak
extern float NiInterpolator::INVALID_POINT3; // weak
extern float flt_A88750; // weak
extern float flt_A88754; // weak
extern float NiInterpolator::INVALID_COLORA; // weak
extern float flt_A8875C; // weak
extern float flt_A88760; // weak
extern float flt_A88764; // weak
extern float NiTriIntersect::ms_fEpsilon; // weak
extern char NiObjectNET::ms_cAppendCharacter; // weak
extern _UNKNOWN NiMatrix3::IDENTITY; // weak
extern volatile LONG NiMaterialProperty::ms_iNextIndex; // idb
extern NiPoint3 NiPoint3::UNIT_X; // idb
extern NiPoint3 NiPoint3::UNIT_Y; // idb
extern NiPoint3 NiPoint3::UNIT_Z; // idb
extern NiPoint3 NiPoint3::UNIT_ALL; // idb
extern int NiTAbstractPoolAllocator<unsigned_int>::ms_uiBlockSize; // weak
extern int NiColor::WHITE; // weak
extern int dword_A88D90; // weak
extern int dword_A88D94; // weak
extern int NiColorA::BLACK; // weak
extern int dword_A88D9C; // weak
extern int dword_A88DA0; // weak
extern int dword_A88DA4; // weak
extern NiColorA NiColorA::WHITE; // idb
extern volatile LONG NiDynamicEffect::ms_iNextIndex; // idb
extern char NiSourceTexture::ms_bPreload; // weak
extern NiTexture::FormatPrefs NiSourceTexture::ms_kDefaultPrefs; // idb
extern NiPixelFormat NiPixelFormat::PAL4; // idb
extern NiPixelFormat NiPixelFormat::PALA4; // idb
extern NiPixelFormat NiPixelFormat::PAL8; // idb
extern NiPixelFormat NiPixelFormat::PALA8; // idb
extern NiPixelFormat NiPixelFormat::RGBA32; // idb
extern NiPixelFormat NiPixelFormat::RGB24; // idb
extern NiPixelFormat NiPixelFormat::RGBA16; // idb
extern NiPixelFormat NiPixelFormat::BGRA16; // idb
extern NiPixelFormat NiPixelFormat::BUMP16; // idb
extern NiPixelFormat NiPixelFormat::BUMPLUMA32; // idb
extern NiPixelFormat NiPixelFormat::DXT1; // idb
extern NiPixelFormat NiPixelFormat::DXT3; // idb
extern NiPixelFormat NiPixelFormat::DXT5; // idb
extern NiPixelFormat NiPixelFormat::RGBA128; // idb
extern NiPixelFormat NiPixelFormat::RGBA64; // idb
extern NiPixelFormat NiPixelFormat::R32; // idb
extern NiPixelFormat NiPixelFormat::RG32; // idb
extern NiPixelFormat NiPixelFormat::RG64; // idb
extern NiPixelFormat NiPixelFormat::R16; // idb
extern NiPixelFormat NiPixelFormat::I8; // idb
extern NiPixelFormat NiPixelFormat::A8; // idb
extern _UNKNOWN NiPixelFormat::BGR233; // weak
extern _UNKNOWN NiPixelFormat::BGRA2338; // weak
extern NiPixelFormat NiPixelFormat::BGR555; // idb
extern NiPixelFormat NiPixelFormat::BGR565; // idb
extern NiPixelFormat NiPixelFormat::BGRA5551; // idb
extern _UNKNOWN NiPixelFormat::BGRX5551; // weak
extern NiPixelFormat NiPixelFormat::BGRA4444; // idb
extern _UNKNOWN NiPixelFormat::BGRX4444; // weak
extern _UNKNOWN NiPixelFormat::BGR888; // weak
extern NiPixelFormat NiPixelFormat::BGRA8888; // idb
extern NiPixelFormat NiPixelFormat::BGRX8888; // idb
extern _UNKNOWN NiPixelFormat::RGBX8888; // weak
extern _UNKNOWN NiPixelFormat::RGBA1010102; // weak
extern _UNKNOWN NiPixelFormat::BGRA1010102; // weak
extern _UNKNOWN NiPixelFormat::GR1616; // weak
extern NiPixelFormat NiPixelFormat::BUMPLUMA556; // idb
extern _UNKNOWN NiPixelFormat::PA88; // weak
extern _UNKNOWN NiPixelFormat::L8; // weak
extern _UNKNOWN NiPixelFormat::L16; // weak
extern _UNKNOWN NiPixelFormat::LA88; // weak
extern _UNKNOWN NiPixelFormat::LA44; // weak
extern _UNKNOWN NiPixelFormat::BUMPWQ8888; // weak
extern _UNKNOWN NiPixelFormat::BUMP1616; // weak
extern _UNKNOWN NiPixelFormat::BUMPW101111; // weak
extern _UNKNOWN NiPixelFormat::BUMPLUMAX8888; // weak
extern _UNKNOWN NiPixelFormat::RENDERERSPECIFICCOMPRESSED; // weak
extern _UNKNOWN NiPixelFormat::RENDERERSPECIFIC16; // weak
extern _UNKNOWN NiPixelFormat::RENDERERSPECIFIC32; // weak
extern _UNKNOWN NiPixelFormat::RENDERERSPECIFIC64; // weak
extern _UNKNOWN NiPixelFormat::DEPTH16; // weak
extern _UNKNOWN NiPixelFormat::DEPTH32; // weak
extern _UNKNOWN NiPixelFormat::STENCILDEPTH115; // weak
extern _UNKNOWN NiPixelFormat::STENCILDEPTH824; // weak
extern _UNKNOWN NiPixelFormat::XDEPTH824; // weak
extern _UNKNOWN NiPixelFormat::STENCILXDEPTH4424; // weak
extern NiTimeController::CycleType seLastCycle;
extern int NiLODNode::ms_iGlobalLOD; // weak
extern int (__cdecl *NiTexture::RendererData::ms_pfnTextureFailureCallback)(int pkTexture, int eFailure); // weak
extern int next[3];
extern int NiQuaternion::IDENTITY; // weak
extern int dword_A8A4C8; // weak
extern int dword_A8A4CC; // weak
extern int dword_A8A4D0; // weak
extern int NiStream::ms_uiNifMinVersion; // weak
extern int NiStream::ms_uiNifMaxVersion; // weak
extern __int16 NiGeometryData::ms_usNextID; // weak
extern int (__cdecl *NiProcessorSpecificCode::ms_pVectorsTransform[2])(__int16 uiVerts, int pModel, int pWorld, int pMatrix); // weak
extern int (__cdecl *NiProcessorSpecificCode::ms_pPointsTransform)(__int16 uiVerts, int pModel, int pWorld, int pXform); // weak
extern float NiBound::ms_fTolerance; // weak
extern __int16 NiTriStripsData::ms_usPickID; // weak
extern __int16 NiTriStripsData::ms_usPrevQuery; // weak
extern char *NiPSysEmitterCtlr::ms_pcBirthRate; // idb
extern char *NiPSysEmitterCtlr::ms_pcEmitterActive; // idb
extern NiColor NiPSysAirFieldModifier::m_ckUninitializePosition; // idb
extern int (__cdecl *NiMessageBox::ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD); // weak
extern bool bFirst;
extern int (*NiFile::ms_pfnFileCreateFunc)(void); // weak
extern int (*NiFile::ms_pfnFileAccessFunc)(void); // weak
extern int (__cdecl ***NiLogBehavior::ms_pkSingleton)(int, int tmpPath, int pkKeys, int uiNumKeys); // weak
extern char NiPortal::ms_bPortalEnable; // weak
extern char NiCommand::ms_acOptionNotFound[17]; // weak
extern char NiAppWindow::ms_acWindowClassName[]; // idb
extern int NiInputGamePad::ms_uiMaxAxes; // weak
extern int NiInputGamePad::ms_iDefaultAnalogThreshold; // weak
extern float NiInputGamePad::ms_fDefaultAnalogDeadZone; // weak
extern NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> g_kParsedShaderList; // idb
extern int yy_init;
extern int NSFParser_line_number;
extern unsigned int s_uiNumObjectSemantics;
extern NiD3DShaderConstantMap::PredefinedMapping s_akObjectSemantics[12];
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> NpModelData_NiTexturingProperty::ms_mapTextureProperty; // idb
extern char byte_A8D984; // weak
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> NpKMI_Tool::ms_mapPartsSIF; // idb
extern char byte_A8DAEC; // weak
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> NpModelData_KFM::ms_mapKFMTool; // idb
extern char byte_A8DC50; // weak
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> NpModelData_ActorM::ms_mapActorManager; // idb
extern char byte_A8DDD8; // weak
extern int nLevel;
extern bool NsFadeNode::ms_bIsFadeOn; // weak
extern float NsFadeNode::ms_fScreenRate; // weak
extern _UNKNOWN PgNsTerrain::ms_uiIndexList_1; // weak
extern _UNKNOWN PgNsTerrain::ms_uiIndexList_2; // weak
extern type_info boost::checked_deleter<PgNsTerrain::CPgBlockObject>__RTTI_Type_Descriptor_; // idb
extern char NsPathFinding::DirTbl[]; // weak
extern int NsPathFinding::XTbl[]; // weak
extern int NsPathFinding::YTbl[]; // weak
extern Wml::Vector3<double> Wml::Vector3<double>::ZERO; // idb
extern type_info *CPropertyType<int>::ms_rTypeInfo; // idb
extern type_info *CPropertyType<float>::ms_rTypeInfo; // idb
extern type_info *CPropertyType<unsigned_int>::ms_rTypeInfo; // idb
extern type_info CGlowScreenEffect__RTTI_Type_Descriptor_; // idb
extern type_info CDepthOfFieldEffect__RTTI_Type_Descriptor_; // idb
extern type_info CAfterImageEffect__RTTI_Type_Descriptor_; // idb
extern float CGlowScreenEffect::m_fGlowness; // weak
extern float CGlowScreenEffect::m_fBlendFactor; // weak
extern float CGlowScreenEffect::m_fGaussFactor; // weak
extern float CGlowScreenEffect::m_fDownScaling; // weak
extern int CGlowScreenEffect::m_unNumBlurring; // weak
extern int PgWin::ms_iScreenRightPos; // weak
extern int PgWin::ms_iScreenBottomPos; // weak
extern unsigned int PgWin::ms_uiScreenWidth; // idb
extern unsigned int PgWin::ms_uiScreenHeight; // idb
extern int PgWinMgr::ms_uiObjects; // weak
extern int PgWinMgr::ms_uiDepth; // weak
extern LPCSTR PgEditWin::ms_pcWindowClassName; // idb
extern char a02x[]; // idb
extern char aCC[]; // idb
extern char szFormat[]; // idb
extern int dword_A8F170[]; // weak
extern int dword_A8F570[]; // weak
extern int dword_A8F970[]; // weak
extern int dword_A8FD70[]; // weak
extern int (__stdcall **ATL::g_strmgr)(int nTotalSize, int nCharSize); // weak
extern unsigned int NiD3DPass::ms_uiMaxTextureBlendStages; // idb
extern unsigned int NiD3DPass::ms_uiMaxSimultaneousTextures; // weak
extern unsigned int NiD3DPass::ms_uiMaxSamplers; // weak
extern char *NiD3DShader::m_pcNDLShaderMapName; // idb
extern enum _D3DFORMAT *NiDX9DeviceDesc::DisplayFormatInfo::ms_aeDepthStencilFormats; // weak
extern NiTPointerList<unsigned int> NiDX9Renderer::ms_kDisplayFormats; // idb
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> NiDX9AdditionalDepthStencilBufferData::ms_kAddDepthStencil; // idb
extern char NiD3DUtility::ms_bLogEnabled; // weak
extern unsigned int NiD3DSCM_Vertex::ms_uiNumPredefinedMappings; // weak
extern unsigned int NiD3DSCM_Vertex::ms_uiNumObjectMappings; // weak
extern _UNKNOWN NiD3DSCM_Vertex::ms_akPredefinedMappings; // weak
extern _UNKNOWN NiD3DSCM_Vertex::ms_akObjectMappings; // weak
extern _UNKNOWN NiD3DShaderConstantMap::ms_vTaylorSin; // weak
extern _UNKNOWN NiD3DShaderConstantMap::ms_vTaylorCos; // weak
extern char *NiD3DShaderConstantMap::ms_pcTimeExtraDataName; // idb
extern char NiDX9ShaderDeclaration::ms_aeTypes[]; // weak
extern char NiDX9ShaderDeclaration::ms_aeMethods[]; // weak
extern char NiDX9ShaderDeclaration::ms_aeUsage[]; // weak
extern int NiD3DRenderState::ms_akInitialRenderStateSettings[]; // weak
extern int dword_A91B94[]; // weak
extern int dword_A91B98[]; // weak
extern int dword_A91B9C[]; // weak
extern int dword_A91BA0[]; // weak
extern int dword_A91BA4[]; // weak
extern int dword_A91BA8[]; // weak
extern int dword_A91BAC[]; // weak
extern int NiD3DRenderState::ms_akInitialTextureStageStateSettings; // weak
extern int NiD3DRenderState::ms_auiSamplesStateMappings[]; // weak
extern int NiDX9RenderState::ms_auiSamplesStatesRevMappings[]; // weak
extern int NiD3DRenderState::ms_akInitialSamplerStateSettings; // weak
extern int NiVBSet::ms_uiDefBlockAllocSize; // weak
extern int NiVBSet::ms_uiDefBlockSize; // weak
extern int NiVBSet::ms_uiDefFreeSpaceThreshold; // weak
extern int NiVBBlock::ms_uiDefClipAllocSize; // weak
extern char PacketEncrypt::pe_encryptstr[]; // weak
extern char msg[31];
extern char onebppswaptable[256];
extern char twobppswaptable[256];
extern char fourbppswaptable[256];
extern int NSBShader::ms_uiReadVersion; // weak
extern int (__cdecl *NSBShader::ms_pfnCreateNiBinaryShader)(_DWORD); // weak
extern unsigned int NiD3DSCM_Pixel::ms_uiNumMappings; // weak
extern _UNKNOWN NiD3DSCM_Pixel::ms_akPredefinedMappings; // weak
extern int ITableBase<TextDataType3_TextData3>::ms_pkTable; // weak
extern int ITableBase<TextDataType2_TextData2>::ms_pkTable; // weak
extern int ITableBase<ClassName_CharClass>::ms_pkTable; // weak
extern float CharCreateFrameWork::fToonLineSize; // weak
extern int ITableBase<TextDataType_TextData>::ms_pkTable; // weak
extern int ITableBase<HairInfo_HairInfoTab>::ms_pkTable; // weak
extern int ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable; // weak
extern int ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable; // weak
extern int ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable; // weak
extern char *apcSexText[2];
extern NiRTTI CharCreateFrameWork::m_RTTI; // idb
extern NiRTTI CharSelectFrameWork::m_RTTI; // idb
extern int CharSelectFrameWork::ui_currentFairyPos; // weak
extern char CharSelectFrameWork::bIsActiveMotion; // weak
extern bool CharSelectFrameWork::m_bLoadShortCutDataOption; // weak
extern bool CharSelectFrameWork::m_bLoadShortCutSizeOption; // weak
extern bool CharSelectFrameWork::m_bLoadWindowsPosOption; // weak
extern unsigned int CharSelectFrameWork::uiActiveCode; // idb
extern float CharSelectFrameWork::fToonLineSize; // weak
extern bool CharSelectFrameWork::m_bLoadKeyMappingOption; // weak
extern bool CharSelectFrameWork::m_bLoadNewKeyMapOption; // weak
extern bool CharSelectFrameWork::m_bLoadGameSystemOption; // weak
extern bool CharSelectFrameWork::ms_bLoadKeyMappingOptionSuccess; // weak
extern bool CharSelectFrameWork::ms_bLoadShortCutSizeOptionSuccess; // weak
extern bool CharSelectFrameWork::ms_bLoadWindowsPosOptionSuccess; // weak
extern bool CharSelectFrameWork::ms_bLoadGameSystemOptionSuccess; // weak
extern bool CharSelectFrameWork::ms_bNewCharCreat; // weak
extern bool CharSelectFrameWork::ms_bGetPrisonInfo; // weak
extern bool CharSelectFrameWork::ms_bStateIsPrison; // weak
extern bool CharSelectFrameWork::ms_bFirstRun; // weak
extern unsigned __int32 CharSelectFrameWork::ms_dPrisonTimeMinute; // weak
extern int ITableBase<ChatColor_ChatColorTab>::ms_pkTable; // weak
extern int ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable; // weak
extern INpShader *Engine3D::ms_spCarToon; // idb
extern NsPgToonExtraData *Engine3D::ms_spToonExtraData; // idb
extern char Folder::m_acLuaScript; // idb
extern char Folder::m_acSkin; // idb
extern char Folder::m_acMerge; // idb
extern char Folder::m_acMHMap[]; // weak
extern char Folder::m_acMHObj; // idb
extern char Folder::m_acFileName[]; // weak
extern char Folder::m_acCtrl; // idb
extern char Folder::m_acSystem; // idb
extern char Folder::m_acCharacter; // idb
extern char Folder::m_acItem[]; // weak
extern char Folder::m_acEffect; // idb
extern char Folder::m_acSound; // idb
extern char Folder::m_acMap[]; // weak
extern char Folder::m_acMenu; // idb
extern char Folder::m_acMain; // idb
extern char Folder::m_bInit; // weak
extern char Font::ms_acFontFaceName[256]; // idb
extern char Font::ms_acUserFont[256]; // idb
extern char Font::ms_bShineFontLoadFailed; // weak
extern char Font::ms_bUserFontLoadSuccess; // weak
extern char Font::ms_bInit; // weak
extern int Font::ms_kFontDefine[]; // weak
extern _UNKNOWN unk_A95630; // weak
extern int dword_A95648[]; // weak
extern int dword_A9565C; // weak
extern int dword_A95664; // weak
extern int dword_A9567C; // weak
extern _UNKNOWN unk_A95690; // weak
extern _UNKNOWN unk_A956C4; // weak
extern _UNKNOWN unk_A956F8; // weak
extern _UNKNOWN unk_A9572C; // weak
extern _UNKNOWN unk_A95760; // weak
extern int dword_A95784; // weak
extern _UNKNOWN unk_A95794; // weak
extern _UNKNOWN unk_A957C8; // weak
extern int dword_A957EC; // weak
extern _UNKNOWN unk_A957FC; // weak
extern int dword_A95820; // weak
extern _UNKNOWN unk_A95830; // weak
extern _UNKNOWN unk_A95864; // weak
extern int Font::ms_spFont[]; // weak
extern int ITableBase<FontSet_FontSetTab>::ms_pkTable; // weak
extern int _local_static_guard_; // weak
extern ItemMixDataTab g_kItemMixDataTab; // idb
extern ItemMixData stru_A958D4; // idb
extern std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s ItemViewDummyTab::m_DummyMap; // idb
extern std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons stru_A95928; // idb
extern void *unk_A95934; // idb
extern _UNKNOWN unk_A95938; // weak
extern _UNKNOWN unk_A9593C; // weak
extern int ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable; // weak
extern float Singleton<LuaScriptMgr>::m_pInstance; // idb
extern char Singleton<LuaScriptMgr>::m_bDestroy; // weak
extern int MenuTexMgr::ms_aspTexture[]; // weak
extern int ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable; // weak
extern int ITableBase<MoverMain_MoverMainTab>::ms_pkTable; // weak
extern int ITableBase<MoverHG_MoverHGTab>::ms_pkTable; // weak
extern int ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable; // weak
extern int ITableBase<PupMain_PetMainTab>::ms_pkTable; // weak
extern int ITableBase<PupView_PetViewTab>::ms_pkTable; // weak
extern int ITableBase<MapInfo_MapInfoTab>::ms_pkTable; // weak
extern unsigned int PuzzleTimeWin::m_second; // weak
extern int ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable; // weak
extern int SteamCallback::This; // weak
extern bool ATL::CAtlBaseModule::m_bInitFailed; // weak
extern char SteamConfig::m_bRunning; // weak
extern int ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable; // weak
extern int ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable; // weak
extern void *TextData::ms_apkNode; // idb
extern void *TextData2::ms_apkNode; // idb
extern void *TextData3::ms_apkNode; // idb
extern bool acRemoveFilter[256];
extern bool bFilterTableInited;
extern char acTemp[512];
extern int ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable; // weak
extern int ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable; // weak
extern int ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable; // weak
extern int ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern bool s_bInit;
extern TextFilterSet s_kTextFilterSet;
extern _UNKNOWN unk_A95D4C; // weak
extern _UNKNOWN unk_A95D50; // weak
extern _UNKNOWN unk_A95D54; // weak
extern ProcessingString stru_A95D58; // idb
extern unsigned int _S3;
extern TextFilterSet s_kTextFilterSet_0;
extern unsigned int _S4;
extern char s_acCapitalizedName[128];
extern bool s_bBadNameLoaded;
extern bool s_bInit_1;
extern std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > TextFilterTable::ms_listBlockedID; // idb
extern TextScreenEffect *Singleton<TextScreenEffect>::m_pInstance; // idb
extern char Singleton<TextScreenEffect>::m_bDestroy; // weak
extern LARGE_INTEGER Timer::ms_StartQPC; // idb
extern _UNKNOWN Timer::ms_dLastServerTime; // weak
extern float Timer::ms_fCurTime; // weak
extern float Timer::ms_fDeltaTime; // weak
extern float Timer::ms_fOldTime; // weak
extern float Timer::ms_fLastRecordServerTime; // weak
extern char Timer::ms_cTimeZone; // weak
extern Tutorial *Singleton<Tutorial>::m_pInstance; // idb
extern char Singleton<Tutorial>::m_bDestroy; // weak
extern int EditWin::ms_uiCaretBlinkTime; // weak
extern PgWin *EditWin::ms_pkCurEditWin; // idb
extern NiRTTI MaskShader::m_RTTI; // idb
extern int MaskShader::m_spShader; // weak
extern int MaskShader::m_spNoAlphaBlendShader; // weak
extern NiRTTI MaskShader_NoAlphaBlend::m_RTTI; // idb
extern bool MsgBox::m_bOkCheck; // weak
extern PgCursor *Cursor::ms_spGraphicCursor; // idb
extern _UNKNOWN Cursor::ms_akHWCurRes; // weak
extern _UNKNOWN unk_A9768C; // weak
extern int dword_A97690[]; // weak
extern int dword_A97694[]; // weak
extern char Cursor::ms_bDeviceSupportHWCursor; // weak
extern char Cursor::ms_bDropContentsExist; // weak
extern char Cursor::ms_bInvalidateDropIcon; // weak
extern Studio *Cursor::ms_pkStudio; // idb
extern IDirect3DSurface9 *Cursor::ms_pkDropIconSurface; // idb
extern int Cursor::ms_pkDropIconSurfaceTemp; // weak
extern PgWin *Cursor::m_pkSlotWin; // idb
extern NiPointer<NiD3DDefaultShader> Cursor::ms_spDropIconTexture; // idb
extern NiPointer<NiD3DDefaultShader> Cursor::ms_spCursorRenderCamera; // idb
extern NiPointer<NiD3DDefaultShader> Cursor::ms_spCursorFrame; // idb
extern int Singleton<CursorState>::m_pInstance; // weak
extern char Singleton<CursorState>::m_bDestroy; // weak
extern char g_acLogFilePath[260];
extern char acTempStr[1024];
extern void *MainApp::st_pbyDummyMemory; // idb
extern int MainApp::ms_pkMainApp; // weak
extern unsigned __int32 g_ProcessID; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern char ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[]; // idb
extern int ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable; // weak
extern int ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable; // weak
extern int ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable; // weak
extern int ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable; // weak
extern int ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable; // weak
extern int ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable; // weak
extern int ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable; // weak
extern int ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable; // weak
extern int ITableBase<UpEffectData_UpEffectTab>::ms_pkTable; // weak
extern int ITableBase<RaceName_CharRace>::ms_pkTable; // weak
extern int ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable; // weak
extern int ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable; // weak
extern int ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable; // weak
extern int ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable; // weak
extern int ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable; // weak
extern int ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable; // weak
extern int ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable; // weak
extern int ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable; // weak
extern int ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable; // weak
extern int ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable; // weak
extern int ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable; // weak
extern int ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable; // weak
extern NiStringExtraData *ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable; // idb
extern int ITableBase<SetItemName_SetItemNameTab>::ms_pkTable; // weak
extern int ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable; // weak
extern int ITableBase<SetEffect_SetEffectTab>::ms_pkTable; // weak
extern int ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable; // weak
extern int ITableBase<ItemAction_ItemActionTab>::ms_pkTable; // weak
extern int ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable; // weak
extern int ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable; // weak
extern int ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable; // weak
extern int ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable; // weak
extern int ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable; // weak
extern int ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable; // weak
extern int ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable; // weak
extern int ITableBase<GBHouse_GBHouseTab>::ms_pkTable; // weak
extern int ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable; // weak
extern int ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable; // weak
extern int ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable; // weak
extern int ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable; // weak
extern int ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable; // weak
extern int ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable; // weak
extern int ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable; // weak
extern int ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable; // weak
extern int ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable; // weak
extern int ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable; // weak
extern int ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable; // weak
extern int ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable; // weak
extern int ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable; // weak
extern int ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable; // weak
extern int ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable; // weak
extern int ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable; // weak
extern int ITableBase<CollectCard_CollectCardTab>::ms_pkTable; // weak
extern int ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable; // weak
extern int ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable; // weak
extern int ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable; // weak
extern int ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable; // weak
extern int ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable; // weak
extern int ITableBase<MoverView_MoverViewTab>::ms_pkTable; // weak
extern int ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable; // weak
extern int ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable; // weak
extern int ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable; // weak
extern int ITableBase<MoverItem_MoverItemTab>::ms_pkTable; // weak
extern int ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable; // weak
extern int ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable; // weak
extern int ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable; // weak
extern int ITableBase<KQTeam_KQTeamTable>::ms_pkTable; // weak
extern int ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable; // weak
extern int ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable; // weak
extern int ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable; // weak
extern int ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable; // weak
extern int ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable; // weak
extern int ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable; // weak
extern int ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable; // weak
extern int ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable; // weak
extern int ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable; // weak
extern int ITableBase<MobInfo_MobInfoTab>::ms_pkTable; // weak
extern int ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable; // weak
extern int ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable; // weak
extern int ITableBase<RIDING_RidePetTable>::ms_pkTable; // weak
extern int ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable; // weak
extern int ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable; // weak
extern int ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable; // weak
extern int ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable; // weak
extern int ITableBase<AttendReward_AttendRewardTab>::ms_pkTable; // weak
extern int ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable; // weak
extern int ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable; // weak
extern int ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable; // weak
extern int ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable; // weak
extern int ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable; // weak
extern GameFrameWork *ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable; // idb
extern int ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable; // weak
extern int ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable; // weak
extern bool ms_b32BitZBuffer;
extern const void *ms_pkMode;
extern NiDX9DeviceDesc *ms_pkDevice;
extern NiDX9AdapterDesc *ms_pkAdapter;
extern NiDX9SystemDesc *ms_pkInfo;
extern bool ms_bFullscreen;
extern unsigned int _S3_0;
extern bool m_bMinimize;
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern CSingleDataMap g_kSingleDataMap; // idb
extern HINSTANCE g_hMainInstance; // idb
extern HWND g_hMainWnd; // idb
extern int g_pkKeyboard; // weak
extern int g_pkMouse; // weak
extern void *AccountFrameWorkID; // idb
extern void *LoginWorldNetFrameWorkID; // idb
extern void *ZoneLoginNetFrameWorkID; // idb
extern void *CharSelectFrameWorkID; // idb
extern void *CharCreateFrameWorkID; // idb
extern void *LoadingFrameWorkID; // idb
extern void *GameFrameWorkID; // idb
extern void *LinkFrameWorkID; // idb
extern void *CHairShopFrameWorkID; // idb
extern NiParticleSDM NiParticleSDMObject;
extern NiMilesAudioSDM NiMilesAudioSDMObject;
extern NiPortalSDM NiPortalSDMObject;
extern int NiStepFloatKeyregisterloaderreturn;
extern int NiBoolKeyregisterloaderreturn;
extern int NiStepColorKeyregisterloaderreturn;
extern int NiTCBPosKeyregisterloaderreturn;
extern int NiStepPosKeyregisterloaderreturn;
extern int NiTCBFloatKeyregisterloaderreturn;
extern int NiLinPosKeyregisterloaderreturn;
extern int NiBezRotKeyregisterloaderreturn;
extern int NiEulerRotKeyregisterloaderreturn;
extern int NiStepBoolKeyregisterloaderreturn;
extern int NiTCBRotKeyregisterloaderreturn;
extern int NiColorKeyregisterloaderreturn;
extern int NiRotKeyregisterloaderreturn;
extern int NiLinFloatKeyregisterloaderreturn;
extern int NiStepRotKeyregisterloaderreturn;
extern int NiBezPosKeyregisterloaderreturn;
extern NiCollisionSDM NiCollisionSDMObject;
extern NiAnimationSDM NiAnimationSDMObject;
extern int NiBezFloatKeyregisterloaderreturn;
extern int NiFloatKeyregisterloaderreturn;
extern int NiLinRotKeyregisterloaderreturn;
extern int NiPosKeyregisterloaderreturn;
extern int NiLinColorKeyregisterloaderreturn;
extern boost::singleton_pool<boost::fast_pool_allocator_tag,28,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>::pool_type obj;
extern int _local_static_guard_; // weak
extern CRTTI CRTTIClass<CWorldConfig_CBaseObject>::ms_RTTI; // idb
extern _UNKNOWN unk_A9823C; // weak
extern _UNKNOWN unk_A98240; // weak
extern std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai unk_A9824C; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba Last; // idb
extern CRTTI CRTTIClass<CBaseObject_CNullClass>::ms_RTTI; // idb
extern _UNKNOWN unk_A98270; // weak
extern _UNKNOWN unk_A98274; // weak
extern std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai unk_A98280; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba stru_A98284; // idb
extern bool AccountFrameWork::ms_bWindowSizeChanged; // weak
extern int _Stinit;
extern int std::_Facetptr<std::ctype<char>>::_Psave; // weak
extern int std::_Facetptr<std::codecvt<char_char_int>>::_Psave; // weak
extern int std::codecvt<char_char_int>::id; // weak
extern char AccountFrameWork::ms_bSecondStart; // weak
extern NiRTTI AccountFrameWork::m_RTTI; // idb
extern NiDX9AdapterDesc *ms_pkAdapter_0;
extern NiDX9SystemDesc *ms_pkInfo_0;
extern unsigned int dwPrevTime;
extern unsigned int _S3_1;
extern NiRTTI LoginWorldNetFrameWork::m_RTTI; // idb
extern bool CharSelectFrameWork::ms_bShortCutDataLoaded; // weak
extern NiRTTI ZoneLoginNetFrameWork::m_RTTI; // idb
extern TutorialMgr kTutorialMgr;
extern int _local_static_guard_; // weak
extern ScenarioMgr kScenarioMgr;
extern int _local_static_guard_; // weak
extern int ms_pkTestWin2; // weak
extern PgWin *ms_pkTestWin; // idb
extern char acTempStr[1024];
extern int ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable; // weak
extern NiDX9AdapterDesc *ms_pkAdapter_1;
extern NiDX9SystemDesc *ms_pkInfo_1;
extern char byte_A9872C; // weak
extern int dword_A98730; // idb
extern int dword_A98734; // idb
extern int dword_A98738; // weak
extern bool GameFrameWork::_isCheating; // weak
extern unsigned int dwPrevTimeWhenHouseChanged;
extern unsigned int s_nSelNum;
extern int ISingletonTask<GuildJoinReqTask>::ms_pkSingletonTask; // weak
extern void *m_kAttackedList; // idb
extern int dword_A98760; // weak
extern int ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable; // weak
extern unsigned int dwLastSendTime;
extern unsigned int dwPrevTimeWhenHouseChanged_0;
extern int ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable; // weak
extern float unCheckTimer;
extern unsigned int _S3_2;
extern float unCheckTimer_0;
extern unsigned int _S4_0;
extern int ISingletonTask<ItemUseTask>::ms_pkSingletonTask; // weak
extern EffectObjectMgr kEffectObjectMgr;
extern std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > unk_A98790; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_A98794; // idb
extern int dword_A98798; // weak
extern int _local_static_guard_; // weak
extern AreaInfoMgr kMgr;
extern int _local_static_guard_; // weak
extern unsigned int dwSinceSkillActive;
extern unsigned int _S3_3;
extern bool GameFrameWork::ms_bRendererRecreated; // weak
extern bool GameFrameWork::ms_bWindowSizeChanged; // weak
extern char GameFrameWork::ms_bRecreatingDisplay; // weak
extern bool GameFrameWork::ms_bGameFrameStart; // weak
extern unsigned int GameFrameWork::ms_uiFirstCreateDevice; // weak
extern bool GameFrameWork::ms_bSpawnApps; // weak
extern bool GameFrameWork::ms_bFirstRun; // weak
extern NiRTTI GameFrameWork::m_RTTI; // idb
extern Name5 GameFrameWork::m_kWhisperCharID; // idb
extern char AnnounceWin::m_bNoticing; // weak
extern bool EffStart;
extern NiPoint3 aVerTex[15];
extern unsigned int _S3_4;
extern bool EnchantGemWin::ms_bSend2EndOfTrade; // weak
extern int std::_Facetptr<std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>>::_Psave; // weak
extern int std::_Facetptr<std::numpunct<char>>::_Psave; // weak
extern bool bSTotalMember;
extern bool bSGuildGrade;
extern bool bSGuildType;
extern bool bSMasterName;
extern bool bSGuildName;
extern int std::numpunct<char>::id; // weak
extern int std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::id; // weak
extern unsigned int IDTimeWin::m_second; // weak
extern ITEM_INVEN InventoryWin::ms_kTo; // idb
extern ITEM_INVEN InventoryWin::ms_kFrom; // idb
extern int InventoryWin::ms_uiMode; // weak
extern NiRTTI InvWin::m_RTTI; // idb
extern int ISingletonTask<ChargedItemUseTask>::ms_pkSingletonTask; // weak
extern ItemInfoWin *g_pkItemInfoWin; // idb
extern char acStr[64];
extern char resultKeyName[256];
extern __int64 MoneyWin::i64Money; // idb
extern int ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable; // weak
extern char PopupMenuTemplate::ms_acCharName[256]; // idb
extern char *PopupMenuTemplate::ms_acChoiceMapNameSlot4; // weak
extern char *PopupMenuTemplate::ms_acChoiceMapNameSlot3; // weak
extern char *PopupMenuTemplate::ms_acChoiceMapNameSlot2; // weak
extern char *PopupMenuTemplate::ms_acChoiceMapNameSlot1; // weak
extern char *PopupMenuTemplate::ms_acChoiceMapNameSlot0; // weak
extern unsigned int PopupMenuTemplate::ms_spProposeTradeMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spInvitePartyMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spCancelMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spDelegatePartyMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spQuitPartyMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spFirePartyMemberMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spInviteGuildMenu; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spPartyLootSetupMenu; // idb
extern int PopupMenuTemplate::ms_spFollowCharMenu; // weak
extern PopupMenuWin *PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin; // idb
extern unsigned int PopupMenuTemplate::ms_spMainCharUnMetamorphosis; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu0; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu1; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu2; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu3; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu4; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu5; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu6; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu7; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu8; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu9; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu10; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu11; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu12; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu13; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu14; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu15; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu16; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu17; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu18; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spResolutionMenu19; // idb
extern unsigned int PopupMenuTemplate::ms_spWhisper; // idb
extern int PopupMenuTemplate::ms_spTargetCharName; // weak
extern unsigned int PopupMenuTemplate::ms_spHighHolyPromise; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPlaceMemory0; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPlaceMemory1; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPlaceMemory2; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPlaceMemory3; // idb
extern NiPointer<NiD3DDefaultShader> PopupMenuTemplate::ms_spPlaceMemory4; // idb
extern unsigned int PopupMenuTemplate::ms_spConfigRoom; // idb
extern int PopupMenuTemplate::ms_spShowBlog; // weak
extern int PopupMenuTemplate::ms_spChangeBlogAddr; // weak
extern int PopupMenuTemplate::ms_spKickGuest; // weak
extern int PopupMenuTemplate::ms_spSetArrModeOn; // weak
extern int PopupMenuTemplate::ms_spSetArrModeOff; // weak
extern int PopupMenuTemplate::ms_spReturnToInvMHItem; // weak
extern int PopupMenuTemplate::ms_spArrToInvMHItem; // weak
extern int PopupMenuTemplate::ms_spDeleteMHItem; // weak
extern int PopupMenuTemplate::ms_spObjAction; // weak
extern int PopupMenuTemplate::ms_spObjName; // weak
extern int PopupMenuTemplate::ms_spMHObjEndure; // weak
extern int PopupMenuTemplate::ms_spMHObjEndurePercentage; // weak
extern int PopupMenuTemplate::m_spReArrange; // weak
extern int PopupMenuTemplate::m_spSelectCancel; // weak
extern unsigned int PopupMenuTemplate::ms_spBuffUIMenu; // idb
extern unsigned int PopupMenuTemplate::ms_spRaidSelect; // idb
extern unsigned int PopupMenuTemplate::ms_spRaidInvite; // idb
extern unsigned int PopupMenuTemplate::ms_spRaidVanish; // idb
extern unsigned int PopupMenuTemplate::ms_spRaidLeave; // idb
extern unsigned int PopupMenuTemplate::ms_spChangeRaidLeader; // idb
extern unsigned int PopupMenuTemplate::ms_spChangeRaidLooter; // idb
extern unsigned int PopupMenuTemplate::ms_spRaidSubLeaderUp; // idb
extern unsigned int PopupMenuTemplate::ms_spRaidSubLeaderDown; // idb
extern unsigned int PopupMenuTemplate::ms_spCollectOpen; // idb
extern unsigned int PopupMenuTemplate::ms_spInviteFriend; // idb
extern unsigned int PopupMenuTemplate::ms_spRideOn; // idb
extern unsigned int PopupMenuTemplate::ms_spVote; // idb
extern unsigned int PrisonTimeWin::m_second; // weak
extern unsigned __int16 PrivateStoreWin::ms_BoothHandle; // weak
extern bool PrivateStoreWin::ms_bPrivateStoreWin; // weak
extern unsigned __int16 ProductionWin::ms_kCurrProduceBaseSkillID; // weak
extern bool s_bInit_2;
extern TextFilterSet s_kTextFilterSet_1;
extern _UNKNOWN unk_A9916C; // weak
extern _UNKNOWN unk_A99170; // weak
extern _UNKNOWN unk_A99174; // weak
extern ProcessingString stru_A99178; // idb
extern unsigned int _S3_5;
extern char ShortCutWin::ms_bShortCutSizeFinish; // weak
extern unsigned int ShortCutWin::m_uiShortcutSubWinIndex; // weak
extern PgWin *g_pkSkillInfoWin; // idb
extern char acStr_0[64];
extern PgWin *g_pkSoulStoneInfoWin; // idb
extern int StorageWin::ms_kFrom; // weak
extern PgWin *g_pkToolTipWin; // idb
extern NiPoint2 kAvatarPosition;
extern int _local_static_guard_; // weak
extern NiPointer<NiD3DDefaultShader> IconWin::ms_spOverGeom; // idb
extern NiPointer<NiD3DDefaultShader> IconWin::ms_spClickGeom; // idb
extern std::vector<unsigned long,std::allocator<unsigned long> > IconWin::ms_kCoolTimeIconList; // idb
extern int ISingletonTask<GuildLeaveTask>::ms_pkSingletonTask; // weak
extern int ISingletonTask<GuildNotifyTask>::ms_pkSingletonTask; // weak
extern int ISingletonTask<GuildDismissTask>::ms_pkSingletonTask; // weak
extern char s_acTimeStr[64];
extern char acStr_1[17];
extern int ISingletonTask<GuildMemberVanishTask>::ms_pkSingletonTask; // weak
extern int ISingletonTask<GuildMemberGradeSetupTask>::ms_pkSingletonTask; // weak
extern int ISingletonTask<GuildAcademyMasterAppointTask>::ms_pkSingletonTask; // weak
extern int ISingletonTask<GuildAcademyMasterInitializeTask>::ms_pkSingletonTask; // weak
extern bool bTitle07;
extern bool bTitle06;
extern bool bTitle05;
extern bool bTitle04;
extern bool bTitle03;
extern bool bTitle02;
extern bool bTitle01;
extern bool bSTotalMember_0;
extern bool bSGuildGrade_0;
extern bool bSGuildType_0;
extern bool bSMasterName_0;
extern bool bSGuildName_0;
extern ITEM_INVEN GuildTournamentStorageWin::ms_kTo; // idb
extern ITEM_INVEN GuildTournamentStorageWin::ms_kFrom; // idb
extern bool ChatBoardFlex::ms_bClickLog; // weak
extern int iZPos;
extern int iYPos;
extern int iXPos;
extern bool bIsMove;
extern bool bSortByTltle;
extern bool bSortByUserCnt;
extern bool bSortByStarttime;
extern bool bSortByState;
extern unsigned int KQuestTimeWin::m_second; // weak
extern unsigned int *DlgQuestListWin::QuestNameList::ms_TypePriority; // weak
extern int dword_A99E9C; // weak
extern int dword_A99EA0; // weak
extern int dword_A99EA4; // weak
extern int dword_A99EA8; // weak
extern int dword_A99EAC; // weak
extern int dword_A99EB0; // weak
extern int dword_A99EB4; // weak
extern int dword_A99EB8; // weak
extern int dword_A99EBC; // weak
extern int dword_A99EC0; // weak
extern unsigned int *DlgQuestListWin::QuestNameList::ms_StatusPriority; // weak
extern int dword_A99ECC; // weak
extern int dword_A99ED0; // weak
extern int dword_A99ED4; // weak
extern int dword_A99ED8; // weak
extern int dword_A99EDC; // weak
extern int dword_A99EE0; // weak
extern int dword_A99EE4; // weak
extern int dword_A99EE8; // weak
extern int dword_A99EEC; // weak
extern int dword_A99EF0; // weak
extern int dword_A99EF4; // weak
extern int dword_A99EF8; // weak
extern int dword_A99EFC; // weak
extern int dword_A99F00; // weak
extern int dword_A99F04; // weak
extern int dword_A99F08; // weak
extern int dword_A99F0C; // weak
extern int dword_A99F10; // weak
extern int dword_A99F14; // weak
extern int dword_A99F18; // weak
extern char acText[2048];
extern char acText_0[64];
extern bool QuestPigeonEffect::ms_bGameStart; // weak
extern NiRTTI QuestPigeonEffect::m_RTTI; // idb
extern bool CQuestWin2::ms_bUpdate; // weak
extern __int64 Bank::ms_i64Money; // weak
extern char Bank::ms_byTotalBankPage; // weak
extern char Bank::ms_aspInv[2304]; // idb
extern std::_Tree<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > Bank::ms_mapExtraInv; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_A9B084; // idb
extern __int64 GuildTournamentStorage::ms_i64Money; // weak
extern __int64 GuildTournamentStorage::ms_uiToken; // weak
extern int GuildTournamentStorage::ms_aspInv[]; // weak
extern int MapNavigator::ms_spMapNavigatorTask; // weak
extern int Market::ms_kSoulStone; // weak
extern int dword_A9B13C; // weak
extern int dword_A9B140; // weak
extern int dword_A9B144; // weak
extern int dword_A9B148; // weak
extern int dword_A9B14C; // weak
extern int Market::ms_uiTotalWeapontitleItem; // weak
extern int Market::ms_uiTotalEnchantItem; // weak
extern _UNKNOWN Market::ms_akProdSkill; // weak
extern int Market::ms_uiTotalProdSkill; // weak
extern int Market::ms_uiTotalSenActiveSkill; // weak
extern _UNKNOWN Market::ms_akWeapontitleItems; // weak
extern _UNKNOWN Market::ms_akEnchantItems; // weak
extern _UNKNOWN Market::ms_akSenPasSkill; // weak
extern _UNKNOWN Market::ms_akSenActSkill; // weak
extern _UNKNOWN Market::ms_akJokPasSkill; // weak
extern _UNKNOWN Market::ms_akJokActSkill; // weak
extern _UNKNOWN Market::ms_akMagActSkill; // weak
extern _UNKNOWN Market::ms_akArcActSkill; // weak
extern _UNKNOWN Market::ms_akCleActSkill; // weak
extern _UNKNOWN Market::ms_akFigActSkill; // weak
extern _UNKNOWN Market::ms_akMagPasSkill; // weak
extern _UNKNOWN Market::ms_akArcPasSkill; // weak
extern _UNKNOWN Market::ms_akClePasSkill; // weak
extern _UNKNOWN Market::ms_akFigPasSkill; // weak
extern int Market::ms_uiTotalSenPassiveSkill; // weak
extern int Market::ms_uiTotalJokActiveSkill; // weak
extern int Market::ms_uiTotalJokPassiveSkill; // weak
extern int Market::ms_uiTotalMagActiveSkill; // weak
extern int Market::ms_uiTotalMagPassiveSkill; // weak
extern int Market::ms_uiTotalArcActiveSkill; // weak
extern int Market::ms_uiTotalArcPassiveSkill; // weak
extern int Market::ms_uiTotalCleActiveSkill; // weak
extern int Market::ms_uiTotalClePassiveSkill; // weak
extern int Market::ms_uiTotalFigActiveSkill; // weak
extern int Market::ms_uiTotalFigPassiveSkill; // weak
extern int Market::ms_uiTotalRepurchase; // weak
extern int Market::ms_akRepurchase[]; // weak
extern __int16 word_A9D4BC[]; // weak
extern _UNKNOWN unk_A9D4C0; // weak
extern _UNKNOWN unk_A9D60C; // weak
extern _UNKNOWN Market::ms_akAcc; // weak
extern __int16 word_A9DAF9; // weak
extern _UNKNOWN Market::ms_akArmor; // weak
extern __int16 word_A9DD51; // weak
extern _UNKNOWN Market::ms_akWeapon; // weak
extern __int16 word_A9DFA9; // weak
extern int Market::ms_uiTotalAcc; // weak
extern int Market::ms_uiTotalArmor; // weak
extern int Market::ms_uiTotalWeapon; // weak
extern float fLastSend;
extern unsigned int _S3_6;
extern ShortCutMgr g_kShortCutMgr; // idb
extern ShortCutItem *unk_A9E21C; // idb
extern zlibUtil2 stru_AA1404; // idb
extern void *unk_AA2454; // idb
extern _UNKNOWN unk_AA2458; // weak
extern _UNKNOWN unk_AA245C; // weak
extern int UserTrade::ms_auiInventoryIndex[]; // weak
extern char UserTrade::ms_bOppLock; // weak
extern char UserTrade::ms_bMyLock; // weak
extern char UserTrade::ms_bOppAgree; // weak
extern char UserTrade::ms_bProposing; // weak
extern char UserTrade::ms_bTrading; // weak
extern int UserTrade::ms_aspOppInv[]; // weak
extern int UserTrade::ms_aspMyInv[]; // weak
extern HBRUSH GuildBD::ms_hEraseBrush; // idb
extern HGDIOBJ GuildBD::ms_hFont; // idb
extern int GuildBD::ms_spTempTexture; // weak
extern HBRUSH NameBD::ms_hEraseBrush; // idb
extern HGDIOBJ NameBD::ms_hFont; // idb
extern int g_ClickedMiniHouseBD; // weak
extern NameBD *g_ClickedNameBD; // idb
extern int NameBD::ms_spTempTexture; // weak
extern HBRUSH PrivateStoreBD::ms_hEraseBrush; // idb
extern HGDIOBJ PrivateStoreBD::ms_hFont; // idb
extern PrivateStoreBD *g_ClickedPrivateStoreBD; // idb
extern int PrivateStoreBD::ms_spTempTexture; // weak
extern ScreenBDMgr g_kScrnBDMgr; // idb
extern NiPointer<NiD3DDefaultShader> ScreenBoardTexture::sm_spSrcTexture; // idb
extern NiPointer<NiD3DDefaultShader> ScreenBoardTexture::sm_spShadowSrcTexture; // idb
extern HGDIOBJ SpeechBD::ms_hEraseBrush; // idb
extern HGDIOBJ SpeechBD::ms_hFont; // idb
extern int SpeechBD::ms_spTempTexture; // weak
extern NiRTTI LinkFrameWork::m_RTTI; // idb
extern bool LoadingFrameWork::ms_bLoadDataComplete; // weak
extern NiRTTI LoadingFrameWork::m_RTTI; // idb
extern float ITimer::ms_fCurrTime; // weak
extern float CHairShopFrameWork::fToonLineSize; // weak
extern NiRTTI CHairShopFrameWork::m_RTTI; // idb
extern unsigned int dwTimer;
extern int g_pkMouseOvereMob; // weak
extern float Char::ms_fDefaultWalkSpeed; // weak
extern float Char::ms_fDefaultRunSpeed; // weak
extern CCharacterTitleData g_characterTitleData; // idb
extern CarToonShader shader;
extern unsigned int _S3_7;
extern CharMgr g_kCharMgr; // idb
extern std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > stru_AA27D0; // idb
extern float fTime; // idb
extern _UNKNOWN unk_AA27FC; // weak
extern _UNKNOWN unk_AA2800; // weak
extern _UNKNOWN unk_AA2801; // weak
extern CNSTimer_Interval stru_AA2804; // idb
extern CharResMgr g_kCharResMgr; // idb
extern Char *g_pkMainChar; // idb
extern NiPoint2 aPos2Arr;
extern unsigned int _S3_8;
extern bool b_sMainCharPause;
extern Studio *PortraitTextureBuffer::ms_pkMainCharStillCut; // idb
extern char PortraitTextureBuffer::ms_bIsMeta; // weak
extern std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > PortraitTextureBuffer::ms_kOtherFaceTextureMap; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_AA2D1C; // idb
extern char PortraitTextureBuffer::ms_spBlackTexture[]; // idb
extern int PortraitTextureBuffer::ms_spDefaultTexture; // weak
extern std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > PortraitTextureBuffer::ms_kMobFaceTextureMap; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_AA2D34; // idb
extern std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > PortraitTextureBuffer::ms_kMoverFaceTextureMap; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_AA2D44; // idb
extern std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > PortraitTextureBuffer::ms_kPetFaceTextureMap; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_AA2D54; // idb
extern User g_kUser; // idb
extern char byte_AA2D72; // weak
extern char source[]; // idb
extern int dword_AA2D77; // weak
extern int dword_AA2D7B; // weak
extern int dword_AA2D7F; // weak
extern char byte_AA2D83; // weak
extern int n; // idb
extern User::FreeStatPoint rkPoint; // idb
extern CItemAuthorityBase g_kItemAuthority; // idb
extern int g_pkMouseOverDropItem; // weak
extern DropItemMgr g_kDropItemMgr; // idb
extern NiRTTI DynaminUV::m_RTTI; // idb
extern Inventory g_kInventory; // idb
extern CChargedItem g_kChargedItem; // idb
extern unsigned __int32 ItemInfoTab::crcSum; // weak
extern std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s ItemInfoTab::m_ItemInfoMapByInxName; // idb
extern std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > stru_AA4F54; // idb
extern void *dword_AA4F60; // idb
extern _UNKNOWN unk_AA4F64; // weak
extern _UNKNOWN unk_AA4F68; // weak
extern int ItemRepairTask::ms_spItemRepairTask; // weak
extern float Singleton<FadeObjectMgr>::m_pInstance; // idb
extern char Singleton<FadeObjectMgr>::m_bDestroy; // weak
extern World g_kWorld; // idb
extern mhObjectManager stru_AA4FA8; // idb
extern mhGameMainConnectMgr *dword_AA4FE8; // idb
extern std::basic_string<char,std::char_traits<char>,std::allocator<char> > stru_AA4FFC; // idb
extern mhState nowState; // idb
extern int dword_AA501C; // weak
extern int dword_AA502C; // weak
extern int dword_AA5038; // idb
extern int dword_AA503C; // idb
extern char byte_AA507E; // weak
extern int dword_AA5084; // weak
extern PgWin *pkWin; // idb
extern char byte_AA508C; // weak
extern char dest[124]; // idb
extern int dword_AA5112; // weak
extern mhObject *pkObj; // idb
extern int dword_AA5124; // weak
extern __int16 word_AA5134; // weak
extern unsigned __int16 mhObj; // idb
extern char WantedActPos[]; // idb
extern int dword_AA5140; // weak
extern __int16 word_AA5144; // weak
extern char byte_AA5149; // weak
extern char byte_AA5170; // weak
extern int dword_AA5174; // weak
extern int dword_AA5178; // weak
extern int dword_AA519C; // weak
extern int dword_AA51A4; // weak
extern NiNode *spTerrain; // idb
extern NiAVObject *pkScene; // idb
extern NiAVObject *pkObject; // idb
extern PgNsTerrain *pkTerrain; // idb
extern NiCamera *pkCamera; // idb
extern CameraCtrl this; // idb
extern float flt_B30B8C; // weak
extern Oscillation stru_B30B98; // idb
extern char byte_B30BDC; // weak
extern int dword_B30C0C; // weak
extern _UNKNOWN unk_B30C14; // weak
extern int dword_B30C20; // weak
extern NiAVObject *dword_B30C38; // idb
extern int dword_B30C3C; // weak
extern int dword_B30C40; // weak
extern int dword_B30C44; // weak
extern char byte_B30C4C; // weak
extern int dword_B30F24; // weak
extern int dword_B30F28; // weak
extern int dword_B30F2C; // weak
extern DecalMgr stru_B31F08; // idb
extern NiRTTI NiTextureAccumulator::m_RTTI; // idb
extern int nnn;
extern void *dd; // idb
extern void *dword_B31F4C; // idb
extern char g_kUserLoginLogForXTrap[]; // idb
extern int dword_B31F9C; // weak
extern char byte_B31FB8[]; // weak
extern int dword_B31FD8; // weak
extern int dword_B31FDC; // weak
extern int dword_B31FF8; // weak
extern int dword_B31FFC; // weak
extern int dword_B32018; // weak
extern bool Server::ms_bTimeTest; // weak
extern float Server::ms_fCurTime; // weak
extern Server g_kServer; // idb
extern char token[40960];
extern char *pnow;
extern char buf[40960];
extern NiRTTI AfterImgEff::m_RTTI; // idb
extern std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > AfterImgEff::m_mapEffectNode; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > stru_B5ACFC; // idb
extern _UNKNOWN unk_B5AD00; // weak
extern std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > AfterImgEff::m_mapTexture; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > stru_B5AD0C; // idb
extern _UNKNOWN unk_B5AD10; // weak
extern NiRTTI ArrowEff::m_RTTI; // idb
extern NiRTTI AttachEff::m_RTTI; // idb
extern CRTTI CRTTIClass<CHazeScreenEffect_CBaseObject>::ms_RTTI; // idb
extern _UNKNOWN unk_B5AD38; // weak
extern _UNKNOWN unk_B5AD3C; // weak
extern std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai unk_B5AD48; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba stru_B5AD4C; // idb
extern _UNKNOWN Effect::ms_kOnePos; // weak
extern NiRTTI Effect::m_RTTI; // idb
extern EffectMgr g_kEffectMgr; // idb
extern std::_Tree<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > stru_B5ADBC; // idb
extern NiRTTI ExpEffect::m_RTTI; // idb
extern NiRTTI StretchEffect::m_RTTI; // idb
extern NiRTTI WeddingEffect::m_RTTI; // idb
extern float TextEff::ms_fShowDelay; // weak
extern TextEffMgr g_kTextEffMgr; // idb
extern NiCamera *dword_B5B0F8; // idb
extern int ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable; // weak
extern int _local_static_guard_; // weak
extern struct MachineOpt__stKeyMapData *MachineOpt::m_keyMap; // weak
extern __int16 word_B5B172[]; // weak
extern int dword_B5B174; // weak
extern int dword_B5B178; // weak
extern int dword_B5B17C; // weak
extern int dword_B5B180; // weak
extern int dword_B5B184; // weak
extern int dword_B5B188; // weak
extern int dword_B5B18C; // weak
extern int dword_B5B190; // weak
extern int dword_B5B194; // weak
extern int dword_B5B198; // weak
extern int dword_B5B19C; // weak
extern int dword_B5B1A0; // weak
extern int dword_B5B1A4; // weak
extern int dword_B5B1A8; // weak
extern int dword_B5B1AC; // weak
extern int dword_B5B1B0; // weak
extern int dword_B5B1B4; // weak
extern int dword_B5B1B8; // weak
extern int dword_B5B1BC; // weak
extern int dword_B5B1C0; // weak
extern int dword_B5B1C4; // weak
extern int dword_B5B1C8; // weak
extern int dword_B5B1CC; // weak
extern int dword_B5B1D0; // weak
extern int dword_B5B1D4; // weak
extern int dword_B5B1D8; // weak
extern int dword_B5B1DC; // weak
extern int dword_B5B1E0; // weak
extern int dword_B5B1E4; // weak
extern int dword_B5B1E8; // weak
extern int dword_B5B1EC; // weak
extern __int16 word_B5B1F0; // weak
extern __int16 word_B5B1F2; // weak
extern int dword_B5B1F4; // weak
extern __int16 word_B5B1F8; // weak
extern __int16 word_B5B1FA; // weak
extern int dword_B5B1FC; // weak
extern __int16 word_B5B200; // weak
extern __int16 word_B5B202; // weak
extern int dword_B5B204; // weak
extern int dword_B5B208; // weak
extern int dword_B5B20C; // weak
extern int dword_B5B210; // weak
extern int dword_B5B214; // weak
extern int dword_B5B218; // weak
extern int dword_B5B21C; // weak
extern int dword_B5B220; // weak
extern int dword_B5B224; // weak
extern int dword_B5B228; // weak
extern int dword_B5B22C; // weak
extern int dword_B5B230; // weak
extern int dword_B5B234; // weak
extern int dword_B5B238; // weak
extern int dword_B5B240; // weak
extern int dword_B5B244; // weak
extern int dword_B5B248; // weak
extern int dword_B5B24C; // weak
extern int dword_B5B250; // weak
extern int dword_B5B254; // weak
extern int dword_B5B258; // weak
extern int dword_B5B25C; // weak
extern int dword_B5B260; // weak
extern int dword_B5B268; // weak
extern int dword_B5B270; // weak
extern int dword_B5B278; // weak
extern int dword_B5B280; // weak
extern int dword_B5B284; // weak
extern int dword_B5B288; // weak
extern int dword_B5B28C; // weak
extern int dword_B5B290; // weak
extern int dword_B5B294; // weak
extern int dword_B5B298; // weak
extern int dword_B5B29C; // weak
extern int dword_B5B2A0; // weak
extern int dword_B5B2A4; // weak
extern int dword_B5B2A8; // weak
extern int dword_B5B2AC; // weak
extern int dword_B5B2B0; // weak
extern int dword_B5B2B4; // weak
extern int dword_B5B2B8; // weak
extern int dword_B5B2BC; // weak
extern int dword_B5B2C0; // weak
extern int dword_B5B2C4; // weak
extern int dword_B5B2C8; // weak
extern int dword_B5B2CC; // weak
extern int dword_B5B2D0; // weak
extern int dword_B5B2D4; // weak
extern int dword_B5B2D8; // weak
extern int dword_B5B2DC; // weak
extern int dword_B5B2E0; // weak
extern int dword_B5B2E4; // weak
extern int dword_B5B2E8; // weak
extern int dword_B5B2EC; // weak
extern int dword_B5B2F0; // weak
extern int dword_B5B2F4; // weak
extern int dword_B5B2F8; // weak
extern int dword_B5B2FC; // weak
extern int dword_B5B300; // weak
extern int dword_B5B304; // weak
extern int dword_B5B308; // weak
extern int dword_B5B30C; // weak
extern int dword_B5B310; // weak
extern int dword_B5B314; // weak
extern int dword_B5B318; // weak
extern int dword_B5B31C; // weak
extern int dword_B5B320; // weak
extern int dword_B5B324; // weak
extern int dword_B5B328; // weak
extern int dword_B5B32C; // weak
extern int dword_B5B330; // weak
extern int dword_B5B334; // weak
extern int dword_B5B338; // weak
extern int dword_B5B33C; // weak
extern int dword_B5B340; // weak
extern int dword_B5B344; // weak
extern int dword_B5B348; // weak
extern int dword_B5B34C; // weak
extern int dword_B5B350; // weak
extern int dword_B5B354; // weak
extern int dword_B5B358; // weak
extern int dword_B5B35C; // weak
extern int dword_B5B360; // weak
extern int dword_B5B364; // weak
extern int dword_B5B368; // weak
extern int dword_B5B36C; // weak
extern int dword_B5B370; // weak
extern int dword_B5B374; // weak
extern int dword_B5B378; // weak
extern int dword_B5B37C; // weak
extern int dword_B5B380; // weak
extern int dword_B5B384; // weak
extern int dword_B5B388; // weak
extern int dword_B5B38C; // weak
extern int dword_B5B390; // weak
extern int dword_B5B394; // weak
extern int dword_B5B398; // weak
extern int dword_B5B39C; // weak
extern int dword_B5B3A0; // weak
extern int dword_B5B3A4; // weak
extern int dword_B5B3A8; // weak
extern int dword_B5B3AC; // weak
extern int dword_B5B3B0; // weak
extern int dword_B5B3B4; // weak
extern int dword_B5B3B8; // weak
extern int dword_B5B3BC; // weak
extern int dword_B5B3C0; // weak
extern int dword_B5B3C4; // weak
extern int dword_B5B3C8; // weak
extern int dword_B5B3CC; // weak
extern int dword_B5B3D0; // weak
extern int dword_B5B3D4; // weak
extern int dword_B5B3D8; // weak
extern int dword_B5B3DC; // weak
extern int dword_B5B3E0; // weak
extern int dword_B5B3E4; // weak
extern int dword_B5B3E8; // weak
extern int dword_B5B3EC; // weak
extern int dword_B5B3F0; // weak
extern int dword_B5B3F4; // weak
extern int dword_B5B3F8; // weak
extern int dword_B5B3FC; // weak
extern int dword_B5B400; // weak
extern int dword_B5B404; // weak
extern int dword_B5B408; // weak
extern int dword_B5B40C; // weak
extern int dword_B5B410; // weak
extern int dword_B5B414; // weak
extern int dword_B5B418; // weak
extern int dword_B5B41C; // weak
extern int dword_B5B420; // weak
extern int dword_B5B424; // weak
extern int dword_B5B428; // weak
extern int dword_B5B42C; // weak
extern int dword_B5B430; // weak
extern int dword_B5B434; // weak
extern int dword_B5B438; // weak
extern int dword_B5B43C; // weak
extern int dword_B5B440; // weak
extern int dword_B5B444; // weak
extern int dword_B5B448; // weak
extern int dword_B5B44C; // weak
extern int dword_B5B450; // weak
extern int dword_B5B454; // weak
extern int dword_B5B458; // weak
extern int dword_B5B45C; // weak
extern int dword_B5B460; // weak
extern int dword_B5B464; // weak
extern _UNKNOWN unk_B5B468; // weak
extern _UNKNOWN unk_B5B46C; // weak
extern _UNKNOWN MachineOpt::ms_kOrgGamaRamp; // weak
extern _UNKNOWN MachineOpt::ms_kGameOption; // weak
extern char byte_B5BB1A; // weak
extern char byte_B5BB1B; // weak
extern char byte_B5BB1C; // weak
extern char byte_B5BB1E; // weak
extern char byte_B5BB1F; // weak
extern char byte_B5BB20; // weak
extern char byte_B5BB21; // weak
extern char byte_B5BB22; // weak
extern char byte_B5BB23; // weak
extern char byte_B5BB24; // weak
extern char byte_B5BB25; // weak
extern char byte_B5BB26; // weak
extern char byte_B5BB27; // weak
extern char byte_B5BB28; // weak
extern char byte_B5BB29; // weak
extern char byte_B5BB2A; // weak
extern char byte_B5BB2B; // weak
extern char byte_B5BB2C; // weak
extern char byte_B5BB2D; // weak
extern int dword_B5BB2E[]; // weak
extern int dword_B5BB42; // weak
extern char byte_B5BB46; // weak
extern char byte_B5BB47; // weak
extern char byte_B5BB48; // weak
extern char byte_B5BB49; // weak
extern char byte_B5BB4A; // weak
extern char byte_B5BB4B; // weak
extern char byte_B5BB4C; // weak
extern char byte_B5BB4D; // weak
extern char byte_B5BB4E; // weak
extern _UNKNOWN MachineOpt::ms_shortCutSizeOptionData; // weak
extern _UNKNOWN unk_B5BB52; // weak
extern char byte_B5BB53; // weak
extern int dword_B5BB54; // weak
extern char byte_B5BB58[]; // weak
extern char byte_B5BB59[]; // weak
extern char byte_B5BB5A[]; // weak
extern int dword_B5BB5C; // weak
extern int dword_B5BB60; // weak
extern int dword_B5BB64; // weak
extern MachineOpt::UserLoginOption MachineOpt::ms_kUserLoginOption; // idb
extern char Skill::ms_akLearnProductSkillInfo[]; // idb
extern int dword_B5BBDC[]; // weak
extern char Skill::ms_akLearnPassiveSkillInfo[]; // idb
extern char Skill::ms_akLearnActSkillInfo[]; // idb
extern int dword_B6310A; // weak
extern int Skill::ms_uiTotalLearnActSkill; // weak
extern int Skill::ms_uiRestEmpowerPoint; // weak
extern int Skill::ms_uiRestEmpowerPointInEdit; // weak
extern int Skill::ms_uiAntiEmpowerPoint; // weak
extern int Skill::ms_uiAntiEmpowerPointInEdit; // weak
extern char Skill::ms_bResetable; // weak
extern int Skill::ms_uiTotalLearnPassiveSkill; // weak
extern int Skill::ms_uiTotalLearnProductSkill; // weak
extern int Skill::m_uiMaxSkillNum; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern int _local_static_guard_; // weak
extern Party g_kParty; // idb
extern int ActSkillInfoTab::crcSum; // weak
extern std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s ActSkillInfoTab::m_hashMap_ByNameIndex; // idb
extern std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > stru_B6794C; // idb
extern void *dword_B67958; // idb
extern _UNKNOWN unk_B6795C; // weak
extern _UNKNOWN unk_B67960; // weak
extern PgWin *ItemUseTask::ms_pkCastingProgressWin; // idb
extern int MHDiceGameTask::ms_spMHDiceGameTask; // weak
extern ProductionWin *ProductTask::ms_pkProductionWin; // idb
extern int StatPointReqTask::ms_spInstance; // weak
extern CWeaponTitle WeaponTitleTab::ms_kTab; // idb
extern std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s ProduceInfoTable::m_MaterialMap; // idb
extern std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > stru_B679D4; // idb
extern void *unk_B679E0; // idb
extern _UNKNOWN unk_B679E4; // weak
extern _UNKNOWN unk_B679E8; // weak
extern bool bLoad;
extern CClientQuest kQuest;
extern std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > unk_B67AB4; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_B67AB8; // idb
extern CQuestData kQuestData;
extern CDataReader QuestDialog;
extern unsigned int _S3_9;
extern char acToken[128];
extern QuestHelperMgr *QuestHelperMgr::m_pkInstance; // idb
extern char TutorialMgr::m_arrPass[100]; // idb
extern std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *CGuildMonster::m_pInstance; // idb
extern GuildListWin *GuildListTask::m_pkGuildListWin; // idb
extern int GuildListTask::ms_spGuildListTask; // weak
extern int GuildMemberTask::ms_spGuildMemberTask; // weak
extern int GuildTask::ms_spGuildTask; // weak
extern int mhCollisionManager::m_ColliStyle; // weak
extern char mhCollisionManager::m_ColliInfo[]; // idb
extern int dword_B67C94; // weak
extern int dword_B67C98; // weak
extern int dword_B67C9C; // weak
extern NiPoint3 ColiPoint; // idb
extern int dword_B67CD0; // weak
extern int dword_B67CD4; // weak
extern int dword_B67CD8; // weak
extern int MiniHouseIndoor::AddObjectID; // weak
extern int MiniHouseIndoor::AddTexID; // weak
extern int MiniHouseIndoor::AddResObjID; // weak
extern unsigned int dwLastSendTime_0;
extern std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > g_kMiniHouseMgr; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > stru_B67CF0; // idb
extern int dword_B67CFC; // weak
extern int mhEditRoomWin::m_uiShowBagPage; // weak
extern unsigned int mhEditRoomWin::m_uiInvType; // idb
extern float fOldtime;
extern char ORTable::ort_Index[]; // idb
extern __int64 qword_B67D18; // weak
extern int dword_B67D20; // weak
extern char ORTable::ort_String[]; // idb
extern __int64 qword_B67D2C; // weak
extern int dword_B67D34; // weak
extern char ORTable::ort_Byte[]; // idb
extern __int64 qword_B67D40; // weak
extern int dword_B67D48; // weak
extern char ORTable::ort_Word[]; // idb
extern __int64 qword_B67D54; // weak
extern int dword_B67D5C; // weak
extern char ORTable::ort_Dwrd[]; // idb
extern __int64 qword_B67D68; // weak
extern int dword_B67D70; // weak
extern char ORTable::ort_Dword[]; // idb
extern __int64 qword_B67D7C; // weak
extern int dword_B67D84; // weak
extern char OptionReader::or_CommentMark[]; // idb
extern __int64 qword_B67D8C; // weak
extern __int64 qword_B67D94; // weak
extern char OptionReader::or_Brace[]; // idb
extern int dword_B67DA4; // weak
extern __int64 qword_B67DA8; // weak
extern char OptionReader::or_Ignore[]; // idb
extern int dword_B67DB8; // weak
extern __int64 qword_B67DBC; // weak
extern char OptionReader::or_Delimiter[]; // idb
extern int dword_B67DCC; // weak
extern __int64 qword_B67DD0; // weak
extern char OptionReader::or_Exchange[]; // idb
extern int dword_B67DE0; // weak
extern __int64 qword_B67DE4; // weak
extern char OptionReader::or_Table[]; // idb
extern int dword_B67DF4; // weak
extern __int64 qword_B67DF8; // weak
extern ORToken OptionReader::or_ColumnType; // idb
extern ORToken OptionReader::or_ColumnName; // idb
extern ORToken OptionReader::or_Record; // idb
extern ORToken OptionReader::or_RecordIn; // idb
extern char OptionReader::or_End[]; // idb
extern __int64 qword_B67E58; // weak
extern int dword_B67E60; // weak
extern int WeddingTask::ms_spWeddingTask; // weak
extern int ISingletonTask<GuildAcademyLeaveTask>::ms_pkSingletonTask; // weak
extern int ISingletonTask<GuildAcademyNotifyTask>::ms_pkSingletonTask; // weak
extern int ISingletonTask<GuildAcademyJoinReqTask>::ms_pkSingletonTask; // weak
extern int GuildAcademyStorageWin::ms_kFrom; // weak
extern int ISingletonTask<GuildAcademyMemberVanishTask>::ms_pkSingletonTask; // weak
extern int GuildAcademyMemberTask::ms_spGuildAcademyMemberTask; // weak
extern PgWin *GuildAcademySelectTask::m_pkGuildAcademySelectWin; // idb
extern int GuildAcademySelectTask::ms_spGuildAcademySelectTask; // weak
extern int GuildAcademyTask::ms_spGuildAcademyTask; // weak
extern __int64 GuildAcademyStorage::ms_i64Money; // weak
extern int GuildAcademyStorage::ms_aspInv[]; // weak
extern RaidInfo g_kRaidinfo; // idb
extern _UNKNOWN unk_B68084; // weak
extern wchar_t resultBuffer;
extern wchar_t communicationBuffer;
extern char szCTNull[4];
extern CShnDataFileCheckSum ShnDataFile; // idb
extern _UNKNOWN unk_B69FD4; // weak
extern char NULLSTR[12716];
extern char tempStr[8][512];
extern int index;
extern bool g_bErrorEnable; // weak
extern bool g_bCriticalEnable; // weak
extern unsigned __int64 (__cdecl *__g_rdtsc)(); // weak
extern void (__cdecl *__g_memzero)(void *, unsigned int); // weak
extern void (__cdecl *__g_memcpy)(void *, void *, unsigned int); // weak
extern void (__stdcall *gpfnPostQuitMessage)(int); // weak
extern int (__stdcall *gpfnPeekMessage)(struct tagMSG *, struct HWND__ *, unsigned int, unsigned int, unsigned int); // weak
extern int (__stdcall *gpfnMessageBox)(struct HWND__ *, const char *, const char *, unsigned int); // weak
extern int (*gpfnwsprintf)(char *, const char *, ...); // weak
extern int dword_B6C300; // weak
extern int dword_B6C304; // weak
extern int dword_B6C308; // weak
extern int dword_B6C30C; // weak
extern int dword_B6C310; // weak
extern int dword_B6C314; // weak
extern char byte_B6C318; // weak
extern char byte_B6C319; // weak
extern char byte_B6C31A; // weak
extern char byte_B6C31B; // weak
extern char byte_B6C31C; // weak
extern char byte_B6C31D; // weak
extern char byte_B6C31E; // weak
extern char byte_B6C31F; // weak
extern char byte_B6C320; // weak
extern char byte_B6C321; // weak
extern char byte_B6C322; // weak
extern char byte_B6C323; // weak
extern char byte_B6C324; // weak
extern _RTL_CRITICAL_SECTION mtx;
extern std::_Init_locks initlocks;
extern std::_Fac_node *Fac_head;
extern std::locale::_Locimp *global_locale;
extern int std::locale::_Locimp::_Clocptr; // weak
extern int std::locale::id::_Id_cnt; // weak
extern int std::ctype<char>::id; // weak
extern std::locale classic_locale;
extern std::_Fac_tidy_reg_t Fac_tidy_reg;
extern bool registered;
extern char stdopens[10];
extern PVOID atfuns_cdecl;
extern std::_Init_locks initlocks_0;
extern _Init_atexit init_atexit;
extern volatile LONG CPLocHash;
extern std::bad_alloc nomem;
extern unsigned int _S1;
extern int _umaskval; // weak
extern int __argc;
extern char **__argv;
extern char **_environ;
extern int __initenv; // weak
extern wchar_t **_wenviron;
extern int __winitenv; // weak
extern char *_pgmptr;
extern char _exitflag; // weak
extern int _C_Termination_Done; // weak
extern int _C_Exit_Done; // weak
extern __type_info_node __type_info_root_node; // idb
extern int _cflush; // weak
extern PVOID __pInconsistency; // idb
extern unsigned int _enable_percent_n;
extern char *_aenvptr; // idb
extern wchar_t *_wenvptr; // idb
extern int __error_mode; // weak
extern char tmpnam_buf[14];
extern char tmpfile_buf[18];
extern _UNKNOWN unk_B6C5E2; // weak
extern char tmpnam_s_buf[18];
extern unsigned __int64 start_tics;
extern int __locale_changed; // weak
extern int __idtabsiz; // weak
extern void *__idpairs; // idb
extern int _maxwait; // weak
extern __type_info_node _type_info_root_node;
extern PVOID _pnhHeap; // idb
extern PVOID gpFlsAlloc; // idb
extern PVOID gpFlsGetValue; // idb
extern PVOID gpFlsSetValue; // idb
extern PVOID gpFlsFree; // idb
extern _EXCEPTION_RECORD GS_ExceptionRecord;
extern int DebuggerWasPresent;
extern _CONTEXT GS_ContextRecord;
extern HANDLE _crtheap; // idb
extern PVOID __pInvalidArgHandler; // idb
extern int fSystemSet;
extern __int16 __mbulinfo[]; // weak
extern int __mbcodepage; // weak
extern int __ismbcodepage; // weak
extern int __mblcid; // weak
extern _RTL_CRITICAL_SECTION lclcritsects[14];
extern _UNKNOWN _stdbuf; // weak
extern _TIME_ZONE_INFORMATION tzinfo;
extern int tzapiused;
extern char *lastTZ;
extern int first_time;
extern int _newmode; // weak
extern wchar_t outmsg;
extern PVOID ctrlc_action;
extern void (__cdecl *ctrlbreak_action)(int);
extern PVOID abort_action;
extern void (__cdecl *term_action)(int);
extern int (__stdcall *g_pfnRtlGenRandom)(void *, unsigned int);
extern int __pPurecall; // weak
extern char pgmname[261];
extern int pmatherr_set;
extern int _commode; // weak
extern int nValidPages;
extern int lModifying;
extern _VALID_PAGE_CACHE rgValidPages[16];
extern _HeapManager heap;
extern Replicator *UnDecorator::pArgList; // idb
extern Replicator *UnDecorator::pZNameList; // idb
extern Replicator *UnDecorator::pTemplateArgList; // idb
extern char *UnDecorator::gName; // idb
extern char *UnDecorator::name; // idb
extern char *UnDecorator::outputString; // idb
extern int UnDecorator::maxStringLength; // idb
extern int UnDecorator::disableFlags; // weak
extern int (__cdecl *UnDecorator::m_pGetParameter)(_DWORD); // weak
extern char UnDecorator::fExplicitTemplateParams; // weak
extern char UnDecorator::fGetTemplateArgumentList; // weak
extern DNameStatusNode nodes[4];
extern int _local_static_guard_; // weak
extern char _outputformat; // weak
extern PVOID pfnMessageBox;
extern PVOID pfnGetActiveWindow;
extern PVOID pfnGetLastActivePopup;
extern PVOID pfnGetProcessWindowStation;
extern PVOID pfnGetUserObjectInformation;
extern int _fmode;
extern int NiTAbstractPoolAllocator<NiActorManager::TimelineData>::ms_pkBlockHeader; // weak
extern int NiTAbstractPoolAllocator<NiActorManager::TimelineData>::ms_pkFreeMem; // weak
extern _RTL_CRITICAL_SECTION NiTAbstractPoolAllocator<NiActorManager::TimelineData>::ms_kCriticalSection; // idb
extern float NiFloatKey::ms_fDefault; // weak
extern bool bRegistered;
extern bool bRegistered_0;
extern bool bRegistered_1;
extern float NiPosKey::ms_fSampleDelta; // weak
extern int NiPosKey::ms_kDefault; // weak
extern int dword_B6D43C; // weak
extern int dword_B6D440; // weak
extern bool bRegistered_2;
extern bool bRegistered_3;
extern int NiRotKey::ms_kDefault; // weak
extern int dword_B6D44C; // weak
extern int dword_B6D450; // weak
extern int dword_B6D454; // weak
extern bool bRegistered_4;
extern char NiBoolKey::ms_bDefault; // weak
extern bool bRegistered_5;
extern bool bRegistered_6;
extern int NiColorKey::ms_kDefault; // weak
extern int dword_B6D460; // weak
extern int dword_B6D464; // weak
extern int dword_B6D468; // weak
extern bool bRegistered_7;
extern bool bRegistered_8;
extern bool bRegistered_9;
extern bool bRegistered_10;
extern bool bRegistered_11;
extern bool bRegistered_12;
extern bool bRegistered_13;
extern bool bRegistered_14;
extern bool bRegistered_15;
extern bool bRegistered_16;
extern bool bRegistered_17;
extern bool bRegistered_18;
extern bool bRegistered_19;
extern char NiAnimationSDM::ms_bInitialized; // weak
extern int siCounter;
extern NiRTTI NiTextKeyExtraData::m_RTTI; // idb
extern NiRTTI NiControllerSequence::m_RTTI; // idb
extern NiRTTI NiTransformController::m_RTTI; // idb
extern NiRTTI NiBoneLODController::m_RTTI; // idb
extern NiRTTI NiTextureTransformController::m_RTTI; // idb
extern NiRTTI NiMaterialColorController::m_RTTI; // idb
extern NiRTTI NiAlphaController::m_RTTI; // idb
extern NiRTTI NiControllerManager::m_RTTI; // idb
extern char NiAnimationKey::ms_keysizes[]; // weak
extern char byte_B6D4C1; // weak
extern char byte_B6D4C2; // weak
extern char byte_B6D4C3; // weak
extern char byte_B6D4C5; // weak
extern char byte_B6D4C6[]; // weak
extern char byte_B6D4C7; // weak
extern char byte_B6D4C8; // weak
extern char byte_B6D4C9; // weak
extern char byte_B6D4CB; // weak
extern char byte_B6D4CC[]; // weak
extern char byte_B6D4CD; // weak
extern char byte_B6D4CE; // weak
extern char byte_B6D4CF; // weak
extern char byte_B6D4D0; // weak
extern char byte_B6D4D1; // weak
extern char byte_B6D4D2[]; // weak
extern char byte_B6D4D3; // weak
extern char byte_B6D4D7; // weak
extern char byte_B6D4DE[]; // weak
extern char byte_B6D4E3; // weak
extern int NiAnimationKey::ms_fillderived[]; // weak
extern int dword_B6D4EC; // weak
extern int dword_B6D4F0; // weak
extern int dword_B6D4F4; // weak
extern int dword_B6D4FC; // weak
extern int dword_B6D500[]; // weak
extern int dword_B6D504; // weak
extern int dword_B6D508; // weak
extern int dword_B6D50C; // weak
extern int dword_B6D514; // weak
extern int dword_B6D518[]; // weak
extern int dword_B6D51C; // weak
extern int dword_B6D520; // weak
extern int dword_B6D524; // weak
extern int dword_B6D528; // weak
extern int dword_B6D52C; // weak
extern int dword_B6D530; // weak
extern int dword_B6D534; // weak
extern int dword_B6D544; // weak
extern int dword_B6D560[]; // weak
extern int dword_B6D574; // weak
extern int NiAnimationKey::ms_inserts[]; // weak
extern int dword_B6D57C; // weak
extern int dword_B6D580; // weak
extern int dword_B6D584; // weak
extern int dword_B6D58C; // weak
extern int dword_B6D590; // weak
extern int dword_B6D594; // weak
extern int dword_B6D598; // weak
extern int dword_B6D59C; // weak
extern int dword_B6D5A4; // weak
extern int dword_B6D5A8; // weak
extern int dword_B6D5AC; // weak
extern int dword_B6D5B0; // weak
extern int dword_B6D5B4; // weak
extern int dword_B6D5B8; // weak
extern int dword_B6D5BC; // weak
extern int dword_B6D5C0; // weak
extern int dword_B6D5C4; // weak
extern int dword_B6D5D4; // weak
extern int dword_B6D5F0; // weak
extern int dword_B6D604; // weak
extern int NiAnimationKey::ms_deletes[]; // weak
extern int dword_B6D60C; // weak
extern int dword_B6D610; // weak
extern int dword_B6D614; // weak
extern int dword_B6D61C; // weak
extern int dword_B6D620[]; // weak
extern int dword_B6D624; // weak
extern int dword_B6D628; // weak
extern int dword_B6D62C; // weak
extern int dword_B6D634; // weak
extern int dword_B6D638[]; // weak
extern int dword_B6D63C; // weak
extern int dword_B6D640; // weak
extern int dword_B6D644; // weak
extern int dword_B6D648; // weak
extern int dword_B6D64C; // weak
extern int dword_B6D650[]; // weak
extern int dword_B6D654; // weak
extern int dword_B6D664; // weak
extern int dword_B6D680[]; // weak
extern int dword_B6D694; // weak
extern int NiAnimationKey::ms_arrays[]; // weak
extern int dword_B6D69C; // weak
extern int dword_B6D6A0; // weak
extern int dword_B6D6A4; // weak
extern int dword_B6D6AC; // weak
extern int dword_B6D6B0; // weak
extern int dword_B6D6B4; // weak
extern int dword_B6D6B8; // weak
extern int dword_B6D6BC; // weak
extern int dword_B6D6C4; // weak
extern int dword_B6D6C8; // weak
extern int dword_B6D6CC; // weak
extern int dword_B6D6D0; // weak
extern int dword_B6D6D4; // weak
extern int dword_B6D6D8; // weak
extern int dword_B6D6DC; // weak
extern int dword_B6D6E0; // weak
extern int dword_B6D6E4; // weak
extern int dword_B6D6F4; // weak
extern int dword_B6D710; // weak
extern int dword_B6D724; // weak
extern int NiAnimationKey::ms_copies[]; // weak
extern int dword_B6D72C; // weak
extern int dword_B6D730; // weak
extern int dword_B6D734; // weak
extern int dword_B6D73C; // weak
extern int dword_B6D740; // weak
extern int dword_B6D744; // weak
extern int dword_B6D748; // weak
extern int dword_B6D74C; // weak
extern int dword_B6D754; // weak
extern int dword_B6D758; // weak
extern int dword_B6D75C; // weak
extern int dword_B6D760; // weak
extern int dword_B6D764; // weak
extern int dword_B6D768; // weak
extern int dword_B6D76C; // weak
extern int dword_B6D770; // weak
extern int dword_B6D774; // weak
extern int dword_B6D784; // weak
extern int dword_B6D7A0; // weak
extern int dword_B6D7B4; // weak
extern int NiAnimationKey::ms_saves[]; // weak
extern int dword_B6D7BC; // weak
extern int dword_B6D7C0; // weak
extern int dword_B6D7C4; // weak
extern int dword_B6D7CC; // weak
extern int dword_B6D7D0[]; // weak
extern int dword_B6D7D4; // weak
extern int dword_B6D7D8; // weak
extern int dword_B6D7DC; // weak
extern int dword_B6D7E4; // weak
extern int dword_B6D7E8[]; // weak
extern int dword_B6D7EC; // weak
extern int dword_B6D7F0; // weak
extern int dword_B6D7F4; // weak
extern int dword_B6D7F8; // weak
extern int dword_B6D7FC; // weak
extern int dword_B6D800[]; // weak
extern int dword_B6D804; // weak
extern int dword_B6D814; // weak
extern int dword_B6D830[]; // weak
extern int dword_B6D844; // weak
extern int NiAnimationKey::ms_equals[]; // weak
extern int dword_B6D84C; // weak
extern int dword_B6D850; // weak
extern int dword_B6D854; // weak
extern int dword_B6D85C; // weak
extern int dword_B6D860[]; // weak
extern int dword_B6D864; // weak
extern int dword_B6D868; // weak
extern int dword_B6D86C; // weak
extern int dword_B6D874; // weak
extern int dword_B6D878[]; // weak
extern int dword_B6D87C; // weak
extern int dword_B6D880; // weak
extern int dword_B6D884; // weak
extern int dword_B6D888; // weak
extern int dword_B6D88C; // weak
extern int dword_B6D890[]; // weak
extern int dword_B6D894; // weak
extern int dword_B6D8A4; // weak
extern int dword_B6D8C0[]; // weak
extern int dword_B6D8D4; // weak
extern int NiAnimationKey::ms_interpd2s; // weak
extern int dword_B6D8DC; // weak
extern int dword_B6D8E0; // weak
extern int dword_B6D8E4; // weak
extern int dword_B6D8EC; // weak
extern int dword_B6D8F0[]; // weak
extern int dword_B6D8F4; // weak
extern int dword_B6D8F8; // weak
extern int dword_B6D8FC; // weak
extern int dword_B6D904; // weak
extern int dword_B6D908; // weak
extern int dword_B6D90C; // weak
extern int dword_B6D910; // weak
extern int dword_B6D914; // weak
extern int dword_B6D918; // weak
extern int dword_B6D91C; // weak
extern int dword_B6D920; // weak
extern int dword_B6D924; // weak
extern int dword_B6D934; // weak
extern int dword_B6D950; // weak
extern int dword_B6D964; // weak
extern int NiAnimationKey::ms_interpd1s; // weak
extern int dword_B6D96C; // weak
extern int dword_B6D970; // weak
extern int dword_B6D974; // weak
extern int dword_B6D97C; // weak
extern int dword_B6D980[]; // weak
extern int dword_B6D984; // weak
extern int dword_B6D988; // weak
extern int dword_B6D98C; // weak
extern int dword_B6D994; // weak
extern int dword_B6D998; // weak
extern int dword_B6D99C; // weak
extern int dword_B6D9A0; // weak
extern int dword_B6D9A4; // weak
extern int dword_B6D9A8; // weak
extern int dword_B6D9AC; // weak
extern int dword_B6D9B0; // weak
extern int dword_B6D9B4; // weak
extern int dword_B6D9C4; // weak
extern int dword_B6D9E0; // weak
extern int dword_B6D9F4; // weak
extern int NiAnimationKey::ms_interps[]; // weak
extern int dword_B6D9FC; // weak
extern int dword_B6DA00; // weak
extern int dword_B6DA04; // weak
extern int dword_B6DA0C; // weak
extern int dword_B6DA10[]; // weak
extern int dword_B6DA14; // weak
extern int dword_B6DA18; // weak
extern int dword_B6DA1C; // weak
extern int dword_B6DA24; // weak
extern int dword_B6DA28[]; // weak
extern int dword_B6DA2C; // weak
extern int dword_B6DA30; // weak
extern int dword_B6DA34; // weak
extern int dword_B6DA38; // weak
extern int dword_B6DA3C; // weak
extern int dword_B6DA40[]; // weak
extern int dword_B6DA44; // weak
extern int dword_B6DA54; // weak
extern int dword_B6DA70[]; // weak
extern int dword_B6DA84; // weak
extern int NiAnimationKey::ms_curves; // weak
extern int dword_B6DA8C; // weak
extern int dword_B6DA90; // weak
extern int dword_B6DA94; // weak
extern int dword_B6DA9C; // weak
extern int dword_B6DAA0[]; // weak
extern int dword_B6DAA4; // weak
extern int dword_B6DAA8; // weak
extern int dword_B6DAAC; // weak
extern int dword_B6DAB4; // weak
extern int dword_B6DAB8; // weak
extern int dword_B6DABC; // weak
extern int dword_B6DAC0; // weak
extern int dword_B6DAC4; // weak
extern int dword_B6DAC8; // weak
extern int dword_B6DACC; // weak
extern int dword_B6DAD0; // weak
extern int dword_B6DAD4; // weak
extern int dword_B6DAE4; // weak
extern int dword_B6DB00; // weak
extern int dword_B6DB14; // weak
extern int NiAnimationKey::ms_loaders[]; // weak
extern int dword_B6DB1C; // weak
extern int dword_B6DB20; // weak
extern int dword_B6DB24; // weak
extern int dword_B6DB2C; // weak
extern int dword_B6DB30[]; // weak
extern int dword_B6DB34; // weak
extern int dword_B6DB38; // weak
extern int dword_B6DB3C; // weak
extern int dword_B6DB44; // weak
extern int dword_B6DB48[]; // weak
extern int dword_B6DB4C; // weak
extern int dword_B6DB50; // weak
extern int dword_B6DB54; // weak
extern int dword_B6DB58; // weak
extern int dword_B6DB5C; // weak
extern int dword_B6DB60[]; // weak
extern int dword_B6DB64; // weak
extern int dword_B6DB74; // weak
extern int dword_B6DB90[]; // weak
extern int dword_B6DBA4; // weak
extern NiRTTI NiVisController::m_RTTI; // idb
extern NiRTTI NiUVData::m_RTTI; // idb
extern NiRTTI NiUVController::m_RTTI; // idb
extern NiRTTI NiTransformInterpolator::m_RTTI; // idb
extern NiRTTI NiStringPalette::m_RTTI; // idb
extern NiRTTI NiSequenceStreamHelper::m_RTTI; // idb
extern NiRTTI NiSequence::m_RTTI; // idb
extern NiRTTI NiRotData::m_RTTI; // idb
extern NiRTTI NiRollController::m_RTTI; // idb
extern NiRTTI NiQuaternionInterpolator::m_RTTI; // idb
extern NiRTTI NiPosData::m_RTTI; // idb
extern NiRTTI NiPoint3Interpolator::m_RTTI; // idb
extern unsigned int _S1_0;
extern NiRTTI NiPathInterpolator::m_RTTI; // idb
extern unsigned int _S1_1;
extern NiRTTI NiPathController::m_RTTI; // idb
extern NiRTTI NiMultiTargetTransformController::m_RTTI; // idb
extern NiRTTI NiMorphData::m_RTTI; // idb
extern NiRTTI NiLookAtInterpolator::m_RTTI; // idb
extern NiRTTI NiLookAtController::m_RTTI; // idb
extern NiRTTI NiLightDimmerController::m_RTTI; // idb
extern NiRTTI NiLightColorController::m_RTTI; // idb
extern NiPointer<NiRenderTargetGroup> NiKeyframeManager::ms_pkLinkRecord; // idb
extern NiRTTI NiKeyframeManager::m_RTTI; // idb
extern NiRTTI NiTransformData::m_RTTI; // idb
extern char NiGeomMorpherController::ms_bAlwaysUpdateClone; // weak
extern NiRTTI NiGeomMorpherController::m_RTTI; // idb
extern NiRTTI NiFloatsExtraDataPoint3Controller::m_RTTI; // idb
extern NiRTTI NiFloatsExtraDataController::m_RTTI; // idb
extern NiRTTI NiFloatInterpolator::m_RTTI; // idb
extern NiRTTI NiFloatExtraDataController::m_RTTI; // idb
extern NiRTTI NiFloatData::m_RTTI; // idb
extern NiRTTI NiFlipController::m_RTTI; // idb
extern NiRTTI NiColorInterpolator::m_RTTI; // idb
extern NiRTTI NiColorExtraDataController::m_RTTI; // idb
extern NiRTTI NiColorData::m_RTTI; // idb
extern NiRTTI NiBSplineTransformInterpolator::m_RTTI; // idb
extern NiRTTI NiBSplinePoint3Interpolator::m_RTTI; // idb
extern NiRTTI NiBSplineFloatInterpolator::m_RTTI; // idb
extern NiRTTI NiBSplineCompTransformInterpolator::m_RTTI; // idb
extern NiRTTI NiBSplineCompPoint3Interpolator::m_RTTI; // idb
extern NiRTTI NiBSplineCompFloatInterpolator::m_RTTI; // idb
extern NiRTTI NiBSplineCompColorInterpolator::m_RTTI; // idb
extern NiRTTI NiBSplineColorInterpolator::m_RTTI; // idb
extern NiRTTI NiBSplineData::m_RTTI; // idb
extern NiRTTI NiBSplineBasisData::m_RTTI; // idb
extern NiRTTI NiBoolTimelineInterpolator::m_RTTI; // idb
extern NiRTTI NiBoolInterpolator::m_RTTI; // idb
extern NiRTTI NiBoolData::m_RTTI; // idb
extern NiRTTI NiBlendTransformInterpolator::m_RTTI; // idb
extern NiRTTI NiBlendQuaternionInterpolator::m_RTTI; // idb
extern NiRTTI NiBlendPoint3Interpolator::m_RTTI; // idb
extern NiRTTI NiBlendFloatInterpolator::m_RTTI; // idb
extern NiRTTI NiBlendColorInterpolator::m_RTTI; // idb
extern NiRTTI NiBlendBoolInterpolator::m_RTTI; // idb
extern NiRTTI NiBlendAccumTransformInterpolator::m_RTTI; // idb
extern NiRTTI NiInterpController::m_RTTI; // idb
extern NiRTTI NiBlendInterpolator::m_RTTI; // idb
extern NiRTTI NiSingleInterpController::m_RTTI; // idb
extern NiQuaternion NiQuatTransform::INVALID_ROTATE; // idb
extern NiRTTI NiInterpolator::m_RTTI; // idb
extern NiQuaternion NiInterpolator::INVALID_QUATERNION; // idb
extern NiRTTI NiFloatInterpController::m_RTTI; // idb
extern NiRTTI NiPoint3InterpController::m_RTTI; // idb
extern NiRTTI NiBoolInterpController::m_RTTI; // idb
extern NiRTTI NiKeyBasedInterpolator::m_RTTI; // idb
extern NiRTTI NiFloatController::m_RTTI; // idb
extern NiRTTI NiExtraDataController::m_RTTI; // idb
extern NiRTTI NiBSplineInterpolator::m_RTTI; // idb
extern char NiCollisionSDM::ms_bInitialized; // weak
extern int siCounter_0;
extern char NiCollisionData::ms_bComputeWorldVelocity; // weak
extern NiRTTI NiCollisionData::m_RTTI; // idb
extern NiSphereBV NiCollisionConvert::ms_kSphereABV; // idb
extern int NiBoundingVolume::ms_apfnLoaders[]; // weak
extern int dword_B6DE04; // weak
extern int dword_B6DE08; // weak
extern int dword_B6DE0C; // weak
extern int dword_B6DE10; // weak
extern int dword_B6DE14; // weak
extern void *NiBoundingVolume::ms_pfnTestFuncTable; // idb
extern void *NiBoundingVolume::ms_pfnFindFuncTable; // idb
extern void *NiBoundingVolume::ms_pfnTriTestFuncTable; // idb
extern void *NiBoundingVolume::ms_pfnTriFindFuncTable; // idb
extern int (__cdecl *NiBoundingVolume::ms_pfnConvertToSphereBV_Fast)(_DWORD, _DWORD); // weak
extern int (__cdecl *NiBoundingVolume::ms_pfnConvertToSphereBV_Safe)(_DWORD, _DWORD); // weak
extern int (*NiBoundingVolume::ms_pfnConvertToBoxBV)(void); // weak
extern NiRTTI NiNode::m_RTTI; // idb
extern int NiObjectNET::ms_eCopyType; // weak
extern NiRTTI NiObjectNET::m_RTTI; // idb
extern NiMainSDM NiMainSDMObject;
extern NiRTTI NiObject::m_RTTI; // idb
extern NiRTTI NiAVObject::m_RTTI; // idb
extern _UNKNOWN NiMatrix3::ZERO; // weak
extern NiRTTI NiMaterialProperty::m_RTTI; // idb
extern NiMaterialProperty *NiMaterialProperty::ms_spDefault; // idb
extern const float NI_PI; // weak
extern const float NI_HALF_PI; // weak
extern const float NI_TWO_PI; // weak
extern NiPoint3 NiPoint3::ZERO; // idb
extern char NiRenderer::ms_acErrorString; // idb
extern NiRenderer *NiRenderer::ms_pkRenderer; // idb
extern NiRTTI NiRenderer::m_RTTI; // idb
extern NiRTTI NiProperty::m_RTTI; // idb
extern NiRTTI NiVertexColorProperty::m_RTTI; // idb
extern int NiVertexColorProperty::ms_spDefault; // weak
extern void *NiTAbstractPoolAllocator<unsigned_int>::ms_pkBlockHeader; // idb
extern int NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem; // weak
extern _RTL_CRITICAL_SECTION NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection; // idb
extern int dword_B6DFE8; // weak
extern int dword_B6DFEC; // weak
extern NiRTTI NiAlphaProperty::m_RTTI; // idb
extern int NiAlphaProperty::ms_spDefault; // weak
extern int NiColor::BLACK; // weak
extern int dword_B6E000; // weak
extern int dword_B6E004; // weak
extern NiRTTI NiFogProperty::m_RTTI; // idb
extern int NiFogProperty::ms_spDefault; // weak
extern NiRTTI NiDirectionalLight::m_RTTI; // idb
extern NiRTTI NiDynamicEffect::m_RTTI; // idb
extern NiRTTI NiAmbientLight::m_RTTI; // idb
extern NiRTTI NiSortAdjustNode::m_RTTI; // idb
extern NiRTTI NiCamera::m_RTTI; // idb
extern int NiShaderFactory::ms_pkShaderFactory; // weak
extern NiRTTI NiTexturingProperty::m_RTTI; // idb
extern NiProperty *NiTexturingProperty::ms_spDefault; // idb
extern char NiSourceTexture::ms_bDestroyAppData; // weak
extern NiRTTI NiSourceTexture::m_RTTI; // idb
extern void *NiImageConverter::ms_pcPlatformSubDir; // idb
extern int NiImageConverter::ms_spConverter; // weak
extern volatile LONG NiRefObject::ms_uiObjects; // idb
extern NiRTTI NiTriShape::m_RTTI; // idb
extern NiRTTI NiRenderTargetGroup::m_RTTI; // idb
extern NiRTTI NiRenderedTexture::m_RTTI; // idb
extern NiRTTI NiScreenElementsData::m_RTTI; // idb
extern NiRTTI NiScreenElements::m_RTTI; // idb
extern NiRTTI NiExtraData::m_RTTI; // idb
extern NiRTTI NiBinaryExtraData::m_RTTI; // idb
extern NiRTTI NiShader::m_RTTI; // idb
extern NiRTTI NiPixelData::m_RTTI; // idb
extern NiRTTI NiZBufferProperty::m_RTTI; // idb
extern int NiZBufferProperty::ms_spDefault; // weak
extern NiRTTI NiAlphaAccumulator::m_RTTI; // idb
extern NiRTTI NiIntegerExtraData::m_RTTI; // idb
extern NiRTTI NiStringExtraData::m_RTTI; // idb
extern float sfLastScaled;
extern float sfLastTime;
extern float sfLastLo;
extern float sfLastHi;
extern NiRTTI NiTimeController::m_RTTI; // idb
extern _RTL_CRITICAL_SECTION NiTimeController::ms_kCachedValuesLock; // idb
extern int NiPoint2::ZERO; // weak
extern int dword_B6E104; // weak
extern NiRTTI NiRangeLODData::m_RTTI; // idb
extern NiRTTI NiLODNode::m_RTTI; // idb
extern NiRTTI NiGeometry::m_RTTI; // idb
extern NiRTTI NiSkinPartition::m_RTTI; // idb
extern NiRTTI NiTriBasedGeomData::m_RTTI; // idb
extern NiRTTI NiTriBasedGeom::m_RTTI; // idb
extern NiRTTI NiSkinInstance::m_RTTI; // idb
extern NiRTTI NiAccumulator::m_RTTI; // idb
extern NiRTTI NiCollisionObject::m_RTTI; // idb
extern int NiTexture::ms_pkHead; // weak
extern int NiTexture::ms_pkTail; // weak
extern char NiTexture::ms_bMipmapByDefault; // weak
extern NiRTTI NiTexture::m_RTTI; // idb
extern _RTL_CRITICAL_SECTION NiTexture::ms_kTextureListCriticalSection; // idb
extern int dword_B6E17C; // weak
extern int dword_B6E180; // weak
extern int NiTexture::RendererData::ms_aspReplacementData[]; // weak
extern int dword_B6E188; // weak
extern int dword_B6E18C; // weak
extern int dword_B6E190; // weak
extern int dword_B6E194; // weak
extern int dword_B6E198; // weak
extern int dword_B6E19C; // weak
extern int dword_B6E1A0; // weak
extern int dword_B6E1A4; // weak
extern int dword_B6E1A8; // weak
extern _UNKNOWN unk_B6E1AC; // weak
extern NiPixelFormat NiTexture::RendererData::ms_kReplacementFormat; // idb
extern NiRTTI NiStencilProperty::m_RTTI; // idb
extern int NiStencilProperty::ms_spDefault; // weak
extern int NiGeometryGroupManager::ms_pkManager; // weak
extern NiRTTI NiTriShapeDynamicData::m_RTTI; // idb
extern int NiPalette::ms_pkHead; // weak
extern int NiPalette::ms_pkTail; // weak
extern NiRTTI NiPalette::m_RTTI; // idb
extern _RTL_CRITICAL_SECTION NiPalette::ms_kPaletteListCriticalSection; // idb
extern int dword_B6E234; // weak
extern int dword_B6E238; // weak
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *NiStream::ms_pkLoaders; // idb
extern NiTArray<NiVBBlock *> *NiStream::ms_pkPostProcessFunctions; // idb
extern int NiStream::ms_uiNifMinUserDefinedVersion; // weak
extern int NiStream::ms_uiNifMaxUserDefinedVersion; // weak
extern _RTL_CRITICAL_SECTION NiStream::ms_kCleanupCriticalSection; // idb
extern int dword_B6E264; // weak
extern int dword_B6E268; // weak
extern const float ISQRT_ADDITIVE_CONSTANT;
extern const float ISQRT_FACTOR;
extern NiRTTI NiSkinData::m_RTTI; // idb
extern NiTextureTransform NiTextureTransform::IDENTITY; // idb
extern NiRTTI NiAVObjectPalette::m_RTTI; // idb
extern NiRTTI NiDefaultAVObjectPalette::m_RTTI; // idb
extern NiRTTI NiGeometryData::m_RTTI; // idb
extern _RTL_CRITICAL_SECTION NiGeometryData::ms_kCritSec; // idb
extern int dword_B6E2F8; // weak
extern int dword_B6E2FC; // weak
extern NiRTTI NiLight::m_RTTI; // idb
extern void *NiPoint3::ms_pSqrtTable; // idb
extern NiRTTI NiFloatsExtraData::m_RTTI; // idb
extern NiRTTI NiColorExtraData::m_RTTI; // idb
extern int NiProcessorSpecificCode::ms_eProcessorID; // weak
extern char NiProcessorSpecificCode::ms_bIDSet; // weak
extern unsigned int uiCPUIDResults;
extern NiRTTI NiTriStrips::m_RTTI; // idb
extern NiRTTI NiSwitchNode::m_RTTI; // idb
extern NiRTTI NiVertWeightsExtraData::m_RTTI; // idb
extern char NiMainSDM::ms_bInitialized; // weak
extern int siCounter_1;
extern NiRTTI NiTriShapeData::m_RTTI; // idb
extern NiRTTI NiDepthStencilBuffer::m_RTTI; // idb
extern NiRTTI Ni2DBuffer::m_RTTI; // idb
extern NiRTTI NiBackToFrontAccumulator::m_RTTI; // idb
extern NiRTTI NiLODData::m_RTTI; // idb
extern int NiTriStripsData::ms_pusStripList; // weak
extern __int16 NiTriStripsData::ms_usI; // weak
extern __int16 NiTriStripsData::ms_usStrip; // weak
extern NiRTTI NiTriStripsData::m_RTTI; // idb
extern NiRTTI NiDitherProperty::m_RTTI; // idb
extern int NiDitherProperty::ms_spDefault; // weak
extern NiRTTI NiRendererSpecificProperty::m_RTTI; // idb
extern int NiRendererSpecificProperty::ms_spDefault; // weak
extern NiRTTI NiShadeProperty::m_RTTI; // idb
extern int NiShadeProperty::ms_spDefault; // weak
extern NiRTTI NiSpecularProperty::m_RTTI; // idb
extern int NiSpecularProperty::ms_spDefault; // weak
extern NiRTTI NiWireframeProperty::m_RTTI; // idb
extern int NiWireframeProperty::ms_spDefault; // weak
extern NiTPool<NiD3DPass> *NiScreenGeometryData::ms_pkScreenElementPool; // idb
extern NiRTTI NiScreenGeometryData::m_RTTI; // idb
extern NiRTTI NiScreenGeometry::m_RTTI; // idb
extern NiRTTI NiScreenPolygon::m_RTTI; // idb
extern NiRTTI NiScreenSpaceCamera::m_RTTI; // idb
extern NiRTTI NiVectorExtraData::m_RTTI; // idb
extern NiRTTI NiTextureEffect::m_RTTI; // idb
extern NiRTTI NiSwitchStringExtraData::m_RTTI; // idb
extern NiRTTI NiStringsExtraData::m_RTTI; // idb
extern NiRTTI NiSpotLight::m_RTTI; // idb
extern NiRTTI NiSourceCubeMap::m_RTTI; // idb
extern NiRTTI NiScreenTexture::m_RTTI; // idb
extern NiRTTI NiScreenLODData::m_RTTI; // idb
extern NiRTTI NiParticlesData::m_RTTI; // idb
extern NiRTTI NiPointLight::m_RTTI; // idb
extern NiRTTI NiParticleMeshesData::m_RTTI; // idb
extern NiRTTI NiParticleMeshes::m_RTTI; // idb
extern NiRTTI NiLinesData::m_RTTI; // idb
extern NiRTTI NiLines::m_RTTI; // idb
extern NiRTTI NiIntegersExtraData::m_RTTI; // idb
extern NiRTTI NiFloatExtraData::m_RTTI; // idb
extern NiRTTI NiBSPNode::m_RTTI; // idb
extern NiRTTI NiBooleanExtraData::m_RTTI; // idb
extern NiRTTI NiBillboardNode::m_RTTI; // idb
extern NiRTTI NiParticles::m_RTTI; // idb
extern NiRTTI NiAdditionalGeometryData::m_RTTI; // idb
extern char NiMilesAudioSDM::ms_bInitialized; // weak
extern int siCounter_2;
extern int NiAudioSystem::ms_pAudioSystem; // weak
extern NiRTTI NiAudioSystem::m_RTTI; // idb
extern NiRTTI NiMilesAudioSystem::m_RTTI; // idb
extern NiRTTI NiMilesSource::m_RTTI; // idb
extern NiRTTI NiMilesListener::m_RTTI; // idb
extern NiRTTI NiAudioSource::m_RTTI; // idb
extern NiRTTI NiAudioListener::m_RTTI; // idb
extern char NiParticleSDM::ms_bInitialized; // weak
extern int siCounter_3;
extern NiRTTI NiPSysEmitterCtlr::m_RTTI; // idb
extern NiRTTI NiPSysVortexFieldModifier::m_RTTI; // idb
extern NiRTTI NiPSysUpdateCtlr::m_RTTI; // idb
extern NiRTTI NiPSysTurbulenceFieldModifier::m_RTTI; // idb
extern NiRTTI NiPSysSphericalCollider::m_RTTI; // idb
extern NiRTTI NiPSysSphereEmitter::m_RTTI; // idb
extern NiRTTI NiPSysSpawnModifier::m_RTTI; // idb
extern const float fTenPi;
extern unsigned int _S1_2;
extern NiRTTI NiPSysRotationModifier::m_RTTI; // idb
extern NiRTTI NiPSysResetOnLoopCtlr::m_RTTI; // idb
extern NiRTTI NiPSysRadialFieldModifier::m_RTTI; // idb
extern NiRTTI NiPSysPositionModifier::m_RTTI; // idb
extern const float sfCollisionEpsilon;
extern unsigned int _S1_3;
extern NiRTTI NiPSysPlanarCollider::m_RTTI; // idb
extern NiRTTI NiPSysModifierActiveCtlr::m_RTTI; // idb
extern NiRTTI NiPSysMeshUpdateModifier::m_RTTI; // idb
extern NiRTTI NiPSysMeshEmitter::m_RTTI; // idb
extern NiRTTI NiPSysInitialRotSpeedVarCtlr::m_RTTI; // idb
extern NiRTTI NiPSysInitialRotSpeedCtlr::m_RTTI; // idb
extern NiRTTI NiPSysInitialRotAngleVarCtlr::m_RTTI; // idb
extern NiRTTI NiPSysInitialRotAngleCtlr::m_RTTI; // idb
extern NiRTTI NiPSysGrowFadeModifier::m_RTTI; // idb
extern NiRTTI NiPSysGravityStrengthCtlr::m_RTTI; // idb
extern NiRTTI NiPSysGravityFieldModifier::m_RTTI; // idb
extern NiRTTI NiPSysGravityModifier::m_RTTI; // idb
extern NiRTTI NiPSysFieldMaxDistanceCtlr::m_RTTI; // idb
extern NiRTTI NiPSysFieldMagnitudeCtlr::m_RTTI; // idb
extern NiRTTI NiPSysFieldAttenuationCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterSpeedCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterPlanarAngleVarCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterPlanarAngleCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterLifeSpanCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterInitialRadiusCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterDeclinationVarCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterDeclinationCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitterCtlrData::m_RTTI; // idb
extern NiRTTI NiPSysDragModifier::m_RTTI; // idb
extern NiRTTI NiPSysDragFieldModifier::m_RTTI; // idb
extern NiRTTI NiPSysData::m_RTTI; // idb
extern NiRTTI NiPSysCylinderEmitter::m_RTTI; // idb
extern NiRTTI NiPSysColorModifier::m_RTTI; // idb
extern NiRTTI NiPSysColliderManager::m_RTTI; // idb
extern NiRTTI NiPSysBoxEmitter::m_RTTI; // idb
extern NiRTTI NiPSysBoundUpdateModifier::m_RTTI; // idb
extern NiRTTI NiPSysBombModifier::m_RTTI; // idb
extern NiRTTI NiPSysAgeDeathModifier::m_RTTI; // idb
extern NiRTTI NiPSysAirFieldSpreadCtlr::m_RTTI; // idb
extern NiRTTI NiPSysAirFieldModifier::m_RTTI; // idb
extern NiRTTI NiPSysAirFieldInheritVelocityCtlr::m_RTTI; // idb
extern NiRTTI NiPSysAirFieldAirFrictionCtlr::m_RTTI; // idb
extern NiRTTI NiParticleSystem::m_RTTI; // idb
extern NiRTTI NiMeshPSysData::m_RTTI; // idb
extern NiRTTI NiMeshParticleSystem::m_RTTI; // idb
extern NiRTTI NiPSysModifierCtlr::m_RTTI; // idb
extern NiRTTI NiPSysEmitter::m_RTTI; // idb
extern NiRTTI NiPSysModifier::m_RTTI; // idb
extern NiRTTI NiPSysFieldModifier::m_RTTI; // idb
extern NiRTTI NiPSysCollider::m_RTTI; // idb
extern NiRTTI NiPSysVolumeEmitter::m_RTTI; // idb
extern NiRTTI NiPSysModifierBoolCtlr::m_RTTI; // idb
extern NiRTTI NiPSysModifierFloatCtlr::m_RTTI; // idb
extern _LARGE_INTEGER initial;
extern _LARGE_INTEGER freq;
extern int NiStaticDataManager::ms_apfnShutdownFunctions[]; // weak
extern int NiStaticDataManager::ms_apfnInitFunctions[]; // weak
extern int NiStaticDataManager::ms_uiNumLibraries; // weak
extern int (*NiStaticDataManager::ms_pfnRootInitFunction)(void); // weak
extern int (*NiStaticDataManager::ms_pfnRootShutdownFunction)(void); // weak
extern void *NiSystemDesc::ms_pkSystemDesc; // idb
extern char NiBinaryStream::ms_bEndianMatchHint; // weak
extern char NiSearchPath::ms_acDefPath; // idb
extern char NiSystemSDM::ms_bInitialized; // weak
extern int NiLogger::ms_apkLogFile[]; // weak
extern int dword_B6E86C[]; // weak
extern int dword_B6E870[]; // weak
extern int dword_B6E874[]; // weak
extern int dword_B6E878; // weak
extern int dword_B6E87C; // weak
extern int dword_B6E880; // weak
extern int dword_B6E884; // weak
extern int dword_B6E888; // weak
extern int dword_B6E88C; // weak
extern int dword_B6E890; // weak
extern int dword_B6E894; // weak
extern int dword_B6E898; // weak
extern int dword_B6E89C; // weak
extern int dword_B6E8A0; // weak
extern int dword_B6E8A4; // weak
extern int NiLogger::ms_uiLogFileCount; // weak
extern _UNKNOWN unk_B6EAB8; // weak
extern int dword_B6EAD8; // weak
extern int dword_B6EAE4; // weak
extern int dword_B6EAF0; // weak
extern int dword_B6EAFC; // weak
extern int dword_B6EB08; // weak
extern int dword_B6EB14; // weak
extern int dword_B6EB20; // weak
extern char byte_B6EB24; // weak
extern _RTL_CRITICAL_SECTION NiLogger::ms_kCriticalSection; // idb
extern char NiPortalSDM::ms_bInitialized; // weak
extern int siCounter_4;
extern NiRTTI NiRoom::m_RTTI; // idb
extern NiRTTI NiOldWall::m_RTTI; // idb
extern char NiRoomGroup::ms_bViewAllRoom; // weak
extern NiRTTI NiRoomGroup::m_RTTI; // idb
extern NiRTTI NiPortal::m_RTTI; // idb
extern int NiApplication::ms_pkApplication; // weak
extern HINSTANCE NiApplication::ms_pInstance; // idb
extern HACCEL NiApplication::ms_pAccel; // idb
extern NiCommand *NiApplication::ms_pkCommand; // idb
extern NiDX9DeviceDesc *NiDX9Select::ms_pkDevice; // idb
extern int NiDX9Select::ms_pkMode; // weak
extern int NiDX9Select::ms_pkAdapter; // weak
extern int NiDX9Select::ms_pkInfo; // weak
extern char NiDX9Select::ms_bFullscreen; // weak
extern char NiDX9Select::ms_b32BitZBuffer; // weak
extern char NiDX9Select::ms_bDialogOpen; // weak
extern unsigned int NiDX9Select::ms_uiMultisample; // idb
extern int NiInputSystem::ms_uiSequence; // weak
extern NiRTTI NiInputSystem::m_RTTI; // idb
extern NiRTTI NiInputSystem::CreateParams::m_RTTI; // idb
extern unsigned int s_uiLastModifiers;
extern int NiDI8InputSystem::ms_hOwnerInst; // weak
extern HWND__ *NiDI8InputSystem::ms_hOwnerWnd; // idb
extern HMODULE NiDI8InputSystem::ms_hLibInst; // idb
extern NiRTTI NiDI8InputSystem::m_RTTI; // idb
extern NiRTTI NiDI8InputSystem::DI8CreateParams::m_RTTI; // idb
extern NiRTTI NiInputGamePad::m_RTTI; // idb
extern NiTPool<NiD3DPass> *NiActionMap::ms_pakActionPool; // idb
extern NiRTTI NiInputDevice::m_RTTI; // idb
extern NiRTTI NiInputDI8Mouse::m_RTTI; // idb
extern NiRTTI NiInputDI8Keyboard::m_RTTI; // idb
extern NiRTTI NiInputDI8GamePad::m_RTTI; // idb
extern NiRTTI NiInputMouse::m_RTTI; // idb
extern NiRTTI NiInputKeyboard::m_RTTI; // idb
extern NiCollisionSDM NiCollisionSDMObject_0;
extern NSBShaderLibSDM NSBShaderLibSDMObject;
extern char NSBShaderLibSDM::ms_bInitialized; // weak
extern int siCounter_5;
extern NiD3DXEffectLoader *NSBLoader::ms_pkLoader; // idb
extern NiD3DXEffectLoader *NSFLoader::ms_pkLoader; // idb
extern unsigned int g_uiHighFloatValues; // weak
extern float g_afHighValues; // idb
extern float g_afValues; // idb
extern float flt_B6EF34; // weak
extern float flt_B6EF38; // weak
extern float flt_B6EF3C; // weak
extern float flt_B6EF40; // weak
extern float flt_B6EF44; // weak
extern float flt_B6EF48; // weak
extern float flt_B6EF4C; // weak
extern float flt_B6EF50; // weak
extern float flt_B6EF54; // weak
extern float flt_B6EF58; // weak
extern float flt_B6EF5C; // weak
extern float flt_B6EF60; // weak
extern float flt_B6EF64; // weak
extern float flt_B6EF68; // weak
extern float flt_B6EF6C; // weak
extern float g_afLowValues; // idb
extern bool g_bRanged; // weak
extern int NSFParserdebug; // weak
extern unsigned int g_uiLowFloatValues; // weak
extern unsigned int g_uiCurrentPlatforms; // weak
extern enum NiConstantMapMode g_eConstMapMode; // weak
extern int NSFParsernerrs; // weak
extern unsigned int g_uiFloatValues; // weak
extern int NSFParserchar; // weak
extern union YYSTYPE NSFParserlval; // weak
extern char g_szDSO[1024]; // idb
extern NSBAttributeTable *g_pkFile; // idb
extern int g_iDSOIndent; // weak
extern bool g_bConstantMapPlatformBlock; // weak
extern bool g_bGlobalAttributes; // weak
extern bool g_bCurrPDFixedFunction; // weak
extern bool g_bCurrStateValid; // weak
extern NSFParsedShader *g_pkCurrShader; // idb
extern NSBShader *g_pkCurrNSBShader; // idb
extern NSBAttributeTable *g_pkCurrAttribTable; // idb
extern NSBObjectTable *g_pkCurrObjectTable; // idb
extern unsigned int g_uiCurrPDStream; // idb
extern NSBPackingDef *g_pkCurrPackingDef; // idb
extern NSBRequirements *g_pkCurrRequirements; // idb
extern unsigned int g_uiCurrImplementation; // idb
extern NSBPass *g_pkCurrImplementation; // idb
extern NSBStateGroup *g_pkCurrRSGroup; // idb
extern NiD3DShaderProgram *g_pkCurrConstantMap; // idb
extern unsigned int g_uiCurrPassIndex; // idb
extern NSBPass *g_pkCurrPass; // idb
extern NSBTextureStage *g_pkCurrTextureStage; // idb
extern unsigned int g_uiCurrStateState; // idb
extern unsigned int g_uiCurrStateValue; // idb
extern bool g_bUseMapValue; // weak
extern NSBUserDefinedDataSet *g_pkCurrUDDataSet; // idb
extern int g_pkCurrUDDataBlock; // weak
extern int iErrors; // weak
extern char yy_hold_char[28];
extern yy_buffer_state *yy_current_buffer;
extern char *yy_c_buf_p;
extern int yy_start;
extern _iobuf *NSFParserin; // idb
extern _iobuf *NSFParserout; // idb
extern NiD3DXEffectFactory *NiD3DXEffectFactory::ms_pkFactory; // idb
extern void *NiD3DXEffectFactory::ms_pcD3DXEffectDirectory; // idb
extern int NiD3DXEffectFactory::ms_pkD3DRenderer; // weak
extern void *NiD3DXEffectFactory::ms_pkD3DDevice; // idb
extern int NiD3DXEffectFactory::ms_uiCreationFlags; // weak
extern int NiD3DXEffectFactory::ms_hAppInstance; // weak
extern NiD3DXEffectLoader *NiD3DXEffectLoader::ms_pkLoader; // idb
extern float NiD3DXEffectParameter::ms_afObjectData; // weak
extern float flt_B6F60C; // weak
extern float flt_B6F610; // weak
extern float flt_B6F614; // weak
extern float flt_B6F618; // weak
extern float flt_B6F61C; // weak
extern float flt_B6F620; // weak
extern float flt_B6F624; // weak
extern float flt_B6F628; // weak
extern float flt_B6F62C; // weak
extern float flt_B6F630; // weak
extern float flt_B6F634; // weak
extern float flt_B6F638; // weak
extern float flt_B6F63C; // weak
extern float flt_B6F640; // weak
extern float flt_B6F644; // weak
extern void *NiD3DXEffectParameter::ms_pkMatrixArray; // idb
extern int NiD3DXEffectParameter::ms_uiMatrixArraySize; // weak
extern D3DXVECTOR4 NiD3DXEffectParameter::ms_akVector4Array; // idb
extern int NiD3DXEffectParser::ms_uiShaderMapIndex; // weak
extern int NiD3DXEffectParser::ms_uiGeneralLightIndex; // weak
extern int NiD3DXEffectParser::ms_uiPointLightIndex; // weak
extern int NiD3DXEffectParser::ms_uiDirectionalLightIndex; // weak
extern int NiD3DXEffectParser::ms_uiSpotLightIndex; // weak
extern int NiD3DXEffectParser::ms_uiProjShadowIndex; // weak
extern int NiD3DXEffectParser::ms_uiProjLightIndex; // weak
extern char NiD3DXEffectParameterDesc::ms_kArrayDesc[]; // idb
extern int NiD3DXEffectParameterDesc::ms_kObjectDesc; // weak
extern int dword_B6FCD4; // weak
extern int dword_B6FCD8; // weak
extern int dword_B6FCDC; // weak
extern int dword_B6FCE0; // weak
extern int dword_B6FCE4; // weak
extern int NiD3DXEffectParameterDesc::ms_kPredefinedDesc; // weak
extern int dword_B6FCEC; // weak
extern int dword_B6FCF0; // weak
extern int dword_B6FCF4; // weak
extern int dword_B6FCF8; // weak
extern int dword_B6FCFC; // weak
extern int dword_B6FD00; // weak
extern int NiD3DXEffectParameterDesc::ms_kBooleanDesc; // weak
extern int dword_B6FD08; // weak
extern int dword_B6FD0C; // weak
extern int dword_B6FD10; // weak
extern int dword_B6FD14; // weak
extern char NiD3DXEffectParameterDesc::ms_kTextureDesc[]; // idb
extern int NiD3DXEffectParameterDesc::ms_kIntegerDesc; // weak
extern int dword_B6FD64; // weak
extern int dword_B6FD68; // weak
extern int dword_B6FD6C; // weak
extern int dword_B6FD70; // weak
extern int dword_B6FD74; // weak
extern int dword_B6FD78; // weak
extern int dword_B6FD7C; // weak
extern int NiD3DXEffectParameterDesc::ms_kFloatDesc; // weak
extern int dword_B6FD84; // weak
extern int dword_B6FD88; // weak
extern int dword_B6FD8C; // weak
extern int dword_B6FD90; // weak
extern int dword_B6FD94; // weak
extern int dword_B6FD98; // weak
extern int dword_B6FD9C; // weak
extern char NiD3DXEffectParameterDesc::ms_kVectorDesc[]; // idb
extern char NiD3DXEffectParameterDesc::ms_kMatrixDesc[]; // idb
extern NiD3DXEffectShaderSDM NiD3DXEffectShaderSDMObject;
extern NiRTTI NiD3DXEffectShader::m_RTTI; // idb
extern int NiD3DXEffectStateManager::ms_pkManager; // weak
extern int NiD3DXEffectTechniqueDesc::ms_kTechniqueDesc; // weak
extern int dword_B6FE60; // weak
extern int dword_B6FE64; // weak
extern int dword_B6FE68; // weak
extern int dword_B6FE6C; // weak
extern int dword_B6FE70; // weak
extern int dword_B6FE74; // weak
extern int dword_B6FE78; // weak
extern int dword_B6FE7C; // weak
extern int dword_B6FE80; // weak
extern char NiD3DXEffectShaderSDM::ms_bInitialized; // weak
extern int siCounter_6;
extern NiCollisionSDM NiCollisionSDMObject_1;
extern NiCollisionSDM NiCollisionSDMObject_2;
extern NiCollisionSDM NiCollisionSDMObject_3;
extern NiCollisionSDM NiCollisionSDMObject_4;
extern NiCollisionSDM NiCollisionSDMObject_5;
extern NiCollisionSDM NiCollisionSDMObject_6;
extern NiRTTI NsPgToonRegister_v2::m_RTTI; // idb
extern NiRTTI NPTR_ISShader_v2::m_RTTI; // idb
extern NiCollisionSDM NiCollisionSDMObject_7;
extern NiRTTI INpShader::m_RTTI; // idb
extern NiRTTI NsPgToonExtraData::m_RTTI; // idb
extern NiCollisionSDM NiCollisionSDMObject_8;
extern NiRTTI NsPgCatoonShader::m_RTTI; // idb
extern int NiBoolKeyregisterloaderreturn_0;
extern NiParticleSDM NiParticleSDMObject_0;
extern int NiColorKeyregisterloaderreturn_0;
extern int NiFloatKeyregisterloaderreturn_0;
extern NiCollisionSDM NiCollisionSDMObject_9;
extern NiPoint3 kz;
extern NiColorA kColor;
extern unsigned int _S1_4;
extern NiCollisionSDM NiCollisionSDMObject_10;
extern NiRTTI NiAlphaRefController::m_RTTI; // idb
extern NiRTTI NsFadeNode::m_RTTI; // idb
extern int NiStepFloatKeyregisterloaderreturn_0;
extern int NiBoolKeyregisterloaderreturn_1;
extern int NiStepColorKeyregisterloaderreturn_0;
extern int NiTCBPosKeyregisterloaderreturn_0;
extern int NiStepPosKeyregisterloaderreturn_0;
extern int NiTCBFloatKeyregisterloaderreturn_0;
extern int NiLinPosKeyregisterloaderreturn_0;
extern int NiBezRotKeyregisterloaderreturn_0;
extern int NiEulerRotKeyregisterloaderreturn_0;
extern int NiStepBoolKeyregisterloaderreturn_0;
extern int NiTCBRotKeyregisterloaderreturn_0;
extern int NiColorKeyregisterloaderreturn_1;
extern int NiRotKeyregisterloaderreturn_0;
extern int NiLinFloatKeyregisterloaderreturn_0;
extern int NiStepRotKeyregisterloaderreturn_0;
extern int NiBezPosKeyregisterloaderreturn_0;
extern NiCollisionSDM NiCollisionSDMObject_11;
extern NiAnimationSDM NiAnimationSDMObject_0;
extern int NiBezFloatKeyregisterloaderreturn_0;
extern int NiFloatKeyregisterloaderreturn_1;
extern int NiLinRotKeyregisterloaderreturn_0;
extern int NiPosKeyregisterloaderreturn_0;
extern int NiLinColorKeyregisterloaderreturn_0;
extern NiPortalSDM NiPortalSDMObject_0;
extern NiCollisionSDM NiCollisionSDMObject_12;
extern boost::singleton_pool<boost::fast_pool_allocator_tag,24,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>::pool_type obj;
extern int _local_static_guard_; // weak
extern NiCollisionSDM NiCollisionSDMObject_13;
extern NiCollisionSDM NiCollisionSDMObject_14;
extern NiCollisionSDM NiCollisionSDMObject_15;
extern NiRTTI MasterPropertyAccumulator::m_RTTI; // idb
extern NiCollisionSDM NiCollisionSDMObject_16;
extern CDataDocument DataDocument;
extern unsigned int _S1_5;
extern CPostProcessEffectManager *CPostProcessEffectManager::ms_PostProcessEffect; // idb
extern NiRenderer *pkRender;
extern unsigned int _S1_6;
extern NiRenderTargetGroup *pkDefaultRenderTarget;
extern NiRenderer *pkRenderer;
extern unsigned int _S2;
extern CRTTI CRTTIClass<CGlowScreenEffect_CBaseObject>::ms_RTTI; // idb
extern _UNKNOWN unk_B701EC; // weak
extern _UNKNOWN unk_B701F0; // weak
extern std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai unk_B701FC; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba stru_B70200; // idb
extern CRTTI CRTTIClass<CDepthOfFieldEffect_CBaseObject>::ms_RTTI; // idb
extern _UNKNOWN unk_B7021C; // weak
extern _UNKNOWN unk_B70220; // weak
extern std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai unk_B7022C; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba stru_B70230; // idb
extern CRTTI CRTTIClass<CAfterImageEffect_CBaseObject>::ms_RTTI; // idb
extern _UNKNOWN unk_B7024C; // weak
extern _UNKNOWN unk_B70250; // weak
extern std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai unk_B7025C; // idb
extern std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba stru_B70260; // idb
extern NiCollisionSDM NiCollisionSDMObject_17;
extern NiRTTI CPostProcessEffect::m_RTTI; // idb
extern NiRTTI HazeAccumulator::m_RTTI; // idb
extern NiRTTI CHazeScreenEffect::m_RTTI; // idb
extern int CPropertyType<unsigned_int>::ms_TypeID; // weak
extern NiRTTI CGlowScreenEffect::m_RTTI; // idb
extern int timeCount;
extern NiRTTI CAfterImageEffect::m_RTTI; // idb
extern NiRTTI CDepthOfFieldEffect::m_RTTI; // idb
extern NiRenderTargetGroup *pkDefualtRTGroup;
extern unsigned int _S1_7;
extern NiRTTI CScreenEffect::m_RTTI; // idb
extern NiRTTI PgFrameWork::m_RTTI; // idb
extern PgFrameMgr Pgg_kFrameMgr; // idb
extern bool PgWin::ms_bShiftPressed; // weak
extern bool PgWin::ms_bCtrlPressed; // weak
extern bool PgWin::ms_bAltPressed; // weak
extern int PgWin::ms_iMsDeltaZ; // idb
extern int PgWin::ms_iMsDeltaY; // idb
extern int PgWin::ms_iMsDeltaX; // idb
extern POINT PgWin::ms_iMsX; // idb
extern int PgWin::ms_iMsY; // idb
extern PgWin *PgWin::ms_pkCapture; // idb
extern int PgWin::ms_iScreenLeftPos; // weak
extern int PgWin::ms_iScreenTopPos; // weak
extern bool PgWin::ms_bCursorSetted; // weak
extern NiRTTI PgWin::m_RTTI; // idb
extern int PgWin::ms_kbLbutDown; // weak
extern char byte_B70340; // weak
extern int dword_B70344; // weak
extern int PgWin::ms_kbLbutPressed; // weak
extern char byte_B7034C; // weak
extern int dword_B70350; // weak
extern int PgWin::ms_kbLbutReleased; // weak
extern char byte_B70358; // weak
extern int dword_B7035C; // weak
extern int PgWin::ms_kbRbutDown; // weak
extern char byte_B70364; // weak
extern int dword_B70368; // weak
extern PgWin::Bool PgWin::ms_kbRbutPressed; // idb
extern PgWin::Bool PgWin::ms_kbRbutReleased; // idb
extern int PgWin::ms_kbMbutDown; // weak
extern char byte_B70388; // weak
extern int dword_B7038C; // weak
extern int PgWin::ms_kbMbutPressed; // weak
extern char byte_B70394; // weak
extern int dword_B70398; // weak
extern int PgWin::ms_kbMbutReleased; // weak
extern char byte_B703A0; // weak
extern int dword_B703A4; // weak
extern NiRTTI PgWinText::m_RTTI; // idb
extern PgWin *pOldFocuswindow;
extern PgWinMgr Pgg_kWinMgr; // idb
extern NiCamera *unk_B703D8; // idb
extern NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > stru_B703DC; // idb
extern _UNKNOWN unk_B703F0; // weak
extern _UNKNOWN unk_B703F8; // weak
extern PgTQueue<PgWinMgr::PgWinMsg> stru_B703FC; // idb
extern _UNKNOWN unk_B7040C; // weak
extern _UNKNOWN unk_B70420; // weak
extern _UNKNOWN unk_B70424; // weak
extern _UNKNOWN unk_B70428; // weak
extern _UNKNOWN unk_B70440; // weak
extern _DWORD *dword_B70444; // idb
extern NiTexturePalette *dword_B70448; // idb
extern _UNKNOWN unk_B7044C; // weak
extern _UNKNOWN unk_B7044D; // weak
extern NiRTTI PgWinBut::m_RTTI; // idb
extern bool bInRecreateRegistedText;
extern int CommaCount;
extern NiRefObject *CSpFont::ms_spAlphaProp; // idb
extern NiRefObject *CSpFont::ms_spVertexProp; // idb
extern int SpScreenText::m_pkScrSpaceCamera; // weak
extern char *PgCursor::ms_akInfo; // idb
extern int PgCursor::ms_iMaxCursorType; // weak
extern int PgCursor::ms_pkDrop; // weak
extern char PgCursor::ms_bKeepDrop; // weak
extern NiRTTI PgCursor::m_RTTI; // idb
extern NiRefObject *PgCursor::ms_spSystemCursor; // idb
extern NiRefObject *PgCursor::ms_spCursorDxSurfaceTexture; // idb
extern char PgExternalLib::ms_bOpenSoundEnable; // weak
extern char PgExternalLib::ms_bCloseSoundEnable; // weak
extern PgProfileNode PgProfileMgr::ms_kRoot; // idb
extern PgTQueue<PgProfileNode *> PgProfileMgr::ms_kTraversalQ; // idb
extern WNDPROC PgEditWin::ms_pfnOldProc; // idb
extern NiTMapBase<DFALL<PgEditWin *>,HWND__ *,PgEditWin *> PgEditWin::ms_kCallBackMap; // idb
extern NiRTTI PgWinScaleCtrl::m_RTTI; // idb
extern StrBuffer kTmpStr;
extern unsigned int _S2_0;
extern ATL::CAtlBaseModule ATL::_AtlBaseModule; // idb
extern int ATL::g_strheap; // weak
extern int dword_B70540; // weak
extern char byte_B70544; // weak
extern NiD3DShaderProgramFactory *NiD3DShaderProgramFactory::ms_pkFactory; // idb
extern NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *NiD3DShaderProgramFactory::ms_pkShaderCreators; // idb
extern int NiD3DShaderProgramFactory::ms_pkD3DDevice; // weak
extern int NiD3DShaderProgramFactory::ms_pkD3DRenderer; // weak
extern int NiD3DShaderProgramFactory::ms_pkD3DRenderState; // weak
extern NiRTTI NiD3DDefaultShader::m_RTTI; // idb
extern int NiD3DTextureStageGroup::ms_pkD3DRenderState; // weak
extern void *NiD3DTextureStageGroup::ms_pkTextureStageGroupPool; // idb
extern int NiD3DTextureStage::ms_pkD3DDevice; // weak
extern int NiD3DTextureStage::ms_pkD3DRenderer; // weak
extern int NiD3DTextureStage::ms_pkD3DRenderState; // weak
extern void *NiD3DTextureStage::ms_pkTextureStagePool; // idb
extern char NiD3DTextureStage::ms_kCalculatedTextureTransformation[]; // idb
extern float flt_B70584; // weak
extern float flt_B70588; // weak
extern float flt_B7058C; // weak
extern float flt_B70590; // weak
extern float flt_B70594; // weak
extern float flt_B70598; // weak
extern float flt_B7059C; // weak
extern float flt_B705A0; // weak
extern float flt_B705A4; // weak
extern float flt_B705A8; // weak
extern float flt_B705AC; // weak
extern float flt_B705B0; // weak
extern float flt_B705B4; // weak
extern float flt_B705B8; // weak
extern float flt_B705BC; // weak
extern int NiD3DRenderStateGroup::ms_pkD3DRenderer; // weak
extern int NiD3DRenderStateGroup::ms_pkD3DRenderState; // weak
extern void *NiD3DRenderStateGroup::ms_pkRenderStateGroupPool; // idb
extern void *NiD3DRenderStateGroup::ms_pkRenderStateEntryPool; // idb
extern int NiD3DPass::ms_pkD3DDevice; // weak
extern int NiD3DPass::ms_pkD3DRenderer; // weak
extern int NiD3DPass::ms_pkD3DRenderState; // weak
extern NiTPool<NiD3DPass> *NiD3DPass::ms_pkPassPool; // idb
extern int NiD3DShader::ms_apfnDynEffectPackers[]; // weak
extern int dword_B705E4; // weak
extern int dword_B705E8; // weak
extern int dword_B705EC; // weak
extern int dword_B705F0; // weak
extern NiRTTI NiD3DShader::m_RTTI; // idb
extern NiRTTI NiD3DShaderInterface::m_RTTI; // idb
extern char NiDX9Renderer::ms_aucD3DFormatSizes; // idb
extern int dword_B7061C; // weak
extern int dword_B70620; // weak
extern int dword_B70624; // weak
extern int dword_B70628; // weak
extern char byte_B7062C; // weak
extern __int16 word_B70630; // weak
extern __int16 word_B7063A; // weak
extern char byte_B7063C; // weak
extern int dword_B70644; // weak
extern char byte_B70648; // weak
extern char byte_B7064B; // weak
extern __int16 word_B7064E; // weak
extern char byte_B70651; // weak
extern char byte_B70653; // weak
extern char byte_B70655; // weak
extern __int16 word_B70657; // weak
extern char byte_B70659; // weak
extern __int16 word_B7065A; // weak
extern __int16 word_B7066D; // weak
extern int dword_B70676; // weak
extern int dword_B7067A; // weak
extern unsigned int NiDX9Renderer::ms_akD3DFilterMapping; // idb
extern unsigned int dword_B70684; // idb
extern unsigned int dword_B70688; // idb
extern int dword_B7068C; // weak
extern int dword_B70690; // weak
extern int dword_B70694; // weak
extern int dword_B70698; // weak
extern int dword_B7069C; // weak
extern int dword_B706A0; // weak
extern int dword_B706A4; // weak
extern int dword_B706A8; // weak
extern int dword_B706AC; // weak
extern int dword_B706B0; // weak
extern int dword_B706B4; // weak
extern int dword_B706B8; // weak
extern int dword_B706BC; // weak
extern int dword_B706C0; // weak
extern int dword_B706C4; // weak
extern unsigned int NiDX9Renderer::ms_akD3DAddressMapping; // idb
extern unsigned int uiValue; // idb
extern int dword_B706D0; // weak
extern int dword_B706D4; // weak
extern int dword_B706D8; // weak
extern int dword_B706DC; // weak
extern int dword_B706E0; // weak
extern int dword_B706E4; // weak
extern HMODULE NiDX9Renderer::ms_hDXLib; // idb
extern int NiDX9Renderer::ms_pkD3D9; // weak
extern int NiDX9Renderer::ms_pfnD3DCreate9; // weak
extern unsigned int NiDX9Renderer::ms_uiProjectedTextureFlags; // idb
extern NiDX9SystemDesc *NiDX9Renderer::ms_pkSystemDesc; // idb
extern void *NiDX9Renderer::BatchedObject::ms_pkFreeList; // idb
extern NiRTTI NiDX9Renderer::m_RTTI; // idb
extern NiDX9RendererSDM NiDX9RendererSDMObject;
extern int NiDX92DBufferData::ms_apkCurrentBuffer[]; // weak
extern int NiDX92DBufferData::ms_pkCurrentDepthStencil; // weak
extern int NiDX92DBufferData::ms_uiNumBuffers; // weak
extern char NiDX92DBufferData::ms_bIndependentBitDepths; // weak
extern NiRTTI NiDX92DBufferData::m_RTTI; // idb
extern NiRTTI NiDX9TextureBufferData::m_RTTI; // idb
extern NiRTTI NiDX9DepthStencilBufferData::m_RTTI; // idb
extern NiRTTI NiDX9ImplicitDepthStencilBufferData::m_RTTI; // idb
extern NiRTTI NiDX9AdditionalDepthStencilBufferData::m_RTTI; // idb
extern _RTL_CRITICAL_SECTION NiDX9AdditionalDepthStencilBufferData::ms_kAddDSListCriticalSection; // idb
extern int dword_B70768; // weak
extern int dword_B7076C; // weak
extern NiRTTI NiDX9OnscreenBufferData::m_RTTI; // idb
extern NiRTTI NiDX9ImplicitBufferData::m_RTTI; // idb
extern NiRTTI NiDX9SwapChainBufferData::m_RTTI; // idb
extern NiRTTI NiDX9SwapChainDepthStencilBufferData::m_RTTI; // idb
extern void *NiD3DShaderLibrary::ms_pcDirectory; // idb
extern int NiD3DShaderConstantMapEntry::ms_ausObjectFlags; // weak
extern int dword_B707A8; // weak
extern int dword_B707AC; // weak
extern int dword_B707B0; // weak
extern __int16 word_B707B4; // weak
extern NiShaderAttributeDesc::ObjectType NiD3DShaderConstantMapEntry::ms_aeObjectType; // idb
extern int dword_B707BC; // weak
extern int dword_B707C0; // weak
extern int dword_B707C4; // weak
extern int dword_B707C8; // weak
extern int dword_B707CC; // weak
extern int dword_B707D0; // weak
extern int dword_B707D4; // weak
extern int dword_B707D8; // weak
extern int NiD3DShaderConstantMapEntry::ms_aucAttribFlags; // weak
extern _UNKNOWN unk_B707E0; // weak
extern char byte_B707E3; // weak
extern _UNKNOWN unk_B707E4; // weak
extern char byte_B707E5; // weak
extern __int16 word_B707E8; // weak
extern NiShaderAttributeDesc::AttributeType NiD3DShaderConstantMapEntry::ms_aeAttribType; // idb
extern int dword_B707F0; // weak
extern int dword_B707F4; // weak
extern int dword_B707F8; // weak
extern int dword_B707FC; // weak
extern int dword_B70800; // weak
extern int dword_B70804; // weak
extern int dword_B70808; // weak
extern int dword_B7080C; // weak
extern int dword_B70810; // weak
extern int dword_B70814; // weak
extern int dword_B70818; // weak
extern int dword_B7081C; // weak
extern int dword_B70820; // weak
extern char NiD3DShaderConstantMapEntry::ms_bAttribTableInitialized; // weak
extern char NiD3DShaderConstantMapEntry::ms_bObjectTableInitialized; // weak
extern _UNKNOWN NiD3DSCM_Vertex::ms_afObjectData; // weak
extern int NiD3DShaderProgramCreator::ms_uiUniversalShaderCreationFlags; // weak
extern int NiD3DShaderProgramCreator::ms_pkD3DDevice; // weak
extern NiDX9Renderer *NiD3DShaderProgramCreator::ms_pkD3DRenderer; // idb
extern int NiD3DShaderFactory::ms_uiNewShaderValue; // weak
extern int NiD3DShaderFactory::ms_pkD3DShaderFactory; // weak
extern int NiD3DShaderConstantMap::ms_bMappingValue; // weak
extern int NiD3DShaderConstantMap::ms_aiMappingValue; // weak
extern int dword_B70898; // weak
extern int dword_B7089C; // weak
extern int dword_B708A0; // weak
extern float NiD3DShaderConstantMap::ms_vMappingValue; // weak
extern float flt_B708A8; // weak
extern float flt_B708AC; // weak
extern float flt_B708B0; // weak
extern float NiD3DShaderConstantMap::ms_mMappingValue; // weak
extern float flt_B708BC; // weak
extern float flt_B708C0; // weak
extern float flt_B708C4; // weak
extern float flt_B708C8; // weak
extern float flt_B708CC; // weak
extern float flt_B708D0; // weak
extern float flt_B708D4; // weak
extern float flt_B708D8; // weak
extern float flt_B708DC; // weak
extern float flt_B708E0; // weak
extern float flt_B708E4; // weak
extern float flt_B708E8; // weak
extern float flt_B708EC; // weak
extern float flt_B708F0; // weak
extern float flt_B708F4; // weak
extern float NiD3DShaderConstantMap::ms_kD3DMat[]; // weak
extern float flt_B70904[]; // weak
extern float flt_B70908[]; // weak
extern float flt_B7090C[]; // weak
extern float flt_B70910[]; // weak
extern float flt_B70914[]; // weak
extern float flt_B70918[]; // weak
extern float flt_B7091C[]; // weak
extern float flt_B70920[]; // weak
extern float flt_B70924[]; // weak
extern float flt_B70928[]; // weak
extern float flt_B7092C[]; // weak
extern float flt_B70930[]; // weak
extern float flt_B70934[]; // weak
extern float flt_B70938[]; // weak
extern float flt_B7093C[]; // weak
extern _UNKNOWN unk_B70940; // weak
extern float NiD3DShaderConstantMap::ms_kD3DVector4[]; // weak
extern float flt_B70984[]; // weak
extern float flt_B70988[]; // weak
extern float flt_B7098C[]; // weak
extern float flt_B70990; // weak
extern float flt_B70994; // weak
extern float flt_B70998; // weak
extern float flt_B7099C; // weak
extern _UNKNOWN NiD3DShaderConstantMap::ms_kD3DMatResult; // weak
extern float NiD3DShaderConstantMap::ms_kD3DVector4Result; // weak
extern float flt_B709E4; // weak
extern float flt_B709E8; // weak
extern float flt_B709EC; // weak
extern char NiD3DErrorSettings::ms_bAllowDynEffectNotFound; // weak
extern NiRTTI NiD3DController::m_RTTI; // idb
extern NiRTTI NiD3DTimeSyncController::m_RTTI; // idb
extern float NiDX9LightManager::LightEntry::ms_fRangeMax; // weak
extern int NiDX9SourceTextureData::ms_uiSkipLevels; // weak
extern NiRTTI NiDX9Direct3DTexture::m_RTTI; // idb
extern char NiDX9RendererSDM::ms_bInitialized; // weak
extern int siCounter_7;
extern int NiD3DShaderDeclaration::ms_auiTypeSizes[]; // weak
extern int dword_B70A2C; // weak
extern int dword_B70A30; // weak
extern int dword_B70A34; // weak
extern int dword_B70A38; // weak
extern int dword_B70A3C; // weak
extern int dword_B70A40; // weak
extern int dword_B70A44; // weak
extern int dword_B70A48; // weak
extern int dword_B70A4C; // weak
extern int dword_B70A50; // weak
extern int dword_B70A54; // weak
extern int dword_B70A58; // weak
extern int dword_B70A5C; // weak
extern int dword_B70A60; // weak
extern int dword_B70A64; // weak
extern int dword_B70A68; // weak
extern NiTArray<NiVBBlock *> *NiD3DShaderDeclaration::ms_pkPackFunctions; // idb
extern NiVBBlock *NiVBSet::ms_pkBlockDump; // idb
extern int NiUnsharedGeometryGroup::ms_pkGroup; // weak
extern int NiDynamicGeometryGroup::ms_pkGroup; // weak
extern NiD3DShaderProgramCreator *NiD3DShaderProgramCreatorHLSL::ms_pkCreator; // idb
extern NiD3DShaderProgramCreator *NiD3DShaderProgramCreatorAsm::ms_pkCreator; // idb
extern NiD3DShaderProgramCreator *NiD3DShaderProgramCreatorObj::ms_pkCreator; // idb
extern void *NiVBBlock::ms_pkChipDump; // idb
extern std::nothrow_t std::nothrow; // idb
extern NiRTTI NiSCMExtraData::m_RTTI; // idb
extern NiRTTI NiRenderedCubeMap::m_RTTI; // idb
extern NiRTTI NiCursor::m_RTTI; // idb
extern int NSBUtility::ms_pkD3DRenderer; // weak
extern NiRTTI NiBinaryShader::m_RTTI; // idb
extern _UNKNOWN NiD3DSCM_Pixel::ms_afObjectData; // weak
extern int _debugger_hook_dummy; // weak
extern PVOID _pmatherr; // idb
extern int __use_sse2_mathfcns; // weak
extern UINT _nhandle; // idb
extern int __pioinfo[]; // weak
extern _UNKNOWN unk_B70B24; // weak
extern int __sse2_available; // weak
extern int _acmdln; // weak
extern void *__piob; // idb
extern unsigned int _nstream; // idb
extern int __env_initialized; // weak
extern PVOID __onexitend; // idb
extern PVOID __onexitbegin; // idb
extern int __mbctype_initialized; // weak
extern _UNKNOWN unk_B7200C; // weak
extern _UNKNOWN unk_B72024; // weak
extern _UNKNOWN unk_B7203C; // weak
extern _UNKNOWN unk_B72054; // weak
extern int (__stdcall *off_B721EC[3])(int); // weak
extern char aUnknownErrorCo[19]; // weak
extern char LibFileName[]; // idb
extern char ProcName[]; // idb
extern char aPeekmessagea[]; // idb
extern char aPostquitmessag[]; // idb
extern char aWsprintfa[]; // idb
extern char aAdvapi32[]; // idb
extern char aRegopenkeyexa[]; // idb
extern char aRegqueryvaluee[]; // idb
extern char aRegclosekey[]; // idb
extern _UNKNOWN unk_B7282C; // weak
extern _UNKNOWN unk_B72C80; // weak
extern _UNKNOWN unk_B72D40; // weak
extern _UNKNOWN unk_B72E00; // weak
extern _UNKNOWN unk_B72E40; // weak
extern _UNKNOWN unk_B72E80; // weak
extern _UNKNOWN unk_B72E90; // weak
extern _UNKNOWN unk_B72E9C; // weak
extern _UNKNOWN unk_B72EAC; // weak
extern _UNKNOWN unk_B72EBC; // weak
extern _UNKNOWN unk_B72EC8; // weak
extern int izigzag_index[]; // weak
extern int dword_B72EE4[]; // weak
extern int dword_B72EE8[]; // weak
extern int dword_B72EEC[]; // weak
extern int onlynbits[]; // weak
extern _WORD lowest_coef[32]; // idb
extern int twoexpnminusone[]; // weak
extern _UNKNOWN unk_B7314C; // weak
extern _UNKNOWN unk_B73164; // weak
extern int dword_B73220[]; // weak
extern int dword_B73224[]; // weak
extern double dbl_B73340[]; // weak
extern double dbl_B73348[]; // weak
extern double dbl_B73350[]; // weak
extern double dbl_B73358[]; // weak
extern double dbl_B73540; // weak
extern double dbl_B73548; // weak
extern double dbl_B73550; // weak
extern char byte_B73560[]; // weak
extern char byte_B73660[]; // weak
extern _DWORD dword_B738E0[4]; // idb
extern _UNKNOWN unk_B738F0; // weak
extern _UNKNOWN unk_B738F8; // weak
extern _UNKNOWN unk_B73908; // weak
extern _UNKNOWN unk_B73910; // weak
extern _UNKNOWN unk_B73920; // weak
extern _UNKNOWN unk_B73928; // weak
extern _UNKNOWN unk_B73938; // weak
extern int dword_B73948; // weak
extern int dword_B7394C; // weak
extern int dword_B73950; // weak
extern int dword_B73954; // weak
extern int dword_B73958; // weak
extern int dword_B7395C; // weak
extern int dword_B73960; // weak
extern int dword_B73964; // weak
extern int dword_B73968; // weak
extern int dword_B7396C; // weak
extern int dword_B73970; // weak
extern int dword_B73974; // weak
extern int dword_B73978; // weak
extern int dword_B7397C; // weak
extern int dword_B73980; // weak
extern int dword_B73984; // weak
extern int dword_B73988; // weak
extern int dword_B7398C; // weak
extern int dword_B73990; // weak
extern int dword_B73994; // weak
extern int dword_B73998; // weak
extern int dword_B7399C; // weak
extern int dword_B739A0; // weak
extern int dword_B739A4; // weak
extern int dword_B739A8; // weak
extern int dword_B739AC; // weak
extern int dword_B739B0; // weak
extern int dword_B739B4; // weak
extern int dword_B739B8; // weak
extern int dword_B739BC; // weak
extern int dword_B739C0; // weak
extern int dword_B739C4; // weak
extern int dword_B739C8; // weak
extern int dword_B739CC; // weak
extern int dword_B739D0; // weak
extern int dword_B739D4; // weak
extern int dword_B739D8; // weak
extern int dword_B739DC; // weak
extern int dword_B739E0; // weak
extern int dword_B739E4; // weak
extern int dword_B739E8; // weak
extern int dword_B739EC; // weak
extern int dword_B739F0; // weak
extern int dword_B739F4; // weak
extern int dword_B739F8; // weak
extern int dword_B739FC; // weak
extern int dword_B73A00; // weak
extern int dword_B73A04; // weak
extern int dword_B73A08; // weak
extern int dword_B73A0C; // weak
extern int dword_B73A10; // weak
extern int dword_B73A14; // weak
extern int dword_B73A18; // weak
extern int dword_B73A1C; // weak
extern int dword_B73A20; // weak
extern int dword_B73A24; // weak
extern int dword_B73A28; // weak
extern int dword_B73A2C; // weak
extern int dword_B73A30; // weak
extern int dword_B73A34; // weak
extern int dword_B73A38; // weak
extern int dword_B73A3C; // weak
extern int dword_B73A40; // weak
extern int dword_B73A44; // weak
extern int dword_B73A48; // weak
extern int dword_B73A4C; // weak
extern int dword_B73A50; // weak
extern int dword_B73A54; // weak
extern int dword_B73A58; // weak
extern int dword_B73A5C; // weak
extern int dword_B73A60; // weak
extern int dword_B73A64; // weak
extern int dword_B73A68; // weak
extern int dword_B73A6C; // weak
extern int dword_B73A70; // weak
extern int dword_B73A74; // weak
extern _UNKNOWN unk_B73AAC; // weak
extern _UNKNOWN unk_B73AC4; // weak
extern _UNKNOWN unk_B73ADC; // weak
extern _UNKNOWN unk_B73B0C; // weak
extern char aIntelRJpegLibr[34]; // weak

//-------------------------------------------------------------------------
// Function declarations

#define __thiscall __cdecl // Test compile in C mode

void __thiscall AnimationMD5Checksum::AnimationMD5Checksum(AnimationMD5Checksum *this);
void __cdecl AnimationMD5Checksum::CheckAniFileMD5(Name8 MD5Hash, Name8 Subdir, Name60Byte FileName);
void __thiscall std::bad_alloc::_bad_alloc(std::bad_alloc *this);
void *__thiscall std::bad_alloc::_vector_deleting_destructor_(std::bad_alloc *this, unsigned int);
char *__cdecl Folder::Character();
char *__cdecl Folder::Merge(char *pcPath, char *pcFile);
const char *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::c_str(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this);
void __thiscall std::bad_alloc::bad_alloc(std::bad_alloc *this, std::bad_alloc *__that);
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Tidy(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, bool _Built, unsigned int _Newsize);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _Count);
char *__thiscall std::allocator<char>::allocate(std::allocator<char> *this, unsigned int _Count);
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Newsize, unsigned int _Oldlen);
bool __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Grow(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Newsize, bool _Trim);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Count);
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr);
void __thiscall Argv::_Argv(Argv *this);
char *__thiscall Argv::GetMerge(Argv *this, char *filename);
void __thiscall Argv::Init(Argv *this);
void __thiscall Argv::Argv(Argv *this);
void *__thiscall Argv::_vector_deleting_destructor_(Argv *this, unsigned int);
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Count);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr);
void __thiscall BoxAnnounceWin::BoxAnnounceWin(BoxAnnounceWin *this);
void __thiscall BoxAnnounceWin::_BoxAnnounceWin(BoxAnnounceWin *this);
void __thiscall BoxAnnounceWin::SetMsg(BoxAnnounceWin *this, const char *pcMsg);
bool __thiscall BoxAnnounceWin::Create(BoxAnnounceWin *this, PgFrameWork *pkFrameWork);
void __thiscall BoxAnnounceWin::UpdateMeWin(BoxAnnounceWin *this, float fCurTime);
void __thiscall BoxAnnounceWin::SetLifeTime(BoxAnnounceWin *this, float fLifeTime);
BoxAnnounceWin *__cdecl BoxAnnounceWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall NiRefObject::DecRefCount(NiRefObject *this);
bool __thiscall NiObject::IsKindOf(NiObject *this, NiRTTI *pkRTTI);
void __thiscall NiAVObject::SetAppCulled(NiAVObject *this, bool bAppCulled);
void __cdecl PgScreenXY::GetBoxClipLeftTop(unsigned int uiScreenCx, unsigned int uiScreenCy, unsigned int uiBoxCx, unsigned int uiBoxCy, float fCenterXRate, float fCenterYRate, int *iBoxLeft, int *iBoxTop);
NiRTTI *__thiscall PgWin::GetRTTI(PgWin *this);
void __thiscall PgWin::SetWinName(PgWin *this, const char *pcWinText);
unsigned int __thiscall PgWin::GetWidth(PgWin *this);
unsigned int __thiscall PgWin::GetHeight(PgWin *this);
void __thiscall PgWinSpr::SetWidth(PgWinSpr *this, unsigned int uiWidth);
void __thiscall PgWin::GetWinSize(PgWin *this, unsigned int *uiWidth, unsigned int *uiHeight);
void __thiscall PgWin::GetWinRect(PgWin *this, tagRECT *kRect);
void __thiscall PgWin::GetWinRect(PgWin *this, NiRect<int> *kRect);
int __thiscall PgWin::GetLeftPos(PgWin *this);
int __thiscall PgWin::GetRightPos(PgWin *this);
int __thiscall PgWin::GetTopPos(PgWin *this);
int __thiscall PgWin::GetBottomPos(PgWin *this);
int __thiscall PgWin::GetXPos(PgWin *this);
int __thiscall PgWin::GetYPos(PgWin *this);
void __thiscall PgWin::SetXPos(PgWin *this, int iXPos);
void __thiscall PgWin::SetYPos(PgWin *this, int iYPos);
void __thiscall PgWin::GetWinPos(PgWin *this, int *iXPos, int *iYPos);
void __thiscall PgWin::GetWinScreenRect(PgWin *this, tagRECT *kRect);
void __thiscall PgWin::ClientToScreen(PgWin *this, int *iClientX, int *iClientY);
void __thiscall PgWin::ScreenToClient(PgWin *this, int *iScreenX, int *iScreenY);
void __thiscall PgWin::Enable(PgWin *this, bool b);
bool __thiscall PgWin::GetEnable(PgWin *this);
void __thiscall PgWin::Show(PgWin *this, bool b);
bool __thiscall PgWin::GetShow(PgWin *this);
void __thiscall PgWin::SetScale(PgWin *this, float fScale);
float __thiscall PgWin::GetScale(PgWin *this);
void __thiscall PgWin::SetZRotate(PgWin *this, float fangle);
void __thiscall PgWin::SetRotate(PgWin *this, NiMatrix3 *kMat);
void __thiscall PgWin::SetExtStyle(PgWin *this, unsigned int uiExtstyle);
unsigned int __thiscall PgWin::GetExtStyle(PgWin *this);
void __thiscall PgWin::MoveWin(PgWin *this, int iXPos, int iYPos);
bool __thiscall PgWin::HitTestEx(PgWin *this, int iSx, int iSy);
bool __thiscall PgWin::HitTest(PgWin *this, int iSx, int iSy);
bool __thiscall PgWin::HitTest(PgWin *this, int iSx, int iSy, int *iClientAreaX, int *iClientAreaY);
bool __thiscall PgWin::ProcessMeDrop(PgWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
bool __thiscall PgWin::GetRegisterFirstHit(PgWin *this);
void __thiscall PgWin::SetRegisterFirstHit(PgWin *this, bool b);
bool __thiscall PgSprData::PgHitTester::HitTest(PgSprData::PgHitTester *this, int iXPos, int iYPos);
unsigned int __thiscall PgWinSpr::GetSelectSprIndex(PgWinSpr *this);
void __thiscall PgWinFrame::SetMovable(PgWinFrame *this, bool b);
bool __thiscall PgWinFrame::GetMovable(PgWinFrame *this);
void *__thiscall BoxAnnounceWin::_scalar_deleting_destructor_(BoxAnnounceWin *this, unsigned int);
bool __cdecl NiObject::IsKindOf(NiRTTI *pkRTTI, NiObject *pkObject);
PgWin *__thiscall PgWin::GetParentWin(PgWin *this);
PgWin *__thiscall PgWin::GetNextChildWin(PgWin *this, unsigned int *uiPos);
void __thiscall PgWin::GetWinRectWithChild(PgWin *this, NiRect<int> *kRect);
void __thiscall PgWin::GetWinScreenPos(PgWin *this, int *iSx, int *iSy);
void __thiscall PgWin::InitPos(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate);
void __thiscall PgWin::InitPos(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, int iXPos, float fYPosRate);
void __thiscall PgWin::InitPos(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, int iYPos);
void __thiscall PgWin::EnableChildWin(PgWin *this, bool b);
bool __thiscall PgWin::IsInputPossible(PgWin *this);
bool __thiscall PgWinSpr::HitTest(PgWinSpr *this, int iSx, int iSy);
bool __thiscall PgWinSpr::HitTest(PgWinSpr *this, int iSx, int iSy, int *iClientAreaX, int *iClientAreaY);
unsigned int __thiscall PgWinSpr::GetWidth(PgWinSpr *this);
unsigned int __thiscall PgWinSpr::GetHeight(PgWinSpr *this);
void __thiscall PgWin::SetHeight(PgWinSpr *this, unsigned int uiHeight);
unsigned int __thiscall PgWinSpr::GetChangedWidth(PgWinSpr *this);
unsigned int __thiscall PgWinSpr::GetChangedHeight(PgWinSpr *this);
void __thiscall PgWinSpr::ChangeWidth(PgWinSpr *this, unsigned int uiWidth);
void __thiscall PgWinSpr::ChangeHeight(PgWinSpr *this, unsigned int uiHeight);
void __thiscall PgWinSpr::ResetChangedWidth(PgWinSpr *this);
void __thiscall PgWinSpr::ResetChangedHeight(PgWinSpr *this);
void __thiscall PgWinSpr::ChangeWidthWithUV(PgWinSpr *this, unsigned int uiWidth, bool bReverse);
void __thiscall PgWinSpr::ChangeHeightWithUV(PgWinSpr *this, unsigned int uiHeight, bool bReverse);
void __thiscall PgWinSpr::SetTexture(PgWinSpr *this, NiTexture *pkTexture);
NiTexture *__thiscall PgWinSpr::GetTexture(PgWinSpr *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::FindPos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, PgWin *const *element, void *kStart);
void __thiscall NiAVObject::AttachProperty(NiAVObject *this, NiProperty *pkProperty);
bool __thiscall PgWinMgr::Add(PgWinMgr *this, PgWin *pkWin);
void __thiscall PgWin::SetAlpha(PgWin *this, float fAlpha);
float __thiscall PgWin::GetAlpha(PgWin *this);
NiPointer<PgWin> *__thiscall PgWinMgr::Remove(PgWinMgr *this, NiPointer<PgWin> *result, PgWin *pkWin);
void __thiscall CameraCtrl::InitDirection(CameraCtrl *this, NiPoint3 kUpDir, NiPoint3 kRightDir, NiPoint3 kFrontDir);
void __thiscall CameraCtrl::InitZoomMinMax(CameraCtrl *this, const float fZoomMin, const float fZoomMax);
float __thiscall CameraCtrl::GetZoom(CameraCtrl *this);
void __thiscall CameraCtrl::SetLookAtPos(CameraCtrl *this, NiPoint3 *kPos);
void __thiscall CameraCtrl::GetLookAtPos(CameraCtrl *this, NiPoint3 *kPos);
void __thiscall CameraCtrl::SetZoomRatePerTick(CameraCtrl *this, float fRate);
void __thiscall CameraCtrl::SetZoomMin(CameraCtrl *this, float fMin);
void __thiscall CameraCtrl::SetZoomMax(CameraCtrl *this, float fMax);
void __thiscall CameraCtrl::SetZoomDef(CameraCtrl *this, float fDef);
void __thiscall CameraCtrl::Update(CameraCtrl *this, float fTime);
void __thiscall CameraCtrl::AutoRotate(CameraCtrl *this, float fAngle, float fMsDeltaX);
void __thiscall CameraCtrl::ChangeCheckRayTile(CameraCtrl *this);
void __thiscall CameraCtrl::SetZoom(CameraCtrl *this, float fZoom);
void __thiscall CameraCtrl::AddZoom(CameraCtrl *this, int iMsDeltaZ);
void __thiscall CameraCtrl::AddRotate(CameraCtrl *this, int iMsDeltaX, int iMsDeltaY);
void __thiscall CameraCtrl::AddRotate(CameraCtrl *this, float fDeltaX, float fDeltaY);
void __thiscall CameraCtrl::CameraCtrl(CameraCtrl *this);
void __thiscall CameraCtrl::_CameraCtrl(CameraCtrl *this);
void __thiscall CameraCtrl::CalCulateCamera(CameraCtrl *this, NiPoint3 *kCameraPos);
void __thiscall CameraCtrl::AddTraceRotate(CameraCtrl *this, int iMsDeltaX);
NiPoint3 *__thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt);
void __thiscall NiMatrix3::MakeRotation(NiMatrix3 *this, float fAngle, NiPoint3 *axis);
std::_List_nod<float,std::allocator<float> >::_Node *__thiscall std::_List_val<float_std::allocator<float>>::_Buynode(std::_List_val<float,std::allocator<float> > *this, std::_List_nod<float,std::allocator<float> >::_Node *_Next, std::_List_nod<float,std::allocator<float> >::_Node *_Prev, const float *_Val);
void *__thiscall CameraCtrl::_scalar_deleting_destructor_(CameraCtrl *this, unsigned int);
unsigned int __cdecl cAntiCheat::CRC32(const char *data, unsigned int size);
void __cdecl cAntiCheat::KillFO();
int __cdecl cAntiCheat::ComputeCRC();
void __stdcall cAntiCheat::CRCCheck(int a1);
int __cdecl cAntiCheat::CompareAgainstHashes(std::basic_string<char,std::char_traits<char>,std::allocator<char> > toCompare);
int __stdcall cAntiCheat::EnumChildProc(HWND__ *hwnd, int lParam);
int __stdcall cAntiCheat::EnumWindowsProc(HWND__ *hWnd, int lParam);
void __stdcall cAntiCheat::EnumCheck(int a1);
char *__cdecl Folder::Menu();
char *__thiscall CharCreateClassWin::GetAvatarCreateName(CharCreateClassWin *this);
void __thiscall CharCreateClassWin::KillFocus(CharCreateClassWin *this);
void __thiscall CharCreateClassWin::SetFocus(CharCreateClassWin *this);
void __thiscall CharCreateClassWin::ClearNameEditBox(CharCreateClassWin *this);
void __thiscall CharCreateClassWin::Show(CharCreateClassWin *this, bool b);
void __thiscall CharCreateClassWin::SetSentinelButEnable(CharCreateClassWin *this, bool bEnable);
void __thiscall CharCreateClassWin::_CharCreateClassWin(CharCreateClassWin *this);
void __thiscall CharCreateClassWin::OnSetClass(CharCreateClassWin *this, unsigned int uiClass);
void __thiscall CharCreateClassWin::CharCreateClassWin(CharCreateClassWin *this);
bool __thiscall CharCreateClassWin::Create(CharCreateClassWin *this, PgFrameWork *pkFrameWork);
void __thiscall CharCreateClassWin::OnCommand(CharCreateClassWin *this, unsigned int wParam, int lParam);
CharCreateClassWin *__cdecl CharCreateClassWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this);
void __thiscall NiTMap<unsigned_long_NiPointer<PgWinBut>>::_NiTMap<unsigned_long_NiPointer<PgWinBut>>(NiTMap<unsigned long,NiPointer<PgWinBut> > *this);
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this, unsigned int);
char *__cdecl TextData3::Get(unsigned int eTextID);
void *__thiscall NiTMap<unsigned_long_NiPointer<PgWinBut>>::_vector_deleting_destructor_(NiTMap<unsigned long,NiPointer<PgWinBut> > *this, unsigned int);
void *__thiscall CharCreateClassWin::_scalar_deleting_destructor_(CharCreateClassWin *this, unsigned int);
void __thiscall CharCreateDescritWin::SetClass(CharCreateDescritWin *this, char kClass);
void __thiscall CharCreateDescritWin::OnCommand(CharCreateDescritWin *this, unsigned int wParam, int lParam);
void __thiscall CharCreateDescritWin::UpdateMeWin(CharCreateDescritWin *this, float fCurTime);
void __thiscall CharCreateDescritWin::UpdateSlideBar(CharCreateDescritWin *this);
void __thiscall CharCreateDescritWin::SetTree(CharCreateDescritWin *this, char kClass);
void __thiscall CharCreateDescritWin::_CharCreateDescritWin(CharCreateDescritWin *this);
void __thiscall CharCreateDescritWin::CharCreateDescritWin(CharCreateDescritWin *this);
void __thiscall CharCreateDescritWin::SetMark(CharCreateDescritWin *this, char kClass);
void __thiscall CharCreateDescritWin::SetTreeText(CharCreateDescritWin *this, char kClass);
CharCreateDescritWin *__cdecl CharCreateDescritWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall CharCreateDescritWin::AddTextWithSplit(CharCreateDescritWin *this, char *pcText);
void __thiscall CharCreateDescritWin::SetDescription(CharCreateDescritWin *this, char kClass);
void __thiscall CharCreateDescritWin::UpdateView(CharCreateDescritWin *this);
bool __thiscall CharCreateDescritWin::Create(CharCreateDescritWin *this, PgFrameWork *pkFrameWork);
void __thiscall boost::detail::sp_counted_base::weak_release(boost::detail::sp_counted_base *this);
char __cdecl CharClass::GetBaseClassID(char kClassID);
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> > *this);
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> > *this, unsigned int);
void __thiscall boost::detail::sp_counted_base::release(boost::detail::sp_counted_base *this);
boost::detail::shared_count *__thiscall boost::detail::shared_count::operator_(boost::detail::shared_count *this, boost::detail::shared_count *r);
PgWinText *__thiscall SlideListWin::GetTextWin(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn);
char *__cdecl TextData2::Get(unsigned int eTextID);
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Chassign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _Count, char _Ch);
void __thiscall boost::shared_ptr<SLWCreateInfo::Item>::_shared_ptr<SLWCreateInfo::Item>(boost::shared_ptr<PgNsTerrain::CPgBlockObject> *this);
void *__thiscall NiTMap<unsigned_long_NiPointer<PgWinSpr>>::_scalar_deleting_destructor_(NiTMap<unsigned long,NiPointer<PgWinSpr> > *this, unsigned int);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::allocate(std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *this, unsigned int _Count);
char *__cdecl CharClass::GetLocalName(char kClassID);
boost::shared_ptr<SLWCreateInfo::Item> *__cdecl std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(boost::shared_ptr<SLWCreateInfo::Item> *_First, boost::shared_ptr<SLWCreateInfo::Item> *_Last, boost::shared_ptr<SLWCreateInfo::Item> *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void *__thiscall CharCreateDescritWin::_scalar_deleting_destructor_(CharCreateDescritWin *this, unsigned int);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Count, char _Ch);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
void __cdecl std::_Destroy_range<std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_First, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Last, std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::_Uninit_move<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_First, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Last, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Dest, std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Al, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall SLWCreateInfo::_SLWCreateInfo(SLWCreateInfo *this);
void __thiscall SLWCreateInfo::Clear(SLWCreateInfo *this);
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::reserve(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, unsigned int _Count);
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Reserve(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, unsigned int _Count);
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val);
// bool __usercall IsSpecialChar<al>(char c1<bl>, char c2);
// bool __usercall IsSpecialCharInStr<al>(char *pstr<eax>);
// bool __usercall IsSpecialCharInStr2<al>(char *pstr<ecx>);
// bool __usercall IsPeculiarStr<al>(char *pcName<esi>);
void __thiscall CharCreateFrameWork::CreateCancel(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ChangeAvatarFace(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ChangeAvatarHair(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ChangeAvatarHairColor(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::OnInitializeStatus(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::OnErrorGotoAccount(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::SetClass(CharCreateFrameWork *this, char kClass);
void __thiscall CharCreateFrameWork::ActPos(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ActStand(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ActNormalStand(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::Draw(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ProcessMsg(CharCreateFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall CharCreateFrameWork::Reset(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::TurnRight(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::TurnLeft(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ApplyTerrain(CharCreateFrameWork *this, NiNode *pkGroundNode);
void __thiscall CharCreateFrameWork::RenderShadow(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::Update(CharCreateFrameWork *this, float fCurTime);
void __thiscall CharCreateFrameWork::SetAvatarEquiq(CharCreateFrameWork *this, ChrClassType eClassType, int iMale);
void __thiscall CharCreateFrameWork::Refresh(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ChangeAvatarClass(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ChangeAvatarGender(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::CreateOk(CharCreateFrameWork *this);
int __cdecl std::char_traits<char>::compare(const char *_First1, const char *_First2, unsigned int _Count);
void __thiscall Name5::operator_(Name5 *this, const char *nm);
unsigned int __cdecl ITableBase<ChrCreateEquip_ChrCreateEquipTab>::GetTotal();
char *__cdecl TextData::Get(unsigned int eTextID);
void __thiscall NsDecal::SetObjectTerrain(NsDecal *this, NiNode *_spTerrain);
int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, const char *_Ptr, unsigned int _Count);
ChrCreateEquip *__cdecl ChrCreateEquipTab::GetByIndex(ChrClassType eClassType, int iMale);
int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
unsigned int __thiscall stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::operator__(stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval);
bool __thiscall std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
void __cdecl FaceInfoTab::GetEquipableFace(char ucGrade, void *padwResult);
void __cdecl HairInfoTab::GetEquipableHairType(char kClassID, char ucGender, char ucUsableGrade, void *padwResult);
ItemInfo *__cdecl ItemInfoTab::GetByInxName(char *pcInxName);
void __thiscall CharCreateInfoWin::OnCmdSexL(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::OnCmdSexR(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::_CharCreateInfoWin(CharCreateInfoWin *this);
bool __thiscall CharCreateInfoWin::Create(CharCreateInfoWin *this, PROTO_AVATAR_SHAPE_INFO *pkShapeInfo, PgFrameWork *pkFrameWork);
void __thiscall CharCreateInfoWin::CharCreateInfoWin(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::UpdateMeWin(CharCreateInfoWin *this, float fCurTime);
CharCreateInfoWin *__cdecl CharCreateInfoWin::CreateWin(PROTO_AVATAR_SHAPE_INFO *pkShapeInfo, PgFrameWork *pkFrameWork);
void __thiscall CharCreateInfoWin::OnCmdFaceL(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::OnCmdFaceR(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::OnCmdHairL(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::OnCmdHairR(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::OnCmdColorL(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::OnCmdColorR(CharCreateInfoWin *this);
void __thiscall CharCreateInfoWin::OnCommand(CharCreateInfoWin *this, unsigned int wParam, int lParam);
HairInfo *__cdecl HairInfoTab::GetHairInfo(char byHairID);
void *__thiscall CharCreateInfoWin::_vector_deleting_destructor_(CharCreateInfoWin *this, unsigned int);
void __cdecl HairColorInfoTab::GetEquipableHairColor(char ucGrade, void *padwResult);
NiRTTI *__thiscall NiProperty::GetRTTI(NiProperty *this);
void __thiscall NiLight::SetAmbientColor(NiLight *this, NiColor *color);
void __thiscall NiLight::SetDiffuseColor(NiLight *this, NiColor *color);
void __thiscall NiLight::SetSpecularColor(NiLight *this, NiColor *color);
void __thiscall NiAlphaProperty::SetBit(NiAlphaProperty *this, bool bVal, unsigned __int16 uMask);
void __thiscall NiVertexColorProperty::NiVertexColorProperty(NiVertexColorProperty *this);
NiRTTI *__thiscall NiVertexColorProperty::GetRTTI(NiVertexColorProperty *this);
int __thiscall NiVertexColorProperty::Type(NiVertexColorProperty *this);
void __thiscall IDirectMessenger::SendDirectMessage(IDirectMessenger *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall PgFrameWork::Init(PgFrameWork *this, PgMsg::Frame *pkFrameMsg);
void __thiscall PgFrameWork::Terminate(PgFrameWork *this);
PgWinMgr::PgWinMsg *__thiscall PgTQueue<PgWinMgr::PgWinMsg>::Remove(PgTQueue<PgWinMgr::PgWinMsg> *this, PgWinMgr::PgWinMsg *result);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *this, unsigned int);
void __thiscall NiCriticalSection::Unlock(NiCriticalSection *this);
void __thiscall NiTPointerAllocator<unsigned_int>::Deallocate(NiTPointerAllocator<unsigned int> *this, void *pkDel);
int __cdecl NiTAbstractPoolAllocator<unsigned_int>::CreateFreeMem();
void __thiscall NiAlphaProperty::NiAlphaProperty(NiAlphaProperty *this);
NiRTTI *__thiscall NiAlphaProperty::GetRTTI(NiAlphaProperty *this);
void __thiscall NiAlphaProperty::_NiAlphaProperty(NiAlphaProperty *this);
NiRTTI *__thiscall NiFogProperty::GetRTTI(NiFogProperty *this);
unsigned __int16 __thiscall NiPSysEmitterCtlr::GetInterpolatorCount(NiPSysEmitterCtlr *this);
NiRTTI *__thiscall PgFrameWork::GetRTTI(PgFrameWork *this);
void __thiscall PgFrameWork::Update(PgFrameWork *this, float fCurTime);
const char *__thiscall PgFrameWork::GetFrameWorkName(PgFrameWork *this);
void __thiscall PgFrameWork::_PgFrameWork(PgFrameWork *this);
void *__thiscall PgFrameWork::_scalar_deleting_destructor_(PgFrameWork *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *this, unsigned int);
void __thiscall NiTPointerList<NiPointer<Shadow>>::_NiTPointerList<NiPointer<Shadow>>(NiTPointerList<NiPointer<Shadow> > *this);
void *__thiscall NiTPointerAllocator<unsigned_int>::Allocate(NiTPointerAllocator<unsigned int> *this);
void __thiscall CharCreateFrameWork::TerminateWindow(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::TerminateBackgroundScene(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::TerminateAvatar(CharCreateFrameWork *this);
bool __thiscall CharCreateFrameWork::InitNet(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::TerminateNet(CharCreateFrameWork *this);
bool __thiscall CharCreateFrameWork::InitShadow(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::CharCreateFrameWork(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::_CharCreateFrameWork(CharCreateFrameWork *this);
bool __thiscall CharCreateFrameWork::InitBackgroundScene(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::ReleaseShadow(CharCreateFrameWork *this);
void __thiscall CharCreateFrameWork::Terminate(CharCreateFrameWork *this);
bool __thiscall CharCreateFrameWork::InitWindow(CharCreateFrameWork *this);
bool __thiscall CharCreateFrameWork::InitAvatar(CharCreateFrameWork *this);
bool __thiscall CharCreateFrameWork::Init(CharCreateFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall PgTList<NiPointer<Shadow>>::_PgTList<NiPointer<Shadow>>(PgTList<NiPointer<Shadow> > *this);
void *__thiscall PgTList<NiPointer<Shadow>>::_vector_deleting_destructor_(PgTList<NiPointer<Shadow> > *this, unsigned int);
NiRTTI *__thiscall CharCreateFrameWork::GetRTTI(CharCreateFrameWork *this);
const char *__thiscall CharCreateFrameWork::GetFrameWorkName(CharCreateFrameWork *this);
void *__thiscall CharCreateFrameWork::_vector_deleting_destructor_(CharCreateFrameWork *this, unsigned int);
int __thiscall CharCreateFrameWork::On_NC_AVATAR_CREATESUCC_ACK(CharCreateFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharCreateFrameWork::On_NC_USER_CONNECTCUT_CMD(CharCreateFrameWork *this, int iRevBytes, void *pvData);
void __thiscall CharCreateFrameWork::NcAvatarCreateReq(CharCreateFrameWork *this);
int __thiscall CharCreateFrameWork::On_NC_AVATAR_CREATEFAIL_ACK(CharCreateFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharCreateFrameWork::ProcessNetMsg(CharCreateFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall Name5::operator_(Name5 *this, Name5 *nm);
void __thiscall CharCreateOkCancelWin::CharCreateOkCancelWin(CharCreateOkCancelWin *this);
void __thiscall CharCreateOkCancelWin::_CharCreateOkCancelWin(CharCreateOkCancelWin *this);
void __thiscall CharCreateOkCancelWin::OnCmdOK(CharCreateOkCancelWin *this);
void __thiscall CharCreateOkCancelWin::OnCmdCancel(CharCreateOkCancelWin *this);
bool __thiscall CharCreateOkCancelWin::Create(CharCreateOkCancelWin *this, PgFrameWork *pkFrameWork);
void __thiscall CharCreateOkCancelWin::OnCommand(CharCreateOkCancelWin *this, unsigned int wParam, int lParam);
CharCreateOkCancelWin *__cdecl CharCreateOkCancelWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CharCreateOkCancelWin::_vector_deleting_destructor_(CharCreateOkCancelWin *this, unsigned int);
void __thiscall CharCreateStatWin::CharCreateStatWin(CharCreateStatWin *this);
void __thiscall CharCreateStatWin::_CharCreateStatWin(CharCreateStatWin *this);
void __thiscall CharCreateStatWin::UpdateMeWin(CharCreateStatWin *this, float fCurTime);
void __thiscall CharCreateStatWin::SetClass(CharCreateStatWin *this, char kClass);
bool __thiscall CharCreateStatWin::Create(CharCreateStatWin *this, PgFrameWork *pkFrameWork);
void __thiscall CharCreateStatWin::SetAniCode(CharCreateStatWin *this);
CharCreateStatWin *__cdecl CharCreateStatWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CharCreateStatWin::_scalar_deleting_destructor_(CharCreateStatWin *this, unsigned int);
bool __thiscall NiActorManager::SetTargetAnimation(NiActorManager *this, unsigned int eSequenceID);
void __thiscall CharCreateViewCtrlWin::CharCreateViewCtrlWin(CharCreateViewCtrlWin *this);
void __thiscall CharCreateViewCtrlWin::_CharCreateViewCtrlWin(CharCreateViewCtrlWin *this);
void __thiscall CharCreateViewCtrlWin::OnMouseEvent(CharCreateViewCtrlWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin);
bool __thiscall CharCreateViewCtrlWin::Create(CharCreateViewCtrlWin *this, PgFrameWork *pkFrameWork);
CharCreateViewCtrlWin *__cdecl CharCreateViewCtrlWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CharCreateViewCtrlWin::_vector_deleting_destructor_(CharCreateViewCtrlWin *this, unsigned int);
void __thiscall Name3::operator_(Name3 *this, const char *nm);
void __thiscall World::SetMapName(World *this, char *pcMapName);
bool __thiscall CharSelectFrameWork::InitWindow(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::TerminateWindow(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::TerminateBackgroundScene(CharSelectFrameWork *this);
bool __thiscall CharSelectFrameWork::InitAvatar(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::TerminateAvatar(CharSelectFrameWork *this);
bool __thiscall CharSelectFrameWork::InitNet(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::TerminateNet(CharSelectFrameWork *this);
bool __thiscall CharSelectFrameWork::InitShadow(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::CharSelectFrameWork(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::_CharSelectFrameWork(CharSelectFrameWork *this);
bool __thiscall CharSelectFrameWork::InitBackgroundScene(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::ReleaseShadow(CharSelectFrameWork *this);
bool __thiscall CharSelectFrameWork::Init(CharSelectFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall CharSelectFrameWork::Terminate(CharSelectFrameWork *this);
NiRTTI *__thiscall CharSelectFrameWork::GetRTTI(CharSelectFrameWork *this);
const char *__thiscall CharSelectFrameWork::GetFrameWorkName(CharSelectFrameWork *this);
void *__thiscall CharSelectFrameWork::_scalar_deleting_destructor_(CharSelectFrameWork *this, unsigned int);
void __thiscall CharSelectMenuWin::EnableOKBut(CharSelectMenuWin *this, bool b);
// bool __usercall IsSpecialChar_0<al>(char c1<bl>, char c2);
// bool __usercall IsSpecialCharInStr_0<al>(char *pstr<eax>);
// bool __usercall IsSpecialCharInStr2_0<al>(char *pstr<ecx>);
// bool __usercall IsPeculiarStr_0<al>(char *pcName<esi>);
void __thiscall ChangeNameWin::OnClose(ChangeNameWin *this);
void __thiscall ChangeNameWin::SetNameEdit(ChangeNameWin *this, const char *name);
void __thiscall CharSelectFrameWork::OnCharEraseFailMsgClose(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnCharLoginFailMsgClose(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnZoneConnectFailMsgClose(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnZoneLoginFailMsgClose(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnZoneLoginComplete(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnEraseMsgOk(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnEraseMsgCancel(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnErrorGotoAccount(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnTutorialPopupMsg(CharSelectFrameWork *this, bool bIsSkip);
void __thiscall ChangeNameWin::_ChangeNameWin(ChangeNameWin *this);
void __thiscall ChangeNameWin::OnShowWin(ChangeNameWin *this);
char __thiscall ChangeNameWin::FindCharSlot(ChangeNameWin *this, char *pcName);
void __thiscall ChangeNameWin::Open(ChangeNameWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiMax, char *pcText);
// char __usercall SearchSlot<al>(NiAVObject *pkAVObject<eax>);
void __thiscall CharSelectFrameWork::ActPos(CharSelectFrameWork *this, Avatar *m_pActor, unsigned int ui_pos);
void __thiscall CharSelectFrameWork::ActActivePos(CharSelectFrameWork *this, Avatar *m_pActor, unsigned int ui_pos);
void __thiscall CharSelectFrameWork::ActActiveEndPos(CharSelectFrameWork *this, Avatar *m_pActor, unsigned int ui_pos);
void __thiscall ChangeNameWin::ChangeNameWin(ChangeNameWin *this);
bool __thiscall ChangeNameWin::Create(ChangeNameWin *this, PgFrameWork *pkFrameWork);
void __thiscall ChangeNameWin::OnDelCharOk(ChangeNameWin *this);
void __thiscall ChangeNameWin::BtnState(ChangeNameWin *this, ChangeNameWin::BtnFunction e, bool b);
void __thiscall ChangeNameWin::OnCmdOk(ChangeNameWin *this);
void __thiscall ChangeNameWin::OnCmdCancel(ChangeNameWin *this);
void __thiscall CharSelectFrameWork::Draw(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::SelectOk(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::SelectCancel(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::CreateAvatar(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::DeleteAvatar(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::OnZoneLoginFail(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::ApplyTerrain(CharSelectFrameWork *this, NiNode *pkGroundNode);
void __thiscall CharSelectFrameWork::RenderShadow(CharSelectFrameWork *this);
void __thiscall ChangeNameWin::OnCommand(ChangeNameWin *this, unsigned int wParam, int lParam);
void __thiscall CharSelectFrameWork::SelectAvatar(CharSelectFrameWork *this, unsigned int uiSlot);
void __thiscall CharSelectFrameWork::OnZoneConnectFail(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::ProcessInput(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::Update(CharSelectFrameWork *this, float fCurTime);
void __thiscall CharSelectFrameWork::ProcessMsg(CharSelectFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
ChangeNameWin *__cdecl ChangeNameWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall Name5::Name5(Name5 *this, const char *str);
int __thiscall Name5::operator__(Name5 *this, Name5 *nm);
char *__thiscall Name5::n_string(Name5 *this, char *buf);
void __thiscall NsABVPicking::SetTarget(NsABVPicking *this, NiAVObject *pObject);
void *__thiscall ChangeNameWin::_scalar_deleting_destructor_(ChangeNameWin *this, unsigned int);
void __thiscall ChatColorSpinWin::SetChatColorID(ChatColorSpinWin *this, char kColorID);
void __thiscall ChatColorSpinWin::SetTimer(ChatColorSpinWin *this, bool bTimer);
void __thiscall ChatColorSpinWin::OnShowWin(ChatColorSpinWin *this);
void __thiscall ChatColorSpinWin::OnOK(ChatColorSpinWin *this);
void __thiscall ChatColorSpinWin::Roll(ChatColorSpinWin *this);
void __thiscall ChatColorSpinWin::Decrease(ChatColorSpinWin *this, float fTime);
void __thiscall ChatColorSpinWin::Reset(ChatColorSpinWin *this);
void __thiscall ChatColorSpinWin::ChatColorSpinWin(ChatColorSpinWin *this);
void __thiscall ChatColorSpinWin::_ChatColorSpinWin(ChatColorSpinWin *this);
void __thiscall ChatColorSpinWin::OnCommand(ChatColorSpinWin *this, unsigned int wParam, int lParam);
void __thiscall ChatColorSpinWin::DirectMessage(ChatColorSpinWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ChatColorSpinWin::OnClose(ChatColorSpinWin *this);
void __thiscall ChatColorSpinWin::UpdateTimer(ChatColorSpinWin *this, float fTime);
void __thiscall ChatColorSpinWin::UpdateMeWin(ChatColorSpinWin *this, float fCurTime);
ChatColorSpinWin *__cdecl ChatColorSpinWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall ChatColorSpinWin::Create(ChatColorSpinWin *this, PgFrameWork *pkFrameWork);
void __thiscall NiAVObject::SetTranslate(NiAVObject *this, float x, float y, float z);
unsigned int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Off, unsigned int _Count);
unsigned int __cdecl ITableBase<ChatColor_ChatColorTab>::GetTotal();
ChatColor *__cdecl ChatColorTab::GetByID(char kColorID);
void *__thiscall ChatColorSpinWin::_scalar_deleting_destructor_(ChatColorSpinWin *this, unsigned int);
void __thiscall ClassChangeWin::OnClose(ClassChangeWin *this);
void __thiscall ClassChangeWin::OnHelpLink(ClassChangeWin *this);
void __thiscall ClassChangeWin::SetMoney(ClassChangeWin *this, unsigned __int64 kTotalPrice);
void __thiscall ClassChangeWin::GoCharSelectFrameWork(ClassChangeWin *this);
void __thiscall ClassChangeWin::_ClassChangeWin(ClassChangeWin *this);
void __thiscall ClassChangeWin::OnOK(ClassChangeWin *this);
void __thiscall ClassChangeWin::ClassChangeWin(ClassChangeWin *this);
bool __thiscall ClassChangeWin::Create(ClassChangeWin *this, PgFrameWork *pkFrameWokr);
void __thiscall ClassChangeWin::OnCommand(ClassChangeWin *this, unsigned int wParam, int lParam);
void __thiscall ClassChangeWin::SetChangeClassID(ClassChangeWin *this, char kNewClass);
ClassChangeWin *__cdecl ClassChangeWin::CreateWin(PgFrameWork *pkFrameWork);
unsigned __int16 __thiscall ClassChangeWin::CheckChageState(ClassChangeWin *this, int *iInvPos);
void __thiscall ClassChangeWin::DirectMessage(ClassChangeWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::IsKeysEqual(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key1, char key2);
char *__cdecl Folder::Effect();
bool __cdecl CharClass::TestChrClassMask(__int64 kClassMask, unsigned int dwClass);
unsigned int __cdecl ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal();
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this);
void __thiscall NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_NiTMap<unsigned_char_NiPointer<PgWinSpr>>(NiTMap<unsigned char,NiPointer<PgWinSpr> > *this);
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, unsigned int);
void *__thiscall NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vector_deleting_destructor_(NiTMap<unsigned char,NiPointer<PgWinSpr> > *this, unsigned int);
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key, NiPointer<PgWinSpr> val);
bool __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetAt(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key, NiPointer<PgWinSpr> *val);
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetNext(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, void **pos, char *key, NiPointer<PgWinSpr> *val);
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetValue(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, NiTMapItem<unsigned char,NiPointer<PgWinSpr> > *pkItem, char key, NiPointer<PgWinSpr> val);
ChargedItemEffect *__cdecl ChargedEffectTable::GetByEffectEnum(EffectEnumerate eEffect);
void *__thiscall ClassChangeWin::_vector_deleting_destructor_(ClassChangeWin *this, unsigned int);
NiColor *__cdecl Color::GetNiColor(NiColor *result, char ucR, char ucG, char ucB);
D3DXCOLOR *__cdecl Color::GetDxColor(D3DXCOLOR *result, char ucR, char ucG, char ucB, char ucA);
NiColor *__cdecl Color::Dx2NiColor(NiColor *result, D3DXCOLOR *kDxColor);
D3DXCOLOR *__cdecl Color::Ni2DxColor(D3DXCOLOR *result, NiColor *kNiColor);
void __thiscall DShowMovie::DShowMovie(DShowMovie *this);
bool __thiscall DShowMovie::Load(DShowMovie *this, char *pcFilename, HWND__ *hShowWnd);
void __thiscall DShowMovie::CleanUp(DShowMovie *this);
void __thiscall DShowMovie::Play(DShowMovie *this);
void __thiscall DShowMovie::Stop(DShowMovie *this);
bool __thiscall DShowMovie::MsgProc(DShowMovie *this, HWND__ *hWnd, unsigned int uiMsg, unsigned int wParam, int lParam);
bool __thiscall DShowMovie::IsPlaying(DShowMovie *this);
void __thiscall DShowMovie::_DShowMovie(DShowMovie *this);
void *__thiscall DShowMovie::_vector_deleting_destructor_(DShowMovie *this, unsigned int);
unsigned int __cdecl Engine3D::ShaderRunParserCallback(const char *pcLibFile, NiRenderer *pkRenderer, const char *pcDirectory, bool bRecurseSubFolders);
bool __cdecl Engine3D::ShaderClassCreateCallback(const char *pcLibFile, NiRenderer *pkRenderer, int iDirectoryCount, char **apcDirectories, bool bRecurseSubFolders, NiShaderLibrary **ppkLibrary);
bool __cdecl Engine3D::FXLibraryClassCreate(const char *pcLibFile, NiRenderer *pkRenderer, int iDirectoryCount, char **apcDirectories, bool bRecurseSubFolders, NiShaderLibrary **ppkLibrary);
bool __cdecl Engine3D::GetEnableCarToon();
void __cdecl Engine3D::EnableCarToon(bool bEnable);
bool __cdecl Engine3D::Terminate();
bool __cdecl Engine3D::Init(NiCamera *pkCamera);
char *__cdecl Folder::Main();
char *__cdecl AbsMsgTable::GetAbstateSysMsg();
char *__cdecl ErrMsgTable::GetErrMsg(int iErrCode);
void __thiscall EventRankWin::Clear(EventRankWin *this);
void __thiscall EventRankWin::AddRank(EventRankWin *this, unsigned int uiRank, const char *pcName, unsigned int uiScore);
void __thiscall EventRankWin::OnShowWin(EventRankWin *this);
void __thiscall EventRankWin::OnHelpLink(EventRankWin *this);
void __thiscall EventRankWin::OnRankCur(EventRankWin *this);
void __thiscall EventRankWin::OnRankPrev(EventRankWin *this);
void __thiscall EventRankWin::OnCommand(EventRankWin *this, unsigned int wParam, int lParam);
void __thiscall EventRankWin::AddPrevRank(EventRankWin *this, SCENARIO_RANKING_INFO kRank);
void __thiscall EventRankWin::AddCurRank(EventRankWin *this, SCENARIO_RANKING_INFO kRank);
void __thiscall EventRankWin::OnClose(EventRankWin *this);
void __thiscall EventRankWin::EventRankWin(EventRankWin *this);
void __thiscall EventRankWin::_EventRankWin(EventRankWin *this);
EventRankWin *__cdecl EventRankWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall EventRankWin::Create(EventRankWin *this, PgFrameWork *pkFrameWork);
std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *__thiscall std::_List_val<SCENARIO_RANKING_INFO_std::allocator<SCENARIO_RANKING_INFO>>::_Buynode(std::_List_val<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> > *this, std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *_Next, std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *_Prev, SCENARIO_RANKING_INFO *_Val);
void *__thiscall EventRankWin::_scalar_deleting_destructor_(EventRankWin *this, unsigned int);
void __thiscall EventTimeWin::EventTimeWin(EventTimeWin *this);
void __thiscall EventTimeWin::_EventTimeWin(EventTimeWin *this);
void __thiscall EventTimeWin::UpdateTimer(EventTimeWin *this, float fCurTime);
void __thiscall EventTimeWin::UpdateCloser(EventTimeWin *this, float fCurTime);
void __thiscall EventTimeWin::UpdateMeWin(EventTimeWin *this, float fCurTime);
void __thiscall EventTimeWin::Start(EventTimeWin *this, float fCurTime);
void __thiscall EventTimeWin::Stop(EventTimeWin *this, float fDeleteTime);
bool __thiscall EventTimeWin::Create(EventTimeWin *this, PgFrameWork *pkFrameWork);
EventTimeWin *__cdecl EventTimeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall EventTimeWin::_scalar_deleting_destructor_(EventTimeWin *this, unsigned int);
void __cdecl Folder::Init();
bool __cdecl Font::IsInit();
Font::FontDefine *__cdecl Font::GetFontDefine(Font::Type eType);
int __stdcall Font::EnumFontsProc(tagLOGFONTA *lplf, tagTEXTMETRICA *lptm, unsigned int dwType, int lpData);
void __thiscall Font::FontDefine::FontDefine(Font::FontDefine *this);
void __thiscall Font::FontDefine::FontDefine(Font::FontDefine *this, const char *pName, unsigned int height, unsigned int weight);
void __thiscall Font::FontDefine::FontDefine(Font::FontDefine *this, FontSet *pkFontSet);
void __cdecl Font::Termiante();
void __cdecl Font::EncryptFontFile();
PgFont *__cdecl Font::Create(Font::Type eType);
bool __cdecl Font::ParseIniFile();
bool __cdecl Font::IsUserFont();
PgFont *__cdecl Font::Get(Font::Type eType);
FontSet *__cdecl Font::FontInit();
bool __cdecl Font::Init();
void __thiscall Encrypt::FileStream::_FileStream(Encrypt::EncryptStream *this);
void *__thiscall Encrypt::FileStream::_vector_deleting_destructor_(Encrypt::FileStream *this, unsigned int);
void __stdcall _vector_constructor_iterator_(void *__t, unsigned int __s, int __n, void *(__thiscall *__f)(void *));
void __cdecl PgUtil::ChangeCharInText(char *pcText, char cOld, char cNew, unsigned int uiLen);
char *__cdecl Folder::System();
FontSet *__cdecl FontSetTab::GetByFSIndex(const char *pcIndex);
void __thiscall FontSetTab::FontSetTab(FontSetTab *this);
void *__thiscall FontSetTab::_vector_deleting_destructor_(FontSetTab *this, unsigned int);
bool __cdecl ITableBase<FontSet_FontSetTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
void __thiscall ForumWin::ReGenPos(ForumWin *this);
void __thiscall ForumWin::UpdateWebPos(ForumWin *this);
void __thiscall ForumWin::OnWinClose(ForumWin *this);
void __thiscall ForumWin::UpdateMeWin(ForumWin *this, float fCurTime);
bool __thiscall ForumWin::Create(ForumWin *this, PgFrameWork *pkFrameWork);
void __thiscall ForumWin::OnCommand(ForumWin *this, unsigned int wParam, int lParam);
void __thiscall ForumWin::ForumWin(ForumWin *this);
void __thiscall ForumWin::_ForumWin(ForumWin *this);
ForumWin *__cdecl ForumWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall ForumWin::OnShowWin(ForumWin *this);
HWND__ *__cdecl CreateWebWindow(HWND__ *hParent, HINSTANCE__ *hInstance, const char *acWebAddr, tagRECT *rkRect, PgWin *pkWin);
void *__thiscall ForumWin::_scalar_deleting_destructor_(ForumWin *this, unsigned int);
void __thiscall GuildEmblemIcon::GuildEmblemIcon(GuildEmblemIcon *this);
void __thiscall GuildEmblemIcon::_GuildEmblemIcon(GuildEmblemIcon *this);
unsigned int __thiscall GuildEmblemIcon::GetEmblemIconIndex(GuildEmblemIcon *this);
void __thiscall GuildEmblemIcon::SetSelectEmblem(GuildEmblemIcon *this, bool bInput);
bool __thiscall GuildEmblemIcon::IsSelectEmblemIcon(GuildEmblemIcon *this, const char *nFileNo, const char *nIconNo);
bool __thiscall GuildEmblemIcon::SetEmblemIcon(GuildEmblemIcon *this, const char *nFileNo, const char *nIconNo, bool bShow);
void __thiscall GuildEmblemIcon::UpdateMeWin(GuildEmblemIcon *this, float fCurTime);
void __thiscall GuildEmblemIcon::DoAction(GuildEmblemIcon *this);
bool __thiscall GuildEmblemIcon::Create(GuildEmblemIcon *this, int iXPos, int iYPos, unsigned int nIconIndex, PgWin *pkParent, PgFrameWork *pkFrameWork, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall GuildEmblemIcon::SetAlpha(GuildEmblemIcon *this, const float *fAlpha);
GuildEmblemIcon *__cdecl GuildEmblemIcon::CreateWin(int iXPos, int iYPos, unsigned int nIconIndex, PgWin *pkParent, PgFrameWork *pkFrameWork, unsigned int uiWidth, unsigned int uiHeight);
NiRTTI *__thiscall PgWinBut::GetRTTI(PgWinBut *this);
void __thiscall PgWinBut::SetCommandMsg(PgWinBut *this, unsigned int uiCmdMsg);
void __thiscall PgWinBut::SetCommandMsgParam(PgWinBut *this, unsigned int uiCmdMsgParam);
void __thiscall PgWinBut::Enable(PgWinBut *this, bool b);
void __thiscall PgWinBut::DisableAlwaysButShow(PgWinBut *this, bool b);
unsigned int __thiscall PgWinBut::GetCommandMsg(PgWinBut *this);
void __thiscall PgWinLRBut::SetRCommandMsg(PgWinLRBut *this, unsigned int uiCmdMsg);
void __thiscall PgWinLRBut::SetRCommandMsgParam(PgWinLRBut *this, unsigned int uiCmdMsgParam);
void *__thiscall GuildEmblemIcon::_scalar_deleting_destructor_(GuildEmblemIcon *this, unsigned int);
void __thiscall NiD3DTextureStage::SetTexture(NiTexturingProperty::Map *this, NiTexture *pkTexture);
void __thiscall NiTexturingProperty::SetBaseTexture(NiTexturingProperty *this, NiTexture *pkTexture);
void __thiscall PgWinBut::SetButShow(PgWinBut *this, PgWinBut::ButShow eShow);
void __thiscall PgWinLRBut::DoRAction(PgWinLRBut *this);
void __thiscall IconWin::SetTexture(IconWin *this, NiSourceTexture *pkTexture);
void __thiscall GuildEmblemWin::GuildEmblemWin(GuildEmblemWin *this);
void __thiscall GuildEmblemWin::_GuildEmblemWin(GuildEmblemWin *this);
void __thiscall GuildEmblemWin::OnClose(GuildEmblemWin *this);
void __thiscall GuildEmblemWin::OnCancelWin(GuildEmblemWin *this);
void __thiscall GuildEmblemWin::OnHelp(GuildEmblemWin *this);
void __thiscall GuildEmblemWin::ShowSlot(GuildEmblemWin *this, const unsigned int *nColor, const int *nSlotPage);
bool __thiscall GuildEmblemWin::ShowEmblemSlot(GuildEmblemWin *this, const unsigned int *nSelect, const unsigned int *nColor);
void __thiscall GuildEmblemWin::OnShowWin(GuildEmblemWin *this);
void __thiscall GuildEmblemWin::ChangeSlot(GuildEmblemWin *this, bool bNextPage);
void __thiscall GuildEmblemWin::SelectEmblem(GuildEmblemWin *this, const unsigned int *nSelect);
void __thiscall GuildEmblemWin::SelectColor(GuildEmblemWin *this, const unsigned int *nChangeColorSlot);
bool __thiscall GuildEmblemWin::Create(GuildEmblemWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildEmblemWin::OnApplyEmblem(GuildEmblemWin *this);
void __thiscall GuildEmblemWin::OnCommand(GuildEmblemWin *this, unsigned int wParam, int lParam);
GuildEmblemWin *__cdecl GuildEmblemWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildEmblemWin::_vector_deleting_destructor_(GuildEmblemWin *this, unsigned int);
bool __cdecl IconMgr::Init();
void __cdecl IconMgr::Terminate();
NiSourceTexture *__cdecl IconMgr::LoadIconImage(char *pcFileName);
NiSourceTexture *__cdecl IconMgr::GetTexture(char *pcFileName);
NiSourceTexture *__cdecl IconMgr::GetTexturePng(char *pcFileName);
NiPointer<NiTexturingProperty> *__cdecl IconMgr::GetAniTextureProperty(NiPointer<NiTexturingProperty> *result, const char *pkFileName);
unsigned int __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::Sequence__>::KeyToHashIndex(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key);
void __thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> > *this);
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>(NiTStringTemplateMap<NiTMap<char const *,NiPointer<NiSourceTexture> >,NiPointer<NiSourceTexture> > *this);
unsigned int __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiShader__>_NiShader__>::KeyToHashIndex(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DShaderProgramCreator *>,NiD3DShaderProgramCreator *> *this, const char *pKey);
void __thiscall NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>(NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> > *this);
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>(NiTStringTemplateMap<NiTMap<char const *,NiPointer<NiTexturingProperty> >,NiPointer<NiTexturingProperty> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::ClearValue(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiActorManager> >,NiPointer<NiActorManager> > *this, NiTMapItem<char const *,NiPointer<NiActorManager> > *pkItem);
void *__thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> > *this, unsigned int);
void *__thiscall NiTMap<char_const___NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTMap<char const *,NiPointer<NiSourceTexture> > *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_scalar_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> > *this, unsigned int);
void *__thiscall NiTMap<char_const___NiPointer<NiTexturingProperty>>::_scalar_deleting_destructor_(NiTMap<char const *,NiPointer<NiTexturingProperty> > *this, unsigned int);
void *__thiscall NiTStringMap<NiPointer<NiTexturingProperty>>::_vector_deleting_destructor_(NiTStringMap<NiPointer<NiTexturingProperty> > *this, unsigned int);
void *__thiscall NiTStringMap<NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTStringMap<NiPointer<NiSourceTexture> > *this, unsigned int);
void *__thiscall ItemMixDataTab::_scalar_deleting_destructor_(ItemMixDataTab *this, unsigned int);
void __thiscall MixItemIcon::MixItemIcon(MixItemIcon *this);
void __thiscall MixItemIcon::_MixItemIcon(MixItemIcon *this);
void __thiscall MixItemIcon::SetTranslucence(MixItemIcon *this);
void __thiscall MixItemIcon::SetTransparency(MixItemIcon *this);
MixItemIcon *__thiscall ItemMixWin::GetInsertedSlot(ItemMixWin *this, unsigned int _uiSlotNum);
bool __thiscall MixItemIcon::Create(MixItemIcon *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
bool __thiscall MixItemIcon::SetSenderInvSlotLock(MixItemIcon *this, bool _bLock);
void __thiscall MixItemIcon::ReSetSlot(MixItemIcon *this);
void __thiscall MixItemIcon::SetTemporaryIcon(MixItemIcon *this, unsigned __int16 _pItemId);
void __thiscall MixItemIcon::OnFirstHitWin(MixItemIcon *this);
void __thiscall ItemMixWin::UpdateMeWin(ItemMixWin *this, float fCurTime);
void __thiscall ItemMixWin::ResetAddItemIcon(ItemMixWin *this);
void __thiscall ItemMixWin::SetDisableMixButton(ItemMixWin *this, bool bDisable);
void __thiscall ItemMixWin::OnCancel(ItemMixWin *this);
void __thiscall ItemMixWin::DirectMessage(ItemMixWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall MixItemIcon::DoAction(MixItemIcon *this);
void __thiscall MixItemIcon::DoRAction(MixItemIcon *this);
void __thiscall ItemMixWin::OnApply(ItemMixWin *this);
void __thiscall ItemMixWin::_ItemMixWin(ItemMixWin *this);
MixItemIcon *__cdecl MixItemIcon::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
void __thiscall ItemMixWin::ItemMixWin(ItemMixWin *this);
ItemMixWin *__cdecl ItemMixWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall ItemMixWin::SetResultItemSlot(ItemMixWin *this, Item *pMaterialItem);
bool __thiscall ItemMixWin::DropItemSlot(ItemMixWin *this, unsigned int _uiReceiverInvIndex, PgWinDrop *_pkDrop);
void __thiscall ItemMixWin::ResetAllData(ItemMixWin *this);
void __thiscall ItemMixWin::ShowMixResult(ItemMixWin *this, bool bSuccess);
void __thiscall ItemMixWin::OnSlotLClick(ItemMixWin *this, unsigned int _uiSlotIndex);
void __thiscall ItemMixWin::OnClose(ItemMixWin *this);
bool __thiscall MixItemIcon::EatDropInstance(MixItemIcon *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
bool __thiscall ItemMixWin::Create(ItemMixWin *this, PgFrameWork *pkFrameWork);
void __thiscall ItemMixWin::OnCommand(ItemMixWin *this, unsigned int wParam, int lParam);
void __thiscall PgWinDrop::_PgWinDrop(PgWinDrop *this);
void *__thiscall PgWinDrop::_scalar_deleting_destructor_(PgWinDrop *this, unsigned int);
void __thiscall DropContents::_DropContents(DropContents *this);
void *__thiscall DropContents::_scalar_deleting_destructor_(DropContents *this, unsigned int);
InvWin *__thiscall InventoryWin::GetInvWin(InventoryWin *this, unsigned int uiIndex);
NiPointer<NiPixelData> *__thiscall NiPointer<NiActorManager>::operator_(NiPointer<NiPixelData> *this, NiPointer<NiPixelData> *ptr);
void *__thiscall MixItemIcon::_scalar_deleting_destructor_(MixItemIcon *this, unsigned int);
void *__thiscall ItemMixWin::_vector_deleting_destructor_(ItemMixWin *this, unsigned int);
bool __thiscall ItemMixDataTab::IsMixItem(ItemMixDataTab *this, char *pcInxName);
char *__thiscall ItemMixDataTab::GetResultItem(ItemMixDataTab *this, char *pcInxName);
void __thiscall std::_List_val<ItemViewDummy___std::allocator<ItemViewDummy__>>::__List_val<ItemViewDummy___std::allocator<ItemViewDummy__>>(std::_List_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > *this);
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::clear(std::list<float,std::allocator<float> > *this);
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::clear(std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *this);
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocato(std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *this);
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>(...);
void __thiscall KDTeamScoreWin::ResetScore(KDTeamScoreWin *this);
void __thiscall KDTeamScoreWin::ResetWinFlag(KDTeamScoreWin *this);
void __thiscall KDTeamScoreWin::SetScore(KDTeamScoreWin *this, KQ_TEAM_TYPE uiTeam, unsigned int uiScore);
void __thiscall KDTeamScoreWin::SetWinFlag(KDTeamScoreWin *this, unsigned int uiTeam, unsigned int nWin);
void __thiscall KDTeamScoreWin::SetUseRound(KDTeamScoreWin *this, bool bUse);
void __thiscall KDTeamScoreWin::SetTitleText(KDTeamScoreWin *this, char *acString);
void __thiscall KDTeamScoreWin::_KDTeamScoreWin(KDTeamScoreWin *this);
void __thiscall KDTeamScoreWin::ResetRound(KDTeamScoreWin *this);
void __thiscall KDTeamScoreWin::SetRound(KDTeamScoreWin *this, unsigned int nRound);
void __thiscall KDTeamScoreWin::KDTeamScoreWin(KDTeamScoreWin *this);
void __thiscall KDTeamScoreWin::Reset(KDTeamScoreWin *this);
bool __thiscall KDTeamScoreWin::Create(KDTeamScoreWin *this, PgFrameWork *pkFrameWork);
KDTeamScoreWin *__cdecl KDTeamScoreWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall KDTeamScoreWin::_scalar_deleting_destructor_(KDTeamScoreWin *this, unsigned int);
void __thiscall KeyMap::KeyNode::Set(KeyMap::KeyNode *this, unsigned int uiMsg, NiInputKeyboard::KeyCode eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType);
void __thiscall KeyMap::KeyNode::SetMouse(KeyMap::KeyNode *this, unsigned int uiMsg, NiInputMouse::Button eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType);
bool __thiscall KeyMap::KeyNode::IsSame(KeyMap::KeyNode *this, NiInputKeyboard::KeyCode eC, unsigned int uiModif);
bool __thiscall KeyMap::KeyNode::IsSame(KeyMap::KeyNode *this, NiInputMouse::Button eC, unsigned int uiModif);
void __thiscall KeyMap::Process(KeyMap *this);
bool __thiscall KeyMap::KeyIsDown(KeyMap *this, NiInputKeyboard::KeyCode eKey);
void __thiscall KeyMap::_KeyMap(KeyMap *this);
void __thiscall KeyMap::Add(KeyMap *this, unsigned int uiMsg, NiInputKeyboard::KeyCode eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType);
void __thiscall KeyMap::AddMouse(KeyMap *this, unsigned int uiMsg, NiInputMouse::Button eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType);
void __thiscall KeyMap::Remove(KeyMap *this, NiInputKeyboard::KeyCode eC, unsigned int uiModif);
void __thiscall KeyMap::Remove(KeyMap *this, NiInputMouse::Button eC, unsigned int uiModif);
void __thiscall KeyMap::KeyMap(KeyMap *this);
const bool __thiscall NiInputDevice::Button::WasPressed(NiInputDevice::Button *this, unsigned int *uiModifiers);
const bool __thiscall NiInputDevice::Button::WasReleased(NiInputDevice::Button *this, unsigned int *uiModifiers);
const bool __thiscall NiInputMouse::ButtonIsDown(NiInputMouse *this, NiInputMouse::Button eButton, unsigned int *uiModifiers);
const bool __thiscall NiInputMouse::ButtonWasPressed(NiInputMouse *this, NiInputMouse::Button eButton, unsigned int *uiModifiers);
const bool __thiscall NiInputMouse::ButtonWasReleased(NiInputMouse *this, NiInputMouse::Button eButton, unsigned int *uiModifiers);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>(NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *this, unsigned int);
void __thiscall NiTPointerList<KeyMap::KeyNode__>::_NiTPointerList<KeyMap::KeyNode__>(NiTPointerList<KeyMap::KeyNode *> *this);
void __thiscall KeyMap::RemoveAll(KeyMap *this);
void __thiscall PgTList<KeyMap::KeyNode__>::_PgTList<KeyMap::KeyNode__>(PgTList<KeyMap::KeyNode *> *this);
void *__thiscall PgTList<KeyMap::KeyNode__>::_scalar_deleting_destructor_(PgTList<KeyMap::KeyNode *> *this, unsigned int);
void *__thiscall KeyMap::_vector_deleting_destructor_(KeyMap *this, unsigned int);
void *__cdecl CreateMyProcessSubfunc(const char *szExeFullPath, char *szCmdLine, _PROCESS_INFORMATION *pi);
void *__stdcall CreateMyProcess(const char *szExeFullPath, char *szCmdLine);
void *__stdcall CreateMyProcess2(const char *szExeFullPath, char *szCmdLine, _PROCESS_INFORMATION *pi);
void *__stdcall MyShellExecute(const char *szFilename);
void __thiscall LuaArgument::LuaArgument(LuaArgument *this);
void __thiscall LuaArgument::_LuaArgument(LuaArgument *this);
int __thiscall LuaArgument::setArgument(LuaArgument *this, lua_State *L);
void __thiscall LuaArgument::setReturn(LuaArgument *this, lua_State *L);
int __thiscall LuaArgument::getReturnNumber(LuaArgument *this);
int __thiscall LuaArgument::getReturnValue(LuaArgument *this);
bool __thiscall LuaScript::loadFile(LuaScript *this, char *filename);
bool __thiscall LuaScript::callFunc(LuaScript *this, const char *funcname, LuaArgument *lua_arg);
void __thiscall LuaScript::clear(LuaScript *this);
void __thiscall LuaScript::pushFunc(LuaScript *this, const char *luafunc, int (__cdecl *func)(lua_State *));
int __cdecl LuaScript::cSetEnableInput(lua_State *L);
int __cdecl LuaScript::cGetHP(lua_State *L);
int __cdecl LuaScript::cGetMaxHP(lua_State *L);
int __cdecl LuaScript::cDeleteChar(lua_State *L);
int __cdecl LuaScript::cActChar(lua_State *L);
int __cdecl LuaScript::cIsDuringMove(lua_State *L);
int __cdecl LuaScript::cIsAttack(lua_State *L);
int __cdecl LuaScript::cGetQuestStatus(lua_State *L);
int __cdecl LuaScript::cShowHelpWin(lua_State *L);
int __cdecl LuaScript::cShowCharWin(lua_State *L);
int __cdecl LuaScript::cShowInvenWin(lua_State *L);
int __cdecl LuaScript::cShowQuestNewsWin(lua_State *L);
int __cdecl LuaScript::cShowQuestWin(lua_State *L);
int __cdecl LuaScript::cCloseShopWin(lua_State *L);
int __cdecl LuaScript::cGetShowWin(lua_State *L);
int __cdecl LuaScript::cCreateSprite(lua_State *L);
void __thiscall LuaScript::LuaScript(LuaScript *this);
void __thiscall LuaScript::_LuaScript(LuaScript *this);
int __cdecl LuaScript::cGetCurTime(lua_State *L);
int __cdecl LuaScript::cGetUser(lua_State *L);
int __cdecl LuaScript::cGetRemainStatPoint(lua_State *L);
int __cdecl LuaScript::cLoadChar(lua_State *L);
int __cdecl LuaScript::cMoveChar(lua_State *L);
int __cdecl LuaScript::cGetCharPos(lua_State *L);
int __cdecl LuaScript::cGetClass(lua_State *L);
int __cdecl LuaScript::cGetCharMode(lua_State *L);
int __cdecl LuaScript::cGetMainCharHandle(lua_State *L);
int __cdecl LuaScript::cMoveMainChar(lua_State *L);
int __cdecl LuaScript::cShowInterface(lua_State *L);
int __cdecl LuaScript::cShowBasicInfo(lua_State *L);
int __cdecl LuaScript::cShowSkillWin(lua_State *L);
int __cdecl LuaScript::cShowAnnounceWin(lua_State *L);
int __cdecl LuaScript::cShowMiniMapSideWin(lua_State *L);
int __cdecl LuaScript::cShowHPBar(lua_State *L);
int __cdecl LuaScript::cShowSPBar(lua_State *L);
int __cdecl LuaScript::cShowNPCName(lua_State *L);
int __cdecl LuaScript::cCloseNPCDialog(lua_State *L);
int __cdecl LuaScript::cOpenFreeStat(lua_State *L);
int __cdecl LuaScript::cEnablePlayGuide(lua_State *L);
int __cdecl LuaScript::cResetCamera(lua_State *L);
int __cdecl LuaScript::cMoveCamera(lua_State *L);
int __cdecl LuaScript::cCameraEffect(lua_State *L);
int __cdecl LuaScript::cSetCameraCtrl(lua_State *L);
int __cdecl LuaScript::cAddSysMsg(lua_State *L);
int __cdecl LuaScript::cScriptMsg(lua_State *L);
int __cdecl LuaScript::cLoadEffect(lua_State *L);
int __cdecl LuaScript::cLoadKFM(lua_State *L);
int __cdecl LuaScript::cShowGroundObject(lua_State *L);
int __cdecl LuaScript::cPersonalScriptMsg(lua_State *L);
int __cdecl LuaScript::cOpenNPCDialog(lua_State *L);
int __cdecl LuaScript::cGetWin(lua_State *L);
int __cdecl LuaScript::cCreateText(lua_State *L);
int __cdecl LuaScript::cCreateButton(lua_State *L);
int __cdecl LuaScript::cActSkill(lua_State *L);
int __cdecl LuaScript::cGetCameraCtrl(lua_State *L);
void __thiscall LuaScript::initFunc(LuaScript *this);
Tutorial *__cdecl Singleton<Tutorial>::getInstance();
NiPoint3 *__thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt);
void __thiscall NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_NiTListBase<DFALL<DamageInfo__>_DamageInfo__>(NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *this);
unsigned int __cdecl ITableBase<ScriptMsg_ScriptMsgTab>::GetTotal();
void *__thiscall NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_scalar_deleting_destructor_(NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *this, unsigned int);
NiPoint3 *__cdecl NetUtil::NetDir2Point3Dir(NiPoint3 *result, char byNetDir);
void *__thiscall LuaArgument::_scalar_deleting_destructor_(LuaArgument *this, unsigned int);
void __thiscall Effect::SetScale(Effect *this, float fScale);
void __thiscall DamageInfoSet::Clear(DamageInfoSet *this);
void __thiscall NiTList<DamageInfo__>::_NiTList<DamageInfo__>(NiTList<DamageInfo *> *this);
void *__thiscall NiTList<DamageInfo__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<DamageInfo *>,DamageInfo *> *this, unsigned int);
ScriptMsg *__cdecl ScriptMsgTab::GetScriptMsgInfo(const char *kIndex);
int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr);
void __thiscall DamageInfoSet::_DamageInfoSet(DamageInfoSet *this);
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(...);
void __thiscall std::list<float_std::allocator<float>>::_Insert<std::_List_const_iterator<std::_List_val<float_std::allocator<float>>>>(std::list<float,std::allocator<float> > *this, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _Where, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _First, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _Last);
ActiveSkillInfo *__cdecl ActSkillInfoTab::GetByInxName(char *pcInxName);
void __thiscall std::list<float_std::allocator<float>>::list<float_std::allocator<float>>(std::list<float,std::allocator<float> > *this, std::list<float,std::allocator<float> > *_Right);
void __thiscall CameraCtrl::CameraCtrl(CameraCtrl *this, CameraCtrl *__that);
void __thiscall Singleton<LuaScriptMgr>::_Singleton<LuaScriptMgr>(Singleton<LuaScriptMgr> *this);
void *__thiscall Singleton<LuaScriptMgr>::_vector_deleting_destructor_(Singleton<LuaScriptMgr> *this, unsigned int);
bool __thiscall LuaScriptMgr::Init(LuaScriptMgr *this);
bool __thiscall LuaScriptMgr::Terminate(LuaScriptMgr *this);
bool __thiscall LuaScriptMgr::DeleteLuaScript(LuaScriptMgr *this, LuaScriptMgr::eLuaScriptType eType);
void __thiscall LuaScriptMgr::_LuaScriptMgr(LuaScriptMgr *this);
void __thiscall LuaScriptMgr::LuaScriptMgr(LuaScriptMgr *this);
LuaScript *__thiscall LuaScriptMgr::GetLuaScript(LuaScriptMgr *this, LuaScriptMgr::eLuaScriptType eType);
void __thiscall LuaScriptMgr::Update(LuaScriptMgr *this, float fCurTime);
bool __thiscall LuaScriptMgr::CreateLuaScript(LuaScriptMgr *this, LuaScriptMgr::eLuaScriptType eType);
void __thiscall NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>(NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *this);
void *__thiscall NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *this, unsigned int);
void *__thiscall NiTMap<enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_scalar_deleting_destructor_(NiTMap<enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *this, unsigned int);
void *__thiscall LuaScriptMgr::_scalar_deleting_destructor_(LuaScriptMgr *this, unsigned int);
void __thiscall LuaScriptNewBie::LuaScriptNewBie(LuaScriptNewBie *this);
void __thiscall LuaScriptNewBie::_LuaScriptNewBie(LuaScriptNewBie *this);
int __cdecl LuaScriptNewBie::cOpenPlayGuide(lua_State *L);
int __cdecl LuaScriptNewBie::cOpenPlayGuide_BIL_QUEST_1(lua_State *L);
void __thiscall LuaScriptNewBie::initFunc(LuaScriptNewBie *this);
int __thiscall LuaArgumentNewBie::setArgument(LuaArgumentNewBie *this, lua_State *L);
int __thiscall LuaArgumentBIL_QUEST_1::setArgument(LuaArgumentBIL_QUEST_1 *this, lua_State *L);
void __thiscall LuaArgumentNewBie::_LuaArgumentNewBie(LuaArgumentNewBie *this);
void __thiscall LuaArgumentBIL_QUEST_1::_LuaArgumentBIL_QUEST_1(LuaArgumentBIL_QUEST_1 *this);
void __thiscall LuaArgumentNewBie::LuaArgumentNewBie(LuaArgumentNewBie *this);
void __thiscall LuaArgumentBIL_QUEST_1::LuaArgumentBIL_QUEST_1(LuaArgumentBIL_QUEST_1 *this, char *pkName);
void __thiscall LuaScriptNewBie::update(LuaScriptNewBie *this, float time);
Name3 *__thiscall World::GetMapName(World *this, Name3 *result);
void *__thiscall LuaScriptNewBie::_scalar_deleting_destructor_(LuaScriptNewBie *this, unsigned int);
void *__thiscall LuaArgumentNewBie::_scalar_deleting_destructor_(LuaArgumentNewBie *this, unsigned int);
void *__thiscall LuaArgumentBIL_QUEST_1::_vector_deleting_destructor_(LuaArgumentBIL_QUEST_1 *this, unsigned int);
void __thiscall LuaScriptTutorial::LuaScriptTutorial(LuaScriptTutorial *this);
void __thiscall LuaScriptTutorial::_LuaScriptTutorial(LuaScriptTutorial *this);
int __cdecl LuaScriptTutorial::cAckMainStep(lua_State *L);
int __cdecl LuaScriptTutorial::cCloseTextBoxMsgWin(lua_State *L);
int __cdecl LuaScriptTutorial::cHideNewbieToolTip(lua_State *L);
int __cdecl LuaScriptTutorial::cTutorialEnable(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkMainMenu(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkFreeStat(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkStoneShop(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkShortCut(lua_State *L);
int __cdecl LuaScriptTutorial::cRemoveBlinkEffect(lua_State *L);
int __cdecl LuaScriptTutorial::cRemoveBlinkMainMenu(lua_State *L);
int __cdecl LuaScriptTutorial::cStopTextScreenEffect(lua_State *L);
int __cdecl LuaScriptTutorial::cShowTutorialMark(lua_State *L);
int __cdecl LuaScriptTutorial::cOpenQuestConditionWin(lua_State *L);
int __cdecl LuaScriptTutorial::cCloseQuestConditionWin(lua_State *L);
int __cdecl LuaScriptTutorial::cCloseBoxAnnounceWin(lua_State *L);
int __cdecl LuaScriptTutorial::cSetItemShopTab(lua_State *L);
int __cdecl LuaScriptTutorial::cIsOpenCharWin(lua_State *L);
int __cdecl LuaScriptTutorial::cIsOpenItemShop(lua_State *L);
int __cdecl LuaScriptTutorial::cIsOpenInvenWin(lua_State *L);
int __cdecl LuaScriptTutorial::cIsBuyStone(lua_State *L);
int __cdecl LuaScriptTutorial::cIsUseStone(lua_State *L);
int __cdecl LuaScriptTutorial::cIsEndWar(lua_State *L);
int __cdecl LuaScriptTutorial::cIsOpenSkillShop(lua_State *L);
int __cdecl LuaScriptTutorial::cIsOpenSkillWin(lua_State *L);
int __cdecl LuaScriptTutorial::cIsRegistSkill(lua_State *L);
int __cdecl LuaScriptTutorial::cIsEndTextScreenEffect(lua_State *L);
int __cdecl LuaScriptTutorial::cIsOpenNPCDialog(lua_State *L);
int __cdecl LuaScriptTutorial::cLockStoneShopInv(lua_State *L);
int __cdecl LuaScriptTutorial::cSetLockItemSell(lua_State *L);
int __cdecl LuaScriptTutorial::cSetLockItemShop(lua_State *L);
int __cdecl LuaScriptTutorial::cSetLockStoneShop(lua_State *L);
int __cdecl LuaScriptTutorial::cSetLockSkillShop(lua_State *L);
int __cdecl LuaScriptTutorial::cSetLockItemShopTab(lua_State *L);
int __cdecl LuaScriptTutorial::cSetLockSkillShopTab(lua_State *L);
int __cdecl LuaScriptTutorial::cSetHideQuestGiveUp(lua_State *L);
int __cdecl LuaScriptTutorial::cSetOpenCharWin(lua_State *L);
int __cdecl LuaScriptTutorial::cSetOpenInvenWin(lua_State *L);
int __cdecl LuaScriptTutorial::cSetOpenSkillWin(lua_State *L);
int __cdecl LuaScriptTutorial::cSetBuyStone(lua_State *L);
int __cdecl LuaScriptTutorial::cSetUseStone(lua_State *L);
int __cdecl LuaScriptTutorial::cSetRegistSkill(lua_State *L);
int __cdecl LuaScriptTutorial::cIsOpenQuestWin(lua_State *L);
int __cdecl LuaScriptTutorial::cSetOpenQuestWin(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkQuestAccept(lua_State *L);
int __cdecl LuaScriptTutorial::cRemoveQuestBlinkEffect(lua_State *L);
int __thiscall LuaArgumentTutorial::setArgument(LuaArgumentTutorial *this, lua_State *L);
int __thiscall LuaArgumentTutorialStep::setArgument(LuaArgumentTutorialStep *this, lua_State *L);
void __thiscall LuaArgumentTutorial::_LuaArgumentTutorial(LuaArgumentTutorial *this);
void __thiscall LuaArgumentTutorialStep::_LuaArgumentTutorialStep(LuaArgumentTutorialStep *this);
int __cdecl LuaScriptTutorial::cBlinkEffect(lua_State *L);
void __thiscall LuaArgumentTutorial::LuaArgumentTutorial(LuaArgumentTutorial *this);
void __thiscall LuaArgumentTutorialStep::LuaArgumentTutorialStep(LuaArgumentTutorialStep *this, int step);
void __thiscall LuaScriptTutorial::update(LuaScriptTutorial *this, float time);
void __thiscall LuaScriptTutorial::UpdateStep(LuaScriptTutorial *this, int Step);
int __cdecl LuaScriptTutorial::cBlinkItemShop(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkInven(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkSkillShop(lua_State *L);
int __cdecl LuaScriptTutorial::cBlinkSkill(lua_State *L);
int __cdecl LuaScriptTutorial::cStartTextScreenEffect(lua_State *L);
int __cdecl LuaScriptTutorial::cOpenBoxAnnounceWin(lua_State *L);
int __cdecl LuaScriptTutorial::cOpenTextBoxMsgWin(lua_State *L);
int __cdecl LuaScriptTutorial::cIsHaveItem(lua_State *L);
int __cdecl LuaScriptTutorial::cIsEquipItem(lua_State *L);
int __cdecl LuaScriptTutorial::cIsLearnSkill(lua_State *L);
int __cdecl LuaScriptTutorial::cIsSelectSkill(lua_State *L);
int __cdecl LuaScriptTutorial::cLockItemShopInv(lua_State *L);
int __cdecl LuaScriptTutorial::cLockSkillShopInv(lua_State *L);
void __thiscall LuaScriptTutorial::initFunc(LuaScriptTutorial *this);
void *__thiscall LuaScriptTutorial::_scalar_deleting_destructor_(LuaScriptTutorial *this, unsigned int);
void *__thiscall LuaArgumentTutorial::_vector_deleting_destructor_(LuaArgumentTutorial *this, unsigned int);
void *__thiscall LuaArgumentTutorialStep::_vector_deleting_destructor_(LuaArgumentTutorialStep *this, unsigned int);
bool __cdecl MenuTexMgr::Init();
void __cdecl MenuTexMgr::Terminate();
void __cdecl MenuTexMgr::Remove(unsigned int uiEnum);
NiSourceTexture *__cdecl MenuTexMgr::Create(unsigned int uiEnum);
NiSourceTexture *__cdecl MenuTexMgr::GetTexture(unsigned int uiEnum);
void __thiscall ItemSlot::ItemSlot(ItemSlot *this);
void __thiscall ItemSlot::_ItemSlot(ItemSlot *this);
bool __thiscall ItemSlot::Create(ItemSlot *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
void __thiscall ItemSlot::OnFirstHitWin(ItemSlot *this);
void __thiscall ItemSlot::ReSetSlot(ItemSlot *this);
void __thiscall ItemSlot::SetItemByID(ItemSlot *this, unsigned __int16 ItemID);
void __thiscall MinimonAutoItemUseWin::ShowAutoUseItemInfo(MinimonAutoItemUseWin *this);
void __thiscall MinimonAutoItemUseWin::OnHelpLink(MinimonAutoItemUseWin *this);
void __thiscall MinimonAutoItemUseWin::OnCancel(MinimonAutoItemUseWin *this);
void __thiscall MinimonAutoItemUseWin::MinimonAutoItemUseWin(MinimonAutoItemUseWin *this);
void __thiscall MinimonAutoItemUseWin::_MinimonAutoItemUseWin(MinimonAutoItemUseWin *this);
void __thiscall MinimonAutoItemUseWin::OnSlotLClick(MinimonAutoItemUseWin *this, unsigned int uiSlotIndex);
void __thiscall MinimonAutoItemUseWin::OnBuffItemUse(MinimonAutoItemUseWin *this);
void __thiscall MinimonAutoItemUseWin::OnChargedItemUse(MinimonAutoItemUseWin *this);
void __thiscall ItemSlot::DoAction(ItemSlot *this);
void __thiscall ItemSlot::DoRAction(ItemSlot *this);
void __thiscall MinimonAutoItemUseWin::OnCommand(MinimonAutoItemUseWin *this, unsigned int wParam, int lParam);
void __thiscall MinimonAutoItemUseWin::SetAutoUseBuffItem(MinimonAutoItemUseWin *this, bool bUse);
void __thiscall MinimonAutoItemUseWin::SetAutoUseChargedItem(MinimonAutoItemUseWin *this, bool bUse);
bool __thiscall MinimonAutoItemUseWin::DropItemSlot(MinimonAutoItemUseWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop);
void __thiscall MinimonAutoItemUseWin::AutoUseItemExhausted(MinimonAutoItemUseWin *this, unsigned __int16 ItemID);
void __thiscall ItemSlot::UpdateMeWin(ItemSlot *this, float fCurTime);
bool __thiscall ItemSlot::EatDropInstance(ItemSlot *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall MinimonAutoItemUseWin::SetAutoUseItemInfo(MinimonAutoItemUseWin *this, USEITEM_MINIMON_INFO *pInfo);
ItemSlot *__cdecl ItemSlot::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
MinimonAutoItemUseWin *__cdecl MinimonAutoItemUseWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall MinimonAutoItemUseWin::Create(MinimonAutoItemUseWin *this, PgFrameWork *pkFrameWork);
void __thiscall ItemIcon::SetLotText(ItemIcon *this, char *pcText);
void *__thiscall ItemSlot::_scalar_deleting_destructor_(ItemSlot *this, unsigned int);
MinimonAutoUseItem *__cdecl MinimonAutoUseItemTable::GetMiniMonDataByIDX(char *pcItemIDX);
void *__thiscall MinimonAutoItemUseWin::_scalar_deleting_destructor_(MinimonAutoItemUseWin *this, unsigned int);
void __thiscall MobKillCountWin::MobKillCountWin(MobKillCountWin *this);
void __thiscall MobKillCountWin::_MobKillCountWin(MobKillCountWin *this);
bool __thiscall MobKillCountWin::Create(MobKillCountWin *this, PgFrameWork *pkFrameWork);
void __thiscall MobKillCountWin::AddCount(MobKillCountWin *this);
bool __thiscall MobKillCountWin::IsEnd(MobKillCountWin *this);
void __thiscall MobKillCountWin::Init(MobKillCountWin *this, unsigned __int16 kMobID, unsigned int uiMobCount);
MobKillCountWin *__cdecl MobKillCountWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall MobKillCountWin::_vector_deleting_destructor_(MobKillCountWin *this, unsigned int);
void __thiscall SlotWin::SlotWin(SlotWin *this);
void __thiscall SlotWin::_SlotWin(SlotWin *this);
bool __thiscall SlotWin::Create(SlotWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
void __thiscall MoverUpgradeWin::OnHelpLink(MoverUpgradeWin *this);
void __thiscall MoverUpgradeWin::OnShowWin(MoverUpgradeWin *this);
SlotWin *__thiscall MoverUpgradeWin::GetInsertedOldSlot(MoverUpgradeWin *this, unsigned int _uiSlotNum);
void __thiscall SlotWin::OnFirstHitWin(SlotWin *this);
bool __thiscall SlotWin::SetSenderInvSlotLock(SlotWin *this, bool _bLock);
void __thiscall MoverUpgradeWin::UpdateMeWin(MoverUpgradeWin *this, float fCurTime);
void __thiscall MoverUpgradeWin::OnCancel(MoverUpgradeWin *this);
void __thiscall MoverUpgradeWin::DirectMessage(MoverUpgradeWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall MoverUpgradeWin::IsUpgrading(MoverUpgradeWin *this);
void __thiscall SlotWin::DoAction(SlotWin *this);
void __thiscall SlotWin::DoRAction(SlotWin *this);
void __thiscall SlotWin::ReSetSlot(SlotWin *this);
void __thiscall MoverUpgradeWin::ShowUpgradeResult(MoverUpgradeWin *this, unsigned int uiSlotIndex, bool bRare, bool bUpgrade);
void __thiscall MoverUpgradeWin::OnSlotLClick(MoverUpgradeWin *this, unsigned int uiSlotIndex);
bool __thiscall MoverUpgradeWin::DropItemSlot(MoverUpgradeWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop);
void __thiscall MoverUpgradeWin::ResetAllData(MoverUpgradeWin *this);
void __thiscall MoverUpgradeWin::ResetSubSlot(MoverUpgradeWin *this);
bool __thiscall SlotWin::EatDropInstance(SlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall MoverUpgradeWin::MoverUpgradeWin(MoverUpgradeWin *this);
void __thiscall MoverUpgradeWin::_MoverUpgradeWin(MoverUpgradeWin *this);
void __thiscall MoverUpgradeWin::OnClose(MoverUpgradeWin *this);
SlotWin *__cdecl SlotWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
MoverUpgradeWin *__cdecl MoverUpgradeWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall MoverUpgradeWin::Create(MoverUpgradeWin *this, PgFrameWork *pkFrameWork);
void __thiscall MoverUpgradeWin::OnApply(MoverUpgradeWin *this);
void __thiscall MoverUpgradeWin::OnCommand(MoverUpgradeWin *this, unsigned int wParam, int lParam);
Item *__thiscall InventoryWin::GetItemInInv(InventoryWin *this, unsigned int uiIndex);
void *__thiscall SlotWin::_scalar_deleting_destructor_(SlotWin *this, unsigned int);
void *__thiscall MoverUpgradeWin::_scalar_deleting_destructor_(MoverUpgradeWin *this, unsigned int);
MoverMain *__cdecl MoverMainTab::GetByMoverIdx(const char *pcMoverIdx);
MoverHG *__cdecl MoverHGTab::GetByMoverIdx(const char *pcMoverIdx);
void __thiscall PgTQueue<CMsg__>::Realloc(PgTQueue<CMsg *> *this, unsigned int uiNewSize);
bool __thiscall CMsgMgr::RegisterMsgEater(CMsgMgr *this, void *kMsgID, CMsgEater *pkMsgEater);
void __thiscall CMsgMgr::_CMsgMgr(CMsgMgr *this);
void __thiscall CMsgMgr::PostMsg(CMsgMgr *this, CMsg *pkMsg);
bool __thiscall CMsgMgr::ProcessMsg(CMsgMgr *this);
void __thiscall CMsgMgr::Terminate(CMsgMgr *this);
void __thiscall CMsgMgr::CMsgMgr(CMsgMgr *this);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *this);
void __thiscall NiTPointerMap<void___CMsgEater__>::_NiTPointerMap<void___CMsgEater__>(NiTPointerMap<void *,CMsgEater *> *this);
void __thiscall PgTQueue<CMsg__>::Add(PgTQueue<CMsg *> *this, CMsg *element);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *this, unsigned int);
void *__thiscall NiTPointerMap<void___CMsgEater__>::_scalar_deleting_destructor_(NiTPointerMap<void *,CMsgEater *> *this, unsigned int);
void *__thiscall CMsgMgr::_scalar_deleting_destructor_(CMsgMgr *this, unsigned int);
void __thiscall NifVideo::NifVideo(NifVideo *this);
void __thiscall NifVideo::LoadNifVideoSequence(NifVideo *this);
void __thiscall Oscillation::Oscillation(Oscillation *this);
void __thiscall Oscillation::_Oscillation(Oscillation *this);
bool __thiscall Oscillation::IsImpacting(Oscillation *this);
void __thiscall Oscillation::Impact(Oscillation *this, float fAmplitude, float fStartTime);
void __thiscall Oscillation::Clear(Oscillation *this);
void __thiscall OscillationEx::OscillationEx(OscillationEx *this);
void __thiscall OscillationEx::_OscillationEx(OscillationEx *this);
void __thiscall OscillationEx::Clear(OscillationEx *this);
void __thiscall Oscillation::Update(Oscillation *this, float fTime);
int __stdcall loc_42E561(float fOffset); // weak
void __thiscall OscillationEx::ImPact(OscillationEx *this, float fAmplitude, float fPeriod, float fDamp, EffectAxisEnum eValue, float fStartTime);
void __thiscall OscillationEx::Impact(OscillationEx *this, EffectViewInfo *ImpactInfo, float fStartTime);
void __thiscall OscillationEx::Impact(OscillationEx *this, unsigned __int16 EffectViewInfoID, float fStartTime);
void __cdecl OscillationEx::GetOscillationStr(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *TargetStr, OscTarget e);
unsigned int __cdecl ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::GetTotal();
void *__thiscall OscillationEx::_scalar_deleting_destructor_(OscillationEx *this, unsigned int);
EffectViewInfo *__cdecl ShakeEffectViewInfoTab::GetByID(unsigned __int16 ID);
void __thiscall PartyScoreWin::OnHelpLink(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnCancelWin(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnSortByTitle01(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnSortByTitle02(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnSortByTitle03(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnSortByTitle04(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnSortByTitle05(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnCommand(PartyScoreWin *this, unsigned int wParam, int lParam);
void __thiscall PartyScoreWin::ShowRaidPartyInfo(PartyScoreWin *this, const char *byStatus, const int *iLev, const int *nIndex, Name5 *Charid, const char *CharClass);
void __thiscall PartyScoreWin::InitRaidInfo(PartyScoreWin *this);
void __thiscall PartyScoreWin::_PartyScoreWin(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnClose(PartyScoreWin *this);
void __thiscall PartyScoreWin::ShowPartyInfo(PartyScoreWin *this);
void __thiscall PartyScoreWin::PartyScoreWin(PartyScoreWin *this);
void __thiscall PartyScoreWin::SetPartyScore(PartyScoreWin *this, SHINE_INDUN_RANK_CLIENT *pData, const unsigned __int16 *nRankCount, const char *nPlayTimeHour, const char *nPlayTimeMinute, const char *nPlayTimeSecond);
PartyScoreWin *__cdecl PartyScoreWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall PartyScoreWin::ShowRaidInfo(PartyScoreWin *this);
void __thiscall PartyScoreWin::OnShowWin(PartyScoreWin *this);
bool __thiscall PartyScoreWin::Create(PartyScoreWin *this, PgFrameWork *pkFrameWork);
void __thiscall PgWin::AttachChildWin(PgWin *this, PgWin *pkChild);
void *__thiscall PartyScoreWin::_scalar_deleting_destructor_(PartyScoreWin *this, unsigned int);
RaidMemberInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo_std::allocator<RaidMemberInfo>>>_RaidMemberInfo___std::allocator<RaidMemberInfo>>(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > _Last, RaidMemberInfo *_Dest, std::allocator<RaidMemberInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *_Right);
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val);
void __thiscall Pet::Pet(Pet *this);
void __thiscall Pet::_Pet(Pet *this);
bool __thiscall Pet::InitView(Pet *this, bool bEquip, unsigned int uiFrame);
bool __thiscall Pet::Init(Pet *this, unsigned int kPetID, unsigned __int16 kPetHandle, const char *pcName);
bool __thiscall NiD3DTimeSyncController::CanBeExtracted(NiUnsharedGeometryGroup *this);
void *__thiscall Pet::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall Pet::_vector_deleting_destructor_(void *this, unsigned int a2);
NiPoint3 *__thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *result, float fScalar);
float __thiscall NiPoint3::Length(NiPoint3 *this);
float __thiscall NiPoint3::Unitize(NiPoint3 *this);
NiPoint3 *__thiscall NiPoint3::UnitCross(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt);
int __thiscall Name3::operator__(Name3 *this, Name3 *nm);
bool __cdecl Math3D::VectToZRot(NiPoint3 *kTargetVect, NiMatrix3 *kRot);
void __thiscall ActionMgr::SetCurPlayActInfo(ActionMgr *this, ActionInfo *pkActionInfo);
bool __thiscall ActionMgr::GetEventCode(ActionMgr *this, const char *_szActionName, unsigned int *OUT_uiEventCode);
int __thiscall Char::GetPrevHP(Char *this);
void __thiscall Char::SetPrevHP(Char *this, int iHP);
void __thiscall Char::SetMode(Char *this, char byMode);
bool __thiscall Char::IsAlive(Char *this);
char *__thiscall Char::GetName(Char *this);
void __thiscall Char::SetName(Char *this, char *pcName);
int __thiscall Char::GetHP(Char *this);
int __thiscall Char::GetMaxHP(Char *this);
int __thiscall Char::GetSP(Char *this);
int __thiscall Char::GetMaxSP(Char *this);
int __thiscall Char::GetAP(Char *this);
int __thiscall Char::GetMaxAP(Char *this);
int __thiscall Char::GetLP(Char *this);
int __thiscall Char::GetMaxLP(Char *this);
void __thiscall Char::SetMaxHP(Char *this, int iHP);
void __thiscall Char::SetSP(Char *this, int iSP);
void __thiscall Char::SetMaxSP(Char *this, int iSP);
void __thiscall Char::SetAP(Char *this, int iAP);
void __thiscall Char::SetMaxAP(Char *this, int iAP);
void __thiscall Char::SetLP(Char *this, int iLP);
void __thiscall ArrowEff::SetHitDamage(Char *this, int iLP);
int __thiscall Char::GetTOTHP(Char *this);
int __thiscall Char::GetMaxTOTHP(Char *this);
void __thiscall Char::SetTOTHP(Char *this, int iHP);
void __thiscall Char::SetMaxTOTHP(Char *this, int iHP);
void __thiscall Char::SetPos(Char *this, NiPoint3 *kPos);
NiPoint3 *__thiscall Char::GetCameraPos(Char *this);
void __thiscall Char::GetDir(Char *this, NiPoint3 *kDir);
NiPoint3 *__thiscall Char::GetDir(Char *this);
Char::MoveMode __thiscall Char::GetMoveMode(Char *this);
void __thiscall Char::SetMoveMode(Char *this, Char::MoveMode eMoveMode);
bool __thiscall Char::IsDuringMove(Char *this);
bool __thiscall Char::IsDuringRotate(Char *this);
void __thiscall Char::SetWalkSpeed(Char *this, float fSpeed);
void __thiscall Char::SetRunSpeed(Char *this, float fSpeed);
float __thiscall Char::GetWalkSpeed(Char *this);
float __thiscall Char::GetRunSpeed(Char *this);
void __thiscall Char::SetMoveSpeedRate(Char *this, float fMoveSpeedRate);
float __thiscall Char::GetMoveSpeedRate(Char *this);
void __thiscall Char::ActRideMove(Char *this);
void __thiscall Char::ActRideStand(Char *this);
void __thiscall Char::SetReservedHitDamage(Char *this, unsigned int uiDamage);
unsigned int __thiscall Char::GetReservedHitDamage(Char *this);
bool __thiscall Char::IsChangeCampMode(Char *this);
bool __thiscall Char::IsCampMode(Char *this);
bool __thiscall Char::IsIndividualStorageMode(Char *this);
void __thiscall Char::ChangeCampMode(Char *this, bool bCampMode, char byMode);
int __thiscall Char::GetCharLevel(Char *this);
void *__thiscall Pet::_vector_deleting_destructor_(Pet *this, unsigned int);
unsigned int __cdecl ITableBase<MapInfo_MapInfoTab>::GetTotal();
void __thiscall Char::InitPos(Char *this, NiPoint3 *kPos, NiPoint3 *kDir);
void __thiscall Char::GetPos(Char *this, NiPoint3 *kPos);
void __thiscall Char::GetDir(Char *this, NiMatrix3 *kMat);
bool __thiscall Char::IsRiding(Char *this);
void __thiscall Char::SetScale(Char *this, float fScale);
PupMain *__cdecl PetMainTab::GetByPetID(unsigned int kPetID);
MapInfo *__cdecl MapInfoTab::GetByMapName(Name3 *kMapName);
PupView *__cdecl PetViewTab::GetByPetIdx(const char *pcPetIdx);
void __thiscall PetNameEditWin::PetNameEditWin(PetNameEditWin *this);
void __thiscall PetNameEditWin::_PetNameEditWin(PetNameEditWin *this);
void __thiscall PetNameEditWin::UpdateMeWin(PetNameEditWin *this, float fCurTime);
void __thiscall PetNameEditWin::OnShowWin(PetNameEditWin *this);
void __thiscall PetNameEditWin::OnClose(PetNameEditWin *this);
void __thiscall PetNameEditWin::SetName(PetNameEditWin *this, const char *pcName);
const char *__thiscall PetNameEditWin::GetName(PetNameEditWin *this);
void __thiscall PetNameEditWin::SetPetHandle(PetNameEditWin *this, unsigned __int16 kPetHandle);
unsigned __int16 __thiscall PetNameEditWin::GetPetHandle(PetNameEditWin *this);
void __thiscall PetNameEditWin::OnOk(PetNameEditWin *this);
void __thiscall PetNameEditWin::OnCancel(PetNameEditWin *this);
bool __thiscall PetNameEditWin::Create(PetNameEditWin *this, PgFrameWork *pkFrameWork);
void __thiscall PetNameEditWin::OnCommand(PetNameEditWin *this, unsigned int wParam, int lParam);
PetNameEditWin *__cdecl PetNameEditWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall IDirectMessenger::DirectDispatch(IDirectMessenger *this, int iMsgTag, void *pvBody, IDirectMessenger::DispatchTo eDispatch);
void *__thiscall PetNameEditWin::_vector_deleting_destructor_(PetNameEditWin *this, unsigned int);
int __cdecl PgExternalLib::SetDefaultCursor(_DWORD); // weak
int PgExternalLib::SetMovingUpCursor(void); // weak
int __cdecl PgExternalLib::SetDragingCursor(_DWORD); // weak
NiAudioSource *__cdecl PgExternalLib::ClickSound();
NiAudioSource *__cdecl PgExternalLib::WindowOpenSound();
NiAudioSource *__cdecl PgExternalLib::WindowCloseSound();
NiAudioSource *__cdecl PgExternalLib::ConsonantSound();
NiAudioSource *__cdecl PgExternalLib::VowelSound();
void __thiscall Picking::_Picking(Picking *this);
void __thiscall Picking::Picking(Picking *this);
bool __thiscall Picking::FirstPick(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir);
bool __thiscall Picking::BestPick(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir);
bool __thiscall Picking::GetNormal(Picking *this, NiPoint3 *kNormal, unsigned int uiIndex);
float __thiscall Picking::GetDistance(Picking *this, unsigned int uiIndex);
bool __thiscall Picking::GetIntersection(Picking *this, NiPoint3 *kPos, unsigned int uiIndex);
bool __thiscall Picking::PickGround(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir);
bool __thiscall Picking::PickCharacter(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir);
NiAVObject *__thiscall Picking::GetAVObject(Picking *this, unsigned int uiIndex);
int __cdecl PgProfile::Report();
void __thiscall PuzzleTimeWin::ResetTime(PuzzleTimeWin *this, unsigned int second);
void __thiscall PuzzleTimeWin::UpdateMeWin(PuzzleTimeWin *this, float fCurTime);
void __thiscall PuzzleTimeWin::PuzzleTimeWin(PuzzleTimeWin *this);
void __thiscall PuzzleTimeWin::_PuzzleTimeWin(PuzzleTimeWin *this);
PuzzleTimeWin *__cdecl PuzzleTimeWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall PuzzleTimeWin::Create(PuzzleTimeWin *this, PgFrameWork *pkFrameWork);
void *__thiscall PuzzleTimeWin::_scalar_deleting_destructor_(PuzzleTimeWin *this, unsigned int);
void __thiscall RandomOptCountRecoverWin::_RandomOptCountRecoverWin(RandomOptCountRecoverWin *this);
RandomOptCountRecoverWin *__cdecl RandomOptCountRecoverWin::Modal(RandomOptCountRecoverWin *pkWin);
void __thiscall RandomOptCountRecoverWin::OnAddtionCount(RandomOptCountRecoverWin *this);
void __thiscall RandomOptCountRecoverWin::OnSubtractionCount(RandomOptCountRecoverWin *this);
void __thiscall RandomOptCountRecoverWin::SetInvenSlotLock(RandomOptCountRecoverWin *this, bool _bLock);
void __thiscall RandomOptCountRecoverWin::OnApply(RandomOptCountRecoverWin *this);
void __thiscall RandomOptCountRecoverWin::UpdateMeWin(RandomOptCountRecoverWin *this, float fCurTime);
bool __thiscall RandomOptCountRecoverWin::SetRecoverCountItemSlot(RandomOptCountRecoverWin *this, unsigned int _uiReceiverInvIndex, Item *_pkRecoverCountItem);
void __thiscall RandomOptCountRecoverWin::ResetAllData(RandomOptCountRecoverWin *this);
void __thiscall RandomOptCountRecoverWin::ShowRecoverCountResult(RandomOptCountRecoverWin *this, bool _bSuccess);
bool __thiscall RandomOptCountRecoverWin::Create(RandomOptCountRecoverWin *this, PgFrameWork *pkFrameWork);
void __thiscall RandomOptCountRecoverWin::OnCancel(RandomOptCountRecoverWin *this);
void __thiscall RandomOptCountRecoverWin::OnCommand(RandomOptCountRecoverWin *this, unsigned int wParam, int lParam);
void __thiscall RandomOptCountRecoverWin::RandomOptCountRecoverWin(RandomOptCountRecoverWin *this);
RandomOptCountRecoverWin *__cdecl RandomOptCountRecoverWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall RandomOptCountRecoverWin::_scalar_deleting_destructor_(RandomOptCountRecoverWin *this, unsigned int);
void __thiscall ChangeSlotWin::ChangeSlotWin(ChangeSlotWin *this);
void __thiscall ChangeSlotWin::_ChangeSlotWin(ChangeSlotWin *this);
bool __thiscall ChangeSlotWin::Create(ChangeSlotWin *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall ChangeSlotWin::SetLock(ChangeSlotWin *this, bool bLock);
void __thiscall RandomOptionWin::OnHelpLink(RandomOptionWin *this);
void __thiscall RandomOptionWin::OnShowWin(RandomOptionWin *this);
bool __thiscall RandomOptionWin::IsChangingOption(RandomOptionWin *this);
void __thiscall ChangeSlotWin::OnFirstHitWin(ChangeSlotWin *this);
bool __thiscall ChangeSlotWin::SetSenderInvSlotLock(ChangeSlotWin *this, bool _bLock);
void __thiscall RandomOptionWin::SetItemOptionTextDetail(RandomOptionWin *this, unsigned int uiItemPos, unsigned int uiOPTNum, unsigned int uiRotNum);
void __thiscall RandomOptionWin::ItemOptionCompare(RandomOptionWin *this, unsigned int uiItemPos);
void __thiscall RandomOptionWin::ResetItemOption(RandomOptionWin *this);
void __thiscall RandomOptionWin::SetChangeAbleOption(RandomOptionWin *this, ItemOptionStorage *pChangeAbleOption);
void __thiscall ChangeSlotWin::DoAction(ChangeSlotWin *this);
void __thiscall ChangeSlotWin::DoRAction(ChangeSlotWin *this);
void __thiscall ChangeSlotWin::ReSetSlot(ChangeSlotWin *this);
void __thiscall RandomOptionWin::OnClose(RandomOptionWin *this);
void __thiscall RandomOptionWin::OnSlotLClick(RandomOptionWin *this);
void __thiscall RandomOptionWin::SetRandomCntTextDetail(RandomOptionWin *this, unsigned int uiItemPos);
void __thiscall RandomOptionWin::SetChangeOption(RandomOptionWin *this);
void __thiscall RandomOptionWin::OnCancel(RandomOptionWin *this);
void __thiscall RandomOptionWin::_RandomOptionWin(RandomOptionWin *this);
void __thiscall RandomOptionWin::SetItemOptionText(RandomOptionWin *this, unsigned int uiItemPos);
void __thiscall RandomOptionWin::RefreshItemSlot(RandomOptionWin *this);
void __thiscall RandomOptionWin::SetItemOption(RandomOptionWin *this, unsigned int uiItemPos, ItemOptionStorage *kOptionStorage);
ChangeSlotWin *__cdecl ChangeSlotWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
bool __thiscall RandomOptionWin::Create(RandomOptionWin *this, PgFrameWork *pkFrameWork);
void __thiscall RandomOptionWin::UpdateMeWin(RandomOptionWin *this, float fCurTime);
void __thiscall RandomOptionWin::SetItem(RandomOptionWin *this, unsigned int uiItemPos, Item *pkItem);
bool __thiscall RandomOptionWin::DropItemSlot(RandomOptionWin *this, PgWinDrop *pkDrop);
bool __thiscall ChangeSlotWin::EatDropInstance(ChangeSlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall RandomOptionWin::RandomOptionWin(RandomOptionWin *this);
RandomOptionWin *__cdecl RandomOptionWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall RandomOptionWin::DirectMessage(RandomOptionWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall RandomOptionWin::OnApply(RandomOptionWin *this);
void __thiscall RandomOptionWin::OnCommand(RandomOptionWin *this, unsigned int wParam, int lParam);
void *__thiscall ChangeSlotWin::_vector_deleting_destructor_(ChangeSlotWin *this, unsigned int);
void *__thiscall RandomOptionWin::_vector_deleting_destructor_(RandomOptionWin *this, unsigned int);
void __thiscall IDRankingWin::UpdateMeWin(IDRankingWin *this, float fCurTime);
void __thiscall IDRankingWin::OnMouseEvent(IDRankingWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin);
void __thiscall IDRankingWin::DirectMessage(IDRankingWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall IDRankingWin::OnHelpLink(IDRankingWin *this);
void __thiscall IDRankingWin::OnCancelWin(IDRankingWin *this);
void __thiscall IDRankingWin::ShowTopPortrait(IDRankingWin *this);
void __thiscall IDRankingWin::ClearMyRecordInfo(IDRankingWin *this);
void __thiscall FaceCutMaskWin::FaceCutMaskWin(FaceCutMaskWin *this);
void __thiscall FaceCutMaskWin::_FaceCutMaskWin(FaceCutMaskWin *this);
void __thiscall FaceCutMaskWin::SetPortraitTexture(FaceCutMaskWin *this, NiTexture *pTexture);
void __thiscall IDRankingWin::OnShowWin(IDRankingWin *this);
void __thiscall IDRankingWin::ClearRankInfo(IDRankingWin *this);
void __thiscall IDRankingWin::OnSlideIDList(IDRankingWin *this);
void __thiscall IDRankingWin::RecordInfoReq(IDRankingWin *this, unsigned int nTitle, unsigned int nSelectID);
void __thiscall IDRankingWin::SetIDSelectBtn(IDRankingWin *this, unsigned int nSelectIDIdx);
bool __thiscall FaceCutMaskWin::Create(FaceCutMaskWin *this, int nIndex);
void __thiscall IDRankingWin::ShowRankNode(IDRankingWin *this, bool bIsRankNode);
void __thiscall IDRankingWin::SetTitleBtn(IDRankingWin *this, unsigned int nTitleIdx);
void __thiscall IDRankingWin::ShowIDList(IDRankingWin *this, bool bShow);
void __thiscall IDRankingWin::SetRankInfo(IDRankingWin *this, const unsigned int *dwMyRank, const int *nRankCnt, SHINE_INDUN_RANK_CLIENT_VALUE *pValue, PROTO_AVATAR_SHAPE_INFO *pShapeInfo1st, PROTO_AVATAR_SHAPE_INFO *pShapeInfo2nd, PROTO_AVATAR_SHAPE_INFO *pShapeInfo3th);
void __thiscall IDRankingWin::SetMyRecord(IDRankingWin *this, PROTO_NC_INSTANCE_DUNGEON_RANK_TAB_MYRANK_ACK *pValue);
void __thiscall IDRankingWin::InitRankInfo(IDRankingWin *this);
void __thiscall IDRankingWin::OnSelectTitle(IDRankingWin *this, int uiMsg);
void __thiscall IDRankingWin::OnSelectID(IDRankingWin *this, int nIndex);
void __thiscall IDRankingWin::OnIDSelectList(IDRankingWin *this);
FaceCutMaskWin *__cdecl FaceCutMaskWin::CreateWin(int nIndex);
void __thiscall IDRankingWin::OnClose(IDRankingWin *this);
void __thiscall IDRankingWin::OnCommand(IDRankingWin *this, unsigned int wParam, int lParam);
void __thiscall IDRankingWin::IDRankingWin(IDRankingWin *this);
void __thiscall IDRankingWin::_IDRankingWin(IDRankingWin *this);
IDRankingWin *__cdecl IDRankingWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall IDRankingWin::SetIDList(IDRankingWin *this, const unsigned __int16 *nIDListCnt, SHINE_INDUN_INFO *pIndunInfo);
bool __thiscall IDRankingWin::Create(IDRankingWin *this, PgFrameWork *pkFrameWork);
void __thiscall Name3::Name3(Name3 *this);
void *__thiscall FaceCutMaskWin::_scalar_deleting_destructor_(FaceCutMaskWin *this, unsigned int);
MapInfo *__cdecl MapInfoTab::GetByMapName(const unsigned __int16 id);
SHINE_INDUN_INFO *__thiscall std::allocator<SHINE_INDUN_INFO>::allocate(std::allocator<SHINE_INDUN_INFO> *this, unsigned int _Count);
SHINE_INDUN_INFO *__cdecl std::_Uninit_move<SHINE_INDUN_INFO___SHINE_INDUN_INFO___std::allocator<SHINE_INDUN_INFO>_SHINE_INDUN_INFO>(SHINE_INDUN_INFO *_First, SHINE_INDUN_INFO *_Last, SHINE_INDUN_INFO *_Dest, std::allocator<SHINE_INDUN_INFO> *_Al, SHINE_INDUN_INFO *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<SHINE_INDUN_INFO_std::allocator<SHINE_INDUN_INFO>>::reserve(std::vector<SHINE_INDUN_INFO,std::allocator<SHINE_INDUN_INFO> > *this, unsigned int _Count);
void __thiscall std::vector<SHINE_INDUN_INFO_std::allocator<SHINE_INDUN_INFO>>::_Reserve(std::vector<SHINE_INDUN_INFO,std::allocator<SHINE_INDUN_INFO> > *this, unsigned int _Count);
void *__thiscall IDRankingWin::_vector_deleting_destructor_(IDRankingWin *this, unsigned int);
void __cdecl ScriptMsgCtrl::OnChat(const char *pcStr, unsigned __int16 kHandle, float fLifeTime);
void __cdecl ScriptMsgCtrl::OnAnnounce(const char *pcStr, D3DXCOLOR kColor, float fLifeTime);
void __cdecl ScriptMsgCtrl::OnRemain(const char *pcStr, D3DXCOLOR kColor, float fLifeTime);
void __cdecl ScriptMsgCtrl::OnAutorun(const char *pcStr, D3DXCOLOR kColor, float fLifeTime);
void __cdecl ScriptMsgCtrl::OnNPCDlg(const char *pcStr, const char *pcFaceCutIndex, bool bCloseBtn, float fLifeTime);
void __cdecl ScriptMsgCtrl::OnBoxAnnounce(const char *pcStr, float fLifeTime);
void __cdecl ScriptMsgCtrl::AddAbStateMsg(AbStateMsg *pkAbStateMsg);
void __cdecl ScriptMsgCtrl::AddMsg(ScriptMsg *pkScriptMsg, const char *pcStr, unsigned __int16 kHandle);
FaceCutMsg *__cdecl FaceCutMsgTab::GetByScripMsgInx(const char *pcScriptMsgInx);
// void __thiscall SteamCallback::Update(SteamCallback *this);
void __thiscall SteamCallback::OnGetAuthSessionTicketResponse(SteamCallback *this, GetAuthSessionTicketResponse_t *pCallback);
void __thiscall SteamCallback::OnGameOverlayActivated(SteamCallback *this, GameOverlayActivated_t *callback);
void __thiscall SteamCallback::_SteamCallback(SteamCallback *this);
void __thiscall SteamCallback::SteamCallback(SteamCallback *this);
void __thiscall CCallback<SteamCallback_GetAuthSessionTicketResponse_t_0>::Run(CCallback<SteamCallback,GameOverlayActivated_t,0> *this, void *pvParam);
void __thiscall CCallback<SteamCallback_GameOverlayActivated_t_0>::Run(CCallback<SteamCallback,GameOverlayActivated_t,0> *this, void *pvParam, bool __formal, unsigned __int64 __formal);
void __cdecl SteamConfig::Running();
bool __cdecl SteamConfig::IsRunning();
const char *__cdecl SteamConfig::GetURL(unsigned __int64 uiSteamAccountID);
bool __thiscall NiRenderer::Check_RenderTargetGroupActive(NiRenderer *this, const char *pcCallingFunction, bool bExpectedValue);
void __thiscall Studio::Studio(Studio *this);
void __thiscall Studio::_Studio(Studio *this);
void __thiscall Studio::ClickAndStuff(Studio *this, float fTime);
void __thiscall Studio::SetCamera(Studio *this, NiCamera *pkCamera);
Studio *__cdecl Studio::Create(NiRenderer *pRenderer, unsigned int uiDetail);
void __thiscall NiPointer<NiProperty>::NiPointer<NiProperty>(NiPointer<NiProperty> *this, NiProperty *pObject);
bool __thiscall NiRenderer::BeginFrame(NiRenderer *this);
bool __thiscall NiRenderer::EndFrame(NiRenderer *this);
bool __thiscall NiRenderer::DisplayFrame(NiRenderer *this);
bool __thiscall NiRenderer::BeginUsingRenderTargetGroup(NiRenderer *this, NiRenderTargetGroup *pkTarget, unsigned int uiClearMode);
bool __thiscall NiRenderer::EndUsingRenderTargetGroup(NiRenderer *this);
void __thiscall NiRenderer::SetSorter(NiRenderer *this, NiAccumulator *pkAccum);
void __thiscall ItemSlotWin::ItemSlotWin(ItemSlotWin *this);
void __thiscall ItemSlotWin::_ItemSlotWin(ItemSlotWin *this);
bool __thiscall ItemSlotWin::Create(ItemSlotWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
void __thiscall TermExtendWin::OnHelpLink(TermExtendWin *this);
ItemSlotWin *__thiscall TermExtendWin::GetInsertedOldSlot(TermExtendWin *this);
// long double __usercall difftime<edx:eax>(int _Time1<ecx>, int _Time2<eax>);
// int __usercall mktime<eax>(tm *_Tm<eax>);
void __thiscall ItemSlotWin::OnFirstHitWin(ItemSlotWin *this);
bool __thiscall ItemSlotWin::SetSenderInvSlotLock(ItemSlotWin *this, bool _bLock);
void __thiscall TermExtendWin::UpdateMeWin(TermExtendWin *this, float fCurTime);
void __thiscall TermExtendWin::ExtendItemInvenLock(TermExtendWin *this, bool bLock);
void __thiscall TermExtendWin::DirectMessage(TermExtendWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ItemSlotWin::DoAction(ItemSlotWin *this);
void __thiscall ItemSlotWin::DoRAction(ItemSlotWin *this);
void __thiscall ItemSlotWin::ReSetSlot(ItemSlotWin *this);
void __thiscall TermExtendWin::SetExtendInfo(TermExtendWin *this, ExtendItemInfo pExtendInfo);
void __thiscall TermExtendWin::OnApply(TermExtendWin *this);
void __thiscall TermExtendWin::TermExtendWin(TermExtendWin *this);
void __thiscall TermExtendWin::_TermExtendWin(TermExtendWin *this);
void __thiscall TermExtendWin::SetTermItemInfo(TermExtendWin *this, Item *pItem);
bool __thiscall TermExtendWin::DropItemSlot(TermExtendWin *this, PgWinDrop *pkDrop);
void __thiscall TermExtendWin::ResetAllData(TermExtendWin *this);
bool __thiscall ItemSlotWin::EatDropInstance(ItemSlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall TermExtendWin::ShowUpgradeResult(TermExtendWin *this);
void __thiscall TermExtendWin::OnSlotLClick(TermExtendWin *this);
void __thiscall TermExtendWin::OnCancel(TermExtendWin *this);
void __thiscall TermExtendWin::OnClose(TermExtendWin *this);
ItemSlotWin *__cdecl ItemSlotWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
TermExtendWin *__cdecl TermExtendWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall TermExtendWin::OnCommand(TermExtendWin *this, unsigned int wParam, int lParam);
bool __thiscall TermExtendWin::Create(TermExtendWin *this, PgFrameWork *pkFrameWork);
void *__thiscall ItemSlotWin::_scalar_deleting_destructor_(ItemSlotWin *this, unsigned int);
TermExtendMatch *__cdecl TermExtendMatchTable::GetTermExtendMatchByItemIDX(char *pcItemIDX);
char *__cdecl TermExtendMatchGroupDescTable::GetGroupNameByExtendItemIDX(char *pcItemIDX);
ChargedItemEffect *__cdecl ChargedEffectTable::GetByInxName(char *pcInxName, bool isCharged);
void *__thiscall TermExtendWin::_vector_deleting_destructor_(TermExtendWin *this, unsigned int);
int __cdecl TextDataNodeComp(const void *p1, const void *p2);
void __thiscall TextData::BeforeTerminate(TextData *this);
bool __thiscall TextData::DataProcess(TextData *this);
int __cdecl TextData2NodeComp(const void *p1, const void *p2);
void __thiscall TextData2::BeforeTerminate(TextData2 *this);
bool __thiscall TextData2::DataProcess(TextData2 *this);
int __cdecl TextData3NodeComp(const void *p1, const void *p2);
void __thiscall TextData3::BeforeTerminate(TextData3 *this);
bool __thiscall TextData3::DataProcess(TextData3 *this);
bool __thiscall ProcessingString::IsRemovableCharacter(ProcessingString *this, char ch);
void __thiscall ProcessingString::ProcessingString(ProcessingString *this);
void __thiscall TextFilter::_TextFilter(TextFilter *this);
void __thiscall TextFilterReplace::_TextFilterReplace(TextFilterReplace *this);
void __thiscall ProcessingString::Replace(ProcessingString *this, char *pcBasePos, char *pcKey, char *pcAlternate);
void __thiscall ProcessingString::ClearOddStuff(ProcessingString *this, char *string);
void __thiscall ProcessingString::Preprocess(ProcessingString *this, char *pcSource, bool bPreprecess);
void __thiscall TextFilter::TextFilter(TextFilter *this, char *pcKey);
void __thiscall TextFilter::Filter(TextFilter *this, ProcessingString *pkStr);
void __thiscall TextFilterReplace::TextFilterReplace(TextFilterReplace *this, char *pcKey, char *pcAlternate);
void __thiscall TextFilterReplace::DoJob(TextFilterReplace *this, ProcessingString *pkStr, char *pcFindPos, char *pcKey);
void __thiscall TextFilterSet::Terminate(TextFilterSet *this);
char *__thiscall TextFilterSet::Filter(TextFilterSet *this, char *pcSourceStr, bool bPreprecess);
void __thiscall TextFilterSet::AddFilter(TextFilterSet *this, TextFilter *pkFilter);
void __thiscall TextFilterSet::_TextFilterSet(TextFilterSet *this);
void __thiscall NiTListBase<DFALL<TextFilter__>_TextFilter__>::_NiTListBase<DFALL<TextFilter__>_TextFilter__>(NiTListBase<DFALL<TextFilter *>,TextFilter *> *this);
void *__thiscall NiTListBase<DFALL<TextFilter__>_TextFilter__>::_scalar_deleting_destructor_(NiTListBase<DFALL<TextFilter *>,TextFilter *> *this, unsigned int);
void *__thiscall TextFilter::_scalar_deleting_destructor_(TextFilter *this, unsigned int);
void *__thiscall TextFilterReplace::_scalar_deleting_destructor_(TextFilterReplace *this, unsigned int);
void *__thiscall NiTList<TextFilter__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<TextFilter *>,TextFilter *> *this, unsigned int);
void __thiscall NiTList<TextFilter__>::_NiTList<TextFilter__>(NiTList<TextFilter *> *this);
// void __userpurge TextFilterTable::FilterEmotion_::_2_::TextFilterEmotion::TextFilterEmotion(char *pcKey, char *pcEmotionCmd<esi>);
// void __usercall TextFilterTable::FilterEmotion_::_2_::TextFilterEmotion::_TextFilterEmotion(int a1<esi>);
int __cdecl TextFilterTable::IsForbiddenGuildName(char *pcName);
void __thiscall TextFilterTable::FilterEmotion_::_2_::TextFilterEmotion::DoJob(ProcessingString *pkStr, char *pcFindPos, char *pcKey);
bool __cdecl TextFilterTable::LoadSlanderFilter();
char *__cdecl TextFilterTable::FilterSlander(char *pcSlander);
void __cdecl TextFilterTable::FilterEmotion(char *pcEmotion);
bool __cdecl TextFilterTable::IsBadName(char *pcName);
bool __cdecl TextFilterTable::IsBlockedID(char *pcID);
void __cdecl TextFilterTable::DelFromBlockedID(char *pcTargetID);
void __cdecl TextFilterTable::SaveBlockedID();
void __cdecl TextFilterTable::AddToBlockedID(char *pcTargetID);
_iobuf *__cdecl TextFilterTable::LoadBlockedID();
void *__thiscall ::::TextFilterEmotion::_scalar_deleting_destructor_(TextFilterTable::FilterEmotion::__l2::TextFilterEmotion *this, unsigned int);
unsigned int __cdecl ITableBase<ActionViewInfo_ActionViewTable>::GetTotal();
unsigned int __cdecl ITableBase<SlanderFilter_SlanderFilterTable>::GetTotal();
unsigned int __cdecl ITableBase<BadNameFilter_BadNameFilterTable>::GetTotal();
unsigned int __cdecl ITableBase<EmotionFilter_EmotionFilterTable>::GetTotal();
void *__thiscall SlanderFilterTable::_vector_deleting_destructor_(SlanderFilterTable *this, unsigned int);
ActionViewInfo *__cdecl ActionViewTable::GetByInxName(char *pcInxName);
bool __cdecl std::operator__<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
void __thiscall SlanderFilterTable::SlanderFilterTable(SlanderFilterTable *this);
void __thiscall EmotionFilterTable::EmotionFilterTable(EmotionFilterTable *this);
void *__thiscall EmotionFilterTable::_scalar_deleting_destructor_(EmotionFilterTable *this, unsigned int);
bool __cdecl ITableBase<SlanderFilter_SlanderFilterTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<EmotionFilter_EmotionFilterTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
void __thiscall BadNameFilterTable::BadNameFilterTable(BadNameFilterTable *this);
void *__thiscall BadNameFilterTable::_scalar_deleting_destructor_(BadNameFilterTable *this, unsigned int);
bool __cdecl ITableBase<BadNameFilter_BadNameFilterTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::clear(std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this);
void __thiscall std::list<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::remove(std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val_arg);
std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *__thiscall std::_List_val<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Buynode(std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *_Next, std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *_Prev, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val);
void __thiscall TextScreenWin::Start(TextScreenWin *this, const char *pcText);
void __thiscall TextScreenWin::UpdateMeWin(TextScreenWin *this, float fTime);
bool __thiscall TextScreenEffect::IsEnd(TextScreenEffect *this);
void __thiscall TextScreenEffect::UpdateTextScreen(TextScreenEffect *this, float fCurTime);
void __thiscall TextScreenWin::TextScreenWin(TextScreenWin *this);
void __thiscall TextScreenWin::_TextScreenWin(TextScreenWin *this);
bool __thiscall TextScreenWin::Create(TextScreenWin *this);
void __thiscall TextScreenEffect::_TextScreenEffect(TextScreenEffect *this);
void __thiscall TextScreenEffect::Stop(TextScreenEffect *this);
void __thiscall TextScreenEffect::Draw(TextScreenEffect *this, NiRenderer *pkRenderer);
void __thiscall TextScreenEffect::UpdateFade(TextScreenEffect *this, float fCurTime);
void __thiscall TextScreenEffect::AddSchedule(TextScreenEffect *this, int eSchedule);
void __thiscall TextScreenEffect::Terminate(TextScreenEffect *this);
bool __thiscall TextScreenEffect::InitFadeScreen(TextScreenEffect *this);
void __thiscall TextScreenEffect::Update(TextScreenEffect *this, float fCurTime);
void __thiscall TextScreenEffect::TextScreenEffect(TextScreenEffect *this);
TextScreenWin *__cdecl TextScreenWin::CreateWin();
bool __thiscall TextScreenEffect::InitWin(TextScreenEffect *this);
void __thiscall TextScreenEffect::Start(TextScreenEffect *this, const char *pcText, float fCurTime, float fFadeTime, bool isCinematic);
void __thiscall Singleton<TextScreenEffect>::_Singleton<TextScreenEffect>(Singleton<TextScreenEffect> *this);
void *__thiscall Singleton<TextScreenEffect>::_vector_deleting_destructor_(Singleton<TextScreenEffect> *this, unsigned int);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_NiTListBase<NiTPointerAllocator<unsigned_int>_int>(NiTListBase<NiTPointerAllocator<unsigned int>,int> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,int> *this, unsigned int);
void __thiscall NiTPointerList<int>::_NiTPointerList<int>(NiTPointerList<int> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_int>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,int> *this, unsigned int);
void __thiscall PgTList<int>::_PgTList<int>(PgTList<int> *this);
void *__thiscall PgTList<int>::_vector_deleting_destructor_(PgTList<int> *this, unsigned int);
void *__thiscall TextScreenWin::_vector_deleting_destructor_(TextScreenWin *this, unsigned int);
void *__thiscall TextScreenEffect::_scalar_deleting_destructor_(TextScreenEffect *this, unsigned int);
int __cdecl Timer::GetHour(long double Sec);
int __cdecl Timer::GetDay(long double Sec);
int __cdecl Timer::GetMin(long double Sec);
bool __cdecl Timer::TimeCheck(tm *kTime);
bool __thiscall Tutorial::SetLockItemSell(Tutorial *this, bool b);
bool __thiscall Tutorial::SetLockItemShop(Tutorial *this, bool b);
bool __thiscall Tutorial::SetLockSkillShop(Tutorial *this, bool b);
bool __thiscall Tutorial::SetLockItemShopTab(Tutorial *this, bool b);
bool __thiscall Tutorial::SetLockSkillShopTab(Tutorial *this, bool b);
bool __thiscall Tutorial::SetHideQuestGiveUp(Tutorial *this, bool b);
void __thiscall Tutorial::SetBoxAnnounceMsg(Tutorial *this, const char *pcMsg);
void __thiscall Tutorial::InitMobKillCount(Tutorial *this, unsigned __int16 kMobID, unsigned int uiMobCount);
void __thiscall Tutorial::AddMobKillCount(Tutorial *this);
bool __thiscall Tutorial::IsEndMobKillCount(Tutorial *this);
void __thiscall Tutorial::Terminate(Tutorial *this);
void __thiscall Tutorial::Update(Tutorial *this, float fTime);
bool __thiscall Tutorial::BlinkMainMenu(Tutorial *this, bool bActive, int iSlotType);
void __thiscall Tutorial::SetItemMoveEffectKey(Tutorial *this, int iEffectKey);
bool __thiscall Tutorial::IsHaveItem(Tutorial *this, const char *pcItemIdx);
bool __thiscall Tutorial::IsEquipItem(Tutorial *this, const char *pcItemIdx);
bool __thiscall Tutorial::IsOpenItemShop(Tutorial *this);
bool __thiscall Tutorial::IsOpenSkillShop(Tutorial *this);
bool __thiscall Tutorial::IsOpenNPCDialog(Tutorial *this);
bool __thiscall Tutorial::LockStoneShopInv(Tutorial *this, unsigned int uiIgnoreSlot);
bool __thiscall Tutorial::SetLockStoneShop(Tutorial *this, bool b);
bool __thiscall Tutorial::SetItemShopTab(Tutorial *this, unsigned int uiTab);
void __thiscall Tutorial::_Tutorial(Tutorial *this);
bool __thiscall Tutorial::BlinkStoneShop(Tutorial *this, unsigned int uiSlot, int *iEffectKey);
bool __thiscall Tutorial::BlinkInven(Tutorial *this, const char *pcItemIdx, int *iEffectKey);
bool __thiscall Tutorial::BlinkShortCut(Tutorial *this, int *iEffectKey);
bool __thiscall Tutorial::BlinkEffect(Tutorial *this, std::vector<enum Tutorial::eBlinkEffectType,std::allocator<enum Tutorial::eBlinkEffectType> > *kBlinkEffectTypeList, int *riEffectKey, int *riEffectCount);
bool __thiscall Tutorial::BlinkQuestAccept(Tutorial *this, int *iEffectKey);
void __thiscall Tutorial::RemoveBlinkQuestAccept(Tutorial *this, int *iEffectKey);
void __thiscall Tutorial::Tutorial(Tutorial *this);
void __thiscall Tutorial::Init(Tutorial *this, PgFrameWork *pkFrameWork);
void __thiscall Tutorial::SetTutorialMark(Tutorial *this, bool bShow, NiPoint3 kPos, float fSize);
void __thiscall Tutorial::RemoveBlinkEffect(Tutorial *this, int iEffectKey);
bool __thiscall Tutorial::BlinkFreeStat(Tutorial *this, int *iEffectKey, int *iEffectCount);
bool __thiscall Tutorial::BlinkItemShop(Tutorial *this, const char *pcItemIdx, unsigned int uiTab, unsigned int uiPage, int *iEffectKey);
bool __thiscall Tutorial::BlinkSkillShop(Tutorial *this, const char *pcItemIdx, unsigned int uiTab, unsigned int uiPage, int *iEffectKey);
bool __thiscall Tutorial::BlinkSkill(Tutorial *this, const char *pcSkillIdx, int *iEffectKey);
bool __thiscall Tutorial::IsLearnSkill(Tutorial *this, const char *pcSkillIdx);
bool __thiscall Tutorial::IsSelectSkill(Tutorial *this, const char *pcSkillIdx);
bool __thiscall Tutorial::LockItemShopInv(Tutorial *this, const char *pcIgnoreItemIdx, unsigned int uiTab, unsigned int uiPage);
bool __thiscall Tutorial::LockSkillShopInv(Tutorial *this, const char *pcIgnoreItemIdx, unsigned int uiTab, unsigned int uiPage);
void __thiscall Singleton<Tutorial>::_Singleton<Tutorial>(Singleton<Tutorial> *this);
void *__thiscall Singleton<Tutorial>::_vector_deleting_destructor_(Singleton<Tutorial> *this, unsigned int);
void __thiscall NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>(NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> > *this);
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this, unsigned int key, NiPointer<PgWinBut> val);
void __thiscall NiTMap<int_NiPointer<PgWin>>::_NiTMap<int_NiPointer<PgWin>>(NiTMap<int,NiPointer<PgWin> > *this);
void __thiscall NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>(NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *> *this);
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> > *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vector_deleting_destructor_(NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *> *this, unsigned int);
NiPointer<PgWin> *__thiscall PgWin::DetachChildWin(PgWin *this, NiPointer<PgWin> *result, PgWin *pkChild);
void *__thiscall NiTMap<int_NiPointer<PgWin>>::_vector_deleting_destructor_(NiTMap<int,NiPointer<PgWin> > *this, unsigned int);
void *__thiscall NiTMap<enum__Tutorial::eBlinkEffectType_PgWin__>::_scalar_deleting_destructor_(NiTMap<enum Tutorial::eBlinkEffectType,PgWin *> *this, unsigned int);
void __thiscall NsDecal::SetDecalSize(NsDecal *this, float fHeight_, float fWidth_);
void *__thiscall Tutorial::_vector_deleting_destructor_(Tutorial *this, unsigned int);
void __thiscall UIBlinkEffect::UIBlinkEffect(UIBlinkEffect *this);
void __thiscall UIBlinkEffect::_UIBlinkEffect(UIBlinkEffect *this);
bool __thiscall UIBlinkEffect::Create(UIBlinkEffect *this, PgWin *pkParent, NiColorA *kColor);
bool __thiscall UIBlinkEffect::Create(UIBlinkEffect *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, NiColorA *kColor);
void __thiscall UIBlinkEffect::UpdateMeWin(UIBlinkEffect *this, float fTime);
UIBlinkEffect *__cdecl UIBlinkEffect::CreateWin(PgWin *pkParent, NiColorA *kColor);
UIBlinkEffect *__cdecl UIBlinkEffect::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, NiColorA *kColor);
void *__thiscall UIBlinkEffect::_vector_deleting_destructor_(UIBlinkEffect *this, unsigned int);
void __thiscall UIUtil::SetParent(UIUtil *this, PgWin *pkParent);
void __thiscall UIUtil::SetOffset(UIUtil *this, int iXOff, int iYOff);
void __thiscall UIUtil::GetOffset(UIUtil *this, int *iXOff, int *iYOff);
PgWinText *__thiscall UIUtil::CreateAttachedText(UIUtil *this, PgWin *pkParent, char *pcText, D3DXCOLOR kColor, unsigned int uiAlign);
bool __thiscall UIUtil::CreateFrame(UIUtil *this, const char *pkFileName, const char *pkSprName, PgWinFrame *pkWinFrame, PgFrameWork *pkFrameWork, const char *pkFrameName);
PgFont *__thiscall UIUtil::AddOutLineFromFontType(UIUtil *this, Font::Type pkType, unsigned int dwOutline);
PgWinText *__thiscall UIUtil::CreateTextNoTag(UIUtil *this, int uiLeft, int uiTop, int uiWidth, int uiHeight, char *pcText, PgWin *pkParent, unsigned int uiMargin, D3DXCOLOR kColor, unsigned int uiAlign, NiSourceTexture *pkTexture, bool bAutoAbberitate);
void __thiscall UIUtil::UIUtil(UIUtil *this);
void __thiscall UIUtil::_UIUtil(UIUtil *this);
void __thiscall UIUtil::SetUIGeom(UIUtil *this, NiAVObject *pkNode);
PgWinBut *__thiscall UIUtil::CreateBtn(UIUtil *this, unsigned int uiCmdMsg, char *pcNormal, char *pcFocus, char *pcPushed, char *pcDisable, NiSourceTexture *pkTexture);
PgWinBut *__thiscall UIUtil::CreateBtnNoSpr(UIUtil *this, unsigned int uiCmdMsg, char *pcTag);
PgWinCloseBut *__thiscall UIUtil::CreateCloseBtn(UIUtil *this, char *pcNormal, char *pcFocus, char *pcClick);
EditWinEx *__thiscall UIUtil::CreateEditEx(UIUtil *this, char *pcTag, int iLimit, EditWin::Type eType, NiSourceTexture *pkTexture, bool bClearTextOnEnd);
EditWin *__thiscall UIUtil::CreateEdit(UIUtil *this, char *pcTag, int iLimit, EditWin::Type eType, NiSourceTexture *pkTexture, bool bClearTextOnEnd);
PgWinText *__thiscall UIUtil::CreateTextNoSprEx(UIUtil *this, char *pcTag, char *pcText, D3DXCOLOR kColor, unsigned int uiAlign, unsigned int uiMinusLeft, unsigned int uiMinusTop);
PgWinText *__thiscall UIUtil::CreateTextNoSpr(UIUtil *this, char *pcTag, char *pcText, D3DXCOLOR kColor, unsigned int uiAlign);
PgWinSpr *__thiscall UIUtil::CreateSpr(UIUtil *this, char *pcTag, NiSourceTexture *pkTexture);
IconWin *__thiscall UIUtil::CreateIcon(UIUtil *this, const char *pkIconName, int Index, int LbuttonMsg, int RbuttonMgg, UIUtil::IconCreateFunc *rFunction);
PgWinBar *__thiscall UIUtil::CreateBar(UIUtil *this, char *pkTag, NiSourceTexture *pkTexture);
PgWinText *__thiscall UIUtil::CreateText(UIUtil *this, char *pcTag, char *pcText, unsigned int uiMargin, D3DXCOLOR kColor, unsigned int uiAlign, NiSourceTexture *pkTexture, bool bAutoAbberitate);
PgWinText *__thiscall UIUtil::CreateTextEx(UIUtil *this, char *pcTag, char *pcText, unsigned int uiMargin, D3DXCOLOR kColor, unsigned int uiAlign, NiSourceTexture *pkTexture, int uiMinusTop, int uiMinusLeft);
PgWinBut *__thiscall UIUtil::CreateButton(UIUtil *this, unsigned int uiCmdMsg, const char *pkButtonName, NiSourceTexture *pkTexture, int nCheckButtonCount);
ColumnBut *__thiscall UIUtil::CreateCheckButton(UIUtil *this, unsigned int uiCmdMsg, const char *pkButtonTagName, NiSourceTexture *pkTexture, int nCheckButtonCount);
void *__thiscall UIUtil::_vector_deleting_destructor_(UIUtil *this, unsigned int);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, const char *_Right);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
void __thiscall ZlibUtil::ZlibUtil(ZlibUtil *this);
int __thiscall ZlibUtil::load_input(ZlibUtil *this);
int __thiscall ZlibUtil::flush_output(ZlibUtil *this);
int __thiscall ZlibUtil::flush_outputToBuffer(ZlibUtil *this);
void __thiscall zlibUtil2::zlibUtil2(zlibUtil2 *this);
void __thiscall zlibUtil2::_zlibUtil2(zlibUtil2 *this);
int __thiscall zlibUtil2::flush_output(zlibUtil2 *this);
int __thiscall ZlibUtil::compress(ZlibUtil *this, const char *input, const char *output, int level);
int __thiscall ZlibUtil::compressToMemory(ZlibUtil *this, const char *input, int level);
int __thiscall ZlibUtil::decompress(ZlibUtil *this, const char *input, const char *output);
int __thiscall ZlibUtil::decompressToBuffer(ZlibUtil *this, const char *input);
int __thiscall zlibUtil2::compress(zlibUtil2 *this, char *input, unsigned int input_size, char **output, unsigned int *output_size, int level);
int __thiscall zlibUtil2::decompress(zlibUtil2 *this, char *input, unsigned int input_size, char **output, unsigned int *output_size);
void *__thiscall zlibUtil2::_vector_deleting_destructor_(zlibUtil2 *this, unsigned int);
void __thiscall AutoSizingTextWin::AutoSizingTextWin(AutoSizingTextWin *this);
void __thiscall AutoSizingTextWin::_AutoSizingTextWin(AutoSizingTextWin *this);
bool __thiscall AutoSizingTextWin::Create(AutoSizingTextWin *this, int iXPos, int iYPos, PgFont *pkFont, PgWin *pkParent);
void __thiscall AutoSizingTextWin::SetText(AutoSizingTextWin *this, char *pcText);
AutoSizingTextWin *__cdecl AutoSizingTextWin::CreateWin(int iXPos, int iYPos, PgFont *pkFont, PgWin *pkParent);
void __thiscall PgFont::GetTextSize(PgFont *this, char *pcText, int iTextSize, tagSIZE *kSize);
void __thiscall PgTextGeometry::SetDrawFormat(PgTextGeometry *this, unsigned int uiDrawFormat);
NiRTTI *__thiscall PgWinText::GetRTTI(PgWinText *this);
void __cdecl PgWinText::VsSetText(PgWinText *this, char *pcFormat);
void __thiscall PgWinText::SetTextColor(PgWinText *this, char ucR, char ucG, char ucB, char ucA);
void *__thiscall AutoSizingTextWin::_scalar_deleting_destructor_(AutoSizingTextWin *this, unsigned int);
void __thiscall PgWinText::SetFont(PgWinText *this, PgFont *pkFont);
PgFont *__thiscall PgWinText::GetFont(PgWinText *this);
void __thiscall PgWinText::SetTextRect(PgWinText *this, tagRECT *kRect);
void __thiscall PgWinText::SetTextColor(PgWinText *this, D3DXCOLOR *kColor);
void __thiscall PgWinText::SetText(PgWinText *this, const char *pcText);
char *__thiscall PgWinText::GetText(PgWinText *this);
void __thiscall PgWinText::SetDrawFormat(PgWinText *this, unsigned int uiDrawFormat);
void __thiscall ClientWin::ClientWin(ClientWin *this);
void __thiscall ClientWin::_ClientWin(ClientWin *this);
bool __thiscall ClientWin::Create(ClientWin *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall ClientWin::OnCommand(ClientWin *this, unsigned int wParam, int lParam);
ClientWin *__cdecl ClientWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
void *__thiscall ClientWin::_vector_deleting_destructor_(ClientWin *this, unsigned int);
void __thiscall EditWin::OnCommand(EditWin *this, unsigned int wParam, int lParam);
void __thiscall EditWin::OnClose(EditWin *this);
void __thiscall EditWin::SetEnable(EditWin *this, bool bRes);
void __thiscall EditWinEx::SetFocusClear(EditWinEx *this, bool b);
char *__thiscall EditWin::GetText(EditWin *this);
char *__thiscall EditWin::GetLastText(EditWin *this);
void __thiscall EditWin::SetText(EditWin *this, const char *pcText);
void __thiscall EditWin::ChangeText(EditWin *this, const char *pcText);
void __thiscall EditWin::ClearAllText(EditWin *this);
void __thiscall EditWin::SetTextColor(EditWin *this, D3DXCOLOR *kDxColor);
void __thiscall EditWin::SetFocus(EditWin *this);
void __thiscall EditWin::KillFocus(EditWin *this, bool bShowText);
void __thiscall EditWin::Recover_focus(EditWin *this);
EditWin::ImeStatus __thiscall EditWin::GetImeStatus(EditWin *this);
void __thiscall EditWin::SetImeStatus(EditWin *this, EditWin::ImeStatus eStatus);
void __thiscall EditWin::SetWidth(EditWin *this, unsigned int uiWidth);
void __thiscall EditWin::SetHeight(EditWin *this, unsigned int uiHeight);
void __thiscall EditWin::SetAutoAlign(EditWin *this, bool bAutoAlign);
bool __thiscall EditWin::GetAutoAlign(EditWin *this);
void __thiscall EditWin::SelectAll(EditWin *this);
void __thiscall EditWin::StrAlign(EditWin *this);
void __thiscall EditWin::EditWin(EditWin *this);
void __thiscall EditWin::_EditWin(EditWin *this);
void __thiscall EditWin::SetCaretColor(EditWin *this, D3DXCOLOR *kDxColor);
void __thiscall EditWin::OnEditEnd(EditWin *this, unsigned int wParam, int lParam);
void __thiscall EditWin::UpdateMeWin(EditWin *this, float fCurTime);
void __thiscall EditWinEx::SetDrawFormat(EditWinEx *this, unsigned int uiAlign);
unsigned int __thiscall EditWinEx::GetDrawFormat(EditWinEx *this);
void __thiscall EditWinEx::OnEditEnd(EditWinEx *this, unsigned int wParam, int lParam);
void __thiscall EditWinEx::KillFocus(EditWinEx *this, bool bShowText);
void __thiscall EditWinEx::SetFocus(EditWinEx *this);
bool __thiscall EditWin::Create(EditWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick);
void __thiscall EditWinEx::EditWinEx(EditWinEx *this);
void __thiscall EditWinEx::_EditWinEx(EditWinEx *this);
bool __thiscall EditWinEx::Create(EditWinEx *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick);
EditWin *__cdecl EditWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick);
EditWinEx *__cdecl EditWinEx::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick);
void __thiscall EditWinEx::SetDefaultStr(EditWinEx *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *DefaultStr);
void __cdecl PgUtil::SetXYTranslate(NiAVObject *pkAVObj, float fX, float fY);
void __thiscall EditWin::SetFont(EditWin *this);
bool __thiscall EditWin::IsDuringEdit(EditWin *this);
void *__thiscall EditWin::_scalar_deleting_destructor_(EditWin *this, unsigned int);
void *__thiscall EditWinEx::_scalar_deleting_destructor_(EditWinEx *this, unsigned int);
void __thiscall FlexMsgBox::FlexMsgBox(FlexMsgBox *this);
void __thiscall FlexMsgBox::_FlexMsgBox(FlexMsgBox *this);
void __thiscall FlexMsgBox::SetText(FlexMsgBox *this, char *pcText);
void __thiscall FlexMsgBox::SetVerticalGap(FlexMsgBox *this, int iGap);
void __thiscall FlexMsgBox::OnCommand(FlexMsgBox *this, unsigned int wParam, int lParam);
bool __thiscall FlexMsgBox::Create(FlexMsgBox *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, PgFrameWork *pkFrameWork);
FlexMsgBox *__cdecl FlexMsgBox::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth, PgFrameWork *pkFrameWork);
void __cdecl FlexMsgBox::Open(char *pcText);
void *__thiscall FlexMsgBox::_scalar_deleting_destructor_(FlexMsgBox *this, unsigned int);
void __thiscall FrameBoxWin::FrameBoxWin(FrameBoxWin *this);
void __thiscall FrameBoxWin::_FrameBoxWin(FrameBoxWin *this);
bool __thiscall FrameBoxWin::SizeDragHitTest(FrameBoxWin *this);
void __thiscall FrameBoxWin::ResizeLimited(FrameBoxWin *this, int iWidth, int iHeight);
bool __thiscall FrameBoxWin::HitTestEx(FrameBoxWin *this, int iSx, int iSy);
void __thiscall FrameBoxWin::ProcessMeInput(FrameBoxWin *this, bool *bHit);
void __thiscall FrameBoxWin::AddScreenElement(FrameBoxWin *this, NiScreenElements *pkGeom, unsigned int uiTextureWidth, unsigned int uiTextureHeight, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall FrameBoxWin::ResizeScreenElement(FrameBoxWin *this, NiScreenElements *pkGeom, unsigned int uiIndex, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall FrameBoxWin::Resize(FrameBoxWin *this, unsigned int uiWidth, unsigned int uiHeight);
bool __thiscall FrameBoxWin::CreateGeometry(FrameBoxWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight);
bool __thiscall FrameBoxWin::Create(FrameBoxWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, int iXPos, int iYPos, PgWin *pkParent, PgFrameWork *pkFrameWork);
FrameBoxWin *__cdecl FrameBoxWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth, int iXPos, int iYPos, PgWin *pkParent, PgFrameWork *pkFrameWork);
void __thiscall PgWin::Bool::RealizeFalse(PgWin::Bool *this);
void *__thiscall FrameBoxWin::_scalar_deleting_destructor_(FrameBoxWin *this, unsigned int);
void __thiscall NiTexturingProperty::SetBaseFilterMode(NiTexturingProperty *this, NiTexturingProperty::FilterMode eMode);
void __thiscall ImeCandListWin::ImeCandListWin(ImeCandListWin *this);
void __thiscall ImeCandListWin::_ImeCandListWin(ImeCandListWin *this);
void __thiscall ImeCandListWin::ClearText(ImeCandListWin *this);
bool __thiscall ImeCandListWin::SetText(ImeCandListWin *this, int nLine, char *pcText, int r, int g, int b);
void __thiscall ImeCandListWin::EnableAttachBottom(ImeCandListWin *this, bool b);
bool __thiscall ImeCandListWin::Create(ImeCandListWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, PgWin *pkParent);
void __thiscall ImeCandListWin::SetCandList(ImeCandListWin *this, PgImeCtrl::CandList *kCandList);
void __thiscall ImeCandListWin::AdjustSizeWin(ImeCandListWin *this, int iXPos, int iYPos, int iBottomYPos);
ImeCandListWin *__cdecl ImeCandListWin::CreateWin(PgWin *pkParent);
void *__thiscall ImeCandListWin::_scalar_deleting_destructor_(ImeCandListWin *this, unsigned int);
void __thiscall ImeEditWin::EnalbeCompStrAttachBottom(ImeEditWin *this, bool b);
void __thiscall ImeEditWin::EnablePaste(ImeEditWin *this, bool bEnable);
bool __thiscall ImeEditWin::IsCompStrExist(ImeEditWin *this);
bool __thiscall ImeEditWin::IsOnCandList(ImeEditWin *this);
void __thiscall ImeEditWinEx::EnalbeCompStrAttachBottom(ImeEditWinEx *this, bool b);
void __thiscall ImeEditWinEx::EnablePaste(ImeEditWinEx *this, bool bEnable);
bool __thiscall ImeEditWinEx::IsCompStrExist(ImeEditWinEx *this);
bool __thiscall ImeEditWinEx::IsOnCandList(ImeEditWinEx *this);
void __thiscall ImeEditWin::ImeEditWin(ImeEditWin *this);
void __thiscall ImeEditWin::_ImeEditWin(ImeEditWin *this);
void __thiscall ImeEditWin::UpdateMeWin(ImeEditWin *this, float fCurTime);
void __thiscall ImeEditWinEx::ImeEditWinEx(ImeEditWinEx *this);
void __thiscall ImeEditWinEx::_ImeEditWinEx(ImeEditWinEx *this);
void __thiscall ImeEditWinEx::UpdateMeWin(ImeEditWinEx *this, float fCurTime);
bool __thiscall ImeEditWin::Create(ImeEditWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt);
bool __thiscall ImeEditWinEx::Create(ImeEditWinEx *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt);
ImeEditWin *__cdecl ImeEditWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt);
ImeEditWinEx *__cdecl ImeEditWinEx::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt);
void *__thiscall ImeEditWin::_vector_deleting_destructor_(ImeEditWin *this, unsigned int);
void *__thiscall ImeEditWinEx::_vector_deleting_destructor_(ImeEditWinEx *this, unsigned int);
void __thiscall InputBox::InputBox(InputBox *this);
void __thiscall InputBox::_InputBox(InputBox *this);
void __thiscall InputBox::SetText(InputBox *this, char *pcText);
void __thiscall InputBox::SetActionAfterInputEnd(InputBox *this, InputBox::ActionAfterInputEnd eInputEnd);
void __thiscall InputBox::OnClose(InputBox *this);
void __thiscall InputBox::OnShowWin(InputBox *this);
void __thiscall InputBox::SetFocus(InputBox *this);
void __thiscall InputBox::OnCmdOk(InputBox *this);
void __thiscall InputBox::OnCmdCancel(InputBox *this);
void __thiscall InputBox::OnEditEnd(InputBox *this, unsigned int wParam, int lParam);
bool __thiscall InputBox::Create(InputBox *this);
void __thiscall InputBox::OnCommand(InputBox *this, unsigned int wParam, int lParam);
InputBox *__cdecl InputBox::CreateWin();
void *__thiscall InputBox::_vector_deleting_destructor_(InputBox *this, unsigned int);
void __thiscall ListItem::SetText(ListItem *this, char *pcText);
bool __thiscall ListWin::SetItem(ListWin *this, int iIndex, void *pvItem);
void *__thiscall ListWin::GetItem(ListWin *this, int iIndex);
int __thiscall ListWin::GetCurSel(ListWin *this);
void __thiscall ListWin::SetTextColor(ListWin *this, char ucR, char ucG, char ucB, char ucA);
void __thiscall ListWin::SetSelectedTextColor(ListWin *this, char ucR, char ucG, char ucB, char ucA);
void __thiscall ListWin::SetSelectedTextColor(ListWin *this, D3DXCOLOR *kColor);
void __thiscall ListWin::OnCommand(ListWin *this, unsigned int wParam, int lParam);
void __thiscall ListWin::OnSelected(ListWin *this, int lParam);
int __thiscall ListWin::GetCount(ListWin *this);
ListItem *__thiscall ListWin::GetListItem(ListWin *this, int iIndex);
PgWinText *__thiscall ListWin::GetTextWin(ListWin *this, int iIndex);
void __thiscall ListWin::_ListWin(ListWin *this);
bool __thiscall ListWin::Create(ListWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, unsigned int uiLineSpace);
int __thiscall ListWin::AddString(ListWin *this, char *pcText);
bool __thiscall ListWin::SetCurSel(ListWin *this, int iIndex);
void __thiscall ListWin::ResetContent(ListWin *this);
void __thiscall ListWin::UpdateMeWin(ListWin *this, float fCurTime);
void __thiscall ListWin::ListWin(ListWin *this);
bool __thiscall ListWin::DeleteString(ListWin *this, int iIndex);
ListWin *__cdecl ListWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, unsigned int uiLineSpace);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *this);
void __thiscall NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_NiTListBase<DFALL<PgWinBut__>_PgWinBut__>(NiTListBase<DFALL<PgWinBut *>,PgWinBut *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *this, unsigned int);
void *__thiscall NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_scalar_deleting_destructor_(NiTListBase<DFALL<PgWinBut *>,PgWinBut *> *this, unsigned int);
void __thiscall NiTPointerList<NiPointer<ListItem>>::_NiTPointerList<NiPointer<ListItem>>(NiTPointerList<NiPointer<ListItem> > *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *this, unsigned int);
void __thiscall PgTList<NiPointer<ListItem>>::_PgTList<NiPointer<ListItem>>(PgTList<NiPointer<ListItem> > *this);
void *__thiscall ListItem::_scalar_deleting_destructor_(ListItem *this, unsigned int);
void __thiscall NiTList<PgWinBut__>::_NiTList<PgWinBut__>(NiTList<PgWinBut *> *this);
void *__thiscall PgTList<NiPointer<ListItem>>::_scalar_deleting_destructor_(PgTList<NiPointer<ListItem> > *this, unsigned int);
void __thiscall NiTPointerList<NiPointer<PgWinText>>::_NiTPointerList<NiPointer<PgWinText>>(NiTPointerList<NiPointer<PgWinText> > *this);
void *__thiscall NiTPointerListBase<DFALL<PgWinBut__>_PgWinBut__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<PgWinBut *>,PgWinBut *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *this, unsigned int);
void __thiscall PgTList<NiPointer<PgWinText>>::_PgTList<NiPointer<PgWinText>>(PgTList<NiPointer<PgWinText> > *this);
NiPointer<PgWin> *__thiscall NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::RemoveHead(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result);
NiPointer<PgWin> *__thiscall NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::RemoveTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result);
void *__thiscall PgTList<NiPointer<PgWinText>>::_scalar_deleting_destructor_(PgTList<NiPointer<PgWinText> > *this, unsigned int);
NiPointer<PgWin> *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::RemovePos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result, void **kPos);
void *__thiscall ListWin::_vector_deleting_destructor_(ListWin *this, unsigned int);
NiTexture *__thiscall MaskedWin::GetBaseTexture(MaskedWin *this);
NiTriShape *__thiscall MaskedWin::GetTriShape(MaskedWin *this);
void __thiscall MaskedWin::MaskedWin(MaskedWin *this);
void __thiscall MaskedWin::_MaskedWin(MaskedWin *this);
bool __thiscall MaskedWin::Create(MaskedWin *this, int iXPos, int iYPos, NiTriShape *pkTriShape, bool bAlphaBlend, PgWin *pkParent);
void __thiscall MaskedWin::SetBaseTextureMatrix(MaskedWin *this, float fOffX, float fOffY, float fScaleX, float fScaleY);
void __thiscall MaskedWin::SetDarkMap(MaskedWin *this, NiTexture *pkTexture);
void __thiscall MaskedWin::SetBaseTexture(MaskedWin *this, NiTexture *pkTexture);
MaskedWin *__cdecl MaskedWin::CreateWin(int iXPos, int iYPos, NiTriShape *pkTriShape, PgWin *pkParent);
MaskedWin *__cdecl MaskedWin::CreateWin_MaskShaderNoAlphaBlend(int iXPos, int iYPos, NiTriShape *pkTriShape, PgWin *pkParent);
void __thiscall NiBinaryExtraData::NiBinaryExtraData(NiBinaryExtraData *this, const unsigned int uiSize, char *pcBinaryData);
NiRTTI *__thiscall NiBinaryExtraData::GetRTTI(NiBinaryExtraData *this);
void *__thiscall NiBinaryExtraData::_vector_deleting_destructor_(NiBinaryExtraData *this, unsigned int);
void *__thiscall MaskedWin::_vector_deleting_destructor_(MaskedWin *this, unsigned int);
bool __thiscall MaskShader::Initialize(MaskShader *this, NiDX9Renderer *pkRenderer);
void __thiscall MaskShader::_MaskShader(MaskShader *this);
bool __thiscall MaskShader::CreateStagesAndPasses(MaskShader *this);
LONG __cdecl MaskShader::Terminate();
void __thiscall MaskShader::MaskShader(MaskShader *this, bool bEnableAlphaBlend);
unsigned int __thiscall MaskShader::UpdatePipeline(MaskShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
MaskShader *__cdecl MaskShader::GetShader();
MaskShader *__cdecl MaskShader::GetShader_NoAlphaBlend();
void __thiscall NiPointer<NiD3DTextureStage>::_NiPointer<NiD3DTextureStage>(NiPointer<NiD3DTextureStage> *this);
void __thiscall NiPointer<NiD3DPass>::_NiPointer<NiD3DPass>(NiPointer<NiD3DPass> *this);
void __thiscall NiTArray<NiPointer<NiD3DPass>>::SetSize(NiTArray<NiPointer<NiD3DPass> > *this, unsigned int uiMaxSize);
void __thiscall NiTArray<NiPointer<NiD3DPass>>::SetAt(NiTArray<NiPointer<NiD3DPass> > *this, unsigned int uiIndex, NiPointer<NiD3DPass> *element);
NiD3DTextureStage *__thiscall NiD3DPass::GetStage(NiD3DPass *this, unsigned int uiStageNum);
NiRTTI *__thiscall MaskShader::GetRTTI(MaskShader *this);
NiRTTI *__thiscall MaskShader_NoAlphaBlend::GetRTTI(MaskShader_NoAlphaBlend *this);
void *__thiscall MaskShader_NoAlphaBlend::_scalar_deleting_destructor_(MaskShader_NoAlphaBlend *this, unsigned int);
void __thiscall MsgBox::SetFrameWorkMsgOnClose(MsgBox *this, PgFrameWork *pkFrameWork, PgMsg::Frame *pkFrameMsg, PgMsg::Frame *pkFrameCancelMsg);
void __thiscall MsgBox::SetFrameWorkMsgOnPrivateStore(MsgBox *this, PgFrameWork *pkFrameWork, PgMsg::Frame *pkFrameMsg, PgMsg::Frame *pkFrameCancelMsg, PgMsg::Frame *pkFrameSearchMsg, PgMsg::Frame *pkFrameCloseMsg);
void __thiscall MsgBox::SetWindowMsgOnClose(MsgBox *this, PgWin *pkRevMsgWin, unsigned int uiOkMsg, unsigned int wOkParam, int lOkParam, unsigned int uiCancelMsg, unsigned int wCancelParam, int lCancelParam);
void __thiscall MsgBox::SetItemIconByID(MsgBox *this, unsigned __int16 nID);
void __thiscall MsgBox::SetUnderSlotText(MsgBox *this, char *pkText);
void __thiscall MsgBox::OnCmdBut1(MsgBox *this);
void __thiscall MsgBox::OnCmdBut2(MsgBox *this);
void __thiscall MsgBox::OnCmdBut4(MsgBox *this);
void __thiscall MsgBox::ProcessMeInput(MsgBox *this, bool *bHit);
void __thiscall MsgBox::SetMsg(MsgBox *this, char *pcText);
void __thiscall MsgBox::_MsgBox(MsgBox *this);
bool __thiscall MsgBox::CreateOkBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture);
bool __thiscall MsgBox::CreateOkCancelBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture);
bool __thiscall MsgBox::CreateCancelBut(MsgBox *this, NiNode *pkNode, NiSourceTexture *pkTexture);
bool __thiscall MsgBox::CreateDenialCloseBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture);
bool __thiscall MsgBox::CreatePrivateStoreBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture);
bool __thiscall MsgBox::CreateAgreeRefusal(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture);
bool __thiscall MsgBox::CreateSearching(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture);
void __thiscall MsgBox::CloseWithOK(MsgBox *this);
void __thiscall MsgBox::CloseWithCancel(MsgBox *this);
void __thiscall MsgBox::Close(MsgBox *this);
void __thiscall MsgBox::OnCmdBut3(MsgBox *this);
void __thiscall MsgBox::MsgBox(MsgBox *this);
void __thiscall MsgBox::OnCommand(MsgBox *this, unsigned int wParam, int lParam);
MsgBox *__cdecl MsgBox::CreateWin(MsgBox::ButType eBut);
MsgBox *__cdecl MsgBox::Modal(MsgBox::ButType eBut, char *pcFormat);
MsgBox *__cdecl MsgBox::Modeless(MsgBox::ButType eBut, char *pcFormat);
bool __thiscall MsgBox::CreateRandomOption(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture);
bool __thiscall MsgBox::Create(MsgBox *this, MsgBox::ButType eBut);
void *__thiscall MsgBox::_scalar_deleting_destructor_(MsgBox *this, unsigned int);
void __thiscall PgWinProxy::OnCommand(PgWinProxy *this, unsigned int wParam, int lParam);
void __thiscall PgWinProxy::OnEditEnd(PgWinProxy *this, unsigned int wParam, int lParam);
PgWinProxy *__cdecl PgWinProxy::CreateWin(PgWin *pkParent);
PgWinProxy *__cdecl PgWinProxy::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent);
void __thiscall SlideBar::SlideBar(SlideBar *this);
void __thiscall SlideBar::_SlideBar(SlideBar *this);
void __thiscall SlideBar::SetCurPos(SlideBar *this, int nPos);
void __thiscall SlideBar::SetSplitCnt(SlideBar *this, int nSplitCnt);
void __thiscall SlideBar::SendMessageToParent(SlideBar *this);
void __thiscall SlideBar::OnSlideBar(SlideBar *this);
void __thiscall SlideBar::OnClick1(SlideBar *this);
void __thiscall SlideBar::OnClick2(SlideBar *this);
void __thiscall SlideBar::OnMouseEvent(SlideBar *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin);
void __thiscall SlideBar::OnCommand(SlideBar *this, unsigned int wParam, int lParam);
bool __thiscall SlideBar::Create(SlideBar *this, NiNode *pNode, char *pName, char *pName1, char *pName2, PgSprData *pkMovePoint, unsigned int uiID, PgWin *pkParent);
SlideBar *__cdecl SlideBar::CreateWin(NiNode *pNode, char *pName, char *pName1, char *pName2, PgSprData *pkMovePoint, unsigned int uiID, PgWin *pkParent);
void *__thiscall SlideBar::_scalar_deleting_destructor_(SlideBar *this, unsigned int);
int __thiscall SlideListWin::GetFontSize(SlideListWin *this, unsigned int uiIndex, int nSize);
bool __thiscall SlideListWin::ListItem::SetData(SlideListWin::ListItem *this, unsigned int dwData);
bool __thiscall SlideListWin::ListItem::GetData(SlideListWin::ListItem *this, unsigned int *dwData);
unsigned int __thiscall ColumnBut::GetTextWinSize(ColumnBut *this);
bool __thiscall ColumnBut::SetFontSize(ColumnBut *this, unsigned int uiIndex, int nSize);
bool __thiscall ColumnBut::SetFontColor(ColumnBut *this, unsigned int uiIndex, int r, int g, int b);
bool __thiscall ColumnBut::AlignText(ColumnBut *this, unsigned int uiIndex, unsigned int uiDrawFormat);
void __thiscall ColumnBut::SetText(ColumnBut *this, unsigned int uiIndex, const char *szString);
void __thiscall ColumnBut::SetButShow(ColumnBut *this, PgWinBut::ButShow eShow);
void __thiscall ColumnBut::ProcessMeInput(ColumnBut *this, bool *bHit);
unsigned int __thiscall SlideListWin::GetItemSize(SlideListWin *this);
bool __thiscall SlideListWin::SetData(SlideListWin *this, unsigned int uiIndex, unsigned int dwData);
bool __thiscall SlideListWin::GetData(SlideListWin *this, unsigned int uiColumn, unsigned int *dwData);
void __thiscall SlideListWin::SetToolTipWin(SlideListWin *this, PgWin *pkToolTipWin);
void __thiscall SlideListWin::SetToolTipWinText(SlideListWin *this, int nItemIndex, char *pcText);
ColumnBut *__thiscall SlideListWin::GetColumn(SlideListWin *this, unsigned int iItemIndex, unsigned int uiColumn);
int __thiscall SlideListWin::GetCurSelIndex(SlideListWin *this);
bool __thiscall SlideListWin::SetCurSelIndex(SlideListWin *this, int nSelIndex);
unsigned int __thiscall SLWCreateInfo::GetItemCnt(SLWCreateInfo *this);
SLWCreateInfo::Item *__thiscall SLWCreateInfo::GetItemInfo(SLWCreateInfo *this, int nIndex);
unsigned int __thiscall SlideListWin::ListItem::GetColumnSize(SlideListWin::ListItem *this);
bool __thiscall SlideListWin::ListItem::SetFontSize(SlideListWin::ListItem *this, unsigned int uiColumn, int nSize);
bool __thiscall SlideListWin::ListItem::SetFontColor(SlideListWin::ListItem *this, unsigned int uiColumn, int r, int g, int b);
bool __thiscall SlideListWin::ListItem::AlignText(SlideListWin::ListItem *this, unsigned int uiColumn, unsigned int uiDrawFormat);
bool __thiscall SlideListWin::ListItem::GetAlignText(SlideListWin::ListItem *this, unsigned int uiColumn, unsigned int *uiDrawFormat);
bool __thiscall SlideListWin::ListItem::GetFontSize(SlideListWin::ListItem *this, unsigned int uiColumn, int *nSize);
bool __thiscall SlideListWin::ListItem::GetFontColor(SlideListWin::ListItem *this, unsigned int uiColumn, int *r, int *g, int *b);
void __thiscall SlideListWin::ListItem::SetFontSize(SlideListWin::ListItem *this, int nSize);
void __thiscall SlideListWin::ListItem::SetFontColor(SlideListWin::ListItem *this, int r, int g, int b);
void __thiscall SlideListWin::ListItem::AlignText(SlideListWin::ListItem *this, unsigned int uiDrawFormat);
void __thiscall ColumnBut::DoAction(ColumnBut *this);
void __thiscall ColumnBut::DoRAction(ColumnBut *this);
bool __thiscall SlideListWin::SetFontSize(SlideListWin *this, unsigned int uiIndex, int nSize);
bool __thiscall SlideListWin::SetFontColor(SlideListWin *this, unsigned int uiIndex, int r, int g, int b);
bool __thiscall SlideListWin::SetFontSize(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn, int nSize);
bool __thiscall SlideListWin::SetFontColor(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn, int r, int g, int b);
bool __thiscall SlideListWin::AlignText(SlideListWin *this, unsigned int uiDrawFormat);
bool __thiscall SlideListWin::AlignText(SlideListWin *this, unsigned int uiColumn, unsigned int uiDrawFormat);
void __thiscall SlideListWin::SetToolTipWinTextInColumn(SlideListWin *this, unsigned int TextWinIndex, char *pcText);
void __thiscall SlideListWin::SetToolTipWin(SlideListWin *this, unsigned int TextWinIndex, PgWin *pkToolTipWin);
float __thiscall SLWCreateInfo::GetHeight(SLWCreateInfo *this);
const char *__thiscall SlideListWin::ListItem::GetText(SlideListWin::ListItem *this, unsigned int nIndex);
char *__thiscall SlideListWin::GetMouseOnItemText(SlideListWin *this, int *retIndex, int ColumnTextIndex);
const char *__thiscall SlideListWin::GetText(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn);
void __thiscall SlideListWin::UpdateViewList(SlideListWin *this);
void __thiscall SlideListWin::OnClickItem(SlideListWin *this, int nItemIndex);
void __thiscall SlideListWin::OnRClickItem(SlideListWin *this, int nItemIndex);
void __thiscall SlideListWin::KillSelIndex(SlideListWin *this);
void __thiscall SlideListWin::OnCommand(SlideListWin *this, unsigned int wParam, int lParam);
void __thiscall ColumnBut::ColumnBut(ColumnBut *this);
void __thiscall ColumnBut::_ColumnBut(ColumnBut *this);
ColumnBut *__cdecl ColumnBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg);
void __thiscall ColumnBut::AddTextWin(ColumnBut *this, PgWinText *pkTextWin);
bool __thiscall SlideListWin::Create(SlideListWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd);
bool __thiscall SlideListWin::Create(SlideListWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgFont *pkFont, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd);
bool __thiscall SlideListWin::ListItem::SetText(SlideListWin::ListItem *this, unsigned int uiColumn, const char *szText);
bool __thiscall SlideListWin::SetText(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn, const char *szText);
void __thiscall SlideListWin::SlideListWin(SlideListWin *this);
void __thiscall SlideListWin::_SlideListWin(SlideListWin *this);
SlideListWin *__cdecl SlideListWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd);
SlideListWin *__cdecl SlideListWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgFont *pkFont, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd);
bool __thiscall SlideListWin::RemoveItem(SlideListWin *this, unsigned int uiIndex);
bool __thiscall SLWCreateInfo::MakeTempData(SLWCreateInfo *this, NiSourceTexture *pkTexture);
void __thiscall SlideListWin::RemoveAllList(SlideListWin *this);
void __thiscall SlideListWin::Sort(SlideListWin *this, int nColumnNum, bool bReverse, bool bSortByNUm);
bool __thiscall SlideListWin::ListItem::SetColumnCnt(SlideListWin::ListItem *this, unsigned int uiColumnCnt);
void __thiscall SlideListWin::ListItem::ListItem(SlideListWin::ListItem *this, const char *szText, int ncolumnCnt);
void __thiscall SlideListWin::ListItem::AddText(SlideListWin::ListItem *this, const char *szText);
int __thiscall SlideListWin::AddText(SlideListWin *this, const char *szText);
int __thiscall SlideListWin::AddHeadText(SlideListWin *this, const char *szText);
SLWCreateInfo::Item *__thiscall SLWCreateInfo::AddItemInfo(SLWCreateInfo *this, int nItemType);
void __thiscall boost::detail::sp_counted_base::destruct(boost::detail::sp_counted_base *this);
void *__thiscall boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::_vector_deleting_destructor_(boost::detail::sp_counted_base_impl<PgNsTerrain::CPgBlockObject *,boost::checked_deleter<PgNsTerrain::CPgBlockObject> > *this, unsigned int);
void *__thiscall boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::get_deleter(boost::detail::sp_counted_base_impl<SlideListWin::ListItem *,boost::checked_deleter<SlideListWin::ListItem> > *this, type_info *ti);
void *__thiscall boost::detail::sp_counted_base_impl<SLWCreateInfo::Item___boost::checked_deleter<SLWCreateInfo::Item>>::get_deleter(boost::detail::sp_counted_base_impl<SLWCreateInfo::Item *,boost::checked_deleter<SLWCreateInfo::Item> > *this, type_info *ti);
SlideListWin::ListItem::ColumnData *__thiscall std::allocator<SlideListWin::ListItem::ColumnData>::allocate(std::allocator<SlideListWin::ListItem::ColumnData> *this, unsigned int _Count);
boost::shared_ptr<SlideListWin::ListItem> *__cdecl std::_Move_backward<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, boost::shared_ptr<SlideListWin::ListItem> *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
bool __thiscall SlideListWin::ListNumSorter::operator__(SlideListWin::ListNumSorter *this, boost::shared_ptr<SlideListWin::ListItem> *spItem1, boost::shared_ptr<SlideListWin::ListItem> *spItem2);
bool __thiscall SlideListWin::ListSorter::operator__(SlideListWin::ListSorter *this, boost::shared_ptr<SlideListWin::ListItem> *spItem1, boost::shared_ptr<SlideListWin::ListItem> *spItem2);
void __thiscall std::allocator<boost::shared_ptr<SlideListWin::ListItem>>::construct(std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *this, boost::shared_ptr<SLWCreateInfo::Item> *_Ptr, boost::shared_ptr<SLWCreateInfo::Item> *_Val);
void __cdecl std::_Construct<boost::shared_ptr<SLWCreateInfo::Item>_boost::shared_ptr<SLWCreateInfo::Item>_const__>(boost::shared_ptr<SLWCreateInfo::Item> *_Ptr, boost::shared_ptr<SLWCreateInfo::Item> *_Val);
void __cdecl std::_Push_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Top, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListNumSorter _Pred);
void __cdecl std::_Push_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Top, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListSorter _Pred);
NiPointer<PgSprData> *__cdecl std::_Uninit_move<NiPointer<ScreenBoardTexture::DescInfo>___NiPointer<ScreenBoardTexture::DescInfo>___std::allocator<NiPointer<ScreenBoardTexture::DescInfo>>_NiPointer<ScreenBoardTexture::DescInfo>>(NiPointer<PgSprData> *_First, NiPointer<PgSprData> *_Last, NiPointer<PgSprData> *_Dest, std::allocator<NiPointer<PgSprData> > *_Al, NiPointer<PgSprData> *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Insertion_sort1<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal);
void __cdecl std::_Insertion_sort1<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal);
void __cdecl std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred);
void __cdecl std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Bottom, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListNumSorter _Pred);
void __cdecl std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred);
void __cdecl std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Bottom, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListSorter _Pred);
void __cdecl std::_Rotate<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, int *__formal, boost::shared_ptr<SlideListWin::ListItem> *__formal);
void __thiscall std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(std::vector<unsigned long,std::allocator<unsigned long> > *this, const unsigned int *_Val);
void __cdecl std::_Reverse<boost::shared_ptr<SlideListWin::ListItem>__>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, std::bidirectional_iterator_tag __formal);
boost::shared_ptr<SLWCreateInfo::Item> *__cdecl std::_Uninit_move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>___std::allocator<boost::shared_ptr<SlideListWin::ListItem>>_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SLWCreateInfo::Item> *_First, boost::shared_ptr<SLWCreateInfo::Item> *_Last, boost::shared_ptr<SLWCreateInfo::Item> *_Dest, std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *_Al, boost::shared_ptr<SLWCreateInfo::Item> *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Median<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred);
void __cdecl std::_Make_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred, int *__formal, boost::shared_ptr<SlideListWin::ListItem> *__formal);
void __cdecl std::_Median<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred);
void __cdecl std::_Make_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred, int *__formal, boost::shared_ptr<SlideListWin::ListItem> *__formal);
void __cdecl std::_Pop_heap_0<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal);
void __cdecl std::_Pop_heap_0<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal);
void *__thiscall ColumnBut::_scalar_deleting_destructor_(ColumnBut *this, unsigned int);
void __cdecl std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(boost::shared_ptr<SLWCreateInfo::Item> *_First, boost::shared_ptr<SLWCreateInfo::Item> *_Last, std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *__cdecl std::_Unguarded_partition<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *result, boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred);
std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *__cdecl std::_Unguarded_partition<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *result, boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred);
void __cdecl std::_Dest_val<std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(std::allocator<SlideListWin::ListItem::ColumnData> *_Alval, SlideListWin::ListItem::ColumnData *_Pdest);
void __cdecl std::_Destroy_range<std::allocator<SlideListWin::ListItem::ColumnData>>(SlideListWin::ListItem::ColumnData *_First, SlideListWin::ListItem::ColumnData *_Last, std::allocator<SlideListWin::ListItem::ColumnData> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Sort_heap<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred);
void __cdecl std::_Sort_heap<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred);
void __thiscall std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::reserve(std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *this, unsigned int _Count);
void __cdecl std::_Uninit_def_fill_n<SlideListWin::ListItem::ColumnData___unsigned_int_SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(SlideListWin::ListItem::ColumnData *_First, unsigned int _Count, SlideListWin::ListItem::ColumnData *__formal, std::allocator<SlideListWin::ListItem::ColumnData> *_Al, SlideListWin::ListItem::ColumnData *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
SlideListWin::ListItem::ColumnData *__cdecl std::_Move<SlideListWin::ListItem::ColumnData___SlideListWin::ListItem::ColumnData__>(SlideListWin::ListItem::ColumnData *_First, SlideListWin::ListItem::ColumnData *_Last, SlideListWin::ListItem::ColumnData *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
SlideListWin::ListItem::ColumnData *__cdecl std::_Uninit_move<SlideListWin::ListItem::ColumnData___SlideListWin::ListItem::ColumnData___std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(SlideListWin::ListItem::ColumnData *_First, SlideListWin::ListItem::ColumnData *_Last, SlideListWin::ListItem::ColumnData *_Dest, std::allocator<SlideListWin::ListItem::ColumnData> *_Al, SlideListWin::ListItem::ColumnData *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::_vector<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this);
void __thiscall std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::_Reserve(std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *this, unsigned int _Count);
void __cdecl std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, int _Ideal, SlideListWin::ListNumSorter _Pred);
void __cdecl std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, int _Ideal, SlideListWin::ListSorter _Pred);
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::_vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this);
void __thiscall std::vector<boost::shared_ptr<SlideListWin::ListItem>_std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>::push_back(std::vector<boost::shared_ptr<SlideListWin::ListItem>,std::allocator<boost::shared_ptr<SlideListWin::ListItem> > > *this, boost::shared_ptr<SlideListWin::ListItem> *_Val);
void *__thiscall SlideListWin::_vector_deleting_destructor_(SlideListWin *this, unsigned int);
void __thiscall std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::push_back(std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *this, boost::shared_ptr<SLWCreateInfo::Item> *_Val);
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::reserve(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, unsigned int _Count);
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::_Reserve(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, unsigned int _Count);
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::push_back(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, SlideListWin::ListItem::ColumnData *_Val);
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::resize(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, unsigned int _Newsize);
void __thiscall boost::checked_deleter<SlideListWin::ListItem>::operator__(boost::checked_deleter<SlideListWin::ListItem> *this, SlideListWin::ListItem *x);
void __thiscall boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::dispose(boost::detail::sp_counted_base_impl<SlideListWin::ListItem *,boost::checked_deleter<SlideListWin::ListItem> > *this);
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>(CSingleDataMap *this);
void __thiscall boost::detail::shared_count::shared_count(boost::detail::shared_count *this, SlideListWin::ListItem *p, boost::checked_deleter<SlideListWin::ListItem> d);
void __thiscall SLWCreateInfo::Item::_Item(SLWCreateInfo::Item *this);
void __thiscall SLWCreateInfo::Item::Item(SLWCreateInfo::Item *this);
void __thiscall boost::checked_deleter<SLWCreateInfo::Item>::operator__(boost::checked_deleter<SLWCreateInfo::Item> *this, SLWCreateInfo::Item *x);
void __thiscall boost::detail::sp_counted_base_impl<SLWCreateInfo::Item___boost::checked_deleter<SLWCreateInfo::Item>>::dispose(boost::detail::sp_counted_base_impl<SLWCreateInfo::Item *,boost::checked_deleter<SLWCreateInfo::Item> > *this);
void __thiscall boost::detail::shared_count::shared_count(boost::detail::shared_count *this, SLWCreateInfo::Item *p, boost::checked_deleter<SLWCreateInfo::Item> d);
void __thiscall SpeechBubbleWin::SpeechBubbleWin(SpeechBubbleWin *this);
void __thiscall SpeechBubbleWin::_SpeechBubbleWin(SpeechBubbleWin *this);
void __thiscall SpeechBubbleWin::SetBubbleWidth(SpeechBubbleWin *this, unsigned int uiWidth);
void __thiscall SpeechBubbleWin::SetBubbleHeight(SpeechBubbleWin *this, unsigned int uiHeight);
void __thiscall SpeechBubbleWin::HideArrowWin(SpeechBubbleWin *this);
void __thiscall SpeechBubbleWin::SetNpcPos(SpeechBubbleWin *this, float x, float y);
void __thiscall SpeechBubbleWin::SetTargetXY(SpeechBubbleWin *this, float fTargetX, float fTargetY);
unsigned int __thiscall SpeechBubbleWin::GetBubbleHeight(SpeechBubbleWin *this);
void __thiscall SpeechBubbleWin::UpdateMainCharMode(SpeechBubbleWin *this, NiCamera *pkWorldCamera);
bool __thiscall SpeechBubbleWin::Create(SpeechBubbleWin *this, PgFrameWork *pkFrameWork);
void __thiscall SpeechBubbleWin::Update(SpeechBubbleWin *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void __thiscall SpeechBubbleWin::SetText(SpeechBubbleWin *this, const char *text);
SpeechBubbleWin *__cdecl SpeechBubbleWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall SpeechBubbleWin::_vector_deleting_destructor_(SpeechBubbleWin *this, unsigned int);
void __thiscall WebMsgWin::SetFrameWorkMsg(WebMsgWin *this, PgFrameWork *pkFrameWork, PgMsg::Frame *pkFrameMsg);
void __thiscall WebMsgWin::OnCommand(WebMsgWin *this, unsigned int wParam, int lParam);
void __thiscall WebMsgWin::ProcessMeInput(WebMsgWin *this, bool *bHit);
void __thiscall WebMsgWin::UpdateMeWin(WebMsgWin *this, float fCurTime);
bool __thiscall WebMsgWin::Create(WebMsgWin *this, const char *pcTitle);
const char *__thiscall WebMsgWin::GetURL(WebMsgWin *this);
void __thiscall WebMsgWin::WebMsgWin(WebMsgWin *this);
void __thiscall WebMsgWin::_WebMsgWin(WebMsgWin *this);
void __thiscall WebMsgWin::OnClose(WebMsgWin *this);
void __thiscall WebMsgWin::OnShowWin(WebMsgWin *this);
WebMsgWin *__cdecl WebMsgWin::CreateWin(const char *pcTitle);
WebMsgWin *__cdecl WebMsgWin::Modal(const char *pcURL, const char *pcTitle);
WebMsgWin *__cdecl WebMsgWin::Modaless(const char *pcURL, const char *pcTitle);
void __thiscall WebMsgWin::SetURL(WebMsgWin *this, const char *pcURL);
void *__thiscall WebMsgWin::_scalar_deleting_destructor_(WebMsgWin *this, unsigned int);
int __thiscall CWebHttpConnect::SetPortA(CWebHttpConnect *this, unsigned __int16 nPort);
int __thiscall CWebHttpConnect::SetServer(CWebHttpConnect *this, char *sServer);
int __thiscall CWebHttpConnect::SetPath(CWebHttpConnect *this, char *sPath);
int __thiscall CWebHttpConnect::SetVersion(CWebHttpConnect *this, char *sVersion);
int __thiscall CWebHttpConnect::SetFuntion(CWebHttpConnect *this, char *sFuntion);
int __thiscall CWebHttpConnect::SetParameter(CWebHttpConnect *this, char *sParameter, char *sParameterData);
int __thiscall CWebHttpConnect::SetParameter(CWebHttpConnect *this, char *sParameter);
int __thiscall CWebHttpConnect::SetSharedSecret(CWebHttpConnect *this, char *sSharedSecret);
int __thiscall CWebHttpConnect::SetTokenSecret(CWebHttpConnect *this, char *sTokenSecret);
char *__thiscall CWebHttpConnect::MakeAddress(CWebHttpConnect *this);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CWebHttpConnect::GetHTMLDocument(CWebHttpConnect *this);
char *__thiscall CWebHttpConnect::GetString(CWebHttpConnect *this, char *sItem);
void __thiscall CWebHttpConnect::CWebHttpConnect(CWebHttpConnect *this);
void __thiscall CWebHttpConnect::_CWebHttpConnect(CWebHttpConnect *this);
int __thiscall CWebHttpConnect::InitConnection(CWebHttpConnect *this, unsigned int nTimeOut);
int __thiscall CWebHttpConnect::QueryToServer(CWebHttpConnect *this);
void __thiscall CWebContainer::_CWebContainer(CWebContainer *this);
void __thiscall CWebContainer::setLocation(CWebContainer *this, int x, int y, int cx, int cy);
void __thiscall CWebContainer::setVisible(CWebContainer *this, bool bVisible);
void __thiscall CWebContainer::setFocus(CWebContainer *this, bool bFocus);
HRESULT __stdcall CWebEventSink::Invoke(CWebEventSink *this, int dispidMember, _GUID *riid, unsigned int lcid, unsigned __int16 wFlags, tagDISPPARAMS *pDispParams, tagVARIANT *pvarResult, tagEXCEPINFO *pExcepInfo, unsigned int *puArgErr);
IConnectionPoint *__thiscall CWebContainer::GetConnectionPoint(CWebContainer *this, _GUID *riid);
HRESULT __thiscall CWebContainer::getWeb(CWebContainer *this, IWebBrowser2 **ppweb);
void __thiscall CWebCtrl::CWebCtrl(CWebCtrl *this, HWND__ *hwnd);
void __thiscall CWebCtrl::Navigate(CWebCtrl *this, char *psz);
void __thiscall CWebCtrl::Navigate(CWebCtrl *this, char *szURL, char *szPostData, char *szHeaders);
bool __stdcall UninitWebCtrl();
void __thiscall CWebContainer::ConnectEvents(CWebContainer *this);
void __thiscall CWebContainer::DisconnectEvents(CWebContainer *this);
void __thiscall CWebCtrl::Navigate_EX(CWebCtrl *this, char *URL);
void __thiscall CWebContainer::CWebContainer(CWebContainer *this, HWND__ *hwnd);
void __thiscall CWebContainer::add(CWebContainer *this);
void __thiscall CWebContainer::remove(CWebContainer *this);
int __thiscall CWebCtrl::WebCtrlProc(CWebCtrl *this, unsigned int uMsg, unsigned int wParam, int lParam);
int __stdcall WebCtrlProc(HWND__ *hwnd, unsigned int uMsg, unsigned int wParam, int lParam);
bool __stdcall InitWebCtrl();
int __cdecl IsEqualGUID(_GUID *rguid1, _GUID *rguid2);
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv);
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this);
HRESULT __stdcall CWebContainer::GetContainer(CWebContainer *this, IOleContainer **__formal);
HRESULT __stdcall CWebContainer::GetWindow(CWebContainer *this, HWND__ **phwnd);
HRESULT __stdcall CWebContainer::GetWindowContext(CWebContainer *this, IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppIIPUIWin, tagRECT *prcPosRect, tagRECT *prcClipRect, tagOIFI *pFrameInfo);
unsigned int *__thiscall NiGeometryGroupManager::CreateGroup(CProperty<CGlowScreenEffect,unsigned int> *this, CBaseObject *pObject);
HRESULT __stdcall CWebContainer::Scroll(CWebContainer *this, tagMSG *__formal, unsigned int __formal);
HRESULT __stdcall CWebContainer::SetBorderSpace(CWebEventSink *this, unsigned int *__formal);
HRESULT __stdcall CWebContainer::SaveObject(CWebContainer *this);
HRESULT __stdcall CWebContainer::Invoke(CWebContainer *this, int __formal, _GUID *__formal, unsigned int __formal, unsigned __int16 __formal, tagDISPPARAMS *__formal, tagVARIANT *__formal, tagEXCEPINFO *__formal, unsigned int *__formal);
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this);
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this);
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this);
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv);
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this);
HRESULT __stdcall CWebContainer::ContextSensitiveHelp(CWebEventSink *this, unsigned int *__formal);
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv);
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv);
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv);
HRESULT __stdcall CWebContainer::GetWindow(CWebContainer *this, HWND__ **phwnd);
HRESULT __stdcall CWebEventSink::QueryInterface(CWebEventSink *this, _GUID *riid, void **ppv);
unsigned int __stdcall CWebEventSink::AddRef(CWebEventSink *this);
unsigned int __stdcall CWebEventSink::Release(CWebEventSink *this);
HRESULT __stdcall CWebEventSink::GetIDsOfNames(CWebEventSink *this, _GUID *__formal, wchar_t **__formal, unsigned int __formal, unsigned int __formal, int *pdispid);
HRESULT __stdcall CWebEventSink::GetTypeInfo(CWebEventSink *this, unsigned int __formal, unsigned int __formal, ITypeInfo **__formal);
unsigned int __stdcall CWebContainer::Release(CWebContainer *this);
unsigned int __stdcall CWebContainer::Release(CWebContainer *this);
unsigned int __stdcall CWebContainer::Release(CWebContainer *this);
unsigned int __stdcall CWebContainer::Release(CWebContainer *this);
unsigned int __stdcall CWebContainer::Release(CWebContainer *this);
// HRESULT __usercall D3DUtil_LoadDeviceCursor<eax>(IDirect3DDevice9 *pd3dDevice, HICON__ *hCursor<ecx>, IDirect3DSurface9 **rpkSurf<edx>, bool bAddWatermark);
Cursor::Type __cdecl Cursor::GetCursor();
bool __cdecl Cursor::GetEnableHardware();
HCURSOR __cdecl Cursor::ReleaseSystemCursor();
int __cdecl Cursor::ReleaseHWCurRes();
PgCursor *__cdecl Cursor::GetPgCursor();
void __cdecl Cursor::UpdateGraphicCursorPos(int iXPos, int iYPos);
void __cdecl Cursor::SetGraphicCursorInfo(Cursor::Type eType, int iTexOffLeft, int iTexOffTop);
void __cdecl Cursor::TerminateGraphicCursor();
bool __cdecl Cursor::SetGraphicCursor(Cursor::Type eType);
void __cdecl Cursor::ShowGraphicCursor(bool bShow);
int __cdecl Cursor::DrawGraphicCursor();
void __cdecl Cursor::InvalidateDropIcon();
void __cdecl Cursor::SetCursorPos(int iXPos, int iYPos);
int __cdecl Cursor::Draw();
bool __cdecl Cursor::CreateSystemCursor();
bool __cdecl Cursor::CreateHWCurRes();
bool __cdecl Cursor::ResetHardwareCursor(Cursor::Type eType);
void __cdecl Cursor::ShowHardwareCursor(bool bShow);
void __cdecl Cursor::SetHardwareCursorPos(int iXPos, int iYPos);
void __cdecl PutCursorOnTexture(IDirect3DSurface9 *pkSurf, int iXOff, int iYOff, NiSourceTexture *pkTex);
bool __cdecl Cursor::InitGraphicCursor();
bool __cdecl Cursor::IsHWCursorSupport();
void __cdecl Cursor::ShowCursor(bool bShow);
int __cdecl Cursor::OnResetDevice();
bool __cdecl Cursor::InitHardwareCursor();
int __cdecl Cursor::TerminateHardwareCursor();
bool __cdecl Cursor::SetHardwareCursor(Cursor::Type eType);
void __cdecl Cursor::Show(bool bShow);
void __cdecl Cursor::Terminate();
bool __cdecl Cursor::SetCursor(Cursor::Type eType);
void __cdecl Cursor::EnableHardware(bool bEnable);
int __cdecl Cursor::SwitchCursor();
void __cdecl Cursor::Update(float fTime);
bool __cdecl Cursor::Init();
void __thiscall NiZBufferProperty::NiZBufferProperty(NiZBufferProperty *this);
NiRTTI *__thiscall NiZBufferProperty::GetRTTI(NiZBufferProperty *this);
void __thiscall CursorState::SetState(CursorState *this, CursorState::CURSORSTATE eState);
void __thiscall CursorState::CancelPutOnBelongClear(CursorState *this);
void __thiscall CursorState::CursorState(CursorState *this);
void __thiscall CursorState::_CursorState(CursorState *this);
void __thiscall CursorState::CancelState(CursorState *this, CursorState::CURSORSTATE e);
void *__thiscall Singleton<CursorState>::_scalar_deleting_destructor_(CursorState *this, unsigned int);
void __thiscall GlobalTokens::GlobalTokens(GlobalTokens *this);
void __cdecl _loclog(char *acMsg);
bool __cdecl _loclog_init(char *acDirName, char *acLogFileName, char *acDescriptor);
int __cdecl _purecall();
MainApp *__cdecl MainApp::GetMainAppInstance();
int __stdcall EnumMyWndProc(HWND__ *hWnd, int lParam);
int __cdecl MinimizeProcess(const char *sExeName);
void __thiscall MainApp::Terminate(MainApp *this);
bool __thiscall MainApp::MeasureTime(MainApp *this);
void __thiscall MainApp::EnableInput(MainApp *this, bool bEnable);
void __thiscall MainApp::ProcessInput(MainApp *this);
void __cdecl LoadSoundOption(); // idb
void __cdecl LogZBufferState(PgWin *pkWin);
void __thiscall MainApp::DisplaySplash(MainApp *this, const char *pcName, const char *pcProgressBarName, int LoadingRate);
void __thiscall MainApp::ChangeDisplayMode(MainApp *this);
void __thiscall MainApp::OnIdle(MainApp *this);
bool __thiscall MainApp::CheckSpawnApps(MainApp *this);
void __cdecl SetupExceptionHandler();
void __thiscall MainApp::MainApp(MainApp *this);
bool __thiscall MainApp::Initialize(MainApp *this);
NiApplication *__cdecl NiApplication::Create();
LuaScriptMgr *__cdecl Singleton<LuaScriptMgr>::getInstance();
char *__cdecl Folder::Sound();
void __thiscall NiTexturingProperty::SetBaseClampMode(NiTexturingProperty *this, NiTexturingProperty::ClampMode eMode);
void __thiscall Server::SetLoginAddr(Server *this, char *pcAddr);
bool __thiscall NiRenderer::BeginUsingDefaultRenderTargetGroup(NiRenderer *this, unsigned int uiClearMode);
void *__thiscall TextData::_vector_deleting_destructor_(TextData *this, unsigned int);
void *__thiscall TextData2::_scalar_deleting_destructor_(TextData2 *this, unsigned int);
void *__thiscall TextData3::_scalar_deleting_destructor_(TextData3 *this, unsigned int);
void __thiscall TextData::TextData(TextData *this);
void __thiscall TextData2::TextData2(TextData2 *this);
void __thiscall TextData3::TextData3(TextData3 *this);
bool __cdecl ITableBase<TextDataType_TextData>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<TextDataType2_TextData2>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<TextDataType3_TextData3>::Load(char *acFn, bool bErrorWhenOpenFailed);
void *__thiscall MainApp::_scalar_deleting_destructor_(MainApp *this, unsigned int);
bool __cdecl MainApp::CheckWindowLocale();
// void __usercall SetImeNativeModeFalse(HWND__ *hWnd<edi>);
bool __thiscall MainApp::OnIme(MainApp *this, NiEventRecord *pEventRecord);
bool __cdecl WeaponTitleTab::Load(char *pcFn);
bool __thiscall MainApp::OnWindowDestroy(MainApp *this, HWND__ *pWnd, bool bOption);
void __cdecl MainApp::InitError(char *pcErrMsg);
void __thiscall MainApp::TerminateInput(MainApp *this);
bool __thiscall MainApp::IsSkipDraw(MainApp *this, float fCurTime);
void __thiscall MainApp::TerminateGameData(MainApp *this);
void __thiscall MainApp::OnWindowActivate(MainApp *this, HDC__ *pDrawContext, bool bActivate);
bool __thiscall MainApp::InitAppHandle(MainApp *this);
void __thiscall MainApp::ProcessCommandLineBeforInit(MainApp *this);
bool __thiscall MainApp::CheckDisplayCard(MainApp *this, unsigned int uiWidth, unsigned int uiHeight, unsigned int uiMultisample, bool bFullScreen);
void __thiscall MainApp::SetWinMinimized(MainApp *this);
bool __thiscall MainApp::InitInput(MainApp *this);
void __thiscall MainApp::SetupWindow(MainApp *this);
void __thiscall MainApp::SetWinMaxmized(MainApp *this);
void __thiscall MainApp::SetWinNormal(MainApp *this);
void __thiscall MainApp::ReCreateRenderer(MainApp *this);
bool __thiscall MainApp::OnDefault(MainApp *this, NiEventRecord *pEventRecord);
void __thiscall MainApp::ProcessCommandLine(MainApp *this);
void __thiscall MainApp::_MainApp(MainApp *this);
bool __thiscall MainApp::InitGameData(MainApp *this);
void __thiscall Name3::Name3(Name3 *this, const char *str);
bool __thiscall IIDTableBase<PassiveSkillInfo_PasSkillInfoTab_unsigned_short>::DataProcess(IIDTableBase<SubAbStateInfo,SubAbStateInfoTab,unsigned short> *this);
void *__thiscall ITableBase<RaceName_CharRace>::_scalar_deleting_destructor_(CharRace *this, unsigned int);
void *__thiscall ITableBase<MapInfo_MapInfoTab>::_scalar_deleting_destructor_(ITableBase<MapInfo,MapInfoTab> *this, unsigned int);
void *__thiscall MapInfoTab::_vector_deleting_destructor_(MapInfoTab *this, unsigned int);
void *__thiscall ITableBase<MapViewInfo_MapViewInfoTab>::_vector_deleting_destructor_(ITableBase<MapViewInfo,MapViewInfoTab> *this, unsigned int);
void *__thiscall ITableBase<UpGradeInfo_UpGradeInfoTab>::_scalar_deleting_destructor_(ITableBase<UpGradeInfo,UpGradeInfoTab> *this, unsigned int);
void *__thiscall ITableBase<ActionViewInfo_ActionViewTable>::_scalar_deleting_destructor_(ITableBase<ActionViewInfo,ActionViewTable> *this, unsigned int);
void *__thiscall ActionViewTable::_scalar_deleting_destructor_(ActionViewTable *this, unsigned int);
void *__thiscall ITableBase<ProduceInfo_ProduceInfoTable>::_scalar_deleting_destructor_(ProduceInfoTable *this, unsigned int);
void *__thiscall GatherInfoTable::_vector_deleting_destructor_(GatherInfoTable *this, unsigned int);
void *__thiscall ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::_scalar_deleting_destructor_(KQDescTable *this, unsigned int);
void *__thiscall ProduceViewInfoTable::_vector_deleting_destructor_(ProduceViewInfoTable *this, unsigned int);
void *__thiscall GradeItemOptionTab::_scalar_deleting_destructor_(GradeItemOptionTab *this, unsigned int);
void *__thiscall ITableBase<MiniHouse_MiniHouseTable>::_scalar_deleting_destructor_(MiniHouseTable *this, unsigned int);
void *__thiscall ItemShopViewTable::_vector_deleting_destructor_(ItemShopViewTable *this, unsigned int);
void *__thiscall ITableBase<RIDING_RidePetTable>::_vector_deleting_destructor_(ITableBase<RIDING,RidePetTable> *this, unsigned int);
void *__thiscall ITableBase<ItemDismantle_ItemDismantleTab>::_vector_deleting_destructor_(ItemDismantleTab *this, unsigned int);
void *__thiscall ITableBase<SetEffect_SetEffectTab>::_vector_deleting_destructor_(SetEffectTab *this, unsigned int);
void *__thiscall ItemActionEffectTab::_scalar_deleting_destructor_(ItemActionEffectTab *this, unsigned int);
void *__thiscall ItemActionConditionTab::_scalar_deleting_destructor_(ItemActionConditionTab *this, unsigned int);
void *__thiscall GuildTournamentStateTab::_vector_deleting_destructor_(GuildTournamentStateTab *this, unsigned int);
void *__thiscall GBDiceDividIndTab::_scalar_deleting_destructor_(GBDiceDividIndTab *this, unsigned int);
void *__thiscall GBHouseTab::_scalar_deleting_destructor_(GBHouseTab *this, unsigned int);
void *__thiscall ITableBase<MobCoordinate_MobCoordinateTab>::_vector_deleting_destructor_(ITableBase<MobCoordinate,MobCoordinateTab> *this, unsigned int);
void *__thiscall MobCoordinateTab::_vector_deleting_destructor_(MobCoordinateTab *this, unsigned int);
void *__thiscall ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::_scalar_deleting_destructor_(ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab> *this, unsigned int);
void *__thiscall IIDTableBase<MobKillAnnounceText_MobKillAnnounceTextTab_unsigned_short>::_scalar_deleting_destructor_(MobKillAnnounceTextTab *this, unsigned int);
void *__thiscall ITableBase<GTIView_GTIViewInfoTab>::_vector_deleting_destructor_(GTIViewInfoTab *this, unsigned int);
void *__thiscall DamageEffectTab::_vector_deleting_destructor_(DamageEffectTab *this, unsigned int);
void *__thiscall ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::_scalar_deleting_destructor_(ActiveSkillGroupTab *this, unsigned int);
void *__thiscall MapWayPointTab::_vector_deleting_destructor_(MapWayPointTab *this, unsigned int);
void *__thiscall ITableBase<MapLinkPoint_MapLinkPointTab>::_vector_deleting_destructor_(MapLinkPointTab *this, unsigned int);
void *__thiscall ITableBase<ChargedIconItem_ChargedIconItemTab>::_scalar_deleting_destructor_(ITableBase<ChargedIconItem,ChargedIconItemTab> *this, unsigned int);
void *__thiscall ITableBase<ChargedMessageItem_ChargedMsgItemTab>::_vector_deleting_destructor_(ITableBase<ChargedMessageItem,ChargedMsgItemTab> *this, unsigned int);
void *__thiscall IIDTableBase<ChargedMessageItem_ChargedMsgItemTab_unsigned_short>::_scalar_deleting_destructor_(ChargedMsgItemTab *this, unsigned int);
void *__thiscall BasicInfoFindUITab::_vector_deleting_destructor_(BasicInfoFindUITab *this, unsigned int);
void *__thiscall BasicInfoFindWordTab::_scalar_deleting_destructor_(BasicInfoFindWordTab *this, unsigned int);
void *__thiscall CollectCardTab::_scalar_deleting_destructor_(CollectCardTab *this, unsigned int);
void *__thiscall CollectCardGroupDescTab::_scalar_deleting_destructor_(CollectCardGroupDescTab *this, unsigned int);
void *__thiscall CollectCardTitleTab::_vector_deleting_destructor_(CollectCardTitleTab *this, unsigned int);
void *__thiscall ITableBase<AttendReward_AttendRewardTab>::_vector_deleting_destructor_(ITableBase<AttendReward,AttendRewardTab> *this, unsigned int);
void *__thiscall MoverMainTab::_scalar_deleting_destructor_(MoverMainTab *this, unsigned int);
void *__thiscall ITableBase<MoverHG_MoverHGTab>::_vector_deleting_destructor_(MoverHGTab *this, unsigned int);
void *__thiscall ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::_vector_deleting_destructor_(MoverSlotCharAniTab *this, unsigned int);
void *__thiscall ITableBase<MoverItem_MoverItemTab>::_vector_deleting_destructor_(MoverItemTab *this, unsigned int);
void *__thiscall ITableBase<PupMain_PetMainTab>::_vector_deleting_destructor_(PetMainTab *this, unsigned int);
void *__thiscall ITableBase<KQIsVote_KQIsVoteTable>::_scalar_deleting_destructor_(KQIsVoteTable *this, unsigned int);
void *__thiscall MobConditionViewTab::_vector_deleting_destructor_(MobConditionViewTab *this, unsigned int);
void *__thiscall MoverUpgradeEffectTab::_scalar_deleting_destructor_(MoverUpgradeEffectTab *this, unsigned int);
void *__thiscall ChatColorTab::_scalar_deleting_destructor_(ChatColorTab *this, unsigned int);
void *__thiscall MinimonInfoTable::_scalar_deleting_destructor_(MinimonInfoTable *this, unsigned int);
void *__thiscall ITableBase<UseClassTypeInfo_UseCalssTypeTable>::_scalar_deleting_destructor_(UseCalssTypeTable *this, unsigned int);
void *__thiscall ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::_vector_deleting_destructor_(ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab> *this, unsigned int);
void *__thiscall BRAccUpgradeInfoTab::_scalar_deleting_destructor_(BRAccUpgradeInfoTab *this, unsigned int);
void *__thiscall ITableBase<ItemInfo_ItemInfoTab>::_vector_deleting_destructor_(ITableBase<ItemInfo,ItemInfoTab> *this, unsigned int);
void *__thiscall IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::_scalar_deleting_destructor_(ItemInfoTab *this, unsigned int);
void *__thiscall ITableBase<ItemViewInfo_ItemViewInfoTab>::_scalar_deleting_destructor_(ITableBase<ItemViewInfo,ItemViewInfoTab> *this, unsigned int);
void *__thiscall ITableBase<HairColorInfo_HairColorInfoTab>::_vector_deleting_destructor_(HairColorInfoTab *this, unsigned int);
void *__thiscall ITableBase<MobInfo_MobInfoTab>::_vector_deleting_destructor_(ITableBase<MobInfo,MobInfoTab> *this, unsigned int);
void *__thiscall IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::_vector_deleting_destructor_(MobInfoTab *this, unsigned int);
void *__thiscall ITableBase<MobViewInfo_MobViewInfoTab>::_scalar_deleting_destructor_(ITableBase<MobViewInfo,MobViewInfoTab> *this, unsigned int);
void *__thiscall MobViewInfoTab::_vector_deleting_destructor_(MobViewInfoTab *this, unsigned int);
void *__thiscall ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::_scalar_deleting_destructor_(ITableBase<CharNPC_ViewInfo,NPCViewInfoTab> *this, unsigned int);
void *__thiscall IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::_scalar_deleting_destructor_(NPCViewInfoTab *this, unsigned int);
void *__thiscall ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::_scalar_deleting_destructor_(MHFurnitureObjEffectTab *this, unsigned int);
void *__thiscall ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::_vector_deleting_destructor_(MiniHouseObjAniInfoTab *this, unsigned int);
void *__thiscall MiniHouseFuritureInfoTab::_vector_deleting_destructor_(MiniHouseFuritureInfoTab *this, unsigned int);
void *__thiscall UpEffectTab::_vector_deleting_destructor_(UpEffectTab *this, unsigned int);
void *__thiscall ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::_vector_deleting_destructor_(ITableBase<AbnormalStateInfo,AbnormalStateInfoTab> *this, unsigned int);
void *__thiscall ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::_vector_deleting_destructor_(ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab> *this, unsigned int);
void *__thiscall AbnormalStateViewInfoTab::_scalar_deleting_destructor_(AbnormalStateViewInfoTab *this, unsigned int);
void *__thiscall ITableBase<SubAbStateInfo_SubAbStateInfoTab>::_vector_deleting_destructor_(ITableBase<SubAbStateInfo,SubAbStateInfoTab> *this, unsigned int);
void *__thiscall ChargedEffectTable::_scalar_deleting_destructor_(ChargedEffectTable *this, unsigned int);
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Splice_same(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Where, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Right, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _First, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Last, unsigned int _Count);
char __cdecl CharClass::GetClassIDByEngName(char *pcEngName);
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_Splice_same(...);
void __thiscall ColorInfoTable::ColorInfoTable(ColorInfoTable *this);
bool __thiscall ColorInfoTable::DataProcess(ColorInfoTable *this);
void *__thiscall ITableBase<ColorInfoType_ColorInfoTable>::_scalar_deleting_destructor_(ColorInfoTable *this, unsigned int);
void __thiscall ItemViewEquipTypeInfoTab::ItemViewEquipTypeInfoTab(ItemViewEquipTypeInfoTab *this);
void *__thiscall ItemViewEquipTypeInfoTab::_scalar_deleting_destructor_(ItemViewEquipTypeInfoTab *this, unsigned int);
void __thiscall ItemMoneyTab::ItemMoneyTab(ItemMoneyTab *this);
void *__thiscall ITableBase<ItemMoney_ItemMoneyTab>::_vector_deleting_destructor_(ItemMoneyTab *this, unsigned int);
void __thiscall CharClass::CharClass(CharClass *this);
void *__thiscall ITableBase<ClassName_CharClass>::_vector_deleting_destructor_(CharClass *this, unsigned int);
void __thiscall ActionEffectInfoTab::ActionEffectInfoTab(ActionEffectInfoTab *this);
void *__thiscall ActionEffectInfoTab::_scalar_deleting_destructor_(ActionEffectInfoTab *this, unsigned int);
void __thiscall HairInfoTab::HairInfoTab(HairInfoTab *this);
void *__thiscall HairInfoTab::_vector_deleting_destructor_(HairInfoTab *this, unsigned int);
void __thiscall HairColorInfoTab::HairColorInfoTab(HairColorInfoTab *this);
void __thiscall ShakeEffectViewInfoTab::ShakeEffectViewInfoTab(ShakeEffectViewInfoTab *this);
void *__thiscall ShakeEffectViewInfoTab::_scalar_deleting_destructor_(ShakeEffectViewInfoTab *this, unsigned int);
void __thiscall MHFurnitureObjEffectTab::MHFurnitureObjEffectTab(MHFurnitureObjEffectTab *this);
void __thiscall MiniHouseObjAniInfoTab::MiniHouseObjAniInfoTab(MiniHouseObjAniInfoTab *this);
void __thiscall MiniHouseEndureInfoTable::MiniHouseEndureInfoTable(MiniHouseEndureInfoTable *this);
void *__thiscall MiniHouseEndureInfoTable::_vector_deleting_destructor_(MiniHouseEndureInfoTable *this, unsigned int);
void __thiscall MiniHouseFuritureInfoTab::MiniHouseFuritureInfoTab(MiniHouseFuritureInfoTab *this);
void __thiscall MiniHouseEmotionTab::MiniHouseEmotionTab(MiniHouseEmotionTab *this);
void *__thiscall MiniHouseEmotionTab::_vector_deleting_destructor_(MiniHouseEmotionTab *this, unsigned int);
void __thiscall UpEffectTab::UpEffectTab(UpEffectTab *this);
void __thiscall ScriptMsgTab::ScriptMsgTab(ScriptMsgTab *this);
void *__thiscall ScriptMsgTab::_vector_deleting_destructor_(ScriptMsgTab *this, unsigned int);
void __thiscall ChargedEffectTable::ChargedEffectTable(ChargedEffectTable *this);
void __thiscall CharRace::CharRace(CharRace *this);
void __thiscall FaceInfoTab::FaceInfoTab(FaceInfoTab *this);
void *__thiscall FaceInfoTab::_scalar_deleting_destructor_(FaceInfoTab *this, unsigned int);
void __thiscall DmgSndTab::DmgSndTab(DmgSndTab *this);
void *__thiscall ITableBase<DmgSndMapByArmorType_DmgSndTab>::_scalar_deleting_destructor_(DmgSndTab *this, unsigned int);
void __thiscall ProduceInfoTable::ProduceInfoTable(ProduceInfoTable *this);
void __thiscall GatherInfoTable::GatherInfoTable(GatherInfoTable *this);
void __thiscall KQDescTable::KQDescTable(KQDescTable *this);
void __thiscall ProduceViewInfoTable::ProduceViewInfoTable(ProduceViewInfoTable *this);
void __thiscall NpcDialogDataTable::NpcDialogDataTable(NpcDialogDataTable *this);
void *__thiscall NpcDialogDataTable::_scalar_deleting_destructor_(NpcDialogDataTable *this, unsigned int);
void __thiscall GradeItemOptionTab::GradeItemOptionTab(GradeItemOptionTab *this);
void __thiscall MiniHouseTable::MiniHouseTable(MiniHouseTable *this);
void __thiscall ItemShopViewTable::ItemShopViewTable(ItemShopViewTable *this);
void __thiscall WeaponAttribTab::WeaponAttribTab(WeaponAttribTab *this);
void *__thiscall WeaponAttribTab::_vector_deleting_destructor_(WeaponAttribTab *this, unsigned int);
void __thiscall WorldMapAvatarInfoTab::WorldMapAvatarInfoTab(WorldMapAvatarInfoTab *this);
void *__thiscall WorldMapAvatarInfoTab::_vector_deleting_destructor_(WorldMapAvatarInfoTab *this, unsigned int);
void __thiscall ItemDismantleTab::ItemDismantleTab(ItemDismantleTab *this);
void __thiscall TownPortalInfoTable::TownPortalInfoTable(TownPortalInfoTable *this);
void *__thiscall TownPortalInfoTable::_scalar_deleting_destructor_(TownPortalInfoTable *this, unsigned int);
void __thiscall SetItemNameTab::SetItemNameTab(SetItemNameTab *this);
void *__thiscall ITableBase<SetItemName_SetItemNameTab>::_scalar_deleting_destructor_(SetItemNameTab *this, unsigned int);
void __thiscall ItemActionEffectDescTab::ItemActionEffectDescTab(ItemActionEffectDescTab *this);
void *__thiscall ItemActionEffectDescTab::_scalar_deleting_destructor_(ItemActionEffectDescTab *this, unsigned int);
void __thiscall SetEffectTab::SetEffectTab(SetEffectTab *this);
void __thiscall ActionEffectItemTab::ActionEffectItemTab(ActionEffectItemTab *this);
void *__thiscall ActionEffectItemTab::_scalar_deleting_destructor_(ActionEffectItemTab *this, unsigned int);
void __thiscall ItemActionTab::ItemActionTab(ItemActionTab *this);
void *__thiscall ITableBase<ItemAction_ItemActionTab>::_vector_deleting_destructor_(ItemActionTab *this, unsigned int);
void __thiscall ItemActionEffectTab::ItemActionEffectTab(ItemActionEffectTab *this);
void __thiscall ItemActionConditionTab::ItemActionConditionTab(ItemActionConditionTab *this);
void __thiscall GuildTournamentStateDescTab::GuildTournamentStateDescTab(GuildTournamentStateDescTab *this);
void *__thiscall GuildTournamentStateDescTab::_vector_deleting_destructor_(GuildTournamentStateDescTab *this, unsigned int);
void __thiscall GuildTournamentStateTab::GuildTournamentStateTab(GuildTournamentStateTab *this);
void __thiscall GTRequireTab::GTRequireTab(GTRequireTab *this);
void *__thiscall ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::_scalar_deleting_destructor_(GTRequireTab *this, unsigned int);
void __thiscall DiceDividIndTab::DiceDividIndTab(DiceDividIndTab *this);
void *__thiscall DiceDividIndTab::_vector_deleting_destructor_(DiceDividIndTab *this, unsigned int);
void __thiscall GBDiceDividIndTab::GBDiceDividIndTab(GBDiceDividIndTab *this);
void __thiscall GBHouseTab::GBHouseTab(GBHouseTab *this);
void __thiscall MobRandomIdleAniTab::MobRandomIdleAniTab(MobRandomIdleAniTab *this);
void *__thiscall MobRandomIdleAniTab::_scalar_deleting_destructor_(MobRandomIdleAniTab *this, unsigned int);
void __thiscall CharacterTitleStateViewTab::CharacterTitleStateViewTab(CharacterTitleStateViewTab *this);
void *__thiscall CharacterTitleStateViewTab::_vector_deleting_destructor_(CharacterTitleStateViewTab *this, unsigned int);
void __thiscall GTIViewInfoTab::GTIViewInfoTab(GTIViewInfoTab *this);
void __thiscall DamageEffectTab::DamageEffectTab(DamageEffectTab *this);
void __thiscall ActiveSkillGroupTab::ActiveSkillGroupTab(ActiveSkillGroupTab *this);
void __thiscall MapWayPointTab::MapWayPointTab(MapWayPointTab *this);
void __thiscall MapLinkPointTab::MapLinkPointTab(MapLinkPointTab *this);
void __thiscall BelongTypeInfoTab::BelongTypeInfoTab(BelongTypeInfoTab *this);
void *__thiscall ITableBase<BelongTypeInfo_BelongTypeInfoTab>::_vector_deleting_destructor_(BelongTypeInfoTab *this, unsigned int);
void __thiscall ChargedDeletableBuffTab::ChargedDeletableBuffTab(ChargedDeletableBuffTab *this);
void *__thiscall ChargedDeletableBuffTab::_vector_deleting_destructor_(ChargedDeletableBuffTab *this, unsigned int);
void __thiscall BasicInfoTitleTab::BasicInfoTitleTab(BasicInfoTitleTab *this);
void *__thiscall BasicInfoTitleTab::_vector_deleting_destructor_(BasicInfoTitleTab *this, unsigned int);
void __thiscall BasicInfoLinkTab::BasicInfoLinkTab(BasicInfoLinkTab *this);
void *__thiscall BasicInfoLinkTab::_vector_deleting_destructor_(BasicInfoLinkTab *this, unsigned int);
void __thiscall BasicInfoTipTab::BasicInfoTipTab(BasicInfoTipTab *this);
void *__thiscall ITableBase<BasicInfoTip_BasicInfoTipTab>::_scalar_deleting_destructor_(BasicInfoTipTab *this, unsigned int);
void __thiscall BasicInfoTipCycleTab::BasicInfoTipCycleTab(BasicInfoTipCycleTab *this);
void *__thiscall ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::_vector_deleting_destructor_(BasicInfoTipCycleTab *this, unsigned int);
void __thiscall BasicInfoFindTab::BasicInfoFindTab(BasicInfoFindTab *this);
void *__thiscall ITableBase<BasicInfoFind_BasicInfoFindTab>::_vector_deleting_destructor_(BasicInfoFindTab *this, unsigned int);
void __thiscall BasicInfoFindUITab::BasicInfoFindUITab(BasicInfoFindUITab *this);
void __thiscall BasicInfoFindWordTab::BasicInfoFindWordTab(BasicInfoFindWordTab *this);
void __thiscall CollectCardTab::CollectCardTab(CollectCardTab *this);
void __thiscall CollectCardViewTab::CollectCardViewTab(CollectCardViewTab *this);
void *__thiscall CollectCardViewTab::_scalar_deleting_destructor_(CollectCardViewTab *this, unsigned int);
void __thiscall CollectCardGroupDescTab::CollectCardGroupDescTab(CollectCardGroupDescTab *this);
void __thiscall CollectCardRewardTab::CollectCardRewardTab(CollectCardRewardTab *this);
void *__thiscall ITableBase<CollectCardReward_CollectCardRewardTab>::_vector_deleting_destructor_(CollectCardRewardTab *this, unsigned int);
void __thiscall CollectCardTitleTab::CollectCardTitleTab(CollectCardTitleTab *this);
void __thiscall MoverMainTab::MoverMainTab(MoverMainTab *this);
void __thiscall MoverUseSkillTab::MoverUseSkillTab(MoverUseSkillTab *this);
void *__thiscall ITableBase<MoverUseSkill_MoverUseSkillTab>::_vector_deleting_destructor_(MoverUseSkillTab *this, unsigned int);
void __thiscall MoverHGTab::MoverHGTab(MoverHGTab *this);
void __thiscall MoverViewTab::MoverViewTab(MoverViewTab *this);
void *__thiscall MoverViewTab::_vector_deleting_destructor_(MoverViewTab *this, unsigned int);
void __thiscall MoverSlotViewTab::MoverSlotViewTab(MoverSlotViewTab *this);
void *__thiscall MoverSlotViewTab::_vector_deleting_destructor_(MoverSlotViewTab *this, unsigned int);
void __thiscall MoverSlotCharAniTab::MoverSlotCharAniTab(MoverSlotCharAniTab *this);
void __thiscall MoverAbilityTab::MoverAbilityTab(MoverAbilityTab *this);
void *__thiscall ITableBase<MoverAbility_MoverAbilityTab>::_scalar_deleting_destructor_(MoverAbilityTab *this, unsigned int);
void __thiscall MoverItemTab::MoverItemTab(MoverItemTab *this);
void __thiscall PetMainTab::PetMainTab(PetMainTab *this);
void __thiscall PetViewTab::PetViewTab(PetViewTab *this);
void *__thiscall PetViewTab::_scalar_deleting_destructor_(PetViewTab *this, unsigned int);
void __thiscall KQVoteDescTable::KQVoteDescTable(KQVoteDescTable *this);
void *__thiscall KQVoteDescTable::_scalar_deleting_destructor_(KQVoteDescTable *this, unsigned int);
void __thiscall KQVoteMajorityRateTable::KQVoteMajorityRateTable(KQVoteMajorityRateTable *this);
void *__thiscall ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::_vector_deleting_destructor_(KQVoteMajorityRateTable *this, unsigned int);
void __thiscall KQIsVoteTable::KQIsVoteTable(KQIsVoteTable *this);
void __thiscall KQTeamTable::KQTeamTable(KQTeamTable *this);
void *__thiscall KQTeamTable::_scalar_deleting_destructor_(KQTeamTable *this, unsigned int);
void __thiscall MobConditionViewTab::MobConditionViewTab(MobConditionViewTab *this);
void __thiscall MobNoFadeInTab::MobNoFadeInTab(MobNoFadeInTab *this);
void *__thiscall ITableBase<MobNoFadeIn_MobNoFadeInTab>::_vector_deleting_destructor_(MobNoFadeInTab *this, unsigned int);
void __thiscall MarketSearchInfoTab::MarketSearchInfoTab(MarketSearchInfoTab *this);
void *__thiscall MarketSearchInfoTab::_scalar_deleting_destructor_(MarketSearchInfoTab *this, unsigned int);
void __thiscall ChrCreateEquipTab::ChrCreateEquipTab(ChrCreateEquipTab *this);
void *__thiscall ChrCreateEquipTab::_scalar_deleting_destructor_(ChrCreateEquipTab *this, unsigned int);
void __thiscall MoverUpgradeEffectTab::MoverUpgradeEffectTab(MoverUpgradeEffectTab *this);
void __thiscall ChatColorTab::ChatColorTab(ChatColorTab *this);
void __thiscall TermExtendMatchTable::TermExtendMatchTable(TermExtendMatchTable *this);
void *__thiscall ITableBase<TermExtendMatch_TermExtendMatchTable>::_scalar_deleting_destructor_(TermExtendMatchTable *this, unsigned int);
void __thiscall TermExtendMatchGroupDescTable::TermExtendMatchGroupDescTable(TermExtendMatchGroupDescTable *this);
void *__thiscall ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::_scalar_deleting_destructor_(TermExtendMatchGroupDescTable *this, unsigned int);
void __thiscall AbStateMsgTable::AbStateMsgTable(AbStateMsgTable *this);
void *__thiscall ITableBase<AbStateMsg_AbStateMsgTable>::_vector_deleting_destructor_(AbStateMsgTable *this, unsigned int);
void __thiscall MinimonInfoTable::MinimonInfoTable(MinimonInfoTable *this);
void __thiscall MinimonAutoUseItemTable::MinimonAutoUseItemTable(MinimonAutoUseItemTable *this);
void *__thiscall MinimonAutoUseItemTable::_scalar_deleting_destructor_(MinimonAutoUseItemTable *this, unsigned int);
void __thiscall ItemViewDummyTab::ItemViewDummyTab(ItemViewDummyTab *this);
void *__thiscall ITableBase<ItemViewDummy_ItemViewDummyTab>::_vector_deleting_destructor_(ItemViewDummyTab *this, unsigned int);
void __thiscall UseCalssTypeTable::UseCalssTypeTable(UseCalssTypeTable *this);
void __thiscall ChrBasicEquipTab::ChrBasicEquipTab(ChrBasicEquipTab *this);
void *__thiscall ChrBasicEquipTab::_vector_deleting_destructor_(ChrBasicEquipTab *this, unsigned int);
void __thiscall FaceCutMsgTab::FaceCutMsgTab(FaceCutMsgTab *this);
void *__thiscall FaceCutMsgTab::_vector_deleting_destructor_(FaceCutMsgTab *this, unsigned int);
bool __cdecl ITableBase<ColorInfoType_ColorInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemMoney_ItemMoneyTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ClassName_CharClass>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ActionEffectInfo_ActionEffectInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<HairInfo_HairInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<HairColorInfo_HairColorInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MHEmotion_MiniHouseEmotionTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<UpEffectData_UpEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ScriptMsg_ScriptMsgTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ChargedItemEffect_ChargedEffectTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<RaceName_CharRace>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<FaceInfo_FaceInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<DmgSndMapByArmorType_DmgSndTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ProduceInfo_ProduceInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GatherInfo_GatherInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ProduceViewInfo_ProduceViewInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<NpcDialogData_NpcDialogDataTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GradeItemOption_GradeItemOptionTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MiniHouse_MiniHouseTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemShopView_ItemShopViewTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<WeaponAttrib_WeaponAttribTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemDismantle_ItemDismantleTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<TownPortal_TownPortalInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<SetItemName_SetItemNameTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<SetEffect_SetEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ActionEffectItem_ActionEffectItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemAction_ItemActionTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemActionEffect_ItemActionEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemActionCondition_ItemActionConditionTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<DICE_Dividind_DiceDividIndTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GBHouse_GBHouseTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<GTIView_GTIViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<DamageEffect_DamageEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MapWayPoint_MapWayPointTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MapLinkPoint_MapLinkPointTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BelongTypeInfo_BelongTypeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BasicInfoTitle_BasicInfoTitleTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BasicInfoLink_BasicInfoLinkTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BasicInfoTip_BasicInfoTipTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BasicInfoFind_BasicInfoFindTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<CollectCard_CollectCardTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<CollectCardView_CollectCardViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<CollectCardReward_CollectCardRewardTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<CollectCardTitle_CollectCardTitleTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverMain_MoverMainTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverUseSkill_MoverUseSkillTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverHG_MoverHGTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverView_MoverViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverSlotView_MoverSlotViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverAbility_MoverAbilityTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverItem_MoverItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<PupMain_PetMainTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<PupView_PetViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<KQVoteDesc_KQVoteDescTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<KQIsVote_KQIsVoteTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<KQTeam_KQTeamTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MobConditionView_MobConditionViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MobNoFadeIn_MobNoFadeInTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MarketSearchInfo_MarketSearchInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ChrCreateEquip_ChrCreateEquipTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ChatColor_ChatColorTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<TermExtendMatch_TermExtendMatchTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<AbStateMsg_AbStateMsgTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MinimonInfo_MinimonInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemViewDummy_ItemViewDummyTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<UseClassTypeInfo_UseCalssTypeTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ChrBasicEquip_ChrBasicEquipTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
void __thiscall ItemInfoTab::ItemInfoTab(ItemInfoTab *this);
void __thiscall ItemViewInfoTab::ItemViewInfoTab(ItemViewInfoTab *this);
void *__thiscall ItemViewInfoTab::_vector_deleting_destructor_(ItemViewInfoTab *this, unsigned int);
void __thiscall MobInfoTab::MobInfoTab(MobInfoTab *this);
void __thiscall MobViewInfoTab::MobViewInfoTab(MobViewInfoTab *this);
void __thiscall NPCViewInfoTab::NPCViewInfoTab(NPCViewInfoTab *this);
void __thiscall AbnormalStateInfoTab::AbnormalStateInfoTab(AbnormalStateInfoTab *this);
void *__thiscall AbnormalStateInfoTab::_vector_deleting_destructor_(AbnormalStateInfoTab *this, unsigned int);
void __thiscall AbnormalStateViewInfoTab::AbnormalStateViewInfoTab(AbnormalStateViewInfoTab *this);
void __thiscall SubAbStateInfoTab::SubAbStateInfoTab(SubAbStateInfoTab *this);
void *__thiscall SubAbStateInfoTab::_vector_deleting_destructor_(SubAbStateInfoTab *this, unsigned int);
void __thiscall MapInfoTab::MapInfoTab(MapInfoTab *this);
void __thiscall MapViewInfoTab::MapViewInfoTab(MapViewInfoTab *this);
void *__thiscall IIDTableBase<MapViewInfo_MapViewInfoTab_unsigned_short>::_vector_deleting_destructor_(MapViewInfoTab *this, unsigned int);
void __thiscall UpGradeInfoTab::UpGradeInfoTab(UpGradeInfoTab *this);
void *__thiscall IIDTableBase<UpGradeInfo_UpGradeInfoTab_unsigned_short>::_scalar_deleting_destructor_(UpGradeInfoTab *this, unsigned int);
void __thiscall ActionViewTable::ActionViewTable(ActionViewTable *this);
unsigned __int16 __thiscall ActionViewTable::GetID(AttendRewardTab *this, AttendReward *pkRecord);
void __thiscall RidePetTable::RidePetTable(RidePetTable *this);
void *__thiscall RidePetTable::_vector_deleting_destructor_(RidePetTable *this, unsigned int);
void __thiscall MobCoordinateTab::MobCoordinateTab(MobCoordinateTab *this);
void __thiscall MobKillAnnounceTextTab::MobKillAnnounceTextTab(MobKillAnnounceTextTab *this);
void __thiscall ChargedIconItemTab::ChargedIconItemTab(ChargedIconItemTab *this);
void *__thiscall IIDTableBase<ChargedIconItem_ChargedIconItemTab_unsigned_short>::_scalar_deleting_destructor_(ChargedIconItemTab *this, unsigned int);
void __thiscall ChargedMsgItemTab::ChargedMsgItemTab(ChargedMsgItemTab *this);
void __thiscall AttendRewardTab::AttendRewardTab(AttendRewardTab *this);
void *__thiscall IIDTableBase<AttendReward_AttendRewardTab_unsigned_short>::_scalar_deleting_destructor_(AttendRewardTab *this, unsigned int);
void __thiscall BRAccUpgradeInfoTab::BRAccUpgradeInfoTab(BRAccUpgradeInfoTab *this);
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Insert<std::_List_const_iterator<std::_List_val<ItemViewDummy___std::allocator<ItemViewDummy__>>>>(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Where, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _First, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Last);
bool __cdecl ITableBase<FaceCutMsg_FaceCutMsgTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
void __thiscall std::_Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::__Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>(std::_Pair_base<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *this);
bool __cdecl ITableBase<ItemInfo_ItemInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ItemViewInfo_ItemViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MobInfo_MobInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MobViewInfo_MobViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<SubAbStateInfo_SubAbStateInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MapInfo_MapInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MapViewInfo_MapViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<UpGradeInfo_UpGradeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ActionViewInfo_ActionViewTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<RIDING_RidePetTable>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MobCoordinate_MobCoordinateTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ChargedIconItem_ChargedIconItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ChargedMessageItem_ChargedMsgItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<AttendReward_AttendRewardTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *this);
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::list<ItemViewDummy___std::allocator<ItemViewDummy__>>(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Right);
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Assign_rv(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Right);
bool __cdecl FaceCutMsgTab::Load(char *pcFn, bool bErrorWhenOpenFailed);
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Val2);
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *this, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *_Right);
void __thiscall std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Check_size(std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *this);
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::erase(...);
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Insert(...);
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Reinsert(...);
int std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>(...);
int ___insert_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std______Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2_V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__c(...);
bool __cdecl ItemViewDummyTab::Load(char *pcFn, bool bErrorWhenOpenFailed);
void __thiscall PgFrameMgr::RegisterAllFrameWork(PgFrameMgr *this);
void __thiscall NiActionData::_NiActionData(NiActionData *this);
void *__thiscall NiPointer<NiAVObject>::_vector_deleting_destructor_(NiPointer<NiAlphaProperty> *this, unsigned int);
void *__thiscall NiActionData::_vector_deleting_destructor_(NiActionData *this, unsigned int);
boost::singleton_pool<boost::fast_pool_allocator_tag,28,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>::pool_type *__cdecl boost::details::pool::singleton_default<boost::singleton_pool<boost::fast_pool_allocator_tag_28_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>::pool_type>::instance();
void __thiscall AccountFrameWork::TerminateWindow(AccountFrameWork *this);
bool __thiscall AccountFrameWork::ReceiveWinProc(AccountFrameWork *this);
void __thiscall AccountFrameWork::TerminateNet(AccountFrameWork *this);
bool __thiscall AccountFrameWork::InitKeyMap(AccountFrameWork *this);
void __thiscall AccountFrameWork::TerminateKeyMap(AccountFrameWork *this);
void __thiscall AccountFrameWork::TerminateBackgroundScene(AccountFrameWork *this);
bool __thiscall AccountFrameWork::InitWindow(AccountFrameWork *this);
bool __thiscall AccountFrameWork::ReceiveWinCheck(AccountFrameWork *this);
bool __thiscall AccountFrameWork::InitNet(AccountFrameWork *this);
bool __thiscall AccountFrameWork::InitShadow(AccountFrameWork *this);
bool __thiscall AccountFrameWork::InitBackgroundScene(AccountFrameWork *this);
void __thiscall AccountFrameWork::ReleaseShadow(AccountFrameWork *this);
bool __thiscall AccountFrameWork::Init(AccountFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall AccountFrameWork::Terminate(AccountFrameWork *this);
NiSourceTexture *__cdecl PgUtil::LoadSourceTexture(const char *pcFileName);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::AddNodeTail(NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, NiTListItem<PgWin *> *pkNode);
int __thiscall AccountFrameWork::On_NC_USER_CONNECTCUT_CMD(AccountFrameWork *this, int iRevBytes, void *pvData);
int __thiscall AccountFrameWork::On_NC_USER_WORLD_STATUS_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
int __thiscall AccountFrameWork::On_NC_USER_XTRAP_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
void __thiscall AccountFrameWork::NcUserLoginCpReq(AccountFrameWork *this, char *acCpKey);
void __thiscall AccountFrameWork::NcUserXtrapReq(AccountFrameWork *this, char *acXTrapKey);
void __thiscall AccountFrameWork::NcUserWorldSelectReq(AccountFrameWork *this, unsigned int uiIndex);
void __thiscall AccountFrameWork::NcUserWorldStatusReq(AccountFrameWork *this);
int __thiscall AccountFrameWork::On_NC_USER_LOGIN_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
int __thiscall AccountFrameWork::On_NC_USER_LOGINFAIL_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
void __thiscall AccountFrameWork::NcUserLoginReq(AccountFrameWork *this, char byLoginType);
int __thiscall AccountFrameWork::On_NC_USER_CLIENT_WRONGVERSION_CHECK_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
int __thiscall AccountFrameWork::On_NC_USER_CLIENT_RIGHTVERSION_CHECK_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
int __thiscall AccountFrameWork::On_NC_USER_WORLDSELECT_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
void __thiscall AccountFrameWork::NcUserVersionReq(AccountFrameWork *this);
int __thiscall AccountFrameWork::On_NC_MISC_SEED_ACK(AccountFrameWork *this, int iRevBytes, void *pvData);
int __thiscall AccountFrameWork::ProcessNetMsg(AccountFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall std::locale::facet::_Incref(std::locale::facet *this);
std::locale::facet *__thiscall std::locale::facet::_Decref(std::locale::facet *this);
void __thiscall std::locale::facet::_facet(std::locale::facet *this);
void __thiscall std::locale::_locale(std::locale *this);
std::locale *__thiscall std::ios_base::getloc(std::ios_base *this, std::locale *result);
void *__thiscall std::basic_ios<char_std::char_traits<char>>::_scalar_deleting_destructor_(std::basic_ios<char,std::char_traits<char> > *this, unsigned int);
void __thiscall Name8::Name8(Name8 *this);
void __thiscall std::basic_ios<char_std::char_traits<char>>::_basic_ios<char_std::char_traits<char>>(std::basic_ios<char,std::char_traits<char> > *this);
void __thiscall std::basic_istream<char_std::char_traits<char>>::_basic_istream<char_std::char_traits<char>>(std::basic_istream<char,std::char_traits<char> > *this);
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Gnavail(std::basic_streambuf<char,std::char_traits<char> > *this);
bool __thiscall Server::GetWorldName(Server *this, char ucIndex, char *pcWorldName);
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Reset_back(std::basic_filebuf<char,std::char_traits<char> > *this);
std::locale *__thiscall std::basic_streambuf<char_std::char_traits<char>>::getloc(std::basic_streambuf<char,std::char_traits<char> > *this, std::locale *result);
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Init(std::basic_streambuf<char,std::char_traits<char> > *this);
int __thiscall std::codecvt<char_char_int>::do_out(std::codecvt<char,char,int> *this, int *__formal, const char *_First1, const char *__formal, const char **_Mid1, char *_First2, char *__formal, char **_Mid2);
int __thiscall std::codecvt<char_char_int>::do_unshift(std::codecvt<char,char,int> *this, int *__formal, char *_First2, char *__formal, char **_Mid2);
int __thiscall std::codecvt<char_char_int>::do_length(std::codecvt<char,char,int> *this, const int *__formal, const char *_First1, const char *_Last1, unsigned int _Count);
char __thiscall std::ctype<char>::do_tolower(std::ctype<char> *this, char _Ch);
const char *__thiscall std::ctype<char>::do_tolower(std::ctype<char> *this, char *_First, const char *_Last);
char __thiscall std::ctype<char>::do_toupper(std::ctype<char> *this, char _Ch);
const char *__thiscall std::ctype<char>::do_toupper(std::ctype<char> *this, char *_First, const char *_Last);
char __thiscall std::ctype<char>::do_widen(std::ctype<char> *this, char _Byte);
const char *__thiscall std::ctype<char>::do_widen(std::ctype<char> *this, const char *_First, const char *_Last, char *_Dest);
char __thiscall std::ctype<char>::do_narrow(std::ctype<char> *this, char _Ch, char __formal);
const char *__thiscall std::ctype<char>::do_narrow(std::ctype<char> *this, const char *_First, const char *_Last, char __formal, char *_Dest);
void *__thiscall std::ctype<char>::_vector_deleting_destructor_(std::ctype<char> *this, unsigned int);
void __thiscall std::ios_base::clear(std::ios_base *this, int _State, bool _Reraise);
void __thiscall std::runtime_error::runtime_error(std::runtime_error *this, std::runtime_error *__that);
void __thiscall std::system_error::system_error(std::system_error *this, std::system_error *__that);
void __thiscall std::ios_base::_Init(std::ios_base *this);
void __thiscall std::ios_base::failure::failure(std::ios_base::failure *this, std::ios_base::failure *__that);
void __thiscall std::basic_ostream<char_std::char_traits<char>>::_Sentry_base::__Sentry_base(std::basic_istream<char,std::char_traits<char> >::sentry *this);
void __thiscall std::_Yarn<char>::__Yarn<char>(std::_Yarn<char> *this);
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>(std::basic_streambuf<char,std::char_traits<char> > *this);
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Lock(std::basic_streambuf<char,std::char_traits<char> > *this);
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Unlock(std::basic_streambuf<char,std::char_traits<char> > *this);
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::overflow(std::basic_streambuf<char,std::char_traits<char> > *this, int __formal);
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::showmanyc(std::basic_streambuf<char,std::char_traits<char> > *this);
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::underflow(NiBoundingVolume *this);
std::basic_streambuf<char,std::char_traits<char> > *__thiscall std::basic_streambuf<char_std::char_traits<char>>::setbuf(std::basic_streambuf<char,std::char_traits<char> > *this, char *__formal, __int64 __formal);
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Pnavail(std::basic_streambuf<char,std::char_traits<char> > *this);
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::uflow(std::basic_streambuf<char,std::char_traits<char> > *this);
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::xsgetn(std::basic_streambuf<char,std::char_traits<char> > *this, char *_Ptr, __int64 _Count);
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::xsputn(std::basic_streambuf<char,std::char_traits<char> > *this, const char *_Ptr, __int64 _Count);
std::fpos<int> *__thiscall std::basic_streambuf<char_std::char_traits<char>>::seekoff(std::basic_streambuf<char,std::char_traits<char> > *this, std::fpos<int> *result, __int64 __formal, int __formal, int __formal);
std::fpos<int> *__thiscall std::basic_streambuf<char_std::char_traits<char>>::seekpos(std::basic_streambuf<char,std::char_traits<char> > *this, std::fpos<int> *result, std::fpos<int> __formal, int __formal);
void *__thiscall std::basic_istream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_istream<char,std::char_traits<char> > *this, unsigned int);
void *__thiscall std::basic_streambuf<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_streambuf<char,std::char_traits<char> > *this, unsigned int);
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Init(std::basic_filebuf<char,std::char_traits<char> > *this, _iobuf *_File, std::basic_filebuf<char,std::char_traits<char> >::_Initfl _Which);
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::basic_streambuf<char_std::char_traits<char>>(std::basic_streambuf<char,std::char_traits<char> > *this);
void __thiscall std::_Locinfo::_Locinfo(std::_Locinfo *this, const char *_Pch);
void __thiscall std::_Locinfo::__Locinfo(std::_Locinfo *this);
unsigned int __cdecl std::ctype<char>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc);
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::snextc(std::basic_streambuf<char,std::char_traits<char> > *this);
std::ctype<char> *__cdecl std::use_facet<std::ctype<char>>(std::locale *_Loc);
std::basic_istream<char,std::char_traits<char> > *__thiscall std::basic_istream<char_std::char_traits<char>>::seekg(std::basic_istream<char,std::char_traits<char> > *this, __int64 _Off, int _Way);
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Lock(std::basic_filebuf<char,std::char_traits<char> > *this);
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Unlock(std::basic_filebuf<char,std::char_traits<char> > *this);
bool __cdecl std::_Fputc<char>(char _Byte, _iobuf *_File);
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::underflow(std::basic_filebuf<char,std::char_traits<char> > *this);
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::sync(std::basic_filebuf<char,std::char_traits<char> > *this);
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Set_back(std::basic_filebuf<char,std::char_traits<char> > *this);
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::pbackfail(std::basic_filebuf<char,std::char_traits<char> > *this, int _Meta);
std::basic_streambuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::setbuf(std::basic_filebuf<char,std::char_traits<char> > *this, char *_Buffer, __int64 _Count);
char __thiscall std::basic_ios<char_std::char_traits<char>>::widen(std::basic_ios<char,std::char_traits<char> > *this, char _Byte);
unsigned int __cdecl std::codecvt<char_char_int>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc);
std::basic_ostream<char,std::char_traits<char> > *__thiscall std::basic_ostream<char_std::char_traits<char>>::flush(std::basic_ostream<char,std::char_traits<char> > *this);
bool __thiscall std::basic_istream<char_std::char_traits<char>>::_Ipfx(std::basic_istream<char,std::char_traits<char> > *this, bool _Noskip);
std::codecvt<char,char,int> *__cdecl std::use_facet<std::codecvt<char_char_int>>(std::locale *_Loc);
std::basic_istream<char,std::char_traits<char> > *__thiscall std::basic_istream<char_std::char_traits<char>>::read(std::basic_istream<char,std::char_traits<char> > *this, char *_Str, __int64 _Count);
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::uflow(std::basic_filebuf<char,std::char_traits<char> > *this);
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::imbue(std::basic_filebuf<char,std::char_traits<char> > *this, std::locale *_Loc);
std::basic_filebuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::open(std::basic_filebuf<char,std::char_traits<char> > *this, const wchar_t *_Filename, int _Mode, int _Prot);
bool __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Endwrite(std::basic_filebuf<char,std::char_traits<char> > *this);
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::overflow(std::basic_filebuf<char,std::char_traits<char> > *this, int _Meta);
std::fpos<int> *__thiscall std::basic_filebuf<char_std::char_traits<char>>::seekoff(std::basic_filebuf<char,std::char_traits<char> > *this, std::fpos<int> *result, __int64 _Off, int _Way, int __formal);
std::fpos<int> *__thiscall std::basic_filebuf<char_std::char_traits<char>>::seekpos(std::basic_filebuf<char,std::char_traits<char> > *this, std::fpos<int> *result, std::fpos<int> _Pos, int __formal);
std::basic_filebuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::close(std::basic_filebuf<char,std::char_traits<char> > *this);
void *__thiscall std::basic_filebuf<char_std::char_traits<char>>::_scalar_deleting_destructor_(std::basic_filebuf<char,std::char_traits<char> > *this, unsigned int);
void __thiscall std::basic_ifstream<char_std::char_traits<char>>::basic_ifstream<char_std::char_traits<char>>(std::basic_ifstream<char,std::char_traits<char> > *this);
void __thiscall std::basic_ifstream<char_std::char_traits<char>>::_basic_ifstream<char_std::char_traits<char>>(std::basic_ifstream<char,std::char_traits<char> > *this);
void __thiscall std::basic_ifstream<char_std::char_traits<char>>::_vbase_destructor(std::basic_ifstream<char,std::char_traits<char> > *this);
void *__thiscall std::basic_ifstream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_ifstream<char,std::char_traits<char> > *this, unsigned int);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl ClientVersionKeyInfo::getVersionKey(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
void __thiscall AccountFrameWork::OnLoginWorldComplete(AccountFrameWork *this);
void __thiscall AccountFrameWork::OnCharLoginComplete(AccountFrameWork *this);
void __thiscall AccountFrameWork::OnZoneLoginComplete(AccountFrameWork *this);
void __thiscall AccountFrameWork::OnWrongVersionMsgClose(AccountFrameWork *this);
void __thiscall AccountFrameWork::Exit(AccountFrameWork *this);
void __thiscall AccountFrameWork::WorldSelectOk(AccountFrameWork *this);
void __thiscall AccountFrameWork::SetResList(AccountFrameWork *this);
void __thiscall AccountFrameWork::SetResListDefault(AccountFrameWork *this);
void __thiscall AccountFrameWork::Draw(AccountFrameWork *this);
void __thiscall AccountFrameWork::ProcessInput(AccountFrameWork *this);
void __thiscall AccountFrameWork::OpenResolutionPopup(AccountFrameWork *this);
void __thiscall AccountFrameWork::SetOptionResolution(AccountFrameWork *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall AccountFrameWork::ChangeResolution(AccountFrameWork *this);
void __thiscall AccountFrameWork::OnWorldMgrConnectFail(AccountFrameWork *this);
void __thiscall AccountFrameWork::OnLoginWorldFail(AccountFrameWork *this, unsigned int uiwParam);
void __thiscall AccountFrameWork::OnCharLoginFail(AccountFrameWork *this, unsigned int uiwParam);
void __thiscall AccountFrameWork::OnZoneServerConnectFail(AccountFrameWork *this);
void __thiscall AccountFrameWork::OnZoneLoginFail(AccountFrameWork *this, unsigned int uiwParam);
void __thiscall AccountFrameWork::OnInitializeState(AccountFrameWork *this);
void __thiscall AccountFrameWork::TryUserLogin(AccountFrameWork *this, char *pcID, char *pcPasswd);
void __thiscall AccountFrameWork::WorldSelectCancel(AccountFrameWork *this);
void __thiscall AccountFrameWork::RenderShadow(AccountFrameWork *this);
void __thiscall AccountFrameWork::SetOptionResolution(AccountFrameWork *this, unsigned int uiParam);
void __thiscall AccountFrameWork::Update(AccountFrameWork *this, float fCurTime);
void __thiscall AccountFrameWork::ProcessMsg(AccountFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall AccountFrameWork::ApplyTerrain(AccountFrameWork *this, NiNode *pkGroundNode);
void __thiscall AccountFrameWork::AccountFrameWork(AccountFrameWork *this);
void __thiscall AccountFrameWork::_AccountFrameWork(AccountFrameWork *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, unsigned int);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>(NiTPointerList<PgWin *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vector_deleting_destructor_(NiTPointerList<PgWin *> *this, unsigned int);
void __thiscall NiTPointerList<PgWin__>::NiTPointerList<PgWin__>(NiTPointerList<PgWin *> *this);
void __thiscall PgTList<PgWin__>::_PgTList<PgWin__>(PgTList<PgWin *> *this);
void *__thiscall PgTList<PgWin__>::_vector_deleting_destructor_(PgTList<PgWin *> *this, unsigned int);
NiRTTI *__thiscall AccountFrameWork::GetRTTI(AccountFrameWork *this);
const char *__thiscall AccountFrameWork::GetFrameWorkName(AccountFrameWork *this);
void *__thiscall AccountFrameWork::_scalar_deleting_destructor_(AccountFrameWork *this, unsigned int);
int __thiscall LoginWorldNetFrameWork::On_NC_USER_LOGINWORLDFAIL_ACK(LoginWorldNetFrameWork *this, int iRevBytes, void *pvData);
void __thiscall LoginWorldNetFrameWork::Terminate(LoginWorldNetFrameWork *this);
void __thiscall LoginWorldNetFrameWork::Update(LoginWorldNetFrameWork *this, float fCurTime);
void __thiscall LoginWorldNetFrameWork::OnConnectWorldMgr(LoginWorldNetFrameWork *this);
int __thiscall LoginWorldNetFrameWork::On_NC_USER_LOGINWORLD_ACK(LoginWorldNetFrameWork *this, int iRevBytes, void *pvData);
void __thiscall LoginWorldNetFrameWork::LoginWorldNetFrameWork(LoginWorldNetFrameWork *this);
void __thiscall LoginWorldNetFrameWork::_LoginWorldNetFrameWork(LoginWorldNetFrameWork *this);
bool __thiscall LoginWorldNetFrameWork::Init(LoginWorldNetFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall LoginWorldNetFrameWork::ProcessMsg(LoginWorldNetFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall LoginWorldNetFrameWork::NcUserLoginWorldReq(LoginWorldNetFrameWork *this);
int __thiscall LoginWorldNetFrameWork::On_NC_MISC_SEED_ACK(LoginWorldNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LoginWorldNetFrameWork::ProcessNetMsg(LoginWorldNetFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
NiRTTI *__thiscall LoginWorldNetFrameWork::GetRTTI(LoginWorldNetFrameWork *this);
const char *__thiscall LoginWorldNetFrameWork::GetFrameWorkName(LoginWorldNetFrameWork *this);
void *__thiscall LoginWorldNetFrameWork::_scalar_deleting_destructor_(LoginWorldNetFrameWork *this, unsigned int);
void __thiscall SignUpWin::SignUpWin(SignUpWin *this);
void __thiscall SignUpWin::_SignUpWin(SignUpWin *this);
void __thiscall SignUpWin::GotoSignUpPage(SignUpWin *this);
void __thiscall SpawnAppsWin::SpawnAppsWin(SpawnAppsWin *this);
void __thiscall SpawnAppsWin::_SpawnAppsWin(SpawnAppsWin *this);
void __thiscall SpawnAppsWin::OnClose(SpawnAppsWin *this);
void __thiscall SpawnAppsWin::CloseWin(SpawnAppsWin *this);
void __thiscall SpawnAppsWin::ReGenPos(SpawnAppsWin *this);
void __thiscall SpawnAppsWin::UpdateWebPos(SpawnAppsWin *this);
void __thiscall SignUpWin::OnCommand(SignUpWin *this, unsigned int wParam, int lParam);
void __thiscall SignUpWin::LoadUrl(SignUpWin *this);
void __thiscall SpawnAppsWin::OnCommand(SpawnAppsWin *this, unsigned int wParam, int lParam);
bool __thiscall SpawnAppsWin::LoadURL(SpawnAppsWin *this);
void __thiscall SpawnAppsWin::UpdateMeWin(SpawnAppsWin *this, float fCurTime);
bool __thiscall SignUpWin::Create(SignUpWin *this, PgFrameWork *pkFrameWork);
bool __thiscall SpawnAppsWin::Create(SpawnAppsWin *this, PgFrameWork *pkFrameWork);
void __thiscall SpawnAppsWin::OnShowWin(SpawnAppsWin *this);
SignUpWin *__cdecl SignUpWin::CreateWin(PgFrameWork *pkFrameWork);
SpawnAppsWin *__cdecl SpawnAppsWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall SignUpWin::_scalar_deleting_destructor_(SignUpWin *this, unsigned int);
void *__thiscall SpawnAppsWin::_scalar_deleting_destructor_(SpawnAppsWin *this, unsigned int);
bool __thiscall AccountWin::CheckID(AccountWin *this, char *pcID);
bool __thiscall AccountWin::CheckPasswd(AccountWin *this, char *pcPasswd);
void __thiscall AccountWin::OnRegister(AccountWin *this);
void __thiscall AccountWin::OnForgotPassword(AccountWin *this);
void __thiscall AccountWin::SetRegisterURL(AccountWin *this, const char *pcURL);
void __thiscall AccountWin::SetForgotPassword(AccountWin *this, const char *pcURL);
void __thiscall AccountWin::SetEditFocus(AccountWin *this, unsigned int uiFocus);
void __thiscall AccountWin::OnCmdExit(AccountWin *this);
bool __thiscall AccountWin::ChekcIDPasswd(AccountWin *this);
void __thiscall AccountWin::ActiveInput(AccountWin *this);
void __thiscall AccountWin::DeactiveInput(AccountWin *this);
bool __thiscall AccountWin::OnModalWinClose(AccountWin *this, PgWin *pkModalWin);
void __thiscall AccountWin::AccountWin(AccountWin *this);
void __thiscall AccountWin::_AccountWin(AccountWin *this);
void __thiscall AccountWin::OnShowWin(AccountWin *this);
void __thiscall AccountWin::OnClose(AccountWin *this);
bool __thiscall AccountWin::CreateKoreaAccountWin(AccountWin *this, PgFrameWork *pkFrameWork);
void __thiscall AccountWin::DisplayCheckMsg(AccountWin *this);
bool __thiscall AccountWin::Create(AccountWin *this, PgFrameWork *pkFrameWork);
void __thiscall AccountWin::OnCmdOk(AccountWin *this, bool bCheck);
void __thiscall AccountWin::OnEditEnd(AccountWin *this, unsigned int wParam, int lParam);
void __thiscall AccountWin::UpdateMeWin(AccountWin *this, float fCurTime);
void __thiscall AccountWin::OnCommand(AccountWin *this, unsigned int wParam, int lParam);
AccountWin *__cdecl AccountWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall AccountWin::_scalar_deleting_destructor_(AccountWin *this, unsigned int);
int __thiscall WorldSelectWin::GetSelectedWorldNum(WorldSelectWin *this);
void __thiscall WorldSelectWin::InitServerListCtrlData(WorldSelectWin *this);
int __thiscall WorldSelectWin::FindIndex(WorldSelectWin *this, int WorldNo);
void __thiscall WorldSelectWin::OnClose(WorldSelectWin *this);
void __thiscall WorldSelectExitWin::WorldSelectExitWin(WorldSelectExitWin *this);
void __thiscall WorldSelectExitWin::_WorldSelectExitWin(WorldSelectExitWin *this);
void __thiscall WorldSelectOptionWin::WorldSelectOptionWin(WorldSelectOptionWin *this);
void __thiscall WorldSelectOptionWin::_WorldSelectOptionWin(WorldSelectOptionWin *this);
void __thiscall WorldSelectOptionWin::OnCommand(WorldSelectOptionWin *this, unsigned int wParam, int lParam);
void __thiscall WorldSelectOptionSetWin::WorldSelectOptionSetWin(WorldSelectOptionSetWin *this);
void __thiscall WorldSelectOptionSetWin::_WorldSelectOptionSetWin(WorldSelectOptionSetWin *this);
void __thiscall WorldSelectOptionSetWin::SetResolutionText(WorldSelectOptionSetWin *this, char *pcResolutionText);
void __thiscall WorldSelectWin::UpdateServerList(WorldSelectWin *this);
void __thiscall WorldSelectWin::OnCmdExit(WorldSelectWin *this);
void __thiscall WorldSelectWin::SaveLastConnectWorldInfo(WorldSelectWin *this);
bool __thiscall WorldSelectWin::LoadLastConnectWorldInfo(WorldSelectWin *this);
void __thiscall WorldSelectWin::UpdateWinPos(WorldSelectWin *this);
void __thiscall WorldSelectExitWin::OnExit(WorldSelectExitWin *this);
bool __thiscall WorldSelectOptionWin::Create(WorldSelectOptionWin *this, PgFrameWork *pkFrameWork);
void __thiscall WorldSelectOptionSetWin::OnClose(WorldSelectOptionSetWin *this);
void __thiscall WorldSelectOptionSetWin::ProcessMeInput(WorldSelectOptionSetWin *this, bool *bHit);
void __thiscall WorldSelectOptionSetWin::ReadOption(WorldSelectOptionSetWin *this);
void __thiscall WorldSelectOptionSetWin::OpenResolutionPopup(WorldSelectOptionSetWin *this);
bool __thiscall WorldSelectWin::Create(WorldSelectWin *this, PgFrameWork *pkFrameWork);
void __thiscall WorldSelectWin::OnCmdOk(WorldSelectWin *this, bool bCheck);
void __thiscall WorldSelectWin::UpdateServerBtnState(WorldSelectWin *this, unsigned int nSelectedSlot);
void __thiscall WorldSelectWin::MakeEmptyServerName(WorldSelectWin *this, PgWinBut *pkBtn);
bool __thiscall WorldSelectExitWin::Create(WorldSelectExitWin *this, PgFrameWork *pkFrameWork);
void __thiscall WorldSelectExitWin::OnCommand(WorldSelectExitWin *this, unsigned int wParam, int lParam);
bool __thiscall WorldSelectOptionSetWin::Create(WorldSelectOptionSetWin *this, PgFrameWork *pkFrameWork);
void __thiscall WorldSelectOptionSetWin::OnCommand(WorldSelectOptionSetWin *this, unsigned int wParam, int lParam);
void __thiscall WorldSelectOptionSetWin::OnShowWin(WorldSelectOptionSetWin *this);
void __thiscall WorldSelectWin::_WorldSelectWin(WorldSelectWin *this);
void __thiscall WorldSelectWin::LoadServerListOrder(WorldSelectWin *this);
void __thiscall WorldSelectWin::MakeServerListOrder(WorldSelectWin *this);
WorldSelectExitWin *__cdecl WorldSelectExitWin::CreateWin(PgFrameWork *pkFrameWork);
WorldSelectOptionWin *__cdecl WorldSelectOptionWin::CreateWin(PgFrameWork *pkFrameWork);
WorldSelectOptionSetWin *__cdecl WorldSelectOptionSetWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall WorldSelectWin::WorldSelectWin(WorldSelectWin *this);
WorldSelectWin *__cdecl WorldSelectWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall WorldSelectWin::UpdatePageState(WorldSelectWin *this);
void __thiscall WorldSelectWin::InitWorldSelectExitWin(WorldSelectWin *this, PgFrameWork *pkFrameWork);
void __thiscall WorldSelectWin::OnShowWin(WorldSelectWin *this);
void __thiscall WorldSelectWin::OnNextPage(WorldSelectWin *this);
void __thiscall WorldSelectWin::OnBackPage(WorldSelectWin *this);
void __thiscall WorldSelectWin::UpdateMeWin(WorldSelectWin *this, float fCurTime);
void __thiscall WorldSelectWin::OnCommand(WorldSelectWin *this, unsigned int wParam, int lParam);
const bool __thiscall NiInputKeyboard::KeyWasReleased(NiInputKeyboard *this, NiInputKeyboard::KeyCode eKey);
void *__thiscall WorldSelectExitWin::_scalar_deleting_destructor_(WorldSelectExitWin *this, unsigned int);
void *__thiscall WorldSelectOptionWin::_vector_deleting_destructor_(WorldSelectOptionWin *this, unsigned int);
void *__thiscall WorldSelectOptionSetWin::_scalar_deleting_destructor_(WorldSelectOptionSetWin *this, unsigned int);
void *__thiscall WorldSelectWin::_vector_deleting_destructor_(WorldSelectWin *this, unsigned int);
int __thiscall CharSelectFrameWork::On_NC_USER_CONNECTCUT_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_PRISON_GET_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_EVENT_FRIEND_GETCOUNT_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHARGED_BOOTHSLOTSIZE_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_KEYMAP_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_SHORTCUTDATA_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData);
void __thiscall CharSelectFrameWork::NcAvatarEraseReq(CharSelectFrameWork *this);
void __thiscall CharSelectFrameWork::NcCharLoginReq(CharSelectFrameWork *this);
int __thiscall CharSelectFrameWork::On_NC_CHAR_LOGIN_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
bool __thiscall CharSelectFrameWork::OnLoadShortCutDataOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_SHORTCUTDATA_ACK *pkAck);
bool __thiscall CharSelectFrameWork::OnLoadShortCutSizeOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_SHORTCUTSIZE_ACK *pkAck);
bool __thiscall CharSelectFrameWork::OnLoadWindowPosOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_WINDOWPOS_ACK *pkAck);
bool __thiscall CharSelectFrameWork::OnLoadKeyMappingOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_KEYMAPPING_ACK *pkAck);
bool __thiscall CharSelectFrameWork::OnLoadGameOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_GAME_ACK *pkAck);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_SHORTCUTDATA_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_SHORTCUTSIZE_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_WINDOWPOS_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_KEYMAPPING_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_GAME_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_USER_WILL_WORLD_SELECT_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_TUTORIAL_DOING_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData);
void __thiscall CharSelectFrameWork::NcCharTutorialPopupAck(CharSelectFrameWork *this, bool bIsSkip);
int __thiscall CharSelectFrameWork::On_NC_AVATAR_ERASEFAIL_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_AVATAR_ERASESUCC_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_LOGINFAIL_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
void __thiscall CharSelectFrameWork::On_NC_AVATAR_RENAME_REQ(CharSelectFrameWork *this, Name5 newName);
int __thiscall CharSelectFrameWork::On_NC_AVATAR_RENAME_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
void __thiscall CharSelectFrameWork::NcUserConnectChangeCharIDReq(CharSelectFrameWork *this, Name5 CharName);
int __thiscall CharSelectFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::On_NC_CHAR_TUTORIAL_POPUP_REQ(CharSelectFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CharSelectFrameWork::ProcessNetMsg(CharSelectFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall SpStream::_SpStream(NiTSet<CPostProcessEffect *> *this);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_DOING_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_DONE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_READ_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_REPEAT_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_ABSTATE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_SKILL_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_PASSIVE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_CHARTITLE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_ITEM_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_GAME_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHARGED_BOOTHSLOTSIZE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_COININFO_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_QUEST_RESET_TIME_CLIENT_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
void __thiscall ZoneLoginNetFrameWork::Terminate(ZoneLoginNetFrameWork *this);
void __thiscall ZoneLoginNetFrameWork::Update(ZoneLoginNetFrameWork *this, float fCurTime);
void __thiscall ZoneLoginNetFrameWork::OnTryConnectToZone(ZoneLoginNetFrameWork *this);
void __thiscall ZoneLoginNetFrameWork::NcMapLoginCompleteCmd(ZoneLoginNetFrameWork *this);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_BASE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
void __thiscall ZoneLoginNetFrameWork::ZoneLoginNetFrameWork(ZoneLoginNetFrameWork *this);
void __thiscall ZoneLoginNetFrameWork::_ZoneLoginNetFrameWork(ZoneLoginNetFrameWork *this);
bool __thiscall ZoneLoginNetFrameWork::Init(ZoneLoginNetFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall ZoneLoginNetFrameWork::ProcessMsg(ZoneLoginNetFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
int __thiscall ZoneLoginNetFrameWork::On_NC_MAP_LOGINFAIL_ACK(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_MAP_LOGIN_ACK(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
void __thiscall ZoneLoginNetFrameWork::NcMapLoginReq(ZoneLoginNetFrameWork *this);
int __thiscall ZoneLoginNetFrameWork::On_NC_MISC_SEED_ACK(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_SHAPE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData);
int __thiscall ZoneLoginNetFrameWork::ProcessNetMsg(ZoneLoginNetFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
NiRTTI *__thiscall ZoneLoginNetFrameWork::GetRTTI(ZoneLoginNetFrameWork *this);
const char *__thiscall ZoneLoginNetFrameWork::GetFrameWorkName(ZoneLoginNetFrameWork *this);
void __thiscall PROTO_NC_MAP_LOGIN_REQ::_PROTO_NC_MAP_LOGIN_REQ(PROTO_NC_MAP_LOGIN_REQ *this);
void *__thiscall ZoneLoginNetFrameWork::_scalar_deleting_destructor_(ZoneLoginNetFrameWork *this, unsigned int);
void __thiscall CharSelectInfoWin::CharSelectInfoWin(CharSelectInfoWin *this);
void __thiscall CharSelectInfoWin::_CharSelectInfoWin(CharSelectInfoWin *this);
bool __thiscall CharSelectInfoWin::Create(CharSelectInfoWin *this, PgFrameWork *pkFrameWork);
void __thiscall CharSelectInfoWin::SetAvatarInfo(CharSelectInfoWin *this, PROTO_AVATARINFORMATION *pkInfo);
CharSelectInfoWin *__cdecl CharSelectInfoWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CharSelectInfoWin::_scalar_deleting_destructor_(CharSelectInfoWin *this, unsigned int);
void __thiscall CharSelectMenuWin::CharSelectMenuWin(CharSelectMenuWin *this);
void __thiscall CharSelectMenuWin::_CharSelectMenuWin(CharSelectMenuWin *this);
void __thiscall CharSelectMenuWin::OnCmdCancel(CharSelectMenuWin *this);
void __thiscall CharSelectMenuWin::OnCmdCreateChar(CharSelectMenuWin *this);
void __thiscall CharSelectMenuWin::OnCmdDeleteChar(CharSelectMenuWin *this);
void __thiscall CharSelectMenuWin::OnCmdOk(CharSelectMenuWin *this);
void __thiscall CharSelectMenuWin::UpdateMeWin(CharSelectMenuWin *this, float fCurTime);
bool __thiscall CharSelectMenuWin::Create(CharSelectMenuWin *this, PgFrameWork *pkFrameWork);
void __thiscall CharSelectMenuWin::EnableChildWinLogin(CharSelectMenuWin *this, bool b);
void __thiscall CharSelectMenuWin::OnCommand(CharSelectMenuWin *this, unsigned int wParam, int lParam);
void __thiscall CharSelectMenuWin::SetMenuTextInfo(CharSelectMenuWin *this, PROTO_AVATARINFORMATION *pkInfo);
void __thiscall CharSelectMenuWin::DisplayNoCharMsg(CharSelectMenuWin *this);
CharSelectMenuWin *__cdecl CharSelectMenuWin::CreateWin(PgFrameWork *pkFrameWork);
const bool __thiscall NiInputKeyboard::KeyWasPressed(NiInputKeyboard *this, NiInputKeyboard::KeyCode eKey);
void *__thiscall CharSelectMenuWin::_scalar_deleting_destructor_(CharSelectMenuWin *this, unsigned int);
void __thiscall EventFriendCountWin::EventFriendCountWin(EventFriendCountWin *this);
void __thiscall EventFriendCountWin::_EventFriendCountWin(EventFriendCountWin *this);
void __thiscall EventFriendCountWin::SetCountText(EventFriendCountWin *this, unsigned __int16 dNum);
bool __thiscall EventFriendCountWin::Create(EventFriendCountWin *this, PgFrameWork *pkFrameWork);
EventFriendCountWin *__cdecl EventFriendCountWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall EventFriendCountWin::_scalar_deleting_destructor_(EventFriendCountWin *this, unsigned int);
// bool __usercall IsSpecialCharInStr2_1<al>(char *pstr<ecx>);
void __thiscall GameFrameWork::AddGMUserChat(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::AddGMOtherUserChat(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::AddAnnounceMsg(GameFrameWork *this, char *pxText, D3DXCOLOR TextColor);
void __thiscall GameFrameWork::AddSysMsg(GameFrameWork *this, const char *pcText);
void __thiscall GameFrameWork::AddBattleMsg(GameFrameWork *this, char *pcText);
void __cdecl GameFrameWork::VaAddSysMsg(GameFrameWork *this, char *pcFormat);
void __thiscall GameFrameWork::AddAuthorMsg(GameFrameWork *this, char *pcText);
// bool __usercall IsChatCommandPrefix<al>(char *pcText<esi>, int *iPrefixLen);
// void __usercall StrCopyToSpace(char *pcDest<ecx>, char *pcSrc<eax>, int *iCount<ebx>);
// bool __usercall IsAllSpace<al>(char *pcSrc<ecx>);
// bool __usercall GetShisperNameStrLen<al>(char *pcText, int *iCount<ecx>);
// bool __usercall IsValidShisperChat<al>(char *pcText<ecx>);
// bool __usercall IsShisperChat<al>(char *pcText<esi>, int *iTextLen);
// bool __usercall IsVote<al>(char *pcText<esi>, int *iTextLen);
void __thiscall GameFrameWork::GetNameInStr(GameFrameWork *this, char *pcReturnID, char *pcInputStr);
void __thiscall GameFrameWork::FilteringWithoutID(GameFrameWork *this, char *pcText, char *pcCharID);
// bool __usercall IsPartyChat<al>(char *pcText<esi>, int *iTextLen);
// bool __usercall IsGuildChat<al>(char *pcText<esi>, int *iTextLen);
// bool __usercall IsGuildAcademyChat<al>(char *pcText<esi>, int *iTextLen);
// bool __usercall IsRaidChat<al>(char *pcText<esi>, int *iTextLen);
// bool __usercall isreplyWhisperChat<al>(char *pcText<esi>, int *iTextLen<edi>);
// bool __usercall IsShoutChat<al>(char *pcText<esi>, int *iTextLen);
// bool __usercall IsNormalChat<al>(char *pcText<esi>, int *iTextLen);
bool __thiscall GameFrameWork::DecodingClientOnlyChat(GameFrameWork *this, char *pcText);
bool __thiscall GameFrameWork::DecodingDebugChat(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::AddSChatItemLink(GameFrameWork *this, int eType, SHINE_ITEM_STRUCT *pItem);
void __thiscall ChatCommandList::InitPos(ChatCommandList *this);
void __thiscall GameFrameWork::AddUserChat(GameFrameWork *this, char *pcText, char kChatID);
void __thiscall GameFrameWork::AddOtherUserChat(GameFrameWork *this, char *pcText, char kChatID);
void __thiscall GameFrameWork::AddUserChat(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::AddOtherUserChat(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::AddPartyChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddRaidChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddOtherRaidChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddGuildChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddOtherPartyChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddOtherGuildChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddGuildAcademyChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddOtherGuildAcademyChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddWhisperChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddWhisperChat_To(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddShoutChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddGMWhisperChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddGMWhisperChat_To(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::AddGMShoutChat(GameFrameWork *this, Name5 kCharID, char *pcText);
void __thiscall GameFrameWork::SetSaveChatComList(GameFrameWork *this, bool bSave);
const char *__thiscall ChatCommandList::GetUpCommand(ChatCommandList *this);
const char *__thiscall ChatCommandList::GetDownCommand(ChatCommandList *this);
void __thiscall GameFrameWork::UpdateCheckTab(GameFrameWork *this);
// bool __usercall IsChatCommand<al>(char *pcChatText, unsigned int eTextID<eax>, int *iTextLen);
bool __thiscall GameFrameWork::SetPrisonInfo(GameFrameWork *this, char *pcText, bool bAdd);
char *__thiscall GameFrameWork::SmartWhisper::GetLast(GameFrameWork::SmartWhisper *this);
char *__thiscall GameFrameWork::SmartWhisper::GetPrev(GameFrameWork::SmartWhisper *this);
char *__thiscall GameFrameWork::SmartWhisper::GetNext(GameFrameWork::SmartWhisper *this);
void __thiscall GameFrameWork::UpdateSmartReply(GameFrameWork *this);
void __thiscall GameFrameWork::UpdateSmartWhisper(GameFrameWork *this);
bool __thiscall GameFrameWork::DecodingAuthorChat(GameFrameWork *this, char *pcText);
void __thiscall ChatCommandList::ChatCommandList(ChatCommandList *this);
void __thiscall ChatCommandList::_ChatCommandList(ChatCommandList *this);
void __thiscall ChatCommandList::Clear(ChatCommandList *this);
void __thiscall ChatCommandList::AddText(ChatCommandList *this, const char *pText);
void __thiscall GameFrameWork::SmartWhisper::MarkAsRecentlyUsed(GameFrameWork::SmartWhisper *this, char *pcWhisperID);
bool __thiscall GameFrameWork::DecodingCmdChat(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::DecodingChat(GameFrameWork *this, char *pcText, char *pcDefaultCmd, char *pcCharID);
void __cdecl WhileSpace(char **pcText);
void __thiscall Server::SetOneDayTime(Server *this, float fOneDayTime);
void __thiscall Server::SetTimeTest(Server *this, bool bTest);
void __thiscall Server::SetCurrentTime(Server *this, int nHour, int nMinute);
void __thiscall TutorialMgr::TutorialMgr(TutorialMgr *this);
TutorialMgr *__cdecl TutorialMgr::GetTutorialMgr();
bool __thiscall ChatBlockListWin::IsRestrictID(ChatBlockListWin *this, Name5 kCharID);
int std::list<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Splice_same(...);
ScenarioMgr *__cdecl ScenarioMgr::GetScenarioMgr();
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::_Move<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::basic_string<char_std::char_traits<char>_std::allocator<char>>__>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_First, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Last, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
int std::_List_val<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Buynode<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(...);
void __thiscall GameFrameWork::OnF7(GameFrameWork *this);
void __thiscall GameFrameWork::OnF8(GameFrameWork *this);
void __thiscall GameFrameWork::OnF9(GameFrameWork *this);
void __thiscall GameFrameWork::OnF10(GameFrameWork *this);
void __thiscall GameFrameWork::OnF11(GameFrameWork *this);
void __thiscall GameFrameWork::OnF12(GameFrameWork *this);
GatherType __cdecl GatherInfoTable::MapMobTypeToGatherType(MobType eType);
void __thiscall GatheringTask::OnStart(GatheringTask *this);
void __cdecl HSDebug_Log(char *pPath, void *pData);
void __thiscall GameFrameWork::ApplyShortCutSizeData(GameFrameWork *this);
void __thiscall GameFrameWork::ApplyKeyMappingData(GameFrameWork *this);
void __thiscall GameFrameWork::RegistereWinPostion(GameFrameWork *this);
void __thiscall GameFrameWork::OnSaveServerShortCutDataOption(GameFrameWork *this);
PgWin *__thiscall GameFrameWork::GetWinPosByOption(GameFrameWork *this, unsigned int index);
void __thiscall GameFrameWork::SetRewardWinQuestID(GameFrameWork *this, unsigned __int16 hQuestID);
void __thiscall GameFrameWork::ApplyWindowPosData(GameFrameWork *this);
void __thiscall GameFrameWork::TerminateNet(GameFrameWork *this);
bool __thiscall GameFrameWork::InitInput(GameFrameWork *this);
void __thiscall GameFrameWork::TerminateInput(GameFrameWork *this);
void __thiscall GameFrameWork::TerminateWorld(GameFrameWork *this);
void __thiscall GameFrameWork::TerminateCharacter(GameFrameWork *this);
void __thiscall GameFrameWork::InitNewCharCreate(GameFrameWork *this);
void __thiscall GameFrameWork::TerminateSystem(GameFrameWork *this);
void __thiscall GameFrameWork::OnSaveServerShortCutSizeOption(GameFrameWork *this);
void __thiscall GameFrameWork::OnSaveServerWindowPosOption(GameFrameWork *this);
void __thiscall GameFrameWork::OnSaveServerKeyRemappingOption(GameFrameWork *this);
void __thiscall GameFrameWork::OnSaveServerGameOption(GameFrameWork *this);
GatherInfo *__thiscall GatheringTask::FindGatherInfo(GatheringTask *this, GatherType eType, unsigned __int16 nItemID);
bool __thiscall GameFrameWork::InitNet(GameFrameWork *this);
void __thiscall GameFrameWork::ChangeWinDefaultPos(GameFrameWork *this);
void __thiscall GameFrameWork::SetWindowsPosOption(GameFrameWork *this);
bool __thiscall GameFrameWork::InitWorld(GameFrameWork *this);
bool __thiscall GameFrameWork::InitCharacter(GameFrameWork *this);
bool __thiscall GameFrameWork::InitSystem(GameFrameWork *this);
void __thiscall GameFrameWork::TerminateWindow(GameFrameWork *this);
void __thiscall GameFrameWork::Terminate(GameFrameWork *this);
bool __thiscall GameFrameWork::InitWindow(GameFrameWork *this);
bool __thiscall GameFrameWork::Init(GameFrameWork *this, PgMsg::Frame *ptFrameMsg);
bool __thiscall GatheringTask::OnProcessNetMsg(GatheringTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
GatherInfo *__thiscall GatheringTask::FindGatherInfo(GatheringTask *this, GatherType eType, int *bIsItemUsable);
void __thiscall GatheringTask::DirectMessage(GatheringTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
MobInfo *__cdecl IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
void __cdecl MachineOpt::SetViewTerrainLength(float fLength);
ItemInfo *__cdecl IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(unsigned __int16 kItemID);
void __thiscall NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>(NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> > *this);
void *__thiscall NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_scalar_deleting_destructor_(NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> > *this, unsigned int);
NiPointer<MapNavigator> *__cdecl MapNavigator::GetMapNavigator(NiPointer<MapNavigator> *result);
NiAVObject *__thiscall NiNode::GetAt(NiNode *this, unsigned int i);
void __cdecl ShineLogDisplay::Log(ShineLogDisplay *this, char *pcStr);
unsigned int __cdecl ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal();
unsigned int __cdecl ITableBase<GatherInfo_GatherInfoTable>::GetTotal();
void __thiscall PgWin::InitPosLeftTop(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate);
void __thiscall PgWin::InitPosRightTop(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate);
void __thiscall PgWinBar::OnChangeValue(PgWinBar *this);
void __cdecl MachineOpt::SetGraphicOption(MachineOpt::GraphicOption *kGraphicOption);
MapViewInfo *__cdecl MapViewInfoTab::GetByMapName(Name3 *kMapName);
unsigned __int16 __cdecl GatherInfoTable::GetSkillIDByType(GatherType eType);
void __thiscall NiTList<NiPointer<ITask>>::_NiTList<NiPointer<ITask>>(NiTList<NiPointer<ITask> > *this);
void __thiscall ITask::_ITask(ITask *this);
void __thiscall ProductTask::OnStart(ProductTask *this);
ActiveSkillInfo *__cdecl IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
void __thiscall ProductTask::DirectMessage(ProductTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall ProductTask::OnProcessNetMsg(ProductTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Linsert(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> *result, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Node, bool _Leftish);
std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, unsigned int *_Val);
bool __thiscall NiPoint3::operator__(NiPoint3 *this, NiPoint3 *pt);
void __thiscall GameFrameWork::AddPopupMenu_Metamorphosis(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_CharName(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_Whisper(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_PartyBuff(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_Follow(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_Vote(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_Cancel(GameFrameWork *this);
void __thiscall GameFrameWork::SetResListDefault(GameFrameWork *this);
KeyMap *__thiscall GameFrameWork::GetKeyMap(GameFrameWork *this);
void __thiscall GameFrameWork::SetPopupInfo(GameFrameWork *this, char *pcName);
void __thiscall GameFrameWork::AddPopupMenu_Collection(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_Trade(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_InviteGuild(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_InviteParty(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_InviteFriend(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_Party(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_Raid(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_InviteHolyPromise(GameFrameWork *this);
void __thiscall GameFrameWork::AddPopupMenu_RideOn(GameFrameWork *this);
void __thiscall GameFrameWork::OpenResolutionPopup(GameFrameWork *this);
bool __thiscall GameFrameWork::IsCapableKeyControl(GameFrameWork *this);
bool __thiscall GameFrameWork::UpdateCursorState(GameFrameWork *this);
int __cdecl GameFrameWork::CollisionCallback(NiCollisionGroup::Intersect *kIntersect);
void __thiscall GameFrameWork::OnPickGround(GameFrameWork *this, NiPoint3 *kGroundPos, bool bViewPoint);
bool __thiscall GameFrameWork::OnOnePickChar(GameFrameWork *this, Char *pkChar);
void __thiscall GameFrameWork::OnDoublePickChar(GameFrameWork *this, Char *pkChar);
void __thiscall GameFrameWork::OnPickDropItem(GameFrameWork *this, DropItem *pkDropItem);
void __thiscall GameFrameWork::OpenCharPopupMenu(GameFrameWork *this, char *pcName);
void __thiscall GameFrameWork::OpenRaidMemberPopupMenu(GameFrameWork *this, char *pcName);
void __thiscall GameFrameWork::OpenKQTeamPopupMenu(GameFrameWork *this, char *pcName);
bool __thiscall GameFrameWork::TranslatePickedMHObj(GameFrameWork *this, NiPoint3 *kGroundPos);
void __thiscall GameFrameWork::OnPickChar(GameFrameWork *this, Char *pkChar);
void __thiscall GameFrameWork::OnPickCharWithRBut(GameFrameWork *this, Char *pkChar);
bool __thiscall GameFrameWork::ProcessMHInput(GameFrameWork *this, World::PickEnum ePick, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos, DropItem **pkDropItem);
void __thiscall GameFrameWork::SetMHRClickMenu(GameFrameWork *this, mhObject *pPickedObj);
void __thiscall GameFrameWork::OnPickMiniHouse(GameFrameWork *this, unsigned __int16 hMinihouse);
void __thiscall GameFrameWork::ProcessInput(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMHPopupMenuWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenWingStonePlacePopup(GameFrameWork *this);
CursorState *__cdecl Singleton<CursorState>::getInstance();
MapInfo *__cdecl IIDTableBase<MapInfo_MapInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
NiPoint3 *__thiscall NiCamera::GetWorldDirection(NiCamera *this, NiPoint3 *result);
NiPoint3 *__thiscall Char::GetDirToChar(Char *this, NiPoint3 *result, Char *pkChar);
void __thiscall GameFrameWork::sRideOffValue::SetMove(GameFrameWork::sRideOffValue *this, NiPoint3 *kGroundPos, bool bViewPoint);
void __thiscall mhMouseControlWin::SetCtrlDown(mhMouseControlWin *this, bool b);
void __thiscall GTRequestListWin::EditKillForus(GTRequestListWin *this);
void __thiscall ChatDisplayWin2::ShowChatEditBox(ChatDisplayWin2 *this, bool b);
void __thiscall GuildListWin::EditKillForus(GuildListWin *this);
NiPointer<MHDiceGameTask> *__cdecl MHDiceGameTask::GetDiceGameTask(NiPointer<MHDiceGameTask> *result);
void __thiscall World::SetMoveTargetPointPos(World *this, NiPoint3 kPos);
void __thiscall World::ShowMoveTargetPoint(World *this, NiPoint3 kPos);
MiniHouseObjAni *__cdecl ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::GetByIndex(unsigned int uiIndex);
BasicInfoLinkType __cdecl BasicInfoLinkTab::GetbyCType(BIL_C_Type eType, char *pkCValue);
MiniHouseObjAni *__cdecl MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(unsigned __int16 ItemID, unsigned int uiAniGroupID, unsigned int uiGroupIndex);
MiniHouseFurniture *__cdecl MiniHouseFuritureInfoTab::GetObjByName(char *acName);
bool __cdecl std::operator__<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, const char *_Right);
stMINIHOUSEINFO *__thiscall CGuildMonster::GetGuildEumFromMob(CMiniHouseMgr *this, unsigned __int16 kHandle);
void __thiscall PartyWinInterface::OpenPopMenuParty(PartyWinInterface *this, char *pcName);
void __thiscall GuildJoinReqTask::SetTargetID(GuildJoinReqTask *this, char *pcName);
void __thiscall ServerMenuWin::CancelServerMenuWin(ServerMenuWin *this);
void __thiscall GameFrameWork::ClientSecurity(GameFrameWork *this);
void __thiscall GameFrameWork::KarisDivide_OK(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenChargedItemListWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenChatEditWin(GameFrameWork *this, const char *szText);
void __thiscall GameFrameWork::OnOpenSlashStartChat(GameFrameWork *this, const char *szText);
void __thiscall GameFrameWork::OnOpenAutoWhisperChat(GameFrameWork *this, const char *szText);
void __thiscall GameFrameWork::CloseCharInfoWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenKQuestTimeWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenShortCutSubWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenShortCutPanelTurn(GameFrameWork *this, ShortCutWin *targetWin, ShortCutWin *hideWin);
void __thiscall GameFrameWork::OnOpenShortCutSubPanelTurn(GameFrameWork *this, ShortCutWin *targetWin, ShortCutWin *hideWin);
void __thiscall GameFrameWork::OnReflashShortCutWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnCloseMHInputPassWordWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseNpcDlgWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseMHInfoWin(GameFrameWork *this, bool bNoDefault);
void __thiscall GameFrameWork::OpenReportWin(GameFrameWork *this);
bool __thiscall GameFrameWork::OpenWingStoneMapWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseWingStoneMapWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMiniPartyWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenItemMallWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenSystemWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnCharSelect(GameFrameWork *this);
void __thiscall GameFrameWork::OnErrorGotoAccount(GameFrameWork *this);
void __thiscall GameFrameWork::OnErrorGotoExit(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenDivideWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiMsg, unsigned int uiMax, char *pcText, unsigned int uiMode);
void __thiscall GameFrameWork::OnOpenInputTextWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiMsg, char *pcText);
void __thiscall GameFrameWork::OnOpenMoneyWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiOKMsg, unsigned int uiCancelMsg, char *pcText, char *pcText2);
void __thiscall GameFrameWork::OnOpenHolyRewardMoneyWin(GameFrameWork *this, unsigned int uiOKMsg, unsigned int uiCancelMsg, char *pcText1, char *pcText2);
void __thiscall GameFrameWork::CloseEnchantGemWin(GameFrameWork *this, bool bEnchantWin, bool bDelteteWin);
void __thiscall GameFrameWork::CloseWeapontitleWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenMiniHouseInventoryWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseInventoryWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenCalculatorWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiMsg, unsigned int uiMax, char *pcText);
void __thiscall GameFrameWork::UnEquip(GameFrameWork *this, unsigned int uiEquipPos);
void __thiscall GameFrameWork::OpenKDQuestWin(GameFrameWork *this, bool bJoin);
void __thiscall GameFrameWork::OpenQuestWin(GameFrameWork *this, bool bSelectTab, int SelectIdx);
void __thiscall GameFrameWork::CloseQuestWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenHelpWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseHelpWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenHelpWin(GameFrameWork *this, BasicInfoLinkType Type);
void __thiscall GameFrameWork::OpenPlayGuideSearchList(GameFrameWork *this, char *acUIFile);
void __thiscall GameFrameWork::CloseWingStoneWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenForumWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseForumWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenShopWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseShopWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseKDQuestWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenActionWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseActionWin(GameFrameWork *this);
void __thiscall GameFrameWork::SetTopFriendAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseFriendAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseChatBlockListWin(GameFrameWork *this);
void __thiscall GameFrameWork::UpdateChatBlockListWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenRaidMemberAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseRaidMemberAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseMysteryVaultWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenMapLinkGateWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseMapLinkGateWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseHolyPromiseAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::SetTopHolyPromiseAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::ActivateRaidWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseCommunityWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOptionWinApply(GameFrameWork *this, int nType);
void __thiscall GameFrameWork::OnOptionWinDefaultSetting(GameFrameWork *this, int nType);
void __thiscall GameFrameWork::OpenGameOptionWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenGraphicOptionWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenSoundOptionWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenKeyRemappingOptionWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseOptionWin(GameFrameWork *this);
void __thiscall GameFrameWork::NcQuestGiveUpReq(GameFrameWork *this, unsigned __int16 nQuestID);
void __thiscall GameFrameWork::NcQuestClientScenarioDoneReq(GameFrameWork *this, unsigned __int16 kID);
void __thiscall GameFrameWork::NcMiscHideExceptMeCmd(GameFrameWork *this, bool bOn);
void __thiscall GameFrameWork::NcQuestScriptCmdAck(GameFrameWork *this, unsigned __int16 kID, char byScriptCmd, unsigned int dwResult);
void __thiscall GameFrameWork::SetWingStonePlaceList(GameFrameWork *this, unsigned int uiParam);
void __thiscall GameFrameWork::SendOwnerBlogAddrReq(GameFrameWork *this);
void __thiscall GameFrameWork::OnCloseJoinWin(GameFrameWork *this);
void __thiscall GameFrameWork::MHObjFocusCancel(GameFrameWork *this);
void __thiscall GameFrameWork::MHObjUsePortal(GameFrameWork *this);
void __thiscall GameFrameWork::OnShowMakeKarisWin(GameFrameWork *this, bool bShow);
void __thiscall GameFrameWork::SetInvLockAllItems(GameFrameWork *this, bool b);
void __thiscall GameFrameWork::OnOpenEnchantGemWin(GameFrameWork *this, SHINE_ITEM_STRUCT kStruct, void *pvBody, unsigned int UI_TYPE);
void __thiscall GameFrameWork::OnCloseEnchantGemToolTip(GameFrameWork *this);
void __thiscall GameFrameWork::OpenQuestNewsWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseQuestNewsWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenPlayGuideMinWin(GameFrameWork *this);
void __thiscall GameFrameWork::ClosePlayGuideMinWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenPlayGuideWin(GameFrameWork *this);
void __thiscall GameFrameWork::ClosePlayGuideWin(GameFrameWork *this);
void __thiscall GameFrameWork::RefreshHotKey(GameFrameWork *this);
void __thiscall GameFrameWork::OpenCollectWin(GameFrameWork *this, bool bOpen);
void __thiscall GameFrameWork::OpenCollectPeepingWin(GameFrameWork *this, bool bOpen);
void __thiscall GameFrameWork::OnOpenAttendIconWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenAttendRewardWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenAttendCheckWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenReviveMenuWin(GameFrameWork *this, bool bShow);
void __thiscall GameFrameWork::OnOpenRebirthMenuWin(GameFrameWork *this, bool bShow);
void __thiscall GameFrameWork::OpenKQScoreWin(GameFrameWork *this, bool b);
void __thiscall GameFrameWork::SetInventoryNewMark(GameFrameWork *this);
void __thiscall GameFrameWork::CloseClassChangeWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenKDTeamScoreWin(GameFrameWork *this, bool bOpen);
void __thiscall GameFrameWork::GuildEmblemShowWin(GameFrameWork *this, bool bShow);
void __thiscall GameFrameWork::PartyScoreShowWin(GameFrameWork *this, bool bShow);
void __thiscall GameFrameWork::IDRankingShowWin(GameFrameWork *this, bool bShow);
void __thiscall GameFrameWork::ChatItemLink(GameFrameWork *this, char *pText, SHINE_ITEM_STRUCT *rItemStruct);
void __thiscall GameFrameWork::LinkItemShowWin(GameFrameWork *this, bool bShow);
bool __thiscall GameFrameWork::IsItemInfoWin(GameFrameWork *this);
void __thiscall GameFrameWork::ClickLinkItemInfo(GameFrameWork *this, Item *pItem, int iX, int iY);
bool __thiscall GameFrameWork::IsRoarShowWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenPrivateStoreWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::SetOptionResolution(GameFrameWork *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall GameFrameWork::OpenCharInfoWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenCharInfoWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMiniHouseInventoryWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenSkillWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenQuestWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenHelpWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnDeleteMHItem(GameFrameWork *this);
void __thiscall GameFrameWork::JoinDiceGameReq(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenDiceRewardWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenDiceExpectWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMiniPartyWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenForumWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenItemShopWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnTab_Key(GameFrameWork *this);
void __thiscall GameFrameWork::OnKeyDownMoveFront(GameFrameWork *this);
void __thiscall GameFrameWork::OnKeyDownMoveBack(GameFrameWork *this);
void __thiscall GameFrameWork::OnKeyDownMoveRight(GameFrameWork *this);
void __thiscall GameFrameWork::OnKeyDownMoveLeft(GameFrameWork *this);
void __thiscall GameFrameWork::OnKeyDownJump(GameFrameWork *this);
void __thiscall GameFrameWork::ChangeRun(GameFrameWork *this);
void __thiscall GameFrameWork::ChangeWalk(GameFrameWork *this);
void __thiscall GameFrameWork::OnHPSoulStoneUse_Key(GameFrameWork *this);
void __thiscall GameFrameWork::OnSPSoulStoneUse_Key(GameFrameWork *this);
void __thiscall GameFrameWork::OpenEnchantGemWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenWeapontitleWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenInventoryWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseShopMenu(GameFrameWork *this, bool bSendEndOfTrade);
void __thiscall GameFrameWork::OpenSkillShopMenu(GameFrameWork *this);
void __thiscall GameFrameWork::CloseSkillShopMenu(GameFrameWork *this);
void __thiscall GameFrameWork::OpenSoulStoneShopMenu(GameFrameWork *this);
void __thiscall GameFrameWork::CloseSoulStoneShopMenu(GameFrameWork *this);
void __thiscall GameFrameWork::OpenStorageMenu(GameFrameWork *this, char byTargetPage);
void __thiscall GameFrameWork::CloseStorageMenu(GameFrameWork *this);
void __thiscall GameFrameWork::OpenItemShopWin(GameFrameWork *this, unsigned __int16 handle);
void __thiscall GameFrameWork::CloseItemShopWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenCharInfoWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenSkillWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::OpenQuestWin(GameFrameWork *this, int iSelectID, int iSelectTab);
void __thiscall GameFrameWork::OpenFriendAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenChatBlockListWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenMysteryVaultWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenHolyPromiseAddWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenItemUpgradeWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenMoverUpgradeWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnPartyJoinProposeAccept(GameFrameWork *this);
void __thiscall GameFrameWork::OnPartyJoinProposeReject(GameFrameWork *this);
void __thiscall GameFrameWork::OnTradeProposeAskAccept(GameFrameWork *this);
void __thiscall GameFrameWork::OnTradeProposeAskReject(GameFrameWork *this);
void __thiscall GameFrameWork::OnFriendConfirmReqYes(GameFrameWork *this, unsigned int lParam);
void __thiscall GameFrameWork::OnFriendConfirmReqNo(GameFrameWork *this, unsigned int lParam);
void __thiscall GameFrameWork::OnFriendDeleteYse(GameFrameWork *this, unsigned int lParam);
void __thiscall GameFrameWork::OnOpenItemMixWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnCloseItemMixWin(GameFrameWork *this, bool bSendEndofTrade);
void __thiscall GameFrameWork::OnPopupProposeTrade(GameFrameWork *this, Char *pkTarget);
void __thiscall GameFrameWork::OnTimerTradeReject(GameFrameWork *this);
void __thiscall GameFrameWork::OnSpace(GameFrameWork *this);
bool __thiscall GameFrameWork::CancelCharSelect(GameFrameWork *this);
bool __thiscall GameFrameWork::TargetCharReq(GameFrameWork *this, Char *pkChar);
void __thiscall GameFrameWork::OnWhisperChatStart(GameFrameWork *this, const char *charName);
void __thiscall GameFrameWork::MiniHouseIndoorModeOut(GameFrameWork *this);
void __thiscall GameFrameWork::SendKickReq(GameFrameWork *this, unsigned __int16 KickedChar);
void __thiscall GameFrameWork::OnOpenMHPopUpMenuObjAction(GameFrameWork *this, char *pObjName, mhObject *pkObj, bool bCanHold, bool bCanAni);
void __thiscall GameFrameWork::MinimizeMHWins(GameFrameWork *this, unsigned int uiwParam);
void __thiscall GameFrameWork::NormalizeMHWins(GameFrameWork *this, unsigned int uiwParam);
void __thiscall GameFrameWork::OnOpenGuildTournamentStorage(GameFrameWork *this);
void __thiscall GameFrameWork::OnCloseGTStorageWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenGuildAcademyStorage(GameFrameWork *this);
void __thiscall GameFrameWork::OnCloseGuildAcademyStorage(GameFrameWork *this);
void __thiscall GameFrameWork::OpenMHRepairWin(GameFrameWork *this, bool b, bool bRepairing);
void __thiscall GameFrameWork::SendMHRepairReq(GameFrameWork *this);
void __thiscall GameFrameWork::OnMapLogInError(GameFrameWork *this);
void __thiscall GameFrameWork::SendAutoPickItemReq(GameFrameWork *this, bool bAutoPickItem);
void __thiscall GameFrameWork::CloseMinimonAutoUseWin(GameFrameWork *this);
int __thiscall GameFrameWork::GetSoulCount(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenEnchantGemToolTip(GameFrameWork *this, Item *pkItem);
void __thiscall GameFrameWork::OpenPlayGuideWin(GameFrameWork *this, BasicInfoLinkType eType);
void __thiscall GameFrameWork::OnOpenCollectWin(GameFrameWork *this);
bool __thiscall GameFrameWork::GetOpenPlayGuideCheck(GameFrameWork *this, BasicInfoLinkType eType);
void __thiscall GameFrameWork::OnSoloModeKey(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenRestHouseKey(GameFrameWork *this);
void __thiscall GameFrameWork::SetOptionResolution(GameFrameWork *this, unsigned int uiParam);
void __thiscall GameFrameWork::OnOpenInventoryWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenActionWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMHConfigRoomInfoWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMHInputPassWordWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnArrToInvMHItem(GameFrameWork *this);
void __thiscall GameFrameWork::ReArrangeMHObj(GameFrameWork *this, mhObject *pkObj);
void __thiscall GameFrameWork::SendDelMHObjReq(GameFrameWork *this, bool ClickInv);
void __thiscall GameFrameWork::OnOpenMiniHouseMenuWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnGoBeautyShop(GameFrameWork *this);
void __thiscall GameFrameWork::OnGoCharSelect(GameFrameWork *this);
void __thiscall GameFrameWork::OnLogout(GameFrameWork *this);
void __thiscall GameFrameWork::OnExit(GameFrameWork *this);
bool __thiscall GameFrameWork::OnShortCutRClickItemUseMode(GameFrameWork *this, Item *pkItem, ShortCutItem *pkSenderShortCut, unsigned int uiUser);
void __thiscall GameFrameWork::OnShortCutRClickItemNormalMode(GameFrameWork *this, Item *pkItem, ShortCutItem *pkSenderShortCut, unsigned int uiUser);
void __thiscall GameFrameWork::OnShortCutRClickItemNormalMode(GameFrameWork *this, Item *pkItem, ShortCutInvPosItem *pkSenderShortCut, unsigned int uiUser);
void __thiscall GameFrameWork::ChangeMoveMode(GameFrameWork *this, int nMode);
void __thiscall GameFrameWork::OnWalkOrRun_Key(GameFrameWork *this);
void __thiscall GameFrameWork::OnNearMobSelect(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenPrivateStoreWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenPrivateStoreWinBuy(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenPrivateStoreWinSell(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenPrivateStoreWinSearch(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenInventoryWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::OnPauseEmotion(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenActionWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::OpenCommunityWin(GameFrameWork *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab);
void __thiscall GameFrameWork::OpenRidePetWin(GameFrameWork *this, unsigned int uiPetID);
void __thiscall GameFrameWork::CloseItemUpgradeWin(GameFrameWork *this, bool bSendEndofTrade);
void __thiscall GameFrameWork::CloseMoverUpgradeWin(GameFrameWork *this, bool bSendEndofTrade);
void __thiscall GameFrameWork::OnFriendDelete(GameFrameWork *this, Name5 kCharID);
void __thiscall GameFrameWork::NcScenarioAreaEntryAck(GameFrameWork *this, const char *szAreaName);
void __thiscall GameFrameWork::NcScenarioAreaLeaveAck(GameFrameWork *this, const char *szAreaName);
void __thiscall GameFrameWork::OnF1(GameFrameWork *this);
void __thiscall GameFrameWork::OnF2(GameFrameWork *this);
void __thiscall GameFrameWork::OnF3(GameFrameWork *this);
void __thiscall GameFrameWork::OnF4(GameFrameWork *this);
void __thiscall GameFrameWork::OnF5(GameFrameWork *this);
void __thiscall GameFrameWork::OnF6(GameFrameWork *this);
void __thiscall GameFrameWork::OnEquipChangeMiniMon(GameFrameWork *this, Item *pkItem);
void __thiscall GameFrameWork::OpenCollectCardWin(GameFrameWork *this, bool bOpen, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, bool bBlind);
void __thiscall GameFrameWork::OpenFeedMoverWin(GameFrameWork *this, unsigned __int16 kMoverHandle, unsigned int uiLevel);
void __thiscall GameFrameWork::OnOpenMiniHouseWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::SendmhObjActReq(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMHPopUpMenuInvObjWin(GameFrameWork *this, bool bArranged, int SelItemID);
void __thiscall GameFrameWork::OpenMHInfoWin(GameFrameWork *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab);
void __thiscall GameFrameWork::OnOpenFriendWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenGuildWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenHolyPromise(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenGuildAcademy(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenPartyMatching(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenWedding(GameFrameWork *this);
void __thiscall GameFrameWork::OnShortCutSkillUse(GameFrameWork *this, unsigned int iIndex, unsigned int uiUser);
void __thiscall GameFrameWork::OpenShopMenu(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenFriendWinKey(GameFrameWork *this);
void __thiscall GameFrameWork::ActivateCommunityWin(GameFrameWork *this);
void __thiscall GameFrameWork::CloseRidePetWin(GameFrameWork *this);
void __thiscall GameFrameWork::MHWinInfoToSettingSync(GameFrameWork *this);
void __thiscall GameFrameWork::CloseFeedMoverWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnGameStart(GameFrameWork *this);
void __thiscall GameFrameWork::OnCloseMHConfigRoomInfoWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenMHItemInvenWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnCloseMHItemInvenWin(GameFrameWork *this);
void __thiscall GameFrameWork::SetPlayGuideSkipList(GameFrameWork *this);
void __thiscall GameFrameWork::OnEscape(GameFrameWork *this);
bool __thiscall GameFrameWork::OpenPetDialog(GameFrameWork *this, unsigned __int16 kPetHandle, Name4 kPetName);
void __thiscall GameFrameWork::SendMHBuildingOrFixReq(GameFrameWork *this, unsigned int uiwParam);
void __thiscall GameFrameWork::OpenCollectPopupWin(GameFrameWork *this, unsigned int uiCardID);
void __thiscall GameFrameWork::ProcessMsg(GameFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall GameFrameWork::OnNpcDialogCommand(GameFrameWork *this, DirectUserMsgBody_NpcDialogResponse *pkBody);
void __thiscall GameFrameWork::DirectMessage(GameFrameWork *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
NiRTTI *__thiscall NiIntegerExtraData::GetRTTI(NiIntegerExtraData *this);
MobViewInfo *__cdecl IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
ActionViewInfo *__cdecl IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
void __thiscall NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>(NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *> *this);
void *__thiscall NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vector_deleting_destructor_(NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *> *this, unsigned int);
void __thiscall Name4::Name4(Name4 *this, const char *str);
void __thiscall MiniHouseIndoor::SetBuildingRoomInfo(MiniHouseIndoor *this, PROTO_NC_MINIHOUSE_BUILDING_REQ k);
void __thiscall KeyboardMoveProcess::Clear(KeyboardMoveProcess *this);
Name5 *__thiscall Party::GetJoinProposeCharID(Party *this, Name5 *result);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *this);
void __thiscall NiTPointerList<unsigned_int>::_NiTPointerList<unsigned_int>(NiTPointerList<unsigned int> *this);
void __thiscall NiTListBase<DFALL<PgWin__>_PgWin__>::_NiTListBase<DFALL<PgWin__>_PgWin__>(NiTListBase<DFALL<PgWin *>,PgWin *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vector_deleting_destructor_(NiTPointerList<unsigned int> *this, unsigned int);
void *__thiscall NiTListBase<DFALL<PgWin__>_PgWin__>::_vector_deleting_destructor_(NiTListBase<DFALL<PgWin *>,PgWin *> *this, unsigned int);
void __thiscall MHDiceRewardMoneyWin::SetAmout(MHDiceRewardMoneyWin *this, unsigned __int64 money);
void __thiscall AnnounceWin::KillNoticing(AnnounceWin *this);
void __thiscall NiTPointerListBase<DFALL<PgWin__>_PgWin__>::NiTPointerListBase<DFALL<PgWin__>_PgWin__>(NiTPointerListBase<DFALL<PgWin *>,PgWin *> *this);
void *__thiscall NiIntegerExtraData::_scalar_deleting_destructor_(NiIntegerExtraData *this, unsigned int);
unsigned int __cdecl ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::GetTotal();
unsigned int __cdecl ITableBase<ActionEffectItem_ActionEffectItemTab>::GetTotal();
NiNode *__thiscall ResElement::GetNiNode(ResElement *this);
void __thiscall mhSettingWin::SetPassWord(mhSettingWin *this, char *pcPassWord);
int __thiscall mhJoinWin::GetMaxPerson(mhJoinWin *this);
void __thiscall mhJoinWin::SetMaxPerson(mhJoinWin *this, int PersonCount);
void __thiscall mhJoinWin::CheckEnable(mhJoinWin *this, mhJoinWin::CheckBoxIndex eIndex, bool b);
void __thiscall PgTList<unsigned_int>::_PgTList<unsigned_int>(PgTList<unsigned int> *this);
void *__thiscall PgTList<unsigned_int>::_vector_deleting_destructor_(PgTList<unsigned int> *this, unsigned int);
ActionViewInfo *__cdecl ActionViewTable::GetByEventCode(unsigned int nEventCode);
ItemActionEffectDesc *__cdecl ItemActionEffectDescTab::GetByItemActionID(unsigned int uiIndex);
ActionEffectItem *__cdecl ActionEffectItemTab::GetByItemID(unsigned int uiIndex);
void __cdecl BasicInfoLinkTab::GetSkipList(PgTList<unsigned int> *pkSkipList);
CollectCard *__cdecl CollectCardTab::GetByCardID(unsigned int uiCardID);
CollectCardTitle *__cdecl CollectCardTitleTab::GetByItemInx(const char *pcItemInx);
MinimonInfo *__cdecl MinimonInfoTable::GetMinimonInfoByIDX(char *pcItemIDX);
void __thiscall NiTList<PgWin__>::_NiTList<PgWin__>(NiTList<PgWin *> *this);
void *__thiscall NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vector_deleting_destructor_(NiTList<PgWin *> *this, unsigned int);
void __thiscall NiTList<ScriptBtn__>::_NiTList<ScriptBtn__>(NiTList<ScriptBtn *> *this);
void *__thiscall NiTPointerListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<ScriptBtn *>,ScriptBtn *> *this, unsigned int);
D3DXCOLOR *__cdecl ColorInfoTable::GetDxColor(D3DXCOLOR *result, ColorID eColorID);
MiniHouseObjAni *__cdecl MiniHouseObjAniInfoTab::GetObjInfobyhnd(unsigned __int16 handle);
char *__thiscall mhInfoWin::GetTitle(mhInfoWin *this);
void __thiscall mhSettingWin::Refresh(mhSettingWin *this, char *pcTitle, char *pcPassWord, int PersonCount, bool bItemView, char *pcNotice);
void __thiscall mhJoinWin::SetPassWord(mhJoinWin *this, char *pcPassWord);
ChargedItemEffect *__cdecl ChargedEffectTable::GetByHandle(unsigned __int16 wHandle);
void __thiscall mhInfoWin::ClearInfo(mhInfoWin *this);
bool __thiscall ITask::OnProcessNetMsg(ITask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
bool __cdecl std::operator__<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
void *__thiscall GuildJoinReqTask::_vector_deleting_destructor_(GuildJoinReqTask *this, unsigned int);
CollectWin::sRewardInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>>_CollectWin::sRewardInfo___std::allocator<CollectWin::sRewardInfo>>(std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > _Last, CollectWin::sRewardInfo *_Dest, std::allocator<CollectWin::sRewardInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall mhPortalListWin::Clear(mhPortalListWin *this);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > _Where, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Node);
void __thiscall GuildJoinReqTask::DirectMessage(GuildJoinReqTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildJoinReqTask::OnStart(GuildJoinReqTask *this);
bool __thiscall GuildJoinReqTask::OnProcessNetMsg(GuildJoinReqTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
GuildJoinReqTask *__cdecl ISingletonTask<GuildJoinReqTask>::Run();
void __thiscall ScriptBtn::ScriptBtn(ScriptBtn *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText, bool bAutoScale, NiExtraData *pkType, NiExtraData *pkAction, NiExtraData *pkNextAction);
void __thiscall std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>(std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > *this, std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > *_Right);
int *__thiscall std::map<int_mhObject___std::less<int>_std::allocator<std::pair<int_const_mhObject__>>>::operator__(std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *this, const int *_Keyval);
void __thiscall mhInfoWin::SetTitle(mhInfoWin *this, char *pcStr, bool bPageUpdate);
// int __usercall mktime_0<eax>(tm *_Tm<eax>);
void __thiscall GameFrameWork::RemoveItemFromString(GameFrameWork *this, char *s, const char *toRemove);
int __thiscall GameFrameWork::On_NC_BOOTH_BUYREFRESH_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_INTERIORSTART_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_CLOSE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CT_SET_SOMEONECHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_PINGTEST_CLIENT_ZONE_DB(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_MISC_RESTMINUTE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CENCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_BASEPARAMCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CHANGEPARAMCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_FAMECHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_ITEMONFIELD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_DROPEDITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_BUILDING_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MINIHOUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MINIHOUSEBUILD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EFFECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MAGICFIELDINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEWALK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONERUN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_MOVEFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONESTOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_CREATECASTBAR(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_CANCELCASTBAR(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_WHISPERSUCCESS_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEEONEJUMP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONESPEEDCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEFOLDTENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEPITCHTENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_FOLDTENT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_FOLDTENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_MOVESPEED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_RIDE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_STOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_EXPGAIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_HPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_APCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_ASSIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_TARGETCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_CAST_SUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_CAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_CASTCUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_OBJ_CAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_FLD_CAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_CASTABORT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_FAMEGAIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_PICKOTHER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_LOGININFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_LOGOUTINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERCLASS_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERLOCATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERMAPOUT(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_LIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_DELETE_YOUR_MSG_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENWEAPON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENSKILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENTABLE_WEAPON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENTABLE_SKILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENSOULSTONE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SERVERMENU_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_OPENSTORAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_COOLTIME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITUPBOARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITDOWNBOARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_CENBOARDING_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITCENBOARDING_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_BOARDLOCK_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITBOARDLOCK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_DECIDE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITDECIDE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_BOARDUNLOCK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITBOARDUNLOCK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_ADD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_MAP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_PARTY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_LEVEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_POINT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_STATUS_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_LIST_TIME_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_LIST_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_LIST_DELETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_LIST_UPDATE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_SCHEDULE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_NOTIFY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_RESTDEADNUM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_ENTRYRESPONCE_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_WT_MOBINC_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_ANIMATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_MESSAGENPC_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_LIGHT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_PLAYERLIKEMOB_ANIMATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_CHATWIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_CLIENT_SCENARIO_DONE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_NOTIFY_MOB_KILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_SELECT_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PRISON_END_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_INITMSG_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcEventFriendHideMsgCmd(GameFrameWork *this, bool bHide);
void __thiscall GameFrameWork::NcEventFriendRequestReq(GameFrameWork *this, const char *charID);
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_REQUEST_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_REQUESTED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_NPCVIEW_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_REWARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_EVENT_WORLDCUP_ENTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_ACTIV_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARGED_BUFFTERMINATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARGED_DELETEWEAPONTITLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARGED_SKILLEMPOW_INITIALIZE_SUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARGED_STAT_INITIALIZE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARGED_SKILLEMPOW_INITIALIZE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARGED_BOOTHSLOTSIZE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_ROAR_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_REARRANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_REARRANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CREATE_FURNITURE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_DELETE_FURNITURE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FUNITUREINFOCOMPLETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FUNICHERINVEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_VISIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_COMPULSIONMOVETO_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_PASSWORD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_TITLE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_MAXENTERNUM_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_OWNERBLOG_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_OWNERBLOG_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CHAR_ACTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CHAR_ACTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_NOTIFY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_ADD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_DEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_DEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_OPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_CLOSE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_CLOSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_EFFECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SendMHPortalDelReq(GameFrameWork *this, unsigned __int16 ID);
void __thiscall GameFrameWork::SendMHPortalCloseReq(GameFrameWork *this);
void __thiscall GameFrameWork::SendMHPortalUseReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_ENDURE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::OnSendNCItemDisMantleReq(GameFrameWork *this, char byItemPos);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LEVEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_REWARDINVENOPENFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_TOWNPORTAL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcGuildRetypeReq(GameFrameWork *this, int nType, int nCharInvenItem);
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_DEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_ACTIONBYITEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::ON_NC_KQ_MOBKILLNUMBER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::ON_NC_KQ_JOINING_ALARM_END_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::ON_NC_KQ_JOINING_ALARM_LIST(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SUMEONESKILLCUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SETITEMHEALEFFECT(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_AUTO_PICK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_ERR(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_LOGININFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_LOGOUTINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_LOOTING_TYPE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_ANSWER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_MAPOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_LEAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_VANISH_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_MEMBERINFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_LOCATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SLOT_MOVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SET_LEADER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SET_LEADER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SET_SUB_LEADER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SET_SUB_LEADER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SET_LOOTER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_REQ(GameFrameWork *this, unsigned __int16 FurnitureID, char ActPos, char ActNum);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_REVIVEITEMUSEFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_SOMEONEREVAVALTOME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_REPLYREVIVEFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_MULTY_LINK_SELECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcMistSetChatBlockSpamFilterCmd(GameFrameWork *this, char bySpamMsgShow, char bySpamBlockOn, unsigned __int16 wSpamFilterRate);
int __thiscall GameFrameWork::On_NC_SKILL_ITEMACTIONCOOLTIME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_READ_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_QUEST_READ_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_QUEST_REPEAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SaveAllKeyOpt(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_SET_GAMEOPTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_INIT_KEYMAP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_SET_KEYMAP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_SET_SHORTCUTDATA_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARSAVE_UI_STATE_SAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_ADMIN_LEVEL_INFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_SPAMMER_REPORT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcActAutoWayFindingUseGateReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcCharNewbieGuideViewSetCmd(GameFrameWork *this, const char nGuideView);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_BOOKMARK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_REWARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_COLLECT_PEEPING_COLLECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_COLLECT_PEEPING_COLLECT_BOOKMARK_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_TOGGLESKILL_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CHANGEBYCONDITION_PARAM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_JUMP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_LIST_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_CHANGE_DAY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHER_EVENT_ATTENDANCE_CHANGE_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_TIMER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_ANIMATION_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_ANIMATION_STOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_MAPMARK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_REGENMOVER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MOVER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_ON_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_OFF_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_FEEDING_ERROR_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_MOVESPEED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_REGENPET_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_PET_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PET_USE_ITEM_FAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcPetAskNewNameAck(GameFrameWork *this, unsigned __int16 kError, unsigned __int16 kPetHandle);
void __thiscall GameFrameWork::NcPetSetNameCancelReq(GameFrameWork *this, unsigned __int16 kPetHandle);
int __thiscall GameFrameWork::On_NC_SCENARIO_RANKING_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_TIMER_END_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_OBJECT_SOUND_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcMiscItemShopUrlReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_KQ_JOIN_LIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SetJoinHandle(GameFrameWork *this, unsigned int kHandle);
int __thiscall GameFrameWork::On_NC_MAP_FIELD_ATTRIBUTE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_DIALOG_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_MOVER_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_LEVEL_SELECT_MENU_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_LPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_EFFECT_MESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_SCORE_INFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_EFFECT_TIMER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_TEAM_SELECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_DEL_DIRECTIONAL_ARROW_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_CAN_USE_REVIVEITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_INDUN_LEVEL_VIEW_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_RANDOMOPTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_RANDOMOPTION_CHANGE_ACCEPT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_CHAT_COLOR_CHANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_TERMEXTEND_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_INFO_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NORMAL_ITEM_OFF_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_CHARGED_ITEM_OFF_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_USE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NOTICE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ITEM_INSERT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ITEM_DELETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_OPENCLASSCHANGEMENU_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SERVERMENU_CLOSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_MAPLINK_SCROLL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_MIX_ITEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_NEW_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_BRACELET_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_INDUNRANK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_RESULT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_LIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_ANI_FILE_CHECK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::AddNetMsgToWorldMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command);
void __thiscall GameFrameWork::SendNetMsgWorldMgr(GameFrameWork *this, void *pProto, int nDataLength);
void __thiscall GameFrameWork::SendNetMsgWorldMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength);
void __thiscall GameFrameWork::AddNetMsgToZoneMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command);
void __thiscall GameFrameWork::SendNetMsgZoneMgr(GameFrameWork *this, void *pProto, int nDataLength);
void __thiscall GameFrameWork::SendNetMsgZoneMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength);
void __thiscall GameFrameWork::Send_NC_MISC_PINGTEST_CLIENT_ZONE_DB(GameFrameWork *this);
void __thiscall GameFrameWork::NcCharReviveCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcActWalkReq(GameFrameWork *this, NiPoint3 *kFrom, NiPoint3 *kTo);
void __thiscall GameFrameWork::NcActRunReq(GameFrameWork *this, NiPoint3 *kFrom, NiPoint3 *kTo);
void __thiscall GameFrameWork::NcActChangeModeReq(GameFrameWork *this, char byMode);
void __thiscall GameFrameWork::NcActNPCClickCmd(GameFrameWork *this, unsigned __int16 kHandle);
void __thiscall GameFrameWork::NcActEndOfTrade(GameFrameWork *this);
void __thiscall GameFrameWork::NcActStopReq(GameFrameWork *this, NiPoint3 *kPos);
void __thiscall GameFrameWork::NcActNoticeCmd(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::NcActJumpCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcActNpcmenuopenAck(GameFrameWork *this, char bySelect);
void __thiscall GameFrameWork::NcActFoldTentCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcActPitchtentCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcActEmoticon_Cmd(GameFrameWork *this, char kID);
void __thiscall GameFrameWork::NcActEmoticonStopCmd(GameFrameWork *this, char kID, unsigned int uiFrame);
void __thiscall GameFrameWork::NcCharPromoteReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcBatTargettingReq(GameFrameWork *this, unsigned __int16 kHandle);
void __thiscall GameFrameWork::NcBatBashstartCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcBatBashstopCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcBatSkillbashCastabortReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcBriefInfoCmd(GameFrameWork *this, unsigned __int16 kHandle, int iDepart, int iCommand);
void __thiscall GameFrameWork::NcBatAssistReq(GameFrameWork *this, Char *pChar);
void __thiscall GameFrameWork::NcItemBuyReq(GameFrameWork *this, unsigned __int16 kItemID, unsigned int dwLot);
void __thiscall GameFrameWork::NcItemSellReq(GameFrameWork *this, char bySlot, unsigned int dwLot);
void __thiscall GameFrameWork::NcItemRelocReq(GameFrameWork *this, ITEM_INVEN *kFrom, ITEM_INVEN *kTo);
void __thiscall GameFrameWork::NcItemDropReq(GameFrameWork *this, ITEM_INVEN *kFrom, unsigned int dwLot, float fXPos, float fYPos);
void __thiscall GameFrameWork::NcItemPickReq(GameFrameWork *this, unsigned __int16 kItemHandle);
void __thiscall GameFrameWork::NcItemRingEquipReq(GameFrameWork *this, const char bySlot, const char byEquipSlot);
void __thiscall GameFrameWork::NcItemMiniMonEquipReq(GameFrameWork *this, const char bySlot, const char byEquipSlot);
void __thiscall GameFrameWork::NcItemUseReq(GameFrameWork *this, const char bySlot);
void __thiscall GameFrameWork::NcItemUpgradeReq(GameFrameWork *this, char equipSlot, char rawSlot, char raw_left, char raw_right, char raw_middle, unsigned int gift_money);
void __thiscall GameFrameWork::NcItemOpenStoragePageReq(GameFrameWork *this, char byTargePage);
void __thiscall GameFrameWork::NcPartyJoinProposeRejectAck(GameFrameWork *this, Name5 kCharID);
void __thiscall GameFrameWork::NcPartyJoinProposeTimeOutAck(GameFrameWork *this, Name5 kCharID);
void __thiscall GameFrameWork::NcPartyMemberinforeqCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcPartyItemLootingSet(GameFrameWork *this, LOOTING_TYPE eType, char eLootType);
void __thiscall GameFrameWork::NcPartyFinderListReq(GameFrameWork *this, unsigned __int16 wPageNum, unsigned __int16 wMaxItemPerPage);
void __thiscall GameFrameWork::NcPartyFinderAddCommentReq(GameFrameWork *this, char *pchText);
void __thiscall GameFrameWork::NcPartyFinderDelCommentReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcMenuServerMenuAck(GameFrameWork *this, const char ucReply);
void __thiscall GameFrameWork::NcTradeProposeAskNoAck(GameFrameWork *this);
void __thiscall GameFrameWork::NcTradeProposeyesAck(GameFrameWork *this);
void __thiscall GameFrameWork::NcTradeProposeCancelCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcTradeUpboardReq(GameFrameWork *this, const char bySlot);
void __thiscall GameFrameWork::NcTradeDownboardReq(GameFrameWork *this, const char bySlot);
void __thiscall GameFrameWork::NcTradeCenboardingReq(GameFrameWork *this, const unsigned __int64 qwCen);
void __thiscall GameFrameWork::NcTradeBoardlockReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcTradeDecideReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcTradeCancelReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcSoulStoneHPBuyReq(GameFrameWork *this, unsigned __int16 wNumber);
void __thiscall GameFrameWork::NcSoulStoneSPBuyReq(GameFrameWork *this, unsigned __int16 wNumber);
void __thiscall GameFrameWork::NcSoulStoneHPUseReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcSoulStoneSPUseReq(GameFrameWork *this);
void __cdecl EmpowerAlloc(unsigned __int16 kID, Skill::EmpowerInfo kEmpowerInfo);
void __thiscall GameFrameWork::NcSkillEmpowallocReq(GameFrameWork *this, PROTO_NC_SKILL_EMPOWALLOC_REQ *rkReq);
void __thiscall GameFrameWork::NcSkillEmpowResetReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcFriendFindReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcFriendPointReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcItemSplitReq(GameFrameWork *this, ITEM_INVEN *kFrom, ITEM_INVEN *kTo, unsigned int uiVal);
void __thiscall GameFrameWork::NcBoothCloseReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcBoothInterioStartReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcBoothEntryReq(GameFrameWork *this, unsigned __int16 sHandle);
void __thiscall GameFrameWork::NcBoothItemTradeReq(GameFrameWork *this, unsigned __int16 booth, char boothslot, unsigned __int16 itemnum);
int __thiscall GameFrameWork::On_NC_BOOTH_SOMEONEOPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_SOMEONECLOSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcBoothReflashReq(GameFrameWork *this, unsigned __int16 booth);
void __thiscall GameFrameWork::NcBoothSearchItemListCategorized(GameFrameWork *this, unsigned int kCategoryType, bool bOnlyMyClass, bool bFirst);
void __thiscall GameFrameWork::NcBoothSearchBoothPosition(GameFrameWork *this, unsigned int BoothItemHandle, unsigned __int16 TargetCharHandle);
void __thiscall GameFrameWork::NcCharTitleSetReq(GameFrameWork *this, unsigned int dwData);
void __thiscall GameFrameWork::NcKqStatusReq(GameFrameWork *this, unsigned int Handle);
void __thiscall GameFrameWork::NcKqListRefreshReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcKqJoinReq(GameFrameWork *this, unsigned int Handle);
void __thiscall GameFrameWork::NcKqJoinCancelReq(GameFrameWork *this, unsigned int Handle);
void __thiscall GameFrameWork::NcUserPacketToWorld(GameFrameWork *this, DirectUserMsgBody_SendPacket *pkPacketBody);
int __thiscall GameFrameWork::On_NC_MISC_PINGTEST_TOOL_WM_CLIENT_ZONE_DB(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcMiscWebKeyReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_MISC_WEB_KEY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_USER_CONNECTCUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_USER_LOGINWORLD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_STAT_REMAINPOINT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_SOMEONEGUILDCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_SOMEONEGUILDACADEMYCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_LINKSAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_FREEPKZONE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_PARTYBATTLEZONE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_KQTEAMBATTLEZONE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_KQTEAMBATTLEZONE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_LOGINCHARACTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHARACTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHANGEDECORATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHANGEUPGRADE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHANGEWEAPON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_UNEQUIP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_BUILDDOOR_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_DOOR_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONECHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONESHOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEMOVEWALK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEMOVERUN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONECHANGEMODE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::AddWhisperList(GameFrameWork *this, Name5 shinCharID);
int __thiscall GameFrameWork::On_NC_ACT_PARTYCHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_GUILD_CHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_GUILD_ACADEMY_CHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_NPCMENUOPEN_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEEMOTICON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEEMOTICONSTOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONERIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_RIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONERIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_TARGETINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONELEVELUP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_BLAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_CEASE_FIRE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SWING_DAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESWING_DAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::ON_NC_BAT_REALLYKILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_PKINPKFIELD_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_JOINPROPOSE_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_MEMBER_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERINFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_DELETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENTABLE_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_REVIVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_SOMEONEREVIVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_DOWNBOARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::CleanUpTrade(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_SOULSTONE_HP_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SOULSTONE_SP_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_Nc_Kq_Complete_Cmd(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_Nc_Kq_Fail_Cmd(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_SCORE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_SCORE_SIMPLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_RUNEFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_DOORSTATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_OBJTYPECHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_FOG_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_ANIMATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcReportGetReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcReportCancelReq(GameFrameWork *this, int iRegNum);
void __thiscall GameFrameWork::NcPrisonEndReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcMiniHouseActivReq(GameFrameWork *this, const char bySlot);
int __thiscall GameFrameWork::On_NC_CHARGED_STAT_INITIALIZE_SUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::On_NC_ACT_ROAR_REQ(GameFrameWork *this);
void __thiscall GameFrameWork::On_NC_MAP_WING_SAVE_REQ(GameFrameWork *this);
void __thiscall GameFrameWork::On_NC_MAP_WING_FLY_REQ(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_EXIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CREATE_FURNITURE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_DELETE_FURNITURE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_LOGOUTCOMPLETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_LOGINCOMPLETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_VISITREADY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_COMPULSIONMOVETO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_ITEM_INFO_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SendMHPortalOpenReq(GameFrameWork *this, unsigned __int16 ID);
int __thiscall GameFrameWork::On_NC_ONGAMENET_OX_EVENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LOGOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_WARP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcChatRestrictDelAll(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_DEL_ALL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcHolyPromiseWithDrawCenRewardReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcBatAbastateEraseReq(GameFrameWork *this, unsigned __int16 id);
int __thiscall GameFrameWork::On_NC_BAT_SOULCOLLECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_REINFORCERELOC_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_REINFORCEMOVEBYPATH_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_SERVER_TIME_NOTIFY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_USER_WILL_WORLD_SELECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidMakeReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_RAID_MEMBER_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidLootingTypeReq(GameFrameWork *this, char nItemGrade, char nLootingType);
void __thiscall GameFrameWork::NcRaidLeaveReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_RAID_MEMBERCLASS_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SLOT_MOVE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_SET_LOOTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_CHAT_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_REQ(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::On_NC_ITEM_REVIVEITEMUSE_CMD(GameFrameWork *this);
void __thiscall GameFrameWork::On_NC_SKILL_REPLYREVIVE_CMD(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_ABSTATE_CHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_ABSTATE_CHANGE_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_SET_LOOTER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_ITEM_JOIN_LOOTING_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_MULTY_LINK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_GET_CHAT_BLOCK_SPAM_FILTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcItemEnchantAddNewSocketReq(GameFrameWork *this, ITEM_INVEN kDrill, ITEM_INVEN kWeapon);
void __thiscall GameFrameWork::NcQuestStartReq(GameFrameWork *this, unsigned __int16 nQuestID);
void __thiscall GameFrameWork::NcQuestReadReq(GameFrameWork *this, unsigned __int16 nQuestID);
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_INIT_GAMEOPTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcCharSaveUIStateSaveReq(GameFrameWork *this, bool bOn);
int __thiscall GameFrameWork::On_NC_ACT_NPC_ACTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcCollectCardregistReq(GameFrameWork *this, unsigned int uiSlot);
void __thiscall GameFrameWork::NcCollectBookmarkRegistReq(GameFrameWork *this, unsigned int uiSlot, unsigned int uiCardID);
void __thiscall GameFrameWork::NcCollectRewardReq(GameFrameWork *this, unsigned int uiRewardID, unsigned __int16 kItemID);
int __thiscall GameFrameWork::On_NC_BAT_TOGGLESKILL_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBLAST_LIGHTNINGWAVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcCharEventAttendRewardReq(GameFrameWork *this, int iWeekIndex, int iIndex);
void __thiscall GameFrameWork::NcCharRebirthCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcCharRebirthRejectCmd(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_SCENARIO_CAMERA_MOVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcActNpcMenuCmd(GameFrameWork *this, int iIndex);
int __thiscall GameFrameWork::On_NC_MOVER_SOMEONE_RIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_SOMEONE_RIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcMoverRideOnReq(GameFrameWork *this, unsigned __int16 kHandle, unsigned int uiSlot);
void __thiscall GameFrameWork::NcMoverRideOffReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_PET_SET_NAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_TIMER_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_EVENT_CODE_ACTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_RESET_TIME_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_VOTING_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcKqVoteVotingReq(GameFrameWork *this, KQ_VOTING_TYPE eVoteType);
void __thiscall GameFrameWork::NcKqJoinListReq(GameFrameWork *this, unsigned int kHandle);
void __thiscall GameFrameWork::NcKqVoteStartCheckReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_SCENARIO_MAP_OBJECT_CONTROL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_ANIMATION_LEVEL_CHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_USE_ACTIVESKILL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcItemUseActiveskillReq(GameFrameWork *this, unsigned int uiInvenSlot, unsigned __int16 kTargetHandle);
void __thiscall GameFrameWork::NcItemUseActiveskillReq(GameFrameWork *this, unsigned int uiInvenSlot, unsigned int x, unsigned int y);
void __thiscall GameFrameWork::NcMoverUpgradeReq(GameFrameWork *this, unsigned int uiMainInvenSlot, unsigned int uiSubInvenSlot);
void __thiscall GameFrameWork::NcInstanceDungeonLevelSelectMenuAck(GameFrameWork *this, unsigned __int16 kNPCHandle, ID_LEVEL_TYPE eLevelType);
int __thiscall GameFrameWork::On_NC_ACT_END_CINEMATIC(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_TUTORIAL_STEP_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcCharTutorialStepAck(GameFrameWork *this, unsigned int uiTutorialStep);
int __thiscall GameFrameWork::On_NC_SCENARIO_TOPVIEW_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_HIDE_OTHER_PLAYER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcKqTeamSelectReq(GameFrameWork *this, char nTeamType);
int __thiscall GameFrameWork::On_NC_KQ_TEAM_TYPE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcItemRandomOptionChangeReq(GameFrameWork *this, int kItemSlotNo, int kStuffSlotNo);
void __thiscall GameFrameWork::NcItemChatColorChangeReq(GameFrameWork *this, int iColorSlot);
void __thiscall GameFrameWork::NcTermExtendReq(GameFrameWork *this, unsigned int uiExtebdItemSlot, unsigned int uiTermItemSlot);
void __thiscall GameFrameWork::NcCharBuffItemAutoUseOnReq(GameFrameWork *this, unsigned __int16 *pkItemID);
void __thiscall GameFrameWork::NcCharBuffItemAutoUseOffReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcCharChargedItemAutoUseOnReq(GameFrameWork *this, unsigned __int16 *pkItemID);
void __thiscall GameFrameWork::NcCharChargedItemAutoUseOffReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcCharChargedbuffEraseReq(GameFrameWork *this, unsigned int nChargedBuffKey);
int __thiscall GameFrameWork::On_NC_CHAR_CHARGEDBUFF_ERASE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcItemRepurchaseReq(GameFrameWork *this, unsigned __int16 nHaldle);
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ITEM_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcGuildEmblemSaveReq(GameFrameWork *this, GUILD_EMBLEM_INFO pEmblemInfo);
void __thiscall GameFrameWork::NcGuildEmblemCheckAvailabilityReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcItemMaplinkScrollReq(GameFrameWork *this, WM_Link targetMap);
void __thiscall GameFrameWork::NcItemMixItemReq(GameFrameWork *this, unsigned int uiLefeItemInvSlot, unsigned int uiRightItemInvSlot, unsigned int uiAddItemInvSlot);
void __thiscall GameFrameWork::NcItemRandomOptRecoverCountLimitReq(GameFrameWork *this, int _kItemSlotIdx, unsigned int _uiRecoverCnt);
int __thiscall GameFrameWork::On_NC_ITEM_RANDOMOPTION_RECOVER_COUNT_LIMIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcItemNewUpGradeReq(GameFrameWork *this, char equipSlot, char rawSlot);
void __thiscall GameFrameWork::NcItemBraceletUpgradeReq(GameFrameWork *this, char equipSlot, char rawSlot);
void __thiscall GameFrameWork::NcInstanceDungeonRankListReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcMapLoginCompleteCmd(GameFrameWork *this);
void __thiscall GameFrameWork::NcBatSkillbashObjCastReq(GameFrameWork *this, unsigned __int16 kSkillID, unsigned __int16 kHandle);
void __thiscall GameFrameWork::NcBatSkillbashFldCastReq(GameFrameWork *this, unsigned __int16 kSkillID, unsigned int x, unsigned int y);
void __thiscall GameFrameWork::NcItemEquipReq(GameFrameWork *this, const char bySlot);
void __thiscall GameFrameWork::NcItemUnequipReq(GameFrameWork *this, const char bySlotequip, const char bySlotinven);
void __thiscall GameFrameWork::NcPartyJoinReq(GameFrameWork *this, char *pcCharName);
void __thiscall GameFrameWork::NcPartyJoinProposeAllowAck(GameFrameWork *this, Name5 kCharID);
void __thiscall GameFrameWork::NcPartyLeaveReq(GameFrameWork *this);
void __thiscall GameFrameWork::NcPartyKickOffReq(GameFrameWork *this, char *pcCharName);
void __thiscall GameFrameWork::NcPartyChangeMasterReq(GameFrameWork *this, char *pcCharName);
void __thiscall GameFrameWork::NcTradeProposeReq(GameFrameWork *this, unsigned __int16 kHandle);
void __thiscall GameFrameWork::NcFriendSetReq(GameFrameWork *this, Name5 kCharID);
void __thiscall GameFrameWork::NcFriendSetConfirmAck(GameFrameWork *this, Name5 charid, bool bAccept_Friend);
void __thiscall GameFrameWork::NcFriendDelReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_ITEM_SPLIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcBoothOpenReq(GameFrameWork *this, bool bIsSell);
int __thiscall GameFrameWork::On_NC_BOOTH_ITEMTRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_SOMEONEINTERIORSTART_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_ENTRY_SELL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_ENTRY_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_REFRESH_SELL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_REFRESH_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_SEARCH_BOOTH_CLOSED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CT_SET_CURRENT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CT_SET_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcUserPacketToZone(GameFrameWork *this, DirectUserMsgBody_SendPacket *pkPacketBody);
int __thiscall GameFrameWork::On_NC_CHAR_DEADMENU_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_REVIVESAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_REGENMOB_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MOB_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEWHISPER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_WHISPERFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_PARTYCHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_GUILD_CHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_GUILD_ACADEMY_CHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_PITCHTENT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_RIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_RIDE_HUNGRY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_RUN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_WALK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_LEVELUP_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_EXPLOST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_CAST_FAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_CELLCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_EQUIPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_ITEMBREAK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_RELOC_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_DROP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_PICK_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_SOMEONEPICK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_EQUIP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_UNEQUIP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_DEPOSIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_WITHDRAW_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_CHARGEDINVENOPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_JOIN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_LEAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_KICKOFF_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_DISMISS_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_CHANGEMASTER_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_ITEM_LOOTING_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MENU_OPENSTORAGE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_SKILL_LEARNSUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_SKILL_LEARNFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_UNLEARN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_EMPOW_RESET_SUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_EMPOWALLOC_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_EMPOW_RESET_FAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_EMPOWPOINT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SKILL_PRODUCTFIELD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_PROPOSE_ASK_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_PROPOSENO_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_PROPOSE_CANCELED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_CANCEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_UPBOARDFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_UPBOARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_DOWNBOARDFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_CENBOARDINGFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_BOARDLOCKFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_DECIDEFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_TRADECOMPLETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_TRADE_TRADEFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SOULSTONE_BUYFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SOULSTONE_HP_USESUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SOULSTONE_SP_USESUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SOULSTONE_USEFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SOULSTONE_HP_SOMEONEUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SOULSTONE_SP_SOMEONEUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_SET_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_SET_CONFIRM_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_DEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_LOGIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_LOGOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_REFUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_DEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_FIND_FRIENDS_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_UES_FRIEND_POINT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_GET_DIFF_FRIEND_POINT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_JOIN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_JOIN_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_SCORE_BOARD_INFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_WINTER_EVENT_2014_SCORE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_WT_LICENSE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_WT_GRADE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_MESSAGENOTICE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_REWARD_NEED_SELECT_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcReportAddReq(GameFrameWork *this, Name5 sHarmer, char *cReportType, char *cReason);
int __thiscall GameFrameWork::On_NC_REPORT_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_REPORT_GET_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_REPORT_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcPrisonAddGMReq(GameFrameWork *this, Name5 sImprison, unsigned __int16 nMinute, char *sReason, char *sRemark);
int __thiscall GameFrameWork::On_NC_PRISON_ADD_GM_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PRISON_OK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PRISON_UNDOING_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcPrisonAlterGMReq(GameFrameWork *this, Name5 sImprison, unsigned __int16 nMinute, char *sReason, char *sRemark);
int __thiscall GameFrameWork::On_NC_PRISON_ALTER_GM_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_WING_SAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_WING_FLY_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FUNICHER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_ARRANGEMODE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SendMHVisitReq(GameFrameWork *this, unsigned __int16 mh_hnd, char *PassWord);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_MAXENTERNUM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_NOTIFY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_ITEM_INFO_OPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_MH_FURNITURE_ENDURE_KIT_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_GUILD_STORAGEOPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_EVENT_L20_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_SOMEONEUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_DISMANTLE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_DEL_DOWN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_DEL_UP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_CONFIRM_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_DEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_ADD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LOGIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_REWARD_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_REWARD_MONEY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_CONFIRM_ING(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_REWARDINVENOPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PROMOTION_REWARD_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcChatRestrictAddReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcChatRestrictBlockDelReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::ON_NC_KQ_NOREWARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_GET_CEN_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_WITHDRAW_CEN_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_CLIENT_GET_REMAIN_MONEY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_ABSTATE_ERASE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_AUTO_PICK_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_MISCERROR_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_LINK_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_MAKE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_MAKE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_DISMISS_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_LOOTING_TYPE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidInvitationReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidInvitationAnswerReq(GameFrameWork *this, char bIsAllow);
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_ANSWER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_MEMBER_JOIN_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_LEAVE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidVanishReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_RAID_VANISH_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_VANISH_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidSlotMoveReq(GameFrameWork *this, int PreIndex, int PostIndex);
void __thiscall GameFrameWork::NcRaidSetLeaderReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_RAID_SET_LEADER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidSetSubLeaderReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_RAID_SET_SUB_LEADER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidDelSubLeaderReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidSetLooterReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_RAID_SET_LOOTER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_CHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_WARNING_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_WARNING_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_RESULT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcPartySetLooterReq(GameFrameWork *this, Name5 kCharID);
int __thiscall GameFrameWork::On_NC_PARTY_SET_LOOTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PARTY_SET_LOOTER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SendMapMultyLink(GameFrameWork *this, Name3 mapName);
int __thiscall GameFrameWork::On_NC_MISC_CHAT_BLOCK_SPAMER_BLOCKTIME_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_ITEM_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall loc_4B7C71(GameFrameWork *this, int iRevBytes, int pvData); // weak
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_ADD_GEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_REMOVE_GEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_ADD_NEW_SOCKET_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_SET_GEM_LOT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SendDefaultGameOpt(GameFrameWork *this);
void __thiscall GameFrameWork::SendDefaultKeyRemappingReq(GameFrameWork *this);
int __thiscall GameFrameWork::On_NC_CHAR_MYSTERYVAULT_UI_STATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcMiscSpammerReportReq(GameFrameWork *this, Name5 kID);
void __thiscall GameFrameWork::NcMiscSpammerChatBanReq(GameFrameWork *this, Name5 kID);
int __thiscall GameFrameWork::On_NC_MISC_SPAMMER_CHAT_BAN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_SPAMMER_RELEASE_CHAT_BAN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_AUTO_WAY_FINDING_USE_GATE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_COLLECT_CARDOPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_COLLECT_BOOKMARK_REGIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_COLLECT_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcCollectPeepingReq(GameFrameWork *this, Name5 *kCharID);
int __thiscall GameFrameWork::On_NC_ITEM_EQUIP_BELONGED_CANCEL_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_CHECK_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MOVER_HUNGRY_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PET_SET_NAME_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PET_SET_NAME_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcPetSetNameReq(GameFrameWork *this, unsigned __int16 kPetHandle, Name4 kPetName);
int __thiscall GameFrameWork::On_NC_ITEM_AUTO_ARRANGE_INVEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_ITEMSHOP_URL_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_VOTING_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_CANCEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_BAN_MSG_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_BAN_MSG_LOGOFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_START_CHECK_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_JOBDUNGEON_LINK_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_TEAM_SELECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_RANDOMOPTION_CHANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NORMAL_ITEM_ON_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_CHARGED_ITEM_ON_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_REPURCHASE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ITEM_CLASS_CHANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGEDEALT_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGETAKEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_HEALINGDONE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_MYRANK_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_NEW_RANK_MSG(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcInstanceDungeonRankTabDamagetakenReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo);
void __thiscall GameFrameWork::NcInstanceDungeonRankTabHealingdoneReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo);
void __thiscall GameFrameWork::NcInstanceDungeonRankTabMyRankReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo);
int __thiscall GameFrameWork::On_NC_MAP_LINKOTHER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_FREEPKZONE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_PARTYBATTLEZONE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_NOTICE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_ABSTATEINFORM_NOEFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_DOTDAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_CLIENT_MOB_KILL_ANNOUNCE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_FRIEND_SOMEONE_GET_SPECIALITEM_WORLD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_PROMOTE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_SOMEONEPROMOTE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHARGED_BUFFSTART_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_ARRANGEMODE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::ON_NC_KQ_JOINING_ALARM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_AREADOTDAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_REFLECTIONDAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_EVENTNPC_STANDSTART_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MISC_EVENTNPC_STANDEND_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_MESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_OBJECT_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_RESULT_SUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_KQ_VOTE_RESULT_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcKqVoteStartReq(GameFrameWork *this, Name5 kTargetID, unsigned int uiVoteType, std::basic_string<char,std::char_traits<char>,std::allocator<char> > kContents);
void __thiscall GameFrameWork::NcInstanceDungeonRankTabDamagedealtReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo);
int __thiscall GameFrameWork::On_NC_CHAR_REVIVEOTHER_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_OBJ_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_FLD_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_FLD_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_DAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_ABSTATESET_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_ABSTATEINFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_ABSTATERESET_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::SendKeyRemappingReq(GameFrameWork *this, std::list<int,std::allocator<int> > *lstChanged);
void __thiscall GameFrameWork::AttackedMsg::UpdateAttackedMsg(GameFrameWork::AttackedMsg *this);
int __thiscall GameFrameWork::On_NC_CHAR_POLYMORPH_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_OBJ_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_BASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_BASH_MISS_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONEBASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_BASH_MISSED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONEBASH_MISS_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SWING_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_OUTSIDE_TITLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::AddAttacked(GameFrameWork *this, unsigned __int16 kHandle);
bool __thiscall GameFrameWork::ItemNameIsCorrect(GameFrameWork *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem, char *pcChatMsg);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_BRIEFINFODELETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_BASH_HITTED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HITTED_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_NEWBIE_GUIDE_VIEW_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SHOW_CINEMATIC(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_PLAY_SOUND_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_SYSTEM_MESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::ON_NC_GUILD_MOBGUILD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_GIVE_UP_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_QUEST_SCRIPT_CMD_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcGuildRenameReq(GameFrameWork *this, const char *pkName, int nCharInvenItem);
void __thiscall GameFrameWork::NcItemEquipBelongedCancelUseReq(GameFrameWork *this, unsigned int TargetItemInvPos);
int __thiscall GameFrameWork::On_NC_SCENARIO_NPCCHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_PET_ASK_NEW_NAME_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MAP_LINKEND_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BOOTH_SEARCH_BOOTH_POSITION_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ANNOUNCE_W2C_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_PASSWORD_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_COLLECT_CARDREGIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_SCRIPTMESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_ACT_SCRIPT_MSG_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_DIRECTIONAL_ARROW_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcActChatReq(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::NcActShoutCmd(GameFrameWork *this, char *pcText);
void __thiscall GameFrameWork::NcActWhisperReq(GameFrameWork *this, Name5 kToChar, char *pcChat);
void __thiscall GameFrameWork::NcActPartyChatReq(GameFrameWork *this, char *pcChat);
void __thiscall GameFrameWork::NcGuildChatReq(GameFrameWork *this, char *pcChat);
void __thiscall GameFrameWork::NcGuildAcademyChatReq(GameFrameWork *this, char *pcChat);
int __thiscall GameFrameWork::On_NC_MAP_LOGOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_EFFECTBLAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_BRIEFINFO_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_BUILDING_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_LOGINCOMPLETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_TITLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData);
void __thiscall GameFrameWork::NcRaidChatReq(GameFrameWork *this, char *pcChat);
void __thiscall GameFrameWork::NcRaidWarningReq(GameFrameWork *this, char *pcChat);
int __thiscall GameFrameWork::On_NC_SCENARIO_AREAENTRY_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::On_NC_SCENARIO_AREALEAVE_REQ(GameFrameWork *this, int iRevBytes, void *pvData);
int __thiscall GameFrameWork::ProcessNetMsg(GameFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
FadeObjectMgr *__cdecl Singleton<FadeObjectMgr>::getInstance();
AbnormalStateInfo *__cdecl IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
AbnormalStateViewInfo *__cdecl IIDTableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
ActiveSkillViewInfo *__cdecl IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
int __thiscall Name5::operator__(Name5 *this, Name5 *nm);
void __cdecl STRING_TO_NAME(char *pcString, Name5 *kName5);
bool __cdecl CharClass::IsKindOf(char kClassID, char kBaseClassID);
NiPoint3 *__thiscall Char::GetDirToPosition(Char *this, NiPoint3 *result, NiPoint3 *rkPos);
ExpeditionPartyWin *__thiscall GameFrameWork::GetRaidPartyWin(GameFrameWork *this, unsigned int index);
void __thiscall NiPointer<NiNode>::NiPointer<NiNode>(NiPointer<NiNode> *this, NiPointer<NiNode> *ptr);
unsigned int __cdecl ITableBase<ActionEffectInfo_ActionEffectInfoTab>::GetTotal();
unsigned int __cdecl ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal();
unsigned int __cdecl ITableBase<SubAbStateInfo_SubAbStateInfoTab>::GetTotal();
std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Max(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Pnode);
char *__cdecl WeaponTitleTab::GetWeaponTitleStringByLevel(unsigned __int16 MobID, unsigned int level);
void __thiscall HolyRewardMoneyWin::SetAmout(HolyRewardMoneyWin *this, unsigned __int64 money);
bool __thiscall ChatBlockListWin::IsGM(ChatBlockListWin *this, Name5 kCharID);
void __thiscall NiActorManager::Reset(NiActorManager *this);
unsigned int __cdecl ITableBase<MobInfo_MobInfoTab>::GetTotal();
unsigned int __cdecl ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal();
unsigned int __cdecl ITableBase<RIDING_RidePetTable>::GetTotal();
unsigned int __cdecl ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::GetTotal();
unsigned int __cdecl ITableBase<DamageEffect_DamageEffectTab>::GetTotal();
NiPoint3 *__thiscall mhObject::GetPos(mhObject *this, NiPoint3 *result);
void __thiscall MiniHouseIndoor::SetMsgBox(MiniHouseIndoor *this, char *msg);
bool __thiscall GameFrameWork::sRideOffValue::IsMove(GameFrameWork::sRideOffValue *this);
Item *__thiscall Inventory::GetMHItemInv(Inventory *this, unsigned int uiInvType, unsigned int uiIndex);
void __thiscall Inventory::AddEquip(Inventory *this, Item *pkItem, unsigned int uiIndex);
void __thiscall Inventory::AddRewardInv(Inventory *this, Item *pkItem, unsigned int uiIndex);
Item *__thiscall Inventory::GetRewardInv(Inventory *this, unsigned int uiIndex);
NiPointer<NiNode> *__thiscall InventoryWin::GetRunArrangeButEff(InventoryWin *this, NiPointer<NiNode> *result);
NiPointer<NiNode> *__thiscall InventoryWin::GetRunArrangeInvenEff(InventoryWin *this, NiPointer<NiNode> *result);
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Lrotate(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Rrotate(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Wherenode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *this);
PassiveSkillInfo *__cdecl PasSkillInfoTab::GetByID(unsigned __int16 kID);
void __thiscall RidePetWin::SetMoverSpeed(RidePetWin *this, int nSpeed);
RIDING *__cdecl RidePetTable::GetByInxName(char *pcInxName);
MobKillAnnounceText *__cdecl MobKillAnnounceTextTab::GetByType(MobKillAnnounceType eType);
DamageEffect *__cdecl DamageEffectTab::GetByIndexName(char *pkInxName, unsigned int uiTarget);
CollectCard *__cdecl CollectCardTab::GetByItemInx(const char *pcItemInx);
CollectCardView *__cdecl CollectCardViewTab::GetByCardID(unsigned int uiCardID);
AbStateMsg *__cdecl AbStateMsgTable::GetAbStateMsgByIDX(char *pcAbStateIDX, AbStateMsgTimeEnum AMT);
ActionEffectInfo *__cdecl ActionEffectInfoTab::GetByID(unsigned __int16 ID);
AbnormalStateInfo *__cdecl AbnormalStateInfoTab::GetByAbstateIndex(unsigned __int16 dwAbstateIndex);
SubAbStateInfo *__cdecl SubAbStateInfoTab::GetByInxName(char *pcInxName);
char *__cdecl ScriptMsgTab::GetScriptMsg(const char *kIndex);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Insert(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Newnode);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result);
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Splice_same(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Where, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _First, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Last, unsigned int _Count);
std::_List_iterator<std::_List_val<float,std::allocator<float> > > *__thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::erase(std::list<float,std::allocator<float> > *this, std::_List_iterator<std::_List_val<float,std::allocator<float> > > *result, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _Where);
std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *__thiscall std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Buynode<SHINE_ITEM_STRUCT__>(std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *_Next, std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *_Prev, SHINE_ITEM_STRUCT *_Val);
CollectWin::sCardInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>>_CollectWin::sCardInfo___std::allocator<CollectWin::sCardInfo>>(std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > _Last, CollectWin::sCardInfo *_Dest, std::allocator<CollectWin::sCardInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *result, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Node, bool _Leftish);
std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, unsigned __int16 *_Val);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, unsigned int _Count, char _Ch);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::operator__(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, int __formal);
void *__thiscall ISingletonTask<ItemUseTask>::_vector_deleting_destructor_(ItemUseTask *this, unsigned int);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *_Node, bool _Leftish);
void __thiscall AttackSequence::AttackSequence(AttackSequence *this);
bool __thiscall EffectObjectMgr::RemoveAllEffectObject(EffectObjectMgr *this);
std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *this, std::pair<unsigned short const ,unsigned long> *_Val);
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Insert<std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Where, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _First, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Last);
void __thiscall CharMgr::AddFadeOutDeleteChar(CharMgr *this, Char *pkChar);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, unsigned int _Off, unsigned int _Count);
ItemUseTask *__cdecl ISingletonTask<ItemUseTask>::Run();
bool __cdecl MobNoFadeInTab::IsNoFadeIn(const char *pcMobInx);
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right);
void __thiscall std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>(std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *this, std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *_Right);
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right);
bool __thiscall EffectObjectMgr::AddEffectObject(EffectObjectMgr *this, PROTO_NC_BRIEFINFO_EFFECTBLAST_CMD *kProto);
void *__thiscall EffectObjectMgr::_scalar_deleting_destructor_(EffectObjectMgr *this, unsigned int);
void __thiscall mhInfoWin::SetRoomMakerName(mhInfoWin *this, char *pcStr);
EffectObjectMgr *__cdecl EffectObjectMgr::GetMgr();
void __thiscall AreaInfoMgr::_AreaInfoMgr(AreaInfoMgr *this);
void *__thiscall AreaInfoMgr::_vector_deleting_destructor_(AreaInfoMgr *this, unsigned int);
AreaInfoMgr *__cdecl AreaInfoMgr::GetInstance();
float __thiscall NiPoint3::SqrLength(NiPoint3 *this);
void __thiscall GameFrameWork::ChangeCampMode(GameFrameWork *this, bool bCamp, char byMode);
void __thiscall GameFrameWork::UpdateMainCharOnRevActNone(GameFrameWork *this, float fCurTime);
void __thiscall GameFrameWork::ActJump(GameFrameWork *this);
void __thiscall GameFrameWork::UpdateMainCharOnRevActPickItem(GameFrameWork *this, float fCurTime);
bool __thiscall GameFrameWork::UpdateMainCharMove(GameFrameWork *this, float fCurTime);
void __thiscall GameFrameWork::StopMove(GameFrameWork *this);
void __thiscall GameFrameWork::Assist(GameFrameWork *this, Char *pkChar);
void __thiscall GameFrameWork::Stick(GameFrameWork *this, Char *pkChar, bool bStart);
bool __thiscall GameFrameWork::CheckCancelingMoveUpdate(GameFrameWork *this);
void __thiscall GameFrameWork::UpdateMainCharOnRevActPickGround(GameFrameWork *this, float fCurTime, bool bMoveModeChange);
void __thiscall GameFrameWork::MainCharMoveToChar(GameFrameWork *this, Char *pkTargetChar, float fDistance, int eNextAct);
void __thiscall GameFrameWork::MainCharMoveToChar(GameFrameWork *this, NiPoint3 *rkPos, float fDistance, int eNextAct);
void __thiscall GameFrameWork::CurTargetAssist(GameFrameWork *this);
void __thiscall GameFrameWork::AutoRun(GameFrameWork *this);
bool __thiscall GameFrameWork::CheckUsableDirection(GameFrameWork *this, unsigned __int16 kSkillID, NiPoint3 TargetPos);
bool __thiscall GameFrameWork::CheckWeaponCostumeWhenAttackTry(GameFrameWork *this);
void __thiscall GameFrameWork::MainCharTryUseSkill(GameFrameWork *this, unsigned __int16 kSkillID, float fCurTime, Char *pkTarget);
bool __thiscall GameFrameWork::MainCharTryUseSkill(GameFrameWork *this, unsigned __int16 kSkillID, float fTime, unsigned int x, unsigned int y);
bool __thiscall GameFrameWork::CheckGroundSkillEnabled(GameFrameWork *this, bool bForcetoMove);
void __thiscall GameFrameWork::UpdateKeyboardMove(GameFrameWork *this);
void __thiscall GameFrameWork::UpdateMainCharOnRevActSkill(GameFrameWork *this, float fCurTime);
void __thiscall GameFrameWork::MainCharTryToAttack(GameFrameWork *this, Char *pkTargetChar);
void __thiscall GameFrameWork::UpdateMainCharOnRevActPickChar(GameFrameWork *this, float fCurTime);
void __thiscall GameFrameWork::UpdateMainCharOnRevActAttack(GameFrameWork *this, float fCurTime);
void __thiscall GameFrameWork::UpdateMainCharOnRevActMHCharEmotion(GameFrameWork *this, float fCurTime);
void __thiscall GameFrameWork::UpdateMainChar(GameFrameWork *this, float fCurTime);
float __thiscall NiPoint2::Length(NiPoint2 *this);
float __thiscall Char::GetDistanceToChar(Char *this, Char *pkChar);
void __thiscall MainChar::ResetReserveSkill(MainChar *this);
WeaponAttrib *__cdecl WeaponAttribTab::GetWeaponAttrib(WeaponTypeEnum eWeaponEnum);
void __thiscall GameFrameWork::SetResList(GameFrameWork *this);
DropItem *__thiscall GameFrameWork::GetDropItemByHandle(GameFrameWork *this, unsigned __int16 kHandle, int iDepart, int iCommand);
void __thiscall GameFrameWork::CloseAutoCloseWin(GameFrameWork *this, PgWin *pkWin);
void __thiscall GameFrameWork::LockShortCutWinInvPosItem(GameFrameWork *this, unsigned __int16 invPos);
void __thiscall GameFrameWork::UnLockShortCutWinInvPosItem(GameFrameWork *this);
void __thiscall GameFrameWork::AddRoarChat(GameFrameWork *this, char *CharName, char *pcText);
void __thiscall GameFrameWork::CancelSkillCasting(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenGambleHouseWin(GameFrameWork *this, bool bAllClosed);
void __thiscall GameFrameWork::OnOpenExchangeCoinWin(GameFrameWork *this);
void __thiscall GameFrameWork::OnOpenVipCardWin(GameFrameWork *this);
void __thiscall GameFrameWork::SetEnchantGemWinPos(GameFrameWork *this, int XPos, int YPos, unsigned int UI_Type);
void __thiscall GameFrameWork::SearchQuestStartItem(GameFrameWork *this, unsigned __int16 qID, bool bGiveup);
void __thiscall GameFrameWork::AdjustFocus(GameFrameWork *this);
bool __thiscall GameFrameWork::IsDuringEdit(GameFrameWork *this);
bool __thiscall GameFrameWork::IsFriend(GameFrameWork *this, Name5 *CharID);
unsigned int __thiscall GameFrameWork::GetDisplyAspect(GameFrameWork *this, unsigned int uiWidht, unsigned int uiHeight);
void __thiscall GameFrameWork::ConvertCommaNumberWork(GameFrameWork *this, __int64 i64Val, char *pNumberString);
void __thiscall GameFrameWork::RemoveColorText(GameFrameWork *this, char *pText, char *pRemoveColorText, int nLimitTextCnt);
void __thiscall KeyboardMoveProcess::KeyboardMoveProcess(KeyboardMoveProcess *this);
int __thiscall KeyboardMoveProcess::Update(KeyboardMoveProcess *this);
Char *__thiscall GameFrameWork::GetCharByHandle(GameFrameWork *this, unsigned __int16 kHandle, int iDepart, int iCommand);
void __thiscall GameFrameWork::UpdateAutoCloseWin(GameFrameWork *this);
bool __thiscall GameFrameWork::AdjustRestHP(GameFrameWork *this, unsigned __int16 CharHandle, unsigned int *restHP);
void __thiscall GameFrameWork::OpenDiceGameWin(GameFrameWork *this);
void __thiscall GameFrameWork::OpenSlotMachineWin(GameFrameWork *this);
void __thiscall GameFrameWork::SetCharEmotionUIState(GameFrameWork *this, bool bMHEmotionStart);
void __thiscall GameFrameWork::UpdateUIScroll(GameFrameWork *this, SlideListWin *pkList, CClientGuild *pkGuild);
void __thiscall GameFrameWork::UpdateUIScroll(GameFrameWork *this, FrameBoxWin *pkBox, ChatBoardFlex *pkBoard);
void __thiscall GameFrameWork::OnShowWinInterfaceList(GameFrameWork *this, bool bShow);
void __thiscall GameFrameWork::AddScenarioMsg(GameFrameWork *this, ScriptMsg *pkMsgInfo, char *pkStr);
bool __thiscall GameFrameWork::UseActiveSkillItem(GameFrameWork *this, unsigned int uiInvenSlot, unsigned __int16 kSkillID);
void __thiscall KeyboardMoveProcess::SetAutoRun(KeyboardMoveProcess *this, bool bAutoRun);
void __thiscall GameFrameWork::Draw(GameFrameWork *this);
void __thiscall GameFrameWork::GetDropItemByPicking(GameFrameWork *this, DropItem *pkDropItem);
void __thiscall GameFrameWork::SetAutoCloseWin(GameFrameWork *this, PgWin *pkWin);
void __thiscall GameFrameWork::UpdateUIScroll(GameFrameWork *this, SlideListWin *pkList, SlideBar *pkBar);
bool __thiscall GameFrameWork::IsPlayCardOpen(GameFrameWork *this);
bool __thiscall GameFrameWork::IsVotePossible(GameFrameWork *this, unsigned int kHandle);
bool __thiscall GameFrameWork::IsAvailableArrange(GameFrameWork *this);
void __thiscall GameFrameWork::OnAutoPickByMiniMon(GameFrameWork *this, std::_Vector_iterator<std::_Vector_val<DropItem *,std::allocator<DropItem *> > > iterBegin, std::_Vector_iterator<std::_Vector_val<DropItem *,std::allocator<DropItem *> > > iterEnd);
bool __thiscall GameFrameWork::PlayCardEffect(GameFrameWork *this);
void __thiscall GameFrameWork::HideEscapeWin(GameFrameWork *this);
void __thiscall GameFrameWork::CheckWebFocus(GameFrameWork *this);
void __thiscall GameFrameWork::DelWebList(GameFrameWork *this, HWND__ *hHandle);
void __thiscall GameFrameWork::NowLoadingText(GameFrameWork *this, int LoadingRate);
void __thiscall GameFrameWork::UpdateAskServerInform(GameFrameWork *this, float fTime);
void __thiscall GameFrameWork::ResetAskServerInform(GameFrameWork *this);
void __thiscall GameFrameWork::OpenCard(GameFrameWork *this);
void __thiscall GameFrameWork::AddWebList(GameFrameWork *this, std::pair<HWND__ *,PgWin *> kElement);
bool __thiscall GameFrameWork::AddAskServerInform(GameFrameWork *this, float fTime, unsigned __int16 hnd, NETCOMMAND *netCmd);
void __thiscall GameFrameWork::RegisterCard(GameFrameWork *this, unsigned int uiSlot, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial);
void __thiscall GameFrameWork::_GameFrameWork(GameFrameWork *this);
void __thiscall GameFrameWork::GetDropItemByArea(GameFrameWork *this, GameFrameWork::AutoPickType eType);
void __thiscall GameFrameWork::AutoPickDropItem(GameFrameWork *this);
void __thiscall GameFrameWork::GameFrameWork(GameFrameWork *this);
void __thiscall GameFrameWork::Update(GameFrameWork *this, float fCurTime);
MapViewInfo *__cdecl IIDTableBase<MapViewInfo_MapViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
void __cdecl std::_Push_heap<DropItem_____int_DropItem___DropItemSorter>(DropItem **_First, int _Hole, int _Top, DropItem **_Val, DropItemSorter _Pred);
void __thiscall NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_NiTListBase<DFALL<IOptionBase__>_IOptionBase__>(NiTListBase<DFALL<IOptionBase *>,IOptionBase *> *this);
void *__thiscall NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_scalar_deleting_destructor_(NiTListBase<DFALL<IOptionBase *>,IOptionBase *> *this, unsigned int);
void __cdecl std::_Adjust_heap<DropItem_____int_DropItem___DropItemSorter>(DropItem **_First, int _Hole, int _Bottom, DropItem **_Val, DropItemSorter _Pred);
NiTMapItem<char const *,NiD3DGlobalConstantEntry *> *__thiscall NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::NewItem(NiTMap<char const *,NiD3DGlobalConstantEntry *> *this);
void *__thiscall NiTList<IOptionBase__>::_scalar_deleting_destructor_(NiTList<IOptionBase *> *this, unsigned int);
KQIsVote *__cdecl KQIsVoteTable::GetByID(const int iID);
BasicInfoFindUI *__cdecl BasicInfoFindUITab::GetByUIFile(char *FileName);
void __cdecl std::_Make_heap<DropItem_____int_DropItem___DropItemSorter>(DropItem **_First, DropItem **_Last, DropItemSorter _Pred, int *__formal, DropItem **__formal);
void __cdecl std::_Sort_heap<DropItem_____DropItemSorter>(DropItem **_First, DropItem **_Last, DropItemSorter _Pred);
void __cdecl std::_Partial_sort<DropItem_____DropItem___DropItemSorter>(DropItem **_First, DropItem **_Mid, DropItem **_Last, DropItemSorter _Pred, DropItem **__formal);
void __thiscall std::vector<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::reserve(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this, unsigned int _Count);
void __thiscall std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::_Reserve(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this, unsigned int _Count);
void __thiscall GameFrameWork::SmartWhisper::_SmartWhisper(GameFrameWork::SmartWhisper *this);
NiRTTI *__thiscall GameFrameWork::GetRTTI(GameFrameWork *this);
const char *__thiscall GameFrameWork::GetFrameWorkName(GameFrameWork *this);
void *__thiscall GameFrameWork::_vector_deleting_destructor_(GameFrameWork *this, unsigned int);
int __thiscall ActionIconWin::GetActionViewInfoID(ActionIconWin *this);
bool __thiscall ActionIconWin::Create(ActionIconWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
bool __thiscall ActionIconWin::EatDropInstance(ActionIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall ActionIconWin::OnFirstHitWin(ActionIconWin *this);
void __thiscall PremiumActionIcon::PremiumActionIcon(PremiumActionIcon *this);
void __thiscall PremiumActionIcon::_PremiumActionIcon(PremiumActionIcon *this);
bool __thiscall PremiumActionIcon::Create(PremiumActionIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall PremiumActionWin::OnHelpLink(PremiumActionWin *this);
void __thiscall ActionInvTabButWin::ActionInvTabButWin(ActionInvTabButWin *this);
void __thiscall ActionInvTabButWin::_ActionInvTabButWin(ActionInvTabButWin *this);
bool __thiscall ActionInvTabButWin::Create(ActionInvTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
void __thiscall ActionWin::OnHelpLink(ActionWin *this);
void __thiscall ActionIconWin::_ActionIconWin(ActionIconWin *this);
void __thiscall ActionWin::ActionWin(ActionWin *this);
void __thiscall ActionWin::_ActionWin(ActionWin *this);
void __thiscall ActionWin::OnWinClose(ActionWin *this);
void __thiscall ActionWin::OnDefaultSlot_LClick(ActionWin *this, unsigned int lParam);
void __thiscall ActionWin::OnEmotionSlot_LClick(ActionWin *this, unsigned int lParam);
void __thiscall ActionWin::StartHpStonCoolTime(ActionWin *this);
void __thiscall ActionWin::StartSpStonCoolTime(ActionWin *this);
void __thiscall PremiumActionWin::PremiumActionWin(PremiumActionWin *this);
void __thiscall PremiumActionWin::_PremiumActionWin(PremiumActionWin *this);
void __thiscall PremiumActionWin::OnShowActionWin(PremiumActionWin *this);
void __thiscall PremiumActionWin::OnEmotionAction(PremiumActionWin *this, unsigned int lParam);
bool __thiscall ActionInvTabButWin::EatDropInstance(ActionInvTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall ActionIconWin::DoAction(ActionIconWin *this);
void __thiscall ActionIconWin::DoRAction(ActionIconWin *this);
void __thiscall ActionIconWin::SetTopPlaneColor(ActionIconWin *this, float rad, float green, float blue, float alpha);
void __thiscall ActionWin::UpdateMeWin(ActionWin *this, float fCurTime);
void __thiscall PremiumActionIcon::OnFirstHitWin(PremiumActionIcon *this);
void __thiscall PremiumActionIcon::DoAction(PremiumActionIcon *this);
void __thiscall PremiumActionIcon::DoRAction(PremiumActionIcon *this);
void __thiscall PremiumActionWin::Refresh(PremiumActionWin *this);
void __thiscall PremiumActionWin::OnInvLClick(PremiumActionWin *this, unsigned int uiInvIndex);
void __thiscall PremiumActionWin::OnInvRClick(PremiumActionWin *this, unsigned int uiInvIndex);
bool __thiscall PremiumActionWin::Change(PremiumActionWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex);
int __thiscall PremiumActionWin::GetIconPosIndex(PremiumActionWin *this, int ActionViewInfoID);
int __thiscall ActionWin::GetIconPosIndex(ActionWin *this, int ActionViewInfoID);
void __thiscall ActionWin::OnEmotionAction(ActionWin *this, unsigned int lParam);
void __thiscall ActionWin::OnPremiumAction(ActionWin *this);
bool __thiscall ActionWin::Change(ActionWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex);
void __thiscall PremiumActionWin::OnCommand(PremiumActionWin *this, unsigned int wParam, int lParam);
void __thiscall PremiumActionWin::SetMHActionState(PremiumActionWin *this, bool bMHEmotionStart);
void __thiscall ActionIconWin::ActionIconWin(ActionIconWin *this);
void __thiscall ActionWin::OnEmotionSlot_RClick(ActionWin *this, unsigned int lParam);
void __thiscall ActionWin::SetMHActionState(ActionWin *this, bool bMHEmotionStart);
ActionIconWin *__cdecl ActionIconWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
ActionWin *__cdecl ActionWin::CreateWin(PgFrameWork *pkFrameWork);
PremiumActionIcon *__cdecl PremiumActionIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
PremiumActionWin *__cdecl PremiumActionWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall PremiumActionWin::Create(PremiumActionWin *this, PgFrameWork *pkFrameWork);
ActionInvTabButWin *__cdecl ActionInvTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
bool __thiscall ActionWin::Create(ActionWin *this, PgFrameWork *pkFrameWork);
void __thiscall ActionWin::OnDefaultAction(ActionWin *this, unsigned int lParam);
void __thiscall PremiumActionWin::DropOnLClickInv(PremiumActionWin *this, unsigned int uiInvIndex);
void __thiscall ActionWin::OnDefaultSlot_RClick(ActionWin *this, unsigned int lParam);
bool __thiscall PremiumActionWin::DropOnInv(PremiumActionWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall ActionWin::OnCommand(ActionWin *this, unsigned int wParam, int lParam);
bool __thiscall PremiumActionIcon::EatDropInstance(PremiumActionIcon *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall GameFrameWork::GetGroundPosCam(GameFrameWork *this, NiPoint3 *kGroundPos);
unsigned int __cdecl ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal();
void *__thiscall PremiumActionIcon::_vector_deleting_destructor_(PremiumActionIcon *this, unsigned int);
void *__thiscall ActionInvTabButWin::_scalar_deleting_destructor_(ActionInvTabButWin *this, unsigned int);
void __thiscall PgWinBut::DoAction(PgWinBut *this);
void *__thiscall ActionIconWin::_scalar_deleting_destructor_(ActionIconWin *this, unsigned int);
void *__thiscall ActionWin::_scalar_deleting_destructor_(ActionWin *this, unsigned int);
void *__thiscall PremiumActionWin::_scalar_deleting_destructor_(PremiumActionWin *this, unsigned int);
MHEmotion *__cdecl MiniHouseEmotionTab::GetNonMenuEmotion(unsigned __int16 MHEmotionID, char byActionViewID);
void __thiscall NiAVObject::DetachProperty(NiAVObject *this, NiProperty *pkProperty);
void __thiscall PgFadeTextGeometry::SetLifeTime(PgFadeTextGeometry *this, float fLifeTime);
void __thiscall PgFadeTextGeometry::UpdateDownwardPass(PgFadeTextGeometry *this, float fTime, bool bUpdateControllers);
int __thiscall loc_4D53E1(SpScreenText *this, float fTime, int bUpdateControllers); // weak
void __thiscall PgFadeTextGeometry::CopyFrom(PgFadeTextGeometry *this, PgFadeTextGeometry *pkSrc);
void __thiscall AnnounceWin::UpdateMeWin(AnnounceWin *this, float fCurTime);
void __thiscall AnnounceWin::SetFont(AnnounceWin *this, PgFont *pkFont);
void __thiscall PgFadeTextGeometry::PgFadeTextGeometry(PgFadeTextGeometry *this, PgFont *pkFont);
void __thiscall AnnounceWin::_AnnounceWin(AnnounceWin *this);
void __thiscall AnnounceWin::AnnounceWin(AnnounceWin *this);
bool __thiscall AnnounceWin::Create(AnnounceWin *this, PgFrameWork *pkFrameWork);
void __thiscall AnnounceWin::AddText(AnnounceWin *this, char *pcText, D3DXCOLOR *TextColor, bool bSingleLine, float fLifeTime);
AnnounceWin *__cdecl AnnounceWin::CreateWin(PgFrameWork *pkFrameWork);
NiRTTI *__thiscall NiNode::GetRTTI(NiNode *this);
char *__thiscall PgTextGeometry::GetText(PgTextGeometry *this);
unsigned int __thiscall PgTextGeometry::GetTextWidth(PgTextGeometry *this);
unsigned int __thiscall PgTextGeometry::GetTextHeight(PgTextGeometry *this);
void __thiscall PgTextGeometry::SetTextRect(PgTextGeometry *this, tagRECT *kRect);
void __thiscall PgTextGeometry::SetColor(PgTextGeometry *this, D3DXCOLOR *kColor);
void __thiscall PgTextGeometry::SetResetTextAfterDraw(PgTextGeometry *this, bool b);
bool __thiscall PgTextGeometry::GetResetTextAfterDraw(PgTextGeometry *this);
void __thiscall PgTextGeometry::SetFont(PgTextGeometry *this, PgFont *pkFont);
void *__thiscall PgFadeTextGeometry::_scalar_deleting_destructor_(PgFadeTextGeometry *this, unsigned int);
void *__thiscall AnnounceWin::_vector_deleting_destructor_(AnnounceWin *this, unsigned int);
void __stdcall ATL::AtlThrowImpl(HRESULT hr);
void __thiscall ATL::CTime::CTime(ATL::CTime *this, int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST);
void __thiscall AttendCheckBut::AttendCheckBut(AttendCheckBut *this);
void __thiscall AttendCheckBut::SetTextColor(AttendCheckBut *this, D3DXCOLOR *kColor);
PgFont *__thiscall AttendCheckWin::CreateFontA(AttendCheckWin *this, Font::FontDefine *kFontDefine);
void __thiscall AttendCheckWin::OnCloseWin(AttendCheckWin *this);
void __thiscall AttendCheckWin::SetDate(AttendCheckWin *this, tm *T, const int Cnt);
void __thiscall AttendCheckWin::OnClick(AttendCheckWin *this, const unsigned int uiBtnIndex);
void __thiscall AttendCheckWin::OnRewardEffect(AttendCheckWin *this);
void __thiscall AttendCheckBut::Create(AttendCheckBut *this, int iOffX, int iOffY, PgWin *pkParent, NiSourceTexture *pkTexture);
void __thiscall AttendCheckBut::Create(AttendCheckBut *this, int iOffX, int iOffY, const unsigned int eButMessage, const unsigned int uiIndex, PgWin *pkParent, NiSourceTexture *pkTexture);
void __thiscall AttendCheckBut::SetType(AttendCheckBut *this, unsigned int eType);
bool __thiscall AttendCheckWin::Create(AttendCheckWin *this, PgFrameWork *pkFrameWork);
void __thiscall AttendCheckWin::OnCommand(AttendCheckWin *this, unsigned int wParam, int lParam);
void __thiscall AttendCheckWin::UpdateMeWin(AttendCheckWin *this, float fCurTime);
void __thiscall AttendCheckWin::InitEvtState(AttendCheckWin *this);
void __thiscall AttendCheckWin::SetCheckState(AttendCheckWin *this, const char *uiCheckState);
void __thiscall AttendCheckWin::SetButState(AttendCheckWin *this, const char *uiRewardState, const int iRewardCnt);
void __thiscall AttendCheckWin::CheckIt(AttendCheckWin *this);
void __thiscall AttendCheckWin::SetReward(AttendCheckWin *this, const unsigned int uiRewardID);
void __thiscall AttendCheckWin::ChangeDay(AttendCheckWin *this, const int EvtIndex);
int __thiscall AttendCheckWin::GetMonthRewardIndex(AttendCheckWin *this);
bool __thiscall AttendCheckWin::IsRewardOn(AttendCheckWin *this);
bool __thiscall AttendCheckWin::IsRewardAll(AttendCheckWin *this);
void __thiscall AttendCheckBut::_AttendCheckBut(AttendCheckBut *this);
void __thiscall AttendCheckWin::AttendCheckWin(AttendCheckWin *this);
void __thiscall AttendCheckWin::_AttendCheckWin(AttendCheckWin *this);
void __thiscall AttendCheckWin::SetEvtState(AttendCheckWin *this, tm *T, const int Cnt, const char *iCheckState, const char *iRewardState, const int iRewardCnt);
AttendCheckWin *__cdecl AttendCheckWin::CreateWin(PgFrameWork *pkFrameWork);
unsigned int __cdecl ITableBase<AttendReward_AttendRewardTab>::GetTotal();
AttendReward *__cdecl AttendRewardTab::GetByType(const unsigned int uiType);
AttendReward *__cdecl AttendRewardTab::GetByType(const unsigned int uiType, unsigned int *uiIndex);
unsigned int __cdecl AttendRewardTab::GetNumOfType(unsigned int uiType);
void *__thiscall AttendCheckBut::_vector_deleting_destructor_(AttendCheckBut *this, unsigned int);
void *__thiscall AttendCheckWin::_scalar_deleting_destructor_(AttendCheckWin *this, unsigned int);
void __thiscall AttendIconWin::AttendIconWin(AttendIconWin *this);
void __thiscall AttendIconWin::SetActive(AttendIconWin *this, bool bActive);
void __thiscall AttendIconWin::OnLClick(AttendIconWin *this);
bool __thiscall AttendIconWin::Create(AttendIconWin *this, PgFrameWork *pkFrameWork);
void __thiscall AttendIconWin::OnCommand(AttendIconWin *this, unsigned int wParam, int lParam);
void __thiscall AttendIconWin::_AttendIconWin(AttendIconWin *this);
AttendIconWin *__cdecl AttendIconWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall AttendIconWin::_scalar_deleting_destructor_(AttendIconWin *this, unsigned int);
void __thiscall AttendRewardWin::AttendRewardWin(AttendRewardWin *this);
void __thiscall AttendRewardWin::_AttendRewardWin(AttendRewardWin *this);
void __thiscall AttendRewardWin::OnCloseWin(AttendRewardWin *this);
void __thiscall AttendRewardWin::OnCommand(AttendRewardWin *this, unsigned int wParam, int lParam);
bool __thiscall AttendRewardWin::Create(AttendRewardWin *this, PgFrameWork *pkFrameWork);
void __thiscall AttendRewardWin::SetItemInfo(AttendRewardWin *this, const unsigned int uiRewardID, Item *const pkItem);
AttendRewardWin *__cdecl AttendRewardWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall AttendRewardWin::_vector_deleting_destructor_(AttendRewardWin *this, unsigned int);
void __thiscall BasicInfoTipWin::_BasicInfoTipWin(BasicInfoTipWin *this);
void __thiscall BasicInfoTipWin::AddText(BasicInfoTipWin *this, const char *pcText);
void __thiscall BasicInfoTipWin::AddText(BasicInfoTipWin *this, const char *pcText, D3DXCOLOR sTextColor);
void __thiscall BasicInfoTipWin::AddText(BasicInfoTipWin *this, const char *pcText, D3DXCOLOR sTextColor, const float fLifeTime);
void __thiscall BasicInfoTipWin::Clear(BasicInfoTipWin *this);
bool __thiscall BasicInfoTipWin::ConfirmLevel(BasicInfoTipWin *this, const unsigned int uiMinLevel, const unsigned int uiMaxLevel);
bool __thiscall BasicInfoTipWin::Create(BasicInfoTipWin *this, PgFrameWork *pkFrameWork);
void __thiscall BasicInfoTipWin::SetResoulution(BasicInfoTipWin *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall BasicInfoTipWin::Update(BasicInfoTipWin *this, float fCurTime);
void __thiscall BasicInfoTipWin::BasicInfoTipWin(BasicInfoTipWin *this, const float fCycle);
BasicInfoTipWin *__cdecl BasicInfoTipWin::CreateWin(PgFrameWork *pkFrameWork, const float fCycle);
void *__thiscall BasicInfoTipWin::_scalar_deleting_destructor_(BasicInfoTipWin *this, unsigned int);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *this);
__int64 __thiscall ShineDateTime::toTime_t(ShineDateTime *this);
void __thiscall StatusBuffWin::ResetIcons(StatusBuffWin *this);
void __thiscall StatusBuffWin::SetFrameBoxSize(StatusBuffWin *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall StatusBuffWin::AlignBuf(StatusBuffWin *this, int row, int column);
char __thiscall StatusBuffWin::GetCursorStateOnPanel(StatusBuffWin *this);
void __thiscall StatusBuffWin::SetBuffUI(StatusBuffWin *this, Char *pkMember, StateType type, int *AbstateNums);
void __thiscall StatusBuffWin::ProcessMeInput(StatusBuffWin *this, bool *bHit);
void __thiscall StatusBuffWin::GetDayStr(StatusBuffWin *this, char *MsgBuffer, int MsgBufSize, int Day);
void __thiscall StatusBuffWin::GetHourStr(StatusBuffWin *this, char *MsgBuffer, int MsgBufSize, int Hour);
void __thiscall StatusBuffWin::GetMinStr(StatusBuffWin *this, char *MsgBuffer, int MsgBufSize, int Min);
char *__thiscall StatusBuffWin::GetRemainTime(StatusBuffWin *this, char *MsgBuffer, PROTO_CHARGEDBUFF_INFO *pkInfo);
bool __thiscall StatusBuffWin::Create(StatusBuffWin *this, PgFrameWork *pkFrameWork, StatusBuffWin::EBUFF_TYPE type);
bool __thiscall StatusBuffWin::RefreshChargedBuffIcon(StatusBuffWin *this, ChargedIconItem *pkInfo, PROTO_CHARGEDBUFF_INFO *pkBuffInfo, int BufNum);
void __thiscall StatusBuffWin::RemoveMsgItemToMap(StatusBuffWin *this, char *pcKeyName);
void __thiscall StatusBuffWin::RemoveAllMsgItemFromMap(StatusBuffWin *this);
void __thiscall StatusBuffWin::AddMsgItemToMap(StatusBuffWin *this, char *pcKeyName);
void __thiscall StatusBuffWin::RefreshChargedBuffMsg(StatusBuffWin *this, ChargedMessageItem *pkInfo, PROTO_CHARGEDBUFF_INFO *pkBuffInfo);
void __thiscall StatusBuffWin::RefreshChargedItems(StatusBuffWin *this, int *BufNum);
void __thiscall StatusBuffWin::_StatusBuffWin(StatusBuffWin *this);
void __thiscall StatusBuffWin::UpdateMeWin(StatusBuffWin *this, float fCurTime);
int __thiscall loc_4DBC5A(StatusBuffWin *this, float fCurTime); // weak
int __thiscall loc_4DBCF2(StatusBuffWin *this, float fCurTime); // weak
void __thiscall StatusBuffWin::DirectMessage(StatusBuffWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall StatusBuffWin::StatusBuffWin(StatusBuffWin *this);
StatusBuffWin *__cdecl StatusBuffWin::CreateWin(PgFrameWork *pkFrameWork, StatusBuffWin::EBUFF_TYPE type);
unsigned int __cdecl ITableBase<ChargedMessageItem_ChargedMsgItemTab>::GetTotal();
unsigned int __cdecl ITableBase<ChargedIconItem_ChargedIconItemTab>::GetTotal();
ChargedMessageItem *__cdecl ChargedMsgItemTab::GetByItemName(const char *ItemName);
ChargedIconItem *__cdecl ChargedIconItemTab::GetByItemName(const char *ItemName);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Linsert(...);
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *__thiscall std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool>__>(std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *this, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool> *_Val);
void *__thiscall StatusBuffWin::_vector_deleting_destructor_(StatusBuffWin *this, unsigned int);
void __thiscall CalculatorWin::OnCmdOk(CalculatorWin *this);
void __thiscall CalculatorWin::OnCmdCancel(CalculatorWin *this);
void __thiscall CalculatorWin::GetValueFromEdit(CalculatorWin *this);
void __thiscall CalculatorWin::SetValueToEdit(CalculatorWin *this);
void __thiscall CalculatorWin::OnCmdNum(CalculatorWin *this, unsigned int uiVal);
void __thiscall CalculatorWin::OnCmdNum00(CalculatorWin *this);
void __thiscall CalculatorWin::OnCmdMax(CalculatorWin *this);
void __thiscall CalculatorWin::OnCmdClear(CalculatorWin *this);
void __thiscall CalculatorWin::OnCmdPlus(CalculatorWin *this);
void __thiscall CalculatorWin::OnCmdMinus(CalculatorWin *this);
void __thiscall CalculatorWin::Open(CalculatorWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiMax, char *pcText);
void __thiscall CalculatorWin::CalculatorWin(CalculatorWin *this);
void __thiscall CalculatorWin::_CalculatorWin(CalculatorWin *this);
bool __thiscall CalculatorWin::Create(CalculatorWin *this, PgFrameWork *pkFrameWork);
void __thiscall CalculatorWin::OnCommand(CalculatorWin *this, unsigned int wParam, int lParam);
CalculatorWin *__cdecl CalculatorWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CalculatorWin::_vector_deleting_destructor_(CalculatorWin *this, unsigned int);
void __thiscall CastingProgressWin::CastingProgressWin(CastingProgressWin *this);
void __thiscall CastingProgressWin::_CastingProgressWin(CastingProgressWin *this);
void __thiscall CastingProgressWin::Stop(CastingProgressWin *this);
void __thiscall CastingProgressWin::CastingFail(CastingProgressWin *this);
bool __thiscall CastingProgressWin::IsDoingCast(CastingProgressWin *this);
bool __thiscall CastingProgressWin::Create(CastingProgressWin *this, PgFrameWork *pkFrameWork, bool bProductCasting);
void __thiscall CastingProgressWin::StartCasting(CastingProgressWin *this, unsigned int uiCastingTime, bool bCloseWhenFinished);
void __thiscall CastingProgressWin::CastingSuccess(CastingProgressWin *this);
void __thiscall CastingProgressWin::UpdateMeWin(CastingProgressWin *this, float fCurTime);
int __stdcall loc_4DDEFB(float fSin); // weak
CastingProgressWin *__cdecl CastingProgressWin::CreateWin(PgFrameWork *pkFrameWork, bool bProductCasting);
void *__thiscall CastingProgressWin::_scalar_deleting_destructor_(CastingProgressWin *this, unsigned int);
void __thiscall PgWinBar::SetValue(PgWinBar *this, float fMaxVal, float fCurVal);
void __cdecl GetShineDateStr(ShineDateTime kDate, char *pcStr, int iMaxStr, bool bDisplayHour);
void __thiscall ChargedItemListWin::ChargedItemInfo::ChargedItemInfo(ChargedItemListWin::ChargedItemInfo *this);
void __thiscall ChargedItemListWin::ChargedItemInfo::Reset(ChargedItemListWin::ChargedItemInfo *this);
Item *__thiscall ChargedItemListWin::GetTimeLimitItem(ChargedItemListWin *this, unsigned int uiIndex);
void __thiscall ChargedItemListWin::OnHelpLink(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::ChargedItemInfo::SetItem(ChargedItemListWin::ChargedItemInfo *this, Item *pkItem);
bool __cdecl IsActiveChargedTimeLimitItem(Item *pkItem);
unsigned int __thiscall ChargedItemListWin::GetMaxPageNum(ChargedItemListWin *this);
bool __thiscall ChargedItemListWin::Create(ChargedItemListWin *this, PgFrameWork *pkFrameWork);
void __thiscall ChargedItemListWin::UpdatePageInfo(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::ChargedItemInfo::SetItem(ChargedItemListWin::ChargedItemInfo *this, PROTO_CHARGEDBUFF_INFO *pkChargedBuffInfo);
void __thiscall ChargedItemListWin::ChargedItemListWin(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::_ChargedItemListWin(ChargedItemListWin *this);
ChargedItemListWin *__cdecl ChargedItemListWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall ChargedItemListWin::SetTimeLimittedChargedBuff(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::Refresh(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::OnShowWin(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::OnNext(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::OnPrev(ChargedItemListWin *this);
void __thiscall ChargedItemListWin::OnCommand(ChargedItemListWin *this, unsigned int wParam, int lParam);
unsigned int __cdecl ITableBase<ItemViewInfo_ItemViewInfoTab>::GetTotal();
ItemViewInfo *__cdecl ItemViewInfoTab::GetByInxName(char *pcInxName);
void *__thiscall ChargedItemListWin::_vector_deleting_destructor_(ChargedItemListWin *this, unsigned int);
void __thiscall CharInfoWin::ConvertCommaNumber(CharInfoWin *this, __int64 i64Val, char *pNumberString);
void __thiscall CharInfoWin::OpenStatTitleWin(CharInfoWin *this);
void __thiscall CharInfoWin::OpenCharacterTitleWin(CharInfoWin *this);
void __thiscall CharInfoWin::OnClose(CharInfoWin *this);
FreeStatView *__thiscall CharInfoWin::GetFreeStatView(CharInfoWin *this);
void __thiscall CharInfoWin::SetCharTitleCurrentInfo(CharInfoWin *this, CHARTITLE_BRIEFINFO *pTitleInfo);
void __thiscall CharInfoWin::OnHelpLink(CharInfoWin *this);
void __thiscall CharInfoWin::OnOpenCollection(CharInfoWin *this);
void __thiscall CharInfoWin::EnableChangeCondition(CharInfoWin *this, bool bEnable);
void __thiscall CharInfoWin::SetChangeCondition(CharInfoWin *this, CHAR_CHANGEBYCONDITION_PARAM kCondition, char bFlag, char bIndex);
void __thiscall CharInfoWin::SetConditionDataNum(CharInfoWin *this, unsigned int uiNum);
void __thiscall CharInfoWin::SetSectionRate(CharInfoWin *this, unsigned int uiRate);
void __thiscall CharInfoWin::SetMinMaxParamTextWin(CharInfoWin *this, PgWinText *pkWin, int iMinBaseVal, int iMinChangeVal, int iMaxBaseVal, int iMaxChangeVal, float fDisplayAlpha);
void __thiscall CharInfoWin::SetParamTextWin(CharInfoWin *this, PgWinText *pkWin, int BaseVal, int ChangeVal, int iBonusVal, float fDisplayAlpha);
void __thiscall CharInfoWin::SetParamTextWin(CharInfoWin *this, PgWinText *pkWin, float BaseVal, float ChangeVal, float fBonusVal);
void __thiscall CharInfoWin::OnCommand(CharInfoWin *this, unsigned int wParam, int lParam);
void __thiscall CharInfoWin::RefreshStatTitle(CharInfoWin *this);
bool __thiscall CharInfoWin::Create(CharInfoWin *this, PgFrameWork *pkFrameWork);
CHAR_CHANGEBYCONDITION_PARAM *__thiscall CharInfoWin::FindConditionParam(CHAR_CHANGEBYCONDITION_PARAM *this, CharInfoWin *index, int nFlag, char retstr);
void __thiscall CharInfoWin::SetClass(CharInfoWin *this, char kClassID);
void __thiscall CharInfoWin::SetChangeConParamInfo(CharInfoWin *this, PassiveSkillInfo *pkInfo);
void __thiscall CharInfoWin::EnablePassiveSkillID(CharInfoWin *this, unsigned __int16 kID);
void __thiscall CharInfoWin::CharInfoWin(CharInfoWin *this);
void __thiscall CharInfoWin::_CharInfoWin(CharInfoWin *this);
CharInfoWin *__cdecl CharInfoWin::CreateWin(PgFrameWork *pkFrameWork);
void __cdecl ConvertCommaNums(int x, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strNums);
void __thiscall CharInfoWin::UpdateMeWin(CharInfoWin *this, float fCurTime);
void __thiscall CharInfoWin::SetConditionInfo(CharInfoWin *this, CHAR_CHANGEBYCONDITION_PARAM kConditionParam);
CHAR_CHANGEBYCONDITION_PARAM *__thiscall std::allocator<CHAR_CHANGEBYCONDITION_PARAM>::allocate(std::allocator<CHAR_CHANGEBYCONDITION_PARAM> *this, unsigned int _Count);
std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::end(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *result);
void __thiscall std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(std::vector<unsigned short,std::allocator<unsigned short> > *this, unsigned int _Count);
CHAR_CHANGEBYCONDITION_PARAM *__cdecl std::_Uninit_move<CHAR_CHANGEBYCONDITION_PARAM___CHAR_CHANGEBYCONDITION_PARAM___std::allocator<CHAR_CHANGEBYCONDITION_PARAM>_CHAR_CHANGEBYCONDITION_PARAM>(CHAR_CHANGEBYCONDITION_PARAM *_First, CHAR_CHANGEBYCONDITION_PARAM *_Last, CHAR_CHANGEBYCONDITION_PARAM *_Dest, std::allocator<CHAR_CHANGEBYCONDITION_PARAM> *_Al, CHAR_CHANGEBYCONDITION_PARAM *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<unsigned_short_std::allocator<unsigned_short>>::_Reserve(std::vector<unsigned short,std::allocator<unsigned short> > *this, unsigned int _Count);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _Count, char _Ch);
void __thiscall Char_ChangeCondition::_Char_ChangeCondition(Char_ChangeCondition *this);
void __thiscall std::vector<unsigned_short_std::allocator<unsigned_short>>::push_back(std::vector<unsigned short,std::allocator<unsigned short> > *this, const unsigned __int16 *_Val);
void __thiscall std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::reserve(std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *this, unsigned int _Count);
void __thiscall std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::_Reserve(std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *this, unsigned int _Count);
void __thiscall std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::push_back(std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *this, CHAR_CHANGEBYCONDITION_PARAM *_Val);
void *__thiscall CharInfoWin::_vector_deleting_destructor_(CharInfoWin *this, unsigned int);
void __thiscall CharTitleWin::_CharTitleWin(CharTitleWin *this);
void __thiscall CharTitleWin::OnPrevPage(CharTitleWin *this);
void __thiscall CharTitleWin::OnNextPage(CharTitleWin *this);
void __thiscall CharTitleWin::OnClose(CharTitleWin *this);
void __thiscall CharTitleWin::AddListItem(CharTitleWin *this, unsigned int uiIndex, unsigned int uiType, unsigned int uiElementNum, unsigned int uiElementValue, unsigned int uiMobID);
void __thiscall CharTitleWin::OnHelpLink(CharTitleWin *this);
void __thiscall CharTitleWin::CharTitleSort(CharTitleWin *this);
void __thiscall CharTitleWin::CharTitleWin(CharTitleWin *this);
void __thiscall CharTitleWin::UpdateMeWin(CharTitleWin *this, float fCurTime);
void __thiscall CharTitleWin::OnOK(CharTitleWin *this);
void __thiscall CharTitleWin::OnSlideBarContent(CharTitleWin *this);
void __thiscall CharTitleWin::ProcessMeInput(CharTitleWin *this, bool *bHit);
void __thiscall CharTitleWin::UpdateViewList(CharTitleWin *this);
CharTitleWin *__cdecl CharTitleWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall CharTitleWin::OnListClick(CharTitleWin *this, int nIndex);
void __thiscall CharTitleWin::SetCurTitleInfo(CharTitleWin *this, CharTitleWin::CTWIN_LIST_INFO *pInfo);
void __thiscall CharTitleWin::OnCommand(CharTitleWin *this, unsigned int wParam, int lParam);
bool __thiscall CharTitleWin::Create(CharTitleWin *this, PgFrameWork *pkFrameWork);
void *__thiscall CharTitleWin::_scalar_deleting_destructor_(CharTitleWin *this, unsigned int);
unsigned int __cdecl ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::GetTotal();
void __thiscall std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *this, unsigned int _Count);
std::vector<CharacterTitleStateView *,std::allocator<CharacterTitleStateView *> > *__cdecl CharacterTitleStateViewTab::GetByTypeAndLevel(std::vector<CharacterTitleStateView *,std::allocator<CharacterTitleStateView *> > *result, unsigned int uiType, char Level);
void __thiscall ChatBlockListWin::ChatBlockListWin(ChatBlockListWin *this);
void __thiscall ChatBlockListWin::_ChatBlockListWin(ChatBlockListWin *this);
void __thiscall ChatBlockListWin::CloseWin(ChatBlockListWin *this);
void __thiscall ChatBlockListWin::OpenWin(ChatBlockListWin *this);
void __thiscall ChatBlockListWin::UpdateMeWin(ChatBlockListWin *this, float fCurTime);
void __thiscall ChatBlockListWin::ChangeUserName(ChatBlockListWin *this, Name5 *OldName, Name5 *NewName);
void __thiscall ChatBlockListWin::OnAllDeleteBtn(ChatBlockListWin *this);
ChatBlockListWin *__cdecl ChatBlockListWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall ChatBlockListWin::UpdateList(ChatBlockListWin *this);
void __thiscall ChatBlockListWin::OnSelectDeleteBtn(ChatBlockListWin *this);
void __thiscall ChatBlockListWin::UpdateViewList(ChatBlockListWin *this);
void __thiscall ChatBlockListWin::DirectMessage(ChatBlockListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall ChatBlockListWin::Create(ChatBlockListWin *this, PgFrameWork *pkFrameWork);
void __thiscall ChatBlockListWin::OnSlideBar(ChatBlockListWin *this);
void __thiscall mhDiceRankWin::ProcessMeInput(ChatBlockListWin *this, bool *bHit);
void *__thiscall ChatBlockListWin::_scalar_deleting_destructor_(ChatBlockListWin *this, unsigned int);
void __thiscall ChatBlockListWin::OnCommand(ChatBlockListWin *this, unsigned int wParam, int lParam);
void __thiscall ChatEditWin::ChatStart(ChatEditWin *this);
void __thiscall ChatEditWin::OnEditEnd(ChatEditWin *this, unsigned int wParam, int lParam);
void __thiscall ChatEditWin::ChatEditWin(ChatEditWin *this);
void __thiscall ChatEditWin::_ChatEditWin(ChatEditWin *this);
bool __thiscall ChatEditWin::Create(ChatEditWin *this, NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork);
ChatEditWin *__cdecl ChatEditWin::CreateWin(NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork);
void *__thiscall ChatEditWin::_scalar_deleting_destructor_(ChatEditWin *this, unsigned int);
void __thiscall ClockShadowWin::CoolTimeDecrease(ClockShadowWin *this, unsigned __int16 kID);
void __thiscall ClockShadowWin::StopClockShadow(ClockShadowWin *this);
void __thiscall ClockShadowWin::ClockShadowWin(ClockShadowWin *this);
void __thiscall ClockShadowWin::_ClockShadowWin(ClockShadowWin *this);
void __thiscall ClockShadowWin::ResetVertex(ClockShadowWin *this);
void __thiscall ClockShadowWin::Start(ClockShadowWin *this, float fCurTime, float fRoateTime, float fStartTime);
void __thiscall ClockShadowWin::HideTri(ClockShadowWin *this, unsigned int uiTriPart);
void __thiscall ClockShadowWin::ChangeTriVertex(ClockShadowWin *this, unsigned int uiTriPart, float fX, float fY);
void __thiscall ClockShadowWin::UpdateMeWin(ClockShadowWin *this, float fCurTime);
int __stdcall loc_4E733F(float fPastTime); // weak
int __stdcall loc_4E7391(float fPastTime); // weak
int __stdcall loc_4E73B0(float fPastTime); // weak
int __stdcall loc_4E7414(float fPastTime); // weak
int __stdcall loc_4E7433(float fPastTime); // weak
int __stdcall loc_4E7497(float fPastTime); // weak
int __stdcall loc_4E74B6(float fPastTime); // weak
int __stdcall loc_4E7500(float fPastTime); // weak
void __thiscall ClockShadowWin::CreateGeometry(ClockShadowWin *this);
bool __thiscall ClockShadowWin::Create(ClockShadowWin *this, int iXPos, int iYPos, PgWin *pkParent);
ClockShadowWin *__cdecl ClockShadowWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
void __thiscall NiGeometry::SetModelBound(NiGeometry *this, NiBound *kBound);
void *__thiscall ClockShadowWin::_scalar_deleting_destructor_(ClockShadowWin *this, unsigned int);
void __thiscall CollectCardWin::OnShowWin(CollectCardWin *this);
void __thiscall CollectCardWin::SetUnidentified(CollectCardWin *this, bool bUnidentified);
void __thiscall CollectCardWin::SetName(CollectCardWin *this, const char *pcName);
bool __thiscall CollectCardWin::IsSameCard(CollectCardWin *this, unsigned int uiCardID, unsigned int uiSerial);
bool __thiscall CollectCardWin::IsPlay(CollectCardWin *this);
bool __thiscall CollectCardWin::IsOpen(CollectCardWin *this);
void __thiscall CollectCardWin::OpenCard(CollectCardWin *this);
void __thiscall CollectCardWin::ProcessMeInput(CollectCardWin *this, bool *bHit);
void __thiscall CollectCardWin::UpdateOpen(CollectCardWin *this, float fCurTime);
NiSourceTexture *__thiscall CollectCardWin::LoadImageFile(CollectCardWin *this, const char *pcFileName);
void __thiscall CollectCardWin::SetBoard(CollectCardWin *this, unsigned int uiGrade);
void __thiscall CollectCardWin::SetStar(CollectCardWin *this, unsigned int uiStar);
void __thiscall CollectCardWin::Reset(CollectCardWin *this);
void __thiscall CollectCardWin::ResetEffect(CollectCardWin *this);
void __thiscall CollectCardWin::SetType(CollectCardWin *this, const char *pcMobInx);
void __thiscall CollectCardWin::PlayCardEffect(CollectCardWin *this);
void __thiscall CollectCardWin::_CollectCardWin(CollectCardWin *this);
void __thiscall CollectCardWin::CollectCardWin(CollectCardWin *this);
CollectCardWin *__cdecl CollectCardWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall CollectCardWin::Create(CollectCardWin *this, PgFrameWork *pkFrameWork);
void __thiscall CollectCardWin::SetSerial(CollectCardWin *this, unsigned int uiSerial, unsigned int uiSeason, unsigned int uiGrade);
void __thiscall CollectCardWin::SetDesc(CollectCardWin *this, char *pcDesc);
void __thiscall CollectCardWin::SetInfo(CollectCardWin *this, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, bool bUnidentified);
void __thiscall CollectCardWin::UpdatePlay(CollectCardWin *this, float fCurTime);
void __thiscall CollectCardWin::UpdateMeWin(CollectCardWin *this, float fCurTime);
CollectCardGroupDesc *__cdecl CollectCardGroupDescTab::GetByCardMobGroup(CardMobGroupIndex Type);
void *__thiscall CollectCardWin::_vector_deleting_destructor_(CollectCardWin *this, unsigned int);
void __thiscall CardSlotWin::Select(CardSlotWin *this, bool bSelect);
void __thiscall CollectRwItemWin::CollectRwItemWin(CollectRwItemWin *this);
void __thiscall CollectRwItemWin::_CollectRwItemWin(CollectRwItemWin *this);
CollectRwItemWin::eRewardStateType __thiscall CollectRwItemWin::GetState(CollectRwItemWin *this);
void __thiscall CollectRwItemWin::Reset(CollectRwItemWin *this);
void __thiscall CollectRwChoiceInv::CollectRwChoiceInv(CollectRwChoiceInv *this);
void __thiscall CollectRwChoiceInv::_CollectRwChoiceInv(CollectRwChoiceInv *this);
void __thiscall CollectRwChoiceInv::Select(CollectRwChoiceInv *this, bool bSelect);
void __thiscall CollectRwChoiceWin::OnCancel(CollectRwChoiceWin *this);
void __thiscall CollectCardChoiceWin::OnCancel(CollectCardChoiceWin *this);
void __thiscall CollectPopupWin::CollectPopupWin(CollectPopupWin *this);
void __thiscall CollectPopupWin::_CollectPopupWin(CollectPopupWin *this);
void __thiscall CollectPopupWin::OnCommand(CollectPopupWin *this, unsigned int wParam, int lParam);
void __thiscall CollectPopupWin::UpdateMeWin(CollectPopupWin *this, float fCurTime);
void __thiscall CollectPopupWin::SetText(CollectPopupWin *this, const char *pcText);
NiSourceTexture *__thiscall CardSlotWin::LoadImageFile(CardSlotWin *this, const char *pcFileName);
void __thiscall CardSlotWin::Reset(CardSlotWin *this);
bool __thiscall CollectRwItemWin::Create(CollectRwItemWin *this, NiNode *pkNode, const char *pcAbleName, const char *pcDisableName, const char *pcEffectName, PgWin *pkParent, int iCommandMsg);
void __thiscall CollectRwItemWin::SetState(CollectRwItemWin *this, CollectRwItemWin::eRewardStateType eType);
void __thiscall CollectPageWin::ResetPageNum(CollectPageWin *this);
void __thiscall CollectPageWin::Update(CollectPageWin *this);
bool __thiscall CollectRwChoiceInv::Create(CollectRwChoiceInv *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall CollectRwChoiceInv::UpdateMeWin(CollectRwChoiceInv *this, float fCurTime);
void __thiscall CollectRwChoiceWin::OnOK(CollectRwChoiceWin *this);
void __thiscall CollectRwChoiceWin::OnSelectItem(CollectRwChoiceWin *this, unsigned int uiIndex);
void __thiscall CollectRwChoiceWin::ResetItem(CollectRwChoiceWin *this);
void __thiscall CollectCardChoiceWin::Reset(CollectCardChoiceWin *this);
CollectCardChoiceWin::sRegistCardInfo *__thiscall CollectCardChoiceWin::GetRegistCardInfoByGrade(CollectCardChoiceWin *this, unsigned int uiGrade, unsigned int uiIndex);
unsigned int __thiscall CollectCardChoiceWin::GetRegistCardInfoCountByGrade(CollectCardChoiceWin *this, unsigned int uiGrade);
void __thiscall CollectPopupWin::OnShowWin(CollectPopupWin *this);
void __thiscall CollectPageWin::OnPageNum(CollectPageWin *this, unsigned int uiPage);
void __thiscall CollectPageWin::OnPageArrow(CollectPageWin *this, CollectPageWin::ePageArrowType eType);
void __thiscall CollectRwChoiceWin::OnCommand(CollectRwChoiceWin *this, unsigned int wParam, int lParam);
void __thiscall CollectCardChoiceWin::OnOK(CollectCardChoiceWin *this);
void __thiscall CollectCardChoiceWin::OnSelectSlot(CollectCardChoiceWin *this, unsigned int uiSlot);
bool __thiscall CollectPopupWin::Create(CollectPopupWin *this, PgFrameWork *pkFrameWork);
void __thiscall CollectPageWin::OnCommand(CollectPageWin *this, unsigned int wParam, int lParam);
void __thiscall CardSlotWin::_CardSlotWin(CardSlotWin *this);
CollectRwItemWin *__cdecl CollectRwItemWin::CreateWin(NiNode *pkNode, const char *pcAbleName, const char *pcDisableName, const char *pcEffectName, PgWin *pkParent, int iCommandMsg);
void __thiscall CollectPageWin::_CollectPageWin(CollectPageWin *this);
CollectRwChoiceInv *__cdecl CollectRwChoiceInv::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
void __thiscall CollectRwChoiceWin::_CollectRwChoiceWin(CollectRwChoiceWin *this);
bool __thiscall CollectRwChoiceWin::Create(CollectRwChoiceWin *this, PgFrameWork *pkFrameWork);
CollectPopupWin *__cdecl CollectPopupWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall CardSlotWin::CardSlotWin(CardSlotWin *this);
CardSlotWin *__cdecl CardSlotWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent, unsigned int uiIndex, unsigned int uiCommandMsg, unsigned int uiRCommandMsg);
void __thiscall CollectPageWin::CollectPageWin(CollectPageWin *this);
CollectPageWin *__cdecl CollectPageWin::CreateWin(NiNode *pkNode, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent);
void __thiscall CollectRwChoiceWin::CollectRwChoiceWin(CollectRwChoiceWin *this);
CollectRwChoiceWin *__cdecl CollectRwChoiceWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall CardSlotWin::Create(CardSlotWin *this, int iXPos, int iYPos, PgWin *pkParent, unsigned int uiIndex, unsigned int uiCommandMsg, unsigned int uiRCommandMsg);
void __thiscall CardSlotWin::SetInfo(CardSlotWin *this, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime);
bool __thiscall CollectPageWin::Create(CollectPageWin *this, NiNode *pkNode, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent);
bool __thiscall CollectCardChoiceWin::Create(CollectCardChoiceWin *this, PgFrameWork *pkFrameWork);
void __thiscall CollectCardChoiceWin::UpdateGrade(CollectCardChoiceWin *this, unsigned int uiGrade);
void __thiscall CollectRwChoiceWin::Update(CollectRwChoiceWin *this);
void __thiscall CollectCardChoiceWin::CollectCardChoiceWin(CollectCardChoiceWin *this);
void __thiscall CollectCardChoiceWin::_CollectCardChoiceWin(CollectCardChoiceWin *this);
CollectCardChoiceWin *__cdecl CollectCardChoiceWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall CollectCardChoiceWin::OnSelectGrade(CollectCardChoiceWin *this, unsigned int uiGrade);
void __thiscall CollectCardChoiceWin::ClearInfo(CollectCardChoiceWin *this);
void __thiscall CollectRwChoiceWin::SetReward(CollectRwChoiceWin *this, unsigned int uiRewardID, bool bEnable);
void __thiscall CollectCardChoiceWin::OnShowWin(CollectCardChoiceWin *this);
void __thiscall CollectCardChoiceWin::OnCommand(CollectCardChoiceWin *this, unsigned int wParam, int lParam);
void __thiscall CollectCardChoiceWin::InsertInfo(CollectCardChoiceWin *this, unsigned int uiGrade, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime);
void *__thiscall CollectRwItemWin::_vector_deleting_destructor_(CollectRwItemWin *this, unsigned int);
void *__thiscall CollectRwChoiceInv::_scalar_deleting_destructor_(CollectRwChoiceInv *this, unsigned int);
void *__thiscall CollectPopupWin::_scalar_deleting_destructor_(CollectPopupWin *this, unsigned int);
unsigned int __cdecl CollectCardRewardTab::GetCountByRewardID(unsigned int uiRewardID);
CollectWin::sCardInfo *__thiscall std::allocator<CollectWin::sCardInfo>::allocate(std::allocator<CollectWin::sCardInfo> *this, unsigned int _Count);
void *__thiscall CardSlotWin::_vector_deleting_destructor_(CardSlotWin *this, unsigned int);
void *__thiscall CollectPageWin::_scalar_deleting_destructor_(CollectPageWin *this, unsigned int);
void *__thiscall CollectRwChoiceWin::_vector_deleting_destructor_(CollectRwChoiceWin *this, unsigned int);
void __thiscall std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::reserve(std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *this, unsigned int _Count);
void __thiscall std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::_Reserve(std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *this, unsigned int _Count);
void __thiscall std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::push_back(std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *this, CollectCardChoiceWin::sRegistCardInfo *_Val);
void *__thiscall CollectCardChoiceWin::_scalar_deleting_destructor_(CollectCardChoiceWin *this, unsigned int);
bool __cdecl CollectWin::sNewestInfo::SortRegistTime(CollectWin::sNewestInfo *lhw, CollectWin::sNewestInfo *rhw);
void __thiscall CollectCardListWin::OnPopupCardMenu(CollectCardListWin *this, unsigned int uiSlot);
void __thiscall CollectCardListWin::OnRemoveBookmark(CollectCardListWin *this);
void __thiscall CollectCardListWin::SetPage(CollectCardListWin *this, unsigned int uiPage, unsigned int uiLastPage, unsigned int uiUpdateMsg, unsigned int uiUpdateMsgParam);
void __thiscall CollectCardListWin::SetPage(CollectCardListWin *this, unsigned int uiPage);
unsigned int __thiscall CollectCardListWin::GetPage(CollectCardListWin *this);
void __thiscall CollectWin::OnHelpLink(CollectWin *this);
unsigned int __thiscall CollectWin::ConvertRewardGrade(CollectWin *this, unsigned int uiGrade);
void __thiscall CollectMainWin::OnSelectCard(CollectMainWin *this, unsigned int uiSlot);
void __thiscall CollectMainWin::ResetCard(CollectMainWin *this);
void __thiscall CollectMainWin::SetNewest(CollectMainWin *this, unsigned int uiSlot, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime);
void __thiscall CollectCardListWin::SetCard(CollectCardListWin *this, unsigned int uiSlot, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime);
void __thiscall CollectCardListWin::ResetReward(CollectCardListWin *this);
void __thiscall CollectCardListWin::ResetCard(CollectCardListWin *this);
void __thiscall CollectWin::SetBookmark(CollectWin *this, unsigned int uiSlot, unsigned int uiCardID);
void __thiscall CollectWin::SetReward(CollectWin *this, unsigned int uiRewardID, bool bCompleted);
void __thiscall CollectWin::SetCard(CollectWin *this, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime);
CollectWin::sRewardInfo *__thiscall CollectWin::GetRewardInfoByGrade(CollectWin *this, unsigned int uiRewardGrade);
CollectWin::sCardInfo *__thiscall CollectWin::GetCardInfoByCardID(CollectWin *this, unsigned int uiCardID);
unsigned int __thiscall CollectWin::GetRegistCountByGrade(CollectWin *this, unsigned int uiGrade);
void __thiscall CollectMainWin::OnCheckRewardGrade(CollectMainWin *this, unsigned int uiRewardGrade);
void __thiscall CollectMainWin::OnSelectRewardItem(CollectMainWin *this);
void __thiscall CollectMainWin::OnSelectRewardArrow(CollectMainWin *this, CollectMainWin::eRewardArrowType eType);
void __thiscall CollectMainWin::Reset(CollectMainWin *this);
void __thiscall CollectMainWin::SetReward(CollectMainWin *this, unsigned int uiRewardID, unsigned int uiCount, unsigned int uiPrevCount, unsigned int uiRegistCount, bool bCompleted);
void __thiscall CollectMainWin::SetRewardGrade(CollectMainWin *this, unsigned int uiRewardGrade);
bool __thiscall CollectCardListWin::Create(CollectCardListWin *this, NiNode *pkNode, PgWin *pkParent, bool bPeeping);
void __thiscall CollectCardListWin::OnSelectRewardItem(CollectCardListWin *this);
void __thiscall CollectCardListWin::SetType(CollectCardListWin *this, CollectCardListWin::eCardListType eType, unsigned int uiGrade);
void __thiscall CollectWin::UpdateBookmark(CollectWin *this);
void __thiscall CollectMainWin::OnCommand(CollectMainWin *this, unsigned int wParam, int lParam);
void __thiscall CollectMainWin::InitBar(CollectMainWin *this);
void __thiscall CollectMainWin::SetBar(CollectMainWin *this, unsigned int uiGrade, float fValue);
void __thiscall CollectMainWin::UpdateBar(CollectMainWin *this);
void __thiscall CollectMainWin::_CollectMainWin(CollectMainWin *this);
void __thiscall CollectCardListWin::_CollectCardListWin(CollectCardListWin *this);
void __thiscall CollectMainWin::CollectMainWin(CollectMainWin *this);
CollectMainWin *__cdecl CollectMainWin::CreateWin(NiNode *pkNode, PgWin *pkParent, bool bPeeping);
void __thiscall CollectCardListWin::CollectCardListWin(CollectCardListWin *this);
CollectCardListWin *__cdecl CollectCardListWin::CreateWin(NiNode *pkNode, PgWin *pkParent, bool bPeeping);
void __thiscall CollectWin::InitBookmarkInfo(CollectWin *this);
bool __thiscall CollectMainWin::Create(CollectMainWin *this, NiNode *pkNode, PgWin *pkParent, bool bPeeping);
void __thiscall CollectMainWin::UpdateCheckBox(CollectMainWin *this);
void __thiscall CollectWin::SetNewest(CollectWin *this, int tRegistTime, unsigned int uiCardID);
void __thiscall CollectMainWin::Update(CollectMainWin *this);
void __thiscall CollectCardListWin::OnSelectCard(CollectCardListWin *this, unsigned int uiSlotIndex);
void __thiscall CollectCardListWin::OnRegistBookmark(CollectCardListWin *this, unsigned int uiSlotIndex);
void __thiscall CollectCardListWin::OnChangeBookmark(CollectCardListWin *this);
void __thiscall CollectCardListWin::SetReward(CollectCardListWin *this, unsigned int uiRewardID, unsigned int uiCount, unsigned int uiRegistCount);
void __thiscall CollectWin::CollectWin(CollectWin *this);
void __thiscall CollectWin::_CollectWin(CollectWin *this);
CollectWin *__cdecl CollectWin::CreateWin(PgFrameWork *pkFrameWork, bool bPeeping);
void __thiscall CollectWin::InitNewestInfo(CollectWin *this);
void __thiscall CollectCardListWin::OnCommand(CollectCardListWin *this, unsigned int wParam, int lParam);
void __thiscall CollectCardListWin::DirectMessage(CollectCardListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall CollectWin::InitRewardInfo(CollectWin *this);
void __thiscall CollectWin::InitCardInfo(CollectWin *this);
void __thiscall CollectWin::UpdateGrade(CollectWin *this, unsigned int uiGrade);
void __thiscall CollectWin::InitInfo(CollectWin *this);
void __thiscall CollectWin::UpdateMain(CollectWin *this, unsigned int uiRewardGrade);
void __thiscall CollectWin::OnSelectMenu(CollectWin *this, CollectWin::eMenuType eType);
void __thiscall CollectWin::SetRegistPage(CollectWin *this, unsigned int uiCardID);
void __thiscall CollectWin::Update(CollectWin *this, unsigned int uiGrade);
bool __thiscall CollectWin::Create(CollectWin *this, PgFrameWork *pkFrameWork, bool bPeeping);
void __thiscall CollectWin::OnCommand(CollectWin *this, unsigned int wParam, int lParam);
void __thiscall CollectWin::OnShowWin(CollectWin *this);
unsigned int __cdecl CollectCardTab::GetCountByGrade(unsigned int uiGrade);
unsigned int __cdecl CollectCardRewardTab::GetCountByRewardGrade(unsigned int uiRewardGrade);
CollectCardChoiceWin::sRegistCardInfo *__cdecl std::_Move<CollectWin::sCardInfo___CollectWin::sCardInfo__>(CollectCardChoiceWin::sRegistCardInfo *_First, CollectCardChoiceWin::sRegistCardInfo *_Last, CollectCardChoiceWin::sRegistCardInfo *_Dest);
CollectCardChoiceWin::sRegistCardInfo *__cdecl std::_Uninit_move<CollectCardChoiceWin::sRegistCardInfo___CollectCardChoiceWin::sRegistCardInfo___std::allocator<CollectCardChoiceWin::sRegistCardInfo>_CollectCardChoiceWin::sRegistCardInfo>(CollectCardChoiceWin::sRegistCardInfo *_First, CollectCardChoiceWin::sRegistCardInfo *_Last, CollectCardChoiceWin::sRegistCardInfo *_Dest, std::allocator<CollectCardChoiceWin::sRegistCardInfo> *_Al, CollectCardChoiceWin::sRegistCardInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Uninit_def_fill_n<CollectWin::sCardInfo___unsigned_int_CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>_CollectWin::sCardInfo>(CollectWin::sCardInfo *_First, unsigned int _Count, CollectWin::sCardInfo *__formal, std::allocator<CollectWin::sCardInfo> *_Al, CollectWin::sCardInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Uninit_def_fill_n<CollectWin::sNewestInfo___int_CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>_CollectWin::sNewestInfo>(CollectWin::sNewestInfo *_First, int _Count, CollectWin::sNewestInfo *__formal, std::allocator<CollectWin::sNewestInfo> *_Al, CollectWin::sNewestInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this);
std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *__thiscall std::_List_val<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::_Buynode(std::_List_val<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> > *this, std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *_Next, std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *_Prev, GameFrameWork::AttackedMsg::AttackedFrom *_Val);
void __thiscall std::vector<PgWinText___std::allocator<PgWinText__>>::resize(std::vector<NiTimeController *,std::allocator<NiTimeController *> > *this, unsigned int _Newsize);
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::pop_back(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this);
std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *__thiscall std::_List_val<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::_Buynode(std::_List_val<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *_Next, std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *_Prev);
void *__thiscall CollectMainWin::_vector_deleting_destructor_(CollectMainWin *this, unsigned int);
void *__thiscall CollectCardListWin::_vector_deleting_destructor_(CollectCardListWin *this, unsigned int);
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::merge<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *_Right, bool (__cdecl *_Pred)(CollectWin::sNewestInfo *, CollectWin::sNewestInfo *));
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::resize(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, unsigned int _Newsize);
void __thiscall std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::resize(std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *this, unsigned int _Newsize);
void *__thiscall CollectWin::_vector_deleting_destructor_(CollectWin *this, unsigned int);
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::sort<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, bool (__cdecl *_Pred)(CollectWin::sNewestInfo *, CollectWin::sNewestInfo *));
bool __thiscall DesktopWin::Create(DesktopWin *this, unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork);
void __thiscall DesktopWin::DesktopWin(DesktopWin *this);
void __thiscall DesktopWin::_DesktopWin(DesktopWin *this);
void __thiscall ItemDropTask::DirectMessage(ItemDropTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall DesktopWin::ProcessMeInput(DesktopWin *this, bool *bHit);
void __thiscall ItemDropTask::OnStart(ItemDropTask *this);
bool __thiscall ItemDropTask::OnProcessNetMsg(ItemDropTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall ItemDropTask::ItemDropTask(ItemDropTask *this, ITEM_INVEN *rkInven, unsigned int dwLot, unsigned int dwDropPosX, unsigned int dwDropPosY);
bool __thiscall DesktopWin::EatDropInstance(DesktopWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
DesktopWin *__cdecl DesktopWin::CreateWin(unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork);
void *__thiscall DesktopWin::_scalar_deleting_destructor_(DesktopWin *this, unsigned int);
void __thiscall DivideWin::OnCmdCancel(DivideWin *this);
void __thiscall DivideWin::GetValueFromEdit(DivideWin *this);
void __thiscall DivideWin::SetValueToEdit(DivideWin *this);
void __thiscall DivideWin::SetValueToEdit(DivideWin *this, unsigned int num);
void __thiscall DivideWin::OnClose(DivideWin *this);
void __thiscall DivideWin::Open(DivideWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiMax, char *pcText);
void __thiscall DivideWin::_DivideWin(DivideWin *this);
bool __thiscall DivideWin::Create(DivideWin *this, PgFrameWork *pkFrameWork);
void __thiscall DivideWin::OnCmdOk(DivideWin *this);
void __thiscall DivideWin::OnEditEnd(DivideWin *this, unsigned int wParam, int lParam);
void __thiscall DivideWin::DivideWin(DivideWin *this);
void __thiscall DivideWin::OnCommand(DivideWin *this, unsigned int wParam, int lParam);
DivideWin *__cdecl DivideWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall DivideWin::_scalar_deleting_destructor_(DivideWin *this, unsigned int);
void __thiscall EnchantGemToolTipWin::EnchantGemToolTipWin(EnchantGemToolTipWin *this);
void __thiscall EnchantGemToolTipWin::_EnchantGemToolTipWin(EnchantGemToolTipWin *this);
void __thiscall EnchantGemToolTipWin::Clear(EnchantGemToolTipWin *this);
void __thiscall EnchantGemWin::EnchantGemWin(EnchantGemWin *this);
void __thiscall EnchantGemWin::_EnchantGemWin(EnchantGemWin *this);
void __thiscall EnchantGemWin::OnQuit(EnchantGemWin *this);
void __thiscall EnchantGemWin::SignGemFailed(EnchantGemWin *this, ITEM_INVEN *rkLicenseInven);
void __thiscall EnchantGemDeleteWin::SetClearItemInven(EnchantGemDeleteWin *this, ITEM_INVEN *rkInven);
void __thiscall EnchantGemWin::OnSetEnchantGem(EnchantGemWin *this, SHINE_ITEM_STRUCT *kStruct, void *pvBody);
void __thiscall EnchantGemWin::OnSend2EndOfTrade(EnchantGemWin *this);
void __thiscall EnchantGemWin::OnCommand(EnchantGemWin *this, unsigned int wParam, int lParam);
void __thiscall EnchantGemWin::ResetContents(EnchantGemWin *this);
void __thiscall EnchantGemWin::SignGemSuccess(EnchantGemWin *this, ITEM_INVEN *rkLicenseInven, Item *pkWeapon);
bool __thiscall EnchantGemToolTipWin::Create(EnchantGemToolTipWin *this, PgFrameWork *pkFrameWork);
bool __thiscall EnchantGemToolTipWin::SetEnchantGemDesc(EnchantGemToolTipWin *this, Item *pkWeaponItem);
bool __thiscall EnchantGemWin::Create(EnchantGemWin *this, PgFrameWork *pkFrameWork, unsigned int uiSlotNum);
void __thiscall EnchantGemWin::DirectMessage(EnchantGemWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall EnchantGemWin::SetEnchantGem(EnchantGemWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID);
void __thiscall EnchantGemWin::OnRegBtn(EnchantGemWin *this, int iIndex);
void __thiscall EnchantGemWin::OnClose(EnchantGemWin *this);
bool __thiscall EnchantGemDeleteWin::Create(EnchantGemDeleteWin *this, PgFrameWork *pkFrameWork, unsigned int uiSlotNum);
void __thiscall EnchantGemDeleteWin::OnRegBtn(EnchantGemDeleteWin *this, int iIndex);
void __thiscall EnchantGemDeleteWin::SetEnchantGem(EnchantGemDeleteWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID);
void __thiscall EnchantGemWin::OnShowWin(EnchantGemWin *this);
EnchantGemToolTipWin *__cdecl EnchantGemToolTipWin::CreateWin(PgFrameWork *pkFrameWork);
EnchantGemWin *__cdecl EnchantGemWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int uiSlotNum);
EnchantGemDeleteWin *__cdecl EnchantGemDeleteWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int uiSlotNum);
void *__thiscall EnchantGemToolTipWin::_vector_deleting_destructor_(EnchantGemToolTipWin *this, unsigned int);
void *__thiscall EnchantGemWin::_vector_deleting_destructor_(EnchantGemDeleteWin *this, unsigned int);
void __thiscall EventFriendWin::EventFriendWin(EventFriendWin *this);
void __thiscall EventFriendWin::_EventFriendWin(EventFriendWin *this);
void __thiscall EventFriendWin::OnCmdCancel(EventFriendWin *this);
void __thiscall EventFriendWin::SetEnableRequestButton(EventFriendWin *this, bool b);
void __thiscall EventFriendWin::ShowCheck(EventFriendWin *this, bool b);
void __thiscall EventFriendWin::OnClose(EventFriendWin *this);
bool __thiscall EventFriendWin::Create(EventFriendWin *this, PgFrameWork *pkFrameWork);
void __thiscall EventFriendWin::OnCmdOk(EventFriendWin *this);
void __thiscall EventFriendWin::OnCommand(EventFriendWin *this, unsigned int wParam, int lParam);
EventFriendWin *__cdecl EventFriendWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall EventFriendWin::_vector_deleting_destructor_(EventFriendWin *this, unsigned int);
void __thiscall FeedMoverWin::DirectMessage(FeedMoverWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall FeedMoverWin::Normalize(FeedMoverWin *this, bool b);
void __thiscall FeedMoverWin::_FeedMoverWin(FeedMoverWin *this);
void __thiscall FeedMoverWin::EnableMoverFaceAni(FeedMoverWin *this);
void __thiscall FeedMoverWin::ProcessMeInput(FeedMoverWin *this, bool *bHit);
void __thiscall FeedMoverWin::UpdateFaceCut(FeedMoverWin *this);
void __thiscall FeedMoverWin::FeedMoverWin(FeedMoverWin *this);
bool __thiscall FeedMoverWin::Create(FeedMoverWin *this, PgFrameWork *pkFrameWork);
void __thiscall FeedMoverWin::UpdateMeWin(FeedMoverWin *this, float fCurTime);
void __thiscall FeedMoverWin::UpdateMoverSpeed(FeedMoverWin *this);
void __thiscall FeedMoverWin::UpdateHungryPoint(FeedMoverWin *this);
FeedMoverWin *__cdecl FeedMoverWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall FeedMoverWin::EatDropInstance(FeedMoverWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall FeedMoverWin::UpdateMover(FeedMoverWin *this);
MoverMain *__cdecl MoverMainTab::GetByMoverID(unsigned int kMoverID);
MoverUpgradeEffect *__cdecl MoverUpgradeEffectTab::GetByGrade(char nGrade);
void *__thiscall FeedMoverWin::_scalar_deleting_destructor_(FeedMoverWin *this, unsigned int);
MoverView *__cdecl MoverViewTab::GetByMoverIdx(const char *pcMoverIdx);
void __thiscall FreeStatView::FreeStatView(FreeStatView *this);
void __thiscall FreeStatView::_FreeStatView(FreeStatView *this);
void __thiscall FreeStatView::ClearText(FreeStatView *this);
bool __thiscall FreeStatView::SetTipText(FreeStatView *this, int nLine, char *pcText, int r, int g, int b, Font::Type font);
void __thiscall FreeStatView::OnCommand(FreeStatView *this, unsigned int wParam, int lParam);
char *__cdecl GetIntSignedStr(int iValue);
char *__cdecl GetFloatSignedStr(float fValue);
bool __thiscall FreeStatView::SetText(FreeStatView *this, int nLine, char *pcText);
void __thiscall FreeStatView::AdjustSize(FreeStatView *this);
bool __thiscall FreeStatView::Create(FreeStatView *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight);
void __thiscall FreeStatView::SetFreeStatPoint(FreeStatView *this, User::FreeStatPoint *rkPoint);
void __thiscall FreeStatView::UpdateMeWin(FreeStatView *this, float fCurTime);
void __thiscall FreeStatView::InitAllTextWin(FreeStatView *this);
FreeStatView *__cdecl FreeStatView::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth);
void *__thiscall FreeStatView::_scalar_deleting_destructor_(FreeStatView *this, unsigned int);
void __thiscall FriendCallWin::FriendCallWin(FriendCallWin *this);
void __thiscall FriendCallWin::_FriendCallWin(FriendCallWin *this);
void __thiscall FriendCallWin::ClearFriendList(FriendCallWin *this);
void __thiscall FriendCallWin::OnHelpLink(FriendCallWin *this);
void __thiscall FriendCallWin::OnSlideBar(FriendCallWin *this);
void __thiscall FriendCallWin::OnCommand(FriendCallWin *this, unsigned int wParam, int lParam);
void __thiscall FriendCallWin::AddListItem_DefInfo(FriendCallWin *this, PROTO_FRIEND_INFO *pdata);
void __thiscall FriendCallWin::UpdateViewList(FriendCallWin *this);
void __thiscall FriendCallWin::ChangeUserName(FriendCallWin *this, Name5 *OldName, Name5 *NewName);
FriendCallWin *__cdecl FriendCallWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall FriendCallWin::AddFriend(FriendCallWin *this, PROTO_FRIEND_INFO *pInfo, bool bListElem);
bool __thiscall FriendCallWin::DelFriend(FriendCallWin *this, Name5 charid);
bool __thiscall FriendCallWin::LoginFriend(FriendCallWin *this, Name5 charid);
bool __thiscall FriendCallWin::LogoutFriend(FriendCallWin *this, Name5 charid);
bool __thiscall FriendCallWin::ChangeMapFriend(FriendCallWin *this, Name5 charid, Name3 mapName);
bool __thiscall FriendCallWin::PartyFriend(FriendCallWin *this, Name5 charid, bool bParty);
bool __thiscall FriendCallWin::LevelChange(FriendCallWin *this, Name5 charid, char Level);
bool __thiscall FriendCallWin::Create(FriendCallWin *this, PgFrameWork *pkFrameWork);
void *__thiscall FriendCallWin::_scalar_deleting_destructor_(FriendCallWin *this, unsigned int);
void __thiscall FriendAddWin::FriendAddWin(FriendAddWin *this);
void __thiscall FriendAddWin::_FriendAddWin(FriendAddWin *this);
void __thiscall FriendAddWin::SetTargetName(FriendAddWin *this, const char *szName);
void __thiscall FriendAddWin::OnClose(FriendAddWin *this);
void __thiscall FriendAddWin::OnShowWin(FriendAddWin *this);
void __thiscall FriendWin::OnSortByTitle01(FriendWin *this);
void __thiscall FriendWin::OnSortByTitle02(FriendWin *this);
void __thiscall FriendWin::OnSortByTitle03(FriendWin *this);
void __thiscall FriendWin::OnSortByTitle04(FriendWin *this);
void __thiscall FriendWin::ClearFriendList(FriendWin *this);
int __thiscall FriendWin::GetReadNum(FriendWin *this, _iobuf *fp, int size);
bool __thiscall FriendWin::WriteOptFile(FriendWin *this, _iobuf *fp, void *pData, unsigned int size);
bool __thiscall FriendWin::IsValidateFile(FriendWin *this, _iobuf *fp, int dataSize);
void __thiscall FriendWin::OnHelpLink(FriendWin *this);
PROTO_FRIEND_INFO *__thiscall FriendWin::GetFriendInfo(FriendWin *this, Name5 *CharID);
void __thiscall FriendWin::FriendFindClear(FriendWin *this);
void __thiscall FriendWin::OnSortByTitle05(FriendWin *this);
void __thiscall FriendWin::OnSortByTitle06(FriendWin *this);
void __thiscall FriendWin::OnFriendPointUse(FriendWin *this);
void __thiscall FriendWin::OnFriendPointHelp(FriendWin *this);
void __thiscall FriendWin::ResetAddBtn(FriendWin *this);
void __thiscall FriendPointTipMsg::FriendPointTipMsg(FriendPointTipMsg *this);
void __thiscall FriendPointTipMsg::_FriendPointTipMsg(FriendPointTipMsg *this);
void __thiscall FriendPointTipMsg::OnCmdOK(FriendPointTipMsg *this);
void __thiscall FriendAddWin::OnFriendAddOk(FriendAddWin *this);
void __thiscall FriendAddWin::OnFriendAddCancel(FriendAddWin *this);
void __thiscall FriendAddWin::OnCommand(FriendAddWin *this, unsigned int wParam, int lParam);
void __thiscall FriendAddWin::OnEditEnd(FriendAddWin *this, unsigned int wParam, int lParam);
void __thiscall FriendWin::ProcessMeInput(FriendWin *this, bool *bHit);
void __thiscall FriendWin::UpdateMeWin(FriendWin *this, float fCurTime);
void __thiscall FriendWin::OnLClick(FriendWin *this, int nItemIndex);
void __thiscall FriendWin::OnRClick(FriendWin *this, int nItemIndex);
void __thiscall FriendWin::OnAddFrnd(FriendWin *this);
void __thiscall FriendWin::OnWinClose(FriendWin *this);
void __thiscall FriendWin::OnSlideBar(FriendWin *this);
void __thiscall FriendWin::OnChangeTab(FriendWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab);
void __thiscall FriendWin::OnTopWin(FriendWin *this);
void __thiscall FriendWin::MakeDefaultOptFile(FriendWin *this);
bool __thiscall FriendWin::SaveOptFile(FriendWin *this);
void __thiscall FriendWin::OnInviterLClick(FriendWin *this, int nItemIndex);
void __thiscall FriendWin::OnInviterRClick(FriendWin *this, int nItemIndex);
void __thiscall FriendWin::OnFindTab(FriendWin *this);
void __thiscall FriendPointTipMsg::OnCommand(FriendPointTipMsg *this, unsigned int wParam, int lParam);
bool __thiscall FriendAddWin::Create(FriendAddWin *this, PgFrameWork *pkFrameWork);
void __thiscall FriendWin::AddListItem_ExtInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata);
void __thiscall FriendWin::OnClickRejectBtn(FriendWin *this);
bool __thiscall FriendWin::LoadOptFile(FriendWin *this);
void __thiscall FriendWin::SetFriendPoint(FriendWin *this, int iFriendPoint);
void __thiscall FriendWin::OnFriendFindAdd(FriendWin *this, int CheckIndex);
void __thiscall FriendWin::OnFriendInviterAdd(FriendWin *this);
bool __thiscall FriendPointTipMsg::Create(FriendPointTipMsg *this);
void __thiscall FriendAddWin::UpdateMeWin(FriendAddWin *this, float fCurTime);
void __thiscall FriendWin::AddListItem_DefInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata);
void __thiscall FriendWin::ViewAllInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata);
void __thiscall FriendWin::AddFindListItem(FriendWin *this, PROTO_FRIEND_INFO *pdata);
void __thiscall FriendWin::SetInviterInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata);
void __thiscall FriendWin::DirectMessage(FriendWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall FriendWin::UpdateViewList(FriendWin *this);
void __thiscall FriendWin::ChangeUserName(FriendWin *this, Name5 *OldName, Name5 *NewName);
void __thiscall FriendWin::UpdateFindList(FriendWin *this, int nIndex);
void __thiscall FriendWin::ResetTitleType(FriendWin *this, int iCnt, int iCondition);
void __thiscall FriendWin::ResetTabType(FriendWin *this, int iCnt, int iCondition);
void __thiscall FriendWin::ShowFindList(FriendWin *this);
FriendAddWin *__cdecl FriendAddWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall FriendWin::_FriendWin(FriendWin *this);
void __thiscall FriendWin::OnAddInfoBtn(FriendWin *this);
void __thiscall FriendWin::OnShowAllFriend(FriendWin *this);
void __thiscall FriendWin::AddFriend(FriendWin *this, PROTO_FRIEND_INFO *pInfo, bool bListElem);
bool __thiscall FriendWin::DelFriend(FriendWin *this, Name5 charid);
bool __thiscall FriendWin::LoginFriend(FriendWin *this, Name5 charid);
bool __thiscall FriendWin::LogoutFriend(FriendWin *this, Name5 charid);
bool __thiscall FriendWin::ChangeMapFriend(FriendWin *this, Name5 charid, Name3 mapName);
bool __thiscall FriendWin::PartyFriend(FriendWin *this, Name5 charid, bool bParty);
bool __thiscall FriendWin::LevelChange(FriendWin *this, Name5 charid, char Level);
void __thiscall FriendWin::AddFindFriend(FriendWin *this, PROTO_FRIEND_INFO *pInfo, int nIndex);
void __thiscall FriendWin::OnListTab(FriendWin *this);
FriendPointTipMsg *__cdecl FriendPointTipMsg::CreateWin();
void __thiscall FriendWin::OnCommand(FriendWin *this, unsigned int wParam, int lParam);
void __thiscall FriendWin::FriendWin(FriendWin *this);
FriendWin *__cdecl FriendWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall FriendWin::Create(FriendWin *this, PgFrameWork *pkFrameWork);
int __thiscall loc_4FFFFB(PgWin *pkParent, int pkFrameWork); // weak
void __thiscall PgTQueue<PgWinMgr::PgWinMsg>::Realloc(PgTQueue<PgWinMgr::PgWinMsg> *this, unsigned int uiNewSize);
void *__thiscall FriendAddWin::_vector_deleting_destructor_(FriendAddWin *this, unsigned int);
void *__thiscall FriendPointTipMsg::_scalar_deleting_destructor_(FriendPointTipMsg *this, unsigned int);
int __thiscall SlideListWin::GetColumPosX(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn);
int __thiscall SlideListWin::GetColumPosY(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn);
void __thiscall PgTQueue<PgWinMgr::PgWinMsg>::Add(PgTQueue<PgWinMgr::PgWinMsg> *this, PgWinMgr::PgWinMsg element);
void *__thiscall FriendWin::_scalar_deleting_destructor_(FriendWin *this, unsigned int);
void __thiscall FullMapWin::OnShowGrid(FullMapWin *this);
bool __thiscall FullMapWin::GetWinPos(FullMapWin *this, float fCharWorldX, float fCharWorldY, float *rfXPos, float *rfYPos);
void __thiscall FullMapWin::OnDestroy(FullMapWin *this);
WorldMapWin *__thiscall FullMapWin::GetWorldMap(FullMapWin *this);
void __thiscall FullMapWin::CloseWorldMap(FullMapWin *this);
void __thiscall FullMapWin::OnShowIndexList(FullMapWin *this);
void __thiscall FullMapWin::ResetQuestNum(FullMapWin *this);
void __thiscall FullMapWin::SetMapScale(FullMapWin *this, float fScale);
void __thiscall FullMapWin::SetMapViewRect(FullMapWin *this, unsigned int dwLeft, unsigned int dwTop, unsigned int dwRight, unsigned int dwBottom);
bool __thiscall FullMapWin::AbbreviateText(FullMapWin *this, char *pResult, const char *pTarget, int nAbbreviationSize);
void __thiscall FullMapWin::OnHelpLink(FullMapWin *this);
bool __thiscall FullMapWin::SearchKQ_MOB(FullMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto);
void __thiscall FullMapWin::UpdateMainCharPos(FullMapWin *this);
void __thiscall FullMapWin::UpdateMainCharDir(FullMapWin *this);
bool __thiscall FullMapWin::IsInNPC(FullMapWin *this, unsigned __int16 kCharHandle);
bool __thiscall FullMapWin::IsInParty(FullMapWin *this, PartyMemberInfo *pkInfo);
PgSprData *__thiscall FullMapWin::GetMapIconSprData(FullMapWin *this, unsigned int kIndex);
void __thiscall FullMapWin::Remove_KQ_MOB(FullMapWin *this, bool b);
void __thiscall FullMapWin::UpdateArea(FullMapWin *this, unsigned int uiIndex);
void __thiscall FullMapWin::UpdateArea(FullMapWin *this, unsigned __int16 Quest_ID, unsigned __int16 Mob_ID);
void __thiscall FullMapWin::UpdateSlideBarMapList(FullMapWin *this);
bool __thiscall FullMapWin::IsSameMapName(FullMapWin *this);
void __thiscall FullMapWin::UpdateRaidPos(FullMapWin *this);
bool __thiscall FullMapWin::IsInRaid(FullMapWin *this, RaidMemberInfo *pkInfo);
void __thiscall FullMapWin::UpdateGTEnemyPos(FullMapWin *this);
void __thiscall FullMapWin::OnMapTransparency(FullMapWin *this);
void __thiscall FullMapWin::SetInvisibleWinAlpha(FullMapWin *this, const float fAlpha);
bool __thiscall InvisibleWin::HitTest(InvisibleWin *this, int iSx, int iSy);
void __thiscall FullMapWin::InitPos(FullMapWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate);
void __thiscall FullMapWin::RemoveNPC(FullMapWin *this, unsigned __int16 handle);
void __thiscall FullMapWin::Add_KQ_MOB(FullMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto);
void __thiscall FullMapWin::AddParty(FullMapWin *this, PartyMemberInfo *pkParty);
void __thiscall FullMapWin::RemoveParty(FullMapWin *this, PartyMemberInfo *pkParty);
void __thiscall FullMapWin::ClearParty(FullMapWin *this);
void __thiscall FullMapWin::ClearWithOutMainChar(FullMapWin *this);
void __thiscall FullMapWin::UpdateNPCPos(FullMapWin *this);
void __thiscall FullMapWin::UpdatePartyPos(FullMapWin *this);
void __thiscall FullMapWin::RemoveMapMark(FullMapWin *this, unsigned int nGroup);
void __thiscall FullMapWin::RemoveAllMapMark(FullMapWin *this);
void __thiscall FullMapWin::UpdateMapMark(FullMapWin *this);
void __thiscall FullMapWin::UpdateKQTeamMark(FullMapWin *this);
void __thiscall FullMapWin::RemoveKQTeamMark(FullMapWin *this, unsigned __int16 kCharHandle);
void __thiscall FullMapWin::RemoveAllKQTeamMark(FullMapWin *this);
void __thiscall FullMapWin::OpenWorldMap(FullMapWin *this);
void __thiscall FullMapWin::ResetQuestHelper(FullMapWin *this);
void __thiscall FullMapWin::AddMapList(FullMapWin *this);
void __thiscall FullMapWin::OnSlideBarMapList(FullMapWin *this);
void __thiscall FullMapWin::UpdateQuestNum(FullMapWin *this);
void __thiscall FullMapWin::CenterPlaceSelectedMap(FullMapWin *this);
void __thiscall FullMapWin::AddRaidMember(FullMapWin *this, RaidMemberInfo *pkRaid);
void __thiscall FullMapWin::RemoveRaidMember(FullMapWin *this, RaidMemberInfo *pkRaid);
void __thiscall FullMapWin::ClearRaidMember(FullMapWin *this);
void __thiscall FullMapWin::ClearGTEnemyPos(FullMapWin *this);
void __thiscall FullMapWin::AddGTEnemyPos(FullMapWin *this, ScanMemberInfo *pkMemberInfo);
void __thiscall InvisibleWin::SetAlpha(InvisibleWin *this, float fAlpha);
void __thiscall InvisibleWin::Init(InvisibleWin *this);
void __thiscall FullMapWin::UpdateMeWin(FullMapWin *this, float fCurTime);
void __thiscall FullMapWin::AddNPC(FullMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto);
void __thiscall FullMapWin::AddMapMark(FullMapWin *this, PROTO_NC_SCENARIO_MAPMARK_CMD *pkProto);
void __thiscall FullMapWin::AddKQTeamMark(FullMapWin *this, unsigned __int16 kCharHandle);
void __thiscall FullMapWin::OnShowMapList(FullMapWin *this);
void __thiscall FullMapWin::OnShowQuestList(FullMapWin *this, bool b);
void __thiscall FullMapWin::UpdateSlideBarQuestList(FullMapWin *this);
void __thiscall FullMapWin::OnShowWin(FullMapWin *this);
void __thiscall FullMapWin::AddNPC(FullMapWin *this, PROTO_NC_BRIEFINFO_MOB_CMD *pkProto);
void __thiscall FullMapWin::UpdateQuestHelper(FullMapWin *this);
void __thiscall FullMapWin::OnQuestListLClick(FullMapWin *this, unsigned int nIndex);
void __thiscall FullMapWin::OnSlideBarQuestList(FullMapWin *this);
void __thiscall FullMapWin::FullMapWin(FullMapWin *this);
void __thiscall FullMapWin::_FullMapWin(FullMapWin *this);
FullMapWin *__cdecl FullMapWin::CreateWin(MiniMapWin *pkMiniMap, PgFrameWork *pkFrameWork);
InvisibleWin *__cdecl InvisibleWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
void __thiscall FullMapWin::InitVisibleControls(FullMapWin *this);
void __thiscall FullMapWin::ResetView(FullMapWin *this, bool bTextureChange);
void __thiscall FullMapWin::AddQuestList(FullMapWin *this);
void __thiscall FullMapWin::AddQuestHelper(FullMapWin *this);
void __thiscall FullMapWin::RemoveQuestHelperMark(FullMapWin *this, QuestHelperMarkWin *pkWin, PgWinSpr *pkNumWin);
void __thiscall FullMapWin::OnMapListLClick(FullMapWin *this, unsigned int nIndex);
void __thiscall FullMapWin::LocationInfo(FullMapWin *this, unsigned __int16 Quest_ID);
void __thiscall FullMapWin::OnCommand(FullMapWin *this, unsigned int wParam, int lParam);
bool __thiscall FullMapWin::Create(FullMapWin *this, MiniMapWin *pkMiniMap, PgFrameWork *pkFrameWork);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *this);
void __thiscall NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key, NiVBSet *val);
void __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::SetAt(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key, KQTeamMarkWin *val);
bool __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::RemoveAt(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key);
bool __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::GetAt(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key, KQTeamMarkWin **val);
unsigned int __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::KeyToHashIndex(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key);
bool __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::IsKeysEqual(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key1, unsigned __int16 key2);
void __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::SetValue(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, NiTMapItem<unsigned short,KQTeamMarkWin *> *pkItem, unsigned __int16 key, KQTeamMarkWin *val);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>(NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>(NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *this, unsigned int);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_NiTListBase<NiTPointerAllocator<unsigned_int>_float>(NiTListBase<NiTPointerAllocator<unsigned int>,float> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,float> *this, unsigned int);
void __thiscall NiPointer<PgWinLRBut>::_default_constructor_closure_(NiPointer<NiD3DTextureStage> *this);
void __thiscall QuestStateImage::_QuestStateImage(QuestStateImage *this);
void __thiscall NiTPointerList<NpcMarkWin__>::_NiTPointerList<NpcMarkWin__>(NiTPointerList<NpcMarkWin *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *this, unsigned int);
void __thiscall NiTPointerList<MobCoordinate__>::_NiTPointerList<MobCoordinate__>(NiTPointerList<MobCoordinate *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *this, unsigned int);
void __thiscall NiTPointerList<float>::_NiTPointerList<float>(NiTPointerList<float> *this);
void *__thiscall PgWinProxy::_scalar_deleting_destructor_(PgWinProxy *this, unsigned int);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::AddTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,float> *this, const float *element);
void __thiscall PgTList<NpcMarkWin__>::_PgTList<NpcMarkWin__>(PgTList<NpcMarkWin *> *this);
void __thiscall NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>(NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *> *this);
void __thiscall NiTMap<unsigned_int_MapMarkWin__>::_NiTMap<unsigned_int_MapMarkWin__>(NiTMap<unsigned int,MapMarkWin *> *this);
void __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this);
void __thiscall NiTMap<unsigned_short_KQTeamMarkWin__>::_NiTMap<unsigned_short_KQTeamMarkWin__>(NiTMap<unsigned short,KQTeamMarkWin *> *this);
void __thiscall PgTList<MobCoordinate__>::_PgTList<MobCoordinate__>(PgTList<MobCoordinate *> *this);
void __thiscall PgTList<float>::_PgTList<float>(PgTList<float> *this);
void *__thiscall NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_scalar_deleting_destructor_(NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *> *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vector_deleting_destructor_(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned int);
void __thiscall NiTPointerMap<unsigned_int_float>::DeleteItem(NiTPointerMap<unsigned int,float> *this, NiTMapItem<unsigned int,float> *pkItem);
void __thiscall NiTPointerList<RaidMarkWin__>::_NiTPointerList<RaidMarkWin__>(NiTPointerList<RaidMarkWin *> *this);
void *__thiscall PgTList<NpcMarkWin__>::_vector_deleting_destructor_(PgTList<NpcMarkWin *> *this, unsigned int);
void __thiscall NiTPointerList<PartyMarkWin__>::_NiTPointerList<PartyMarkWin__>(NiTPointerList<PartyMarkWin *> *this);
void __thiscall NiTPointerList<QuestHelperMarkWin__>::_NiTPointerList<QuestHelperMarkWin__>(NiTPointerList<QuestHelperMarkWin *> *this);
void __thiscall NiTPointerList<PgWinSpr__>::_NiTPointerList<PgWinSpr__>(NiTPointerList<PgWinSpr *> *this);
void __thiscall NiTPointerList<MobAreaMarkWin__>::_NiTPointerList<MobAreaMarkWin__>(NiTPointerList<MobAreaMarkWin *> *this);
void __thiscall NiTPointerList<GTIScanMarkWin__>::_NiTPointerList<GTIScanMarkWin__>(NiTPointerList<GTIScanMarkWin *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *this, unsigned int);
void *__thiscall PgTList<MobCoordinate__>::_scalar_deleting_destructor_(PgTList<MobCoordinate *> *this, unsigned int);
void *__thiscall PgTList<float>::_vector_deleting_destructor_(PgTList<float> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::_vector_deleting_destructor_(NiTPointerList<float> *this, unsigned int);
void *__thiscall NiTMap<unsigned_int_MapMarkWin__>::_vector_deleting_destructor_(NiTMap<unsigned int,MapMarkWin *> *this, unsigned int);
void *__thiscall NiTMap<unsigned_short_KQTeamMarkWin__>::_scalar_deleting_destructor_(NiTMap<unsigned short,KQTeamMarkWin *> *this, unsigned int);
void __thiscall PgTList<RaidMarkWin__>::_PgTList<RaidMarkWin__>(PgTList<RaidMarkWin *> *this);
void __thiscall PgTList<PartyMarkWin__>::_PgTList<PartyMarkWin__>(PgTList<PartyMarkWin *> *this);
void __thiscall PgTList<GTIScanMarkWin__>::_PgTList<GTIScanMarkWin__>(PgTList<GTIScanMarkWin *> *this);
void __thiscall PgTList<QuestHelperMarkWin__>::_PgTList<QuestHelperMarkWin__>(PgTList<QuestHelperMarkWin *> *this);
NiLight *__thiscall NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *this, NiLight *const *element);
void __thiscall PgTList<PgWinSpr__>::_PgTList<PgWinSpr__>(PgTList<PgWinSpr *> *this);
void __thiscall PgTList<MobAreaMarkWin__>::_PgTList<MobAreaMarkWin__>(PgTList<MobAreaMarkWin *> *this);
void *__thiscall PgTList<RaidMarkWin__>::_scalar_deleting_destructor_(PgTList<RaidMarkWin *> *this, unsigned int);
void *__thiscall PgTList<PartyMarkWin__>::_vector_deleting_destructor_(PgTList<PartyMarkWin *> *this, unsigned int);
void *__thiscall PgTList<QuestHelperMarkWin__>::_scalar_deleting_destructor_(PgTList<QuestHelperMarkWin *> *this, unsigned int);
void *__thiscall PgTList<PgWinSpr__>::_vector_deleting_destructor_(PgTList<PgWinSpr *> *this, unsigned int);
void *__thiscall PgTList<MobAreaMarkWin__>::_scalar_deleting_destructor_(PgTList<MobAreaMarkWin *> *this, unsigned int);
void *__thiscall PgTList<GTIScanMarkWin__>::_scalar_deleting_destructor_(PgTList<GTIScanMarkWin *> *this, unsigned int);
void *__thiscall FullMapWin::_vector_deleting_destructor_(FullMapWin *this, unsigned int);
void __thiscall GateChannelWin::Link(GateChannelWin *this, GateChannelWin::BtnMsg BtnIndex);
void __thiscall GateChannelWin::_GateChannelWin(GateChannelWin *this);
void __thiscall GateChannelWin::OnCommand(GateChannelWin *this, unsigned int wParam, int lParam);
void __thiscall GateChannelWin::GateChannelWin(GateChannelWin *this);
bool __thiscall GateChannelWin::Create(GateChannelWin *this, PgFrameWork *pkFrameWork);
void __thiscall GateChannelWin::UpdateMeWin(GateChannelWin *this, float fCurTime);
void __thiscall GateChannelWin::OpenWindow(GateChannelWin *this, PROTO_NC_MAP_MULTY_LINK_CMD *pkProto);
GateChannelWin *__cdecl GateChannelWin::CreateWin(PgFrameWork *pkFrameWork);
PROTO_NC_MAP_MULTY_LINK_CMD *__thiscall PROTO_NC_MAP_MULTY_LINK_CMD::operator_(PROTO_NC_MAP_MULTY_LINK_CMD *this, PROTO_NC_MAP_MULTY_LINK_CMD *__that);
void *__thiscall GateChannelWin::_scalar_deleting_destructor_(GateChannelWin *this, unsigned int);
void __thiscall GatheringWin::GatheringWin(GatheringWin *this);
void __thiscall GatheringWin::Stop(GatheringWin *this);
void __thiscall GatheringWin::GatheringFail(GatheringWin *this);
void __thiscall GatheringWin::GatheringSuccess(GatheringWin *this);
bool __thiscall GatheringWin::IsFinished(GatheringWin *this);
void __thiscall GatheringWin::DirectMessage(GatheringWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall GatheringWin::Create(GatheringWin *this, PgFrameWork *pkFrameWork);
void __thiscall GatheringWin::_GatheringWin(GatheringWin *this);
void __thiscall GatheringWin::StartGathering(GatheringWin *this, unsigned int uiGatheringCycle, unsigned int uiGatheringCount, int iThickness);
void __thiscall GatheringWin::UpdateMeWin(GatheringWin *this, float fCurTime);
int __stdcall loc_50EA40(float fSin); // weak
GatheringWin *__cdecl GatheringWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GatheringWin::_vector_deleting_destructor_(GatheringWin *this, unsigned int);
bool __cdecl GuildListWin::GuildInfo::Low_GuildGrade(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
bool __cdecl GTRequestListWin::GuildInfo::High_GuildTotalMember(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
bool __cdecl GTRequestListWin::GuildInfo::Low_GuildTotalMember(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
void __thiscall GuildListWin::OnPrevPage(GuildListWin *this);
void __thiscall GuildListWin::OnNextPage(GuildListWin *this);
void __thiscall GuildListWin::OnHelpLink(GuildListWin *this);
void __thiscall GuildListWin::UpdateMeWin(GuildListWin *this, float fCurTime);
void __thiscall GuildListWin::OnSlideBar(GuildListWin *this);
void __thiscall GuildListWin::OnSearchChoice(GuildListWin *this);
void __thiscall GuildListWin::OnClose(GuildListWin *this);
void __thiscall GuildListWin::DirectMessage(GuildListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildListWin::AddGuildInfo(GuildListWin *this, GuildListWin::GuildInfo *kGuildInfo);
void __thiscall GuildListWin::DisplayInfoSetting(GuildListWin *this, bool bSearch);
void __thiscall GuildListWin::GuildListWin(GuildListWin *this);
void __thiscall GuildListWin::_GuildListWin(GuildListWin *this);
GuildListWin *__cdecl GuildListWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildListWin::Clear(GuildListWin *this);
void __thiscall GuildListWin::SetGuildList(GuildListWin *this, SHINE_GUILD_LIST_NEW *pkList, unsigned int uiTotalGuild);
void __thiscall GuildListWin::OnSearch(GuildListWin *this);
void __thiscall GuildListWin::ShowFormerList(GuildListWin *this);
bool __thiscall GuildListWin::Create(GuildListWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildListWin::OnCommand(GuildListWin *this, unsigned int wParam, int lParam);
void __thiscall GuildListWin::OnEditEnd(GuildListWin *this, unsigned int wParam, int lParam);
void __thiscall boost::bad_function_call::_bad_function_call(std::ios_base::failure *this);
void __thiscall std::basic_ostream<char_std::char_traits<char>>::_basic_ostream<char_std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char> > *this);
void __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this);
void __thiscall boost::bad_function_call::bad_function_call(boost::bad_function_call *this, boost::bad_function_call *__that);
void *__thiscall std::system_error::_vector_deleting_destructor_(std::ios_base::failure *this, unsigned int);
void *__thiscall std::basic_ostream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_ostream<char,std::char_traits<char> > *this, unsigned int);
int __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::underflow(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this);
std::fpos<int> *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::seekoff(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, std::fpos<int> *result, __int64 _Off, int _Way, int _Which);
std::fpos<int> *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::seekpos(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, std::fpos<int> *result, std::fpos<int> _Ptr, int _Mode);
int __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::overflow(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, int _Meta);
int __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::pbackfail(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, int _Meta);
void *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vector_deleting_destructor_(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int);
RaidMemberInfo *__thiscall std::allocator<GuildAcademySelectWin::GuildInfo>::allocate(std::allocator<RaidMemberInfo> *this, unsigned int _Count);
char *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Ifmt(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, char *_Fmt, const char *_Spec, int _Flags);
void __thiscall std::numpunct<char>::_Tidy(std::numpunct<char> *this);
void *__thiscall std::codecvt<char_char_int>::_vector_deleting_destructor_(std::codecvt<char,char,int> *this, unsigned int);
void __thiscall std::numpunct<char>::_Init(std::numpunct<char> *this, std::_Locinfo *_Lobj, bool _Isdef);
char __thiscall std::numpunct<char>::do_decimal_point(std::numpunct<char> *this);
char __thiscall std::numpunct<char>::do_thousands_sep(std::numpunct<char> *this);
void *__thiscall std::numpunct<char>::_scalar_deleting_destructor_(std::numpunct<char> *this, unsigned int);
void __cdecl boost::throw_exception<boost::bad_function_call>(boost::bad_function_call *e);
boost::detail::function::any_pointer __cdecl boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage(boost::detail::function::any_pointer functor_ptr, boost::detail::function::functor_manager_operation_type op);
bool __cdecl GTRequestListWin::GuildInfo::Low_GuildMasterName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, char _Ch, unsigned int _Count);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::falsename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::truename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, const char *_Ptr, unsigned int _Count);
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Putgrouped(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, const char *_Ptr, unsigned int _Count, char _Kseparator);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::grouping(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
unsigned int __cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc);
unsigned int __cdecl std::numpunct<char>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc);
void __thiscall std::basic_ostream<char_std::char_traits<char>>::_Osfx(std::basic_ostream<char,std::char_traits<char> > *this);
void __thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vbase_destructor(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this);
void *__thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vector_deleting_destructor_(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int);
std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *__cdecl std::use_facet<std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>>(std::locale *_Loc);
std::numpunct<char> *__cdecl std::use_facet<std::numpunct<char>>(std::locale *_Loc);
void __thiscall std::basic_ostream<char_std::char_traits<char>>::sentry::_sentry(std::basic_ostream<char,std::char_traits<char> >::sentry *this);
std::basic_ostream<char,std::char_traits<char> > *__thiscall std::basic_ostream<char_std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char> > *this, unsigned int _Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Iput(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, char *_Buf, unsigned int _Count);
std::basic_ostream<char,std::char_traits<char> > *__cdecl std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char> > *_Ostr, const char *_Val);
std::basic_ostream<char,std::char_traits<char> > *__cdecl std::operator<<<char_std::char_traits<char>_std::allocator<char>>(std::basic_ostream<char,std::char_traits<char> > *_Ostr, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Str);
void __thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this, int _Mode);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, int _Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, unsigned int _Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, __int64 _Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, unsigned __int64 _Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, const void *_Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Fput(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, const char *_Buf, unsigned int _Beforepoint, unsigned int _Afterpoint, unsigned int _Trailing, unsigned int _Count);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, bool _Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, long double _Val);
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, long double _Val);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::do_grouping(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::do_falsename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::do_truename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *__thiscall boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *this, bool (__cdecl *f)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *));
GuildListWin::GuildInfo *__cdecl std::_Move_backward<GuildListWin::GuildInfo___GuildListWin::GuildInfo__>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::str(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
GuildListWin::GuildInfo *__cdecl std::_Uninit_move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo___std::allocator<GuildAcademySelectWin::GuildInfo>_GuildAcademySelectWin::GuildInfo>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, std::allocator<GuildListWin::GuildInfo> *_Al, GuildListWin::GuildInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
void __cdecl std::_Make_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, int *__formal, GuildListWin::GuildInfo *__formal);
void __cdecl std::_Insertion_sort1<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>_GTRequestListWin::GuildInfo>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, GuildListWin::GuildInfo *__formal);
void __cdecl std::_Median<GTRequestListWin::GuildInfo___bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Mid, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *));
void __cdecl std::_Make_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *), int *__formal, GuildListWin::GuildInfo *__formal);
void __cdecl std::_Insertion_sort1<GTRequestListWin::GuildInfo___bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____GTRequestListWin::GuildInfo>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *), GuildListWin::GuildInfo *__formal);
void __cdecl std::make_heap<GuildListWin::GuildInfo___boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Insertion_sort<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> *__cdecl std::_Unguarded_partition<GuildListWin::GuildInfo___bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> *result, GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *));
void __thiscall std::vector<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>::reserve(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this, unsigned int _Count);
void __thiscall std::vector<GuildListWin::GuildInfo_std::allocator<GuildListWin::GuildInfo>>::_Reserve(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this, unsigned int _Count);
void *__thiscall GuildListWin::_vector_deleting_destructor_(GuildListWin *this, unsigned int);
void __thiscall std::vector<GuildAcademySelectWin::GuildInfo_std::allocator<GuildAcademySelectWin::GuildInfo>>::push_back(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this, GuildListWin::GuildInfo *_Val);
void __cdecl std::_Sort<GTRequestListWin::GuildInfo___int_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, int _Ideal, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *));
void __thiscall GuildSelectWin::GuildSelectWin(GuildSelectWin *this);
void __thiscall GuildSelectWin::_GuildSelectWin(GuildSelectWin *this);
void __thiscall GuildSelectWin::OnGuildBtn(GuildSelectWin *this);
void __thiscall GuildSelectWin::OnAcademyBtn(GuildSelectWin *this);
void __thiscall GuildSelectWin::OnHelpLink(GuildSelectWin *this);
void __thiscall GuildSelectWin::OnCommand(GuildSelectWin *this, unsigned int wParam, int lParam);
bool __thiscall GuildSelectWin::Create(GuildSelectWin *this, PgFrameWork *pkFrameWork);
GuildSelectWin *__cdecl GuildSelectWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildSelectWin::_vector_deleting_destructor_(GuildSelectWin *this, unsigned int);
void __thiscall HelpWin::OnClose(HelpWin *this);
void __thiscall HelpWin::ReGenPos(HelpWin *this);
int loc_51686F(); // weak
void __thiscall HelpWin::UpdateWebPos(HelpWin *this);
void __thiscall HelpWin::OnWinClose(HelpWin *this);
void __thiscall HelpWin::UpdateMeWin(HelpWin *this, float fCurTime);
bool __thiscall HelpWin::LoadURL(HelpWin *this);
bool __thiscall HelpWin::Create(HelpWin *this, PgFrameWork *pkFrameWork);
void __thiscall HelpWin::OnCommand(HelpWin *this, unsigned int wParam, int lParam);
void __thiscall HelpWin::HelpWin(HelpWin *this);
void __thiscall HelpWin::_HelpWin(HelpWin *this);
HelpWin *__cdecl HelpWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall HelpWin::OnShowWin(HelpWin *this);
void __thiscall HelpWin::SetWebAddress(HelpWin *this, const char *pcAddress);
void *__thiscall HelpWin::_scalar_deleting_destructor_(HelpWin *this, unsigned int);
void __thiscall HolyPromiseAddWin::HolyPromiseAddWin(HolyPromiseAddWin *this);
void __thiscall HolyPromiseAddWin::_HolyPromiseAddWin(HolyPromiseAddWin *this);
void __thiscall HolyPromiseAddWin::SetTargetName(HolyPromiseAddWin *this, const char *szName);
void __thiscall HolyPromiseAddWin::OnClose(HolyPromiseAddWin *this);
void __thiscall HolyPromiseAddWin::OnShowWin(HolyPromiseAddWin *this);
void __thiscall HolyPromiseWin::OnSortByTitle01(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::OnSortByTitle02(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::OnSortByTitle03(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::OnSortByTitle04(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::ClearHolyPromise(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::UpdateMeWin(HolyPromiseWin *this, float fCurTime);
void __thiscall HolyPromiseWin::OnHelpLink(HolyPromiseWin *this);
void __thiscall HolyPromiseAddWin::OnFriendAddCancel(HolyPromiseAddWin *this);
void __thiscall HolyPromiseWin::OnChangeTab(HolyPromiseWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab);
void __thiscall HolyPromiseWin::OnLClick(HolyPromiseWin *this, int nItemIndex);
void __thiscall HolyPromiseWin::OnRClick(HolyPromiseWin *this, int nItemIndex);
void __thiscall HolyPromiseWin::OnHighRankLClick(HolyPromiseWin *this, int nItemIndex);
void __thiscall HolyPromiseWin::OnHighRankRClick(HolyPromiseWin *this, int nItemIndex);
void __thiscall HolyPromiseWin::OnInviteHighPromise(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::OnSendWhisper(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::OnSlideBar(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::OnTopWin(HolyPromiseWin *this);
bool __thiscall HolyPromiseAddWin::Create(HolyPromiseAddWin *this, PgFrameWork *pkFrameWork);
void __thiscall HolyPromiseAddWin::OnFriendAddOk(HolyPromiseAddWin *this);
void __thiscall HolyPromiseAddWin::OnCommand(HolyPromiseAddWin *this, unsigned int wParam, int lParam);
void __thiscall HolyPromiseAddWin::OnEditEnd(HolyPromiseAddWin *this, unsigned int wParam, int lParam);
void __thiscall HolyPromiseWin::SetHolyPromiseList(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pkData, bool bHighList);
void __thiscall HolyPromiseWin::CheckDay(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pdata, bool bHigh);
void __thiscall HolyPromiseAddWin::UpdateMeWin(HolyPromiseAddWin *this, float fCurTime);
void __thiscall HolyPromiseWin::OnRemovalPromise(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::UpdateViewList(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::ChangeUserName(HolyPromiseWin *this, Name5 *OldName, Name5 *NewName);
void __thiscall HolyPromiseWin::OnCommand(HolyPromiseWin *this, unsigned int wParam, int lParam);
void __thiscall HolyPromiseWin::SetHignHolyPromise(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pkInfo);
void __thiscall HolyPromiseWin::DelHolyPromise(HolyPromiseWin *this, Name5 CharID);
void __thiscall HolyPromiseWin::DelUpHolyPromise(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::AddHolyPromiseList(HolyPromiseWin *this, PROTO_NC_HOLY_PROMISE_LIST_CMD *pInfo);
void __thiscall HolyPromiseWin::AddPromise(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pkInfo);
void __thiscall HolyPromiseWin::SetLogin(HolyPromiseWin *this, Name5 *pCharID);
void __thiscall HolyPromiseWin::SetLogOut(HolyPromiseWin *this, Name5 *pCharID);
void __thiscall HolyPromiseWin::SetLevelChange(HolyPromiseWin *this, Name5 *pCharID, char Level);
HolyPromiseAddWin *__cdecl HolyPromiseAddWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall HolyPromiseWin::DirectMessage(HolyPromiseWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall HolyPromiseWin::SetID(HolyPromiseWin *this, Name5 RequestID, Name5 HighID);
void __thiscall HolyPromiseWin::Terminate(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::_HolyPromiseWin(HolyPromiseWin *this);
void __thiscall HolyPromiseWin::HolyPromiseWin(HolyPromiseWin *this);
HolyPromiseWin *__cdecl HolyPromiseWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall HolyPromiseWin::Create(HolyPromiseWin *this, PgFrameWork *pkFrameWork);
std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Pnode);
std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Pnode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *this);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *this);
void *__thiscall HolyPromiseAddWin::_scalar_deleting_destructor_(HolyPromiseAddWin *this, unsigned int);
void __thiscall PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK::PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK(PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK *this);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Wherenode);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, const unsigned int *_Keyval);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Newnode);
std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Buynode<std::pair<unsigned_int_const_Name5>>(std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::pair<unsigned int const ,Name5> *_Val);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > _Where);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Rootnode);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Node, bool _Leftish);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::clear(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > _Last);
void *__thiscall HolyPromiseWin::_vector_deleting_destructor_(HolyPromiseWin *this, unsigned int);
void __thiscall IDTimeWin::IDTimeWin(IDTimeWin *this);
void __thiscall IDTimeWin::_IDTimeWin(IDTimeWin *this);
void __thiscall IDTimeWin::UpdateMeWin(IDTimeWin *this, float fCurTime);
void __thiscall IDTimeWin::ResetTime(IDTimeWin *this, unsigned int second);
bool __thiscall IDTimeWin::Create(IDTimeWin *this, PgFrameWork *pkFrameWork);
IDTimeWin *__cdecl IDTimeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall IDTimeWin::_scalar_deleting_destructor_(IDTimeWin *this, unsigned int);
void __thiscall IndunLevelSelectWin::sIndunLevelButton::sIndunLevelButton(IndunLevelSelectWin::sIndunLevelButton *this);
void __thiscall IndunLevelSelectWin::sIndunLevelButton::sIndunLevelButton(IndunLevelSelectWin::sIndunLevelButton *this, PgWinBut *pkBtn, PgWinText *pkText, unsigned int uiPos);
void __thiscall IndunLevelSelectWin::sIndunLevelButton::Reset(IndunLevelSelectWin::sIndunLevelButton *this);
void __thiscall IndunLevelSelectWin::sIndunLevelButton::ChangePos(IndunLevelSelectWin::sIndunLevelButton *this, bool bChange);
void __thiscall IndunLevelSelectWin::sIndunLevelButton::SetText(IndunLevelSelectWin::sIndunLevelButton *this, const char *pcText);
void __thiscall IndunLevelSelectWin::sIndunLevelButton::SetParam(IndunLevelSelectWin::sIndunLevelButton *this, unsigned int uiParam);
void __thiscall IndunLevelSelectWin::_IndunLevelSelectWin(IndunLevelSelectWin *this);
void __thiscall IndunLevelSelectWin::OnSelect(IndunLevelSelectWin *this, ID_LEVEL_TYPE eLevelType);
void __thiscall IndunLevelSelectWin::OnCancel(IndunLevelSelectWin *this);
void __thiscall IndunLevelSelectWin::ResetInfo(IndunLevelSelectWin *this);
void __thiscall IndunLevelMsgWin::IndunLevelMsgWin(IndunLevelMsgWin *this);
void __thiscall IndunLevelMsgWin::_IndunLevelMsgWin(IndunLevelMsgWin *this);
void __thiscall IndunLevelMsgWin::ResetInfo(IndunLevelMsgWin *this);
void __thiscall IndunLevelSelectWin::IndunLevelSelectWin(IndunLevelSelectWin *this);
void __thiscall IndunLevelSelectWin::OnCommand(IndunLevelSelectWin *this, unsigned int wParam, int lParam);
void __thiscall IndunLevelMsgWin::OnOk(IndunLevelMsgWin *this);
void __thiscall IndunLevelMsgWin::OnCancel(IndunLevelMsgWin *this);
bool __thiscall IndunLevelSelectWin::Create(IndunLevelSelectWin *this, PgFrameWork *pkFrameWork);
bool __thiscall IndunLevelMsgWin::Create(IndunLevelMsgWin *this, PgFrameWork *pkFrameWork);
void __thiscall IndunLevelMsgWin::OnCommand(IndunLevelMsgWin *this, unsigned int wParam, int lParam);
IndunLevelSelectWin *__cdecl IndunLevelSelectWin::CreateWin(PgFrameWork *pkFrameWork);
IndunLevelMsgWin *__cdecl IndunLevelMsgWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall IndunLevelSelectWin::SetInfo(IndunLevelSelectWin *this, unsigned __int16 kNPCHandle, Name3 kMapIndex, unsigned int uiMenuCount, ID_LEVEL_TYPE *eLevelType);
void __thiscall IndunLevelMsgWin::SetInfo(IndunLevelMsgWin *this, unsigned __int16 kNPCHandle, Name3 kMapIndex, ID_LEVEL_TYPE eLevelType);
void *__thiscall IndunLevelSelectWin::_vector_deleting_destructor_(IndunLevelSelectWin *this, unsigned int);
void *__thiscall IndunLevelMsgWin::_vector_deleting_destructor_(IndunLevelMsgWin *this, unsigned int);
void __thiscall InputTextWin::OnCmdOk(InputTextWin *this);
void __thiscall InputTextWin::OnCmdCancel(InputTextWin *this);
void __thiscall InputTextWin::OnClose(InputTextWin *this);
void __thiscall InputTextWin::OnEditEnd(InputTextWin *this, unsigned int wParam, int lParam);
void __thiscall InputTextWin::OnCommand(InputTextWin *this, unsigned int wParam, int lParam);
void __thiscall InputTextWin::Open(InputTextWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, char *pcText);
void __thiscall InputTextWin::_InputTextWin(InputTextWin *this);
bool __thiscall InputTextWin::Create(InputTextWin *this, PgFrameWork *pkFrameWork);
void __thiscall InputTextWin::InputTextWin(InputTextWin *this);
InputTextWin *__cdecl InputTextWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall InputTextWin::_scalar_deleting_destructor_(InputTextWin *this, unsigned int);
void __thiscall ChargedItemUseTask::OnStart(ChargedItemUseTask *this);
void __thiscall InvWin::SetInvType(InvWin *this, unsigned int uiInvType);
void __thiscall InvWin::SetActive(InvWin *this, bool bActive);
bool __thiscall InvWin::GetActive(InvWin *this);
bool __thiscall InvWin::IsLock(InvWin *this);
void __thiscall InvTabButWin::InvTabButWin(InvTabButWin *this);
void __thiscall InvTabButWin::_InvTabButWin(InvTabButWin *this);
bool __thiscall InvTabButWin::Create(InvTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
void __thiscall ChargedItemIcon::ChargedItemIcon(ChargedItemIcon *this);
void __thiscall ChargedItemIcon::_ChargedItemIcon(ChargedItemIcon *this);
bool __thiscall ChargedItemIcon::Create(ChargedItemIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall ChargedItemIcon::SetChargedItem(ChargedItemIcon *this, unsigned int dwShopItemID);
void __thiscall ChargedItemInvenWin::ChargedItemInvenWin(ChargedItemInvenWin *this);
void __thiscall ChargedItemInvenWin::_ChargedItemInvenWin(ChargedItemInvenWin *this);
void __thiscall ChargedItemInvenWin::SendPageInfoReq(ChargedItemInvenWin *this);
void __thiscall ChargedItemInvenWin::Refresh(ChargedItemInvenWin *this);
void __thiscall ChargedItemInvenWin::DirectMessage(ChargedItemInvenWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ChargedItemInvenWin::OnHelpLink(ChargedItemInvenWin *this);
bool __thiscall CompensationItemIcon::Create(CompensationItemIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall CompensationItemIcon::SetChargedItem(CompensationItemIcon *this, unsigned int dwShopItemID);
void __thiscall CompensationInvWin::CompensationInvWin(CompensationInvWin *this);
void __thiscall CompensationInvWin::_CompensationInvWin(CompensationInvWin *this);
bool __thiscall CompensationInvWin::EatDropInstance(CompensationInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall CompensationInvWin::OnOpenPage(CompensationInvWin *this);
void __thiscall CompensationInvWin::Change(CompensationInvWin *this, Item *pkItem, unsigned int uiInvIndex);
void __thiscall CompensationInvWin::OnHelpLink(CompensationInvWin *this);
bool __thiscall InventoryWin::Change(InventoryWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInputPrivateStoreBuyClientItemCount(InventoryWin *this, unsigned int uiBuyLot);
void __thiscall InventoryWin::RefreshChargedItemInven(InventoryWin *this);
void __thiscall InventoryWin::OnHelpLink(InventoryWin *this);
void __thiscall InventoryWin::SetAutoPickMinimon(InventoryWin *this, const bool bAutoPickMinimon);
bool __thiscall InventoryWin::SetSenderInvPos(InventoryWin *this, unsigned int uiPos);
bool __thiscall InventoryWin::SetReceiverInvPos(InventoryWin *this, unsigned int uiPos);
void __thiscall InventoryWin::OnArrange(InventoryWin *this);
void __thiscall InventoryWin::SetEnableAutoArrange(InventoryWin *this, bool bEnable);
void __thiscall InventoryWin::OnOpenMagicBox(InventoryWin *this);
void __thiscall InventoryWin::ShowRewardNewMark(InventoryWin *this, bool bShow);
void __thiscall InventoryWin::ShowChargedNewMark(InventoryWin *this, bool bShow);
void __thiscall InventoryWin::SetStartNewMark(InventoryWin *this);
bool __thiscall InventoryWin::GetIsViewNewMark(InventoryWin *this);
void __thiscall ChargedItemUseTask::SetChargedInvenIndex(ChargedItemUseTask *this, unsigned int uiIndex);
void __thiscall ChargedItemUseTask::DirectMessage(ChargedItemUseTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall InvWin::InvWin(InvWin *this);
void __thiscall InvWin::_InvWin(InvWin *this);
bool __thiscall InvTabButWin::EatDropInstance(InvTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall CompensationItemIcon::CompensationItemIcon(CompensationItemIcon *this);
void __thiscall CompensationItemIcon::_CompensationItemIcon(CompensationItemIcon *this);
void __thiscall CompensationItemIcon::SetDropContents(CompensationItemIcon *this, Item *pkItem, unsigned int uiInvIndex, bool b);
void __thiscall CompensationInvWin::OnInvLClick(CompensationInvWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::InventoryWin(InventoryWin *this);
void __thiscall InventoryWin::_InventoryWin(InventoryWin *this);
void __thiscall InventoryWin::OnInvLClickPrivateStoreMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvRClickShopMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvLClickBankMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvLClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvLClickGttStoreMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnClickRepairItem(InventoryWin *this, ITEM_INVEN kFrom);
void __thiscall InventoryWin::OnResetRecoverCountState(InventoryWin *this);
unsigned int __thiscall InventoryWin::FindItem(InventoryWin *this, unsigned __int16 ItemID);
unsigned int __thiscall InventoryWin::GetFuncItemCount(InventoryWin *this, ItemFuncEnum e, const bool bFindUsingInven);
void __thiscall InventoryWin::SearchQuestStartItem(InventoryWin *this, unsigned __int16 qID, bool bGiveup);
void __thiscall InventoryWin::StartSuccessEffect(InventoryWin *this);
void __thiscall InventoryWin::OnCloseMagicBox(InventoryWin *this);
unsigned int __thiscall InventoryWin::FindEquipItem(InventoryWin *this, unsigned __int16 kItemID);
void __thiscall InventoryWin::NcNewRewardAndChargedItem(InventoryWin *this);
bool __thiscall ChargedItemUseTask::OnProcessNetMsg(ChargedItemUseTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall InvWin::UpdateMeWin(InvWin *this, float fCurTime);
void __thiscall InvWin::DoAction(InvWin *this);
void __thiscall InvWin::DoRAction(InvWin *this);
void __thiscall InvWin::OnFirstHitWin(InvWin *this);
void __thiscall InvWin::OnFirstHitWinEx(InvWin *this);
void __thiscall ChargedItemIcon::OnFirstHitWin(ChargedItemIcon *this);
void __thiscall CompensationItemIcon::OnFirstHitWin(CompensationItemIcon *this);
void __thiscall CompensationItemIcon::DoAction(CompensationItemIcon *this);
void __thiscall CompensationItemIcon::DoRAction(CompensationItemIcon *this);
void __thiscall CompensationInvWin::Refresh(CompensationInvWin *this);
void __thiscall CompensationInvWin::OnInvRClick(CompensationInvWin *this, unsigned int uiInvIndex);
void __thiscall CompensationInvWin::DirectMessage(CompensationInvWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall InventoryWin::OnInvShiftLClickPrivateStoreMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftRClickPrivateStoreMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvLClickNormalMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftLClickNormalMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvLClickShopMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftLClickShopMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftRClickShopMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvRClickBankMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftLClickBankMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftRClickBankMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvRClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftLClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftRClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::UnEquip(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::UseEquipedItem(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnEquipRClick(InventoryWin *this, unsigned int uiInvIndex);
bool __thiscall InventoryWin::DropOnInv(InventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall InventoryWin::OnActivePage(InventoryWin *this, unsigned int uiIndex);
void __thiscall InventoryWin::OnChargedItemPage(InventoryWin *this);
void __thiscall InventoryWin::OnCompensationPage(InventoryWin *this);
void __thiscall InventoryWin::RefreshCompensationInv(InventoryWin *this);
void __thiscall InventoryWin::UpdateInventory(InventoryWin *this);
void __thiscall InventoryWin::OnInvRClickGttStoreMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftLClickGttStoreMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::SetAutoPickCheck(InventoryWin *this, const bool bCheck, const bool bSysMsg);
void __thiscall InventoryWin::OnAutoPickShow(InventoryWin *this);
void __thiscall InventoryWin::OnAutoPickCheck(InventoryWin *this);
void __thiscall InventoryWin::OnAutoUseShow(InventoryWin *this);
void __thiscall InventoryWin::OnOffEquipWin(InventoryWin *this);
void __thiscall InventoryWin::ItemChatLink(InventoryWin *this, unsigned int uiLClickType, unsigned int uiInvIndex);
void __thiscall InvWin::SetLock(InvWin *this, bool bLock);
void __thiscall CompensationInvWin::OnCommand(CompensationInvWin *this, unsigned int wParam, int lParam);
void __thiscall InventoryWin::OnEquipLClick(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::LockAllItem(InventoryWin *this);
void __thiscall InventoryWin::UnLockAllItem(InventoryWin *this);
void __thiscall InventoryWin::LockAllEquipItem(InventoryWin *this);
void __thiscall InventoryWin::UnLockAllEquipItem(InventoryWin *this);
void __thiscall InventoryWin::OnCreateNewSocket(InventoryWin *this, bool bSucss);
InvWin *__cdecl InvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
InvTabButWin *__cdecl InvTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
ChargedItemIcon *__cdecl ChargedItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
ChargedItemInvenWin *__cdecl ChargedItemInvenWin::CreateWin();
bool __thiscall ChargedItemInvenWin::Create(ChargedItemInvenWin *this);
CompensationItemIcon *__cdecl CompensationItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
CompensationInvWin *__cdecl CompensationInvWin::CreateWin();
bool __thiscall CompensationInvWin::Create(CompensationInvWin *this);
InventoryWin *__cdecl InventoryWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall InventoryWin::Create(InventoryWin *this, PgFrameWork *pkFrameWork);
void __thiscall InventoryWin::DirectMessage(InventoryWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall InventoryWin::OnClose(InventoryWin *this);
void __thiscall InventoryWin::UpdateBlinkEffect(InventoryWin *this);
void __thiscall InventoryWin::UpdateMeWin(InventoryWin *this, float fCurTime);
void __thiscall InventoryWin::GetItem(InventoryWin *this, std::vector<unsigned int,std::allocator<unsigned int> > *lstItem, unsigned __int16 ItemID);
unsigned int __thiscall InventoryWin::GetTotalItemCount(InventoryWin *this, unsigned __int16 ItemID);
bool __thiscall InvWin::Create(InvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall ChargedItemInvenWin::OnInvRClick(ChargedItemInvenWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvLClick(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvRClickNormalMode(InventoryWin *this, unsigned int uiInvIndex);
void __thiscall InventoryWin::OnInvShiftRClickNormalMode(InventoryWin *this, unsigned int uiInvIndex);
bool __thiscall InventoryWin::DropOnEquip(InventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
bool __thiscall InvWin::EatDropInstance(InvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall ChargedItemInvenWin::OnCommand(ChargedItemInvenWin *this, unsigned int wParam, int lParam);
void __thiscall InventoryWin::OnInvRClick(InventoryWin *this, unsigned int uiInvIndex, unsigned int uiUser);
unsigned int __thiscall InventoryWin::FindItem(InventoryWin *this, char *ItemName);
unsigned int __thiscall InventoryWin::FindEquipItem(InventoryWin *this, const char *pcItemIdx);
unsigned int __thiscall InventoryWin::FindItemID(InventoryWin *this, char *ItemName);
void __thiscall InventoryWin::OnCommand(InventoryWin *this, unsigned int wParam, int lParam);
void __thiscall ChatColorSpinWin::SetChatColorInfo(ChatColorSpinWin *this, ChatColorInfo kChatColorInfo);
ItemViewInfo *__cdecl IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
unsigned __int16 __thiscall CQuestData::GetNumOfQuestData(CQuestData *this);
NiRTTI *__thiscall InvWin::GetRTTI(InvWin *this);
void *__thiscall InvTabButWin::_vector_deleting_destructor_(InvTabButWin *this, unsigned int);
void *__thiscall ChargedItemIcon::_scalar_deleting_destructor_(ChargedItemIcon *this, unsigned int);
void *__thiscall ChargedItemInvenWin::_vector_deleting_destructor_(ChargedItemInvenWin *this, unsigned int);
void *__thiscall CompensationInvWin::_scalar_deleting_destructor_(CompensationInvWin *this, unsigned int);
unsigned int __cdecl ITableBase<ItemShopView_ItemShopViewTable>::GetTotal();
ItemShopView *__cdecl ItemShopViewTable::GetByShopID(unsigned int dwShopID);
void *__thiscall InvWin::_scalar_deleting_destructor_(InvWin *this, unsigned int);
void *__thiscall CompensationItemIcon::_scalar_deleting_destructor_(CompensationItemIcon *this, unsigned int);
void *__thiscall InventoryWin::_vector_deleting_destructor_(InventoryWin *this, unsigned int);
void *__thiscall ChargedItemUseTask::_vector_deleting_destructor_(ChargedItemUseTask *this, unsigned int);
void __thiscall ItemInfoWin::_ItemInfoWin(ItemInfoWin *this);
// long double __usercall difftime_0<edx:eax>(int _Time1<ecx>, int _Time2<eax>);
// int __usercall mktime_1<eax>(tm *_Tm<eax>);
void __thiscall ItemInfoWin::HideAllMoneyWin(ItemInfoWin *this);
bool __thiscall ItemInfoWin::IsMoneyShow(ItemInfoWin *this);
bool __thiscall ItemInfoWin::IsTotalMoneyShow(ItemInfoWin *this);
unsigned int __thiscall ItemInfoWin::GetMoneyWinWidth(ItemInfoWin *this);
unsigned int __thiscall ItemInfoWin::GetTotalMoneyWinWidth(ItemInfoWin *this);
void __thiscall ItemInfoWin::InitTimeLimitUpdateTime(ItemInfoWin *this);
void __thiscall ItemInfoWin::ReduceTimeLimitUpdateTime(ItemInfoWin *this);
void __thiscall ItemInfoWin::OnCommand(ItemInfoWin *this, unsigned int wParam, int lParam);
void __thiscall ItemInfoWin::SetCloseButtonPos(ItemInfoWin *this);
void __thiscall ItemInfoWin::ShowMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, __int64 i64Money);
void __thiscall ItemInfoWin::ShowPrivateStoreMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, __int64 i64Money, bool bBuyItem);
void __thiscall ItemInfoWin::ShowTotalMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, __int64 i64Money, bool bBuyItem);
void __thiscall ItemInfoWin::AdjustSizeIfIamToolTipWin(ItemInfoWin *this);
void __thiscall ItemInfoWin::SetTextBeginNewLine(ItemInfoWin *this, const char *pkTextData, int *nIndex, D3DXCOLOR *kColor);
void __thiscall ItemInfoWin::SetItemToolTip(ItemInfoWin *this, char *pText);
bool __thiscall ItemInfoWin::Create(ItemInfoWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight);
bool __thiscall ItemInfoWin::CreateCloseButton(ItemInfoWin *this);
void __thiscall ItemInfoWin::SetItemExpInfo(ItemInfoWin *this, __int64 i64Exp);
void __thiscall ItemInfoWin::SetItemMoneyInfo(ItemInfoWin *this, __int64 i64Money);
void __thiscall ItemInfoWin::SetItemFameInfo(ItemInfoWin *this, unsigned int iFameVal);
void __thiscall ItemInfoWin::InsertWeaponTitleContents(ItemInfoWin *this, Item *pkItem, int *iIndex);
char *__cdecl GetLastCoolTimeStr(int iTime);
int __thiscall ItemInfoWin::DisplayItemDurationBackupTime(ItemInfoWin *this, int iIndex);
int __thiscall ItemInfoWin::DisplayItemDurationDirectTime(ItemInfoWin *this, int iIndex, ShineDateTime kDelTime);
void __thiscall ItemInfoWin::InsertItemEffectContents(ItemInfoWin *this, ItemInfo *pkInfo, int *iIndex);
void __thiscall ItemInfoWin::InsertRequireWeponContents(ItemInfoWin *this, ItemInfo *pkItemInfo, int *iIndex);
void __thiscall ItemInfoWin::InsertSocketInfoContents(ItemInfoWin *this, Item *pkItem, int *iIndex);
void __thiscall ItemInfoWin::ShowItemMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, int iLot, ItemViewInfo *pkViewInfo, ItemMoney *pkItemMoney, bool bBuyPossible);
void __thiscall ItemInfoWin::ShowTotalItemMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, int iLot, ItemViewInfo *pkViewInfo, ItemMoney *pkItemMoney, bool bBuyPossible);
void __thiscall ItemInfoWin::InsertRandomOptCntContents(ItemInfoWin *this, Item *pkItem, int *iIndex);
void __thiscall ItemInfoWin::InsertRequireShieldContents(ItemInfoWin *this, ItemInfo *pkItemInfo, int *iIndex);
void __thiscall ItemInfoWin::InsertMoverUpgradeContents(ItemInfoWin *this, ItemInfo *pkItemInfo, char nGrade, int *iIndex);
void __thiscall ItemInfoWin::ItemInfoWin(ItemInfoWin *this);
ItemInfoWin *__cdecl ItemInfoWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth);
void __thiscall ItemInfoWin::InsertSetItemContents(ItemInfoWin *this, ItemInfo *pkInfo, int *iIndex);
void __thiscall ItemInfoWin::InsertItemMixContents(ItemInfoWin *this, Item *pkItem, int *iIndex);
void __thiscall ItemInfoWin::InsertNameContents(ItemInfoWin *this, ItemInfoWin::sNameContentsParameter *Parameter, int *iIndex);
void __thiscall ItemInfoWin::InsertMoneyContents(ItemInfoWin *this, ItemInfo *pkInfo, int iLot, __int64 i64Money, int *iIndex, ItemInfoWin::eSellState eState);
void __thiscall ItemInfoWin::InsertProductContents(ItemInfoWin *this, Item *pkItem, int *iIndex);
void __thiscall ItemInfoWin::InsertMaterialContents(ItemInfoWin *this, Item *pkItem, int *iIndex);
void __thiscall ItemInfoWin::InsertDescriptContents(ItemInfoWin *this, ItemViewInfo *pkViewInfo, char nGrade, Item *pkItem, int *iIndex, int iLot);
void __thiscall ItemInfoWin::SetBasicItemInfo(ItemInfoWin *this, int iItemID, int iItemUpgrade, int iLot, int *rkIndex, Item *pkItem);
void __thiscall ItemInfoWin::SetItemInfo(ItemInfoWin *this, Item *pkItem);
void __thiscall ItemInfoWin::SetRepurchaseInfo(ItemInfoWin *this, Item *pkItem);
void __thiscall ItemInfoWin::SetNPCItemSellInfo(ItemInfoWin *this, int iItemID, int iItemUpgrade, int iLot, int *rkIndex, __int64 i64Money);
void __thiscall ItemInfoWin::SetPrivateStoreItemInfo(ItemInfoWin *this, int iItemID, int iItemUpgrade, int iLot, int *rkIndex, __int64 i64Money, Item *pkItem, bool bSellMode);
void __thiscall ItemInfoWin::SetBuyInfo(ItemInfoWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkSellInfo);
void __thiscall ItemInfoWin::SetPrivateStoreSellInfo(ItemInfoWin *this, Item *pkItem, __int64 i64SellMoney, bool bMyInven);
void __thiscall ItemInfoWin::SetPrivateStoreBuyInfo(ItemInfoWin *this, Item *pkItem, __int64 i64SellMoney, unsigned int uiLot, bool bMyInven);
void __thiscall ItemInfoWin::SetSellInfo(ItemInfoWin *this, Item *pkItem, bool bMyInven);
UpGradeInfo *__cdecl IIDTableBase<UpGradeInfo_UpGradeInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
BRAccUpgradeInfo *__cdecl IIDTableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
unsigned int __cdecl ITableBase<ItemMoney_ItemMoneyTab>::GetTotal();
unsigned int __cdecl ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::GetTotal();
unsigned int __cdecl ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::GetTotal();
void *__thiscall ItemInfoWin::_scalar_deleting_destructor_(ItemInfoWin *this, unsigned int);
unsigned int __cdecl ITableBase<ItemInfo_ItemInfoTab>::GetTotal();
unsigned int __cdecl ITableBase<GradeItemOption_GradeItemOptionTab>::GetTotal();
unsigned int __cdecl ITableBase<MiniHouse_MiniHouseTable>::GetTotal();
unsigned int __cdecl ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal();
unsigned int __cdecl ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal();
unsigned int __cdecl ITableBase<SetItemName_SetItemNameTab>::GetTotal();
char *__cdecl WeaponTitleTab::GetWeaponTitleString(unsigned __int16 MobID, unsigned int MobKillCount, unsigned __int16 wepID);
GradeItemOption *__cdecl GradeItemOptionTab::GetByInxName(char *pcInxName);
MiniHouse *__cdecl MiniHouseTable::GetByInxName(char *pcInxName);
ProduceInfo *__cdecl ProduceInfoTable::GetByID(unsigned __int16 kSkillID);
ProduceInfo *__cdecl ProduceInfoTable::GetByNeedMasteryGain(char *pcName);
ProduceViewInfo *__cdecl ProduceViewInfoTable::GetByMasteryType(TotalMasteryType eType);
SetItemName *__cdecl SetItemNameTab::GetByInxName(char *pcInxName);
unsigned int __cdecl SetEffectTab::GetTotal();
ItemMoney *__cdecl ItemMoneyTab::GetByInxName(char *pcInxName);
AbnormalStateViewInfo *__cdecl AbnormalStateViewInfoTab::GetByInxName(char *pcInxName);
ActiveSkillViewInfo *__cdecl ActSkillViewInfoTab::GetByInxName(char *pcInxName);
ProduceInfo *__cdecl ProduceInfoTable::GetByProduct(std::basic_string<char,std::char_traits<char>,std::allocator<char> > Product);
MoverItem *__cdecl MoverItemTab::GetByItemIdx(const char *pcItemIdx);
PupMain *__cdecl PetMainTab::GetByItemIdx(const char *pcItemIdx);
void __thiscall ItemMallMenuWin::ItemMallMenuWin(ItemMallMenuWin *this);
void __thiscall ItemMallMenuWin::_ItemMallMenuWin(ItemMallMenuWin *this);
void __thiscall ItemMallMenuWin::OnCmdOpenItemMall(ItemMallMenuWin *this);
void __thiscall ItemMallMenuWin::OnCmdOpenUsingChargedItemList(ItemMallMenuWin *this);
void __thiscall ItemMallMenuWin::OnHelpLink(ItemMallMenuWin *this);
void __thiscall ItemMallMenuWin::OnCommand(ItemMallMenuWin *this, unsigned int wParam, int lParam);
bool __thiscall ItemMallMenuWin::Create(ItemMallMenuWin *this, PgFrameWork *pkFrameWork);
ItemMallMenuWin *__cdecl ItemMallMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ItemMallMenuWin::_scalar_deleting_destructor_(ItemMallMenuWin *this, unsigned int);
void __thiscall ShopInvWin::ShopInvWin(ShopInvWin *this);
void __thiscall ShopInvWin::_ShopInvWin(ShopInvWin *this);
void __thiscall ItemShopWin::OnHelpLink(ItemShopWin *this);
unsigned int __thiscall ItemShopWin::GetSellItemNum(ItemShopWin *this);
unsigned int __thiscall ItemShopWin::GetMaxPageNum(ItemShopWin *this);
ShopInvWin *__thiscall ItemShopWin::GetInvWin(ItemShopWin *this, unsigned int uiIndex);
void __thiscall ItemShopWin::DeleteRepurchaseInv(ItemShopWin *this, unsigned __int16 nHandle);
void __thiscall ItemShopWin::AddRepurchaseInv(ItemShopWin *this, PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *pkRepurItem);
void __thiscall ShopInvWin::SetItem(ShopInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo);
void __thiscall ItemShopWin::ItemShopWin(ItemShopWin *this);
void __thiscall ItemShopWin::_ItemShopWin(ItemShopWin *this);
void __thiscall ItemShopWin::OnCancel(ItemShopWin *this);
void __thiscall ItemShopWin::UpdatePageInfo(ItemShopWin *this);
void __thiscall ItemShopWin::OnInvRClick(ItemShopWin *this, unsigned int uiInvIndex);
void __thiscall ItemShopWin::ResetContents(ItemShopWin *this);
void __thiscall ItemShopWin::OnShowWin(ItemShopWin *this);
void __thiscall ItemShopWin::OnSetPage(ItemShopWin *this, unsigned int uiPage);
void __thiscall ItemShopWin::ResetPage(ItemShopWin *this);
void __thiscall ItemShopWin::OnWeapon(ItemShopWin *this);
void __thiscall ItemShopWin::OnArmor(ItemShopWin *this);
void __thiscall ItemShopWin::OnAcc(ItemShopWin *this);
void __thiscall ItemShopWin::OnRepurchase(ItemShopWin *this);
void __thiscall ItemShopWin::OnPrevPage(ItemShopWin *this);
void __thiscall ItemShopWin::OnNextPage(ItemShopWin *this);
void __thiscall ItemShopWin::OnCommand(ItemShopWin *this, unsigned int wParam, int lParam);
ShopInvWin *__cdecl ShopInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
ItemShopWin *__cdecl ItemShopWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall ItemShopWin::Create(ItemShopWin *this, PgFrameWork *pkFrameWork);
void *__thiscall ShopInvWin::_scalar_deleting_destructor_(ShopInvWin *this, unsigned int);
void *__thiscall ItemShopWin::_scalar_deleting_destructor_(ItemShopWin *this, unsigned int);
void __thiscall ItemTradeWin::ItemTradeWin(ItemTradeWin *this);
void __thiscall ItemTradeWin::_ItemTradeWin(ItemTradeWin *this);
void __thiscall ItemTradeWin::OnCmdCancel(ItemTradeWin *this);
void __thiscall ItemTradeWin::GetValueFromEdit(ItemTradeWin *this);
void __thiscall ItemTradeWin::SetValueToEdit(ItemTradeWin *this);
void __thiscall ItemTradeWin::SetValueToEdit(ItemTradeWin *this, unsigned int num);
void __thiscall ItemTradeWin::UpdateMeWin(ItemTradeWin *this, float fCurTime);
void __thiscall ItemTradeWin::Open(ItemTradeWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, ItemInfo *pkItemInfo, char *pcText);
void __thiscall ItemTradeWin::OnClose(ItemTradeWin *this);
void __thiscall ItemTradeWin::Open(ItemTradeWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, Item *pkItem, char *pcText);
bool __thiscall ItemTradeWin::Create(ItemTradeWin *this, PgFrameWork *pkFrameWork);
void __thiscall ItemTradeWin::OnCmdOk(ItemTradeWin *this);
void __thiscall ItemTradeWin::OnEditEnd(ItemTradeWin *this, unsigned int wParam, int lParam);
void __thiscall ItemTradeWin::OnCommand(ItemTradeWin *this, unsigned int wParam, int lParam);
ItemTradeWin *__cdecl ItemTradeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ItemTradeWin::_vector_deleting_destructor_(ItemTradeWin *this, unsigned int);
bool __thiscall ItemUpgradeWin::IsUpgradeSlotItem(ItemUpgradeWin *this);
void __thiscall ForgeSlotInvWin::ForgeSlotInvWin(ForgeSlotInvWin *this);
void __thiscall ForgeSlotInvWin::_ForgeSlotInvWin(ForgeSlotInvWin *this);
bool __thiscall ForgeSlotInvWin::Create(ForgeSlotInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
void __thiscall ForgeSlotInvWin::SetSlotType(ForgeSlotInvWin *this, unsigned int uiInvType);
unsigned int __thiscall ForgeSlotInvWin::GetSlotType(ForgeSlotInvWin *this);
ForgeSlotInvWin *__thiscall ItemUpgradeWin::GetInsertedOldSlot(ItemUpgradeWin *this, unsigned int _uiSlotNum);
void __thiscall ItemUpgradeWin::StopSlotRotate(ItemUpgradeWin *this);
bool __thiscall ItemUpgradeWin::IsUpgradingitem(ItemUpgradeWin *this);
int __thiscall ItemUpgradeWin::GetUpgradeSlotItemClass(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::OnHelpLink(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::EnableSprSlot(ItemUpgradeWin *this, unsigned int uiSlotNum);
void __thiscall ItemUpgradeMsgWin::ItemUpgradeMsgWin(ItemUpgradeMsgWin *this);
void __thiscall ItemUpgradeMsgWin::_ItemUpgradeMsgWin(ItemUpgradeMsgWin *this);
void __thiscall ItemUpgradeMsgWin::OnClose(ItemUpgradeMsgWin *this);
void __thiscall ForgeSlotInvWin::OnFirstHitWin(ForgeSlotInvWin *this);
bool __thiscall ForgeSlotInvWin::SetSenderInvSlotLock(ForgeSlotInvWin *this, bool _bLock);
void __thiscall ItemUpgradeWin::_ItemUpgradeWin(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::ProcessMeInput(ItemUpgradeWin *this, bool *bHit);
void __thiscall ItemUpgradeWin::OnCancel(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::UpGradeResult(ItemUpgradeWin *this, unsigned int dwUpgradeResult);
void __thiscall ItemUpgradeWin::StartResultEffect(ItemUpgradeWin *this, NiAVObject *_pEffect);
bool __thiscall ItemUpgradeWin::IsSameGrade(ItemUpgradeWin *this, Item *pkUpSource);
bool __thiscall ItemUpgradeWin::IsBraceletUpsourceItem(ItemUpgradeWin *this, Item *pkUpSource);
char *__thiscall ItemUpgradeWin::GetBraceletUpsourceName(ItemUpgradeWin *this);
char *__thiscall ItemUpgradeWin::GetUpgradeSlotItemName(ItemUpgradeWin *this);
void __thiscall ForgeSlotInvWin::DoAction(ForgeSlotInvWin *this);
void __thiscall ForgeSlotInvWin::DoRAction(ForgeSlotInvWin *this);
void __thiscall ForgeSlotInvWin::ReSetSlot(ForgeSlotInvWin *this);
bool __thiscall ItemUpgradeWin::DropForgeSlot(ItemUpgradeWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop);
void __thiscall ItemUpgradeWin::ResetAllData(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::StartSlotRotate(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::AssistItemShow(ItemUpgradeWin *this);
bool __thiscall ItemUpgradeMsgWin::Create(ItemUpgradeMsgWin *this, PgFrameWork *pkFrameWork);
void __thiscall ItemUpgradeMsgWin::OnShowWin(ItemUpgradeMsgWin *this);
void __thiscall ForgeSlotInvWin::ReSetInitSlot(ForgeSlotInvWin *this);
void __thiscall ItemUpgradeWin::DirectMessage(ItemUpgradeWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ItemUpgradeWin::StartUpgrade(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::ResetAllDataWithoutItem(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::EndSlotRotate(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::UpdateSlotRotate(ItemUpgradeWin *this, float fCurTime);
void __thiscall ItemUpgradeWin::ChangeUpgradeWin(ItemUpgradeWin *this, bool bNormalWin, int iUpgradeType);
void __thiscall ItemUpgradeMsgWin::OnApply(ItemUpgradeMsgWin *this);
bool __thiscall ForgeSlotInvWin::EatDropInstance(ForgeSlotInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall ItemUpgradeWin::UpdateMeWin(ItemUpgradeWin *this, float fCurTime);
void __thiscall ItemUpgradeWin::OnApply(ItemUpgradeWin *this);
void __thiscall ItemUpgradeWin::OnSlotLClick(ItemUpgradeWin *this, unsigned int _uiSlotIndex);
void __thiscall ItemUpgradeWin::OnCommand(ItemUpgradeWin *this, unsigned int wParam, int lParam);
void __thiscall ItemUpgradeWin::OnClose(ItemUpgradeWin *this);
void __thiscall ItemUpgradeMsgWin::OnCommand(ItemUpgradeMsgWin *this, unsigned int wParam, int lParam);
ForgeSlotInvWin *__cdecl ForgeSlotInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
ItemUpgradeMsgWin *__cdecl ItemUpgradeMsgWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall ItemUpgradeWin::Create(ItemUpgradeWin *this, PgFrameWork *pkFrameWork);
void __thiscall ItemUpgradeWin::ItemUpgradeWin(ItemUpgradeWin *this);
ItemUpgradeWin *__cdecl ItemUpgradeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ForgeSlotInvWin::_scalar_deleting_destructor_(ForgeSlotInvWin *this, unsigned int);
void *__thiscall ItemUpgradeMsgWin::_vector_deleting_destructor_(ItemUpgradeMsgWin *this, unsigned int);
void *__thiscall ItemUpgradeWin::_vector_deleting_destructor_(ItemUpgradeWin *this, unsigned int);
void __thiscall KeyRemappingBut::KeyRemappingBut(KeyRemappingBut *this);
void __thiscall KeyRemappingBut::_KeyRemappingBut(KeyRemappingBut *this);
void __thiscall KeyRemappingWin::OnReset(KeyRemappingWin *this);
NiInputKeyboard::KeyCode __thiscall KeyRemappingWin::ConvertKeyCode(KeyRemappingWin *this, char keyValue);
unsigned int __thiscall KeyRemappingWin::ConvertKeyCodeModifier(KeyRemappingWin *this, char keyModifier);
int __thiscall KeyRemappingWin::GetKeyIndexByName(KeyRemappingWin *this, char *pcBtnName);
void __thiscall KeyRemappingWin::OnHelpLink(KeyRemappingWin *this);
bool __thiscall KeyRemappingWin::SaveDefalultKeyRemapping(KeyRemappingWin *this, bool bDefault);
bool __thiscall KeyRemappingWin::UpdateDynamicStrings(KeyRemappingWin *this, float fTime);
bool __thiscall KeyRemappingBut::Create(KeyRemappingBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex);
void __thiscall KeyRemappingBut::DoAction(KeyRemappingBut *this);
bool __thiscall KeyRemappingWin::KeyMappingInfo(KeyRemappingWin *this, unsigned int uiKeyMappingIndex, unsigned int *uiMsg, char *keyName);
char *__thiscall KeyRemappingWin::GetKeyString(KeyRemappingWin *this, char uiKeyValue, char uiModifier);
void __thiscall KeyRemappingWin::SetUIPageInfo(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::SetKeyName(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::ReflashContents(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::UpdateMeWin(KeyRemappingWin *this, float fCurTime);
void __thiscall KeyRemappingWin::AddInfo(KeyRemappingWin *this, unsigned int uiTotalNum, unsigned int uiOffset);
void __thiscall KeyRemappingWin::OnKeyRemapping(KeyRemappingWin *this, unsigned int uiNum);
void __thiscall KeyRemappingWin::OnMainMenu(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::OnGame(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::OnShortCut(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::OnPrevPage(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::OnNextPage(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::SetKeyRemapping(KeyRemappingWin *this, bool bKeyboard, NiInputMouse::Button mouseKeyCode, NiInputKeyboard::KeyCode keyCode, unsigned int msg, unsigned int modifier);
void __thiscall KeyRemappingWin::SetFromKeyMsgToGameMsg(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::SetSyncFromOpt(KeyRemappingWin *this, bool bOverWrite);
void __thiscall KeyRemappingWin::SetSyncToOpt(KeyRemappingWin *this);
KeyRemappingBut *__cdecl KeyRemappingBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex);
void __thiscall KeyRemappingWin::KeyRemappingWin(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::_KeyRemappingWin(KeyRemappingWin *this);
KeyRemappingWin *__cdecl KeyRemappingWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall KeyRemappingWin::OnCancel(KeyRemappingWin *this);
bool __thiscall KeyRemappingWin::LoadDefalultKeyRemapping(KeyRemappingWin *this, bool bDefault);
bool __thiscall KeyRemappingWin::Create(KeyRemappingWin *this, PgFrameWork *pkFrameWork);
void __thiscall KeyRemappingWin::OnClose(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::SaveKeyMapping(KeyRemappingWin *this);
void __thiscall KeyRemappingWin::OnCommand(KeyRemappingWin *this, unsigned int wParam, int lParam);
void *__thiscall KeyRemappingBut::_scalar_deleting_destructor_(KeyRemappingBut *this, unsigned int);
void __thiscall KeyMap::Remove(KeyMap *this, unsigned int uiMsg);
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>(std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *this);
std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *__thiscall std::_List_val<char___std::allocator<char__>>::_Buynode(std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *_Next, std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *_Prev, ItemViewDummy *const *_Val);
void *__thiscall KeyRemappingWin::_vector_deleting_destructor_(KeyRemappingWin *this, unsigned int);
void __thiscall KQScoreWin::_KQScoreWin(KQScoreWin *this);
bool __thiscall KQScoreWin::Create(KQScoreWin *this, PgFrameWork *pkFrameWork);
void __thiscall KQScoreWin::SetScore(KQScoreWin *this, unsigned int uiTeam, unsigned int uiScore);
void __thiscall KQScoreWin::ResetScore(KQScoreWin *this);
void __thiscall KQScoreWin::KQScoreWin(KQScoreWin *this);
KQScoreWin *__cdecl KQScoreWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall KQScoreWin::_vector_deleting_destructor_(KQScoreWin *this, unsigned int);
void __thiscall MainCharHPBarWin::MainCharHPBarWin(MainCharHPBarWin *this);
void __thiscall MainCharHPBarWin::_MainCharHPBarWin(MainCharHPBarWin *this);
void __thiscall MainCharHPBarWin::SetMoveStop(MainCharHPBarWin *this, bool b);
bool __thiscall MainCharHPBarWin::Create(MainCharHPBarWin *this);
void __thiscall MainCharHPBarWin::UpdatePosition(MainCharHPBarWin *this);
void __thiscall MainCharHPBarWin::UpdateMeWin(MainCharHPBarWin *this, float fCurTime);
MainCharHPBarWin *__cdecl MainCharHPBarWin::CreateWin();
void *__thiscall MainCharHPBarWin::_scalar_deleting_destructor_(MainCharHPBarWin *this, unsigned int);
void __thiscall MainMenuWin::OnCmdChar(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdInven(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdSkill(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdAction(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdQuest(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdFriend(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdMiniHouse(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdForum(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdItemMall(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdSystem(MainMenuWin *this);
void __thiscall MainMenuWin::OnCmdHelp(MainMenuWin *this);
void __thiscall MainMenuWin::SetMainButToolTip(MainMenuWin *this, unsigned int uiMenu, char *pkStr);
void __thiscall MainMenuWin::SetBlinkEffect(MainMenuWin *this, bool bActive, int iBlinkSlotType);
void __thiscall MainMenuWin::ShowNewMark(MainMenuWin *this, bool bShow);
void __thiscall MainMenuWin::_MainMenuWin(MainMenuWin *this);
NiMaterialProperty *__cdecl GetMaterialProp(NiNode *pkMtrlNode, char *pcName);
void __thiscall MainMenuWin::ChangeMenuTab(MainMenuWin *this);
void __thiscall MainMenuWin::ProcessMeInput(MainMenuWin *this, bool *bHit);
void __thiscall MainMenuWin::StartParticle(MainMenuWin *this, int iIndex);
void __thiscall MainMenuWin::UpdateBlinkEffect(MainMenuWin *this);
bool __thiscall MainMenuWin::Create(MainMenuWin *this, PgFrameWork *pkFrameWork);
void __thiscall MainMenuWin::OnCommand(MainMenuWin *this, unsigned int wParam, int lParam);
void __thiscall MainMenuWin::UpdateMeWin(MainMenuWin *this, float fCurTime);
void __thiscall MainMenuWin::MainMenuWin(MainMenuWin *this);
NiNode *__cdecl CloneWithSpecifiedMaterial(NiNode *pkSrc, NiNode *pkMtrlNode, char *pcMtrlNodeName);
MainMenuWin *__cdecl MainMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall MainMenuWin::_unnamed_type_m_kEffectManager_::__unnamed_type_m_kEffectManager_(MainMenuWin::<unnamed-type-m_kEffectManager> *this);
void __thiscall NiTimeController::SetAnimType(NiTimeController *this, NiTimeController::AnimType eType);
void *__thiscall MainMenuWin::_vector_deleting_destructor_(MainMenuWin *this, unsigned int);
void __thiscall MainMenuWin::_unnamed_type_m_kEffectManager_::_unnamed_type_m_kEffectManager_(MainMenuWin::<unnamed-type-m_kEffectManager> *this);
void __thiscall KarisForgeSlotInvWin::KarisForgeSlotInvWin(KarisForgeSlotInvWin *this);
void __thiscall KarisForgeSlotInvWin::_KarisForgeSlotInvWin(KarisForgeSlotInvWin *this);
bool __thiscall KarisForgeSlotInvWin::Create(KarisForgeSlotInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
void __thiscall MakeKarisWin::OnShowWin(MakeKarisWin *this);
KarisForgeSlotInvWin *__thiscall MakeKarisWin::GetInsertedOldSlot(MakeKarisWin *this, unsigned int _uiSlotNum);
void __thiscall MakeKarisWin::OnHelpLink(MakeKarisWin *this);
void __thiscall MakeKarisWin::EnableSprSlot(MakeKarisWin *this, unsigned int uiSlotNum);
void __thiscall KarisForgeSlotInvWin::OnFirstHitWin(KarisForgeSlotInvWin *this);
void __thiscall MakeKarisWin::MakeKarisWin(MakeKarisWin *this);
void __thiscall MakeKarisWin::_MakeKarisWin(MakeKarisWin *this);
void __thiscall MakeKarisWin::OnSlotLClick(MakeKarisWin *this, unsigned int _uiSlotIndex);
void __thiscall MakeKarisWin::OnCancel(MakeKarisWin *this);
void __thiscall MakeKarisWin::ClearSlot(MakeKarisWin *this);
void __thiscall MakeKarisWin::StartEffect(MakeKarisWin *this, NiAVObject *_pEffect);
void __thiscall MakeKarisWin::UpdateEffect(MakeKarisWin *this, float fTime);
void __thiscall MakeKarisWin::ClearAll(MakeKarisWin *this);
void __thiscall MakeKarisWin::SendPacket(MakeKarisWin *this);
void __thiscall MakeKarisWin::OnClose(MakeKarisWin *this);
void __thiscall MakeKarisWin::_ProcessMsg(MakeKarisWin *this, unsigned int Msg, unsigned int wParam, int lParam);
void __thiscall KarisForgeSlotInvWin::DoAction(KarisForgeSlotInvWin *this);
void __thiscall KarisForgeSlotInvWin::DoRAction(KarisForgeSlotInvWin *this);
void __thiscall MakeKarisWin::UpdateMeWin(MakeKarisWin *this, float fCurTime);
bool __thiscall MakeKarisWin::CheckCanEnableUpgrade(MakeKarisWin *this, KarisForgeSlotInvWin *pSlot);
bool __thiscall MakeKarisWin::DropForgeSlot(MakeKarisWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop);
void __thiscall MakeKarisWin::StartEffectt(MakeKarisWin *this);
void __thiscall MakeKarisWin::OnStart(MakeKarisWin *this);
bool __thiscall KarisForgeSlotInvWin::EatDropInstance(KarisForgeSlotInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall MakeKarisWin::OnCommand(MakeKarisWin *this, unsigned int wParam, int lParam);
KarisForgeSlotInvWin *__cdecl KarisForgeSlotInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork);
MakeKarisWin *__cdecl MakeKarisWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall MakeKarisWin::Create(MakeKarisWin *this, PgFrameWork *pkFrameWork);
void *__thiscall KarisForgeSlotInvWin::_vector_deleting_destructor_(KarisForgeSlotInvWin *this, unsigned int);
ItemDismantle *__cdecl ItemDismantleTab::GetObjByGrade(char byGrade);
void *__thiscall MakeKarisWin::_vector_deleting_destructor_(MakeKarisWin *this, unsigned int);
void __thiscall MapLinkGateWin::OnWinClose(MapLinkGateWin *this);
void __thiscall MapLinkGateWin::OnClose(MapLinkGateWin *this);
void __thiscall MapLinkGateWin::NoLinkMapData(MapLinkGateWin *this, int nCurrentDataCnt);
void __thiscall MapLinkGateWin::MapLinkGateWin(MapLinkGateWin *this);
void __thiscall MapLinkGateWin::_MapLinkGateWin(MapLinkGateWin *this);
void __thiscall MapLinkGateWin::UpdateMeWin(MapLinkGateWin *this, float fCurTime);
int __stdcall loc_547460(float fCurTime); // weak
void __thiscall MapLinkGateWin::ShowLinkGate(MapLinkGateWin *this);
bool __thiscall MapLinkGateWin::Create(MapLinkGateWin *this, PgFrameWork *pkFrameWork);
void __thiscall MapLinkGateWin::OnShowWin(MapLinkGateWin *this);
bool __thiscall MapLinkGateWin::ChangePage(MapLinkGateWin *this, int nChangePage);
void __thiscall MapLinkGateWin::OnCommand(MapLinkGateWin *this, unsigned int wParam, int lParam);
MapLinkGateWin *__cdecl MapLinkGateWin::CreateWin(PgFrameWork *pkFrameWork);
TownPortal *__cdecl ITableBase<TownPortal_TownPortalInfoTable>::GetByIndex(unsigned int uiIndex);
unsigned int __cdecl ITableBase<TownPortal_TownPortalInfoTable>::GetTotal();
void *__thiscall MapLinkGateWin::_vector_deleting_destructor_(MapLinkGateWin *this, unsigned int);
bool __thiscall MarketSearchItem::IsAvailable(MarketSearchItem *this);
unsigned __int64 __thiscall MarketSearchItem::GetPrice(MarketSearchItem *this);
unsigned int __thiscall MarketSearchItem::GetItemHandle(MarketSearchItem *this);
unsigned __int16 __thiscall MarketSearchItem::GetOwnerHandle(MarketSearchItem *this);
int __thiscall MarketSearchWin::MarketSort::CompName(MarketSearchWin::MarketSort *this, char *Name1, char *Name2, bool desc);
void __thiscall MarketSearchWin::SetSearchBooth(MarketSearchWin *this, unsigned __int16 hHandle);
bool __thiscall MarketSearchWin::IsFindBooth(MarketSearchWin *this, unsigned __int16 hHandle);
void __thiscall MarketSearchWin::SetCategoryFromBtn(MarketSearchWin *this, unsigned int PgBtnMsg);
void __thiscall MarketSearchWin::ShowWTCombo(MarketSearchWin *this, bool b);
void __thiscall MarketSearchWin::SetSearchingMsgBox(MarketSearchWin *this, MsgBox *pkMsgBox);
void __thiscall MarketSearchWin::DirectMessage(MarketSearchWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall MarketSearchWin::CloseSearchingMsgBox(MarketSearchWin *this);
void __thiscall MarketSearchWin::OnSomeoneBoothOpen(MarketSearchWin *this, unsigned __int16 hBoothHandle);
void __thiscall MarketSearchItem::MarketSearchItem(MarketSearchItem *this);
void __thiscall MarketSearchItem::_MarketSearchItem(MarketSearchItem *this);
void __thiscall MarketSearchItem::Clear(MarketSearchItem *this);
void __thiscall MarketSearchItem::Set(MarketSearchItem *this, BoothItemInfo *pkBoothItemInfo);
Item *__thiscall MarketSearchItem::GetItem(MarketSearchItem *this);
int __thiscall MarketSearchWin::MarketSort::CompLevel(MarketSearchWin::MarketSort *this, int Level1, int Level2, bool desc);
int __thiscall MarketSearchWin::MarketSort::CompMoney(MarketSearchWin::MarketSort *this, unsigned __int64 Money1, unsigned __int64 Money2, bool desc);
int __thiscall MarketSearchWin::MarketSort::CompSubGroup(MarketSearchWin::MarketSort *this, Item *Item1, Item *Item2, bool desc);
int __thiscall MarketSearchWin::MarketSort::CompItemHandle(MarketSearchWin::MarketSort *this, unsigned int Handle1, unsigned int Handle2, bool desc);
void __thiscall MarketSearchWin::MakeDefaultAll(MarketSearchWin *this);
bool __thiscall MarketSearchWin::DelayTimeCheck(MarketSearchWin *this);
void __thiscall MarketSearchWin::GetItemFontTable(MarketSearchWin *this, D3DXCOLOR *RetColor, GradeType eType);
int __thiscall MarketSearchWin::MarketSort::CompMainGroup(MarketSearchWin::MarketSort *this, Item *Item1, Item *Item2, bool desc);
bool __thiscall MarketSearchWin::SortByDefault::operator__(MarketSearchWin::SortByDefault *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2);
bool __thiscall MarketSearchWin::SortByName::operator__(MarketSearchWin::SortByName *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2);
bool __thiscall MarketSearchWin::SortByNameDesc::operator__(MarketSearchWin::SortByNameDesc *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2);
bool __thiscall MarketSearchWin::SortByLevel::operator__(MarketSearchWin::SortByLevel *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2);
bool __thiscall MarketSearchWin::SortByLevelDesc::operator__(MarketSearchWin::SortByLevelDesc *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2);
bool __thiscall MarketSearchWin::SortByMoney::operator__(MarketSearchWin::SortByMoney *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2);
bool __thiscall MarketSearchWin::SortByMoneyDesc::operator__(MarketSearchWin::SortByMoneyDesc *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2);
void __thiscall MarketSearchWin::InitItemSearchUI(MarketSearchWin *this, UIUtil *ui);
void __thiscall MarketSearchWin::InitCategoryComboBoxUI(MarketSearchWin *this, UIUtil *ui);
void __thiscall MarketSearchWin::OnSearch(MarketSearchWin *this);
void __thiscall MarketSearchWin::OnSearchBooth(MarketSearchWin *this);
void __thiscall MarketSearchWin::OnShowWin(MarketSearchWin *this);
bool __thiscall MarketSearchWin::SetListItem(MarketSearchWin *this, MarketSearchItem *pkMarketSearchItem);
bool __thiscall MarketSearchWin::SetListIcon(MarketSearchWin *this, unsigned int uiIndex, Item *pkItem);
void __thiscall MarketSearchWin::UpdateMeWin(MarketSearchWin *this, float fCutTime);
void __thiscall MarketSearchWin::RefreshItemViewList(MarketSearchWin *this);
void __thiscall MarketSearchWin::RefreshItemViewSlide(MarketSearchWin *this);
void __thiscall MarketSearchWin::MarketSearchWin(MarketSearchWin *this);
void __thiscall MarketSearchWin::_MarketSearchWin(MarketSearchWin *this);
bool __thiscall MarketSearchWin::UpdateViewList(MarketSearchWin *this);
void __thiscall MarketSearchWin::RemoveAllList(MarketSearchWin *this);
MarketSearchWin *__cdecl MarketSearchWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall MarketSearchWin::OnClose(MarketSearchWin *this);
bool __thiscall MarketSearchWin::SetListItems(MarketSearchWin *this, PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *pkProto);
bool __thiscall MarketSearchWin::Sort(MarketSearchWin *this, unsigned int uiMsg);
void __thiscall MarketSearchWin::OnCommand(MarketSearchWin *this, unsigned int wParam, int lParam);
bool __thiscall MarketSearchWin::Create(MarketSearchWin *this, PgFrameWork *pkFrameWork);
unsigned int __cdecl ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal();
void *__thiscall MarketSearchItem::_vector_deleting_destructor_(MarketSearchItem *this, unsigned int);
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByDefault_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred, MarketSearchItem **__formal);
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByName_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred, MarketSearchItem **__formal);
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByNameDesc_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred, MarketSearchItem **__formal);
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByLevel_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred, MarketSearchItem **__formal);
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByLevelDesc_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred, MarketSearchItem **__formal);
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByMoney_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred, MarketSearchItem **__formal);
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred, MarketSearchItem **__formal);
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred);
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred);
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred);
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred);
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred);
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred);
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred);
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByDefault _Pred);
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByName _Pred);
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByNameDesc _Pred);
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByLevel _Pred);
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByLevelDesc _Pred);
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByMoney _Pred);
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByMoneyDesc _Pred);
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred);
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred);
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred);
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred);
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred);
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred);
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred);
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByDefault _Pred);
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByName _Pred);
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByNameDesc _Pred);
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByLevel _Pred);
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByLevelDesc _Pred);
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByMoney _Pred);
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByMoneyDesc _Pred);
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByDefault>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred);
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByName>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred);
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred);
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByLevel>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred);
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred);
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByMoney>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred);
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred);
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred, int *__formal, MarketSearchItem **__formal);
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred, int *__formal, MarketSearchItem **__formal);
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred, int *__formal, MarketSearchItem **__formal);
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred, int *__formal, MarketSearchItem **__formal);
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred, int *__formal, MarketSearchItem **__formal);
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred, int *__formal, MarketSearchItem **__formal);
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred, int *__formal, MarketSearchItem **__formal);
void __thiscall std::pair<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::_pair<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(std::pair<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *this);
void *__thiscall MarketSearchWin::_scalar_deleting_destructor_(MarketSearchWin *this, unsigned int);
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred);
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred);
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred);
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred);
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred);
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred);
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred);
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByDefault _Pred);
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByName _Pred);
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByNameDesc _Pred);
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByLevel _Pred);
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByLevelDesc _Pred);
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByMoney _Pred);
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByMoneyDesc _Pred);
int std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(...);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>(...);
std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>__>(std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::pair<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Val);
bool __thiscall SLWCreateInfo::Item::AddWin(SLWCreateInfo::Item *this, char *pcNodeName, SLWCreateInfo::SprDataType eType);
void __thiscall MiniHouseInvWin::SetInvType(MiniHouseInvWin *this, unsigned int uiInvType);
void __thiscall MiniHouseInvWin::SetActive(MiniHouseInvWin *this, bool bActive);
bool __thiscall MiniHouseInvWin::GetActive(MiniHouseInvWin *this);
bool __thiscall MiniHouseInvWin::IsLock(MiniHouseInvWin *this);
void __thiscall MiniHouseInvTabButWin::MiniHouseInvTabButWin(MiniHouseInvTabButWin *this);
void __thiscall MiniHouseInvTabButWin::_MiniHouseInvTabButWin(MiniHouseInvTabButWin *this);
bool __thiscall MiniHouseInvTabButWin::Create(MiniHouseInvTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
void __thiscall MiniHouseInventoryWin::OnActivePage(MiniHouseInventoryWin *this, unsigned int uiIndex);
void __thiscall MiniHouseInventoryWin::OnHelpLink(MiniHouseInventoryWin *this);
void __thiscall MiniHouseInvWin::_MiniHouseInvWin(MiniHouseInvWin *this);
bool __thiscall MiniHouseInvTabButWin::EatDropInstance(MiniHouseInvTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall MiniHouseInventoryWin::MiniHouseInventoryWin(MiniHouseInventoryWin *this);
void __thiscall MiniHouseInventoryWin::_MiniHouseInventoryWin(MiniHouseInventoryWin *this);
void __thiscall MiniHouseInventoryWin::OnInvLClickNormalMode(MiniHouseInventoryWin *this, unsigned int uiInvIndex);
void __thiscall MiniHouseInventoryWin::OnInvLClickShopMode(MiniHouseInventoryWin *this, unsigned int uiInvIndex);
bool __thiscall MiniHouseInventoryWin::DropOnInv(MiniHouseInventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall MiniHouseInventoryWin::SetDefaultHouse(MiniHouseInventoryWin *this);
void __thiscall MiniHouseInvWin::MiniHouseInvWin(MiniHouseInvWin *this);
void __thiscall MiniHouseInvWin::UpdateMeWin(MiniHouseInvWin *this, float fCurTime);
void __thiscall MiniHouseInvWin::DoAction(MiniHouseInvWin *this);
void __thiscall MiniHouseInvWin::DoRAction(MiniHouseInvWin *this);
void __thiscall MiniHouseInvWin::OnFirstHitWin(MiniHouseInvWin *this);
void __thiscall MiniHouseInventoryWin::UpdateMeWin(MiniHouseInventoryWin *this, float fCurTime);
bool __thiscall MiniHouseInventoryWin::Change(MiniHouseInventoryWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex);
void __thiscall MiniHouseInventoryWin::OnInvLClick(MiniHouseInventoryWin *this, unsigned int uiInvIndex);
void __thiscall MiniHouseInventoryWin::OnInvShiftRClickNormalMode(MiniHouseInventoryWin *this, unsigned int uiInvIndex);
char __thiscall MiniHouseInventoryWin::GetSkin(MiniHouseInventoryWin *this);
void __thiscall MiniHouseInvWin::SetLock(MiniHouseInvWin *this, bool bLock);
void __thiscall MiniHouseInventoryWin::OnInvRClick(MiniHouseInventoryWin *this, unsigned int uiInvIndex);
bool __thiscall MiniHouseInventoryWin::DropOnEquip(MiniHouseInventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall MiniHouseInventoryWin::LockAllItem(MiniHouseInventoryWin *this);
void __thiscall MiniHouseInventoryWin::UnLockAllItem(MiniHouseInventoryWin *this);
bool __thiscall MiniHouseInvWin::EatDropInstance(MiniHouseInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall MiniHouseInventoryWin::OnCommand(MiniHouseInventoryWin *this, unsigned int wParam, int lParam);
MiniHouseInvWin *__cdecl MiniHouseInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
MiniHouseInvTabButWin *__cdecl MiniHouseInvTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
MiniHouseInventoryWin *__cdecl MiniHouseInventoryWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall MiniHouseInventoryWin::Create(MiniHouseInventoryWin *this, PgFrameWork *pkFrameWork);
bool __thiscall MiniHouseInvWin::Create(MiniHouseInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void *__thiscall MiniHouseInvTabButWin::_scalar_deleting_destructor_(MiniHouseInvTabButWin *this, unsigned int);
MiniHouse *__cdecl MiniHouseTable::GetByHandle(unsigned __int16 wHandle);
void *__thiscall MiniHouseInvWin::_scalar_deleting_destructor_(MiniHouseInvWin *this, unsigned int);
void *__thiscall MiniHouseInventoryWin::_scalar_deleting_destructor_(MiniHouseInventoryWin *this, unsigned int);
void __thiscall MiniHouseMenuWin::MiniHouseMenuWin(MiniHouseMenuWin *this);
void __thiscall MiniHouseMenuWin::_MiniHouseMenuWin(MiniHouseMenuWin *this);
void __thiscall MiniHouseMenuWin::OnCancel(MiniHouseMenuWin *this);
void __thiscall MiniHouseMenuWin::SetMHJoinText(MiniHouseMenuWin *this, char *pStr);
void __thiscall MiniHouseMenuWin::OnHelpLink(MiniHouseMenuWin *this);
void __thiscall MiniHouseMenuWin::Show(MiniHouseMenuWin *this, bool b);
bool __thiscall MiniHouseMenuWin::Create(MiniHouseMenuWin *this, PgFrameWork *pkFrameWork);
void __thiscall MiniHouseMenuWin::OnCommand(MiniHouseMenuWin *this, unsigned int wParam, int lParam);
void __thiscall MiniHouseMenuWin::EnablePrivateStoreBut(MiniHouseMenuWin *this, bool bEnable);
void __thiscall MiniHouseMenuWin::EnableRestBut(MiniHouseMenuWin *this, bool bEnable);
void __thiscall MiniHouseMenuWin::UpdateMeWin(MiniHouseMenuWin *this, float fCurTime);
MiniHouseMenuWin *__cdecl MiniHouseMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall MiniHouseMenuWin::_scalar_deleting_destructor_(MiniHouseMenuWin *this, unsigned int);
void __thiscall NpcMarkWin::SetIconDrawRect(NpcMarkWin *this, tagRECT kRect);
void __thiscall MiniMapMarkWin::MiniMapMarkWin(MiniMapMarkWin *this);
void __thiscall MiniMapMarkWin::_MiniMapMarkWin(MiniMapMarkWin *this);
PgWinSpr *__thiscall MiniMapMarkWin::GetMarkWin(MiniMapMarkWin *this);
void __thiscall MainCharMarkWin::MainCharMarkWin(MainCharMarkWin *this);
void __thiscall MainCharMarkWin::_MainCharMarkWin(MainCharMarkWin *this);
void __thiscall NpcMarkWin::NpcMarkWin(NpcMarkWin *this);
void __thiscall NpcMarkWin::_NpcMarkWin(NpcMarkWin *this);
void __thiscall NpcMarkWin::ProcessMeInput(NpcMarkWin *this, bool *bHit);
void __thiscall NpcMarkWin::DrawIcon(NpcMarkWin *this, PgWinSpr *pkSprWin);
void __thiscall PartyMarkWin::PartyMarkWin(PartyMarkWin *this);
void __thiscall PartyMarkWin::_PartyMarkWin(PartyMarkWin *this);
void __thiscall PartyMarkWin::SetParty(PartyMarkWin *this, PartyMemberInfo *pkInfo);
PartyMemberInfo *__thiscall PartyMarkWin::GetParty(PartyMarkWin *this);
void __thiscall RaidMarkWin::RaidMarkWin(RaidMarkWin *this);
void __thiscall RaidMarkWin::_RaidMarkWin(RaidMarkWin *this);
void __thiscall RaidMarkWin::SetRaidMember(RaidMarkWin *this, RaidMemberInfo *pkInfo);
RaidMemberInfo *__thiscall RaidMarkWin::GetRaidMember(RaidMarkWin *this);
void __thiscall QuestHelperMarkWin::ProcessMeInput(QuestHelperMarkWin *this, bool *bHit);
void __thiscall QuestHelperMarkWin::SetQuestID(QuestHelperMarkWin *this, unsigned __int16 kQuestID);
void __thiscall QuestHelperMarkWin::SetMobID(QuestHelperMarkWin *this, unsigned __int16 Mob_ID);
void __thiscall QuestHelperMarkWin::SetPos(QuestHelperMarkWin *this, NiPoint2 kPos);
void __thiscall QuestHelperMarkWin::SetQCID(QuestHelperMarkWin *this, unsigned __int16 QC_ID);
unsigned __int16 __thiscall QuestHelperMarkWin::GetQuestID(QuestHelperMarkWin *this);
unsigned __int16 __thiscall QuestHelperMarkWin::GetMobID(QuestHelperMarkWin *this);
unsigned __int16 __thiscall QuestHelperMarkWin::GetQCID(QuestHelperMarkWin *this);
void __thiscall QuestHelperMarkWin::GetPos(QuestHelperMarkWin *this, NiPoint2 *kPos);
void __thiscall MobAreaMarkWin::_MobAreaMarkWin(MobAreaMarkWin *this);
void __thiscall MobAreaMarkWin::SetQuestID(MobAreaMarkWin *this, unsigned __int16 QuestID);
void __thiscall MobAreaMarkWin::SetMobID(MobAreaMarkWin *this, unsigned __int16 MobID);
void __thiscall MobAreaMarkWin::SetPos(MobAreaMarkWin *this, NiPoint2 kPos);
unsigned __int16 __thiscall MobAreaMarkWin::GetQuestID(MobAreaMarkWin *this);
unsigned __int16 __thiscall MobAreaMarkWin::GetMobID(MobAreaMarkWin *this);
void __thiscall MobAreaMarkWin::GetPos(MobAreaMarkWin *this, NiPoint2 *kPos);
void __thiscall GTIScanMarkWin::GTIScanMarkWin(GTIScanMarkWin *this);
void __thiscall GTIScanMarkWin::_GTIScanMarkWin(GTIScanMarkWin *this);
void __thiscall GTIScanMarkWin::SetEnemyPos(GTIScanMarkWin *this, ScanMemberInfo pkMemberInfo);
ScanMemberInfo *__thiscall GTIScanMarkWin::GetEnemyPos(GTIScanMarkWin *this);
void __thiscall MapMarkWin::_MapMarkWin(MapMarkWin *this);
void __thiscall MapMarkWin::SetLifeTime(MapMarkWin *this, float fTime);
bool __thiscall MapMarkWin::IsPassLifeTime(MapMarkWin *this, float fTime);
void __thiscall MapMarkWin::SetPos(MapMarkWin *this, NiPoint2 *kPos);
NiPoint2 *__thiscall MapMarkWin::GetPos(MapMarkWin *this);
void __thiscall KQTeamMarkWin::KQTeamMarkWin(KQTeamMarkWin *this);
void __thiscall KQTeamMarkWin::_KQTeamMarkWin(KQTeamMarkWin *this);
void __thiscall KQTeamMarkWin::SetCharHandle(KQTeamMarkWin *this, unsigned __int16 kCharHandle);
unsigned __int16 __thiscall KQTeamMarkWin::GetCharHandle(KQTeamMarkWin *this);
void __thiscall MiniMapWin::SetMapTexture(MiniMapWin *this, NiSourceTexture *pkTexture);
void __thiscall MiniMapWin::SetMapShift(MiniMapWin *this, float fX, float fY);
void __thiscall MiniMapWin::SetMapScale(MiniMapWin *this, float fScale);
void __thiscall MiniMapWin::SetFullModeTextureUVs(MiniMapWin *this);
void __thiscall MiniMapWin::SetZoomModeTextureUVs(MiniMapWin *this);
void __thiscall MiniMapWin::Add_KQ_MOB(MiniMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto);
void __thiscall MiniMapWin::Remove_KQ_MOB(MiniMapWin *this, bool b);
bool __thiscall MiniMapWin::GetWinPos(MiniMapWin *this, float fCharWorldX, float fCharWorldY, float *rfXPos, float *rfYPos);
void __thiscall MiniMapWin::SetMapViewRect(MiniMapWin *this, unsigned int dwLeft, unsigned int dwTop, unsigned int dwRight, unsigned int dwBottom);
void __thiscall MiniMapWin::OnDestroy(MiniMapWin *this);
WorldMapWin *__thiscall MiniMapWin::GetWorldMap(MiniMapWin *this);
void __thiscall MiniMapWin::OpenFullWorldMap(MiniMapWin *this);
void __thiscall MiniMapWin::ShowGTQuit(MiniMapWin *this, bool b);
void __thiscall MiniMapWin::DirectMessage(MiniMapWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall MiniMapWin::AddQuestHelper(MiniMapWin *this);
bool __thiscall MiniMapMarkWin::HitTest(MiniMapMarkWin *this, int iSx, int iSy);
void __thiscall NpcMarkWin::UpdateMeWin(NpcMarkWin *this, float fCurTime);
bool __thiscall NpcMarkWin::HitTest(NpcMarkWin *this, int iSx, int iSy);
void __thiscall QuestHelperMarkWin::QuestHelperMarkWin(QuestHelperMarkWin *this);
void __thiscall MobAreaMarkWin::MobAreaMarkWin(MobAreaMarkWin *this);
void __thiscall MapMarkWin::MapMarkWin(MapMarkWin *this);
void __thiscall MiniMapWin::SetZoomButStateByMode(MiniMapWin *this);
void __thiscall MiniMapWin::OnSchedule(MiniMapWin *this);
void __thiscall MiniMapWin::UpdateMainCharPos(MiniMapWin *this);
void __thiscall MiniMapWin::UpdateMainCharDir(MiniMapWin *this);
void __thiscall MiniMapWin::UpdatePartyPos(MiniMapWin *this);
bool __thiscall MiniMapWin::IsInNPC(MiniMapWin *this, unsigned __int16 kCharHandle);
bool __thiscall MiniMapWin::IsInParty(MiniMapWin *this, PartyMemberInfo *pkInfo);
PartyMarkWin *__thiscall MiniMapWin::FindPartyWin(MiniMapWin *this, PartyMemberInfo *pkInfo);
void __thiscall MiniMapWin::UpdateNPCPos(MiniMapWin *this);
bool __thiscall MiniMapWin::IsInRaid(MiniMapWin *this, RaidMemberInfo *pkInfo);
RaidMarkWin *__thiscall MiniMapWin::FindRaidWin(MiniMapWin *this, RaidMemberInfo *pkInfo);
void __thiscall MiniMapWin::UpdateRaidPos(MiniMapWin *this);
void __thiscall MiniMapWin::UpdateGTEnemyPos(MiniMapWin *this);
void __thiscall MiniMapWin::StopScanEffect(MiniMapWin *this);
void __thiscall MiniMapWin::ResetKQAlarm(MiniMapWin *this);
void __thiscall MiniMapWin::UpdateKQAlarm(MiniMapWin *this);
bool __thiscall MiniMapWin::ConfirmKQAlarmInfo(MiniMapWin *this, unsigned int kHandle);
PgSprData *__thiscall MiniMapWin::GetMapIconSprData(MiniMapWin *this, unsigned int kIndex);
void __thiscall MiniMapWin::UpdateKQTeamMark(MiniMapWin *this);
void __thiscall MiniMapWin::ShowSideWin(MiniMapWin *this, bool b);
bool __thiscall MiniMapMarkWin::Create(MiniMapMarkWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
PgWinSpr *__cdecl CreateSprCenteredWin(PgSprData *pkSprData, int iXOff, int iYOff, PgWin *pkParent);
bool __thiscall NpcMarkWin::Create(NpcMarkWin *this, int iXPos, int iYPos, PgSprData *pkSprData, QuestStateImage *pkImage, PgWin *pkParent, PgSprData *pkAutoSprData);
void __thiscall QuestHelperMarkWin::OnClose(QuestHelperMarkWin *this);
bool __thiscall QuestHelperMarkWin::Create(QuestHelperMarkWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgSprData *pkAutoSprData);
void __thiscall QuestHelperMarkWin::DirectMessage(QuestHelperMarkWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall MiniMapWin::OnZoomIn(MiniMapWin *this);
void __thiscall MiniMapWin::OnZoomOut(MiniMapWin *this);
void __thiscall MiniMapWin::OnAllMap(MiniMapWin *this);
void __thiscall MiniMapWin::ClearWithOutMainChar(MiniMapWin *this);
void __thiscall MiniMapWin::RemoveNPC(MiniMapWin *this, unsigned __int16 handle);
void __thiscall MiniMapWin::RemoveParty(MiniMapWin *this, PartyMemberInfo *pkParty);
void __thiscall MiniMapWin::ClearParty(MiniMapWin *this);
void __thiscall MiniMapWin::OpenAllMap(MiniMapWin *this);
void __thiscall MiniMapWin::RemoveRaidMember(MiniMapWin *this, RaidMemberInfo *pkRaid);
void __thiscall MiniMapWin::ClearRaidMember(MiniMapWin *this);
void __thiscall MiniMapWin::ClearGTEnemyPos(MiniMapWin *this);
void __thiscall MiniMapWin::StartScanEffect(MiniMapWin *this);
void __thiscall MiniMapWin::AddKQAlarmInfo(MiniMapWin *this, MiniMapWin::sKQAlarmInfo *pkInfo);
void __thiscall MiniMapWin::RemoveKQAlarmInfo(MiniMapWin *this, unsigned int kHandle);
void __thiscall MiniMapWin::RemoveMapMark(MiniMapWin *this, unsigned int nGroup);
void __thiscall MiniMapWin::RemoveAllMapMark(MiniMapWin *this);
void __thiscall MiniMapWin::UpdateMapMark(MiniMapWin *this);
void __thiscall MiniMapWin::RemoveKQTeamMark(MiniMapWin *this, unsigned __int16 kCharHandle);
void __thiscall MiniMapWin::RemoveAllKQTeamMark(MiniMapWin *this);
void __thiscall MiniMapWin::RemoveInDunEffect(MiniMapWin *this);
void __thiscall MiniMapWin::ViewInDunLevelFlag(MiniMapWin *this, ID_LEVEL_TYPE eLevelType);
void __thiscall MiniMapWin::NotViewInDunLevelFlag(MiniMapWin *this);
void __thiscall QuestHelperMarkWin::_QuestHelperMarkWin(QuestHelperMarkWin *this);
void __thiscall MiniMapWin::_MiniMapWin(MiniMapWin *this);
void __thiscall MiniMapWin::SetMapZoomFlag(MiniMapWin *this, bool bZoomEnable);
void __thiscall MiniMapWin::OnCommand(MiniMapWin *this, unsigned int wParam, int lParam);
void __thiscall MiniMapWin::UpdateMeWin(MiniMapWin *this, float fCurTime);
void __thiscall MiniMapWin::MiniMapWin(MiniMapWin *this);
MainCharMarkWin *__cdecl MainCharMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
NpcMarkWin *__cdecl NpcMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, QuestStateImage *pkImage, PgWin *pkParent, PgSprData *pkAutoSprData);
PartyMarkWin *__cdecl PartyMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
RaidMarkWin *__cdecl RaidMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
QuestHelperMarkWin *__cdecl QuestHelperMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgSprData *pkAutoSprData);
MobAreaMarkWin *__cdecl MobAreaMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
GTIScanMarkWin *__cdecl GTIScanMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
MapMarkWin *__cdecl MapMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
KQTeamMarkWin *__cdecl KQTeamMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
MiniMapWin *__cdecl MiniMapWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall MiniMapWin::CreateKoreaUI(MiniMapWin *this, PgFrameWork *pkFrameWork);
void __thiscall MiniMapWin::AddNPC(MiniMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto);
void __thiscall MiniMapWin::AddParty(MiniMapWin *this, PartyMemberInfo *pkParty);
void __thiscall MiniMapWin::AddRaidMember(MiniMapWin *this, RaidMemberInfo *pkRaid);
void __thiscall MiniMapWin::AddGTEnemyPos(MiniMapWin *this, SHINE_XY_TYPE pkMemberInfo);
void __thiscall MiniMapWin::AddMapMark(MiniMapWin *this, PROTO_NC_SCENARIO_MAPMARK_CMD *kProto);
void __thiscall MiniMapWin::AddKQTeamMark(MiniMapWin *this, unsigned __int16 kCharHandle);
bool __thiscall MiniMapWin::Create(MiniMapWin *this, PgFrameWork *pkFrameWork);
void __thiscall MiniMapWin::AddNPC(MiniMapWin *this, PROTO_NC_BRIEFINFO_MOB_CMD *pkProto);
void __thiscall NpcMarkWin::DirectMessage(NpcMarkWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>(NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *this, unsigned int);
void *__thiscall GTIScanMarkWin::_scalar_deleting_destructor_(KQTeamMarkWin *this, unsigned int);
void __thiscall NiTPointerList<MiniMapWin::sKQAlarmInfo__>::_NiTPointerList<MiniMapWin::sKQAlarmInfo__>(NiTPointerList<MiniMapWin::sKQAlarmInfo *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *this, unsigned int);
void __thiscall PgTList<MiniMapWin::sKQAlarmInfo__>::_PgTList<MiniMapWin::sKQAlarmInfo__>(PgTList<MiniMapWin::sKQAlarmInfo *> *this);
MobCoordinate *__cdecl ITableBase<MobCoordinate_MobCoordinateTab>::GetByIndex(unsigned int uiIndex);
unsigned int __cdecl ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal();
unsigned int __cdecl MobCoordinateTab::GetRecordNum(unsigned __int16 Mob_ID);
void *__thiscall PgTList<MiniMapWin::sKQAlarmInfo__>::_vector_deleting_destructor_(PgTList<MiniMapWin::sKQAlarmInfo *> *this, unsigned int);
void *__thiscall QuestHelperMarkWin::_vector_deleting_destructor_(QuestHelperMarkWin *this, unsigned int);
void *__thiscall MiniMapWin::_vector_deleting_destructor_(MiniMapWin *this, unsigned int);
void __thiscall MiniPartyWin::ProcessMeInput(MiniPartyWin *this, bool *bHit);
void __thiscall MiniPartyWin::ClearInfo(MiniPartyWin *this);
const char *__thiscall MiniPartyWin::GetMemberName(MiniPartyWin *this);
void __thiscall MiniPartyWin::DirectMessage(MiniPartyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall MiniPartyWin::SetBuffUI(MiniPartyWin *this, Char *pkMember, StateType type, int *AbstateNums);
void __thiscall MiniPartyWin::SetOption(MiniPartyWin *this, unsigned int uiOpt);
void __thiscall MiniPartyWin::OnCommand(MiniPartyWin *this, unsigned int wParam, int lParam);
void __thiscall MiniPartyWin::_MiniPartyWin(MiniPartyWin *this);
bool __thiscall MiniPartyWin::Create(MiniPartyWin *this, int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork);
void __thiscall MiniPartyWin::UpdateMeWin(MiniPartyWin *this, float fCurTime);
void __thiscall MiniPartyWin::MiniPartyWin(MiniPartyWin *this);
void __thiscall MiniPartyWin::SetInfo(MiniPartyWin *this, PartyMemberInfo *pkInfo);
MiniPartyWin *__cdecl MiniPartyWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork);
void *__thiscall MiniPartyWin::_vector_deleting_destructor_(MiniPartyWin *this, unsigned int);
void __thiscall MoneyWin::MoneyWin(MoneyWin *this);
void __thiscall MoneyWin::_MoneyWin(MoneyWin *this);
void __thiscall MoneyWin::OnCmdCancel(MoneyWin *this);
void __thiscall MoneyWin::Open(MoneyWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiCancelMsg, char *pcText);
void __thiscall MoneyWin::SetEditFocus(MoneyWin *this, unsigned int uiFocus);
void __thiscall MoneyWin::OnEditEnd(MoneyWin *this, unsigned int wParam, int lParam);
void __thiscall MoneyWin::SetTitle1(MoneyWin *this, char *pcTitle);
void __thiscall MoneyWin::SetTitle2(MoneyWin *this, char *pcTitle);
void __thiscall HolyRewardMoneyWin::SetTitle1(HolyRewardMoneyWin *this, char *pcTitle);
void __thiscall HolyRewardMoneyWin::SetTitle2(HolyRewardMoneyWin *this, char *pcTitle);
void __thiscall MoneyWin::OnShowWin(MoneyWin *this);
void __thiscall MoneyWin::OnClose(MoneyWin *this);
void __thiscall HolyRewardMoneyWin::OnCmdOk(HolyRewardMoneyWin *this);
void __thiscall HolyRewardMoneyWin::Open(HolyRewardMoneyWin *this, unsigned int uiOkMsg, unsigned int uiCancelMsg, char *pcText1, char *pcText2);
bool __thiscall MoneyWin::Create(MoneyWin *this, PgFrameWork *pkFrameWork);
void __thiscall MoneyWin::OnCmdOk(MoneyWin *this);
void __thiscall HolyRewardMoneyWin::HolyRewardMoneyWin(HolyRewardMoneyWin *this);
void __thiscall HolyRewardMoneyWin::_HolyRewardMoneyWin(HolyRewardMoneyWin *this);
bool __thiscall HolyRewardMoneyWin::Create(HolyRewardMoneyWin *this, PgFrameWork *pkFrameWork);
void __thiscall HolyRewardMoneyWin::OnCmdCancel(HolyRewardMoneyWin *this);
void __thiscall MoneyWin::OnCommand(MoneyWin *this, unsigned int wParam, int lParam);
void __thiscall MoneyWin::UpdateMeWin(MoneyWin *this, float fCurTime);
void __thiscall HolyRewardMoneyWin::OnCommand(HolyRewardMoneyWin *this, unsigned int wParam, int lParam);
void __thiscall HolyRewardMoneyWin::UpdateMeWin(HolyRewardMoneyWin *this, float fCurTime);
MoneyWin *__cdecl MoneyWin::CreateWin(PgFrameWork *pkFrameWork);
HolyRewardMoneyWin *__cdecl HolyRewardMoneyWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall MoneyWin::_vector_deleting_destructor_(MoneyWin *this, unsigned int);
void *__thiscall HolyRewardMoneyWin::_scalar_deleting_destructor_(HolyRewardMoneyWin *this, unsigned int);
void __thiscall MoveModeWin::MoveModeWin(MoveModeWin *this);
void __thiscall MoveModeWin::_MoveModeWin(MoveModeWin *this);
void __thiscall MoveModeWin::OnCommand(MoveModeWin *this, unsigned int wParam, int lParam);
bool __thiscall MoveModeWin::Create(MoveModeWin *this, PgFrameWork *pkFrameWork);
MoveModeWin *__cdecl MoveModeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall MoveModeWin::_vector_deleting_destructor_(MoveModeWin *this, unsigned int);
void __thiscall MysteryVaultWin::MysteryVaultWin(MysteryVaultWin *this);
void __thiscall MysteryVaultWin::OnMysteryVaultBtnClick(MysteryVaultWin *this);
void __thiscall MysteryVaultWin::OnCommand(MysteryVaultWin *this, unsigned int wParam, int lParam);
void __thiscall MysteryVaultWin::UpdateMeWin(MysteryVaultWin *this, float fCurTime);
bool __thiscall MysteryVaultWin::Create(MysteryVaultWin *this, PgFrameWork *pkFrameWork);
void __thiscall MysteryVaultWin::_MysteryVaultWin(MysteryVaultWin *this);
void __thiscall MysteryVaultWin::OnReachTheLevel(MysteryVaultWin *this, unsigned int curUserLV, unsigned int itemLV);
MysteryVaultWin *__cdecl MysteryVaultWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall MysteryVaultWin::_scalar_deleting_destructor_(MysteryVaultWin *this, unsigned int);
void __thiscall ItemShopInvWin::_ItemShopInvWin(ItemShopInvWin *this);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__thiscall ItemShopInvWin::GetItem(ItemShopInvWin *this);
void __thiscall ItemShopInvWin::SetItem(ItemShopInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo);
ItemRepurchase *__thiscall ItemShopInvWin::GetRepurchaseItem(ItemShopInvWin *this);
bool __thiscall ItemShopInvWin::Create(ItemShopInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall ItemShopInvWin::OnFirstHitWin(ItemShopInvWin *this);
void __thiscall NPCItemWin::OnHelpLink(NPCItemWin *this);
void __thiscall ItemShopInvWin::ItemShopInvWin(ItemShopInvWin *this);
void __thiscall ItemShopInvWin::SetItemIcon(ItemShopInvWin *this, ItemRepurchase *pkItem);
void __thiscall ItemShopInvWin::SetRepurchaseItem(ItemShopInvWin *this, ItemRepurchase *pkItem);
void __thiscall NPCItemWin::OnInvLClick(NPCItemWin *this, unsigned int uiInvIndex);
void __thiscall NPCItemWin::TabShow(NPCItemWin *this, NPCItemWin::TAPTYPE type, bool _bTab);
void __thiscall NPCItemWin::DeleteAllContents(NPCItemWin *this);
unsigned int __thiscall NPCItemWin::GetSellItemNum(NPCItemWin *this);
unsigned int __thiscall NPCItemWin::GetMaxPageNum(NPCItemWin *this);
void __thiscall NPCItemWin::DeleteRepurchaseInv(NPCItemWin *this, unsigned __int16 nHandle);
void __thiscall NPCItemWin::AddRepurchaseInv(NPCItemWin *this, PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *pkRepurItem);
void __thiscall ItemShopInvWin::DoAction(ItemShopInvWin *this);
void __thiscall ItemShopInvWin::DoRAction(ItemShopInvWin *this);
void __thiscall NPCItemWin::OnCancel(NPCItemWin *this);
void __thiscall NPCItemWin::UpdatePageInfo(NPCItemWin *this);
void __thiscall NPCItemWin::ReSetItemMarket(NPCItemWin *this);
void __thiscall NPCItemWin::OnShowWin(NPCItemWin *this);
void __thiscall NPCItemWin::ResetContents(NPCItemWin *this);
void __thiscall NPCItemWin::OnTab(NPCItemWin *this, NPCItemWin::PAGETYPE index);
void __thiscall NPCItemWin::ResetPage(NPCItemWin *this, int NPCType);
ItemShopInvWin *__cdecl ItemShopInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall NPCItemWin::NPCItemWin(NPCItemWin *this);
void __thiscall NPCItemWin::_NPCItemWin(NPCItemWin *this);
NPCItemWin *__cdecl NPCItemWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall NPCItemWin::ResetPage(NPCItemWin *this);
void __thiscall NPCItemWin::OnPrevPage(NPCItemWin *this);
void __thiscall NPCItemWin::OnNextPage(NPCItemWin *this);
bool __thiscall NPCItemWin::Create(NPCItemWin *this, PgFrameWork *pkFrameWork);
void __thiscall NPCItemWin::OnInvRClick(NPCItemWin *this, unsigned int uiInvIndex);
void __thiscall NPCItemWin::OnCommand(NPCItemWin *this, unsigned int wParam, int lParam);
void *__thiscall ItemShopInvWin::_scalar_deleting_destructor_(ItemShopInvWin *this, unsigned int);
void *__thiscall NPCItemWin::_scalar_deleting_destructor_(NPCItemWin *this, unsigned int);
ItemInfo *__cdecl ItemMoneyTab::GetItemMoneyInfoByItemInx(char *pcInxName);
void __thiscall NPCSkillInvWin::_NPCSkillInvWin(NPCSkillInvWin *this);
unsigned __int16 __thiscall NPCSkillInvWin::GetSkill(NPCSkillInvWin *this);
bool __thiscall NPCSkillInvWin::Create(NPCSkillInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall NPCSkillInvWin::OnFirstHitWin(NPCSkillInvWin *this);
void __thiscall NPCSkillWin::OnHelpLink(NPCSkillWin *this);
unsigned int __thiscall NPCSkillWin::GetSellItemNum(NPCSkillWin *this);
unsigned int __thiscall NPCSkillWin::GetMaxPageNum(NPCSkillWin *this);
NPCSkillInvWin *__thiscall NPCSkillWin::GetInvWin(NPCSkillWin *this, unsigned int uiIndex);
void __thiscall NPCSkillWin::_NPCSkillWin(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnOk(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnCancel(NPCSkillWin *this);
void __thiscall NPCSkillWin::UpdatePageInfo(NPCSkillWin *this);
void __thiscall NPCSkillInvWin::DoAction(NPCSkillInvWin *this);
void __thiscall NPCSkillInvWin::DoRAction(NPCSkillInvWin *this);
void __thiscall NPCSkillWin::NPCSkillWin(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnInvRClick(NPCSkillWin *this, unsigned int uiInvIndex);
void __thiscall NPCSkillWin::OnShowWin(NPCSkillWin *this);
void __thiscall NPCSkillInvWin::SetItem(NPCSkillInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo);
void __thiscall NPCSkillInvWin::SetItem(NPCSkillInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo, unsigned int uiSkillType);
void __thiscall NPCSkillInvWin::SetItem(NPCSkillInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo, unsigned int uiSkillType, NiTexture *pkTexture, NiD3DPass *pkD3DPass);
void __thiscall NPCSkillWin::ResetContents(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnSetPage(NPCSkillWin *this, unsigned int uiPage);
void __thiscall NPCSkillInvWin::NPCSkillInvWin(NPCSkillInvWin *this);
void __thiscall NPCSkillWin::ResetPage(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnActiveSkill(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnPasssiveSkill(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnProductSkill(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnPrevPage(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnNextPage(NPCSkillWin *this);
void __thiscall NPCSkillWin::OnSelectJob(NPCSkillWin *this, unsigned int uiIndex);
void __thiscall NPCSkillWin::SelectClassPage(NPCSkillWin *this, char kClass);
NPCSkillInvWin *__cdecl NPCSkillInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
NPCSkillWin *__cdecl NPCSkillWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall NPCSkillWin::Create(NPCSkillWin *this, PgFrameWork *pkFrameWork);
void __thiscall NPCSkillWin::OnCommand(NPCSkillWin *this, unsigned int wParam, int lParam);
void *__thiscall NPCSkillInvWin::_vector_deleting_destructor_(NPCSkillInvWin *this, unsigned int);
unsigned int __cdecl ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::GetTotal();
PassiveSkillViewInfo *__cdecl PasSkillViewInfoTab::GetByInxName(char *pcInxName);
void *__thiscall NPCSkillWin::_vector_deleting_destructor_(NPCSkillWin *this, unsigned int);
void __thiscall NPCSoulInvWin::NPCSoulInvWin(NPCSoulInvWin *this);
void __thiscall NPCSoulInvWin::_NPCSoulInvWin(NPCSoulInvWin *this);
bool __thiscall NPCSoulInvWin::Create(NPCSoulInvWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiInvIndex);
void __thiscall NPCSoulInvWin::OnFirstHitWin(NPCSoulInvWin *this);
void __thiscall NPCSoulWin::NPCSoulWin(NPCSoulWin *this);
void __thiscall NPCSoulWin::_NPCSoulWin(NPCSoulWin *this);
void __thiscall NPCSoulWin::OnHelpLink(NPCSoulWin *this);
void __thiscall NPCSoulWin::ResetPage(NPCSoulWin *this);
void __thiscall NPCSoulWin::OnCancel(NPCSoulWin *this);
void __thiscall NPCSoulWin::OnBuyHPOk(NPCSoulWin *this, unsigned int uiLot);
void __thiscall NPCSoulWin::OnBuySPOk(NPCSoulWin *this, unsigned int uiLot);
void __thiscall NPCSoulInvWin::DoAction(NPCSoulInvWin *this);
void __thiscall NPCSoulInvWin::DoRAction(NPCSoulInvWin *this);
void __thiscall NPCSoulWin::OnInvLClick(NPCSoulWin *this, unsigned int uiInvIndex);
void __thiscall NPCSoulWin::OnInvRClick(NPCSoulWin *this, unsigned int uiInvIndex);
void __thiscall NPCSoulWin::OnCommand(NPCSoulWin *this, unsigned int wParam, int lParam);
NPCSoulInvWin *__cdecl NPCSoulInvWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiInvIndex);
NPCSoulWin *__cdecl NPCSoulWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall NPCSoulWin::Create(NPCSoulWin *this, PgFrameWork *pkFrameWork);
void *__thiscall NPCSoulInvWin::_vector_deleting_destructor_(NPCSoulInvWin *this, unsigned int);
void *__thiscall NPCSoulWin::_vector_deleting_destructor_(NPCSoulWin *this, unsigned int);
void __thiscall PartyJoinProposeWin::OnBut1(PartyJoinProposeWin *this);
void __thiscall PartyJoinProposeWin::OnBut2(PartyJoinProposeWin *this);
void __thiscall PartyJoinProposeWin::SetMsg(PartyJoinProposeWin *this, char *pcText);
void __thiscall PartyJoinProposeWin::OnTimer(PartyJoinProposeWin *this);
void __thiscall PartyJoinProposeWin::UpdateMeWin(PartyJoinProposeWin *this, float fCurTime);
void __thiscall PartyJoinProposeWin::_PartyJoinProposeWin(PartyJoinProposeWin *this);
bool __thiscall PartyJoinProposeWin::Create(PartyJoinProposeWin *this, PgFrameWork *pkFrameWork);
void __thiscall PartyJoinProposeWin::OnCommand(PartyJoinProposeWin *this, unsigned int wParam, int lParam);
void __thiscall PartyJoinProposeWin::PartyJoinProposeWin(PartyJoinProposeWin *this);
PartyJoinProposeWin *__cdecl PartyJoinProposeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall PartyJoinProposeWin::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall PartyJoinProposeWin::_scalar_deleting_destructor_(PartyJoinProposeWin *this, unsigned int);
void __thiscall PartyLootSetupWin::OnHelpLink(PartyLootSetupWin *this);
void __thiscall PartyLootSelectWin::PartyLootSelectWin(PartyLootSelectWin *this);
void __thiscall PartyLootSelectWin::_PartyLootSelectWin(PartyLootSelectWin *this);
void __thiscall PartyLootSelectWin::OnSlideBtnUp(PartyLootSelectWin *this);
void __thiscall PartyLootSelectWin::OnHelpLink(PartyLootSelectWin *this);
void __thiscall PartyLootSetupWin::SetLooterName(PartyLootSetupWin *this, const char *name);
void __thiscall PartyLootSelectWin::UpdateMeWin(PartyLootSelectWin *this, float fCurTime);
void __thiscall PartyLootSelectWin::OnSlideBar(PartyLootSelectWin *this);
void __thiscall PartyLootSetupWin::_PartyLootSetupWin(PartyLootSetupWin *this);
bool __thiscall PartyLootSetupWin::Create(PartyLootSetupWin *this, PgFrameWork *pkFrameWork);
void __thiscall PartyLootSetupWin::UpdateLooterList(PartyLootSetupWin *this);
void __thiscall PartyLootSetupWin::ChangeLooter(PartyLootSetupWin *this, unsigned int index);
void __thiscall PartyLootSetupWin::OnCommand(PartyLootSetupWin *this, unsigned int wParam, int lParam);
void __thiscall PartyLootSetupWin::DirectMessage(PartyLootSetupWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall PartyLootSetupWin::SetLootingType(PartyLootSetupWin *this, char nLootingType);
void __thiscall PartyLootSetupWin::SetItemGrade(PartyLootSetupWin *this, char nItemGrade);
void __thiscall PartyLootSetupWin::PartyLootSetupWin(PartyLootSetupWin *this);
PartyLootSetupWin *__cdecl PartyLootSetupWin::CreateWin(PgFrameWork *pkFrameWork);
PartyLootSelectWin *__cdecl PartyLootSelectWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall PartyLootSelectWin::OnCommand(PartyLootSelectWin *this, unsigned int wParam, int lParam);
bool __thiscall PartyLootSelectWin::Create(PartyLootSelectWin *this, PgFrameWork *pkFrameWork);
void *__thiscall PartyLootSelectWin::_vector_deleting_destructor_(PartyLootSelectWin *this, unsigned int);
void *__thiscall PartyLootSetupWin::_scalar_deleting_destructor_(PartyLootSetupWin *this, unsigned int);
void __thiscall CPartyMatchWin::AddPartyInfo(CPartyMatchWin *this, PROTO_NC_PARTY_FINDER_INFO *pkInfo);
void __thiscall CPartyMatchWin::DelPartyInfo(CPartyMatchWin *this, Name5 *psCharID);
void __thiscall CPartyMatchWin::AbbreviateText(CPartyMatchWin *this, char *pResult, char *pTarget, int nAbbreviationSize);
CPartyFinder::PARTY_FINDER_INFO_LIST *__thiscall CPartyMatchWin::FindList(CPartyMatchWin *this, int nIndexNum);
void __thiscall CPartyMatchWin::ClearList(CPartyMatchWin *this);
void __thiscall CPartyMatchWin::OnHelpLink(CPartyMatchWin *this);
void __thiscall CPartyMatchWin::UpdateMeWin(CPartyMatchWin *this, float fCurTime);
void __thiscall CPartyMatchWin::OnWinClose(CPartyMatchWin *this);
void __thiscall CPartyMatchWin::OnChangeTab(CPartyMatchWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab);
void __thiscall CPartyMatchWin::UpdateToolTip(CPartyMatchWin *this);
void __thiscall CPartyMatchWin::UpdateList(CPartyMatchWin *this);
void __thiscall CPartyMatchWin::ChangeUserName(CPartyMatchWin *this, Name5 *OldName, Name5 *NewName);
void __thiscall CPartyMatchWin::CPartyMatchWin(CPartyMatchWin *this);
void __thiscall CPartyMatchWin::_CPartyMatchWin(CPartyMatchWin *this);
void __thiscall CPartyMatchWin::OnCommand(CPartyMatchWin *this, unsigned int wParam, int lParam);
bool __thiscall CPartyMatchWin::SetListBriefInfo(CPartyMatchWin *this, unsigned __int16 wCurrPageNo, unsigned __int16 wMaxPages, bool bHaveOwnInfo);
void __thiscall CPartyMatchWin::OnShowWin(CPartyMatchWin *this);
CPartyMatchWin *__cdecl CPartyMatchWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall CPartyMatchWin::Create(CPartyMatchWin *this, PgFrameWork *pkFrameWork);
void *__thiscall CPartyMatchWin::_scalar_deleting_destructor_(CPartyMatchWin *this, unsigned int);
void __thiscall PartyWin::ProcessMeInput(PartyWin *this, bool *bHit);
void __thiscall PartyWin::ClearInfo(PartyWin *this);
const char *__thiscall PartyWin::GetMemberName(PartyWin *this);
void __thiscall PartyWin::_PartyWin(PartyWin *this);
void __thiscall PartyWin::DirectMessage(PartyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall PartyWin::SetBuffUI(PartyWin *this, Char *pkMember, StateType type, int *AbstateNums);
void __thiscall PartyWin::SetOption(PartyWin *this, unsigned int uiOpt);
void __thiscall PartyWin::OnCommand(PartyWin *this, unsigned int wParam, int lParam);
void __thiscall PartyWin::PartyWin(PartyWin *this);
bool __thiscall PartyWin::Create(PartyWin *this, int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork);
void __thiscall PartyWin::UpdateMeWin(PartyWin *this, float fCurTime);
void __thiscall PartyWin::SetInfo(PartyWin *this, PartyMemberInfo *pkInfo);
PartyWin *__cdecl PartyWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork);
void *__thiscall PartyWin::_vector_deleting_destructor_(PartyWin *this, unsigned int);
void __thiscall PartyWinInterface::PartyWinInterface(PartyWinInterface *this);
void __thiscall PartyWinInterface::_PartyWinInterface(PartyWinInterface *this);
void __thiscall PartyWinInterface::CreatePartyWin(PartyWinInterface *this, PgFrameWork *pkFrameWork);
void __thiscall PartyWinInterface::DestoryPartyWin(PartyWinInterface *this);
void __thiscall PartyWinInterface::CreateMiniPartyWin(PartyWinInterface *this, PgFrameWork *pkFrameWork);
void __thiscall PartyWinInterface::DestoryMiniPartyWin(PartyWinInterface *this);
void __thiscall PartyWinInterface::SetPartyWinMachineOpt(PartyWinInterface *this);
void __thiscall PartyWinInterface::SetMiniPartyWinMachineOpt(PartyWinInterface *this);
void __thiscall PartyWinInterface::Create(PartyWinInterface *this, PgFrameWork *pkFrameWork);
void __thiscall PartyWinInterface::Destory(PartyWinInterface *this);
void __thiscall PartyWinInterface::UpdatePartyWin(PartyWinInterface *this);
void __thiscall PartyWinInterface::UpdateMiniPartyWin(PartyWinInterface *this);
void __thiscall PartyWinInterface::SetWindowCull(PartyWinInterface *this, bool bIsCull);
void __thiscall PartyWinInterface::Update(PartyWinInterface *this);
void __thiscall PartyWinInterface::TogglePartyWin(PartyWinInterface *this);
void __thiscall PkKqRankingWin::PkKqRankingWin(PkKqRankingWin *this);
void __thiscall PkKqRankingWin::_PkKqRankingWin(PkKqRankingWin *this);
void __thiscall PkKqRankingWin::Clear(PkKqRankingWin *this);
void __thiscall PkKqRankingWin::OnCmdClose(PkKqRankingWin *this);
void __thiscall PkKqRankingWin::SetBaseScore(PkKqRankingWin *this, unsigned int dwBaseScore);
void __thiscall PkKqRankingWin::SortListBy(PkKqRankingWin *this, int iIndex);
void __thiscall PkKqRankingWin::OnHelpLink(PkKqRankingWin *this);
void __thiscall PkKqRankingWin::AddRanking(PkKqRankingWin *this, char *pcName, unsigned int dwKillPoint, unsigned int dwDownPoint, unsigned int dwContribute, char byMedal, char byGender, char byChrCls, unsigned int dwScore);
void __thiscall PkKqRankingWin::OnCmdSlide(PkKqRankingWin *this);
void __thiscall PkKqRankingWin::OnCommand(PkKqRankingWin *this, unsigned int wParam, int lParam);
bool __thiscall PkKqRankingWin::Create(PkKqRankingWin *this, PgFrameWork *pkFrameWork);
PkKqRankingWin *__cdecl PkKqRankingWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall PkKqRankingWin::_vector_deleting_destructor_(PkKqRankingWin *this, unsigned int);
bool __cdecl GTStatusWin::RankInfo::High_DieCount(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::High_DecreaseScore(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw);
void __thiscall PkRealTiemRankWin::OnHelpLink(PkRealTiemRankWin *this);
bool __thiscall PkRealTiemRankWin::Open(PkRealTiemRankWin *this);
void __thiscall PkRealTiemRankWin::minimizeWindow(PkRealTiemRankWin *this, bool btrue);
bool __thiscall PkRealTiemRankWin::AddRankPlayerInfo(PkRealTiemRankWin *this, PkRealTiemRankWin::RankInfo *rInfo);
bool __thiscall PkRealTiemRankWin::DisplayInfoSetting(PkRealTiemRankWin *this);
void __thiscall PkRealTiemRankWin::PkRealTiemRankWin(PkRealTiemRankWin *this);
void __thiscall PkRealTiemRankWin::_PkRealTiemRankWin(PkRealTiemRankWin *this);
PkRealTiemRankWin *__cdecl PkRealTiemRankWin::CreateWin(PgFrameWork *pFrameWork);
bool __thiscall PkRealTiemRankWin::Clear(PkRealTiemRankWin *this);
bool __thiscall PkRealTiemRankWin::Close(PkRealTiemRankWin *this, bool bReset);
bool __thiscall PkRealTiemRankWin::SetRankInfo(PkRealTiemRankWin *this, const char *pkName, unsigned int unScore, unsigned int Down, unsigned int Kill);
void __thiscall PkRealTiemRankWin::OnCommand(PkRealTiemRankWin *this, unsigned int wParam, int lParam);
bool __thiscall PkRealTiemRankWin::Create(PkRealTiemRankWin *this, PgFrameWork *pkFrameWork);
PkRealTiemRankWin::RankInfo *__thiscall std::allocator<PkRealTiemRankWin::RankInfo>::allocate(std::allocator<PkRealTiemRankWin::RankInfo> *this, unsigned int _Count);
PkRealTiemRankWin::RankInfo *__cdecl std::_Move<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Destroy_range<std::allocator<PkRealTiemRankWin::RankInfo>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, std::allocator<PkRealTiemRankWin::RankInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::swap<PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_Left, PkRealTiemRankWin::RankInfo *_Right);
void __cdecl std::_Push_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Top, PkRealTiemRankWin::RankInfo *_Val, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *));
PkRealTiemRankWin::RankInfo *__cdecl std::_Move_backward<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Push_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Top, PkRealTiemRankWin::RankInfo *_Val, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
PkRealTiemRankWin::RankInfo *__cdecl std::_Uninit_move<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo___std::allocator<PkRealTiemRankWin::RankInfo>_PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, std::allocator<PkRealTiemRankWin::RankInfo> *_Al, PkRealTiemRankWin::RankInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Bottom, PkRealTiemRankWin::RankInfo *_Val, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *));
void __cdecl std::_Med3<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Mid, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Bottom, PkRealTiemRankWin::RankInfo *_Val, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Pop_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, PkRealTiemRankWin::RankInfo *_Val, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal);
void __cdecl std::_Median<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Mid, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *));
void __cdecl std::_Make_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *), int *__formal, PkRealTiemRankWin::RankInfo *__formal);
void __cdecl std::_Insertion_sort1<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *), PkRealTiemRankWin::RankInfo *__formal);
void __cdecl std::_Median<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Mid, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Make_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal, PkRealTiemRankWin::RankInfo *__formal);
void __cdecl std::_Insertion_sort1<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>_PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, PkRealTiemRankWin::RankInfo *__formal);
void __cdecl std::_Pop_heap_0<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *), PkRealTiemRankWin::RankInfo *__formal);
void __cdecl std::_Pop_heap_0<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, PkRealTiemRankWin::RankInfo *__formal);
std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> *__cdecl std::_Unguarded_partition<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> *result, PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *));
std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> *__cdecl std::_Unguarded_partition<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> *result, PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::make_heap<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Insertion_sort<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::_vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this);
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::reserve(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this, unsigned int _Count);
void __cdecl std::_Sort_heap<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *));
void __cdecl std::_Sort_heap<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::_Reserve(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this, unsigned int _Count);
void __cdecl std::sort_heap<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void *__thiscall PkRealTiemRankWin::_scalar_deleting_destructor_(PkRealTiemRankWin *this, unsigned int);
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::push_back(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this, PkRealTiemRankWin::RankInfo *_Val);
void __cdecl std::_Sort<PkRealTiemRankWin::RankInfo___int_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, int _Ideal, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *));
void __cdecl std::_Sort<PkRealTiemRankWin::RankInfo___int_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, int _Ideal, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::sort<std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>>_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > > _First, std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > > _Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred);
void __thiscall PlayGuideMinWin::PlayGuideMinWin(PlayGuideMinWin *this);
void __thiscall PlayGuideMinWin::_PlayGuideMinWin(PlayGuideMinWin *this);
void __thiscall PlayGuideMinWin::OnCommand(PlayGuideMinWin *this, unsigned int wParam, int lParam);
bool __thiscall PlayGuideWin::sTextList::Close(PlayGuideWin::sTextList *this);
bool __thiscall PlayGuideWin::sTextList::Up(PlayGuideWin::sTextList *this, const int iTopYPos);
bool __thiscall PlayGuideWin::sTextList::Down(PlayGuideWin::sTextList *this, const int iBottomYPos);
void __thiscall PlayGuideWin::sTextList::Reset(PlayGuideWin::sTextList *this);
void __thiscall PlayGuideWin::OnClose(PlayGuideWin *this);
void __thiscall PlayGuideWin::AdjustFocus(PlayGuideWin *this);
void __thiscall PlayGuideMinWin::OnClick(PlayGuideMinWin *this);
void __thiscall PlayGuideWin::OnWinClose(PlayGuideWin *this);
void __thiscall PlayGuideWin::UpdateScroll(PlayGuideWin *this);
bool __thiscall PageWinSpr::HitTest(PageWinSpr *this, int iSx, int iSy);
bool __thiscall PlayGuideMinWin::Create(PlayGuideMinWin *this, PgFrameWork *pkFrameWork);
void __thiscall PlayGuideWin::InitPos(PlayGuideWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate);
void __thiscall PlayGuideWin::OnTextList(PlayGuideWin *this, const unsigned int uiIndex);
void __thiscall PlayGuideWin::UpdateTextList(PlayGuideWin *this);
void __thiscall PlayGuideWin::Reset(PlayGuideWin *this);
bool __thiscall PlayGuideWin::UpdatePageContents(PlayGuideWin *this, BasicInfoLink *pkBasicInfoLink);
void __thiscall PlayGuideWin::EraseAllSpace(PlayGuideWin *this, char *acString);
void __thiscall PlayGuideWin::OnSlideBar(PlayGuideWin *this);
void __thiscall PlayGuideWin::UpdateSelectedPage(PlayGuideWin *this);
void __thiscall PlayGuideWin::OnPageBtn(PlayGuideWin *this, bool IsBtnLeft);
void __thiscall PlayGuideWin::UpdateMeWin(PlayGuideWin *this, float fCurTime);
PageWinSpr *__cdecl PageWinSpr::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
PlayGuideMinWin *__cdecl PlayGuideMinWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall PlayGuideWin::PlayGuideWin(PlayGuideWin *this);
void __thiscall PlayGuideWin::_PlayGuideWin(PlayGuideWin *this);
PlayGuideWin *__cdecl PlayGuideWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall PlayGuideWin::SetInfo(PlayGuideWin *this, BasicInfoLinkType eType);
void __thiscall PlayGuideWin::OnSearchBtn(PlayGuideWin *this);
void __thiscall PlayGuideWin::OpenPlayGuideSearchList(PlayGuideWin *this, char *acUIFile);
void __thiscall PlayGuideWin::OnEditEnd(PlayGuideWin *this, unsigned int wParam, int lParam);
void __thiscall PageWinSpr::SetToolTip(PageWinSpr *this, const char *pcText);
bool __thiscall PlayGuideWin::Create(PlayGuideWin *this, PgFrameWork *pkFrameWork);
void __thiscall PlayGuideWin::OnCommand(PlayGuideWin *this, unsigned int wParam, int lParam);
void *__thiscall PlayGuideMinWin::_vector_deleting_destructor_(PlayGuideMinWin *this, unsigned int);
BasicInfoLink *__cdecl BasicInfoLinkTab::GetByType(BasicInfoLinkType eType);
BasicInfoLink *__cdecl BasicInfoLinkTab::GetByCategory(BasicInfoCategory eCategory);
BasicInfoFindWord *__cdecl BasicInfoFindWordTab::GetByFindType(BasicInfoFindType eType);
void *__thiscall PageWinSpr::_scalar_deleting_destructor_(PageWinSpr *this, unsigned int);
void __thiscall std::vector<BasicInfoFind___std::allocator<BasicInfoFind__>>::clear(std::vector<BasicInfoFind *,std::allocator<BasicInfoFind *> > *this);
void __cdecl BasicInfoFindTab::GetListByFindType(BasicInfoFindType eType, std::vector<BasicInfoFind *,std::allocator<BasicInfoFind *> > *pkBasicInfoFindVector, bool *pabTypeCheck);
void __cdecl BasicInfoFindWordTab::GetListByWord(char *FindWord, std::vector<BasicInfoFindWord *,std::allocator<BasicInfoFindWord *> > *BasicInfoFindWordVector);
void *__thiscall PlayGuideWin::_scalar_deleting_destructor_(PlayGuideWin *this, unsigned int);
LONG __cdecl PopupMenuTemplate::Terminate();
PopupMenu *__cdecl PopupMenuTemplate::GetResolutionMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::AccountFrameGetResolutionMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetWingStonePositionList(unsigned int uiParam, char *pcText, unsigned __int16 id);
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_FocusObjCancel();
PopupMenu *__cdecl PopupMenuTemplate::GetTargetCharName(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetProposeTradeMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetMainCharUnMetamorphosis();
PopupMenu *__cdecl PopupMenuTemplate::GetInvitePartyMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetCancelMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetFirePartyMemberMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetInviteGuildMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetDelegatePartyChiefMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetQuitPartyMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetPartyMasterLootSetupMenu(PARTY_ITEM_LOOTING_TYPE eDistType);
PopupMenu *__cdecl PopupMenuTemplate::GetPartyMemberLootSetupMenu(PARTY_ITEM_LOOTING_TYPE eDistType);
PopupMenu *__cdecl PopupMenuTemplate::GetFollowCharMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetChatWhisperMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_Endure(int iEndure);
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_EndurePercentage(int iEndurePer);
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListConfigRoomMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListShowBlogMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListChangeBlogAddrMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListKickGuestMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListSetArrangeModeOnMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListSetArrangeModeOffMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ReturnToInvMHItem(bool ClickInv);
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ArrToInvMHItem();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_DeleteMHItem();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ObjAction();
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ReArrange();
PopupMenu *__cdecl PopupMenuTemplate::GetInviteHighHolyPromise(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetPartyBuffMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberSelectMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberInviteMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberVanishMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberLeaveMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetChangeRaidLeaderMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetChangeRaidLooterMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetUpRaidSubLeaderMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetDownRaidSubLeaderMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetPartyLootSetupMenu();
PopupMenu *__cdecl PopupMenuTemplate::GetCollectOpenMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetInviteFriendMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetRideOnMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetVoteMenu(unsigned int uiParam);
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ObjName(char *pObjName);
void __thiscall PopupMenuSubMenu::SetPopupMenu(PopupMenuSubMenu *this, PopupMenuWin *pkPopupMenuWin);
void __thiscall PopupMenu::PopupMenu(PopupMenu *this);
void __thiscall PopupMenu::_PopupMenu(PopupMenu *this);
void __thiscall PopupMenu::SetClickEvent(PopupMenu *this, int iMsg, void *pvMsgBody);
void __thiscall PopupMenuText::Resize(PopupMenuText *this, unsigned int dwWidth, unsigned int dwHeight);
void __thiscall PopupMenuText::GetExtent(PopupMenuText *this, unsigned int *rdwWidth, unsigned int *rdwHeight);
void __thiscall PopupMenuText::OnChangeButShow(PopupMenuText *this, PgWinBut::ButShow eShow);
void __thiscall PopupMenuTextCheck::Resize(PopupMenuTextCheck *this, unsigned int dwWidth, unsigned int dwHeight);
void __thiscall PopupMenuTextCheck::GetExtent(PopupMenuTextCheck *this, unsigned int *rdwWidth, unsigned int *rdwHeight);
void __thiscall PopupMenuTextCheck::OnCommand(PopupMenuTextCheck *this, unsigned int wParam, int lParam);
bool __thiscall PopupMenuWin::Create(PopupMenuWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, PgFrameWork *pkFrameWork);
void __thiscall PopupMenuWin::OnCommand(PopupMenuWin *this, unsigned int wParam, int lParam);
void __thiscall PopupMenuWin::SetReceiver(PopupMenuWin *this, PgWin *pkReceiver);
bool __thiscall PopupMenuText::Create(PopupMenuText *this, unsigned int uiWidth, unsigned int uiHeight, char *pcText, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, bool bBold);
void __thiscall PopupMenuTextCheck::DirectMessage(PopupMenuTextCheck *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall PopupMenuWin::IsMenuIDShow(PopupMenuWin *this, PopupMenuID eID);
void __thiscall PopupMenuWin::FinishMenu(PopupMenuWin *this, unsigned int uiMinimumWidth);
void __thiscall PopupMenu::DoAction(PopupMenu *this);
bool __thiscall PopupMenuTextCheck::Create(PopupMenuTextCheck *this, unsigned int uiWidth, unsigned int uiHeight, char *pcText, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
void __thiscall PopupMenuTextCheck::DoAction(PopupMenuTextCheck *this);
void __thiscall PopupMenuSubMenu::DoAction(PopupMenuSubMenu *this);
void __thiscall PopupMenuWin::_PopupMenuWin(PopupMenuWin *this);
void __thiscall PopupMenuWin::Clear(PopupMenuWin *this);
bool __thiscall PopupMenuWin::AddMenu(PopupMenuWin *this, PopupMenu *pkMenu);
void __thiscall PopupMenuWin::PopupMenuWin(PopupMenuWin *this);
void __thiscall PopupMenuWin::UpdateMeWin(PopupMenuWin *this, float fCurTime);
PopupMenuText *__cdecl PopupMenuText::CreateWin(char *pcText, unsigned int uiCmdMsg, unsigned int uiCmdParam, PgWin *pkParent, char *pcName, unsigned int uiExtStyle, bool bBold);
PopupMenuTextCheck *__cdecl PopupMenuTextCheck::CreateWin(char *pcText, unsigned int uiCmdMsg, unsigned int uiCmdParam, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
PopupMenuWin *__cdecl PopupMenuWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth, PgFrameWork *pkFrameWork);
PopupMenuSubMenu *__cdecl PopupMenuSubMenu::CreateWin(char *pcText, unsigned int uiCmdMsg, unsigned int uiCmdParam, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
void __thiscall PopupMenuText::_PopupMenuText(PopupMenuText *this);
void *__thiscall PopupMenuTextCheck::_vector_deleting_destructor_(PopupMenuTextCheck *this, unsigned int);
void __thiscall PopupMenuSubMenu::_PopupMenuSubMenu(PopupMenuSubMenu *this);
void *__thiscall PopupMenuWin::_vector_deleting_destructor_(PopupMenuWin *this, unsigned int);
void *__thiscall PopupMenuSubMenu::_vector_deleting_destructor_(PopupMenuSubMenu *this, unsigned int);
void __thiscall PrisonTimeWin::PrisonTimeWin(PrisonTimeWin *this);
void __thiscall PrisonTimeWin::_PrisonTimeWin(PrisonTimeWin *this);
void __thiscall PrisonTimeWin::UpdateMeWin(PrisonTimeWin *this, float fCurTime);
void __thiscall PrisonTimeWin::ResetTime(PrisonTimeWin *this, unsigned int second);
bool __thiscall PrisonTimeWin::Create(PrisonTimeWin *this, PgFrameWork *pkFrameWork);
PrisonTimeWin *__cdecl PrisonTimeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall PrisonTimeWin::_vector_deleting_destructor_(PrisonTimeWin *this, unsigned int);
void __thiscall PrivateStoreInvWin::PrivateStoreInvWin(PrivateStoreInvWin *this);
bool __thiscall PrivateStoreInvWin::Create(PrivateStoreInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall PrivateStoreInvWin::SetInvType(PrivateStoreInvWin *this, unsigned int uiInvType);
void __thiscall PrivateStoreInvWin::OnFirstHitWin(PrivateStoreInvWin *this);
void __thiscall PrivateStoreInvWin::SetLotText(PrivateStoreInvWin *this, unsigned int uiLot);
void __thiscall PrivateStoreWin::PrivateStoreWin(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::_PrivateStoreWin(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::OnCmdCancel(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::OnShowWin(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::OnSellMoneyOK(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::ClearItems(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::SetBoothSize(PrivateStoreWin *this, char bySize);
void __thiscall PrivateStoreWin::DirectMessage(PrivateStoreWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall PrivateStoreWin::OnHelpLink(PrivateStoreWin *this);
void __thiscall PrivateStoreInvWin::_PrivateStoreInvWin(PrivateStoreInvWin *this);
void __thiscall PrivateStoreInvWin::UpdateMeWin(PrivateStoreInvWin *this, float fCurTime);
void __thiscall PrivateStoreWin::OnClose(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::UpdateMeWin(PrivateStoreWin *this, float fCurTime);
void __thiscall PrivateStoreWin::OnSellMoneyCancel(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::OnBuyMoneyCancel(PrivateStoreWin *this);
void __thiscall PrivateStoreInvWin::DoAction(PrivateStoreInvWin *this);
void __thiscall PrivateStoreInvWin::DoRAction(PrivateStoreInvWin *this);
void __thiscall PrivateStoreWin::OnBuyItem(PrivateStoreWin *this, unsigned int uiLot);
void __thiscall PrivateStoreWin::OnCmdInvRClick(PrivateStoreWin *this, unsigned int uiInvIndex);
void __thiscall PrivateStoreWin::OnCmdInvLClick(PrivateStoreWin *this, unsigned int uiInvIndex);
void __thiscall PrivateStoreWin::OnCmdOk(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::SetPrivateStoreOpen(PrivateStoreWin *this, bool bRes);
bool __thiscall PrivateStoreWin::DropOnMyInv(PrivateStoreWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall PrivateStoreWin::OnBuyMoneyOK(PrivateStoreWin *this);
void __thiscall PrivateStoreWin::SetPrivateStoreMode(PrivateStoreWin *this, unsigned int uiMode);
void __thiscall PrivateStoreWin::OnInputBuyItemCount(PrivateStoreWin *this, unsigned int uiBuyLot);
bool __thiscall PrivateStoreInvWin::EatDropInstance(PrivateStoreInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall PrivateStoreWin::OnCommand(PrivateStoreWin *this, unsigned int wParam, int lParam);
PrivateStoreInvWin *__cdecl PrivateStoreInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
PrivateStoreWin *__cdecl PrivateStoreWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall PrivateStoreWin::Create(PrivateStoreWin *this, PgFrameWork *pkFrameWork);
void *__thiscall PrivateStoreWin::_vector_deleting_destructor_(PrivateStoreWin *this, unsigned int);
void *__thiscall PrivateStoreInvWin::_vector_deleting_destructor_(PrivateStoreInvWin *this, unsigned int);
void __thiscall MaterialItemIcon::SetItemAsMaterial(MaterialItemIcon *this, unsigned int dwNeededMaterialLot, unsigned __int16 itemid, unsigned int dwLot);
bool __thiscall MaterialItemIcon::Create(MaterialItemIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall ProductionWin::ProductionWin(ProductionWin *this);
void __thiscall ProductionWin::_ProductionWin(ProductionWin *this);
int __cdecl GetNeedExpForProduceSkillGrade(int iLevel);
int __cdecl GetProduceSkillGradeByExp(unsigned int dwExp);
void __thiscall ProductionWin::OnQuit(ProductionWin *this);
void __thiscall ProductionWin::OnHelpLink(ProductionWin *this);
void __thiscall ProductionWin::UpdateMeWin(ProductionWin *this, float fCurTime);
void __thiscall ProductionWin::OnClose(ProductionWin *this);
unsigned int __cdecl GetProduceSkillExp(TotalMasteryType eType);
int __cdecl GetProduceSkillGrade(unsigned __int16 id);
void __thiscall ProductionWin::ProduceStartCurrentSelected(ProductionWin *this);
void __thiscall ProductionWin::ProduceStop(ProductionWin *this);
bool __thiscall ProductionWin::ProduceComplete(ProductionWin *this);
MaterialItemIcon *__cdecl MaterialItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
ProductionWin *__cdecl ProductionWin::CreateWin(PgFrameWork *pkFrameWork);
int __cdecl GetNeededMaterialInfo(ProduceInfo *pkProduceInfo, NeededMaterialInfo *pkMaterialInfo);
char *__cdecl GetItemNameByInxName(char *pcInxName);
bool __cdecl AddProductSkillTextInList(ProduceInfo *pkProduce, SlideListWin *pkListWin, bool bMyGradeIsLow, TotalMasteryType eType);
int __cdecl AddProductSkillTextInListByType(TotalMasteryType eType, unsigned int iGrade, SlideListWin *pkListWin, bool bMyGradeIsLow);
void __thiscall ProductionWin::SetCurrentProduction(ProductionWin *this, ProduceInfo *pkInfo, bool bFirstTime);
void __thiscall ProductionWin::RefreshProductSkillList(ProductionWin *this);
void __thiscall ProductionWin::OnSelChange(ProductionWin *this);
void __thiscall ProductionWin::OnCommand(ProductionWin *this, unsigned int wParam, int lParam);
void __thiscall ProductionWin::RefreshProductItemState(ProductionWin *this);
void __thiscall ProductionWin::OpenDialog(ProductionWin *this, unsigned __int16 kSkillID);
void __thiscall ProductionWin::OnShowWin(ProductionWin *this);
bool __thiscall ProductionWin::Create(ProductionWin *this, PgFrameWork *pkFrameWork);
void *__thiscall MaterialItemIcon::_scalar_deleting_destructor_(MaterialItemIcon *this, unsigned int);
void *__thiscall ProductionWin::_vector_deleting_destructor_(ProductionWin *this, unsigned int);
ProduceViewInfo *__cdecl ProduceViewInfoTable::GetByID(unsigned __int16 kSkillID);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_long_ProduceInfo___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_ProduceInfo__>>_1>>::insert<std::pair<unsigned_long_const_ProduceInfo__>>(std::_Tree<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> *result, std::pair<unsigned int,Effect *> *_Val);
void __thiscall ProductSkillSelectWin::OnHelpLink(ProductSkillSelectWin *this);
void __thiscall ProductSkillSelectWin::ProductSkillSelectWin(ProductSkillSelectWin *this);
void __thiscall ProductSkillSelectWin::_ProductSkillSelectWin(ProductSkillSelectWin *this);
bool __thiscall ProductSkillSelectWin::Create(ProductSkillSelectWin *this, PgFrameWork *pkFrameWork);
void __thiscall ProductSkillSelectWin::DirectMessage(ProductSkillSelectWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ProductSkillSelectWin::OnCommand(ProductSkillSelectWin *this, unsigned int wParam, int lParam);
void __thiscall ProductSkillSelectWin::OnShowWin(ProductSkillSelectWin *this);
ProductSkillSelectWin *__cdecl ProductSkillSelectWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ProductSkillSelectWin::_vector_deleting_destructor_(ProductSkillSelectWin *this, unsigned int);
void __thiscall RebirthMenuWin::SetAutoRevieTime(RebirthMenuWin *this, char auMin);
void __thiscall RebirthMenuWin::SetDeadTime(RebirthMenuWin *this, float fTime);
void __thiscall RebirthMenuWin::OnTimer(RebirthMenuWin *this);
void __thiscall RebirthMenuWin::OnCancel(RebirthMenuWin *this);
void __thiscall RebirthMenuWin::OnOk(RebirthMenuWin *this);
void __thiscall RebirthMenuWin::_RebirthMenuWin(RebirthMenuWin *this);
bool __thiscall RebirthMenuWin::Create(RebirthMenuWin *this, PgFrameWork *pkFrameWork);
void __thiscall RebirthMenuWin::UpdateMeWin(RebirthMenuWin *this, float fCurTime);
void __thiscall RebirthMenuWin::OnCommand(RebirthMenuWin *this, unsigned int wParam, int lParam);
void __thiscall RebirthMenuWin::RebirthMenuWin(RebirthMenuWin *this);
RebirthMenuWin *__cdecl RebirthMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall RebirthMenuWin::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall RebirthMenuWin::_scalar_deleting_destructor_(RebirthMenuWin *this, unsigned int);
void __thiscall ReportWin::ReportWin(ReportWin *this);
void __thiscall ReportWin::_ReportWin(ReportWin *this);
void __thiscall ReportWin::OnCmdCancel(ReportWin *this);
void __thiscall ReportWin::SetCharName(ReportWin *this, const char *name);
void __thiscall ReportWin::SetProcessText(ReportWin *this, const char *text);
void __thiscall ReportWin::SetRegID(ReportWin *this, int iRegID);
void __thiscall ReportWin::SetReportInfoInput(ReportWin *this, const char *text);
void __thiscall ReportWin::SetOKButText(ReportWin *this, const char *text);
void __thiscall ReportWin::ShowOKButton(ReportWin *this, bool bShow);
void __thiscall ReportWin::OnHelpLink(ReportWin *this);
bool __thiscall ReportWin::Create(ReportWin *this, PgFrameWork *pkFrameWork);
void __thiscall ReportWin::OnCmdOk(ReportWin *this);
void __thiscall ReportWin::SetMode(ReportWin *this, ReportWin::REPORT_MODE eMode);
void __thiscall ReportWin::SetReportAdd(ReportWin *this, int nRegNum);
void __thiscall ReportWin::SetReportAddErr(ReportWin *this);
void __thiscall ReportWin::OnCommand(ReportWin *this, unsigned int wParam, int lParam);
ReportWin *__cdecl ReportWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ReportWin::_vector_deleting_destructor_(ReportWin *this, unsigned int);
void __thiscall ReviveMenuWin::ReviveMenuWin(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::_ReviveMenuWin(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::SetDeadTime(ReviveMenuWin *this, float fTime);
void __thiscall ReviveMenuWin::SetAutoRevieTime(ReviveMenuWin *this, char auMin);
void __thiscall ReviveMenuWin::SetAutoRevieTimeSec(ReviveMenuWin *this, char auSec);
void __thiscall ReviveMenuWin::SetCanReviveItem(ReviveMenuWin *this, char bCanReviveItem);
void __thiscall ReviveMenuWin::OnItemMall(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::SetBtnText(ReviveMenuWin *this, ReviveMenuWin::BtnIndex e, const char *Text);
void __thiscall ReviveMenuWin::SetPriority(ReviveMenuWin *this, char byPriority);
char __thiscall ReviveMenuWin::GetPriority(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::OnHelpLink(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::OnRevive(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::EnableBtns(ReviveMenuWin *this, ReviveMenuWin::BtnIndex e, bool state);
bool __thiscall ReviveMenuWin::Create(ReviveMenuWin *this, PgFrameWork *pkFrameWork);
void __thiscall ReviveMenuWin::UpdateMeWin(ReviveMenuWin *this, float fCurTime);
void __thiscall ReviveMenuWin::OnClose(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::OnReviveFromItem(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::OnReviveFromCleric(ReviveMenuWin *this);
void __thiscall ReviveMenuWin::SetReviveBtn(ReviveMenuWin *this, unsigned int Count);
void __thiscall ReviveMenuWin::OnCommand(ReviveMenuWin *this, unsigned int wParam, int lParam);
ReviveMenuWin *__cdecl ReviveMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ReviveMenuWin::_scalar_deleting_destructor_(ReviveMenuWin *this, unsigned int);
void __thiscall NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>(NiPointer<HazeAccumulator> *this);
bool __thiscall RewardInvWin::Create(RewardInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall RewardWin::RewardWin(RewardWin *this);
void __thiscall RewardWin::_RewardWin(RewardWin *this);
void __thiscall RewardWin::OnInvLClick(RewardWin *this, unsigned int uiInvIndex);
bool __thiscall RewardWin::HasSelectableReward(RewardWin *this, unsigned __int16 qID);
int __thiscall RewardWin::GetRealSelectReword(RewardWin *this);
void __thiscall RewardWin::SetNpcRewardMode(RewardWin *this, bool b);
void __thiscall RewardWin::ShowSelectInvWin(RewardWin *this, bool b);
unsigned int __thiscall RewardWin::GetRewardItemCount(RewardWin *this, unsigned __int16 qID);
void __thiscall RewardInvWin::OnFirstHitWin(RewardInvWin *this);
void __thiscall RewardInvWin::ShowSelected(RewardInvWin *this, bool b);
void __thiscall RewardWin::OnCommand(RewardWin *this, unsigned int wParam, int lParam);
RewardInvWin *__thiscall RewardWin::GetFreeSlot(RewardWin *this);
RewardInvWin *__thiscall RewardWin::GetFreeSelectSlot(RewardWin *this);
void __thiscall RewardWin::UpdateMeWin(RewardWin *this, float fCurTime);
void __thiscall RewardInvItem::RewardInvItem(RewardInvItem *this, QUEST_DATA::QUEST_REWARD_TYPE eType);
void __thiscall RewardInvItem::_RewardInvItem(RewardInvItem *this);
void __thiscall RewardInvWin::_RewardInvWin(RewardInvWin *this);
void __thiscall RewardInvWin::DoAction(RewardInvWin *this);
void __thiscall RewardInvWin::DoRAction(RewardInvWin *this);
void __thiscall RewardInvWin::SetRewardInvItem(RewardInvWin *this, RewardInvItem *pkRewardItem);
void __thiscall RewardWin::ResetContents(RewardWin *this);
void __thiscall RewardWin::UpdateReward(RewardWin *this, unsigned __int16 qID);
void __thiscall RewardInvWin::RewardInvWin(RewardInvWin *this);
RewardInvWin *__cdecl RewardInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
RewardWin *__cdecl RewardWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall RewardWin::Create(RewardWin *this, PgFrameWork *pkFrameWork);
void *__thiscall RewardWin::_scalar_deleting_destructor_(RewardWin *this, unsigned int);
void *__thiscall RewardInvItem::_vector_deleting_destructor_(RewardInvItem *this, unsigned int);
void *__thiscall RewardInvWin::_scalar_deleting_destructor_(RewardInvWin *this, unsigned int);
void __thiscall RidePetWin::DirectMessage(RidePetWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall RidePetWin::RidePetWin(RidePetWin *this);
void __thiscall RidePetWin::_RidePetWin(RidePetWin *this);
void __thiscall RidePetWin::EnablePetFaceAni(RidePetWin *this);
void __thiscall RidePetWin::UpdateFaceCut(RidePetWin *this);
void __thiscall RidePetWin::SetHungryPoint(RidePetWin *this, int nCur);
void __thiscall RidePetWin::Normalize(RidePetWin *this, bool b);
bool __thiscall RidePetWin::Create(RidePetWin *this, PgFrameWork *pkFrameWork);
void __thiscall RidePetWin::ProcessMeInput(RidePetWin *this, bool *bHit);
void __thiscall RidePetWin::SetPetID(RidePetWin *this, unsigned int uiPetID);
RidePetWin *__cdecl RidePetWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall RidePetWin::EatDropInstance(RidePetWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall RidePetWin::UpdateMeWin(RidePetWin *this, float fCurTime);
RIDING *__cdecl RidePetTable::GetByID(unsigned int nActionID);
void *__thiscall RidePetWin::_vector_deleting_destructor_(RidePetWin *this, unsigned int);
void __thiscall RoarWin::OnHelpLink(RoarWin *this);
void __thiscall RoarWin::OnCmdCancel(RoarWin *this);
void __thiscall RoarWin::SetLockInvPos(RoarWin *this, unsigned int uiInvPos);
void __thiscall RoarWin::UpdateMeWin(RoarWin *this, float fCurTime);
void __thiscall RoarWin::OnEditEnd(RoarWin *this, unsigned int wParam, int lParam);
void __thiscall RoarWin::RoarWin(RoarWin *this);
void __thiscall RoarWin::_RoarWin(RoarWin *this);
bool __thiscall RoarWin::Create(RoarWin *this, PgFrameWork *pkFrameWork);
char *__thiscall RoarWin::FilterRemoveEnter(RoarWin *this, char *pcStr);
RoarWin *__cdecl RoarWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall RoarWin::OnCmdOk(RoarWin *this);
void __thiscall RoarWin::OnCommand(RoarWin *this, unsigned int wParam, int lParam);
void *__thiscall RoarWin::_scalar_deleting_destructor_(RoarWin *this, unsigned int);
void __thiscall RollingDiceWin::RollingDiceWin(RollingDiceWin *this);
void __thiscall RollingDiceWin::_RollingDiceWin(RollingDiceWin *this);
void __thiscall RollingDiceWin::OnCommand(RollingDiceWin *this, unsigned int wParam, int lParam);
void __thiscall RollingDiceWin::Stop(RollingDiceWin *this);
void __thiscall RollingDiceMsgWin::RollingDiceMsgWin(RollingDiceMsgWin *this);
void __thiscall RollingDiceMsgWin::_RollingDiceMsgWin(RollingDiceMsgWin *this);
void __thiscall RollingDiceMsgWin::OnCommand(RollingDiceMsgWin *this, unsigned int wParam, int lParam);
int __thiscall loc_585858(PgWin *pkWin, int wParam, int lParam); // weak
void __thiscall RollingDiceMsgWin::SetItemInfo(RollingDiceMsgWin *this, unsigned __int16 kItemID, unsigned __int16 kItemHandle);
void __thiscall RollingDiceMsgWin::UpdateMeWin(RollingDiceMsgWin *this, float fCurTime);
bool __thiscall RollingDiceWin::Create(RollingDiceWin *this, PgFrameWork *pkFrameWork);
bool __thiscall RollingDiceMsgWin::Create(RollingDiceMsgWin *this, PgFrameWork *pkFrameWork);
void __thiscall RollingDiceWin::SetDiceInfo(RollingDiceWin *this, unsigned __int16 kItemHandle, int iTimeSec);
void __thiscall RollingDiceWin::UpdateMeWin(RollingDiceWin *this, float fCurTime);
RollingDiceWin *__cdecl RollingDiceWin::CreateWin(PgFrameWork *pkFrameWork);
RollingDiceMsgWin *__cdecl RollingDiceMsgWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall RollingDiceWin::_vector_deleting_destructor_(RollingDiceWin *this, unsigned int);
void *__thiscall RollingDiceMsgWin::_vector_deleting_destructor_(RollingDiceMsgWin *this, unsigned int);
void __thiscall ScreenWin::ScreenWin(ScreenWin *this);
void __thiscall ScreenWin::_ScreenWin(ScreenWin *this);
bool __thiscall ScreenWin::Create(ScreenWin *this, PgFrameWork *pkFrameWork);
void __thiscall ScreenWin::UpdateMeWin(ScreenWin *this, float fCurTime);
void __thiscall ScreenWin::ProcessMeInput(ScreenWin *this, bool *bHit);
bool __thiscall ScreenWin::EatDropReference(ScreenWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
ScreenWin *__cdecl ScreenWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ScreenWin::_scalar_deleting_destructor_(ScreenWin *this, unsigned int);
void __thiscall ServerMenuWin::SetPriority(ServerMenuWin *this, char byPriority);
char __thiscall ServerMenuWin::GetPriority(ServerMenuWin *this);
void __thiscall ServerMenuWin::OnBut0(ServerMenuWin *this);
void __thiscall ServerMenuWin::OnBut1(ServerMenuWin *this);
void __thiscall ServerMenuWin::OnBut2(ServerMenuWin *this);
void __thiscall ServerMenuWin::OnBut3(ServerMenuWin *this);
void __thiscall ServerMenuWin::OnBut4(ServerMenuWin *this);
void __thiscall ServerMenuWin::SetMsg(ServerMenuWin *this, char *pcText);
void __thiscall ServerMenuWin::_ServerMenuWin(ServerMenuWin *this);
bool __thiscall ServerMenuWin::Create(ServerMenuWin *this, PgFrameWork *pkFrameWork);
bool __thiscall ServerMenuWin::SetServerMenu(ServerMenuWin *this, PROTO_NC_MENU_SERVERMENU_REQ *pkProto);
void __thiscall ServerMenuWin::OnCommand(ServerMenuWin *this, unsigned int wParam, int lParam);
void __thiscall ServerMenuWin::UpdateMeWin(ServerMenuWin *this, float fCurTime);
void __thiscall ServerMenuWin::ServerMenuWin(ServerMenuWin *this);
ServerMenuWin *__cdecl ServerMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ServerMenuWin::_scalar_deleting_destructor_(ServerMenuWin *this, unsigned int);
void __thiscall ServerTimeWin::ServerTimeWin(ServerTimeWin *this);
void __thiscall ServerTimeWin::_ServerTimeWin(ServerTimeWin *this);
void __thiscall ServerTimeWin::EnableServerTime(ServerTimeWin *this, bool b);
void __thiscall ServerTimeWin::UpdateMeWin(ServerTimeWin *this, float fCurTime);
void __thiscall ServerTimeWin::OnCommand(ServerTimeWin *this, unsigned int wParam, int lParam);
bool __thiscall ServerTimeWin::Create(ServerTimeWin *this, PgFrameWork *pkFrameWork);
ServerTimeWin *__cdecl ServerTimeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ServerTimeWin::_vector_deleting_destructor_(ServerTimeWin *this, unsigned int);
void __thiscall ShopWin::ReGenPos(ShopWin *this);
int __stdcall _std_view_proc(HWND__ *hDlg, unsigned int message, unsigned int wParam, int lParam);
void __thiscall ShopWin::OnPopShopWin(ShopWin *this);
void __thiscall ShopWin::UpdateWebPos(ShopWin *this);
void __thiscall ShopWin::ClearWebKeyParameter(ShopWin *this);
void __thiscall ShopWin::SetWebKeyParameter(ShopWin *this, char *pbParam, char byLoginType);
void __thiscall ShopWin::OnHelpLink(ShopWin *this);
void __thiscall ShopWin::OnWinClose(ShopWin *this);
void __thiscall ShopWin::UpdateMeWin(ShopWin *this, float fCurTime);
bool __thiscall ShopWin::LoadWebUrl(ShopWin *this);
bool __thiscall ShopWin::Create(ShopWin *this, PgFrameWork *pkFrameWork);
void __thiscall ShopWin::OnCommand(ShopWin *this, unsigned int wParam, int lParam);
void __thiscall ShopWin::ShopWin(ShopWin *this);
void __thiscall ShopWin::_ShopWin(ShopWin *this);
void __thiscall ShopWin::OnShowWin(ShopWin *this);
ShopWin *__cdecl ShopWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall ShopWin::SetItemShopUrl(ShopWin *this, char *pkStr, unsigned __int16 nLen);
void *__thiscall ShopWin::_scalar_deleting_destructor_(ShopWin *this, unsigned int);
void __thiscall ShortCutIconWin::Show(ShortCutIconWin *this, bool b);
void __thiscall ShortCutIconWin::UpdateEffect(ShortCutIconWin *this, float ftime);
bool __thiscall ShortCutIconWin::IsEnalbeToggleEffect(ShortCutIconWin *this);
void __thiscall ShortCutWin::SetPageTextWin(ShortCutWin *this);
void __thiscall ShortCutWin::OnCmdShortCutRClick(ShortCutWin *this, unsigned int uiIndex);
void __thiscall ShortCutWin::ResetIconWin(ShortCutWin *this);
void __thiscall ShortCutWin::OnCmdPanelTurn(ShortCutWin *this);
void __thiscall ShortCutWin::OnCmdSubPanel(ShortCutWin *this);
void __thiscall ShortCutWin::SizeBtnPosToStatus(ShortCutWin *this);
void __thiscall ShortCutWin::DirectMessage(ShortCutWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ShortCutWin::IsStartCollTime(ShortCutWin *this, unsigned __int16 kID);
void __thiscall ShortCutIconWin::ShortCutIconWin(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::ProcessMeInput(ShortCutIconWin *this, bool *bHit);
ShortCut *__thiscall ShortCutIconWin::GetShortCut(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::SetSkillIcon(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::SetActionIcon(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::SetSoulStoneIcon(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::StopToggleEffect(ShortCutIconWin *this);
void __thiscall ShortCutWin::StartSkill(ShortCutWin *this, unsigned __int16 kSkillID, float fCurTime);
void __thiscall ShortCutWin::UpdateMeWin(ShortCutWin *this, float fCurTime);
void __thiscall ShortCutWin::Show(ShortCutWin *this, bool b);
void __thiscall ShortCutWin::StartHpStonCoolTime(ShortCutWin *this);
void __thiscall ShortCutWin::StartSpStonCoolTime(ShortCutWin *this);
void __thiscall ShortCutWin::SetShortCutInvPosWinLock(ShortCutWin *this, unsigned __int16 invPos);
void __thiscall ShortCutWin::SetShortCutInvPosWinUnLock(ShortCutWin *this);
void __thiscall ShortCutWin::StopEffect(ShortCutWin *this);
void __thiscall ShortCutIconWin::DoAction(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::DoRAction(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::OnFirstHitWin(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::RefreshEffect(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::StartToggleEffect(ShortCutIconWin *this);
void __thiscall ShortCutWin::OnCmdPrev(ShortCutWin *this);
void __thiscall ShortCutWin::OnCmdNext(ShortCutWin *this);
bool __thiscall ShortCutWin::SetDropContents(ShortCutWin *this, ShortCut *pkShortCut, unsigned int uiSenderIndex);
void __thiscall ShortCutWin::SetHotKeyWin(ShortCutWin *this, unsigned int index, const char *meshName);
void __thiscall ShortCutWin::SetHotKeyPlusWin(ShortCutWin *this, unsigned int index, const char *meshName);
void __thiscall ShortCutWin::SetPremiumItemInfo(ShortCutWin *this, unsigned int uiInvPos, Item *pkItem);
bool __thiscall ShortCutWin::IsToggleOn(ShortCutWin *this, unsigned __int16 kCastingID);
void __thiscall ShortCutWin::ReFreshToggleEffect(ShortCutWin *this);
void __thiscall ShortCutIconWin::_ShortCutIconWin(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::CreateToggleEffect(ShortCutIconWin *this);
void __thiscall ShortCutWin::ReflashHotKey(ShortCutWin *this);
void __thiscall ShortCutWin::SetMHActionState(ShortCutWin *this, bool bMHEmotionStart);
ShortCutIconWin *__cdecl ShortCutIconWin::CreateWin(int iXPos, int iYPos, unsigned int uiIndex, PgWin *pkParent);
void __thiscall ShortCutWin::ShortCutWin(ShortCutWin *this);
void __thiscall ShortCutWin::_ShortCutWin(ShortCutWin *this);
ShortCutWin *__cdecl ShortCutWin::CreateWin(PgFrameWork *pkFrameWork, bool bVertical);
ShortCutWin *__cdecl ShortCutWin::CreateSubWin(PgFrameWork *pkFrameWork, bool bVertical, int tabLevel);
void __thiscall ShortCutWin::OffToggleKey(ShortCutWin *this, unsigned __int16 kOffID);
void __thiscall ShortCutIconWin::UpdateMeWin(ShortCutIconWin *this, float fCurTime);
void __thiscall ShortCutWin::OnToggleKey(ShortCutWin *this, unsigned __int16 kOnID);
bool __thiscall ShortCutIconWin::Create(ShortCutIconWin *this, int iXPos, int iYPos, unsigned int uiIndex, PgWin *pkParent);
bool __thiscall ShortCutWin::OnDrop(ShortCutWin *this, DropContents *pkContents, unsigned int uiRevIndex);
void __thiscall ShortCutIconWin::SetItemIcon(ShortCutIconWin *this);
bool __thiscall ShortCutIconWin::EatDropReference(ShortCutIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall ShortCutIconWin::SetIcon(ShortCutIconWin *this);
void __thiscall ShortCutIconWin::SetShortCut(ShortCutIconWin *this, ShortCut *pkShortCut);
void __thiscall ShortCutWin::ReflashShortCutWin(ShortCutWin *this);
void __thiscall ShortCutWin::OnCmdShortCutLClick(ShortCutWin *this, unsigned int uiIndex);
bool __thiscall ShortCutWin::CreatHorizontalWin(ShortCutWin *this, PgFrameWork *pkFrameWork, NiPointer<NiNode> *spNode, NiSourceTexture *pkTexture, bool pkMainWin);
bool __thiscall ShortCutWin::CreatVerticalWin(ShortCutWin *this, PgFrameWork *pkFrameWork, NiPointer<NiNode> *spNode, NiSourceTexture *pkTexture, bool pkMainWinMode);
void __thiscall ShortCutWin::ProcessMeInput(ShortCutWin *this, bool *bHit);
void __thiscall ShortCutWin::OnCommand(ShortCutWin *this, unsigned int wParam, int lParam);
bool __thiscall ShortCutWin::Create(ShortCutWin *this, PgFrameWork *pkFrameWork, bool bVertical, bool bMainWin, int tabLevel);
bool __thiscall ShortCutMgr::SetShortCut(ShortCutMgr *this, ShortCut *pkShortCut, unsigned int uiIndex, bool bSave);
unsigned int __cdecl ItemActionTab::GetTotal();
void __thiscall PgWin::UpdateChildWin(PgWin *this, float fCurTime);
ItemAction *__cdecl ItemActionTab::GetByItemActionID(unsigned int uiIndex);
void *__thiscall ShortCutIconWin::_vector_deleting_destructor_(ShortCutIconWin *this, unsigned int);
void __thiscall std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>(std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *this);
void *__thiscall ShortCutWin::_vector_deleting_destructor_(ShortCutWin *this, unsigned int);
void __thiscall SkillInfoWin::HideAllMoneyWin(SkillInfoWin *this);
bool __thiscall SkillInfoWin::IsMoneyShow(SkillInfoWin *this);
unsigned int __thiscall SkillInfoWin::GetMoneyWinWidth(SkillInfoWin *this);
void __thiscall SkillInfoWin::ShowMoneyWin(SkillInfoWin *this, int iXPos, int iYPos, __int64 i64Money);
void __thiscall SkillInfoWin::AdjustSizeIfIamToolTipWin(SkillInfoWin *this);
bool __thiscall SkillInfoWin::Create(SkillInfoWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight);
char *__cdecl GetTimeStr(int iTime);
bool __thiscall SkillInfoWin::IsPassiveEffect(SkillInfoWin *this, unsigned __int16 kActiveID, char *pEffectRate);
int __thiscall SkillInfoWin::FindPassiveEffect(SkillInfoWin *this, unsigned __int16 kActiveID, char *pEffectRate);
int __thiscall SkillInfoWin::SetPassiveEffect(SkillInfoWin *this, unsigned __int16 kActiveID, int index);
int __thiscall SkillInfoWin::SetMinMaxWCRate(SkillInfoWin *this, ActiveSkillInfo *pkInfo, int iIndex);
int __thiscall SkillInfoWin::SetMinMaxMARate(SkillInfoWin *this, ActiveSkillInfo *pkInfo, int iIndex);
void __thiscall SkillInfoWin::WordrapSetText(SkillInfoWin *this, const char *pkTextData, int *nIndex, int nMaxPixcel);
void __thiscall SkillInfoWin::SetTextBeginNewLine(SkillInfoWin *this, const char *pkTextData, int *nIndex, D3DXCOLOR *kColor);
int __thiscall SkillInfoWin::SetPassiveSkillInfo(SkillInfoWin *this, unsigned __int16 kSkillID, bool bBuy);
void __thiscall SkillInfoWin::SetPassiveSkillBuyInfo(SkillInfoWin *this, unsigned __int16 kSkillID, unsigned int uiPrice);
void __thiscall SkillInfoWin::SetSetItemDesc(SkillInfoWin *this, int *iIndex);
void __thiscall SkillInfoWin::SetGTSkillInfo(SkillInfoWin *this, unsigned int uiIndex);
int __thiscall SkillInfoWin::SetNeedFame(SkillInfoWin *this, unsigned __int16 kSkillID, int index);
void __thiscall SkillInfoWin::_SkillInfoWin(SkillInfoWin *this);
void __thiscall SkillInfoWin::SkillInfoWin(SkillInfoWin *this);
SkillInfoWin *__cdecl SkillInfoWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth);
void __thiscall SkillInfoWin::SetSetItem(SkillInfoWin *this, unsigned __int16 kSkillID);
int __thiscall SkillInfoWin::SetSkillInfo(SkillInfoWin *this, unsigned __int16 kSkillID, bool bViewEmpowerPointApplied, Skill::EmpowerInfo *pkVirtualValue, bool bBuy);
void __thiscall SkillInfoWin::SetSkillBuyInfo(SkillInfoWin *this, unsigned __int16 kSkillID, unsigned int uiPrice);
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Pnode);
std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Pnode);
std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Pnode);
void __thiscall NiTListBase<DFALL<ItemAction__>_ItemAction__>::_NiTListBase<DFALL<ItemAction__>_ItemAction__>(NiTListBase<DFALL<ItemAction *>,ItemAction *> *this);
void *__thiscall NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vector_deleting_destructor_(NiTListBase<DFALL<ItemAction *>,ItemAction *> *this, unsigned int);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >,std::_Iterator_base0> *this);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Wherenode);
unsigned int __cdecl ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal();
unsigned int __cdecl ITableBase<ItemActionCondition_ItemActionConditionTab>::GetTotal();
unsigned int __cdecl ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal();
void __cdecl ItemActionTab::GetListByItemActionID(NiTList<ItemAction *> *kItemActionList, unsigned int uiIndex);
ItemActionEffect *__cdecl ItemActionEffectTab::GetByEffectID(unsigned int uiIndex);
PassiveSkillInfo *__cdecl PasSkillInfoTab::GetByActiveSkillGroupIndex(ActiveSkillGroupIndex kIndex);
PassiveSkillInfo *__cdecl PasSkillInfoTab::GetByInxName(char *pcInxName);
GUILD_TOURNAMENT_SKILLDESC *__cdecl GuildTournamentStateDescTab::GetIndex(const unsigned int uiIndex);
unsigned int __cdecl ActiveSkillGroupTab::GetTotal();
void __thiscall NiTList<ItemAction__>::_NiTList<ItemAction__>(NiTList<ItemAction *> *this);
void *__thiscall NiTPointerListBase<DFALL<ItemAction__>_ItemAction__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<ItemAction *>,ItemAction *> *this, unsigned int);
NiPoint3 *__thiscall std::allocator<NiPoint3>::allocate(std::allocator<NiPoint3> *this, unsigned int _Count);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::erase(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > _Where);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Rootnode);
void __cdecl std::_Uninit_def_fill_n<ItemAction___unsigned_int_ItemAction_std::allocator<ItemAction>_ItemAction>(ItemAction *_First, unsigned int _Count, ItemAction *__formal, std::allocator<ItemAction> *_Al, ItemAction *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
int std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Insert(...);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::clear(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this);
int std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::find(...);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::find(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *result, const unsigned __int16 *_Keyval);
int std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::erase(...);
std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Buynode<std::pair<unsigned_short_ItemAction>>(std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::pair<unsigned short,ItemAction> *_Val);
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::reserve(std::vector<NiPoint3,std::allocator<NiPoint3> > *this, unsigned int _Count);
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::_Reserve(std::vector<NiPoint3,std::allocator<NiPoint3> > *this, unsigned int _Count);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *__thiscall std::multimap<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>>::insert<std::pair<unsigned_short_ItemAction>>(std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *result, std::pair<unsigned short,ItemAction> *_Val);
void __thiscall std::multimap<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>>::_multimap<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>>(std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > *this);
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::resize(std::vector<ItemAction,std::allocator<ItemAction> > *this, unsigned int _Newsize);
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::push_back(std::vector<NiPoint3,std::allocator<NiPoint3> > *this, NiPoint3 *_Val);
int std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(...);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *_Rootnode);
int std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Linsert(...);
int std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...);
std::_Tree_nod<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *this, std::pair<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Val);
void *__thiscall SkillInfoWin::_scalar_deleting_destructor_(SkillInfoWin *this, unsigned int);
void __thiscall CSkillInitWin::OnHelpLink(CSkillInitWin *this);
void __thiscall CSkillInitWin::CSkillInitWin(CSkillInitWin *this);
void __thiscall CSkillInitWin::_CSkillInitWin(CSkillInitWin *this);
bool __thiscall CSkillInitWin::Create(CSkillInitWin *this, PgFrameWork *pkFrameWork);
void __thiscall CSkillInitWin::DirectMessage(CSkillInitWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall CSkillInitWin::OnCommand(CSkillInitWin *this, unsigned int wParam, int lParam);
void __thiscall CSkillInitWin::OnShowWin(CSkillInitWin *this);
CSkillInitWin *__cdecl CSkillInitWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CSkillInitWin::_vector_deleting_destructor_(CSkillInitWin *this, unsigned int);
void __thiscall PointPool::Init(PointPool *this, int iPoint, int iAntiPoint);
int __thiscall PointPool::GetPoint(PointPool *this);
int __thiscall PointPool::GetAntiPoint(PointPool *this);
void __thiscall PointOccupier::PointOccupier(PointOccupier *this);
void __thiscall PointOccupier::SetPool(PointOccupier *this, PointPool *pkPool);
void __thiscall PointOccupier::Init(PointOccupier *this, int iLowerLimit, int iUpperLimit);
void __thiscall PointOccupier::Inc(PointOccupier *this);
void __thiscall PointOccupier::Dec(PointOccupier *this);
int __thiscall PointOccupier::GetPoint(PointOccupier *this);
int __thiscall PointOccupier::GetPointCount(PointOccupier *this);
void __thiscall PointOccupier::ReSetPointCount(PointOccupier *this);
int __thiscall PointOccupier::GetUpperLimit(PointOccupier *this);
void __thiscall SkillPowerIconWin::SkillPowerIconWin(SkillPowerIconWin *this);
void __thiscall SkillPowerIconWin::_SkillPowerIconWin(SkillPowerIconWin *this);
void __thiscall SkillPowerIconWin::UpdateMeWin(SkillPowerIconWin *this, float fCurTime);
bool __thiscall SkillPowerIconWin::Create(SkillPowerIconWin *this, int iXPos, int iYPos, PgWin *pkParent);
unsigned __int16 __thiscall SkillPowerIconWin::GetSkillID(SkillPowerIconWin *this);
void __thiscall SkillPowerIconWin::OnFirstHitWin(SkillPowerIconWin *this);
void __thiscall SkillPowerListItemWin::SkillPowerListItemWin(SkillPowerListItemWin *this);
void __thiscall SkillPowerListItemWin::_SkillPowerListItemWin(SkillPowerListItemWin *this);
void __thiscall SkillPowerListItemWin::OnCommand(SkillPowerListItemWin *this, unsigned int wParam, int lParam);
void __thiscall SkillPowerListItemWin::SetPoint(SkillPowerListItemWin *this, int iPoint, int iMaxPoint);
PointOccupier *__thiscall SkillPowerListItemWin::GetPointOccupier(SkillPowerListItemWin *this);
int __thiscall SkillPowerListItemWin::GetPoint(SkillPowerListItemWin *this);
void __thiscall SkillPowerListItemWin::CheckPossibleEmpower(SkillPowerListItemWin *this, bool b);
void __thiscall SkillPowerWin::SkillPowerWin(SkillPowerWin *this);
void __thiscall SkillPowerWin::_SkillPowerWin(SkillPowerWin *this);
void __thiscall SkillPowerWin::OnCancel(SkillPowerWin *this);
void __thiscall SkillPowerWin::OnClose(SkillPowerWin *this);
void __thiscall SkillPowerWin::OnShowWin(SkillPowerWin *this);
void __thiscall SkillPowerWin::SetSkillPowerSuccess(SkillPowerWin *this, bool b);
void __thiscall SkillPowerWin::OnHelpLink(SkillPowerWin *this);
void __thiscall SkillPowerWin::OnReset(SkillPowerWin *this);
void __thiscall SkillPowerWin::UpdateMeWin(SkillPowerWin *this, float fCurTime);
void __thiscall SkillPowerWin::OnSlideBarContent(SkillPowerWin *this);
bool __thiscall SkillPowerIconWin::SetSkill(SkillPowerIconWin *this, unsigned __int16 SkillID);
bool __thiscall SkillPowerIconWin::EatDropReference(SkillPowerIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
bool __thiscall SkillPowerListItemWin::Create(SkillPowerListItemWin *this, NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, SkillPowerListItemWin::CreateSpec *rkSpec, PgWin *pkParent);
void __thiscall SkillPowerWin::OnSkillDroped(SkillPowerWin *this);
void __thiscall SkillPowerWin::OnOk(SkillPowerWin *this);
void __thiscall SkillPowerWin::SetEmpowerSkill(SkillPowerWin *this, unsigned __int16 SkillID);
void __thiscall SkillPowerWin::OnCommand(SkillPowerWin *this, unsigned int wParam, int lParam);
SkillPowerIconWin *__cdecl SkillPowerIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
SkillPowerListItemWin *__cdecl SkillPowerListItemWin::CreateWin(NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, SkillPowerListItemWin::CreateSpec *rkSpec, PgWin *pkParent);
SkillPowerWin *__cdecl SkillPowerWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall SkillPowerWin::Create(SkillPowerWin *this, PgFrameWork *pkFrameWork);
void *__thiscall SkillPowerIconWin::_scalar_deleting_destructor_(SkillPowerIconWin *this, unsigned int);
void *__thiscall SkillPowerListItemWin::_scalar_deleting_destructor_(SkillPowerListItemWin *this, unsigned int);
void *__thiscall SkillPowerWin::_scalar_deleting_destructor_(SkillPowerWin *this, unsigned int);
void __thiscall SkillPowerListItemWin::CreateSpec::_CreateSpec(SkillPowerListItemWin::CreateSpec *this);
void __thiscall PosInfoWinBut::PosInfoWinBut(PosInfoWinBut *this);
void __thiscall PosInfoWinBut::_PosInfoWinBut(PosInfoWinBut *this);
void __thiscall LevelSelectWinBut::LevelSelectWinBut(LevelSelectWinBut *this);
void __thiscall LevelSelectWinBut::_LevelSelectWinBut(LevelSelectWinBut *this);
void __thiscall SkillInvWin::_SkillInvWin(SkillInvWin *this);
bool __thiscall SkillInvWin::Create(SkillInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall SkillInvWin::OnFirstHitWin(SkillInvWin *this);
void __thiscall SkillWin::OnEmpowerWinShow(SkillWin *this, bool b);
void __thiscall SkillWin::OnCommboSkill(SkillWin *this);
void __thiscall SkillWin::OnSkillPowerReset(SkillWin *this);
void __thiscall SkillWin::OnInvRClick(SkillWin *this, unsigned int uiInvIndex);
void __thiscall SkillWin::OnClose(SkillWin *this);
void __thiscall SkillWin::OpenProduceSkillSelectWin(SkillWin *this);
void __thiscall SkillWin::SetSkillPowerSuccess(SkillWin *this, bool b);
void __thiscall SkillWin::CloseProduceSkillSelectWin(SkillWin *this);
void __thiscall SkillWin::OpenProduceSkillInitWin(SkillWin *this, char bySlotIndex);
ProductSkillSelectWin *__thiscall SkillWin::GetProductSkillSelectWin(SkillWin *this);
void __thiscall SkillWin::OnHelpLink(SkillWin *this);
void __thiscall SkillInvWin::SetSkill(SkillInvWin *this, unsigned __int16 kSkillID, unsigned int uiSkillType);
void __thiscall SkillWin::OnOpenPowerWindow(SkillWin *this);
void __thiscall SkillWin::OnInvLClick(SkillWin *this, unsigned int uiInvIndex);
void __thiscall SkillWin::UpdateMeWin(SkillWin *this, float fCurTime);
bool __thiscall PosInfoWinBut::Create(PosInfoWinBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle);
void __thiscall PosInfoWinBut::DoAction(PosInfoWinBut *this);
bool __thiscall LevelSelectWinBut::Create(LevelSelectWinBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex);
void __thiscall LevelSelectWinBut::DoAction(LevelSelectWinBut *this);
void __thiscall SkillInvWin::SkillInvWin(SkillInvWin *this);
void __thiscall SkillInvWin::DoAction(SkillInvWin *this);
void __thiscall SkillInvWin::DoRAction(SkillInvWin *this);
int __thiscall SkillInvWin::SetSkill(SkillInvWin *this, int uiRecordIndex, unsigned int uiBuffType);
void __thiscall SkillWin::OnEmpowerClick(SkillWin *this, unsigned int uiIndex);
void __thiscall SkillWin::_SkillWin(SkillWin *this);
void __thiscall SkillWin::SkillWin(SkillWin *this);
PosInfoWinBut *__cdecl PosInfoWinBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle);
LevelSelectWinBut *__cdecl LevelSelectWinBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex);
SkillInvWin *__cdecl SkillInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
SkillWin *__cdecl SkillWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall SkillWin::Create(SkillWin *this, PgFrameWork *pkFrameWork);
void __thiscall SkillWin::SetLevel(SkillWin *this, unsigned int InvIndex, char curLevel);
unsigned int __thiscall SkillWin::GetLearnSkillNum(SkillWin *this);
unsigned int __thiscall SkillWin::GetMaxPageNum(SkillWin *this);
void __thiscall SkillWin::OnLevelNext(SkillWin *this, unsigned int InvIndex);
void __thiscall SkillWin::OnLevelPre(SkillWin *this, unsigned int InvIndex);
void __thiscall SkillWin::UpdatePageInfo(SkillWin *this);
void __thiscall SkillWin::ResetContents(SkillWin *this);
void __thiscall SkillWin::OnShowWin(SkillWin *this);
void __thiscall SkillWin::ResetPage(SkillWin *this);
void __thiscall SkillWin::OnActiveSkill(SkillWin *this);
void __thiscall SkillWin::OnPasssiveSkill(SkillWin *this);
void __thiscall SkillWin::OnProductSkill(SkillWin *this);
void __thiscall SkillWin::OnPrevPage(SkillWin *this);
void __thiscall SkillWin::OnNextPage(SkillWin *this);
void __thiscall SkillWin::SelectByPageType(SkillWin *this, unsigned int Type);
void __thiscall SkillWin::OnCommand(SkillWin *this, unsigned int wParam, int lParam);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *this, unsigned int);
void *__thiscall PosInfoWinBut::_vector_deleting_destructor_(PosInfoWinBut *this, unsigned int);
void *__thiscall LevelSelectWinBut::_scalar_deleting_destructor_(LevelSelectWinBut *this, unsigned int);
void *__thiscall SkillInvWin::_scalar_deleting_destructor_(SkillInvWin *this, unsigned int);
unsigned int __cdecl GuildTournamentStateTab::GetTotal();
void __thiscall NiTPointerList<NiPointer<PgFont>>::_NiTPointerList<NiPointer<PgFont>>(NiTPointerList<NiPointer<PgFont> > *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *this, unsigned int);
void __thiscall PgTList<NiPointer<PgFont>>::_PgTList<NiPointer<PgFont>>(PgTList<NiPointer<PgFont> > *this);
void *__thiscall PgTList<NiPointer<PgFont>>::_scalar_deleting_destructor_(PgTList<NiPointer<PgFont> > *this, unsigned int);
void *__thiscall SkillWin::_vector_deleting_destructor_(SkillWin *this, unsigned int);
void __thiscall SoulStoneInfoWin::SoulStoneInfoWin(SoulStoneInfoWin *this);
void __thiscall SoulStoneInfoWin::_SoulStoneInfoWin(SoulStoneInfoWin *this);
void __thiscall SoulStoneInfoWin::HideAllMoneyWin(SoulStoneInfoWin *this);
bool __thiscall SoulStoneInfoWin::IsMoneyShow(SoulStoneInfoWin *this);
unsigned int __thiscall SoulStoneInfoWin::GetMoneyWinWidth(SoulStoneInfoWin *this);
void __thiscall SoulStoneInfoWin::ShowMoneyWin(SoulStoneInfoWin *this, int iXPos, int iYPos, __int64 i64Money);
void __thiscall SoulStoneInfoWin::AdjustSizeIfIamToolTipWin(SoulStoneInfoWin *this);
bool __thiscall SoulStoneInfoWin::Create(SoulStoneInfoWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight);
int __thiscall SoulStoneInfoWin::SetHPInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax);
int __thiscall SoulStoneInfoWin::SetSPInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax);
void __thiscall SoulStoneInfoWin::SetHPBuyInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax, unsigned int dwPrice);
void __thiscall SoulStoneInfoWin::SetSPBuyInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax, unsigned int dwPrice);
SoulStoneInfoWin *__cdecl SoulStoneInfoWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth);
void *__thiscall SoulStoneInfoWin::_scalar_deleting_destructor_(SoulStoneInfoWin *this, unsigned int);
void __thiscall SoulStoneWin::SoulStoneWin(SoulStoneWin *this);
void __thiscall SoulStoneWin::_SoulStoneWin(SoulStoneWin *this);
void __thiscall SoulStoneWin::UpdateMeWin(SoulStoneWin *this, float fCurTime);
void __thiscall SoulStoneWin::UseHPSoulStone(SoulStoneWin *this);
void __thiscall SoulStoneWin::UseSPSoulStone(SoulStoneWin *this);
bool __thiscall SoulStoneWin::Create(SoulStoneWin *this, PgFrameWork *pkFrameWork);
bool __thiscall SoulStoneWin::TryHPSoulStoneUse(SoulStoneWin *this);
bool __thiscall SoulStoneWin::TrySPSoulStoneUse(SoulStoneWin *this);
void __thiscall SoulStoneWin::OnCmdHPSoul(SoulStoneWin *this);
void __thiscall SoulStoneWin::OnCmdSPSoul(SoulStoneWin *this);
void __thiscall SoulStoneWin::OnCommand(SoulStoneWin *this, unsigned int wParam, int lParam);
SoulStoneWin *__cdecl SoulStoneWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall SoulStoneWin::_vector_deleting_destructor_(SoulStoneWin *this, unsigned int);
void __thiscall StatTitleListItemWin::StatTitleListItemWin(StatTitleListItemWin *this);
void __thiscall StatTitleListItemWin::_StatTitleListItemWin(StatTitleListItemWin *this);
void __thiscall StatTitleWin::StatTitleWin(StatTitleWin *this);
void __thiscall StatTitleWin::_StatTitleWin(StatTitleWin *this);
void __thiscall StatTitleWin::OnOk(StatTitleWin *this);
void __thiscall StatTitleWin::OnCancel(StatTitleWin *this);
void __thiscall StatTitleWin::AddStatTitle(StatTitleWin *this);
void __thiscall StatTitleWin::ClearStatTitle(StatTitleWin *this);
bool __thiscall StatTitleListItemWin::Create(StatTitleListItemWin *this, NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, StatTitleListItemWin::CreateSpec *rkSpec, PgWin *pkParent);
void __thiscall StatTitleWin::OnCommand(StatTitleWin *this, unsigned int wParam, int lParam);
StatTitleListItemWin *__cdecl StatTitleListItemWin::CreateWin(NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, StatTitleListItemWin::CreateSpec *rkSpec, PgWin *pkParent);
StatTitleWin *__cdecl StatTitleWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall StatTitleWin::Create(StatTitleWin *this, PgFrameWork *pkFrameWork);
void *__thiscall StatTitleListItemWin::_vector_deleting_destructor_(StatTitleListItemWin *this, unsigned int);
void *__thiscall StatTitleWin::_vector_deleting_destructor_(StatTitleWin *this, unsigned int);
void __thiscall StatusWin::StatusWin(StatusWin *this);
void __thiscall StatusWin::_StatusWin(StatusWin *this);
void __thiscall StatusWin::OnMouseEvent(StatusWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin);
void __thiscall StatusWin::UseHPSoulStone(StatusWin *this);
void __thiscall StatusWin::UseSPSoulStone(StatusWin *this);
void __thiscall StatusWin::SetStoneAlarmEnable(StatusWin *this, const bool bEnable);
void __thiscall StatusWin::ApplyCharInfo(StatusWin *this);
void __thiscall StatusWin::HPSoulStoneCoolTimeStart(StatusWin *this);
void __thiscall StatusWin::SPSoulStoneCoolTimeStart(StatusWin *this);
void __thiscall StatusWin::UpdateStoneAlarm(StatusWin *this, float fCurTime);
bool __thiscall StatusWin::CreateKoreaMainGauge(StatusWin *this, PgFrameWork *pkFrameWork);
void __thiscall StatusWin::ProcessMeInput(StatusWin *this, bool *bHit);
void __thiscall StatusWin::UpdateMeWin_kr(StatusWin *this, float fCurTime);
bool __thiscall StatusWin::TryHPSoulStoneUse(StatusWin *this);
bool __thiscall StatusWin::TrySPSoulStoneUse(StatusWin *this);
void __thiscall StatusWin::OnCmdHPSoul(StatusWin *this);
void __thiscall StatusWin::OnCmdSPSoul(StatusWin *this);
void __thiscall StatusWin::OnCommand(StatusWin *this, unsigned int wParam, int lParam);
void __thiscall StatusWin::SetStoneAlarmShortcutText(StatusWin *this, const char *pcText);
bool __thiscall StatusWin::Create(StatusWin *this, PgFrameWork *pkFrameWork);
void __thiscall StatusWin::UpdateMeWin(StatusWin *this, float fCurTime);
void __thiscall StatusWin::UpdateBars(StatusWin *this);
StatusWin *__cdecl StatusWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall PgWinCircleGauge::SetValue(PgWinCircleGauge *this, float fMaxVal, float fCurVal);
void *__thiscall StatusWin::_scalar_deleting_destructor_(StatusWin *this, unsigned int);
void __thiscall StatusWin::SetHP(StatusWin *this, unsigned int uiMax, unsigned int uiCur);
void __thiscall StatusWin::SetSP(StatusWin *this, unsigned int uiMax, unsigned int uiCur);
void __thiscall StatusWin::SetLP(StatusWin *this, unsigned int uiMax, unsigned int uiCur);
void __thiscall StorageTabButWin::StorageTabButWin(StorageTabButWin *this);
void __thiscall StorageTabButWin::_StorageTabButWin(StorageTabButWin *this);
bool __thiscall StorageTabButWin::Create(StorageTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
void __thiscall StorageInvWin::StorageInvWin(StorageInvWin *this);
void __thiscall StorageInvWin::_StorageInvWin(StorageInvWin *this);
bool __thiscall StorageInvWin::Create(StorageInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall StorageInvWin::OnFirstHitWin(StorageInvWin *this);
void __thiscall StorageWin::OnDrawingMoneyWinOk(StorageWin *this, __int64 i64Money);
void __thiscall StorageWin::OnDepositMoneyWinOk(StorageWin *this, __int64 i64Money);
void __thiscall StorageWin::ResetContents(StorageWin *this);
void __thiscall StorageWin::OnHelpLink(StorageWin *this);
bool __thiscall StorageTabButWin::EatDropInstance(StorageTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall StorageWin::StorageWin(StorageWin *this);
void __thiscall StorageWin::_StorageWin(StorageWin *this);
void __thiscall StorageWin::ResetPage(StorageWin *this);
void __thiscall StorageWin::OnOk(StorageWin *this);
void __thiscall StorageWin::OnCancel(StorageWin *this);
void __thiscall StorageWin::OnTab1(StorageWin *this);
void __thiscall StorageWin::OnTab2(StorageWin *this);
void __thiscall StorageWin::OnTab3(StorageWin *this);
void __thiscall StorageWin::OnTab4(StorageWin *this);
void __thiscall StorageWin::OnShowWin(StorageWin *this);
void __thiscall StorageInvWin::DoAction(StorageInvWin *this);
void __thiscall StorageInvWin::DoRAction(StorageInvWin *this);
void __thiscall StorageWin::RefreshPage(StorageWin *this, char byTargetPage);
void __thiscall StorageWin::OnInvShiftLClick(StorageWin *this, unsigned int uiInvIndex);
void __thiscall StorageWin::OnInvRClick(StorageWin *this, unsigned int uiInvIndex);
void __thiscall StorageWin::OnDeposit(StorageWin *this);
void __thiscall StorageWin::OnDrawing(StorageWin *this);
bool __thiscall StorageWin::DropOnInv(StorageWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall StorageWin::UpdateMeWin(StorageWin *this, float fCurTime);
bool __thiscall StorageInvWin::EatDropInstance(StorageInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall StorageWin::OnInvLClick(StorageWin *this, unsigned int uiInvIndex);
void __thiscall StorageWin::OnCommand(StorageWin *this, unsigned int wParam, int lParam);
StorageTabButWin *__cdecl StorageTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
StorageInvWin *__cdecl StorageInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
StorageWin *__cdecl StorageWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall StorageWin::Create(StorageWin *this, PgFrameWork *pkFrameWork);
void *__thiscall StorageTabButWin::_vector_deleting_destructor_(StorageTabButWin *this, unsigned int);
void *__thiscall StorageInvWin::_scalar_deleting_destructor_(StorageInvWin *this, unsigned int);
void *__thiscall StorageWin::_scalar_deleting_destructor_(StorageWin *this, unsigned int);
bool __thiscall SysMsgDisplayWin::IsAutoHideOptionSetted(SysMsgDisplayWin *this);
void __thiscall SysMsgDisplayWin::DirectMessage(SysMsgDisplayWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall SysMsgDisplayWin::Create(SysMsgDisplayWin *this, PgFrameWork *pkFrameWork);
SysMsgDisplayWin *__cdecl SysMsgDisplayWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall SystemWin::SystemWin(SystemWin *this);
void __thiscall SystemWin::_SystemWin(SystemWin *this);
void __thiscall SystemWin::OnCmdOption(SystemWin *this);
void __thiscall SystemWin::OnCmdGoCharSelect(SystemWin *this);
void __thiscall SystemWin::OnCmdLogout(SystemWin *this);
void __thiscall SystemWin::OnCmdExit(SystemWin *this);
void __thiscall SystemWin::OnCancel(SystemWin *this);
void __thiscall SystemWin::OnHelpLink(SystemWin *this);
void __thiscall SystemWin::OnCommand(SystemWin *this, unsigned int wParam, int lParam);
bool __thiscall SystemWin::Create(SystemWin *this, PgFrameWork *pkFrameWork);
SystemWin *__cdecl SystemWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall SystemWin::_scalar_deleting_destructor_(SystemWin *this, unsigned int);
void __thiscall MobIconWin::MobIconWin(MobIconWin *this);
void __thiscall MobIconWin::_MobIconWin(MobIconWin *this);
bool __thiscall MobIconWin::Create(MobIconWin *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall AbStateIconWin::AbStateIconWin(AbStateIconWin *this);
void __thiscall AbStateIconWin::_AbStateIconWin(AbStateIconWin *this);
bool __thiscall AbStateIconWin::Create(AbStateIconWin *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall TargetWin::ShowTOT(TargetWin *this);
void __thiscall TargetWin::SetSoulDefault(TargetWin *this, bool bShowCount);
int __thiscall TargetWin::GetSouldCount(TargetWin *this);
void __thiscall TargetOfTheTargetWin::TargetOfTheTargetWin(TargetOfTheTargetWin *this);
void __thiscall TargetOfTheTargetWin::_TargetOfTheTargetWin(TargetOfTheTargetWin *this);
void __thiscall TargetOfTheTargetWin::SetTargetLv(TargetOfTheTargetWin *this, int iLv);
void __thiscall TargetOfTheTargetWin::AbbreviateText(TargetOfTheTargetWin *this, char *pResult, char *pTarget, int nAbbreviationSize);
void __thiscall TargetOfTheTargetWin::SetEnable(TargetOfTheTargetWin *this, bool b);
void __thiscall TargetWin::ShowBarWin(TargetWin *this, bool b);
void __thiscall TargetWin::OnMouseEvent(TargetWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin);
void __thiscall TargetWin::Show(TargetWin *this, bool b);
void __thiscall TargetWin::SetTOTLv(TargetWin *this, int iLv);
void __thiscall TargetWin::SetSoulCount(TargetWin *this, int Count, bool bShow, bool bShowEff);
void __thiscall TargetWin::OnMinButClick(TargetWin *this);
void __thiscall TargetWin::OnMaxButClick(TargetWin *this);
void __thiscall TargetWin::ReSetTOT(TargetWin *this, bool bTOT);
void __thiscall TargetWin::PlayerTargetBaseTexture(TargetWin *this, Char *pkTargetChar);
void __thiscall TargetWin::OnCommand(TargetWin *this, unsigned int wParam, int lParam);
void __thiscall TargetWin::SetBuffUI(TargetWin *this, Char *pkMember, StateType type, int *AbstateNums);
bool __thiscall TargetOfTheTargetWin::Create(TargetOfTheTargetWin *this, PgFrameWork *pkFrameWork);
void __thiscall TargetOfTheTargetWin::PlayerTargetBaseTexture(TargetOfTheTargetWin *this, Char *pkTargetChar);
void __thiscall TargetWin::TargetWin(TargetWin *this);
void __thiscall TargetWin::_TargetWin(TargetWin *this);
void __thiscall TargetWin::SetTargetClassInfo(TargetWin *this, Char *pkTargetChar);
void __thiscall TargetOfTheTargetWin::UpdateMeWin(TargetOfTheTargetWin *this, float fCurTime);
MobIconWin *__cdecl MobIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
AbStateIconWin *__cdecl AbStateIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
TargetWin *__cdecl TargetWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall TargetWin::CreateKoreaUI(TargetWin *this, PgFrameWork *pkFrameWork);
void __thiscall TargetWin::UpdateKoreaUI(TargetWin *this, float fCurTime);
TargetOfTheTargetWin *__cdecl TargetOfTheTargetWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall TargetWin::Create(TargetWin *this, PgFrameWork *pkFrameWork);
void __thiscall TargetWin::UpdateMeWin(TargetWin *this, float fCurTime);
CharNPC_ViewInfo *__cdecl IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError);
void __thiscall NiTListBase<DFALL<unsigned_short>_unsigned_short>::_NiTListBase<DFALL<unsigned_short>_unsigned_short>(NiTListBase<DFALL<unsigned short>,unsigned short> *this);
void *__thiscall NiTListBase<DFALL<unsigned_short>_unsigned_short>::_scalar_deleting_destructor_(NiTListBase<DFALL<unsigned short>,unsigned short> *this, unsigned int);
void *__thiscall MobIconWin::_scalar_deleting_destructor_(MobIconWin *this, unsigned int);
void *__thiscall AbStateIconWin::_vector_deleting_destructor_(AbStateIconWin *this, unsigned int);
void __thiscall NiTList<unsigned_short>::_NiTList<unsigned_short>(NiTList<unsigned short> *this);
void *__thiscall NiTList<unsigned_short>::_vector_deleting_destructor_(NiTList<unsigned short> *this, unsigned int);
void *__thiscall TargetOfTheTargetWin::_scalar_deleting_destructor_(TargetOfTheTargetWin *this, unsigned int);
NiTListItem<unsigned short> *__thiscall NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::NewItem(NiTPointerListBase<DFALL<unsigned short>,unsigned short> *this);
void __thiscall NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::DeleteItem(NiTPointerListBase<DFALL<unsigned short>,unsigned short> *this, NiTListItem<unsigned short> *pkItem);
void *__thiscall TargetWin::_vector_deleting_destructor_(TargetWin *this, unsigned int);
void __thiscall ToolTipWin::ToolTipWin(ToolTipWin *this);
void __thiscall ToolTipWin::_ToolTipWin(ToolTipWin *this);
void __thiscall ToolTipWin::ClearTipText(ToolTipWin *this);
void __thiscall ToolTipWin::SetTipText(ToolTipWin *this, char *pcText);
bool __thiscall ToolTipWin::SetTipText(ToolTipWin *this, int nLine, char *pcText, int r, int g, int b, Font::Type font);
void __thiscall ToolTipWin::AdjustSizeIfIamToolTipWin(ToolTipWin *this);
void __thiscall ToolTipWin::ShowToolTip(ToolTipWin *this, PgWin *pkParent);
void __thiscall ToolTipWin::ShowToolTip(ToolTipWin *this);
bool __thiscall ToolTipWin::Create(ToolTipWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight);
ToolTipWin *__cdecl ToolTipWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth);
void *__thiscall ToolTipWin::_scalar_deleting_destructor_(ToolTipWin *this, unsigned int);
void __thiscall UserTradeInvWin::UserTradeInvWin(UserTradeInvWin *this);
void __thiscall UserTradeInvWin::_UserTradeInvWin(UserTradeInvWin *this);
void __thiscall UserTradeInvWin::UpdateMeWin(UserTradeInvWin *this, float fCurTime);
bool __thiscall UserTradeInvWin::Create(UserTradeInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall UserTradeInvWin::SetInvType(UserTradeInvWin *this, unsigned int uiInvType);
void __thiscall UserTradeInvWin::OnFirstHitWin(UserTradeInvWin *this);
void __thiscall UserTradeWin::SetOtherLock(UserTradeWin *this, bool b);
void __thiscall UserTradeWin::SetOtherOk(UserTradeWin *this, bool b);
void __thiscall UserTradeWin::SetOtherName(UserTradeWin *this, char *pkName);
void __thiscall UserTradeWin::SetMyName(UserTradeWin *this, char *pkName);
void __thiscall UserTradeWin::OnCmdOk(UserTradeWin *this);
void __thiscall UserTradeWin::OnCmdCancel(UserTradeWin *this);
void __thiscall UserTradeWin::OnClose(UserTradeWin *this);
void __thiscall UserTradeWin::SetOtherMoney(UserTradeWin *this, __int64 i64Money);
void __thiscall UserTradeWin::UnlockMyLock(UserTradeWin *this);
void __thiscall UserTradeWin::OnShowWin(UserTradeWin *this);
__int64 __thiscall UserTradeWin::GetInputMoney(UserTradeWin *this, bool *bBounded);
void __thiscall UserTradeWin::OnHelpLink(UserTradeWin *this);
void __thiscall UserTradeWin::UserTradeWin(UserTradeWin *this);
void __thiscall UserTradeWin::_UserTradeWin(UserTradeWin *this);
void __thiscall UserTradeWin::OnCmdMyInvLClick(UserTradeWin *this, unsigned int uiInvIndex);
void __thiscall UserTradeInvWin::DoAction(UserTradeInvWin *this);
void __thiscall UserTradeInvWin::DoRAction(UserTradeInvWin *this);
void __thiscall UserTradeWin::OnCmdLock(UserTradeWin *this);
bool __thiscall UserTradeWin::DropOnMyInv(UserTradeWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall UserTradeWin::UpdateMeWin(UserTradeWin *this, float fCurTime);
bool __thiscall UserTradeInvWin::EatDropInstance(UserTradeInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall UserTradeWin::OnCommand(UserTradeWin *this, unsigned int wParam, int lParam);
UserTradeInvWin *__cdecl UserTradeInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
UserTradeWin *__cdecl UserTradeWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall UserTradeWin::Create(UserTradeWin *this, PgFrameWork *pkFrameWork);
void *__thiscall UserTradeInvWin::_scalar_deleting_destructor_(UserTradeInvWin *this, unsigned int);
void *__thiscall UserTradeWin::_vector_deleting_destructor_(UserTradeWin *this, unsigned int);
void __thiscall VoteWin::OnShowWin(VoteWin *this);
void __thiscall VoteWin::OnReason(VoteWin *this);
void __thiscall VoteWin::OnHelpLink(VoteWin *this);
void __thiscall VoteWin::SetProposerText(VoteWin *this, const char *pcProposer);
const char *__thiscall VoteWin::GetProposer(VoteWin *this);
void __thiscall VoteWin::SetTargetText(VoteWin *this, const char *pcTarget);
const char *__thiscall VoteWin::GetTarget(VoteWin *this);
void __thiscall VoteWin::SetReasonText(VoteWin *this, const char *pcText);
const char *__thiscall VoteWin::GetReasonText(VoteWin *this);
// int __usercall mktime_2<eax>(tm *_Tm<eax>);
void __thiscall VoteWin::OnCloseWin(VoteWin *this);
void __thiscall VoteWin::OnCancel(VoteWin *this);
void __thiscall VoteWin::SetReasonEditText(VoteWin *this, const char *pcText);
const char *__thiscall VoteWin::GetReasonEditText(VoteWin *this);
void __thiscall VoteWin::OnSelected(VoteWin *this);
void __thiscall VoteWin::SetReasonType(VoteWin *this, unsigned int uiType);
void __thiscall VoteWin::VoteWin(VoteWin *this);
void __thiscall VoteWin::_VoteWin(VoteWin *this);
void __thiscall VoteWin::UpdateTimer(VoteWin *this, float fTime);
void __thiscall VoteWin::SetVoteWinType(VoteWin *this, bool bSuggestion);
void __thiscall VoteReasonWin::OnReasonSelect(VoteReasonWin *this, VoteReasonWin::eVoteReasonType eType);
void __thiscall VoteWin::UpdateMeWin(VoteWin *this, float fTime);
void __thiscall VoteReasonWin::VoteReasonWin(VoteReasonWin *this);
void __thiscall VoteReasonWin::_VoteReasonWin(VoteReasonWin *this);
void __thiscall VoteReasonWin::OnCommand(VoteReasonWin *this, unsigned int wParam, int lParam);
VoteWin *__cdecl VoteWin::CreateWin(PgFrameWork *pkFrameWork);
VoteReasonWin *__cdecl VoteReasonWin::CreateWin(NiPointer<NiNode> spNode, PgWin *pkParent);
bool __thiscall VoteWin::Create(VoteWin *this, PgFrameWork *pkFrameWork);
void __thiscall VoteWin::OnOK(VoteWin *this);
bool __thiscall VoteReasonWin::Create(VoteReasonWin *this, NiPointer<NiNode> spNode, PgWin *pkParent);
void __thiscall VoteWin::OnCommand(VoteWin *this, unsigned int wParam, int lParam);
KQVoteDesc *__cdecl KQVoteDescTable::GetByID(const int iID);
void *__thiscall VoteWin::_scalar_deleting_destructor_(VoteWin *this, unsigned int);
void *__thiscall VoteReasonWin::_vector_deleting_destructor_(VoteReasonWin *this, unsigned int);
void __thiscall LogoutAfterMinutesWin::SetStartTime(LogoutAfterMinutesWin *this, float fStart);
void __thiscall WaitingForLogoutWin::ProcessMeInput(WaitingForLogoutWin *this, bool *bHit);
void __thiscall WaitingForLogoutWin::WaitingForLogoutWin(WaitingForLogoutWin *this);
void __thiscall WaitingForLogoutWin::_WaitingForLogoutWin(WaitingForLogoutWin *this);
void __thiscall WaitingForLogoutWin::OnClose(WaitingForLogoutWin *this);
void __thiscall WaitingForLogoutWin::SetLogoutType(WaitingForLogoutWin *this, WaitingForLogoutWin::LogoutType eType);
void __thiscall WaitingForLogoutWin::SetKeyMap(WaitingForLogoutWin *this, KeyMap *pkMap);
void __thiscall WaitingForLogoutWin::OnShowWin(WaitingForLogoutWin *this);
void __thiscall WaitingForLogoutWin::OnCloseBut(WaitingForLogoutWin *this);
void __thiscall WaitingForLogoutWin::OnTimeOver(WaitingForLogoutWin *this);
void __thiscall WaitingForLogoutWin::Cancel(WaitingForLogoutWin *this);
void __thiscall LogoutAfterMinutesWin::LogoutAfterMinutesWin(LogoutAfterMinutesWin *this);
void __thiscall LogoutAfterMinutesWin::_LogoutAfterMinutesWin(LogoutAfterMinutesWin *this);
bool __thiscall LogoutAfterMinutesWin::Create(LogoutAfterMinutesWin *this, PgFrameWork *pkFrameWork);
void __thiscall LogoutAfterMinutesWin::OnCancelBut(LogoutAfterMinutesWin *this);
void __thiscall LogoutAfterMinutesWin::UpdateMeWin(LogoutAfterMinutesWin *this, float fCurTime);
void __thiscall LogoutAfterMinutesWin::OnCommand(LogoutAfterMinutesWin *this, unsigned int wParam, int lParam);
LogoutAfterMinutesWin *__cdecl LogoutAfterMinutesWin::CreateWin(PgFrameWork *pkFrameWork);
WaitingForLogoutWin *__cdecl WaitingForLogoutWin::CreateWin(unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork);
bool __thiscall WaitingForLogoutWin::Create(WaitingForLogoutWin *this, unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork);
void *__thiscall WaitingForLogoutWin::_scalar_deleting_destructor_(WaitingForLogoutWin *this, unsigned int);
void *__thiscall LogoutAfterMinutesWin::_scalar_deleting_destructor_(LogoutAfterMinutesWin *this, unsigned int);
void __thiscall WeaponTitleWin::WeaponTitleWin(WeaponTitleWin *this);
void __thiscall WeaponTitleWin::_WeaponTitleWin(WeaponTitleWin *this);
void __thiscall WeaponTitleWin::OnQuit(WeaponTitleWin *this);
void __thiscall WeaponTitleWin::ResetContents(WeaponTitleWin *this);
void __thiscall WeaponTitleWin::SignTitleFailed(WeaponTitleWin *this, ITEM_INVEN *rkLicenseInven);
void __thiscall WeaponTitleDeleteWin::SetClearItemInven(WeaponTitleDeleteWin *this, ITEM_INVEN *rkInven);
void __thiscall WeaponTitleWin::OnCommand(WeaponTitleWin *this, unsigned int wParam, int lParam);
void __thiscall WeaponTitleWin::OnClose(WeaponTitleWin *this);
void __thiscall WeaponTitleWin::SignTitleSuccess(WeaponTitleWin *this, ITEM_INVEN *rkLicenseInven, Item *pkWeapon);
bool __thiscall WeaponTitleWin::Create(WeaponTitleWin *this, PgFrameWork *pkFrameWork);
void __thiscall WeaponTitleWin::DirectMessage(WeaponTitleWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall WeaponTitleWin::OnRegBtn(WeaponTitleWin *this, int iIndex);
bool __thiscall WeaponTitleDeleteWin::Create(WeaponTitleDeleteWin *this, PgFrameWork *pkFrameWork);
void __thiscall WeaponTitleDeleteWin::OnRegBtn(WeaponTitleDeleteWin *this, int iIndex);
void __thiscall WeaponTitleWin::OnShowWin(WeaponTitleWin *this);
WeaponTitleWin *__cdecl WeaponTitleWin::CreateWin(PgFrameWork *pkFrameWork);
WeaponTitleDeleteWin *__cdecl WeaponTitleDeleteWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall WeaponTitleWin::SetWeaponTitle(WeaponTitleWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID);
void __thiscall WeaponTitleDeleteWin::SetWeaponTitle(WeaponTitleDeleteWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID);
void *__thiscall WeaponTitleDeleteWin::_vector_deleting_destructor_(WeaponTitleDeleteWin *this, unsigned int);
void __thiscall WingStoneMapWin::SetMapViewRect(WingStoneMapWin *this, unsigned int dwLeft, unsigned int dwTop, unsigned int dwRight, unsigned int dwBottom);
void __thiscall WingStoneMapWin::OnClose(WingStoneMapWin *this);
void __thiscall WingStoneMapWin::OnHelpLink(WingStoneMapWin *this);
void __thiscall WingStoneMapWin::OnFly(WingStoneMapWin *this);
void __thiscall WingStoneMapWin::SetWinPos(WingStoneMapWin *this, float fCharWorldX, float fCharWorldY);
void __thiscall WingStoneMapWin::WingStoneMapWin(WingStoneMapWin *this);
void __thiscall WingStoneMapWin::_WingStoneMapWin(WingStoneMapWin *this);
void __thiscall WingStoneMapWin::ReSetView(WingStoneMapWin *this);
void __thiscall WingStoneMapWin::OnCommand(WingStoneMapWin *this, unsigned int wParam, int lParam);
bool __thiscall WingStoneMapWin::Create(WingStoneMapWin *this, PgFrameWork *pkFrameWork);
bool __thiscall WingStoneMapWin::SetLoadMap(WingStoneMapWin *this, unsigned __int16 kMapID, float fX, float fY);
WingStoneMapWin *__cdecl WingStoneMapWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall WingStoneMapWin::_scalar_deleting_destructor_(WingStoneMapWin *this, unsigned int);
void __thiscall WingStoneWin::OnCmdPlaceMemoryList(WingStoneWin *this);
void __thiscall WingStoneWin::SetFirstGoddessWingUse(WingStoneWin *this, bool b);
void __thiscall WingStoneWin::OnCmdClose(WingStoneWin *this);
void __thiscall WingStoneWin::SetLockInvPos(WingStoneWin *this, unsigned int uiInvPos);
void __thiscall WingStoneWin::CloseWingStoneWin(WingStoneWin *this);
void __thiscall WingStoneWin::_WingStoneWin(WingStoneWin *this);
void __thiscall WingStoneWin::OnCmdFlying(WingStoneWin *this);
void __thiscall WingStoneWin::OnCmdPosiotionMemory(WingStoneWin *this);
void __thiscall WingStoneWin::ChoiceList(WingStoneWin *this, unsigned int uiParam);
void __thiscall WingStoneWin::WingStoneWin(WingStoneWin *this);
WingStoneWin *__cdecl WingStoneWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall WingStoneWin::Create(WingStoneWin *this, PgFrameWork *pkFrameWork);
void __thiscall WingStoneWin::InitInformation(WingStoneWin *this);
void __thiscall WingStoneWin::SetMapCoordinate(WingStoneWin *this, unsigned __int16 id);
void __thiscall WingStoneWin::SearchMapID(WingStoneWin *this, unsigned int MemorySlot);
void __thiscall WingStoneWin::OnCmdMapInfo(WingStoneWin *this);
void __thiscall WingStoneWin::UpdateMeWin(WingStoneWin *this, float fCurTime);
void __thiscall WingStoneWin::OnCommand(WingStoneWin *this, unsigned int wParam, int lParam);
void *__thiscall WingStoneWin::_scalar_deleting_destructor_(WingStoneWin *this, unsigned int);
void __thiscall WorldMapWin::DirectMessage(WorldMapWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall WorldMapWin::Create(WorldMapWin *this, PgFrameWork *pkFrameWork);
void __thiscall WorldMapWin::WorldMapLinkFail(WorldMapWin *this, unsigned __int16 nError, char nLevel);
void __thiscall WorldMapWin::OnShowWin(WorldMapWin *this);
void __thiscall WorldMapWin::_WorldMapWin(WorldMapWin *this);
void __thiscall WorldMapWin::OnCommand(WorldMapWin *this, unsigned int wParam, int lParam);
void __thiscall WorldMapWin::WorldMapWin(WorldMapWin *this);
WorldMapWin *__cdecl WorldMapWin::CreateWin(PgFrameWork *pkFrameWork);
unsigned int __cdecl ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::GetTotal();
MapInfo *__cdecl MapInfoTab::GetByLinkIndex(WM_Link LinkIndex);
bool __cdecl WorldMapAvatarInfoTab::GetByNormalDungeon(Name3 *kMapName);
NiPoint2 *__cdecl WorldMapAvatarInfoTab::GetByAvatarPosition(Name3 *kMapName);
void *__thiscall WorldMapWin::_scalar_deleting_destructor_(WorldMapWin *this, unsigned int);
void __thiscall OptionBaseWin::OptionBaseWin(OptionBaseWin *this);
void __thiscall OptionBaseWin::_OptionBaseWin(OptionBaseWin *this);
void __thiscall OptionBaseWin::OnHelpLink(OptionBaseWin *this);
void __thiscall OptionBaseWin::ProcessMeInput(OptionBaseWin *this, bool *bHit);
void __thiscall OptionBaseWin::UpdateMeWin(OptionBaseWin *this, float fCurTime);
void __thiscall OptionBaseWin::OnWinClose(OptionBaseWin *this);
void __thiscall OptionBaseWin::OnApply(OptionBaseWin *this);
void __thiscall OptionBaseWin::OnDefaultSetting(OptionBaseWin *this);
void __thiscall OptionBaseWin::OnGame(OptionBaseWin *this);
void __thiscall OptionBaseWin::OnGraphic(OptionBaseWin *this);
void __thiscall OptionBaseWin::OnSound(OptionBaseWin *this);
bool __thiscall OptionBaseWin::Create(OptionBaseWin *this, PgFrameWork *pkFrameWork);
void __thiscall OptionBaseWin::OnCommand(OptionBaseWin *this, unsigned int wParam, int lParam);
void __thiscall OptionBaseWin::SetMode(OptionBaseWin *this, int nMode);
OptionBaseWin *__cdecl OptionBaseWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall OptionBaseWin::_vector_deleting_destructor_(OptionBaseWin *this, unsigned int);
void __thiscall OptionGraphicWin::OptionGraphicWin(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::_OptionGraphicWin(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::OnGamma(OptionGraphicWin *this, int nPos);
void __thiscall OptionGraphicWin::OnApply(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::SetViewLength(OptionGraphicWin *this, float fRate);
void __thiscall OptionGraphicWin::SetCharShadowCnt(OptionGraphicWin *this, int nCnt);
void __thiscall OptionGraphicWin::SetLodAdjust(OptionGraphicWin *this, float fVal);
void __thiscall OptionGraphicWin::OnResolutionClick(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::OnViewLength(OptionGraphicWin *this, int nPos);
void __thiscall OptionGraphicWin::OnCharShadowCnt(OptionGraphicWin *this, int nPos);
void __thiscall OptionGraphicWin::OnOutLineCheck(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::CloseWin(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::SetOutLineCheck(OptionGraphicWin *this, bool bLine);
void __thiscall OptionGraphicWin::SetResoulution(OptionGraphicWin *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall OptionGraphicWin::SetWindowFullModeCheck(OptionGraphicWin *this, bool bCheck);
void __thiscall OptionGraphicWin::OnGlowEffectToggle(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::SetGlowEffectEnable(OptionGraphicWin *this, bool bEnable);
void __thiscall OptionGraphicWin::OnShakeEffectToggle(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::SetScreenShakeEffectEnable(OptionGraphicWin *this, bool bEnable);
void __thiscall OptionGraphicWin::OnCharAuraEffectToggle(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::SetCharAuraEffectEnable(OptionGraphicWin *this, bool bEnable);
void __thiscall OptionGraphicWin::OnScreenShotToggle(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::SetScreenShotEnable(OptionGraphicWin *this, bool bEnable);
bool __thiscall OptionGraphicWin::Create(OptionGraphicWin *this, PgFrameWork *pkFrameWork);
void __thiscall OptionGraphicWin::OnLodAdjust(OptionGraphicWin *this, int nPos);
void __thiscall OptionGraphicWin::OnWindowModCheck(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::SetWindowFullMode(OptionGraphicWin *this, bool bWinFullMode);
void __thiscall OptionGraphicWin::SetMultiSampleCheck(OptionGraphicWin *this, bool bCheck);
void __thiscall OptionGraphicWin::OnSlideClick(OptionGraphicWin *this, unsigned int uiID);
void __thiscall OptionGraphicWin::SetInfo(OptionGraphicWin *this, MachineOpt::GraphicOption *kOption);
void __thiscall OptionGraphicWin::OnMultiSampleCheck(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::ResetInfo(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::OnCommand(OptionGraphicWin *this, unsigned int wParam, int lParam);
void __thiscall OptionGraphicWin::OnWinClose(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::OpenWin(OptionGraphicWin *this);
void __thiscall OptionGraphicWin::OnDefaultSetting(OptionGraphicWin *this);
OptionGraphicWin *__cdecl OptionGraphicWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall OptionGraphicWin::_vector_deleting_destructor_(OptionGraphicWin *this, unsigned int);
void __thiscall OptionSoundWin::OptionSoundWin(OptionSoundWin *this);
void __thiscall OptionSoundWin::_OptionSoundWin(OptionSoundWin *this);
void __thiscall OptionSoundWin::OnClose(OptionSoundWin *this);
void __thiscall OptionSoundWin::SetInfo(OptionSoundWin *this, MachineOpt::SoundOption *kOption);
void __thiscall OptionSoundWin::OnMasterVolume(OptionSoundWin *this, unsigned int uiVol);
void __thiscall OptionSoundWin::OnBgVolume(OptionSoundWin *this, unsigned int uiVol);
void __thiscall OptionSoundWin::OnEffectVolume(OptionSoundWin *this, unsigned int uiVol);
void __thiscall OptionSoundWin::OnEnvEffectVolume(OptionSoundWin *this, unsigned int uiVol);
void __thiscall OptionSoundWin::OnApply(OptionSoundWin *this);
void __thiscall OptionSoundWin::CloseWin(OptionSoundWin *this);
void __thiscall OptionSoundWin::OpenWin(OptionSoundWin *this);
void __thiscall OptionSoundWin::OnDefaultSetting(OptionSoundWin *this);
bool __thiscall OptionSoundWin::Create(OptionSoundWin *this, PgFrameWork *pkFrameWork);
void __thiscall OptionSoundWin::OnSlideClick(OptionSoundWin *this, unsigned int uiID);
void __thiscall OptionSoundWin::OnCommand(OptionSoundWin *this, unsigned int wParam, int lParam);
OptionSoundWin *__cdecl OptionSoundWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall OptionSoundWin::_vector_deleting_destructor_(OptionSoundWin *this, unsigned int);
void __thiscall OptionSystemWin::OptionSystemWin(OptionSystemWin *this);
void __thiscall OptionSystemWin::_OptionSystemWin(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnApply(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnDefaultSetting(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnMyNameCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnOtherCharNameCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnNpcNameCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnMonsterNameCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnItemNameCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnHPCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnSPCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnInterfaceCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnSpeechCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnInterfacePosCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnChattingHideCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnWisCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnTrdCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnParCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnAgCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnSystemMsgCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnOKMsgBoxCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnChatInputCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnNamePanelCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnBasicInfoTipCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnPlayGuideCheck(OptionSystemWin *this);
void __thiscall OptionSystemWin::OnAutoStack(OptionSystemWin *this);
void __thiscall OptionSystemWin::CloseWin(OptionSystemWin *this);
void __thiscall OptionSystemWin::SetMyNameCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetOtherCharNameCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetNpcNameCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetMonsterNameCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetItemNameCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetHPCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetSPCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetInterfaceCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetSpeechCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetInterfacePosCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetChattingHideCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetWisCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetTrdCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetParCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetAgCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetSystemMsgCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetOKMsgBoxCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetChatInputCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetNamePanelCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetBasicInfoTipCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetPlayGuideCheck(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetAutoStack(OptionSystemWin *this, bool b);
void __thiscall OptionSystemWin::SetInfo(OptionSystemWin *this, MachineOpt::GameOption *kOption);
bool __thiscall OptionSystemWin::Create(OptionSystemWin *this, PgFrameWork *pkFrameWork);
void __thiscall OptionSystemWin::OnCommand(OptionSystemWin *this, unsigned int wParam, int lParam);
void __thiscall OptionSystemWin::OnWinClose(OptionSystemWin *this);
void __thiscall OptionSystemWin::OpenWin(OptionSystemWin *this);
OptionSystemWin *__cdecl OptionSystemWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall OptionSystemWin::_vector_deleting_destructor_(OptionSystemWin *this, unsigned int);
void __thiscall AbstateIcon::SetIconFile(AbstateIcon *this, char *FileName, int IconIndex);
unsigned __int16 __thiscall AbstateIcon::GetAbstate(AbstateIcon *this);
void __thiscall AbstateIcon::SetDuplicate(AbstateIcon *this, unsigned int uiDuplicate);
void __thiscall AbstateIcon::ClearDuplicateText(AbstateIcon *this);
void __thiscall AbstateIcon::SetAbstate(AbstateIcon *this, unsigned __int16 kAbstateID);
void __thiscall AbstateIcon::Show(AbstateIcon *this, bool b);
void __thiscall AbstateIcon::AbstateIcon(AbstateIcon *this);
void __thiscall AbstateIcon::_AbstateIcon(AbstateIcon *this);
bool __thiscall AbstateIcon::Create(AbstateIcon *this, int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent, bool EraseEnable);
void __thiscall AbstateIcon::SetBackPlaneColor(AbstateIcon *this, float rad, float green, float blue, float alpha);
void __thiscall AbstateIcon::CreateSubIconImg(AbstateIcon *this, char *pcFn, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight);
void __thiscall AbstateIcon::OnHide(AbstateIcon *this);
void __thiscall AbstateIcon::DirectMessage(AbstateIcon *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall AbstateIcon::CreateSubImagePlane(AbstateIcon *this, unsigned int uiWidth, unsigned int uiHeight);
AbstateIcon *__cdecl AbstateIcon::CreateWin(int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent, bool EraseEnable);
void __cdecl PgUtil::SetTextureCoord(NiScreenElements *pkScreenGeom, int nPoly, unsigned int uiTextureWidht, unsigned int uiTextureHeight, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight);
void *__thiscall AbstateIcon::_vector_deleting_destructor_(AbstateIcon *this, unsigned int);
void __thiscall ActionIcon::ActionIcon(ActionIcon *this);
void __thiscall ActionIcon::_ActionIcon(ActionIcon *this);
bool __thiscall ActionIcon::Create(ActionIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall ActionIcon::SetAction(ActionIcon *this, unsigned int uiTableIndex);
ActionIcon *__cdecl ActionIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
void *__thiscall ActionIcon::_vector_deleting_destructor_(ActionIcon *this, unsigned int);
void __thiscall AniIconWin::AniIconWin(AniIconWin *this);
void __thiscall AniIconWin::_AniIconWin(AniIconWin *this);
bool __thiscall AniIconWin::Create(AniIconWin *this, int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent);
bool __thiscall AniIconWin::CreateItemIconTexture(AniIconWin *this, unsigned __int16 itemID);
NiScreenElements *__thiscall AniIconWin::GetGeometry(AniIconWin *this);
bool __thiscall AniIconWin::CreateAniTexture(AniIconWin *this, const char *pkName);
AniIconWin *__cdecl AniIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
AniIconWin *__cdecl AniIconWin::CreateWin(int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent);
NiPointer<AniIconWin> *__cdecl AniIconWin::CreateWin(NiPointer<AniIconWin> *result, const char *pkName, int iWidth, int iHeight);
void *__thiscall AniIconWin::_scalar_deleting_destructor_(AniIconWin *this, unsigned int);
Item *__thiscall IconSlotWin::GetItem(IconSlotWin *this);
void __thiscall IconSlotWin::OnFirstHitWin(IconSlotWin *this);
unsigned __int16 __thiscall IconSlotWin::GetSkill(IconSlotWin *this);
void __thiscall IconSlotWin::IconSlotWin(IconSlotWin *this);
void __thiscall IconSlotWin::_IconSlotWin(IconSlotWin *this);
void __thiscall IconSlotWin::SetItem(IconSlotWin *this, Item *pkItem, bool bShowLotText, bool bEnable);
void __thiscall IconSlotWin::Clear(IconSlotWin *this);
void __thiscall IconSlotWin::SetSkill(IconSlotWin *this, unsigned __int16 kSkillID);
void __thiscall IconSlotWin::SetAction(IconSlotWin *this, unsigned int uiTableIndex);
void __thiscall IconSlotWin::SetItemSell(IconSlotWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkItemSellInfo);
void __thiscall IconSlotWin::SetItemByID(IconSlotWin *this, unsigned __int16 kItemID);
void __thiscall IconSlotWin::SetDropContents(IconSlotWin *this, DropContents *pkDropContents);
bool __thiscall IconSlotWin::EatDropInstance(IconSlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
IconSlotWin *__cdecl IconSlotWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
void *__thiscall IconSlotWin::_scalar_deleting_destructor_(IconSlotWin *this, unsigned int);
void __thiscall IconWin::SetIconImg(IconWin *this, NiSourceTexture *pkTexture, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight);
std::vector<IconWin *,std::allocator<IconWin *> > *__cdecl IconWin::GetCoolTimeIconList();
void __thiscall DecoPlaneTex::Show(DecoPlaneTex *this, bool bShow);
void __thiscall DecoPlaneColor::Show(DecoPlaneColor *this, bool bShow);
void __thiscall IconWin::ProcessMeInput(IconWin *this, bool *bHit);
void __thiscall IconWin::ReleaseMeInput(IconWin *this);
void __thiscall IconWin::Show(IconWin *this, bool b);
bool __thiscall IconWin::GetShow(IconWin *this);
void __thiscall IconWin::ShowFocus(IconWin *this, bool bFocus);
void __thiscall IconWin::UpdateMeWin(IconWin *this, float fCurTime);
void __thiscall IconWin::SetCoolTimeID(IconWin *this, unsigned __int16 id);
void __thiscall IconWin::SetCoolTimeIDByItemAction(IconWin *this, unsigned __int16 id);
bool __thiscall IconWin::IsStartCoolTime(IconWin *this);
void __thiscall IconWin::CooltimeDecrease(IconWin *this, unsigned __int16 kID);
void __thiscall IconWin::SelectIcon(IconWin *this);
void __thiscall DecoPlaneTex::DecoPlaneTex(DecoPlaneTex *this);
void __thiscall DecoPlaneTex::SetImage(DecoPlaneTex *this, char *pcFn, unsigned int uiIndex);
void __thiscall DecoPlaneColor::DecoPlaneColor(DecoPlaneColor *this);
void __thiscall DecoPlaneColor::SetColor(DecoPlaneColor *this, char byR, char byG, char byB, char bySubR, char bySubG, char bySubB);
void __thiscall IconWin::IconWin(IconWin *this);
void __thiscall IconWin::ResetUVs(IconWin *this, NiSourceTexture *pkTexture, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight);
void __thiscall IconWin::StartCoolTime(IconWin *this, float fCurTime, float fDlyTime, float fStartTime);
void __cdecl IconWin::StartCoolTimebyItemUse(unsigned __int16 id, float fCurTime, float fDlyTime, float fStartTime);
void __cdecl IconWin::StartCoolTime(unsigned __int16 id, float fCurTime, float fDlyTime, float fStartTime);
void __thiscall DecoPlaneTex::Create(DecoPlaneTex *this, PgWin *pkParent);
void __thiscall DecoPlaneColor::Create(DecoPlaneColor *this, PgWin *pkParent);
void __thiscall IconWin::_IconWin(IconWin *this);
void __thiscall IconWin::CreateGeometry(IconWin *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall IconWin::CreateGeometry(IconWin *this, NiSourceTexture *pkTexture, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight);
void __thiscall IconWin::IconDisable(IconWin *this, bool b);
void __thiscall IconWin::IconDisable(IconWin *this, float fR, float fG, float fB);
void __thiscall IconWin::CreateGeometry(IconWin *this, unsigned int uiWidth, unsigned int uiHeight, char *pPickFileName);
IconWin *__cdecl IconWin::CreateWin(int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent);
void __cdecl IconWin::ClearRegisteredCoolTime();
void *__thiscall IconWin::_scalar_deleting_destructor_(IconWin *this, unsigned int);
void __thiscall ItemIcon::ShowLotText(ItemIcon *this, bool b);
void __thiscall ItemIcon::ProcessMeInput(ItemIcon *this, bool *bHit);
Item *__thiscall ItemIcon::GetItem(ItemIcon *this);
char *__cdecl GetAmountString(Item *pkItem);
void __thiscall ItemIcon::Show(ItemIcon *this, bool b);
bool __thiscall ItemIcon::CheckQuestDoing(ItemIcon *this, unsigned __int16 kId);
unsigned __int16 __thiscall ItemIcon::GetItemID(ItemIcon *this);
void __thiscall ItemIcon::OnFirstHitWin(ItemIcon *this);
void __thiscall ItemIcon::_ItemIcon(ItemIcon *this);
bool __thiscall ItemIcon::Create(ItemIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall ItemIcon::SetSubIconImage(ItemIcon *this, char *pcFn, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight);
void __thiscall ItemIcon::SetBackPlaneColor(ItemIcon *this, float rad, float green, float blue, float alpha);
void __thiscall ItemIcon::SetTopPlaneColor(ItemIcon *this, float rad, float green, float blue, float alpha);
void __thiscall ItemIcon::DoingQuest(ItemIcon *this);
void __thiscall ItemIcon::GiveUpQuest(ItemIcon *this);
void __thiscall ItemIcon::SetItem(ItemIcon *this, Item *pkItem, bool bEnable);
void __thiscall ItemIcon::SetItemAsID(ItemIcon *this, unsigned __int16 itemID);
void __thiscall ItemIcon::SetChargedItem(ItemIcon *this, unsigned int dwShopItemID);
void __thiscall ItemIcon::SetItemSellInfo(ItemIcon *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkItemSellInfo);
void __thiscall ItemIcon::CreateSubImagePlane(ItemIcon *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall ItemIcon::PlaneInit(ItemIcon *this);
void __thiscall ItemIcon::ItemIcon(ItemIcon *this);
ItemIcon *__cdecl ItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
void __thiscall DecoPlaneColor::_DecoPlaneColor(DecoPlaneTex *this);
Skill::EmpowerInfo *__thiscall SkillIcon::GetEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo *result);
unsigned __int16 __thiscall SkillIcon::GetSkill(SkillIcon *this);
Skill::EmpowerInfo *__thiscall SkillIcon::GetAccumulatedEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo *result);
Skill::EmpowerInfo *__thiscall SkillIcon::GetTotalAccumulatedEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo *result);
void __thiscall SkillIcon::ShowSkillPowerBar(SkillIcon *this, bool b);
void __thiscall SkillIcon::SetBackPlaneColor(SkillIcon *this, float rad, float green, float blue, float alpha);
void __thiscall SkillIcon::SetTopPlaneColor(SkillIcon *this, float rad, float green, float blue, float alpha);
void __thiscall SkillIcon::Show(SkillIcon *this, bool b);
bool __thiscall SkillIcon::GraySkillTexture(SkillIcon *this, NiTexture *pkGrayTexture, NiD3DPass *pkD3DPass);
void __thiscall SkillIcon::_SkillIcon(SkillIcon *this);
bool __thiscall SkillIcon::Create(SkillIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall SkillIcon::SetEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo kInfo);
void __thiscall SkillIcon::RefreshSkillInfo(SkillIcon *this);
void __cdecl SkillIcon::RefreshSkillInfoAll();
void __thiscall SkillIcon::SkillIcon(SkillIcon *this);
void __thiscall SkillIcon::UsingSkillAlphaProperty(SkillIcon *this);
void __thiscall SkillIcon::UsingItemAlphaProperty(SkillIcon *this);
void __thiscall SkillIcon::SetSkill(SkillIcon *this, unsigned __int16 kSkillID);
SkillIcon *__cdecl SkillIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
void __thiscall NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_NiTListBase<DFALL<SkillIcon__>_SkillIcon__>(NiTListBase<DFALL<SkillIcon *>,SkillIcon *> *this);
void *__thiscall NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_vector_deleting_destructor_(NiTListBase<DFALL<SkillIcon *>,SkillIcon *> *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<SkillIcon__>_SkillIcon__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<SkillIcon *>,SkillIcon *> *this, unsigned int);
void *__thiscall SkillIcon::_scalar_deleting_destructor_(SkillIcon *this, unsigned int);
void __thiscall GuildCombatPropensityChangeWin::SetTitle(GuildCombatPropensityChangeWin *this, const char *pkTitle);
void __thiscall GuildCombatPropensityChangeWin::OnCmdCancel(GuildCombatPropensityChangeWin *this);
void __thiscall GuildCombatPropensityChangeWin::SetTextMsg(GuildCombatPropensityChangeWin *this, const char *pkMainMessage, const char *pkOkMessage, const char *pkCancelMessage);
void __thiscall GuildCombatPropensityChangeWin::OnHelpLink(GuildCombatPropensityChangeWin *this);
void __thiscall GuildCombatPropensityChangeWin::CheckButtonUpdate(GuildCombatPropensityChangeWin *this, int nIndex);
void __thiscall GuildCombatPropensityChangeWin::_GuildCombatPropensityChangeWin(GuildCombatPropensityChangeWin *this);
bool __thiscall GuildCombatPropensityChangeWin::Create(GuildCombatPropensityChangeWin *this);
void __thiscall GuildCombatPropensityChangeWin::GuildCombatPropensityChangeWin(GuildCombatPropensityChangeWin *this);
void __thiscall GuildCombatPropensityChangeWin::OnCmdOk(GuildCombatPropensityChangeWin *this);
GuildCombatPropensityChangeWin *__cdecl GuildCombatPropensityChangeWin::CreateWin();
void __thiscall GuildCombatPropensityChangeWin::RegisterCallBack(GuildCombatPropensityChangeWin *this, boost::function<void __cdecl(int),std::allocator<void> > CallBackFunc);
void __thiscall GuildCombatPropensityChangeWin::OnCommand(GuildCombatPropensityChangeWin *this, unsigned int wParam, int lParam);
GuildCombatPropensityChangeWin *__cdecl GuildCombatPropensityChangeWin::Modal(const char *pkTitleName);
GuildCombatPropensityChangeWin *__cdecl GuildCombatPropensityChangeWin::Modeless(const char *pkTitleName);
void *__thiscall GuildCombatPropensityChangeWin::_vector_deleting_destructor_(GuildCombatPropensityChangeWin *this, unsigned int);
void __thiscall boost::function1<void_int_std::allocator<void>>::operator__(boost::function1<void,int,std::allocator<void> > *this, int a0);
void __thiscall GuildFoundWin::OnCancel(GuildFoundWin *this);
void __thiscall GuildFoundWin::OnHelpLink(GuildFoundWin *this);
void __thiscall GuildFoundWin::OnWarCheckBox(GuildFoundWin *this);
void __thiscall GuildFoundWin::OnNoWarCheckBox(GuildFoundWin *this);
void __thiscall GuildFoundWin::OnShowWin(GuildFoundWin *this);
void __thiscall GuildFoundWin::GuildFoundWin(GuildFoundWin *this);
void __thiscall GuildFoundWin::_GuildFoundWin(GuildFoundWin *this);
bool __thiscall GuildFoundWin::Create(GuildFoundWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildFoundWin::OnOk(GuildFoundWin *this);
void __thiscall GuildFoundWin::OnEditEnd(GuildFoundWin *this, unsigned int wParam, int lParam);
void __thiscall GuildFoundWin::OnCommand(GuildFoundWin *this, unsigned int wParam, int lParam);
void __thiscall GuildFoundWin::UpdateMeWin(GuildFoundWin *this, float fCurTime);
GuildFoundWin *__cdecl GuildFoundWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildFoundWin::_scalar_deleting_destructor_(GuildFoundWin *this, unsigned int);
void __thiscall GuildMasterMenuWin::GuildMasterMenuWin(GuildMasterMenuWin *this);
void __thiscall GuildMasterMenuWin::_GuildMasterMenuWin(GuildMasterMenuWin *this);
void __thiscall GuildMasterMenuWin::OnHelpLink(GuildMasterMenuWin *this);
void __thiscall GuildMasterMenuWin::OnCommand(GuildMasterMenuWin *this, unsigned int wParam, int lParam);
bool __thiscall GuildMasterMenuWin::Create(GuildMasterMenuWin *this, PgFrameWork *pkFrameWork);
GuildMasterMenuWin *__cdecl GuildMasterMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildMasterMenuWin::_scalar_deleting_destructor_(GuildMasterMenuWin *this, unsigned int);
void __thiscall GuildMenuWin::OnHelpLink(GuildMenuWin *this);
void __thiscall GuildMenuWin::GuildMenuWin(GuildMenuWin *this);
void __thiscall GuildMenuWin::_GuildMenuWin(GuildMenuWin *this);
void __thiscall GuildMenuWin::CloseFoundWin(GuildMenuWin *this);
GuildMasterMenuWin *__thiscall GuildMenuWin::GetMasterMenuWin(GuildMenuWin *this);
void __thiscall GuildMenuWin::UpdateInformGuildMemberLoginText(GuildMenuWin *this);
void __thiscall GuildMenuWin::OnCmdGuildMasterMenu(GuildMenuWin *this);
void __thiscall GuildMenuWin::OpenMasterMenuWin(GuildMenuWin *this);
void __thiscall GuildMenuWin::GuildStateBtnSetting(GuildMenuWin *this);
bool __thiscall GuildMenuWin::Create(GuildMenuWin *this, PgFrameWork *pkFrameWork);
GuildMenuWin *__cdecl GuildMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildMenuWin::OnCmdGuildAddMember(GuildMenuWin *this);
void __thiscall GuildMenuWin::OnCmdGuildLeave(GuildMenuWin *this);
void __thiscall GuildMenuWin::OnCommand(GuildMenuWin *this, unsigned int wParam, int lParam);
void *__thiscall GuildMenuWin::_vector_deleting_destructor_(GuildMenuWin *this, unsigned int);
void __thiscall GuildLeaveTask::OnStart(GuildLeaveTask *this);
GuildLeaveTask *__cdecl ISingletonTask<GuildLeaveTask>::Run();
void *__thiscall ISingletonTask<GuildLeaveTask>::_vector_deleting_destructor_(GuildLeaveTask *this, unsigned int);
bool __thiscall GuildLeaveTask::OnProcessNetMsg(GuildLeaveTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildNameChangeWin::SetTitle(GuildNameChangeWin *this, const char *pkTitle);
void __thiscall GuildNameChangeWin::SetCommentText(GuildNameChangeWin *this, const char *pkComment);
void __thiscall GuildNameChangeWin::OnCmdCancel(GuildNameChangeWin *this);
void __thiscall GuildNameChangeWin::OnHelpLink(GuildNameChangeWin *this);
void __thiscall GuildNameChangeWin::_GuildNameChangeWin(GuildNameChangeWin *this);
bool __thiscall GuildNameChangeWin::Create(GuildNameChangeWin *this);
void __thiscall GuildNameChangeWin::GuildNameChangeWin(GuildNameChangeWin *this);
void __thiscall GuildNameChangeWin::OnCmdOk(GuildNameChangeWin *this);
GuildNameChangeWin *__cdecl GuildNameChangeWin::CreateWin();
void __thiscall GuildNameChangeWin::RegisterCallBack(GuildNameChangeWin *this, boost::function<void __cdecl(char const *),std::allocator<void> > CallBackFunc);
void __thiscall GuildNameChangeWin::OnCommand(GuildNameChangeWin *this, unsigned int wParam, int lParam);
GuildNameChangeWin *__cdecl GuildNameChangeWin::Modal(const char *pkTitleName);
GuildNameChangeWin *__cdecl GuildNameChangeWin::Modeless(const char *pkTitleName);
void __thiscall boost::function<void___cdecl__char_const____std::allocator<void>>::_function<void___cdecl__char_const____std::allocator<void>>(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *this);
void *__thiscall GuildNameChangeWin::_vector_deleting_destructor_(GuildNameChangeWin *this, unsigned int);
void __thiscall GuildNoticeEditorWin::GuildNoticeEditorWin(GuildNoticeEditorWin *this);
void __thiscall GuildNoticeEditorWin::_GuildNoticeEditorWin(GuildNoticeEditorWin *this);
void __thiscall GuildNoticeEditorWin::OnClose(GuildNoticeEditorWin *this);
void __thiscall GuildNoticeEditorWin::OnShowWin(GuildNoticeEditorWin *this);
void __thiscall GuildNoticeEditorWin::OnHelpLink(GuildNoticeEditorWin *this);
void __thiscall GuildNotifyTask::OnStart(GuildNotifyTask *this);
bool __thiscall GuildNotifyTask::OnProcessNetMsg(GuildNotifyTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
bool __thiscall GuildNoticeEditorWin::Create(GuildNoticeEditorWin *this, PgFrameWork *pkFrameWork);
GuildNoticeEditorWin *__cdecl GuildNoticeEditorWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildNotifyTask::SetInfo(GuildNotifyTask *this, char *pcNotice);
void __thiscall GuildNoticeEditorWin::OnCommand(GuildNoticeEditorWin *this, unsigned int wParam, int lParam);
void *__thiscall GuildNoticeEditorWin::_scalar_deleting_destructor_(GuildNoticeEditorWin *this, unsigned int);
void *__thiscall ISingletonTask<GuildNotifyTask>::_vector_deleting_destructor_(ISingletonTask<GuildNotifyTask> *this, unsigned int);
GuildNotifyTask *__cdecl ISingletonTask<GuildNotifyTask>::Run();
void *__thiscall GuildNotifyTask::_scalar_deleting_destructor_(GuildNotifyTask *this, unsigned int);
void __thiscall GuildDismissTask::OnFinish(GuildDismissTask *this);
void __thiscall GuildNpcMenuWin::Close(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnClose(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnShowWin(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnClickGuildAcademyMenuBtn(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnHelpLink(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnClickPrevMenuBtn(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::MenuBtnSetting(GuildNpcMenuWin *this, unsigned int BtnType, unsigned int PGWM_CMD_TYPE, char *pkText);
void __thiscall GuildDismissTask::SetInfo(GuildDismissTask *this, Name4 *rkName);
void __thiscall GuildNpcMenuWin::GuildNpcMenuWin(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::_GuildNpcMenuWin(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::CloseFoundWin(GuildNpcMenuWin *this);
void __thiscall GuildDismissTask::OnStart(GuildDismissTask *this);
void __thiscall GuildDismissTask::DirectMessage(GuildDismissTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall GuildDismissTask::OnProcessNetMsg(GuildDismissTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
bool __thiscall GuildNpcMenuWin::Create(GuildNpcMenuWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildNpcMenuWin::OnCmdFoundGuild(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnClickGuildAcademyStorageBtn(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnClickGuildDissmissBtn(GuildNpcMenuWin *this);
void __thiscall GuildNpcMenuWin::OnCommand(GuildNpcMenuWin *this, unsigned int wParam, int lParam);
GuildNpcMenuWin *__cdecl GuildNpcMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildNpcMenuWin::DirectMessage(GuildNpcMenuWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __cdecl STRING_TO_NAME(char *pcString, Name3 *kName3);
void *__thiscall GuildNpcMenuWin::_vector_deleting_destructor_(GuildNpcMenuWin *this, unsigned int);
GuildDismissTask *__cdecl ISingletonTask<GuildDismissTask>::Run();
void *__thiscall ISingletonTask<GuildDismissTask>::_scalar_deleting_destructor_(GuildDismissTask *this, unsigned int);
void __thiscall GuildWarInformWin::SetText(GuildWarInformWin *this, char *pcText);
void __thiscall GuildWarInformWin::SetColor(GuildWarInformWin *this, D3DXCOLOR *kColor);
void __thiscall GuildWarInformWin::GuildWarInformWin(GuildWarInformWin *this);
void __thiscall GuildWarInformWin::_GuildWarInformWin(GuildWarInformWin *this);
bool __thiscall GuildWarInformWin::Create(GuildWarInformWin *this, PgFrameWork *pkFrameWork);
GuildWarInformWin *__cdecl GuildWarInformWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildWarInformWin::_vector_deleting_destructor_(GuildWarInformWin *this, unsigned int);
void __thiscall GuildWarKillCountWin::SetText(GuildWarKillCountWin *this, float fLifeTime, char *pcText1, char *pcText2);
void __thiscall GuildWarKillCountWin::_GuildWarKillCountWin(GuildWarKillCountWin *this);
void __thiscall GuildWarKillCountWin::GuildWarKillCountWin(GuildWarKillCountWin *this);
bool __thiscall GuildWarKillCountWin::Create(GuildWarKillCountWin *this, PgFrameWork *pkFramework);
GuildWarKillCountWin *__cdecl GuildWarKillCountWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildWarKillCountWin::_vector_deleting_destructor_(GuildWarKillCountWin *this, unsigned int);
void __thiscall GuildWarStateWin::SortWarListBy(GuildWarStateWin *this, int iIndex);
void __thiscall GuildWarStateWin::SortWarableListBy(GuildWarStateWin *this, int iIndex);
unsigned int __cdecl SumKillScore(SHINE_GUILD_SCORE *rkGuildScore);
void __thiscall GuildWarStateWin::OnClose(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnHelpLink(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::SortWarAbleListNum(GuildWarStateWin *this, int iIndex);
void __thiscall GuildWarStateWin::UpdateTimer(GuildWarStateWin *this, float fTime);
void __thiscall GuildWarStateWin::OnCmdWarSlideBar(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnClick2(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnClick1(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::ViewSeachList(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnCmdApplyGuildWar(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnCmdWarableSlideBar(GuildWarStateWin *this);
char *__cdecl GetGuildWarTimeLeftStr(unsigned int dwLeftTime, unsigned int dwPassedTime);
char *__cdecl GetGuildWarStatusStr(Name4 *rkName);
char *__cdecl GetGuildWarStatusStr(char eStatus);
char *__cdecl GetGuildTypeStr(char type);
char *__cdecl GetGuildMemberCount(unsigned __int16 wCount);
char *__cdecl GetWarableStr(char byWarable);
void __thiscall GuildWarStateWin::AddGuildWarListItem(GuildWarStateWin *this, SHINE_GUILD_WAR_INFO *pkData);
void __thiscall GuildWarStateWin::AddGuildWarableListItem(GuildWarStateWin *this, SHINE_GUILD_WAR_ABLE_INFO *pkData);
void __thiscall GuildWarStateWin::UpdateMeWin(GuildWarStateWin *this, float fCurTime);
bool __thiscall GuildWarStateWin::IsSeachNameSize(GuildWarStateWin *this, char *pSearchName);
void __thiscall GuildWarStateWin::InvalidateGuildWarList(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::InvalidateGuildWarableList(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnShowWin(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnFirstPage(GuildWarStateWin *this);
bool __thiscall GuildWarStateWin::IsSeachHaveList(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::GuildWarStateWin(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::_GuildWarStateWin(GuildWarStateWin *this);
GuildWarStateWin *__cdecl GuildWarStateWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildWarStateWin::OnSearch(GuildWarStateWin *this);
void __thiscall GuildWarStateWin::OnCommand(GuildWarStateWin *this, unsigned int wParam, int lParam);
void __thiscall GuildWarStateWin::OnEditEnd(GuildWarStateWin *this, unsigned int wParam, int lParam);
bool __thiscall GuildWarStateWin::Create(GuildWarStateWin *this, PgFrameWork *pkFrameWork);
void *__thiscall GuildWarStateWin::_scalar_deleting_destructor_(GuildWarStateWin *this, unsigned int);
// tm *__usercall localtime<eax>(const int *_Time<eax>);
void __thiscall GuildWin::OnSortByTitle01(GuildWin *this);
void __thiscall GuildWin::OnSortByTitle02(GuildWin *this);
void __thiscall GuildWin::OnSortByTitle03(GuildWin *this);
void __thiscall GuildWin::OnSortByTitle04(GuildWin *this);
void __thiscall GuildWin::OnSortByTitle05(GuildWin *this);
void __thiscall GuildWin::OnGuildMenu(GuildWin *this);
void __thiscall GuildWin::SetNextJoinTime(GuildWin *this, char *pkJoinTime);
void __thiscall GuildWin::ClearGTInfo(GuildWin *this);
void __thiscall GuildWin::OnHelpLink(GuildWin *this);
void __thiscall GuildWin::OnGuildTournamentMenu(GuildWin *this);
void __thiscall GuildWin::OnShowEmblemWin(GuildWin *this);
bool __thiscall GuildWin::SetEmblemIconInfo(GuildWin *this);
void __thiscall GuildWin::SetEmblemDisable(GuildWin *this, bool bDisable);
void __thiscall GuildMemberVanishTask::SetInfo(GuildMemberVanishTask *this, Name5 *rkTargetName);
void __thiscall GuildMemberGradeSetupTask::SetInfo(GuildMemberGradeSetupTask *this, Name5 *rkTargetName, char grade, char TargetLevel);
void __thiscall GuildWin::ProcessMeInput(GuildWin *this, bool *bHit);
void __thiscall GuildWin::UpdateMeWin(GuildWin *this, float fCurTime);
void __thiscall GuildWin::OnLClick(GuildWin *this, int nItemIndex);
void __thiscall GuildWin::OnRClick(GuildWin *this, int nItemIndex);
void __thiscall GuildWin::OnDetailInfo(GuildWin *this);
void __thiscall GuildWin::OnChangeTab(GuildWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab);
void __thiscall GuildWin::OnWinClose(GuildWin *this);
void __thiscall GuildWin::OnSlideBar(GuildWin *this, SlideBar *pkSlideBar, SlideListWin *pkSlideListWin);
void __thiscall GuildWin::OnTopWin(GuildWin *this);
void __thiscall GuildMemberVanishTask::OnStart(GuildMemberVanishTask *this);
void __thiscall GuildMemberVanishTask::DirectMessage(GuildMemberVanishTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildMemberGradeSetupTask::OnStart(GuildMemberGradeSetupTask *this);
bool __thiscall GuildMemberGradeSetupTask::OnProcessNetMsg(GuildMemberGradeSetupTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
bool __thiscall GuildMemberGradeSetupTask::ConfirmMasterChange(GuildMemberGradeSetupTask *this);
void __thiscall GuildWin::OnEditNotice(GuildWin *this);
void __thiscall GuildWin::OnSlideBar(GuildWin *this);
void __thiscall GuildWin::OnSlideBarNotice(GuildWin *this);
void __thiscall GuildWin::OnSlideBarHistory(GuildWin *this);
char *__thiscall GuildWin::GetHistoryText(GuildWin *this, GUILD_HISTORY_MSG_TYPE hisType);
void __thiscall GuildWin::SetEmblemState(GuildWin *this, const char *eEmblemState);
void __thiscall GuildMemberGradeSetupTask::DirectMessage(GuildMemberGradeSetupTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildWin::AddListItem_DefInfo(GuildWin *this, GUILD_MEMBER_CLIENT *pkData);
void __thiscall GuildWin::ViewAllInfo(GuildWin *this, PROTO_FRIEND_INFO *pdata);
void __thiscall GuildWin::InvalidateGuildHistoryList(GuildWin *this);
void __thiscall GuildWin::ShowEmblem(GuildWin *this, bool bShow);
void __thiscall GuildWin::SetEmblem(GuildWin *this, GUILD_EMBLEM_INFO *pEmblemInfo, char eEmblemState);
void __thiscall GuildWin::ClearEmblem(GuildWin *this);
void __thiscall GuildWin::UpdateViewList(GuildWin *this);
void __thiscall GuildWin::ChangeUserName(GuildWin *this, Name5 *OldName, Name5 *NewName);
void __thiscall GuildWin::OnAddGuildMember(GuildWin *this);
bool __thiscall GuildMemberVanishTask::OnProcessNetMsg(GuildMemberVanishTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildWin::InvalidateGuildList(GuildWin *this);
void __thiscall GuildWin::DeleteUser(GuildWin *this, Name5 *kName);
void __thiscall GuildWin::_GuildWin(GuildWin *this);
void __thiscall GuildWin::DirectMessage(GuildWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildWin::OnTab01(GuildWin *this);
void __thiscall GuildWin::OnTab02(GuildWin *this);
void __thiscall GuildWin::OnTab03(GuildWin *this);
void __thiscall GuildWin::GuildWin(GuildWin *this);
GuildWin *__cdecl GuildWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildWin::OnCommand(GuildWin *this, unsigned int wParam, int lParam);
void __thiscall GuildWin::OnShowWin(GuildWin *this);
bool __thiscall GuildWin::Create(GuildWin *this, PgFrameWork *pkFrameWork);
ATL::ATLSTRINGRESOURCEIMAGE *__cdecl ATL::_AtlGetStringResourceImage(HINSTANCE__ *hInstance, HRSRC__ *hResource, unsigned int id);
HINSTANCE__ *__cdecl ATL::AtlFindStringResourceInstance(unsigned int nID, unsigned __int16 wLanguage);
void __cdecl ATL::CSimpleStringT<char_0>::ThrowMemoryException();
void __thiscall ATL::CSimpleStringT<char_0>::Fork(ATL::CSimpleStringT<char,0> *this, int nLength);
void __thiscall ATL::CSimpleStringT<char_0>::Reallocate(ATL::CSimpleStringT<char,0> *this, int nLength);
void __thiscall ATL::CSimpleStringT<char_0>::Empty(ATL::CSimpleStringT<char,0> *this);
void __thiscall ATL::CSimpleStringT<char_0>::PrepareWrite2(ATL::CSimpleStringT<char,0> *this, int nLength);
char *__cdecl Guild::GetMemberGradeString(char grade);
void __thiscall ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::_CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>(ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *this);
void __thiscall ATL::CSimpleStringT<char_0>::SetString(ATL::CSimpleStringT<char,0> *this, const char *pszSrc, int nLength);
int __thiscall ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::LoadStringA(ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *this, HINSTANCE__ *hInstance, unsigned int nID);
void *__thiscall GuildMemberVanishTask::_vector_deleting_destructor_(GuildMemberVanishTask *this, unsigned int);
void *__thiscall ISingletonTask<GuildMemberGradeSetupTask>::_vector_deleting_destructor_(GuildMemberGradeSetupTask *this, unsigned int);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *_Node, bool _Leftish);
GuildMemberVanishTask *__cdecl ISingletonTask<GuildMemberVanishTask>::Run();
GuildMemberGradeSetupTask *__cdecl ISingletonTask<GuildMemberGradeSetupTask>::Run();
GuildAcademyMasterAppointTask *__cdecl ISingletonTask<GuildAcademyMasterAppointTask>::Run();
GuildAcademyMasterInitializeTask *__cdecl ISingletonTask<GuildAcademyMasterInitializeTask>::Run();
void __thiscall ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>(ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *this, const char *pszSrc);
void *__thiscall ISingletonTask<GuildAcademyMasterAppointTask>::_scalar_deleting_destructor_(GuildAcademyMasterAppointTask *this, unsigned int);
void *__thiscall ISingletonTask<GuildAcademyMasterInitializeTask>::_scalar_deleting_destructor_(GuildAcademyMasterInitializeTask *this, unsigned int);
ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *__thiscall ATL::CTime::Format(ATL::CTime *this, ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *result, const char *pFormat);
void *__thiscall GuildWin::_scalar_deleting_destructor_(GuildWin *this, unsigned int);
void __thiscall GTIFlagWin::GTIFlagWin(GTIFlagWin *this);
void __thiscall GTIFlagWin::_GTIFlagWin(GTIFlagWin *this);
bool __thiscall GTIFlagWin::Create(GTIFlagWin *this, PgFrameWork *pkFrameWork, unsigned int uiFlagType);
GTIFlagWin *__cdecl GTIFlagWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int uiFlagType);
void *__thiscall GTIFlagWin::_vector_deleting_destructor_(GTIFlagWin *this, unsigned int);
void __thiscall GTInformWin::AddText(GTInformWin *this, char *pcText, D3DXCOLOR TextColor, bool bSingleLine, float fLifeTime);
void __thiscall GTInformWin::AddText(GTInformWin *this, unsigned int uiMaxViewLine, char *pcText, D3DXCOLOR TextColor, float fLifeTime);
void __thiscall GTInformWin::Clear(GTInformWin *this);
void __thiscall GTInformWin::_GTInformWin(GTInformWin *this);
void __thiscall GTInformWin::GTInformWin(GTInformWin *this);
bool __thiscall GTInformWin::Create(GTInformWin *this, PgFrameWork *pkFrameWork);
GTInformWin *__cdecl GTInformWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GTInformWin::_vector_deleting_destructor_(GTInformWin *this, unsigned int);
bool __cdecl PkRealTiemRankWin::RankInfo::greater_Score(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::Low_IncreaseScore(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::Low_DecreaseScore(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::Low_DieCount(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::High_KillCount(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
bool __cdecl PkRealTiemRankWin::RankInfo::Less_Rank(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::High_Grade(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::Low_Grade(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::High_CaptureFlag(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
bool __cdecl GTStatusWin::RankInfo::Low_CaptureFlag(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw);
void __thiscall GTStatusWin::UpdateMeWin(GTStatusWin *this, float fCurTime);
void __thiscall GTStatusWin::EndGame(GTStatusWin *this, bool b);
void __thiscall GTStatusWin::OnHelpLink(GTStatusWin *this);
void __thiscall GTStatusMiniWin::GTStatusMiniWin(GTStatusMiniWin *this);
void __thiscall GTStatusMiniWin::_GTStatusMiniWin(GTStatusMiniWin *this);
void __thiscall GTStatusMiniWin::Clear(GTStatusMiniWin *this);
void __thiscall GTStatusMiniWin::EndGame(GTStatusMiniWin *this, bool b);
void __thiscall GTStatusMiniWin::OnHelpLink(GTStatusMiniWin *this);
void __thiscall GTStatusWin::SetGuildInfo(GTStatusWin *this, unsigned int Reg, unsigned int TotalScore);
void __thiscall GTStatusWin::OnSlideBar(GTStatusWin *this);
void __thiscall GTStatusMiniWin::OnCommand(GTStatusMiniWin *this, unsigned int wParam, int lParam);
void __thiscall GTStatusMiniWin::SetGTStatus(GTStatusMiniWin *this, PROTO_NC_GUILD_TOURNAMENT_SCORE_CMD *pkCmd);
bool __thiscall GTStatusMiniWin::Create(GTStatusMiniWin *this, PgFrameWork *pkFrameWork);
GTStatusMiniWin *__cdecl GTStatusMiniWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GTStatusWin::AddRankPlayerInfo(GTStatusWin *this, GTStatusWin::RankInfo *rInfo);
void __thiscall GTStatusWin::DisplayInfoSetting(GTStatusWin *this);
void __thiscall GTStatusWin::GTStatusWin(GTStatusWin *this);
void __thiscall GTStatusWin::_GTStatusWin(GTStatusWin *this);
GTStatusWin *__cdecl GTStatusWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GTStatusWin::Clear(GTStatusWin *this);
bool __thiscall GTStatusWin::Create(GTStatusWin *this, PgFrameWork *pkFrameWork);
void __thiscall GTStatusWin::OnCommand(GTStatusWin *this, unsigned int wParam, int lParam);
bool __thiscall GTStatusWin::SetRankInfo(GTStatusWin *this, TOURNAMENT_PLAYER_SCORE *pkCmd, unsigned int Reg);
void *__thiscall GTStatusMiniWin::_vector_deleting_destructor_(GTStatusMiniWin *this, unsigned int);
GTStatusWin::RankInfo *__thiscall std::allocator<GTStatusWin::RankInfo>::allocate(std::allocator<GTStatusWin::RankInfo> *this, unsigned int _Count);
void __thiscall boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *this, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *f);
bool __cdecl GTRequestListWin::GuildInfo::High_GuildName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
GTStatusWin::RankInfo *__cdecl std::_Move<GTStatusWin::RankInfo___GTStatusWin::RankInfo__>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Destroy_range<std::allocator<GTStatusWin::RankInfo>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, std::allocator<GTStatusWin::RankInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Construct<GTStatusWin::RankInfo_GTStatusWin::RankInfo_const__>(GTStatusWin::RankInfo *_Ptr, GTStatusWin::RankInfo *_Val);
void __cdecl std::swap<GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_Left, GTStatusWin::RankInfo *_Right);
void __cdecl std::_Push_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, int _Hole, int _Top, GTStatusWin::RankInfo *_Val, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
GTStatusWin::RankInfo *__cdecl std::_Move_backward<GTStatusWin::RankInfo___GTStatusWin::RankInfo__>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Push_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, int _Hole, int _Top, GTStatusWin::RankInfo *_Val, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *));
void __cdecl std::_Cons_val<std::allocator<GTStatusWin::RankInfo>_GTStatusWin::RankInfo_GTStatusWin::RankInfo__>(std::allocator<GTStatusWin::RankInfo> *_Alval, GTStatusWin::RankInfo *_Pdest, GTStatusWin::RankInfo *_Src);
GTStatusWin::RankInfo *__cdecl std::_Uninit_move<GTStatusWin::RankInfo___GTStatusWin::RankInfo___std::allocator<GTStatusWin::RankInfo>_GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, std::allocator<GTStatusWin::RankInfo> *_Al, GTStatusWin::RankInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Med3<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Mid, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, int _Hole, int _Bottom, GTStatusWin::RankInfo *_Val, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, int _Hole, int _Bottom, GTStatusWin::RankInfo *_Val, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *));
void __cdecl std::_Pop_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, GTStatusWin::RankInfo *_Val, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal);
void __cdecl std::_Pop_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, GTStatusWin::RankInfo *_Val, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), int *__formal);
void __cdecl std::_Median<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Mid, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Make_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal, GTStatusWin::RankInfo *__formal);
void __cdecl std::_Insertion_sort1<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>_GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, GTStatusWin::RankInfo *__formal);
void __cdecl std::_Median<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Mid, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *));
void __cdecl std::_Make_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), int *__formal, GTStatusWin::RankInfo *__formal);
void __cdecl std::_Insertion_sort1<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), GTStatusWin::RankInfo *__formal);
void __cdecl std::_Pop_heap_0<GTStatusWin::RankInfo___GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, GTStatusWin::RankInfo *__formal);
void __cdecl std::_Pop_heap_0<GTStatusWin::RankInfo___GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), GTStatusWin::RankInfo *__formal);
std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> *__cdecl std::_Unguarded_partition<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> *result, GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::make_heap<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Insertion_sort<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> *__cdecl std::_Unguarded_partition<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> *result, GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *));
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::_vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this);
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::reserve(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this, unsigned int _Count);
void __cdecl std::_Sort_heap<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Sort_heap<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *));
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::_Reserve(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this, unsigned int _Count);
void __cdecl std::sort_heap<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void *__thiscall GTStatusWin::_vector_deleting_destructor_(GTStatusWin *this, unsigned int);
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::push_back(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this, GTStatusWin::RankInfo *_Val);
void __cdecl std::_Sort<GTStatusWin::RankInfo___int_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, int _Ideal, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Sort<GTStatusWin::RankInfo___int_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, int _Ideal, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *));
void __cdecl std::sort<std::_Vector_iterator<std::_Vector_val<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>>_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(std::_Vector_iterator<std::_Vector_val<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > > _First, std::_Vector_iterator<std::_Vector_val<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > > _Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred);
void __thiscall GTTDiceWin::GTTDiceWin(GTTDiceWin *this);
void __thiscall GTTDiceWin::_GTTDiceWin(GTTDiceWin *this);
void __thiscall GTTDiceWin::RollingDice(GTTDiceWin *this, bool b);
void __thiscall GTTDiceWin::InitDice(GTTDiceWin *this);
void __thiscall GTTDiceWin::SetCount(GTTDiceWin *this, bool b);
void __thiscall GTTDiceWin::UpdateMeWin(GTTDiceWin *this, float fCurTime);
void __thiscall GTTDiceWin::OnClickDice(GTTDiceWin *this);
void __thiscall GTTDiceWin::SetReseultDice(GTTDiceWin *this, unsigned int uiType, bool b);
void __thiscall GTTDiceWin::OnShowWin(GTTDiceWin *this);
bool __thiscall GTTDiceWin::Create(GTTDiceWin *this, PgFrameWork *pkFrameWork);
void __thiscall GTTDiceWin::OnCommand(GTTDiceWin *this, unsigned int wParam, int lParam);
GTTDiceWin *__cdecl GTTDiceWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GTTDiceWin::_scalar_deleting_destructor_(GTTDiceWin *this, unsigned int);
void __thiscall GTTSkillWin::GTTSkillWin(GTTSkillWin *this);
void __thiscall GTTSkillWin::_GTTSkillWin(GTTSkillWin *this);
void __thiscall GTTSkillWin::SetSkillPoint(GTTSkillWin *this, unsigned int uiSkillPoint);
void __thiscall GTTSkillWin::ReSetPage(GTTSkillWin *this);
void __thiscall GTTSkillWin::OnHelpLink(GTTSkillWin *this);
void __thiscall GTTMiniSkillWin::GTTMiniSkillWin(GTTMiniSkillWin *this);
void __thiscall GTTMiniSkillWin::_GTTMiniSkillWin(GTTMiniSkillWin *this);
void __thiscall GTTMiniSkillWin::SetSkillPoint(GTTMiniSkillWin *this, unsigned int uiSkillPoint);
void __thiscall GTTMiniSkillWin::UpdateMeWin(GTTMiniSkillWin *this, float fCurTime);
void __thiscall GTTSkillWin::InitPage(GTTSkillWin *this);
void __thiscall GTTSkillWin::OnInvLClick(GTTSkillWin *this, unsigned int uiIndex);
void __thiscall GTTSkillWin::StartCoolTime(GTTSkillWin *this, unsigned int uiIndex);
bool __thiscall GTTMiniSkillWin::Create(GTTMiniSkillWin *this, PgFrameWork *pkFrameWork);
bool __thiscall GTTSkillWin::Create(GTTSkillWin *this, PgFrameWork *pkFrameWork);
void __thiscall GTTSkillWin::OnCommand(GTTSkillWin *this, unsigned int wParam, int lParam);
GTTSkillWin *__cdecl GTTSkillWin::CreateWin(PgFrameWork *pkFrameWork);
GTTMiniSkillWin *__cdecl GTTMiniSkillWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GTTSkillWin::_scalar_deleting_destructor_(GTTSkillWin *this, unsigned int);
void *__thiscall GTTMiniSkillWin::_vector_deleting_destructor_(GTTMiniSkillWin *this, unsigned int);
GUILD_TOURNAMENT_SKILL *__cdecl GuildTournamentStateTab::GetByMapIndex(unsigned int uiIndex, unsigned int uiMapType);
bool __cdecl GuildListWin::GuildInfo::High_GuildType(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
bool __cdecl GuildListWin::GuildInfo::Low_GuildType(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
bool __cdecl GTRequestListWin::GuildInfo::High_GuildGrade(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
void __thiscall GuildTournamentBaseWin::GuildTournamentBaseWin(GuildTournamentBaseWin *this);
void __thiscall GuildTournamentBaseWin::_GuildTournamentBaseWin(GuildTournamentBaseWin *this);
void __thiscall GuildTournamentBaseWin::OnShowWin(GuildTournamentBaseWin *this);
void __thiscall GuildTournamentBaseWin::DirectMessage(GuildTournamentBaseWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildTournamentBaseWin::On_NC_GUILD_TOURNAMENT_LIST_REQ(GuildTournamentBaseWin *this);
void __thiscall GuildTournamentBaseWin::On_NC_GUILD_TOURNAMENT_STORAGEOPEN_REQ(GuildTournamentBaseWin *this);
void __thiscall GuildTournamentBaseWin::OnHelpLink(GuildTournamentBaseWin *this);
void __thiscall GTRequestListWin::UpdateMeWin(GTRequestListWin *this, float fCurTime);
void __thiscall GTRequestListWin::OnHelpLink(GTRequestListWin *this);
void __thiscall GTRequestListWin::OnSlideBar(GTRequestListWin *this);
void __thiscall GTRequestListWin::OnSearchChoice(GTRequestListWin *this);
void __thiscall GuildTournamentBaseWin::On_NC_GUILD_TOURNAMENT_JOIN_REQ(GuildTournamentBaseWin *this);
void __thiscall GTRequestListWin::DirectMessage(GTRequestListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GTRequestListWin::OnClose(GTRequestListWin *this);
void __thiscall GuildTournamentBaseWin::OnCommand(GuildTournamentBaseWin *this, unsigned int wParam, int lParam);
GuildTournamentBaseWin *__cdecl GuildTournamentBaseWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GTRequestListWin::AddGuildInfo(GTRequestListWin *this, GTRequestListWin::GuildInfo *kGuildInfo);
void __thiscall GTRequestListWin::DisplayInfoSetting(GTRequestListWin *this, bool bSearch);
void __thiscall GTRequestListWin::GTRequestListWin(GTRequestListWin *this);
void __thiscall GTRequestListWin::_GTRequestListWin(GTRequestListWin *this);
void __thiscall GTRequestListWin::Clear(GTRequestListWin *this);
GTRequestListWin *__cdecl GTRequestListWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall GuildTournamentBaseWin::Create(GuildTournamentBaseWin *this, PgFrameWork *pkFrameWork);
void __thiscall GTRequestListWin::OnSearch(GTRequestListWin *this);
void __thiscall GTRequestListWin::OnEditEnd(GTRequestListWin *this, unsigned int wParam, int lParam);
void __thiscall GTRequestListWin::SetGuildList(GTRequestListWin *this, SHINE_GUILD_LIST_NEW *pkList, unsigned int uiTotalGuild);
void __thiscall GTRequestListWin::ShowFormerList(GTRequestListWin *this);
void __thiscall GTRequestListWin::OnCommand(GTRequestListWin *this, unsigned int wParam, int lParam);
bool __thiscall GTRequestListWin::Create(GTRequestListWin *this, PgFrameWork *pkFrameWork);
bool __cdecl boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke(boost::detail::function::any_pointer function_ptr, GuildListWin::GuildInfo *a0, GuildListWin::GuildInfo *a1);
void *__thiscall GuildTournamentBaseWin::_vector_deleting_destructor_(GuildTournamentBaseWin *this, unsigned int);
bool __cdecl GuildListWin::GuildInfo::Low_GuildName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(NsPathMaker *this);
bool __cdecl GTRequestListWin::GuildInfo::High_GuildMasterName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw);
void __thiscall GuildListWin::GuildInfo::GuildInfo(GuildListWin::GuildInfo *this, GuildListWin::GuildInfo *__that);
void __cdecl std::_Dest_val<std::allocator<GTRequestListWin::GuildInfo>_GTRequestListWin::GuildInfo>(std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *_Alval, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Pdest);
void __cdecl std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, std::allocator<GuildListWin::GuildInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::swap<GTRequestListWin::GuildInfo>(GuildListWin::GuildInfo *_Left, GuildListWin::GuildInfo *_Right);
void __cdecl std::_Push_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, int _Hole, int _Top, GuildListWin::GuildInfo *_Val, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Push_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, int _Hole, int _Top, GuildListWin::GuildInfo *_Val, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *));
void __cdecl std::_Med3<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Mid, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Adjust_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, int _Hole, int _Bottom, GuildListWin::GuildInfo *_Val, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Adjust_heap<GuildListWin::GuildInfo___int_GuildListWin::GuildInfo_bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, int _Hole, int _Bottom, GuildListWin::GuildInfo *_Val, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *));
void __cdecl std::_Pop_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, GuildListWin::GuildInfo *_Val, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, int *__formal);
void __cdecl std::_Median<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Mid, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Pop_heap_0<GuildListWin::GuildInfo___GuildListWin::GuildInfo_boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, GuildListWin::GuildInfo *__formal);
void __cdecl std::_Pop_heap_0<GTRequestListWin::GuildInfo___GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *), GuildListWin::GuildInfo *__formal);
std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> *__cdecl std::_Unguarded_partition<GuildListWin::GuildInfo___boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> *result, GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __thiscall std::vector<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>::_vector<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this);
void __cdecl std::_Sort_heap<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __cdecl std::_Sort_heap<GuildListWin::GuildInfo___bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *));
void __cdecl std::sort_heap<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void *__thiscall GTRequestListWin::_vector_deleting_destructor_(GTRequestListWin *this, unsigned int);
void __cdecl std::_Sort<GTRequestListWin::GuildInfo___int_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, int _Ideal, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __cdecl std::sort<std::_Vector_iterator<std::_Vector_val<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>>_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > _First, std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > _Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred);
void __thiscall GuildTournamentScheduleWin::GuildTournamentScheduleWin(GuildTournamentScheduleWin *this);
void __thiscall GuildTournamentScheduleWin::_GuildTournamentScheduleWin(GuildTournamentScheduleWin *this);
void __thiscall GuildTournamentScheduleWin::OnCommand(GuildTournamentScheduleWin *this, unsigned int wParam, int lParam);
void __thiscall GuildTournamentScheduleWin::ClearList(GuildTournamentScheduleWin *this);
bool __thiscall GuildTournamentScheduleWin::Create(GuildTournamentScheduleWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildTournamentScheduleWin::CheckMatchType(GuildTournamentScheduleWin *this, PROTO_NC_GUILD_TOURNAMENT_LIST_ACK *pkProto);
bool __thiscall GuildTournamentScheduleWin::SetGuildTournamentList(GuildTournamentScheduleWin *this, PROTO_NC_GUILD_TOURNAMENT_LIST_ACK *pkProto);
void __thiscall GuildTournamentScheduleWin::SetGuildTournamentMatchType(GuildTournamentScheduleWin *this, PROTO_NC_GUILD_TOURNAMENT_LIST_ACK *pkProto);
void __thiscall GuildTournamentScheduleWin::SetGuildTournamentMatchType(GuildTournamentScheduleWin *this, unsigned int uiMsg);
GuildTournamentScheduleWin *__cdecl GuildTournamentScheduleWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildTournamentScheduleWin::_scalar_deleting_destructor_(GuildTournamentScheduleWin *this, unsigned int);
void __thiscall GTStorageInvWin::GTStorageInvWin(GTStorageInvWin *this);
void __thiscall GTStorageInvWin::_GTStorageInvWin(GTStorageInvWin *this);
bool __thiscall GTStorageInvWin::Create(GTStorageInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall GTStorageInvWin::OnFirstHitWin(GTStorageInvWin *this);
void __thiscall GuildTournamentStorageWin::On_NC_ITEMDB_CLOSE_GUILD_STORAGE_CMD(GuildTournamentStorageWin *this);
void __thiscall GuildTournamentStorageWin::ResetContents(GuildTournamentStorageWin *this);
void __thiscall GuildTournamentStorageWin::GTTInvenItemRemoval(GuildTournamentStorageWin *this, unsigned int uiInvIndex);
void __thiscall GuildTournamentStorageWin::OnDrawingMoneyWinOk(GuildTournamentStorageWin *this, __int64 i64Money);
void __thiscall GuildTournamentStorageWin::UpdateMeWin(GuildTournamentStorageWin *this, float fCurTime);
void __thiscall GuildTournamentStorageWin::OnHelpLink(GuildTournamentStorageWin *this);
void __thiscall GuildTournamentStorageWin::GuildTournamentStorageWin(GuildTournamentStorageWin *this);
void __thiscall GuildTournamentStorageWin::_GuildTournamentStorageWin(GuildTournamentStorageWin *this);
void __thiscall GuildTournamentStorageWin::OnClose(GuildTournamentStorageWin *this);
void __thiscall GTStorageInvWin::DoAction(GTStorageInvWin *this);
void __thiscall GTStorageInvWin::DoRAction(GTStorageInvWin *this);
void __thiscall GuildTournamentStorageWin::OnInvShiftLClick(GuildTournamentStorageWin *this, unsigned int uiInvIndex);
void __thiscall GuildTournamentStorageWin::OnInvRClick(GuildTournamentStorageWin *this, unsigned int uiInvIndex);
bool __thiscall GuildTournamentStorageWin::DropOnInv(GuildTournamentStorageWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall GuildTournamentStorageWin::OnDrawing(GuildTournamentStorageWin *this);
void __thiscall GuildTournamentStorageWin::SetToken(GuildTournamentStorageWin *this, unsigned __int64 uiToken);
bool __thiscall GTStorageInvWin::EatDropInstance(GTStorageInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall GuildTournamentStorageWin::OnInvLClick(GuildTournamentStorageWin *this, unsigned int uiInvIndex);
void __thiscall GuildTournamentStorageWin::OnCommand(GuildTournamentStorageWin *this, unsigned int wParam, int lParam);
GTStorageInvWin *__cdecl GTStorageInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
GuildTournamentStorageWin *__cdecl GuildTournamentStorageWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall GuildTournamentStorageWin::Create(GuildTournamentStorageWin *this, PgFrameWork *pkFrameWork);
void *__thiscall GTStorageInvWin::_scalar_deleting_destructor_(GTStorageInvWin *this, unsigned int);
void *__thiscall GuildTournamentStorageWin::_vector_deleting_destructor_(GuildTournamentStorageWin *this, unsigned int);
ChatBoard::Type __thiscall ChatBoard::ParseUserChat(ChatBoard *this, char **pcText);
bool __thiscall ChatBoard::ViewLineUp(ChatBoard *this);
bool __thiscall ChatBoard::ViewLineDown(ChatBoard *this);
bool __thiscall ChatBoard::ViewLineMostDown(ChatBoard *this);
void __thiscall ChatBoard::SetText(ChatBoard *this, ChatBoard::Type eType, char *pcText, unsigned int uiTextLen);
void __thiscall ChatBoard::UpdateMeWin(ChatBoard *this, float fCurTime);
void __thiscall ChatBoard::_ChatBoard(ChatBoard *this);
void __thiscall ChatBoard::Add(ChatBoard *this, ChatBoard::Type eType, char *pcText);
void __thiscall ChatBoard::CreateTextGeometry(ChatBoard *this);
void __thiscall ChatBoard::ChatBoard(ChatBoard *this);
void __thiscall ChatBoard::AddUserChat(ChatBoard *this, char *pcText);
bool __thiscall ChatBoard::Create(ChatBoard *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent);
ChatBoard *__cdecl ChatBoard::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent);
unsigned int __thiscall PgFont::GetTextLenInWidth(PgFont *this, char *pcText, unsigned int uiWidth);
void *__thiscall ChatBoard::_scalar_deleting_destructor_(ChatBoard *this, unsigned int);
void __thiscall ChatBoardFlex::ClearViewedLineInfo(ChatBoardFlex *this);
void __thiscall ChatBoardFlex::DecViewIndex(ChatBoardFlex *this);
ChatBoardFlex::Type __thiscall ChatBoardFlex::ParseUserChat(ChatBoardFlex *this, char **pcText);
bool __thiscall ChatBoardFlex::ViewLineDown(ChatBoardFlex *this);
bool __thiscall ChatBoardFlex::ViewLineMostDown(ChatBoardFlex *this);
void __thiscall ChatBoardFlex::SetGameFrameWork(ChatBoardFlex *this, PgFrameWork *pkFrameWork);
void __thiscall ChatBoardFlex::SetSystemWindow(ChatBoardFlex *this, bool b);
bool __thiscall ChatBoardFlex::IsNewLineColoring(ChatBoardFlex *this, char *pcText, char *pcColorText, char *pMainText);
char *__thiscall ChatBoardFlex::GetChatText(ChatBoardFlex *this, int iIndex);
void __thiscall ChatBoardFlex::SetMaxTextLine(ChatBoardFlex *this, int MaxLine);
float __thiscall ChatBoardFlex::GetSetTextTime(ChatBoardFlex *this, int TextLineNum);
bool __thiscall ChatBoardFlex::FindStrInBoard(ChatBoardFlex *this, int TextRowIndex);
ChatBoardFlex::eWisperTokenType __thiscall ChatBoardFlex::GetWhisperTokenType(ChatBoardFlex *this, const char *pcStr);
int __thiscall ChatBoardFlex::ColorCommandCheck(ChatBoardFlex *this, int nTextLen, char *pText);
int __thiscall ChatBoardFlex::FindItemLinkToken(ChatBoardFlex *this, char *pLinkText, int nCliclkIndex);
unsigned int __thiscall ChatBoardFlex::GetViewLineCount(ChatBoardFlex *this);
void __thiscall ChatBoardFlex::SetText(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, unsigned int uiTextLen);
void __thiscall ChatBoardFlex::SetText(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, unsigned int uiTextLen, char kChatID);
void __thiscall ChatBoardFlex::CreateTextGeometry(ChatBoardFlex *this);
void __thiscall ChatBoardFlex::SetDrawFormat(ChatBoardFlex *this, unsigned int uiDrawFormat);
void __thiscall ChatBoardFlex::RoarAdd(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText);
bool __thiscall ChatBoardFlex::IsColorTextLine(ChatBoardFlex *this, char *pcText, tagSIZE *kSize);
bool __thiscall ChatBoardFlex::IsMainTextColorText(ChatBoardFlex *this, char *pcText, tagSIZE *kSize);
int __thiscall ChatBoardFlex::FindClickTextIndex(ChatBoardFlex *this, char *pLinkText, int iX, int nLineCnt);
void __thiscall ChatBoardFlex::Add(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText);
void __thiscall ChatBoardFlex::Add(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, char kChatID);
bool __thiscall ChatBoardFlex::ViewLineUp(ChatBoardFlex *this);
bool __thiscall ChatBoardFlex::Create(ChatBoardFlex *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, bool bLButtonEnable, PgWin *pkParent);
bool __thiscall ChatBoardFlex::IsMouseOverNameText(ChatBoardFlex *this);
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText);
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, char kChatID);
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, char *pcText);
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, char *pcText, char kChatID);
void __thiscall ChatBoardFlex::AddGMUserChat(ChatBoardFlex *this, char *pcText);
void __thiscall ChatBoardFlex::UpdateMeWin(ChatBoardFlex *this, float fCurTime);
int __thiscall loc_5E705E(ChatBoardFlex *this, float fCurTime); // weak
bool __thiscall ChatBoardFlex::FindClickItemLink(ChatBoardFlex *this, char *pcharName, int iX, int nLineIndex);
void __thiscall ChatBoardFlex::EraseWhisperToken(ChatBoardFlex *this, char *pcStr);
void __thiscall ChatBoardFlex::DirectMessage(ChatBoardFlex *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall ChatBoardFlex::DeleteItemLinkInfo(ChatBoardFlex *this);
void __thiscall ChatBoardFlex::AddItemLinkInfo(ChatBoardFlex *this, ChatBoardFlex::Type eType, SHINE_ITEM_STRUCT *pItem);
void __thiscall ChatBoardFlex::_ChatBoardFlex(ChatBoardFlex *this);
void __thiscall ChatBoardFlex::ChatBoardFlex(ChatBoardFlex *this);
ChatBoardFlex *__cdecl ChatBoardFlex::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, bool bLButtonEnable, PgWin *pkParent);
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Wherenode);
SHINE_ITEM_STRUCT *__thiscall std::allocator<SHINE_ITEM_STRUCT>::allocate(std::allocator<SHINE_ITEM_STRUCT> *this, unsigned int _Count);
SHINE_ITEM_STRUCT *__cdecl std::_Uninit_move<SHINE_ITEM_STRUCT___SHINE_ITEM_STRUCT___std::allocator<SHINE_ITEM_STRUCT>_SHINE_ITEM_STRUCT>(SHINE_ITEM_STRUCT *_First, SHINE_ITEM_STRUCT *_Last, SHINE_ITEM_STRUCT *_Dest, std::allocator<SHINE_ITEM_STRUCT> *_Al, SHINE_ITEM_STRUCT *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
SHINE_ITEM_STRUCT *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>_SHINE_ITEM_STRUCT___std::allocator<SHINE_ITEM_STRUCT>>(std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _First, std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Last, SHINE_ITEM_STRUCT *_Dest, std::allocator<SHINE_ITEM_STRUCT> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::find(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *result, const int *_Keyval);
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::reserve(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, unsigned int _Count);
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right);
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Reserve(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, unsigned int _Count);
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::push_back(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, SHINE_ITEM_STRUCT *_Val);
void __thiscall std::pair<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>::_pair<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>(std::pair<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *this);
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Insert(...);
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(...);
void __thiscall std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Rootnode);
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Linsert(...);
std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Buynode<std::pair<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>(std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::pair<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *_Val);
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(...);
void __thiscall std::map<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>>::_map<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>>(std::map<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > > > *this);
void *__thiscall ChatBoardFlex::_vector_deleting_destructor_(ChatBoardFlex *this, unsigned int);
void __thiscall ChatDisplayWin::OnUp(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::OnDown(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::OnMostDown(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::AddNormalChat(ChatDisplayWin *this, char *pcFormat, char kChatID);
void __thiscall ChatDisplayWin::AddOtherNormalChat(ChatDisplayWin *this, char *pcFormat, char kChatID);
void __thiscall ChatDisplayWin::AddNormalChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddOtherNormalChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddGMNormalChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddGMOtherNormalChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddGMShoutChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddGMWhisperChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddShoutChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddWhisperChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddPartyChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddGuildChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddOtherPartyChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddOtherGuildChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddGuildAcademyChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddOtherGuildAcademyChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddRaidChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddOtherRaidChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddSystemChat(ChatDisplayWin *this, const char *pcFormat);
void __thiscall ChatDisplayWin::AddAuthorChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::AddBattleChat(ChatDisplayWin *this, char *pcFormat);
void __thiscall ChatDisplayWin::GetSize(ChatDisplayWin *this, unsigned int *ruiWidth, unsigned int *ruiHeight);
void __thiscall ChatDisplayWin::SetSize(ChatDisplayWin *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall ChatDisplayWin::SetDefaultSize(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::OnChatCommand(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::_ChatDisplayWin(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::OnReport(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::OnTab(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::ChatStart(ChatDisplayWin *this, const char *szText);
bool __thiscall ChatDisplayWin::IsDuringEdit(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::OnEditEnd(ChatDisplayWin *this, unsigned int wParam, int lParam);
unsigned int __thiscall ChatDisplayWin::GetOption(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::SetOption(ChatDisplayWin *this, unsigned int uiOpt);
void __thiscall ChatDisplayWin::AddOption(ChatDisplayWin *this, unsigned int uiOpt);
void __thiscall ChatDisplayWin::RemoveOption(ChatDisplayWin *this, unsigned int uiOpt);
char *__thiscall ChatDisplayWin::GetCurrentChatText(ChatDisplayWin *this);
bool __thiscall ChatDisplayWin::IsAutoHideOptionSetted(ChatDisplayWin *this);
char __thiscall ChatDisplayWin::GetCursorStateOnPanel(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::ChatDisplayWin(ChatDisplayWin *this);
void __thiscall ChatDisplayWin::OnActive(ChatDisplayWin *this, unsigned int uiIndex);
void __thiscall ChatDisplayWin::UpdateMeWin(ChatDisplayWin *this, float fCurTime);
int __stdcall loc_5EB12C(float fSin); // weak
int __stdcall loc_5EB298(float fSin); // weak
void __cdecl MoveChildrenWin(PgWin *pkWin, int x, int y);
void __thiscall ChatDisplayWin::SetChatMode(ChatDisplayWin *this, unsigned int uiChatMode);
bool __thiscall ChatDisplayWin::Create(ChatDisplayWin *this, PgFrameWork *pkFrameWork);
void __thiscall ChatDisplayWin::OnCommand(ChatDisplayWin *this, unsigned int wParam, int lParam);
void __thiscall ChatDisplayWin::DirectMessage(ChatDisplayWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
ChatDisplayWin *__cdecl ChatDisplayWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall SysMsgDisplayWin::_vector_deleting_destructor_(SysMsgDisplayWin *this, unsigned int);
void __thiscall ChatDisplayWin2::OnUp(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnDown(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnMostDown(ChatDisplayWin2 *this);
bool __thiscall ChatDisplayWin2::IsOnCandList(ChatDisplayWin2 *this);
// bool __usercall IsAllSpace_0<al>(char *pcSrc<ecx>);
void __thiscall ChatDisplayWin2::AddSystemChat(ChatDisplayWin2 *this, const char *pcFormat);
void __thiscall ChatDisplayWin2::AddAuthorChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::GetSize(ChatDisplayWin2 *this, unsigned int *ruiWidth, unsigned int *ruiHeight);
void __thiscall ChatDisplayWin2::SetSize(ChatDisplayWin2 *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall ChatDisplayWin2::SetDefaultSize(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnChatCommand(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnWhisperHotKeyTab(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnPartyHotKeyTab(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnGuildHotKeyTab(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnNormalHotKeyTab(ChatDisplayWin2 *this);
bool __thiscall ChatDisplayWin2::IsChatStart(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::SetChatNameEditText(ChatDisplayWin2 *this, const char *sName);
void __thiscall ChatDisplayWin2::SetWhisperEditFocus(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnGuildAcademyHotKeyTab(ChatDisplayWin2 *this);
char *__thiscall ChatDisplayWin2::GetCharName(ChatDisplayWin2 *this, char *pcRetCharName, char *pcChatText);
bool __thiscall ChatDisplayWin2::IsSameCharName(ChatDisplayWin2 *this, char *pcCharName, char *pcStr2);
bool __thiscall ChatDisplayWin2::DoesSpamFilterWinOpen(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::MoveSpamFilterWindow(ChatDisplayWin2 *this, int fX, int fY);
bool __thiscall ChatDisplayWin2::ProcessDrop(ChatDisplayWin2 *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall ChatDisplayWin2::InsertText(ChatDisplayWin2 *this, char *pResultText, char *pCurText, char *pInserText, int nInsertPos);
void __thiscall ChatDisplayWin2::OnChatBlockBtn(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnReport(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnTab(ChatDisplayWin2 *this);
bool __thiscall ChatDisplayWin2::IsDuringEdit(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::AddGMNormalChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddGMOtherNormalChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddGMShoutChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddGMWhisperChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddShoutChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddOtherShoutChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddWhisperChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddPartyChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddOtherPartyChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddRaidChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddOtherRaidChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddRaidNoticeChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddGuildChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddOtherGuildChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddGuildAcademyChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddOtherGuildAcademyChat(ChatDisplayWin2 *this, char *pcFormat);
unsigned int __thiscall ChatDisplayWin2::GetOption(ChatDisplayWin2 *this, unsigned int uiChatMode);
void __thiscall ChatDisplayWin2::SetOption(ChatDisplayWin2 *this, unsigned int uiOpt, unsigned int uiChatMode);
void __thiscall ChatDisplayWin2::AddOption(ChatDisplayWin2 *this, unsigned int uiOpt);
void __thiscall ChatDisplayWin2::RemoveOption(ChatDisplayWin2 *this, unsigned int uiOpt);
char *__thiscall ChatDisplayWin2::GetCurrentChatText(ChatDisplayWin2 *this);
bool __thiscall ChatDisplayWin2::IsAutoHideOptionSetted(ChatDisplayWin2 *this);
char __thiscall ChatDisplayWin2::GetCursorStateOnPanel(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::AddRoarChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::ProcessMeInput(ChatDisplayWin2 *this, bool *bHit);
bool __thiscall ChatDisplayWin2::IsSpamFilterOnBoard(ChatDisplayWin2 *this, int iChatBDIndex);
bool __thiscall ChatDisplayWin2::SpamFilterPass(ChatDisplayWin2 *this, int iChatBDIndex, char *pcNewStr);
void __thiscall ChatDisplayWin2::OpenSpamFilterWin(ChatDisplayWin2 *this, bool b);
void __thiscall ChatDisplayWin2::SetSpamFilteredTextShow(ChatDisplayWin2 *this, bool b);
void __thiscall ChatDisplayWin2::SetSpamBlockRate(ChatDisplayWin2 *this, float fRate);
void __thiscall ChatDisplayWin2::SetEditFocus(ChatDisplayWin2 *this, const bool b);
bool __thiscall ChatDisplayWin2::IsItemLinkInfo(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::AddChatBoardFlexIItemLink(ChatDisplayWin2 *this, ChatBoardFlex::Type eType, SHINE_ITEM_STRUCT *pItem);
void __thiscall ChatDisplayWin2::ChatStart(ChatDisplayWin2 *this, const char *szText);
void __thiscall ChatDisplayWin2::AddNormalChat(ChatDisplayWin2 *this, char *pcFormat);
void __thiscall ChatDisplayWin2::AddNormalChat(ChatDisplayWin2 *this, char *pcFormat, char kChatID);
void __thiscall ChatDisplayWin2::AddOtherNormalChat(ChatDisplayWin2 *this, char *pcFormat, char kChatID);
void __thiscall ChatDisplayWin2::AddOtherNormalChat(ChatDisplayWin2 *this, char *pcFormat);
void __cdecl MoveChildrenWin2(PgWin *pkWin, int x, int y);
void __thiscall ChatDisplayWin2::SetChatMode(ChatDisplayWin2 *this, unsigned int uiChatMode);
void __thiscall ChatDisplayWin2::OnWhisperTab(ChatDisplayWin2 *this, bool bChatStart);
void __thiscall ChatDisplayWin2::OnWhisperTabToTarget(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::OnWhisperTabToTarget(ChatDisplayWin2 *this, char *pcName);
int __thiscall ChatDisplayWin2::PositionCarretItemLink(ChatDisplayWin2 *this);
bool __thiscall ChatDisplayWin2::Create(ChatDisplayWin2 *this, PgFrameWork *pkFrameWork);
void __thiscall ChatDisplayWin2::OnCommand(ChatDisplayWin2 *this, unsigned int wParam, int lParam);
void __thiscall ChatDisplayWin2::DirectMessage(ChatDisplayWin2 *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ChatDisplayWin2::ChatDisplayWin2(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::_ChatDisplayWin2(ChatDisplayWin2 *this);
ChatDisplayWin2 *__cdecl ChatDisplayWin2::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall ChatDisplayWin2::AddChatLinkItemInfo(ChatDisplayWin2 *this, char *pcChatText);
void __thiscall ChatDisplayWin2::ClearLinkItemList(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::DeleteItemLink(ChatDisplayWin2 *this, bool bIsDeleteKey, bool bIsBackSpaceKey);
void __thiscall ChatDisplayWin2::OnEditEnd(ChatDisplayWin2 *this, unsigned int wParam, int lParam);
void __thiscall ChatDisplayWin2::SetItemChatLink(ChatDisplayWin2 *this, char *pLinkItemText, SHINE_ITEM_STRUCT *rItemStruct);
void __thiscall ChatDisplayWin2::ItemLinkKeyDownCheck(ChatDisplayWin2 *this);
void __thiscall ChatDisplayWin2::UpdateMeWin(ChatDisplayWin2 *this, float fCurTime);
int __thiscall loc_5F5438(ChatDisplayWin2 *this, int dy); // weak
int __thiscall loc_5F55A0(ChatDisplayWin2 *this, int dy); // weak
std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *__thiscall ChatDisplayWin2::GetLinkItemList(ChatDisplayWin2 *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *result);
float __thiscall ChatDisplayWin2::GetSpamBlockRate(ChatDisplayWin2 *this);
void *__thiscall ChatDisplayWin2::_vector_deleting_destructor_(ChatDisplayWin2 *this, unsigned int);
void __thiscall CLCS::CLCS(CLCS *this);
void __thiscall CLCS::_CLCS(CLCS *this);
bool __thiscall CLCS::Init(CLCS *this, int nMaxStringLen);
float __thiscall CLCS::GetCompDoubtPercentA(CLCS *this);
float __thiscall CLCS::GetCompDoubtPercentB(CLCS *this);
void __thiscall CLCS::printLCS(CLCS *this, int i, int j, unsigned __int16 *pWordStr);
bool __thiscall CLCS::CharToMultyByte(CLCS *this, unsigned __int16 *pWordStr, int *pWordStrLen, char *pCharStr);
float __thiscall CLCS::GetCompDoubtPercentLower(CLCS *this);
bool __thiscall CLCS::LCSExecute(CLCS *this, char *pCompStrA, char *pCompStrB);
void __thiscall CLCS::PrintSubString(CLCS *this);
void __thiscall KingdomQuestWin::OnSortByTitle(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnSortByUsercnt(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnSortByStarttime(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnSortBYState(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::JoinResult(KingdomQuestWin *this, unsigned int Handle, bool bResult);
void __thiscall KingdomQuestWin::RemoveAllKQuestInfo(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::DeleteKQuestInfo(KingdomQuestWin *this, unsigned int Handle);
PROTO_KQ_INFO_CLIENT *__thiscall KingdomQuestWin::GetQuestInfo(KingdomQuestWin *this, unsigned int Handle);
// tm *__usercall localtime_0<eax>(const int *_Time<eax>);
// int __usercall time<eax>(int *_Time<eax>);
void __thiscall KingdomQuestWin::SetView(KingdomQuestWin *this, bool bView);
void __thiscall KingdomQuestWin::OnHelpLink(KingdomQuestWin *this);
bool __thiscall KingdomQuestWin::IsStarted(KingdomQuestWin *this);
unsigned int __thiscall KingdomQuestWin::GetJoinQuestHandle(KingdomQuestWin *this);
void __thiscall KingdomQuestPlayerList::KingdomQuestPlayerList(KingdomQuestPlayerList *this);
void __thiscall KingdomQuestPlayerList::_KingdomQuestPlayerList(KingdomQuestPlayerList *this);
void __thiscall KingdomQuestPlayerList::OnClose(KingdomQuestPlayerList *this);
void __thiscall KingdomQuestPlayerList::OnSort(KingdomQuestPlayerList *this, KingdomQuestPlayerList::eSortType eType);
void __thiscall KingdomQuestPlayerList::ReSetList(KingdomQuestPlayerList *this);
void __thiscall KingdomQuestPlayerList::OnRClick(KingdomQuestPlayerList *this);
bool __thiscall KingdomQuestPlayerList::IsPlayerName(KingdomQuestPlayerList *this, const char *pcName);
void __thiscall KingdomQuestTeamList::KingdomQuestTeamList(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::_KingdomQuestTeamList(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::OnClose(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::OnSort(KingdomQuestTeamList *this, KingdomQuestTeamList::eSortType eType);
void __thiscall KingdomQuestTeamList::OnSelect(KingdomQuestTeamList *this, unsigned int uiTeamType);
void __thiscall KingdomQuestTeamList::SetSelectedTeam(KingdomQuestTeamList *this, char kKQTeamInfo);
void __thiscall KingdomQuestTeamList::ReSetList(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::OnRClick(KingdomQuestTeamList *this, SlideListWin *pkSlideListWin);
void __thiscall KingdomQuestTeamList::OnRClickRed(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::OnRClickBlue(KingdomQuestTeamList *this);
bool __thiscall KingdomQuestTeamList::IsPlayerName(KingdomQuestTeamList *this, const char *pcName);
void __thiscall KingdomQuestWin::_KingdomQuestWin(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnSlideBarContent(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnSlideBarTime(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnWinClose(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnOK(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnCancel(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::SetServerTime(KingdomQuestWin *this, int *pkKQ_Time);
void __thiscall KingdomQuestWin::CheckButtonEnableSetting(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::SetTimer(KingdomQuestWin *this, bool bTimer);
void __thiscall KingdomQuestPlayerList::OnSlide(KingdomQuestPlayerList *this);
void __thiscall KingdomQuestPlayerList::OnReflash(KingdomQuestPlayerList *this);
void __thiscall KingdomQuestPlayerList::SetTimer(KingdomQuestPlayerList *this, bool bTimer);
void __thiscall KingdomQuestTeamList::OnSlide(KingdomQuestTeamList *this, SlideBar *pkSlideBar, SlideListWin *pkSlideListWin);
void __thiscall KingdomQuestTeamList::OnSlideBlue(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::OnSlideRed(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::OnReflash(KingdomQuestTeamList *this);
void __thiscall KingdomQuestTeamList::SetTimer(KingdomQuestTeamList *this, bool bTimer);
void __thiscall KingdomQuestWin::KingdomQuestWin(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::UpdateKQTime(KingdomQuestWin *this);
const char *__thiscall KingdomQuestWin::GetKQState(KingdomQuestWin *this, int nState);
void __thiscall KingdomQuestPlayerList::OnCommand(KingdomQuestPlayerList *this, unsigned int wParam, int lParam);
void __thiscall KingdomQuestPlayerList::UpdateList(KingdomQuestPlayerList *this);
void __thiscall KingdomQuestTeamList::OnCommand(KingdomQuestTeamList *this, unsigned int wParam, int lParam);
void __thiscall KingdomQuestTeamList::UpdateList(KingdomQuestTeamList *this);
void __thiscall KingdomQuestWin::UpdateMyList(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::UpdateAllList(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OpenSideWin(KingdomQuestWin *this, unsigned int uiTeamType);
void __thiscall KingdomQuestWin::OnPlayerList(KingdomQuestWin *this);
void __thiscall KingdomQuestPlayerList::AddElement(KingdomQuestPlayerList *this, KQ_JOIN_CHAR_INFO *pkCharInfo);
void __thiscall KingdomQuestTeamList::AddElement(KingdomQuestTeamList *this, KQ_JOIN_CHAR_INFO *pkCharInfo);
void __thiscall KingdomQuestTeamList::SetElement(KingdomQuestTeamList *this, PROTO_NC_KQ_TEAM_SELECT_CMD *pkTeamSelectInfo);
void __thiscall KingdomQuestWin::AddKQuest(KingdomQuestWin *this, PROTO_NC_KQ_LIST_ADD_ACK *pkAddAck);
void __thiscall KingdomQuestWin::UpdateListState(KingdomQuestWin *this, PROTO_NC_KQ_LIST_UPDATE_ACK *pkUpdateAck);
void __thiscall KingdomQuestWin::OnMyList(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnAllList(KingdomQuestWin *this);
KingdomQuestWin *__cdecl KingdomQuestWin::CreateWin(PgFrameWork *pkFrameWork);
KingdomQuestPlayerList *__cdecl KingdomQuestPlayerList::CreateWin(NiPointer<NiNode> spNode, PgWin *pkParent);
KingdomQuestTeamList *__cdecl KingdomQuestTeamList::CreateWin(NiPointer<NiNode> spNode, PgWin *pkParent);
void __thiscall KingdomQuestWin::UpdateTimer(KingdomQuestWin *this, float fTime);
void __thiscall KingdomQuestPlayerList::UpdateTimer(KingdomQuestPlayerList *this, float fTime);
void __thiscall KingdomQuestTeamList::UpdateTimer(KingdomQuestTeamList *this, float fTime);
void __thiscall KingdomQuestWin::UpdateContentView(KingdomQuestWin *this, int nIndex);
void __thiscall KingdomQuestWin::UpdateMeWin(KingdomQuestWin *this, float fCurTime);
void __thiscall KingdomQuestWin::UpdateContentView(KingdomQuestWin *this, unsigned int kQuestHandle);
void __thiscall KingdomQuestPlayerList::UpdateMeWin(KingdomQuestPlayerList *this, float fCurTime);
void __thiscall KingdomQuestTeamList::UpdateMeWin(KingdomQuestTeamList *this, float fCurTime);
void __thiscall KingdomQuestWin::OnListClick(KingdomQuestWin *this, int nIndex);
void __thiscall KingdomQuestWin::SetKQuestStatus(KingdomQuestWin *this, PROTO_NC_KQ_STATUS_ACK *pkInfo);
void __thiscall KingdomQuestWin::OnShowWin(KingdomQuestWin *this);
void __thiscall KingdomQuestWin::OnCommand(KingdomQuestWin *this, unsigned int wParam, int lParam);
bool __thiscall KingdomQuestWin::Create(KingdomQuestWin *this, PgFrameWork *pkFrameWork);
bool __thiscall KingdomQuestPlayerList::Create(KingdomQuestPlayerList *this, NiPointer<NiNode> spNode, PgWin *pkParent);
bool __thiscall KingdomQuestTeamList::Create(KingdomQuestTeamList *this, NiPointer<NiNode> spNode, PgWin *pkParent);
void __thiscall KingdomQuestWin::KQ_Joiner::_KQ_Joiner(KingdomQuestWin::KQ_Joiner *this);
void *__thiscall KingdomQuestPlayerList::_scalar_deleting_destructor_(KingdomQuestPlayerList *this, unsigned int);
void *__thiscall KingdomQuestTeamList::_vector_deleting_destructor_(KingdomQuestTeamList *this, unsigned int);
KQTeam *__cdecl KQTeamTable::GetByID(const unsigned __int16 iID);
void *__thiscall KingdomQuestWin::_vector_deleting_destructor_(KingdomQuestWin *this, unsigned int);
char __cdecl CharClass::GetClassIDByLocalName(char *pcLocalName);
void __thiscall KQuestTimeWin::KQuestTimeWin(KQuestTimeWin *this);
void __thiscall KQuestTimeWin::_KQuestTimeWin(KQuestTimeWin *this);
void __thiscall KQuestTimeWin::SetRestLife(KQuestTimeWin *this, int iLife);
void __thiscall KQuestTimeWin::ResetTime(KQuestTimeWin *this, unsigned int second);
bool __thiscall KQuestTimeWin::Create(KQuestTimeWin *this, PgFrameWork *pkFrameWork);
void __thiscall KQuestTimeWin::UpdateMeWin(KQuestTimeWin *this, float fCurTime);
void __thiscall KQuestTimeWin::SetRequiredKillMobNums(KQuestTimeWin *this, int iNums);
KQuestTimeWin *__cdecl KQuestTimeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall KQuestTimeWin::_vector_deleting_destructor_(KQuestTimeWin *this, unsigned int);
char *__cdecl NpcDlgScript::ActionToken();
char *__cdecl NpcDlgScript::TypeToken();
char *__cdecl NpcDlgScript::BtnToken();
char *__cdecl NpcDlgScript::ScriptToken();
char *__cdecl NpcDlgScript::TextToken();
char *__cdecl NpcDlgScript::GetText(CTextDataMem *rtd, INode *pkNode);
char *__cdecl NpcDlgScript::GetAction(CTextDataMem *rtd, INode *pkNode);
void __thiscall FlexDlgBtn::FlexDlgBtn(FlexDlgBtn *this);
void __thiscall FlexDlgBtn::_FlexDlgBtn(FlexDlgBtn *this);
void __thiscall FlexDlgBtn::SetBtnWidth(FlexDlgBtn *this, int iWidth);
void __thiscall FlexDlgBtn::OnChangeButShow(FlexDlgBtn *this, PgWinBut::ButShow eShow);
void __thiscall TextBtn::TextBtn(TextBtn *this);
void __thiscall TextBtn::_TextBtn(TextBtn *this);
void __thiscall TextBtn::OnChangeButShow(TextBtn *this, PgWinBut::ButShow eShow);
void __thiscall AutoSizingDialogWin::AutoSizingDialogWin(AutoSizingDialogWin *this);
void __thiscall AutoSizingDialogWin::_AutoSizingDialogWin(AutoSizingDialogWin *this);
void __thiscall AutoSizingDialogWin::SetVerticalGap(AutoSizingDialogWin *this, int iGap);
void __thiscall SpeechBubbleDlgWin::SpeechBubbleDlgWin(SpeechBubbleDlgWin *this);
void __thiscall SpeechBubbleDlgWin::_SpeechBubbleDlgWin(SpeechBubbleDlgWin *this);
void __thiscall SpeechBubbleDlgWin::ShowOutLineBtn(SpeechBubbleDlgWin *this, bool b);
void __thiscall SpeechBubbleDlgWin::SetShowOutLineBtn(SpeechBubbleDlgWin *this, bool b);
int __thiscall SpeechBubbleDlgWin::GetBtnCount(SpeechBubbleDlgWin *this);
void __thiscall NpcDialogWin::ShowOutLineBtn(NpcDialogWin *this, float fCurTime);
bool __cdecl DlgQuestListWin::QuestNameList::SortType(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw);
bool __cdecl DlgQuestListWin::QuestNameList::SortRepeatable(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw);
bool __cdecl DlgQuestListWin::QuestNameList::SortStartItem(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw);
bool __cdecl DlgQuestListWin::QuestNameList::SortStartQuest(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw);
bool __cdecl DlgQuestListWin::QuestNameList::SortEvent(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw);
bool __cdecl DlgQuestListWin::QuestNameList::SortLevel(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw);
bool __cdecl DlgQuestListWin::QuestNameList::SortStatus(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw);
void __thiscall DlgQuestListWin::DlgQuestListWin(DlgQuestListWin *this);
void __thiscall DlgQuestListWin::_DlgQuestListWin(DlgQuestListWin *this);
void __thiscall DlgQuestListWin::OnQuestListLClick(DlgQuestListWin *this, int nIndex);
void __thiscall DlgQuestListWin::UpdateMeWin(DlgQuestListWin *this, float fCurTime);
void __thiscall DlgQuestListWin::OnHelpLink(DlgQuestListWin *this);
void __cdecl NpcBaseTextParsing(char *pcText, char *acResult, int iMaxStrLen);
bool __thiscall TextBtn::Create(TextBtn *this, int iXPos, int iYPos, PgSprData *pkDeco, PgFont *pkFont, PgWin *pkParent, unsigned int uiCmdMsg);
unsigned int __thiscall AutoSizingDialogWin::CalculateApproximateHeight(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, unsigned int *ruiWidth);
void __thiscall AutoSizingDialogWin::AddTextGeomtry(AutoSizingDialogWin *this, unsigned int uiWidth, unsigned int *ruiYPos, char *acText);
void __thiscall AutoSizingDialogWin::Approximation(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, unsigned int *ruiWidth, unsigned int *ruiHeight);
void __thiscall SpeechBubbleDlgWin::ProcessMeInput(SpeechBubbleDlgWin *this, bool *bHit);
void __thiscall SpeechBubbleDlgWin::DirectMessage(SpeechBubbleDlgWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall NpcDialogWin::NpcDialogWin(NpcDialogWin *this);
void __thiscall NpcDialogWin::_NpcDialogWin(NpcDialogWin *this);
void __thiscall NpcDialogWin::SetCloseTime(NpcDialogWin *this, float fCloseTime);
void __thiscall NpcDialogWin::CheckCloseTimer(NpcDialogWin *this, unsigned int wDlgID);
void __thiscall NpcDialogWin::OnClose(NpcDialogWin *this);
void __thiscall NpcDialogWin::CloseDialog(NpcDialogWin *this);
void __thiscall DlgQuestListWin::UpDateListSideBar(DlgQuestListWin *this);
bool __thiscall FlexDlgBtn::Create(FlexDlgBtn *this, int iXPos, int iYPos, PgSprData *pkLeft, PgSprData *pkRight, PgSprData *pkMiddle, PgWin *pkParent, unsigned int uiCmdMsg);
unsigned int __thiscall FlexDlgBtn::EstimateBtnWidth(FlexDlgBtn *this, char *pcText);
void __thiscall FlexDlgBtn::SetBtnText(FlexDlgBtn *this, char *pcText, bool bAutoScale);
void __thiscall TextBtn::SetBtnText(TextBtn *this, char *pcText);
unsigned int __thiscall TextBtn::EstimateBtnWidth(TextBtn *this, char *pcText);
void __thiscall AutoSizingDialogWin::BuildVirtualRectOfNormalDlg(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, char *pcText, unsigned int *ruiMaxWidth, unsigned int *ruiMaxHeight);
void __thiscall AutoSizingDialogWin::BuildVirtualRectOfQuestDlg(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, unsigned __int16 questID, unsigned int wQuestDlgID, unsigned int *ruiMaxWidth, unsigned int *ruiMaxHeight);
bool __thiscall SpeechBubbleDlgWin::AddBtn(SpeechBubbleDlgWin *this, const char *pcText, bool bAutoScale, NiExtraData *pkType, NiExtraData *pkAction);
void __thiscall SpeechBubbleDlgWin::ParseBaseDlgAndCreateBtn(SpeechBubbleDlgWin *this, unsigned __int16 mobid, char *acBaseScript, int iMaxLen, unsigned int uiSeqID);
char *__cdecl GetQuestStateText(PLAYER_QUEST_STATUS eStatus);
void __thiscall AutoSizingDialogWin::OnCommand(AutoSizingDialogWin *this, unsigned int wParam, int lParam);
void __thiscall NpcDialogWin::SetNpcFaceCut(NpcDialogWin *this, char *pcFn);
void __thiscall NpcDialogWin::DirectMessage(NpcDialogWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall NpcDialogWin::UpdateMeWin(NpcDialogWin *this, float fCurTime);
void __thiscall DlgQuestListWin::OnSlideBarList(DlgQuestListWin *this);
void __thiscall AutoSizingDialogWin::BuildNormalDialog(AutoSizingDialogWin *this, char *pcText, unsigned int uiMinWidth, AutoSizingDialogWin::VirtualRect *pkBaseRect);
int __thiscall loc_600000(AutoSizingDialogWin *this, int pcText, int uiMinWidth, int uiYPos); // weak
void __thiscall SpeechBubbleDlgWin::BuildDialog(SpeechBubbleDlgWin *this, unsigned __int16 mobid, unsigned int uiMinWidth, unsigned int uiSeqID);
void __thiscall SpeechBubbleDlgWin::BuildScriptDialog(SpeechBubbleDlgWin *this, unsigned __int16 mobid, char *pcScript, unsigned int uiMinWidth, bool bCloseBtn);
void __thiscall NpcDialogWin::OpenNpcNormalDialog(NpcDialogWin *this, unsigned __int16 mobid, unsigned int uiSeqID);
void __thiscall NpcDialogWin::OpenNpcScriptDialog(NpcDialogWin *this, unsigned __int16 mobid, char *pcScript, bool bCloseBtn);
void __thiscall NpcDialogWin::OpenNpcScriptDialog(NpcDialogWin *this, char *pcFn, char *pcScript, bool bCloseBtn);
void __thiscall DlgQuestListWin::QuestNameList::QuestNameList(DlgQuestListWin::QuestNameList *this);
void __thiscall DlgQuestListWin::OnCommand(DlgQuestListWin *this, unsigned int wParam, int lParam);
FlexDlgBtn *__cdecl FlexDlgBtn::CreateWin(int iXPos, int iYPos, PgSprData *pkLeft, PgSprData *pkRight, PgSprData *pkMiddle, PgWin *pkParent, unsigned int uiCmdMsg);
TextBtn *__cdecl TextBtn::CreateWin(int iXPos, int iYPos, PgSprData *pkDeco, PgFont *pkFont, PgWin *pkParent, unsigned int uiCmdMsg);
AutoSizingDialogWin *__cdecl AutoSizingDialogWin::CreateWin(unsigned int uiLeft, unsigned int uiTop, unsigned int uiActionBtnTag, PgFont *pkFont, PgWin *pkParent);
bool __thiscall AutoSizingDialogWin::Create(AutoSizingDialogWin *this, unsigned int uiLeft, unsigned int uiTop, unsigned int uiActionBtnTag, PgFont *pkFont, PgWin *pkParent);
SpeechBubbleDlgWin *__cdecl SpeechBubbleDlgWin::CreateWin(PgFrameWork *pkFrameWork);
NpcDialogWin *__cdecl NpcDialogWin::CreateWin(PgFrameWork *pkFrameWork, char *pcName, bool ShowWinAtAbsoluteFar);
bool __thiscall NpcDialogWin::Create(NpcDialogWin *this, PgFrameWork *pkFrameWork, char *pcName, bool ShowWinAtAbsoluteFar);
DlgQuestListWin *__cdecl DlgQuestListWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall SpeechBubbleDlgWin::Create(SpeechBubbleDlgWin *this, PgFrameWork *pkFrameWork);
int __thiscall loc_602000(PgWin *this, int pkFrameWork); // weak
void __thiscall SpeechBubbleDlgWin::BuildScriptDialog(SpeechBubbleDlgWin *this, char *pcScript, NiTList<ScriptBtn *> *pkScriptBtnList, unsigned int uiMinWidth);
void __thiscall NpcDialogWin::OpenNpcScriptDialog(NpcDialogWin *this, char *pcFn, char *pcScript, NiTList<ScriptBtn *> *pkScriptBtnList);
void __thiscall AutoSizingDialogWin::OnClose(AutoSizingDialogWin *this);
void __thiscall AutoSizingDialogWin::ParseAndCreateQuestDlg(AutoSizingDialogWin *this, unsigned __int16 questID, unsigned int wQuestDlgID, unsigned int uiWidth);
void __thiscall AutoSizingDialogWin::BuildQuestDialog(AutoSizingDialogWin *this, unsigned int wQuestDlgID, unsigned int uiMinWidth, unsigned int dwQuestID, char byScriptCmd, AutoSizingDialogWin::VirtualRect *pkBaseRect);
void __thiscall SpeechBubbleDlgWin::BuildQuestDialog(SpeechBubbleDlgWin *this, unsigned __int16 mobid, unsigned int wID, unsigned int dwQuestID, char byScriptCmd, unsigned int uiMinWidth, bool bShowMenu);
void __thiscall NpcDialogWin::OpenNpcQuestDialog(NpcDialogWin *this, unsigned __int16 mobid, unsigned int wID, unsigned int dwQuestID, char byScriptCmd, bool bIsShowMenu);
void __thiscall NpcDialogWin::OpenUserQuestDialog(NpcDialogWin *this, unsigned int wID, unsigned int dwQuestID, char byScriptCmd);
bool __thiscall DlgQuestListWin::Create(DlgQuestListWin *this, PgFrameWork *pkFrameWork);
void __thiscall DlgQuestListWin::SetQuestList(DlgQuestListWin *this);
void __thiscall SpeechBubbleDlgWin::OnCommand(SpeechBubbleDlgWin *this, unsigned int wParam, int lParam);
void __thiscall NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>(NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *this);
void *__thiscall NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vector_deleting_destructor_(NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *this, unsigned int);
void *__thiscall FlexDlgBtn::_scalar_deleting_destructor_(FlexDlgBtn *this, unsigned int);
void *__thiscall TextBtn::_vector_deleting_destructor_(TextBtn *this, unsigned int);
void *__thiscall AutoSizingDialogWin::_vector_deleting_destructor_(AutoSizingDialogWin *this, unsigned int);
void *__thiscall SpeechBubbleDlgWin::_vector_deleting_destructor_(SpeechBubbleDlgWin *this, unsigned int);
void *__thiscall DlgQuestListWin::_scalar_deleting_destructor_(DlgQuestListWin *this, unsigned int);
NpcDialogData *__cdecl NpcDialogDataTable::GetNpcDialogDataByMobIDX(char *pcMobIDX);
char *__cdecl NpcDialogDataTable::GetFaceCutFileNameByMobID(unsigned __int16 MobID);
void __thiscall NiTList<AutoSizingDialogWin::VirtualRect__>::_NiTList<AutoSizingDialogWin::VirtualRect__>(NiTList<AutoSizingDialogWin::VirtualRect *> *this);
void *__thiscall NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *this, unsigned int);
void *__thiscall NpcDialogWin::_vector_deleting_destructor_(NpcDialogWin *this, unsigned int);
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Splice_same(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > _Where, std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *_Right, std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > _First, std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > _Last, unsigned int _Count);
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall ScriptBtn::GetText(ScriptBtn *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
void __thiscall DlgQuestListWin::QuestNameList::QuestNameList(DlgQuestListWin::QuestNameList *this, DlgQuestListWin::QuestNameList *__that);
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::clear(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this);
std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *__thiscall std::_List_val<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Buynode(std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *_Next, std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *_Prev, DlgQuestListWin::QuestNameList *_Val);
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this);
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::merge<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *_Right, bool (__cdecl *_Pred)(DlgQuestListWin::QuestNameList *, DlgQuestListWin::QuestNameList *));
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, bool (__cdecl *_Pred)(DlgQuestListWin::QuestNameList *, DlgQuestListWin::QuestNameList *));
void __thiscall NpcQuestWin::NpcQuestWin(NpcQuestWin *this);
void __thiscall NpcQuestWin::_NpcQuestWin(NpcQuestWin *this);
void __thiscall NpcQuestWin::OnCmdClose(NpcQuestWin *this);
void __thiscall NpcQuestWin::OnHelpLink(NpcQuestWin *this);
void __thiscall NpcQuestWin::OnCommand(NpcQuestWin *this, unsigned int wParam, int lParam);
bool __thiscall NpcQuestWin::Create(NpcQuestWin *this, NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork);
NpcQuestWin *__cdecl NpcQuestWin::CreateWin(NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork);
void *__thiscall NpcQuestWin::_vector_deleting_destructor_(NpcQuestWin *this, unsigned int);
void __thiscall QuestFinishWin::UpdateMeWin(QuestFinishWin *this, float fCurTime);
bool __thiscall QuestFinishWin::Create(QuestFinishWin *this, PgFrameWork *pkFrameWork);
void __thiscall QuestFinishWin::ApplyTexture2Portrait(QuestFinishWin *this, NiTexture *pkTex, bool bUserCharFace);
void __thiscall QuestFinishWin::ChangeFace(QuestFinishWin *this, unsigned __int16 iEndQuestNpcID);
void __thiscall QuestFinishWin::QuestFinishWin(QuestFinishWin *this);
void __thiscall QuestFinishWin::_QuestFinishWin(QuestFinishWin *this);
QuestFinishWin *__cdecl QuestFinishWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall QuestFinishWin::OnQuestCheckClick(QuestFinishWin *this);
void __thiscall QuestFinishWin::OnCommand(QuestFinishWin *this, unsigned int wParam, int lParam);
void __thiscall QuestFinishWin::UpdateQuest(QuestFinishWin *this);
void *__thiscall QuestFinishWin::_scalar_deleting_destructor_(QuestFinishWin *this, unsigned int);
void __thiscall QuestNewsWin::OnInvLClick(QuestNewsWin *this, unsigned int uiInvIndex);
void __thiscall QuestNewsWin::OnClose(QuestNewsWin *this);
void __thiscall QuestNewsWin::OnCommand(QuestNewsWin *this, unsigned int wParam, int lParam);
int __thiscall QuestNewsWin::CheckNewQuest(QuestNewsWin *this, char nPlayerLevel);
void __thiscall QuestNewsWin::OnShowWin(QuestNewsWin *this);
void __thiscall QuestNewsWin::CreateFlexMsgBox(QuestNewsWin *this);
void __thiscall QuestNewsWin::DirectMessage(QuestNewsWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall QuestNewsWin::UpdateMeWin(QuestNewsWin *this, float fCurTime);
int __thiscall QuestNewsWin::QuestPlayer_LevelChange(QuestNewsWin *this, char nPlayerLevel);
void __thiscall QuestNewsWin::_QuestNewsWin(QuestNewsWin *this);
void __thiscall QuestNewsWin::QuestNewsWin(QuestNewsWin *this);
QuestNewsWin *__cdecl QuestNewsWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall QuestNewsWin::Create(QuestNewsWin *this, PgFrameWork *pkFrameWork);
std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Min(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Pnode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *this);
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Erase(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Rootnode);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > _Where);
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > _Last);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::find(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, const unsigned __int16 *_Keyval);
void __thiscall std::set<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>>::_set<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>>(std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > *this);
void *__thiscall QuestNewsWin::_vector_deleting_destructor_(QuestNewsWin *this, unsigned int);
float __cdecl NiACos(float fValue);
double __cdecl loc_607DB3(float fValue); // weak
float __cdecl NiSymmetricRandom();
NiPoint3 *__thiscall NiPoint3::Cross(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt);
NiControllerSequence *__thiscall NiActorManager::GetSequence(NiActorManager *this, unsigned int eSequenceID);
void __thiscall QuestPigeonEffect::SetStartPos(QuestPigeonEffect *this);
int loc_6081D0(); // weak
void __thiscall QuestPigeonEffect::QuestPigeonEffect(QuestPigeonEffect *this, NiActorManager *pkActor, Char *pkTarget);
void __thiscall QuestPigeonEffect::_QuestPigeonEffect(QuestPigeonEffect *this);
void __thiscall QuestPigeonEffect::UpdateAEEff(QuestPigeonEffect *this, float fTime);
void __thiscall QuestPigeonEffect::CatchAEEff(QuestPigeonEffect *this, bool bForceLoading);
void __thiscall QuestPigeonEffect::Update(QuestPigeonEffect *this, float fTime);
int __thiscall loc_608A99(QuestPigeonEffect *this, float fTime); // weak
void __thiscall QuestPigeonEffect::Start(QuestPigeonEffect *this, float fTime);
void __thiscall Effect::SetDefaultEffect(Effect *this, NiNode *pkNode);
NiRTTI *__thiscall QuestPigeonEffect::GetRTTI(QuestPigeonEffect *this);
bool __thiscall QuestPigeonEffect::IsEnd(QuestPigeonEffect *this, float fTime);
void *__thiscall QuestPigeonEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
NiPoint3 *__thiscall Effect::GetCtrl(NiIntersector *this);
NiPoint3 *__thiscall Effect::GetDir(Effect *this);
Effect *__thiscall Effect::Clone(Effect *this);
float __thiscall Effect::GetLifeTime(Effect *this);
void __thiscall Effect::SetLifeTime(Effect *this, float fLifeTime);
void __thiscall Effect::Stop(Effect *this);
void __thiscall Effect::DeleteEffectDestoryMessengerList(Effect *this);
void __thiscall Effect::SetShow(Effect *this, bool _bShow);
void __thiscall Effect::SetRootNode(Effect *this, NiNode *pkNode);
void __thiscall Effect::SetPos(Effect *this, NiPoint3 *kPos);
NiPoint3 *__thiscall Effect::GetPos(Effect *this);
NiPoint3 *__thiscall Effect::GetWorldPos(Effect *this);
void __thiscall Effect::SetRealDir(Effect *this, NiPoint3 *kDir);
void __thiscall Effect::SetDir(Effect *this, NiPoint3 *kDir);
void __thiscall Effect::CopyMember(Effect *this, Effect *pkEffect);
void __thiscall Effect::RegisterEffectMessenger(Effect *this, IEffectDestroyMessenger *pkMessenger);
void __thiscall Effect::SetDecalEffect(Effect *this, NiNode *pkNode);
void *__thiscall QuestPigeonEffect::_vector_deleting_destructor_(QuestPigeonEffect *this, unsigned int);
void __thiscall std::list<QuestPigeonEffect::EffectInfo_std::allocator<QuestPigeonEffect::EffectInfo>>::push_back(std::list<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> > *this, QuestPigeonEffect::EffectInfo *_Val);
void __thiscall QuestStartItemWin::QuestStartItemWin(QuestStartItemWin *this);
void __thiscall QuestStartItemWin::_QuestStartItemWin(QuestStartItemWin *this);
void __thiscall QuestStartItemWin::UpdateMeWin(QuestStartItemWin *this, float fCurTime);
void __thiscall QuestStartItemWin::SetRewardWin(QuestStartItemWin *this, RewardWin *pkWin);
void __thiscall QuestStartItemWin::OnShowWin(QuestStartItemWin *this);
void __thiscall QuestStartItemWin::OnHelpLink(QuestStartItemWin *this);
void __thiscall QuestStartItemWin::UpDateContentSideBar(QuestStartItemWin *this);
void __thiscall QuestStartItemWin::ResetViewPoint(QuestStartItemWin *this);
void __thiscall QuestStartItemWin::OnCommand(QuestStartItemWin *this, unsigned int wParam, int lParam);
void __thiscall QuestStartItemWin::SetQuestContentText(QuestStartItemWin *this, unsigned int hQuestID, const char *szText);
QuestStartItemWin *__cdecl QuestStartItemWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall QuestStartItemWin::SetQuestInfo(QuestStartItemWin *this, unsigned __int16 qID);
bool __thiscall QuestStartItemWin::Create(QuestStartItemWin *this, PgFrameWork *pkFrameWork);
void *__thiscall QuestStartItemWin::_scalar_deleting_destructor_(QuestStartItemWin *this, unsigned int);
void __thiscall CQuestWin2::ResetQuestStateIcon(CQuestWin2 *this);
void __thiscall CQuestWin2::SetRewardWin(CQuestWin2 *this, RewardWin *pkWin);
void __thiscall CQuestWin2::OnHelpLink(CQuestWin2 *this);
void __thiscall CQuestWin2::OnEpicQuestCompleteList(CQuestWin2 *this);
void __thiscall EpicQuestWin::UpdateMeWin(EpicQuestWin *this, float fCurTime);
void __thiscall EpicQuestWin::OnQuestAccept(EpicQuestWin *this);
void __thiscall EpicQuestWin::ResetQuestStateIcon(EpicQuestWin *this);
void __thiscall EpicQuestWin::OnHelpLink(EpicQuestWin *this);
void __thiscall AutoRunBut::AutoRunBut(AutoRunBut *this);
void __thiscall AutoRunBut::_AutoRunBut(AutoRunBut *this);
bool __thiscall AutoRunBut::Create(AutoRunBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
void __thiscall CQuestWin2::OnWinClose(CQuestWin2 *this);
void __thiscall CQuestWin2::DirectMessage(CQuestWin2 *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall CQuestWin2::OnFullMapOpen(CQuestWin2 *this);
void __thiscall CQuestWin2::UpdateLocationInfo(CQuestWin2 *this, unsigned __int16 Quest_ID);
void __thiscall CQuestWin2::ResetContentSlideBar(CQuestWin2 *this);
bool __thiscall CQuestWin2::RemoveAutoBlinkBut(CQuestWin2 *this, PgWinBut *But);
bool __thiscall CQuestWin2::UpdateBlinkButList(CQuestWin2 *this, float fCurTime);
void __thiscall EpicQuestWin::EpicQuestWin(EpicQuestWin *this);
void __thiscall EpicQuestWin::_EpicQuestWin(EpicQuestWin *this);
int __thiscall EpicQuestWin::TotalMaxLowLevelQuest(EpicQuestWin *this);
int __thiscall EpicQuestWin::TotalMaxEpicQuest(EpicQuestWin *this);
void __thiscall EpicQuestWin::UpDateContentSideBar(EpicQuestWin *this);
void __thiscall AutoRunBut::ProcessMeInput(AutoRunBut *this, bool *bHit);
void __thiscall CQuestWin2::OnAutoRunBtnClick(CQuestWin2 *this, unsigned __int16 *kID);
void __thiscall CQuestWin2::OnQuestListLClick(CQuestWin2 *this, int nIndex, bool bCheck);
bool __thiscall CQuestWin2::AddQuestListElement(CQuestWin2 *this, CQuestWin2::QData *rkQuest);
void __thiscall CQuestWin2::UpdateQuestStateIcon(CQuestWin2 *this);
void __thiscall CQuestWin2::SetQuestContentText(CQuestWin2 *this, unsigned int hQuestID, const char *szText);
void __thiscall CQuestWin2::UpDateContentSideBar(CQuestWin2 *this);
void __thiscall CQuestWin2::SetSelectedID(CQuestWin2 *this, int iSelectID);
void __thiscall EpicQuestWin::OnSlideBarContent(EpicQuestWin *this);
bool __thiscall EpicQuestWin::AddQuestListElement(EpicQuestWin *this, EpicQuestWin::QData *rkQuest);
void __thiscall EpicQuestWin::SetQuestContentText(EpicQuestWin *this, unsigned int hQuestID, const char *szText);
void __thiscall EpicQuestWin::UpdateQuestStateIcon(EpicQuestWin *this);
void __thiscall CQuestWin2::UpDateListSideBar(CQuestWin2 *this);
bool __thiscall CQuestWin2::AddAutoBlinkBut(CQuestWin2 *this, PgWinBut *But);
void __thiscall EpicQuestWin::UpDateListSideBar(EpicQuestWin *this);
void __thiscall CQuestWin2::OnSlideBarList(CQuestWin2 *this);
void __thiscall EpicQuestWin::OnSlideBarList(EpicQuestWin *this);
void __thiscall CQuestWin2::OnGiveUp(CQuestWin2 *this);
EpicQuestWin *__cdecl EpicQuestWin::CreateWin(PgFrameWork *pkFrameWork);
AutoRunBut *__cdecl AutoRunBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
void __thiscall CQuestWin2::_CQuestWin2(CQuestWin2 *this);
void __thiscall CQuestWin2::CQuestWin2(CQuestWin2 *this);
CQuestWin2 *__cdecl CQuestWin2::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall CQuestWin2::UpDateViewQuesContent(CQuestWin2 *this, unsigned __int16 qID);
void __thiscall EpicQuestWin::UpDateViewQuesContent(EpicQuestWin *this, unsigned __int16 qID);
void __thiscall CQuestWin2::UpDateViewQuestList(CQuestWin2 *this, bool bUseCurLevel, int iLevel);
void __thiscall CQuestWin2::UpdateQuestData(CQuestWin2 *this);
void __thiscall EpicQuestWin::UpDateViewQuestList(EpicQuestWin *this);
void __thiscall CQuestWin2::UpdateMeWin(CQuestWin2 *this, float fCurTime);
bool __thiscall CQuestWin2::Create(CQuestWin2 *this, PgFrameWork *pkFrameWork);
void __thiscall CQuestWin2::OnTAB1(CQuestWin2 *this);
void __thiscall CQuestWin2::OnSortByLevel(CQuestWin2 *this, bool bDown);
void __thiscall CQuestWin2::OnSortByName(CQuestWin2 *this);
void __thiscall CQuestWin2::OnSortByState(CQuestWin2 *this);
void __thiscall CQuestWin2::OnShowWin(CQuestWin2 *this);
void __thiscall CQuestWin2::LevelChange(CQuestWin2 *this, char nPlayerLevel);
bool __thiscall EpicQuestWin::Create(EpicQuestWin *this, PgFrameWork *pkFrameWork);
void __thiscall EpicQuestWin::UpdateQuestData(EpicQuestWin *this);
void __thiscall EpicQuestWin::OnQuestListLClick(EpicQuestWin *this, int nIndex);
void __thiscall CQuestWin2::OnTAB2(CQuestWin2 *this);
void __thiscall CQuestWin2::SelectTab(CQuestWin2 *this, int TabNum);
void __thiscall EpicQuestWin::OnShowWin(EpicQuestWin *this);
void __thiscall EpicQuestWin::OnCommand(EpicQuestWin *this, unsigned int wParam, int lParam);
void __thiscall CQuestWin2::OnCommand(CQuestWin2 *this, unsigned int wParam, int lParam);
std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Min(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Pnode);
std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Max(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Pnode);
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Pnode);
void __thiscall NiTArray<PgWinBut__>::_NiTArray<PgWinBut__>(NiTArray<PgWinBut *> *this);
unsigned int __thiscall NiTArray<PgWinBut__>::Remove(NiTArray<PgWinBut *> *this, PgWinBut *const *element);
void *__thiscall NiTArray<PgWinBut__>::_vector_deleting_destructor_(NiTArray<PgWinBut *> *this, unsigned int);
void *__thiscall AutoRunBut::_vector_deleting_destructor_(AutoRunBut *this, unsigned int);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >,std::_Iterator_base0> *this);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *this);
void __thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Lrotate(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Rrotate(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Wherenode);
void *__thiscall EpicQuestWin::_scalar_deleting_destructor_(EpicQuestWin *this, unsigned int);
void __thiscall CQuestWin2::QData::_QData(CQuestWin2::QData *this);
void __thiscall EpicQuestWin::QData::_QData(EpicQuestWin::QData *this);
void __thiscall std::pair<int_CQuestWin2::QData>::_pair<int_CQuestWin2::QData>(std::pair<int,CQuestWin2::QData> *this);
void __thiscall std::pair<int_EpicQuestWin::QData>::_pair<int_EpicQuestWin::QData>(std::pair<int,EpicQuestWin::QData> *this);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,st *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Eqrange(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,st *result, const int *_Keyval);
void __thiscall CQuestWin2::QData::QData(CQuestWin2::QData *this, CQuestWin2::QData *__that);
void __thiscall EpicQuestWin::QData::QData(EpicQuestWin::QData *this, unsigned int _dwQuestID, int _nType, const char *_szTitle, unsigned int _dwData, int _r, int _g, int _b);
void __thiscall CQuestWin2::QData::QData(CQuestWin2::QData *this, unsigned int _dwQuestID, int _nType, const char *_szTitle, const char *_szState, unsigned int _dwData, int _r, int _g, int _b, PLAYER_QUEST_STATUS _Status, bool _bFilterType);
void *__thiscall CQuestWin2::_vector_deleting_destructor_(CQuestWin2 *this, unsigned int);
void __thiscall std::pair<int_const_EpicQuestWin::QData>::pair<int_const_EpicQuestWin::QData>(std::pair<int const ,EpicQuestWin::QData> *this, std::pair<int,EpicQuestWin::QData> *_Right);
void __thiscall std::pair<int_EpicQuestWin::QData>::pair<int_EpicQuestWin::QData>(std::pair<int,EpicQuestWin::QData> *this, char *_Val1, EpicQuestWin::QData *_Val2);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Insert(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Newnode);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Insert(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *_Newnode);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > _Where);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > _Where);
void __thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Erase(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Rootnode);
void __thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Erase(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *_Rootnode);
std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Buynode<std::pair<int_CQuestWin2::QData>>(std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::pair<int,CQuestWin2::QData> *_Val);
std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Buynode<std::pair<int_EpicQuestWin::QData>>(std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::pair<int,EpicQuestWin::QData> *_Val);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > _Last);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > _Last);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::insert<std::pair<int_CQuestWin2::QData>>(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,bool> *result, std::pair<int,CQuestWin2::QData> *_Val);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::insert<std::pair<int_EpicQuestWin::QData>>(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >,bool> *result, std::pair<int,EpicQuestWin::QData> *_Val);
void __thiscall std::multimap<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>>::_multimap<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>>(std::multimap<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> > > *this);
void __thiscall std::multimap<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>>::_multimap<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>>(std::multimap<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> > > *this);
void __thiscall MonsterCardInventoryWin::OnQuit(MonsterCardInventoryWin *this);
void __thiscall MonsterCardInventoryWin::ResetPage(MonsterCardInventoryWin *this);
unsigned int __thiscall MonsterCardInventoryWin::GetSelectPageFirstIndex(MonsterCardInventoryWin *this);
void __thiscall MonsterCardInventoryWin::UpdateMeWin(MonsterCardInventoryWin *this, float fCurTime);
void __thiscall MonsterCardInventoryWin::SetCardInfo(MonsterCardInventoryWin *this, unsigned __int16 test);
void __thiscall MonsterCardInventoryWin::ViewItemUpdate(MonsterCardInventoryWin *this, int nTab, int nAttributeTab);
void __thiscall MonsterCardInventoryWin::SelectTab(MonsterCardInventoryWin *this, int nTab);
void __thiscall MonsterCardInventoryWin::SelectAttributeTab(MonsterCardInventoryWin *this, int nAttributeTab);
void __thiscall MonsterCardInventoryWin::AddItem(MonsterCardInventoryWin *this, unsigned __int16 nitemID);
void __thiscall MonsterCardInventoryWin::_MonsterCardInventoryWin(MonsterCardInventoryWin *this);
void __thiscall MonsterCardInventoryWin::OnShowWin(MonsterCardInventoryWin *this);
void __thiscall MonsterCardInventoryWin::MonsterCardInventoryWin(MonsterCardInventoryWin *this);
MonsterCardInventoryWin *__cdecl MonsterCardInventoryWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall MonsterCardInventoryWin::ActiveListViewEnable(MonsterCardInventoryWin *this, bool bEnable);
void __thiscall MonsterCardInventoryWin::SelectIconItem(MonsterCardInventoryWin *this, int nIndex);
void __thiscall MonsterCardInventoryWin::OnCommand(MonsterCardInventoryWin *this, unsigned int wParam, int lParam);
bool __thiscall MonsterCardInventoryWin::Create(MonsterCardInventoryWin *this, PgFrameWork *pkFrameWork);
void __thiscall std::basic_iostream<char_std::char_traits<char>>::_basic_iostream<char_std::char_traits<char>>(std::basic_iostream<char,std::char_traits<char> > *this);
void *__thiscall std::basic_iostream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_iostream<char,std::char_traits<char> > *this, unsigned int);
void __thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_basic_stringstream<char_std::char_traits<char>_std::allocator<char>>(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this);
void __thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbase_destructor(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this);
void *__thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_scalar_deleting_destructor_(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int);
std::basic_ostream<char,std::char_traits<char> > *__thiscall std::basic_ostream<char_std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char> > *this, unsigned __int16 _Val);
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_short_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_unsigned_short>>_0>>::_Buynode<std::pair<unsigned_int_unsigned_short>>(std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > *this, std::pair<unsigned int,unsigned short> *_Val);
void *__thiscall MonsterCardInventoryWin::_vector_deleting_destructor_(MonsterCardInventoryWin *this, unsigned int);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::str(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
__int64 __cdecl Bank::GetMoney();
void __cdecl Bank::SetMoney(__int64 i64Money);
char __cdecl Bank::GetMaxPage();
unsigned int __cdecl Bank::GetInvIdxLotIsNotMax(Item *pkItem);
void __cdecl Bank::RemoveExtraInv();
void __cdecl Bank::Clear(char byTargetPage);
bool __cdecl Bank::IsEmpty(unsigned int uiIndex);
Item *__cdecl Bank::Get(unsigned int uiIndex);
void __cdecl Bank::Add(Item *pkItem, unsigned int uiIndex);
bool __cdecl Bank::IsPageDataExist(char byTargetPage);
bool __cdecl Bank::SetContents(PROTO_NC_MENU_OPENSTORAGE_CMD *pkProto);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *_Node, bool _Leftish);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > *result, const char *_Keyval);
std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Buynode<std::pair<unsigned_char_const_NiPointer<Item>__>>(std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *this, std::pair<unsigned char const ,NiPointer<Item> *> *_Val);
bool __thiscall ICharDeadEvent::MatchProcessingHandle(ICharDeadEvent *this, unsigned __int16 hTarget);
void __thiscall CharDeadEvent_DropItem::OnDead(CharDeadEvent_DropItem *this);
bool __thiscall CharDeadEvent_DropItem::MatchProcessingHandle(CharDeadEvent_DropItem *this, unsigned __int16 hTarget);
bool __thiscall ICharDeadEvent::Update(ICharDeadEvent *this);
void __cdecl ICharDeadEvent::TerminateAll();
void __thiscall ICharDeadEvent::ICharDeadEvent(ICharDeadEvent *this, PgFrameWork *pkFrameWork);
void __cdecl ICharDeadEvent::UpdateAll();
void __thiscall CharDeadEvent_LevelUp::CharDeadEvent_LevelUp(CharDeadEvent_LevelUp *this, PgFrameWork *pkFrameWork, PROTO_NC_BAT_LEVELUP_CMD *rkProto);
void __thiscall CharDeadEvent_LevelUp::OnDead(CharDeadEvent_LevelUp *this);
void __thiscall CharDeadEvent_DropItem::CharDeadEvent_DropItem(CharDeadEvent_DropItem *this, PgFrameWork *pkFrameWork, PROTO_NC_BRIEFINFO_DROPEDITEM_CMD *rkProto);
void __thiscall CharDeadEvent_ExpGain::CharDeadEvent_ExpGain(CharDeadEvent_ExpGain *this, PgFrameWork *pkFrameWork, PROTO_NC_BAT_EXPGAIN_CMD *rkProto);
void __thiscall CharDeadEvent_ExpGain::OnDead(CharDeadEvent_ExpGain *this);
void __thiscall CharDeadEvent_SomeoneLevelUp::CharDeadEvent_SomeoneLevelUp(CharDeadEvent_SomeoneLevelUp *this, PgFrameWork *pkFrameWork, PROTO_NC_BAT_SUMEONELEVELUP_CMD *rkProto);
void __thiscall CharDeadEvent_SomeoneLevelUp::OnDead(CharDeadEvent_SomeoneLevelUp *this);
void __thiscall CharDeadEvent_InformWhoKilledMe::OnDead(CharDeadEvent_InformWhoKilledMe *this);
bool __cdecl ICharDeadEvent::CheckEventExistOnQueue(DeadEventType eEventType, unsigned __int16 hTarget, bool bDelete);
void __thiscall CharDeadEvent_InformWhoKilledMe::CharDeadEvent_InformWhoKilledMe(CharDeadEvent_InformWhoKilledMe *this, PgFrameWork *pkFrameWork, unsigned __int16 myHandle, unsigned __int16 attacker);
void __thiscall NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>(NiTListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *> *this);
void *__thiscall NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_scalar_deleting_destructor_(NiTListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *> *this, unsigned int);
void *__thiscall NiTList<ICharDeadEvent__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *> *this, unsigned int);
void __thiscall GuildTournamentStorage::GuildTournamentStorage(GuildTournamentStorage *this);
unsigned int __cdecl GuildTournamentStorage::GetInvIdxLotIsNotMax(Item *pkItem);
__int64 __cdecl GuildTournamentStorage::GetMoney();
void __cdecl GuildTournamentStorage::SetMoney(__int64 i64Money);
unsigned __int64 __cdecl GuildTournamentStorage::GetToken();
void __cdecl GuildTournamentStorage::Clear();
bool __cdecl GuildTournamentStorage::IsEmpty(unsigned int uiIndex);
Item *__cdecl GuildTournamentStorage::Get(unsigned int uiIndex);
void __cdecl GuildTournamentStorage::Add(Item *pkItem, unsigned int uiIndex);
void __cdecl GuildTournamentStorage::Remove(unsigned int uiIndex);
unsigned int __cdecl GuildTournamentStorage::GetEmpty();
bool __cdecl GuildTournamentStorage::SetContents(PROTO_NC_GUILD_STORAGEOPEN_ACK *pkProto);
void __thiscall MagicField::OnEffectDestory(MagicField *this, Effect *pkEffect);
void __cdecl MagicField::DeleteMagicField(unsigned __int16 handle);
void __thiscall MagicField::_MagicField(MagicField *this);
void __thiscall MagicField::MagicField(MagicField *this, PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *rkProto);
void __cdecl MagicField::AddMagicField(PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *rkProto, NiPoint3 *kDir, bool bSetDir);
void __thiscall NiTListBase<DFALL<MagicField__>_MagicField__>::_NiTListBase<DFALL<MagicField__>_MagicField__>(NiTListBase<DFALL<MagicField *>,MagicField *> *this);
void *__thiscall NiTListBase<DFALL<MagicField__>_MagicField__>::_scalar_deleting_destructor_(NiTListBase<DFALL<MagicField *>,MagicField *> *this, unsigned int);
void __thiscall NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>(NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *> *this);
void *__thiscall NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vector_deleting_destructor_(NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *> *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<MagicField__>_MagicField__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<MagicField *>,MagicField *> *this, unsigned int);
void __thiscall IEffectDestroyMessenger::_IEffectDestroyMessenger(IEffectDestroyMessenger *this);
void *__thiscall NiTPointerListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vector_deleting_destructor_(NiTList<IEffectDestroyMessenger *> *this, unsigned int);
void *__thiscall MagicField::_vector_deleting_destructor_(MagicField *this, unsigned int);
void __thiscall MapNavigator::MapNavigator(MapNavigator *this);
void __thiscall MapNavigator::_MapNavigator(MapNavigator *this);
LONG __cdecl MapNavigator::Create();
void __cdecl MapNavigator::Terminate();
bool __thiscall MapNavigator::Init(MapNavigator *this);
void __thiscall MapNavigator::Arrive(MapNavigator *this, NiPoint3 *kPos);
bool __thiscall MapNavigator::FindPathAway(MapNavigator *this, NiPoint3 *kCurPos, NiPoint3 *kDest, char *pMapName, char *pDestMap, unsigned __int16 kMobID);
void __thiscall MapNavigator::OnIdle(MapNavigator *this, float fTime);
NiRTTI *__thiscall NiObject::GetRTTI(NiObject *this);
unsigned int __cdecl MapWayPointTab::GetTotal();
unsigned int __cdecl MapLinkPointTab::GetTotal();
void *__thiscall MapNavigator::_scalar_deleting_destructor_(MapNavigator *this, unsigned int);
int __cdecl Market::Clear();
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetEnchantItem(unsigned int uiIndex);
unsigned int __cdecl Market::GetTotalEnchantItem();
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetWeapontitleItem(unsigned int uiIndex);
unsigned int __cdecl Market::GetTotalWeapontitleItem();
unsigned int __cdecl Market::GetTotalWeapon();
unsigned int __cdecl Market::GetTotalArmor();
unsigned int __cdecl Market::GetTotalAcc();
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetWeaopn(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetArmor(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetAcc(unsigned int uiIndex);
unsigned int __cdecl Market::GetTotalRepurchase();
ItemRepurchase *__cdecl Market::GetRepurchase(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetFigActSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetCleActSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetArcActSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetMagActSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetFigPasSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetClePasSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetArcPasSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetMagPasSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetJokActSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetJokPasSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetSenActSkill(unsigned int uiIndex);
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetSenPasSkill(unsigned int uiIndex);
void __cdecl Market::SetWeapon(PROTO_NC_MENU_SHOPOPEN_CMD *pkProto);
void __cdecl Market::SetSkill(PROTO_NC_MENU_SHOPOPEN_CMD *pkProto);
void __cdecl Market::SetRepurchaseItem(PROTO_NC_ITEM_SELL_ITEM_LIST_CMD *pkItemData, char *pbyItemDataStartAddress);
void __cdecl Market::DeleteRepurchase(unsigned int uiIndex);
ItemRepurchase *__cdecl Market::AddRepurchase(PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *pkRepurItem);
unsigned int __cdecl Market::FindRepurchase(unsigned __int16 nHandle);
void __cdecl Market::SetSoulStone(PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD *pkProto);
PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *__cdecl Market::GetHPSoulStoneInfo();
PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *__cdecl Market::GetSPSoulStoneInfo();
unsigned int __cdecl Market::GetTotalFigPassiveSkill();
unsigned int __cdecl Market::GetTotalClePassiveSkill();
unsigned int __cdecl Market::GetTotalArcPassiveSkill();
unsigned int __cdecl Market::GetTotalMagPassiveSkill();
unsigned int __cdecl Market::GetTotalFigActiveSkill();
unsigned int __cdecl Market::GetTotalCleActiveSkill();
unsigned int __cdecl Market::GetTotalArcActiveSkill();
unsigned int __cdecl Market::GetTotalMagActiveSkill();
unsigned int __cdecl Market::GetTotalJokPassiveSkill();
unsigned int __cdecl Market::GetTotalJokActiveSkill();
unsigned int __cdecl Market::GetTotalSenPassiveSkill();
unsigned int __cdecl Market::GetTotalSenActiveSkill();
unsigned int __cdecl Market::GetTotalProdSkill();
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetProdSkill(unsigned int uiIndex);
NiTList<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *__cdecl ItemMarket::GetItemSellInfoList();
void __cdecl Market::SetWeapon(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto);
void __cdecl Market::SetItemEnchant(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto);
bool __cdecl Market::Add(unsigned __int16 kItemID);
void __cdecl ItemMarket::Clear();
void __cdecl ItemMarket::SetItem(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto);
void __cdecl Market::SetSkill(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto);
void __thiscall NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>(NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *this);
void *__thiscall NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_scalar_deleting_destructor_(NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *this, unsigned int);
void *__thiscall NiTList<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_scalar_deleting_destructor_(NiTList<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *this, unsigned int);
bool __thiscall SpStream::PushInt(SpStream *this, int iValue);
bool __thiscall SpStream::PushShort(SpStream *this, __int16 sValue);
bool __thiscall SpStream::PushByte(SpStream *this, char byValue);
int __thiscall SpStream::PopInt(SpStream *this);
__int16 __thiscall SpStream::PopShort(SpStream *this);
char __thiscall SpStream::PopByte(SpStream *this);
bool __thiscall SpStream::PushMem(SpStream *this, void *pbyMem, unsigned int uiSize);
bool __thiscall SpStream::PopMem(SpStream *this, void *pbyMem, unsigned int uiSize);
void __thiscall OptionManager::Clear(OptionManager *this);
bool __thiscall OptionManager::LoadOption(OptionManager *this, SpStream *rkStream);
void __thiscall OptionManager::SaveOption(OptionManager *this, SpStream *rkStream);
void __thiscall OptionManager::Register(OptionManager *this, IOptionBase *pkOptionBase);
unsigned int __thiscall ShortCut::CopyTypeToMemory(ShortCut *this, char *pucBuff);
unsigned int __cdecl ShortCut::LoadTypeToMemory(char *pucBuff, unsigned int *uiType);
bool __thiscall ShortCutInvPosItem::LoadFromPacket(ShortCutInvPosItem *this, SHORT_CUT_DATA *pkData);
unsigned int __thiscall ShortCutSkill::CopyToMemory(ShortCutSkill *this, char *pucBuff);
bool __thiscall ShortCutSkill::LoadFromPacket(ShortCutSkill *this, SHORT_CUT_DATA *pkData);
unsigned int __thiscall ShortCutSkill::LoadFromMemory(ShortCutSkill *this, char *pucBuff);
bool __thiscall ShortCutSkill::ConfirmInstance(ShortCutSkill *this);
unsigned int __thiscall ShortCutAction::CopyToMemory(ShortCutAction *this, char *pucBuff);
unsigned int __thiscall ShortCutAction::LoadFromMemory(ShortCutAction *this, char *pucBuff);
bool __thiscall ShortCutItem::LoadFromPacket(ShortCutItem *this, SHORT_CUT_DATA *pkData);
unsigned int __thiscall ShortCutItem::CopyToMemory(ShortCutItem *this, char *pucBuff);
unsigned int __thiscall ShortCutItem::LoadFromMemory(ShortCutItem *this, char *pucBuff);
void __thiscall ShortCutItem::SetItem(ShortCutItem *this, Item *pkItem);
void __thiscall ShortCutInvPosItem::ShortCutInvPosItem(ShortCutInvPosItem *this);
void __thiscall ShortCutInvPosItem::_ShortCutInvPosItem(ShortCutInvPosItem *this);
void __thiscall ShortCutSkill::ShortCutSkill(ShortCutSkill *this);
void __thiscall ShortCutSkill::_ShortCutSkill(ShortCutSkill *this);
void __thiscall ShortCutAction::ShortCutAction(ShortCutAction *this);
void __thiscall ShortCutAction::_ShortCutAction(ShortCutAction *this);
void __thiscall ShortCutSoulStone::ShortCutSoulStone(ShortCutSoulStone *this);
void __thiscall ShortCutSoulStone::_ShortCutSoulStone(ShortCutSoulStone *this);
ShortCut::ShortCutDataType __thiscall ShortCutAction::GetActionType(ShortCutAction *this);
void __thiscall ShortCutItem::ShortCutItem(ShortCutItem *this);
void __thiscall ShortCutItem::_ShortCutItem(ShortCutItem *this);
unsigned int __thiscall ShortCutInvPosItem::CopyToMemory(ShortCutInvPosItem *this, char *pucBuff);
unsigned int __thiscall ShortCutInvPosItem::LoadFromMemory(ShortCutInvPosItem *this, char *pucBuff);
bool __thiscall ShortCutAction::LoadFromPacket(ShortCutAction *this, SHORT_CUT_DATA *pkData);
bool __thiscall NiDX92DBufferData::Recreate(NiDX92DBufferData *this, IDirect3DDevice9 *pkD3DDevice9);
unsigned int __cdecl ActionViewTable::GetActionNum(ActionViewInfo *pkInfo);
void *__thiscall ShortCutItem::_scalar_deleting_destructor_(ShortCutItem *this, unsigned int);
bool __thiscall ShortCutMgr::Init(ShortCutMgr *this);
bool __thiscall ShortCutMgr::LoadFromNet(ShortCutMgr *this);
bool __thiscall ShortCutMgr::LoadOption(ShortCutMgr *this, SpStream *rkStream);
ShortCut *__thiscall ShortCutMgr::CreateShortCut(ShortCutMgr *this, ShortCut::Type eType);
bool __thiscall ShortCutMgr::ShortCutChanged(ShortCutMgr *this);
void __thiscall ShortCutMgr::SetShortCutChanged(ShortCutMgr *this, bool b);
bool __thiscall ShortCutMgr::ShortCutSizeChanged(ShortCutMgr *this);
void __thiscall ShortCutMgr::SetShortCutSizeChanged(ShortCutMgr *this, bool b);
bool __thiscall ShortCutMgr::SendOptToChange(ShortCutMgr *this);
void __thiscall ShortCutMgr::SetInvPosItem(ShortCutMgr *this, unsigned __int16 uiExchangePos, unsigned __int16 uiLocationPos, bool bOnlyLocation);
bool __thiscall ShortCutMgr::SyncShortCutAndActionWinKey(ShortCutMgr *this, int nViewTableIndex, int nWinIndex);
void __thiscall ShortCutMgr::Clear(ShortCutMgr *this);
void __thiscall ShortCutMgr::CheckContents(ShortCutMgr *this);
void __thiscall ShortCutMgr::Terminate(ShortCutMgr *this);
void __thiscall ShortCutMgr::_ShortCutMgr(ShortCutMgr *this);
void __thiscall ShortCutMgr::ShortCutMgr(ShortCutMgr *this);
void __thiscall ShortCutMgr::Update(ShortCutMgr *this, float fCurTime);
void __thiscall ShortCutMgr::ChangeIndex(ShortCutMgr *this, int Index);
bool __thiscall ShortCutMgr::InitShortCutFromInventory(ShortCutMgr *this);
bool __thiscall ShortCutMgr::LoadFromPacket(ShortCutMgr *this, SHORT_CUT_DATA *pkData);
unsigned int __cdecl UserTrade::GetMyInvIndex(unsigned int uiIndex);
void __cdecl UserTrade::LockOpp(bool b);
void __cdecl UserTrade::LockMy(bool b);
bool __cdecl UserTrade::GetLockOpp();
bool __cdecl UserTrade::GetLockMy();
void __cdecl UserTrade::AgreeOpp(bool b);
bool __cdecl UserTrade::GetAgreeOpp();
bool __cdecl UserTrade::IsProposing();
void __cdecl UserTrade::SetProposing(bool bPropose);
bool __cdecl UserTrade::IsTrading();
void __cdecl UserTrade::SetTrading(bool bTrading);
void __cdecl UserTrade::Clear();
Item *__cdecl UserTrade::GetOpp(unsigned int uiIndex);
Item *__cdecl UserTrade::GetMy(unsigned int uiIndex);
void __cdecl UserTrade::AddOpp(Item *pkItem, unsigned int uiIndex);
void __cdecl UserTrade::AddMy(Item *pkItem, unsigned int uiIndex, unsigned int uiInventoryIndex);
void __cdecl UserTrade::RemoveOpp(unsigned int uiIndex);
unsigned int __cdecl UserTrade::RemoveMy(unsigned int uiIndex);
unsigned int __cdecl UserTrade::GetEmptyMy();
int __thiscall CWayPoint::Init(CWayPoint *this, int nDotCnt, int nMapCnt, int nMaxCanUseGateCnt);
int __thiscall CWayPoint::ErrorCheck(CWayPoint *this);
int __thiscall CWayPoint::Get_LastError(CWayPoint *this);
void __thiscall CMinWeightSort::CMinWeightSort(CMinWeightSort *this);
void __thiscall CMinWeightSort::_CMinWeightSort(CMinWeightSort *this);
int __thiscall CMinWeightSort::Del_SameWeightDot(CMinWeightSort *this, MAP_DOT *pDot);
int __thiscall CMinWeightSort::Add_WeightDot(CMinWeightSort *this, MAP_DOT *pDot, int nFromDotNo, int nFromDotWeight, int nLinkWeight, int nSearchNo);
int __thiscall CMinWeightSort::Get_MinWeightDot(CMinWeightSort *this, MAP_DOT **pDot);
void __thiscall CMinWeightPath::CMinWeightPath(CMinWeightPath *this);
void __thiscall CMinWeightPath::_CMinWeightPath(CMinWeightPath *this);
int __thiscall CMinWeightPath::Init(CMinWeightPath *this);
int __thiscall CMinWeightPath::Add_PathDot(CMinWeightPath *this, MAP_DOT *pDot);
int __thiscall CMinWeightPath::Get_PathDot(CMinWeightPath *this, MAP_DOT **pDot);
void __thiscall CWayPoint::CWayPoint(CWayPoint *this);
void __thiscall CWayPoint::_CWayPoint(CWayPoint *this);
int __thiscall CWayPoint::Add_Map(CWayPoint *this, char *pMapName, int nMapID, WPMType nWPMType);
int __thiscall CWayPoint::Get_IsValid_Dot(CWayPoint *this, int nDotNo);
int __thiscall CWayPoint::Get_IsValid_MapName(CWayPoint *this, char *pMapName);
int __thiscall CWayPoint::Get_IsValid_MapID(CWayPoint *this, int nMapID);
int __thiscall CWayPoint::Get_Dot(CWayPoint *this, int nDotNo, MAP_DOT **pDot);
int __thiscall CWayPoint::Get_MapName(CWayPoint *this, int nMapID, char *pMapName);
int __thiscall CWayPoint::Get_MapID(CWayPoint *this, char *pMapName, int *pMapID);
int __thiscall CWayPoint::Get_MapType(CWayPoint *this, int nMapID, WPMType *pWPMType);
int __thiscall CWayPoint::Get_MapType(CWayPoint *this, char *pMapName, WPMType *pWPMType);
int __thiscall CWayPoint::Make_BFS_DotList(CWayPoint *this, int nStartDot, int nEndDot);
int __thiscall CWayPoint::Add_Dot(CWayPoint *this, int nMapID, int X, int Y, DOT_TYPE DotType);
int __thiscall CWayPoint::Add_Link(CWayPoint *this, int nLinkDot_1, int nLinkDot_2, LINK_TYPE LinkType, int nWeight);
int __thiscall CWayPoint::Get_BFS_NextDot(CWayPoint *this, int nStartDot, int nEndDot, MAP_DOT **pNextDot);
int __thiscall CWayPoint::Add_Dot(CWayPoint *this, char *pMapName, int X, int Y, DOT_TYPE DotType);
int __thiscall CWayPoint::Get_NearDot(CWayPoint *this, int nMapID, int X, int Y, MAP_DOT **pNearDot);
int __thiscall CWayPoint::Get_NearDot(CWayPoint *this, char *pMapName, int X, int Y, MAP_DOT **pNearDot);
void __cdecl CharScreenBoardBase::SetMaxDistance(float fMaxDistance);
void __cdecl CharScreenBoardBase::SetTransNear(float fNear);
void __cdecl CharScreenBoardBase::SetTransFar(float fFar);
void __thiscall CharScreenBoardBase::SetNameBDMove(CharScreenBoardBase *this, bool b);
unsigned __int16 __thiscall CharScreenBoardBase::GetCharHandle(CharScreenBoardBase *this);
NiAVObject *__thiscall CharScreenBoardUserChar::GetIconGeometry(CharScreenBoardUserChar *this);
void __thiscall CharScreenBoardUserChar::CreateNameIcon(CharScreenBoardUserChar *this, const char *pkFileName);
unsigned int __thiscall CharScreenBoardUserChar::GetNickNameColor(CharScreenBoardUserChar *this);
unsigned int __thiscall CharScreenBoardMiniHouse::GetNameColor(CharScreenBoardMiniHouse *this);
void __thiscall CharScreenBoardBase::CharScreenBoardBase(CharScreenBoardBase *this);
NiAVObject *__thiscall CharScreenBoardBase::GetGeometry(CharScreenBoardBase *this);
bool __thiscall CharScreenBoardBase::UpDatePostion(CharScreenBoardBase *this, NiPoint3 *rPos, NiCamera *pkWorldCamera);
GUILD_EMBLEM_INFO *__thiscall CharScreenBoardUserChar::MakeEmblemInfo(CharScreenBoardUserChar *this);
void __thiscall CharScreenBoardUserChar::SetAlpha(CharScreenBoardUserChar *this, float fAlpha);
unsigned int __thiscall CharScreenBoardUserChar::GetGuildColor(CharScreenBoardUserChar *this);
void __thiscall CharScreenBoardUserChar::CreateEmblemIcon(CharScreenBoardUserChar *this, tagSIZE BoardSize, GUILD_EMBLEM_INFO *pEmblemInfo);
void __thiscall CharScreenBoardDropItem::SetAlpha(CharScreenBoardDropItem *this, float fAlpha);
void __thiscall CharScreenBoardMiniHouse::SetAlpha(CharScreenBoardMiniHouse *this, float fAlpha);
bool __cdecl CharScreenBoardBase::IsInShowRange(NiPoint3 *kPos);
void __thiscall CharScreenBoardBase::SetAlphaByDistance(CharScreenBoardBase *this, NiPoint3 *rPos);
void __thiscall CharScreenBoardUserChar::Update(CharScreenBoardUserChar *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
bool __cdecl CharScreenBoardUserChar::IsVisible(unsigned __int16 kHandle);
void __thiscall CharScreenBoardDropItem::Update(CharScreenBoardDropItem *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
unsigned int __thiscall CharScreenBoardDropItem::GetNameColor(CharScreenBoardDropItem *this);
bool __cdecl CharScreenBoardDropItem::IsVisible(unsigned __int16 kHandle);
void __thiscall CharScreenBoardBase::_CharScreenBoardBase(CharScreenBoardBase *this);
void __thiscall CharScreenBoardUserChar::_CharScreenBoardUserChar(CharScreenBoardUserChar *this);
bool __thiscall CharScreenBoardUserChar::IsAlive(CharScreenBoardUserChar *this);
void __thiscall CharScreenBoardDropItem::_CharScreenBoardDropItem(CharScreenBoardDropItem *this);
bool __thiscall CharScreenBoardDropItem::IsAlive(CharScreenBoardDropItem *this);
void __thiscall CharScreenBoardMiniHouse::_CharScreenBoardMiniHouse(CharScreenBoardMiniHouse *this);
unsigned int __thiscall CharScreenBoardUserChar::GetNameColor(CharScreenBoardUserChar *this);
bool __thiscall CharScreenBoardUserChar::ColorCheckChange(CharScreenBoardUserChar *this);
void __thiscall CharScreenBoardMiniHouse::Update(CharScreenBoardMiniHouse *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
bool __cdecl CharScreenBoardMiniHouse::IsVisible(unsigned __int16 kHandle);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CharScreenBoardUserChar::MakeGuildName(CharScreenBoardUserChar *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CharScreenBoardUserChar::MakeCharName(CharScreenBoardUserChar *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
bool __thiscall CharScreenBoardDropItem::Init(CharScreenBoardDropItem *this, unsigned __int16 kHandle, ScreenBoardTexture *pBoardData);
bool __thiscall CharScreenBoardMiniHouse::Init(CharScreenBoardMiniHouse *this, unsigned __int16 kHandle, ScreenBoardTexture *pBoardData);
bool __thiscall CharScreenBoardMiniHouse::IsAlive(CharScreenBoardMiniHouse *this);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CharScreenBoardUserChar::MakeCharTitle(CharScreenBoardUserChar *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
bool __thiscall CharScreenBoardUserChar::CheckNameChange(CharScreenBoardUserChar *this);
bool __thiscall CharScreenBoardUserChar::Init(CharScreenBoardUserChar *this, unsigned __int16 kHandle, ScreenBoardTexture *pBoardTexture);
float __thiscall World::GetDistanceToCamera(World *this, NiPoint3 *kPos);
void *__thiscall CharScreenBoardUserChar::_vector_deleting_destructor_(CharScreenBoardUserChar *this, unsigned int);
void *__thiscall CharScreenBoardDropItem::_scalar_deleting_destructor_(CharScreenBoardDropItem *this, unsigned int);
void *__thiscall CharScreenBoardMiniHouse::_vector_deleting_destructor_(CharScreenBoardMiniHouse *this, unsigned int);
void *__thiscall CharScreenBoardBase::_scalar_deleting_destructor_(CharScreenBoardBase *this, unsigned int);
void __thiscall GuildBD::ReAlloc(GuildBD *this, unsigned int uiSize);
bool __thiscall GuildBD::IsAlive(GuildBD *this, float fTime);
void __thiscall GuildBD::EndDraw(GuildBD *this);
void __thiscall GuildBD::DrawTextA(GuildBD *this);
void __thiscall GuildBD::SetChar(GuildBD *this, unsigned __int16 kHandle);
void __thiscall GuildBD::SetGuildBDMove(GuildBD *this, bool b);
// void __usercall CalculateStrlenInWidth(char *pcText<eax>, HDC__ *hDC, unsigned int dwMaxWidth, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>);
bool __thiscall GuildBD::BeginDraw(GuildBD *this);
void __thiscall GuildBD::CalculateLine(GuildBD *this);
void __thiscall GuildBD::CopyTexture(GuildBD *this);
bool __cdecl GuildBD::IsInShowRange(NiPoint3 *kPos);
void __thiscall GuildBD::_GuildBD(GuildBD *this);
void __thiscall GuildBD::SetSpeech(GuildBD *this, char *pcSpeech, GuildBD::EnemyStatus eEnemyStatus);
void __thiscall GuildBD::Update(GuildBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void __thiscall GuildBD::CreateGeometry(GuildBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void __thiscall GuildBD::GuildBD(GuildBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void __thiscall GuildBD::SetAlpha(GuildBD *this, float fAlpha);
void *__thiscall GuildBD::_vector_deleting_destructor_(GuildBD *this, unsigned int);
void __thiscall IConBD::Create(IConBD *this, const char *pkFileName);
NiScreenElements *__thiscall IConBD::GetGeometry(IConBD *this);
void __thiscall IConBD::IConBD(IConBD *this);
void __thiscall IConBD::_IConBD(IConBD *this);
void __thiscall IConBD::Update(IConBD *this, NiPoint3 WorldPos, float ftime);
void *__thiscall IConBD::_scalar_deleting_destructor_(IConBD *this, unsigned int);
bool __thiscall NameBD::IsAlive(NameBD *this, float fTime);
void __thiscall NameBD::EndDraw(NameBD *this);
NiScreenElements *__thiscall NameBD::GetIconGeometry(NameBD *this);
void __thiscall NameBD::CreateNameIcon(NameBD *this, const char *pkFileName);
void __thiscall NameBD::SetNameBDMove(NameBD *this, bool b);
// void __usercall CalculateStrlenInWidth_0(char *pcText<eax>, HDC__ *hDC, unsigned int dwMaxWidth, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>);
void __thiscall NameBD::_NameBD(NameBD *this);
bool __thiscall NameBD::BeginDraw(NameBD *this);
void __thiscall NameBD::CalculateLine(NameBD *this);
void __thiscall NameBD::DrawTextA(NameBD *this);
void __thiscall NameBD::CopyTexture(NameBD *this);
bool __cdecl NameBD::IsInShowRange(NiPoint3 *kPos);
void __thiscall NameBD::SetSpeech(NameBD *this, char *pcSpeech);
void __thiscall NameBD::SetDropItem(NameBD *this, unsigned __int16 kHandle);
void __thiscall NameBD::UpdateDropItem(NameBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void __thiscall NameBD::CreateGeometry(NameBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void __thiscall NameBD::NameBD(NameBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void __thiscall NameBD::Update(NameBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void __thiscall NameBD::SetChar(NameBD *this, unsigned __int16 kHandle);
void __thiscall NameBD::UpdateMiniHause(NameBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void *__thiscall NameBD::_scalar_deleting_destructor_(NameBD *this, unsigned int);
// void __usercall DrawVLine(unsigned int *puiDest, unsigned int uiPitch<esi>, unsigned int uiX, unsigned int uiY1<edx>, unsigned int uiY2<eax>, unsigned int uiColor<edi>);
// void __usercall FillSpr(unsigned int *puiDest, unsigned int uiPitch<eax>, unsigned int uiX, unsigned int uiY, char *pbySrc, unsigned int uiSrcWidth<ebx>, unsigned int uiSrcHeight<edx>, unsigned int uiSolidColor, unsigned int uiTransColor);
bool __thiscall PrivateStoreBD::IsAlive(PrivateStoreBD *this, float fTime);
void __thiscall PrivateStoreBD::EndDraw(PrivateStoreBD *this);
// void __usercall DrawHLine(unsigned int *puiDest, unsigned int uiPitch<ecx>, unsigned int uiX1<edx>, unsigned int uiX2<eax>, unsigned int uiY, unsigned int uiColor);
// void __usercall CalculateStrlenInWidth_1(char *pcText<eax>, HDC__ *hDC, unsigned int dwMaxWidth, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>);
bool __thiscall PrivateStoreBD::BeginDraw(PrivateStoreBD *this);
void __thiscall PrivateStoreBD::CalculateLine(PrivateStoreBD *this);
void __thiscall PrivateStoreBD::DrawFrame(PrivateStoreBD *this);
void __thiscall PrivateStoreBD::DrawTextA(PrivateStoreBD *this);
void __thiscall PrivateStoreBD::CopyTexture(PrivateStoreBD *this);
void __thiscall PrivateStoreBD::_PrivateStoreBD(PrivateStoreBD *this);
void __thiscall PrivateStoreBD::SetSpeech(PrivateStoreBD *this, char *pcSpeech);
void __thiscall PrivateStoreBD::Update(PrivateStoreBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void __thiscall PrivateStoreBD::CreateGeometry(PrivateStoreBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void __thiscall PrivateStoreBD::PrivateStoreBD(PrivateStoreBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void *__thiscall PrivateStoreBD::_vector_deleting_destructor_(PrivateStoreBD *this, unsigned int);
ScreenBoardTexture *__thiscall ScreenBDMgr::GetScreenNameData(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::Draw(ScreenBDMgr *this);
CharScreenBoardBase *__thiscall ScreenBDMgr::GetCharBD(ScreenBDMgr *this, unsigned __int16 kHandle);
CharScreenBoardBase *__thiscall ScreenBDMgr::GetMostFarCharBD(ScreenBDMgr *this, NiPoint3 *kPos);
bool __thiscall ScreenBDMgr::RemoveCharBD(ScreenBDMgr *this, CharScreenBoardBase *pkCharBD);
void __thiscall ScreenBDMgr::RemoveAllCharBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::TerminateCharBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::Terminate(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::Clear(ScreenBDMgr *this);
bool __thiscall ScreenBDMgr::InitCharBD(ScreenBDMgr *this, bool Is3DNamePanelEnable);
void __thiscall ScreenBDMgr::AddCharBD(ScreenBDMgr *this, unsigned __int16 kHandle, NiPoint3 *rPos, ScreenBDMgr::NameBoardType nb_type);
bool __thiscall ScreenBDMgr::Init(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::UpdateCharBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera);
void __thiscall ScreenBDMgr::Update(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera);
void __thiscall ScreenBDMgr::_ScreenBDMgr(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::ScreenBDMgr(ScreenBDMgr *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>(NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *this, unsigned int);
void __thiscall NiTPointerList<SpeechBD__>::_NiTPointerList<SpeechBD__>(NiTPointerList<SpeechBD *> *this);
void __thiscall NiTPointerList<NameBD__>::_NiTPointerList<NameBD__>(NiTPointerList<NameBD *> *this);
void __thiscall NiTPointerList<CharScreenBoardBase__>::_NiTPointerList<CharScreenBoardBase__>(NiTPointerList<CharScreenBoardBase *> *this);
void __thiscall NiTPointerList<PrivateStoreBD__>::_NiTPointerList<PrivateStoreBD__>(NiTPointerList<PrivateStoreBD *> *this);
void __thiscall NiTPointerList<GuildBD__>::_NiTPointerList<GuildBD__>(NiTPointerList<GuildBD *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NameBD *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *this, unsigned int);
void __thiscall CharScreenBoardUserChar::CharScreenBoardUserChar(CharScreenBoardUserChar *this);
void __thiscall CharScreenBoardDropItem::CharScreenBoardDropItem(CharScreenBoardDropItem *this);
void __thiscall CharScreenBoardMiniHouse::CharScreenBoardMiniHouse(CharScreenBoardMiniHouse *this);
void __thiscall PgTList<SpeechBD__>::_PgTList<SpeechBD__>(PgTList<SpeechBD *> *this);
void __thiscall PgTList<NameBD__>::_PgTList<NameBD__>(PgTList<NameBD *> *this);
void __thiscall PgTList<CharScreenBoardBase__>::_PgTList<CharScreenBoardBase__>(PgTList<CharScreenBoardBase *> *this);
void __thiscall PgTList<PrivateStoreBD__>::_PgTList<PrivateStoreBD__>(PgTList<PrivateStoreBD *> *this);
void __thiscall PgTList<GuildBD__>::_PgTList<GuildBD__>(PgTList<GuildBD *> *this);
void *__thiscall PgTList<SpeechBD__>::_scalar_deleting_destructor_(PgTList<SpeechBD *> *this, unsigned int);
void *__thiscall PgTList<NameBD__>::_scalar_deleting_destructor_(PgTList<NameBD *> *this, unsigned int);
void *__thiscall PgTList<CharScreenBoardBase__>::_scalar_deleting_destructor_(PgTList<CharScreenBoardBase *> *this, unsigned int);
void *__thiscall PgTList<PrivateStoreBD__>::_scalar_deleting_destructor_(PgTList<PrivateStoreBD *> *this, unsigned int);
void *__thiscall PgTList<GuildBD__>::_scalar_deleting_destructor_(PgTList<GuildBD *> *this, unsigned int);
void __cdecl std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(NiPointer<PgSprData> *_First, NiPointer<PgSprData> *_Last, std::allocator<NiPointer<PgSprData> > *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall ScreenBoardTexture::_ScreenBoardTexture(ScreenBoardTexture *this);
ScreenBoardGeometry::BoardInfo *__thiscall ScreenBoardGeometry::GetInfo(ScreenBoardGeometry *this);
void __thiscall ScreenBoardGeometry::Update(ScreenBoardGeometry *this, float fTime);
NiScreenElementsData *__thiscall ScreenBoardGeometry::CreateScreenGeometryData(ScreenBoardGeometry *this, NiPoint2 RenderSize, NiPoint2 TextureStartPos);
NiScreenElements *__thiscall ScreenBoardGeometry::GetGeometry(ScreenBoardGeometry *this);
void __thiscall ScreenBoardGeometry::SetAlpha(ScreenBoardGeometry *this, float fAlpha);
void __thiscall ScreenBoardGeometry::_ScreenBoardGeometry(ScreenBoardGeometry *this);
void __thiscall ScreenBoardGeometry::ScreenBoardGeometry(ScreenBoardGeometry *this, ScreenBoardTexture *pBoardData);
void __thiscall ScreenBoardGeometry::SetBoardInfo(ScreenBoardGeometry *this, ScreenBoardGeometry::BoardInfo *info);
void *__thiscall ScreenBoardGeometry::_vector_deleting_destructor_(ScreenBoardGeometry *this, unsigned int);
int __thiscall ScreenBDMgr::GetNotUsedGuildBDTextureIndex(ScreenBDMgr *this);
GuildBD *__thiscall ScreenBDMgr::GetGuildBD(ScreenBDMgr *this, unsigned __int16 kHandle);
GuildBD *__thiscall ScreenBDMgr::GetMostFarGuildBD(ScreenBDMgr *this, NiPoint3 *kPos);
bool __thiscall ScreenBDMgr::InitGuildBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::RemoveGuildBD(ScreenBDMgr *this, GuildBD *pkGuildBD);
void __thiscall ScreenBDMgr::RemoveAllGuildBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::ClearGuildBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::AddGuildBD(ScreenBDMgr *this, unsigned __int16 kHandle);
void __thiscall ScreenBDMgr::UpdateGuildBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera);
void __thiscall ScreenBDMgr::TerminateGuildBD(ScreenBDMgr *this);
bool __thiscall ScreenBDMgr::InitMainCharHPBar(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::TerminateMainCharHPBar(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::ClearMainCharHPBar(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::UpdateMainCharHPBar(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera);
int __thiscall ScreenBDMgr::GetNotUsedPrivateStoreBDTextureIndex(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::MarkAsUsePrivateStoreBD(ScreenBDMgr *this, int iTextureIndex);
void __thiscall ScreenBDMgr::MarkAsUnusePrivateStoreBD(ScreenBDMgr *this, int iTextureIndex);
PrivateStoreBD *__thiscall ScreenBDMgr::GetPrivateStoreBD(ScreenBDMgr *this, unsigned __int16 kHandle);
PrivateStoreBD *__thiscall ScreenBDMgr::GetMostOldPrivateStoreBD(ScreenBDMgr *this);
bool __thiscall ScreenBDMgr::InitPrivateStoreBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::AddPrivateStoreBD(ScreenBDMgr *this, unsigned __int16 kHandle);
void __thiscall ScreenBDMgr::RemovePrivateStoreBD(ScreenBDMgr *this, PrivateStoreBD *pkPrivateStoreBD);
void __thiscall ScreenBDMgr::RemoveAllPrivateStoreBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::UpdatePrivateStoreBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera);
void __thiscall ScreenBDMgr::ClearPrivateStoreBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::TerminatePrivateStoreBD(ScreenBDMgr *this);
NiPointer<NiD3DDefaultShader> *__thiscall NiPointer<PopupMenuWin>::operator_(NiPointer<NiD3DDefaultShader> *this, NiD3DDefaultShader *pObject);
NiD3DShaderInterface *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *this, void **kPos);
bool __thiscall ScreenBDMgr::InitSpeechBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::EndSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle);
void __thiscall ScreenBDMgr::AddSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle, char *pcSpeech);
void __thiscall ScreenBDMgr::AddSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle, char *pcSpeech, float fLifeTime);
void __thiscall ScreenBDMgr::AddSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle, char *pcSpeech, char kColorID, char kOutLineColorID);
void __thiscall ScreenBDMgr::RemoveSpeechBD(ScreenBDMgr *this, SpeechBD *pkSpeechBD);
void __thiscall ScreenBDMgr::RemoveAllSpeechBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::UpdateSpeechBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera);
void __thiscall ScreenBDMgr::ClearSpeechBD(ScreenBDMgr *this);
void __thiscall ScreenBDMgr::TerminateSpeechBD(ScreenBDMgr *this);
void __thiscall ScreenBoardTexture::EndDraw(ScreenBoardTexture *this);
void __thiscall ScreenBoardTexture::DrawTextA(ScreenBoardTexture *this);
tagSIZE __thiscall ScreenBoardTexture::GetMaxSize(ScreenBoardTexture *this);
tagSIZE __thiscall ScreenBoardTexture::GetSpaceSize(ScreenBoardTexture *this);
tagSIZE __thiscall ScreenBoardTexture::GetDescSize(ScreenBoardTexture *this);
int __thiscall ScreenBoardTexture::DescInfo::GetIndex(ScreenBoardTexture::DescInfo *this);
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned long> *__thiscall ScreenBoardTexture::DescInfo::GetIndexKey(ScreenBoardTexture::DescInfo *this);
tagSIZE __thiscall FrameScreenBoardTexture::GetDescSize(FrameScreenBoardTexture *this);
void __thiscall FrameScreenBoardTexture::DrawTextA(FrameScreenBoardTexture *this);
bool __thiscall ScreenBoardTexture::CalculateStrSize(ScreenBoardTexture *this, const char *pcText, unsigned int *dwStrLen, tagSIZE *tSize);
bool __thiscall ScreenBoardTexture::BeginDraw(ScreenBoardTexture *this, NiTexture *pDescTexture);
NiTexture *__thiscall ScreenBoardTexture::DescInfo::GetTexture(ScreenBoardTexture::DescInfo *this);
NiPoint2 *__thiscall ScreenBoardTexture::DescInfo::GetRenderStartPos(ScreenBoardTexture::DescInfo *this, NiPoint2 *result);
tagSIZE __thiscall ScreenBoardTexture::GetTextRenderSize(ScreenBoardTexture *this, const char *pkText);
bool __thiscall ScreenBoardTexture::IsReleaseBuffer(ScreenBoardTexture *this);
void __thiscall ScreenBoardTexture::DescInfo::_DescInfo(ScreenBoardTexture::DescInfo *this);
void __thiscall ScreenBoardTexture::DescInfo::DescInfo(ScreenBoardTexture::DescInfo *this, ScreenBoardTexture *pScreenData, NiPointer<NiSourceTexture> spTexture, int nIndex);
NiPointer<ScreenBoardTexture::DescInfo> *__thiscall ScreenBoardTexture::TextOutA(ScreenBoardTexture *this, NiPointer<ScreenBoardTexture::DescInfo> *result, const char *pkText, unsigned int kColorRef);
void __thiscall ScreenBoardTexture::ScreenBoardTexture(ScreenBoardTexture *this);
void __thiscall ScreenBoardTexture::Clear(ScreenBoardTexture *this);
void __thiscall FrameScreenBoardTexture::_FrameScreenBoardTexture(FrameScreenBoardTexture *this);
bool __thiscall ScreenBoardTexture::Init(ScreenBoardTexture *this, tagSIZE MaxSize, Font::Type fonttype, int nBufferCount);
void __thiscall ScreenBoardTexture::Terminate(ScreenBoardTexture *this);
void __thiscall FrameScreenBoardTexture::FrameScreenBoardTexture(FrameScreenBoardTexture *this);
void __cdecl std::swap<NiPointer<ScreenBoardTexture::DescInfo>>(NiPointer<ScreenBoardTexture::DescInfo> *_Left, NiPointer<ScreenBoardTexture::DescInfo> *_Right);
NiPointer<NiAVObject> *__cdecl std::_Move<NiPointer<NiAVObject>___NiPointer<NiAVObject>__>(NiPointer<NiAVObject> *_First, NiPointer<NiAVObject> *_Last, NiPointer<NiAVObject> *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void *__thiscall ScreenBoardTexture::DescInfo::_scalar_deleting_destructor_(ScreenBoardTexture::DescInfo *this, unsigned int);
void __thiscall std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this, NiPointer<PgSprData> *_Val);
// void __usercall DrawVLine_0(unsigned int *puiDest, unsigned int uiPitch<esi>, unsigned int uiX, unsigned int uiY1<edx>, unsigned int uiY2<eax>, unsigned int uiColor<edi>);
// void __usercall FillSpr_0(unsigned int *puiDest, unsigned int uiPitch<eax>, unsigned int uiX, unsigned int uiY, char *pbySrc, unsigned int uiSrcWidth<ebx>, unsigned int uiSrcHeight<edx>, unsigned int uiSolidColor, unsigned int uiTransColor);
bool __thiscall SpeechBD::IsAlive(SpeechBD *this, float fTime);
void __thiscall SpeechBD::EndDraw(SpeechBD *this);
void __thiscall SpeechBD::DrawTextA(SpeechBD *this);
// void __usercall DrawHLine_0(unsigned int *puiDest, unsigned int uiPitch<ecx>, unsigned int uiX1<edx>, unsigned int uiX2<eax>, unsigned int uiY, unsigned int uiColor);
// void __usercall CalculateStrlenInWidth_2(char *pcText<eax>, HDC__ *hDC, unsigned int dwMaxWidth, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>);
bool __thiscall SpeechBD::BeginDraw(SpeechBD *this);
void __thiscall SpeechBD::CalculateLine(SpeechBD *this);
void __thiscall SpeechBD::DrawFrame(SpeechBD *this);
void __thiscall SpeechBD::CopyTexture(SpeechBD *this);
void __thiscall SpeechBD::_SpeechBD(SpeechBD *this);
void __thiscall SpeechBD::Update(SpeechBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void __thiscall SpeechBD::SetSpeech(SpeechBD *this, char *pcSpeech);
void __thiscall SpeechBD::SetOutLineColorID(SpeechBD *this, char kColorID);
void __thiscall SpeechBD::SetTextColorID(SpeechBD *this, char kColorID);
void __thiscall SpeechBD::CreateGeometry(SpeechBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void __thiscall SpeechBD::SpeechBD(SpeechBD *this, NiTexture *pkTexture, int iTexturePosIndex);
void *__thiscall SpeechBD::_vector_deleting_destructor_(SpeechBD *this, unsigned int);
void __thiscall GMCommandWin::GMCommandWin(GMCommandWin *this);
void __thiscall GMCommandWin::_GMCommandWin(GMCommandWin *this);
bool __thiscall GMCommandWin::Create(GMCommandWin *this, PgFrameWork *pkFrameWork);
GMCommandWin *__cdecl GMCommandWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GMCommandWin::_scalar_deleting_destructor_(GMCommandWin *this, unsigned int);
void __thiscall GMPrisonWin::GMPrisonWin(GMPrisonWin *this);
void __thiscall GMPrisonWin::_GMPrisonWin(GMPrisonWin *this);
void __thiscall GMPrisonWin::OnCmdCancel(GMPrisonWin *this);
void __thiscall GMPrisonWin::SetCharName(GMPrisonWin *this, const char *name);
bool __thiscall GMPrisonWin::Create(GMPrisonWin *this, PgFrameWork *pkFrameWork);
void __thiscall GMPrisonWin::SendGMReq(GMPrisonWin *this, bool bAdd);
void __thiscall GMPrisonWin::OnModif(GMPrisonWin *this);
void __thiscall GMPrisonWin::OnCmdOk(GMPrisonWin *this);
void __thiscall GMPrisonWin::OnCommand(GMPrisonWin *this, unsigned int wParam, int lParam);
GMPrisonWin *__cdecl GMPrisonWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GMPrisonWin::_scalar_deleting_destructor_(GMPrisonWin *this, unsigned int);
bool __thiscall LinkFrameWork::InitWindow(LinkFrameWork *this, unsigned __int16 mapid);
void __thiscall LinkFrameWork::TerminateWindow(LinkFrameWork *this);
bool __thiscall LinkFrameWork::InitNet(LinkFrameWork *this);
void __thiscall LinkFrameWork::TerminateNet(LinkFrameWork *this);
bool __thiscall LinkFrameWork::InitKeyMap(LinkFrameWork *this);
void __thiscall LinkFrameWork::TerminateKeyMap(LinkFrameWork *this);
bool __thiscall LinkFrameWork::Init(LinkFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall LinkFrameWork::Terminate(LinkFrameWork *this);
void __thiscall LinkFrameWork::OnErrorMsgClose(LinkFrameWork *this);
void __thiscall LinkFrameWork::OnMapLoginFailMsgClose(LinkFrameWork *this);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_BASE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_SHAPE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_OPTION_SET_SHORTCUTDATA_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_OPTION_SET_SHORTCUTSIZE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_OPTION_DB_SET_WINDOWPOS_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_DOING_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_DONE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_READ_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_REPEAT_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_ABSTATE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_SKILL_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_PASSIVE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_ITEM_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_GAME_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_CHARTITLE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_MISC_RESTMINUTE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_COININFO_CMD(LinkFrameWork *this, int iRevBytes, void *pvData);
void __thiscall LinkFrameWork::Draw(LinkFrameWork *this);
void __thiscall LinkFrameWork::ProcessInput(LinkFrameWork *this);
void __thiscall LinkFrameWork::OnInitAtSameServer(LinkFrameWork *this);
void __thiscall LinkFrameWork::NcMiscSeedReq(LinkFrameWork *this);
void __thiscall LinkFrameWork::NcMapLoginCompleteCmd(LinkFrameWork *this);
void __thiscall LinkFrameWork::_LinkFrameWork(LinkFrameWork *this);
void __thiscall LinkFrameWork::Update(LinkFrameWork *this, float fCurTime);
void __thiscall LinkFrameWork::SendConnectError(LinkFrameWork *this, int nFailCount, int nType, Name4 *rLinkBeforeAddress);
void __thiscall LinkFrameWork::OnTryConnectToZone(LinkFrameWork *this);
void __thiscall LinkFrameWork::OnInitAtOtherServer(LinkFrameWork *this);
int __thiscall LinkFrameWork::On_NC_MAP_LOGINFAIL_ACK(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::On_NC_MAP_LOGIN_ACK(LinkFrameWork *this, int iRevBytes, void *pvData);
void __thiscall LinkFrameWork::LinkFrameWork(LinkFrameWork *this);
void __thiscall LinkFrameWork::ProcessMsg(LinkFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall LinkFrameWork::NcMapLoginReq(LinkFrameWork *this);
int __thiscall LinkFrameWork::On_NC_MISC_SEED_ACK(LinkFrameWork *this, int iRevBytes, void *pvData);
int __thiscall LinkFrameWork::ProcessNetMsg(LinkFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
NiRTTI *__thiscall LinkFrameWork::GetRTTI(LinkFrameWork *this);
const char *__thiscall LinkFrameWork::GetFrameWorkName(LinkFrameWork *this);
void *__thiscall LinkFrameWork::_scalar_deleting_destructor_(LinkFrameWork *this, unsigned int);
bool __thiscall LoadingFrameWork::InitWindow(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::TerminateWindow(LoadingFrameWork *this);
bool __thiscall LoadingFrameWork::InitKeyMap(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::TerminateKeyMap(LoadingFrameWork *this);
bool __thiscall LoadingFrameWork::Init(LoadingFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall LoadingFrameWork::Terminate(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::OnStartLoad(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::Draw(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::ProcessInput(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::ProcessMsg(LoadingFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall LoadingFrameWork::LoadingFrameWork(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::_LoadingFrameWork(LoadingFrameWork *this);
void __thiscall LoadingFrameWork::Update(LoadingFrameWork *this, float fCurTime);
NiRTTI *__thiscall LoadingFrameWork::GetRTTI(LoadingFrameWork *this);
void *const __thiscall CharCreateFrameWork::GetID(CharCreateFrameWork *this);
const char *__thiscall LoadingFrameWork::GetFrameWorkName(LoadingFrameWork *this);
void *__thiscall LoadingFrameWork::_scalar_deleting_destructor_(LoadingFrameWork *this, unsigned int);
void __thiscall ITimer::ITimer(ITimer *this);
void __thiscall FrameWorkTimer::OnTimer(FrameWorkTimer *this);
int __cdecl ITimer::ClearTimer();
void __thiscall ITimer::_ITimer(ITimer *this);
void __thiscall ITimer::SetTimer(ITimer *this, float fTime);
void __cdecl ITimer::Update(float fTime);
void __thiscall FrameWorkTimer::FrameWorkTimer(FrameWorkTimer *this, float fTime, unsigned int dwCommand, PgFrameWork *pkFrameWork);
void __thiscall NiTListBase<DFALL<ITimer__>_ITimer__>::_NiTListBase<DFALL<ITimer__>_ITimer__>(NiTListBase<DFALL<ITimer *>,ITimer *> *this);
void *__thiscall NiTListBase<DFALL<ITimer__>_ITimer__>::_scalar_deleting_destructor_(NiTListBase<DFALL<ITimer *>,ITimer *> *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<ITimer__>_ITimer__>::_vector_deleting_destructor_(NiTList<ITimer *> *this, unsigned int);
void *__thiscall FrameWorkTimer::_scalar_deleting_destructor_(FrameWorkTimer *this, unsigned int);
void __thiscall CHairShopFrameWork::OnErrorGotoAccount(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::ChangeAvatarHair(CHairShopFrameWork *this, char byTargetHairType);
void __thiscall CHairShopFrameWork::ChangeAvatarHairColor(CHairShopFrameWork *this, char byTargetColor);
void __thiscall CHairShopFrameWork::Draw(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::SetDefaultLooks(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::Exit(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::ApplyTerrain(CHairShopFrameWork *this, NiNode *pkGroundNode);
void __thiscall CHairShopFrameWork::RenderShadow(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::TurnRight(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::TurnLeft(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::ChangeAvatarFace(CHairShopFrameWork *this, char byTargetFaceType);
void __thiscall CHairShopFrameWork::Update(CHairShopFrameWork *this, float fCurTime);
char __thiscall CHairShopFrameWork::FindItemGrade(CHairShopFrameWork *this, bool *bChanged);
void __thiscall CHairShopFrameWork::ChangeApply(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::ProcessMsg(CHairShopFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall CHairShopFrameWork::ChangeAvatarGender(CHairShopFrameWork *this, bool bIsMale);
bool __thiscall CHairShopFrameWork::InitWindow(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::ClearItemInfo(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::TerminateWindow(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::TerminateBackgroundScene(CHairShopFrameWork *this);
bool __thiscall CHairShopFrameWork::InitAvatar(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::TerminateAvatar(CHairShopFrameWork *this);
bool __thiscall CHairShopFrameWork::InitNet(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::TerminateNet(CHairShopFrameWork *this);
bool __thiscall CHairShopFrameWork::InitShadow(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::CHairShopFrameWork(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::_CHairShopFrameWork(CHairShopFrameWork *this);
bool __thiscall CHairShopFrameWork::InitBackgroundScene(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::ReleaseShadow(CHairShopFrameWork *this);
bool __thiscall CHairShopFrameWork::Init(CHairShopFrameWork *this, PgMsg::Frame *ptFrameMsg);
void __thiscall CHairShopFrameWork::Terminate(CHairShopFrameWork *this);
NiRTTI *__thiscall CHairShopFrameWork::GetRTTI(CHairShopFrameWork *this);
const char *__thiscall CHairShopFrameWork::GetFrameWorkName(CHairShopFrameWork *this);
void *__thiscall CHairShopFrameWork::_vector_deleting_destructor_(CHairShopFrameWork *this, unsigned int);
int __thiscall CHairShopFrameWork::On_NC_USER_CONNECTCUT_CMD(CHairShopFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CHairShopFrameWork::On_NC_CHAR_SET_STYLE_GET_INFO_ACK(CHairShopFrameWork *this, int iRevBytes, void *pvData);
void __thiscall CHairShopFrameWork::NcCharSetStyleReq(CHairShopFrameWork *this);
void __thiscall CHairShopFrameWork::NcCharSetStyleItemInfoReq(CHairShopFrameWork *this);
int __thiscall CHairShopFrameWork::On_NC_USER_LOGINWORLD_ACK(CHairShopFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CHairShopFrameWork::On_NC_CHAR_SET_STYLE_ACK(CHairShopFrameWork *this, int iRevBytes, void *pvData);
int __thiscall CHairShopFrameWork::ProcessNetMsg(CHairShopFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall CHairShopOkCancelWin::CHairShopOkCancelWin(CHairShopOkCancelWin *this);
void __thiscall CHairShopOkCancelWin::_CHairShopOkCancelWin(CHairShopOkCancelWin *this);
void __thiscall CHairShopOkCancelWin::UpdateMeWin(CHairShopOkCancelWin *this, float fCurTime);
void __thiscall CHairShopOkCancelWin::OnCmdApply(CHairShopOkCancelWin *this);
void __thiscall CHairShopOkCancelWin::OnCmdCancel(CHairShopOkCancelWin *this);
void __thiscall CHairShopOkCancelWin::OnCmdSetDefault(CHairShopOkCancelWin *this);
bool __thiscall CHairShopOkCancelWin::Create(CHairShopOkCancelWin *this, PgFrameWork *pkFrameWork);
void __thiscall CHairShopOkCancelWin::OnCommand(CHairShopOkCancelWin *this, unsigned int wParam, int lParam);
CHairShopOkCancelWin *__cdecl CHairShopOkCancelWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CHairShopOkCancelWin::_vector_deleting_destructor_(CHairShopOkCancelWin *this, unsigned int);
void __thiscall CHairShopViewCtrlWin::CHairShopViewCtrlWin(CHairShopViewCtrlWin *this);
void __thiscall CHairShopViewCtrlWin::_CHairShopViewCtrlWin(CHairShopViewCtrlWin *this);
void __thiscall CHairShopViewCtrlWin::OnCmdTurnLeft(CHairShopViewCtrlWin *this);
void __thiscall CHairShopViewCtrlWin::OnCmdTurnRight(CHairShopViewCtrlWin *this);
void __thiscall CHairShopViewCtrlWin::OnCommand(CHairShopViewCtrlWin *this, unsigned int wParam, int lParam);
bool __thiscall CHairShopViewCtrlWin::Create(CHairShopViewCtrlWin *this, PgFrameWork *pkFrameWork);
CHairShopViewCtrlWin *__cdecl CHairShopViewCtrlWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CHairShopViewCtrlWin::_scalar_deleting_destructor_(CHairShopViewCtrlWin *this, unsigned int);
void __thiscall CColorIcon::CColorIcon(CColorIcon *this);
void __thiscall CColorIcon::_CColorIcon(CColorIcon *this);
bool __thiscall CColorIcon::Create(CColorIcon *this, int iXPos, int iYPos, PgWin *pkParent);
void __thiscall CHairShopwin::ChangeState(CHairShopwin *this, char byDestState);
void __thiscall CHairShopwin::OnSlideBar(CHairShopwin *this);
void __thiscall CColorIcon::DoAction(CColorIcon *this);
void __thiscall CHairShopwin::CHairShopwin(CHairShopwin *this);
void __thiscall CHairShopwin::_CHairShopwin(CHairShopwin *this);
void __thiscall CHairShopwin::UpdateGenderList(CHairShopwin *this);
void __thiscall CColorIcon::SetColorIndex(CColorIcon *this, char byTableIndex);
void __thiscall CColorIcon::OnFirstHitWin(CColorIcon *this);
CColorIcon *__cdecl CColorIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent);
CHairShopwin *__cdecl CHairShopwin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall CHairShopwin::UpdateFaceList(CHairShopwin *this, char byEndGrade, char byStartGrade);
void __thiscall CHairShopwin::UpdateHairList(CHairShopwin *this, char byEndGrade, char byStartGrade);
void __thiscall CHairShopwin::RefreshColorIcon(CHairShopwin *this, char byEndGrade, char byStartGrade);
void __thiscall CHairShopwin::ActivateCheckBtn(CHairShopwin *this, char byIndex);
void __thiscall CHairShopwin::ActivateCheckAddBtn(CHairShopwin *this, char byIndex);
void __thiscall CHairShopwin::UpdateMeWin(CHairShopwin *this, float fCurTime);
void __thiscall CHairShopwin::OnCommand(CHairShopwin *this, unsigned int wParam, int lParam);
bool __thiscall CHairShopwin::Create(CHairShopwin *this, PgFrameWork *pkFrameWork);
void *__thiscall CColorIcon::_scalar_deleting_destructor_(CColorIcon *this, unsigned int);
void *__thiscall CHairShopwin::_scalar_deleting_destructor_(CHairShopwin *this, unsigned int);
void __cdecl FaceInfoTab::GetExactEquipableFace(char ucStartGrade, char ucEndGrade, void *padwResult);
void __cdecl HairInfoTab::GetExactEquipableHairType(char kClassID, char ucGender, char ucStartGrade, char ucEndGrade, void *padwResult);
void __cdecl HairColorInfoTab::GetExactEquipableHairColor(char ucStartGrade, char ucEndGrade, void *padwResult);
unsigned int __cdecl ParseWeaponDemandMask(char *pcStr, char *pcFileName);
unsigned int __cdecl MapEquipWeaponToActionWeaponDemandMask(ItemInfo *pkEquipItemInfo);
void __thiscall ActionInfoSet::ActionInfoSet(ActionInfoSet *this, unsigned int uiInfoNum);
void __thiscall ActionInfoSet::_ActionInfoSet(ActionInfoSet *this);
ActionInfo *__thiscall ActionInfoSet::GetByEventCode(ActionInfoSet *this, unsigned int dwEventCode);
ActionInfo *__thiscall ActionInfoSet::GetByInxName(ActionInfoSet *this, const char *pkInxName);
ActionInfo *__thiscall ActionInfoSet::GetProperActionInfo(ActionInfoSet *this, char *acActionName, ItemInfo *pkEquipItemInfo, bool bNoWeaponCheck);
bool __thiscall ActionInfoSet::IsActionExist(ActionInfoSet *this, char *acActionName);
ActionInfo *__thiscall ActionInfoSet::GetByID(ActionInfoSet *this, unsigned __int16 ID);
ActionInfo::EFF_POS __cdecl ActionInfoTable::GetEffPos(char *pcStr, char *pcFn);
unsigned int __cdecl ActionInfoTable::ClearMobActionInfo();
unsigned int __cdecl ActionInfoTable::ClearCharActionInfo();
unsigned int __cdecl ActionInfoTable::ClearRidePetActionInfo();
unsigned int __cdecl ActionInfoTable::ClearMoverActionInfo();
unsigned int __cdecl ActionInfoTable::ClearPetActionInfo();
ActionInfoSet *__cdecl ActionInfoTable::GetCharActionInfo(char kClass, char ucGender);
ActionInfoSet *__cdecl ActionInfoTable::LoadData(char *pcFileName);
unsigned int __cdecl ActionInfoTable::Terminate();
bool __cdecl ActionInfoTable::LoadChar();
ActionInfoSet *__cdecl ActionInfoTable::LoadRidePet(unsigned int kID);
ActionInfoSet *__cdecl ActionInfoTable::LoadMob(unsigned __int16 kID);
bool __cdecl ActionInfoTable::Init();
ActionInfoSet *__cdecl ActionInfoTable::GetMobActionInfo(unsigned __int16 kID);
ActionInfoSet *__cdecl ActionInfoTable::GetRidePetActionInfo(unsigned int kID);
ActionInfoSet *__cdecl ActionInfoTable::LoadMover(unsigned int kID);
ActionInfoSet *__cdecl ActionInfoTable::LoadPet(unsigned int kID);
ActionInfoSet *__cdecl ActionInfoTable::GetMoverActionInfo(unsigned int kID);
ActionInfoSet *__cdecl ActionInfoTable::GetPetActionInfo(unsigned int kID);
void *__thiscall ActionInfoSet::_scalar_deleting_destructor_(ActionInfoSet *this, unsigned int);
void __thiscall NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>(NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *> *this);
void *__thiscall NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_scalar_deleting_destructor_(NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *> *this, unsigned int);
void *__thiscall NiTMap<unsigned_long_ActionInfoSet__>::_scalar_deleting_destructor_(NiTMap<unsigned long,ActionInfoSet *> *this, unsigned int);
void __thiscall ActorCallBack::_ActorCallBack(ActorCallBack *this);
char __cdecl GenIdUnique(unsigned __int16 ID);
void __thiscall ActorCallBack::SetCurrentActionInfo(ActorCallBack *this, NiActorManager *pkActor, ActionInfo *pkActionInfo);
void __thiscall ActorCallBack::TextKeyEvent(ActorCallBack *this, NiActorManager *pkManager, unsigned int eSequenceID, const char *pcTextKey, NiTextKeyMatch *pkMatchObject, float fCurrentTime, float fEventTime);
void __thiscall ActorCallBack::ActorCallBack(ActorCallBack *this);
void __cdecl CopyTextKey(NiTextKey *pkDest, NiTextKey *pkSrc);
void __cdecl AddTextKeys(NiControllerSequence *pkSeq, AddingTextKeys *pkAdding);
void __thiscall NiTextKey::NiTextKey(NiTextKey *this);
void *__thiscall ActorCallBack::_scalar_deleting_destructor_(ActorCallBack *this, unsigned int);
AttackSequence *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::RemoveHead(NiTPointerListBase<DFALL<AttackSequence *>,AttackSequence *> *this);
NiPoint3 *__thiscall Char::GetChestPos(Char *this, NiPoint3 *result);
NiPoint3 *__thiscall Char::GetRightHandPos(Char *this, NiPoint3 *result);
bool __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key, NiVBSet **val);
void __thiscall NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_NiTListBase<DFALL<AttackSequence__>_AttackSequence__>(NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *this);
void __thiscall NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_NiTListBase<DFALL<SkillSequence__>_SkillSequence__>(NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *this);
void *__thiscall NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_scalar_deleting_destructor_(NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *this, unsigned int);
void *__thiscall NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vector_deleting_destructor_(NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *this, unsigned int);
bool __thiscall AttackSequenceManager::IsSeqFinished(AttackSequenceManager *this, NiControllerSequence *pkSequence);
void __thiscall AttackSequenceManager::StopAttack(AttackSequenceManager *this);
int __thiscall AttackSequenceManager::GetAttSeqCount(AttackSequenceManager *this);
bool __thiscall AttackSequenceManager::IsDuringAttackInServer(AttackSequenceManager *this);
bool __thiscall AttackSequenceManager::IsSkillSequenceEmpty(AttackSequenceManager *this);
DamageInfoSet *__thiscall AttackSequenceManager::GetSkillDmgInfoSetbyIndex(AttackSequenceManager *this, unsigned __int16 Index);
DamageInfo *__thiscall DamageInfoSet::GetLastInvalidDmgInfo(DamageInfoSet *this);
DamageInfoSet *__thiscall AttackSequenceManager::GetAttDmgInfoSetbySeqNum(AttackSequenceManager *this, __int16 SeqNum);
AttackSequence *__thiscall AttackSequenceManager::GetAttSeqbySeqNum(AttackSequenceManager *this, __int16 SeqNum);
AttackSequence *__thiscall AttackSequenceManager::GetInvalidSeq(AttackSequenceManager *this);
SkillSequence *__thiscall AttackSequenceManager::FindSkillSequence(AttackSequenceManager *this, unsigned __int16 Index, unsigned __int16 kID);
void __thiscall DamageInfoSet::AddDamage(DamageInfoSet *this, unsigned int uiDamage, unsigned __int16 kTarget, unsigned int dwHpChangeSeqNo, unsigned int kTargetRestHP, bool bViewDamage, bool bRange, __int16 DmgSeqNum);
void __thiscall AttackSequenceManager::AddSkillSeq(AttackSequenceManager *this, SkillSequence *pkSeq);
void __thiscall DamageInfo::Applicate(DamageInfo *this, Char *pkAttacker);
void __thiscall AttackSequenceManager::AttackSequenceManager(AttackSequenceManager *this);
bool __thiscall DamageInfoSet::Applicate(DamageInfoSet *this, Char *pkAttacker, bool bAllApplicate);
void __thiscall SkillSequence::ApplicateImmediatelyDamageOnly(SkillSequence *this, Char *pkCaster, bool bAllApplicate);
bool __thiscall SkillSequence::ApplicateImmediately(SkillSequence *this, Char *pkCaster, bool bAllApplicate);
bool __thiscall AttackSequenceManager::AddAttMultiDmg(AttackSequenceManager *this, __int16 SeqNum, __int16 DmgNum, unsigned int uiDamage, unsigned __int16 kTarget, unsigned int dwHpChangeSeqNo, unsigned int kTargetRestHP, bool bViewDamage);
void __thiscall AttackSequenceManager::StartHeadSeq(AttackSequenceManager *this);
void __thiscall AttackSequenceManager::ClearAttSeq(AttackSequenceManager *this);
void __thiscall AttackSequenceManager::ClearSkillSeq(AttackSequenceManager *this);
bool __thiscall AttackSequenceManager::ApplicateSkillSeqImmediately(AttackSequenceManager *this, Char *pkCaster, bool bAllApplicate, bool bLastHitTime);
void __thiscall AttackSequenceManager::ApplicateAttackSeqImmediately(AttackSequenceManager *this, bool bAllApplicate);
bool __thiscall AttackSequenceManager::ApplicateLastSkillSeqImmediately(AttackSequenceManager *this, Char *pkCaster, bool bAllApplicate);
bool __thiscall AttackSequenceManager::DeleteMissAttSeq(AttackSequenceManager *this);
void __thiscall AttackSequenceManager::DeleteSkillSequence(AttackSequenceManager *this, unsigned __int16 Index, unsigned __int16 kID);
void __thiscall AttackSequenceManager::Update(AttackSequenceManager *this, float fTime);
void __thiscall AttackSequenceManager::AddAttSeq(AttackSequenceManager *this, AttackSequence *pkSeq);
void __thiscall AttackSequenceManager::SetDamageToLastAttSeq(AttackSequenceManager *this, DamageInfoSet *rkSet);
void __thiscall AttackSequenceManager::_AttackSequenceManager(AttackSequenceManager *this);
void __thiscall AttackSequenceManager::HardStopAttack(AttackSequenceManager *this);
void *__thiscall NiTList<AttackSequence__>::_vector_deleting_destructor_(NiTList<AttackSequence *> *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<SkillSequence__>_SkillSequence__>::_vector_deleting_destructor_(NiTList<SkillSequence *> *this, unsigned int);
char *__cdecl DmgSndTab::Get(unsigned int uiWType, unsigned int uiAType);
void __thiscall NiTList<AttackSequence__>::_NiTList<AttackSequence__>(NiTList<AttackSequence *> *this);
void __thiscall NiTList<SkillSequence__>::_NiTList<SkillSequence__>(NiTList<SkillSequence *> *this);
NiKFMTool::Transition *__thiscall NiKFMTool::GetTransition(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID);
void __thiscall DamageInfoSet::CopyFrom(DamageInfoSet *this, DamageInfoSet *rkSet);
void *__thiscall AttackSequenceManager::_scalar_deleting_destructor_(AttackSequenceManager *this, unsigned int);
void __thiscall Avatar::_Avatar(Avatar *this);
void __thiscall Avatar::AddCartoonLine(Avatar *this, NiNode *pkNode);
void __thiscall Avatar::Avatar(Avatar *this);
void __thiscall Avatar::Update(Avatar *this, float fTime);
void __thiscall Avatar::EquipAll(Avatar *this);
void __thiscall Avatar::UpdateLod(Avatar *this, float fTime);
bool __thiscall Avatar::ResetView(Avatar *this, PROTO_AVATAR_SHAPE_INFO *p, unsigned int uiFrame);
bool __thiscall Avatar::ChangeClassShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo, unsigned int uiFrame);
bool __thiscall Avatar::ChangeGenderShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo, unsigned int uiFrame);
bool __thiscall Avatar::ChangeFaceTextureShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo);
bool __thiscall Avatar::ChangeHairTypeShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo);
bool __thiscall Avatar::ChangeHairColorShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo);
void *__thiscall Avatar::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall Avatar::_vector_deleting_destructor_(void *this, unsigned int a2);
Ns_TourScene::TS_RESULT __thiscall Ns_TourScene::ProcessData(Ns_TourScene *this, NiAVObject *_pkObject, void *_pData);
void *__thiscall Avatar::_scalar_deleting_destructor_(Avatar *this, unsigned int);
void __cdecl FaceInfoTab::GetIndex(unsigned int uiIndex, char kBaseClassID, char ucGender, char *byResultFaceModelInx, char *byResultFaceTexInx);
Ns_TourScene::TS_RESULT __thiscall LODNodeInActivate::ProcessData(LODNodeInActivate *this, NiAVObject *_pkObject, void *_pData);
void __thiscall AbStateInst::OnEffectDestory(AbStateInst *this, Effect *pkEffect);
AbStateInfectee::AbstateColor __thiscall AbStateInfectee::GetAbstateColor(AbStateInfectee *this);
void __thiscall AbStateInfectee::SetAbStateProperty(AbStateInfectee *this, ABSTATEINDEX eAbstateIndex, bool bVisible, int iCount);
NiTList<AbStateInst *> *__thiscall AbStateInfectee::GetAbStateList(AbStateInfectee *this);
int __thiscall AbStateInfectee::IsVisible(AbStateInfectee *this);
void __thiscall AbStateInfectee::Update(AbStateInfectee *this, float fTime);
bool __thiscall AbStateInfectee::IsInList(AbStateInfectee *this, ABSTATEINDEX wIndex);
void __thiscall AbStateInfectee::ClearAbState(AbStateInfectee *this, bool bSudden);
bool __thiscall AbStateInfectee::FindNomalAbstate(AbStateInfectee *this, ABSTATEINDEX wIndex);
void __thiscall AbStateInfectee::_AbStateInfectee(AbStateInfectee *this);
void __thiscall AbStateInfectee::DeleteAbState(AbStateInfectee *this, unsigned __int16 kID, bool bSudden);
void __thiscall AbStateInfectee::AbStateInfectee(AbStateInfectee *this);
bool __thiscall AbStateInfectee::IsInList(AbStateInfectee *this, SubAbstateAction wSAA);
void __thiscall AbStateInfectee::Affect(AbStateInfectee *this, AbStateInst *pkAbState, bool bNoVisual);
void __thiscall AbStateInfectee::Deaffect(AbStateInfectee *this, AbStateInst *pkAbState, bool bSudden);
AbStateInst *__thiscall AbStateInfectee::FindAbstateInstBySubAbstateType(AbStateInfectee *this, SubState eType);
bool __thiscall AbStateInfectee::SubAbIsInList(AbStateInfectee *this, SubState subType);
bool __thiscall AbStateInfectee::AddAbState(AbStateInfectee *this, unsigned __int16 kID, float fLifeTime, bool bNoVisual);
void __thiscall AbStateInfectee::HasAbStateAction(AbStateInfectee *this, std::list<AbnormalStateViewInfo *,std::allocator<AbnormalStateViewInfo *> > *lstAAction);
void __thiscall NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_NiTListBase<DFALL<AbStateInst__>_AbStateInst__>(NiTListBase<DFALL<AbStateInst *>,AbStateInst *> *this);
void *__thiscall NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vector_deleting_destructor_(NiTListBase<DFALL<AbStateInst *>,AbStateInst *> *this, unsigned int);
void __thiscall NiTPointerListBase<DFALL<AbStateInst__>_AbStateInst__>::AddHead(NiTPointerListBase<DFALL<AbStateInst *>,AbStateInst *> *this, AbStateInst *const *element);
void __thiscall NiTList<AbStateInst__>::_NiTList<AbStateInst__>(NiTList<AbStateInst *> *this);
void *__thiscall NiTList<AbStateInst__>::_scalar_deleting_destructor_(NiTList<AbStateInst *> *this, unsigned int);
void *__thiscall AbStateInfectee::_scalar_deleting_destructor_(AbStateInfectee *this, unsigned int);
void *__thiscall AbStateInst::_scalar_deleting_destructor_(IEffectDestroyMessenger *this, unsigned int);
void __cdecl Char::SetDefWalkSpeed(float fSpeed);
void __cdecl Char::SetDefRunSpeed(float fSpeed);
float __cdecl Char::GetDefWalkSpeed();
float __cdecl Char::GetDefRunSpeed();
void __thiscall Char::InitViewInfo(Char *this, PROTO_AVATAR_SHAPE_INFO *pkShape, PROTO_EQUIPMENT *pkEquip);
int __thiscall Char::CheckOscillationTime(Char *this, float fLastTime);
NiControllerSequence *__thiscall Char::GetNowSequence(Char *this);
float __thiscall Char::GetHitTime(Char *this);
void __thiscall Char::EquipAll(Char *this);
void __thiscall Char::ResetEquip(Char *this);
bool __thiscall Char::ResetView(Char *this);
int __thiscall Char::GetEmotionState(Char *this);
void __thiscall Char::SetEmotionState(Char *this, Char::EmotionState eState);
bool __thiscall Char::PauseEmotion(Char *this, bool bSetTime, float fPauseTime);
Char *__thiscall Char::GetAttackTargetChar(Char *this);
Char::WeaponEquipType __thiscall Char::GetEquipWeaponType(Char *this);
bool __thiscall Char::GetReserveSkillSmash(Char *this);
Char *__thiscall Char::GetChar(Char *this);
void __thiscall Char::SetAnimationSpeed(Char *this, float fSpeed);
unsigned __int16 __thiscall AttackSequenceManager::GetLastTargetHandle(AttackSequenceManager *this);
ItemInfo *__thiscall Char::GetEquippedWeaponItemInfo(Char *this);
void __thiscall Char::SetCharTitleName(Char *this, const char *cName);
bool __thiscall Char::GetSkillTargetGroundPoint(Char *this, unsigned int *x, unsigned int *y);
void __thiscall Char::SetSkillTargetGroundPoint(Char *this, unsigned int x, unsigned int y, bool bPosSetting);
void __thiscall Char::ResetSkillTargetGroundPoint(Char *this);
void __thiscall Char::RestoreEquipState(Char *this);
bool __thiscall Char::IsResource(Char *this);
void __thiscall Char::SetCampSignBoard(Char *this, STREETBOOTH_SIGNBOARD stBoard, bool bIsSell);
void __thiscall Char::SetCharTitleUse(Char *this, bool bUse);
void __thiscall Char::HpUpdate(Char *this, unsigned __int16 wHpUpdateSeqNo, unsigned int dwHp);
void __thiscall Char::InitHpUpdate(Char *this);
bool __thiscall Char::CheckEyelidByAction(Char *this);
bool __thiscall Char::IsEnableSpectral(Char *this);
bool __thiscall Char::SetEnanleSpectral(Char *this, bool bEnable);
MobInfo *__thiscall Char::GetMobInfo(Char *this);
void __thiscall Char::TOTHpUpdate(Char *this, unsigned __int16 wHpUpdateSeqNo, unsigned int dwHp);
void __thiscall Char::InitTOTHpUpdate(Char *this);
void __thiscall Char::SetHP(Char *this, int iHP);
bool __thiscall Char::IsDash(Char *this);
void __thiscall Char::EnablePolymorph(Char *this, bool b);
float __thiscall Char::GetCharZPos(Char *this, float fSec);
float __thiscall Char::GetJustSideDistance(Char *this, Char *pkTargetChar);
float __thiscall Char::GetSkillableDistance(Char *this, Char *pkTargetChar, unsigned __int16 kSkillID);
bool __thiscall Char::IsUpdate(Char *this);
void __thiscall Char::UpdateDirection(Char *this, float fTime);
bool __thiscall Char::IsOscillationTime(Char *this);
bool __thiscall Char::IsAniState(Char *this, NiControllerSequence::AnimState e);
bool __thiscall Char::IsShakeCondition(Char *this, OscTarget eCondition);
unsigned __int16 __thiscall Char::FindShnIndex(Char *this, NiTextKey *pkKey, unsigned int KeyNum, float fEffectTime);
void __thiscall Char::ResetView(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p);
void __thiscall Char::StartFadeIn(Char *this);
void __thiscall Char::StartFadeOut(Char *this);
bool __thiscall Char::IsFade(Char *this);
bool __thiscall Char::IsFadeIn(Char *this);
bool __thiscall Char::IsFadeOut(Char *this);
void __thiscall Char::FadeInfoReset(Char *this);
bool __thiscall Char::IsMob(Char *this);
bool __thiscall Char::IsNPC(Char *this);
bool __thiscall Char::IsLinkGate(Char *this);
int __thiscall Char::GetLv(Char *this);
void __thiscall Char::ChangeWalkAnimationSpeed(Char *this, float fFreq);
void __thiscall Char::ChangeRunAnimationSpeed(Char *this, float fFreq);
int __thiscall Char::GetCurEmotionCode(Char *this);
float __thiscall Char::GetPausedEmotionFrame(Char *this);
WeaponTypeEnum __thiscall Char::GetWeaponType(Char *this);
NiActorManager *__thiscall Char::GetActor(Char *this);
void __thiscall Char::SetAnimationOffset(Char *this, float fOffset);
void __thiscall Char::AddPrivateStoreBD(Char *this);
void __thiscall Char::RemovePrivateStoreBD(Char *this);
char *__thiscall Char::GetLinkGateName(Char *this);
void __thiscall Char::SetLinkGateName(Char *this, char *pcLinkGateName);
void __thiscall Char::UpdateWeaponEquipState(Char *this);
void __thiscall Char::UpdateActbyEquip(Char *this);
void __thiscall Char::UpdateActionEventByNet(Char *this, unsigned int dwEventActionCode, char byFlag);
bool __thiscall Char::IsCharNPC(Char *this);
bool __thiscall Char::IsCharMob(Char *this);
bool __thiscall Char::HaveEventNPCAction(Char *this);
char __thiscall Char::MakeCharNpcShape(Char *this, CharNPC_ViewInfo *pViewInfo);
void __thiscall Char::ClearBlinkingInfo(Char *this);
void __thiscall Char::UpdateEyeBlinking(Char *this);
bool __thiscall Char::ModifyExistDyingSeq(Char *this, unsigned __int16 hTargetHandle);
char __thiscall Char::GetClass(Char *this);
bool __thiscall Char::IsMetamorphosis(Char *this);
NiPoint3 *__thiscall Char::GetPos(Char *this);
NiPoint3 *__thiscall Char::GetMapHeigthPos(Char *this);
void __thiscall Char::SaveSkillSwingStartCurTime(Char *this);
bool __thiscall Char::IsRunSkillSequence(Char *this);
void __thiscall Char::SetMobID(Char *this, unsigned __int16 kMobID);
bool __thiscall Char::IsRangeAttChar(Char *this);
int __thiscall Char::GetHitTimeCount(Char *this, unsigned int uiEventCode);
unsigned int __thiscall Char::GetEventCodebyAttackNO(Char *this, char byActionCode);
void __thiscall Char::SetItemAutoPickState(Char *this, bool bAutoPickItem);
void __thiscall Char::SetItemAutoUseState(Char *this, bool bAutoUseItem);
void __thiscall Char::SetAniMationStop(Char *this, bool b);
void __thiscall Char::SetAbstateDeaffect(Char *this, AbStateInst *pkAbState);
void __thiscall Char::GaleOfRun(Char *this, float fTime);
void __thiscall Char::RisingChar(Char *this, float fTime);
unsigned int __thiscall Char::GetLvGapIndex(Char *this, int iLv);
void __thiscall Char::SetActionEffectStartTime(Char *this);
bool __thiscall Char::Init(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p);
bool __thiscall Char::Init(Char *this, unsigned __int16 kMobID, unsigned __int16 kHandle);
bool __thiscall Char::Init(Char *this, PROTO_AVATARINFORMATION *p);
float __thiscall Char::GetAttackableDistance(Char *this, Char *pkTargetChar);
void __thiscall Char::UpdatePosition(Char *this, float fTime);
void __thiscall Char::UpdateLod(Char *this, float fTime);
void __thiscall Char::UpdateQuestMark(Char *this);
bool __thiscall Char::IsNeverCarToon(Char *this);
bool __thiscall Char::IsNeverShadow(Char *this);
void __thiscall Char::AddIceEffect(Char *this);
unsigned __int16 __thiscall Char::GetEmotionIndex(Char *this, unsigned int uiEventCode);
unsigned int __thiscall Char::GetArmorType(Char *this);
void __thiscall Char::OnRangeHitTime(Char *this, char *pcEffName);
void __thiscall Char::OnMeleeHitTime(Char *this);
void __thiscall Char::Deaffect(Char *this, AbStateInst *pkAbState, bool bSudden);
char __thiscall Char::GetAttackActionCode(Char *this, char byActionCode);
NiPoint3 *__thiscall Char::GetHeightPos(Char *this, NiPoint3 *result);
bool __thiscall Char::Equip(Char *this, unsigned __int16 kItemID);
bool __thiscall Char::Equip(Char *this, unsigned __int16 kItemID, char byUpgrade);
bool __thiscall Char::Equip(Char *this, Item *_pItem);
bool __thiscall Char::UnEquip(Char *this, unsigned int uiEquipPos);
bool __thiscall Char::ApplyCharNpcBaseAction(Char *this, bool bFirstCall);
void __thiscall Char::ExecuteDyingProcess(Char *this);
void __thiscall Char::CorrectAniSequence(Char *this);
bool __thiscall Char::ImmediatelyMetamorphosis(Char *this, unsigned __int16 monsterid);
bool __thiscall Char::Shape_UnMetamorphosis(Char *this, const char *ptemp);
void __thiscall Char::ActNormalStand(Char *this);
void __thiscall Char::SetItemAutoUseBuff(Char *this, bool bUse);
void __thiscall Char::SetItemAutoUseCharged(Char *this, bool bUse);
void __thiscall LinkedEffect::Show(LinkedEffect *this, bool bShow);
void __thiscall Char::Update(Char *this, NiAVObject *pParent);
bool __thiscall Char::RefreshNPCAction(Char *this);
float __thiscall Char::GetAniSpeedFromAbstate(Char *this, AbnormalStateInfo *pkInfo, unsigned int uiActionEventCode);
bool __thiscall Char::AddAbStateByAbstateIndex(Char *this, ABSTATEINDEX wIndex, float fLifeTime, bool bNoVisual);
void __thiscall Char::DeleteAbStateByAbstateIndex(Char *this, ABSTATEINDEX wIndex);
ActionEffectInfo *__thiscall Char::GetSEFromLastAtk(Char *this, ActionInfo *LastAtkInfo);
void __thiscall Char::SetAbstateAffect(Char *this, AbStateInst *pkAbState);
bool __thiscall Char::ApplicateAttackSeq(Char *this, AttackSequence *pkAttSeq, bool bAllApplicate);
void __thiscall Char::Affect(Char *this, AbStateInst *pkAbState, bool bNoVisual);
void __thiscall Char::UpdateNPCAction(Char *this, float fTime);
void __thiscall LinkedEffect::LinkedEffect(LinkedEffect *this);
bool __thiscall Char::IsHitTime(Char *this, bool bdelHitTimeInfo);
void __thiscall Char::DoOscillation(Char *this, OscTarget e);
void __thiscall LinkedEffect::Clear(LinkedEffect *this);
void __thiscall Char::ClearOscTimeMmap(Char *this);
void __thiscall Char::CatchHitTime(Char *this);
void __thiscall Char::ViewNotCampMode(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p);
void __thiscall Char::ClearHitTime(Char *this);
void __thiscall Char::DelHitTime(Char *this, std::_List_iterator<std::_List_val<float,std::allocator<float> > > it);
bool __thiscall Char::IsAbStateAction(Char *this);
void __thiscall Char::ClearTraceMove(Char *this);
unsigned int __thiscall Char::GetIdleCode(Char *this);
void __thiscall Char::_Char(Char *this);
bool __thiscall Char::UpdateCulling(Char *this, float fTime);
void __thiscall Char::CatchOscillationTime(Char *this);
bool __thiscall Char::Metamorphosis(Char *this, unsigned __int16 monsterid);
bool __thiscall Char::UnMetamorphosis(Char *this);
void __thiscall Char::AddTraceMove(Char *this, NiPoint3 *Move);
void __thiscall Char::UpdateTrace(Char *this);
bool __thiscall LinkedEffect::SetNode(LinkedEffect *this, NiNode *_pNode, unsigned __int16 kHandle);
void __thiscall Char::Char(Char *this);
void __thiscall Char::Update(Char *this, float fTime);
void __thiscall Char::ViewCampMode(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p);
bool __thiscall Char::InitViewApply(Char *this, bool bEquip);
void __thiscall Char::MakeCharNpcEquipment(Char *this, CharNPC_ViewInfo *pViewInfo);
bool __thiscall Char::InitView(Char *this, bool bEquip, unsigned int uiFrame);
void __thiscall NiAVObject::SetRotate(NiAVObject *this, float fAngle, float x, float y, float z);
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *this);
bool __thiscall CQuestInfoViewMgr::IsHaveQuestState(CQuestInfoViewMgr *this);
void __thiscall Char::SetShockWave(Char *this, bool bShockWave);
void __thiscall JumpProcessor::_JumpProcessor(JumpProcessor *this);
void __thiscall CRidePetCtl::_CRidePetCtl(CRidePetCtl *this);
void __thiscall std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode);
unsigned int __cdecl ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::GetTotal();
NiAVObject *__thiscall NsFindObjectByName::GetAt(NsFindObjectByName *this, unsigned int uiIndex);
void __thiscall CQuestInfoViewMgr::CQuestInfoViewMgr(CQuestInfoViewMgr *this);
void __thiscall CQuestInfoViewMgr::_CQuestInfoViewMgr(CQuestInfoViewMgr *this);
void __thiscall CRidePetCtl::StartAction(CRidePetCtl *this, unsigned int uiEventCode);
void __thiscall CRidePetCtl::ActStand(CRidePetCtl *this);
float __thiscall Char::GetMaxViewLength(Char *this);
void __thiscall Char::CulledTent(Char *this, bool bCullTent);
void __thiscall CRidePetCtl::Update(CRidePetCtl *this, float ftime);
void __thiscall Char::UpdateForceAni(Char *this);
std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *__thiscall std::_List_val<QuestPigeonEffect::EffectInfo_std::allocator<QuestPigeonEffect::EffectInfo>>::_Buynode(std::_List_val<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> > *this, std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *_Next, std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *_Prev, QuestPigeonEffect::EffectInfo *_Val);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Linsert(std::_Tree<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *_Node, bool _Leftish);
std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *this, std::pair<float,EffectViewInfo *> *_Val);
void __thiscall NsFindObjectByName::NsFindObjectByName(NsFindObjectByName *this);
void __thiscall NsFindObjectByName::_NsFindObjectByName(NsFindObjectByName *this);
void __thiscall std::list<float_std::allocator<float>>::push_back(std::list<float,std::allocator<float> > *this, float *_Val);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *__thiscall std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *result, OscTarget *_Keyval);
Ns_TourScene::TS_RESULT __thiscall NsFindObjectByName::ProcessData(NsFindObjectByName *this, NiAVObject *_pkObject, void *_pData);
void __thiscall std::map<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>>::_map<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>>(std::map<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> > > *this);
void *__thiscall Char::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall Char::_vector_deleting_destructor_(void *this, unsigned int a2);
bool __thiscall NsFindObjectByName::FindObject(NsFindObjectByName *this, NiNode *_pObject, const char *_szName);
void *__thiscall Char::_vector_deleting_destructor_(Char *this, unsigned int);
void __thiscall Char::StopMoveTarget(Char *this);
bool __thiscall Char::IsDuringSkillCasting(Char *this);
void __thiscall Char::SetCurPlaySkill(Char *this, Skill::Type eSkillType, unsigned __int16 kSkillID);
Skill::Type __thiscall Char::GetCurPlaySkillType(Char *this);
unsigned __int16 __thiscall Char::GetCurPlaySkillID(Char *this);
void __thiscall Char::ActDamageShaking(Char *this, float fAmplitude, float fPeriod, float fDamp, EffectAxisEnum eValue, float fStartTime);
void __thiscall Char::ActDamageShaking(Char *this, EffectViewInfo *pkShakeInfo, float fStartTime);
void __thiscall Char::ActResourceAppearing(Char *this);
void __thiscall Char::ActResourceDisappearing(Char *this);
void __thiscall Char::SetReserveSkillSmash(Char *this, bool bSmash);
void __thiscall Char::CancelEmotion(Char *this);
void __thiscall Char::StartMHEmotion(Char *this);
void __thiscall Char::StopGathering(Char *this);
void __thiscall Char::StopItemCasting(Char *this);
void __thiscall Char::StartEmotion(Char *this);
unsigned int __thiscall Char::GetAniCode(Char *this, bool bFindingBaseAction, unsigned int *puiFirstCode, unsigned int *puiSecondCode);
char __thiscall Char::CheckActState(Char *this, int nAniEventCode);
void __thiscall Char::StopFlagCapture(Char *this);
bool __thiscall Char::IsMoverMovable(Char *this);
CharAniType __thiscall Char::GetMoveCharAniType(Char *this, AniEventCode::Code2 eCode2);
CharAniType __thiscall Char::GetDamageCharAniType(Char *this, AniEventCode::Code2 eCode2);
void __thiscall Char::StopMove(Char *this, bool bAbstateTest);
void __thiscall Char::TestSetPos(Char *this, NiPoint3 *kPos);
void __thiscall Char::StopMove(Char *this, float fXPos, float fYPos, bool bAbstateTest);
void __thiscall Char::TurnToChar(Char *this, Char *pkChar);
void __thiscall Char::TurnToPosition(Char *this, NiPoint3 *kPos);
bool __thiscall Char::CheckExceptional3rdCode(Char *this, unsigned int eAniCode1, unsigned int eAniCode2, unsigned int *eResultAniCode3);
bool __thiscall Char::IsDuringAction(Char *this);
ActiveSkillViewInfo *__thiscall Char::GetCurPlayActiiveSkillViewInfo(Char *this);
ActiveSkillInfo *__thiscall Char::GetCurPlayActiiveSkillInfo(Char *this);
ActionInfo *__thiscall Char::GetCurPlayActInfo(Char *this);
bool __thiscall Char::IsDuringSkillAction(Char *this);
bool __thiscall Char::IsDuringSkillActionAndHitTimeNotPassed(Char *this);
void __thiscall Char::ActStand(Char *this);
void __thiscall Char::ActMove(Char *this);
bool __thiscall Char::IsSkillCasRdyActExist(Char *this);
bool __thiscall Char::IsSkillShootActExist(Char *this);
bool __thiscall Char::IsActGathering(Char *this);
bool __thiscall Char::IsBrokenResource(Char *this);
ActionInfo *__thiscall Char::GetActionInfo(Char *this, AniEventCode::Code1 eCode1, AniEventCode::Code2 eCode2);
bool __thiscall Char::IsActProducing(Char *this);
bool __thiscall Char::IsActItemCasting(Char *this);
void __thiscall Char::ActEmotionIndex(Char *this, unsigned int uiEmotionIndex);
void __thiscall Char::ActEmotionEventCode(Char *this, unsigned int uiEventCode);
bool __thiscall Char::HaveCurrentSkillMoveAttrib(Char *this);
void __thiscall Char::AdjustHeadWeightsValue(Char *this);
bool __thiscall Char::IsActFlagCapture(Char *this);
bool __thiscall Char::IsActRunning(Char *this);
unsigned int __thiscall Char::GetSpecialEventCode(Char *this);
CharAniType __thiscall Char::GetCharAniType(Char *this, AniEventCode::Code1 eCode1, AniEventCode::Code2 eCode2);
unsigned int __thiscall Char::Get3thAniEventCode(Char *this, unsigned int eAniCode1, unsigned int eAniCode2);
bool __thiscall Char::ActJump(Char *this);
void __thiscall Char::ResetAction(Char *this);
void __thiscall Char::ResetSkillAction(Char *this);
bool __thiscall Char::ActAction(Char *this, char *pcActInxName, eActionWeight eActWeight);
bool __thiscall Char::ActNonWeightAction(Char *this, unsigned int dwAniCode);
void __thiscall Char::UpdateAction(Char *this, float fTime);
void __thiscall Char::ActGathering(Char *this, Char *pkTargetChar, unsigned __int16 id);
void __thiscall Char::ActProducing(Char *this);
void __thiscall Char::ActItemCasting(Char *this);
NiControllerSequence *__thiscall Char::GetSequence(Char *this, unsigned int uiAniEventCode);
bool __thiscall Char::ResetPosEmotion(Char *this, float fResetTime);
void __thiscall Char::CheckStateInNoMovement(Char *this);
void __thiscall Char::ActFlagCapture(Char *this);
bool __thiscall Char::ActBlendAction(Char *this, unsigned int uiBaseEventCode, unsigned int uiBlendEventCode);
void __thiscall Char::SetDoorAnimation(Char *this, float fTime, Char::DoorState eState);
unsigned int __thiscall Char::GetConditionAni(Char *this, CharAniType eType);
void __thiscall Char::GetoutOfPet(Char *this);
void __thiscall Char::RidePet(Char *this, int _nID);
void __thiscall Char::Move(Char *this, NiPoint3 *kTargetPos, bool bChangeMode, NiPoint3 *kForceDir, bool bSkillCancel);
bool __thiscall Char::Move(Char *this, NiPoint3 *kTargetPos, float fCurTime, bool bChangeMode, NiPoint3 *kForceDir, bool bSkillCancel);
bool __thiscall Char::IsAnimationEnd(Char *this);
bool __thiscall Char::ResetSequence(Char *this, unsigned int dwAniEventCode);
void __thiscall Char::ActSkillStand(Char *this, float fModifiedStartTime);
void __thiscall Char::ActInitStand(Char *this, bool bIsMob);
void __thiscall Char::UpdateAnimation(Char *this, float fTime);
void __thiscall Char::TryActDamage(Char *this, unsigned int uiDamage, bool bDotDmg);
void __thiscall Char::ActAction_BaseMode(Char *this, const char *pcActInxName);
void __thiscall Char::UpdateEmotion(Char *this, float fTime);
float __thiscall Char::StopEmotion(Char *this);
bool __thiscall Char::ActAction(Char *this, AniEventCode::Code1 eCode1, AniEventCode::Code2 eCode2);
void __thiscall Char::CancelSkillAction(Char *this, bool bMoveStop);
bool __thiscall Char::SetTargetAnimation(Char *this, unsigned int uiAniEventCode, bool bForceToAnimate, bool bForceLoopAni);
bool __thiscall Char::SetWeightedTargetAnimation(Char *this, unsigned int uiAniEventCode, eActionWeight eActWeight);
void __thiscall Char::OnDead(Char *this);
void __thiscall Char::ActCombatStand(Char *this);
void __thiscall Char::OnWarpMove(Char *this, SHINE_XY_TYPE targetpoint, unsigned __int16 SkillID);
void __thiscall Char::Attack(Char *this, Char *pkChar, char ucAttackNo);
bool __thiscall Char::CancelSkillActionWhenHitTimePassed(Char *this);
void __thiscall Char::ActWalk(Char *this);
void __thiscall Char::ActRun(Char *this);
void __thiscall Char::ActCriticalStun(Char *this);
void __thiscall Char::ActDamage1(Char *this);
void __thiscall Char::ActDie1(Char *this);
void __thiscall Char::ActAttack1_1(Char *this);
void __thiscall Char::ActAttack1_2(Char *this);
void __thiscall Char::ActAttack1_3(Char *this);
void __thiscall Char::ActSkill(Char *this, Char *pkChar, Skill::Type eSkillType, unsigned __int16 kSkillID);
void __thiscall Char::ActSkill(Char *this, unsigned int x, unsigned int y, Skill::Type eSkillType, unsigned __int16 kSkillID);
bool __thiscall Char::RideOn(Char *this, Char *pkMover, NiPointer<NiNode> spMoverCarrierNode, bool bViewChar, unsigned int uiSlot);
bool __thiscall Char::RideOff(Char *this);
bool __thiscall Char::AnimationStopWhenHitTime(Char *this);
bool __thiscall Char::Shoot(Char *this);
void __thiscall Char::ActImmediateShotEffect(Char *this);
void __thiscall Char::UpdateSkillAnimation(Char *this, float fTime);
NiPoint3 *__cdecl operator_(NiPoint3 *result, float fScalar, NiPoint3 *pt);
void __thiscall NiCollisionData::SetCollisionMode(NiCollisionData *this, NiCollisionData::CollisionMode eCollision);
void __thiscall NiD3DShaderLibrary::SetShaderLibraryDesc(NiD3DShaderLibrary *this, NiShaderLibraryDesc *pkLibDesc);
void __thiscall CRidePetCtl::ActRun(CRidePetCtl *this);
void __thiscall CRidePetCtl::ActWalk(CRidePetCtl *this);
void __thiscall CRidePetCtl::SpecialAction(CRidePetCtl *this);
void __thiscall Char::OpenDoor(Char *this);
void __thiscall Char::CloseDoor(Char *this);
unsigned int __cdecl MobConditionViewTab::GetEventCode(const char *pcMobInx, CharAniType AniType, unsigned int AniLv);
bool __thiscall CSpactralGlow_Shader_Controller::IsEnable(CSpactralGlow_Shader_Controller *this);
bool __thiscall CarToonShader::ToonShader(CarToonShader *this, NiGeometry *pTargetGeo);
bool __thiscall CarToonShader::EraseToonShader(CarToonShader *this, NiGeometry *pTargetGeo);
void __thiscall CSpactralGlow_Shader_Controller::CSpactralGlow_Shader_Controller(CSpactralGlow_Shader_Controller *this);
void __thiscall CSpactralGlow_Shader_Controller::_CSpactralGlow_Shader_Controller(CSpactralGlow_Shader_Controller *this);
bool __thiscall CSpactralGlow_Shader_Controller::SetTarget(CSpactralGlow_Shader_Controller *this, NiNode *pTargetObjNode);
Ns_TourScene::TS_RESULT __thiscall FindChildGeometry::ProcessData(FindChildGeometry *this, NiAVObject *_pkObject, void *_pData);
void __thiscall CarToonShader::_CarToonShader(CarToonShader *this);
bool __thiscall CarToonShader::SetCartoonShader(CarToonShader *this, NiNode *pTargetObjNode);
bool __thiscall CSpactralGlow_Shader_Controller::ShaderSetting_Geometry(CSpactralGlow_Shader_Controller *this, NiGeometry *pTargetGeo);
void __thiscall CSpactralGlow_Shader_Controller::SetUseShaderName(CSpactralGlow_Shader_Controller *this, char *pcShaderName1, char *pcShaderName2);
bool __thiscall CarToonShader::SetOutLine(CarToonShader *this, bool bOutLine);
bool __thiscall CSpactralGlow_Shader_Controller::ShaderSetting(CSpactralGlow_Shader_Controller *this);
Ns_TourScene::TS_RESULT __thiscall Find_EF_ExtraData::ProcessData(Find_EF_ExtraData *this, NiAVObject *_pkObject, void *_pData);
void __thiscall CarToonShader::CarToonShader(CarToonShader *this);
CarToonShader *__cdecl CarToonShader::GetInstance();
bool __thiscall CarToonShader::SetExceptOutLineCartoonShader(CarToonShader *this, NiNode *pTargetObjNode);
bool __thiscall CSpactralGlow_Shader_Controller::NormalSetting(CSpactralGlow_Shader_Controller *this);
bool __thiscall CSpactralGlow_Shader_Controller::SetEnable(CSpactralGlow_Shader_Controller *this, bool bEnalbe);
bool __thiscall CSpactralGlow_Shader_Controller::SetupRecursive(CSpactralGlow_Shader_Controller *this, NiNode *pTarget);
void __thiscall NiTArray<NiCollisionGroup::Record__>::SetAt(NiTArray<NiVBChip *> *this, unsigned int uiIndex, NiVBChip *const *element);
void *__thiscall NiTArray<NiNode__>::_scalar_deleting_destructor_(NiTArray<NiNode *> *this, unsigned int);
void *__thiscall NiTArray<NiGeometry__>::_scalar_deleting_destructor_(NiTArray<NiGeometry *> *this, unsigned int);
void __thiscall FindChildGeometry::_FindChildGeometry(FindChildGeometry *this);
void __thiscall Find_EF_ExtraData::_Find_EF_ExtraData(Find_EF_ExtraData *this);
void *__thiscall CSpactralGlow_Shader_Controller::_scalar_deleting_destructor_(CSpactralGlow_Shader_Controller *this, unsigned int);
void *__thiscall CarToonShader::_vector_deleting_destructor_(CarToonShader *this, unsigned int);
char __cdecl CharClass::GetRace(char kClassID);
bool __cdecl CharClass::TestChrBaseClassMask(__int64 kClassMask, char kBaseClassID);
char __cdecl CharClass::GetMinimumChrClass(__int64 kClassMask, char kBaseClassID);
const __int64 __cdecl CharClass::GetBitbyClassType(UseClassType kClassType);
void __cdecl CharClass::GetEquipableClassStr(__int64 kClassMask, char *pcStr, unsigned int uiStrLen);
void __cdecl CharClass::GetEquipableClassSortStr(__int64 kClassMask, char *pcStr, unsigned int uiStrLen);
UseClassTypeInfo *__cdecl UseCalssTypeTable::GetClassByClassType(UseClassType kClassType);
void __thiscall JumpProcessor::ForceEnd(JumpProcessor *this, bool bStop);
bool __thiscall JumpProcessor::OnEnd(JumpProcessor *this);
void __thiscall JumpProcessor::SetCurPos(JumpProcessor *this, NiPoint3 *pos3StartPos);
float __thiscall JumpProcessor::GetCameraPos(JumpProcessor *this);
bool __thiscall JumpProcessor::IsJump(JumpProcessor *this);
bool __thiscall JumpProcessor::Jump(JumpProcessor *this, float fTime, NiPoint3 pos3StartPos);
void __thiscall JumpProcessor::SetJumpAni(JumpProcessor *this, unsigned int uiJumpStart_Stand, unsigned int uiJumpStart_Run, unsigned int uiJumpFly, unsigned int uiJumpLandingStand, unsigned int uiJumpLandingMove);
void __thiscall ActionMgr::PlaySoundA(ActionMgr *this, int iSndIndex, ActionInfo *pkActionInfo);
int __thiscall ActionMgr::GetKeyStrToInt(ActionMgr *this, char *KeywordStr);
void __thiscall JumpProcessor::clear(JumpProcessor *this);
void __thiscall JumpProcessor::JumpProcessor(JumpProcessor *this);
bool __thiscall JumpProcessor::IsJumpEnd(JumpProcessor *this, float fHeight);
bool __thiscall JumpProcessor::IsJumpAniState(JumpProcessor *this);
void __thiscall ActionMgr::PlayEffect(ActionMgr *this, int iEffIndex, ActionInfo *pkActionInfo);
bool __thiscall ActionMgr::UseOldActionEffect(ActionMgr *this);
float __thiscall JumpProcessor::Update(JumpProcessor *this, float fTime);
void __thiscall ActionMgr::UpdateActionTable(ActionMgr *this, Char *pkTargetChar);
ActionEffectInfo *__thiscall ActionMgr::GetSE(ActionMgr *this, NiControllerSequence *pkCatchedSeq);
void __thiscall ActionMgr::ClearAEEff(ActionMgr *this);
void __thiscall ActionMgr::UpdateAE(ActionMgr *this, Char *pkTargetChar, NiControllerSequence *pkSeq);
ActionEffectInfo *__thiscall ActionMgr::GetFirstAE(ActionMgr *this, ActionMgr::eACTIONEFF_TYPE eType, bool bDelInfo);
void __thiscall ActionMgr::_ActionMgr(ActionMgr *this);
bool __thiscall ActionMgr::AddAEEff(ActionMgr *this, ActionMgr::eACTIONEFF_TYPE eType, NiTextKey *Value);
void __thiscall ActionMgr::ActionMgr(ActionMgr *this);
void __thiscall ActionMgr::CatchAEEff(ActionMgr *this, bool bForceLoading);
void __thiscall ActionMgr::UpdateAEEff(ActionMgr *this, Char *pkTargetChar);
void __thiscall ActionMgr::SetActionStartTime(ActionMgr *this, float fTime);
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode);
void *__thiscall ActionMgr::_scalar_deleting_destructor_(ActionMgr *this, unsigned int);
void __thiscall CharMgr::DeleteAvatar(CharMgr *this, Char *pkAvatar);
bool __thiscall CharMgr::LoadChar(CharMgr *this, CharMgr::LoadData *Chardata);
void __thiscall CharMgr::UpdateAvatar(CharMgr *this, float fCurTime);
Char *__thiscall CharMgr::GetChar(CharMgr *this, char *pcName);
Char *__thiscall CharMgr::GetChar(CharMgr *this, Name5 kID);
Char *__thiscall CharMgr::GetChar(CharMgr *this, Char *_pkChar);
unsigned __int16 __thiscall CharMgr::FindFirstCharHandleByMobID(CharMgr *this, unsigned __int16 MobID);
void __thiscall CharMgr::OutLineEnable(CharMgr *this, bool bEnable);
Char *__thiscall CharMgr::GetUserChar(CharMgr *this, Name5 kID);
Char *__thiscall CharMgr::GetUserChar(CharMgr *this, char *pcName);
void __thiscall CharMgr::UpdateNpcActionEvent(CharMgr *this, PROTO_NC_SCENARIO_PLAYERLIKEMOB_ANIMATE_CMD *pkProto);
Char *__thiscall CharMgr::GetCharByNodePtr(CharMgr *this, NiNode *pkNode);
Char *__thiscall CharMgr::GetChar(CharMgr *this, unsigned __int16 kHandle);
bool __thiscall CharMgr::Init(CharMgr *this);
Char *__thiscall CharMgr::AddCharQue(CharMgr *this, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel);
Mover *__thiscall CharMgr::AddMover(CharMgr *this, unsigned int kMoverID, unsigned __int16 kMoverHandle, int iHP, char nGrade, NiPoint3 *kPos, NiPoint3 *kDir);
Mover *__thiscall CharMgr::AddMover(CharMgr *this, PROTO_NC_BRIEFINFO_REGENMOVER_CMD *p);
bool __thiscall CharMgr::AddMover(CharMgr *this, PROTO_NC_BRIEFINFO_MOVER_CMD *p);
Avatar *__thiscall CharMgr::AddAvatar(CharMgr *this, PROTO_AVATARINFORMATION *p, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiFrame);
Avatar *__thiscall CharMgr::AddAvatar(CharMgr *this, PROTO_AVATAR_SHAPE_INFO *pkInfo, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiFrame);
void __thiscall CharMgr::_CharMgr(CharMgr *this);
Char *__thiscall CharMgr::AddChar(CharMgr *this, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel);
void __thiscall CharMgr::DeleteChar(CharMgr *this, Char *pkChar);
bool __thiscall CharMgr::ImmediatelyLoadQueueingChar(CharMgr *this, Char *pkChar);
void __thiscall CharMgr::CharMgr(CharMgr *this);
void __thiscall CharMgr::Remove(CharMgr *this, Char *pkChar);
void __thiscall CharMgr::RemoveAll(CharMgr *this);
void __thiscall CharMgr::RemoveAllWithoutMainChar(CharMgr *this);
void __thiscall CharMgr::RemoveAllWithoutMainCharAndNPC(CharMgr *this);
void __thiscall CharMgr::RemoveFarCharWithoutMainChar(CharMgr *this);
void __thiscall CharMgr::Update(CharMgr *this, float fCurTime);
Char *__thiscall CharMgr::AddMob(CharMgr *this, unsigned __int16 kMobID, unsigned __int16 kHandle, NiPoint3 *kPos, NiPoint3 *kDir, bool bDoor, bool bDead);
Char *__thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_BUILDDOOR_CMD *p);
Char *__thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *p);
bool __thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_MOB_CMD *p);
Char *__thiscall CharMgr::AddCharQue(CharMgr *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p);
Char *__thiscall CharMgr::AddChar(CharMgr *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p, unsigned int uiFrameWork);
bool __thiscall CharMgr::AddChar(CharMgr *this, PROTO_NC_BRIEFINFO_CHARACTER_CMD *p);
Pet *__thiscall CharMgr::AddPet(CharMgr *this, unsigned int kPetID, unsigned __int16 kPetHandle, NiPoint3 *kPos, NiPoint3 *kDir, const char *pcName);
Pet *__thiscall CharMgr::AddPet(CharMgr *this, PROTO_NC_BRIEFINFO_REGENPET_CMD *p);
bool __thiscall CharMgr::AddPet(CharMgr *this, PROTO_NC_BRIEFINFO_PET_CMD *p);
bool __thiscall CharMgr::DeleteChar(CharMgr *this, PROTO_NC_MAP_LOGOUT_CMD *p);
void __thiscall CharMgr::Terminate(CharMgr *this);
bool __thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_DOOR_CMD *p);
PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *__thiscall PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD::operator_(PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *__that);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>(NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *this, unsigned int);
CharMgr::LoadData *__thiscall CharMgr::LoadData::operator_(CharMgr::LoadData *this, CharMgr::LoadData *__that);
void __thiscall CharMgr::LoadData::LoadData(CharMgr::LoadData *this, Char *_pkChar, char _kClassID, char _byGender, NiPoint3 _kPos, NiPoint3 _kDir, int _nEquipLevel);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,Char *> *this, unsigned int);
void __thiscall NiTPointerList<Char__>::_NiTPointerList<Char__>(NiTPointerList<Char *> *this);
void __thiscall PgTList<Char__>::_PgTList<Char__>(PgTList<Char *> *this);
void *__thiscall PgTList<Char__>::_vector_deleting_destructor_(PgTList<Char *> *this, unsigned int);
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Growmap(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, unsigned int _Count);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Make_iter(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Where);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::operator_(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, int _Off);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move_backward<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest, std::_Nonscalar_ptr_iterator_tag __formal);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::push_back(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, CharMgr::LoadData *_Val);
CharMgr::LoadData *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::front(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move_backward<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *result, const unsigned int *_Keyval);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *result, const unsigned __int16 *_Keyval);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::erase(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First_arg, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last_arg);
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Tidy(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this);
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this);
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::erase(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Where);
std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Pnode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this);
char *__cdecl Folder::Item();
char *__cdecl Folder::Ctrl();
ChrClassType __cdecl CharClass::GetChrClassType(char kClassID);
unsigned int __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::KeyToHashIndex(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key);
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Max(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Pnode);
void __thiscall NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this);
void __thiscall CharResMgr::RemoveAllMobActor(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllCharSet(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllHair(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllFace(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllDropItem(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllItemUpgradeTextureEffect(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllHairDetailTexture(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllFaceTexture(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllFaceTattoo(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllClosedEye(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllSetTexture(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllController(CharResMgr *this);
void __thiscall CharResMgr::RemoveQuestInfo(CharResMgr *this);
void __thiscall BonePartitionReCreate::BonePartitionReCreate(BonePartitionReCreate *this, int BoneNum);
NiActorManager *__thiscall CharResMgr::GetPigeonActor(CharResMgr *this);
bool __thiscall CharResMgr::CreateAnimationController(CharResMgr *this);
bool __thiscall CharResMgr::CreateCharShakeNode(CharResMgr *this);
NiNode *__thiscall CharResMgr::GetCharShakeNode(CharResMgr *this);
Ns_TourScene::TS_RESULT __thiscall BonePartitionReCreate::ProcessData(BonePartitionReCreate *this, NiAVObject *_pkObject, void *_pData);
NiNode *__thiscall CharResMgr::GetQuestInfo(CharResMgr *this, unsigned int dwQuestInfo, bool bLowRepeat);
NiActorManager *__thiscall CharResMgr::GetRidePetActor(CharResMgr *this, unsigned __int16 kPetID);
NiActorManager *__thiscall CharResMgr::GetMobActor(CharResMgr *this, unsigned __int16 kMobID);
CharSet *__thiscall CharResMgr::GetCharSet(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo);
NiSourceTexture *__thiscall CharResMgr::GetHairDetailTexture(CharResMgr *this, unsigned int dwID, const char *pchFileName);
NiNode *__thiscall CharResMgr::GetFace(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wFaceType);
NiSourceTexture *__thiscall CharResMgr::GetFaceTexture(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo);
NiSourceTexture *__thiscall CharResMgr::GetFaceTattoo(CharResMgr *this, unsigned __int16 wNo);
NiSourceTexture *__thiscall CharResMgr::GetClosedEyeTexture(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo);
NiNode *__thiscall CharResMgr::GetDropItem(CharResMgr *this, unsigned __int16 kItemID);
NiNode *__thiscall CharResMgr::GetItemUpgradeTextureEffect(CharResMgr *this, char ucEffNo);
void __thiscall CharResMgr::ResetProperty(CharResMgr *this, NiAVObject *pkObject);
char __thiscall CharResMgr::GetResourcePath(CharResMgr *this, char *pResultPath, bool bNIFFile, const char *pcResourceName, char byGender, char kClassID);
bool __thiscall CharResMgr::LoadCharSetRes(CharResMgr *this, char kClassID);
bool __thiscall CharResMgr::LoadFaceTexture(CharResMgr *this, char kClassID);
bool __thiscall CharResMgr::PreLoadItemUgradeTextureEffects(CharResMgr *this);
NiSourceTexture *__thiscall CharResMgr::GetSetTexture(CharResMgr *this, char kClassID, char byGender, unsigned __int16 kItemID);
bool __thiscall CharResMgr::LoadAllCharSetRes(CharResMgr *this);
bool __thiscall CharResMgr::LoadAllFaceTexture(CharResMgr *this);
NiControllerSequence *__thiscall CharResMgr::GetControllerSequence(CharResMgr *this, char kClassID, char byGender, unsigned int dwAniEventCode);
NiActorManager *__thiscall CharResMgr::GetMoverActor(CharResMgr *this, unsigned int kMoverID);
NiActorManager *__thiscall CharResMgr::GetPetActor(CharResMgr *this, unsigned int kPetID);
NiTexture *__thiscall CharResMgr::GetHairBaseTexFromMap(CharResMgr *this, HairInfo *pkHairInfo, char kClassID, char byGender, unsigned int uiType);
void __thiscall CharResMgr::RemoveAllItem(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllHairTexture(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllHouse(CharResMgr *this);
NiNode *__thiscall CharResMgr::GetHouse(CharResMgr *this, unsigned int dwHouse);
NiNode *__thiscall CharResMgr::GetHair(CharResMgr *this, char kClassID, char byGender, char byHairIndexID, char byPartsNum, const char *pchModelName, const char *pchTexName);
void __thiscall CharResMgr::SetHairTexture2TargetNode(CharResMgr *this, NiNode *pkTargetNode, char byGender, char kClassID, const char *pchTexName);
NiTexture *__thiscall CharResMgr::GetItemTexture(CharResMgr *this, const char *szName, char byPathRuleType);
NiNode *__thiscall CharResMgr::GetSubItem(CharResMgr *this, const char *szName, char kClassID, char byGender, const char *szTexName);
void __thiscall CharResMgr::LoadHairParts(CharResMgr *this, char kClassID, char byGender, char byIndexID, char byPartsIndex, bool bUseLink, const char *pchModelName, const char *pchTexName);
bool __thiscall CharResMgr::PreLoadMinihouseRes(CharResMgr *this);
NiNode *__thiscall CharResMgr::GetItem(CharResMgr *this, unsigned __int16 kItemID, char byPathRuleType);
bool __thiscall CharResMgr::LoadHairSet(CharResMgr *this, char kClassID, char byGender, HairInfo *pkHairInfo);
bool __thiscall CharResMgr::PreLoadItemRes(CharResMgr *this);
bool __thiscall CharResMgr::LoadAllHairSetRes(CharResMgr *this);
bool __thiscall CharResMgr::PreLoadCharRes(CharResMgr *this);
void __thiscall CharResMgr::RemoveAllCharActor(CharResMgr *this);
void __thiscall CharResMgr::Terminate(CharResMgr *this);
void __thiscall CharResMgr::_CharResMgr(CharResMgr *this);
NiActorManager *__thiscall CharResMgr::GetCharActor(CharResMgr *this, char kClassID, char byGender, unsigned int uiFrame);
void __thiscall CharResMgr::CharResMgr(CharResMgr *this);
bool __thiscall CharResMgr::CreateCharActorAndBaseSet(CharResMgr *this, char kClassID, char byGender);
bool __thiscall CharResMgr::Init(CharResMgr *this);
void __thiscall std::_Tree_val<std::_Tmap_traits<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>_0>>::__Tree_val<std::_Tmap_traits<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>_0>>(std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this);
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Wherenode);
unsigned int __cdecl ITableBase<ChrBasicEquip_ChrBasicEquipTab>::GetTotal();
Ns_TourScene::TS_RESULT __thiscall ResetTexture::ProcessData(ResetTexture *this, NiAVObject *_pkObject, void *_pData);
void __thiscall CharResMgr::AddHouseToMap(CharResMgr *this, NiNode *pkNode, unsigned int dwHouseID);
void __thiscall NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>(NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> > *this);
void __thiscall NiTMap<unsigned_long_NiPointer<NiActorManager>>::_NiTMap<unsigned_long_NiPointer<NiActorManager>>(NiTMap<unsigned long,NiPointer<NiActorManager> > *this);
void __thiscall NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>(NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> > *this);
void __thiscall NiTMap<unsigned_long_NiPointer<CharSet>>::_NiTMap<unsigned_long_NiPointer<CharSet>>(NiTMap<unsigned long,NiPointer<CharSet> > *this);
void __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> > *this);
void __thiscall NiTMap<unsigned_long_NiPointer<NiNode>>::_NiTMap<unsigned_long_NiPointer<NiNode>>(NiTMap<unsigned long,NiPointer<NiNode> > *this);
void __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> > *this);
void __thiscall NiTMap<unsigned_char_NiPointer<NiNode>>::_NiTMap<unsigned_char_NiPointer<NiNode>>(NiTMap<unsigned char,NiPointer<NiNode> > *this);
void __thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> > *this);
bool __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *this, const char *key, NiPointer<NiShaderLibrary> *val);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NpSIF_Tool>>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexturingProperty> > *this, NiTMapItem<char const *,NiPointer<NiTexturingProperty> > *pkItem, const char *key, NiPointer<NiTexturingProperty> val);
void __thiscall NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_NiTMap<unsigned_long_NiPointer<NiSourceTexture>>(NiTMap<unsigned long,NiPointer<NiSourceTexture> > *this);
void *__thiscall NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_scalar_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> > *this, unsigned int);
void *__thiscall NiTMap<unsigned_long_NiPointer<NiActorManager>>::_scalar_deleting_destructor_(NiTMap<unsigned long,NiPointer<NiActorManager> > *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> > *this, unsigned int);
void *__thiscall NiTMap<unsigned_long_NiPointer<CharSet>>::_scalar_deleting_destructor_(NiTMap<unsigned long,NiPointer<CharSet> > *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> > *this, unsigned int);
void *__thiscall NiTMap<unsigned_long_NiPointer<NiNode>>::_vector_deleting_destructor_(NiTMap<unsigned long,NiPointer<NiNode> > *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> > *this, unsigned int);
void *__thiscall NiTMap<unsigned_char_NiPointer<NiNode>>::_scalar_deleting_destructor_(NiTMap<unsigned char,NiPointer<NiNode> > *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> > *this, unsigned int);
void *__thiscall NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vector_deleting_destructor_(NiTMap<unsigned long,NiPointer<NiSourceTexture> > *this, unsigned int);
char __cdecl ChrBasicEquipTab::GetByIndex(ChrClassType eChrClassType, char byGender);
NiKFMTool::Sequence *__thiscall NiKFMTool::GetSequence(NiKFMTool *this, unsigned int uiSequenceID);
char *__cdecl CharClass::GetBaseEngName(char kClassID);
NiActorManager *__thiscall CharResMgr::GetCharActorFromMap(CharResMgr *this, char kClassID, char byGender);
NiActorManager *__thiscall CharResMgr::GetCharActorFromMap_NoClone(CharResMgr *this, char kClassID, char byGender);
NiActorManager *__thiscall CharResMgr::GetRidePetActorFromMap(CharResMgr *this, unsigned __int16 wPetID);
NiActorManager *__thiscall CharResMgr::GetMoverActorFromMap(CharResMgr *this, unsigned int kMoverID);
NiActorManager *__thiscall CharResMgr::GetPetActorFromMap(CharResMgr *this, unsigned int kPetID);
NiActorManager *__thiscall CharResMgr::GetMobActorFromMap(CharResMgr *this, unsigned __int16 kMobID);
CharSet *__thiscall CharResMgr::GetCharSetFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo);
NiNode *__thiscall CharResMgr::GetHouseFromMap(CharResMgr *this, unsigned int dwHouseID);
NiNode *__thiscall CharResMgr::GetQuestInfoFromMap(CharResMgr *this, unsigned int dwQuestInfo);
NiNode *__thiscall CharResMgr::GetHairFromMap(CharResMgr *this, char kClassID, char byGender, char byID, char byPartsNum);
NiNode *__thiscall CharResMgr::GetFaceFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wType);
NiNode *__thiscall CharResMgr::GetItemFromMap(CharResMgr *this, unsigned __int16 kItemID, char byParsingType);
NiNode *__thiscall CharResMgr::GetDropItemFromMap(CharResMgr *this, unsigned __int16 kItemID);
NiSourceTexture *__thiscall CharResMgr::GetFaceTextureFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo);
NiSourceTexture *__thiscall CharResMgr::GetSetTextureFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 kItemID);
void __thiscall CharResMgr::AddMoverActorToMap(CharResMgr *this, NiActorManager *pkActor, unsigned int kMoverID);
void __thiscall CharResMgr::AddPetActorToMap(CharResMgr *this, NiActorManager *pkActor, unsigned int kPetID);
NiSourceTexture *__thiscall CharResMgr::GetClosedEyeFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo);
void __thiscall CharResMgr::AddSetTextureToMap(CharResMgr *this, NiSourceTexture *pkTexture, char kClassID, char byGender, unsigned __int16 kItemID);
NiTMapItem<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *__thiscall NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::NewItem(NiTMap<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *this);
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::find(...);
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *_Rootnode);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Insert(...);
NiNode *__thiscall CharResMgr::GetSubItemFromMap(CharResMgr *this, const char *szName);
NiTexture *__thiscall CharResMgr::GetSubItemTextureMap(CharResMgr *this, const char *szName);
NiTexture *__thiscall CharResMgr::GetItemTextureMap(CharResMgr *this, const char *szName);
NiTexture *__thiscall CharResMgr::GetMiniHouseTextureMap(CharResMgr *this, const char *szName);
NiTexture *__thiscall CharResMgr::GetHairTextureFromMap(CharResMgr *this, const char *szName);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(...);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>(std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *this, std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *_Right);
NiPointer<NiControllerSequence> *__thiscall std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>::operator__(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this, const unsigned int *_Keyval);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Insert(...);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>>__>(...);
std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *__thiscall std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>::operator_(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this, std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *_Right);
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>>(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *this);
void __thiscall std::map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>::_map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this);
NiPointer<NiTexture> *__thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval);
void __thiscall std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>::_pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>(std::pair<NiActorManager * const,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > > *this);
void __thiscall CharResMgr::AddSubItemToMap(CharResMgr *this, NiNode *pkNode, const char *szName);
void __thiscall CharResMgr::AddSubItemTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName);
void __thiscall CharResMgr::AddItemTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName);
void __thiscall CharResMgr::AddMiniHouseTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName);
void __thiscall CharResMgr::AddHairTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName);
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(...);
int ____Buynode_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std______Tree_val_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allo(...);
void __thiscall std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std *this, std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *_Rootnode);
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Linsert(...);
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(...);
std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *__thiscall std::map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>>::operator__(std::map<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std::pair<NiActorManage *this, NiActorManager *const *_Keyval);
void __thiscall std::map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>>::_map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>(std::map<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std::pair<NiActorManage *this);
void __thiscall CharSet::CharSet(CharSet *this);
void __thiscall CharSet::_CharSet(CharSet *this);
bool __thiscall CharSet::SetNormalGeometry(CharSet *this);
bool __thiscall CharSet::SetLodGeometry(CharSet *this, int _nLodLevel, const char *_pLodNodeName);
bool __thiscall CharSet::Init(CharSet *this, NiNode *pkNode);
void *__thiscall CharSet::_scalar_deleting_destructor_(CharSet *this, unsigned int);
void __thiscall CharShape::SetRidePetID(CharShape *this, unsigned int uiID);
unsigned int __thiscall CharShape::GetRidePetID(CharShape *this);
void __thiscall CharShape::ClearEquipInfo(CharShape *this);
unsigned __int16 __thiscall CharShape::GetRightHandEquipppedItemID(CharShape *this, char *rbyUpgrade);
unsigned __int16 __thiscall CharShape::GetLeftHandEquippedItemID(CharShape *this, char *rbyUpgrade);
unsigned __int16 __thiscall CharShape::GetRightHandAccItemID(CharShape *this);
unsigned __int16 __thiscall CharShape::GetLeftHandAccItemID(CharShape *this);
unsigned __int16 __thiscall CharShape::GetCosShieldItemID(CharShape *this);
void __thiscall CharShape::ShowLinkNode(CharShape *this, CharShape::LinkIndex eLinkIndex, bool bShow);
void __thiscall CharShape::ShowAllLinkNode(CharShape *this, bool bShow);
void __thiscall CharShape::SetAnotherEyeShape(CharShape *this, NiNode *pkShapeNode);
void __thiscall CharShape::ResetAnotherEyeShape(CharShape *this);
bool __thiscall CharShape::IsSpactralGlowEnable(CharShape *this);
bool __thiscall CharShape::SetSPactralGlowEnable(CharShape *this, bool bEnable);
void __thiscall CharShape::SetShowMiniMonAutoPickEff(CharShape *this, bool bShow);
void __thiscall CharShape::ShowMinimonAutoUseEff(CharShape *this, bool bShow);
CSpactralGlow_Shader_Controller *__thiscall CharShape::GetShader_Ctrl(CharShape *this);
void __thiscall CharShape::SetGTIBomb(CharShape *this, bool b);
void __thiscall ItemUpGrade::GetEffectHandle(ItemUpGrade *this, unsigned int _uiEquipPos, unsigned int *_dwEffectIndex0, unsigned int *_dwEffectIndex1);
void __thiscall ItemUpGrade::RemoveEffect(ItemUpGrade *this, unsigned int _uiEquipPos);
void __thiscall ItemUpGrade::SetShow(ItemUpGrade *this, bool _bShow);
void __thiscall ItemUpGrade::SetShow(ItemUpGrade *this, unsigned int _uiEquipPos, bool _bShow);
void __thiscall CharShape::SetEquipInfo(CharShape *this, PROTO_EQUIPMENT *pkInfo);
void __thiscall CharShape::CatchHeight(CharShape *this);
bool __thiscall CharShape::Equip(CharShape *this, unsigned __int16 kItemID, char byUpdrade);
bool __thiscall CharShape::TextureFace(CharShape *this, NiTexture *pkTexture);
bool __thiscall CharShape::SetLodGeometry(CharShape *this, int _nLodLevel, const char *_pLodNodeName);
bool __thiscall CharShape::Link(CharShape *this, CharShape::LinkIndex eLinkIndex, NiNode *pkItemNode, unsigned int uiEquipPos);
bool __thiscall CharShape::CatchFaceGeom(CharShape *this, NiAVObject *pkObject);
bool __thiscall CharShape::LookAt(CharShape *this, NiPoint3 *kLookAt);
void __thiscall CharShape::SetHairPartsVisible(CharShape *this, char byVisibleMask);
ItemInfo *__thiscall CharShape::GetEquippedWeaponItemInfo(CharShape *this);
unsigned int __thiscall CharShape::Get3thAniEventCodeByWeapon(CharShape *this);
void __thiscall CharShape::StopWeaponAfterImgEff(CharShape *this);
void __thiscall CharShape::EnableEyeShape(CharShape *this, char byEnableType);
void __thiscall CharShape::ShowItemUpgradeEffect(CharShape *this, bool _bShow);
void __thiscall CharShape::ShowItemUpgradeEffect(CharShape *this, unsigned int _uiEquipPos, bool _bShow);
void __thiscall CharShape::DetachOtherSideNode(CharShape *this, NiNode *pkNode, char *kNodeName);
ItemInfo *__thiscall CharShape::GetEquippedShiledItemInfo(CharShape *this);
void __thiscall ItemUpGrade::SetEffectHandle(ItemUpGrade *this, unsigned int _uiEquipPos, unsigned int _dwEffectIndex0, unsigned int _dwEffectIndex1);
void __thiscall CharShape::SetShapeInfo(CharShape *this, PROTO_AVATAR_SHAPE_INFO *pkInfo);
void __thiscall CharShape::SetVisibleSubParts(CharShape *this, CharShape::LinkIndex enumIndex, bool bVisible);
NiNode *__thiscall CharShape::SetSubItem(CharShape *this, CharShape::LinkIndex enumIndex, const char *szNifName, const char *szSubItemTextureName, const char *szSubItemNode, CharShape::AttachType eAttachType);
bool __thiscall CharShape::Equip(CharShape *this, unsigned int uiEquipPos, unsigned __int16 kItemID, char byUpdrade);
bool __thiscall CharShape::Equip_LinkItem(CharShape *this, ItemInfo *pkItemInfo, unsigned int uiEquipPos, NiNode *pkNode, bool _bTwoHand);
bool __thiscall CharShape::TextureFace(CharShape *this, NiNode *pkTargetNode, NiTexture *pkTexture);
bool __thiscall CharShape::TextureClosedEye(CharShape *this, NiNode *pkTargetNode, NiTexture *pkTexture);
bool __thiscall CharShape::TextureFaceTattoo(CharShape *this, NiTexture *pkTexture);
bool __thiscall CharShape::TextureBody(CharShape *this, NiTexture *pkTexture);
bool __thiscall CharShape::TextureLeg(CharShape *this, NiTexture *pkTexture);
bool __thiscall CharShape::TextureShoes(CharShape *this, NiTexture *pkTexture);
NiNode *__cdecl FindBoneRootNodes(NiNode *pkNode);
void __thiscall CharShape::SetHairParts(CharShape *this, char byPartsIndex, char byIndexID, bool bUseLink, const char *pchModelName, const char *pchTexName);
void __thiscall CharShape::EquipAllAvatar(CharShape *this);
void __thiscall CharShape::EquipAll(CharShape *this);
void __thiscall CharShape::Update(CharShape *this, float fTime);
void __thiscall CharShape::StartWeaponAfterImgEff(CharShape *this, float fCurTime, float fLifeTime);
void __thiscall CharShape::SetMiniMonEffect(CharShape *this, bool bIsAttach);
void __thiscall CharShape::SetMinimonAutoUseEff(CharShape *this, bool bIsAttach);
void __thiscall CharShape::StartChestAfterImgEff(CharShape *this);
void __cdecl CatchAllGeometry(NiAVObject *pkObject, PgTList<NiGeometry *> *kList);
void __thiscall CharShape::UpdateFaceShape(CharShape *this);
void __thiscall CharShape::RemoveMinimonEff(CharShape *this, unsigned int uiUnEquipPos, MinimonRoleType RoleType);
void __thiscall CharShape::ClearModelPart(CharShape *this);
bool __thiscall CharShape::SetMobModelPart(CharShape *this, NiNode *pkNode);
bool __thiscall ItemUpGrade::SetUpgradeTextureEff(ItemUpGrade *this, NiNode *_pNode, char ucEffNo, std::list<char *,std::allocator<char *> > *AttachedNode);
void __thiscall CharShape::RemoveAllSubItem(CharShape *this, unsigned int uiEquipPos_Enum);
bool __thiscall CharShape::SetCharModelPart(CharShape *this, NiNode *pkNode);
void __thiscall CharShape::HideAllHair(CharShape *this);
bool __thiscall CharShape::SetHairDetailMap(CharShape *this, unsigned int uiHaircolorID);
void __thiscall CharShape::_CharShape(CharShape *this);
bool __thiscall CharShape::SetModelPart(CharShape *this, NiNode *pkNode);
void __thiscall CharShape::MakeHairSet(CharShape *this, char byID);
void __thiscall CharShape::CharShape(CharShape *this);
bool __thiscall CharShape::SetSubItem(CharShape *this, ItemEquipEnum eEquipPos, DummyTypeEnum eInx, const char *szNifName, const char *szSubItemTextureName, const char *szSubItemNode);
bool __thiscall ItemUpGrade::UpGradeItem(ItemUpGrade *this, Item *_pItem, NiNode *_pNode, ItemEquipEnum eEquipNum);
void __thiscall CharShape::CreateWeaponCostumeEffect(CharShape *this, ItemInfo *pkItemInfo, NiNode *pkNode);
void __thiscall CharShape::CreateShieldCostumeEffect(CharShape *this, ItemInfo *pkItemInfo, NiNode *pkNode);
void __thiscall CharShape::EquipSubItem(CharShape *this, ItemInfo *pkItemInfo, ItemViewInfo *pkViewInfo);
bool __thiscall CharShape::ChangeBoneLODController(CharShape *this, int _nLodLevel, NiGeometry *_pkDestGeom, NiGeometry *_pkSrcGeom, NiGeometry *_pkNewGeom);
bool __thiscall CharShape::ChangeGeom(CharShape *this, NiGeometry **pkCurGeom, NiGeometry *pkChgGeom, int nLodLevel);
bool __thiscall CharShape::SetBody(CharShape *this, CharSet *pkSet);
bool __thiscall CharShape::SetLeg(CharShape *this, CharSet *pkSet);
bool __thiscall CharShape::SetShoes(CharShape *this, CharSet *pkSet);
bool __thiscall CharShape::Equip_SetItem(CharShape *this, unsigned int uiEquipPos, CharSet *pkSet, NiTexture *pkTexture);
bool __thiscall CharShape::ResetBody(CharShape *this);
bool __thiscall CharShape::ResetLeg(CharShape *this);
bool __thiscall CharShape::ResetShoes(CharShape *this);
bool __thiscall CharShape::EquipBody(CharShape *this);
bool __thiscall CharShape::EquipLeg(CharShape *this);
bool __thiscall CharShape::EquipShoes(CharShape *this);
bool __thiscall CharShape::RemoveBody(CharShape *this);
bool __thiscall CharShape::RemoveLeg(CharShape *this);
bool __thiscall CharShape::RemoveShoes(CharShape *this);
void __thiscall CharShape::CheckOldCos(CharShape *this, ItemViewInfo *pkOldViewInfo, ItemEquipEnum eItemEquipType, bool *pbaRemovedStateFlag);
void __thiscall CharShape::MultiSlotCosUnEquip(CharShape *this, ItemViewInfo *pkOldViewInfo);
bool __thiscall CharShape::MultiSlotCosProcess(CharShape *this, ItemInfo *pkItemInfo);
bool __thiscall CharShape::Equip(CharShape *this, Item *_pItem);
bool __thiscall CharShape::Equip(CharShape *this, ItemInfo *pkItemInfo);
void __thiscall CharShape::ReEquipWeaponCostume(CharShape *this);
bool __thiscall CharShape::Equip(CharShape *this, unsigned __int16 kItemID);
bool __thiscall CharShape::UnEquip(CharShape *this, unsigned int uiEquipPos);
void __thiscall CharShape::ReEquipShieldCostume(CharShape *this);
void __thiscall CharShape::RestoreHatAcc(CharShape *this);
void __thiscall ItemUpGrade::RemoveAll(ItemUpGrade *this);
void __thiscall ItemUpGrade::_ItemUpGrade(ItemUpGrade *this);
bool __cdecl Math3D::FrontVectToRot(NiPoint3 *kFrontVect, NiMatrix3 *kRot);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>(NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *> *this, unsigned int);
void __thiscall FindCullUpdateNode::_FindCullUpdateNode(FindCDNode2 *this);
void __thiscall NiSkinInstance::NiSkinInstance(NiSkinInstance *this, NiSkinData *pkSkinData, NiAVObject *pkRootParent, NiAVObject **ppkBones);
NiRTTI *__thiscall NiSkinInstance::GetRTTI(NiSkinInstance *this);
void *__thiscall NiSkinInstance::_vector_deleting_destructor_(NiSkinInstance *this, unsigned int);
unsigned int __thiscall NiBoneLODController::GetSetAt(NiBoneLODController *this, int nInLodLevel, NiTriBasedGeom *pkInGeom, NiSkinInstance **pkOutSkinInst);
bool __thiscall NiBoneLODController::SetAt(NiBoneLODController *this, int nLodLevel, int nIndex, NiTriBasedGeom *pkGeom, NiSkinInstance *pkSkinInst);
void __thiscall NiBoneLODController::ReplaceSkinSet(NiBoneLODController *this, NiTriBasedGeom *pkOldSkin, NiTriBasedGeom *pkNewSkin);
void __thiscall NiGeometry::SetSkinInstance(NiGeometry *this, NiSkinInstance *pSkinInstance);
void __thiscall AfterImgEff::SetActor(AfterImgEff *this, NiActorManager *_pActor);
ItemInfo *__thiscall CharShape::GetEquippedCosWeaponItemInfo(CharShape *this);
bool __thiscall CharShape::LinkFace(CharShape *this, NiNode *pkNode);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>(NiTPointerList<NiGeometry *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_scalar_deleting_destructor_(NiTPointerList<NiGeometry *> *this, unsigned int);
void __thiscall PgTList<NiGeometry__>::_PgTList<NiGeometry__>(PgTList<NiGeometry *> *this);
ItemViewEquipTypeInfo *__cdecl ItemViewEquipTypeInfoTab::GetByIVET(IVEType eType);
UpEffectData *__cdecl UpEffectTab::GetObjByID(unsigned __int16 ID);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Newnode);
void *__thiscall PgTList<NiGeometry__>::_vector_deleting_destructor_(PgTList<NiGeometry *> *this, unsigned int);
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits< *__thiscall std::_Tree<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>::_Eqrange(std::_Tree<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits< *result, ItemEquipEnum *_Keyval);
void __thiscall std::list<NiAVObject___std::allocator<NiAVObject__>>::pop_front(std::list<NiAVObject *,std::allocator<NiAVObject *> > *this);
Ns_TourScene::TS_RESULT __thiscall FindHairNode::ProcessData(FindHairNode *this, NiAVObject *_pkObject, void *_pData);
Ns_TourScene::TS_RESULT __thiscall FindFaceNode::ProcessData(FindFaceNode *this, NiAVObject *_pkObject, void *_pData);
Ns_TourScene::TS_RESULT __thiscall FindGeometry::ProcessData(FindGeometry *this, NiAVObject *_pkObject, void *_pData);
void __thiscall std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *this, ABSTATEINDEX *_Val);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>::insert<std::pair<enum__ItemEquipEnum_const_NiNode__>>(std::_Tree<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,bool> *result, std::pair<enum ItemEquipEnum const ,NiNode *> *_Val);
std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *__cdecl ItemViewDummyTab::GetListByInxName(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *result, const char *InxName);
void *__thiscall CharShape::_vector_deleting_destructor_(CharShape *this, unsigned int);
void __thiscall FindBoneNode::_FindBoneNode(FindBoneNode *this);
void __thiscall FindBoneNode::FindBoneNode(FindBoneNode *this, NiNode **ppNode, int nArry, const char *szName);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > *__thiscall std::_Tree<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::find(std::_Tree<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > *result, PgWin *const *_Keyval);
Ns_TourScene::TS_RESULT __thiscall FindBoneNode::ProcessData(FindBoneNode *this, NiAVObject *_pkObject, void *_pData);
Char::AttackNO __thiscall MainChar::ChooseAttack(MainChar *this);
bool __thiscall MainChar::PositionSinkTest(MainChar *this, float fXPos, float fYPos);
void __thiscall MainChar::SetRevserveMovePos(MainChar *this, NiPoint3 *kPos);
NiPoint3 *__thiscall MainChar::GetRevserveMovePos(MainChar *this);
bool __thiscall MainChar::IsEndPathFinding(MainChar *this);
bool __thiscall MainChar::IsDuringMove(MainChar *this);
void __thiscall MainChar::AdjustHeadWeightsValue(MainChar *this);
int __thiscall MainChar::IsVisible(MainChar *this);
void __thiscall MainChar::SetReserveAct(MainChar *this, MainChar::ReserveAct eReserveAct);
void __thiscall MainChar::SetStartReserveAct(MainChar *this, MainChar::ReserveAct _eReserveAct);
void __thiscall MainChar::SetTOTChar(MainChar *this, unsigned __int16 pkChar);
int __thiscall MainChar::GetMetamorphosisType(MainChar *this);
bool __thiscall MainChar::IsMetamorphosis(MainChar *this);
void __thiscall MainChar::EndPathFind(MainChar *this, NiPoint3 *kEndPos);
void __thiscall MainChar::EnableAirBorne(MainChar *this, bool b, unsigned __int16 kID);
bool __thiscall MainChar::IsAirBorneState(MainChar *this);
unsigned __int16 __thiscall MainChar::GetAirBorneID(MainChar *this);
int __thiscall MainChar::GetCharLevel(MainChar *this);
void __thiscall MainChar::MainChar(MainChar *this);
void __thiscall MainChar::_MainChar(MainChar *this);
bool __thiscall MainChar::Init(MainChar *this, PROTO_NC_CHAR_MAPLOGIN_ACK *p);
bool __thiscall MainChar::TryMove(MainChar *this, float fCurTime);
bool __thiscall MainChar::TryMove8(MainChar *this, float fCurTime);
void __thiscall MainChar::StopMove(MainChar *this, bool bAbstateTest);
void __thiscall MainChar::StopMove(MainChar *this, float fXPos, float fYPos, bool bAbstateTest);
void __thiscall MainChar::StartPathFinding(MainChar *this);
void __thiscall MainChar::UpdatePathFinding(MainChar *this);
void __thiscall MainChar::CulNextMovePosition(MainChar *this);
bool __thiscall MainChar::IsPassTargetPosition(MainChar *this);
bool __thiscall MainChar::IsPassResTargetPosition(MainChar *this);
bool __thiscall MainChar::IsView(MainChar *this, NiPoint3 *pos3Pos);
bool __thiscall MainChar::InitCharactorWeaponTitle(MainChar *this, char currentTitle, unsigned __int16 currentTitleMobID);
MainChar::TargetType __thiscall MainChar::GetObjType(MainChar *this, Char *pkTargetObj);
void __thiscall MainChar::GetCameraLookAt(MainChar *this, NiPoint3 *kLookAt);
void __thiscall MainChar::OnWarpMove(MainChar *this, SHINE_XY_TYPE targetpoint, unsigned __int16 SkillID);
bool __thiscall MainChar::IsAvailableStateReserveSkill(MainChar *this);
void __thiscall MainChar::InitJump(MainChar *this);
bool __thiscall MainChar::IsSkillUsableState(MainChar *this);
bool __thiscall MainChar::IsCharTargetableState(MainChar *this, Char *pkChar);
void __thiscall MainChar::CancelMHEmotion(MainChar *this);
void __thiscall MainChar::CancelEmotion(MainChar *this);
bool __thiscall MainChar::InitView(MainChar *this, unsigned int uiFrame);
void __thiscall MainChar::UpdateMoveProgress(MainChar *this);
bool __thiscall MainChar::InitCharactorTitle(MainChar *this, PROTO_NC_CHAR_CLIENT_CHARTITLE_CMD *pkProto);
void __thiscall MainChar::SetTargetChar(MainChar *this, Char *pkChar);
void __thiscall MainChar::MetamorphosisTargetClear(MainChar *this);
void __thiscall MainChar::ExecuteDyingProcess(MainChar *this);
void __thiscall MainChar::Update(MainChar *this, float fTime);
void __thiscall MainChar::StartMoveTarget(MainChar *this);
void __thiscall MainChar::ActEmotionIndex(MainChar *this, unsigned int uiEmotionIndex);
MainChar::TargetType __thiscall MainChar::GetTargetType(MainChar *this, Char *pkTarget);
void __thiscall MainChar::ResetOnLink(MainChar *this);
NiPoint3 *__thiscall NpNs_MoveToTarget::GetCurrentPos(NpNs_MoveToTarget *this);
void *__thiscall MainChar::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall MainChar::_vector_deleting_destructor_(void *this, unsigned int a2);
bool __thiscall MainChar::SetTargetAnimation(MainChar *this, unsigned int uiAniEventCode);
float __thiscall MainChar::GetCameraLookHeight(MainChar *this);
void __thiscall MainChar::SetDir(Char *this, NiPoint3 *kDir);
void __thiscall MainChar::StopMoveTarget(MainChar *this);
NiNode *__thiscall MainChar::GetCollider(MainChar *this);
void __thiscall MainChar::InitPos(MainChar *this, NiPoint3 *kPos, NiPoint3 *kDir);
void __thiscall MainChar::SetPos(MainChar *this, NiPoint3 *kPos);
void *__thiscall MainChar::_scalar_deleting_destructor_(MainChar *this, unsigned int);
void __thiscall MoveToTarget::Copy(MoveToTarget *this, MoveToTarget *kMoveToTarget);
void __thiscall MoveToTarget::MoveToTarget(MoveToTarget *this);
void __thiscall MoveToTarget::_MoveToTarget(MoveToTarget *this);
void __thiscall MoveToTarget::ChangeSpeed(MoveToTarget *this, float fSpeed);
void __thiscall MoveToTarget::SetEmotion(MoveToTarget *this, bool bEmotion);
void __thiscall MoveToTarget::SetSpeed(MoveToTarget *this, float _fMovingSpeed);
void __thiscall NpNs_MoveToTarget::SetSpeed(NpNs_MoveToTarget *this, float _fMovingSpeed);
bool __thiscall NpNs_MoveToTarget::IsMove(NpNs_MoveToTarget *this);
float __thiscall NpNs_MoveToTarget::GetSpeed(NpNs_MoveToTarget *this);
void __thiscall NpNs_MoveToTarget::SetCurrentPos(NpNs_MoveToTarget *this, NiPoint3 *_pos3);
long double *__thiscall Wml::Capsule3<double>::Radius(Wml::Capsule3<double> *this);
NiPoint3 *__thiscall NpNs_MoveToTarget::GetMoveDir(NpNs_MoveToTarget *this);
NiPoint3 *__thiscall NpNs_MoveToTarget::GetOldPos(NpNs_MoveToTarget *this);
void __thiscall NpNs_MoveToTarget::GetCurrentPos(NpNs_MoveToTarget *this, NiPoint3 *pos3_);
void __thiscall NpNs_MoveToTarget::GetMoveDir(NpNs_MoveToTarget *this, NiPoint3 *pos3_);
void __thiscall NpNs_MoveToTarget::GetOldPos(NpNs_MoveToTarget *this, NiPoint3 *pos3_);
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, float _fTime, NiPoint3 *_pos3Start, NiPoint3 *_pos3Target);
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, float _fTime, NiPoint3 *_pos3Target);
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, NiPoint3 *_pos3Start, NiPoint3 *_pos3Target);
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, NiPoint3 *_pos3Target);
const void __thiscall Ns_XYFlatMoveToTarget::SetCalcuCurrentPos(Ns_XYFlatMoveToTarget *this, NiPoint3 *_pos3);
void *__thiscall Ns_XYFlatMoveToTarget::_vector_deleting_destructor_(MoveToTarget *this, unsigned int);
void __thiscall ObjectChar::ObjectChar(ObjectChar *this);
void __thiscall ObjectChar::_ObjectChar(ObjectChar *this);
void __thiscall ObjectChar::ActInitStand(ObjectChar *this, bool bIsMob);
void __thiscall ObjectChar::ActDie1(ObjectChar *this);
void *__thiscall ObjectChar::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall ObjectChar::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall ObjectChar::_scalar_deleting_destructor_(ObjectChar *this, unsigned int);
int __cdecl PortraitTextureBuffer::MatchCharacterPortraitFaceIDWithDatabase(char SHNID);
NiTexture *__cdecl PortraitTextureBuffer::GetBlackTexture();
NiTexture *__cdecl PortraitTextureBuffer::GetDefaultTexture();
NiTexture *__cdecl PortraitTextureBuffer::GetMetaMobPortrait(unsigned __int16 id);
NiTexture *__cdecl PortraitTextureBuffer::GetMainCharPortrait(Char *pkChar);
void __cdecl PortraitTextureBuffer::Terminate();
NiTexture *__cdecl PortraitTextureBuffer::GetOtherCharPortrait(unsigned int uiClass, unsigned int uiGender, unsigned int uiFace, unsigned int uiHair, unsigned int uiColor, unsigned __int16 kMobID, unsigned int uiLvGapIndex, unsigned int uiCamPos);
NiTexture *__cdecl PortraitTextureBuffer::GetMobPortrait(unsigned __int16 id);
NiTexture *__cdecl PortraitTextureBuffer::GetMoverPortrait(unsigned int kMoverID);
NiTexture *__cdecl PortraitTextureBuffer::GetPetPortrait(unsigned int kPetID);
NiTexture *__cdecl PortraitTextureBuffer::GetOtherCharPortrait(Char *pkChar);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *this);
void __thiscall NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>(NiTListBase<DFALL<NiPointer<NiTexture> >,NiPointer<NiTexture> > *this);
void *__thiscall NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vector_deleting_destructor_(NiTListBase<DFALL<NiPointer<NiTexture> >,NiPointer<NiTexture> > *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_scalar_deleting_destructor_(NiTList<NiPointer<NiTexture> > *this, unsigned int);
Char *__cdecl PortraitStudio::CreateCharacter(unsigned int uiClass, unsigned int uiGender, unsigned int uiFace, unsigned int uiHair, unsigned int uiColor, unsigned __int16 kMobID);
Studio *__cdecl PortraitStudio::CreateStudio(unsigned int uiClass, unsigned int uiGender, unsigned int uiFace, unsigned int uiHair, unsigned int uiColor, unsigned int uiDetail, unsigned __int16 kMobID, unsigned int uiCamPos);
FaceInfo *__cdecl FaceInfoTab::GetFaceInfo(char kBaseClassID, char ucGender, char byFaceModelInx, char byFaceTexInx);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this);
int std::_Tree<std::_Tmap_traits<unsigned_short_NiTexture___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_NiTexture__>>_0>>::_Insert(...);
NiTexture **__thiscall std::map<unsigned_short_NiTexture___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_NiTexture__>>>::operator__(std::map<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> > > *this, const unsigned __int16 *_Keyval);
void __thiscall CQuestInfoViewMgr::MakeQuestView(CQuestInfoViewMgr *this, unsigned __int16 hID);
void __thiscall CDoorObject::CDoorObject(CDoorObject *this);
void __thiscall AreaInfoMgr::AddRequestAreaTest(AreaInfoMgr *this, Name8 AreaID, int nTestType, int nID);
void __thiscall AreaInfoMgr::RemoveAreaInfo(AreaInfoMgr *this, Name8 dwAreaID);
void __thiscall AreaInfoMgr::Update(AreaInfoMgr *this);
std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *__thiscall std::_List_val<AreaInfoMgr::TestData_std::allocator<AreaInfoMgr::TestData>>::_Buynode<AreaInfoMgr::TestData>(std::_List_val<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> > *this, std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *_Next, std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *_Prev, AreaInfoMgr::TestData *_Val);
int __thiscall User::GetTotalAvatarInfo(User *this);
PROTO_AVATARINFORMATION *__thiscall User::GetAvatarInfo(User *this, int iIndex);
PROTO_AVATARINFORMATION *__thiscall User::GetAvatarInfoBySlot(User *this, char bySlot);
PROTO_AVATARINFORMATION *__thiscall User::GetSelectedAvatarInfo(User *this);
void __thiscall User::SetAvatarInfo(User *this, PROTO_AVATARINFORMATION *p, int iAvatarNum);
char __thiscall User::GetSelectedAvatarSlot(User *this);
void __thiscall User::SetSelectedAvatarSlot(User *this, char bySlot);
int __thiscall User::GetEmptyAvatarSlot(User *this);
void __thiscall User::MarkAsErased(User *this, char bySlot);
bool __thiscall User::IsAvatarErased(User *this, PROTO_AVATARINFORMATION *pkInfo);
PROTO_NC_CHAR_BASE_CMD *__thiscall User::GetMainCharBaseData(User *this);
void __thiscall User::SetMainCharShapeData(User *this, PROTO_AVATAR_SHAPE_INFO *p);
PROTO_AVATAR_SHAPE_INFO *__thiscall User::GetMainCharShapeData(User *this);
void __thiscall User::SetMainCharMapLoginData(User *this, PROTO_NC_CHAR_MAPLOGIN_ACK *p);
PROTO_NC_CHAR_MAPLOGIN_ACK *__thiscall User::GetMainCharMapLoginData(User *this);
Name3 *__thiscall User::GetMainCharLoginMapName(User *this);
void __thiscall User::SetPKCount(User *this, unsigned int *kVal);
char __thiscall User::GetMainCharClass(User *this);
void __thiscall User::SetMainCharClass(User *this, char kClass);
Name5 *__thiscall User::GetMainCharID(User *this);
void __thiscall User::SetMainCharGender(User *this, char byGender);
char __thiscall User::GetMainCharGender(User *this);
void __thiscall User::SetMainCharHairType(User *this, char byHair);
void __thiscall User::SetMainCharFaceType(User *this, char byFace);
void __thiscall User::SetMainCharLoginMapInitPos(User *this, int iX, int iY);
unsigned int __thiscall User::Lv(User *this);
void __thiscall User::SetLv(User *this, char ucLv);
__int64 __thiscall User::PrevExp(User *this);
__int64 __thiscall User::CurExp(User *this);
__int64 __thiscall User::NextExp(User *this);
void __thiscall User::AddCurExp(User *this, unsigned int uiExp);
void __thiscall User::SubCurExp(User *this, unsigned int uiExp);
void __thiscall User::SetCurExp(User *this, __int64 i64Exp);
void __thiscall User::SetParam(User *this, CHAR_PARAMETER_DATA *pkData);
int __thiscall User::BaseStr(User *this);
int __thiscall User::BaseDex(User *this);
int __thiscall User::BaseCon(User *this);
int __thiscall User::BaseWiz(User *this);
int __thiscall User::BaseInt(User *this);
int __thiscall User::BaseMen(User *this);
int __thiscall User::BaseWClow(User *this);
int __thiscall User::BaseWChigh(User *this);
int __thiscall User::BaseAC(User *this);
int __thiscall User::BaseTH(User *this);
int __thiscall User::BaseTB(User *this);
int __thiscall User::BaseMAlow(User *this);
int __thiscall User::BaseMAhigh(User *this);
int __thiscall User::BaseMR(User *this);
int __thiscall User::BaseMH(User *this);
int __thiscall User::BaseMB(User *this);
int __thiscall User::BasePainR(User *this);
int __thiscall User::BaseRestraintR(User *this);
int __thiscall User::BaseShockR(User *this);
int __thiscall User::BaseCurseR(User *this);
int __thiscall User::ChangeStr(User *this);
int __thiscall User::ChangeDex(User *this);
int __thiscall User::ChangeCon(User *this);
int __thiscall User::ChangeWiz(User *this);
int __thiscall User::ChangeInt(User *this);
int __thiscall User::ChangeMen(User *this);
int __thiscall User::ChangeWClow(User *this);
int __thiscall User::ChangeWChigh(User *this);
int __thiscall User::ChangeAC(User *this);
int __thiscall User::ChangeTH(User *this);
int __thiscall User::ChangeTB(User *this);
int __thiscall User::ChangeMAlow(User *this);
int __thiscall User::ChangeMAhigh(User *this);
int __thiscall User::ChangeMR(User *this);
int __thiscall User::ChangeMH(User *this);
int __thiscall User::ChangeMB(User *this);
int __thiscall User::ChangePainR(User *this);
int __thiscall User::ChangeRestraintR(User *this);
int __thiscall User::ChangeShockR(User *this);
int __thiscall User::ChangeCurseR(User *this);
int __thiscall User::HP(User *this);
int __thiscall User::SP(User *this);
int __thiscall User::AP(User *this);
int __thiscall User::LP(User *this);
void __thiscall User::SetHP(User *this, int iHP);
void __thiscall User::SetSP(User *this, int iSP);
void __thiscall User::SetLP(User *this, int iLP);
void __thiscall User::SetAP(User *this, int iAP);
int __thiscall User::MaxHP(User *this);
int __thiscall User::MaxSP(User *this);
int __thiscall User::MaxAP(User *this);
int __thiscall User::MaxLP(User *this);
int __thiscall User::PwrStone(User *this);
int __thiscall User::GrdStone(User *this);
int __thiscall User::HPStone(User *this);
int __thiscall User::SPStone(User *this);
int __thiscall User::MaxPwrStone(User *this);
int __thiscall User::MaxGrdStone(User *this);
int __thiscall User::MaxHPStone(User *this);
int __thiscall User::MaxSPStone(User *this);
void __thiscall User::SetPwrStone(User *this, int iVal);
void __thiscall User::SetGrdStone(User *this, int iVal);
void __thiscall User::SetHPStone(User *this, int iVal);
void __thiscall User::SetSPStone(User *this, int iVal);
void __thiscall User::SetMaxPwrStone(User *this, int iVal);
void __thiscall User::SetMaxGrdStone(User *this, int iVal);
void __thiscall User::SetMaxHPStone(User *this, int iVal);
void __thiscall User::SetMaxSPStone(User *this, int iVal);
bool __thiscall User::IsPwrStroneActive(User *this);
bool __thiscall User::IsGrdStroneActive(User *this);
__int64 __thiscall User::GetMoney(User *this);
void __thiscall User::SetMoney(User *this, __int64 i64Money);
__int64 __cdecl User::GetGem(__int64 i64Money);
__int64 __cdecl User::GetGold(__int64 i64Money);
__int64 __cdecl User::GetSilver(__int64 i64Money);
__int64 __cdecl User::GetCopper(__int64 i64Money);
__int64 __cdecl User::ConvertMoney(__int64 i64Copper, __int64 i64Silver, __int64 i64Gold, __int64 i64Gem);
void __thiscall User::InitABState(User *this, PROTO_NC_CHAR_ABSTATE_CMD *pkProto);
void __thiscall User::SetStr(User *this, unsigned int *kVal);
void __thiscall User::SetCon(User *this, unsigned int *kVal);
void __thiscall User::SetDex(User *this, unsigned int *kVal);
void __thiscall User::SetInt(User *this, unsigned int *kVal);
void __thiscall User::SetWiz(User *this, unsigned int *kVal);
void __thiscall User::SetMen(User *this, unsigned int *kVal);
void __thiscall User::SetWCLow(User *this, unsigned int *kVal);
void __thiscall User::SetWCHigh(User *this, unsigned int *kVal);
void __thiscall User::SetAC(User *this, unsigned int *kVal);
void __thiscall User::SetTH(User *this, unsigned int *kVal);
void __thiscall User::SetTB(User *this, unsigned int *kVal);
void __thiscall User::SetMALow(User *this, unsigned int *kVal);
void __thiscall User::SetMAHigh(User *this, unsigned int *kVal);
void __thiscall User::SetMR(User *this, unsigned int *kVal);
void __thiscall User::SetMH(User *this, unsigned int *kVal);
void __thiscall User::SetMB(User *this, unsigned int *kVal);
void __thiscall User::SetChangeStr(User *this, unsigned int *kVal);
void __thiscall User::SetChangeCon(User *this, unsigned int *kVal);
void __thiscall User::SetChangeDex(User *this, unsigned int *kVal);
void __thiscall User::SetChangeInt(User *this, unsigned int *kVal);
void __thiscall User::SetChangeWiz(User *this, unsigned int *kVal);
void __thiscall User::SetChangeMen(User *this, unsigned int *kVal);
void __thiscall User::SetChangeWCLow(User *this, unsigned int *kVal);
void __thiscall User::SetChangeWCHigh(User *this, unsigned int *kVal);
void __thiscall User::SetChangeAC(User *this, unsigned int *kVal);
void __thiscall User::SetChangeTH(User *this, unsigned int *kVal);
void __thiscall User::SetChangeTB(User *this, unsigned int *kVal);
void __thiscall User::SetChangeMALow(User *this, unsigned int *kVal);
void __thiscall User::SetChangeMAHigh(User *this, unsigned int *kVal);
void __thiscall User::SetChangeMR(User *this, unsigned int *kVal);
void __thiscall User::SetChangeMH(User *this, unsigned int *kVal);
void __thiscall User::SetChangeMB(User *this, unsigned int *kVal);
void __thiscall User::SetMaxHP(User *this, unsigned int *kVal);
void __thiscall User::SetMaxSP(User *this, unsigned int *kVal);
void __thiscall User::SetMaxLP(User *this, unsigned int *kVal);
NiTList<int> *__thiscall User::GetStatTitleList(User *this);
int __thiscall User::GetStatDistribute(User *this, char byStatDistribute);
void __thiscall User::ClearDistributeStatPoint(User *this);
unsigned __int16 *__thiscall User::GetValidate_new(User *this);
void __thiscall User::SetValidata_new(User *this, unsigned __int16 *pValidate);
void __thiscall User::SetCoin(User *this, unsigned __int64 nCoin);
void __thiscall User::SetExchangeableCoin(User *this, unsigned __int64 nCoin);
unsigned __int64 __thiscall User::Coin(User *this);
unsigned __int64 __thiscall User::ExchangeableCoin(User *this);
void __thiscall User::DeleteAvatar(User *this, char bySlot);
void __thiscall User::SetMainCharLoginMapName(User *this, Name3 *kMapName);
void __thiscall User::SetMainCharID(User *this, Name5 *kCharID);
void __thiscall User::ChangeParam(User *this, CHAR_PARAMCHANGE_CMD *pkParam);
void __thiscall User::ChangeChangeParam(User *this, CHAR_PARAMCHANGE_CMD *pkParam);
void __thiscall User::StatChangeByDistributePoint(User *this, char byStatDistribute, int iChange);
PROTO_AVATARINFORMATION *__thiscall User::GetAvatarInfo(User *this, Name5 *CharName);
void __thiscall User::_User(User *this);
bool __thiscall User::AddAvatarInfo(User *this, PROTO_AVATARINFORMATION *p);
void __thiscall User::ChangeParam(User *this, PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *pkProto);
void __thiscall User::ChangeChangeParam(User *this, PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *pkProto);
void __thiscall User::User(User *this);
void __thiscall User::SetMainCharBaseData(User *this, PROTO_NC_CHAR_BASE_CMD *p);
void __thiscall NiTListBase<DFALL<int>_int>::NiTListBase<DFALL<int>_int>(NiTListBase<DFALL<int>,int> *this);
void __thiscall NiTListBase<DFALL<int>_int>::_NiTListBase<DFALL<int>_int>(NiTListBase<DFALL<int>,int> *this);
void *__thiscall NiTListBase<DFALL<int>_int>::_vector_deleting_destructor_(NiTListBase<DFALL<int>,int> *this, unsigned int);
void __thiscall PROTO_AVATARINFORMATION::PROTO_AVATARINFORMATION(PROTO_AVATARINFORMATION *this);
PROTO_AVATARINFORMATION *__thiscall PROTO_AVATARINFORMATION::operator_(PROTO_AVATARINFORMATION *this, PROTO_AVATARINFORMATION *__that);
void *__thiscall NiTList<int>::_vector_deleting_destructor_(NiTList<int> *this, unsigned int);
void __thiscall NiTList<int>::_NiTList<int>(NiTList<int> *this);
PROTO_NC_CHAR_BASE_CMD *__thiscall PROTO_NC_CHAR_BASE_CMD::operator_(PROTO_NC_CHAR_BASE_CMD *this, PROTO_NC_CHAR_BASE_CMD *__that);
void *__thiscall ItemAuthority::_scalar_deleting_destructor_(ItemAuthority *this, unsigned int);
bool __thiscall ItemAuthority::IsAllFalse(ItemAuthority *this, E_BelongType eBelongType);
BelongTypeInfo *__thiscall ItemAuthority::IA_GetBelongTypeInfo(ItemAuthority *this, E_BelongType idx);
unsigned int __cdecl ITableBase<BelongTypeInfo_BelongTypeInfoTab>::GetTotal();
BelongTypeInfo *__cdecl BelongTypeInfoTab::GetBTInfo(E_BelongType eType);
void __thiscall DropItem::DropItem(DropItem *this);
void __thiscall DropItem::_DropItem(DropItem *this);
char *__thiscall DropItem::GetItemName(DropItem *this);
bool __thiscall DropItemMgr::LoadEff(DropItemMgr *this);
bool __thiscall DropItemMgr::Init(DropItemMgr *this);
void __thiscall DropItemMgr::RemoveAll(DropItemMgr *this);
DropItem *__thiscall DropItemMgr::GetByHandle(DropItemMgr *this, unsigned __int16 kHandle);
DropItem *__thiscall DropItemMgr::GetByNode(DropItemMgr *this, NiNode *pkNode);
DropItem *__thiscall DropItemMgr::GetDropItemByNodePtr(DropItemMgr *this, NiNode *pkNode);
void __thiscall DropItemMgr::SetTexture(DropItemMgr *this, NiNode *pkNode, NiSourceTexture *pkTexture);
NiNode *__thiscall DropItemMgr::GetNodeFromMap(DropItemMgr *this, const char *pcNifName);
NiSourceTexture *__thiscall DropItemMgr::GetTextureFromMap(DropItemMgr *this, const char *pcTexName);
unsigned int __thiscall DropItemMgr::GetItemCountByItemID(DropItemMgr *this, unsigned __int16 kItemID);
void __thiscall DropItemMgr::_DropItemMgr(DropItemMgr *this);
void __thiscall DropItemMgr::Terminate(DropItemMgr *this);
bool __thiscall DropItemMgr::Remove(DropItemMgr *this, unsigned __int16 kHandle);
void __thiscall DropItemMgr::Update(DropItemMgr *this, float fCurTime);
NiNode *__thiscall DropItemMgr::GetNode(DropItemMgr *this, const char *pcNifName);
NiSourceTexture *__thiscall DropItemMgr::GetTexture(DropItemMgr *this, const char *pcTexName);
NiNode *__thiscall DropItemMgr::Get(DropItemMgr *this, const char *pcNifName, const char *pcTexName, bool bStartEff, bool bEffOn);
void __thiscall DropItemMgr::DropItemMgr(DropItemMgr *this);
bool __thiscall DropItemMgr::Add(DropItemMgr *this, unsigned __int16 kItemID, unsigned __int16 kHandle, bool bPickable, NiPoint3 *kPos, bool bStartEff);
bool __thiscall DropItemMgr::Add(DropItemMgr *this, PROTO_NC_BRIEFINFO_DROPEDITEM_CMD *p);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>(NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *this, unsigned int);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiNode> >,NiPointer<NiNode> > *this);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiSourceTexture> >,NiPointer<NiSourceTexture> > *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,DropItem *> *this, unsigned int);
void __thiscall NiTPointerList<DropItem__>::_NiTPointerList<DropItem__>(NiTPointerList<DropItem *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiNode>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiNode> > *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiSourceTexture>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiSourceTexture> > *this, unsigned int);
void *__thiscall DropItem::_scalar_deleting_destructor_(DropItem *this, unsigned int);
void __thiscall NiTStringPointerMap<NiPointer<NiNode>>::_NiTStringPointerMap<NiPointer<NiNode>>(NiTStringPointerMap<NiPointer<NiNode> > *this);
void __thiscall NiTStringPointerMap<NiPointer<NiSourceTexture>>::_NiTStringPointerMap<NiPointer<NiSourceTexture>>(NiTStringPointerMap<NiPointer<NiSourceTexture> > *this);
void __thiscall PgTList<DropItem__>::_PgTList<DropItem__>(PgTList<DropItem *> *this);
void *__thiscall PgTList<DropItem__>::_vector_deleting_destructor_(PgTList<DropItem *> *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiPointer<NiNode>>::_vector_deleting_destructor_(NiTStringPointerMap<NiPointer<NiNode> > *this, unsigned int);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTStringPointerMap<NiPointer<NiSourceTexture> > *this, unsigned int);
void __thiscall NsFindGeometry::_NsFindGeometry(NsFindGeometry *this);
bool __thiscall NsFindGeometry::FindObject(NsFindGeometry *this, NiNode *_pObject, NiRTTI *_pRtti);
Ns_TourScene::TS_RESULT __thiscall NsFindGeometry::ProcessData(NsFindGeometry *this, NiAVObject *_pkObject, void *_pData);
void __thiscall DynaminUV::DynaminUV(DynaminUV *this);
void __thiscall DynaminUV::_DynaminUV(DynaminUV *this);
bool __thiscall DynaminUV::CreateStagesAndPasses(DynaminUV *this);
bool __thiscall DynaminUV::Initialize(DynaminUV *this, NiDX9Renderer *pkRenderer);
unsigned int __thiscall DynaminUV::UpdatePipeline(DynaminUV *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
NiRTTI *__thiscall DynaminUV::GetRTTI(DynaminUV *this);
void *__thiscall DynaminUV::_scalar_deleting_destructor_(DynaminUV *this, unsigned int);
bool __thiscall Inventory::IsHandedItem(Inventory *this, ItemInfo *pkInfo);
void __thiscall Inventory::ClearMiniHouseInv(Inventory *this);
void __thiscall Inventory::ClearMiniHouseEquip(Inventory *this);
void __thiscall Inventory::ClearInv(Inventory *this);
void __thiscall Inventory::ClearEquip(Inventory *this);
void __thiscall Inventory::ClearRewardInv(Inventory *this);
void __thiscall Inventory::ClearPremiumActionInv(Inventory *this);
void __thiscall Inventory::ClearMiniHouseTileAllItemInv(Inventory *this);
void __thiscall Inventory::ClearMiniHouseFurnitureItemInv(Inventory *this);
void __thiscall Inventory::ClearMiniHouseAccessoryItemInv(Inventory *this);
void __thiscall Inventory::ClearMiniHouseMinigameItemInv(Inventory *this);
bool __thiscall Inventory::AddMHItemInv(Inventory *this, unsigned int uiInvType, unsigned int uiIndex, Item *pkItem);
void __thiscall Inventory::RemoveMHItemInv(Inventory *this, unsigned int uiInvType, unsigned int uiIndex);
int __thiscall Inventory::GetTotalInv(Inventory *this);
Item *__thiscall Inventory::GetRightHandEquip(Inventory *this);
Item *__thiscall Inventory::GetLeftHandEquip(Inventory *this);
Item *__thiscall Inventory::GetRightHandAccEquip(Inventory *this);
Item *__thiscall Inventory::GetLeftHandAccEquip(Inventory *this);
Item *__thiscall Inventory::GetShieldAccEquip(Inventory *this);
Item *__thiscall Inventory::GetEquipedWeaponAcc(Inventory *this);
Item *__thiscall Inventory::GetEquipedShieldAcc(Inventory *this);
bool __thiscall Inventory::CanIEquipWeapon(Inventory *this, ItemInfo *pkInfo);
bool __thiscall Inventory::CanIEquipWeaponCostume(Inventory *this, ItemInfo *pkInfo);
bool __thiscall Inventory::CanIEquipShield(Inventory *this, ItemInfo *pkInfo);
bool __thiscall Inventory::CanIEquipShieldCostume(Inventory *this, ItemInfo *pkInfo);
void __thiscall Inventory::DecreaeWeaponAccCharged(Inventory *this);
void __thiscall Inventory::DecreaeShieldAccCharged(Inventory *this);
bool __thiscall Inventory::IsAttackAbleEquip(Inventory *this);
bool __thiscall Inventory::IsReaminSlot(Inventory *this, unsigned __int16 kID);
void __thiscall Inventory::UpdateWeaponTitleWhenMobDead(Inventory *this, unsigned __int16 kDeadMobID);
Item *__thiscall Inventory::GetEquipedWeapon(Inventory *this);
WeaponTypeEnum __thiscall Inventory::GetEquipWeponType(Inventory *this);
bool __thiscall Inventory::IsDemandType(Inventory *this, WeaponDemandType eDemand);
unsigned int __thiscall Inventory::GetItemCnt(Inventory *this, unsigned __int16 kID);
Item *__thiscall Inventory::GetItemByID(Inventory *this, unsigned __int16 kItemID);
int __thiscall Inventory::GetItemLot(Inventory *this, unsigned __int16 kItemID);
unsigned int __thiscall Inventory::GetStatInitialPoint(Inventory *this);
unsigned int __thiscall Inventory::GetSkillEmpowerInitialPoint(Inventory *this);
bool __thiscall Inventory::FindEnchantSoketAdd(Inventory *this, ITEM_INVEN *rkInven);
bool __thiscall Inventory::FindEnchantSoketReload(Inventory *this, ITEM_INVEN *rkInven);
bool __thiscall Inventory::FindWeaponTitleRemoveInven(Inventory *this, ITEM_INVEN *rkInven);
unsigned int __thiscall Inventory::GetInvIdxLotIsNotMax(Inventory *this, Item *pkItem);
Item *__thiscall Inventory::GetMHItemByObjID(Inventory *this, int iGUID);
bool __thiscall Inventory::FindItemByItemClass(Inventory *this, ItemClassEnum eItemClass);
const int __thiscall Inventory::GetSlotByID(Inventory *this, unsigned __int16 kID);
unsigned int __thiscall Inventory::GetRandomOptRecoverItemCount(Inventory *this, ITEM_INVEN *rkInven);
void __thiscall Inventory::_Inventory(Inventory *this);
void __thiscall Inventory::ClearMiniHouse(Inventory *this);
bool __thiscall Inventory::EquipMiniHouse(Inventory *this, unsigned int uiIndex);
bool __thiscall Inventory::UnEquipMiniHouse(Inventory *this, unsigned int uiIndex);
void __thiscall Inventory::Add(Inventory *this, unsigned int uiInvenType, Item *pkItem, unsigned int uiIndex);
bool __thiscall Inventory::Equip(Inventory *this, unsigned int uiIndex);
bool __thiscall Inventory::UnEquip(Inventory *this, unsigned int uiIndex);
void __thiscall Inventory::ClearMiniHouseAllItemInv(Inventory *this);
unsigned int __thiscall Inventory::InitData(Inventory *this, PROTO_NC_CHAR_CLIENT_ITEM_CMD *pkItemData, char *pbyItemDataStartAddress);
bool __thiscall Inventory::CanIEquipHandedItem(Inventory *this, ItemInfo *pkInfo);
unsigned __int16 __thiscall Inventory::GetMiniHouseSkin(Inventory *this);
char *__thiscall Inventory::GetPlayMiniHouseSound(Inventory *this);
bool __thiscall Inventory::IsFull(Inventory *this);
const unsigned int __thiscall Inventory::GetEmptySlotCount(Inventory *this);
void __thiscall Inventory::Inventory(Inventory *this);
void __thiscall Inventory::Clear(Inventory *this);
bool __thiscall Inventory::FindMysteryVault(Inventory *this, ITEM_INVEN *rkInven);
void __thiscall Inventory::AddInv(Inventory *this, Item *pkItem, unsigned int uiIndex);
void __thiscall Inventory::AddMiniHouseInv(Inventory *this, Item *pkItem, unsigned int uiIndex);
void __thiscall Inventory::AddMiniHouseEquip(Inventory *this, Item *pkItem, unsigned int uiIndex);
void __thiscall Inventory::AddPremiumActionInv(Inventory *this, Item *pkItem, unsigned int uiIndex);
SHINE_PUT_ON_BELONGED_ITEM __thiscall Item::GetPutOnBelongState(Item *this);
char __thiscall ItemWeapon::GetGemResCount(ItemWeapon *this, char SoketIdx);
void __thiscall ItemWeapon::SetGemResCount(ItemWeapon *this, char SoketIdx, char Amount);
void __thiscall Item::Item(Item *this, SHINE_ITEM_STRUCT *kItemStruct);
Item *__cdecl Item::Create(char *pbyBuff, unsigned int *puiBuffSize);
Item *__cdecl Item::Create(SHINE_ITEM_STRUCT *kStruct);
Item *__cdecl Item::Create(char *pbyBuff, ITEM_INVEN *kInven, unsigned int *puiBuffSize);
Item *__cdecl Item::Create(PROTO_ITEMPACKET_INFORM *pkInfo, ITEM_INVEN *kInven, unsigned int *puiBuffSize);
Item *__cdecl Item::Create(unsigned __int16 kID);
void __thiscall ItemCostumeWeapon::SetMaxCharged(ItemCostumeWeapon *this);
void __thiscall ItemCostumeShield::SetMaxCharged(ItemCostumeShield *this);
unsigned int __cdecl ItemAmulet::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff);
unsigned int __cdecl ItemWeapon::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff);
unsigned int __cdecl ItemChest::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff);
unsigned int __cdecl ItemRiding::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff);
unsigned int __cdecl ItemBracelet::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff);
unsigned int __thiscall Item::GetMaxLot(Item *this);
bool __thiscall Item::IsAlike(Item *this, Item *pkItem);
unsigned int __thiscall ItemWordLot::GetLot(ItemActiveskill *this);
bool __thiscall Item::IsSplitable(ItemWordLot *this);
char __thiscall ItemDwrdLot::GetClass(ItemDwrdLot *this);
void __thiscall ItemDwrdLot::SetLot(ItemDwrdLot *this, char uiLot);
int __thiscall ItemDwrdLot::GetStructSize(NiSpecularProperty *this);
char __thiscall ItemQuest::GetClass(ItemQuest *this);
char __thiscall ItemAmulet::GetClass(ItemAmulet *this);
unsigned int __thiscall ItemAmulet::GetStructSize(ItemAmulet *this);
int __thiscall ItemBracelet::GetCurUpGradeLevel(ItemBracelet *this);
ItemOptionStorage *__thiscall ItemAmulet::GetUpgradeOpt(ItemAmulet *this);
ItemOptionStorage *__thiscall ItemAmulet::GetItemOption(ItemAmulet *this);
char __thiscall ItemAmulet::GetRandomOptChangedCnt(ItemAmulet *this);
char __thiscall ItemWeapon::GetClass(ItemWeapon *this);
unsigned int __thiscall ItemWeapon::GetStructSize(ItemWeapon *this);
ItemOptionStorage *__thiscall ItemWeapon::GetItemOption(ItemWeapon *this);
ShineDateTime *__thiscall ItemWeapon::GetDeleteTime(ItemWeapon *this);
char __thiscall ItemWeapon::GetRandomOptChangedCnt(ItemWeapon *this);
char __thiscall ItemCostumeWeapon::GetClass(ItemCostumeWeapon *this);
unsigned int __thiscall ItemCollectCloseCard::GetSerialNumber(ItemCollectOpenCard *this);
void __thiscall ItemCostumeShield::SetChargedAmount(ItemCostumeShield *this, unsigned int dwChargedAmount);
unsigned int __thiscall ItemCostumeShield::GetMaxCharged(ItemCostumeShield *this);
char __thiscall ItemArmor::GetClass(ItemArmor *this);
unsigned int __thiscall ItemArmor::GetStructSize(ItemBracelet *this);
ShineDateTime *__thiscall ItemArmor::GetDeleteTime(ItemBoot *this);
char __thiscall ItemShield::GetClass(ItemShield *this);
ItemOptionStorage *__thiscall ItemBracelet::GetItemOption(ItemBracelet *this);
char __thiscall ItemBoot::GetRandomOptChangedCnt(ItemBracelet *this);
char __thiscall ItemCostumeShield::GetClass(ItemCostumeShield *this);
char __thiscall ItemBoot::GetClass(ItemBoot *this);
char __thiscall ItemFurniture::GetClass(ItemFurniture *this);
unsigned int __thiscall ItemFurniture::GetStructSize(ItemFurniture *this);
char __thiscall ItemDecoration::GetClass(ItemDecoration *this);
int __thiscall NiWireframeProperty::Type(NiWireframeProperty *this);
ShineDateTime *__thiscall ItemAmulet::GetDeleteTime(ItemBracelet *this);
char __thiscall ItemSkillScroll::GetClass(ItemSkillScroll *this);
char __thiscall ItemRecallScroll::GetClass(ItemRecallScroll *this);
char __thiscall ItemUpgradeSource::GetClass(ItemUpgradeSource *this);
char __thiscall ItemBind::GetClass(ItemBind *this);
char __thiscall ItemChest::GetClass(ItemChest *this);
char __thiscall ItemGBCoin::GetClass(ItemGBCoin *this);
char __thiscall ItemCapsule::GetClass(ItemCapsule *this);
unsigned int __thiscall ItemCapsule::GetStructSize(ItemCapsule *this);
char __thiscall ItemEnchant::GetClass(ItemEnchant *this);
unsigned int __thiscall ItemShield::GetCurUpGradeLevel(ItemNoEffect *this);
NiDynamicEffect::EffectType __thiscall ItemByteLot::GetStructSize(NiSpotLight *this);
char __thiscall ItemWeaponTitleLicense::GetClass(ItemWeaponTitleLicense *this);
char __thiscall ItemKQ::GetClass(ItemKQ *this);
char __thiscall ItemHouseSkin::GetClass(ItemHouseSkin *this);
char __thiscall ItemUpRed::GetClass(ItemUpRed *this);
char __thiscall ItemUpBlue::GetClass(ItemUpBlue *this);
char __thiscall ItemKQStep::GetClass(ItemKQStep *this);
void *__thiscall ShortCutSkill::_scalar_deleting_destructor_(CPostProcessEffect *this, unsigned int);
char __thiscall ItemFeed::GetClass(ItemFeed *this);
char __thiscall ItemRiding::GetClass(ItemRiding *this);
unsigned int __thiscall ItemRiding::GetStructSize(ItemRiding *this);
int __thiscall ItemRiding::GetCurMoverLevel(ItemRiding *this);
char __thiscall ItemAmount::GetClass(ItemAmount *this);
char __thiscall ItemUpGold::GetClass(ItemUpGold *this);
char __thiscall ItemChargedAction::GetClass(ItemChargedAction *this);
char __thiscall ItemCollectCloseCard::GetClass(ItemCollectCloseCard *this);
int __thiscall ItemCollectCloseCard::GetStructSize(NiZBufferProperty *this);
unsigned int __thiscall ItemCollectCloseCard::GetCardID(ItemCollectCloseCard *this);
unsigned int __thiscall ItemCollectCloseCard::GetStar(ItemCollectCloseCard *this);
unsigned int __thiscall ItemCollectCloseCard::GetGroup(ItemCollectCloseCard *this);
char __thiscall ItemCollectOpenCard::GetClass(ItemCollectOpenCard *this);
unsigned int __thiscall ItemCollectOpenCard::GetStar(ItemCollectOpenCard *this);
char __thiscall ItemNoEffect::GetClass(ItemNoEffect *this);
void __thiscall ItemNoEffect::SetLot(ItemNoEffect *this, char uiLot);
char __thiscall ItemActiveskill::GetClass(ItemActiveskill *this);
void __thiscall ItemQuest::SetLot(ItemActiveskill *this, char uiLot);
char __thiscall ItemPet::GetClass(ItemPet *this);
unsigned int __thiscall ItemPet::GetPetID(ItemPet *this);
const char *__thiscall ItemPet::GetName(ItemPet *this);
bool __thiscall ItemPet::GetSummoning(ItemPet *this);
unsigned int __thiscall ItemPet::GetStructSize(ItemPet *this);
char __thiscall ItemBracelet::GetClass(ItemBracelet *this);
bool __cdecl ItemInfoTab::IsOneHandSwordAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsDualWeaponAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsTwoHandSwordAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsBowAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsCrossBowAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsOneHandStaffAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsTwoHandStaffAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsTwoHandAxeAniType(ItemInfo *pkInfo);
bool __cdecl ItemInfoTab::IsInvincibleHammerType(ItemInfo *pkInfo);
const char *__cdecl ItemViewInfoTab::GetAniIconNameByID(unsigned __int16 id);
unsigned int __cdecl ItemInfoTab::CheckCRC();
unsigned int __cdecl ItemInfoTab::GenerateCRCSum();
unsigned int __cdecl ItemInfoTab::BuildItemInfoMapByInxName();
int std::_Copy_backward<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>>___std::_List_iterator<std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>>__>(...);
CBaseObject **__thiscall std::allocator<QUEST_DATA__>::allocate(std::allocator<CBaseObject *> *this, unsigned int _Count);
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>>::_Splice_same(...);
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *this);
void __thiscall __1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a(std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *this);
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>>::erase(...);
void __thiscall std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ItemInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>_0>>::_Check_size(std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *this);
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::_list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>(std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *this);
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Insert(...);
void __thiscall std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ItemInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>_0>>::_Reinsert(std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *this, std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > _Last);
int std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo__>>(...);
void __thiscall ItemRepairWin::_ItemRepairWin(ItemRepairWin *this);
void __thiscall ItemRepairWin::OnCommand(ItemRepairWin *this, unsigned int wParam, int lParam);
void __thiscall ItemRepairWin::OnClickWinCloseBtn(ItemRepairWin *this);
void __thiscall ItemRepairWin::Initialize(ItemRepairWin *this);
void __thiscall ItemRepairWin::ItemRepairWin(ItemRepairWin *this);
void __thiscall ItemRepairWin::OnShowWin(ItemRepairWin *this);
void __thiscall ItemRepairWin::SetLockRepairItem(ItemRepairWin *this, ITEM_INVEN kFrom, bool bLock);
bool __thiscall ItemRepairWin::Create(ItemRepairWin *this, PgFrameWork *pkFrameWork);
void __thiscall ItemRepairWin::OnClickOKBtn(ItemRepairWin *this);
void __thiscall ItemRepairWin::CancelItemRepair(ItemRepairWin *this);
void __thiscall ItemRepairWin::CompleteItemRepair(ItemRepairWin *this);
void __thiscall ItemRepairWin::SetRepairItemSlot(ItemRepairWin *this, ITEM_INVEN kFrom);
void __thiscall ItemRepairWin::DirectMessage(ItemRepairWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ItemRepairWin::OnClickCancelBtn(ItemRepairWin *this);
void __thiscall ItemRepairWin::SetItemRepairKitSlot(ItemRepairWin *this, char byKitSlot);
ItemRepairWin *__cdecl ItemRepairWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall ItemRepairWin::_vector_deleting_destructor_(ItemRepairWin *this, unsigned int);
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_WEAPONENDURESET_CMD(ItemRepairTask *this, PROTO_NC_ITEM_WEAPONENDURESET_CMD *pkCmd);
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_SHIELDENDURESET_CMD(ItemRepairTask *this, PROTO_NC_ITEM_SHIELDENDURESET_CMD *pkCmd);
void __cdecl ItemRepairTask::Terminate();
void __thiscall ItemRepairTask::OnIdle(ItemRepairTask *this, float fTime);
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_WEAPONENDURE_CHARGE_ACK(ItemRepairTask *this, PROTO_NC_ITEM_WEAPONENDURE_CHARGE_ACK *pkAck);
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_SHIELDENDURE_CHARGE_ACK(ItemRepairTask *this, PROTO_NC_ITEM_SHIELDENDURE_CHARGE_ACK *pkAck);
void __thiscall ItemRepairTask::_ItemRepairTask(ItemRepairTask *this);
bool __thiscall ItemRepairTask::OnProcessNetMsg(ItemRepairTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall ItemRepairTask::ItemRepairTask(ItemRepairTask *this);
void __cdecl ItemRepairTask::Create(IDirectMessenger *pkMsgHooker);
void *__thiscall ItemRepairTask::_scalar_deleting_destructor_(ItemRepairTask *this, unsigned int);
void __thiscall Singleton<FadeObjectMgr>::_Singleton<FadeObjectMgr>(Singleton<FadeObjectMgr> *this);
void *__thiscall Singleton<FadeObjectMgr>::_scalar_deleting_destructor_(Singleton<FadeObjectMgr> *this, unsigned int);
void *__thiscall NiTArray<FadeObject__>::_scalar_deleting_destructor_(NiTArray<FadeObject *> *this, unsigned int);
void __thiscall NiTArray<NiGeometry__>::SetSize(NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *this, unsigned int uiMaxSize);
NiPointer<NiAVObject> *__thiscall FadeObject::GetObj(FadeObject *this, NiPointer<NiAVObject> *result);
void __thiscall FadeObjectMgr::FadeObjectMgr(FadeObjectMgr *this);
void __thiscall FadeObjectMgr::_FadeObjectMgr(FadeObjectMgr *this);
bool __thiscall FadeObjectMgr::IsInArray(FadeObjectMgr *this, NiPointer<NiAVObject> spObj);
void __thiscall FadeObject::FadeObject(FadeObject *this);
void __thiscall FadeObject::FadeObject(FadeObject *this, NiPointer<NiAVObject> spObj, bool bEnable);
void __thiscall FadeObject::_FadeObject(FadeObject *this);
bool __thiscall FadeObject::Init(FadeObject *this);
void __thiscall FadeObjectMgr::AddObject(FadeObjectMgr *this, NiPointer<NiAVObject> spObj, bool bEnable);
void __thiscall FadeObjectMgr::Update(FadeObjectMgr *this, float fTime);
int __stdcall loc_676917(float fTime); // weak
int __stdcall loc_676960(float fTime); // weak
NiPointer<NiRenderer> *__thiscall MainApp::GetRender(MainApp *this, NiPointer<NiRenderer> *result);
void *__thiscall FadeObjectMgr::_scalar_deleting_destructor_(FadeObjectMgr *this, unsigned int);
void *__thiscall FadeObject::_scalar_deleting_destructor_(FadeObject *this, unsigned int);
bool __thiscall LightFogCtrl::Init(LightFogCtrl *this);
void __thiscall LightFogCtrl::Clear(LightFogCtrl *this);
void __thiscall LightFogCtrl::Update(LightFogCtrl *this, float fTime);
void __thiscall LightFogCtrl::Terminate(LightFogCtrl *this);
void __thiscall LightFogCtrl::SetCtrl(LightFogCtrl *this, NiMaterialProperty *pkProp);
bool __thiscall LightFogCtrl::SetNode(LightFogCtrl *this, NiNode *pkNode);
void __thiscall LightFogCtrl::_LightFogCtrl(LightFogCtrl *this);
void __thiscall LightFogCtrl::LightFogCtrl(LightFogCtrl *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>(NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *this, unsigned int);
void __thiscall NiTPointerList<NiTimeController__>::_NiTPointerList<NiTimeController__>(NiTPointerList<NiTimeController *> *this);
void __thiscall PgTList<NiTimeController__>::_PgTList<NiTimeController__>(PgTList<NiTimeController *> *this);
void *__thiscall PgTList<NiTimeController__>::_vector_deleting_destructor_(PgTList<NiTimeController *> *this, unsigned int);
void *__thiscall LightFogCtrl::_scalar_deleting_destructor_(LightFogCtrl *this, unsigned int);
void __thiscall CMagicCircleController::UpdatePosition(CMagicCircleController *this, NiPoint3 *rPos);
void __thiscall CMagicCircleController::SetEnable(CMagicCircleController *this, bool bEnable);
bool __thiscall CMagicCircleController::IsEnable(CMagicCircleController *this);
NiPoint3 *__thiscall CMagicCircleController::GetPos(CMagicCircleController *this);
void __thiscall CMagicCircleController::CMagicCircleController(CMagicCircleController *this);
void __thiscall CMagicCircleController::_CMagicCircleController(CMagicCircleController *this);
float __thiscall CMagicCircleController::GetCircleRadius(CMagicCircleController *this);
NiNode *__thiscall CMagicCircleController::GetNode(CMagicCircleController *this);
void __thiscall CMagicCircleController::Update(CMagicCircleController *this, float fTime);
bool __thiscall CMagicCircleController::ResetInitTerrain(CMagicCircleController *this, PgNsTerrain *pNsTerrain);
bool __thiscall CMagicCircleController::Init(CMagicCircleController *this, const char *pkFileName, PgNsTerrain *pNsTerrain, NiNode *pBuildGround);
void __thiscall CMagicCircleController::SetCircleRadius(CMagicCircleController *this, float fRadius);
void *__thiscall CMagicCircleController::_scalar_deleting_destructor_(CMagicCircleController *this, unsigned int);
bool __thiscall MapObjMgr::Init(MapObjMgr *this);
void __thiscall MapObjMgr::RemoveAll(MapObjMgr *this);
void __thiscall MapObjMgr::Terminate(MapObjMgr *this);
NiNode *__thiscall MapObjMgr::GetFromMap(MapObjMgr *this, char *pcName);
NiNode *__thiscall MapObjMgr::Get(MapObjMgr *this, char *pcName);
void __thiscall MapObjMgr::MapObjMgr(MapObjMgr *this);
void __thiscall Shadow::_Shadow(Shadow *this);
void __thiscall Shadow::Render(Shadow *this, NiNode *pkRenderTarget, NiPoint3 *kPos);
void __thiscall Shadow::Shadow(Shadow *this, NiPoint3 *pkLightDir, PgNsTerrain *pkTerrain, NiNode *pkGroundNode, unsigned int uiDetail);
void __thiscall Shadow::SetShaderMode(Shadow *this, Shadow::eShadowMode shadowmode);
void __thiscall NsShadowObject::SetCaster(NsShadowObject *this, NiNode *pCaster);
void *__thiscall Shadow::_vector_deleting_destructor_(Shadow *this, unsigned int);
bool __thiscall SkyCtrl::Init(SkyCtrl *this);
void __thiscall SkyCtrl::SkyCtrl(SkyCtrl *this);
void __thiscall SkyCtrl::_SkyCtrl(SkyCtrl *this);
void __thiscall SkyCtrl::Clear(SkyCtrl *this);
bool __thiscall SkyCtrl::SetNode(SkyCtrl *this, NiNode *pkNode);
void __thiscall SkyCtrl::Terminate(SkyCtrl *this);
void __thiscall SkyCtrl::Update(SkyCtrl *this, float fTime);
void *__thiscall SkyCtrl::_scalar_deleting_destructor_(SkyCtrl *this, unsigned int);
void __thiscall NiTextureAccumulator::CopyMembers(NiTextureAccumulator *this, NiTextureAccumulator *pkDest, NiCloningProcess *kCloning);
void __thiscall NiTextureAccumulator::LoadBinary(NiTextureAccumulator *this, NiStream *kStream);
void __thiscall NiTextureAccumulator::LinkObject(NiTextureAccumulator *this, NiStream *kStream);
bool __thiscall NiTextureAccumulator::RegisterStreamables(NiTextureAccumulator *this, NiStream *kStream);
void __thiscall NiTextureAccumulator::SaveBinary(NiTextureAccumulator *this, NiStream *kStream);
bool __thiscall NiTextureAccumulator::IsEqual(NiTextureAccumulator *this, NiObject *pkObject);
void __thiscall World::Terminate(World *this);
void __thiscall World::Clear(World *this);
bool __thiscall World::Init(World *this, float fScreenWidth, float fScreenHeight);
void __thiscall World::Update(World *this, float fTime);
void __thiscall World::SetMapDirectionalLightAmbientColor(World *this, NiColor *kColor);
void __thiscall World::SetMapDirectionalLightDiffuseColor(World *this, NiColor *kColor);
NiPointer<NiAVObject> *__thiscall World::GetGroundObject(World *this, NiPointer<NiAVObject> *result, const char *pcNodeName);
void __cdecl ShDrawVisibleArrayAppend(NiVisibleArray *kVisibleSet);
void __thiscall World::GetLoadFolderName(World *this, char *pMapLoadFolderName, const char *pkExt);
void __cdecl ShDrawVisibleArray(NiCamera *pkCamera, NiVisibleArray *kVisibleSet);
void __cdecl ShDrawScene(NiCamera *pkCamera, NiAVObject *pkScene, NiCullingProcess *kCuller, NiVisibleArray *pkVisibleSet);
void __thiscall World::Draw(World *this);
void __thiscall NiTextureAccumulator::NiTextureAccumulator(NiTextureAccumulator *this);
NiObject *__thiscall NiTextureAccumulator::CreateClone(NiTextureAccumulator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiTextureAccumulator::CreateObject();
void __thiscall NiTextureAccumulator::_NiTextureAccumulator(NiTextureAccumulator *this);
void __thiscall NiTextureAccumulator::RegisterObjectArray(NiTextureAccumulator *this, NiVisibleArray *kArray);
void __thiscall NiTextureAccumulator::FinishAccumulating(NiTextureAccumulator *this);
void __thiscall World::NowLoadingText(World *this, int LoadingRate);
void __thiscall NiTextureAccumulator::Sort(NiTextureAccumulator *this);
void __thiscall World::_World(World *this);
void __thiscall World::World(World *this);
std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Pnode);
void __thiscall NiAccumulator::_NiAccumulator(NiAccumulator *this);
NiRTTI *__thiscall NiAccumulator::GetRTTI(NiAccumulator *this);
void *__thiscall NiAccumulator::_vector_deleting_destructor_(NiAccumulator *this, unsigned int);
void __thiscall NsPathFinding::_NsPathFinding(NsPathFinding *this);
void *__thiscall NsPathFinding::_vector_deleting_destructor_(NsPathFinding *this, unsigned int);
void __thiscall InstantBlock::RemoveAll(InstantBlock *this);
void __thiscall InstantBlock::_InstantBlock(InstantBlock *this);
void *__thiscall InstantBlock::_scalar_deleting_destructor_(InstantBlock *this, unsigned int);
void __thiscall mhManagerMediator::_mhManagerMediator(mhManagerMediator *this);
void __thiscall NsMakeQuadScene::_NsMakeQuadScene(NsMakeQuadScene *this);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *this);
void __thiscall World::_unnamed_type_m_kExtraLightScene_::_unnamed_type_m_kExtraLightScene_(World::<unnamed-type-m_kExtraLightScene> *this);
void __thiscall World::_unnamed_type_m_kExtraLightScene_::__unnamed_type_m_kExtraLightScene_(World::<unnamed-type-m_kExtraLightScene> *this);
void __thiscall std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Wherenode);
void *__thiscall NiTArray<NiPointer<NiNode>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiNode> > *this, unsigned int);
void __thiscall std::pair<unsigned_int_NiPointer<NiNode>>::_pair<unsigned_int_NiPointer<NiNode>>(std::pair<unsigned long const ,NiPointer<NiControllerSequence> > *this);
void __thiscall FindCullUpdateNode::CullUpdateAreaInfo::_CullUpdateAreaInfo(FindCullUpdateNode::CullUpdateAreaInfo *this);
void __cdecl std::_Insertion_sort1<NiGeometry_____TextureSorter_NiGeometry__>(NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred, NiGeometry **__formal);
void __cdecl std::_Med3<NiGeometry_____TextureSorter>(NiGeometry **_First, NiGeometry **_Mid, NiGeometry **_Last, TextureSorter _Pred);
void __cdecl std::_Push_heap<NiGeometry_____int_NiGeometry___TextureSorter>(NiGeometry **_First, int _Hole, int _Top, NiGeometry **_Val, TextureSorter _Pred);
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Rootnode);
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *_Rootnode);
void __cdecl std::_Median<NiGeometry_____TextureSorter>(NiGeometry **_First, NiGeometry **_Mid, NiGeometry **_Last, TextureSorter _Pred);
void __cdecl std::_Adjust_heap<NiGeometry_____int_NiGeometry___TextureSorter>(NiGeometry **_First, int _Hole, int _Bottom, NiGeometry **_Val, TextureSorter _Pred);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > _Where);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _Where);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Where);
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::clear(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > _Where);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this);
std::pair<NiGeometry * *,NiGeometry * *> *__cdecl std::_Unguarded_partition<NiGeometry_____TextureSorter>(std::pair<NiGeometry * *,NiGeometry * *> *result, NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred);
void __cdecl std::_Make_heap<NiGeometry_____int_NiGeometry___TextureSorter>(NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred, int *__formal, NiGeometry **__formal);
NiRTTI *__thiscall NiTextureAccumulator::GetRTTI(NiTextureAccumulator *this);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Last);
int std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(...);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > _Where);
void __thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Erase(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Rootnode);
int std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(...);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *__thiscall std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _Last);
void __cdecl std::_Sort_heap<NiGeometry_____TextureSorter>(NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred);
void *__thiscall NiTextureAccumulator::_vector_deleting_destructor_(NiTextureAccumulator *this, unsigned int);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > _Last);
void __thiscall std::map<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>>::_map<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>>(std::map<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> > > *this);
void __cdecl std::_Sort<NiGeometry_____int_TextureSorter>(NiGeometry **_First, NiGeometry **_Last, int _Ideal, TextureSorter _Pred);
void __thiscall std::set<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>>::_set<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>>(std::set<unsigned int,std::less<unsigned int>,std::allocator<unsigned int> > *this);
void __thiscall std::set<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>>::_set<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>>(std::set<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> > > *this);
void __thiscall mhResTableManager::mhResTableManager(mhResTableManager *this);
void __thiscall MiniHouseIndoor::MiniHouseIndoor(MiniHouseIndoor *this);
void __thiscall World::ClearCamera(World *this);
void __thiscall World::SetCameraZoomRatePerTick(World *this, float fRate);
void __thiscall World::SetCameraZoomMin(World *this, float fMin);
void __thiscall World::SetCameraZoomMax(World *this, float fMax);
void __thiscall World::SetCameraZoomDef(World *this, float fDef);
void __thiscall World::SetControllerMode(World *this, bool bControllerMode);
void __thiscall World::SetAutoCameraMode(World *this, bool bAutoCameraMode);
void __thiscall World::SetCameraPosDelta(World *this, NiPoint3 kCameraPosDelta);
void __thiscall World::SetCameraAngleDeltaBoundary(World *this, float fAngle, float *pkVar);
void __thiscall World::SetCameraPosDist(World *this, float Dist);
NiPoint3 *__thiscall World::GetCameraLookAtPos(World *this);
void __thiscall World::AddCameraRotate(World *this, int iX, int iY);
void __thiscall World::AddCameraZoom(World *this, int iZoom);
void __thiscall World::SetCameraMove(World *this, bool b);
void __thiscall World::SetCameraAngleDeltaLR(World *this, float AngleLR);
void __thiscall World::SetCameraAngleDeltaUD(World *this, float AngleUD);
void __thiscall World::SetCameraJumpData(World *this, NiPoint3 kCameraPosDelta, float AngleLR, float AngleUD, float Dist);
void __thiscall World::SetCameraFOV(World *this, float fFOV, float fScreenWidth, float fScreenHeight);
void __thiscall World::ImpactCamera(World *this, EffectViewInfo *ImpactInfo);
void __thiscall World::ImpactCamera(World *this, float fAmplitude, float fCurTime);
void __thiscall World::AutoRotateCamera(World *this, float fMsDeltaX);
bool __thiscall World::InitCamera(World *this, float fScreenWidth, float fScreenHeight);
void __thiscall World::TerminateCamera(World *this);
void __thiscall World::SetCameraFrustum(World *this, float fScreenWidth, float fScreenHeight);
bool __thiscall World::GetObjectCameraIntersect(World *this, NiPoint3 kOrigin, NiPoint3 kDir);
void __thiscall World::UpdateCamera(World *this, float fTime);
NiPoint3 *__thiscall NiCamera::GetWorldUpVector(NiCamera *this, NiPoint3 *result);
NiPoint3 *__thiscall NiCamera::GetWorldRightVector(NiCamera *this, NiPoint3 *result);
std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *__thiscall std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *this, std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *_Rootnode, std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *this, std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *_Right);
void __thiscall World::ClearLightFog(World *this);
// void __usercall RotateModelXToVector(NiPoint3 *vec<eax>, NiMatrix3 *rot<esi>);
void __thiscall World::SetFogColor(World *this, NiColor *kColor);
void __thiscall World::SetFogDepth(World *this, float fDepth);
void __thiscall World::EnableFog(World *this, bool b);
void __thiscall World::SetAmbientLightAmbientColor(World *this, NiColor *kColor);
void __thiscall World::SetAmbientLightDiffuseColor(World *this, NiColor *kColor);
void __thiscall World::SetAmbientLightSpecularColor(World *this, NiColor *kColor);
void __thiscall World::SetDirectionalLightAmbientColor(World *this, NiColor *kColor);
void __thiscall World::SetDirectionalLightDiffuseColor(World *this, NiColor *kColor);
void __thiscall World::SetDirectionalLightSpecularColor(World *this, NiColor *kColor);
void __thiscall World::TerminateLightFog(World *this);
void __thiscall World::UpdateLightFog(World *this, float fTime);
bool __thiscall World::InitLightFog(World *this);
NiPoint3 *__thiscall NiPoint3::Perpendicular(NiPoint3 *this, NiPoint3 *result);
void __thiscall NiQuaternion::ToRotation(NiQuaternion *this, NiMatrix3 *rot);
bool __thiscall InstantBlock::Load(InstantBlock *this, const char *szName);
std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Max(std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Pnode);
// bool __usercall IsAniObject<al>(NiAVObject *pkObject<ecx>);
bool __thiscall World::LoadMapLightCtrl(World *this, const char *acMapName);
void __cdecl ProcessMNode(NiNode *_pNode, NiNode *_pDestNode);
void __cdecl ProcessCDNode(NiNode *_pNode, NiNode *_pDestNode);
bool __thiscall World::LoadMap(World *this, bool bSameMap);
void __thiscall NiAVObject::SetCollisionObject(NiAVObject *this, NiCollisionObject *pkCollisionObject);
unsigned int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::rfind(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Off, unsigned int _Count);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *this);
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Lrotate(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Rrotate(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Erase(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Rootnode);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *__thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Insert(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Newnode);
std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *__thiscall std::_List_val<NiAVObject___std::allocator<NiAVObject__>>::_Buynode(std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > *this, std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *_Next, std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *_Prev);
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::clear(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this);
std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Buynode(std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, const char *_Val);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *_Node, bool _Leftish);
int std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(...);
std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Buynode<std::pair<NiAVObject___const_World::AniObjectType>>(std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::pair<NiAVObject * const,World::AniObjectType> *_Val);
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::insert(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > >,bool> *result, const char *_Val, bool _Leftish);
Ns_TourScene::TS_RESULT __thiscall FindMultiCDNode::ProcessData(FindMultiCDNode *this, NiAVObject *_pkObject, void *_pData);
Ns_TourScene::TS_RESULT __thiscall FindMultiMNode::ProcessData(FindMultiMNode *this, NiAVObject *_pkObject, void *_pData);
void __thiscall std::list<NiAVObject___std::allocator<NiAVObject__>>::resize(std::list<NiAVObject *,std::allocator<NiAVObject *> > *this, unsigned int _Newsize);
World::AniObjectType *__thiscall std::map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>::operator__(std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *this, NiAVObject *const *_Keyval);
bool __thiscall World::InitMiniMap(World *this);
void __thiscall World::TerminateMiniMap(World *this);
void __thiscall World::ClearMiniMap(World *this);
bool __thiscall World::LoadEmptyMiniMap(World *this);
NiSourceTexture *__thiscall World::GetMiniMapTexture(World *this);
bool __thiscall World::LoadMiniMap(World *this);
bool __thiscall World::SelectMiniMap(World *this, Name3 kMapName);
void __thiscall World::UpdateCharDecalMark(World *this, float fTime);
void __thiscall World::Shake(World *this);
void __thiscall World::SetMagicCirclePos(World *this, NiPoint3 *rkPos);
void __thiscall World::SetMagicCircleEnable(World *this, bool bEnable);
void __thiscall World::SetMagicCircleRadius(World *this, float fRadius);
void __thiscall World::TerminateMisc(World *this);
void __thiscall World::UpdateMainCharMoveTargetPoint(World *this, float fTime);
void __thiscall World::PlayBGM(World *this);
void __thiscall World::UpdateCharSelectMark(World *this, float fTime);
bool __thiscall World::InitMisc(World *this);
void __thiscall World::ClearMisc(World *this);
void __thiscall NiRefObject::_NiRefObject(CPostProcessEffect *this);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiTexture> >,NiPointer<NiTexture> > *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiTexture>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiTexture> > *this, unsigned int);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vector_deleting_destructor_(NiTStringPointerMap<NiPointer<NiTexture> > *this, unsigned int);
void __thiscall NiDefaultTexturePalette::NiDefaultTexturePalette(NiDefaultTexturePalette *this, bool bSearchGlobalTextureList);
void __thiscall NiDefaultTexturePalette::SetSearchGlobalTextureList(NiDefaultTexturePalette *this, bool bSearch);
void __thiscall NiDefaultTexturePalette::SetTexture(NiDefaultTexturePalette *this, const char *pcPath, NiTexture *pkTex);
NiTexture *__thiscall NiDefaultTexturePalette::GetTexture(NiDefaultTexturePalette *this, const char *pcPath, NiTexture *pkSelf);
void *__thiscall NiDefaultTexturePalette::_scalar_deleting_destructor_(NiDefaultTexturePalette *this, unsigned int);
void __thiscall World::TerminatePathFinding(World *this);
void __thiscall World::ClearPathFinding(World *this);
bool __thiscall World::SearchWayPoints(World *this, NiPoint2 pos2Start, NiPoint2 pos2End, int nMaxArryCnt, NiPoint2 *pPos2Arr, int *nResultWayCnt);
int __cdecl DivideFloat(float fOne, float fTwo);
bool __thiscall World::SearchWayPointsNew(World *this, NiPoint2 pos2Start, NiPoint2 pos2End, int nMaxArryCnt, NiPoint2 *pPos2Arr, int *nResultWayCnt, bool *bIsFindEndPoint);
bool __thiscall World::IsBlock8(World *this, float fX, float fY);
bool __thiscall World::IsBlock(World *this, float fX, float fY);
bool __thiscall World::LineIntersect(World *this, float _fStartX, float _fStartY, float *_fEndX, float *_fEndY);
bool __thiscall World::TestArea(World *this, const char *szAreaName, float fX, float fY);
bool __thiscall World::IsInArea(World *this, const char *szAreaName);
bool __thiscall World::InitPathFinding(World *this);
bool __thiscall World::LoadPathFindingData(World *this);
void __thiscall World::SetSubBlockData(World *this, const char *szName, bool bClose);
void __thiscall IMakeBlockInfo::SetBlockData(IMakeBlockInfo *this, unsigned int _uiMapSize, unsigned int _uiSplitCnt, float _fTileLength);
void __thiscall IMakeBlockInfo::DeleteAllData(IMakeBlockInfo *this);
void __thiscall NsMakeBlockInfo_Byte::DeleteAllData(NsMakeBlockInfo_Byte *this);
void __thiscall NsMakeBlockInfo_Byte::SetBlockData(NsMakeBlockInfo_Byte *this, unsigned int _uiMapSize, unsigned int _uiSplitCnt, float _fTileLength);
bool __thiscall NsMakeBlockInfo_Byte::SetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiGridXIndex, unsigned int _uiGridYIndex, bool bOn);
bool __thiscall NsMakeBlockInfo_Byte::SetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiTileIndexX, unsigned int _uiSubIndexX, unsigned int _uiTileIndexY, unsigned int _uiSubIndexY, bool bOn);
bool __thiscall NsMakeBlockInfo_Byte::SetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiIndex, bool bOn);
bool __thiscall NsMakeBlockInfo_Byte::GetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiX, unsigned int _uiY);
void *__thiscall NsMakeBlockInfo_Byte::_scalar_deleting_destructor_(NsMakeBlockInfo_Byte *this, unsigned int);
void __thiscall InstantBlock::SetData(InstantBlock *this, const char *szName, bool bClose);
bool __thiscall World::InitPick(World *this);
void __thiscall World::ClearPick(World *this);
void __thiscall HeightmapRayIntersection::Clear(HeightmapRayIntersection *this);
void __thiscall HeightmapRayIntersection::Init(HeightmapRayIntersection *this, float *pfHeight, float fTileWidth, float fTileHeight, int iTileXCount, int iTileYCount, float w1, float w2);
// Char *__usercall SearchChar<eax>(NiAVObject *pkAVObject<eax>);
// DropItem *__usercall SearchDropItem<eax>(NiAVObject *pkAVObject<eax>);
// unsigned __int16 __usercall SearchMiniHouse<ax>(NiAVObject *pkAVObject<eax>);
void __thiscall World::TerminatePick(World *this);
bool __cdecl CulPlaneVsRay(float _fHeight, NiPoint3 _pos3Origin, NiPoint3 _pos3Dir, float *fT_);
void __thiscall HeightmapRayIntersection::_HeightmapRayIntersection(HeightmapRayIntersection *this);
bool __thiscall HeightmapRayIntersection::CheckRayIntersectTri(HeightmapRayIntersection *this, NiPoint3 *kOrg, NiPoint3 *kDir, NiPoint3 *kV0, NiPoint3 *kV1, NiPoint3 *kV2, float *ru, float *rv, float *rt);
bool __thiscall HeightmapRayIntersection::CheckRayIntersectQuad(HeightmapRayIntersection *this, int u, int v);
bool __thiscall HeightmapRayIntersection::CheckRayIntersectAround(HeightmapRayIntersection *this, int u, int v);
bool __thiscall World::GetCameraPickPos(World *this, NiPoint3 kOrigin, NiPoint3 kDir, NiPoint3 *kPos, NiPoint3 *kNormal, float *pfDistance);
bool __thiscall World::GetGroundPos(World *this, NiPoint3 kOrigin, NiPoint3 kDir, NiPoint3 *kTargetPos, float *pfDistance);
bool __thiscall World::GetGroundPos(World *this, float fXPos, float fYPos, NiPoint3 *kPos, float *pfDistance);
bool __thiscall World::GetAdvGroundPos(World *this, float fX, float fY, NiPoint3 *kTargetPos);
void __thiscall World::GetCharRegenPos(World *this, NiPoint3 *kRegenPos);
bool __thiscall World::PickChar(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, float *rfDistance);
unsigned int __thiscall World::PickedObjConditionCheck(World *this);
NiAVObject *__thiscall World::GetCandidatePickObj(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, NiPoint3 *kGroundPos);
World::PickEnum __thiscall World::PickWithoutGround(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, DropItem **pkDropItem, unsigned __int16 *hMiniHouse);
void __thiscall HeightmapRayIntersection::HeightmapRayIntersection(HeightmapRayIntersection *this);
bool __thiscall HeightmapRayIntersection::CheckRayIntersect(HeightmapRayIntersection *this, NiPoint3 *kStart, NiPoint3 *kEnd, NiPoint3 *kIntersect, NiPoint3 *kNormal, float *rfDist, int *nTileGap);
bool __thiscall World::CheckRayIntersectGround(World *this, NiPoint3 *kStart, NiPoint3 *kEnd, NiPoint3 *kIntersect, NiPoint3 *kNormal, float *rfDist, int *nTileGap);
bool __thiscall World::GetCameraPickPos2(World *this, NiPoint3 *kOrigin, NiPoint3 *kEnd, NiPoint3 *kPos, NiPoint3 *kNormal, float *pfDistance);
bool __thiscall World::GetAdvGroundPos(World *this, NiPoint3 kOrigin, NiPoint3 kDir, NiPoint3 *kTargetPos, float *pfDistance);
World::PickEnum __thiscall World::PickMHObj(World *this, mhState nowState, NiPoint3 *kOrigin, NiPoint3 *kDir, NiPoint3 *kGroundPos, bool bOnlyTest);
World::PickEnum __thiscall World::PickInMHmode(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos, DropItem **pkDropItem, unsigned __int16 *hMiniHouse);
World::PickEnum __thiscall World::Pick(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos, DropItem **pkDropItem, unsigned __int16 *hMiniHouse);
World::PickEnum __thiscall World::PickSomethingProcess(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos);
float __thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *pt);
NiPointer<NiNode> *__thiscall MiniHouseIndoor::GetObjRootScene(MiniHouseIndoor *this, NiPointer<NiNode> *result);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this);
NiPoint3 *__thiscall Char::GetWorldPos(Char *this, NiPoint3 *result);
float __cdecl GetAngle(NiPoint3 _pos3Dir, NiPoint3 _pos3Target);
void __thiscall CharSorter::CharSorter(CharSorter *this, NiPoint3 *pos3, NiPoint3 *kDir);
bool __thiscall CharSorter::operator__(CharSorter *this, Char *pChar1, Char *pChar2);
bool __thiscall World::AttachDropItem(World *this, NiNode *pkNode);
bool __thiscall World::DetachDropItem(World *this, NiNode *pkNode);
bool __thiscall World::AttachMiniHouse(World *this, NiNode *pkNode);
bool __thiscall World::DetachMiniHouse(World *this, NiNode *pkNode);
bool __thiscall World::AttachEffect(World *this, NiNode *pkEffectNode);
bool __thiscall World::DetachEffect(World *this, NiNode *pkEffectNode);
void __thiscall DropItemSorter::DropItemSorter(DropItemSorter *this, NiPoint3 *pos3, NiPoint3 *kDir);
void __thiscall World::UpdateSkyScene(World *this, float fTime);
bool __thiscall DropItemSorter::operator__(DropItemSorter *this, DropItem *pDropItem1, DropItem *pDropItem2);
bool __thiscall World::InitScene(World *this);
void __thiscall World::TerminateScene(World *this);
bool __thiscall World::AttachChar(World *this, Char *pkChar);
void __thiscall World::RemoveAllChar(World *this);
void __thiscall World::ClearScene(World *this);
void __thiscall World::UpdateBuildingScene(World *this, float fTime);
bool __thiscall World::DetachChar(World *this, Char *pkChar);
void __thiscall World::UpdateScene(World *this, float fTime);
int __stdcall loc_688E6C(float fTime); // weak
void __cdecl std::_Push_heap<Char_____int_Char___CharSorter>(Char **_First, int _Hole, int _Top, Char **_Val, CharSorter _Pred);
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *result, NiAVObject *const *_Keyval);
void __cdecl std::_Adjust_heap<Char_____int_Char___CharSorter>(Char **_First, int _Hole, int _Bottom, Char **_Val, CharSorter _Pred);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<Ni *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Eqrange(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<Ni *result, NiAVObject *const *_Keyval);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Newnode);
void __cdecl std::_Make_heap<Char_____int_Char___CharSorter>(Char **_First, Char **_Last, CharSorter _Pred, int *__formal, Char **__formal);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObj *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Eqrange(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObj *result, NiAVObject *const *_Keyval);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Insert(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Newnode);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Node, bool _Leftish);
std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Buynode<NiNode____>(std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, NiNode **_Val);
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Linsert(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >,bool> *result, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Node, bool _Leftish);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Where, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Node);
std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Buynode<std::pair<NiAVObject___const_NiBound>>(std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::pair<NiAVObject * const,NiBound> *_Val);
void __cdecl std::_Sort_heap<Char_____CharSorter>(Char **_First, Char **_Last, CharSorter _Pred);
NiBound *__thiscall std::map<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>>::operator__(std::map<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> > > *this, NiAVObject *const *_Keyval);
void __cdecl std::_Partial_sort<Char_____Char___CharSorter>(Char **_First, Char **_Mid, Char **_Last, CharSorter _Pred, Char **__formal);
bool __thiscall World::InitShadow(World *this);
void __thiscall World::ClearShadow(World *this);
void __thiscall World::TerminateShadow(World *this);
void __thiscall World::ResetShadowTerrian(World *this);
void __thiscall World::PrepareShadow(World *this);
void __thiscall World::DrawShadow(World *this);
void __thiscall std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *_Rootnode);
bool __thiscall World::InitSkyCtrl(World *this);
void __thiscall World::TerminateSkyCtrl(World *this);
void __thiscall World::ClearSkyCtrl(World *this);
void __thiscall World::UpdateSkyCtrl(World *this, float fTime);
char *__cdecl _StrTok(const char *str, const char sep);
bool __cdecl InitAnalyzeArgument(char *key, CPData *kCpData);
bool __cdecl GetAnalyzeArgument(CPData *kCpData);
char *__thiscall Server::GetWorldLoginErrText(Server *this, unsigned int ucStatus);
int __cdecl StatusCmp(char byStatus1, char byStatus2);
void __thiscall Server::SetGameTime(Server *this, PROTO_NC_MISC_GAMETIME_ACK *p, float fCurTime);
float __thiscall Server::GetGameTime(Server *this, float fCurTime);
int __thiscall Server::GetSelectServerIndex(Server *this);
void __thiscall Server::SetSelectServerIndex(Server *this, int val);
void __thiscall Server::ParsingGameAngelKey(Server *this);
bool __cdecl InitAnalyzeArgument(CPData *kCpData);
void __thiscall Server::Server(Server *this);
char *__thiscall Server::GetWorldStatusText(Server *this, unsigned int uiIndex);
void __thiscall Server::SetWorldMgrAddr(Server *this, PROTO_NC_USER_LOGIN_ACK *pkProto);
void __thiscall Server::_Server(Server *this);
void __thiscall FiestaServerList::ServerInfo::ServerInfo(FiestaServerList::ServerInfo *this);
void *__thiscall CVirtualServer::IProtoStruct::_scalar_deleting_destructor_(CVirtualServer::IProtoStruct *this, unsigned int);
int __cdecl SRand(int iMax);
void __cdecl Make_BriefInfo_LoginCharacter(PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *kProto_, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel);
void __thiscall CVirtualServer::CVirtualServer(CVirtualServer *this);
void __thiscall CVirtualServer::_CVirtualServer(CVirtualServer *this);
void __thiscall CVirtualServer::Update(CVirtualServer *this);
void __thiscall CVirtualServer::AddMessage(CVirtualServer *this, float fDelayTime, CVirtualServer::IProtoStruct *pkProto);
void __thiscall CVirtualServer::RegenChars(CVirtualServer *this, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel);
void __thiscall CVirtualServer::Attack(CVirtualServer *this, unsigned int dwAttacker, unsigned int dwTarget);
void __thiscall CVirtualServer::StartAttack(CVirtualServer *this);
void __thiscall CVirtualServer::Process(CVirtualServer *this);
void __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::SetRecordTime(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this, float _fRecordTime);
void __thiscall NiShaderAttributeDesc::SetFlags(NSBRequirements *this, unsigned int uiBones);
NiPixelFormat *__thiscall NiShaderRequirementDesc::GetMinPixelShaderVersion(NiDX92DBufferData *this);
void __thiscall NSBRequirements::SetPlatformFlags(NiD3DShaderLibrary *this, NiDX9Renderer *pkRenderer);
void __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::SetCommand(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this, int _nCommand);
float __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::GetRecordTime(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this);
void *__thiscall CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::_scalar_deleting_destructor_(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this, unsigned int);
void *__thiscall CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::_vector_deleting_destructor_(CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD> *this, unsigned int);
std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *__thiscall std::_List_val<unsigned_short_std::allocator<unsigned_short>>::_Buynode(std::_List_val<unsigned short,std::allocator<unsigned short> > *this, std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *_Next, std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *_Prev, const unsigned __int16 *_Val);
bool __thiscall AfterImgEff::IsEnd(AfterImgEff *this, float fTime);
void __thiscall AfterImgEff::AfterImgEff(AfterImgEff *this, NiNode *pkNode, bool bCreateProgramEff);
void __thiscall AfterImgEff::_AfterImgEff(AfterImgEff *this);
void __thiscall AfterImgEff::UpdateTextKey(AfterImgEff *this, float fTime);
void __thiscall AfterImgEff::Update(AfterImgEff *this, float fTime);
void __thiscall AfterImgEff::Start(AfterImgEff *this, float fTime);
void __cdecl AfterImgEff::ClearResourceMap();
NiPointer<NiNode> *__thiscall AfterImgEff::GetEffectNode(AfterImgEff *this, NiPointer<NiNode> *result, unsigned int uiIndex);
NiPointer<NiSourceTexture> *__thiscall AfterImgEff::GetEffTexture(AfterImgEff *this, NiPointer<NiSourceTexture> *result, unsigned int uiIndex);
bool __thiscall AfterImgEff::CreateShape(AfterImgEff *this, NiNode *pkNode, int WeaponLevel, UpEffectData *pkUpEff);
AfterImgEff *__cdecl AfterImgEff::CreateBySourceNode(NiNode *pkNode);
AfterImgEff *__cdecl AfterImgEff::CreateByWeaponNode(NiNode *pkNode, int WeaponLevel, UpEffectData *pkUpEff);
void *__thiscall AfterImgEff::_vector_deleting_destructor_(void *this, unsigned int a2);
NiRTTI *__thiscall AfterImgEff::GetRTTI(AfterImgEff *this);
void __thiscall Effect::Start(Effect *this, float fTime);
void *__thiscall AfterImgEff::_scalar_deleting_destructor_(AfterImgEff *this, unsigned int);
int std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(...);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *_Rootnode);
int std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiSourceTexture>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(...);
int std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(...);
void __thiscall AfterImgShape::RemoveVertex(AfterImgShape *this, int _nNum);
void __thiscall AfterImgShape0::SetVertex(AfterImgShape0 *this, NiPoint3 *_pos3Start, NiPoint3 *_pos3End);
void __thiscall AfterImgShape1::SetVertex(AfterImgShape1 *this, NiPoint3 *_pos3Start, NiPoint3 *_pos3End);
void __thiscall AfterImgShape::Start(AfterImgShape *this, float _fTime);
void __thiscall AfterImgShape::Stop(AfterImgShape *this);
void __thiscall AfterImgShape::AfterImgShape(AfterImgShape *this);
void __thiscall AfterImgShape::_AfterImgShape(AfterImgShape *this);
void __thiscall AfterImgShape::Terminate(AfterImgShape *this);
void __thiscall AfterImgShape0::AfterImgShape0(AfterImgShape0 *this);
void __thiscall AfterImgShape0::_AfterImgShape0(AfterImgShape0 *this);
bool __thiscall AfterImgShape0::Update(AfterImgShape0 *this, float _fTime);
void __thiscall AfterImgShape1::AfterImgShape1(AfterImgShape1 *this);
void __thiscall AfterImgShape1::_AfterImgShape1(AfterImgShape1 *this);
bool __thiscall AfterImgShape1::Update(AfterImgShape1 *this, float _fTime);
void __thiscall AfterImgShape0::Init(AfterImgShape0 *this, int _nVertexCnt);
void __thiscall AfterImgShape1::Init(AfterImgShape1 *this, int _nVertexCnt);
NiColorA *__thiscall NiColorA::operator_(NiColorA *this, NiColorA *result, NiColorA *c);
NiColorA *__thiscall NiColorA::operator_(NiColorA *this, NiColorA *result, NiColorA *c);
NiColorA *__thiscall NiColorA::operator_(NiColorA *this, NiColorA *result, float fScalar);
NiRTTI *__thiscall NiStencilProperty::GetRTTI(NiStencilProperty *this);
unsigned int __thiscall NiStencilProperty::Type(ItemCollectOpenCard *this);
void *__thiscall NiStencilProperty::_vector_deleting_destructor_(NiStencilProperty *this, unsigned int);
void __cdecl NetUtil::SendLog(char *_szLog);
void *__thiscall AfterImgShape::_vector_deleting_destructor_(AfterImgShape *this, unsigned int);
void *__thiscall AfterImgShape0::_vector_deleting_destructor_(AfterImgShape0 *this, unsigned int);
void *__thiscall AfterImgShape1::_vector_deleting_destructor_(AfterImgShape1 *this, unsigned int);
float __thiscall ArrowEff::GetSpeed(ArrowEff *this);
void __thiscall ArrowEff::SetSpeed(ArrowEff *this, float fSpeed);
unsigned __int16 __thiscall ArrowEff::GetTargetChar(ArrowEff *this);
void __thiscall ArrowEff::SetTargetChar(ArrowEff *this, unsigned __int16 kHandle);
unsigned __int16 __thiscall ArrowEff::GetCasterChar(ArrowEff *this);
void __thiscall ArrowEff::SetCasterChar(ArrowEff *this, unsigned __int16 kHandle);
bool __thiscall ArrowEff::IsEnd(ArrowEff *this, float fTime);
bool __thiscall ArrowEff::IsHitTarget(ArrowEff *this);
void __thiscall ArrowEff::AddHitDamage(ArrowEff *this, unsigned int uiDamage, unsigned __int16 kTarget, unsigned int dwHpChangeSeqNo, unsigned int kTargetRestHP, bool bViewDamage, bool bRange, __int16 AtkSeqnum, __int16 SeqDmgNum);
DamageInfo *__thiscall ArrowEff::GetDummyDmgInfo(ArrowEff *this);
void __thiscall ArrowEff::CopyMember(ArrowEff *this, Effect *pkEffect);
void __thiscall ArrowEff::StopWeaponAfterImgEff(ArrowEff *this);
void __thiscall ArrowEff::Update(ArrowEff *this, float fTime);
void __thiscall ArrowEff::OnEnd(ArrowEff *this, float fTime);
void __thiscall ArrowEff::StartWeaponAfterImgEff(ArrowEff *this, float fCurTime, float fLifeTime);
void __thiscall ArrowEff::Start(ArrowEff *this, float fTime);
void __thiscall ArrowEff::SetHitDamage(ArrowEff *this, __int16 AtkSeqNum, DamageInfoSet *pkDamInfoSet);
void __thiscall ArrowEff::ArrowEff(ArrowEff *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster);
void __thiscall ArrowEff::_ArrowEff(ArrowEff *this);
Effect *__thiscall ArrowEff::Clone(ArrowEff *this);
void *__thiscall ArrowEff::_vector_deleting_destructor_(void *this, unsigned int a2);
NiRTTI *__thiscall ArrowEff::GetRTTI(ArrowEff *this);
void __thiscall ArrowEff::SetBombEffectName(ArrowEff *this, char *pcBombEffName);
void __thiscall ArrowEff::SetBombSndName(ArrowEff *this, char *pcBombSndName);
bool __thiscall ArrowEff::IsHitDamageShow(ArrowEff *this);
void __thiscall ArrowEff::SetHitDamageShow(ArrowEff *this, bool bShow);
void *__thiscall ArrowEff::_scalar_deleting_destructor_(ArrowEff *this, unsigned int);
unsigned __int16 __thiscall AttachEff::GetTargetChar(AttachEff *this);
void __thiscall AttachEff::SetTargetChar(AttachEff *this, unsigned __int16 kHandle);
void __thiscall AttachEff::AttachEff(AttachEff *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster);
bool __thiscall AttachEff::LengthOfView(AttachEff *this);
void __thiscall IEffectHolder::ClearAttachedEffect(IEffectHolder *this);
void __thiscall IEffectHolder::AttachEffectShow(IEffectHolder *this, bool bShow);
void __thiscall AttachEff::SetEffectHold(AttachEff *this, bool b);
void __thiscall AttachEff::Update(AttachEff *this, float fTime);
void __thiscall IEffectHolder::OnAttachEffectEnd(IEffectHolder *this, AttachEff *pkEffect);
void __thiscall IEffectHolder::AddAttachEffect(IEffectHolder *this, AttachEff *pkEffect);
void __thiscall AttachEff::_AttachEff(AttachEff *this);
void __thiscall AttachEff::OnEnd(AttachEff *this, float fTime);
void __thiscall IEffectHolder::_IEffectHolder(IEffectHolder *this);
void __thiscall IEffectHolder::IEffectHolder(IEffectHolder *this);
void __thiscall NiTListBase<DFALL<AttachEff__>_AttachEff__>::_NiTListBase<DFALL<AttachEff__>_AttachEff__>(NiTListBase<DFALL<AttachEff *>,AttachEff *> *this);
void *__thiscall NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vector_deleting_destructor_(NiTListBase<DFALL<AttachEff *>,AttachEff *> *this, unsigned int);
void *__thiscall AttachEff::_vector_deleting_destructor_(void *this, unsigned int a2);
NiRTTI *__thiscall AttachEff::GetRTTI(AttachEff *this);
bool __thiscall AttachEff::IsEnd(AttachEff *this, float fTime);
void *__thiscall NiTPointerListBase<DFALL<AttachEff__>_AttachEff__>::_vector_deleting_destructor_(NiTList<AttachEff *> *this, unsigned int);
void __thiscall NiTList<AttachEff__>::_NiTList<AttachEff__>(NiTList<AttachEff *> *this);
void *__thiscall IEffectHolder::_vector_deleting_destructor_(IEffectHolder *this, unsigned int);
void *__thiscall AttachEff::_scalar_deleting_destructor_(AttachEff *this, unsigned int);
int __thiscall Effect::GetKeyStrToInt(Effect *this, char *KeywordStr);
void __thiscall Effect::SetAniStart(Effect *this, bool b);
bool __thiscall Effect::GetAniStart(Effect *this);
void __thiscall Effect::SetActiveSkillID(Effect *this, unsigned __int16 kID);
unsigned __int16 __thiscall Effect::GetActiveSkillID(Effect *this);
int __thiscall Effect::GetShaderEffect(Effect *this);
unsigned __int16 __thiscall Effect::FindShnIndex(Effect *this, NiTextKey *pkKey, unsigned int KeyNum, float fEffectTime);
unsigned __int16 __thiscall Effect::GetCasterHandle(Effect *this);
NiAVObject *__thiscall Effect::GetNodeByName(Effect *this, char *nodeName);
void __thiscall Effect::UpdateLoop(Effect *this, float fTime);
void __thiscall Effect::SetShaderEffect(Effect *this, char *NodeName, int EffType);
bool __thiscall Effect::CreateProgramEff(Effect *this);
void __thiscall Effect::UpdateOsc(Effect *this, float fTime);
void __thiscall Effect::UpdateAE(Effect *this, float fTime);
void __thiscall Effect::ClearAE(Effect *this);
void __thiscall Effect::Update(Effect *this, float fTime);
void __thiscall Effect::ClearOscTimeMmap(Effect *this);
void __thiscall Effect::CatchAE(Effect *this);
void __thiscall Effect::SetLoopInfo(Effect *this, const char *pcLoopSoundFileName, float fLoopKeepTime, float fLoopWaitTime, float fTime);
void __thiscall Effect::_Effect(Effect *this);
void __thiscall Effect::Effect(Effect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *this, unsigned int);
bool __cdecl NiObject::IsExactKindOf(NiRTTI *pkRTTI, NiObject *pkObject);
void __thiscall CDecalEffect::Init(CDecalEffect *this, PgNsTerrain *pkTerrain, NiNode *pBuildingScene);
void __thiscall CDecalEffect::CDecalEffect(CDecalEffect *this);
void __thiscall CDecalEffect::_CDecalEffect(CDecalEffect *this);
void *__thiscall CDecalEffect::_vector_deleting_destructor_(CDecalEffect *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *this, unsigned int);
void __thiscall NiTPointerList<NiPointer<Effect>>::_NiTPointerList<NiPointer<Effect>>(NiTPointerList<NiPointer<Effect> > *this);
NiShader *__cdecl CPostProcessEffect::DynamicCast(NiRTTI *pkRTTI, NiShader *pkObject);
void __thiscall PgTList<NiPointer<Effect>>::_PgTList<NiPointer<Effect>>(PgTList<NiPointer<Effect> > *this);
void *__thiscall PgTList<NiPointer<Effect>>::_vector_deleting_destructor_(PgTList<NiPointer<Effect> > *this, unsigned int);
void *__thiscall Effect::_vector_deleting_destructor_(void *this, unsigned int a2);
NiRTTI *__thiscall Effect::GetRTTI(Effect *this);
bool __thiscall Effect::IsEnd(Effect *this, float fTime);
void *__thiscall Effect::_vector_deleting_destructor_(Effect *this, unsigned int);
void __thiscall EffectCtrl::SetFrequency(EffectCtrl *this, float fFrequency);
void __thiscall EffectCtrl::SetPhase(EffectCtrl *this, float fPhase);
void __thiscall CDecalEffect::Start(CDecalEffect *this, float fTime);
void __thiscall DecalMgr::Init(DecalMgr *this, PgNsTerrain *kTerrain, NiNode *kBuildingScene);
void __thiscall DecalMgr::SetHeightFieldTerrain(DecalMgr *this, PgNsTerrain *kTerrain);
bool __thiscall CharDecal::IsEnd(CharDecal *this);
bool __thiscall CharDecal::IsPassLifeTime(CharDecal *this, float fTime);
void __thiscall CharDecal::SetCharHandle(CharDecal *this, unsigned __int16 kHandle);
unsigned __int16 __thiscall CharDecal::GetCharHandle(CharDecal *this);
void __thiscall EffectCtrl::EffectCtrl(EffectCtrl *this);
void __thiscall EffectCtrl::_EffectCtrl(EffectCtrl *this);
void __thiscall EffectCtrl::Start(EffectCtrl *this, float _fTime);
void __thiscall EffectCtrl::Stop(EffectCtrl *this);
void __thiscall CharDecal::Update(CharDecal *this, float fTime);
void __thiscall CharDecal::SetCharHandle(CharDecal *this, Char *kChar);
void __thiscall CharDecal::SetLifeTime(CharDecal *this, float fTime);
void __thiscall EffectCtrl::StartEmitter(EffectCtrl *this, float _fTime);
void __thiscall EffectCtrl::StopEmitter(EffectCtrl *this);
void __thiscall DecalMgr::RemoveAllDecal(DecalMgr *this);
void __thiscall DecalMgr::Terminate(DecalMgr *this);
void __thiscall CharDecal::CharDecal(CharDecal *this);
void __thiscall CharDecal::_CharDecal(CharDecal *this);
void __thiscall EffectCtrl::Add(EffectCtrl *this, NiTimeController *pkController);
void __thiscall EffectCtrl::FindAndAdd(EffectCtrl *this, NiObjectNET *pkRoot);
void __thiscall EffectCtrl::SetEffectNode(EffectCtrl *this, NiAVObject *_pkEffectObject);
void __thiscall DecalMgr::_DecalMgr(DecalMgr *this);
void __thiscall DecalMgr::RemoveDecal(DecalMgr *this, CharDecal *pkDecal);
void __thiscall DecalMgr::RemoveCharDecal(DecalMgr *this, unsigned __int16 hHandle);
void __thiscall DecalMgr::Update(DecalMgr *this, float fTime);
bool __thiscall CDecalEffect::SetEffect(CDecalEffect *this, NiNode *pEffect);
void __thiscall DecalMgr::DecalMgr(DecalMgr *this);
CharDecal *__thiscall DecalMgr::AddDecal(DecalMgr *this, NiNode *pkNode);
void __thiscall DecalMgr::RemoveCharDecal(DecalMgr *this, Char *pkChar);
void __thiscall CharDecal::SetRadius(CharDecal *this, float fRadius);
CharDecal *__thiscall DecalMgr::AddDecal(DecalMgr *this, NiNode *pkNode, float fRadius, Char *pkChar);
CharDecal *__thiscall DecalMgr::AddDecal(DecalMgr *this, char *FileDir, float fRadius, Char *pkChar);
void __thiscall NiTListBase<DFALL<CharDecal__>_CharDecal__>::_NiTListBase<DFALL<CharDecal__>_CharDecal__>(NiTListBase<DFALL<CharDecal *>,CharDecal *> *this);
void *__thiscall NiTListBase<DFALL<CharDecal__>_CharDecal__>::_vector_deleting_destructor_(NiTListBase<DFALL<CharDecal *>,CharDecal *> *this, unsigned int);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>(NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *this);
void *__thiscall NiTArray<NiTimeController__>::_vector_deleting_destructor_(NiTArray<NiTimeController *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *this, unsigned int);
void __thiscall NiTList<CharDecal__>::_NiTList<CharDecal__>(NiTList<CharDecal *> *this);
void __thiscall NiAVObject::DetachAllProperties(NiAVObject *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *this, unsigned int);
void __thiscall NiTPointerList<CharDecal__>::_NiTPointerList<CharDecal__>(NiTPointerList<CharDecal *> *this);
void *__thiscall EffectCtrl::_vector_deleting_destructor_(EffectCtrl *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<CharDecal__>_CharDecal__>::_vector_deleting_destructor_(NiTList<CharDecal *> *this, unsigned int);
Ns_TourScene::TS_RESULT __thiscall FindDecalGeometry::ProcessData(FindDecalGeometry *this, NiAVObject *_pkObject, void *_pData);
void __thiscall PgTList<CharDecal__>::_PgTList<CharDecal__>(PgTList<CharDecal *> *this);
void *__thiscall PgTList<CharDecal__>::_vector_deleting_destructor_(PgTList<CharDecal *> *this, unsigned int);
void *__thiscall CharDecal::_vector_deleting_destructor_(CharDecal *this, unsigned int);
void *__thiscall DecalMgr::_scalar_deleting_destructor_(DecalMgr *this, unsigned int);
std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::_Min(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Pnode);
void __thiscall NiTListBase<DFALL<Effect__>_Effect__>::_NiTListBase<DFALL<Effect__>_Effect__>(NiTListBase<DFALL<Effect *>,Effect *> *this);
void *__thiscall NiTListBase<DFALL<Effect__>_Effect__>::_scalar_deleting_destructor_(NiTListBase<DFALL<Effect *>,Effect *> *this, unsigned int);
NiPoint3 *__thiscall Char::GetHairPos(Char *this, NiPoint3 *result);
NiPoint3 *__thiscall Char::GetLeftHandPos(Char *this, NiPoint3 *result);
NiPoint3 *__thiscall Char::GetLeftShoesPos(Char *this, NiPoint3 *result);
NiPoint3 *__thiscall Char::GetRightShoesPos(Char *this, NiPoint3 *result);
NiPoint3 *__thiscall Char::GetTopLinkPos(Char *this, NiPoint3 *result);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>(NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *this, unsigned int);
void __thiscall EffectMgr::AttachEffectToWorld(EffectMgr *this, Effect *pkEffect);
void __thiscall EffectMgr::PlayEffect(EffectMgr *this, Effect *pkEffect);
void __thiscall EffectMgr::SetGuildAcademyMasterEffect(EffectMgr *this, Effect *pkEffect);
bool __thiscall EffectMgr::IsExistEffect(EffectMgr *this, Effect *pkSrcEffect);
float __thiscall EffectMgr::CalculateEffScaleRatio(EffectMgr *this, NiNode *pkEffect, NiNode *pkTarget);
void __thiscall EffectMgr::AuraEffectEnable(EffectMgr *this, bool b);
Effect *__thiscall EffectMgr::FindLightningWaveEffect(EffectMgr *this, unsigned __int16 kID);
ArrowEff *__thiscall EffectMgr::GetArrowEffectInList(EffectMgr *this, __int16 AtkSeqNum, unsigned __int16 kCaster);
NiNode *__thiscall EffectMgr::GetEffectNode(EffectMgr *this, char *pcName);
float __thiscall EffectMgr::CalculateEffScaleRatio(EffectMgr *this, char *pcEffectName, NiNode *pkTarget);
Effect *__thiscall EffectMgr::FindAuraEffect(EffectMgr *this, unsigned __int16 kCaster);
void __thiscall EffectMgr::FindEffectAbstateCtrlAni(EffectMgr *this, unsigned __int16 kTargetHandle, unsigned int AbstateIndex);
bool __thiscall EffectMgr::Init(EffectMgr *this);
void __thiscall EffectMgr::DetachEffectFromWorld(EffectMgr *this, Effect *pkEffect);
void __thiscall EffectMgr::Add(EffectMgr *this, Effect *pkEffect);
void __thiscall EffectMgr::SetShow(EffectMgr *this, Effect *pkEffect, bool _bShow, bool bWithWorld);
void __thiscall EffectMgr::CreateActionEffect(EffectMgr *this, ActionEffectInfo *pkInfo, unsigned int uiCasterEventCode, float fOffSet, Char *pkCaster, Char *pkTarget, bool bGroundPointEffect, unsigned __int16 kCurSkillID, NiControllerSequence *pkSeq);
void __thiscall EffectMgr::CreateActionEffect(EffectMgr *this, ActionInfo *pkInfo, int iIndex, Char *pkCaster, Char *pkTarget, bool bGroundPointEffect);
void __thiscall EffectMgr::CreateEffect(EffectMgr *this, ActionInfo *pkInfo, int iIndex, Char *pkCaster, Char *pkTarget);
void __thiscall EffectMgr::RemoveClientEff(EffectMgr *this, Effect *eff);
void __thiscall EffectMgr::RemoveAllClientEff(EffectMgr *this);
void __thiscall EffectMgr::Remove(EffectMgr *this, Effect *pkEffect);
void __thiscall EffectMgr::RemoveEffect(EffectMgr *this, Char *pkEffect);
void __thiscall EffectMgr::RemoveClientEff(EffectMgr *this, unsigned int uiEffType);
void __thiscall EffectMgr::Update(EffectMgr *this, float fTime);
void __thiscall EffectMgr::RemoveEffect(EffectMgr *this, Effect *pkEffect);
void __thiscall EffectMgr::EffectMgr(EffectMgr *this);
void __thiscall EffectMgr::_EffectMgr(EffectMgr *this);
void __thiscall EffectMgr::RemoveAll(EffectMgr *this);
void __thiscall EffectMgr::Terminate(EffectMgr *this);
void __thiscall EffectMgr::SetAbstateInform(EffectMgr *this, ABSTATE_INFORMATION *pkAbstateInform, unsigned __int16 TargetHandle);
void __thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Wherenode);
void __cdecl std::_Distance2<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>>_unsigned_int>(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > _Last, unsigned int *_Off, std::bidirectional_iterator_tag __formal);
void __thiscall AttachEff::SetTargetNode(AttachEff *this, NiNode *_pNode, IEffectHolder *pkEffHolder);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,Effect *> *this, unsigned int);
void __thiscall NiTPointerList<Effect__>::_NiTPointerList<Effect__>(NiTPointerList<Effect *> *this);
void __thiscall NiTList<Effect__>::_NiTList<Effect__>(NiTList<Effect *> *this);
void *__thiscall NiTPointerListBase<DFALL<Effect__>_Effect__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<Effect *>,Effect *> *this, unsigned int);
EffectMgr::AbstateAni *__thiscall std::allocator<EffectMgr::AbstateAni>::allocate(std::allocator<EffectMgr::AbstateAni> *this, unsigned int _Count);
SubAbStateInfo *__cdecl SubAbStateInfoTab::GetByStrInxName(char *pcInxName, unsigned int Str);
void __thiscall PgTList<Effect__>::_PgTList<Effect__>(PgTList<Effect *> *this);
void *__thiscall PgTList<Effect__>::_vector_deleting_destructor_(PgTList<Effect *> *this, unsigned int);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Erase(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Rootnode);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::les *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Effect___std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Effect__>>_1>>::_Eqrange(std::_Tree<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::les *result, const unsigned int *_Keyval);
EffectMgr::AbstateAni *__cdecl std::_Uninit_move<EffectMgr::AbstateAni___EffectMgr::AbstateAni___std::allocator<EffectMgr::AbstateAni>_EffectMgr::AbstateAni>(EffectMgr::AbstateAni *_First, EffectMgr::AbstateAni *_Last, EffectMgr::AbstateAni *_Dest, std::allocator<EffectMgr::AbstateAni> *_Al, EffectMgr::AbstateAni *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::reserve(std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *this, unsigned int _Count);
void __thiscall std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::_Reserve(std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *this, unsigned int _Count);
void __thiscall std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::push_back(std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *this, EffectMgr::AbstateAni *_Val);
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 kTarget, NiPoint3 kDir, float fTime);
bool __thiscall EffectMgr::CreatePigeonEffect(EffectMgr *this, Char *pkTarget, float fTime);
LookAtEffect *__thiscall EffectMgr::JustCreateLookAtEffect(EffectMgr *this, char *pcEffectName);
ClientEffect *__thiscall EffectMgr::JustCreateClientEffect(EffectMgr *this, char *pcEffectName);
ClientEffect *__thiscall EffectMgr::JustCreateClientEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos);
ClientEffect *__thiscall EffectMgr::JustCreateClientEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 hHandle);
Effect *__thiscall EffectMgr::JustCreateEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos, NiPoint3 kDir, float fTime, bool bDir);
Effect *__thiscall EffectMgr::JustCreateAttachEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 kTarget, NiPoint3 kDir, float fTime);
bool __thiscall EffectMgr::CreateShootEff(EffectMgr *this, char *pcShootEffName, char *pcShootBombName, char *pcBombSndName, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, DamageInfoSet *pkDamInfoSet, LastEffPos ePos, bool bFireOnRight);
bool __thiscall EffectMgr::CreateShootEff(EffectMgr *this, char *pcShootEffName, char *pcShootBombName, char *pcShootSndName, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, unsigned int uiHitDamage);
bool __thiscall EffectMgr::CreateShootEff(EffectMgr *this, char *pcShootEffName, ActionEffectInfo *pkBombInfo, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, __int16 AtkSeqNum, DamageInfoSet *pkDamInfoSet, LastEffPos ePos, bool bFireOnRight);
bool __thiscall EffectMgr::CreateWeddingEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 Newlywed, float fTime);
bool __thiscall EffectMgr::CreateLightningShootEff(EffectMgr *this, char *pcShootEffName, char *pcShootBombName, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, DamageInfoSet *pkDamInfoSet, LastEffPos ePos, bool bFireOnRight, unsigned __int16 kID);
LookAtEffect *__thiscall EffectMgr::JustCreateLookAtEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kLookAtPos, Char *pkCaster);
LookAtEffect *__thiscall EffectMgr::JustCreateLookAtEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kLookAtPos, NiPoint3 kPos);
Effect *__thiscall EffectMgr::JustCreateAttachEffect(EffectMgr *this, char *pcEffectName, NiNode *pkTargetNode, IEffectHolder *pkHolder, float fTime);
bool __thiscall EffectMgr::CreateEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos, NiPoint3 kDir, float fTime, float fScale);
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, unsigned int *dwEffHandle_, NiNode *_pEffect, NiNode *_pNode, float fTime, bool _bLoop, unsigned __int16 kHandle);
bool __thiscall EffectMgr::CreateAttachScaleEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, NiNode *pkTargetNode, float fScale, float fTime);
NiNode *__thiscall EffectMgr::GetEffPos(EffectMgr *this, AbnormalStateViewInfo::EffPosEnum eEffPos, Char *pkTarget);
Effect *__thiscall EffectMgr::JustCreateAttachEffect(EffectMgr *this, char *pcEffectName, Char *pkTarget, AbnormalStateViewInfo::EffPosEnum eEffPos, float fTime, bool bShow);
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, NiNode *_pNode, float fTime, bool _bLoop);
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, Char *pkTarget, AbnormalStateViewInfo::EffPosEnum eEffPos, float fTime, bool _bLoop, bool bAura, bool bHold, bool bShow);
bool __thiscall EffectMgr::CreateAniCtrlEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, Char *pkTarget, AbnormalStateViewInfo::EffPosEnum eEffPos, float fTime, bool _bLoop, unsigned __int16 kID);
bool __thiscall EffectMgr::CreateStretchEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos, NiPoint3 kDir, Char *pkCaster, Char *pkTarget, float fTime);
bool __thiscall EffectMsg::Play(EffectMsg *this, EFFECT_MESSAGE_TYPE Type);
void __thiscall EffectMsg::EffectMsg(EffectMsg *this);
void __thiscall EffectMsg::_EffectMsg(EffectMsg *this);
bool __thiscall EffectMsg::Load(EffectMsg *this);
void __thiscall EffectObject::EffectObject(EffectObject *this);
void __thiscall ExpEffect::ExpEffect(ExpEffect *this, NiNode *pkNode, bool bCreateProgramEff);
void __thiscall ExpEffect::_ExpEffect(ExpEffect *this);
bool __thiscall ExpEffect::IsEnd(ExpEffect *this, float fTime);
bool __thiscall ExpEffect::IsHitTarget(ExpEffect *this);
void __thiscall ExpEffect::Update(ExpEffect *this, float fTime);
void __thiscall ExpEffect::Start(ExpEffect *this, float fTime);
NiRTTI *__thiscall ExpEffect::GetRTTI(ExpEffect *this);
void *__thiscall ExpEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall ExpEffect::_vector_deleting_destructor_(ExpEffect *this, unsigned int);
void __thiscall SpEffect::SpEffect(SpEffect *this, NiNode *pkEffect);
void __thiscall SpEffect::Start(SpEffect *this, NiNode *pkParent);
void __thiscall SpEffect::End(SpEffect *this, NiNode *pkParent);
void __thiscall SpEffect::Update(SpEffect *this, float fTime);
void __thiscall StretchEffect::SetAniSpeedCtrl(StretchEffect *this, float fRequency, float fPhase);
bool __thiscall StretchEffect::IsEnd(StretchEffect *this, float fTime);
void __thiscall StretchEffect::OnEnd(StretchEffect *this, float fTime);
void __thiscall StretchEffect::Update(StretchEffect *this, float fTime);
void __thiscall StretchEffect::Start(StretchEffect *this, float fTime);
void __thiscall StretchEffect::CopyMember(StretchEffect *this, Effect *pkEffect);
void __thiscall StretchEffect::StretchEffect(StretchEffect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster);
void __thiscall StretchEffect::_StretchEffect(StretchEffect *this);
Effect *__thiscall StretchEffect::Clone(StretchEffect *this);
NiRTTI *__thiscall StretchEffect::GetRTTI(StretchEffect *this);
void __thiscall StretchEffect::SetBombEffectName(StretchEffect *this, char *pcBombEffName);
void __thiscall StretchEffect::SetBombSndName(StretchEffect *this, char *pcBombSndName);
unsigned __int16 __thiscall StretchEffect::GetStartChar(StretchEffect *this);
unsigned __int16 __thiscall StretchEffect::GetEndChar(StretchEffect *this);
void *__thiscall StretchEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall StretchEffect::_scalar_deleting_destructor_(StretchEffect *this, unsigned int);
void __thiscall WeddingEffect::WeddingEffect(WeddingEffect *this, NiNode *pkNode, bool bCreateProgramEff);
void __thiscall WeddingEffect::_WeddingEffect(WeddingEffect *this);
bool __thiscall WeddingEffect::IsEnd(WeddingEffect *this, float fTime);
void __thiscall WeddingEffect::Update(WeddingEffect *this, float fTime);
void __thiscall WeddingEffect::Start(WeddingEffect *this, float fTime);
NiRTTI *__thiscall WeddingEffect::GetRTTI(WeddingEffect *this);
void *__thiscall WeddingEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall WeddingEffect::_vector_deleting_destructor_(WeddingEffect *this, unsigned int);
bool __thiscall TextEff::IsAlive(TextEff *this, float fTime);
void __thiscall TextEff::SetStartTime(TextEff *this, float fTime);
void __thiscall TextEff::TextEff(TextEff *this);
void __thiscall TextEff::_TextEff(TextEff *this);
void __thiscall TextEff::AddGeometry(TextEff *this, NiScreenElements *pkGeom, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall TextEff::AddNode(TextEff *this, NiNode *pkNode, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall TextEff::Update(TextEff *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera);
void *__thiscall TextEff::_scalar_deleting_destructor_(TextEff *this, unsigned int);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>(NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *> *this, unsigned int);
void __thiscall TextEffMgr::GeomRes::_GeomRes(TextEffMgr::GeomRes *this);
void __thiscall TextEffMgr::Draw(TextEffMgr *this);
NiNode *__thiscall TextEffMgr::CreateControllNode(TextEffMgr *this, NiTransformController *pkMoveCtrl, NiTransformController *pkNoiseCtrl, NiTransformController *pkSizeCtrl, NiAlphaController *pkAlphaCtrl, NiScreenElements *pkGeom);
void __thiscall TextEffMgr::Add(TextEffMgr *this, TextEff *pkTextEff);
void __thiscall TextEffMgr::ReleaseGeometry(TextEffMgr *this);
bool __thiscall TextEffMgr::LoadController(TextEffMgr *this);
void __thiscall TextEffMgr::ReleaseController(TextEffMgr *this);
void __thiscall TextEffMgr::_TextEffMgr(TextEffMgr *this);
void __thiscall TextEffMgr::AddNumTextEff(TextEffMgr *this, unsigned __int16 kHandle, int iNum, TextEffMgr::TextEffColor eColor, bool bCritical);
void __thiscall TextEffMgr::AddMissTextEff(TextEffMgr *this, unsigned __int16 kHandle);
void __thiscall TextEffMgr::AddResistTextEff(TextEffMgr *this, unsigned __int16 kHandle);
void __thiscall TextEffMgr::AddBlockTextEff(TextEffMgr *this, unsigned __int16 kHandle);
void __thiscall TextEffMgr::AddImmuneTextEff(TextEffMgr *this, unsigned __int16 kHandle);
void __thiscall TextEffMgr::Remove(TextEffMgr *this, TextEff *pkTextEff);
void __thiscall TextEffMgr::RemoveAll(TextEffMgr *this);
void __thiscall TextEffMgr::Update(TextEffMgr *this, float fTime, NiCamera *pkWorldCamera);
void __thiscall TextEffMgr::CopyProperty(TextEffMgr *this, NiScreenElements *pkGeom, NiTriShape *pkTriShape);
bool __thiscall TextEffMgr::CreateGeometry(TextEffMgr *this);
void __thiscall TextEffMgr::AddDamage(TextEffMgr *this, unsigned __int16 kHandle, int iNum);
void __thiscall TextEffMgr::TextEffMgr(TextEffMgr *this);
bool __thiscall TextEffMgr::Init(TextEffMgr *this);
void __thiscall TextEffMgr::Terminate(TextEffMgr *this);
void __thiscall TextEffMgr::GeomRes::GeomRes(TextEffMgr::GeomRes *this);
void __thiscall NiTPointerList<TextEff__>::_NiTPointerList<TextEff__>(NiTPointerList<TextEff *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,TextEff *> *this, unsigned int);
void __thiscall PgTList<TextEff__>::_PgTList<TextEff__>(PgTList<TextEff *> *this);
void *__thiscall PgTList<TextEff__>::_vector_deleting_destructor_(PgTList<TextEff *> *this, unsigned int);
void __thiscall CBlindEffect::FastEnd(CBlindEffect *this);
void __thiscall CBlindEffect::CBlindEffect(CBlindEffect *this);
bool __thiscall CBlindEffect::Stop(CBlindEffect *this);
void __thiscall CBlindEffect::Draw(CBlindEffect *this, NiRenderer *pRender);
void __thiscall CBlindEffect::Update(CBlindEffect *this, float fAccolTime);
void __thiscall CBlindEffect::_CBlindEffect(CBlindEffect *this);
bool __thiscall CBlindEffect::Start(CBlindEffect *this, float fFullTime, float fFadeTime);
void *__thiscall CBlindEffect::_vector_deleting_destructor_(CBlindEffect *this, unsigned int);
void __thiscall CameraEffect::SetColor(CameraEffect *this, char ucR, char ucG, char ucB);
void __thiscall CameraEffect::SetAngleBoundary(CameraEffect *this, float fAngle, float *pkVar, float fBoundary);
void __thiscall CameraEffect::SetColor(CameraEffect *this, float fR, float fG, float fB);
void __thiscall CameraEffect::SetAngle(CameraEffect *this, float fAngleLR, float fAngleUD);
void __thiscall CameraEffect::Stop(CameraEffect *this);
void __thiscall CameraEffect::Draw(CameraEffect *this, NiRenderer *pRender);
void __thiscall CameraEffect::UpdateSchedule(CameraEffect *this, float fCurTime, float fAlphaRatio, unsigned int uiSchedule);
void __thiscall CameraEffect::SetSchedule(CameraEffect *this, unsigned int uiState, unsigned int uiCount);
void __thiscall CameraEffect::_CameraEffect(CameraEffect *this);
void __thiscall CameraEffect::ClearMove(CameraEffect *this);
void __thiscall CameraEffect::Update(CameraEffect *this, float fCurTime);
bool __thiscall CameraEffect::Start(CameraEffect *this, float fStartTime, float fFadeTime, unsigned int uiState, unsigned int uiCount);
void __thiscall CameraEffect::CameraEffect(CameraEffect *this);
void *__thiscall CameraEffect::_scalar_deleting_destructor_(CameraEffect *this, unsigned int);
unsigned __int16 __thiscall ClientEffect::GetTargetChar(ClientEffect *this);
void __thiscall ClientEffect::SetTargetChar(ClientEffect *this, unsigned __int16 kHandle);
void __thiscall ClientEffect::SetTargetPos(ClientEffect *this, NiPoint3 kPos);
void __thiscall ClientEffect::SetOffsetPos(ClientEffect *this, NiPoint3 kPos);
void __thiscall ClientEffect::_ClientEffect(ClientEffect *this);
void __thiscall ClientEffect::Stop(ClientEffect *this);
bool __thiscall ClientEffect::LengthOfView(ClientEffect *this);
void __thiscall ClientEffect::ClientEffect(ClientEffect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster);
void __thiscall ClientEffect::Update(ClientEffect *this, float fTime);
void *__thiscall ClientEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall ClientEffect::_vector_deleting_destructor_(ClientEffect *this, unsigned int);
void __thiscall LookAtEffect::_LookAtEffect(LookAtEffect *this);
void __thiscall LookAtEffect::LookAtEffect(LookAtEffect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster);
void __thiscall LookAtEffect::CalcDir(LookAtEffect *this);
void __thiscall LookAtEffect::Update(LookAtEffect *this, float fTime);
void __thiscall LookAtEffect::Start(LookAtEffect *this, float fTime);
void *__thiscall LookAtEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall LookAtEffect::_scalar_deleting_destructor_(LookAtEffect *this, unsigned int);
float __cdecl SoundGroup::GetMasterGain();
void __thiscall SoundGroup::SetMaxRange(SoundGroup *this, float fMax);
void __thiscall SoundGroup::SetTableSize(SoundGroup *this, unsigned int dwTableSize);
void __thiscall SoundGroup::SetTable(SoundGroup *this, unsigned int dwIndex, char *acFn);
bool __thiscall SoundGroup::SetChannelCount(SoundGroup *this, SoundMgr *rkMgr, unsigned int dwChannelCount);
bool __thiscall SoundGroup::Initialize(SoundGroup *this, SoundMgr *rkMgr, unsigned int dwChannelCount);
char *__thiscall SoundGroup::GetFilenameFrom(SoundGroup *this, SoundIndex *rkIndex);
void __thiscall SoundGroup::Terminate(SoundGroup *this);
void __thiscall SoundGroup::SetEnable(SoundGroup *this, bool bEnable);
void __thiscall SoundGroup::GetSoundMinMax(SoundGroup *this, float *fMin, float *fMax);
NiTList<NiAudioSource *> *__thiscall SoundGroupDynamic::GetPlayingSourceList(SoundGroupDynamic *this);
void __thiscall SoundGroupDynamic::Terminate(SoundGroupDynamic *this);
void __cdecl SoundGroup::SetMasterGain(float fVolume);
int __cdecl SoundGroup::StopAllSoundWholeGroup();
void __cdecl SoundGroup::UpdateWholeGroup(float fTime);
void __cdecl SoundGroup::TerminateWholeGroup();
void __cdecl SoundGroup::SetEnableWholeGroup(bool bEnable);
int __cdecl SoundGroup::UnloadAllSoundWholeGroup();
int __cdecl SoundGroup::DetachAllSoundWholeGroup();
bool __thiscall SoundGroup::IsChannelFull(SoundGroup *this);
bool __thiscall SoundGroup::IsOutofMaxRange(SoundGroup *this, NiPoint3 *rkPoint);
bool __thiscall SoundGroup::IsOutofMaxRange(SoundGroup *this, NiAVObject *pkObj);
bool __thiscall SoundGroup::LoadSound(SoundGroup *this, NiAudioSource *pkSource, char *pcFilename, bool bStreamed);
void __thiscall SoundGroup::SetGain(SoundGroup *this, float fVolume);
NiPointer<NiAudioSource> *__thiscall SoundGroup::CreateSource(SoundGroup *this, NiPointer<NiAudioSource> *result, unsigned int uiType);
void __thiscall SoundGroup::ClearSource(SoundGroup *this, NiAudioSource *pkSource);
void __thiscall SoundGroup::StopAllSound(SoundGroup *this);
bool __thiscall SoundGroup::Check3DSoundPlayable(SoundGroup *this, NiPoint3 *rkPoint);
bool __thiscall SoundGroup::Check3DSoundPlayable(SoundGroup *this, NiAVObject *pkObj);
void __thiscall SoundGroup::SetMinDistance(SoundGroup *this, float fMinDist);
void __thiscall SoundGroup::SetMaxDistance(SoundGroup *this, float fMaxDist);
bool __thiscall SoundGroupStatic::IsUniqueSource(SoundGroupStatic *this, NiMilesSource *pkSource);
NiAudioSource *__thiscall SoundGroupStatic::GetSoundDirectly(SoundGroupStatic *this, unsigned int dwSoundIndex);
void __thiscall SoundGroupStatic::StopSound(SoundGroupStatic *this, SoundIndex *rkIndex);
void __thiscall SoundGroupStatic::Terminate(SoundGroupStatic *this);
void __thiscall SoundGroupStatic::UnloadAllSound(SoundGroupStatic *this);
void __thiscall SoundGroupStatic::DetachAllSound(SoundGroupStatic *this);
void __thiscall SoundGroupStatic::DetachSound(SoundGroupStatic *this, SoundIndex *rkIndex);
bool __thiscall SoundGroupDynamic::IsUniqueSource(SoundGroupDynamic *this, NiMilesSource *pkSource);
void __thiscall SoundGroupDynamic::UnloadAllSound(SoundGroupDynamic *this);
void __thiscall SoundGroupDynamic::DetachAllSound(SoundGroupDynamic *this);
void __thiscall SoundGroup::Update(SoundGroup *this, float fTime);
void __thiscall SoundGroup::UpdatePlayingSource(SoundGroup *this);
NiPointer<NiAudioSource> *__thiscall SoundGroup::Create3DSource(SoundGroup *this, NiPointer<NiAudioSource> *result, char *pcFileName, bool bStreamed);
NiPointer<NiAudioSource> *__thiscall SoundGroup::CreateAmbientSource(SoundGroup *this, NiPointer<NiAudioSource> *result, char *pcFileName, bool bStreamed);
void __thiscall SoundGroupStatic::SetTableSize(SoundGroupStatic *this, unsigned int dwTableSize);
NiAudioSource *__thiscall SoundGroupStatic::GetSound(SoundGroupStatic *this, SoundIndex *rkIndex, bool bStreamed);
NiAudioSource *__thiscall SoundGroupStatic::Get3DSound(SoundGroupStatic *this, SoundIndex *rkIndex, bool bStreamed);
NiAudioSource *__thiscall SoundGroupStatic::PlaySoundA(SoundGroupStatic *this, SoundIndex *rkIndex, bool bLoop, bool bStreamed);
NiAudioSource *__thiscall SoundGroupStatic::Play3DSound(SoundGroupStatic *this, SoundIndex *rkIndex, NiPoint3 *rkPoint, bool bLoop);
NiAudioSource *__thiscall SoundGroupStatic::Play3DSound(SoundGroupStatic *this, SoundIndex *rkIndex, NiNode *pkNode, bool bLoop);
void __thiscall SoundGroupStatic::UnloadSound(SoundGroupStatic *this, SoundIndex *rkIndex);
void __thiscall SoundGroupDynamic::MarkAsRecentlyUsed(SoundGroupDynamic *this, NiAudioSource *pkSource);
void __thiscall SoundGroup::SoundGroup(SoundGroup *this);
void __thiscall SoundGroup::_SoundGroup(SoundGroup *this);
void __thiscall SoundGroupStatic::SoundGroupStatic(SoundGroupStatic *this);
void __thiscall SoundGroupStatic::_SoundGroupStatic(SoundGroupStatic *this);
NiAudioSource *__thiscall SoundGroupDynamic::PlaySoundA(SoundGroupDynamic *this, SoundIndex *rkIndex, bool bLoop, bool bStreamed);
NiAudioSource *__thiscall SoundGroupDynamic::Play3DSound(SoundGroupDynamic *this, SoundIndex *rkIndex, NiNode *pkNode, bool bLoop);
NiAudioSource *__thiscall SoundGroupDynamic::Play3DSound(SoundGroupDynamic *this, SoundIndex *rkIndex, NiPoint3 *rkPoint, bool bLoop);
NiPointer<NiAudioSource> *__thiscall SoundGroupDynamic::CreateSource(SoundGroupDynamic *this, NiPointer<NiAudioSource> *result, unsigned int uiType);
void __thiscall SoundGroupDynamic::PushInRecycleList(SoundGroupDynamic *this, NiAudioSource *pkSource);
void __thiscall SoundGroupDynamic::KeepUniqueSourceCountUnder(SoundGroupDynamic *this, unsigned int dwMaxSound);
void __thiscall SoundGroupDynamic::UpdatePlayingSource(SoundGroupDynamic *this);
void __thiscall SoundGroupDynamic::Update(SoundGroupDynamic *this, float fTime);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_void__>::RemoveTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,void *> *this);
void __thiscall SpTList<void__>::MoveToHead(SpTList<void *> *this, void **iter);
void __thiscall NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_NiTListBase<DFALL<SoundGroup__>_SoundGroup__>(NiTListBase<DFALL<SoundGroup *>,SoundGroup *> *this);
void __thiscall NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>(NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *> *this);
void *__thiscall NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_vector_deleting_destructor_(NiTListBase<DFALL<SoundGroup *>,SoundGroup *> *this, unsigned int);
void *__thiscall NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vector_deleting_destructor_(NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *> *this, unsigned int);
void __thiscall NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::DeleteItem(NiTMap<char const *,NiD3DGlobalConstantEntry *> *this, NiTMapItem<char const *,NiD3DGlobalConstantEntry *> *pkItem);
void *__thiscall NiTPointerListBase<DFALL<SoundGroup__>_SoundGroup__>::_vector_deleting_destructor_(NiTList<SoundGroup *> *this, unsigned int);
void __thiscall NiTList<NiAudioSource__>::_NiTList<NiAudioSource__>(NiTList<NiAudioSource *> *this);
void *__thiscall NiTPointerListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vector_deleting_destructor_(NiTList<NiAudioSource *> *this, unsigned int);
void *__thiscall SoundGroup::_scalar_deleting_destructor_(SoundGroup *this, unsigned int);
void *__thiscall SoundGroupMainChar::_scalar_deleting_destructor_(SoundGroupStatic *this, unsigned int);
void __thiscall SoundGroupBgm::SetFadeDurationTime(SoundGroupBgm *this, float fDuration);
void __thiscall SoundGroupBgm::SetCrossFade(SoundGroupBgm *this, bool bCross);
bool __thiscall SoundGroupBgm::Initialize(SoundGroupBgm *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount);
bool __thiscall SoundGroupBgm::IsBGMPlaying(SoundGroupBgm *this);
void __thiscall IAmbientArea::Update(IAmbientArea *this, float x, float y);
void __thiscall IAmbientArea::SetVolume(IAmbientArea *this, int iVolume);
void __thiscall CircleAmbientArea::Create(CircleAmbientArea *this, float fX, float fY, float fRadius);
bool __thiscall CircleAmbientArea::IsInside(CircleAmbientArea *this, float x, float y);
float __thiscall CircleAmbientArea::GetRadius(CircleAmbientArea *this);
void __thiscall SoundGroupAmbient::SetGain(SoundGroupAmbient *this, float fVolume);
void __thiscall SoundGroupInterface::SetGain(SoundGroupInterface *this, float fVolume);
void __thiscall SoundGroupInterface::SetEnable(SoundGroupInterface *this, bool bEnable);
bool __thiscall SoundGroupMainChar::Initialize(SoundGroupMainChar *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount);
void __thiscall SoundGroupBgm::SetGain(SoundGroupBgm *this, float fVolume);
NiPoint2 *__thiscall CircleAmbientArea::GetCenter(CircleAmbientArea *this, NiPoint2 *result);
void __thiscall SoundGroupAmbient::Update(SoundGroupAmbient *this, float fTime);
bool __thiscall SoundGroupAmbient::Initialize(SoundGroupAmbient *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount);
void __thiscall SoundGroupAmbient::SetAmbientVolumeSync(SoundGroupAmbient *this);
bool __thiscall SoundGroupInterface::Initialize(SoundGroupInterface *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount);
void __thiscall SoundGroupInterface::PlaySoundDynamic(SoundGroupInterface *this, char *pcFilename);
void __thiscall SoundGroupBgm::NextBgm(SoundGroupBgm *this, bool bLoop);
void __thiscall SoundGroupAmbient::OnExitArea(SoundGroupAmbient *this, IAmbientArea *pkArea);
void __thiscall SoundGroupBgm::SoundGroupBgm(SoundGroupBgm *this);
void __thiscall SoundGroupBgm::StopBGM(SoundGroupBgm *this);
int __thiscall SoundGroupAmbient::OnEnterArea(SoundGroupAmbient *this, IAmbientArea *pkArea);
bool __thiscall SoundGroupFieldEffect::Check3DSoundPlayable(SoundGroupFieldEffect *this, NiPoint3 *rkPoint);
void __thiscall SoundGroupAmbient::ClearArea(SoundGroupAmbient *this);
void __thiscall SoundGroupAmbient::_SoundGroupAmbient(SoundGroupAmbient *this);
void __thiscall IAmbientArea::SetSndFilename(IAmbientArea *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rkSndFn);
void __thiscall SoundGroupAmbient::LoadAreaTable(SoundGroupAmbient *this, char *pcFn);
void __thiscall SoundGroupBgm::PlayBGM(SoundGroupBgm *this, char *acFn, bool bLoop, float fBgmVol);
void __thiscall SoundGroupBgm::Update(SoundGroupBgm *this, float fTime);
void __thiscall SoundGroupBgm::PlayBGM(SoundGroupBgm *this, unsigned __int16 id, bool bLoop);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_void__>(NiTListBase<NiTPointerAllocator<unsigned int>,void *> *this);
void __thiscall NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>(NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *this);
void __thiscall NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>(NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *> *this);
void __thiscall NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>(NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,void *> *this, unsigned int);
void *__thiscall NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_scalar_deleting_destructor_(NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *this, unsigned int);
void *__thiscall NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vector_deleting_destructor_(NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *> *this, unsigned int);
void *__thiscall NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vector_deleting_destructor_(NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *this, unsigned int);
unsigned int __cdecl ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::GetTotal();
void *__thiscall SpTList<void__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,void *> *this, unsigned int);
void __thiscall NiTPointerList<void__>::_NiTPointerList<void__>(SpTList<void *> *this);
void *__thiscall NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *this, unsigned int);
void *__thiscall ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::_vector_deleting_destructor_(MapAmbienceSoundInfoTab *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *this, unsigned int);
void __thiscall NiTList<IAmbientArea__>::_NiTList<IAmbientArea__>(NiTList<IAmbientArea *> *this);
void __thiscall NiTList<SoundGroupAmbient::PlayingAreaInfo__>::_NiTList<SoundGroupAmbient::PlayingAreaInfo__>(NiTList<SoundGroupAmbient::PlayingAreaInfo *> *this);
void __thiscall NiTList<NiPointer<NiAudioSource>>::_NiTList<NiPointer<NiAudioSource>>(NiTList<NiPointer<NiAudioSource> > *this);
char *__thiscall IAmbientArea::GetSndFilename(IAmbientArea *this);
void __thiscall SoundGroupDynamic::_SoundGroupDynamic(SoundGroupDynamic *this);
void __thiscall MapAmbienceSoundInfoTab::MapAmbienceSoundInfoTab(MapAmbienceSoundInfoTab *this);
void *__thiscall SoundGroupBgm::_vector_deleting_destructor_(SoundGroupBgm *this, unsigned int);
bool __cdecl ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
void __thiscall SoundGroup3DAmbient::_SoundGroup3DAmbient(SoundGroup3DAmbient *this);
void *__thiscall SoundGroupAmbient::_vector_deleting_destructor_(SoundGroupAmbient *this, unsigned int);
void __thiscall SoundMgr::SetDistFactor(SoundMgr *this, float fVal);
void __thiscall SoundMgr::TerminateSoundGroups(SoundMgr *this);
void __thiscall SoundMgr::Enable(SoundMgr *this, bool b);
bool __thiscall SoundMgr::GetEnable(SoundMgr *this);
void __thiscall SoundMgr::PlayBGM(SoundMgr *this, unsigned __int16 id);
bool __thiscall SoundMgr::PlayBGM(SoundMgr *this, char *pcFileName);
bool __thiscall SoundMgr::PlayBGM(SoundMgr *this, char *pcFileName, bool bLoop);
void __thiscall SoundMgr::StopBGM(SoundMgr *this);
void __thiscall SoundMgr::StopAllSound(SoundMgr *this);
NiMilesListener *__thiscall SoundMgr::GetListener(SoundMgr *this);
NiAudioSource *__thiscall SoundMgr::Create3DSource(SoundMgr *this, char *pcFileName, bool bLoop, float fMin, float fMax);
unsigned int __thiscall SoundMgr::AllocateChannel(SoundMgr *this, unsigned int dwChannelCount);
void __thiscall SoundMgr::ReleaseChannel(SoundMgr *this, unsigned int dwChannelCount);
void __thiscall SoundMgr::SetMasterVolume(SoundMgr *this, float fVol);
void __thiscall SoundMgr::MuteSound(SoundMgr *this, bool b);
void __thiscall SoundMgr::SetAmbientVolumeSync(SoundMgr *this);
void __thiscall SoundMgr::HoldSound(SoundMgr *this, bool b);
void __thiscall SoundMgr::Terminate(SoundMgr *this);
NiAudioSource *__thiscall SoundMgr::CreateAmbientSource(SoundMgr *this, char *pcFileName, bool bLoop);
void __thiscall SoundMgr::PlayInterfaceSound(SoundMgr *this, SoundGroupInterface::SndIndex eSndIndex);
void __thiscall SoundMgr::PlayInterfaceSound(SoundMgr *this, char *pcFileName);
void __thiscall SoundMgr::SetBgVolume(SoundMgr *this, float fVol);
void __thiscall SoundMgr::SetEffectVolume(SoundMgr *this, float fVol);
void __thiscall SoundMgr::SetVoiceVolume(SoundMgr *this, float fVol);
void __thiscall SoundMgr::SetEnvEffectVolume(SoundMgr *this, float fVol);
unsigned int __cdecl GetNpcVoiceFileCount(char *pcFileName);
void __thiscall SoundMgr::PlayNPCVoice(SoundMgr *this, unsigned __int16 id);
void __thiscall SoundMgr::PlayGenderVoice(SoundMgr *this, char *pcFileName);
void __thiscall SoundMgr::PlayItemDropSound(SoundMgr *this, unsigned __int16 id, NiPoint3 *rkPos);
void __thiscall SoundMgr::PlayItemPutSound(SoundMgr *this, unsigned __int16 id);
void __thiscall SoundMgr::PlayItemEquipSound(SoundMgr *this, unsigned __int16 id);
void __thiscall SoundMgr::_SoundMgr(SoundMgr *this);
void __thiscall SoundMgr::CreateSound(SoundMgr *this, ActionEffectInfo *pkInfo, NiPoint3 *kPos);
void __thiscall SoundMgr::CreateSound(SoundMgr *this, char *pcSndName, NiPoint3 *kPos);
void __thiscall SoundMgr::SoundMgr(SoundMgr *this);
void __thiscall SoundMgr::Update(SoundMgr *this, float fTime, NiCamera *pkCamera);
void __thiscall SoundMgr::CreateSound(SoundMgr *this, ActionEffectInfo *pkInfo, Char *pkCaster, Char *pkTarget);
void __thiscall SoundMgr::CreateSound(SoundMgr *this, ActionInfo *pkInfo, int iIndex, Char *pkCaster, Char *pkTarget);
bool __thiscall SoundMgr::InitializeSoundGroups(SoundMgr *this);
bool __thiscall SoundMgr::Init(SoundMgr *this);
void __thiscall SoundGroupIndexedStatic::_SoundGroupIndexedStatic(SoundGroupIndexedStatic *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *this, unsigned int);
void __thiscall NiTPointerList<NiPointer<NiAudioSource>>::_NiTPointerList<NiPointer<NiAudioSource>>(NiTPointerList<NiPointer<NiAudioSource> > *this);
void *__thiscall NiTPointerListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<IAmbientArea *>,IAmbientArea *> *this, unsigned int);
void __thiscall PgTList<NiPointer<NiAudioSource>>::_PgTList<NiPointer<NiAudioSource>>(PgTList<NiPointer<NiAudioSource> > *this);
void *__thiscall PgTList<NiPointer<NiAudioSource>>::_vector_deleting_destructor_(PgTList<NiPointer<NiAudioSource> > *this, unsigned int);
NiPointer<PgWin> *__thiscall NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result, NiPointer<PgWin> *element);
void *__thiscall SoundGroupFieldEffect::_scalar_deleting_destructor_(SoundGroupNPCVoice *this, unsigned int);
void __thiscall SoundGroupInterface::SoundGroupInterface(SoundGroupInterface *this);
void *__thiscall SoundGroupInterface::_scalar_deleting_destructor_(SoundGroupInterface *this, unsigned int);
void __thiscall SoundGroupFieldEffect::SoundGroupFieldEffect(SoundGroupFieldEffect *this);
void __thiscall SoundGroup3DAmbient::SoundGroup3DAmbient(SoundGroup3DAmbient *this);
void __thiscall SoundGroupNPCVoice::SoundGroupNPCVoice(SoundGroupNPCVoice *this);
void __thiscall SoundGroupAmbient::SoundGroupAmbient(SoundGroupAmbient *this);
void __thiscall MachineOpt::WinPos::WinPos(MachineOpt::WinPos *this, char *pcWinName, float fX, float fY);
void __thiscall MachineOpt::WinPos::WinPos(MachineOpt::WinPos *this);
void __thiscall MachineOpt::WinPos::_WinPos(MachineOpt::WinPos *this);
bool __thiscall MachineOpt::WinPos::Save(MachineOpt::WinPos *this, _iobuf *fp);
bool __thiscall MachineOpt::WinPos::Load(MachineOpt::WinPos *this, _iobuf *fp);
bool __cdecl MachineOpt::Load(_iobuf *fp);
bool __cdecl MachineOpt::Save(_iobuf *fp);
float __cdecl MachineOpt::GetCurGama();
void __thiscall MachineOpt::SoundOption::SetDefault(MachineOpt::SoundOption *this);
signed int __cdecl MachineOpt::SetDefaultSoundOption();
MachineOpt::SoundOption *__cdecl MachineOpt::GetSoundOption();
void __cdecl MachineOpt::SetSoundOption(MachineOpt::SoundOption *rkOption);
void __cdecl MachineOpt::SetChatWinFilter(unsigned int uiMode, unsigned int uiOption);
void __cdecl MachineOpt::SetSysMsgWinFilter(unsigned int uiOption);
bool __cdecl MachineOpt::GetGlowEffect();
bool __cdecl MachineOpt::GetLightEffect();
int __cdecl MachineOpt::GetReadNum(_iobuf *fp, int size);
bool __cdecl MachineOpt::WriteOptFile(_iobuf *fp, void *pData, unsigned int size);
bool __cdecl MachineOpt::IsValidateFile(_iobuf *fp, int dataSize);
void __thiscall MachineOpt::UserLoginOption::SetDefault(MachineOpt::UserLoginOption *this);
void __cdecl MachineOpt::SetGameOpt(PROTO_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD *pkProto);
int __cdecl MachineOpt::MakeDefaultKey();
void __cdecl MachineOpt::SetKeyMap(PROTO_NC_CHAR_OPTION_IMPROVE_GET_KEYMAP_CMD *pkProto);
void __thiscall MachineOpt::StKeyMappingBuffer::StKeyMappingBuffer(MachineOpt::StKeyMappingBuffer *this);
void __thiscall MachineOpt::StShortCutSizeOption::StShortCutSizeOption(MachineOpt::StShortCutSizeOption *this);
void __thiscall MachineOpt::StSaveWinPosOption::StSaveWinPosOption(MachineOpt::StSaveWinPosOption *this);
void __thiscall MachineOpt::GraphicOption::SetDefault(MachineOpt::GraphicOption *this);
void __thiscall MachineOpt::GameOption::SetDefault(MachineOpt::GameOption *this);
_iobuf *__cdecl MachineOpt::SaveGraphicOption();
_iobuf *__cdecl MachineOpt::LoadGraphicOption();
_iobuf *__cdecl MachineOpt::SaveGameOption();
bool __cdecl MachineOpt::LoadGameOption();
bool __cdecl MachineOpt::SaveWinPos(_iobuf *fp);
void __cdecl MachineOpt::RemoveAllWinPos();
int __cdecl MachineOpt::CatchOrgGama();
int __cdecl MachineOpt::RestoreOrgGama();
void __cdecl BuildGammaRamp(_D3DGAMMARAMP *rkGammaRamp, float fGamma, float fContrast, float fBrightness);
void __cdecl GammaControl(float fGamma, float fContrast, float fBrightness);
_iobuf *__cdecl MachineOpt::SaveSoundOption();
_iobuf *__cdecl MachineOpt::LoadSoundOption();
void __thiscall MachineOpt::SoundOption::SoundOption(MachineOpt::SoundOption *this);
void __cdecl MachineOpt::SetGlowEffect(bool bEnable);
void __cdecl MachineOpt::SetLightEffect(bool bEnable);
_iobuf *__cdecl MachineOpt::MakeDefaultOptFile();
void __thiscall MachineOpt::GraphicOption::GraphicOption(MachineOpt::GraphicOption *this);
void __thiscall MachineOpt::GameOption::GameOption(MachineOpt::GameOption *this);
bool __cdecl MachineOpt::Load();
bool __cdecl MachineOpt::Save();
int MachineOpt::RemoveAll(void); // weak
bool __cdecl MachineOpt::RegistereWinPostion(PgWin *pkWin);
bool __cdecl MachineOpt::SetWinPostion(PgWin *pkWin);
bool __cdecl MachineOpt::LoadWinPos(_iobuf *fp);
void __cdecl MachineOpt::SetCurGama(float fGama);
void __cdecl MachineOpt::SetViewOutLine(bool bView);
bool __cdecl MachineOpt::LoadUserInfo();
bool __cdecl MachineOpt::SaveUserInfo();
void __cdecl MachineOpt::KeyMapConvertOldtoNew();
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>(NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *> *this, unsigned int);
MachineOpt::UserLoginOption *__thiscall MachineOpt::UserLoginOption::operator_(MachineOpt::UserLoginOption *this, MachineOpt::UserLoginOption *__that);
MachineOpt::WinPos *__cdecl MachineOpt::GetWinPosInList(PgWin *pkWin);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *> *this, unsigned int);
void __thiscall NiTPointerList<MachineOpt::WinPos__>::_NiTPointerList<MachineOpt::WinPos__>(NiTPointerList<MachineOpt::WinPos *> *this);
void *__thiscall PgTList<MachineOpt::WinPos__>::_vector_deleting_destructor_(PgTList<MachineOpt::WinPos *> *this, unsigned int);
bool __thiscall NiD3DShaderInterface::SetupGeometry(NiD3DShaderInterface *this, NiGeometry *pkGeometry);
void __thiscall OptMgr::_OptMgr(OptMgr *this);
bool __thiscall OptMgr::SaveChar(OptMgr *this);
bool __thiscall OptMgr::LoadChar(OptMgr *this);
bool __thiscall OptMgr::SaveUser(OptMgr *this);
bool __thiscall OptMgr::LoadUser(OptMgr *this);
bool __thiscall OptMgr::SaveMachine(OptMgr *this);
bool __thiscall OptMgr::LoadMachine(OptMgr *this);
void __thiscall OptMgr::OptMgr(OptMgr *this);
void *__thiscall Option::_scalar_deleting_destructor_(OptMgr *this, unsigned int);
bool __cdecl ActSkillViewInfoTab::CheckActionTable();
unsigned int __cdecl Skill::GetTotalLearnActSkill();
Skill::LearnSkillInfo *__cdecl Skill::GetLearnActSkillInfo(unsigned int uiIndex);
bool __cdecl Skill::IsLearnSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::IsLearnPassiveSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::UnLearnSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::UnLearnActiveSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::UnLearnPassiveSkill(unsigned __int16 kSkillID);
unsigned int __cdecl Skill::GetRestEmpowerPoint();
void __cdecl Skill::SetRestEmpowerPoint(unsigned int uiPoint);
void __cdecl Skill::SetRestEmpowerPointInEdit(int iPoint);
int __cdecl Skill::GetRestEmpowerPointInEdit();
unsigned int __cdecl Skill::GetAntiEmpowerPoint();
void __cdecl Skill::SetAntiEmpowerPoint(unsigned int uiPoint);
void __cdecl Skill::SetAntiEmpowerPointInEdit(unsigned int uiPoint);
unsigned int __cdecl Skill::GetAntiEmpowerPointInEdit();
bool __cdecl Skill::GetEmpowerResetable();
Skill::LearnSkillInfo *__cdecl Skill::GetLearnActSkillInfo(unsigned __int16 kSkillID);
void __cdecl Skill::ClearLearnActSkillInfo();
void __cdecl Skill::SetEmpowerResetable(bool bResetable);
void __cdecl Skill::ClearLearnPassiveSkill();
bool __cdecl Skill::LearnPassiveSkill(unsigned __int16 kSkillID);
unsigned __int16 __cdecl Skill::GetLearnPassiveSkillInfo(unsigned int uiIndex);
unsigned int __cdecl Skill::GetTotalLearnPassiveSkill();
Skill::LearnProdSkillInfo *__cdecl Skill::GetLearnProductSkill(unsigned int uiIndex);
Skill::LearnProdSkillInfo *__cdecl Skill::GetLearnProductSkill(unsigned __int16 kSkillID);
unsigned int __cdecl Skill::GetTotalLearnProductSkill();
bool __cdecl Skill::IsProduceBaseSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::IsProduceSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::IsGatherSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::IsRideSkill(unsigned __int16 kSkillID);
Skill::EmpowerInfo *__cdecl Skill::GetEmpowerInfo(Skill::EmpowerInfo *result, unsigned __int16 kSkillID);
int __cdecl Skill::Terminate();
bool __cdecl Skill::IsLearnProdSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::LearnSkill(unsigned __int16 kSkillID, Skill::EmpowerInfo *pkInfo, unsigned int dwSkillExp);
bool __cdecl Skill::IsSkillUsePossible(unsigned __int16 kSkillID);
void __cdecl Skill::AddSysMsg(const char *pcText);
float __cdecl Skill::GetLastCoolTimeByItemActionID(unsigned __int16 kActionID);
float __cdecl Skill::GetLastCoolTime(unsigned __int16 kSkillID);
void __cdecl Skill::ApplyCoolTimeToInterface();
int __cdecl Skill::ClearLearnSkill();
void __cdecl Skill::InitPassiveSkill(PROTO_NC_CHAR_SKILL_PASSIVE_CMD *pkProto);
bool __cdecl Skill::AmILearnAnyProdBaseSkill();
int __cdecl Skill::GetCountOfILearnAnyProdBaseSkill();
bool __cdecl Skill::IsMovingSkill(unsigned __int16 kSkillID);
bool __cdecl Skill::IsSkillUsePossibleByItemActionID(unsigned __int16 ActionID);
void __cdecl Skill::RecordSkillUseByItemActionID(unsigned __int16 kActionID, float fCurTime, float fStartTime, float fMaxCoolTime);
void __cdecl SkillEmpowerRequest::Register(unsigned __int16 kSkillID, Skill::EmpowerInfo kInfo);
void __cdecl Skill::Update(float fTime);
void __cdecl Skill::SetLastCoolTimeByItemActionID(unsigned __int16 kActionID, float fLastCoolTime);
void __cdecl SkillEmpowerRequest::Applicate(unsigned __int16 kSkillID);
void __cdecl SkillEmpowerRequest::Cancel(unsigned __int16 kSkillID);
bool __cdecl Skill::IsBuildMiniRoomSkill(unsigned __int16 kSkillID);
void __cdecl Skill::DecreaseRecordTime(unsigned __int16 kID);
bool __cdecl Skill::Init();
unsigned __int16 __cdecl Skill::GetBaseSkillID(unsigned __int16 kSkillID, int *riMaxLevel);
Skill::EmpowerInfo *__cdecl Skill::GetAccumulatedEmpowerInfo(Skill::EmpowerInfo *result, unsigned __int16 kSkillID);
unsigned int __cdecl Skill::GetEmpowerAppliedCoolTime(unsigned __int16 kSkillID);
unsigned int __cdecl Skill::GetEmpowerAppliedSP(unsigned __int16 kSkillID);
void __cdecl Skill::RecordSkillUse(unsigned __int16 kSkillID, float fCurTime, float fStartTime, float fMaxCoolTime);
void __cdecl Skill::InitSkill(PROTO_NC_CHAR_CLIENT_SKILL_CMD *pkProto);
void __cdecl Skill::SetLastCoolTime(unsigned __int16 kSkillID, float fLastCoolTime);
void __thiscall SkillUseRecord::SkillUseRecord(SkillUseRecord *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> > *this);
void __thiscall NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>(NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq *>,SkillEmpowerRequest::EmpowerReq *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> > *this, unsigned int);
void *__thiscall NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vector_deleting_destructor_(NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq *>,SkillEmpowerRequest::EmpowerReq *> *this, unsigned int);
unsigned int __cdecl ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal();
void *__thiscall ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::_vector_deleting_destructor_(ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab> *this, unsigned int);
void *__thiscall IIDTableBase<PassiveSkillViewInfo_PasSkillViewInfoTab_unsigned_short>::_scalar_deleting_destructor_(PasSkillViewInfoTab *this, unsigned int);
void *__thiscall ITableBase<ActiveSkillInfo_ActSkillInfoTab>::_scalar_deleting_destructor_(ITableBase<ActiveSkillInfo,ActSkillInfoTab> *this, unsigned int);
void *__thiscall ITableBase<PassiveSkillInfo_PasSkillInfoTab>::_scalar_deleting_destructor_(ITableBase<PassiveSkillInfo,PasSkillInfoTab> *this, unsigned int);
void *__thiscall IIDTableBase<PassiveSkillInfo_PasSkillInfoTab_unsigned_short>::_vector_deleting_destructor_(PasSkillInfoTab *this, unsigned int);
bool __thiscall IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::IsValidID(IIDTableBase<SubAbStateInfo,SubAbStateInfoTab,unsigned short> *this, unsigned __int16 ID);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> > *this, unsigned int);
void __thiscall NiTPointerList<NiPointer<SkillUseRecord>>::_NiTPointerList<NiPointer<SkillUseRecord>>(NiTPointerList<NiPointer<SkillUseRecord> > *this);
void *__thiscall NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_scalar_deleting_destructor_(NiTList<SkillEmpowerRequest::EmpowerReq *> *this, unsigned int);
void *__thiscall ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::_scalar_deleting_destructor_(ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab> *this, unsigned int);
void *__thiscall ActSkillViewInfoTab::_scalar_deleting_destructor_(ActSkillViewInfoTab *this, unsigned int);
void *__thiscall PgTList<NiPointer<SkillUseRecord>>::_vector_deleting_destructor_(PgTList<NiPointer<SkillUseRecord> > *this, unsigned int);
void __thiscall ActSkillViewInfoTab::ActSkillViewInfoTab(ActSkillViewInfoTab *this);
void __thiscall PasSkillViewInfoTab::PasSkillViewInfoTab(PasSkillViewInfoTab *this);
unsigned __int16 __thiscall PasSkillViewInfoTab::GetID(BRAccUpgradeInfoTab *this, BRAccUpgradeInfo *pkRecord);
unsigned __int16 __thiscall PasSkillViewInfoTab::GetInvalidID(PasSkillViewInfoTab *this);
void __thiscall ActSkillInfoTab::ActSkillInfoTab(ActSkillInfoTab *this);
void *__thiscall IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::_scalar_deleting_destructor_(ActSkillInfoTab *this, unsigned int);
void __thiscall PasSkillInfoTab::PasSkillInfoTab(PasSkillInfoTab *this);
bool __cdecl ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<ActiveSkillInfo_ActSkillInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
bool __cdecl ITableBase<PassiveSkillInfo_PasSkillInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed);
PartyMemberInfo *__thiscall Party::GetMemberInfo(Party *this, unsigned int uiIndex);
void __thiscall Party::ClearMemberInfo(Party *this);
int __thiscall Party::GetBelongType(Party *this);
void __thiscall Party::SetBelongType(Party *this, int iType);
void __thiscall Party::SetLootType(Party *this, char nItemGrade, char nItemLooting);
void __thiscall Party::_Party(Party *this);
void __thiscall Party::SetJoinProposeData(Party *this, PROTO_NC_PARTY_JOINPROPOSE_REQ *p);
void __thiscall Party::ClearJoinProposeData(Party *this);
PartyMemberInfo *__thiscall Party::GetMemberInfo(Party *this, Name5 kCharID);
void __thiscall Party::SetMemberList(Party *this, PROTO_NC_PARTY_MEMBER_LIST_CMD *p);
PartyMemberInfo *__thiscall Party::AddMember(Party *this, PROTO_NC_PARTY_JOIN_ACK *p);
void __thiscall Party::MemberLogout(Party *this, PROTO_NC_PARTY_LOGOUTINFO_CMD *p);
void __thiscall Party::MemberLogin(Party *this, PROTO_NC_PARTY_LOGININFO_CMD *p);
void __thiscall Party::ChangePartyMaster(Party *this, Name5 kCharID);
Name5 *__thiscall Party::GetPartyMasterID(Party *this, Name5 *result);
bool __thiscall Party::IsMePartyMaster(Party *this);
Name5 *__thiscall Party::GetLooterID(Party *this, Name5 *result);
void __thiscall Party::SetLooterID(Party *this, Name5 kLooterID);
void __thiscall Party::ChangeUserName(Party *this, Name5 *OldName, Name5 *NewName);
void __thiscall Party::Party(Party *this);
void __thiscall Party::Clear(Party *this);
void __thiscall Party::DeleteMember(Party *this, Name5 kDelCharID);
void __thiscall Name5::Name5(PROTO_CHAT_RESTRICT_INFO *this);
void *__thiscall Party::_vector_deleting_destructor_(Party *this, unsigned int);
unsigned int __cdecl ActSkillInfoTab::CheckCRC();
unsigned int __cdecl ActSkillInfoTab::GenerateCRCSum();
bool __thiscall ActSkillInfoTab::DataProcess(ActSkillInfoTab *this);
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___ItemInfo__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, ItemInfo **_Val2);
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>(...);
void __thiscall ITask::FinishThisDownward(ITask *this);
bool __thiscall ITask::ProcessNetMsg(ITask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
bool __cdecl ITask::ProcessNetMsgAll(int iDepart, int iCommand, int iRevBytes, void *pvData);
bool __thiscall ITask::IsFinished(ITask *this);
void __thiscall ITask::DirectDispatchToChildren(ITask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ITask::DirectDispatchToParent(ITask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __cdecl ITask::DirectDispatchAll(int iMsg, void *pvBody);
void __thiscall ITask::UpdateChildTask(ITask *this, float fTime);
void __thiscall ITask::UpdateSerialTask(ITask *this, float fTime);
void __thiscall ITask::Update(ITask *this, float fTime);
NiPointer<ITask> *__thiscall ITask::DetachChildTask(ITask *this, NiPointer<ITask> *result, ITask *pkTask);
void __cdecl ITask::FinishTaskAll();
void __cdecl ITask::UpdateTaskAll(float fTime);
void __thiscall ITask::AttachParentTask(ITask *this, ITask *pkParent);
void __thiscall ITask::AttachChildTask(ITask *this, ITask *pkTask);
void __thiscall ITask::ITask(ITask *this, ITask *pkParent);
void *__thiscall NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> > *this, unsigned int);
void *__thiscall ProductTask::_scalar_deleting_destructor_(ProductTask *this, unsigned int);
void __thiscall ItemUseTask::SetInventoryIndex(ItemUseTask *this, unsigned int uiInventoryIndex);
void __thiscall ItemUseTask::SetGameFrameWork(ItemUseTask *this, GameFrameWork *pkGameFrameWork);
bool __cdecl ItemUseTask::InitCastingProgress();
void __thiscall ItemUseTask::NcUserConnectionChangeIDItemUseReq(ItemUseTask *this, int iSlotNum);
void __thiscall ItemUseTask::OnIdle(ItemUseTask *this, float fTime);
bool __thiscall ItemUseTask::OnProcessNetMsg(ItemUseTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
bool __thiscall ItemUseTask::ItemNameCheck(ItemUseTask *this, Item *pkItem, const char *pkName);
bool __thiscall ItemUseTask::UsePutOnBelongClear(ItemUseTask *this, Item *pkItem, unsigned int uiInvenIdx);
void __thiscall ItemUseTask::OnUseItemRepairKit(ItemUseTask *this, Item *pkItem, unsigned int uiInvenInx);
void __thiscall ItemUseTask::OnUseItemAddSocket(ItemUseTask *this, Item *pkItem, unsigned int uiInvenIdx);
void __thiscall ItemUseTask::OnUseItemRandomOptRecoveryCount(ItemUseTask *this, Item *pkItem, unsigned int uiInvenIdx);
void __thiscall ItemUseTask::OnStart(ItemUseTask *this);
void __thiscall ItemUseTask::DirectMessage(ItemUseTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count);
boost::detail::function::unusable *__cdecl boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_char_const___int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>_void_char_const__>::invoke(boost::detail::function::unusable *result, boost::detail::function::any_pointer function_obj_ptr, int a0);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, const char *_Ptr, unsigned int _Count);
void __thiscall boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_char_const___int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>>(boost::function1<void,int,std::allocator<void> > *this, boost::_bi::bind_t<void,boost::_mfi::mf2<void,GameFrameWork,int,int>,boost::_bi::list3<boost::_bi::value<GameFrameWork *>,boost::arg<1>,boost::_bi::value<unsigned int> > > f);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > _First, std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > _Last, const char *_Ptr);
void __thiscall boost::function<void___cdecl__char_const____std::allocator<void>>::function<void___cdecl__char_const____std::allocator<void>>(boost::function<void __cdecl(int),std::allocator<void> > *this, boost::_bi::bind_t<void,boost::_mfi::mf2<void,GameFrameWork,int,int>,boost::_bi::list3<boost::_bi::value<GameFrameWork *>,boost::arg<1>,boost::_bi::value<unsigned int> > > f, int __formal);
const unsigned int __thiscall EntryInfo::GetTotalBettingMoney(EntryInfo *this);
void __thiscall MHDiceGameTask::OpenDiceWin(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::OpenHelpWin(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::OpenDiceRateWin(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::OnCloseWin(MHDiceGameTask *this, PgWin *pkWin);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_RESULT_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_RESULT_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RANK_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_REQ *pkProto);
bool __thiscall MHDiceGameTask::IsDicegamePlaying(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_LARGE_AMOUNT_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_LARGE_AMOUNT_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_ACK *pkProto);
bool __thiscall MHDiceGameTask::IsGambleMode(MHDiceGameTask *this);
void __cdecl MHDiceGameTask::Terminate();
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_REQ(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_TIMER_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_TIMER_CMD *pkProto);
void __thiscall MHDiceGameTask::DirectMessage(MHDiceGameTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_ACK *pkProto);
void __thiscall MHDiceGameTask::UpdateDiceTaisaiGame(MHDiceGameTask *this, float fTime);
void __thiscall MHDiceGameTask::OnStart(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *pkProto);
void __thiscall MHDiceGameTask::CheckBettingChip(MHDiceGameTask *this, DICE_TAISAI_BETTING idx, bool bUser);
unsigned int __thiscall MHDiceGameTask::GetTotalBettingMoney(MHDiceGameTask *this, DICE_TAISAI_BETTING index);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CANCEL_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_REQ(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::OnIdle(MHDiceGameTask *this, float fTime);
unsigned int __thiscall MHDiceGameTask::GetAbleMoney(MHDiceGameTask *this, DICE_TAISAI_BETTING index, unsigned int EnableMaximuMoney);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_BETTING_INFO_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_BETTING_INFO_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CANCEL_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_LEAVE_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BET_START_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BET_START_CMD *pkProto);
void __thiscall MHDiceGameTask::OnBetting(MHDiceGameTask *this, DICE_TAISAI_BETTING index);
void __thiscall MHDiceGameTask::OnBettingCancel(MHDiceGameTask *this, DICE_TAISAI_BETTING index);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_JOIN_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_LEAVE_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK *pkProto);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall MHDiceGameTask::GetMoneyToString(MHDiceGameTask *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, unsigned int Money);
bool __thiscall MHDiceGameTask::ShutDownGambleHouse(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_JOIN_ACK *pkProto);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall MHDiceGameTask::GetBettingInfo(MHDiceGameTask *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, DICE_TAISAI_BETTING index);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_LARGE_AMOUNT_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_CMD *pkProto);
void __thiscall MHDiceGameTask::_MHDiceGameTask(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::MHDiceGameTask(MHDiceGameTask *this);
void __cdecl MHDiceGameTask::Create(IDirectMessenger *pkMsgHooker);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RANK_ACK *pkProto);
bool __thiscall MHDiceGameTask::OnProcessNetMsg(MHDiceGameTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Pnode);
std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Pnode);
std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode);
std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *this);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *this);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *this);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode);
unsigned int __cdecl ITableBase<DICE_Dividind_DiceDividIndTab>::GetTotal();
unsigned int __cdecl ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::GetTotal();
DICE_Dividind *__cdecl DiceDividIndTab::GetByIndex(unsigned int uiIndex);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Wherenode);
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode);
DiceRankInfo *__cdecl std::_Move<DiceRankInfo___DiceRankInfo__>(DiceRankInfo *_First, DiceRankInfo *_Last, DiceRankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
int std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(...);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *_Node, bool _Leftish);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *result, const unsigned __int16 *_Keyval);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *result, const unsigned __int16 *_Keyval);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Newnode);
std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::pair<unsigned short,EntryInfo> *_Val);
std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Buynode<std::pair<unsigned_short_DiceTaiSaiBetting>>(std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *this, std::pair<unsigned short,DiceTaiSaiBetting> *_Val);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > _Where);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Rootnode);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Node, bool _Leftish);
void __thiscall std::map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>::_map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>(std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *this);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::clear(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this);
int std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(...);
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BOARD_FOLD_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BOARD_FOLD_CMD *pkProto);
void __thiscall std::map<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>>::_map<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>>(std::map<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> > > *this);
void __thiscall mhDiceRankWin::UpdateRankList(mhDiceRankWin *this, PROTO_NC_DICE_TAISAI_RANK_ACK *pkProto);
void *__thiscall MHDiceGameTask::_scalar_deleting_destructor_(MHDiceGameTask *this, unsigned int);
bool __thiscall StatPointReqTask::IsWaitingServerReply(StatPointReqTask *this);
void __thiscall StatPointReqTask::ReqDecPoint(StatPointReqTask *this, StatDistribute eSD);
int __cdecl StatPointReqTask::ClearState();
void __thiscall StatPointReqTask::ReqIncPoint(StatPointReqTask *this, StatDistribute eSD);
bool __thiscall StatPointReqTask::OnProcessNetMsg(StatPointReqTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall StatPointReqTask::OnStart(StatPointReqTask *this);
void __thiscall ItemMallInfo::Encoding(ItemMallInfo *this);
bool __thiscall ItemMallInfo::SaveToFile(ItemMallInfo *this, const char *FileName);
int __thiscall ItemMallInfo::GetEndIndex(ItemMallInfo *this, int LocaleNum);
void __thiscall ItemMallInfo::SetData(ItemMallInfo *this, int Index, int LocaleNum, int URLNum, const char *Path);
void __thiscall ItemMallInfo::AddData(ItemMallInfo *this, int LocaleNum, int URLNum, const char *Path);
tagItemMallFileData *__thiscall ItemMallInfo::GetData(ItemMallInfo *this, int LocaleNum, int URLNum);
int __thiscall ItemMallInfo::GetTotalLocaleNum(ItemMallInfo *this);
int __thiscall ItemMallInfo::GetTotalURLNum(ItemMallInfo *this, int LocaleNum);
int __thiscall ItemMallInfo::GetTotalChunkNum(ItemMallInfo *this);
void __thiscall ItemMallInfo::Clear(ItemMallInfo *this);
void __thiscall ItemMallInfo::ItemMallInfo(ItemMallInfo *this);
void __thiscall ItemMallInfo::_ItemMallInfo(ItemMallInfo *this);
bool __thiscall ItemMallInfo::LoadFromFile(ItemMallInfo *this, const char *FileName);
bool __cdecl SaveSurfaceToJPG(char *acFn, IDirect3DSurface9 *pkSurf);
IDirect3DSurface9 *__cdecl CloneSurfaceToR8G8B8(IDirect3DSurface9 *pkSrcSurf, tagRECT *pkRect, IDirect3DDevice9 *pkDevice);
bool __cdecl SaveSurfaceToFileInRect(char *acFn, IDirect3DSurface9 *pkSurf, tagRECT *pkRect, IDirect3DDevice9 *pkDevice);
bool __cdecl ScreenShot_InFileName(NiRenderer *pkRenderer, HWND__ *hWnd, char *pcFilename, int iFilenameLen, const char *pkCreateFileName);
bool __cdecl ScreenShot(NiRenderer *pkRenderer, HWND__ *hWnd, char *pcFilename, int iFilenameLen);
bool __cdecl ScreenShot_UserName(NiRenderer *pkRenderer, HWND__ *hWnd, char *pcFilename, int iFilenameLen);
void __thiscall JpgImage::JpgImage(JpgImage *this);
bool __thiscall JpgImage::Save(JpgImage *this, char *acFn, JpgImage::ImageInfo *rkInfo);
int __stdcall loc_6B5893(int acFn, int rkInfo); // weak
void __cdecl std::fill<std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>___std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>>(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *_First, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *_Last, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *_Val);
int ____Uninit_move_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__PAV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVie(...);
int ____Uninit_fill_n_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__IV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVi(...);
void __thiscall ProduceInfoTable::MaterialInfo::MaterialInfo(ProduceInfoTable::MaterialInfo *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > InxName);
ProduceInfoTable::MaterialInfo *__cdecl ProduceInfoTable::GetMaterialInfo(std::basic_string<char,std::char_traits<char>,std::allocator<char> > Material);
void __cdecl ProduceInfoTable::SetMaterialInfo(std::basic_string<char,std::char_traits<char>,std::allocator<char> > Material, int iMasteryType);
void __cdecl ProduceInfoTable::BuildMeterialMap();
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *> *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___ProduceInfoTable::MaterialInfo____>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *> *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, ProduceInfoTable::MaterialInfo **_Val2);
int ___insert_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_ProduceInfoTable___std______Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_ProduceInfoTable__V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_Produce(...);
char __thiscall CClientQuest::GetQuestPlayerLevel(CClientQuest *this);
unsigned __int16 __thiscall CClientQuest::GetQuestPlayerItemLot(CClientQuest *this, unsigned __int16 nItemID);
char __thiscall CClientQuest::GetQuestPlayerRace(CClientQuest *this);
char __thiscall CClientQuest::GetQuestPlayerClass(CClientQuest *this);
char __thiscall CClientQuest::GetQuestPlayerGender(CClientQuest *this);
void __thiscall CClientQuest::SetQuestResetTime(CClientQuest *this, PROTO_NC_QUEST_RESET_TIME_CMD *pkReSet_Time);
void __thiscall CClientQuest::Occure_LevelChange(CClientQuest *this, unsigned __int16 nQuestID, char nPlayerLevel, char nDoneLevel);
void __thiscall CClientQuest::Occure_DestroyItem(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nItemID, unsigned __int16 nCurrentLot, unsigned __int16 nDoneCount);
void __thiscall CClientQuest::Occure_CheckLocation(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nLocation);
void __thiscall CClientQuest::Occure_RaceChange(CClientQuest *this, unsigned __int16 nQuestID, char nRace);
void __thiscall CClientQuest::Occure_ClassChange(CClientQuest *this, unsigned __int16 nQuestID, char nClass);
void __thiscall CClientQuest::Occure_TimeProcess(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 RunningTimeSec, unsigned __int16 TimeLimitSec);
void __thiscall CClientQuest::Occure_NewStatusReward(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData);
void __thiscall CClientQuest::Occure_NewStatusFailed(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData);
void __thiscall CClientQuest::Occure_NewStatusIng(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData);
void __thiscall CClientQuest::_Send_NC_QUEST_CLIENT_SCENARIO_DONE_REQ(CClientQuest *this, unsigned __int16 kID);
void __thiscall CClientQuest::Occure_TakeItem(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nItemID, unsigned __int16 nCurrentLot, unsigned __int16 nDoneCount);
void __thiscall CClientQuest::Occure_ScenarioDone(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nScenarioID);
void __thiscall CClientQuest::QuestResultMessage(CClientQuest *this, QUEST_DATA::QUEST_REWARD *pReward);
void __thiscall CClientQuest::Occure_Quest_Done(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData);
CQuest *__cdecl QuestDataMgr::GetQuest();
void __thiscall CClientQuest::Occure_NPCMobKill(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nNPCMobID, int nCurrentCount, int nDoneCount);
int __thiscall CClientQuest::GetRewardIndex(CClientQuest *this, int nQuestID);
void __thiscall CClientQuest::CClientQuest(CClientQuest *this, CQuestData *pQuestData);
void __thiscall DialogParser::DialogParser(DialogParser *this);
void __thiscall QuestDialogParser::StartParsing(QuestDialogParser *this, CQuest *pkQuest, unsigned int wID);
char *__thiscall DialogParser::ParseBracedToken(DialogParser *this, char **rpcStr);
DialogParser::TokenType __thiscall DialogParser::Parse(DialogParser *this, DialogParser::TokenDetail *rkDetail);
void __thiscall DialogParser::StartParsing(DialogParser *this, char *pcText, unsigned int uiSeqID);
int __thiscall QuestHelperMgr::GetConditionCnt(QuestHelperMgr *this, QUEST_DATA *lpQuest);
bool __thiscall QuestHelperMgr::IsQuestByMob(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID);
bool __thiscall QuestHelperMgr::IsStartRewardQuest(QuestHelperMgr *this, QUEST_DATA *lpQuest);
QUEST_DATA *__thiscall QuestHelperMgr::GetPQData(QuestHelperMgr *this, unsigned __int16 Quest_ID);
void __thiscall QuestHelperMgr::Terminate(QuestHelperMgr *this);
bool __thiscall QuestHelperMgr::IsQuestProgress(QuestHelperMgr *this, unsigned __int16 Quest_ID);
bool __thiscall QuestHelperMgr::IsConditionProgress(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID);
void __thiscall QuestHelperMgr::AddMobCoordinate(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID);
void __thiscall QuestHelperMgr::RemoveMobCoordinate(QuestHelperMgr *this, unsigned __int16 Quest_ID);
void __thiscall QuestHelperMgr::RemoveMobGroup(QuestHelperMgr *this, unsigned __int16 Quest_ID);
const char *__thiscall QuestHelperMgr::GetConditionText(QuestHelperMgr *this);
void __thiscall QuestHelperMgr::MoveConditionToolTip(QuestHelperMgr *this, NiPoint3 kMobHeightPos);
void __thiscall QuestHelperMgr::_QuestHelperMgr(QuestHelperMgr *this);
void __thiscall QuestHelperMgr::RemoveProgressQuest(QuestHelperMgr *this, unsigned __int16 Quest_ID);
void __thiscall QuestHelperMgr::ClearConditionText(QuestHelperMgr *this);
void __thiscall QuestHelperMgr::QuestHelperMgr(QuestHelperMgr *this);
void __thiscall QuestHelperMgr::AddMobID(QuestHelperMgr *this, QUEST_DATA *lpQuest);
QuestHelperMgr *__cdecl QuestHelperMgr::GetInstance();
void __cdecl QuestHelperMgr::ReleaseInstance();
void __thiscall QuestHelperMgr::AddMobGroup(QuestHelperMgr *this, QUEST_DATA *lpQuest);
void __thiscall QuestHelperMgr::AddQuestNameText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText);
bool __thiscall QuestHelperMgr::IsMobGroup(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 *Mob_ID);
void __thiscall QuestHelperMgr::Init(QuestHelperMgr *this);
void __thiscall QuestHelperMgr::AddProgressQuest(QuestHelperMgr *this, unsigned __int16 Quest_ID);
void __thiscall QuestHelperMgr::AddMobConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText, unsigned __int16 Mob_ID, bool bCheckMob);
void __thiscall QuestHelperMgr::AddItemConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText, unsigned __int16 Item_ID, bool bCheckItem);
void __thiscall QuestHelperMgr::AddLevelConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText);
void __thiscall QuestHelperMgr::AddLocationConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText);
bool __thiscall QuestHelperMgr::CreateConditionToolTip(QuestHelperMgr *this, unsigned __int16 Mob_ID, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText);
const char *__thiscall QuestHelperMgr::AddConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID);
void __thiscall QuestHelperMgr::AddConditionToolTip(QuestHelperMgr *this, Char *pkChar);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll(NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>(NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>(NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *this);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *this, unsigned int);
void __thiscall NiTPointerList<QuestMC__>::_NiTPointerList<QuestMC__>(NiTPointerList<QuestMC *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QuestMC *> *this, unsigned int);
void __thiscall NiTPointerList<QUEST_DATA__>::_NiTPointerList<QUEST_DATA__>(NiTPointerList<QUEST_DATA *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *this, unsigned int);
void __thiscall NiTPointerList<unsigned_short>::_NiTPointerList<unsigned_short>(NiTPointerList<unsigned short> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,unsigned short> *this, unsigned int);
void __thiscall PgTList<QUEST_DATA__>::_PgTList<QUEST_DATA__>(PgTList<QUEST_DATA *> *this);
void __thiscall NiTPointerMap<char_const___unsigned_short>::DeleteItem(NiTPointerMap<char const *,unsigned short> *this, NiTMapItem<char const *,unsigned short> *pkItem);
void __thiscall PgTList<unsigned_short>::_PgTList<unsigned_short>(PgTList<unsigned short> *this);
void *__thiscall PgTList<QuestMC__>::_scalar_deleting_destructor_(PgTList<QuestMC *> *this, unsigned int);
void *__thiscall PgTList<QUEST_DATA__>::_scalar_deleting_destructor_(PgTList<QUEST_DATA *> *this, unsigned int);
void __thiscall NiTPointerList<QuestHelperMgr::ProgressQuestMobGroup__>::_NiTPointerList<QuestHelperMgr::ProgressQuestMobGroup__>(NiTPointerList<QuestHelperMgr::ProgressQuestMobGroup *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *this, unsigned int);
void *__thiscall PgTList<unsigned_short>::_vector_deleting_destructor_(PgTList<unsigned short> *this, unsigned int);
void *__thiscall PgTList<QuestHelperMgr::ProgressQuestMobGroup__>::_scalar_deleting_destructor_(PgTList<QuestHelperMgr::ProgressQuestMobGroup *> *this, unsigned int);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, const char *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
void __thiscall Scenario::_Scenario(Scenario *this);
void __thiscall TutorialMgr::On_NC_WT_LICENSE_ACK(TutorialMgr *this);
void __thiscall TutorialMgr::On_NC_ITEM_UPGRADE_ACK(TutorialMgr *this);
void __thiscall ScenarioMgr::StopScenario(ScenarioMgr *this, unsigned __int16 kID);
void __thiscall TutorialMgr::SendResult(TutorialMgr *this, unsigned __int16 kID, char kCmd);
void __thiscall TutorialMgr::On_NC_SKILL_SKILL_LEARNSUC_CMD(TutorialMgr *this);
void __thiscall TutorialMgr::OnShortCutSkill(TutorialMgr *this);
void __thiscall TutorialMgr::OpenItemUpgradeWin(TutorialMgr *this);
void __thiscall TutorialMgr::OnSPSoulStoneUse_Key(TutorialMgr *this);
void __thiscall TutorialMgr::OnHPSoulStoneUse_Key(TutorialMgr *this);
void __thiscall TutorialMgr::On_NC_ITEM_EQUIP_ACK(TutorialMgr *this);
void __thiscall TutorialMgr::OpenInventoryWin(TutorialMgr *this);
void __thiscall TutorialMgr::OnOpenWeaponTitleWin(TutorialMgr *this);
void __thiscall ScenarioMgr::RunScenario(ScenarioMgr *this, unsigned __int16 kID, unsigned __int16 nQuestID, char kCmd);
void __thiscall ScenarioMgr::Update(ScenarioMgr *this, float fTime);
bool __thiscall Scenario::Stop(Scenario *this, float fTime);
void __thiscall Scenario_15::Scenario_15(Scenario_15 *this, PgFrameWork *pkFrameWork, unsigned __int16 kID, unsigned __int16 nQuestID, char kCmd);
void *__thiscall Scenario_15::_vector_deleting_destructor_(Scenario_15 *this, unsigned int);
bool __thiscall Scenario_15::Update(Scenario_15 *this, float fTime);
void __thiscall CGuildMonster::CGuildMonster(CGuildMonster *this);
CGuildMonster *__cdecl CGuildMonster::GetInstance();
void __cdecl CGuildMonster::ReleaseInstance();
void __thiscall GuildListTask::OnStart(GuildListTask *this);
void __cdecl GuildListTask::OnNCGuildListReq(int iIndex);
bool __thiscall GuildListTask::OnProcessNetMsg(GuildListTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
int __thiscall GuildListTask::Recv_NC_GUILD_LIST_ACK(GuildListTask *this, PROTO_NC_GUILD_LIST_ACK *pkProto);
bool __cdecl GuildListTask::ShowGuildListWin();
GuildListWin *__cdecl GuildListTask::GetGuildListWin();
void __cdecl GuildListTask::Terminate();
void __thiscall GuildListTask::_GuildListTask(GuildListTask *this);
void __thiscall GuildListTask::GuildListTask(GuildListTask *this);
void __cdecl GuildListTask::Create(IDirectMessenger *pkMsgHooker);
void *__thiscall GuildListTask::_scalar_deleting_destructor_(GuildListTask *this, unsigned int);
unsigned int __thiscall CClientGuildMember::GetNumOfOnlineMembers(CClientGuildMember *this);
GUILD_MEMBER_CLIENT *__thiscall CClientGuildMember::GetGuildMaster(CClientGuildMember *this);
void __thiscall GuildMemberTask::OnFinish(GuildMemberTask *this);
CClientGuildMember *__cdecl GuildMemberTask::GetGuildMember();
int __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_LOGOFF_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_LOGOFF_CMD *pkProto);
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_MEMBER_LEAVE_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_LEAVE_CMD *pkProto);
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD *pkProto);
void __thiscall GuildMemberTask::DirectMessage(GuildMemberTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_JOIN_REQ(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_JOIN_REQ *pkProto);
void __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_JOIN_ERR(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_JOIN_ERR *pkProto);
int __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_VANISH_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_VANISH_CMD *pkProto);
void __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_INVITE_ACK(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_INVITE_ACK *pkProto);
int __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_LOGON_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_LOGON_CMD *pkProto);
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_INVITE_ACK(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_INVITE_ACK *pkProto);
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ *pkProto);
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_ERR(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_ERR *pkProto);
bool __thiscall GuildMemberTask::OnProcessNetMsg(GuildMemberTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildMemberTask::GuildMemberTask(GuildMemberTask *this);
void __thiscall CClientGuildMember::_CClientGuildMember(CClientGuildMember *this);
void *__thiscall GuildMemberTask::_scalar_deleting_destructor_(GuildMemberTask *this, unsigned int);
void __thiscall GuildTournamentEnemyInfo::_GuildTournamentEnemyInfo(GuildTournamentEnemyInfo *this);
bool __thiscall CClientGuild::AmIGuildMember(CClientGuild *this);
bool __thiscall CClientGuild::AmIGuildMaster(CClientGuild *this);
bool __thiscall CClientGuild::CanIVanishMember(CClientGuild *this);
bool __thiscall CClientGuild::CanIAppoint(CClientGuild *this);
bool __thiscall CClientGuild::CanIInvite(CClientGuild *this);
bool __thiscall CClientGuild::CanIWriteNotice(CClientGuild *this);
bool __thiscall CClientGuild::CanIDismissGuild(CClientGuild *this);
bool __thiscall CClientGuild::CanIApplyGuildWar(CClientGuild *this);
bool __thiscall CClientGuild::CanIUseStorage(CClientGuild *this);
bool __thiscall CClientGuild::CanIForbidChat(CClientGuild *this);
bool __thiscall CClientGuild::IsEnemyGuild(CClientGuild *this, unsigned int regnum);
bool __thiscall CClientGuild::IsAttackableEnemyGuild(CClientGuild *this, unsigned int regnum);
void __thiscall CClientGuild::ReqNextPage(CClientGuild *this);
void __thiscall CClientGuild::ReqPrevPage(CClientGuild *this);
bool __thiscall CClientGuild::IsWarEngaging(CClientGuild *this);
bool __thiscall CClientGuild::IsGttEnemyGuild(CClientGuild *this, unsigned int regnum);
bool __thiscall CClientGuild::IsGttAttackableEnemyGuild(CClientGuild *this, unsigned int regnum);
bool __thiscall CClientGuild::IsGttEngaging(CClientGuild *this);
void __thiscall CClientGuild::ReqHistoryList(CClientGuild *this);
int __thiscall GuildTask::Recv_NC_GUILD_WAR_START_CMD(GuildTask *this, PROTO_NC_GUILD_WAR_START_CMD *pCmd);
int __thiscall GuildTask::Recv_NC_GUILD_WAR_COOLDOWN_DONE_CMD(GuildTask *this, PROTO_NC_GUILD_WAR_COOLDOWN_DONE_CMD *pCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_TYPE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_TYPE_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_GRADE_CMD(GuildTask *this, PROTO_NC_GUILD_GRADE_CMD *pCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_SKILLPOINT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_SKILLPOINT_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_SCORE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_SCORE_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_END_TIME(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_BEFORE_END_TIME_MSG_CMD *pkTime);
void __thiscall GuildTournamentImprove::Init(GuildTournamentImprove *this);
char *__thiscall CClientGuild::FindGttEnemyInfo(CClientGuild *this, unsigned int RegNo);
void __cdecl GuildTask::SetListRefreshEnable(bool bEnable);
float __cdecl GuildTask::GetPassedTimeSinceRefresh();
void __cdecl GuildTask::Terminate();
CClientGuild *__cdecl GuildTask::GetGuild();
GuildNpcMenuWin *__cdecl GuildTask::GetGuildNpcMenuWin();
GuildMasterMenuWin *__cdecl GuildTask::GetGuildMasterMenuWin();
GuildTournamentBaseWin *__cdecl GuildTask::GetGuildTournamnetBaseWin();
GuildTournamentScheduleWin *__cdecl GuildTask::GetGuildTournamentScheduleWin();
GuildMenuWin *__cdecl GuildTask::GetGuildMenu();
GuildSelectWin *__cdecl GuildTask::GetGuildSelectWin();
GuildTournamentStorageWin *__cdecl GuildTask::GetGuildTournamentStorageWin();
void __cdecl GuildTask::SetListReq(bool b);
GTTDiceWin *__cdecl GuildTask::GetGTTDiceWin();
GTTSkillWin *__cdecl GuildTask::GetGTTSkillWin();
GTTMiniSkillWin *__cdecl GuildTask::GetGTTMiniSkillWin();
GuildTournamentImprove *__cdecl GuildTask::GetGuildTournamentImprove();
GTIFlagWin *__cdecl GuildTask::GetGTIMyFlagWin();
GTIFlagWin *__cdecl GuildTask::GetGTIEnemyFlagWin();
void __thiscall GuildTask::OnStart(GuildTask *this);
void __thiscall GuildTask::OnIdle(GuildTask *this, float fTime);
void __thiscall GuildTask::DirectMessage(GuildTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
int __cdecl GuildTask::InvalidateGuildWindow();
int __thiscall GuildTask::Recv_NC_GUILD_WAR_END_CMD(GuildTask *this, PROTO_NC_GUILD_WAR_END_CMD *pCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_LIST_ACK(GuildTask *this, int iRevBytes, void *pvData);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENTSTOP_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENTSTOP_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_RENAME_ACK(GuildTask *this, PROTO_NC_GUILD_RENAME_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_RETYPE_CMD(GuildTask *this, PROTO_NC_GUILD_RETYPE_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_USESKILL_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_USESKILL_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_THROW_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_THROW_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_THROW_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_THROW_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_OBSERVER_ENTER_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_OBSERVER_ENTER_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_MY_GUILD_TOKEN_INFO_ACK(GuildTask *this, PROTO_NC_GUILD_MY_GUILD_TOKEN_INFO_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_OBSERVER_OUT_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_OBSERVER_OUT_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_STARTMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_STARTMSG_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_WORLD_SET_GUILD_TOKEN_CMD(GuildTask *this, PROTO_NC_GUILD_WORLD_SET_GUILD_TOKEN_CMD *pkCmd);
GTStatusWin *__cdecl GuildTask::GetGTStatusWin();
GTStatusMiniWin *__cdecl GuildTask::GetGTStatusMiniWin();
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_JOIN_LIST_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_JOIN_LIST_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_SCAN_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_SCAN_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_INFO_CMD(GuildTask *this, PROTO_NC_GUILD_EMBLEM_INFO_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_DISMISS_CMD(GuildTask *this, PROTO_NC_GUILD_DISMISS_CMD *pkProto);
int __thiscall GuildTask::Recv_NC_GUILD_WAR_ACK(GuildTask *this, PROTO_NC_GUILD_WAR_ACK *pkProto);
int __thiscall GuildTask::Recv_NC_GUILD_WAR_ABLE_LIST_ACK(GuildTask *this, PROTO_NC_GUILD_WAR_ABLE_LIST_ACK *pAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_JOIN_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_JOIN_ACK *pkProto);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENTSTART_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENTSTART_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_STORAGEWITHDRAW_CMD(GuildTask *this, PROTO_NC_GUILD_STORAGEWITHDRAW_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_ITEM_GUILD_STORAGE_WITHDRAW_ACK(GuildTask *this, PROTO_NC_ITEM_GUILD_STORAGE_WITHDRAW_ACK *pkProto);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_RECALL_ENTER_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_RECALL_ENTER_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_RECALL_ENTER_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_RECALL_ENTER_ACK *pkProto);
int __thiscall GuildTask::Recv_NC_GUILD_RETYPE_ACK(GuildTask *this, PROTO_NC_GUILD_RETYPE_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_MY_GUILD_TOURNAMENT_MATCH_TIME_ACK(GuildTask *this, PROTO_NC_GUILD_MY_GUILD_TOURNAMENT_MATCH_TIME_ACK *pkAck);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_PLAYERDIEMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_PLAYERDIEMSG_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_MANAGERUSERMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_MANAGERUSERMSG_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_PLAYERKILLMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_PLAYERKILLMSG_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_PICK_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_PICK_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_EFFECT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_EFFECT_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_REFUND_NOTICE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_REFUND_NOTICE_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_CHECK_AVAILABILITY_ACK(GuildTask *this, PROTO_NC_GUILD_EMBLEM_CHECK_AVAILABILITY_ACK *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_SAVE_ACK(GuildTask *this, PROTO_NC_GUILD_EMBLEM_SAVE_ACK *pkCmd);
void __thiscall CClientGuild::ClearHistoryList(CClientGuild *this);
void __thiscall GuildTask::_GuildTask(GuildTask *this);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_RESULT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_RESULT_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_START_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_START_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_RESULT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_RESULT_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_USESKILL_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_USESKILL_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENTSTOPMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENTSTOPMSG_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_NOTIFY_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_NOTIFY_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_FLAG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_FLAG_CMD *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_HISTORY_LIST_ACK(GuildTask *this, PROTO_NC_GUILD_HISTORY_LIST_ACK *pkCmd);
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_OFF_MSG_CMD(GuildTask *this, PROTO_NC_GUILD_EMBLEM_OFF_MSG_CMD *pkCmd);
bool __thiscall GuildNameCache::OnProcessNetMsg(GuildNameCache *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildNameCache::_GuildNameCache(GuildNameCache *this);
int __thiscall GuildTask::Recv_NC_GUILD_MOBGUILD_CMD(GuildTask *this, PROTO_NC_GUILD_MOBGUILD_CMD *pkCmd);
char *__thiscall GuildNameCache::GetGuildName(GuildNameCache *this, unsigned int dwRegNum);
void __thiscall GuildNameCache::SetGuildName(GuildNameCache *this, unsigned int dwRegNum, Name4 *rkName);
GUILD_EMBLEM_INFO *__thiscall GuildNameCache::GetGuildEmblem(GuildNameCache *this, unsigned int dwRegNum);
void __thiscall GuildNameCache::SetGuildEmblem(GuildNameCache *this, unsigned int dwRegNum, GUILD_EMBLEM_INFO *EmblemInfo);
int __thiscall GuildTask::Recv_NC_GUILD_RENAME_CMD(GuildTask *this, PROTO_NC_GUILD_RENAME_CMD *pkCmd);
void __thiscall GuildTask::GuildTask(GuildTask *this);
void __cdecl GuildTask::Create(IDirectMessenger *pkMsgHooker);
int __thiscall GuildTask::Recv_NC_GUILD_MAKE_ACK(GuildTask *this, PROTO_NC_GUILD_MAKE_ACK *pkProto);
int __thiscall GuildTask::Recv_NC_GUILD_MY_GUILD_INFO_ACK(GuildTask *this, PROTO_NC_GUILD_MY_GUILD_INFO_ACK *pkProto);
char *__cdecl GuildTask::GetGuildName(unsigned int dwRegNum);
GUILD_EMBLEM_INFO *__cdecl GuildTask::GetEmblemInfo(unsigned int dwRegNum);
void __cdecl GuildTask::SetGuildEmblem(unsigned int dwRegNum, GUILD_EMBLEM_INFO *pEmblemInfo);
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_INFO_NOTICE_CMD(GuildTask *this, PROTO_NC_GUILD_EMBLEM_INFO_NOTICE_CMD *pkCmd);
bool __thiscall GuildTask::OnProcessNetMsg(GuildTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>(NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *this, unsigned int);
void __thiscall NiTPointerList<GUILD_HISTORY__>::_NiTPointerList<GUILD_HISTORY__>(NiTPointerList<GUILD_HISTORY *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *this, unsigned int);
GUILD_CLIENT *__thiscall GUILD_CLIENT::operator_(GUILD_CLIENT *this, GUILD_CLIENT *__that);
unsigned int __cdecl ITableBase<GTIView_GTIViewInfoTab>::GetTotal();
void *__thiscall PgTList<GUILD_HISTORY__>::_vector_deleting_destructor_(PgTList<GUILD_HISTORY *> *this, unsigned int);
GTIView *__cdecl GTIViewInfoTab::GetByIndex(unsigned int uiIndex);
void __thiscall CClientGuild::_CClientGuild(CClientGuild *this);
void *__thiscall GuildTask::_vector_deleting_destructor_(GuildTask *this, unsigned int);
int std::_Tree<std::_Tmap_traits<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>_0>>::_Insert(...);
unsigned int *__thiscall std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *this, const unsigned int *_Keyval);
void __thiscall GuildNameCache::GuildNameCache(GuildNameCache *this);
void *__thiscall GuildNameCache::_vector_deleting_destructor_(GuildNameCache *this, unsigned int);
mhReturnType __thiscall mhCollisionManager::DelColliData(mhCollisionManager *this, NiPointer<NiNode> DelNode, mhCollisionType ColliType);
mhReturnType __thiscall mhCollisionManager::Create(mhCollisionManager *this, NiNode *RootCollider);
mhColliStyle __thiscall mhCollisionManager::Update(mhCollisionManager *this, float fTime, mhGameMainConnectMgr *GameMainConnectMgr);
mhReturnType __thiscall mhCollisionManager::DelObject(mhCollisionManager *this, mhObject *mhObj, mhCollisionType ColliType);
mhColliStyle __cdecl mhCollisionManager::SetCollisionStyleInCallBack(mhColliStyle NewStyle, NiCollisionGroup::Intersect *InterSectInfo, mhConditionBOOL Mainchar, mhConditionBOOL Otherchar);
int __cdecl mhCollisionManager::Callback(NiCollisionGroup::Intersect *kIntersect);
mhReturnType __thiscall mhCollisionManager::AddObject(mhCollisionManager *this, mhObject *mhObj, mhCollisionType ColliType);
mhReturnType __thiscall mhCollisionManager::AddColliData(mhCollisionManager *this, NiPointer<NiNode> AddNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ColliNodeName, mhCollisionType ColliType);
mhReturnType __thiscall mhCollisionManager::MoveColliGroup(mhCollisionManager *this, mhObject *mhObj, mhCollisionType Dest);
int __cdecl MiniHouseIndoor::SetZeroID();
void __thiscall MiniHouseIndoor::RevChangeEndure(MiniHouseIndoor *this, MHE_STEP e, int iGUID);
mhReturnType __thiscall MiniHouseIndoor::DelUI(MiniHouseIndoor *this, mhUIID DelID);
bool __thiscall MiniHouseIndoor::IsNormalState(MiniHouseIndoor *this);
NiAVObject *__thiscall MiniHouseIndoor::MoveSceneType(MiniHouseIndoor *this, mhObject *Obj, mhObjSceneType To, mhObjSceneType From, bool bCallGameFrameNet);
// tm *__usercall localtime_1<eax>(const int *_Time<eax>);
// int __usercall mktime_3<eax>(tm *_Tm<eax>);
mhReturnType __thiscall MiniHouseIndoor::SetPickedObj(MiniHouseIndoor *this, mhObject *Picked);
NiAVObject *__thiscall MiniHouseIndoor::GetLightNode(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::MakeDefault(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::DelObject(MiniHouseIndoor *this, int iGUID, int iResGUID);
int __thiscall MiniHouseIndoor::GetEndureStep(MiniHouseIndoor *this, Item *pItem, int Nowtime);
mhReturnType __thiscall MiniHouseIndoor::ObjDoAction(MiniHouseIndoor *this, char action, unsigned __int16 Actor, unsigned __int16 ActObj);
mhReturnType __thiscall MiniHouseIndoor::ObjDoAction(MiniHouseIndoor *this, unsigned __int16 nFurnitureHnd, unsigned __int16 ActorHnd, unsigned __int16 Anihandle, unsigned __int16 NextAnihandle, char ActorIdx, char ActeeIdx);
void __thiscall MiniHouseIndoor::ArrangeModeReq(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::Clear(MiniHouseIndoor *this);
int __thiscall MiniHouseIndoor::GetPickedObjID(MiniHouseIndoor *this);
void __thiscall MiniHouseIndoor::DelScene(MiniHouseIndoor *this, NiAVObject *spNode, mhObjSceneType Dest);
mhObject *__thiscall MiniHouseIndoor::GetObjectA(MiniHouseIndoor *this, NiAVObject *pkNode);
void __thiscall MiniHouseIndoor::MainCharRunAwayFromObj(MiniHouseIndoor *this, NiPoint3 *CharPos, NiPoint3 *ColiPoint);
mhReturnType __thiscall MiniHouseIndoor::DelPickedObj(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::SetupRoom(MiniHouseIndoor *this, NiPointer<NiNode> spMapNode, NiPointer<NiNode> spAttachDest, MiniHouseRoomInfo::TexStyleGroup NewTexStyleGroup);
bool __thiscall MiniHouseIndoor::IsPopUpMHItemInvState(MiniHouseIndoor *this);
bool __thiscall MiniHouseIndoor::SetCharEmotion(MiniHouseIndoor *this, unsigned __int16 TargetObjID, char ActPos, MHEmotion *pkEmotionInfo);
void __thiscall MiniHouseIndoor::AddObjSeatInfo(MiniHouseIndoor *this, char ActPos, unsigned __int16 CharhWnd, unsigned __int16 mhObj);
void __thiscall MiniHouseIndoor::DelObjSeatInfo(MiniHouseIndoor *this, unsigned __int16 CharhWnd);
void __thiscall MiniHouseIndoor::CatchAllGeometry(MiniHouseIndoor *this, NiAVObject *pkObject, PgTList<NiGeometry *> *kList);
mhReturnType __thiscall MiniHouseIndoor::RemoveObjScene(MiniHouseIndoor *this, mhObject *RemoveObj);
mhReturnType __thiscall MiniHouseIndoor::PickedObjMove(MiniHouseIndoor *this, tagPOINT MousePos, mhObjTranslate TranslateMode);
mhReturnType __thiscall MiniHouseIndoor::PickedObjRotate(MiniHouseIndoor *this, tagPOINT MousePos, mhObjTranslate TranslateMode);
mhReturnType __thiscall MiniHouseIndoor::AttachObjToScene(MiniHouseIndoor *this, int iObjGUID, bool bAddCollision);
void __thiscall MiniHouseIndoor::CloseAllUis(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::CloseUIwin(MiniHouseIndoor *this, mhUIID CloseUIID);
mhReturnType __thiscall MiniHouseIndoor::DelCharColiNode(MiniHouseIndoor *this, NiNode *CharRootNode);
int __thiscall MiniHouseIndoor::CheckColiInfoWIthPickedObj(MiniHouseIndoor *this);
int __thiscall MiniHouseIndoor::GetEndurePercentage(MiniHouseIndoor *this, Item *pItem, int Nowtime);
void __thiscall MiniHouseIndoor::ForceChangeEndure(MiniHouseIndoor *this);
void __thiscall MiniHouseIndoor::DetachFocusEff(MiniHouseIndoor *this, NiNode *pkTarget);
void __thiscall MiniHouseIndoor::SendObjEffReq(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::SetMouseDownStartPos(MiniHouseIndoor *this, tagPOINT MousePos, NiPoint3 kGroundPos, mhObjTranslate TranslateMode);
void __thiscall MiniHouseIndoor::ClearScene(MiniHouseIndoor *this);
void __thiscall MiniHouseIndoor::StartMHCharEmotion(MiniHouseIndoor *this, NiPoint3 *kGroundPos, unsigned int uiPos, int ActionIndex);
char __thiscall MiniHouseIndoor::GetEmptyOfObjSeat(MiniHouseIndoor *this, unsigned __int16 mhObj, unsigned __int16 CharhWnd, char WantedActPos);
void __thiscall MiniHouseIndoor::AttachFocusEff(MiniHouseIndoor *this, NiNode *pkTarget);
mhReturnType __thiscall MiniHouseIndoor::ClearUI(MiniHouseIndoor *this);
bool __thiscall MiniHouseIndoor::DetachAlphaProp(MiniHouseIndoor *this, NiNode *pDest);
NiAVObject *__thiscall MiniHouseIndoor::AddScene(MiniHouseIndoor *this, NiAVObject *spNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ClonedRootName, mhObjSceneType Dest, bool bClone);
mhReturnType __thiscall MiniHouseIndoor::DelCharLev(MiniHouseIndoor *this, unsigned __int16 CharhWnd);
bool __thiscall MiniHouseIndoor::AttachAlphaProp(MiniHouseIndoor *this, NiNode *pDest);
void __thiscall MiniHouseIndoor::SetForceAlphaState(MiniHouseIndoor *this, mhObject *pObj, bool bAlphaMode);
void __thiscall MiniHouseIndoor::SetPopUpMHItemInvState(MiniHouseIndoor *this, bool b);
void __thiscall MiniHouseIndoor::SetRepairObjID(MiniHouseIndoor *this, unsigned __int16 ID);
mhReturnType __thiscall MiniHouseIndoor::MakeCharColiNode(MiniHouseIndoor *this, NiNode *CharRootNode, mhCollisionType ColiStyle, float Radius);
mhReturnType __thiscall MiniHouseIndoor::DelJoinCharInfo(MiniHouseIndoor *this, unsigned __int16 CharhWnd);
mhReturnType __thiscall MiniHouseIndoor::AddUI(MiniHouseIndoor *this, mhUIID AddID, PgWinFrame *AddWinFrame);
mhReturnType __thiscall MiniHouseIndoor::AddCharLev(MiniHouseIndoor *this, unsigned __int16 CharhWnd, char Level);
void __thiscall MiniHouseIndoor::ActMHEmotion(MiniHouseIndoor *this, FURNITURE_EMOTION_INFO *ActionInfo);
bool __thiscall MiniHouseIndoor::ObjEffErrMsg(MiniHouseIndoor *this, unsigned __int16 nEffectHandle, unsigned __int16 err);
char __thiscall MiniHouseIndoor::GetCharLev(MiniHouseIndoor *this, unsigned __int16 CharhWnd);
mhReturnType __thiscall MiniHouseIndoor::AddJoinCharInfo(MiniHouseIndoor *this, unsigned __int16 CharhWnd, char Level);
char __thiscall MiniHouseIndoor::FindNearestActPos(MiniHouseIndoor *this, mhObject *mhObj, NiPoint3 *kGroundPos);
bool __thiscall MiniHouseIndoor::CheckObjEffItem(MiniHouseIndoor *this, MiniHouseFurnitureObjEffect *Obj);
bool __thiscall MiniHouseIndoor::CheckObjEffMoney(MiniHouseIndoor *this, MiniHouseFurnitureObjEffect *Obj);
void __thiscall MiniHouseIndoor::SetObjEffMsg(MiniHouseIndoor *this, char *msg, int iResGUID, unsigned __int16 ObjID);
void __thiscall MiniHouseIndoor::PickedCopyObjColiNode(MiniHouseIndoor *this);
void __thiscall MiniHouseIndoor::DelCopyObjColiNode(MiniHouseIndoor *this, NiNode *DelRoot, mhCollisionType ColiStyle);
void __thiscall MiniHouseIndoor::ObjColiAct(MiniHouseIndoor *this, mhObject *pkObj);
mhReturnType __thiscall MiniHouseIndoor::ClearLight(MiniHouseIndoor *this);
void __thiscall MiniHouseIndoor::SetFocusObj(MiniHouseIndoor *this, mhObject *pkObj, bool bObjAct);
mhReturnType __thiscall MiniHouseIndoor::CancelPickObj(MiniHouseIndoor *this);
void __thiscall MiniHouseIndoor::MakePickedObjColiNode(MiniHouseIndoor *this, mhState NewState);
mhReturnType __thiscall MiniHouseIndoor::Terminate(MiniHouseIndoor *this);
bool __thiscall MiniHouseIndoor::ChangeEndure(MiniHouseIndoor *this, MHE_STEP e, int iGUID);
void __thiscall MiniHouseIndoor::SetNonePickedObj(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::ReleasePickObj(MiniHouseIndoor *this, bool bNoCollisionTest, bool bCallGameFrameNet);
mhReturnType __thiscall MiniHouseIndoor::AddObject(MiniHouseIndoor *this, int iGUID, int iResGUID, NiPoint3 *Pos, float fAngle, char Endure, bool bAddCollision);
mhReturnType __thiscall MiniHouseIndoor::SetObjPos(MiniHouseIndoor *this, int iGUID, NiPoint3 *Pos, float angle);
mhReturnType __thiscall MiniHouseIndoor::DelObject(MiniHouseIndoor *this, int iObjGUID, bool bCallGameFrameNet);
mhReturnType __thiscall MiniHouseIndoor::AddLight(MiniHouseIndoor *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > LightName);
NiPointer<NiAmbientLight> *__thiscall MiniHouseIndoor::GetLight(MiniHouseIndoor *this, NiPointer<NiAmbientLight> *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > LightName);
mhReturnType __thiscall MiniHouseIndoor::ChangeLight(MiniHouseIndoor *this, NiPointer<NiNode> spScene, std::basic_string<char,std::char_traits<char>,std::allocator<char> > LightName);
void __thiscall MiniHouseIndoor::_MiniHouseIndoor(MiniHouseIndoor *this);
mhReturnType __thiscall MiniHouseIndoor::SetForceArrStateHold(MiniHouseIndoor *this, bool b);
void __thiscall MiniHouseIndoor::SetupScene(MiniHouseIndoor *this, NiPointer<NiNode> spRoot);
mhReturnType __thiscall MiniHouseIndoor::SetState(MiniHouseIndoor *this, mhState NewState);
mhReturnType __thiscall MiniHouseIndoor::SetPickedObj(MiniHouseIndoor *this, NiAVObject *Picked, mhState NewState, bool bReadytoCreateObj);
mhReturnType __thiscall MiniHouseIndoor::Update(MiniHouseIndoor *this, float fTime);
void __thiscall MiniHouseIndoor::UpdateObjCharColiProcess(MiniHouseIndoor *this, NiPoint3 *CharPos);
mhReturnType __thiscall MiniHouseIndoor::Create(MiniHouseIndoor *this, NiPointer<NiNode> spRootScene);
mhReturnType __thiscall MiniHouseIndoor::Join(MiniHouseIndoor *this, bool bIsMaster);
mhReturnType __thiscall MiniHouseIndoor::Out(MiniHouseIndoor *this);
bool __thiscall mhFocusObj::SetObj(mhFocusObj *this, mhObject *pkObj);
void __thiscall Party::Party(Party *this, Party *__that);
unsigned int __cdecl ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::GetTotal();
void __thiscall ResElement::ReleaseResElement(ResElement *this);
void __thiscall MiniHouseIndoor::ClearObjEffMsg(MiniHouseIndoor *this);
Party *__thiscall mhGameMainConnectMgr::GetMyParty(mhGameMainConnectMgr *this, Party *result);
MiniHouseFurnitureObjEffect *__cdecl MHFurnitureObjEffectTab::GetbyHandle(unsigned __int16 wHandle);
MiniHouseFurnitureObjEffect *__cdecl MHFurnitureObjEffectTab::GetInxName(char *acName);
MiniHouseEndure *__cdecl MiniHouseEndureInfoTable::GetByHandle(unsigned __int16 wHandle);
MHEmotion *__cdecl MiniHouseEmotionTab::GetEmotion(unsigned __int16 MHEmotionID, int ActionIndex);
void __thiscall ResElement::ResElement(ResElement *this);
void __thiscall ResElement::_ResElement(ResElement *this);
void *__thiscall ResElement::_vector_deleting_destructor_(ResElement *this, unsigned int);
void __thiscall mhResTableElement::mhResTableElement(mhResTableElement *this);
void *__thiscall mhResTableElement::_vector_deleting_destructor_(mhResTableElement *this, unsigned int);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *result, const unsigned __int16 *_Keyval);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *_Node, bool _Leftish);
int std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Insert(...);
std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_char>>(std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *this, std::pair<unsigned short const ,unsigned char> *_Val);
char *__thiscall std::map<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>>::operator__(std::map<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> > > *this, const unsigned __int16 *_Keyval);
void __thiscall mhGameMainConnectMgr::mhGameMainConnectMgr(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this);
tagPOINT __thiscall mhGameMainConnectMgr::GetMousePos(mhGameMainConnectMgr *this);
void __thiscall mhGameMainConnectMgr::SendObjEffReq(mhGameMainConnectMgr *this, unsigned __int16 nFurniturehWnd, unsigned __int16 nEffHandle);
void __thiscall mhGameMainConnectMgr::SendCreateObjReq(mhGameMainConnectMgr *this, int iGUID, float fAngle, NiPoint3 *TargetPos);
void __thiscall mhGameMainConnectMgr::SendDecorateModeReq(mhGameMainConnectMgr *this, mhState NowState);
MainChar *__thiscall mhGameMainConnectMgr::GetMainChar(mhGameMainConnectMgr *this);
void __thiscall mhGameMainConnectMgr::SendRearRangeReq(mhGameMainConnectMgr *this, int GUID, float fAngle, NiPoint3 *TargetPos);
void __thiscall mhGameMainConnectMgr::SendMainCharPosReq(mhGameMainConnectMgr *this);
void __thiscall mhGameMainConnectMgr::SendDelObjReq(mhGameMainConnectMgr *this, int iGUID);
bool __thiscall mhGameMainConnectMgr::SendCompulsionMovetoChar(mhGameMainConnectMgr *this, unsigned __int16 CharhWnd, NiPoint3 *kMovePos);
void __thiscall mhGameMainConnectMgr::SendObjActReq(mhGameMainConnectMgr *this, unsigned __int16 handle, unsigned __int16 nFurniturehWnd);
void __thiscall stMINIHOUSEINFO::Clear(stMINIHOUSEINFO *this);
void __thiscall CMiniHouseMgr::Update(CMiniHouseMgr *this, float fCurTime);
void __thiscall CMiniHouseMgr::RemoveAll(CMiniHouseMgr *this, bool detachScene);
unsigned __int16 __thiscall CMiniHouseMgr::GetMiniHouseHandleByNodePtr(CMiniHouseMgr *this, NiNode *pkNode);
void __thiscall CMiniHouseMgr::Terminate(CMiniHouseMgr *this);
bool __thiscall CMiniHouseMgr::Remove(CMiniHouseMgr *this, unsigned __int16 kHandle);
void __thiscall CMiniHouseMgr::_CMiniHouseMgr(CMiniHouseMgr *this);
bool __thiscall CMiniHouseMgr::AddInfo(CMiniHouseMgr *this, PROTO_NC_BRIEFINFO_MINIHOUSEBUILD_CMD *p);
void __thiscall CMiniHouseMgr::CMiniHouseMgr(CMiniHouseMgr *this);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Newnode);
mhReturnType __thiscall mhManagerMediator::Create(mhManagerMediator *this, NiNode *RootCollider);
bool __thiscall mhObjectManager::IsRootNiNodeName(mhObjectManager *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *TestName);
mhReturnType __thiscall mhObject::SetTexture(mhObject *this, int iTexID);
const int __thiscall mhObject::SetParentGUID(mhObject *this, int iNewParentGUID);
mhReturnType __thiscall mhObject::SetAct(mhObject *this, unsigned __int16 handle, unsigned __int16 nexthandle);
mhReturnType __thiscall mhObject::SetPos(mhObject *this, NiPoint3 *NewPos);
int __thiscall mhObject::Update(mhObject *this, float ftime);
mhReturnType __thiscall mhObject::SetRotAngle(mhObject *this, float fAngle);
void __thiscall mhObject::ColiAct(mhObject *this);
bool __thiscall mhObject::GetCloseAniState(mhObject *this);
bool __thiscall mhObjectManager::AskDelayedDelObj(mhObjectManager *this, mhObject *pObj);
mhObject *__thiscall mhObjectManager::FindDelayedDelObj(mhObjectManager *this);
int __thiscall mhObjectManager::Update(mhObjectManager *this, float ftime);
int __thiscall mhObjectManager::FindObjectID(mhObjectManager *this, NiNode *pRootNiNode);
mhReturnType __thiscall mhObjectManager::Clear(mhObjectManager *this);
void __thiscall mhObject::DelObjSeatInfo(mhObject *this, unsigned __int16 CharhWnd);
void __thiscall mhObject::AllClearObjSeatInfo(mhObject *this);
char __thiscall mhObject::GetmhEmotionCharPos(mhObject *this, unsigned __int16 CharhWnd);
ResElement *__thiscall mhObject::GetResElement(mhObject *this, MHE_STEP Endure);
bool __thiscall mhObject::SetEndureStep(mhObject *this, MHE_STEP e);
mhReturnType __thiscall mhObjectManager::RemoveObject(mhObjectManager *this, int iObjGUID);
mhReturnType __thiscall mhObjectManager::DelObject(mhObjectManager *this, int iObjGUID);
mhObject *__thiscall mhObjectManager::GetObjectA(mhObjectManager *this, int iObjGUID);
mhReturnType __thiscall mhObjectManager::SetRotate(mhObjectManager *this, int iObjGUID, float fAngle);
mhObject *__thiscall mhObjectManager::GetmhEmotionObj(mhObjectManager *this, unsigned __int16 CharhWnd);
bool __thiscall mhObject::IsEmptyOfObjSeat(mhObject *this, char ActPos);
unsigned __int16 __thiscall mhObject::WhoUseIt(mhObject *this, char ActPos);
mhReturnType __thiscall mhObjectManager::SetPosition(mhObjectManager *this, int iObjGUID, NiPoint3 *SetPos);
mhReturnType __thiscall mhObjectManager::SetNodeCullMode(mhObjectManager *this, int iObjGUID, bool bCullMode);
mhReturnType __thiscall mhObjectManager::AddPosition(mhObjectManager *this, int iObjGUID, NiPoint3 *AddPos);
mhReturnType __thiscall mhObjectManager::AttachScene(mhObjectManager *this, const int iObjGUID, NiNode *pDestNiNode);
bool __thiscall mhObject::AddResElement(mhObject *this, MHE_STEP Endure, ResElement *pkResEle);
NiNode *__thiscall mhObjectManager::FindRootNode(mhObjectManager *this, NiNode *pNiNode);
mhReturnType __thiscall mhObject::Create(mhObject *this, int iGUID, mhResTableElement *pkResElement, int iTexID, mhObject::mhObjBindType btBindType, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName, int iParentGUID);
void __thiscall mhObject::AddObjSeatInfo(mhObject *this, char ActPos, unsigned __int16 CharhWnd);
NiNode *__thiscall mhObjectManager::GetObjectNiNode(mhObjectManager *this, int iObjGUID);
mhObject *__thiscall mhObjectManager::GetObjectA(mhObjectManager *this, NiNode *pNiNode);
void __thiscall mhObjectManager::_mhObjectManager(mhObjectManager *this);
mhReturnType __thiscall mhObjectManager::AddObject(mhObjectManager *this, int iObjGUID, mhResTableElement *pkResource, int iTexID, mhObject::mhObjBindType btBindType, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName);
void __thiscall mhObjAniActor::_mhObjAniActor(mhObjAniActor *this);
void *__thiscall mhObjActor::_scalar_deleting_destructor_(mhObjAniActor *this, unsigned int);
std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Max(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Pnode);
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > *result, const char *_Keyval);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Node, bool _Leftish);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *_Node, bool _Leftish);
std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Buynode<std::pair<unsigned_char_unsigned_short>__>(std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *this, std::pair<unsigned char,unsigned short> *_Val);
void __thiscall mhObject::mhObject(mhObject *this);
void __thiscall mhObject::_mhObject(mhObject *this);
void *__thiscall mhObject::_scalar_deleting_destructor_(mhObject *this, unsigned int);
int __thiscall mhObjAniActor::PlayEffect(mhObjAniActor *this, unsigned int Index);
int __thiscall mhObjAniActor::PlaySoundA(mhObjAniActor *this, unsigned int Index);
int __thiscall mhObjAniActor::AskAniGroupState(mhObjAniActor *this, int AniGroupID, NiActorManager *ActorMgr);
int __thiscall mhObjAniActor::SetAct(mhObjAniActor *this, unsigned __int16 handle, unsigned __int16 nexthandle, NiActorManager *ActorMgr);
int __thiscall mhObjAniActor::update(mhObjAniActor *this, float fTime, NiActorManager *ActorMgr);
void __thiscall mhResTableElement::_mhResTableElement(mhResTableElement *this);
mhReturnType __thiscall mhResTableManager::Clear(mhResTableManager *this);
mhReturnType __thiscall mhResTableElement::Create(mhResTableElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Filename, unsigned __int16 ElementID, mhObjectBindStyle eBindtype, mhObjectAction eAction, int iWeight, int iLoadingWeight, int iTexID, std::basic_string<char,std::char_traits<char>,std::allocator<char> > RootName);
mhResTableElement *__thiscall mhResTableManager::GetModelElement(mhResTableManager *this, int ElementID);
mhReturnType __thiscall mhResTableManager::AddModelElement(mhResTableManager *this, mhResTableElement *NewElement);
mhReturnType __thiscall mhResTableManager::AddTexElement(mhResTableManager *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *TexFileName, int iTexID);
NiPointer<NiSourceTexture> *__thiscall mhResTableManager::GetTexElement(mhResTableManager *this, NiPointer<NiSourceTexture> *result, int TexID);
void __thiscall mhResTableManager::_mhResTableManager(mhResTableManager *this);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, const char *_Ptr, unsigned int _Count);
std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Buynode<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>(std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *this, std::pair<unsigned long const ,NiPointer<NiControllerSequence> > *_Val);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *_Node, bool _Leftish);
int std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(...);
NiPointer<NiSourceTexture> *__thiscall std::map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>::operator__(std::map<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > > > *this, const int *_Keyval);
mhReturnType __thiscall MiniHouseRoomInfo::Update(MiniHouseRoomInfo *this, float fTime);
mhReturnType __thiscall MiniHouseRoomInfo::Out(MiniHouseRoomInfo *this);
void __thiscall MiniHouseRoomInfo::_MiniHouseRoomInfo(MiniHouseRoomInfo *this);
void __thiscall MiniHouseRoomInfo::SetRoofColiNodeName(MiniHouseRoomInfo *this);
void __thiscall MiniHouseRoomInfo::CullNoneTexType(MiniHouseRoomInfo *this, NiPointer<NiNode> CullNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ComponentName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *CullTexStyleName);
mhReturnType __thiscall MiniHouseRoomInfo::Join(MiniHouseRoomInfo *this, NiPointer<NiNode> spMapNode, NiPointer<NiNode> spAttachDest, MiniHouseRoomInfo::TexStyleGroup NewTexStyleGroup);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right);
void __cdecl mhMiscUtil::MakeNumToStr(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ResultStr, int Num, int Cipher);
void __cdecl mhMiscUtil::DelNodeNameNum(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *NodeName, int Cipher);
int __cdecl mhMiscUtil::GetNumFromNodeName(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *SrcName, unsigned int uiStrSize, int Cipher);
void __cdecl mhMiscUtil::InputStrFileName(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Org, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Input);
void __cdecl mhMiscUtil::MakeNodeNameNum(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *NodeName, int NodeNum, int Cipher);
int __cdecl mhMiscUtil::GetNodeMaxNum(NiNode *FindDestNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *NodeName);
void __cdecl mhMiscUtil::GetLoadModelFileName(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *IndexName, mhMiscUtil::ModelType type);
bool __thiscall ResElement::CloneResElement(ResElement *this, ResElement *pSrcResElement, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName);
bool __thiscall ResElement::LoadNIF(ResElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strFileName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName);
bool __thiscall ResElement::LoadKFM(ResElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strFileName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName);
bool __thiscall ResElement::CreateResElement(ResElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strFileName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName);
void __thiscall mhEditRoomWin::ShowComponent(mhEditRoomWin *this, bool b);
void __thiscall mhEditRoomWin::OnClose(mhEditRoomWin *this);
void __thiscall mhEditRoomWin::ReGenPos(mhEditRoomWin *this);
unsigned int __thiscall mhEditRoomWin::GetInvIndex(mhEditRoomWin *this, unsigned int uiInvType, unsigned int uiMHItemInvindex);
void __thiscall mhEditRoomWin::OnActivePage(mhEditRoomWin *this, unsigned int uiPage);
unsigned int __thiscall mhEditRoomWin::GetMHItemInvIndex(mhEditRoomWin *this, unsigned int uiIndex, unsigned int uiInvtype);
mhItemInvIconWin *__thiscall mhEditRoomWin::GetInvIconWin(mhEditRoomWin *this, unsigned int uiType, unsigned int uiIndex);
void __thiscall mhEditRoomWin::SetWorkTargetWin(mhEditRoomWin *this, mhItemInvIconWin *pIconWin, ITEM_INVEN kInven);
void __thiscall mhEditRoomWin::OnHelpLink(mhEditRoomWin *this);
void __thiscall mhItemInvIconWin::mhItemInvIconWin(mhItemInvIconWin *this);
void __thiscall mhItemInvIconWin::_mhItemInvIconWin(mhItemInvIconWin *this);
bool __thiscall mhItemInvIconWin::IsUse(mhItemInvIconWin *this);
void __thiscall mhItemInvIconWin::SetActive(mhItemInvIconWin *this, bool bActive);
bool __thiscall mhItemInvIconWin::GetActive(mhItemInvIconWin *this);
bool __thiscall mhItemInvIconWin::IsLock(mhItemInvIconWin *this);
Item *__thiscall mhEditRoomWin::GetItemByObjID(mhEditRoomWin *this, int iGUID);
void __thiscall mhEditRoomWin::OnShowWin(mhEditRoomWin *this);
void __thiscall mhEditRoomWin::UpdateWebPos(mhEditRoomWin *this);
bool __thiscall mhEditRoomWin::ChangePos(mhEditRoomWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
bool __thiscall mhEditRoomWin::IsMHOtherTypeCheck(mhEditRoomWin *this, unsigned int uiSendInvType, unsigned int uiRcvInvType);
void __thiscall mhEditRoomWin::OnActiveProp(mhEditRoomWin *this, unsigned int uiInvProptype);
void __thiscall mhEditRoomWin::OnActive(mhEditRoomWin *this, unsigned int uiInvType, unsigned int uiPage);
void __thiscall mhEditRoomWin::UpdateMeWin(mhEditRoomWin *this, float fCurTime);
void __thiscall mhEditRoomWin::OnChangeTab(mhEditRoomWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab);
bool __thiscall mhEditRoomWin::OpenMHRepairWin(mhEditRoomWin *this, bool b, unsigned __int16 FurID);
void __thiscall mhEditRoomWin::OnRClickEvent(mhEditRoomWin *this, unsigned int uiIndex);
void __thiscall mhEditRoomWin::OnLClickEvent(mhEditRoomWin *this, unsigned int uiInvtype, unsigned int uiIndex);
void __thiscall mhEditRoomWin::OnCommand(mhEditRoomWin *this, unsigned int wParam, int lParam);
void __thiscall mhItemInvIconWin::DoRAction(mhItemInvIconWin *this);
void __thiscall mhItemInvIconWin::OnFirstHitWin(mhItemInvIconWin *this);
void __thiscall mhItemInvIconWin::DoAction(mhItemInvIconWin *this);
bool __thiscall mhItemInvIconWin::EatDropInstance(mhItemInvIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall mhItemInvIconWin::SetLock(mhItemInvIconWin *this, bool bLock);
void __thiscall mhItemInvIconWin::UpdateMeWin(mhItemInvIconWin *this, float fCurTime);
void __thiscall mhItemInvIconWin::SetUse(mhItemInvIconWin *this, bool b);
void __thiscall mhEditRoomWin::_mhEditRoomWin(mhEditRoomWin *this);
mhItemInvIconWin *__cdecl mhItemInvIconWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall mhEditRoomWin::ShowWeb(mhEditRoomWin *this, char *eKey);
void __thiscall mhEditRoomWin::mhEditRoomWin(mhEditRoomWin *this);
mhEditRoomWin *__cdecl mhEditRoomWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall mhItemInvIconWin::Create(mhItemInvIconWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
bool __thiscall mhEditRoomWin::Create(mhEditRoomWin *this, PgFrameWork *pkFrameWork);
void *__thiscall mhItemInvIconWin::_scalar_deleting_destructor_(mhItemInvIconWin *this, unsigned int);
void *__thiscall mhEditRoomWin::_vector_deleting_destructor_(mhEditRoomWin *this, unsigned int);
void __thiscall mhEmotionWin::mhEmotionWin(mhEmotionWin *this);
void __thiscall mhEmotionWin::_mhEmotionWin(mhEmotionWin *this);
bool __thiscall mhEmotionWin::DoAction(mhEmotionWin *this, char ActionIndex);
bool __thiscall mhEmotionWin::Create(mhEmotionWin *this, PgFrameWork *pkFrameWork);
void __thiscall mhEmotionWin::SetIconTexture(mhEmotionWin *this, PgWinBut *pkBtn, NiSourceTexture *pkTex, char Index);
void __thiscall mhEmotionWin::UpdateInfo(mhEmotionWin *this);
void __thiscall mhEmotionWin::SendUIMsg(mhEmotionWin *this, unsigned int uiMsg, int lParam);
void __thiscall mhEmotionWin::OnCommand(mhEmotionWin *this, unsigned int wParam, int lParam);
void __thiscall mhEmotionWin::OnShowWin(mhEmotionWin *this);
mhEmotionWin *__cdecl mhEmotionWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall mhEmotionWin::_vector_deleting_destructor_(mhEmotionWin *this, unsigned int);
NiScreenElements *__thiscall PgSpr::GetGeometry(PgSpr *this, unsigned int uiIndex);
MHEmotion *__cdecl MiniHouseEmotionTab::GetMenuEmotion(unsigned __int16 MHEmotionID, int IndexCount);
void __thiscall mhGuestBookWin::mhGuestBookWin(mhGuestBookWin *this);
void __thiscall mhGuestBookWin::_mhGuestBookWin(mhGuestBookWin *this);
void __thiscall mhGuestBookWin::OnClose(mhGuestBookWin *this);
void __thiscall mhGuestBookWin::ReGenPos(mhGuestBookWin *this);
void __thiscall mhGuestBookWin::OnHelpLink(mhGuestBookWin *this);
void __thiscall mhGuestBookWin::UpdateWebPos(mhGuestBookWin *this);
void __thiscall mhGuestBookWin::OnChangeTab(mhGuestBookWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab);
void __thiscall mhGuestBookWin::OnCommand(mhGuestBookWin *this, unsigned int wParam, int lParam);
void __thiscall mhGuestBookWin::UpdateMeWin(mhGuestBookWin *this, float fCurTime);
mhGuestBookWin *__cdecl mhGuestBookWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall mhGuestBookWin::ShowWeb(mhGuestBookWin *this, char *eKey, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *tKey);
bool __thiscall mhGuestBookWin::Create(mhGuestBookWin *this, PgFrameWork *pkFrameWork);
void *__thiscall mhGuestBookWin::_scalar_deleting_destructor_(mhGuestBookWin *this, unsigned int);
void __thiscall mhGuestBookWin2::mhGuestBookWin2(mhGuestBookWin2 *this);
void __thiscall mhGuestBookWin2::_mhGuestBookWin2(mhGuestBookWin2 *this);
void __thiscall mhGuestBookWin2::OnWinClose(mhGuestBookWin2 *this);
void __thiscall mhGuestBookWin2::ReGenPos(mhGuestBookWin2 *this);
void __thiscall mhGuestBookWin2::UpdateWebPos(mhGuestBookWin2 *this);
void __thiscall mhGuestBookWin2::OnHelpLink(mhGuestBookWin2 *this);
void __thiscall mhGuestBookWin2::OnCommand(mhGuestBookWin2 *this, unsigned int wParam, int lParam);
void __thiscall mhGuestBookWin2::UpdateMeWin(mhGuestBookWin2 *this, float fCurTime);
bool __thiscall mhGuestBookWin2::Create(mhGuestBookWin2 *this, PgFrameWork *pkFrameWork);
mhGuestBookWin2 *__cdecl mhGuestBookWin2::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall mhGuestBookWin2::ShowWeb(mhGuestBookWin2 *this, char *eKey, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *tKey);
void *__thiscall mhGuestBookWin2::_vector_deleting_destructor_(mhGuestBookWin2 *this, unsigned int);
void __thiscall mhInfoWin::ClearGuestList(mhInfoWin *this);
void __thiscall mhInfoWin::OnHelpLink(mhInfoWin *this);
void __thiscall mhInfoWin::UpdateMeWin(mhInfoWin *this, float fCurTime);
void __thiscall mhInfoWin::RefreshSlideBar(mhInfoWin *this);
void __thiscall mhInfoWin::OnChangeTab(mhInfoWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab);
void __thiscall mhInfoWin::OnCommand(mhInfoWin *this, unsigned int wParam, int lParam);
bool __thiscall mhInfoWin::SetData(mhInfoWin *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Name, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Lev, int Column);
void __thiscall mhInfoWin::mhInfoWin(mhInfoWin *this);
void __thiscall mhInfoWin::_mhInfoWin(mhInfoWin *this);
mhInfoWin *__cdecl mhInfoWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall mhInfoWin::RefreshInfoPage(mhInfoWin *this);
void __thiscall mhInfoWin::RefreshGuestPage(mhInfoWin *this);
bool __thiscall mhInfoWin::Create(mhInfoWin *this, PgFrameWork *pkFrameWork);
void __thiscall mhInfoWin::OnClose(mhInfoWin *this);
void *__thiscall mhInfoWin::_vector_deleting_destructor_(mhInfoWin *this, unsigned int);
void __thiscall mhInfoWin::OnShowWin(mhInfoWin *this);
void __thiscall mhInputPassWordWin::OnCommand(mhInputPassWordWin *this, unsigned int wParam, int lParam);
void __thiscall mhInputPassWordWin::mhInputPassWordWin(mhInputPassWordWin *this);
void __thiscall mhInputPassWordWin::_mhInputPassWordWin(mhInputPassWordWin *this);
bool __thiscall mhInputPassWordWin::Create(mhInputPassWordWin *this, PgFrameWork *pkFrameWork);
mhInputPassWordWin *__cdecl mhInputPassWordWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall mhInputPassWordWin::_scalar_deleting_destructor_(mhInputPassWordWin *this, unsigned int);
void __thiscall mhJoinWin::OnHelpLink(mhJoinWin *this);
void __thiscall mhJoinWin::_mhJoinWin(mhJoinWin *this);
bool __thiscall mhJoinWin::Create(mhJoinWin *this, PgFrameWork *pkFrameWork);
void __thiscall mhJoinWin::OnCommand(mhJoinWin *this, unsigned int wParam, int lParam);
void __thiscall mhJoinWin::OnShowWin(mhJoinWin *this);
void __thiscall mhJoinWin::mhJoinWin(mhJoinWin *this);
mhJoinWin *__cdecl mhJoinWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall mhJoinWin::_vector_deleting_destructor_(mhJoinWin *this, unsigned int);
void __thiscall mhMinimizeWin::mhMinimizeWin(mhMinimizeWin *this);
void __thiscall mhMinimizeWin::_mhMinimizeWin(mhMinimizeWin *this);
void __thiscall mhMinimizeWin::OnCommand(mhMinimizeWin *this, unsigned int wParam, int lParam);
bool __thiscall mhMinimizeWin::Create(mhMinimizeWin *this, PgFrameWork *pkFrameWork);
mhMinimizeWin *__cdecl mhMinimizeWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall mhMinimizeWin::_vector_deleting_destructor_(mhMinimizeWin *this, unsigned int);
void __thiscall mhMouseControlWin::mhMouseControlWin(mhMouseControlWin *this);
void __thiscall mhMouseControlWin::_mhMouseControlWin(mhMouseControlWin *this);
void __thiscall mhMouseControlWin::ShowBtn(mhMouseControlWin *this, mhMouseControlWin::BtnIndex eBtn, bool b);
unsigned int __thiscall mhMouseControlWin::GetCenterX(mhMouseControlWin *this);
unsigned int __thiscall mhMouseControlWin::GetCenterY(mhMouseControlWin *this);
void __thiscall mhMouseControlWin::OnShowWin(mhMouseControlWin *this);
void __thiscall mhMouseControlWin::OnClose(mhMouseControlWin *this);
void __thiscall mhMouseControlWin::UpdateMeWin(mhMouseControlWin *this, float fCurTime);
bool __thiscall mhMouseControlWin::Create(mhMouseControlWin *this, PgFrameWork *pkFrameWork);
mhMouseControlWin *__cdecl mhMouseControlWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall mhMouseControlWin::_vector_deleting_destructor_(mhMouseControlWin *this, unsigned int);
void __thiscall mhPortalListWin::ShowComponent(mhPortalListWin *this, bool b);
void __thiscall mhPortalListWin::OnHelpLink(mhPortalListWin *this);
// tm *__usercall localtime_2<eax>(const int *_Time<eax>);
void __thiscall mhPortalListWin::UpdateMeWin(mhPortalListWin *this, float fCurTime);
void __thiscall mhPortalListWin::OnShowWin(mhPortalListWin *this);
void __thiscall mhPortalListWin::OnChangeTab(mhPortalListWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab);
bool __thiscall mhPortalListWin::SetData(mhPortalListWin *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Name, int Column);
unsigned __int16 __thiscall mhPortalListWin::GetID(mhPortalListWin *this, int iSlideListIndex);
void __thiscall mhPortalListWin::SetToolTipText(mhPortalListWin *this, int column, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ItemName);
void __thiscall mhPortalListWin::RefreshSlideBar(mhPortalListWin *this);
void __thiscall mhPortalListWin::Refresh(mhPortalListWin *this);
void __thiscall mhPortalListWin::_mhPortalListWin(mhPortalListWin *this);
void __thiscall mhPortalListWin::OnCommand(mhPortalListWin *this, unsigned int wParam, int lParam);
bool __thiscall mhPortalListWin::Add(mhPortalListWin *this, PORTAL_INFO Info);
bool __thiscall mhPortalListWin::Delete(mhPortalListWin *this, unsigned __int16 ID);
void __thiscall mhPortalListWin::mhPortalListWin(mhPortalListWin *this);
mhPortalListWin *__cdecl mhPortalListWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall mhPortalListWin::Create(mhPortalListWin *this, PgFrameWork *pkFrameWork);
void *__thiscall mhPortalListWin::_vector_deleting_destructor_(mhPortalListWin *this, unsigned int);
void __thiscall mhRepairObjWin::mhRepairObjWin(mhRepairObjWin *this);
void __thiscall mhRepairObjWin::_mhRepairObjWin(mhRepairObjWin *this);
void __thiscall mhRepairObjWin::UpdateTime(mhRepairObjWin *this, unsigned int tCount);
void __thiscall mhRepairObjWin::SetRepairObjID(mhRepairObjWin *this, unsigned __int16 ID);
void __thiscall mhRepairObjWin::SetRepairKitSlot(mhRepairObjWin *this, char bySlot);
void __thiscall mhRepairObjWin::OnClose(mhRepairObjWin *this);
void __thiscall mhRepairObjWin::RepairEnd(mhRepairObjWin *this);
// tm *__usercall localtime_3<eax>(const int *_Time<eax>);
// int __usercall mktime_4<eax>(tm *_Tm<eax>);
void __thiscall mhRepairObjWin::SetServerTime(mhRepairObjWin *this, int *pkKQ_Time);
bool __thiscall mhRepairObjWin::Create(mhRepairObjWin *this, PgFrameWork *pkFrameWork);
void __thiscall mhRepairObjWin::DoRepair(mhRepairObjWin *this);
void __thiscall mhRepairObjWin::OnShowWin(mhRepairObjWin *this);
void __thiscall mhRepairObjWin::GetRepairInfos(mhRepairObjWin *this, Item *pkItem, Item *pkKit, ItemInfo *pkItemInfo, ItemInfo *pkItemKit, ChargedItemEffect *pkChargedKit, MiniHouseFurniture *pkItemFurInfo, MiniHouseEndure *pkItemEndure);
void __thiscall mhRepairObjWin::OnCommand(mhRepairObjWin *this, unsigned int wParam, int lParam);
mhRepairObjWin *__cdecl mhRepairObjWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall mhRepairObjWin::_vector_deleting_destructor_(mhRepairObjWin *this, unsigned int);
void __thiscall mhSettingWin::OnHelpLink(mhSettingWin *this);
void __thiscall mhSettingWin::UpdateMeWin(mhSettingWin *this, float fCurTime);
void __thiscall mhSettingWin::OnChangeTab(mhSettingWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab);
void __thiscall mhSettingWin::OnCommand(mhSettingWin *this, unsigned int wParam, int lParam);
void __thiscall mhSettingWin::OnShowWin(mhSettingWin *this);
void __thiscall mhSettingWin::OnClose(mhSettingWin *this);
void __thiscall mhSettingWin::mhSettingWin(mhSettingWin *this);
void __thiscall mhSettingWin::_mhSettingWin(mhSettingWin *this);
mhSettingWin *__cdecl mhSettingWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall mhSettingWin::Create(mhSettingWin *this, PgFrameWork *pkFrameWork);
void __thiscall mhSettingWin::CheckEnable(mhSettingWin *this, mhSettingWin::CheckBoxIndex eIndex, bool bEnable, bool bShow);
void *__thiscall mhSettingWin::_scalar_deleting_destructor_(mhSettingWin *this, unsigned int);
NiTList<PROTO_CHARGEDBUFF_INFO *> *__cdecl ChargedItemList::GetList();
void __cdecl ChargedItemList::Clear();
unsigned int __cdecl ChargedItemList::GetTimeLimitedChargedBuffItemCount();
bool __cdecl ChargedItemList::IsActiveChargedTimeLimitItem(Item *pkItem);
void __cdecl ChargedItemList::AddUsingItem(PROTO_CHARGEDBUFF_INFO *pkInfo);
void __cdecl ChargedItemList::DelUsingItem(unsigned int ChargedBuffKey);
unsigned int __cdecl ChargedItemList::GetTimeLimitMiniHouseInvenCount();
unsigned int __cdecl ChargedItemList::GetTimeLimitMiniHouseEquipCount();
Item *__cdecl ChargedItemList::GetTimeLimitMiniHouseInven(unsigned int uiIndex);
Item *__cdecl ChargedItemList::GetTimeLimitMiniHouseEquip(unsigned int uiIndex);
unsigned int __cdecl ChargedItemList::GetTimeLimitCharInvenCount();
unsigned int __cdecl ChargedItemList::GetTimeLimitCharEquipCount();
unsigned int __cdecl ChargedItemList::GetTimeLimitCharItemCount();
Item *__cdecl ChargedItemList::GetTimeLimitCharInven(unsigned int uiIndex);
Item *__cdecl ChargedItemList::GetTimeLimitCharEquip(unsigned int uiIndex);
Item *__cdecl ChargedItemList::GetTimeLimitCharItem(unsigned int uiIndex);
bool __cdecl ChargedItemList::IsEffecting(EffectEnumerate eEffect);
bool __cdecl ChargedItemList::GetTotalEffectingValue(EffectEnumerate eEffect, unsigned int *rdwTotalEffectValue);
unsigned int __cdecl ChargedItemList::GetTimeLimitMiniHouseItemCount();
Item *__cdecl ChargedItemList::GetTimeLimitMiniHouseItem(unsigned int uiIndex);
unsigned int __cdecl ChargedItemList::GetTimeLimitItemCount();
const char *__cdecl ChargedItemList::GetEffectID(EffectEnumerate eEffect);
void __thiscall NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>(NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *> *this);
void *__thiscall NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_scalar_deleting_destructor_(NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *> *this, unsigned int);
void *__thiscall NiTList<PROTO_CHARGEDBUFF_INFO__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *> *this, unsigned int);
void __thiscall Net::Net(Net *this);
void __thiscall Net::_Net(Net *this);
bool __thiscall Net::Connect(Net *this);
bool __thiscall Net::Connect(Net *this, int a1, int a2, int a3, int a4, int port);
void __thiscall Net::Update(Net *this, float fTime);
void __thiscall Net::EnableHeartBeat(Net *this, bool b);
void __thiscall Net::NcMiscGameTimeReq(Net *this);
void __thiscall Net::ChangeSeed(Net *this, unsigned __int16 wSeed);
bool __thiscall Net::IsPingTimeOver(Net *this);
void __thiscall Net::NcMiscHeartbeatAck(Net *this);
bool __thiscall Net::On_NC_MISC_GAMETIME_ACK(Net *this, int iRevBytes, void *pvData);
bool __thiscall Net::On_NC_MISC_HEARTBEAT_REQ(Net *this, int iRevBytes, void *pvData);
bool __thiscall Net::On_NC_MISC_APEX_SERVER_DATA_CMD(Net *this, int iRevBytes, void *pvData);
void __thiscall NetMgr::SendHeartBeat2WorldMgrServer(NetMgr *this);
void __thiscall NetMgr::SendNetMsgWorldMgr(NetMgr *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength);
bool __thiscall Net::ProcessNetMsg(Net *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall NetMgr::_NetMgr(NetMgr *this);
bool __thiscall NetMgr::Init(NetMgr *this);
void __thiscall NetMgr::Terminate(NetMgr *this);
void __thiscall NetMgr::Update(NetMgr *this, float fCurTime);
void __thiscall NetMgr::CloseAll(NetMgr *this);
void __thiscall NetMgr::SendUserLogOutMsg2WorldMgrServerForCharSelect(NetMgr *this);
void __thiscall NetMgr::SendUserLogOutMsg2AllServer(NetMgr *this);
void __thiscall NetMgr::SendNetMsgZoneMgr(NetMgr *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength);
Net *__thiscall NetMgr::TryAnotherZone(NetMgr *this, char *pcAddress, int iPort);
void __thiscall NetMgr::NetMgr(NetMgr *this);
void __thiscall PgNet::ChangeSeed(PgNet *this, unsigned __int16 wSeed);
void __thiscall Net::SetName(Net *this, char *pcName);
void *__thiscall Net::_vector_deleting_destructor_(Net *this, unsigned int);
void *__thiscall NetMgr::_scalar_deleting_destructor_(NetMgr *this, unsigned int);
ORToken *__thiscall ORTable::ort_GetTableName(ORTable *this);
char __thiscall OptionReader::or_ExecColumnName(OptionReader *this, ORTokenReader *token);
char __thiscall ORTable::ort_SetTableName(ORTable *this, ORTokenReader *token);
char __thiscall ORTable::ort_ReadColumnHeader(ORTable *this, ORTokenReader *token, TokenArgument *targ);
char __thiscall OptionReader::or_ExecColumnType(OptionReader *this, ORTokenReader *token);
char __thiscall OptionReader::or_ExecTable(OptionReader *this, ORTokenReader *token);
char __thiscall OptionReader::or_Read(OptionReader *this, char *filename);
void __thiscall ORTable::_ORTable(ORTable *this);
void __thiscall OptionReader::_OptionReader(OptionReader *this);
void __thiscall ORTable::ORTable(ORTable *this);
void __thiscall OptionReader::OptionReader(OptionReader *this);
void __thiscall TokenArgument::_TokenArgument(TokenArgument *this);
void __thiscall List<ORRecord>::_List<ORRecord>(List<ORRecord> *this);
void __thiscall List<ORTable>::_List<ORTable>(List<ORTable> *this);
ORTable *__thiscall List<ORTable>::l_AllocA(List<ORTable> *this, unsigned __int16 hnd);
ORTable *__thiscall List<ORTable>::l_AllocZ(List<ORTable> *this, unsigned __int16 hnd);
char __thiscall List<ORRecord>::l_Free(List<ORTable> *this, unsigned __int16 hnd);
char __thiscall List<ORRecord>::l_4AllInList(List<ORTable> *this, ListIteratorDefault<ORTable> *arg);
bool __thiscall ListIteratorDefault<ORRecord>::lid_Call(NiShaderFactory *this, NiGeometry *pkGeometry, NiShader *pkShader);
char __thiscall ORToken::operator__(ORToken *this, ORToken *nm);
void __thiscall ListArray<ORRecord>::_ListArray<ORRecord>(ListArray<ORRecord> *this);
char __thiscall ListEraser<ORRecord>::lid_Call(ListEraser<ORTable> *this, ORTable *ele, unsigned __int16 handle);
void __thiscall ListEraser<ORRecord>::_ListEraser<ORRecord>(ListEraser<ORRecord> *this);
void __thiscall ListEraser<ORTable>::_ListEraser<ORTable>(ListEraser<ORTable> *this);
void __thiscall List<ORRecord>::l_makelist(List<ORRecord> *this, unsigned __int16 size);
void __thiscall List<ORTable>::l_makelist(List<ORTable> *this, unsigned __int16 size);
void __thiscall List<ORRecord>::List<ORRecord>(List<ORRecord> *this, ListArray<ORRecord> *array);
ORRecord *__thiscall OrderArgument::oa_Getrecord(OrderArgument *this);
char __thiscall OrderArgument::lid_Call(OrderArgument *this, ORRecord *ele, unsigned __int16 handle);
char __thiscall ColumnCheckArgument::cca_isfound(ColumnCheckArgument *this);
void *__thiscall TargetColumnFindArgument::rcfa_Getcontent(TargetColumnFindArgument *this);
ORRecord *__thiscall RecordDataCompareArgument::rdca_Getrecord(RecordDataCompareArgument *this);
ORTable *__thiscall TableNameCompareArgument::tnca_Gettable(TableNameCompareArgument *this);
ORToken *__thiscall ORColumnHeader::orch_GetColumnName(ORColumnHeader *this);
int __thiscall ORColumnHeader::orch_GetLength(ORColumnHeader *this);
int __thiscall ORColumnHeader::ortr_SetLength(ORColumnHeader *this, ORTokenReader *token, TokenArgument *targ);
char __thiscall ORColumnHeader::orch_FillCell(ORColumnHeader *this, ORTokenReader *token, ORRecord *datarecord);
int __thiscall ORColumnHeaderIndex::orch_FieldType(ORColumnHeaderIndex *this);
int __thiscall ORColumnHeaderString::ortr_SetLength(ORColumnHeaderString *this, ORTokenReader *token, TokenArgument *targ);
int __thiscall ORColumnHeaderString::orch_FieldType(ORColumnHeaderString *this);
int __thiscall ORColumnHeaderByte::orch_FieldType(ORColumnHeaderByte *this);
int __thiscall ORColumnHeaderWord::orch_FieldType(ORColumnHeaderWord *this);
int __thiscall ORColumnHeaderDwrd::orch_FieldType(ORColumnHeaderDwrd *this);
void __thiscall ORColumnHeaderList::ORColumnHeaderList(ORColumnHeaderList *this);
char __thiscall ORColumnHeaderList::orchl_4AllInList(ORColumnHeaderList *this, ListIteratorDefault<ORColumnHeader> *arg);
void *__thiscall ORTable::ort_RecordBuffer(ORTable *this, char *key);
int __thiscall RecordNumber::rn_Getnum(RecordNumber *this);
void __thiscall MakePrimaryKeyColumn::MakePrimaryKeyColumn(MakePrimaryKeyColumn *this, ORToken *column, ORRecord *rec, ORKeyList *keylist);
void __thiscall MakePrimaryKeyColumn::_MakePrimaryKeyColumn(MakePrimaryKeyColumn *this);
char __thiscall MakePrimaryKeyColumn::lid_Call(MakePrimaryKeyColumn *this, ORField *ele, unsigned __int16 handle);
void __thiscall MakePrimaryKey::MakePrimaryKey(MakePrimaryKey *this, char *column, ORKeyList *keylist);
void __thiscall MakePrimaryKey::_MakePrimaryKey(MakePrimaryKey *this);
char __thiscall MakePrimaryKey::lid_Call(MakePrimaryKey *this, ORRecord *ele, unsigned __int16 handle);
void __thiscall OrderArgument::OrderArgument(OrderArgument *this, int targ);
void __thiscall OrderArgument::_OrderArgument(OrderArgument *this);
void __thiscall ColumnNameArgument::ColumnNameArgument(ColumnNameArgument *this, ORTokenReader *token);
void __thiscall ColumnNameArgument::_ColumnNameArgument(ColumnNameArgument *this);
void __thiscall DataRecordArgument::DataRecordArgument(DataRecordArgument *this, ORTokenReader *token, ORRecord *record);
void __thiscall DataRecordArgument::_DataRecordArgument(DataRecordArgument *this);
char __thiscall DataRecordArgument::lid_Call(DataRecordArgument *this, ORColumnHeader *ele, unsigned __int16 handle);
void __thiscall ColumnCheckArgument::ColumnCheckArgument(ColumnCheckArgument *this, ORToken *col, char *content);
void __thiscall ColumnCheckArgument::_ColumnCheckArgument(ColumnCheckArgument *this);
char __thiscall ColumnCheckArgument::lid_Call(ColumnCheckArgument *this, ORField *ele, unsigned __int16 handle);
void __thiscall TargetColumnFindArgument::TargetColumnFindArgument(TargetColumnFindArgument *this, char *target, int *type);
void __thiscall TargetColumnFindArgument::_TargetColumnFindArgument(TargetColumnFindArgument *this);
char __thiscall TargetColumnFindArgument::lid_Call(TargetColumnFindArgument *this, ORField *ele, unsigned __int16 handle);
void __thiscall RecordDataCompareArgument::RecordDataCompareArgument(RecordDataCompareArgument *this, char *col, char *content, int skip);
void __thiscall RecordDataCompareArgument::_RecordDataCompareArgument(RecordDataCompareArgument *this);
char __thiscall RecordDataCompareArgument::lid_Call(RecordDataCompareArgument *this, ORRecord *ele, unsigned __int16 handle);
void __thiscall TableNameCompareArgument::TableNameCompareArgument(TableNameCompareArgument *this, ORToken *tname);
void __thiscall TableNameCompareArgument::_TableNameCompareArgument(TableNameCompareArgument *this);
char __thiscall TableNameCompareArgument::lid_Call(TableNameCompareArgument *this, ORTable *ele, unsigned __int16 handle);
void __thiscall ORColumnHeader::ORColumnHeader(ORColumnHeader *this);
void __thiscall ORColumnHeader::_ORColumnHeader(ORColumnHeader *this);
void __thiscall ORColumnHeader::orch_SetColumnName(ORColumnHeader *this, char *name);
void __thiscall ORColumnHeaderIndex::ORColumnHeaderIndex(ORColumnHeaderIndex *this);
void __thiscall ORColumnHeaderIndex::_ORColumnHeaderIndex(ORColumnHeaderIndex *this);
void __thiscall ORColumnHeaderString::ORColumnHeaderString(ORColumnHeaderString *this);
void __thiscall ORColumnHeaderString::_ORColumnHeaderString(ORColumnHeaderString *this);
void __thiscall ORColumnHeaderByte::ORColumnHeaderByte(ORColumnHeaderByte *this);
void __thiscall ORColumnHeaderByte::_ORColumnHeaderByte(ORColumnHeaderByte *this);
void __thiscall ORColumnHeaderWord::ORColumnHeaderWord(ORColumnHeaderWord *this);
void __thiscall ORColumnHeaderWord::_ORColumnHeaderWord(ORColumnHeaderWord *this);
void __thiscall ORColumnHeaderDwrd::ORColumnHeaderDwrd(ORColumnHeaderDwrd *this);
void __thiscall ORColumnHeaderDwrd::_ORColumnHeaderDwrd(ORColumnHeaderDwrd *this);
ORColumnHeader *__thiscall ORColumnHeaderList::orchl_AllocObject(ORColumnHeaderList *this, unsigned __int16 *hnd, unsigned __int16 type);
char __thiscall ORColumnHeaderList::orchl_FreeObject(ORColumnHeaderList *this, unsigned __int16 hnd, unsigned __int16 type);
char __thiscall ORTable::ort_MakePrimaryKey(ORTable *this, char *column);
char __thiscall ORTable::ort_ReadColumnName(ORTable *this, ORTokenReader *token);
void *__thiscall ORRecord::orr_GetFieldData(ORRecord *this, char *targetcolumn, int *type);
void *__thiscall ORTable::ort_FindData(ORTable *this, char *column, char *key, int *type);
void *__thiscall ORTable::ort_FindData(ORTable *this, char *column, char *content, char *targetcolumn, int skip, int *type);
void *__thiscall ORTable::ort_RecordBuffer(ORTable *this, int order);
void *__thiscall ORTable::ort_RecordBuffer(ORTable *this, char *column, char *content, int skip);
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, char *key);
void *__thiscall OptionReader::or_SelectFromOrder(OptionReader *this, ORToken table, int order);
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, char *key, int *type);
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, char *column, char *content, int skip);
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, char *column, char *content, int skip, int *type);
char __thiscall OptionReader::or_MakePrimaryKey(OptionReader *this, ORToken table, char *column);
int __thiscall OptionReader::or_SelectCount(OptionReader *this);
void __thiscall RecordNumber::RecordNumber(RecordNumber *this, char *col, char *cnt);
void __thiscall RecordNumber::_RecordNumber(RecordNumber *this);
char __thiscall RecordNumber::lid_Call(RecordNumber *this, ORRecord *ele, unsigned __int16 handle);
int __thiscall ORTable::ort_RecordNum(ORTable *this, char *column, char *content);
int __thiscall ORTable::ort_RecordNum(ORTable *this);
char __thiscall ColumnNameArgument::lid_Call(ColumnNameArgument *this, ORColumnHeader *ele, unsigned __int16 handle);
void __thiscall ORColumnHeaderList::_ORColumnHeaderList(ORColumnHeaderList *this);
char __thiscall ORTable::ort_ReadData(ORTable *this, ORTokenReader *token);
char __thiscall OptionReader::or_ExecRecordIn(OptionReader *this, ORTokenReader *token);
char __thiscall OptionReader::or_ExecRecord(OptionReader *this, ORTokenReader *token);
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, int key);
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, int key, int *type);
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, char *column, int content, int skip);
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, char *column, int content, int skip, int *type);
int __thiscall OptionReader::or_SelectCountFrom(OptionReader *this, ORToken table);
int __thiscall OptionReader::or_SelectCountFrom(OptionReader *this, ORToken table, char *column, char *content);
int __thiscall OptionReader::or_SelectCountFrom(OptionReader *this, ORToken table, char *column, int content);
char __thiscall List<ORRecord>::l_Enlargement(List<ORRecord> *this, int extsize);
void __thiscall ORKeyList::_ORKeyList(ORKeyList *this);
void __thiscall ORKeyList::okl_AddKey(ORKeyList *this, ORToken *field, ORRecord *rec);
int __cdecl ORKeyList::okl_KeyCompare(const void *a, const void *b);
void __thiscall ORKeyList::ORKeyList(ORKeyList *this);
char __thiscall ORKeyList::okl_Sorting(ORKeyList *this);
ORRecord *__thiscall ORKeyList::okl_Searching(ORKeyList *this, char *index);
void __thiscall ORField::ORField(ORField *this);
void __thiscall ORField::_ORField(ORField *this);
ORToken *__thiscall ORField::orf_ColumnName(ORField *this);
void __thiscall ORField::orf_SetColumnHead(ORField *this, ORColumnHeader *hd);
void __thiscall ORFieldIndex::ORFieldIndex(ORFieldIndex *this);
void __thiscall ORFieldIndex::_ORFieldIndex(ORFieldIndex *this);
int __thiscall ORFieldIndex::orf_Alloc(ORFieldIndex *this, char *pnt);
void *__thiscall ORFieldIndex::orf_GetBuffer(ORFieldIndex *this);
int __thiscall ORFieldIndex::orf_GetType(ORFieldIndex *this);
void __thiscall ORFieldString::ORFieldString(ORFieldString *this);
void __thiscall ORFieldString::_ORFieldString(ORFieldString *this);
int __thiscall ORFieldString::orf_Alloc(ORFieldString *this, char *pnt);
char __thiscall ORFieldString::orf_CompareContent(ORFieldString *this, char *contentstring, ORToken *contentindex);
void *__thiscall ORFieldString::orf_GetBuffer(ORFieldString *this);
int __thiscall ORFieldString::orf_GetType(ORFieldString *this);
void __thiscall ORFieldByte::ORFieldByte(ORFieldByte *this);
void __thiscall ORFieldByte::_ORFieldByte(ORFieldByte *this);
int __thiscall ORFieldByte::orf_Alloc(ORFieldByte *this, char *pnt);
char __thiscall ORFieldByte::orf_Read(ORFieldByte *this, ORTokenReader *token);
char __thiscall ORFieldByte::orf_CompareContent(ORFieldByte *this, char *contentstring, ORToken *contentindex);
void *__thiscall ORFieldByte::orf_GetBuffer(ORFieldByte *this);
int __thiscall ORFieldByte::orf_GetType(ORFieldByte *this);
void __thiscall ORFieldWord::ORFieldWord(ORFieldWord *this);
void __thiscall ORFieldWord::_ORFieldWord(ORFieldWord *this);
int __thiscall ORFieldWord::orf_Alloc(ORFieldWord *this, char *pnt);
char __thiscall ORFieldWord::orf_Read(ORFieldWord *this, ORTokenReader *token);
char __thiscall ORFieldWord::orf_CompareContent(ORFieldWord *this, char *contentstring, ORToken *contentindex);
void *__thiscall ORFieldWord::orf_GetBuffer(ORFieldWord *this);
int __thiscall ORFieldWord::orf_GetType(ORFieldWord *this);
void __thiscall ORFieldDwrd::ORFieldDwrd(ORFieldDwrd *this);
void __thiscall ORFieldDwrd::_ORFieldDwrd(ORFieldDwrd *this);
int __thiscall ORFieldDwrd::orf_Alloc(ORFieldDwrd *this, char *pnt);
char __thiscall ORFieldDwrd::orf_Read(ORFieldDwrd *this, ORTokenReader *token);
char __thiscall ORFieldDwrd::orf_CompareContent(ORFieldDwrd *this, char *contentstring, ORToken *contentindex);
void *__thiscall ORFieldDwrd::orf_GetBuffer(ORFieldDwrd *this);
int __thiscall ORFieldDwrd::orf_GetType(ORFieldDwrd *this);
void __thiscall ORRecord::ORRecord(ORRecord *this);
void __thiscall ORRecord::l_Clone(ORRecord *this, ORRecord *rec);
void *__thiscall ORRecord::orr_GetBuffer(ORRecord *this);
void __thiscall ORRecord::orr_MakeBuffer(ORRecord *this, int recorelength);
void __thiscall ORRecord::orr_AllocMemory(ORRecord *this, ORField *cell);
ORField *__thiscall ORRecord::orr_AllocObject(ORRecord *this, unsigned __int16 *hnd, unsigned __int16 type);
char __thiscall ORRecord::orr_FreeObject(ORRecord *this, unsigned __int16 hnd, unsigned __int16 type);
char __thiscall ORRecord::orr_4AllInList(ORRecord *this, ListIteratorDefault<ORField> *arg);
char __thiscall ORFieldIndex::orf_Read(ORFieldIndex *this, ORTokenReader *token);
char __thiscall ORFieldIndex::orf_CompareContent(ORFieldIndex *this, char *contentstring, ORToken *contentindex);
char __thiscall ORFieldString::orf_Read(ORFieldString *this, ORTokenReader *token);
void __thiscall ORRecord::_ORRecord(ORRecord *this);
ORToken *__thiscall ORToken::ort_ToLower(ORToken *this);
void __thiscall ORLinebuffer::ORLinebuffer(ORLinebuffer *this, _iobuf *fp);
char __thiscall ORLinebuffer::orlb_Lineread(ORLinebuffer *this);
void __thiscall ORLinebuffer::orlb_Clear(ORLinebuffer *this);
void __thiscall ORLinebuffer::orlb_FunGetc(ORLinebuffer *this);
int __thiscall ORLinebuffer::orlb_FGetc(ORLinebuffer *this);
void __thiscall ORDelimiter::ORDelimiter(ORDelimiter *this);
void __thiscall ORDelimiter::_ORDelimiter(ORDelimiter *this);
char __thiscall ORDelimiter::operator__(ORDelimiter *this, int chr);
void __thiscall ORIgnore::ORIgnore(ORIgnore *this);
void __thiscall ORIgnore::_ORIgnore(ORIgnore *this);
char __thiscall ORIgnore::operator__(ORIgnore *this, int chr);
void __thiscall ORExchange::ORExchange(ORExchange *this);
void __thiscall ORExchange::_ORExchange(ORExchange *this);
int __thiscall ORExchange::operator__(ORExchange *this, int chr);
void __thiscall ORComment::ORComment(ORComment *this);
void __thiscall ORComment::_ORComment(ORComment *this);
char __thiscall ORComment::operator__(ORComment *this, int chr);
void __thiscall ORBrace::ORBrace(ORBrace *this);
void __thiscall ORBrace::_ORBrace(ORBrace *this);
char __thiscall ORBrace::orb_IsOpen(ORBrace *this, int chr);
char __thiscall ORBrace::orb_IsClose(ORBrace *this, int chr);
void __thiscall ORErrorMessage::_ORErrorMessage(ORErrorMessage *this);
void __thiscall ORErrorMessage::orem_Clear(ORErrorMessage *this);
void __thiscall ORErrorMessage::operator_(ORErrorMessage *this, char *msg);
void __thiscall ORErrorMessage::orem_NextLine(ORErrorMessage *this);
int __thiscall ORErrorMessage::orem_GetLine(ORErrorMessage *this);
char *__thiscall ORErrorMessage::orem_GetMessage(ORErrorMessage *this);
void __thiscall ORTokenReader::ORTokenReader(ORTokenReader *this, _iobuf *fp, TokenArgument *argument);
void __thiscall ORTokenReader::_ORTokenReader(ORTokenReader *this);
int __thiscall ORTokenReader::ortr_SkipBlank(ORTokenReader *this);
void __thiscall ORTokenReader::ortr_SetError(ORTokenReader *this, char *err);
int __thiscall ORTokenReader::ortr_ReadNumber8(ORTokenReader *this, char *result);
int __thiscall ORTokenReader::ortr_ReadNumber10(ORTokenReader *this, char *result);
int __thiscall ORTokenReader::ortr_ReadNumber16(ORTokenReader *this, char *result);
int __thiscall ORTokenReader::ortr_GetOctal(ORTokenReader *this);
int __thiscall ORTokenReader::ortr_GetDigit(ORTokenReader *this);
int __thiscall ORTokenReader::ortr_GetHexa(ORTokenReader *this);
int __thiscall ORTokenReader::ortr_ReadNumber(ORTokenReader *this, char *result);
char __thiscall ORTokenReader::ortr_isEOL(ORTokenReader *this);
int __thiscall ORTokenReader::ortr_ReadChar(ORTokenReader *this);
char *__thiscall ORTokenReader::ortr_ReadString(ORTokenReader *this);
char *__thiscall ORToken::ort_GetString(ORToken *this, char *buf);
char __thiscall ORDelimiter::ord_Exec(ORDelimiter *this, ORTokenReader *token);
char __thiscall ORIgnore::ori_Exec(ORIgnore *this, ORTokenReader *token);
char __thiscall ORExchange::ore_Exec(ORExchange *this, ORTokenReader *token);
char __thiscall ORComment::orc_Exec(ORComment *this, ORTokenReader *token);
char __thiscall ORBrace::orb_Exec(ORBrace *this, ORTokenReader *token);
void __thiscall ORErrorMessage::ORErrorMessage(ORErrorMessage *this);
ORToken *__thiscall ORTokenReader::ortr_ReadCommand(ORTokenReader *this, ORToken *com);
void __thiscall WeddingEntryWin::WeddingEntryWin(WeddingEntryWin *this);
void __thiscall WeddingEntryWin::_WeddingEntryWin(WeddingEntryWin *this);
void __thiscall WeddingEntryWin::OnCmdGetIn(WeddingEntryWin *this);
void __thiscall WeddingEntryWin::OnCommand(WeddingEntryWin *this, unsigned int wParam, int lParam);
bool __thiscall WeddingEntryWin::Create(WeddingEntryWin *this, PgFrameWork *pkFrameWork);
void __thiscall WeddingEntryWin::SetWeddingEntryData(WeddingEntryWin *this, PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK *pkProto);
WeddingEntryWin *__cdecl WeddingEntryWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall WeddingEntryWin::_scalar_deleting_destructor_(WeddingEntryWin *this, unsigned int);
void __thiscall WeddingInfoWin::WeddingInfoWin(WeddingInfoWin *this);
void __thiscall WeddingInfoWin::_WeddingInfoWin(WeddingInfoWin *this);
void __thiscall WeddingInfoWin::OnShowWin(WeddingInfoWin *this);
void __thiscall WeddingInfoWin::OnHelpLink(WeddingInfoWin *this);
void __thiscall WeddingInfoWin::OnChangeTab(WeddingInfoWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab);
void __thiscall WeddingInfoWin::UpdateMeWin(WeddingInfoWin *this, float fCurTime);
void __thiscall WeddingInfoWin::OnWinClose(WeddingInfoWin *this);
void __thiscall WeddingInfoWin::DeleteWedInfo(WeddingInfoWin *this, Name5 *PartnerName);
bool __thiscall WeddingInfoWin::Create(WeddingInfoWin *this, PgFrameWork *pkFrameWork);
void __thiscall WeddingInfoWin::OnCommand(WeddingInfoWin *this, unsigned int wParam, int lParam);
void __thiscall WeddingInfoWin::SetWeddingInfo(WeddingInfoWin *this, PROTO_NC_CHAR_WEDDING_PARTNER_INFO_ACK *pkProto);
void __thiscall WeddingInfoWin::SetWeddingInfo(WeddingInfoWin *this);
void __thiscall WeddingInfoWin::ChangeUserName(WeddingInfoWin *this, Name5 *OldName, Name5 *NewName);
WeddingInfoWin *__cdecl WeddingInfoWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall WeddingInfoWin::_scalar_deleting_destructor_(WeddingInfoWin *this, unsigned int);
void __thiscall WeddingProposeInputWin::OnHelpLink(WeddingProposeInputWin *this);
void __thiscall WeddingProposeInputWin::OnShowWin(WeddingProposeInputWin *this);
void __thiscall WeddingProposeInputWin::WeddingProposeInputWin(WeddingProposeInputWin *this);
void __thiscall WeddingProposeInputWin::_WeddingProposeInputWin(WeddingProposeInputWin *this);
bool __thiscall WeddingProposeInputWin::Create(WeddingProposeInputWin *this, PgFrameWork *pkFrameWork);
void __thiscall WeddingProposeInputWin::OnCmdOk(WeddingProposeInputWin *this);
void __thiscall WeddingProposeInputWin::OnCommand(WeddingProposeInputWin *this, unsigned int wParam, int lParam);
WeddingProposeInputWin *__cdecl WeddingProposeInputWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall WeddingProposeInputWin::_scalar_deleting_destructor_(WeddingProposeInputWin *this, unsigned int);
void __thiscall WeddingProposeOutputWin::OnHelpLink(WeddingProposeOutputWin *this);
void __thiscall WeddingProposeOutputWin::OnCmdAgree(WeddingProposeOutputWin *this);
void __thiscall WeddingProposeOutputWin::OnCmdRefusal(WeddingProposeOutputWin *this);
void __thiscall WeddingProposeOutputWin::WeddingProposeOutputWin(WeddingProposeOutputWin *this);
void __thiscall WeddingProposeOutputWin::_WeddingProposeOutputWin(WeddingProposeOutputWin *this);
bool __thiscall WeddingProposeOutputWin::Create(WeddingProposeOutputWin *this, PgFrameWork *pkFrameWork);
void __thiscall WeddingProposeOutputWin::OnCommand(WeddingProposeOutputWin *this, unsigned int wParam, int lParam);
void __thiscall WeddingProposeOutputWin::SetProposeData(WeddingProposeOutputWin *this, PROTO_NC_ACT_WEDDING_PROPOSEACK_REQ *pkProto);
WeddingProposeOutputWin *__cdecl WeddingProposeOutputWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall WeddingProposeOutputWin::_vector_deleting_destructor_(WeddingProposeOutputWin *this, unsigned int);
void __thiscall WeddingProposeResultWin::OnHelpLink(WeddingProposeResultWin *this);
void __thiscall WeddingProposeResultWin::OnCommand(WeddingProposeResultWin *this, unsigned int wParam, int lParam);
void __thiscall WeddingProposeResultWin::WeddingProposeResultWin(WeddingProposeResultWin *this);
void __thiscall WeddingProposeResultWin::_WeddingProposeResultWin(WeddingProposeResultWin *this);
bool __thiscall WeddingProposeResultWin::Create(WeddingProposeResultWin *this, PgFrameWork *pkFrameWork);
void __thiscall WeddingProposeResultWin::SetProposeResult(WeddingProposeResultWin *this, PROTO_NC_ACT_WEDDING_PROPOSEREQ_ACK *pkProto, bool bYes);
WeddingProposeResultWin *__cdecl WeddingProposeResultWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall WeddingProposeResultWin::_vector_deleting_destructor_(WeddingProposeResultWin *this, unsigned int);
void __thiscall WeddingTask::OnStart(WeddingTask *this);
void __thiscall WeddingTask::DirectMessage(WeddingTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_PROPOSE_WORD_REQ(WeddingTask *this);
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_PROPOSEACK_REQ(WeddingTask *this, PROTO_NC_ACT_WEDDING_PROPOSEACK_REQ *pkProto);
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_SOMEONE(WeddingTask *this, PROTO_NC_ACT_WEDDING_SOMEONE *pkProto);
WeddingProposeInputWin *__cdecl WeddingTask::GetWeddingProposeInputWin();
CLIENT_MARRYINFO *__cdecl WeddingTask::GetMarryInfo();
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_PROPOSEREQ_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_PROPOSEREQ_ACK *pkProto);
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_HALL_GUEST_ENTER_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_ACK *pkProto);
int __thiscall WeddingTask::Recv_NC_CHAR_WEDDING_PARTNER_INFO_ACK(WeddingTask *this, PROTO_NC_CHAR_WEDDING_PARTNER_INFO_ACK *pkProto);
void __cdecl WeddingTask::Terminate();
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_HALL_RESERV_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_HALL_RESERV_ACK *pkProto);
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK *pkProto);
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_DIVORCE_REQ_ACK(WeddingTask *this, PROTO_ERRORCODE *pkProto);
void __thiscall WeddingTask::_WeddingTask(WeddingTask *this);
bool __thiscall WeddingTask::OnProcessNetMsg(WeddingTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall WeddingTask::WeddingTask(WeddingTask *this);
void __cdecl WeddingTask::Create(IDirectMessenger *pkMsgHooker);
void *__thiscall WeddingTask::_scalar_deleting_destructor_(WeddingTask *this, unsigned int);
bool __thiscall DirectionControllers::IsRunDirection(DirectionControllers *this);
void __thiscall DirectionController::Update(DirectionController *this, float fAccolTime);
bool __thiscall DirectionController::IsRuntimer(DirectionController *this);
bool __thiscall DirectionController::RunTimer(DirectionController *this);
void __thiscall DirectionControllers::Update(DirectionControllers *this, float fAccolTime);
bool __thiscall DirectionControllers::DoRunDirection(DirectionControllers *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rStrName);
bool __thiscall DirectionController::AddTimer(DirectionController *this, NiPointer<TimerController> spTimer);
bool __thiscall DirectionControllers::AddController(DirectionControllers *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rStrName, NiPointer<DirectionController> spController);
NiPointer<DirectionControllers> *__cdecl CreateMetamorphosisDirection(NiPointer<DirectionControllers> *result, Char *pChar);
boost::detail::function::any_pointer __cdecl boost::detail::function::functor_manager<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_int_int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>_std::allocator<void>>::manager(boost::detail::function::any_pointer function_obj_ptr, boost::detail::function::functor_manager_operation_type op, boost::detail::function::function_obj_tag __formal);
boost::detail::function::any_pointer __cdecl boost::detail::function::functor_manager<boost::_bi::bind_t<void_boost::_mfi::mf1<void_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>_std::allocator<void>>::manage(boost::detail::function::any_pointer functor_ptr, boost::detail::function::functor_manager_operation_type op);
boost::detail::function::unusable *__cdecl boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>_void_char_const__>::invoke(boost::detail::function::unusable *result, boost::detail::function::any_pointer function_obj_ptr, const char *a0);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::find(...);
void __thiscall boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>>(boost::function1<void,char const *,std::allocator<void> > *this, boost::_bi::bind_t<bool,boost::_mfi::mf1<bool,Char,char const *>,boost::_bi::list2<boost::_bi::value<Char *>,boost::arg<1> > > f);
void __cdecl std::_Dest_val<std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>(std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > > *_Alval, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *_Pdest);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Linsert(...);
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController> > *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, NiPointer<DirectionController> *_Val2);
void *__thiscall DirectionController::_scalar_deleting_destructor_(DirectionController *this, unsigned int);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>>>(...);
void __thiscall DirectionControllers::DirectionControllers(DirectionControllers *this);
void __thiscall DirectionControllers::_DirectionControllers(DirectionControllers *this);
void *__thiscall DirectionControllers::_scalar_deleting_destructor_(DirectionControllers *this, unsigned int);
int __thiscall TimerController::GetLoopMaxCount(TimerController *this);
void __thiscall TimerController::SetLoopMaxCount(TimerController *this, int val);
int __thiscall TimerController::GetCurRunCount(TimerController *this);
void __thiscall TimerController::SetDelayTime(TimerController *this, float fDelayTime);
float __thiscall TimerController::GetDelayTime(TimerController *this);
bool __thiscall TimerController::OnTimerEnable(TimerController *this, bool bEnable);
bool __thiscall TimerController::IsEnable(TimerController *this);
bool __thiscall TimerController::UpdateCheckTime(TimerController *this, float DeltaTime);
void __thiscall TimerController::Update(TimerController *this, float fAccolTime);
void __thiscall TimerController::TimerController(TimerController *this);
void __thiscall TimerController::TimerController(TimerController *this, float fDelayTime);
void __thiscall TimerController::OnTimerMessage(TimerController *this);
void __thiscall TimerController::SetCallBackFunc(TimerController *this, boost::function<void __cdecl(char const *),std::allocator<void> > Func);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall TimerController::GetEventName(TimerController *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
void __thiscall TimerController::SetEventName(TimerController *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > val);
void *__thiscall TimerController::_scalar_deleting_destructor_(TimerController *this, unsigned int);
void __thiscall GuildAcademyHallOfFameWin::GuildAcademyHallOfFameWin(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::_GuildAcademyHallOfFameWin(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle01(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle02(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle03(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle04(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle05(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnHelpLink(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::UpdateMeWin(GuildAcademyHallOfFameWin *this, float fCurTime);
void __thiscall GuildAcademyHallOfFameWin::OnClickWinCloseBtn(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnClickOKBtn(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnSlideBar(GuildAcademyHallOfFameWin *this);
void __thiscall GuildAcademyHallOfFameWin::OnCommand(GuildAcademyHallOfFameWin *this, unsigned int wParam, int lParam);
void __thiscall GuildAcademyHallOfFameWin::AddListItem_DefInfo(GuildAcademyHallOfFameWin *this, EACH_GRADUATE_DATA *pkData);
void __thiscall GuildAcademyHallOfFameWin::On_Recv_NC_GUILD_ACADEMY_GET_GRADUATE_ACK(GuildAcademyHallOfFameWin *this, PROTO_NC_GUILD_ACADEMY_GET_GRADUATE_ACK *pkProto);
GuildAcademyHallOfFameWin *__cdecl GuildAcademyHallOfFameWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall GuildAcademyHallOfFameWin::Create(GuildAcademyHallOfFameWin *this, PgFrameWork *pkFrameWork);
void *__thiscall GuildAcademyHallOfFameWin::_scalar_deleting_destructor_(GuildAcademyHallOfFameWin *this, unsigned int);
void __thiscall GuildAcademyItemRewardInvWin::GuildAcademyItemRewardInvWin(GuildAcademyItemRewardInvWin *this);
void __thiscall GuildAcademyItemRewardInvWin::_GuildAcademyItemRewardInvWin(GuildAcademyItemRewardInvWin *this);
bool __thiscall GuildAcademyItemRewardInvWin::Create(GuildAcademyItemRewardInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall GuildAcademyItemRewardInvWin::OnFirstHitWin(GuildAcademyItemRewardInvWin *this);
void __thiscall GuildAcademyItemRewardInvWin::Show(GuildAcademyItemRewardInvWin *this, bool b);
bool __thiscall GuildAcademyItemRewardInvWin::IsDisable(GuildAcademyItemRewardInvWin *this);
void __thiscall GuildAcademyItemRewardWin::DirectMessage(GuildAcademyItemRewardWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildAcademyItemRewardWin::InitializeRewardItem(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::resetInven(GuildAcademyItemRewardWin *this, unsigned int uiIndex);
void __thiscall GuildAcademyItemRewardWin::OnClose(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::OnHelpLink(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::GuildAcademyItemRewardWin(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::_GuildAcademyItemRewardWin(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::SetRewardItem(GuildAcademyItemRewardWin *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *pAck);
void __thiscall GuildAcademyItemRewardWin::OnClickWinCloseBtn(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::OnInvLClick(GuildAcademyItemRewardWin *this, unsigned int uiInvIndex);
bool __thiscall GuildAcademyItemRewardWin::IsExist(GuildAcademyItemRewardWin *this, Item *item);
void __thiscall GuildAcademyItemRewardInvWin::DoAction(GuildAcademyItemRewardInvWin *this);
void __thiscall GuildAcademyItemRewardInvWin::DoRAction(GuildAcademyItemRewardInvWin *this);
void __thiscall GuildAcademyItemRewardWin::UpdateAcademyInfo(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::OnClickInitializeBtn(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::OnClickGuildAcademyStorageBtn(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardInvWin::SetDisable(GuildAcademyItemRewardInvWin *this, bool bDisable);
void __thiscall GuildAcademyItemRewardWin::UpdateMeWin(GuildAcademyItemRewardWin *this, float fCurTime);
bool __thiscall GuildAcademyItemRewardWin::DropOnInv(GuildAcademyItemRewardWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall GuildAcademyItemRewardWin::On_GuildAcademyStorage_Cell_Changed(GuildAcademyItemRewardWin *this);
bool __thiscall GuildAcademyItemRewardInvWin::EatDropInstance(GuildAcademyItemRewardInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
GuildAcademyItemRewardInvWin *__cdecl GuildAcademyItemRewardInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
GuildAcademyItemRewardWin *__cdecl GuildAcademyItemRewardWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall GuildAcademyItemRewardWin::Create(GuildAcademyItemRewardWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildAcademyItemRewardWin::OnClickApplyBtn(GuildAcademyItemRewardWin *this);
void __thiscall GuildAcademyItemRewardWin::OnCommand(GuildAcademyItemRewardWin *this, unsigned int wParam, int lParam);
void *__thiscall GuildAcademyItemRewardInvWin::_scalar_deleting_destructor_(GuildAcademyItemRewardInvWin *this, unsigned int);
void *__thiscall GuildAcademyItemRewardWin::_scalar_deleting_destructor_(GuildAcademyItemRewardWin *this, unsigned int);
NiColorA *__thiscall std::allocator<NiColorA>::allocate(std::allocator<NiColorA> *this, unsigned int _Count);
NiColorA *__cdecl std::_Uninit_move<GUILD_ACADEMY_REWARD_ITEM___GUILD_ACADEMY_REWARD_ITEM___std::allocator<GUILD_ACADEMY_REWARD_ITEM>_GUILD_ACADEMY_REWARD_ITEM>(NiColorA *_First, NiColorA *_Last, NiColorA *_Dest, std::allocator<NiColorA> *_Al, NiColorA *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::reserve(std::vector<NiColorA,std::allocator<NiColorA> > *this, unsigned int _Count);
void __thiscall GuildAcademyMenuWin::GuildAcademyMenuWin(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::_GuildAcademyMenuWin(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::OnClickJoinBtn(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::OnClickCheckRankingBtn(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::OnClickMoneyCompensationBtn(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::OnClickItemCompensationBtn(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::OnClickPrevMenuBtn(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::OnHelpLink(GuildAcademyMenuWin *this);
bool __thiscall GuildAcademyMenuWin::Create(GuildAcademyMenuWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildAcademyMenuWin::OnClickHallOfFameBtn(GuildAcademyMenuWin *this);
GuildAcademyMenuWin *__cdecl GuildAcademyMenuWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildAcademyMenuWin::OnClickLeaveBtn(GuildAcademyMenuWin *this);
void __thiscall GuildAcademyMenuWin::OnCommand(GuildAcademyMenuWin *this, unsigned int wParam, int lParam);
void *__thiscall GuildAcademyMenuWin::_scalar_deleting_destructor_(GuildAcademyMenuWin *this, unsigned int);
void *__thiscall ISingletonTask<GuildAcademyLeaveTask>::_scalar_deleting_destructor_(GuildAcademyLeaveTask *this, unsigned int);
void __thiscall GuildAcademyMoneyRewardWin::GuildAcademyMoneyRewardWin(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::_GuildAcademyMoneyRewardWin(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::DirectMessage(GuildAcademyMoneyRewardWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildAcademyMoneyRewardWin::InitializeRewardMoney(GuildAcademyMoneyRewardWin *this, PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK *pAck);
void __thiscall GuildAcademyMoneyRewardWin::SetMoneyValue(GuildAcademyMoneyRewardWin *this, int index, __int64 money);
void __thiscall GuildAcademyMoneyRewardWin::SetEnable(GuildAcademyMoneyRewardWin *this, bool b);
void __thiscall GuildAcademyMoneyRewardWin::OnClose(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::OnHelpLink(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::OnClickWinCloseBtn(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::SetRewardMoney(GuildAcademyMoneyRewardWin *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK *pAck);
bool __thiscall GuildAcademyMoneyRewardWin::Create(GuildAcademyMoneyRewardWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildAcademyMoneyRewardWin::OnClickApplyBtn(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::OnClickInitializeBtn(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::OnClickGuildStorageBtn(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::UpdateAcademyInfo(GuildAcademyMoneyRewardWin *this);
void __thiscall GuildAcademyMoneyRewardWin::OnCommand(GuildAcademyMoneyRewardWin *this, unsigned int wParam, int lParam);
void __thiscall GuildAcademyMoneyRewardWin::UpdateMeWin(GuildAcademyMoneyRewardWin *this, float fCurTime);
GuildAcademyMoneyRewardWin *__cdecl GuildAcademyMoneyRewardWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall GuildAcademyMoneyRewardWin::_scalar_deleting_destructor_(GuildAcademyMoneyRewardWin *this, unsigned int);
void __thiscall GuildAcademyNoticeEditorWin::GuildAcademyNoticeEditorWin(GuildAcademyNoticeEditorWin *this);
void __thiscall GuildAcademyNoticeEditorWin::_GuildAcademyNoticeEditorWin(GuildAcademyNoticeEditorWin *this);
void __thiscall GuildAcademyNoticeEditorWin::OnClose(GuildAcademyNoticeEditorWin *this);
void __thiscall GuildAcademyNoticeEditorWin::OnShowWin(GuildAcademyNoticeEditorWin *this);
bool __thiscall GuildAcademyNoticeEditorWin::Create(GuildAcademyNoticeEditorWin *this, PgFrameWork *pkFrameWork);
GuildAcademyNoticeEditorWin *__cdecl GuildAcademyNoticeEditorWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildAcademyNoticeEditorWin::OnCommand(GuildAcademyNoticeEditorWin *this, unsigned int wParam, int lParam);
void *__thiscall GuildAcademyNoticeEditorWin::_vector_deleting_destructor_(GuildAcademyNoticeEditorWin *this, unsigned int);
void *__thiscall ISingletonTask<GuildAcademyNotifyTask>::_vector_deleting_destructor_(ISingletonTask<GuildAcademyNotifyTask> *this, unsigned int);
GuildAcademyNotifyTask *__cdecl ISingletonTask<GuildAcademyNotifyTask>::Run();
void *__thiscall GuildAcademyNotifyTask::_scalar_deleting_destructor_(GuildAcademyNotifyTask *this, unsigned int);
void __thiscall GuildAcademyRankingWin::GuildAcademyRankingWin(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::_GuildAcademyRankingWin(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnClickWinCloseBtn(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnSortByTitle01(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnSortByTitle02(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnSortByTitle03(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnSortByTitle04(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnClickThisWeekRankingBtn(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnClickLastWeekRankingBtn(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnClickOKBtn(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::OnHelpLink(GuildAcademyRankingWin *this);
// tm *__usercall localtime_4<eax>(const int *_Time<eax>);
void __thiscall GuildAcademyRankingWin::UpdateMeWin(GuildAcademyRankingWin *this, float fCurTime);
void __thiscall GuildAcademyRankingWin::OnSlideBar(GuildAcademyRankingWin *this);
void __thiscall GuildAcademyRankingWin::AddListItem_DefInfo(GuildAcademyRankingWin *this, GUILD_ACADEMY_EACH_RANKING_DATA *pkData);
void __thiscall GuildAcademyRankingWin::ChangeUserName(GuildAcademyRankingWin *this, Name5 *OldName, Name5 *NewName);
void __thiscall GuildAcademyRankingWin::OnCommand(GuildAcademyRankingWin *this, unsigned int wParam, int lParam);
void __thiscall GuildAcademyRankingWin::On_Recv_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK(GuildAcademyRankingWin *this, PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK *pkProto);
GuildAcademyRankingWin *__cdecl GuildAcademyRankingWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall GuildAcademyRankingWin::Create(GuildAcademyRankingWin *this, PgFrameWork *pkFrameWork);
void *__thiscall GuildAcademyRankingWin::_scalar_deleting_destructor_(GuildAcademyRankingWin *this, unsigned int);
void __thiscall GuildAcademySelectWin::OnSortByTitle01(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnSortByTitle02(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnSortByTitle03(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnSortByTitle04(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnSortByTitle05(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnClickRankingBtn(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnHelpLink(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::ProcessMeInput(GuildAcademySelectWin *this, bool *bHit);
void __thiscall GuildAcademySelectWin::OnSlideBar(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::AddListItem_DefInfo(GuildAcademySelectWin *this, SHINE_GUILD_ACADEMY_LIST *pkData);
void __thiscall GuildAcademySelectWin::DirectMessage(GuildAcademySelectWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildAcademySelectWin::OnClickJoinBtn(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnClickHallOfFameBtn(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::On_Recv_NC_GUILD_ACADEMY_LIST_ACK(GuildAcademySelectWin *this, PROTO_NC_GUILD_ACADEMY_LIST_ACK *pkProto);
void __thiscall GuildAcademySelectWin::UpdateTimer(GuildAcademySelectWin *this, float fTime);
void __thiscall GuildAcademySelectWin::UpdateMeWin(GuildAcademySelectWin *this, float fCurTime);
void __thiscall GuildAcademySelectWin::AddGuildInfo(GuildAcademySelectWin *this, GuildAcademySelectWin::GuildInfo *kGuildInfo);
void __thiscall GuildAcademySelectWin::GuildAcademySelectWin(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::_GuildAcademySelectWin(GuildAcademySelectWin *this);
GuildAcademySelectWin *__cdecl GuildAcademySelectWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildAcademySelectWin::ClearAcademyList(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnClickWinCloseBtn(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::ShowAll(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::SetGuildList(GuildAcademySelectWin *this, SHINE_GUILD_ACADEMY_LIST *pkList);
void __thiscall GuildAcademySelectWin::Sort(GuildAcademySelectWin *this);
bool __thiscall GuildAcademySelectWin::Create(GuildAcademySelectWin *this, PgFrameWork *pkFrameWork);
void __thiscall GuildAcademySelectWin::DisplayInfoSetting(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnSearch(GuildAcademySelectWin *this);
void __thiscall GuildAcademySelectWin::OnCommand(GuildAcademySelectWin *this, unsigned int wParam, int lParam);
void __thiscall GuildAcademySelectWin::OnEditEnd(GuildAcademySelectWin *this, unsigned int wParam, int lParam);
GuildAcademyJoinReqTask *__cdecl ISingletonTask<GuildAcademyJoinReqTask>::Run();
bool __thiscall GuildAcademySelectWin::Order::operator__(GuildAcademySelectWin::Order *this, GuildAcademySelectWin::GuildInfo *GuildInfo2, GuildAcademySelectWin::GuildInfo *GuildInfo);
void __cdecl std::_Push_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, int _Hole, int _Top, GuildAcademySelectWin::GuildInfo *_Val, GuildAcademySelectWin::Order _Pred);
GuildListWin::GuildInfo *__cdecl std::_Move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo__>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Med3<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Mid, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred);
void __cdecl std::_Adjust_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, int _Hole, int _Bottom, GuildAcademySelectWin::GuildInfo *_Val, GuildAcademySelectWin::Order _Pred);
void __cdecl std::_Median<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Mid, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred);
void __cdecl std::_Make_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred, int *__formal, GuildAcademySelectWin::GuildInfo *__formal);
void __cdecl std::_Insertion_sort1<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order_GuildAcademySelectWin::GuildInfo>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred, GuildAcademySelectWin::GuildInfo *__formal);
void __cdecl std::_Pop_heap_0<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred, GuildAcademySelectWin::GuildInfo *__formal);
std::pair<GuildAcademySelectWin::GuildInfo *,GuildAcademySelectWin::GuildInfo *> *__cdecl std::_Unguarded_partition<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(std::pair<GuildAcademySelectWin::GuildInfo *,GuildAcademySelectWin::GuildInfo *> *result, GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred);
void __cdecl std::_Sort_heap<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred);
void *__thiscall GuildAcademySelectWin::_vector_deleting_destructor_(GuildAcademySelectWin *this, unsigned int);
void __cdecl std::_Sort<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, int _Ideal, GuildAcademySelectWin::Order _Pred);
void __thiscall GuildAcademyStorageTabWin::GuildAcademyStorageTabWin(GuildAcademyStorageTabWin *this);
void __thiscall GuildAcademyStorageTabWin::_GuildAcademyStorageTabWin(GuildAcademyStorageTabWin *this);
bool __thiscall GuildAcademyStorageTabWin::Create(GuildAcademyStorageTabWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
void __thiscall GuildAcademyStorageInvWin::GuildAcademyStorageInvWin(GuildAcademyStorageInvWin *this);
void __thiscall GuildAcademyStorageInvWin::_GuildAcademyStorageInvWin(GuildAcademyStorageInvWin *this);
bool __thiscall GuildAcademyStorageInvWin::Create(GuildAcademyStorageInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
void __thiscall GuildAcademyStorageInvWin::OnFirstHitWin(GuildAcademyStorageInvWin *this);
void __thiscall GuildAcademyStorageWin::OnOk(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::OnCancel(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::OnDrawingMoneyWinOk(GuildAcademyStorageWin *this, __int64 i64Money);
void __thiscall GuildAcademyStorageWin::OnDepositMoneyWinOk(GuildAcademyStorageWin *this, __int64 i64Money);
void __thiscall GuildAcademyStorageWin::ResetContents(GuildAcademyStorageWin *this);
GuildAcademyStorageInvWin *__thiscall GuildAcademyStorageWin::GetInvWin(GuildAcademyStorageWin *this, unsigned int uiIndex);
void __thiscall GuildAcademyStorageWin::OnHelpLink(GuildAcademyStorageWin *this);
bool __thiscall GuildAcademyStorageTabWin::EatDropInstance(GuildAcademyStorageTabWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall GuildAcademyStorageWin::GuildAcademyStorageWin(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::_GuildAcademyStorageWin(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::ResetPage(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::OnTab1(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::OnTab2(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::OnShowWin(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::OnClose(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageInvWin::DoAction(GuildAcademyStorageInvWin *this);
void __thiscall GuildAcademyStorageInvWin::DoRAction(GuildAcademyStorageInvWin *this);
void __thiscall GuildAcademyStorageWin::OnInvShiftLClick(GuildAcademyStorageWin *this, unsigned int uiInvIndex);
void __thiscall GuildAcademyStorageWin::OnInvRClick(GuildAcademyStorageWin *this, unsigned int uiInvIndex);
void __thiscall GuildAcademyStorageWin::OnDeposit(GuildAcademyStorageWin *this);
void __thiscall GuildAcademyStorageWin::OnDrawing(GuildAcademyStorageWin *this);
bool __thiscall GuildAcademyStorageWin::DropOnInv(GuildAcademyStorageWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex);
void __thiscall GuildAcademyStorageWin::UpdateMeWin(GuildAcademyStorageWin *this, float fCurTime);
bool __thiscall GuildAcademyStorageInvWin::EatDropInstance(GuildAcademyStorageInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
void __thiscall GuildAcademyStorageWin::OnInvLClick(GuildAcademyStorageWin *this, unsigned int uiInvIndex);
void __thiscall GuildAcademyStorageWin::OnCommand(GuildAcademyStorageWin *this, unsigned int wParam, int lParam);
GuildAcademyStorageTabWin *__cdecl GuildAcademyStorageTabWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg);
GuildAcademyStorageInvWin *__cdecl GuildAcademyStorageInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent);
GuildAcademyStorageWin *__cdecl GuildAcademyStorageWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall GuildAcademyStorageWin::Create(GuildAcademyStorageWin *this, PgFrameWork *pkFrameWork);
void *__thiscall GuildAcademyStorageTabWin::_scalar_deleting_destructor_(GuildAcademyStorageTabWin *this, unsigned int);
void *__thiscall GuildAcademyStorageInvWin::_scalar_deleting_destructor_(GuildAcademyStorageInvWin *this, unsigned int);
void *__thiscall GuildAcademyStorageWin::_scalar_deleting_destructor_(GuildAcademyStorageWin *this, unsigned int);
void __thiscall GuildAcademyWin::OnSortByTitle01(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnSortByTitle02(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnSortByTitle03(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnSortByTitle04(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnSortByTitle05(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnClickJoinBtn(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnHelpLink(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnWinClose(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnTopWin(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::ProcessMeInput(GuildAcademyWin *this, bool *bHit);
void __thiscall GuildAcademyWin::UpdateMeWin(GuildAcademyWin *this, float fCurTime);
void __thiscall GuildAcademyWin::OnLClick(GuildAcademyWin *this, int nItemIndex);
void __thiscall GuildAcademyWin::OnRClick(GuildAcademyWin *this, int nItemIndex);
void __thiscall GuildAcademyWin::OnChangeTab(GuildAcademyWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab);
void __thiscall GuildAcademyWin::OnSlideBar(GuildAcademyWin *this, SlideBar *pkSlideBar, SlideListWin *pkSlideListWin);
void __thiscall GuildAcademyWin::OnEditNotice(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnClickMasterTeleportBtn(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnClickInvitePartyBtn(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnSlideBarMemberList(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnSlideBarNotice(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnSlideBarHistory(GuildAcademyWin *this);
char *__thiscall GuildAcademyWin::GetHistoryText(GuildAcademyWin *this, GUILD_HISTORY_MSG_TYPE hisType);
void __thiscall GuildAcademyWin::AddListItem_DefInfo(GuildAcademyWin *this, GUILD_ACADEMY_MEMBER_CLIENT *pkData);
void __thiscall GuildAcademyWin::ViewAllInfo(GuildAcademyWin *this, PROTO_FRIEND_INFO *pData);
void __thiscall GuildAcademyWin::InvalidateGuildAcademyHistoryList(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::UpdateViewList(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::ChangeUserName(GuildAcademyWin *this, Name5 OldName, Name5 NewName);
void __thiscall GuildAcademyWin::InvalidateAcademy(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::DeleteUser(GuildAcademyWin *this, Name5 kName);
void __thiscall GuildAcademyWin::_GuildAcademyWin(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::DirectMessage(GuildAcademyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildAcademyWin::OnTab01(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnTab02(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::OnTab03(GuildAcademyWin *this);
void __thiscall GuildAcademyWin::GuildAcademyWin(GuildAcademyWin *this);
GuildAcademyWin *__cdecl GuildAcademyWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GuildAcademyWin::OnCommand(GuildAcademyWin *this, unsigned int wParam, int lParam);
void __thiscall GuildAcademyWin::OnShowWin(GuildAcademyWin *this);
bool __thiscall GuildAcademyWin::Create(GuildAcademyWin *this, PgFrameWork *pkFrameWork);
std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::pair<int const ,int> *_Val);
GuildAcademyMemberVanishTask *__cdecl ISingletonTask<GuildAcademyMemberVanishTask>::Run();
void *__thiscall GuildAcademyMemberVanishTask::_vector_deleting_destructor_(GuildAcademyMemberVanishTask *this, unsigned int);
void *__thiscall GuildAcademyWin::_scalar_deleting_destructor_(GuildAcademyWin *this, unsigned int);
void __thiscall GuildAcademyJoinReqTask::SetTargetID(GuildAcademyJoinReqTask *this, char *pcName);
void __thiscall GuildAcademyJoinReqTask::OnStart(GuildAcademyJoinReqTask *this);
void __thiscall GuildAcademyJoinReqTask::DirectMessage(GuildAcademyJoinReqTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildAcademyJoinReqTask::GuildAcademyJoinReqTask(GuildAcademyJoinReqTask *this);
void __thiscall GuildAcademyJoinReqTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_ACK(GuildAcademyJoinReqTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_ACK *pkProto);
bool __thiscall GuildAcademyJoinReqTask::OnProcessNetMsg(GuildAcademyJoinReqTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void *__thiscall GuildAcademyJoinReqTask::_scalar_deleting_destructor_(GuildAcademyJoinReqTask *this, unsigned int);
void __thiscall GuildAcademyLeaveTask::DirectMessage(GuildAcademyLeaveTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildAcademyLeaveTask::OnStart(GuildAcademyLeaveTask *this);
void __thiscall GuildAcademyLeaveTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_ACK(GuildAcademyLeaveTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_ACK *pkProto);
bool __thiscall GuildAcademyLeaveTask::OnProcessNetMsg(GuildAcademyLeaveTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildAcademyMasterAppointTask::SetInfo(GuildAcademyMasterAppointTask *this, Name5 *rkTargetName);
void __thiscall GuildAcademyMasterInitializeTask::SetInfo(GuildAcademyMasterInitializeTask *this, Name5 *rkTargetName);
void __thiscall GuildAcademyMasterInitializeTask::DirectMessage(GuildAcademyMasterInitializeTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall GuildAcademyMasterAppointTask::OnStart(GuildAcademyMasterAppointTask *this);
void __thiscall GuildAcademyMasterAppointTask::DirectMessage(GuildAcademyMasterAppointTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall GuildAcademyMasterAppointTask::OnProcessNetMsg(GuildAcademyMasterAppointTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildAcademyMasterInitializeTask::OnStart(GuildAcademyMasterInitializeTask *this);
bool __thiscall GuildAcademyMasterInitializeTask::OnProcessNetMsg(GuildAcademyMasterInitializeTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
unsigned int __thiscall CClientGuildAcademyMember::GetNumOfOnlineMembers(CClientGuildAcademyMember *this);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LIST_ACK(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LIST_ACK *pkProto);
CClientGuildAcademyMember *__cdecl GuildAcademyMemberTask::GetGuildAcademyMember();
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD *pkProto);
void __thiscall GuildAcademyMemberTask::OnFinish(GuildAcademyMemberTask *this);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD *pkProto);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD *pkProto);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_VANISH_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_VANISH_CMD *pkProto);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD *pkProto);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_ACK(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_ACK *pkProto);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CMD(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CMD *pkProto);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_ACK(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_ACK *pkProto);
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_CMD(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_CMD *pkProto);
bool __thiscall GuildAcademyMemberTask::OnProcessNetMsg(GuildAcademyMemberTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildAcademyMemberTask::GuildAcademyMemberTask(GuildAcademyMemberTask *this);
void __thiscall CClientGuildAcademyMember::_CClientGuildAcademyMember(CClientGuildAcademyMember *this);
void *__thiscall GuildAcademyMemberTask::_scalar_deleting_destructor_(GuildAcademyMemberTask *this, unsigned int);
void __thiscall GuildAcademyNotifyTask::OnStart(GuildAcademyNotifyTask *this);
bool __thiscall GuildAcademyNotifyTask::OnProcessNetMsg(GuildAcademyNotifyTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildAcademyNotifyTask::SetInfo(GuildAcademyNotifyTask *this, char *pcNotice);
void __thiscall GuildAcademySelectTask::OnStart(GuildAcademySelectTask *this);
void __cdecl GuildAcademySelectTask::OnNCGuildListReq(int iIndex);
bool __cdecl GuildAcademySelectTask::ShowGuildAcademySelectWin();
GuildAcademySelectWin *__cdecl GuildAcademySelectTask::GetGuildAcademySelectWin();
void __cdecl GuildAcademySelectTask::Terminate();
int __thiscall GuildAcademySelectTask::On_Recv_NC_GUILD_ACADEMY_LIST_ACK(GuildAcademySelectTask *this, PROTO_NC_GUILD_ACADEMY_LIST_ACK *pkProto);
void __thiscall GuildAcademySelectTask::_GuildAcademySelectTask(GuildAcademySelectTask *this);
bool __thiscall GuildAcademySelectTask::OnProcessNetMsg(GuildAcademySelectTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildAcademySelectTask::GuildAcademySelectTask(GuildAcademySelectTask *this);
void __cdecl GuildAcademySelectTask::Create(IDirectMessenger *pkMsgHooker);
void *__thiscall GuildAcademySelectTask::_scalar_deleting_destructor_(GuildAcademySelectTask *this, unsigned int);
bool __thiscall CClientGuildAcademy::AmIGuildAcademyMember(CClientGuildAcademy *this);
bool __thiscall CClientGuildAcademy::IsGuildWar(CClientGuildAcademy *this);
void __thiscall GuildAcademyTask::OnStart(GuildAcademyTask *this);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_DELETE_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_DELETE_CMD *pCmd);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_DISMISS_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_DISMISS_CMD *pCmd);
void __cdecl GuildAcademyTask::CreateGuildacademyMasterEffect(Char *pkChar);
bool __thiscall CClientGuildAcademy::AmIGuildAcademyMaster(CClientGuildAcademy *this);
bool __thiscall CClientGuildAcademy::IsGuildAcademyMaster(CClientGuildAcademy *this, Name5 charID);
void __thiscall CClientGuildAcademy::ReqHistoryList(CClientGuildAcademy *this);
void __cdecl GuildAcademyTask::Terminate();
int __cdecl GuildAcademyTask::InvalidateGuildAcademyWin();
CClientGuildAcademy *__cdecl GuildAcademyTask::GetGuildAcademy();
GuildAcademyMenuWin *__cdecl GuildAcademyTask::GetGuildAcademyMenuWin();
GuildAcademyRankingWin *__cdecl GuildAcademyTask::GetGuildAcademyRankingWin();
GuildAcademyHallOfFameWin *__cdecl GuildAcademyTask::GetGuildAcademyHallOfFameWin();
GuildAcademyMoneyRewardWin *__cdecl GuildAcademyTask::GetGuildAcademyMoneyRewardWin();
GuildAcademyItemRewardWin *__cdecl GuildAcademyTask::GetGuildAcademyItemRewardWin();
GuildAcademyStorageWin *__cdecl GuildAcademyTask::GetGuildAcademyStorageWin();
GuildSelectWin *__cdecl GuildAcademyTask::GetGuildSelectWin();
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_NOTIFY_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *pCmd);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_MY_GUILD_ACADEMY_INFO_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_MY_GUILD_ACADEMY_INFO_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACADEMY_MASTER_CMD(GuildAcademyTask *this, PROTO_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACADEMY_MASTER_CMD *pkProto);
int __thiscall GuildAcademyTask::On_Recv_NC_CHAR_GUILD_ACADEMY_CMD(GuildAcademyTask *this, PROTO_NC_CHAR_GUILD_ACADEMY_CMD *pkProto);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_CMD *pkCmd);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_CMD *pkCmd);
int __thiscall GuildAcademyTask::On_Recv_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_REWARD_MONEY_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_SET_REWARD_MONEY_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_REWARD_ITEM_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_SET_REWARD_ITEM_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_CLEAR_REWARD_ITEM_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_ITEM_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_GRADUATE_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_GRADUATE_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_MASTER_TELEPORT_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_MASTER_TELEPORT_ACK *pAck);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_MASTER_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_SET_MASTER_CMD *pkCmd);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_MASTER_BY_LEAVE_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_SET_MASTER_BY_LEAVE_CMD *pkCmd);
void __thiscall CClientGuildAcademy::ClearHistoryList(CClientGuildAcademy *this);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_HISTORY_LIST_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_HISTORY_LIST_ACK *pkCmd);
bool __thiscall CClientGuildAcademy::FindEnemyGuildAcademyMember(CClientGuildAcademy *this, unsigned int GuildRegNum);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_END_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_WAR_END_CMD *pkCmd);
void __thiscall GuildAcademyTask::_GuildAcademyTask(GuildAcademyTask *this);
void __thiscall GuildAcademyTask::GuildAcademyTask(GuildAcademyTask *this);
void __cdecl GuildAcademyTask::Create(IDirectMessenger *pkMsgHooker);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_INFO_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_WAR_INFO_LIST_CMD *pkCmd);
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_START_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_WAR_START_CMD *pkCmd);
bool __thiscall GuildAcademyTask::OnProcessNetMsg(GuildAcademyTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
int __thiscall loc_6FFFFE(GuildAcademyTask *this, int iDepart, int iCommand, int iRevBytes, int pvData); // weak
GUILD_ACADEMY_CLIENT *__thiscall GUILD_ACADEMY_CLIENT::operator_(GUILD_ACADEMY_CLIENT *this, GUILD_ACADEMY_CLIENT *__that);
std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_long_unsigned_char_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_unsigned_char>>_1>>::_Buynode<std::pair<unsigned_long_const_unsigned_char>>(std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > *this, std::pair<unsigned long const ,unsigned char> *_Val);
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_long_unsigned_char_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_unsigned_char>>_1>>::insert<std::pair<unsigned_long_const_unsigned_char>>(std::_Tree<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > >,bool> *result, std::pair<unsigned long const ,unsigned char> *_Val);
void __thiscall CClientGuildAcademy::_CClientGuildAcademy(CClientGuildAcademy *this);
void __thiscall CClientGuildAcademy::CClientGuildAcademy(CClientGuildAcademy *this);
void *__thiscall GuildAcademyTask::_scalar_deleting_destructor_(GuildAcademyTask *this, unsigned int);
void __thiscall GuildAcademyMemberVanishTask::SetInfo(GuildAcademyMemberVanishTask *this, Name5 *rkTargetName);
void __thiscall GuildAcademyMemberVanishTask::OnStart(GuildAcademyMemberVanishTask *this);
void __thiscall GuildAcademyMemberVanishTask::DirectMessage(GuildAcademyMemberVanishTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
bool __thiscall GuildAcademyMemberVanishTask::OnProcessNetMsg(GuildAcademyMemberVanishTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall GuildAcademyStorage::GuildAcademyStorage(GuildAcademyStorage *this);
__int64 __cdecl GuildAcademyStorage::GetMoney();
void __cdecl GuildAcademyStorage::SetMoney(__int64 i64Money);
void __cdecl GuildAcademyStorage::Clear();
bool __cdecl GuildAcademyStorage::IsEmpty(unsigned int uiIndex);
Item *__cdecl GuildAcademyStorage::Get(unsigned int uiIndex);
void __cdecl GuildAcademyStorage::Add(Item *pkItem, unsigned int uiIndex);
void __cdecl GuildAcademyStorage::Remove(unsigned int uiIndex);
unsigned int __cdecl GuildAcademyStorage::GetEmpty();
unsigned int __cdecl GuildAcademyStorage::GetInvIdxLotIsNotMax(Item *pkItem);
bool __cdecl GuildAcademyStorage::SetContents(PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_ACK *pkProto);
bool __thiscall RaidInfo::SetItemLootingType(RaidInfo *this, char nItemGrade, char nItemLooting);
bool __thiscall RaidInfo::IsMeRaidMember(RaidInfo *this);
void __thiscall RaidInfo::SetBelongType(RaidInfo *this, int iType);
int __thiscall RaidInfo::GetBelongType(RaidInfo *this);
Char *__thiscall RaidInfo::GetCharByIndex(RaidInfo *this, unsigned int uiIdx);
bool __thiscall RaidInfo::MemberInfomUpdate(RaidInfo *this, PROTO_NC_RAID_MEMBERINFORM_CMD *p);
void __thiscall RaidInfo::ChangeRaidLooter(RaidInfo *this, Name5 kCharID);
void __thiscall RaidInfo::ChangeRaidLeader(RaidInfo *this, Name5 kCharID);
void __thiscall RaidInfo::ResetMemberInfo(RaidInfo *this, RaidMemberInfo *pkMember);
RaidMemberInfo *__thiscall RaidInfo::GetRaidMemberInfo(RaidInfo *this, Name5 kCharID);
bool __thiscall RaidInfo::MemberLoginInfo(RaidInfo *this, Name5 kCharID, unsigned int partyIdx, unsigned int slotIdx, bool IsLogin);
RaidMemberInfo *__thiscall RaidInfo::GetRaidMemberInfoByIndex(RaidInfo *this, unsigned int uiIdx);
void __thiscall RaidInfo::FindIndexByName(RaidInfo *this, char *strName, unsigned int *PatryIdx, unsigned int *slotIndex);
bool __thiscall RaidInfo::IsLeader(RaidInfo *this, Name5 kCharID);
bool __thiscall RaidInfo::IsLooter(RaidInfo *this, Name5 kCharID);
bool __thiscall RaidInfo::IsSubLeader(RaidInfo *this, Name5 kCharID);
void __thiscall RaidInfo::ChangeUserName(RaidInfo *this, Name5 *OldName, Name5 *NewName);
bool __thiscall RaidInfo::AddMember(RaidInfo *this, PROTO_NC_RAID_MEMBER_JOIN_BROAD_CMD *p);
bool __thiscall RaidInfo::Replace(RaidInfo *this, PROTO_NC_RAID_SLOT_MOVE_BROAD_CMD *p);
bool __thiscall RaidInfo::ConvertPartyToRaid(RaidInfo *this, PROTO_NC_RAID_MAKE_BROAD_CMD *p);
bool __thiscall RaidInfo::MemberInfoDetailInfo(RaidInfo *this, PROTO_NC_RAID_MEMBERCLASS_CMD *p);
void __thiscall RaidInfo::SetRaidSubLeader(RaidInfo *this, Name5 kCharID, bool bUp);
void __thiscall RaidInfo::ClearRaidInfo(RaidInfo *this);
void __thiscall RaidInfo::RaidInfo(RaidInfo *this);
bool __thiscall RaidInfo::SetMember(RaidInfo *this, PROTO_NC_RAID_MEMBER_LIST_CMD *p);
bool __thiscall RaidInfo::DeleteMember(RaidInfo *this, Name5 kID, char nPartyIdx, char nSlotIdx);
bool __thiscall RaidInfo::DeleteMember(RaidInfo *this, Name5 kID);
RaidMemberInfo *__thiscall RaidMemberInfo::operator_(RaidMemberInfo *this, RaidMemberInfo *__that);
Name5 *__cdecl std::_Move<Name5___Name5__>(Name5 *_First, Name5 *_Last, Name5 *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
RaidMemberInfo *__cdecl std::_Move<RaidMemberInfo___RaidMemberInfo__>(RaidMemberInfo *_First, RaidMemberInfo *_Last, RaidMemberInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
RaidMemberInfo *__cdecl std::_Uninit_move<RaidMemberInfo___RaidMemberInfo___std::allocator<RaidMemberInfo>_RaidMemberInfo>(RaidMemberInfo *_First, RaidMemberInfo *_Last, RaidMemberInfo *_Dest, std::allocator<RaidMemberInfo> *_Al, RaidMemberInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<Name5_std::allocator<Name5>>::reserve(std::vector<Name5,std::allocator<Name5> > *this, unsigned int _Count);
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::reserve(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, unsigned int _Count);
std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *__thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::erase(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *result, std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > _Where);
void __thiscall std::vector<Name5_std::allocator<Name5>>::_Reserve(std::vector<Name5,std::allocator<Name5> > *this, unsigned int _Count);
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::_Reserve(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, unsigned int _Count);
void *__thiscall RaidInfo::_vector_deleting_destructor_(RaidInfo *this, unsigned int);
void __thiscall std::vector<Name5_std::allocator<Name5>>::push_back(std::vector<Name5,std::allocator<Name5> > *this, Name5 *_Val);
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::push_back(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, RaidMemberInfo *_Val);
void __thiscall ExpeditionMemberAddWin::ExpeditionMemberAddWin(ExpeditionMemberAddWin *this);
void __thiscall ExpeditionMemberAddWin::_ExpeditionMemberAddWin(ExpeditionMemberAddWin *this);
void __thiscall ExpeditionMemberAddWin::SetTargetName(ExpeditionMemberAddWin *this, const char *szName);
void __thiscall ExpeditionMemberAddWin::OnClose(ExpeditionMemberAddWin *this);
void __thiscall ExpeditionMemberAddWin::OnShowWin(ExpeditionMemberAddWin *this);
void __thiscall ExpeditionWin::OnHelpLink(ExpeditionWin *this);
void __thiscall ExpeditionPartyWin::OpenPopupWin(ExpeditionPartyWin *this, unsigned int focusSlot);
void __thiscall ExpeditionLootSelectWin::ExpeditionLootSelectWin(ExpeditionLootSelectWin *this);
void __thiscall ExpeditionLootSelectWin::_ExpeditionLootSelectWin(ExpeditionLootSelectWin *this);
void __thiscall ExpeditionLootSelectWin::OnSlideBtnUp(ExpeditionLootSelectWin *this);
void __thiscall ExpeditionLootOptionWin::OnHelpLink(ExpeditionLootOptionWin *this);
void __thiscall EntryIconWin::_EntryIconWin(EntryIconWin *this);
void __thiscall EntryIconWin::InitLeaderLooterMark(EntryIconWin *this);
void __thiscall ExpeditionMemberAddWin::OnMemberAddOk(ExpeditionMemberAddWin *this);
void __thiscall ExpeditionMemberAddWin::OnMemberAddCancel(ExpeditionMemberAddWin *this);
void __thiscall ExpeditionMemberAddWin::OnCommand(ExpeditionMemberAddWin *this, unsigned int wParam, int lParam);
void __thiscall ExpeditionMemberAddWin::OnEditEnd(ExpeditionMemberAddWin *this, unsigned int wParam, int lParam);
void __thiscall ExpeditionWin::_ExpeditionWin(ExpeditionWin *this);
void __thiscall ExpeditionWin::ClickReset(ExpeditionWin *this);
void __thiscall ExpeditionWin::DirectMessage(ExpeditionWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ExpeditionPartyWin::_ExpeditionPartyWin(ExpeditionPartyWin *this);
void __thiscall ExpeditionPartyWin::DirectMessage(ExpeditionPartyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ExpeditionPartyWin::AlignBuf(ExpeditionPartyWin *this, int row, int column);
void __thiscall ExpeditionPartyWin::SetOption(ExpeditionPartyWin *this, unsigned int uiIndex, unsigned int uiOpt);
void __thiscall ExpeditionLootSelectWin::OnSlideBar(ExpeditionLootSelectWin *this);
void __thiscall ExpeditionLootOptionWin::ExpeditionLootOptionWin(ExpeditionLootOptionWin *this);
void __thiscall ExpeditionLootOptionWin::_ExpeditionLootOptionWin(ExpeditionLootOptionWin *this);
void __thiscall ExpeditionLootOptionWin::DirectMessage(ExpeditionLootOptionWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall ExpeditionLootOptionWin::SetLooter(ExpeditionLootOptionWin *this, const char *name);
void __thiscall EntryIconWin::EntryIconWin(EntryIconWin *this);
void __thiscall EntryIconWin::OnCommand(EntryIconWin *this, unsigned int wParam, int lParam);
void __thiscall EntryIconWin::ShowLeaderLooterMark(EntryIconWin *this);
bool __thiscall ExpeditionMemberAddWin::Create(ExpeditionMemberAddWin *this, PgFrameWork *pkFrameWork);
void __thiscall ExpeditionWin::ExpeditionWin(ExpeditionWin *this);
void __thiscall ExpeditionWin::OnCommand(ExpeditionWin *this, unsigned int wParam, int lParam);
void __thiscall ExpeditionWin::SetLootingType(ExpeditionWin *this, char nLootingType);
void __thiscall ExpeditionWin::SetItemGrade(ExpeditionWin *this, char nItemGrade);
void __thiscall ExpeditionPartyWin::ExpeditionPartyWin(ExpeditionPartyWin *this);
bool __thiscall ExpeditionPartyWin::Create(ExpeditionPartyWin *this, PgFrameWork *pkFrameWork, unsigned int index);
void __thiscall ExpeditionPartyWin::SetBuffUI(ExpeditionPartyWin *this, Char *pkMember, StateType type, int *AbstateNums, int index);
void __thiscall ExpeditionPartyWin::OnCommand(ExpeditionPartyWin *this, unsigned int wParam, int lParam);
bool __thiscall ExpeditionLootOptionWin::Create(ExpeditionLootOptionWin *this, PgFrameWork *pkFrameWork);
void __thiscall ExpeditionLootOptionWin::OnCommand(ExpeditionLootOptionWin *this, unsigned int wParam, int lParam);
void __thiscall ExpeditionLootOptionWin::SetLootingType(ExpeditionLootOptionWin *this, char nItemGrade, char nLootingType);
bool __thiscall EntryIconWin::Create(EntryIconWin *this, NiAVObject *pkObject, int group, int index, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg);
void __thiscall EntryIconWin::UpdateMeWin(EntryIconWin *this, float fCurTime);
int __thiscall loc_708E1A(EntryIconWin *this, float fCurTime); // weak
int __thiscall loc_708EA5(EntryIconWin *this, float fCurTime); // weak
void __thiscall ExpeditionMemberAddWin::UpdateMeWin(ExpeditionMemberAddWin *this, float fCurTime);
EntryIconWin *__cdecl EntryIconWin::CreateWin(NiAVObject *pkObject, int group, int index, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg);
ExpeditionMemberAddWin *__cdecl ExpeditionMemberAddWin::CreateWin(PgFrameWork *pkFrameWork);
ExpeditionWin *__cdecl ExpeditionWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall ExpeditionWin::Create(ExpeditionWin *this, PgFrameWork *pkFrameWork);
ExpeditionPartyWin *__cdecl ExpeditionPartyWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int index);
ExpeditionLootSelectWin *__cdecl ExpeditionLootSelectWin::CreateWin(PgFrameWork *pkFrameWork);
ExpeditionLootOptionWin *__cdecl ExpeditionLootOptionWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall ExpeditionLootSelectWin::OnCommand(ExpeditionLootSelectWin *this, unsigned int wParam, int lParam);
void __thiscall ExpeditionWin::UpdateMeWin(ExpeditionWin *this, float fCurTime);
void __thiscall ExpeditionPartyWin::UpdateMeWin(ExpeditionPartyWin *this, float fCurTime);
void __thiscall ExpeditionLootSelectWin::UpdateMeWin(ExpeditionLootSelectWin *this, float fCurTime);
bool __thiscall ExpeditionLootSelectWin::Create(ExpeditionLootSelectWin *this, PgFrameWork *pkFrameWork);
void *__thiscall ExpeditionMemberAddWin::_vector_deleting_destructor_(ExpeditionMemberAddWin *this, unsigned int);
void *__thiscall ExpeditionLootSelectWin::_vector_deleting_destructor_(ExpeditionLootSelectWin *this, unsigned int);
void *__thiscall EntryIconWin::_scalar_deleting_destructor_(EntryIconWin *this, unsigned int);
void *__thiscall ExpeditionWin::_scalar_deleting_destructor_(ExpeditionWin *this, unsigned int);
void *__thiscall ExpeditionPartyWin::_vector_deleting_destructor_(ExpeditionPartyWin *this, unsigned int);
void *__thiscall ExpeditionLootOptionWin::_vector_deleting_destructor_(ExpeditionLootOptionWin *this, unsigned int);
void __cdecl ConvertCommaNumber(__int64 i64Val, char *pNumberString);
void __thiscall CoinEditWin::CoinEditWin(CoinEditWin *this);
void __thiscall CoinEditWin::_CoinEditWin(CoinEditWin *this);
void __thiscall CoinEditWin::InputNumberDone(CoinEditWin *this);
void __thiscall CoinExchangeWin::CoinExchangeWin(CoinExchangeWin *this);
void __thiscall CoinExchangeWin::_CoinExchangeWin(CoinExchangeWin *this);
void __thiscall CoinExchangeWin::SetEditFocus(CoinExchangeWin *this, unsigned int uiFocus);
void __thiscall CoinExchangeWin::SetExchangeableCoin(CoinExchangeWin *this, __int64 coin);
void __thiscall GambleWin::GambleWin(GambleWin *this);
void __thiscall GambleWin::_GambleWin(GambleWin *this);
void __thiscall GambleMiniWin::GambleMiniWin(GambleMiniWin *this);
void __thiscall GambleMiniWin::_GambleMiniWin(GambleMiniWin *this);
void __thiscall GambleMiniWin::OnCommand(GambleMiniWin *this, unsigned int wParam, int lParam);
void __thiscall GambleHouseCardWin::GambleHouseCardWin(GambleHouseCardWin *this);
void __thiscall GambleHouseCardWin::_GambleHouseCardWin(GambleHouseCardWin *this);
void __thiscall GambleHouseCardWin::OnCommand(GambleHouseCardWin *this, unsigned int wParam, int lParam);
void __thiscall CoinEditWin::SetFocus(CoinEditWin *this);
void __thiscall CoinExchangeWin::OnShowWin(CoinExchangeWin *this);
void __thiscall CoinExchangeWin::OnClose(CoinExchangeWin *this);
void __thiscall GambleWin::OnCommand(GambleWin *this, unsigned int wParam, int lParam);
void __thiscall GambleWin::ChangeCoin(GambleWin *this);
void __thiscall GambleHouseCardWin::ChangeCoin(GambleHouseCardWin *this);
void __thiscall CoinExchangeWin::OnEditEnd(CoinExchangeWin *this, unsigned int wParam, int lParam);
void __thiscall CoinExchangeWin::OnExchange(CoinExchangeWin *this);
void __thiscall CoinExchangeWin::OnTAB1(CoinExchangeWin *this);
void __thiscall CoinExchangeWin::OnTAB2(CoinExchangeWin *this);
void __thiscall CoinExchangeWin::UpdateMeWin(CoinExchangeWin *this, float fCurTime);
bool __thiscall GambleWin::Create(GambleWin *this, PgFrameWork *pkFrameWork);
void __thiscall GambleWin::OnShowWin(GambleWin *this);
bool __thiscall GambleMiniWin::Create(GambleMiniWin *this, PgFrameWork *pkFrameWork);
bool __thiscall GambleHouseCardWin::Create(GambleHouseCardWin *this, PgFrameWork *pkFrameWork);
void __thiscall GambleHouseCardWin::OnShowWin(GambleHouseCardWin *this);
bool __thiscall CoinEditWin::Create(CoinEditWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick);
void __thiscall CoinExchangeWin::OnCommand(CoinExchangeWin *this, unsigned int wParam, int lParam);
CoinEditWin *__cdecl CoinEditWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick);
CoinExchangeWin *__cdecl CoinExchangeWin::CreateWin(PgFrameWork *pkFrameWork);
bool __thiscall CoinExchangeWin::Create(CoinExchangeWin *this, PgFrameWork *pkFrameWork);
GambleWin *__cdecl GambleWin::CreateWin(PgFrameWork *pkFrameWork);
GambleMiniWin *__cdecl GambleMiniWin::CreateWin(PgFrameWork *pkFrameWork);
GambleHouseCardWin *__cdecl GambleHouseCardWin::CreateWin(PgFrameWork *pkFrameWork);
void *__thiscall CoinEditWin::_scalar_deleting_destructor_(CoinEditWin *this, unsigned int);
void *__thiscall CoinExchangeWin::_vector_deleting_destructor_(CoinExchangeWin *this, unsigned int);
void *__thiscall GambleWin::_scalar_deleting_destructor_(GambleWin *this, unsigned int);
void *__thiscall GambleMiniWin::_scalar_deleting_destructor_(GambleMiniWin *this, unsigned int);
void *__thiscall GambleHouseCardWin::_vector_deleting_destructor_(GambleHouseCardWin *this, unsigned int);
unsigned int __cdecl ITableBase<GBHouse_GBHouseTab>::GetTotal();
GBHouse *__cdecl GBHouseTab::GetByIndex(unsigned int uiIndex);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_EXCHANGEMACHINE_UI_OPEN_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_EXCHANGEMACHINE_UI_OPEN_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_VIPCARD_UI_OPEN_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_VIPCARD_UI_OPEN_ACK *pkProto);
void __thiscall MHDiceGameTask::NcGambleGambleHouseExitReq(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::NcGambleCoinVipcardUIopenReq(MHDiceGameTask *this, char uSlotNum);
void __thiscall MHDiceGameTask::NcGambleCoinBuyReq(MHDiceGameTask *this, unsigned __int64 Coin);
void __thiscall MHDiceGameTask::NcGambleCoinSellReq(MHDiceGameTask *this, unsigned __int64 Coin);
void __thiscall MHDiceGameTask::NcGambleTypeAndWhereStandReq(MHDiceGameTask *this, unsigned __int16 nNpcHandle);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_ACK *pkProto);
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiAllRankReq(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiCurrRankReq(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_ACK *pkProto);
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameLargeAmountReq(MHDiceGameTask *this, unsigned int Money);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_GAMBLEHOUSE_EXIT_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_GAMBLEHOUSE_EXIT_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_CHANGE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_CHANGE_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_EXCHANGECOIN_CHANGE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_EXCHANGECOIN_CHANGE_CMD *pkProto);
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameJoinReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_TIMER_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_TIMER_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_CHAR_CLIENT_COININFO_CMD(MHDiceGameTask *this, PROTO_NC_CHAR_COININFO_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_ENTER_PLAYER_DIRECT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_ENTER_PLAYER_DIRECT_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_BUY_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_BUY_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_SELL_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_SELL_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_TYPE_AND_WHERE_STAND_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_TYPE_AND_WHERE_STAND_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_USE_COINITEM_MESSAGE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_USE_COINITEM_MESSAGE_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_BETTING_INFO_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_BETTING_INFO_CMD *pkProto);
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameLeaveReq(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_CMD *pkProto);
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameBettingReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_REQ *pkProto);
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameBettingCancelReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_REQ *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BET_START_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BET_START_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK *pkProto);
void __thiscall mhDiceRankWin::OnTAB1(mhDiceRankWin *this);
void __thiscall mhDiceRankWin::OnTAB2(mhDiceRankWin *this);
void __thiscall mhDiceRankWin::UpdateAllRankList(mhDiceRankWin *this, PROTO_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK *pkProto);
void __thiscall mhDiceRankWin::UpdateCurRankList(mhDiceRankWin *this, PROTO_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK *pkProto);
void __thiscall BettingBut::_BettingBut(BettingBut *this);
void __thiscall BettingBut::SwitchSpr(BettingBut *this, float fDelta);
void __thiscall ToggleBut::ToggleBut(ToggleBut *this);
void __thiscall ToggleBut::_ToggleBut(ToggleBut *this);
void __thiscall ToggleBut::ReleaseMeInput(ToggleBut *this);
void __thiscall ToggleBut::SetMark(ToggleBut *this, bool bMark);
void __thiscall MiniHouseDiceGameWin::SetMoneyWin(MiniHouseDiceGameWin *this, unsigned int nPlayerMoney);
void __thiscall mhMinimizeDiceGameWin::mhMinimizeDiceGameWin(mhMinimizeDiceGameWin *this);
void __thiscall mhMinimizeDiceGameWin::_mhMinimizeDiceGameWin(mhMinimizeDiceGameWin *this);
void __thiscall mhDiceHelpWin::mhDiceHelpWin(mhDiceHelpWin *this);
void __thiscall mhDiceHelpWin::_mhDiceHelpWin(mhDiceHelpWin *this);
void __thiscall mhDiceHelpWin::UpdateMeWin(mhDiceHelpWin *this, float fCurTime);
void __thiscall mhDiceRankWin::DirectMessage(mhDiceRankWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall mhDiceRateSheetWin::mhDiceRateSheetWin(mhDiceRateSheetWin *this);
void __thiscall mhDiceRateSheetWin::_mhDiceRateSheetWin(mhDiceRateSheetWin *this);
void __thiscall GambleDiceGameWin::SetMoneyWin(GambleDiceGameWin *this, __int64 nPlayerMoney);
void __thiscall BettingBut::BettingBut(BettingBut *this);
void __thiscall ToggleBut::ProcessMeInput(ToggleBut *this, bool *bHit);
void __thiscall ToggleBut::SetButShow(ToggleBut *this, PgWinBut::ButShow eShow);
void __thiscall MiniHouseDiceGameWin::OnBettingButton(MiniHouseDiceGameWin *this, unsigned int uiMsgCmd, bool IsLeftBtn);
void __thiscall MiniHouseDiceGameWin::OnBettingAmout(MiniHouseDiceGameWin *this, unsigned int uiButton, BETTING_LEVEL_MONEY amount);
void __thiscall MiniHouseDiceGameWin::OnMinimalize(MiniHouseDiceGameWin *this);
void __thiscall MiniHouseDiceGameWin::OnClickRanking(MiniHouseDiceGameWin *this);
void __thiscall MiniHouseDiceGameWin::OnVisibleChip(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsShow, int chipLevel, bool bPlaySound);
void __thiscall MiniHouseDiceGameWin::TurnOnLight(MiniHouseDiceGameWin *this, bool bIsAll, bool bOnlyNext, bool bTwinkle);
void __thiscall MiniHouseDiceGameWin::GameStartEff(MiniHouseDiceGameWin *this);
void __thiscall MiniHouseDiceGameWin::EnableBetLevelBtn(MiniHouseDiceGameWin *this, unsigned int money);
void __thiscall mhMinimizeDiceGameWin::OnCommand(mhMinimizeDiceGameWin *this, unsigned int wParam, int lParam);
void __thiscall mhMinimizeDiceGameWin::UpdateMeWin(mhMinimizeDiceGameWin *this, float fCurTime);
void __thiscall mhDiceHelpWin::CloseWin(mhDiceHelpWin *this);
void __thiscall mhDiceHelpWin::OnSlideBar(mhDiceHelpWin *this);
void __thiscall MHDiceRewardMoneyWin::MHDiceRewardMoneyWin(MHDiceRewardMoneyWin *this);
void __thiscall MHDiceRewardMoneyWin::_MHDiceRewardMoneyWin(MHDiceRewardMoneyWin *this);
void __thiscall MHDiceRewardMoneyWin::OnCmdOk(MHDiceRewardMoneyWin *this);
void __thiscall MHDiceRewardMoneyWin::SetTitle1(MHDiceRewardMoneyWin *this, char *pcTitle);
void __thiscall MHDiceRewardMoneyWin::SetTitle2(MHDiceRewardMoneyWin *this, char *pcTitle);
void __thiscall mhDiceRateSheetWin::OnCommand(mhDiceRateSheetWin *this, unsigned int wParam, int lParam);
int __thiscall MHDiceAniActor::SetAct(MHDiceAniActor *this, MHDiceAniActor::DICE_ANIIDX AniIndex, NiActorManager *ActorMgr);
int __thiscall MHDiceAniActor::SetAction(MHDiceAniActor *this, MHDiceAniActor::DICE_ANIIDX AniIndex, NiActorManager *ActorMgr, float fTime);
int __thiscall MHDiceAniActor::update(MHDiceAniActor *this, float fTime, NiActorManager *ActorMgr);
void __thiscall MHChipEffect::Start(MHChipEffect *this, NiNode *pkParent, NiQuaternion Qut, NiPoint3 pos);
bool __thiscall MHChipEffect::Update(MHChipEffect *this, float fTime);
void __thiscall GambleDiceGameWin::OnBettingButton(GambleDiceGameWin *this, unsigned int uiMsgCmd, bool IsLeftBtn);
void __thiscall GambleDiceGameWin::OnBettingAmount(GambleDiceGameWin *this, unsigned int uiButton, BETTING_LEVEL_COIN amount);
void __thiscall GambleDiceGameWin::OnMinimalize(GambleDiceGameWin *this);
void __thiscall GambleDiceGameWin::OnClickRanking(GambleDiceGameWin *this);
void __thiscall GambleDiceGameWin::ChipAnimation(GambleDiceGameWin *this, DICE_TAISAI_BETTING index, BETTING_LEVEL_MONEY nLevel, int nPos);
int __stdcall loc_71357B(int index, int nLevel, int nPos); // weak
void __thiscall GambleDiceGameWin::OnVisibleChip(GambleDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsShow, int chipLevel, bool bPlaySound);
void __thiscall GambleDiceGameWin::TurnOnLight(GambleDiceGameWin *this, bool bIsAll, bool bOnlyNext, bool bTwinkle);
void __thiscall GambleDiceGameWin::GameStartEff(GambleDiceGameWin *this);
void __thiscall GambleDiceGameWin::EnableBetLevelBtn(GambleDiceGameWin *this, unsigned int money);
bool __thiscall BettingBut::Create(BettingBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle);
void __thiscall BettingBut::DoAction(BettingBut *this);
void __thiscall BettingBut::ProcessMeInput(BettingBut *this, bool *bHit);
void __thiscall BettingBut::UpdateMeWin(BettingBut *this, float fCurTime);
void __thiscall BettingBut::SetButtonSpr(BettingBut *this, unsigned int index);
void __thiscall BettingBut::SetBettingState(BettingBut *this, BET_STATE state);
bool __thiscall ToggleBut::Create(ToggleBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle);
void __thiscall MiniHouseDiceGameWin::OnCommand(MiniHouseDiceGameWin *this, unsigned int wParam, int lParam);
void __thiscall MiniHouseDiceGameWin::AllReset(MiniHouseDiceGameWin *this);
void __thiscall MiniHouseDiceGameWin::ChipAnimation(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING index, BETTING_LEVEL_MONEY nLevel, int nPos);
int __stdcall loc_71456B(int index, int nLevel, int nPos); // weak
void __thiscall MiniHouseDiceGameWin::ShowResult(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsSuccess, bool IsNonBetting);
void __thiscall MiniHouseDiceGameWin::UpdateTimeText(MiniHouseDiceGameWin *this, float fRemainTime, bool IsShow);
void __thiscall MiniHouseDiceGameWin::DiceAnimationStart(MiniHouseDiceGameWin *this, unsigned int *AniCode);
void __thiscall MiniHouseDiceGameWin::SetMarkButton(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING nPos, BET_STATE bState, bool IsMark);
bool __thiscall mhMinimizeDiceGameWin::Create(mhMinimizeDiceGameWin *this, PgFrameWork *pkFrameWork);
void __thiscall mhDiceHelpWin::OnCommand(mhDiceHelpWin *this, unsigned int wParam, int lParam);
void __thiscall mhDiceRankWin::UpdateMedal(mhDiceRankWin *this);
void __thiscall MHDiceRewardMoneyWin::OnCommand(MHDiceRewardMoneyWin *this, unsigned int wParam, int lParam);
void __thiscall MHDiceRewardMoneyWin::Open(MHDiceRewardMoneyWin *this, unsigned int uiOkMsg, unsigned int uiCancelMsg, char *pcText1, char *pcText2);
bool __thiscall mhDiceRateSheetWin::Create(mhDiceRateSheetWin *this, PgFrameWork *pkFrameWork);
void __thiscall GambleDiceGameWin::OnCommand(GambleDiceGameWin *this, unsigned int wParam, int lParam);
void __thiscall GambleDiceGameWin::AllReset(GambleDiceGameWin *this);
void __thiscall GambleDiceGameWin::ShowResult(GambleDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsSuccess, bool IsNonBetting);
void __thiscall GambleDiceGameWin::UpdateTimeText(GambleDiceGameWin *this, float fRemainTime, bool IsShow);
void __thiscall GambleDiceGameWin::DiceAnimationStart(GambleDiceGameWin *this, unsigned int *AniCode);
void __thiscall GambleDiceGameWin::SetMarkButton(GambleDiceGameWin *this, DICE_TAISAI_BETTING nPos, BET_STATE bState, bool IsMark);
void __thiscall MiniHouseDiceGameWin::UpdateMeWin(MiniHouseDiceGameWin *this, float fCurTime);
void __thiscall MiniHouseDiceGameWin::UpdateHistory(MiniHouseDiceGameWin *this, char *arrayNum, bool IsClear);
void __thiscall mhDiceRankWin::UpdateMeWin(mhDiceRankWin *this, float fCurTime);
void __thiscall MHDiceRewardMoneyWin::UpdateMeWin(MHDiceRewardMoneyWin *this, float fCurTime);
void __thiscall GambleDiceGameWin::UpdateMeWin(GambleDiceGameWin *this, float fCurTime);
void __thiscall GambleDiceGameWin::UpdateHistory(GambleDiceGameWin *this, char *arrayNum, bool IsClear);
void __thiscall MiniHouseDiceGameWin::MiniHouseDiceGameWin(MiniHouseDiceGameWin *this);
void __thiscall MiniHouseDiceGameWin::_MiniHouseDiceGameWin(MiniHouseDiceGameWin *this);
void __thiscall GambleDiceGameWin::GambleDiceGameWin(GambleDiceGameWin *this);
void __thiscall GambleDiceGameWin::_GambleDiceGameWin(GambleDiceGameWin *this);
BettingBut *__cdecl BettingBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle);
ToggleBut *__cdecl ToggleBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle);
MiniHouseDiceGameWin *__cdecl MiniHouseDiceGameWin::CreateWin(PgFrameWork *pkFrameWork);
BettingBut *__thiscall MiniHouseDiceGameWin::MakeButton(MiniHouseDiceGameWin *this, NiAVObject *pkObject, const char *pcTriShapeName, int *iLeft, int *iTop, unsigned int uiCmdMsg, NiSourceTexture *pkTexture);
mhMinimizeDiceGameWin *__cdecl mhMinimizeDiceGameWin::CreateWin(PgFrameWork *pkFrameWork);
mhDiceHelpWin *__cdecl mhDiceHelpWin::CreateWin(PgFrameWork *pkFrameWork);
MHDiceRewardMoneyWin *__cdecl MHDiceRewardMoneyWin::CreateWin(PgFrameWork *pkFrameWork, int IsRewardWin);
mhDiceRateSheetWin *__cdecl mhDiceRateSheetWin::CreateWin(PgFrameWork *pkFrameWork);
GambleDiceGameWin *__cdecl GambleDiceGameWin::CreateWin(PgFrameWork *pkFrameWork);
BettingBut *__thiscall GambleDiceGameWin::MakeButton(GambleDiceGameWin *this, NiAVObject *pkObject, const char *pcTriShapeName, int *iLeft, int *iTop, unsigned int uiCmdMsg, NiSourceTexture *pkTexture);
bool __thiscall MHDiceRewardMoneyWin::Create(MHDiceRewardMoneyWin *this, PgFrameWork *pkFrameWork, int IsRewardWin);
bool __thiscall MiniHouseDiceGameWin::Create(MiniHouseDiceGameWin *this, PgFrameWork *pkFrameWork);
bool __thiscall GambleDiceGameWin::Create(GambleDiceGameWin *this, PgFrameWork *pkFrameWork);
void __thiscall mhDiceRankWin::mhDiceRankWin(mhDiceRankWin *this);
void __thiscall mhDiceRankWin::_mhDiceRankWin(mhDiceRankWin *this);
mhDiceRankWin *__cdecl mhDiceRankWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall mhDiceRankWin::UpdateList(mhDiceRankWin *this, std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > RankList);
void __thiscall mhDiceRankWin::UpdateViewList(mhDiceRankWin *this);
void __thiscall mhDiceRankWin::OnCommand(mhDiceRankWin *this, unsigned int wParam, int lParam);
bool __thiscall mhDiceHelpWin::Create(mhDiceHelpWin *this, PgFrameWork *pkFrameWork);
bool __thiscall mhDiceRankWin::Create(mhDiceRankWin *this, PgFrameWork *pkFrameWork);
void __thiscall MHDiceAniActor::MHDiceAniActor(MHDiceAniActor *this);
void __thiscall MHChipEffect::_MHChipEffect(MHChipEffect *this);
void __thiscall mhDiceRankWin::OnSlideBar(mhDiceRankWin *this);
void *__thiscall BettingBut::_vector_deleting_destructor_(BettingBut *this, unsigned int);
void *__thiscall ToggleBut::_scalar_deleting_destructor_(ToggleBut *this, unsigned int);
void *__thiscall mhMinimizeDiceGameWin::_vector_deleting_destructor_(mhMinimizeDiceGameWin *this, unsigned int);
void *__thiscall mhDiceHelpWin::_vector_deleting_destructor_(mhDiceHelpWin *this, unsigned int);
void *__thiscall mhDiceRateSheetWin::_vector_deleting_destructor_(mhDiceRateSheetWin *this, unsigned int);
void __thiscall BettingBut::DoRAction(BettingBut *this);
void __thiscall ToggleBut::DoAction(ToggleBut *this);
void __thiscall BettingBut::SetButShow(BettingBut *this, PgWinBut::ButShow eShow);
void *__thiscall MHDiceRewardMoneyWin::_vector_deleting_destructor_(MHDiceRewardMoneyWin *this, unsigned int);
void *__thiscall MiniHouseDiceGameWin::_vector_deleting_destructor_(MiniHouseDiceGameWin *this, unsigned int);
void *__thiscall GambleDiceGameWin::_scalar_deleting_destructor_(GambleDiceGameWin *this, unsigned int);
DiceRankInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo_std::allocator<DiceRankInfo>>>_DiceRankInfo___std::allocator<DiceRankInfo>>(std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > _Last, DiceRankInfo *_Dest, std::allocator<DiceRankInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, const char *_Right);
void *__thiscall mhDiceRankWin::_vector_deleting_destructor_(mhDiceRankWin *this, unsigned int);
void __thiscall MHDiceGameTask::NcGambleSlotmachineGameLeaveReq(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::NcGambleSlotmachineStartReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_START_REQ *pkProto);
void __thiscall MHDiceGameTask::NcGambleSlotmachineStopbuttonReq(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::NcGambleSlotmachineWheelstopReq(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_START_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_START_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_STOPBUTTON_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_STOPBUTTON_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_STAND_UP_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_STAND_UP_CMD *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD *pkProto);
void __thiscall MHDiceGameTask::NcGambleSlotmachineJackpotRankReq(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::NcGambleSlotmachineWinRankReq(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::UpdateSlotMachineGame(MHDiceGameTask *this, float fTime);
void __thiscall MHDiceGameTask::OpenSlotMachineWin(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::OpenSlotHelpWin(MHDiceGameTask *this);
void __thiscall MHDiceGameTask::NcGambleSlotmachineGameJoinReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_REQ *pkProto);
int __stdcall loc_72444D(int pkProto); // weak
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_PLAYERACT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_PLAYERACT_CMD *pkProto);
void __thiscall MHDiceGameTask::AddMsg(MHDiceGameTask *this, char *pcText, bool Sysmsg, bool AnnounceMsg);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_SOMEONE_GET_JACKPOT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_SOMEONE_GET_JACKPOT_CMD *pkProto);
void __thiscall MHDiceGameTask::ShutDownSlotMachine(MHDiceGameTask *this);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_GAME_LEAVE_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_GAME_LEAVE_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK *pkProto);
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK *pkProto);
void __thiscall GBSlotRankWin::OnTAB1(GBSlotRankWin *this);
void __thiscall GBSlotRankWin::OnTAB2(GBSlotRankWin *this);
DiceRankInfo *__thiscall std::allocator<DiceRankInfo>::allocate(std::allocator<DiceRankInfo> *this, unsigned int _Count);
SlotJackpotRankInfo *__cdecl std::_Move<SlotJackpotRankInfo___SlotJackpotRankInfo__>(SlotJackpotRankInfo *_First, SlotJackpotRankInfo *_Last, SlotJackpotRankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
DiceRankInfo *__cdecl std::_Uninit_move<SlotJackpotRankInfo___SlotJackpotRankInfo___std::allocator<SlotJackpotRankInfo>_SlotJackpotRankInfo>(DiceRankInfo *_First, DiceRankInfo *_Last, DiceRankInfo *_Dest, std::allocator<DiceRankInfo> *_Al, DiceRankInfo *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::reserve(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, unsigned int _Count);
void __thiscall std::vector<DiceRankInfo_std::allocator<DiceRankInfo>>::_Reserve(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, unsigned int _Count);
void __thiscall std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, DiceRankInfo *_Val);
void __thiscall GBSlotRankWin::UpdateJackpotRankList(GBSlotRankWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK *pkProto);
void __thiscall GBSlotRankWin::UpdateWinRankList(GBSlotRankWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK *pkProto);
bool __thiscall CEaseInOutInterpolation::Setup(CEaseInOutInterpolation *this, float from, float to, float time);
bool __thiscall CEaseInOutInterpolation::Interpolate(CEaseInOutInterpolation *this, float deltaTime);
bool __thiscall CEaseInOutInterpolation::SetupWithDist(CEaseInOutInterpolation *this, float dist, float time, float speed);
bool __thiscall CEaseInOutInterpolation::InterpoateWithDist(CEaseInOutInterpolation *this, float deltaTime);
void __thiscall SlotEntry::setMaxSpeed(SlotEntry *this, float speed);
void __thiscall SlotEntry::roll(SlotEntry *this);
void __thiscall SlotMachineWin::Spin(SlotMachineWin *this, bool bSucceed);
void __thiscall SlotMachineWin::Stop(SlotMachineWin *this, int *result);
void __thiscall SlotMachineWin::ResetCoin(SlotMachineWin *this);
void __thiscall SlotMachineWin::UpdateCoin(SlotMachineWin *this, __int64 *from, __int64 *to, SlotMachineWin::COIN_TYPE type, bool immediately);
bool __thiscall SlotMachineWin::canExit(SlotMachineWin *this);
void __thiscall SlotMachineWin::SetCoin(SlotMachineWin *this, __int64 nCoin);
void __thiscall SlotMachineWin::SetJackPotCoin(SlotMachineWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD *pkProto);
void __thiscall SlotMachineWin::WheelStop(SlotMachineWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK *pkProto);
void __thiscall GBSlotRankWin::DirectMessage(GBSlotRankWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall MiniSlotMachineWin::MiniSlotMachineWin(MiniSlotMachineWin *this);
void __thiscall MiniSlotMachineWin::_MiniSlotMachineWin(MiniSlotMachineWin *this);
void __thiscall GBSlotHelpWin::GBSlotHelpWin(GBSlotHelpWin *this);
void __thiscall GBSlotHelpWin::_GBSlotHelpWin(GBSlotHelpWin *this);
void __thiscall GBSlotHelpWin::UpdateMeWin(GBSlotHelpWin *this, float fCurTime);
void __thiscall SlotEntry::setAlpha(SlotEntry *this, float fAlpha);
void __thiscall SlotMachineWin::SlotMachineWin(SlotMachineWin *this);
bool __thiscall SlotMachineWin::SendBettingInfo(SlotMachineWin *this);
void __thiscall GBSlotRankWin::UpdateMeWin(GBSlotRankWin *this, float fCurTime);
void __thiscall MiniSlotMachineWin::OnCommand(MiniSlotMachineWin *this, unsigned int wParam, int lParam);
void __thiscall MiniSlotMachineWin::UpdateMeWin(MiniSlotMachineWin *this, float fCurTime);
void __thiscall GBSlotHelpWin::CloseWin(GBSlotHelpWin *this);
void __thiscall GBSlotHelpWin::OnSlideBar(GBSlotHelpWin *this);
void __thiscall SlotEntry::reset(SlotEntry *this);
void __thiscall SlotEntry::setup(SlotEntry *this, NiAVObject *pkNode, char *pcTag, PgWin *pkParent, float speed, float time);
void __thiscall SlotEntry::update(SlotEntry *this, float fTime);
void __thiscall SlotEntry::stop(SlotEntry *this, int num);
void __thiscall SlotMachineWin::_SlotMachineWin(SlotMachineWin *this);
bool __thiscall SlotMachineWin::Create(SlotMachineWin *this, PgFrameWork *pkFrameWork);
void __thiscall SlotMachineWin::Betting(SlotMachineWin *this, SlotMachineWin::BETTING_TYPE bet);
void __thiscall SlotMachineWin::InitMachine(SlotMachineWin *this);
void __thiscall SlotMachineWin::UpdateResult(SlotMachineWin *this, float fCurTime);
void __thiscall SlotMachineWin::ProcessMeInput(SlotMachineWin *this, bool *bHit);
bool __thiscall MiniSlotMachineWin::Create(MiniSlotMachineWin *this, PgFrameWork *pkFrameWork);
void __thiscall GBSlotHelpWin::OnCommand(GBSlotHelpWin *this, unsigned int wParam, int lParam);
void __thiscall SlotMachineWin::OnCommand(SlotMachineWin *this, unsigned int wParam, int lParam);
void __thiscall SlotMachineWin::UpdateMeWin(SlotMachineWin *this, float fCurTime);
SlotMachineWin *__cdecl SlotMachineWin::CreateWin(PgFrameWork *pkFrameWork);
MiniSlotMachineWin *__cdecl MiniSlotMachineWin::CreateWin(PgFrameWork *pkFrameWork);
GBSlotHelpWin *__cdecl GBSlotHelpWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GBSlotRankWin::GBSlotRankWin(GBSlotRankWin *this);
void __thiscall GBSlotRankWin::_GBSlotRankWin(GBSlotRankWin *this);
GBSlotRankWin *__cdecl GBSlotRankWin::CreateWin(PgFrameWork *pkFrameWork);
void __thiscall GBSlotRankWin::UpdateList(GBSlotRankWin *this, std::vector<SlotJackpotRankInfo,std::allocator<SlotJackpotRankInfo> > RankList);
void __thiscall GBSlotRankWin::UpdateViewList(GBSlotRankWin *this);
void __thiscall GBSlotRankWin::OnCommand(GBSlotRankWin *this, unsigned int wParam, int lParam);
bool __thiscall GBSlotRankWin::Create(GBSlotRankWin *this, PgFrameWork *pkFrameWork);
bool __thiscall GBSlotHelpWin::Create(GBSlotHelpWin *this, PgFrameWork *pkFrameWork);
void __thiscall GBSlotRankWin::OnSlideBar(GBSlotRankWin *this);
void __thiscall SlotEntry::SlotEntry(SlotEntry *this);
void __thiscall SlotEntry::_SlotEntry(SlotEntry *this);
void *__thiscall MiniSlotMachineWin::_vector_deleting_destructor_(MiniSlotMachineWin *this, unsigned int);
void *__thiscall GBSlotHelpWin::_vector_deleting_destructor_(GBSlotHelpWin *this, unsigned int);
void *__thiscall SlotMachineWin::_vector_deleting_destructor_(SlotMachineWin *this, unsigned int);
void __thiscall std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *_Right);
void *__thiscall GBSlotRankWin::_vector_deleting_destructor_(GBSlotRankWin *this, unsigned int);
bool __thiscall MoverSlot::IsView(MoverSlot *this);
void __thiscall Mover::Affect(Mover *this, AbStateInst *pkAbState, bool bNoVisual);
bool __thiscall Mover::IsMoverMovable(Mover *this);
bool __thiscall Mover::IsFeed(Mover *this);
bool __thiscall Mover::IsAbility(Mover *this);
void __thiscall MoverSlot::Act(MoverSlot *this, CharAniType eType);
void __thiscall MoverSlot::RideOff(MoverSlot *this);
Char *__thiscall Mover::GetSlotChar(Mover *this, unsigned int uiSlot);
NiPointer<NiNode> *__thiscall Mover::GetSlotNode(Mover *this, NiPointer<NiNode> *result, unsigned int uiSlot);
void __thiscall Mover::ActSlot(Mover *this, CharAniType eType);
void __thiscall Mover::RideOn(Mover *this, Char *pkChar, unsigned int uiSlot);
void __thiscall Mover::RideOff(Mover *this, unsigned int uiSlot);
void __thiscall Mover::RideAllOff(Mover *this);
AbStateInfectee::AbstateColor __thiscall Mover::GetAbstateColor(Mover *this);
bool __thiscall Mover::IsEmptySlot(Mover *this);
bool __thiscall Mover::IsSlotView(Mover *this, unsigned int uiSlot, bool bEffect);
bool __thiscall Mover::GetNextSlot(Mover *this, unsigned int *uiSlot);
void __thiscall MoverSlot::_MoverSlot(MoverSlot *this);
void __thiscall Mover::Update(Mover *this, float fTime);
void __thiscall Mover::ActStand(Mover *this);
void __thiscall Mover::ActWalk(Mover *this);
void __thiscall Mover::ActRun(Mover *this);
bool __thiscall Mover::ActJump(Mover *this);
void __thiscall Mover::ActDamage1(Mover *this);
void __thiscall Mover::ActCriticalStun(Mover *this);
void __thiscall Mover::SetMoverEffect(Mover *this, bool bShow, Mover *pkMover, char nGrade);
void __thiscall MoverSlot::MoverSlot(MoverSlot *this, const unsigned int uiSlot);
void __thiscall Mover::Mover(Mover *this);
void __thiscall Mover::_Mover(Mover *this);
MoverSlot *__cdecl MoverSlot::Create(NiPointer<NiNode> spSlotNode, NiPointer<NiNode> spHideNode, const unsigned int uiSlot, const char *pcMoverIdx, const char *pcMoverTypeIdx);
bool __thiscall Mover::Init(Mover *this, unsigned int kMoverID, unsigned __int16 kMoverHandle, int iHP);
bool __thiscall Mover::InitView(Mover *this, bool bEquip, unsigned int uiFrame);
void __thiscall MoverSlot::SetSlotNode(MoverSlot *this, NiPointer<NiNode> spSlotNode);
NiPointer<NiNode> *__thiscall MoverSlot::GetSlotNode(MoverSlot *this, NiPointer<NiNode> *result);
void __thiscall MoverSlot::SetHideNode(MoverSlot *this, NiPointer<NiNode> spHideNode);
NiPointer<NiNode> *__thiscall MoverSlot::GetHideNode(MoverSlot *this, NiPointer<NiNode> *result);
void __thiscall NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>(NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *> *this);
void *__thiscall NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vector_deleting_destructor_(NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *> *this, unsigned int);
void *__thiscall NiTMap<enum__CharAniType_MoverSlot::sSlotAniCode__>::_vector_deleting_destructor_(NiTMap<enum CharAniType,MoverSlot::sSlotAniCode *> *this, unsigned int);
bool __thiscall Mover::IsEndPathFinding(Mover *this);
void *__thiscall Mover::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall Mover::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall Mover::_scalar_deleting_destructor_(Mover *this, unsigned int);
MoverSlotView *__cdecl MoverSlotViewTab::GetByMoverIdx(const char *pcMoverIdx, unsigned int uiSlot);
unsigned int __cdecl MoverSlotCharAniTab::GetCountByMoverTypeIdx(const char *pcMoverTypeIdx, unsigned int uiSlot);
MoverAbility *__cdecl MoverAbilityTab::GetByMoverIdx(const char *pcMoverIdx);
HRESULT __stdcall StringVPrintfWorkerW(wchar_t *pszDest, unsigned int cchDest, const wchar_t *pszFormat, char *argList);
HRESULT __cdecl StringCbPrintfW(wchar_t *pszDest, unsigned int cbDest, const wchar_t *pszFormat);
void __thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Chassign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, unsigned int _Off, unsigned int _Count, wchar_t _Ch);
unsigned __int16 *__thiscall std::allocator<unsigned_short>::allocate(std::allocator<unsigned short> *this, unsigned int _Count);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::erase(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, unsigned int _Off, unsigned int _Count);
void __thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Copy(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, unsigned int _Newsize, unsigned int _Oldlen);
void __thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, unsigned int _Count, wchar_t _Ch);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *_Right, unsigned int _Roff, unsigned int _Count);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *_Right, unsigned int _Roff, unsigned int _Count);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, const wchar_t *_Ptr, unsigned int _Count);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, const wchar_t *_Ptr, unsigned int _Count);
void __cdecl CallSpawnerJS(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *command);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__cdecl CallSpawnerJSAndReturnValue(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *result, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *command);
void __thiscall CMD5Checksum::_CMD5Checksum(CMD5Checksum *this);
void *__thiscall CMD5Checksum::_vector_deleting_destructor_(CMD5Checksum *this, unsigned int);
void __thiscall CMD5Checksum::Transform(CMD5Checksum *this, char *Block);
void __thiscall CMD5Checksum::Update(CMD5Checksum *this, char *Input, unsigned int nInputLen);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CMD5Checksum::Final(CMD5Checksum *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl CMD5Checksum::GetMD5(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, char *pBuf, unsigned int nLength);
void __thiscall CDataReader::CDataReader(CDataReader *this);
void __thiscall CDataReader::ClearBF(CDataReader *this);
void __cdecl CDataReader::Encription(char *pBF, unsigned int nSize);
void *__thiscall CDataReader::GetRecord(CDataReader *this, unsigned int RecordNo);
void __thiscall CDataReader::_CDataReader(CDataReader *this);
void *__thiscall CDataReader::_scalar_deleting_destructor_(CDataReader *this, unsigned int);
int __thiscall CDataReader::Read(CDataReader *this, const char *pFN);
int __thiscall CDataReader::Read(CDataReader *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize);
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Wherenode);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty___std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_CAbstractProperty__>>_0>>::erase(...);
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *_Rootnode);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::erase(...);
unsigned __int16 *__thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>>::operator__(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::alloca *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval);
int __thiscall CSingleDataMap::InitSingleDataArray(CSingleDataMap *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize);
unsigned __int16 __thiscall CSingleDataMap::GetValue(CSingleDataMap *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > sIndex);
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>(CSingleDataMap *this);
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Pnode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *this);
void __thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Wherenode);
void __thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Wherenode);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Lbound(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(...);
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Rootnode);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...);
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocat(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *this);
void __thiscall ItemMixData::_ItemMixData(ItemMixData *this);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(...);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(...);
void __thiscall ItemMixData::ItemMixData(ItemMixData *this);
int __thiscall ItemMixData::Read(ItemMixData *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>>::operator__(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval);
const char *__thiscall ItemMixData::GetMixItemIndex(ItemMixData *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *sRawItemIndex);
void __thiscall CQuest::_CQuest(CQuest *this);
int __thiscall CQuest::InitQuestBF(CQuest *this, int NumOfQuest);
void __thiscall CQuest::ClearQuest(CQuest *this);
PLAYER_QUEST_INFO *__thiscall CQuest::GetQuestInfo(CQuest *this, unsigned __int16 nID);
int __thiscall CQuest::SetQuestInfo(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo);
int __thiscall CQuest::AddQuestInfo(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo);
void __thiscall CQuest::SetQuestClear(CQuest *this, unsigned __int16 nID);
int __thiscall CQuest::SetQuestAccept(CQuest *this, unsigned __int16 nID);
int __thiscall CQuest::SetQuestCancel(CQuest *this, unsigned __int16 nID);
int __thiscall CQuest::SetQuestProgress(CQuest *this, unsigned __int16 nID, char ProgressStep);
int __thiscall CQuest::SetQuestFailed(CQuest *this, unsigned __int16 nID);
int __thiscall CQuest::SetQuestDone(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo);
int __thiscall CQuest::SetQuestAbort(CQuest *this, unsigned __int16 nID);
int __thiscall CQuest::Recv_NC_CHAR_QUEST_DOING_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_DOING_CMD *pQuestPlayerDoingData);
int __thiscall CQuest::Recv_NC_CHAR_QUEST_DONE_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_DONE_CMD *pQuestPlayerDoneData);
int __thiscall CQuest::Recv_NC_QUEST_GIVE_UP_ACK(CQuest *this, PROTO_NC_QUEST_GIVE_UP_ACK *pAck);
int __thiscall CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_READ_CMD *pQuestPlayerReadData);
int __thiscall CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_REPEAT_CMD *pQuestPlayerRepeatData);
int __thiscall CQuest::Send_NC_QUEST_CLIENT_SCENARIO_DONE_REQ(CQuest *this, unsigned __int16 nScenarioID);
int __thiscall CQuest::Recv_NC_QUEST_CLIENT_SCENARIO_DONE_ACK(CQuest *this, PROTO_NC_QUEST_CLIENT_SCENARIO_DONE_ACK *pAck);
void __thiscall CQuest::Recv_NC_QUEST_NOTIFY_MOB_KILL_CMD(CQuest *this, PROTO_NC_QUEST_NOTIFY_MOB_KILL_CMD *pCmd);
int __thiscall CQuest::QuestPlayer_LevelChange(CQuest *this, char nPlayerLevel);
int __thiscall CQuest::IsQuestArea(CQuest *this, unsigned int CurrentX, unsigned int CurrentY, unsigned int QuestX, unsigned int QuestY, unsigned int QuestRange);
int __thiscall CQuest::IsQuestNPCMob(CQuest *this, QUEST_DATA *lpQuestData, unsigned __int16 nNPCID);
int __thiscall CQuest::IsConversationNPCMob(CQuest *this, QUEST_DATA *lpQuestData, unsigned __int16 nNPCID);
unsigned __int16 __thiscall CQuest::GetRewardNPC(CQuest *this, QUEST_DATA *lpQuestData);
int __thiscall CQuest::IsSoonableQuest(CQuest *this, QUEST_DATA *lpQuestData);
int __thiscall CQuest::IsDoingableQuest(CQuest *this, QUEST_DATA *lpQuestData);
int __thiscall CQuest::IsDoingableQuest(CQuest *this, unsigned __int16 hQuestID);
int __thiscall CQuest::IsRewardAbleQuest(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo);
char __thiscall CQuest::IsSoonableDailyQuest(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo);
void __thiscall CQuest::CQuest(CQuest *this, CQuestData *pQuestData);
int __thiscall CQuest::SetQuestDone(CQuest *this, unsigned __int16 nID);
PLAYER_QUEST_STATUS __thiscall CQuest::GetNewQuestStatus(CQuest *this, QUEST_DATA *lpQuestData);
PLAYER_QUEST_STATUS __thiscall CQuest::GetNewQuestStatus(CQuest *this, unsigned __int16 nID);
int __thiscall CQuest::IsDoingQuest(CQuest *this, unsigned __int16 hQuestID);
PLAYER_QUEST_STATUS __thiscall CQuest::DoingQuestUpdateStatus(CQuest *this, int nIndex);
int __thiscall CQuest::GetQuestStatusWithNPC(CQuest *this, CQuest::NPC_QUEST_STATUS *kQuestStatus, QUEST_DATA *lpQuestData, unsigned int uiMainCharLv, bool bQmark, bool bLowRepeat);
int __thiscall CQuest::QuestPlayer_NPCMobKill(CQuest *this, unsigned __int16 nMobID, const unsigned __int16 nQuestID);
int __thiscall CQuest::QuestPlayer_TakeItem(CQuest *this, unsigned __int16 nItemID, unsigned __int16 nCurrentLot);
int __thiscall CQuest::QuestPlayer_DestroyItem(CQuest *this, unsigned __int16 nItemID, unsigned __int16 nCurrentLot);
int __thiscall CQuest::QuestPlayer_CheckLocation(CQuest *this);
int __thiscall CQuest::QuestPlayer_ScenarioDone(CQuest *this, unsigned __int16 nScenarioID);
int __thiscall CQuest::QuestPlayer_RaceChange(CQuest *this, char nRace);
int __thiscall CQuest::QuestPlayer_ClassChange(CQuest *this, char nClass);
int __thiscall CQuest::QuestPlayer_TimeProcess(CQuest *this);
void __thiscall CQuest::AllDoingQuestUpdateStatus(CQuest *this);
int __thiscall CQuest::GetQuestListWithNPC(CQuest *this, unsigned __int16 hNCPID);
void __thiscall CQuest::GetQuestStatusWithNPC(CQuest *this, CQuest::NPC_QUEST_STATUS *kQuestStatus, PLAYER_QUEST_STATUS eDontWantStatus, unsigned int uiMainCharLv, bool bLowRepeat);
char __thiscall ShineObjectHandleUnion::sohu_HandleSplit(ShineObjectHandleUnion *this, unsigned __int16 *hnd);
void __thiscall CWeaponTitle::CWeaponTitle(CWeaponTitle *this);
int __thiscall CWeaponTitle::Read(CWeaponTitle *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize);
unsigned int __thiscall CWeaponTitle::GetMaxLevel(CWeaponTitle *this, unsigned __int16 MobID);
unsigned int __thiscall CWeaponTitle::GetLevel(CWeaponTitle *this, unsigned __int16 MobID, unsigned int MobKillCount);
WEAPON_TITLE_DATA *__thiscall CWeaponTitle::GetLevelData(CWeaponTitle *this, unsigned __int16 MobID, unsigned int MobKillCount, unsigned int *pLevel);
WEAPON_TITLE_DATA *__thiscall CWeaponTitle::GetPrevLevelData(CWeaponTitle *this, unsigned __int16 MobID, unsigned int dwLevel);
WEAPON_TITLE_DATA *__thiscall CWeaponTitle::GetData(CWeaponTitle *this, unsigned __int16 MobID, unsigned int Level);
void __thiscall CWeaponTitle::_CWeaponTitle(CWeaponTitle *this);
int __thiscall CCharacterTitleData::Read(CCharacterTitleData *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize);
const char *__thiscall CCharacterTitleData::GetTitleString(CCharacterTitleData *this, char Type, char ElementNo);
void __thiscall CShnDataFileCheckSum::_unnamed_type_CheckSumData_::_unnamed_type_CheckSumData_(CShnDataFileCheckSum::<unnamed-type-CheckSumData> *this);
char __thiscall CShnDataFileCheckSum::InitDataFileCheckSum(CShnDataFileCheckSum *this, const char *FileName, Name8 nCheckSum);
Name8 *__thiscall CShnDataFileCheckSum::GetDataFileCheckSum(CShnDataFileCheckSum *this, SHN_DATA_FILE_INDEX Index);
char *__thiscall CShnDataFileCheckSum::GetDataFileName(CShnDataFileCheckSum *this, SHN_DATA_FILE_INDEX Index);
void __thiscall CShnDataFileCheckSum::CShnDataFileCheckSum(CShnDataFileCheckSum *this);
int __thiscall CChatRestrict::Del(CChatRestrict *this, Name5 *pCharID);
PROTO_CHAT_RESTRICT_INFO *__thiscall CChatRestrict::Get(CChatRestrict *this, Name5 *pCharID);
void __thiscall CChatRestrict::CChatRestrict(CChatRestrict *this);
void __thiscall CChatRestrict::_CChatRestrict(CChatRestrict *this);
int __thiscall CChatRestrict::Add(CChatRestrict *this, PROTO_CHAT_RESTRICT_INFO *pInfo);
void __thiscall CItemAuthorityBase::CItemAuthorityBase(CItemAuthorityBase *this);
void __thiscall CItemAuthorityBase::_CItemAuthorityBase(CItemAuthorityBase *this);
int __thiscall CItemAuthorityBase::IA_CanPlayerTrade(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState);
int __thiscall CItemAuthorityBase::IA_CanNpcSell(CItemAuthorityBase *this, E_BelongType eType);
int __thiscall CItemAuthorityBase::IA_CanStorage(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState, unsigned __int16 FromInven, unsigned __int16 ToInven);
int __thiscall CItemAuthorityBase::IA_IsWorkChrBelonged(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState);
int __thiscall CItemAuthorityBase::IA_IsWorkAccBelonged(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState);
int __thiscall CItemAuthorityBase::IA_IsDataPutOnBelonged(CItemAuthorityBase *this, E_BelongType eType);
int __thiscall CItemAuthorityBase::IA_IsDataChrBelonged(CItemAuthorityBase *this, E_BelongType eType);
int __thiscall CItemAuthorityBase::IA_IsDataAccBelonged(CItemAuthorityBase *this, E_BelongType eType);
void *__thiscall CItemAuthorityBase::_scalar_deleting_destructor_(CItemAuthorityBase *this, unsigned int);
int __thiscall CItemAuthorityBase::IA_CanInvenReloc(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState, unsigned __int16 FromInven, unsigned __int16 ToInven, E_RELOC_ERR *eRelocErr);
void __thiscall CChargedItem::CChargedItem(CChargedItem *this);
int __thiscall CChargedItem::Add(CChargedItem *this, PROTO_CHARGED_ITEM_INFO *pInfo);
int __thiscall CChargedItem::Del(CChargedItem *this, PROTO_CHARGED_ITEM_INFO *pInfo);
PROTO_CHARGED_ITEM_INFO *__thiscall CChargedItem::Find(CChargedItem *this, unsigned int ItemOrderNo);
PROTO_CHARGED_ITEM_INFO *__thiscall CChargedItem::Seek(CChargedItem *this, int Index);
void __thiscall CChargedItem::Clear(CChargedItem *this);
const char *__thiscall CQuestData::GetDialog(CQuestData *this, unsigned int nID);
QUEST_DATA *__thiscall CQuestData::GetQuestDataByIndex(CQuestData *this, unsigned int Index);
void __thiscall std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(std::vector<CBaseObject *,std::allocator<CBaseObject *> > *this, unsigned int _Count);
void __thiscall std::list<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Splice_same(std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *this, std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Where, std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *_Right, std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _First, std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Last, unsigned int _Count);
std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::lower_bound(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *result, const unsigned __int16 *_Keyval);
std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::upper_bound(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *result, const unsigned __int16 *_Keyval);
std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *__thiscall std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Buynode<std::pair<unsigned_short_QUEST_DATA__>>(std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *this, std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *_Next, std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *_Prev, std::pair<unsigned short,QUEST_DATA *> *_Val);
bool __thiscall CQuestData::GetMobIdAssociatedWithQuestData(CQuestData *this, unsigned __int16 MobId, std::vector<QUEST_DATA *,std::allocator<QUEST_DATA *> > *rQuestList);
int __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(...);
QUEST_DATA *__thiscall CQuestData::GetQuestData(CQuestData *this, unsigned __int16 QuestID);
const char *__thiscall CQuestData::GetQuestName(CQuestData *this, unsigned __int16 QuestID);
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::__Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this);
void __thiscall stdext::hash_multimap<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_hash_multimap<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>(stdext::hash_multimap<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *this);
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Check_size(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this);
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Check_size(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this);
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::clear(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this);
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, stdext::hash_compare<unsigned short,std::less<unsigned short> > *_Parg, std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > *_Al);
std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Insert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this, std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *result, std::pair<unsigned short const ,QUEST_DATA *> *_Val, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Plist);
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Reinsert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Last);
std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Insert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *result, std::pair<unsigned short const ,QUEST_DATA *> *_Val, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Plist);
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Reinsert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Last);
void __thiscall CQuestData::ClearBF(CQuestData *this);
void __thiscall CQuestData::CQuestData(CQuestData *this, CDataReader *pQuestDialog);
void __thiscall CQuestData::_CQuestData(CQuestData *this);
void __thiscall CQuestData::QuestData_HashDataIn(CQuestData *this);
int __thiscall CQuestData::ReadModeRead(CQuestData *this, const char *pFN);
int __thiscall CQuestData::ReadModeEdit(CQuestData *this, const char *pFN);
int __thiscall CQuestData::Read(CQuestData *this, const char *pFN, int bReadonly);
void __thiscall PROTO_FRIEND_INFO::PROTO_FRIEND_INFO(PROTO_FRIEND_INFO *this);
PROTO_FRIEND_INFO *__thiscall PROTO_FRIEND_INFO::operator_(PROTO_FRIEND_INFO *this, PROTO_FRIEND_INFO *__that);
int __thiscall CFriend::Del(CFriend *this, Name5 *pCharID);
PROTO_FRIEND_INFO *__thiscall CFriend::Get(CFriend *this, Name5 *pCharID);
int __thiscall CFriend::Login(CFriend *this, Name5 *pCharID);
int __thiscall CFriend::MapChange(CFriend *this, Name5 charid, Name3 *pMapName);
int __thiscall CFriend::PartyChange(CFriend *this, Name5 charid, char IsParty);
int __thiscall CFriend::LevelChange(CFriend *this, Name5 charid, char Level);
void __thiscall CFriend::CFriend(CFriend *this);
void __thiscall CFriend::_CFriend(CFriend *this);
int __thiscall CFriend::Add(CFriend *this, PROTO_FRIEND_INFO *pInfo);
int __thiscall CFriend::Logout(CFriend *this, Name5 *pCharID);
void __thiscall CHolyPromise::ClearUp(CHolyPromise *this);
void __thiscall CHolyPromise::ClearMember(CHolyPromise *this);
int __thiscall CHolyPromise::IsDelPenlety(CHolyPromise *this, PROTO_HOLY_PROMISE_DATE *pLoginInfo);
void __thiscall CHolyPromise::DelUp(CHolyPromise *this);
int __thiscall CHolyPromise::SetMember(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo);
int __thiscall CHolyPromise::DelMember(CHolyPromise *this, Name5 *pCharID);
PROTO_HOLY_PROMISE_INFO *__thiscall CHolyPromise::Get(CHolyPromise *this, Name5 *pCharID, int *pBFIndex);
int __thiscall CHolyPromise::Del(CHolyPromise *this, Name5 *pCharID);
int __thiscall CHolyPromise::Logout(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo);
void __thiscall CHolyPromise::SetUp(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo);
int __thiscall CHolyPromise::Add(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo);
int __thiscall CHolyPromise::Add(CHolyPromise *this, PROTO_NC_HOLY_PROMISE_LIST_CMD *pInfo);
int __thiscall CHolyPromise::Login(CHolyPromise *this, Name5 *pCharID);
int __thiscall CHolyPromise::Logout(CHolyPromise *this, Name5 *pCharID);
int __thiscall CHolyPromise::LevelChange(CHolyPromise *this, Name5 *pCharID, char Level);
void __thiscall CHolyPromise::CHolyPromise(CHolyPromise *this);
void __thiscall CHolyPromise::_CHolyPromise(CHolyPromise *this);
PROTO_NC_PARTY_FINDER_INFO *__thiscall PROTO_NC_PARTY_FINDER_INFO::operator_(PROTO_NC_PARTY_FINDER_INFO *this, PROTO_NC_PARTY_FINDER_INFO *__that);
CPartyFinder::PARTY_FINDER_INFO_LIST *__thiscall CPartyFinder::Find(CPartyFinder *this, Name5 *psCharID);
void __thiscall CPartyFinder::DelNode(CPartyFinder *this, CPartyFinder::PARTY_FINDER_INFO_LIST *pList);
int __thiscall CPartyFinder::Add(CPartyFinder *this, PROTO_NC_PARTY_FINDER_INFO *pInfo);
int __thiscall CPartyFinder::Del(CPartyFinder *this, Name5 *psCharID);
void __thiscall CPartyFinder::Clear(CPartyFinder *this);
void __thiscall CPartyFinder::_CPartyFinder(CPartyFinder *this);
void __thiscall GUILD_MEMBER_CLIENT::GUILD_MEMBER_CLIENT(GUILD_MEMBER_CLIENT *this);
void __thiscall CGuildMember::_CGuildMember(CGuildMember *this);
int __thiscall CGuildMember::GetIndex(CGuildMember *this, Name5 *pMemberName);
GUILD_MEMBER_CLIENT *__thiscall GUILD_MEMBER_CLIENT::operator_(GUILD_MEMBER_CLIENT *this, GUILD_MEMBER_CLIENT *__that);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_JOIN_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_JOIN_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LEAVE_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LEAVE_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD(CGuildMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD *pCmd);
SHINE_GUILD_WAR_INFO *__thiscall SHINE_GUILD_WAR_INFO::operator_(SHINE_GUILD_WAR_INFO *this, SHINE_GUILD_WAR_INFO *__that);
int __thiscall CGuildWar::Update(CGuildWar *this, unsigned int nRequestGuildNo, char nWarStatus, int *pWarEndDate, tm *pdEndDate);
void __thiscall CPartyFinder::CPartyFinder(CPartyFinder *this);
int __thiscall CGuild::IsSetDismiss(CGuild *this, GUILD_MEMBER_CLIENT *pMember);
int __thiscall CGuild::IsSetNotify(CGuild *this, GUILD_MEMBER_CLIENT *pMember);
int __thiscall CGuild::IsSetInvite(CGuild *this, GUILD_MEMBER_CLIENT *pMember);
int __thiscall CGuild::IsSetVanish(CGuild *this, GUILD_MEMBER_CLIENT *pMember);
int __thiscall CGuild::IsSetMemberGrade(CGuild *this, GUILD_MEMBER_CLIENT *pMember);
int __thiscall CGuild::IsSetWar(CGuild *this, GUILD_MEMBER_CLIENT *pMember);
bool __thiscall CGuild::IsUseStorage(CGuild *this, GUILD_MEMBER_CLIENT *pMember);
void __thiscall CGuild::MakeAcademy(CGuild *this, Name5 *pAcademyMaster);
NiAnimationKey::KeyContent __thiscall NiPoint3Interpolator::GetKeyContent(NiPoint3Interpolator *this, unsigned __int16 usChannel);
int __thiscall CGuild::Recv_NC_GUILD_MONEY_ADD_ACK(CGuild *this, PROTO_NC_GUILD_MONEY_ADD_ACK *pAck);
int __thiscall CGuild::Recv_NC_GUILD_WAR_ACK(CGuild *this, PROTO_NC_GUILD_WAR_ACK *pAck);
int __thiscall CGuild::Recv_NC_GUILD_DISMISS_CMD(CGuild *this, PROTO_NC_GUILD_DISMISS_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_DELETE_CMD(CGuild *this, PROTO_NC_GUILD_DELETE_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_MONEY_SUB_CMD(CGuild *this, PROTO_NC_GUILD_MONEY_SUB_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_NOTIFY_CMD(CGuild *this, PROTO_NC_GUILD_NOTIFY_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_GRADE_CMD(CGuild *this, PROTO_NC_GUILD_GRADE_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_WAR_START_CMD(CGuild *this, PROTO_NC_GUILD_WAR_START_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_WAR_COOLDOWN_DONE_CMD(CGuild *this, PROTO_NC_GUILD_WAR_COOLDOWN_DONE_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_ACADEMY_NOTIFY_CMD(CGuild *this, PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *pCmd);
void __thiscall GUILD_TOURNAMENT_LIST::GUILD_TOURNAMENT_LIST(GUILD_TOURNAMENT_LIST *this);
void __thiscall CGuildTournament::_CGuildTournament(CGuildTournament *this);
void __thiscall CGuildTournament::Clear(CGuildTournament *this);
void __thiscall GUILD_ACADEMY_MEMBER_CLIENT::GUILD_ACADEMY_MEMBER_CLIENT(GUILD_ACADEMY_MEMBER_CLIENT *this);
void __thiscall CGuildAcademyMember::_CGuildAcademyMember(CGuildAcademyMember *this);
int __thiscall CGuildAcademyMember::GetIndex(CGuildAcademyMember *this, Name5 *pAcademyMemberName);
GUILD_ACADEMY_MEMBER_CLIENT *__thiscall GUILD_ACADEMY_MEMBER_CLIENT::operator_(GUILD_ACADEMY_MEMBER_CLIENT *this, GUILD_ACADEMY_MEMBER_CLIENT *__that);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD *pCmd);
void __thiscall CGuildMember::CGuildMember(CGuildMember *this);
GUILD_MEMBER_CLIENT *__thiscall CGuildMember::Get(CGuildMember *this, Name5 *pMemberName);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LIST_ACK(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LIST_ACK *pAck);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_GRADE_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_GRADE_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_FLAGS_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_FLAGS_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_EXP_RATIO_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_EXP_RATIO_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LOGON_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LOGON_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LOGOFF_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LOGOFF_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_PARTY_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_PARTY_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LEVEL_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LEVEL_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_MAP_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_MAP_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_INTRO_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_INTRO_CMD *pCmd);
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_CLASS_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_CLASS_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_MY_GUILD_INFO_ACK(CGuild *this, PROTO_NC_GUILD_MY_GUILD_INFO_ACK *pAck);
void __thiscall CGuildTournament::CGuildTournament(CGuildTournament *this);
void __thiscall CGuildAcademyMember::CGuildAcademyMember(CGuildAcademyMember *this);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LIST_ACK(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LIST_ACK *pAck);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_PARTY_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_PARTY_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LEVEL_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEVEL_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_MAP_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_MAP_CMD *pCmd);
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_CLASS_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_CLASS_CMD *pCmd);
int __thiscall CGuildWar::Add(CGuildWar *this, SHINE_GUILD_WAR_INFO *pWarInfo);
int __thiscall CGuildWar::Del(CGuildWar *this, unsigned int nRequestGuildNo);
int __thiscall CGuildWarAble::Add(CGuildWarAble *this, SHINE_GUILD_WAR_ABLE_INFO *pWarInfo);
int __thiscall CGuild::Recv_NC_GUILD_WAR_TARGET_CMD(CGuild *this, PROTO_NC_GUILD_WAR_TARGET_CMD *pCmd);
int __thiscall CGuild::Recv_NC_GUILD_WAR_END_CMD(CGuild *this, PROTO_NC_GUILD_WAR_END_CMD *pCmd);
void __thiscall CGuildWar::Clear(CGuildWar *this);
void __thiscall CGuildWarAble::Clear(CGuildWarAble *this);
void __thiscall CGuild::Make(CGuild *this, unsigned int nNo, Name4 *pName, char nType, int dCreateDate);
int __thiscall CGuild::Recv_NC_GUILD_MAKE_ACK(CGuild *this, PROTO_NC_GUILD_MAKE_ACK *pAck);
int __thiscall CGuild::Recv_NC_GUILD_WAR_LIST_ACK(CGuild *this, PROTO_NC_GUILD_WAR_LIST_ACK *pAck);
void __thiscall CGuildWarAble::_CGuildWarAble(CGuildWarAble *this);
void __thiscall CGuild::CGuild(CGuild *this);
void __thiscall CGuild::_CGuild(CGuild *this);
void __thiscall PROTO_KQ_MAP_INFO::PROTO_KQ_MAP_INFO(PROTO_KQ_MAP_INFO *this);
void __thiscall CKQ::Clear(CKQ *this);
int __thiscall CKQ::Del(CKQ *this, unsigned int Handle);
PROTO_KQ_INFO *__thiscall CKQ::Get(CKQ *this, unsigned int Handle);
void __thiscall CKQ::Add(CKQ *this, PROTO_NC_KQ_LIST_ADD_ACK *pAddInfo);
int __thiscall CKQ::Update(CKQ *this, PROTO_NC_KQ_LIST_UPDATE_ACK *pUpdateInfo);
void __thiscall PROTO_KQ_INFO::PROTO_KQ_INFO(PROTO_KQ_INFO *this);
void __thiscall PROTO_KQ_INFO::_PROTO_KQ_INFO(PROTO_KQ_INFO *this);
void __thiscall CKQ::_CKQ(CKQ *this);
void __thiscall CKQ::CKQ(CKQ *this);
bool __thiscall CFindWay::Load(CFindWay *this, const char *_szFileName);
bool __thiscall CFindWay::GetBlock(CFindWay *this, unsigned int _uiX, unsigned int _uiY);
bool __thiscall CFindWay::GetBlock(CFindWay *this, float _fX, float _fY);
void __thiscall CFindWay::_CFindWay(CFindWay *this);
int __thiscall CFindWay::LineIntersect(CFindWay *this);
void __thiscall CFindWay::LenMapInit(CFindWay *this, int nSizeX, int nSizeY);
void __thiscall CFindWay::LenMapClear(CFindWay *this);
int __thiscall CFindWay::LenMapSet(CFindWay *this, int x, int y, unsigned __int16 value);
int __thiscall CFindWay::SearchMoveable(CFindWay *this);
void __thiscall CFindWay::FindWay(CFindWay *this);
void __thiscall CFindWay::Init(CFindWay *this);
void __thiscall CFindWay::CFindWay(CFindWay *this);
bool __thiscall AreaInfoData::AE_Circle::IntersectTest(AreaInfoData::AE_Circle *this, float fX, float fY);
bool __thiscall AreaInfoData::AE_Square::IntersectTest(AreaInfoData::AE_Square *this, float fX, float fY);
void __thiscall AreaInfoData::AreaInfoData(AreaInfoData *this);
AreaInfoData::IAreaData *__thiscall AreaInfoData::GetData(AreaInfoData *this, Name8 *Name);
AreaInfoData::IAreaData *__thiscall AreaInfoData::GetData(AreaInfoData *this, const char *szName);
void __thiscall AreaInfoData::RemoveAll(AreaInfoData *this);
void __thiscall AreaInfoData::_AreaInfoData(AreaInfoData *this);
bool __thiscall AreaInfoData::Load(AreaInfoData *this, const char *szFileName);
int __thiscall loc_73B41E(AreaInfoData *this, int szFileName); // weak
void *__thiscall AreaInfoData::_vector_deleting_destructor_(AreaInfoData *this, unsigned int);
bool __thiscall DiceTaiSai::ConvertDice(DiceTaiSai *this, char *pSource, int *pTarget);
bool __thiscall DiceTaiSai::ConvertDice(DiceTaiSai *this, int nSource, char *pTarget);
bool __thiscall DiceTaiSai::get_PrizeWinningBet(DiceTaiSai *this, int nDiceVariety, DiceTaiSaiPrizeWinning *pPrizeWinningBet);
void __thiscall DiceTaiSaiDividind::DiceTaiSaiDividind(DiceTaiSaiDividind *this);
bool __thiscall DiceTaiSaiDividind::isInitFinishe(DiceTaiSaiDividind *this);
bool __thiscall DiceTaiSaiDividind::Init(DiceTaiSaiDividind *this, DividendRate nDividind, unsigned __int16 nDividindRate);
unsigned int __thiscall DiceTaiSaiDividind::get_MaxBettingMoney(DiceTaiSaiDividind *this, DICE_TAISAI_BETTING nBet, unsigned int nMaxBetMoney);
unsigned int __thiscall DiceTaiSaiDividind::get_DividindMoney(DiceTaiSaiDividind *this, DICE_TAISAI_BETTING nBet, int nSingleNum, unsigned int nBetMoney);
void __thiscall DiceTaiSai::Init(DiceTaiSai *this, int NoSumTriple);
void __thiscall CGuildList::CGuildList(CGuildList *this);
int __thiscall CGuildList::Recv_NC_GUILD_LIST_ACK(CGuildList *this, PROTO_NC_GUILD_LIST_ACK *pAck);
void __thiscall CGuildList::_CGuildList(CGuildList *this);
char *__cdecl fs(char *format);
bool __thiscall Encrypt::Stream::Allocate(Encrypt::Stream *this, unsigned int dwSize);
void __thiscall Encrypt::Stream::Stream(Encrypt::Stream *this);
void __thiscall Encrypt::Stream::_Stream(Encrypt::Stream *this);
bool __thiscall Encrypt::FileStream::Load(Encrypt::FileStream *this, char *acFn);
bool __thiscall Encrypt::FileStream::Save(Encrypt::FileStream *this, char *acFn);
void __cdecl Encrypt::EncryptXor(char *pcDest, unsigned int dwDestSize, char *pcSrc, unsigned int dwSrcSize, char *pcKey);
bool __thiscall Encrypt::EncryptMethodXor::Encrypt(Encrypt::EncryptMethodXor *this, Encrypt::Stream *rkEncStream, Encrypt::Stream *rkOrgStream);
bool __thiscall Encrypt::EncryptMethodXor::Decrypt(Encrypt::EncryptMethodXor *this, Encrypt::Stream *rkOrgStream, Encrypt::Stream *rkEncStream);
bool __thiscall Encrypt::EncryptStream::SaveEncrypted(Encrypt::EncryptStream *this, char *fn, Encrypt::IEncryptMethod *rkMethod);
bool __thiscall Encrypt::EncryptStream::LoadOriginal(Encrypt::EncryptStream *this, char *fn);
bool __thiscall Encrypt::EncryptStream::SaveOriginal(Encrypt::EncryptStream *this, char *fn);
void *__thiscall Encrypt::Stream::_vector_deleting_destructor_(Encrypt::Stream *this, unsigned int);
void __thiscall Encrypt::EncryptMethodXor::EncryptMethodXor(Encrypt::EncryptMethodXor *this, char *pcKey);
bool __thiscall Encrypt::EncryptStream::LoadEncrypted(Encrypt::EncryptStream *this, char *fn, Encrypt::IEncryptMethod *rkMethod);
void __cdecl enable_sperror(bool bEnable);
void __cdecl enable_spcritical(bool bEnable);
bool __thiscall CTextDataMem::ReadFieldStr(CTextDataMem *this, CFieldNode *pFieldNode, char *pcStr, int iMaxStr);
CFieldNode *__thiscall INode::FindField(INode *this, char *token);
std::basic_filebuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::open(std::basic_filebuf<char,std::char_traits<char> > *this, const char *_Filename, int _Mode, int _Prot);
std::basic_ostream<char,std::char_traits<char> > *__thiscall std::basic_ostream<char_std::char_traits<char>>::put(std::basic_ostream<char,std::char_traits<char> > *this, char _Ch);
std::basic_ostream<char,std::char_traits<char> > *__cdecl std::endl(std::basic_ostream<char,std::char_traits<char> > *_Ostr);
// BOOL __stdcall ImmReleaseContext(HWND, HIMC);
// BOOL __stdcall ImmGetConversionStatus(HIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence);
// HIMC __stdcall ImmGetContext(HWND);
// BOOL __stdcall ImmSetConversionStatus(HIMC, DWORD, DWORD);
// BOOL __stdcall ImmNotifyIME(HIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue);
// void __usercall putShortMSB(internal_state *s<eax>, unsigned int b<ecx>);
// void __usercall flush_pending(z_stream_s *strm<eax>);
int __cdecl deflate(z_stream_s *strm, int flush);
int __cdecl deflateEnd(z_stream_s *strm);
// void __usercall lm_init(internal_state *s<esi>);
// unsigned int __usercall longest_match<eax>(internal_state *s<edi>, unsigned int cur_match);
// unsigned int __usercall longest_match_fast<eax>(internal_state *s<esi>, unsigned int cur_match<edx>);
// void __usercall fill_window(internal_state *s<esi>);
block_state __cdecl deflate_stored(internal_state *s, int flush);
block_state __cdecl deflate_fast(internal_state *s, int flush);
block_state __cdecl deflate_slow(internal_state *s, int flush);
int __cdecl deflateReset(z_stream_s *strm);
int __cdecl deflateInit2_(z_stream_s *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size);
int __cdecl deflateInit_(z_stream_s *strm, int level, const char *version, int stream_size);
int __cdecl inflateReset(z_stream_s *strm);
int __cdecl inflateInit2_(z_stream_s *strm, int windowBits, const char *version, int stream_size);
int __cdecl inflateInit_(z_stream_s *strm, const char *version, int stream_size);
// int __usercall updatewindow<eax>(z_stream_s *strm<ebx>, unsigned int out<eax>);
int __cdecl inflate(z_stream_s *strm, int flush);
int __cdecl inflateEnd(z_stream_s *strm);
unsigned int __cdecl adler32(unsigned int adler, const char *buf, unsigned int len);
// void __usercall init_block(internal_state *s<edx>);
// void __usercall pqdownheap(internal_state *s<eax>, ct_data_s *tree<edi>, int k);
// void __usercall gen_bitlen(internal_state *s<eax>, tree_desc_s *desc<ecx>);
// void __usercall scan_tree(internal_state *s, ct_data_s *tree<ecx>, int max_code<eax>);
// void __usercall send_tree(internal_state *s<eax>, ct_data_s *tree<edx>, int max_code<ecx>);
// void __usercall send_all_trees(internal_state *s<esi>, int lcodes, int dcodes, int blcodes);
// void __usercall compress_block(internal_state *s<eax>, ct_data_s *ltree, ct_data_s *dtree);
// void __usercall set_data_type(internal_state *s<eax>);
// void __usercall bi_flush(internal_state *s<eax>);
// void __usercall bi_windup(internal_state *s<eax>);
// void __usercall copy_block(internal_state *s<eax>, char *buf, unsigned int len<ecx>, int header);
void __cdecl _tr_init(internal_state *s);
// void __usercall gen_codes(ct_data_s *tree<edi>, int max_code, unsigned __int16 *bl_count<edx>);
// void __usercall build_tree(internal_state *s<esi>, tree_desc_s *desc);
// int __usercall build_bl_tree<eax>(internal_state *s<eax>);
void __cdecl _tr_stored_block(internal_state *s, char *buf, unsigned int stored_len, int eof);
void __cdecl _tr_align(internal_state *s);
void __cdecl _tr_flush_block(internal_state *s, char *buf, unsigned int stored_len, int eof);
// unsigned int __usercall crc32_little<eax>(unsigned int crc<eax>, const char *buf<ecx>, unsigned int len<edx>);
unsigned int __cdecl crc32(unsigned int crc, const char *buf, unsigned int len);
void *__cdecl zcalloc(void *opaque, unsigned int items, unsigned int size);
void __cdecl zcfree(void *opaque, void *ptr);
void __cdecl inflate_fast(z_stream_s *strm, unsigned int start);
int __cdecl inflate_table(codetype type, unsigned __int16 *lens, unsigned int codes, code **table, unsigned int *bits, unsigned __int16 *work);
bool __thiscall NiPixelFormat::operator__(NiPixelFormat *this, NiPixelFormat *kOther);
void __thiscall NiPNGReader::Unpack4BitSourceRowPal(NiPNGReader *this, char *pucSrc, char *pucDest);
void __thiscall NiPNGReader::Unpack8BitSourceRowPal(NiPNGReader *this, char *pucSrc, char *pucDest);
void __thiscall NiPNGReader::Unpack32BitFrom24BitSourceRow(NiPNGReader *this, char *pucSrc, char *pucDest);
void __thiscall NiPNGReader::Unpack32BitFrom32BitSourceRow(NiPNGReader *this, char *pucSrc, char *pucDest);
bool __thiscall NiPNGReader::CanReadFile(NiPNGReader *this, const char *pcFileExtension);
unsigned int __thiscall NiBinaryStream::Read(NiBinaryStream *this, void *pvBuffer, unsigned int uiBytes);
void __thiscall NiPixelData::SetPalette(NiD3DPass *this, NiD3DPixelShader *pkPixelShader);
void __thiscall NiPNGReader::NiPNGReader(NiPNGReader *this);
void *__thiscall NiPNGReader::_scalar_deleting_destructor_(NiPNGReader *this, unsigned int);
void __cdecl NiPNGReaderReadCB(png_struct_def *png_ptr, char *data, unsigned int length);
NiPixelData *__thiscall NiPNGReader::ReadBody(NiPNGReader *this, NiFile *kIst, NiPixelData *pkOptDest);
void __cdecl NiStreamLoadBinary<unsigned_int>(NiBinaryStream *binstream, unsigned int *value);
bool __thiscall NiPNGReader::ReadHeader(NiPNGReader *this, NiFile *kIst, unsigned int *uiWidth, unsigned int *uiHeight, NiPixelFormat *kFormat, bool *bMipmap, unsigned int *uiNumFaces);
NiPixelData *__thiscall NiPNGReader::ReadFile(NiPNGReader *this, NiFile *kIst, NiPixelData *pkOptDest);
// lua_TValue *__usercall index2addr<eax>(lua_State *L<esi>, int idx<ecx>);
void __cdecl growstack(lua_State *L, void *ud);
int __cdecl lua_checkstack(lua_State *L, int size);
void __cdecl lua_xmove(lua_State *from, lua_State *to, int n);
int (__cdecl *__cdecl lua_atpanic(lua_State *L, int (__cdecl *panicf)(lua_State *)))(lua_State *);
const long double *__cdecl lua_version(lua_State *L);
int __cdecl lua_absindex(lua_State *L, int idx);
int __cdecl lua_gettop(lua_State *L);
void __cdecl lua_settop(lua_State *L, int idx);
void __cdecl lua_remove(lua_State *L, int idx);
void __cdecl lua_insert(lua_State *L, int idx);
// void __usercall moveto(lua_State *L<esi>, lua_TValue *fr<edi>, int idx<ecx>);
void __cdecl lua_replace(lua_State *L, int idx);
void __cdecl lua_copy(lua_State *L, int fromidx, int toidx);
void __cdecl lua_pushvalue(lua_State *L, int idx);
int __cdecl lua_type(lua_State *L, int idx);
const char *__cdecl lua_typename(lua_State *L, int t);
int __cdecl lua_iscfunction(lua_State *L, int idx);
int __cdecl lua_isnumber(lua_State *L, int idx);
int __cdecl lua_isstring(lua_State *L, int idx);
int __cdecl lua_rawequal(lua_State *L, int index1, int index2);
int __cdecl lua_compare(lua_State *L, int index1, int index2, int op);
long double __cdecl lua_tonumberx(lua_State *L, int idx, int *isnum);
int __cdecl lua_tointegerx(lua_State *L, int idx, int *isnum);
unsigned int __cdecl lua_tounsignedx(lua_State *L, int idx, int *isnum);
int __cdecl lua_toboolean(lua_State *L, int idx);
const char *__cdecl lua_tolstring(lua_State *L, int idx, unsigned int *len);
unsigned int __cdecl lua_rawlen(lua_State *L, int idx);
void *__cdecl lua_touserdata(lua_State *L, int idx);
lua_State *__cdecl lua_tothread(lua_State *L, int idx);
const void *__cdecl lua_topointer(lua_State *L, int idx);
void __cdecl lua_pushnil(lua_State *L);
void __cdecl lua_pushnumber(lua_State *L, long double n);
void __cdecl lua_pushinteger(lua_State *L, int n);
void __cdecl lua_pushunsigned(lua_State *L, unsigned int u);
const char *__cdecl lua_pushlstring(lua_State *L, const char *s, unsigned int len);
const char *__cdecl lua_pushstring(lua_State *L, const char *s);
const char *__cdecl lua_pushvfstring(lua_State *L, const char *fmt, char *argp);
const char *__cdecl lua_pushfstring(lua_State *L, const char *fmt);
void __cdecl lua_pushcclosure(lua_State *L, int (__cdecl *fn)(lua_State *), int n);
void __cdecl lua_pushboolean(lua_State *L, int b);
void __cdecl lua_pushlightuserdata(lua_State *L, void *p);
int __cdecl lua_pushthread(lua_State *L);
void __cdecl lua_getglobal(lua_State *L, const char *var);
void __cdecl lua_gettable(lua_State *L, int idx);
void __cdecl lua_getfield(lua_State *L, int idx, const char *k);
void __cdecl lua_rawget(lua_State *L, int idx);
void __cdecl lua_rawgeti(lua_State *L, int idx, int n);
void __cdecl lua_createtable(lua_State *L, int narray, int nrec);
int __cdecl lua_getmetatable(lua_State *L, int objindex);
void __cdecl lua_getuservalue(lua_State *L, int idx);
void __cdecl lua_setglobal(lua_State *L, const char *var);
void __cdecl lua_setfield(lua_State *L, int idx, const char *k);
void __cdecl lua_rawset(lua_State *L, int idx);
void __cdecl lua_rawseti(lua_State *L, int idx, int n);
int __cdecl lua_setmetatable(lua_State *L, int objindex);
void __cdecl lua_setuservalue(lua_State *L, int idx);
int __cdecl lua_getctx(lua_State *L, int *ctx);
void __cdecl lua_callk(lua_State *L, int nargs, int nresults, int ctx, int (__cdecl *k)(lua_State *));
void __cdecl f_call(lua_State *L, void *ud);
int __cdecl lua_pcallk(lua_State *L, int nargs, int nresults, int errfunc, int ctx, int (__cdecl *k)(lua_State *));
int __cdecl lua_load(lua_State *L, const char *(__cdecl *reader)(lua_State *, void *, unsigned int *), void *data, const char *chunkname, const char *mode);
int __cdecl lua_dump(lua_State *L, int (__cdecl *writer)(lua_State *, const void *, unsigned int, void *), void *data);
int __cdecl lua_status(lua_State *L);
int __cdecl lua_gc(lua_State *L, int what, int data);
int __cdecl lua_error(lua_State *L);
int __cdecl lua_next(lua_State *L, int idx);
void __cdecl lua_concat(lua_State *L, int n);
void __cdecl lua_len(lua_State *L, int idx);
void *__cdecl lua_newuserdata(lua_State *L, unsigned int size);
// const char *__usercall aux_upvalue<eax>(lua_TValue *fi<edx>, int n<eax>, lua_TValue **val<edi>, GCObject **owner<esi>);
const char *__cdecl lua_getupvalue(lua_State *L, int funcindex, int n);
const char *__cdecl lua_setupvalue(lua_State *L, int funcindex, int n);
// UpVal **__usercall getupvalref<eax>(lua_State *L<ecx>, int fidx<eax>, int n<edi>, LClosure **pf<esi>);
void *__cdecl lua_upvalueid(lua_State *L, int fidx, int n);
void __cdecl lua_upvaluejoin(lua_State *L, int fidx1, int n1, int fidx2, int n2);
int __cdecl findfield(lua_State *L, int objidx, int level);
// int __usercall pushglobalfuncname<eax>(lua_State *L<esi>, lua_Debug *ar);
// void __usercall pushfuncname(lua_State *L<ecx>, lua_Debug *ar<eax>);
// int __usercall countlevels<eax>(lua_State *L<ecx>);
void __cdecl luaL_traceback(lua_State *L, lua_State *L1, const char *msg, int level);
void __cdecl luaL_where(lua_State *L, int level);
int __cdecl luaL_error(lua_State *L, const char *fmt);
int __cdecl luaL_fileresult(lua_State *L, int stat, const char *fname);
int __cdecl luaL_execresult(lua_State *L, int stat);
int __cdecl luaL_newmetatable(lua_State *L, const char *tname);
void __cdecl luaL_setmetatable(lua_State *L, const char *tname);
void *__cdecl luaL_testudata(lua_State *L, int ud, const char *tname);
void __cdecl luaL_checkstack(lua_State *L, int space, const char *msg);
char *__cdecl luaL_prepbuffsize(luaL_Buffer *B, unsigned int sz);
void __cdecl luaL_addlstring(luaL_Buffer *B, const char *s, unsigned int l);
void __cdecl luaL_addstring(luaL_Buffer *B, const char *s);
void __cdecl luaL_pushresult(luaL_Buffer *B);
void __cdecl luaL_pushresultsize(luaL_Buffer *B, unsigned int sz);
void __cdecl luaL_addvalue(luaL_Buffer *B);
void __cdecl luaL_buffinit(lua_State *L, luaL_Buffer *B);
char *__cdecl luaL_buffinitsize(lua_State *L, luaL_Buffer *B, unsigned int sz);
const char *__cdecl getF(lua_State *L, void *ud, unsigned int *size);
// int __usercall errfile<eax>(lua_State *L<esi>, const char *what, int fnameindex<edi>);
// int __usercall skipBOM<eax>(LoadF *lf<esi>);
// int __usercall skipcomment<eax>(LoadF *lf<eax>, int *cp<edi>);
int __cdecl luaL_loadfilex(lua_State *L, const char *filename, const char *mode);
const char *__cdecl getS(lua_State *L, void *ud, unsigned int *size);
int __cdecl luaL_loadbufferx(lua_State *L, const char *buff, unsigned int size, const char *name, const char *mode);
int __cdecl luaL_getmetafield(lua_State *L, int obj, const char *event);
int __cdecl luaL_callmeta(lua_State *L, int obj, const char *event);
int __cdecl luaL_len(lua_State *L, int idx);
const char *__cdecl luaL_tolstring(lua_State *L, int idx, unsigned int *len);
int __cdecl luaL_getsubtable(lua_State *L, int idx, const char *fname);
void __cdecl luaL_requiref(lua_State *L, const char *modname, int (__cdecl *openf)(lua_State *), int glb);
const char *__cdecl luaL_gsub(lua_State *L, const char *s, const char *p, const char *r);
void *__cdecl l_alloc(void *ud, void *ptr, unsigned int osize, unsigned int nsize);
int __cdecl panic(lua_State *L);
lua_State *__cdecl luaL_newstate();
void __cdecl luaL_checkversion_(lua_State *L, long double ver);
int __cdecl luaL_argerror(lua_State *L, int narg, const char *extramsg);
void *__cdecl luaL_checkudata(lua_State *L, int ud, const char *tname);
void __cdecl luaL_checktype(lua_State *L, int narg, int t);
void __cdecl luaL_checkany(lua_State *L, int narg);
const char *__cdecl luaL_checklstring(lua_State *L, int narg, unsigned int *len);
const char *__cdecl luaL_optlstring(lua_State *L, int narg, const char *def, unsigned int *len);
long double __cdecl luaL_checknumber(lua_State *L, int narg);
long double __cdecl luaL_optnumber(lua_State *L, int narg, long double def);
int __cdecl luaL_checkinteger(lua_State *L, int narg);
unsigned int __cdecl luaL_checkunsigned(lua_State *L, int narg);
int __cdecl luaL_optinteger(lua_State *L, int narg, int def);
void __cdecl luaL_setfuncs(lua_State *L, luaL_Reg *l, int nup);
int __cdecl luaL_checkoption(lua_State *L, int narg, const char *def, const char *const *lst);
void __cdecl luaL_openlibs(lua_State *L);
void __cdecl luaE_setdebt(global_State *g, int debt);
CallInfo *__cdecl luaE_extendCI(lua_State *L);
void __cdecl luaE_freeCI(lua_State *L);
// void __usercall stack_init(lua_State *L1<esi>, lua_State *L<eax>);
// void __usercall init_registry(lua_State *L<esi>, global_State *g<ebx>);
void __cdecl f_luaopen(lua_State *L, void *ud);
// void __usercall close_state(lua_State *L<esi>);
lua_State *__cdecl lua_newthread(lua_State *L);
void __cdecl luaE_freethread(lua_State *L, lua_State *L1);
lua_State *__cdecl lua_newstate(void *(__cdecl *f)(void *, void *, unsigned int, unsigned int), void *ud);
void __cdecl lua_close(lua_State *L);
int __cdecl luaO_int2fb(unsigned int x);
int __cdecl luaO_fb2int(int x);
int __cdecl luaO_ceillog2(unsigned int x);
long double __cdecl luaO_arith(int op, long double v1, long double v2);
int __cdecl luaO_hexavalue(int c);
// long double __usercall readhexa<edx:eax>(const char **s<ecx>, long double r, int *count<edx>);
long double __cdecl lua_strx2number(const char *s, char **endptr);
int __cdecl luaO_str2d(const char *s, unsigned int len, long double *result);
const char *__cdecl luaO_pushvfstring(lua_State *L, const char *fmt, char *argp);
const char *__cdecl luaO_pushfstring(lua_State *L, const char *fmt);
void __cdecl luaO_chunkid(char *out, const char *source, unsigned int bufflen);
// void __usercall seterrorobj(lua_State *L<edi>, int errcode<eax>, lua_TValue *oldtop<ecx>);
void __cdecl luaD_throw(lua_State *L, int errcode);
int __cdecl luaD_rawrunprotected(lua_State *L, void (__cdecl *f)(lua_State *, void *), void *ud);
void __cdecl luaD_reallocstack(lua_State *L, int newsize);
void __cdecl luaD_growstack(lua_State *L, int n);
void __cdecl luaD_shrinkstack(lua_State *L);
void __cdecl luaD_hook(lua_State *L, int event, int line);
// lua_TValue *__usercall tryfuncTM<eax>(lua_State *L<esi>, lua_TValue *func<edi>);
int __cdecl luaD_poscall(lua_State *L, lua_TValue *firstResult);
void __cdecl unroll(lua_State *L, void *ud);
// int __usercall recover<eax>(lua_State *L<eax>, int status);
// void __usercall resume_error(lua_State *L<esi>, const char *msg<eax>, lua_TValue *firstArg<edi>);
int __cdecl lua_yieldk(lua_State *L, int nresults, int ctx, int (__cdecl *k)(lua_State *));
int __cdecl luaD_pcall(lua_State *L, void (__cdecl *func)(lua_State *, void *), void *u, int old_top, int ef);
void __cdecl f_parser(lua_State *L, void *ud);
int __cdecl luaD_protectedparser(lua_State *L, Zio *z, const char *name, const char *mode);
int __cdecl luaD_precall(lua_State *L, lua_TValue *func, int nresults);
void __cdecl luaD_call(lua_State *L, lua_TValue *func, int nResults, int allowyield);
void __cdecl resume(lua_State *L, void *ud);
int __cdecl lua_resume(lua_State *L, lua_State *from, int nargs);
void __cdecl luaC_barrierback_(lua_State *L, GCObject *o);
GCObject *__cdecl luaC_newobj(lua_State *L, int tt, unsigned int sz, GCObject **list, int offset);
void __cdecl reallymarkobject(global_State *g, GCObject *o);
// void __usercall markmt(global_State *g<edi>);
// void __usercall markbeingfnz(global_State *g<edi>);
// void __usercall remarkupvals(global_State *g<edi>);
// void __usercall restartcollection(global_State *g<eax>);
// void __usercall traversestrongtable(global_State *g, Table *h<eax>);
// int __usercall traverseproto<eax>(global_State *g, Proto *f<esi>);
// unsigned int __usercall traverseCclosure<eax>(global_State *g<edi>, CClosure *cl);
// unsigned int __usercall traverseLclosure<eax>(global_State *g<edi>, LClosure *cl);
// unsigned int __usercall traversestack<eax>(global_State *g, lua_State *th<edi>);
// void __usercall freeobj(lua_State *L<ecx>, GCObject *o<eax>);
GCObject **__cdecl sweeplist(lua_State *L, GCObject **p, unsigned int count);
// GCObject **__usercall sweeptolive<eax>(lua_State *L, GCObject **p<eax>, int *n);
// void __usercall checkSizes(lua_State *L<edi>);
void __cdecl dothecall(lua_State *L, void *ud);
// void __usercall GCTM(lua_State *L<esi>, int propagateerrors);
void __cdecl luaC_checkfinalizer(lua_State *L, GCObject *o, Table *mt);
// int __usercall entersweep<eax>(lua_State *L<edi>);
// void __usercall callallpendingfinalizers(lua_State *L<esi>, int propagateerrors);
void __cdecl luaC_freeallobjects(lua_State *L);
void __cdecl luaC_barrier_(lua_State *L, GCObject *o, GCObject *v);
void __cdecl luaC_barrierproto_(lua_State *L, Proto *p, Closure *c);
void __cdecl luaC_checkupvalcolor(global_State *g, UpVal *uv);
// void __usercall traverseweakvalue(global_State *g, Table *h<edi>);
// int __usercall traverseephemeron<eax>(global_State *g, Table *h<edi>);
// unsigned int __usercall traversetable<eax>(global_State *g, Table *h<eax>);
// void __usercall propagatemark(global_State *g<ebx>);
// void __usercall propagateall(global_State *g<ebx>);
// void __usercall convergeephemerons(global_State *g<eax>);
// void __usercall clearkeys(global_State *g, GCObject *l<eax>, GCObject *f);
// void __usercall clearvalues(global_State *g, GCObject *l<eax>, GCObject *f);
int __cdecl atomic(lua_State *L);
// unsigned int __usercall singlestep<eax>(lua_State *L<eax>);
void __cdecl luaC_runtilstate(lua_State *L, int statesmask);
void __cdecl incstep(lua_State *L);
void __cdecl luaC_fullgc(lua_State *L, int isemergency);
void __cdecl luaC_changemode(lua_State *L, int mode);
// void __usercall generationalcollection(lua_State *L<eax>);
void __cdecl luaC_forcestep(lua_State *L);
void __cdecl luaC_step(lua_State *L);
void __cdecl luaT_init(lua_State *L);
lua_TValue *__cdecl luaT_gettm(Table *events, TMS event, TString *ename);
lua_TValue *__cdecl luaT_gettmbyobj(lua_State *L, lua_TValue *o, TMS event);
lua_TValue *__cdecl luaV_tonumber(lua_TValue *obj, lua_TValue *n);
int __cdecl luaV_tostring(lua_State *L, lua_TValue *obj);
// void __usercall callTM(lua_State *L<eax>, lua_TValue *f, lua_TValue *p1<edx>, lua_TValue *p2<ecx>, lua_TValue *p3, int hasres);
void __cdecl luaV_gettable(lua_State *L, lua_TValue *t, lua_TValue *key, lua_TValue *val);
void __cdecl luaV_settable(lua_State *L, lua_TValue *t, lua_TValue *key, lua_TValue *val);
// int __usercall call_binTM<eax>(lua_State *L<ecx>, lua_TValue *p1<ebx>, lua_TValue *p2, lua_TValue *res<eax>, TMS event);
// lua_TValue *__usercall get_equalTM<eax>(lua_State *L, Table *mt1<edi>, Table *mt2, TMS event<esi>);
// int __usercall l_strcmp<eax>(TString *ls<ecx>, TString *rs<eax>);
int __cdecl luaV_lessthan(lua_State *L, lua_TValue *l, lua_TValue *r);
int __cdecl luaV_lessequal(lua_State *L, lua_TValue *l, lua_TValue *r);
int __cdecl luaV_equalobj_(lua_State *L, lua_TValue *t1, lua_TValue *t2);
void __cdecl luaV_concat(lua_State *L, int total);
void __cdecl luaV_objlen(lua_State *L, lua_TValue *ra, lua_TValue *rb);
void __cdecl luaV_arith(lua_State *L, lua_TValue *ra, lua_TValue *rb, lua_TValue *rc, TMS op);
// Closure *__usercall getcached<eax>(Proto *p<ecx>, UpVal **encup, lua_TValue *base);
// void __usercall pushclosure(lua_State *L, Proto *p, UpVal **encup, lua_TValue *base, lua_TValue *ra<eax>);
void __cdecl luaV_finishOp(lua_State *L);
void __cdecl luaV_execute(lua_State *L);
int __cdecl loc_74C691(int L); // weak
// Node *__usercall hashnum<eax>(Table *t<esi>, long double n);
// Node *__usercall mainposition<eax>(Table *t<eax>, lua_TValue *key<edi>);
// int __usercall findindex<eax>(lua_State *L, Table *t<ebx>, lua_TValue *key<eax>);
int __cdecl luaH_next(lua_State *L, Table *t, lua_TValue *key);
int __cdecl computesizes(int *nums, int *narray);
int __cdecl numusearray(Table *t, int *nums);
// int __usercall numusehash<eax>(Table *t<ebx>, int *nums, int *pnasize);
// void __usercall setarrayvector(lua_State *L<eax>, Table *t<esi>, int size<edi>);
// void __usercall setnodevector(lua_State *L<ecx>, Table *t<edi>, int size<eax>);
Table *__cdecl luaH_new(lua_State *L);
void __cdecl luaH_free(lua_State *L, Table *t);
lua_TValue *__cdecl luaH_getint(Table *t, int key);
lua_TValue *__cdecl luaH_getstr(Table *t, TString *key);
lua_TValue *__cdecl luaH_get(Table *t, lua_TValue *key);
lua_TValue *__cdecl luaH_set(lua_State *L, Table *t, lua_TValue *key);
// int __usercall unbound_search<eax>(Table *t<ebx>, unsigned int j);
int __cdecl luaH_getn(Table *t);
void __cdecl luaH_resize(lua_State *L, Table *t, int nasize, int nhsize);
void __cdecl luaH_resizearray(lua_State *L, Table *t, int nasize);
// void __usercall rehash(lua_State *L, Table *t<ecx>, lua_TValue *ek<edi>);
lua_TValue *__cdecl luaH_newkey(lua_State *L, Table *t, lua_TValue *key);
void __cdecl luaH_setint(lua_State *L, Table *t, int key, lua_TValue *value);
// int __usercall currentline<eax>(CallInfo *ci<ecx>);
int __cdecl lua_sethook(lua_State *L, void (__cdecl *func)(lua_State *, lua_Debug *), int mask, int count);
void (__cdecl *__cdecl lua_gethook(lua_State *L))(lua_State *, lua_Debug *);
int __cdecl lua_gethookmask(lua_State *L);
int __cdecl lua_gethookcount(lua_State *L);
int __cdecl lua_getstack(lua_State *L, int level, lua_Debug *ar);
// const char *__usercall findlocal<eax>(lua_State *L, CallInfo *ci<esi>, int n<eax>, lua_TValue **pos);
const char *__cdecl lua_getlocal(lua_State *L, lua_Debug *ar, int n);
const char *__cdecl lua_setlocal(lua_State *L, lua_Debug *ar, int n);
// void __usercall funcinfo(lua_Debug *ar<eax>, Closure *cl<ecx>);
// void __usercall collectvalidlines(lua_State *L<esi>, Closure *f<ebx>);
// void __usercall kname(Proto *p<ecx>, int pc, int c<eax>, const char **name<esi>);
// int __usercall findsetreg<eax>(Proto *p, int lastpc, int reg<eax>);
const char *__cdecl getobjname(Proto *p, int lastpc, int reg, const char **name);
// const char *__usercall getfuncname<eax>(lua_State *L, CallInfo *ci<eax>, const char **name<edi>);
// const char *__usercall getupvalname<eax>(CallInfo *ci<eax>, lua_TValue *o<edi>, const char **name);
// void __usercall addinfo(lua_State *L<edi>, const char *msg<ebx>);
void __cdecl luaG_errormsg(lua_State *L);
void __cdecl luaG_runerror(lua_State *L, const char *fmt);
// int __usercall auxgetinfo<eax>(lua_State *L, const char *what, lua_Debug *ar<esi>, Closure *f, CallInfo *ci<ebx>);
int __cdecl lua_getinfo(lua_State *L, const char *what, lua_Debug *ar);
void __cdecl luaG_typeerror(lua_State *L, lua_TValue *o, const char *op);
void __cdecl luaG_concaterror(lua_State *L, lua_TValue *p1, lua_TValue *p2);
void __cdecl luaG_aritherror(lua_State *L, lua_TValue *p1, lua_TValue *p2);
void __cdecl luaG_ordererror(lua_State *L, lua_TValue *p1, lua_TValue *p2);
int __cdecl luaS_eqlngstr(TString *a, TString *b);
int __cdecl luaS_eqstr(TString *a, TString *b);
unsigned int __cdecl luaS_hash(const char *str, unsigned int l, unsigned int seed);
void __cdecl luaS_resize(lua_State *L, int newsize);
// TString *__usercall internshrstr<eax>(lua_State *L, const char *str, unsigned int l<edi>);
TString *__cdecl luaS_newlstr(lua_State *L, const char *str, unsigned int l);
TString *__cdecl luaS_new(lua_State *L, const char *str);
Udata *__cdecl luaS_newudata(lua_State *L, unsigned int s, Table *e);
Closure *__cdecl luaF_newCclosure(lua_State *L, int n);
Closure *__cdecl luaF_newLclosure(lua_State *L, int n);
UpVal *__cdecl luaF_newupval(lua_State *L);
UpVal *__cdecl luaF_findupval(lua_State *L, lua_TValue *level);
void __cdecl luaF_freeupval(lua_State *L, UpVal *uv);
void __cdecl luaF_close(lua_State *L, lua_TValue *level);
Proto *__cdecl luaF_newproto(lua_State *L);
void __cdecl luaF_freeproto(lua_State *L, Proto *f);
const char *__cdecl luaF_getlocalname(Proto *f, int local_number, int pc);
int __cdecl luaZ_fill(Zio *z);
void __cdecl luaZ_init(lua_State *L, Zio *z, const char *(__cdecl *reader)(lua_State *, void *, unsigned int *), void *data);
unsigned int __cdecl luaZ_read(Zio *z, void *b, unsigned int n);
char *__cdecl luaZ_openspace(lua_State *L, Mbuffer *buff, unsigned int n);
// void __usercall DumpString(TString *s<eax>, DumpState *D<esi>);
// void __usercall DumpConstants(Proto *f, DumpState *D<eax>);
// void __usercall DumpUpvalues(Proto *f<ebx>, DumpState *D<esi>);
// void __usercall DumpDebug(Proto *f, DumpState *D<eax>);
void __cdecl DumpFunction(Proto *f, DumpState *D);
int __cdecl luaU_dump(lua_State *L, Proto *f, int (__cdecl *w)(lua_State *, const void *, unsigned int, void *), void *data, int strip);
int __cdecl db_getregistry(lua_State *L);
int __cdecl db_getmetatable(lua_State *L);
int __cdecl db_setmetatable(lua_State *L);
int __cdecl db_getuservalue(lua_State *L);
int __cdecl db_setuservalue(lua_State *L);
// void __usercall treatstackoption(lua_State *L<esi>, lua_State *L1<eax>, const char *fname);
int __cdecl db_getinfo(lua_State *L);
int __cdecl db_getlocal(lua_State *L);
int __cdecl db_setlocal(lua_State *L);
int __cdecl db_getupvalue(lua_State *L);
int __cdecl db_setupvalue(lua_State *L);
int __cdecl db_upvalueid(lua_State *L);
int __cdecl db_upvaluejoin(lua_State *L);
void __cdecl hookf(lua_State *L, lua_Debug *ar);
int __cdecl db_sethook(lua_State *L);
int __cdecl db_gethook(lua_State *L);
int __cdecl db_debug(lua_State *L);
int __cdecl db_traceback(lua_State *L);
int __cdecl luaopen_debug(lua_State *L);
int __cdecl math_abs(lua_State *L);
int __cdecl math_sin(lua_State *L);
int __cdecl math_sinh(lua_State *L);
int __cdecl math_cos(lua_State *L);
int __cdecl math_cosh(lua_State *L);
int __cdecl math_tan(lua_State *L);
int __cdecl math_tanh(lua_State *L);
int __cdecl math_asin(lua_State *L);
int __cdecl math_acos(lua_State *L);
int __cdecl math_atan(lua_State *L);
int __cdecl math_atan2(lua_State *L);
int __cdecl math_ceil(lua_State *L);
int __cdecl math_floor(lua_State *L);
int __cdecl math_fmod(lua_State *L);
int __cdecl math_modf(lua_State *L);
int __cdecl math_sqrt(lua_State *L);
int __cdecl math_pow(lua_State *L);
int __cdecl math_log(lua_State *L);
int __cdecl loc_750F73(int L); // weak
int __cdecl math_exp(lua_State *L);
int __cdecl math_deg(lua_State *L);
int __cdecl math_rad(lua_State *L);
int __cdecl math_frexp(lua_State *L);
int __cdecl math_ldexp(lua_State *L);
int __cdecl math_min(lua_State *L);
int __cdecl math_max(lua_State *L);
int __cdecl math_random(lua_State *L);
int __cdecl math_randomseed(lua_State *L);
int __cdecl luaopen_math(lua_State *L);
int __cdecl b_and(lua_State *L);
int __cdecl b_test(lua_State *L);
int __cdecl b_or(lua_State *L);
int __cdecl b_xor(lua_State *L);
int __cdecl b_not(lua_State *L);
int __cdecl b_lshift(lua_State *L);
int __cdecl b_rshift(lua_State *L);
int __cdecl b_arshift(lua_State *L);
int __cdecl b_lrot(lua_State *L);
int __cdecl b_rrot(lua_State *L);
// int __usercall fieldargs<eax>(lua_State *L<esi>, int farg<ebx>, int *width);
int __cdecl b_extract(lua_State *L);
int __cdecl b_replace(lua_State *L);
int __cdecl luaopen_bit32(lua_State *L);
int __cdecl str_len(lua_State *L);
int __cdecl str_sub(lua_State *L);
int __cdecl str_reverse(lua_State *L);
int __cdecl str_lower(lua_State *L);
int __cdecl str_upper(lua_State *L);
int __cdecl str_rep(lua_State *L);
int __cdecl str_byte(lua_State *L);
int __cdecl str_char(lua_State *L);
int __cdecl writer(lua_State *L, const void *b, unsigned int size, void *B);
int __cdecl str_dump(lua_State *L);
// const char *__usercall classend<eax>(MatchState *ms<edi>, const char *p<eax>);
// int __usercall match_class<eax>(int c<eax>, int cl<edi>);
// int __usercall matchbracketclass<eax>(int c<ebx>, const char *p<eax>, const char *ec);
// const char *__usercall matchbalance<eax>(MatchState *ms<ebx>, const char *s<ecx>, const char *p<eax>);
const char *__cdecl max_expand(MatchState *ms, const char *s, const char *p, const char *ep);
// const char *__usercall min_expand<eax>(MatchState *ms, const char *s<eax>, const char *p, const char *ep);
// const char *__usercall start_capture<eax>(MatchState *ms<esi>, const char *s<ebx>, const char *p, int what);
// const char *__usercall end_capture<eax>(MatchState *ms<esi>, const char *s<ebx>, const char *p);
// const char *__usercall match_capture<eax>(MatchState *ms<ecx>, const char *s<ebx>, int l<eax>);
const char *__cdecl match(MatchState *ms, const char *s, const char *p);
// const char *__usercall lmemfind<eax>(const char *s1, unsigned int l1, const char *s2, unsigned int l2<eax>);
// void __usercall push_onecapture(MatchState *ms<esi>, int i<edi>, const char *s<ecx>, const char *e<eax>);
// int __usercall push_captures<eax>(MatchState *ms<esi>, const char *s, const char *e);
// int __usercall nospecials<eax>(const char *p, unsigned int l<ebx>);
// int __usercall str_find_aux<eax>(lua_State *L<ecx>, int find);
int __cdecl str_find(lua_State *L);
int __cdecl str_match(lua_State *L);
int __cdecl gmatch_aux(lua_State *L);
int __cdecl gmatch(lua_State *L);
// void __usercall add_s(MatchState *ms, luaL_Buffer *b<ebx>, const char *s, const char *e);
// void __usercall add_value(MatchState *ms<edx>, luaL_Buffer *b, const char *s, const char *e<ecx>, int tr<eax>);
int __cdecl str_gsub(lua_State *L);
// void __usercall addquoted(lua_State *L, luaL_Buffer *b<esi>, int arg<ecx>);
// const char *__usercall scanformat<eax>(lua_State *L<eax>, const char *strfrmt<ebx>, char *form);
// void __usercall addlenmod(char *form, const char *lenmod<ecx>);
int __cdecl str_format(lua_State *L);
int __cdecl luaopen_string(lua_State *L);
int __cdecl os_execute(lua_State *L);
int __cdecl os_remove(lua_State *L);
int __cdecl os_rename(lua_State *L);
int __cdecl os_tmpname(lua_State *L);
int __cdecl os_getenv(lua_State *L);
int __cdecl os_clock(lua_State *L);
// const char *__usercall checkoption<eax>(lua_State *L, const char *conv<esi>, char *buff<ebx>);
int __cdecl os_date(lua_State *L);
int __cdecl os_time(lua_State *L);
int __cdecl os_difftime(lua_State *L);
int __cdecl os_setlocale(lua_State *L);
int __cdecl os_exit(lua_State *L);
int __cdecl luaopen_os(lua_State *L);
int __cdecl io_type(lua_State *L);
int __cdecl f_tostring(lua_State *L);
int __cdecl io_close(lua_State *L);
int __cdecl f_gc(lua_State *L);
int __cdecl io_fclose(lua_State *L);
// void __usercall opencheck(lua_State *L<edi>, const char *fname<ebx>, const char *mode);
int __cdecl io_open(lua_State *L);
int __cdecl io_pclose(lua_State *L);
int __cdecl io_popen(lua_State *L);
int __cdecl io_tmpfile(lua_State *L);
// int __usercall g_iofile<eax>(lua_State *L<eax>, const char *f<esi>, const char *mode);
int __cdecl io_input(lua_State *L);
int __cdecl io_output(lua_State *L);
// int __usercall read_number<eax>(lua_State *L<esi>, _iobuf *f<ecx>);
// int __usercall read_line<eax>(lua_State *L<ebx>, _iobuf *f<edi>, int chop);
// void __usercall read_all(lua_State *L, _iobuf *f<edi>);
// int __usercall g_read<eax>(lua_State *L<ecx>, _iobuf *f<edx>, int first);
int __cdecl io_read(lua_State *L);
int __cdecl f_read(lua_State *L);
int __cdecl io_readline(lua_State *L);
// int __usercall g_write<eax>(lua_State *L<ebx>, _iobuf *f, int arg<eax>);
int __cdecl io_write(lua_State *L);
int __cdecl f_write(lua_State *L);
int __cdecl f_seek(lua_State *L);
int __cdecl f_setvbuf(lua_State *L);
int __cdecl io_flush(lua_State *L);
int __cdecl f_flush(lua_State *L);
int __cdecl io_noclose(lua_State *L);
int __cdecl luaopen_io(lua_State *L);
// void __usercall aux_lines(lua_State *L<edi>, int toclose);
int __cdecl f_lines(lua_State *L);
int __cdecl io_lines(lua_State *L);
int __cdecl tinsert(lua_State *L);
int __cdecl tremove(lua_State *L);
int __cdecl tconcat(lua_State *L);
int __cdecl pack(lua_State *L);
int __cdecl unpack(lua_State *L);
void __cdecl auxsort(lua_State *L, int l, int u);
int __cdecl sort(lua_State *L);
int __cdecl luaopen_table(lua_State *L);
// int __usercall auxresume<eax>(lua_State *L<edi>, lua_State *co<esi>, int narg<eax>);
int __cdecl luaB_coresume(lua_State *L);
int __cdecl luaB_auxwrap(lua_State *L);
int __cdecl luaB_cocreate(lua_State *L);
int __cdecl luaB_cowrap(lua_State *L);
int __cdecl luaB_yield(lua_State *L);
int __cdecl luaB_costatus(lua_State *L);
int __cdecl luaB_corunning(lua_State *L);
int __cdecl luaopen_coroutine(lua_State *L);
// void __usercall setprogdir(lua_State *L<esi>);
// void __usercall pusherror(lua_State *L<edi>);
// void __usercall ll_addtoclib(lua_State *L<esi>, const char *path, void *plib);
int __cdecl gctm(lua_State *L);
// int __usercall ll_loadfunc<eax>(lua_State *L<eax>, const char *path, const char *sym);
int __cdecl ll_loadlib(lua_State *L);
// const char *__usercall searchpath<eax>(lua_State *L<esi>, const char *name, const char *path<ecx>, const char *sep<edx>, const char *dirsep);
int __cdecl ll_searchpath(lua_State *L);
int __cdecl searcher_Lua(lua_State *L);
// int __usercall loadfunc<eax>(lua_State *L<esi>, const char *filename, const char *modname<eax>);
int __cdecl searcher_C(lua_State *L);
int __cdecl searcher_Croot(lua_State *L);
int __cdecl searcher_preload(lua_State *L);
// void __usercall findloader(lua_State *L<esi>, const char *name<edi>);
int __cdecl ll_require(lua_State *L);
// void __usercall setpath(lua_State *L<ecx>, const char *fieldname, const char *envname1<eax>, const char *envname2, const char *def);
// void __usercall createsearcherstable(lua_State *L<edi>);
int __cdecl luaopen_package(lua_State *L);
int __cdecl luaB_print(lua_State *L);
int __cdecl luaB_tonumber(lua_State *L);
int __cdecl luaB_error(lua_State *L);
int __cdecl luaB_getmetatable(lua_State *L);
int __cdecl luaB_setmetatable(lua_State *L);
int __cdecl luaB_rawequal(lua_State *L);
int __cdecl luaB_rawlen(lua_State *L);
int __cdecl luaB_rawget(lua_State *L);
int __cdecl luaB_rawset(lua_State *L);
int __cdecl luaB_collectgarbage(lua_State *L);
int __cdecl luaB_type(lua_State *L);
int __cdecl luaB_next(lua_State *L);
int __cdecl luaB_pairs(lua_State *L);
int __cdecl ipairsaux(lua_State *L);
int __cdecl luaB_ipairs(lua_State *L);
int __cdecl luaB_loadfile(lua_State *L);
const char *__cdecl generic_reader(lua_State *L, void *ud, unsigned int *size);
int __cdecl luaB_load(lua_State *L);
int __cdecl dofilecont(lua_State *L);
int __cdecl luaB_dofile(lua_State *L);
int __cdecl luaB_assert(lua_State *L);
int __cdecl luaB_select(lua_State *L);
int __cdecl pcallcont(lua_State *L);
int __cdecl luaB_pcall(lua_State *L);
int __cdecl luaB_xpcall(lua_State *L);
int __cdecl luaB_tostring(lua_State *L);
int __cdecl luaopen_base(lua_State *L);
void __cdecl luaM_toobig(lua_State *L);
void *__cdecl luaM_realloc_(lua_State *L, void *block, unsigned int osize, unsigned int nsize);
void *__cdecl luaM_growaux_(lua_State *L, void *block, int *size, unsigned int size_elems, int limit, const char *what);
// void __usercall sub_757A10(LexState *ls<ecx>, int c);
void __cdecl luaX_init(lua_State *L);
const char *__cdecl luaX_token2str(LexState *ls, int token);
void __cdecl lexerror(LexState *ls, const char *msg, int token);
void __cdecl luaX_syntaxerror(LexState *ls, const char *msg);
TString *__cdecl luaX_newstring(LexState *ls, const char *str, unsigned int l);
// void __usercall inclinenumber(LexState *ls<esi>);
void __cdecl luaX_setinput(lua_State *L, LexState *ls, Zio *z, TString *source, int firstchar);
// int __usercall check_next<eax>(LexState *ls<esi>, const char *set);
// void __usercall trydecpoint(LexState *ls<esi>, SemInfo *seminfo);
// void __usercall read_numeral(LexState *ls<eax>, SemInfo *seminfo);
// int __usercall skip_sep<eax>(LexState *ls<edi>);
// void __usercall read_long_string(LexState *ls<eax>, SemInfo *seminfo, int sep);
void __cdecl escerror(LexState *ls, int *c, int n, const char *msg);
// int __usercall readhexaesc<eax>(LexState *ls<esi>);
// int __usercall readdecesc<eax>(LexState *ls<esi>);
// void __usercall read_string(LexState *ls<eax>, int del, SemInfo *seminfo);
// int __usercall llex<eax>(LexState *ls<eax>, SemInfo *seminfo);
void __cdecl luaX_next(LexState *ls);
int __cdecl luaX_lookahead(LexState *ls);
// void __usercall error_expected(LexState *ls<esi>, int token<eax>);
// void __usercall errorlimit(FuncState *fs<esi>, int limit, const char *what);
// int __usercall testnext<eax>(LexState *ls<eax>, int c);
// TString *__usercall str_checkname<eax>(LexState *ls<eax>);
// void __usercall codestring(LexState *ls<ecx>, expdesc *e<esi>, TString *s<eax>);
int __cdecl registerlocalvar(LexState *ls, TString *varname);
// void __usercall new_localvar(LexState *ls<ebx>, TString *name<eax>);
// void __usercall adjustlocalvars(LexState *ls<eax>, int nvars<edx>);
// void __usercall removevars(FuncState *fs<eax>, int tolevel<edx>);
// int __usercall searchupvalue<eax>(FuncState *fs<edi>, TString *name);
// int __usercall newupvalue<eax>(FuncState *fs<eax>, TString *name, expdesc *v);
// int __usercall searchvar<eax>(FuncState *fs<esi>, TString *n<ebx>);
int __cdecl singlevaraux(FuncState *fs, TString *n, expdesc *var, int base);
// void __usercall singlevar(LexState *ls<ecx>, expdesc *var<ebx>);
// void __usercall adjust_assign(LexState *ls<eax>, int nvars<edx>, int nexps, expdesc *e<ecx>);
// void __usercall closegoto(LexState *ls<eax>, int g, Labeldesc *label<ebx>);
// int __usercall findlabel<eax>(LexState *ls<ebx>, int g);
// int __usercall newlabelentry<eax>(LexState *ls<ebx>, Labellist *l<esi>, TString *name, int line, int pc);
void __cdecl findgotos(LexState *ls, Labeldesc *lb);
void __cdecl movegotosout(FuncState *fs, BlockCnt *bl);
// void __usercall breaklabel(LexState *ls<edi>);
// void __usercall undefgoto(LexState *ls<esi>, Labeldesc *gt<edx>);
// void __usercall leaveblock(FuncState *fs<eax>);
// Proto *__usercall addprototype<eax>(LexState *ls<eax>);
// void __usercall open_func(LexState *ls<eax>, FuncState *fs<esi>, BlockCnt *bl);
void __cdecl close_func(LexState *ls);
// int __usercall block_follow<eax>(LexState *ls<eax>, int withuntil);
// void __usercall fieldsel(LexState *ls<ecx>, expdesc *v<edi>);
// void __usercall recfield(LexState *ls<ecx>, ConsControl *cc<ebx>);
// void __usercall lastlistfield(FuncState *fs<edi>, ConsControl *cc<esi>);
// void __usercall constructor(LexState *ls<ecx>, expdesc *t<edx>);
// void __usercall parlist(LexState *ls<eax>);
// void __usercall body(LexState *ls<eax>, expdesc *e<edi>, int ismethod, int line);
// int __usercall explist<eax>(LexState *ls<esi>, expdesc *v<edi>);
// void __usercall funcargs(LexState *ls<ecx>, expdesc *f, int line);
// void __usercall primaryexp(LexState *ls<ecx>, expdesc *v<eax>);
// void __usercall suffixedexp(LexState *ls<ecx>, expdesc *v<edi>);
// void __usercall simpleexp(LexState *ls<ebx>, expdesc *v<eax>);
// BinOpr __usercall getbinopr<eax>(int op<eax>);
BinOpr __cdecl subexpr(LexState *ls, expdesc *v, int limit);
// void __usercall block(LexState *ls<eax>);
// void __usercall check_conflict(LexState *ls<ecx>, LHS_assign *lh<eax>, expdesc *v<esi>);
void __cdecl assignment(LexState *ls, LHS_assign *lh, int nvars);
// void __usercall gotostat(LexState *ls<eax>, int pc);
// void __usercall labelstat(LexState *ls<eax>, TString *label, int line);
// void __usercall whilestat(LexState *ls<ecx>, int line);
// void __usercall repeatstat(LexState *ls<ecx>, int line);
// void __usercall forbody(LexState *ls<eax>, int base, int line, int nvars, int isnum);
// void __usercall fornum(LexState *ls<ecx>, TString *varname<edx>, int line);
// void __usercall forlist(LexState *ls<ecx>, TString *indexname<edx>);
// void __usercall forstat(LexState *ls<eax>, int line);
// void __usercall test_then_block(LexState *ls<ecx>, int *escapelist);
// void __usercall ifstat(LexState *ls<eax>, int line<ebx>);
// void __usercall localfunc(LexState *ls<ecx>);
// void __usercall localstat(LexState *ls<ecx>);
// int __usercall funcname<eax>(LexState *ls<ecx>, expdesc *v<edx>);
// void __usercall funcstat(LexState *ls<esi>, int line<ebx>);
// void __usercall exprstat(LexState *ls<esi>);
// void __usercall retstat(LexState *ls<ecx>);
void __cdecl statement(LexState *ls);
void __cdecl statlist(LexState *ls);
// void __usercall mainfunc(LexState *ls<edi>, FuncState *fs<eax>);
Closure *__cdecl luaY_parser(lua_State *L, Zio *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar);
// void __usercall error_0(LoadState *S<esi>, const char *why<eax>);
// TString *__usercall LoadString<eax>(LoadState *S<eax>);
// void __usercall LoadCode(LoadState *S<eax>, Proto *f);
// void __usercall LoadConstants(LoadState *S<eax>, Proto *f<edi>);
// void __usercall LoadUpvalues(LoadState *S, Proto *f<eax>);
// void __usercall LoadDebug(LoadState *S<eax>, Proto *f<edi>);
void __cdecl LoadFunction(LoadState *S, Proto *f);
void __cdecl luaU_header(char *h);
// void __usercall LoadHeader(LoadState *S<ecx>);
Closure *__cdecl luaU_undump(lua_State *L, Zio *Z, Mbuffer *buff, const char *name);
int __cdecl luaK_getlabel(FuncState *fs);
// int __usercall need_value<eax>(FuncState *fs<eax>, int list<edx>);
// void __usercall removevalues(FuncState *fs<edx>, int list<eax>);
// void __usercall patchlistaux(FuncState *fs, int list<eax>, int vtarget, int reg, int dtarget);
void __cdecl luaK_patchclose(FuncState *fs, int list, int level);
void __cdecl luaK_concat(FuncState *fs, int *l1, int l2);
// int __usercall luaK_code<eax>(FuncState *fs<esi>, unsigned int i);
int __cdecl luaK_codeABC(FuncState *fs, OpCode o, int a, int b, int c);
int __cdecl luaK_codeABx(FuncState *fs, OpCode o, int a, unsigned int bc);
int __cdecl luaK_codek(FuncState *fs, int reg, int k);
void __cdecl luaK_checkstack(FuncState *fs, int n);
void __cdecl luaK_reserveregs(FuncState *fs, int n);
// void __usercall freeexp(FuncState *fs<ecx>, expdesc *e<eax>);
// int __usercall addk<eax>(FuncState *fs, lua_TValue *key<ecx>, lua_TValue *v);
int __cdecl luaK_stringK(FuncState *fs, TString *s);
int __cdecl luaK_numberK(FuncState *fs, long double r);
void __cdecl luaK_setreturns(FuncState *fs, expdesc *e, int nresults);
void __cdecl luaK_setoneret(FuncState *fs, expdesc *e);
void __cdecl luaK_dischargevars(FuncState *fs, expdesc *e);
// void __usercall invertjump(FuncState *fs<ecx>, expdesc *e<eax>);
// int __usercall constfolding<eax>(OpCode op<edx>, expdesc *e1<esi>, expdesc *e2<ecx>);
void __cdecl luaK_fixline(FuncState *fs, int line);
void __cdecl luaK_setlist(FuncState *fs, int base, int nelems, int tostore);
void __cdecl luaK_nil(FuncState *fs, int from, int n);
int __cdecl luaK_jump(FuncState *fs);
void __cdecl luaK_ret(FuncState *fs, int first, int nret);
void __cdecl luaK_patchtohere(FuncState *fs, int list);
// void __usercall discharge2reg(FuncState *fs<eax>, expdesc *e<ebx>, int reg<edi>);
// void __usercall discharge2anyreg(FuncState *fs<eax>, expdesc *e<ecx>);
// void __usercall exp2reg(FuncState *fs<ecx>, expdesc *e<eax>, int reg);
void __cdecl luaK_exp2nextreg(FuncState *fs, expdesc *e);
int __cdecl luaK_exp2anyreg(FuncState *fs, expdesc *e);
void __cdecl luaK_exp2anyregup(FuncState *fs, expdesc *e);
void __cdecl luaK_exp2val(FuncState *fs, expdesc *e);
int __cdecl luaK_exp2RK(FuncState *fs, expdesc *e);
void __cdecl luaK_storevar(FuncState *fs, expdesc *var, expdesc *ex);
void __cdecl luaK_self(FuncState *fs, expdesc *e, expdesc *key);
// int __usercall jumponcond<eax>(FuncState *fs<ecx>, expdesc *e<eax>, int cond);
void __cdecl luaK_goiftrue(FuncState *fs, expdesc *e);
void __cdecl luaK_goiffalse(FuncState *fs, expdesc *e);
// void __usercall codenot(FuncState *fs<eax>, expdesc *e<edi>);
void __cdecl luaK_indexed(FuncState *fs, expdesc *t, expdesc *k);
// void __usercall codearith(FuncState *fs<edi>, OpCode op, expdesc *e1<ebx>, expdesc *e2, int line);
// void __usercall codecomp(FuncState *fs<ecx>, OpCode op, int cond, expdesc *e1, expdesc *e2<eax>);
void __cdecl luaK_prefix(FuncState *fs, UnOpr op, expdesc *e, int line);
void __cdecl luaK_infix(FuncState *fs, BinOpr op, expdesc *v);
void __cdecl luaK_posfix(FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2, int line);
void __cdecl luaK_patchlist(FuncState *fs, int list, int target);
// BOOL __stdcall Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte);
// BOOL __stdcall Thread32First(HANDLE hSnapshot, LPTHREADENTRY32 lpte);
// HANDLE __stdcall CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID);
// BOOL __stdcall Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
// BOOL __stdcall Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
// int __userpurge ijlInit<eax>(int a1<eax>, int a2);
signed int __cdecl sub_75F656();
// int __userpurge ijlFree<eax>(int a1<eax>, int a2);
signed int __cdecl sub_75F909();
signed int __cdecl CheckParameters(struct _JPEG_CORE_PROPERTIES *a1);
// int __userpurge ijlRead<eax>(int a1<eax>, struct _JPEG_CORE_PROPERTIES *a2, _IJLIOTYPE a3);
signed int __cdecl sub_760B5D();
// int __userpurge ijlWrite<eax>(int a1<eax>, struct _JPEG_CORE_PROPERTIES *a2, _IJLIOTYPE a3);
signed int __cdecl sub_761572();
int __stdcall ijlErrorStr(int a1);
int sub_7616D0(); // weak
int sub_7616F0(); // weak
HINSTANCE__ *__cdecl sub_761700(int a1);
int __cdecl sub_761780(int a1);
HINSTANCE__ *__cdecl sub_7617C0(int a1);
int __cdecl sub_761820(int a1);
signed int (__cdecl *__cdecl sub_761850(int a1))(int, int);
int (__cdecl *__cdecl sub_761A80(int a1))(int, int);
int (__cdecl *__cdecl sub_761CB0(int a1))(int, int);
int (__cdecl *__cdecl sub_761EE0(int a1))(int, int);
int (__cdecl *__cdecl sub_762110(int a1))(int, int);
signed int __cdecl ownQueryProcessorType(int a1);
signed int __cdecl ownInitializeLibrary(int a1);
int __cdecl ownFreeLibrary(int a1);
__int64 __cdecl ownRDTSCs();
int ownEMMSs(); // weak
// void __usercall sub_7624F0(int a1<eax>);
int loc_7625A9(); // weak
// void __usercall sub_7625C3(int a1<ebp>);
signed int __cdecl sub_762643();
int *__cdecl ownGetProcessorInfo();
// signed int __usercall ownGetProcessorType<eax>(int a1<eax>, int a2);
HANDLE __cdecl ownOpenFile(LPCSTR lpFileName, DWORD dwDesiredAccess);
int __cdecl ownCloseFile(HANDLE hObject); // idb
int __cdecl ownReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead); // idb
int __cdecl ownWriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten); // idb
int __cdecl ownSeekFile(HANDLE hFile, LONG lDistanceToMove, DWORD dwMoveMethod); // idb
int __cdecl Get_Scan(struct _STATE *a1, int a2, int a3);
signed int __cdecl IJL_Decode(char *a1);
int __cdecl SetDefaultTables(int a1);
int __cdecl Scale_Char_Matrix(signed int a1, int a2, int a3);
int __cdecl BuildEncoderHuffmanTable(int a1, int a2, int a3);
int __cdecl BuildDecoderHuffmanTable(int a1, int a2, int a3, int a4, int a5);
int __cdecl ownEncoderWriteJPEGTables(int a1);
signed int __cdecl Encode_Frame_Init(char *a1);
// int __usercall Encode_Frame<eax>(int a1<eax>, char *a2);
signed int __cdecl sub_764883();
int __cdecl sub_764890(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
void __cdecl sub_7648F0(int a1, int a2, signed int a3, int a4, int a5);
signed int __cdecl sub_764A60(int a1, int a2);
signed int __cdecl sub_764B50(int a1, int a2);
signed int __cdecl sub_764BF0(int a1, int a2);
// signed int __usercall Encode_Frame_P<eax>(int a1<eax>, int a2);
int __cdecl loc_76604B(struct _JPEG_PROPERTIES *); // weak
// void __usercall sub_76657A(int a1<ebp>);
signed int __cdecl sub_766589();
_UNKNOWN *__cdecl ownGetLibVersion();
signed int __cdecl FillEncoderQuantTable_AAN(int a1);
signed int __cdecl fQnt8x8_AAN_PX(int a1, int a2);
int __cdecl fDCT8x8_AAN_PX(int a1);
int __cdecl fQnt8x8_AAN_M5(int a1, int a2);
int __cdecl fDCT8x8_AAN_M5(int a1);
int __cdecl FillDecoderQuantTable_AAN(int a1);
signed int __cdecl iQnt8x8_AAN_PX(int a1, int a2);
int __cdecl iDCT8x8_AAN_PX(int a1);
int __cdecl iDCT8x8_AAN_M5(int a1);
int __cdecl iDCT4x4_AAN_PX(int a1);
int __cdecl iDCT2x2_AAN_PX(int a1);
int __cdecl iDCT1x1_AAN_PX(int a1);
signed int __cdecl FillEncoderQuantTable_IPP(int a1);
signed int __cdecl fQnt8x8_IPP_PX(int a1, int a2);
// void __usercall fQnt8x8_IPP_M5(__m64 a1<mm6>, int a2, int a3);
// void __usercall fQnt8x8_IPP_A6(__m64 a1<mm6>, int a2, int a3);
// void __usercall fQnt8x8_IPP_W7(__m128i a1<xmm6>, int a2, int a3);
int __cdecl fDCT8x8_IPP_PX(int a1);
void __cdecl fDCT8x8_IPP_M5(int a1);
void __cdecl fDCT8x8_IPP_A6(int a1);
void **__cdecl fDCT8x8_IPP_W7(int a1);
signed int __cdecl sub_767F10(int a1);
signed int __cdecl sub_767F70(int a1, signed int a2, signed int a3);
signed int __cdecl sub_768050(int a1, signed int a2, signed int a3);
int __cdecl Make_optimal_huff_table(void *a1, void *a2, unsigned __int8 *a3);
signed int __cdecl EncodeHuffman8x8_PX(int a1, int a2, int a3, int a4, int a5);
// signed int __usercall EncodeHuffman8x8_M5<eax>(__m64 a1<mm1>, int a2, int a3, int a4, int a5, int a6);
signed int __cdecl EncodeHuffman8x8_A6(__m64 *a1, int a2, unsigned int a3, int a4, int a5);
int __cdecl Gather_Prog_DC_SA(_DWORD *const a1, int a2, __int16 *a3, int a4, char a5);
signed int __cdecl Encode_Prog_DC_SA(int a1, struct _HUFFMAN_TABLE *a2, _DWORD *a3, __int16 *a4, int a5, char a6);
int __cdecl Gather_EOBRUN(struct _STATE *a1, _DWORD *const a2);
signed int __cdecl Encode_EOBRUN(int a1, struct _HUFFMAN_TABLE *a2);
signed int __cdecl Encode_ZRL(int a1, struct _HUFFMAN_TABLE *a2, _DWORD *a3);
int __cdecl sub_7690E0(__int16 a1);
int __cdecl sub_769110(signed int a1);
signed int __cdecl Append_BE_bits(int a1, signed int *a2, signed int a3);
int __cdecl Gather_Prog_AC_first(struct _STATE *a1, int a2, int a3, int a4, char a5, _DWORD *const a6);
int *__cdecl Gather_Prog_AC_refine(struct _STATE *a1, __int16 *a2, int a3, int a4, char a5, unsigned __int8 *a6, int *a7, _DWORD *const a8);
signed int __cdecl Encode_Prog_AC_first(int a1, struct _HUFFMAN_TABLE *a2, __int16 *a3, int a4, int a5, char a6);
signed int __cdecl Encode_Prog_AC_refine(int a1, struct _HUFFMAN_TABLE *a2, __int16 *a3, int a4, int a5, char a6, signed int *a7, _DWORD *a8);
int __cdecl GET_BITS(struct _STATE *, int); // idb
int __cdecl PEEK_BITS(struct _STATE *a1, char a2);
signed int __cdecl Fill_Bit_Buffer(struct _STATE *a1, int a2);
signed int __cdecl sub_769CE0(int a1, int a2, int a3, int a4);
signed int __cdecl sub_769DD0(int a1, int a2, int a3);
signed int __cdecl DecodeHuffman8x8_PX(int a1, int a2, int a3, int a4, void *a5);
int __cdecl DecodeHuffman8x8_M5(int a1, unsigned int a2, unsigned int a3, signed int a4, int a5);
int __cdecl DecodeHuffman8x8_M6(int a1, unsigned int a2, unsigned int a3, signed int a4, int a5);
int __cdecl Decode_Block_Skip_M5(int a1, int a2, int a3, signed int a4);
signed int __cdecl Decode_Block_Thumb_PX(struct _STATE *a1, int a2, int a3, __int16 *a4, __int16 *a5);
signed int __cdecl Decode_Block_Prog_DC(struct _STATE *a1, int a2, __int16 *a3, __int16 *a4, char a5);
signed int __cdecl Decode_Block_Prog_DC_SA(struct _STATE *a1, __int16 *a2, char a3);
signed int __cdecl Decode_Block_Prog_AC(struct _STATE *a1, __int16 *a2, int a3, int a4, int a5, char a6);
signed int __cdecl Decode_Block_Prog_AC_SA(int a1, __int16 *a2, int a3, int a4, int a5, char a6);
int __cdecl FillDecoderQuantTable_IPP(int a1);
signed int __cdecl iQnt8x8_IPP_PX(int a1, int a2);
void __cdecl iQnt8x8_IPP_M5(int a1, int a2);
void __cdecl iQnt8x8_IPP_W7(int a1, int a2);
int __cdecl iDCT8x8_IPP_PX(int a1);
void __cdecl iDCT8x8_IPP_M5(int a1);
void __cdecl iDCT8x8_IPP_A6(int a1);
void **__cdecl iDCT8x8_IPP_W7(int a1);
char *__cdecl iDCT4x4_IPP_PX(int a1);
__int16 __cdecl iDCT2x2_IPP_PX(int a1);
int __cdecl iDCT1x1_IPP_PX(int a1);
int __cdecl EB_Init_PX(struct _STATE *a1, char *a2, int a3);
struct _STATE *__cdecl EB_Init_M5(struct _STATE *a1, char *a2, int a3);
int __cdecl EB_Write_Bytes_PX(int a1, unsigned int a2, int a3);
int __cdecl EB_Write_Bytes_M5(int a1, int a2, int a3);
// signed int __usercall EB_Write_Bits_M5<eax>(__m64 a1<mm1>, unsigned int a2, int a3, int a4);
// signed int __usercall EB_Write_Bits_File_M5<eax>(__m64 a1<mm1>, unsigned int a2, int a3, int a4);
int __cdecl Flush_Buffer_To_File(int a1);
signed int __cdecl flush_mbuffer_to_file(int a1);
signed int __cdecl Set_Encode_Fast_Path(struct _JPEG_PROPERTIES *a1);
unsigned int __cdecl sub_76C3A0(int a1, int a2, int a3, signed int a4, int a5);
signed int __cdecl RGB_to_YCbCr_111_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl RGB_to_YCbCr_111_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
unsigned int __cdecl RGB_to_YCbCr_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
unsigned int __cdecl sub_76CD30(int a1, int a2, int a3, signed int a4, int a5);
signed int __cdecl BGR_to_YCbCr_111_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl BGR_to_YCbCr_111_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
unsigned int __cdecl BGR_to_YCbCr_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl sub_76D6D0(int a1, int a2, int a3, signed int a4, int a5);
int __cdecl sub_76DC20(int a1, int a2, int a3, int a4, int a5);
int __cdecl RGB_to_YCbCr_411_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl RGB_to_YCbCr_411_Full_MCU_M5(int a1, int a2, int a3, int a4);
int __cdecl RGB_to_YCbCr_411_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl sub_76E850(int a1, int a2, int a3, signed int a4, int a5);
int __cdecl sub_76EDA0(int a1, int a2, int a3, int a4, int a5);
int __cdecl BGR_to_YCbCr_411_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl BGR_to_YCbCr_411_Full_MCU_M5(int a1, int a2, int a3, int a4);
int __cdecl BGR_to_YCbCr_411_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
unsigned int __cdecl sub_76F9D0(int a1, int a2, int a3, signed int a4, int a5);
int __cdecl RGB_to_YCbCr_422_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl RGB_to_YCbCr_422_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
unsigned int __cdecl RGB_to_YCbCr_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
unsigned int __cdecl sub_7705D0(int a1, int a2, int a3, signed int a4, int a5);
int __cdecl BGR_to_YCbCr_422_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl BGR_to_YCbCr_422_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
unsigned int __cdecl BGR_to_YCbCr_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
unsigned int __cdecl sub_7711D0(int a1, int a2, int a3, signed int a4, int a5);
int __cdecl RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
unsigned int __cdecl RGBA_FPX_to_YCbCrA_FPX_1111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
unsigned int __cdecl sub_771B50(int a1, int a2, int a3, signed int a4, int a5);
int __cdecl RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5, int a6);
unsigned int __cdecl RGBA_FPX_to_YCbCrA_FPX_4224_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl sub_7727B0(int a1, int a2, int a3, signed int a4, int a5);
int __cdecl sub_772B90(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl RGBA_FPX_to_YCbCrA_FPX_4114_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl sub_773AB0(int a1, int a2, signed int a3, int a4, int a5);
int __cdecl OTHER_to_OTHER_1111_Full_MCU(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl OTHER_to_OTHER_1111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
signed int __cdecl sub_773F20(int a1, int a2, signed int a3, signed int a4, int a5);
int __cdecl OTHER_to_OTHER_111_Full_MCU(int a1, int a2, int a3, int a4, int a5);
signed int __cdecl OTHER_to_OTHER_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl sub_774510(int a1, int a2, signed int a3, signed int a4, int a5);
int __cdecl sub_774A00(int a1, int a2, int a3, int a4, int a5);
int __cdecl OTHER_to_OTHER_411_Full_MCU(int a1, int a2, int a3, int a4, int a5);
int __cdecl OTHER_to_OTHER_411_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
unsigned int __cdecl sub_775090(int a1, int a2, signed int a3, signed int a4, int a5);
signed int __cdecl OTHER_to_OTHER_422_Full_MCU(int a1, int a2, int a3, int a4, int a5);
unsigned int __cdecl OTHER_to_OTHER_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
// int __usercall sub_775890<eax>(int a1<ebp>, int a2, int a3, signed int a4, int a5, int a6);
signed int __cdecl YCbYCr_to_YCbCr_422_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbYCr_to_YCbCr_422_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbYCr_to_YCbCr_422_Full_MCU_A6(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbYCr_to_YCbCr_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
unsigned int __cdecl sub_776180(int a1, int a2, int a3, int a4, int a5);
signed int __cdecl Y_to_Y_111_Full_MCU_PX(int a1, int a2, int a3);
void __cdecl Y_to_Y_111_Full_MCU_M5(__m64 *a1, int a2, int a3);
unsigned int __cdecl Y_to_Y_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl CC_SS_RGB_to_YCbCr_General_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl CC_RGB_to_YCbCr_General_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl SS_General_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
int __cdecl Input_Interleave_General_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3);
signed int __cdecl sub_778910(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12);
int __cdecl operator_(int a1, int a2, int a3);
bool __cdecl operator__(int a1, int a2);
bool __cdecl operator__(int a1, int a2);
int __cdecl operator_(int a1, int a2, int a3);
signed int __cdecl sub_778D10(int a1, signed int a2, int a3, int a4, int a5, signed int a6, char a7);
signed int __cdecl sub_778DC0(int a1, signed int a2, int a3, int a4, int a5, signed int a6, int a7, char a8);
signed int __cdecl sub_77A8A0(int a1, signed int a2, int a3, int a4, int a5, signed int a6, char a7);
signed int __cdecl sub_77B6E0(int a1, int a2, int a3, int a4, int a5);
signed int __cdecl sub_77BA50(int a1, int a2, int a3, int a4, signed int a5);
signed int __cdecl US_And_CC_MCU_Scaled(int a1, int a2, int a3, int a4, int a5, signed int a6, char a7);
int __cdecl CConvert_Image(struct _JPEG_PROPERTIES *a1);
int __cdecl sub_77C3B0(int a1, int a2, signed int a3, int a4, int a5);
signed int __cdecl US_General_P_MCU(int a1, int a2, int a3);
signed int __cdecl sub_77D960(int a1, int a2, int a3, int a4);
int __cdecl sub_77DD20(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_77E000(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbCr_411_to_RGB_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_411_to_RGB_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
char __cdecl YCbCr_411_to_RGB_MCU(int a1, int a2, int a3);
int __cdecl sub_77EDC0(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_77F0A0(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbCr_411_to_BGR_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_411_to_BGR_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
char __cdecl YCbCr_411_to_BGR_MCU(int a1, int a2, int a3);
void __cdecl sub_77FE60(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl YCbCr_111_to_RGB_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_111_to_RGB_MCU(int a1, int a2, int a3);
void __cdecl sub_780280(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl YCbCr_111_to_BGR_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_111_to_BGR_MCU(int a1, int a2, int a3);
int __cdecl sub_7806A0(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_7809B0(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbCr_422_to_RGB_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl YCbCr_422_to_RGB_MCU(int a1, int a2, int a3);
int __cdecl sub_7811D0(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_7814F0(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbCr_422_to_BGR_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl YCbCr_422_to_BGR_MCU(int a1, int a2, int a3);
void __cdecl sub_781D10(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl YCbCr_111_to_RGBA_FPX_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_111_to_RGBA_FPX_MCU(int a1, int a2, int a3);
int __cdecl sub_7826A0(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_782980(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbCr_422_to_RGBA_FPX_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl YCbCr_422_to_RGBA_FPX_MCU(int a1, int a2, int a3);
int __cdecl sub_7831A0(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_783460(int a1, int a2, int a3, int a4, int a5);
int __cdecl YCbCr_411_to_RGBA_FPX_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl YCbCr_411_to_RGBA_FPX_MCU(int a1, int a2, int a3);
void __cdecl sub_7841B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
int __cdecl YCbCrA_FPX_1111_to_RGBA_FPX_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl YCbCrA_FPX_1111_to_RGBA_FPX_MCU(int a1, int a2, int a3);
int __cdecl sub_784D30(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
int __cdecl sub_785040(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl YCbCrA_FPX_4224_to_RGBA_FPX_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6);
char __cdecl YCbCrA_FPX_4224_to_RGBA_FPX_MCU(int a1, int a2, int a3);
int __cdecl sub_7859F0(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
char __cdecl sub_785CE0(int a1, int a2, int a3, int a4, int a5, int a6);
char __cdecl YCbCrA_FPX_4114_to_RGBA_FPX_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6);
char __cdecl YCbCrA_FPX_4114_to_RGBA_FPX_MCU(int a1, int a2, int a3);
void __cdecl sub_786D00(int a1, int a2, int a3, int a4, int a5, int a6);
signed int __cdecl OTHER_111_to_OTHER4_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
void __cdecl OTHER_111_to_OTHER4_MCU(int a1, int a2, int a3);
void __cdecl sub_7870B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7);
signed int __cdecl OTHER_1111_to_OTHER_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl OTHER_1111_to_OTHER_MCU(int a1, int a2, int a3);
int __cdecl sub_7874A0(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl OTHER_111_to_OTHER_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl OTHER_111_to_OTHER_MCU(int a1, int a2, int a3);
int __cdecl sub_7877E0(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_7878D0(int a1, int a2, int a3, int a4, int a5);
int __cdecl OTHER_411_to_OTHER_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl OTHER_411_to_OTHER_MCU(int a1, int a2, int a3);
int __cdecl sub_787F00(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl sub_787FD0(int a1, int a2, int a3, int a4, int a5);
int __cdecl OTHER_422_to_OTHER_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl OTHER_422_to_OTHER_MCU(int a1, int a2, int a3);
int __cdecl sub_788390(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl YCbCr_422_to_YCbYCr_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5);
char __cdecl YCbCr_422_to_YCbYCr_MCU(int a1, int a2, int a3);
void __cdecl sub_788810(int a1, int a2, int a3, int a4);
signed int __cdecl Y_111_to_Y_Full_MCU_PX(int a1, int a2, int a3);
void __cdecl Y_111_to_Y_MCU(int a1, int a2, int a3);
signed int __cdecl Output_Interleave_General_MCU(int a1, int a2, int a3);
signed int __cdecl US_General_MCU(int a1, int a2, int a3);
signed int __cdecl US_CC_General_YCbCr_MCU(int a1, int a2, int a3);
signed int __cdecl YCbCr_422_to_YCbYCr_NI_MCU(int a1, int a2, int a3);
void __cdecl Y_111_to_Y_Full_MCU_M5(int a1, int a2, int a3);
void __cdecl YCbCr_422_to_YCbYCr_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCrA_FPX_4114_to_RGBA_FPX_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl YCbCrA_FPX_4224_to_RGBA_FPX_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl YCbCrA_FPX_1111_to_RGBA_FPX_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl YCbCr_411_to_RGBA_FPX_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_422_to_RGBA_FPX_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_111_to_RGBA_FPX_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_422_to_BGR_Full_MCU_A6(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_422_to_BGR_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_422_to_RGB_Full_MCU_A6(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_422_to_RGB_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_111_to_BGR_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl YCbCr_111_to_RGB_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_detect_processor_ia32(int a1);
void __cdecl ownEMMSh();
int __cdecl CONVERT_TO_MARKER(unsigned __int8 a1);
// signed int __usercall Get_Marker_Data_Into_Contiguous_Buffer<eax>(int a1<eax>, struct _STATE *a2, int size, void **a4, unsigned __int8 **a5, int a6);
signed int __cdecl sub_78AABE();
signed int __cdecl sub_78AAD0(struct _STATE *a1, int a2);
signed int __cdecl DP_Get_Next_Marker(struct _STATE *a1, enum IJL_MARKER *a2);
signed int __cdecl DP_Skip(struct _STATE *a1);
signed int __cdecl DP_Parse_DRI(struct _STATE *a1, _DWORD *a2);
signed int __cdecl DP_Parse_SOF(struct _STATE *a1, struct _JPEG_PROPERTIES *a2);
signed int __cdecl DP_Parse_APP14(struct _JPEG_PROPERTIES *a1);
signed int __cdecl DP_Parse_APP0(struct _JPEG_PROPERTIES *a1);
// int __usercall DP_Parse_COM<eax>(int a1<eax>, struct _JPEG_PROPERTIES *a2);
signed int __cdecl sub_78B777();
signed int __cdecl DP_Parse_DQT(char *a1, struct _STATE *a2, enum _DCTTYPE a3);
signed int __cdecl DP_Parse_DHT(char *a1, struct _STATE *a2);
// int __usercall DP_Parse_SOS<eax>(int a1<eax>, int a2, struct _STATE *a3, int a4, int a5);
signed int __cdecl sub_78C4AE();
int __cdecl sub_78C4C0(int a1, int a2, int a3, int a4, int a5, int a6, void *a7, int a8, int a9, signed int a10, char a11);
signed int __cdecl sub_78D950(int a1, int a2, int a3, int a4);
int __cdecl sub_78DA60(int a1, int a2, int a3, int a4);
signed int __cdecl sub_78DB20(int a1, int a2, int a3, int a4, int a5, int a6);
signed int __cdecl sub_78DBA0(int a1, int a2, int a3, signed int a4);
signed int __cdecl sub_78EF50(int a1, int a2, int a3, signed int a4);
signed int __cdecl sub_7902B0(int a1, int a2, int a3, signed int a4);
signed int __cdecl sub_790DB0(int a1, int a2, int a3, signed int a4);
signed int __cdecl Decode_Scan(enum IJL_MARKER *a1, struct _STATE *a2, int a3, int a4);
struct _STATE *__cdecl DB_Begin(struct _STATE *a1);
signed int __cdecl Buffer_Read_Bytes(struct _STATE *a1);
signed int __cdecl DB_Get_Data(struct _STATE *a1, int a2, unsigned __int8 **a3);
struct _STATE *__cdecl DB_Align_Byte(struct _STATE *a1);
signed int __cdecl DB_Skip_To_Next_Marker(struct _STATE *a1);
signed int __cdecl Set_Decode_Fast_Path(struct _JPEG_PROPERTIES *a1);
int __cdecl sub_793730(char a1, int a2);
int __cdecl sub_793750(__int16 a1, int a2);
int __cdecl EP_Write_APP0(struct _JPEG_PROPERTIES *a1);
// signed int __usercall EP_Write_COM<eax>(int a1<eax>, struct _JPEG_PROPERTIES *a2);
signed int __cdecl sub_793B2E();
int __cdecl EP_Write_SOI(struct _STATE *a1);
int __cdecl EP_Write_EOI(struct _STATE *a1);
int __cdecl EP_Write_SOF(struct _STATE *a1, struct _FRAME *a2);
int __cdecl EP_Write_SOF2(struct _STATE *a1, struct _FRAME *a2);
int __cdecl EP_Write_DQT(struct _STATE *a1, int a2, char a3, signed int a4);
int __cdecl EP_Write_DHT_Ex(struct _STATE *a1, unsigned __int8 *a2, unsigned __int8 *a3, char a4, char a5);
int __cdecl EP_Write_DHTs(struct _STATE *a1, int a2);
// int __usercall EP_Write_SOS<eax>(int a1<ebp>, struct _STATE *a2, signed int a3, char *a4, char *a5);
int __cdecl EP_Write_SOS_Ex(int a1, struct _SCAN *a2, unsigned __int8 *a3, unsigned __int8 *a4);
int __cdecl EP_Write_DRI(__int16 a1, struct _STATE *a2);
int __cdecl EP_Write_RST(int a1, struct _STATE *a2);
int __cdecl EP_Write_APP14(unsigned __int8 a1, struct _JPEG_PROPERTIES *a2);
signed int __cdecl Encode_Scan(struct _JPEG_PROPERTIES *a1, struct _STATE *a2, struct _SCAN *a3);
int __cdecl Fill_coeffs_buffer(struct _JPEG_PROPERTIES *a1);
int __cdecl Gather_statistics(struct _JPEG_PROPERTIES *a1, struct _STATE *a2, int a3, _DWORD (*const a4)[257]);
int __cdecl Encode_Scan_P(struct _JPEG_PROPERTIES *a1, int a2, int a3);
signed int __cdecl Encode_Scan_WRst(struct _JPEG_PROPERTIES *a1, struct _STATE *a2, struct _SCAN *a3);
int __cdecl own_fqnt8x8_aan_m5(int a1, int a2);
int __cdecl own_fdct8x8_aan_m5(int a1);
int __cdecl own_idct8x8_aan_m5(int a1);
// void __usercall own_fqnt8x8_ipp_m5(__m64 a1<mm6>, int a2, int a3);
// void __usercall own_fqnt8x8_ipp_a6(__m64 a1<mm6>, int a2, int a3);
// void __usercall own_fqnt8x8_ipp_w7(__m128i a1<xmm6>, int a2, int a3);
void __cdecl own_dct_2d_16s_8x8_frv_m5(int a1);
void __cdecl own_dct_2d_16s_8x8_frv_a6(int a1);
void **__cdecl own_dct_2d_16s_8x8_frv_w7(int a1);
signed int __cdecl own_buffer_to_file_p5(int a1);
// signed int __usercall own_write_bits_a6<eax>(int a1<esi>, __m64 a2<mm7>, int a3, int a4);
signed int __cdecl own_encode_block_a6(__m64 *a1, int a2, unsigned int a3, int a4, int a5);
void __fastcall own_count_zeros_m5(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl loc_79A370(int, int, int, int); // weak
signed int __cdecl load_from_file(int a1);
int __fastcall own_decode_block_skip_m5(int a1, int a2, int a3, unsigned int a4, unsigned int a5, signed int a6);
// signed int __usercall sub_79AB05<eax>(unsigned int a1<eax>, int a2<edx>, int a3<ebp>, unsigned int a4<edi>, unsigned int *a5<esi>, __m64 a6<mm1>, __m64 a7<mm4>);
// signed int __usercall sub_79AC63<eax>(unsigned int a1<eax>, int a2<edx>, unsigned int a3<ebx>, int a4<ebp>, unsigned int a5<edi>, unsigned int *a6<esi>, __m64 a7<mm1>, __m64 a8<mm4>);
int __fastcall own_decodehuffman8x8_m6(int a1, int a2, int a3, unsigned int a4, unsigned int a5, signed int a6, int a7);
// signed int __usercall sub_79B1F8<eax>(unsigned int a1<eax>, int a2<edx>, int a3<ebp>, signed int a4<edi>, int a5<esi>, __m64 a6<mm1>);
// signed int __usercall sub_79B2F5<eax>(unsigned int a1<eax>, int a2<edx>, unsigned int a3<ebx>, int a4<ebp>, unsigned int a5<edi>, int a6<esi>, __m64 a7<mm1>, __m64 a8<mm4>);
int __fastcall own_decodehuffman8x8_m5(int a1, int a2, int a3, unsigned int a4, unsigned int a5, signed int a6, int a7);
// signed int __usercall sub_79B7BE<eax>(unsigned int a1<eax>, int a2<edx>, int a3<ebp>, unsigned int a4<edi>, int a5<esi>, __m64 a6<mm1>, __m64 a7<mm4>);
// signed int __usercall sub_79B8C6<eax>(unsigned int a1<eax>, int a2<edx>, unsigned int a3<ebx>, int a4<ebp>, unsigned int a5<edi>, int a6<esi>, __m64 a7<mm1>, __m64 a8<mm4>);
void __cdecl own_iqnt8x8_ipp_m5(int a1, int a2);
void __cdecl own_iqnt8x8_ipp_w7(int a1, int a2);
void __cdecl own_dct_2d_16s_8x8_inv_m5(int a1);
void __cdecl own_dct_2d_16s_8x8_inv_a6(int a1);
void **__cdecl own_dct_2d_16s_8x8_inv_w7(int a1);
int __cdecl own_eb_write_bytes_m5(int a1, int a2, int a3);
// signed int __usercall own_eb_write_bits_m5<eax>(__m64 a1<mm1>, unsigned int a2, int a3, int a4);
// signed int __usercall own_eb_write_bits_file_m5<eax>(__m64 a1<mm1>, unsigned int a2, int a3, int a4);
void __cdecl own_rgb_to_ycbcr_111_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_bgr_to_ycbcr_111_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_rgba_fpx_to_ycbcra_fpx_1111_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_rgb_to_ycbcr_422_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_bgr_to_ycbcr_422_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_rgba_fpx_to_ycbcra_fpx_4224_full_mcu_m5(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl own_rgb_to_ycbcr_411_one_quarter_mcu_m5(__m64 *a1, int a2, int a3, int a4);
void __cdecl own_bgr_to_ycbcr_411_one_quarter_mcu_m5(__m64 *a1, int a2, int a3, int a4);
void __cdecl own_rgba_fpx_to_ycbcra_fpx_4114_one_half_mcu_m5(int a1, int a2, int a3, int a4, int a5, int a6);
int __cdecl own_ycbycr_to_ycbcr_422_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
int __cdecl own_ycbycr_to_ycbcr_422_full_mcu_a6(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_y_to_y_111_full_mcu_m5(__m64 *a1, int a2, int a3);
void __cdecl own_y_111_to_y_full_mcu_m5(int a1, int a2, int a3);
void __cdecl own_ycbcr_111_to_rgb_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_111_to_bgr_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_111_to_rgba_fpx_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcra_fpx_1111_to_rgba_fpx_full_mcu_m5(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl own_ycbcr_422_to_rgb_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_422_to_bgr_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_422_to_rgb_full_mcu_a6(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_422_to_bgr_full_mcu_a6(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_422_to_rgba_fpx_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcra_fpx_4224_to_rgba_fpx_full_mcu_m5(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl own_ycbcr_411_to_rgb_one_half_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_411_to_bgr_one_half_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcr_411_to_rgba_fpx_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __cdecl own_ycbcra_fpx_4114_to_rgba_fpx_full_mcu_m5(int a1, int a2, int a3, int a4, int a5, int a6);
void __cdecl own_ycbcr_422_to_ycbycr_full_mcu_m5(int a1, int a2, int a3, int a4, int a5);
void __thiscall std::logic_error::logic_error(std::logic_error *this, std::logic_error *__that);
void __cdecl std::_Xlength_error(const char *_Message);
void __thiscall std::length_error::length_error(std::length_error *this, std::length_error *__that);
void __cdecl std::_Xout_of_range(const char *_Message);
void __thiscall std::out_of_range::out_of_range(std::out_of_range *this, std::out_of_range *__that);
void *__thiscall std::out_of_range::_vector_deleting_destructor_(std::out_of_range *this, unsigned int);
void *__cdecl operator new__(unsigned int count);
int __cdecl _Tolower(int c, _Ctypevec *ploc);
_Ctypevec *__cdecl _Getctype(_Ctypevec *result);
void __thiscall std::_Init_locks::_Init_locks(std::_Init_locks *this);
void __thiscall std::_Init_locks::__Init_locks(std::_Init_locks *this);
void __thiscall std::_Lockit::_Lockit(std::_Lockit *this, int kind);
void __thiscall std::_Lockit::__Lockit(std::_Lockit *this);
void __thiscall std::_Fac_node::__Fac_node(std::_Fac_node *this);
void __cdecl std::locale::facet::_Facet_Register(std::locale::facet *_This);
void __cdecl _Deletegloballocale(void *ptr);
void __thiscall tidy_global(int this);
std::locale::_Locimp *__cdecl std::locale::_Getgloballocale();
void __cdecl std::locale::_Setgloballocale(void *ptr);
void __cdecl std::locale::_Locimp::_Locimp_dtor(std::locale::_Locimp *_This);
void __thiscall std::_Fac_tidy_reg_t::__Fac_tidy_reg_t(std::_Fac_tidy_reg_t *this);
void __cdecl std::_Locinfo::_Locinfo_dtor(std::_Locinfo *pLocinfo);
std::_Yarn<char> *__thiscall std::_Yarn<char>::operator_(std::_Yarn<char> *this, const char *_Right);
void __cdecl std::_Locinfo::_Locinfo_ctor(std::_Locinfo *pLocinfo, const char *locname);
void __thiscall std::locale::_Locimp::_Locimp(std::locale::_Locimp *this, bool _Transparent);
void __thiscall std::locale::_Locimp::__Locimp(std::locale::_Locimp *this);
void *__thiscall std::locale::_Locimp::_scalar_deleting_destructor_(std::locale::_Locimp *this, unsigned int);
std::locale::_Locimp *__cdecl std::locale::_Init();
bool __thiscall std::error_condition::operator__(std::error_condition *this, std::error_condition *_Right);
std::error_condition *__thiscall std::_System_error_category::default_error_condition(std::_System_error_category *this, std::error_condition *result, int _Errval);
bool __thiscall std::error_category::equivalent(std::error_category *this, int _Errval, std::error_condition *_Cond);
bool __thiscall std::error_category::equivalent(std::error_category *this, std::error_code *_Code, int _Errval);
const char *__thiscall std::_Generic_error_category::name(std::_Iostream_error_category *this);
int __thiscall DNameStatusNode::length(pcharNode *this);
std::error_category *__cdecl std::iostream_category();
void *__thiscall std::_System_error_category::_scalar_deleting_destructor_(std::_System_error_category *this, unsigned int);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::_Generic_error_category::message(std::_Generic_error_category *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, int _Errcode);
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::_Iostream_error_category::message(std::_Iostream_error_category *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, int _Errcode);
void __thiscall std::ios_base::_Callfns(std::ios_base *this, std::ios_base::event _Ev);
void __thiscall std::ios_base::_Tidy(std::ios_base *this);
void __cdecl std::ios_base::_Ios_base_dtor(std::ios_base *_This);
int __cdecl _Toupper(int c, _Ctypevec *ploc);
void __thiscall std::_Mutex::_Mutex(std::_Mutex *this);
void __thiscall std::_Mutex::__Mutex(std::_Mutex *this);
void __thiscall std::_Mutex::_Lock(std::_Mutex *this);
void __thiscall std::_Mutex::_Unlock(std::_Mutex *this);
_iobuf *__cdecl std::_Xfsopen(const char *filename, int mode, int prot);
_iobuf *__cdecl std::_Xfsopen(const wchar_t *filename, int mode, int prot);
_iobuf *__cdecl std::_Xfiopen<char>(const char *filename, int mode, int prot);
_iobuf *__cdecl std::_Xfiopen<wchar_t>(const wchar_t *filename, int mode, int prot);
_iobuf *__cdecl std::_Fiopen(const char *filename, int mode, int prot);
_iobuf *__cdecl std::_Fiopen(const wchar_t *filename, int mode, int prot);
_Cvtvec __cdecl _Getcvt();
bool __cdecl std::uncaught_exception();
void __cdecl _Mtxinit(_RTL_CRITICAL_SECTION *_Mtx);
void __cdecl _Mtxdst(_RTL_CRITICAL_SECTION *_Mtx);
void __cdecl _Mtxlock(_RTL_CRITICAL_SECTION *_Mtx);
void __cdecl _Mtxunlock(_RTL_CRITICAL_SECTION *_Mtx);
void __cdecl _Atexit(void (__cdecl *pf)());
void __thiscall _Init_atexit::__Init_atexit(_Init_atexit *this);
void __cdecl ReleaseCPLocHash(); // idb
int __cdecl InitCPLocHash();
void __thiscall std::exception::exception(std::exception *this, const char *const *_What, int __formal);
const char *__thiscall std::exception::what(std::exception *this);
void __thiscall std::exception::_Copy_str(std::exception *this, const char *_What);
void __thiscall std::exception::_Tidy(std::exception *this);
void __thiscall std::exception::exception(std::exception *this, const char *const *_What);
std::exception *__thiscall std::exception::operator_(std::exception *this, std::exception *_That);
void __thiscall std::exception::_exception(std::bad_cast *this);
void __thiscall std::bad_cast::bad_cast(std::bad_cast *this, const char *_Message);
void __thiscall std::exception::exception(std::exception *this, std::exception *_That);
void *__thiscall std::bad_cast::_vector_deleting_destructor_(std::bad_cast *this, unsigned int);
void __thiscall std::bad_cast::bad_cast(std::bad_cast *this, std::bad_cast *that);
const char *__thiscall type_info::name(type_info *this, __type_info_node *__ptype_info_node);
void __thiscall type_info::_type_info(type_info *this);
void *__thiscall type_info::_scalar_deleting_destructor_(type_info *this, unsigned int);
bool __thiscall type_info::operator__(type_info *this, type_info *rhs);
void __cdecl operator delete(void *p);
void __cdecl memcpy(char *dst, char *src, unsigned int count);
int __cdecl CopyUnwindUp(int dst, int src, int count); // weak
int __cdecl ByteCopyDown(int dst, int src, int count); // weak
void __cdecl memmove(char *dst, char *src, unsigned int count);
int __cdecl CopyUnwindUp_0(int dst, int src, int count); // weak
int __cdecl ByteCopyDown_0(int dst, int src, int count); // weak
void *__cdecl operator new(unsigned int size);
void __stdcall _CxxThrowException(void *pExceptionObject, _s__ThrowInfo *pThrowInfo);
void __stdcall _JumpToContinuation(void *target, EHRegistrationNode *pRN);
void __stdcall _CallMemberFunction1(void *pthis, void *pmfn, void *pthat, int val2);
void __stdcall _UnwindNestedFrames(EHRegistrationNode *pRN, EHExceptionRecord *pExcept);
int __stdcall ReturnPoint(int pRN, int pExcept); // weak
_EXCEPTION_DISPOSITION __cdecl __CxxFrameHandler3(EHExceptionRecord *pExcept, EHRegistrationNode *pRN, void *pContext, void *pDC);
_EXCEPTION_DISPOSITION __cdecl CatchGuardHandler(EHExceptionRecord *pExcept, CatchGuardRN *pRN, void *pContext, void *__formal);
int __cdecl _CallSETranslator(EHExceptionRecord *pExcept, EHRegistrationNode *pRN, void *pContext, void *pDC, _s_FuncInfo *pFuncInfo, int CatchDepth, EHRegistrationNode *pMarkerRN);
int __cdecl ExceptionContinuation(int pExcept, int pRN, int pContext, int pDC, int pFuncInfo, int CatchDepth, int pMarkerRN); // weak
_EXCEPTION_DISPOSITION __cdecl TranslatorGuardHandler(EHExceptionRecord *pExcept, TranslatorGuardRN *pRN, void *pContext, void *__formal);
_s_TryBlockMapEntry *__cdecl _GetRangeOfTrysToCheck(_s_FuncInfo *pFuncInfo, int CatchDepth, int curState, unsigned int *pStart, unsigned int *pEnd);
FrameInfo *__cdecl _CreateFrameInfo(FrameInfo *pFrameInfo, void *pExceptionObject);
int __cdecl _IsExceptionObjectToBeDestroyed(void *pExceptionObject);
void __cdecl _FindAndUnlinkFrame(FrameInfo *pFrameInfo);
void *__cdecl _CallCatchBlock2(EHRegistrationNode *pRN, _s_FuncInfo *pFuncInfo, void *handlerAddress, int CatchDepth, unsigned int NLGCode);
void __fastcall __security_check_cookie(unsigned int cookie);
void __cdecl free(void *pBlock);
int __cdecl _fclose_nolock(_iobuf *str);
int __cdecl fclose(_iobuf *stream);
unsigned int __cdecl _fread_nolock_s(void *buffer, unsigned int bufferSize, unsigned int elementSize, unsigned int num, _iobuf *stream);
unsigned int __cdecl fread_s(void *buffer, unsigned int bufferSize, unsigned int elementSize, unsigned int count, _iobuf *stream);
unsigned int __cdecl fread(void *buffer, unsigned int elementSize, unsigned int count, _iobuf *stream);
int __cdecl _filelength(int filedes);
int __cdecl _fileno(_iobuf *stream);
_iobuf *__cdecl _fsopen(const char *file, const char *mode, int shflag);
_iobuf *__cdecl fopen(const char *file, const char *mode);
int __cdecl fopen_s(_iobuf **pfile, const char *file, const char *mode);
void __cdecl strrchr(char *string, char chr);
int __cdecl splitpath_helper(const char *_Path, char *_Drive, unsigned int _DriveSize, char *_Dir, unsigned int _DirSize, char *_Filename, unsigned int _FilenameSize, char *_Ext, unsigned int _ExtSize);
void __cdecl _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext);
int (__cdecl *__cdecl _cfltcvt_init())(long double *, char *, unsigned int, int, int, int);
void __cdecl _fpmath(int initPrecision);
// __int32 __usercall _ftol2_sse<eax>();
// signed int __usercall _ftol2_pentium4<eax>(double a1<st0>);
void __cdecl _ftol2_sse_excpt();
// int _ftol2(); weak
void __cdecl srand(unsigned int seed);
int __cdecl rand();
int __cdecl sprintf(char *string, const char *format);
int __cdecl sprintf_s(char *string, unsigned int sizeInBytes, const char *format);
void __cdecl operator delete__(void *p);
void __cdecl memset(char *dst, char value, unsigned int count);
int (__cdecl *__cdecl onexit_nolock(int (__cdecl *func)()))();
int __cdecl __onexitinit();
int (__cdecl *__cdecl _onexit(int (__cdecl *func)()))();
int __cdecl atexit(void (__cdecl *func)());
void __stdcall __ArrayUnwind(void *ptr, unsigned int size, int count, void (__thiscall *pDtor)(void *));
void __stdcall _eh_vector_destructor_iterator_(void *ptr, unsigned int size, int count, void (__thiscall *pDtor)(void *));
void *__cdecl bsearch(const void *key, const void *base, unsigned int num, unsigned int width, int (__cdecl *compare)(const void *, const void *));
void __stdcall _eh_vector_constructor_iterator_(void *ptr, unsigned int size, int count, void (__thiscall *pCtor)(void *), void (__thiscall *pDtor)(void *));
void __cdecl strncpy(char *dest, char *source, unsigned int count);
_ldiv_t __cdecl ldiv(int numer, int denom);
void __thiscall _LocaleUpdate::_LocaleUpdate(_LocaleUpdate *this, localeinfo_struct *plocinfo);
const char *__cdecl _mbschr_l(const char *string, unsigned int c, localeinfo_struct *plocinfo);
const char *__cdecl _mbschr(const char *string, unsigned int c);
void __cdecl memchr(char *buf, char chr, unsigned int cnt);
int __cdecl strncmp(const char *first, const char *last, unsigned int count);
// int __usercall vscan_fn<eax>(int (__cdecl *inputfn)(_iobuf *, const char *, localeinfo_struct *, char *), const char *string<esi>, const char *format, localeinfo_struct *plocinfo, char *arglist);
int __cdecl sscanf(const char *string, const char *format);
char *__cdecl fgets(char *string, int count, _iobuf *str);
int __cdecl _strnicmp_l(const char *dst, const char *src, unsigned int count, localeinfo_struct *plocinfo);
int __cdecl _strnicmp(const char *dst, const char *src, unsigned int count);
int __cdecl strcpy_s(char *_Dst, unsigned int _SizeInBytes, const char *_Src);
const char *__cdecl _mbsrchr_l(const char *str, unsigned int c, localeinfo_struct *plocinfo);
const char *__cdecl _mbsrchr(const char *str, unsigned int c);
void __cdecl strchr(char *string, char chr);
int __cdecl __from_strstr_to_strchr(int, int string, char chr); // weak
int __cdecl putenv_helper(const char *name, const char *value);
int __cdecl _putenv(const char *option);
const char *__cdecl _getenv_helper_nolock(const char *option);
char *__cdecl getenv(const char *option);
int __cdecl _dupenv_s(char **pBuffer, unsigned int *pBufferSizeInTChars, const char *varname);
double __cdecl sin(double);
void __cdecl _CIsin();
// void __usercall _CIsin_default(unsigned __int64 a1<st0>);
int _sin_default(); // weak
double start(); // weak
// double __usercall _CIsqrt<st0>(double x<st0>); idb
int __cdecl fprintf(_iobuf *str, const char *format);
char *__cdecl strncat(char *Dest, const char *Source, size_t Count);
long double __cdecl _difftime32(int b, int a);
// int __usercall make__time32_t<eax>(tm *tb<ecx>, int ultflag);
int __cdecl _mktime32(tm *tb);
// void __usercall shortsort(char *lo, char *hi<eax>, unsigned int width, int (__cdecl *comp)(const void *, const void *));
void __cdecl qsort(void *base, unsigned int num, unsigned int width, int (__cdecl *comp)(const void *, const void *));
const char *__cdecl _mbsstr_l(const char *str1, const char *str2, localeinfo_struct *plocinfo);
const char *__cdecl _mbsstr(const char *str1, const char *str2);
int __cdecl _mbsncmp_l(const char *s1, const char *s2, unsigned int n, localeinfo_struct *plocinfo);
int __cdecl _mbsncmp(const char *s1, const char *s2, unsigned int n);
int __cdecl _mbsupr_s_l(char *string, unsigned int sizeInBytes, localeinfo_struct *plocinfo);
char *__cdecl _mbsupr(char *string);
int __cdecl _mbsicmp_l(const char *s1, const char *s2, localeinfo_struct *plocinfo);
int __cdecl _mbsicmp(const char *s1, const char *s2);
unsigned int __cdecl _fwrite_nolock(const void *buffer, unsigned int size, unsigned int num, _iobuf *stream);
unsigned int __cdecl fwrite(const void *buffer, unsigned int size, unsigned int count, _iobuf *stream);
int __cdecl _ftell_nolock(_iobuf *str);
int __cdecl ftell(_iobuf *stream);
int __cdecl _fseek_nolock(_iobuf *str, int offset, int whence);
int __cdecl fseek(_iobuf *stream, int offset, int whence);
void *__cdecl realloc(void *pBlock, unsigned int newsize);
int __cdecl _vsprintf_l(char *string, const char *format, localeinfo_struct *plocinfo, char *ap);
int __cdecl vsprintf(char *string, const char *format, char *ap);
long double __cdecl _atof_l(const char *nptr, localeinfo_struct *plocinfo);
long double __cdecl atof(const char *nptr);
int __cdecl _snprintf(char *string, unsigned int count, const char *format);
void *__cdecl malloc(unsigned int size);
void __cdecl _freea(void *_Memory);
// void __usercall store_str(char *in<edx>, char **out<ecx>, unsigned int *count<eax>);
// void __usercall store_num(int num<eax>, int digits<edx>, char **out<edi>, unsigned int *count<ecx>, unsigned int no_lead_zeros);
// int __usercall expandtime<eax>(localeinfo_struct *plocinfo, char specifier<al>, tm *timeptr, char **string<edx>, unsigned int *left<ecx>, __lc_time_data *lc_time, unsigned int alternate_form);
int __cdecl store_winword(localeinfo_struct *plocinfo, int field_code, tm *tmptr, char **out, unsigned int *count, __lc_time_data *lc_time);
unsigned int __cdecl _Strftime_l(char *string, unsigned int maxsize, const char *format, tm *timeptr, void *lc_time_arg, localeinfo_struct *plocinfo);
unsigned int __cdecl strftime(char *string, unsigned int maxsize, const char *format, tm *timeptr);
int __cdecl _localtime64_s(tm *ptm, const __int64 *ptime);
tm *__cdecl _localtime64(const __int64 *ptime);
__int64 __cdecl _time64(__int64 *timeptr);
int __cdecl _mkdir(const char *path);
// int __usercall strupr_s_l_stat<eax>(char *string<edi>, unsigned int sizeInBytes, localeinfo_struct *plocinfo<ebx>);
int __cdecl _strupr_s_l(char *string, unsigned int sizeInBytes, localeinfo_struct *plocinfo);
char *__cdecl _strupr(char *string);
int __thiscall _chkstk(_DWORD); // weak
int __cdecl atol(const char *nptr);
int __cdecl atoi(const char *nptr);
__int64 __cdecl _atoi64(const char *nptr);
void __cdecl __crtCorExitProcess(int status);
void __cdecl __crtExitProcess(int status);
void __cdecl _lockexit();
void __cdecl _unlockexit();
void __cdecl _init_pointers();
int __cdecl _initterm_e(int (__cdecl **pfbegin)(), int (__cdecl **pfend)());
int __cdecl _cinit(int initFloatingPrecision);
void __cdecl doexit(int code, int quick, int retcaller);
void __cdecl exit(int code);
void __cdecl _exit(int code);
void __cdecl _cexit();
void __cdecl _c_exit();
void __cdecl _amsg_exit(int rterrnum);
_iobuf *__cdecl __iob_func();
int __cdecl __initstdio();
void __cdecl __endstdio();
void __cdecl _lock_file(_iobuf *pf);
void __cdecl _lock_file2(int i, void *s);
void __cdecl _unlock_file(_iobuf *pf);
void __cdecl _unlock_file2(int i, void *s);
int __cdecl getc(_iobuf *stream);
int __cdecl fputc(int ch, _iobuf *str);
int __cdecl _ungetc_nolock(int ch, _iobuf *str);
int __cdecl ungetc(int ch, _iobuf *stream);
int __cdecl _flush(_iobuf *str);
int __cdecl _fflush_nolock(_iobuf *str);
int __cdecl flsall(int flushflag);
int __cdecl fflush(_iobuf *stream);
int __cdecl _flushall();
int __cdecl setvbuf(_iobuf *str, char *buffer, int type, unsigned int size);
int __cdecl memcpy_s(void *dst, unsigned int sizeInBytes, const void *src, unsigned int count);
int __cdecl fgetpos(_iobuf *stream, __int64 *pos);
int __cdecl _fseeki64_nolock(_iobuf *str, __int64 offset, int whence);
int __cdecl _fseeki64(_iobuf *stream, __int64 offset, int whence);
int __cdecl fsetpos(_iobuf *stream, const __int64 *pos);
int __cdecl feof(_iobuf *stream);
int __cdecl ferror(_iobuf *stream);
int __cdecl __ascii_stricmp(const char *dst, const char *src);
int __cdecl _stricmp_l(const char *dst, const char *src, localeinfo_struct *plocinfo);
int __cdecl _strcmpi(const char *dst, const char *src);
void __cdecl terminate(); // idb
void __cdecl unexpected(); // idb
void __cdecl _inconsistency();
void __cdecl _initp_eh_hooks(void *enull);
int __cdecl _mbscmp_l(const char *s1, const char *s2, localeinfo_struct *plocinfo);
int __cdecl _mbscmp(const char *s1, const char *s2);
int __cdecl _mbsnbcmp_l(const char *s1, const char *s2, unsigned int n, localeinfo_struct *plocinfo);
int __cdecl _mbsnbcmp(const char *s1, const char *s2, unsigned int n);
// void __userpurge xtoa(unsigned int val<eax>, char *buf<ecx>, unsigned int radix, int is_neg);
char *__cdecl _itoa(int val, char *buf, int radix);
void __cdecl strstr(char *str1, char *str2);
double __cdecl atan2(double, double);
// int __usercall _CIatan2<eax>(__int16 a1<fpstat>, double a2<st1>, double a3<st0>, char a4, char a5, char a6);
// __int64 __usercall make__time64_t<edx:eax>(tm *tb<ecx>, int ultflag);
__int64 __cdecl _mktime64(tm *tb);
long double __cdecl _difftime64(__int64 b, __int64 a);
double __cdecl tan(double);
void __cdecl _CItan();
void __cdecl _CItan_default();
int _tan_default(); // weak
int start_1(); // weak
lconv *__cdecl localeconv();
int __cdecl memmove_s(void *dst, unsigned int sizeInBytes, const void *src, unsigned int count);
void __cdecl strcspn(char *string, char *control);
int __cdecl _strlwr_s_l_stat(char *string, unsigned int sizeInBytes, localeinfo_struct *plocinfo);
int __cdecl _strlwr_s_l(char *string, unsigned int sizeInBytes, localeinfo_struct *plocinfo);
char *__cdecl _strlwr(char *string);
double __cdecl fmod(double, double);
// int __usercall _CIfmod<eax>(__int16 a1<fpstat>, double a2<st1>, double a3<st0>, char a4, char a5, char a6);
// double __usercall fFMOD<st0>(double a1<st1>, long double a2<st0>);
int __cdecl _localtime32_s(tm *ptm, const int *ptime);
tm *__cdecl _localtime32(const int *ptime);
char *__cdecl strtok(char *string, const char *control);
int __cdecl printf(const char *format);
int __cdecl _get_printf_count_output();
int __cdecl _time32(int *timeptr);
double __cdecl acos(double);
void __cdecl _CIacos();
// void __usercall _CIacos_default(unsigned __int64 a1<st0>);
int _acos_default(); // weak
double start_2(); // weak
double __cdecl cos(double);
void __cdecl _CIcos();
// void __usercall _CIcos_default(unsigned __int64 a1<st0>);
int _cos_default(); // weak
double start_3(); // weak
_EXCEPTION_DISPOSITION __cdecl _except_handler4(_EXCEPTION_RECORD *ExceptionRecord, _EXCEPTION_REGISTRATION_RECORD *EstablisherFrame, _CONTEXT *ContextRecord, void *DispatcherContext);
double __cdecl pow(double, double);
void __cdecl _CIpow();
void __cdecl _CIpow_default();
int __cdecl _vsnwprintf_l(unsigned __int16 *string, unsigned int count, const wchar_t *format, localeinfo_struct *plocinfo, char *ap);
int __cdecl _vsnwprintf(unsigned __int16 *string, unsigned int count, const wchar_t *format, char *ap);
void __cdecl fast_error_exit(int rterrnum);
double __cdecl ceil(double);
double __cdecl _ceil_pentium4(double _C);
double __cdecl floor(double);
double __cdecl _floor_pentium4(double _C);
long double __cdecl ldexp(long double x, int exp);
int __cdecl _tolower_l(int c, localeinfo_struct *plocinfo);
int __cdecl tolower(int c);
double __cdecl atan(double);
void __cdecl _CIatan();
// void __usercall _CIatan_default(unsigned __int64 a1<st0>);
int _atan_default(); // weak
int start_5(); // weak
int __cdecl vfscanf(int (__cdecl *inputfn)(_iobuf *, const char *, localeinfo_struct *, char *), _iobuf *stream, const char *format, localeinfo_struct *plocinfo, char *arglist);
int __cdecl fscanf(_iobuf *stream, const char *format);
int __cdecl _isalpha_l(int c, localeinfo_struct *plocinfo);
int __cdecl isalpha(int c);
int __cdecl _isupper_l(int c, localeinfo_struct *plocinfo);
int __cdecl isupper(int c);
int __cdecl _islower_l(int c, localeinfo_struct *plocinfo);
int __cdecl islower(int c);
int __cdecl _isdigit_l(int c, localeinfo_struct *plocinfo);
int __cdecl isdigit(int c);
int __cdecl _isxdigit_l(int c, localeinfo_struct *plocinfo);
int __cdecl isxdigit(int c);
int __cdecl _isspace_l(int c, localeinfo_struct *plocinfo);
int __cdecl isspace(int c);
int __cdecl _ispunct_l(int c, localeinfo_struct *plocinfo);
int __cdecl ispunct(int c);
int __cdecl _isalnum_l(int c, localeinfo_struct *plocinfo);
int __cdecl isalnum(int c);
int __cdecl _isgraph_l(int c, localeinfo_struct *plocinfo);
int __cdecl isgraph(int c);
int __cdecl _iscntrl_l(int c, localeinfo_struct *plocinfo);
int __cdecl iscntrl(int c);
int __cdecl _access_s(const char *path, int amode);
int __cdecl _access(const char *path, int amode);
// int __usercall _setjmp3<eax>(int a1<ebx>, int a2<ebp>, int a3<edi>, int a4<esi>, int a5, int a6, void *a7, int a8, char a9);
const char *__cdecl _get_sys_err_msg(int m);
char *__cdecl strerror(int errnum);
int __cdecl _get_errno_from_oserr(unsigned int oserrno);
int *__cdecl _errno();
unsigned int *__cdecl __doserrno();
void __cdecl _dosmaperr(unsigned int oserrno);
int __cdecl _freopen_helper(_iobuf **pfile, const char *filename, const char *mode, _iobuf *str, int shflag);
_iobuf *__cdecl freopen(const char *filename, const char *mode, _iobuf *str);
long double __cdecl _strtod_l(const char *nptr, char **endptr, localeinfo_struct *plocinfo);
long double __cdecl strtod(const char *nptr, char **endptr);
void __cdecl strpbrk(char *string, char *control);
void __cdecl abort();
void __cdecl longjmp(jmp_buf, int);
int __cdecl lj_return(int, int); // weak
int __cdecl _strcoll_l(const char *_string1, const char *_string2, localeinfo_struct *plocinfo);
int __cdecl strcoll(const char *_string1, const char *_string2);
long double __cdecl frexp(long double x, int *expptr);
double __cdecl sinh(double);
double disp1(); // weak
double __cdecl cosh(double);
double __cdecl tanh(double);
// int __usercall _CIsinh<eax>(__int16 a1<cx>, __int16 a2<fpstat>, double a3<st0>, char a4, char a5, char a6);
int idisp1(); // weak
void __cdecl _CIcosh();
void __cdecl _CItanh();
double __cdecl asin(double);
void __cdecl _CIasin();
// void __usercall _CIasin_default(unsigned __int64 a1<st0>);
int _asin_default(); // weak
double start_6(); // weak
double __cdecl modf(double, double *);
double __cdecl _modf_pentium4(double _C, double *_14);
double __cdecl log10(double);
void __cdecl _CIlog10();
// void __usercall _CIlog10_default(unsigned __int64 a1<st0>);
int _log10_default(); // weak
double start_7(); // weak
double __cdecl log(double);
void __cdecl _CIlog();
// void __usercall _CIlog_default(unsigned __int64 a1<st0>);
int _log_default(); // weak
double start_8(); // weak
double __cdecl exp(double);
void __cdecl _CIexp();
void __cdecl _exp_default(unsigned __int64 parm1);
// int __usercall _CIexp_default<eax>(__int16 a1<cx>, __int16 a2<fpstat>, double a3<st0>, char a4, char a5, char a6);
int __cdecl _toupper_l(int c, localeinfo_struct *plocinfo);
int __cdecl toupper(int c);
int __cdecl _gmtime64_s(tm *ptm, const __int64 *timp);
tm *__cdecl _gmtime64(const __int64 *timp);
int __cdecl system(const char *command);
int __cdecl remove(const char *path);
int __cdecl rename(const char *oldname, const char *newname);
void __cdecl init_namebuf(int flag);
// int __usercall genfname<eax>(char *fname<ecx>, unsigned int fnameSize, unsigned int tmp_max);
int __cdecl _tmpnam_helper(char *s, unsigned int sz, int buffer_no, unsigned int tmp_max, char **ret);
char *__cdecl tmpnam(char *s);
int __cdecl _tmpfile_helper(_iobuf **pFile, int shflag);
_iobuf *__cdecl tmpfile();
int __cdecl clock();
int __cdecl __inittime();
// void __usercall copytlocinfo_nolock(threadlocaleinfostruct *ptlocid<eax>, threadlocaleinfostruct *ptlocis<ecx>);
void __cdecl _free_locale(localeinfo_struct *plocinfo);
void __cdecl _strcats(char *outstr, unsigned int sizeInBytes, int n);
int __cdecl __lc_strtolc(tagLC_STRINGS *names, const char *locale);
void __cdecl __lc_lctostr(char *locale, unsigned int sizeInBytes, tagLC_STRINGS *names);
// char *__usercall setlocale_get_all<eax>(threadlocaleinfostruct *ploci<esi>);
char *__cdecl _expandlocale(char *expr, char *output, unsigned int sizeInChars, tagLC_ID *id, unsigned int *cp, int category);
// char *__usercall setlocale_set_cat<eax>(threadlocaleinfostruct *ploci<esi>, int category<ecx>, const char *locale);
// char *__usercall setlocale_nolock<eax>(threadlocaleinfostruct *ploci<edx>, int _category<ecx>, const char *_locale);
char *__cdecl setlocale(int _category, const char *_locale);
// IDpair *__usercall idtab<eax>(_iobuf *pstream<edi>);
_iobuf *__cdecl _popen(const char *cmdstring, const char *type);
int __cdecl _pclose(_iobuf *pstream);
int __cdecl clearerr_s(_iobuf *stream);
void __cdecl clearerr(_iobuf *stream);
__int64 __cdecl _ftelli64_nolock(_iobuf *str);
__int64 __cdecl _ftelli64(_iobuf *stream);
void __cdecl strspn(char *string, char *control);
// int __cdecl _except_handler3(_EXCEPTION_RECORD *pExcept, _EH3_EXCEPTION_REGISTRATION *TargetFrame, int); idb
void __cdecl _global_unwind2(PVOID TargetFrame);
int __cdecl gu_return(PVOID TargetFrame); // weak
signed int __cdecl _unwind_handler(int a1, int a2, int a3, int a4, int a5);
// int __usercall _local_unwind2<eax>(int a1<ebp>, int a2, unsigned int a3);
int __cdecl _abnormal_termination();
void __cdecl _NLG_Notify1();
// int __usercall _NLG_Notify<eax>(int result<eax>, int a2<ebp>, int a3);
int __cdecl _NLG_Go(int); // weak
// int __usercall _NLG_Call<eax>(int (*a1)(void)<eax>);
int __cdecl _crtLCMapStringA_stat(localeinfo_struct *plocinfo, unsigned int Locale, unsigned int dwMapFlags, const char *lpSrcStr, int cchSrc, char *lpDestStr, int cchDest, int code_page, int bError);
int __cdecl __crtLCMapStringA(localeinfo_struct *plocinfo, unsigned int Locale, unsigned int dwMapFlags, const char *lpSrcStr, int cchSrc, char *lpDestStr, int cchDest, int code_page, int bError);
const unsigned __int16 *__cdecl __pctype_func();
int __cdecl __init_ctype(threadlocaleinfostruct *ploci);
unsigned int __cdecl ___lc_codepage_func();
unsigned int *__cdecl ___lc_handle_func();
void *__cdecl _malloc_crt(unsigned int cb);
void *__cdecl _calloc_crt(unsigned int count, unsigned int size);
void *__cdecl _realloc_crt(void *ptr, unsigned int size);
void *__cdecl _recalloc_crt(void *ptr, unsigned int count, unsigned int size);
void __cdecl strlen(char *buf);
_iobuf *__cdecl _wfsopen(const wchar_t *file, const wchar_t *mode, int shflag);
void __thiscall std::bad_exception::_bad_exception(std::bad_exception *this);
void *__thiscall std::bad_exception::_vector_deleting_destructor_(std::bad_exception *this, unsigned int);
int __cdecl __TypeMatch(_s_HandlerType *pCatch, _s_CatchableType *pCatchable, _s_ThrowInfo *pThrow);
int __cdecl __FrameUnwindFilter(_EXCEPTION_POINTERS *pExPtrs);
void __cdecl __FrameUnwindToState(EHRegistrationNode *pRN, void *pDC, _s_FuncInfo *pFuncInfo, int targetState);
// int __usercall ExFilterRethrow<eax>(_EXCEPTION_POINTERS *pExPtrs<eax>);
void __cdecl __DestructExceptionObject(EHExceptionRecord *pExcept, char fThrowNotAllowed);
void *__cdecl __AdjustPointer(void *pThis, PMD *pmd);
bool __cdecl __uncaught_exception();
// char __usercall IsInExceptionSpec<al>(EHExceptionRecord *pExcept, _s_ESTypeList *pESTypeList<edi>);
void __cdecl CallUnexpected(_s_ESTypeList *pESTypeList);
// void *__usercall CallCatchBlock<eax>(EHExceptionRecord *pExcept, EHRegistrationNode *pRN, _CONTEXT *pContext, _s_FuncInfo *pFuncInfo, void *handlerAddress<ecx>, int CatchDepth, unsigned int NLGCode);
int __cdecl __BuildCatchObjectHelper(EHExceptionRecord *pExcept, void *pRN, _s_HandlerType *pCatch, _s_CatchableType *pConv);
void __cdecl __BuildCatchObject(EHExceptionRecord *pExcept, void *pRN, _s_HandlerType *pCatch, _s_CatchableType *pConv);
// void __usercall CatchIt(EHExceptionRecord *pExcept, EHRegistrationNode *pRN<esi>, _CONTEXT *pContext, void *pDC, _s_FuncInfo *pFuncInfo, _s_HandlerType *pCatch<ebx>, _s_CatchableType *pConv, _s_TryBlockMapEntry *pEntry<edi>, int CatchDepth, EHRegistrationNode *pMarkerRN, char IsRethrow);
void __cdecl FindHandlerForForeignException(EHExceptionRecord *pExcept, EHRegistrationNode *pRN, _CONTEXT *pContext, void *pDC, _s_FuncInfo *pFuncInfo, int curState, int CatchDepth, EHRegistrationNode *pMarkerRN);
void __cdecl FindHandler(EHExceptionRecord *pExcept, EHRegistrationNode *pRN, _CONTEXT *pContext, void *pDC, _s_FuncInfo *pFuncInfo, char recursive, int CatchDepth, EHRegistrationNode *pMarkerRN);
void __thiscall std::bad_exception::bad_exception(std::bad_exception *this, std::bad_exception *__that);
_EXCEPTION_DISPOSITION __cdecl __InternalCxxFrameHandler(EHExceptionRecord *pExcept, EHRegistrationNode *pRN, _CONTEXT *pContext, void *pDC, _s_FuncInfo *pFuncInfo, int CatchDepth, EHRegistrationNode *pMarkerRN, char recursive);
// int __userpurge xtoa_s<eax>(unsigned int val<eax>, char *buf<ecx>, unsigned int sizeInTChars, unsigned int radix, int is_neg);
int __cdecl _itoa_s(int val, char *buf, unsigned int sizeInTChars, int radix);
int __cdecl _ultoa_s(unsigned int val, char *buf, unsigned int sizeInTChars, int radix);
void __cdecl type_info::_Type_info_dtor(type_info *_This);
const char *__cdecl type_info::_Name_base(type_info *_This, __type_info_node *__ptype_info_node);
void __cdecl strcmp(char *str1, char *str2);
void *__cdecl _VEC_memcpy(void *dst, void *src, int len);
int __cdecl __sse2_available_init();
void __cdecl _initp_heap_handler(void *enull);
int __cdecl _callnewh(unsigned int size);
void *__cdecl _encoded_null();
unsigned int __stdcall __crtTlsAlloc(void (__stdcall *lpCallBack)(void *));
void *(__stdcall *__cdecl __set_flsgetvalue())(unsigned int);
void __cdecl _mtterm();
void __cdecl _initptd(_tiddata *ptd, threadlocaleinfostruct *ptloci);
_tiddata *__cdecl _getptd_noexit();
_tiddata *__cdecl _getptd();
void __stdcall _freefls(void *data);
int __cdecl _mtinit();
void __stdcall _CallSettingFrame(unsigned int funclet, unsigned int pRN, unsigned int dwInCode);
// BOOL __usercall __report_gsfailure<eax>(char _CF<cf>, char _ZF<zf>, char _SF<sf>, char _OF<of>, unsigned int a5<eax>, unsigned int a6<edx>, unsigned int a7<ecx>, unsigned int a8<ebx>, unsigned int a9<edi>, unsigned int a10<esi>, char a11);
int __cdecl _heap_init();
int __cdecl _close_nolock(int fh);
int __cdecl _close(int fh);
void __cdecl _freebuf(_iobuf *stream);
void __cdecl _initp_misc_invarg(void *enull);
void __cdecl _call_reportfault(int nDbgHookCode, unsigned int dwExceptionCode, unsigned int dwExceptionFlags);
void __cdecl _invoke_watson(const wchar_t *pszExpression, const wchar_t *pszFunction, const wchar_t *pszFile, unsigned int nLine, unsigned int pReserved);
void __cdecl _invalid_parameter(const wchar_t *pszExpression, const wchar_t *pszFunction, const wchar_t *pszFile, unsigned int nLine, unsigned int pReserved);
void __cdecl _invalid_parameter_noinfo();
int __cdecl _filbuf(_iobuf *str);
int __cdecl _read_nolock(int fh, void *inputbuf, unsigned int cnt);
int __cdecl _read(int fh, void *buf, unsigned int cnt);
int __cdecl _set_osfhnd(int fh, int value);
int __cdecl _free_osfhnd(int fh);
int __cdecl _get_osfhandle(int fh);
int __cdecl __lock_fhandle(int fh);
void __cdecl _unlock_fhandle(int fh);
int __cdecl _alloc_osfhnd();
int __cdecl _lseek_nolock(int fh, int pos, int mthd);
int __cdecl _lseek(int fh, int pos, int mthd);
int __cdecl _ioinit();
_iobuf *__cdecl _openfile(const char *filename, const char *mode, int shflag, _iobuf *str);
_iobuf *__cdecl _getstream();
// int __usercall _local_unwind4<eax>(int a1<ebp>, int a2, int a3, unsigned int a4);
signed int __cdecl unwind_handler4(int a1, int a2, int a3, int a4);
void __stdcall _seh_longjmp_unwind4(unsigned int Dummy);
int __thiscall _EH4_CallFilterFunc(void *this);
int __fastcall _EH4_TransferToHandler(int a1, int a2);
void __fastcall _EH4_GlobalUnwind2(PVOID TargetFrame, PEXCEPTION_RECORD ExceptionRecord);
int __fastcall ReturnPoint_0(PVOID TargetFrame, PEXCEPTION_RECORD ExceptionRecord); // weak
int __fastcall _EH4_LocalUnwind(int a1, unsigned int a2, int a3, int a4, int a5, int a6);
int __cdecl x_ismbbtype_l(localeinfo_struct *plocinfo, unsigned int tst, int cmask, int kmask);
int __cdecl _ismbblead_l(unsigned int tst, localeinfo_struct *plocinfo);
int __cdecl _ismbblead(unsigned int tst);
int __cdecl _mbsnbcpy_s(char *_Arg1, unsigned int _Arg2, const char *_Arg3, unsigned int _Arg4);
void __cdecl _forcdecpt_l(char *buffer, localeinfo_struct *_Locale);
void __cdecl _cropzeros_l(char *buf, localeinfo_struct *_Locale);
int __cdecl _positive(long double *arg);
void __cdecl _fassign_l(int flag, char *argument, char *number, localeinfo_struct *plocinfo);
void __cdecl _fassign(int flag, char *argument, char *number);
// void __usercall shift(char *s<eax>, int dist<edi>);
void __cdecl _forcdecpt(char *buffer);
void __cdecl _cropzeros(char *buf);
// int __usercall cftoe2_l<eax>(char *buf<eax>, unsigned int sizeInBytes, int ndec, int caps, _strflt *pflt, char g_fmt, localeinfo_struct *plocinfo);
int __cdecl _cftoe_l(long double *pvalue, char *buf, unsigned int sizeInBytes, int ndec, int caps, localeinfo_struct *plocinfo);
int __cdecl _cftoe(long double *pvalue, char *buf, unsigned int sizeInBytes, int ndec, int caps);
int __cdecl _cftoa_l(long double *pvalue, char *buf, unsigned int sizeInBytes, int ndec, int caps, localeinfo_struct *plocinfo);
// int __usercall cftof2_l<eax>(char *buf<ecx>, unsigned int sizeInBytes, int ndec, _strflt *pflt<eax>, char g_fmt, localeinfo_struct *plocinfo);
int __cdecl _cftof_l(long double *pvalue, char *buf, unsigned int sizeInBytes, int ndec, localeinfo_struct *plocinfo);
int __cdecl _cftog_l(long double *pvalue, char *buf, unsigned int sizeInBytes, int ndec, int caps, localeinfo_struct *plocinfo);
int __cdecl _cfltcvt_l(long double *arg, char *buffer, unsigned int sizeInBytes, int format, int precision, int caps, localeinfo_struct *plocinfo);
int __cdecl _cfltcvt(long double *arg, char *buffer, unsigned int sizeInBytes, int format, int precision, int caps);
int (*__cdecl _initp_misc_cfltcvt_tab())();
void __cdecl _setdefaultprecision();
int __cdecl _flsbuf(int ch, _iobuf *str);
// void __usercall write_char(char ch<al>, _iobuf *f<ecx>, int *pnumwritten<esi>);
int __cdecl _output_l(_iobuf *stream, const char *format, localeinfo_struct *plocinfo, char *argptr);
int __cdecl _vsnprintf_helper(int (__cdecl *outfn)(_iobuf *, const char *, localeinfo_struct *, char *), char *string, unsigned int count, const char *format, localeinfo_struct *plocinfo, char *ap);
int __cdecl _vsprintf_s_l(char *string, unsigned int sizeInBytes, const char *format, localeinfo_struct *plocinfo, char *ap);
int __cdecl vsprintf_s(char *string, unsigned int sizeInBytes, const char *format, char *ap);
void *__cdecl _VEC_memzero(void *dst, int val, int len);
unsigned int __cdecl _msize(void *pblock);
// int __usercall CPtoLCID<eax>(int codepage<eax>);
// void __usercall setSBCS(threadmbcinfostruct *ptmbci<eax>);
// void __usercall setSBUpLow(threadmbcinfostruct *ptmbci<esi>);
threadmbcinfostruct *__cdecl __updatetmbcinfo();
// int __usercall getSystemCP<eax>(int codepage<esi>);
int __cdecl _setmbcp_nolock(int codepage, threadmbcinfostruct *ptmbci);
int __cdecl _setmbcp(int codepage);
int __cdecl __initmbctable();
void __cdecl __addlocaleref(threadlocaleinfostruct *ptloci);
void *__cdecl __removelocaleref(threadlocaleinfostruct *ptloci);
void __cdecl __freetlocinfo(threadlocaleinfostruct *ptloci);
threadlocaleinfostruct *__cdecl _updatetlocinfoEx_nolock(threadlocaleinfostruct **pptlocid, threadlocaleinfostruct *ptlocis);
threadlocaleinfostruct *__cdecl __updatetlocinfo();
// int __usercall _check_float_string<eax>(unsigned int nFloatStrUsed, unsigned int *pnFloatStrSz<esi>, char **pFloatStr<edi>, char *floatstring, int *pmalloc_FloatStrFlag);
int __cdecl hextodec(char chr);
// int __usercall inc<eax>(_iobuf *fileptr<edx>);
// int __usercall whiteout<eax>(int *counter<esi>, _iobuf *fileptr);
int __cdecl _input_l(_iobuf *stream, const char *format, localeinfo_struct *plocinfo, char *arglist);
void __cdecl __ascii_strnicmp(char *first, char *last, unsigned int count);
// int __usercall wfindenv<eax>(const wchar_t *name, int len<edi>);
// unsigned __int16 **__usercall copy_environ<eax>(unsigned __int16 **oldenviron<eax>);
int __cdecl __crtwsetenv(unsigned __int16 **poption, const int primary);
unsigned int __cdecl wcslen(const wchar_t *wcs);
// int __usercall findenv<eax>(const char *name, int len<edi>);
// char **__usercall copy_environ_0<eax>(char **oldenviron<eax>);
int __cdecl __crtsetenv(char **poption, const int primary);
unsigned int __cdecl strnlen(const char *str, unsigned int maxsize);
int __cdecl _mtinitlocks();
void __cdecl _mtdeletelocks();
void __cdecl _unlock(int locknum);
int __cdecl _mtinitlocknum(int locknum);
void __cdecl _lock(int locknum);
int __cdecl _mbsnbicoll_l(const char *s1, const char *s2, unsigned int n, localeinfo_struct *plocinfo);
int __cdecl _mbsnbicoll(const char *s1, const char *s2, unsigned int n);
int __cdecl __wtomb_environ();
void *__cdecl calloc(unsigned int num, unsigned int size);
int __cdecl _sse2_mathfcns_init();
void __cdecl _CIsin_pentium4();
int _sin_pentium4(); // weak
double start_9(); // weak
// int __usercall _trandisp1<eax>(int a1<edx>, __int16 a2<cx>, int a3<ebp>, __int16 a4<fpstat>, double _ST7<st0>, char a6, char a7, char a8);
double _trandisp2(void); // weak
// int __usercall _rttospop<eax>(double<st0>); weak
int _rtnospop(void); // weak
// int __usercall _rtnospopde<eax>(int a1<ebp>);
double __cdecl _rtzeronpop();
double __cdecl _rtonenpop();
// double __usercall _tosnan1<st0>(int a1<ebp>, double a2<st0>);
// double __usercall _tosnan2<st0>(int a1<ebp>, double a2<st1>, double a3<st0>);
// double __usercall _nan2<st0>(int a1<ebp>, double a2<st1>, double a3<st0>);
// void __usercall _rtindfnpop(int a1<ebp>);
// void __usercall _rttosnpopde(int a1<ebp>);
int retj(); // weak
// double __usercall _rtchsifneg<st0>(char a1<cl>, double result<st0>);
// double __usercall _twoToTOS<st0>(double a1<st0>);
// double __usercall _convertTOStoQNaN<st0>(int a1<eax>, double result<st0>);
double __fastcall _fload_withFB(int a1, int a2);
double __cdecl _checkTOS_withFB(_DWORD, _DWORD); // weak
void __cdecl _check_overflow_exit();
int check_overflow_start(); // weak
void __cdecl _startTwoArgErrorHandling(unsigned int savCW, unsigned int ret_addr, unsigned __int64 param1, unsigned __int64 param2);
void __cdecl _startOneArgErrorHandling(unsigned int savCW, unsigned int ret_addr, unsigned __int64 param1);
int __cdecl _stbuf(_iobuf *str);
void __cdecl _ftbuf(int flag, _iobuf *str);
int __cdecl _gmtime32_s(tm *ptm, const int *timp);
tm *__cdecl __getgmtimebuf();
int __cdecl _get_daylight(int *_Daylight);
int __cdecl _get_dstbias(int *_Daylight_savings_bias);
int __cdecl _get_timezone(int *_Timezone);
int *__cdecl __daylight();
int *__cdecl __dstbias();
int *__cdecl __timezone();
char **__cdecl __tzname();
// void __usercall tzset_nolock(int a1<edi>);
// void __usercall cvtdate(int trantype, int datetype, int year, int month<eax>, int week, int dayofweek, int date, int hour<ecx>, int min, int sec, int msec);
// int __usercall isindst_nolock<eax>(tm *tb<edi>);
// void __usercall __tzset(int a1<edi>);
int __cdecl _isindst(tm *tb);
int __cdecl _write_nolock(int fh, const void *buf, unsigned int cnt);
int __cdecl _write(int fh, const void *buf, unsigned int cnt);
_flt *__cdecl _fltin2(_flt *flt, const char *str, localeinfo_struct *_Locale);
int __cdecl _isctype_l(int c, int mask, localeinfo_struct *plocinfo);
unsigned int __cdecl __strgtold12_l(_LDBL12 *pld12, const char **p_end_ptr, const char *str, int mult12, int scale, int decpt, int implicit_E, localeinfo_struct *_Locale);
const wchar_t *__cdecl _GET_RTERRMSG(int rterrnum);
void __cdecl _NMSG_WRITE(int rterrnum);
void __cdecl _FF_MSGBANNER();
int __cdecl _isleadbyte_l(int c, localeinfo_struct *plocinfo);
int __cdecl isleadbyte(int c);
int __thiscall _alloca_probe_16(void *this);
unsigned int __cdecl strtoxl(localeinfo_struct *plocinfo, const char *nptr, const char **endptr, int ibase, int flags);
int __cdecl strtol(const char *nptr, char **endptr, int ibase);
unsigned int __cdecl strtoul(const char *nptr, char **endptr, int ibase);
unsigned __int64 __cdecl strtoxq(localeinfo_struct *plocinfo, const char *nptr, const char **endptr, int ibase, int flags);
__int64 __cdecl _strtoi64(const char *nptr, char **endptr, int ibase);
void __cdecl _initp_misc_winsig(void *enull);
// _XCPT_ACTION *__usercall siglookup<eax>(int signum<edx>, _XCPT_ACTION *pxcptacttab);
void (__cdecl *__cdecl __get_sigabrt())(int);
int __cdecl raise(int signum);
void __cdecl _initp_misc_rand_s(void *enull);
int __cdecl __getlocaleinfo(localeinfo_struct *plocinfo, int lc_type, unsigned int localehandle, unsigned int fieldtype, void *address);
void __cdecl _initp_misc_purevirt(void *enull);
int (*__cdecl _RTC_Initialize())(void);
int (*__cdecl _RTC_Terminate())(void);
int __cdecl _ValidateImageBase(char *pImageBase);
_IMAGE_SECTION_HEADER *__cdecl _FindPESection(char *pImageBase, unsigned int rva);
int __cdecl _IsNonwritableInCurrentImage(char *pTarget);
int __cdecl _fcloseall();
void __cdecl _getbuf(_iobuf *str);
int __cdecl _commit(int filedes);
__int64 __cdecl _lseeki64_nolock(int fh, __int64 pos, int mthd);
__int64 __cdecl _lseeki64(int fh, __int64 pos, int mthd);
// int __usercall _cintrindisp2<eax>(int a1<edx>, __int16 a2<fpstat>, double a3<st1>, double a4<st0>, char a5, char a6, char a7);
// int __usercall _cintrindisp1<eax>(int a1<edx>, __int16 a2<cx>, __int16 a3<fpstat>, double a4<st0>, char a5, char a6, char a7);
void __cdecl _ctrandisp2(unsigned __int64 parm1, unsigned __int64 parm2);
double __cdecl ctranexit(__int64 parm1, __int64 parm2); // weak
_DWORD __cdecl cintrinexit(__int64 parm1, __int64 parm2); // weak
void __cdecl _ctrandisp1(unsigned __int64 parm1);
void __cdecl _fload(unsigned __int64 parm);
void __cdecl _CItan_pentium4();
int _tan_pentium4(); // weak
double start_10(); // weak
void __cdecl _CIacos_pentium4();
int _acos_pentium4(); // weak
double start_11(); // weak
void __cdecl _CIcos_pentium4();
int _cos_pentium4(); // weak
double start_12(); // weak
void __cdecl _CIpow_pentium4();
int _pow_pentium4(); // weak
// int _rtinfnpop(void); weak
// int _ffexpm1(void); weak
int __cdecl _d_inttype(long double y);
int __cdecl _powhlp(long double x, long double y, long double *result);
// void __usercall write_char_0(wchar_t ch, _iobuf *f<eax>, int *pnumwritten<esi>);
// void __usercall write_string(wchar_t *string, int len, _iobuf *f<ebx>, int *pnumwritten<eax>, int *perrno<edi>);
int __cdecl _woutput_l(_iobuf *stream, const wchar_t *format, localeinfo_struct *plocinfo, char *argptr);
int __stdcall __CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS *pPtrs);
int __cdecl __CxxSetUnhandledExceptionFilter();
int __cdecl _XcptFilter(unsigned int xcptnum, _EXCEPTION_POINTERS *pxcptinfoptrs);
char *__cdecl _wincmdln();
int __cdecl _setenvp();
// void __usercall parse_cmdline(char *cmdstart<edx>, char **argv, char *args, int *numargs, int *numchars<edi>);
int __cdecl _setargv();
void *__cdecl __crtGetEnvironmentStringsA();
signed int __cdecl __security_init_cookie();
void __cdecl __libm_error_support(void *arg1, void *arg2, void *retval, error_types input_tag);
long double __cdecl _ceil_default(long double x);
long double __cdecl _floor_default(long double x);
long double __cdecl _set_exp(long double x, int exp);
int __cdecl _sptype(long double x);
long double __cdecl _decomp(long double x, int *pexp);
long double __cdecl _copysign(long double x, long double y);
int __cdecl _fpclass(long double x);
void __cdecl _raise_exc_ex(_FPIEEE_RECORD *prec, unsigned int *pcw, int flags, int opcode, void *parg1, void *presult, int isfloat);
void __cdecl _raise_exc(_FPIEEE_RECORD *prec, unsigned int *pcw, int flags, int opcode, long double *parg1, long double *presult);
int __cdecl _handle_exc(unsigned int flags, long double *presult, unsigned int cw);
void __cdecl _set_errno_from_matherr(int matherrtype);
int __cdecl _errcode(unsigned int flags);
long double __cdecl _umatherr(int type, unsigned int opcode, long double arg1, long double arg2, long double retval, unsigned int cw);
long double __cdecl _handle_qnan1(unsigned int opcode, long double x, unsigned int savedcw);
long double __cdecl _handle_qnan2(unsigned int opcode, long double x, long double y, unsigned int savedcw);
long double __cdecl _except1(int flags, int opcode, long double arg, long double result, unsigned int cw);
long double __cdecl _except2(int flags, int opcode, long double arg1, long double arg2, long double result, unsigned int cw);
unsigned int __cdecl _statfp();
unsigned int __cdecl _clrfp();
unsigned int __cdecl _ctrlfp(unsigned int newctrl, unsigned int _mask);
void __cdecl _set_statfp(unsigned int sw);
void __cdecl __set_fpsr_sse2(unsigned int newMXCSR);
void __cdecl _CIatan_pentium4();
int _atan_pentium4(); // weak
double start_13(); // weak
int *__cdecl __sys_nerr();
char **__cdecl __sys_errlist();
int __cdecl strncpy_s(char *_Dst, unsigned int _SizeInBytes, const char *_Src, unsigned int _Count);
int __stdcall _rt_probe_read4(unsigned int *ptr);
// int __usercall _crtCompareStringA_stat<eax>(localeinfo_struct *plocinfo<ecx>, unsigned int Locale, unsigned int dwCmpFlags, const char *lpString1, int cchCount1, const char *lpString2<edx>, int cchCount2, int code_page);
int __cdecl __crtCompareStringA(localeinfo_struct *plocinfo, unsigned int Locale, unsigned int dwCmpFlags, const char *lpString1, int cchCount1, const char *lpString2, int cchCount2, int code_page);
// void __usercall _fFSINH(char a1<bl>, int a2<ebp>);
// double __usercall fFTANH<st0>(char a1<bl>, char a2<bh>, int a3<ebp>, long double a4<st0>);
// double __usercall _fFCOSH<st0>(char a1<bl>, char a2<bh>, int a3<ebp>, double a4<st1>, double a5<st2>, double result<st0>);
int SinhCoshReturn(); // weak
int rtforsnhlarge(); // weak
double chsifneg(); // weak
void __cdecl rtfortnhinf();
// int __usercall fFEXPH<eax>(int a1<ebp>, double a2<st2>, double a3<st0>);
// double __usercall ExpHypSum<st0>(char a1<bh>, double a2<st1>, double a3<st0>);
void __cdecl ExpHypCopyInv();
void __cdecl _CIasin_pentium4();
int _asin_pentium4(); // weak
double start_14(); // weak
long double __cdecl _modf_default(long double x, long double *intptr);
void __cdecl _CIlog10_pentium4();
int _log10_pentium4(); // weak
double start_15(); // weak
void __cdecl _CIlog_pentium4();
int _log_pentium4(); // weak
double start_16(); // weak
void __cdecl _CIexp_pentium4();
double _exp_pentium4(); // weak
double start_17(); // weak
int __cdecl _spawnvpe(int modeflag, const char *filename, const char *const *argv, const char *const *envptr);
int __cdecl _LN43_42(int mode, const char *name, const char *const *argv, const char *const *envp);
int __cdecl _spawnve(int mode, const char *name, const char *const *argv, const char *const *envp);
int __cdecl strcat_s(char *_Dst, unsigned int _SizeInBytes, const char *_Src);
// int __cdecl _getpid();
int __cdecl _rmtmp();
char *__cdecl _strdup(const char *string);
// int __usercall tsopen_nolock<eax>(int *punlock_flag, int *pfh<eax>, const char *path, int oflag, int shflag, int pmode, int bSecure);
int __cdecl _sopen_helper(const char *path, int oflag, int shflag, int pmode, int *pfh, int bSecure);
int __cdecl _sopen_s(int *pfh, const char *path, int oflag, int shflag, int pmode);
// int __usercall get_lc_time<eax>(__lc_time_data *lc_time<ecx>, threadlocaleinfostruct *ploci<eax>);
void __cdecl __free_lc_time(__lc_time_data *lc_time);
int __cdecl __init_time(threadlocaleinfostruct *ploci);
void __cdecl __free_lconv_num(lconv *l);
int __cdecl __init_numeric(threadlocaleinfostruct *ploci);
void __cdecl __free_lconv_mon(lconv *l);
int __cdecl __init_monetary(threadlocaleinfostruct *ploci);
int __cdecl __init_collate(_exception *pexcept);
int __cdecl TranslateName(tagLOCALETAB *lpTable, int high, const char **ppchName);
// int __usercall ProcessCodePage<eax>(char *lpCodePageStr<esi>, setloc_struct *_psetloc_data<edi>);
int __cdecl TestDefaultCountry(unsigned int lcid);
// unsigned int __usercall LcidFromHexString<eax>(char *lpHexString<edx>);
// int __usercall GetPrimaryLen<eax>(char *pchLanguage<edx>);
int __stdcall CountryEnumProc(char *lpLcidString);
// int __usercall TestDefaultLanguage<eax>(unsigned int lcid<eax>, int bTestPrimary, setloc_struct *_psetloc_data);
int __stdcall LangCountryEnumProc(char *lpLcidString);
int __stdcall LanguageEnumProc(char *lpLcidString);
// void __usercall GetLcidFromLangCountry(setloc_struct *_psetloc_data<esi>);
// void __usercall GetLcidFromLanguage(setloc_struct *_psetloc_data<esi>);
int __cdecl __get_qualified_locale(tagLC_STRINGS *const lpInStr, tagLC_ID *lpOutId, tagLC_STRINGS *lpOutStr);
int __cdecl memcmp(const void *lhs, const void *rhs, unsigned int siz);
int __cdecl _crtGetStringTypeA_stat(localeinfo_struct *plocinfo, unsigned int dwInfoType, const char *lpSrcStr, int cchSrc, unsigned __int16 *lpCharType, int code_page, int lcid, int bError);
int __cdecl __crtGetStringTypeA(localeinfo_struct *plocinfo, unsigned int dwInfoType, const char *lpSrcStr, int cchSrc, unsigned __int16 *lpCharType, int code_page, int lcid, int bError);
char *__cdecl _getpath(const char *src, char *dst, unsigned int maxlen);
_iobuf *__cdecl _fdopen(int filedes, const char *mode);
int __cdecl _pipe(int *phandles, unsigned int psize, int textmode);
int __cdecl _cwait(int *stat_loc, int process_id, int action_code);
void __cdecl CallDestructExceptionObject(_EXCEPTION_RECORD *pExcept, int fThrowNotAllowed);
// int __usercall ValidateScopeTableHandlers<eax>(char *pImageBase<edi>, _SCOPETABLE_ENTRY *pScopeTable, unsigned int dwTryLevel<ecx>);
int __cdecl _ValidateEH3RN(_EH3_EXCEPTION_REGISTRATION *pRN);
void *__cdecl _calloc_impl(unsigned int num, unsigned int size, int *errno_tmp);
void *__cdecl _recalloc(void *memblock, unsigned int count, unsigned int size);
_iobuf *__cdecl _wopenfile(const wchar_t *filename, const wchar_t *mode, int shflag, _iobuf *str);
int __cdecl _ValidateRead(int (__stdcall *code)());
void __thiscall _HeapManager::Destructor(_HeapManager *this);
int __cdecl UnDecorator::getNumberOfDimensions();
int __cdecl UnDecorator::getTypeEncoding();
const char *__cdecl UnDecorator::UScore(Tokens tok);
void *__thiscall _HeapManager::getMemory(_HeapManager *this, unsigned int sz, int noBuffer);
DName *__thiscall DName::operator__(DName *this, DName *rd);
int __thiscall charNode::length(charNode *this);
char __thiscall charNode::getLastChar(charNode *this);
char *__thiscall charNode::getString(charNode *this, char *buf, char *end);
void __thiscall pDNameNode::pDNameNode(pDNameNode *this, DName *pName);
int __thiscall pDNameNode::length(pDNameNode *this);
char __thiscall pDNameNode::getLastChar(pDNameNode *this);
char *__thiscall pDNameNode::getString(pDNameNode *this, char *buf, char *end);
char __thiscall DNameStatusNode::getLastChar(DNameStatusNode *this);
DNameStatusNode *__cdecl DNameStatusNode::make(DNameStatus stat);
int __thiscall pairNode::length(pairNode *this);
char __thiscall pairNode::getLastChar(pairNode *this);
char *__thiscall pairNode::getString(pairNode *this, char *buf, char *end);
void __thiscall UnDecorator::UnDecorator(UnDecorator *this, char *output, const char *dName, int maxLen, char *(__cdecl *pGetParameter)(int), unsigned int disable);
DName *__cdecl UnDecorator::getDataIndirectType(DName *result);
DName *__cdecl UnDecorator::getThisType(DName *result);
char *__cdecl getStringHelper(char *buf, char *end, char *str, int len);
void __thiscall DName::DName(DName *this, DName *pd);
void __thiscall DName::DName(DName *this, DNameStatus st);
char *__thiscall DName::getString(DName *this, char *buf, int max);
void __thiscall DName::append(DName *this, DNameNode *newRight);
DName *__thiscall DName::operator_(DName *this, DNameStatus st);
Replicator *__thiscall Replicator::operator__(Replicator *this, DName *rd);
DName *__thiscall Replicator::operator__(Replicator *this, DName *result, int x);
void __thiscall pcharNode::pcharNode(pcharNode *this, const char *str, int len);
char __thiscall pcharNode::getLastChar(pcharNode *this);
char *__thiscall pcharNode::getString(pcharNode *this, char *buf, char *end);
char *__thiscall DNameStatusNode::getString(DNameStatusNode *this, char *buf, char *end);
DName *__cdecl UnDecorator::getReturnType(DName *result, DName *pDeclarator);
DName *__thiscall DName::operator__(DName *this, DNameStatus st);
void __thiscall DName::doPchar(DName *this, const char *str, int len);
DName *__thiscall DName::operator_(DName *this, char ch);
void __thiscall DName::DName(DName *this, const char *s);
void __thiscall DName::DName(DName *this, const char **name, char terminator);
void __thiscall DName::DName(DName *this, unsigned __int64 num);
void __thiscall DName::DName(DName *this, __int64 num);
DName *__thiscall DName::operator_(DName *this, DName *result, DNameStatus st);
DName *__thiscall DName::operator__(DName *this, DName *rd);
DName *__thiscall DName::operator_(DName *this, const char *str);
DName *__cdecl UnDecorator::getCallingConvention(DName *result);
DName *__cdecl UnDecorator::getVCallThunkType(DName *result);
DName *__thiscall DName::operator_(DName *this, DName *result, DName *rd);
DName *__thiscall DName::operator__(DName *this, char ch);
DName *__thiscall DName::operator__(DName *this, const char *str);
DName *__cdecl UnDecorator::getArgumentList(DName *result);
DName *__cdecl UnDecorator::getVdispMapType(DName *result, DName *superType);
DName *__cdecl operator_(DName *result, char c, DName *rd);
DName *__cdecl operator_(DName *result, DNameStatus st, DName *rd);
DName *__cdecl operator_(DName *result, const char *s, DName *rd);
DName *__thiscall DName::operator_(DName *this, DName *result, char ch);
DName *__thiscall DName::operator_(DName *this, DName *result, const char *str);
DName *__cdecl UnDecorator::getDimension(DName *result, bool fSigned);
DName *__cdecl UnDecorator::getEnumType(DName *result);
DName *__cdecl UnDecorator::getArgumentTypes(DName *result);
DName *__cdecl UnDecorator::getThrowTypes(DName *result);
DName *__cdecl UnDecorator::getExtendedDataIndirectType(DName *result, const char **prType, bool *fIsPinPtr, int thisFlag);
DName *__cdecl UnDecorator::getArrayType(DName *result, DName *superType);
DName *__cdecl UnDecorator::getLexicalFrame(DName *result);
DName *__cdecl UnDecorator::getVfTableType(DName *result, DName *superType);
DName *__cdecl UnDecorator::getStringEncoding(DName *result, char *prefix, int __formal);
DName *__cdecl UnDecorator::getSignedDimension(DName *result);
DName *__cdecl UnDecorator::getTemplateConstant(DName *result);
DName *__cdecl UnDecorator::getPtrRefDataType(DName *result, DName *superType, int isPtr);
DName *__cdecl UnDecorator::getTemplateArgumentList(DName *result);
DName *__cdecl UnDecorator::getOperatorName(DName *result, bool fIsTemplate, bool *pfReadTemplateArguments);
DName *__cdecl UnDecorator::getTemplateName(DName *result, bool fReadTerminator);
DName *__cdecl UnDecorator::getZName(DName *result, bool fUpdateCachedNames, bool fAllowEmptyName);
DName *__cdecl UnDecorator::getScopedName(DName *result);
DName *__cdecl UnDecorator::getECSUDataType(DName *result);
DName *__cdecl UnDecorator::getSymbolName(DName *result);
DName *__cdecl UnDecorator::getBasedType(DName *result);
DName *__cdecl UnDecorator::composeDeclaration(DName *result, DName *symbol);
DName *__cdecl UnDecorator::getDecoratedName(DName *result);
DName *__cdecl UnDecorator::getScope(DName *result);
DName *__cdecl UnDecorator::getFunctionIndirectType(DName *result, DName *superType);
DName *__cdecl UnDecorator::getDataIndirectType(DName *result, DName *superType, const char *prType, DName *cvType, int thisFlag);
char *__thiscall UnDecorator::operator char__(UnDecorator *this);
DName *__cdecl UnDecorator::getPtrRefType(DName *result, DName *cvType, DName *superType, const char *ptrChar);
char *__cdecl __unDName(char *outputString, const char *name, int maxStringLength, void *(__cdecl *pAlloc)(unsigned int), void (__cdecl *pFree)(void *), unsigned __int16 disableFlags);
DName *__cdecl UnDecorator::getBasicDataType(DName *result, DName *superType);
DName *__cdecl UnDecorator::getPrimaryDataType(DName *result, DName *superType);
DName *__cdecl UnDecorator::getDataType(DName *result, DName *pDeclarator);
DName *__cdecl UnDecorator::getExternalDataType(DName *result, DName *superType);
void __cdecl _crt_debugger_hook(int _Reserved);
int __cdecl _mbsnbicmp_l(const char *s1, const char *s2, unsigned int n, localeinfo_struct *plocinfo);
int __cdecl _mbsnbicmp(const char *s1, const char *s2, unsigned int n);
int __cdecl _mbsnbcpy_s_l(char *_Dst, unsigned int _SizeInBytes, const char *_Src, unsigned int _CountInBytes, localeinfo_struct *_LocInfo);
int __cdecl _atodbl_l(_CRT_DOUBLE *d, char *str, localeinfo_struct *plocinfo);
int __cdecl _atoflt_l(_CRT_FLOAT *d, char *str, localeinfo_struct *plocinfo);
int __cdecl _fptostr(char *buf, unsigned int sizeInBytes, int digits, _strflt *pflt);
void __cdecl __dtold(_LDOUBLE *pld, long double *px);
_strflt *__cdecl _fltout2(_CRT_DOUBLE x, _strflt *flt, char *resultstr, unsigned int resultsize);
int __cdecl byte_7CAAC1(__int64 x, int flt, int resultstr, int resultsize); // weak
void __cdecl _fptrap();
int __cdecl _controlfp_s(unsigned int *_CurrentState, unsigned int newctrl, unsigned int mask);
int __cdecl _isatty(int fh);
int __cdecl _wctomb_s_l(int *pRetValue, char *dst, unsigned int sizeInBytes, wchar_t wchar, localeinfo_struct *plocinfo);
int __cdecl wctomb_s(int *pRetValue, char *dst, unsigned int sizeInBytes, wchar_t wchar);
// void __usercall write_string_0(char *string, int len, _iobuf *f<ebx>, int *pnumwritten<eax>, int *perrno<edi>);
int __cdecl _output_s_l(_iobuf *stream, const char *format, localeinfo_struct *plocinfo, char *argptr);
int __cdecl _mbtowc_l(wchar_t *pwc, const char *s, unsigned int n, localeinfo_struct *plocinfo);
int __cdecl mbtowc(wchar_t *pwc, const char *s, unsigned int n);
int __cdecl _wcsnicoll_l(const wchar_t *_string1, const wchar_t *_string2, unsigned int count, localeinfo_struct *plocinfo);
int __cdecl _wcsnicoll(const wchar_t *_string1, const wchar_t *_string2, unsigned int count);
unsigned __int16 *__cdecl _wcsdup(const wchar_t *string);
int __cdecl wcscpy_s(unsigned __int16 *_Dst, unsigned int _SizeInWords, const wchar_t *_Src);
int __cdecl __mbtow_environ();
int __cdecl _wsetenvp();
void *__cdecl __crtGetEnvironmentStringsW();
unsigned __int16 *__cdecl wcschr(const wchar_t *string, wchar_t ch);
int __cdecl _strnicoll_l(const char *_string1, const char *_string2, unsigned int count, localeinfo_struct *plocinfo);
void __cdecl _87except(int opcode, _exception *exc, unsigned __int16 *pcw16);
unsigned __int16 __cdecl _putwch_nolock(wchar_t ch);
INTRNCVT_STATUS __cdecl _ld12tod(_LDBL12 *pld12, _CRT_DOUBLE *d);
INTRNCVT_STATUS __cdecl _ld12tof(_LDBL12 *pld12, _CRT_FLOAT *f);
void __cdecl __mtold12(char *manptr, unsigned int manlen, _LDBL12 *ld12);
int __cdecl __crtMessageBoxW(const wchar_t *lpText, const wchar_t *lpCaption, unsigned int uType);
int __cdecl wcscat_s(unsigned __int16 *_Dst, unsigned int _SizeInWords, const wchar_t *_Src);
int __cdecl wcsncpy_s(unsigned __int16 *_Dst, unsigned int _SizeInWords, const wchar_t *_Src, unsigned int _Count);
int __cdecl _set_error_mode(int em);
int __cdecl iswctype(unsigned __int16 c, unsigned __int16 mask);
int __cdecl _crtGetLocaleInfoA_stat(localeinfo_struct *plocinfo, unsigned int Locale, unsigned int LCType, char *lpLCData, int cchData);
int __cdecl __crtGetLocaleInfoA(localeinfo_struct *plocinfo, unsigned int Locale, unsigned int LCType, char *lpLCData, int cchData);
long double __cdecl _frnd(long double x);
unsigned __int16 __cdecl _fputwc_nolock(wchar_t ch, _iobuf *str);
int __cdecl _dospawn(int mode, const char *name, char *cmdblk, char *envblk);
int __cdecl _cenvarg(const char *const *argv, const char *const *envp, char **argblk, char **envblk, const char *name);
int __cdecl _chsize_nolock(int filedes, __int64 size);
int __cdecl _setmode_nolock(int fh, int mode);
int __cdecl _get_fmode(int *pMode);
// int __usercall tsopen_nolock_0<eax>(int *punlock_flag, int *pfh<eax>, const wchar_t *path, int oflag, int shflag, int pmode, int bSecure);
int __cdecl _wsopen_helper(const wchar_t *path, int oflag, int shflag, int pmode, int *pfh, int bSecure);
int __cdecl _wsopen_s(int *pfh, const wchar_t *path, int oflag, int shflag, int pmode);
int __cdecl _wcsnicmp_l(const wchar_t *first, const wchar_t *last, unsigned int count, localeinfo_struct *plocinfo);
int __cdecl _wcsnicmp(const wchar_t *first, const wchar_t *last, unsigned int count);
int __cdecl wcsncmp(const wchar_t *first, const wchar_t *last, unsigned int count);
int __cdecl _I10_OUTPUT(_LDOUBLE ld, int ndigits, unsigned int output_flags, _FloatOutStruct *fos);
// unsigned __int16 __usercall hw_cw<ax>(unsigned int abstr<ebx>);
// unsigned int __usercall _hw_cw_sse2<eax>(unsigned int abstr<edx>);
unsigned int __cdecl _control87(unsigned int newctrl, unsigned int mask);
int __cdecl __crtCompareStringW(unsigned int Locale, unsigned int dwCmpFlags, const wchar_t *lpString1, int cchCount1, const wchar_t *lpString2, int cchCount2);
HANDLE __cdecl __initconout();
BOOL __cdecl __termconout();
int __cdecl _flswbuf(int ch, _iobuf *str);
int __cdecl _mbsnicmp_l(const char *s1, const char *s2, unsigned int n, localeinfo_struct *plocinfo);
int __cdecl _mbsnicmp(const char *s1, const char *s2, unsigned int n);
unsigned __int16 __cdecl _towlower_l(unsigned __int16 c, localeinfo_struct *plocinfo);
unsigned int __cdecl wcsnlen(const wchar_t *wcs, unsigned int maxsize);
int __cdecl __crtLCMapStringW(unsigned int Locale, unsigned int dwMapFlags, const wchar_t *lpSrcStr, int cchSrc, wchar_t *lpDestStr, int cchDest);
float __cdecl ceilf(float _X);
int __cdecl NiSprintf(char *pcDest, unsigned int uiDestSize, const char *pcFormat);
float __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::RemoveHead(NiTPointerListBase<NiTPointerAllocator<unsigned int>,float> *this);
int __thiscall NiTSet<unsigned_int>::Find(NiTSet<unsigned int> *this, const unsigned int *element);
bool __thiscall NiControllerManager::BlendFromSequence(NiControllerManager *this, NiControllerSequence *pkSourceSequence, NiControllerSequence *pkDestSequence, float fDuration, const char *pcDestTextKey, int iPriority, float fSourceWeight, float fDestWeight, NiControllerSequence *pkTimeSyncSeq);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiObject___bool>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,NiObject *,bool> *this, NiTMapItem<NiObject *,bool> *pkItem, NiObject *key, bool val);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DPixelShader__>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, NiTMapItem<unsigned int,NiVBSet *> *pkItem, unsigned int key, NiVBSet *val);
void __thiscall NiTObjectList<NiActorManager::TimelineData>::_NiTObjectList<NiActorManager::TimelineData>(NiTObjectList<NiActorManager::TimelineData> *this);
void *__thiscall NiTListBase<NiTObjectAllocator<NiActorManager::TimelineData>_NiActorManager::TimelineData>::_scalar_deleting_destructor_(NiTListBase<NiTObjectAllocator<NiActorManager::TimelineData>,NiActorManager::TimelineData> *this, unsigned int);
void *__thiscall NiTObjectList<NiActorManager::TimelineData>::_vector_deleting_destructor_(NiTObjectList<NiActorManager::TimelineData> *this, unsigned int);
unsigned int __thiscall NiActorManager::FindSequenceID(NiActorManager *this, const char *pcName);
void __thiscall NiActorManager::ProcessCallbacks(NiActorManager *this);
void __thiscall NiActorManager::RaiseAnimActivatedEvents(NiActorManager *this);
void __thiscall NiActorManager::RaiseAnimDeactivatedEvents(NiActorManager *this);
void __thiscall NiTSet<NiPointer<NiActorManager::ChainCompletionInfo>>::Realloc(NiTSet<NiPointer<NiControllerSequence> > *this, unsigned int uiNewSize);
void *__thiscall ShortCutInvPosItem::_scalar_deleting_destructor_(NiTextKeyMatch *this, unsigned int);
bool __thiscall NiTextKeyMatch::IsKeyMatch(NiTextKeyMatch *this, const char *pcTextKey);
void __thiscall NiActorManager::TimelineData::SetValues(NiActorManager::TimelineData *this, float fEventTime, NiActorManager::EventType eEventType, unsigned int eSequenceID, NiTextKeyMatch *pkMatchObject, const char *pcTextKeyMatched);
void *__thiscall NiActorManager::ChainCompletionInfo::_vector_deleting_destructor_(NiActorManager::ChainCompletionInfo *this, unsigned int);
void __thiscall NiTObjectList<NiActorManager::TimelineData>::DeleteItem(NiTObjectList<NiActorManager::TimelineData> *this, NiTListItem<NiActorManager::TimelineData> *pkItem);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiObject___NiObject__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiObject *,NiObject *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiObject___bool>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiObject *,bool> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::Sequence__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiKFMTool::Sequence *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::SequenceGroup__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiKFMTool::SequenceGroup *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiControllerSequence__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiControllerSequence *> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiControllerSequence__>::_vector_deleting_destructor_(NiTPointerMap<unsigned int,NiControllerSequence *> *this, unsigned int);
NiControllerManager *__thiscall NiActorManager::FindControllerManager(NiActorManager *this, NiAVObject *pkObject);
NiBoneLODController *__thiscall NiActorManager::FindBoneLODController(NiActorManager *this, NiAVObject *pkObject);
void __thiscall NiActorManager::AddTimelineDataObjectAtSameTime(NiActorManager *this, NiActorManager::EventType eEventType, unsigned int eSequenceID, NiTextKeyMatch *pkMatchObject, float fEventTime, const char *pcTextKeyMatched);
bool __thiscall NiActorManager::ActivateSequence(NiActorManager *this, unsigned int eSequenceID, int iPriority, bool bStartOver, float fWeight, float fEaseInTime, unsigned int eTimeSyncSeqID);
bool __thiscall NiActorManager::DeactivateSequence(NiActorManager *this, unsigned int eSequenceID, float fEaseOutTime);
void __thiscall NiActorManager::UnloadSequence(NiActorManager *this, unsigned int eSequenceID);
NiKFMTool::Transition::BlendPair *__thiscall NiActorManager::GetNextBlendPair(NiActorManager *this, unsigned int uiTransSrcID, unsigned int uiTransDesID, NiKFMTool::Transition *pkTransition, float fFrameTime, float *fActualUnboundedFrame);
void __thiscall NiTArray<NiPointer<NiInterpController>>::NiTArray<NiPointer<NiInterpController>>(NiTArray<NiPointer<NiInterpController> > *this, unsigned int uiMaxSize, unsigned int uiGrowBy);
void __thiscall NiTArray<NiPointer<NiInterpController>>::_NiTArray<NiPointer<NiInterpController>>(NiTArray<NiPointer<NiInterpController> > *this);
void __thiscall NiTSet<NiPointer<NiActorManager::ChainCompletionInfo>>::_NiTSet<NiPointer<NiActorManager::ChainCompletionInfo>>(NiTSet<NiPointer<NiControllerSequence> > *this);
void __thiscall NiTSet<NiPointer<NiActorManager::ChainCompletionInfo>>::Add(NiTSet<NiPointer<NiActorManager::ChainCompletionInfo> > *this, NiPointer<NiActorManager::ChainCompletionInfo> *element);
void *__thiscall NiTArray<NiPointer<NiInterpController>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiInterpController> > *this, unsigned int);
NiKFMTool::KFM_RC __thiscall NiKFMTool::IsTransitionAllowed(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID, bool *bAllowed);
void __thiscall NiTPointerMap<NiObject___bool>::DeleteItem(NiTPointerMap<NiObject *,bool> *this, NiTMapItem<NiObject *,bool> *pkItem);
void *__thiscall NiTPointerMap<NiObject___NiObject__>::_vector_deleting_destructor_(NiTPointerMap<NiObject *,NiObject *> *this, unsigned int);
void *__thiscall NiTPointerMap<NiObject___bool>::_vector_deleting_destructor_(NiTPointerMap<NiObject *,bool> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiKFMTool::Sequence__>::_scalar_deleting_destructor_(NiTPointerMap<unsigned int,NiKFMTool::Sequence *> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiKFMTool::SequenceGroup__>::_scalar_deleting_destructor_(NiTPointerMap<unsigned int,NiKFMTool::SequenceGroup *> *this, unsigned int);
NiTMapItem<unsigned int,NiVBSet *> *__thiscall NiTPointerMap<enum___D3DFORMAT_NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo__>::NewItem(NiTPointerMap<unsigned int,NiVBSet *> *this);
void __thiscall NiTArray<NiPointer<NiActorManager::CallbackData>>::_NiTArray<NiPointer<NiActorManager::CallbackData>>(NiTArray<NiPointer<NiActorManager::CallbackData> > *this);
void *__thiscall NiTArray<NiPointer<NiActorManager::CallbackData>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiActorManager::CallbackData> > *this, unsigned int);
int __cdecl NiTAbstractPoolAllocator<NiActorManager::TimelineData>::CreateFreeMem();
void __thiscall NiActorManager::NiActorManager(NiActorManager *this, NiKFMTool *pkKFMTool, bool bCumulativeAnimations);
void __thiscall NiActorManager::_NiActorManager(NiActorManager *this);
bool __thiscall NiActorManager::ChangeSequence(NiActorManager *this, unsigned int eSequenceID, NiControllerSequence *pkSequence);
NiActorManager::ChainCompletionInfo *__thiscall NiActorManager::FillChainComplete(NiActorManager *this, unsigned int uiSrcID, unsigned int uiDesID, float fFrameDuration, float *fSrcBeginFrame, float *fTotalTime);
void __thiscall NiCloningProcess::NiCloningProcess(NiCloningProcess *this);
void __thiscall NiKFMTool::NiKFMTool(NiKFMTool *this, const char *pcBaseKFMPath);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::Transition__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiKFMTool::Transition *> *this, unsigned int);
void __thiscall NiKFMTool::Transition::ClearBlendPairs(NiKFMTool::Transition *this);
void *__thiscall NiTPointerMap<unsigned_int_NiKFMTool::Transition__>::_scalar_deleting_destructor_(NiTPointerMap<unsigned int,NiKFMTool::Transition *> *this, unsigned int);
void *__thiscall NiActorManager::_scalar_deleting_destructor_(NiActorManager *this, unsigned int);
NiActorManager *__thiscall NiActorManager::Clone(NiActorManager *this);
bool __thiscall NiActorManager::ChangeNIFRoot(NiActorManager *this, NiAVObject *pkNIFRoot);
NiPointer<NiActorManager::CompletionInfo> *__thiscall NiActorManager::FindTimeForAnimationToCompleteTransition(NiActorManager *this, NiPointer<NiActorManager::CompletionInfo> *result, unsigned int uiTransSrcID, unsigned int uiTransDesID, NiKFMTool::Transition *pkTransition, float fBeginFrame, float fDesiredTransitionFrame);
void *__thiscall NiActorManager::CompletionInfo::_vector_deleting_destructor_(NiActorManager::CompletionInfo *this, unsigned int);
float __thiscall NiActorManager::GetNextAnimActivatedTime(NiActorManager *this, unsigned int eSequenceID);
float __thiscall NiActorManager::GetNextAnimDeactivatedTime(NiActorManager *this, unsigned int eSequenceID);
float __thiscall NiActorManager::GetNextTextKeyEventTime(NiActorManager *this, unsigned int eSequenceID, NiTextKeyMatch *pkMatchObject);
void __thiscall NiKFMTool::Sequence::_Sequence(NiKFMTool::Sequence *this);
float __thiscall NiActorManager::GetNextEndOfSequenceTime(NiActorManager *this, unsigned int eSequenceID);
NiTListItem<NiActorManager::TimelineData> *__thiscall NiTObjectList<NiActorManager::TimelineData>::NewItem(NiTObjectList<NiActorManager::TimelineData> *this);
void __thiscall NiActorManager::LoadSequences(NiActorManager *this, NiStream *kStream);
bool __thiscall NiActorManager::Initialize(NiActorManager *this, NiStream *kStream);
void __thiscall NiActorManager::AddTimelineDataObject(NiActorManager *this, NiActorManager::EventType eEventType, unsigned int eSequenceID, NiTextKeyMatch *pkMatchObject);
void __thiscall NiKFMTool::_NiKFMTool(NiKFMTool *this);
NiActorManager *__cdecl NiActorManager::Create(NiKFMTool *pkKFMTool, const char *pcKFMFilePath, bool bCumulativeAnimations, bool bLoadFilesFromDisk, NiStream *pkStream);
void __thiscall NiActorManager::BuildTimeline(NiActorManager *this);
void *__thiscall NiKFMTool::_scalar_deleting_destructor_(NiKFMTool *this, unsigned int);
NiActorManager *__cdecl NiActorManager::Create(const char *pcKFMFilename, bool bCumulativeAnimations, bool bLoadFilesFromDisk, NiStream *pkStream);
void __thiscall NiActorManager::Update(NiActorManager *this, float fTime);
bool __cdecl NiFloatKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
float __cdecl NiFloatKey::GenInterp(float fTime, NiFloatKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, unsigned int *uiLastIdx, char ucSize);
float __cdecl NiFloatKey::GenInterpDefault(float fTime, NiFloatKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, char ucSize);
int __cdecl NiFloatKey::RegisterLoader();
void __thiscall NiFloatKey::LoadBinary(NiFloatKey *this, NiStream *stream);
void __cdecl NiFloatKey::SaveBinary(NiStream *stream, NiAnimationKey *pkKey);
bool __cdecl NiBezFloatKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiBezFloatKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
int __cdecl NiMemcpy(void *pvDest, const void *pvSrc, unsigned int uiCount);
void __cdecl NiBezFloatKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
bool __cdecl NiBezFloatKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
NiAnimationKey *__cdecl NiBezFloatKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiBezFloatKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
int __cdecl NiBezFloatKey::RegisterLoader();
void __thiscall NiPosKey::LoadBinary(NiPosKey *this, NiStream *stream);
void __cdecl NiPosKey::SaveBinary(NiStream *stream, NiAnimationKey *pkKey);
NiPoint3 *__cdecl NiPosKey::GenInterp(NiPoint3 *result, float fTime, NiPosKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, unsigned int *uiLastIdx, char ucSize);
NiPoint3 *__cdecl NiPosKey::GenInterpDefault(NiPoint3 *result, float fTime, NiPosKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, char ucSize);
bool __cdecl NiPosKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiPosKey::CoordinateFrame(float fTime, NiPosKey *pKey0, NiPosKey *pKey1, NiAnimationKey::KeyType eType, NiPoint3 *tangent, NiPoint3 *normal, NiPoint3 *binormal, float *curvature);
int __cdecl NiPosKey::RegisterLoader();
void __cdecl NiBezPosKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
bool __cdecl NiBezPosKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
NiAnimationKey *__cdecl NiBezPosKey::CreateArray(unsigned int uiNumKeys);
void __cdecl NiBezPosKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiBezPosKey::InterpolateD1(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiBezPosKey::InterpolateD2(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiBezPosKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
float __cdecl NiBezPosKey::ComputeMaxCurvature(NiAnimationKey *pkKeys, unsigned int uiNumKeys);
NiAnimationKey *__cdecl NiBezPosKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiBezPosKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
bool __cdecl NiBezPosKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiBezPosKey::RegisterLoader();
void __cdecl NiRotKey::Interpolate(float __formal, NiAnimationKey *__formal, NiAnimationKey *__formal, void *pResult);
void __thiscall NiColorKey::LoadBinary(NiRotKey *this, NiStream *stream);
void __cdecl NiRotKey::SaveBinary(NiStream *stream, NiAnimationKey *pkKey);
bool __thiscall NiSphere::operator__(NiSphere *this, NiSphere *kSphere);
NiQuaternion *__cdecl NiRotKey::GenInterp(NiQuaternion *result, float fTime, NiRotKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, unsigned int *uiLastIdx, char ucSize);
NiQuaternion *__cdecl NiRotKey::GenInterpDefault(NiQuaternion *result, float fTime, NiRotKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, char ucSize);
void __cdecl NiRotKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
int __cdecl NiRotKey::RegisterLoader();
void __cdecl NiBezRotKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
void __cdecl NiBezRotKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiBezRotKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
bool __cdecl NiBezRotKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiBezRotKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
NiAnimationKey *__cdecl NiBezRotKey::CreateArray(unsigned int uiNumKeys);
bool __cdecl NiBezRotKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
NiAnimationKey *__cdecl NiBezRotKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
int __cdecl NiBezRotKey::RegisterLoader();
bool __cdecl NiBoolKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiBoolKey::InterpolateD2(float __formal, NiAnimationKey *__formal, NiAnimationKey *__formal, void *pResult);
float __cdecl NiBoolKey::ComputeMaxCurvature(NiAnimationKey *__formal, unsigned int __formal);
void __thiscall ITableBase<TextDataType3_TextData3>::BeforeTerminate(NiUnsharedGeometryGroup *this);
bool __cdecl NiBoolKey::GenInterp(float fTime, NiBoolKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, unsigned int *uiLastIdx, char ucSize);
bool __cdecl NiBoolKey::GenInterpDefault(float fTime, NiBoolKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, char ucSize);
int __cdecl NiBoolKey::RegisterLoader();
void __cdecl NiStreamLoadBinary<bool>(NiStream *kStream, bool *value);
void __cdecl NiStreamSaveBinary<bool>(NiStream *kStream, const bool *value);
void __thiscall NiBoolKey::LoadBinary(NiBoolKey *this, NiStream *stream);
void __cdecl NiBoolKey::SaveBinary(NiStream *stream, NiAnimationKey *pkKey);
void __cdecl NiColorKey::SaveBinary(NiStream *stream, NiAnimationKey *pkKey);
void __cdecl NiColorKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
NiColorA *__cdecl NiColorKey::GenInterp(NiColorA *result, float fTime, NiColorKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, unsigned int *uiLastIdx, char ucSize);
NiColorA *__cdecl NiColorKey::GenInterpDefault(NiColorA *result, float fTime, NiColorKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys, char ucSize);
bool __cdecl NiColorKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
int __cdecl NiColorKey::RegisterLoader();
void __thiscall NiEulerRotKey::CleanUp(NiEulerRotKey *this);
void __cdecl NiEulerRotKey::Interpolate(float fTime, NiAnimationKey *pkKey0, NiAnimationKey *pkKey1, void *pkResult);
bool __cdecl NiEulerRotKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiEulerRotKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
NiAnimationKey *__cdecl NiEulerRotKey::CreateArray(unsigned int uiNumKeys);
void __cdecl NiEulerRotKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
bool __cdecl NiEulerRotKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
void __thiscall NiEulerRotKey::LoadBinary(NiEulerRotKey *this, NiStream *stream);
NiAnimationKey *__cdecl NiEulerRotKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiEulerRotKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
int __cdecl NiEulerRotKey::RegisterLoader();
NiColorA *__cdecl operator_(NiColorA *result, float fScalar, NiColorA *c);
NiAnimationKey *__cdecl NiLinColorKey::CreateArray(unsigned int uiNumKeys);
void __cdecl NiLinColorKey::Interpolate(float fTime, NiAnimationKey *pkKey0, NiAnimationKey *pkKey1, void *pvResult);
bool __cdecl NiLinColorKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiLinColorKey::RegisterLoader();
NiDX9SourceTextureData *__thiscall NiStepBoolKey::NiStepBoolKey(NiDX9SourceTextureData *this);
void __cdecl NiLinFloatKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
NiAnimationKey *__cdecl NiLinFloatKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiLinRotKey::DeleteArray(NiAnimationKey *pkKeyArray);
bool __cdecl NiLinFloatKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiLinFloatKey::RegisterLoader();
void __cdecl NiPosKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
NiAnimationKey *__cdecl NiStepPosKey::CreateArray(unsigned int uiNumKeys);
void __cdecl NiLinPosKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiLinPosKey::InterpolateD1(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiLinPosKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
bool __cdecl NiLinPosKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiLinPosKey::RegisterLoader();
void __cdecl NiLinRotKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
NiAnimationKey *__cdecl NiLinRotKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiLinRotKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
bool __cdecl NiLinRotKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiLinRotKey::RegisterLoader();
void __cdecl NiTCBPosKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
bool __cdecl NiTCBPosKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
NiAnimationKey *__cdecl NiTCBPosKey::CreateArray(unsigned int uiNumKeys);
void __cdecl NiTCBPosKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiTCBPosKey::InterpolateD1(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiTCBPosKey::InterpolateD2(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __thiscall NiTCBPosKey::CalculateDVals(NiTCBPosKey *this, NiPoint3 *ptSub1, NiPoint3 *ptPlus1, float fPreLen, float fNextLen);
void __cdecl NiTCBPosKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
float __cdecl NiTCBPosKey::ComputeMaxCurvature(NiAnimationKey *pkKeys, unsigned int uiNumKeys);
bool __cdecl NiTCBPosKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
NiAnimationKey *__cdecl NiTCBPosKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiTCBPosKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
int __cdecl NiTCBPosKey::RegisterLoader();
void __cdecl NiTCBRotKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
void __cdecl NiTCBRotKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __thiscall NiTCBRotKey::CalculateDVals(NiTCBRotKey *this, NiTCBRotKey *pPrev, NiTCBRotKey *pNext);
void __cdecl NiTCBRotKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
bool __cdecl NiTCBRotKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
NiAnimationKey *__cdecl NiTCBRotKey::CreateArray(unsigned int uiNumKeys);
bool __cdecl NiTCBRotKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
NiAnimationKey *__cdecl NiTCBRotKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiTCBRotKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
int __cdecl NiTCBRotKey::RegisterLoader();
bool __cdecl NiTCBFloatKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiTCBFloatKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
void __cdecl NiTCBFloatKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
NiAnimationKey *__cdecl NiTCBFloatKey::CreateArray(unsigned int uiNumKeys);
void __cdecl NiTCBFloatKey::CalculateDVals(NiTCBFloatKey *result, float fValSub1, float fValPlus1, float fPreLen, float fNextLen);
void __cdecl NiTCBFloatKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
bool __cdecl NiTCBFloatKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
NiAnimationKey *__cdecl NiTCBFloatKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
void __cdecl NiTCBFloatKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
int __cdecl NiTCBFloatKey::RegisterLoader();
void __cdecl NiStepBoolKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
bool __cdecl NiStepBoolKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiStepBoolKey::Interpolate(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
void __cdecl NiStepBoolKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
NiAnimationKey *__cdecl NiStepFloatKey::CreateArray(unsigned int uiNumKeys);
bool __cdecl NiStepBoolKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
NiAnimationKey *__cdecl NiStepBoolKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
int __cdecl NiStepBoolKey::RegisterLoader();
void __cdecl NiStepColorKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
bool __cdecl NiStepRotKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiStepRotKey::Interpolate(float fTime, NiAnimationKey *pkKey0, NiAnimationKey *pkKey1, void *pvResult);
NiAnimationKey *__cdecl NiStepColorKey::CreateFromStream(NiStream *kStream, unsigned int uiNumKeys);
void __cdecl NiLinColorKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
bool __cdecl NiStepColorKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiStepColorKey::RegisterLoader();
bool __cdecl NiLinFloatKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiLinFloatKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
void __cdecl NiStepFloatKey::Interpolate(float fTime, NiAnimationKey *pkKey0, NiAnimationKey *pkKey1, void *pvResult);
void __cdecl NiStepFloatKey::SaveToStream(NiStream *stream, NiAnimationKey *pkKeys, unsigned int uiNumKeys);
bool __cdecl NiStepFloatKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiStepFloatKey::RegisterLoader();
void __cdecl NiLinPosKey::Copy(NiAnimationKey *pkNewKey, NiAnimationKey *pkOrigKey);
bool __cdecl NiStepPosKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __cdecl NiStepPosKey::Interpolate(float fTime, NiAnimationKey *pkKey0, NiAnimationKey *pkKey1, void *pvResult);
void __cdecl NiStepPosKey::InterpolateD1(float fTime, NiAnimationKey *pKey0, NiAnimationKey *pKey1, void *pResult);
NiAnimationKey *__cdecl NiStepPosKey::CreateFromStream(NiStream *stream, unsigned int uiNumKeys);
bool __cdecl NiStepPosKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiStepPosKey::RegisterLoader();
void __cdecl NiStepRotKey::FillDerivedVals(NiAnimationKey *pkKeys, unsigned int uiNumKeys, char ucSize);
NiAnimationKey *__cdecl NiLinRotKey::CreateArray(unsigned int uiNumKeys);
bool __cdecl NiStepRotKey::Insert(float fTime, NiAnimationKey **pkKeys, unsigned int *uiNumKeys);
int __cdecl NiStepRotKey::RegisterLoader();
void __cdecl NiAnimationSDM::Init(); // idb
int __cdecl NiTAbstractPoolAllocator<NiActorManager::TimelineData>::_SDMShutdown();
int __cdecl NiAnimationSDM::Shutdown();
void __thiscall NiAnimationSDM::NiAnimationSDM(NiAnimationSDM *this);
bool __thiscall NiTextKey::operator__(NiTextKey *this, NiTextKey *key);
NiRTTI *__thiscall NiTextKeyExtraData::GetRTTI(NiTextKeyExtraData *this);
NiObject *__cdecl NiTextKeyExtraData::CreateObject();
bool __thiscall NiTextKeyExtraData::IsEqual(NiTextKeyExtraData *this, NiObject *pObject);
void __thiscall NiTextKeyExtraData::CopyMembers(NiTextKeyExtraData *this, NiTextKeyExtraData *pDest, NiCloningProcess *kCloning);
void __thiscall NiTextKeyExtraData::SaveBinary(NiTextKeyExtraData *this, NiStream *stream);
NiObject *__thiscall NiTextKeyExtraData::CreateClone(NiTextKeyExtraData *this, NiCloningProcess *kCloning);
void __thiscall NiTextKeyExtraData::LoadBinary(NiTextKeyExtraData *this, NiStream *stream);
void __thiscall NiTextKeyExtraData::GetViewerStrings(NiTextKeyExtraData *this, NiTArray<char *> *pStrings);
void *__thiscall NiTextKeyExtraData::_scalar_deleting_destructor_(NiTextKeyExtraData *this, unsigned int);
bool __thiscall NiControllerSequence::VerifyDependencies(NiControllerSequence *this, NiControllerSequence *pkSequence);
void __thiscall NiStringPalette::NiStringPalette(NiStringPalette *this, unsigned int uiAllocatedSize);
NiRTTI *__thiscall NiStringPalette::GetRTTI(NiStringPalette *this);
bool __thiscall NiStringPalette::FindString(NiStringPalette *this, const char *pcString, unsigned int *uiOffset);
void __thiscall NiControllerSequence::SetName(NiControllerSequence *this, const char *pcName);
void __thiscall NiControllerSequence::SetAccumRootName(NiControllerSequence *this, const char *pcAccumRoot);
void __thiscall NiInterpController::_NiInterpController(NiInterpController *this);
NiRTTI *__thiscall NiMultiTargetTransformController::GetRTTI(NiMultiTargetTransformController *this);
void *__thiscall NiMultiTargetTransformController::_vector_deleting_destructor_(NiMultiTargetTransformController *this, unsigned int);
void *__thiscall NiTArray<char__>::_scalar_deleting_destructor_(NiTArray<char *> *this, unsigned int);
void __thiscall NiControllerSequence::NiControllerSequence(NiControllerSequence *this);
NiRTTI *__thiscall NiControllerSequence::GetRTTI(NiControllerSequence *this);
float __thiscall NiControllerSequence::GetKeyTimeAt(NiControllerSequence *this, NiTextKeyMatch *pkMatchObject);
NiControllerSequence::IDTag *__thiscall NiControllerSequence::IDTag::operator_(NiControllerSequence::IDTag *this, NiControllerSequence::IDTag *__that);
NiControllerSequence::InterpArrayItem *__thiscall NiControllerSequence::InterpArrayItem::operator_(NiControllerSequence::InterpArrayItem *this, NiControllerSequence::InterpArrayItem *__that);
void __thiscall NiControllerSequence::ClearTargets(NiControllerSequence *this);
void __thiscall NiControllerSequence::AttachInterpolators(NiControllerSequence *this, char cPriority);
void __thiscall NiControllerSequence::DetachInterpolators(NiControllerSequence *this);
float __thiscall NiControllerSequence::ComputeScaledTime(NiControllerSequence *this, float fTime, bool bStoreLastTime);
bool __thiscall NiControllerSequence::VerifyMatchingMorphKeys(NiControllerSequence *this, NiControllerSequence *pkTimeSyncSeq);
void __thiscall NiControllerSequence::ProcessClone(NiControllerSequence *this, NiCloningProcess *kCloning);
bool __thiscall NiControllerSequence::InterpArrayItem::IsEqual(NiControllerSequence::InterpArrayItem *this, NiControllerSequence::InterpArrayItem *kDest);
bool __thiscall NiControllerSequence::IDTag::IsEqual(NiControllerSequence::IDTag *this, NiControllerSequence::IDTag *kDest);
bool __thiscall NiControllerSequence::RegisterStreamables(NiControllerSequence *this, NiStream *kStream);
NiObject *__cdecl NiControllerSequence::CreateObject();
void __thiscall NiControllerSequence::LinkObject(NiControllerSequence *this, NiStream *kStream);
bool __thiscall NiControllerSequence::IsEqual(NiControllerSequence *this, NiObject *pkObject);
void __thiscall NiTArray<NiPointer<NiD3DXEffectTechnique>>::RemoveAll(NiTArray<NiPointer<NiD3DShaderConstantMapEntry> > *this);
void __cdecl NiStreamLoadBinary<unsigned_short>(NiStream *kStream, unsigned __int16 *value);
void __thiscall NiTimeController::SetNext(NiTimeController *this, NiTimeController *pkNext);
void *__thiscall NiStringPalette::_scalar_deleting_destructor_(NiStringPalette *this, unsigned int);
unsigned int __thiscall NiStringPalette::AddString(NiStringPalette *this, const char *pcString);
const char *__thiscall NiControllerSequence::IDTag::GetPropertyType(NiControllerSequence::IDTag *this);
const char *__thiscall NiControllerSequence::IDTag::GetCtlrType(NiControllerSequence::IDTag *this);
const char *__thiscall NiControllerSequence::IDTag::GetCtlrID(NiControllerSequence::IDTag *this);
void __thiscall NiControllerSequence::NiControllerSequence(NiControllerSequence *this, const char *pcName, unsigned int uiArraySize, unsigned int uiArrayGrowBy, NiStringPalette *pkStringPalette);
void *__thiscall NiControllerSequence::InterpArrayItem::_vector_deleting_destructor_(NiControllerSequence::InterpArrayItem *this, unsigned int);
void __thiscall NiControllerSequence::_NiControllerSequence(NiControllerSequence *this);
float __thiscall NiControllerSequence::GetTimeAt(NiControllerSequence *this, NiTextKeyMatch *pkMatchObject, float fCurrentTime);
float __thiscall NiControllerSequence::GetKeyTimeAt(NiControllerSequence *this, const char *pcTextKey);
void __thiscall NiControllerSequence::SortByBlendInterpolator(NiControllerSequence *this);
bool __thiscall NiControllerSequence::ResolveTransformInterpolators(NiControllerSequence *this, NiAVObject *pkRoot, NiAVObjectPalette *pkObjectPalette);
bool __thiscall NiControllerSequence::Activate(NiControllerSequence *this, char cPriority, bool bStartOver, float fWeight, float fEaseInTime, NiControllerSequence *pkTimeSyncSeq, bool bTransition);
bool __thiscall NiControllerSequence::Deactivate(NiControllerSequence *this, float fEaseOutTime, bool bTransition);
bool __thiscall NiControllerSequence::StartBlend(NiControllerSequence *this, NiControllerSequence *pkDestSequence, float fDuration, float fDestFrame, int iPriority, float fSourceWeight, float fDestWeight, NiControllerSequence *pkTimeSyncSeq);
bool __thiscall NiControllerSequence::StartMorph(NiControllerSequence *this, NiControllerSequence *pkDestSequence, float fDuration, int iPriority, float fSourceWeight, float fDestWeight);
float __thiscall NiControllerSequence::FindCorrespondingMorphFrame(NiControllerSequence *this, NiControllerSequence *pkSourceSequence, float fSourceSequenceTime);
void __thiscall NiControllerSequence::SetInterpsWeightAndTime(NiControllerSequence *this, float fWeight, float fEaseSpinner, float fTime);
bool __thiscall NiControllerSequence::ReallocateArrays(NiControllerSequence *this);
void __thiscall NiControllerSequence::CopyMembers(NiControllerSequence *this, NiControllerSequence *pkDest, NiCloningProcess *kCloning);
void __thiscall NiControllerSequence::InterpArrayItem::LoadBinary(NiControllerSequence::InterpArrayItem *this, NiStream *kStream);
void __thiscall NiControllerSequence::IDTag::SaveBinary(NiControllerSequence::IDTag *this, NiStream *kStream);
void __thiscall NiControllerSequence::IDTag::LoadBinary(NiControllerSequence::IDTag *this, NiStream *kStream);
void __thiscall NiControllerSequence::SaveBinary(NiControllerSequence *this, NiStream *kStream);
void __thiscall NiControllerSequence::LoadBinary(NiControllerSequence *this, NiStream *kStream);
void *__thiscall NiControllerSequence::_vector_deleting_destructor_(NiControllerSequence *this, unsigned int);
float __thiscall NiControllerSequence::GetTimeAt(NiControllerSequence *this, const char *pcTextKey, float fCurrentTime);
unsigned int __thiscall NiControllerSequence::AddInterpolator(NiControllerSequence *this, NiInterpolator *pkInterpolator, NiControllerSequence::IDTag *kIDTag);
void __thiscall NiControllerSequence::Update(NiControllerSequence *this, float fTime, bool bUpdateInterpolators);
bool __thiscall NiControllerSequence::StoreTargets(NiControllerSequence *this, NiAVObject *pkRoot);
bool __thiscall NiControllerSequence::StartBlend(NiControllerSequence *this, NiControllerSequence *pkDestSequence, float fDuration, const char *pcDestTextKey, int iPriority, float fSourceWeight, float fDestWeight, NiControllerSequence *pkTimeSyncSeq);
bool __thiscall NiControllerSequence::ConvertOldNameControllerPair(NiControllerSequence *this, const char *pcObjectName, NiInterpController *pkController);
NiObject *__thiscall NiControllerSequence::CreateClone(NiControllerSequence *this, NiCloningProcess *kCloning);
bool __thiscall NiControllerSequence::AddNameControllerPair(NiControllerSequence *this, const char *pcObjectName, NiTimeController *pkController);
void __thiscall NiControllerSequence::PostLinkObject(NiControllerSequence *this, NiStream *kStream);
NiPointer<NiControllerSequence> *__cdecl NiControllerSequence::ConvertOldSequence(NiPointer<NiControllerSequence> *result, NiSequence *pkOldSequence);
NiPointer<NiControllerSequence> *__cdecl NiControllerSequence::CreateSequenceFromFile(NiPointer<NiControllerSequence> *result, NiStream *kStream, unsigned int uiIndex);
NiPointer<NiControllerSequence> *__cdecl NiControllerSequence::CreateSequenceFromFile(NiPointer<NiControllerSequence> *result, const char *pcFilename, unsigned int uiIndex);
void __thiscall NiFloatInterpController::SaveBinary(NiTransformController *this, NiStream *kStream);
bool __thiscall NiTransformController::IsEqual(NiTransformController *this, NiObject *pkObject);
void __thiscall NiQuatTransform::NiQuatTransform(NiQuatTransform *this);
void __thiscall NiBlendAccumTransformInterpolator::AccumArrayItem::ClearValues(NiBlendAccumTransformInterpolator::AccumArrayItem *this);
NiInterpolator *__thiscall NiTransformController::CreatePoseInterpolator(NiTransformController *this, unsigned __int16 usIndex);
void __thiscall NiTransformController::LoadBinary(NiTransformController *this, NiStream *kStream);
void __thiscall NiTransformController::LinkObject(NiTransformController *this, NiStream *kStream);
bool __thiscall NiTimeController::DontDoUpdate(NiTimeController *this, float fTime);
void __thiscall NiBlendAccumTransformInterpolator::AccumArrayItem::AccumArrayItem(NiBlendAccumTransformInterpolator::AccumArrayItem *this);
void __thiscall NiBlendAccumTransformInterpolator::NiBlendAccumTransformInterpolator(NiBlendAccumTransformInterpolator *this, bool bManagerControlled, float fWeightThreshold, char ucArraySize);
NiRTTI *__thiscall NiBlendAccumTransformInterpolator::GetRTTI(NiBlendAccumTransformInterpolator *this);
void *__thiscall NiBlendAccumTransformInterpolator::_scalar_deleting_destructor_(NiBlendAccumTransformInterpolator *this, unsigned int);
void __thiscall NiTransformInterpolator::SetPoseValue(NiTransformInterpolator *this, NiQuatTransform kPoseValue);
void __thiscall NiTransformController::NiTransformController(NiTransformController *this);
NiRTTI *__thiscall NiTransformController::GetRTTI(NiTransformController *this);
void __thiscall NiTransformController::SynchronizePoseInterpolator(NiTransformController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
NiBlendInterpolator *__thiscall NiTransformController::CreateBlendInterpolator(NiTransformController *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
void __thiscall NiTransformController::Update(NiTransformController *this, float fTime);
NiObject *__thiscall NiTransformController::CreateClone(NiTransformController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiTransformController::CreateObject();
void __thiscall NiTransformController::GetViewerStrings(NiTransformController *this, NiTArray<char *> *pkStrings);
void __thiscall NiTextKey::_NiTextKey(NiTextKey *this);
void __thiscall NiTextKey::SetText(NiTextKey *this, char *pText);
void __thiscall NiTextKey::LoadBinary(NiTextKey *this, NiStream *stream);
void __thiscall NiTextKey::SaveBinary(NiTextKey *this, NiStream *stream);
void __thiscall NiTArray<NiScreenGeometryData::ScreenElement__>::SetSize(NiTArray<NiVBBlock *> *this, unsigned int uiMaxSize);
void *__thiscall NiTArray<NiTSet<NiNode__>__>::_vector_deleting_destructor_(NiTArray<NiTSet<NiNode *> *> *this, unsigned int);
void *__thiscall NiTArray<NiTSet<NiBoneLODController::SkinInfo__>__>::_vector_deleting_destructor_(NiTArray<NiTSet<NiBoneLODController::SkinInfo *> *> *this, unsigned int);
bool __thiscall NiBoneLODController::RegisterStreamables(NiBoneLODController *this, NiStream *kStream);
void __thiscall NiBoneLODController::LinkObject(NiBoneLODController *this, NiStream *kStream);
bool __thiscall NiBoneLODController::IsEqual(NiBoneLODController *this, NiObject *pkObject);
void __cdecl NiStreamLoadBinary<float>(NiStream *kStream, int *value);
void __thiscall NiBoneLODController::NiBoneLODController(NiBoneLODController *this);
NiRTTI *__thiscall NiBoneLODController::GetRTTI(NiBoneLODController *this);
bool __thiscall NiBoneLODController::TargetIsRequiredType(NiBoneLODController *this);
bool __thiscall NiBoneLODController::SetBoneLOD(NiBoneLODController *this, int iLOD);
NiObject *__thiscall NiBoneLODController::CreateClone(NiBoneLODController *this, NiCloningProcess *kCloning);
void __thiscall NiBoneLODController::ProcessClone(NiBoneLODController *this, NiCloningProcess *kCloning);
void __thiscall NiBoneLODController::SaveBinary(NiBoneLODController *this, NiStream *kStream);
NiObject *__cdecl NiBoneLODController::CreateObject();
void __thiscall NiBoneLODController::LoadBinary(NiBoneLODController *this, NiStream *kStream);
void __thiscall NiBoneLODController::PostLinkObject(NiBoneLODController *this, NiStream *kStream);
void __thiscall NiBoneLODController::Update(NiBoneLODController *this, float fTime);
void __thiscall NiBoneLODController::GetViewerStrings(NiBoneLODController *this, NiTArray<char *> *pkStrings);
void __thiscall NiBoneLODController::CleanUp(NiBoneLODController *this);
void *__thiscall NiBoneLODController::_scalar_deleting_destructor_(NiBoneLODController *this, unsigned int);
void __thiscall NiKFMTool::SetModelPath(NiKFMTool *this, const char *pcModelPath);
void __thiscall NiKFMTool::GetSequenceIDs(NiKFMTool *this, unsigned int **puiSequenceIDs, unsigned int *uiNumIDs);
const char *__thiscall NiKFMTool::ConstructAbsolutePath(NiKFMTool *this, const char *pcRelativePath, const char *pcBasePath);
void __thiscall NiTSet<NiKFMTool::Transition::BlendPair__>::Add(NiTSet<NiKFMTool::Transition::BlendPair *> *this, NiKFMTool::Transition::BlendPair *const *element);
void __cdecl NiStreamLoadBinary<bool>(NiBinaryStream *binstream, bool *value);
void __cdecl NiStreamSaveBinary<unsigned_int>(NiBinaryStream *binstream, unsigned int *value);
void __thiscall NiTSet<NiKFMTool::Transition::ChainInfo>::Realloc(NiTSet<NiKFMTool::Transition::ChainInfo> *this, unsigned int uiNewSize);
void __thiscall NiTSet<NiKFMTool::SequenceGroup::SequenceInfo>::Realloc(NiTSet<NiKFMTool::SequenceGroup::SequenceInfo> *this, unsigned int uiNewSize);
void __thiscall NiKFMTool::Transition::BlendPair::BlendPair(NiKFMTool::Transition::BlendPair *this, const char *pcStartKey, const char *pcTargetKey);
void __thiscall NiKFMTool::SequenceGroup::SequenceGroup(NiKFMTool::SequenceGroup *this, unsigned int uiGroupID, const char *pcName);
NiKFMTool::KFM_RC __thiscall NiKFMTool::AddBlendPair(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID, const char *pcStartKey, const char *pcTargetKey);
const char *__thiscall NiKFMTool::GetFullModelPath(NiKFMTool *this);
const char *__thiscall NiKFMTool::GetFullKFFilename(NiKFMTool *this, unsigned int uiSequenceID);
void __thiscall NiKFMTool::LoadCString(NiKFMTool *this, NiFile *kFile, char **pcString);
void __thiscall NiTSet<NiKFMTool::Transition::ChainInfo>::Add(NiTSet<NiKFMTool::Transition::ChainInfo> *this, NiKFMTool::Transition::ChainInfo *element);
void __thiscall NiTSet<NiKFMTool::SequenceGroup::SequenceInfo>::Add(NiTSet<NiKFMTool::SequenceGroup::SequenceInfo> *this, NiKFMTool::SequenceGroup::SequenceInfo *element);
NiKFMTool::KFM_RC __thiscall NiKFMTool::AddSequenceGroup(NiKFMTool *this, unsigned int uiGroupID, const char *pcName);
NiKFMTool::KFM_RC __thiscall NiKFMTool::AddSequenceToGroup(NiKFMTool *this, unsigned int uiGroupID, unsigned int uiSequenceID, int iPriority, float fWeight, float fEaseInTime, float fEaseOutTime, unsigned int uiSynchronizeToSequence);
void __thiscall NiKFMTool::GatherChainIDs(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID, NiKFMTool::Transition *pkTransition, NiTSet<unsigned int> *kChainIDs);
void __thiscall NiKFMTool::HandleDelayedBlendsInChains(NiKFMTool *this);
void __thiscall NiKFMTool::Sequence::Sequence(NiKFMTool::Sequence *this, unsigned int uiSequenceID, const char *pcFilename, int iAnimIndex);
bool __thiscall NiKFMTool::IsValidChainTransition(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID, NiKFMTool::Transition *pkTransition);
NiKFMTool::KFM_RC __thiscall NiKFMTool::ReadBinary(NiKFMTool *this, NiFile *kFile, unsigned int uiVersion);
NiKFMTool::KFM_RC __thiscall NiKFMTool::AddTransition(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID, NiKFMTool::TransitionType eType, float fDuration);
NiKFMTool::KFM_RC __thiscall NiKFMTool::AddSequenceToChain(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID, unsigned int uiSequenceID, float fDuration);
NiKFMTool::KFM_RC __thiscall NiKFMTool::AddSequence(NiKFMTool *this, unsigned int uiSequenceID, const char *pcFilename, int iAnimIndex);
NiKFMTool::KFM_RC __thiscall NiKFMTool::ReadOldVersionAscii(NiKFMTool *this, NiFile *kFile, unsigned int uiVersion, bool bOldFile);
NiKFMTool::KFM_RC __thiscall NiKFMTool::LoadFile(NiKFMTool *this, const char *pcFilename);
void __thiscall NiTextureTransformController::SetTarget(NiTextureTransformController *this, NiObjectNET *pkTarget);
bool __thiscall NiTextureTransformController::IsEqual(NiTextureTransformController *this, NiObject *pkObject);
bool __thiscall NiPoint2::operator__(NiPoint2 *this, NiPoint2 *pt);
void __thiscall NiTextureTransform::SetTranslate(NiTextureTransform *this, NiPoint2 *kTranslate);
void __thiscall NiTextureTransform::SetRotate(NiTextureTransform *this, float fRotate);
void __thiscall NiTextureTransform::SetScale(NiTextureTransform *this, NiPoint2 *kScale);
const char *__thiscall NiTextureTransformController::GetCtlrID(NiTextureTransformController *this);
void __thiscall NiTextureTransformController::LinkObject(NiTextureTransformController *this, NiStream *kStream);
NiTexturingProperty::ShaderMap *__thiscall NiTexturingProperty::GetShaderMap(NiTexturingProperty *this, unsigned int uiIndex);
unsigned int __thiscall NiTexturingProperty::GetShaderArrayCount(NiTexturingProperty *this);
bool __thiscall NiTextureTransformController::SetInternalMap(NiTextureTransformController *this);
NiRTTI *__thiscall NiTextureTransformController::GetRTTI(NiTextureTransformController *this);
bool __thiscall NiTextureTransformController::InterpTargetIsCorrectType(NiTextureTransformController *this, NiObjectNET *pkTarget);
bool __thiscall NiTextureTransformController::SetMap(NiTextureTransformController *this, NiTexturingProperty::Map *pkMap, NiTexturingProperty *pkTarget);
void __thiscall NiTextureTransformController::Update(NiTextureTransformController *this, float fTime);
void __thiscall NiTextureTransformController::GetTargetFloatValue(NiTextureTransformController *this, float *fValue);
void *__thiscall NiTextureTransformController::_vector_deleting_destructor_(NiTextureTransformController *this, unsigned int);
NiObject *__thiscall NiTextureTransformController::CreateClone(NiTextureTransformController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiTextureTransformController::CreateObject();
void __thiscall NiTextureTransformController::LoadBinary(NiTextureTransformController *this, NiStream *kStream);
void __thiscall NiTextureTransformController::SaveBinary(NiTextureTransformController *this, NiStream *kStream);
void __thiscall NiTextureTransformController::GetViewerStrings(NiTextureTransformController *this, NiTArray<char *> *pkStrings);
void __thiscall NiMaterialColorController::GetTargetPoint3Value(NiMaterialColorController *this, NiPoint3 *kValue);
const char *__thiscall NiMaterialColorController::GetCtlrID(NiMaterialColorController *this);
void __thiscall NiMaterialColorController::LinkObject(NiMaterialColorController *this, NiStream *kStream);
bool __thiscall NiMaterialColorController::IsEqual(NiMaterialColorController *this, NiObject *pkObject);
NiRTTI *__thiscall NiMaterialColorController::GetRTTI(NiMaterialColorController *this);
void __thiscall NiMaterialColorController::Update(NiMaterialColorController *this, float fTime);
void __cdecl NiStreamSaveBinary<unsigned_short>(NiStream *kStream, const unsigned __int16 *value);
void *__thiscall NiMaterialColorController::_scalar_deleting_destructor_(NiMaterialColorController *this, unsigned int);
NiObject *__thiscall NiMaterialColorController::CreateClone(NiMaterialColorController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiMaterialColorController::CreateObject();
void __thiscall NiMaterialColorController::LoadBinary(NiMaterialColorController *this, NiStream *kStream);
void __thiscall NiLightColorController::SaveBinary(NiMaterialColorController *this, NiStream *kStream);
void __thiscall NiMaterialColorController::GetViewerStrings(NiMaterialColorController *this, NiTArray<char *> *pkStrings);
void __thiscall NiAlphaController::SaveBinary(NiAlphaRefController *this, NiStream *stream);
void __thiscall NiAlphaController::GetTargetFloatValue(NiAlphaController *this, float *fValue);
void __thiscall NiVisController::LoadBinary(NiVisController *this, NiStream *kStream);
bool __thiscall NiAlphaController::InterpTargetIsCorrectType(NiMaterialColorController *this, NiObjectNET *pkTarget);
void __thiscall NiAlphaController::Update(NiAlphaController *this, float fTime);
void __thiscall NiAlphaController::NiAlphaController(NiAlphaController *this);
NiRTTI *__thiscall NiAlphaController::GetRTTI(NiAlphaController *this);
NiObject *__thiscall NiAlphaController::CreateClone(NiAlphaController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiAlphaController::CreateObject();
void __thiscall NiAlphaController::GetViewerStrings(NiAlphaController *this, NiTArray<char *> *pkStrings);
bool __thiscall NiControllerManager::Morph(NiControllerManager *this, NiControllerSequence *pkSourceSequence, NiControllerSequence *pkDestSequence, float fDuration, int iPriority, float fSourceWeight, float fDestWeight);
NiRTTI *__thiscall NiAVObjectPalette::GetRTTI(NiAVObjectPalette *this);
void *__thiscall NiAVObjectPalette::_scalar_deleting_destructor_(NiAVObjectPalette *this, unsigned int);
void __thiscall NiControllerManager::Update(NiControllerManager *this, float fTime);
bool __thiscall NiControllerManager::CrossFade(NiControllerManager *this, NiControllerSequence *pkSourceSequence, NiControllerSequence *pkDestSequence, float fDuration, int iPriority, bool bStartOver, float fWeight, NiControllerSequence *pkTimeSyncSeq);
bool __thiscall NiControllerManager::RegisterStreamables(NiControllerManager *this, NiStream *kStream);
void __thiscall NiControllerManager::PostLinkObject(NiControllerManager *this, NiStream *kStream);
bool __thiscall NiControllerManager::IsEqual(NiControllerManager *this, NiObject *pkObject);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiAVObject__>_NiAVObject__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiAVObject__>_NiAVObject__>(NiTStringTemplateMap<NiTPointerMap<char const *,NiAVObject *>,NiAVObject *> *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___unsigned_int>_unsigned_int>::_NiTStringTemplateMap<NiTPointerMap<char_const___unsigned_int>_unsigned_int>(NiTStringTemplateMap<NiTPointerMap<char const *,unsigned int>,unsigned int> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiAVObject__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiAVObject *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiAVObject__>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiAVObject *> *this, unsigned int);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiAVObject__>_NiAVObject__>::_scalar_deleting_destructor_(NiTStringPointerMap<NiAVObject *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___unsigned_int>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,unsigned int> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___unsigned_int>::_scalar_deleting_destructor_(NiTPointerMap<char const *,unsigned int> *this, unsigned int);
void *__thiscall NiTStringPointerMap<unsigned_int>::_vector_deleting_destructor_(NiTStringPointerMap<unsigned int> *this, unsigned int);
bool __thiscall NiMultiTargetTransformController::TargetIsRequiredType(NiRollController *this);
void __thiscall NiControllerManager::SaveBinary(NiControllerManager *this, NiStream *kStream);
void __thiscall NiControllerManager::LoadBinary(NiControllerManager *this, NiStream *kStream);
NiPointer<NiAVObject> *__thiscall NiTArray<NiPointer<NiControllerSequence>>::RemoveAt(NiTArray<NiPointer<NiAVObject> > *this, NiPointer<NiAVObject> *result, unsigned int uiIndex);
void __thiscall NiTArray<NiPointer<NiControllerSequence>>::_NiTArray<NiPointer<NiControllerSequence>>(NiTArray<NiPointer<NiControllerSequence> > *this);
void *__thiscall NiTArray<NiPointer<NiControllerSequence>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiControllerSequence> > *this, unsigned int);
void __thiscall NiControllerManager::_NiControllerManager(NiControllerManager *this);
NiRTTI *__thiscall NiControllerManager::GetRTTI(NiControllerManager *this);
NiPointer<NiControllerSequence> *__thiscall NiControllerManager::RemoveSequence(NiControllerManager *this, NiPointer<NiControllerSequence> *result, NiControllerSequence *pkSequence);
void *__thiscall NiControllerManager::_vector_deleting_destructor_(NiControllerManager *this, unsigned int);
bool __thiscall NiControllerManager::AddSequence(NiControllerManager *this, NiControllerSequence *pkSequence, const char *pcName, bool bStoreTargets);
void __thiscall NiControllerManager::CopyMembers(NiControllerManager *this, NiControllerManager *pkDest, NiCloningProcess *kCloning);
void __thiscall NiControllerManager::ProcessClone(NiControllerManager *this, NiCloningProcess *kCloning);
void __thiscall NiControllerManager::LinkObject(NiControllerManager *this, NiStream *kStream);
void __thiscall NiDefaultAVObjectPalette::NiDefaultAVObjectPalette(NiDefaultAVObjectPalette *this, NiAVObject *pkScene);
NiRTTI *__thiscall NiDefaultAVObjectPalette::GetRTTI(NiDefaultAVObjectPalette *this);
NiAVObject *__thiscall NiDefaultAVObjectPalette::GetAVObject(NiDefaultAVObjectPalette *this, const char *pcName);
void __thiscall NiDefaultAVObjectPalette::SetAVObject(NiDefaultAVObjectPalette *this, const char *pcName, NiAVObject *pkObj);
void *__thiscall NiDefaultAVObjectPalette::_vector_deleting_destructor_(NiDefaultAVObjectPalette *this, unsigned int);
void __thiscall NiControllerManager::NiControllerManager(NiControllerManager *this);
void __thiscall NiControllerManager::NiControllerManager(NiControllerManager *this, NiAVObject *pkTarget, bool bCumulativeAnimations);
NiObject *__thiscall NiControllerManager::CreateClone(NiControllerManager *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiControllerManager::CreateObject();
bool __cdecl NiAnimationKey::Equal(NiAnimationKey *key0, NiAnimationKey *key1);
void __thiscall NiEulerRotKey::Initialize(NiEulerRotKey *this, NiFloatKey *pkX, unsigned int uiNumX, NiAnimationKey::KeyType eTypeX, NiFloatKey *pkY, unsigned int uiNumY, NiAnimationKey::KeyType eTypeY, NiFloatKey *pkZ, unsigned int uiNumZ, NiAnimationKey::KeyType eTypeZ);
bool __cdecl NiAnimationKey::OkayToInsert(float fTime, NiAnimationKey *pkKeys, unsigned int uiNumKeys, unsigned int *uiInsertAt, char ucSize);
void __cdecl NiAnimationKey::CopySequence(NiAnimationKey::KeyContent eContent, NiAnimationKey::KeyType eType, NiAnimationKey *pkOrigKeys, unsigned int uiOrigNumKeys, float fStartTime, float fEndTime, NiAnimationKey **pkNewKeys, unsigned int *uiNewNumKeys);
void __cdecl NiAnimationKey::GuaranteeKeyAtStartAndEnd(NiAnimationKey::KeyContent eContent, NiAnimationKey::KeyType eType, NiAnimationKey **pkKeys, unsigned int *uiNumKeys, float fStartTime, float fEndTime);
void __thiscall NiAnimationKey::LoadBinary(NiAnimationKey *this, NiStream *stream);
void __cdecl NiAnimationKey::SaveBinary(NiStream *kStream, const int *value);
float __cdecl NiInterpScalar::Linear(float fTime, float fP, float fQ);
float __cdecl NiInterpScalar::TCB(float fTime, float fP, float fPDD, float fQ, float fQDS);
void __cdecl NiInterpScalar::AdjustBezier(float fLastValue, float fLastTime, float *fLastOut, float fNextValue, float fNextTime, float *fNextIn, float fNewTime, float fNewValue, float *fNewIn, float *fNewOut);
NiRTTI *__thiscall NiFloatData::GetRTTI(NiFloatData *this);
void *__thiscall NiFloatData::_vector_deleting_destructor_(NiFloatData *this, unsigned int);
NiRTTI *__thiscall NiPosData::GetRTTI(NiPosData *this);
void *__thiscall NiPosData::_scalar_deleting_destructor_(NiPosData *this, unsigned int);
void __thiscall NiFloatInterpolator::SetKeys(NiFloatInterpolator *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiLookAtInterpolator::SetTranslateInterpolator(NiLookAtInterpolator *this, NiInterpolator *pkInterp);
void __thiscall NiLookAtInterpolator::SetRollInterpolator(NiLookAtInterpolator *this, NiInterpolator *pkInterp);
void __thiscall NiLookAtInterpolator::SetScaleInterpolator(NiLookAtInterpolator *this, NiInterpolator *pkInterp);
void __thiscall NiPoint3Interpolator::SetKeys(NiPoint3Interpolator *this, NiPosKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiPosKey *__thiscall NiTransformInterpolator::GetPosData(NiTransformInterpolator *this, unsigned int *uiNumKeys, NiAnimationKey::KeyType *eType, char *ucSize);
NiFloatKey *__thiscall NiTransformInterpolator::GetScaleData(NiTransformInterpolator *this, unsigned int *uiNumKeys, NiAnimationKey::KeyType *eType, char *ucSize);
void __cdecl NiOldAnimationConverter::SynchronizeTimeControllers(NiTimeController *pkSrc, NiTimeController *pkDest);
void __cdecl NiOldAnimationConverter::ConvertLookAtController(NiLookAtController *pkController);
void __cdecl NiOldAnimationConverter::ConvertRollController(NiRollController *pkController);
void __cdecl NiOldAnimationConverter::ConvertPathController(NiPathController *pkController);
void __cdecl NiOldAnimationConverter::RecurseScene(NiStream *kStream, NiObjectNET *pkObject);
void __cdecl NiOldAnimationConverter::Convert(NiStream *kStream, NiObject *pkObject);
bool __thiscall NiAlphaRefController::RegisterStreamables(NiAlphaRefController *this, NiStream *stream);
bool __thiscall NiAlphaController::IsEqual(NiAlphaRefController *this, NiObject *pObject);
void __thiscall NiVisController::GetTargetBoolValue(NiVisController *this, bool *bValue);
void __thiscall NiVisController::LinkObject(NiVisController *this, NiStream *kStream);
bool __thiscall NiVisController::InterpTargetIsCorrectType(NiVisController *this, NiObjectNET *pkTarget);
void __thiscall NiVisController::Update(NiVisController *this, float fTime);
void __thiscall NiVisController::NiVisController(NiVisController *this);
NiRTTI *__thiscall NiVisController::GetRTTI(NiVisController *this);
NiObject *__thiscall NiVisController::CreateClone(NiVisController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiVisController::CreateObject();
void __thiscall NiVisController::GetViewerStrings(NiVisController *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiUVData::CreateObject();
NiRTTI *__thiscall NiUVData::GetRTTI(NiUVData *this);
void __thiscall NiUVData::_NiUVData(NiUVData *this);
bool __thiscall NiUVData::IsEqual(NiUVData *this, NiObject *pkObject);
void *__thiscall NiUVData::_scalar_deleting_destructor_(NiUVData *this, unsigned int);
void __thiscall NiUVData::ReplaceUOffsetAnim(NiUVData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiUVData::ReplaceVOffsetAnim(NiUVData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiUVData::ReplaceUTilingAnim(NiUVData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiUVData::ReplaceVTilingAnim(NiUVData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiUVData::LoadBinary(NiUVData *this, NiStream *kStream);
void __thiscall NiUVData::SaveBinary(NiUVData *this, NiStream *kStream);
void __thiscall NiUVData::GetViewerStrings(NiUVData *this, NiTArray<char *> *pStrings);
void __thiscall NiUVController::LinkObject(NiUVController *this, NiStream *kStream);
bool __thiscall NiUVController::RegisterStreamables(NiUVController *this, NiStream *kStream);
bool __thiscall NiUVController::IsEqual(NiUVController *this, NiObject *pkObject);
NiRTTI *__thiscall NiUVController::GetRTTI(NiUVController *this);
void __thiscall NiUVController::SetTarget(NiUVController *this, NiObjectNET *pkTarget);
void __thiscall NiUVController::_NiUVController(NiUVController *this);
void __thiscall NiUVController::ResetKeyTimeExtrema(NiUVController *this);
void __thiscall NiUVController::Update(NiUVController *this, float fTime);
void __thiscall NiUVController::OnPreDisplay(NiUVController *this);
NiObject *__cdecl NiUVController::CreateObject();
void __thiscall NiUVController::SetUVData(NiUVController *this, NiUVData *pData);
void *__thiscall NiUVController::_vector_deleting_destructor_(NiUVController *this, unsigned int);
void __thiscall NiUVController::LoadBinary(NiUVController *this, NiStream *kStream);
void __thiscall NiUVController::SaveBinary(NiUVController *this, NiStream *kStream);
void __thiscall NiUVController::GetViewerStrings(NiUVController *this, NiTArray<char *> *pStrings);
NiObject *__thiscall NiUVController::CreateClone(NiUVController *this, NiCloningProcess *kCloning);
NiAnimationKey::KeyContent __thiscall NiTransformInterpolator::GetKeyContent(NiTransformInterpolator *this, unsigned __int16 usChannel);
bool __thiscall NiQuaternion::operator__(NiQuaternion *this, NiQuaternion *q);
bool __thiscall NiQuatTransform::IsTransformInvalid(NiQuatTransform *this);
bool __thiscall NiQuatTransform::operator__(NiQuatTransform *this, NiQuatTransform *kTransform);
unsigned int __thiscall NiTransformInterpolator::GetKeyCount(NiTransformInterpolator *this, unsigned __int16 usChannel);
NiAnimationKey::KeyType __thiscall NiTransformInterpolator::GetKeyType(NiTransformInterpolator *this, unsigned __int16 usChannel);
NiAnimationKey *__thiscall NiTransformInterpolator::GetKeyArray(NiTransformInterpolator *this, unsigned __int16 usChannel);
char __thiscall NiTransformInterpolator::GetKeyStride(NiTransformInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiTransformInterpolator::GuaranteeTimeRange(NiTransformInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiTransformInterpolator::GetChannelPosed(NiTransformInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiTransformInterpolator::LoadBinary(NiTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiTransformInterpolator::RegisterStreamables(NiTransformInterpolator *this, NiStream *kStream);
void __thiscall NiTransformInterpolator::SaveBinary(NiTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiTransformInterpolator::IsEqual(NiTransformInterpolator *this, NiObject *pkObject);
void __thiscall NiTransformInterpolator::NiTransformInterpolator(NiTransformInterpolator *this, NiTransformData *pkData);
NiRTTI *__thiscall NiTransformInterpolator::GetRTTI(NiTransformInterpolator *this);
void __thiscall NiTransformInterpolator::NiTransformInterpolator(NiTransformInterpolator *this, NiQuatTransform kPoseValue);
void __thiscall NiTransformInterpolator::GetActiveTimeRange(NiTransformInterpolator *this, float *fBeginKeyTime, float *fEndKeyTime);
NiInterpolator *__thiscall NiTransformInterpolator::GetSequenceInterpolator(NiTransformInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiTransformInterpolator::Update(NiTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
void __thiscall NiTransformInterpolator::Collapse(NiTransformInterpolator *this);
void __thiscall NiTransformInterpolator::CopyMembers(NiTransformInterpolator *this, NiTransformInterpolator *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiTransformInterpolator::CreateObject();
void *__thiscall NiTransformInterpolator::_scalar_deleting_destructor_(NiTransformInterpolator *this, unsigned int);
NiObject *__thiscall NiTransformInterpolator::CreateClone(NiTransformInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiTransformInterpolator::GetViewerStrings(NiTransformInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiMorphData::RegisterStreamables(NiPSysModifier *this, NiStream *kStream);
bool __thiscall NiStringPalette::IsEqual(NiStringPalette *this, NiObject *pkObject);
NiObject *__cdecl NiStringPalette::CreateObject();
void __thiscall NiStringPalette::SaveBinary(NiStringPalette *this, NiStream *kStream);
void __thiscall NiStringPalette::LoadBinary(NiStringPalette *this, NiStream *kStream);
void __thiscall NiTexture::LoadBinary(NiTexture *this, NiStream *kStream);
bool __thiscall NiTexture::RegisterStreamables(NiTexture *this, NiStream *kStream);
void __thiscall NiTexture::SaveBinary(NiTexture *this, NiStream *kStream);
bool __thiscall NiTexture::IsEqual(NiTexture *this, NiObject *pkObject);
NiRTTI *__thiscall NiSequenceStreamHelper::GetRTTI(NiSequenceStreamHelper *this);
NiObject *__cdecl NiSequenceStreamHelper::CreateObject();
void *__thiscall NiFogProperty::_scalar_deleting_destructor_(NiWireframeProperty *this, unsigned int);
bool __thiscall NiSequence::IsEqual(NiAccumulator *this, NiObject *pkObject);
void __thiscall NiSequence::SetName(NiSequence *this, const char *pcName);
void __thiscall NiTArray<NiPointer<NiTransformController>>::_NiTArray<NiPointer<NiTransformController>>(NiTArray<NiPointer<NiTransformController> > *this);
void *__thiscall NiTArray<NiPointer<NiTransformController>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiTransformController> > *this, unsigned int);
void __thiscall NiSequence::NiSequence(NiSequence *this, const char *pcName, unsigned int uiInitSize, unsigned int uiGrowBy);
NiRTTI *__thiscall NiSequence::GetRTTI(NiSequence *this);
void __thiscall NiSequence::_NiSequence(NiSequence *this);
unsigned int __thiscall NiSequence::AddNameControllerPair(NiSequence *this, const char *pcName, NiTransformController *pkController);
NiObject *__cdecl NiSequence::CreateObject();
void __thiscall NiSequence::LoadBinary(NiSequence *this, NiStream *kStream);
void __thiscall NiSequence::LinkObject(NiSequence *this, NiStream *kStream);
void *__thiscall NiSequence::_scalar_deleting_destructor_(NiSequence *this, unsigned int);
NiSequence *__cdecl NiSequence::ConvertSequence(NiStream *kStream, unsigned int uiIndex, const char *pcSequenceName);
NiPointer<NiSequence> *__cdecl NiSequence::CreateFromKFFile(NiPointer<NiSequence> *result, NiStream *kStream, unsigned int uiIndex, const char *pcSequenceName);
NiPointer<NiSequence> *__cdecl NiSequence::CreateFromKFFile(NiPointer<NiSequence> *result, const char *pcSequenceFile, unsigned int uiIndex, const char *pcSequenceName);
void __thiscall NiRotData::GuaranteeKeysAtStartAndEnd(NiRotData *this, float fStartTime, float fEndTime);
NiObject *__cdecl NiRotData::CreateObject();
NiRTTI *__thiscall NiRotData::GetRTTI(NiRotData *this);
bool __thiscall NiRotData::IsEqual(NiRotData *this, NiObject *pkObject);
void *__thiscall NiRotData::_scalar_deleting_destructor_(NiRotData *this, unsigned int);
void __thiscall NiRotData::ReplaceAnim(NiRotData *this, NiRotKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiPointer<NiRotData> *__thiscall NiRotData::GetSequenceData(NiRotData *this, NiPointer<NiRotData> *result, float fStartTime, float fEndTime);
void __thiscall NiRotData::LoadBinary(NiRotData *this, NiStream *kStream);
void __thiscall NiRotData::SaveBinary(NiRotData *this, NiStream *kStream);
void __thiscall NiRotData::GetViewerStrings(NiRotData *this, NiTArray<char *> *pkStrings);
void __thiscall NiRollController::LoadBinary(NiRollController *this, NiStream *stream);
void __thiscall NiRollController::LinkObject(NiRollController *this, NiStream *stream);
bool __thiscall NiRollController::RegisterStreamables(NiRollController *this, NiStream *stream);
void __thiscall NiRollController::SaveBinary(NiRollController *this, NiStream *stream);
bool __thiscall NiRollController::IsEqual(NiRollController *this, NiObject *pObject);
NiRTTI *__thiscall NiFloatController::GetRTTI(NiFloatController *this);
NiRTTI *__thiscall NiRollController::GetRTTI(NiRollController *this);
void *__thiscall NiFloatController::_vector_deleting_destructor_(NiRollController *this, unsigned int);
void __thiscall NiRollController::Update(NiRollController *this, float fTime);
NiObject *__thiscall NiRollController::CreateClone(NiRollController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiRollController::CreateObject();
void __thiscall NiRollController::GetViewerStrings(NiRollController *this, NiTArray<char *> *pStrings);
NiAnimationKey::KeyContent __thiscall NiQuaternionInterpolator::GetKeyContent(NiQuaternionInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiColorInterpolator::GetKeyCount(NiQuaternionInterpolator *this, unsigned __int16 usChannel);
char __thiscall NiColorInterpolator::GetKeyStride(NiQuaternionInterpolator *this, unsigned __int16 usChannel);
bool __thiscall NiQuaternionInterpolator::GetChannelPosed(NiQuaternionInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiQuaternionInterpolator::Collapse(NiQuaternionInterpolator *this);
void __thiscall NiQuaternionInterpolator::GuaranteeTimeRange(NiQuaternionInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiQuaternionInterpolator::RegisterStreamables(NiQuaternionInterpolator *this, NiStream *kStream);
void __thiscall NiQuaternionInterpolator::SaveBinary(NiQuaternionInterpolator *this, NiStream *kStream);
bool __thiscall NiQuaternionInterpolator::IsEqual(NiQuaternionInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiQuaternionInterpolator::GetRTTI(NiQuaternionInterpolator *this);
void __thiscall NiQuaternionInterpolator::GetActiveTimeRange(NiQuaternionInterpolator *this, float *fBeginKeyTime, float *fEndKeyTime);
NiInterpolator *__thiscall NiQuaternionInterpolator::GetSequenceInterpolator(NiQuaternionInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiQuaternionInterpolator::Update(NiQuaternionInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuaternion *kValue);
void __thiscall NiColorInterpolator::CopyMembers(NiQuaternionInterpolator *this, NiQuaternionInterpolator *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiQuaternionInterpolator::CreateObject();
NiObject *__thiscall NiQuaternionInterpolator::CreateClone(NiQuaternionInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiQuaternionInterpolator::GetViewerStrings(NiQuaternionInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiPosData::_NiPosData(NiPosData *this);
void __thiscall NiPosData::SetAnim(NiPosData *this, NiPosKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiObject *__cdecl NiPosData::CreateObject();
bool __thiscall NiPosData::IsEqual(NiPosData *this, NiObject *pkObject);
void __thiscall NiPosData::ReplaceAnim(NiPosData *this, NiPosKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiPointer<NiPosData> *__thiscall NiPosData::GetSequenceData(NiPosData *this, NiPointer<NiPosData> *result, float fStartTime, float fEndTime);
void __thiscall NiPosData::LoadBinary(NiPosData *this, NiStream *stream);
void __thiscall NiPosData::SaveBinary(NiPosData *this, NiStream *stream);
void __thiscall NiPosData::GetViewerStrings(NiPosData *this, NiTArray<char *> *pStrings);
bool __thiscall ITableBase<UseClassTypeInfo_UseCalssTypeTable>::DataProcess(NiDynamicGeometryGroup *this);
unsigned int __thiscall NiPoint3Interpolator::GetKeyCount(NiPoint3Interpolator *this, unsigned __int16 usChannel);
NiAnimationKey::KeyType __thiscall NiPoint3Interpolator::GetKeyType(NiPoint3Interpolator *this, unsigned __int16 usChannel);
NiAnimationKey *__thiscall NiPoint3Interpolator::GetKeyArray(NiPoint3Interpolator *this, unsigned __int16 usChannel);
char __thiscall NiPoint3Interpolator::GetKeyStride(NiPoint3Interpolator *this, unsigned __int16 usChannel);
bool __thiscall NiPoint3Interpolator::GetChannelPosed(NiPoint3Interpolator *this, unsigned __int16 usChannel);
void __thiscall NiPoint3Interpolator::SetPoseValue(NiPoint3Interpolator *this, NiPoint3 kPoseValue);
void __thiscall NiPoint3Interpolator::GuaranteeTimeRange(NiPoint3Interpolator *this, float fStartTime, float fEndTime);
void __thiscall NiPoint3Interpolator::LoadBinary(NiPoint3Interpolator *this, NiStream *kStream);
bool __thiscall NiPoint3Interpolator::RegisterStreamables(NiPoint3Interpolator *this, NiStream *kStream);
void __thiscall NiPoint3Interpolator::SaveBinary(NiPoint3Interpolator *this, NiStream *kStream);
void __thiscall NiPoint3Interpolator::NiPoint3Interpolator(NiPoint3Interpolator *this, NiPosData *pkPoint3Data);
NiRTTI *__thiscall NiPoint3Interpolator::GetRTTI(NiPoint3Interpolator *this);
void __thiscall NiPoint3Interpolator::NiPoint3Interpolator(NiPoint3Interpolator *this, NiPoint3 kPoseValue);
void __thiscall NiPoint3Interpolator::Collapse(NiPoint3Interpolator *this);
NiInterpolator *__thiscall NiPoint3Interpolator::GetSequenceInterpolator(NiPoint3Interpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiPoint3Interpolator::Update(NiPoint3Interpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiPoint3 *kValue);
void __thiscall NiPoint3Interpolator::CopyMembers(NiPoint3Interpolator *this, NiPoint3Interpolator *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiPoint3Interpolator::CreateObject();
bool __thiscall NiPoint3Interpolator::IsEqual(NiPoint3Interpolator *this, NiObject *pkObject);
void *__thiscall NiPoint3Interpolator::_vector_deleting_destructor_(NiPoint3Interpolator *this, unsigned int);
NiObject *__thiscall NiPoint3Interpolator::CreateClone(NiPoint3Interpolator *this, NiCloningProcess *kCloning);
void __thiscall NiPoint3Interpolator::GetViewerStrings(NiPoint3Interpolator *this, NiTArray<char *> *pkStrings);
NiAnimationKey::KeyContent __thiscall NiPathInterpolator::GetKeyContent(NiPathInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiPathInterpolator::GetKeyCount(NiPathInterpolator *this, unsigned __int16 usChannel);
NiAnimationKey::KeyType __thiscall NiPathInterpolator::GetKeyType(NiPathInterpolator *this, unsigned __int16 usChannel);
NiAnimationKey *__thiscall NiPathInterpolator::GetKeyArray(NiPathInterpolator *this, unsigned __int16 usChannel);
char __thiscall NiPathInterpolator::GetKeyStride(NiPathInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiPathInterpolator::GetActiveTimeRange(NiPathInterpolator *this, float *fBeginKeyTime, float *fEndKeyTime);
void __thiscall NiPathInterpolator::GuaranteeTimeRange(NiPathInterpolator *this, float fStartTime, float fEndTime);
void __thiscall NiPathInterpolator::ProcessClone(NiPathInterpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiPathInterpolator::RegisterStreamables(NiPathInterpolator *this, NiStream *kStream);
NiPosKey *__thiscall NiPathInterpolator::GetPathKeys(NiPathInterpolator *this, unsigned int *uiNumKeys, NiAnimationKey::KeyType *eType, char *ucSize);
void __thiscall NiPathInterpolator::_NiPathInterpolator(NiPathInterpolator *this);
NiRTTI *__thiscall NiPathInterpolator::GetRTTI(NiPathInterpolator *this);
NiPoint3 *__thiscall NiPathInterpolator::GenPathInterp(NiPathInterpolator *this, NiPoint3 *result, int iI1, int iI2, float fNormTime);
void __thiscall NiPathInterpolator::CalcRefFrame(NiPathInterpolator *this, unsigned int ui1, unsigned int ui2, float fNormTime, NiMatrix3 *kRefFrame);
int __stdcall loc_7ED7F0(int ui1, int ui2, float fNormTime, int kRefFrame); // weak
float __thiscall NiPathInterpolator::PathLength(NiPathInterpolator *this, int iI0, int iI1, float fTime);
NiInterpolator *__thiscall NiPathInterpolator::GetSequenceInterpolator(NiPathInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiPathInterpolator::IsEqual(NiPathInterpolator *this, NiObject *pkObject);
void *__thiscall NiPathInterpolator::_scalar_deleting_destructor_(NiPathInterpolator *this, unsigned int);
float __thiscall NiPathInterpolator::GetTotalPathLength(NiPathInterpolator *this);
void __thiscall NiPathInterpolator::SetConstantVelocityData(NiPathInterpolator *this);
void __thiscall NiPathInterpolator::GetPercentLoc(NiPathInterpolator *this, float fPercent, unsigned int *uiI1, unsigned int *uiI2, float *fNormTime);
void __thiscall NiPathInterpolator::GetLoc(NiPathInterpolator *this, float fTime, unsigned int *uiI1, unsigned int *uiI2, float *fNormTime);
void __thiscall NiPathInterpolator::LoadBinary(NiPathInterpolator *this, NiStream *kStream);
void __thiscall NiPathInterpolator::LinkObject(NiPathInterpolator *this, NiStream *kStream);
void __thiscall NiPathInterpolator::SaveBinary(NiPathInterpolator *this, NiStream *kStream);
void __thiscall NiPathInterpolator::GetViewerStrings(NiPathInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiPathInterpolator::NiPathInterpolator(NiPathInterpolator *this, NiPosData *pkPathData, NiFloatData *pkPctData);
bool __thiscall NiPathInterpolator::Update(NiPathInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
void __thiscall NiPathInterpolator::CopyMembers(NiPathInterpolator *this, NiPathInterpolator *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiPathInterpolator::CreateObject();
NiObject *__thiscall NiPathInterpolator::CreateClone(NiPathInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiPathController::ProcessClone(NiPathController *this, NiCloningProcess *kCloning);
bool __thiscall NiPathController::RegisterStreamables(NiPathController *this, NiStream *kStream);
void __thiscall NiPathController::GetPathData(NiPathController *this, NiPosKey **pkPathData, unsigned int *uiNumKeys, NiAnimationKey::KeyType *eType, char *ucSize);
void __thiscall NiPathController::_NiPathController(NiPathController *this);
NiRTTI *__thiscall NiPathController::GetRTTI(NiPathController *this);
NiPoint3 *__thiscall NiPathController::GenPathInterp(NiPathController *this, NiPoint3 *result, int iI1, int iI2, float fNormTime);
void __thiscall NiPathController::CalcRefFrame(NiPathController *this, unsigned int ui1, unsigned int ui2, float fNormTime, NiMatrix3 *kRefFrame);
int __stdcall loc_7EF340(int ui1, int ui2, float fNormTime, int kRefFrame); // weak
float __thiscall NiPathController::PathLength(NiPathController *this, int iI0, int iI1, float fTime);
bool __thiscall NiPathController::IsEqual(NiPathController *this, NiObject *pkObject);
void *__thiscall NiPathController::_scalar_deleting_destructor_(NiPathController *this, unsigned int);
float __thiscall NiPathController::GetTotalPathLength(NiPathController *this);
void __thiscall NiPathController::GetPercentLoc(NiPathController *this, float fPercent, unsigned int *uiI1, unsigned int *uiI2, float *fNormTime);
void __thiscall NiPathController::GetLoc(NiPathController *this, float fTime, unsigned int *uiI1, unsigned int *uiI2, float *fNormTime);
void __thiscall NiPathController::LoadBinary(NiPathController *this, NiStream *kStream);
void __thiscall NiPathController::LinkObject(NiPathController *this, NiStream *kStream);
void __thiscall NiPathController::SaveBinary(NiPathController *this, NiStream *kStream);
void __thiscall NiPathController::GetViewerStrings(NiPathController *this, NiTArray<char *> *pkStrings);
void __thiscall NiPathController::Update(NiPathController *this, float fTime);
void __thiscall NiPathController::CopyMembers(NiPathController *this, NiPathController *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiPathController::CreateObject();
NiObject *__thiscall NiPathController::CreateClone(NiPathController *this, NiCloningProcess *kCloning);
unsigned __int16 __thiscall NiMultiTargetTransformController::GetInterpolatorCount(NiMultiTargetTransformController *this);
NiInterpolator *__thiscall NiMultiTargetTransformController::GetInterpolator(NiMultiTargetTransformController *this, unsigned __int16 usIndex);
NiBlendInterpolator *__thiscall NiMultiTargetTransformController::CreateBlendInterpolator(NiMultiTargetTransformController *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
void __thiscall NiMultiTargetTransformController::GuaranteeTimeRange(NiMultiTargetTransformController *this, float fStartTime, float fEndTime);
bool __thiscall NiMultiTargetTransformController::InterpolatorIsCorrectType(NiTransformController *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
void __thiscall NiSingleInterpController::LinkObject(NiSingleInterpController *this, NiStream *kStream);
bool __thiscall NiMultiTargetTransformController::RegisterStreamables(NiMultiTargetTransformController *this, NiStream *kStream);
bool __thiscall NiMultiTargetTransformController::IsEqual(NiMultiTargetTransformController *this, NiObject *pkObject);
void __thiscall NiMultiTargetTransformController::_NiMultiTargetTransformController(NiMultiTargetTransformController *this);
void __thiscall NiMultiTargetTransformController::Update(NiMultiTargetTransformController *this, float fTime);
const char *__thiscall NiMultiTargetTransformController::GetInterpolatorID(NiMultiTargetTransformController *this, unsigned __int16 usIndex);
unsigned __int16 __thiscall NiMultiTargetTransformController::GetInterpolatorIndex(NiMultiTargetTransformController *this, const char *pcID);
void __thiscall NiMultiTargetTransformController::ResetTimeExtrema(NiMultiTargetTransformController *this);
void __thiscall NiMultiTargetTransformController::AllocateStorage(NiMultiTargetTransformController *this, unsigned __int16 usCount);
void *__thiscall NiBlendTransformInterpolator::_vector_deleting_destructor_(NiBlendTransformInterpolator *this, unsigned int);
NiInterpolator *__thiscall NiMultiTargetTransformController::CreatePoseInterpolator(NiMultiTargetTransformController *this, unsigned __int16 usIndex);
void __thiscall NiMultiTargetTransformController::CopyMembers(NiMultiTargetTransformController *this, NiMultiTargetTransformController *pkDest, NiCloningProcess *kCloning);
void __thiscall NiMultiTargetTransformController::ProcessClone(NiMultiTargetTransformController *this, NiCloningProcess *kCloning);
NiObject *__thiscall NiMultiTargetTransformController::CreateClone(NiMultiTargetTransformController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiMultiTargetTransformController::CreateObject();
void __thiscall NiMultiTargetTransformController::LoadBinary(NiMultiTargetTransformController *this, NiStream *kStream);
void __thiscall NiMultiTargetTransformController::SaveBinary(NiMultiTargetTransformController *this, NiStream *kStream);
void __thiscall NiMultiTargetTransformController::GetViewerStrings(NiMultiTargetTransformController *this, NiTArray<char *> *pkStrings);
float __thiscall NiMorphData::MorphTarget::GetWeight(NiMorphData::MorphTarget *this);
void __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::SetRunTime(NiMorphData::MorphTarget *this, float fWeight);
NiObject *__cdecl NiMorphData::CreateObject();
NiRTTI *__thiscall NiMorphData::GetRTTI(NiMorphData *this);
void *__thiscall NiMorphData::MorphTarget::_vector_deleting_destructor_(NiMorphData::MorphTarget *this, unsigned int);
void __thiscall NiFloatInterpolator::ReplaceKeys(NiFloatInterpolator *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
bool __thiscall NiMorphData::MorphTarget::IsEqual(NiMorphData::MorphTarget *this, NiMorphData::MorphTarget *pkOther, unsigned int uiNumVerts);
bool __thiscall NiMorphData::IsEqual(NiMorphData *this, NiObject *pObject);
void __thiscall NiMorphData::MorphTarget::LoadBinary(NiMorphData::MorphTarget *this, NiStream *kStream, unsigned int uiNumVerts);
void *__thiscall NiMorphData::_vector_deleting_destructor_(NiMorphData *this, unsigned int);
void __thiscall NiMorphData::LoadBinary(NiMorphData *this, NiStream *stream);
void __thiscall NiMorphData::SaveBinary(NiMorphData *this, NiStream *stream);
void __thiscall NiMorphData::GetViewerStrings(NiMorphData *this, NiTArray<char *> *pStrings);
bool __thiscall NiLookAtInterpolator::ResolveDependencies(NiLookAtInterpolator *this, NiAVObjectPalette *pkPalette);
void __thiscall NiDefaultAVObjectPalette::LinkObject(NiScreenLODData *this, NiStream *kStream);
void __thiscall NiLookAtInterpolator::Collapse(NiLookAtInterpolator *this);
void __thiscall NiLookAtInterpolator::GetActiveTimeRange(NiLookAtInterpolator *this, float *fBeginKeyTime, float *fEndKeyTime);
void __thiscall NiLookAtInterpolator::GuaranteeTimeRange(NiLookAtInterpolator *this, float fStartTime, float fEndTime);
NiInterpolator *__thiscall NiLookAtInterpolator::GetSequenceInterpolator(NiLookAtInterpolator *this, float fStartTime, float fEndTime);
void __thiscall NiLookAtInterpolator::SetLookAtName(NiLookAtInterpolator *this, const char *pcName);
bool __thiscall NiLookAtInterpolator::SetUpDependencies(NiLookAtInterpolator *this);
void __thiscall NiLookAtInterpolator::ProcessClone(NiLookAtInterpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiLookAtInterpolator::RegisterStreamables(NiLookAtInterpolator *this, NiStream *kStream);
bool __thiscall NiLookAtInterpolator::IsEqual(NiLookAtInterpolator *this, NiObject *pkObject);
void __thiscall NiLookAtInterpolator::NiLookAtInterpolator(NiLookAtInterpolator *this, NiAVObject *pkLookAt, NiLookAtInterpolator::Axis eAxis, bool bFlip);
NiRTTI *__thiscall NiLookAtInterpolator::GetRTTI(NiLookAtInterpolator *this);
void __thiscall NiLookAtInterpolator::_NiLookAtInterpolator(NiLookAtInterpolator *this);
bool __thiscall NiLookAtInterpolator::Update(NiLookAtInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
void __thiscall NiLookAtInterpolator::CopyMembers(NiLookAtInterpolator *this, NiLookAtInterpolator *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiLookAtInterpolator::CreateObject();
void *__thiscall NiLookAtInterpolator::_scalar_deleting_destructor_(NiLookAtInterpolator *this, unsigned int);
NiObject *__thiscall NiLookAtInterpolator::CreateClone(NiLookAtInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiLookAtInterpolator::LoadBinary(NiLookAtInterpolator *this, NiStream *kStream);
void __thiscall NiLookAtInterpolator::SaveBinary(NiLookAtInterpolator *this, NiStream *kStream);
void __thiscall NiLookAtInterpolator::GetViewerStrings(NiLookAtInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiLookAtController::LinkObject(NiLookAtController *this, NiStream *kStream);
bool __thiscall NiLookAtController::RegisterStreamables(NiLookAtController *this, NiStream *kStream);
bool __thiscall NiLookAtController::IsEqual(NiLookAtController *this, NiObject *pkObject);
void __thiscall NiLookAtController::Update(NiLookAtController *this, float fTime);
void __thiscall NiLookAtController::ProcessClone(NiLookAtController *this, NiCloningProcess *kCloning);
NiRTTI *__thiscall NiLookAtController::GetRTTI(NiLookAtController *this);
NiObject *__thiscall NiLookAtController::CreateClone(NiLookAtController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiLookAtController::CreateObject();
void __thiscall NiLookAtController::LoadBinary(NiLookAtController *this, NiStream *kStream);
void __thiscall NiLookAtController::SaveBinary(NiLookAtController *this, NiStream *kStream);
void __thiscall NiLookAtController::GetViewerStrings(NiLookAtController *this, NiTArray<char *> *pkStrings);
bool __thiscall NiTextureTransformController::RegisterStreamables(NiTextureTransformController *this, NiStream *kStream);
bool __thiscall NiLightDimmerController::IsEqual(NiLightDimmerController *this, NiObject *pkObject);
void __thiscall NiLightDimmerController::GetTargetFloatValue(NiLightDimmerController *this, float *fValue);
NiRTTI *__thiscall NiLightDimmerController::GetRTTI(NiLightDimmerController *this);
void __thiscall NiLightDimmerController::Update(NiLightDimmerController *this, float fTime);
void *__thiscall NiLightDimmerController::_vector_deleting_destructor_(NiLightDimmerController *this, unsigned int);
NiObject *__thiscall NiLightDimmerController::CreateClone(NiLightDimmerController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiLightDimmerController::CreateObject();
void __thiscall NiLightDimmerController::GetViewerStrings(NiLightDimmerController *this, NiTArray<char *> *pkStrings);
void __thiscall NiLightColorController::GetTargetPoint3Value(NiLightColorController *this, NiPoint3 *kValue);
const char *__thiscall NiLightColorController::GetCtlrID(NiLightColorController *this);
bool __thiscall NiLightColorController::IsEqual(NiLightColorController *this, NiObject *pkObject);
NiRTTI *__thiscall NiLightColorController::GetRTTI(NiLightColorController *this);
bool __thiscall NiLightColorController::InterpTargetIsCorrectType(NiLightDimmerController *this, NiObjectNET *pkTarget);
void __thiscall NiLightColorController::Update(NiLightColorController *this, float fTime);
void __thiscall NiLightColorController::LinkObject(NiLightColorController *this, NiStream *kStream);
void *__thiscall NiLightColorController::_scalar_deleting_destructor_(NiLightColorController *this, unsigned int);
NiObject *__thiscall NiLightColorController::CreateClone(NiLightColorController *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiLightColorController::CreateObject();
void __thiscall NiLightColorController::LoadBinary(NiLightColorController *this, NiStream *kStream);
void __thiscall NiLightColorController::GetViewerStrings(NiLightColorController *this, NiTArray<char *> *pkStrings);
void *__thiscall NiTArray<unsigned_int>::_vector_deleting_destructor_(NiTArray<unsigned int> *this, unsigned int);
void __thiscall NiTMapBase<DFALL<NiPointer<NiD3DXEffectTechniqueSet>>_char_const___NiPointer<NiD3DXEffectTechniqueSet>>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,HWND__ *,NiPointer<NiRenderTargetGroup> > *this, NiTMapItem<HWND__ *,NiPointer<NiRenderTargetGroup> > *pkItem, HWND__ *key, NiPointer<NiRenderTargetGroup> val);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSequence>>_NiPointer<NiSequence>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSequence>>_NiPointer<NiSequence>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiSequence> >,NiPointer<NiSequence> > *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSequence>>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSequence> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiSequence>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiSequence> > *this, unsigned int);
void __thiscall NiKeyframeManager::LinkObject(NiKeyframeManager *this, NiStream *kStream);
bool __thiscall NiKeyframeManager::Add(NiKeyframeManager *this, const char *pcSequenceFile, const char *pcSequenceName, unsigned int uiIndex);
void __thiscall NiKeyframeManager::LoadBinary(NiKeyframeManager *this, NiStream *kStream);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSequence>>_NiPointer<NiSequence>>::_vector_deleting_destructor_(NiTStringPointerMap<NiPointer<NiSequence> > *this, unsigned int);
void __thiscall NiKeyframeManager::NiKeyframeManager(NiKeyframeManager *this);
NiRTTI *__thiscall NiKeyframeManager::GetRTTI(NiKeyframeManager *this);
void *__thiscall NiKeyframeManager::_scalar_deleting_destructor_(NiKeyframeManager *this, unsigned int);
NiObject *__cdecl NiKeyframeManager::CreateObject();
void __thiscall NiTransformData::GuaranteeKeysAtStartAndEnd(NiTransformData *this, float fStartTime, float fEndTime);
NiObject *__cdecl NiTransformData::CreateObject();
NiRTTI *__thiscall NiTransformData::GetRTTI(NiTransformData *this);
void __thiscall NiTransformData::SetPosAnim(NiTransformData *this, NiPosKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiTransformData::SetScaleAnim(NiTransformData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
bool __thiscall NiTransformData::IsEqual(NiTransformData *this, NiObject *pkObject);
void __thiscall NiTransformData::_NiTransformData(NiTransformData *this);
void __thiscall NiTransformData::ReplaceRotAnim(NiTransformData *this, NiRotKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiTransformData::ReplacePosAnim(NiTransformData *this, NiPosKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiTransformData::ReplaceScaleAnim(NiTransformData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiPointer<NiTransformData> *__thiscall NiTransformData::GetSequenceData(NiTransformData *this, NiPointer<NiTransformData> *result, float fStartTime, float fEndTime);
void *__thiscall NiTransformData::_scalar_deleting_destructor_(NiTransformData *this, unsigned int);
void __thiscall NiTransformData::LoadBinary(NiTransformData *this, NiStream *stream);
void __thiscall NiTransformData::SaveBinary(NiTransformData *this, NiStream *stream);
void __thiscall NiTransformData::GetViewerStrings(NiTransformData *this, NiTArray<char *> *pStrings);
void __thiscall NiGeomMorpherController::GuaranteeTimeRange(NiGeomMorpherController *this, float fStartTime, float fEndTime);
void __thiscall NiGeomMorpherController::ProcessClone(NiGeomMorpherController *this, NiCloningProcess *kCloning);
bool __thiscall NiGeomMorpherController::RegisterStreamables(NiGeomMorpherController *this, NiStream *kStream);
bool __thiscall NiGeomMorpherController::IsEqual(NiGeomMorpherController *this, NiObject *pkObject);
const char *__thiscall NiGeomMorpherController::GetInterpolatorID(NiGeomMorpherController *this, unsigned __int16 usIndex);
NiInterpolator *__thiscall NiGeomMorpherController::GetInterpolator(NiGeomMorpherController *this, unsigned __int16 usIndex);
void __thiscall NiGeomMorpherController::SetInterpolator(NiGeomMorpherController *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
unsigned int __thiscall NiGeomMorpherController::GetNumTargets(NiGeomMorpherController *this);
void __thiscall NiGeomMorpherController::ResetTimeExtrema(NiGeomMorpherController *this);
void __thiscall NiGeomMorpherController::Update(NiGeomMorpherController *this, float fTime);
void __thiscall NiGeomMorpherController::GenMorphInterp(NiGeomMorpherController *this, float fTime);
void __thiscall NiGeomMorpherController::SetTarget(NiGeomMorpherController *this, NiObjectNET *pkTarget);
void __thiscall NiGeomMorpherController::OnPreDisplay(NiGeomMorpherController *this);
void __thiscall NiGeomMorpherController::CalculateMorphBound(NiGeomMorpherController *this);
unsigned __int16 __thiscall NiGeomMorpherController::GetInterpolatorCount(NiGeomMorpherController *this);
unsigned __int16 __thiscall NiGeomMorpherController::GetInterpolatorIndex(NiGeomMorpherController *this, const char *pcID);
NiInterpolator *__thiscall NiGeomMorpherController::CreatePoseInterpolator(NiGeomMorpherController *this, unsigned __int16 usIndex);
void __thiscall NiGeomMorpherController::SynchronizePoseInterpolator(NiGeomMorpherController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiGeomMorpherController::AllocateInterpArray(NiGeomMorpherController *this, unsigned __int16 usCount);
void __thiscall NiGeomMorpherController::SetMorphData(NiGeomMorpherController *this, NiMorphData *pkData, bool bCalculateMorphBound);
NiRTTI *__thiscall NiGeomMorpherController::GetRTTI(NiGeomMorpherController *this);
bool __thiscall NiGeomMorpherController::TargetIsRequiredType(NiD3DTimeSyncController *this);
NiPoint3 *__thiscall NiGeomMorpherController::GetVertexData(NiGeomMorpherController *this);
void __thiscall NiGeomMorpherController::_NiGeomMorpherController(NiGeomMorpherController *this);
void __thiscall NiGeomMorpherController::CopyMembers(NiGeomMorpherController *this, NiGeomMorpherController *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiGeomMorpherController::CreateObject();
void __thiscall NiGeomMorpherController::LoadBinary(NiGeomMorpherController *this, NiStream *kStream);
void __thiscall NiGeomMorpherController::LinkObject(NiGeomMorpherController *this, NiStream *kStream);
void __thiscall NiGeomMorpherController::SaveBinary(NiGeomMorpherController *this, NiStream *kStream);
void *__thiscall NiGeomMorpherController::_vector_deleting_destructor_(NiGeomMorpherController *this, unsigned int);
NiObject *__thiscall NiGeomMorpherController::CreateClone(NiGeomMorpherController *this, NiCloningProcess *kCloning);
NiBlendInterpolator *__thiscall NiPoint3InterpController::CreateBlendInterpolator(NiPoint3InterpController *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
NiObject *__cdecl NiFloatsExtraDataPoint3Controller::CreateObject();
NiRTTI *__thiscall NiFloatsExtraDataPoint3Controller::GetRTTI(NiFloatsExtraDataPoint3Controller *this);
void *__thiscall NiFloatsExtraDataPoint3Controller::_vector_deleting_destructor_(NiFloatsExtraDataPoint3Controller *this, unsigned int);
NiInterpolator *__thiscall NiFloatsExtraDataPoint3Controller::CreatePoseInterpolator(NiFloatsExtraDataPoint3Controller *this, unsigned __int16 usIndex);
NiObject *__thiscall NiFloatsExtraDataPoint3Controller::CreateClone(NiFloatsExtraDataPoint3Controller *this, NiCloningProcess *kCloning);
void __thiscall NiFloatsExtraDataPoint3Controller::SynchronizePoseInterpolator(NiFloatsExtraDataPoint3Controller *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiFloatsExtraDataPoint3Controller::Update(NiFloatsExtraDataPoint3Controller *this, float fTime);
void __thiscall NiFloatsExtraDataPoint3Controller::LoadBinary(NiFloatsExtraDataPoint3Controller *this, NiStream *kStream);
void __thiscall NiFloatsExtraDataPoint3Controller::SaveBinary(NiFloatsExtraDataPoint3Controller *this, NiStream *kStream);
void __thiscall NiFloatsExtraDataPoint3Controller::GetViewerStrings(NiFloatsExtraDataPoint3Controller *this, NiTArray<char *> *pkStrings);
NiBlendInterpolator *__thiscall NiPSysModifierFloatCtlr::CreateBlendInterpolator(NiPSysModifierFloatCtlr *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
NiObject *__cdecl NiFloatsExtraDataController::CreateObject();
bool __thiscall NiFloatsExtraDataPoint3Controller::IsEqual(NiFloatsExtraDataPoint3Controller *this, NiObject *pkObject);
NiRTTI *__thiscall NiFloatsExtraDataController::GetRTTI(NiFloatsExtraDataController *this);
void *__thiscall NiFloatsExtraDataController::_scalar_deleting_destructor_(NiFloatsExtraDataController *this, unsigned int);
NiInterpolator *__thiscall NiFloatsExtraDataController::CreatePoseInterpolator(NiFloatsExtraDataController *this, unsigned __int16 usIndex);
const char *__thiscall NiFloatsExtraDataPoint3Controller::GetCtlrID(NiFloatsExtraDataPoint3Controller *this);
NiObject *__thiscall NiFloatsExtraDataController::CreateClone(NiFloatsExtraDataController *this, NiCloningProcess *kCloning);
void __thiscall NiFloatsExtraDataController::SynchronizePoseInterpolator(NiFloatsExtraDataController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiFloatsExtraDataController::Update(NiFloatsExtraDataController *this, float fTime);
void __thiscall NiFloatsExtraDataController::LoadBinary(NiFloatsExtraDataController *this, NiStream *kStream);
void __thiscall NiFloatsExtraDataController::GetViewerStrings(NiFloatsExtraDataController *this, NiTArray<char *> *pkStrings);
void __thiscall NiFloatInterpolator::NiFloatInterpolator(NiFloatInterpolator *this, NiFloatData *pkFloatData);
NiRTTI *__thiscall NiFloatInterpolator::GetRTTI(NiFloatInterpolator *this);
void __thiscall NiFloatInterpolator::NiFloatInterpolator(NiFloatInterpolator *this, float fPoseValue);
NiAnimationKey::KeyType __thiscall NiBoolInterpolator::GetKeyType(NiFloatInterpolator *this, unsigned __int16 usChannel);
bool __thiscall NiFloatInterpolator::GetChannelPosed(NiFloatInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiFloatInterpolator::Collapse(NiFloatInterpolator *this);
void __thiscall NiFloatInterpolator::SetPoseValue(NiFloatInterpolator *this, float fPoseValue);
void __thiscall NiFloatInterpolator::GuaranteeTimeRange(NiFloatInterpolator *this, float fStartTime, float fEndTime);
NiObject *__cdecl NiFloatInterpolator::CreateObject();
bool __thiscall NiBoolInterpolator::RegisterStreamables(NiFloatInterpolator *this, NiStream *kStream);
bool __thiscall NiFloatInterpolator::IsEqual(NiFloatInterpolator *this, NiObject *pkObject);
void *__thiscall NiBoolInterpolator::_scalar_deleting_destructor_(NiFloatInterpolator *this, unsigned int);
NiInterpolator *__thiscall NiFloatInterpolator::GetSequenceInterpolator(NiFloatInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiFloatInterpolator::Update(NiFloatInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, float *fValue);
void __thiscall NiFloatInterpolator::CopyMembers(NiFloatInterpolator *this, NiFloatInterpolator *pkDest, NiCloningProcess *kCloning);
void __thiscall NiFloatInterpolator::LoadBinary(NiFloatInterpolator *this, NiStream *kStream);
void __thiscall NiFloatInterpolator::SaveBinary(NiFloatInterpolator *this, NiStream *kStream);
NiObject *__thiscall NiFloatInterpolator::CreateClone(NiFloatInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiFloatInterpolator::GetViewerStrings(NiFloatInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiGeomMorpherController::InterpolatorIsCorrectType(NiPSysModifierFloatCtlr *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
NiObject *__cdecl NiFloatExtraDataController::CreateObject();
NiRTTI *__thiscall NiFloatExtraDataController::GetRTTI(NiFloatExtraDataController *this);
NiInterpolator *__thiscall NiFloatExtraDataController::CreatePoseInterpolator(NiFloatExtraDataController *this, unsigned __int16 usIndex);
NiObject *__thiscall NiFloatExtraDataController::CreateClone(NiFloatExtraDataController *this, NiCloningProcess *kCloning);
void __thiscall NiFloatExtraDataController::SynchronizePoseInterpolator(NiFloatExtraDataController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiFloatExtraDataController::Update(NiFloatExtraDataController *this, float fTime);
void __thiscall NiFloatExtraDataController::GetViewerStrings(NiFloatExtraDataController *this, NiTArray<char *> *pkStrings);
void __thiscall NiFloatData::GuaranteeKeysAtStartAndEnd(NiFloatData *this, float fStartTime, float fEndTime);
void __thiscall NiFloatData::_NiFloatData(NiFloatData *this);
void __thiscall NiFloatData::SetAnim(NiFloatData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiObject *__cdecl NiFloatData::CreateObject();
bool __thiscall NiFloatData::IsEqual(NiFloatData *this, NiObject *pkObject);
void __thiscall NiFloatData::ReplaceAnim(NiFloatData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiPointer<NiFloatData> *__thiscall NiFloatData::GetSequenceData(NiFloatData *this, NiPointer<NiFloatData> *result, float fStartTime, float fEndTime);
void __thiscall NiFloatData::LoadBinary(NiFloatData *this, NiStream *stream);
void __thiscall NiFloatData::SaveBinary(NiFloatData *this, NiStream *stream);
void __thiscall NiFloatData::GetViewerStrings(NiFloatData *this, NiTArray<char *> *pStrings);
void __thiscall NiFlipController::GetTargetFloatValue(NiFlipController *this, float *fValue);
bool __thiscall NiFlipController::IsEqual(NiFlipController *this, NiObject *pkObject);
NiBlendInterpolator *__thiscall NiFlipController::CreateBlendInterpolator(NiFlipController *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
const char *__thiscall NiFlipController::GetCtlrID(NiFlipController *this);
bool __thiscall NiFlipController::RegisterStreamables(NiFlipController *this, NiStream *kStream);
void __thiscall NiTArray<NiPointer<NiTexture>>::_NiTArray<NiPointer<NiTexture>>(NiTArray<NiPointer<NiTexture> > *this);
void *__thiscall NiTArray<NiPointer<NiTexture>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiTexture> > *this, unsigned int);
NiRTTI *__thiscall NiFlipController::GetRTTI(NiFlipController *this);
void __thiscall NiFlipController::Update(NiFlipController *this, float fTime);
void __thiscall NiFlipController::SaveBinary(NiFlipController *this, NiStream *kStream);
void __thiscall NiFlipController::NiFlipController(NiFlipController *this);
void *__thiscall NiFlipController::_vector_deleting_destructor_(NiFlipController *this, unsigned int);
void __thiscall NiFlipController::CopyMembers(NiFlipController *this, NiFlipController *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiFlipController::CreateObject();
void __thiscall NiFlipController::LoadBinary(NiFlipController *this, NiStream *kStream);
void __thiscall NiFlipController::LinkObject(NiFlipController *this, NiStream *kStream);
NiObject *__thiscall NiFlipController::CreateClone(NiFlipController *this, NiCloningProcess *kCloning);
int __thiscall NiDirectionalLight::GetEffectType(NiDitherProperty *this);
NiAnimationKey::KeyContent __thiscall NiColorInterpolator::GetKeyContent(NiColorInterpolator *this, unsigned __int16 usChannel);
NiAnimationKey::KeyType __thiscall NiQuaternionInterpolator::GetKeyType(NiQuaternionInterpolator *this, unsigned __int16 usChannel);
NiAnimationKey *__thiscall NiColorInterpolator::GetKeyArray(NiQuaternionInterpolator *this, unsigned __int16 usChannel);
bool __thiscall NiColorInterpolator::GetChannelPosed(NiColorInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiColorInterpolator::SetPoseValue(NiColorInterpolator *this, NiColorA kPoseValue);
void __thiscall NiColorInterpolator::GuaranteeTimeRange(NiColorInterpolator *this, float fStartTime, float fEndTime);
void __thiscall NiQuaternionInterpolator::LoadBinary(NiQuaternionInterpolator *this, NiStream *kStream);
void __thiscall NiColorInterpolator::SaveBinary(NiColorInterpolator *this, NiStream *kStream);
void __thiscall NiColorInterpolator::NiColorInterpolator(NiColorInterpolator *this, NiColorData *pkColorData);
NiRTTI *__thiscall NiColorInterpolator::GetRTTI(NiColorInterpolator *this);
void __thiscall NiColorInterpolator::NiColorInterpolator(NiColorInterpolator *this, NiColorA kPoseValue);
void __thiscall NiColorInterpolator::Collapse(NiColorInterpolator *this);
NiInterpolator *__thiscall NiColorInterpolator::GetSequenceInterpolator(NiColorInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiColorInterpolator::Update(NiColorInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiColorA *kValue);
NiObject *__cdecl NiColorInterpolator::CreateObject();
bool __thiscall NiColorInterpolator::IsEqual(NiColorInterpolator *this, NiObject *pkObject);
void *__thiscall NiColorInterpolator::_vector_deleting_destructor_(NiQuaternionInterpolator *this, unsigned int);
NiObject *__thiscall NiColorInterpolator::CreateClone(NiColorInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiColorInterpolator::GetViewerStrings(NiColorInterpolator *this, NiTArray<char *> *pkStrings);
NiBlendInterpolator *__thiscall NiColorExtraDataController::CreateBlendInterpolator(NiColorExtraDataController *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
bool __thiscall NiColorExtraDataController::InterpolatorIsCorrectType(NiColorExtraDataController *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
NiObject *__cdecl NiColorExtraDataController::CreateObject();
bool __thiscall NiFloatsExtraDataController::RegisterStreamables(NiFloatsExtraDataPoint3Controller *this, NiStream *kStream);
void __thiscall NiColorExtraDataController::SaveBinary(NiPSysModifierFloatCtlr *this, NiStream *kStream);
bool __thiscall NiFloatExtraDataController::IsEqual(NiFloatExtraDataController *this, NiObject *pkObject);
NiRTTI *__thiscall NiColorExtraDataController::GetRTTI(NiColorExtraDataController *this);
void *__thiscall NiFloatExtraDataController::_scalar_deleting_destructor_(NiFloatExtraDataController *this, unsigned int);
NiInterpolator *__thiscall NiColorExtraDataController::CreatePoseInterpolator(NiColorExtraDataController *this, unsigned __int16 usIndex);
NiObject *__thiscall NiColorExtraDataController::CreateClone(NiColorExtraDataController *this, NiCloningProcess *kCloning);
void __thiscall NiColorExtraDataController::LinkObject(NiColorExtraDataController *this, NiStream *kStream);
void __thiscall NiColorExtraDataController::SynchronizePoseInterpolator(NiColorExtraDataController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiColorExtraDataController::Update(NiColorExtraDataController *this, float fTime);
void __thiscall NiColorExtraDataController::GetViewerStrings(NiColorExtraDataController *this, NiTArray<char *> *pkStrings);
void __thiscall NiColorData::GuaranteeKeysAtStartAndEnd(NiColorData *this, float fStartTime, float fEndTime);
NiRTTI *__thiscall NiColorData::GetRTTI(NiColorData *this);
NiObject *__cdecl NiColorData::CreateObject();
bool __thiscall NiColorData::IsEqual(NiColorData *this, NiObject *pkObject);
void *__thiscall NiColorData::_vector_deleting_destructor_(NiColorData *this, unsigned int);
void __thiscall NiColorData::ReplaceAnim(NiColorData *this, NiColorKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiPointer<NiColorData> *__thiscall NiColorData::GetSequenceData(NiColorData *this, NiPointer<NiColorData> *result, float fStartTime, float fEndTime);
void __thiscall NiColorData::LoadBinary(NiColorData *this, NiStream *stream);
void __thiscall NiColorData::SaveBinary(NiColorData *this, NiStream *stream);
void __thiscall NiColorData::GetViewerStrings(NiColorData *this, NiTArray<char *> *pStrings);
unsigned int __thiscall NiBSplineTransformInterpolator::GetDimension(NiBSplineTransformInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiBSplineTransformInterpolator::GetDegree(NiBSplineTransformInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiBSplineTransformInterpolator::GetControlHandle(NiBSplineTransformInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiBSplineTransformInterpolator::SetControlHandle(NiBSplineTransformInterpolator *this, unsigned int kControlHandle, unsigned __int16 usChannel);
void __thiscall NiBSplineTransformInterpolator::CopyMembers(NiBSplineTransformInterpolator *this, NiBSplineTransformInterpolator *pkDest, NiCloningProcess *kCloning);
NiRTTI *__thiscall NiBSplineTransformInterpolator::GetRTTI(NiBSplineTransformInterpolator *this);
void __thiscall NiBSplineTransformInterpolator::NiBSplineTransformInterpolator(NiBSplineTransformInterpolator *this, NiBSplineData *pkData, unsigned int kTransCPHandle, unsigned int kRotCPHandle, unsigned int kScaleCPHandle, NiBSplineBasisData *pkBasisData);
bool __thiscall NiBSplineTransformInterpolator::GetChannelPosed(NiBSplineTransformInterpolator *this, unsigned __int16 usChannel);
NiObject *__thiscall NiBSplineTransformInterpolator::CreateClone(NiBSplineTransformInterpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineTransformInterpolator::CreateObject();
bool __thiscall NiBSplineTransformInterpolator::IsEqual(NiBSplineTransformInterpolator *this, NiObject *pkObject);
bool __thiscall NiBSplineTransformInterpolator::Update(NiBSplineTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
void __thiscall NiBSplineTransformInterpolator::SaveBinary(NiBSplineTransformInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineTransformInterpolator::LoadBinary(NiBSplineTransformInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineTransformInterpolator::GetViewerStrings(NiBSplineTransformInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiBSplineColorInterpolator::GetChannelPosed(NiBSplinePoint3Interpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiBSplineColorInterpolator::GetDegree(NiBSplinePoint3Interpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiBSplinePoint3Interpolator::GetControlHandle(NiBSplinePoint3Interpolator *this, unsigned __int16 usChannel);
void __thiscall NiBSplinePoint3Interpolator::SetControlHandle(NiBSplinePoint3Interpolator *this, unsigned int kControlHandle, unsigned __int16 usChannel);
void __thiscall NiBSplinePoint3Interpolator::CopyMembers(NiBSplinePoint3Interpolator *this, NiBSplinePoint3Interpolator *pkDest, NiCloningProcess *kCloning);
NiRTTI *__thiscall NiBSplinePoint3Interpolator::GetRTTI(NiBSplinePoint3Interpolator *this);
void __thiscall NiBSplinePoint3Interpolator::NiBSplinePoint3Interpolator(NiBSplinePoint3Interpolator *this, NiBSplineData *pkData, unsigned int kPoint3CPHandle, NiBSplineBasisData *pkBasisData);
bool __thiscall NiBSplinePoint3Interpolator::Update(NiBSplinePoint3Interpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiPoint3 *kValue);
NiObject *__thiscall NiBSplinePoint3Interpolator::CreateClone(NiBSplinePoint3Interpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplinePoint3Interpolator::CreateObject();
void __thiscall NiBSplinePoint3Interpolator::SaveBinary(NiBSplinePoint3Interpolator *this, NiStream *kStream);
bool __thiscall NiBSplinePoint3Interpolator::IsEqual(NiBSplinePoint3Interpolator *this, NiObject *pkObject);
void __thiscall NiBSplinePoint3Interpolator::LoadBinary(NiBSplinePoint3Interpolator *this, NiStream *kStream);
void __thiscall NiBSplinePoint3Interpolator::GetViewerStrings(NiBSplinePoint3Interpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBSplineFloatInterpolator::NiBSplineFloatInterpolator(NiBSplineFloatInterpolator *this, NiBSplineData *pkData, unsigned int kFloatCPHandle, NiBSplineBasisData *pkBasisData);
unsigned int __thiscall NiBSplineFloatInterpolator::GetDimension(NiBSplineFloatInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiBSplineFloatInterpolator::GetControlHandle(NiBSplineFloatInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiBSplineFloatInterpolator::SetControlHandle(NiBSplineFloatInterpolator *this, unsigned int kControlHandle, unsigned __int16 usChannel);
void __thiscall NiBSplineFloatInterpolator::CopyMembers(NiBSplineFloatInterpolator *this, NiBSplineFloatInterpolator *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineFloatInterpolator::CreateObject();
bool __thiscall NiBSplineFloatInterpolator::IsEqual(NiBSplineFloatInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBSplineFloatInterpolator::GetRTTI(NiBSplineFloatInterpolator *this);
bool __thiscall NiBSplineFloatInterpolator::Update(NiBSplineFloatInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, float *fValue);
NiObject *__thiscall NiBSplineFloatInterpolator::CreateClone(NiBSplineFloatInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiBSplineFloatInterpolator::SaveBinary(NiBSplineFloatInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineFloatInterpolator::LoadBinary(NiBSplineFloatInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineFloatInterpolator::GetViewerStrings(NiBSplineFloatInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiBSplineCompTransformInterpolator::IsEqual(NiBSplineCompTransformInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBSplineCompTransformInterpolator::GetRTTI(NiBSplineCompTransformInterpolator *this);
NiObject *__thiscall NiBSplineCompTransformInterpolator::CreateClone(NiBSplineCompTransformInterpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineCompTransformInterpolator::CreateObject();
bool __thiscall NiBSplineCompTransformInterpolator::Update(NiBSplineCompTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
void __thiscall NiBSplineCompTransformInterpolator::LoadBinary(NiBSplineCompTransformInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompTransformInterpolator::SaveBinary(NiBSplineCompTransformInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompTransformInterpolator::GetViewerStrings(NiBSplineCompTransformInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiBSplineCompPoint3Interpolator::IsEqual(NiBSplineCompPoint3Interpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBSplineCompPoint3Interpolator::GetRTTI(NiBSplineCompPoint3Interpolator *this);
bool __thiscall NiBSplineCompPoint3Interpolator::Update(NiBSplineCompPoint3Interpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiPoint3 *kValue);
NiObject *__thiscall NiBSplineCompPoint3Interpolator::CreateClone(NiBSplineCompPoint3Interpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineCompPoint3Interpolator::CreateObject();
void __thiscall NiBSplineCompPoint3Interpolator::LoadBinary(NiBSplineCompPoint3Interpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompPoint3Interpolator::SaveBinary(NiBSplineCompPoint3Interpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompPoint3Interpolator::GetViewerStrings(NiBSplineCompPoint3Interpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBoolTimelineInterpolator::LinkObject(NiBSplineCompTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiBSplineCompTransformInterpolator::RegisterStreamables(NiBSplineCompTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiBSplineCompFloatInterpolator::IsEqual(NiBSplineCompFloatInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBSplineCompFloatInterpolator::GetRTTI(NiBSplineCompFloatInterpolator *this);
bool __thiscall NiBSplineCompFloatInterpolator::Update(NiBSplineCompFloatInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, float *fValue);
NiObject *__thiscall NiBSplineCompFloatInterpolator::CreateClone(NiBSplineCompFloatInterpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineCompFloatInterpolator::CreateObject();
void __thiscall NiBSplineCompFloatInterpolator::LoadBinary(NiBSplineCompFloatInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompFloatInterpolator::SaveBinary(NiBSplineCompFloatInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompFloatInterpolator::GetViewerStrings(NiBSplineCompFloatInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiBSplineCompColorInterpolator::IsEqual(NiBSplineCompColorInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBSplineCompColorInterpolator::GetRTTI(NiBSplineCompColorInterpolator *this);
bool __thiscall NiBSplineCompColorInterpolator::Update(NiBSplineCompColorInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiColorA *kValue);
NiObject *__thiscall NiBSplineCompColorInterpolator::CreateClone(NiBSplineCompColorInterpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineCompColorInterpolator::CreateObject();
void __thiscall NiBSplineCompColorInterpolator::LoadBinary(NiBSplineCompColorInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompColorInterpolator::SaveBinary(NiBSplineCompColorInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineCompColorInterpolator::GetViewerStrings(NiBSplineCompColorInterpolator *this, NiTArray<char *> *pkStrings);
unsigned int __thiscall NiBSplineColorInterpolator::GetDimension(NiBSplineColorInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiBSplineColorInterpolator::GetControlHandle(NiBSplineColorInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiBSplineColorInterpolator::SetControlHandle(NiBSplineColorInterpolator *this, unsigned int kControlHandle, unsigned __int16 usChannel);
void __thiscall NiBSplineColorInterpolator::CopyMembers(NiBSplineColorInterpolator *this, NiBSplineColorInterpolator *pkDest, NiCloningProcess *kCloning);
bool __thiscall NiBSplineColorInterpolator::RegisterStreamables(NiBSplineTransformInterpolator *this, NiStream *kStream);
NiRTTI *__thiscall NiBSplineColorInterpolator::GetRTTI(NiBSplineColorInterpolator *this);
void __thiscall NiBSplineColorInterpolator::NiBSplineColorInterpolator(NiBSplineColorInterpolator *this, NiBSplineData *pkData, unsigned int kColorACPHandle, NiBSplineBasisData *pkBasisData);
void *__thiscall NiBSplinePoint3Interpolator::_vector_deleting_destructor_(NiBSplineTransformInterpolator *this, unsigned int);
bool __thiscall NiBSplineColorInterpolator::Update(NiBSplineColorInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiColorA *kValue);
NiObject *__thiscall NiBSplineColorInterpolator::CreateClone(NiBSplineColorInterpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineColorInterpolator::CreateObject();
void __thiscall NiBSplineColorInterpolator::SaveBinary(NiBSplineColorInterpolator *this, NiStream *kStream);
bool __thiscall NiBSplineColorInterpolator::IsEqual(NiBSplineColorInterpolator *this, NiObject *pkObject);
void __thiscall NiBSplineColorInterpolator::LoadBinary(NiBSplineColorInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineColorInterpolator::GetViewerStrings(NiBSplineColorInterpolator *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiBSplineData::CreateObject();
bool __thiscall NiBSplineData::IsEqual(NiBSplineData *this, NiObject *pkObject);
void __thiscall NiBSplineBasis<float_3>::Compute(NiBSplineBasis<float,3> *this, float fTime, int *iMin, int *iMax);
NiRTTI *__thiscall NiBSplineData::GetRTTI(NiBSplineData *this);
void *__thiscall NiBSplineData::_scalar_deleting_destructor_(NiBSplineData *this, unsigned int);
void __thiscall NiBSplineData::GetValueDegree3(NiBSplineData *this, float fTime, float *afPos, unsigned int uiDimension, NiBSplineBasisData *pkBasisData, unsigned int kControlPointHandle);
void __thiscall NiBSplineData::GetCompactedValueDegree3(NiBSplineData *this, float fTime, float *afPos, unsigned int uiDimension, NiBSplineBasisData *pkBasisData, unsigned int kControlPointHandle, float fOffset, float fHalfRange);
void __thiscall NiBSplineData::LoadBinary(NiBSplineData *this, NiStream *kStream);
void __thiscall NiBSplineData::SaveBinary(NiBSplineData *this, NiStream *kStream);
void __thiscall NiBSplineData::GetViewerStrings(NiBSplineData *this, NiTArray<char *> *pStrings);
long double *__thiscall NiBSplineBasisData::GetDegree3Basis(Wml::Vector3<double> *this);
NiRTTI *__thiscall NiBSplineBasisData::GetRTTI(NiBSplineBasisData *this);
NiObject *__thiscall NiBSplineBasisData::CreateClone(NiBSplineBasisData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSplineBasisData::CreateObject();
bool __thiscall NiBSplineBasisData::IsEqual(NiBSplineBasisData *this, NiObject *pkObject);
void *__thiscall NiBSplineBasisData::_vector_deleting_destructor_(NiBSplineBasisData *this, unsigned int);
void __thiscall NiBSplineBasisData::GetViewerStrings(NiBSplineBasisData *this, NiTArray<char *> *pStrings);
void __thiscall NiBSplineBasisData::LoadBinary(NiBSplineBasisData *this, NiStream *kStream);
void __thiscall NiBSplineBasisData::SaveBinary(NiBSplineBasisData *this, NiStream *kStream);
void __thiscall NiBoolTimelineInterpolator::LoadBinary(NiBoolTimelineInterpolator *this, NiStream *kStream);
bool __thiscall NiBoolTimelineInterpolator::RegisterStreamables(NiBoolTimelineInterpolator *this, NiStream *kStream);
void __thiscall NiBoolTimelineInterpolator::SaveBinary(NiBoolTimelineInterpolator *this, NiStream *kStream);
bool __thiscall NiBoolTimelineInterpolator::IsEqual(NiBoolTimelineInterpolator *this, NiObject *pkObject);
NiFloatKey *__thiscall NiBoolInterpolator::GetKeys(NiFloatInterpolator *this, unsigned int *uiNumKeys, NiAnimationKey::KeyType *eType, char *ucSize);
NiRTTI *__thiscall NiBoolTimelineInterpolator::GetRTTI(NiBoolTimelineInterpolator *this);
bool __thiscall NiBoolTimelineInterpolator::Update(NiBoolTimelineInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, bool *bValue);
void __thiscall NiBoolTimelineInterpolator::NiBoolTimelineInterpolator(NiBoolTimelineInterpolator *this, NiBoolData *pkBoolData);
NiObject *__thiscall NiBoolTimelineInterpolator::CreateClone(NiBoolTimelineInterpolator *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBoolTimelineInterpolator::CreateObject();
void __thiscall NiBoolTimelineInterpolator::GetViewerStrings(NiBoolTimelineInterpolator *this, NiTArray<char *> *pkStrings);
NiAnimationKey::KeyContent __thiscall NiBoolInterpolator::GetKeyContent(NiBoolInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiFloatInterpolator::GetKeyCount(NiFloatInterpolator *this, unsigned __int16 usChannel);
NiAnimationKey *__thiscall NiFloatInterpolator::GetKeyArray(NiFloatInterpolator *this, unsigned __int16 usChannel);
char __thiscall NiBoolInterpolator::GetKeyStride(NiFloatInterpolator *this, unsigned __int16 usChannel);
bool __thiscall NiBoolInterpolator::GetChannelPosed(NiBoolInterpolator *this, unsigned __int16 usChannel);
void __thiscall NiBoolInterpolator::Collapse(NiBoolInterpolator *this);
void __thiscall NiBoolInterpolator::SetPoseValue(NiBoolInterpolator *this, bool bPoseValue);
void __thiscall NiBoolInterpolator::GuaranteeTimeRange(NiBoolInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiBoolInterpolator::IsEqual(NiBoolInterpolator *this, NiObject *pkObject);
void __thiscall NiBoolInterpolator::NiBoolInterpolator(NiBoolInterpolator *this, NiBoolData *pkBoolData);
NiRTTI *__thiscall NiBoolInterpolator::GetRTTI(NiBoolInterpolator *this);
void __thiscall NiBoolInterpolator::NiBoolInterpolator(NiBoolInterpolator *this, bool bPoseValue);
NiInterpolator *__thiscall NiBoolInterpolator::GetSequenceInterpolator(NiBoolInterpolator *this, float fStartTime, float fEndTime);
bool __thiscall NiBoolInterpolator::Update(NiBoolInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, bool *bValue);
void __thiscall NiBoolInterpolator::CopyMembers(NiBoolInterpolator *this, NiBoolInterpolator *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiBoolInterpolator::CreateObject();
NiObject *__thiscall NiBoolInterpolator::CreateClone(NiBoolInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiBoolInterpolator::LoadBinary(NiBoolInterpolator *this, NiStream *kStream);
void __thiscall NiBoolInterpolator::SaveBinary(NiBoolInterpolator *this, NiStream *kStream);
void __thiscall NiBoolInterpolator::GetViewerStrings(NiBoolInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBoolData::GuaranteeKeysAtStartAndEnd(NiBoolData *this, float fStartTime, float fEndTime);
NiRTTI *__thiscall NiBoolData::GetRTTI(NiBoolData *this);
NiObject *__cdecl NiBoolData::CreateObject();
bool __thiscall NiBoolData::IsEqual(NiBoolData *this, NiObject *pkObject);
void __thiscall NiBoolData::ReplaceAnim(NiBoolData *this, NiBoolKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
NiPointer<NiBoolData> *__thiscall NiBoolData::GetSequenceData(NiBoolData *this, NiPointer<NiBoolData> *result, float fStartTime, float fEndTime);
void *__thiscall NiBoolData::_vector_deleting_destructor_(NiBoolData *this, unsigned int);
void __thiscall NiBoolData::LoadBinary(NiBoolData *this, NiStream *kStream);
void __thiscall NiBoolData::SaveBinary(NiBoolData *this, NiStream *kStream);
int __stdcall loc_7FBFFC(int kStream); // weak
int __stdcall loc_7FC03E(int kStream); // weak
void __thiscall NiBoolData::GetViewerStrings(NiBoolData *this, NiTArray<char *> *pStrings);
void __thiscall NiBlendTransformInterpolator::NiBlendTransformInterpolator(NiBlendTransformInterpolator *this, bool bManagerControlled, float fWeightThreshold, char ucArraySize);
void __thiscall NiBlendTransformInterpolator::NiBlendTransformInterpolator(NiBlendTransformInterpolator *this);
NiObject *__cdecl NiBlendTransformInterpolator::CreateObject();
void __thiscall NiBlendTransformInterpolator::SaveBinary(NiBlendTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiBlendTransformInterpolator::IsEqual(NiBlendTransformInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBlendTransformInterpolator::GetRTTI(NiBlendTransformInterpolator *this);
NiObject *__thiscall NiBlendTransformInterpolator::CreateClone(NiBlendTransformInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiBlendTransformInterpolator::CreateCloneInPlace(NiBlendTransformInterpolator *this, NiBlendTransformInterpolator *pkClone, NiCloningProcess *kCloning);
void __thiscall NiBlendTransformInterpolator::LoadBinary(NiBlendTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiBlendTransformInterpolator::StoreSingleValue(NiBlendTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
bool __thiscall NiBlendTransformInterpolator::BlendValues(NiBlendTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
bool __thiscall NiBlendTransformInterpolator::Update(NiBlendTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
void __thiscall NiBlendTransformInterpolator::GetViewerStrings(NiBlendTransformInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiBlendQuaternionInterpolator::InterpolatorIsCorrectType(NiBlendQuaternionInterpolator *this, NiInterpolator *pkInterpolator);
NiObject *__cdecl NiBlendQuaternionInterpolator::CreateObject();
void __thiscall NiBlendQuaternionInterpolator::LoadBinary(NiBlendQuaternionInterpolator *this, NiStream *kStream);
void __thiscall NiBlendQuaternionInterpolator::SaveBinary(NiBlendQuaternionInterpolator *this, NiStream *kStream);
NiRTTI *__thiscall NiBlendQuaternionInterpolator::GetRTTI(NiBlendQuaternionInterpolator *this);
NiObject *__thiscall NiBlendQuaternionInterpolator::CreateClone(NiBlendQuaternionInterpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiBlendQuaternionInterpolator::IsEqual(NiBlendQuaternionInterpolator *this, NiObject *pkObject);
bool __thiscall NiBlendQuaternionInterpolator::StoreSingleValue(NiBlendQuaternionInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuaternion *kValue);
bool __thiscall NiBlendQuaternionInterpolator::BlendValues(NiBlendQuaternionInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuaternion *kValue);
bool __thiscall NiBlendQuaternionInterpolator::Update(NiBlendQuaternionInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuaternion *kValue);
void __thiscall NiBlendQuaternionInterpolator::GetViewerStrings(NiBlendQuaternionInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBlendPoint3Interpolator::NiBlendPoint3Interpolator(NiBlendPoint3Interpolator *this, bool bManagerControlled, float fWeightThreshold, char ucArraySize);
bool __thiscall NiBlendPoint3Interpolator::InterpolatorIsCorrectType(NiBlendPoint3Interpolator *this, NiInterpolator *pkInterpolator);
NiObject *__cdecl NiBlendPoint3Interpolator::CreateObject();
bool __thiscall NiBlendAccumTransformInterpolator::RegisterStreamables(NiBlendTransformInterpolator *this, NiStream *kStream);
void __thiscall NiBlendPoint3Interpolator::SaveBinary(NiBlendPoint3Interpolator *this, NiStream *kStream);
NiRTTI *__thiscall NiBlendPoint3Interpolator::GetRTTI(NiBlendPoint3Interpolator *this);
NiObject *__thiscall NiBlendPoint3Interpolator::CreateClone(NiBlendPoint3Interpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiBlendPoint3Interpolator::StoreSingleValue(NiBlendPoint3Interpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiPoint3 *kValue);
bool __thiscall NiBlendPoint3Interpolator::BlendValues(NiBlendPoint3Interpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiPoint3 *kValue);
bool __thiscall NiBlendPoint3Interpolator::Update(NiBlendPoint3Interpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiPoint3 *kValue);
void __thiscall NiBlendPoint3Interpolator::LoadBinary(NiBlendPoint3Interpolator *this, NiStream *kStream);
bool __thiscall NiBlendPoint3Interpolator::IsEqual(NiBlendPoint3Interpolator *this, NiObject *pkObject);
void __thiscall NiBlendPoint3Interpolator::GetViewerStrings(NiBlendPoint3Interpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBlendFloatInterpolator::NiBlendFloatInterpolator(NiBlendFloatInterpolator *this, bool bManagerControlled, float fWeightThreshold, char ucArraySize);
bool __thiscall NiBlendFloatInterpolator::InterpolatorIsCorrectType(NiBlendFloatInterpolator *this, NiInterpolator *pkInterpolator);
NiObject *__cdecl NiBlendFloatInterpolator::CreateObject();
bool __thiscall NiBlendFloatInterpolator::IsEqual(NiBlendFloatInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBlendFloatInterpolator::GetRTTI(NiBlendFloatInterpolator *this);
void *__thiscall NiBlendBoolInterpolator::_vector_deleting_destructor_(NiBlendQuaternionInterpolator *this, unsigned int);
NiObject *__thiscall NiBlendFloatInterpolator::CreateClone(NiBlendFloatInterpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiBlendFloatInterpolator::StoreSingleValue(NiBlendFloatInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, float *fValue);
bool __thiscall NiBlendFloatInterpolator::BlendValues(NiBlendFloatInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, float *fValue);
bool __thiscall NiBlendFloatInterpolator::Update(NiBlendFloatInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, float *fValue);
void __thiscall NiBlendFloatInterpolator::LoadBinary(NiBlendFloatInterpolator *this, NiStream *kStream);
void __thiscall NiBlendFloatInterpolator::SaveBinary(NiBlendFloatInterpolator *this, NiStream *kStream);
void __thiscall NiBlendFloatInterpolator::GetViewerStrings(NiBlendFloatInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBlendColorInterpolator::NiBlendColorInterpolator(NiBlendColorInterpolator *this, bool bManagerControlled, float fWeightThreshold, char ucArraySize);
bool __thiscall NiBlendColorInterpolator::InterpolatorIsCorrectType(NiBlendColorInterpolator *this, NiInterpolator *pkInterpolator);
NiObject *__cdecl NiBlendColorInterpolator::CreateObject();
void __thiscall NiBlendColorInterpolator::SaveBinary(NiBlendColorInterpolator *this, NiStream *kStream);
NiRTTI *__thiscall NiBlendColorInterpolator::GetRTTI(NiBlendColorInterpolator *this);
NiObject *__thiscall NiBlendColorInterpolator::CreateClone(NiBlendColorInterpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiBlendColorInterpolator::StoreSingleValue(NiBlendColorInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiColorA *kValue);
bool __thiscall NiBlendColorInterpolator::BlendValues(NiBlendColorInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiColorA *kValue);
bool __thiscall NiBlendColorInterpolator::Update(NiBlendColorInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiColorA *kValue);
void __thiscall NiBlendColorInterpolator::LoadBinary(NiBlendColorInterpolator *this, NiStream *kStream);
bool __thiscall NiBlendColorInterpolator::IsEqual(NiBlendColorInterpolator *this, NiObject *pkObject);
void __thiscall NiBlendColorInterpolator::GetViewerStrings(NiBlendColorInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBlendBoolInterpolator::NiBlendBoolInterpolator(NiBlendBoolInterpolator *this, bool bManagerControlled, float fWeightThreshold, char ucArraySize);
bool __thiscall NiBlendBoolInterpolator::InterpolatorIsCorrectType(NiBlendBoolInterpolator *this, NiInterpolator *pkInterpolator);
NiObject *__cdecl NiBlendBoolInterpolator::CreateObject();
bool __thiscall NiBlendBoolInterpolator::IsEqual(NiBlendBoolInterpolator *this, NiObject *pkObject);
NiRTTI *__thiscall NiBlendBoolInterpolator::GetRTTI(NiBlendBoolInterpolator *this);
NiObject *__thiscall NiBlendBoolInterpolator::CreateClone(NiBlendBoolInterpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiBlendBoolInterpolator::StoreSingleValue(NiBlendBoolInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, bool *bValue);
bool __thiscall NiBlendBoolInterpolator::BlendValues(NiBlendBoolInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, bool *bValue);
bool __thiscall NiBlendBoolInterpolator::Update(NiBlendBoolInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, bool *bValue);
void __thiscall NiBlendBoolInterpolator::LoadBinary(NiBlendBoolInterpolator *this, NiStream *kStream);
void __thiscall NiBlendBoolInterpolator::SaveBinary(NiBlendBoolInterpolator *this, NiStream *kStream);
void __thiscall NiBlendBoolInterpolator::GetViewerStrings(NiBlendBoolInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiBlendAccumTransformInterpolator::_NiBlendAccumTransformInterpolator(NiBlendAccumTransformInterpolator *this);
bool __thiscall NiBlendAccumTransformInterpolator::InterpolatorIsCorrectType(NiBlendTransformInterpolator *this, NiInterpolator *pkInterpolator);
void __thiscall NiBlendAccumTransformInterpolator::NiBlendAccumTransformInterpolator(NiBlendAccumTransformInterpolator *this);
char __thiscall NiBlendAccumTransformInterpolator::AddInterpInfo(NiBlendAccumTransformInterpolator *this, NiInterpolator *pkInterpolator, float fWeight, char cPriority, float fEaseSpinner);
bool __thiscall NiBlendAccumTransformInterpolator::GetValue(NiBlendAccumTransformInterpolator *this, NiQuatTransform *kValue);
void __thiscall NiBlendAccumTransformInterpolator::CalculateSingleValue(NiBlendAccumTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget);
NiObject *__cdecl NiBlendAccumTransformInterpolator::CreateObject();
void __thiscall NiBlendAccumTransformInterpolator::SaveBinary(NiBlendAccumTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiBlendAccumTransformInterpolator::IsEqual(NiBlendAccumTransformInterpolator *this, NiObject *pkObject);
NiPointer<NiInterpolator> *__thiscall NiBlendAccumTransformInterpolator::RemoveInterpInfo(NiBlendAccumTransformInterpolator *this, NiPointer<NiInterpolator> *result, char ucIndex);
bool __thiscall NiBlendAccumTransformInterpolator::StoreSingleValue(NiBlendAccumTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
bool __thiscall NiBlendAccumTransformInterpolator::BlendValues(NiBlendAccumTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
bool __thiscall NiBlendAccumTransformInterpolator::ReallocateArrays(NiBlendAccumTransformInterpolator *this);
void __thiscall NiBlendAccumTransformInterpolator::CalculateValue(NiBlendAccumTransformInterpolator *this, char ucIndex, float fTime, NiObjectNET *pkInterpTarget);
void __thiscall NiBlendAccumTransformInterpolator::CopyMembers(NiBlendAccumTransformInterpolator *this, NiBlendAccumTransformInterpolator *pkDest, NiCloningProcess *kCloning);
void __thiscall NiBlendAccumTransformInterpolator::LoadBinary(NiBlendAccumTransformInterpolator *this, NiStream *kStream);
bool __thiscall NiBlendAccumTransformInterpolator::Update(NiBlendAccumTransformInterpolator *this, float fTime, NiObjectNET *pkInterpTarget, NiQuatTransform *kValue);
NiObject *__thiscall NiBlendAccumTransformInterpolator::CreateClone(NiBlendAccumTransformInterpolator *this, NiCloningProcess *kCloning);
void __thiscall NiBlendAccumTransformInterpolator::GetViewerStrings(NiBlendAccumTransformInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiInterpController::CopyMembers(NiInterpController *this, NiInterpController *pkDest, NiCloningProcess *kCloning);
bool __thiscall NiKeyframeManager::IsEqual(NiPSysUpdateCtlr *this, NiObject *pkObject);
void __thiscall NiInterpController::NiInterpController(NiInterpController *this);
NiRTTI *__thiscall NiInterpController::GetRTTI(NiInterpController *this);
void __thiscall NiInterpController::ResetTimeExtrema(NiInterpController *this);
void __thiscall NiInterpController::LoadBinary(NiInterpController *this, NiStream *kStream);
void __thiscall NiInterpController::GetViewerStrings(NiInterpController *this, NiTArray<char *> *pkStrings);
void __thiscall NiBlendInterpolator::NiBlendInterpolator(NiBlendInterpolator *this);
char __thiscall NiBlendInterpolator::GetHighestWeightedIndex(NiBlendInterpolator *this);
NiRTTI *__thiscall NiBlendInterpolator::GetRTTI(NiBlendInterpolator *this);
char __thiscall NiBlendInterpolator::AddInterpInfo(NiBlendInterpolator *this, NiInterpolator *pkInterpolator, float fWeight, char cPriority, float fEaseSpinner);
void __thiscall NiBlendInterpolator::ComputeNormalizedWeightsFor2(NiBlendInterpolator *this);
void __thiscall NiBlendInterpolator::Collapse(NiBlendInterpolator *this);
void __thiscall NiBlendInterpolator::GuaranteeTimeRange(NiBlendInterpolator *this, float fStartTime, float fEndTime);
void __thiscall NiBlendInterpolator::ProcessClone(NiBlendInterpolator *this, NiCloningProcess *kCloning);
bool __thiscall NiBlendInterpolator::InterpArrayItem::IsEqual(NiBlendInterpolator::InterpArrayItem *this, NiBlendInterpolator::InterpArrayItem *kDest);
bool __thiscall NiBlendInterpolator::RegisterStreamables(NiBlendInterpolator *this, NiStream *kStream);
bool __thiscall NiBlendInterpolator::IsEqual(NiBlendInterpolator *this, NiObject *pkObject);
void __thiscall NiBlendInterpolator::_NiBlendInterpolator(NiBlendInterpolator *this);
NiPointer<NiInterpolator> *__thiscall NiBlendInterpolator::RemoveInterpInfo(NiBlendInterpolator *this, NiPointer<NiInterpolator> *result, char ucIndex);
void __thiscall NiBlendInterpolator::ComputeNormalizedWeights(NiBlendInterpolator *this);
int loc_7FFFFF(); // weak
int loc_800001(); // weak
void __thiscall NiBlendInterpolator::NiBlendInterpolator(NiBlendInterpolator *this, bool bManagerControlled, float fWeightThreshold, char ucArraySize);
bool __thiscall NiBlendInterpolator::ReallocateArrays(NiBlendInterpolator *this);
void __thiscall NiBlendInterpolator::CopyMembers(NiBlendInterpolator *this, NiBlendInterpolator *pkDest, NiCloningProcess *kCloning);
void __thiscall NiBlendInterpolator::InterpArrayItem::LoadBinary(NiBlendInterpolator::InterpArrayItem *this, NiStream *kStream);
void __thiscall NiBlendInterpolator::InterpArrayItem::SaveBinary(NiBlendInterpolator::InterpArrayItem *this, NiStream *kStream);
void __thiscall NiBlendInterpolator::LoadBinary(NiBlendInterpolator *this, NiStream *kStream);
void __thiscall NiBlendInterpolator::SaveBinary(NiBlendInterpolator *this, NiStream *kStream);
void __thiscall NiBlendInterpolator::GetViewerStrings(NiBlendInterpolator *this, NiTArray<char *> *pkStrings);
bool __thiscall NiSingleInterpController::TargetIsRequiredType(NiSingleInterpController *this);
void __thiscall NiSingleInterpController::NiSingleInterpController(NiSingleInterpController *this);
NiRTTI *__thiscall NiSingleInterpController::GetRTTI(NiSingleInterpController *this);
NiInterpolator *__thiscall NiSingleInterpController::GetInterpolator(NiSingleInterpController *this, unsigned __int16 usIndex);
void __thiscall NiSingleInterpController::SetInterpolator(NiSingleInterpController *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
void __thiscall NiSingleInterpController::GuaranteeTimeRange(NiSingleInterpController *this, float fStartTime, float fEndTime);
void __thiscall NiSingleInterpController::ResetTimeExtrema(NiSingleInterpController *this);
void __thiscall NiSingleInterpController::CopyMembers(NiSingleInterpController *this, NiSingleInterpController *pkDest, NiCloningProcess *kCloning);
void __thiscall NiSingleInterpController::ProcessClone(NiSingleInterpController *this, NiCloningProcess *kCloning);
void __thiscall NiSingleInterpController::LoadBinary(NiSingleInterpController *this, NiStream *kStream);
bool __thiscall NiSingleInterpController::RegisterStreamables(NiSingleInterpController *this, NiStream *kStream);
void __thiscall NiSingleInterpController::SaveBinary(NiSingleInterpController *this, NiStream *kStream);
bool __thiscall NiSingleInterpController::IsEqual(NiSingleInterpController *this, NiObject *pkObject);
void *__thiscall NiSingleInterpController::_vector_deleting_destructor_(NiVisController *this, unsigned int);
void __thiscall NiSingleInterpController::GetViewerStrings(NiSingleInterpController *this, NiTArray<char *> *pkStrings);
void __thiscall NiQuatTransform::Invert(NiQuatTransform *this, NiQuatTransform *kDest);
void __thiscall NiQuatTransform::HierInvert(NiQuatTransform *this, NiQuatTransform *kDest);
NiQuatTransform *__thiscall NiQuatTransform::HierApply(NiQuatTransform *this, NiQuatTransform *result, NiQuatTransform *kTransform);
NiQuatTransform *__thiscall NiQuatTransform::operator_(NiQuatTransform *this, NiQuatTransform *result, NiQuatTransform *kTransform);
void __thiscall NiQuatTransform::SaveBinary(NiQuatTransform *this, NiStream *kStream);
void __thiscall NiQuatTransform::LoadBinary(NiQuatTransform *this, NiStream *kStream);
void __thiscall NiQuatTransform::GetViewerStrings(NiQuatTransform *this, NiTArray<char *> *pkStrings);
void __thiscall NiInterpolator::NiInterpolator(NiInterpolator *this);
void __thiscall NiInterpolator::_NiInterpolator(NiInterpolator *this);
bool __thiscall NsFNC_125::MakeNode(NiD3DShaderProgram *this, NiD3DShaderConstantMapEntry *__formal, const void *__formal, unsigned int __formal);
void __thiscall NiInterpolator::GetActiveTimeRange(NiInterpolator *this, float *fBeginKeyTime, float *fEndKeyTime);
NiInterpolator *__thiscall NiInterpolator::GetSequenceInterpolator(NiInterpolator *this, float fStartTime, float fEndTime);
NiRTTI *__thiscall NiInterpolator::GetRTTI(NiInterpolator *this);
void *__thiscall NiInterpolator::_vector_deleting_destructor_(NiInterpolator *this, unsigned int);
void __thiscall NiInterpolator::GetViewerStrings(NiInterpolator *this, NiTArray<char *> *pkStrings);
NiInterpolator *__thiscall NiFloatInterpController::CreatePoseInterpolator(NiFloatInterpController *this, unsigned __int16 usIndex);
void __thiscall NiFloatInterpController::NiFloatInterpController(NiFloatInterpController *this);
NiRTTI *__thiscall NiFloatInterpController::GetRTTI(NiFloatInterpController *this);
void __thiscall NiFloatInterpController::SynchronizePoseInterpolator(NiFloatInterpController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiFloatInterpController::GetViewerStrings(NiFloatInterpController *this, NiTArray<char *> *pkStrings);
bool __thiscall NiFloatsExtraDataPoint3Controller::InterpolatorIsCorrectType(NiPoint3InterpController *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
bool __thiscall NiTransformController::RegisterStreamables(NiPSysModifierCtlr *this, NiStream *kStream);
bool __thiscall NiBoolInterpController::IsEqual(NiPoint3InterpController *this, NiObject *pkObject);
NiInterpolator *__thiscall NiPoint3InterpController::CreatePoseInterpolator(NiPoint3InterpController *this, unsigned __int16 usIndex);
void __thiscall NiPoint3InterpController::LoadBinary(NiPoint3InterpController *this, NiStream *kStream);
void __thiscall NiPoint3InterpController::NiPoint3InterpController(NiPoint3InterpController *this);
NiRTTI *__thiscall NiPoint3InterpController::GetRTTI(NiPoint3InterpController *this);
void __thiscall NiPoint3InterpController::SynchronizePoseInterpolator(NiPoint3InterpController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiPoint3InterpController::GetViewerStrings(NiPoint3InterpController *this, NiTArray<char *> *pkStrings);
NiInterpolator *__thiscall NiBoolInterpController::CreatePoseInterpolator(NiBoolInterpController *this, unsigned __int16 usIndex);
void __thiscall NiPoint3InterpController::CopyMembers(NiPoint3InterpController *this, NiPoint3InterpController *pkDest, NiCloningProcess *kCloning);
void __thiscall NiPoint3InterpController::LinkObject(NiPSysModifierCtlr *this, NiStream *kStream);
void __thiscall NiBoolInterpController::NiBoolInterpController(NiBoolInterpController *this);
NiRTTI *__thiscall NiBoolInterpController::GetRTTI(NiBoolInterpController *this);
void __thiscall NiBoolInterpController::SynchronizePoseInterpolator(NiBoolInterpController *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiBoolInterpController::GetViewerStrings(NiBoolInterpController *this, NiTArray<char *> *pkStrings);
void __thiscall NiKeyBasedInterpolator::NiKeyBasedInterpolator(NiKeyBasedInterpolator *this);
void __thiscall NiKeyBasedInterpolator::_NiKeyBasedInterpolator(NiKeyBasedInterpolator *this);
bool __thiscall NiKeyBasedInterpolator::IsEqual(NiKeyBasedInterpolator *this, NiObject *pkOther);
NiRTTI *__thiscall NiKeyBasedInterpolator::GetRTTI(NiKeyBasedInterpolator *this);
void *__thiscall NiKeyBasedInterpolator::_vector_deleting_destructor_(NiKeyBasedInterpolator *this, unsigned int);
NiAnimationKey *__thiscall NiKeyBasedInterpolator::GetKeyAt(NiKeyBasedInterpolator *this, unsigned int uiWhichKey, unsigned __int16 usChannel);
void __thiscall NiKeyBasedInterpolator::GetActiveTimeRange(NiKeyBasedInterpolator *this, float *fBeginKeyTime, float *fEndKeyTime);
void __thiscall NiKeyBasedInterpolator::GetViewerStrings(NiKeyBasedInterpolator *this, NiTArray<char *> *pkStrings);
void __thiscall NiFloatController::LoadBinary(NiFloatController *this, NiStream *stream);
void __thiscall NiFloatController::_NiFloatController(NiFloatController *this);
NiFloatKey *__thiscall NiFloatController::GetAnim(NiFloatController *this, unsigned int *uiNumKeys, NiAnimationKey::KeyType *eType, char *ucSize);
void __thiscall NiFloatController::ProcessClone(NiFloatController *this, NiCloningProcess *kCloning);
void __thiscall NiFloatController::LinkObject(NiFloatController *this, NiStream *stream);
bool __thiscall NiFloatController::RegisterStreamables(NiFloatController *this, NiStream *stream);
void __thiscall NiFloatController::SaveBinary(NiFloatController *this, NiStream *stream);
bool __thiscall NiFloatController::IsEqual(NiFloatController *this, NiObject *pObject);
void __thiscall NiFloatController::CopyMembers(NiFloatController *this, NiFloatController *pDest, NiCloningProcess *kCloning);
void __thiscall NiFloatController::GetViewerStrings(NiFloatController *this, NiTArray<char *> *pStrings);
bool __thiscall NiExtraDataController::RegisterStreamables(NiExtraDataController *this, NiStream *kStream);
void __thiscall NiPSysModifierCtlr::SaveBinary(NiPSysModifierCtlr *this, NiStream *kStream);
void __thiscall NiExtraDataController::ProcessClone(NiExtraDataController *this, NiCloningProcess *kCloning);
bool __thiscall NiExtraDataController::IsEqual(NiExtraDataController *this, NiObject *pkObject);
void __thiscall NiExtraDataController::GetExtraDataPointerFromName(NiExtraDataController *this);
NiRTTI *__thiscall NiExtraDataController::GetRTTI(NiExtraDataController *this);
void __thiscall NiExtraDataController::NiExtraDataController(NiExtraDataController *this);
void __thiscall NiExtraDataController::_NiExtraDataController(NiExtraDataController *this);
void __thiscall NiExtraDataController::SetTarget(NiExtraDataController *this, NiObjectNET *pkTarget);
bool __thiscall NiExtraDataController::InterpTargetIsCorrectType(NiExtraDataController *this, NiObjectNET *pkTarget);
void __thiscall NiExtraDataController::PostLinkObject(NiExtraDataController *this, NiStream *kStream);
void __thiscall NiExtraDataController::GetViewerStrings(NiExtraDataController *this, NiTArray<char *> *pkStrings);
void __thiscall NiBSplineInterpolator::GetActiveTimeRange(NiBSplineInterpolator *this, float *fBeginTime, float *fEndTime);
unsigned int __thiscall NiBSplineInterpolator::GetAllocatedSize(NiBSplineInterpolator *this, unsigned __int16 usChannel);
unsigned int __thiscall NiBSplineInterpolator::GetControlPointCount(NiBSplineInterpolator *this, unsigned __int16 usChannel);
bool __thiscall NiBSplineInterpolator::RegisterStreamables(NiBSplineInterpolator *this, NiStream *kStream);
bool __thiscall NiBSplineInterpolator::IsEqual(NiBSplineInterpolator *this, NiObject *pkOther);
void __thiscall NiBSplineInterpolator::NiBSplineInterpolator(NiBSplineInterpolator *this, NiBSplineData *pkData, NiBSplineBasisData *pkBasisData);
NiRTTI *__thiscall NiBSplineInterpolator::GetRTTI(NiBSplineInterpolator *this);
void __thiscall NiBSplineInterpolator::_NiBSplineInterpolator(NiBSplineInterpolator *this);
void __thiscall NiBSplineInterpolator::CopyMembers(NiBSplineInterpolator *this, NiBSplineInterpolator *pkDest, NiCloningProcess *kCloning);
void __thiscall NiBSplineInterpolator::LoadBinary(NiBSplineInterpolator *this, NiStream *kStream);
void __thiscall NiBSplineInterpolator::SaveBinary(NiBSplineInterpolator *this, NiStream *kStream);
void *__thiscall NiBSplineInterpolator::_vector_deleting_destructor_(NiBSplineInterpolator *this, unsigned int);
void __thiscall NiBSplineInterpolator::GetViewerStrings(NiBSplineInterpolator *this, NiTArray<char *> *pkStrings);
void *__thiscall NiTArray<NiCollisionGroup::Record__>::_scalar_deleting_destructor_(NiTArray<NiCollisionGroup::Record *> *this, unsigned int);
void __thiscall NiCollisionGroup::NiCollisionGroup(NiCollisionGroup *this);
void __thiscall NiCollisionGroup::_NiCollisionGroup(NiCollisionGroup *this);
void __thiscall NiCollisionGroup::Remove(NiCollisionGroup *this, NiAVObject *pkObject);
void __thiscall NiCollisionGroup::RemoveCollider(NiCollisionGroup *this, NiAVObject *pkObject);
void __thiscall NiCollisionGroup::RemoveCollidee(NiCollisionGroup *this, NiAVObject *pkObject);
void __thiscall NiCollisionGroup::RemoveAll(NiCollisionGroup *this);
void __thiscall NiCollisionGroup::FindCollisions(NiCollisionGroup *this, float fDeltaTime);
void __thiscall NiCollisionGroup::Add(NiCollisionGroup *this, NiAVObject *pkObject, NiTArray<NiCollisionGroup::Record *> *kBin, bool bCreateCollisionData, int iMaxDepth, int iBinSize);
void __thiscall NiCollisionGroup::AddCollider(NiCollisionGroup *this, NiAVObject *pkObject, bool bCreateCollisionData, int iMaxDepth, int iBinSize);
void __thiscall NiCollisionGroup::AddCollidee(NiCollisionGroup *this, NiAVObject *pkObject, bool bCreateCollisionData, int iMaxDepth, int iBinSize);
void __cdecl NiCollisionSDM::Init(); // idb
void __cdecl NiCollisionSDM::Shutdown(); // idb
void __thiscall NiCollisionSDM::NiCollisionSDM(NiCollisionSDM *this);
bool __thiscall NiCollisionData::RegisterStreamables(NiCollisionData *this, NiStream *kStream);
void __thiscall NiCollisionData::NiCollisionData(NiCollisionData *this, NiAVObject *pkSceneObject);
NiRTTI *__thiscall NiCollisionData::GetRTTI(NiCollisionData *this);
void __thiscall NiCollisionData::NiCollisionData(NiCollisionData *this);
void __thiscall NiCollisionData::_NiCollisionData(NiCollisionData *this);
int __thiscall NiCollisionData::FindOBBCollisions(NiCollisionData *this, float fDeltaTime, NiCollisionData *pkTestData, NiAVObject *pThisRoot, NiAVObject *pOtherRoot, NiAVObject *pThisObj, NiAVObject *pOtherObj, int iMaxDepth, int iTestMaxDepth, bool *bCollision);
void __thiscall NiCollisionData::SetModelSpaceABV(NiCollisionData *this, NiBoundingVolume *pkBV);
void __thiscall NiCollisionData::Initialize(NiCollisionData *this, void *pkData);
char *__thiscall NiCollisionData::GetViewerString(NiCollisionData *this, const char *pcPrefix, NiCollisionData::CollisionMode eMode);
char *__thiscall NiCollisionData::GetViewerString(NiCollisionData *this, const char *pcPrefix, NiCollisionData::PropagationMode eMode);
NiObject *__cdecl NiCollisionData::CreateObject();
void *__thiscall NiCollisionData::_vector_deleting_destructor_(NiCollisionData *this, unsigned int);
NiNode *__thiscall NiCollisionData::FindAncestorWithCollisionData(NiCollisionData *this, NiAVObject *pkObj);
void __thiscall NiCollisionData::UpdateWorldData(NiCollisionData *this);
int __thiscall NiCollisionData::FindCollisionProcessing(NiCollisionData *this, NiCollisionGroup::Intersect *kIntr, NiCollisionData::PropagationMode ePropagationMode1, NiCollisionData::PropagationMode ePropagationMode2);
void __thiscall NiCollisionData::CreateWorldVertices(NiCollisionData *this);
void __thiscall NiCollisionData::UpdateWorldVertices(NiCollisionData *this);
bool __thiscall NiCollisionData::GetWorldTriangle(NiCollisionData *this, unsigned __int16 usTriangle, NiPoint3 **pkP0, NiPoint3 **pkP1, NiPoint3 **pkP2);
NiCollisionData::CollisionTest __cdecl NiCollisionData::GetCollisionTestType(NiAVObject *pkObj1, NiAVObject *pkObj2);
bool __thiscall NiCollisionData::IsEqual(NiCollisionData *this, NiObject *pkObject);
void __cdecl NiCollisionData::SetPrecacheAttributes(NiAVObject *pkObj, NiCollisionData::CollisionMode eMode);
void __thiscall NiCollisionData::SetSceneGraphObject(NiCollisionData *this, NiAVObject *pkSceneObject);
void __thiscall NiCollisionData::CreateOBB(NiCollisionData *this, int iBinSize);
void __thiscall NiCollisionData::Convert(NiCollisionData *this, unsigned int uiVersion, void *pkData);
void __thiscall NiCollisionData::GetViewerStrings(NiCollisionData *this, NiTArray<char *> *pkStrings);
void __thiscall NiCollisionData::AddViewerStrings(NiCollisionData *this, NiTArray<char *> *pkStrings);
void __thiscall NiCollisionData::LoadBinary(NiCollisionData *this, NiStream *kStream);
void __thiscall NiCollisionData::LinkObject(NiCollisionData *this, NiStream *kStream);
void __thiscall NiCollisionData::SaveBinary(NiCollisionData *this, NiStream *kStream);
NiObject *__thiscall NiCollisionData::CreateClone(NiCollisionData *this, NiCloningProcess *kCloning);
bool __thiscall NiSphereBV::operator__(NiSphereBV *this, NiBoundingVolume *kABV);
void __thiscall NiSphereBV::LoadBinary(NiSphereBV *this, NiStream *kStream);
void __thiscall NiSphereBV::SaveBinary(NiSphereBV *this, NiStream *kStream);
void *__thiscall NiCapsuleBV::_scalar_deleting_destructor_(NiSphereBV *this, unsigned int);
void __thiscall NiSphereBV::NiSphereBV(NiSphereBV *this, const float fRadius, NiPoint3 *kCenter);
void __thiscall NiSphereBV::Copy(NiSphereBV *this, NiBoundingVolume *kABV);
void __thiscall NiSphereBV::UpdateWorldData(NiSphereBV *this, NiBoundingVolume *kModelABV, NiTransform *kWorld);
bool __cdecl NiSphereBV::SphereSphereTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiSphereBV::SphereSphereFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
NiBoundingVolume *__cdecl NiSphereBV::CreateFromStream(NiStream *kStream);
NiBoundingVolume *__thiscall NiSphereBV::Create(NiSphereBV *this);
bool __cdecl NiSphereBV::SphereTriTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1);
bool __cdecl NiSphereBV::SphereTriFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
NiBoundingVolume *__thiscall NiSphereBV::Clone(NiSphereBV *this);
NiBoundingVolume *__cdecl NiSphereBV::ConvertLozengeToSphereBoundingVolume(NiStream *kStream);
void __thiscall NiSphereBV::AddViewerStrings(NiSphereBV *this, const char *pcPrefix, NiTArray<char *> *pkStrings);
bool __cdecl NiCollisionTraversals::ShouldPropagationOccur(NiCollisionData::PropagationMode ePropagation, bool bCollisionSuccess);
int __cdecl NiCollisionTraversals::Find_TRIvsABV(float fDeltaTime, NiAVObject *pkObj1, NiAVObject *pkObj2, bool bCalcNormals, NiCollisionGroup::Intersect *kIntr, bool *bCollision);
void __thiscall NiPick::Record::Record(NiPick::Record *this, NiAVObject *pObject);
void __cdecl NiCollisionTraversals::CreateCollisionData(NiAVObject *pkRoot, NiCollisionData::CollisionMode eCollision);
int __cdecl NiCollisionTraversals::BoundsTestCheck(float fDeltaTime, NiAVObject *pkObj1, NiAVObject *pkObj2, NiCollisionData::CollisionTest eCollisionTest);
int __cdecl byte_806098(float fDeltaTime, int pkObj1, int pkObj2, int eCollisionTest); // weak
int __cdecl NiCollisionTraversals::FindCollisionDataAndCollisions(float fDeltaTime, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1);
int __cdecl NiCollisionTraversals::FindCollisionsForRecord0(NiNode *pkNode, float fDeltaTime, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1);
int __cdecl NiCollisionTraversals::FindCollisionsForRecord1(NiNode *pkNode, float fDeltaTime, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1);
int __cdecl NiCollisionTraversals::PropagateCollisions(float fDeltaTime, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1, bool bCollisionSuccess);
int __cdecl NiCollisionTraversals::Find_OBBvsOBB(float fDeltaTime, NiAVObject *pkObj1, NiAVObject *pkObj2, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1, bool *bCollision);
int __cdecl NiCollisionTraversals::Find_OBBvsABV(float fDeltaTime, NiAVObject *pkObj1, NiAVObject *pkObj2, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1, bool bNormals, NiCollisionGroup::Intersect *kIntr, bool *bCollision);
int __cdecl NiCollisionTraversals::Find_TRIvsTRI(float fDeltaTime, NiAVObject *pkObj1, NiAVObject *pkObj2, bool bNormals, NiCollisionGroup::Intersect *kIntr, bool *bCollision);
int __cdecl NiCollisionTraversals::Find_NIBOUNDvsNIBOUND(float fDeltaTime, NiAVObject *pkObj1, NiAVObject *pkObj2, bool bCalcNormals, NiCollisionGroup::Intersect *kIntr, bool *bCollision);
int __cdecl NiCollisionTraversals::HandleCollisions(float fDeltaTime, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1, NiCollisionGroup::Intersect *kIntr, bool *bCollision);
int __cdecl NiCollisionTraversals::FindCollisions(float fDeltaTime, NiCollisionGroup::Record *kRecord0, NiCollisionGroup::Record *kRecord1);
NiBoundingVolume *__cdecl NiCollisionConvert::ConvertToSphereBV_Fast(float fRadius, NiPoint3 *kCenter);
NiBoundingVolume *__cdecl NiCollisionConvert::ConvertToSphereBV_Safe(float fRadius, NiPoint3 *kCenter);
NiBoundingVolume *__cdecl NiCollisionConvert::ConvertToBoxBV(unsigned __int16 usQuantity, NiPoint3 *pkVertex);
bool __cdecl NiBoundingVolume::TestIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kVel0, NiBoundingVolume *kBV1, NiPoint3 *kVel1);
bool __cdecl NiBoundingVolume::FindIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kVel0, NiBoundingVolume *kBV1, NiPoint3 *kVel1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiBoundingVolume::TestTriIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kVel0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kVel1);
bool __cdecl NiBoundingVolume::FindTriIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kVel0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kVel1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
NiBoundingVolume *__cdecl NiBoundingVolume::ConvertToBoxBV(unsigned __int16 usQuantity, NiPoint3 *pkVertex);
NiBoundingVolume *__cdecl NiBoundingVolume::ConvertToSphereBV_Fast(NiBound *kBound);
NiBoundingVolume *__cdecl NiBoundingVolume::ConvertToSphereBV_Safe(NiBound *kBound);
NiBoundingVolume *__cdecl NiBoundingVolume::CreateFromStream(NiStream *kStream);
void __thiscall NiBoundingVolume::SaveBinary(NiBoundingVolume *this, NiStream *kStream);
void __thiscall NiHalfSpaceBV::LoadBinary(NiHalfSpaceBV *this, NiStream *kStream);
void __thiscall NiHalfSpaceBV::SaveBinary(NiHalfSpaceBV *this, NiStream *kStream);
void __thiscall NiHalfSpaceBV::Copy(NiHalfSpaceBV *this, NiBoundingVolume *kABV);
bool __thiscall NiHalfSpaceBV::operator__(NiHalfSpaceBV *this, NiBoundingVolume *kABV);
void __thiscall NiHalfSpaceBV::UpdateWorldData(NiHalfSpaceBV *this, NiBoundingVolume *kModelABV, NiTransform *kWorld);
bool __cdecl NiHalfSpaceBV::HalfSpaceSphereTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiHalfSpaceBV::HalfSpaceBoxTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiHalfSpaceBV::HalfSpaceCapsuleTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiHalfSpaceBV::HalfSpaceHalfSpaceTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiHalfSpaceBV::HalfSpaceTriTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1);
bool __cdecl NiHalfSpaceBV::HalfSpaceSphereFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiHalfSpaceBV::HalfSpaceBoxFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiHalfSpaceBV::HalfSpaceCapsuleFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
int __cdecl loc_808080(float fTime, float fSignedDistance1, int kV0, float fSignedDistance0, int kV1, int fIntrTime, int kIntrPt, int bCalcNormals, int kNormal0, int kNormal1); // weak
bool __cdecl NiHalfSpaceBV::HalfSpaceHalfSpaceFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiHalfSpaceBV::HalfSpaceTriFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
void __thiscall NiHalfSpaceBV::NiHalfSpaceBV(NiHalfSpaceBV *this, NiHalfSpaceBV *kABV);
void __thiscall NiHalfSpaceBV::NiHalfSpaceBV(NiHalfSpaceBV *this, NiPoint3 *kPoint, NiPoint3 *kNormal);
NiBoundingVolume *__thiscall NiHalfSpaceBV::Create(NiHalfSpaceBV *this);
NiBoundingVolume *__thiscall NiHalfSpaceBV::Clone(NiHalfSpaceBV *this);
NiBoundingVolume *__cdecl NiHalfSpaceBV::CreateFromStream(NiStream *kStream);
void __thiscall NiHalfSpaceBV::AddViewerStrings(NiHalfSpaceBV *this, const char *pcPrefix, NiTArray<char *> *pkStrings);
void *__thiscall NiTArray<NiBoundingVolume__>::_vector_deleting_destructor_(NiTArray<NiBoundingVolume *> *this, unsigned int);
void __thiscall NiUnionBV::NiUnionBV(NiUnionBV *this);
void __thiscall NiUnionBV::NiUnionBV(NiUnionBV *this, NiUnionBV *kABV);
void __thiscall NiUnionBV::RemoveAllBoundingVolumes(NiUnionBV *this);
NiBoundingVolume *__thiscall NiUnionBV::Create(NiUnionBV *this);
void __thiscall NiUnionBV::Copy(NiUnionBV *this, NiBoundingVolume *kABV);
bool __thiscall NiUnionBV::operator__(NiUnionBV *this, NiBoundingVolume *kABV);
void __thiscall NiUnionBV::UpdateWorldData(NiUnionBV *this, NiBoundingVolume *kModelABV, NiTransform *kWorld);
bool __cdecl NiUnionBV::UnionOtherTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiUnionBV::UnionUnionTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiUnionBV::UnionTriTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1);
bool __cdecl NiUnionBV::UnionOtherFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiUnionBV::UnionUnionFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiUnionBV::UnionTriFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
NiBoundingVolume *__thiscall NiUnionBV::Clone(NiUnionBV *this);
NiBoundingVolume *__cdecl NiUnionBV::CreateFromStream(NiStream *stream);
void __thiscall NiUnionBV::AddBoundingVolume(NiUnionBV *this, NiBoundingVolume *pkABV);
void __thiscall NiUnionBV::SaveBinary(NiUnionBV *this, NiStream *stream);
void *__thiscall NiUnionBV::_scalar_deleting_destructor_(NiUnionBV *this, unsigned int);
void __thiscall NiUnionBV::LoadBinary(NiUnionBV *this, NiStream *stream);
void __thiscall NiUnionBV::AddViewerStrings(NiUnionBV *this, const char *pcPrefix, NiTArray<char *> *pkStrings);
bool __thiscall NiCapsuleBV::operator__(NiCapsuleBV *this, NiBoundingVolume *kABV);
bool __thiscall NiSphereBV::operator__(NiUnionBV *this, NiBoundingVolume *kABV);
void __thiscall NiCapsuleBV::CalculateCapsule(NiCapsuleBV *this);
void __thiscall NiCapsuleBV::Copy(NiCapsuleBV *this, NiBoundingVolume *kABV);
void __thiscall NiCapsuleBV::UpdateWorldData(NiCapsuleBV *this, NiBoundingVolume *kModelABV, NiTransform *kWorld);
bool __cdecl NiCapsuleBV::CapsuleSphereFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiCapsuleBV::CapsuleCapsuleFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiCapsuleBV::CapsuleSphereTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiCapsuleBV::CapsuleCapsuleTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiBoundingVolume *kABV1, NiPoint3 *kV1);
bool __cdecl NiCapsuleBV::CapsuleTriTestIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1);
bool __cdecl NiCapsuleBV::CapsuleTriFindIntersect(float fTime, NiBoundingVolume *kABV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
NiBoundingVolume *__cdecl NiCapsuleBV::CreateFromStream(NiStream *stream);
void __thiscall NiCapsuleBV::LoadBinary(NiCapsuleBV *this, NiStream *stream);
void __thiscall NiCapsuleBV::SaveBinary(NiCapsuleBV *this, NiStream *stream);
NiBoundingVolume *__thiscall NiCapsuleBV::Create(NiCapsuleBV *this);
NiBoundingVolume *__thiscall NiCapsuleBV::Clone(NiCapsuleBV *this);
void __thiscall NiCapsuleBV::AddViewerStrings(NiCapsuleBV *this, const char *pcPrefix, NiTArray<char *> *pkStrings);
bool __thiscall NiBoxBV::operator__(NiBoxBV *this, NiBoundingVolume *kABV);
NiPoint3 *__thiscall NiBoxBV::GetNormal(NiBoxBV *this, NiPoint3 *result, int iSign0, int iSign1, int iSign2, NiPoint3 kVelocity);
bool __cdecl NiBoxBV::BoxCapsuleFindIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiBoundingVolume *kBV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
void __thiscall NiBoxBV::LoadBinary(NiBoxBV *this, NiStream *kStream);
void __thiscall NiBoxBV::SaveBinary(NiBoxBV *this, NiStream *kStream);
void __thiscall NiBoxBV::NiBoxBV(NiBoxBV *this, NiPoint3 *kExtent, NiPoint3 *kCenter, NiPoint3 *kXAvis, NiPoint3 *kYAvis, NiPoint3 *kZAxis);
void __thiscall NiBoxBV::_NiBoxBV(NiBoxBV *this);
void __thiscall NiBoxBV::Copy(NiBoxBV *this, NiBoundingVolume *kABV);
void __thiscall NiBoxBV::UpdateWorldData(NiBoxBV *this, NiBoundingVolume *kModelABV, NiTransform *kWorld);
bool __cdecl NiBoxBV::BoxBoxTestIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiBoundingVolume *kBV1, NiPoint3 *kV1);
bool __cdecl NiBoxBV::BoxCapsuleTestIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiBoundingVolume *kBV1, NiPoint3 *kV1);
bool __cdecl NiBoxBV::BoxTriTestIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1);
bool __cdecl NiBoxBV::BoxSphereFindIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiBoundingVolume *kBV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
bool __cdecl NiBoxBV::BoxTriFindIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiPoint3 *kVert0, NiPoint3 *kVert1, NiPoint3 *kVert2, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
NiBoundingVolume *__cdecl NiBoxBV::CreateFromStream(NiStream *kStream);
NiBoundingVolume *__thiscall NiBoxBV::Create(NiBoxBV *this);
bool __cdecl NiBoxBV::BoxSphereTestIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiBoundingVolume *kBV1, NiPoint3 *kV1);
void __cdecl NiBoxBV::RefinePoint(float fTime, NiBoxBV *pkBBV0, NiPoint3 *pkV0, NiBoxBV *pkBBV1, NiPoint3 *pkV1, float *fIntrTime, NiPoint3 *kIntrPt0);
NiBoundingVolume *__thiscall NiBoxBV::Clone(NiBoxBV *this);
bool __cdecl NiBoxBV::BoxBoxFindIntersect(float fTime, NiBoundingVolume *kBV0, NiPoint3 *kV0, NiBoundingVolume *kBV1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
void __thiscall NiBoxBV::AddViewerStrings(NiBoxBV *this, const char *pcPrefix, NiTArray<char *> *pkStrings);
void __thiscall NiOBBRoot::Transform(NiOBBRoot *this, NiTransform *xform);
int __thiscall NiOBBRoot::FindIntersections(NiOBBRoot *this, NiPoint3 *origin, NiPoint3 *dir, NiPick *pick, bool *bIntersects, NiAVObject *pObj, unsigned int uiChangeStamp);
void __thiscall NiOBBRoot::NiOBBRoot(NiOBBRoot *this, unsigned __int16 usTriangles, const unsigned __int16 *pTriList, NiPoint3 *pVertex, NiPoint3 *pWVertex, int iBinSize);
void *__thiscall NiOBBRoot::_vector_deleting_destructor_(NiOBBRoot *this, unsigned int);
bool __thiscall NiOBBRoot::TestCollision(NiOBBRoot *this, NiOBBRoot *pTestRoot, NiAVObject *pThisObj, NiAVObject *pOtherObj, int iMaxDepth, int iTestMaxDepth);
int __thiscall NiOBBRoot::FindCollisions(NiOBBRoot *this, NiOBBRoot *pTestRoot, NiAVObject *pThisRoot, NiAVObject *pOtherRoot, NiAVObject *pThisObj, NiAVObject *pOtherObj, int iMaxDepth, int iTestMaxDepth, bool *bCollision);
float __cdecl NiSqrDistance::Compute(NiPoint3 *kPnt, NiTrigon *kTri, float *fTriParam0, float *fTriParam1);
float __cdecl NiSqrDistance::Compute(NiSegment *kSeg, NiTrigon *kTri, float *fSegParm, float *fTriParm0, float *fTriParm1);
void __thiscall NiIntersector::Test(NiIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1);
float __thiscall NiIntersector::GetContactTime(NiIntersector *this);
NiPoint3 *__thiscall NiIntersector::GetContactNormal(NiIntersector *this);
void __thiscall NiIntersector::NiIntersector(NiIntersector *this, float fMaxTime, float fDerivativeTimeStep, float fPseudodistanceThreshold, int iMaxIterations);
void __thiscall NiIntersector::Find(NiIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1);
float __thiscall NiSphereTriIntersector::Pseudodistance(NiSphereTriIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1, float fTime);
void __thiscall NiSphereTriIntersector::NiSphereTriIntersector(NiSphereTriIntersector *this, NiSphereBV *kSphere, NiPoint3 *kP0, NiPoint3 *kP1, NiPoint3 *kP2, float fMaxTime, float fDerivativeTimeStep, float fPseudodistanceThreshold, int iMaxIterations);
NiPoint3 *__thiscall NiTrigon::GetNormal(NiTrigon *this, NiPoint3 *result);
bool __cdecl NiCollisionUtils::FindBoundIntersect(NiAVObject *pkObj, NiPoint3 *kOrigin, NiPoint3 *kDir);
bool __cdecl NiCollisionUtils::IntersectTriangle(NiPoint3 *kOrigin, NiPoint3 *kDir, NiPoint3 *kV1, NiPoint3 *kV2, NiPoint3 *kV3, bool bCull, NiPoint3 *kIntersect, float *r, float *s, float *t);
bool __cdecl NiCollisionUtils::BoundingVolumeTestIntersect(float fTime, NiAVObject *pkObj1, NiAVObject *pkObj2);
bool __cdecl NiCollisionUtils::BoundingVolumeFindIntersect(float fTime, NiAVObject *pkObj1, NiAVObject *pkObj2, float *fIntrTime, NiPoint3 *kIntrPoint, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
int __cdecl NiCollisionUtils::TriTriFindIntersect(float fTime, NiAVObject *pkGeom1, NiAVObject *pkGeom2, bool bCalcNormals, NiCollisionGroup::Intersect *kIntr, bool *bCollision);
int __cdecl NiCollisionUtils::TriToBndVolFindIntersect(float fTime, NiAVObject *pkTBG, NiAVObject *pkOther, bool bCalcNormals, NiCollisionGroup::Intersect *kIntr, bool *bCollision);
void __thiscall NiBox::CreateFromData(NiBox *this, unsigned __int16 usQuantity, NiPoint3 *pkVertex);
bool __thiscall NiBox::operator__(NiBox *this, NiBox *kBox);
void __thiscall NiBox::LoadBinary(NiBox *this, NiStream *stream);
void __thiscall NiBox::SaveBinary(NiBox *this, NiStream *stream);
bool __thiscall NiCapsule::operator__(NiCapsule *this, NiCapsule *kCapsule);
void __thiscall NiCapsuleSphereIntersector::NiCapsuleSphereIntersector(NiCapsuleSphereIntersector *this, NiCapsuleBV *kCapsule, NiSphereBV *kSphere, float fMaxTime, float fDerivativeTimeStep, float fPseudodistanceThreshold, int iMaxIterations);
float __thiscall NiCapsuleSphereIntersector::Pseudodistance(NiCapsuleSphereIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1, float fTime);
void __thiscall NiCapsuleSphereIntersector::ComputeContactInformation(NiCapsuleSphereIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1);
void __thiscall NiCapsuleCapsuleIntersector::NiCapsuleCapsuleIntersector(NiCapsuleCapsuleIntersector *this, NiCapsuleBV *kCapsule0, NiCapsuleBV *kCapsule1, float fMaxTime, float fDerivativeTimeStep, float fPseudodistanceThreshold, int iMaxIterations);
float __thiscall NiCapsuleCapsuleIntersector::Pseudodistance(NiCapsuleCapsuleIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1, float fTime);
void __thiscall NiCapsuleCapsuleIntersector::ComputeContactInformation(NiCapsuleCapsuleIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1);
float __cdecl NiSqrDistance::Compute(NiPoint3 *kPnt, NiSegment *kSeg, float *fSegParam);
float __cdecl NiSqrDistance::Compute(NiSegment *kSeg0, NiSegment *kSeg1, float *fSeg0Param, float *fSeg1Param);
float __cdecl NiSqrDistance::Compute(NiSegment *kSeg, NiParallelogram *kPgm, float *fSegParam, float *fPgmParam0, float *fPgmParam1);
float __cdecl NiSqrDistance::Compute(NiTrigon *kTri, NiParallelogram *kPgm, float *fTriParam0, float *fTriParam1, float *fPgmParam0, float *fPgmParam1);
float __thiscall NiCapsuleTriIntersector::Pseudodistance(NiCapsuleTriIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1, float fTime);
void __thiscall NiCapsuleTriIntersector::ComputeContactInformation(NiSphereTriIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1);
void __thiscall NiCapsuleTriIntersector::NiCapsuleTriIntersector(NiCapsuleTriIntersector *this, NiCapsuleBV *kCapsule, NiPoint3 *kP0, NiPoint3 *kP1, NiPoint3 *kP2, float fMaxTime, float fDerivativeTimeStep, float fPseudodistanceThreshold, int iMaxIterations);
void __thiscall NiBoxCapsuleIntersector::NiBoxCapsuleIntersector(NiBoxCapsuleIntersector *this, NiBoxBV *kBox, NiCapsuleBV *kCapsule, float fMaxTime, float fDerivativeTimeStep, float fPseudodistanceThreshold, int iMaxIterations);
float __thiscall NiBoxCapsuleIntersector::Pseudodistance(NiBoxCapsuleIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1, float fTime);
void __thiscall NiBoxCapsuleIntersector::ComputeContactInformation(NiBoxCapsuleIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1);
void __thiscall NiBoxSphereIntersector::NiBoxSphereIntersector(NiBoxSphereIntersector *this, NiBoxBV *kBox, NiSphereBV *kSphere, float fMaxTime, float fDerivativeTimeStep, float fPseudodistanceThreshold, int iMaxIterations);
float __thiscall NiBoxSphereIntersector::Pseudodistance(NiBoxSphereIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1, float fTime);
void __thiscall NiBoxSphereIntersector::ComputeContactInformation(NiBoxSphereIntersector *this, NiPoint3 *kV0, NiPoint3 *kV1);
float __cdecl NiSqrDistance::Compute(NiPoint3 *kPoint, NiBox *kBox, float *fBoxParam0, float *fBoxParam1, float *fBoxParam2);
// void __usercall Case000(NiBox *kBox<edx>, NiPoint3 *rkPnt<ecx>, float *rfSqrDistance<esi>);
// void __usercall Face(NiBox *kBox, int i0, int i1<edx>, int i2<esi>, NiPoint3 *rkPnt<ebx>, NiPoint3 *rkDir<edi>, NiPoint3 *rkPmE, float *fLParam, float *rfSqrDistance);
// void __usercall CaseNoZeros(NiBox *kBox<ecx>, NiPoint3 *rkPnt, NiPoint3 *rkDir, float *fLParam<eax>, float *rfSqrDistance<edx>);
// void __usercall Case0(NiBox *kBox, int i0<edx>, int i1<ecx>, int i2, NiPoint3 *rkPnt<edi>, NiPoint3 *rkDir<esi>, float *fLParam, float *rfSqrDistance);
// void __usercall Case00(NiBox *kBox, int i0<eax>, int i1<esi>, int i2<edi>, NiPoint3 *rkPnt<ecx>, NiPoint3 *rkDir, float *fLParam, float *rfSqrDistance);
float __cdecl NiSqrDistance::Compute(NiSegment *kSeg, NiBox *kBox, float *fSegParam, float *fBoxParam0, float *fBoxParam1, float *fBoxParam2);
bool __thiscall NiOBBNode::HasChildren(NiOBBNode *this);
void __thiscall NiOBBLeaf::NiOBBLeaf(NiOBBLeaf *this, NiOBBRoot *pRoot, const unsigned __int16 *pTriList, NiPoint3 *pVertex, NiPoint3 *pWVertex, unsigned __int16 usTriangle);
void *__thiscall NiOBBNode::_scalar_deleting_destructor_(NiOBBLeaf *this, unsigned int);
void __cdecl NiOBBLeaf::ComputeBarycenter(NiPoint3 *v0, NiPoint3 *v1, NiPoint3 *v2, NiPoint3 *p, float *pCenter);
int __cdecl NiOBBLeaf::TentativeCollision(float fDT, NiPoint3 *N, float fC, NiPoint3 *V, NiPoint3 *q0, NiPoint3 *q1, float *fT0, NiPoint3 *p0, float *fT1, NiPoint3 *p1);
int __cdecl NiOBBLeaf::TestEdgeTri(NiPoint3 *edge0, NiPoint3 *edge1, NiPoint3 **pVer, NiPoint3 *N, float fC, NiPoint3 *V, float fDT, float *fTMin, NiPoint3 *pmin);
int __cdecl NiOBBLeaf::FindIntersection(NiPoint3 **pVer0, NiPoint3 **pVer1, NiPoint3 *V, float fDT, float *fTMin, NiPoint3 *pmin);
int __cdecl NiOBBLeaf::FindIntersection(NiOBBLeaf *pLeaf0, NiOBBLeaf *pLeaf1, float *fT, NiPoint3 *p);
int __thiscall NiOBBLeaf::FaceFaceCollision(NiOBBLeaf *this, NiOBBLeaf *pTestLeaf, NiAVObject *pkRoot0, NiAVObject *pkRoot1, NiAVObject *pkObj0, NiAVObject *pkObj1, bool *bCollision);
bool __thiscall NiOBBLeaf::TestCollision(NiOBBLeaf *this, NiOBBNode *pTestNode, NiAVObject *pkObj0, NiAVObject *pkObj1, int iMaxDepth, int iTestMaxDepth, unsigned int uiChangeStamp0, unsigned int uiChangeStamp1);
int __thiscall NiOBBLeaf::FindCollisions(NiOBBLeaf *this, NiOBBNode *pTestNode, NiAVObject *pkRoot0, NiAVObject *pkRoot1, NiAVObject *pkObj0, NiAVObject *pkObj1, int iMaxDepth, int iTestMaxDepth, unsigned int uiChangeStamp0, unsigned int uiChangeStamp1, bool *bCollision);
int __thiscall NiOBBLeaf::FindIntersections(NiOBBLeaf *this, NiPoint3 *origin, NiPoint3 *dir, NiPick *pick, bool *bIntersects, NiAVObject *pObj, unsigned int uiChangeStamp);
void __thiscall NiOBBNode::_NiOBBNode(NiOBBNode *this);
NiMatrix3 *__thiscall NiOBBNode::ComputeCovarianceAndMean(NiOBBNode *this, NiMatrix3 *result, const unsigned __int16 *pTriList, NiPoint3 *pVertex, float *pArea, NiPoint3 *pCentroid, int i0, int i1, int *pISplit);
void __thiscall NiOBBNode::DivideTriangles(NiOBBNode *this, NiPoint3 *pCentroid, int i0, int i1, int *pISplit, int *j0, int *j1, int *pOSplit);
bool __thiscall NiOBBNode::TestCollision(NiOBBNode *this, NiOBBNode *pTestNode, NiAVObject *pkObj0, NiAVObject *pkObj1, int iMaxDepth, int iTestMaxDepth, unsigned int uiChangeStamp0, unsigned int uiChangeStamp1);
int __thiscall NiOBBNode::FindIntersections(NiOBBNode *this, NiPoint3 *origin, NiPoint3 *dir, NiPick *pick, bool *bIntersects, NiAVObject *pObj, unsigned int uiChangeStamp);
void __thiscall NiOBBNode::ComputeOBB(NiOBBNode *this, NiOBBRoot *pRoot, const unsigned __int16 *pTriList, NiPoint3 *pVertex, float *pArea, NiPoint3 *pCentroid, int i0, int i1, int *pISplit);
int __thiscall NiOBBNode::CollisionCallback(NiOBBNode *this, NiCollisionGroup::Intersect *intr);
int __thiscall NiOBBNode::BoxBoxCollision(NiOBBNode *this, NiOBBNode *pTestNode, NiAVObject *pkRoot0, NiAVObject *pkRoot1, NiAVObject *pkObj0, NiAVObject *pkObj1, bool *bCollision);
int __thiscall NiOBBNode::FindCollisions(NiOBBNode *this, NiOBBNode *pTestNode, NiAVObject *pkRoot0, NiAVObject *pkRoot1, NiAVObject *pkObj0, NiAVObject *pkObj1, int iMaxDepth, int iTestMaxDepth, unsigned int uiChangeStamp0, unsigned int uiChangeStamp1, bool *bCollision);
void __thiscall NiOBBNode::CreateRecursive(NiOBBNode *this, NiOBBRoot *pRoot, const unsigned __int16 *pTriList, NiPoint3 *pVertex, NiPoint3 *pWVertex, float *pArea, NiPoint3 *pCentroid, int i0, int i1, int *pISplit, int *pOSplit, int iBinSize);
void __thiscall NiOBBNode::NiOBBNode(NiOBBNode *this, NiOBBRoot *pRoot, unsigned __int16 usTriangles, const unsigned __int16 *pTriList, NiPoint3 *pVertex, NiPoint3 *pWVertex, int iBinSize);
void __thiscall NiTriIntersect::Sort(NiTriIntersect *this, float fR0, float fR1, float fR2, float *afSort, int *aiIndex);
void __thiscall NiTriIntersect::NiTriIntersect(NiTriIntersect *this, NiPoint3 **apkP, NiPoint3 *rkV0, NiPoint3 **apkQ, NiPoint3 *rkV1);
bool __thiscall NiTriIntersect::FindIntervals(NiTriIntersect *this, unsigned int uiAxis, float *afPSort, int *aiPIndex, float *afQSort, int *aiQIndex, float fW);
bool __thiscall NiTriIntersect::FindN(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindM(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE0xF0(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE0xF1(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE0xF2(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE1xF0(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE1xF1(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE1xF2(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE2xF0(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE2xF1(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindE2xF2(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindMxF0(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindMxF1(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindMxF2(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindNxE0(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindNxE1(NiTriIntersect *this);
bool __thiscall NiTriIntersect::FindNxE2(NiTriIntersect *this);
void __thiscall NiTriIntersect::PEdgeQEdgeIntersect(NiTriIntersect *this, NiPoint3 *rkP0, NiPoint3 *rkP1, NiPoint3 *rkQ0, NiPoint3 *rkQ1);
void __thiscall NiTriIntersect::PEdgeQFaceIntersect(NiTriIntersect *this, NiPoint3 *rkP0, NiPoint3 *rkP1);
void __thiscall NiTriIntersect::PFaceQEdgeIntersect(NiTriIntersect *this, NiPoint3 *rkQ0, NiPoint3 *rkQ1);
void __thiscall NiTriIntersect::PFaceQFaceIntersect(NiTriIntersect *this);
void __thiscall NiTriIntersect::LocateIntersection(NiTriIntersect *this);
bool __thiscall NiTriIntersect::Find(NiTriIntersect *this, float fTime, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *pkNormal0, NiPoint3 *pkNormal1);
NiPoint3 *__thiscall NiSegment::GetPoint(NiSegment *this, NiPoint3 *result, float fS);
bool __thiscall NiSegment::operator__(NiSegment *this, NiSegment *kSegment);
float __cdecl NiSqrDistance::Compute(NiPoint3 *kPnt, NiParallelogram *kPgm, float *fPgmParam0, float *fPgmParam1);
void __thiscall NiOBBox::Transform(NiOBBox *this, NiTransform *xform);
int __thiscall NiOBBox::TestIntersection(NiOBBox *this, NiOBBox *box);
int __thiscall NiOBBox::FindIntersection(NiOBBox *this, NiOBBox *box, float *t, NiPoint3 *p);
int __stdcall loc_825A97(int box, int t, int p); // weak
void __thiscall NiOBBox::ComputeNormal(NiOBBox *this, NiPoint3 *p, NiPoint3 *normal);
int __thiscall NiOBBox::TestIntersection(NiOBBox *this, NiPoint3 *origin, NiPoint3 *dir);
void __thiscall NiNode::LoadBinary(NiNode *this, NiStream *kStream);
void __thiscall NiDynamicEffectState::NiDynamicEffectState(NiDynamicEffectState *this);
void *__thiscall NiDynamicEffectState::_scalar_deleting_destructor_(NiDynamicEffectState *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiDynamicEffect__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiDynamicEffect *> *this, unsigned int);
void __thiscall NiNode::ApplyTransform(NiNode *this, NiMatrix3 *kMat, NiPoint3 *kTrn, bool bOnLeft);
void __thiscall NiNode::UpdateUpwardPass(NiNode *this);
void __thiscall NiNode::UpdateWorldBound(NiNode *this);
void __thiscall NiNode::UpdatePropertiesDownward(NiNode *this, NiPropertyState *pkParentState);
void __thiscall NiNode::UpdateNodeBound(NiNode *this);
void __thiscall NiNode::OnVisible(NiNode *this, NiCullingProcess *kCuller);
void __thiscall NiNode::PurgeRendererData(NiNode *this, NiRenderer *pkRenderer);
void __thiscall NiNode::DetachAllEffects(NiNode *this);
void __thiscall NiNode::CopyMembers(NiNode *this, NiNode *pkDest, NiCloningProcess *kCloning);
void __thiscall NiAVObject::UpdateObjectControllers(NiAVObject *this, float fTime, bool bProperties);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDynamicEffect__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDynamicEffect__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiDynamicEffect *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDynamicEffect__>::_vector_deleting_destructor_(NiTPointerList<NiDynamicEffect *> *this, unsigned int);
NiPointer<NiAVObject> *__thiscall NiNode::DetachChildAt(NiNode *this, NiPointer<NiAVObject> *result, unsigned int i);
NiPointer<NiAVObject> *__thiscall NiNode::DetachChild(NiNode *this, NiPointer<NiAVObject> *result, NiAVObject *pkChild);
void __thiscall NiNode::UpdateDownwardPass(NiNode *this, float fTime, bool bUpdateControllers);
void __thiscall NiNode::UpdateSelectedDownwardPass(NiNode *this, float fTime);
void __thiscall NiNode::UpdateRigidDownwardPass(NiNode *this, float fTime);
void __thiscall NiNode::UpdateControllers(NiNode *this, float fTime);
NiPointer<NiPropertyState> *__thiscall NiNode::UpdatePropertiesUpward(NiNode *this, NiPointer<NiPropertyState> *result);
NiPointer<NiDynamicEffectState> *__thiscall NiNode::PushLocalEffects(NiNode *this, NiPointer<NiDynamicEffectState> *result, NiDynamicEffectState *pkParentState, bool bCopyOnChange);
void __thiscall NiNode::UpdateEffectsDownward(NiNode *this, NiDynamicEffectState *pkParentState);
void __thiscall NiNode::SetSelectiveUpdateFlags(NiNode *this, bool *bSelectiveUpdate, bool bSelectiveUpdateTransforms, bool *bRigid);
void __thiscall NiNode::AttachEffect(NiNode *this, NiDynamicEffect *pkEffect);
NiAVObject *__thiscall NiNode::GetObjectByName(NiNode *this, const char *pcName);
void __thiscall NiNode::CopyEffectListClones(NiNode *this, NiTPointerList<NiDynamicEffect *> *pkList, NiCloningProcess *kCloning);
bool __thiscall NiNode::RegisterStreamables(NiNode *this, NiStream *kStream);
void __thiscall NiNode::SaveBinary(NiNode *this, NiStream *kStream);
bool __thiscall NiNode::IsEqual(NiNode *this, NiObject *pkObject);
void __thiscall NiTArray<NiPointer<NiAVObject>>::NiTArray<NiPointer<NiAVObject>>(NiTArray<NiPointer<NiAVObject> > *this, unsigned int uiMaxSize, unsigned int uiGrowBy);
void __thiscall NiTArray<NiPointer<NiAVObject>>::_NiTArray<NiPointer<NiAVObject>>(NiTArray<NiPointer<NiAVObject> > *this);
void *__thiscall NiTArray<NiPointer<NiAVObject>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiAVObject> > *this, unsigned int);
void __thiscall NiNode::NiNode(NiNode *this, unsigned int uiNumChildren);
void __thiscall NiNode::_NiNode(NiNode *this);
NiPointer<NiDynamicEffectState> *__thiscall NiNode::UpdateEffectsUpward(NiNode *this, NiPointer<NiDynamicEffectState> *result);
void __thiscall NiNode::DetachEffect(NiNode *this, NiDynamicEffect *pkEffect);
NiObject *__thiscall NiNode::CreateClone(NiNode *this, NiCloningProcess *kCloning);
void __thiscall NiNode::ProcessClone(NiNode *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiNode::CreateObject();
void __thiscall NiNode::LinkObject(NiNode *this, NiStream *kStream);
void __thiscall NiNode::GetViewerStrings(NiNode *this, NiTArray<char *> *pkStrings);
unsigned int __thiscall NiTArray<NiPointer<NiControllerSequence>>::AddFirstEmpty(NiTArray<NiPointer<NiD3DShaderConstantMapEntry> > *this, NiPointer<NiD3DShaderConstantMapEntry> *element);
void __thiscall NiNode::AttachChild(NiNode *this, NiAVObject *pkChild, bool bFirstAvail);
NiPointer<NiAVObject> *__thiscall NiNode::SetAt(NiNode *this, NiPointer<NiAVObject> *result, unsigned int i, NiAVObject *pkChild);
NiExtraData *__thiscall NiObjectNET::GetExtraData(NiObjectNET *this, const char *pcKey);
void __thiscall NiObjectNET::ProcessClone(NiObjectNET *this, NiCloningProcess *kCloning);
void __thiscall NiObjectNET::SetName(NiObjectNET *this, const char *pcName);
void __thiscall NiObjectNET::DeleteExtraData(NiObjectNET *this, unsigned int uiExtraDataIndex);
bool __thiscall NiObjectNET::InsertExtraData(NiObjectNET *this, NiExtraData *pkExtra);
bool __thiscall NiObjectNET::SetExtraDataSize(NiObjectNET *this, unsigned int uiSize);
bool __thiscall NiObjectNET::AddExtraData(NiObjectNET *this, const char *pcKey, NiExtraData *pkExtra);
bool __thiscall NiObjectNET::AddExtraData(NiObjectNET *this, NiExtraData *pkExtra);
bool __thiscall NiObjectNET::RemoveExtraData(NiObjectNET *this, const char *pcKey);
bool __thiscall NiObjectNET::RemoveExtraDataAt(NiObjectNET *this, unsigned int uiExtraDataIndex);
void __thiscall NiObjectNET::RemoveAllExtraData(NiObjectNET *this);
void __thiscall RewardInvItem::SetItem(NiObjectNET *this, NiTimeController *pkControl);
void __thiscall NiObjectNET::RemoveAllControllers(NiObjectNET *this);
void __thiscall NiObjectNET::LoadBinary(NiObjectNET *this, NiStream *kStream);
void __thiscall NiObjectNET::LinkObject(NiObjectNET *this, NiStream *kStream);
bool __thiscall NiObjectNET::RegisterStreamables(NiObjectNET *this, NiStream *kStream);
void __thiscall NiObjectNET::NiObjectNET(NiObjectNET *this);
NiRTTI *__thiscall NiObjectNET::GetRTTI(NiObjectNET *this);
void __thiscall NiObjectNET::_NiObjectNET(NiObjectNET *this);
void __thiscall NiObjectNET::CopyMembers(NiObjectNET *this, NiObjectNET *pkDest, NiCloningProcess *kCloning);
void __thiscall NiObjectNET::PrependController(NiObjectNET *this, NiTimeController *pkControl);
void __thiscall NiObjectNET::RemoveController(NiObjectNET *this, NiTimeController *pkControl);
NiTimeController *__thiscall NiObjectNET::GetController(NiObjectNET *this, NiRTTI *pkRTTI);
void __thiscall NiObjectNET::SaveBinary(NiObjectNET *this, NiStream *kStream);
void __thiscall NiObjectNET::PostLinkObject(NiObjectNET *this, NiStream *kStream);
bool __thiscall NiObjectNET::IsEqual(NiObjectNET *this, NiObject *pkObject);
void *__thiscall NiObjectNET::_scalar_deleting_destructor_(NiObjectNET *this, unsigned int);
void __thiscall NiObjectNET::GetViewerStrings(NiObjectNET *this, NiTArray<char *> *pkStrings);
NiObject *__thiscall NiObject::Clone(NiObject *this, NiCloningProcess *kCloning);
NiObject *__thiscall NiObject::CreateClone(NiObject *this, NiCloningProcess *kCloning);
bool __thiscall NiObject::RegisterStreamables(NiObject *this, NiStream *stream);
void __thiscall NiObject::NiObject(NiObject *this);
NiObject *__thiscall NiObject::CreateSharedClone(NiObject *this, NiCloningProcess *kCloning);
void __thiscall NiObject::ProcessClone(NiObject *this, NiCloningProcess *kCloning);
void __thiscall NiObject::CopyMembers(NiObject *this, NiObject *pDest, NiCloningProcess *kCloning);
bool __thiscall NiObject::IsEqual(NiObject *this, NiObject *pObject);
NiPointer<NiObject> *__thiscall NiObject::CreateDeepCopy(NiObject *this, NiPointer<NiObject> *result);
void __thiscall NiObject::LoadBinary(NiObject *this, NiStream *stream);
void __thiscall NiObject::GetViewerStrings(NiObject *this, NiTArray<char *> *pStrings);
NiObject *__thiscall NiObject::Clone(NiObject *this);
NiTransform *__thiscall NiTransform::operator_(NiTransform *this, NiTransform *result, NiTransform *xform);
void __thiscall NiAVObject::UpdateWorldData(NiAVObject *this);
void __thiscall NiAVObject::Update(NiAVObject *this, float fTime, bool bUpdateControllers);
void __thiscall NiAVObject::UpdateSelected(NiAVObject *this, float fTime);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiProperty>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiProperty>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiProperty>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiProperty>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiProperty>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *this, unsigned int);
void *__thiscall NiTPointerList<NiPointer<NiProperty>>::_vector_deleting_destructor_(NiTPointerList<NiPointer<NiProperty> > *this, unsigned int);
void __thiscall NiTPointerList<NiPointer<NiProperty>>::_NiTPointerList<NiPointer<NiProperty>>(NiTPointerList<NiPointer<NiProperty> > *this);
void __thiscall NiAVObject::AttachParent(NiAVObject *this, NiNode *pkParent);
NiProperty *__thiscall NiAVObject::GetProperty(NiAVObject *this, int iType);
void __thiscall NiAVObject::Cull(NiAVObject *this, NiCullingProcess *kCuller);
NiAVObject *__thiscall NiAVObject::GetObjectByName(NiAVObject *this, const char *pcName);
void __thiscall NiAVObject::PurgeRendererData(NiAVObject *this, NiRenderer *pkRenderer);
void __thiscall NiAVObject::ProcessPropertyClones(NiAVObject *this, NiTPointerList<NiPointer<NiProperty> > *pkList, NiCloningProcess *kCloning);
void __thiscall NiAVObject::ProcessClone(NiAVObject *this, NiCloningProcess *kCloning);
bool __thiscall NiAVObject::RegisterStreamables(NiAVObject *this, NiStream *kStream);
void __thiscall NiPropertyState::SetProperty(NiPropertyState *this, NiProperty *pkProp);
void __thiscall NiAVObject::_NiAVObject(NiAVObject *this);
NiRTTI *__thiscall NiAVObject::GetRTTI(NiAVObject *this);
void __thiscall NiAVObject::UpdateDownwardPass(NiAVObject *this, float fTime, bool bUpdateControllers);
void __thiscall NiAVObject::UpdateRigidDownwardPass(NiAVObject *this, float fTime);
void __thiscall NiAVObject::UpdateControllers(NiAVObject *this, float fTime);
void __thiscall NiAVObject::UpdateProperties(NiAVObject *this);
bool __thiscall NiAVObject::HasTransformController(NiAVObject *this);
bool __thiscall NiAVObject::HasPropertyController(NiAVObject *this);
NiPointer<NiPropertyState> *__thiscall NiAVObject::PushLocalProperties(NiAVObject *this, NiPointer<NiPropertyState> *result, NiPropertyState *pkParentState, bool bCopyOnChange);
void __thiscall NiAVObject::UpdateEffects(NiAVObject *this);
void __thiscall NiAVObject::LinkObject(NiAVObject *this, NiStream *kStream);
bool __thiscall NiAVObject::IsEqual(NiAVObject *this, NiObject *pkObject);
void __thiscall NiAVObject::NiAVObject(NiAVObject *this);
void *__thiscall NiAVObject::_scalar_deleting_destructor_(NiAVObject *this, unsigned int);
NiPointer<NiProperty> *__thiscall NiAVObject::RemoveProperty(NiAVObject *this, NiPointer<NiProperty> *result, int iType);
void __thiscall NiAVObject::SetSelectiveUpdateFlags(NiAVObject *this, bool *bSelectiveUpdate, bool bSelectiveUpdateTransforms, bool *bRigid);
void __thiscall NiAVObject::CloneProperties(NiAVObject *this, NiAVObject *pkDest, NiTPointerList<NiPointer<NiProperty> > *pkList, NiCloningProcess *kCloning);
void __thiscall NiAVObject::CopyMembers(NiAVObject *this, NiAVObject *pkDest, NiCloningProcess *kCloning);
void __thiscall NiAVObject::LoadBinary(NiAVObject *this, NiStream *kStream);
void __thiscall NiAVObject::SaveBinary(NiAVObject *this, NiStream *kStream);
void __thiscall NiAVObject::GetViewerStrings(NiAVObject *this, NiTArray<char *> *pkStrings);
void __thiscall NiMatrix3::MakeIdentity(NiMatrix3 *this);
void __thiscall NiMatrix3::MakeDiagonal(NiMatrix3 *this, float fDiag0, float fDiag1, float fDiag2);
bool __thiscall NiMatrix3::operator__(NiMatrix3 *this, NiMatrix3 *mat);
NiMatrix3 *__thiscall NiMatrix3::operator_(NiMatrix3 *this, NiMatrix3 *result, NiMatrix3 *mat);
NiMatrix3 *__thiscall NiMatrix3::operator_(NiMatrix3 *this, NiMatrix3 *result, NiMatrix3 *mat);
char *__thiscall NiMatrix3::GetViewerString(NiMatrix3 *this, const char *pPrefix);
void __thiscall NiMatrix3::NiMatrix3(NiMatrix3 *this, NiPoint3 *col0, NiPoint3 *col1, NiPoint3 *col2);
void __thiscall NiMatrix3::MakeYRotation(NiMatrix3 *this, float fAngle);
void __thiscall NiMatrix3::MakeZRotation(NiMatrix3 *this, float fAngle);
void __thiscall NiMatrix3::MakeRotation(NiMatrix3 *this, float fAngle, float x, float y, float z);
NiMatrix3 *__thiscall NiMatrix3::operator_(NiMatrix3 *this, NiMatrix3 *result, NiMatrix3 *mat);
NiMatrix3 *__thiscall NiMatrix3::operator_(NiMatrix3 *this, NiMatrix3 *result, float fScalar);
NiPoint3 *__thiscall NiMatrix3::operator_(NiMatrix3 *this, NiPoint3 *result, NiPoint3 *pt);
NiPoint3 *__cdecl operator_(NiPoint3 *result, NiPoint3 *pt, NiMatrix3 *mat);
bool __thiscall NiMatrix3::Inverse(NiMatrix3 *this, NiMatrix3 *inv);
NiMatrix3 *__thiscall NiMatrix3::Inverse(NiMatrix3 *this, NiMatrix3 *result);
NiMatrix3 *__thiscall NiMatrix3::Transpose(NiMatrix3 *this, NiMatrix3 *result);
void __thiscall NiMatrix3::ExtractAngleAndAxis(NiMatrix3 *this, float *fAngle, float *fX, float *fY, float *fZ);
int __stdcall loc_82DB48(float tx, float tz, int fY, float ty); // weak
NiMatrix3 *__thiscall NiMatrix3::TransposeTimes(NiMatrix3 *this, NiMatrix3 *result, NiMatrix3 *mat);
bool __thiscall NiMatrix3::Tridiagonal(NiMatrix3 *this, float *afDiag, float *afSubd);
bool __thiscall NiMatrix3::QLAlgorithm(NiMatrix3 *this, float *afDiag, float *afSubd);
void __thiscall NiMatrix3::Snap(NiMatrix3 *this);
void __thiscall NiMatrix3::EigenSolveSymmetric(NiMatrix3 *this, float *afEigenvalue, NiPoint3 *akEigenvector);
void __thiscall NiMatrix3::LoadBinary(NiMatrix3 *this, NiStream *stream);
void __thiscall NiMatrix3::SaveBinary(NiMatrix3 *this, NiStream *stream);
void __thiscall NiMaterialProperty::CopyMembers(NiMaterialProperty *this, NiMaterialProperty *pDest, NiCloningProcess *kCloning);
void __thiscall NiZBufferProperty::LinkObject(NiZBufferProperty *this, NiStream *kStream);
void __thiscall NiMaterialProperty::NiMaterialProperty(NiMaterialProperty *this);
NiRTTI *__thiscall NiMaterialProperty::GetRTTI(NiMaterialProperty *this);
NiObject *__thiscall NiMaterialProperty::CreateClone(NiMaterialProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiMaterialProperty::CreateObject();
bool __thiscall NiColor::operator__(NiColor *this, NiColor *c);
void *__thiscall NiMaterialProperty::_scalar_deleting_destructor_(NiMaterialProperty *this, unsigned int);
void __thiscall NiMaterialProperty::LoadBinary(NiMaterialProperty *this, NiStream *stream);
void __thiscall NiMaterialProperty::SaveBinary(NiMaterialProperty *this, NiStream *stream);
bool __thiscall NiMaterialProperty::IsEqual(NiMaterialProperty *this, NiObject *pObject);
LONG __cdecl NiMaterialProperty::_SDMInit();
void __cdecl NiMaterialProperty::_SDMShutdown();
void __thiscall NiMaterialProperty::GetViewerStrings(NiMaterialProperty *this, NiTArray<char *> *pStrings);
char *__thiscall NiPoint3::GetViewerString(NiPoint3 *this, const char *pPrefix);
unsigned int *__cdecl NiPoint3::InitSqrtTable();
void __thiscall NiVisibleArray::SetAllocatedSize(NiVisibleArray *this, unsigned int uiSize);
void __cdecl NiRenderer::RemoveEffect(NiDynamicEffect *pkEffect);
void __cdecl NiRenderer::RemoveGeometryData(NiGeometryData *pkData);
void __cdecl NiRenderer::RemoveMaterial(NiMaterialProperty *pkMaterial);
void __cdecl NiRenderer::RemoveScreenTextureRendererData(NiScreenTexture *pkScreenTexture);
void __cdecl NiRenderer::RemoveSkinPartitionRendererData(NiSkinPartition *pkSkinPartition);
void __cdecl NiRenderer::RemoveSkinInstance(NiSkinInstance *pkSkinInstance);
bool __thiscall NiRenderer::MapWindowPointToBufferPoint(NiRenderer *this, unsigned int uiX, unsigned int uiY, float *fX, float *fY);
NiPixelFormat *__thiscall NiRenderer::FindClosestDepthStencilFormat(NiRenderer *this, NiPixelFormat *pkFrontBufferFormat);
void __cdecl NiRenderer::_SDMShutdown();
void __thiscall NiRenderer::Do_BeginBatch(NiRenderer *this, NiPropertyState *pkPropertyState, NiDynamicEffectState *pkEffectState);
NiPointer<NiPropertyState> *__thiscall NiGeometry::GetPropertyState(NiGeometry *this, NiPointer<NiPropertyState> *result);
NiPointer<NiDynamicEffectState> *__thiscall NiGeometry::GetEffectState(NiGeometry *this, NiPointer<NiDynamicEffectState> *result);
void __thiscall NiRenderer::NiRenderer(NiRenderer *this);
NiRTTI *__thiscall NiRenderer::GetRTTI(NiRenderer *this);
void __thiscall NiRenderer::_NiRenderer(NiRenderer *this);
void __thiscall NiRenderer::Do_BatchRenderShape(NiRenderer *this, NiTriShape *pkTriShape);
void __thiscall NiRenderer::Do_BatchRenderStrips(NiRenderer *this, NiTriStrips *pkTriStrips);
void __thiscall NiRenderer::SetCameraData(NiRenderer *this, NiCamera *pkCamera);
void *__thiscall NiRenderer::_vector_deleting_destructor_(NiRenderer *this, unsigned int);
void __thiscall NiRenderer::GetViewerStrings(NiRenderer *this, NiTArray<char *> *pkStrings);
void __thiscall NiCullingProcess::_NiCullingProcess(NiCullingProcess *this);
void *__thiscall NiCullingProcess::_scalar_deleting_destructor_(NiCullingProcess *this, unsigned int);
void __thiscall NiCullingProcess::Process(NiCullingProcess *this, NiAVObject *pkObject);
void __thiscall NiCullingProcess::SetFrustum(NiCullingProcess *this, NiFrustum *kFrustum);
void __thiscall NiCullingProcess::NiCullingProcess(NiCullingProcess *this, NiVisibleArray *pkVisibleSet);
void __thiscall NiCullingProcess::NiCullingProcess(NiCullingProcess *this, NiVisibleArray *pkVisibleSet, bool bUseVirtualAppend);
void __thiscall NiCullingProcess::Process(NiCullingProcess *this, NiCamera *pkCamera, NiAVObject *pkScene, NiVisibleArray *pkVisibleSet);
void __cdecl NiDrawVisibleArrayAppend(NiVisibleArray *kVisibleSet);
void __cdecl NiDrawVisibleArray(NiCamera *pkCamera, NiVisibleArray *kVisibleSet);
void __cdecl NiDrawScene(NiCamera *pkCamera, NiAVObject *pkScene, NiCullingProcess *kCuller, NiVisibleArray *pkVisibleSet);
void __thiscall NiProperty::CopyMembers(NiProperty *this, NiProperty *pkDest, NiCloningProcess *kCloning);
void __thiscall NiProperty::Update(NiProperty *this, float fTime);
void __thiscall NiProperty::LoadBinary(NiProperty *this, NiStream *kStream);
void __thiscall NiProperty::GetViewerStrings(NiProperty *this, NiTArray<char *> *pkStrings);
NiObject *__thiscall NiVertexColorProperty::CreateClone(NiVertexColorProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiVertexColorProperty::CreateObject();
bool __thiscall NiVertexColorProperty::IsEqual(NiVertexColorProperty *this, NiObject *pkObject);
char *__cdecl NiVertexColorProperty::GetViewerString(const char *pcPrefix, NiVertexColorProperty::SourceVertexMode eMode);
int __cdecl NiVertexColorProperty::_SDMInit();
void __cdecl NiVertexColorProperty::_SDMShutdown();
void __thiscall NiVertexColorProperty::LoadBinary(NiVertexColorProperty *this, NiStream *kStream);
void __thiscall NiVertexColorProperty::SaveBinary(NiVertexColorProperty *this, NiStream *kStream);
void __thiscall NiVertexColorProperty::GetViewerStrings(NiVertexColorProperty *this, NiTArray<char *> *pkStrings);
bool __thiscall NiAlphaProperty::IsEqual(NiAlphaProperty *this, NiObject *pkObject);
char *__cdecl NiAlphaProperty::GetViewerString(const char *pcPrefix, NiAlphaProperty::AlphaFunction eFunc);
char *__cdecl NiAlphaProperty::GetViewerString(const char *pcPrefix, NiAlphaProperty::TestFunction eFunc);
NiObject *__thiscall NiAlphaProperty::CreateClone(NiAlphaProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiAlphaProperty::CreateObject();
LONG __cdecl NiAlphaProperty::_SDMInit();
void __cdecl NiAlphaProperty::_SDMShutdown();
void __thiscall NiAlphaProperty::LoadBinary(NiAlphaProperty *this, NiStream *kStream);
void __thiscall NiAlphaProperty::SaveBinary(NiAlphaProperty *this, NiStream *kStream);
void __thiscall NiAlphaProperty::GetViewerStrings(NiAlphaProperty *this, NiTArray<char *> *pkStrings);
char *__thiscall NiColor::GetViewerString(NiColor *this, const char *pPrefix);
char *__thiscall NiColorA::GetViewerString(NiColorA *this, const char *pPrefix);
void __thiscall NiPoint3::LoadBinary(NiPoint3 *this, NiStream *stream);
void __thiscall NiColor::SaveBinary(NiPoint3 *this, NiStream *stream);
void __thiscall NiColorA::SaveBinary(NiColorA *this, NiStream *stream);
char *__cdecl NiFogProperty::GetViewerString(const char *pcPrefix, NiFogProperty::FogFunction eFunc);
NiObject *__thiscall NiFogProperty::CreateClone(NiFogProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiFogProperty::CreateObject();
bool __thiscall NiFogProperty::IsEqual(NiFogProperty *this, NiObject *pkObject);
LONG __cdecl NiFogProperty::_SDMInit();
void __cdecl NiFogProperty::_SDMShutdown();
void __thiscall NiFogProperty::LoadBinary(NiFogProperty *this, NiStream *kStream);
void __thiscall NiFogProperty::SaveBinary(NiFogProperty *this, NiStream *kStream);
void __thiscall NiFogProperty::GetViewerStrings(NiFogProperty *this, NiTArray<char *> *pkStrings);
void __thiscall NiAmbientLight::LoadBinary(NiDirectionalLight *this, NiStream *stream);
void __thiscall NiPointLight::LinkObject(NiPointLight *this, NiStream *stream);
bool __thiscall NiAmbientLight::RegisterStreamables(NiPointLight *this, NiStream *stream);
void __thiscall NiAmbientLight::SaveBinary(NiDirectionalLight *this, NiStream *stream);
bool __thiscall NiDirectionalLight::IsEqual(NiDirectionalLight *this, NiObject *pObject);
void __thiscall NiDirectionalLight::NiDirectionalLight(NiDirectionalLight *this);
NiRTTI *__thiscall NiDirectionalLight::GetRTTI(NiDirectionalLight *this);
void *__thiscall NiDirectionalLight::_scalar_deleting_destructor_(NiSpotLight *this, unsigned int);
void __thiscall NiDirectionalLight::UpdateWorldData(NiDirectionalLight *this);
NiObject *__thiscall NiDirectionalLight::CreateClone(NiDirectionalLight *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiDirectionalLight::CreateObject();
void __thiscall NiDirectionalLight::GetViewerStrings(NiDirectionalLight *this, NiTArray<char *> *pStrings);
void __thiscall NiDynamicEffect::CopyMembers(NiDynamicEffect *this, NiDynamicEffect *pkDest, NiCloningProcess *kCloning);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiNode__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiNode *> *this, unsigned int);
void __thiscall NiDynamicEffect::DetachAllAffectedNodes(NiDynamicEffect *this);
void __thiscall NiDynamicEffect::DetachAllUnaffectedNodes(NiDynamicEffect *this);
bool __thiscall NiDynamicEffect::IsEqual(NiDynamicEffect *this, NiObject *pkObject);
bool __thiscall NiDynamicEffect::IsUnaffectedNode(NiDynamicEffect *this, NiNode *pkPossibleNode);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiNode__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiNode__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiNode *> *this);
void *__thiscall NiTPointerList<NiNode__>::_vector_deleting_destructor_(NiTPointerList<NiNode *> *this, unsigned int);
void __thiscall NiDynamicEffect::_NiDynamicEffect(NiDynamicEffect *this);
NiRTTI *__thiscall NiDynamicEffect::GetRTTI(NiDynamicEffect *this);
void __thiscall NiDynamicEffect::AttachAffectedNode(NiDynamicEffect *this, NiNode *pkAffectedNode);
void __thiscall NiDynamicEffect::LinkObject(NiDynamicEffect *this, NiStream *kStream);
void __thiscall NiDynamicEffect::NiDynamicEffect(NiDynamicEffect *this);
void *__thiscall NiDynamicEffect::_vector_deleting_destructor_(NiDynamicEffect *this, unsigned int);
void __thiscall NiDynamicEffect::DetachAffectedNode(NiDynamicEffect *this, NiNode *pkAffectedNode);
void __thiscall NiDynamicEffect::LoadBinary(NiDynamicEffect *this, NiStream *kStream);
void __thiscall NiDynamicEffect::SaveBinary(NiDynamicEffect *this, NiStream *kStream);
void __thiscall NiDynamicEffect::GetViewerStrings(NiDynamicEffect *this, NiTArray<char *> *pkStrings);
void __thiscall NiAmbientLight::NiAmbientLight(NiAmbientLight *this);
NiObject *__cdecl NiAmbientLight::CreateObject();
NiRTTI *__thiscall NiAmbientLight::GetRTTI(NiAmbientLight *this);
NiObject *__thiscall NiAmbientLight::CreateClone(NiAmbientLight *this, NiCloningProcess *kCloning);
void __thiscall NiAmbientLight::GetViewerStrings(NiAmbientLight *this, NiTArray<char *> *pStrings);
void __thiscall NiRTTI::NiRTTI(NiRTTI *this, const char *pcName, NiRTTI *pkBaseRTTI);
void __thiscall NiSortAdjustNode::NiSortAdjustNode(NiSortAdjustNode *this);
void __thiscall NiSortAdjustNode::ProcessClone(NiSortAdjustNode *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiSortAdjustNode::CreateObject();
bool __thiscall NiSortAdjustNode::IsEqual(NiSortAdjustNode *this, NiObject *pObject);
NiRTTI *__thiscall NiSortAdjustNode::GetRTTI(NiSortAdjustNode *this);
void *__thiscall NiSortAdjustNode::_vector_deleting_destructor_(NiSortAdjustNode *this, unsigned int);
void __thiscall NiSortAdjustNode::OnVisible(NiSortAdjustNode *this, NiCullingProcess *kCuller);
NiObject *__thiscall NiSortAdjustNode::CreateClone(NiSortAdjustNode *this, NiCloningProcess *kCloning);
void __thiscall NiSortAdjustNode::LinkObject(NiSortAdjustNode *this, NiStream *stream);
void __thiscall NiSortAdjustNode::LoadBinary(NiSortAdjustNode *this, NiStream *stream);
void __thiscall NiSortAdjustNode::SaveBinary(NiSortAdjustNode *this, NiStream *stream);
void __thiscall NiCamera::_NiCamera(NiCamera *this);
void __thiscall NiCamera::SetViewFrustum(NiCamera *this, NiFrustum *kFrustum);
bool __thiscall NiCamera::WorldPtToScreenPt(NiCamera *this, NiPoint3 *kPt, float *fBx, float *fBy, float fZeroTolerance);
bool __thiscall NiCamera::IsEqual(NiCamera *this, NiObject *pkObject);
NiRTTI *__thiscall NiCamera::GetRTTI(NiCamera *this);
void *__thiscall NiCamera::_scalar_deleting_destructor_(NiCamera *this, unsigned int);
bool __thiscall NiCamera::LookAtWorldPoint(NiCamera *this, NiPoint3 *kWorldPt, NiPoint3 *kWorldUp);
void __thiscall NiCamera::ViewPointToRay(NiCamera *this, float fVx, float fVy, NiPoint3 *kOrigin, NiPoint3 *kDir);
void __thiscall NiCamera::UpdateWorldBound(NiCamera *this);
void __thiscall NiCamera::WorldToCameraMatrix(NiCamera *this);
void __thiscall NiCamera::CopyMembers(NiCamera *this, NiCamera *pkDest, NiCloningProcess *kCloning);
bool __thiscall NiCamera::WindowPointToRay(NiCamera *this, int lWx, int lWy, NiPoint3 *kOrigin, NiPoint3 *kDir);
void __thiscall NiCamera::UpdateWorldData(NiCamera *this);
void __thiscall NiCamera::LinkObject(NiCamera *this, NiStream *kStream);
void __thiscall NiCamera::NiCamera(NiCamera *this);
NiObject *__thiscall NiCamera::CreateClone(NiCamera *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiCamera::CreateObject();
void __thiscall NiCamera::LoadBinary(NiCamera *this, NiStream *kStream);
void __thiscall NiCamera::SaveBinary(NiCamera *this, NiStream *kStream);
void __thiscall NiCamera::GetViewerStrings(NiCamera *this, NiTArray<char *> *pkStrings);
NiShaderFactory *__cdecl NiShaderFactory::GetInstance();
bool __cdecl NiShaderFactory::AttachShader(NiGeometry *pkGeometry, const char *pacName, unsigned int uiImplementation);
bool __cdecl NiShaderFactory::AttachShader(NiGeometry *pkGeometry, NiShader *pkShader);
bool __cdecl NiShaderFactory::DetachShader(NiGeometry *pkGeometry);
int __cdecl NiShaderFactory::ReleaseAllShaders();
bool __cdecl NiShaderFactory::RegisterClassCreationCallback(bool (__cdecl *pfnCallback)(const char *, NiRenderer *, int, char **, bool, NiShaderLibrary **));
bool __cdecl NiShaderFactory::RegisterRunParserCallback(unsigned int (__cdecl *pfnCallback)(const char *, NiRenderer *, const char *, bool));
unsigned int __cdecl NiShaderFactory::ReportError(unsigned int eError, bool bRecoverable, const char *pacFmt);
void __thiscall NiShaderFactory::NiShaderFactory(NiShaderFactory *this);
void __thiscall NiShaderFactory::_NiShaderFactory(NiShaderFactory *this);
bool __cdecl NiShaderFactory::LoadAndRegisterShaderLibrary(const char *pacLibName, int iDirectoryCount, char **pacDirectories, bool bRecurseSubFolders);
unsigned int __cdecl NiShaderFactory::LoadAndRunParserLibrary(const char *pacLibName, const char *pacDirectory, bool bRecurseSubFolders);
void *__thiscall NiShaderFactory::_scalar_deleting_destructor_(NiShaderFactory *this, unsigned int);
void *__thiscall NiTArray<NiTexturingProperty::Map__>::_vector_deleting_destructor_(NiTArray<NiTexturingProperty::Map *> *this, unsigned int);
void *__thiscall NiTArray<NiTexturingProperty::ShaderMap__>::_vector_deleting_destructor_(NiTArray<NiTexturingProperty::ShaderMap *> *this, unsigned int);
void __thiscall NiTexturingProperty::_NiTexturingProperty(NiTexturingProperty *this);
NiRTTI *__thiscall NiTexturingProperty::GetRTTI(NiTexturingProperty *this);
int __thiscall CCallback<SteamCallback_GetAuthSessionTicketResponse_t_0>::GetCallbackSizeBytes(NiTexturingProperty *this);
void __thiscall NiTexturingProperty::SetMultiTexture(NiTexturingProperty *this, NiTexturingProperty::Map *pkMap);
char *__cdecl NiTexturingProperty::GetViewerString(const char *pcPrefix, NiTexturingProperty::ClampMode eMode);
char *__cdecl NiTexturingProperty::GetViewerString(const char *pcPrefix, NiTexturingProperty::FilterMode eMode);
void __thiscall NiTexturingProperty::Map::Map(NiTexturingProperty::Map *this);
void __thiscall NiTexturingProperty::Map::Map(NiTexturingProperty::Map *this, NiTexture *pkTexture, unsigned int uiIndex, NiTexturingProperty::ClampMode eClampMode, NiTexturingProperty::FilterMode eFilterMode, NiTextureTransform *pkTextureTransform);
void __thiscall NiTexturingProperty::Map::Map(NiTexturingProperty::Map *this, NiTexturingProperty::Map *kObj);
bool __thiscall NiTexturingProperty::Map::operator__(NiTexturingProperty::Map *this, NiTexturingProperty::Map *kObj);
bool __thiscall NiTexturingProperty::BumpMap::operator__(NiTexturingProperty::BumpMap *this, NiTexturingProperty::BumpMap *kObj);
void __thiscall NiTexturingProperty::NiTexturingProperty(NiTexturingProperty *this);
void *__thiscall NiTexturingProperty::_vector_deleting_destructor_(NiTexturingProperty *this, unsigned int);
void __thiscall NiTexturingProperty::NiTexturingProperty(NiTexturingProperty *this, const char *pcTextureName);
void __thiscall NiTexturingProperty::SetDecalMap(NiTexturingProperty *this, unsigned int uiIndex, NiTexturingProperty::Map *pkMap);
void __thiscall NiTexturingProperty::SetShaderMap(NiTexturingProperty *this, unsigned int uiIndex, NiTexturingProperty::ShaderMap *pkMap);
NiObject *__cdecl NiTexturingProperty::CreateObject();
void __thiscall NiTexturingProperty::LoadBinary(NiTexturingProperty *this, NiStream *kStream);
void __thiscall NiTexturingProperty::LinkObject(NiTexturingProperty *this, NiStream *kStream);
bool __thiscall NiTexturingProperty::RegisterStreamables(NiTexturingProperty *this, NiStream *kStream);
void __thiscall NiTexturingProperty::SaveBinary(NiTexturingProperty *this, NiStream *kStream);
bool __thiscall NiTexturingProperty::IsEqual(NiTexturingProperty *this, NiObject *pkObject);
LONG __cdecl NiTexturingProperty::_SDMInit();
void __cdecl NiTexturingProperty::_SDMShutdown();
void __thiscall NiTexturingProperty::Map::LoadBinary(NiTexturingProperty::Map *this, NiStream *kStream);
void __thiscall NiTexturingProperty::Map::SaveBinary(NiTexturingProperty::Map *this, NiStream *kStream);
void __thiscall NiTexturingProperty::BumpMap::LoadBinary(NiTexturingProperty::BumpMap *this, NiStream *kStream);
void __thiscall NiTexturingProperty::BumpMap::SaveBinary(NiTexturingProperty::BumpMap *this, NiStream *kStream);
void __thiscall NiTexturingProperty::ShaderMap::LoadBinary(NiTexturingProperty::ShaderMap *this, NiStream *kStream);
void __thiscall NiTexturingProperty::ShaderMap::SaveBinary(NiTexturingProperty::ShaderMap *this, NiStream *kStream);
void *__thiscall NiTexturingProperty::Map::_scalar_deleting_destructor_(NiTexturingProperty::ShaderMap *this, unsigned int);
void __thiscall NiTexturingProperty::CopyMembers(NiTexturingProperty *this, NiTexturingProperty *pkDest, NiCloningProcess *kCloning);
void __thiscall NiTexturingProperty::GetViewerStrings(NiTexturingProperty *this, NiTArray<char *> *pkStrings);
NiObject *__thiscall NiTexturingProperty::CreateClone(NiTexturingProperty *this, NiCloningProcess *kCloning);
void __thiscall NiTexture::AddTextureToList(NiTexture *this);
void __thiscall NiTexture::RemoveTextureFromList(NiTexture *this);
bool __thiscall NiSourceTexture::CreateRendererData(NiSourceTexture *this);
unsigned int __thiscall NiSourceTexture::GetWidth(NiSourceTexture *this);
unsigned int __thiscall NiSourceTexture::GetHeight(NiSourceTexture *this);
void __thiscall NiSourceTexture::LinkObject(NiSourceTexture *this, NiStream *kStream);
void __thiscall NiSourceCubeMap::PostLinkObject(NiSourceTexture *this, NiStream *kStream);
bool __thiscall NiSourceTexture::RegisterStreamables(NiSourceTexture *this, NiStream *kStream);
bool __thiscall NiSourceTexture::IsEqual(NiSourceTexture *this, NiObject *pkObject);
NiRTTI *__thiscall NiTexture::GetRTTI(NiTexture *this);
NiRTTI *__thiscall NiSourceTexture::GetRTTI(NiSourceTexture *this);
void __thiscall NiSourceTexture::_NiSourceTexture(NiSourceTexture *this);
NiSourceTexture *__cdecl NiSourceTexture::Create(const char *pcFilename, NiTexture::FormatPrefs *kPrefs, bool bLoadDirectToRendererHint);
NiSourceTexture *__cdecl NiSourceTexture::Create(NiPixelData *pkPixelData, NiTexture::FormatPrefs *kPrefs);
void __thiscall NiSourceTexture::LoadPixelDataFromFile(NiSourceTexture *this);
NiObject *__cdecl NiSourceTexture::CreateObject();
void *__thiscall NiTexture::_vector_deleting_destructor_(NiTexture *this, unsigned int);
void *__thiscall NiSourceTexture::_vector_deleting_destructor_(NiSourceTexture *this, unsigned int);
void __thiscall NiSourceTexture::LoadBinary(NiSourceTexture *this, NiStream *kStream);
void __thiscall NiSourceTexture::SaveBinary(NiSourceTexture *this, NiStream *kStream);
void __thiscall NiSourceTexture::GetViewerStrings(NiSourceTexture *this, NiTArray<char *> *pkStrings);
bool __thiscall NiPixelFormat::operator__(NiPixelFormat *this, NiPixelFormat *kOther);
NiImageConverter *__cdecl NiImageConverter::GetImageConverter();
void __thiscall NiImageConverter::NiImageConverter(NiImageConverter *this);
void __thiscall NiImageConverter::_NiImageConverter(NiImageConverter *this);
bool __thiscall NiImageConverter::ReadImageFileInfo(NiImageConverter *this, const char *pcFilename, NiPixelFormat *kFmt, bool *bMipmap, unsigned int *uiWidth, unsigned int *uiHeight, unsigned int *uiNumFaces);
NiPixelData *__thiscall NiImageConverter::ReadImageFile(NiImageConverter *this, const char *pcFilename, NiPixelData *pkOptDest);
bool __thiscall NiImageConverter::CanConvertPixelData(NiImageConverter *this, NiPixelFormat *kSrcFmt, NiPixelFormat *kDestFmt);
char *__cdecl NiImageConverter::ConvertFilenameToPlatformSpecific(const char *pcPath);
LONG __cdecl NiImageConverter::_SDMInit();
void __cdecl NiImageConverter::_SDMShutdown();
void __cdecl NiImageConverter::SetImageConverter(NiImageConverter *pkConverter);
void *__thiscall NiImageConverter::_scalar_deleting_destructor_(NiImageConverter *this, unsigned int);
NiPixelData *__thiscall NiImageConverter::ConvertPixelData(NiImageConverter *this, NiPixelData *kSrc, NiPixelFormat *kDestFmt, NiPixelData *pkOptDest, bool bMipmap);
void __thiscall NiTriShape::NiTriShape(NiTriShape *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiPoint3 *pkNormal, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod, unsigned __int16 usTriangles, unsigned __int16 *pusTriList);
void __thiscall NiTriShape::NiTriShape(NiTriShape *this, NiTriShapeData *pkModelData);
void __thiscall NiTriShape::NiTriShape(NiTriShape *this);
void __thiscall NiTriShape::CopyMembers(NiTriShape *this, NiTriShape *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiTriShape::CreateObject();
bool __thiscall NiParticleMeshes::RegisterStreamables(NiTriStrips *this, NiStream *kStream);
void __thiscall NiParticleMeshes::SaveBinary(NiTriStrips *this, NiStream *kStream);
bool __thiscall NiParticleMeshes::IsEqual(NiTriStrips *this, NiObject *pObject);
NiRTTI *__thiscall NiTriShape::GetRTTI(NiTriShape *this);
void __thiscall NiTriShape::GetModelTriangle(NiTriShape *this, unsigned __int16 usTriangle, NiPoint3 **pkP0, NiPoint3 **pkP1, NiPoint3 **pkP2);
NiObject *__thiscall NiTriShape::CreateClone(NiTriShape *this, NiCloningProcess *kCloning);
void __thiscall NiTriShape::RenderImmediate(NiTriShape *this, NiRenderer *pkRenderer);
void __thiscall NiTriShape::GetViewerStrings(NiTriShape *this, NiTArray<char *> *pkStrings);
void __thiscall NiRenderTargetGroup::SetRendererData(NiRenderTargetGroup *this, NiRenderTargetGroup::RendererData *pkRendererData);
unsigned int __thiscall NiRenderTargetGroup::GetWidth(NiRenderTargetGroup *this, unsigned int uiIndex);
unsigned int __thiscall NiRenderTargetGroup::GetHeight(NiRenderTargetGroup *this, unsigned int uiIndex);
unsigned int __thiscall NiRenderTargetGroup::GetDepthStencilWidth(NiRenderTargetGroup *this);
unsigned int __thiscall NiRenderTargetGroup::GetDepthStencilHeight(NiRenderTargetGroup *this);
Ni2DBuffer *__thiscall NiRenderTargetGroup::GetBuffer(NiRenderTargetGroup *this, unsigned int uiIndex);
NiBinaryShader::BoneMatrixCalcMethod __thiscall NiRenderTargetGroup::GetDepthStencilBuffer(NSBRequirements *this);
void __thiscall NiRenderTargetGroup::NiRenderTargetGroup(NiRenderTargetGroup *this);
NiRTTI *__thiscall NiRenderTargetGroup::GetRTTI(NiRenderTargetGroup *this);
void __thiscall NiRenderTargetGroup::_NiRenderTargetGroup(NiRenderTargetGroup *this);
NiPixelFormat *__thiscall NiRenderTargetGroup::GetPixelFormat(NiRenderTargetGroup *this, unsigned int uiIndex);
NiPixelFormat *__thiscall NiRenderTargetGroup::GetDepthStencilPixelFormat(NiRenderTargetGroup *this);
bool __thiscall NiRenderTargetGroup::AttachBuffer(NiRenderTargetGroup *this, Ni2DBuffer *pkBuffer, unsigned int uiIndex);
bool __thiscall NiRenderTargetGroup::AttachDepthStencilBuffer(NiRenderTargetGroup *this, NiDepthStencilBuffer *pkDepthBuffer);
Ni2DBuffer::RendererData *__thiscall NiRenderTargetGroup::GetBufferRendererData(NiRenderTargetGroup *this, unsigned int uiIndex);
Ni2DBuffer::RendererData *__thiscall NiRenderTargetGroup::GetDepthStencilBufferRendererData(NiRenderTargetGroup *this);
NiRenderTargetGroup *__cdecl NiRenderTargetGroup::Create(unsigned int uiNumBuffers, NiRenderer *pkRenderer);
NiRenderTargetGroup *__cdecl NiRenderTargetGroup::Create(Ni2DBuffer *pkBuffer, NiRenderer *pkRenderer, NiDepthStencilBuffer *pkDSBuffer);
void *__thiscall NiRenderTargetGroup::_scalar_deleting_destructor_(NiRenderTargetGroup *this, unsigned int);
void __thiscall NiRenderTargetGroup::GetViewerStrings(NiRenderTargetGroup *this, NiTArray<char *> *pkStrings);
NiRenderTargetGroup *__cdecl NiRenderTargetGroup::Create(Ni2DBuffer *pkBuffer, NiRenderer *pkRenderer, bool bUseDefaultDepthStencil, bool bCreateCompatibleDepthStencil);
bool __cdecl NiIsPowerOf2(unsigned int uiI);
void __thiscall NiRenderedTexture::NiRenderedTexture(NiRenderedTexture *this);
NiRTTI *__thiscall NiRenderedTexture::GetRTTI(NiRenderedTexture *this);
unsigned int __thiscall NiRenderedTexture::GetWidth(NiRenderedTexture *this);
unsigned int __thiscall NiRenderedTexture::GetHeight(NiRenderedTexture *this);
NiRenderedTexture *__cdecl NiRenderedTexture::Create(unsigned int uiWidth, unsigned int uiHeight, NiRenderer *pkRenderer, NiTexture::FormatPrefs *kPrefs);
void *__thiscall NiRenderedTexture::_vector_deleting_destructor_(NiRenderedTexture *this, unsigned int);
void __thiscall NiScreenElementsData::UpdateBound(NiScreenElementsData *this);
NiObject *__cdecl NiScreenElementsData::CreateObject();
void __thiscall NiTriShapeDynamicData::LinkObject(NiTriShapeDynamicData *this, NiStream *kStream);
bool __thiscall NiScreenElementsData::IsEqual(NiScreenElementsData *this, NiObject *pkObject);
unsigned __int16 __thiscall NiGeometryData::GetActiveVertexCount(NiGeometryData *this);
unsigned __int16 __thiscall NiTriBasedGeomData::GetActiveTriangleCount(NiTriBasedGeomData *this);
NiRTTI *__thiscall NiScreenElementsData::GetRTTI(NiScreenElementsData *this);
void *__thiscall NiScreenElementsData::_scalar_deleting_destructor_(NiScreenElementsData *this, unsigned int);
int __thiscall NiScreenElementsData::Insert(NiScreenElementsData *this, unsigned __int16 usNumVertices, unsigned __int16 usNumTriangles, const unsigned __int16 *ausTriList);
void __thiscall NiScreenElementsData::RemoveAll(NiScreenElementsData *this);
bool __thiscall NiScreenElementsData::SetVertex(NiScreenElementsData *this, int iPolygon, int iVertex, NiPoint2 *kValue);
bool __thiscall NiScreenElementsData::SetRectangle(NiScreenElementsData *this, int iPolygon, float fLeft, float fTop, float fWidth, float fHeight);
bool __thiscall NiScreenElementsData::GetRectangle(NiScreenElementsData *this, int iPolygon, float *fLeft, float *fTop, float *fWidth, float *fHeight);
bool __thiscall NiScreenElementsData::SetColors(NiScreenElementsData *this, int iPolygon, NiColorA *kCommonValue);
bool __thiscall NiScreenElementsData::SetTexture(NiScreenElementsData *this, int iPolygon, int iVertex, unsigned __int16 usSet, NiPoint2 *kValue);
bool __thiscall NiScreenElementsData::GetTexture(NiScreenElementsData *this, int iPolygon, int iVertex, unsigned __int16 usSet, NiPoint2 *kValue);
bool __thiscall NiScreenElementsData::SetTextures(NiScreenElementsData *this, int iPolygon, unsigned __int16 usSet, float fLeft, float fTop, float fRight, float fBottom);
bool __thiscall NiScreenElementsData::SetTextures(NiScreenElementsData *this, int iPolygon, unsigned __int16 usSet, NiPoint2 *kUpperLeft, NiPoint2 *kLowerLeft, NiPoint2 *kLowerRight, NiPoint2 *kUpperRight);
bool __thiscall NiScreenElementsData::GetTextures(NiScreenElementsData *this, int iPolygon, unsigned __int16 usSet, NiPoint2 *kUpperLeft, NiPoint2 *kLowerLeft, NiPoint2 *kLowerRight, NiPoint2 *kUpperRight);
NiPoint3 *__thiscall NiScreenElementsData::GetVertices(NiScreenElementsData *this, int iPolygon);
NiPoint2 *__thiscall NiScreenElementsData::GetTextures(NiScreenElementsData *this, int iPolygon, unsigned __int16 usSet);
void __thiscall NiScreenElementsData::NiScreenElementsData(NiScreenElementsData *this, bool bWantNormals, bool bWantColors, unsigned __int16 usNumTextureSets, int iMaxPQuantity, int iPGrowBy, int iMaxVQuantity, int iVGrowBy, int iMaxTQuantity, int iTGrowBy);
void __thiscall NiScreenElementsData::LoadBinary(NiScreenElementsData *this, NiStream *kStream);
void __thiscall NiScreenElementsData::SaveBinary(NiScreenElementsData *this, NiStream *kStream);
void __thiscall NiScreenElementsData::GetViewerStrings(NiScreenElementsData *this, NiTArray<char *> *pkStrings);
void __thiscall NiScreenElements::_NiScreenElements(NiScreenElements *this);
void __thiscall NiScreenElements::Draw(NiScreenElements *this, NiRenderer *pkRenderer);
NiObject *__cdecl NiScreenElements::CreateObject();
bool __thiscall NiScreenGeometry::IsEqual(NiScreenElements *this, NiObject *pkObject);
NiRTTI *__thiscall NiScreenElements::GetRTTI(NiScreenElements *this);
void __thiscall NiScreenElements::NiScreenElements(NiScreenElements *this, NiScreenElementsData *pkModelData);
void *__thiscall NiScreenElements::_vector_deleting_destructor_(NiScreenElements *this, unsigned int);
NiObject *__thiscall NiScreenElements::CreateClone(NiScreenElements *this, NiCloningProcess *kCloning);
void __thiscall NiScreenElements::GetViewerStrings(NiScreenElements *this, NiTArray<char *> *pkStrings);
void __thiscall NiExtraData::NiExtraData(NiExtraData *this);
void __thiscall NiExtraData::_NiExtraData(NiExtraData *this);
void __thiscall NiAccumulator::FinishAccumulating(NiExtraData *this);
NiObject *__cdecl NiExtraData::CreateObject();
void __thiscall NiExtraData::SaveBinary(NiExtraData *this, NiStream *kStream);
bool __thiscall NiExtraData::IsEqual(NiExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiExtraData::GetRTTI(NiExtraData *this);
void *__thiscall NiExtraData::_vector_deleting_destructor_(NiExtraData *this, unsigned int);
void __thiscall NiExtraData::SetName(NiExtraData *this, const char *pcName);
void __thiscall NiExtraData::CopyMembers(NiExtraData *this, NiExtraData *pDest, NiCloningProcess *kCloning);
void __thiscall NiExtraData::LinkObject(NiExtraData *this, NiStream *kStream);
void __thiscall NiExtraData::LoadBinary(NiExtraData *this, NiStream *kStream);
void __thiscall NiExtraData::GetViewerStrings(NiExtraData *this, NiTArray<char *> *pkStrings);
bool __thiscall NiVertWeightsExtraData::RegisterStreamables(NPTR_ISShader_v2 *this, NiStream *stream);
bool __thiscall NiBinaryExtraData::IsEqual(NiBinaryExtraData *this, NiObject *pObject);
NiObject *__cdecl NiBinaryExtraData::CreateObject();
NiObject *__thiscall NiBinaryExtraData::CreateClone(NiBinaryExtraData *this, NiCloningProcess *kCloning);
void __thiscall NiBinaryExtraData::LoadBinary(NiBinaryExtraData *this, NiStream *kStream);
void __thiscall NiBinaryExtraData::SaveBinary(NiBinaryExtraData *this, NiStream *kStream);
void __thiscall NiBinaryExtraData::GetViewerStrings(NiBinaryExtraData *this, NiTArray<char *> *pStrings);
void __thiscall NiShader::NiShader(NiShader *this);
NiRTTI *__thiscall NiShader::GetRTTI(NiShader *this);
void __thiscall NiShader::_NiShader(NiShader *this);
void __thiscall NiShader::SetName(NiShaderLibrary *this, char *pszName);
void *__thiscall NiShader::_vector_deleting_destructor_(NiShader *this, unsigned int);
void __thiscall NiShader::SaveBinary(NiShader *this, NiStream *kStream);
void __thiscall NiShader::LoadBinary(NiShader *this, NiStream *kStream);
bool __thiscall NiPixelFormat::GetCompressed(NiPixelFormat *this);
void __thiscall NiPixelData::LinkObject(NiPixelData *this, NiStream *kStream);
bool __thiscall NiPixelData::RegisterStreamables(NiPixelData *this, NiStream *kStream);
bool __thiscall NiPixelData::IsEqual(NiPixelData *this, NiObject *pkObject);
NiRTTI *__thiscall NiPixelData::GetRTTI(NiPixelData *this);
void __thiscall NiPixelData::NiPixelData(NiPixelData *this, NiPixelData *kSrc);
void __thiscall NiPixelData::NiPixelData(NiPixelData *this, unsigned int uiWidth, unsigned int uiHeight, NiPixelFormat *kFormat, unsigned int uiMipmapLevels, unsigned int uiFaces);
void __thiscall NiPixelData::_NiPixelData(NiPixelData *this);
NiObject *__cdecl NiPixelData::CreateObject();
void *__thiscall NiPixelData::_vector_deleting_destructor_(NiPixelData *this, unsigned int);
void __thiscall NiPixelData::LoadBinary(NiPixelData *this, NiStream *kStream);
void __thiscall NiPixelData::SaveBinary(NiPixelData *this, NiStream *kStream);
void __thiscall NiPixelData::GetViewerStrings(NiPixelData *this, NiTArray<char *> *pkStrings);
void __thiscall NiPixelFormat::NiPixelFormat(NiPixelFormat *this, NiPixelFormat *kFormat);
void __thiscall NiPixelFormat::ConvertOldPixelFormat(NiPixelFormat *this, NiPixelFormat::Format eFormat, char ucBPP, unsigned int *auiColorMasks);
void __thiscall NiPixelFormat::NiPixelFormat(NiPixelFormat *this);
NiPixelFormat *__cdecl NiPixelFormat::CreateFromRGBAMasks(NiPixelFormat *result, char ucBitsPerPixel, unsigned int uiMaskRed, unsigned int uiMaskGreen, unsigned int uiMaskBlue, unsigned int uiMaskAlpha);
void __thiscall NiPixelFormat::LoadBinary(NiPixelFormat *this, NiStream *kStream);
void __thiscall NiPixelFormat::SaveBinary(NiPixelFormat *this, NiStream *kStream);
bool __thiscall NiZBufferProperty::IsEqual(NiZBufferProperty *this, NiObject *pkObject);
NiObject *__thiscall NiZBufferProperty::CreateClone(NiZBufferProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiZBufferProperty::CreateObject();
LONG __cdecl NiZBufferProperty::_SDMInit();
void __cdecl NiZBufferProperty::_SDMShutdown();
void __thiscall NiZBufferProperty::LoadBinary(NiZBufferProperty *this, NiStream *kStream);
void __thiscall NiZBufferProperty::SaveBinary(NiZBufferProperty *this, NiStream *kStream);
void __thiscall NiZBufferProperty::GetViewerStrings(NiZBufferProperty *this, NiTArray<char *> *pkStrings);
void __thiscall NiAlphaAccumulator::NiAlphaAccumulator(NiAlphaAccumulator *this);
NiObject *__cdecl NiAlphaAccumulator::CreateObject();
void __thiscall NiAlphaAccumulator::LoadBinary(NiAlphaAccumulator *this, NiStream *kStream);
bool __thiscall NiPSysVolumeEmitter::RegisterStreamables(NiPSysVortexFieldModifier *this, NiStream *kStream);
void __thiscall NiAlphaAccumulator::LinkObject(NiAlphaAccumulator *this, NiStream *kStream);
bool __thiscall NiAlphaAccumulator::IsEqual(NiAlphaAccumulator *this, NiObject *pkObject);
NiRTTI *__thiscall NiAlphaAccumulator::GetRTTI(NiAlphaAccumulator *this);
void *__thiscall NiAlphaAccumulator::_vector_deleting_destructor_(NiAlphaAccumulator *this, unsigned int);
void __thiscall NiAlphaAccumulator::Sort(NiAlphaAccumulator *this);
NiObject *__thiscall NiAlphaAccumulator::CreateClone(NiAlphaAccumulator *this, NiCloningProcess *kCloning);
void __thiscall NiAlphaAccumulator::RegisterObjectArray(NiAlphaAccumulator *this, NiVisibleArray *kArray);
void __thiscall NiFrustum::NiFrustum(NiFrustum *this, bool bOrtho);
void __thiscall NiFrustum::NiFrustum(NiFrustum *this, float fLeft, float fRight, float fTop, float fBottom, float fNear, float fFar, bool bOrtho);
char *__thiscall NiFrustum::GetViewerString(NiFrustum *this, const char *pcPrefix);
bool __thiscall NiIntegerExtraData::IsEqual(NiIntegerExtraData *this, NiObject *pObject);
NiObject *__thiscall NiIntegerExtraData::CreateClone(NiIntegerExtraData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiIntegerExtraData::CreateObject();
void __thiscall NiFloatExtraData::LoadBinary(NiIntegerExtraData *this, NiStream *kStream);
void __thiscall NiIntegerExtraData::GetViewerStrings(NiIntegerExtraData *this, NiTArray<char *> *pStrings);
void __thiscall NiStringExtraData::LoadBinary(NiStringExtraData *this, NiStream *stream);
void __thiscall NiStringExtraData::SaveBinary(NiStringExtraData *this, NiStream *stream);
bool __thiscall NiStringExtraData::IsEqual(NiStringExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiStringExtraData::GetRTTI(NiStringExtraData *this);
NiObject *__cdecl NiStringExtraData::CreateObject();
void *__thiscall NiStringExtraData::_scalar_deleting_destructor_(NiStringExtraData *this, unsigned int);
void __thiscall NiStringExtraData::NiStringExtraData(NiStringExtraData *this, const char *pString);
NiObject *__thiscall NiStringExtraData::CreateClone(NiStringExtraData *this, NiCloningProcess *kCloning);
void __thiscall NiStringExtraData::GetViewerStrings(NiStringExtraData *this, NiTArray<char *> *pStrings);
bool __thiscall NiBound::operator__(NiBound *this, NiBound *bound);
void __thiscall NiBound::ComputeFromData(NiBound *this, int iQuantity, NiPoint3 *pkData);
void __thiscall NiBound::Merge(NiBound *this, NiBound *pBound);
void __thiscall NiBound::Update(NiBound *this, NiBound *bound, NiTransform *xform);
bool __thiscall NiTimeController::IsEqual(NiTimeController *this, NiObject *pkObject);
unsigned int __thiscall NiTimeController::ItemsInList(NiTimeController *this);
void __thiscall NiTimeController::Start(NiTimeController *this, float fTime);
void __thiscall NiTimeController::Stop(NiTimeController *this);
float __thiscall NiTimeController::ComputeScaledTime(NiTimeController *this, float fTime);
void __thiscall NiTimeController::CopyMembers(NiTimeController *this, NiTimeController *pkDest, NiCloningProcess *kCloning);
void __thiscall NiTimeController::ProcessClone(NiTimeController *this, NiCloningProcess *kCloning);
bool __thiscall NiTimeController::RegisterStreamables(NiTimeController *this, NiStream *kStream);
char *__cdecl NiTimeController::GetViewerString(const char *pcPrefix, NiTimeController::CycleType eType);
void __thiscall NiTimeController::NiTimeController(NiTimeController *this);
NiRTTI *__thiscall NiTimeController::GetRTTI(NiTimeController *this);
void __thiscall NiTimeController::_NiTimeController(NiTimeController *this);
void __cdecl NiTimeController::StartAnimations(NiObjectNET *pkObj, float fTime);
void __thiscall NiTimeController::SetTarget(NiTimeController *this, NiObjectNET *pkTarget);
void __thiscall NiTimeController::LinkObject(NiTimeController *this, NiStream *kStream);
void *__thiscall NiInterpController::_vector_deleting_destructor_(NiPSysUpdateCtlr *this, unsigned int);
void __thiscall NiTimeController::LoadBinary(NiTimeController *this, NiStream *kStream);
void __thiscall NiTimeController::SaveBinary(NiTimeController *this, NiStream *kStream);
void __thiscall NiTimeController::GetViewerStrings(NiTimeController *this, NiTArray<char *> *pkStrings);
void __thiscall NiPoint2::LoadBinary(NiPoint2 *this, NiStream *stream);
void __thiscall NiPoint2::SaveBinary(NiPoint2 *this, NiStream *stream);
bool __thiscall NiRangeLODData::IsEqual(NiRangeLODData *this, NiObject *pkObject);
NiRTTI *__thiscall NiRangeLODData::GetRTTI(NiRangeLODData *this);
void __thiscall NiRangeLODData::NiRangeLODData(NiRangeLODData *this);
void *__thiscall NiRangeLODData::_scalar_deleting_destructor_(NiRangeLODData *this, unsigned int);
void __thiscall NiRangeLODData::UpdateWorldData(NiRangeLODData *this, NiLODNode *pkLOD);
void __thiscall NiRangeLODData::SetNumRanges(NiRangeLODData *this, unsigned int uiNumRanges);
int __thiscall NiRangeLODData::GetLODLevel(NiRangeLODData *this, NiCamera *pkCamera, NiLODNode *pkLOD);
int __thiscall NiRangeLODData::GetLODIndex(NiRangeLODData *this, int iLODLevel);
NiObject *__cdecl NiRangeLODData::CreateObject();
NiLODData *__thiscall NiRangeLODData::Duplicate(NiRangeLODData *this);
NiObject *__thiscall NiRangeLODData::CreateClone(NiRangeLODData *this, NiCloningProcess *kCloning);
void __thiscall NiRangeLODData::SaveBinary(NiRangeLODData *this, NiStream *kStream);
void __thiscall NiRangeLODData::LoadBinary(NiRangeLODData *this, NiStream *kStream);
void __thiscall NiRangeLODData::GetViewerStrings(NiRangeLODData *this, NiTArray<char *> *pkStrings);
void __thiscall NiLODNode::UpdateWorldData(NiLODNode *this);
void __thiscall NiLODNode::OnVisible(NiLODNode *this, NiCullingProcess *kCuller);
void __thiscall NiLODNode::UpdateAllChildren(NiLODNode *this);
void __thiscall NiLODNode::LinkObject(NiLODNode *this, NiStream *kStream);
bool __thiscall NiLODNode::RegisterStreamables(NiLODNode *this, NiStream *kStream);
void __thiscall NiLODNode::SaveBinary(NiLODNode *this, NiStream *kStream);
NiRTTI *__thiscall NiLODNode::GetRTTI(NiLODNode *this);
void __thiscall NiLODNode::CopyMembers(NiLODNode *this, NiLODNode *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiLODNode::CreateObject();
bool __thiscall NiLODNode::IsEqual(NiLODNode *this, NiObject *pkObject);
void *__thiscall NiLODNode::_scalar_deleting_destructor_(NiLODNode *this, unsigned int);
NiObject *__thiscall NiLODNode::CreateClone(NiLODNode *this, NiCloningProcess *kCloning);
void __thiscall NiLODNode::LoadBinary(NiLODNode *this, NiStream *kStream);
void __thiscall NiLODNode::GetViewerStrings(NiLODNode *this, NiTArray<char *> *pkStrings);
void __thiscall NiGeometry::OnVisible(NiGeometry *this, NiCullingProcess *kCuller);
void __thiscall NiGeometry::CalculateNormals(NiGeometry *this);
void __thiscall NiGeometry::UpdateWorldBound(NiGeometry *this);
void __thiscall NiGeometry::UpdateEffectsDownward(NiGeometry *this, NiDynamicEffectState *pkParentState);
void __thiscall NiGeometry::ApplyTransform(NiGeometry *this, NiMatrix3 *kMat, NiPoint3 *kTrn, bool bOnLeft);
void __thiscall NiGeometry::CopyMembers(NiGeometry *this, NiGeometry *pkDest, NiCloningProcess *kCloning);
bool __thiscall NiGeometry::RegisterStreamables(NiGeometry *this, NiStream *kStream);
bool __thiscall NiGeometry::IsEqual(NiGeometry *this, NiObject *pkObject);
void __thiscall NiGeometry::NiGeometry(NiGeometry *this, NiGeometryData *pkModelData);
NiRTTI *__thiscall NiGeometry::GetRTTI(NiGeometry *this);
void __thiscall NiGeometry::NiGeometry(NiGeometry *this);
void __thiscall NiGeometry::_NiGeometry(NiGeometry *this);
void __thiscall NiGeometry::RenderImmediate(NiGeometry *this, NiRenderer *pkRenderer);
void __thiscall NiGeometry::SetModelData(NiGeometry *this, NiGeometryData *pkModelData);
void __thiscall NiGeometry::UpdatePropertiesDownward(NiGeometry *this, NiPropertyState *pkParentState);
void __thiscall NiGeometry::SetSelectiveUpdateFlags(NiGeometry *this, bool *bSelectiveUpdate, bool bSelectiveUpdateTransforms, bool *bRigid);
void __thiscall NiGeometry::CalculateConsistency(NiGeometry *this, bool bTool);
void __thiscall NiGeometry::PurgeRendererData(NiGeometry *this, NiRenderer *pkRenderer);
void __thiscall NiGeometry::ProcessClone(NiGeometry *this, NiCloningProcess *kCloning);
void __thiscall NiGeometry::PostLinkObject(NiGeometry *this, NiStream *kStream);
void __thiscall NiGeometry::LinkObject(NiGeometry *this, NiStream *kStream);
void __thiscall NiGeometry::LoadBinary(NiGeometry *this, NiStream *kStream);
void __thiscall NiGeometry::SaveBinary(NiGeometry *this, NiStream *kStream);
void __thiscall NiGeometry::GetViewerStrings(NiGeometry *this, NiTArray<char *> *pkStrings);
int __cdecl NiSkinPartition::VertexInteractions::CompareWeights(const void *pv0, const void *pv1);
int __cdecl NiSkinPartition::BoneSet::CompareBones(const void *pv0, const void *pv1);
unsigned int __thiscall NiSkinPartition::Partition::GetStripLengthSum(NiSkinPartition::Partition *this);
void __thiscall NiSkinPartition::NiSkinPartition(NiSkinPartition *this);
NiObject *__cdecl NiSkinPartition::CreateObject();
bool __thiscall NiSkinPartition::IsEqual(NiSkinPartition *this, NiObject *pkObject);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_float>::SetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,float> *this, unsigned int key, float val);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_float>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,float> *this, NiTMapItem<unsigned int,float> *pkItem, unsigned int key, float val);
void __thiscall NiTSet<unsigned_short>::Realloc(NiTSet<unsigned short> *this, unsigned int uiNewSize);
NiRTTI *__thiscall NiSkinPartition::GetRTTI(NiSkinPartition *this);
void __thiscall NiSkinPartition::VertexInteractions::Unitize(NiSkinPartition::VertexInteractions *this);
bool __thiscall NiSkinPartition::BoneSet::Contains(NiSkinPartition::BoneSet *this, NiSkinPartition::BoneSet *kThat);
bool __thiscall NiSkinPartition::BoneSet::ContainsVertex(NiSkinPartition::BoneSet *this, NiSkinPartition::VertexInteractions *kVertex);
unsigned __int16 __thiscall NiSkinPartition::BoneSetMerger::GetNext(NiSkinPartition::BoneSetMerger *this);
unsigned __int16 *__thiscall NiSkinPartition::Partition::CreateVertexMap(NiSkinPartition::Partition *this, NiSkinPartition::TriangleSet *kTriangles, NiTriBasedGeomData *pkTriData);
void __thiscall NiSkinPartition::Partition::CreateTriangleList(NiSkinPartition::Partition *this, NiSkinPartition::TriangleSet *kTriangles, NiTriBasedGeomData *pkTriData, const unsigned __int16 *pusVertexPartitionIndex);
void *__thiscall NiSkinPartition::_vector_deleting_destructor_(NiSkinPartition *this, unsigned int);
void __thiscall NiSkinPartition::MakeBoneMap(NiSkinPartition *this, NiTPointerMap<unsigned int,float> *kMap, const unsigned __int16 *pusTriangle, NiSkinPartition::VertexInteractions *pkVertexInteraction);
void *__thiscall NiSkinPartition::Partition::_vector_deleting_destructor_(NiSkinPartition::Partition *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_float>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,float> *this, unsigned int);
void __thiscall NiSkinPartition::BoneSet::Merge(NiSkinPartition::BoneSet *this, NiSkinPartition::BoneSet *kThat);
void __thiscall NiSkinPartition::TriangleSet::AddTriangles(NiSkinPartition::TriangleSet *this, unsigned int uiPartition, const unsigned int *puiTriangleToPartition, unsigned int uiTriangles);
void __thiscall NiSkinPartition::Partition::Create(NiSkinPartition::Partition *this, NiSkinPartition::TriangleSet *kTriangles, NiSkinPartition::BoneSet *kBones, NiTriBasedGeomData *pkTriData, NiSkinPartition::VertexInteractions *pkVertexInteraction, bool bNeedPalette, bool bForcePalette, char ucBonesPerVertex, unsigned int uiMaxBones);
void __thiscall NiSkinPartition::Partition::LoadBinary(NiSkinPartition::Partition *this, NiStream *kStream);
void __thiscall NiSkinPartition::Partition::SaveBinary(NiSkinPartition::Partition *this, NiStream *kStream);
NiSkinPartition::VertexInteractions *__thiscall NiSkinPartition::CreateVertexInteractions(NiSkinPartition *this, unsigned int uiVertices, NiSkinData *pkSkinData);
void __thiscall NiSkinPartition::MergeBoneSets(NiSkinPartition *this, char ucBonesPerPartition, NiTSet<NiSkinPartition::BoneSet *> *kBoneSets);
int __cdecl NiSkinPartition::AssignTriangle(NiTSet<NiSkinPartition::BoneSet *> *kBoneSets, const unsigned __int16 *pusTriangle, NiSkinPartition::VertexInteractions *pkVertexInteraction, bool *pbAssigned, bool bAssign);
void __thiscall NiSkinPartition::LoadBinary(NiSkinPartition *this, NiStream *kStream);
void __thiscall NiSkinPartition::SaveBinary(NiSkinPartition *this, NiStream *kStream);
void *__thiscall NiTPointerMap<unsigned_int_float>::_scalar_deleting_destructor_(NiTPointerMap<unsigned int,float> *this, unsigned int);
bool __thiscall NiSkinPartition::RemoveExcessInteractions(NiSkinPartition *this, NiTriBasedGeomData *pkTriData, char ucBonesPerPartition, char ucBonesPerVertex, NiSkinPartition::VertexInteractions *pkVertexInteraction);
void __thiscall NiSkinPartition::CreateInitialBoneSets(NiSkinPartition *this, NiTriBasedGeomData *pkTriData, NiSkinPartition::VertexInteractions *pkVertexInteraction, NiTSet<NiSkinPartition::BoneSet *> *kBoneSets);
void __thiscall NiSkinPartition::MakeBoneSets(NiSkinPartition *this, NiTriBasedGeomData *pkTriData, NiSkinData *pkSkinData, char ucBonesPerPartition, NiSkinPartition::VertexInteractions *pkVertexInteraction, NiTSet<NiSkinPartition::BoneSet *> *kBoneSets, unsigned int **puiTriangleToPartition);
bool __thiscall NiSkinPartition::MakePartitions(NiSkinPartition *this, NiTriBasedGeomData *pkTriData, NiSkinData *pkSkinData, char ucBonesPerPartition, char ucBonesPerVertex, bool bForcePalette);
void __thiscall NiTriBasedGeomData::NiTriBasedGeomData(NiTriBasedGeomData *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiPoint3 *pkNormal, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod, unsigned __int16 usTriangles);
void __thiscall NiTriBasedGeomData::NiTriBasedGeomData(NiTriBasedGeomData *this);
void __thiscall NiTriBasedGeomData::_NiTriBasedGeomData(NiTriBasedGeomData *this);
bool __thiscall NiTriBasedGeomData::IsEqual(NiTriBasedGeomData *this, NiObject *pkObject);
NiRTTI *__thiscall NiTriBasedGeomData::GetRTTI(NiTriBasedGeomData *this);
void *__thiscall NiTriBasedGeomData::_scalar_deleting_destructor_(NiTriBasedGeomData *this, unsigned int);
void __thiscall NiTriBasedGeomData::LoadBinary(NiTriBasedGeomData *this, NiStream *kStream);
void __thiscall NiTriBasedGeomData::SaveBinary(NiTriBasedGeomData *this, NiStream *kStream);
void __thiscall NiTriBasedGeomData::GetViewerStrings(NiTriBasedGeomData *this, NiTArray<char *> *pkStrings);
void __thiscall NiTriBasedGeom::NiTriBasedGeom(NiTriBasedGeom *this, NiTriBasedGeomData *pkModelData);
void __thiscall NiTriBasedGeom::NiTriBasedGeom(NiTriBasedGeom *this);
void __thiscall NiTriBasedGeom::_NiTriBasedGeom(NiTriBasedGeom *this);
NiRTTI *__thiscall NiTriBasedGeom::GetRTTI(NiTriBasedGeom *this);
void *__thiscall NiTriBasedGeom::_scalar_deleting_destructor_(NiTriBasedGeom *this, unsigned int);
void __thiscall NiTriBasedGeom::GetViewerStrings(NiTriBasedGeom *this, NiTArray<char *> *pkStrings);
int __cdecl CompareBoneNames(const void *pvName0, const void *pvName1);
bool __thiscall NiSkinInstance::NeedClone(NiSkinInstance *this, NiCloningProcess *kCloning);
void __thiscall NiSkinInstance::LoadBinary(NiSkinInstance *this, NiStream *kStream);
void __thiscall NiSkinInstance::LinkObject(NiSkinInstance *this, NiStream *kStream);
bool __thiscall NiSkinInstance::RegisterStreamables(NiSkinInstance *this, NiStream *kStream);
bool __thiscall NiSkinInstance::IsEqual(NiSkinInstance *this, NiObject *pkObject);
void __thiscall NiSkinInstance::UpdateModelBound(NiSkinInstance *this, NiBound *kBound);
void __thiscall NiSkinInstance::CopyMembers(NiSkinInstance *this, NiSkinInstance *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiSkinInstance::CreateObject();
void __thiscall NiSkinInstance::PostLinkObject(NiSkinInstance *this, NiStream *kStream);
void __thiscall NiSkinInstance::SaveBinary(NiSkinInstance *this, NiStream *kStream);
NiObject *__thiscall NiSkinInstance::CreateClone(NiSkinInstance *this, NiCloningProcess *kCloning);
void __thiscall NiSkinInstance::GetViewerStrings(NiSkinInstance *this, NiTArray<char *> *pkStrings);
void __thiscall NiSkinInstance::_NiSkinInstance(NiSkinInstance *this);
void __thiscall NiSkinInstance::Deform(NiSkinInstance *this, NiPoint3 *pkSrcVertex, NiPoint3 *pkSrcNormal, unsigned int uiVertices, NiPoint3 *pkDstVertex, NiPoint3 *pkDstNormal, NiPoint3 *pkDstBinormal, NiPoint3 *pkDstTangent, unsigned int uiStride);
void __thiscall NiAccumulator::NiAccumulator(NiAccumulator *this);
void __thiscall IDirectMessenger::SetMessageNum(NSBRequirements *this, unsigned int uiVersion);
void __thiscall NiCollisionObject::_NiCollisionObject(NiCollisionObject *this);
void __thiscall NiInterpolator::CopyMembers(NiCollisionObject *this, NiCollisionObject *pDest, NiCloningProcess *kCloning);
void __thiscall NiCollisionObject::LoadBinary(NiCollisionObject *this, NiStream *kStream);
void __thiscall NiCollisionObject::LinkObject(NiCollisionObject *this, NiStream *kStream);
bool __thiscall NiCollisionObject::RegisterStreamables(NiCollisionObject *this, NiStream *kStream);
void __thiscall NiCollisionObject::SaveBinary(NiCollisionObject *this, NiStream *kStream);
bool __thiscall NiCollisionObject::IsEqual(NiCollisionObject *this, NiObject *pkObject);
NiRTTI *__thiscall NiCollisionObject::GetRTTI(NiCollisionObject *this);
void __thiscall NiCollisionObject::SetSceneGraphObject(NiCollisionObject *this, NiAVObject *pkSceneObject);
void __thiscall NiCollisionObject::NiCollisionObject(NiCollisionObject *this, NiAVObject *pkSceneObject);
void __thiscall NiCollisionObject::GetViewerStrings(NiCollisionObject *this, NiTArray<char *> *pkStrings);
void __thiscall NiCollisionObject::AddViewerStrings(NiCollisionObject *this, NiTArray<char *> *pkStrings);
void __cdecl NiTexture::RendererData::_SDMInit();
void __thiscall NiProperty::LinkObject(NiTexture *this, NiStream *kStream);
unsigned int __thiscall NiPixelFormat::GetMask(NiPixelFormat *this, NiPixelFormat::Component eComp);
void __cdecl NiTexture::RendererData::_SDMShutdown();
void __cdecl NiTexture::RendererData::SetTextureReplacementFormat(NiPixelFormat *kFormat);
NiPixelData *__cdecl NiTexture::RendererData::MakeDataFromColors(NiColorA *kTopLeftColor, NiColorA *kBottomLeftColor, NiPixelFormat *kDesc, unsigned int uiNumFaces);
NiPixelData *__cdecl NiTexture::RendererData::DefaultTextureFailureCallback(NiTexture *pkTexture, NiTexture::RendererData::CreationFailure eFailure);
NiPixelData *__cdecl NiTexture::RendererData::GetReplacementData(NiTexture *pkTexture, NiTexture::RendererData::CreationFailure eFailure, bool bReport);
void __thiscall NiTexture::GetViewerStrings(NiTexture *this, NiTArray<char *> *pkStrings);
void __thiscall NiPlane::NiPlane(NiPlane *this);
void __thiscall NiPlane::NiPlane(NiPlane *this, NiPoint3 *kNormal, float fConstant);
void __thiscall NiPlane::NiPlane(NiPlane *this, NiPoint3 *kNormal, NiPoint3 *kPoint);
char *__thiscall NiPlane::GetViewerString(NiPlane *this, const char *pPrefix);
void __thiscall NiSphere::LoadBinary(NiPlane *this, NiStream *stream);
void __thiscall NiFrustumPlanes::Set(NiFrustumPlanes *this, NiFrustum *kFrust, NiTransform *kXform);
bool __thiscall NiStencilProperty::IsEqual(NiStencilProperty *this, NiObject *pObject);
NiObject *__thiscall NiStencilProperty::CreateClone(NiStencilProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiStencilProperty::CreateObject();
char *__cdecl NiStencilProperty::GetViewerString(const char *pPrefix, NiStencilProperty::TestFunc eFunc);
char *__cdecl NiStencilProperty::GetViewerString(const char *pPrefix, NiStencilProperty::Action eAct);
char *__cdecl NiStencilProperty::GetViewerString(const char *pPrefix, NiStencilProperty::DrawMode eMode);
LONG __cdecl NiStencilProperty::_SDMInit();
void __cdecl NiStencilProperty::_SDMShutdown();
void __thiscall NiStencilProperty::LoadBinary(NiStencilProperty *this, NiStream *stream);
void __thiscall NiStencilProperty::SaveBinary(NiStencilProperty *this, NiStream *stream);
void __thiscall NiStencilProperty::GetViewerStrings(NiStencilProperty *this, NiTArray<char *> *pStrings);
void __thiscall NiGeometryGroupManager::NiGeometryGroupManager(NiGeometryGroupManager *this);
void __thiscall NiGeometryGroupManager::_NiGeometryGroupManager(NiGeometryGroupManager *this);
bool __thiscall NiApplication::OnWindowDestroy(NiApplication *this, HWND__ *pWnd, bool bOption);
void *__thiscall NiGeometryGroupManager::_vector_deleting_destructor_(NiGeometryGroupManager *this, unsigned int);
void __thiscall NiTriShapeDynamicData::NiTriShapeDynamicData(NiTriShapeDynamicData *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiPoint3 *pkNormal, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod, unsigned __int16 usTriangles, unsigned __int16 *pusTriList, unsigned __int16 usActiveVertices, unsigned __int16 usActiveTriangles);
unsigned __int16 __thiscall NiTriShapeDynamicData::GetActiveVertexCount(NiTriShapeDynamicData *this);
unsigned __int16 __thiscall NiTriShapeDynamicData::GetActiveTriangleCount(NiTriShapeDynamicData *this);
void __thiscall NiTriShapeDynamicData::GetStripData(NiTriShapeDynamicData *this, unsigned __int16 *usStrips, const unsigned __int16 **pusStripLengths, const unsigned __int16 **pusTriList, unsigned int *uiStripLengthSum);
NiObject *__cdecl NiTriShapeDynamicData::CreateObject();
bool __thiscall NiScreenElementsData::RegisterStreamables(NiTriShapeDynamicData *this, NiStream *kStream);
bool __thiscall NiTriShapeDynamicData::IsEqual(NiTriShapeDynamicData *this, NiObject *pkObject);
NiRTTI *__thiscall NiTriShapeDynamicData::GetRTTI(NiTriShapeDynamicData *this);
void __thiscall NiTriShapeDynamicData::SetActiveVertexCount(NiTriShapeDynamicData *this, unsigned __int16 usActiveVertices);
void __thiscall NiTriShapeDynamicData::SetActiveTriangleCount(NiTriShapeDynamicData *this, unsigned __int16 usActiveTriangles);
void *__thiscall NiTriShapeDynamicData::_vector_deleting_destructor_(NiTriShapeDynamicData *this, unsigned int);
void __thiscall NiTriShapeDynamicData::LoadBinary(NiTriShapeDynamicData *this, NiStream *kStream);
void __thiscall NiTriShapeDynamicData::SaveBinary(NiTriShapeDynamicData *this, NiStream *kStream);
void __thiscall NiTriShapeDynamicData::GetViewerStrings(NiTriShapeDynamicData *this, NiTArray<char *> *pkStrings);
void __thiscall NiQuaternion::NiQuaternion(NiQuaternion *this, float w, float x, float y, float z);
NiQuaternion *__thiscall NiQuaternion::operator_(NiQuaternion *this, NiQuaternion *result, NiQuaternion *q);
NiQuaternion *__thiscall NiQuaternion::operator_(NiQuaternion *this, NiQuaternion *result, NiQuaternion *q);
NiQuaternion *__thiscall NiQuaternion::operator_(NiQuaternion *this, NiQuaternion *result);
NiQuaternion *__thiscall NiQuaternion::operator_(NiQuaternion *this, NiQuaternion *result, NiQuaternion *q);
NiQuaternion *__cdecl NiQuaternion::UnitInverse(NiQuaternion *result, NiQuaternion *p);
NiQuaternion *__cdecl NiQuaternion::Squad(NiQuaternion *result, float t, NiQuaternion *p, NiQuaternion *a, NiQuaternion *b, NiQuaternion *q);
NiQuaternion *__cdecl NiQuaternion::Log(NiQuaternion *result, NiQuaternion *q);
int __cdecl loc_84497D(int result, float coeff); // weak
int __cdecl loc_84499E(int result, float coeff); // weak
NiQuaternion *__cdecl NiQuaternion::Intermediate(NiQuaternion *result, NiQuaternion *q0, NiQuaternion *q1, NiQuaternion *q2);
void __thiscall NiQuaternion::ToAngleAxis(NiQuaternion *this, float *angle, NiPoint3 *axis);
int __stdcall loc_844B64(float invLength, int axis); // weak
void __thiscall NiQuaternion::FromRotation(NiQuaternion *this, NiMatrix3 *rot);
void __thiscall NiQuaternion::Snap(NiQuaternion *this);
void __thiscall NiQuaternion::Normalize(NiQuaternion *this);
char *__thiscall NiQuaternion::GetViewerString(NiQuaternion *this, const char *pcPrefix);
void __thiscall NiQuaternion::NiQuaternion(NiQuaternion *this, float fAngle, NiPoint3 *axis);
void __thiscall NiColorA::LoadBinary(NiQuaternion *this, NiStream *stream);
void __thiscall NiQuaternion::SaveBinary(NiQuaternion *this, NiStream *stream);
bool __thiscall NiPalette::IsEqual(NiPalette *this, NiObject *pkObject);
void __thiscall NiPalette::AddPaletteToList(NiPalette *this);
void __thiscall NiPalette::RemovePaletteFromList(NiPalette *this);
NiRTTI *__thiscall NiPalette::GetRTTI(NiPalette *this);
NiPalette *__thiscall NiPalette::operator_(NiPalette *this, NiPalette *kPal);
NiObject *__cdecl NiPalette::CreateObject();
void *__thiscall NiPalette::_scalar_deleting_destructor_(NiPalette *this, unsigned int);
void __thiscall NiPalette::NiPalette(NiPalette *this, NiPalette *kPal);
void __thiscall NiPalette::NiPalette(NiPalette *this, bool bHasAlpha, unsigned int uiEntries, NiPalette::PaletteEntry *pkEntries);
void __thiscall NiPalette::LoadBinary(NiPalette *this, NiStream *kStream);
void __thiscall NiPalette::SaveBinary(NiPalette *this, NiStream *kStream);
void __thiscall NiPalette::GetViewerStrings(NiPalette *this, NiTArray<char *> *pkStrings);
int __cdecl NiStream::_SDMShutdown();
bool __thiscall NiStream::Load(NiStream *this, char *pcBuffer, int iBufferSize);
bool __thiscall NiStream::Load(NiStream *this, NiBinaryStream *pkIstr);
bool __thiscall NiStream::Save(NiStream *this, NiBinaryStream *pkOstr);
void *__thiscall NiTArray<void____cdecl____NiStream___NiObject___>::_scalar_deleting_destructor_(NiTArray<void (__cdecl*)(NiStream &,NiObject *)> *this, unsigned int);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___unsigned_short>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,unsigned short> *this, NiTMapItem<char const *,unsigned short> *pkItem, const char *key, unsigned __int16 val);
void *__thiscall NiTArray<NiObjectGroup__>::_scalar_deleting_destructor_(NiTArray<NiObjectGroup *> *this, unsigned int);
NiObject *__thiscall NiStream::GetObjectFromLinkID(NiStream *this);
unsigned int __thiscall NiStream::GetNumberOfLinkIDs(NiStream *this);
unsigned int __thiscall NiStream::GetLinkIDFromObject(NiStream *this, NiObject *pkObject);
NiObject *__cdecl NiStream::CreateObjectByRTTI(const char *pcRTTI);
NiObjectGroup *__thiscall NiStream::GetGroupFromID(NiStream *this, unsigned int uiID);
unsigned int __thiscall NiStream::GetIDFromGroup(NiStream *this, NiObjectGroup *pkGroup);
bool __thiscall NiStream::Load(NiStream *this, const char *pcFileName);
int __cdecl NiStream::RegisterLoader(const char *pcName, NiObject *(__cdecl *pfnFunc)());
void __cdecl NiStream::UnregisterLoader(const char *pcClassName);
void __cdecl NiStream::UnregisterPostProcessFunction(void (__cdecl *pfnFunc)(NiStream *, NiObject *));
void __thiscall NiStream::RegisterObjects(NiStream *this);
bool __thiscall NiStream::Save(NiStream *this, const char *pcFileName);
bool __thiscall NiStream::Save(NiStream *this, char **pcBuffer, int *iBufferSize);
unsigned int __cdecl NiStream::GetVersionFromString(const char *pcVersionString);
void __thiscall NiStream::SetTexture(NiStream *this, char *pcURL, NiTexture *pkTexture);
NiTexture *__thiscall NiStream::GetTexture(NiStream *this, char *pcURL, NiTexture *pkSelf);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiObject______cdecl____void_>_NiObject______cdecl____void_>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiObject______cdecl____void_>_NiObject______cdecl____void_>(NiTStringTemplateMap<NiTPointerMap<char const *,NiObject * (__cdecl*)(void)>,NiObject * (__cdecl*)(void)> *this);
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiD3DXEffectFile__>_NiD3DXEffectFile__>::ClearValue(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DShaderProgramCreator *>,NiD3DShaderProgramCreator *> *this, NiTMapItem<char const *,NiD3DShaderProgramCreator *> *pkItem);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___unsigned_short>_unsigned_short>::_NiTStringTemplateMap<NiTPointerMap<char_const___unsigned_short>_unsigned_short>(NiTStringTemplateMap<NiTPointerMap<char const *,unsigned short>,unsigned short> *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___unsigned_short>_unsigned_short>::SetValue(NiTStringTemplateMap<NiTPointerMap<char const *,unsigned short>,unsigned short> *this, NiTMapItem<char const *,unsigned short> *pkItem, const char *pcKey, unsigned __int16 val);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiObject______cdecl____void_>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiObject * (__cdecl*)(void)> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiObject______cdecl____void_>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiObject * (__cdecl*)(void)> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___unsigned_short>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,unsigned short> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___unsigned_short>::_vector_deleting_destructor_(NiTPointerMap<char const *,unsigned short> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiObject_const___unsigned_int>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiObject const *,unsigned int> *this, unsigned int);
void *__thiscall NiTPointerMap<NiObject_const___unsigned_int>::_vector_deleting_destructor_(NiTPointerMap<NiObject const *,unsigned int> *this, unsigned int);
void __thiscall NiStream::ReadLinkID(NiStream *this);
NiObject *__thiscall NiStream::ResolveLinkID(NiStream *this);
unsigned int __thiscall NiStream::ReadMultipleLinkIDs(NiStream *this);
void __thiscall NiStream::SetNumberOfLinkIDs(NiStream *this, unsigned int uiLinks);
void __thiscall NiStream::LoadObjectGroups(NiStream *this);
void __thiscall NiStream::SetSelectiveUpdateFlagsTTTFRecursive(NiStream *this, NiAVObject *pkAVObject);
void __thiscall NiStream::SetSelectiveUpdateFlagsForOldVersions(NiStream *this);
void __thiscall NiStream::SaveHeader(NiStream *this);
void __thiscall NiStream::SaveTopLevelObjects(NiStream *this);
void __thiscall NiStream::UpdateObjectGroups(NiStream *this);
void __thiscall NiStream::SaveObjectGroups(NiStream *this);
void __thiscall NiStream::LoadCString(NiStream *this, char **pcString);
void __thiscall NiStream::SaveCString(NiStream *this, const char *pcString);
void __thiscall NiStream::SetTexturePalette(NiStream *this, NiTexturePalette *pkTexturePalette);
void __thiscall NiTArray<NiPointer<NiObject>>::_NiTArray<NiPointer<NiObject>>(NiTArray<NiPointer<NiObject> > *this);
void *__thiscall NiTArray<NiPointer<NiObject>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiObject> > *this, unsigned int);
void __thiscall NiStream::RemoveAllObjects(NiStream *this);
void __thiscall NiStream::ChangeObject(NiStream *this, NiObject *pkNewObject);
bool __thiscall NiStream::LoadHeader(NiStream *this);
void __thiscall NiStream::LoadTopLevelObjects(NiStream *this);
void __cdecl NiStream::RegisterPostProcessFunction(void (__cdecl *pfnFunc)(NiStream *, NiObject *));
void __thiscall NiStream::FreeLoadData(NiStream *this);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiObject______cdecl____void_>_NiObject______cdecl____void_>::_vector_deleting_destructor_(NiTStringPointerMap<NiObject * (__cdecl*)(void)> *this, unsigned int);
void *__thiscall NiTStringPointerMap<unsigned_short>::_vector_deleting_destructor_(NiTStringPointerMap<unsigned short> *this, unsigned int);
void *__cdecl NiStream::_SDMInit();
void __thiscall NiStream::_NiStream(NiStream *this);
void __thiscall NiStream::SaveLinkID(NiStream *this, NiObject *pkObject);
void __thiscall NiStream::InsertObject(NiStream *this, NiObject *pkObject);
bool __thiscall NiStream::RegisterSaveObject(NiStream *this, NiObject *pkObject);
bool __thiscall NiStream::LoadRTTI(NiStream *this);
bool __thiscall NiStream::LoadObject(NiStream *this);
bool __thiscall NiStream::LoadStream(NiStream *this);
void __thiscall NiStream::SaveRTTI(NiStream *this);
bool __thiscall NiStream::SaveStream(NiStream *this);
void __thiscall NiStream::NiStream(NiStream *this);
void *__thiscall NiStream::_scalar_deleting_destructor_(NiStream *this, unsigned int);
NiQuaternion *__thiscall NiQuaternion::operator_(NiQuaternion *this, NiQuaternion *result, float c);
NiQuaternion *__cdecl operator_(NiQuaternion *result, float c, NiQuaternion *q);
void __thiscall NiQuaternion::FastNormalize(NiQuaternion *this);
NiQuaternion *__cdecl NiQuaternion::Exp(NiQuaternion *result, NiQuaternion *q);
NiQuaternion *__cdecl NiQuaternion::Slerp(NiQuaternion *result, float t, NiQuaternion *p, NiQuaternion *q);
char *__cdecl NiGetViewerString(const char *pcRttiName);
char *__cdecl NiGetViewerString(const char *pcPrefix, bool bValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, char ucValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, __int16 sValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, unsigned __int16 usValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, int iValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, unsigned int uiValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, float fValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, void *pvValue);
char *__cdecl NiGetViewerString(const char *pcPrefix, const char *pcValue);
void __thiscall NiSkinData::FreeBoneVertData(NiSkinData *this);
NiRTTI *__thiscall NiSkinData::GetRTTI(NiSkinData *this);
void __thiscall NiSkinData::LinkObject(NiSkinData *this, NiStream *kStream);
bool __thiscall NiSkinData::IsEqual(NiSkinData *this, NiObject *pkObject);
void *__thiscall NiSkinData::_vector_deleting_destructor_(NiSkinData *this, unsigned int);
NiObject *__cdecl NiSkinData::CreateObject();
void __thiscall NiSkinData::LoadBinary(NiSkinData *this, NiStream *kStream);
void __thiscall NiSkinData::SaveBinary(NiSkinData *this, NiStream *kStream);
bool __thiscall NiTextureTransform::operator__(NiTextureTransform *this, NiTextureTransform *kXform);
void __thiscall NiTextureTransform::UpdateMatrix(NiTextureTransform *this);
int loc_848A21(); // weak
void __thiscall NiTextureTransform::NiTextureTransform(NiTextureTransform *this, NiPoint2 *kTranslate, float fRotate, NiPoint2 *kScale, NiPoint2 *kCenter, NiTextureTransform::TransformMethod eMethod);
void __thiscall NiTextureTransform::LoadBinary(NiTextureTransform *this, NiStream *kStream);
void __thiscall NiTextureTransform::SaveBinary(NiTextureTransform *this, NiStream *kStream);
void __thiscall NiPosData::LinkObject(NiPSysEmitterCtlrData *this, NiStream *kStream);
void __thiscall NiAVObjectPalette::GetViewerStrings(NiAVObjectPalette *this, NiTArray<char *> *pkStrings);
void __thiscall NiDefaultAVObjectPalette::ProcessClone(NiDefaultAVObjectPalette *this, NiCloningProcess *kCloning);
bool __thiscall NiDefaultAVObjectPalette::IsEqual(NiDefaultAVObjectPalette *this, NiObject *pObject);
void __thiscall NiDefaultAVObjectPalette::SaveBinary(NiDefaultAVObjectPalette *this, NiStream *stream);
void __thiscall NiDefaultAVObjectPalette::LoadBinary(NiDefaultAVObjectPalette *this, NiStream *stream);
void __thiscall NiDefaultAVObjectPalette::GetViewerStrings(NiDefaultAVObjectPalette *this, NiTArray<char *> *pStrings);
NiObject *__thiscall NiDefaultAVObjectPalette::CreateClone(NiDefaultAVObjectPalette *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiDefaultAVObjectPalette::CreateObject();
// int __usercall FloatCompare<eax>(const float *pf0<eax>, const float *pf1<ecx>, unsigned int uiNum<edi>);
void __thiscall NiGeometryData::CreateNormals(NiGeometryData *this, bool bInitialize);
NiPoint2 *__thiscall NiGeometryData::GetTextureSet(NiGeometryData *this, unsigned __int16 usSet);
int __thiscall NiGeometryData::VertexCompare(NiGeometryData *this, unsigned __int16 v0, unsigned __int16 v1, char mask);
bool __thiscall NiGeometryData::RegisterStreamables(NiGeometryData *this, NiStream *kStream);
unsigned int __thiscall NiGeometryData::GetBlockAllocationSize(NiGeometryData *this);
void __thiscall NiGeometryData::NiGeometryData(NiGeometryData *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiPoint3 *pkNormal, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod);
NiRTTI *__thiscall NiGeometryData::GetRTTI(NiGeometryData *this);
void __thiscall NiGeometryData::NiGeometryData(NiGeometryData *this);
void __thiscall NiGeometryData::Replace(NiGeometryData *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiPoint3 *pkNormal, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod);
int __thiscall NiGeometryData::ChoosePivot(NiGeometryData *this, unsigned __int16 *pusIndex, char mask, int l, int r);
void __thiscall NiGeometryData::LinkObject(NiGeometryData *this, NiStream *kStream);
bool __thiscall NiGeometryData::IsEqual(NiGeometryData *this, NiObject *pkObject);
void __thiscall NiGeometryData::_NiGeometryData(NiGeometryData *this);
void __thiscall NiGeometryData::IndexQSort(NiGeometryData *this, unsigned __int16 *pusIndex, char mask, int l, int r);
void __thiscall NiGeometryData::LoadBinary(NiGeometryData *this, NiStream *kStream);
void __thiscall NiGeometryData::SaveBinary(NiGeometryData *this, NiStream *kStream);
void __thiscall NiGeometryData::GetViewerStrings(NiGeometryData *this, NiTArray<char *> *pkStrings);
void *__thiscall NiGeometryData::_scalar_deleting_destructor_(NiGeometryData *this, unsigned int);
void __thiscall NiGeometryData::IndexSort(NiGeometryData *this, unsigned __int16 **pusIndex0, unsigned __int16 **pusIndex1, char mask);
void __thiscall NiLight::_NiLight(NiLight *this);
void __thiscall NiLight::CopyMembers(NiLight *this, NiLight *pDest, NiCloningProcess *kCloning);
void __thiscall NiLight::LinkObject(NiLight *this, NiStream *stream);
NiRTTI *__thiscall NiLight::GetRTTI(NiLight *this);
void __thiscall NiLight::NiLight(NiLight *this);
void *__thiscall NiLight::_vector_deleting_destructor_(NiLight *this, unsigned int);
void __thiscall NiLight::LoadBinary(NiLight *this, NiStream *stream);
void __thiscall NiLight::SaveBinary(NiLight *this, NiStream *stream);
bool __thiscall NiLight::IsEqual(NiLight *this, NiObject *pObject);
void __thiscall NiLight::GetViewerStrings(NiLight *this, NiTArray<char *> *pStrings);
void *__cdecl NiPoint3::_SDMInit();
void __cdecl NiPoint3::_SDMShutdown();
void __cdecl NiPoint3::UnitizeVectors(NiPoint3 *pkV, unsigned int uiNum, unsigned int uiStride);
void __cdecl NiPoint3::PointsPlusEqualFloatTimesPoints(NiPoint3 *pkDst, float f, NiPoint3 *pkSrc, unsigned int uiVerts);
bool __thiscall NiFloatsExtraData::SetValue(NiFloatsExtraData *this, const unsigned int uiIndex, float fValue);
float __thiscall NiFloatsExtraData::GetValue(NiFloatsExtraData *this, const unsigned int uiIndex);
void __thiscall NiFloatsExtraData::CopyMembers(NiFloatsExtraData *this, NiFloatsExtraData *pDest, NiCloningProcess *kCloning);
bool __thiscall NiFloatsExtraData::IsEqual(NiFloatsExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiFloatsExtraData::GetRTTI(NiFloatsExtraData *this);
NiObject *__thiscall NiFloatsExtraData::CreateClone(NiFloatsExtraData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiFloatsExtraData::CreateObject();
void *__thiscall NiFloatsExtraData::_scalar_deleting_destructor_(NiFloatsExtraData *this, unsigned int);
void __thiscall NiFloatsExtraData::GetViewerStrings(NiFloatsExtraData *this, NiTArray<char *> *pStrings);
void __thiscall NiColorExtraData::SetValue(NiColorExtraData *this, NiColorA kColorA);
void __thiscall NiColorExtraData::SaveBinary(NiColorExtraData *this, NiStream *kStream);
NiRTTI *__thiscall NiColorExtraData::GetRTTI(NiColorExtraData *this);
NiObject *__thiscall NiColorExtraData::CreateClone(NiColorExtraData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiColorExtraData::CreateObject();
void __thiscall NiColorExtraData::LoadBinary(NiColorExtraData *this, NiStream *kStream);
void *__thiscall NiColorExtraData::_scalar_deleting_destructor_(NiColorExtraData *this, unsigned int);
bool __thiscall NiColorExtraData::IsEqual(NiColorExtraData *this, NiObject *pObject);
void __thiscall NiColorExtraData::GetViewerStrings(NiColorExtraData *this, NiTArray<char *> *pStrings);
void __cdecl NiCompUtility::DecompressFloatArray(const __int16 *psSrcArray, unsigned int uiSrcCount, float fOffset, float fHalfRange, float *pfDestArray, unsigned int uiDestCount);
void __cdecl NiTransformVectorsPentium(unsigned __int16 usVerts, const float *pModel, float *pWorld, NiMatrix3 *pMatrix);
void __cdecl NiTransformPointsPentium(unsigned __int16 usVerts, const float *pModel, float *pWorld, NiTransform *pXform);
// unsigned int __usercall NiProcessorSpecificCode::IdentifyProcessor<eax>(int a1<eax>);
void __cdecl NiProcessorSpecificCode::TransformPointsBasic(unsigned __int16 uiVerts, const float *pModel, float *pWorld, NiTransform *pXform);
void __cdecl NiProcessorSpecificCode::TransformVectorsBasic(unsigned __int16 uiVerts, const float *pModel, float *pWorld, NiMatrix3 *pMatrix);
void __cdecl NiProcessorSpecificCode::SetVectorTransformFunction(void (__cdecl *vtf)(unsigned __int16, const float *, float *, NiMatrix3 *));
void __cdecl NiProcessorSpecificCode::SetPointTransformFunction(void (__cdecl *ptf)(unsigned __int16, const float *, float *, NiTransform *));
void __cdecl NiProcessorSpecificCode::OptimizeMainEngineForProcessor();
NiObject *__cdecl NiTriStrips::CreateObject();
NiRTTI *__thiscall NiTriStrips::GetRTTI(NiTriStrips *this);
void *__thiscall NiTriShape::_vector_deleting_destructor_(NiTriStrips *this, unsigned int);
NiObject *__thiscall NiTriStrips::CreateClone(NiTriStrips *this, NiCloningProcess *kCloning);
void __thiscall NiTriStrips::GetModelTriangle(NiTriStrips *this, unsigned __int16 usTriangle, NiPoint3 **pkP0, NiPoint3 **pkP1, NiPoint3 **pkP2);
void __thiscall NiTriStrips::RenderImmediate(NiTriStrips *this, NiRenderer *pkRenderer);
void __thiscall NiTriStrips::GetViewerStrings(NiTriStrips *this, NiTArray<char *> *pkStrings);
void __thiscall NiTransform::MakeIdentity(NiTransform *this);
void __thiscall NiTransform::Invert(NiTransform *this, NiTransform *kDest);
bool __thiscall NiTransform::operator__(NiTransform *this, NiTransform *xform);
void __thiscall NiTransform::LoadBinary(NiTransform *this, NiStream *stream);
void __thiscall NiTransform::SaveBinary(NiTransform *this, NiStream *stream);
void __thiscall NiSwitchNode::CopyMembers(NiSwitchNode *this, NiSwitchNode *pkDest, NiCloningProcess *kCloning);
void __thiscall NiBSPNode::LinkObject(NsFadeNode *this, NiStream *stream);
void __thiscall NiSwitchNode::NiSwitchNode(NiSwitchNode *this);
NiRTTI *__thiscall NiSwitchNode::GetRTTI(NiSwitchNode *this);
NiPointer<NiAVObject> *__thiscall NiSwitchNode::DetachChild(NiSwitchNode *this, NiPointer<NiAVObject> *result, NiAVObject *pkChild);
NiPointer<NiAVObject> *__thiscall NiSwitchNode::DetachChildAt(NiSwitchNode *this, NiPointer<NiAVObject> *result, unsigned int i);
void __thiscall NiSwitchNode::OnVisible(NiSwitchNode *this, NiCullingProcess *kCuller);
void __thiscall NiSwitchNode::UpdateWorldBound(NiSwitchNode *this);
void __thiscall NiSwitchNode::UpdateNodeBound(NiSwitchNode *this);
NiObject *__thiscall NiSwitchNode::CreateClone(NiSwitchNode *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiSwitchNode::CreateObject();
bool __thiscall NiSwitchNode::IsEqual(NiSwitchNode *this, NiObject *pkObject);
void *__thiscall NiSwitchNode::_scalar_deleting_destructor_(NiSwitchNode *this, unsigned int);
void __thiscall NiSwitchNode::AttachChild(NiSwitchNode *this, NiAVObject *pkChild, bool bFirstAvail);
NiPointer<NiAVObject> *__thiscall NiSwitchNode::SetAt(NiSwitchNode *this, NiPointer<NiAVObject> *result, unsigned int i, NiAVObject *pkChild);
void __thiscall NiSwitchNode::UpdateDownwardPass(NiSwitchNode *this, float fTime, bool bUpdateControllers);
void __thiscall NiSwitchNode::UpdateSelectedDownwardPass(NiSwitchNode *this, float fTime);
void __thiscall NiSwitchNode::UpdateRigidDownwardPass(NiSwitchNode *this, float fTime);
void __thiscall NiSwitchNode::UpdateControllers(NiSwitchNode *this, float fTime);
void __thiscall NiSwitchNode::LoadBinary(NiSwitchNode *this, NiStream *kStream);
void __thiscall NiSwitchNode::SaveBinary(NiSwitchNode *this, NiStream *kStream);
void __thiscall NiSwitchNode::GetViewerStrings(NiSwitchNode *this, NiTArray<char *> *pkStrings);
bool __cdecl NiBound::TestIntersect(float fTime, NiBound *kB0, NiPoint3 *kV0, NiBound *kB1, NiPoint3 *kV1);
bool __cdecl NiBound::FindIntersect(float fTime, NiBound *kB0, NiPoint3 *kV0, NiBound *kB1, NiPoint3 *kV1, float *fIntrTime, NiPoint3 *kIntrPt, bool bCalcNormals, NiPoint3 *kNormal0, NiPoint3 *kNormal1);
char *__thiscall NiBound::GetViewerString(NiBound *this, const char *pPrefix);
void __thiscall NiBound::SaveBinary(NiPlane *this, NiStream *stream);
void __cdecl NiDynamicEffectState::ListCopy(NiDynamicEffectState::ListItem *pSrc, NiDynamicEffectState::ListItem **pDest);
void __thiscall NiDynamicEffectState::_NiDynamicEffectState(NiDynamicEffectState *this);
NiDynamicEffectState *__thiscall NiDynamicEffectState::Copy(NiDynamicEffectState *this);
void __cdecl NiDynamicEffectState::ListInsertSorted(NiDynamicEffectState::ListItem **pL, NiDynamicEffect *pItem);
void __cdecl NiDynamicEffectState::ListRemove(NiDynamicEffectState::ListItem **pL, NiDynamicEffect *pItem);
void __thiscall NiDynamicEffectState::AddEffect(NiDynamicEffectState *this, NiDynamicEffect *pEffect);
void __thiscall NiDynamicEffectState::RemoveEffect(NiDynamicEffectState *this, NiDynamicEffect *pEffect);
void __thiscall NiPropertyState::NiPropertyState(NiPropertyState *this, NiPropertyState *kState);
void __thiscall NiPropertyState::_NiPropertyState(NiPropertyState *this);
void *__thiscall NiPropertyState::_scalar_deleting_destructor_(NiPropertyState *this, unsigned int);
void __thiscall NiPropertyState::Reset(NiPropertyState *this);
void __thiscall NiPropertyState::NiPropertyState(NiPropertyState *this);
bool __thiscall NiVertWeightsExtraData::IsEqual(NiVertWeightsExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiVertWeightsExtraData::GetRTTI(NiVertWeightsExtraData *this);
NiObject *__thiscall NiVertWeightsExtraData::CreateClone(NiVertWeightsExtraData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiVertWeightsExtraData::CreateObject();
void *__thiscall NiVertWeightsExtraData::_scalar_deleting_destructor_(NiVertWeightsExtraData *this, unsigned int);
void __thiscall NiVertWeightsExtraData::LoadBinary(NiVertWeightsExtraData *this, NiStream *kStream);
void __thiscall NiVertWeightsExtraData::GetViewerStrings(NiVertWeightsExtraData *this, NiTArray<char *> *pStrings);
void __cdecl NiMainSDM::Init(); // idb
void __cdecl NiMainSDM::Shutdown(); // idb
void __thiscall NiMainSDM::NiMainSDM(NiMainSDM *this);
NiShader *__thiscall NiShaderFactory::RetrieveShader(NiD3DShaderLibrary *this, NiRenderer *pkRenderer, char *pcName, unsigned int uiImplementation);
void __thiscall NiShaderLibrary::_NiShaderLibrary(NiShaderLibrary *this);
void __thiscall NiShaderLibrary::NiShaderLibrary(NiShaderLibrary *this, char *pszName);
void *__thiscall NiShaderLibrary::_vector_deleting_destructor_(NiShaderLibrary *this, unsigned int);
bool __thiscall NiNIFImageReader::CanReadFile(NiNIFImageReader *this, const char *pcFileExtension);
void __thiscall NiNIFImageReader::_NiNIFImageReader(NiNIFImageReader *this);
bool __thiscall NiNIFImageReader::ReadHeader(NiNIFImageReader *this, NiFile *kIst, unsigned int *uiWidth, unsigned int *uiHeight, NiPixelFormat *kFormat, bool *bMipmap, unsigned int *uiFaces);
void __thiscall NiNIFImageReader::NiNIFImageReader(NiNIFImageReader *this);
void *__thiscall NiNIFImageReader::_vector_deleting_destructor_(NiNIFImageReader *this, unsigned int);
NiPixelData *__thiscall NiNIFImageReader::ReadFile(NiNIFImageReader *this, NiFile *kIst, NiPixelData *pkOptDest);
void __thiscall NiTriShapeData::NiTriShapeData(NiTriShapeData *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiPoint3 *pkNormal, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod, unsigned __int16 usTriangles, unsigned __int16 *pusTriList);
void __thiscall NiTriShapeData::NiTriShapeData(NiTriShapeData *this);
void __thiscall NiTriShapeData::Replace(NiTriShapeData *this, unsigned __int16 usTriangles, unsigned __int16 *pusTriList);
void __thiscall NiTriShapeData::GetTriangleIndices(NiTriShapeData *this, unsigned __int16 i, unsigned __int16 *i0, unsigned __int16 *i1, unsigned __int16 *i2);
void __thiscall NiTriShapeData::GetStripData(NiTriShapeData *this, unsigned __int16 *usStrips, const unsigned __int16 **pusStripLengths, const unsigned __int16 **pusTriList, unsigned int *uiStripLengthSum);
NiObject *__cdecl NiTriShapeData::CreateObject();
void __thiscall NiPSysData::LinkObject(NiPSysData *this, NiStream *kStream);
bool __thiscall NiPSysData::RegisterStreamables(NiPSysData *this, NiStream *kStream);
bool __thiscall NiTriShapeData::IsEqual(NiTriShapeData *this, NiObject *pkObject);
NiRTTI *__thiscall NiTriShapeData::GetRTTI(NiTriShapeData *this);
void *__thiscall NiTriShapeData::SNAMemBlock::_scalar_deleting_destructor_(NiTriShapeData::SNAMemBlock *this, unsigned int);
void __thiscall NiTriShapeData::_NiTriShapeData(NiTriShapeData *this);
void *__thiscall NiTriShapeData::_vector_deleting_destructor_(NiTriShapeData *this, unsigned int);
void __thiscall NiTriShapeData::LoadBinary(NiTriShapeData *this, NiStream *kStream);
void __thiscall NiTriShapeData::SaveBinary(NiTriShapeData *this, NiStream *kStream);
void __thiscall NiTriShapeData::GetViewerStrings(NiTriShapeData *this, NiTArray<char *> *pkStrings);
NiRTTI *__thiscall NiDepthStencilBuffer::GetRTTI(NiDepthStencilBuffer *this);
void *__thiscall NiDepthStencilBuffer::_vector_deleting_destructor_(NiDepthStencilBuffer *this, unsigned int);
NiDepthStencilBuffer *__cdecl NiDepthStencilBuffer::Create(unsigned int uiWidth, unsigned int uiHeight, NiRenderer *pkRenderer, NiPixelFormat *kFormat);
void __thiscall Studio::SetSubject(Ni2DBuffer *this, Ni2DBuffer::RendererData *pkRendererData);
NiDepthStencilBuffer *__cdecl NiDepthStencilBuffer::CreateCompatible(Ni2DBuffer *pkBuffer, NiRenderer *pkRenderer);
NiDepthStencilBuffer *__cdecl NiDepthStencilBuffer::Create(unsigned int uiWidth, unsigned int uiHeight, Ni2DBuffer::RendererData *pkData);
void __thiscall Ni2DBuffer::ResetDimensions(Ni2DBuffer *this, unsigned int uiWidth, unsigned int uiHeight);
void __thiscall NiLODData::LoadBinary(NiRenderTargetGroup *this, NiStream *kStream);
bool __thiscall Ni2DBuffer::RegisterStreamables(NiSkinData *this, NiStream *kStream);
bool __thiscall NiAVObjectPalette::IsEqual(NiRenderTargetGroup *this, NiObject *pkObject);
bool __thiscall Ni2DBuffer::CreateRendererData(Ni2DBuffer *this, NiPixelFormat *kFormat);
bool __thiscall Ni2DBuffer::FastCopy(Ni2DBuffer *this, Ni2DBuffer *pkDest, NiRect<unsigned int> *pkSrcRect, unsigned int uiDestX, unsigned int uiDestY);
bool __thiscall Ni2DBuffer::Copy(Ni2DBuffer *this, Ni2DBuffer *pkDest, NiRect<unsigned int> *pkSrcRect, NiRect<unsigned int> *pkDestRect, Ni2DBuffer::CopyFilterPreference ePref);
void __thiscall Ni2DBuffer::Ni2DBuffer(Ni2DBuffer *this);
NiRTTI *__thiscall Ni2DBuffer::GetRTTI(Ni2DBuffer *this);
void __thiscall Ni2DBuffer::_Ni2DBuffer(Ni2DBuffer *this);
Ni2DBuffer *__cdecl Ni2DBuffer::Create(unsigned int uiWidth, unsigned int uiHeight);
Ni2DBuffer *__cdecl Ni2DBuffer::Create(unsigned int uiWidth, unsigned int uiHeight, Ni2DBuffer::RendererData *pkData);
void *__thiscall Ni2DBuffer::_vector_deleting_destructor_(Ni2DBuffer *this, unsigned int);
void __thiscall Ni2DBuffer::GetViewerStrings(Ni2DBuffer *this, NiTArray<char *> *pkStrings);
void __thiscall NiPixelData::AllocateData(NiPixelData *this, unsigned int uiLevels, unsigned int uiFaces, unsigned int uiBytes);
void __thiscall NiPixelData::FreeData(NiPixelData *this);
float __thiscall NiBackToFrontAccumulator::ChoosePivot(NiBackToFrontAccumulator *this, int l, int r);
void __thiscall NiBackToFrontAccumulator::CopyMembers(NiBackToFrontAccumulator *this, NiBackToFrontAccumulator *pkDest, NiCloningProcess *kCloning);
void __thiscall NiBackToFrontAccumulator::LoadBinary(NiBackToFrontAccumulator *this, NiStream *kStream);
bool __thiscall NiScreenLODData::RegisterStreamables(NiPSysSpawnModifier *this, NiStream *kStream);
bool __thiscall NiBackToFrontAccumulator::IsEqual(NiBackToFrontAccumulator *this, NiObject *pkObject);
void __thiscall NiBackToFrontAccumulator::FinishAccumulating(NiBackToFrontAccumulator *this);
void __thiscall NiBackToFrontAccumulator::SortObjectsByDepth(NiBackToFrontAccumulator *this, int l, int r);
void __thiscall NiBackToFrontAccumulator::_NiBackToFrontAccumulator(NiBackToFrontAccumulator *this);
NiRTTI *__thiscall NiBackToFrontAccumulator::GetRTTI(NiBackToFrontAccumulator *this);
void __thiscall NiBackToFrontAccumulator::RegisterObjectArray(NiBackToFrontAccumulator *this, NiVisibleArray *kArray);
void __thiscall NiBackToFrontAccumulator::Sort(NiBackToFrontAccumulator *this);
void __thiscall NiBackToFrontAccumulator::NiBackToFrontAccumulator(NiBackToFrontAccumulator *this);
void *__thiscall NiBackToFrontAccumulator::_vector_deleting_destructor_(NiBackToFrontAccumulator *this, unsigned int);
NiObject *__thiscall NiBackToFrontAccumulator::CreateClone(NiBackToFrontAccumulator *this, NiCloningProcess *kCloning);
void __thiscall NiLODData::NiLODData(NiLODData *this);
void __thiscall NiLODData::_NiLODData(NiLODData *this);
NiRTTI *__thiscall NiLODData::GetRTTI(NiLODData *this);
void *__thiscall NiLODData::_vector_deleting_destructor_(NiLODData *this, unsigned int);
void __cdecl NiPoint3::UnitizeVector(NiPoint3 *v);
void __thiscall NiTriShapeData::CalculateNormals(NiTriShapeData *this);
void __thiscall NiObjectGroup::NiObjectGroup(NiObjectGroup *this, unsigned int uiBytes);
void __thiscall NiTriStripsData::GetTriangleIndices(NiTriStripsData *this, unsigned __int16 i, unsigned __int16 *i0, unsigned __int16 *i1, unsigned __int16 *i2);
NiObject *__cdecl NiTriStripsData::CreateObject();
NiRTTI *__thiscall NiTriStripsData::GetRTTI(NiTriStripsData *this);
void __thiscall NiTriStripsData::GetStripData(NiTriStripsData *this, unsigned __int16 *usStrips, const unsigned __int16 **pusStripLengths, const unsigned __int16 **pusTriList, unsigned int *uiStripLengthSum);
bool __thiscall NiTriStripsData::IsEqual(NiTriStripsData *this, NiObject *pkObject);
unsigned int __thiscall NiTriStripsData::GetBlockAllocationSize(NiTriStripsData *this);
void __thiscall NiTriStripsData::_NiTriStripsData(NiTriStripsData *this);
void __thiscall NiTriStripsData::Replace(NiTriStripsData *this, unsigned __int16 usStrips, unsigned __int16 *pusStripLengths, unsigned __int16 *pusStripLists);
void *__thiscall NiTriStripsData::_scalar_deleting_destructor_(NiTriStripsData *this, unsigned int);
void __thiscall NiTriStripsData::LoadBinary(NiTriStripsData *this, NiStream *kStream);
void __thiscall NiTriStripsData::SaveBinary(NiTriStripsData *this, NiStream *kStream);
void __thiscall NiTriStripsData::GetViewerStrings(NiTriStripsData *this, NiTArray<char *> *pkStrings);
bool __thiscall NiDitherProperty::RegisterStreamables(NiZBufferProperty *this, NiStream *kStream);
NiRTTI *__thiscall NiDitherProperty::GetRTTI(NiDitherProperty *this);
NiObject *__thiscall NiDitherProperty::CreateClone(NiDitherProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiDitherProperty::CreateObject();
LONG __cdecl NiDitherProperty::_SDMInit();
void __cdecl NiDitherProperty::_SDMShutdown();
void __thiscall NiShadeProperty::SaveBinary(NiWireframeProperty *this, NiStream *kStream);
void __thiscall NiDitherProperty::GetViewerStrings(NiDitherProperty *this, NiTArray<char *> *pkStrings);
void __thiscall NiRendererSpecificProperty::LoadBinary(NiRendererSpecificProperty *this, NiStream *kStream);
bool __thiscall NiRendererSpecificProperty::RegisterStreamables(NiRendererSpecificProperty *this, NiStream *kStream);
void __thiscall NiRendererSpecificProperty::SaveBinary(NiRendererSpecificProperty *this, NiStream *kStream);
bool __thiscall NiRendererSpecificProperty::IsEqual(NiRendererSpecificProperty *this, NiObject *pkObject);
void __thiscall NiRendererSpecificProperty::NiRendererSpecificProperty(NiRendererSpecificProperty *this);
NiRTTI *__thiscall NiRendererSpecificProperty::GetRTTI(NiRendererSpecificProperty *this);
NiDynamicEffect::EffectType __thiscall ItemActiveskill::GetStructSize(NiTextureEffect *this);
NiObject *__thiscall NiRendererSpecificProperty::CreateClone(NiRendererSpecificProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiRendererSpecificProperty::CreateObject();
void *__thiscall NiRendererSpecificProperty::_scalar_deleting_destructor_(NiRendererSpecificProperty *this, unsigned int);
LONG __cdecl NiRendererSpecificProperty::_SDMInit();
void __cdecl NiRendererSpecificProperty::_SDMShutdown();
void __thiscall NiRendererSpecificProperty::GetViewerStrings(NiRendererSpecificProperty *this, NiTArray<char *> *pkStrings);
NiRTTI *__thiscall NiShadeProperty::GetRTTI(NiShadeProperty *this);
int __thiscall ShortCutInvPosItem::GetType(NiShadeProperty *this);
NiObject *__thiscall NiShadeProperty::CreateClone(NiShadeProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiShadeProperty::CreateObject();
int __cdecl NiShadeProperty::_SDMInit();
void __cdecl NiShadeProperty::_SDMShutdown();
void __thiscall NiShadeProperty::GetViewerStrings(NiShadeProperty *this, NiTArray<char *> *pkStrings);
bool __thiscall NiWireframeProperty::IsEqual(NiWireframeProperty *this, NiObject *pkObject);
NiRTTI *__thiscall NiSpecularProperty::GetRTTI(NiSpecularProperty *this);
NiObject *__thiscall NiSpecularProperty::CreateClone(NiSpecularProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiSpecularProperty::CreateObject();
LONG __cdecl NiSpecularProperty::_SDMInit();
void __cdecl NiSpecularProperty::_SDMShutdown();
void __thiscall NiSpecularProperty::LoadBinary(NiWireframeProperty *this, NiStream *kStream);
void __thiscall NiSpecularProperty::GetViewerStrings(NiSpecularProperty *this, NiTArray<char *> *pkStrings);
NiRTTI *__thiscall NiWireframeProperty::GetRTTI(NiWireframeProperty *this);
NiObject *__thiscall NiWireframeProperty::CreateClone(NiWireframeProperty *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiWireframeProperty::CreateObject();
LONG __cdecl NiWireframeProperty::_SDMInit();
void __cdecl NiWireframeProperty::_SDMShutdown();
void __thiscall NiWireframeProperty::GetViewerStrings(NiWireframeProperty *this, NiTArray<char *> *pkStrings);
bool __thiscall NiTriBasedGeomData::RegisterStreamables(NiTriBasedGeomData *this, NiStream *kStream);
NiRTTI *__thiscall NiScreenGeometry::GetRTTI(NiScreenGeometry *this);
NiObject *__cdecl NiScreenGeometry::CreateObject();
void __thiscall NiScreenElements::LoadBinary(NiScreenElements *this, NiStream *kStream);
void __thiscall NiScreenElements::LinkObject(NiScreenElements *this, NiStream *kStream);
bool __thiscall NiScreenGeometry::RegisterStreamables(NiScreenElements *this, NiStream *kStream);
void __thiscall NiScreenGeometry::SaveBinary(NiScreenElements *this, NiStream *kStream);
void __thiscall NiScreenSpaceCamera::LoadBinary(NiScreenSpaceCamera *this, NiStream *kStream);
bool __thiscall NiScreenSpaceCamera::RegisterStreamables(NiScreenSpaceCamera *this, NiStream *kStream);
void __thiscall NiScreenSpaceCamera::SaveBinary(NiScreenSpaceCamera *this, NiStream *kStream);
bool __thiscall NiScreenSpaceCamera::IsEqual(NiScreenSpaceCamera *this, NiObject *pkObject);
void *__thiscall NiTArray<NiScreenGeometryData::ScreenElement__>::_vector_deleting_destructor_(NiTArray<NiScreenGeometryData::ScreenElement *> *this, unsigned int);
void __thiscall NiTSet<NiScreenGeometryData::ScreenElement__>::Realloc(NiTSet<NiD3DTextureStageGroup *> *this, unsigned int uiNewSize);
NiRTTI *__thiscall NiScreenGeometryData::GetRTTI(NiScreenGeometryData *this);
NiObject *__cdecl NiScreenGeometryData::CreateObject();
void *__thiscall NiScreenGeometry::_vector_deleting_destructor_(NiScreenGeometry *this, unsigned int);
NiObject *__thiscall NiScreenGeometry::CreateClone(NiScreenGeometry *this, NiCloningProcess *kCloning);
NiRTTI *__thiscall NiScreenPolygon::GetRTTI(NiScreenPolygon *this);
void __thiscall NiScreenPolygon::CopyMembers(NiScreenPolygon *this, NiScreenPolygon *pDest, NiCloningProcess *kCloning);
bool __thiscall NiScreenPolygon::RegisterStreamables(NiScreenPolygon *this, NiStream *stream);
void __thiscall NiScreenSpaceCamera::ProcessClone(NiScreenSpaceCamera *this, NiCloningProcess *kCloning);
void __thiscall NiTPoolContainer<NiScreenGeometryData::ScreenElement>::NiTPoolContainer<NiScreenGeometryData::ScreenElement>(NiTPoolContainer<NiScreenGeometryData::ScreenElement> *this, unsigned int uiSize);
void *__thiscall NiScreenGeometryData::ScreenElement::_vector_deleting_destructor_(NiScreenGeometryData::ScreenElement *this, unsigned int);
void *__cdecl NiScreenGeometryData::_SDMInit();
void __thiscall NiScreenGeometryData::SaveBinary(NiScreenGeometryData *this, NiStream *kStream);
bool __thiscall NiScreenGeometryData::IsEqual(NiScreenGeometryData *this, NiObject *pkObject);
void __thiscall NiScreenPolygon::NiScreenPolygon(NiScreenPolygon *this, unsigned __int16 usVertices, NiPoint3 *pVertex, NiPoint2 *pTexture, NiColorA *pColor);
void *__thiscall NiScreenPolygon::_vector_deleting_destructor_(NiScreenPolygon *this, unsigned int);
NiObject *__thiscall NiScreenPolygon::CreateClone(NiScreenPolygon *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiScreenPolygon::CreateObject();
void __thiscall NiScreenPolygon::LoadBinary(NiScreenPolygon *this, NiStream *stream);
void __thiscall NiScreenPolygon::LinkObject(NiScreenPolygon *this, NiStream *stream);
void __thiscall NiScreenPolygon::SaveBinary(NiScreenPolygon *this, NiStream *stream);
bool __thiscall NiScreenPolygon::IsEqual(NiScreenPolygon *this, NiObject *pkObject);
void __thiscall NiTArray<NiPointer<NiScreenPolygon>>::_NiTArray<NiPointer<NiScreenPolygon>>(NiTArray<NiPointer<NiScreenPolygon> > *this);
void __thiscall NiTArray<NiPointer<NiScreenTexture>>::_NiTArray<NiPointer<NiScreenTexture>>(NiTArray<NiPointer<NiScreenTexture> > *this);
void __thiscall NiTArray<NiPointer<NiActorManager::CallbackData>>::SetAt(NiTArray<NiPointer<NiD3DShaderConstantMapEntry> > *this, unsigned int uiIndex, NiPointer<NiD3DShaderConstantMapEntry> *element);
void *__thiscall NiTArray<NiPointer<NiScreenPolygon>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiScreenPolygon> > *this, unsigned int);
void *__thiscall NiTArray<NiPointer<NiScreenTexture>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiScreenTexture> > *this, unsigned int);
void __thiscall NiTPool<NiScreenGeometryData::ScreenElement>::CreateNewObjects(NiTPool<NiScreenGeometryData::ScreenElement> *this, unsigned int uiSize);
void __cdecl NiScreenGeometryData::_SDMShutdown();
void __thiscall NiScreenGeometryData::GetViewerStrings(NiScreenGeometryData *this, NiTArray<char *> *pkStrings);
void __thiscall NiScreenGeometry::GetViewerStrings(NiScreenGeometry *this, NiTArray<char *> *pkStrings);
void __thiscall NiScreenPolygon::GetViewerStrings(NiScreenPolygon *this, NiTArray<char *> *pkStrings);
void __thiscall NiScreenSpaceCamera::NiScreenSpaceCamera(NiScreenSpaceCamera *this);
NiRTTI *__thiscall NiScreenSpaceCamera::GetRTTI(NiScreenSpaceCamera *this);
void __thiscall NiScreenSpaceCamera::_NiScreenSpaceCamera(NiScreenSpaceCamera *this);
void __thiscall NiScreenSpaceCamera::CopyMembers(NiScreenSpaceCamera *this, NiScreenSpaceCamera *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiScreenSpaceCamera::CreateObject();
void __thiscall NiScreenSpaceCamera::GetViewerStrings(NiScreenSpaceCamera *this, NiTArray<char *> *pkStrings);
void __thiscall NiScreenGeometryData::_NiScreenGeometryData(NiScreenGeometryData *this);
void __thiscall NiScreenGeometryData::LoadBinary(NiScreenGeometryData *this, NiStream *kStream);
void *__thiscall NiScreenSpaceCamera::_scalar_deleting_destructor_(NiScreenSpaceCamera *this, unsigned int);
NiObject *__thiscall NiScreenSpaceCamera::CreateClone(NiScreenSpaceCamera *this, NiCloningProcess *kCloning);
void __thiscall NiScreenSpaceCamera::LinkObject(NiScreenSpaceCamera *this, NiStream *kStream);
void *__thiscall NiScreenGeometryData::_scalar_deleting_destructor_(NiScreenGeometryData *this, unsigned int);
NiObject *__cdecl NiVectorExtraData::CreateObject();
bool __thiscall NiVectorExtraData::IsEqual(NiVectorExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiVectorExtraData::GetRTTI(NiVectorExtraData *this);
void *__thiscall NiVectorExtraData::_scalar_deleting_destructor_(NiVectorExtraData *this, unsigned int);
NiObject *__thiscall NiVectorExtraData::CreateClone(NiVectorExtraData *this, NiCloningProcess *kCloning);
void __thiscall NiVectorExtraData::LoadBinary(NiVectorExtraData *this, NiStream *kStream);
void __thiscall NiVectorExtraData::SaveBinary(NiVectorExtraData *this, NiStream *kStream);
void __thiscall NiVectorExtraData::GetViewerStrings(NiVectorExtraData *this, NiTArray<char *> *pStrings);
bool __thiscall NiColorA::operator__(NiPlane *this, NiPlane *kPlane);
void __thiscall NiTextureEffect::NiTextureEffect(NiTextureEffect *this);
NiRTTI *__thiscall NiTextureEffect::GetRTTI(NiTextureEffect *this);
void __thiscall NiTextureEffect::UpdateProjection(NiTextureEffect *this);
void __thiscall NiTextureEffect::UpdateWorldData(NiTextureEffect *this);
void __thiscall NiTextureEffect::CopyMembers(NiTextureEffect *this, NiTextureEffect *pDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiTextureEffect::CreateObject();
void __thiscall NiTextureEffect::LinkObject(NiTextureEffect *this, NiStream *kStream);
bool __thiscall NiTextureEffect::RegisterStreamables(NiTextureEffect *this, NiStream *kStream);
char *__cdecl NiTextureEffect::GetViewerString(const char *pPrefix, NiTextureEffect::TextureType eMode);
char *__cdecl NiTextureEffect::GetViewerString(const char *pPrefix, NiTextureEffect::CoordGenType eMode);
void *__thiscall NiTextureEffect::_scalar_deleting_destructor_(NiTextureEffect *this, unsigned int);
NiObject *__thiscall NiTextureEffect::CreateClone(NiTextureEffect *this, NiCloningProcess *kCloning);
bool __thiscall NiTextureEffect::IsEqual(NiTextureEffect *this, NiObject *pObject);
void __thiscall NiTextureEffect::LoadBinary(NiTextureEffect *this, NiStream *kStream);
void __thiscall NiTextureEffect::SaveBinary(NiTextureEffect *this, NiStream *kStream);
void __thiscall NiTextureEffect::GetViewerStrings(NiTextureEffect *this, NiTArray<char *> *pStrings);
void __thiscall NiIntegersExtraData::LinkObject(NPTR_ISShader_v2 *this, NiStream *stream);
bool __thiscall NiSwitchStringExtraData::IsEqual(NiSwitchStringExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiSwitchStringExtraData::GetRTTI(NiSwitchStringExtraData *this);
void __thiscall NiSwitchStringExtraData::CopyMembers(NiSwitchStringExtraData *this, NiSwitchStringExtraData *pDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiSwitchStringExtraData::CreateObject();
void *__thiscall NiSwitchStringExtraData::_vector_deleting_destructor_(NiSwitchStringExtraData *this, unsigned int);
NiObject *__thiscall NiSwitchStringExtraData::CreateClone(NiSwitchStringExtraData *this, NiCloningProcess *kCloning);
void __thiscall NiSwitchStringExtraData::LoadBinary(NiSwitchStringExtraData *this, NiStream *kStream);
void __thiscall NiSwitchStringExtraData::SaveBinary(NiSwitchStringExtraData *this, NiStream *kStream);
void __thiscall NiSwitchStringExtraData::GetViewerStrings(NiSwitchStringExtraData *this, NiTArray<char *> *pStrings);
bool __thiscall NiStringsExtraData::IsEqual(NiStringsExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiStringsExtraData::GetRTTI(NiStringsExtraData *this);
void __thiscall NiStringsExtraData::CopyMembers(NiStringsExtraData *this, NiStringsExtraData *pDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiStringsExtraData::CreateObject();
void *__thiscall NiStringsExtraData::_vector_deleting_destructor_(NiStringsExtraData *this, unsigned int);
NiObject *__thiscall NiStringsExtraData::CreateClone(NiStringsExtraData *this, NiCloningProcess *kCloning);
void __thiscall NiStringsExtraData::SaveBinary(NiStringsExtraData *this, NiStream *kStream);
void __thiscall NiStringsExtraData::LoadBinary(NiStringsExtraData *this, NiStream *kStream);
void __thiscall NiStringsExtraData::GetViewerStrings(NiStringsExtraData *this, NiTArray<char *> *pStrings);
void __thiscall NiSpotLight::LinkObject(NiSpotLight *this, NiStream *stream);
bool __thiscall NiSpotLight::RegisterStreamables(NiSpotLight *this, NiStream *stream);
bool __thiscall NiSpotLight::IsEqual(NiSpotLight *this, NiObject *pObject);
NiRTTI *__thiscall NiPointLight::GetRTTI(NiPointLight *this);
void __thiscall NiSpotLight::NiSpotLight(NiSpotLight *this);
NiRTTI *__thiscall NiSpotLight::GetRTTI(NiSpotLight *this);
void __thiscall NiSpotLight::UpdateWorldData(NiSpotLight *this);
NiObject *__thiscall NiSpotLight::CreateClone(NiSpotLight *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiSpotLight::CreateObject();
void __thiscall NiSpotLight::LoadBinary(NiSpotLight *this, NiStream *stream);
void __thiscall NiSpotLight::SaveBinary(NiSpotLight *this, NiStream *stream);
void __thiscall NiSpotLight::GetViewerStrings(NiSpotLight *this, NiTArray<char *> *pStrings);
bool __thiscall NiSourceCubeMap::RegisterStreamables(NiSourceCubeMap *this, NiStream *kStream);
void __thiscall NiSourceCubeMap::SaveBinary(NiSourceCubeMap *this, NiStream *kStream);
bool __thiscall NiSourceCubeMap::IsEqual(NiSourceCubeMap *this, NiObject *pkObject);
void __thiscall NiSourceCubeMap::LoadPixelDataFromFile(NiSourceCubeMap *this);
void __thiscall NiSourceCubeMap::DestroyAppPixelData(NiSourceTexture *this);
bool __thiscall NiSourceCubeMap::CreateRendererData(NiSourceCubeMap *this);
void __thiscall NiSourceCubeMap::LoadFromPixelData(NiSourceCubeMap *this, NiPixelData *pkPosXRaw, NiPixelData *pkNegXRaw, NiPixelData *pkPosYRaw, NiPixelData *pkNegYRaw, NiPixelData *pkPosZRaw, NiPixelData *pkNegZRaw);
void __thiscall NiSourceCubeMap::LinkObject(NiSourceCubeMap *this, NiStream *kStream);
NiRTTI *__thiscall NiSourceCubeMap::GetRTTI(NiSourceCubeMap *this);
void __thiscall NiSourceCubeMap::LoadFromFiles(NiSourceCubeMap *this, const char *pcPosXFilename, const char *pcNegXFilename, const char *pcPosYFilename, const char *pcNegYFilename, const char *pcPosZFilename, const char *pcNegZFilename, NiSearchPath *kPath);
NiObject *__cdecl NiSourceCubeMap::CreateObject();
void *__thiscall NiSourceCubeMap::_scalar_deleting_destructor_(NiSourceCubeMap *this, unsigned int);
void __thiscall NiSourceCubeMap::LoadBinary(NiSourceCubeMap *this, NiStream *kStream);
void __thiscall NiSourceCubeMap::GetViewerStrings(NiSourceCubeMap *this, NiTArray<char *> *pkStrings);
void __thiscall NiScreenTexture::GetViewerStrings(NiScreenTexture *this, NiTArray<char *> *pStrings);
bool __thiscall NiScreenTexture::RegisterStreamables(NiScreenTexture *this, NiStream *kStream);
void __thiscall NiTSet<NiScreenTexture::ScreenRect>::Realloc(NiTSet<NiScreenTexture::ScreenRect> *this, unsigned int uiNewSize);
NiRTTI *__thiscall NiScreenTexture::GetRTTI(NiScreenTexture *this);
void __thiscall NiScreenTexture::Draw(NiScreenTexture *this, NiRenderer *pkRenderer);
NiObject *__cdecl NiScreenTexture::CreateObject();
void __thiscall NiScreenTexture::LinkObject(NiScreenTexture *this, NiStream *kStream);
bool __thiscall NiScreenTexture::IsEqual(NiScreenTexture *this, NiObject *pkObject);
void *__thiscall NiScreenTexture::_vector_deleting_destructor_(NiScreenTexture *this, unsigned int);
void __thiscall NiScreenTexture::CopyMembers(NiScreenTexture *this, NiScreenTexture *pkDest, NiCloningProcess *kCloning);
void __thiscall NiScreenTexture::LoadBinary(NiScreenTexture *this, NiStream *kStream);
void __thiscall NiScreenTexture::SaveBinary(NiScreenTexture *this, NiStream *kStream);
NiObject *__thiscall NiScreenTexture::CreateClone(NiScreenTexture *this, NiCloningProcess *kCloning);
int __thiscall NiScreenLODData::GetLODIndex(NiScreenLODData *this, int iLODLevel);
float __cdecl NiMax(float fA, float fB);
NiRTTI *__thiscall NiScreenLODData::GetRTTI(NiScreenLODData *this);
void __thiscall NiScreenLODData::NiScreenLODData(NiScreenLODData *this);
void *__thiscall NiScreenLODData::_scalar_deleting_destructor_(NiScreenLODData *this, unsigned int);
void __thiscall NiScreenLODData::SetNumProportions(NiScreenLODData *this, unsigned int uiNumProportions);
int __thiscall NiScreenLODData::GetLODLevel(NiScreenLODData *this, NiCamera *pkCamera, NiLODNode *pkLOD);
NiObject *__cdecl NiScreenLODData::CreateObject();
bool __thiscall NiScreenLODData::IsEqual(NiScreenLODData *this, NiObject *pkObject);
NiLODData *__thiscall NiScreenLODData::Duplicate(NiScreenLODData *this);
void __thiscall NiScreenLODData::AutoSetBound(NiScreenLODData *this, NiLODNode *pkLOD);
NiObject *__thiscall NiScreenLODData::CreateClone(NiScreenLODData *this, NiCloningProcess *kCloning);
void __thiscall NiScreenLODData::SaveBinary(NiScreenLODData *this, NiStream *kStream);
void __thiscall NiScreenLODData::UpdateWorldData(NiScreenLODData *this, NiLODNode *pkLOD);
void __thiscall NiScreenLODData::LoadBinary(NiScreenLODData *this, NiStream *kStream);
void __thiscall NiScreenLODData::GetViewerStrings(NiScreenLODData *this, NiTArray<char *> *pkStrings);
void __thiscall NiParticlesData::_NiParticlesData(NiParticlesData *this);
void __thiscall NiParticlesData::ReplaceRadii(NiParticlesData *this, float *pfRadii);
void __thiscall NiParticlesData::ReplaceSizes(NiParticlesData *this, float *pfSizes);
void __thiscall NiParticlesData::ReplaceRotations(NiParticlesData *this, NiQuaternion *pkRotations);
void __thiscall NiParticlesData::ReplaceRotationAngles(NiParticlesData *this, float *pfRotationAngles);
void __thiscall NiParticlesData::ReplaceRotationAxes(NiParticlesData *this, NiPoint3 *pkRotationAxes);
void __thiscall NiParticlesData::RemoveParticle(NiParticlesData *this, unsigned __int16 usParticle);
NiRTTI *__thiscall NiParticlesData::GetRTTI(NiParticlesData *this);
void __thiscall NiParticlesData::SetActiveVertexCount(NiParticlesData *this, unsigned __int16 usActive);
unsigned __int16 __thiscall NiParticlesData::GetActiveVertexCount(NiParticlesData *this);
void *__thiscall NiParticlesData::_vector_deleting_destructor_(NiParticlesData *this, unsigned int);
void __thiscall NiParticlesData::NiParticlesData(NiParticlesData *this);
NiObject *__cdecl NiParticlesData::CreateObject();
NiObject *__cdecl NiParticlesData::CreateOldRotatingParticlesObject();
bool __thiscall NiParticlesData::IsEqual(NiParticlesData *this, NiObject *pkObject);
void __thiscall NiParticlesData::LoadBinary(NiParticlesData *this, NiStream *kStream);
void __thiscall NiParticlesData::SaveBinary(NiParticlesData *this, NiStream *kStream);
void __thiscall NiParticlesData::GetViewerStrings(NiParticlesData *this, NiTArray<char *> *pkStrings);
void __thiscall NiPointLight::CopyMembers(NiPointLight *this, NiPointLight *pDest, NiCloningProcess *kCloning);
bool __thiscall NiPointLight::IsEqual(NiPointLight *this, NiObject *pObject);
void __thiscall NiPointLight::UpdateWorldData(NiPointLight *this);
NiObject *__thiscall NiPointLight::CreateClone(NiPointLight *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPointLight::CreateObject();
void __thiscall NiPointLight::LoadBinary(NiPointLight *this, NiStream *stream);
void __thiscall NiPointLight::SaveBinary(NiPointLight *this, NiStream *stream);
void __thiscall NiPointLight::GetViewerStrings(NiPointLight *this, NiTArray<char *> *pStrings);
void __thiscall NiParticleMeshesData::LoadBinary(NiParticleMeshesData *this, NiStream *kStream);
void __thiscall NiParticleMeshesData::SetActiveVertexCount(NiParticleMeshesData *this, unsigned __int16 usActive);
bool __thiscall NiParticleMeshesData::RegisterStreamables(NiParticleMeshesData *this, NiStream *kStream);
void __thiscall NiParticleMeshesData::SaveBinary(NiParticleMeshesData *this, NiStream *kStream);
bool __thiscall NiParticleMeshesData::IsEqual(NiParticleMeshesData *this, NiObject *pkObject);
NiRTTI *__thiscall NiParticleMeshesData::GetRTTI(NiParticleMeshesData *this);
void __thiscall NiParticleMeshesData::NiParticleMeshesData(NiParticleMeshesData *this);
void __thiscall NiParticleMeshesData::_NiParticleMeshesData(NiParticleMeshesData *this);
void __thiscall NiParticleMeshesData::RemoveParticle(NiParticleMeshesData *this, unsigned __int16 usParticle);
void __thiscall NiParticleMeshesData::UpdateParticles(NiParticleMeshesData *this);
NiObject *__cdecl NiParticleMeshesData::CreateObject();
void __thiscall NiParticleMeshesData::LinkObject(NiParticleMeshesData *this, NiStream *kStream);
void *__thiscall NiParticleMeshesData::_vector_deleting_destructor_(NiParticleMeshesData *this, unsigned int);
void __thiscall NiParticleMeshesData::GetViewerStrings(NiParticleMeshesData *this, NiTArray<char *> *pkStrings);
void __thiscall NiParticleMeshes::UpdateDownwardPass(NiParticleMeshes *this, float fTime, bool bUpdateControllers);
void __thiscall NiParticleMeshes::UpdateSelectedDownwardPass(NiParticleMeshes *this, float fTime);
NiObject *__cdecl NiParticleMeshes::CreateObject();
void __thiscall NiTriStrips::LoadBinary(NiTriStrips *this, NiStream *kStream);
void __thiscall NiTriShape::LinkObject(NiTriStrips *this, NiStream *kStream);
NiRTTI *__thiscall NiParticleMeshes::GetRTTI(NiParticleMeshes *this);
NiObject *__thiscall NiParticleMeshes::CreateClone(NiParticleMeshes *this, NiCloningProcess *kCloning);
void __thiscall NiParticleMeshes::UpdateWorldData(NiParticleMeshes *this);
void __thiscall NiParticleMeshes::SetSelectiveUpdateFlags(NiParticleMeshes *this, bool *bSelectiveUpdate, bool bSelectiveUpdateTransforms, bool *bRigid);
void __thiscall NiParticleMeshes::UpdatePropertiesDownward(NiParticleMeshes *this, NiPropertyState *pkParentState);
void __thiscall NiParticleMeshes::UpdateEffectsDownward(NiParticleMeshes *this, NiDynamicEffectState *pkParentState);
void __thiscall NiParticleMeshes::OnVisible(NiParticleMeshes *this, NiCullingProcess *kCuller);
void __thiscall NiParticleMeshes::PurgeRendererData(NiParticleMeshes *this, NiRenderer *pkRenderer);
void __thiscall NiParticleMeshes::GetViewerStrings(NiParticleMeshes *this, NiTArray<char *> *pkStrings);
void __thiscall NiLinesData::NiLinesData(NiLinesData *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod, char *pkFlags);
NiObject *__cdecl NiLinesData::CreateObject();
void __thiscall NiScreenGeometryData::LinkObject(NiTriBasedGeomData *this, NiStream *kStream);
bool __thiscall NiLinesData::IsEqual(NiLinesData *this, NiObject *pkObject);
NiRTTI *__thiscall NiLinesData::GetRTTI(NiLinesData *this);
void *__thiscall NiLinesData::_vector_deleting_destructor_(NiLinesData *this, unsigned int);
void __thiscall NiLinesData::LoadBinary(NiLinesData *this, NiStream *kStream);
void __thiscall NiLinesData::SaveBinary(NiLinesData *this, NiStream *kStream);
void __thiscall NiLinesData::GetViewerStrings(NiLinesData *this, NiTArray<char *> *pkStrings);
void __thiscall NiLines::NiLines(NiLines *this, unsigned __int16 usVertices, NiPoint3 *pkVertex, NiColorA *pkColor, NiPoint2 *pkTexture, unsigned __int16 usNumTextureSets, NiGeometryData::DataFlags eNBTMethod, char *pkFlags);
NiObject *__cdecl NiLines::CreateObject();
void __thiscall NiTriBasedGeom::LoadBinary(NiTriBasedGeom *this, NiStream *kStream);
void __thiscall NiLines::LinkObject(NiTriBasedGeom *this, NiStream *kStream);
bool __thiscall NiParticles::RegisterStreamables(NiTriBasedGeom *this, NiStream *kStream);
void __thiscall NiTriBasedGeom::SaveBinary(NiTriBasedGeom *this, NiStream *kStream);
bool __thiscall NiLines::IsEqual(NiTriBasedGeom *this, NiObject *pkObject);
NiRTTI *__thiscall NiLines::GetRTTI(NiLines *this);
NiObject *__thiscall NiLines::CreateClone(NiLines *this, NiCloningProcess *kCloning);
void __thiscall NiLines::RenderImmediate(NiLines *this, NiRenderer *pkRenderer);
void __thiscall NiLines::GetViewerStrings(NiLines *this, NiTArray<char *> *pkStrings);
void __thiscall NiIntegersExtraData::CopyMembers(NiIntegersExtraData *this, NiIntegersExtraData *pDest, NiCloningProcess *kCloning);
bool __thiscall NiIntegersExtraData::IsEqual(NiIntegersExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiIntegersExtraData::GetRTTI(NiIntegersExtraData *this);
NiObject *__thiscall NiIntegersExtraData::CreateClone(NiIntegersExtraData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiIntegersExtraData::CreateObject();
void *__thiscall NiIntegersExtraData::_vector_deleting_destructor_(NiIntegersExtraData *this, unsigned int);
void __thiscall NiIntegersExtraData::LoadBinary(NiIntegersExtraData *this, NiStream *kStream);
void __thiscall NiFloatsExtraData::SaveBinary(NiIntegersExtraData *this, NiStream *kStream);
void __thiscall NiIntegersExtraData::GetViewerStrings(NiIntegersExtraData *this, NiTArray<char *> *pStrings);
bool __thiscall NiFloatExtraData::IsEqual(NiFloatExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiFloatExtraData::GetRTTI(NiFloatExtraData *this);
NiObject *__thiscall NiFloatExtraData::CreateClone(NiFloatExtraData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiFloatExtraData::CreateObject();
void *__thiscall NiFloatExtraData::_scalar_deleting_destructor_(NiFloatExtraData *this, unsigned int);
void __thiscall NiIntegerExtraData::SaveBinary(NiIntegerExtraData *this, NiStream *kStream);
void __thiscall NiFloatExtraData::GetViewerStrings(NiFloatExtraData *this, NiTArray<char *> *pStrings);
void __thiscall NiBSPNode::LoadBinary(NiOldWall *this, NiStream *kStream);
void __thiscall NiBSPNode::SaveBinary(NiBSPNode *this, NiStream *stream);
void __thiscall NiBSPNode::UpdateWorldPlane(NiBSPNode *this);
void __thiscall NiBSPNode::UpdateWorldData(NiBSPNode *this);
void __thiscall NiBSPNode::ApplyTransform(NiBSPNode *this, NiMatrix3 *mat, NiPoint3 *trn, bool bOnLeft);
void __thiscall NiBSPNode::OnVisible(NiBSPNode *this, NiCullingProcess *kCuller);
bool __thiscall NiBSPNode::IsEqual(NiBSPNode *this, NiObject *pObject);
void __thiscall NiBSPNode::GetViewerStrings(NiBSPNode *this, NiTArray<char *> *pStrings);
NiRTTI *__thiscall NiBSPNode::GetRTTI(NiBSPNode *this);
NiObject *__thiscall NiBSPNode::CreateClone(NiBSPNode *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBSPNode::CreateObject();
bool __thiscall NiBooleanExtraData::IsEqual(NiBooleanExtraData *this, NiObject *pObject);
NiRTTI *__thiscall NiBooleanExtraData::GetRTTI(NiBooleanExtraData *this);
NiObject *__thiscall NiBooleanExtraData::CreateClone(NiBooleanExtraData *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBooleanExtraData::CreateObject();
void *__thiscall NiBooleanExtraData::_scalar_deleting_destructor_(NiBooleanExtraData *this, unsigned int);
void __thiscall NiBooleanExtraData::LoadBinary(NiBooleanExtraData *this, NiStream *kStream);
void __thiscall NiBooleanExtraData::SaveBinary(NiBooleanExtraData *this, NiStream *kStream);
void __thiscall NiBooleanExtraData::GetViewerStrings(NiBooleanExtraData *this, NiTArray<char *> *pStrings);
void __thiscall NiBillboardNode::UpdateDownwardPass(NiBillboardNode *this, float fTime, bool bUpdateControllers);
void __thiscall NiBillboardNode::UpdateSelectedDownwardPass(NiBillboardNode *this, float fTime);
void __thiscall NiBillboardNode::UpdateRigidDownwardPass(NiBillboardNode *this, float fTime);
bool __thiscall NiSwitchNode::RegisterStreamables(NsFadeNode *this, NiStream *stream);
bool __thiscall NiBillboardNode::RotateToCenter(NiBillboardNode *this, NiCamera *pkCamera, NiPoint3 *kWorldTranslate, NiPoint3 *kCamD, NiPoint3 *kCamU, NiPoint3 *kCamR);
int __stdcall loc_859679(int pkCamera, int kWorldTranslate, int kCamD, int kCamU, int kCamR); // weak
bool __thiscall NiBillboardNode::IsEqual(NiBillboardNode *this, NiObject *pkObject);
char *__cdecl NiBillboardNode::GetViewerString(const char *pcPrefix, NiBillboardNode::FaceMode eMode);
NiRTTI *__thiscall NiBillboardNode::GetRTTI(NiBillboardNode *this);
void *__thiscall NiBillboardNode::_vector_deleting_destructor_(NiNode *this, unsigned int);
void __thiscall NiBillboardNode::RotateToCamera(NiBillboardNode *this, NiCamera *pkCamera);
void __thiscall NiBillboardNode::OnVisible(NiBillboardNode *this, NiCullingProcess *kCuller);
void __thiscall NiBillboardNode::UpdateWorldBound(NiBillboardNode *this);
NiObject *__thiscall NiBillboardNode::CreateClone(NiBillboardNode *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiBillboardNode::CreateObject();
void __thiscall NiBillboardNode::LoadBinary(NiBillboardNode *this, NiStream *kStream);
void __thiscall NiBillboardNode::SaveBinary(NiBillboardNode *this, NiStream *kStream);
void __thiscall NiBillboardNode::GetViewerStrings(NiBillboardNode *this, NiTArray<char *> *pkStrings);
void __thiscall NiParticles::NiParticles(NiParticles *this);
void __thiscall NiTriBasedGeom::CopyMembers(NiTriBasedGeom *this, NiTriBasedGeom *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiParticles::CreateObject();
NiRTTI *__thiscall NiParticles::GetRTTI(NiParticles *this);
void *__thiscall NiGeometry::_scalar_deleting_destructor_(NiParticles *this, unsigned int);
void __thiscall NiParticles::UpdateEffectsDownward(NiParticles *this, NiDynamicEffectState *pParentState);
void __thiscall NiParticles::CalculateConsistency(NiParticles *this, bool bTool);
NiObject *__thiscall NiParticles::CreateClone(NiParticles *this, NiCloningProcess *kCloning);
void __thiscall NiParticles::RenderImmediate(NiParticles *this, NiRenderer *pkRenderer);
void __thiscall NiParticles::GetViewerStrings(NiParticles *this, NiTArray<char *> *pStrings);
void __thiscall NiAdditionalGeometryData::NiAGDDataStream::FillInByteSizeArray(NiAdditionalGeometryData::NiAGDDataStream *this, unsigned int *pauiDataArray, unsigned int *uiIndex, unsigned int uiArraySize);
bool __thiscall NiAdditionalGeometryData::NiAGDDataBlock::IsEqual(NiAdditionalGeometryData::NiAGDDataBlock *this, NiAdditionalGeometryData::NiAGDDataBlock *pkOther);
void *__thiscall NiTArray<NiAdditionalGeometryData::NiAGDDataBlock__>::_vector_deleting_destructor_(NiTArray<NiAdditionalGeometryData::NiAGDDataBlock *> *this, unsigned int);
bool __thiscall NiAdditionalGeometryData::GetDataStream(NiAdditionalGeometryData *this, unsigned int uiStreamIndex, char **pucData, unsigned int *uiType, unsigned __int16 *usCount, unsigned int *uiTotalSize, unsigned int *uiUnitSize, unsigned int *uiStride);
bool __thiscall NiAdditionalGeometryData::IsEqual(NiAdditionalGeometryData *this, NiObject *pkObject);
void __thiscall NiAdditionalGeometryData::NiAdditionalGeometryData(NiAdditionalGeometryData *this);
NiRTTI *__thiscall NiAdditionalGeometryData::GetRTTI(NiAdditionalGeometryData *this);
void __thiscall NiAdditionalGeometryData::NiAGDDataBlock::SaveBinary(NiAdditionalGeometryData::NiAGDDataBlock *this, NiStream *kStream, unsigned int uiBlockIdx, NiAdditionalGeometryData::NiAGDDataStream *pkDataStreams, unsigned int uiNumStreams, unsigned __int16 usVertexCount);
void __thiscall NiAdditionalGeometryData::_NiAdditionalGeometryData(NiAdditionalGeometryData *this);
NiObject *__cdecl NiAdditionalGeometryData::CreateObject();
void *__thiscall NiAdditionalGeometryData::_vector_deleting_destructor_(NiAdditionalGeometryData *this, unsigned int);
void __thiscall NiAdditionalGeometryData::NiAGDDataStream::LoadBinary(NiAdditionalGeometryData::NiAGDDataStream *this, NiStream *kStream);
void __thiscall NiAdditionalGeometryData::NiAGDDataStream::SaveBinary(NiAdditionalGeometryData::NiAGDDataStream *this, NiStream *kStream);
void __thiscall NiAdditionalGeometryData::NiAGDDataStream::GetViewerStrings(NiAdditionalGeometryData::NiAGDDataStream *this, NiTArray<char *> *pkStrings);
void __thiscall NiAdditionalGeometryData::NiAGDDataBlock::LoadBinary(NiAdditionalGeometryData::NiAGDDataBlock *this, NiStream *kStream, unsigned int uiBlockIdx, NiAdditionalGeometryData::NiAGDDataStream *pkDataStreams, unsigned int uiNumStreams, unsigned __int16 usVertexCount);
void __thiscall NiAdditionalGeometryData::LoadBinary(NiAdditionalGeometryData *this, NiStream *kStream);
void __thiscall NiAdditionalGeometryData::SaveBinary(NiAdditionalGeometryData *this, NiStream *kStream);
void __thiscall NiAdditionalGeometryData::GetViewerStrings(NiAdditionalGeometryData *this, NiTArray<char *> *pkStrings);
void __thiscall NiTriStripsData::CalculateNormals(NiTriStripsData *this);
void __thiscall NiMilesAudioSDM::NiMilesAudioSDM(NiMilesAudioSDM *this);
void __cdecl NiMilesAudioSDM::Init(); // idb
void __cdecl NiMilesAudioSDM::Shutdown(); // idb
void __thiscall NiAudioSystem::NiAudioSystem(NiAudioSystem *this);
void __thiscall NiAudioSystem::_NiAudioSystem(NiAudioSystem *this);
NiAudioListener *__thiscall NiAudioSystem::GetListener(NiAudioSystem *this);
void __thiscall NiAudioSystem::Shutdown(NiAudioSystem *this);
void __thiscall NiAudioSystem::AddSource(NiAudioSystem *this, NiAudioSource *pSource);
void __thiscall NiAudioSystem::RemoveSource(NiAudioSystem *this, NiAudioSource *pSource);
void __thiscall NiAudioSystem::Update(NiAudioSystem *this, float fTime, bool bUpdateAll);
void __thiscall NiAudioSystem::PlayAllSources(NiAudioSystem *this);
void __thiscall NiAudioSystem::StopAllSources(NiAudioSystem *this);
void __thiscall NiAudioSystem::UpdateAllSources(NiAudioSystem *this, float fTime);
NiAudioSource *__thiscall NiAudioSystem::GetFirstSource(NiAudioSystem *this, void **iter);
NiAudioSource *__thiscall NiAudioSystem::GetNextSource(NiAudioSystem *this, void **iter);
NiAudioSource *__thiscall NiAudioSystem::FindDuplicateSource(NiAudioSystem *this, NiAudioSource *pkOriginal);
bool __thiscall NiAudioSystem::SetUnitsPerMeter(NiAudioSystem *this, float fUnits);
NiObject *__cdecl NiAudioSystem::CreateObject();
void __thiscall NiAudioSystem::LoadBinary(NiAudioSystem *this, NiStream *stream);
void __thiscall NiAudioSystem::LinkObject(NiAudioSystem *this, NiStream *stream);
bool __thiscall NiAudioSystem::RegisterStreamables(NiAudioSystem *this, NiStream *stream);
void __thiscall NiAudioSystem::SaveBinary(NiAudioSystem *this, NiStream *stream);
bool __thiscall NiAudioSystem::IsEqual(NiAudioSystem *this, NiObject *pObject);
NiAudioSystem *__cdecl NiAudioSystem::GetAudioSystem();
float __thiscall NiAudioSystem::GetUnitsPerMeter(NiAudioSystem *this);
void *__thiscall NiAudioSystem::_vector_deleting_destructor_(NiAudioSystem *this, unsigned int);
void *__thiscall NiTPointerList<NiAudioSource__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiAudioSource *> *this, unsigned int);
void __thiscall NiTPointerMap<void___PgFrameWork__>::DeleteItem(NiTPointerMap<void *,PgFrameWork *> *this, NiTMapItem<void *,PgFrameWork *> *pkItem);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiAudioSource__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiAudioSource *> *this, unsigned int);
NiRTTI *__thiscall NiAudioSystem::GetRTTI(NiAudioSystem *this);
NiMilesAudioSystem *__cdecl NiMilesAudioSystem::GetAudioSystem();
void __thiscall NiMilesAudioSystem::NiMilesAudioSystem(NiMilesAudioSystem *this);
void __thiscall NiMilesAudioSystem::_NiMilesAudioSystem(NiMilesAudioSystem *this);
void __thiscall NiMilesAudioSystem::SetHWnd(NiMilesAudioSystem *this, HWND__ *hWnd);
HWND__ *__thiscall NiMilesAudioSystem::GetHWnd(NiMilesAudioSystem *this);
bool __thiscall NiMilesAudioSystem::Startup(NiMilesAudioSystem *this, const char *pcDirectoryname);
void __thiscall NiMilesAudioSystem::Shutdown(NiMilesAudioSystem *this);
NiMilesListener *__thiscall NiMilesAudioSystem::GetListener(NiMilesAudioSystem *this);
NiAudioSource *__thiscall NiMilesAudioSystem::CreateSource(NiMilesAudioSystem *this, unsigned int uiType);
NiAudioSystem::SpeakerType __thiscall NiMilesAudioSystem::GetSpeakerType(NiMilesAudioSystem *this);
NiAudioSystem::SpeakerType __thiscall NiMilesAudioSystem::GetSpeakerType(NiMilesAudioSystem *this, NiProviderInfo *pProvider);
bool __thiscall NiMilesAudioSystem::SetSpeakerType(NiMilesAudioSystem *this, unsigned int uiType);
bool __thiscall NiMilesAudioSystem::SetSpeakerType(NiMilesAudioSystem *this, NiProviderInfo *pProvider, unsigned int uiType);
bool __thiscall NiMilesAudioSystem::SetBestSpeakerTypeAvailable(NiMilesAudioSystem *this);
bool __thiscall NiMilesAudioSystem::SetBestSpeakerTypeAvailable(NiMilesAudioSystem *this, NiProviderInfo *pProvider);
char *__thiscall NiMilesAudioSystem::GetLastError(NiMilesAudioSystem *this);
NiMilesSource *__thiscall NiMilesAudioSystem::GetFirstSource(NiMilesAudioSystem *this, void **iter);
NiMilesSource *__thiscall NiMilesAudioSystem::GetNextSource(NiMilesAudioSystem *this, void **iter);
NiMilesSource *__thiscall NiMilesAudioSystem::FindDuplicateSource(NiMilesAudioSystem *this, NiAudioSource *pkOriginal);
bool __thiscall NiMilesAudioSystem::IsUniqueSource(NiMilesAudioSystem *this, NiMilesSource *pkOriginal);
bool __thiscall NiMilesAudioSystem::SetUnitsPerMeter(NiMilesAudioSystem *this, float fUnits);
NiProviderInfo *__thiscall NiMilesAudioSystem::GetFirstProvider(NiMilesAudioSystem *this, void **iter);
NiProviderInfo *__thiscall NiMilesAudioSystem::GetNextProvider(NiMilesAudioSystem *this, void **iter);
NiProviderInfo *__thiscall NiMilesAudioSystem::GetDefaultProvider(NiMilesAudioSystem *this);
void __thiscall NiMilesAudioSystem::SetDefaultProvider(NiMilesAudioSystem *this, NiProviderInfo *pkDefault);
void __thiscall NiMilesAudioSystem::SetProviderPreference(NiMilesAudioSystem *this, NiProviderInfo *pProvider, char *cPreferenceName, void *PreferenceValue);
void __thiscall NiMilesAudioSystem::GetProviderPreference(NiMilesAudioSystem *this, NiProviderInfo *pProvider, char *cPreferenceName, void *PreferenceValue);
bool __thiscall NiMilesAudioSystem::GetReverbAvailable(NiMilesAudioSystem *this);
bool __thiscall NiMilesAudioSystem::GetReverbAvailable(NiMilesAudioSystem *this, NiProviderInfo *pProvider);
bool __thiscall NiMilesAudioSystem::SetCurrentRoomReverb(NiMilesAudioSystem *this, unsigned int dwPreset);
bool __thiscall NiMilesAudioSystem::SetCurrentRoomReverb(NiMilesAudioSystem *this, NiProviderInfo *pProvider, unsigned int dwPreset);
unsigned int __thiscall NiMilesAudioSystem::GetCurrentRoomReverb(NiMilesAudioSystem *this);
unsigned int __thiscall NiMilesAudioSystem::GetCurrentRoomReverb(NiMilesAudioSystem *this, NiProviderInfo *pProvider);
void *__thiscall NiMilesAudioSystem::GetDigitalDriver(NiMilesAudioSystem *this);
NiObject *__cdecl NiMilesAudioSystem::CreateObject();
void __thiscall NiMilesAudioSystem::LoadBinary(NiMilesAudioSystem *this, NiStream *stream);
void __thiscall NiMilesAudioSystem::LinkObject(NiMilesAudioSystem *this, NiStream *stream);
bool __thiscall NiMilesAudioSystem::RegisterStreamables(NiMilesAudioSystem *this, NiStream *stream);
void __thiscall NiMilesAudioSystem::SaveBinary(NiMilesAudioSystem *this, NiStream *stream);
bool __thiscall NiMilesAudioSystem::IsEqual(NiMilesAudioSystem *this, NiObject *pObject);
void *__thiscall NiMilesAudioSystem::_vector_deleting_destructor_(NiMilesAudioSystem *this, unsigned int);
void *__thiscall NiTPointerList<NiProviderInfo__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiProviderInfo *> *this, unsigned int);
NiTMapItem<void *,PgFrameWork *> *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiProviderInfo__>::NewItem(NiTPointerMap<void *,PgFrameWork *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiProviderInfo__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiProviderInfo *> *this, unsigned int);
NiRTTI *__thiscall NiMilesAudioSystem::GetRTTI(NiMilesAudioSystem *this);
void __thiscall NiMilesSource::NiMilesSource(NiMilesSource *this, unsigned int uiType);
void __thiscall NiMilesSource::_NiMilesSource(NiMilesSource *this);
void __thiscall NiMilesSource::Release(NiMilesSource *this);
void __thiscall NiMilesSource::SetAllowSharing(NiMilesSource *this, bool bAllowSharing);
void __thiscall NiMilesSource::SetStreamed(NiMilesSource *this, bool bStream);
void __thiscall NiMilesSource::SetFilename(NiMilesSource *this, const char *pcFilename);
void __thiscall NiMilesSource::SetFilename(NiMilesSource *this, const char *pFilename, NiProviderInfo *pProvider);
bool __thiscall NiMilesSource::Load(NiMilesSource *this);
bool __thiscall NiMilesSource::Unload(NiMilesSource *this);
void *__thiscall NiMilesSource::GetFileImage(NiMilesSource *this);
void __thiscall NiMilesSource::SetLoopCount(NiMilesSource *this, int iLoopCount);
bool __thiscall NiMilesSource::SetConeData(NiMilesSource *this, float fAngle1Deg, float fAngle2Deg, float fGain);
void __thiscall NiMilesSource::GetConeData(NiMilesSource *this, float *fAngle1Deg, float *fAngle2Deg, float *fGain);
bool __thiscall NiMilesSource::SetMinMaxDistance(NiMilesSource *this, float fMin, float fMax);
void __thiscall NiMilesSource::GetMinMaxDistance(NiMilesSource *this, float *fMin, float *fMax);
bool __thiscall NiMilesSource::SetGain(NiMilesSource *this, float fGain);
float __thiscall NiMilesSource::GetGain(NiMilesSource *this);
bool __thiscall NiMilesSource::SetPlaybackRate(NiMilesSource *this, int lRate);
int __thiscall NiMilesSource::GetPlaybackRate(NiMilesSource *this);
void __thiscall NiMilesSource::SetSamplePreference(NiMilesSource *this, char *cPreferenceName, void *PreferenceValue);
void __thiscall NiMilesSource::GetSamplePreference(NiMilesSource *this, char *cPreferenceName, void *PreferenceValue);
bool __thiscall NiMilesSource::Play(NiMilesSource *this);
bool __thiscall NiMilesSource::Stop(NiMilesSource *this);
void __thiscall NiMilesSource::Rewind(NiMilesSource *this);
NiAudioSource::Status __thiscall NiMilesSource::GetStatus(NiMilesSource *this);
bool __thiscall NiMilesSource::SetPlayTime(NiMilesSource *this, float fTime);
float __thiscall NiMilesSource::GetPlayTime(NiMilesSource *this);
bool __thiscall NiMilesSource::GetPlayLength(NiMilesSource *this, float *fTime);
bool __thiscall NiMilesSource::SetPlayPosition(NiMilesSource *this, unsigned int dwPos);
unsigned int __thiscall NiMilesSource::GetPlayPosition(NiMilesSource *this);
void __thiscall NiMilesSource::Update(NiMilesSource *this, float fTime);
bool __thiscall NiMilesSource::SetRoomEffectLevel(NiMilesSource *this, float fLevel);
float __thiscall NiMilesSource::GetRoomEffectLevel(NiMilesSource *this);
bool __thiscall NiMilesSource::SetOcclusionFactor(NiMilesSource *this, float fLevel);
float __thiscall NiMilesSource::GetOcclusionFactor(NiMilesSource *this);
bool __thiscall NiMilesSource::SetObstructionFactor(NiMilesSource *this, float fLevel);
float __thiscall NiMilesSource::GetObstructionFactor(NiMilesSource *this);
NiPoint3 *__thiscall NiMilesSource::GetPosition(NiMilesSource *this, NiPoint3 *result);
void __thiscall NiMilesSource::GetOrientation(NiMilesSource *this, NiPoint3 *dir, NiPoint3 *up);
NiPoint3 *__thiscall NiMilesSource::GetVelocity(NiMilesSource *this, NiPoint3 *result);
void *__thiscall NiMilesSource::GetHandle(NiMilesSource *this);
void __thiscall NiMilesSource::CreateHandle(NiMilesSource *this);
NiObject *__thiscall NiMilesSource::CreateClone(NiMilesSource *this, NiCloningProcess *kCloning);
void __thiscall NiMilesSource::CopyMembers(NiMilesSource *this, NiMilesSource *pDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiMilesSource::CreateObject();
void __thiscall NiMilesSource::LoadBinary(NiMilesSource *this, NiStream *stream);
void __thiscall NiMilesSource::LinkObject(NiMilesSource *this, NiStream *stream);
bool __thiscall NiMilesSource::RegisterStreamables(NiMilesSource *this, NiStream *stream);
void __thiscall NiMilesSource::SaveBinary(NiMilesSource *this, NiStream *stream);
bool __thiscall NiMilesSource::IsEqual(NiMilesSource *this, NiObject *pObject);
void *__thiscall NiMilesSource::_scalar_deleting_destructor_(NiMilesSource *this, unsigned int);
NiRTTI *__thiscall NiMilesSource::GetRTTI(NiMilesSource *this);
NiPoint3 *__thiscall NiMilesSource::GetWorldVelocity(NiMilesSource *this, NiPoint3 *result);
void __thiscall NiMilesListener::NiMilesListener(NiMilesListener *this);
void __thiscall NiMilesListener::_NiMilesListener(NiMilesListener *this);
void __thiscall NiMilesListener::Release(NiMilesListener *this);
void __thiscall NiMilesListener::Startup(NiMilesListener *this);
void __thiscall NiMilesListener::Startup(NiMilesListener *this, NiProviderInfo *pProvider);
void __thiscall NiMilesListener::Update(NiMilesListener *this);
NiPoint3 *__thiscall NiMilesListener::GetPosition(NiMilesListener *this, NiPoint3 *result);
NiPoint3 *__thiscall NiMilesListener::GetVelocity(NiMilesListener *this, NiPoint3 *result);
void __thiscall NiMilesListener::GetOrientation(NiMilesListener *this, NiPoint3 *dir, NiPoint3 *up);
NiObject *__cdecl NiMilesListener::CreateObject();
void __thiscall NiMilesListener::LoadBinary(NiMilesListener *this, NiStream *stream);
void __thiscall NiMilesListener::LinkObject(NiMilesListener *this, NiStream *stream);
bool __thiscall NiMilesListener::RegisterStreamables(NiMilesListener *this, NiStream *stream);
void __thiscall NiMilesListener::SaveBinary(NiMilesListener *this, NiStream *stream);
bool __thiscall NiMilesListener::IsEqual(NiMilesListener *this, NiObject *pObject);
void __thiscall NiMilesListener::SetDirectionVector(NiMilesListener *this, NiPoint3 *kDir);
NiPoint3 *__thiscall NiMilesListener::GetDirectionVector(NiMilesListener *this);
void __thiscall NiMilesListener::SetUpVector(NiMilesListener *this, NiPoint3 *kUp);
NiPoint3 *__thiscall NiMilesListener::GetUpVector(NiMilesListener *this);
void *__thiscall NiMilesListener::_scalar_deleting_destructor_(NiMilesListener *this, unsigned int);
NiRTTI *__thiscall NiMilesListener::GetRTTI(NiMilesListener *this);
NiPoint3 *__thiscall NiMilesListener::GetWorldVelocity(NiMilesListener *this, NiPoint3 *result);
void __thiscall NiAudioSource::NiAudioSource(NiAudioSource *this, unsigned int uiType);
void __thiscall NiAudioSource::_NiAudioSource(NiAudioSource *this);
void __thiscall NiAudioSource::Initialize(NiAudioSource *this);
void __thiscall NiAudioSource::SetFilename(NiAudioSource *this, const char *pFilename);
bool __thiscall NiAudioSource::Load(NiAudioSource *this);
bool __thiscall NiAudioSource::Unload(NiAudioSource *this);
void __thiscall NiAudioSource::Release(NiAudioSource *this);
bool __thiscall NiAudioSource::FadeToGain(NiAudioSource *this, float fGain, float fStartTime, float fDuration);
void __thiscall NiAudioSource::Update(NiAudioSource *this, float fTime);
bool __thiscall NiAudioSource::SetConeData(NiAudioSource *this, float fAngle1Deg, float fAngle2Deg, float fGain);
void __thiscall NiAudioSource::GetConeData(NiAudioSource *this, float *fAngle1Deg, float *fAngle2Deg, float *fGain);
bool __thiscall NiAudioSource::SetMinMaxDistance(NiAudioSource *this, float fMin, float fMax);
void __thiscall NiAudioSource::GetMinMaxDistance(NiAudioSource *this, float *fMin, float *fMax);
bool __thiscall NiAudioSource::SetGain(NiAudioSource *this, float fGain);
float __thiscall NiAudioSource::GetGain(NiAudioSource *this);
bool __thiscall NiAudioSource::SetPlaybackRate(NiAudioSource *this, int lRate);
int __thiscall NiAudioSource::GetPlaybackRate(NiAudioSource *this);
bool __thiscall NiAudioSource::SetPlayTime(NiAudioSource *this, float fTime);
float __thiscall NiAudioSource::GetPlayTime(NiAudioSource *this);
bool __thiscall NiAudioSource::SetPlayPosition(NiAudioSource *this, unsigned int Pos);
unsigned int __thiscall NiAudioSource::GetPlayPosition(NiAudioSource *this);
bool __thiscall NiAudioSource::SetRoomEffectLevel(NiAudioSource *this, float fLevel);
float __thiscall NiAudioSource::GetRoomEffectLevel(NiAudioSource *this);
bool __thiscall NiAudioSource::SetOcclusionFactor(NiAudioSource *this, float fLevel);
float __thiscall NiAudioSource::GetOcclusionFactor(NiAudioSource *this);
bool __thiscall NiAudioSource::SetObstructionFactor(NiAudioSource *this, float fLevel);
float __thiscall NiAudioSource::GetObstructionFactor(NiAudioSource *this);
void __thiscall NiAudioSource::SetVelocity(NiAudioSource *this, NiPoint3 *kVelocity);
NiPoint3 *__thiscall NiAudioSource::GetVelocity(NiAudioSource *this, NiPoint3 *result);
void __thiscall NiAudioSource::CopyMembers(NiAudioSource *this, NiAudioSource *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiAudioSource::CreateObject();
void __thiscall NiAudioSource::LoadBinary(NiAudioSource *this, NiStream *kStream);
void __thiscall NiAudioSource::LinkObject(NiAudioSource *this, NiStream *kStream);
bool __thiscall NiAudioSource::RegisterStreamables(NiAudioSource *this, NiStream *kStream);
void __thiscall NiAudioSource::SaveBinary(NiAudioSource *this, NiStream *kStream);
bool __thiscall NiAudioSource::IsEqual(NiAudioSource *this, NiObject *pkObject);
const char *__thiscall NiAudioSource::GetFilename(NiAudioSource *this);
const char *__thiscall NiAudioSource::GetLocalName(NiAudioSource *this);
void __thiscall NiAudioSource::SetDirectionVector(NiAudioSource *this, NiPoint3 *kDir);
NiPoint3 *__thiscall NiAudioSource::GetDirectionVector(NiAudioSource *this);
void __thiscall NiAudioSource::SetUpVector(NiAudioSource *this, NiPoint3 *kUp);
NiPoint3 *__thiscall NiAudioSource::GetUpVector(NiAudioSource *this);
void __thiscall NiAudioSource::SetLoopCount(NiAudioSource *this, int iLoopCount);
int __thiscall NiAudioSource::GetLoopCount(NiAudioSource *this);
void __thiscall NiAudioSource::SetLoaded(NiAudioSource *this, bool bLoaded);
bool __thiscall NiAudioSource::GetLoaded(NiAudioSource *this);
void __thiscall NiAudioSource::SetCone(NiAudioSource *this, bool bCone);
bool __thiscall NiAudioSource::GetCone(NiAudioSource *this);
void __thiscall NiAudioSource::SetStreamed(NiAudioSource *this, bool bStream);
bool __thiscall NiAudioSource::GetStreamed(NiAudioSource *this);
void __thiscall NiAudioSource::SetAllowSharing(NiAudioSource *this, bool bAllowSharing);
bool __thiscall NiAudioSource::GetAllowSharing(NiAudioSource *this);
unsigned int __thiscall NiAudioSource::GetType(NiAudioSource *this);
bool __thiscall NiAudioSource::CloseTo(NiAudioSource *this, float fA, float fB, float fEpsilon);
void *__thiscall NiAudioSource::_vector_deleting_destructor_(NiAudioSource *this, unsigned int);
void __cdecl NiStreamLoadBinary<long>(NiStream *kStream, int *value);
void __cdecl NiStreamLoadBinary<NiPoint3>(NiStream *kStream, NiPoint3 *value);
void __cdecl NiStreamSaveBinary<long>(NiStream *kStream, const int *value);
void __cdecl NiStreamSaveBinary<NiPoint3>(NiStream *kStream, NiPoint3 *value);
void __cdecl NiBinaryStreamLoad<long>(NiBinaryStream *is, int *pValue, unsigned int uiNumEls);
void __cdecl NiBinaryStreamLoad<NiPoint3>(NiBinaryStream *is, NiPoint3 *pValue, unsigned int uiNumEls);
void __cdecl NiBinaryStreamSave<long>(NiBinaryStream *os, const int *pValue, unsigned int uiNumEls);
void __cdecl NiBinaryStreamSave<NiPoint3>(NiBinaryStream *os, NiPoint3 *pValue, unsigned int uiNumEls);
NiRTTI *__thiscall NiAudioSource::GetRTTI(NiAudioSource *this);
void __thiscall NiAudioListener::NiAudioListener(NiAudioListener *this);
void __thiscall NiAudioListener::_NiAudioListener(NiAudioListener *this);
void __thiscall NiAudioListener::Release(NiAudioListener *this);
NiObject *__cdecl NiAudioListener::CreateObject();
void __thiscall NiAudioListener::LoadBinary(NiAudioListener *this, NiStream *stream);
void __thiscall NiAudioListener::LinkObject(NiAudioListener *this, NiStream *stream);
bool __thiscall NiAudioListener::RegisterStreamables(NiAudioListener *this, NiStream *stream);
void __thiscall NiAudioListener::SaveBinary(NiAudioListener *this, NiStream *stream);
bool __thiscall NiAudioListener::IsEqual(NiAudioListener *this, NiObject *pObject);
NiPoint3 *__thiscall NiAudioListener::GetDirectionVector(NiAudioListener *this);
NiPoint3 *__thiscall NiAudioListener::GetUpVector(NiAudioListener *this);
void *__thiscall NiAudioListener::_vector_deleting_destructor_(NiAudioListener *this, unsigned int);
NiRTTI *__thiscall NiAudioListener::GetRTTI(NiAudioListener *this);
void __thiscall NiProviderInfo::NiProviderInfo(NiProviderInfo *this, const char *pcName, const unsigned int uiNumber);
void __thiscall NiProviderInfo::_NiProviderInfo(NiProviderInfo *this);
bool __thiscall NiProviderInfo::OpenProvider(NiProviderInfo *this);
bool __thiscall NiProviderInfo::CloseProvider(NiProviderInfo *this);
const unsigned int __thiscall NiProviderInfo::GetNumberActiveSamples(NiProviderInfo *this);
int __cdecl NiParticleSDM::Init();
void __cdecl NiParticleSDM::Shutdown(); // idb
void __thiscall NiParticleSDM::NiParticleSDM(NiParticleSDM *this);
void __thiscall NiPSysEmitterCtlr::Stop(NiPSysEmitterCtlr *this);
const char *__thiscall NiPSysEmitterCtlr::GetInterpolatorID(NiPSysEmitterCtlr *this, unsigned __int16 usIndex);
unsigned __int16 __thiscall NiPSysEmitterCtlr::GetInterpolatorIndex(NiPSysEmitterCtlr *this, const char *pcID);
NiInterpolator *__thiscall NiPSysEmitterCtlr::CreatePoseInterpolator(NiPSysEmitterCtlr *this, unsigned __int16 usIndex);
NiBlendInterpolator *__thiscall NiPSysEmitterCtlr::CreateBlendInterpolator(NiPSysEmitterCtlr *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
void __thiscall NiTSet<float>::Realloc(NiTSet<float> *this, unsigned int uiNewSize);
float __thiscall NiBlendInterpolator::GetTime(NiBlendInterpolator *this, char ucIndex);
NiRTTI *__thiscall NiPSysEmitterCtlr::GetRTTI(NiPSysEmitterCtlr *this);
void __thiscall NiPSysEmitterCtlr::GuaranteeTimeRange(NiPSysEmitterCtlr *this, float fStartTime, float fEndTime);
void __thiscall NiPSysEmitterCtlr::ResetTimeExtrema(NiPSysEmitterCtlr *this);
NiInterpolator *__thiscall NiPSysEmitterCtlr::GetInterpolator(NiPSysEmitterCtlr *this, unsigned __int16 usIndex);
void __thiscall NiPSysEmitterCtlr::SetInterpolator(NiPSysEmitterCtlr *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
void __thiscall NiPSysEmitterCtlr::ProcessClone(NiPSysEmitterCtlr *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPSysEmitterCtlr::CreateObject();
void __thiscall NiPSysEmitterCtlr::LoadBinary(NiPSysEmitterCtlr *this, NiStream *kStream);
bool __thiscall NiPSysEmitterCtlr::RegisterStreamables(NiPSysEmitterCtlr *this, NiStream *kStream);
void __thiscall NiPSysEmitterCtlr::SaveBinary(NiPSysEmitterCtlr *this, NiStream *kStream);
bool __thiscall NiPSysEmitterCtlr::IsEqual(NiPSysEmitterCtlr *this, NiObject *pkObject);
void __thiscall NiBoolInterpolator::ReplaceKeys(NiBoolInterpolator *this, NiBoolKey *pkKeys, NiAnimationKey::KeyType eType, unsigned int uiNumKeys);
NiFloatInterpolator *__thiscall NiPSysEmitterCtlr::GetBirthRateInterpolator(NiPSysEmitterCtlr *this);
NiBoolInterpolator *__thiscall NiPSysEmitterCtlr::GetEmitterActiveInterpolator(NiPSysEmitterCtlr *this);
void *__thiscall NiPSysEmitterCtlr::_scalar_deleting_destructor_(NiPSysEmitterCtlr *this, unsigned int);
void __thiscall NiPSysEmitterCtlr::EmitParticles(NiPSysEmitterCtlr *this, float fTime, float fCurTime, float fLastTime, float fEmitStart, float fEmitStop, float fBirthRate);
bool __thiscall NiPSysEmitterCtlr::TargetIsRequiredType(NiPSysEmitterCtlr *this);
bool __thiscall NiPSysEmitterCtlr::InterpolatorIsCorrectType(NiPSysEmitterCtlr *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
NiObject *__thiscall NiPSysEmitterCtlr::CreateClone(NiPSysEmitterCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysEmitterCtlr::LinkObject(NiPSysEmitterCtlr *this, NiStream *kStream);
void __thiscall NiPSysEmitterCtlr::Update(NiPSysEmitterCtlr *this, float fTime);
void __thiscall NiPSysEmitterCtlr::GetViewerStrings(NiPSysEmitterCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysVortexFieldModifier::CreateObject();
void __thiscall NiPSysVortexFieldModifier::LoadBinary(NiPSysVortexFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysVortexFieldModifier::LinkObject(NiPSysVortexFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysGravityFieldModifier::SaveBinary(NiPSysVortexFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysModifier::SetActive(NiPSysModifier *this, bool bActive);
NiRTTI *__thiscall NiPSysVortexFieldModifier::GetRTTI(NiPSysVortexFieldModifier *this);
NiPoint3 *__thiscall NiPSysVortexFieldModifier::VortexDirection(NiPSysVortexFieldModifier *this, NiPoint3 *result, NiPoint3 *kVortexPos, NiPoint3 *kDirection, NiPoint3 *kParticle);
NiObject *__thiscall NiPSysVortexFieldModifier::CreateClone(NiPSysVortexFieldModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysGravityModifier::ProcessClone(NiPSysVortexFieldModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysVortexFieldModifier::UpdateNoAttenuation(NiPSysVortexFieldModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysVortexFieldModifier::UpdateNoAttenuationNoDist(NiPSysVortexFieldModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysVortexFieldModifier::Update(NiPSysVortexFieldModifier *this, float fTime, NiPSysData *pkData);
int __thiscall loc_864FCB(NiPSysVortexFieldModifier *this, float fTime, int pkData); // weak
void __thiscall NiPSysVortexFieldModifier::GetViewerStrings(NiPSysVortexFieldModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysUpdateCtlr::CreateObject();
void __thiscall NiPSysResetOnLoopCtlr::LoadBinary(NiPSysUpdateCtlr *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysUpdateCtlr::GetRTTI(NiPSysUpdateCtlr *this);
NiObject *__thiscall NiPSysUpdateCtlr::CreateClone(NiPSysUpdateCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysUpdateCtlr::Update(NiPSysUpdateCtlr *this, float fTime);
void __thiscall NiPSysUpdateCtlr::SetTarget(NiPSysUpdateCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysUpdateCtlr::GetViewerStrings(NiPSysUpdateCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysTurbulenceFieldModifier::CreateObject();
bool __thiscall NiPSysTurbulenceFieldModifier::IsEqual(NiPSysTurbulenceFieldModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysTurbulenceFieldModifier::GetRTTI(NiPSysTurbulenceFieldModifier *this);
void __thiscall NiPSysTurbulenceFieldModifier::UpateNoAttenuationNoDistance(NiPSysTurbulenceFieldModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysTurbulenceFieldModifier::UpateNoAttenuation(NiPSysTurbulenceFieldModifier *this, float fTime, NiPSysData *pkData);
NiObject *__thiscall NiPSysTurbulenceFieldModifier::CreateClone(NiPSysTurbulenceFieldModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysTurbulenceFieldModifier::LoadBinary(NiPSysTurbulenceFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysTurbulenceFieldModifier::Update(NiPSysTurbulenceFieldModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysTurbulenceFieldModifier::GetViewerStrings(NiPSysTurbulenceFieldModifier *this, NiTArray<char *> *pkStrings);
bool __thiscall NiPSysSphericalCollider::RegisterStreamables(NiPSysSphericalCollider *this, NiStream *kStream);
bool __thiscall NiPSysSphericalCollider::IsEqual(NiPSysSphericalCollider *this, NiObject *pkObject);
NiPSysCollider *__thiscall NiPSysSphericalCollider::Resolve(NiPSysSphericalCollider *this, float fInitialTime, float *fCollisionTime, NiPSysData *pkData, unsigned __int16 usCurParticle);
void __thiscall NiPSysSphericalCollider::Update(NiPSysSphericalCollider *this, float fTime, NiPSysData *pkData, unsigned __int16 usCurParticle);
void __thiscall NiPSysPlanarCollider::ProcessClone(NiPSysSphericalCollider *this, NiCloningProcess *kCloning);
void __thiscall NiPSysSphericalCollider::SetResolveConstants(NiPSysSphericalCollider *this);
void __thiscall NiPSysSphericalCollider::LoadBinary(NiPSysSphericalCollider *this, NiStream *kStream);
void __thiscall NiPSysSphericalCollider::SaveBinary(NiPSysSphericalCollider *this, NiStream *kStream);
void __thiscall NiPSysSphericalCollider::NiPSysSphericalCollider(NiPSysSphericalCollider *this, float fBounce, bool bSpawnOnCollide, bool bDieOnCollide, NiPSysSpawnModifier *pkSpawnModifier, NiAVObject *pkColliderObj, float fRadius);
NiRTTI *__thiscall NiPSysSphericalCollider::GetRTTI(NiPSysSphericalCollider *this);
NiObject *__thiscall NiPSysSphericalCollider::CreateClone(NiPSysSphericalCollider *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPSysSphericalCollider::CreateObject();
void __thiscall NiPSysSphericalCollider::GetViewerStrings(NiPSysSphericalCollider *this, NiTArray<char *> *pkStrings);
bool __thiscall NiPSysSphereEmitter::IsEqual(NiPSysSphereEmitter *this, NiObject *pkObject);
float __cdecl NiUnitRandom();
NiPoint3 *__thiscall NiTransform::operator_(NiTransform *this, NiPoint3 *result, NiPoint3 *kPoint);
NiRTTI *__thiscall NiPSysSphereEmitter::GetRTTI(NiPSysSphereEmitter *this);
void __thiscall NiPSysSphereEmitter::ComputeVolumeInitialPositionAndVelocity(NiPSysSphereEmitter *this, NiTransform *kEmitterToPSys, NiPoint3 *kPosition, NiPoint3 *kVelocity);
NiObject *__thiscall NiPSysSphereEmitter::CreateClone(NiPSysSphereEmitter *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPSysSphereEmitter::CreateObject();
void __thiscall NiPSysSphereEmitter::LoadBinary(NiPSysSphereEmitter *this, NiStream *kStream);
void __thiscall NiPSysSphereEmitter::SaveBinary(NiPSysSphereEmitter *this, NiStream *kStream);
void __thiscall NiPSysSphereEmitter::GetViewerStrings(NiPSysSphereEmitter *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysSpawnModifier::CreateObject();
bool __thiscall NiPSysSpawnModifier::IsEqual(NiPSysSpawnModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysSpawnModifier::GetRTTI(NiPSysSpawnModifier *this);
NiObject *__thiscall NiPSysSpawnModifier::CreateClone(NiPSysSpawnModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysSpawnModifier::SpawnParticles(NiPSysSpawnModifier *this, float fCurrentTime, float fSpawnTime, unsigned __int16 usOldIndex, NiParticleSystem *pkOldPSystem);
void __thiscall NiPSysSpawnModifier::SpawnParticle(NiPSysSpawnModifier *this, float fCurrentTime, float fSpawnTime, unsigned __int16 usOldIndex, NiParticleSystem *pkOldPSystem);
int __stdcall loc_866E29(float fCurrentTime, float fSpawnTime, __int16 usOldIndex, int pkOldPSystem); // weak
void __thiscall NiPSysSpawnModifier::LoadBinary(NiPSysSpawnModifier *this, NiStream *kStream);
void __thiscall NiPSysSpawnModifier::SaveBinary(NiPSysSpawnModifier *this, NiStream *kStream);
void __thiscall NiPSysSpawnModifier::GetViewerStrings(NiPSysSpawnModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysRotationModifier::CreateObject();
void __thiscall NiPSysBoundUpdateModifier::LinkObject(NiPSysSpawnModifier *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysRotationModifier::GetRTTI(NiPSysRotationModifier *this);
void *__thiscall NiPSysRadialFieldModifier::_vector_deleting_destructor_(NiPSysVortexFieldModifier *this, unsigned int);
void __thiscall NiPSysRotationModifier::Update(NiPSysRotationModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysRotationModifier::Initialize(NiPSysRotationModifier *this, NiPSysData *pkData, unsigned __int16 usNewParticle);
int __stdcall loc_867995(float fTheta, float fInitialRotSpeed); // weak
NiObject *__thiscall NiPSysRotationModifier::CreateClone(NiPSysRotationModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysRotationModifier::PostLinkObject(NiPSysRotationModifier *this, NiStream *kStream);
bool __thiscall NiPSysRotationModifier::IsEqual(NiPSysRotationModifier *this, NiObject *pkObject);
void __thiscall NiPSysRotationModifier::LoadBinary(NiPSysRotationModifier *this, NiStream *kStream);
void __thiscall NiPSysRotationModifier::SaveBinary(NiPSysRotationModifier *this, NiStream *kStream);
void __thiscall NiPSysRotationModifier::GetViewerStrings(NiPSysRotationModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysResetOnLoopCtlr::CreateObject();
void __thiscall NiInterpController::LinkObject(NiPSysUpdateCtlr *this, NiStream *kStream);
bool __thiscall NiPSysResetOnLoopCtlr::RegisterStreamables(NiPSysUpdateCtlr *this, NiStream *kStream);
void __thiscall NiKeyframeManager::SaveBinary(NiPSysUpdateCtlr *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysResetOnLoopCtlr::GetRTTI(NiPSysResetOnLoopCtlr *this);
NiObject *__thiscall NiPSysResetOnLoopCtlr::CreateClone(NiPSysResetOnLoopCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysResetOnLoopCtlr::Update(NiPSysResetOnLoopCtlr *this, float fTime);
bool __thiscall NiPSysResetOnLoopCtlr::TargetIsRequiredType(NiPSysUpdateCtlr *this);
void __thiscall NiPSysResetOnLoopCtlr::GetViewerStrings(NiPSysResetOnLoopCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysRadialFieldModifier::CreateObject();
bool __thiscall NiPSysRadialFieldModifier::IsEqual(NiPSysRadialFieldModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysRadialFieldModifier::GetRTTI(NiPSysRadialFieldModifier *this);
NiObject *__thiscall NiPSysRadialFieldModifier::CreateClone(NiPSysRadialFieldModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysRadialFieldModifier::UpdateNoAttenuationNoDirNoDist(NiPSysRadialFieldModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysRadialFieldModifier::LoadBinary(NiPSysRadialFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysTurbulenceFieldModifier::SaveBinary(NiPSysTurbulenceFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysRadialFieldModifier::Update(NiPSysRadialFieldModifier *this, float fTime, NiPSysData *pkData);
int __thiscall loc_8686DF(NiPSysRadialFieldModifier *this, float fTime, int pkData); // weak
void __thiscall NiPSysRadialFieldModifier::GetViewerStrings(NiPSysRadialFieldModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysPositionModifier::CreateObject();
void __thiscall NiPSysPositionModifier::LoadBinary(NiPSysPositionModifier *this, NiStream *kStream);
void __thiscall NiPSysPositionModifier::SaveBinary(NiPSysPositionModifier *this, NiStream *kStream);
bool __thiscall NiPSysPositionModifier::IsEqual(NiPSysPositionModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysPositionModifier::GetRTTI(NiPSysPositionModifier *this);
void __thiscall NiPSysPositionModifier::Update(NiPSysPositionModifier *this, float fTime, NiPSysData *pkData);
NiObject *__thiscall NiPSysPositionModifier::CreateClone(NiPSysPositionModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysPositionModifier::GetViewerStrings(NiPSysPositionModifier *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysSphericalCollider::LinkObject(NiPSysSphericalCollider *this, NiStream *kStream);
NiPSysCollider *__thiscall NiPSysPlanarCollider::Resolve(NiPSysPlanarCollider *this, float fInitialTime, float *fCollisionTime, NiPSysData *pkData, unsigned __int16 usCurParticle);
int __thiscall loc_868D30(NiPSysCollider *this, float fInitialTime, int fCollisionTime, float fMaxValue, int usCurParticle); // weak
void __thiscall NiPSysPlanarCollider::Update(NiPSysPlanarCollider *this, float fTime, NiPSysData *pkData, unsigned __int16 usCurParticle);
void __thiscall NiPSysPlanarCollider::SetResolveConstants(NiPSysPlanarCollider *this);
void __thiscall NiPSysPlanarCollider::LoadBinary(NiPSysPlanarCollider *this, NiStream *kStream);
void __thiscall NiPSysPlanarCollider::SaveBinary(NiPSysPlanarCollider *this, NiStream *kStream);
bool __thiscall NiPSysPlanarCollider::IsEqual(NiPSysPlanarCollider *this, NiObject *pkObject);
void __thiscall NiPSysPlanarCollider::NiPSysPlanarCollider(NiPSysPlanarCollider *this, float fBounce, bool bSpawnOnCollide, bool bDieOnCollide, NiPSysSpawnModifier *pkSpawnModifier, NiAVObject *pkColliderObj, float fWidth, float fHeight, NiPoint3 kXAxis, NiPoint3 kYAxis);
NiRTTI *__thiscall NiPSysPlanarCollider::GetRTTI(NiPSysPlanarCollider *this);
void *__thiscall NiPSysPlanarCollider::_vector_deleting_destructor_(NiPSysSphericalCollider *this, unsigned int);
NiObject *__thiscall NiPSysPlanarCollider::CreateClone(NiPSysPlanarCollider *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPSysPlanarCollider::CreateObject();
void __thiscall NiPSysPlanarCollider::GetViewerStrings(NiPSysPlanarCollider *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysModifierActiveCtlr::CreateObject();
void __thiscall NiPSysModifierActiveCtlr::LinkObject(NiPSysModifierActiveCtlr *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysModifierActiveCtlr::GetRTTI(NiPSysModifierActiveCtlr *this);
void __thiscall NiPSysModifierActiveCtlr::GetTargetBoolValue(NiPSysModifierActiveCtlr *this, bool *bValue);
void __thiscall NiPSysModifierActiveCtlr::SetTargetBoolValue(NiPSysModifierActiveCtlr *this, bool bValue);
NiObject *__thiscall NiPSysModifierActiveCtlr::CreateClone(NiPSysModifierActiveCtlr *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysModifierActiveCtlr::InterpTargetIsCorrectType(NiPSysModifierActiveCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysModifierActiveCtlr::GetViewerStrings(NiPSysModifierActiveCtlr *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysMeshUpdateModifier::LoadBinary(NiPSysMeshUpdateModifier *this, NiStream *kStream);
void __thiscall NiPSysMeshUpdateModifier::ProcessClone(NiPSysMeshUpdateModifier *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysMeshUpdateModifier::RegisterStreamables(NiPSysMeshUpdateModifier *this, NiStream *kStream);
NiPointer<NiAVObject> *__thiscall NiTArray<NiPointer<NiAVObject>>::RemoveEnd(NiTArray<NiPointer<NiAVObject> > *this, NiPointer<NiAVObject> *result);
NiRTTI *__thiscall NiPSysMeshUpdateModifier::GetRTTI(NiPSysMeshUpdateModifier *this);
void __thiscall NiPSysMeshUpdateModifier::Update(NiPSysMeshUpdateModifier *this, float fTime, NiPSysData *pkData);
NiObject *__cdecl NiPSysMeshUpdateModifier::CreateObject();
void __thiscall NiPSysMeshUpdateModifier::LinkObject(NiPSysMeshUpdateModifier *this, NiStream *kStream);
void __thiscall NiPSysMeshUpdateModifier::SaveBinary(NiPSysMeshUpdateModifier *this, NiStream *kStream);
bool __thiscall NiPSysMeshUpdateModifier::IsEqual(NiPSysMeshUpdateModifier *this, NiObject *pkObject);
void __thiscall NiMeshPSysData::FillPool(NiMeshPSysData *this, unsigned int uiGeneration, NiAVObject *pkOriginal);
NiPointer<NiAVObject> *__thiscall NiPSysMeshUpdateModifier::SetMeshAt(NiPSysMeshUpdateModifier *this, NiPointer<NiAVObject> *result, unsigned int uiIndex, NiAVObject *pkMesh);
void *__thiscall NiPSysMeshUpdateModifier::_scalar_deleting_destructor_(NiPSysMeshUpdateModifier *this, unsigned int);
void __thiscall NiPSysMeshUpdateModifier::Initialize(NiPSysMeshUpdateModifier *this, NiPSysData *pkData, unsigned __int16 usNewParticle);
void __thiscall NiPSysMeshUpdateModifier::CopyMembers(NiPSysMeshUpdateModifier *this, NiPSysMeshUpdateModifier *pkDest, NiCloningProcess *kCloning);
void __thiscall NiPSysMeshUpdateModifier::PostLinkObject(NiPSysMeshUpdateModifier *this, NiStream *kStream);
void __thiscall NiPSysMeshUpdateModifier::GetViewerStrings(NiPSysMeshUpdateModifier *this, NiTArray<char *> *pkStrings);
NiObject *__thiscall NiPSysMeshUpdateModifier::CreateClone(NiPSysMeshUpdateModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysMeshEmitter::NiSkinnedEmitterData::NiSkinnedEmitterData(NiPSysMeshEmitter::NiSkinnedEmitterData *this);
void __thiscall NiTArray<NiPointer<NiGeometry>>::_NiTArray<NiPointer<NiGeometry>>(NiTArray<NiPointer<NiGeometry> > *this);
void __thiscall NiTArray<NiPointer<NiPSysMeshEmitter::NiSkinnedEmitterData>>::_NiTArray<NiPointer<NiPSysMeshEmitter::NiSkinnedEmitterData>>(NiTArray<NiPointer<NiPSysMeshEmitter::NiSkinnedEmitterData> > *this);
void *__thiscall NiTArray<NiPointer<NiGeometry>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiGeometry> > *this, unsigned int);
void *__thiscall NiTArray<NiPointer<NiPSysMeshEmitter::NiSkinnedEmitterData>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiPSysMeshEmitter::NiSkinnedEmitterData> > *this, unsigned int);
void __thiscall NiPSysMeshEmitter::TransformIntoCoordinateSpace(NiPSysMeshEmitter *this, NiAVObject *pkObj, NiPoint3 *kPosition, NiPoint3 *kVelocity);
bool __thiscall NiPSysMeshEmitter::NiSkinnedEmitterData::CreatePartition(NiPSysMeshEmitter::NiSkinnedEmitterData *this, NiGeometry *pkGeom);
void __thiscall NiPSysMeshEmitter::DeformBySkin(NiPSysMeshEmitter *this, NiPoint3 *kVert, NiPoint3 *kNormal, NiTriBasedGeom *pkGeom, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPart, unsigned int uiWhichIndex);
void *__thiscall NiPSysMeshEmitter::NiSkinnedEmitterData::_scalar_deleting_destructor_(NiPSysMeshEmitter::NiSkinnedEmitterData *this, unsigned int);
void __thiscall NiPSysMeshEmitter::LoadBinary(NiPSysMeshEmitter *this, NiStream *kStream);
void __thiscall NiPSysMeshEmitter::SaveBinary(NiPSysMeshEmitter *this, NiStream *kStream);
bool __thiscall NiPSysMeshEmitter::IsEqual(NiPSysMeshEmitter *this, NiObject *pkObject);
void __thiscall NiPSysMeshEmitter::NiPSysMeshEmitter(NiPSysMeshEmitter *this);
NiRTTI *__thiscall NiPSysMeshEmitter::GetRTTI(NiPSysMeshEmitter *this);
void *__thiscall NiPSysMeshEmitter::_scalar_deleting_destructor_(NiPSysMeshEmitter *this, unsigned int);
bool __thiscall NiPSysMeshEmitter::EmitFromVertex(NiPSysMeshEmitter *this, NiGeometry *pkGeomEmitter, NiPoint3 *kPosition, NiPoint3 *kVelocity);
bool __thiscall NiPSysMeshEmitter::EmitFromEdge(NiPSysMeshEmitter *this, NiGeometry *pkGeomEmitter, NiPoint3 *kPosition, NiPoint3 *kVelocity);
bool __thiscall NiPSysMeshEmitter::EmitFromSkinnedVertex(NiPSysMeshEmitter *this, NiPSysMeshEmitter::NiSkinnedEmitterData *pkSkinEmitterData, NiGeometry *pkGeomEmitter, NiPoint3 *kPosition, NiPoint3 *kVelocity);
bool __thiscall NiPSysMeshEmitter::EmitFromSkinnedFace(NiPSysMeshEmitter *this, NiPSysMeshEmitter::NiSkinnedEmitterData *pkSkinEmitterData, NiGeometry *pkGeomEmitter, NiPoint3 *kPosition, NiPoint3 *kVelocity);
bool __thiscall NiPSysMeshEmitter::EmitFromSkinnedEdge(NiPSysMeshEmitter *this, NiPSysMeshEmitter::NiSkinnedEmitterData *pkSkinEmitterData, NiGeometry *pkGeomEmitter, NiPoint3 *kPosition, NiPoint3 *kVelocity);
NiObject *__cdecl NiPSysMeshEmitter::CreateObject();
void __thiscall NiPSysMeshEmitter::GetViewerStrings(NiPSysMeshEmitter *this, NiTArray<char *> *pkStrings);
bool __thiscall NiPSysMeshEmitter::EmitFromFace(NiPSysMeshEmitter *this, NiGeometry *pkGeomEmitter, NiPoint3 *kPosition, NiPoint3 *kVelocity);
void __thiscall NiPSysMeshEmitter::AddGeometryEmitter(NiPSysMeshEmitter *this, NiGeometry *pkGeomEmitter);
NiObject *__thiscall NiPSysMeshEmitter::CreateClone(NiPSysMeshEmitter *this, NiCloningProcess *kCloning);
void __thiscall NiPSysMeshEmitter::ProcessClone(NiPSysMeshEmitter *this, NiCloningProcess *kCloning);
void __thiscall NiPSysMeshEmitter::LinkObject(NiPSysMeshEmitter *this, NiStream *kStream);
void __thiscall NiPSysMeshEmitter::ComputeInitialPositionAndVelocity(NiPSysMeshEmitter *this, NiPoint3 *kPosition, NiPoint3 *kVelocity);
NiObject *__cdecl NiPSysInitialRotSpeedVarCtlr::CreateObject();
NiRTTI *__thiscall NiPSysInitialRotSpeedVarCtlr::GetRTTI(NiPSysInitialRotSpeedVarCtlr *this);
void __thiscall NiPSysInitialRotSpeedVarCtlr::SetTargetFloatValue(NiPSysInitialRotSpeedVarCtlr *this, float fValue);
NiObject *__thiscall NiPSysInitialRotSpeedVarCtlr::CreateClone(NiPSysInitialRotSpeedVarCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysInitialRotSpeedVarCtlr::GetViewerStrings(NiPSysInitialRotSpeedVarCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysInitialRotSpeedCtlr::CreateObject();
void __thiscall NiPSysEmitterSpeedCtlr::LinkObject(NiPSysInitialRotSpeedVarCtlr *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysInitialRotSpeedCtlr::GetRTTI(NiPSysInitialRotSpeedCtlr *this);
void __thiscall NiPSysEmitterSpeedCtlr::GetTargetFloatValue(NiPSysInitialRotSpeedCtlr *this, float *fValue);
void __thiscall NiPSysInitialRotSpeedCtlr::SetTargetFloatValue(NiPSysInitialRotSpeedCtlr *this, float fValue);
NiObject *__thiscall NiPSysInitialRotSpeedCtlr::CreateClone(NiPSysInitialRotSpeedCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysInitialRotSpeedCtlr::GetViewerStrings(NiPSysInitialRotSpeedCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysInitialRotAngleVarCtlr::CreateObject();
bool __thiscall NiPSysEmitterLifeSpanCtlr::RegisterStreamables(NiPSysModifierActiveCtlr *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysInitialRotAngleVarCtlr::GetRTTI(NiPSysInitialRotAngleVarCtlr *this);
void __thiscall NiPSysEmitterDeclinationVarCtlr::GetTargetFloatValue(NiPSysInitialRotAngleVarCtlr *this, float *fValue);
NiObject *__thiscall NiPSysInitialRotAngleVarCtlr::CreateClone(NiPSysInitialRotAngleVarCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysInitialRotAngleVarCtlr::GetViewerStrings(NiPSysInitialRotAngleVarCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysInitialRotAngleCtlr::CreateObject();
void __thiscall NiPSysEmitterLifeSpanCtlr::LoadBinary(NiPSysModifierActiveCtlr *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysInitialRotAngleCtlr::GetRTTI(NiPSysInitialRotAngleCtlr *this);
NiObject *__thiscall NiPSysInitialRotAngleCtlr::CreateClone(NiPSysInitialRotAngleCtlr *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysInitialRotAngleCtlr::InterpTargetIsCorrectType(NiPSysInitialRotSpeedVarCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysInitialRotAngleCtlr::GetViewerStrings(NiPSysInitialRotAngleCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysGrowFadeModifier::CreateObject();
bool __thiscall NiPSysGrowFadeModifier::IsEqual(NiPSysGrowFadeModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysGrowFadeModifier::GetRTTI(NiPSysGrowFadeModifier *this);
void __thiscall NiPSysGrowFadeModifier::Update(NiPSysGrowFadeModifier *this, float fTime, NiPSysData *pkData);
NiObject *__thiscall NiPSysGrowFadeModifier::CreateClone(NiPSysGrowFadeModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysGrowFadeModifier::LoadBinary(NiPSysGrowFadeModifier *this, NiStream *kStream);
void __thiscall NiPSysGrowFadeModifier::SaveBinary(NiPSysGrowFadeModifier *this, NiStream *kStream);
void __thiscall NiPSysGrowFadeModifier::GetViewerStrings(NiPSysGrowFadeModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysGravityStrengthCtlr::CreateObject();
NiRTTI *__thiscall NiPSysGravityStrengthCtlr::GetRTTI(NiPSysGravityStrengthCtlr *this);
NiObject *__thiscall NiPSysGravityStrengthCtlr::CreateClone(NiPSysGravityStrengthCtlr *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysGravityStrengthCtlr::InterpTargetIsCorrectType(NiPSysGravityStrengthCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysGravityStrengthCtlr::GetViewerStrings(NiPSysGravityStrengthCtlr *this, NiTArray<char *> *pkStrings);
NiRTTI *__thiscall NiPSysGravityFieldModifier::GetRTTI(NiPSysGravityFieldModifier *this);
void __thiscall NiPSysGravityFieldModifier::NiPSysGravityFieldModifier(NiPSysGravityFieldModifier *this);
NiObject *__cdecl NiPSysGravityFieldModifier::CreateObject();
void __thiscall NiPSysGravityFieldModifier::LoadBinary(NiPSysGravityFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysGravityFieldModifier::UpdateNoAttenuationNoDist(NiPSysGravityFieldModifier *this, float fTime, NiPSysData *pkData);
NiObject *__thiscall NiPSysGravityFieldModifier::CreateClone(NiPSysGravityFieldModifier *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysGravityFieldModifier::IsEqual(NiPSysVortexFieldModifier *this, NiObject *pkObject);
void __thiscall NiPSysGravityFieldModifier::Update(NiPSysGravityFieldModifier *this, float fTime, NiPSysData *pkData);
int __thiscall loc_86DC8A(NiPSysGravityFieldModifier *this, float fTime, int pkData); // weak
void __thiscall NiPSysGravityFieldModifier::GetViewerStrings(NiPSysGravityFieldModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysGravityModifier::CreateObject();
NiRTTI *__thiscall NiPSysGravityModifier::GetRTTI(NiPSysGravityModifier *this);
NiObject *__thiscall NiPSysGravityModifier::CreateClone(NiPSysGravityModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysGravityModifier::Update(NiPSysGravityModifier *this, float fTime, NiPSysData *pkData);
bool __thiscall NiPSysGravityModifier::IsEqual(NiPSysGravityModifier *this, NiObject *pkObject);
void __thiscall NiPSysGravityModifier::LoadBinary(NiPSysGravityModifier *this, NiStream *kStream);
void __thiscall NiPSysGravityModifier::SaveBinary(NiPSysGravityModifier *this, NiStream *kStream);
void __thiscall NiPSysGravityModifier::GetViewerStrings(NiPSysGravityModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysFieldMaxDistanceCtlr::CreateObject();
NiRTTI *__thiscall NiPSysFieldMaxDistanceCtlr::GetRTTI(NiPSysFieldMaxDistanceCtlr *this);
void *__thiscall NiPSysModifierBoolCtlr::_vector_deleting_destructor_(NiPSysModifierFloatCtlr *this, unsigned int);
void __thiscall NiPSysFieldMaxDistanceCtlr::SetTargetFloatValue(NiPSysFieldMaxDistanceCtlr *this, float fValue);
NiObject *__thiscall NiPSysFieldMaxDistanceCtlr::CreateClone(NiPSysFieldMaxDistanceCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysFieldMaxDistanceCtlr::GetViewerStrings(NiPSysFieldMaxDistanceCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysFieldMagnitudeCtlr::CreateObject();
void __thiscall NiPSysEmitterInitialRadiusCtlr::SaveBinary(NiPSysModifierActiveCtlr *this, NiStream *kStream);
NiRTTI *__thiscall NiPSysFieldMagnitudeCtlr::GetRTTI(NiPSysFieldMagnitudeCtlr *this);
void __thiscall NiPSysFieldMagnitudeCtlr::GetTargetFloatValue(NiPSysInitialRotSpeedVarCtlr *this, float *fValue);
NiObject *__thiscall NiPSysFieldMagnitudeCtlr::CreateClone(NiPSysFieldMagnitudeCtlr *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysFieldMagnitudeCtlr::InterpTargetIsCorrectType(NiPSysFieldMaxDistanceCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysFieldMagnitudeCtlr::GetViewerStrings(NiPSysFieldMagnitudeCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysFieldAttenuationCtlr::CreateObject();
NiRTTI *__thiscall NiPSysFieldAttenuationCtlr::GetRTTI(NiPSysFieldAttenuationCtlr *this);
void __thiscall NiPSysFieldAttenuationCtlr::SetTargetFloatValue(NiPSysInitialRotAngleCtlr *this, float fValue);
NiObject *__thiscall NiPSysFieldAttenuationCtlr::CreateClone(NiPSysFieldAttenuationCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysFieldAttenuationCtlr::GetViewerStrings(NiPSysFieldAttenuationCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterSpeedCtlr::CreateObject();
NiRTTI *__thiscall NiPSysEmitterSpeedCtlr::GetRTTI(NiPSysEmitterSpeedCtlr *this);
NiObject *__thiscall NiPSysEmitterSpeedCtlr::CreateClone(NiPSysEmitterSpeedCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysEmitterSpeedCtlr::GetViewerStrings(NiPSysEmitterSpeedCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterPlanarAngleVarCtlr::CreateObject();
NiRTTI *__thiscall NiPSysEmitterPlanarAngleVarCtlr::GetRTTI(NiPSysEmitterPlanarAngleVarCtlr *this);
void __thiscall NiPSysEmitterPlanarAngleVarCtlr::GetTargetFloatValue(NiPSysGravityStrengthCtlr *this, float *fValue);
void __thiscall NiPSysEmitterPlanarAngleVarCtlr::SetTargetFloatValue(NiPSysGravityStrengthCtlr *this, float fValue);
NiObject *__thiscall NiPSysEmitterPlanarAngleVarCtlr::CreateClone(NiPSysEmitterPlanarAngleVarCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysEmitterPlanarAngleVarCtlr::GetViewerStrings(NiPSysEmitterPlanarAngleVarCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterPlanarAngleCtlr::CreateObject();
NiRTTI *__thiscall NiPSysEmitterPlanarAngleCtlr::GetRTTI(NiPSysEmitterPlanarAngleCtlr *this);
void __thiscall NiPSysEmitterPlanarAngleCtlr::GetTargetFloatValue(NiPSysFieldMaxDistanceCtlr *this, float *fValue);
void __thiscall NiPSysEmitterPlanarAngleCtlr::SetTargetFloatValue(NiPSysEmitterPlanarAngleCtlr *this, float fValue);
NiObject *__thiscall NiPSysEmitterPlanarAngleCtlr::CreateClone(NiPSysEmitterPlanarAngleCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysEmitterPlanarAngleCtlr::GetViewerStrings(NiPSysEmitterPlanarAngleCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterLifeSpanCtlr::CreateObject();
NiRTTI *__thiscall NiPSysEmitterLifeSpanCtlr::GetRTTI(NiPSysEmitterLifeSpanCtlr *this);
void __thiscall NiPSysEmitterLifeSpanCtlr::GetTargetFloatValue(NiPSysEmitterLifeSpanCtlr *this, float *fValue);
void __thiscall NiPSysEmitterLifeSpanCtlr::SetTargetFloatValue(NiPSysEmitterLifeSpanCtlr *this, float fValue);
NiObject *__thiscall NiPSysEmitterLifeSpanCtlr::CreateClone(NiPSysEmitterLifeSpanCtlr *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysEmitterDeclinationCtlr::InterpTargetIsCorrectType(NiPSysEmitterSpeedCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysEmitterLifeSpanCtlr::GetViewerStrings(NiPSysEmitterLifeSpanCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterInitialRadiusCtlr::CreateObject();
NiRTTI *__thiscall NiPSysEmitterInitialRadiusCtlr::GetRTTI(NiPSysEmitterInitialRadiusCtlr *this);
void __thiscall NiPSysEmitterInitialRadiusCtlr::GetTargetFloatValue(NiPSysEmitterInitialRadiusCtlr *this, float *fValue);
void __thiscall NiPSysEmitterInitialRadiusCtlr::SetTargetFloatValue(NiPSysEmitterInitialRadiusCtlr *this, float fValue);
NiObject *__thiscall NiPSysEmitterInitialRadiusCtlr::CreateClone(NiPSysEmitterInitialRadiusCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysEmitterInitialRadiusCtlr::GetViewerStrings(NiPSysEmitterInitialRadiusCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterDeclinationVarCtlr::CreateObject();
NiRTTI *__thiscall NiPSysEmitterDeclinationVarCtlr::GetRTTI(NiPSysEmitterDeclinationVarCtlr *this);
void __thiscall NiPSysInitialRotAngleVarCtlr::SetTargetFloatValue(NiPSysInitialRotAngleVarCtlr *this, float fValue);
NiObject *__thiscall NiPSysEmitterDeclinationVarCtlr::CreateClone(NiPSysEmitterDeclinationVarCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysEmitterDeclinationVarCtlr::GetViewerStrings(NiPSysEmitterDeclinationVarCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterDeclinationCtlr::CreateObject();
NiRTTI *__thiscall NiPSysEmitterDeclinationCtlr::GetRTTI(NiPSysEmitterDeclinationCtlr *this);
void __thiscall NiPSysEmitterDeclinationCtlr::GetTargetFloatValue(NiPSysInitialRotAngleCtlr *this, float *fValue);
NiObject *__thiscall NiPSysEmitterDeclinationCtlr::CreateClone(NiPSysEmitterDeclinationCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysEmitterDeclinationCtlr::GetViewerStrings(NiPSysEmitterDeclinationCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysEmitterCtlrData::CreateObject();
NiRTTI *__thiscall NiPSysEmitterCtlrData::GetRTTI(NiPSysEmitterCtlrData *this);
bool __thiscall NiPSysEmitterCtlrData::IsEqual(NiPSysEmitterCtlrData *this, NiObject *pkObject);
void __thiscall NiPSysEmitterCtlrData::ReplaceBirthRateKeys(NiPSysEmitterCtlrData *this, NiFloatKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void __thiscall NiPSysEmitterCtlrData::ReplaceEmitterActiveKeys(NiPSysEmitterCtlrData *this, NiBoolKey *pkKeys, unsigned int uiNumKeys, NiAnimationKey::KeyType eType);
void *__thiscall NiPSysEmitterCtlrData::_scalar_deleting_destructor_(NiPSysEmitterCtlrData *this, unsigned int);
void __thiscall NiPSysEmitterCtlrData::LoadBinary(NiPSysEmitterCtlrData *this, NiStream *kStream);
void __thiscall NiPSysEmitterCtlrData::SaveBinary(NiPSysEmitterCtlrData *this, NiStream *kStream);
void __thiscall NiPSysEmitterCtlrData::GetViewerStrings(NiPSysEmitterCtlrData *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysDragModifier::NiPSysDragModifier(NiPSysDragModifier *this);
NiObject *__cdecl NiPSysDragModifier::CreateObject();
NiRTTI *__thiscall NiPSysDragModifier::GetRTTI(NiPSysDragModifier *this);
NiObject *__thiscall NiPSysDragModifier::CreateClone(NiPSysDragModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysDragModifier::Update(NiPSysDragModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysDragModifier::LoadBinary(NiPSysDragModifier *this, NiStream *kStream);
void __thiscall NiPSysDragModifier::SaveBinary(NiPSysDragModifier *this, NiStream *kStream);
bool __thiscall NiPSysDragModifier::IsEqual(NiPSysDragModifier *this, NiObject *pkObject);
void __thiscall NiPSysDragModifier::GetViewerStrings(NiPSysDragModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysDragFieldModifier::CreateObject();
NiRTTI *__thiscall NiPSysDragFieldModifier::GetRTTI(NiPSysDragFieldModifier *this);
void __thiscall NiPSysDragFieldModifier::UpdateNoAttenuationNoDirNoDist(NiPSysDragFieldModifier *this, float fTime, NiPSysData *pkData);
NiObject *__thiscall NiPSysDragFieldModifier::CreateClone(NiPSysDragFieldModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysDragFieldModifier::UpdateNoAttenuationNoDir(NiPSysDragFieldModifier *this, float fTime, NiPSysData *pkData);
bool __thiscall NiPSysDragFieldModifier::IsEqual(NiPSysDragFieldModifier *this, NiObject *pkObject);
void __thiscall NiPSysDragFieldModifier::Update(NiPSysDragFieldModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysDragFieldModifier::LoadBinary(NiPSysDragFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysDragFieldModifier::SaveBinary(NiPSysDragFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysDragFieldModifier::GetViewerStrings(NiPSysDragFieldModifier *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysData::NiPSysData(NiPSysData *this);
void __thiscall NiPSysData::_NiPSysData(NiPSysData *this);
void __thiscall NiPSysData::RemoveParticle(NiPSysData *this, unsigned __int16 usParticle);
void __thiscall NiPSysData::ResolveAddedParticles(NiPSysData *this);
NiObject *__cdecl NiPSysData::CreateObject();
bool __thiscall NiPSysData::IsEqual(NiPSysData *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysData::GetRTTI(NiPSysData *this);
void *__thiscall NiPSysData::_vector_deleting_destructor_(NiPSysData *this, unsigned int);
void __thiscall NiPSysData::CopyMembers(NiPSysData *this, NiPSysData *pkDest, NiCloningProcess *kCloning);
NiObject *__thiscall NiPSysData::CreateClone(NiPSysData *this, NiCloningProcess *kCloning);
void __thiscall NiPSysData::LoadBinary(NiPSysData *this, NiStream *kStream);
void __thiscall NiPSysData::SaveBinary(NiPSysData *this, NiStream *kStream);
void __thiscall NiPSysData::GetViewerStrings(NiPSysData *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysCylinderEmitter::ProcessClone(NiPSysSphereEmitter *this, NiCloningProcess *kCloning);
void __thiscall NiPSysBoxEmitter::LinkObject(NiPSysSphereEmitter *this, NiStream *kStream);
bool __thiscall NiPSysBoxEmitter::RegisterStreamables(NiPSysSphereEmitter *this, NiStream *kStream);
bool __thiscall NiPSysCylinderEmitter::IsEqual(NiPSysCylinderEmitter *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysCylinderEmitter::GetRTTI(NiPSysCylinderEmitter *this);
void __thiscall NiPSysCylinderEmitter::ComputeVolumeInitialPositionAndVelocity(NiPSysCylinderEmitter *this, NiTransform *kEmitterToPSys, NiPoint3 *kPosition, NiPoint3 *kVelocity);
NiObject *__thiscall NiPSysCylinderEmitter::CreateClone(NiPSysCylinderEmitter *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPSysCylinderEmitter::CreateObject();
void __thiscall NiPSysCylinderEmitter::LoadBinary(NiPSysCylinderEmitter *this, NiStream *kStream);
void __thiscall NiPSysCylinderEmitter::SaveBinary(NiPSysCylinderEmitter *this, NiStream *kStream);
void __thiscall NiPSysCylinderEmitter::GetViewerStrings(NiPSysCylinderEmitter *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysColorModifier::Update(NiPSysColorModifier *this, float fTime, NiPSysData *pkData);
bool __thiscall NiPSysColliderManager::RegisterStreamables(NiPSysColorModifier *this, NiStream *kStream);
void __thiscall NiPSysColorModifier::SaveBinary(NiPSysColorModifier *this, NiStream *kStream);
bool __thiscall NiPSysColorModifier::IsEqual(NiPSysColorModifier *this, NiObject *pkObject);
void __thiscall NiPSysColorModifier::SetColorData(NiPSysColorModifier *this, NiColorData *pkColorData);
NiRTTI *__thiscall NiPSysColorModifier::GetRTTI(NiPSysColorModifier *this);
NiObject *__cdecl NiPSysColorModifier::CreateObject();
void __thiscall NiPSysColorModifier::LinkObject(NiPSysColorModifier *this, NiStream *kStream);
void *__thiscall NiPSysColliderManager::_vector_deleting_destructor_(NiPSysColorModifier *this, unsigned int);
NiObject *__thiscall NiPSysColorModifier::CreateClone(NiPSysColorModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysColorModifier::GetViewerStrings(NiPSysColorModifier *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysColliderManager::LoadBinary(NiPSysColorModifier *this, NiStream *kStream);
void __thiscall NiPSysColliderManager::Update(NiPSysColliderManager *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysColliderManager::ProcessClone(NiPSysColliderManager *this, NiCloningProcess *kCloning);
void __thiscall NiPSysColliderManager::LinkObject(NiPSysColliderManager *this, NiStream *kStream);
bool __thiscall NiPSysColliderManager::IsEqual(NiPSysColliderManager *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysColliderManager::GetRTTI(NiPSysColliderManager *this);
NiObject *__thiscall NiPSysColliderManager::CreateClone(NiPSysColliderManager *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPSysColliderManager::CreateObject();
void __thiscall NiPSysColliderManager::GetViewerStrings(NiPSysColliderManager *this, NiTArray<char *> *pkStrings);
bool __thiscall NiPSysBoxEmitter::IsEqual(NiPSysBoxEmitter *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysBoxEmitter::GetRTTI(NiPSysBoxEmitter *this);
void __thiscall NiPSysBoxEmitter::ComputeVolumeInitialPositionAndVelocity(NiPSysBoxEmitter *this, NiTransform *kEmitterToPSys, NiPoint3 *kPosition, NiPoint3 *kVelocity);
NiObject *__thiscall NiPSysBoxEmitter::CreateClone(NiPSysBoxEmitter *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiPSysBoxEmitter::CreateObject();
void __thiscall NiPSysBoxEmitter::LoadBinary(NiPSysBoxEmitter *this, NiStream *kStream);
void __thiscall NiPSysBoxEmitter::SaveBinary(NiPSysBoxEmitter *this, NiStream *kStream);
void __thiscall NiPSysBoxEmitter::GetViewerStrings(NiPSysBoxEmitter *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysBoundUpdateModifier::CreateObject();
bool __thiscall NiPSysBoundUpdateModifier::IsEqual(NiPSysBoundUpdateModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysBoundUpdateModifier::GetRTTI(NiPSysBoundUpdateModifier *this);
void __thiscall NiPSysBoundUpdateModifier::SetUpdateSkip(NiPSysBoundUpdateModifier *this, __int16 sUpdateSkip);
void *__thiscall NiPSysBoundUpdateModifier::_scalar_deleting_destructor_(NiPSysBoundUpdateModifier *this, unsigned int);
void __thiscall NiPSysBoundUpdateModifier::UpdateMeshBounds(NiPSysBoundUpdateModifier *this, float fTime, NiMeshPSysData *pkMeshData);
NiObject *__thiscall NiPSysBoundUpdateModifier::CreateClone(NiPSysBoundUpdateModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysBoundUpdateModifier::Update(NiPSysBoundUpdateModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysBoundUpdateModifier::LoadBinary(NiPSysBoundUpdateModifier *this, NiStream *kStream);
void __thiscall NiPSysBoundUpdateModifier::SaveBinary(NiPSysBoundUpdateModifier *this, NiStream *kStream);
void __thiscall NiPSysBoundUpdateModifier::GetViewerStrings(NiPSysBoundUpdateModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysBombModifier::CreateObject();
NiRTTI *__thiscall NiPSysBombModifier::GetRTTI(NiPSysBombModifier *this);
NiObject *__thiscall NiPSysBombModifier::CreateClone(NiPSysBombModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysBombModifier::ProcessClone(NiPSysBombModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysBombModifier::Update(NiPSysBombModifier *this, float fTime, NiPSysData *pkData);
bool __thiscall NiPSysBombModifier::IsEqual(NiPSysBombModifier *this, NiObject *pkObject);
void __thiscall NiPSysBombModifier::LoadBinary(NiPSysBombModifier *this, NiStream *kStream);
void __thiscall NiPSysBombModifier::SaveBinary(NiPSysBombModifier *this, NiStream *kStream);
void __thiscall NiPSysBombModifier::GetViewerStrings(NiPSysBombModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysAgeDeathModifier::CreateObject();
void __thiscall NiPSysAgeDeathModifier::LinkObject(NiPSysAgeDeathModifier *this, NiStream *kStream);
bool __thiscall NiPSysAgeDeathModifier::IsEqual(NiPSysAgeDeathModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysAgeDeathModifier::GetRTTI(NiPSysAgeDeathModifier *this);
void __thiscall NiPSysAgeDeathModifier::Update(NiPSysAgeDeathModifier *this, float fTime, NiPSysData *pkData);
NiObject *__thiscall NiPSysAgeDeathModifier::CreateClone(NiPSysAgeDeathModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysAgeDeathModifier::ProcessClone(NiPSysAgeDeathModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysAgeDeathModifier::LoadBinary(NiPSysAgeDeathModifier *this, NiStream *kStream);
void __thiscall NiPSysAgeDeathModifier::SaveBinary(NiPSysAgeDeathModifier *this, NiStream *kStream);
void __thiscall NiPSysAgeDeathModifier::GetViewerStrings(NiPSysAgeDeathModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysAirFieldSpreadCtlr::CreateObject();
NiRTTI *__thiscall NiPSysAirFieldSpreadCtlr::GetRTTI(NiPSysAirFieldSpreadCtlr *this);
void __thiscall NiPSysAirFieldSpreadCtlr::GetTargetFloatValue(NiPSysAirFieldSpreadCtlr *this, float *fValue);
void __thiscall NiPSysAirFieldSpreadCtlr::SetTargetFloatValue(NiPSysAirFieldSpreadCtlr *this, float fValue);
NiObject *__thiscall NiPSysAirFieldSpreadCtlr::CreateClone(NiPSysAirFieldSpreadCtlr *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysAirFieldInheritVelocityCtlr::InterpTargetIsCorrectType(NiPSysAirFieldSpreadCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysAirFieldSpreadCtlr::GetViewerStrings(NiPSysAirFieldSpreadCtlr *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysAirFieldModifier::SetDirection(NiPSysAirFieldModifier *this, NiPoint3 *kDirection);
NiRTTI *__thiscall NiPSysAirFieldModifier::GetRTTI(NiPSysAirFieldModifier *this);
void __thiscall NiPSysAirFieldModifier::NiPSysAirFieldModifier(NiPSysAirFieldModifier *this);
NiObject *__cdecl NiPSysAirFieldModifier::CreateObject();
void __thiscall NiPSysAirFieldModifier::UpdateNoAttenuationNoInheritNoSpread(NiPSysAirFieldModifier *this, float fTime, NiPSysData *pkData);
void __thiscall NiPSysAirFieldModifier::UpdateNoAttenuationNoInheritNoSpreadNoMaxDistance(NiPSysAirFieldModifier *this, float fTime, NiPSysData *pkData);
NiObject *__thiscall NiPSysAirFieldModifier::CreateClone(NiPSysAirFieldModifier *this, NiCloningProcess *kCloning);
bool __thiscall NiPSysAirFieldModifier::IsEqual(NiPSysAirFieldModifier *this, NiObject *pkObject);
void __thiscall NiPSysAirFieldModifier::Update(NiPSysAirFieldModifier *this, float fTime, NiPSysData *pkData);
int __thiscall loc_874E93(NiPSysAirFieldModifier *this, float fTime, int pkData); // weak
int __thiscall loc_875161(NiPSysAirFieldModifier *this, float fTime, int pkData); // weak
void __thiscall NiPSysAirFieldModifier::LoadBinary(NiPSysAirFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysAirFieldModifier::SaveBinary(NiPSysAirFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysAirFieldModifier::GetViewerStrings(NiPSysAirFieldModifier *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysAirFieldInheritVelocityCtlr::CreateObject();
bool __thiscall NiPSysEmitterPlanarAngleVarCtlr::IsEqual(NiPSysModifierActiveCtlr *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysAirFieldInheritVelocityCtlr::GetRTTI(NiPSysAirFieldInheritVelocityCtlr *this);
void __thiscall NiPSysAirFieldInheritVelocityCtlr::GetTargetFloatValue(NiPSysAirFieldInheritVelocityCtlr *this, float *fValue);
void __thiscall NiPSysAirFieldInheritVelocityCtlr::SetTargetFloatValue(NiPSysAirFieldInheritVelocityCtlr *this, float fValue);
NiObject *__thiscall NiPSysAirFieldInheritVelocityCtlr::CreateClone(NiPSysAirFieldInheritVelocityCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysAirFieldInheritVelocityCtlr::GetViewerStrings(NiPSysAirFieldInheritVelocityCtlr *this, NiTArray<char *> *pkStrings);
NiObject *__cdecl NiPSysAirFieldAirFrictionCtlr::CreateObject();
NiRTTI *__thiscall NiPSysAirFieldAirFrictionCtlr::GetRTTI(NiPSysAirFieldAirFrictionCtlr *this);
void __thiscall NiPSysAirFieldAirFrictionCtlr::GetTargetFloatValue(NiPSysAirFieldAirFrictionCtlr *this, float *fValue);
void __thiscall NiPSysAirFieldAirFrictionCtlr::SetTargetFloatValue(NiPSysAirFieldAirFrictionCtlr *this, float fValue);
NiObject *__thiscall NiPSysAirFieldAirFrictionCtlr::CreateClone(NiPSysAirFieldAirFrictionCtlr *this, NiCloningProcess *kCloning);
void __thiscall NiPSysAirFieldAirFrictionCtlr::GetViewerStrings(NiPSysAirFieldAirFrictionCtlr *this, NiTArray<char *> *pkStrings);
void __thiscall NiTriBasedGeom::SetModelData(NiParticleSystem *this, NiGeometryData *pkModelData);
void __thiscall NiParticleSystem::UpdateDownwardPass(NiParticleSystem *this, float fTime, bool bUpdateControllers);
void __thiscall NiParticleSystem::UpdateWorldData(NiParticleSystem *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiPSysModifier> > *this, unsigned int);
void __thiscall NiParticleSystem::InitializeNewParticle(NiParticleSystem *this, unsigned __int16 usNewParticle);
void __thiscall NiParticleSystem::UpdateRigidDownwardPass(NiParticleSystem *this, float fTime);
void __thiscall NiParticleSystem::UpdateWorldBound(NiParticleSystem *this);
void __thiscall NiParticleSystem::SetSelectiveUpdateFlags(NiParticleSystem *this, bool *bSelectiveUpdate, bool bSelectiveUpdateTransforms, bool *bRigid);
void __thiscall NiParticleSystem::ProcessClone(NiParticleSystem *this, NiCloningProcess *kCloning);
bool __thiscall NiParticleSystem::RegisterStreamables(NiParticleSystem *this, NiStream *kStream);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiPSysModifier> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPSysModifier__>_NiPSysModifier__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPSysModifier__>_NiPSysModifier__>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPSysModifier *>,NiPSysModifier *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPSysModifier__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPSysModifier *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPSysModifier__>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPSysModifier *> *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiPSysModifier__>::_scalar_deleting_destructor_(NiTStringPointerMap<NiPSysModifier *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::_scalar_deleting_destructor_(NiTPointerList<NiPointer<NiPSysModifier> > *this, unsigned int);
void __thiscall NiParticleSystem::PerformSystemReset(NiParticleSystem *this);
bool __thiscall NiParticleSystem::IsEqual(NiParticleSystem *this, NiObject *pkObject);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *this, NiPointer<NiRoom> *element);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::InsertBefore(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *this, void *kPos, NiPointer<NiProperty> *element);
void __thiscall NiParticleSystem::UpdateSystem(NiParticleSystem *this, float fTime);
void __thiscall NiParticleSystem::CopyMembers(NiParticleSystem *this, NiParticleSystem *pkDest, NiCloningProcess *kCloning);
void __thiscall NiParticleSystem::LoadBinary(NiParticleSystem *this, NiStream *kStream);
void __thiscall NiParticleSystem::LinkObject(NiParticleSystem *this, NiStream *kStream);
void __thiscall NiParticleSystem::SaveBinary(NiParticleSystem *this, NiStream *kStream);
void __thiscall NiParticleSystem::GetViewerStrings(NiParticleSystem *this, NiTArray<char *> *pkStrings);
NiRTTI *__thiscall NiParticleSystem::GetRTTI(NiParticleSystem *this);
void __thiscall NiParticleSystem::NiParticleSystem(NiParticleSystem *this);
NiObject *__thiscall NiParticleSystem::CreateClone(NiParticleSystem *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiParticleSystem::CreateObject();
void *__thiscall NiTArray<NiTArray<NiPointer<NiAVObject>>__>::_scalar_deleting_destructor_(NiTArray<NiTArray<NiPointer<NiAVObject> > *> *this, unsigned int);
void __thiscall NiMeshPSysData::SetActiveVertexCount(NiMeshPSysData *this, unsigned __int16 usActive);
void __thiscall NiMeshPSysData::ProcessClone(NiMeshPSysData *this, NiCloningProcess *kCloning);
bool __thiscall NiMeshPSysData::RegisterStreamables(NiMeshPSysData *this, NiStream *kStream);
bool __thiscall NiMeshPSysData::IsEqual(NiMeshPSysData *this, NiObject *pkObject);
NiRTTI *__thiscall NiMeshPSysData::GetRTTI(NiMeshPSysData *this);
void __thiscall NiMeshPSysData::_NiMeshPSysData(NiMeshPSysData *this);
void __thiscall NiMeshPSysData::ResolveAddedParticles(NiMeshPSysData *this);
void __thiscall NiMeshPSysData::SetNumGenerations(NiMeshPSysData *this, unsigned int uiNumGenerations);
void __thiscall NiMeshPSysData::CopyMembers(NiMeshPSysData *this, NiMeshPSysData *pkDest, NiCloningProcess *kCloning);
NiObject *__cdecl NiMeshPSysData::CreateObject();
void __thiscall NiMeshPSysData::LinkObject(NiMeshPSysData *this, NiStream *kStream);
void __thiscall NiMeshPSysData::AddToPool(NiMeshPSysData *this, unsigned int uiGeneration, NiPointer<NiAVObject> spObject);
void *__thiscall NiMeshPSysData::_vector_deleting_destructor_(NiMeshPSysData *this, unsigned int);
void __thiscall NiMeshPSysData::RemoveParticle(NiMeshPSysData *this, unsigned __int16 usParticle);
NiObject *__thiscall NiMeshPSysData::CreateClone(NiMeshPSysData *this, NiCloningProcess *kCloning);
void __thiscall NiMeshPSysData::LoadBinary(NiMeshPSysData *this, NiStream *kStream);
void __thiscall NiMeshPSysData::SaveBinary(NiMeshPSysData *this, NiStream *kStream);
void __thiscall NiMeshPSysData::GetViewerStrings(NiMeshPSysData *this, NiTArray<char *> *pkStrings);
void __thiscall NiMeshParticleSystem::SetModelData(NiMeshParticleSystem *this, NiGeometryData *pkModelData);
void __thiscall NiMeshParticleSystem::UpdateRigidDownwardPass(NiMeshParticleSystem *this, float fTime);
void __thiscall NiMeshParticleSystem::LoadBinary(NiMeshParticleSystem *this, NiStream *kStream);
void __thiscall NiMeshParticleSystem::LinkObject(NiMeshParticleSystem *this, NiStream *kStream);
bool __thiscall NiMeshParticleSystem::RegisterStreamables(NiMeshParticleSystem *this, NiStream *kStream);
void __thiscall NiMeshParticleSystem::SaveBinary(NiMeshParticleSystem *this, NiStream *kStream);
bool __thiscall NiMeshParticleSystem::IsEqual(NiMeshParticleSystem *this, NiObject *pkObject);
void __thiscall NiMeshParticleSystem::UpdateDownwardPass(NiMeshParticleSystem *this, float fTime, bool bUpdateControllers);
void __thiscall NiMeshParticleSystem::UpdatePropertiesDownward(NiMeshParticleSystem *this, NiPropertyState *pkParentState);
void __thiscall NiMeshParticleSystem::UpdateEffectsDownward(NiMeshParticleSystem *this, NiDynamicEffectState *pkParentState);
void __thiscall NiMeshParticleSystem::OnVisible(NiMeshParticleSystem *this, NiCullingProcess *kCuller);
void __thiscall NiMeshParticleSystem::SetSelectiveUpdateFlags(NiMeshParticleSystem *this, bool *bSelectiveUpdate, bool bSelectiveUpdateTransforms, bool *bRigid);
void __thiscall NiMeshParticleSystem::UpdateWorldData(NiMeshParticleSystem *this);
void __thiscall NiMeshParticleSystem::UpdateWorldBound(NiMeshParticleSystem *this);
NiRTTI *__thiscall NiMeshParticleSystem::GetRTTI(NiMeshParticleSystem *this);
void __thiscall NiMeshParticleSystem::PurgeRendererData(NiMeshParticleSystem *this, NiRenderer *pkRenderer);
NiObject *__thiscall NiMeshParticleSystem::CreateClone(NiMeshParticleSystem *this, NiCloningProcess *kCloning);
NiObject *__cdecl NiMeshParticleSystem::CreateObject();
void __thiscall NiMeshParticleSystem::GetViewerStrings(NiMeshParticleSystem *this, NiTArray<char *> *pkStrings);
void *__thiscall NiParticleSystem::_scalar_deleting_destructor_(NiParticleSystem *this, unsigned int);
ID3DXConstantTable *__thiscall NiExtraDataController::GetCtlrID(NiD3DHLSLVertexShader *this);
void __thiscall NiPSysModifierCtlr::LoadBinary(NiPSysModifierCtlr *this, NiStream *kStream);
bool __thiscall NiPSysModifierCtlr::IsEqual(NiPSysModifierCtlr *this, NiObject *pkObject);
void __thiscall NiPSysModifierCtlr::NiPSysModifierCtlr(NiPSysModifierCtlr *this);
NiRTTI *__thiscall NiPSysModifierCtlr::GetRTTI(NiPSysModifierCtlr *this);
void __thiscall NiPSysModifierCtlr::_NiPSysModifierCtlr(NiPSysModifierCtlr *this);
void __thiscall NiPSysModifierCtlr::CopyMembers(NiPSysModifierCtlr *this, NiPSysModifierCtlr *pkDest, NiCloningProcess *kCloning);
void __thiscall NiPSysModifierCtlr::ProcessClone(NiPSysModifierCtlr *this, NiCloningProcess *kCloning);
void *__thiscall NiPSysModifierCtlr::_scalar_deleting_destructor_(NiPSysModifierCtlr *this, unsigned int);
void __thiscall NiPSysModifierCtlr::SetTarget(NiPSysModifierCtlr *this, NiObjectNET *pkTarget);
bool __thiscall NiPSysModifierCtlr::InterpTargetIsCorrectType(NiPSysModifierCtlr *this, NiObjectNET *pkTarget);
void __thiscall NiPSysModifierCtlr::PostLinkObject(NiPSysModifierCtlr *this, NiStream *kStream);
void __thiscall NiPSysModifierCtlr::GetViewerStrings(NiPSysModifierCtlr *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysEmitter::NiPSysEmitter(NiPSysEmitter *this);
void __thiscall NiPSysEmitter::CopyMembers(NiPSysEmitter *this, NiPSysEmitter *pkDest, NiCloningProcess *kCloning);
NiRTTI *__thiscall NiPSysEmitter::GetRTTI(NiPSysEmitter *this);
void __thiscall NiPSysEmitter::EmitParticles(NiPSysEmitter *this, float fTime, unsigned __int16 usNumParticles, const float *pfAges);
int __stdcall loc_877D2D(float fTime, __int16 usNumParticles, int pfAges); // weak
void __thiscall NiPSysEmitter::LoadBinary(NiPSysEmitter *this, NiStream *kStream);
void __thiscall NiPSysEmitter::SaveBinary(NiPSysEmitter *this, NiStream *kStream);
bool __thiscall NiPSysEmitter::IsEqual(NiPSysEmitter *this, NiObject *pkObject);
void __thiscall NiPSysEmitter::GetViewerStrings(NiPSysEmitter *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysModifier::NiPSysModifier(NiPSysModifier *this);
void __thiscall NiPSysModifier::_NiPSysModifier(NiPSysModifier *this);
void __thiscall NiPSysModifier::LinkObject(NiPSysModifier *this, NiStream *kStream);
bool __thiscall NiPSysModifier::IsEqual(NiPSysModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysModifier::GetRTTI(NiPSysModifier *this);
void *__thiscall NiPSysModifier::_vector_deleting_destructor_(NiPSysModifier *this, unsigned int);
void __thiscall NiPSysModifier::CopyMembers(NiPSysModifier *this, NiPSysModifier *pkDest, NiCloningProcess *kCloning);
void __thiscall NiPSysModifier::ProcessClone(NiPSysModifier *this, NiCloningProcess *kCloning);
void __thiscall NiPSysModifier::LoadBinary(NiPSysModifier *this, NiStream *kStream);
void __thiscall NiPSysModifier::SaveBinary(NiPSysModifier *this, NiStream *kStream);
void __thiscall NiPSysModifier::GetViewerStrings(NiPSysModifier *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysFieldModifier::NiPSysFieldModifier(NiPSysFieldModifier *this);
void __thiscall NiPSysFieldModifier::CopyMembers(NiPSysFieldModifier *this, NiPSysFieldModifier *pkDest, NiCloningProcess *kCloning);
void __thiscall NiPSysBombModifier::LinkObject(NiPSysGravityModifier *this, NiStream *kStream);
bool __thiscall NiPSysFieldModifier::IsEqual(NiPSysFieldModifier *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysFieldModifier::GetRTTI(NiPSysFieldModifier *this);
void __thiscall NiPSysFieldModifier::LoadBinary(NiPSysFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysFieldModifier::SaveBinary(NiPSysFieldModifier *this, NiStream *kStream);
void __thiscall NiPSysFieldModifier::GetViewerStrings(NiPSysFieldModifier *this, NiTArray<char *> *pkStrings);
NiPSysCollider *__thiscall NiPSysCollider::Resolve(NiPSysCollider *this, float fInitialTime, float *fCollisionTime, NiPSysData *pkData, unsigned __int16 usCurParticle);
void __thiscall NiPSysCollider::Update(NiPSysCollider *this, float fTime, NiPSysData *pkData, unsigned __int16 usCurParticle);
void __thiscall NiPSysCollider::CopyMembers(NiPSysCollider *this, NiPSysCollider *pkDest, NiCloningProcess *kCloning);
void __thiscall NiPSysCollider::ProcessClone(NiPSysCollider *this, NiCloningProcess *kCloning);
void __thiscall NiPSysCollider::LinkObject(NiPSysCollider *this, NiStream *kStream);
bool __thiscall NiPSysCollider::RegisterStreamables(NiPSysCollider *this, NiStream *kStream);
bool __thiscall NiPSysCollider::IsEqual(NiPSysCollider *this, NiObject *pkObject);
void __thiscall NiPSysCollider::NiPSysCollider(NiPSysCollider *this, float fBounce, bool bSpawnOnCollide, bool bDieOnCollide, NiPSysSpawnModifier *pkSpawnModifier);
NiRTTI *__thiscall NiPSysCollider::GetRTTI(NiPSysCollider *this);
void __thiscall NiPSysCollider::LoadBinary(NiPSysCollider *this, NiStream *kStream);
void __thiscall NiPSysCollider::SaveBinary(NiPSysCollider *this, NiStream *kStream);
void __thiscall NiPSysCollider::GetViewerStrings(NiPSysCollider *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysVolumeEmitter::NiPSysVolumeEmitter(NiPSysVolumeEmitter *this);
void __thiscall NiPSysVolumeEmitter::CopyMembers(NiPSysVolumeEmitter *this, NiPSysVolumeEmitter *pkDest, NiCloningProcess *kCloning);
void __thiscall NiPSysVolumeEmitter::LoadBinary(NiPSysVolumeEmitter *this, NiStream *kStream);
void __thiscall NiPSysVolumeEmitter::LinkObject(NiPSysVolumeEmitter *this, NiStream *kStream);
void __thiscall NiPSysVolumeEmitter::SaveBinary(NiPSysVolumeEmitter *this, NiStream *kStream);
bool __thiscall NiPSysVolumeEmitter::IsEqual(NiPSysVolumeEmitter *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysVolumeEmitter::GetRTTI(NiPSysVolumeEmitter *this);
void __thiscall NiPSysVolumeEmitter::ProcessClone(NiPSysVolumeEmitter *this, NiCloningProcess *kCloning);
void __thiscall NiPSysVolumeEmitter::ComputeInitialPositionAndVelocity(NiPSysVolumeEmitter *this, NiPoint3 *kPosition, NiPoint3 *kVelocity);
void __thiscall NiPSysVolumeEmitter::GetViewerStrings(NiPSysVolumeEmitter *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysModifierBoolCtlr::NiPSysModifierBoolCtlr(NiPSysModifierBoolCtlr *this);
NiInterpolator *__thiscall NiPSysModifierBoolCtlr::CreatePoseInterpolator(NiPSysModifierBoolCtlr *this, unsigned __int16 usIndex);
NiBlendInterpolator *__thiscall NiPSysModifierBoolCtlr::CreateBlendInterpolator(NiPSysModifierBoolCtlr *this, unsigned __int16 usIndex, bool bManagerControlled, bool bAccumulateAnimations, float fWeightThreshold, char ucArraySize);
bool __thiscall NiBoolInterpController::InterpolatorIsCorrectType(NiPSysModifierBoolCtlr *this, NiInterpolator *pkInterpolator, unsigned __int16 usIndex);
NiRTTI *__thiscall NiPSysModifierBoolCtlr::GetRTTI(NiPSysModifierBoolCtlr *this);
void __thiscall NiPSysModifierBoolCtlr::LinkObject(NiPSysModifierBoolCtlr *this, NiStream *kStream);
void __thiscall NiPSysModifierBoolCtlr::SynchronizePoseInterpolator(NiPSysModifierBoolCtlr *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiPSysModifierBoolCtlr::Update(NiPSysModifierBoolCtlr *this, float fTime);
void __thiscall NiPSysModifierBoolCtlr::GetViewerStrings(NiPSysModifierBoolCtlr *this, NiTArray<char *> *pkStrings);
void __thiscall NiPSysModifierFloatCtlr::NiPSysModifierFloatCtlr(NiPSysModifierFloatCtlr *this);
NiInterpolator *__thiscall NiPSysModifierFloatCtlr::CreatePoseInterpolator(NiPSysModifierFloatCtlr *this, unsigned __int16 usIndex);
void __thiscall NiPSysModifierFloatCtlr::CopyMembers(NiPSysModifierFloatCtlr *this, NiPSysModifierFloatCtlr *pkDest, NiCloningProcess *kCloning);
bool __thiscall NiPSysModifierFloatCtlr::IsEqual(NiPSysModifierFloatCtlr *this, NiObject *pkObject);
NiRTTI *__thiscall NiPSysModifierFloatCtlr::GetRTTI(NiPSysModifierFloatCtlr *this);
void __thiscall NiFloatExtraDataController::LoadBinary(NiPSysModifierFloatCtlr *this, NiStream *kStream);
void __thiscall NiPSysModifierFloatCtlr::LinkObject(NiPSysModifierFloatCtlr *this, NiStream *kStream);
void __thiscall NiPSysModifierFloatCtlr::SynchronizePoseInterpolator(NiPSysModifierFloatCtlr *this, NiInterpolator *pkInterp, unsigned __int16 usIndex);
void __thiscall NiPSysModifierFloatCtlr::Update(NiPSysModifierFloatCtlr *this, float fTime);
void __thiscall NiPSysModifierFloatCtlr::GetViewerStrings(NiPSysModifierFloatCtlr *this, NiTArray<char *> *pkStrings);
void __thiscall NiParticleInfo::NiParticleInfo(NiParticleInfo *this);
bool __thiscall NiParticleInfo::IsEqual(NiParticleInfo *this, NiParticleInfo *kData);
void __thiscall NiParticleInfo::LoadBinary(NiParticleInfo *this, NiStream *kStream);
void __thiscall NiParticleInfo::SaveBinary(NiParticleInfo *this, NiStream *kStream);
unsigned int __cdecl NiMessageBox::DefaultMessageBox(const char *pcText, const char *pcCaption, void *pvExtraData);
float __cdecl NiGetCurrentTimeInSec();
int __cdecl NiStricmp(const char *inOne, const char *inTwo);
void __thiscall NiFilename::NiFilename(NiFilename *this, const char *pcFullPath);
void __thiscall NiFilename::Makepath(NiFilename *this, char *pcStr, unsigned int uiStrLen);
void __thiscall NiFilename::GetFullPath(NiFilename *this, char *pcFullPath, unsigned int uiStrLen);
int __cdecl NiStaticDataManager::Init();
void __cdecl NiStaticDataManager::Shutdown();
void __cdecl NiStaticDataManager::SetRootLibrary(void (__cdecl *pfnInit)(), void (__cdecl *pfnShutdown)());
void __cdecl NiStaticDataManager::AddLibrary(void (__cdecl *pfnInit)(), void (__cdecl *pfnShutdown)());
void __cdecl NiSystemDesc::ShutdownSystemDesc();
void __cdecl NiSystemDesc::InitSystemDesc();
unsigned int __cdecl NiFile::ReadNoSwap(NiBinaryStream *pkThis, void *pvBuffer, unsigned int uiBytes, unsigned int *__formal, unsigned int __formal);
unsigned int __cdecl NiFile::WriteNoSwap(NiBinaryStream *pkThis, const void *pvBuffer, unsigned int uiBytes, unsigned int *__formal, unsigned int __formal);
unsigned int __cdecl NiFile::ReadAndSwap(NiBinaryStream *pkThis, void *pvBuffer, unsigned int uiBytes, unsigned int *puiComponentSizes, unsigned int uiNumComponents);
NiFile *__cdecl NiFile::GetFile(const char *pcName, NiFile::OpenMode eMode, unsigned int uiSize);
NiFile *__cdecl NiFile::DefaultFileCreateFunc(const char *pcName, NiFile::OpenMode eMode, unsigned int uiSize);
bool __cdecl NiFile::Access(const char *pcName, NiFile::OpenMode eMode);
bool __cdecl NiFile::DefaultFileAccessFunc(const char *pcName, NiFile::OpenMode eMode);
bool __thiscall NiFile::operator bool(NSBRequirements *this);
unsigned int __cdecl NiFile::WriteAndSwap(NiBinaryStream *pkThis, const void *pvBuffer, unsigned int uiBytes, unsigned int *puiComponentSizes, unsigned int uiNumComponents);
void __thiscall NiFile::SetEndianSwap(NiFile *this, bool bDoSwap);
void __thiscall NiBinaryStream::NiBinaryStream(NiBinaryStream *this);
void __thiscall NiBinaryStream::_NiBinaryStream(NiBinaryStream *this);
bool __cdecl NiBinaryStream::GetEndianMatchHint();
void *__thiscall NiBinaryStream::_scalar_deleting_destructor_(NiBinaryStream *this, unsigned int);
void __cdecl NiBinaryStream::DoByteSwap(void *pvData, unsigned int uiTotalBytes, unsigned int *puiComponentSizes, unsigned int uiNumComponents);
unsigned int __thiscall NiBinaryStream::GetLine(NiBinaryStream *this, char *pBuffer, unsigned int uiMaxBytes);
unsigned int __thiscall NiBinaryStream::PutS(NiBinaryStream *this, const char *pBuffer);
void __thiscall NiSearchPath::NiSearchPath(NiSearchPath *this);
void __thiscall NiSearchPath::Reset(NiSearchPath *this);
void *__thiscall NiSearchPath::_scalar_deleting_destructor_(NiSearchPath *this, unsigned int);
void __thiscall NiSearchPath::SetFilePath(NiSearchPath *this, const char *pcFilePath);
void __thiscall NiSearchPath::SetReferencePath(NiSearchPath *this, const char *pcReferencePath);
bool __thiscall NiSearchPath::GetNextSearchPath(NiSearchPath *this, char *pcPath, unsigned int uiStringLen);
void __thiscall NiMemStream::NiMemStream(NiMemStream *this, const void *pBuffer, unsigned int uiSize);
void __thiscall NiMemStream::NiMemStream(NiMemStream *this);
void __thiscall NiMemStream::_NiMemStream(NiMemStream *this);
void *__thiscall NiMemStream::Str(NiMemStream *this);
void *__thiscall NiMemStream::_vector_deleting_destructor_(NiMemStream *this, unsigned int);
unsigned int __thiscall NiMemStream::MemRead(NiMemStream *this, void *pBuffer, unsigned int uiBytes);
unsigned int __thiscall NiMemStream::MemWrite(NiMemStream *this, const void *pBuffer, unsigned int uiBytes);
int __thiscall NiThread::Suspend(NiThread *this);
void __cdecl NiSystemSDM::Init();
void __cdecl NiSystemSDM::Shutdown();
void __thiscall NiFile::NiFile(NiFile *this, const char *pcName, NiFile::OpenMode eMode, unsigned int uiBufferSize);
bool __thiscall NiFile::Flush(NiFile *this);
unsigned int __thiscall NiFile::GetFileSize(NiFile *this);
void __thiscall NiFile::_NiFile(NiFile *this);
void __thiscall NiFile::Seek(NiFile *this, int iOffset, int iWhence);
unsigned int __thiscall NiFile::FileRead(NiFile *this, void *pBuffer, unsigned int uiBytes);
unsigned int __thiscall NiFile::FileWrite(NiFile *this, const void *pBuffer, unsigned int uiBytes);
void *__thiscall NiFile::_scalar_deleting_destructor_(NiFile *this, unsigned int);
unsigned int __cdecl NiMemStream::ReadNoSwap(NiBinaryStream *pkThis, void *pvBuffer, unsigned int uiBytes, unsigned int *__formal, unsigned int __formal);
unsigned int __cdecl NiMemStream::WriteNoSwap(NiBinaryStream *pkThis, const void *pvBuffer, unsigned int uiBytes, unsigned int *__formal, unsigned int __formal);
unsigned int __cdecl NiMemStream::ReadAndSwap(NiBinaryStream *pkThis, void *pvBuffer, unsigned int uiBytes, unsigned int *puiComponentSizes, unsigned int uiNumComponents);
unsigned int __cdecl NiMemStream::WriteAndSwap(NiBinaryStream *pkThis, const void *pvBuffer, unsigned int uiBytes, unsigned int *puiComponentSizes, unsigned int uiNumComponents);
void __thiscall NiMemStream::SetEndianSwap(NiMemStream *this, bool bDoSwap);
int __thiscall NiThread::SystemSuspend(NiThread *this);
int __cdecl NiLogger::_SDMInit();
int __cdecl NiLogger::OpenLog(const char *pcFilename, NiLogger::OpenMode eOpenMode, bool bFlushOnWrite, bool bCommitToDisk);
void __cdecl NiLogger::CloseAllLogs();
int NiLogger::_SDMShutdown(void); // weak
void __thiscall NiLogger::NiLogFile::Log(NiLogger::NiLogFile *this, char *pcMessage);
void __thiscall NiLogger::NiLogFile::CloseFile(NiLogger::NiLogFile *this);
bool __thiscall NiLogger::NiLogFile::OpenFile(NiLogger::NiLogFile *this, NiLogger::OpenMode eOpenMode, bool bCommitToDisk);
void __thiscall NiLogger::NiLogFile::NiLogFile(NiLogger::NiLogFile *this, const char *pcName, NiLogger::OpenMode eOpenMode, bool bFlushOnWrite, bool bCommitToDisk);
void __thiscall NiLogger::NiLogFile::_NiLogFile(NiLogger::NiLogFile *this);
NiLogBehavior *__cdecl NiLogBehavior::Get();
void __thiscall NiMemoryLogBehavior::Initialize(NiMemoryLogBehavior *this);
void __thiscall NiProfileLogBehavior::Initialize(NiProfileLogBehavior *this);
int __cdecl NiPortalSDM::Init();
void __cdecl NiPortalSDM::Shutdown(); // idb
void __thiscall NiPortalSDM::NiPortalSDM(NiPortalSDM *this);
NiRTTI *__thiscall NiOldWall::GetRTTI(NiOldWall *this);
void *__thiscall NiOldWall::_vector_deleting_destructor_(NiOldWall *this, unsigned int);
NiObject *__cdecl NiRoom::CreateOldWallObject();
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAVObject> > *this, unsigned int);
void *__thiscall NiTArray<NiRoom::Wall__>::_vector_deleting_destructor_(NiTArray<NiRoom::Wall *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPortal>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiPortal> > *this, unsigned int);
void *__thiscall NiTArray<bool>::_vector_deleting_destructor_(NiTArray<bool> *this, unsigned int);
void __thiscall NiTArray<bool>::SetSize(NiTArray<bool> *this, unsigned int uiMaxSize);
void __thiscall NiRoom::UpdateWorldData(NiRoom *this);
void __thiscall NiRoom::ApplyTransform(NiRoom *this, NiMatrix3 *kMat, NiPoint3 *kTrn, bool bOnLeft);
bool __thiscall NiRoom::ContainsPoint(NiRoom *this, NiPoint3 *kPoint);
bool __thiscall NiRoom::RegisterStreamables(NiRoom *this, NiStream *kStream);
bool __thiscall NiRoom::IsEqual(NiRoom *this, NiObject *pkObject);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAVObject> > *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPortal>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPortal>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiPortal> > *this);
void *__thiscall NiTPointerList<NiPointer<NiAVObject>>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAVObject> > *this, unsigned int);
void *__thiscall NiTPointerList<NiPointer<NiPortal>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiPortal> > *this, unsigned int);
void __thiscall NiRoom::_NiRoom(NiRoom *this);
NiRTTI *__thiscall NiRoom::GetRTTI(NiRoom *this);
void __thiscall NiRoom::OnVisible(NiRoom *this, NiCullingProcess *kCuller);
void __thiscall NiRoom::UpdateChildArray(NiRoom *this);
void __thiscall NiRoom::PostLinkObject(NiRoom *this, NiStream *kStream);
void __thiscall NiRoom::LoadBinary(NiRoom *this, NiStream *kStream);
void __thiscall NiRoom::SaveBinary(NiRoom *this, NiStream *kStream);
NiPointer<NiInputDevice::Description> *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>::RemovePos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiInputDevice::Description> > *this, NiPointer<NiInputDevice::Description> *result, void **kPos);
void __thiscall NiRoom::NiRoom(NiRoom *this);
void *__thiscall NiRoom::_scalar_deleting_destructor_(NiRoom *this, unsigned int);
void __thiscall NiRoom::AttachOutgoingPortal(NiRoom *this, NiPortal *pkPortal);
void __thiscall NiRoom::AttachIncomingPortal(NiRoom *this, NiPortal *pkPortal);
NiObject *__cdecl NiRoom::CreateObject();
void __thiscall NiRoom::LinkObject(NiRoom *this, NiStream *kStream);
NiPointer<NiInputDevice::Description> *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>::Remove(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiInputDevice::Description> > *this, NiPointer<NiInputDevice::Description> *result, NiPointer<NiInputDevice::Description> *element);
NiPointer<NiAVObject> *__thiscall NiRoom::DetachFixture(NiRoom *this, NiPointer<NiAVObject> *result, NiAVObject *pkFixture);
void __thiscall NiRoomGroup::LoadBinary(NiRoomGroup *this, NiStream *kStream);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiRoom>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiRoom>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiRoom>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *this, unsigned int);
bool __thiscall NiRoomGroup::RegisterStreamables(NiRoomGroup *this, NiStream *kStream);
bool __thiscall NiRoomGroup::IsEqual(NiRoomGroup *this, NiObject *pkObject);
void *__thiscall NiTPointerList<NiPointer<NiRoom>>::_scalar_deleting_destructor_(NiTPointerList<NiPointer<NiRoom> > *this, unsigned int);
void __thiscall NiRoomGroup::_NiRoomGroup(NiRoomGroup *this);
NiRTTI *__thiscall NiRoomGroup::GetRTTI(NiRoomGroup *this);
void __thiscall NiRoomGroup::UpdateChildArray(NiRoomGroup *this);
NiPointer<NiRoom> *__thiscall NiRoomGroup::WhichRoom(NiRoomGroup *this, NiPointer<NiRoom> *result, NiPoint3 *kPoint);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *this, NiPointer<NiDX92DBufferData> *element);
void __thiscall NiRoomGroup::NiRoomGroup(NiRoomGroup *this);
void *__thiscall NiRoomGroup::_scalar_deleting_destructor_(NiRoomGroup *this, unsigned int);
void __thiscall NiRoomGroup::OnVisible(NiRoomGroup *this, NiCullingProcess *kCuller);
void __thiscall NiRoomGroup::AttachRoom(NiRoomGroup *this, NiRoom *pkRoom);
NiObject *__cdecl NiRoomGroup::CreateObject();
void __thiscall NiRoomGroup::LinkObject(NiRoomGroup *this, NiStream *kStream);
void __thiscall NiRoomGroup::SaveBinary(NiRoomGroup *this, NiStream *kStream);
NiPointer<NiRoom> *__thiscall NiRoomGroup::DetachRoom(NiRoomGroup *this, NiPointer<NiRoom> *result, NiRoom *pkRoom);
void __thiscall NiPortal::UpdateWorldBound(NiPortal *this);
void __thiscall NiPortal::LinkObject(NiPortal *this, NiStream *kStream);
bool __thiscall NiCamera::RegisterStreamables(NiPortal *this, NiStream *kStream);
NiRTTI *__thiscall NiPortal::GetRTTI(NiPortal *this);
void *__thiscall NiPortal::_vector_deleting_destructor_(NiPortal *this, unsigned int);
bool __thiscall NiPortal::UpdateFrustum(NiPortal *this, NiCullingProcess *kCuller);
void __thiscall NiPortal::OnVisible(NiPortal *this, NiCullingProcess *kCuller);
void __thiscall NiPortal::UpdateWorldData(NiPortal *this);
void __thiscall NiPortal::ApplyTransform(NiPortal *this, NiMatrix3 *kMat, NiPoint3 *kTrn, bool bOnLeft);
NiObject *__cdecl NiPortal::CreateObject();
bool __thiscall NiPortal::IsEqual(NiPortal *this, NiObject *pkObject);
void __thiscall NiPortal::LoadBinary(NiPortal *this, NiStream *kStream);
void __thiscall NiPortal::SaveBinary(NiPortal *this, NiStream *kStream);
void __thiscall NiFixtureCuller::Process(NiFixtureCuller *this, NiCamera *pkCamera, NiAVObject *pkScene, NiVisibleArray *pkVisibleSet);
void __thiscall NiFixtureCuller::AppendVirtual(NiFixtureCuller *this, NiGeometry *kVisible);
void *__thiscall NiTMapBase<DFALL<int>_NiGeometry___int>::_vector_deleting_destructor_(NiTMapBase<DFALL<int>,NiGeometry *,int> *this, unsigned int);
void __thiscall NiFixtureCuller::_NiFixtureCuller(NiFixtureCuller *this);
void *__thiscall NiTMap<NiGeometry___int>::_vector_deleting_destructor_(NiTMap<NiGeometry *,int> *this, unsigned int);
void __thiscall NiFixtureCuller::NiFixtureCuller(NiFixtureCuller *this);
void *__thiscall NiFixtureCuller::_vector_deleting_destructor_(NiFixtureCuller *this, unsigned int);
void __cdecl NiApplication::SetCommandLine(char *pcCommandLine);
void __cdecl NiApplication::CommandSelectRenderer();
bool __thiscall NiApplication::MeasureTime(NiApplication *this);
void __thiscall NiApplication::MainLoop(NiApplication *this);
int __stdcall NiApplication::WinProc(HWND__ *hWnd, unsigned int uiMsg, unsigned int wParam, int lParam);
void __thiscall NiApplication::OnIdle(NiApplication *this);
void __thiscall NiApplication::UpdateFrame(NiApplication *this);
void __thiscall NiApplication::ConfigureInputDevices(NiApplication *this);
void __thiscall NiApplication::DrawFrameRate(NiApplication *this);
bool __thiscall NiApplication::Initialize(NiApplication *this);
void __thiscall NiApplication::UpdateInput(NiApplication *this);
void __thiscall NiApplication::QuitApplication(NiApplication *this);
bool __thiscall NiApplication::Process(NiApplication *this);
NiRTTI *__thiscall NiInputSystem::CreateParams::GetRTTI(NiInputSystem::CreateParams *this);
void __thiscall NiDI8InputSystem::DI8CreateParams::DI8CreateParams(NiDI8InputSystem::DI8CreateParams *this);
NiRTTI *__thiscall NiDI8InputSystem::DI8CreateParams::GetRTTI(NiDI8InputSystem::DI8CreateParams *this);
void *__thiscall NiPointer<NiScreenElements>::_vector_deleting_destructor_(NiPointer<NiScreenElements> *this, unsigned int);
bool __thiscall NiApplication::CreateScene(NiApplication *this);
bool __thiscall NiApplication::CreateCamera(NiApplication *this);
int loc_87F0CA(); // weak
bool __thiscall NiApplication::CreateRenderer(NiApplication *this);
bool __thiscall NiApplication::CreateInputSystem(NiApplication *this);
NiInputSystem::CreateParams *__thiscall NiApplication::GetInputSystemCreateParams(NiApplication *this);
void __thiscall NiApplication::ProcessInput(NiApplication *this);
bool __thiscall NiApplication::OnWindowResize(NiApplication *this, int iWidth, int iHeight, unsigned int uiSizeType, HWND__ *pWnd);
void __thiscall NiApplication::BeginFrame(NiApplication *this);
void __thiscall NiApplication::RenderFrame(NiApplication *this);
void __thiscall NiApplication::RenderScreenItems(NiApplication *this);
void __thiscall NiApplication::EndFrame(NiApplication *this);
void __thiscall NiApplication::DisplayFrame(NiApplication *this);
unsigned int __thiscall NiTArray<NiPointer<NiScreenElements>>::Remove(NiTArray<NiPointer<NiScreenElements> > *this, NiPointer<NiScreenElements> *element);
void *__thiscall NiDI8InputSystem::DI8CreateParams::_scalar_deleting_destructor_(NiDI8InputSystem::DI8CreateParams *this, unsigned int);
void __thiscall NiTArray<NiPointer<NiScreenElements>>::_NiTArray<NiPointer<NiScreenElements>>(NiTArray<NiPointer<NiScreenElements> > *this);
void *__thiscall NiTArray<NiPointer<NiScreenElements>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiScreenElements> > *this, unsigned int);
void __thiscall NiApplication::_NiApplication(NiApplication *this);
void __thiscall NiApplication::Terminate(NiApplication *this);
void __thiscall NiTArray<NiPointer<NiScreenElements>>::NiTArray<NiPointer<NiScreenElements>>(NiTArray<NiPointer<NiScreenElements> > *this, unsigned int uiMaxSize, unsigned int uiGrowBy);
unsigned int __thiscall NiTArray<NiPointer<NiScreenElements>>::SetAtGrow(NiTArray<NiPointer<NiScreenElements> > *this, unsigned int uiIndex, NiPointer<NiScreenElements> *element);
void __thiscall NiApplication::NiApplication(NiApplication *this, const char *pcWindowCaption, unsigned int uiWidth, unsigned int uiHeight, unsigned int uiMenuID, unsigned int uiNumStatusPanes, unsigned int uiBitDepth);
void *__thiscall NiApplication::_scalar_deleting_destructor_(NiApplication *this, unsigned int);
void __thiscall NiApplication::EnableFrameRate(NiApplication *this, bool bEnable);
void __thiscall NiFrameRate::TakeSample(NiFrameRate *this);
void __thiscall NiFrameRate::Update(NiFrameRate *this);
void __thiscall NiFrameRate::Shutdown(NiFrameRate *this);
void __thiscall NiFrameRate::_NiFrameRate(NiFrameRate *this);
bool __cdecl NiDX9Select::UpdateAdapter(NiDX9Select *this, HWND__ *pDialog);
bool __cdecl NiDX9Select::UpdateResolution(NiDX9Select *this, HWND__ *pDialog);
bool __cdecl NiDX9Select::UpdateMultisample(NiDX9Select *this, HWND__ *pDialog);
DLGTEMPLATE *__cdecl NiDX9Select::BuildAdapterSelectTemplate(NiDX9Select *this);
_D3DFORMAT __cdecl NiDX9Renderer::GetD3DFormat(NiDX9Renderer::FrameBufferFormat eFBFormat);
NiDX9Renderer::FrameBufferFormat __cdecl NiDX9Renderer::GetNiFBFormat(_D3DFORMAT eFormat);
void __cdecl NiDX9Select::EnumerateAdapters(NiDX9Select *this, HWND__ *pDialog);
void __cdecl NiDX9Select::EnumerateResolutions(NiDX9Select *this, HWND__ *pDialog);
void __cdecl NiDX9Select::EnumerateMultisamples(NiDX9Select *this, HWND__ *pDialog);
int __stdcall NiDX9Select::Callback(NiDX9Select *this, HWND__ *pDialog, unsigned int uiMsg, unsigned int wParam, int lParam);
NiDX9Select::ReturnVal __cdecl NiDX9Select::Select(NiDX9Select *this, HWND__ *pkWnd, bool *bFullscreen, bool *b32BitZBuffer, const void **pvAdapter, const void **pvDevice, const void **pkMode, unsigned int *uiFBMode);
NiRenderer *__cdecl NiDX9Select::DialogCreateRenderer(NiDX9Select *this, HWND__ *pkTopLevelWnd, HWND__ *pkRenderWnd, bool bStencil, bool bMultiThread, bool bRefRast, bool bSWVertex, bool *bNVPerfHUD, bool *bFullscreen);
NiPointer<NiRenderer> *__cdecl NiDX9Select::CreateRenderer(NiDX9Select *this, NiPointer<NiRenderer> *result, HWND__ *pkTopLevelWnd, HWND__ *pkRenderWnd, bool bDialog, unsigned int uiBitDepth, unsigned int uiWidth, unsigned int uiHeight, bool bStencil, bool bMultiThread, bool bRefRast, bool bSWVertex, bool *bNVPerfHUD, bool *bFullscreen);
int __stdcall WinMain(HINSTANCE__ *hI, HINSTANCE__ *hPI, char *cmdline, int iWinMode);
void __thiscall NiCommand::_NiCommand(NiCommand *this);
int __thiscall NiCommand::Boolean(NiCommand *this, char *pcName, bool *bValue);
void __thiscall NiCommand::NiCommand(NiCommand *this, char *pcCmdline);
int __thiscall NiCommand::Boolean(NiCommand *this, char *pcName);
void __thiscall NiAppWindow::NiAppWindow(NiAppWindow *this, const char *pcWindowCaption, unsigned int uiWidth, unsigned int uiHeight, unsigned int uiNumStatusPanes, unsigned int ulWindowStyle);
void __thiscall NiAppWindow::StatusWindowCreate(NiAppWindow *this);
void __thiscall NiAppWindow::WriteToStatusWindow(NiAppWindow *this, unsigned int uiPane, char *pcMsg);
void __thiscall NiAppWindow::StatusWindowDestroy(NiAppWindow *this);
HWND__ *__thiscall NiAppWindow::CreateMainWindow(NiAppWindow *this, int iWinMode, HWND__ *hWnd);
void __thiscall NiAppWindow::_NiAppWindow(NiAppWindow *this);
unsigned int __cdecl NiAction::SemanticToDeviceControl_GamePad(unsigned int uiSemantic);
unsigned int __cdecl NiAction::SemanticToDeviceControl_Mouse(unsigned int uiSemantic);
unsigned int __cdecl NiAction::SemanticToDeviceControl(unsigned int uiSemantic);
NiInputDevice *__thiscall NiInputSystem::OpenDevice(NiInputSystem *this, NiInputDevice::Type eType, unsigned int uiPort, unsigned int uiSlot);
NiInputGamePad *__thiscall NiInputSystem::OpenGamePad(NiInputSystem *this, unsigned int uiPort, unsigned int uiSlot);
NiInputKeyboard *__thiscall NiInputSystem::OpenKeyboard(NiInputSystem *this);
void __cdecl NiInputSystem::Log(char *pszFmt);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiInputDevice::Description>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiInputDevice::Description> > *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiActionData__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiActionData *> *this, unsigned int);
void __thiscall NiTPoolContainer<NiActionData>::NiTPoolContainer<NiActionData>(NiTPoolContainer<NiActionData> *this, unsigned int uiSize);
NiInputGamePad *__thiscall NiInputSystem::OpenGamePad(NiInputSystem *this, NiInputDevice::Description *pkNiDesc);
NiPalette *__thiscall NiInputSystem::GetActionMap(NiDX9SourceTextureData *this);
NiInputDevice::Description *__thiscall NiInputSystem::GetDeviceDesc(NiInputSystem *this, unsigned int uiPort, unsigned int uiSlot);
void __thiscall NiInputSystem::UpdateMouseModifiers(NiInputSystem *this);
NiPointer<NiInputDevice::Description> *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAVObject>>::RemoveTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiInputDevice::Description> > *this, NiPointer<NiInputDevice::Description> *result);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiInputDevice::Description>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiInputDevice::Description>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiInputDevice::Description> > *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiActionData__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiActionData__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiActionData *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiInputDevice::Description>>::_scalar_deleting_destructor_(NiTPointerList<NiPointer<NiInputDevice::Description> > *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiActionData__>::_vector_deleting_destructor_(NiTPointerList<NiActionData *> *this, unsigned int);
NiInputErr __thiscall NiInputSystem::CloseDevice(NiInputSystem *this, NiInputDevice *pkDevice);
NiInputErr __thiscall NiInputSystem::UpdateAllDevices(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::UpdateActionMap(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::Initialize(NiInputSystem *this, NiInputSystem::CreateParams *pkParams);
NiInputErr __thiscall NiInputSystem::Shutdown(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::MapNiActionsToKeyboard(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::MapNiActionsToMouse(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::MapNiActionsToGamePad(NiInputSystem *this, NiInputGamePad *pkGamePad);
void __thiscall NiTPool<NiActionData>::CreateNewObjects(NiTPool<NiActionData> *this, unsigned int uiSize);
void __thiscall NiInputSystem::NiInputSystem(NiInputSystem *this);
NiRTTI *__thiscall NiInputSystem::GetRTTI(NiInputSystem *this);
const char *__thiscall NiInputSystem::GetAvailableDeviceCount(NiD3DHLSLVertexShader *this);
NiInputDevice::Description *__thiscall NiInputSystem::GetFirstDeviceDesc(NiInputSystem *this);
NiInputDevice::Description *__thiscall NiInputSystem::GetNextDeviceDesc(NiInputSystem *this);
unsigned int __thiscall NiInputSystem::GetActionDataCount(NiInputSystem *this);
NiActionData *__thiscall NiInputSystem::PopActionData(NiInputSystem *this);
NiActionData *__thiscall NiInputSystem::GetFirstActionData(NiInputSystem *this);
NiActionData *__thiscall NiInputSystem::GetNextActionData(NiInputSystem *this);
unsigned int __thiscall NiInputSystem::AddAvailableDevice(NiInputSystem *this, NiInputDevice::Description *pkDescription);
NiInputErr __thiscall NiInputSystem::MapNiActionsToGamePads(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::MapNiActionsToDevices(NiInputSystem *this);
void __thiscall NiInputSystem::RemoveDeviceDesc(NiInputSystem *this, unsigned int uiPort, unsigned int uiSlot);
void __thiscall NiInputSystem::_NiInputSystem(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::SetActionMap(NiInputSystem *this, NiActionMap *pkActionMap);
NiInputErr __thiscall NiInputSystem::FlushActionData(NiInputSystem *this);
NiInputErr __thiscall NiInputSystem::ReportAction(NiInputSystem *this, NiInputDevice *pkDevice, unsigned int uiAppData, unsigned int uiSequence, unsigned int uiDeviceData, void *pvContext);
void *__thiscall NiInputSystem::_vector_deleting_destructor_(NiInputSystem *this, unsigned int);
void __thiscall NiDI8InputSystem::NiDI8InputSystem(NiDI8InputSystem *this);
NiInputErr __thiscall NiDI8InputSystem::Initialize(NiDI8InputSystem *this, NiInputSystem::CreateParams *pkParams);
NiInputErr __thiscall NiDI8InputSystem::Shutdown(NiDI8InputSystem *this);
NiInputErr __thiscall NiDI8InputSystem::SetActionMapOnDIDevice(NiDI8InputSystem *this, IDirectInputDevice8A *pkDIDevice);
NiInputErr __thiscall NiDI8InputSystem::CheckEnumerationStatus(NiDI8InputSystem *this);
void __thiscall NiInputDevice::ControlDesc::SetName(NiInputDevice::ControlDesc *this, const char *pacName);
void __thiscall NiInputDevice::Description::SetName(NiInputDevice::Description *this, const char *pacName);
void __thiscall NiInputDevice::Description::SetDescriptionString(NiInputDevice::Description *this, const char *pacDesc);
NiRTTI *__thiscall NiDI8InputSystem::GetRTTI(NiDI8InputSystem *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiInputDevice::ControlDesc__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiInputDevice::ControlDesc__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiInputDevice::ControlDesc *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiInputDevice::ControlDesc__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiInputDevice::ControlDesc *> *this, unsigned int);
void __thiscall NiDI8InputSystem::_NiDI8InputSystem(NiDI8InputSystem *this);
NiInputErr __thiscall NiDI8InputSystem::HandleDeviceChanges(NiDI8InputSystem *this);
bool __thiscall NiDI8InputSystem::SetControlMapName(NiDI8InputSystem *this, NiDI8InputSystem::DefaultActions eAction, const char *pcName);
bool __thiscall NiDI8InputSystem::DIDeviceInstanceToNiInputDescription(NiDI8InputSystem *this, DIDEVICEINSTANCEA *pkDDI, NiDI8InputSystem::DI8Description *pkNiDesc);
bool __thiscall NiDI8InputSystem::SetupDefaultActionMap(NiDI8InputSystem *this);
NiDX92DBufferData *__cdecl NiDX92DBufferData::DynamicCast(NiRTTI *pkRTTI, NiDX92DBufferData *pkObject);
_D3DPRESENT_PARAMETERS_ *__thiscall NiDX9Renderer::GetPresentParams(NiDX9Renderer *this);
void __thiscall NiInputDevice::ControlDesc::ControlDesc(NiInputDevice::ControlDesc *this, unsigned int uiIndex, const char *pacName, NiInputDevice::ControlDesc::Type eType, unsigned int uiFlags);
void *__thiscall NiTPointerList<NiInputDevice::ControlDesc__>::_scalar_deleting_destructor_(NiTPointerList<NiInputDevice::ControlDesc *> *this, unsigned int);
void *__thiscall NiDI8InputSystem::_scalar_deleting_destructor_(NiDI8InputSystem *this, unsigned int);
NiInputGamePad *__thiscall NiDI8InputSystem::OpenGamePad(NiDI8InputSystem *this, unsigned int uiPort, unsigned int uiSlot);
NiInputMouse *__thiscall NiDI8InputSystem::OpenMouse(NiDI8InputSystem *this);
NiInputKeyboard *__thiscall NiDI8InputSystem::OpenKeyboard(NiDI8InputSystem *this);
int __stdcall NiDI8InputSystem::DIEnumDeviceObjectsCallback(DIDEVICEOBJECTINSTANCEA *pkDIDOI, void *pvRef);
NiInputErr __thiscall NiDI8InputSystem::ConfigureDevices(NiDI8InputSystem *this);
void __thiscall NiInputDevice::Description::_Description(NiInputDevice::Description *this);
NiInputErr __thiscall NiDI8InputSystem::EnumerateDeviceControls(NiDI8InputSystem *this, NiDI8InputSystem::DI8Description *pkNiDesc, IDirectInputDevice8A *pkDI8Device);
void __thiscall NiInputDevice::Description::Description(NiInputDevice::Description *this);
void *__thiscall NiInputDevice::Description::_scalar_deleting_destructor_(NiInputDevice::Description *this, unsigned int);
void *__thiscall NiDI8InputSystem::DI8Description::_vector_deleting_destructor_(NiDI8InputSystem::DI8Description *this, unsigned int);
int __stdcall NiDI8InputSystem::DIEnumDevicesCallback(DIDEVICEINSTANCEA *pkDDI, void *pvRef);
bool __thiscall NiDI8InputSystem::AddDefaultActionMappedDevice(NiDI8InputSystem *this, DIDEVICEINSTANCEA *pkDDI, IDirectInputDevice8A *const pkDevice);
int __stdcall NiDI8InputSystem::DIEnumDevicesBySemanticsDefaultCallback(DIDEVICEINSTANCEA *pkDDI, IDirectInputDevice8A *pkDID, unsigned int dwFlags, unsigned int dwRemaining, void *pvRef);
NiInputErr __thiscall NiDI8InputSystem::EnumerateDevices(NiDI8InputSystem *this);
NiInputSystem *__cdecl NiInputSystem::Create(NiInputSystem::CreateParams *pkParams);
NiInputErr __thiscall NiInputGamePad::UpdateDevice(NiInputGamePad *this);
void __thiscall NiInputGamePad::SetRawAxisValue(NiInputGamePad *this, unsigned int uiAxis, int iValue);
void __thiscall NiInputGamePad::NiInputGamePad(NiInputGamePad *this, NiInputDevice::Description *pkDescription, int iStickRangeLow, int iStickRangeHigh);
NiRTTI *__thiscall NiInputGamePad::GetRTTI(NiInputGamePad *this);
void __thiscall NiInputGamePad::_NiInputGamePad(NiInputGamePad *this);
NiInputErr __thiscall NiInputGamePad::UpdateActionMappedDevice(NiInputGamePad *this, NiInputSystem *pkInputSystem);
const bool __thiscall NiInputGamePad::ButtonIsDown(NiInputGamePad *this, NiInputGamePad::Button eButton);
void __thiscall NiInputGamePad::TouchAllInputValues(NiInputGamePad *this);
bool __thiscall NiInputGamePad::IsControlMapped(NiInputGamePad *this, unsigned int uiControl, unsigned int uiSemantic, bool bUseModifiers, unsigned int uiModifiers, bool bUseRange, int iRangeLow, int iRangeHigh);
bool __thiscall NiInputGamePad::UpdateMappedButtons(NiInputGamePad *this, NiInputSystem *pkInputSystem);
bool __thiscall NiInputGamePad::UpdateMappedSticks(NiInputGamePad *this, NiInputSystem *pkInputSystem);
void *__thiscall NiInputGamePad::_vector_deleting_destructor_(NiInputGamePad *this, unsigned int);
void __thiscall NiInputGamePad::RecordButtonPress(NiInputGamePad *this, NiInputGamePad::Button eButton, char ucValue);
void __thiscall NiInputGamePad::RecordButtonRelease(NiInputGamePad *this, NiInputGamePad::Button eButton);
NiAction *__thiscall NiActionMap::GetAction(NiActionMap *this, unsigned int uiIndex);
void __thiscall NiTPool<NiActionData>::_NiTPool<NiActionData>(NiTPool<NiD3DPass> *this);
void __cdecl NiActionMap::ReleaseActionPool();
bool __thiscall NiInputDevice::IsControlMapped(NiInputDevice *this, unsigned int uiControl, unsigned int uiSemantic, bool bUseModifiers, unsigned int uiModifiers, bool bUseRange, int iRangeLow, int iRangeHigh);
void __thiscall NiInputDevice::Axis::SetRawValue(NiInputDevice::Axis *this, int iValue, bool bInvert, float fDeadZone);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiAction__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiAction__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiAction *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiAction__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiAction *> *this, unsigned int);
void __thiscall NiInputDevice::NiInputDevice(NiInputDevice *this, NiInputDevice::Description *pkDescription);
NiRTTI *__thiscall NiInputDevice::GetRTTI(NiInputDevice *this);
void __thiscall NiInputDevice::_NiInputDevice(NiInputDevice *this);
void *__thiscall NiTPointerList<NiAction__>::_vector_deleting_destructor_(NiTPointerList<NiAction *> *this, unsigned int);
NiInputErr __thiscall NiInputDevice::ClearMappedActions(NiInputDevice *this);
unsigned int __thiscall NiInputDevice::Description::AddControlDesc(NiInputDevice::Description *this, NiInputDevice::ControlDesc *pkDesc);
void *__thiscall NiInputDevice::_scalar_deleting_destructor_(NiInputDevice *this, unsigned int);
bool __thiscall NiInputDevice::CheckActionDeviceIDAndModifiers(NiInputDevice *this, NiAction *pkAction, unsigned int uiModifiers);
NiInputErr __thiscall NiInputDevice::AddMappedAction(NiInputDevice *this, NiAction *pkAction);
NiInputErr __thiscall NiInputDI8Mouse::HandleRemoval(NiInputDI8Mouse *this);
NiInputErr __thiscall NiInputDI8Mouse::HandleInsertion(NiInputDI8Mouse *this);
NiRTTI *__thiscall NiInputDI8Mouse::GetRTTI(NiInputDI8Mouse *this);
void __thiscall NiInputDI8Mouse::NiInputDI8Mouse(NiInputDI8Mouse *this, NiInputDevice::Description *pkDescription, IDirectInputDevice8A *pkDIDevice, unsigned int uiUsage);
void *__thiscall NiInputDI8Mouse::_scalar_deleting_destructor_(NiInputDI8Mouse *this, unsigned int);
void __thiscall NiInputDI8Mouse::UpdateImmediateData(NiInputDI8Mouse *this, unsigned int dwData, unsigned int uiBtnOffset);
NiInputErr __thiscall NiInputDI8Mouse::UpdateDevice(NiInputDI8Mouse *this);
NiInputErr __thiscall NiInputDI8Keyboard::HandleRemoval(NiInputDI8Keyboard *this);
NiInputErr __thiscall NiInputDI8Keyboard::HandleInsertion(NiInputDI8Keyboard *this);
void __thiscall NiInputDI8Keyboard::FillMapping(NiInputDI8Keyboard *this);
unsigned int __thiscall NiInputKeyboard::GetKeyModifierValue(NiInputKeyboard *this, NiInputKeyboard::KeyCode eKey);
NiRTTI *__thiscall NiInputDI8Keyboard::GetRTTI(NiInputDI8Keyboard *this);
void __thiscall NiInputDI8Keyboard::NiInputDI8Keyboard(NiInputDI8Keyboard *this, NiInputDevice::Description *pkDescription, IDirectInputDevice8A *pkDIDevice, unsigned int uiUsage);
void *__thiscall NiInputDI8Keyboard::_vector_deleting_destructor_(NiInputDI8Keyboard *this, unsigned int);
NiInputErr __thiscall NiInputDI8Keyboard::UpdateDevice(NiInputDI8Keyboard *this);
NiInputErr __thiscall NiInputDI8GamePad::HandleRemoval(NiInputDI8GamePad *this);
NiInputErr __thiscall NiInputDI8GamePad::HandleInsertion(NiInputDI8GamePad *this);
void __thiscall NiInputDI8GamePad::UpdateImmediateData(NiInputDI8GamePad *this, unsigned int uiAppData, unsigned int dwData);
NiRTTI *__thiscall NiInputDI8GamePad::GetRTTI(NiInputDI8GamePad *this);
void __thiscall NiInputDI8GamePad::GetRumbleValue(NiInputDI8GamePad *this, unsigned int uiMotor, unsigned int *uiValue);
void __thiscall NiInputDI8GamePad::NiInputDI8GamePad(NiInputDI8GamePad *this, NiInputDevice::Description *pkDescription, IDirectInputDevice8A *pkDIDevice, int iStickRangeLow, int iStickRangeHigh);
void *__thiscall NiInputDI8GamePad::_vector_deleting_destructor_(NiInputDI8GamePad *this, unsigned int);
NiInputErr __thiscall NiInputDI8GamePad::UpdateDevice(NiInputDI8GamePad *this);
void __thiscall NiInputMouse::NiInputMouse(NiInputMouse *this, NiInputDevice::Description *pkDescription);
NiRTTI *__thiscall NiInputMouse::GetRTTI(NiInputMouse *this);
void __thiscall NiInputMouse::_NiInputMouse(NiInputMouse *this);
NiInputErr __thiscall NiInputMouse::UpdateActionMappedDevice(NiInputMouse *this, NiInputSystem *pkInputSystem);
void __thiscall NiInputMouse::TouchAllInputValues(NiInputMouse *this);
bool __thiscall NiInputMouse::IsControlMapped(NiInputMouse *this, unsigned int uiControl, unsigned int uiSemantic, bool bUseModifiers, unsigned int uiModifiers, bool bUseRange, int iRangeLow, int iRangeHigh);
bool __thiscall NiInputMouse::UpdateMappedButtons(NiInputMouse *this, NiInputSystem *pkInputSystem);
bool __thiscall NiInputMouse::UpdateMappedSticks(NiInputMouse *this, NiInputSystem *pkInputSystem);
void *__thiscall NiInputMouse::_scalar_deleting_destructor_(NiInputMouse *this, unsigned int);
void __thiscall NiInputKeyboard::NiInputKeyboard(NiInputKeyboard *this, NiInputDevice::Description *pkDescription);
void __thiscall NiInputKeyboard::_NiInputKeyboard(NiInputKeyboard *this);
NiInputErr __thiscall NiInputKeyboard::UpdateDevice(NiInputKeyboard *this);
NiDX9DynamicTextureData *__thiscall Item::GetCurUpGradeLevel(NiDX9TextureData *this);
NiRTTI *__thiscall NiInputKeyboard::GetRTTI(NiInputKeyboard *this);
void *__thiscall NiInputKeyboard::_vector_deleting_destructor_(NiInputKeyboard *this, unsigned int);
NiInputErr __thiscall NiInputKeyboard::UpdateActionMappedDevice(NiInputKeyboard *this, NiInputSystem *pkInputSystem);
void __thiscall NiInputKeyboard::TouchAllInputValues(NiInputKeyboard *this);
bool __thiscall NiInputKeyboard::IsControlMapped(NiInputKeyboard *this, unsigned int uiControl, unsigned int uiSemantic, bool bUseModifiers, unsigned int uiModifiers, bool bUseRange, int iRangeLow, int iRangeHigh);
void __cdecl NiOptimizeABV::CreateWireABV(NiAVObject *pkObject, NiColor *kColor, float fMult, const char *pcName, bool bCreateOBB);
bool __cdecl NSBShaderLib_LoadShaderLibrary(NiRenderer *pkRenderer, int iDirectoryCount, char **pszDirectories, bool bRecurseSubFolders, NiShaderLibrary **ppkLibrary);
void __thiscall NiD3DXEffectShaderLibrary::SetShaderLibraryDesc(NiD3DXEffectShaderLibrary *this, NiShaderLibraryDesc *pkDesc);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NSBShader> > *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NSBShader> > *this, unsigned int);
void *__thiscall NiTPointerList<NiPointer<NSBShader>>::_scalar_deleting_destructor_(NiTPointerList<NiPointer<NSBShader> > *this, unsigned int);
void __thiscall NSBShaderLibrary::_NSBShaderLibrary(NSBShaderLibrary *this);
NSBShader *__thiscall NSBShaderLibrary::GetNSBShader(NSBShaderLibrary *this, const char *pacName);
void *__thiscall NSBShaderLibrary::_vector_deleting_destructor_(NSBShaderLibrary *this, unsigned int);
NiShader *__thiscall NSBShaderLibrary::GetShader(NSBShaderLibrary *this, NiRenderer *pkRenderer, const char *pacName, unsigned int uiImplementation);
bool __thiscall NSBShaderLibrary::InsertNSBShaderIntoList(NSBShaderLibrary *this, NSBShader *pkNSBShader);
NSBShaderLibrary *__cdecl NSBShaderLibrary::Create(int iDirectoryCount, char **pacDirectories, bool bRecurseSubFolders);
void __cdecl NSBShaderLibSDM::Init(); // idb
void __cdecl NSBShaderLibSDM::Shutdown(); // idb
void __thiscall NSBShaderLibSDM::NSBShaderLibSDM(NSBShaderLibSDM *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_char__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_char__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,char *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_char__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,char *> *this, unsigned int);
void __thiscall NSBLoader::_NSBLoader(NiD3DXEffectLoader *this);
bool __thiscall NSBLoader::LoadAllNSBFiles(NSBLoader *this, NSBShaderLibrary *pkLibrary);
void *__thiscall NiTPointerList<char__>::_vector_deleting_destructor_(NiTPointerList<char *> *this, unsigned int);
void __cdecl NSBLoader::Destroy();
void __thiscall NSBLoader::NSBLoader(NiD3DXEffectLoader *this);
NSBLoader *__cdecl NSBLoader::Create();
unsigned int __thiscall NSFLoader::LoadAllNSFFilesInDirectory(NSFLoader *this, const char *pszDirectory, const char *pszExt, bool bRecurseDirectories, NiTPointerList<char *> *pkFileList);
bool __thiscall NSBLoader::LoadAllNSBFiles(NSBLoader *this, NSBShaderLibrary *pkLibrary, const char *pszDirectory, bool bRecurseSubDirs);
unsigned int __cdecl NSFParserLib_RunShaderParser(const char *pszDirectory, bool bRecurseSubFolders);
unsigned int __thiscall NSFLoader::LoadAllNSFTextFiles(NSFLoader *this);
NSFLoader *__cdecl NSFLoader::Create();
void __cdecl NSFLoader::Destroy();
unsigned int __thiscall NSFLoader::ParseAllNSFFiles(NSFLoader *this, const char *pszDirectory, bool bRecurseSubDirs);
void __thiscall NSFParsedShader::NSFParsedShader(NSFParsedShader *this);
void __thiscall NSFParsedShader::_NSFParsedShader(NSFParsedShader *this);
NSBShader *__thiscall NSFParsedShader::GetShader(NSFParsedShader *this);
NiShaderAttributeDesc::AttributeType __cdecl NiD3DShaderConstantMapEntry::GetAttributeType(unsigned int uiFlags);
// void __usercall yy_stack_print(__int16 *bottom<eax>, __int16 *top<edi>);
// void __usercall yy_reduce_print(int yyrule<edi>);
void __cdecl ResetParser(); // idb
void __cdecl CleanupParser(); // idb
unsigned int __cdecl DecodeAttribTypeString(char *pszAttribType);
unsigned int __cdecl DecodePlatformString(char *pszPlatform);
NiShaderAttributeDesc::AttributeType __cdecl DetermineResultMultiply(NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2);
NiShaderAttributeDesc::AttributeType __cdecl DetermineResultDivide(NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2);
NiShaderAttributeDesc::AttributeType __cdecl DetermineResultAdd(NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *this, unsigned int);
NiShaderAttributeDesc::AttributeType __thiscall NiD3DShaderConstantMapEntry::GetAttributeType(NiD3DShaderConstantMapEntry *this);
bool __cdecl NiD3DShaderConstantMapEntry::IsBool(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsString(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsUnsignedInt(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsFloat(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsPoint2(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsPoint3(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsPoint4(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsMatrix3(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsMatrix4(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsColor(unsigned int uiFlags);
bool __cdecl NiD3DShaderConstantMapEntry::IsTexture(unsigned int uiFlags);
bool __cdecl AddGlobalAttributeToConstantMap(char *pszName, unsigned int uiRegisterStart, unsigned int uiRegisterCount);
NiShaderAttributeDesc::AttributeType __cdecl DetermineOperatorResult(int iOperation, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2);
void *__thiscall NiTPointerList<NSFParsedShader__>::_scalar_deleting_destructor_(NiTPointerList<NSFParsedShader *> *this, unsigned int);
bool __cdecl SetupOperatorEntry(char *pszName, int iRegStart, int iRegCount, char *pszEntry1, int iOperation, char *pszEntry2, bool bInverse, bool bTranspose);
int __cdecl NSFParserparse();
int __cdecl ParseShader(const char *pszFileName);
void __thiscall NSFTextFile::NSFTextFile(NSFTextFile *this);
void __thiscall NSFTextFile::_NSFTextFile(NSFTextFile *this);
int __thiscall NSFTextFile::Load(NSFTextFile *this, const char *pszFilename);
void __cdecl NSFParserResetLineNumber(); // idb
int __cdecl NSFParserGetLineNumber();
void __cdecl NSFParsererror(char *s);
int __cdecl yy_get_previous_state();
// int __usercall yy_try_NUL_trans<eax>(int yy_current_state<eax>);
void __cdecl NSFParser_flush_buffer(yy_buffer_state *b);
// void __usercall yy_fatal_error(const char *msg<eax>);
NSBAttributeTable *__cdecl skip1();
unsigned int __cdecl HexConvert(char *buf);
void __cdecl NSFParserReleaseBuffer(); // idb
yy_buffer_state *__cdecl NSFParser_create_buffer(_iobuf *file, int size);
void __cdecl NSFParserrestart(_iobuf *input_file);
void __cdecl NSFParserReset(); // idb
int __cdecl yy_get_next_buffer();
int __cdecl NSFParserlex();
bool __cdecl NiD3DXEffectShaderLib_LoadShaderLibrary(NiRenderer *pkRenderer, int iDirectoryCount, char **apcDirectories, bool bRecurseSubFolders, NiShaderLibrary **ppkLibrary);
void __thiscall NiD3DXEffectShaderLibrary::SetRenderer(NiD3DXEffectShaderLibrary *this, NiDX9Renderer *pkRenderer);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectFile__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectFile *> *this, unsigned int);
NiShader *__thiscall NiD3DXEffectShaderLibrary::GetShader(NiD3DXEffectShaderLibrary *this, NiRenderer *pkRenderer, const char *pcName, unsigned int uiImplementation);
NiD3DXEffectFile *__thiscall NiD3DXEffectShaderLibrary::GetD3DXEffectFile(NiD3DXEffectShaderLibrary *this, const char *pcName);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectFile__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectFile__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectFile *> *this);
void __thiscall NiTPointerMap<char_const___NiObject______cdecl____void_>::DeleteItem(NiTPointerMap<unsigned int,NiVBSet *> *this, NiTMapItem<unsigned int,NiVBSet *> *pkItem);
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiD3DXEffectFile__>_NiD3DXEffectFile__>::_NiTStringTemplateMap<NiTMap<char_const___NiD3DXEffectFile__>_NiD3DXEffectFile__>(NiTStringTemplateMap<NiTMap<char const *,NiD3DXEffectFile *>,NiD3DXEffectFile *> *this);
void *__thiscall NiTPointerList<NiD3DXEffectFile__>::_vector_deleting_destructor_(NiTPointerList<NiD3DXEffectFile *> *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<NiD3DXEffectFile__>_char_const___NiD3DXEffectFile__>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiD3DXEffectFile *>,char const *,NiD3DXEffectFile *> *this, unsigned int);
void *__thiscall NiTMap<char_const___NiD3DXEffectFile__>::_vector_deleting_destructor_(NiTMap<char const *,NiD3DXEffectFile *> *this, unsigned int);
void *__thiscall NiTStringMap<NiD3DXEffectFile__>::_scalar_deleting_destructor_(NiTStringMap<NiD3DXEffectFile *> *this, unsigned int);
void __thiscall NiD3DXEffectShaderLibrary::_NiD3DXEffectShaderLibrary(NiD3DXEffectShaderLibrary *this);
bool __thiscall NiD3DXEffectShaderLibrary::InsertD3DXEffectFileIntoList(NiD3DXEffectShaderLibrary *this, NiD3DXEffectFile *pkD3DXEffectFile);
void *__thiscall NiD3DXEffectShaderLibrary::_vector_deleting_destructor_(NiD3DXEffectShaderLibrary *this, unsigned int);
void __thiscall NiD3DXEffectShaderLibrary::NiD3DXEffectShaderLibrary(NiD3DXEffectShaderLibrary *this);
NiD3DXEffectShaderLibrary *__cdecl NiD3DXEffectShaderLibrary::Create(NiDX9Renderer *pkD3DRenderer, int iDirectoryCount, char **apcDirectories, bool bRecurseSubFolders);
HINSTANCE__ *__cdecl NiD3DXEffectFactory::GetApplicationInstance();
bool __thiscall NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key);
NiD3DXEffectFile *__thiscall NiD3DXEffectFactory::GetD3DXEffectFile(NiD3DXEffectFactory *this, const char *pcShaderName);
void __thiscall NiD3DXEffectFactory::InsertD3DXEffectFileIntoMap(NiD3DXEffectFactory *this, NiD3DXEffectFile *pkD3DXEffectFile);
void __thiscall NiD3DXEffectFactory::RemoveD3DXEffectFileFromMap(NiD3DXEffectFactory *this, const char *pcName);
bool __cdecl NiD3DXEffectFactory::ResolveD3DXEffectFileName(const char *pcOriginalName, char *pcTrueName, unsigned int uiBufferSize);
void __thiscall NiD3DXEffectFactory::HandleLostDevice(NiD3DXEffectFactory *this, unsigned int uiCounter);
void __thiscall NiD3DXEffectFactory::HandleResetDevice(NiD3DXEffectFactory *this, unsigned int uiCounter);
void __thiscall NiD3DXEffectFactory::DestroyRendererData(NiD3DXEffectFactory *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DXEffectFile__>_NiD3DXEffectFile__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DXEffectFile__>_NiD3DXEffectFile__>(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DXEffectFile *>,NiD3DXEffectFile *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DXEffectFile__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiD3DXEffectFile *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiD3DXEffectFile__>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiD3DXEffectFile *> *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiD3DXEffectFile__>::_vector_deleting_destructor_(NiTStringPointerMap<NiD3DXEffectFile *> *this, unsigned int);
bool __thiscall NiD3DXEffectFactory::LoadD3DXEffectFromFile(NiD3DXEffectFactory *this, const char *pcFileName, NiD3DXEffectFile **pkD3DXEffectFile);
void __cdecl NiD3DXEffectFactory::SetD3DRenderer(NiDX9Renderer *pkD3DRenderer);
void *__thiscall NiD3DXEffectFactory::_scalar_deleting_destructor_(NiD3DXEffectFactory *this, unsigned int);
void __cdecl NiD3DXEffectFactory::_SDMShutdown();
void __thiscall NiD3DXEffectFactory::NiD3DXEffectFactory(NiD3DXEffectFactory *this);
NiD3DXEffectFactory *__cdecl NiD3DXEffectFactory::GetInstance(bool bCreateNew);
NiD3DXEffectFile *__cdecl NiD3DXEffectFactory::CreateD3DXEffectFromFile(const char *pcFileName);
void __thiscall NSBImplementation::SetName(NiD3DXEffectFile *this, const char *pcName);
void __thiscall NiD3DXEffectFile::HandleLostDevice(NiD3DXEffectFile *this);
void __thiscall NiD3DXEffectFile::HandleResetDevice(NiD3DXEffectFile *this);
const char *__thiscall NiD3DXEffectTechnique::GetTechniqueName(NiD3DXEffectTechnique *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectParameter__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *this, unsigned int);
void __thiscall NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *this, NiD3DXEffectParameter *const *element);
void __thiscall NiTMapBase<DFALL<NiPointer<NiD3DXEffectTechniqueSet>>_char_const___NiPointer<NiD3DXEffectTechniqueSet>>::GetNext(NiTMapBase<NiTPointerAllocator<unsigned int>,HWND__ *,NiPointer<NiRenderTargetGroup> > *this, void **pos, HWND__ **key, NiPointer<NiRenderTargetGroup> *val);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectParameter__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectParameter__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *this);
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiD3DXEffectTechniqueSet>>_NiPointer<NiD3DXEffectTechniqueSet>>::_NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiD3DXEffectTechniqueSet>>_NiPointer<NiD3DXEffectTechniqueSet>>(NiTStringTemplateMap<NiTMap<char const *,NiPointer<NiD3DXEffectTechniqueSet> >,NiPointer<NiD3DXEffectTechniqueSet> > *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DXEffectParameter__>::_vector_deleting_destructor_(NiTPointerList<NiD3DXEffectParameter *> *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<NiPointer<NiD3DXEffectTechniqueSet>>_char_const___NiPointer<NiD3DXEffectTechniqueSet>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiD3DXEffectTechniqueSet> >,char const *,NiPointer<NiD3DXEffectTechniqueSet> > *this, unsigned int);
void *__thiscall NiTMap<char_const___NiPointer<NiD3DXEffectTechniqueSet>>::_scalar_deleting_destructor_(NiTMap<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *this, unsigned int);
void *__thiscall NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiD3DXEffectTechniqueSet>>_NiPointer<NiD3DXEffectTechniqueSet>>::_scalar_deleting_destructor_(NiTStringMap<NiPointer<NiD3DXEffectTechniqueSet> > *this, unsigned int);
NiD3DXEffectTechnique *__thiscall NiD3DXEffectFile::GetNextTechnique(NiD3DXEffectFile *this);
NiD3DXEffectTechnique *__thiscall NiD3DXEffectFile::GetTechnique(NiD3DXEffectFile *this, const char *pcName, unsigned int uiImplementation);
NiShaderDesc *__thiscall NiD3DXEffectFile::GetNextShaderDesc(NiD3DXEffectFile *this);
void __thiscall NiD3DXEffectFile::DestroyRendererData(NiD3DXEffectFile *this);
bool __thiscall NiD3DXEffectFile::LinkHandles(NiD3DXEffectFile *this);
NiD3DXEffectTechnique *__thiscall NiD3DXEffectFile::GetFirstTechnique(NiD3DXEffectFile *this);
NiShaderDesc *__thiscall NiD3DXEffectFile::GetFirstShaderDesc(NiD3DXEffectFile *this);
void __thiscall NiD3DXEffectFile::LoadEffect(NiD3DXEffectFile *this, NiDX9Renderer *pkRenderer);
void __thiscall NiD3DXEffectFile::AddTechnique(NiD3DXEffectFile *this, NiD3DXEffectTechnique *pkTechnique, IDirect3DDevice9 *pkD3DDevice);
NiD3DXEffectShader *__thiscall NiD3DXEffectFile::GetD3DShader(NiD3DXEffectFile *this, NiDX9Renderer *pkRenderer, const char *pcName, unsigned int uiImplementation);
bool __thiscall NiD3DXEffectFile::ParseEffect(NiD3DXEffectFile *this, IDirect3DDevice9 *pkD3DDevice);
void __thiscall NiTMap<unsigned_long_NiPointer<NiActorManager>>::DeleteItem(NiTMap<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *this, NiTMapItem<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *pkItem);
void __thiscall NiD3DXEffectFile::NiD3DXEffectFile(NiD3DXEffectFile *this);
void __thiscall NiD3DXEffectFile::_NiD3DXEffectFile(NiD3DXEffectFile *this);
bool __thiscall NiD3DXEffectFile::Initialize(NiD3DXEffectFile *this, ID3DXBaseEffect *pkD3DXEffect, IDirect3DDevice9 *pkD3DDevice);
void *__cdecl NiD3DXEffectLoader::CreateEffectCompilerFromFile(const char *pcShaderPath, unsigned int uiCreationFlags, char **pcError);
bool __thiscall NSFLoader::ProcessNSFFile(NiD3DXEffectLoader *this, const char *pcFilename, const char *pcExt, NiTPointerList<char *> *pkFileList);
bool __thiscall NiD3DXEffectLoader::LoadAllD3DXEffectFiles(NiD3DXEffectLoader *this, NiD3DXEffectShaderLibrary *pkLibrary);
void *__cdecl NiD3DXEffectLoader::CreateEffectFromFile(void *pvD3DDevice, const char *pcShaderPath, unsigned int uiCreationFlags, char **pcError);
NiD3DXEffectLoader *__cdecl NiD3DXEffectLoader::Create();
void __cdecl NiD3DXEffectLoader::Destroy();
unsigned int __thiscall NiD3DXEffectLoader::FindAllD3DXEffectFilesInDirectory(NiD3DXEffectLoader *this, const char *pcDirectory, const char *pcExt, bool bRecurseDirectories, NiTPointerList<char *> *pkFileList);
bool __thiscall NiD3DXEffectLoader::LoadAllD3DXEffectFiles(NiD3DXEffectLoader *this, NiD3DXEffectShaderLibrary *pkLibrary, const char *pcDirectory, bool bRecurseSubDirs);
void __thiscall NiD3DXEffectParameter::NiD3DXEffectParameter(NiD3DXEffectParameter *this);
bool __thiscall NiD3DXEffectParameter::Initialize(NiD3DXEffectParameter *this, NiD3DXEffectParameterDesc *pkParamDesc, NiD3DXEffectAttributeTable *pkAttribTable);
void __thiscall NiD3DXEffectParameter::LinkHandle(NiD3DXEffectParameter *this, ID3DXEffect *pkEffect);
void __thiscall NiD3DXEffectParameter::DestroyRendererData(NiD3DXEffectParameter *this);
void __cdecl NiD3DXEffectParameter::ReleaseBoneArray();
NiColor *__thiscall NiColor::operator_(NiColor *this, NiColor *result, float fScalar);
void __thiscall NiD3DXEffectParameter::_NiD3DXEffectParameter(NiD3DXEffectParameter *this);
unsigned int __thiscall NiD3DXEffectParameter::FillObjectConstantValue(NiD3DXEffectParameter *this, ID3DXEffect *pkD3DXEffect, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
void __thiscall NiD3DXEffectParameter::Construct2DTexture(NiD3DXEffectParameter *this);
void __thiscall NiD3DXEffectParameter::Construct3DTexture(NiD3DXEffectParameter *this);
void __thiscall NiD3DXEffectParameter::ConstructCubeTexture(NiD3DXEffectParameter *this);
bool __thiscall NiD3DXEffectParameter::FillPredefinedConstantValue(NiD3DXEffectParameter *this, ID3DXEffect *pkEffect, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
int __stdcall loc_8985EA(int pkEffect, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_898621(int pkEffect, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_898656(int pkEffect, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_89868B(int pkEffect, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
IDirect3DBaseTexture9 *__thiscall NiD3DXEffectParameter::GetNiTexture(NiD3DXEffectParameter *this, NiTexturingProperty *pkTexProp, unsigned int uiTextureFlags);
unsigned int __thiscall NiD3DXEffectParameter::SetParameter(NiD3DXEffectParameter *this, ID3DXEffect *pkEffect, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
NiD3DXEffectShader *__thiscall NiD3DXEffectTechniqueSet::GetBestD3DShader(NiD3DXEffectTechniqueSet *this, NiDX9Renderer *pkRenderer);
void __thiscall NiD3DXEffectTechniqueSet::DestroyRendererData(NiD3DXEffectTechniqueSet *this);
NiShaderDesc *__thiscall NiD3DXEffectTechniqueSet::GetShaderDesc(NiD3DXEffectTechniqueSet *this, NiD3DXEffectAttributeTable *pkAttribTable);
NiD3DXEffectShader *__thiscall NiD3DXEffectTechniqueSet::GetD3DShader(NiD3DXEffectTechniqueSet *this, NiDX9Renderer *pkRenderer, unsigned int uiImplementation);
void __thiscall NiTArray<NiPointer<NiD3DXEffectTechnique>>::_NiTArray<NiPointer<NiD3DXEffectTechnique>>(NiTArray<NiPointer<NiD3DXEffectTechnique> > *this);
void *__thiscall NiTArray<NiPointer<NiD3DXEffectTechnique>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiD3DXEffectTechnique> > *this, unsigned int);
void __thiscall NiD3DXEffectTechniqueSet::NiD3DXEffectTechniqueSet(NiD3DXEffectTechniqueSet *this);
void __thiscall NiD3DXEffectTechniqueSet::_NiD3DXEffectTechniqueSet(NiD3DXEffectTechniqueSet *this);
void *__thiscall NiD3DXEffectTechniqueSet::_vector_deleting_destructor_(NiD3DXEffectTechniqueSet *this, unsigned int);
void __thiscall NiD3DXEffectTechniqueSet::AddImplementation(NiD3DXEffectTechniqueSet *this, NiD3DXEffectTechnique *pkTechnique);
void __thiscall NiD3DXEffectTechnique::Initialize(NiD3DXEffectTechnique *this, NiD3DXEffectTechniqueDesc *pkTechDesc);
bool __thiscall NiD3DXEffectTechnique::GetVSPresentAllPasses(NiD3DXEffectTechnique *this);
bool __thiscall NiD3DXEffectTechnique::GetVSPresentAnyPass(NiD3DXEffectTechnique *this);
bool __thiscall NiD3DXEffectTechnique::GetPSPresentAllPasses(NiD3DXEffectTechnique *this);
bool __thiscall NiD3DXEffectTechnique::GetPSPresentAnyPass(NiD3DXEffectTechnique *this);
bool __thiscall NiD3DXEffectTechnique::VertexShaderPresent(NiD3DXEffectTechnique *this, unsigned int uiPass);
void __thiscall NiD3DXEffectTechnique::LinkHandle(NiD3DXEffectTechnique *this, ID3DXEffect *pkEffect);
void __thiscall NiD3DXEffectTechnique::DestroyRendererData(NiD3DXEffectTechnique *this);
NiD3DXEffectParameter *__thiscall NiD3DXEffectTechnique::GetNextParameter(NiD3DXEffectTechnique *this);
void __thiscall NiD3DXEffectTechnique::_NiD3DXEffectTechnique(NiD3DXEffectTechnique *this);
NiD3DXEffectShader *__thiscall NiD3DXEffectTechnique::GetD3DShader(NiD3DXEffectTechnique *this, NiDX9Renderer *pkRenderer);
void __thiscall NiD3DXEffectTechnique::AddParameter(NiD3DXEffectTechnique *this, NiD3DXEffectParameter *pkParam);
NiD3DXEffectParameter *__thiscall NiD3DXEffectTechnique::GetFirstParameter(NiD3DXEffectTechnique *this);
void __thiscall NiD3DXEffectTechnique::NiD3DXEffectTechnique(NiD3DXEffectTechnique *this);
void *__thiscall NiD3DXEffectTechnique::_vector_deleting_destructor_(NiD3DXEffectTechnique *this, unsigned int);
bool __cdecl NiD3DXEffectParser::GetParametersAndTechniques(void *pkEffect, unsigned int *uiNumParameters, unsigned int *uiNumTechniques);
bool __cdecl NiD3DXEffectParser::IsParameterUsed(void *pvD3DXEffect, const char *pcParamName, const char *pcTechName);
int __cdecl NiD3DXEffectParser::ResetIndices();
void __cdecl NiD3DXEffectParser::ParseMatrixAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterMatrixDesc *pkDesc);
void __cdecl NiD3DXEffectParser::ParseArrayAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterArrayDesc *pkDesc);
void __cdecl NiD3DXEffectParser::ParseFloatAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterFloatDesc *pkDesc);
void __cdecl NiD3DXEffectParser::ParseBooleanAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterBooleanDesc *pkDesc);
void __cdecl NiD3DXEffectParser::ParseIntegerAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterIntegerDesc *pkDesc);
void __cdecl NiD3DXEffectParser::ParsePredefinedAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterPredefinedDesc *pkDesc);
void __cdecl NiD3DXEffectParser::ParseTechniqueAnnotations(void *pvD3DXEffect, void *pvTechDesc, void *pvTechHandle, NiD3DXEffectTechniqueDesc *pkDesc);
const char *__cdecl NiD3DXEffectParser::LookupObjectAnnotation(void *pvD3DXEffect, void *pvParamHandle, void *pvParamDesc, const char *pcAnnotation);
unsigned int __cdecl NiD3DXEffectParser::DetermineObjectType(const char *pcObjectValue, unsigned int *uiObjectIndex, bool bFoundObjectIndex);
bool __cdecl NiD3DXEffectParser::VerifyAndAdjustMapping(void *pvD3DXEffect, void *pvParamHandle, void *pvParamDesc, unsigned int uiObjectType, unsigned int *uiMapping);
NiD3DXEffectTechniqueDesc *__cdecl NiD3DXEffectParser::GetTechniqueDesc(void *pvD3DXEffect, void *pvTechHandle);
void __cdecl NiD3DXEffectParser::ParseVectorAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterVectorDesc *pkDesc);
void __cdecl NiD3DXEffectParser::ParseTextureAnnotations(void *pvD3DXEffect, void *pvParamDesc, void *pvParamHandle, NiD3DXEffectParameterTextureDesc *pkDesc);
NiD3DXEffectParameterDesc *__cdecl NiD3DXEffectParser::QueryPredefined(const char *pcSemantic, bool bColumnMatrix, unsigned int uiArrayElements);
NiD3DXEffectParameterDesc *__cdecl NiD3DXEffectParser::QueryObject(void *pvD3DXEffect, void *pvParamHandle, void *pvParamDesc, const char *pcSemantic);
NiD3DXEffectTechniqueDesc *__cdecl NiD3DXEffectParser::GetTechnique(void *pkEffect, unsigned int uiIndex);
NiD3DXEffectParameterDesc *__cdecl NiD3DXEffectParser::GetParameterDesc(void *pvD3DXEffect, void *pvParamHandle);
NiD3DXEffectParameterDesc *__cdecl NiD3DXEffectParser::GetParameter(void *pkEffect, unsigned int uiIndex);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiShaderAttributeDesc__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiShaderAttributeDesc *> *this, unsigned int);
NiShaderAttributeDesc *__thiscall NiD3DXEffectAttributeTable::GetAttributeByName(NiD3DXEffectAttributeTable *this, const char *pcName);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiShaderAttributeDesc__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiShaderAttributeDesc__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiShaderAttributeDesc *> *this);
void *__thiscall NiTPointerList<NiShaderAttributeDesc__>::_scalar_deleting_destructor_(NiTPointerList<NiShaderAttributeDesc *> *this, unsigned int);
void __thiscall NiD3DXEffectAttributeTable::_NiD3DXEffectAttributeTable(NiD3DXEffectAttributeTable *this);
bool __thiscall NSBAttributeTable::AddAttribDesc(NiD3DXEffectAttributeTable *this, NiShaderAttributeDesc *pkDesc);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Bool(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, bool bInitValue);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_UnsignedInt(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, unsigned int uiInitValue, unsigned int uiLow, unsigned int uiHigh);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Float(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float fInitValue, float fLow, float fHigh);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Point2(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Point3(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Point4(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Matrix3(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float *pfInitValue);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Matrix4(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float *pfInitValue);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Color(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_ColorA(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Texture(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, unsigned int uiSlot, const char *pcDefault);
bool __thiscall NiD3DXEffectAttributeTable::AddAttribDesc_Array(NiD3DXEffectAttributeTable *this, const char *pcName, bool bHidden, void *pInitValue, unsigned int uiNumElements, unsigned int uiElementSize, NiShaderAttributeDesc::AttributeType eSubType, void *pLow, void *pHigh);
void __thiscall NiD3DXEffectAttributeTable::NiD3DXEffectAttributeTable(NiD3DXEffectAttributeTable *this);
NiD3DXEffectParameterMatrixDesc *__cdecl NiD3DXEffectParameterDesc::GetMatrixDesc();
NiD3DXEffectParameterVectorDesc *__cdecl NiD3DXEffectParameterDesc::GetVectorDesc();
NiD3DXEffectParameterFloatDesc *__cdecl NiD3DXEffectParameterDesc::GetFloatDesc();
NiD3DXEffectParameterBooleanDesc *__cdecl NiD3DXEffectParameterDesc::GetBooleanDesc();
NiD3DXEffectParameterIntegerDesc *__cdecl NiD3DXEffectParameterDesc::GetIntegerDesc();
NiD3DXEffectParameterTextureDesc *__cdecl NiD3DXEffectParameterDesc::GetTextureDesc();
NiD3DXEffectParameterPredefinedDesc *__cdecl NiD3DXEffectParameterDesc::GetPredefinedDesc();
NiD3DXEffectParameterObjectDesc *__cdecl NiD3DXEffectParameterDesc::GetObjectDesc();
NiD3DXEffectParameterArrayDesc *__cdecl NiD3DXEffectParameterDesc::GetArrayDesc();
NiD3DXEffectParameterVectorDesc::VectorType __thiscall NiD3DXEffectParameterVectorDesc::GetVectorType(NiD3DXEffectParameterVectorDesc *this);
NiD3DXEffectParameterArrayDesc::ArrayType __thiscall NiD3DXEffectParameterArrayDesc::GetArrayType(NiD3DXEffectParameterArrayDesc *this);
unsigned int __thiscall NiD3DXEffectParameterArrayDesc::GetElementSize(NiD3DXEffectParameterArrayDesc *this);
bool __cdecl NiD3DXEffectParameterArrayDesc::CompactFromVector4Array(D3DXVECTOR4 *pfSrcArray, float *pfDestArray, unsigned int uiRows, unsigned int uiColumns, unsigned int uiNumElements);
bool __cdecl NiD3DXEffectParameterArrayDesc::ExpandToVector4Array(const float *pfSrcArray, D3DXVECTOR4 *pfDestArray, unsigned int uiRows, unsigned int uiColumns, unsigned int uiNumElements);
bool __thiscall NiD3DXEffectShader::Initialize(NiD3DXEffectShader *this, NiDX9Renderer *pkRenderer);
unsigned int __thiscall NiD3DXEffectShader::PreProcessPipeline(NiD3DXEffectShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiD3DXEffectShader::PostRender(NiD3DXEffectShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiBinaryShader::PostProcessPipeline(NiD3DXEffectShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiD3DXEffectShader::FirstPass(NiD3DXEffectShader *this);
unsigned int __thiscall NiD3DXEffectShader::NextPass(NiD3DXEffectShader *this);
bool __thiscall NiD3DXEffectShader::GetVSPresentAllPasses(NiD3DXEffectShader *this);
bool __thiscall NiD3DXEffectShader::GetVSPresentAnyPass(NiD3DXEffectShader *this);
bool __thiscall NiD3DXEffectShader::GetPSPresentAllPasses(NiD3DXEffectShader *this);
bool __thiscall NiD3DXEffectShader::GetPSPresentAnyPass(NiD3DXEffectShader *this);
NiRTTI *__thiscall NiD3DXEffectShader::GetRTTI(NiD3DXEffectShader *this);
void *__thiscall NiD3DXEffectShader::_vector_deleting_destructor_(NiD3DXEffectShader *this, unsigned int);
unsigned int __thiscall NiD3DXEffectShader::SetupTransformations(NiD3DXEffectShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void __thiscall NiD3DXEffectShader::HandleLostDevice(NiD3DXEffectShader *this);
void __thiscall NiD3DXEffectShader::HandleResetDevice(NiD3DXEffectShader *this);
void __thiscall NiD3DXEffectShader::DestroyRendererData(NiD3DXEffectShader *this);
void __thiscall NiD3DXEffectShader::CreateShaderDeclaration(NiD3DXEffectShader *this);
void __thiscall NiD3DTimeSyncController::NiD3DTimeSyncController(NiD3DTimeSyncController *this);
NiRTTI *__thiscall NiD3DTimeSyncController::GetRTTI(NiD3DTimeSyncController *this);
void *__thiscall NiD3DTimeSyncController::_scalar_deleting_destructor_(NiD3DTimeSyncController *this, unsigned int);
void __thiscall NiD3DXEffectShader::SetShaderDecl(NiD3DShader *this, NiD3DShaderDeclaration *pkShaderDecl);
void __thiscall NiTArray<NiPointer<NiD3DPass>>::RemoveAll(NiTArray<NiPointer<NiD3DPass> > *this);
unsigned int __thiscall NiD3DXEffectShader::SetupShaderPrograms(NiD3DXEffectShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
bool __thiscall NiD3DXEffectShader::SetupGeometry(NiD3DXEffectShader *this, NiGeometry *pkGeometry);
void __thiscall NiD3DXEffectShader::RecreateRendererData(NiD3DXEffectShader *this);
void __thiscall NiTArray<NiPointer<NiD3DPass>>::_NiTArray<NiPointer<NiD3DPass>>(NiTArray<NiPointer<NiD3DPass> > *this);
void *__thiscall NiTArray<NiPointer<NiD3DPass>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiD3DPass> > *this, unsigned int);
void __thiscall NiD3DShader::NiD3DShader(NiD3DShader *this);
NiRTTI *__thiscall NiD3DShader::GetRTTI(NiD3DShader *this);
void *__thiscall NiD3DShader::_vector_deleting_destructor_(NiD3DShader *this, unsigned int);
void __thiscall NiD3DXEffectShader::NiD3DXEffectShader(NiD3DXEffectShader *this);
unsigned int __stdcall NiD3DXEffectStateManager::AddRef(NiD3DXEffectStateManager *this);
unsigned int __stdcall NiD3DXEffectStateManager::Release(NiD3DXEffectStateManager *this);
HRESULT __stdcall NiD3DXEffectStateManager::SetTransform(NiD3DXEffectStateManager *this, _D3DTRANSFORMSTATETYPE eState, _D3DMATRIX *pkMatrix);
HRESULT __stdcall NiD3DXEffectStateManager::SetMaterial(NiD3DXEffectStateManager *this, _D3DMATERIAL9 *pkMaterial);
HRESULT __stdcall NiD3DXEffectStateManager::SetLight(NiD3DXEffectStateManager *this, unsigned int uiIndex, _D3DLIGHT9 *pkLight);
HRESULT __stdcall NiD3DXEffectStateManager::LightEnable(NiD3DXEffectStateManager *this, unsigned int uiIndex, int bEnable);
HRESULT __stdcall NiD3DXEffectStateManager::SetRenderState(NiD3DXEffectStateManager *this, _D3DRENDERSTATETYPE eState, unsigned int uiValue);
HRESULT __stdcall NiD3DXEffectStateManager::SetTexture(NiD3DXEffectStateManager *this, unsigned int uiStage, IDirect3DBaseTexture9 *pkTexture);
HRESULT __stdcall NiD3DXEffectStateManager::SetTextureStageState(NiD3DXEffectStateManager *this, unsigned int uiStage, _D3DTEXTURESTAGESTATETYPE eType, unsigned int uiValue);
HRESULT __stdcall NiD3DXEffectStateManager::SetNPatchMode(NiD3DXEffectStateManager *this, float fNumSegments);
HRESULT __stdcall NiD3DXEffectStateManager::SetFVF(NiD3DXEffectStateManager *this, unsigned int uiFVF);
HRESULT __stdcall NiD3DXEffectStateManager::SetVertexShader(NiD3DXEffectStateManager *this, IDirect3DVertexShader9 *pkShader);
HRESULT __stdcall NiD3DXEffectStateManager::SetPixelShader(NiD3DXEffectStateManager *this, IDirect3DPixelShader9 *pkShader);
void __thiscall NiD3DXEffectStateManager::ResetLastTextureStage(NiD3DXEffectStateManager *this);
void *__thiscall NiD3DXEffectStateManager::_vector_deleting_destructor_(NiD3DXEffectStateManager *this, unsigned int);
HRESULT __stdcall NiD3DXEffectStateManager::QueryInterface(NiD3DXEffectStateManager *this, _GUID *iid, void **ppv);
HRESULT __stdcall NiD3DXEffectStateManager::SetSamplerState(NiD3DXEffectStateManager *this, unsigned int uiSampler, _D3DSAMPLERSTATETYPE eType, unsigned int uiValue);
void __thiscall NiD3DXEffectStateManager::NiD3DXEffectStateManager(NiD3DXEffectStateManager *this, NiD3DRenderState *pkRenderStateManager, IDirect3DDevice9 *pkDevice);
NiD3DXEffectStateManager *__cdecl NiD3DXEffectStateManager::GetInstance(NiDX9Renderer *pkRenderer);
HRESULT __stdcall NiD3DXEffectStateManager::SetVertexShaderConstantF(NiD3DXEffectStateManager *this, unsigned int uiRegisterIndex, const float *pfConstantData, unsigned int uiRegisterCount);
HRESULT __stdcall NiD3DXEffectStateManager::SetVertexShaderConstantI(NiD3DXEffectStateManager *this, unsigned int uiRegisterIndex, const int *piConstantData, unsigned int uiRegisterCount);
HRESULT __stdcall NiD3DXEffectStateManager::SetVertexShaderConstantB(NiD3DXEffectStateManager *this, unsigned int uiRegisterIndex, const int *pbConstantData, unsigned int uiRegisterCount);
HRESULT __stdcall NiD3DXEffectStateManager::SetPixelShaderConstantF(NiD3DXEffectStateManager *this, unsigned int uiRegisterIndex, const float *pfConstantData, unsigned int uiRegisterCount);
HRESULT __stdcall NiD3DXEffectStateManager::SetPixelShaderConstantI(NiD3DXEffectStateManager *this, unsigned int uiRegisterIndex, const int *piConstantData, unsigned int uiRegisterCount);
HRESULT __stdcall NiD3DXEffectStateManager::SetPixelShaderConstantB(NiD3DXEffectStateManager *this, unsigned int uiRegisterIndex, const int *pbConstantData, unsigned int uiRegisterCount);
NiD3DXEffectTechniqueDesc *__cdecl NiD3DXEffectTechniqueDesc::GetDesc();
void __cdecl NiD3DXEffectShaderSDM::Init(); // idb
void __cdecl NiD3DXEffectShaderSDM::Shutdown(); // idb
void __thiscall NiD3DXEffectShaderSDM::NiD3DXEffectShaderSDM(NiD3DXEffectShaderSDM *this);
void __thiscall NsTextCodeV0_3::Init(NsTextCodeV0_3 *this);
std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Min(std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Pnode);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *this);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *__thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::erase(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > _Where);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *__thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::find(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *result, const char *_Keyval);
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *__thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::erase(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > _Last);
int __thiscall NsTextCodeV0_3::OperaterTest(NsTextCodeV0_3 *this, int nInStart, int *pOutEnd, char *originstr, char *inChar);
int __thiscall NsTextCodeV0_3::CharTest(NsTextCodeV0_3 *this, char *inChar);
int __thiscall NsTextCodeV0_3::GetWord(NsTextCodeV0_3 *this, int nInStart, int *pOutEnd, char *originstr, char *outstr);
bool __thiscall NsTextCodeV0_3::GetWord(NsTextCodeV0_3 *this, char *outstr_);
void __thiscall std::set<char_std::less<char>_std::allocator<char>>::_set<char_std::less<char>_std::allocator<char>>(std::set<char,std::less<char>,std::allocator<char> > *this);
void __thiscall NsTextCodeV0_3::_NsTextCodeV0_3(NsTextCodeV0_3 *this);
void __thiscall NsTextCodeV0_3::NsTextCodeV0_3(NsTextCodeV0_3 *this);
void *__thiscall NsTextCodeV0_3::_vector_deleting_destructor_(NsTextCodeV0_3 *this, unsigned int);
const char *__cdecl NsUtil::FindSubString(const char *pcStr, const char *pcKey);
const char *__cdecl NsUtil::MatchTag(NiObjectNET *pkObj, const char *pcStr);
NiAVObject *__cdecl _NpNs_GetObjectNameRecUp(NiAVObject *pkObject, const char *striFilename, const char *szStopFlag);
float __cdecl NpNs_GetAngle(NiPoint3 _pos3DirOne, NiPoint3 _pos3DirTwo, NiPoint3 _pos3UpDir, unsigned int _nOutType);
void __cdecl NpNs_RotateModelZToVector(NiPoint3 *vec, NiMatrix3 *rot);
void __cdecl NpNs_RotateModelToDirVector(NiPoint3 *_vecDir, NiMatrix3 *rot);
void __thiscall NpNs_SmoothRotateControler::NpNs_SmoothRotateControler(NpNs_SmoothRotateControler *this);
void __thiscall NpNs_SmoothRotateControler::Init(NpNs_SmoothRotateControler *this, NiPoint3 *_pos3TargetDir, NiPoint3 *_pos3Up);
void __thiscall NpNs_SmoothRotateControler::SetDirection(NpNs_SmoothRotateControler *this, NiPoint3 *_pos3TargetDir, NiPoint3 *_pos3Up);
void __thiscall NpNs_SmoothRotateControler::SetTargetDirection(NpNs_SmoothRotateControler *this, const float _fTime, NiPoint3 *_pos3StartDir, NiPoint3 *_pos3TargetDir, NiPoint3 *_pos3Up);
void __thiscall NpNs_SmoothRotateControler::GetDirection(NpNs_SmoothRotateControler *this, NiPoint3 *pos3Dir_);
void __thiscall NpNs_SmoothRotateControler::GetTargetDirection(NpNs_SmoothRotateControler *this, NiPoint3 *pos3Dir_);
NiPixelFormat *__thiscall NpNs_SmoothRotateControler::GetTargetDirection(NiDX9TextureData *this);
bool __thiscall NpNs_SmoothRotateControler::Update(NpNs_SmoothRotateControler *this, float _fTime);
void __thiscall NpNs_MoveToTarget::NpNs_MoveToTarget(NpNs_MoveToTarget *this);
const void __thiscall NpNs_MoveToTarget::SetCalcuCurrentPos(NpNs_MoveToTarget *this, NiPoint3 *_pos3);
void __thiscall NpNs_MoveToTarget::_NpNs_MoveToTarget(NpNs_MoveToTarget *this);
void __thiscall NpNs_MoveToTarget::StartMove(NpNs_MoveToTarget *this, float _fTime, NiPoint3 *_pos3Target);
void __thiscall NpNs_MoveToTarget::StartMove(NpNs_MoveToTarget *this, NiPoint3 *_pos3Target);
void __thiscall NpNs_MoveToTarget::StartMove(NpNs_MoveToTarget *this, float _fTime, NiPoint3 *_pos3Start, NiPoint3 *_pos3Target);
void __thiscall NpNs_MoveToTarget::StartMove(NpNs_MoveToTarget *this, NiPoint3 *_pos3Start, NiPoint3 *_pos3Target);
void __thiscall NpNs_MoveToTarget::Stop(NpNs_MoveToTarget *this);
bool __thiscall NpNs_MoveToTarget::Update(NpNs_MoveToTarget *this, float _fTime);
NiAVObject *__cdecl NpNs_GetObjectNameRecUp(NiAVObject *pkObject, const char *striFilename, const char *szStopFlag);
void __thiscall NpNs_SmoothRotateControler::SetTargetDirection(NpNs_SmoothRotateControler *this, NiPoint3 *_pos3TargetDir);
void __thiscall NpNs_SmoothRotateControler::SetTargetDirection(NpNs_SmoothRotateControler *this, const float _fTime, NiPoint3 *_pos3TargetDir);
void *__thiscall NpNs_MoveToTarget::_vector_deleting_destructor_(NpNs_MoveToTarget *this, unsigned int);
bool __thiscall Ns_TourScene::TourScene(Ns_TourScene *this, NiNode *pNiNode, NiRTTI *_pRtti, void *_data_);
void __thiscall NiTArray<NiPointer<NiNode>>::SetSize(NiTArray<NiPointer<NiNode> > *this, unsigned int uiMaxSize);
void __thiscall FindCullUpdateNode::CullUpdateAreaInfo::AddCullNode(FindCullUpdateNode::CullUpdateAreaInfo *this, NiNode *_pCullNode);
Ns_TourScene::TS_RESULT __thiscall FindCullUpdateNode::ProcessData(FindCullUpdateNode *this, NiAVObject *_pkObject, void *_pData);
const char *__thiscall NsPathMaker::MakeFullPath(NsPathMaker *this, const char *_szPath);
NiNode *__cdecl Ns_LoadNifFile(const char *pcInFileName, NiTexturePalette *pkTexPalatte);
void __thiscall CNSTimer_Interval::CNSTimer_Interval(CNSTimer_Interval *this);
unsigned int __thiscall CNSTimer_Interval::IsRun_GetCount(CNSTimer_Interval *this, float _fAccumTime);
bool __thiscall CNSTimer_Interval::ReSet(CNSTimer_Interval *this, float _fTime);
void __thiscall CNSTimer_MarkCheck::CNSTimer_MarkCheck(CNSTimer_MarkCheck *this);
CNSTimer_MarkCheck::TIMERSTATE __thiscall CNSTimer_MarkCheck::ReSet(CNSTimer_MarkCheck *this, float _fCurrentTime, CNSTimer_MarkCheck::TIMERSTATE _TimeStaeKillCondition);
void __thiscall CNSTimer_MarkCheck::KillTimer(CNSTimer_MarkCheck *this);
CNSTimer_MarkCheck::TIMERSTATE __thiscall CNSTimer_MarkCheck::Update(CNSTimer_MarkCheck *this, float _fCurrentTime);
void __thiscall NsMakeQuadScene::SetData(NsMakeQuadScene *this, int _nLevelCount, int _nBlockCount, float _fLength, NiNode *_pNode);
int __thiscall NsMakeQuadScene::GetNodeLevel(NsMakeQuadScene *this, int _nLeft, int _nRight, int _nTop, int _nBottom, bool _bFilter);
Ns_TourScene::TS_RESULT __thiscall NsMakeQuadScene::Optimizer::ProcessData(NsMakeQuadScene::Optimizer *this, NiAVObject *_pkObject, void *_pData);
NiNode *__thiscall NsMakeQuadScene::GetInsertNode(NsMakeQuadScene *this, int _nLevel, int _nPosX, int _nPosY);
NiAVObject *__thiscall NsMakeQuadScene::AddObject(NsMakeQuadScene *this, NiAVObject *_pkObject);
void __thiscall NsMakeQuadScene::Optimize(NsMakeQuadScene *this);
bool __cdecl NpModelData_NiTexturingProperty::Terminate();
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexturingProperty>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexturingProperty>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexturingProperty> > *this);
void __thiscall NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>::_NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>(NiTPointerMap<char const *,NiPointer<NiTexturingProperty> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiTexturingProperty> >,NiPointer<NiTexturingProperty> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::SetValue(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiTexturingProperty> >,NiPointer<NiTexturingProperty> > *this, NiTMapItem<char const *,NiPointer<NiTexturingProperty> > *pkItem, const char *pcKey, NiPointer<NiTexturingProperty> val);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexturingProperty>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexturingProperty> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiTexturingProperty> > *this, unsigned int);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_vector_deleting_destructor_(NiTStringPointerMap<NiPointer<NiTexturingProperty> > *this, unsigned int);
bool __cdecl NpKMI_Tool::Terminate();
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NpSIF_Tool>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NpSIF_Tool>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NpSIF_Tool> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NpSIF_Tool>>_NiPointer<NpSIF_Tool>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NpSIF_Tool>>_NiPointer<NpSIF_Tool>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NpSIF_Tool> >,NiPointer<NpSIF_Tool> > *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NpSIF_Tool>>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NpSIF_Tool> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NpSIF_Tool>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NpSIF_Tool> > *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiPointer<NpSIF_Tool>>::_scalar_deleting_destructor_(NiTStringPointerMap<NiPointer<NpSIF_Tool> > *this, unsigned int);
bool __cdecl NpModelData_KFM::Terminate();
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiKFMTool>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiKFMTool>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiKFMTool> > *this);
void __thiscall NiTPointerMap<char_const___NiPointer<NiKFMTool>>::_NiTPointerMap<char_const___NiPointer<NiKFMTool>>(NiTPointerMap<char const *,NiPointer<NiKFMTool> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiKFMTool>>_NiPointer<NiKFMTool>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiKFMTool>>_NiPointer<NiKFMTool>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiKFMTool> >,NiPointer<NiKFMTool> > *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiKFMTool>>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiKFMTool> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiKFMTool>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiKFMTool> > *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiPointer<NiKFMTool>>::_scalar_deleting_destructor_(NiTStringPointerMap<NiPointer<NiKFMTool> > *this, unsigned int);
bool __cdecl NpModelData_ActorM::Terminate();
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiActorManager>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiActorManager>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiActorManager> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiActorManager>>_NiPointer<NiActorManager>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiActorManager>>_NiPointer<NiActorManager>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiActorManager> >,NiPointer<NiActorManager> > *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NpSIF_Tool>>_NiPointer<NpSIF_Tool>>::SetValue(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiActorManager> >,NiPointer<NiActorManager> > *this, NiTMapItem<char const *,NiPointer<NiActorManager> > *pkItem, const char *pcKey, NiPointer<NiActorManager> val);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiActorManager>>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiActorManager> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiActorManager>>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiActorManager> > *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiPointer<NiActorManager>>::_scalar_deleting_destructor_(NiTStringPointerMap<NiPointer<NiActorManager> > *this, unsigned int);
bool __cdecl INp_File::SearchNode(INsFile *_pkNsFile, bool (__cdecl *CallFunc)(INsFile *, void *, int), void *pData);
NiRTTI *__thiscall NPTR_ISShader_v2::GetRTTI(NPTR_ISShader_v2 *this);
void *__thiscall NPTR_ISShader_v2::_scalar_deleting_destructor_(NPTR_ISShader_v2 *this, unsigned int);
void __thiscall NPTR_ISShader_v2::CopyMembers(NPTR_ISShader_v2 *this, NPTR_ISShader_v2 *pDest, NiCloningProcess *kCloning);
NiObject *__cdecl NPTR_ISShader_v2::CreateObject();
void __thiscall NPTR_ISShader_v2::LoadBinary(NPTR_ISShader_v2 *this, NiStream *stream);
void __thiscall NPTR_ISShader_v2::SaveBinary(NPTR_ISShader_v2 *this, NiStream *stream);
bool __thiscall NsPgToonRegister_v2::IsOK(NsPgToonRegister_v2 *this, NiGeometry *_pInNode);
void __thiscall NsPgToonRegister_v2::SetExtraData(NsPgToonRegister_v2 *this, NsPgToonExtraData *kiExtraData);
NiObject *__thiscall NPTR_ISShader_v2::CreateClone(NPTR_ISShader_v2 *this, NiCloningProcess *kCloning);
void __thiscall NsPgToonRegister_v2::SetEntry(NsPgToonRegister_v2 *this, NiRenderer *pInRenderer);
void __thiscall NPTR_ISShader_v2::GetViewerStrings(NPTR_ISShader_v2 *this, NiTArray<char *> *pStrings);
void __thiscall NsPgToonRegister_v2::NsPgToonRegister_v2(NsPgToonRegister_v2 *this);
NiRTTI *__thiscall NsPgToonRegister_v2::GetRTTI(NsPgToonRegister_v2 *this);
void __thiscall NsPgToonRegister_v2::_NsPgToonRegister_v2(NsPgToonRegister_v2 *this);
void *__thiscall NsPgToonRegister_v2::_scalar_deleting_destructor_(NsPgToonRegister_v2 *this, unsigned int);
void __thiscall INpShader::INpShader(INpShader *this);
NiRTTI *__thiscall INpShader::GetRTTI(INpShader *this);
void __thiscall INpShader::_INpShader(INpShader *this);
bool __thiscall INpShader::Init(INpShader *this, NiRenderer *pInRenderer, unsigned __int16 usBoneCount);
bool __thiscall INpShader::Setup(INpShader *this, NiGeometry *pInNode, NiRenderer *pInRenderer, unsigned int uiFlags, unsigned int uiBonesPerPartition, unsigned int uiBonesPerVertex);
void __thiscall INpShader::TourScene(INpShader *this, NiNode *pNiNode, NiRenderer *pkRenderer, unsigned int uiFlags, unsigned int uiBonesPerPartition, unsigned int uiBonesPerVertex);
void *__thiscall INpShader::_vector_deleting_destructor_(INpShader *this, unsigned int);
bool __thiscall INpShader::Setuprecursive(INpShader *this, NiNode *pInNode, NiRenderer *pInRenderer, unsigned int uiBonesPerPartition, unsigned int uiBonesPerVertex);
void __thiscall NsPgToonExtraData::NsPgToonExtraData(NsPgToonExtraData *this);
NiRTTI *__thiscall NsPgToonExtraData::GetRTTI(NsPgToonExtraData *this);
void __thiscall NsPgToonExtraData::_NsPgToonExtraData(NsPgToonExtraData *this);
void __thiscall NsPgToonExtraData::CopyMembers(NsPgToonExtraData *this, NsPgToonExtraData *pDest, NiCloningProcess *kCloning);
NiObject *__cdecl NsPgToonExtraData::CreateObject();
bool __thiscall NsPgToonExtraData::IsEqual(NPTR_ISShader_v2 *this, NiObject *pObject);
void __cdecl NiBinaryStreamLoad<NiCamera__>(NiBinaryStream *is, NiCamera **pValue, unsigned int uiNumEls);
void __cdecl NiBinaryStreamSave<NiCamera__>(NiBinaryStream *os, NiCamera *const *pValue, unsigned int uiNumEls);
void *__thiscall NsPgToonExtraData::_vector_deleting_destructor_(NsPgToonExtraData *this, unsigned int);
NiObject *__thiscall NsPgToonExtraData::CreateClone(NsPgToonExtraData *this, NiCloningProcess *kCloning);
void __cdecl NiStreamLoadBinary<NiCamera__>(NiStream *kStream, NiCamera **value);
void __cdecl NiStreamSaveBinary<NiCamera__>(NiStream *kStream, NiCamera *const *value);
void __thiscall NsPgToonExtraData::LoadBinary(NsPgToonExtraData *this, NiStream *stream);
void __thiscall NsPgToonExtraData::SaveBinary(NsPgToonExtraData *this, NiStream *stream);
void __thiscall NsPgToonExtraData::GetViewerStrings(NsPgToonExtraData *this, NiTArray<char *> *pStrings);
unsigned int __thiscall NsPgCatoonShader::SetupTransformations(NsPgCatoonShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void __thiscall NiD3DPass::SetVertexShader(NiD3DPass *this, NiD3DVertexShader *pkVertexShader);
bool __thiscall NsPgCatoonShader::PresetLine(NsPgCatoonShader *this, NiD3DPass *pkPass);
bool __thiscall NsPgCatoonShader::CreateShaders(NsPgCatoonShader *this);
unsigned int __thiscall NsPgCatoonShader::SetupShaderPrograms(NsPgCatoonShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void __thiscall NsPgCatoonShader::DestroyRendererData(NsPgCatoonShader *this);
void __thiscall NsPgCatoonShader::RecreateRendererData(NsPgCatoonShader *this);
D3DXMATRIX *__thiscall std::allocator<D3DXMATRIX>::allocate(std::allocator<D3DXMATRIX> *this, unsigned int _Count);
bool __thiscall NsPgCatoonShader::CreateStagesAndPasses(NsPgCatoonShader *this);
void __cdecl std::_Cons_val<std::allocator<D3DXMATRIX>_D3DXMATRIX_D3DXMATRIX>(std::allocator<D3DXMATRIX> *_Alval, D3DXMATRIX *_Pdest, D3DXMATRIX *_Src);
D3DXMATRIX *__cdecl std::_Uninit_move<D3DXMATRIX___D3DXMATRIX___std::allocator<D3DXMATRIX>_D3DXMATRIX>(D3DXMATRIX *_First, D3DXMATRIX *_Last, D3DXMATRIX *_Dest, std::allocator<D3DXMATRIX> *_Al, D3DXMATRIX *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
bool __thiscall NsPgCatoonShader::Initialize(NsPgCatoonShader *this, NiDX9Renderer *pkRenderer);
unsigned int __thiscall NsPgCatoonShader::UpdatePipeline(NsPgCatoonShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void __cdecl std::_Uninit_def_fill_n<D3DXMATRIX___unsigned_int_D3DXMATRIX_std::allocator<D3DXMATRIX>_D3DXMATRIX>(D3DXMATRIX *_First, unsigned int _Count, D3DXMATRIX *__formal, std::allocator<D3DXMATRIX> *_Al, D3DXMATRIX *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __thiscall std::vector<D3DXMATRIX_std::allocator<D3DXMATRIX>>::reserve(std::vector<D3DXMATRIX,std::allocator<D3DXMATRIX> > *this, unsigned int _Count);
void __thiscall std::vector<D3DXMATRIX_std::allocator<D3DXMATRIX>>::_Reserve(std::vector<D3DXMATRIX,std::allocator<D3DXMATRIX> > *this, unsigned int _Count);
NiRTTI *__thiscall NsPgCatoonShader::GetRTTI(NsPgCatoonShader *this);
void __thiscall NsPgCatoonShader::NsPgCatoonShader(NsPgCatoonShader *this, const char *_szPath);
void __thiscall NsPgCatoonShader::_NsPgCatoonShader(NsPgCatoonShader *this);
bool __thiscall NsPgCatoonShader::SetupGeometry(NsPgCatoonShader *this, NiGeometry *pkGeometry);
void __thiscall std::vector<D3DXMATRIX_std::allocator<D3DXMATRIX>>::resize(std::vector<D3DXMATRIX,std::allocator<D3DXMATRIX> > *this, unsigned int _Newsize);
void *__thiscall NsPgCatoonShader::_vector_deleting_destructor_(NsPgCatoonShader *this, unsigned int);
unsigned int __thiscall NsPgCatoonShader::PreProcessPipeline(NsPgCatoonShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void __thiscall NsEffect::Start(NsEffect *this, float _fTime);
void __thiscall NsEffect::NsEffect(NsEffect *this);
void __thiscall NsEffect::_NsEffect(NsEffect *this);
void *__thiscall NsEffect::_vector_deleting_destructor_(NsEffect *this, unsigned int);
void __thiscall NsEffect::FindAndAdd(NsEffect *this, NiObjectNET *pkRoot);
void __thiscall NsEffect::SetEffectNode(NsEffect *this, NiAVObject *_pkEffectObject);
int __thiscall NsABVPicking::FindIntersection(NsABVPicking *this, NiAVObject *_pObject, NiBoxBV *kBoxBv, NiPoint3 *origin, NiPoint3 *dir, float *t, NiPoint3 *normal);
bool __thiscall NsABVPicking::FindIntersection(NsABVPicking *this, NiAVObject *_pObject, NiSphereBV *kSphereBV, NiPoint3 *kOrigin, NiPoint3 *kDir, float *t);
void __thiscall NiTArray<NsABVPicking::Record__>::_NiTArray<NsABVPicking::Record__>(NiTArray<NsABVPicking::Record *> *this);
NiVBBlock *__thiscall NiTArray<NsABVPicking::Record__>::RemoveAt(NiTArray<NiVBBlock *> *this, unsigned int uiIndex);
void *__thiscall NiTArray<NsABVPicking::Record__>::_scalar_deleting_destructor_(NiTArray<NsABVPicking::Record *> *this, unsigned int);
void __thiscall NsABVPicking::Record::Record(NsABVPicking::Record *this, NiAVObject *pObject);
void __thiscall NsABVPicking::NsABVPicking(NsABVPicking *this);
bool __thiscall NsABVPicking::FindIntersectionsSwitchNode(NsABVPicking *this, NiPoint3 *kOrigin, NiPoint3 *kDir, NiSwitchNode *pkSwitch);
void *__thiscall NsABVPicking::Record::_scalar_deleting_destructor_(NsABVPicking::Record *this, unsigned int);
unsigned int __thiscall NiTArray<void____cdecl____NiStream___NiObject___>::AddFirstEmpty(NiTArray<NiVBBlock *> *this, NiVBBlock *const *element);
void __thiscall NsABVPicking::ClearResultsArray(NsABVPicking *this);
bool __thiscall NsABVPicking::FindIntersectionsNode(NsABVPicking *this, NiPoint3 *kOrigin, NiPoint3 *kDir, NiNode *pkNode);
NsABVPicking::FindABV __thiscall NsABVPicking::FindIntersectionsABV(NsABVPicking *this, NiPoint3 *kOrigin, NiPoint3 *kDir, NiCollisionData *pkData, NiNode *pkNode);
bool __thiscall NsABVPicking::FindIntersectionsTriBasedGeom(NsABVPicking *this, NiPoint3 *kOrigin, NiPoint3 *kDir, NiTriBasedGeom *pkTBG);
void __thiscall NsABVPicking::_NsABVPicking(NsABVPicking *this);
bool __thiscall NsABVPicking::FindIntersections(NsABVPicking *this, NiPoint3 *kOrigin, NiPoint3 *kDir, NiAVObject *pkRoot);
bool __thiscall NsABVPicking::PickObjects(NsABVPicking *this, NiPoint3 *origin, NiPoint3 *dir, bool bAppend);
void __thiscall NsDecal::Terminate(NsDecal *this);
NiTriShape *__thiscall NsDecal::GetNextTriShape(NsDecal *this, unsigned int _uiVertexCnt);
NiPoint2 *__thiscall std::allocator<NiPoint2>::allocate(std::allocator<NiPoint2> *this, unsigned int _Count);
NiPoint3 *__cdecl std::_Uninit_move<NiPoint3___NiPoint3___std::allocator<NiPoint3>_NiPoint3>(NiPoint3 *_First, NiPoint3 *_Last, NiPoint3 *_Dest, std::allocator<NiPoint3> *_Al, NiPoint3 *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
NiPoint2 *__cdecl std::_Uninit_move<GameFrameWork::AskInform___GameFrameWork::AskInform___std::allocator<GameFrameWork::AskInform>_GameFrameWork::AskInform>(NiPoint2 *_First, NiPoint2 *_Last, NiPoint2 *_Dest, std::allocator<NiPoint2> *_Al, NiPoint2 *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Uninit_def_fill_n<NiPoint3___unsigned_int_NiPoint3_std::allocator<NiPoint3>_NiPoint3>(NiPoint3 *_First, unsigned int _Count, NiPoint3 *__formal, std::allocator<NiPoint3> *_Al, NiPoint3 *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Uninit_def_fill_n<NiPoint2___unsigned_int_NiPoint2_std::allocator<NiPoint2>_NiPoint2>(NiPoint2 *_First, unsigned int _Count, NiPoint2 *__formal, std::allocator<NiPoint2> *_Al, NiPoint2 *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Uninit_def_fill_n<NiColorA___unsigned_int_NiColorA_std::allocator<NiColorA>_NiColorA>(NiColorA *_First, unsigned int _Count, NiColorA *__formal, std::allocator<NiColorA> *_Al, NiColorA *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
std::_Vector_iterator<std::_Vector_val<NiColorA,std::allocator<NiColorA> > > *__thiscall std::vector<NiColorA_std::allocator<NiColorA>>::erase(std::vector<NiColorA,std::allocator<NiColorA> > *this, std::_Vector_iterator<std::_Vector_val<NiColorA,std::allocator<NiColorA> > > *result, std::_Vector_const_iterator<std::_Vector_val<NiColorA,std::allocator<NiColorA> > > _First_arg, std::_Vector_const_iterator<std::_Vector_val<NiColorA,std::allocator<NiColorA> > > _Last_arg);
void __thiscall std::vector<NiPoint2_std::allocator<NiPoint2>>::reserve(std::vector<NiPoint2,std::allocator<NiPoint2> > *this, unsigned int _Count);
void __thiscall std::vector<NiPoint2_std::allocator<NiPoint2>>::_Reserve(std::vector<NiPoint2,std::allocator<NiPoint2> > *this, unsigned int _Count);
void __thiscall std::vector<NiColorA_std::allocator<NiColorA>>::_Reserve(std::vector<NiColorA,std::allocator<NiColorA> > *this, unsigned int _Count);
void __thiscall NsDecal::NsDecal(NsDecal *this);
void __thiscall NsDecal::_NsDecal(NsDecal *this);
void __thiscall std::vector<NiPoint3_std::allocator<NiPoint3>>::resize(std::vector<NiPoint3,std::allocator<NiPoint3> > *this, unsigned int _Newsize);
void __thiscall std::vector<NiPoint2_std::allocator<NiPoint2>>::resize(std::vector<NiPoint2,std::allocator<NiPoint2> > *this, unsigned int _Newsize);
void __thiscall std::vector<NiPoint2_std::allocator<NiPoint2>>::push_back(std::vector<NiPoint2,std::allocator<NiPoint2> > *this, NiPoint2 *_Val);
void __thiscall std::vector<NiColorA_std::allocator<NiColorA>>::resize(std::vector<NiColorA,std::allocator<NiColorA> > *this, unsigned int _Newsize);
int __cdecl NsDecal::CollisionCallDecal_Vector(NiCollisionGroup::Intersect *kIntersect);
void __thiscall NsDecal::Init(NsDecal *this);
bool __thiscall NsDecal::Update(NsDecal *this, float _fTime, NiNode *_pkDecalNode, float _fPosX, float _fPosY);
bool __thiscall NsDecal::Update(NsDecal *this, float _fTime, NiNode *_pkDecalNode, NiPoint3 *_pos3Position);
void __thiscall NsFadeNode::UpdateUseScreenRate(NsFadeNode *this);
void __thiscall NsFadeNode::OnVisible(NsFadeNode *this, NiCullingProcess *kCuller);
void __thiscall NsFadeNode::LoadBinary(NsFadeNode *this, NiStream *stream);
void __thiscall NsFadeNode::SaveBinary(NsFadeNode *this, NiStream *stream);
bool __thiscall NsFadeNode::IsEqual(NsFadeNode *this, NiObject *pObject);
void __thiscall NiLightDimmerController::LoadBinary(NiAlphaRefController *this, NiStream *stream);
void __thiscall NiAlphaRefController::LinkObject(NiAlphaRefController *this, NiStream *stream);
void __thiscall NiTArray<NiTPointerList<NiPointer<NiProperty>>__>::_NiTArray<NiTPointerList<NiPointer<NiProperty>>__>(NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *this);
void *__thiscall NiTArray<NiTPointerList<NiPointer<NiProperty>>__>::_scalar_deleting_destructor_(NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *this, unsigned int);
void __thiscall NsFadeNode::InitData(NsFadeNode *this);
float __thiscall NsFadeNode::GetCurAlpha(NsFadeNode *this);
void __thiscall NsFadeNode::SetMinAlpha(NsFadeNode *this, float fAlpha);
void __thiscall NsFadeNode::CreateVisController(NsFadeNode *this);
void __thiscall NiAlphaRefController::Update(NiAlphaRefController *this, float fTime);
void __thiscall NiTArray<NiPointer<NiNode>>::RemoveAll(NiTArray<NiPointer<NiGeometry> > *this);
void __thiscall NsFadeNode::NsFadeNode(NsFadeNode *this);
NiRTTI *__thiscall NsFadeNode::GetRTTI(NsFadeNode *this);
void __thiscall NsFadeNode::NsFadeNode(NsFadeNode *this, bool bLodMode);
void __thiscall NsFadeNode::NsFadeNode(NsFadeNode *this, NiNode *_pLodNode, bool bLodMode);
void __thiscall NsFadeNode::RemoveAllArray(NsFadeNode *this);
void __thiscall NsFadeNode::IdleSetting2(NsFadeNode *this);
void __thiscall NsFadeNode::FadeSetting2(NsFadeNode *this);
NiObject *__thiscall NsFadeNode::CreateClone(NsFadeNode *this, NiCloningProcess *kCloning);
void __thiscall NsFadeNode::CallBackFadeEnd(NsFadeNode *this);
NiRTTI *__thiscall NiAlphaRefController::GetRTTI(NiAlphaRefController *this);
void __thiscall NiAlphaRefController::GetTargetFloatValue(NiAlphaRefController *this, float *fValue);
bool __thiscall NiAlphaRefController::InterpTargetIsCorrectType(NiAlphaRefController *this, NiObjectNET *pkTarget);
void *__thiscall NiAlphaRefController::_vector_deleting_destructor_(NiAlphaRefController *this, unsigned int);
void __thiscall NsFadeNode::GetViewerStrings(NsFadeNode *this, NiTArray<char *> *pStrings);
NiObject *__thiscall NiAlphaRefController::CreateClone(NiAlphaRefController *this, NiCloningProcess *kCloning);
void __thiscall NiAlphaRefController::GetViewerStrings(NiAlphaRefController *this, NiTArray<char *> *pStrings);
Ns_TourScene::TS_RESULT __thiscall NsFadeNode::FindChildGeometry::ProcessData(NsFadeNode::FindChildGeometry *this, NiAVObject *_pkObject, void *_pData);
void __thiscall NsFadeNode::_NsFadeNode(NsFadeNode *this);
void __thiscall NsFadeNode::TestActive(NsFadeNode *this);
void __thiscall NsFadeNode::Start(NsFadeNode *this, float _fTime, bool _bFadeOut);
void __thiscall NsFadeNode::CreateAlphaController(NsFadeNode *this);
void *__thiscall NsFadeNode::_scalar_deleting_destructor_(NsFadeNode *this, unsigned int);
void __thiscall NsFadeNode::InitFadeData(NsFadeNode *this);
void __thiscall NsFadeNode::UpdateUseLength(NsFadeNode *this);
void __thiscall NsFadeNode::UpdateFade(NsFadeNode *this, bool bSelectiveUpdate);
void __thiscall NsFadeNode::UpdateDownwardPass(NsFadeNode *this, float fTime, bool bUpdateControllers);
void __thiscall NsFadeNode::UpdateSelectedDownwardPass(NsFadeNode *this, float fTime);
void __thiscall NsFadeNode::UpdateRigidDownwardPass(NsFadeNode *this, float fTime);
void __thiscall NiTextureEffect::SetEffectTexture(NiTextureEffect *this, NiTexture *pkTexture);
void __thiscall NsShadowObject::_NsShadowObject(NsShadowObject *this);
void __thiscall NsShadowObject::UpdateEdgeCameraAndLineClick(NsShadowObject *this);
void __thiscall NsShadowObject::MakeLines(NsShadowObject *this, unsigned int _uiSize);
void __thiscall NsShadowObject::UpdateShadowCamera(NsShadowObject *this, float fTime, float fAddRadiusPercent);
void __thiscall NsShadowObject::UpdateProjection(NsShadowObject *this);
void __thiscall NsShadowObject::SetMultiEffect(NsShadowObject *this, bool _bMultEffect);
void __thiscall NsShadowObject::ClickAndStuff(NsShadowObject *this, float fTime, float fAddRadiusPercent);
NiRTTI *__thiscall MasterPropertyAccumulator::GetRTTI(MasterPropertyAccumulator *this);
void *__thiscall MasterPropertyAccumulator::_scalar_deleting_destructor_(MasterPropertyAccumulator *this, unsigned int);
void __thiscall NsShadowObject::NsShadowObject(NsShadowObject *this);
NsShadowObject *__cdecl NsShadowObject::Create(NiRenderer *pRenderer, unsigned int uiDetail);
std::_List_nod<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > >::_Node *__thiscall std::_List_val<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::_Buynode(std::_List_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > *this, std::_List_nod<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > >::_Node *_Next, std::_List_nod<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > >::_Node *_Prev, NiPointer<NiAVObject> *_Val);
void __thiscall std::list<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::clear(std::list<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > *this);
Ns_TourScene::TS_RESULT __thiscall FindMultiLinkNode::ProcessData(FindMultiLinkNode *this, NiAVObject *_pkObject, void *_pData);
Ns_TourScene::TS_RESULT __thiscall FindRoomNode::ProcessData(FindRoomNode *this, NiAVObject *_pkObject, void *_pData);
void __thiscall NsMergePortal::Clear(NsMergePortal *this);
bool __thiscall NsMergePortal::Init(NsMergePortal *this);
void __thiscall std::list<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::_list<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>(std::list<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > *this);
void __thiscall NsMergePortal::NsMergePortal(NsMergePortal *this);
void __thiscall NsMergePortal::_NsMergePortal(NsMergePortal *this);
void __thiscall NsMergePortal::process(NsMergePortal *this, NiNode *_pNode);
bool __thiscall PgNsTerrain::LoadEditedVertexGap(PgNsTerrain *this, const char *_szFileName);
unsigned int __thiscall PgNsTerrain::CPgTerrainLayer::GetBlendValue(PgNsTerrain::CPgTerrainLayer *this, const float *i_fU1, const float *i_fV1, const float *i_fU2, const float *i_fV2, const float *i_fMinAlpha);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *this);
void *__thiscall boost::detail::sp_counted_base_impl<PgNsTerrain::CPgBlockObject___boost::checked_deleter<PgNsTerrain::CPgBlockObject>>::get_deleter(boost::detail::sp_counted_base_impl<PgNsTerrain::CPgBlockObject *,boost::checked_deleter<PgNsTerrain::CPgBlockObject> > *this, type_info *ti);
NiTexture *__cdecl GetImage2Image(const char *i_szImageFileName, float **o_ppData, float i_fInit);
NiTexture *__cdecl GetImage2Image(const char *i_szImageFileName, float **o_ppData);
bool __thiscall PgNsTerrain::BlendTest(PgNsTerrain *this, unsigned int i_uiLayerNum, float i_fX1, float i_fY1, float i_fX2, float i_fY2, float i_fMinAlpha);
bool __thiscall PgNsTerrain::GetPositionDirectFind(PgNsTerrain *this, float i_fPosX, float i_fPosY, float *fPosZ_, NiPoint3 *pnormal_);
bool __thiscall PgNsTerrain::GetPositionDirectFind(PgNsTerrain *this, float i_fPosX, float i_fPosY, NiPoint3 *pos3Position_, NiPoint3 *pnormal_);
bool __thiscall PgNsTerrain::SetDecal(PgNsTerrain *this, float _fPosX, float _fPosY, float _fLengthX, float _fLengthY, NiTriShape *_pkTriShape);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> *this);
PgNsTerrain::CPgTerrainLayer *__thiscall std::allocator<PgNsTerrain::CPgTerrainLayer>::allocate(std::allocator<PgNsTerrain::CPgTerrainLayer> *this, unsigned int _Count);
void __thiscall boost::detail::sp_counted_base_impl<PgNsTerrain::CPgBlockObject___boost::checked_deleter<PgNsTerrain::CPgBlockObject>>::dispose(boost::detail::sp_counted_base_impl<PgNsTerrain::CPgBlockObject *,boost::checked_deleter<PgNsTerrain::CPgBlockObject> > *this);
void __thiscall std::pair<unsigned_int_const_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>::_pair<unsigned_int_const_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>(std::pair<unsigned int const ,boost::shared_ptr<PgNsTerrain::CPgBlockObject> > *this);
void __thiscall boost::detail::shared_count::shared_count(boost::detail::shared_count *this, PgNsTerrain::CPgBlockObject *p, boost::checked_deleter<PgNsTerrain::CPgBlockObject> d);
void __thiscall PgNsTerrain::LayerReGenerate(PgNsTerrain *this);
void *__thiscall boost::pool<boost::default_user_allocator_new_delete>::malloc_need_resize(boost::pool<boost::default_user_allocator_new_delete> *this);
void __thiscall boost::fast_pool_allocator<std::pair<unsigned_int_const_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>::construct(boost::fast_pool_allocator<std::pair<unsigned int const ,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32> *this, std::pair<unsigned int const ,boost::shared_ptr<PgNsTerrain::CPgBlockObject> > *const ptr, std::pair<unsigned int const ,boost::shared_ptr<PgNsTerrain::CPgBlockObject> > *t);
void __thiscall PgNsTerrain::CPgTerrainLayer::CPgTerrainLayer(PgNsTerrain::CPgTerrainLayer *this);
void __thiscall PgNsTerrain::CPgTerrainLayer::_CPgTerrainLayer(PgNsTerrain::CPgTerrainLayer *this);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this);
void __thiscall PgNsTerrain::CPgTerrainLayer::CPgTerrainLayer(PgNsTerrain::CPgTerrainLayer *this, PgNsTerrain::CPgTerrainLayer *__that);
PgNsTerrain::CPgTerrainLayer *__cdecl std::_Move<PgNsTerrain::CPgTerrainLayer___PgNsTerrain::CPgTerrainLayer__>(PgNsTerrain::CPgTerrainLayer *_First, PgNsTerrain::CPgTerrainLayer *_Last, PgNsTerrain::CPgTerrainLayer *_Dest, std::_Nonscalar_ptr_iterator_tag __formal);
boost::singleton_pool<boost::fast_pool_allocator_tag,24,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>::pool_type *__cdecl boost::details::pool::singleton_default<boost::singleton_pool<boost::fast_pool_allocator_tag_24_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>::pool_type>::instance();
PgNsTerrain::CPgTerrainLayer *__cdecl std::_Uninit_move<PgNsTerrain::CPgTerrainLayer___PgNsTerrain::CPgTerrainLayer___std::allocator<PgNsTerrain::CPgTerrainLayer>_PgNsTerrain::CPgTerrainLayer>(PgNsTerrain::CPgTerrainLayer *_First, PgNsTerrain::CPgTerrainLayer *_Last, PgNsTerrain::CPgTerrainLayer *_Dest, std::allocator<PgNsTerrain::CPgTerrainLayer> *_Al, PgNsTerrain::CPgTerrainLayer *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
void __cdecl std::_Uninit_def_fill_n<PgNsTerrain::CPgTerrainLayer___unsigned_int_PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>_PgNsTerrain::CPgTerrainLayer>(PgNsTerrain::CPgTerrainLayer *_First, unsigned int _Count, PgNsTerrain::CPgTerrainLayer *__formal, std::allocator<PgNsTerrain::CPgTerrainLayer> *_Al, PgNsTerrain::CPgTerrainLayer *__formal, std::_Nonscalar_ptr_iterator_tag __formal);
int std::_Tree<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::erase(...);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boost::default_user_allocator_new_delete,boo *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boost::default_user_allocator_new_delete *_Rootnode);
void __thiscall std::_Tree<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Erase(std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Rootnode);
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Rootnode);
int std::_Tree<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Insert(...);
int std::_Tree<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Insert(...);
std::_Tree_nod<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boost::default_user_allocator_new_delete *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Buynode(std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boost::default_user_allocator_new_delete *this);
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Buynode(std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this);
void __thiscall std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::__Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>(std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this);
void __thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::__Tree_val<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>(std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this);
void __thiscall std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>(std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, PgNsTerrain::EVGLess *_Parg, boost::fast_pool_allocator<std::pair<PgNsTerrain::val const ,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32> _Al);
void __thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>(std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::less<unsigned int> *_Parg, boost::fast_pool_allocator<std::pair<unsigned int const ,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32> _Al);
int std::_Tree<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Linsert(...);
int std::_Tree<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Linsert(...);
std::_Tree_nod<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boost::default_user_allocator_new_delete *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Buynode<std::pair<unsigned_int_const_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>>(std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boost::default_user_allocator_new_delete *this, std::pair<unsigned int const ,boost::shared_ptr<PgNsTerrain::CPgBlockObject> > *_Val);
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Buynode<std::pair<unsigned_int_const_unsigned_int>>(std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::pair<unsigned int const ,unsigned int> *_Val);
std::_Vector_iterator<std::_Vector_val<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > > *__thiscall std::vector<PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>>::erase(std::vector<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > *this, std::_Vector_iterator<std::_Vector_val<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > > *result, std::_Vector_const_iterator<std::_Vector_val<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > > _First_arg, std::_Vector_const_iterator<std::_Vector_val<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > > _Last_arg);
int std::_Tree<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::erase(...);
void __thiscall std::vector<PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>>::reserve(std::vector<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > *this, unsigned int _Count);
int std::_Tree<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::erase(...);
int std::_Tree<std::_Tmap_traits<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::erase(...);
void __thiscall std::vector<PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>>::_vector<PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>>(std::vector<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > *this);
void __thiscall std::vector<PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>>::_Reserve(std::vector<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > *this, unsigned int _Count);
void __thiscall std::vector<PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>>::push_back(std::vector<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > *this, PgNsTerrain::CPgTerrainLayer *_Val);
void __thiscall std::vector<PgNsTerrain::CPgTerrainLayer_std::allocator<PgNsTerrain::CPgTerrainLayer>>::resize(std::vector<PgNsTerrain::CPgTerrainLayer,std::allocator<PgNsTerrain::CPgTerrainLayer> > *this, unsigned int _Newsize);
void __thiscall std::map<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>>::_map<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>>(std::map<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32> > *this);
bool __thiscall PgNsTerrain::ReceiveScriptNode(PgNsTerrain *this, INsFile *_pNsFile);
void __thiscall std::map<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>>::_map<unsigned_int_unsigned_int_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_unsigned_int>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>>(std::map<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32> > *this);
void __thiscall PgNsTerrain::CPgTerrainBlock::CPgTerrainBlock(PgNsTerrain::CPgTerrainBlock *this);
void __thiscall PgNsTerrain::CPgTerrainBlock::_CPgTerrainBlock(PgNsTerrain::CPgTerrainBlock *this);
void __thiscall PgNsTerrain::PgNsTerrain(PgNsTerrain *this);
bool __cdecl PgTerrainScript_CallBack(INsFile *_pNsFile, void *_pData, int _nLevel);
bool __thiscall PgNsTerrain::ReadInfoFile(PgNsTerrain *this, const char *i_szFileName);
bool __thiscall PgNsTerrain::MakeGeometry(PgNsTerrain *this, PgNsTerrain::CPgBlockObject *i_pBlockObject);
void __thiscall PgNsTerrain::GenerateBlock(PgNsTerrain *this);
void __thiscall PgNsTerrain::_PgNsTerrain(PgNsTerrain *this);
void __thiscall PgNsTerrain::GenerateLayer(PgNsTerrain *this);
bool __thiscall PgNsTerrain::LoadData(PgNsTerrain *this, const char *i_szFileName);
void __thiscall NsPathFinding::Init(NsPathFinding *this, unsigned int MapSx, unsigned int MapSy);
int __thiscall NsPathFinding::LineIntersect(NsPathFinding *this, PXY *pxy_);
int __thiscall NsPathFinding::SearchMoveable(NsPathFinding *this);
void __thiscall NsPathFinding::_FindWay(NsPathFinding *this);
PXY *__thiscall NsPathFinding::FindWay(NsPathFinding *this, PXY _kStartPos, PXY _kEndPos, unsigned int *dwGoalReached_, int *bDirectMove_, int *bChangedEndPos_, PXY *kJuncPos_, unsigned int *dwFWMaxStep_);
bool __thiscall NsPathFinding::SearchWayPoints(NsPathFinding *this, NiPoint2 pos2Start, NiPoint2 pos2End, int nMaxArryCnt, NiPoint2 *pPos2Arr, int *nResultWayCnt);
int __thiscall NsPathFinding::LineIntersect(NsPathFinding *this, float _fStartX, float _fStartY, float *_fEndX, float *_fEndY);
void __thiscall IMakeBlockInfo::IMakeBlockInfo(IMakeBlockInfo *this);
void __thiscall IMakeBlockInfo::_IMakeBlockInfo(IMakeBlockInfo *this);
bool __thiscall NsMakeBlockInfo_Byte::Save(NsMakeBlockInfo_Byte *this, const char *_szFileName);
bool __thiscall NsMakeBlockInfo_Byte::Load(NsMakeBlockInfo_Byte *this, const char *_szFileName);
void *__thiscall IMakeBlockInfo::_scalar_deleting_destructor_(IMakeBlockInfo *this, unsigned int);
Wml::Vector<3,double> *__thiscall Wml::Vector<3_double>::operator_(Wml::Vector<3,double> *this, Wml::Vector<3,double> *result, Wml::Vector<3,double> *rkV);
Wml::Vector<3,double> *__thiscall Wml::Vector<3_double>::operator_(Wml::Vector<3,double> *this, Wml::Vector<3,double> *result, Wml::Vector<3,double> *rkV);
long double __thiscall Wml::Vector<3_double>::Dot(Wml::Vector<3,double> *this, Wml::Vector<3,double> *rkV);
long double __thiscall Wml::Vector<3_double>::Normalize(Wml::Vector<3,double> *this);
Wml::Vector<3,double> *__cdecl Wml::operator_<3_double>(Wml::Vector<3,double> *result, long double fScalar, Wml::Vector<3,double> *rkV);
void __thiscall Wml::Vector3<double>::Vector3<double>(Wml::Vector3<double> *this, long double fX, long double fY, long double fZ);
long double *__thiscall Wml::Vector3<double>::Z(Wml::Vector3<double> *this);
Wml::Vector3<double> *__thiscall Wml::Vector3<double>::Vector3<double>(Wml::Vector3<double> *this, Wml::Vector3<double> *rkV);
void __cdecl Wml::Vector3<double>::GenerateOrthonormalBasis(Wml::Vector3<double> *rkU, Wml::Vector3<double> *rkV, Wml::Vector3<double> *rkW, bool bUnitLengthW);
// int __usercall Find_double_<eax>(Wml::Vector3<double> *rkOrigin, Wml::Vector3<double> *rkDirection<ecx>, Wml::Capsule3<double> *rkCapsule<edx>, long double *afT<ebx>);
bool __cdecl FindIntersection<double>(Wml::Ray3<double> *rkRay, Wml::Capsule3<double> *rkCapsule, int *riQuantity, Wml::Vector3<double> *akPoint, long double *afT);
void __thiscall Wml::Capsule3<double>::Capsule3<double>(Wml::Capsule3<double> *this);
Wml::Vector3<double> *__thiscall Wml::Capsule3<double>::Origin(Wml::Capsule3<double> *this);
Wml::Vector3<double> *__thiscall Wml::Capsule3<double>::Direction(Wml::Capsule3<double> *this);
void __thiscall Wml::Ray3<double>::Ray3<double>(Wml::Segment3<double> *this);
void __thiscall NiPropertyState::SwapProperties(NiPropertyState *this, NiTPointerList<NiPointer<NiProperty> > *kProplist);
void __thiscall MasterPropertyAccumulator::_MasterPropertyAccumulator(MasterPropertyAccumulator *this);
void __thiscall MasterPropertyAccumulator::RegisterObjectArray(HazeAccumulator *this, NiVisibleArray *kArray);
void __thiscall MasterPropertyAccumulator::FinishAccumulating(MasterPropertyAccumulator *this);
NiObject *__thiscall MasterPropertyAccumulator::CreateClone(MasterPropertyAccumulator *this, NiCloningProcess *kCloning);
void __thiscall PgNsPicking::PgNsPicking(PgNsPicking *this);
void __thiscall PgNsPicking::_PgNsPicking(PgNsPicking *this);
Wml::Vector3<double> *__thiscall Wml::Segment3<double>::Direction(Wml::Segment3<double> *this);
CBaseObject *__thiscall CDataDocument::GetObjectByName(CDataDocument *this, const char *pkName);
CDataDocument *__cdecl CDataDocument::Instance();
bool __thiscall CDataDocument::DelObject(CDataDocument *this, CBaseObject *pObj);
bool __thiscall CDataDocument::AddObject(CDataDocument *this, CBaseObject *pObj);
bool __thiscall CDataDocument::Load(CDataDocument *this, const char *pkFileFullName);
void __thiscall NiTSet<CPostProcessEffect__>::Realloc(NiTSet<CPostProcessEffect *> *this, unsigned int uiNewSize);
CPostProcessEffect *__thiscall CPostProcessEffectManager::GetEffect(CPostProcessEffectManager *this, unsigned int uiType);
void __thiscall CPostProcessEffectManager::RemoveAllEffects(CPostProcessEffectManager *this);
void __thiscall CPostProcessEffectManager::OnRenderSceneStart(CPostProcessEffectManager *this);
void __thiscall CPostProcessEffectManager::OnRenderSceneEnd(CPostProcessEffectManager *this);
void __cdecl CPostProcessEffectManager::Destroy();
void __thiscall CPostProcessEffectManager::Initialize(CPostProcessEffectManager *this);
void __thiscall CPostProcessEffectManager::Recreate(CPostProcessEffectManager *this);
CPostProcessEffectManager *__cdecl CPostProcessEffectManager::GetInstance();
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *__thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval);
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Construct<std::_String_iterator<char_std::char_traits<char>_std::allocator<char>>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > _First, std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > _Last);
CAbstractProperty *__thiscall CRTTI::FindProperty(CRTTI *this, const char *pFindName);
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty____>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, CAbstractProperty **_Val2);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty___std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_CAbstractProperty__>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>>(...);
void __thiscall CRTTI::AddProperty(CRTTI *this, CAbstractProperty *pProperty);
void __thiscall CRTTI::CRTTI(CRTTI *this, unsigned int dwStub, const char *szClassName, CRTTI *pBaseClassRTTI, bool (__cdecl *pReflectionFunc)());
void *__thiscall CNullClass::_scalar_deleting_destructor_(CNullClass *this, unsigned int);
void __thiscall CWorldConfig::SetGound_DL_Enable(CWorldConfig *this, bool bEnable);
ePropertyType __thiscall CTypedProperty<bool>::GetType(CTypedProperty<bool> *this);
type_info *__thiscall CTypedProperty<bool>::GetTypeInfo(CTypedProperty<bool> *this);
CRTTI *__thiscall CRTTIClass<CBaseObject_CNullClass>::GetRTTI(CRTTIClass<CBaseObject,CNullClass> *this);
void *__thiscall CProperty<CWorldConfig_bool>::_vector_deleting_destructor_(CProperty<CWorldConfig,bool> *this, unsigned int);
bool __thiscall CProperty<CWorldConfig_bool>::GetValue(CProperty<CWorldConfig,bool> *this, CBaseObject *pOwner);
void __thiscall CProperty<CWorldConfig_bool>::SetValue(CProperty<CWorldConfig,bool> *this, CBaseObject *pOwner, bool Value);
void __thiscall CWorldConfig::InitalizeGroundLight(CWorldConfig *this, NiPointer<NiNode> spGround, NiPointer<NiDirectionalLight> spLight);
void __cdecl CWorldConfig::RegisterReflection();
void __thiscall CWorldConfig::_CWorldConfig(CWorldConfig *this);
CRTTI *__thiscall CRTTIClass<CWorldConfig_CBaseObject>::GetRTTI(CRTTIClass<CWorldConfig,CBaseObject> *this);
void __thiscall CWorldConfig::CWorldConfig(CWorldConfig *this);
void *__thiscall CWorldConfig::_scalar_deleting_destructor_(CWorldConfig *this, unsigned int);
bool __cdecl HeightMapMaker::Sortfn(HeightMapMaker::TriangleIndex *const *lhw, HeightMapMaker::TriangleIndex *const *rhw);
bool __thiscall HeightMapMaker::TriangleIndex::IsInsideAngle(HeightMapMaker::TriangleIndex *this, NiPoint3 *rTarget, NiPoint3 *rVt1, NiPoint3 *rVt2);
bool __thiscall HeightMapMaker::TriangleIndex::IsInsidePos(HeightMapMaker::TriangleIndex *this, NiPoint3 *rTarget);
void __thiscall HeightMapMaker::TriangleIndex::MakeEqutionOfPlane(HeightMapMaker::TriangleIndex *this);
void __cdecl std::_Push_heap<HeightMapMaker::TriangleIndex_____int_HeightMapMaker::TriangleIndex___bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const___>(HeightMapMaker::TriangleIndex **_First, int _Hole, int _Top, HeightMapMaker::TriangleIndex **_Val, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *));
bool __thiscall HeightMapMaker::TriangleIndex::IsCrashRect(HeightMapMaker::TriangleIndex *this, NiPoint3 *rMin, NiPoint3 *rMax);
bool __thiscall HeightMapMaker::TriangleIndex::IsCrossLine(HeightMapMaker::TriangleIndex *this, NiPoint3 *rStart, NiPoint3 *rEnd);
void __cdecl std::_Adjust_heap<HeightMapMaker::TriangleIndex_____int_HeightMapMaker::TriangleIndex___bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const___>(HeightMapMaker::TriangleIndex **_First, int _Hole, int _Bottom, HeightMapMaker::TriangleIndex **_Val, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *));
bool __thiscall HeightMapMaker::TriangleIndex::IsCrashBox(HeightMapMaker::TriangleIndex *this, NiPoint3 *rMin, NiPoint3 *rMax);
bool __thiscall HeightMapMaker::TriangleIndex::IsCrashTriangle(HeightMapMaker::TriangleIndex *this, HeightMapMaker::TriangleIndex *rTriIndex);
void __cdecl std::_Make_heap<HeightMapMaker::TriangleIndex_____int_HeightMapMaker::TriangleIndex___bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const___>(HeightMapMaker::TriangleIndex **_First, HeightMapMaker::TriangleIndex **_Last, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *), int *__formal, HeightMapMaker::TriangleIndex **__formal);
void __cdecl std::_Insertion_sort1<HeightMapMaker::TriangleIndex_____bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const____HeightMapMaker::TriangleIndex__>(HeightMapMaker::TriangleIndex **_First, HeightMapMaker::TriangleIndex **_Last, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *), HeightMapMaker::TriangleIndex **__formal);
void __cdecl std::_Median<HeightMapMaker::TriangleIndex_____bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const___>(HeightMapMaker::TriangleIndex **_First, HeightMapMaker::TriangleIndex **_Mid, HeightMapMaker::TriangleIndex **_Last, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *));
void __thiscall HeightMapMaker::GroupIndex::GroupIndex(HeightMapMaker::GroupIndex *this);
void __thiscall HeightMapMaker::GroupIndex::_GroupIndex(HeightMapMaker::GroupIndex *this);
std::pair<HeightMapMaker::TriangleIndex * *,HeightMapMaker::TriangleIndex * *> *__cdecl std::_Unguarded_partition<HeightMapMaker::TriangleIndex_____bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const___>(std::pair<HeightMapMaker::TriangleIndex * *,HeightMapMaker::TriangleIndex * *> *result, HeightMapMaker::TriangleIndex **_First, HeightMapMaker::TriangleIndex **_Last, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *));
void __cdecl std::_Sort_heap<HeightMapMaker::TriangleIndex_____bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const___>(HeightMapMaker::TriangleIndex **_First, HeightMapMaker::TriangleIndex **_Last, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *));
void __thiscall HeightMapMaker::HeightMapMaker(HeightMapMaker *this);
void __thiscall HeightMapMaker::Clear(HeightMapMaker *this);
std::basic_istream<char,std::char_traits<char> > *__thiscall std::basic_istream<char_std::char_traits<char>>::getline(std::basic_istream<char,std::char_traits<char> > *this, char *_Str, __int64 _Count, char _Delim);
std::basic_ostream<char,std::char_traits<char> > *__thiscall std::basic_ostream<char_std::char_traits<char>>::write(std::basic_ostream<char,std::char_traits<char> > *this, const char *_Str, __int64 _Count);
void __thiscall HeightMapMaker::_HeightMapMaker(HeightMapMaker *this);
Ns_TourScene::TS_RESULT __thiscall FindCDNode2::ProcessData(FindCDNode2 *this, NiAVObject *_pkObject, void *_pData);
void __thiscall FindCDNode2::RecursiveNodeFind(FindCDNode2 *this, NiNode *pNode, std::vector<NiAVObject *,std::allocator<NiAVObject *> > *pVector);
void __cdecl std::_Sort<HeightMapMaker::TriangleIndex_____int_bool____cdecl____HeightMapMaker::TriangleIndex___const___HeightMapMaker::TriangleIndex___const___>(HeightMapMaker::TriangleIndex **_First, HeightMapMaker::TriangleIndex **_Last, int _Ideal, bool (__cdecl *_Pred)(HeightMapMaker::TriangleIndex *const *, HeightMapMaker::TriangleIndex *const *));
void *__thiscall HeightMapMaker::_vector_deleting_destructor_(HeightMapMaker *this, unsigned int);
void __thiscall std::basic_fstream<char_std::char_traits<char>>::basic_fstream<char_std::char_traits<char>>(std::basic_fstream<char,std::char_traits<char> > *this);
void __thiscall std::basic_fstream<char_std::char_traits<char>>::_basic_fstream<char_std::char_traits<char>>(std::basic_fstream<char,std::char_traits<char> > *this);
void *__thiscall std::basic_fstream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_fstream<char,std::char_traits<char> > *this, unsigned int);
void __thiscall shineofstream::_shineofstream(shineofstream *this);
bool __thiscall HeightMapMaker::LoadHeightMap(HeightMapMaker *this, const char *pkFileName, unsigned int sNum, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rStrMd5);
bool __thiscall HeightMapMaker::SaveHeightMap(HeightMapMaker *this, const char *pkFileName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rStrMd5);
bool __thiscall HeightMapMaker::MakeHeightMap(HeightMapMaker *this, NiPointer<NiNode> spTarget, const char *pkFileName);
bool __thiscall CPostProcessEffect::GetActive(CPostProcessEffect *this);
void __thiscall CPostProcessEffect::SetActive(CPostProcessEffect *this, bool bActive);
void __thiscall CPostProcessEffect::CPostProcessEffect(CPostProcessEffect *this, bool bActive, unsigned int uiType);
NiRTTI *__thiscall CPostProcessEffect::GetRTTI(CPostProcessEffect *this);
bool __thiscall CHazeScreenEffect::ResizeRenderTarget(CHazeScreenEffect *this, int iWidth, int iHeight);
void __thiscall HazeAccumulator::FinishAccumulating(HazeAccumulator *this);
bool __thiscall CHazeScreenEffect::CreateEffect(CHazeScreenEffect *this, int iWidth, int iHeight);
void __thiscall CHazeScreenEffect::CleanupEffect(CHazeScreenEffect *this);
void __thiscall CHazeScreenEffect::RenderFrame(CHazeScreenEffect *this, NiRenderTargetGroup *pkRenderTarget);
void __thiscall CHazeScreenEffect::SetParentNode(CHazeScreenEffect *this, NiPointer<NiNode> spNode, NiPointer<NiCamera> spMainCamera);
void __thiscall HazeAccumulator::HazeAccumulator(HazeAccumulator *this);
NiRTTI *__thiscall HazeAccumulator::GetRTTI(HazeAccumulator *this);
void __thiscall HazeAccumulator::_HazeAccumulator(HazeAccumulator *this);
void *__thiscall HazeAccumulator::_scalar_deleting_destructor_(HazeAccumulator *this, unsigned int);
void __thiscall CHazeScreenEffect::_CHazeScreenEffect(CHazeScreenEffect *this);
NiRTTI *__thiscall CHazeScreenEffect::GetRTTI(CHazeScreenEffect *this);
CRTTI *__thiscall CRTTIClass<CHazeScreenEffect_CBaseObject>::GetRTTI(CRTTIClass<CHazeScreenEffect,CBaseObject> *this);
void *__thiscall CHazeScreenEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void __thiscall CHazeScreenEffect::CHazeScreenEffect(CHazeScreenEffect *this, const char *szShaderName, bool bActive);
void *__thiscall CHazeScreenEffect::_vector_deleting_destructor_(CHazeScreenEffect *this, unsigned int);
bool __cdecl UtilFunc::GetINI_String(const char *pcFilepath, const char *pcSection, const char *pcKey, char *pcReturnBuffer, unsigned int uiBufferSize, const char *pcDefault);
bool __cdecl UtilFunc::IsFileExist(const char *pcFilePath);
bool __thiscall CGlowScreenEffect::ResetNumBlurring(CGlowScreenEffect *this, int iNumBlurring);
void __thiscall CGlowScreenEffect::RenderFrame(CGlowScreenEffect *this, NiRenderTargetGroup *pkRenderTarget);
int __cdecl CompareWeight(const void *pArgu1, const void *pArgu2);
void __thiscall CGlowScreenEffect::UpdateDownScale4x4(CGlowScreenEffect *this);
void __thiscall CGlowScreenEffect::UpdateDownScale2x2(CGlowScreenEffect *this);
void __thiscall CGlowScreenEffect::SetGlowEffectGlowness(CGlowScreenEffect *this, float fGlowness);
void __thiscall CGlowScreenEffect::SetGlowEffectBlendFactor(CGlowScreenEffect *this, float fBlendFactor);
void __thiscall CGlowScreenEffect::SetGlowEffectNumBlurring(CGlowScreenEffect *this, unsigned int uNumBlurring);
float __thiscall CGlowScreenEffect::GetGlowEffectGlowness(CGlowScreenEffect *this);
float __thiscall CGlowScreenEffect::GetGlowEffectBlendFactor(CGlowScreenEffect *this);
float __thiscall CGlowScreenEffect::GetGlowEffectDownScaling(CGlowScreenEffect *this);
unsigned int __thiscall CGlowScreenEffect::GetGlowEffectNumBlurring(CGlowScreenEffect *this);
float __thiscall CGlowScreenEffect::GetGlowEffectGaussFactor(CGlowScreenEffect *this);
int __thiscall CPostProcessEffect::_vcall_(void *this);
void __thiscall CGlowScreenEffect::UpdateSampleWeights(CGlowScreenEffect *this, float fGaussFactor);
void __thiscall CGlowScreenEffect::SetGlowEffectGaussFactor(CGlowScreenEffect *this, float fGaussFactor);
ePropertyType __thiscall CTypedProperty<float>::GetType(CTypedProperty<float> *this);
type_info *__thiscall CTypedProperty<float>::GetTypeInfo(CTypedProperty<float> *this);
ePropertyType __thiscall CTypedProperty<unsigned_int>::GetType(CTypedProperty<unsigned int> *this);
type_info *__thiscall CTypedProperty<unsigned_int>::GetTypeInfo(CTypedProperty<unsigned int> *this);
void *__thiscall CProperty<CGlowScreenEffect_bool>::_scalar_deleting_destructor_(CProperty<CGlowScreenEffect,bool> *this, unsigned int);
void *__thiscall CProperty<CGlowScreenEffect_float>::_vector_deleting_destructor_(CProperty<CGlowScreenEffect,float> *this, unsigned int);
unsigned int __thiscall CProperty<CGlowScreenEffect_bool>::GetValue(CProperty<CGlowScreenEffect,unsigned int> *this, CBaseObject *pOwner);
void __thiscall CProperty<CGlowScreenEffect_float>::SetValue(CProperty<CGlowScreenEffect,float> *this, CBaseObject *pOwner, float Value);
void *__thiscall CProperty<CGlowScreenEffect_unsigned_int>::_vector_deleting_destructor_(CProperty<CGlowScreenEffect,unsigned int> *this, unsigned int);
bool __thiscall CGlowScreenEffect::CreateEffect(CGlowScreenEffect *this, int iWidth, int iHeight);
bool __thiscall CGlowScreenEffect::ResizeRenderTarget(CGlowScreenEffect *this, int iWidth, int iHeight);
bool __thiscall CGlowScreenEffect::ResizeDownscaleRenderTarget(CGlowScreenEffect *this, int iWidth, int iHeight);
void __thiscall CGlowScreenEffect::SetGlowEffectDownScaling(CGlowScreenEffect *this, float uDownScaling);
int __stdcall loc_8BC5CC(float uDownScaling); // weak
void __cdecl CGlowScreenEffect::RegisterReflection();
void __thiscall CGlowScreenEffect::_CGlowScreenEffect(CGlowScreenEffect *this);
NiRTTI *__thiscall CGlowScreenEffect::GetRTTI(CGlowScreenEffect *this);
CRTTI *__thiscall CRTTIClass<CGlowScreenEffect_CBaseObject>::GetRTTI(CRTTIClass<CGlowScreenEffect,CBaseObject> *this);
void *__thiscall CGlowScreenEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void __thiscall CGlowScreenEffect::CGlowScreenEffect(CGlowScreenEffect *this, const char *szShaderName, bool bActive);
void *__thiscall CGlowScreenEffect::_scalar_deleting_destructor_(CGlowScreenEffect *this, unsigned int);
void __thiscall CAfterImageEffect::SetFirstRender(CAfterImageEffect *this, bool bReset);
bool __thiscall CAfterImageEffect::ResizeRenderTarget(CAfterImageEffect *this, int iWidth, int iHeight);
void __thiscall CAfterImageEffect::CleanupEffect(CAfterImageEffect *this);
int __thiscall CAfterImageEffect::_vcall_(void *this);
bool __thiscall CAfterImageEffect::CreateEffect(CAfterImageEffect *this, int iWidth, int iHeight);
void __thiscall CAfterImageEffect::RenderFrame(CAfterImageEffect *this, NiRenderTargetGroup *pkRenderTarget);
void *__thiscall CProperty<CAfterImageEffect_bool>::_scalar_deleting_destructor_(CProperty<CAfterImageEffect,bool> *this, unsigned int);
void __thiscall CProperty<CGlowScreenEffect_bool>::SetValue(CProperty<CGlowScreenEffect,unsigned int> *this, CBaseObject *pOwner, unsigned int Value);
void __cdecl CAfterImageEffect::RegisterReflection();
void __thiscall CAfterImageEffect::_CAfterImageEffect(CAfterImageEffect *this);
NiRTTI *__thiscall CAfterImageEffect::GetRTTI(CAfterImageEffect *this);
bool __thiscall CAfterImageEffect::GetFirstRender(CAfterImageEffect *this);
CRTTI *__thiscall CRTTIClass<CAfterImageEffect_CBaseObject>::GetRTTI(CRTTIClass<CAfterImageEffect,CBaseObject> *this);
void *__thiscall CAfterImageEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void __thiscall CAfterImageEffect::CAfterImageEffect(CAfterImageEffect *this, const char *szShaderName, bool bActive);
void *__thiscall CAfterImageEffect::_scalar_deleting_destructor_(CAfterImageEffect *this, unsigned int);
void __thiscall CDepthOfFieldEffect::RenderFrame(CDepthOfFieldEffect *this, NiRenderTargetGroup *pkRenderTarget);
bool __thiscall CDepthOfFieldEffect::ResizeRenderTarget(CDepthOfFieldEffect *this, int iWidth, int iHeight);
void __thiscall CDepthOfFieldEffect::CleanupEffect(CDepthOfFieldEffect *this);
void *__thiscall CProperty<CDepthOfFieldEffect_bool>::_scalar_deleting_destructor_(CProperty<CDepthOfFieldEffect,bool> *this, unsigned int);
void __cdecl CDepthOfFieldEffect::RegisterReflection();
void __thiscall CRTTIClass<CWorldConfig_CBaseObject>::_CRTTIClass<CWorldConfig_CBaseObject>(CRTTIClass<CHazeScreenEffect,CBaseObject> *this);
void __thiscall CDepthOfFieldEffect::_CDepthOfFieldEffect(CDepthOfFieldEffect *this);
NiRTTI *__thiscall CDepthOfFieldEffect::GetRTTI(CDepthOfFieldEffect *this);
CRTTI *__thiscall CRTTIClass<CDepthOfFieldEffect_CBaseObject>::GetRTTI(CRTTIClass<CDepthOfFieldEffect,CBaseObject> *this);
void *__thiscall CDepthOfFieldEffect::_vector_deleting_destructor_(void *this, unsigned int a2);
void *__thiscall CRTTIClass<CGlowScreenEffect_CBaseObject>::_vector_deleting_destructor_(CRTTIClass<CHazeScreenEffect,CBaseObject> *this, unsigned int);
void __thiscall CDepthOfFieldEffect::CDepthOfFieldEffect(CDepthOfFieldEffect *this, const char *szShaderName, bool bActive);
void *__thiscall CDepthOfFieldEffect::_scalar_deleting_destructor_(CDepthOfFieldEffect *this, unsigned int);
bool __thiscall CDepthOfFieldEffect::CreateEffect(CDepthOfFieldEffect *this, int iWidth, int iHeight);
bool __thiscall CScreenEffect::Initialize(CScreenEffect *this);
void __thiscall CScreenEffect::CleanupEffect(CScreenEffect *this);
void *__thiscall CScreenEffect::GetTargetTexture(NiD3DShaderProgram *this);
void __thiscall CScreenEffect::RenderFrame(CScreenEffect *this, NiRenderTargetGroup *pkRenderTarget);
bool __thiscall CScreenEffect::CreateEffect(CScreenEffect *this, int iWidth, int iHeight);
bool __thiscall CScreenEffect::CreateEffect(CScreenEffect *this, NiRenderedTexture *pkTexture);
bool __thiscall CScreenEffect::ResizeRenderTarget(CScreenEffect *this, int iWidth, int iHeight);
bool __thiscall CScreenEffect::ResizeRenderTarget(CScreenEffect *this, NiRenderedTexture *pkTexture);
void __thiscall CScreenEffect::_CScreenEffect(CScreenEffect *this);
NiRTTI *__thiscall CScreenEffect::GetRTTI(CScreenEffect *this);
void *__thiscall CScreenEffect::_scalar_deleting_destructor_(CScreenEffect *this, unsigned int);
void __thiscall CScreenEffect::CScreenEffect(CScreenEffect *this, const char *szShaderName, bool bActive, unsigned int uiType);
void __thiscall CScreenEffect::ApplyAndSetActiveMaterial(CScreenEffect *this, char *szMaterialName);
int __thiscall PgFrameWork::ProcessNetMsg(PgFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
void __thiscall PgFrameWork::AddMsg(PgFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam);
void __thiscall PgFrameWork::ProcessAllMsg(PgFrameWork *this);
void __thiscall PgFrameWork::PostFrameMsgTerminate(PgFrameWork *this);
void __thiscall PgFrameWork::PostFrameMsgStart(PgFrameWork *this, void *ID, PgMsg::Frame *pkFrameMsg);
void __thiscall PgFrameWork::PostFrameMsgChange(PgFrameWork *this, void *NextID, PgMsg::Frame *pkFrameMsg);
void __thiscall PgFrameWork::PostFrameMsgPop(PgFrameWork *this, void *PopID, PgMsg::Frame *pkFrameMsg);
void __thiscall PgFrameWork::PostFrameMsgUnPop(PgFrameWork *this);
void __thiscall PgFrameWork::PostMsgToFrameWork(PgFrameWork *this, void *ID, PgMsg::Frame *pkFrameMsg);
void __thiscall PgFrameWork::PostMsgToMe(PgFrameWork *this, PgMsg::Frame *pkFrameMsg);
void __thiscall PgFrameMgr::PgFrameMgr(PgFrameMgr *this);
void *__thiscall PgFrameMgr::_vector_deleting_destructor_(PgFrameMgr *this, unsigned int);
void __thiscall PgFrameMgr::_PgFrameMgr(PgFrameMgr *this);
bool __thiscall PgFrameMgr::PgInit(PgFrameMgr *this);
void __thiscall PgFrameMgr::PgTerminate(PgFrameMgr *this);
PgFrameWork *__thiscall PgFrameMgr::GetFrameWork(PgFrameMgr *this, void *id);
bool __thiscall PgFrameMgr::IsInRun(PgFrameMgr *this, void *ID);
void __thiscall PgFrameMgr::AddInRun(PgFrameMgr *this, void *ID);
void __thiscall PgFrameMgr::RemoveFromRun(PgFrameMgr *this, void *ID);
void __thiscall PgFrameMgr::AddInSleep(PgFrameMgr *this, void *ID);
void __thiscall PgFrameMgr::RemoveFromSleep(PgFrameMgr *this, void *ID);
void __thiscall PgFrameMgr::RemoveFromRunAndSleep(PgFrameMgr *this, void *ID);
void __thiscall PgFrameMgr::RunFrameWork(PgFrameMgr *this, void *ID);
void __thiscall PgFrameMgr::SleepFrameWork(PgFrameMgr *this, void *ID);
bool __thiscall PgFrameMgr::OnInitFrameWork(PgFrameMgr *this, void *ID, PgMsg::Frame *pkFrameMsgMsg);
bool __thiscall PgFrameMgr::OnTerminateFrameWork(PgFrameMgr *this, void *ID);
bool __thiscall PgFrameMgr::OnTerminateFrameWorkWithBackFrameWork(PgFrameMgr *this, void *ID);
bool __thiscall PgFrameMgr::OnStartFrameWork(PgFrameMgr *this, void *ID, PgMsg::Frame *pkFrameMsg);
bool __thiscall PgFrameMgr::OnChangeFrameWork(PgFrameMgr *this, void *PrevID, void *NextID, PgMsg::Frame *pkFrameMsgMsg);
bool __thiscall PgFrameMgr::OnPopFrameWork(PgFrameMgr *this, void *BackID, void *PopID, PgMsg::Frame *pkFrameMsgMsg);
bool __thiscall PgFrameMgr::OnUnPopFrameWork(PgFrameMgr *this, void *ID);
bool __thiscall PgFrameMgr::OnPostMsgToFrameWork(PgFrameMgr *this, void *ID, PgMsg::Frame *pkFrameMsg);
void __thiscall PgFrameMgr::ProcessMsg(PgFrameMgr *this);
void __thiscall PgFrameWork::DirectDispatchToParent(PgFrameWork *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall PgFrameMgr::Update(PgFrameMgr *this, float fCurTime);
void __thiscall PgFrameMgr::Draw(PgFrameMgr *this);
void __thiscall PgFrameMgr::PostMsg(PgFrameMgr *this, PgMsg *ptPgMsg);
void __thiscall PgFrameMgr::PostMsg(PgFrameMgr *this, PgMsg *kPgMsg);
void *__thiscall PgFrameMgr::RegisterFrameWork(PgFrameMgr *this, PgFrameWork *pkFrameWork);
bool __thiscall PgFrameMgr::Start(PgFrameMgr *this, void *ID, PgMsg::Frame *pkFrameMsgMsg);
void __thiscall PgFrameMgr::PostQuitMsg(PgFrameMgr *this, unsigned int uiExitCode);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>::NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, unsigned int uiHashSize);
void __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::SetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, void *key, PgFrameWork *val);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>::GetNext(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, void **pos, void **key, PgFrameWork **val);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_void__>::RemovePos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,void *> *this, void **kPos);
void __thiscall PgTQueue<PgMsg::Frame>::Add(PgTQueue<PgMsg::Frame> *this, PgMsg::Frame element);
PgMsg::Frame *__thiscall PgTQueue<PgMsg::Frame>::Remove(PgTQueue<PgMsg::Frame> *this, PgMsg::Frame *result);
void __thiscall PgTQueue<PgMsg>::Add(PgTQueue<PgMsg> *this, PgMsg element);
PgMsg *__thiscall PgTQueue<PgMsg>::Remove(PgTQueue<PgMsg> *this, PgMsg *result);
void *__thiscall NiTPointerListBase<DFALL<SpScreenText__>_SpScreenText__>::RemoveHead(NiTPointerListBase<NiTPointerAllocator<unsigned int>,void *> *this);
void __thiscall PgTQueue<PgMsg::Frame>::Realloc(PgTQueue<PgMsg::Frame> *this, unsigned int uiNewSize);
void __thiscall PgTQueue<PgMsg>::Realloc(PgTQueue<PgMsg> *this, unsigned int uiNewSize);
PgMsg *__thiscall PgMsg::operator_(PgMsg *this, PgMsg *kPgMsg);
void __thiscall PgTQueue<PgMsg>::PgTQueue<PgMsg>(PgTQueue<PgMsg> *this, unsigned int uiInitialSize);
void __thiscall NiTPointerMap<void___PgFrameWork__>::_NiTPointerMap<void___PgFrameWork__>(NiTPointerMap<void *,PgFrameWork *> *this);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this);
void __thiscall PgTList<void__>::_PgTList<void__>(PgTList<void *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, unsigned int);
void *__thiscall NiTPointerMap<void___PgFrameWork__>::_vector_deleting_destructor_(NiTPointerMap<void *,PgFrameWork *> *this, unsigned int);
void *__thiscall PgTList<void__>::_scalar_deleting_destructor_(PgTList<void *> *this, unsigned int);
void __thiscall PgWinFrame::PgWinFrame(PgWinFrame *this);
void *__thiscall PgWinFrame::_scalar_deleting_destructor_(PgWinFrame *this, unsigned int);
void __thiscall PgWinFrame::_PgWinFrame(PgWinFrame *this);
void __thiscall PgWinFrame::SetFrameWork(PgWinFrame *this, PgFrameWork *pkFrameWork);
void __thiscall PgWinFrame::ProcessMeInput(PgWinFrame *this, bool *bHit);
bool __thiscall PgWinFrame::Create(PgWinFrame *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgFrameWork *pkFrameWork, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinFrame::Create(PgWinFrame *this, int iXPos, int iYPos, NiSourceTexture *pkTexture, bool bMakeHitTestBuff, unsigned int uiTexelX, unsigned int uiTexelY, unsigned int uiTexelWidth, unsigned int uiTexelHeight, PgWin *pkParent, PgFrameWork *pkFrameWork, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinFrame::Create(PgWinFrame *this, int iXPos, int iYPos, PgWin *pkParent, PgFrameWork *pkFrameWork, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinFrame::GetLeftLike(PgWinFrame *this);
bool __thiscall PgWinFrame::GetTopLike(PgWinFrame *this);
bool __thiscall PgWinFrame::GetRightLike(PgWinFrame *this);
bool __thiscall PgWinFrame::GetBottomLike(PgWinFrame *this);
void __thiscall PgWinFrame::ResetAttachPos(PgWinFrame *this);
void __thiscall PgWinFrame::LikeMoveWin(PgWinFrame *this, int iXPos, int iYPos);
void __thiscall PgWinFrame::SendDirectMessage(PgWinFrame *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall PgWinFrame::DirectDispatchToParent(PgWinFrame *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
PgWin *__cdecl PgWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcWinText, unsigned int uiExtStyle);
void __thiscall PgWin::ProcessMeInput(PgWin *this, bool *bHit);
void __thiscall PgWin::EnableChildButWin(PgWin *this, bool b);
void __thiscall PgWin::PgWin(PgWin *this);
void *__thiscall PgWin::_scalar_deleting_destructor_(PgWin *this, unsigned int);
void __thiscall PgWin::EnableOpenCloseSound(PgWin *this, bool bEnable);
void __thiscall PgWin::SetTopWin(PgWin *this);
void __thiscall PgWin::OnShowWin(PgWin *this);
void __thiscall PgWin::OnClose(PgWin *this);
bool __thiscall PgWin::Create(PgWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
void __thiscall PgWin::_PgWin(PgWin *this);
void __thiscall PgWin::ProcessMsg(PgWin *this, unsigned int Msg, unsigned int wParam, int lParam);
bool __thiscall PgWin::PostMsg(PgWin *this, PgWin *pkWin, unsigned int Msg, unsigned int wParam, int lParam);
bool __thiscall PgWin::SendMsg(PgWin *this, PgWin *pkWin, unsigned int Msg, unsigned int wParam, int lParam);
bool __thiscall PgWin::PostCommandMsg(PgWin *this, PgWin *pkWin, unsigned int wParam, int lParam);
void __thiscall PgWin::OnVisible(PgWin *this, NiCullingProcess *kCuller);
void __thiscall PgWin::CompactChildArray(PgWin *this, unsigned int uiSize);
void __thiscall PgWin::SetToolTipWinText(PgWin *this, char *pcText);
void __thiscall PgWin::OnFirstHitWin(PgWin *this);
void __thiscall PgWin::AdjustPosIfIamToolTipWin(PgWin *this);
void __thiscall PgWin::DirectDispatchToChildren(PgWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall PgWin::DirectDispatchToParent(PgWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom);
void __thiscall PgWin::RemoveAllChildWin(PgWin *this);
void __thiscall PgWin::SetCursor(PgWin *this);
bool __thiscall PgWin::ProcessChildDrop(PgWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
bool __thiscall PgWin::ProcessDrop(PgWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos);
bool __thiscall PgWin::IsVisible(PgWin *this);
bool __thiscall PgWin::ProcessChildInput(PgWin *this);
bool __thiscall PgWin::ProcessInput(PgWin *this);
void __thiscall PgNet::OnConnectLost(PgWin *this);
void __thiscall PgWin::ReleaseChildInput(PgWin *this);
void __thiscall PgWin::ReleaseInput(PgWin *this);
PgWin *__thiscall PgWin::GetLastChildWinIndex(PgWin *this, int *iPos);
PgWin *__thiscall PgWin::GetPreChildWin(PgWin *this, int *iPos);
void __thiscall NiTArray<NiPointer<NiAVObject>>::Compact(NiTArray<NiPointer<NiAVObject> > *this);
void __thiscall NiTArray<NiPointer<NiAVObject>>::UpdateSize(NiTArray<NiPointer<NiAVObject> > *this);
void *__thiscall PgWin::Bool::_vector_deleting_destructor_(PgWin::Bool *this, unsigned int);
void __thiscall PgWinSpr::PgWinSpr(PgWinSpr *this);
void *__thiscall PgWinSpr::_vector_deleting_destructor_(PgWinSpr *this, unsigned int);
void __thiscall PgWinSpr::_PgWinSpr(PgWinSpr *this);
PgWinSpr *__cdecl PgWinSpr::CreateWin(NiSourceTexture *pkTexture, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
PgWinSpr *__cdecl PgWinSpr::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
PgWinSpr *__cdecl PgWinSpr::CreateWin(int iXPos, int iYPos, NiSourceTexture *pkTexture, bool bMakeHitTestBuff, unsigned int uiTexelX, unsigned int uiTexelY, unsigned int uiTexelWidth, unsigned int uiTexelHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
PgWinSpr *__cdecl PgWinSpr::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinSpr::Create(PgWinSpr *this, NiSourceTexture *pkTexture, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinSpr::Create(PgWinSpr *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinSpr::Create(PgWinSpr *this, int iXPos, int iYPos, NiSourceTexture *pkTexture, bool bMakeHitTestBuff, unsigned int uiTexelX, unsigned int uiTexelY, unsigned int uiTexelWidth, unsigned int uiTexelHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinSpr::Create(PgWinSpr *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinSpr::SelectSpr(PgWinSpr *this, unsigned int uiIndex);
void __thiscall PgWinSpr::UnSelectSpr(PgWinSpr *this);
void __thiscall PgWinText::PgWinText(PgWinText *this);
void *__thiscall PgWinText::_scalar_deleting_destructor_(PgWinText *this, unsigned int);
void __thiscall PgWinText::_PgWinText(PgWinText *this);
PgWinText *__cdecl PgWinText::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinText::Create(PgWinText *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
unsigned int __cdecl PgWinText::SetArrayText(PgWinText **ppkTextWin, unsigned int uiTextWinCount, char *pcText);
void __thiscall PgWinText::SetAlpha(PgWinText *this, float fAlpha);
float __thiscall PgWinText::GetAlpha(PgWinText *this);
bool __thiscall PgWinText::GetTextSize(PgWinText *this, tagSIZE *kSize);
void __thiscall PgWinText::SetWidth(PgWinText *this, unsigned int uiWidth);
void __thiscall PgWinText::SetHeight(PgWinText *this, unsigned int uiHeight);
void __thiscall PgWinText::SetMultilineText(PgWinText *this, char *pcText, int iVerticalGap);
void __cdecl PgUtil::WhileSpace(char **rpcStr);
int __cdecl PgUtil::StringPixelCopy(char *pdest, char *psrc, HDC__ *hDC, int max_pixel);
NiTimeController *__cdecl PgUtil::GetControllerWithChild(NiAVObject *pkObject, NiRTTI *pkRTTI);
NiProperty *__cdecl PgUtil::GetPropertyWithChild(NiAVObject *pkObject, int iType);
void __cdecl PgUtil::RemovePropWithChild(NiAVObject *pkObject, int iType);
bool __cdecl PgUtil::CatchGeometry(NiAVObject *pkObject, NiGeometry **pkGeometry);
NiScreenElementsData *__cdecl PgUtil::CreateScreenGeometryData(unsigned int uiTextureWidth, unsigned int uiTextureHeight, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight);
NiScreenElementsData *__cdecl PgUtil::CreateScreenGeometryData(unsigned int uiWidth, unsigned int uiHeight);
NiSourceTexture *__cdecl PgUtil::Create1PixelSourceTexture(char R, char G, char B, char A);
NiNode *__cdecl PgUtil::LoadNifFile(const char *pcFileName, NiTexturePalette *pTexturePalette, bool bAssertOnFail);
bool __cdecl PgUtil::LoadNodeNifFile(const char *pcFileName, NiPointer<NiNode> *spNode, NiTexturePalette *pTexturePalette);
void __cdecl PgUtil::TurnOnLightsInNode(NiAVObject *pkObject, bool bTurnOn);
NiScreenElementsData *__cdecl PgUtil::CreateScreenGeometryDataFromTriShapeData(NiTriShapeData *pkTriShapeData, int *iLeft, int *iTop, unsigned int *uiWidth, unsigned int *uiHeight, float fTransX, float fTransY);
bool __cdecl PgUtil::GetTriShapeRect(NiAVObject *pkAVObj, const char *pcTriShapeName, int *iLeft, int *iTop, unsigned int *uiWidth, unsigned int *uiHeight);
bool __cdecl PgUtil::CatchCamera(NiAVObject *pkObject, NiCamera **pkCamera);
bool __cdecl PgUtil::Get2DOrthoPosFrom3DPos(NiCamera *pkWorldCamera, float fScreenWidth, float fScreenHeight, NiPoint3 k3DPos, NiPoint3 *k2DOrthoPos);
DIRECT3DTEXTURE9 *__cdecl PgUtil::GetDxTextureFrom(NiTexture *pkTex);
void __thiscall PgWinCullingProcess::PgWinCullingProcess(PgWinCullingProcess *this, NiVisibleArray *pkVisibleSet);
void *__thiscall PgWinCullingProcess::_vector_deleting_destructor_(PgWinCullingProcess *this, unsigned int);
void __thiscall PgWinCullingProcess::_PgWinCullingProcess(PgWinCullingProcess *this);
void __thiscall PgWinCullingProcess::Process(PgWinCullingProcess *this, NiCamera *pkCamera, NiAVObject *pkScene, NiVisibleArray *pkVisibleSet);
void __thiscall PgWinCullingProcess::Process(PgWinCullingProcess *this, NiAVObject *pkObject);
void __thiscall PgWinMgr::PgWinMgr(PgWinMgr *this);
void *__thiscall PgWinMgr::_scalar_deleting_destructor_(PgWinMgr *this, unsigned int);
void *__thiscall NiTPointerList<NiPointer<PgWin>>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, unsigned int);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>::NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this);
void __thiscall PgWinMgr::_PgWinMgr(PgWinMgr *this);
bool __thiscall PgWinMgr::PgInit(PgWinMgr *this);
void __thiscall PgWinMgr::PgTerminate(PgWinMgr *this);
bool __thiscall PgWinMgr::SetTopWin(PgWinMgr *this, PgWin *pkWin);
PgWin *__thiscall PgWinMgr::GetTopWin(PgWinMgr *this);
bool __thiscall PgWinMgr::ShowWin(PgWinMgr *this, PgWin *pkWin);
bool __thiscall PgWinMgr::ShowWinAtAbsoluteNear(PgWinMgr *this, PgWin *pkWin);
bool __thiscall PgWinMgr::ShowWinAtAbsoluteFar(PgWinMgr *this, PgWin *pkWin);
void __thiscall PgWinMgr::Call_OnCloseForSubWin(PgWinMgr *this, PgWin *pkWin);
bool __thiscall PgWinMgr::CloseWin(PgWinMgr *this, PgWin *pkWin);
void __thiscall PgWinMgr::CloseAllWin(PgWinMgr *this);
void __thiscall PgWinMgr::SetScreenInfo(PgWinMgr *this, NiRenderer *pkRenderer);
void __thiscall PgWinMgr::DispatchMessageA(PgWinMgr *this);
void __thiscall PgWinMgr::DirectDispatchAllWin(PgWinMgr *this, int iMsgTag, void *pvBody);
void __thiscall PgWinMgr::ProcessInput(PgWinMgr *this, bool bUpdateMouse);
void __thiscall PgWinMgr::UpdateWin(PgWinMgr *this, float fCurTime);
void __thiscall PgWinMgr::Draw(PgWinMgr *this, NiRenderer *pkRenderer);
bool __thiscall PgWinMgr::DoModal(PgWinMgr *this, PgWin *pkModalWin, unsigned int Msg, unsigned int wParam, int lParam);
void __thiscall PgWinMgr::DestroyWin(PgWinMgr *this, PgWin *pkWin);
void __thiscall PgWinMgr::DestroyAllWin(PgWinMgr *this);
void __thiscall PgWinMgr::OpenPopupWin(PgWinMgr *this, PgWin *pkParent, PgWin *pkWin);
void __thiscall PgWinMgr::ClosePopupWin(PgWinMgr *this, PgWin *pkWin);
void __thiscall PgWinMgr::UpdateFSEffect(PgWinMgr *this, float fTime);
void __thiscall PgWinMgr::StartFullScreenEffect(PgWinMgr *this, float fTime, NiAVObject *pEffect);
void __thiscall PgWinMgr::ClearFullScreenEffect(PgWinMgr *this, float fTime);
bool __thiscall PgWinMgr::IsIn(PgWinMgr *this, PgWin *pkWin);
PgWin *__thiscall PgWinMgr::Find(PgWinMgr *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > kWinName);
void __thiscall PgTList<PgWin__>::MoveToTail(PgTList<PgWin *> *this, PgWin *const *element);
void __thiscall PgTQueue<PgWinMgr::PgWinMsg>::PgTQueue<PgWinMgr::PgWinMsg>(PgTQueue<PgWinMgr::PgWinMsg> *this, unsigned int uiInitialSize);
void __thiscall PgTQueue<PgWinMgr::PgWinMsg>::_PgTQueue<PgWinMgr::PgWinMsg>(StrBuffer *this);
unsigned int __thiscall PgTQueue<PgMsg>::GetSize(PgTQueue<PgMsg> *this);
PgWinMgr::PgWinMsg *__thiscall PgTQueue<PgWinMgr::PgWinMsg>::GetAt(PgTQueue<PgWinMgr::PgWinMsg> *this, unsigned int uiIndex);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::AddNodeHead(NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, NiTListItem<PgWin *> *pkNode);
void __thiscall PgWinCamera::CompactChildArray(PgWinCamera *this, unsigned int uiSize);
bool __thiscall PgWinMgr::AddInShow(PgWinMgr *this, PgWin *pkWin);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this);
void __thiscall NiTPointerList<NiPointer<PgWin>>::_NiTPointerList<NiPointer<PgWin>>(NiTPointerList<NiPointer<PgWin> > *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>::DeleteItem(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiTListItem<NiPointer<PgWin> > *pkItem);
void __thiscall PgTList<NiPointer<PgWin>>::_PgTList<NiPointer<PgWin>>(PgTList<NiPointer<PgWin> > *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::InsertBefore(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, void *kPos, PgWin *const *element);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWin>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, unsigned int);
void *__thiscall PgTList<NiPointer<PgWin>>::_scalar_deleting_destructor_(PgTList<NiPointer<PgWin> > *this, unsigned int);
PgSprData *__cdecl PgSprData::Create(NiSourceTexture *pkTexture, bool bMakeHitTestBuff, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight);
PgSprData *__cdecl PgSprData::Create(NiSourceTexture *pkTexture, bool bMakeHitTestBuff, NiRect<unsigned int> *pkRect, unsigned int uiNumSets);
PgSprData *__cdecl PgSprData::Create(NiAVObject *pkObject, const char *pcTriShapeName, int *iLeft, int *iTop, NiSourceTexture *pkTexture);
void __thiscall PgSprData::SetTexture(PgSprData *this, NiSourceTexture *pkTexture);
void __thiscall PgSprData::Add(PgSprData *this, NiScreenElementsData *pkGeomData, unsigned int uiWidth, unsigned int uiHeight, int iXPos, int iYPos, bool bMakeHitTestBuff);
bool __thiscall PgSprData::Add(PgSprData *this, NiAVObject *pkObject, const char *pcTriShapeName);
void __thiscall PgSprData::PgSprData(PgSprData *this);
void *__thiscall PgSprData::_scalar_deleting_destructor_(PgSprData *this, unsigned int);
void __thiscall PgSprData::_PgSprData(PgSprData *this);
unsigned int __thiscall PgSprData::GetChangedWidth(PgSprData *this, unsigned int uiIndex);
unsigned int __thiscall PgSprData::GetChangedHeight(PgSprData *this, unsigned int uiIndex);
bool __thiscall PgSprData::ChangeWidthWithNoUpdate(PgSprData *this, unsigned int uiIndex, unsigned int uiWidth, bool bReverse);
bool __thiscall PgSprData::ChangeWidth(PgSprData *this, unsigned int uiIndex, unsigned int uiWidth);
bool __thiscall PgSprData::ChangeHeightWithNoUpdate(PgSprData *this, unsigned int uiIndex, unsigned int uiHeight, bool bReverse);
bool __thiscall PgSprData::ChangeHeight(PgSprData *this, unsigned int uiIndex, unsigned int uiHeight);
void __thiscall PgSprData::ResetChangedWidth(PgSprData *this, unsigned int uiIndex);
void __thiscall PgSprData::ResetChangedHeight(PgSprData *this, unsigned int uiIndex);
bool __thiscall PgSprData::ChangeWidthWithUV(PgSprData *this, unsigned int uiIndex, unsigned int uiWidth, bool bReverse);
bool __thiscall PgSprData::ChangeHeightWithUV(PgSprData *this, unsigned int uiIndex, unsigned int uiHeight, bool bReverse);
char *__cdecl PgSprData::PgHitTester::CreateHitTestBuffRGBA(NiPixelData *pkPixels, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight);
PgSprData::PgHitTester *__cdecl PgSprData::PgHitTester::CreatePgHitTestBuff(NiPixelData *pkPixels, bool bMakeBuff, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight);
PgSprData::PgHitTester *__cdecl PgSprData::PgHitTester::CreatePgHitTestBuff(NiPixelData *pkPixels, bool bMakeBuff, NiRect<unsigned int> *pkRect, unsigned int uiNumSets);
void __thiscall PgSpr::PgSpr(PgSpr *this, PgSprData *pkSprData);
void *__thiscall PgSpr::_scalar_deleting_destructor_(PgSpr *this, unsigned int);
void __thiscall PgSpr::_PgSpr(PgSpr *this);
void __thiscall PgSpr::SetTexture(PgSpr *this, NiTexture *pkTex);
NiTexture *__thiscall PgSpr::GetTexture(PgSpr *this);
void __thiscall NiTArray<NiPointer<NiScreenElementsData>>::NiTArray<NiPointer<NiScreenElementsData>>(NiTArray<NiPointer<NiScreenElementsData> > *this, unsigned int uiMaxSize, unsigned int uiGrowBy);
void __thiscall NiTArray<NiPointer<PgSprData::PgHitTester>>::NiTArray<NiPointer<PgSprData::PgHitTester>>(NiTArray<NiPointer<PgSprData::PgHitTester> > *this, unsigned int uiMaxSize, unsigned int uiGrowBy);
void __thiscall NiTArray<NiPointer<NiAlphaProperty>>::NiTArray<NiPointer<NiAlphaProperty>>(NiTArray<NiPointer<NiAlphaProperty> > *this, unsigned int uiMaxSize, unsigned int uiGrowBy);
void __thiscall NiTArray<NiPointer<NiScreenElementsData>>::SetSize(NiTArray<NiPointer<PgSprData::PgHitTester> > *this, unsigned int uiMaxSize);
void __thiscall PgSprData::Add(PgSprData *this, NiAlphaProperty *pkAlphaProperty);
void __thiscall PgSprData::PgHitTester::PgHitTester(PgSprData::PgHitTester *this, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight, char *pucBuff, NiPoint2 *pkUVs);
void *__thiscall PgSprData::PgHitTester::_vector_deleting_destructor_(PgSprData::PgHitTester *this, unsigned int);
void __thiscall NiTArray<NiPointer<NiScreenElementsData>>::_NiTArray<NiPointer<NiScreenElementsData>>(NiTArray<NiPointer<NiScreenElementsData> > *this);
void __thiscall NiTArray<NiPointer<PgSprData::PgHitTester>>::_NiTArray<NiPointer<PgSprData::PgHitTester>>(NiTArray<NiPointer<PgSprData::PgHitTester> > *this);
unsigned int __thiscall NiTArray<NiPointer<NiAlphaProperty>>::Add(NiTArray<NiPointer<NiAlphaProperty> > *this, NiPointer<NiAlphaProperty> *element);
void *__thiscall NiTArray<NiPointer<NiScreenElementsData>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiScreenElementsData> > *this, unsigned int);
void *__thiscall NiTArray<NiPointer<PgSprData::PgHitTester>>::_scalar_deleting_destructor_(NiTArray<NiPointer<PgSprData::PgHitTester> > *this, unsigned int);
void *__thiscall NiPointer<NiScreenElementsData>::_vector_deleting_destructor_(NiPointer<PgSprData::PgHitTester> *this, unsigned int);
void *__thiscall NiTArray<NiPointer<NiAlphaProperty>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiAlphaProperty> > *this, unsigned int);
void __thiscall NiTArray<NiPointer<NiAlphaProperty>>::SetSize(NiTArray<NiPointer<NiAlphaProperty> > *this, unsigned int uiMaxSize);
void __thiscall NiTArray<NiPointer<PgSprData::PgHitTester>>::SetAt(NiTArray<NiPointer<NiAlphaProperty> > *this, unsigned int uiIndex, NiPointer<NiAlphaProperty> *element);
void __thiscall NiPointer<PgSprData::PgHitTester>::_default_constructor_closure_(NiPointer<NiAlphaProperty> *this);
void __thiscall PgWinBut::PgWinBut(PgWinBut *this);
void *__thiscall PgWinBut::_scalar_deleting_destructor_(PgWinBut *this, unsigned int);
void __thiscall PgWinBut::_PgWinBut(PgWinBut *this);
PgWinBut *__cdecl PgWinBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
PgWinBut *__cdecl PgWinBut::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinBut::Create(PgWinBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinBut::Create(PgWinBut *this, int iXPos, int iYPos, NiSourceTexture *pkTexture, bool bMakeHitTestBuff, NiRect<unsigned int> *pkRect, unsigned int uiNumSets, PgWin *pkParent, unsigned int uiCmdMsg);
bool __thiscall PgWinBut::Create(PgWinBut *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
void __thiscall PgWinBut::ProcessMeInput(PgWinBut *this, bool *bHit);
void __thiscall PgWinBut::ReleaseMeInput(PgWinBut *this);
bool __thiscall CBucketBlock::Init(CBucketBlock *this, unsigned int dwSize);
FontBucket *__thiscall CBucketBlock::AllocBucket(CBucketBlock *this);
void __thiscall CBucketBlock::CBucketBlock(CBucketBlock *this);
void __thiscall CBucketBlock::_CBucketBlock(CBucketBlock *this);
void __thiscall CBucketPool::CBucketPool(CBucketPool *this, unsigned int dwBlockUnit);
void *__thiscall NiTPointerListBase<DFALL<CBucketBlock__>_CBucketBlock__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<CBucketBlock *>,CBucketBlock *> *this, unsigned int);
void __thiscall CBucketPool::_CBucketPool(CBucketPool *this);
void __thiscall NiTList<CBucketBlock__>::_NiTList<CBucketBlock__>(NiTList<CBucketBlock *> *this);
CBucketBlock *__thiscall CBucketPool::CreateBlock(CBucketPool *this);
FontBucket *__thiscall CBucketPool::AllocBucket(CBucketPool *this);
FontBucket *__thiscall CBucketBuffer::AllocBucket(CBucketBuffer *this, tagSIZE *rkSize);
void __thiscall CBucketBuffer::CBucketBuffer(CBucketBuffer *this);
void __thiscall CBucketBuffer::_CBucketBuffer(CBucketBuffer *this);
NiPointer<NiSourceTexture> *__thiscall CBucketBuffer::GetTexture(CBucketBuffer *this, NiPointer<NiSourceTexture> *result, unsigned int dwIndex);
bool __thiscall CBucketBuffer::Init(CBucketBuffer *this, unsigned int dwMaxTexture, unsigned int dwTexSize);
FontBucket *__thiscall CBucketBuffer::LoadFont(CBucketBuffer *this, FontRenderStuff *rkFontStuff, char *acStr, unsigned int dwOutlineOffset);
void __thiscall CBucketBuffer::LoadFontToBucket(CBucketBuffer *this, FontRenderStuff *rkFontStuff, char *acStr, int iStrLen, FontBucket *pkBucket);
void __thiscall CBucketBuffer::LoadFontToBucket(CBucketBuffer *this, FontRenderStuff *rkFontStuff, char *acStr, int iStrLen, FontBucket *pkBucket, unsigned int dwOutlineOffset);
void __thiscall CBucketBuffer::Shutdown(CBucketBuffer *this);
FontBucket *__thiscall CBucketBuffer::AskFont(CBucketBuffer *this, char *acStr, FontRenderStuff *rkFontStuff, unsigned int dwOutlineOffset);
void __thiscall CSpFont::CSpFont(CSpFont *this);
void *__thiscall CSpFont::_vector_deleting_destructor_(CSpFont *this, unsigned int);
void *__thiscall NiTPointerListBase<DFALL<SpScreenText__>_SpScreenText__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<SpScreenText *>,SpScreenText *> *this, unsigned int);
void __thiscall CSpFont::_CSpFont(CSpFont *this);
void __thiscall NiTList<SpScreenText__>::_NiTList<SpScreenText__>(NiTList<SpScreenText *> *this);
bool __thiscall CSpFont::Create(CSpFont *this, char *acFontName, int iFontHeight, int iFontWidth, int iWeight, unsigned int dwItalic, unsigned int dwCharSet, unsigned int dwOutputPrecision, unsigned int dwQuality, unsigned int dwPitchAndFamily, unsigned int dwOutlineOffset, unsigned int dwTextureSize, unsigned int dwMaxTexture);
FontBucket *__thiscall CSpFont::AskFont(CSpFont *this, char *acChar, FontRenderStuff *rkStuff);
int __cdecl GetHorzOffset(int iAlign, int iTotalWidth, int iWidth);
char *__thiscall CSpFont::SplitStrByPixelSize(CSpFont *this, char *pcStr, int iPixelSize, bool bTextCmdOn);
CSpFont::AddFontPassResult __thiscall CSpFont::AddFontRenderPass(CSpFont *this, ScrTexturePass *pkScrText, int iMaxPass, tagRECT *rkRect, char *acStr, NiColorA *rkColor, bool bAutoWordWrap, bool bTextCmdOn, int iDrawOffsetX, int iDrawOffsetY, int iTextAlign, int iLineGap);
unsigned int __thiscall CSpFont::CalcMaxPass(CSpFont *this);
void __thiscall CSpFont::RegisterScrText(CSpFont *this, SpScreenText *pkScreenText);
void __thiscall CSpFont::UnregisterScrText(CSpFont *this, SpScreenText *pkScreenText);
void __thiscall CSpFont::RecreateRegisterdText(CSpFont *this);
bool __thiscall CSpFont::GetTextSize(CSpFont *this, char *pcStr, int iTextSize, tagSIZE *rkSize, int iLineGap, bool bAutoWordWrap, bool bTextCmdOn, tagRECT *pkDrawRect);
bool __thiscall CSpFont::GetCursorPosOnText(CSpFont *this, char *pcText, int iCursorPos, tagPOINT *rkPos, int iLineGap, bool bAutoWordWrap, bool bTextCmdOn, tagRECT *pkDrawRect, int iTextAlign);
bool __thiscall CSpFont::GetCursorPosOnTextByRightAlign(CSpFont *this, char *pcText, int iCursorPos, tagPOINT *rkPos, int iLineGap, tagRECT *pkDrawRect);
CSpFont::AddFontPassResult __thiscall CSpFont::AddImeFontRenderPass(CSpFont *this, ScrTexturePass *pkScrText, int iMaxPass, tagRECT *rkRect, char *acStr, NiColorA *rkColor, char *acCompStr, NiColorA *rkCompStrColor, NiColorA *rkCandStrColor, int iCompStrPos, char *pbComStrAttr, bool bAutoWordWrap, int iDrawOffsetX, int iDrawOffsetY, int iTextAlign, int iLineGap);
bool __thiscall CSpFont::GetCandStrPos(CSpFont *this, int *iCandStrXPos, int *iCandStrYPos, int iMaxPass, tagRECT *rkRect, char *acStr, char *acCompStr, int iCompStrPos, char *pbComStrAttr, bool bAutoWordWrap, int iDrawOffsetX, int iDrawOffsetY, int iTextAlign, int iLineGap);
bool __thiscall CSpFont::IsNextWordThisLineInsert(CSpFont *this, const char *pkStr, int nSize);
void __thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this, unsigned int uiHashSize);
void __thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::SetAt(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this, unsigned __int16 key, FontBucket *val);
bool __thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::GetAt(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this, unsigned __int16 key, FontBucket **val);
SpScreenText *__thiscall NiTPointerListBase<DFALL<SpScreenText__>_SpScreenText__>::Remove(NiTPointerListBase<DFALL<SpScreenText *>,SpScreenText *> *this, SpScreenText *const *element);
void __thiscall NiTPointerListBase<DFALL<int>_int>::AddTail(NiTPointerListBase<DFALL<int>,int> *this, const int *element);
SpScreenText *__thiscall NiTPointerListBase<DFALL<SpScreenText__>_SpScreenText__>::RemovePos(NiTPointerListBase<DFALL<SpScreenText *>,SpScreenText *> *this, void **kPos);
void __thiscall NiTListBase<DFALL<CBucketBlock__>_CBucketBlock__>::AddNodeTail(NiTListBase<NiTPointerAllocator<unsigned int>,void *> *this, NiTListItem<void *> *pkNode);
SpScreenText *__thiscall NiTPointerListBase<DFALL<CBucketBlock__>_CBucketBlock__>::RemoveTail(NiTPointerListBase<DFALL<SpScreenText *>,SpScreenText *> *this);
void __thiscall NiTListBase<DFALL<CBucketBlock__>_CBucketBlock__>::_NiTListBase<DFALL<CBucketBlock__>_CBucketBlock__>(NiTListBase<DFALL<CBucketBlock *>,CBucketBlock *> *this);
unsigned int __thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::KeyToHashIndex(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this, unsigned __int16 key);
bool __thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::IsKeysEqual(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this, unsigned __int16 key1, unsigned __int16 key2);
void __thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::SetValue(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this, NiTMapItem<unsigned short,FontBucket *> *pkItem, unsigned __int16 key, FontBucket *val);
void __thiscall NiTMap<unsigned_short_FontBucket__>::_NiTMap<unsigned_short_FontBucket__>(NiTMap<unsigned short,FontBucket *> *this);
void __thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::_NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this);
NiTListItem<SpScreenText *> *__thiscall NiTPointerListBase<DFALL<CBucketBlock__>_CBucketBlock__>::NewItem(NiTPointerListBase<DFALL<SpScreenText *>,SpScreenText *> *this);
void __thiscall NiTMap<HWND_____PgEditWin__>::DeleteItem(NiTPointerListBase<DFALL<SpScreenText *>,SpScreenText *> *this, NiTListItem<SpScreenText *> *pkItem);
void __thiscall NiTListBase<DFALL<SpScreenText__>_SpScreenText__>::_NiTListBase<DFALL<SpScreenText__>_SpScreenText__>(NiTListBase<DFALL<SpScreenText *>,SpScreenText *> *this);
void *__thiscall NiTListBase<DFALL<CBucketBlock__>_CBucketBlock__>::_vector_deleting_destructor_(NiTListBase<DFALL<CBucketBlock *>,CBucketBlock *> *this, unsigned int);
void *__thiscall NiTMapBase<DFALL<FontBucket__>_unsigned_short_FontBucket__>::_scalar_deleting_destructor_(NiTMapBase<DFALL<FontBucket *>,unsigned short,FontBucket *> *this, unsigned int);
void *__thiscall NiTMap<unsigned_short_FontBucket__>::_scalar_deleting_destructor_(NiTMap<unsigned short,FontBucket *> *this, unsigned int);
void *__thiscall NiTListBase<DFALL<SpScreenText__>_SpScreenText__>::_scalar_deleting_destructor_(NiTListBase<DFALL<SpScreenText *>,SpScreenText *> *this, unsigned int);
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiAudioSource__>::RemoveAll(NiTListBase<DFALL<SpScreenText *>,SpScreenText *> *this);
void __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::RemoveAll(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this);
bool __cdecl PgNet::PgInit();
int __cdecl PgNet::PgTerminate();
void __thiscall PgNet::PgNet(PgNet *this);
void *__thiscall PgNet::_vector_deleting_destructor_(PgNet *this, unsigned int);
void __thiscall PgNet::_PgNet(PgNet *this);
void __thiscall PgNet::SetAddress(PgNet *this, char *padd);
void __thiscall PgNet::SetPortA(PgNet *this, int n);
void __thiscall PgNet::Clear(PgNet *this);
bool __thiscall PgNet::Connect(PgNet *this);
bool __thiscall PgNet::Connect(PgNet *this, int a1, int a2, int a3, int a4, int port);
void __thiscall PgNet::Close(PgNet *this);
void __thiscall PgNet::AddNetMsg(PgNet *this, void *pdata, int data_length);
void __thiscall PgNet::SendNetMsg(PgNet *this, void *pdata, int data_length);
bool __thiscall PgNet::Flush(PgNet *this);
void __thiscall PgNet::DispatchMsg(PgNet *this, PgFrameWork *pkFrameWork, unsigned int uiLoopCount);
void __thiscall PgNet::StopDispatchMsg(PgNet *this);
void __thiscall PgNet::ContinueDispatchMsg(PgNet *this);
void __thiscall PgNet::Update(PgNet *this, float fCurTime);
int __thiscall PgNet::RevNetMsg(PgNet *this);
bool __thiscall PgNet::ProcessNetMsg(PgNet *this, int iDepart, int iCommand, int iRevBytes, void *pvData);
int __thiscall PgNet::GetConnectError(PgNet *this);
int __thiscall PgNet::GetSelectError(PgNet *this);
void __thiscall PgNet::SetSendPacketMode(PgNet *this, bool b);
void __thiscall PgFont::PgFont(PgFont *this);
void *__thiscall PgFont::_scalar_deleting_destructor_(PgFont *this, unsigned int);
void __thiscall PgFont::_PgFont(PgFont *this);
void __thiscall PgFont::GetCursorPosOnText(PgFont *this, char *pcText, int iCursorPos, tagPOINT *rkPos, int iLineGap, bool bAutoWordWrap, bool bTextCmdOn, tagRECT *pkDrawRect, int iTextAlign);
void __thiscall SpScreenGeometryClip::SetClipEnable(SpScreenGeometryClip *this, bool bEnable);
void __thiscall SpScreenGeometryClip::RenderImmediate(SpScreenGeometryClip *this, NiRenderer *pkRenderer);
void __thiscall SpScreenGeometryClip::SpScreenGeometryClip(SpScreenGeometryClip *this, NiScreenElementsData *pkModelData);
void *__thiscall SpScreenGeometryClip::_vector_deleting_destructor_(SpScreenGeometryClip *this, unsigned int);
void __thiscall SpScreenGeometryClip::_SpScreenGeometryClip(SpScreenGeometryClip *this);
void __thiscall SpScreenGeometryClip::SetRect(SpScreenGeometryClip *this, tagRECT *pkRect);
void __thiscall SpScreenText::SpScreenText(SpScreenText *this, const char *pcString);
void *__thiscall SpScreenText::_vector_deleting_destructor_(SpScreenText *this, unsigned int);
void __thiscall SpScreenText::_SpScreenText(SpScreenText *this);
void *__thiscall ScrTexturePass::_vector_deleting_destructor_(ScrTexturePass *this, unsigned int);
void __thiscall SpScreenText::UpdateDownwardPass(SpScreenText *this, float fTime, bool bUpdateControllers);
void __thiscall SpScreenText::RecreateText(SpScreenText *this);
void __thiscall SpScreenText::SetColor(SpScreenText *this, NiColor *kNewColor);
NiColor *__thiscall SpScreenText::GetColor(SpScreenText *this, NiColor *result);
void __thiscall SpScreenText::SetAlpha(SpScreenText *this, float fAlpha);
float __thiscall SpScreenText::GetAlpha(SpScreenText *this);
void __thiscall SpScreenText::Init(SpScreenText *this, CSpFont *pkFont);
void __thiscall SpScreenText::InitPass(SpScreenText *this);
void __thiscall SpScreenText::SetShadowOffset(SpScreenText *this, unsigned int dwOffset);
void __thiscall SpScreenText::SetDrawRect(SpScreenText *this, tagRECT *rkRect);
void __thiscall SpScreenText::SetClipEnable(SpScreenText *this, bool bEnable);
void __thiscall SpScreenText::SetDrawRect(SpScreenText *this, int left, int top, int right, int bottom);
void __cdecl SpScreenText::SetCamera(NiCamera *pkCam);
NiCamera *__cdecl SpScreenText::GetCamera();
void __thiscall SpScreenText::SetVerticalGap(SpScreenText *this, int iGap);
bool __thiscall SpScreenText::AddImeFontRenderPass(SpScreenText *this, ScrTexturePass *pkScrText, int iMaxPass, tagRECT *rkRect, char *acStr, NiColorA *rkColor, char *acCompStr, NiColorA *rkCompStrColor, NiColorA *rkCandStrColor, int iCompStrPos, char *pbComStrAttr, bool bAutoWordWrap, int iDrawOffsetX, int iDrawOffsetY, int iTextAlign, int iLineGap);
void __thiscall ScrTexturePass::ScrTexturePass(ScrTexturePass *this);
void __thiscall ScrTexturePass::_ScrTexturePass(ScrTexturePass *this);
bool __thiscall SpScreenText::SetString(SpScreenText *this, const char *pcString);
void __thiscall StrBuffer::operator_(StrBuffer *this, const char *acSrc);
void __thiscall NiPointer<PgWinButExt>::_NiPointer<PgWinButExt>(NiPointer<SpScreenGeometryClip> *this);
void __thiscall PgWinLRBut::PgWinLRBut(PgWinLRBut *this);
void *__thiscall PgWinLRBut::_scalar_deleting_destructor_(PgWinLRBut *this, unsigned int);
void __thiscall PgWinLRBut::_PgWinLRBut(PgWinLRBut *this);
PgWinLRBut *__cdecl PgWinLRBut::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg);
bool __thiscall PgWinLRBut::Create(PgWinLRBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg);
bool __thiscall PgWinLRBut::Create(PgWinLRBut *this, int iXPos, int iYPos, NiSourceTexture *pkTexture, bool bMakeHitTestBuff, NiRect<unsigned int> *pkRect, unsigned int uiNumSets, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg);
bool __thiscall PgWinLRBut::Create(PgWinLRBut *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg);
void __thiscall PgWinLRBut::ProcessMeInput(PgWinLRBut *this, bool *bHit);
void __thiscall PgCursor::_PgCursor(PgCursor *this);
void __cdecl PgCursor::Shutdown();
bool __thiscall PgCursor::ResetScreenGeometry(PgCursor *this);
void __cdecl PgCursor::SetMaxCursorType(int iMaxType);
void __cdecl PgCursor::SetCursorInfo(int iIndex, int iHotSpotX, int iHotSpotY, int iTexOffLeft, int iTexOffTop);
int __thiscall PgCursor::SetType(PgCursor *this, int iType);
bool __thiscall PgCursor::SetImage(PgCursor *this, NiSourceTexture *pkTex);
PgCursor *__cdecl PgCursor::CreateFromTex(NiRenderer *pkRenderer, NiRect<int> *kRect, unsigned int uiFlags, int iType, NiSourceTexture *pkTex);
void __thiscall PgCursor::SetDxSurfaceCursor(PgCursor *this, IDirect3DSurface9 *pkDxSurface);
void __thiscall PgCursor::RecoverOriginalCursorTexture(PgCursor *this);
void __thiscall NiCursor::SetFlags(NiCursor *this, unsigned int uiFlags);
NiRTTI *__thiscall PgCursor::GetRTTI(PgCursor *this);
void __thiscall PgCursor::PgCursor(PgCursor *this, NiRenderer *pkRenderer);
void *__thiscall PgCursor::_scalar_deleting_destructor_(PgCursor *this, unsigned int);
void __cdecl PgExternalLib::EnableOpenSound(bool bEnable);
void __cdecl PgExternalLib::EnableCloseSound(bool bEnable);
void __thiscall PgProfileNode::PgProfileNode(PgProfileNode *this, const char *name, PgProfileNode *parent);
void __thiscall PgProfileNode::_PgProfileNode(PgProfileNode *this);
void __thiscall PgProfileNode::Reset(PgProfileNode *this);
PgProfileNode *__cdecl PgProfileMgr::StartTraversal();
PgProfileNode *__cdecl PgProfileMgr::GetNext(PgProfileNode *pkNode);
void __thiscall PgTQueue<PgProfileNode__>::Add(PgTQueue<PgProfileNode *> *this, PgProfileNode *element);
PgProfileNode *__thiscall PgTQueue<PgProfileNode__>::Remove(PgTQueue<PgProfileNode *> *this);
void __thiscall PgTQueue<PgProfileNode__>::Realloc(PgTQueue<PgProfileNode *> *this, unsigned int uiNewSize);
void __thiscall PgTQueue<PgProfileNode__>::PgTQueue<PgProfileNode__>(PgTQueue<PgProfileNode *> *this, unsigned int uiInitialSize);
NiTriShape *__cdecl BuildNonIndexTriShape(NiTriShape *pkSrcTriShape);
void __thiscall PgWinCircleGauge::PgWinCircleGauge(PgWinCircleGauge *this);
void *__thiscall PgWinCircleGauge::_vector_deleting_destructor_(PgWinCircleGauge *this, unsigned int);
void __thiscall PgWinCircleGauge::_PgWinCircleGauge(PgWinCircleGauge *this);
PgWinCircleGauge *__cdecl PgWinCircleGauge::CreateWin(int iXPos, int iYPos, NiTriShape *pkTriShape, PgWinCircleGauge::WindDir eDir, float fOrgAngle, float fMaxAngle, PgWin *pkParent);
bool __thiscall PgWinCircleGauge::Create(PgWinCircleGauge *this, int iXPos, int iYPos, NiTriShape *pkTriShape, PgWinCircleGauge::WindDir eDir, float fOrgAngle, float fMaxAngle, PgWin *pkParent);
unsigned int __cdecl FindVertIndex(NiPoint3 *pkVertices, unsigned int uiCount, bool bLeft, bool bTop);
void __thiscall PgWinCircleGauge::OnChangeValue(PgWinCircleGauge *this);
int loc_8DA6F3(); // weak
int loc_8DA773(); // weak
int loc_8DA815(); // weak
int loc_8DA8CF(); // weak
void __thiscall PgWinAbbreviateText::PgWinAbbreviateText(PgWinAbbreviateText *this);
void *__thiscall PgWinAbbreviateText::_vector_deleting_destructor_(PgWinAbbreviateText *this, unsigned int);
void __thiscall PgWinAbbreviateText::_PgWinAbbreviateText(PgWinAbbreviateText *this);
PgWinAbbreviateText *__cdecl PgWinAbbreviateText::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle, unsigned int uiVisiableMaxCharNums, bool bAutoAbbreviateText, PgWin *pkToolTipWin, unsigned int uiMarginSize);
bool __thiscall PgWinAbbreviateText::Create(PgWinAbbreviateText *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle, unsigned int uiVisiableMaxCharNums, bool bAutoAbbreviateText, PgWin *pkToolTipWin, unsigned int uiMarginSize);
void __thiscall PgWinAbbreviateText::SetText(PgWinAbbreviateText *this, const char *pcText);
int __thiscall PgWinAbbreviateText::StrLengthCount(PgWinAbbreviateText *this, const char *str);
void __thiscall PgWinAbbreviateText::AbbreviateTextCmd(PgWinAbbreviateText *this, char *pResult, char *pTarget, int nAbbreviationSize);
bool __thiscall PgWinAbbreviateText::CheckText(PgWinAbbreviateText *this, char *pText, char *pAddText, int offset, char *pResult);
void __thiscall PgWinAbbreviateText::ProcessMeInput(PgWinAbbreviateText *this, bool *bHit);
void __thiscall PgWinAbbreviateText::Abbreviate(PgWinAbbreviateText *this, char *pResult, char *pTarget, int nAbbreviationSize);
char *__thiscall PgWinAbbreviateText::GetText(PgWinAbbreviateText *this);
void __thiscall PgWinCloseBut::PgWinCloseBut(PgWinCloseBut *this);
void *__thiscall PgWinCloseBut::_scalar_deleting_destructor_(PgWinCloseBut *this, unsigned int);
void __thiscall PgWinCloseBut::_PgWinCloseBut(PgWinCloseBut *this);
PgWinCloseBut *__cdecl PgWinCloseBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent);
void __thiscall PgWinCloseBut::DoAction(PgWinCloseBut *this);
void __thiscall PgWinBar::PgWinBar(PgWinBar *this);
void *__thiscall PgWinBar::_scalar_deleting_destructor_(PgWinBar *this, unsigned int);
void __thiscall PgWinBar::_PgWinBar(PgWinBar *this);
PgWinBar *__cdecl PgWinBar::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgWinBar::BarGrowType eType);
PgWinBar *__cdecl PgWinBar::CreateWin(int iXPos, int iYPos, NiSourceTexture *pkTexture, bool bMakeHitTestBuff, unsigned int uiTexelX, unsigned int uiTexelY, unsigned int uiTexelWidth, unsigned int uiTexelHeight, PgWin *pkParent, PgWinBar::BarGrowType eType, char *pcName, unsigned int uiExtStyle);
void __thiscall PgWinEditText::PgWinEditText(PgWinEditText *this);
void *__thiscall PgWinEditText::_scalar_deleting_destructor_(PgWinEditText *this, unsigned int);
void __thiscall PgWinEditText::_PgWinEditText(PgWinEditText *this);
PgWinEditText *__cdecl PgWinEditText::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinEditText::Create(PgWinEditText *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
void __thiscall PgWinEditText::OnEditChange(PgWinEditText *this, unsigned int wParam, int lParam);
void __thiscall PgWinEditText::OnEditEnd(PgWinEditText *this, unsigned int wParam, int lParam);
void __thiscall PgWinEditText::OnEditError(PgWinEditText *this, unsigned int wParam, int lParam);
void __thiscall PgWinEditText::SetAutoAlign(PgWinEditText *this, bool bAutoAlign);
bool __thiscall PgWinEditText::GetAutoAlign(PgWinEditText *this);
PgEditWin *__cdecl PgEditWin::CreateWin(HINSTANCE__ *hInstance, HWND__ *pkParentWin, unsigned int uiStyle, unsigned int uiStopFlag, int iLimitLength, bool bClearTextOnEnd, tagRECT *pkRect, HFONT__ *hFont);
bool __thiscall PgEditWin::CallBack(PgEditWin *this, unsigned int message, unsigned int wParam, int lParam);
void __thiscall PgEditWin::LimitText(PgEditWin *this, int iLimitLength);
bool __thiscall PgEditWin::OnEnterKeyInput(PgEditWin *this);
bool __thiscall PgEditWin::OnEscKeyInput(PgEditWin *this);
bool __thiscall PgEditWin::OnTabKeyInput(PgEditWin *this);
void __thiscall PgEditWin::PgEditWin(PgEditWin *this);
void *__thiscall PgEditWin::_scalar_deleting_destructor_(PgEditWin *this, unsigned int);
void __thiscall PgEditWin::_PgEditWin(PgEditWin *this);
bool __thiscall PgEditWin::Create(PgEditWin *this, HINSTANCE__ *hInstance, unsigned int uiStyle, tagRECT *pkRect, HFONT__ *hFont);
ATOM __cdecl PgEditWin::RegisterClassA();
int __stdcall PgEditWin::DefCallBack(HWND__ *hWnd, unsigned int message, unsigned int wParam, int lParam);
void __thiscall PgEditWin::CopyTextToLastText(PgEditWin *this);
int __thiscall PgEditWin::GetCaretPos(PgEditWin *this);
void __thiscall PgEditWin::SetCaretPos(PgEditWin *this, int iPos);
bool __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::RemoveAt(NiTMapBase<DFALL<PgEditWin *>,HWND__ *,PgEditWin *> *this, HWND__ *key);
bool __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___PgFrameWork__>::GetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, void *key, PgFrameWork **val);
void __thiscall PgEditWin::SetFocus(PgEditWin *this);
char *__thiscall PgEditWin::GetText(PgEditWin *this);
void __thiscall PgEditWin::SetText(PgEditWin *this, const char *pcText);
void __thiscall PgEditWin::ClearText(PgEditWin *this);
char *__thiscall PgEditWin::GetLastText(PgEditWin *this);
void __thiscall PgEditWin::SetLastText(PgEditWin *this, char *pcText);
void __thiscall PgEditWin::ClearLastText(PgEditWin *this);
void __thiscall PgEditWin::ClearAllText(PgEditWin *this);
unsigned int __thiscall PgEditWin::GetStopFlag(PgEditWin *this);
void __thiscall PgEditWin::SetStopFlag(PgEditWin *this, unsigned int uiStopFlag);
bool __thiscall PgEditWin::GetClearTextOnEnd(PgEditWin *this);
void __thiscall PgEditWin::SetClearTextOnEnd(PgEditWin *this, bool b);
bool __thiscall PgEditWin::IsEnterKeyStop(PgEditWin *this);
bool __thiscall PgEditWin::IsEscKeyStop(PgEditWin *this);
bool __thiscall PgEditWin::IsTabKeyStop(PgEditWin *this);
void __thiscall PgEditWin::AttachWinText(PgEditWin *this, PgWinText *pkWinText);
void __thiscall PgEditWin::DetachWinText(PgEditWin *this);
void __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>(NiTMapBase<DFALL<PgEditWin *>,HWND__ *,PgEditWin *> *this, unsigned int uiHashSize);
unsigned int __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::KeyToHashIndex(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, void *key);
bool __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::IsKeysEqual(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, void *key1, void *key2);
void __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, NiTMapItem<void *,PgFrameWork *> *pkItem, void *key, PgFrameWork *val);
void __thiscall PgSocket::SocketError(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,PgFrameWork *> *this, NiTMapItem<void *,PgFrameWork *> *__formal);
void *__thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::_scalar_deleting_destructor_(NiTMapBase<DFALL<PgEditWin *>,HWND__ *,PgEditWin *> *this, unsigned int);
void *__thiscall NiTMap<HWND_____PgEditWin__>::_vector_deleting_destructor_(NiTMap<HWND__ *,PgEditWin *> *this, unsigned int);
void __thiscall NiTMap<HWND_____PgEditWin__>::_NiTMap<HWND_____PgEditWin__>(NiTMap<HWND__ *,PgEditWin *> *this);
void __thiscall NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>::_NiTMapBase<DFALL<PgEditWin__>_HWND_____PgEditWin__>(NiTMapBase<DFALL<PgEditWin *>,HWND__ *,PgEditWin *> *this);
void __thiscall PgWinPasswdText::PgWinPasswdText(PgWinPasswdText *this);
void *__thiscall PgWinPasswdText::_vector_deleting_destructor_(PgWinPasswdText *this, unsigned int);
void __thiscall PgWinPasswdText::_PgWinPasswdText(PgWinPasswdText *this);
PgWinPasswdText *__cdecl PgWinPasswdText::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinPasswdText::Create(PgWinPasswdText *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
void __thiscall PgTextGeometry::PgTextGeometry(PgTextGeometry *this, PgFont *pkFont);
void *__thiscall PgTextGeometry::_scalar_deleting_destructor_(PgTextGeometry *this, unsigned int);
void __thiscall PgTextGeometry::_PgTextGeometry(PgTextGeometry *this);
void __thiscall PgTextGeometry::SetText(PgTextGeometry *this, const char *pcText);
void __thiscall PgImeEditWin::PgImeEditWin(PgImeEditWin *this);
void *__thiscall PgImeEditWin::_vector_deleting_destructor_(PgImeEditWin *this, unsigned int);
void __thiscall PgImeEditWin::_PgImeEditWin(PgImeEditWin *this);
PgImeEditWin *__cdecl PgImeEditWin::CreateWin(HINSTANCE__ *hInstance, HWND__ *pkParentWin, unsigned int uiStyle, unsigned int uiStopFlag, int iLimitLength, bool bClearTextOnEnd, tagRECT *pkRect, HFONT__ *hFont, bool bNoAlt);
bool __thiscall PgImeEditWin::Create(PgImeEditWin *this, HINSTANCE__ *hInstance, unsigned int uiWinStyle, tagRECT *pkRect, HFONT__ *hFont, bool bNoAlt);
bool __thiscall PgImeEditWin::CallBack(PgImeEditWin *this, unsigned int message, unsigned int wParam, int lParam);
bool __thiscall PgImeEditWin::OnEnterKeyInput(PgImeEditWin *this);
int __thiscall PgImeEditWin::GetImeCaretPos(PgImeEditWin *this);
void __thiscall PgImeEditWin::EnablePaste(PgImeEditWin *this, bool bEnable);
void __thiscall PgWinImeEditText::PgWinImeEditText(PgWinImeEditText *this);
void *__thiscall PgWinImeEditText::_vector_deleting_destructor_(PgWinImeEditText *this, unsigned int);
void __thiscall PgWinImeEditText::_PgWinImeEditText(PgWinImeEditText *this);
PgWinImeEditText *__cdecl PgWinImeEditText::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
bool __thiscall PgWinImeEditText::Create(PgWinImeEditText *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, char *pcName, unsigned int uiExtStyle);
void __thiscall PgWinImeEditText::OnEditChange(PgWinImeEditText *this, unsigned int wParam, int lParam);
int __thiscall PgWinImeEditText::GetCandStrXPos(PgWinImeEditText *this);
int __thiscall PgWinImeEditText::GetCandStrYPos(PgWinImeEditText *this);
bool __cdecl PgInitInstance();
int __cdecl PgTerminateInstance();
void __thiscall PgImeCtrl::PgImeCtrl(PgImeCtrl *this);
void *__thiscall PgImeCtrl::_scalar_deleting_destructor_(PgImeCtrl *this, unsigned int);
void __thiscall PgImeCtrl::_PgImeCtrl(PgImeCtrl *this);
void __thiscall PgImeCtrl::SetHWND(PgImeCtrl *this, HWND__ *hWnd);
bool __thiscall PgImeCtrl::MsgProc(PgImeCtrl *this, unsigned int uMsg, unsigned int wParam, int lParam);
void __cdecl WM_IME_DbgOut(PgImeCtrl *kImeCtrl, unsigned int uMsg);
void __cdecl OutDbg(PgImeCtrl *kImeCtrl, char *pcText);
void __thiscall PgImeCtrl::OnFocusIn(PgImeCtrl *this, bool bNumber, bool bPassword);
void __thiscall PgImeCtrl::OnFocusOut(PgImeCtrl *this);
void __thiscall PgImeCtrl::Clear(PgImeCtrl *this);
bool __thiscall PgImeCtrl::OnImeComposition(PgImeCtrl *this, unsigned int wParam, int lParam);
bool __thiscall PgImeCtrl::OnImeStartComposition(PgImeCtrl *this, unsigned int wParam, int lParam);
bool __thiscall PgImeCtrl::OnImeNotify(PgImeCtrl *this, unsigned int wParam, int lParam);
void __cdecl IMN_OutDbg(PgImeCtrl *kImeCtrl, unsigned int wParam);
bool __thiscall PgImeCtrl::OnImeEndComposition(PgImeCtrl *this, unsigned int wParam, int lParam);
void __thiscall PgImeCtrl::GetCandidateList(PgImeCtrl *this);
void __thiscall PgImeCtrl::ClearCandidate(PgImeCtrl *this);
int __thiscall PgImeCtrl::GetCorsorPos(PgImeCtrl *this);
void __thiscall PgWinButExt::PgWinButExt(PgWinButExt *this);
void *__thiscall PgWinButExt::_vector_deleting_destructor_(PgWinButExt *this, unsigned int);
void __thiscall PgWinButExt::_PgWinButExt(PgWinButExt *this);
PgWinButExt *__cdecl PgWinButExt::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle);
void __thiscall PgWinButExt::ProcessMeInput(PgWinButExt *this, bool *bHit);
void __thiscall PgWinButExt::SetButShow(PgWinButExt *this, PgWinBut::ButShow eShow);
void __thiscall PgWinCamera::PgWinCamera(PgWinCamera *this);
void __thiscall PgWinCamera::UpdateWorldData(PgWinCamera *this);
void __thiscall PgWinCamera::UpdateRenderTargetBounds(PgWinCamera *this);
void *__thiscall PgWinCamera::_scalar_deleting_destructor_(PgWinCamera *this, unsigned int);
void __thiscall PgWinCamera::_PgWinCamera(PgWinCamera *this);
NiAlphaController *__cdecl PgWinAnim::CreateLoopingAlphaAnim();
void __cdecl PgSHGetPathFromIDList(char *pszPath);
void __thiscall PgSocket::PgSocket(PgSocket *this);
void __thiscall PgSocket::_PgSocket(PgSocket *this);
void __thiscall PgSocket::reset(PgSocket *this);
void __thiscall PgSocket::set(PgSocket *this);
bool __thiscall PgSocket::connect(PgSocket *this, char *addr, int port);
bool __thiscall PgSocket::connect(PgSocket *this, int a1, int a2, int a3, int a4, int port);
void __thiscall PgSocket::encoding(PgSocket *this, char *buffer, int len);
int __thiscall PgSocket::flush(PgSocket *this);
bool __thiscall PgSocket::sendpacket(PgSocket *this, void *packet, int len);
int __thiscall PgSocket::frombuffer(PgSocket *this, void *packet);
int __thiscall PgSocket::recievepacket(PgSocket *this, void *packet);
void __thiscall PgSocket::RepositionSendEncryptTableInx(PgSocket *this, unsigned __int16 newinx);
void __thiscall PgEditTextGeometry::PgEditTextGeometry(PgEditTextGeometry *this, PgFont *pkFont);
void *__thiscall PgEditTextGeometry::_scalar_deleting_destructor_(PgEditTextGeometry *this, unsigned int);
void __thiscall PgEditTextGeometry::_PgEditTextGeometry(PgEditTextGeometry *this);
void __thiscall PgEditTextGeometry::SetAutoAlign(PgEditTextGeometry *this, bool bAutoAlign);
bool __thiscall PgEditTextGeometry::GetAutoAlign(PgEditTextGeometry *this);
void __thiscall PgEditTextGeometry::SetText(PgEditTextGeometry *this, const char *pcText);
void __thiscall PgEditTextGeometry::SetDrawRect(PgEditTextGeometry *this, tagRECT *rkRect);
void __thiscall PgPasswdTextGeometry::PgPasswdTextGeometry(PgPasswdTextGeometry *this, PgFont *pkFont);
void *__thiscall PgPasswdTextGeometry::_vector_deleting_destructor_(PgPasswdTextGeometry *this, unsigned int);
void __thiscall PgPasswdTextGeometry::_PgPasswdTextGeometry(PgPasswdTextGeometry *this);
void __thiscall PgPasswdTextGeometry::SetText(PgPasswdTextGeometry *this, const char *pcText);
char *__thiscall PgPasswdTextGeometry::GetText(PgPasswdTextGeometry *this);
void __thiscall PgImeEditTextGeometry::PgImeEditTextGeometry(PgImeEditTextGeometry *this, PgFont *pkFont);
void *__thiscall PgImeEditTextGeometry::_vector_deleting_destructor_(PgImeEditTextGeometry *this, unsigned int);
void __thiscall PgImeEditTextGeometry::_PgImeEditTextGeometry(PgImeEditTextGeometry *this);
bool __thiscall PgImeEditTextGeometry::SetText(PgImeEditTextGeometry *this, char *pcOrgStr, char *pcCompStr, int iCompStrPos, char *pbCompStrAttr);
char *__thiscall PgImeEditTextGeometry::GetText(PgImeEditTextGeometry *this);
void __thiscall PgImeEditTextGeometry::RecreateText(PgImeEditTextGeometry *this);
void __thiscall StrBuffer::operator__(StrBuffer *this, const char *acSrc);
char *__thiscall PgImeEditTextGeometry::GetCompText(PgImeEditTextGeometry *this);
unsigned int __cdecl rmTailSpace(const char *a1);
int __cdecl hexToInt(const char *a1);
int __cdecl EncryptString(const char *a1, const char *a2, char *a3);
int __cdecl DecryptString(const char *source, const char *a2, const char *a3);
char __cdecl GetSplitData(const char *a1, const char *a2, char *a3);
char __cdecl GetNMClipData(char *dest, int a2, const char *a3, char a4);
int __cdecl CCoreCipher::SeedEncrypt(int a1, int a2);
int __cdecl CCoreCipher::SeedDecrypt(int a1, int a2);
int __cdecl CCoreCipher::SeedEncRoundKey(int a1, int a2);
// HRESULT __stdcall HlinkSimpleNavigateToString(LPCWSTR szTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *, DWORD grfHLNF, DWORD dwReserved);
void __thiscall ATL::CSimpleArray<HINSTANCE_____ATL::CSimpleArrayEqualHelper<HINSTANCE____>>::RemoveAll(ATL::CSimpleArray<HINSTANCE__ *,ATL::CSimpleArrayEqualHelper<HINSTANCE__ *> > *this);
HRESULT __thiscall ATL::CComCriticalSection::Init(ATL::CComCriticalSection *this);
void __thiscall ATL::_ATL_BASE_MODULE70::_ATL_BASE_MODULE70(ATL::_ATL_BASE_MODULE70 *this);
void __thiscall ATL::CAtlBaseModule::_CAtlBaseModule(ATL::CAtlBaseModule *this);
HINSTANCE__ *__thiscall ATL::CAtlBaseModule::GetHInstanceAt(ATL::CAtlBaseModule *this, int i);
void __thiscall ATL::CAtlBaseModule::CAtlBaseModule(ATL::CAtlBaseModule *this);
void __thiscall ATL::CWin32Heap::_CWin32Heap(ATL::CWin32Heap *this);
void *__thiscall ATL::CWin32Heap::Allocate(ATL::CWin32Heap *this, unsigned int nBytes);
void __thiscall ATL::CWin32Heap::Free(ATL::CWin32Heap *this, void *p);
void *__thiscall ATL::CWin32Heap::Reallocate(ATL::CWin32Heap *this, void *p, unsigned int nBytes);
unsigned int __thiscall ATL::CWin32Heap::GetSize(ATL::CWin32Heap *this, void *p);
void *__thiscall ATL::CWin32Heap::_vector_deleting_destructor_(ATL::CWin32Heap *this, unsigned int);
HRESULT __cdecl ATL::AtlMultiply<unsigned_long>(unsigned int *piResult, unsigned int iLeft, unsigned int iRight);
void __thiscall ATL::CAtlStringMgr::Free(ATL::CAtlStringMgr *this, ATL::CStringData *pData);
ATL::CStringData *__thiscall ATL::CAtlStringMgr::GetNilString(ATL::CAtlStringMgr *this);
ATL::IAtlStringMgr *__thiscall ATL::CAtlStringMgr::Clone(ATL::CAtlStringMgr *this);
void *__thiscall ATL::CAtlStringMgr::_scalar_deleting_destructor_(ATL::CAtlStringMgr *this, unsigned int);
HRESULT __cdecl ATL::AtlAdd<unsigned_long>(unsigned int *ptResult, unsigned int tLeft, unsigned int tRight);
ATL::CStringData *__thiscall ATL::CAtlStringMgr::Allocate(ATL::CAtlStringMgr *this, int nChars, int nCharSize);
ATL::CStringData *__thiscall ATL::CAtlStringMgr::Reallocate(ATL::CAtlStringMgr *this, ATL::CStringData *pData, int nChars, int nCharSize);
NiD3DShaderProgramFactory *__cdecl NiD3DShaderProgramFactory::GetInstance();
int __cdecl NiD3DShaderProgramFactory::Shutdown();
bool __cdecl NiD3DShaderProgramFactory::RecreateVertexShader(NiD3DVertexShader *pkVertexShader);
bool __cdecl NiD3DShaderProgramFactory::RecreatePixelShader(NiD3DPixelShader *pkPixelShader);
void __cdecl NiD3DShaderProgramFactory::SetD3DRenderer(NiDX9Renderer *pkD3DRenderer);
const char *__thiscall NiD3DShaderProgramFactory::GetFirstProgramDirectory(NiD3DShaderProgramFactory *this, void **kIter);
const char *__thiscall NiD3DShaderProgramFactory::GetNextProgramDirectory(NiD3DShaderProgramFactory *this, void **kIter);
NiD3DVertexShader *__thiscall NiD3DShaderProgramFactory::GetVertexShader(NiD3DShaderProgramFactory *this, const char *pcShaderName);
NiD3DPixelShader *__thiscall NiD3DShaderProgramFactory::GetPixelShader(NiD3DShaderProgramFactory *this, const char *pcShaderName);
void __thiscall NiD3DShaderProgramFactory::InsertVertexShaderIntoMap(NiD3DShaderProgramFactory *this, NiD3DVertexShader *pkShader);
void __thiscall NiD3DShaderProgramFactory::InsertPixelShaderIntoMap(NiD3DShaderProgramFactory *this, NiD3DPixelShader *pkShader);
bool __cdecl NiD3DShaderProgramFactory::ResolveShaderFileName(const char *pcOriginalName, char *pcTrueName, unsigned int uiStringLen);
void __cdecl NiD3DShaderProgramFactory::UnregisterShaderCreator(NiD3DShaderProgramCreator *pkCreator);
NiD3DShaderProgramCreator *__cdecl NiD3DShaderProgramFactory::GetShaderCreator(const char *pcFilename);
void __cdecl NiD3DShaderProgramFactory::_SDMShutdown();
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DVertexShader__>_NiD3DVertexShader__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DVertexShader__>_NiD3DVertexShader__>(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DVertexShader *>,NiD3DVertexShader *> *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DPixelShader__>_NiD3DPixelShader__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DPixelShader__>_NiD3DPixelShader__>(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DPixelShader *>,NiD3DPixelShader *> *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DShaderProgramCreator__>_NiD3DShaderProgramCreator__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DShaderProgramCreator__>_NiD3DShaderProgramCreator__>(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DShaderProgramCreator *>,NiD3DShaderProgramCreator *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DVertexShader__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiD3DVertexShader *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiD3DVertexShader__>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiD3DVertexShader *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DPixelShader__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiD3DPixelShader *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiD3DPixelShader__>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiD3DPixelShader *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiD3DShaderProgramCreator__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiD3DShaderProgramCreator *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiD3DShaderProgramCreator__>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiD3DShaderProgramCreator *> *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiD3DShaderProgramCreator__>::_scalar_deleting_destructor_(NiTStringPointerMap<NiD3DShaderProgramCreator *> *this, unsigned int);
NiD3DVertexShader *__cdecl NiD3DShaderProgramFactory::CreateVertexShaderFromFile(const char *pcFileName, const char *pcShaderName, const char *pcEntryPoint, const char *pcShaderTarget, IDirect3DVertexDeclaration9 *hDecl, unsigned int uiUsage, bool bSoftwareVP);
NiD3DPixelShader *__cdecl NiD3DShaderProgramFactory::CreatePixelShaderFromFile(const char *pcFileName, const char *pcShaderName, const char *pcEntryPoint, const char *pcShaderTarget);
void __cdecl NiD3DShaderProgramFactory::ReleaseVertexShader(NiD3DVertexShader *pkShader);
void __cdecl NiD3DShaderProgramFactory::ReleasePixelShader(NiD3DPixelShader *pkShader);
void __thiscall NiD3DShaderProgramFactory::AddProgramDirectory(NiD3DShaderProgramFactory *this, const char *pacDirectory);
void __thiscall NiD3DShaderProgramFactory::RemoveProgramDirectory(NiD3DShaderProgramFactory *this, const char *pcDirectory);
void __thiscall NiD3DShaderProgramFactory::RemoveAllProgramDirectories(NiD3DShaderProgramFactory *this);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DVertexShader__>_NiD3DVertexShader__>::_vector_deleting_destructor_(NiTStringPointerMap<NiD3DVertexShader *> *this, unsigned int);
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DPixelShader__>_NiD3DPixelShader__>::_scalar_deleting_destructor_(NiTStringPointerMap<NiD3DPixelShader *> *this, unsigned int);
void __thiscall NiD3DShaderProgramFactory::NiD3DShaderProgramFactory(NiD3DShaderProgramFactory *this);
void __thiscall NiD3DShaderProgramFactory::_NiD3DShaderProgramFactory(NiD3DShaderProgramFactory *this);
void __cdecl NiD3DShaderProgramFactory::CreateShaderCreatorMap();
void __cdecl NiD3DShaderProgramFactory::_SDMInit();
void *__thiscall NiD3DShaderProgramFactory::_scalar_deleting_destructor_(NiD3DShaderProgramFactory *this, unsigned int);
bool __cdecl NiD3DShaderProgramFactory::RegisterShaderCreator(const char *pcExt, NiD3DShaderProgramCreator *pkCreator);
bool __thiscall NiD3DDefaultShader::Initialize(NiD3DDefaultShader *this, NiDX9Renderer *pkRenderer);
unsigned int __thiscall NiD3DDefaultShader::PostProcessPipeline(NiD3DDefaultShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void *__thiscall NiTArray<NiTextureEffect_const__>::_vector_deleting_destructor_(NiTArray<NiTextureEffect const *> *this, unsigned int);
bool __thiscall NiD3DDefaultShader::IsCurrentCombineMode(NiD3DDefaultShader *this, _D3DBLEND eSrcBlend, _D3DBLEND eDestBlend);
void __thiscall NiD3DDefaultShader::ClearProjectedTextures(NiD3DDefaultShader *this);
void __thiscall NiD3DDefaultShader::PackTextureTransform(NiD3DDefaultShader *this, NiMatrix3 *kTexMatrix, NiD3DTextureStage *pkStage);
void __thiscall NiD3DDefaultShader::_NiD3DDefaultShader(NiD3DDefaultShader *this);
NiRTTI *__thiscall NiD3DDefaultShader::GetRTTI(NiD3DDefaultShader *this);
unsigned int __thiscall NiD3DDefaultShader::PreProcessPipeline(NiD3DDefaultShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
NiD3DTextureStage *__thiscall NiD3DDefaultShader::AddTextureStage(NiD3DDefaultShader *this, NiTexturingProperty::Map *pkMap, unsigned int uiIndex);
NiD3DTextureStage *__thiscall NiD3DDefaultShader::AddTextureStage(NiD3DDefaultShader *this, NiTexturingProperty::BumpMap *pkMap, unsigned int uiIndex);
NiD3DTextureStage *__thiscall NiD3DDefaultShader::AddTextureStage(NiD3DDefaultShader *this, NiTextureEffect *pkEffect);
NiD3DTextureStage *__thiscall NiD3DDefaultShader::AddClipperStage(NiD3DDefaultShader *this, NiTextureEffect *pkEffect);
void __thiscall NiD3DDefaultShader::NextFrame(NiD3DDefaultShader *this);
unsigned int __thiscall NiTArray<NiTextureEffect_const__>::Add(NiTArray<NiTextureEffect const *> *this, NiTextureEffect *const *element);
void *__thiscall NiD3DDefaultShader::_vector_deleting_destructor_(NiD3DDefaultShader *this, unsigned int);
void __thiscall NiD3DDefaultShader::ClosePass(NiD3DDefaultShader *this, NiTexturingProperty::Map *pkBaseMap);
bool __thiscall NiD3DDefaultShader::SaveProjectedTexture(NiD3DDefaultShader *this, NiTextureEffect *pkEffect, bool bClipped);
void __thiscall NiD3DDefaultShader::NiD3DDefaultShader(NiD3DDefaultShader *this);
void __thiscall NiD3DDefaultShader::OpenNewPass(NiD3DDefaultShader *this, _D3DBLEND eSrcBlend, _D3DBLEND eDestBlend, bool bReturnBaseTextureAlpha, bool bReturnVertexColorAlpha);
void __thiscall NiD3DDefaultShader::UpdateProjectedTextures(NiD3DDefaultShader *this, NiDynamicEffectState *pkState);
void __thiscall NiD3DDefaultShader::PostProcessFogProperties(NiD3DDefaultShader *this, NiFogProperty *pkFog, NiAlphaProperty *pkAlpha, NiTexturingProperty::Map *pkBaseMap, NiTexturingProperty::ApplyMode eApply);
unsigned int __thiscall NiD3DDefaultShader::ConstructPipeline(NiD3DDefaultShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiD3DDefaultShader::UpdatePipeline(NiD3DDefaultShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void __thiscall NiD3DTextureStageGroup::NiD3DTextureStageGroup(NiD3DTextureStageGroup *this);
void __thiscall NiD3DTextureStageGroup::SetStageState(NiD3DTextureStageGroup *this, unsigned int uiState, unsigned int uiValue, bool bSave);
bool __thiscall NiD3DTextureStageGroup::GetStageState(NiD3DTextureStageGroup *this, unsigned int uiState, unsigned int *uiValue, bool *bSave);
void __thiscall NiD3DTextureStageGroup::SetSamplerState(NiD3DTextureStageGroup *this, unsigned int uiState, unsigned int uiValue, bool bSave, bool bUseMapValue);
void __thiscall NiD3DTextureStageGroup::RemoveAllStageStates(NiD3DTextureStageGroup *this);
void __thiscall NiD3DTextureStageGroup::RemoveAllSamplerStates(NiD3DTextureStageGroup *this);
unsigned int __thiscall NiD3DTextureStageGroup::SetAllStageStates(NiD3DTextureStageGroup *this, unsigned int uiStage);
unsigned int __thiscall NiD3DTextureStageGroup::SetAllStageSamplers(NiD3DTextureStageGroup *this, unsigned int uiStage);
void *__thiscall NiTPoolContainer<NiD3DTextureStageGroup>::_scalar_deleting_destructor_(NiTPoolContainer<NiD3DTextureStageGroup> *this, unsigned int);
unsigned int __thiscall NiD3DTextureStageGroup::SetTextureStage(NiD3DTextureStageGroup *this, unsigned int uiStage);
void __thiscall NiTPoolContainer<NiD3DTextureStageGroup>::NiTPoolContainer<NiD3DTextureStageGroup>(NiTPoolContainer<NiD3DTextureStageGroup> *this, unsigned int uiSize);
void *__cdecl NiD3DTextureStageGroup::InitializePools();
void __thiscall NiTPool<NiD3DTextureStageGroup>::CreateNewObjects(NiTPool<NiD3DTextureStageGroup> *this, unsigned int uiSize);
void __thiscall NiTPoolContainer<NiD3DTextureStageGroup>::_NiTPoolContainer<NiD3DTextureStageGroup>(NiTPoolContainer<NiD3DTextureStageGroup> *this);
void __cdecl NiD3DTextureStageGroup::ShutdownPools();
NiD3DTextureStageGroup *__cdecl NiD3DTextureStageGroup::GetFreeTextureStageGroup();
void __cdecl NiD3DTextureStageGroup::ReleaseTextureStageGroup(NiD3DTextureStageGroup *pkGroup);
void __thiscall NiD3DTextureStage::ModifyClampMode(NiD3DTextureStage *this, bool bNonPow2);
void __cdecl NiD3DTextureStage::DisableStage(unsigned int uiStage);
void *__thiscall NiTPoolContainer<NiD3DTextureStage>::_scalar_deleting_destructor_(NiTPoolContainer<NiD3DTextureStage> *this, unsigned int);
void __thiscall NiD3DTextureStage::NiD3DTextureStage(NiD3DTextureStage *this);
void __thiscall NiD3DTextureStage::SetTextureTransformFlags(NiD3DTextureStage *this, unsigned int uiFlags, const char *pszGlobalName);
void __thiscall NiD3DTextureStage::SetClampMode(NiD3DTextureStage *this, NiTexturingProperty::ClampMode eClamp);
void __thiscall NiD3DTextureStage::SetFilterMode(NiD3DTextureStage *this, NiTexturingProperty::FilterMode eFilter);
bool __thiscall NiD3DTextureStage::CalculateTransformationMatrix(NiD3DTextureStage *this, unsigned int uiCalculationMethod, _D3DMATRIX *pkD3DMatSource);
void *__thiscall NiD3DTextureStage::_vector_deleting_destructor_(NiD3DTextureStage *this, unsigned int);
void __thiscall NiTPoolContainer<NiD3DTextureStage>::NiTPoolContainer<NiD3DTextureStage>(NiTPoolContainer<NiD3DTextureStage> *this, unsigned int uiSize);
void __cdecl NiD3DTextureStage::SetD3DRenderer(NiDX9Renderer *pkD3DRenderer);
void *__cdecl NiD3DTextureStage::InitializePools();
void __thiscall NiD3DTextureStage::ApplyTextureTransform(NiD3DTextureStage *this);
void __thiscall NiD3DTextureStage::ApplyTexture(NiD3DTextureStage *this);
void __thiscall NiTPool<NiD3DTextureStage>::CreateNewObjects(NiTPool<NiD3DTextureStage> *this, unsigned int uiSize);
void __thiscall NiTPoolContainer<NiD3DTextureStage>::_NiTPoolContainer<NiD3DTextureStage>(NiTPoolContainer<NiD3DTextureStage> *this);
void __cdecl NiD3DTextureStage::ShutdownPools();
bool __thiscall NiD3DTextureStage::ConfigureStage(NiD3DTextureStage *this);
void __thiscall NiD3DTextureStage::ReturnStageToPool(NiD3DTextureStage *this);
NiPointer<NiD3DTextureStage> *__cdecl NiD3DTextureStage::CreateNewStage(NiPointer<NiD3DTextureStage> *result);
void *__thiscall NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry>::_scalar_deleting_destructor_(NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry> *this, unsigned int);
void __thiscall NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry>::_NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry>(NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry> *this);
void __cdecl NiD3DRenderStateGroup::SetD3DRenderer(NiDX9Renderer *pkD3DRenderer);
unsigned int __thiscall NiD3DRenderStateGroup::SetRenderStates(NiD3DRenderStateGroup *this);
unsigned int __thiscall NiD3DRenderStateGroup::RestoreRenderStates(NiD3DRenderStateGroup *this);
void __thiscall NiTPoolContainer<NiD3DRenderStateGroup>::NiTPoolContainer<NiD3DRenderStateGroup>(NiTPoolContainer<NiD3DRenderStateGroup> *this, unsigned int uiSize);
void __thiscall NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry>::NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry>(NiTPoolContainer<NiD3DRenderStateGroup::NiD3DRSEntry> *this, unsigned int uiSize);
void *__cdecl NiD3DRenderStateGroup::InitializePools();
bool __thiscall NiD3DRenderStateGroup::GetRenderState(NiD3DRenderStateGroup *this, unsigned int uiRenderState, unsigned int *uiValue, bool *bSave);
void __thiscall NiTPool<NiD3DRenderStateGroup>::CreateNewObjects(NiTPool<NiD3DRenderStateGroup> *this, unsigned int uiSize);
void __thiscall NiTPool<NiD3DRenderStateGroup::NiD3DRSEntry>::CreateNewObjects(NiTPool<NiD3DRenderStateGroup::NiD3DRSEntry> *this, unsigned int uiSize);
void __cdecl NiD3DRenderStateGroup::ShutdownPools();
void __thiscall NiD3DRenderStateGroup::_NiD3DRenderStateGroup(NiD3DRenderStateGroup *this);
void __thiscall NiD3DRenderStateGroup::SetRenderState(NiD3DRenderStateGroup *this, unsigned int uiRenderState, unsigned int uiValue, bool bSave);
NiD3DRenderStateGroup *__cdecl NiD3DRenderStateGroup::GetFreeRenderStateGroup();
void __cdecl NiD3DRenderStateGroup::ReleaseRenderStateGroup(NiD3DRenderStateGroup *pkGroup);
void __thiscall NiTPoolContainer<NiD3DRenderStateGroup>::_NiTPoolContainer<NiD3DRenderStateGroup>(NiTPoolContainer<NiD3DRenderStateGroup> *this);
NiDX9Renderer *__thiscall NiD3DPass::GetD3DRenderer(NiD3DPass *this);
unsigned int __thiscall NiD3DPass::PostProcessRenderingPass(NiD3DPass *this, unsigned int uiPass);
bool __thiscall NiD3DPass::CheckFreeStages(NiD3DPass *this, unsigned int uiStages, unsigned int uiTextures);
void __cdecl NiD3DPass::SetMaxTextureBlendStages(unsigned int uiMaxTextureBlendStages);
void __cdecl NiD3DPass::SetMaxSimultaneousTextures(unsigned int uiMaxSimultaneousTextures);
void __cdecl NiD3DPass::SetMaxSamplers(unsigned int uiMaxSamplers);
void *__thiscall NiTPoolContainer<NiD3DPass>::_scalar_deleting_destructor_(NiTPoolContainer<NiD3DPass> *this, unsigned int);
void __thiscall NiTPoolContainer<NiD3DPass>::_NiTPoolContainer<NiD3DPass>(NiTPoolContainer<NiD3DPass> *this);
void __thiscall NiD3DPass::SetPixelShaderProgramFileName(NiD3DPass *this, const char *pcProgramFile);
void __thiscall NiD3DPass::SetPixelShaderProgramEntryPoint(NiD3DPass *this, const char *pcEntryPoint);
void __thiscall NiD3DPass::SetPixelShaderProgramShaderTarget(NiD3DPass *this, const char *pcShaderTarget);
void __thiscall NiD3DPass::SetVertexShaderProgramFileName(NiD3DPass *this, const char *pcProgramFile);
void __thiscall NiD3DPass::SetVertexShaderProgramEntryPoint(NiD3DPass *this, const char *pcEntryPoint);
void __thiscall NiD3DPass::SetVertexShaderProgramShaderTarget(NiD3DPass *this, const char *pcShaderTarget);
unsigned int __thiscall NiD3DPass::SetupRenderingPass(NiD3DPass *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
void __cdecl NiD3DPass::SetD3DRenderer(NiDX9Renderer *pkD3DRenderer);
void *__cdecl NiD3DPass::InitializePools();
unsigned int __thiscall NiD3DPass::SetupShaderPrograms(NiD3DPass *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
void __thiscall NiTArray<NiPointer<NiD3DTextureStage>>::NiTArray<NiPointer<NiD3DTextureStage>>(NiTArray<NiPointer<NiD3DTextureStage> > *this, unsigned int uiMaxSize, unsigned int uiGrowBy);
void __thiscall NiTArray<NiPointer<NiD3DTextureStage>>::SetAt(NiTArray<NiPointer<NiD3DTextureStage> > *this, unsigned int uiIndex, NiPointer<NiD3DTextureStage> *element);
void __thiscall NiTArray<NiPointer<NiD3DTextureStage>>::RemoveAll(NiTArray<NiPointer<NiD3DTextureStage> > *this);
void __thiscall NiTArray<NiPointer<NiD3DTextureStage>>::SetSize(NiTArray<NiPointer<NiD3DTextureStage> > *this, unsigned int uiMaxSize);
void __thiscall NiTSet<NiD3DPass__>::AddUnique(NiTSet<NiD3DTextureStageGroup *> *this, NiD3DTextureStageGroup *const *element);
void __thiscall NiTArray<NiPointer<NiD3DTextureStage>>::_NiTArray<NiPointer<NiD3DTextureStage>>(NiTArray<NiPointer<NiD3DTextureStage> > *this);
void *__thiscall NiTArray<NiPointer<NiD3DTextureStage>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiD3DTextureStage> > *this, unsigned int);
void __thiscall NiD3DPass::NiD3DPass(NiD3DPass *this);
void __cdecl NiD3DPass::ShutdownPools();
void __thiscall NiTPoolContainer<NiD3DPass>::NiTPoolContainer<NiD3DPass>(NiTPoolContainer<NiD3DPass> *this, unsigned int uiSize);
void __thiscall NiD3DPass::_NiD3DPass(NiD3DPass *this);
void __thiscall NiD3DPass::ReturnPassToPool(NiD3DPass *this);
unsigned int __thiscall NiD3DPass::SetStage(NiD3DPass *this, unsigned int uiStageNum, NiD3DTextureStage *pkStage);
void __thiscall NiTPool<NiD3DPass>::CreateNewObjects(NiTPool<NiD3DPass> *this, unsigned int uiSize);
void *__thiscall NiD3DPass::_vector_deleting_destructor_(NiD3DPass *this, unsigned int);
NiPointer<NiD3DPass> *__cdecl NiD3DPass::CreateNewPass(NiPointer<NiD3DPass> *result);
bool __thiscall NiD3DShader::Initialize(NiD3DShader *this, NiDX9Renderer *pkRenderer);
unsigned int __thiscall NiD3DShader::PostProcessPipeline(NiD3DShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
void *__cdecl NiD3DShader::InitializePools();
void __cdecl NiD3DShader::ShutdownPools();
NiVBChip *__thiscall NiGeometryBufferData::GetVBChip(NiGeometryBufferData *this, unsigned int uiIndex);
unsigned int __thiscall NiD3DShader::FirstPass(NiD3DShader *this);
unsigned int __thiscall NiD3DShader::NextPass(NiD3DShader *this);
unsigned int __thiscall NiD3DShader::SetupRenderingPass(NiD3DShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiD3DShader::SetupTransformations(NiD3DShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
NiD3DShaderDeclaration *__thiscall NiD3DXEffectShader::GetShaderDecl(NiD3DShader *this);
void __cdecl NiD3DShader::PackWorldParallelEffect(NiMatrix3 *kWorldMat, NiPoint3 *kWorldTrans, NiD3DTextureStage *pkStage, bool bSave, NiDX9Renderer *pkD3DRenderer);
void __cdecl NiD3DShader::PackWorldPerspectiveEffect(NiMatrix3 *kWorldMat, NiPoint3 *kWorldTrans, NiD3DTextureStage *pkStage, bool bSave, NiDX9Renderer *pkD3DRenderer);
void __cdecl NiD3DShader::PackWorldSphereEffect(NiMatrix3 *kWorldMat, NiPoint3 *kWorldTrans, NiD3DTextureStage *pkStage, bool bSave, NiDX9Renderer *pkD3DRenderer);
void __cdecl NiD3DShader::PackSpecularCubeEffect(NiMatrix3 *kWorldMat, NiPoint3 *kWorldTrans, NiD3DTextureStage *pkStage, bool bSave, NiDX9Renderer *pkD3DRenderer);
void __cdecl NiD3DShader::PackDiffuseCubeEffect(NiMatrix3 *kWorldMat, NiPoint3 *kWorldTrans, NiD3DTextureStage *pkStage, bool bSave, NiDX9Renderer *pkD3DRenderer);
void __cdecl NiD3DShader::_SDMInit();
unsigned int __thiscall NiD3DShader::PreProcessPipeline(NiD3DShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiD3DShader::SetupShaderPrograms(NiD3DShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
NiGeometryBufferData *__thiscall NiD3DShader::PrepareGeometryForRendering(NiD3DShader *this, NiGeometry *pkGeometry, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState);
void __thiscall NiD3DShader::ResetPasses(NiD3DShader *this);
void __thiscall NiD3DShader::DestroyRendererData(NiD3DShader *this);
void __thiscall NiD3DShader::RecreateRendererData(NiD3DShader *this);
bool __thiscall NiD3DShader::GetVSPresentAllPasses(NiD3DShader *this);
bool __thiscall NiD3DShader::GetVSPresentAnyPass(NiD3DShader *this);
bool __thiscall NiD3DShader::GetPSPresentAllPasses(NiD3DShader *this);
bool __thiscall NiD3DShader::GetPSPresentAnyPass(NiD3DShader *this);
void __cdecl NiD3DShader::SetupSCMExtraData(NiD3DShader *pkD3DShader, NiGeometry *pkGeometry);
void __thiscall NiD3DShader::_NiD3DShader(NiD3DShader *this);
bool __thiscall NiD3DShader::SetupGeometry(NiD3DShader *this, NiGeometry *pkGeometry);
void __thiscall NiD3DShaderInterface::NiD3DShaderInterface(NiD3DShaderInterface *this);
unsigned int __thiscall NiD3DShaderInterface::PreProcessPipeline(NiD3DShaderInterface *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiD3DShaderInterface::PostRender(NiD3DShaderInterface *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
NiGeometryBufferData *__thiscall NiD3DShaderInterface::PrepareGeometryForRendering(NiD3DShaderInterface *this, NiGeometry *pkGeometry, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiDynamicTexture___NiDX9DynamicTextureData__>::ClearValue(NiVBDynamicSet *this, IDirect3DVertexBuffer9 *pkVB);
NiRTTI *__thiscall NiD3DShaderInterface::GetRTTI(NiD3DShaderInterface *this);
bool __thiscall NiD3DShaderInterface::IsInitialized(NiD3DShaderInterface *this);
bool __thiscall NiD3DShader::GetIsBestImplementation(NiD3DShaderInterface *this);
void __thiscall NiD3DShaderInterface::SetIsBestImplementation(NiD3DShaderInterface *this, bool bIsBest);
void __thiscall NiD3DShaderInterface::SetD3DRenderer(NiD3DShaderInterface *this, NiDX9Renderer *pkD3DRenderer);
unsigned int __cdecl NiD3DShaderInterface::InitializeShaderSystem(NiDX9Renderer *pkD3DRenderer);
unsigned int __cdecl NiD3DShaderInterface::ShutdownShaderSystem();
void __thiscall NiD3DShaderInterface::_NiD3DShaderInterface(NiD3DShaderInterface *this);
bool __thiscall NiD3DShaderInterface::Initialize(NiD3DShaderInterface *this, NiDX9Renderer *pkRenderer);
void *__thiscall NiD3DShaderInterface::_vector_deleting_destructor_(NiD3DShaderInterface *this, unsigned int);
void __cdecl NiDX9DeviceDesc::DisplayFormatInfo::GetDepthStencilBPPFromFormat(_D3DFORMAT eD3DFmt, unsigned int *uiDepthBPP, unsigned int *uiStencilBPP);
unsigned int __cdecl NiDX9DeviceDesc::DisplayFormatInfo::GetDepthStencilIndex(_D3DFORMAT eDepthFormat);
char *__cdecl NiDX9SystemDesc::GetD3D9FormatString(_D3DFORMAT eD3DFmt);
unsigned int __cdecl NiDX9SystemDesc::GetBPPFromFormat(_D3DFORMAT eD3DFmt);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiDX9DeviceDesc::DisplayFormatInfo__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiDX9DeviceDesc::DisplayFormatInfo *> *this, unsigned int);
void *__thiscall NiTArray<NiDX9AdapterDesc::ModeDesc__>::_vector_deleting_destructor_(NiTArray<NiDX9AdapterDesc::ModeDesc *> *this, unsigned int);
void *__thiscall NiTArray<NiDX9AdapterDesc__>::_scalar_deleting_destructor_(NiTArray<NiDX9AdapterDesc *> *this, unsigned int);
unsigned int __thiscall NiDX9DeviceDesc::DisplayFormatInfo::GetNonmaskableMultiSampleQuality(NiDX9DeviceDesc::DisplayFormatInfo *this, bool bWindowed, _D3DFORMAT eRenderFormat, _D3DFORMAT eDepthFormat);
bool __thiscall NiDX9DeviceDesc::DisplayFormatInfo::IsMultiSampleValid(NiDX9DeviceDesc::DisplayFormatInfo *this, bool bWindowed, _D3DMULTISAMPLE_TYPE eMultiSampleType, _D3DFORMAT eRenderFormat, _D3DFORMAT eDepthFormat);
NiDX9Renderer::DepthStencilFormat __thiscall NiDX9DeviceDesc::DisplayFormatInfo::FindClosestDepthStencil(NiDX9DeviceDesc::DisplayFormatInfo *this, _D3DFORMAT eFBFormat, unsigned int uiDesiredDepthBPP, unsigned int uiDesiredStencilBPP);
NiDX9Renderer::FrameBufferFormat __thiscall NiDX9DeviceDesc::GetNearestFrameBufferFormat(NiDX9DeviceDesc *this, bool bWindowed, unsigned int uiDesiredBPP);
NiDX9Renderer::DepthStencilFormat __thiscall NiDX9DeviceDesc::GetNearestDepthStencilFormat(NiDX9DeviceDesc *this, _D3DFORMAT eAdapterMode, _D3DFORMAT eFBFormat, unsigned int uiDesiredDepthBPP, unsigned int uiDesiredStencilBPP);
unsigned int __thiscall NiDX9AdapterDesc::ModeDesc::GetClosestRefreshRate(NiDX9AdapterDesc::ModeDesc *this, unsigned int uiRefreshRate);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9DeviceDesc::DisplayFormatInfo__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9DeviceDesc::DisplayFormatInfo__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiDX9DeviceDesc::DisplayFormatInfo *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_enum___D3DFORMAT_NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *> *this, unsigned int);
void *__thiscall NiTPointerMap<enum___D3DFORMAT_NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo__>::_vector_deleting_destructor_(NiTPointerMap<enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9DeviceDesc::DisplayFormatInfo__>::_scalar_deleting_destructor_(NiTPointerList<NiDX9DeviceDesc::DisplayFormatInfo *> *this, unsigned int);
void __thiscall NiDX9DeviceDesc::DisplayFormatInfo::_DisplayFormatInfo(NiDX9DeviceDesc::DisplayFormatInfo *this);
NiDX9Renderer::DepthStencilFormat __thiscall NiDX9DeviceDesc::DisplayFormatInfo::FindClosestDepthStencil(NiDX9DeviceDesc::DisplayFormatInfo *this, unsigned int uiDesiredDepthBPP, unsigned int uiDesiredStencilBPP);
NiDX9AdapterDesc::ModeDesc *__thiscall NiDX9AdapterDesc::ValidateFullscreenMode(NiDX9AdapterDesc *this, _D3DFORMAT eFormat, unsigned int uiWidth, unsigned int uiHeight, unsigned int *uiRefreshRate);
void __thiscall NiDX9DeviceDesc::DisplayFormatInfo::DisplayFormatInfo(NiDX9DeviceDesc::DisplayFormatInfo *this, IDirect3D9 *pkD3D9, unsigned int uiAdapter, _D3DDEVTYPE kDevType, _D3DFORMAT eFormat, bool bFullscreen, bool bWindowed);
void __thiscall NiDX9DeviceDesc::NiDX9DeviceDesc(NiDX9DeviceDesc *this, IDirect3D9 *pkD3D9, unsigned int uiAdapter, _D3DDEVTYPE kD3DDevType, _D3DFORMAT eCurrDisplayFormat, NiTPointerList<unsigned int> *kFormats);
void __thiscall NiDX9AdapterDesc::NiDX9AdapterDesc(NiDX9AdapterDesc *this, IDirect3D9 *pkD3D9, unsigned int uiAdapter, NiTPointerList<unsigned int> *kFormats);
void __thiscall NiDX9SystemDesc::FillAdapterInformation(NiDX9SystemDesc *this, IDirect3D9 *pkD3D9, NiTPointerList<unsigned int> *kFormats);
void __thiscall NiDX9AdapterDesc::_NiDX9AdapterDesc(NiDX9AdapterDesc *this);
void __thiscall NiDX9SystemDesc::NiDX9SystemDesc(NiDX9SystemDesc *this, IDirect3D9 *pkD3D9, NiTPointerList<unsigned int> *kFormats);
void __thiscall NiDX9SystemDesc::_NiDX9SystemDesc(NiDX9SystemDesc *this);
int __cdecl NiDX9Renderer::CreateDirect3D9();
bool __cdecl NiDX9Renderer::ExpandDeviceType(NiDX9Renderer::DeviceDesc eDesc, _D3DDEVTYPE *eDevType, unsigned int *uiBehaviorFlags);
NiPixelFormat *__thiscall NiDX9Renderer::FindClosestPixelFormat(NiDX9Renderer *this, NiTexture::FormatPrefs *kFmtPrefs);
unsigned int __thiscall NiDX9Renderer::GetMaxBuffersPerRenderTargetGroup(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::GetIndependentBufferBitDepths(NiDX9Renderer *this);
NiRenderTargetGroup *__thiscall NiDX9Renderer::GetDefaultRenderTargetGroup(NiDX9Renderer *this);
NiDepthStencilBuffer *__thiscall NiDX9Renderer::GetDefaultDepthStencilBuffer(NiDX9Renderer *this);
Ni2DBuffer *__thiscall NiDX9Renderer::GetDefaultBackBuffer(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::PrecacheTexture(NiDX9Renderer *this, NiTexture *pkIm, bool bForceLoad, bool bLocked);
bool __thiscall NiDX9Renderer::PurgeAllTextures(NiDX9Renderer *this, bool bPurgeLocked);
bool __thiscall NiDX9Renderer::Do_EndFrame(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::Do_SetCameraData(NiDX9Renderer *this, NiPoint3 *kLoc, NiPoint3 *kDir, NiPoint3 *kUp, NiPoint3 *kRight, NiFrustum *kFrustum, NiRect<float> *kPort);
void __thiscall NiDX9Renderer::Do_SetScreenSpaceCameraData(NiDX9Renderer *this, NiRect<float> *pkPort);
void __thiscall NiDX9Renderer::Do_BeginBatch(NiDX9Renderer *this, NiPropertyState *pkPropertyState, NiDynamicEffectState *pkEffectState);
void __thiscall NiDX9Renderer::EmptyBatch(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::PurgeMaterial(NiDX9Renderer *this, NiMaterialProperty *pkMaterial);
void __thiscall NiDX9Renderer::PurgeVertexShader(NiDX9Renderer *this, NiD3DVertexShader *pkShader);
void __thiscall NiDX9Renderer::PurgePixelShader(NiDX9Renderer *this, NiD3DPixelShader *pkShader);
void __cdecl NiRenderer::SetLastErrorString(const char *pcStr);
bool __thiscall NiDX9Renderer::CreateSourceTextureRendererData(NiDX9Renderer *this, NiSourceTexture *pkTexture);
bool __thiscall NiDX9Renderer::CreateSourceCubeMapRendererData(NiDX9Renderer *this, NiSourceCubeMap *pkCubeMap);
void __thiscall NiDX9Renderer::CreatePixelFormatArray(NiDX9Renderer *this, NiPixelFormat **ppkFormatArray, unsigned int uiUsage, _D3DRESOURCETYPE eType);
NiDX9SystemDesc *__cdecl NiDX9Renderer::GetSystemDesc();
void __cdecl NiD3DUtility::GetD3DFromNi(_D3DMATRIX *kD3D, NiMatrix3 *kNiRot, NiPoint3 *kNiTrans, float fNiScale);
char *__thiscall NiDX9Renderer::GetBehaviorString(NiDX9Renderer *this);
_D3DFORMAT __cdecl NiDX9Renderer::GetCompatibleAdapterFormat(NiDX9Renderer::FrameBufferFormat eFBFormat);
_D3DMULTISAMPLE_TYPE __cdecl NiDX9Renderer::GetMultiSampleType(unsigned int uiMode);
bool __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___unsigned_int>::IsKeysEqual(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key1, unsigned int key2);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiDX92DBufferData>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiD3DShaderInterface__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *this, unsigned int);
void *__thiscall NiTArray<bool____cdecl____bool_void___>::_vector_deleting_destructor_(NiTArray<bool (__cdecl*)(bool,void *)> *this, unsigned int);
void *__thiscall NiTArray<void__>::_scalar_deleting_destructor_(NiTArray<void *> *this, unsigned int);
void *__thiscall NiTArray<bool____cdecl____void___>::_vector_deleting_destructor_(NiTArray<bool (__cdecl*)(void *)> *this, unsigned int);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiShader__>::RemoveAll(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this);
void __thiscall NiDX9Renderer::InitToDefault(NiDX9Renderer *this);
BOOL __cdecl NiDX9Renderer::_SDMShutdown();
bool __thiscall NiDX9Renderer::InitializePresentParams(NiDX9Renderer *this, HWND__ *kWndDevice, unsigned int uiWidth, unsigned int uiHeight, unsigned int uiUseFlags, unsigned int uiFBMode, NiDX9Renderer::FrameBufferFormat eFBFormat, NiDX9Renderer::DepthStencilFormat eDSFormat, unsigned int uiBackBufferCount, NiDX9Renderer::SwapEffect eSwapEffect, unsigned int uiRefreshRate, NiDX9Renderer::PresentationInterval ePresentationInterval, _D3DPRESENT_PARAMETERS_ *kD3DPresentParams);
bool __thiscall NiDX9Renderer::InitializeDeviceCaps(NiDX9Renderer *this, _D3DPRESENT_PARAMETERS_ *kPresentParams);
bool __thiscall NiDX9Renderer::GenerateDefaultTextureData(NiDX9Renderer *this);
const char *__thiscall NiDX9Renderer::GetDriverInfo(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::SetMipmapSkipLevel(NiDX9Renderer *this, unsigned int uiSkip);
unsigned int __thiscall NiDX9Renderer::GetMipmapSkipLevel(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::PurgeEffect(NiDX9Renderer *this, NiDynamicEffect *pkEffect);
void __thiscall NiDX9Renderer::PurgeScreenTextureRendererData(NiDX9Renderer *this, NiScreenTexture *pkScreenTexture);
void __thiscall NiDX9Renderer::PurgeSkinInstance(NiDX9Renderer *this, NiSkinInstance *pkSkinInstance);
bool __thiscall NiDX9Renderer::PackGeometryBuffer(NiDX9Renderer *this, NiGeometryBufferData *pkBuffData, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance, NiD3DShaderDeclaration *pkShaderDecl, bool bForce);
bool __thiscall NiDX9Renderer::PackSkinnedGeometryBuffer(NiDX9Renderer *this, NiGeometryBufferData *pkBuffData, NiGeometryData *pkData, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiD3DShaderDeclaration *pkShaderDecl, bool bForce);
void __thiscall NiRenderer::LockPrecacheCriticalSection(NiRenderer *this);
void __thiscall NiRenderer::UnlockPrecacheCriticalSection(NiRenderer *this);
bool __thiscall NiDX9Renderer::ReservePrepackedBufferSpace(NiDX9Renderer *this, NiGeometryBufferData *pkBuffData, NiGeometryData *pkData, NiSkinPartition::Partition *pkPartition, NiD3DShaderDeclaration *pkShaderDecl);
bool __thiscall NiDX9Renderer::CreateRenderedTextureRendererData(NiDX9Renderer *this, NiRenderedTexture *pkTexture);
bool __thiscall NiDX9Renderer::CreateRenderedCubeMapRendererData(NiDX9Renderer *this, NiRenderedCubeMap *pkCubeMap);
bool __thiscall NiDX9Renderer::CreateDynamicTextureRendererData(NiDX9Renderer *this, NiDynamicTexture *pkTexture);
void *__thiscall NiDX9Renderer::LockDynamicTexture(NiDX9Renderer *this, NiTexture::RendererData *pkRData, int *iPitch);
bool __thiscall NiDX9Renderer::UnLockDynamicTexture(NiDX9Renderer *this, NiTexture::RendererData *pkRData);
bool __thiscall NiDX9Renderer::Create2DBufferRendererData(NiDX9Renderer *this, Ni2DBuffer *pkBuffer, NiPixelFormat *pkFormat);
void __thiscall NiDX9Renderer::RemoveRenderedCubeMapData(NiDX9Renderer *this, NiRenderedCubeMap *pkCubeMap);
void __thiscall NiDX9Renderer::RemoveRenderedTextureData(NiDX9Renderer *this, NiRenderedTexture *pkTexture);
void __thiscall NiDX9Renderer::RemoveDynamicTextureData(NiDX9Renderer *this, NiDynamicTexture *pkTexture);
bool __thiscall NiDX9Renderer::IsHardwareSkinned(NiDX9Renderer *this, NiGeometry *pkGeometry, NiD3DShaderInterface *pkShader);
void __cdecl NiD3DUtility::GetD3DFromNi(_D3DMATRIX *kD3D, NiTransform *kNi);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiDX92DBufferData>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiDX92DBufferData>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DShaderInterface__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiD3DShaderInterface__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiVBBlock___NiDX9Renderer::PrePackObject__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiVBBlock *,NiDX9Renderer::PrePackObject *> *this, unsigned int);
void *__thiscall NiTPointerMap<NiVBBlock___NiDX9Renderer::PrePackObject__>::_scalar_deleting_destructor_(NiTPointerMap<NiVBBlock *,NiDX9Renderer::PrePackObject *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_HWND_____NiPointer<NiRenderTargetGroup>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,HWND__ *,NiPointer<NiRenderTargetGroup> > *this, unsigned int);
void *__thiscall NiTPointerMap<HWND_____NiPointer<NiRenderTargetGroup>>::_scalar_deleting_destructor_(NiTPointerMap<HWND__ *,NiPointer<NiRenderTargetGroup> > *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiRenderedTexture___NiDX9RenderedTextureData__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiRenderedTexture *,NiDX9RenderedTextureData *> *this, unsigned int);
void *__thiscall NiTPointerMap<NiRenderedTexture___NiDX9RenderedTextureData__>::_vector_deleting_destructor_(NiTPointerMap<NiRenderedTexture *,NiDX9RenderedTextureData *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiRenderedCubeMap___NiDX9RenderedCubeMapData__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *> *this, unsigned int);
void *__thiscall NiTPointerMap<NiRenderedCubeMap___NiDX9RenderedCubeMapData__>::_scalar_deleting_destructor_(NiTPointerMap<NiRenderedCubeMap *,NiDX9RenderedCubeMapData *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiDynamicTexture___NiDX9DynamicTextureData__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiDynamicTexture *,NiDX9DynamicTextureData *> *this, unsigned int);
void *__thiscall NiTPointerMap<NiDynamicTexture___NiDX9DynamicTextureData__>::_vector_deleting_destructor_(NiTPointerMap<NiDynamicTexture *,NiDX9DynamicTextureData *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiDX92DBufferData>>::_scalar_deleting_destructor_(NiTPointerList<NiPointer<NiDX92DBufferData> > *this, unsigned int);
void *__thiscall NiTPointerList<NiD3DShaderInterface__>::_vector_deleting_destructor_(NiTPointerList<NiD3DShaderInterface *> *this, unsigned int);
bool __thiscall NiDX9Renderer::InitializeTextureDefaults(NiDX9Renderer *this);
NiPixelFormat *__thiscall NiDX9Renderer::FindClosestDepthStencilFormat(NiDX9Renderer *this, NiPixelFormat *pkFrontBufferFormat, unsigned int uiDepthBPP, unsigned int uiStencilBPP);
bool __thiscall NiDX9Renderer::Do_BeginUsingRenderTargetGroup(NiDX9Renderer *this, NiRenderTargetGroup *pkTarget, unsigned int uiClearMode);
bool __thiscall NiDX9Renderer::Do_EndUsingRenderTargetGroup(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::ValidateRenderTargetGroup(NiDX9Renderer *this, NiRenderTargetGroup *pkTarget);
bool __thiscall NiDX9Renderer::IsDepthBufferCompatible(NiDX9Renderer *this, Ni2DBuffer *pkBuffer, NiDepthStencilBuffer *pkDSBuffer);
void __thiscall NiDX9Renderer::Do_ClearBuffer(NiDX9Renderer *this, NiRect<float> *pkR, unsigned int uiMode);
NiPixelData *__thiscall NiDX9Renderer::TakeScreenShot(NiDX9Renderer *this, NiRect<unsigned int> *pkScreenRect);
bool __thiscall NiDX9Renderer::FastCopy(NiDX9Renderer *this, Ni2DBuffer *pkSrc, Ni2DBuffer *pkDest, NiRect<unsigned int> *pkSrcRect, unsigned int uiDestX, unsigned int uiDestY);
bool __thiscall NiDX9Renderer::Copy(NiDX9Renderer *this, Ni2DBuffer *pkSrc, Ni2DBuffer *pkDest, NiRect<unsigned int> *pkSrcRect, NiRect<unsigned int> *pkDestRect, Ni2DBuffer::CopyFilterPreference ePref);
bool __thiscall NiDX9Renderer::PurgeTexture(NiDX9Renderer *this, NiTexture *pkIm);
void __thiscall NiDX9Renderer::FreeGeometricData(NiDX9Renderer *this, NiGeometryData *pkData, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition);
void __thiscall NiDX9Renderer::PerformPrecache(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::Do_DisplayFrame(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::SetModelTransform(NiDX9Renderer *this, NiTransform *kXform, bool bPushToDevice);
void __thiscall NiDX9Renderer::SetSkinnedModelTransforms(NiDX9Renderer *this, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiTransform *kWorld);
void __thiscall NiDX9Renderer::CalculateBoneMatrices(NiDX9Renderer *this, NiSkinInstance *pkSkinInstance, NiTransform *kWorld, bool bTranspose, unsigned int uiBoneMatrixRegisters, bool bPalettizedBones);
void __thiscall NiDX9Renderer::Do_RenderPoints(NiDX9Renderer *this, NiParticles *pkParticles);
void __thiscall NiDX9Renderer::Do_RenderLines(NiDX9Renderer *this, NiLines *pkLines);
void __thiscall NiDX9Renderer::Do_EndBatch(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::AddToBatch(NiDX9Renderer *this, NiGeometry *pkGeometry);
void __thiscall NiDX9Renderer::DrawPrimitive(NiDX9Renderer *this, NiGeometry *pkGeometry, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance, NiTransform *kWorld, NiBound *kWorldBound, NiGeometryBufferData *pkBuffData);
void __thiscall NiDX9Renderer::DrawSkinnedPrimitive(NiDX9Renderer *this, NiGeometry *pkGeometry, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance, NiTransform *kWorld, NiBound *kWorldBound);
void __thiscall NiDX9Renderer::PurgeGeometryData(NiDX9Renderer *this, NiGeometryData *pkData);
void __thiscall NiDX9Renderer::PurgeSkinPartitionRendererData(NiDX9Renderer *this, NiSkinPartition *pkSkinPartition);
void __thiscall NiDX9Renderer::RegisterD3DShader(NiDX9Renderer *this, NiD3DShaderInterface *pkD3DShader);
void __thiscall NiDX9Renderer::PackScreenTextureBuffers(NiDX9Renderer *this, NiScreenTexture *pkScreenTexture, unsigned __int16 usDirtyFlags);
bool __thiscall NiDX9Renderer::PrePackGeometryBuffer(NiDX9Renderer *this, NiGeometry *pkGeom, NiGeometryData *pkData, unsigned __int16 usTriCount, unsigned __int16 usMaxTriCount, const unsigned __int16 *pusIndexArray, const unsigned __int16 *pusArrayLengths, unsigned __int16 usArrayCount, NiD3DShaderDeclaration *pkShaderDecl);
bool __thiscall NiDX9Renderer::PrePackSkinnedGeometryBuffer(NiDX9Renderer *this, NiGeometry *pkGeom, NiGeometryData *pkData, NiSkinInstance *pkSkin, NiD3DShaderDeclaration *pkShaderDecl, unsigned int uiBonesPerPartition, unsigned int uiBonesPerVertex);
void __thiscall NiDX9Renderer::NiDX9Renderer(NiDX9Renderer *this);
NiRTTI *__thiscall NiDX9Renderer::GetRTTI(NiDX9Renderer *this);
unsigned int __thiscall NiDX9Renderer::GetFlags(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::GetLeftRightSwap(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::SetLeftRightSwap(NiDX9Renderer *this, bool bSwap);
NiRenderTargetGroup *__thiscall NiDX9Renderer::GetCurrentRenderTargetGroup(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::SetDepthClear(NiDX9Renderer *this, const float fZClear);
float __thiscall NiDX9Renderer::GetDepthClear(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::SetBackgroundColor(NiDX9Renderer *this, NiColor *kColor);
void __thiscall NiDX9Renderer::SetBackgroundColor(NiDX9Renderer *this, NiColorA *kColor);
void __thiscall NiDX9Renderer::GetBackgroundColor(NiDX9Renderer *this, NiColorA *kColor);
void __thiscall NiDX9Renderer::SetStencilClear(NiDX9Renderer *this, unsigned int uiClear);
unsigned int __thiscall NiDX9Renderer::GetStencilClear(NiDX9Renderer *this);
float __thiscall NiDX9Renderer::GetMaxFogValue(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::SetMaxFogValue(NiDX9Renderer *this, float fFogVal);
bool __thiscall NiDX9Renderer::Initialize(NiDX9Renderer *this, unsigned int uiWidth, unsigned int uiHeight, unsigned int uiUseFlags, HWND__ *kWndDevice, HWND__ *kWndFocus, unsigned int uiAdapter, NiDX9Renderer::DeviceDesc eDesc, NiDX9Renderer::FrameBufferFormat eFBFormat, NiDX9Renderer::DepthStencilFormat eDSFormat, NiDX9Renderer::PresentationInterval ePresentationInterval, NiDX9Renderer::SwapEffect eSwapEffect, unsigned int uiFBMode, unsigned int uiBackBufferCount, unsigned int uiRefreshRate);
bool __thiscall NiDX9Renderer::Recreate(NiDX9Renderer *this);
NiDX9Renderer::RecreateStatus __thiscall NiDX9Renderer::Recreate(NiDX9Renderer *this, unsigned int uiWidth, unsigned int uiHeight, unsigned int uiUseFlags, HWND__ *kWndDevice, NiDX9Renderer::FrameBufferFormat eFBFormat, NiDX9Renderer::DepthStencilFormat eDSFormat, NiDX9Renderer::PresentationInterval ePresentationInterval, NiDX9Renderer::SwapEffect eSwapEffect, unsigned int uiFBMode, unsigned int uiBackBufferCount, unsigned int uiRefreshRate);
bool __thiscall NiDX9Renderer::PrecacheGeometry(NiDX9Renderer *this, NiGeometry *pkGeometry, unsigned int uiBonesPerPartition, unsigned int uiBonesPerVertex);
void __thiscall NiDX9Renderer::Do_RenderShape(NiDX9Renderer *this, NiTriStrips *pkTriStrips);
void __thiscall NiDX9Renderer::Do_BatchRenderStrips(NiDX9Renderer *this, NiTriStrips *pkTriStrips);
void __thiscall NiDX9Renderer::ReleaseD3DShader(NiDX9Renderer *this, NiD3DShaderInterface *pkD3DShader);
void __thiscall NiDX9Renderer::PurgeAllD3DShaders(NiDX9Renderer *this);
bool __thiscall NiDX9Renderer::LostDeviceRestore(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::PackScreenTextureGeomBuffer(NiDX9Renderer *this, NiScreenTexture *pkScreenTexture);
void __thiscall NiDX9Renderer::_NiDX9Renderer(NiDX9Renderer *this);
NiDX9Renderer *__cdecl NiDX9Renderer::Create(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiUseFlags, HWND__ *kWndDevice, HWND__ *kWndFocus, unsigned int uiAdapter, NiDX9Renderer::DeviceDesc eDesc, NiDX9Renderer::FrameBufferFormat eFBFormat, NiDX9Renderer::DepthStencilFormat eDSFormat, NiDX9Renderer::PresentationInterval ePresentationInterval, NiDX9Renderer::SwapEffect eSwapEffect, unsigned int uiFBMode, unsigned int uiBackBufferCount, unsigned int uiRefreshRate);
bool __thiscall NiDX9Renderer::Do_BeginFrame(NiDX9Renderer *this);
void __thiscall NiDX9Renderer::Do_RenderScreenTexture(NiDX9Renderer *this, NiScreenTexture *pkScreenTexture);
void *__thiscall NiDX9Renderer::_vector_deleting_destructor_(NiDX9Renderer *this, unsigned int);
void __cdecl NiDX92DBufferData::ClearRenderTarget(IDirect3DDevice9 *pkD3DDevice9, unsigned int uiTarget);
bool __thiscall NiDX92DBufferData::Shutdown(NiDX92DBufferData *this);
bool __cdecl NiDX9DepthStencilBufferData::SetNULLDepthStencilTarget(IDirect3DDevice9 *pkD3DDevice9);
bool __thiscall NiDX9ImplicitBufferData::DisplayFrame(NiDX9ImplicitBufferData *this);
char __thiscall NiPixelFormat::GetBits(NiPixelFormat *this, NiPixelFormat::Component eComp);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiDX9AdditionalDepthStencilBufferData__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiDX9AdditionalDepthStencilBufferData *> *this, unsigned int);
NiRTTI *__thiscall NiDX92DBufferData::GetRTTI(NiDX92DBufferData *this);
unsigned int __thiscall NiDX92DBufferData::GetWidth(NiDX92DBufferData *this);
unsigned int __thiscall NiDX92DBufferData::GetHeight(NiDX92DBufferData *this);
bool __thiscall NiDX92DBufferData::SetRenderTarget(NiDX92DBufferData *this, IDirect3DDevice9 *pkD3DDevice9, unsigned int uiTarget);
bool __thiscall NiDX9DepthStencilBufferData::SetDepthTarget(NiDX9DepthStencilBufferData *this, IDirect3DDevice9 *pkD3DDevice9);
bool __thiscall NiDX9DepthStencilBufferData::HasValidDepthBuffer(NiDX9DepthStencilBufferData *this);
bool __thiscall NiDX9DepthStencilBufferData::HasValidStencilBuffer(NiDX9DepthStencilBufferData *this);
bool __thiscall NiDX9ImplicitDepthStencilBufferData::Recreate(NiDX9ImplicitDepthStencilBufferData *this, IDirect3DDevice9 *pkD3DDevice9);
void __cdecl NiDX9AdditionalDepthStencilBufferData::ShutdownAll();
void __cdecl NiDX9AdditionalDepthStencilBufferData::RecreateAll(IDirect3DDevice9 *pkD3DDevice9);
bool __thiscall NiDX9AdditionalDepthStencilBufferData::Recreate(NiDX9AdditionalDepthStencilBufferData *this, IDirect3DDevice9 *pkD3DDevice9);
bool __thiscall NiDX9ImplicitBufferData::Recreate(NiDX9ImplicitBufferData *this, IDirect3DDevice9 *pkD3DDevice9);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9AdditionalDepthStencilBufferData__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9AdditionalDepthStencilBufferData__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiDX9AdditionalDepthStencilBufferData *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiDX9AdditionalDepthStencilBufferData__>::_vector_deleting_destructor_(NiTPointerList<NiDX9AdditionalDepthStencilBufferData *> *this, unsigned int);
void __thiscall NiDX92DBufferData::ReleaseReferences(NiDX92DBufferData *this);
void __thiscall NiDX9TextureBufferData::_NiDX9TextureBufferData(NiDX9TextureBufferData *this);
NiRTTI *__thiscall NiDX9TextureBufferData::GetRTTI(NiDX9TextureBufferData *this);
void *__thiscall NiDX9TextureBufferData::_vector_deleting_destructor_(NiDX9TextureBufferData *this, unsigned int);
NiDX9TextureBufferData *__cdecl NiDX9TextureBufferData::Create(IDirect3DTexture9 *pkD3DTexture, Ni2DBuffer **pkBuffer);
NiDX9TextureBufferData *__cdecl NiDX9TextureBufferData::CreateCubeFace(IDirect3DCubeTexture9 *pkD3DCubeTexture, _D3DCUBEMAP_FACES eFace, NiDX9TextureBufferData *pkExistingFace, IDirect3DDevice9 *pkD3DDevice9, Ni2DBuffer **pkBuffer);
void __thiscall NiDX9TextureBufferData::ReleaseReferences(NiDX9TextureBufferData *this);
void __thiscall NiDX9AdditionalDepthStencilBufferData::NiDX9AdditionalDepthStencilBufferData(NiDX9AdditionalDepthStencilBufferData *this);
NiRTTI *__thiscall NiDX9AdditionalDepthStencilBufferData::GetRTTI(NiDX9AdditionalDepthStencilBufferData *this);
NiDX9AdditionalDepthStencilBufferData *__cdecl NiDX9AdditionalDepthStencilBufferData::Create(IDirect3DDevice9 *pkD3DDevice9, NiDepthStencilBuffer **pkBuffer, NiPixelFormat *pkFormat);
void __thiscall NiDX9ImplicitBufferData::_NiDX9ImplicitBufferData(NiDX9ImplicitBufferData *this);
NiRTTI *__thiscall NiDX9ImplicitBufferData::GetRTTI(NiDX9ImplicitBufferData *this);
void __thiscall NiDX9ImplicitBufferData::ReleaseReferences(NiDX9ImplicitBufferData *this);
NiRTTI *__thiscall NiDX9ImplicitDepthStencilBufferData::GetRTTI(NiDX9ImplicitDepthStencilBufferData *this);
void *__thiscall NiDX92DBufferData::_vector_deleting_destructor_(NiDX9ImplicitDepthStencilBufferData *this, unsigned int);
void __thiscall NiDX9AdditionalDepthStencilBufferData::_NiDX9AdditionalDepthStencilBufferData(NiDX9AdditionalDepthStencilBufferData *this);
void *__thiscall NiDX9ImplicitBufferData::_scalar_deleting_destructor_(NiDX9ImplicitBufferData *this, unsigned int);
NiDX9ImplicitBufferData *__cdecl NiDX9ImplicitBufferData::Create(IDirect3DDevice9 *pkD3DDevice9, _D3DPRESENT_PARAMETERS_ *kD3DPresentParams, Ni2DBuffer **pkBuffer);
NiDX9ImplicitDepthStencilBufferData *__cdecl NiDX9ImplicitDepthStencilBufferData::Create(IDirect3DDevice9 *pkD3DDevice9, NiDepthStencilBuffer **pkBuffer);
void *__thiscall NiDX9AdditionalDepthStencilBufferData::_vector_deleting_destructor_(NiDX9AdditionalDepthStencilBufferData *this, unsigned int);
void __cdecl NiD3DShaderLibrary::SetDirectoryInfo(const char *pcDirectory);
void __thiscall NiD3DShaderLibrary::NiD3DShaderLibrary(NiD3DShaderLibrary *this, char *pcName);
void __thiscall NiD3DShaderLibrary::_NiD3DShaderLibrary(NiD3DShaderLibrary *this);
void *__thiscall NiD3DShaderLibrary::_vector_deleting_destructor_(NiD3DShaderLibrary *this, unsigned int);
void __cdecl NiD3DUtility::Log(char *pcFmt);
bool __cdecl NiD3DUtility::GetSplitPath(const char *pcFilename, char *pcDrive, char *pcDir, char *pcFname, char *pcExt);
bool __cdecl NiD3DUtility::GetFilePath(const char *pcFilename, char *pcPath, unsigned int uiMaxLen);
bool __cdecl NiD3DUtility::GetFileName(const char *pcFilename, char *pcName, unsigned int uiMaxLen);
bool __cdecl NiD3DUtility::GetFileExtension(const char *pcFilename, char *pcExt, unsigned int uiMaxLen);
unsigned int __cdecl NiD3DUtility::SetString(char **pcDest, unsigned int uiDestSize, const char *pcSrc);
bool __cdecl NiD3DUtility::WriteData(NiBinaryStream *kStream, void *pvData, unsigned int uiSize);
bool __cdecl NiD3DUtility::WriteString(NiBinaryStream *kStream, const char *pcString);
bool __cdecl NiD3DUtility::AllocateAndReadString(NiBinaryStream *kStream, char **pcString, unsigned int *uiStringSize);
bool __cdecl NiD3DUtility::AllocateAndReadData(NiBinaryStream *kStream, void **pvData, unsigned int *uiDataSize);
signed int __cdecl NiD3DShaderConstantMapEntry::InitializeAttribTable();
signed int __cdecl NiD3DShaderConstantMapEntry::InitializeObjectTable();
// void __usercall FillDataArray(float *pfData<ecx>, _D3DMATRIX *kMatrix<eax>);
unsigned int __thiscall NiD3DSCM_Vertex::SetConstantConstant(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, unsigned int uiPass);
bool __cdecl NiD3DSCM_Vertex::LookUpObjectMapping(const char *pcMapping, unsigned int *uiMappingID);
NiShaderAttributeDesc::AttributeType __cdecl NiD3DSCM_Vertex::LookUpObjectMappingType(unsigned int uiMappingID, unsigned int *uiRegCount, unsigned int *uiFloatCount);
bool __cdecl NiD3DSCM_Vertex::IsObjectMappingValidForType(NiD3DSCM_Vertex::Vertex_ObjectMappings eMapping, NiShaderAttributeDesc::ObjectType eType);
NiShaderAttributeDesc::ObjectType __cdecl NiD3DShaderConstantMapEntry::GetObjectType(unsigned int uiFlags);
void *__thiscall NiD3DSCM_Vertex::_vector_deleting_destructor_(NiD3DSCM_Vertex *this, unsigned int);
bool __cdecl NiD3DSCM_Vertex::ParseKeyName(const char *pszOrigName, char *pszTrueName, unsigned int uiMaxLen, unsigned int *uiRegisterCount);
bool __cdecl NiD3DSCM_Vertex::LookUpPredefinedMapping(const char *pszMapping, unsigned int *uiMappingID, unsigned int *uiNumRegisters);
NiShaderAttributeDesc::AttributeType __cdecl NiD3DSCM_Vertex::LookUpPredefinedMappingType(const char *pszMapping);
unsigned int __thiscall NiD3DSCM_Vertex::SetupPredefinedEntry(NiD3DSCM_Vertex *this, NiD3DShaderConstantMapEntry *pkEntry);
unsigned int __thiscall NiD3DSCM_Vertex::SetupObjectEntry(NiD3DSCM_Vertex *this, NiD3DShaderConstantMapEntry *pkEntry);
unsigned int __thiscall NiD3DSCM_Vertex::PerformOperatorMultiply(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
unsigned int __thiscall NiD3DSCM_Vertex::PerformOperatorDivide(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
unsigned int __thiscall NiD3DSCM_Vertex::PerformOperatorAdd(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
unsigned int __thiscall NiD3DSCM_Vertex::PerformOperatorSubtract(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
void __cdecl NiD3DSCM_Vertex::SetupTextureTransformMatrix(D3DXMATRIX *kResult, NiMatrix3 *pkTexMatrix, bool bInv, bool bTrans);
bool __thiscall NiD3DShaderConstantMapEntry::IsBool(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsUnsignedInt(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsFloat(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsPoint2(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsPoint3(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsPoint4(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsMatrix3(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsMatrix4(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsColor(NiD3DShaderConstantMapEntry *this);
bool __thiscall NiD3DShaderConstantMapEntry::IsTexture(NiD3DShaderConstantMapEntry *this);
unsigned int __thiscall NiD3DSCM_Vertex::SetDefinedConstant(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
int __stdcall loc_8FDD55(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_8FDD86(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_8FDDB4(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_8FDDE5(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
unsigned int __thiscall NiD3DSCM_Vertex::SetAttributeConstant(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass, bool bGlobal, NiExtraData *pkExtraData);
unsigned int __thiscall NiD3DSCM_Vertex::SetGlobalConstant(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, unsigned int uiPass);
bool __cdecl NiD3DSCM_Vertex::IsLightCorrectType(NiLight *pkLight, NiShaderAttributeDesc::ObjectType eType);
bool __cdecl NiD3DSCM_Vertex::GetDynamicEffectData(void *pvData, unsigned int uiDataSize, NiD3DSCM_Vertex::Vertex_ObjectMappings eMapping, NiDynamicEffect *pkDynEffect, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
int __cdecl loc_8FED2E(int pvData, int uiDataSize, int eMapping, int pkDynEffect, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
unsigned int __thiscall NiD3DSCM_Vertex::SetupDefinedConstantValue(NiD3DSCM_Vertex *this, unsigned int uiOperatorNum, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
int __stdcall loc_8FFC5A(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, int pkState, int pkEffects, int kWorld, int kWorldBound); // weak
int __stdcall loc_8FFC7F(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, int pkState, int pkEffects, int kWorld, int kWorldBound); // weak
int __stdcall loc_8FFCA4(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, int pkState, int pkEffects, int kWorld, int kWorldBound); // weak
int __stdcall loc_8FFCD5(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, int pkState, int pkEffects, int kWorld, int kWorldBound); // weak
unsigned int __thiscall NiD3DSCM_Vertex::SetupAttributeConstantValue(NiD3DSCM_Vertex *this, unsigned int uiOperatorNum, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiPropertyState *pkState, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
void __thiscall NiTArray<NiPointer<NiD3DShaderConstantMapEntry>>::_NiTArray<NiPointer<NiD3DShaderConstantMapEntry>>(NiTArray<NiPointer<NiD3DShaderConstantMapEntry> > *this);
void *__thiscall NiTArray<NiPointer<NiD3DShaderConstantMapEntry>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiD3DShaderConstantMapEntry> > *this, unsigned int);
unsigned int __thiscall NiD3DSCM_Vertex::SetOperatorConstant(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
NiDynamicEffect *__cdecl NiD3DSCM_Vertex::GetDynamicEffectForObject(NiDynamicEffectState *pkEffectState, NiShaderAttributeDesc::ObjectType eObjectType, unsigned int uiObjectIndex);
unsigned int __thiscall NiD3DSCM_Vertex::SetObjectConstant(NiD3DSCM_Vertex *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
void __thiscall NiD3DShaderConstantMap::NiD3DShaderConstantMap(NiD3DShaderConstantMap *this, NiDX9Renderer *pkRenderer);
void *__thiscall NiD3DShaderConstantMap::_scalar_deleting_destructor_(NiD3DShaderConstantMap *this, unsigned int);
void __thiscall NiD3DSCM_Vertex::NiD3DSCM_Vertex(NiD3DSCM_Vertex *this, NiDX9Renderer *pkRenderer);
void __cdecl NiD3DShaderProgramCreator::SetD3DRenderer(NiDX9Renderer *pkD3DRenderer);
void __thiscall NiD3DShaderFactory::SetRenderer(NiD3DShaderFactory *this, NiDX9Renderer *pkRenderer);
NiShader *__thiscall NiD3DShaderFactory::RetrieveShader(NiD3DShaderFactory *this, const char *pcName, unsigned int uiImplementation, bool bReportNotFound);
void __thiscall NiD3DShaderFactory::PurgeAllShaderRendererData(NiD3DShaderFactory *this);
const unsigned int __thiscall NiD3DShaderFactory::GetMinorPixelShaderVersion(NiD3DShaderFactory *this, const unsigned int uiVersion);
const unsigned int __thiscall NiD3DShaderFactory::GetMajorVertexShaderVersion(NiD3DShaderFactory *this, const unsigned int uiVersion);
const unsigned int __thiscall NiD3DShaderFactory::CreatePixelShaderVersion(NiD3DShaderFactory *this, const unsigned int uiMajorVersion, const unsigned int uiMinorVersion);
const unsigned int __thiscall NiD3DShaderFactory::CreateVertexShaderVersion(NiD3DShaderFactory *this, const unsigned int uiMajorVersion, const unsigned int uiMinorVersion);
NiD3DShaderFactory *__cdecl NiD3DShaderFactory::GetD3DShaderFactory();
const char *__thiscall NiD3DShaderFactory::GetFirstProgramDirectory(NiD3DShaderFactory *this, void **kIter);
const char *__thiscall NiD3DShaderFactory::GetNextProgramDirectory(NiD3DShaderFactory *this, void **kIter);
void __thiscall NiD3DShaderFactory::AddProgramDirectory(NiD3DShaderFactory *this, const char *pacDirectory);
void __thiscall NiD3DShaderFactory::RemoveProgramDirectory(NiD3DShaderFactory *this, const char *pacDirectory);
void __thiscall NiD3DShaderFactory::RemoveAllProgramDirectories(NiD3DShaderFactory *this);
const char *__thiscall NiD3DShaderFactory::GetRendererString(NiD3DShaderFactory *this);
int __cdecl NiD3DShaderFactory::_SDMShutdown();
void __thiscall NiD3DShaderFactory::InsertShader(NiD3DShaderFactory *this, NiShader *pkShader, unsigned int uiImplementation);
NiShader *__thiscall NiD3DShaderFactory::FindShader(NiD3DShaderFactory *this, const char *pcName, unsigned int uiImplementation);
void __thiscall NiD3DShaderFactory::RemoveShader(NiD3DShaderFactory *this, const char *pcName, unsigned int uiImplementation);
void __thiscall NiD3DShaderFactory::RemoveAllShaders(NiD3DShaderFactory *this);
void __thiscall NiD3DShaderFactory::RestoreAllShaderRendererData(NiD3DShaderFactory *this);
NiD3DGlobalConstantEntry *__thiscall NiD3DShaderFactory::GetGlobalShaderConstantEntry(NiD3DShaderFactory *this, const char *pcKey);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiShader__>_NiShader__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiShader__>_NiShader__>(NiTStringTemplateMap<NiTPointerMap<char const *,NiShader *>,NiShader *> *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPSysModifier__>_NiPSysModifier__>::SetValue(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DShaderProgramCreator *>,NiD3DShaderProgramCreator *> *this, NiTMapItem<char const *,NiD3DShaderProgramCreator *> *pkItem, const char *pcKey, NiD3DShaderProgramCreator *val);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiShaderLibrary>>_NiPointer<NiShaderLibrary>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiShaderLibrary>>_NiPointer<NiShaderLibrary>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiShaderLibrary> >,NiPointer<NiShaderLibrary> > *this);
bool __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiD3DShaderProgramCreator__>_NiD3DShaderProgramCreator__>::IsKeysEqual(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DShaderProgramCreator *>,NiD3DShaderProgramCreator *> *this, const char *pcKey1, const char *pcKey2);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiShader__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiShader *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiShader__>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiShader *> *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiShader__>::_scalar_deleting_destructor_(NiTStringPointerMap<NiShader *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiShaderLibrary>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NiPointer<NiShaderLibrary>>::_scalar_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiShaderLibrary> > *this, unsigned int);
void *__thiscall NiTStringPointerMap<NiPointer<NiShaderLibrary>>::_vector_deleting_destructor_(NiTStringPointerMap<NiPointer<NiShaderLibrary> > *this, unsigned int);
void __thiscall NiGeometry::SetShader(NiGeometry *this, NiShader *pkShader);
void __thiscall NiD3DGlobalConstantEntry::NiD3DGlobalConstantEntry(NiD3DGlobalConstantEntry *this, const char *pcKey, NiShaderAttributeDesc::AttributeType eType, unsigned int uiDataSize, const void *pvDataSource);
void *__thiscall NiD3DGlobalConstantEntry::_scalar_deleting_destructor_(NiD3DGlobalConstantEntry *this, unsigned int);
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiD3DGlobalConstantEntry__>_NiD3DGlobalConstantEntry__>::_NiTStringTemplateMap<NiTMap<char_const___NiD3DGlobalConstantEntry__>_NiD3DGlobalConstantEntry__>(NiTStringTemplateMap<NiTMap<char const *,NiD3DGlobalConstantEntry *>,NiD3DGlobalConstantEntry *> *this);
void *__thiscall NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::_scalar_deleting_destructor_(NiTMapBase<DFALL<NiD3DGlobalConstantEntry *>,char const *,NiD3DGlobalConstantEntry *> *this, unsigned int);
void *__thiscall NiTMap<char_const___NiD3DGlobalConstantEntry__>::_scalar_deleting_destructor_(NiTMap<char const *,NiD3DGlobalConstantEntry *> *this, unsigned int);
bool __thiscall NiD3DShaderFactory::PerformShaderAttachment(NiD3DShaderFactory *this, NiGeometry *pkGeometry, NiD3DShaderInterface *pkShader);
bool __thiscall NiD3DShaderFactory::Geometry_DetachShader(NiD3DShaderFactory *this, NiGeometry *pkGeometry);
bool __cdecl NiD3DShaderFactory::RegisterGlobalShaderConstant(const char *pcKey, NiShaderAttributeDesc::AttributeType eType, unsigned int uiDataSize, const void *pvInitialData);
bool __cdecl NiD3DShaderFactory::ReleaseGlobalShaderConstant(const char *pcKey);
bool __cdecl NiD3DShaderFactory::RetrieveGlobalShaderConstant(const char *pcKey, unsigned int *uiDataSize, const void **pvData);
bool __cdecl NiD3DShaderFactory::UpdateGlobalShaderConstant(const char *pcKey, unsigned int uiDataSize, const void *pvData);
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSequence>>::SetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,HWND__ *,NiPointer<NiRenderTargetGroup> > *this, HWND__ *key, NiPointer<NiRenderTargetGroup> val);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::DeleteItem(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *this, NiTListItem<NiPointer<NiDX92DBufferData> > *pkItem);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiShaderLibrary>>_NiPointer<NiShaderLibrary>>::SetValue(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiShaderLibrary> >,NiPointer<NiShaderLibrary> > *this, NiTMapItem<char const *,NiPointer<NiShaderLibrary> > *pkItem, const char *pcKey, NiPointer<NiShaderLibrary> val);
bool __thiscall NiD3DShaderFactory::Geometry_AttachShader(NiD3DShaderFactory *this, NiGeometry *pkGeometry, const char *pcName, unsigned int uiImplementation);
bool __thiscall NiD3DShaderFactory::Geometry_AttachShader(NiD3DShaderFactory *this, NiGeometry *pkGeometry, NiShader *pkShader);
void __thiscall NiD3DShaderFactory::InsertLibrary(NiD3DShaderFactory *this, NiShaderLibrary *pkLibrary);
NiShaderLibrary *__thiscall NiD3DShaderFactory::FindLibrary(NiD3DShaderFactory *this, const char *pcName);
void __thiscall NiD3DShaderFactory::RemoveLibrary(NiD3DShaderFactory *this, const char *pcName);
NiShaderLibrary *__thiscall NiD3DShaderFactory::GetFirstLibrary(NiD3DShaderFactory *this);
NiShaderLibrary *__thiscall NiD3DShaderFactory::GetNextLibrary(NiD3DShaderFactory *this);
void __thiscall NiD3DShaderFactory::RemoveAllLibraries(NiD3DShaderFactory *this);
void *__thiscall NiTStringTemplateMap<NiTMap<char_const___NiD3DGlobalConstantEntry__>_NiD3DGlobalConstantEntry__>::_scalar_deleting_destructor_(NiTStringMap<NiD3DGlobalConstantEntry *> *this, unsigned int);
void __thiscall NiD3DShaderFactory::NiD3DShaderFactory(NiD3DShaderFactory *this);
void __thiscall NiD3DShaderFactory::_NiD3DShaderFactory(NiD3DShaderFactory *this);
void *__thiscall NiD3DShaderFactory::_vector_deleting_destructor_(NiD3DShaderFactory *this, unsigned int);
void __thiscall NiD3DShaderFactory::_SDMInit(NiUnsharedGeometryGroup *this);
void __thiscall NiD3DShaderConstantMapEntry::NiD3DShaderConstantMapEntry(NiD3DShaderConstantMapEntry *this);
void __thiscall NiD3DShaderConstantMapEntry::SetKey(NiD3DShaderConstantMapEntry *this, const char *pcKey);
void __thiscall NiD3DShaderConstantMapEntry::SetVariableName(NiD3DShaderConstantMapEntry *this, const char *pcVariableName);
void __thiscall NiD3DShaderConstantMap::SetD3DRenderer(NiD3DShaderConstantMap *this, NiDX9Renderer *pkD3DRenderer);
unsigned int __thiscall NiD3DShaderConstantMap::AddEntry(NiD3DShaderConstantMap *this, const char *pszKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiShaderRegister, unsigned int uiRegisterCount, const char *pszVariableName, unsigned int uiDataSize, unsigned int uiDataStride, const void *pvDataSource, bool bCopyData);
unsigned int __thiscall NiD3DShaderConstantMap::AddPredefinedEntry(NiD3DShaderConstantMap *this, const char *pszKey, unsigned int uiExtra, unsigned int uiShaderRegister, const char *pszVariableName);
unsigned int __thiscall NiD3DShaderConstantMap::AddAttributeEntry(NiD3DShaderConstantMap *this, const char *pszKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiShaderRegister, unsigned int uiRegisterCount, const char *pszVariableName, unsigned int uiDataSize, unsigned int uiDataStride, const void *pvDataSource, bool bCopyData);
unsigned int __thiscall NiD3DShaderConstantMap::AddConstantEntry(NiD3DShaderConstantMap *this, const char *pszKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiShaderRegister, unsigned int uiRegisterCount, const char *pszVariableName, unsigned int uiDataSize, unsigned int uiDataStride, const void *pvDataSource, bool bCopyData);
unsigned int __thiscall NiD3DShaderConstantMap::AddGlobalEntry(NiD3DShaderConstantMap *this, const char *pszKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiShaderRegister, unsigned int uiRegisterCount, const char *pszVariableName, unsigned int uiDataSize, unsigned int uiDataStride, const void *pvDataSource, bool bCopyData);
unsigned int __thiscall NiD3DShaderConstantMap::AddOperatorEntry(NiD3DShaderConstantMap *this, const char *pszKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiShaderRegister, unsigned int uiRegisterCount, const char *pszVariableName);
unsigned int __thiscall NiD3DShaderConstantMap::AddObjectEntry(NiD3DShaderConstantMap *this, const char *pszKey, unsigned int uiShaderRegister, const char *pszVariableName, unsigned int uiObjectIndex, NiShaderAttributeDesc::ObjectType eObjectType);
NiD3DShaderConstantMapEntry *__thiscall NiD3DShaderConstantMap::GetEntry(NiD3DShaderConstantMap *this, const char *pszKey);
NiD3DShaderConstantMapEntry *__thiscall NiD3DShaderConstantMap::GetEntryAtIndex(NiD3DShaderConstantMap *this, unsigned int uiIndex);
unsigned int __thiscall NiD3DShaderConstantMap::SetShaderConstants(NiD3DShaderConstantMap *this, NiD3DShaderProgram *pkShaderProgram, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass, bool bGlobal);
unsigned int __thiscall NiD3DShaderConstantMap::GetEntryIndex(NiD3DShaderConstantMap *this, const char *pszKey);
void *__thiscall NSBConstantMap::NSBCM_Entry::_scalar_deleting_destructor_(NiD3DShaderConstantMapEntry *this, unsigned int);
unsigned int __thiscall NiD3DShaderConstantMap::RemoveEntry(NiD3DShaderConstantMap *this, const char *pszKey);
const void *__thiscall NiD3DShaderConstantMap::MapAttributeValue(NiD3DShaderConstantMap *this, NiD3DShaderConstantMapEntry *pkEntry, NiExtraData *pkExtra);
const void *__thiscall NiD3DShaderConstantMap::MapConstantValue(NiD3DShaderConstantMap *this, NiD3DShaderConstantMapEntry *pkEntry);
void __thiscall NiD3DShaderConstantMap::_NiD3DShaderConstantMap(NiD3DShaderConstantMap *this);
unsigned int __thiscall NiD3DShaderConstantMap::InsertEntry(NiD3DShaderConstantMap *this, NiD3DShaderConstantMapEntry *pkEntry);
void __thiscall NiD3DShaderDeclaration::ShaderRegisterEntry::ShaderRegisterEntry(NiD3DShaderDeclaration::ShaderRegisterEntry *this);
bool __thiscall NiDX9ShaderDeclaration::SetEntry(NiDX9ShaderDeclaration *this, unsigned int uiEntry, unsigned int uiRegister, NiD3DShaderDeclaration::ShaderParameter eInput, NiD3DShaderDeclaration::ShaderParameterType eType, unsigned int uiStream);
bool __thiscall NiDX9ShaderDeclaration::SetEntry(NiDX9ShaderDeclaration *this, unsigned int uiStream, unsigned int uiEntry, unsigned int uiRegister, NiD3DShaderDeclaration::ShaderParameter eInput, NiD3DShaderDeclaration::ShaderParameterType eType, NiD3DShaderDeclaration::ShaderParameterUsage eUsage, unsigned int uiIndex, NiD3DShaderDeclaration::ShaderParameterTesselator eTess);
bool __thiscall NiDX9ShaderDeclaration::RemoveEntry(NiDX9ShaderDeclaration *this, unsigned int uiEntry, unsigned int uiStream);
bool __thiscall NiDX9ShaderDeclaration::ClearAllEntries(NiDX9ShaderDeclaration *this, unsigned int uiStream);
unsigned int __thiscall NiDX9ShaderDeclaration::GetVertexStride(NiDX9ShaderDeclaration *this, unsigned int uiStream);
void __thiscall NiShaderRequirementDesc::SetSoftwareVPAcceptable(NiDX9ShaderDeclaration *this, bool bSoftwareVB);
bool __thiscall NiDX9ShaderDeclaration::GenerateVertexParameters(NiDX9ShaderDeclaration *this, IDirect3DVertexDeclaration9 **pkDeclaration, unsigned int *uiNumStreams);
bool __cdecl NiDX9ShaderDeclaration::GetShaderParameterValues(_D3DDECLUSAGE eD3DUsage, unsigned int uiUsageIndex, NiD3DShaderDeclaration::ShaderParameter *eInput, NiD3DShaderDeclaration::ShaderParameterType *eType, NiD3DShaderDeclaration::ShaderParameterUsage *eUsage, NiD3DShaderDeclaration::ShaderParameterTesselator *eTess);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_FloatToShort(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_LongToShort(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedLongToShort(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ByteToShort(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedByteToShort(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_FloatToUnsignedByte(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_LongToUnsignedByte(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedLongToUnsignedByte(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ShortToUnsignedByte(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedShortToUnsignedByte(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ByteToUnsignedByte(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedByteToUnsignedByte(NiD3DShaderDeclaration::PackingParameters *kParams);
NiDX9ShaderDeclaration *__cdecl NiDX9ShaderDeclaration::Create(NiRenderer *pkRenderer, unsigned int uiMaxStreamEntryCount, unsigned int uiStreamCount);
void *__thiscall NiDX9ShaderDeclaration::_vector_deleting_destructor_(NiDX9ShaderDeclaration *this, unsigned int);
NiVBChip *__thiscall NiDX9ShaderDeclaration::PackUntransformedVB(NiDX9ShaderDeclaration *this, NiGeometryData *pkData, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, unsigned __int16 usDirtyFlags, NiVBChip *pkOldVBChip, unsigned int uiStream, void *pvLockedBuff);
IDirect3DVertexDeclaration9 *__thiscall NiDX9ShaderDeclaration::GetD3DDeclaration(NiDX9ShaderDeclaration *this);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ShortToShort(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedShortToShort(NiD3DShaderDeclaration::PackingParameters *kParams);
void __cdecl NiD3DShaderDeclaration::SetDefaultPackingFunction(NiD3DShaderDeclaration::ShaderParameterType eType, unsigned int uiAGDType);
void __thiscall NiD3DController::NiD3DController(NiD3DController *this);
void __thiscall NiD3DController::_NiD3DController(NiD3DController *this);
NiRTTI *__thiscall NiD3DController::GetRTTI(NiD3DController *this);
void *__thiscall NiD3DController::_vector_deleting_destructor_(NiD3DController *this, unsigned int);
bool __thiscall NiD3DTimeSyncController::IsEqual(NiD3DTimeSyncController *this, NiObject *pObject);
void __thiscall NiD3DTimeSyncController::_NiD3DTimeSyncController(NiD3DTimeSyncController *this);
bool __thiscall NiD3DTimeSyncController::RegisterStreamables(NiD3DTimeSyncController *this, NiStream *kStream);
void __thiscall NiD3DTimeSyncController::Update(NiD3DTimeSyncController *this, float fTime);
NiObject *__thiscall NiD3DTimeSyncController::CreateClone(NiD3DTimeSyncController *this, NiCloningProcess *kCloning);
void __thiscall NiD3DTimeSyncController::SetTarget(NiD3DTimeSyncController *this, NiObjectNET *pkTarget);
void __thiscall NiD3DTimeSyncController::GetViewerStrings(NiD3DTimeSyncController *this, NiTArray<char *> *pStrings);
void __thiscall NiDX9RenderState::InitShaderState(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::SaveShaderState(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::RestoreShaderState(NiDX9RenderState *this);
bool __thiscall NiDX9RenderState::GetSoftwareVertexProcessing(NiDX9RenderState *this);
void __thiscall NiD3DRenderState::SetBoneCount(NiD3DRenderState *this, unsigned __int16 usNumBones);
float __thiscall NiD3DRenderState::GetMaxFogValue(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SetMaxFogValue(NiD3DRenderState *this, float fFogVal);
void __thiscall NiD3DRenderState::SetCameraNearAndFar(NiD3DRenderState *this, float fNear, float fFar);
bool __thiscall NiD3DRenderState::GetLeftHanded(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SetLeftHanded(NiD3DRenderState *this, bool bLeft);
void __thiscall NiD3DRenderState::SetRenderState(NiD3DRenderState *this, _D3DRENDERSTATETYPE eState, unsigned int uiValue, bool bSave);
unsigned int __thiscall NiD3DRenderState::GetRenderState(NiD3DRenderState *this, _D3DRENDERSTATETYPE eState);
void __thiscall NiD3DRenderState::RestoreRenderState(NiD3DRenderState *this, _D3DRENDERSTATETYPE eState);
void __thiscall NiD3DRenderState::SetPixelShader(NiD3DRenderState *this, IDirect3DPixelShader9 *hShader, bool bSave);
IDirect3DPixelShader9 *__thiscall NiD3DRenderState::GetPixelShader(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::RestorePixelShader(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::ClearPixelShader(NiD3DRenderState *this, IDirect3DPixelShader9 *hShader);
void __thiscall NiD3DRenderState::SetTextureStageState(NiD3DRenderState *this, unsigned int uiStage, _D3DTEXTURESTAGESTATETYPE eState, unsigned int uiValue, bool bSave);
unsigned int __thiscall NiD3DRenderState::GetTextureStageState(NiD3DRenderState *this, unsigned int uiStage, _D3DTEXTURESTAGESTATETYPE eState);
void __thiscall NiD3DRenderState::RestoreTextureStageState(NiD3DRenderState *this, unsigned int uiStage, _D3DTEXTURESTAGESTATETYPE eState);
void __thiscall NiD3DRenderState::InitTextures(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SetTexture(NiD3DRenderState *this, unsigned int uiStage, IDirect3DBaseTexture9 *pkTexture);
IDirect3DBaseTexture9 *__thiscall NiD3DRenderState::GetTexture(NiD3DRenderState *this, unsigned int uiStage);
void __thiscall NiD3DRenderState::ClearTexture(NiD3DRenderState *this, IDirect3DBaseTexture9 *pkTexture);
void __thiscall NiD3DRenderState::SetForceNormalizeNormals(NiD3DRenderState *this, bool bSet);
bool __thiscall NiD3DRenderState::GetForceNormalizeNormals(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SetInternalNormalizeNormals(NiD3DRenderState *this, bool bSet);
bool __thiscall NiD3DRenderState::GetInternalNormalizeNormals(NiD3DRenderState *this);
void __thiscall NiDX9RenderState::SetVertexShader(NiDX9RenderState *this, IDirect3DVertexShader9 *hShader, bool bSave);
IDirect3DVertexShader9 *__thiscall NiDX9RenderState::GetVertexShader(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::RestoreVertexShader(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::ClearVertexShader(NiDX9RenderState *this, IDirect3DVertexShader9 *hShader);
void __thiscall NiDX9RenderState::SetFVF(NiDX9RenderState *this, unsigned int uiFVF, bool bSave);
unsigned int __thiscall NiDX9RenderState::GetFVF(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::RestoreFVF(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::ClearFVF(NiDX9RenderState *this, unsigned int uiFVF);
void __thiscall NiDX9RenderState::SetDeclaration(NiDX9RenderState *this, IDirect3DVertexDeclaration9 *hDeclaration, bool bSave);
IDirect3DVertexDeclaration9 *__thiscall NiDX9RenderState::GetDeclaration(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::RestoreDeclaration(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::ClearDeclaration(NiDX9RenderState *this, IDirect3DVertexDeclaration9 *hDeclaration);
void __thiscall NiDX9RenderState::SetSamplerState(NiDX9RenderState *this, unsigned int uiStage, NiD3DRenderState::NiD3DSamplerState eState, unsigned int uiValue, bool bSave);
unsigned int __thiscall NiDX9RenderState::GetSamplerState(NiDX9RenderState *this, unsigned int uiStage, NiD3DRenderState::NiD3DSamplerState eState);
void __thiscall NiDX9RenderState::RestoreSamplerState(NiDX9RenderState *this, unsigned int uiStage, NiD3DRenderState::NiD3DSamplerState eState);
void *__thiscall NiDX9RenderState::_scalar_deleting_destructor_(NiDX9RenderState *this, unsigned int);
void __thiscall NiDX9RenderState::SetSoftwareVertexProcessing(NiDX9RenderState *this, bool bSoftwareVP);
void __thiscall NiDX9RenderState::InitRenderModes(NiDX9RenderState *this);
void __thiscall NiDX9RenderState::ReadRenderStateCaps(NiDX9RenderState *this);
void __thiscall NiD3DRenderState::DisableAlpha(NiD3DRenderState *this);
NiDX9RenderState *__cdecl NiDX9RenderState::Create(NiDX9Renderer *pkRenderer, _D3DCAPS9 *kD3DCaps9, bool bZBuffer);
void __thiscall NiD3DShaderConstantManager::NiD3DShaderConstantManager(NiD3DShaderConstantManager *this, NiDX9Renderer *pkD3DRenderer);
void __thiscall NiD3DShaderConstantManager::_NiD3DShaderConstantManager(NiD3DShaderConstantManager *this);
bool __thiscall NiD3DShaderConstantManager::SetVertexShaderConstantB(NiD3DShaderConstantManager *this, unsigned int uiStartRegister, const int *pbConstantData, unsigned int uiBoolCount, bool bSave);
bool __thiscall NiD3DShaderConstantManager::SetVertexShaderConstantF(NiD3DShaderConstantManager *this, unsigned int uiStartRegister, const float *pfConstantData, unsigned int uiFloat4Count, bool bSave);
bool __thiscall NiD3DShaderConstantManager::SetVertexShaderConstantI(NiD3DShaderConstantManager *this, unsigned int uiStartRegister, const int *piConstantData, unsigned int uiInt4Count, bool bSave);
bool __thiscall NiD3DShaderConstantManager::SetPixelShaderConstantB(NiD3DShaderConstantManager *this, unsigned int uiStartRegister, const int *pbConstantData, unsigned int uiBoolCount, bool bSave);
bool __thiscall NiD3DShaderConstantManager::SetPixelShaderConstantF(NiD3DShaderConstantManager *this, unsigned int uiStartRegister, const float *pfConstantData, unsigned int uiFloat4Count, bool bSave);
bool __thiscall NiD3DShaderConstantManager::SetPixelShaderConstantI(NiD3DShaderConstantManager *this, unsigned int uiStartRegister, const int *piConstantData, unsigned int uiInt4Count, bool bSave);
void *__thiscall NiD3DShaderConstantManager::_vector_deleting_destructor_(NiD3DShaderConstantManager *this, unsigned int);
bool __thiscall NiGeometryBufferData::IsVBChipValid(NiGeometryBufferData *this);
void __thiscall NiGeometryBufferData::RemoveIB(NiGeometryBufferData *this);
void __thiscall NiGeometryBufferData::SetStreamCount(NiGeometryBufferData *this, unsigned int uiStreamCount);
void __thiscall NiGeometryBufferData::SetFVF(NiGeometryBufferData *this, unsigned int uiFVF);
void __thiscall NiGeometryBufferData::SetVertexDeclaration(NiGeometryBufferData *this, IDirect3DVertexDeclaration9 *hDecl);
void __thiscall NiGeometryBufferData::_NiGeometryBufferData(NiGeometryBufferData *this);
void __thiscall NiD3DDefaultShader::InitializeDeviceCaps(NiD3DDefaultShader *this);
void __thiscall NiDX9LightManager::InitRenderModes(NiDX9LightManager *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetFirstPos(NiTMapBase<NiTPointerAllocator<unsigned int>,NiLight *,NiDX9LightManager::LightEntry *> *this);
unsigned int __thiscall NiDX9LightManager::GetNextAvailableIndex(NiDX9LightManager *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiLight *> *this, unsigned int);
bool __thiscall NiDX9LightManager::LightEntry::Update(NiDX9LightManager::LightEntry *this, NiLight *kLight);
void __thiscall NiDX9LightManager::NextFrame(NiDX9LightManager *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,NiLight *,NiDX9LightManager::LightEntry *> *this, unsigned int);
void *__thiscall NiTPointerMap<NiLight___NiDX9LightManager::LightEntry__>::_vector_deleting_destructor_(NiTPointerMap<NiLight *,NiDX9LightManager::LightEntry *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::_vector_deleting_destructor_(NiTPointerList<NiLight *> *this, unsigned int);
void __thiscall NiDX9LightManager::_NiDX9LightManager(NiDX9LightManager *this);
void __thiscall NiDX9LightManager::UpdateLights(NiDX9LightManager *this, NiDynamicEffectState *pkState);
void __thiscall NiDX9LightManager::NiDX9LightManager(NiDX9LightManager *this, NiDX9RenderState *pkRenderState, IDirect3DDevice9 *pkD3DDevice9);
void __thiscall NiDX9LightManager::SetState(NiDX9LightManager *this, NiDynamicEffectState *pkState, NiTexturingProperty *pkTex, NiVertexColorProperty *pkColor);
void __thiscall NiDX9LightManager::RemoveLight(NiDX9LightManager *this, NiLight *kLight);
void __thiscall NiDX9LightManager::ReleaseLights(NiDX9LightManager *this);
NiPixelFormat *__cdecl NiDX9TextureData::FindClosestPixelFormat(NiTexture::FormatPrefs *kPrefs, NiPixelFormat *const *ppkDestFmts);
bool __thiscall NiDX9TextureData::InitializeFromD3DTexture(NiDX9TextureData *this, IDirect3DBaseTexture9 *pkD3DTexture);
unsigned int __thiscall NiPixelFormat::GetNumComponents(NiPixelFormat *this);
void __thiscall NiDX9TextureData::NiDX9TextureData(NiDX9TextureData *this, NiTexture *pkTexture, NiDX9Renderer *pkRenderer);
unsigned int __thiscall NiDX9TextureData::GetWidth(NiDX9TextureData *this);
unsigned int __thiscall NiDX9TextureData::GetHeight(NiDX9TextureData *this);
unsigned int __thiscall NiDX9TextureData::GetLevels(NiDX9TextureData *this);
IDirect3DBaseTexture9 *__thiscall NiDX9TextureData::GetD3DTexture(NiDX9TextureData *this);
void __thiscall NiDX9TextureData::_NiDX9TextureData(NiDX9TextureData *this);
NiPixelFormat *__thiscall NiDX9TextureData::FindMatchingPixelFormat(NiDX9TextureData *this, NiPixelFormat *kSrcFmt, NiTexture::FormatPrefs *kPrefs, NiPixelFormat **ppkDestFmts);
void __cdecl NiDX9TextureData::ClearTextureData(NiDX9Renderer *pkRenderer);
void *__thiscall NiTexture::RendererData::_vector_deleting_destructor_(NiTexture::RendererData *this, unsigned int);
void *__thiscall NiDX9TextureData::_vector_deleting_destructor_(NiDX9TextureData *this, unsigned int);
void __thiscall NiDX9VertexBufferManager::EndFrame(NiDX9VertexBufferManager *this);
bool __thiscall NiDX9VertexBufferManager::AllocateBufferSpace(NiDX9VertexBufferManager *this, NiGeometryBufferData *pkBuffData, unsigned int uiStream);
void *__thiscall NiDX9VertexBufferManager::LockVB(NiDX9VertexBufferManager *this, IDirect3DVertexBuffer9 *pkVB, unsigned int uiOffset, unsigned int uiSize, unsigned int uiLockFlags);
void __thiscall NiDX9VertexBufferManager::PackVB(NiDX9VertexBufferManager *this, char *pucDestBuffer, char *pucSrcBuffer, unsigned int uiVertexStride, unsigned int uiDataSize, unsigned int uiNumVerts);
bool __thiscall NiDX9VertexBufferManager::UnlockVB(NiDX9VertexBufferManager *this, IDirect3DVertexBuffer9 *pkVB);
void __thiscall NiDX9VertexBufferManager::GenerateVertexParameters(NiDX9VertexBufferManager *this, NiGeometryData *pkData, NiSkinPartition::Partition *pkPartition, unsigned int *uiVertexTypeDesc, unsigned int *uiVertexStride, unsigned int *uiPosOffset, unsigned int *uiWeightOffset, unsigned int *uiNormOffset, unsigned int *uiColorOffset, unsigned int *uiTexOffset);
NiVBChip *__thiscall NiDX9VertexBufferManager::PackUntransformedVB(NiDX9VertexBufferManager *this, NiGeometryData *pkData, NiSkinInstance *pkSkin, unsigned __int16 usDirtyFlags, NiVBChip *pkOldVBChip, void *pvLockedBuff);
NiVBChip *__thiscall NiDX9VertexBufferManager::PackTransformedVB(NiDX9VertexBufferManager *this, NiGeometryBufferData *pkBuffData, unsigned __int16 usVerts, NiPoint2 *pkScreenSpaceVerts, NiColorA *pkColors, NiPoint2 *pkTex, unsigned __int16 usDirtyFlags, NiVBChip *pkOldVBChip, void *pvLockedBuff);
NiVBChip *__thiscall NiDX9VertexBufferManager::PackSkinnedVB(NiDX9VertexBufferManager *this, NiGeometryData *pkData, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, unsigned __int16 usDirtyFlags, NiVBChip *pkOldVBChip, void *pvLockedBuff);
void __thiscall NiDX9VertexBufferManager::DestroyDefaultBuffers(NiDX9VertexBufferManager *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiDX9VertexBufferManager::NiDX9VBInfo__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiDX9VertexBufferManager::NiDX9VBInfo__>::_vector_deleting_destructor_(NiTPointerMap<unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *> *this, unsigned int);
void __thiscall NiDX9VertexBufferManager::_NiDX9VertexBufferManager(NiDX9VertexBufferManager *this);
void __thiscall NiDX9VertexBufferManager::NiDX9VertexBufferManager(NiDX9VertexBufferManager *this, IDirect3DDevice9 *pkD3DDevice9);
void *__thiscall NiDX9VertexBufferManager::_vector_deleting_destructor_(NiDX9VertexBufferManager *this, unsigned int);
bool __thiscall NiDX9SourceTextureData::CreateSurf(NiDX9SourceTextureData *this, NiPixelData *kPixels);
void __cdecl NiDX9SourceTextureData::CopyDataToSurfaceLevel(NiPixelData *kPixels, unsigned int uiLevel, IDirect3DSurface9 *pkMipLevel, unsigned int uiFace);
bool __thiscall NiDX9SourceTextureData::InitializeFromD3DTexture(NiDX9SourceTextureData *this, IDirect3DBaseTexture9 *pkD3DTexture);
bool __thiscall NiDX9SourceTextureData::UpdatePalette(NiDX9SourceTextureData *this, NiPalette *pkNewPalette);
void __thiscall NiDX9SourceTextureData::NiDX9SourceTextureData(NiDX9SourceTextureData *this, NiSourceTexture *pkTexture, NiDX9Renderer *pkRenderer);
void __thiscall NiDX9SourceTextureData::_NiDX9SourceTextureData(NiDX9SourceTextureData *this);
void __thiscall NiDX9SourceTextureData::CopyDataToSurface(NiDX9SourceTextureData *this, NiPixelData *kPixels);
void __thiscall NiDX9SourceTextureData::Update(NiDX9SourceTextureData *this);
bool __thiscall NiDX9SourceTextureData::LoadTextureFile(NiDX9SourceTextureData *this, const char *pcFilename, NiDX9Renderer *pkRenderer, NiTexture::FormatPrefs *kPrefs);
void *__thiscall NiDX9SourceTextureData::_vector_deleting_destructor_(NiDX9SourceTextureData *this, unsigned int);
NiDX9SourceTextureData *__cdecl NiDX9SourceTextureData::Create(NiSourceTexture *pkTexture, NiDX9Renderer *pkRenderer);
void *__thiscall NiDX9SourceCubeMapData::_scalar_deleting_destructor_(NiDX9SourceCubeMapData *this, unsigned int);
bool __thiscall NiPixelFormat::GetPalettized(NiPixelFormat *this);
void __thiscall NiDX9SourceCubeMapData::CopyDataToCubeMapFace(NiDX9SourceCubeMapData *this, NiPixelData *kPixels, NiSourceCubeMap::FaceID eFace);
NiDX9SourceCubeMapData *__cdecl NiDX9SourceCubeMapData::Create(NiSourceCubeMap *pkTexture, NiDX9Renderer *pkRenderer);
void __thiscall NiDX9SourceCubeMapData::Update(NiDX9SourceCubeMapData *this);
_D3DFORMAT __cdecl NiDX9PixelFormat::DetermineD3DFormat(NiPixelFormat *kDesc);
void __cdecl NiDX9PixelFormat::InitFromD3DFormat(_D3DFORMAT eD3DFmt, NiPixelFormat *kFormat);
NiPixelFormat *__cdecl NiDX9PixelFormat::CreateFromD3DFormat(_D3DFORMAT eD3DFmt);
IDirect3DIndexBuffer9 *__thiscall NiDX9IndexBufferManager::PackBuffer(NiDX9IndexBufferManager *this, const unsigned __int16 *pusTriList, unsigned int uiLength, unsigned int uiMaxLength, IDirect3DIndexBuffer9 *pkOldIB, unsigned int *uiIBSize, _D3DPOOL ePool, unsigned int uiUsage);
IDirect3DIndexBuffer9 *__thiscall NiDX9IndexBufferManager::ResizeTempPointConnectivity(NiDX9IndexBufferManager *this, unsigned int uiPoints, bool bRefill, unsigned int uiUsage, _D3DPOOL ePool);
IDirect3DIndexBuffer9 *__thiscall NiDX9IndexBufferManager::ResizeTempLineConnectivity(NiDX9IndexBufferManager *this, unsigned int uiPoints, char *pbFlags, unsigned int *uiConn, unsigned int uiUsage, _D3DPOOL ePool);
void __thiscall NiDX9IndexBufferManager::DestroyDefaultBuffers(NiDX9IndexBufferManager *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiDX9IndexBufferManager::NiDX9IBInfo__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiDX9IndexBufferManager::NiDX9IBInfo__>::_vector_deleting_destructor_(NiTPointerMap<unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *> *this, unsigned int);
void __thiscall NiDX9IndexBufferManager::_NiDX9IndexBufferManager(NiDX9IndexBufferManager *this);
void __thiscall NiDX9IndexBufferManager::NiDX9IndexBufferManager(NiDX9IndexBufferManager *this, IDirect3DDevice9 *pkD3DDevice9);
void *__thiscall NiDX9IndexBufferManager::_vector_deleting_destructor_(NiDX9IndexBufferManager *this, unsigned int);
void __thiscall NiDX9RenderedTextureData::NiDX9RenderedTextureData(NiDX9RenderedTextureData *this, NiRenderedTexture *pkTexture, NiDX9Renderer *pkRenderer);
void __thiscall NiDX9RenderedTextureData::_NiDX9RenderedTextureData(NiDX9RenderedTextureData *this);
void *__thiscall NiDX9RenderedTextureData::_scalar_deleting_destructor_(NiDX9RenderedTextureData *this, unsigned int);
NiPixelFormat *__thiscall NiDX9RenderedTextureData::CreateSurf(NiDX9RenderedTextureData *this, NiRenderedTexture *pkTexture);
NiDX9RenderedTextureData *__cdecl NiDX9RenderedTextureData::Create(NiRenderedTexture *pkTexture, NiDX9Renderer *pkRenderer);
void *__thiscall NiDX9RenderedCubeMapData::_scalar_deleting_destructor_(NiDX9RenderedCubeMapData *this, unsigned int);
NiPixelFormat *__thiscall NiDX9RenderedCubeMapData::CreateSurf(NiDX9RenderedCubeMapData *this, NiRenderedCubeMap *pkTexture);
NiDX9RenderedCubeMapData *__cdecl NiDX9RenderedCubeMapData::Create(NiRenderedCubeMap *pkTexture, NiDX9Renderer *pkRenderer);
IDirect3DBaseTexture9 *__thiscall NiDX9DynamicTextureData::GetSysMemTexture(NiDX9DynamicTextureData *this);
bool __thiscall NiDX9DynamicTextureData::IsLocked(NiDX9DynamicTextureData *this);
void __thiscall NiDX9DynamicTextureData::SetLocked(NiDX9DynamicTextureData *this, bool bTextureLocked);
void *__thiscall NiDX9DynamicTextureData::_vector_deleting_destructor_(NiDX9DynamicTextureData *this, unsigned int);
NiPixelFormat *__thiscall NiDX9DynamicTextureData::CreateSurf(NiDX9DynamicTextureData *this, NiDynamicTexture *pkTexture, bool bDynTexturesCap);
NiDX9DynamicTextureData *__cdecl NiDX9DynamicTextureData::Create(NiDynamicTexture *pkTexture);
char *__cdecl NiDX9ErrorString(unsigned int uiErrorCode);
void __thiscall NiD3DGeometryGroupManager::SetHWSkinning(NiD3DGeometryGroupManager *this, bool bHWSkinning);
void __thiscall NiD3DGeometryGroupManager::_NiD3DGeometryGroupManager(NiD3DGeometryGroupManager *this);
NiD3DGeometryGroupManager *__cdecl NiD3DGeometryGroupManager::Create(IDirect3DDevice9 *pkD3DDevice, NiDX9VertexBufferManager *pkVBManager);
bool __thiscall NiD3DGeometryGroupManager::DestroyGroup(NiD3DGeometryGroupManager *this, NiGeometryGroup *pkGroup);
bool __thiscall NiD3DGeometryGroupManager::IsGroupEmpty(NiD3DGeometryGroupManager *this, NiGeometryGroup *pkGroup);
bool __thiscall NiD3DGeometryGroupManager::AddObjectToGroup(NiD3DGeometryGroupManager *this, NiGeometryGroup *pkGroup, NiScreenTexture *pkScreenTexture);
bool __thiscall NiD3DGeometryGroupManager::RemoveObjectFromGroup(NiD3DGeometryGroupManager *this, NiScreenTexture *pkScreenTexture);
bool __thiscall NiD3DGeometryGroupManager::RemoveSkinPartitionFromGroup(NiD3DGeometryGroupManager *this, NiSkinPartition *pkSkinPartition);
void *__thiscall NiD3DGeometryGroupManager::_scalar_deleting_destructor_(NiD3DGeometryGroupManager *this, unsigned int);
NiGeometryGroup *__thiscall NiD3DGeometryGroupManager::CreateGroup(NiD3DGeometryGroupManager *this, NiGeometryGroupManager::RepackingBehavior eBehavior);
bool __thiscall NiD3DGeometryGroupManager::AddObjectToGroup(NiD3DGeometryGroupManager *this, NiGeometryGroup *pkGroup, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance, bool bHWSkinning, unsigned int __formal, unsigned int __formal);
bool __thiscall NiD3DGeometryGroupManager::RemoveObjectFromGroup(NiD3DGeometryGroupManager *this, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance);
bool __thiscall NiD3DGeometryGroupManager::AddObjectToGroup(NiD3DGeometryGroupManager *this, NiGeometryGroup *pkGroup, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance);
IDirect3DTexture9 *__thiscall NiDX9TextureManager::GetTexture(NiDX9TextureManager *this, unsigned int __formal, unsigned int __formal, unsigned int __formal, unsigned int __formal, _D3DFORMAT __formal, _D3DPOOL __formal);
void __thiscall NiDX9TextureManager::NiDX9TextureManager(NiDX9TextureManager *this, NiDX9Renderer *pkRenderer);
void *__thiscall NiDX9TextureManager::_scalar_deleting_destructor_(NiDX9TextureManager *this, unsigned int);
IDirect3DBaseTexture9 *__thiscall NiDX9TextureManager::PrepareTextureForRendering(NiDX9TextureManager *this, NiTexture *pkNewTexIm, bool *bChanged, bool *bMipmap, bool *bNonPow2);
bool __thiscall NiDX9TextureManager::PrecacheTexture(NiDX9TextureManager *this, NiTexture *pkIm, bool bForceLoad, bool bLocked);
unsigned int __thiscall NiDX9TextureManager::GetFormatFromTexture(NiDX9TextureManager *this, NiTexture *kIm);
void *__thiscall NiD3DShaderProgramCreatorHLSL::_vector_deleting_destructor_(NiD3DShaderProgramCreatorHLSL *this, unsigned int);
void *__thiscall NiD3DShaderProgramCreatorAsm::_scalar_deleting_destructor_(NiD3DShaderProgramCreatorObj *this, unsigned int);
BOOL __cdecl NiDX9RendererSDM::Shutdown();
void __cdecl NiDX9Renderer::AddDisplayFormat(_D3DFORMAT eFormat);
void __cdecl NiDX9RendererSDM::Init(); // idb
void __thiscall NiDX9RendererSDM::NiDX9RendererSDM(NiDX9RendererSDM *this);
void __thiscall NiD3DGlobalConstantEntry::SetData(NiD3DGlobalConstantEntry *this, unsigned int uiDataSize, const void *pvDataSource);
void __thiscall NiD3DShaderDeclaration::NiD3DShaderDeclaration(NiD3DShaderDeclaration *this);
bool __thiscall NiShaderFactory::Geometry_AttachShader(NiD3DShaderDeclaration *this, unsigned int __formal, unsigned int __formal, float *__formal);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_LongToFloat(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedLongToFloat(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ShortToFloat(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedShortToFloat(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ByteToFloat(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedByteToFloat(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_LongToUByteColor(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ShortToUByteColor(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedShortToUByteColor(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_ByteToUByteColor(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_UnsignedByteToUByteColor(NiD3DShaderDeclaration::PackingParameters *kParams);
void *__thiscall NiTArray<NiD3DShaderDeclaration::NiPackerEntry__>::_vector_deleting_destructor_(NiTArray<NiD3DShaderDeclaration::NiPackerEntry *> *this, unsigned int);
void *__thiscall NiTArray<unsigned_int____cdecl____NiD3DShaderDeclaration::PackingParameters___>::_scalar_deleting_destructor_(NiTArray<unsigned int (__cdecl*)(NiD3DShaderDeclaration::PackingParameters &)> *this, unsigned int);
void __thiscall NiD3DShaderDeclaration::_NiD3DShaderDeclaration(NiD3DShaderDeclaration *this);
bool __thiscall NiD3DShaderDeclaration::Initialize(NiD3DShaderDeclaration *this, NiRenderer *pkRenderer, unsigned int uiMaxStreamEntryCount, unsigned int uiStreamCount);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_DropInFields(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_Float_ExtraOutsToZero(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_FloatToFloat(NiD3DShaderDeclaration::PackingParameters *kParams);
unsigned int __cdecl NiD3DShaderDeclaration::Pack_FloatToUByteColor(NiD3DShaderDeclaration::PackingParameters *kParams);
void *__thiscall NiD3DShaderDeclaration::_scalar_deleting_destructor_(NiD3DShaderDeclaration *this, unsigned int);
bool __cdecl NiD3DShaderDeclaration::InitializePackingFunctions();
unsigned int __thiscall NiD3DShaderDeclaration::PackEntry(NiD3DShaderDeclaration *this, unsigned __int16 usCount, NiGeometryData *pkData, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiD3DShaderDeclaration::ShaderRegisterEntry *pkEntry, unsigned int uiStride, char *pucData);
bool __cdecl NiD3DShaderDeclaration::_SDMInit();
int __cdecl NiD3DShaderDeclaration::_SDMShutdown();
void __thiscall NiD3DRenderState::ApplyMaterial(NiD3DRenderState *this, NiMaterialProperty *pkNew);
void __thiscall NiD3DRenderState::SetModelTransform(NiD3DRenderState *this, NiTransform *kXform);
void __thiscall NiDX9RenderState::PurgeMaterial(NiDX9RenderState *this, NiMaterialProperty *pkMaterial);
void __thiscall NiD3DRenderState::RestoreRenderState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::InitShaderState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SaveShaderState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::RestoreShaderState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::RestoreTextureStageState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SetD3DRenderer(NiD3DRenderState *this, NiDX9Renderer *pkD3DRenderer);
void __thiscall NiD3DRenderState::ApplyAlpha(NiD3DRenderState *this, NiAlphaProperty *pkNew);
void __thiscall NiD3DRenderState::ApplyDitherMode(NiD3DRenderState *this, NiDitherProperty *pkNew);
void __thiscall NiD3DRenderState::ApplyFog(NiD3DRenderState *this, NiFogProperty *pkNew);
void __thiscall NiD3DRenderState::ApplyShading(NiD3DRenderState *this, NiShadeProperty *pkNew);
void __thiscall NiD3DRenderState::ApplySpecular(NiD3DRenderState *this, NiSpecularProperty *pkNew);
void __thiscall NiD3DRenderState::ApplyStencil(NiD3DRenderState *this, NiStencilProperty *pkNew);
void __thiscall NiD3DRenderState::ApplyWireframe(NiD3DRenderState *this, NiWireframeProperty *pkNew);
void __thiscall NiD3DRenderState::ApplyZBuffer(NiD3DRenderState *this, NiZBufferProperty *pkNew);
void __thiscall NiD3DRenderState::InitRenderState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SaveRenderState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::InitTextureStageState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::SaveTextureStageState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::InitRenderModes(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::NiD3DRenderState(NiD3DRenderState *this, NiDX9Renderer *pkD3DRenderer);
void __thiscall NiD3DRenderState::_NiD3DRenderState(NiD3DRenderState *this);
void __thiscall NiD3DRenderState::UpdateRenderState(NiD3DRenderState *this, NiPropertyState *pkNew);
void *__thiscall NiD3DRenderState::_vector_deleting_destructor_(NiD3DRenderState *this, unsigned int);
bool __thiscall NiDX9MaterialManager::MaterialEntry::Update(NiDX9MaterialManager::MaterialEntry *this, NiMaterialProperty *kMat);
void __thiscall NiDX9MaterialManager::UpdateToDevice(NiDX9MaterialManager *this, IDirect3DDevice9 *pkD3DDevice9);
void __thiscall NiDX9MaterialManager::PurgeMaterial(NiDX9MaterialManager *this, NiMaterialProperty *pkMaterial);
void __thiscall NiDX9MaterialManager::_NiDX9MaterialManager(NiDX9MaterialManager *this);
void __thiscall NiDX9MaterialManager::SetCurrentMaterial(NiDX9MaterialManager *this, NiMaterialProperty *kMat);
void __thiscall NiDX9MaterialManager::Initialize(NiDX9MaterialManager *this);
void __thiscall NiDX9ShaderConstantManager::NiDX9ShaderConstantManager(NiDX9ShaderConstantManager *this, NiDX9Renderer *pkD3DRenderer, _D3DCAPS9 *kD3DCaps9);
void *__thiscall NiDX9ShaderConstantManager::_scalar_deleting_destructor_(NiDX9ShaderConstantManager *this, unsigned int);
NiDX9ShaderConstantManager *__cdecl NiDX9ShaderConstantManager::Create(NiDX9Renderer *pkRenderer, _D3DCAPS9 *kD3DCaps9);
void __thiscall NiDX9ShaderConstantManager::CommitChanges(NiDX9ShaderConstantManager *this);
void __thiscall NiDX9Resource::_NiDX9Resource(NiDX9Resource *this);
void __cdecl NiVBSet::DetermineUsageAndPool(NiVBSet *pkSet);
void __thiscall NiVBSet::RemoveBlockFromFreeSpaceList(NiVBSet *this, NiVBBlock *pkVBBlock);
void *__thiscall NiTArray<NiVBChip__>::_vector_deleting_destructor_(NiTArray<NiVBChip *> *this, unsigned int);
void *__thiscall NiTArray<NiVBBlock__>::_vector_deleting_destructor_(NiTArray<NiVBBlock *> *this, unsigned int);
NiVBBlock *__thiscall NiVBSet::FindBlockWithFreeSpace(NiVBSet *this, unsigned int uiFreeSize);
void __thiscall NiVBSet::InsertBlockIntoFreeSpaceList(NiVBSet *this, NiVBBlock *pkVBBlock);
void __cdecl NiVBSet::DeleteBlocks();
void __thiscall NiVBBlock::ClearAllData(NiVBBlock *this);
void __thiscall NiVBSet::FreeBlock(NiVBSet *this, NiVBBlock *pkBlock);
void __thiscall NiVBSet::_NiVBSet(NiVBSet *this);
void __thiscall NiVBSet::FreeChip(NiVBSet *this, unsigned int uiBlockIndex, unsigned int uiChipIndex);
void __cdecl NiVBSet::AllocateBlocks();
NiVBBlock *__thiscall NiVBSet::CreateBlock(NiVBSet *this, unsigned int uiSize);
NiVBChip *__thiscall NiVBSet::AllocateChip(NiVBSet *this, unsigned int uiSize, bool bForceNewBlock);
void __thiscall NiUnsharedGeometryGroup::RemoveObject(NiUnsharedGeometryGroup *this, NiSkinPartition::Partition *pkPartition);
void __thiscall NiGeometryBufferData::NiGeometryBufferData(NiGeometryBufferData *this);
void __thiscall NiStaticGeometryGroup::Purge(NiStaticGeometryGroup *this);
void __thiscall NiStaticGeometryGroup::RemoveObject(NiUnsharedGeometryGroup *this, NiGeometryData *pkData);
void __thiscall NiStaticGeometryGroup::AddObject(NiStaticGeometryGroup *this, NiScreenTexture *pkScreenTexture);
void __thiscall NiStaticGeometryGroup::RemoveObject(NiUnsharedGeometryGroup *this, NiScreenTexture *pkScreenTexture);
void __thiscall NiStaticGeometryGroup::ReleaseChip(NiStaticGeometryGroup *this, NiGeometryBufferData *pkBuffData, unsigned int uiStream);
void __thiscall NiVBSet::NiVBSet(NiVBSet *this);
NiVBSet *__cdecl NiVBSet::Create(unsigned int uiBlockSize, IDirect3DDevice9 *pkD3DDevice, unsigned int uiFVF, unsigned int uiFlags, unsigned int uiIndex);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiVBSet__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiVBSet__>::_scalar_deleting_destructor_(NiTPointerMap<unsigned int,NiVBSet *> *this, unsigned int);
void *__thiscall NiStaticGeometryGroup::_scalar_deleting_destructor_(NiStaticGeometryGroup *this, unsigned int);
void __thiscall NiUnsharedGeometryGroup::AddObject(NiUnsharedGeometryGroup *this, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance, NiSkinPartition::Partition *pkPartition);
NiVBChip *__thiscall NiStaticGeometryGroup::CreateChip(NiStaticGeometryGroup *this, NiGeometryBufferData *pkBuffData, unsigned int uiStream);
void __thiscall NiStaticGeometryGroup::NiStaticGeometryGroup(NiStaticGeometryGroup *this);
NiGeometryGroup *__cdecl NiStaticGeometryGroup::Create();
void *__thiscall NiUnsharedGeometryGroup::_vector_deleting_destructor_(NiUnsharedGeometryGroup *this, unsigned int);
NiGeometryGroup *__cdecl NiUnsharedGeometryGroup::Create();
void __thiscall NiUnsharedGeometryGroup::AddObject(NiUnsharedGeometryGroup *this, NiScreenTexture *pkScreenTexture);
NiVBChip *__cdecl NiVBChip::Create(NiVBBlock *pkBlock, IDirect3DVertexBuffer9 *pkVB, unsigned int uiOffset, unsigned int uiSize, unsigned int uiIndex);
NiVBChip *__thiscall NiUnsharedGeometryGroup::CreateChip(NiUnsharedGeometryGroup *this, NiGeometryBufferData *pkBuffData, unsigned int uiStream);
void __thiscall NiUnsharedGeometryGroup::ReleaseChip(NiUnsharedGeometryGroup *this, NiGeometryBufferData *pkBuffData, unsigned int uiStream);
void *__thiscall NiTArray<NiVBDynamicSet__>::_vector_deleting_destructor_(NiTArray<NiVBDynamicSet *> *this, unsigned int);
void __thiscall NiDynamicGeometryGroup::Purge(NiDynamicGeometryGroup *this);
void __thiscall NiDynamicGeometryGroup::RemoveObject(NiDynamicGeometryGroup *this, NiGeometryData *pkData);
void __thiscall NiDynamicGeometryGroup::RemoveObject(NiDynamicGeometryGroup *this, NiSkinPartition::Partition *pkPartition);
void __thiscall NiDynamicGeometryGroup::AddObject(NiDynamicGeometryGroup *this, NiScreenTexture *pkScreenTexture);
void __thiscall NiDynamicGeometryGroup::RemoveObject(NiDynamicGeometryGroup *this, NiScreenTexture *pkScreenTexture);
void __thiscall NiDynamicGeometryGroup::ReleaseChip(NiDynamicGeometryGroup *this, NiGeometryBufferData *pkBuffData, unsigned int uiStream);
NiVBDynamicSet *__cdecl NiVBDynamicSet::Create(unsigned int uiBlockSize, IDirect3DDevice9 *pkD3DDevice, unsigned int uiFVF, unsigned int uiIndex);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiVBDynamicSet__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBDynamicSet *> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiVBDynamicSet__>::_vector_deleting_destructor_(NiTPointerMap<unsigned int,NiVBDynamicSet *> *this, unsigned int);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiVBChip__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBChip *> *this, unsigned int);
void *__thiscall NiTPointerMap<unsigned_int_NiVBChip__>::_vector_deleting_destructor_(NiTPointerMap<unsigned int,NiVBChip *> *this, unsigned int);
void __thiscall NiDynamicGeometryGroup::_NiDynamicGeometryGroup(NiDynamicGeometryGroup *this);
void __thiscall NiDynamicGeometryGroup::AddObject(NiDynamicGeometryGroup *this, NiGeometryData *pkData, NiSkinInstance *pkSkinInstance, NiSkinPartition::Partition *pkPartition);
NiVBChip *__thiscall NiDynamicGeometryGroup::CreateChip(NiDynamicGeometryGroup *this, NiGeometryBufferData *pkBuffData, unsigned int uiStream);
void __thiscall NiDynamicGeometryGroup::NiDynamicGeometryGroup(NiDynamicGeometryGroup *this);
void *__thiscall NiDynamicGeometryGroup::_vector_deleting_destructor_(NiDynamicGeometryGroup *this, unsigned int);
NiGeometryGroup *__cdecl NiDynamicGeometryGroup::Create();
bool __thiscall NiD3DShaderProgramCreatorHLSL::RecreateVertexShader(NiD3DShaderProgramCreatorHLSL *this, NiD3DVertexShader *pkVertexShader);
bool __thiscall NiD3DShaderProgramCreatorHLSL::RecreatePixelShader(NiD3DShaderProgramCreatorHLSL *this, NiD3DPixelShader *pkPixelShader);
const char *__thiscall NiGeometryData::GetGroup(NiD3DShaderProgram *this);
void __thiscall NiD3DShaderProgram::SetName(NiD3DShaderProgram *this, const char *pszName);
void __thiscall NiD3DShaderProgram::SetShaderProgramName(NiD3DShaderProgram *this, const char *pszName);
void __thiscall NiD3DShaderProgram::SetCode(NiD3DShaderProgram *this, unsigned int uiSize, void *pvCode);
NiD3DShaderProgramCreator *__thiscall NiShaderRequirementDesc::GetMinVertexShaderVersion(NiD3DShaderProgram *this);
void *__thiscall NiD3DPixelShader::_scalar_deleting_destructor_(NiD3DPixelShader *this, unsigned int);
void __thiscall NiD3DPixelShader::SetShaderHandle(NiD3DPixelShader *this, IDirect3DPixelShader9 *hShader);
void *__thiscall NiD3DVertexShader::_vector_deleting_destructor_(NiD3DVertexShader *this, unsigned int);
const char *__thiscall NiD3DHLSLPixelShader::GetEntryPoint(NiD3DHLSLPixelShader *this);
const char *__thiscall NiD3DHLSLPixelShader::GetShaderTarget(NiD3DHLSLPixelShader *this);
void __thiscall NiD3DVertexShader::SetShaderHandle(NiD3DVertexShader *this, IDirect3DVertexShader9 *hShader);
ID3DXConstantTable *__thiscall NiD3DVertexShader::GetVertexDeclaration(NiD3DHLSLPixelShader *this);
void __thiscall NiD3DVertexShader::SetVertexDeclaration(NiD3DVertexShader *this, IDirect3DVertexDeclaration9 *hDecl);
bool __thiscall NiD3DVertexShader::GetSoftwareVertexProcessing(NiD3DVertexShader *this);
void __thiscall NiD3DVertexShader::SetSoftwareVertexProcessing(NiD3DVertexShader *this, bool bSoftwareVP);
void *__thiscall NiD3DHLSLPixelShader::_vector_deleting_destructor_(NiD3DHLSLPixelShader *this, unsigned int);
void __thiscall NiD3DHLSLPixelShader::SetEntryPoint(NiD3DHLSLPixelShader *this, const char *pcEntryPoint);
void __thiscall NiD3DHLSLPixelShader::SetShaderTarget(NiD3DHLSLPixelShader *this, const char *pcShaderTarget);
void __thiscall NiD3DHLSLPixelShader::SetConstantTable(NiD3DHLSLPixelShader *this, ID3DXConstantTable *pkTable);
void *__thiscall NiD3DHLSLVertexShader::_scalar_deleting_destructor_(NiD3DHLSLVertexShader *this, unsigned int);
void __thiscall NiD3DHLSLVertexShader::SetEntryPoint(NiD3DHLSLVertexShader *this, const char *pcEntryPoint);
unsigned int __thiscall NiD3DHLSLVertexShader::GetShaderTarget(NiDX9VertexBufferManager *this);
void __thiscall NiD3DHLSLVertexShader::SetShaderTarget(NiD3DHLSLVertexShader *this, const char *pcShaderTarget);
void __thiscall NiD3DHLSLVertexShader::SetConstantTable(NiD3DHLSLVertexShader *this, ID3DXConstantTable *pkTable);
bool __thiscall NiD3DShaderProgramCreatorHLSL::LoadShaderCodeFromFile(NiD3DShaderProgramCreatorHLSL *this, const char *pcFileName, const char *pcEntryPoint, const char *pcShaderTarget, void **pvCode, unsigned int *uiCodeSize, ID3DXConstantTable **pkConstantTable);
bool __thiscall NiD3DShaderProgramCreatorHLSL::LoadShaderCodeFromBuffer(NiD3DShaderProgramCreatorHLSL *this, const void *pvBuffer, unsigned int uiBufferSize, const char *pcEntryPoint, const char *pcShaderTarget, void **pvCode, unsigned int *uiCodeSize, ID3DXConstantTable **pkConstantTable);
NiD3DVertexShader *__thiscall NiD3DShaderProgramCreatorHLSL::CreateVertexShaderFromFile(NiD3DShaderProgramCreatorHLSL *this, const char *pcFileName, const char *pcShaderName, const char *pcEntryPoint, const char *pcShaderTarget, IDirect3DVertexDeclaration9 *hDecl, unsigned int uiUsage, bool bSoftwareVP);
NiD3DVertexShader *__thiscall NiD3DShaderProgramCreatorHLSL::CreateVertexShaderFromBuffer(NiD3DShaderProgramCreatorHLSL *this, const void *pvBuffer, unsigned int uiBufferSize, const char *pcShaderName, const char *pcEntryPoint, const char *pcShaderTarget, IDirect3DVertexDeclaration9 *hDecl, unsigned int uiUsage, bool bSoftwareVP);
NiD3DPixelShader *__thiscall NiD3DShaderProgramCreatorHLSL::CreatePixelShaderFromFile(NiD3DShaderProgramCreatorHLSL *this, const char *pcFileName, const char *pcShaderName, const char *pcEntryPoint, const char *pcShaderTarget);
NiD3DPixelShader *__thiscall NiD3DShaderProgramCreatorHLSL::CreatePixelShaderFromBuffer(NiD3DShaderProgramCreatorHLSL *this, const void *pvBuffer, unsigned int uiBufferSize, const char *pcShaderName, const char *pcEntryPoint, const char *pcShaderTarget);
bool __thiscall NiD3DShaderProgramCreatorAsm::RecreateVertexShader(NiD3DShaderProgramCreatorAsm *this, NiD3DVertexShader *pkVertexShader);
bool __thiscall NiD3DShaderProgramCreatorAsm::RecreatePixelShader(NiD3DShaderProgramCreatorAsm *this, NiD3DPixelShader *pkPixelShader);
NiD3DVertexShader *__thiscall NiD3DShaderProgramCreatorAsm::CreateVertexShaderFromFile(NiD3DShaderProgramCreatorAsm *this, const char *pcFileName, const char *pcShaderName, const char *__formal, const char *__formal, IDirect3DVertexDeclaration9 *hDecl, unsigned int uiUsage, bool bSoftwareVP);
NiD3DVertexShader *__thiscall NiD3DShaderProgramCreatorAsm::CreateVertexShaderFromBuffer(NiD3DShaderProgramCreatorAsm *this, const void *pvBuffer, unsigned int uiBufferSize, const char *pcShaderName, const char *__formal, const char *__formal, IDirect3DVertexDeclaration9 *hDecl, unsigned int uiUsage, bool bSoftwareVP);
NiD3DPixelShader *__thiscall NiD3DShaderProgramCreatorAsm::CreatePixelShaderFromFile(NiD3DShaderProgramCreatorAsm *this, const char *pcFileName, const char *pcShaderName, const char *__formal, const char *__formal);
NiD3DPixelShader *__thiscall NiD3DShaderProgramCreatorAsm::CreatePixelShaderFromBuffer(NiD3DShaderProgramCreatorAsm *this, const void *pvBuffer, unsigned int uiBufferSize, const char *pcShaderName, const char *__formal, const char *__formal);
bool __thiscall NiD3DShaderProgramCreatorAsm::LoadShaderCodeFromFile(NiD3DShaderProgramCreatorAsm *this, const char *pcFileName, void **pvCode, unsigned int *uiCodeSize, void **pvConstantData, unsigned int *uiConstantSize);
bool __thiscall NiD3DShaderProgramCreatorAsm::LoadShaderCodeFromBuffer(NiD3DShaderProgramCreatorAsm *this, const void *pvBuffer, unsigned int uiBufferSize, void **pvCode, unsigned int *uiCodeSize, void **pvConstantData, unsigned int *uiConstantSize);
bool __thiscall NiD3DShaderProgramCreatorObj::LoadShaderCodeFromFile(NiD3DShaderProgramCreatorObj *this, const char *pcFileName, void **pvCode, unsigned int *uiCodeSize, void **pvConstantData, unsigned int *uiConstantSize);
bool __thiscall NiD3DShaderProgramCreatorObj::LoadShaderCodeFromBuffer(NiD3DShaderProgramCreatorObj *this, const void *pvBuffer, unsigned int uiBufferSize, void **pvCode, unsigned int *uiCodeSize, void **pvConstantData, unsigned int *uiConstantSize);
void __thiscall NiVBBlock::_NiVBBlock(NiVBBlock *this);
unsigned int __thiscall NiVBBlock::FreeChip(NiVBBlock *this, unsigned int uiChipIndex);
void __cdecl NiVBBlock::AllocateChips();
void *__cdecl NiVBBlock::DeleteChips();
NiVBChip *__thiscall NiVBBlock::AllocateChip(NiVBBlock *this, unsigned int uiSize);
void __thiscall NiGeometryGroup::NiGeometryGroup(NiGeometryGroup *this);
void __thiscall NiGeometryGroup::_NiGeometryGroup(NiGeometryGroup *this);
void __thiscall NiGeometryGroup::AddObject(NiGeometryGroup *this, NiGeometryBufferData *pkBuffData);
void __thiscall NiGeometryGroup::RemoveObject(NiGeometryGroup *this, NiGeometryBufferData *pkBuffData);
void *__thiscall NiGeometryGroup::_scalar_deleting_destructor_(NiGeometryGroup *this, unsigned int);
IDirect3DVertexBuffer9 *__thiscall NiVBDynamicSet::AllocateBufferSpace(NiVBDynamicSet *this, unsigned int uiSize, unsigned int *uiOffset, unsigned int *uiFlags, bool bForceDiscard, bool bSoftwareVP);
IDirect3DVertexShader9 *__thiscall NiD3DShaderProgramCreator::CreateVertexShader(NiD3DShaderProgramCreator *this, void *pvCode, IDirect3DVertexDeclaration9 **__formal, unsigned int __formal, void *__formal, unsigned int __formal, bool __formal);
IDirect3DPixelShader9 *__thiscall NiD3DShaderProgramCreator::CreatePixelShader(NiD3DShaderProgramCreator *this, void *pvCode);
bool __thiscall NiD3DShaderProgram::SetPixelShaderConstantArray(NiD3DShaderProgram *this, NiD3DShaderConstantMapEntry *__formal, const void *__formal, unsigned int __formal, unsigned int __formal, unsigned __int16 *__formal);
void __thiscall NiD3DShaderProgram::SetD3DRenderer(NiD3DShaderProgram *this, NiDX9Renderer *pkD3DRenderer);
void __thiscall NiD3DShaderProgram::NiD3DShaderProgram(NiD3DShaderProgram *this, NiDX9Renderer *pkRenderer);
void __thiscall NiD3DShaderProgram::_NiD3DShaderProgram(NiD3DShaderProgram *this);
void *__thiscall NiD3DShaderProgram::_vector_deleting_destructor_(NiD3DShaderProgram *this, unsigned int);
void __thiscall NiD3DPixelShader::DestroyRendererData(NiD3DPixelShader *this);
void __thiscall NiD3DPixelShader::RecreateRendererData(NiD3DPixelShader *this);
void __thiscall NiD3DPixelShader::_NiD3DPixelShader(NiD3DPixelShader *this);
bool __thiscall NiD3DPixelShader::SetPixelShaderConstant(NiD3DPixelShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int uiRegisterCount);
bool __thiscall NiD3DPixelShader::SetPixelShaderConstantArray(NiD3DPixelShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int uiNumEntries, unsigned int uiRegistersPerEntry, unsigned __int16 *pusReorderArray);
void __thiscall NiD3DVertexShader::DestroyRendererData(NiD3DVertexShader *this);
void __thiscall NiD3DVertexShader::RecreateRendererData(NiD3DVertexShader *this);
void __thiscall NiD3DVertexShader::_NiD3DVertexShader(NiD3DVertexShader *this);
bool __thiscall NiD3DVertexShader::SetVertexShaderConstant(NiD3DVertexShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int uiRegisterCount);
bool __thiscall NiD3DVertexShader::SetVertexShaderConstantArray(NiD3DVertexShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int uiNumEntries, unsigned int uiRegistersPerEntry, unsigned __int16 *pusReorderArray);
void __thiscall NiD3DHLSLPixelShader::_NiD3DHLSLPixelShader(NiD3DHLSLPixelShader *this);
void __thiscall NiD3DHLSLPixelShader::DestroyRendererData(NiD3DHLSLPixelShader *this);
bool __thiscall NiD3DHLSLPixelShader::SetPixelShaderConstant(NiD3DHLSLPixelShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int __formal);
bool __thiscall NiD3DHLSLPixelShader::SetPixelShaderConstantArray(NiD3DHLSLPixelShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int uiNumEntries, unsigned int uiRegistersPerEntry, unsigned __int16 *pusReorderArray);
void __thiscall NiD3DHLSLVertexShader::_NiD3DHLSLVertexShader(NiD3DHLSLVertexShader *this);
void __thiscall NiD3DHLSLVertexShader::DestroyRendererData(NiD3DHLSLVertexShader *this);
bool __thiscall NiD3DHLSLVertexShader::SetVertexShaderConstant(NiD3DHLSLVertexShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int __formal);
bool __thiscall NiD3DHLSLVertexShader::SetVertexShaderConstantArray(NiD3DHLSLVertexShader *this, NiD3DShaderConstantMapEntry *pkEntry, const void *pvDataSource, unsigned int uiNumEntries, unsigned int uiRegistersPerEntry, unsigned __int16 *pusReorderArray);
// int __stdcall DirectInput8Create(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXLoadSurfaceFromSurface(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateEffectCompilerFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateEffectFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __thiscall D3DXMatrixMultiply(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateVolumeTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateCubeTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXGetShaderVersion(_DWORD); weak
// int __stdcall D3DXGetShaderInputSemantics(_DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); weak
// int __thiscall D3DXVec4Transform(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateVolumeTextureFromFileInMemory(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateCubeTextureFromFileInMemory(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCreateTextureFromFileInMemory(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXGetImageInfoFromFileInMemory(_DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXGetShaderConstantTable(_DWORD, _DWORD); weak
// int __stdcall D3DXCompileShaderFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXCompileShader(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXGetVertexShaderProfile(_DWORD); weak
// int __stdcall D3DXGetPixelShaderProfile(_DWORD); weak
// int __stdcall D3DXAssembleShaderFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall D3DXAssembleShader(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
// int __stdcall WSACleanup();
// int __stdcall closesocket(SOCKET s);
// int __stdcall select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout);
// int __stdcall WSAGetLastError();
// int __stdcall shutdown(SOCKET s, int how);
// int __stdcall setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen);
// int __stdcall ioctlsocket(SOCKET s, __int32 cmd, u_long *argp);
// SOCKET __stdcall socket(int af, int type, int protocol);
// int __stdcall __WSAFDIsSet(SOCKET fd, fd_set *);
// int __stdcall connect(SOCKET s, const struct sockaddr *name, int namelen);
// u_short __stdcall htons(u_short hostshort);
// int __stdcall send(SOCKET s, const char *buf, int len, int flags);
// int __stdcall recv(SOCKET s, char *buf, int len, int flags);
char *__thiscall PacketEncrypt::pe_FromClientToServer(PacketEncrypt *this, char *buf, int len);
// HIMC __stdcall ImmAssociateContext(HWND, HIMC);
// LONG __stdcall ImmGetCompositionStringA(HIMC, DWORD, LPVOID lpBuf, DWORD dwBufLen);
// DWORD __stdcall ImmGetCandidateListA(HIMC, DWORD deIndex, LPCANDIDATELIST lpCandList, DWORD dwBufLen);
void __cdecl png_set_sig_bytes(png_struct_def *png_ptr, int num_bytes);
int __cdecl png_sig_cmp(char *sig, unsigned int start, unsigned int num_to_check);
void *__cdecl png_zalloc(void *png_ptr, unsigned int items, unsigned int size);
void __cdecl png_zfree(void *png_ptr, void *ptr);
void __cdecl png_reset_crc(png_struct_def *png_ptr);
void __cdecl png_calculate_crc(png_struct_def *png_ptr, char *ptr, unsigned int length);
void __cdecl png_free_data(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int mask, int num);
void __cdecl png_info_destroy(png_struct_def *png_ptr, png_info_struct *info_ptr);
void *__cdecl png_get_io_ptr(png_struct_def *png_ptr);
int __cdecl png_handle_as_unknown(png_struct_def *png_ptr, char *chunk_name);
void __cdecl png_init_mmx_flags(png_struct_def *png_ptr);
png_info_struct *__cdecl png_create_info_struct(png_struct_def *png_ptr);
png_struct_def *__cdecl png_create_read_struct_2(const char *user_png_ver, void *error_ptr, void (__cdecl *error_fn)(png_struct_def *, const char *), void (__cdecl *warn_fn)(png_struct_def *, const char *), void *mem_ptr, void *(__cdecl *malloc_fn)(png_struct_def *, unsigned int), void (__cdecl *free_fn)(png_struct_def *, void *));
void __cdecl png_read_info(png_struct_def *png_ptr, png_info_struct *info_ptr);
void __cdecl png_read_image(png_struct_def *png_ptr, char **image);
void __cdecl png_read_end(png_struct_def *png_ptr, png_info_struct *info_ptr);
void __cdecl png_read_destroy(png_struct_def *png_ptr, png_info_struct *info_ptr, png_info_struct *end_info_ptr);
void __cdecl png_read_png(png_struct_def *png_ptr, png_info_struct *info_ptr, int transforms, void *params);
png_struct_def *__cdecl png_create_read_struct(const char *user_png_ver, void *error_ptr, void (__cdecl *error_fn)(png_struct_def *, const char *), void (__cdecl *warn_fn)(png_struct_def *, const char *));
void __cdecl png_destroy_read_struct(png_struct_def **png_ptr_ptr, png_info_struct **info_ptr_ptr, png_info_struct **end_info_ptr_ptr);
void __cdecl png_read_data(png_struct_def *png_ptr, char *data, unsigned int length);
void __cdecl png_default_read_data(png_struct_def *png_ptr, char *data, unsigned int length);
void __cdecl png_set_read_fn(png_struct_def *png_ptr, void *io_ptr, void (__cdecl *read_data_fn)(png_struct_def *, char *, unsigned int));
// void __usercall png_format_buffer(png_struct_def *png_ptr<edx>, char *buffer<eax>, const char *error_message);
void __cdecl png_default_error(png_struct_def *png_ptr, const char *error_message);
void __cdecl png_set_error_fn(png_struct_def *png_ptr, void *error_ptr, void (__cdecl *error_fn)(png_struct_def *, const char *), void (__cdecl *warning_fn)(png_struct_def *, const char *));
void __cdecl png_error(png_struct_def *png_ptr, const char *error_message);
void __cdecl png_warning(png_struct_def *png_ptr, const char *warning_message);
void __cdecl png_chunk_error(png_struct_def *png_ptr, const char *error_message);
void __cdecl png_chunk_warning(png_struct_def *png_ptr, const char *warning_message);
void *__cdecl png_create_struct_2(int type, void *(__cdecl *malloc_fn)(png_struct_def *, unsigned int), void *mem_ptr);
void __cdecl png_destroy_struct_2(void *struct_ptr, void (__cdecl *free_fn)(png_struct_def *, void *), void *mem_ptr);
void *__cdecl png_memcpy_check(png_struct_def *png_ptr, void *s1, void *s2, unsigned int length);
void *__cdecl png_memset_check(png_struct_def *png_ptr, void *s1, int value, unsigned int length);
void __cdecl png_set_mem_fn(png_struct_def *png_ptr, void *mem_ptr, void *(__cdecl *malloc_fn)(png_struct_def *, unsigned int), void (__cdecl *free_fn)(png_struct_def *, void *));
void *__cdecl png_malloc(png_struct_def *png_ptr, unsigned int size);
void __cdecl png_free(png_struct_def *png_ptr, void *ptr);
void *__cdecl png_malloc_warn(png_struct_def *png_ptr, unsigned int size);
unsigned int __cdecl png_get_uint_32(char *buf);
void __cdecl png_crc_read(png_struct_def *png_ptr, char *buf, unsigned int length);
char *__cdecl png_decompress_chunk(png_struct_def *png_ptr, int comp_type, char *chunkdata, unsigned int chunklength, unsigned int prefix_size, unsigned int *newlength);
void __cdecl png_check_chunk_name(png_struct_def *png_ptr, char *chunk_name);
void __cdecl png_combine_row(png_struct_def *png_ptr, char *row, int mask);
void __cdecl png_do_read_interlace(png_struct_def *png_ptr);
void __cdecl png_read_filter_row(png_struct_def *png_ptr, png_row_info_struct *row_info, char *row, char *prev_row, int filter);
void __cdecl png_read_start_row(png_struct_def *png_ptr);
unsigned int __cdecl png_get_uint_31(png_struct_def *png_ptr, char *buf);
int __cdecl png_crc_finish(png_struct_def *png_ptr, unsigned int skip);
void __cdecl png_handle_IHDR(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_PLTE(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_IEND(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_gAMA(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_sBIT(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_cHRM(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_sRGB(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_iCCP(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_sPLT(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_tRNS(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_bKGD(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_hIST(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_pHYs(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_oFFs(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_pCAL(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_sCAL(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_tIME(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_tEXt(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_zTXt(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_handle_unknown(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int length);
void __cdecl png_read_finish_row(png_struct_def *png_ptr);
void __cdecl png_set_strip_16(png_struct_def *png_ptr);
void __cdecl png_set_strip_alpha(png_struct_def *png_ptr);
void __cdecl png_set_expand(png_struct_def *png_ptr);
void __cdecl png_read_transform_info(png_struct_def *png_ptr, png_info_struct *info_ptr);
void __cdecl png_do_unpack(png_row_info_struct *row_info, char *row);
void __cdecl png_do_unshift(png_row_info_struct *row_info, char *row, png_color_8_struct *sig_bits);
void __cdecl png_do_chop(png_row_info_struct *row_info, char *row);
void __cdecl png_do_read_swap_alpha(png_row_info_struct *row_info, char *row);
void __cdecl png_do_read_invert_alpha(png_row_info_struct *row_info, char *row);
void __cdecl png_do_read_filler(png_row_info_struct *row_info, char *row, unsigned int filler, unsigned int flags);
void __cdecl png_do_gray_to_rgb(png_row_info_struct *row_info, char *row);
int __cdecl png_do_rgb_to_gray(png_struct_def *png_ptr, png_row_info_struct *row_info, char *row);
void __cdecl png_do_background(png_row_info_struct *row_info, char *row, png_color_16_struct *trans_values, png_color_16_struct *background, png_color_16_struct *background_1, char *gamma_table, char *gamma_from_1, char *gamma_to_1, unsigned __int16 **gamma_16, unsigned __int16 **gamma_16_from_1, unsigned __int16 **gamma_16_to_1, int gamma_shift);
void __cdecl png_do_gamma(png_row_info_struct *row_info, char *row, char *gamma_table, unsigned __int16 **gamma_16_table, int gamma_shift);
void __cdecl png_do_expand_palette(png_row_info_struct *row_info, char *row, png_color_struct *palette, char *trans, int num_trans);
void __cdecl png_do_expand(png_row_info_struct *row_info, char *row, png_color_16_struct *trans_value);
void __cdecl png_do_dither(png_row_info_struct *row_info, char *row, char *palette_lookup, char *dither_lookup);
void __cdecl png_build_gamma_table(png_struct_def *png_ptr);
int __cdecl loc_91DB95(int i); // weak
int __cdecl loc_91DE47(int i); // weak
int __cdecl loc_91DF64(int i); // weak
int __cdecl loc_91E04C(int i); // weak
int __cdecl loc_91E13C(int i); // weak
void __cdecl png_do_read_intrapixel(png_row_info_struct *row_info, char *row);
void __cdecl png_init_read_transformations(png_struct_def *png_ptr);
int __cdecl loc_91E54D(int sg); // weak
int __cdecl loc_91E61C(int sg); // weak
int __cdecl loc_91E8F9(int sg); // weak
void __cdecl png_do_read_transformations(png_struct_def *png_ptr);
void __cdecl png_set_bgr(png_struct_def *png_ptr);
void __cdecl png_set_swap(png_struct_def *png_ptr);
void __cdecl png_set_packswap(png_struct_def *png_ptr);
void __cdecl png_set_shift(png_struct_def *png_ptr, png_color_8_struct *true_bits);
int __cdecl png_set_interlace_handling(png_struct_def *png_ptr);
void __cdecl png_set_swap_alpha(png_struct_def *png_ptr);
void __cdecl png_set_invert_alpha(png_struct_def *png_ptr);
void __cdecl png_set_invert_mono(png_struct_def *png_ptr);
void __cdecl png_do_invert(png_row_info_struct *row_info, char *row);
void __cdecl png_do_swap(png_row_info_struct *row_info, char *row);
void __cdecl png_do_packswap(png_row_info_struct *row_info, char *row);
void __cdecl png_do_strip_filler(png_row_info_struct *row_info, char *row, unsigned int flags);
void __cdecl png_do_bgr(png_row_info_struct *row_info, char *row);
unsigned int __cdecl png_get_valid(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int flag);
unsigned int __cdecl png_get_rowbytes(png_struct_def *png_ptr, png_info_struct *info_ptr);
unsigned int __cdecl png_get_sBIT(png_struct_def *png_ptr, png_info_struct *info_ptr, png_color_8_struct **sig_bit);
void __cdecl png_set_bKGD(png_struct_def *png_ptr, png_info_struct *info_ptr, png_color_16_struct *background);
void __cdecl png_set_cHRM(png_struct_def *png_ptr, png_info_struct *info_ptr, long double white_x, long double white_y, long double red_x, long double red_y, long double green_x, long double green_y, long double blue_x, long double blue_y);
void __cdecl png_set_cHRM_fixed(png_struct_def *png_ptr, png_info_struct *info_ptr, int white_x, int white_y, int red_x, int red_y, int green_x, int green_y, int blue_x, int blue_y);
void __cdecl png_set_gAMA(png_struct_def *png_ptr, png_info_struct *info_ptr, long double file_gamma);
void __cdecl png_set_gAMA_fixed(png_struct_def *png_ptr, png_info_struct *info_ptr, int int_gamma);
void __cdecl png_set_hIST(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned __int16 *hist);
void __cdecl png_set_IHDR(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int width, unsigned int height, int bit_depth, int color_type, int interlace_type, int compression_type, int filter_type);
void __cdecl png_set_oFFs(png_struct_def *png_ptr, png_info_struct *info_ptr, int offset_x, int offset_y, int unit_type);
void __cdecl png_set_pCAL(png_struct_def *png_ptr, png_info_struct *info_ptr, char *purpose, int X0, int X1, int type, int nparams, char *units, char **params);
void __cdecl png_set_sCAL(png_struct_def *png_ptr, png_info_struct *info_ptr, int unit, long double width, long double height);
void __cdecl png_set_pHYs(png_struct_def *png_ptr, png_info_struct *info_ptr, unsigned int res_x, unsigned int res_y, int unit_type);
void __cdecl png_set_PLTE(png_struct_def *png_ptr, png_info_struct *info_ptr, png_color_struct *palette, int num_palette);
void __cdecl png_set_sBIT(png_struct_def *png_ptr, png_info_struct *info_ptr, png_color_8_struct *sig_bit);
void __cdecl png_set_sRGB_gAMA_and_cHRM(png_struct_def *png_ptr, png_info_struct *info_ptr, int intent);
void __cdecl png_set_iCCP(png_struct_def *png_ptr, png_info_struct *info_ptr, char *name, int compression_type, char *profile, unsigned int proflen);
int __cdecl png_set_text_2(png_struct_def *png_ptr, png_info_struct *info_ptr, png_text_struct *text_ptr, int num_text);
void __cdecl png_set_tIME(png_struct_def *png_ptr, png_info_struct *info_ptr, png_time_struct *mod_time);
void __cdecl png_set_tRNS(png_struct_def *png_ptr, png_info_struct *info_ptr, char *trans, int num_trans, png_color_16_struct *trans_values);
void __cdecl png_set_sPLT(png_struct_def *png_ptr, png_info_struct *info_ptr, png_sPLT_struct *entries, int nentries);
void __cdecl png_set_unknown_chunks(png_struct_def *png_ptr, png_info_struct *info_ptr, png_unknown_chunk_t *unknowns, int num_unknowns);
// void __stdcall RtlUnwind(PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue);
char *__cdecl strtok_s(char *_String, const char *_Control, char **_Context);
int __cdecl _splitpath_s(const char *_Path, char *_Drive, unsigned int _DriveSize, char *_Dir, unsigned int _DirSize, char *_Filename, unsigned int _FilenameSize, char *_Ext, unsigned int _ExtSize);
void __cdecl _makepath(char *path, const char *drive, const char *dir, const char *fname, const char *ext);
void *__cdecl operator new__(unsigned int count, std::nothrow_t *x);
int __cdecl _makepath_s(char *_Dst, unsigned int _SizeInBytes, const char *_Drive, const char *_Dir, const char *_Filename, const char *_Ext);
void *__cdecl operator new(unsigned int count, std::nothrow_t *__formal);
char *__cdecl _mbsdec_l(const char *string, const char *current, localeinfo_struct *plocinfo);
char *__cdecl _mbsdec(const char *string, const char *current);
NiTriShape *__cdecl NiDrawableBV::CreateFromHalfSpaceBV(NiHalfSpaceBV *pkHalfSpaceBV, const float fMult, NiAVObject *pkObject);
NiTriShape *__cdecl NiDrawableBV::CreateFromBox(NiBox *kBox, const float fMult);
NiTriShape *__cdecl NiDrawableBV::CreateFromSphere(NiSphere *kSphere, const float fMult);
NiTriShape *__cdecl NiDrawableBV::CreateFromCapsule(NiCapsule *kCapsule, const float fMult);
int __cdecl loc_922A40(float fCapScale, float fRadius); // weak
void __cdecl NiDrawableBV::CreateFromUnion(NiUnionBV *pkUnion, NiNode *pkParent, const float fMult);
NiNode *__cdecl NiDrawableBV::CreateWireframeBV(NiBoundingVolume *pkBound, NiColor *kColor, const float fMult, NiAVObject *pkObject);
bool __thiscall NiDevImageConverter::IsASupportedMipmapGenerationFormat(NiDevImageConverter *this, NiPixelFormat *kSrcFmt);
void __cdecl NiDevImageConverter::ConvertRGBA16ToBGRA16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertBGRA16ToRGBA16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertRGB24To16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertRGB24To24(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertRGB24To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertRGBA32To16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertRGBA32To24(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertRGBA32To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert16ToRGB24(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert16AlphaToRGBA32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert16NoAlphaToRGBA32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert24ToRGB24(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert24ToRGBA32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert32ToRGB24(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert32AlphaToRGBA32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::Convert32NoAlphaToRGBA32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertBUMPLUMA32To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertBUMPLUMA32To16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertBUMP16To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertBUMP16To16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __thiscall NiDevImageConverter::PixelBits::PixelBits(NiDevImageConverter::PixelBits *this, NiPixelFormat *kFmt);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiImageReader__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiImageReader *> *this, unsigned int);
bool __thiscall NiDevImageConverter::CanReadImageFile(NiDevImageConverter *this, const char *pcFilename);
bool __thiscall NiDevImageConverter::ReadImageFileInfo(NiDevImageConverter *this, const char *pcFilename, NiPixelFormat *kFmt, bool *bMipmap, unsigned int *uiWidth, unsigned int *uiHeight, unsigned int *uiNumFaces);
NiPixelData *__thiscall NiDevImageConverter::ReadImageFile(NiDevImageConverter *this, const char *pcFilename, NiPixelData *pkOptDest);
bool __thiscall NiDevImageConverter::CanConvertPixelData(NiDevImageConverter *this, NiPixelFormat *kSrcFmt, NiPixelFormat *kDestFmt);
bool __thiscall NiDevImageConverter::IsAnAlphaSupportedMipmapGenerationFormat(NiDevImageConverter *this, NiPixelFormat *kSrcFmt);
bool __thiscall NiDevImageConverter::IsANonAlphaSupportedMipmapGenerationFormat(NiDevImageConverter *this, NiPixelFormat *kSrcFmt);
NiPixelData *__thiscall NiDevImageConverter::GenerateMipmapLevels(NiDevImageConverter *this, NiPixelData *pkSrc, NiPixelData *pkOptDest);
NiPixelData *__thiscall NiDevImageConverter::ConvertForPlatform(NiDevImageConverter *this, NiDevImageConverter::Platform ePlatform, NiTexture::FormatPrefs *kPrefs, NiPixelData *pkSrc, NiPixelFormat *kDesiredFormat);
NiPixelFormat *__thiscall NiDevImageConverter::FindClosestPixelFormat(NiDevImageConverter *this, NiDevImageConverter::Platform ePlatform, NiTexture::FormatPrefs *kFmtPrefs, NiPixelFormat *kSrcFmt, NiPixelFormat *kDesiredFmt);
NiPixelFormat *__thiscall NiDevImageConverter::FindClosestPixelFormatXenon(NiDevImageConverter *this, NiTexture::FormatPrefs *kFmtPrefs, NiPixelFormat *kSrcFmt, NiPixelFormat *kDesiredFmt);
NiPixelData *__thiscall NiDevImageConverter::GenerateBumpMap(NiDevImageConverter *this, NiPixelData *kSrc, NiPixelFormat *kDestFmt);
void __cdecl NiDevImageConverter::ConvertPALA4To24(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertPAL4To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertPALA4To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertPAL8To16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertPAL8To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertPALA8To16(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertPALA8To24(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __cdecl NiDevImageConverter::ConvertPALA8To32(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiDestSize, char *pucDest, NiPalette *pkSrcPal, NiDevImageConverter::PixelBits *kDestBits, const char *pucSrc, NiDevImageConverter::PixelBits *kSrcBits);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiImageReader__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiImageReader__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiImageReader *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiImageReader__>::_scalar_deleting_destructor_(NiTPointerList<NiImageReader *> *this, unsigned int);
void __thiscall NiDevImageConverter::_NiDevImageConverter(NiDevImageConverter *this);
NiTPointerList<NiImageReader *> *__thiscall NiDevImageConverter::GetImageReaderList(NiDevImageConverter *this);
void __thiscall NiDevImageConverter::AddReader(NiDevImageConverter *this, NiImageReader *pkReader);
NiPixelData *__thiscall NiDevImageConverter::ConvertPixelData(NiDevImageConverter *this, NiPixelData *kSrc, NiPixelFormat *kDestFmt, NiPixelData *pkOptDest, bool bMipmap);
bool __thiscall NiDevImageConverter::ConvertPixelDataFormat(NiDevImageConverter *this, NiPixelData *kDest, NiPixelData *kSrc, int iMipmapLevel);
NiPixelData *__thiscall NiDevImageConverter::GenerateMipmapPyramidFromFiles(NiDevImageConverter *this, const char **apcFilenames, unsigned int uiNumLevels, NiPixelData *pkSrc);
void __thiscall NiDevImageConverter::NiDevImageConverter(NiDevImageConverter *this);
void *__thiscall NiDevImageConverter::_scalar_deleting_destructor_(NiDevImageConverter *this, unsigned int);
void __thiscall NiTArray<NiPointer<NiShaderDesc>>::_NiTArray<NiPointer<NiShaderDesc>>(NiTArray<NiPointer<NiShaderDesc> > *this);
void *__thiscall NiTArray<NiPointer<NiShaderDesc>>::_vector_deleting_destructor_(NiTArray<NiPointer<NiShaderDesc> > *this, unsigned int);
void __thiscall NiShaderLibraryDesc::NiShaderLibraryDesc(NiShaderLibraryDesc *this);
void __thiscall NiShaderLibraryDesc::_NiShaderLibraryDesc(NiShaderLibraryDesc *this);
void *__thiscall NiShaderLibraryDesc::_scalar_deleting_destructor_(NiShaderLibraryDesc *this, unsigned int);
bool __thiscall NiShaderLibraryDesc::AddShaderDesc(NiShaderLibraryDesc *this, NiShaderDesc *pkDesc);
void __thiscall NiShaderDesc::SetNumberOfImplementations(NiShaderDesc *this, unsigned int uiCount);
void *__thiscall NiTArray<NiShaderRequirementDesc__>::_scalar_deleting_destructor_(NiTArray<NiShaderRequirementDesc *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiShaderAttributeDesc>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiShaderAttributeDesc> > *this, unsigned int);
NiShaderAttributeDesc *__thiscall NiShaderDesc::GetAttribute(NiShaderDesc *this, const char *pcName);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiShaderAttributeDesc>>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiShaderAttributeDesc>>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiShaderAttributeDesc> > *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiShaderAttributeDesc>>::_scalar_deleting_destructor_(NiTPointerList<NiPointer<NiShaderAttributeDesc> > *this, unsigned int);
void __thiscall NiShaderDesc::_NiShaderDesc(NiShaderDesc *this);
void __thiscall NiShaderDesc::SetImplementationDescription(NiShaderDesc *this, unsigned int uiImplementation, NiShaderRequirementDesc *pkReqDesc);
void __thiscall NiShaderDesc::NiShaderDesc(NiShaderDesc *this);
void *__thiscall NiShaderDesc::_vector_deleting_destructor_(NiShaderDesc *this, unsigned int);
void __thiscall NiShaderDesc::AddAttribute(NiShaderDesc *this, NiShaderAttributeDesc *pkAttribute);
void __thiscall NiShaderRequirementDesc::NiShaderRequirementDesc(NiShaderRequirementDesc *this);
void __thiscall NiShaderRequirementDesc::_NiShaderRequirementDesc(NiShaderRequirementDesc *this);
NiGeometryData::DataFlags __thiscall NSBRequirements::GetBinormalTangentMethod(NSBRequirements *this);
IDirect3DPixelShader9 *__thiscall NiShaderRequirementDesc::GetPlatformFlags(NiD3DPixelShader *this);
const bool __thiscall NiShaderRequirementDesc::IsPlatformDX9(NiShaderRequirementDesc *this);
const bool __thiscall NiShaderRequirementDesc::IsPlatformXenon(NiShaderRequirementDesc *this);
bool __thiscall NiDX9ShaderDeclaration::GetSoftwareVertexProcessing(NiDX9ShaderDeclaration *this);
bool __thiscall NiShaderRequirementDesc::GetSoftwareVPRequired(NiShaderRequirementDesc *this);
void __thiscall NiShaderRequirementDesc::AddPixelShaderVersion(NiShaderRequirementDesc *this, unsigned int uiVersion);
void __thiscall NiShaderRequirementDesc::AddVertexShaderVersion(NiShaderRequirementDesc *this, unsigned int uiVersion);
void __thiscall NiShaderRequirementDesc::AddUserDefinedVersion(NiShaderRequirementDesc *this, unsigned int uiVersion);
void __thiscall NiShaderRequirementDesc::AddPlatformFlags(NiShaderRequirementDesc *this, unsigned int uiPlatformFlags);
void __thiscall NiShaderRequirementDesc::RemovePlatformFlags(NiShaderRequirementDesc *this, unsigned int uiPlatformFlags);
void __thiscall NiShaderRequirementDesc::SetPlatformDX9(NiShaderRequirementDesc *this, bool bAllowed);
void __thiscall NiShaderRequirementDesc::SetPlatformXenon(NiShaderRequirementDesc *this, bool bAllowed);
void __thiscall NiShaderRequirementDesc::SetBonesPerPartition(NiD3DVertexShader *this, unsigned int uiUsage);
void __thiscall NiShaderRequirementDesc::SetSoftwareVPRequired(NiShaderRequirementDesc *this, bool bSoftwareVP);
void *__thiscall NiShaderRequirementDesc::_vector_deleting_destructor_(NiShaderRequirementDesc *this, unsigned int);
void __thiscall NiShaderAttributeDesc::NiShaderAttributeDesc(NiShaderAttributeDesc *this);
void __thiscall NiShaderAttributeDesc::_NiShaderAttributeDesc(NiShaderAttributeDesc *this);
bool __thiscall NiShaderAttributeDesc::GetValue_Bool(NiShaderAttributeDesc *this, bool *bValue);
bool __thiscall NiShaderAttributeDesc::GetValue_String(NiShaderAttributeDesc *this, const char **pcValue);
bool __thiscall NiShaderAttributeDesc::GetValue_UnsignedInt(NiShaderAttributeDesc *this, unsigned int *uiValue);
bool __thiscall NiShaderAttributeDesc::GetValue_Float(NiShaderAttributeDesc *this, float *fValue);
bool __thiscall NiShaderAttributeDesc::GetValue_Point2(NiShaderAttributeDesc *this, NiPoint2 *kPt2Value);
bool __thiscall NiShaderAttributeDesc::GetValue_Point3(NiShaderAttributeDesc *this, NiPoint3 *kPtValue);
bool __thiscall NiShaderAttributeDesc::GetValue_Point4(NiShaderAttributeDesc *this, float **pafValue);
bool __thiscall NiShaderAttributeDesc::GetValue_ColorA(NiShaderAttributeDesc *this, NiColorA *kClrValue);
void __thiscall NiShaderAttributeDesc::SetType(NiShaderAttributeDesc *this, NiShaderAttributeDesc::AttributeType eType);
void __thiscall NiShaderAttributeDesc::SetValue_Bool(NiShaderAttributeDesc *this, bool bValue);
void __thiscall NiShaderAttributeDesc::SetValue_UnsignedInt(NiShaderAttributeDesc *this, unsigned int uiValue);
void __thiscall NiShaderAttributeDesc::SetValue_Float(NiShaderAttributeDesc *this, float fValue);
void __thiscall NiShaderAttributeDesc::SetValue_Point2(NiShaderAttributeDesc *this, NiPoint2 *kPt2Value);
void __thiscall NiShaderAttributeDesc::SetValue_Point3(NiShaderAttributeDesc *this, NiPoint3 *kPtValue);
void __thiscall NiShaderAttributeDesc::SetValue_Color(NiShaderAttributeDesc *this, NiColor *kClrValue);
void __thiscall NiShaderAttributeDesc::SetValue_ColorA(NiShaderAttributeDesc *this, NiColorA *kClrValue);
void __thiscall NiShaderAttributeDesc::SetHidden(NiShaderAttributeDesc *this, bool bHide);
void __thiscall NiShaderAttributeDesc::SetRanged(NiShaderAttributeDesc *this, bool bRanged);
bool __thiscall NiShaderAttributeDesc::SetRange_UnsignedInt(NiShaderAttributeDesc *this, unsigned int uiLow, unsigned int uiHigh);
bool __thiscall NiShaderAttributeDesc::SetRange_Float(NiShaderAttributeDesc *this, float fLow, float fHigh);
bool __thiscall NiShaderAttributeDesc::SetRange_Point2(NiShaderAttributeDesc *this, NiPoint2 *kPt2Low, NiPoint2 *kPt2High);
bool __thiscall NiShaderAttributeDesc::SetRange_Point3(NiShaderAttributeDesc *this, NiPoint3 *kPtLow, NiPoint3 *kPtHigh);
bool __thiscall NiShaderAttributeDesc::SetRange_Point4(NiShaderAttributeDesc *this, float *pafLow, float *pafHigh);
bool __thiscall NiShaderAttributeDesc::SetRange_Color(NiShaderAttributeDesc *this, NiColor *kClrLow, NiColor *kClrHigh);
bool __thiscall NiShaderAttributeDesc::SetRange_ColorA(NiShaderAttributeDesc *this, NiColorA *kClrLow, NiColorA *kClrHigh);
void *__thiscall NiShaderAttributeDesc::_vector_deleting_destructor_(NiShaderAttributeDesc *this, unsigned int);
bool __thiscall NiShaderAttributeDesc::GetValue_Matrix3(NiShaderAttributeDesc *this, NiMatrix3 *kMatValue);
bool __thiscall NiShaderAttributeDesc::GetValue_Matrix4(NiShaderAttributeDesc *this, float **pafValue, unsigned int uiSizeBytes);
void __thiscall NiShaderAttributeDesc::SetValue_String(NiShaderAttributeDesc *this, const char *pcValue);
void __thiscall NiShaderAttributeDesc::SetValue_Point4(NiShaderAttributeDesc *this, float *pafValue);
void __thiscall NiShaderAttributeDesc::SetValue_Matrix3(NiShaderAttributeDesc *this, NiMatrix3 *kMatValue);
void __thiscall NiShaderAttributeDesc::SetValue_Matrix4(NiShaderAttributeDesc *this, float *pafValue);
void __thiscall NiShaderAttributeDesc::SetValue_Texture(NiShaderAttributeDesc *this, unsigned int uiValue, const char *pcValue);
void __thiscall NiShaderAttributeDesc::SetValue_Array(NiShaderAttributeDesc *this, void *pValue, NiShaderAttributeDesc::AttributeType eSubType, unsigned int uiElementSize, unsigned int uiNumElements);
bool __thiscall NiShaderAttributeDesc::SetRange_Array(NiShaderAttributeDesc *this, unsigned int uiElementSize, unsigned int uiNumElements, void *pLow, void *pHigh);
NiShaderAttributeDesc *__thiscall NiShaderAttributeDesc::operator_(NiShaderAttributeDesc *this, NiShaderAttributeDesc *kSrcDesc);
void __thiscall NiSCMExtraData::NiSCMExtraData(NiSCMExtraData *this, const char *pcName, unsigned int uiNumVertexEntries, unsigned int uiNumPixelEntries);
NiRTTI *__thiscall NiSCMExtraData::GetRTTI(NiSCMExtraData *this);
void *__thiscall NiSCMExtraData::_vector_deleting_destructor_(NiSCMExtraData *this, unsigned int);
void __thiscall NiTextureCodec::DecodeT3AlphaBlock(NiTextureCodec *this, char *pucAlphas);
void __thiscall NiTextureCodec::DecodeT5AlphaBlock(NiTextureCodec *this, char *pucAlphas);
void __thiscall NiTextureCodec::DecodeColorBlock(NiTextureCodec *this, char *pucDest);
void __thiscall NiTextureCodec::DecodeColorAlphaBlock(NiTextureCodec *this, char *pucDest);
void __thiscall NiTextureCodec::NiTextureCodec(NiTextureCodec *this);
NiPixelData *__thiscall NiTextureCodec::ExpandCompressedData(NiTextureCodec *this, NiPixelData *kSrc);
void __thiscall NiTGAReader::Unpack4BitSourceRowPal(NiTGAReader *this, char *pucSrc, char *pucDest);
void __thiscall NiTGAReader::Unpack8BitSourceRowPal(NiTGAReader *this, char *pucSrc, char *pucDest);
void __thiscall NiTGAReader::Unpack8BitSourceRowGray(NiTGAReader *this, char *pucSrc, char *pucDest);
void __thiscall NiTGAReader::Unpack16BitSourceRowRGB(NiTGAReader *this, char *pucSrc, char *pucDest);
void __thiscall NiTGAReader::Unpack16BitSourceRowIndexed(NiTGAReader *this, char *pucSrc, char *pucDest);
void __thiscall NiTGAReader::Unpack16BitSourceRowIndexedAlpha(NiTGAReader *this, char *pucSrc, char *pucDest);
void __thiscall NiTGAReader::Unpack24BitSourceRow(NiTGAReader *this, char *pucSrc, char *pucDest);
void __thiscall NiTGAReader::Unpack32BitSourceRow(NiTGAReader *this, char *pucSrc, char *pucDest);
bool __thiscall NiTGAReader::CanReadFile(NiTGAReader *this, const char *pcFileExtension);
void __thiscall NiTGAReader::NiTGAReader(NiTGAReader *this);
void *__thiscall NiTGAReader::_scalar_deleting_destructor_(NiTGAReader *this, unsigned int);
void __thiscall NiTGAReader::LoadRLERow(NiTGAReader *this, NiFile *kIst, char *pucDest, unsigned int uiDestSize);
void __thiscall NiTGAReader::GetColormap(NiTGAReader *this, NiFile *kIst);
bool __thiscall NiTGAReader::ReadHeader(NiTGAReader *this, NiFile *kIst, unsigned int *uiWidth, unsigned int *uiHeight, NiPixelFormat *kFormat, bool *bMipmap, unsigned int *uiFaces);
NiPixelData *__thiscall NiTGAReader::ReadFile(NiTGAReader *this, NiFile *kIst, NiPixelData *pkOptDest);
void __thiscall NiSGIReader::ProcessRLERowByte(NiSGIReader *this, char *pucOutputImageData, char *pucInputImageData, int iImageStep);
void __thiscall NiSGIReader::ProcessRLERowWord(NiSGIReader *this, char *pucOutputImageData, char *pucInputImageData, int iImageStep);
bool __thiscall NiSGIReader::CanReadFile(NiSGIReader *this, const char *pcFileExtension);
void __thiscall NiSGIReader::NiSGIReader(NiSGIReader *this);
bool __thiscall NiSGIReader::ReadHeader(NiSGIReader *this, NiFile *kIst, unsigned int *uiWidth, unsigned int *uiHeight, NiPixelFormat *kFormat, bool *bMipmap, unsigned int *uiFaces);
NiPixelData *__thiscall NiSGIReader::ReadFile(NiSGIReader *this, NiFile *kIst, NiPixelData *pkOptDest);
bool __thiscall NiDDSReader::CanReadFile(NiDDSReader *this, const char *pcFileExtension);
NiPixelFormat *__thiscall NiDDSReader::ComputeFinalFormat(NiDDSReader *this, NiPixelFormat *result, NiPixelFormat kSrcFormat);
void __thiscall NiDDSReader::NiDDSReader(NiDDSReader *this);
bool __thiscall NiDDSReader::ReadHeader(NiDDSReader *this, NiFile *kIst, unsigned int *uiWidth, unsigned int *uiHeight, NiPixelFormat *kFormat, bool *bMipmap, unsigned int *uiFaces);
void __cdecl NiDDSReader::Read24Bit(NiFile *kIst, NiPixelData *pkDest, NiPixelFormat kSrcFmt, NiPixelFormat kDestFmt, unsigned int uiMipMapIdx, unsigned int uiFaceIdx);
void __cdecl NiDDSReader::Read32Bit(NiFile *kIst, NiPixelData *pkDest, NiPixelFormat kSrcFmt, NiPixelFormat kDestFmt, unsigned int uiMipMapIdx, unsigned int uiFaceIdx);
void __cdecl NiDDSReader::Read16Bit(NiFile *kIst, NiPixelData *pkDest, NiPixelFormat kSrcFmt, NiPixelFormat kDestFmt, unsigned int uiMipMapIdx, unsigned int uiFaceIdx);
NiPixelData *__thiscall NiDDSReader::ReadFile(NiDDSReader *this, NiFile *kIst, NiPixelData *pkOptDest);
bool __thiscall NiBMPReader::CanReadFile(NiBMPReader *this, const char *pcFileExtension);
void __thiscall NiBMPReader::NiBMPReader(NiBMPReader *this);
void *__thiscall NiBMPReader::_scalar_deleting_destructor_(NiSGIReader *this, unsigned int);
bool __thiscall NiBMPReader::ReadHeader(NiBMPReader *this, NiFile *kIst, unsigned int *uiWidth, unsigned int *uiHeight, NiPixelFormat *kFormat, bool *bMipmap, unsigned int *uiFaces);
NiPixelData *__thiscall NiBMPReader::ReadFile(NiBMPReader *this, NiFile *kIst, NiPixelData *pkOptDest);
const char *__thiscall NiD3DShaderProgram::GetShaderProgramName(NiD3DShaderProgram *this);
void __thiscall NiShaderDescBase::NiShaderDescBase(NiShaderDescBase *this);
void __thiscall NiShaderDescBase::_NiShaderDescBase(NiShaderDescBase *this);
void __thiscall NiShaderDescBase::SetName(NiShaderDescBase *this, const char *pcName);
void __thiscall NiShaderDescBase::SetDescription(NiShaderDescBase *this, const char *pcDesc);
void *__thiscall NiShaderDescBase::_scalar_deleting_destructor_(NiShaderDescBase *this, unsigned int);
void __cdecl MSS_auto_cleanup();
void __cdecl func(); // idb
int __thiscall NiCursor::Show(NiCursor *this, bool bShow);
bool __thiscall NiCursor::SetPosition(NiCursor *this, float fTime, int iScreenSpaceX, int iScreenSpaceY);
bool __thiscall NiCursor::Move(NiCursor *this, float fTime, int iDeltaX, int iDeltaY);
bool __thiscall NiCursor::UpdateScreenGeometry(NiCursor *this);
void __thiscall NiCursor::NiCursor(NiCursor *this, NiRenderer *pkRenderer);
NiRTTI *__thiscall NiCursor::GetRTTI(NiCursor *this);
void __thiscall NiCursor::_NiCursor(NiCursor *this);
void __thiscall NiCursor::Draw(NiCursor *this);
void *__thiscall NiCursor::_vector_deleting_destructor_(NiCursor *this, unsigned int);
bool __thiscall NiCursor::SetImage(NiCursor *this, const char *pacImageFile);
void __thiscall NiCursor::GetViewerStrings(NiCursor *this, NiTArray<char *> *pStrings);
void __cdecl NSBUtility::SetRenderer(NiDX9Renderer *pkRenderer);
bool __cdecl NSBUtility::SaveBinaryStateGroup(NiBinaryStream *kStream, NSBStateGroup *pkStateGroup);
bool __cdecl NSBUtility::SaveBinaryConstantMap(NiBinaryStream *kStream, NSBConstantMap *pkMap);
bool __cdecl NSBUtility::LoadBinaryStateGroup(NiBinaryStream *kStream, NSBStateGroup **pkStateGroup);
bool __cdecl NSBUtility::LoadBinaryConstantMap(NiBinaryStream *kStream, NSBConstantMap **pkMap);
NiBinaryShader *__cdecl NSBShader::DefaultCreateNiBinaryShader(const char *pcClassName);
void __thiscall NSBShader::SetName(NiD3DXEffectTechniqueSet *this, const char *pcName);
void __thiscall NSBShader::SetDescription(NSBShader *this, const char *pcDescription);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBImplementation__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBImplementation__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSBImplementation *> *this);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSBImplementation__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSBImplementation *> *this, unsigned int);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSBObjectTable::ObjectDesc__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSBObjectTable::ObjectDesc *> *this, unsigned int);
void *__thiscall NiTArray<NSBImplementation__>::_vector_deleting_destructor_(NiTArray<NSBImplementation *> *this, unsigned int);
NSBPackingDef *__thiscall NSBShader::GetPackingDef(NSBShader *this, const char *pcName, bool bCreate);
NSBImplementation *__thiscall NSBShader::GetImplementationByName(NSBShader *this, const char *pcName);
bool __thiscall NSBShader::RegisterTextureStageGlobals(NSBShader *this, NiDX9Renderer *pkRenderer, NSBImplementation *pkImplementation);
bool __thiscall NSBShader::ReleaseTextureStageGlobals(NSBShader *this, NiDX9Renderer *pkRenderer, NSBImplementation *pkImplementation);
void __thiscall NSBShader::SetupVersionInfo(NSBShader *this, NiDX9Renderer *pkRenderer, NSBShader::VersionInfo *kVersionInfo);
NSBShader::ValidityFlag __thiscall NSBShader::IsImplementationValid(NSBShader *this, NSBImplementation *pkImplementation, NSBShader::VersionInfo *kVersionInfo);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBObjectTable::ObjectDesc__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBObjectTable::ObjectDesc__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSBObjectTable::ObjectDesc *> *this);
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NSBPackingDef__>_NSBPackingDef__>::_NiTStringTemplateMap<NiTPointerMap<char_const___NSBPackingDef__>_NSBPackingDef__>(NiTStringTemplateMap<NiTPointerMap<char const *,NSBPackingDef *>,NSBPackingDef *> *this);
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NSBPackingDef__>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NSBPackingDef *> *this, unsigned int);
void *__thiscall NiTPointerMap<char_const___NSBPackingDef__>::_vector_deleting_destructor_(NiTPointerMap<char const *,NSBPackingDef *> *this, unsigned int);
void *__thiscall NiTStringPointerMap<NSBPackingDef__>::_vector_deleting_destructor_(NiTStringPointerMap<NSBPackingDef *> *this, unsigned int);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBObjectTable::ObjectDesc__>::_vector_deleting_destructor_(NiTPointerList<NSBObjectTable::ObjectDesc *> *this, unsigned int);
void __thiscall NSBShader::_NSBShader(NSBShader *this);
NSBImplementation *__thiscall NSBShader::GetImplementation(NSBShader *this, const char *pcName, bool bCreate, unsigned int uiNextIndex);
NiShaderDesc *__thiscall NSBShader::GetShaderDesc(NSBShader *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBImplementation__>::_vector_deleting_destructor_(NiTPointerList<NSBImplementation *> *this, unsigned int);
bool __thiscall NSBShader::SaveBinaryPackingDefs(NSBShader *this, NiBinaryStream *kStream);
bool __thiscall NSBShader::LoadBinaryPackingDefs(NSBShader *this, NiBinaryStream *kStream);
bool __thiscall NSBShader::SaveBinaryImplementations(NSBShader *this, NiBinaryStream *kStream);
bool __thiscall NSBShader::LoadBinaryImplementations(NSBShader *this, NiBinaryStream *kStream);
void __thiscall NiTArray<NiPointer<NiScreenElements>>::SetSize(NiTArray<NiPointer<NiD3DShaderConstantMapEntry> > *this, unsigned int uiMaxSize);
void *__thiscall NSBShader::_scalar_deleting_destructor_(NSBShader *this, unsigned int);
bool __thiscall NSBShader::SaveBinary(NSBShader *this, NiBinaryStream *kStream, bool bEndianSwap);
bool __thiscall NSBShader::LoadBinary(NSBShader *this, NiBinaryStream *kStream);
NSBImplementation *__thiscall NSBShader::GetBestImplementation(NSBShader *this, NiDX9Renderer *pkRenderer);
NiBinaryShader *__thiscall NSBShader::GetD3DShader(NSBShader *this, NiDX9Renderer *pkRenderer, unsigned int uiImplementation);
bool __thiscall NSBShader::Save(NSBShader *this, const char *pcFilename, bool bEndianSwap);
bool __thiscall NSBShader::Load(NSBShader *this, const char *pcFilename);
void __thiscall NSBShader::NSBShader(NSBShader *this);
void __thiscall NSBObjectTable::ObjectDesc::ObjectDesc(NSBObjectTable::ObjectDesc *this, const char *pcName, NiShaderAttributeDesc::ObjectType eType, unsigned int uiIndex);
void __thiscall NSBObjectTable::_NSBObjectTable(NSBObjectTable *this);
NSBObjectTable::ObjectDesc *__thiscall NSBObjectTable::GetObjectByName(NSBObjectTable *this, const char *pcName);
bool __thiscall NSBObjectTable::AddObject(NSBObjectTable *this, const char *pcName, NiShaderAttributeDesc::ObjectType eType, unsigned int uiIndex);
void __thiscall NSBAttributeDesc::NSBAttributeDesc(NSBAttributeDesc *this);
void __thiscall NSBAttributeDesc::_NSBAttributeDesc(NSBAttributeDesc *this);
unsigned int __thiscall NiD3DXEffectStateManager::GetLastTextureStage(NiD3DShaderProgramCreatorAsm *this);
bool __thiscall NSBAttributeDesc::GetValue_Bool(NSBAttributeDesc *this, bool *bValue);
bool __thiscall NSBAttributeDesc::GetValue_Texture(NSBAttributeDesc *this, unsigned int *uiValue, const char **pcValue);
bool __thiscall NSBAttributeDesc::GetValue_UnsignedInt(NSBAttributeDesc *this, unsigned int *uiValue);
bool __thiscall NSBAttributeDesc::GetValue_Float(NSBAttributeDesc *this, float *fValue);
bool __thiscall NSBAttributeDesc::GetValue_Point2(NSBAttributeDesc *this, NiPoint2 *kPt2Value);
bool __thiscall NSBAttributeDesc::GetValue_Point3(NSBAttributeDesc *this, NiPoint3 *kPtValue);
bool __thiscall NSBAttributeDesc::GetValue_Point4(NSBAttributeDesc *this, float **pfValue);
bool __thiscall NSBAttributeDesc::GetValue_ColorA(NSBAttributeDesc *this, NiColorA *kClrValue);
void __thiscall NSBAttributeDesc::SetType(NSBAttributeDesc *this, NiShaderAttributeDesc::AttributeType eType);
void __thiscall NSBAttributeDesc::SetValue_Bool(NSBAttributeDesc *this, bool bValue);
void __thiscall NSBAttributeDesc::SetValue_UnsignedInt(NSBAttributeDesc *this, unsigned int uiValue);
void __thiscall NSBAttributeDesc::SetValue_Float(NSBAttributeDesc *this, float fValue);
void __thiscall NSBAttributeDesc::SetValue_Point2(NSBAttributeDesc *this, NiPoint2 *kPt2Value);
void __thiscall NSBAttributeDesc::SetValue_Point3(NSBAttributeDesc *this, NiPoint3 *kPtValue);
void __thiscall NSBAttributeDesc::SetValue_Color(NSBAttributeDesc *this, NiColor *kClrValue);
void __thiscall NSBAttributeDesc::SetValue_ColorA(NSBAttributeDesc *this, NiColorA *kClrValue);
void __thiscall NSBAttributeDesc::SetHidden(NSBAttributeDesc *this, bool bHide);
void __thiscall NSBAttributeDesc::SetRanged(NSBAttributeDesc *this, bool bRanged);
bool __thiscall NSBAttributeDesc::SetRange_UnsignedInt(NSBAttributeDesc *this, unsigned int uiLow, unsigned int uiHigh);
bool __thiscall NSBAttributeDesc::SetRange_Float(NSBAttributeDesc *this, float fLow, float fHigh);
bool __thiscall NSBAttributeDesc::SetRange_Point2(NSBAttributeDesc *this, NiPoint2 *kPt2Low, NiPoint2 *kPt2High);
bool __thiscall NSBAttributeDesc::SetRange_Point3(NSBAttributeDesc *this, NiPoint3 *kPtLow, NiPoint3 *kPtHigh);
bool __thiscall NSBAttributeDesc::SetRange_Point4(NSBAttributeDesc *this, float *pfLow, float *pfHigh);
bool __thiscall NSBAttributeDesc::SetRange_Color(NSBAttributeDesc *this, NiColor *kClrLow, NiColor *kClrHigh);
bool __thiscall NSBAttributeDesc::SetRange_ColorA(NSBAttributeDesc *this, NiColorA *kClrLow, NiColorA *kClrHigh);
NiShaderAttributeDesc *__thiscall NSBAttributeDesc::GetShaderAttributeDesc(NSBAttributeDesc *this);
void __thiscall NSBAttributeDesc::SetName(NSBAttributeDesc *this, const char *pcName);
bool __thiscall NSBAttributeDesc::GetValue_Matrix3(NSBAttributeDesc *this, NiMatrix3 *kMatValue);
bool __thiscall NSBAttributeDesc::GetValue_Matrix4(NSBAttributeDesc *this, float **pfValue, unsigned int uiSizeBytes);
void __thiscall NSBAttributeDesc::SetValue_Point4(NSBAttributeDesc *this, float *pfValue);
void __thiscall NSBAttributeDesc::SetValue_Matrix3(NSBAttributeDesc *this, NiMatrix3 *kMatValue);
void __thiscall NSBAttributeDesc::SetValue_Matrix4(NSBAttributeDesc *this, float *pfValue);
void __thiscall NSBAttributeDesc::SetValue_Texture(NSBAttributeDesc *this, unsigned int uiValue, const char *pcValue);
bool __thiscall NSBAttributeDesc::SaveBinary(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Bool(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_String(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Float(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Point2(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Point3(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Color(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Matrix3(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Matrix4(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Texture(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::SaveBinary_Array(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Bool(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_String(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_UnsignedInt(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Point2(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Point3(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Matrix3(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Matrix4(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Color(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Texture(NSBAttributeDesc *this, NiBinaryStream *kStream);
bool __thiscall NSBAttributeDesc::LoadBinary_Array(NSBAttributeDesc *this, NiBinaryStream *kStream);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSBAttributeDesc__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSBAttributeDesc *> *this, unsigned int);
NiShaderAttributeDesc *__thiscall NSBAttributeTable::GetFirstAttribute(NiD3DXEffectAttributeTable *this);
NiShaderAttributeDesc *__thiscall NSBAttributeTable::GetNextAttribute(NiD3DXEffectAttributeTable *this);
NSBAttributeDesc *__thiscall NSBAttributeTable::GetAttributeByName(NSBAttributeTable *this, char *pcName);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBAttributeDesc__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBAttributeDesc__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSBAttributeDesc *> *this);
void *__thiscall NiTPointerList<NSBAttributeDesc__>::_scalar_deleting_destructor_(NiTPointerList<NSBAttributeDesc *> *this, unsigned int);
void __thiscall NSBAttributeTable::_NSBAttributeTable(NSBAttributeTable *this);
bool __thiscall NSBAttributeTable::AddAttribDesc_Bool(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, bool bInitValue);
bool __thiscall NSBAttributeTable::AddAttribDesc_UnsignedInt(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, unsigned int uiInitValue, unsigned int uiLow, unsigned int uiHigh);
bool __thiscall NSBAttributeTable::AddAttribDesc_Float(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float fInitValue, float fLow, float fHigh);
bool __thiscall NSBAttributeTable::AddAttribDesc_Point2(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NSBAttributeTable::AddAttribDesc_Point3(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NSBAttributeTable::AddAttribDesc_Point4(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NSBAttributeTable::AddAttribDesc_Matrix3(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float *pfInitValue);
bool __thiscall NSBAttributeTable::AddAttribDesc_Matrix4(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float *pfInitValue);
bool __thiscall NSBAttributeTable::AddAttribDesc_Color(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NSBAttributeTable::AddAttribDesc_ColorA(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, float *pfInitValue, float *pfLow, float *pfHigh);
bool __thiscall NSBAttributeTable::AddAttribDesc_Texture(NSBAttributeTable *this, char *pcName, char *pcDesc, bool bHidden, unsigned int uiSlot, const char *pcDefault);
bool __thiscall NSBAttributeTable::SaveBinary(NSBAttributeTable *this, NiBinaryStream *kStream);
void __thiscall NSBAttributeTable::NSBAttributeTable(NSBAttributeTable *this);
bool __thiscall NSBAttributeTable::LoadBinary(NSBAttributeTable *this, NiBinaryStream *kStream);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSBConstantMap::NSBCM_Entry__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSBConstantMap::NSBCM_Entry *> *this, unsigned int);
NSBConstantMap::NSBCM_Entry *__thiscall NSBConstantMap::GetEntryByKey(NSBConstantMap *this, char *pcKey);
NSBConstantMap::NSBCM_Entry *__thiscall NSBConstantMap::GetPlatformEntryByKey(NSBConstantMap *this, NiShader::Platform ePlatform, char *pcKey);
unsigned int __thiscall NSBConstantMap::GetEntryIndexByKey(NSBConstantMap *this, char *pcKey);
NSBConstantMap::NSBCM_Entry *__thiscall NSBConstantMap::CreateEntry(NSBConstantMap *this, char *pcKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiReg, unsigned int uiCount, char *pcVariableName, unsigned int uiSize, unsigned int uiStride, void *pvSource, bool bCopyData);
bool __thiscall NSBConstantMap::ProcessPixelMapEntry(NSBConstantMap *this, NiDX9Renderer *pkRenderer, NiShaderDesc *pkShaderDesc, NSBConstantMap::NSBCM_Entry *pkEntry, NiD3DSCM_Pixel *pkSCMP);
bool __thiscall NSBConstantMap::ProcessVertexMapEntry(NSBConstantMap *this, NiDX9Renderer *pkRenderer, NiShaderDesc *pkShaderDesc, NSBConstantMap::NSBCM_Entry *pkEntry, NiD3DSCM_Vertex *pkSCMV);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBConstantMap::NSBCM_Entry__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBConstantMap::NSBCM_Entry__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSBConstantMap::NSBCM_Entry *> *this);
void *__thiscall NiTPointerList<NSBConstantMap::NSBCM_Entry__>::_scalar_deleting_destructor_(NiTPointerList<NSBConstantMap::NSBCM_Entry *> *this, unsigned int);
bool __thiscall NSBConstantMap::NSBCM_Entry::SaveBinary(NSBConstantMap::NSBCM_Entry *this, NiBinaryStream *kStream);
bool __thiscall NSBConstantMap::NSBCM_Entry::LoadBinary(NSBConstantMap::NSBCM_Entry *this, NiBinaryStream *kStream);
void __thiscall NSBConstantMap::_NSBConstantMap(NSBConstantMap *this);
bool __thiscall NSBConstantMap::AddEntry(NSBConstantMap *this, char *pcKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiReg, unsigned int uiCount, char *pcVariableName, unsigned int uiSize, unsigned int uiStride, void *pvSource, bool bCopyData);
NiD3DSCM_Pixel *__thiscall NSBConstantMap::GetD3DSCM_Pixel(NSBConstantMap *this, NiDX9Renderer *pkRenderer, NiShaderDesc *pkShaderDesc);
NiD3DSCM_Vertex *__thiscall NSBConstantMap::GetD3DSCM_Vertex(NSBConstantMap *this, NiDX9Renderer *pkRenderer, NiShaderDesc *pkShaderDesc);
bool __thiscall NSBConstantMap::SaveBinary(NSBConstantMap *this, NiBinaryStream *kStream);
bool __thiscall NSBConstantMap::LoadBinary(NSBConstantMap *this, NiBinaryStream *kStream);
bool __thiscall NSBConstantMap::AddPlatformSpecificEntry_DX9(NSBConstantMap *this, char *pcKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiReg, unsigned int uiCount, char *pcVariableName, unsigned int uiSize, unsigned int uiStride, void *pvSource, bool bCopyData);
bool __thiscall NSBConstantMap::AddPlatformSpecificEntry_Xenon(NSBConstantMap *this, char *pcKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiReg, unsigned int uiCount, char *pcVariableName, unsigned int uiSize, unsigned int uiStride, void *pvSource, bool bCopyData);
bool __thiscall NSBConstantMap::SaveBinaryEntries(NSBConstantMap *this, NiBinaryStream *kStream);
bool __thiscall NSBConstantMap::LoadBinaryEntries(NSBConstantMap *this, NiBinaryStream *kStream);
void __thiscall NSBConstantMap::NSBConstantMap(NSBConstantMap *this);
void *__thiscall NSBConstantMap::_scalar_deleting_destructor_(NSBConstantMap *this, unsigned int);
bool __thiscall NSBConstantMap::AddPlatformSpecificEntry(NSBConstantMap *this, unsigned int uiPlatformFlags, char *pcKey, unsigned int uiFlags, unsigned int uiExtra, unsigned int uiReg, unsigned int uiCount, char *pcVariableName, unsigned int uiSize, unsigned int uiStride, void *pvSource, bool bCopyData);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSBUserDefinedDataBlock__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSBUserDefinedDataBlock *> *this, unsigned int);
void *__thiscall NSBUserDefinedDataBlock::_vector_deleting_destructor_(NSBUserDefinedDataBlock *this, unsigned int);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBUserDefinedDataBlock__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBUserDefinedDataBlock__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSBUserDefinedDataBlock *> *this);
void *__thiscall NiTPointerList<NSBUserDefinedDataBlock__>::_scalar_deleting_destructor_(NiTPointerList<NSBUserDefinedDataBlock *> *this, unsigned int);
void __thiscall NSBUserDefinedDataSet::_NSBUserDefinedDataSet(NSBUserDefinedDataSet *this);
NSBUserDefinedDataBlock *__thiscall NSBUserDefinedDataSet::GetBlock(NSBUserDefinedDataSet *this, const char *pcName, bool bCreate);
bool __thiscall NSBUserDefinedDataSet::SaveBinary(NSBUserDefinedDataSet *this, NiBinaryStream *kStream);
void __thiscall NSBUserDefinedDataSet::NSBUserDefinedDataSet(NSBUserDefinedDataSet *this);
void *__thiscall NSBUserDefinedDataSet::_vector_deleting_destructor_(NSBUserDefinedDataSet *this, unsigned int);
bool __thiscall NSBUserDefinedDataSet::LoadBinary(NSBUserDefinedDataSet *this, NiBinaryStream *kStream);
void __thiscall NSBImplementation::SetDesc(NSBImplementation *this, const char *pcDesc);
NSBRequirements *__thiscall NSBImplementation::GetRequirements(NSBImplementation *this);
NSBStateGroup *__thiscall NSBImplementation::GetRenderStateGroup(NSBImplementation *this);
void *__thiscall NiTArray<NSBPass__>::_vector_deleting_destructor_(NiTArray<NSBPass *> *this, unsigned int);
void __thiscall NSBImplementation::NSBImplementation(NSBImplementation *this);
void __thiscall NSBImplementation::_NSBImplementation(NSBImplementation *this);
NSBConstantMap *__thiscall NSBImplementation::GetPixelConstantMap(NSBImplementation *this);
NSBConstantMap *__thiscall NSBImplementation::GetVertexConstantMap(NSBImplementation *this);
NSBPass *__thiscall NSBImplementation::GetPass(NSBImplementation *this, unsigned int uiIndex, bool bCreate);
bool __thiscall NSBImplementation::SaveBinaryPasses(NSBImplementation *this, NiBinaryStream *kStream);
bool __thiscall NSBImplementation::SaveBinaryRequirements(NSBImplementation *this, NiBinaryStream *kStream);
bool __thiscall NSBImplementation::LoadBinaryRequirements(NSBImplementation *this, NiBinaryStream *kStream);
bool __thiscall NSBImplementation::LoadBinaryPasses(NSBImplementation *this, NiBinaryStream *kStream);
bool __thiscall NiBinaryShader::InsertPass(NiBinaryShader *this, unsigned int uiPass, NiD3DPass *pkPass);
bool __thiscall NSBImplementation::SaveBinary(NSBImplementation *this, NiBinaryStream *kStream);
bool __thiscall NSBImplementation::LoadBinary(NSBImplementation *this, NiBinaryStream *kStream);
bool __thiscall NSBImplementation::SetupNiBinaryShader(NSBImplementation *this, NiBinaryShader *kShader, NiShaderDesc *pkShaderDesc);
void __thiscall NSBTextureStage::NSBTextureStage(NSBTextureStage *this);
NSBStateGroup *__thiscall NSBTextureStage::GetTextureStageGroup(NSBTextureStage *this);
NSBStateGroup *__thiscall NSBTextureStage::GetSamplerStageGroup(NSBTextureStage *this);
bool __thiscall NSBTextureStage::SetupD3DTextureStage(NSBTextureStage *this, NiD3DTextureStage *kD3DStage);
void __thiscall NSBTextureStage::_NSBTextureStage(NSBTextureStage *this);
bool __thiscall NSBTextureStage::SaveBinaryTextureTransform(NSBTextureStage *this, NiBinaryStream *kStream);
bool __thiscall NSBTextureStage::SaveBinary(NSBTextureStage *this, NiBinaryStream *kStream);
bool __thiscall NSBTextureStage::LoadBinaryTextureTransform(NSBTextureStage *this, NiBinaryStream *kStream);
bool __thiscall NSBTextureStage::LoadBinary(NSBTextureStage *this, NiBinaryStream *kStream);
NSBStateGroup *__thiscall NSBPass::GetRenderStateGroup(NSBPass *this);
void __thiscall NSBPass::SetPixelShaderProgramFileXenon(NSBPass *this, const char *pcProgramFileName);
void __thiscall NSBImplementation::SetPackingDef(NSBPass *this, const char *pcProgramFileName);
void __thiscall NSBPass::SetPixelShaderProgramEntryPoint(NSBPass *this, const char *pcEntryPoint);
void __thiscall NSBPass::SetPixelShaderProgramShaderTarget(NSBPass *this, const char *pcShaderTarget);
void __thiscall NSBPass::SetVertexShaderProgramFileXenon(NSBPass *this, const char *pcProgramFileName);
void __thiscall NSBPass::SetVertexShaderProgramFileDX9(NSBPass *this, const char *pcProgramFileName);
void __thiscall NSBPass::SetVertexShaderProgramEntryPoint(NSBPass *this, const char *pcEntryPoint);
void __thiscall NSBPass::SetVertexShaderProgramShaderTarget(NSBPass *this, const char *pcShaderTarget);
bool __thiscall NSBPass::SaveBinaryPixelShaderProgram(NSBPass *this, NiBinaryStream *kStream);
bool __thiscall NSBPass::SaveBinaryVertexShaderProgram(NSBPass *this, NiBinaryStream *kStream);
void *__thiscall NiTArray<NSBTextureStage__>::_scalar_deleting_destructor_(NiTArray<NSBTextureStage *> *this, unsigned int);
void __thiscall NSBPass::NSBPass(NSBPass *this);
void __thiscall NSBPass::_NSBPass(NSBPass *this);
NSBConstantMap *__thiscall NSBPass::GetPixelConstantMap(NSBPass *this);
NSBConstantMap *__thiscall NSBPass::GetVertexConstantMap(NSBPass *this);
NiShaderRequirementDesc *__thiscall NiD3DXEffectTechnique::GetRequirements(NiD3DXEffectTechnique *this);
NSBTextureStage *__thiscall NSBPass::GetStage(NSBPass *this, unsigned int uiIndex, bool bCreate);
bool __thiscall NSBPass::LoadBinaryPixelShaderProgram(NSBPass *this, NiBinaryStream *kStream);
bool __thiscall NSBPass::LoadBinaryVertexShaderProgram(NSBPass *this, NiBinaryStream *kStream);
bool __thiscall NSBPass::SetupNiD3DPass(NSBPass *this, NiD3DPass *kPass, NiShaderDesc *pkShaderDesc);
bool __thiscall NSBPass::SaveBinaryStages(NSBPass *this, NiBinaryStream *kStream);
bool __thiscall NSBPass::SaveBinary(NSBPass *this, NiBinaryStream *kStream);
bool __thiscall NSBPass::LoadBinaryStages(NSBPass *this, NiBinaryStream *kStream);
bool __thiscall NSBPass::LoadBinary(NSBPass *this, NiBinaryStream *kStream);
void __thiscall NSBRequirements::NSBRequirements(NSBRequirements *this);
unsigned int __thiscall NSBPackingDef::GetName(NSBRequirements *this);
void __thiscall NSBRequirements::SetPSVersion(NSBRequirements *this, unsigned int uiVersion);
void __thiscall NiD3DShaderProgramCreatorAsm::SetShaderCreationFlags(NiD3DShaderProgramCreatorAsm *this, unsigned int uiFlags);
bool __thiscall NSBRequirements::UsesNiRenderState(NSBRequirements *this);
void __thiscall NSBRequirements::SetUsesNiRenderState(NSBRequirements *this, bool bUses);
bool __thiscall NSBRequirements::UsesNiLightState(NSBRequirements *this);
void __thiscall NSBRequirements::SetUsesNiLightState(NSBRequirements *this, bool bUses);
void __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::SetRevBytes(NiD3DShaderProgram *this, NiD3DShaderProgramCreator *pkCreator);
void __thiscall NSBRequirements::SetBoneCalcMethod(NSBRequirements *this, NiBinaryShader::BoneMatrixCalcMethod eMethod);
void __thiscall NSBRequirements::SetBinormalTangentMethod(NSBRequirements *this, NiGeometryData::DataFlags eNBTMethod);
void __thiscall NSBRequirements::SetSoftwareVPAcceptable(NSBRequirements *this, bool bSoftwareVP);
bool __thiscall NSBRequirements::GetSoftwareVPRequired(NSBRequirements *this);
void __thiscall NSBRequirements::SetSoftwareVPRequired(NSBRequirements *this, bool bSoftwareVP);
bool __thiscall NSBRequirements::SaveBinary(NSBRequirements *this, NiBinaryStream *kStream);
bool __thiscall NSBRequirements::LoadBinary(NSBRequirements *this, NiBinaryStream *kStream);
NSBRenderStates::NiD3DRenderState __cdecl NSBRenderStates::LookupRenderState(const char *pcRenderState);
bool __cdecl NSBRenderStates::LookupRenderStateValue(NSBRenderStates::NiD3DRenderState eRenderState, const char *pcValue, unsigned int *uiValue);
bool __cdecl NSBRenderStates::GetD3DRenderStateType(NSBRenderStates::NiD3DRenderState eRenderState, _D3DRENDERSTATETYPE *eD3DRS);
bool __cdecl NSBRenderStates::GetD3DMaterialColorSource(NSBRenderStates::NiD3DMaterialColorSource eMaterialColorSource, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DBlend(NSBRenderStates::NiD3DBlend eBlend, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DFillMode(NSBRenderStates::NiD3DCull eCull, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DCmpFunc(NSBRenderStates::NiD3DStencilOp eStencilOp, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DFogMode(NSBRenderStates::NiD3DFogMode eFogMode, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DWrap(NSBRenderStates::NiD3DWrap eWrap, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DVertexBlendFlags(NSBRenderStates::NiD3DVertexBlendFlags eVertexBlendFlags, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DDebugMonitorTokens(NSBRenderStates::NiD3DDebugMonitorTokens eDebugMonitorTokens, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DBlendOp(NSBStageAndSamplerStates::NiD3DTextureAddress eTA, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::GetD3DDegreeType(NSBRenderStates::NiD3DDegreeType eDegreeType, unsigned int *uiD3DValue);
bool __cdecl NSBRenderStates::ConvertNSBRenderStateValue(NSBRenderStates::NiD3DRenderState eNSBState, unsigned int uiNSBValue, unsigned int *uiD3DValue);
bool __thiscall NSBStateGroup::SetupRenderStateGroup(NSBStateGroup *this, NiD3DRenderStateGroup *kRSGroup);
bool __thiscall NSBStateGroup::SetupTextureStageGroup(NSBStateGroup *this, NiD3DTextureStageGroup *kTSGroup);
bool __thiscall NSBStateGroup::SetupTextureSamplerGroup(NSBStateGroup *this, NiD3DTextureStageGroup *kTSGroup);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSBStateGroup::NSBSGEntry__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSBStateGroup::NSBSGEntry *> *this, unsigned int);
NSBStateGroup::NSBSGEntry *__thiscall NSBStateGroup::GetFirstState(NSBStateGroup *this);
NSBStateGroup::NSBSGEntry *__thiscall NSBStateGroup::GetNextState(NSBStateGroup *this);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBStateGroup::NSBSGEntry__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBStateGroup::NSBSGEntry__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSBStateGroup::NSBSGEntry *> *this);
void *__thiscall NiTPointerList<NSBStateGroup::NSBSGEntry__>::_vector_deleting_destructor_(NiTPointerList<NSBStateGroup::NSBSGEntry *> *this, unsigned int);
void __thiscall NSBStateGroup::_NSBStateGroup(NSBStateGroup *this);
void __thiscall NSBStateGroup::SetState(NSBStateGroup *this, unsigned int uiState, unsigned int uiValue, bool bSave, bool bUseMapValue);
bool __thiscall NSBStateGroup::SaveBinary(NSBStateGroup *this, NiBinaryStream *kStream);
void __thiscall NSBStateGroup::NSBStateGroup(NSBStateGroup *this);
bool __thiscall NSBStateGroup::LoadBinary(NSBStateGroup *this, NiBinaryStream *kStream);
void __thiscall NSBPackingDef::SetFixedFunction(NSBPackingDef *this, bool bFixedFunction);
const char *__cdecl NSBPackingDef::GetTypeName(NSBPackingDef::NiD3DPackingDefType eType);
const char *__cdecl NSBPackingDef::GetParameterName(NiD3DShaderDeclaration::ShaderParameter eParam);
NiD3DShaderDeclaration *__thiscall NSBPackingDef::GetShaderDeclaration(NSBPackingDef *this, NiShader::Platform ePlatform, NiDX9Renderer *pkRenderer);
NiD3DShaderDeclaration::ShaderParameterType __thiscall NSBPackingDef::ConvertPackingDefType(NSBPackingDef *this, NSBPackingDef::NiD3DPackingDefType eType);
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSBPackingDef::NSBPDEntry__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NSBPackingDef::NSBPDEntry *> *this, unsigned int);
NSBPackingDef::NSBPDEntry *__thiscall NSBPackingDef::GetFirstEntry(NSBPackingDef *this);
NSBPackingDef::NSBPDEntry *__thiscall NSBPackingDef::GetNextEntry(NSBPackingDef *this);
void __thiscall NSBPackingDef::GetStreamInfo(NSBPackingDef *this, unsigned int *uiStreamCount, unsigned int *uiMaxStreamEntryCount);
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBPackingDef::NSBPDEntry__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBPackingDef::NSBPDEntry__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NSBPackingDef::NSBPDEntry *> *this);
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NSBPackingDef::NSBPDEntry__>::_scalar_deleting_destructor_(NiTPointerList<NSBPackingDef::NSBPDEntry *> *this, unsigned int);
bool __thiscall NSBPackingDef::NSBPDEntry::SaveBinary(NSBPackingDef::NSBPDEntry *this, NiBinaryStream *kStream);
void __thiscall NSBPackingDef::_NSBPackingDef(NSBPackingDef *this);
bool __thiscall NSBPackingDef::AddPackingEntry(NSBPackingDef *this, unsigned int uiStream, unsigned int uiRegister, unsigned int uiInput, NSBPackingDef::NiD3DPackingDefType eType, NiD3DShaderDeclaration::ShaderParameterTesselator eTesselator, NiD3DShaderDeclaration::ShaderParameterUsage eUsage, unsigned int uiUsageIndex);
bool __thiscall NSBPackingDef::SaveBinary(NSBPackingDef *this, NiBinaryStream *kStream);
bool __thiscall NSBPackingDef::NSBPDEntry::LoadBinary(NSBPackingDef::NSBPDEntry *this, NiBinaryStream *kStream);
void __thiscall NSBPackingDef::NSBPackingDef(NSBPackingDef *this);
bool __thiscall NSBPackingDef::LoadBinary(NSBPackingDef *this, NiBinaryStream *kStream);
unsigned int __thiscall NiBinaryShader::PreProcessPipeline(NiBinaryShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiBinaryShader::SetupRenderingPass(NiBinaryShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
unsigned int __thiscall NiBinaryShader::SetupShaderPrograms(NiBinaryShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
NiGeometryBufferData *__thiscall NiBinaryShader::PrepareGeometryForRendering(NiBinaryShader *this, NiGeometry *pkGeometry, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState);
bool __thiscall NiD3DTextureStageGroup::GetNextNoSaveSamplerState(NiD3DTextureStageGroup *this, unsigned int *uiState, unsigned int *uiValue, bool *bUseMapValue);
bool __thiscall NiD3DTextureStageGroup::GetNextSavedSamplerState(NiD3DTextureStageGroup *this, unsigned int *uiState, unsigned int *uiValue, bool *bUseMapValue);
bool __thiscall NiD3DTextureStage::GetSaveTexCoordIndex(NiD3DTextureStage *this);
// unsigned int __usercall GetSamplerValue<eax>(NiDX9Renderer *pkD3DRenderer, unsigned int uiState<edx>, unsigned int uiValue, NiTexturingProperty::ClampMode eClampMode<ecx>, NiTexturingProperty::FilterMode eFilterMode<eax>);
bool __thiscall NiBinaryShader::ResolveVertexShaderFileName(NiBinaryShader *this, const char *pcOriginalName, char *pcTrueName, unsigned int uiNameLength);
bool __thiscall NiBinaryShader::ResolvePixelShaderFileName(NiBinaryShader *this, const char *pcOriginalName, char *pcTrueName, unsigned int uiNameLength);
unsigned int __thiscall NiBinaryShader::SetupTransformations(NiBinaryShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
bool __thiscall NiBinaryShader::LoadVertexShaderProgram(NiBinaryShader *this, NiD3DPass *kPass);
bool __thiscall NiBinaryShader::LoadPixelShaderProgram(NiBinaryShader *this, NiD3DPass *kPass);
void __thiscall NiBinaryShader::PrepareTextureStage(NiBinaryShader *this, NiD3DTextureStage *pkStage, NiTexturingProperty *pkTexProp, NiDynamicEffectState *pkEffects);
void __thiscall NiTArray<NiPointer<NSBUserDefinedDataSet>>::_NiTArray<NiPointer<NSBUserDefinedDataSet>>(NiTArray<NiPointer<NSBUserDefinedDataSet> > *this);
void *__thiscall NiTArray<NiPointer<NSBUserDefinedDataSet>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NSBUserDefinedDataSet> > *this, unsigned int);
void __thiscall NiBinaryShader::_NiBinaryShader(NiBinaryShader *this);
NiRTTI *__thiscall NiBinaryShader::GetRTTI(NiBinaryShader *this);
bool __thiscall NiBinaryShader::Initialize(NiBinaryShader *this, NiDX9Renderer *pkRenderer);
unsigned int __thiscall NiBinaryShader::UpdatePipeline(NiBinaryShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
bool __thiscall NiBinaryShader::SetupGeometry(NiBinaryShader *this, NiGeometry *pkGeometry);
void __thiscall NiBinaryShader::NiBinaryShader(NiBinaryShader *this);
void *__thiscall NiBinaryShader::_scalar_deleting_destructor_(NiBinaryShader *this, unsigned int);
NiD3DSCM_Vertex *__thiscall NSBUserDefinedDataBlock::GetD3DSCM_Pixel(NSBUserDefinedDataBlock *this, NiDX9Renderer *pkRenderer, NiShaderDesc *pkShaderDesc);
bool __thiscall NSBUserDefinedDataBlock::SaveBinary(NSBUserDefinedDataBlock *this, NiBinaryStream *kStream);
bool __thiscall NSBUserDefinedDataBlock::LoadBinary(NSBUserDefinedDataBlock *this, NiBinaryStream *kStream);
bool __thiscall NSBUserDefinedDataBlock::SaveBinaryEntries(NSBUserDefinedDataBlock *this, NiBinaryStream *kStream);
bool __thiscall NSBUserDefinedDataBlock::LoadBinaryEntries(NSBUserDefinedDataBlock *this, NiBinaryStream *kStream);
bool __thiscall NSBUserDefinedDataBlock::AddEntry(NSBUserDefinedDataBlock *this, char *pcKey, unsigned int uiFlags, unsigned int uiSize, unsigned int uiStride, void *pvSource, bool bCopyData);
bool __thiscall NSBTextureStage::SetupD3DTextureStage_DX9(NSBTextureStage *this, NiD3DTextureStage *kD3DStage);
bool __thiscall NSBStateGroup::SetupRenderStateGroup_DX9(NSBStateGroup *this, NiD3DRenderStateGroup *kRSGroup);
bool __thiscall NSBStateGroup::SetupTextureStageGroup_DX9(NSBStateGroup *this, NiD3DTextureStageGroup *kTSGroup);
bool __thiscall NSBStateGroup::SetupTextureSamplerGroup_DX9(NSBStateGroup *this, NiD3DTextureStageGroup *kTSGroup);
NiD3DShaderDeclaration::ShaderParameterType __thiscall NSBPackingDef::ConvertPackingDefType_DX9(NSBPackingDef *this, NSBPackingDef::NiD3DPackingDefType eType);
NiD3DShaderDeclaration *__thiscall NSBPackingDef::GetShaderDeclaration_DX9(NSBPackingDef *this, NiDX9Renderer *pkRenderer);
bool __cdecl NSBStageAndSamplerStates::GetD3DTextureStageState(NSBStageAndSamplerStates::NiD3DTextureStageState eTSS, unsigned int *uiD3DValue);
bool __cdecl NSBStageAndSamplerStates::GetD3DTextureOp(NSBStageAndSamplerStates::NiD3DTextureOp eTOP, unsigned int *uiD3DValue);
bool __cdecl NSBStageAndSamplerStates::GetD3DTextureArg(unsigned int uiTA, unsigned int *uiD3DValue);
bool __cdecl NSBStageAndSamplerStates::GetD3DTextureTransformFlags(NSBStageAndSamplerStates::NiD3DTextureTransformFlags eTTF, unsigned int *uiD3DValue);
bool __cdecl NSBStageAndSamplerStates::GetD3DTexCoordIndexFlags(unsigned int uiTCI, unsigned int *uiD3DValue);
bool __cdecl NSBStageAndSamplerStates::GetD3DTextureFilter(NSBStageAndSamplerStates::NiD3DTextureFilter eTF, unsigned int *uiD3DValue);
bool __cdecl NSBStageAndSamplerStates::ConvertNSBTextureStageStateValue(NSBStageAndSamplerStates::NiD3DTextureStageState eTSS, unsigned int uiNSBValue, unsigned int *uiD3DValue);
bool __cdecl NSBStageAndSamplerStates::ConvertNSBTextureSamplerStateValue(NSBStageAndSamplerStates::NiD3DTextureSamplerState eTSS, unsigned int uiNSBValue, unsigned int *uiD3DValue);
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *this);
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Wherenode);
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *this);
void *__thiscall NsFNC_35::_vector_deleting_destructor_(NsFNC_35 *this, unsigned int);
void __cdecl std::_Cons_val<std::allocator<NiPointer<INsFile>>_NiPointer<INsFile>_NiPointer<INsFile>_const__>(std::allocator<NiPointer<INsFile> > *_Alval, NiPointer<INsFile> *_Pdest, NiPointer<INsFile> *_Src);
std::_List_nod<NiPointer<INsFile>,std::allocator<NiPointer<INsFile> > >::_Node *__thiscall std::_List_val<NiPointer<INsFile>_std::allocator<NiPointer<INsFile>>>::_Buynode(std::_List_val<NiPointer<INsFile>,std::allocator<NiPointer<INsFile> > > *this, std::_List_nod<NiPointer<INsFile>,std::allocator<NiPointer<INsFile> > >::_Node *_Next, std::_List_nod<NiPointer<INsFile>,std::allocator<NiPointer<INsFile> > >::_Node *_Prev, NiPointer<INsFile> *_Val);
bool __thiscall INsFile::AttachChild(INsFile *this, INsFile *_pkNsFile);
bool __thiscall NsFNC_35::MakeNode(NsFNC_35 *this, INsFile *_Insfile_, NsTextCodeV0_2 *_pNsTextCode_, std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<c *_pmapNodeCreater);
void *__thiscall NsFNC_123::_vector_deleting_destructor_(NsFNC_123 *this, unsigned int);
bool __thiscall NsFNC_123::MakeNode(NsFNC_123 *this, INsFile *_Insfile_, NsTextCodeV0_2 *_pNsTextCode_, std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<c *_pmapNodeCreater);
void *__thiscall NsFNC_125::_vector_deleting_destructor_(NsFNC_125 *this, unsigned int);
void *__thiscall NsFNC_58::_vector_deleting_destructor_(NsFNC_58 *this, unsigned int);
bool __thiscall NsFNC_58::MakeNode(NsFNC_58 *this, INsFile *_Insfile_, NsTextCodeV0_2 *_pNsTextCode_, std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<c *_pmapNodeCreater);
void *__thiscall NsFNC_34::_vector_deleting_destructor_(NsFNC_34 *this, unsigned int);
bool __thiscall NsFNC_34::MakeNode(NsFNC_34 *this, INsFile *_Insfile_, NsTextCodeV0_2 *_pNsTextCode_, std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<c *_pmapNodeCreater);
void __cdecl std::_Cons_val<std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>_std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>_std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>(std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > > *_Alval, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *_Pdest, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *_Src);
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<INsFile_NodeCreater>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>(...);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<INsFile_NodeCreater>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>_0>>::erase(...);
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<INsFile_NodeCreater>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Rootnode);
bool __thiscall NsFileReader::SetNodeCreater(NsFileReader *this, const char *_strKey, INsFile_NodeCreater *_pkCreater);
INsFile *__thiscall NsFileReader::LoadFile(NsFileReader *this, const char *_strFileName);
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<INsFile_NodeCreater>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>_0>>::erase(...);
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<INsFile_NodeCreater>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<INsFile_NodeCreater>>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<INsFile_NodeCreater>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_N(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<c *this);
void __thiscall NsFileReader::_NsFileReader(NsFileReader *this);
void __thiscall NsFileReader::NsFileReader(NsFileReader *this);
void *__thiscall NsFileReader::_scalar_deleting_destructor_(NsFileReader *this, unsigned int);
int __thiscall NsTextCodeV0_2::CharTest(NsTextCodeV0_2 *this, char *inChar);
bool __thiscall NsTextCodeV0_3::CreateBuffer(NsTextCodeV0_3 *this, const char *_strFileName);
bool __thiscall NsTextCodeV0_3::ReadFile(NsTextCodeV0_3 *this, const char *_strFileName);
int __thiscall NsTextCodeV0_2::OperaterTest(NsTextCodeV0_2 *this, int nInStart, int *pOutEnd, char *originstr, char *inChar);
int __thiscall NsTextCodeV0_2::GetWord(NsTextCodeV0_2 *this, int nInStart, int *pOutEnd, char *originstr, char *outstr);
bool __thiscall NsTextCodeV0_2::GetWord(NsTextCodeV0_2 *this, char *outstr_);
void __thiscall NsTextCodeV0_2::_NsTextCodeV0_2(NsTextCodeV0_2 *this);
int __thiscall NsTextCodeV0_2::EffStrCmp(NsTextCodeV0_2 *this, const char *instr);
void __thiscall NsTextCodeV0_2::NsTextCodeV0_2(NsTextCodeV0_2 *this);
void *__thiscall NsTextCodeV0_2::_vector_deleting_destructor_(NsTextCodeV0_2 *this, unsigned int);
void __thiscall INsFile_NodeCreater::INsFile_NodeCreater(INsFile_NodeCreater *this);
void __thiscall INsFile_NodeCreater::_INsFile_NodeCreater(INsFile_NodeCreater *this);
void *__thiscall INsFile_NodeCreater::_vector_deleting_destructor_(INsFile_NodeCreater *this, unsigned int);
void __cdecl std::_Dest_val<std::allocator<std::_List_nod<NiPointer<INsFile>_std::allocator<NiPointer<INsFile>>>::_Node>_std::_List_nod<NiPointer<INsFile>_std::allocator<NiPointer<INsFile>>>::_Node>(std::allocator<std::_List_nod<NiPointer<INsFile>,std::allocator<NiPointer<INsFile> > >::_Node> *_Alval, std::_List_nod<NiPointer<INsFile>,std::allocator<NiPointer<INsFile> > >::_Node *_Pdest);
void __thiscall std::list<NiPointer<INsFile>_std::allocator<NiPointer<INsFile>>>::clear(std::list<NiPointer<INsFile>,std::allocator<NiPointer<INsFile> > > *this);
void __thiscall INsFile::INsFile(INsFile *this);
void __thiscall INsFile::_INsFile(INsFile *this);
void *__thiscall INsFile::_vector_deleting_destructor_(INsFile *this, unsigned int);
void __thiscall CNsReadAse::ClearMapData(CNsReadAse *this);
int __thiscall CNsReadAse::GetIndex(CNsReadAse *this, float _fX, float _fY);
void __thiscall CNsReadAse::CNsReadAse(CNsReadAse *this);
void __thiscall CNsReadAse::_CNsReadAse(CNsReadAse *this);
bool __thiscall CNsReadAse::ReadAseFile(CNsReadAse *this, const char *_strASEFileName);
unsigned int __cdecl NiD3DSCM_Pixel::LookUpPredefinedMapping(const char *pszMapping);
unsigned int __thiscall NiD3DSCM_Pixel::SetConstantConstant(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, unsigned int uiPass);
void *__thiscall NiD3DSCM_Pixel::_scalar_deleting_destructor_(NiD3DSCM_Pixel *this, unsigned int);
bool __cdecl NiD3DSCM_Pixel::LookUpPredefinedMapping(const char *pszMapping, unsigned int *uiMappingID, unsigned int *uiNumRegisters);
NiShaderAttributeDesc::AttributeType __cdecl NiD3DSCM_Pixel::LookUpPredefinedMappingType(const char *pszMapping);
unsigned int __thiscall NiD3DSCM_Pixel::SetupPredefinedEntry(NiD3DSCM_Pixel *this, NiD3DShaderConstantMapEntry *pkEntry);
unsigned int __thiscall NiD3DSCM_Pixel::SetupObjectEntry(NiD3DSCM_Pixel *this, NiD3DShaderConstantMapEntry *pkEntry);
unsigned int __thiscall NiD3DSCM_Pixel::PerformOperatorMultiply(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
unsigned int __thiscall NiD3DSCM_Pixel::PerformOperatorDivide(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
unsigned int __thiscall NiD3DSCM_Pixel::PerformOperatorAdd(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
unsigned int __thiscall NiD3DSCM_Pixel::PerformOperatorSubtract(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiShaderAttributeDesc::AttributeType eType1, NiShaderAttributeDesc::AttributeType eType2, bool bInverse, bool bTranspose);
unsigned int __thiscall NiD3DSCM_Pixel::SetDefinedConstant(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
int __stdcall loc_93E8EC(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_93E91C(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_93E92C(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
int __stdcall loc_93E93F(int pkShaderProgram, int pkEntry, int pkGeometry, int pkSkin, int pkPartition, int pkBuffData, int pkState, int pkEffects, int kWorld, int kWorldBound, int uiPass); // weak
unsigned int __thiscall NiD3DSCM_Pixel::SetAttributeConstant(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass, bool bGlobal, NiExtraData *pkExtraData);
unsigned int __thiscall NiD3DSCM_Pixel::SetGlobalConstant(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, unsigned int uiPass);
unsigned int __thiscall NiD3DSCM_Pixel::SetObjectConstant(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiSkinPartition::Partition *pkPartition, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
unsigned int __thiscall NiD3DSCM_Pixel::SetupDefinedConstantValue(NiD3DSCM_Pixel *this, unsigned int uiOperatorNum, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound);
int __stdcall loc_93F13F(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, float fTan, int pkEffects, int kWorld, int kWorldBound); // weak
int __stdcall loc_93F152(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, float fTan, int pkEffects, int kWorld, int kWorldBound); // weak
int __stdcall loc_93F165(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, float fTan, int pkEffects, int kWorld, int kWorldBound); // weak
int __stdcall loc_93F184(int uiOperatorNum, int pkEntry, int pkGeometry, int pkSkin, float fTan, int pkEffects, int kWorld, int kWorldBound); // weak
unsigned int __thiscall NiD3DSCM_Vertex::SetupConstantConstantValue(NiD3DSCM_Vertex *this, unsigned int uiOperatorNum, NiD3DShaderConstantMapEntry *pkEntry, unsigned int uiPass);
unsigned int __thiscall NiD3DSCM_Pixel::SetOperatorConstant(NiD3DSCM_Pixel *this, NiD3DShaderProgram *pkShaderProgram, NiD3DShaderConstantMapEntry *pkEntry, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound, unsigned int uiPass);
void __thiscall NiD3DSCM_Pixel::NiD3DSCM_Pixel(NiD3DSCM_Pixel *this, NiDX9Renderer *pkRenderer);
// void __usercall _unwindfunclet__GetAlpha_PgWin__UAEMXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Remove_PgWinMgr__QAE_AV__NiPointer_VPgWin____PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Remove_PgWinMgr__QAE_AV__NiPointer_VPgWin____PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_BoxAnnounceWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_BoxAnnounceWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ComputeCRC_cAntiCheat__CAHXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CompareAgainstHashes_cAntiCheat__CAHV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__EnumChildProc_cAntiCheat__CGHPAUHWND____J_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__EnumWindowsProc_cAntiCheat__CGHPAUHWND____J_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__EnumWindowsProc_cAntiCheat__CGHPAUHWND____J_Z_1(int a1<ebp>);
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_1();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_2();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_3();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_4();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_5();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_6();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_7();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_8();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_9();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_10();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_11();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_12();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_13();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_14();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_15();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_16();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_17();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_18();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_19();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_20();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_21();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_22();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_23();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_24();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_25();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_26();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_27();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_28();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_29();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_30();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_31();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_32();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_33();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_34();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_35();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_36();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_37();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_38();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_39();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_40();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_41();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_42();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_43();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_44();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_45();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_46();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_47();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_48();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_49();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_50();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_51();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_52();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_53();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_54();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_55();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_56();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_57();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_58();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_59();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_60();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_61();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_62();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_63();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_64();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_65();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_66();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_67();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_68();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_69();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_70();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_71();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_72();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_73();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_74();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_75();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_76();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_77();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_78();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_79();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_80();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_81();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_82();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_83();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_84();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_85();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_86();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_87();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_88();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_89();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_90();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_91();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_92();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_93();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_94();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_95();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_96();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_97();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_98();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_99();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_100();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_101();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_102();
// void __usercall _unwindfunclet____G__NiTMap_KV__NiPointer_VPgWinBut______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateClassWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateClassWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateClassWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateClassWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateClassWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateClassWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateClassWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateClassWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateClassWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateClassWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateClassWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateClassWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateDescritWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateDescritWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateDescritWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateDescritWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateDescritWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateDescritWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateDescritWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateDescritWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateDescritWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateDescritWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateDescritWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateDescritWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateDescritWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__SetMark_CharCreateDescritWin__IAEXE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateDescritWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateDescritWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateDescritWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateDescritWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateDescritWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateDescritWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateDescritWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_KV__NiPointer_VPgWinSpr______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_move_PAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAV12_V__allocator_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V12__std__YAPAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__0_PAV10_00AAV__allocator_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__push_back___vector_VCPgTerrainLayer_PgNsTerrain__V__allocator_VCPgTerrainLayer_PgNsTerrain___std___std__QAEX__QAVCPgTerrainLayer_PgNsTerrain___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__push_back___vector_VCPgTerrainLayer_PgNsTerrain__V__allocator_VCPgTerrainLayer_PgNsTerrain___std___std__QAEX__QAVCPgTerrainLayer_PgNsTerrain___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_CharCreateFrameWork__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_CharCreateFrameWork__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeAvatarGender_CharCreateFrameWork__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateInfoWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateInfoWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateInfoWin__MAE_NPAUPROTO_AVATAR_SHAPE_INFO__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateInfoWin__MAE_NPAUPROTO_AVATAR_SHAPE_INFO__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateInfoWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharCreateInfoWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateInfoWin__SAPAV1_PAUPROTO_AVATAR_SHAPE_INFO__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateInfoWin__SAPAV1_PAUPROTO_AVATAR_SHAPE_INFO__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnCmdFaceL_CharCreateInfoWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCmdFaceR_CharCreateInfoWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCmdHairL_CharCreateInfoWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCmdHairR_CharCreateInfoWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCmdColorL_CharCreateInfoWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCmdColorR_CharCreateInfoWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_V__NiPointer_VShadow______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VShadow______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VShadow______UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CharCreateFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CharCreateFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CharCreateFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1CharCreateFrameWork__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_16(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_19(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharCreateFrameWork__IAE_NXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__InitAvatar_CharCreateFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateOkCancelWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateOkCancelWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateOkCancelWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateStatWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateStatWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharCreateViewCtrlWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateViewCtrlWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharCreateViewCtrlWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitAvatar_CharSelectFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CharSelectFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CharSelectFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CharSelectFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0CharSelectFrameWork__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSelectFrameWork__MAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_16(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_19(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CharSelectFrameWork__IAE_NXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1ChangeNameWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ChangeNameWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChangeNameWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_CharSelectFrameWork__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_CharSelectFrameWork__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChangeNameWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChangeNameWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChangeNameWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatColorSpinWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatColorSpinWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatColorSpinWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatColorSpinWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatColorSpinWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatColorSpinWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatColorSpinWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatColorSpinWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatColorSpinWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatColorSpinWin__UAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatColorSpinWin__UAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatColorSpinWin__UAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ClassChangeWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ClassChangeWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ClassChangeWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ClassChangeWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ClassChangeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ClassChangeWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ClassChangeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ClassChangeWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ClassChangeWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ClassChangeWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ClassChangeWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__SetChangeClassID_ClassChangeWin__QAEXE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ClassChangeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ClassChangeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_EV__NiPointer_VPgWinSpr______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetAt___NiTMapBase_V__DFALL_V__NiPointer_VPgWinBut______KV__NiPointer_VPgWinBut______QAEXKV__NiPointer_VPgWinBut_____Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Engine3D__SA_NPAVNiCamera___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Engine3D__SA_NPAVNiCamera___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0EventRankWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0EventRankWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventRankWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventRankWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventRankWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventRankWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventRankWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventRankWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventRankWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventRankWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventRankWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___0EventTimeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventTimeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventTimeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventTimeWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventTimeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Folder__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__EncryptFontFile_Font__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__EncryptFontFile_Font__SAXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Font__KAPAVPgFont__W4Type_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Font__SA_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Font__SA_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ForumWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ForumWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ForumWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ForumWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildEmblemIcon__MAE_NHHIPAVPgWin__PAVPgFrameWork__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetAlpha_GuildEmblemIcon__QAEXABM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildEmblemIcon__SAPAV1_HHIPAVPgWin__PAVPgFrameWork__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildEmblemIcon__SAPAV1_HHIPAVPgWin__PAVPgFrameWork__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildEmblemWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildEmblemWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildEmblemWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildEmblemWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTMap_PBDV__NiPointer_VNiSourceTexture______V__NiPointer_VNiSourceTexture______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTMap_PBDV__NiPointer_VNiTexturingProperty______V__NiPointer_VNiTexturingProperty______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_PBDV__NiPointer_VNiSourceTexture______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_PBDV__NiPointer_VNiTexturingProperty______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetTexture_IconMgr__SAPAVNiSourceTexture__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetTexturePng_IconMgr__SAPAVNiSourceTexture__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetAniTextureProperty_IconMgr__SA_AV__NiPointer_VNiTexturingProperty____PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetAniTextureProperty_IconMgr__SA_AV__NiPointer_VNiTexturingProperty____PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetAniTextureProperty_IconMgr__SA_AV__NiPointer_VNiTexturingProperty____PBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetAniTextureProperty_IconMgr__SA_AV__NiPointer_VNiTexturingProperty____PBD_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MixItemIcon__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MixItemIcon__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MixItemIcon__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemMixWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemMixWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemMixWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemMixWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemMixWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemMixWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemMixWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemMixWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemMixWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemMixWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemMixWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemMixWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0___Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2_V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__0A__std___std__QA(int a1<ebp>);
// void __usercall _unwindfunclet___0___Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2_V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__0A__std___std__Q_(int a1<ebp>);
// void __usercall _unwindfunclet___1KDTeamScoreWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1KDTeamScoreWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1KDTeamScoreWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1KDTeamScoreWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1KDTeamScoreWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1KDTeamScoreWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0KDTeamScoreWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0KDTeamScoreWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0KDTeamScoreWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0KDTeamScoreWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0KDTeamScoreWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0KDTeamScoreWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0KDTeamScoreWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KDTeamScoreWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KDTeamScoreWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KDTeamScoreWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_PAUKeyNode_KeyMap____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUKeyNode_KeyMap____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUKeyNode_KeyMap____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1KeyMap__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1KeyMap__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1KeyMap__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1KeyMap__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAUDamageInfo____PAUDamageInfo____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DamageInfoSet__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DamageInfoSet__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__cAddSysMsg_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cScriptMsg_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cLoadEffect_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cLoadKFM_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cLoadKFM_LuaScript__KAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cShowGroundObject_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cPersonalScriptMsg_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cPersonalScriptMsg_LuaScript__KAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cPersonalScriptMsg_LuaScript__KAHPAUlua_State___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__cOpenNPCDialog_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cGetWin_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cCreateText_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cCreateButton_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cGetCameraCtrl_LuaScript__KAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetResultItem_ItemMixDataTab__QAEPADPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__list_MV__allocator_M_std___std__QAE_ABV01__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1LuaScriptMgr__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1LuaScriptMgr__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0LuaScriptMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetLuaScript_LuaScriptMgr__QAEPAVLuaScript__W4eLuaScriptType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Update_LuaScriptMgr__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLuaScript_LuaScriptMgr__QAE_NW4eLuaScriptType_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLuaScript_LuaScriptMgr__QAE_NW4eLuaScriptType_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLuaScript_LuaScriptMgr__QAE_NW4eLuaScriptType_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLuaScript_LuaScriptMgr__QAE_NW4eLuaScriptType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLuaScript_LuaScriptMgr__QAE_NW4eLuaScriptType_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_W4eLuaScriptType_LuaScriptMgr__V__NiPointer_VLuaScript______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0LuaArgumentNewBie__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0LuaArgumentBIL_QUEST_1__QAE_PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0LuaArgumentBIL_QUEST_1__QAE_PAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0LuaArgumentBIL_QUEST_1__QAE_PAD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__update_LuaScriptNewBie__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__update_LuaScriptNewBie__UAEXM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__update_LuaScriptNewBie__UAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cTutorialEnable_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkMainMenu_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkStoneShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkShortCut_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cRemoveBlinkEffect_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cRemoveBlinkMainMenu_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cStopTextScreenEffect_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cStopTextScreenEffect_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cShowTutorialMark_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cOpenQuestConditionWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cOpenQuestConditionWin_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cCloseQuestConditionWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cCloseBoxAnnounceWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetItemShopTab_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsOpenCharWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsOpenItemShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsOpenInvenWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsBuyStone_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsUseStone_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsEndWar_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsOpenSkillShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsOpenSkillWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsRegistSkill_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsEndTextScreenEffect_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsOpenNPCDialog_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cLockStoneShopInv_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetLockItemSell_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetLockItemShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetLockStoneShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetLockSkillShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetLockItemShopTab_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetLockSkillShopTab_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetHideQuestGiveUp_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetOpenCharWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetOpenInvenWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetOpenSkillWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetBuyStone_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetUseStone_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetRegistSkill_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsOpenQuestWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cSetOpenQuestWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkQuestAccept_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cRemoveQuestBlinkEffect_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkEffect_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkEffect_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0LuaArgumentTutorial__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0LuaArgumentTutorialStep__QAE_H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__update_LuaScriptTutorial__UAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__update_LuaScriptTutorial__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateStep_LuaScriptTutorial__QAEXH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateStep_LuaScriptTutorial__QAEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkItemShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkItemShop_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkInven_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkInven_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkInven_LuaScriptTutorial__SAHPAUlua_State___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkSkillShop_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkSkillShop_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkSkill_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cBlinkSkill_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cStartTextScreenEffect_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cStartTextScreenEffect_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cStartTextScreenEffect_LuaScriptTutorial__SAHPAUlua_State___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__cStartTextScreenEffect_LuaScriptTutorial__SAHPAUlua_State___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__cOpenBoxAnnounceWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cOpenBoxAnnounceWin_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cOpenBoxAnnounceWin_LuaScriptTutorial__SAHPAUlua_State___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__cOpenTextBoxMsgWin_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsHaveItem_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsHaveItem_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cIsEquipItem_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsEquipItem_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cIsLearnSkill_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsLearnSkill_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cIsSelectSkill_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cIsSelectSkill_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cLockItemShopInv_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cLockItemShopInv_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__cLockSkillShopInv_LuaScriptTutorial__SAHPAUlua_State___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__cLockSkillShopInv_LuaScriptTutorial__SAHPAUlua_State___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemSlot__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemSlot__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemSlot__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MinimonAutoItemUseWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MinimonAutoItemUseWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MinimonAutoItemUseWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MinimonAutoItemUseWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MobKillCountWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MobKillCountWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SlotWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverUpgradeWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverUpgradeWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverUpgradeWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverUpgradeWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverUpgradeWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverUpgradeWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlotWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlotWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MoverUpgradeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MoverUpgradeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverUpgradeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverUpgradeWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverUpgradeWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverUpgradeWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverUpgradeWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PAXPAVCMsgEater____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CMsgMgr__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Terminate_CMsgMgr__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CMsgMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____GCMsgMgr__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyScoreWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyScoreWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyScoreWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyScoreWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyScoreWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyScoreWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ShowRaidInfo_PartyScoreWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyScoreWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyScoreWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyScoreWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyScoreWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyScoreWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyScoreWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyScoreWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Pet__UAE_NKGPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PetNameEditWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PetNameEditWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PetNameEditWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PuzzleTimeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PuzzleTimeWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PuzzleTimeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PuzzleTimeWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PuzzleTimeWin__SAPAV1_PAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PuzzleTimeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PuzzleTimeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PuzzleTimeWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetRecoverCountItemSlot_RandomOptCountRecoverWin__QAE_NIPAVItem___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RandomOptCountRecoverWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RandomOptCountRecoverWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RandomOptCountRecoverWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ChangeSlotWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1RandomOptionWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1RandomOptionWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1RandomOptionWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1RandomOptionWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1RandomOptionWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChangeSlotWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChangeSlotWin__SAPAV1_HHPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChangeSlotWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RandomOptionWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RandomOptionWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RandomOptionWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RandomOptionWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RandomOptionWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0RandomOptionWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RandomOptionWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0RandomOptionWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0RandomOptionWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RandomOptionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RandomOptionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FaceCutMaskWin__MAE_NH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FaceCutMaskWin__SAPAV1_H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FaceCutMaskWin__SAPAV1_H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0IDRankingWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0IDRankingWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0IDRankingWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0IDRankingWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0IDRankingWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IDRankingWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IDRankingWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDRankingWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__OnBoxAnnounce_ScriptMsgCtrl__KAXPBDM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnBoxAnnounce_ScriptMsgCtrl__KAXPBDM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnBoxAnnounce_ScriptMsgCtrl__KAXPBDM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddAbStateMsg_ScriptMsgCtrl__SAXPAUAbStateMsg___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetURL_SteamConfig__SAPBD_K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetURL_SteamConfig__SAPBD_K_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetURL_SteamConfig__SAPBD_K_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetURL_SteamConfig__SAPBD_K_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0Studio__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1Studio__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ClickAndStuff_Studio__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Studio__SAPAV1_PAVNiRenderer__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemSlotWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TermExtendWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TermExtendWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1TermExtendWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1TermExtendWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1TermExtendWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1TermExtendWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemSlotWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemSlotWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TermExtendWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TermExtendWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_TermExtendWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_TermExtendWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_TermExtendWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_TermExtendWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_TermExtendWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0TextFilterReplace__QAE_PAD0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TextFilterSet__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TextFilterSet__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTList_PAVTextFilter____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0TextFilterEmotion__1__FilterEmotion_TextFilterTable__SAXPAD_Z_QAE_00_Z_0(int a1<ebp>);
unsigned int __cdecl _unwindfunclet__FilterSlander_TextFilterTable__SAPADPAD_Z_0();
void __cdecl _unwindfunclet__FilterSlander_TextFilterTable__SAPADPAD_Z_3();
// void __usercall _unwindfunclet__FilterSlander_TextFilterTable__SAPADPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__FilterSlander_TextFilterTable__SAPADPAD_Z_2(int a1<ebp>);
unsigned int __cdecl _unwindfunclet__FilterEmotion_TextFilterTable__SAXPAD_Z_0();
void __cdecl _unwindfunclet__FilterEmotion_TextFilterTable__SAXPAD_Z_2();
// void __usercall _unwindfunclet__FilterEmotion_TextFilterTable__SAXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__IsBlockedID_TextFilterTable__SA_NPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DelFromBlockedID_TextFilterTable__SAXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SaveBlockedID_TextFilterTable__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddToBlockedID_TextFilterTable__SAXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadBlockedID_TextFilterTable__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeFullPath_NsPathMaker__QAEPBDPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Buynode____List_val_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__allocator_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__std__QAEPAU_Node____List_nod_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__allocator_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__2_PAU342_0ABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__2__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__H__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TextScreenWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TextScreenEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TextScreenEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1TextScreenEffect__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1TextScreenEffect__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1TextScreenEffect__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_TextScreenEffect__QAEXPAVNiRenderer___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_TextScreenEffect__QAEXPAVNiRenderer___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeScreen_TextScreenEffect__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeScreen_TextScreenEffect__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeScreen_TextScreenEffect__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeScreen_TextScreenEffect__IAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TextScreenWin__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TextScreenWin__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_H__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_H__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____GTextScreenWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DetachChildWin_PgWin__QAE_AV__NiPointer_VPgWin____PAV1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DetachChildWin_PgWin__QAE_AV__NiPointer_VPgWin____PAV1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Tutorial__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Tutorial__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Tutorial__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1Tutorial__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1Tutorial__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1Tutorial__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__RemoveBlinkQuestAccept_Tutorial__QAEXAAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Tutorial__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Tutorial__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0Tutorial__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0Tutorial__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Tutorial__QAEXPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Tutorial__QAEXPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_Tutorial__QAEXPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__BlinkFreeStat_Tutorial__QAE_NAAH0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_HV__NiPointer_VPgWin______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_W4eBlinkEffectType_Tutorial__PAVPgWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UIBlinkEffect__SAPAV1_PAVPgWin__AAVNiColorA___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UIBlinkEffect__SAPAV1_PAVPgWin__AAVNiColorA___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UIBlinkEffect__SAPAV1_HHIIPAVPgWin__AAVNiColorA___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UIBlinkEffect__SAPAV1_HHIIPAVPgWin__AAVNiColorA___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddOutLineFromFontType_UIUtil__QAEPAVPgFont__W4Type_Font__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0UIUtil__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1UIUtil__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateButton_UIUtil__QAEPAVPgWinBut__IPBDPAVNiSourceTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateButton_UIUtil__QAEPAVPgWinBut__IPBDPAVNiSourceTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateButton_UIUtil__QAEPAVPgWinBut__IPBDPAVNiSourceTexture__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateButton_UIUtil__QAEPAVPgWinBut__IPBDPAVNiSourceTexture__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateButton_UIUtil__QAEPAVPgWinBut__IPBDPAVNiSourceTexture__H_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateButton_UIUtil__QAEPAVPgWinBut__IPBDPAVNiSourceTexture__H_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCheckButton_UIUtil__QAEPAVColumnBut__IPBDPAVNiSourceTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCheckButton_UIUtil__QAEPAVColumnBut__IPBDPAVNiSourceTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCheckButton_UIUtil__QAEPAVColumnBut__IPBDPAVNiSourceTexture__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCheckButton_UIUtil__QAEPAVColumnBut__IPBDPAVNiSourceTexture__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCheckButton_UIUtil__QAEPAVColumnBut__IPBDPAVNiSourceTexture__H_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCheckButton_UIUtil__QAEPAVColumnBut__IPBDPAVNiSourceTexture__H_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet_____HDU__char_traits_D_std__V__allocator_D_1__std__YA_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__0_ABV10_0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AutoSizingTextWin__SAPAV1_HHPAVPgFont__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AutoSizingTextWin__SAPAV1_HHPAVPgFont__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ClientWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ClientWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1EditWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1EditWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1EditWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1EditWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1EditWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EditWin__MAE_NHHIIPAVPgWin__W4Type_1_II_NW43Font__2_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EditWin__MAE_NHHIIPAVPgWin__W4Type_1_II_NW43Font__2_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EditWin__MAE_NHHIIPAVPgWin__W4Type_1_II_NW43Font__2_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1EditWinEx__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1EditWinEx__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EditWin__SAPAV1_HHIIPAVPgWin__W4Type_1_II_NW43Font__2_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EditWin__SAPAV1_HHIIPAVPgWin__W4Type_1_II_NW43Font__2_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EditWinEx__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__2_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EditWinEx__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__2_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FlexMsgBox__MAE_NPAVNiSourceTexture__IIPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FlexMsgBox__SAPAV1_PAVNiSourceTexture__IIPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FlexMsgBox__SAPAV1_PAVNiSourceTexture__IIPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateClone_NiAlphaRefController__UAEPAVNiObject__AAVNiCloningProcess___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_FrameBoxWin__IAE_NPAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_FrameBoxWin__IAE_NPAVNiSourceTexture__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_FrameBoxWin__IAE_NPAVNiSourceTexture__II_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_FrameBoxWin__IAE_NPAVNiSourceTexture__II_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FrameBoxWin__SAPAV1_PAVNiSourceTexture__IIHHPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FrameBoxWin__SAPAV1_PAVNiSourceTexture__IIHHPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ImeCandListWin__SAPAV1_PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ImeCandListWin__SAPAV1_PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ImeEditWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ImeEditWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ImeEditWinEx__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ImeEditWinEx__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ImeEditWin__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ImeEditWin__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ImeEditWin__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ImeEditWinEx__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ImeEditWinEx__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ImeEditWinEx__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ImeEditWin__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ImeEditWin__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ImeEditWinEx__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ImeEditWinEx__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__22_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_InputBox__UAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_InputBox__UAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InputBox__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InputBox__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VListItem______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VListItem______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VListItem______UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVPgWinBut____PAVPgWinBut____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VPgWinText______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VPgWinText______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VPgWinText______UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__RemoveTail___NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VPgWin______QAE_AV__NiPointer_VPgWin____XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1ListWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ListWin__MAE_NHHIIPAVPgFont__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddString_ListWin__UAEHPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ListWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ListWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ListWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ListWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ListWin__SAPAV1_HHIIPAVPgFont__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ListWin__SAPAV1_HHIIPAVPgFont__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__RemovePos___NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VPgWin______QAE_AV__NiPointer_VPgWin____AAPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RemovePos___NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VPgWin______QAE_AV__NiPointer_VPgWin____AAPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MaskedWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MaskedWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetBaseTextureMatrix_MaskedWin__QAEXMMMM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetBaseTexture_MaskedWin__QAEXPAVNiTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MaskedWin__SAPAV1_HHPAVNiTriShape__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MaskedWin__SAPAV1_HHPAVNiTriShape__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MaskShaderNoAlphaBlend_MaskedWin__SAPAV1_HHPAVNiTriShape__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MaskShaderNoAlphaBlend_MaskedWin__SAPAV1_HHPAVNiTriShape__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiD3DPass______QAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiD3DPass______QAEXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiD3DPass______QAEXI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__GetStage_NiD3DPass__QBEPAVNiD3DTextureStage__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MaskShader__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MaskShader__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateStagesAndPasses_MaskShader__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateStagesAndPasses_MaskShader__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateStagesAndPasses_MaskShader__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MaskShader__QAE__N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MaskShader__QAE__N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePipeline_MaskShader__UAEIPAVNiGeometry__PBVNiSkinInstance__PAVNiGeometryBufferData__PBVNiPropertyState__PBVNiDynamicEffectState__ABVNiTransform__ABVNiBound___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePipeline_MaskShader__UAEIPAVNiGeometry__PBVNiSkinInstance__PAVNiGeometryBufferData__PBVNiPropertyState__PBVNiDynamicEffectState__ABVNiTransform__ABVNiBound___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetShader_MaskShader__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetShader_MaskShader__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetShader_MaskShader__SAPAV1_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetShader_NoAlphaBlend_MaskShader__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetShader_NoAlphaBlend_MaskShader__SAPAV1_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetShader_NoAlphaBlend_MaskShader__SAPAV1_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet____GMaskShader_NoAlphaBlend__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GMaskShader_NoAlphaBlend__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MsgBox__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MsgBox__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MsgBox__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MsgBox__KAPAV1_W4ButType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MsgBox__KAPAV1_W4ButType_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MsgBox__MAE_NW4ButType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinProxy__SAPAV1_PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinProxy__SAPAV1_PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinProxy__SAPAV1_HHIIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinProxy__SAPAV1_HHIIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideBar__IAE_NPAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlideBar__SAPAV1_PAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlideBar__SAPAV1_PAVNiNode__PAD11PAVPgSprData__IPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ColumnBut__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ColumnBut__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ColumnBut__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ColumnBut__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ColumnBut__SAPAV1_HHPAVPgSprData__PAVPgWin__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ColumnBut__SAPAV1_HHPAVPgSprData__PAVPgWin__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlideListWin__IAE_NHHPAVPgSprData__PAVPgWin__AAVSLWCreateInfo__I_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SlideListWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SlideListWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlideListWin__SAPAV1_HHPAVPgSprData__PAVPgWin__AAVSLWCreateInfo__I_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlideListWin__SAPAV1_HHPAVPgSprData__PAVPgWin__AAVSLWCreateInfo__I_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlideListWin__SAPAV1_HHPAVPgSprData__PAVPgWin__PAVPgFont__AAVSLWCreateInfo__I_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlideListWin__SAPAV1_HHPAVPgSprData__PAVPgWin__PAVPgFont__AAVSLWCreateInfo__I_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeTempData_SLWCreateInfo__QAE_NPAVNiSourceTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeTempData_SLWCreateInfo__QAE_NPAVNiSourceTexture___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__MakeTempData_SLWCreateInfo__QAE_NPAVNiSourceTexture___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ListItem_SlideListWin__QAE_PBDH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddText_ListItem_SlideListWin__QAEXPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddText_ListItem_SlideListWin__QAEXPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddText_SlideListWin__QAEHPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddText_SlideListWin__QAEHPBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddText_SlideListWin__QAEHPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddHeadText_SlideListWin__QAEHPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddHeadText_SlideListWin__QAEHPBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddHeadText_SlideListWin__QAEHPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddItemInfo_SLWCreateInfo__QAEPAUItem_1_H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAV__shared_ptr_VListItem_SlideListWin___boost__HV12_VListSorter_SlideListWin___std__YAXPAV__shared_ptr_VListItem_SlideListWin___boost__0VListSorter_SlideListWin__PAH0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAV__shared_ptr_VListItem_SlideListWin___boost__V12_VListSorter_SlideListWin___std__YAXPAV__shared_ptr_VListItem_SlideListWin___boost__0VListSorter_SlideListWin__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_def_fill_n_PAUColumnData_ListItem_SlideListWin__IU123_V__allocator_UColumnData_ListItem_SlideListWin___std__U123__std__YAXPAUColumnData_ListItem_SlideListWin__IPBU123_AAV__allocator_UColumnData_ListItem_SlideListWin___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_def_fill_n_PAUColumnData_ListItem_SlideListWin__IU123_V__allocator_UColumnData_ListItem_SlideListWin___std__U123__std__YAXPAUColumnData_ListItem_SlideListWin__IPBU123_AAV__allocator_UColumnData_ListItem_SlideListWin___0_0U_Nonscalar_ptr_iterator_tag_0__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_move_PAUColumnData_ListItem_SlideListWin__PAU123_V__allocator_UColumnData_ListItem_SlideListWin___std__U123__std__YAPAUColumnData_ListItem_SlideListWin__PAU123_00AAV__allocator_UColumnData_ListItem_SlideListWin___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1Item_SLWCreateInfo__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Item_SLWCreateInfo__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Item_SLWCreateInfo__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1Item_SLWCreateInfo__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0Item_SLWCreateInfo__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Item_SLWCreateInfo__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SpeechBubbleWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SpeechBubbleWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SpeechBubbleWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WebMsgWin__MAE_NPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WebMsgWin__KAPAV1_PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WebMsgWin__KAPAV1_PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__WebCtrlProc_CWebCtrl__AAEJIIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitGraphicCursor_Cursor__KA_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Update_Cursor__SAXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Update_Cursor__SAXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Update_Cursor__SAXM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Update_Cursor__SAXM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Update_Cursor__SAXM_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__DisplaySplash_MainApp__IAEXPBD0H_Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__CheckSpawnApps_MainApp__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetupExceptionHandler__YAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetupExceptionHandler__YAXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MainApp__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MainApp__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MainApp__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MainApp__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_MainApp__UAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_MainApp__UAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_MainApp__UAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_MainApp__UAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_MainApp__UAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NiApplication__SAPAV1_XZ_0(int a1<ebp>);
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_0_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_1_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_2_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_3_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_4_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_5_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_6_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_7_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_8_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_9_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_10_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_11_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_12_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_13_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_14_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_15_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_16_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_17_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_18_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_19_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_20_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_21_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_22_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_23_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_24_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_25_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_26_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_27_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_28_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_29_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_30_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_31_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_32_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_33_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_34_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_35_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_36_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_37_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_38_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_39_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_40_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_41_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_42_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_43_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_44_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_45_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_46_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_47_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_48_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_49_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_50_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_51_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_52_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_53_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_54_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_55_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_56_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_57_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_58_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_59_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_60_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_61_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_62_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_63_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_64_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_65_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_66_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_67_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_68_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_69_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_70_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_71_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_72_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_73_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_74_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_75_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_76_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_77_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_78_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_79_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_80_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_81_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_82_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_83_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_84_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_85_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_86_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_87_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_88_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_89_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_90_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_91_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_92_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_93_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_94_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_95_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_96_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_97_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_98_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_99_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_100_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_101_0();
void __cdecl _unwindfunclet_____EBlockedData__YAXXZ_102_0();
// void __usercall _unwindfunclet___1MainApp__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MainApp__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MainApp__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MainApp__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet____GFontSetTab__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateObject_NPTR_ISShader_v2__SAPAVNiObject__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___std__QAE_ABV01__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____make_pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__AAV__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__YA_AU__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__0___QAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__0_AAV__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____0V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___1____pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__QAE___QAU__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____0V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___1____pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__QAE___QAU__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std______List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std__QAEPAU_Node___(int a1<ebp>);
// void __usercall _unwindfunclet__Load_ItemViewDummyTab__SA_NPAD_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Load_ItemViewDummyTab__SA_NPAD_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Load_ItemViewDummyTab__SA_NPAD_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Load_ItemViewDummyTab__SA_NPAD_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterAllFrameWork_PgFrameMgr__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterAllFrameWork_PgFrameMgr__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterAllFrameWork_PgFrameMgr__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterAllFrameWork_PgFrameMgr__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterAllFrameWork_PgFrameMgr__QAEXXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterAllFrameWork_PgFrameMgr__QAEXXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterAllFrameWork_PgFrameMgr__QAEXXZ_8(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCWorldConfig__VCBaseObject____1VCRTTI__A__YAXXZ_0();
// void __usercall _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCWorldConfig__VCBaseObject____1VCRTTI__A__YAXXZ_3(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCBaseObject__VCNullClass____1VCRTTI__A__YAXXZ_0();
// void __usercall _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCBaseObject__VCNullClass____1VCRTTI__A__YAXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitKeyMap_AccountFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitWindow_AccountFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_AccountFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_AccountFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_AccountFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_12(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_AccountFrameWork__IAE_NXZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0_Locinfo_std__QAE_PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0_Locinfo_std__QAE_PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0_Locinfo_std__QAE_PBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0_Locinfo_std__QAE_PBD_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0_Locinfo_std__QAE_PBD_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___1_Locinfo_std__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1_Locinfo_std__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1_Locinfo_std__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1_Locinfo_std__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1_Locinfo_std__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___Getcat___ctype_D_std__SAIPAPBVfacet_locale_2_PBV42__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Getcat___codecvt_DDH_std__SAIPAPBVfacet_locale_2_PBV42__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Ipfx___basic_istream_DU__char_traits_D_std___std__QAE_N_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____use_facet_V__codecvt_DDH_std___std__YAABV__codecvt_DDH_0_ABVlocale_0__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__read___basic_istream_DU__char_traits_D_std___std__QAEAAV12_PAD_J_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__read___basic_istream_DU__char_traits_D_std___std__QAEAAV12_PAD_J_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__open___basic_filebuf_DU__char_traits_D_std___std__QAEPAV12_PBDHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__basic_filebuf_DU__char_traits_D_std___std__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_ifstream_DU__char_traits_D_std___std__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_ifstream_DU__char_traits_D_std___std__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__basic_ifstream_DU__char_traits_D_std___std__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__basic_ifstream_DU__char_traits_D_std___std__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__getVersionKey_ClientVersionKeyInfo__SA_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__getVersionKey_ClientVersionKeyInfo__SA_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_AccountFrameWork__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_AccountFrameWork__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Update_AccountFrameWork__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountFrameWork__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerList_PAVPgWin____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPgWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPgWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1LoginWorldNetFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadUrl_SignUpWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadURL_SpawnAppsWin__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SpawnAppsWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SignUpWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SignUpWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SpawnAppsWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SpawnAppsWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AccountWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaAccountWin_AccountWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AccountWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AccountWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0WorldSelectOptionSetWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldSelectOptionWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldSelectWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldSelectExitWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldSelectOptionSetWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldSelectOptionSetWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectExitWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectExitWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectOptionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectOptionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectOptionSetWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectOptionSetWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectOptionSetWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0WorldSelectWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0WorldSelectWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldSelectWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnLoadShortCutDataOption_CharSelectFrameWork__IAE_NPAUPROTO_NC_CHAR_OPTION_GET_SHORTCUTDATA_ACK___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_CHAR_TUTORIAL_DOING_CMD_CharSelectFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_CHAR_TUTORIAL_DOING_CMD_CharSelectFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ZoneLoginNetFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcMapLoginReq_ZoneLoginNetFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharSelectInfoWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharSelectInfoWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharSelectMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharSelectMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventFriendCountWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventFriendCountWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventFriendCountWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std______List_val_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__allocator_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__std__QAEPAU_Node____List_nod_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__allocator_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__1_PAU231_0__QAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddText_ChatCommandList__QAEXPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MarkAsRecentlyUsed_SmartWhisper_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DecodingCmdChat_GameFrameWork__QAE_NPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitInput_GameFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitNewCharCreate_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitCharacter_GameFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitSystem_GameFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Terminate_GameFrameWork__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Terminate_GameFrameWork__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Terminate_GameFrameWork__UAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_GameFrameWork__UAE_NPAUFrame_PgMsg___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_GameFrameWork__UAE_NPAUFrame_PgMsg___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_GameFrameWork__UAE_NPAUFrame_PgMsg___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Init_GameFrameWork__UAE_NPAUFrame_PgMsg___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Init_GameFrameWork__UAE_NPAUFrame_PgMsg___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Init_GameFrameWork__UAE_NPAUFrame_PgMsg___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Init_GameFrameWork__UAE_NPAUFrame_PgMsg___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__FindGatherInfo_GatheringTask__AAEPAUGatherInfo__W4GatherType__AAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindGatherInfo_GatheringTask__AAEPAUGatherInfo__W4GatherType__AAH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__FindGatherInfo_GatheringTask__AAEPAUGatherInfo__W4GatherType__AAH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTList_V__NiPointer_VITask______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ITask__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ITask__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ITask__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ITask__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_Collection_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_Trade_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_InviteGuild_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_InviteParty_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_InviteFriend_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_Party_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_Raid_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPopupMenu_InviteHolyPromise_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateCursorState_GameFrameWork__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnOpenMHPopupMenuWin_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerList_I__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OpenCharInfoWin_GameFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__JoinDiceGameReq_GameFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnOpenDiceExpectWin_GameFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OpenInventoryWin_GameFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OpenQuestWin_GameFrameWork__QAEXHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OpenMysteryVaultWin_GameFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OpenMHInfoWin_GameFrameWork__QAEXW4TabEnum_DirectUserMsgBody_MHInfoTabChanged___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnGameStart_GameFrameWork__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnGameStart_GameFrameWork__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetPlayGuideSkipList_GameFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetPlayGuideSkipList_GameFrameWork__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetPlayGuideSkipList_GameFrameWork__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__OpenPetDialog_GameFrameWork__IAE_NGTName4___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OpenPetDialog_GameFrameWork__IAE_NGTName4___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OpenPetDialog_GameFrameWork__IAE_NGTName4___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__OpenPetDialog_GameFrameWork__IAE_NGTName4___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__OpenPetDialog_GameFrameWork__IAE_NGTName4___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__OpenPetDialog_GameFrameWork__IAE_NGTName4___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__OpenPetDialog_GameFrameWork__IAE_NGTName4___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__SendMHBuildingOrFixReq_GameFrameWork__IAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SendMHBuildingOrFixReq_GameFrameWork__IAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OpenCollectPopupWin_GameFrameWork__QAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OpenCollectPopupWin_GameFrameWork__QAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__DirectMessage_GameFrameWork__MAEXHPAXPAVIDirectMessenger___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__DirectMessage_GameFrameWork__MAEXHPAXPAVIDirectMessenger___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_I__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_I__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVPgWin____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVScriptBtn____PAVScriptBtn____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BRIEFINFO_DROPEDITEM_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_EXPGAIN_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcItemSellReq_GameFrameWork__QAEXEK_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MAP_LINKSAME_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MAP_LINKSAME_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_SOMEONELEVELUP_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_PARTY_JOINPROPOSE_REQ_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SOULSTONE_HP_BUY_ACK_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MINIHOUSE_EXIT_ACK_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MINIHOUSE_EXIT_ACK_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MOVER_SOMEONE_RIDE_ON_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MOVER_SOMEONE_RIDE_OFF_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_MAP_OBJECT_CONTROL_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_MAP_OBJECT_CONTROL_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_END_CINEMATIC_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_END_CINEMATIC_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_CHAR_TUTORIAL_STEP_REQ_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_CHAR_TUTORIAL_STEP_REQ_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_CHAR_TUTORIAL_STEP_REQ_GameFrameWork__QAEHHPAX_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_LEVELUP_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_TRADE_PROPOSE_ASK_REQ_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_TRADE_PROPOSE_ASK_REQ_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SOULSTONE_HP_USESUC_ACK_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_HOLY_PROMISE_SET_UP_CONFIRM_REQ_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MOVER_RIDE_ON_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MOVER_RIDE_OFF_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MAP_LINKOTHER_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MAP_LINKOTHER_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_RAID_INVITATION_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcKqVoteStartReq_GameFrameWork__QAEXTName5__IV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_SKILLBASH_HIT_DAMAGE_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_SKILLBASH_HIT_DAMAGE_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_SKILLBASH_HIT_DAMAGE_CMD_GameFrameWork__QAEHHPAX_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__ItemNameIsCorrect_GameFrameWork__QAE_NV__list_USHINE_ITEM_STRUCT__V__allocator_USHINE_ITEM_STRUCT___std___std__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_BASH_HITTED_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_BAT_SKILLBASH_HITTED_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_CHAR_CLIENT_NEWBIE_GUIDE_VIEW_LIST_CMD_GameFrameWork__IAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_SHOW_CINEMATIC_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_SHOW_CINEMATIC_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_SHOW_CINEMATIC_GameFrameWork__QAEHHPAX_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_PLAY_SOUND_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_SYSTEM_MESSAGE_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_QUEST_GIVE_UP_ACK_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_QUEST_SCRIPT_CMD_REQ_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcItemEquipBelongedCancelUseReq_GameFrameWork__QAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcItemEquipBelongedCancelUseReq_GameFrameWork__QAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_NPCCHAT_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ANNOUNCE_W2C_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ANNOUNCE_W2C_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ANNOUNCE_W2C_CMD_GameFrameWork__QAEHHPAX_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ANNOUNCE_W2C_CMD_GameFrameWork__QAEHHPAX_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ANNOUNCE_W2C_CMD_GameFrameWork__QAEHHPAX_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MINIHOUSE_MODIFY_PASSWORD_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MINIHOUSE_MODIFY_PASSWORD_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_COLLECT_CARDREGIST_ACK_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_SCRIPTMESSAGE_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_SCRIPTMESSAGE_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_SCRIPTMESSAGE_CMD_GameFrameWork__QAEHHPAX_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_SCENARIO_SCRIPTMESSAGE_CMD_GameFrameWork__QAEHHPAX_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_SCRIPT_MSG_CMD_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_SCRIPT_MSG_CMD_GameFrameWork__QAEHHPAX_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_SCRIPT_MSG_CMD_GameFrameWork__QAEHHPAX_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_ACT_SCRIPT_MSG_CMD_GameFrameWork__QAEHHPAX_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__NcActChatReq_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcActChatReq_GameFrameWork__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NcActShoutCmd_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcActShoutCmd_GameFrameWork__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NcActWhisperReq_GameFrameWork__QAEXTName5__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcActWhisperReq_GameFrameWork__QAEXTName5__PAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NcActPartyChatReq_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcActPartyChatReq_GameFrameWork__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NcGuildChatReq_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcGuildChatReq_GameFrameWork__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NcGuildAcademyChatReq_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcGuildAcademyChatReq_GameFrameWork__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__On_NC_MINIHOUSE_BUILDING_ACK_GameFrameWork__QAEHHPAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcRaidChatReq_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcRaidChatReq_GameFrameWork__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NcRaidWarningReq_GameFrameWork__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NcRaidWarningReq_GameFrameWork__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__FindProperty_CRTTI__QAEPAVCAbstractProperty__PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__list_USHINE_ITEM_STRUCT__V__allocator_USHINE_ITEM_STRUCT___std___std__QAE_ABV01__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____GEffectObjectMgr__UAEPAXI_Z_2(int a1<ebp>);
int __cdecl _unwindfunclet__GetMgr_EffectObjectMgr__SAPAV1_XZ_0();
int __cdecl _unwindfunclet__GetInstance_AreaInfoMgr__SAPAV1_XZ_0();
// void __usercall _unwindfunclet_____FkEffectObjectMgr__1__GetMgr_EffectObjectMgr__SAPAV1_XZ_YAXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMainCharOnRevActMHCharEmotion_GameFrameWork__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVIOptionBase____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_GameFrameWork__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_GameFrameWork__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CheckWebFocus_GameFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CheckWebFocus_GameFrameWork__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CheckWebFocus_GameFrameWork__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_GameFrameWork__QAEXH_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterCard_GameFrameWork__QAEXIIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RegisterCard_GameFrameWork__QAEXIIII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1GameFrameWork__MAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet__GetDropItemByArea_GameFrameWork__QAEXW4AutoPickType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetDropItemByArea_GameFrameWork__QAEXW4AutoPickType_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetDropItemByArea_GameFrameWork__QAEXW4AutoPickType_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0GameFrameWork__IAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet__Update_GameFrameWork__UAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Update_GameFrameWork__UAEXM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Update_GameFrameWork__UAEXM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Update_GameFrameWork__UAEXM_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet_____F_m_kOptionManager_GameFrameWork__2VOptionManager__A__YAXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionIconWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionIconWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIconWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionIconWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionIconWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PremiumActionIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PremiumActionIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PremiumActionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PremiumActionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PremiumActionWin__UAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionInvTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionInvTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ActionWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgFadeTextGeometry__QAE_PAVPgFont___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgFadeTextGeometry__QAE_PAVPgFont___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AnnounceWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AnnounceWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AnnounceWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AnnounceWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AnnounceWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GPgFadeTextGeometry__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateFontA_AttendCheckWin__IAEPAVPgFont__AAUFontDefine_Font___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckBut__UAEXHHPAVPgWin__PAVNiSourceTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckBut__UAEXHHIIPAVPgWin__PAVNiSourceTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckBut__UAEXHHIIPAVPgWin__PAVNiSourceTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckBut__UAEXHHIIPAVPgWin__PAVNiSourceTexture___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendCheckWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0AttendCheckWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AttendCheckWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0AttendCheckWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1AttendCheckWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AttendCheckWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AttendCheckWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1AttendCheckWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1AttendCheckWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AttendCheckWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AttendCheckWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendIconWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendIconWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendIconWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1AttendIconWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AttendIconWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AttendIconWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AttendIconWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendRewardWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendRewardWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AttendRewardWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AttendRewardWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AttendRewardWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_BasicInfoTipWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0BasicInfoTipWin__QAE_M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_BasicInfoTipWin__SAPAV1_PAVPgFrameWork__M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_BasicInfoTipWin__SAPAV1_PAVPgFrameWork__M_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatusBuffWin__MAE_NPAVPgFrameWork__W4EBUFF_TYPE_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatusBuffWin__MAE_NPAVPgFrameWork__W4EBUFF_TYPE_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatusBuffWin__MAE_NPAVPgFrameWork__W4EBUFF_TYPE_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatusBuffWin__MAE_NPAVPgFrameWork__W4EBUFF_TYPE_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatusBuffWin__MAE_NPAVPgFrameWork__W4EBUFF_TYPE_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatusBuffWin__MAE_NPAVPgFrameWork__W4EBUFF_TYPE_1__Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatusBuffWin__MAE_NPAVPgFrameWork__W4EBUFF_TYPE_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshChargedBuffIcon_StatusBuffWin__QAE_NPAUChargedIconItem__PAUPROTO_CHARGEDBUFF_INFO__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RemoveMsgItemToMap_StatusBuffWin__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddMsgItemToMap_StatusBuffWin__QAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddMsgItemToMap_StatusBuffWin__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddMsgItemToMap_StatusBuffWin__QAEXPAD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshChargedBuffMsg_StatusBuffWin__QAEXPAUChargedMessageItem__PAUPROTO_CHARGEDBUFF_INFO___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1StatusBuffWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusBuffWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatusBuffWin__SAPAV1_PAVPgFrameWork__W4EBUFF_TYPE_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatusBuffWin__SAPAV1_PAVPgFrameWork__W4EBUFF_TYPE_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_AAU__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___N_std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___NU__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___N_std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___NU__less_V__basic_st(int a1<ebp>);
// void __usercall _unwindfunclet___1CalculatorWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CalculatorWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CalculatorWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CalculatorWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CastingProgressWin__MAE_NPAVPgFrameWork___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CastingProgressWin__SAPAV1_PAVPgFrameWork___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CastingProgressWin__SAPAV1_PAVPgFrameWork___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChargedItemListWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChargedItemListWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChargedItemListWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChargedItemListWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharInfoWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharInfoWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharInfoWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharInfoWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharInfoWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharInfoWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CharInfoWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharInfoWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharInfoWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharInfoWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharInfoWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharInfoWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharInfoWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ConvertCommaNums__YAXHAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_CharInfoWin__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_CharInfoWin__UAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharTitleWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharTitleWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharTitleWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CharTitleWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__OnListClick_CharTitleWin__IAEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetCurTitleInfo_CharTitleWin__QAEXPAUCTWIN_LIST_INFO_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharTitleWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharTitleWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharTitleWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharTitleWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharTitleWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CharTitleWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__GetByTypeAndLevel_CharacterTitleStateViewTab__SA_AV__vector_PAUCharacterTitleStateView__V__allocator_PAUCharacterTitleStateView___std___std__IE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatBlockListWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatBlockListWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatBlockListWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatBlockListWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatBlockListWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnSelectDeleteBtn_ChatBlockListWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnSelectDeleteBtn_ChatBlockListWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnSelectDeleteBtn_ChatBlockListWin__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatBlockListWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatBlockListWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatBlockListWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatBlockListWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatBlockListWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatBlockListWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatBlockListWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet____GChangeNameWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatEditWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatEditWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatEditWin__MAE_NPAVNiSourceTexture__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatEditWin__SAPAV1_PAVNiSourceTexture__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatEditWin__SAPAV1_PAVNiSourceTexture__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ClockShadowWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ClockShadowWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_ClockShadowWin__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_ClockShadowWin__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_ClockShadowWin__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_ClockShadowWin__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_ClockShadowWin__IAEXXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_ClockShadowWin__IAEXXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_ClockShadowWin__IAEXXZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ClockShadowWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ClockShadowWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectCardWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectCardWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_27(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_28(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_29(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardWin__MAE_NPAVPgFrameWork___Z_31(int a1<ebp>);
// void __usercall _unwindfunclet__SetSerial_CollectCardWin__IAEXIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetSerial_CollectCardWin__IAEXIII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSerial_CollectCardWin__IAEXIII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetSerial_CollectCardWin__IAEXIII_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__SetDesc_CollectCardWin__IAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectRwItemWin__EAE_NPAVNiNode__PBD11PAVPgWin__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectRwItemWin__SAPAV1_PAVNiNode__PBD11PAVPgWin__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectRwChoiceInv__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectRwChoiceWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectPopupWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectPopupWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CardSlotWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CardSlotWin__SAPAV1_HHPAVPgWin__III_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CardSlotWin__SAPAV1_HHPAVPgWin__III_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectPageWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectPageWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectPageWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectPageWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectPageWin__SAPAV1_PAVNiNode__HHIIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectPageWin__SAPAV1_PAVNiNode__HHIIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectRwChoiceWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectRwChoiceWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CardSlotWin__EAE_NHHPAVPgWin__III_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CardSlotWin__EAE_NHHPAVPgWin__III_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CardSlotWin__EAE_NHHPAVPgWin__III_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CardSlotWin__EAE_NHHPAVPgWin__III_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CardSlotWin__EAE_NHHPAVPgWin__III_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_CardSlotWin__QAEXIIIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_CardSlotWin__QAEXIIIJ_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_CardSlotWin__QAEXIIIJ_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_CardSlotWin__QAEXIIIJ_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectPageWin__MAE_NPAVNiNode__HHIIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectPageWin__MAE_NPAVNiNode__HHIIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectPageWin__MAE_NPAVNiNode__HHIIPAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectPageWin__MAE_NPAVNiNode__HHIIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectPageWin__MAE_NPAVNiNode__HHIIPAVPgWin___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardChoiceWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardChoiceWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardChoiceWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardChoiceWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectCardChoiceWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardChoiceWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardChoiceWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardChoiceWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectCardChoiceWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectCardChoiceWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectMainWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectMainWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectMainWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectMainWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectMainWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectMainWin__SAPAV1_PAVNiNode__PAVPgWin___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectMainWin__SAPAV1_PAVNiNode__PAVPgWin___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardListWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardListWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardListWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectCardListWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectCardListWin__SAPAV1_PAVNiNode__PAVPgWin___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectCardListWin__SAPAV1_PAVNiNode__PAVPgWin___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectMainWin__MAE_NPAVNiNode__PAVPgWin___N_Z_28(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateCheckBox_CollectMainWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnSelectCard_CollectCardListWin__IAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnRegistBookmark_CollectCardListWin__IAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetReward_CollectCardListWin__QAEXIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CollectWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectWin__SAPAV1_PAVPgFrameWork___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CollectWin__SAPAV1_PAVPgFrameWork___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateGrade_CollectWin__IAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CollectWin__MAE_NPAVPgFrameWork___N_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet____sort_P6A_NABUsNewestInfo_CollectWin__0_Z___list_UsNewestInfo_CollectWin__V__allocator_UsNewestInfo_CollectWin___std___std__QAEXP6A_NABUsNewestInfo_CollectWin__0_Z_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____sort_P6A_NABUsNewestInfo_CollectWin__0_Z___list_UsNewestInfo_CollectWin__V__allocator_UsNewestInfo_CollectWin___std___std__QAEXP6A_NABUsNewestInfo_CollectWin__0_Z_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_DesktopWin__SAPAV1_KKPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_DesktopWin__SAPAV1_KKPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1DivideWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DivideWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0DivideWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_DivideWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_DivideWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EnchantGemToolTipWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EnchantGemToolTipWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EnchantGemWin__MAE_NPAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EnchantGemWin__MAE_NPAVPgFrameWork__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EnchantGemDeleteWin__MAE_NPAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EnchantGemDeleteWin__MAE_NPAVPgFrameWork__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EnchantGemToolTipWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EnchantGemToolTipWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EnchantGemWin__SAPAV1_PAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EnchantGemWin__SAPAV1_PAVPgFrameWork__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EnchantGemDeleteWin__SAPAV1_PAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EnchantGemDeleteWin__SAPAV1_PAVPgFrameWork__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EventFriendWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventFriendWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EventFriendWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1FeedMoverWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1FeedMoverWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__EnableMoverFaceAni_FeedMoverWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0FeedMoverWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0FeedMoverWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FeedMoverWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FeedMoverWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FeedMoverWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMover_FeedMoverWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMover_FeedMoverWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMover_FeedMoverWin__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMover_FeedMoverWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet____GFeedMoverWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GFeedMoverWin__MAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FreeStatView__SAPAV1_PAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FreeStatView__SAPAV1_PAVNiSourceTexture__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0FriendCallWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1FriendCallWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendCallWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendCallWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendCallWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendCallWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendCallWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendCallWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendCallWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendCallWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendCallWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendCallWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendAddWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendAddWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendPointTipMsg__MAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendAddWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendAddWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1FriendWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1FriendWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1FriendWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1FriendWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendPointTipMsg__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendPointTipMsg__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0FriendWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0FriendWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0FriendWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0FriendWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0FriendWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FriendWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FriendWin__MAE_NPAVPgFrameWork___Z_24(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestStateImage__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestStateImage__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestStateImage__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVNpcMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAUMobCoordinate____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerList_M__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNpcMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNpcMarkWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVMobAreaMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVRaidMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVPartyMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVQuestHelperMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVPgWinSpr____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVGTIScanMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUMobCoordinate____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUMobCoordinate____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_M__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_M__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_InvisibleWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateQuestHelper_FullMapWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateQuestHelper_FullMapWin__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_38(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_41(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_42(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_44(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_46(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_49(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_50(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_51(int a1<ebp>);
// void __usercall _unwindfunclet___0FullMapWin__IAE_XZ_52(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_38(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_41(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_42(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_44(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_46(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_49(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_50(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_51(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_53(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_54(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_55(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_57(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_58(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_60(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_61(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_63(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_64(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_66(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_67(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_69(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_70(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_72(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_73(int a1<ebp>);
// void __usercall _unwindfunclet___1FullMapWin__MAE_XZ_75(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FullMapWin__SAPAV1_PAVMiniMapWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FullMapWin__SAPAV1_PAVMiniMapWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InvisibleWin__SAPAV1_HHIIPAVPgWin__PADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InvisibleWin__SAPAV1_HHIIPAVPgWin__PADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddQuestList_FullMapWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddQuestHelper_FullMapWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddQuestHelper_FullMapWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddQuestHelper_FullMapWin__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddQuestHelper_FullMapWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_FullMapWin__MAE_NPAVMiniMapWin__PAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_IPAVMapMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_GPAVKQTeamMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVRaidMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVRaidMarkWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVQuestHelperMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVQuestHelperMarkWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPgWinSpr____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPgWinSpr____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPartyMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPartyMarkWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVMobAreaMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVMobAreaMarkWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVGTIScanMarkWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVGTIScanMarkWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GateChannelWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GateChannelWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GateChannelWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GateChannelWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GateChannelWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GateChannelWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GatheringWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GatheringWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GatheringWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GatheringWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GatheringWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GatheringWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GatheringWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___Getcat___numpunct_D_std__SAIPAPBVfacet_locale_2_PBV42__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Getcat___numpunct_D_std__SAIPAPBVfacet_locale_2_PBV42__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___Getcat___numpunct_D_std__SAIPAPBVfacet_locale_2_PBV42__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____D__basic_ostringstream_DU__char_traits_D_std__V__allocator_D_2__std__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1sentry___basic_ostream_DU__char_traits_D_std___std__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_I_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_I_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_I_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_I_Z_15(int a1<ebp>);
// void __usercall _unwindfunclet___Iput___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__ABA_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_DPADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Iput___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__ABA_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_DPADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____6U__char_traits_D_std___std__YAAAV__basic_ostream_DU__char_traits_D_std___0_AAV10_PBD_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____6U__char_traits_D_std___std__YAAAV__basic_ostream_DU__char_traits_D_std___0_AAV10_PBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____6U__char_traits_D_std___std__YAAAV__basic_ostream_DU__char_traits_D_std___0_AAV10_PBD_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet_____6DU__char_traits_D_std__V__allocator_D_1__std__YAAAV__basic_ostream_DU__char_traits_D_std___0_AAV10_ABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__0__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____6DU__char_traits_D_std__V__allocator_D_1__std__YAAAV__basic_ostream_DU__char_traits_D_std___0_AAV10_ABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_ostringstream_DU__char_traits_D_std__V__allocator_D_2__std__QAE_H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_ostringstream_DU__char_traits_D_std__V__allocator_D_2__std__QAE_H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_ostringstream_DU__char_traits_D_std__V__allocator_D_2__std__QAE_H_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___Fput___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__ABA_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_DPBDIIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Fput___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__ABA_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_DPBDIIII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___Fput___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__ABA_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_DPBDIIII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__do_put___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__MBE_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_D_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__do_put___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__MBE_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_D_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__do_put___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__MBE_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_D_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__do_put___num_put_DV__ostreambuf_iterator_DU__char_traits_D_std___std___std__MBE_AV__ostreambuf_iterator_DU__char_traits_D_std___2_V32_AAVios_base_2_D_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__str___basic_stringbuf_DU__char_traits_D_std__V__allocator_D_2__std__QBE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__2_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__str___basic_stringbuf_DU__char_traits_D_std__V__allocator_D_2__std__QBE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__2_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__str___basic_stringbuf_DU__char_traits_D_std__V__allocator_D_2__std__QBE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__2_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_move_PAUGuildInfo_GuildListWin__PAU12_V__allocator_UGuildInfo_GuildListWin___std__U12__std__YAPAUGuildInfo_GuildListWin__PAU12_00AAV__allocator_UGuildInfo_GuildListWin___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_move_PAUGuildInfo_GuildListWin__PAU12_V__allocator_UGuildInfo_GuildListWin___std__U12__std__YAPAUGuildInfo_GuildListWin__PAU12_00AAV__allocator_UGuildInfo_GuildListWin___0_0U_Nonscalar_ptr_iterator_tag_0__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAUGuildInfo_GuildListWin__HU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__PAH0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAUGuildInfo_GuildListWin__HU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__PAH0_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__0_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__0_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__0_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAUGuildInfo_GuildListWin__HU12_P6A_NABU12_0_Z_std__YAXPAUGuildInfo_GuildListWin__0P6A_NABU12_1_ZPAH0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAUGuildInfo_GuildListWin__HU12_P6A_NABU12_0_Z_std__YAXPAUGuildInfo_GuildListWin__0P6A_NABU12_1_ZPAH0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAUGuildInfo_GuildListWin__P6A_NABU12_0_ZU12__std__YAXPAUGuildInfo_GuildListWin__0P6A_NABU12_1_Z0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAUGuildInfo_GuildListWin__P6A_NABU12_0_ZU12__std__YAXPAUGuildInfo_GuildListWin__0P6A_NABU12_1_Z0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildListWin__QAEXABUGuildInfo_1__Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildListWin__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildListWin__QAEX_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildListWin__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildListWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildListWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildListWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildListWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildListWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetGuildList_GuildListWin__QAEXPAUSHINE_GUILD_LIST_NEW__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildSelectWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildSelectWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildSelectWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadURL_HelpWin__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HelpWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HelpWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HelpWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseAddWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseAddWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HolyPromiseAddWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HolyPromiseAddWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1HolyPromiseWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1HolyPromiseWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1HolyPromiseWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0HolyPromiseWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0HolyPromiseWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HolyPromiseWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HolyPromiseWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyPromiseWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet___0IDTimeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IDTimeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IDTimeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IDTimeWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IDTimeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IndunLevelSelectWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_IndunLevelSelectWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IndunLevelSelectWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IndunLevelSelectWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IndunLevelMsgWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IndunLevelMsgWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_IndunLevelSelectWin__QAEXGTName3__IPAW4ID_LEVEL_TYPE___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_IndunLevelSelectWin__QAEXGTName3__IPAW4ID_LEVEL_TYPE___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_IndunLevelSelectWin__QAEXGTName3__IPAW4ID_LEVEL_TYPE___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SetInfo_IndunLevelMsgWin__QAEXGTName3__W4ID_LEVEL_TYPE___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1InputTextWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_InputTextWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0InputTextWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InputTextWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InputTextWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InputTextWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0InvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0InvWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0InvWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1InvWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1InvWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0InventoryWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1InventoryWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__SetLock_InvWin__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetLock_InvWin__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_InventoryWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_InventoryWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_InventoryWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_InventoryWin__QAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_InventoryWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_InventoryWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_InventoryWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_InventoryWin__QAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllEquipItem_InventoryWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllEquipItem_InventoryWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllEquipItem_InventoryWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllEquipItem_InventoryWin__QAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllEquipItem_InventoryWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllEquipItem_InventoryWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllEquipItem_InventoryWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllEquipItem_InventoryWin__QAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InvTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InvTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChargedItemIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChargedItemIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChargedItemInvenWin__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChargedItemInvenWin__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChargedItemInvenWin__UAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CompensationItemIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CompensationItemIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CompensationInvWin__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CompensationInvWin__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CompensationInvWin__UAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InventoryWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_InventoryWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_InventoryWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_InventoryWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_InventoryWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_InventoryWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateBlinkEffect_InventoryWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateBlinkEffect_InventoryWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateBlinkEffect_InventoryWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateBlinkEffect_InventoryWin__QAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__GetTotalItemCount_InventoryWin__QAEIG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnInvRClick_ChargedItemInvenWin__QAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemInfoWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemInfoWin__SAPAV1_PAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemInfoWin__SAPAV1_PAVNiSourceTexture__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InsertSetItemContents_ItemInfoWin__IAEXPAUItemInfo__AAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InsertNameContents_ItemInfoWin__IAEXAAUsNameContentsParameter_1_AAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InsertNameContents_ItemInfoWin__IAEXAAUsNameContentsParameter_1_AAH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InsertNameContents_ItemInfoWin__IAEXAAUsNameContentsParameter_1_AAH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__InsertNameContents_ItemInfoWin__IAEXAAUsNameContentsParameter_1_AAH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__InsertNameContents_ItemInfoWin__IAEXAAUsNameContentsParameter_1_AAH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__InsertNameContents_ItemInfoWin__IAEXAAUsNameContentsParameter_1_AAH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__InsertProductContents_ItemInfoWin__IAEXPAVItem__AAH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InsertProductContents_ItemInfoWin__IAEXPAVItem__AAH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__InsertProductContents_ItemInfoWin__IAEXPAVItem__AAH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__InsertProductContents_ItemInfoWin__IAEXPAVItem__AAH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__InsertMaterialContents_ItemInfoWin__IAEXPAVItem__AAH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemMallMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemMallMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemMallMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_ItemShopWin__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_ItemShopWin__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__OnWeapon_ItemShopWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnArmor_ItemShopWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnAcc_ItemShopWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnRepurchase_ItemShopWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnPrevPage_ItemShopWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnNextPage_ItemShopWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShopInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShopInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemShopWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemShopWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemShopWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemTradeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemTradeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemTradeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ForgeSlotInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemUpgradeWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemUpgradeMsgWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemUpgradeMsgWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ForgeSlotInvWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ForgeSlotInvWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemUpgradeMsgWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemUpgradeMsgWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemUpgradeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemUpgradeWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemUpgradeWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemUpgradeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemUpgradeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KeyRemappingBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IPADII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KeyRemappingBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IPADII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KeyRemappingWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KeyRemappingWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KeyRemappingWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KeyRemappingWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SaveKeyMapping_KeyRemappingWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1KQScoreWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetScore_KQScoreWin__QAEXII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0KQScoreWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0KQScoreWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQScoreWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQScoreWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQScoreWin__SAPAV1_PAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQScoreWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MainCharHPBarWin__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MainCharHPBarWin__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1_unnamed_type_m_kEffectManager__MainMenuWin__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1_unnamed_type_m_kEffectManager__MainMenuWin__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1_unnamed_type_m_kEffectManager__MainMenuWin__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MainMenuWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MainMenuWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MainMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MainMenuWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MainMenuWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MainMenuWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MainMenuWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MainMenuWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MainMenuWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MainMenuWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MainMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MainMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0_unnamed_type_m_kEffectManager__MainMenuWin__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0KarisForgeSlotInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MakeKarisWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MakeKarisWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MakeKarisWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MakeKarisWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MakeKarisWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MakeKarisWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MakeKarisWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MakeKarisWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MakeKarisWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MakeKarisWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MakeKarisWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MakeKarisWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KarisForgeSlotInvWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KarisForgeSlotInvWin__SAPAV1_HHIPAVPgWin__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MakeKarisWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MakeKarisWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MakeKarisWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MapLinkGateWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ShowLinkGate_MapLinkGateWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ShowLinkGate_MapLinkGateWin__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MapLinkGateWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MapLinkGateWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MapLinkGateWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MapLinkGateWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MapLinkGateWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MapLinkGateWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MarketSearchWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MarketSearchWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MarketSearchWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MarketSearchWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MarketSearchWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__I_std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__IU__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__I_std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__IU__less_V__basic_stri(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_AAU__pair_IV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___std______Tree_val_V___Tmap_traits_IV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_I_2_V__allocator_U__pair___CBIV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_IV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_I_2_V__allocator_U__pair___CBIV__basic_string_DU__char_traits_D_std__V__allo(int a1<ebp>);
// void __usercall _unwindfunclet__AddWin_Item_SLWCreateInfo__QAE_NPADW4SprDataType_2__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddWin_Item_SLWCreateInfo__QAE_NPADW4SprDataType_2__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddWin_Item_SLWCreateInfo__QAE_NPADW4SprDataType_2__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddWin_Item_SLWCreateInfo__QAE_NPADW4SprDataType_2__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseInvWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseInvWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseInvWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseInvWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetLock_MiniHouseInvWin__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetLock_MiniHouseInvWin__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_MiniHouseInventoryWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_MiniHouseInventoryWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_MiniHouseInventoryWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__LockAllItem_MiniHouseInventoryWin__QAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_MiniHouseInventoryWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_MiniHouseInventoryWin__QAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_MiniHouseInventoryWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UnLockAllItem_MiniHouseInventoryWin__QAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseInvTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseInvTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseInventoryWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseInventoryWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseInventoryWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAUsKQAlarmInfo_MiniMapWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUsKQAlarmInfo_MiniMapWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUsKQAlarmInfo_MiniMapWin____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__RemoveInDunEffect_MiniMapWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestHelperMarkWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_38(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniMapWin__MAE_XZ_41(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniMapWin__IAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MainCharMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MainCharMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NpcMarkWin__SAPAV1_HHPAVPgSprData__PAUQuestStateImage__PAVPgWin__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NpcMarkWin__SAPAV1_HHPAVPgSprData__PAUQuestStateImage__PAVPgWin__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RaidMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RaidMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestHelperMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestHelperMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MobAreaMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MobAreaMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTIScanMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTIScanMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MapMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MapMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQTeamMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQTeamMarkWin__SAPAV1_HHPAVPgSprData__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniMapWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniMapWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_MiniMapWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_MiniMapWin__IAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_MiniMapWin__IAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_MiniMapWin__IAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_MiniMapWin__IAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_MiniMapWin__IAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__DirectMessage_NpcMarkWin__MAEXHPAXPAVIDirectMessenger___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GQuestHelperMarkWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniPartyWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniPartyWin__IAE_NHHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniPartyWin__IAE_NHHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniPartyWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniPartyWin__SAPAV1_HHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniPartyWin__SAPAV1_HHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoneyWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoneyWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0HolyRewardMoneyWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0HolyRewardMoneyWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1HolyRewardMoneyWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyRewardMoneyWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_HolyRewardMoneyWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MoneyWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MoneyWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HolyRewardMoneyWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_HolyRewardMoneyWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoveModeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MoveModeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MoveModeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MysteryVaultWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MysteryVaultWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MysteryVaultWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MysteryVaultWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MysteryVaultWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MysteryVaultWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MysteryVaultWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemShopInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemShopInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemShopInvWin__SAPAV1_HHIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemShopInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCItemWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCItemWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NPCItemWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NPCSkillWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NPCSkillWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NPCSkillWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NPCSkillWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NPCSkillWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NPCSkillInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnActiveSkill_NPCSkillWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnPasssiveSkill_NPCSkillWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnProductSkill_NPCSkillWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnPrevPage_NPCSkillWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnNextPage_NPCSkillWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnSelectJob_NPCSkillWin__IAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSkillInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSkillInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSkillWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSkillWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NPCSkillWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSoulInvWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSoulInvWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSoulWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NPCSoulWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NPCSoulWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NPCSoulWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NPCSoulWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyJoinProposeWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyJoinProposeWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyJoinProposeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyJoinProposeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyJoinProposeWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyJoinProposeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyJoinProposeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyLootSetupWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSetupWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSetupWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSetupWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyLootSetupWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyLootSetupWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyLootSetupWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyLootSelectWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyLootSelectWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_PartyLootSelectWin__MAEXIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyLootSelectWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet___0CPartyMatchWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CPartyMatchWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CPartyMatchWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CPartyMatchWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CPartyMatchWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CPartyMatchWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CPartyMatchWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1PartyWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0PartyWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyWin__IAE_NHHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PartyWin__IAE_NHHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyWin__SAPAV1_HHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PartyWin__SAPAV1_HHPAVPgWin__PAVNiNode__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkKqRankingWin__IAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PkKqRankingWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PkKqRankingWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____swap_URankInfo_PkRealTiemRankWin___std__YAXAAURankInfo_PkRealTiemRankWin__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Push_heap_PAUGuildInfo_GuildListWin__HU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__HH__QAU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Push_heap_PAUGuildInfo_GuildListWin__HU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__HH__QAU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_move_PAURankInfo_PkRealTiemRankWin__PAU12_V__allocator_URankInfo_PkRealTiemRankWin___std__U12__std__YAPAURankInfo_PkRealTiemRankWin__PAU12_00AAV__allocator_URankInfo_PkRealTiemRankWin___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Adjust_heap_PAUGuildInfo_GuildListWin__HU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__HH__QAU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Adjust_heap_PAUGuildInfo_GuildListWin__HU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__HH__QAU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_PAUGuildInfo_GuildListWin__HU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__00__QAU12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__PAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAURankInfo_PkRealTiemRankWin__HU12_V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost___std__YAXPAURankInfo_PkRealTiemRankWin__0V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__PAH0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAURankInfo_PkRealTiemRankWin__HU12_V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost___std__YAXPAURankInfo_PkRealTiemRankWin__0V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__PAH0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_PkRealTiemRankWin__V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAURankInfo_PkRealTiemRankWin__0V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_PkRealTiemRankWin__V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAURankInfo_PkRealTiemRankWin__0V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_PkRealTiemRankWin__V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAURankInfo_PkRealTiemRankWin__0V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__0_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_PkRealTiemRankWin__V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAURankInfo_PkRealTiemRankWin__0V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__0_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAURankInfo_PkRealTiemRankWin__U12_P6A_NABU12_0_Z_std__YAXPAURankInfo_PkRealTiemRankWin__0P6A_NABU12_1_Z0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAURankInfo_PkRealTiemRankWin__U12_V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost___std__YAXPAURankInfo_PkRealTiemRankWin__0V__function___A6A_NABURankInfo_PkRealTiemRankWin__0_ZV__allocator_X_std___boost__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_PkRealTiemRankWin__IAE_NABURankInfo_1__Z_27(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_PkRealTiemRankWin__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PkRealTiemRankWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PkRealTiemRankWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PkRealTiemRankWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PkRealTiemRankWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1PkRealTiemRankWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PkRealTiemRankWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PkRealTiemRankWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PkRealTiemRankWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PkRealTiemRankWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetRankInfo_PkRealTiemRankWin__QAE_NPBDIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkRealTiemRankWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkRealTiemRankWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkRealTiemRankWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkRealTiemRankWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PkRealTiemRankWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__push_back___vector_UColumnData_ListItem_SlideListWin__V__allocator_UColumnData_ListItem_SlideListWin___std___std__QAEX__QAUColumnData_ListItem_SlideListWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__push_back___vector_UColumnData_ListItem_SlideListWin__V__allocator_UColumnData_ListItem_SlideListWin___std___std__QAEX__QAUColumnData_ListItem_SlideListWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PageWinSpr__SAPAV1_HHPAVPgSprData__PAVPgWin__PADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PageWinSpr__SAPAV1_HHPAVPgSprData__PAVPgWin__PADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PlayGuideMinWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PlayGuideMinWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PlayGuideWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PlayGuideWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnSearchBtn_PlayGuideWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PlayGuideWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PlayGuideWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PlayGuideWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PlayGuideWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__GetmhUI_ObjName_PopupMenuTemplate__SAPAVPopupMenu__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PopupMenuWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PopupMenuWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PopupMenuWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PopupMenuWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuText__SAPAV1_PADIIPAVPgWin__0I_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuText__SAPAV1_PADIIPAVPgWin__0I_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuTextCheck__SAPAV1_PADIIPAVPgWin__0I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuTextCheck__SAPAV1_PADIIPAVPgWin__0I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuWin__SAPAV1_PAVNiSourceTexture__IIPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuWin__SAPAV1_PAVNiSourceTexture__IIPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuSubMenu__SAPAV1_PADIIPAVPgWin__0I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PopupMenuSubMenu__SAPAV1_PADIIPAVPgWin__0I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PopupMenuSubMenu__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PrisonTimeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PrisonTimeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PrisonTimeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PrisonTimeWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PrisonTimeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PrivateStoreInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PrivateStoreWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PrivateStoreInvWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PrivateStoreInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PrivateStoreInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PrivateStoreWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PrivateStoreWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PrivateStoreWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MaterialItemIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MaterialItemIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ProductionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ProductionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddProductSkillTextInListByType__YAHW4TotalMasteryType__KPAVSlideListWin___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddProductSkillTextInListByType__YAHW4TotalMasteryType__KPAVSlideListWin___N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductionWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductSkillSelectWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ProductSkillSelectWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ProductSkillSelectWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ProductSkillSelectWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1RebirthMenuWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1RebirthMenuWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RebirthMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RebirthMenuWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RebirthMenuWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RebirthMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RebirthMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ReportWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ReportWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ReportWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ReportWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ReviveMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ReviveMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ReviveMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0RewardInvItem__QAE_W4QUEST_REWARD_TYPE_QUEST_DATA___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RewardInvItem__QAE_W4QUEST_REWARD_TYPE_QUEST_DATA___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1RewardInvItem__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1RewardInvItem__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1RewardInvWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1RewardInvWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateReward_RewardWin__QAEXG_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___0RewardInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RewardInvWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RewardInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RewardInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RewardWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RewardWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0RidePetWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RidePetWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0RidePetWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0RidePetWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0RidePetWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1RidePetWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1RidePetWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1RidePetWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1RidePetWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RidePetWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RidePetWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RidePetWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0RoarWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RoarWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1RoarWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1RoarWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RoarWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
unsigned int __cdecl _unwindfunclet__FilterRemoveEnter_RoarWin__QAEPADPAD_Z_0();
void __cdecl _unwindfunclet__FilterRemoveEnter_RoarWin__QAEPADPAD_Z_2();
// void __usercall _unwindfunclet__FilterRemoveEnter_RoarWin__QAEPADPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RoarWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RoarWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RollingDiceWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_RollingDiceMsgWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RollingDiceWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RollingDiceWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RollingDiceMsgWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_RollingDiceMsgWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ScreenWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ScreenWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ServerMenuWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ServerMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ServerMenuWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ServerMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ServerMenuWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ServerMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ServerTimeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ServerTimeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ServerTimeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadWebUrl_ShopWin__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ShopWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ShopWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShopWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShopWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetHotKeyWin_ShortCutWin__IAEXIPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetPremiumItemInfo_ShortCutWin__QAEXIPAVItem___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutIconWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutIconWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutIconWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateToggleEffect_ShortCutIconWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateToggleEffect_ShortCutIconWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShortCutIconWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShortCutIconWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShortCutWin__SAPAV1_PAVPgFrameWork___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ShortCutWin__SAPAV1_PAVPgFrameWork___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubWin_ShortCutWin__SAPAV1_PAVPgFrameWork___NH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubWin_ShortCutWin__SAPAV1_PAVPgFrameWork___NH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__OnDrop_ShortCutWin__QAE_NPAVDropContents__I_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreatHorizontalWin_ShortCutWin__IAE_NPAVPgFrameWork__AAV__NiPointer_VNiNode____PAVNiSourceTexture___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreatVerticalWin_ShortCutWin__IAE_NPAVPgFrameWork__AAV__NiPointer_VNiNode____PAVNiSourceTexture___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ShortCutWin__MAE_NPAVPgFrameWork___N1H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SkillInfoWin__MAE_NPAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__WordrapSetText_SkillInfoWin__IAEXPBDAAHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetTextBeginNewLine_SkillInfoWin__IAEXPBDAAHAAUD3DXCOLOR___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItemDesc_SkillInfoWin__QAEXAAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillInfoWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillInfoWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillInfoWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillInfoWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillInfoWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillInfoWin__SAPAV1_PAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillInfoWin__SAPAV1_PAVNiSourceTexture__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__SetSetItem_SkillInfoWin__QAEXG_Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__SetSkillInfo_SkillInfoWin__QAEHG_NPAUEmpowerInfo_Skill__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAUItemAction____PAUItemAction____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_GV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___std______Tree_val_V___Tmap_traits_GV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_G_2_V__allocator_U__pair___CBGV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_GV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_G_2_V__allocator_U__pair___CBGV__basic_string_DU__char_traits_D_std__V__alloca(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CSkillInitWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CSkillInitWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CSkillInitWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CSkillInitWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillPowerIconWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillPowerIconWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillPowerListItemWin__SAPAV1_PAVNiAVObject__HHIAAUCreateSpec_1_PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillPowerListItemWin__SAPAV1_PAVNiAVObject__HHIAAUCreateSpec_1_PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillPowerWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillPowerWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SkillPowerWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SkillPowerWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PosInfoWinBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IHPADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PosInfoWinBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IHPADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_LevelSelectWinBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IPADII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_LevelSelectWinBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IPADII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SkillWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SkillWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SkillWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetLevel_SkillWin__IAEXIE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetLevel_SkillWin__IAEXIE_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetLearnSkillNum_SkillWin__IAEIXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetLearnSkillNum_SkillWin__IAEIXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetLearnSkillNum_SkillWin__IAEIXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__GetLearnSkillNum_SkillWin__IAEIXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__GetLearnSkillNum_SkillWin__IAEIXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__GetLearnSkillNum_SkillWin__IAEIXZ_14(int a1<ebp>);
// void __usercall _unwindfunclet__OnLevelNext_SkillWin__IAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnLevelPre_SkillWin__IAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_15(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_16(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_18(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_19(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_20(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_22(int a1<ebp>);
// void __usercall _unwindfunclet__ResetContents_SkillWin__QAEXXZ_24(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VPgFont______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VPgFont______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VPgFont______UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SoulStoneInfoWin__MAE_NPAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SoulStoneInfoWin__SAPAV1_PAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SoulStoneInfoWin__SAPAV1_PAVNiSourceTexture__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SoulStoneWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SoulStoneWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SoulStoneWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatTitleListItemWin__MAE_NPAVNiAVObject__HHIAAUCreateSpec_1_PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatTitleListItemWin__SAPAV1_PAVNiAVObject__HHIAAUCreateSpec_1_PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatTitleListItemWin__SAPAV1_PAVNiAVObject__HHIAAUCreateSpec_1_PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatTitleWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatTitleWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatTitleWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StatTitleWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0StatusWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaMainGauge_StatusWin__QAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaMainGauge_StatusWin__QAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatusWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StatusWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0StorageInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1StorageInvWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1StorageWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1StorageWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1StorageWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StorageTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StorageTabButWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StorageInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StorageInvWin__SAPAV1_HHIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StorageInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StorageWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_StorageWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_StorageWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GStorageInvWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GStorageWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GStorageWin__MAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GStorageWin__MAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SysMsgDisplayWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SysMsgDisplayWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SysMsgDisplayWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SysMsgDisplayWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SysMsgDisplayWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SystemWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SystemWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SystemWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MobIconWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AbStateIconWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_TargetOfTheTargetWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_TargetOfTheTargetWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0TargetWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0TargetWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0TargetWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0TargetWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0TargetWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0TargetWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1TargetWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MobIconWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MobIconWin__SAPAV1_HHPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MobIconWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AbStateIconWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AbStateIconWin__SAPAV1_HHPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AbStateIconWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TargetWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TargetWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_TargetWin__QAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_TargetWin__QAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_TargetWin__QAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_TargetWin__QAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateKoreaUI_TargetWin__QAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TargetOfTheTargetWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TargetOfTheTargetWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_G__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ToolTipWin__SAPAV1_PAVNiSourceTexture__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ToolTipWin__SAPAV1_PAVNiSourceTexture__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0UserTradeInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UserTradeInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UserTradeInvWin__SAPAV1_HHIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UserTradeInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UserTradeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_UserTradeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1VoteWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0VoteReasonWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1VoteReasonWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_VoteWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_VoteWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_VoteReasonWin__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_VoteReasonWin__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_VoteReasonWin__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_VoteReasonWin__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_VoteWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_VoteWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnOK_VoteWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_VoteReasonWin__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GVoteReasonWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1LogoutAfterMinutesWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_LogoutAfterMinutesWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_LogoutAfterMinutesWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_LogoutAfterMinutesWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WaitingForLogoutWin__SAPAV1_KKPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WaitingForLogoutWin__SAPAV1_KKPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WaitingForLogoutWin__MAE_NKKPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WaitingForLogoutWin__MAE_NKKPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WaitingForLogoutWin__MAE_NKKPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WaitingForLogoutWin__MAE_NKKPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WaitingForLogoutWin__MAE_NKKPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WaitingForLogoutWin__MAE_NKKPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeaponTitleWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeaponTitleWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeaponTitleDeleteWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeaponTitleDeleteWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeaponTitleWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeaponTitleWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeaponTitleDeleteWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeaponTitleDeleteWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0WingStoneMapWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0WingStoneMapWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0WingStoneMapWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0WingStoneMapWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0WingStoneMapWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1WingStoneMapWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1WingStoneMapWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1WingStoneMapWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1WingStoneMapWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1WingStoneMapWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WingStoneMapWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WingStoneMapWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WingStoneMapWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WingStoneMapWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WingStoneMapWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1WingStoneWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0WingStoneWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WingStoneWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WingStoneWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WingStoneWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldMapWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldMapWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldMapWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldMapWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WorldMapWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___1WorldMapWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1WorldMapWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1WorldMapWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1WorldMapWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1WorldMapWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1WorldMapWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0WorldMapWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0WorldMapWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldMapWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WorldMapWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionBaseWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_OptionBaseWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_OptionBaseWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionBaseWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionBaseWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionBaseWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionGraphicWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_OptionGraphicWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_OptionGraphicWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionGraphicWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionGraphicWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionGraphicWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_OptionSoundWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionSoundWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionSoundWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionSystemWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_OptionSystemWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_OptionSystemWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionSystemWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionSystemWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_OptionSystemWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0AbstateIcon__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AbstateIcon__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0AbstateIcon__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0AbstateIcon__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0AbstateIcon__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1AbstateIcon__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AbstateIcon__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AbstateIcon__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1AbstateIcon__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_AbstateIcon__QAEXII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_AbstateIcon__QAEXII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_AbstateIcon__QAEXII_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_AbstateIcon__QAEXII_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_AbstateIcon__QAEXII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_AbstateIcon__QAEXII_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AbstateIcon__SAPAV1_HHHHPAVPgWin___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AbstateIcon__SAPAV1_HHHHPAVPgWin___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionIcon__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionIcon__SAPAV1_HHPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ActionIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAniTexture_AniIconWin__QAE_NPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AniIconWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AniIconWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AniIconWin__SAPAV1_HHHHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AniIconWin__SAPAV1_HHHHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AniIconWin__SA_AV__NiPointer_VAniIconWin____PBDHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AniIconWin__SA_AV__NiPointer_VAniIconWin____PBDHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AniIconWin__SA_AV__NiPointer_VAniIconWin____PBDHH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0IconSlotWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0IconSlotWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1IconSlotWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1IconSlotWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IconSlotWin__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IconSlotWin__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_IconWin__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0IconWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneTex__QAEXPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneTex__QAEXPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneTex__QAEXPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneTex__QAEXPAVPgWin___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneTex__QAEXPAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DecoPlaneColor__QAEXPAVPgWin___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1IconWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXII_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXII_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXII_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXII_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXPAVNiSourceTexture__III_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXPAVNiSourceTexture__III_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXPAVNiSourceTexture__III_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__IconDisable_IconWin__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__IconDisable_IconWin__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__IconDisable_IconWin__QAEXMMM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__IconDisable_IconWin__QAEXMMM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXIIPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXIIPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXIIPAD_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXIIPAD_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXIIPAD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_IconWin__MAEXIIPAD_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IconWin__SAPAV1_HHHHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_IconWin__SAPAV1_HHHHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemIcon__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_ItemIcon__IAEXII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_ItemIcon__IAEXII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_ItemIcon__IAEXII_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_ItemIcon__IAEXII_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_ItemIcon__IAEXII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSubImagePlane_ItemIcon__IAEXII_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_16(int a1<ebp>);
// void __usercall _unwindfunclet__PlaneInit_ItemIcon__IAEXXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemIcon__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVSkillIcon____PAVSkillIcon____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GraySkillTexture_SkillIcon__QAE_NPAVNiTexture__PAVNiD3DPass___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillIcon__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillIcon__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SkillIcon__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0SkillIcon__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__UsingSkillAlphaProperty_SkillIcon__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UsingSkillAlphaProperty_SkillIcon__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UsingSkillAlphaProperty_SkillIcon__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__UsingItemAlphaProperty_SkillIcon__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SkillIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kSkillIconList_SkillIcon__1V__NiTList_PAVSkillIcon____A__YAXXZ_1();
// void __usercall _unwindfunclet___1GuildCombatPropensityChangeWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildCombatPropensityChangeWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildCombatPropensityChangeWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildCombatPropensityChangeWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildCombatPropensityChangeWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildCombatPropensityChangeWin__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildCombatPropensityChangeWin__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___R__function1_XHV__allocator_X_std___boost__QBEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildFoundWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildFoundWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildFoundWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildFoundWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildFoundWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildMasterMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildMasterMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildMasterMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildMenuWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildMenuWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildMenuWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildMenuWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildMenuWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameChangeWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameChangeWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameChangeWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameChangeWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameChangeWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildNameChangeWin__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildNameChangeWin__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildNoticeEditorWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildNoticeEditorWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildNoticeEditorWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNpcMenuWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildNpcMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildNpcMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWarInformWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarInformWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWarInformWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWarInformWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWarKillCountWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildWarKillCountWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarKillCountWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWarKillCountWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWarKillCountWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWarKillCountWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWarStateWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWarStateWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWarStateWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWarStateWin__MAE_NPAVPgFrameWork___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet___0__CStringT_DV__StrTraitATL_DV__ChTraitsCRT_D_ATL___ATL___ATL__QAE_PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InvalidateGuildList_GuildWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InvalidateGuildList_GuildWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildWin__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTIFlagWin__MAE_NPAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTIFlagWin__SAPAV1_PAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTIFlagWin__SAPAV1_PAVPgFrameWork__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GTInformWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GTInformWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTInformWin__IAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTInformWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTInformWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTInformWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTStatusMiniWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTStatusMiniWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTStatusMiniWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_28(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__AddRankPlayerInfo_GTStatusWin__QAEXABURankInfo_1__Z_32(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GTStatusWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GTStatusWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GTStatusWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GTStatusWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0GTStatusWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GTStatusWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GTStatusWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GTStatusWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTStatusWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTStatusWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTStatusWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTStatusWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTStatusWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTStatusWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTStatusWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTStatusWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__SetRankInfo_GTStatusWin__QAE_NPAUTOURNAMENT_PLAYER_SCORE__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Construct_URankInfo_GTStatusWin__ABU12__std__YAXPAURankInfo_GTStatusWin__ABU12__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____swap_URankInfo_GTStatusWin___std__YAXAAURankInfo_GTStatusWin__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Cons_val_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___std__U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____2_U32__std__YAXAAV__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___0_PAU__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPoi(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_move_PAURankInfo_GTStatusWin__PAU12_V__allocator_URankInfo_GTStatusWin___std__U12__std__YAPAURankInfo_GTStatusWin__PAU12_00AAV__allocator_URankInfo_GTStatusWin___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Make_heap_PAURankInfo_GTStatusWin__HU12_V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost___std__YAXPAURankInfo_GTStatusWin__0V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__PAH0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_GTStatusWin__V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAURankInfo_GTStatusWin__0V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_GTStatusWin__V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAURankInfo_GTStatusWin__0V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_GTStatusWin__V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__U12__std__YAXPAURankInfo_GTStatusWin__0V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__0_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Insertion_sort1_PAURankInfo_GTStatusWin__P6A_NABU12_0_ZU12__std__YAXPAURankInfo_GTStatusWin__0P6A_NABU12_1_Z0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAURankInfo_GTStatusWin__U12_V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost___std__YAXPAURankInfo_GTStatusWin__0V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAURankInfo_GTStatusWin__U12_V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost___std__YAXPAURankInfo_GTStatusWin__0V__function___A6A_NABURankInfo_GTStatusWin__0_ZV__allocator_X_std___boost__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAURankInfo_GTStatusWin__U12_P6A_NABU12_0_Z_std__YAXPAURankInfo_GTStatusWin__0P6A_NABU12_1_Z0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____sort_heap_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Sort_PAUGuildInfo_GuildListWin__HV__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0HV__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GTTDiceWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTTDiceWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTTDiceWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTTDiceWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTTMiniSkillWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTTSkillWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTTSkillWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTTSkillWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTTMiniSkillWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTTMiniSkillWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildTournamentBaseWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildTournamentBaseWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GTRequestListWin__QAEXABUGuildInfo_1__Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GTRequestListWin__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GTRequestListWin__QAEX_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GTRequestListWin__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GTRequestListWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GTRequestListWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GTRequestListWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTRequestListWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTRequestListWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildTournamentBaseWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetGuildList_GTRequestListWin__QAEXPAUSHINE_GUILD_LIST_NEW__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GTRequestListWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet____swap_UGuildInfo_GuildListWin___std__YAXAAUGuildInfo_GuildListWin__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Med3_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__00V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Med3_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__00V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Med3_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__00V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet_____Med3_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__00V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAUGuildInfo_GuildListWin__U12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAUGuildInfo_GuildListWin__U12_V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Pop_heap_0_PAUGuildInfo_GuildListWin__U12_P6A_NABU12_0_Z_std__YAXPAUGuildInfo_GuildListWin__0P6A_NABU12_1_Z0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_23(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_28(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_33(int a1<ebp>);
// void __usercall _unwindfunclet_____Unguarded_partition_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YA_AU__pair_PAUGuildInfo_GuildListWin__PAU12__0_PAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_38(int a1<ebp>);
// void __usercall _unwindfunclet_____Sort_heap_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Sort_heap_PAUGuildInfo_GuildListWin__V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___std__YAXPAUGuildInfo_GuildListWin__0V__function___A6A_NABUGuildInfo_GuildListWin__0_ZV__allocator_X_std___boost___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildTournamentScheduleWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildTournamentScheduleWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildTournamentScheduleWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GTStorageInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTournamentStorageWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTournamentStorageWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTournamentStorageWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTStorageInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTStorageInvWin__SAPAV1_HHIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GTStorageInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildTournamentStorageWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildTournamentStorageWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildTournamentStorageWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GGuildTournamentStorageWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GGuildTournamentStorageWin__MAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GGuildTournamentStorageWin__MAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatBoard__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateTextGeometry_ChatBoard__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatBoard__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatBoard__SAPAV1_HHIIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatBoard__SAPAV1_HHIIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateTextGeometry_ChatBoardFlex__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateTextGeometry_ChatBoardFlex__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__EraseWhisperToken_ChatBoardFlex__IAEXPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatBoardFlex__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatBoardFlex__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatBoardFlex__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatBoardFlex__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatBoardFlex__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatBoardFlex__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatBoardFlex__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatBoardFlex__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatBoardFlex__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatBoardFlex__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatBoardFlex__SAPAV1_HHIIPAVPgFont___NPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatBoardFlex__SAPAV1_HHIIPAVPgFont___NPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_HV__vector_USHINE_ITEM_STRUCT__V__allocator_USHINE_ITEM_STRUCT___std___std___std______Tree_val_V___Tmap_traits_HV__vector_USHINE_ITEM_STRUCT__V__allocator_USHINE_ITEM_STRUCT___std___std__U__less_H_2_V__allocator_U__pair___CBHV__vector_USHINE_ITEM_STRUCT__V__allocator_USHINE_ITEM_STRUCT___std___std___std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_HV__vector_USHINE_ITEM_STRUCT__V__allocator_USHINE_ITEM_STRUCT___std___std__U__less_H_2_V__allocator_U__pair__(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatDisplayWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatDisplayWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ChatDisplayWin2__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0ChatDisplayWin2__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1ChatDisplayWin2__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatDisplayWin2__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ChatDisplayWin2__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1KingdomQuestWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1KingdomQuestWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1KingdomQuestWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1KingdomQuestWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0KingdomQuestWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0KingdomQuestWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0KingdomQuestWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0KingdomQuestWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0KingdomQuestWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestPlayerList__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestPlayerList__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestPlayerList__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestTeamList__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestTeamList__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KingdomQuestTeamList__SAPAV1_V__NiPointer_VNiNode____PAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateContentView_KingdomQuestWin__QAEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateContentView_KingdomQuestWin__QAEXH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateContentView_KingdomQuestWin__QAEXK_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateContentView_KingdomQuestWin__QAEXK_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestPlayerList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KingdomQuestTeamList__MAE_NV__NiPointer_VNiNode____PAVPgWin___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet___0KQuestTimeWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_KQuestTimeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQuestTimeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQuestTimeWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_KQuestTimeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NpcDialogWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NpcDialogWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NpcDialogWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ParseBaseDlgAndCreateBtn_SpeechBubbleDlgWin__IAEXGPADHI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ParseBaseDlgAndCreateBtn_SpeechBubbleDlgWin__IAEXGPADHI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__BuildNormalDialog_AutoSizingDialogWin__QAEXPADIPAUVirtualRect_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__BuildDialog_SpeechBubbleDlgWin__QAEXGII_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__BuildScriptDialog_SpeechBubbleDlgWin__QAEXGPADI_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildScriptDialog_SpeechBubbleDlgWin__QAEXGPADI_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FlexDlgBtn__SAPAV1_HHPAVPgSprData__00PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_FlexDlgBtn__SAPAV1_HHPAVPgSprData__00PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TextBtn__SAPAV1_HHPAVPgSprData__PAVPgFont__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_TextBtn__SAPAV1_HHPAVPgSprData__PAVPgFont__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AutoSizingDialogWin__SAPAV1_IIIPAVPgFont__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AutoSizingDialogWin__SAPAV1_IIIPAVPgFont__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AutoSizingDialogWin__MAE_NIIIPAVPgFont__PAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_AutoSizingDialogWin__MAE_NIIIPAVPgFont__PAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SpeechBubbleDlgWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SpeechBubbleDlgWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NpcDialogWin__SAPAV1_PAVPgFrameWork__PAD_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NpcDialogWin__SAPAV1_PAVPgFrameWork__PAD_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_DlgQuestListWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_DlgQuestListWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SpeechBubbleDlgWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildScriptDialog_SpeechBubbleDlgWin__QAEXPADPAV__NiTList_PAVScriptBtn____I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ParseAndCreateQuestDlg_AutoSizingDialogWin__IAEXGKI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ParseAndCreateQuestDlg_AutoSizingDialogWin__IAEXGKI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__BuildQuestDialog_AutoSizingDialogWin__QAEXKIKEPAUVirtualRect_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildQuestDialog_SpeechBubbleDlgWin__QAEXGKKEI_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildQuestDialog_SpeechBubbleDlgWin__QAEXGKKEI_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__BuildQuestDialog_SpeechBubbleDlgWin__QAEXGKKEI_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DlgQuestListWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DlgQuestListWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DlgQuestListWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DlgQuestListWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DlgQuestListWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DlgQuestListWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_DlgQuestListWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestList_DlgQuestListWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestList_DlgQuestListWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestList_DlgQuestListWin__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAUVirtualRect_AutoSizingDialogWin____PAUVirtualRect_AutoSizingDialogWin____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Buynode____List_val_UQuestNameList_DlgQuestListWin__V__allocator_UQuestNameList_DlgQuestListWin___std___std__QAEPAU_Node____List_nod_UQuestNameList_DlgQuestListWin__V__allocator_UQuestNameList_DlgQuestListWin___std___2_PAU342_0ABUQuestNameList_DlgQuestListWin___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____sort_P6A_NABUQuestNameList_DlgQuestListWin__0_Z___list_UQuestNameList_DlgQuestListWin__V__allocator_UQuestNameList_DlgQuestListWin___std___std__QAEXP6A_NABUQuestNameList_DlgQuestListWin__0_Z_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____sort_P6A_NABUQuestNameList_DlgQuestListWin__0_Z___list_UQuestNameList_DlgQuestListWin__V__allocator_UQuestNameList_DlgQuestListWin___std___std__QAEXP6A_NABUQuestNameList_DlgQuestListWin__0_Z_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NpcQuestWin__MAE_NPAVNiSourceTexture__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NpcQuestWin__SAPAV1_PAVNiSourceTexture__PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_NpcQuestWin__SAPAV1_PAVNiSourceTexture__PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestFinishWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestFinishWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestFinishWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestFinishWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestFinishWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestFinishWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestFinishWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestFinishWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestFinishWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateQuest_QuestFinishWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateQuest_QuestFinishWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestNewsWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestNewsWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestNewsWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestNewsWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestNewsWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestNewsWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0QuestNewsWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0QuestNewsWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0QuestNewsWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestNewsWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestNewsWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestNewsWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestNewsWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestNewsWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0QuestPigeonEffect__QAE_PAVNiActorManager__PAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0QuestPigeonEffect__QAE_PAVNiActorManager__PAVChar___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0QuestPigeonEffect__QAE_PAVNiActorManager__PAVChar___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestPigeonEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestPigeonEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestPigeonEffect__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestContentText_QuestStartItemWin__QAEXKPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestStartItemWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_QuestStartItemWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestInfo_QuestStartItemWin__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestInfo_QuestStartItemWin__QAEXG_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestInfo_QuestStartItemWin__QAEXG_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestStartItemWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestStartItemWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestStartItemWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_QuestStartItemWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1EpicQuestWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestContentText_CQuestWin2__IAEXKPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetQuestContentText_EpicQuestWin__IAEXKPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EpicQuestWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EpicQuestWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AutoRunBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IPADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_AutoRunBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IPADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestWin2__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestWin2__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestWin2__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestWin2__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestWin2__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestWin2__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestWin2__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestWin2__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestWin2__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestWin2__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestWin2__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestWin2__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestWin2__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestWin2__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CQuestWin2__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CQuestWin2__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_CQuestWin2__IAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_CQuestWin2__IAEXG_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_CQuestWin2__IAEXG_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_CQuestWin2__IAEXG_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_EpicQuestWin__IAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_EpicQuestWin__IAEXG_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_EpicQuestWin__IAEXG_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuesContent_EpicQuestWin__IAEXG_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_CQuestWin2__IAEX_NH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_CQuestWin2__IAEX_NH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_CQuestWin2__IAEX_NH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_CQuestWin2__IAEX_NH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_CQuestWin2__IAEX_NH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_CQuestWin2__IAEX_NH_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__UpDateViewQuestList_EpicQuestWin__IAEXXZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CQuestWin2__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EpicQuestWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet___0QData_CQuestWin2__QAE_ABU01__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0QData_EpicQuestWin__QAE_KHPBDKHHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0QData_CQuestWin2__QAE_KHPBD0KHHHW4PLAYER_QUEST_STATUS___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_HUQData_CQuestWin2___std______Tree_val_V___Tmap_traits_HUQData_CQuestWin2__U__less_H_std__V__allocator_U__pair___CBHUQData_CQuestWin2___std___4__00_std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_HUQData_CQuestWin2__U__less_H_std__V__allocator_U__pair___CBHUQData_CQuestWin2___std___4__00_std___1___QAU__pair_HUQData_CQuestWin2___1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_HUQData_EpicQuestWin___std______Tree_val_V___Tmap_traits_HUQData_EpicQuestWin__U__less_H_std__V__allocator_U__pair___CBHUQData_EpicQuestWin___std___4__00_std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_HUQData_EpicQuestWin__U__less_H_std__V__allocator_U__pair___CBHUQData_EpicQuestWin___std___4__00_std___1___QAU__pair_HUQData_EpicQuestWin___1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1__basic_stringstream_DU__char_traits_D_std__V__allocator_D_2__std__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_G_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_G_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_G_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___6__basic_ostream_DU__char_traits_D_std___std__QAEAAV01_G_Z_15(int a1<ebp>);
// void __usercall _unwindfunclet___1MonsterCardInventoryWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MonsterCardInventoryWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MonsterCardInventoryWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MonsterCardInventoryWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MonsterCardInventoryWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MonsterCardInventoryWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MonsterCardInventoryWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__ActiveListViewEnable_MonsterCardInventoryWin__IAEX_N_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__SelectIconItem_MonsterCardInventoryWin__IAEXH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SelectIconItem_MonsterCardInventoryWin__IAEXH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__SelectIconItem_MonsterCardInventoryWin__IAEXH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SelectIconItem_MonsterCardInventoryWin__IAEXH_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__SelectIconItem_MonsterCardInventoryWin__IAEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SelectIconItem_MonsterCardInventoryWin__IAEXH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MonsterCardInventoryWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MonsterCardInventoryWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MonsterCardInventoryWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MonsterCardInventoryWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MonsterCardInventoryWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MonsterCardInventoryWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MonsterCardInventoryWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__SetContents_Bank__SA_NPAUPROTO_NC_MENU_OPENSTORAGE_CMD___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetContents_Bank__SA_NPAUPROTO_NC_MENU_OPENSTORAGE_CMD___Z_1(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_mapExtraInv_Bank__1V__map_EPAV__NiPointer_VItem____U__less_E_std__V__allocator_U__pair___CBEPAV__NiPointer_VItem_____std___3__std__A__YAXXZ_1();
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVICharDeadEvent____PAVICharDeadEvent____UAEPAXI_Z_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kEventList_ICharDeadEvent__1V__NiTList_PAVICharDeadEvent____A__YAXXZ_1();
// void __usercall _unwindfunclet__SetContents_GuildTournamentStorage__SA_NPAUPROTO_NC_GUILD_STORAGEOPEN_ACK___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVMagicField____PAVMagicField____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVIEffectDestroyMessenger____UAEPAXI_Z_1(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kMagicFieldList_MagicField__1V__NiTList_PAVMagicField____A__YAXXZ_1();
// void __usercall _unwindfunclet___0MapNavigator__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MapNavigator__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MapNavigator__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____GMapNavigator__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAUMENUITEM_PROTO_NC_MENU_SHOPOPENTABLE_CMD____UAEPAXI_Z_1(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kItemSellInfoList_ItemMarket__1V__NiTList_PAUMENUITEM_PROTO_NC_MENU_SHOPOPENTABLE_CMD____A__YAXXZ_1();
// void __usercall _unwindfunclet___0ShortCutItem__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutItem__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutItem__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutItem__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShortCut_ShortCutMgr__QAEPAVShortCut__W4Type_2__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShortCut_ShortCutMgr__QAEPAVShortCut__W4Type_2__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShortCut_ShortCutMgr__QAEPAVShortCut__W4Type_2__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShortCut_ShortCutMgr__QAEPAVShortCut__W4Type_2__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShortCut_ShortCutMgr__QAEPAVShortCut__W4Type_2__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ShortCutMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ShortCutMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFromPacket_ShortCutMgr__QAE_NPAUSHORT_CUT_DATA___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFromPacket_ShortCutMgr__QAE_NPAUSHORT_CUT_DATA___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFromPacket_ShortCutMgr__QAE_NPAUSHORT_CUT_DATA___Z_13(int a1<ebp>);
void __cdecl _unwindfunclet_____Fg_kShortCutMgr__YAXXZ_0();
// void __usercall _unwindfunclet__Get_NearDot_CWayPoint__QAEHHHHPAPAUMAP_DOT___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardBase__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardUserChar__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardUserChar__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardUserChar__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardUserChar__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardUserChar__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardUserChar__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardDropItem__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardDropItem__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharScreenBoardMiniHouse__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardDropItem__UAE_NGPAVScreenBoardTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardDropItem__UAE_NGPAVScreenBoardTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardMiniHouse__UAE_NGPAVScreenBoardTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardMiniHouse__UAE_NGPAVScreenBoardTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardMiniHouse__UAE_NGPAVScreenBoardTexture___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__MakeCharTitle_CharScreenBoardUserChar__IAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CheckNameChange_CharScreenBoardUserChar__UAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CheckNameChange_CharScreenBoardUserChar__UAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CheckNameChange_CharScreenBoardUserChar__UAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharScreenBoardUserChar__UAE_NGPAVScreenBoardTexture___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet____GCharScreenBoardMiniHouse__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildBD__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildBD__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_GuildBD__QAEXPAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_GuildBD__QAEXPAVNiTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_GuildBD__QAEXPAVNiTexture__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_GuildBD__QAEXPAVNiTexture__H_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_GuildBD__QAEXPAVNiTexture__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildBD__QAE_PAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildBD__QAE_PAVNiTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0IConBD__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1IConBD__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NameBD__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NameBD__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_NameBD__QAEXPAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_NameBD__QAEXPAVNiTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_NameBD__QAEXPAVNiTexture__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_NameBD__QAEXPAVNiTexture__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NameBD__QAE_PAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NameBD__QAE_PAVNiTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PrivateStoreBD__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_PrivateStoreBD__QAEXPAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_PrivateStoreBD__QAEXPAVNiTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_PrivateStoreBD__QAEXPAVNiTexture__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_PrivateStoreBD__QAEXPAVNiTexture__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PrivateStoreBD__QAE_PAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVSpeechBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVCharScreenBoardBase____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVPrivateStoreBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVNameBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVGuildBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharScreenBoardUserChar__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharScreenBoardUserChar__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharScreenBoardUserChar__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharScreenBoardUserChar__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CharScreenBoardUserChar__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVSpeechBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVSpeechBD____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNameBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNameBD____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVCharScreenBoardBase____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVCharScreenBoardBase____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPrivateStoreBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVPrivateStoreBD____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVGuildBD____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVGuildBD____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddCharBD_ScreenBDMgr__IAEXGABVNiPoint3__W4NameBoardType_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddCharBD_ScreenBDMgr__IAEXGABVNiPoint3__W4NameBoardType_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddCharBD_ScreenBDMgr__IAEXGABVNiPoint3__W4NameBoardType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBDMgr__QAE_NXZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBDMgr__QAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBDMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateScreenGeometryData_ScreenBoardGeometry__IAEPAVNiScreenElementsData__VNiPoint2__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBoardGeometry__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBoardGeometry__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBoardGeometry__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBoardGeometry__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ScreenBoardGeometry__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBoardGeometry__QAE_PAVScreenBoardTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBoardGeometry__QAE_PAVScreenBoardTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBoardGeometry__QAE_PAVScreenBoardTexture___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBoardGeometry__QAE_PAVScreenBoardTexture___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ScreenBoardGeometry__QAE_PAVScreenBoardTexture___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__SetBoardInfo_ScreenBoardGeometry__QAEXABUBoardInfo_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetBoardInfo_ScreenBoardGeometry__QAEXABUBoardInfo_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetBoardInfo_ScreenBoardGeometry__QAEXABUBoardInfo_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetBoardInfo_ScreenBoardGeometry__QAEXABUBoardInfo_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitGuildBD_ScreenBDMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitGuildBD_ScreenBDMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitPrivateStoreBD_ScreenBDMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitPrivateStoreBD_ScreenBDMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitPrivateStoreBD_ScreenBDMgr__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddPrivateStoreBD_ScreenBDMgr__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitSpeechBD_ScreenBDMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitSpeechBD_ScreenBDMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitSpeechBD_ScreenBDMgr__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddSpeechBD_ScreenBDMgr__QAEXGPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddSpeechBD_ScreenBDMgr__QAEXGPADEE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DescInfo_ScreenBoardTexture__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0DescInfo_ScreenBoardTexture__QAE_PAV1_V__NiPointer_VNiSourceTexture____H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0DescInfo_ScreenBoardTexture__QAE_PAV1_V__NiPointer_VNiSourceTexture____H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0DescInfo_ScreenBoardTexture__QAE_PAV1_V__NiPointer_VNiSourceTexture____H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0DescInfo_ScreenBoardTexture__QAE_PAV1_V__NiPointer_VNiSourceTexture____H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__TextOutA_ScreenBoardTexture__QAE_AV__NiPointer_VDescInfo_ScreenBoardTexture____PBDK_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__TextOutA_ScreenBoardTexture__QAE_AV__NiPointer_VDescInfo_ScreenBoardTexture____PBDK_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__TextOutA_ScreenBoardTexture__QAE_AV__NiPointer_VDescInfo_ScreenBoardTexture____PBDK_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBoardTexture__QAE_NUtagSIZE__W4Type_Font__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBoardTexture__QAE_NUtagSIZE__W4Type_Font__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBoardTexture__QAE_NUtagSIZE__W4Type_Font__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBoardTexture__QAE_NUtagSIZE__W4Type_Font__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBoardTexture__QAE_NUtagSIZE__W4Type_Font__H_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Init_ScreenBoardTexture__QAE_NUtagSIZE__W4Type_Font__H_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___1SpeechBD__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_SpeechBD__QAEXPAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_SpeechBD__QAEXPAVNiTexture__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_SpeechBD__QAEXPAVNiTexture__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_SpeechBD__QAEXPAVNiTexture__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0SpeechBD__QAE_PAVNiTexture__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GMCommandWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GMCommandWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GMCommandWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GMPrisonWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GMPrisonWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GMPrisonWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GMPrisonWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitWindow_LinkFrameWork__IAE_NG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitKeyMap_LinkFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1LinkFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1LinkFrameWork__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__NcMapLoginReq_LinkFrameWork__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitWindow_LoadingFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitKeyMap_LoadingFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1LoadingFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1LoadingFrameWork__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVITimer____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0FrameWorkTimer__QAE_MKPAVPgFrameWork___Z_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_m_kTimerList_ITimer__1V__NiTList_PAVITimer____A__YAXXZ_1();
// void __usercall _unwindfunclet__Draw_CHairShopFrameWork__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_CHairShopFrameWork__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessMsg_CHairShopFrameWork__UAEXIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeAvatarGender_CHairShopFrameWork__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CHairShopFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CHairShopFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitShadow_CHairShopFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopFrameWork__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_16(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_19(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__InitBackgroundScene_CHairShopFrameWork__IAE_NXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopOkCancelWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CHairShopOkCancelWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CHairShopOkCancelWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopViewCtrlWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CHairShopViewCtrlWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CHairShopViewCtrlWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CColorIcon__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CHairShopwin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CColorIcon__SAPAV1_HHPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CColorIcon__SAPAV1_HHPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CColorIcon__SAPAV1_HHPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CHairShopwin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CHairShopwin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateFaceList_CHairShopwin__AAEXEE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshColorIcon_CHairShopwin__AAEXEE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ActivateCheckAddBtn_CHairShopwin__AAEXE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopwin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopwin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopwin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopwin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopwin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CHairShopwin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__LoadData_ActionInfoTable__KAPAVActionInfoSet__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_KPAVActionInfoSet____UAEPAXI_Z_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_m_kCharMap_ActionInfoTable__1V__NiTMap_KPAVActionInfoSet____A__YAXXZ_0();
void __cdecl _unwindfunclet_____F_m_kMobMap_ActionInfoTable__1V__NiTMap_KPAVActionInfoSet____A__YAXXZ_0();
void __cdecl _unwindfunclet_____F_m_kRidePetMap_ActionInfoTable__1V__NiTMap_KPAVActionInfoSet____A__YAXXZ_0();
void __cdecl _unwindfunclet_____F_m_kMoverMap_ActionInfoTable__1V__NiTMap_KPAVActionInfoSet____A__YAXXZ_0();
void __cdecl _unwindfunclet_____F_m_kPetMap_ActionInfoTable__1V__NiTMap_KPAVActionInfoSet____A__YAXXZ_0();
// void __usercall _unwindfunclet__AddTextKeys__YAXPAVNiControllerSequence__PAUAddingTextKeys___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAUAttackSequence____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAUSkillSequence____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddAttMultiDmg_AttackSequenceManager__QAE_NFFIGKK_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ClearAttSeq_AttackSequenceManager__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__ClearAttSeq_AttackSequenceManager__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__ClearSkillSeq_AttackSequenceManager__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__ClearSkillSeq_AttackSequenceManager__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__ApplicateAttackSeqImmediately_AttackSequenceManager__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ApplicateAttackSeqImmediately_AttackSequenceManager__QAEX_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1AttackSequenceManager__UAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeFaceTextureShape_Avatar__QAE_NPAUPROTO_AVATAR_SHAPE_INFO___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeHairTypeShape_Avatar__QAE_NPAUPROTO_AVATAR_SHAPE_INFO___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVAbStateInst____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AbStateInfectee__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AbStateInfectee__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1JumpProcessor__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CRidePetCtl__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestInfoViewMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestInfoViewMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____GRecord_NsABVPicking__QAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ImmediatelyMetamorphosis_Char__QAE_NG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__IsAbStateAction_Char__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_38(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_49(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_51(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_53(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_55(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_57(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_59(int a1<ebp>);
// void __usercall _unwindfunclet___1Char__MAE_XZ_61(int a1<ebp>);
// void __usercall _unwindfunclet__CatchOscillationTime_Char__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CatchOscillationTime_Char__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Metamorphosis_Char__QAE_NG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UnMetamorphosis_Char__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetNode_LinkedEffect__QAE_NPAVNiNode__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetNode_LinkedEffect__QAE_NPAVNiNode__G_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetNode_LinkedEffect__QAE_NPAVNiNode__G_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_68(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_69(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_38(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_41(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_42(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_44(int a1<ebp>);
// void __usercall _unwindfunclet___0Char__IAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet__InitViewApply_Char__MAE_N_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RidePet_Char__QAEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RideOn_Char__QAE_NPAV1_V__NiPointer_VNiNode_____NI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RideOn_Char__QAE_NPAV1_V__NiPointer_VNiNode_____NI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__RideOn_Char__QAE_NPAV1_V__NiPointer_VNiNode_____NI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__RideOn_Char__QAE_NPAV1_V__NiPointer_VNiNode_____NI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Shoot_Char__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CSpactralGlow_Shader_Controller__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CSpactralGlow_Shader_Controller__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CSpactralGlow_Shader_Controller__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetTarget_CSpactralGlow_Shader_Controller__QAE_NPAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetTarget_CSpactralGlow_Shader_Controller__QAE_NPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetCartoonShader_CarToonShader__QAE_NPAVNiNode___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SetCartoonShader_CarToonShader__QAE_NPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetCartoonShader_CarToonShader__QAE_NPAVNiNode___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__SetCartoonShader_CarToonShader__QAE_NPAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetCartoonShader_CarToonShader__QAE_NPAVNiNode___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__ShaderSetting_Geometry_CSpactralGlow_Shader_Controller__IAE_NPAVNiGeometry___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessData_Find_EF_ExtraData__UAE_AW4TS_RESULT_Ns_TourScene__PAVNiAVObject__PAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CarToonShader__IAE_XZ_0(int a1<ebp>);
unsigned int __cdecl _unwindfunclet__NormalSetting_CSpactralGlow_Shader_Controller__IAE_NXZ_0();
// void __usercall _unwindfunclet__SetupRecursive_CSpactralGlow_Shader_Controller__QAE_NPAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetupRecursive_CSpactralGlow_Shader_Controller__QAE_NPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0JumpProcessor__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0JumpProcessor__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionMgr__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionMgr__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionMgr__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionMgr__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionMgr__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionMgr__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1ActionMgr__UAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ActionMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_PAVChar____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVChar____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVChar____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CharMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddCharQue_CharMgr__QAEPAVChar__EEABVNiPoint3__0I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddMover_CharMgr__QAEPAVMover__KGHEABVNiPoint3__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddAvatar_CharMgr__QAEPAVAvatar__PAUPROTO_AVATARINFORMATION__ABVNiPoint3__1I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddAvatar_CharMgr__QAEPAVAvatar__PAUPROTO_AVATAR_SHAPE_INFO__ABVNiPoint3__1I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1CharMgr__QAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0CharMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CharMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CharMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0CharMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddMob_CharMgr__QAEPAVChar__GGABVNiPoint3__0_N1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddMob_CharMgr__QAEPAVChar__GGABVNiPoint3__0_N1_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddCharQue_CharMgr__QAEPAVChar__PAUPROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddPet_CharMgr__QAEPAVPet__KGABVNiPoint3__0PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_KV__NiPointer_VNiActorManager______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_KV__NiPointer_VCharSet______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_KV__NiPointer_VNiNode______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_EV__NiPointer_VNiNode______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_KV__NiPointer_VNiSourceTexture______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAnimationController_CharResMgr__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAnimationController_CharResMgr__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetRidePetActor_CharResMgr__QAEPAVNiActorManager__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetRidePetActor_CharResMgr__QAEPAVNiActorManager__G_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetMobActor_CharResMgr__QAEPAVNiActorManager__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetMobActor_CharResMgr__QAEPAVNiActorManager__G_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetCharSet_CharResMgr__QAEPAVCharSet__EEG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetHairDetailTexture_CharResMgr__QAEPAVNiSourceTexture__KPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetFaceTattoo_CharResMgr__QAEPAVNiSourceTexture__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__LoadCharSetRes_CharResMgr__QAE_NE_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFaceTexture_CharResMgr__QAE_NE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFaceTexture_CharResMgr__QAE_NE_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__PreLoadItemUgradeTextureEffects_CharResMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetMoverActor_CharResMgr__QAEPAVNiActorManager__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetPetActor_CharResMgr__QAEPAVNiActorManager__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetPetActor_CharResMgr__QAEPAVNiActorManager__K_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetHouse_CharResMgr__QAEPAVNiNode__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetHouse_CharResMgr__QAEPAVNiNode__K_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetHouse_CharResMgr__QAEPAVNiNode__K_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetHair_CharResMgr__QAEPAVNiNode__EEEEPBD0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetHair_CharResMgr__QAEPAVNiNode__EEEEPBD0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetHair_CharResMgr__QAEPAVNiNode__EEEEPBD0_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetHair_CharResMgr__QAEPAVNiNode__EEEEPBD0_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairTexture2TargetNode_CharResMgr__QAEXPAVNiNode__EEPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairTexture2TargetNode_CharResMgr__QAEXPAVNiNode__EEPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairTexture2TargetNode_CharResMgr__QAEXPAVNiNode__EEPBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetSubItem_CharResMgr__QAEPAVNiNode__PBDEE0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetSubItem_CharResMgr__QAEPAVNiNode__PBDEE0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetSubItem_CharResMgr__QAEPAVNiNode__PBDEE0_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetSubItem_CharResMgr__QAEPAVNiNode__PBDEE0_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__GetItem_CharResMgr__QAEPAVNiNode__GE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetItem_CharResMgr__QAEPAVNiNode__GE_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_41(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_44(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_46(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_49(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_50(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_51(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_53(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_54(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_55(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_56(int a1<ebp>);
// void __usercall _unwindfunclet___1CharResMgr__QAE_XZ_57(int a1<ebp>);
// void __usercall _unwindfunclet__GetCharActor_CharResMgr__QAEPAVNiActorManager__EEI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetCharActor_CharResMgr__QAEPAVNiActorManager__EEI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___0CharResMgr__QAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCharActorAndBaseSet_CharResMgr__IAE_NEE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCharActorAndBaseSet_CharResMgr__IAE_NEE_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetClosedEyeFromMap_CharResMgr__IAEPAVNiSourceTexture__EEG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetQuestInfoFromMap_CharResMgr__IAEPAVNiNode__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AttachProperty_NiAVObject__QAEXPAVNiProperty___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetItemFromMap_CharResMgr__IAEPAVNiNode__GE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Erase____Tree_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture_____std___2__0A__std___std__IAEXPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_string_DU__char(int a1<ebp>);
// void __usercall _unwindfunclet__erase____Tree_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture_____std___2__0A__std___std__QAE_AV___Tree_iterator_V___Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_strin(int a1<ebp>);
// void __usercall _unwindfunclet___0___Tree_V___Tmap_traits_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__0A__std___std__QAE___QAV01__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__QAEAAV__NiPointer_VNiControllerSequence____ABK_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture_____std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture_____std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__bas(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture_____std___2__std__QAEAAV__NiPointer_VNiTexture____ABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture_____std___2__std__QAEAAV__NiPointer_VNiTexture____ABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VNiTexture_____std___2__std__QAEAAV__NiPointer_VNiTexture____ABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__GetByInxName_ItemInfoTab__SAPAUItemInfo__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___Insert____Tree_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std___3__0A__std___std__IAE_AV___Tree_iterator_V___Tree_val_V___Tmap_traits_PAVNiActorManage(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std______Tree_val_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__les(int a1<ebp>);
// void __usercall _unwindfunclet___Erase____Tree_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std___3__0A__std___std__IAEXPAU_Node____Tree_nod_V___Tmap_traits_PAVNiActorManager__V__map_KV(int a1<ebp>);
// void __usercall _unwindfunclet__erase____Tree_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std___3__0A__std___std__QAE_AV___Tree_iterator_V___Tree_val_V___Tmap_traits_PAVNiActorManager_(int a1<ebp>);
// void __usercall _unwindfunclet___Linsert____Tree_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std___3__0A__std___std__QAE_AU__pair_V___Tree_iterator_V___Tree_val_V___Tmap_traits_PAVNiAc(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std___3__std__QAEAAV__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPoint(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std___3__std__QAEAAV__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPoin_(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std___3__std__QAEAAV__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPoi_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharSet__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____GCharSet__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__TextureFace_CharShape__QAE_NPAVNiTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetSubItem_CharShape__QAEPAVNiNode__W4LinkIndex_1_PBD11W4AttachType_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSubItem_CharShape__QAEPAVNiNode__W4LinkIndex_1_PBD11W4AttachType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__TextureFace_CharShape__QAE_NPAVNiNode__PAVNiTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__TextureFaceTattoo_CharShape__QAE_NPAVNiTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairParts_CharShape__AAEXEE_NPBD1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateFaceShape_CharShape__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetUpgradeTextureEff_ItemUpGrade__IAE_NPAVNiNode__EPAV__list_PADV__allocator_PAD_std___std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetUpgradeTextureEff_ItemUpGrade__IAE_NPAVNiNode__EPAV__list_PADV__allocator_PAD_std___std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetUpgradeTextureEff_ItemUpGrade__IAE_NPAVNiNode__EPAV__list_PADV__allocator_PAD_std___std___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__RemoveAllSubItem_CharShape__QAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetCharModelPart_CharShape__IAE_NPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__HideAllHair_CharShape__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__HideAllHair_CharShape__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairDetailMap_CharShape__QAE_NI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairDetailMap_CharShape__QAE_NI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairDetailMap_CharShape__QAE_NI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetHairDetailMap_CharShape__QAE_NI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1CharShape__UAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0CharShape__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CharShape__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CharShape__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CharShape__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CharShape__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CharShape__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0CharShape__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__UpGradeItem_ItemUpGrade__QAE_NPAVItem__PAVNiNode__W4ItemEquipEnum___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpGradeItem_ItemUpGrade__QAE_NPAVItem__PAVNiNode__W4ItemEquipEnum___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__EquipSubItem_CharShape__QAEXPAUItemInfo__PAUItemViewInfo___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__EquipSubItem_CharShape__QAEXPAUItemInfo__PAUItemViewInfo___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeBoneLODController_CharShape__IAE_NHPAVNiGeometry__00_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeBoneLODController_CharShape__IAE_NHPAVNiGeometry__00_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeGeom_CharShape__IAE_NAAPAVNiGeometry__PAV2_H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeGeom_CharShape__IAE_NAAPAVNiGeometry__PAV2_H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeGeom_CharShape__IAE_NAAPAVNiGeometry__PAV2_H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeGeom_CharShape__IAE_NAAPAVNiGeometry__PAV2_H_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__SetBody_CharShape__QAE_NPAVCharSet___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetLeg_CharShape__QAE_NPAVCharSet___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetShoes_CharShape__QAE_NPAVCharSet___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerList_PAVNiGeometry____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNiGeometry____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNiGeometry____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1FindBoneNode__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1FindBoneNode__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0FindBoneNode__QAE_PAPAVNiNode__HPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0FindBoneNode__QAE_PAPAVNiNode__HPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MainChar__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MainChar__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MainChar__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__TryMove_MainChar__QAE_NM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__TryMove8_MainChar__QAE_NM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_V__NiPointer_VNiTexture______UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateCharacter_PortraitStudio__SAPAVChar__IIIIIG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetMobPortrait_PortraitTextureBuffer__SAPAVNiTexture__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetMoverPortrait_PortraitTextureBuffer__SAPAVNiTexture__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetPetPortrait_PortraitTextureBuffer__SAPAVNiTexture__K_Z_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kMoverFaceTextureList_PortraitTextureBuffer__0V__NiTList_V__NiPointer_VNiTexture______A__YAXXZ_1();
void __cdecl _unwindfunclet_____F_ms_kPetFaceTextureList_PortraitTextureBuffer__0V__NiTList_V__NiPointer_VNiTexture______A__YAXXZ_1();
void __cdecl _unwindfunclet_____F_ms_kMobFaceTextureList_PortraitTextureBuffer__0V__NiTList_V__NiPointer_VNiTexture______A__YAXXZ_1();
void __cdecl _unwindfunclet_____F_ms_kPetFaceTextureMap_PortraitTextureBuffer__0V__map_KPAVNiTexture__U__less_K_std__V__allocator_U__pair___CBKPAVNiTexture___std___3__std__A__YAXXZ_1();
void __cdecl _unwindfunclet_____F_ms_kMobFaceTextureMap_PortraitTextureBuffer__0V__map_GPAVNiTexture__U__less_G_std__V__allocator_U__pair___CBGPAVNiTexture___std___3__std__A__YAXXZ_1();
void __cdecl _unwindfunclet_____F_ms_kMoverFaceTextureMap_PortraitTextureBuffer__0V__map_KPAVNiTexture__U__less_K_std__V__allocator_U__pair___CBKPAVNiTexture___std___3__std__A__YAXXZ_1();
void __cdecl _unwindfunclet_____F_ms_kOtherFaceTextureMap_PortraitTextureBuffer__0V__map_KPAVStudio__U__less_K_std__V__allocator_U__pair___CBKPAVStudio___std___3__std__A__YAXXZ_1();
// void __usercall _unwindfunclet____G__NiTList_H__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1User__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1User__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiNode______V__NiPointer_VNiNode______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiSourceTexture______V__NiPointer_VNiSourceTexture______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_PAVDropItem____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PBDV__NiPointer_VNiNode______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PBDV__NiPointer_VNiSourceTexture______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_DropItemMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetNodeFromMap_DropItemMgr__IAEPAVNiNode__PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetTextureFromMap_DropItemMgr__IAEPAVNiSourceTexture__PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DropItemMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DropItemMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1DropItemMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1DropItemMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1DropItemMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1DropItemMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1DropItemMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__GetNode_DropItemMgr__IAEPAVNiNode__PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Get_DropItemMgr__IAEPAVNiNode__PBD0_N1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0DropItemMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0DropItemMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0DropItemMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0DropItemMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0DropItemMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0DropItemMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__Add_DropItemMgr__QAE_NGG_NABVNiPoint3__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Add_DropItemMgr__QAE_NGG_NABVNiPoint3__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVDropItem____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVDropItem____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0DynaminUV__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0DynaminUV__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1DynaminUV__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DynaminUV__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateStagesAndPasses_DynaminUV__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateStagesAndPasses_DynaminUV__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePipeline_DynaminUV__UAEIPAVNiGeometry__PBVNiSkinInstance__PAVNiGeometryBufferData__PBVNiPropertyState__PBVNiDynamicEffectState__ABVNiTransform__ABVNiBound___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePipeline_DynaminUV__UAEIPAVNiGeometry__PBVNiSkinInstance__PAVNiGeometryBufferData__PBVNiPropertyState__PBVNiDynamicEffectState__ABVNiTransform__ABVNiBound___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1Inventory__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0Inventory__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__FindMysteryVault_Inventory__QAE_NAATITEM_INVEN___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindMysteryVault_Inventory__QAE_NAATITEM_INVEN___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0Item__QAE_ABUSHINE_ITEM_STRUCT___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_27(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_28(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_29(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_30(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_31(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_32(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_33(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_34(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_35(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_36(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEPAI_Z_37(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_27(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_28(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_29(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_30(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_31(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_32(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_33(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_34(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_35(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_36(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_ABUSHINE_ITEM_STRUCT___Z_37(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_27(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_28(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_29(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_30(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_31(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_32(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_33(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_34(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_35(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_36(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAEAATITEM_INVEN__PAI_Z_37(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_27(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_28(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_29(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_30(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_31(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_32(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_33(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_34(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_35(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_36(int a1<ebp>);
// void __usercall _unwindfunclet__Create_Item__SAPAV1_PAUPROTO_ITEMPACKET_INFORM__AATITEM_INVEN__PAI_Z_37(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo___std______List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo___std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo___std___2__std__QAEPAU_Node____List_nod_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo___std__V__allocator_U__pair___CBV__basic_string_DU__char_traits(int a1<ebp>);
// void __usercall _unwindfunclet__BuildItemInfoMapByInxName_ItemInfoTab__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildItemInfoMapByInxName_ItemInfoTab__SAXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemRepairWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemRepairWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ItemRepairWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ItemRepairTask__SAXPAVIDirectMessenger___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0FadeObjectMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1FadeObject__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_FadeObject__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_FadeObject__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_FadeObject__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_FadeObjectMgr__QAEXV__NiPointer_VNiAVObject_____N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_FadeObjectMgr__QAEXV__NiPointer_VNiAVObject_____N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_PAVNiTimeController____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNiTimeController____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVNiTimeController____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1LightFogCtrl__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1LightFogCtrl__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1LightFogCtrl__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1LightFogCtrl__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1LightFogCtrl__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0CMagicCircleController__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CMagicCircleController__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CMagicCircleController__QAE_NPBDPAVPgNsTerrain__PAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_CMagicCircleController__QAE_NPBDPAVPgNsTerrain__PAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetFromMap_MapObjMgr__IAEPAVNiNode__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Shadow__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Shadow__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Shadow__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1Shadow__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1Shadow__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0Shadow__QAE_PBVNiPoint3__PAVPgNsTerrain__PAVNiNode__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Shadow__QAE_PBVNiPoint3__PAVPgNsTerrain__PAVNiNode__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0Shadow__QAE_PBVNiPoint3__PAVPgNsTerrain__PAVNiNode__I_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0Shadow__QAE_PBVNiPoint3__PAVPgNsTerrain__PAVNiNode__I_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0Shadow__QAE_PBVNiPoint3__PAVPgNsTerrain__PAVNiNode__I_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0Shadow__QAE_PBVNiPoint3__PAVPgNsTerrain__PAVNiNode__I_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0Shadow__QAE_PBVNiPoint3__PAVPgNsTerrain__PAVNiNode__I_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__SetNode_SkyCtrl__UAE_NPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhManagerMediator__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhManagerMediator__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1mhManagerMediator__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1_unnamed_type_m_kExtraLightScene__World__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ShDrawVisibleArray__YAXPAVNiCamera__AAVNiVisibleArray___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_World__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_World__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateClone_NiTextureAccumulator__UAEPAVNiObject__AAVNiCloningProcess___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateObject_NiTextureAccumulator__SAPAVNiObject__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NiTextureAccumulator__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NiTextureAccumulator__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__NowLoadingText_World__QAEXH_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_38(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_41(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_42(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_44(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_46(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_49(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_50(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_51(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_52(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_53(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_54(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_55(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_56(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_57(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_58(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_59(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_63(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_65(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_67(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_69(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_71(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_73(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_74(int a1<ebp>);
// void __usercall _unwindfunclet___1World__QAE_XZ_76(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_38(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_41(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_42(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_44(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_46(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_49(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_50(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_51(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_52(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_53(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_54(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_55(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_56(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_57(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_58(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_59(int a1<ebp>);
// void __usercall _unwindfunclet___0World__QAE_XZ_60(int a1<ebp>);
// void __usercall _unwindfunclet____GNiTextureAccumulator__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GNiTextureAccumulator__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0mhResTableManager__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseIndoor__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__InitCamera_World__QAE_NMM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitCamera_World__QAE_NMM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitLightFog_World__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitLightFog_World__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitLightFog_World__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitLightFog_World__QAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMapLightCtrl_World__QAE_NPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessMNode__YAXPAVNiNode__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessMNode__YAXPAVNiNode__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessMNode__YAXPAVNiNode__0_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessCDNode__YAXPAVNiNode__0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessCDNode__YAXPAVNiNode__0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessCDNode__YAXPAVNiNode__0_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_27(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_32(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_33(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_34(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_35(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_36(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_37(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_38(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_39(int a1<ebp>);
// void __usercall _unwindfunclet__LoadMap_World__QAE_N_N_Z_40(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiTexture______V__NiPointer_VNiTexture______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PBDV__NiPointer_VNiTexture______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateCharSelectMark_World__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateCharSelectMark_World__QAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitMisc_World__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitMisc_World__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitMisc_World__QAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__InitMisc_World__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitMisc_World__QAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__ClearMisc_World__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessData_FindRoomNode__UAE_AW4TS_RESULT_Ns_TourScene__PAVNiAVObject__PAX_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitPathFinding_World__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitPick_World__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ClearPick_World__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandidatePickObj_World__QAEPAVNiAVObject__ABVNiPoint3__0AAV3__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CheckRayIntersectGround_World__QAE_NAAVNiPoint3__000AAMAAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetAdvGroundPos_World__QAE_NVNiPoint3__0AAV2_PAM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetAdvGroundPos_World__QAE_NVNiPoint3__0AAV2_PAM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__PickMHObj_World__QAE_AW4PickEnum_1_W4mhState__ABVNiPoint3__1AAV4__N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_12(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_14(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_15(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_16(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_17(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_35(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_18(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_19(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_38(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_20(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_41(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_21(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_22(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_23(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_24(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_44(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_25(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_45(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_26(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_48(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_27(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_51(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_28(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_29(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_30(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_31(int a1<ebp>);
// void __usercall _unwindfunclet__InitScene_World__QAE_NXZ_32(int a1<ebp>);
// void __usercall _unwindfunclet__ClearScene_World__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateBuildingScene_World__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DetachChar_World__QAE_NPAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateScene_World__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateScene_World__QAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateScene_World__QAEXM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__PrepareShadow_World__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__PrepareShadow_World__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__DrawShadow_World__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetWorldMgrAddr_Server__QAEXPAUPROTO_NC_USER_LOGIN_ACK___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CVirtualServer__AAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AfterImgEff__IAE_PAVNiNode___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AfterImgEff__IAE_PAVNiNode___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AfterImgEff__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AfterImgEff__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetEffectNode_AfterImgEff__IAE_AV__NiPointer_VNiNode____I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetEffectNode_AfterImgEff__IAE_AV__NiPointer_VNiNode____I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetEffTexture_AfterImgEff__IAE_AV__NiPointer_VNiSourceTexture____I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetEffTexture_AfterImgEff__IAE_AV__NiPointer_VNiSourceTexture____I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetEffTexture_AfterImgEff__IAE_AV__NiPointer_VNiSourceTexture____I_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShape_AfterImgEff__QAE_NPAVNiNode__HPAUUpEffectData___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShape_AfterImgEff__QAE_NPAVNiNode__HPAUUpEffectData___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShape_AfterImgEff__QAE_NPAVNiNode__HPAUUpEffectData___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShape_AfterImgEff__QAE_NPAVNiNode__HPAUUpEffectData___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShape_AfterImgEff__QAE_NPAVNiNode__HPAUUpEffectData___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShape_AfterImgEff__QAE_NPAVNiNode__HPAUUpEffectData___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__CreateBySourceNode_AfterImgEff__SAPAV1_PAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateByWeaponNode_AfterImgEff__SAPAV1_PAVNiNode__HPAUUpEffectData___Z_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_m_mapEffectNode_AfterImgEff__1V__map_IV__NiPointer_VNiNode____U__less_I_std__V__allocator_U__pair___CBIV__NiPointer_VNiNode_____std___3__std__A__YAXXZ_1();
void __cdecl _unwindfunclet_____F_m_mapTexture_AfterImgEff__1V__map_IV__NiPointer_VNiSourceTexture____U__less_I_std__V__allocator_U__pair___CBIV__NiPointer_VNiSourceTexture_____std___3__std__A__YAXXZ_1();
// void __usercall _unwindfunclet___0AfterImgShape__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AfterImgShape__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0AfterImgShape__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0AfterImgShape__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1AfterImgShape__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AfterImgShape__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AfterImgShape__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1AfterImgShape__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape0__UAEXH_Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Init_AfterImgShape1__UAEXH_Z_17(int a1<ebp>);
// void __usercall _unwindfunclet___0ArrowEff__IAE_PAVNiNode___NPAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ArrowEff__IAE_PAVNiNode___NPAVChar___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ArrowEff__IAE_PAVNiNode___NPAVChar___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ArrowEff__IAE_PAVNiNode___NPAVChar___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ArrowEff__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ArrowEff__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ArrowEff__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ArrowEff__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Clone_ArrowEff__UAEPAVEffect__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AttachEff__IAE_PAVNiNode___NPAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0AttachEff__IAE_PAVNiNode___NPAVChar___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1AttachEff__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1AttachEff__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1IEffectHolder__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1IEffectHolder__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVAttachEff____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CDecalEffect__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CDecalEffect__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CDecalEffect__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CDecalEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CDecalEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CDecalEffect__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_V__NiPointer_VEffect______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VEffect______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VEffect______UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateProgramEff_Effect__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___1Effect__MAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet___0Effect__IAE_PAVNiNode___NPAVChar___Z_20(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCHazeScreenEffect__VCBaseObject____1VCRTTI__A__YAXXZ_0();
// void __usercall _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCHazeScreenEffect__VCBaseObject____1VCRTTI__A__YAXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVCharDecal____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_PAVCharDecal____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__RemoveAllDecal_DecalMgr__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DecalMgr__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DecalMgr__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1DecalMgr__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Update_DecalMgr__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Update_DecalMgr__QAEXM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetEffect_CDecalEffect__QAE_NPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddDecal_DecalMgr__QAEPAVCharDecal__PAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddDecal_DecalMgr__QAEPAVCharDecal__PAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddDecal_DecalMgr__QAEPAVCharDecal__PAVNiNode__MPAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddDecal_DecalMgr__QAEPAVCharDecal__PAVNiNode__MPAVChar___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddDecal_DecalMgr__QAEPAVCharDecal__PADMPAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddDecal_DecalMgr__QAEPAVCharDecal__PADMPAVChar___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddDecal_DecalMgr__QAEPAVCharDecal__PADMPAVChar___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVCharDecal____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVCharDecal____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_PAVEffect____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVEffect____PAVEffect____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_EffectMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateActionEffect_EffectMgr__QAEXPAUActionEffectInfo__IMPAVChar__1_NGPAVNiControllerSequence___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateActionEffect_EffectMgr__QAEXPAUActionEffectInfo__IMPAVChar__1_NGPAVNiControllerSequence___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateActionEffect_EffectMgr__QAEXPAUActionInfo__HPAVChar__1_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateActionEffect_EffectMgr__QAEXPAUActionInfo__HPAVChar__1_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_EffectMgr__QAEXPAUActionInfo__HPAVChar__1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Update_EffectMgr__QAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Update_EffectMgr__QAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Update_EffectMgr__QAEXM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Update_EffectMgr__QAEXM_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVEffect____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVEffect____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAttachEffect_EffectMgr__QAE_NPADGVNiPoint3__M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreatePigeonEffect_EffectMgr__QAE_NPAVChar__M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateLookAtEffect_EffectMgr__QAEPAVLookAtEffect__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateClientEffect_EffectMgr__QAEPAVClientEffect__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateClientEffect_EffectMgr__QAEPAVClientEffect__PADVNiPoint3___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateClientEffect_EffectMgr__QAEPAVClientEffect__PADG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateEffect_EffectMgr__QAEPAVEffect__PADVNiPoint3__1M_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateEffect_EffectMgr__QAEPAVEffect__PADVNiPoint3__1M_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateAttachEffect_EffectMgr__QAEPAVEffect__PADGVNiPoint3__M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateAttachEffect_EffectMgr__QAEPAVEffect__PADGVNiPoint3__M_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShootEff_EffectMgr__QAE_NPAD00PAVChar__1MMPAUDamageInfoSet__W4LastEffPos___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShootEff_EffectMgr__QAE_NPAD00PAVChar__1MMI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateShootEff_EffectMgr__QAE_NPADPAUActionEffectInfo__PAVChar__2MMFPAUDamageInfoSet__W4LastEffPos___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWeddingEffect_EffectMgr__QAE_NPADGM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWeddingEffect_EffectMgr__QAE_NPADGM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLightningShootEff_EffectMgr__QAE_NPAD0PAVChar__1MMPAUDamageInfoSet__W4LastEffPos___NG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateLookAtEffect_EffectMgr__QAEPAVLookAtEffect__PADVNiPoint3__PAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateLookAtEffect_EffectMgr__QAEPAVLookAtEffect__PADVNiPoint3__1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateAttachEffect_EffectMgr__QAEPAVEffect__PADPAVNiNode__PAVIEffectHolder__M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateAttachEffect_EffectMgr__QAEPAVEffect__PADPAVNiNode__PAVIEffectHolder__M_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_EffectMgr__QAE_NPADVNiPoint3__1MM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAttachEffect_EffectMgr__QAE_NAAKPAVNiNode__1M_NG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAttachScaleEffect_EffectMgr__QAE_NAAKPADPAVNiNode__MM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateAttachEffect_EffectMgr__QAEPAVEffect__PADPAVChar__W4EffPosEnum_AbnormalStateViewInfo__M_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__JustCreateAttachEffect_EffectMgr__QAEPAVEffect__PADPAVChar__W4EffPosEnum_AbnormalStateViewInfo__M_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAttachEffect_EffectMgr__QAE_NAAKPADPAVChar__W4EffPosEnum_AbnormalStateViewInfo__M_N444_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAniCtrlEffect_EffectMgr__QAE_NAAKPADPAVChar__W4EffPosEnum_AbnormalStateViewInfo__M_NG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateStretchEffect_EffectMgr__QAE_NPADVNiPoint3__1PAVChar__2M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Play_EffectMsg__QAE_NW4EFFECT_MESSAGE_TYPE___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMsg__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0EffectMsg__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1EffectMsg__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_12(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_15(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_16(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_17(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_18(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_19(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_20(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_21(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_22(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_23(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_24(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_25(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_26(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_27(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_28(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_29(int a1<ebp>);
// void __usercall _unwindfunclet__Load_EffectMsg__QAE_NXZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpEffect__QAE_PAVNiNode___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SpEffect__QAE_PAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SpEffect__QAE_PAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SpEffect__QAE_PAVNiNode___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1StretchEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Clone_StretchEffect__UAEPAVEffect__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____GExpEffect__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0WeddingEffect__QAE_PAVNiNode___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1WeddingEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEff__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEff__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEff__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_TextEffMgr__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_TextEffMgr__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateControllNode_TextEffMgr__IAEPAVNiNode__PAVNiTransformController__00PAVNiAlphaController__PAVNiScreenElements___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateControllNode_TextEffMgr__IAEPAVNiNode__PAVNiTransformController__00PAVNiAlphaController__PAVNiScreenElements___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateControllNode_TextEffMgr__IAEPAVNiNode__PAVNiTransformController__00PAVNiAlphaController__PAVNiScreenElements___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1TextEffMgr__QAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet__AddNumTextEff_TextEffMgr__QAEXGHW4TextEffColor_1__N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddMissTextEff_TextEffMgr__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddResistTextEff_TextEffMgr__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddBlockTextEff_TextEffMgr__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddImmuneTextEff_TextEffMgr__QAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_TextEffMgr__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_TextEffMgr__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_TextEffMgr__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_TextEffMgr__IAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_TextEffMgr__IAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateGeometry_TextEffMgr__IAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0TextEffMgr__QAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet__Init_TextEffMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_TextEffMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_TextEffMgr__QAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__Init_TextEffMgr__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_TextEffMgr__QAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAVTextEff____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVTextEff____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAVTextEff____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CBlindEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CBlindEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CBlindEffect__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CBlindEffect__QAE_NMM_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet___1CameraEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CameraEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CameraEffect__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CameraEffect__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CameraEffect__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CameraEffect__QAE_NMMII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CameraEffect__QAE_NMMII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CameraEffect__QAE_NMMII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Start_CameraEffect__QAE_NMMII_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ClientEffect__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVSoundGroup____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAVNiAudioSource____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create3DSource_SoundGroup__MAE_AV__NiPointer_VNiAudioSource____PAD_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create3DSource_SoundGroup__MAE_AV__NiPointer_VNiAudioSource____PAD_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create3DSource_SoundGroup__MAE_AV__NiPointer_VNiAudioSource____PAD_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAmbientSource_SoundGroup__MAE_AV__NiPointer_VNiAudioSource____PAD_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAmbientSource_SoundGroup__MAE_AV__NiPointer_VNiAudioSource____PAD_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAmbientSource_SoundGroup__MAE_AV__NiPointer_VNiAudioSource____PAD_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetTableSize_SoundGroupStatic__UAEXK_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetSound_SoundGroupStatic__QAEPAVNiAudioSource__AAVSoundIndex___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Get3DSound_SoundGroupStatic__QAEPAVNiAudioSource__AAVSoundIndex___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SoundGroup__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroup__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroup__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupStatic__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__PlaySoundA_SoundGroupDynamic__UAEPAVNiAudioSource__AAVSoundIndex___N1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Play3DSound_SoundGroupDynamic__UAEPAVNiAudioSource__AAVSoundIndex__PAVNiNode___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Play3DSound_SoundGroupDynamic__UAEPAVNiAudioSource__AAVSoundIndex__AAVNiPoint3___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSource_SoundGroupDynamic__MAE_AV__NiPointer_VNiAudioSource____I_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateSource_SoundGroupDynamic__MAE_AV__NiPointer_VNiAudioSource____I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__PushInRecycleList_SoundGroupDynamic__IAEXPAVNiAudioSource___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePlayingSource_SoundGroupDynamic__MAEXXZ_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kSoundGroupList_SoundGroup__1V__NiTList_PAVSoundGroup____A__YAXXZ_1();
// void __usercall _unwindfunclet___1__SpTList_PAX__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTList_PAUPlayingAreaInfo_SoundGroupAmbient____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTList_PAVIAmbientArea____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTList_V__NiPointer_VNiAudioSource______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupDynamic__UAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__Check3DSoundPlayable_SoundGroupFieldEffect__MAE_NABVNiPoint3___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupAmbient__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupAmbient__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupAmbient__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupAmbient__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupAmbient__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundGroupAmbient__UAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__LoadAreaTable_SoundGroupAmbient__QAEXPAD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__PlayBGM_SoundGroupBgm__QAEXPAD_NM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_V__NiPointer_VNiAudioSource______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VNiAudioSource______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VNiAudioSource______UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1SoundMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0SoundMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SoundMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SoundMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitializeSoundGroups_SoundMgr__IAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitializeSoundGroups_SoundMgr__IAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitializeSoundGroups_SoundMgr__IAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitializeSoundGroups_SoundMgr__IAE_NXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__InitializeSoundGroups_SoundMgr__IAE_NXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__InitializeSoundGroups_SoundMgr__IAE_NXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__InitializeSoundGroups_SoundMgr__IAE_NXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__Init_SoundMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_SoundMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Remove___NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VPgWin______QAE_AV__NiPointer_VPgWin____ABV2__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Remove___NiTPointerListBase_V__NiTPointerAllocator_I__V__NiPointer_VPgWin______QAE_AV__NiPointer_VPgWin____ABV2__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0SoundGroupInterface__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____GSoundGroupInterface__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SoundGroupAmbient__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SoundGroupAmbient__QAE_XZ_1(int a1<ebp>);
void __cdecl _unwindfunclet_____Eg_kSoundMgr__YAXXZ_0();
void __cdecl _unwindfunclet_____Eg_kSoundMgr__YAXXZ_1();
void __cdecl _unwindfunclet_____Eg_kSoundMgr__YAXXZ_2();
// void __usercall _unwindfunclet___1__NiTPointerList_PAUWinPos_MachineOpt____UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__RegistereWinPostion_MachineOpt__SA_NPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__KeyMapConvertOldtoNew_MachineOpt__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUWinPos_MachineOpt____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUWinPos_MachineOpt____UAEPAXI_Z_2(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kWinPosList_MachineOpt__1V__PgTList_PAUWinPos_MachineOpt____A__YAXXZ_0();
void __cdecl _unwindfunclet_____F_ms_kWinPosList_MachineOpt__1V__PgTList_PAUWinPos_MachineOpt____A__YAXXZ_2();
// void __usercall _unwindfunclet___1__NiTPointerList_V__NiPointer_VSkillUseRecord______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTList_PAUEmpowerReq_SkillEmpowerRequest____UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__RecordSkillUseByItemActionID_Skill__SAXGMMM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__RecordSkillUseByItemActionID_Skill__SAXGMMM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Update_Skill__SAXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DecreaseRecordTime_Skill__SAXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RecordSkillUse_Skill__SAXGMMM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__RecordSkillUse_Skill__SAXGMMM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VSkillUseRecord______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VSkillUseRecord______UAEPAXI_Z_2(int a1<ebp>);
void __cdecl _unwindfunclet_____F_m_kUseList_Skill__1V__PgTList_V__NiPointer_VSkillUseRecord______A__YAXXZ_0();
void __cdecl _unwindfunclet_____F_m_kUseList_Skill__1V__PgTList_V__NiPointer_VSkillUseRecord______A__YAXXZ_2();
void __cdecl _unwindfunclet_____F_ms_kReqList_SkillEmpowerRequest__0V__NiTList_PAUEmpowerReq_SkillEmpowerRequest____A__YAXXZ_1();
// void __usercall _unwindfunclet___0___Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo__V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo___std___2__0A__std___std__QAE_ABV__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_(int a1<ebp>);
// void __usercall _unwindfunclet___0___Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo__V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUItemInfo___std___2__0A__std___std__QAE_ABV__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_(int a1<ebp>);
// void __usercall _unwindfunclet__DataProcess_ActSkillInfoTab__MAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__DataProcess_ActSkillInfoTab__MAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__DetachChildTask_ITask__QAE_AV__NiPointer_VITask____PAV1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DetachChildTask_ITask__QAE_AV__NiPointer_VITask____PAV1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ITask__QAE_PAV0__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ITask__QAE_PAV0__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ITask__QAE_PAV0__Z_2(int a1<ebp>);
void __cdecl _unwindfunclet_____E_ms_kRootTask_ITask__1V1_A__YAXXZ_0();
void __cdecl _unwindfunclet_____E_ms_kRootTask_ITask__1V1_A__YAXXZ_1();
void __cdecl _unwindfunclet_____E_ms_kRootTask_ITask__1V1_A__YAXXZ_2();
// void __usercall _unwindfunclet__OnStart_ItemUseTask__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnStart_ItemUseTask__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnStart_ItemUseTask__UAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnStart_ItemUseTask__UAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Recv_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK_MHDiceGameTask__QAEHPAUPROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetMoneyToString_MHDiceGameTask__QAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Recv_NC_DICE_TAISAI_GAME_JOIN_ACK_MHDiceGameTask__QAEHPAUPROTO_NC_DICE_TAISAI_GAME_JOIN_ACK___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetBettingInfo_MHDiceGameTask__QAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4DICE_TAISAI_BETTING___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetBettingInfo_MHDiceGameTask__QAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4DICE_TAISAI_BETTING___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetBettingInfo_MHDiceGameTask__QAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4DICE_TAISAI_BETTING___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetBettingInfo_MHDiceGameTask__QAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4DICE_TAISAI_BETTING___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Recv_NC_DICE_TAISAI_LARGE_AMOUNT_CMD_MHDiceGameTask__QAEHPAUPROTO_NC_DICE_TAISAI_LARGE_AMOUNT_CMD___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceGameTask__UAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceGameTask__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MHDiceGameTask__SAXPAVIDirectMessenger___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ScreenShot_UserName__YA_NPAVNiRenderer__PAUHWND____PADH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetValue_CSingleDataMap__QAEGV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetMaterialInfo_ProduceInfoTable__SAPAUMaterialInfo_1_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetMaterialInfo_ProduceInfoTable__SAXV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetMaterialInfo_ProduceInfoTable__SAXV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetMaterialInfo_ProduceInfoTable__SAXV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__QuestResultMessage_CClientQuest__QAEXPAUQUEST_REWARD_QUEST_DATA___Z_0(int a1<ebp>);
unsigned int __cdecl _unwindfunclet__GetQuest_QuestDataMgr__SAPAVCQuest__XZ_0();
unsigned int __cdecl _unwindfunclet__GetQuest_QuestDataMgr__SAPAVCQuest__XZ_1();
unsigned int __cdecl _unwindfunclet__GetQuest_QuestDataMgr__SAPAVCQuest__XZ_2();
void __cdecl _unwindfunclet_____FkQuest__1__GetQuest_QuestDataMgr__SAPAVCQuest__XZ_YAXXZ_0();
// void __usercall _unwindfunclet_____FkQuest__1__GetQuest_QuestDataMgr__SAPAVCQuest__XZ_YAXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAUQuestMC____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAUQUEST_DATA____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__G__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_G__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_G__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUQuestMC____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUQuestMC____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUQUEST_DATA____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUQUEST_DATA____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAUProgressQuestMobGroup_QuestHelperMgr____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUProgressQuestMobGroup_QuestHelperMgr____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUProgressQuestMobGroup_QuestHelperMgr____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestHelperMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestHelperMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestHelperMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestHelperMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestHelperMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1QuestHelperMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__AddMobID_QuestHelperMgr__IAEXPAUQUEST_DATA___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddMobID_QuestHelperMgr__IAEXPAUQUEST_DATA___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__IsMobGroup_QuestHelperMgr__QAE_NPAUQUEST_DATA__AAG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddMobConditionText_QuestHelperMgr__QAEXPAUQUEST_DATA__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__G_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddMobConditionText_QuestHelperMgr__QAEXPAUQUEST_DATA__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__G_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddMobConditionText_QuestHelperMgr__QAEXPAUQUEST_DATA__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__G_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddItemConditionText_QuestHelperMgr__QAEXPAUQUEST_DATA__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__G_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddLevelConditionText_QuestHelperMgr__QAEXPAUQUEST_DATA__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddLocationConditionText_QuestHelperMgr__QAEXPAUQUEST_DATA__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddConditionText_QuestHelperMgr__QAEPBDPAUQUEST_DATA__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddConditionToolTip_QuestHelperMgr__QAEXPAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____HDU__char_traits_D_std__V__allocator_D_1__std__YA_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__0_PBDABV10__Z_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_pQuestMCList_QuestHelperMgr__2V__PgTList_PAUQuestMC____A__YAXXZ_0();
void __cdecl _unwindfunclet_____F_ms_pQuestMCList_QuestHelperMgr__2V__PgTList_PAUQuestMC____A__YAXXZ_2();
// void __usercall _unwindfunclet___0Scenario_15__QAE_PAVPgFrameWork__GGE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0Scenario_15__QAE_PAVPgFrameWork__GGE_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GScenario_15__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RunScenario_ScenarioMgr__QAEXGGE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CGuildMonster__AAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetInstance_CGuildMonster__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ReleaseInstance_CGuildMonster__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ReleaseInstance_CGuildMonster__SAXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildListTask__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildListTask__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListTask__SAXPAVIDirectMessenger___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildListTask__SAXPAVIDirectMessenger___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GGuildListTask__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Recv_NC_GUILD_MEMBER_JOIN_REQ_GuildMemberTask__MAEXPAUPROTO_NC_GUILD_MEMBER_JOIN_REQ___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ_GuildMemberTask__IAEXPAUPROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildMemberTask__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildMemberTask__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__NiTPointerAllocator_I__PAUGUILD_HISTORY____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnStart_GuildTask__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTask__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTask__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTask__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTask__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTask__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTask__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildTask__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameCache__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameCache__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildNameCache__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildTask__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildTask__SAXPAVIDirectMessenger___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUGUILD_HISTORY____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAUGUILD_HISTORY____UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuild__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuild__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuild__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuild__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuild__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuild__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildNameCache__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__DelColliData_mhCollisionManager__QAE_AW4mhReturnType__V__NiPointer_VNiNode____W4mhCollisionType___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DelObject_mhCollisionManager__QAE_AW4mhReturnType__PAVmhObject__W4mhCollisionType___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetCollisionStyleInCallBack_mhCollisionManager__KA_AW4mhColliStyle__W42_AAVIntersect_NiCollisionGroup__W4mhConditionBOOL__2_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetCollisionStyleInCallBack_mhCollisionManager__KA_AW4mhColliStyle__W42_AAVIntersect_NiCollisionGroup__W4mhConditionBOOL__2_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SetCollisionStyleInCallBack_mhCollisionManager__KA_AW4mhColliStyle__W42_AAVIntersect_NiCollisionGroup__W4mhConditionBOOL__2_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetCollisionStyleInCallBack_mhCollisionManager__KA_AW4mhColliStyle__W42_AAVIntersect_NiCollisionGroup__W4mhConditionBOOL__2_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Callback_mhCollisionManager__KAHAAVIntersect_NiCollisionGroup___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_mhCollisionManager__QAE_AW4mhReturnType__PAVmhObject__W4mhCollisionType___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddColliData_mhCollisionManager__QAE_AW4mhReturnType__V__NiPointer_VNiNode____AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4mhCollisionType___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetupRoom_MiniHouseIndoor__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_MiniHouseRoomInfo___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetupRoom_MiniHouseIndoor__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_MiniHouseRoomInfo___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__DetachFocusEff_MiniHouseIndoor__QAEXPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AttachFocusEff_MiniHouseIndoor__QAEXPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AttachFocusEff_MiniHouseIndoor__QAEXPAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddScene_MiniHouseIndoor__IAEPAVNiAVObject__PAV2_AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4mhObjSceneType___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AttachAlphaProp_MiniHouseIndoor__QAE_NPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeCharColiNode_MiniHouseIndoor__QAE_AW4mhReturnType__PAVNiNode__W4mhCollisionType__M_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeCharColiNode_MiniHouseIndoor__QAE_AW4mhReturnType__PAVNiNode__W4mhCollisionType__M_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeCharColiNode_MiniHouseIndoor__QAE_AW4mhReturnType__PAVNiNode__W4mhCollisionType__M_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__MakeCharColiNode_MiniHouseIndoor__QAE_AW4mhReturnType__PAVNiNode__W4mhCollisionType__M_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__MakeCharColiNode_MiniHouseIndoor__QAE_AW4mhReturnType__PAVNiNode__W4mhCollisionType__M_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__MakeCharColiNode_MiniHouseIndoor__QAE_AW4mhReturnType__PAVNiNode__W4mhCollisionType__M_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__ActMHEmotion_MiniHouseIndoor__QAEXAAUFURNITURE_EMOTION_INFO___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindNearestActPos_MiniHouseIndoor__QAEEPAVmhObject__AAVNiPoint3___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindNearestActPos_MiniHouseIndoor__QAEEPAVmhObject__AAVNiPoint3___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetObjEffMsg_MiniHouseIndoor__QAEXPADHG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__PickedCopyObjColiNode_MiniHouseIndoor__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__PickedCopyObjColiNode_MiniHouseIndoor__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__DelCopyObjColiNode_MiniHouseIndoor__IAEXPAVNiNode__W4mhCollisionType___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DelCopyObjColiNode_MiniHouseIndoor__IAEXPAVNiNode__W4mhCollisionType___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__DelCopyObjColiNode_MiniHouseIndoor__IAEXPAVNiNode__W4mhCollisionType___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetFocusObj_MiniHouseIndoor__QAEXPAVmhObject___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Terminate_MiniHouseIndoor__QAE_AW4mhReturnType__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Terminate_MiniHouseIndoor__QAE_AW4mhReturnType__XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddLight_MiniHouseIndoor__IAE_AW4mhReturnType__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddLight_MiniHouseIndoor__IAE_AW4mhReturnType__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddLight_MiniHouseIndoor__IAE_AW4mhReturnType__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddLight_MiniHouseIndoor__IAE_AW4mhReturnType__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__GetLight_MiniHouseIndoor__IAE_AV__NiPointer_VNiAmbientLight____V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeLight_MiniHouseIndoor__QAE_AW4mhReturnType__V__NiPointer_VNiNode____V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ChangeLight_MiniHouseIndoor__QAE_AW4mhReturnType__V__NiPointer_VNiNode____V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseIndoor__QAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet__SetupScene_MiniHouseIndoor__IAEXV__NiPointer_VNiNode_____Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetupScene_MiniHouseIndoor__IAEXV__NiPointer_VNiNode_____Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetupScene_MiniHouseIndoor__IAEXV__NiPointer_VNiNode_____Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseIndoor__QAE_AW4mhReturnType__V__NiPointer_VNiNode_____Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseIndoor__QAE_AW4mhReturnType__V__NiPointer_VNiNode_____Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseIndoor__QAE_AW4mhReturnType__V__NiPointer_VNiNode_____Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ResElement__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ResElement__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ResElement__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CMiniHouseMgr__QAE_XZ_2(int a1<ebp>);
void __cdecl _unwindfunclet_____Fg_kMiniHouseMgr__YAXXZ_2();
// void __usercall _unwindfunclet__FindRootNode_mhObjectManager__QAEPAVNiNode__PAV2__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObjectManager__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObjectManager__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_mhObjectManager__QAE_AW4mhReturnType__HPAVmhResTableElement__HUmhObjBindType_mhObject__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_mhObjectManager__QAE_AW4mhReturnType__HPAVmhResTableElement__HUmhObjBindType_mhObject__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_mhObjectManager__QAE_AW4mhReturnType__HPAVmhResTableElement__HUmhObjBindType_mhObject__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_mhObjectManager__QAE_AW4mhReturnType__HPAVmhResTableElement__HUmhObjBindType_mhObject__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_mhObjectManager__QAE_AW4mhReturnType__HPAVmhResTableElement__HUmhObjBindType_mhObject__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0mhObject__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0mhObject__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0mhObject__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObject__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObject__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObject__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObject__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObject__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1mhObject__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhResTableElement__QAE_AW4mhReturnType__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__GW4mhObjectBindStyle__W4mhObjectAction__HHHV34__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhResTableElement__QAE_AW4mhReturnType__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__GW4mhObjectBindStyle__W4mhObjectAction__HHHV34__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhResTableElement__QAE_AW4mhReturnType__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__GW4mhObjectBindStyle__W4mhObjectAction__HHHV34__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddTexElement_mhResTableManager__QAE_AW4mhReturnType__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddTexElement_mhResTableManager__QAE_AW4mhReturnType__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddTexElement_mhResTableManager__QAE_AW4mhReturnType__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1mhResTableManager__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhResTableManager__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1mhResTableManager__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1mhResTableManager__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CullNoneTexType_MiniHouseRoomInfo__IAEXV__NiPointer_VNiNode____AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CullNoneTexType_MiniHouseRoomInfo__IAEXV__NiPointer_VNiNode____AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__1_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CullNoneTexType_MiniHouseRoomInfo__IAEXV__NiPointer_VNiNode____AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__1_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Join_MiniHouseRoomInfo__QAE_AW4mhReturnType__V__NiPointer_VNiNode____0UTexStyleGroup_1__Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__GetNodeMaxNum_mhMiscUtil__SAHPAVNiNode__AAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetLoadModelFileName_mhMiscUtil__SAXAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4ModelType_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetLoadModelFileName_mhMiscUtil__SAXAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__W4ModelType_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0mhItemInvIconWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetLock_mhItemInvIconWin__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetLock_mhItemInvIconWin__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhItemInvIconWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhItemInvIconWin__SAPAV1_HHIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhItemInvIconWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ShowWeb_mhEditRoomWin__QAEXPAE_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0mhEditRoomWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0mhEditRoomWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0mhEditRoomWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0mhEditRoomWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0mhEditRoomWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhEditRoomWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhEditRoomWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEditRoomWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhEmotionWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhEmotionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhEmotionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhGuestBookWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhGuestBookWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ShowWeb_mhGuestBookWin__QAEXPAEAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhGuestBookWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhGuestBookWin2__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhGuestBookWin2__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhGuestBookWin2__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhGuestBookWin2__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ShowWeb_mhGuestBookWin2__QAEXPAEAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhInfoWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhInfoWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshGuestPage_mhInfoWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshGuestPage_mhInfoWin__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshGuestPage_mhInfoWin__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshGuestPage_mhInfoWin__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInfoWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet___1mhInputPassWordWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhInputPassWordWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhInputPassWordWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhInputPassWordWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1mhJoinWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhJoinWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0mhJoinWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhJoinWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhJoinWin__SAPAV1_PAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhJoinWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhMinimizeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhMinimizeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhMouseControlWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhMouseControlWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetToolTipText_mhPortalListWin__IAEXHAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RefreshSlideBar_mhPortalListWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhPortalListWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1mhPortalListWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0mhPortalListWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhPortalListWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhPortalListWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhPortalListWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhRepairObjWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhRepairObjWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhRepairObjWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0mhSettingWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0mhSettingWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0mhSettingWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1mhSettingWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhSettingWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhSettingWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhSettingWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAUPROTO_CHARGEDBUFF_INFO____PAUPROTO_CHARGEDBUFF_INFO____UAEPAXI_Z_0(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_kUsingList_ChargedItemList__1V__NiTList_PAUPROTO_CHARGEDBUFF_INFO____A__YAXXZ_1();
// void __usercall _unwindfunclet___1NetMgr__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NetMgr__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_NetMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Init_NetMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_NetMgr__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1TokenArgument__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1TokenArgument__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1TokenArgument__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1TokenArgument__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1TokenArgument__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__or_Read_OptionReader__QAEEPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ORTable__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ORTable__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ORTable__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1OptionReader__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1OptionReader__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1OptionReader__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1OptionReader__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1OptionReader__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1OptionReader__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1OptionReader__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ORTable__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ORTable__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ORTable__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionReader__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionReader__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionReader__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionReader__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionReader__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionReader__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0OptionReader__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__l_makelist___List_VORRecord____AAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__l_makelist___List_VORTable____AAEXG_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__lid_Call_MakePrimaryKey__UAEEPAVORRecord__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__lid_Call_RecordDataCompareArgument__UAEEPAVORRecord__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ort_MakePrimaryKey_ORTable__QAEEPAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__orr_GetFieldData_ORRecord__QAEPAXPADPAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ort_FindData_ORTable__QAEPAXPAD00HPAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ort_FindData_ORTable__QAEPAXPAD00HPAH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ort_RecordBuffer_ORTable__QAEPAXH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ort_RecordBuffer_ORTable__QAEPAXPAD0H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectFrom_OptionReader__QAEPAXTORToken__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectFromOrder_OptionReader__QAEPAXTORToken__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectFromOrder_OptionReader__QAEPAXTORToken__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__or_Select_OptionReader__QAEPAXPADTORToken__0PAH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectFrom_OptionReader__QAEPAXTORToken__PAD1H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_MakePrimaryKey_OptionReader__QAEETORToken__PAD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__lid_Call_RecordNumber__UAEEPAVORRecord__G_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ort_RecordNum_ORTable__QAEHPAD0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ort_ReadData_ORTable__QAEEPAVORTokenReader___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_ExecRecordIn_OptionReader__AAEEPAVORTokenReader___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectFrom_OptionReader__QAEPAXTORToken__PADHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectCountFrom_OptionReader__QAEHTORToken___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectCountFrom_OptionReader__QAEHTORToken__PAD1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__or_SelectCountFrom_OptionReader__QAEHTORToken__PAD1_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__l_Enlargement___List_VORRecord____QAEEH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeddingEntryWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingEntryWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingEntryWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0WeddingInfoWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingInfoWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingInfoWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1WeddingProposeInputWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeddingProposeInputWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingProposeInputWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingProposeInputWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GMapLinkGateWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1WeddingProposeOutputWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1WeddingProposeOutputWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeddingProposeOutputWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingProposeOutputWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingProposeOutputWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1WeddingProposeResultWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeddingProposeResultWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingProposeResultWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_WeddingProposeResultWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_WeddingTask__SAXPAVIDirectMessenger___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Dest_val_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___std__U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____2__std__YAXAAV__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___0_PAU__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer(int a1<ebp>);
// void __usercall _unwindfunclet__AddTimer_DirectionController__QAE_NV__NiPointer_VTimerController_____Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddController_DirectionControllers__QAE_NABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VDirectionController_____Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddController_DirectionControllers__QAE_NABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VDirectionController_____Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_31(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_33(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_35(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_37(int a1<ebp>);
// void __usercall _unwindfunclet__CreateMetamorphosisDirection__YA_AV__NiPointer_VDirectionControllers____PAVChar___Z_28(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VDirectionController_____std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VDirectionController____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VDirectionController_____std___2__0A__std___std__QAEPAU_Node____Tree_(int a1<ebp>);
// void __usercall _unwindfunclet___0DirectionControllers__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DirectionControllers__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1DirectionControllers__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1DirectionControllers__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet____GDirectionController__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyHallOfFameWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyHallOfFameWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyHallOfFameWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyItemRewardInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetDisable_GuildAcademyItemRewardInvWin__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetDisable_GuildAcademyItemRewardInvWin__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyItemRewardInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyItemRewardInvWin__SAPAV1_HHIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyItemRewardInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyItemRewardWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyItemRewardWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyItemRewardWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyItemRewardWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnClickApplyBtn_GuildAcademyItemRewardWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyMenuWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyMenuWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyMenuWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnClickLeaveBtn_GuildAcademyMenuWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyMoneyRewardWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyMoneyRewardWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyMoneyRewardWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyMoneyRewardWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyNoticeEditorWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyNoticeEditorWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyNoticeEditorWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyRankingWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyRankingWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyRankingWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__AddGuildInfo_GuildAcademySelectWin__IAEXABUGuildInfo_1__Z_26(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademySelectWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademySelectWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademySelectWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetGuildList_GuildAcademySelectWin__QAEXPAUSHINE_GUILD_ACADEMY_LIST___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildAcademySelectWin__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildAcademySelectWin__IAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildAcademySelectWin__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildAcademySelectWin__IAEXXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildAcademySelectWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildAcademySelectWin__IAEXXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__DisplayInfoSetting_GuildAcademySelectWin__IAEXXZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyStorageInvWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyStorageWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyStorageWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyStorageWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyStorageTabWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyStorageTabWin__SAPAV1_HHPAVPgSprData__PAVPgWin__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyStorageInvWin__SAPAV1_HHIPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyStorageInvWin__SAPAV1_HHIPAVPgWin___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyStorageInvWin__SAPAV1_HHIPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyStorageWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyStorageWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyStorageWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GGuildAcademyStorageWin__MAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GGuildAcademyStorageWin__MAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____GGuildAcademyStorageWin__MAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__InvalidateAcademy_GuildAcademyWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GuildAcademyWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyMemberTask__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyMemberTask__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademySelectTask__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademySelectTask__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectTask__SAXPAVIDirectMessenger___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademySelectTask__SAXPAVIDirectMessenger___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnStart_GuildAcademyTask__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyTask__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyTask__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GuildAcademyTask__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyTask__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyTask__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GuildAcademyTask__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GuildAcademyTask__SAXPAVIDirectMessenger___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuildAcademy__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuildAcademy__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuildAcademy__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuildAcademy__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CClientGuildAcademy__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0CClientGuildAcademy__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetContents_GuildAcademyStorage__SA_NPAUPROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_ACK___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GRaidInfo__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0RaidInfo__QAE_XZ_0(int a1<ebp>);
void __cdecl _unwindfunclet_____Fg_kRaidinfo__YAXXZ_0();
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1EntryIconWin__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionWin__MAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionPartyWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionLootOptionWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionLootOptionWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionLootOptionWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionLootOptionWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionLootOptionWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionLootOptionWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionLootOptionWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionLootOptionWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionLootOptionWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionLootOptionWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionLootOptionWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1ExpeditionLootOptionWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0EntryIconWin__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionMemberAddWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionMemberAddWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionMemberAddWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionWin__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0ExpeditionPartyWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionPartyWin__MAE_NPAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionPartyWin__MAE_NPAVPgFrameWork__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionPartyWin__MAE_NPAVPgFrameWork__I_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootOptionWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootOptionWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootOptionWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_EntryIconWin__MAE_NPAVNiAVObject__HHPAVPgWin__II_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EntryIconWin__SAPAV1_PAVNiAVObject__HHPAVPgWin__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_EntryIconWin__SAPAV1_PAVNiAVObject__HHPAVPgWin__II_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionMemberAddWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionMemberAddWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionPartyWin__SAPAV1_PAVPgFrameWork__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionPartyWin__SAPAV1_PAVPgFrameWork__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionLootSelectWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionLootSelectWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionLootOptionWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ExpeditionLootOptionWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_ExpeditionLootSelectWin__MAEXIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_ExpeditionWin__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_ExpeditionPartyWin__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_ExpeditionLootSelectWin__UAEXM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_ExpeditionLootSelectWin__UAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_ExpeditionLootSelectWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CoinEditWin__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__2_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CoinEditWin__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__2_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CoinEditWin__MAE_NHHIIPAVPgWin__W4Type_EditWin__II_NW43Font__2_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CoinEditWin__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__2_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CoinEditWin__SAPAV1_HHIIPAVPgWin__W4Type_EditWin__II_NW43Font__2_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CoinExchangeWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_CoinExchangeWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CoinExchangeWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_CoinExchangeWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleMiniWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleMiniWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleHouseCardWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleHouseCardWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Recv_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD_MHDiceGameTask__QAEHPAUPROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MHChipEffect__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MHChipEffect__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MHChipEffect__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnBettingButton_MiniHouseDiceGameWin__QAEXI_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnBettingButton_MiniHouseDiceGameWin__QAEXI_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__OnMinimalize_MiniHouseDiceGameWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnClickRanking_MiniHouseDiceGameWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_mhMinimizeDiceGameWin__MAEXIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CloseWin_mhDiceHelpWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0MHDiceRewardMoneyWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceRewardMoneyWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceRewardMoneyWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceRewardMoneyWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceRewardMoneyWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceRewardMoneyWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceRewardMoneyWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MHDiceRewardMoneyWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__OnCmdOk_MHDiceRewardMoneyWin__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_mhDiceRateSheetWin__MAEXIJ_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnBettingButton_GambleDiceGameWin__QAEXI_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnBettingButton_GambleDiceGameWin__QAEXI_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__OnMinimalize_GambleDiceGameWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnClickRanking_GambleDiceGameWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ChipAnimation_GambleDiceGameWin__QAEXW4DICE_TAISAI_BETTING__W4BETTING_LEVEL_MONEY__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_MiniHouseDiceGameWin__MAEXIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_MiniHouseDiceGameWin__MAEXIJ_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_MiniHouseDiceGameWin__MAEXIJ_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__ChipAnimation_MiniHouseDiceGameWin__QAEXW4DICE_TAISAI_BETTING__W4BETTING_LEVEL_MONEY__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_mhDiceHelpWin__MAEXIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMedal_mhDiceRankWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRateSheetWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRateSheetWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRateSheetWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_GambleDiceGameWin__MAEXIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_GambleDiceGameWin__MAEXIJ_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_GambleDiceGameWin__MAEXIJ_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AllReset_GambleDiceGameWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_MiniHouseDiceGameWin__UAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_MiniHouseDiceGameWin__UAEXM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_GambleDiceGameWin__UAEXM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_GambleDiceGameWin__UAEXM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateMeWin_GambleDiceGameWin__UAEXM_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___0MiniHouseDiceGameWin__IAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_42(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_46(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___1MiniHouseDiceGameWin__MAE_XZ_50(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___0GambleDiceGameWin__IAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_37(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_39(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_40(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_42(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_43(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_45(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_46(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_47(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___1GambleDiceGameWin__MAE_XZ_50(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_BettingBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IHPADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_BettingBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IHPADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ToggleBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IHPADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_ToggleBut__SAPAV1_HHPAVPgSprData__PAVPgWin__IHPADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseDiceGameWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniHouseDiceGameWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeButton_MiniHouseDiceGameWin__QAEPAVBettingBut__PAVNiAVObject__PBDAAH2IPAVNiSourceTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeButton_MiniHouseDiceGameWin__QAEPAVBettingBut__PAVNiAVObject__PBDAAH2IPAVNiSourceTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeButton_MiniHouseDiceGameWin__QAEPAVBettingBut__PAVNiAVObject__PBDAAH2IPAVNiSourceTexture___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhMinimizeDiceGameWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhMinimizeDiceGameWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhDiceHelpWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhDiceHelpWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MHDiceRewardMoneyWin__SAPAV1_PAVPgFrameWork__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MHDiceRewardMoneyWin__SAPAV1_PAVPgFrameWork__H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhDiceRateSheetWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhDiceRateSheetWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleDiceGameWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GambleDiceGameWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeButton_GambleDiceGameWin__QAEPAVBettingBut__PAVNiAVObject__PBDAAH2IPAVNiSourceTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeButton_GambleDiceGameWin__QAEPAVBettingBut__PAVNiAVObject__PBDAAH2IPAVNiSourceTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeButton_GambleDiceGameWin__QAEPAVBettingBut__PAVNiAVObject__PBDAAH2IPAVNiSourceTexture___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MHDiceRewardMoneyWin__MAE_NPAVPgFrameWork__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MiniHouseDiceGameWin__MAE_NPAVPgFrameWork___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GambleDiceGameWin__MAE_NPAVPgFrameWork___Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhDiceRankWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_mhDiceRankWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateList_mhDiceRankWin__QAEXV__vector_UDiceRankInfo__V__allocator_UDiceRankInfo___std___std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateList_mhDiceRankWin__QAEXV__vector_UDiceRankInfo__V__allocator_UDiceRankInfo___std___std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_mhDiceRankWin__MAEXIJ_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceHelpWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceHelpWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceHelpWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceHelpWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceHelpWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceHelpWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceHelpWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_mhDiceRankWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet___0SlotEntry__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SlotMachineWin__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SlotMachineWin__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SlotMachineWin__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_MiniSlotMachineWin__MAEXIJ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CloseWin_GBSlotHelpWin__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__setup_SlotEntry__QAEXPAVNiAVObject__PADPAVPgWin__MM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SlotMachineWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SlotMachineWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SlotMachineWin__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1SlotMachineWin__MAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1SlotMachineWin__MAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1SlotMachineWin__MAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_15(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_19(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_21(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_23(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_25(int a1<ebp>);
// void __usercall _unwindfunclet__Create_SlotMachineWin__MAE_NPAVPgFrameWork___Z_26(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlotMachineWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_SlotMachineWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniSlotMachineWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_MiniSlotMachineWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GBSlotHelpWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GBSlotHelpWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GBSlotRankWin__SAPAV1_PAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_GBSlotRankWin__SAPAV1_PAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateList_GBSlotRankWin__QAEXV__vector_USlotJackpotRankInfo__V__allocator_USlotJackpotRankInfo___std___std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdateList_GBSlotRankWin__QAEXV__vector_USlotJackpotRankInfo__V__allocator_USlotJackpotRankInfo___std___std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__OnCommand_GBSlotRankWin__MAEXIJ_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotRankWin__MAE_NPAVPgFrameWork___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotHelpWin__MAE_NPAVPgFrameWork___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotHelpWin__MAE_NPAVPgFrameWork___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotHelpWin__MAE_NPAVPgFrameWork___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotHelpWin__MAE_NPAVPgFrameWork___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotHelpWin__MAE_NPAVPgFrameWork___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotHelpWin__MAE_NPAVPgFrameWork___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__Create_GBSlotHelpWin__MAE_NPAVPgFrameWork___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__Act_MoverSlot__QAEXW4CharAniType___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RideOff_MoverSlot__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__ActSlot_Mover__QAEXW4CharAniType___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RideOff_Mover__QAEXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RideAllOff_Mover__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverSlot__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverSlot__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MoverSlot__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0MoverSlot__QAE_I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0MoverSlot__QAE_I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1Mover__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1Mover__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverSlot__SAPAV1_V__NiPointer_VNiNode____0IPBD1_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverSlot__SAPAV1_V__NiPointer_VNiNode____0IPBD1_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverSlot__SAPAV1_V__NiPointer_VNiNode____0IPBD1_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_MoverSlot__SAPAV1_V__NiPointer_VNiNode____0IPBD1_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__InitView_Mover__UAE_N_NI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitView_Mover__UAE_N_NI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTMap_W4CharAniType__PAUsSlotAniCode_MoverSlot____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GMover__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GMover__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetByMoverIdx_MoverSlotViewTab__SAPAUMoverSlotView__PBDI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CallSpawnerJS__YAXABV__basic_string__WU__char_traits__W_std__V__allocator__W_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CallSpawnerJSAndReturnValue__YA_AV__basic_string__WU__char_traits__W_std__V__allocator__W_2__std__ABV12__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Final_CMD5Checksum__IAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Final_CMD5Checksum__IAE_AV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__G_std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__GU__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__G_std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__GU__less_V__basic_stri(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__GU__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__G_std___2__std__QAEAAGABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitSingleDataArray_CSingleDataMap__QAEHPBDKK_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitSingleDataArray_CSingleDataMap__QAEHPBDKK_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixData__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixData__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1ItemMixData__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__ba(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__b_(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less__(int a1<ebp>);
// void __usercall _unwindfunclet___0ItemMixData__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Read_ItemMixData__QAEHPBDKK_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Read_ItemMixData__QAEHPBDKK_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Read_ItemMixData__QAEHPBDKK_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std___2__std__QAEAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1_ABV21__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std___2__std__QAEAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1_ABV21__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___A__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12_U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V12__std___2__std__QAEAAV__basic_string_DU__char_traits_D_std__V__allocator_D_2__1_ABV21__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0___Hash_V___Hmap_traits_GPAUQUEST_DATA__V__hash_compare_GU__less_G_std___stdext__V__allocator_U__pair___CBGPAUQUEST_DATA___std___std___00_std___std__QAE_ABV__hash_compare_GU__less_G_std___stdext__ABV__allocator_U__pair___CBGPAUQUEST_DATA___std___1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0___Hash_V___Hmap_traits_GPAUQUEST_DATA__V__hash_compare_GU__less_G_std___stdext__V__allocator_U__pair___CBGPAUQUEST_DATA___std___std___00_std___std__QAE_ABV__hash_compare_GU__less_G_std___stdext__ABV__allocator_U__pair___CBGPAUQUEST_DATA___std___1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CQuestData__QAE_PAVCDataReader___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestData__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CQuestData__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__SaveEncrypted_EncryptStream_Encrypt__QAE_NPADAAVIEncryptMethod_2__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__put___basic_ostream_DU__char_traits_D_std___std__QAEAAV12_D_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__put___basic_ostream_DU__char_traits_D_std___std__QAEAAV12_D_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__put___basic_ostream_DU__char_traits_D_std___std__QAEAAV12_D_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet___Init_locale_std__CAPAV_Locimp_12_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsTextCodeV0_3__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsTextCodeV0_3__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1NsTextCodeV0_3__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0NsTextCodeV0_3__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiNode______QAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiNode______QAEXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiNode______QAEXI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Ns_LoadNifFile__YAPAVNiNode__PBDPAVNiTexturePalette___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Ns_LoadNifFile__YAPAVNiNode__PBDPAVNiTexturePalette___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Ns_LoadNifFile__YAPAVNiNode__PBDPAVNiTexturePalette___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetInsertNode_NsMakeQuadScene__QAEPAVNiNode__HHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetInsertNode_NsMakeQuadScene__QAEPAVNiNode__HHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddObject_NsMakeQuadScene__QAEPAVNiAVObject__PAV2__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Optimize_NsMakeQuadScene__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiTexturingProperty______V__NiPointer_VNiTexturingProperty______UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiTexturingProperty______V__NiPointer_VNiTexturingProperty______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PBDV__NiPointer_VNiTexturingProperty______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNpSIF_Tool______V__NiPointer_VNpSIF_Tool______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PBDV__NiPointer_VNpSIF_Tool______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PBDV__NiPointer_VNiKFMTool______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiKFMTool______V__NiPointer_VNiKFMTool______UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiKFMTool______V__NiPointer_VNiKFMTool______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTStringTemplateMap_V__NiTPointerMap_PBDV__NiPointer_VNiActorManager______V__NiPointer_VNiActorManager______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerMap_PBDV__NiPointer_VNiActorManager______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetEntry_NsPgToonRegister_v2__MAEXPAVNiRenderer___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetEntry_NsPgToonRegister_v2__MAEXPAVNiRenderer___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgToonRegister_v2__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgToonRegister_v2__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgToonRegister_v2__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgToonRegister_v2__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgToonRegister_v2__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgToonRegister_v2__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgToonRegister_v2__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgToonRegister_v2__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1INpShader__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1INpShader__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1INpShader__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1INpShader__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Setup_INpShader__UAE_NPAVNiGeometry__PAVNiRenderer__III_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateObject_NsPgToonExtraData__SAPAVNiObject__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__PresetLine_NsPgCatoonShader__QAE_NPAVNiD3DPass___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateStagesAndPasses_NsPgCatoonShader__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePipeline_NsPgCatoonShader__UAEIPAVNiGeometry__PBVNiSkinInstance__PAVNiGeometryBufferData__PBVNiPropertyState__PBVNiDynamicEffectState__ABVNiTransform__ABVNiBound___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePipeline_NsPgCatoonShader__UAEIPAVNiGeometry__PBVNiSkinInstance__PAVNiGeometryBufferData__PBVNiPropertyState__PBVNiDynamicEffectState__ABVNiTransform__ABVNiBound___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__UpdatePipeline_NsPgCatoonShader__UAEIPAVNiGeometry__PBVNiSkinInstance__PAVNiGeometryBufferData__PBVNiPropertyState__PBVNiDynamicEffectState__ABVNiTransform__ABVNiBound___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___0NsPgCatoonShader__QAE_PBD_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1NsPgCatoonShader__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__SetupGeometry_NsPgCatoonShader__UAE_NPAVNiGeometry___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetupGeometry_NsPgCatoonShader__UAE_NPAVNiGeometry___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetupGeometry_NsPgCatoonShader__UAE_NPAVNiGeometry___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetupGeometry_NsPgCatoonShader__UAE_NPAVNiGeometry___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__ClearResultsArray_NsABVPicking__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindIntersectionsNode_NsABVPicking__QAE_NABVNiPoint3__0PAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindIntersectionsABV_NsABVPicking__QAE_AW4FindABV_1_ABVNiPoint3__0PAVNiCollisionData__PAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindIntersectionsABV_NsABVPicking__QAE_AW4FindABV_1_ABVNiPoint3__0PAVNiCollisionData__PAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__FindIntersectionsABV_NsABVPicking__QAE_AW4FindABV_1_ABVNiPoint3__0PAVNiCollisionData__PAVNiNode___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__FindIntersectionsABV_NsABVPicking__QAE_AW4FindABV_1_ABVNiPoint3__0PAVNiCollisionData__PAVNiNode___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__FindIntersectionsTriBasedGeom_NsABVPicking__QAE_NABVNiPoint3__0PAVNiTriBasedGeom___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__FindIntersectionsTriBasedGeom_NsABVPicking__QAE_NABVNiPoint3__0PAVNiTriBasedGeom___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsABVPicking__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsABVPicking__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetNextTriShape_NsDecal__IAEPAVNiTriShape__I_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__GetNextTriShape_NsDecal__IAEPAVNiTriShape__I_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__GetNextTriShape_NsDecal__IAEPAVNiTriShape__I_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__GetNextTriShape_NsDecal__IAEPAVNiTriShape__I_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__GetNextTriShape_NsDecal__IAEPAVNiTriShape__I_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet___1NsDecal__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsDecal__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsDecal__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1NsDecal__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1NsDecal__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Init_NsDecal__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_NsDecal__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Init_NsDecal__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateVisController_NsFadeNode__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateVisController_NsFadeNode__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateVisController_NsFadeNode__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateVisController_NsFadeNode__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateVisController_NsFadeNode__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateVisController_NsFadeNode__IAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__RemoveAll___NiTArray_V__NiPointer_VNiGeometry______QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE__N_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFadeNode__QAE_PAVNiNode___N_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__IdleSetting2_NsFadeNode__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__FadeSetting2_NsFadeNode__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__FadeSetting2_NsFadeNode__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__FadeSetting2_NsFadeNode__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__FadeSetting2_NsFadeNode__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__FadeSetting2_NsFadeNode__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__FadeSetting2_NsFadeNode__IAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__FadeSetting2_NsFadeNode__IAEXXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet____GNiAlphaRefController__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFadeNode__UAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_8(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_9(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateAlphaController_NsFadeNode__IAEXXZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeData_NsFadeNode__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeData_NsFadeNode__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeData_NsFadeNode__QAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitFadeData_NsFadeNode__QAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___1NsShadowObject__QAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet__MakeLines_NsShadowObject__IAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultiEffect_NsShadowObject__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultiEffect_NsShadowObject__QAEX_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultiEffect_NsShadowObject__QAEX_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_12(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_15(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_17(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_19(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_20(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_21(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_22(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_23(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_24(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_25(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_26(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_27(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_28(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_29(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_30(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_31(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_32(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_48(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_33(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_34(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_49(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_35(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_36(int a1<ebp>);
// void __usercall _unwindfunclet___0NsShadowObject__IAE_XZ_52(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NsShadowObject__SAPAV1_PAVNiRenderer__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_NsShadowObject__SAPAV1_PAVNiRenderer__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Init_NsMergePortal__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__list_V__NiPointer_VNiAVObject____V__allocator_V__NiPointer_VNiAVObject_____std___std__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsMergePortal__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsMergePortal__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsMergePortal__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1NsMergePortal__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsMergePortal__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsMergePortal__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1NsMergePortal__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__process_NsMergePortal__QAEXPAVNiNode___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__process_NsMergePortal__QAEXPAVNiNode___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__process_NsMergePortal__QAEXPAVNiNode___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__process_NsMergePortal__QAEXPAVNiNode___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__GetImage2Image__YAPAVNiTexture__PBDPAPAMM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetImage2Image__YAPAVNiTexture__PBDPAPAMM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetImage2Image__YAPAVNiTexture__PBDPAPAMM_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__GetImage2Image__YAPAVNiTexture__PBDPAPAM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetImage2Image__YAPAVNiTexture__PBDPAPAM_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetDecal_PgNsTerrain__QAE_NMMMMPAVNiTriShape___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SetDecal_PgNsTerrain__QAE_NMMMMPAVNiTriShape___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CPgTerrainLayer_PgNsTerrain__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CPgTerrainLayer_PgNsTerrain__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CPgTerrainLayer_PgNsTerrain__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CPgTerrainLayer_PgNsTerrain__QAE_ABV01__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_move_PAVCPgTerrainLayer_PgNsTerrain__PAV12_V__allocator_VCPgTerrainLayer_PgNsTerrain___std__V12__std__YAPAVCPgTerrainLayer_PgNsTerrain__PAV12_00AAV__allocator_VCPgTerrainLayer_PgNsTerrain___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_def_fill_n_PAVCPgTerrainLayer_PgNsTerrain__IV12_V__allocator_VCPgTerrainLayer_PgNsTerrain___std__V12__std__YAXPAVCPgTerrainLayer_PgNsTerrain__IPBV12_AAV__allocator_VCPgTerrainLayer_PgNsTerrain___0_0U_Nonscalar_ptr_iterator_tag_0__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet_____Uninit_def_fill_n_PAVCPgTerrainLayer_PgNsTerrain__IV12_V__allocator_VCPgTerrainLayer_PgNsTerrain___std__V12__std__YAXPAVCPgTerrainLayer_PgNsTerrain__IPBV12_AAV__allocator_VCPgTerrainLayer_PgNsTerrain___0_0U_Nonscalar_ptr_iterator_tag_0__Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1__map_Uval_PgNsTerrain__MVEVGLess_2_V__fast_pool_allocator_U__pair_Uval_PgNsTerrain__M_std__Udefault_user_allocator_new_delete_boost__Vwin32_mutex_pool_details_4__0CA__boost___std__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__ReceiveScriptNode_PgNsTerrain__QAE_NPAVINsFile___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__map_IIU__less_I_std__V__fast_pool_allocator_U__pair_II_std__Udefault_user_allocator_new_delete_boost__Vwin32_mutex_pool_details_4__0CA__boost___std__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CPgTerrainBlock_PgNsTerrain__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CPgTerrainBlock_PgNsTerrain__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CPgTerrainBlock_PgNsTerrain__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1CPgTerrainBlock_PgNsTerrain__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNsTerrain__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet__ReadInfoFile_PgNsTerrain__QAE_NPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ReadInfoFile_PgNsTerrain__QAE_NPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ReadInfoFile_PgNsTerrain__QAE_NPBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__ReadInfoFile_PgNsTerrain__QAE_NPBD_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_17(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__MakeGeometry_PgNsTerrain__QAE_NPAVCPgBlockObject_1__Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__GenerateBlock_PgNsTerrain__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1PgNsTerrain__QAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet__GenerateLayer_PgNsTerrain__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadData_PgNsTerrain__QAE_NPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadData_PgNsTerrain__QAE_NPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadData_PgNsTerrain__QAE_NPBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SwapProperties_NiPropertyState__QAEXAAV__NiTPointerList_V__NiPointer_VNiProperty_______Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MasterPropertyAccumulator__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1MasterPropertyAccumulator__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1MasterPropertyAccumulator__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1MasterPropertyAccumulator__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1MasterPropertyAccumulator__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__FinishAccumulating_MasterPropertyAccumulator__UAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__FinishAccumulating_MasterPropertyAccumulator__UAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Load_CDataDocument__QAE_NPBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Load_CDataDocument__QAE_NPBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Load_CDataDocument__QAE_NPBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Load_CDataDocument__QAE_NPBD_Z_3(int a1<ebp>);
unsigned int __cdecl _unwindfunclet__OnRenderSceneEnd_CPostProcessEffectManager__QAEXXZ_1();
// void __usercall _unwindfunclet__Destroy_CPostProcessEffectManager__SAXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Destroy_CPostProcessEffectManager__SAXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__Initialize_CPostProcessEffectManager__IAEXXZ_7(int a1<ebp>);
// void __usercall _unwindfunclet__GetInstance_CPostProcessEffectManager__SAPAV1_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetInstance_CPostProcessEffectManager__SAPAV1_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__GetInstance_CPostProcessEffectManager__SAPAV1_XZ_2(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCAfterImageEffect__VCBaseObject____1VCRTTI__A__YAXXZ_0();
// void __usercall _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCAfterImageEffect__VCBaseObject____1VCRTTI__A__YAXXZ_3(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCDepthOfFieldEffect__VCBaseObject____1VCRTTI__A__YAXXZ_0();
// void __usercall _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCDepthOfFieldEffect__VCBaseObject____1VCRTTI__A__YAXXZ_3(int a1<ebp>);
void __cdecl _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCGlowScreenEffect__VCBaseObject____1VCRTTI__A__YAXXZ_0();
// void __usercall _unwindfunclet_____F_ms_RTTI___CRTTIClass_VCGlowScreenEffect__VCBaseObject____1VCRTTI__A__YAXXZ_3(int a1<ebp>);
// void __usercall _unwindfunclet_____Buynode_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAVCAbstractProperty___std______Tree_val_V___Tmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAVCAbstractProperty__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAVCAbstractProperty___std___2__0A__std___std__QAEPAU_Node____Tree_nod_V___Tmap_traits_V__basic_string_DU__char_(int a1<ebp>);
// void __usercall _unwindfunclet__AddProperty_CRTTI__QAEXPAVCAbstractProperty___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddProperty_CRTTI__QAEXPAVCAbstractProperty___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CRTTI__QAE_KPBDPAV0_P6A_NXZ_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CRTTI__QAE_KPBDPAV0_P6A_NXZ_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CRTTI__QAE_KPBDPAV0_P6A_NXZ_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CRTTI__QAE_KPBDPAV0_P6A_NXZ_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CRTTI__QAE_KPBDPAV0_P6A_NXZ_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0HeightMapMaker__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__getline___basic_istream_DU__char_traits_D_std___std__QAEAAV12_PAD_JD_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__getline___basic_istream_DU__char_traits_D_std___std__QAEAAV12_PAD_JD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__write___basic_ostream_DU__char_traits_D_std___std__QAEAAV12_PBD_J_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__write___basic_ostream_DU__char_traits_D_std___std__QAEAAV12_PBD_J_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__write___basic_ostream_DU__char_traits_D_std___std__QAEAAV12_PBD_J_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet____GHeightMapMaker__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____GHeightMapMaker__UAEPAXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_fstream_DU__char_traits_D_std___std__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_fstream_DU__char_traits_D_std___std__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0__basic_fstream_DU__char_traits_D_std___std__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__basic_fstream_DU__char_traits_D_std___std__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1__basic_fstream_DU__char_traits_D_std___std__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__LoadHeightMap_HeightMapMaker__IAE_NPBDIABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadHeightMap_HeightMapMaker__IAE_NPBDIABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SaveHeightMap_HeightMapMaker__IAE_NPBDABV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeHeightMap_HeightMapMaker__QAE_NV__NiPointer_VNiNode____PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeHeightMap_HeightMapMaker__QAE_NV__NiPointer_VNiNode____PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeHeightMap_HeightMapMaker__QAE_NV__NiPointer_VNiNode____PBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__MakeHeightMap_HeightMapMaker__QAE_NV__NiPointer_VNiNode____PBD_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CHazeScreenEffect__UAE_NHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CHazeScreenEffect__UAE_NHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CHazeScreenEffect__UAE_NHH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CHazeScreenEffect__UAE_NHH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__RenderFrame_CHazeScreenEffect__UAEXPAVNiRenderTargetGroup___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__RenderFrame_CHazeScreenEffect__UAEXPAVNiRenderTargetGroup___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__RenderFrame_CHazeScreenEffect__UAEXPAVNiRenderTargetGroup___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetParentNode_CHazeScreenEffect__QAEXV__NiPointer_VNiNode____V__NiPointer_VNiCamera_____Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0HazeAccumulator__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0HazeAccumulator__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0HazeAccumulator__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0HazeAccumulator__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1HazeAccumulator__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1HazeAccumulator__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1HazeAccumulator__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1HazeAccumulator__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1HazeAccumulator__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1HazeAccumulator__UAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1CHazeScreenEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CHazeScreenEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CHazeScreenEffect__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CHazeScreenEffect__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CHazeScreenEffect__QAE_PBD_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CHazeScreenEffect__QAE_PBD_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CHazeScreenEffect__QAE_PBD_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CHazeScreenEffect__QAE_PBD_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CHazeScreenEffect__QAE_PBD_N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CHazeScreenEffect__QAE_PBD_N_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CGlowScreenEffect__UAE_NHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CGlowScreenEffect__UAE_NHH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CGlowScreenEffect__UAE_NHH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CGlowScreenEffect__UAE_NHH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CGlowScreenEffect__UAE_NHH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___1CGlowScreenEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CGlowScreenEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CAfterImageEffect__UAE_NHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CAfterImageEffect__UAE_NHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CAfterImageEffect__UAE_NHH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CAfterImageEffect__UAE_NHH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__RenderFrame_CAfterImageEffect__UAEXPAVNiRenderTargetGroup___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CAfterImageEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CAfterImageEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CGlowScreenEffect__QAE_PBD_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CGlowScreenEffect__QAE_PBD_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CDepthOfFieldEffect__QAE_PBD_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CDepthOfFieldEffect__QAE_PBD_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CDepthOfFieldEffect__QAE_PBD_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0CDepthOfFieldEffect__QAE_PBD_N_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0CDepthOfFieldEffect__QAE_PBD_N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0CDepthOfFieldEffect__QAE_PBD_N_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CDepthOfFieldEffect__UAE_NHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CDepthOfFieldEffect__UAE_NHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CDepthOfFieldEffect__UAE_NHH_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CDepthOfFieldEffect__UAE_NHH_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CDepthOfFieldEffect__UAE_NHH_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CDepthOfFieldEffect__UAE_NHH_Z_11(int a1<ebp>);
unsigned int __cdecl _unwindfunclet__RenderFrame_CScreenEffect__UAEXPAVNiRenderTargetGroup___Z_0();
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NHH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NHH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NHH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NPAVNiRenderedTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NPAVNiRenderedTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NPAVNiRenderedTexture___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NPAVNiRenderedTexture___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateEffect_CScreenEffect__UAE_NPAVNiRenderedTexture___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___1CScreenEffect__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CScreenEffect__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CScreenEffect__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PgFrameMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgFrameMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgFrameMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PgFrameMgr__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgFrameMgr__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgFrameMgr__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1PgFrameMgr__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1PgFrameMgr__UAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1PgFrameMgr__UAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerMap_PAXPAVPgFrameWork____UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAX__UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_PAX__UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinFrame__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Compact___NiTArray_V__NiPointer_VNiAVObject______QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinSpr__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinText__SAPAV1_HHIIPAVPgFont__PAVPgWin__PADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinText__SAPAV1_HHIIPAVPgFont__PAVPgWin__PADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgWinSpr__MAE_NHHPAVNiSourceTexture___NIIIIPAVPgWin__PADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgWinSpr__MAE_NHHPAVPgSprData__PAVPgWin__PADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinText__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinText__IAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgWinText__MAE_NHHIIPAVPgFont__PAVPgWin__PADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_13(int a1<ebp>);
// void __usercall _unwindfunclet__SetMultilineText_PgWinText__UAEXPADH_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__RemovePropWithChild_PgUtil__SAXPAVNiAVObject__H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateScreenGeometryData_PgUtil__SAPAVNiScreenElementsData__IIIIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateScreenGeometryData_PgUtil__SAPAVNiScreenElementsData__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadNifFile_PgUtil__SAPAVNiNode__PBDPAVNiTexturePalette___N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadNifFile_PgUtil__SAPAVNiNode__PBDPAVNiTexturePalette___N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadNodeNifFile_PgUtil__SA_NPBDAAV__NiPointer_VNiNode____PAVNiTexturePalette___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateScreenGeometryDataFromTriShapeData_PgUtil__SAPAVNiScreenElementsData__PAVNiTriShapeData__AAH1AAI2MM_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinMgr__QAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_9(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_10(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_11(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_13(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_14(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_16(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinMgr__UAE_XZ_18(int a1<ebp>);
// void __usercall _unwindfunclet__PgInit_PgWinMgr__QAE_NXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__PgInit_PgWinMgr__QAE_NXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__PgInit_PgWinMgr__QAE_NXZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__ShowWin_PgWinMgr__QAE_NPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ShowWin_PgWinMgr__QAE_NPAVPgWin___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessInput_PgWinMgr__QAEX_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__ProcessInput_PgWinMgr__QAEX_N_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_PgWinMgr__QAEXPAVNiRenderer___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_PgWinMgr__QAEXPAVNiRenderer___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_PgWinMgr__QAEXPAVNiRenderer___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_PgWinMgr__QAEXPAVNiRenderer___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Draw_PgWinMgr__QAEXPAVNiRenderer___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__DestroyWin_PgWinMgr__QAEXPAVPgWin___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__DestroyAllWin_PgWinMgr__IAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Find_PgWinMgr__QAEPAVPgWin__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Find_PgWinMgr__QAEPAVPgWin__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Find_PgWinMgr__QAEPAVPgWin__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Find_PgWinMgr__QAEPAVPgWin__V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTPointerList_V__NiPointer_VPgWin______UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VPgWin______UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet____G__PgTList_V__NiPointer_VPgWin______UAEPAXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiSourceTexture___NHHII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiSourceTexture___NHHII_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiSourceTexture___NHHII_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiSourceTexture___NPBV__NiRect_I__I_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiSourceTexture___NPBV__NiRect_I__I_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiAVObject__PBDAAH2PAVNiSourceTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiAVObject__PBDAAH2PAVNiSourceTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgSprData__SAPAV1_PAVNiAVObject__PBDAAH2PAVNiSourceTexture___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Add_PgSprData__QAEXPAVNiScreenElementsData__IIHH_N_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Add_PgSprData__QAEXPAVNiScreenElementsData__IIHH_N_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Add_PgSprData__QAEXPAVNiScreenElementsData__IIHH_N_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__Add_PgSprData__QAE_NPAVNiAVObject__PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__Add_PgSprData__QAE_NPAVNiAVObject__PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSprData__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSprData__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSprData__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSprData__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___1PgSprData__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgSprData__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgSprData__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PgSprData__UAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreatePgHitTestBuff_PgHitTester_PgSprData__SAPAV12_PAVNiPixelData___NIIII_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_4(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_10(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_6(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_12(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_7(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_8(int a1<ebp>);
// void __usercall _unwindfunclet___0PgSpr__QAE_PAVPgSprData___Z_16(int a1<ebp>);
// void __usercall _unwindfunclet___1PgSpr__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0__NiTArray_V__NiPointer_VNiAlphaProperty______QAE_II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VPgHitTester_PgSprData______QAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VPgHitTester_PgSprData______QAEXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VPgHitTester_PgSprData______QAEXI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__Add_PgSprData__QAEXPAVNiAlphaProperty___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiAlphaProperty______QAEXI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiAlphaProperty______QAEXI_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetSize___NiTArray_V__NiPointer_VNiAlphaProperty______QAEXI_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVCBucketBlock____PAVCBucketBlock____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CBucketPool__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CBucketPool__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateBlock_CBucketPool__AAEPAVCBucketBlock__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__AllocBucket_CBucketBuffer__AAEPAUFontBucket__AAUtagSIZE___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CBucketBuffer__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CBucketBuffer__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0CBucketBuffer__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CBucketBuffer__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CBucketBuffer__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFontToBucket_CBucketBuffer__AAEXAAUFontRenderStuff__PADHPAUFontBucket___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFontToBucket_CBucketBuffer__AAEXAAUFontRenderStuff__PADHPAUFontBucket___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFontToBucket_CBucketBuffer__AAEXAAUFontRenderStuff__PADHPAUFontBucket__K_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFontToBucket_CBucketBuffer__AAEXAAUFontRenderStuff__PADHPAUFontBucket__K_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__Shutdown_CBucketBuffer__QAEXXZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0CSpFont__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CSpFont__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1CSpFont__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1CSpFont__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1CSpFont__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet____G__NiTPointerListBase_V__DFALL_PAVSpScreenText____PAVSpScreenText____UAEPAXI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_24(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA___N4HHHH_Z_34(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_18(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_20(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_22(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AddImeFontRenderPass_CSpFont__QAE_AW4AddFontPassResult_1_PAUScrTexturePass__HAAUtagRECT__PADAAVNiColorA__233HPAE_NHHHH_Z_32(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_14(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_16(int a1<ebp>);
// void __usercall _unwindfunclet__GetCandStrPos_CSpFont__QAE_NAAH0HAAUtagRECT__PAD2HPAE_NHHHH_Z_18(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTMap_GPAUFontBucket____UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNet__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgNet__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SpScreenGeometryClip__QAE_PAVNiScreenElementsData___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SpScreenText__QAE_PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0SpScreenText__QAE_PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0SpScreenText__QAE_PBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1SpScreenText__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1SpScreenText__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1SpScreenText__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__InitPass_SpScreenText__QAEXXZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0ScrTexturePass__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1ScrTexturePass__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__Create_PgWinLRBut__MAE_NHHPAVNiSourceTexture___NPBV__NiRect_I__IPAVPgWin__II_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgCursor__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgCursor__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetImage_PgCursor__UAE_NPAVNiSourceTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetImage_PgCursor__UAE_NPAVNiSourceTexture___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__SetImage_PgCursor__UAE_NPAVNiSourceTexture___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetImage_PgCursor__UAE_NPAVNiSourceTexture___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__CreateFromTex_PgCursor__SAPAV1_PAVNiRenderer__AAV__NiRect_H__IHPAVNiSourceTexture___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetDxSurfaceCursor_PgCursor__QAEXPAUIDirect3DSurface9___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__BuildNonIndexTriShape__YAPAVNiTriShape__PAV1__Z_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinCircleGauge__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinCircleGauge__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinCircleGauge__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinPasswdText__SAPAV1_HHIIPAVPgFont__PAVPgWin__PADI_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgWinPasswdText__SAPAV1_HHIIPAVPgFont__PAVPgWin__PADI_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinAbbreviateText__IAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinAbbreviateText__IAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinAbbreviateText__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinAbbreviateText__MAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__AbbreviateTextCmd_PgWinAbbreviateText__IAEXPAD0H_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet__CheckText_PgWinAbbreviateText__IAE_NPAD0H0_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__CheckText_PgWinAbbreviateText__IAE_NPAD0H0_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__CheckText_PgWinAbbreviateText__IAE_NPAD0H0_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateWin_PgImeEditWin__SAPAV1_PAUHINSTANCE____PAUHWND____IIH_NPAUtagRECT__PAUHFONT____2_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgEditWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgEditWin__MAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1__NiTMap_PAUHWND____PAVPgEditWin____UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgTextGeometry__QAE_PAVPgFont___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgTextGeometry__QAE_PAVPgFont___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgImeEditWin__MAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_3(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_8(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet___0PgWinCamera__QAE_XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinCamera__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinCamera__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1PgWinCamera__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLoopingAlphaAnim_PgWinAnim__SAPAVNiAlphaController__XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLoopingAlphaAnim_PgWinAnim__SAPAVNiAlphaController__XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLoopingAlphaAnim_PgWinAnim__SAPAVNiAlphaController__XZ_5(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLoopingAlphaAnim_PgWinAnim__SAPAVNiAlphaController__XZ_6(int a1<ebp>);
// void __usercall _unwindfunclet__CreateLoopingAlphaAnim_PgWinAnim__SAPAVNiAlphaController__XZ_7(int a1<ebp>);
// void __usercall _unwindfunclet___1PgSocket__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_35__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_35__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_35__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_35__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_123__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_123__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_123__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_58__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_58__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__MakeNode_NsFNC_58__UAE_NPAVINsFile__PAVNsTextCodeV0_2__PAV__map_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater____U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2_V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__NiPointer_VINsFile_NodeCreater_____std___2__std___Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__SetNodeCreater_NsFileReader__QAE_NPBDPAVINsFile_NodeCreater___Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__SetNodeCreater_NsFileReader__QAE_NPBDPAVINsFile_NodeCreater___Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_0(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_1(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_8(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_2(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_9(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_3(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_10(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_4(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_11(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_5(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_12(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_6(int a1<ebp>);
// void __usercall _unwindfunclet__LoadFile_NsFileReader__UAEPAVINsFile__PBD_Z_7(int a1<ebp>);
// void __usercall _unwindfunclet___1__set_IU__less_I_std__V__allocator_I_2__std__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFileReader__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFileReader__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFileReader__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1NsFileReader__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFileReader__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFileReader__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0NsFileReader__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___0INsFile__QAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___0INsFile__QAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___0INsFile__QAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1INsFile__UAE_XZ_0(int a1<ebp>);
// void __usercall _unwindfunclet___1INsFile__UAE_XZ_1(int a1<ebp>);
// void __usercall _unwindfunclet___1INsFile__UAE_XZ_2(int a1<ebp>);
// void __usercall _unwindfunclet___1INsFile__UAE_XZ_4(int a1<ebp>);
// void __usercall _unwindfunclet__ReadAseFile_CNsReadAse__QAE_NPBD_Z_0(int a1<ebp>);
void __cdecl dynamic_initializer_for__BlockedData__();
void __cdecl dynamic_initializer_for__CharCreateFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__CharSelectFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__Color::m_kDxBlackColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxRedColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxYellowColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxGoldColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxPurpleColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxBrownColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxPinkColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxEnemySideColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxNpcNameColor__();
void __cdecl dynamic_initializer_for__Color::m_kDxWinTitleColor__();
void __cdecl dynamic_initializer_for__Engine3D::ms_spCarToon__();
void __cdecl dynamic_initializer_for__Engine3D::ms_spToonExtraData__();
_UNKNOWN *__cdecl dynamic_initializer_for__Font::ms_kFontDefine__();
void __cdecl dynamic_initializer_for__Font::ms_spFont__();
void __cdecl dynamic_initializer_for__IconMgr::ms_kTextureMap__();
void __cdecl dynamic_initializer_for__IconMgr::ms_kAniTextureMap__();
void __cdecl dynamic_initializer_for__g_kItemMixDataTab__();
void __cdecl dynamic_initializer_for__ItemViewDummyTab::m_DummyMap__();
void __cdecl dynamic_initializer_for__MenuTexMgr::ms_aspTexture__();
void __cdecl dynamic_initializer_for__TextFilterTable::ms_listBlockedID__();
void __cdecl dynamic_initializer_for__MaskShader::m_RTTI__();
void __cdecl dynamic_initializer_for__MaskShader::m_spShader__();
void __cdecl dynamic_initializer_for__MaskShader::m_spNoAlphaBlendShader__();
void __cdecl dynamic_initializer_for__MaskShader_NoAlphaBlend::m_RTTI__();
void __cdecl dynamic_initializer_for__Cursor::ms_spDropIconTexture__();
void __cdecl dynamic_initializer_for__Cursor::ms_spCursorRenderCamera__();
void __cdecl dynamic_initializer_for__Cursor::ms_spCursorFrame__();
void __cdecl dynamic_initializer_for__BlockedData___0();
void __cdecl dynamic_initializer_for__g_kSingleDataMap__();
int __cdecl dynamic_initializer_for__NiFloatKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiBezFloatKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiPosKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiBezPosKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiRotKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiBezRotKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiBoolKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiColorKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiEulerRotKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiLinColorKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiLinFloatKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiLinPosKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiLinRotKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiTCBPosKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiTCBRotKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiTCBFloatKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiStepBoolKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiStepColorKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiStepFloatKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiStepPosKeyregisterloaderreturn__();
int __cdecl dynamic_initializer_for__NiStepRotKeyregisterloaderreturn__();
void __cdecl dynamic_initializer_for__NiAnimationSDMObject__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject__();
void __cdecl dynamic_initializer_for__NiMilesAudioSDMObject__();
void __cdecl dynamic_initializer_for__NiParticleSDMObject__();
void __cdecl dynamic_initializer_for__NiPortalSDMObject__();
void __cdecl mhStrings::_dynamic_initializer_for__mhResObjDefaultRootName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjDefaultRootName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomDefaultRootName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomWallName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomFloorName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomRoofName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomBlockName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomTexStyleTileName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomTexStyleCustomName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhStoCMapName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhCollisionParentName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjGeomParentName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhCollisionParentNamePick__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightNULL__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightNormal__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightMoveOK__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightMoveNO__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightRepair__();
void __cdecl mhStrings::_dynamic_initializer_for__mhCharColliNodeName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhCharColliRootNodeName__();
void __cdecl mhStrings::_dynamic_initializer_for__mhOtherCharColliRootName__();
void __cdecl dynamic_initializer_for__CRTTIClass_CBaseObject_CNullClass_::ms_RTTI__();
void __cdecl dynamic_initializer_for__CRTTIClass_CWorldConfig_CBaseObject_::ms_RTTI__();
void __cdecl dynamic_initializer_for__AccountFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__LoginWorldNetFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__ZoneLoginNetFrameWork::m_RTTI__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomWallName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomFloorName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomRoofName___0();
void __cdecl dynamic_initializer_for__m_kAttackedList__();
void __cdecl dynamic_initializer_for__GameFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__GameFrameWork::ms_strLauncher__();
void __cdecl dynamic_initializer_for__GameFrameWork::m_kOptionManager__();
void __cdecl dynamic_initializer_for__GameFrameWork::m_kWhisperCharID__();
void __cdecl dynamic_initializer_for__InvWin::m_RTTI__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spProposeTradeMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spInvitePartyMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spCancelMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spDelegatePartyMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spQuitPartyMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spFirePartyMemberMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spInviteGuildMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPartyLootSetupMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spFollowCharMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spMainCharUnMetamorphosis__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu0__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu1__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu2__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu3__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu4__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu5__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu6__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu7__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu8__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu9__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu10__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu11__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu12__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu13__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu14__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu15__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu16__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu17__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu18__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spResolutionMenu19__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spWhisper__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spTargetCharName__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spHighHolyPromise__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPlaceMemory0__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPlaceMemory1__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPlaceMemory2__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPlaceMemory3__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spPlaceMemory4__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spConfigRoom__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spShowBlog__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spChangeBlogAddr__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spKickGuest__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spSetArrModeOn__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spSetArrModeOff__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spReturnToInvMHItem__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spArrToInvMHItem__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spDeleteMHItem__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spObjAction__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spObjName__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spMHObjEndure__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spMHObjEndurePercentage__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::m_spReArrange__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::m_spSelectCancel__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spBuffUIMenu__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spRaidSelect__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spRaidInvite__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spRaidVanish__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spRaidLeave__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spChangeRaidLeader__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spChangeRaidLooter__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spRaidSubLeaderUp__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spRaidSubLeaderDown__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spCollectOpen__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spInviteFriend__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spRideOn__();
void __cdecl dynamic_initializer_for__PopupMenuTemplate::ms_spVote__();
void __cdecl dynamic_initializer_for__IconWin::ms_spOverGeom__();
void __cdecl dynamic_initializer_for__IconWin::ms_spClickGeom__();
void __cdecl dynamic_initializer_for__IconWin::ms_kCoolTimeIconList__();
void __cdecl dynamic_initializer_for__SkillIcon::ms_kSkillIconList__();
void __cdecl dynamic_initializer_for__QuestPigeonEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__Bank::ms_aspInv__();
void __cdecl dynamic_initializer_for__Bank::ms_mapExtraInv__();
void __cdecl dynamic_initializer_for__ICharDeadEvent::ms_kEventList__();
void __cdecl dynamic_initializer_for__GuildTournamentStorage::ms_aspInv__();
void __cdecl dynamic_initializer_for__MagicField::ms_kMagicFieldList__();
void __cdecl dynamic_initializer_for__MapNavigator::ms_spMapNavigatorTask__();
void __cdecl dynamic_initializer_for__ItemMarket::ms_kItemSellInfoList__();
void __cdecl dynamic_initializer_for__g_kShortCutMgr__();
void __cdecl dynamic_initializer_for__UserTrade::ms_aspOppInv__();
void __cdecl dynamic_initializer_for__UserTrade::ms_aspMyInv__();
void __cdecl dynamic_initializer_for__GuildBD::ms_spTempTexture__();
void __cdecl dynamic_initializer_for__NameBD::ms_spTempTexture__();
void __cdecl dynamic_initializer_for__PrivateStoreBD::ms_spTempTexture__();
void __cdecl dynamic_initializer_for__g_kScrnBDMgr__();
void __cdecl dynamic_initializer_for__ScreenBoardTexture::sm_spSrcTexture__();
void __cdecl dynamic_initializer_for__ScreenBoardTexture::sm_spShadowSrcTexture__();
void __cdecl dynamic_initializer_for__SpeechBD::ms_spTempTexture__();
void __cdecl dynamic_initializer_for__LinkFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__LoadingFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__ITimer::m_kTimerList__();
void __cdecl dynamic_initializer_for__CHairShopFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__ActionInfoTable::m_kCharMap__();
void __cdecl dynamic_initializer_for__ActionInfoTable::m_kMobMap__();
void __cdecl dynamic_initializer_for__ActionInfoTable::m_kRidePetMap__();
void __cdecl dynamic_initializer_for__ActionInfoTable::m_kMoverMap__();
void __cdecl dynamic_initializer_for__ActionInfoTable::m_kPetMap__();
void __cdecl dynamic_initializer_for__g_characterTitleData__();
void __cdecl dynamic_initializer_for__g_kCharMgr__();
void __cdecl dynamic_initializer_for__g_kCharResMgr__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_kOtherFaceTextureMap__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_spBlackTexture__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_spDefaultTexture__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_kMobFaceTextureMap__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_kMobFaceTextureList__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_kMoverFaceTextureMap__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_kMoverFaceTextureList__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_kPetFaceTextureMap__();
void __cdecl dynamic_initializer_for__PortraitTextureBuffer::ms_kPetFaceTextureList__();
void __cdecl dynamic_initializer_for__g_kUser__();
void __cdecl dynamic_initializer_for__g_kItemAuthority__();
void __cdecl dynamic_initializer_for__g_kDropItemMgr__();
void __cdecl dynamic_initializer_for__DynaminUV::m_RTTI__();
void __cdecl dynamic_initializer_for__g_kInventory__();
void __cdecl dynamic_initializer_for__g_kChargedItem__();
void __cdecl dynamic_initializer_for__ItemInfoTab::m_ItemInfoMapByInxName__();
void __cdecl dynamic_initializer_for__ItemRepairTask::ms_spItemRepairTask__();
void __cdecl dynamic_initializer_for__g_kMapObjMgr__();
void __cdecl dynamic_initializer_for__g_kWorld__();
void __cdecl dynamic_initializer_for__NiTextureAccumulator::m_RTTI__();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomWallName___1();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomFloorName___1();
void __cdecl dynamic_initializer_for__dd__();
void __cdecl dynamic_initializer_for__g_kServer__();
void __cdecl dynamic_initializer_for__AfterImgEff::m_RTTI__();
void __cdecl dynamic_initializer_for__AfterImgEff::m_mapEffectNode__();
void __cdecl dynamic_initializer_for__AfterImgEff::m_mapTexture__();
void __cdecl dynamic_initializer_for__ArrowEff::m_RTTI__();
void __cdecl dynamic_initializer_for__AttachEff::m_RTTI__();
void __cdecl dynamic_initializer_for__Effect::m_RTTI__();
void __cdecl dynamic_initializer_for__CRTTIClass_CHazeScreenEffect_CBaseObject_::ms_RTTI__();
void __cdecl dynamic_initializer_for__g_kEffectMgr__();
void __cdecl dynamic_initializer_for__ExpEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__StretchEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__WeddingEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__g_kTextEffMgr__();
void __cdecl dynamic_initializer_for__SoundGroup::ms_kSoundGroupList__();
void __cdecl dynamic_initializer_for__g_kSoundMgr__();
void __cdecl dynamic_initializer_for__MachineOpt::ms_kWinPosList__();
__int64 __cdecl dynamic_initializer_for__MachineOpt::ms_kGraphicOption__();
void __cdecl dynamic_initializer_for__MachineOpt::ms_kGameOption__();
int __cdecl dynamic_initializer_for__MachineOpt::ms_kSoundOption__();
__int64 __cdecl dynamic_initializer_for__MachineOpt::ms_shortCutSizeOptionData__();
void __cdecl dynamic_initializer_for__MachineOpt::ms_kUserLoginOption__();
__int64 __cdecl dynamic_initializer_for__MachineOpt::m_stSaveWinPosOption__();
int __cdecl dynamic_initializer_for__MachineOpt::m_keyMappingBuff__();
void __cdecl dynamic_initializer_for__Skill::m_kUseList__();
void __cdecl dynamic_initializer_for__SkillEmpowerRequest::ms_kReqList__();
void __cdecl dynamic_initializer_for__g_kParty__();
void __cdecl dynamic_initializer_for__ActSkillInfoTab::m_hashMap_ByNameIndex__();
void __cdecl dynamic_initializer_for__ITask::ms_kRootTask__();
void __cdecl dynamic_initializer_for__MHDiceGameTask::ms_spMHDiceGameTask__();
void __cdecl dynamic_initializer_for__StatPointReqTask::ms_spInstance__();
void __cdecl dynamic_initializer_for__WeaponTitleTab::ms_kTab__();
void __cdecl dynamic_initializer_for__ProduceInfoTable::m_MaterialMap__();
void __cdecl dynamic_initializer_for__QuestHelperMgr::ms_pQuestMCList__();
void __cdecl dynamic_initializer_for__GuildListTask::ms_spGuildListTask__();
void __cdecl dynamic_initializer_for__GuildMemberTask::ms_spGuildMemberTask__();
void __cdecl dynamic_initializer_for__GuildTask::ms_spGuildTask__();
void __cdecl mhStrings::_dynamic_initializer_for__mhCollisionParentName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhCollisionParentNamePick___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhCharColliRootNodeName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhOtherCharColliRootName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhResObjDefaultRootName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjDefaultRootName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhCollisionParentName___1();
void __cdecl mhStrings::_dynamic_initializer_for__mhCollisionParentNamePick___1();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightNormal___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightMoveOK___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightMoveNO___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjAmbLightRepair___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhCharColliNodeName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhOtherCharColliRootName___1();
void __cdecl dynamic_initializer_for__g_kMiniHouseMgr__();
void __cdecl mhStrings::_dynamic_initializer_for__mhObjDefaultRootName___1();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomDefaultRootName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomWallName___2();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomFloorName___2();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomRoofName___1();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomBlockName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomTexStyleTileName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhRoomTexStyleCustomName___0();
void __cdecl mhStrings::_dynamic_initializer_for__mhCollisionParentName___2();
void __cdecl dynamic_initializer_for__ChargedItemList::ms_kUsingList__();
void __cdecl dynamic_initializer_for__g_kInstance__();
void __cdecl dynamic_initializer_for__g_kNetMgr__();
void __cdecl dynamic_initializer_for__ORTable::ort_Index__();
void __cdecl dynamic_initializer_for__ORTable::ort_String__();
void __cdecl dynamic_initializer_for__ORTable::ort_Byte__();
void __cdecl dynamic_initializer_for__ORTable::ort_Word__();
void __cdecl dynamic_initializer_for__ORTable::ort_Dwrd__();
void __cdecl dynamic_initializer_for__ORTable::ort_Dword__();
void __cdecl dynamic_initializer_for__OptionReader::or_CommentMark__();
void __cdecl dynamic_initializer_for__OptionReader::or_Brace__();
void __cdecl dynamic_initializer_for__OptionReader::or_Ignore__();
void __cdecl dynamic_initializer_for__OptionReader::or_Delimiter__();
void __cdecl dynamic_initializer_for__OptionReader::or_Exchange__();
void __cdecl dynamic_initializer_for__OptionReader::or_Table__();
void __cdecl dynamic_initializer_for__OptionReader::or_ColumnType__();
void __cdecl dynamic_initializer_for__OptionReader::or_ColumnName__();
void __cdecl dynamic_initializer_for__OptionReader::or_Record__();
void __cdecl dynamic_initializer_for__OptionReader::or_RecordIn__();
void __cdecl dynamic_initializer_for__OptionReader::or_End__();
void __cdecl dynamic_initializer_for__WeddingTask::ms_spWeddingTask__();
void __cdecl dynamic_initializer_for__GuildAcademyMemberTask::ms_spGuildAcademyMemberTask__();
void __cdecl dynamic_initializer_for__GuildAcademySelectTask::ms_spGuildAcademySelectTask__();
void __cdecl dynamic_initializer_for__GuildAcademyTask::ms_spGuildAcademyTask__();
void __cdecl dynamic_initializer_for__GuildAcademyStorage::ms_aspInv__();
void __cdecl dynamic_initializer_for__g_kRaidinfo__();
void __cdecl dynamic_initializer_for__ShnDataFile__();
void __cdecl std::_dynamic_initializer_for__initlocks__();
void __cdecl std::_dynamic_initializer_for___Fac_tidy_reg__();
void __cdecl std::_dynamic_initializer_for__classic_locale__();
void __cdecl std::_dynamic_initializer_for___Generic_object__();
void __cdecl std::_dynamic_initializer_for___Iostream_object__();
void __cdecl std::_dynamic_initializer_for___System_object__();
void __cdecl std::_dynamic_initializer_for__initlocks___0();
void __cdecl dynamic_initializer_for__init_atexit__();
void __cdecl dynamic_initializer_for__NiTAbstractPoolAllocator_NiActorManager::TimelineData_::ms_kCriticalSection__();
void __cdecl dynamic_initializer_for__NiPosKey::ms_fSampleDelta__();
int __cdecl dynamic_initializer_for__NiPosKey::ms_kDefault__();
int __cdecl dynamic_initializer_for__NiRotKey::ms_kDefault__();
int __cdecl dynamic_initializer_for__NiColorKey::ms_kDefault__();
void __cdecl dynamic_initializer_for__NiTextKeyExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiControllerSequence::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTransformController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBoneLODController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTextureTransformController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMaterialColorController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAlphaController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiControllerManager::m_RTTI__();
void __cdecl dynamic_initializer_for__NiVisController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiUVData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiUVController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTransformInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiStringPalette::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSequenceStreamHelper::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSequence::m_RTTI__();
void __cdecl dynamic_initializer_for__NiRotData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiRollController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiQuaternionInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPosData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPoint3Interpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPathInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPathController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMultiTargetTransformController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMorphData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLookAtInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLookAtController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLightDimmerController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLightColorController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiKeyframeManager::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTransformData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiGeomMorpherController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatsExtraDataPoint3Controller::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatsExtraDataController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatExtraDataController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFlipController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiColorInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiColorExtraDataController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiColorData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineTransformInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplinePoint3Interpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineFloatInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineCompTransformInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineCompPoint3Interpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineCompFloatInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineCompColorInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineColorInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineBasisData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBoolTimelineInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBoolInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBoolData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendTransformInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendQuaternionInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendPoint3Interpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendFloatInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendColorInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendBoolInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendAccumTransformInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInterpController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBlendInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSingleInterpController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiQuatTransform::INVALID_ROTATE__();
void __cdecl dynamic_initializer_for__NiInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInterpolator::INVALID_QUATERNION__();
void __cdecl dynamic_initializer_for__NiFloatInterpController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPoint3InterpController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBoolInterpController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiKeyBasedInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiExtraDataController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSplineInterpolator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionConvert::ms_kSphereABV__();
void __cdecl dynamic_initializer_for__NiNode::m_RTTI__();
void __cdecl dynamic_initializer_for__NiObjectNET::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMainSDMObject__();
void __cdecl dynamic_initializer_for__NiObject::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAVObject::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMaterialProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMaterialProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NI_PI__();
int loc_96D7EB(); // weak
void __cdecl dynamic_initializer_for__NI_HALF_PI__();
void __cdecl dynamic_initializer_for__NI_TWO_PI__();
void __cdecl dynamic_initializer_for__NiRenderer::m_RTTI__();
void __cdecl dynamic_initializer_for__NiProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiVertexColorProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiVertexColorProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiTAbstractPoolAllocator_unsigned_int_::ms_kCriticalSection__();
void __cdecl dynamic_initializer_for__NiAlphaProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAlphaProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiFogProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFogProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiDirectionalLight::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDynamicEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAmbientLight::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSortAdjustNode::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCamera::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTexturingProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTexturingProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiSourceTexture::m_RTTI__();
void __cdecl dynamic_initializer_for__NiImageConverter::ms_spConverter__();
void __cdecl dynamic_initializer_for__NiTriShape::m_RTTI__();
void __cdecl dynamic_initializer_for__NiRenderTargetGroup::m_RTTI__();
void __cdecl dynamic_initializer_for__NiRenderedTexture::m_RTTI__();
void __cdecl dynamic_initializer_for__NiScreenElementsData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiScreenElements::m_RTTI__();
void __cdecl dynamic_initializer_for__NiExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBinaryExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiShader::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPixelData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiZBufferProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiZBufferProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiAlphaAccumulator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiIntegerExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiStringExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTimeController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTimeController::ms_kCachedValuesLock__();
void __cdecl dynamic_initializer_for__NiRangeLODData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLODNode::m_RTTI__();
void __cdecl dynamic_initializer_for__NiGeometry::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSkinPartition::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTriBasedGeomData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTriBasedGeom::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSkinInstance::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAccumulator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionObject::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTexture::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTexture::ms_kTextureListCriticalSection__();
void __cdecl dynamic_initializer_for__NiTexture::RendererData::ms_aspReplacementData__();
void __cdecl dynamic_initializer_for__NiTexture::RendererData::ms_kReplacementFormat__();
void __cdecl dynamic_initializer_for__NiStencilProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiStencilProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiTriShapeDynamicData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPalette::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPalette::ms_kPaletteListCriticalSection__();
void __cdecl dynamic_initializer_for__NiStream::ms_kCleanupCriticalSection__();
void __cdecl dynamic_initializer_for__ISQRT_ADDITIVE_CONSTANT__();
void __cdecl dynamic_initializer_for__ISQRT_FACTOR__();
void __cdecl dynamic_initializer_for__NiSkinData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTextureTransform::IDENTITY__();
void __cdecl dynamic_initializer_for__NiAVObjectPalette::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDefaultAVObjectPalette::m_RTTI__();
void __cdecl dynamic_initializer_for__NiGeometryData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiGeometryData::ms_kCritSec__();
void __cdecl dynamic_initializer_for__NiLight::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatsExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiColorExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTriStrips::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSwitchNode::m_RTTI__();
void __cdecl dynamic_initializer_for__NiVertWeightsExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTriShapeData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDepthStencilBuffer::m_RTTI__();
void __cdecl dynamic_initializer_for__Ni2DBuffer::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBackToFrontAccumulator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLODData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTriStripsData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDitherProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDitherProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiRendererSpecificProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiRendererSpecificProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiShadeProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiShadeProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiSpecularProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSpecularProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiWireframeProperty::m_RTTI__();
void __cdecl dynamic_initializer_for__NiWireframeProperty::ms_spDefault__();
void __cdecl dynamic_initializer_for__NiScreenGeometryData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiScreenGeometry::m_RTTI__();
void __cdecl dynamic_initializer_for__NiScreenPolygon::m_RTTI__();
void __cdecl dynamic_initializer_for__NiScreenSpaceCamera::m_RTTI__();
void __cdecl dynamic_initializer_for__NiVectorExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiTextureEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSwitchStringExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiStringsExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSpotLight::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSourceCubeMap::m_RTTI__();
void __cdecl dynamic_initializer_for__NiScreenTexture::m_RTTI__();
void __cdecl dynamic_initializer_for__NiScreenLODData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiParticlesData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPointLight::m_RTTI__();
void __cdecl dynamic_initializer_for__NiParticleMeshesData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiParticleMeshes::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLinesData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiLines::m_RTTI__();
void __cdecl dynamic_initializer_for__NiIntegersExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiFloatExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBSPNode::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBooleanExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBillboardNode::m_RTTI__();
void __cdecl dynamic_initializer_for__NiParticles::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAdditionalGeometryData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAudioSystem::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMilesAudioSystem::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMilesSource::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMilesListener::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAudioSource::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAudioListener::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysVortexFieldModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysUpdateCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysTurbulenceFieldModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysSphericalCollider::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysSphereEmitter::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysSpawnModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysRotationModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysResetOnLoopCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysRadialFieldModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysPositionModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysPlanarCollider::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysModifierActiveCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysMeshUpdateModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysMeshEmitter::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysInitialRotSpeedVarCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysInitialRotSpeedCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysInitialRotAngleVarCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysInitialRotAngleCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysGrowFadeModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysGravityStrengthCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysGravityFieldModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysGravityModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysFieldMaxDistanceCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysFieldMagnitudeCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysFieldAttenuationCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterSpeedCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterPlanarAngleVarCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterPlanarAngleCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterLifeSpanCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterInitialRadiusCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterDeclinationVarCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterDeclinationCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitterCtlrData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysDragModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysDragFieldModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysCylinderEmitter::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysColorModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysColliderManager::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysBoxEmitter::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysBoundUpdateModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysBombModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysAgeDeathModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysAirFieldSpreadCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysAirFieldModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysAirFieldInheritVelocityCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysAirFieldAirFrictionCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiParticleSystem::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMeshPSysData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiMeshParticleSystem::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysModifierCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysEmitter::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysFieldModifier::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysCollider::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysVolumeEmitter::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysModifierBoolCtlr::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPSysModifierFloatCtlr::m_RTTI__();
_UNKNOWN *__cdecl dynamic_initializer_for__NiLogger::ms_akMessageOptions__();
void __cdecl dynamic_initializer_for__NiLogger::ms_kCriticalSection__();
void __cdecl dynamic_initializer_for__NiRoom::m_RTTI__();
void __cdecl dynamic_initializer_for__NiOldWall::m_RTTI__();
void __cdecl dynamic_initializer_for__NiRoomGroup::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPortal::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputSystem::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputSystem::CreateParams::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDI8InputSystem::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDI8InputSystem::DI8CreateParams::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputGamePad::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputDevice::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputDI8Mouse::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputDI8Keyboard::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputDI8GamePad::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputMouse::m_RTTI__();
void __cdecl dynamic_initializer_for__NiInputKeyboard::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___0();
void __cdecl dynamic_initializer_for__NSBShaderLibSDMObject__();
void __cdecl dynamic_initializer_for__g_kParsedShaderList__();
void __cdecl dynamic_initializer_for__NiD3DXEffectShaderSDMObject__();
void __cdecl dynamic_initializer_for__NiD3DXEffectShader::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___1();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___2();
void __cdecl dynamic_initializer_for__NpModelData_NiTexturingProperty::ms_mapTextureProperty__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___3();
void __cdecl dynamic_initializer_for__NpKMI_Tool::ms_mapPartsSIF__();
void __cdecl dynamic_initializer_for__NpModelData_KFM::ms_mapKFMTool__();
void __cdecl dynamic_initializer_for__NpModelData_ActorM::ms_mapActorManager__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___4();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___5();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___6();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___7();
void __cdecl dynamic_initializer_for__NsPgToonRegister_v2::m_RTTI__();
void __cdecl dynamic_initializer_for__NPTR_ISShader_v2::m_RTTI__();
void __cdecl dynamic_initializer_for__INpShader::m_RTTI__();
void __cdecl dynamic_initializer_for__NsPgToonExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___8();
void __cdecl dynamic_initializer_for__NsPgCatoonShader::m_RTTI__();
int __cdecl dynamic_initializer_for__NiColorKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiFloatKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiBoolKeyregisterloaderreturn___0();
void __cdecl dynamic_initializer_for__NiParticleSDMObject___0();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___9();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___10();
int __cdecl dynamic_initializer_for__NiFloatKeyregisterloaderreturn___1();
int __cdecl dynamic_initializer_for__NiBezFloatKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiPosKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiBezPosKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiRotKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiBezRotKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiBoolKeyregisterloaderreturn___1();
int __cdecl dynamic_initializer_for__NiColorKeyregisterloaderreturn___1();
int __cdecl dynamic_initializer_for__NiEulerRotKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiLinColorKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiLinFloatKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiLinPosKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiLinRotKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiTCBPosKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiTCBRotKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiTCBFloatKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiStepBoolKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiStepColorKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiStepFloatKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiStepPosKeyregisterloaderreturn___0();
int __cdecl dynamic_initializer_for__NiStepRotKeyregisterloaderreturn___0();
void __cdecl dynamic_initializer_for__NiAnimationSDMObject___0();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___11();
void __cdecl dynamic_initializer_for__NsFadeNode::m_RTTI__();
void __cdecl dynamic_initializer_for__NiAlphaRefController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiPortalSDMObject___0();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___12();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___13();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___14();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___15();
void __cdecl dynamic_initializer_for__MasterPropertyAccumulator::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___16();
void __cdecl dynamic_initializer_for__CRTTIClass_CGlowScreenEffect_CBaseObject_::ms_RTTI__();
void __cdecl dynamic_initializer_for__CRTTIClass_CDepthOfFieldEffect_CBaseObject_::ms_RTTI__();
void __cdecl dynamic_initializer_for__CRTTIClass_CAfterImageEffect_CBaseObject_::ms_RTTI__();
void __cdecl dynamic_initializer_for__NiCollisionSDMObject___17();
void __cdecl dynamic_initializer_for__CPostProcessEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__HazeAccumulator::m_RTTI__();
void __cdecl dynamic_initializer_for__CHazeScreenEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__CGlowScreenEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__CAfterImageEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__CDepthOfFieldEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__CScreenEffect::m_RTTI__();
void __cdecl dynamic_initializer_for__PgFrameWork::m_RTTI__();
void __cdecl dynamic_initializer_for__Pgg_kFrameMgr__();
void __cdecl dynamic_initializer_for__PgWin::m_RTTI__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbLbutDown__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbLbutPressed__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbLbutReleased__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbRbutDown__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbRbutPressed__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbRbutReleased__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbMbutDown__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbMbutPressed__();
void __cdecl dynamic_initializer_for__PgWin::ms_kbMbutReleased__();
void __cdecl dynamic_initializer_for__PgWinText::m_RTTI__();
void __cdecl dynamic_initializer_for__Pgg_kWinMgr__();
void __cdecl dynamic_initializer_for__PgWinBut::m_RTTI__();
void __cdecl dynamic_initializer_for__CSpFont::ms_spAlphaProp__();
void __cdecl dynamic_initializer_for__CSpFont::ms_spVertexProp__();
void __cdecl dynamic_initializer_for__PgCursor::m_RTTI__();
void __cdecl dynamic_initializer_for__PgCursor::ms_spSystemCursor__();
void __cdecl dynamic_initializer_for__PgCursor::ms_spCursorDxSurfaceTexture__();
void __cdecl dynamic_initializer_for__PgProfileMgr::ms_kRoot__();
void __cdecl dynamic_initializer_for__PgProfileMgr::ms_kTraversalQ__();
void __cdecl dynamic_initializer_for__PgEditWin::ms_kCallBackMap__();
void __cdecl dynamic_initializer_for__PgWinScaleCtrl::m_RTTI__();
void __cdecl ATL::_dynamic_initializer_for___AtlBaseModule__();
void __cdecl ATL::_dynamic_initializer_for__g_strheap__();
void __cdecl ATL::_dynamic_initializer_for__g_strmgr__();
void __cdecl dynamic_initializer_for__NiD3DDefaultShader::m_RTTI__();
void __cdecl dynamic_initializer_for__NiD3DShader::m_RTTI__();
void __cdecl dynamic_initializer_for__NiD3DShaderInterface::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9Renderer::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9Renderer::ms_kDisplayFormats__();
void __cdecl dynamic_initializer_for__NiDX9RendererSDMObject__();
void __cdecl dynamic_initializer_for__NiDX92DBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9TextureBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9DepthStencilBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9ImplicitDepthStencilBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9AdditionalDepthStencilBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9AdditionalDepthStencilBufferData::ms_kAddDSListCriticalSection__();
void __cdecl dynamic_initializer_for__NiDX9AdditionalDepthStencilBufferData::ms_kAddDepthStencil__();
void __cdecl dynamic_initializer_for__NiDX9OnscreenBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9ImplicitBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9SwapChainBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9SwapChainDepthStencilBufferData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiD3DController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiD3DTimeSyncController::m_RTTI__();
void __cdecl dynamic_initializer_for__NiDX9LightManager::LightEntry::ms_fRangeMax__();
void __cdecl dynamic_initializer_for__NiDX9Direct3DTexture::m_RTTI__();
void __cdecl dynamic_initializer_for__NiSCMExtraData::m_RTTI__();
void __cdecl dynamic_initializer_for__NiRenderedCubeMap::m_RTTI__();
void __cdecl dynamic_initializer_for__NiCursor::m_RTTI__();
void __cdecl dynamic_initializer_for__NiBinaryShader::m_RTTI__();
void __cdecl dynamic_atexit_destructor_for__BlockedData__(); // idb
void __cdecl dynamic_atexit_destructor_for__Engine3D::ms_spCarToon__(); // idb
void __cdecl dynamic_atexit_destructor_for__Engine3D::ms_spToonExtraData__(); // idb
void __cdecl dynamic_atexit_destructor_for__Font::ms_spFont__(); // idb
int __cdecl ITableBase_FontSet_FontSetTab_::ITableBase_FontSet_FontSetTab__::_2_::_dynamic_atexit_destructor_for____instance____();
void __cdecl dynamic_atexit_destructor_for__IconMgr::ms_kTextureMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__IconMgr::ms_kAniTextureMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kItemMixDataTab__(); // idb
void __cdecl dynamic_atexit_destructor_for__ItemViewDummyTab::m_DummyMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__MenuTexMgr::ms_aspTexture__(); // idb
void __cdecl TextFilterTable::FilterSlander_::_2_::_dynamic_atexit_destructor_for__s_kTextFilterSet__(); // idb
void __cdecl TextFilterTable::FilterEmotion_::_3_::_dynamic_atexit_destructor_for__s_kTextFilterSet__(); // idb
int __cdecl ITableBase_EmotionFilter_EmotionFilterTable_::ITableBase_EmotionFilter_EmotionFilterTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_SlanderFilter_SlanderFilterTable_::ITableBase_SlanderFilter_SlanderFilterTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BadNameFilter_BadNameFilterTable_::ITableBase_BadNameFilter_BadNameFilterTable__::_2_::_dynamic_atexit_destructor_for____instance____();
void __cdecl dynamic_atexit_destructor_for__TextFilterTable::ms_listBlockedID__(); // idb
void __cdecl dynamic_atexit_destructor_for__MaskShader::m_spShader__(); // idb
void __cdecl dynamic_atexit_destructor_for__MaskShader::m_spNoAlphaBlendShader__(); // idb
void __cdecl dynamic_atexit_destructor_for__Cursor::ms_spDropIconTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__Cursor::ms_spCursorRenderCamera__(); // idb
void __cdecl dynamic_atexit_destructor_for__Cursor::ms_spCursorFrame__(); // idb
int __cdecl ITableBase_TextDataType3_TextData3_::ITableBase_TextDataType3_TextData3__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_TextDataType2_TextData2_::ITableBase_TextDataType2_TextData2__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_TextDataType_TextData_::ITableBase_TextDataType_TextData__::_2_::_dynamic_atexit_destructor_for____instance____();
void __cdecl dynamic_atexit_destructor_for__BlockedData___0(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kSingleDataMap__(); // idb
int __cdecl ITableBase_ChrBasicEquip_ChrBasicEquipTab_::ITableBase_ChrBasicEquip_ChrBasicEquipTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_UseClassTypeInfo_UseCalssTypeTable_::ITableBase_UseClassTypeInfo_UseCalssTypeTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemViewDummy_ItemViewDummyTab_::ITableBase_ItemViewDummy_ItemViewDummyTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable_::ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MinimonInfo_MinimonInfoTable_::ITableBase_MinimonInfo_MinimonInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_AbStateMsg_AbStateMsgTable_::ITableBase_AbStateMsg_AbStateMsgTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable_::ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_TermExtendMatch_TermExtendMatchTable_::ITableBase_TermExtendMatch_TermExtendMatchTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ChatColor_ChatColorTab_::ITableBase_ChatColor_ChatColorTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab_::ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ChrCreateEquip_ChrCreateEquipTab_::ITableBase_ChrCreateEquip_ChrCreateEquipTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MarketSearchInfo_MarketSearchInfoTab_::ITableBase_MarketSearchInfo_MarketSearchInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MobNoFadeIn_MobNoFadeInTab_::ITableBase_MobNoFadeIn_MobNoFadeInTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MobConditionView_MobConditionViewTab_::ITableBase_MobConditionView_MobConditionViewTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_KQTeam_KQTeamTable_::ITableBase_KQTeam_KQTeamTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_KQIsVote_KQIsVoteTable_::ITableBase_KQIsVote_KQIsVoteTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable_::ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_KQVoteDesc_KQVoteDescTable_::ITableBase_KQVoteDesc_KQVoteDescTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_PupView_PetViewTab_::ITableBase_PupView_PetViewTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_PupMain_PetMainTab_::ITableBase_PupMain_PetMainTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverItem_MoverItemTab_::ITableBase_MoverItem_MoverItemTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverAbility_MoverAbilityTab_::ITableBase_MoverAbility_MoverAbilityTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverSlotCharAni_MoverSlotCharAniTab_::ITableBase_MoverSlotCharAni_MoverSlotCharAniTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverSlotView_MoverSlotViewTab_::ITableBase_MoverSlotView_MoverSlotViewTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverView_MoverViewTab_::ITableBase_MoverView_MoverViewTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverHG_MoverHGTab_::ITableBase_MoverHG_MoverHGTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverUseSkill_MoverUseSkillTab_::ITableBase_MoverUseSkill_MoverUseSkillTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MoverMain_MoverMainTab_::ITableBase_MoverMain_MoverMainTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_CollectCardTitle_CollectCardTitleTab_::ITableBase_CollectCardTitle_CollectCardTitleTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_CollectCardReward_CollectCardRewardTab_::ITableBase_CollectCardReward_CollectCardRewardTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab_::ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_CollectCardView_CollectCardViewTab_::ITableBase_CollectCardView_CollectCardViewTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_CollectCard_CollectCardTab_::ITableBase_CollectCard_CollectCardTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BasicInfoFindWord_BasicInfoFindWordTab_::ITableBase_BasicInfoFindWord_BasicInfoFindWordTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BasicInfoFindUI_BasicInfoFindUITab_::ITableBase_BasicInfoFindUI_BasicInfoFindUITab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BasicInfoFind_BasicInfoFindTab_::ITableBase_BasicInfoFind_BasicInfoFindTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab_::ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BasicInfoTip_BasicInfoTipTab_::ITableBase_BasicInfoTip_BasicInfoTipTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BasicInfoLink_BasicInfoLinkTab_::ITableBase_BasicInfoLink_BasicInfoLinkTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BasicInfoTitle_BasicInfoTitleTab_::ITableBase_BasicInfoTitle_BasicInfoTitleTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab_::ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BelongTypeInfo_BelongTypeInfoTab_::ITableBase_BelongTypeInfo_BelongTypeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MapLinkPoint_MapLinkPointTab_::ITableBase_MapLinkPoint_MapLinkPointTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MapWayPoint_MapWayPointTab_::ITableBase_MapWayPoint_MapWayPointTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ActiveSkillGroup_ActiveSkillGroupTab_::ITableBase_ActiveSkillGroup_ActiveSkillGroupTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_DamageEffect_DamageEffectTab_::ITableBase_DamageEffect_DamageEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GTIView_GTIViewInfoTab_::ITableBase_GTIView_GTIViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab_::ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MobRandomIdleAni_MobRandomIdleAniTab_::ITableBase_MobRandomIdleAni_MobRandomIdleAniTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GBHouse_GBHouseTab_::ITableBase_GBHouse_GBHouseTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GB_DICE_Dividind_GBDiceDividIndTab_::ITableBase_GB_DICE_Dividind_GBDiceDividIndTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_DICE_Dividind_DiceDividIndTab_::ITableBase_DICE_Dividind_DiceDividIndTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab_::ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab_::ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab_::ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemActionCondition_ItemActionConditionTab_::ITableBase_ItemActionCondition_ItemActionConditionTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemActionEffect_ItemActionEffectTab_::ITableBase_ItemActionEffect_ItemActionEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemAction_ItemActionTab_::ITableBase_ItemAction_ItemActionTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ActionEffectItem_ActionEffectItemTab_::ITableBase_ActionEffectItem_ActionEffectItemTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_SetEffect_SetEffectTab_::ITableBase_SetEffect_SetEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab_::ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_SetItemName_SetItemNameTab_::ITableBase_SetItemName_SetItemNameTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_TownPortal_TownPortalInfoTable_::ITableBase_TownPortal_TownPortalInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemDismantle_ItemDismantleTab_::ITableBase_ItemDismantle_ItemDismantleTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab_::ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_WeaponAttrib_WeaponAttribTab_::ITableBase_WeaponAttrib_WeaponAttribTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemShopView_ItemShopViewTable_::ITableBase_ItemShopView_ItemShopViewTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MiniHouse_MiniHouseTable_::ITableBase_MiniHouse_MiniHouseTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GradeItemOption_GradeItemOptionTab_::ITableBase_GradeItemOption_GradeItemOptionTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_NpcDialogData_NpcDialogDataTable_::ITableBase_NpcDialogData_NpcDialogDataTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ProduceViewInfo_ProduceViewInfoTable_::ITableBase_ProduceViewInfo_ProduceViewInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_KINGDOM_QUEST_DESC_KQDescTable_::ITableBase_KINGDOM_QUEST_DESC_KQDescTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_GatherInfo_GatherInfoTable_::ITableBase_GatherInfo_GatherInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ProduceInfo_ProduceInfoTable_::ITableBase_ProduceInfo_ProduceInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_DmgSndMapByArmorType_DmgSndTab_::ITableBase_DmgSndMapByArmorType_DmgSndTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_FaceInfo_FaceInfoTab_::ITableBase_FaceInfo_FaceInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_RaceName_CharRace_::ITableBase_RaceName_CharRace__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ChargedItemEffect_ChargedEffectTable_::ITableBase_ChargedItemEffect_ChargedEffectTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ScriptMsg_ScriptMsgTab_::ITableBase_ScriptMsg_ScriptMsgTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_UpEffectData_UpEffectTab_::ITableBase_UpEffectData_UpEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MHEmotion_MiniHouseEmotionTab_::ITableBase_MHEmotion_MiniHouseEmotionTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab_::ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable_::ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab_::ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab_::ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_EffectViewInfo_ShakeEffectViewInfoTab_::ITableBase_EffectViewInfo_ShakeEffectViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_HairColorInfo_HairColorInfoTab_::ITableBase_HairColorInfo_HairColorInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_HairInfo_HairInfoTab_::ITableBase_HairInfo_HairInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ActionEffectInfo_ActionEffectInfoTab_::ITableBase_ActionEffectInfo_ActionEffectInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ClassName_CharClass_::ITableBase_ClassName_CharClass__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemMoney_ItemMoneyTab_::ITableBase_ItemMoney_ItemMoneyTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab_::ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ColorInfoType_ColorInfoTable_::ITableBase_ColorInfoType_ColorInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_SubAbStateInfo_SubAbStateInfoTab_::ITableBase_SubAbStateInfo_SubAbStateInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab_::ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_AbnormalStateInfo_AbnormalStateInfoTab_::ITableBase_AbnormalStateInfo_AbnormalStateInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_CharNPC_ViewInfo_NPCViewInfoTab_::ITableBase_CharNPC_ViewInfo_NPCViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MobViewInfo_MobViewInfoTab_::ITableBase_MobViewInfo_MobViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemViewInfo_ItemViewInfoTab_::ITableBase_ItemViewInfo_ItemViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ItemInfo_ItemInfoTab_::ITableBase_ItemInfo_ItemInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab_::ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_AttendReward_AttendRewardTab_::ITableBase_AttendReward_AttendRewardTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ChargedMessageItem_ChargedMsgItemTab_::ITableBase_ChargedMessageItem_ChargedMsgItemTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ChargedIconItem_ChargedIconItemTab_::ITableBase_ChargedIconItem_ChargedIconItemTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab_::ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MobCoordinate_MobCoordinateTab_::ITableBase_MobCoordinate_MobCoordinateTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_RIDING_RidePetTable_::ITableBase_RIDING_RidePetTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ActionViewInfo_ActionViewTable_::ITableBase_ActionViewInfo_ActionViewTable__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_UpGradeInfo_UpGradeInfoTab_::ITableBase_UpGradeInfo_UpGradeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MapViewInfo_MapViewInfoTab_::ITableBase_MapViewInfo_MapViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MapInfo_MapInfoTab_::ITableBase_MapInfo_MapInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_MobInfo_MobInfoTab_::ITableBase_MobInfo_MobInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_FaceCutMsg_FaceCutMsgTab_::ITableBase_FaceCutMsg_FaceCutMsgTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhResObjDefaultRootName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjDefaultRootName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomDefaultRootName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomWallName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomFloorName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomRoofName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomBlockName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomTexStyleTileName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomTexStyleCustomName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhStoCMapName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCollisionParentName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjGeomParentName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCollisionParentNamePick__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightNULL__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightNormal__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightMoveOK__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightMoveNO__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightRepair__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCharColliNodeName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCharColliRootNodeName__();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhOtherCharColliRootName__();
void __cdecl _dynamic_atexit_destuctor_for__obj__(); // idb
void __cdecl dynamic_atexit_destructor_for__CRTTIClass_CWorldConfig_CBaseObject_::ms_RTTI__(); // idb
void __cdecl dynamic_atexit_destructor_for__CRTTIClass_CBaseObject_CNullClass_::ms_RTTI__(); // idb
void __cdecl _dynamic_atexit_destuctor_for__kTutorialMgr__(); // idb
void __cdecl _dynamic_atexit_destuctor_for__kScenarioMgr__(); // idb
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomWallName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomFloorName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomRoofName___0();
void __cdecl dynamic_atexit_destructor_for__m_kAttackedList__(); // idb
void __cdecl _dynamic_atexit_destuctor_for__kEffectObjectMgr__(); // idb
void __cdecl _dynamic_atexit_destuctor_for__kMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__GameFrameWork::m_kWhisperCharID__(); // idb
int __cdecl dynamic_atexit_destructor_for__GameFrameWork::ms_strLauncher__();
int *__cdecl dynamic_atexit_destructor_for__GameFrameWork::m_kOptionManager__();
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spProposeTradeMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spInvitePartyMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spCancelMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spDelegatePartyMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spQuitPartyMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spFirePartyMemberMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spInviteGuildMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPartyLootSetupMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spFollowCharMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spMainCharUnMetamorphosis__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu0__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu1__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu2__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu3__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu4__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu5__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu6__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu7__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu8__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu9__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu10__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu11__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu12__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu13__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu14__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu15__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu16__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu17__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu18__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spResolutionMenu19__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spWhisper__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spTargetCharName__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spHighHolyPromise__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPlaceMemory0__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPlaceMemory1__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPlaceMemory2__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPlaceMemory3__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spPlaceMemory4__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spConfigRoom__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spShowBlog__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spChangeBlogAddr__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spKickGuest__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spSetArrModeOn__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spSetArrModeOff__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spReturnToInvMHItem__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spArrToInvMHItem__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spDeleteMHItem__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spObjAction__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spObjName__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spMHObjEndure__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spMHObjEndurePercentage__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::m_spReArrange__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::m_spSelectCancel__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spBuffUIMenu__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spRaidSelect__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spRaidInvite__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spRaidVanish__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spRaidLeave__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spChangeRaidLeader__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spChangeRaidLooter__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spRaidSubLeaderUp__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spRaidSubLeaderDown__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spCollectOpen__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spInviteFriend__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spRideOn__(); // idb
void __cdecl dynamic_atexit_destructor_for__PopupMenuTemplate::ms_spVote__(); // idb
void __cdecl RoarWin::FilterRemoveEnter_::_2_::_dynamic_atexit_destructor_for__s_kTextFilterSet__(); // idb
void __cdecl dynamic_atexit_destructor_for__IconWin::ms_spOverGeom__(); // idb
void __cdecl dynamic_atexit_destructor_for__IconWin::ms_spClickGeom__(); // idb
void __cdecl dynamic_atexit_destructor_for__IconWin::ms_kCoolTimeIconList__(); // idb
int *__cdecl dynamic_atexit_destructor_for__SkillIcon::ms_kSkillIconList__();
void __cdecl dynamic_atexit_destructor_for__Bank::ms_aspInv__(); // idb
void __cdecl dynamic_atexit_destructor_for__Bank::ms_mapExtraInv__(); // idb
int *__cdecl dynamic_atexit_destructor_for__ICharDeadEvent::ms_kEventList__();
void __cdecl dynamic_atexit_destructor_for__GuildTournamentStorage::ms_aspInv__(); // idb
int *__cdecl dynamic_atexit_destructor_for__MagicField::ms_kMagicFieldList__();
void __cdecl dynamic_atexit_destructor_for__MapNavigator::ms_spMapNavigatorTask__(); // idb
int *__cdecl dynamic_atexit_destructor_for__ItemMarket::ms_kItemSellInfoList__();
void __cdecl dynamic_atexit_destructor_for__g_kShortCutMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__UserTrade::ms_aspOppInv__(); // idb
void __cdecl dynamic_atexit_destructor_for__UserTrade::ms_aspMyInv__(); // idb
void __cdecl dynamic_atexit_destructor_for__GuildBD::ms_spTempTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__NameBD::ms_spTempTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__PrivateStoreBD::ms_spTempTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kScrnBDMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__ScreenBoardTexture::sm_spSrcTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__ScreenBoardTexture::sm_spShadowSrcTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__SpeechBD::ms_spTempTexture__(); // idb
int *__cdecl dynamic_atexit_destructor_for__ITimer::m_kTimerList__();
void __cdecl dynamic_atexit_destructor_for__ActionInfoTable::m_kCharMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__ActionInfoTable::m_kMobMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__ActionInfoTable::m_kRidePetMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__ActionInfoTable::m_kMoverMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__ActionInfoTable::m_kPetMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_characterTitleData__(); // idb
void __cdecl CarToonShader::GetInstance_::_2_::_dynamic_atexit_destructor_for__shader__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kCharMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kCharResMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_spBlackTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_spDefaultTexture__(); // idb
int *__cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_kMoverFaceTextureList__();
int *__cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_kPetFaceTextureList__();
int *__cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_kMobFaceTextureList__();
void __cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_kPetFaceTextureMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_kMobFaceTextureMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_kMoverFaceTextureMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__PortraitTextureBuffer::ms_kOtherFaceTextureMap__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kUser__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kItemAuthority__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kDropItemMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kChargedItem__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kInventory__(); // idb
void __cdecl dynamic_atexit_destructor_for__ItemInfoTab::m_ItemInfoMapByInxName__(); // idb
void __cdecl dynamic_atexit_destructor_for__ItemRepairTask::ms_spItemRepairTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kMapObjMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kWorld__(); // idb
void __cdecl dynamic_atexit_destructor_for__dd__(); // idb
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomWallName___1();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomFloorName___1();
void __cdecl dynamic_atexit_destructor_for__g_kServer__(); // idb
void __cdecl dynamic_atexit_destructor_for__AfterImgEff::m_mapEffectNode__(); // idb
void __cdecl dynamic_atexit_destructor_for__AfterImgEff::m_mapTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__CRTTIClass_CHazeScreenEffect_CBaseObject_::ms_RTTI__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kEffectMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kTextEffMgr__(); // idb
int *__cdecl dynamic_atexit_destructor_for__SoundGroup::ms_kSoundGroupList__();
int __cdecl ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab_::ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
void __cdecl dynamic_atexit_destructor_for__g_kSoundMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__MachineOpt::ms_kUserLoginOption__(); // idb
int *__cdecl dynamic_atexit_destructor_for__MachineOpt::ms_kWinPosList__();
int __cdecl ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab_::ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_PassiveSkillInfo_PasSkillInfoTab_::ITableBase_PassiveSkillInfo_PasSkillInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_ActiveSkillInfo_ActSkillInfoTab_::ITableBase_ActiveSkillInfo_ActSkillInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int __cdecl ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab_::ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____();
int *__cdecl dynamic_atexit_destructor_for__Skill::m_kUseList__();
int *__cdecl dynamic_atexit_destructor_for__SkillEmpowerRequest::ms_kReqList__();
void __cdecl dynamic_atexit_destructor_for__g_kParty__(); // idb
void __cdecl dynamic_atexit_destructor_for__ActSkillInfoTab::m_hashMap_ByNameIndex__(); // idb
void __cdecl dynamic_atexit_destructor_for__ITask::ms_kRootTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__MHDiceGameTask::ms_spMHDiceGameTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__StatPointReqTask::ms_spInstance__(); // idb
void __cdecl dynamic_atexit_destructor_for__WeaponTitleTab::ms_kTab__(); // idb
void __cdecl dynamic_atexit_destructor_for__ProduceInfoTable::m_MaterialMap__(); // idb
void __cdecl QuestDataMgr::GetQuest_::_2_::_dynamic_atexit_destructor_for__kQuestData__(); // idb
void __cdecl QuestDataMgr::GetQuest_::_2_::_dynamic_atexit_destructor_for__QuestDialog__(); // idb
void __cdecl QuestDataMgr::GetQuest_::_2_::_dynamic_atexit_destructor_for__kQuest__(); // idb
int *__cdecl dynamic_atexit_destructor_for__QuestHelperMgr::ms_pQuestMCList__();
void __cdecl dynamic_atexit_destructor_for__GuildListTask::ms_spGuildListTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__GuildMemberTask::ms_spGuildMemberTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__GuildTask::ms_spGuildTask__(); // idb
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCollisionParentName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCollisionParentNamePick___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCharColliRootNodeName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhOtherCharColliRootName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhResObjDefaultRootName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjDefaultRootName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCollisionParentName___1();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCollisionParentNamePick___1();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightNormal___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightMoveOK___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightMoveNO___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjAmbLightRepair___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCharColliNodeName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhOtherCharColliRootName___1();
void __cdecl dynamic_atexit_destructor_for__g_kMiniHouseMgr__(); // idb
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhObjDefaultRootName___1();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomDefaultRootName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomWallName___2();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomFloorName___2();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomRoofName___1();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomBlockName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomTexStyleTileName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhRoomTexStyleCustomName___0();
int __cdecl mhStrings::_dynamic_atexit_destructor_for__mhCollisionParentName___2();
int *__cdecl dynamic_atexit_destructor_for__ChargedItemList::ms_kUsingList__();
void __cdecl dynamic_atexit_destructor_for__g_kInstance__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kNetMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__ORTable::ort_Index__(); // idb
void __cdecl dynamic_atexit_destructor_for__ORTable::ort_String__(); // idb
void __cdecl dynamic_atexit_destructor_for__ORTable::ort_Byte__(); // idb
void __cdecl dynamic_atexit_destructor_for__ORTable::ort_Word__(); // idb
void __cdecl dynamic_atexit_destructor_for__ORTable::ort_Dwrd__(); // idb
void __cdecl dynamic_atexit_destructor_for__ORTable::ort_Dword__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_CommentMark__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_Brace__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_Ignore__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_Delimiter__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_Exchange__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_Table__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_ColumnType__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_ColumnName__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_Record__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_RecordIn__(); // idb
void __cdecl dynamic_atexit_destructor_for__OptionReader::or_End__(); // idb
void __cdecl dynamic_atexit_destructor_for__WeddingTask::ms_spWeddingTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__GuildAcademyMemberTask::ms_spGuildAcademyMemberTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__GuildAcademySelectTask::ms_spGuildAcademySelectTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__GuildAcademyTask::ms_spGuildAcademyTask__(); // idb
void __cdecl dynamic_atexit_destructor_for__GuildAcademyStorage::ms_aspInv__(); // idb
void __cdecl dynamic_atexit_destructor_for__g_kRaidinfo__(); // idb
void __cdecl dynamic_atexit_destructor_for__ShnDataFile__(); // idb
void __cdecl std::_dynamic_atexit_destructor_for__initlocks__(); // idb
void __cdecl std::_dynamic_atexit_destructor_for__classic_locale__(); // idb
void __cdecl std::_dynamic_atexit_destructor_for___Fac_tidy_reg__(); // idb
void __cdecl std::_dynamic_atexit_destructor_for___Generic_object__(); // idb
void __cdecl std::_dynamic_atexit_destructor_for___Iostream_object__(); // idb
void __cdecl std::_dynamic_atexit_destructor_for___System_object__(); // idb
void __cdecl std::_dynamic_atexit_destructor_for__initlocks___0(); // idb
void __cdecl dynamic_atexit_destructor_for__init_atexit__(); // idb
void __cdecl operator_new_::_6_::_dynamic_atexit_destructor_for__nomem__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiTAbstractPoolAllocator_NiActorManager::TimelineData_::ms_kCriticalSection__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiCollisionConvert::ms_kSphereABV__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiMaterialProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiVertexColorProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiTAbstractPoolAllocator_unsigned_int_::ms_kCriticalSection__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiAlphaProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiFogProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiTexturingProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiImageConverter::ms_spConverter__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiZBufferProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiTimeController::ms_kCachedValuesLock__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiTexture::ms_kTextureListCriticalSection__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiTexture::RendererData::ms_aspReplacementData__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiStencilProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiPalette::ms_kPaletteListCriticalSection__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiStream::ms_kCleanupCriticalSection__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiGeometryData::ms_kCritSec__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiDitherProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiRendererSpecificProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiShadeProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiSpecularProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiWireframeProperty::ms_spDefault__(); // idb
void __cdecl dynamic_atexit_destructor_for__NiLogger::ms_kCriticalSection__(); // idb
int __cdecl dynamic_atexit_destructor_for__g_kParsedShaderList__();
void __cdecl dynamic_atexit_destructor_for__NpModelData_NiTexturingProperty::ms_mapTextureProperty__(); // idb
void __cdecl dynamic_atexit_destructor_for__NpKMI_Tool::ms_mapPartsSIF__(); // idb
void __cdecl dynamic_atexit_destructor_for__NpModelData_KFM::ms_mapKFMTool__(); // idb
void __cdecl dynamic_atexit_destructor_for__NpModelData_ActorM::ms_mapActorManager__(); // idb
void __cdecl _dynamic_atexit_destuctor_for__obj__(); // idb
void __cdecl CDataDocument::Instance_::_2_::_dynamic_atexit_destructor_for__DataDocument__(); // idb
void __cdecl dynamic_atexit_destructor_for__CRTTIClass_CAfterImageEffect_CBaseObject_::ms_RTTI__(); // idb
void __cdecl dynamic_atexit_destructor_for__CRTTIClass_CDepthOfFieldEffect_CBaseObject_::ms_RTTI__(); // idb
void __cdecl dynamic_atexit_destructor_for__CRTTIClass_CGlowScreenEffect_CBaseObject_::ms_RTTI__(); // idb
void __cdecl dynamic_atexit_destructor_for__Pgg_kFrameMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbLbutDown__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbLbutPressed__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbLbutReleased__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbRbutDown__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbRbutPressed__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbRbutReleased__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbMbutDown__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbMbutPressed__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgWin::ms_kbMbutReleased__(); // idb
void __cdecl dynamic_atexit_destructor_for__Pgg_kWinMgr__(); // idb
void __cdecl dynamic_atexit_destructor_for__CSpFont::ms_spAlphaProp__(); // idb
void __cdecl dynamic_atexit_destructor_for__CSpFont::ms_spVertexProp__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgCursor::ms_spSystemCursor__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgCursor::ms_spCursorDxSurfaceTexture__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgProfileMgr::ms_kRoot__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgProfileMgr::ms_kTraversalQ__(); // idb
void __cdecl dynamic_atexit_destructor_for__PgEditWin::ms_kCallBackMap__(); // idb
void __cdecl PgPasswdTextGeometry::SetText_::_4_::_dynamic_atexit_destructor_for__kTmpStr__(); // idb
void __cdecl ATL::_dynamic_atexit_destructor_for___AtlBaseModule__(); // idb
void __cdecl ATL::_dynamic_atexit_destructor_for__g_strheap__(); // idb
void __cdecl ATL::_dynamic_atexit_destructor_for__g_strmgr__(); // idb
int __cdecl dynamic_atexit_destructor_for__NiDX9Renderer::ms_kDisplayFormats__();
void __cdecl dynamic_atexit_destructor_for__NiDX9AdditionalDepthStencilBufferData::ms_kAddDSListCriticalSection__(); // idb
int __cdecl dynamic_atexit_destructor_for__NiDX9AdditionalDepthStencilBufferData::ms_kAddDepthStencil__();
// int __stdcall BT_SetAppVersion(_DWORD); weak
// int __stdcall BT_SetFlags(_DWORD); weak
// int __stdcall BT_SetSupportServer(_DWORD, _DWORD); weak
// int __stdcall BT_SetAppName(_DWORD); weak
// int __stdcall BT_InstallSehFilter(); weak
// int __stdcall BT_CloseLogFile(_DWORD); weak
// int _BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); weak
// int __stdcall BT_ClearLog(_DWORD); weak
// int __stdcall BT_AddLogFile(_DWORD); weak
// int __stdcall BT_GetLogFileName(_DWORD); weak
// int __stdcall BT_SetLogFlags(_DWORD, _DWORD); weak
// int __stdcall BT_OpenLogFile(_DWORD, _DWORD); weak
// BOOL __stdcall InitCommonControlsEx(const INITCOMMONCONTROLSEX *picce);
// int __stdcall GetDIBits(HDC hdc, HBITMAP hbm, UINT start, UINT cLines, LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT usage);
// BOOL __stdcall DeleteObject(HGDIOBJ ho);
// BOOL __stdcall DeleteDC(HDC hdc);
// BOOL __stdcall GetTextExtentPoint32A(HDC hdc, LPCSTR lpString, int c, LPSIZE psizl);
// HGDIOBJ __stdcall SelectObject(HDC hdc, HGDIOBJ h);
// UINT __stdcall SetTextAlign(HDC hdc, UINT align);
// BOOL __stdcall ExtTextOutA(HDC hdc, int x, int y, UINT options, const RECT *lprect, LPCSTR lpString, UINT c, const INT *lpDx);
// BOOL __stdcall RemoveFontResourceA(LPCSTR lpFileName);
// HGDIOBJ __stdcall GetStockObject(int i);
// int __stdcall EnumFontFamiliesA(HDC hdc, LPCSTR lpLogfont, FONTENUMPROCA lpProc, LPARAM lParam);
// HDC __stdcall CreateCompatibleDC(HDC hdc);
// int __stdcall GetObjectA(HANDLE h, int c, LPVOID pv);
// BOOL __stdcall GetTextExtentPointA(HDC hdc, LPCSTR lpString, int c, LPSIZE lpsz);
// HFONT __stdcall CreateFontA(int cHeight, int cWidth, int cEscapement, int cOrientation, int cWeight, DWORD bItalic, DWORD bUnderline, DWORD bStrikeOut, DWORD iCharSet, DWORD iOutPrecision, DWORD iClipPrecision, DWORD iQuality, DWORD iPitchAndFamily, LPCSTR pszFaceName);
// int __stdcall SetMapMode(HDC hdc, int iMode);
// COLORREF __stdcall SetBkColor(HDC hdc, COLORREF color);
// HBITMAP __stdcall CreateDIBSection(HDC hdc, const BITMAPINFO *lpbmi, UINT usage, void **ppvBits, HANDLE hSection, DWORD offset);
// int __stdcall AddFontResourceA(LPCSTR);
// HBRUSH __stdcall CreateSolidBrush(COLORREF color);
// HFONT __stdcall CreateFontIndirectA(const LOGFONTA *lplf);
// int __stdcall SetBkMode(HDC hdc, int mode);
// COLORREF __stdcall SetTextColor(HDC hdc, COLORREF color);
// BOOL __stdcall TextOutA(HDC hdc, int x, int y, LPCSTR lpString, int c);
// HANDLE __stdcall OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);
// BOOL __stdcall GetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode);
// HANDLE __stdcall CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
// BOOL __stdcall SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes);
// void __stdcall InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// void __stdcall DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// DWORD __stdcall GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize);
// HMODULE __stdcall GetModuleHandleW(LPCWSTR lpModuleName);
// BOOL __stdcall QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
// BOOL __stdcall QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
// DWORD __stdcall SizeofResource(HMODULE hModule, HRSRC hResInfo);
// LPVOID __stdcall LockResource(HGLOBAL hResData);
// HGLOBAL __stdcall LoadResource(HMODULE hModule, HRSRC hResInfo);
// HRSRC __stdcall FindResourceW(HMODULE hModule, LPCWSTR lpName, LPCWSTR lpType);
// HRSRC __stdcall FindResourceExW(HMODULE hModule, LPCWSTR lpType, LPCWSTR lpName, WORD wLanguage);
// int __stdcall WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar);
// LPSTR __stdcall lstrcpyA(LPSTR lpString1, LPCSTR lpString2);
// BOOL __stdcall TerminateProcess(HANDLE hProcess, UINT uExitCode);
// HANDLE __stdcall GetCurrentProcess();
// DWORD __stdcall GetFileAttributesA(LPCSTR lpFileName);
// void __stdcall GetLocalTime(LPSYSTEMTIME lpSystemTime);
// void __stdcall OutputDebugStringW(LPCWSTR lpOutputString);
// DWORD __stdcall GetEnvironmentVariableW(LPCWSTR lpName, LPWSTR lpBuffer, DWORD nSize);
// DWORD __stdcall FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, va_list *Arguments);
// BOOL __stdcall FreeLibrary(HMODULE hLibModule);
// HMODULE __stdcall LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
// FARPROC __stdcall GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
// DWORD __stdcall WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
// BOOL __stdcall CreatePipe(PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize);
// BOOL __stdcall GetStringTypeW(DWORD dwInfoType, LPCWSTR lpSrcStr, int cchSrc, LPWORD lpCharType);
// BOOL __stdcall IsValidLocale(LCID Locale, DWORD dwFlags);
// BOOL __stdcall EnumSystemLocalesA(LOCALE_ENUMPROCA lpLocaleEnumProc, DWORD dwFlags);
// int __stdcall GetLocaleInfoA(LCID Locale, LCTYPE LCType, LPSTR lpLCData, int cchData);
// LCID __stdcall GetUserDefaultLCID();
// int __stdcall CompareStringW(LCID Locale, DWORD dwCmpFlags, PCNZWCH lpString1, int cchCount1, PCNZWCH lpString2, int cchCount2);
// DWORD __stdcall GetTickCount();
// LPWCH __stdcall GetEnvironmentStringsW();
// BOOL __stdcall FreeEnvironmentStringsW(LPWCH);
// BOOL __stdcall FlushFileBuffers(HANDLE hFile);
// int __stdcall GetLocaleInfoW(LCID Locale, LCTYPE LCType, LPWSTR lpLCData, int cchData);
// HMODULE __stdcall LoadLibraryW(LPCWSTR lpLibFileName);
// HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName);
// UINT __stdcall GetConsoleCP();
// DWORD __stdcall GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation);
// BOOL __stdcall SetEnvironmentVariableA(LPCSTR lpName, LPCSTR lpValue);
// BOOL __stdcall SetEnvironmentVariableW(LPCWSTR lpName, LPCWSTR lpValue);
// BOOL __stdcall IsValidCodePage(UINT CodePage);
// UINT __stdcall GetOEMCP();
// UINT __stdcall GetACP();
// SIZE_T __stdcall HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem);
// HANDLE __stdcall GetStdHandle(DWORD nStdHandle);
// UINT __stdcall SetHandleCount(UINT uNumber);
// DWORD __stdcall GetFileType(HANDLE hFile);
// BOOL __stdcall InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount);
// BOOL __stdcall SetStdHandle(DWORD nStdHandle, HANDLE hHandle);
// BOOL __stdcall HeapDestroy(HANDLE hHeap);
// HANDLE __stdcall HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize);
// BOOL __stdcall IsDebuggerPresent();
// LPTOP_LEVEL_EXCEPTION_FILTER __stdcall SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);
// LONG __stdcall UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo);
// void __stdcall SetLastError(DWORD dwErrCode);
// BOOL __stdcall TlsFree(DWORD dwTlsIndex);
// BOOL __stdcall TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue);
// LPVOID __stdcall TlsGetValue(DWORD dwTlsIndex);
// DWORD __stdcall TlsAlloc();
// BOOL __stdcall IsProcessorFeaturePresent(DWORD ProcessorFeature);
// BOOL __stdcall GetCPInfo(UINT CodePage, LPCPINFO lpCPInfo);
// int __stdcall LCMapStringW(LCID Locale, DWORD dwMapFlags, LPCWSTR lpSrcStr, int cchSrc, LPWSTR lpDestStr, int cchDest);
// BOOL __stdcall DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions);
// BOOL __stdcall MoveFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName);
// void __stdcall GetStartupInfoW(LPSTARTUPINFOW lpStartupInfo);
// BOOL __stdcall CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
// void __stdcall GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime);
// int __stdcall GetDateFormatA(LCID Locale, DWORD dwFlags, const SYSTEMTIME *lpDate, LPCSTR lpFormat, LPSTR lpDateStr, int cchDate);
// int __stdcall GetTimeFormatA(LCID Locale, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpTimeStr, int cchTime);
// LPVOID __stdcall HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);
// LPVOID __stdcall HeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes);
// int __stdcall lstrlenA(LPCSTR lpString);
// DWORD __stdcall GetLastError();
// DWORD __stdcall GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer);
// DWORD __stdcall GetShortPathNameA(LPCSTR lpszLongPath, LPSTR lpszShortPath, DWORD cchBuffer);
// BOOL __stdcall CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);
// HANDLE __stdcall FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
// BOOL __stdcall FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
// BOOL __stdcall FindClose(HANDLE hFindFile);
// BOOL __stdcall DeleteFileA(LPCSTR lpFileName);
// int __stdcall MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar);
// void __stdcall LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// void __stdcall EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
// BOOL __stdcall IsDBCSLeadByte(BYTE TestChar);
// LONG __stdcall InterlockedExchange(volatile LONG *Target, LONG Value);
// void __stdcall OutputDebugStringA(LPCSTR lpOutputString);
// void __stdcall Sleep(DWORD dwMilliseconds);
// BOOL __stdcall HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem);
// void __stdcall RaiseException(DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, const ULONG_PTR *lpArguments);
// DWORD __stdcall GetCurrentProcessId();
// DWORD __stdcall GetCurrentThreadId();
// PVOID __stdcall DecodePointer(PVOID Ptr);
// PVOID __stdcall EncodePointer(PVOID Ptr);
// DWORD __stdcall SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod);
// BOOL __stdcall WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
// BOOL __stdcall ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
// HANDLE __stdcall CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
// HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName);
// HANDLE __stdcall OpenThread(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId);
// DWORD __stdcall SuspendThread(HANDLE hThread);
// BOOL __stdcall CloseHandle(HANDLE hObject);
// void __stdcall ExitProcess(UINT uExitCode);
// LONG __stdcall InterlockedDecrement(volatile LONG *lpAddend);
// LONG __stdcall InterlockedIncrement(volatile LONG *lpAddend);
// DWORD __stdcall GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize);
// SIZE_T __stdcall VirtualQuery(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength);
// BOOL __stdcall WriteConsoleW(HANDLE hConsoleOutput, const void *lpBuffer, DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved);
// BOOL __stdcall SetEndOfFile(HANDLE hFile);
// HANDLE __stdcall GetProcessHeap();
// HANDLE __stdcall CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
// HANDLE __stdcall CreateSemaphoreA(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName);
// void __stdcall GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
// BOOL __stdcall GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode);
// void __stdcall GetSystemTime(LPSYSTEMTIME lpSystemTime);
// BOOL __stdcall GetVersionExA(LPOSVERSIONINFOA lpVersionInformation);
// DWORD __stdcall GetPrivateProfileStringA(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName);
// LANGID __stdcall GetUserDefaultLangID();
// BOOL __stdcall GlobalUnlock(HGLOBAL hMem);
// LPVOID __stdcall GlobalLock(HGLOBAL hMem);
// DWORD __stdcall GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
// BSTR __stdcall SysAllocString(const OLECHAR *psz);
// SAFEARRAY *__stdcall SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound);
// HRESULT __stdcall SafeArrayAccessData(SAFEARRAY *psa, void **ppvData);
// HRESULT __stdcall SafeArrayUnaccessData(SAFEARRAY *psa);
// HRESULT __stdcall VariantClear(VARIANTARG *pvarg);
// void __stdcall VariantInit(VARIANTARG *pvarg);
// HRESULT __stdcall SHGetSpecialFolderLocation(HWND hwnd, int csidl, LPITEMIDLIST *ppidl);
// HINSTANCE __stdcall ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
// BOOL __stdcall SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath);
// BOOL __stdcall ShellExecuteExA(SHELLEXECUTEINFOA *pExecInfo);
// BOOL __stdcall PathFileExistsA(LPCSTR pszPath);
// BOOL __stdcall GetClassInfoExA(HINSTANCE hInstance, LPCSTR lpszClass, LPWNDCLASSEXA lpwcx);
// LRESULT __stdcall CallWindowProcA(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
// int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
// HKL __stdcall GetKeyboardLayout(DWORD idThread);
// ATOM __stdcall RegisterClassExA(const WNDCLASSEXA *);
// HANDLE __stdcall SetClipboardData(UINT uFormat, HANDLE hMem);
// BOOL __stdcall OpenClipboard(HWND hWndNewOwner);
// UINT __stdcall RegisterClipboardFormatA(LPCSTR lpszFormat);
// HANDLE __stdcall GetClipboardData(UINT uFormat);
// BOOL __stdcall UpdateWindow(HWND hWnd);
// BOOL __stdcall AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu);
// INT_PTR __stdcall DialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATEA hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);
// BOOL __stdcall EndDialog(HWND hDlg, INT_PTR nResult);
// BOOL __stdcall CheckDlgButton(HWND hDlg, int nIDButton, UINT uCheck);
// LRESULT __stdcall SendDlgItemMessageA(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam);
// BOOL __stdcall PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
// void __stdcall PostQuitMessage(int nExitCode);
// BOOL __stdcall PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
// LRESULT __stdcall DispatchMessageA(const MSG *lpMsg);
// BOOL __stdcall TranslateMessage(const MSG *lpMsg);
// BOOL __stdcall CloseClipboard();
// int __stdcall FillRect(HDC hDC, const RECT *lprc, HBRUSH hbr);
// BOOL __stdcall GetKeyboardLayoutNameA(LPSTR pwszKLID);
// BOOL __stdcall SetWindowTextA(HWND hWnd, LPCSTR lpString);
// BOOL __stdcall ClientToScreen(HWND hWnd, LPPOINT lpPoint);
// BOOL __stdcall SetForegroundWindow(HWND hWnd);
// LONG __stdcall SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong);
// LONG __stdcall ChangeDisplaySettingsA(DEVMODEA *lpDevMode, DWORD dwFlags);
// BOOL __stdcall SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);
// HCURSOR __stdcall SetCursor(HCURSOR hCursor);
// HICON __stdcall LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName);
// DWORD __stdcall SetClassLongA(HWND hWnd, int nIndex, LONG dwNewLong);
// LONG __stdcall GetWindowLongA(HWND hWnd, int nIndex);
// BOOL __stdcall EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, DEVMODEA *lpDevMode);
// SHORT __stdcall GetAsyncKeyState(int vKey);
// BOOL __stdcall GetCursorPos(LPPOINT lpPoint);
// BOOL __stdcall ScreenToClient(HWND hWnd, LPPOINT lpPoint);
// DWORD __stdcall GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId);
// HANDLE __stdcall LoadImageA(HINSTANCE hInst, LPCSTR name, UINT type, int cx, int cy, UINT fuLoad);
// BOOL __stdcall SetCursorPos(int X, int Y);
// BOOL __stdcall DestroyCursor(HCURSOR hCursor);
// BOOL __stdcall GetIconInfo(HICON hIcon, PICONINFO piconinfo);
// int __stdcall ReleaseDC(HWND hWnd, HDC hDC);
// HCURSOR __stdcall LoadCursorA(HINSTANCE hInstance, LPCSTR lpCursorName);
// ATOM __stdcall RegisterClassA(const WNDCLASSA *lpWndClass);
// HANDLE __stdcall GetPropA(HWND hWnd, LPCSTR lpString);
// BOOL __stdcall SetPropA(HWND hWnd, LPCSTR lpString, HANDLE hData);
// HANDLE __stdcall RemovePropA(HWND hWnd, LPCSTR lpString);
// LRESULT __stdcall DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
// BOOL __stdcall SetRectEmpty(LPRECT lprc);
// BOOL __stdcall GetClassInfoA(HINSTANCE hInstance, LPCSTR lpClassName, LPWNDCLASSA lpWndClass);
// BOOL __stdcall UnregisterClassA(LPCSTR lpClassName, HINSTANCE hInstance);
// int __stdcall GetSystemMetrics(int nIndex);
// BOOL __stdcall CopyRect(LPRECT lprcDst, const RECT *lprcSrc);
// BOOL __stdcall PtInRect(const RECT *lprc, POINT pt);
// UINT __stdcall GetCaretBlinkTime();
// HWND __stdcall GetFocus();
// LRESULT __stdcall SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
// BOOL __stdcall SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom);
// int _wsprintfA(LPSTR, LPCSTR, ...);
// BOOL __stdcall AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle);
// HWND __stdcall SetFocus(HWND hWnd);
// HWND __stdcall CreateWindowExA(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
// BOOL __stdcall ShowWindow(HWND hWnd, int nCmdShow);
// BOOL __stdcall DestroyWindow(HWND hWnd);
// BOOL __stdcall IsWindow(HWND hWnd);
// BOOL __stdcall GetWindowRect(HWND hWnd, LPRECT lpRect);
// BOOL __stdcall MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);
// HDC __stdcall GetDC(HWND hWnd);
// BOOL __stdcall GetClientRect(HWND hWnd, LPRECT lpRect);
// BOOL __stdcall EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);
// int __stdcall GetWindowTextLengthA(HWND hWnd);
// BOOL __stdcall EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam);
// int __stdcall GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount);
// int __stdcall TranslateAcceleratorA(HWND hWnd, HACCEL hAccTable, LPMSG lpMsg);
// HINTERNET __stdcall InternetConnectA(HINTERNET hInternet, LPCSTR lpszServerName, INTERNET_PORT nServerPort, LPCSTR lpszUserName, LPCSTR lpszPassword, DWORD dwService, DWORD dwFlags, DWORD_PTR dwContext);
// HINTERNET __stdcall HttpOpenRequestA(HINTERNET hConnect, LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion, LPCSTR lpszReferrer, LPCSTR *lplpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext);
// BOOL __stdcall HttpSendRequestA(HINTERNET hRequest, LPCSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength);
// BOOL __stdcall HttpQueryInfoA(HINTERNET hRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex);
// BOOL __stdcall InternetReadFile(HINTERNET hFile, LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD lpdwNumberOfBytesRead);
// BOOL __stdcall InternetCloseHandle(HINTERNET hInternet);
// HINTERNET __stdcall InternetOpenA(LPCSTR lpszAgent, DWORD dwAccessType, LPCSTR lpszProxy, LPCSTR lpszProxyBypass, DWORD dwFlags);
// BOOL __stdcall InternetSetOptionA(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength);
// DWORD __stdcall timeGetTime();
// int __stdcall AIL_active_3D_sample_count(_DWORD); weak
// int __stdcall AIL_open_3D_listener(_DWORD); weak
// int __stdcall AIL_close_3D_listener(_DWORD); weak
// int __stdcall AIL_allocate_3D_sample_handle(_DWORD); weak
// int __stdcall AIL_close_3D_provider(_DWORD); weak
// int __stdcall AIL_set_redist_directory(_DWORD); weak
// int __stdcall AIL_shutdown(); weak
// int __stdcall AIL_quick_shutdown(); weak
// int __stdcall AIL_waveOutClose(_DWORD); weak
// int __stdcall AIL_3D_speaker_type(_DWORD); weak
// int __stdcall AIL_set_3D_speaker_type(_DWORD, _DWORD); weak
// int __stdcall AIL_last_error(); weak
// int __stdcall AIL_set_3D_distance_factor(_DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_provider_preference(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_provider_attribute(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_room_type(_DWORD); weak
// int __stdcall AIL_set_3D_room_type(_DWORD, _DWORD); weak
// int __stdcall AIL_release_3D_sample_handle(_DWORD); weak
// int __stdcall AIL_release_sample_handle(_DWORD); weak
// int __stdcall AIL_close_stream(_DWORD); weak
// int __stdcall AIL_pause_stream(_DWORD, _DWORD); weak
// int __stdcall AIL_decompress_ASI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_mem_free_lock(_DWORD); weak
// int __stdcall AIL_decompress_ADPCM(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_open_3D_provider(_DWORD); weak
// int __stdcall AIL_file_type(_DWORD, _DWORD); weak
// int __stdcall AIL_file_read(_DWORD, _DWORD); weak
// int __stdcall AIL_file_size(_DWORD); weak
// int __stdcall AIL_set_sample_loop_count(_DWORD, _DWORD); weak
// int __stdcall AIL_set_stream_loop_count(_DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_loop_count(_DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_cone(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_sample_cone(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_distances(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_sample_distances(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_sample_volume_levels(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_stream_volume_levels(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_volume(_DWORD, _DWORD); weak
// int __stdcall AIL_sample_volume_levels(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_stream_volume_levels(_DWORD, _DWORD, _DWORD); weak
// double __stdcall AIL_3D_sample_volume(_DWORD); weak
// int __stdcall AIL_set_sample_playback_rate(_DWORD, _DWORD); weak
// int __stdcall AIL_set_stream_playback_rate(_DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_playback_rate(_DWORD, _DWORD); weak
// int __stdcall AIL_sample_playback_rate(_DWORD); weak
// int __stdcall AIL_stream_playback_rate(_DWORD); weak
// int __stdcall AIL_3D_sample_playback_rate(_DWORD); weak
// int __stdcall AIL_set_3D_sample_preference(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_sample_attribute(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_start_sample(_DWORD); weak
// int __stdcall AIL_start_stream(_DWORD); weak
// int __stdcall AIL_start_3D_sample(_DWORD); weak
// int __stdcall AIL_stop_sample(_DWORD); weak
// int __stdcall AIL_stop_3D_sample(_DWORD); weak
// int __stdcall AIL_set_sample_ms_position(_DWORD, _DWORD); weak
// int __stdcall AIL_set_stream_ms_position(_DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_offset(_DWORD, _DWORD); weak
// int __stdcall AIL_sample_status(_DWORD); weak
// int __stdcall AIL_stream_status(_DWORD); weak
// int __stdcall AIL_3D_sample_status(_DWORD); weak
// int __stdcall AIL_sample_ms_position(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_stream_ms_position(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_sample_offset(_DWORD); weak
// int __stdcall AIL_set_sample_position(_DWORD, _DWORD); weak
// int __stdcall AIL_set_stream_position(_DWORD, _DWORD); weak
// int __stdcall AIL_stream_position(_DWORD); weak
// int __stdcall AIL_set_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_velocity_vector(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_effects_level(_DWORD, _DWORD); weak
// double __stdcall AIL_3D_sample_effects_level(_DWORD); weak
// int __stdcall AIL_set_3D_sample_occlusion(_DWORD, _DWORD); weak
// double __stdcall AIL_3D_sample_occlusion(_DWORD); weak
// int __stdcall AIL_set_3D_sample_obstruction(_DWORD, _DWORD); weak
// double __stdcall AIL_3D_sample_obstruction(_DWORD); weak
// int __stdcall AIL_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_3D_velocity(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_allocate_file_sample(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_open_stream(_DWORD, _DWORD, _DWORD); weak
// int __stdcall AIL_set_3D_sample_file(_DWORD, _DWORD); weak
// int __stdcall AIL_WAV_info(_DWORD, _DWORD); weak
// HRESULT __stdcall CoCreateInstance(const IID *const rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, const IID *const riid, LPVOID *ppv);
// void __stdcall CoUninitialize();
// HRESULT __stdcall CLSIDFromString(LPCOLESTR lpsz, LPCLSID pclsid);
// HRESULT __stdcall CreateBindCtx(DWORD reserved, LPBC *ppbc);
// HRESULT __stdcall CoInitialize(LPVOID pvReserved);
// int _SteamUser(void); weak
// int _SteamAPI_Init(void); weak
// int __cdecl _SteamAPI_RegisterCallback(_DWORD, _DWORD); weak
// int __cdecl _SteamAPI_UnregisterCallback(_DWORD); weak
// int __fastcall _SteamAPI_IsSteamRunning(_DWORD, _DWORD); weak


//----- (00401000) --------------------------------------------------------
void __thiscall AnimationMD5Checksum::AnimationMD5Checksum(AnimationMD5Checksum *this)
{
  ;
}

//----- (00401020) --------------------------------------------------------
void __cdecl AnimationMD5Checksum::CheckAniFileMD5(Name8 MD5Hash, Name8 Subdir, Name60Byte FileName)
{
  unsigned int v3; // eax@1
  void *v4; // edi@1
  char v5; // cl@2
  char *v6; // edi@3
  char v7; // al@4
  unsigned int v8; // eax@5
  void *v9; // edi@5
  char v10; // cl@6
  bool v11; // zf@7
  char *v12; // eax@9
  const char *v13; // eax@9
  _iobuf *v14; // eax@11
  _iobuf *v15; // esi@11
  int v16; // eax@12
  int v17; // edi@12
  void *v18; // ebx@12
  const char *v19; // ecx@12
  PgFrameWork *v20; // esi@21
  char *v21; // eax@21
  void *v22; // [sp-14h] [bp-1D0h]@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Path; // [sp+0h] [bp-1BCh]@1
  char Filepath[255]; // [sp+1Ch] [bp-1A0h]@1
  char file[65]; // [sp+11Ch] [bp-A0h]@1
  char hash[32]; // [sp+160h] [bp-5Ch]@1
  char v27; // [sp+180h] [bp-3Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > striAniFileMD5; // [sp+184h] [bp-38h]@1
  int v29; // [sp+1A0h] [bp-1Ch]@1
  unsigned int v30; // [sp+1A4h] [bp-18h]@1
  unsigned int v31; // [sp+1ACh] [bp-10h]@1
  int v32; // [sp+1B8h] [bp-4h]@9
  int v33; // [sp+1BCh] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  *(_QWORD *)&striAniFileMD5.baseclass_0.___u0.baseclass_0.dummy[0] = *(_QWORD *)&Subdir;
  *(_QWORD *)&striAniFileMD5.baseclass_0.___u0._Bx._Buf[8] = *(_QWORD *)&Subdir.n8_name[8];
  striAniFileMD5.baseclass_0._Mysize = *(_DWORD *)&Subdir.n8_name[16];
  *(_QWORD *)&striAniFileMD5.baseclass_0._Myres = *(_QWORD *)&Subdir.n8_name[20];
  v29 = *(_DWORD *)&Subdir.n8_name[28];
  *(_DWORD *)&file[4] = *(_DWORD *)&FileName.nb_name[4];
  *(_DWORD *)file = *(_DWORD *)&FileName;
  *(_DWORD *)&file[8] = *(_DWORD *)&FileName.nb_name[8];
  *(_DWORD *)&file[16] = *(_DWORD *)&FileName.nb_name[16];
  *(_DWORD *)&file[12] = *(_DWORD *)&FileName.nb_name[12];
  *(_DWORD *)&file[20] = *(_DWORD *)&FileName.nb_name[20];
  *(_DWORD *)&file[28] = *(_DWORD *)&FileName.nb_name[28];
  *(_DWORD *)&file[24] = *(_DWORD *)&FileName.nb_name[24];
  *(_DWORD *)&file[32] = *(_DWORD *)&FileName.nb_name[32];
  *(_DWORD *)&file[40] = *(_DWORD *)&FileName.nb_name[40];
  *(_DWORD *)&file[36] = *(_DWORD *)&FileName.nb_name[36];
  *(_DWORD *)&file[44] = *(_DWORD *)&FileName.nb_name[44];
  *(_DWORD *)&file[52] = *(_DWORD *)&FileName.nb_name[52];
  *(_DWORD *)&file[48] = *(_DWORD *)&FileName.nb_name[48];
  *(_DWORD *)&file[56] = *(_DWORD *)&FileName.nb_name[56];
  *(_QWORD *)hash = *(_QWORD *)&MD5Hash;
  *(_DWORD *)&hash[8] = *(_DWORD *)&MD5Hash.n8_name[8];
  *(_QWORD *)&hash[12] = *(_QWORD *)&MD5Hash.n8_name[12];
  *(_DWORD *)&hash[20] = *(_DWORD *)&MD5Hash.n8_name[20];
  *(_QWORD *)&hash[24] = *(_QWORD *)&MD5Hash.n8_name[24];
  LOBYTE(v30) = 0;
  file[60] = 0;
  v27 = 0;
  strcpy(Filepath, "\\");
  v3 = strlen(striAniFileMD5.baseclass_0.___u0.baseclass_0.dummy) + 1;
  v4 = &Path.baseclass_0._Alval + 3;
  do
  {
    v5 = *((_BYTE *)v4 + 1);
    v4 = (char *)v4 + 1;
  }
  while ( v5 );
  memcpy(v4, &striAniFileMD5, v3);
  v6 = (char *)(&Path.baseclass_0._Alval + 3);
  do
    v7 = (v6++)[1];
  while ( v7 );
  *(_WORD *)v6 = word_9774E4;
  v8 = strlen(file) + 1;
  v9 = &Path.baseclass_0._Alval + 3;
  do
  {
    v10 = *((_BYTE *)v9 + 1);
    v9 = (char *)v9 + 1;
  }
  while ( v10 );
  memcpy(v9, file, 4 * (v8 >> 2));
  v11 = Folder::m_bInit == 0;
  memcpy((char *)v9 + 4 * (v8 >> 2), &file[4 * (v8 >> 2)], v8 & 3);
  if ( v11 )
    Folder::Init();
  Path.baseclass_0._Myres = 15;
  Path.baseclass_0._Mysize = 0;
  Path.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v12 = Folder::Merge(&Folder::m_acCharacter, Filepath);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Path, v12, strlen(v12));
  v13 = *(const char **)&Path;
  v32 = 0;
  if ( Path.baseclass_0._Myres < 0x10 )
    v13 = (const char *)&Path;
  v14 = fopen(v13, "rb");
  v15 = v14;
  if ( !v14 )
    goto LABEL_21;
  v16 = _fileno(v14);
  v17 = _filelength(v16);
  v18 = operator new__(v17);
  fread(v18, v17, 1u, v15);
  fclose(v15);
  CMD5Checksum::GetMD5(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&striAniFileMD5 + 12),
    (char *)v18,
    v17);
  v19 = *(const char **)&striAniFileMD5.baseclass_0.___u0._Bx._Buf[12];
  if ( v30 < 0x10 )
    v19 = &striAniFileMD5.baseclass_0.___u0._Bx._Buf[12];
  if ( strcmp(hash, v19) )
  {
    free(v18);
    if ( v30 >= 0x10 )
      operator delete(*(void **)&striAniFileMD5.baseclass_0.___u0._Bx._Buf[12]);
LABEL_21:
    v20 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, AccountFrameWorkID);
    v21 = fs("thanks for changing file '%s'. unfortunately we do not support editing animation files anymore. please reinstall your client. kind regards, your fiesta team.");
    MsgBox::Modal(MSGBOX_OK, v21);
    AccountFrameWork::OnWrongVersionMsgClose((AccountFrameWork *)v20);
    if ( Path.baseclass_0._Myres < 0x10 )
      return;
    v22 = *(void **)&Path;
    goto LABEL_23;
  }
  if ( v30 >= 0x10 )
    operator delete(*(void **)&striAniFileMD5.baseclass_0.___u0._Bx._Buf[12]);
  v30 = 15;
  v29 = 0;
  striAniFileMD5.baseclass_0.___u0._Bx._Buf[12] = 0;
  if ( Path.baseclass_0._Myres >= 0x10 )
  {
    v22 = *(void **)&Path;
LABEL_23:
    operator delete(v22);
  }
}
// 9774E4: using guessed type __int16 word_9774E4;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00401370) --------------------------------------------------------
void __thiscall std::bad_alloc::_bad_alloc(std::bad_alloc *this)
{
  this->baseclass_0.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
  std::exception::_exception((std::bad_cast *)this);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00401380) --------------------------------------------------------
void *__thiscall std::bad_alloc::_vector_deleting_destructor_(std::bad_alloc *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
  std::exception::_exception((std::bad_cast *)this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004013B0) --------------------------------------------------------
char *__cdecl Folder::Character()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return &Folder::m_acCharacter;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004013D0) --------------------------------------------------------
char *__cdecl Folder::Merge(char *pcPath, char *pcFile)
{
  char *v2; // eax@1
  char v3; // cl@2

  v2 = pcPath;
  do
  {
    v3 = *v2;
    v2[&Folder::m_acMerge - pcPath] = *v2;
    ++v2;
  }
  while ( v3 );
  strcat(&Folder::m_acMerge, pcFile);
  return &Folder::m_acMerge;
}

//----- (00401430) --------------------------------------------------------
const char *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::c_str(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this)
{
  const char *result; // eax@1

  result = (const char *)this;
  if ( this->baseclass_0._Myres >= 0x10 )
    result = *(const char **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
  return result;
}

//----- (00401440) --------------------------------------------------------
void __thiscall std::bad_alloc::bad_alloc(std::bad_alloc *this, std::bad_alloc *__that)
{
  std::bad_alloc *v2; // esi@1

  v2 = this;
  std::exception::exception(&this->baseclass_0, &__that->baseclass_0);
  v2->baseclass_0.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00401460) --------------------------------------------------------
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Tidy(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, bool _Built, unsigned int _Newsize)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  char *v4; // ebx@3

  v3 = this;
  if ( _Built && this->baseclass_0._Myres >= 0x10 )
  {
    v4 = *(char **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    if ( _Newsize )
      memcpy(this->baseclass_0.___u0.baseclass_0.dummy, v4, _Newsize);
    operator delete(v4);
  }
  v3->baseclass_0._Mysize = _Newsize;
  v3->baseclass_0._Myres = 15;
  v3->baseclass_0.___u0.baseclass_0.dummy[_Newsize] = 0;
}

//----- (004014B0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  unsigned int v4; // eax@1
  unsigned int v5; // edi@3
  unsigned int v6; // eax@3
  unsigned int v7; // edx@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // ebx@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // edx@10
  int v10; // eax@12
  bool v11; // cf@12

  v3 = this;
  v4 = this->baseclass_0._Mysize;
  if ( v4 < _Off )
    std::_Xout_of_range("invalid string position");
  v5 = _Count;
  v6 = v4 - _Off;
  if ( v6 < _Count )
    v5 = v6;
  if ( v5 )
  {
    v7 = this->baseclass_0._Myres;
    if ( v7 < 0x10 )
      v8 = this;
    else
      v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v7 < 0x10 )
      v9 = this;
    else
      v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    memmove((char *)v9 + _Off, (char *)v8 + _Off + v5, v6 - v5);
    v10 = v3->baseclass_0._Mysize - v5;
    v11 = v3->baseclass_0._Myres < 0x10;
    v3->baseclass_0._Mysize = v10;
    if ( !v11 )
    {
      *(_BYTE *)(*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + v10) = 0;
      return v3;
    }
    v3->baseclass_0.___u0.baseclass_0.dummy[v10] = 0;
  }
  return v3;
}

//----- (00401540) --------------------------------------------------------
char *__thiscall std::allocator<char>::allocate(std::allocator<char> *this, unsigned int _Count)
{
  char *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0xFFFFFFFF || (result = (char *)operator new(_Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00401590) --------------------------------------------------------
#error "4016C7: positive sp value has been found (funcsize=99)"

//----- (00401700) --------------------------------------------------------
bool __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Grow(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Newsize, bool _Trim)
{
  unsigned int v3; // ebx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // esi@1
  unsigned int v5; // eax@3
  bool result; // al@4
  unsigned int v7; // edi@7
  char *v8; // ebx@10

  v3 = _Newsize;
  v4 = this;
  if ( _Newsize > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v5 = this->baseclass_0._Myres;
  if ( v5 >= _Newsize )
  {
    if ( _Trim && _Newsize < 0x10 )
    {
      v7 = this->baseclass_0._Mysize;
      if ( _Newsize < v7 )
        v7 = _Newsize;
      if ( v5 >= 0x10 )
      {
        v8 = *(char **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v7 )
          memcpy(this->baseclass_0.___u0.baseclass_0.dummy, v8, v7);
        operator delete(v8);
        v3 = _Newsize;
      }
      v4->baseclass_0._Mysize = v7;
      v4->baseclass_0._Myres = 15;
      v4->baseclass_0.___u0.baseclass_0.dummy[v7] = 0;
      result = v3 > 0;
    }
    else
    {
      if ( !_Newsize )
      {
        this->baseclass_0._Mysize = 0;
        if ( v5 >= 0x10 )
          v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
        v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
      result = _Newsize > 0;
    }
  }
  else
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(
      this,
      _Newsize,
      this->baseclass_0._Mysize);
    result = _Newsize > 0;
  }
  return result;
}

//----- (004017B0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // ecx@1
  unsigned int v6; // edi@1
  unsigned int v7; // edi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@6
  unsigned int v9; // eax@9
  char *v10; // eax@14
  bool v11; // cf@20

  v4 = this;
  v5 = _Right;
  v6 = _Right->baseclass_0._Mysize;
  if ( v6 < _Roff )
    std::_Xout_of_range("invalid string position");
  v7 = v6 - _Roff;
  if ( _Count < v7 )
    v7 = _Count;
  if ( v4 == _Right )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(v4, _Roff + v7, 0xFFFFFFFFu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(v4, 0, _Roff);
    return v4;
  }
  if ( v7 > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v9 = v4->baseclass_0._Myres;
  if ( v9 < v7 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v4, v7, v4->baseclass_0._Mysize);
    v5 = _Right;
    if ( !v7 )
      return v4;
LABEL_11:
    if ( v5->baseclass_0._Myres >= 0x10 )
      v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v4->baseclass_0._Myres < 0x10 )
      v10 = (char *)v4;
    else
      v10 = *(char **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
    memcpy(v10, (char *)v5 + _Roff, v7);
    v11 = v4->baseclass_0._Myres < 0x10;
    v4->baseclass_0._Mysize = v7;
    if ( !v11 )
    {
      *(_BYTE *)(*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] + v7) = 0;
      return v4;
    }
    v4->baseclass_0.___u0.baseclass_0.dummy[v7] = 0;
    return v4;
  }
  if ( v7 )
    goto LABEL_11;
  v4->baseclass_0._Mysize = 0;
  if ( v9 < 0x10 )
  {
    result = v4;
    v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v4;
  }
  return result;
}

//----- (004018A0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  unsigned int v4; // ecx@2
  unsigned int v5; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@11
  unsigned int v8; // eax@15
  char *v9; // eax@18
  bool v10; // cf@24

  v3 = this;
  if ( _Ptr )
  {
    v4 = this->baseclass_0._Myres;
    v5 = (unsigned int)(v4 < 0x10 ? v3 : *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( (unsigned int)_Ptr >= v5 )
    {
      v6 = v4 < 0x10 ? v3 : *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( (unsigned int)((char *)v6 + v3->baseclass_0._Mysize) > (unsigned int)_Ptr )
      {
        if ( v4 < 0x10 )
          result = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                     v3,
                     v3,
                     _Ptr - (const char *)v3,
                     _Count);
        else
          result = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                     v3,
                     v3,
                     (unsigned int)&_Ptr[-*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0]],
                     _Count);
        return result;
      }
    }
  }
  if ( _Count > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v8 = v3->baseclass_0._Myres;
  if ( v8 < _Count )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v3, _Count, v3->baseclass_0._Mysize);
    if ( !_Count )
      return v3;
LABEL_17:
    if ( v3->baseclass_0._Myres < 0x10 )
      v9 = (char *)v3;
    else
      v9 = *(char **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
    memcpy(v9, (char *)_Ptr, _Count);
    v10 = v3->baseclass_0._Myres < 0x10;
    v3->baseclass_0._Mysize = _Count;
    if ( !v10 )
    {
      *(_BYTE *)(*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + _Count) = 0;
      return v3;
    }
    v3->baseclass_0.___u0.baseclass_0.dummy[_Count] = 0;
    return v3;
  }
  if ( _Count )
    goto LABEL_17;
  v3->baseclass_0._Mysize = 0;
  if ( v8 < 0x10 )
  {
    result = v3;
    v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v3;
  }
  return result;
}

//----- (004019A0) --------------------------------------------------------
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr)
{
  this->baseclass_0._Myres = 15;
  this->baseclass_0._Mysize = 0;
  this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(this, _Ptr, strlen(_Ptr));
}

//----- (004019E0) --------------------------------------------------------
void __thiscall Argv::_Argv(Argv *this)
{
  this->vfptr = (ArgvVtbl *)&Argv::_vftable_;
}
// 9775C8: using guessed type int (__thiscall *Argv___vftable_)(void *p, char);

//----- (004019F0) --------------------------------------------------------
char *__thiscall Argv::GetMerge(Argv *this, char *filename)
{
  char *result; // eax@1
  char *v3; // edx@1
  unsigned int v4; // esi@1
  char v5; // cl@2

  result = this->m_Merge;
  v3 = this->m_Path;
  v4 = this->m_Merge - this->m_Path;
  do
  {
    v5 = *v3;
    v3[v4] = *v3;
    ++v3;
  }
  while ( v5 );
  strcat(result, filename);
  return result;
}

//----- (00401A40) --------------------------------------------------------
void __thiscall Argv::Init(Argv *this)
{
  Argv *v1; // esi@1
  const char *v2; // edi@1
  int v3; // eax@1
  char v4; // cl@2
  int v5; // eax@3
  char v6; // cl@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@5
  int v8; // esi@7
  char v9; // cl@8
  int v10; // eax@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strFileaName; // [sp+0h] [bp-12Ch]@1
  char szExt[128]; // [sp+1Ch] [bp-110h]@1
  char szFileName[128]; // [sp+9Ch] [bp-90h]@1
  unsigned int v14; // [sp+11Ch] [bp-10h]@1
  int v15; // [sp+128h] [bp-4h]@1
  int v16; // [sp+12Ch] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  v2 = this->m_Path;
  GetModuleFileNameA(0, this->m_Path, 0x104u);
  _splitpath(v2, 0, 0, szFileName, szExt);
  strFileaName.baseclass_0._Myres = 15;
  strFileaName.baseclass_0._Mysize = 0;
  strFileaName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = (int)szFileName;
  v15 = 0;
  do
    v4 = *(_BYTE *)v3++;
  while ( v4 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
    &strFileaName,
    szFileName,
    v3 - (_DWORD)&szFileName[1]);
  v5 = (int)szExt;
  do
    v6 = *(_BYTE *)v5++;
  while ( v6 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
    &strFileaName,
    szExt,
    v5 - (_DWORD)&szExt[1]);
  v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strFileaName;
  if ( strFileaName.baseclass_0._Myres < 0x10 )
    v7 = &strFileaName;
  v8 = (char *)v1 - (char *)v7;
  do
  {
    v9 = v7->baseclass_0.___u0.baseclass_0.dummy[0];
    v7[27].baseclass_0._Alval.baseclass_0.dummy[v8] = v7->baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v7 + 1);
  }
  while ( v9 );
  strrchr((char *)v2, 92);
  *(_BYTE *)(v10 + 1) = 0;
  if ( strFileaName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strFileaName);
}
// A85C00: using guessed type int __security_cookie;

//----- (00401B70) --------------------------------------------------------
void __thiscall Argv::Argv(Argv *this)
{
  this->vfptr = (ArgvVtbl *)&Argv::_vftable_;
  Argv::Init(this);
}
// 9775C8: using guessed type int (__thiscall *Argv___vftable_)(void *p, char);

//----- (00401B90) --------------------------------------------------------
void *__thiscall Argv::_vector_deleting_destructor_(Argv *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (ArgvVtbl *)&Argv::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9775C8: using guessed type int (__thiscall *Argv___vftable_)(void *p, char);

//----- (00401BC0) --------------------------------------------------------
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this)
{
  this->baseclass_0._Myres = 15;
  this->baseclass_0._Mysize = 0;
  this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (00401BE0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // edx@1
  unsigned int v5; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // esi@1
  unsigned int v7; // ebx@3
  unsigned int v8; // eax@3
  unsigned int v9; // eax@5
  int v10; // edi@8
  unsigned int v11; // ecx@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // ecx@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // eax@20
  bool v15; // cf@22

  v4 = _Right;
  v5 = _Right->baseclass_0._Mysize;
  v6 = this;
  if ( v5 < _Roff )
    std::_Xout_of_range("invalid string position");
  v7 = _Count;
  v8 = v5 - _Roff;
  if ( v8 < _Count )
    v7 = v8;
  v9 = this->baseclass_0._Mysize;
  if ( -1 - v9 <= v7 )
    std::_Xlength_error("string too long");
  if ( !v7 )
    return v6;
  v10 = v9 + v7;
  if ( v9 + v7 > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v11 = this->baseclass_0._Myres;
  if ( v11 < v10 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v6, v9 + v7, v9);
    v4 = _Right;
    if ( v10 )
    {
LABEL_12:
      if ( v4->baseclass_0._Myres < 0x10 )
        v12 = v4;
      else
        v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v6->baseclass_0._Myres < 0x10 )
        v14 = v6;
      else
        v14 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
      memcpy((char *)v14 + v6->baseclass_0._Mysize, (char *)v12 + _Roff, v7);
      v15 = v6->baseclass_0._Myres < 0x10;
      v6->baseclass_0._Mysize = v10;
      if ( !v15 )
      {
        *(_BYTE *)(*(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] + v10) = 0;
        return v6;
      }
      v6->baseclass_0.___u0.baseclass_0.dummy[v10] = 0;
    }
    return v6;
  }
  if ( v10 )
    goto LABEL_12;
  v6->baseclass_0._Mysize = 0;
  if ( v11 < 0x10 )
  {
    result = v6;
    v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v6;
  }
  return result;
}

//----- (00401CD0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Count)
{
  char *v3; // edx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // esi@1
  unsigned int v5; // ecx@2
  unsigned int v6; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@11
  unsigned int v9; // eax@13
  unsigned int v10; // edi@16
  unsigned int v11; // ecx@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@21
  bool v13; // cf@27

  v3 = (char *)_Ptr;
  v4 = this;
  if ( _Ptr )
  {
    v5 = this->baseclass_0._Myres;
    v6 = (unsigned int)(v5 < 0x10 ? v4 : *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( (unsigned int)_Ptr >= v6 )
    {
      v7 = v5 < 0x10 ? v4 : *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( (unsigned int)((char *)v7 + v4->baseclass_0._Mysize) > (unsigned int)_Ptr )
      {
        if ( v5 < 0x10 )
          result = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                     v4,
                     v4,
                     _Ptr - (const char *)v4,
                     _Count);
        else
          result = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                     v4,
                     v4,
                     (unsigned int)&_Ptr[-*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0]],
                     _Count);
        return result;
      }
    }
  }
  v9 = v4->baseclass_0._Mysize;
  if ( -1 - v9 <= _Count )
    std::_Xlength_error("string too long");
  if ( !_Count )
    return v4;
  v10 = v9 + _Count;
  if ( v9 + _Count > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v11 = v4->baseclass_0._Myres;
  if ( v11 < v10 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v4, v9 + _Count, v9);
    v3 = (char *)_Ptr;
    if ( v10 )
    {
LABEL_20:
      if ( v4->baseclass_0._Myres < 0x10 )
        v12 = v4;
      else
        v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
      memcpy((char *)v12 + v4->baseclass_0._Mysize, v3, _Count);
      v13 = v4->baseclass_0._Myres < 0x10;
      v4->baseclass_0._Mysize = v10;
      if ( !v13 )
      {
        *(_BYTE *)(*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] + v10) = 0;
        return v4;
      }
      v4->baseclass_0.___u0.baseclass_0.dummy[v10] = 0;
    }
    return v4;
  }
  if ( v10 )
    goto LABEL_20;
  v4->baseclass_0._Mysize = 0;
  if ( v11 < 0x10 )
  {
    result = v4;
    v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v4;
  }
  return result;
}

//----- (00401DF0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr)
{
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(this, _Ptr, strlen(_Ptr));
}

//----- (00401E20) --------------------------------------------------------
void __thiscall BoxAnnounceWin::BoxAnnounceWin(BoxAnnounceWin *this)
{
  BoxAnnounceWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_fStartTime = 0.0;
  v1->m_pkSprWin = 0;
  v1->m_fLifeTime = 0.0;
  v1->m_pkMsg = 0;
  v1->m_bEnableLifeTime = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BoxAnnounceWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BoxAnnounceWin::_vftable_;
}
// 9775E0: using guessed type int (__stdcall *BoxAnnounceWin___vftable_)(int uiFlags);
// 9775FC: using guessed type int (__thiscall *BoxAnnounceWin___vftable_)(void *p, char);

//----- (00401E60) --------------------------------------------------------
void __thiscall BoxAnnounceWin::_BoxAnnounceWin(BoxAnnounceWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BoxAnnounceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BoxAnnounceWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9775E0: using guessed type int (__stdcall *BoxAnnounceWin___vftable_)(int uiFlags);
// 9775FC: using guessed type int (__thiscall *BoxAnnounceWin___vftable_)(void *p, char);

//----- (00401E80) --------------------------------------------------------
void __thiscall BoxAnnounceWin::SetMsg(BoxAnnounceWin *this, const char *pcMsg)
{
  BoxAnnounceWin *v2; // esi@1
  int v3; // edi@3
  tagSIZE kSize; // [sp+24h] [bp-8h]@3

  v2 = this;
  if ( this->m_pkSprWin )
  {
    if ( this->m_pkMsg )
    {
      ((void (__stdcall *)(const char *))this->m_pkMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcMsg);
      ((void (__stdcall *)(tagSIZE *))v2->m_pkMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(&kSize);
      v3 = kSize.cx + 30;
      ((void (__stdcall *)(int))v2->m_pkMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)(kSize.cx + 30);
      ((void (__stdcall *)(signed int))v2->m_pkMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
      ((void (__stdcall *)(int))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v3);
      ((void (__thiscall *)(BoxAnnounceWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.28);
    }
  }
}

//----- (00401F40) --------------------------------------------------------
bool __thiscall BoxAnnounceWin::Create(BoxAnnounceWin *this, PgFrameWork *pkFrameWork)
{
  BoxAnnounceWin *v2; // esi@1
  bool result; // al@2
  PgFont *v4; // eax@3
  unsigned int v5; // ST1C_4@4
  NiSourceTexture *v6; // eax@4
  PgWinSpr *v7; // eax@4
  PgWinSpr *v8; // edi@4
  PgWin *v9; // ST20_4@4
  PgFont *v10; // ST1C_4@4
  unsigned int v11; // ST18_4@4
  unsigned int v12; // eax@4
  PgWinText *v13; // eax@4

  v2 = this;
  if ( PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFrameWork, "BoxAnnounceWin", 0) && (v4 = Font::Get(BOLD)) != 0 )
  {
    v5 = 3 * v4->m_uiDefHeight;
    v6 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
    v7 = PgWinSpr::CreateWin(v6, 0, 0, 0x64u, v5, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkSprWin = v7;
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v7,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.5);
    v8 = v2->m_pkSprWin;
    v9 = (PgWin *)v2->m_pkSprWin;
    v10 = Font::Get(BOLD);
    v11 = ((int (__thiscall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v8);
    v12 = ((int (__thiscall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v8);
    v13 = PgWinText::CreateWin(0, 0, v12, v11, v10, v9, 0, 0);
    v2->m_pkMsg = v13;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v13,
      5u);
    ((void (__stdcall *)(_DWORD))v2->m_pkMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00402050) --------------------------------------------------------
void __thiscall BoxAnnounceWin::UpdateMeWin(BoxAnnounceWin *this, float fCurTime)
{
  if ( this->m_bEnableLifeTime )
  {
    if ( this->m_fLifeTime + this->m_fStartTime < Timer::ms_fCurTime )
    {
      this->m_bEnableLifeTime = 0;
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00402090) --------------------------------------------------------
void __thiscall BoxAnnounceWin::SetLifeTime(BoxAnnounceWin *this, float fLifeTime)
{
  this->m_bEnableLifeTime = 1;
  this->m_fStartTime = Timer::ms_fCurTime;
  this->m_fLifeTime = fLifeTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004020C0) --------------------------------------------------------
BoxAnnounceWin *__cdecl BoxAnnounceWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  BoxAnnounceWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x16Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *((float *)v2 + 89) = 0.0;
    *(_DWORD *)v2 = &BoxAnnounceWin::_vftable_;
    *((float *)v2 + 90) = 0.0;
    *((_DWORD *)v2 + 58) = &BoxAnnounceWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_BYTE *)v2 + 352) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (BoxAnnounceWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9775E0: using guessed type int (__stdcall *BoxAnnounceWin___vftable_)(int uiFlags);
// 9775FC: using guessed type int (__thiscall *BoxAnnounceWin___vftable_)(void *p, char);

//----- (00402220) --------------------------------------------------------
void __thiscall NiRefObject::DecRefCount(NiRefObject *this)
{
  NiRefObject *v1; // esi@1

  v1 = this;
  if ( !InterlockedDecrement((volatile LONG *)&this->m_uiRefCount) )
  {
    if ( v1 )
      v1->vfptr->__vecDelDtor(v1, 1u);
  }
}

//----- (00402250) --------------------------------------------------------
bool __thiscall NiObject::IsKindOf(NiObject *this, NiRTTI *pkRTTI)
{
  int v2; // eax@1
  bool result; // al@4

  v2 = ((int (*)(void))this->baseclass_0.vfptr[1].__vecDelDtor)();
  if ( v2 )
  {
    while ( (NiRTTI *)v2 != pkRTTI )
    {
      v2 = *(_DWORD *)(v2 + 4);
      if ( !v2 )
        goto LABEL_4;
    }
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00402280) --------------------------------------------------------
void __thiscall NiAVObject::SetAppCulled(NiAVObject *this, bool bAppCulled)
{
  if ( bAppCulled )
    this->m_uFlags |= 1u;
  else
    this->m_uFlags &= 0xFFFEu;
}

//----- (004022A0) --------------------------------------------------------
void __cdecl PgScreenXY::GetBoxClipLeftTop(unsigned int uiScreenCx, unsigned int uiScreenCy, unsigned int uiBoxCx, unsigned int uiBoxCy, float fCenterXRate, float fCenterYRate, int *iBoxLeft, int *iBoxTop)
{
  *iBoxLeft = (signed int)((double)(uiScreenCx - 1) * fCenterXRate);
  *iBoxTop = (signed int)((double)(uiScreenCy - 1) * fCenterYRate);
  *iBoxLeft -= uiBoxCx >> 1;
  *iBoxTop -= uiBoxCy >> 1;
  if ( *iBoxLeft < 0 )
    *iBoxLeft = 0;
  if ( *iBoxTop < 0 )
    *iBoxTop = 0;
  if ( uiBoxCx + *iBoxLeft > uiScreenCx )
    *iBoxLeft = uiScreenCx - uiBoxCx;
  if ( uiBoxCy + *iBoxTop > uiScreenCy )
    *iBoxTop = uiScreenCy - uiBoxCy;
}

//----- (00402340) --------------------------------------------------------
NiRTTI *__thiscall PgWin::GetRTTI(PgWin *this)
{
  return &PgWin::m_RTTI;
}

//----- (00402350) --------------------------------------------------------
void __thiscall PgWin::SetWinName(PgWin *this, const char *pcWinText)
{
  NiObjectNET::SetName(&this->baseclass_0.baseclass_0.baseclass_0, pcWinText);
}

//----- (00402360) --------------------------------------------------------
unsigned int __thiscall PgWin::GetWidth(PgWin *this)
{
  double v1; // st7@0
  PgWin *v2; // esi@1

  v2 = this;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)();
  return (signed __int64)(v1 * (double)(unsigned int)v2->___u2.m_iWidth);
}

//----- (004023B0) --------------------------------------------------------
unsigned int __thiscall PgWin::GetHeight(PgWin *this)
{
  double v1; // st7@0
  PgWin *v2; // esi@1

  v2 = this;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)();
  return (signed __int64)(v1 * (double)(unsigned int)v2->___u3.m_iHeight);
}

//----- (00402400) --------------------------------------------------------
void __thiscall PgWinSpr::SetWidth(PgWinSpr *this, unsigned int uiWidth)
{
  this->baseclass_0.___u2.m_iWidth = uiWidth;
}

//----- (00402410) --------------------------------------------------------
void __thiscall PgWin::GetWinSize(PgWin *this, unsigned int *uiWidth, unsigned int *uiHeight)
{
  PgWin *v3; // esi@1

  v3 = this;
  *uiWidth = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  *uiHeight = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3);
}

//----- (00402440) --------------------------------------------------------
void __thiscall PgWin::GetWinRect(PgWin *this, tagRECT *kRect)
{
  PgWin *v2; // esi@1

  v2 = this;
  kRect->left = 0;
  kRect->top = 0;
  kRect->right = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
               - 1;
  kRect->bottom = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2)
                - 1;
}

//----- (00402480) --------------------------------------------------------
void __thiscall PgWin::GetWinRect(PgWin *this, NiRect<int> *kRect)
{
  PgWin *v2; // esi@1

  v2 = this;
  kRect->m_left = 0;
  kRect->m_top = 0;
  kRect->m_right = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
                 - 1;
  kRect->m_bottom = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2)
                  - 1;
}

//----- (004024C0) --------------------------------------------------------
int __thiscall PgWin::GetLeftPos(PgWin *this)
{
  return ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
}

//----- (004024D0) --------------------------------------------------------
int __thiscall PgWin::GetRightPos(PgWin *this)
{
  PgWin *v1; // esi@1
  int v2; // edi@1

  v1 = this;
  v2 = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)() - 1;
  return v2
       + ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v1);
}

//----- (00402500) --------------------------------------------------------
int __thiscall PgWin::GetTopPos(PgWin *this)
{
  return ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
}

//----- (00402510) --------------------------------------------------------
int __thiscall PgWin::GetBottomPos(PgWin *this)
{
  PgWin *v1; // esi@1
  int v2; // edi@1

  v1 = this;
  v2 = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)() - 1;
  return v2
       + ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v1);
}

//----- (00402540) --------------------------------------------------------
int __thiscall PgWin::GetXPos(PgWin *this)
{
  return (signed int)this->baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
}

//----- (00402550) --------------------------------------------------------
int __thiscall PgWin::GetYPos(PgWin *this)
{
  return (signed int)this->baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
}

//----- (00402560) --------------------------------------------------------
void __thiscall PgWin::SetXPos(PgWin *this, int iXPos)
{
  this->baseclass_0.baseclass_0.m_kLocal.m_Translate.x = (double)iXPos;
}

//----- (00402570) --------------------------------------------------------
void __thiscall PgWin::SetYPos(PgWin *this, int iYPos)
{
  this->baseclass_0.baseclass_0.m_kLocal.m_Translate.y = (double)iYPos;
}

//----- (00402580) --------------------------------------------------------
void __thiscall PgWin::GetWinPos(PgWin *this, int *iXPos, int *iYPos)
{
  PgWin *v3; // esi@1

  v3 = this;
  *iXPos = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  *iYPos = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
}

//----- (004025B0) --------------------------------------------------------
void __thiscall PgWin::GetWinScreenRect(PgWin *this, tagRECT *kRect)
{
  PgWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[53].__vecDelDtor)(
    kRect,
    &kRect->top);
  kRect->right = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2)
               + kRect->left
               - 1;
  kRect->bottom = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2)
                + kRect->top
                - 1;
}

//----- (00402600) --------------------------------------------------------
void __thiscall PgWin::ClientToScreen(PgWin *this, int *iClientX, int *iClientY)
{
  int iY; // [sp+0h] [bp-8h]@1
  int iX; // [sp+4h] [bp-4h]@1

  ((void (__stdcall *)(int *, int *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[53].__vecDelDtor)(
    &iX,
    &iY);
  *iClientX += iX;
  *iClientY += iY;
}

//----- (00402630) --------------------------------------------------------
void __thiscall PgWin::ScreenToClient(PgWin *this, int *iScreenX, int *iScreenY)
{
  int iY; // [sp+0h] [bp-8h]@1
  int iX; // [sp+4h] [bp-4h]@1

  ((void (__stdcall *)(int *, int *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[53].__vecDelDtor)(
    &iX,
    &iY);
  *iScreenX -= iX;
  *iScreenY -= iY;
}

//----- (00402660) --------------------------------------------------------
void __thiscall PgWin::Enable(PgWin *this, bool b)
{
  this->m_bEnable = b;
}

//----- (00402670) --------------------------------------------------------
bool __thiscall PgWin::GetEnable(PgWin *this)
{
  return this->m_bEnable;
}

//----- (00402680) --------------------------------------------------------
void __thiscall PgWin::Show(PgWin *this, bool b)
{
  if ( b )
    this->baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  else
    this->baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (004026A0) --------------------------------------------------------
bool __thiscall PgWin::GetShow(PgWin *this)
{
  return ~LOBYTE(this->baseclass_0.baseclass_0.m_uFlags) & 1;
}

//----- (004026B0) --------------------------------------------------------
void __thiscall PgWin::SetScale(PgWin *this, float fScale)
{
  double v2; // st6@1

  v2 = fScale;
  if ( fScale < 0.0 )
    v2 = (float)0.0;
  if ( v2 != this->baseclass_0.baseclass_0.m_kLocal.m_fScale )
  {
    this->baseclass_0.baseclass_0.m_kLocal.m_fScale = v2;
    NiAVObject::Update(&this->baseclass_0.baseclass_0, 0.0, 0);
  }
}

//----- (00402700) --------------------------------------------------------
float __thiscall PgWin::GetScale(PgWin *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->baseclass_0.baseclass_0.m_kLocal.m_fScale;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (00402710) --------------------------------------------------------
void __thiscall PgWin::SetZRotate(PgWin *this, float fangle)
{
  NiAVObject *v2; // esi@1

  v2 = (NiAVObject *)this;
  NiMatrix3::MakeZRotation(&this->baseclass_0.baseclass_0.m_kLocal.m_Rotate, fangle);
  NiAVObject::Update(v2, 0.0, 0);
}

//----- (00402740) --------------------------------------------------------
void __thiscall PgWin::SetRotate(PgWin *this, NiMatrix3 *kMat)
{
  memcpy(&this->baseclass_0.baseclass_0.m_kLocal, kMat, 0x24u);
}

//----- (00402760) --------------------------------------------------------
void __thiscall PgWin::SetExtStyle(PgWin *this, unsigned int uiExtstyle)
{
  this->m_uiExtStyle = uiExtstyle;
}

//----- (00402770) --------------------------------------------------------
unsigned int __thiscall PgWin::GetExtStyle(PgWin *this)
{
  return this->m_uiExtStyle;
}

//----- (00402780) --------------------------------------------------------
void __thiscall PgWin::MoveWin(PgWin *this, int iXPos, int iYPos)
{
  NiAVObject *v3; // esi@1

  v3 = (NiAVObject *)this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(iXPos);
  v3->baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor((NiRefObject *)v3, iYPos);
  NiAVObject::Update(v3, 0.0, 0);
}

//----- (004027C0) --------------------------------------------------------
bool __thiscall PgWin::HitTestEx(PgWin *this, int iSx, int iSy)
{
  return ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[87].__vecDelDtor)(
           iSx,
           iSy);
}

//----- (004027D0) --------------------------------------------------------
bool __thiscall PgWin::HitTest(PgWin *this, int iSx, int iSy)
{
  PgWin *v3; // esi@1
  int v4; // eax@2
  int v5; // eax@4

  v3 = this;
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor)(
    &iSx,
    &iSy);
  return iSx >= 0
      && (v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3),
          iSx < v4)
      && iSy >= 0
      && (v5 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3),
          iSy < v5);
}

//----- (00402830) --------------------------------------------------------
bool __thiscall PgWin::HitTest(PgWin *this, int iSx, int iSy, int *iClientAreaX, int *iClientAreaY)
{
  PgWin *v5; // esi@1
  int v6; // eax@2
  int v7; // eax@4
  int v8; // eax@5
  int v9; // eax@5
  bool result; // al@5

  v5 = this;
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor)(
    &iSx,
    &iSy);
  if ( iSx < 0
    || (v6 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5),
        iSx >= v6)
    || iSy < 0
    || (v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5),
        iSy >= v7) )
  {
    result = 0;
  }
  else
  {
    v8 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5);
    *iClientAreaX = iSx - v8;
    v9 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5);
    *iClientAreaY = iSy - v9;
    result = 1;
  }
  return result;
}

//----- (004028C0) --------------------------------------------------------
bool __thiscall PgWin::ProcessMeDrop(PgWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PgWin *v4; // esi@1
  bool result; // al@2

  v4 = this;
  if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[102].__vecDelDtor)(
                          pkDrop,
                          iDropXPos,
                          iDropYPos) )
  {
    ((void (__stdcall *)(_DWORD))(*pkDrop)->m_pkSender->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[104].__vecDelDtor)(pkDrop);
    result = 1;
  }
  else
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[103].__vecDelDtor)(
                            v4,
                            pkDrop,
                            iDropXPos,
                            iDropYPos) )
    {
      ((void (__stdcall *)(_DWORD))(*pkDrop)->m_pkSender->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[105].__vecDelDtor)(pkDrop);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (00402940) --------------------------------------------------------
bool __thiscall PgWin::GetRegisterFirstHit(PgWin *this)
{
  return this->m_bResigterFirstHit;
}

//----- (00402950) --------------------------------------------------------
void __thiscall PgWin::SetRegisterFirstHit(PgWin *this, bool b)
{
  this->m_bResigterFirstHit = b;
}

//----- (00402960) --------------------------------------------------------
bool __thiscall PgSprData::PgHitTester::HitTest(PgSprData::PgHitTester *this, int iXPos, int iYPos)
{
  unsigned int v3; // esi@1
  signed int v4; // ebx@1
  unsigned int v5; // eax@1
  char *v6; // edi@5
  bool result; // al@6

  v3 = this->m_uiWidth;
  v4 = (signed int)((double)this->m_uiWidth / (double)this->m_uiChangedWidth * (double)iXPos);
  v5 = (signed int)((double)this->m_uiHeight / (double)this->m_uiChangedHeight * (double)iYPos);
  if ( v4 < 0 || (v5 & 0x80000000u) != 0 || v4 >= v3 || v5 >= this->m_uiHeight )
  {
    result = 0;
  }
  else
  {
    v6 = this->m_pucBuff;
    if ( v6 )
      result = *(&v6[v5 * v3] + v4) != 0;
    else
      result = 1;
  }
  return result;
}

//----- (00402A10) --------------------------------------------------------
unsigned int __thiscall PgWinSpr::GetSelectSprIndex(PgWinSpr *this)
{
  return this->m_uiSelectSprIndex;
}

//----- (00402A20) --------------------------------------------------------
void __thiscall PgWinFrame::SetMovable(PgWinFrame *this, bool b)
{
  this->m_bMovable = b;
}

//----- (00402A30) --------------------------------------------------------
bool __thiscall PgWinFrame::GetMovable(PgWinFrame *this)
{
  return this->m_bMovable;
}

//----- (00402A40) --------------------------------------------------------
void *__thiscall BoxAnnounceWin::_scalar_deleting_destructor_(BoxAnnounceWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BoxAnnounceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BoxAnnounceWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9775E0: using guessed type int (__stdcall *BoxAnnounceWin___vftable_)(int uiFlags);
// 9775FC: using guessed type int (__thiscall *BoxAnnounceWin___vftable_)(void *p, char);

//----- (00402A80) --------------------------------------------------------
bool __cdecl NiObject::IsKindOf(NiRTTI *pkRTTI, NiObject *pkObject)
{
  int v2; // eax@2
  bool result; // al@5

  if ( pkObject && (v2 = ((int (*)(void))pkObject->baseclass_0.vfptr[1].__vecDelDtor)()) != 0 )
  {
    while ( (NiRTTI *)v2 != pkRTTI )
    {
      v2 = *(_DWORD *)(v2 + 4);
      if ( !v2 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00402AB0) --------------------------------------------------------
PgWin *__thiscall PgWin::GetParentWin(PgWin *this)
{
  NiNode *v1; // esi@1
  PgWin *result; // eax@2
  int v3; // eax@3

  v1 = this->baseclass_0.baseclass_0.m_pkParent;
  if ( v1 )
  {
    v3 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(this->baseclass_0.baseclass_0.m_pkParent);
    if ( v3 )
    {
      while ( (NiRTTI *)v3 != &PgWin::m_RTTI )
      {
        v3 = *(_DWORD *)(v3 + 4);
        if ( !v3 )
          goto LABEL_6;
      }
      result = (PgWin *)v1;
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00402B00) --------------------------------------------------------
PgWin *__thiscall PgWin::GetNextChildWin(PgWin *this, unsigned int *uiPos)
{
  PgWin *v2; // ebx@1
  PgWin *v3; // esi@2
  int v4; // eax@3
  PgWin *result; // eax@7

  v2 = this;
  if ( *uiPos >= this->baseclass_0.m_kChildren.m_uiSize )
  {
LABEL_7:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      v3 = (PgWin *)v2->baseclass_0.m_kChildren.m_pBase[*uiPos].m_pObject;
      if ( v3 )
      {
        v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v3);
        if ( v4 )
          break;
      }
LABEL_6:
      ++*uiPos;
      if ( *uiPos >= v2->baseclass_0.m_kChildren.m_uiSize )
        goto LABEL_7;
    }
    while ( (NiRTTI *)v4 != &PgWin::m_RTTI )
    {
      v4 = *(_DWORD *)(v4 + 4);
      if ( !v4 )
        goto LABEL_6;
    }
    ++*uiPos;
    result = v3;
  }
  return result;
}

//----- (00402B60) --------------------------------------------------------
void __thiscall PgWin::GetWinRectWithChild(PgWin *this, NiRect<int> *kRect)
{
  PgWin *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@1
  NiRect<int> *v4; // edi@1
  int v5; // ebx@1
  PgWin *v6; // esi@1
  int v7; // ebx@4
  int v8; // eax@4
  int v9; // ecx@4
  int v10; // esi@4
  int v11; // eax@4
  int v12; // edx@4
  int v13; // eax@6
  int v14; // eax@8
  int v15; // ecx@10
  int v16; // eax@10
  PgWin *v17; // ecx@12
  NiRect<int> kChildRect; // [sp+Ch] [bp-14h]@4
  PgWin *thisa; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[46].__vecDelDtor;
  v4 = kRect;
  thisa = this;
  ((void (__stdcall *)(NiRect<int> *))v3)(kRect);
  v5 = 0;
  kRect = 0;
  v6 = PgWin::GetNextChildWin(v2, (unsigned int *)&kRect);
  if ( v6 )
  {
    while ( 1 )
    {
      kChildRect.m_left = v5;
      kChildRect.m_right = v5;
      kChildRect.m_top = v5;
      kChildRect.m_bottom = v5;
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor(
        (NiRefObject *)v6,
        (unsigned int)&kChildRect);
      v7 = ((int (__thiscall *)(PgWin *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v6);
      v8 = ((int (__thiscall *)(PgWin *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v6);
      kChildRect.m_bottom += v7;
      v9 = v8 + kChildRect.m_left;
      v10 = v8 + kChildRect.m_right;
      v11 = v4->m_left;
      v12 = v7 + kChildRect.m_top;
      kChildRect.m_left = v9;
      kChildRect.m_right = v10;
      kChildRect.m_top += v7;
      if ( v11 > v9 )
        v11 = v9;
      v4->m_left = v11;
      v13 = v4->m_top;
      if ( v13 > v12 )
        v13 = v12;
      v4->m_top = v13;
      v14 = v4->m_right;
      if ( v14 < v10 )
        v14 = v10;
      v15 = kChildRect.m_bottom;
      v4->m_right = v14;
      v16 = v4->m_bottom;
      if ( v16 < v15 )
        v16 = v15;
      v17 = thisa;
      v4->m_bottom = v16;
      v6 = PgWin::GetNextChildWin(v17, (unsigned int *)&kRect);
      if ( !v6 )
        break;
      v5 = 0;
    }
  }
}

//----- (00402C40) --------------------------------------------------------
void __thiscall PgWin::GetWinScreenPos(PgWin *this, int *iSx, int *iSy)
{
  PgWin *v3; // esi@1
  PgWin *v4; // esi@1
  NiNode *v5; // esi@2
  PgWin *v6; // eax@3
  int v7; // eax@4
  char v8; // al@7
  int iParentY; // [sp+4h] [bp-10h]@2
  int iParentX; // [sp+8h] [bp-Ch]@2
  int iMyY; // [sp+Ch] [bp-8h]@1
  int iMyX; // [sp+10h] [bp-4h]@1

  v3 = this;
  ((void (__stdcall *)(int *, int *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
    &iMyX,
    &iMyY);
  v4 = PgWin::GetParentWin(v3);
  if ( v4 )
  {
    do
    {
      ((void (__thiscall *)(PgWin *, int *, int *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
        v4,
        &iParentX,
        &iParentY);
      iMyX += iParentX;
      iMyY += iParentY;
      v5 = v4->baseclass_0.baseclass_0.m_pkParent;
      if ( v5 )
      {
        v7 = ((int (__thiscall *)(NiNode *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v5);
        if ( v7 )
        {
          while ( (NiRTTI *)v7 != &PgWin::m_RTTI )
          {
            v7 = *(_DWORD *)(v7 + 4);
            if ( !v7 )
              goto LABEL_7;
          }
          v8 = 1;
        }
        else
        {
LABEL_7:
          v8 = 0;
        }
        v6 = (PgWin *)(v8 != 0 ? (int)v5 : 0);
      }
      else
      {
        v6 = 0;
      }
      v4 = v6;
    }
    while ( v6 );
    *iSx = iMyX;
    *iSy = iMyY;
  }
  else
  {
    *iSx = iMyX;
    *iSy = iMyY;
  }
}

//----- (00402D00) --------------------------------------------------------
void __thiscall PgWin::InitPos(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate)
{
  PgWin *v5; // esi@1
  NiRect<int> kRect; // [sp+18h] [bp-10h]@1

  v5 = this;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  ((void (__stdcall *)(NiRect<int> *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(&kRect);
  PgScreenXY::GetBoxClipLeftTop(
    uiScreenWidth,
    uiScreenHeight,
    kRect.m_right - kRect.m_left + 1,
    kRect.m_bottom - kRect.m_top + 1,
    fXPosRate,
    fYPosRate,
    (int *)&fXPosRate,
    (int *)&fYPosRate);
  ((void (__thiscall *)(PgWin *, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    v5,
    LODWORD(fXPosRate),
    LODWORD(fYPosRate));
}

//----- (00402D80) --------------------------------------------------------
void __thiscall PgWin::InitPos(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, int iXPos, float fYPosRate)
{
  PgWin *v5; // esi@1
  NiRect<int> kRect; // [sp+18h] [bp-10h]@1

  v5 = this;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  ((void (__stdcall *)(NiRect<int> *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(&kRect);
  PgScreenXY::GetBoxClipLeftTop(
    uiScreenWidth,
    uiScreenHeight,
    kRect.m_right - kRect.m_left + 1,
    kRect.m_bottom - kRect.m_top + 1,
    0.0,
    fYPosRate,
    (int *)&uiScreenHeight,
    (int *)&fYPosRate);
  ((void (__thiscall *)(PgWin *, int, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    v5,
    iXPos,
    LODWORD(fYPosRate));
}

//----- (00402E00) --------------------------------------------------------
void __thiscall PgWin::InitPos(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, int iYPos)
{
  PgWin *v5; // esi@1
  NiRect<int> kRect; // [sp+18h] [bp-10h]@1

  v5 = this;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  ((void (__stdcall *)(NiRect<int> *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(&kRect);
  PgScreenXY::GetBoxClipLeftTop(
    uiScreenWidth,
    uiScreenHeight,
    kRect.m_right - kRect.m_left + 1,
    kRect.m_bottom - kRect.m_top + 1,
    fXPosRate,
    0.0,
    (int *)&fXPosRate,
    (int *)&uiScreenHeight);
  ((void (__thiscall *)(PgWin *, _DWORD, int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    v5,
    LODWORD(fXPosRate),
    iYPos);
}

//----- (00402E80) --------------------------------------------------------
void __thiscall PgWin::EnableChildWin(PgWin *this, bool b)
{
  PgWin *v2; // ebx@1
  PgWin *v3; // esi@1
  int i; // edi@2
  int v5; // eax@5
  int uiPos; // [sp+8h] [bp-4h]@1

  v2 = this;
  uiPos = 0;
  v3 = PgWin::GetNextChildWin(this, (unsigned int *)&uiPos);
  if ( v3 )
  {
    for ( i = uiPos; ; ++i )
    {
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v3, b);
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor((NiRefObject *)v3, b);
      if ( i >= v2->baseclass_0.m_kChildren.m_uiSize )
        break;
      while ( 1 )
      {
        v3 = (PgWin *)v2->baseclass_0.m_kChildren.m_pBase[i].m_pObject;
        if ( v3 )
        {
          v5 = ((int (__thiscall *)(PgWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v3);
          if ( v5 )
            break;
        }
LABEL_8:
        ++i;
        if ( i >= v2->baseclass_0.m_kChildren.m_uiSize )
          return;
      }
      while ( (NiRTTI *)v5 != &PgWin::m_RTTI )
      {
        v5 = *(_DWORD *)(v5 + 4);
        if ( !v5 )
          goto LABEL_8;
      }
    }
  }
}

//----- (00402F20) --------------------------------------------------------
bool __thiscall PgWin::IsInputPossible(PgWin *this)
{
  PgWin *v1; // esi@1

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)()
      && PgWin::IsVisible(v1)
      && (!PgWin::ms_pkCapture || PgWin::ms_pkCapture == v1);
}

//----- (00402F60) --------------------------------------------------------
bool __thiscall PgWinSpr::HitTest(PgWinSpr *this, int iSx, int iSy)
{
  double v3; // st7@0
  PgWinSpr *v4; // esi@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@2
  int v6; // eax@3
  int v7; // eax@5
  bool result; // al@6
  PgSpr *v9; // edi@9
  int v10; // ebx@9
  PgSprData::PgHitTester *v11; // ecx@9
  double v12; // [sp+4h] [bp-Ch]@9
  int v13; // [sp+8h] [bp-8h]@2
  int v14; // [sp+Ch] [bp-4h]@2

  v4 = this;
  if ( !this->m_spSpr.m_pObject )
  {
    v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor;
    v13 = iSy;
    v14 = iSx;
    ((void (__stdcall *)(int *, int *))v5)(&v14, &v13);
    if ( v14 >= 0 )
    {
      v6 = ((int (__thiscall *)(PgWinSpr *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4);
      if ( v14 < v6 )
      {
        if ( v13 >= 0 )
        {
          v7 = ((int (__thiscall *)(PgWinSpr *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4);
          if ( v13 < v7 )
            return 1;
        }
      }
    }
    return 0;
  }
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)();
  if ( v3 <= 0.0 )
    return 0;
  ((void (__thiscall *)(PgWinSpr *, int *, int *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor)(
    v4,
    &iSx,
    &iSy);
  v9 = v4->m_spSpr.m_pObject;
  v12 = (double)iSy;
  ((void (__thiscall *)(PgWinSpr *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)(v4);
  v10 = (signed int)(v12 / v12);
  v12 = (double)iSx;
  ((void (__thiscall *)(PgWinSpr *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)(v4);
  v11 = v9->m_spSprData.m_pObject->m_akHitTester.m_pBase[v4->m_uiSelectSprIndex].m_pObject;
  if ( v11 )
    result = PgSprData::PgHitTester::HitTest(v11, (signed int)(v12 / v12), v10);
  else
    result = 0;
  return result;
}

//----- (00403070) --------------------------------------------------------
bool __thiscall PgWinSpr::HitTest(PgWinSpr *this, int iSx, int iSy, int *iClientAreaX, int *iClientAreaY)
{
  double v5; // st7@0
  PgWinSpr *v6; // esi@1
  bool result; // al@2
  double v8; // st7@5
  PgSpr *v9; // edi@5
  PgSprData::PgHitTester *v10; // ecx@5
  int v11; // eax@7
  int v12; // eax@7
  double v13; // [sp+4h] [bp-8h]@5

  v6 = this;
  if ( this->m_spSpr.m_pObject )
  {
    ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)();
    if ( v5 > 0.0 )
    {
      ((void (__thiscall *)(PgWinSpr *, int *, int *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor)(
        v6,
        &iSx,
        &iSy);
      v8 = (double)iSy;
      v9 = v6->m_spSpr.m_pObject;
      ((void (__thiscall *)(PgWinSpr *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)(v6);
      v13 = (double)iSx;
      ((void (__thiscall *)(PgWinSpr *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)(v6);
      v10 = v9->m_spSprData.m_pObject->m_akHitTester.m_pBase[v6->m_uiSelectSprIndex].m_pObject;
      if ( v10 && PgSprData::PgHitTester::HitTest(v10, (signed int)(v13 / v13), (signed int)(v8 / v8)) )
      {
        v11 = ((int (__thiscall *)(PgWinSpr *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v6);
        *iClientAreaX = iSx + v11;
        v12 = ((int (__thiscall *)(PgWinSpr *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v6);
        *iClientAreaY = iSy + v12;
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = PgWin::HitTest(&this->baseclass_0, iSx, iSy, iClientAreaX, iClientAreaY);
  }
  return result;
}

//----- (00403170) --------------------------------------------------------
unsigned int __thiscall PgWinSpr::GetWidth(PgWinSpr *this)
{
  double v1; // st7@0
  PgWinSpr *v2; // esi@1
  unsigned int v3; // ecx@1
  PgSpr *v4; // eax@2
  unsigned int result; // eax@3

  v2 = this;
  v3 = this->m_uiSelectSprIndex;
  if ( v3 != -1 && (v4 = v2->m_spSpr.m_pObject) != 0 )
  {
    result = PgSprData::GetChangedWidth(v4->m_spSprData.m_pObject, v3);
  }
  else
  {
    ((void (__thiscall *)(PgWinSpr *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)(v2);
    result = (signed __int64)(v1 * (double)(unsigned int)v2->baseclass_0.___u2.m_iWidth);
  }
  return result;
}

//----- (004031F0) --------------------------------------------------------
unsigned int __thiscall PgWinSpr::GetHeight(PgWinSpr *this)
{
  double v1; // st7@0
  PgWinSpr *v2; // esi@1
  unsigned int v3; // ecx@1
  PgSpr *v4; // eax@2
  unsigned int result; // eax@3

  v2 = this;
  v3 = this->m_uiSelectSprIndex;
  if ( v3 != -1 && (v4 = v2->m_spSpr.m_pObject) != 0 )
  {
    result = PgSprData::GetChangedHeight(v4->m_spSprData.m_pObject, v3);
  }
  else
  {
    ((void (__thiscall *)(PgWinSpr *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)(v2);
    result = (signed __int64)(v1 * (double)(unsigned int)v2->baseclass_0.___u3.m_iHeight);
  }
  return result;
}

//----- (00403270) --------------------------------------------------------
void __thiscall PgWin::SetHeight(PgWinSpr *this, unsigned int uiHeight)
{
  this->baseclass_0.___u3.m_iHeight = uiHeight;
}

//----- (00403280) --------------------------------------------------------
unsigned int __thiscall PgWinSpr::GetChangedWidth(PgWinSpr *this)
{
  unsigned int v1; // edx@1
  PgSpr *v2; // eax@2
  unsigned int result; // eax@3

  v1 = this->m_uiSelectSprIndex;
  if ( v1 != -1 && (v2 = this->m_spSpr.m_pObject) != 0 )
    result = PgSprData::GetChangedWidth(v2->m_spSprData.m_pObject, v1);
  else
    result = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  return result;
}

//----- (004032B0) --------------------------------------------------------
unsigned int __thiscall PgWinSpr::GetChangedHeight(PgWinSpr *this)
{
  unsigned int v1; // edx@1
  PgSpr *v2; // eax@2
  unsigned int result; // eax@3

  v1 = this->m_uiSelectSprIndex;
  if ( v1 != -1 && (v2 = this->m_spSpr.m_pObject) != 0 )
    result = PgSprData::GetChangedHeight(v2->m_spSprData.m_pObject, v1);
  else
    result = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  return result;
}

//----- (004032E0) --------------------------------------------------------
void __thiscall PgWinSpr::ChangeWidth(PgWinSpr *this, unsigned int uiWidth)
{
  PgWinSpr *v2; // esi@1
  unsigned int v3; // ecx@1
  PgSpr *v4; // eax@2

  v2 = this;
  v3 = this->m_uiSelectSprIndex;
  if ( v3 != -1 )
  {
    v4 = v2->m_spSpr.m_pObject;
    if ( v4 )
    {
      PgSprData::ChangeWidth(v4->m_spSprData.m_pObject, v3, uiWidth);
      NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    }
  }
}

//----- (00403320) --------------------------------------------------------
void __thiscall PgWinSpr::ChangeHeight(PgWinSpr *this, unsigned int uiHeight)
{
  PgWinSpr *v2; // esi@1
  unsigned int v3; // ecx@1
  PgSpr *v4; // eax@2

  v2 = this;
  v3 = this->m_uiSelectSprIndex;
  if ( v3 != -1 )
  {
    v4 = v2->m_spSpr.m_pObject;
    if ( v4 )
    {
      PgSprData::ChangeHeight(v4->m_spSprData.m_pObject, v3, uiHeight);
      NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    }
  }
}

//----- (00403360) --------------------------------------------------------
void __thiscall PgWinSpr::ResetChangedWidth(PgWinSpr *this)
{
  PgWinSpr *v1; // esi@1
  unsigned int v2; // ecx@1
  PgSpr *v3; // eax@2

  v1 = this;
  v2 = this->m_uiSelectSprIndex;
  if ( v2 != -1 )
  {
    v3 = v1->m_spSpr.m_pObject;
    if ( v3 )
    {
      PgSprData::ResetChangedWidth(v3->m_spSprData.m_pObject, v2);
      NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    }
  }
}

//----- (004033A0) --------------------------------------------------------
void __thiscall PgWinSpr::ResetChangedHeight(PgWinSpr *this)
{
  PgWinSpr *v1; // esi@1
  unsigned int v2; // ecx@1
  PgSpr *v3; // eax@2

  v1 = this;
  v2 = this->m_uiSelectSprIndex;
  if ( v2 != -1 )
  {
    v3 = v1->m_spSpr.m_pObject;
    if ( v3 )
    {
      PgSprData::ResetChangedHeight(v3->m_spSprData.m_pObject, v2);
      NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    }
  }
}

//----- (004033E0) --------------------------------------------------------
void __thiscall PgWinSpr::ChangeWidthWithUV(PgWinSpr *this, unsigned int uiWidth, bool bReverse)
{
  PgWinSpr *v3; // esi@1
  unsigned int v4; // ecx@1
  PgSpr *v5; // eax@2

  v3 = this;
  v4 = this->m_uiSelectSprIndex;
  if ( v4 != -1 )
  {
    v5 = v3->m_spSpr.m_pObject;
    if ( v5 )
    {
      PgSprData::ChangeWidthWithUV(v5->m_spSprData.m_pObject, v4, uiWidth, bReverse);
      NiAVObject::Update(&v3->baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    }
  }
}

//----- (00403420) --------------------------------------------------------
void __thiscall PgWinSpr::ChangeHeightWithUV(PgWinSpr *this, unsigned int uiHeight, bool bReverse)
{
  PgWinSpr *v3; // esi@1
  unsigned int v4; // ecx@1
  PgSpr *v5; // eax@2

  v3 = this;
  v4 = this->m_uiSelectSprIndex;
  if ( v4 != -1 )
  {
    v5 = v3->m_spSpr.m_pObject;
    if ( v5 )
    {
      PgSprData::ChangeHeightWithUV(v5->m_spSprData.m_pObject, v4, uiHeight, bReverse);
      NiAVObject::Update(&v3->baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    }
  }
}

//----- (00403460) --------------------------------------------------------
void __thiscall PgWinSpr::SetTexture(PgWinSpr *this, NiTexture *pkTexture)
{
  PgSpr *v2; // ecx@1

  v2 = this->m_spSpr.m_pObject;
  if ( v2 )
    PgSpr::SetTexture(v2, pkTexture);
}

//----- (00403480) --------------------------------------------------------
NiTexture *__thiscall PgWinSpr::GetTexture(PgWinSpr *this)
{
  PgSpr *v1; // ecx@1
  NiTexture *result; // eax@2

  v1 = this->m_spSpr.m_pObject;
  if ( v1 )
    result = PgSpr::GetTexture(v1);
  else
    result = 0;
  return result;
}

//----- (004034A0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::FindPos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, PgWin *const *element, void *kStart)
{
  void *v3; // edx@1
  int v4; // ecx@3
  void *result; // eax@3

  v3 = kStart;
  if ( kStart || (v3 = this->baseclass_0.m_pkHead) != 0 )
  {
    while ( 1 )
    {
      v4 = (int)((char *)v3 + 8);
      result = v3;
      v3 = *(void **)v3;
      if ( *element == *(PgWin *const *)v4 )
        break;
      if ( !v3 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (004034D0) --------------------------------------------------------
void __thiscall NiAVObject::AttachProperty(NiAVObject *this, NiProperty *pkProperty)
{
  NiAVObject *v2; // edi@1
  NiProperty *v3; // esi@1

  v2 = this;
  v3 = pkProperty;
  if ( pkProperty )
    InterlockedIncrement((volatile LONG *)&pkProperty->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v2->m_kPropertyList,
    (NiPointer<NiRoom> *)&pkProperty);
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (00403560) --------------------------------------------------------
bool __thiscall PgWinMgr::Add(PgWinMgr *this, PgWin *pkWin)
{
  PgWinMgr *v2; // ebx@1
  PgWin *v3; // esi@1
  bool result; // al@2

  v2 = this;
  v3 = pkWin;
  if ( pkWin )
  {
    InterlockedIncrement((volatile LONG *)&pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v2->m_kWinList,
      (NiPointer<NiDX92DBufferData> *)&pkWin);
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00403600) --------------------------------------------------------
void __thiscall PgWin::SetAlpha(PgWin *this, float fAlpha)
{
  PgWin *v2; // esi@1
  int v3; // ebx@1
  void *v4; // eax@2
  int v5; // eax@3
  NiMaterialProperty *v6; // edi@4
  NiMaterialProperty *v7; // eax@11
  double v8; // st7@12
  NiMaterialProperty *v9; // esi@15

  v2 = this;
  v3 = 0;
  if ( !this->m_spMaterialProp.m_pObject )
  {
    v4 = operator new(0x60u);
    if ( v4 )
    {
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v4);
      v3 = v5;
    }
    v6 = v2->m_spMaterialProp.m_pObject;
    if ( v6 != (NiMaterialProperty *)v3 )
    {
      if ( v6
        && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v2->m_spMaterialProp.m_pObject = (NiMaterialProperty *)v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)(v3 + 4));
    }
    v7 = v2->m_spMaterialProp.m_pObject;
    ++v7->m_uiRevID;
    v7->m_emit.r = 1.0;
    v7->m_emit.g = 1.0;
    v7->m_emit.b = 1.0;
    NiAVObject::AttachProperty(&v2->baseclass_0.baseclass_0, &v2->m_spMaterialProp.m_pObject->baseclass_0);
    NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0);
  }
  v8 = 1.0;
  if ( fAlpha >= 1.0 || (v8 = 0.0, fAlpha < 0.0) )
    fAlpha = v8;
  v9 = v2->m_spMaterialProp.m_pObject;
  ++v9->m_uiRevID;
  v9->m_fAlpha = fAlpha;
}

//----- (00403720) --------------------------------------------------------
float __thiscall PgWin::GetAlpha(PgWin *this)
{
  PgWin *v1; // esi@1
  int v2; // ebx@1
  void *v3; // eax@2
  int v4; // eax@3
  NiMaterialProperty *v5; // edi@4
  NiMaterialProperty *v6; // eax@11
  NiMaterialProperty *v7; // eax@11
  double v8; // st7@11
  float result; // st7@13

  v1 = this;
  v2 = 0;
  if ( this->m_spMaterialProp.m_pObject )
  {
    v8 = this->m_spMaterialProp.m_pObject->m_fAlpha;
  }
  else
  {
    v3 = operator new(0x60u);
    if ( v3 )
    {
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v3);
      v2 = v4;
    }
    v5 = v1->m_spMaterialProp.m_pObject;
    if ( v5 != (NiMaterialProperty *)v2 )
    {
      if ( v5
        && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spMaterialProp.m_pObject = (NiMaterialProperty *)v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    v6 = v1->m_spMaterialProp.m_pObject;
    v6->m_emit.r = 1.0;
    v6->m_emit.g = 1.0;
    v6->m_emit.b = 1.0;
    ++v6->m_uiRevID;
    v7 = v1->m_spMaterialProp.m_pObject;
    ++v7->m_uiRevID;
    v7->m_fAlpha = 1.0;
    NiAVObject::AttachProperty(&v1->baseclass_0.baseclass_0, &v1->m_spMaterialProp.m_pObject->baseclass_0);
    NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0);
    v8 = v1->m_spMaterialProp.m_pObject->m_fAlpha;
  }
  LODWORD(result) = LODWORD(v8);
  return result;
}

//----- (00403840) --------------------------------------------------------
NiPointer<PgWin> *__thiscall PgWinMgr::Remove(PgWinMgr *this, NiPointer<PgWin> *result, PgWin *pkWin)
{
  PgWinMgr *v3; // ebx@1
  NiTListItem<PgWin *> *v4; // eax@1
  PgWin *v5; // esi@1
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v6; // ecx@1
  int v7; // edx@2
  PgWin *v8; // edi@2

  v3 = this;
  v4 = this->m_kShowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v5 = pkWin;
  v6 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kShowList;
  if ( v4 )
  {
    while ( 1 )
    {
      v7 = (int)&v4->m_element;
      v8 = (PgWin *)v4;
      v4 = v4->m_pkNext;
      if ( pkWin == *(PgWin **)v7 )
        break;
      if ( !v4 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v8 = 0;
  }
  pkWin = v8;
  if ( v8 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v6, (void **)&pkWin);
  v3->m_bTopWinScroll = 0;
  pkWin = v5;
  if ( v5 )
    InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
    &v3->m_kWinList.baseclass_0.baseclass_0,
    result,
    (NiPointer<PgWin> *)&pkWin);
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  return result;
}

//----- (00403910) --------------------------------------------------------
void __thiscall CameraCtrl::InitDirection(CameraCtrl *this, NiPoint3 kUpDir, NiPoint3 kRightDir, NiPoint3 kFrontDir)
{
  LODWORD(this->m_kUpDir.x) = (_DWORD)kUpDir.x;
  this->m_kUpDir.y = kUpDir.y;
  this->m_kUpDir.z = kUpDir.z;
  LODWORD(this->m_kRightDir.x) = (_DWORD)kRightDir.x;
  this->m_kRightDir.y = kRightDir.y;
  LODWORD(this->m_kFrontDir.x) = (_DWORD)kFrontDir.x;
  this->m_kRightDir.z = kRightDir.z;
  this->m_kFrontDir.y = kFrontDir.y;
  this->m_kFrontDir.z = kFrontDir.z;
}

//----- (00403950) --------------------------------------------------------
void __thiscall CameraCtrl::InitZoomMinMax(CameraCtrl *this, const float fZoomMin, const float fZoomMax)
{
  this->m_fZoomMin = fZoomMin;
  this->m_fZoomMax = fZoomMax;
}

//----- (00403970) --------------------------------------------------------
float __thiscall CameraCtrl::GetZoom(CameraCtrl *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fZoom;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (00403980) --------------------------------------------------------
void __thiscall CameraCtrl::SetLookAtPos(CameraCtrl *this, NiPoint3 *kPos)
{
  this->m_kLookAtPos.x = kPos->x;
  this->m_kLookAtPos.y = kPos->y;
  this->m_kLookAtPos.z = kPos->z;
}

//----- (004039A0) --------------------------------------------------------
void __thiscall CameraCtrl::GetLookAtPos(CameraCtrl *this, NiPoint3 *kPos)
{
  kPos->x = this->m_kLookAtPos.x;
  kPos->y = this->m_kLookAtPos.y;
  kPos->z = this->m_kLookAtPos.z;
}

//----- (004039C0) --------------------------------------------------------
void __thiscall CameraCtrl::SetZoomRatePerTick(CameraCtrl *this, float fRate)
{
  this->m_fZoomRatePerTick = fRate;
}

//----- (004039D0) --------------------------------------------------------
void __thiscall CameraCtrl::SetZoomMin(CameraCtrl *this, float fMin)
{
  this->m_fZoomMin = fMin;
}

//----- (004039E0) --------------------------------------------------------
void __thiscall CameraCtrl::SetZoomMax(CameraCtrl *this, float fMax)
{
  this->m_fZoomMax = fMax;
}

//----- (004039F0) --------------------------------------------------------
void __thiscall CameraCtrl::SetZoomDef(CameraCtrl *this, float fDef)
{
  this->m_fZoomDef = fDef;
  this->m_fZoom = fDef;
  this->m_fTargetZoom = fDef;
}

//----- (00403A10) --------------------------------------------------------
void __thiscall CameraCtrl::Update(CameraCtrl *this, float fTime)
{
  double v2; // st7@1
  float v3; // ST00_4@4
  float dta; // [sp+Ch] [bp+8h]@2
  float dt; // [sp+Ch] [bp+8h]@2
  float dtb; // [sp+Ch] [bp+8h]@4

  v2 = fTime;
  if ( 3.4028235e38 != this->m_fLastUpdateTime )
  {
    dta = v2 - this->m_fLastUpdateTime;
    dt = dta * 10.0;
    if ( dt > 1.0 )
      dt = 1.0;
    v3 = this->m_fTargetZoom - this->m_fZoom;
    dtb = v3 * dt * 0.800000011920929;
    this->m_fZoom = dtb + this->m_fZoom;
  }
  this->m_fLastUpdateTime = v2;
}

//----- (00403A80) --------------------------------------------------------
void __thiscall CameraCtrl::AutoRotate(CameraCtrl *this, float fAngle, float fMsDeltaX)
{
  double v3; // st7@1

  v3 = 0.0;
  if ( 0.0 != fAngle )
    v3 = fMsDeltaX;
  this->m_fMsDeltaX = v3;
}

//----- (00403AB0) --------------------------------------------------------
void __thiscall CameraCtrl::ChangeCheckRayTile(CameraCtrl *this)
{
  float v1; // ST08_4@1

  v1 = this->m_fTargetZoom - 360.0;
  this->m_uiCheckRayTile = (unsigned __int64)(signed __int64)(v1 / 35.0) + 8;
}

//----- (00403AF0) --------------------------------------------------------
void __thiscall CameraCtrl::SetZoom(CameraCtrl *this, float fZoom)
{
  double v2; // st7@1
  double v3; // st7@2
  float fZooma; // [sp+10h] [bp+8h]@5
  float fZoomb; // [sp+10h] [bp+8h]@7

  v2 = fZoom;
  if ( this->m_fZoomMin <= (double)fZoom )
  {
    if ( this->m_fZoomMax >= v2 )
      goto LABEL_6;
    v3 = this->m_fZoomMax;
  }
  else
  {
    v3 = this->m_fZoomMin;
  }
  fZooma = v3;
  v2 = fZooma;
LABEL_6:
  this->m_fZoom = v2;
  this->m_fTargetZoom = v2;
  if ( v2 <= 360.0 )
  {
    this->m_uiCheckRayTile = 8;
  }
  else
  {
    fZoomb = v2 - 360.0;
    this->m_uiCheckRayTile = (unsigned __int64)(signed __int64)(fZoomb / 35.0) + 8;
  }
}

//----- (00403B80) --------------------------------------------------------
void __thiscall CameraCtrl::AddZoom(CameraCtrl *this, int iMsDeltaZ)
{
  double v2; // st7@2
  float iMsDeltaZb; // [sp+10h] [bp+8h]@1
  float iMsDeltaZa; // [sp+10h] [bp+8h]@1
  float iMsDeltaZc; // [sp+10h] [bp+8h]@7

  iMsDeltaZb = this->m_fZoom * (double)-iMsDeltaZ * this->m_fZoomRatePerTick;
  iMsDeltaZa = iMsDeltaZb + this->m_fTargetZoom;
  this->m_fTargetZoom = iMsDeltaZa;
  if ( this->m_fZoomMin <= (double)iMsDeltaZa )
  {
    if ( this->m_fZoomMax >= (double)iMsDeltaZa )
      goto LABEL_6;
    v2 = this->m_fZoomMax;
  }
  else
  {
    v2 = this->m_fZoomMin;
  }
  this->m_fTargetZoom = v2;
LABEL_6:
  if ( this->m_fTargetZoom <= 360.0 )
  {
    this->m_uiCheckRayTile = 8;
  }
  else
  {
    iMsDeltaZc = this->m_fTargetZoom - 360.0;
    this->m_uiCheckRayTile = (unsigned __int64)(signed __int64)(iMsDeltaZc / 35.0) + 8;
  }
}

//----- (00403C30) --------------------------------------------------------
void __thiscall CameraCtrl::AddRotate(CameraCtrl *this, int iMsDeltaX, int iMsDeltaY)
{
  if ( this->m_lstTraceCam.baseclass_0.baseclass_0._Mysize )
  {
    this->m_fMsDeltaX = 0.0;
    this->m_fMsDeltaY = 0.0;
  }
  else
  {
    this->m_fMsDeltaX = (double)iMsDeltaX * 0.699999988079071 * 0.5;
    this->m_fMsDeltaY = 0.5 * 0.699999988079071 * (double)iMsDeltaY;
  }
}

//----- (00403C70) --------------------------------------------------------
void __thiscall CameraCtrl::AddRotate(CameraCtrl *this, float fDeltaX, float fDeltaY)
{
  if ( this->m_lstTraceCam.baseclass_0.baseclass_0._Mysize )
  {
    this->m_fMsDeltaX = 0.0;
    this->m_fMsDeltaY = 0.0;
  }
  else
  {
    this->m_fMsDeltaX = fDeltaX;
    this->m_fMsDeltaY = fDeltaY;
  }
}

//----- (00403CA0) --------------------------------------------------------
void __thiscall CameraCtrl::CameraCtrl(CameraCtrl *this)
{
  CameraCtrl *v1; // esi@1
  void *v2; // eax@1
  const char *v3; // ecx@2
  float v4; // edx@2
  std::exceptionVtbl *v5; // eax@2
  float v6; // edx@2
  void **v7; // ecx@2
  void *v8; // eax@2
  void *v9; // edi@3
  std::exception thisa; // [sp+8h] [bp-10h]@2
  char *_What; // [sp+14h] [bp-4h]@5

  v1 = this;
  this->vfptr = (CameraCtrlVtbl *)&CameraCtrl::_vftable_;
  this->m_lstTraceCam.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0xCu);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_fZoom = 100.0;
  v1->m_fZoomDef = 100.0;
  v1->m_fZoomMax = 9000.0;
  v1->m_fZoomMin = 40.0;
  v1->m_fTargetZoom = 100.0;
  v1->m_fMsDeltaX = 0.0;
  v1->m_fMsDeltaY = 0.0;
  *(float *)&thisa._Mywhat = 1.0;
  v1->m_kLookAtPos.x = 0.0;
  v3 = thisa._Mywhat;
  *(float *)&thisa._Mydofree = 0.0;
  v1->m_fAngleUD = 0.0;
  LODWORD(v1->m_kLookAtPos.y) = v3;
  LODWORD(v4) = *(_DWORD *)&thisa._Mydofree;
  v1->m_fAngleUDMax = 271.0;
  v1->m_kLookAtPos.z = v4;
  v1->m_fAngleUDMin = 89.0;
  v1->m_fAngleLR = 0.0;
  v1->m_kUpDir.x = 0.0;
  v1->m_kUpDir.y = 1.0;
  v1->m_kUpDir.z = 0.0;
  *(float *)&thisa.vfptr = 0.0;
  v1->m_kRightDir.x = 1.0;
  *(float *)&thisa._Mydofree = 0.0;
  v5 = thisa.vfptr;
  v1->m_kRightDir.y = 0.0;
  *(float *)&thisa._Mywhat = 1.0;
  v1->m_kRightDir.z = 0.0;
  v1->m_fZoomRatePerTick = 0.001;
  LODWORD(v6) = *(_DWORD *)&thisa._Mydofree;
  LODWORD(v1->m_kFrontDir.x) = v5;
  v1->m_kFrontDir.y = 1.0;
  v1->m_kFrontDir.z = v6;
  v7 = *(void ***)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *v7;
  *v7 = v7;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_lstTraceCam.baseclass_0.baseclass_0._Mysize = 0;
  if ( v8 != *(void **)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v9 = *(void **)v8;
      operator delete(v8);
      v8 = v9;
    }
    while ( v9 != *(void **)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v1->m_uiCheckRayTile = 8;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 977898: using guessed type int (__thiscall *CameraCtrl___vftable_)(void *p, char);

//----- (00403DF0) --------------------------------------------------------
void __thiscall CameraCtrl::_CameraCtrl(CameraCtrl *this)
{
  CameraCtrl *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2
  void **v5; // ecx@3
  void *v6; // eax@3
  void *v7; // edi@4

  v1 = this;
  this->vfptr = (CameraCtrlVtbl *)&CameraCtrl::_vftable_;
  v2 = *(void ***)&this->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_lstTraceCam.baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v5 = *(void ***)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = *v5;
  *v5 = v5;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_lstTraceCam.baseclass_0.baseclass_0._Mysize = 0;
  if ( v6 != *(void **)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v7 = *(void **)v6;
      operator delete(v6);
      v6 = v7;
    }
    while ( v7 != *(void **)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
}
// 977898: using guessed type int (__thiscall *CameraCtrl___vftable_)(void *p, char);

//----- (00403E70) --------------------------------------------------------
void __thiscall CameraCtrl::CalCulateCamera(CameraCtrl *this, NiPoint3 *kCameraPos)
{
  float v2; // edx@1
  CameraCtrl *v3; // ebx@1
  float v4; // ST20_4@1
  float v5; // ecx@1
  double v6; // st5@2
  double v7; // st7@4
  double v8; // st5@7
  float v9; // ST24_4@13
  float v10; // ST28_4@13
  float v11; // ST2C_4@13
  float v12; // ST24_4@13
  float v13; // ST28_4@13
  float v14; // ST2C_4@13
  NiPoint3 *v15; // eax@13
  double v16; // st7@13
  bool v17; // zf@13
  void **v18; // ecx@14
  void *v19; // eax@14
  double v20; // st5@18
  double v21; // st7@20
  double v22; // st5@23
  float v23; // ST0C_4@26
  float v24; // ST08_4@26
  float v25; // ST04_4@26
  NiPoint3 *v26; // eax@26
  double v27; // st7@26
  float v28; // eax@26
  double v29; // st7@26
  float v30; // edx@26
  double v31; // st7@26
  double v32; // st7@26
  NiPoint3 result; // [sp+30h] [bp-44h]@13
  NiPoint3 vecCurPos; // [sp+3Ch] [bp-38h]@1
  float fOldAbgleUD; // [sp+48h] [bp-2Ch]@1
  NiMatrix3 mat; // [sp+4Ch] [bp-28h]@1
  unsigned int v37; // [sp+70h] [bp-4h]@1
  int v38; // [sp+74h] [bp+0h]@1

  v37 = (unsigned int)&v38 ^ __security_cookie;
  v2 = NiPoint3::ZERO.y;
  v3 = this;
  fOldAbgleUD = this->m_fAngleUD;
  v4 = this->m_fAngleUD + this->m_fMsDeltaY;
  memcpy(&mat, &NiMatrix3::IDENTITY, sizeof(mat));
  LODWORD(v5) = (_DWORD)NiPoint3::ZERO.x;
  vecCurPos.z = NiPoint3::ZERO.z;
  v3->m_fAngleUD = v4;
  vecCurPos.x = v5;
  vecCurPos.y = v2;
  if ( v4 < 360.0 )
  {
    v7 = 360.0;
  }
  else
  {
    v6 = v3->m_fAngleUD;
    do
      v6 = v6 - 360.0;
    while ( v6 >= 360.0 );
    v7 = 360.0;
    v3->m_fAngleUD = v6;
  }
  if ( v3->m_fAngleUD < 0.0 )
  {
    v8 = v3->m_fAngleUD;
    do
      v8 = v8 + v7;
    while ( v8 < 0.0 );
    v3->m_fAngleUD = v8;
  }
  if ( v3->m_fAngleUD > (double)v3->m_fAngleUDMin && v3->m_fAngleUDMax > (double)v3->m_fAngleUD )
    v3->m_fAngleUD = fOldAbgleUD;
  v9 = -v3->m_kRightDir.x;
  v10 = -v3->m_kRightDir.y;
  v11 = -v3->m_kRightDir.z;
  fOldAbgleUD = v3->m_fAngleUD * 3.140000104904175 / 180.0;
  NiMatrix3::MakeRotation(&mat, fOldAbgleUD, v9, v10, v11);
  v12 = -v3->m_kFrontDir.x;
  v13 = -v3->m_kFrontDir.y;
  v14 = -v3->m_kFrontDir.z;
  fOldAbgleUD = v3->m_fZoom;
  result.x = v12 * fOldAbgleUD;
  LODWORD(vecCurPos.x) = (_DWORD)result.x;
  result.y = v13 * fOldAbgleUD;
  vecCurPos.y = result.y;
  result.z = fOldAbgleUD * v14;
  vecCurPos.z = result.z;
  v15 = operator_(&result, &vecCurPos, &mat);
  v16 = v3->m_fAngleLR;
  vecCurPos.x = v15->x;
  vecCurPos.y = v15->y;
  v17 = v3->m_lstTraceCam.baseclass_0.baseclass_0._Mysize == 0;
  vecCurPos.z = v15->z;
  if ( v17 )
  {
    v3->m_fAngleLR = v16 - v3->m_fMsDeltaX;
  }
  else
  {
    v18 = *(void ***)&v3->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v3->m_fAngleLR = v16 - *((float *)*v18 + 2);
    v19 = *v18;
    if ( *v18 != v18 )
    {
      **((_DWORD **)v19 + 1) = *(_DWORD *)v19;
      *(_DWORD *)(*(_DWORD *)v19 + 4) = *((_DWORD *)v19 + 1);
      operator delete(v19);
      --v3->m_lstTraceCam.baseclass_0.baseclass_0._Mysize;
    }
  }
  if ( v3->m_fAngleLR < 360.0 )
  {
    v21 = 360.0;
  }
  else
  {
    v20 = v3->m_fAngleLR;
    do
      v20 = v20 - 360.0;
    while ( v20 >= 360.0 );
    v21 = 360.0;
    v3->m_fAngleLR = v20;
  }
  if ( v3->m_fAngleLR < 0.0 )
  {
    v22 = v3->m_fAngleLR;
    do
      v22 = v22 + v21;
    while ( v22 < 0.0 );
    v3->m_fAngleLR = v22;
  }
  v23 = v3->m_kUpDir.z;
  v24 = v3->m_kUpDir.y;
  v25 = v3->m_kUpDir.x;
  fOldAbgleUD = v3->m_fAngleLR * 3.140000104904175 / 180.0;
  NiMatrix3::MakeRotation(&mat, fOldAbgleUD, v25, v24, v23);
  v26 = operator_(&result, &vecCurPos, &mat);
  v27 = v3->m_kLookAtPos.x;
  vecCurPos.x = v26->x;
  vecCurPos.y = v26->y;
  v28 = v26->z;
  result.x = v27 + vecCurPos.x;
  v29 = v3->m_kLookAtPos.y + vecCurPos.y;
  vecCurPos.z = v28;
  result.y = v29;
  v30 = result.y;
  v31 = v3->m_kLookAtPos.z;
  LODWORD(kCameraPos->x) = (_DWORD)result.x;
  v32 = v31 + vecCurPos.z;
  kCameraPos->y = v30;
  result.z = v32;
  kCameraPos->z = result.z;
  v3->m_fMsDeltaX = 0.0;
  v3->m_fMsDeltaY = 0.0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00404150) --------------------------------------------------------
void __thiscall CameraCtrl::AddTraceRotate(CameraCtrl *this, int iMsDeltaX)
{
  CameraCtrl *v2; // esi@1
  double v3; // st7@1
  int v4; // ebx@1
  int v5; // edi@2
  std::_List_nod<float,std::allocator<float> >::_Node *v6; // eax@2
  unsigned int v7; // ecx@2
  int v8; // edi@5
  std::_List_nod<float,std::allocator<float> >::_Node *v9; // eax@5
  unsigned int v10; // ecx@5
  float fGap; // [sp+4h] [bp-8h]@1
  int iTickCountDeltaX; // [sp+8h] [bp-4h]@1

  v2 = this;
  *(float *)&iMsDeltaX = (double)iMsDeltaX * 0.699999988079071 * 0.5;
  v3 = *(float *)&iMsDeltaX;
  this->m_fMsDeltaX = *(float *)&iMsDeltaX;
  *(float *)&iMsDeltaX = 0.0689999982714653 * v3;
  iTickCountDeltaX = (signed int)(v3 / *(float *)&iMsDeltaX);
  v4 = 0;
  fGap = v3 - *(float *)&iMsDeltaX * (double)iTickCountDeltaX;
  if ( iTickCountDeltaX > 0 )
  {
    while ( 1 )
    {
      v5 = *(_DWORD *)&v2->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v6 = std::_List_val<float_std::allocator<float>>::_Buynode(
             &v2->m_lstTraceCam.baseclass_0,
             *(std::_List_nod<float,std::allocator<float> >::_Node **)&v2->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
             *(std::_List_nod<float,std::allocator<float> >::_Node **)(v5 + 4),
             (const float *)&iMsDeltaX);
      v7 = v2->m_lstTraceCam.baseclass_0.baseclass_0._Mysize;
      if ( 1073741822 - v7 < 1 )
        break;
      v2->m_lstTraceCam.baseclass_0.baseclass_0._Mysize = v7 + 1;
      *(_DWORD *)(v5 + 4) = v6;
      ++v4;
      v6->_Prev->_Next = v6;
      if ( v4 >= iTickCountDeltaX )
        goto LABEL_4;
    }
LABEL_6:
    std::_Xlength_error("list<T> too long");
  }
LABEL_4:
  if ( fGap >= 0.0 )
  {
    v8 = *(_DWORD *)&v2->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v9 = std::_List_val<float_std::allocator<float>>::_Buynode(
           &v2->m_lstTraceCam.baseclass_0,
           *(std::_List_nod<float,std::allocator<float> >::_Node **)&v2->m_lstTraceCam.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
           *(std::_List_nod<float,std::allocator<float> >::_Node **)(v8 + 4),
           &fGap);
    v10 = v2->m_lstTraceCam.baseclass_0.baseclass_0._Mysize;
    if ( 1073741822 - v10 < 1 )
      goto LABEL_6;
    v2->m_lstTraceCam.baseclass_0.baseclass_0._Mysize = v10 + 1;
    *(_DWORD *)(v8 + 4) = v9;
    v9->_Prev->_Next = v9;
  }
}
// 404150: could not find valid save-restore pair for ebx
// 404150: could not find valid save-restore pair for edi
// 404150: could not find valid save-restore pair for esi

//----- (00404230) --------------------------------------------------------
NiPoint3 *__thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt)
{
  NiPoint3 *v3; // eax@1

  v3 = result;
  result->x = pt->x + this->x;
  result->y = pt->y + this->y;
  result->z = pt->z + this->z;
  return v3;
}

//----- (00404260) --------------------------------------------------------
void __thiscall NiMatrix3::MakeRotation(NiMatrix3 *this, float fAngle, NiPoint3 *axis)
{
  NiMatrix3::MakeRotation(this, fAngle, axis->x, axis->y, axis->z);
}

//----- (00404290) --------------------------------------------------------
std::_List_nod<float,std::allocator<float> >::_Node *__thiscall std::_List_val<float_std::allocator<float>>::_Buynode(std::_List_val<float,std::allocator<float> > *this, std::_List_nod<float,std::allocator<float> >::_Node *_Next, std::_List_nod<float,std::allocator<float> >::_Node *_Prev, const float *_Val)
{
  std::_List_nod<float,std::allocator<float> >::_Node *result; // eax@1
  std::_List_nod<float,std::allocator<float> >::_Node *v5; // edx@2
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<float,std::allocator<float> >::_Node *)operator new(0xCu);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<float,std::allocator<float> >::_Node *)-8 )
    result->_Myval = *_Val;
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004042F0) --------------------------------------------------------
void *__thiscall CameraCtrl::_scalar_deleting_destructor_(CameraCtrl *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CameraCtrl::_CameraCtrl(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00404320) --------------------------------------------------------
unsigned int __cdecl cAntiCheat::CRC32(const char *data, unsigned int size)
{
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@1
  const char *v4; // edx@2

  v2 = size;
  v3 = -1;
  if ( size )
  {
    v4 = data;
    do
    {
      v3 = crc_32_tab[(unsigned __int8)(v3 ^ *v4++)] ^ (v3 >> 8);
      --v2;
    }
    while ( v2 );
  }
  return ~v3;
}

//----- (00404350) --------------------------------------------------------
void __cdecl cAntiCheat::KillFO()
{
  int v0; // eax@1
  HANDLE v1; // eax@1
  void *v2; // edi@1
  HANDLE v3; // eax@6
  void *v4; // esi@6
  DWORD myThreadID; // [sp+Ch] [bp-28h]@1
  DWORD myProcID; // [sp+10h] [bp-24h]@1
  tagTHREADENTRY32 te; // [sp+14h] [bp-20h]@2
  unsigned int v8; // [sp+30h] [bp-4h]@1
  int v9; // [sp+34h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v0 = rand();
  Sleep(v0 % 180000 + 60000);
  myProcID = GetCurrentProcessId();
  myThreadID = GetCurrentThreadId();
  v1 = CreateToolhelp32Snapshot(4u, 0);
  v2 = v1;
  if ( v1 != (HANDLE)-1 )
  {
    te.dwSize = 28;
    if ( Thread32First(v1, &te) )
    {
      do
      {
        if ( te.dwSize >= 0x10 )
        {
          if ( te.th32ThreadID != myThreadID )
          {
            if ( te.th32OwnerProcessID == myProcID )
            {
              v3 = OpenThread(0x1FFFFFu, 0, te.th32ThreadID);
              v4 = v3;
              if ( v3 )
              {
                SuspendThread(v3);
                CloseHandle(v4);
              }
            }
          }
        }
        te.dwSize = 28;
      }
      while ( Thread32Next(v2, &te) );
    }
    CloseHandle(v2);
  }
  MessageBoxA(0, "Malicious Software Intrusion Detected.", "Cheat Software Detected!", 0x10010u);
  ExitProcess(0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00404430) --------------------------------------------------------
int __cdecl cAntiCheat::ComputeCRC()
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v0; // esi@1
  signed int v1; // edi@1
  unsigned int v2; // edi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // edx@3
  signed int v4; // ecx@5
  unsigned int v5; // eax@5
  unsigned int v6; // esi@7
  int v7; // esi@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > TmpBlock; // [sp+0h] [bp-124h]@1
  char tmp[245]; // [sp+1Ch] [bp-108h]@7
  unsigned int v11; // [sp+114h] [bp-10h]@1
  int v12; // [sp+120h] [bp-4h]@1
  int v13; // [sp+124h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  TmpBlock.baseclass_0._Myres = 15;
  TmpBlock.baseclass_0._Mysize = 0;
  TmpBlock.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v12 = 0;
  v0 = &BlockedData;
  v1 = 104;
  do
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&TmpBlock, v0, 0, 0xFFFFFFFFu);
    ++v0;
    --v1;
  }
  while ( v1 );
  v2 = TmpBlock.baseclass_0._Myres;
  v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&TmpBlock;
  if ( TmpBlock.baseclass_0._Myres < 0x10 )
    v3 = &TmpBlock;
  v4 = 3328;
  v5 = -1;
  do
  {
    v5 = crc_32_tab[(unsigned __int8)(v5 ^ v3->baseclass_0.___u0.baseclass_0.dummy[0])] ^ (v5 >> 8);
    v3 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 1);
    --v4;
  }
  while ( v4 );
  v6 = ~v5;
  sprintf(tmp, "%d");
  v7 = v6 == 1871879518;
  if ( v2 >= 0x10 )
    operator delete(*(void **)&TmpBlock);
  return v7;
}
// A85C00: using guessed type int __security_cookie;

//----- (00404540) --------------------------------------------------------
void __stdcall cAntiCheat::CRCCheck(int a1)
{
  while ( cAntiCheat::ComputeCRC() )
    Sleep(0x7530u);
  cAntiCheat::KillFO();
}

//----- (00404570) --------------------------------------------------------
int __cdecl cAntiCheat::CompareAgainstHashes(std::basic_string<char,std::char_traits<char>,std::allocator<char> > toCompare)
{
  unsigned int v1; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // ecx@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@3
  const char *v4; // esi@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right; // [sp+0h] [bp-34h]@1
  char bFound; // [sp+7h] [bp-2Dh]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > tmpStr; // [sp+8h] [bp-2Ch]@2
  unsigned int v9; // [sp+24h] [bp-10h]@1
  int v10; // [sp+30h] [bp-4h]@1
  int v11; // [sp+34h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  v10 = 0;
  bFound = 0;
  _Right = &BlockedData;
  while ( 1 )
  {
    tmpStr.baseclass_0._Myres = 15;
    tmpStr.baseclass_0._Mysize = 0;
    tmpStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&tmpStr, _Right, 0, 0xFFFFFFFFu);
    v1 = 0;
    do
    {
      v2 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&tmpStr;
      v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&tmpStr;
      if ( tmpStr.baseclass_0._Myres < 0x10 )
      {
        v3 = &tmpStr;
        v2 = &tmpStr;
      }
      v2->baseclass_0.___u0.baseclass_0.dummy[v1] = v3->baseclass_0.___u0.baseclass_0.dummy[v1] ^ 0x92;
      ++v1;
    }
    while ( v1 < 0x1F );
    v4 = *(const char **)&tmpStr;
    if ( tmpStr.baseclass_0._Myres < 0x10 )
      v4 = (const char *)&tmpStr;
    if ( !strcmp(v4, std::basic_string<char_std::char_traits<char>_std::allocator<char>>::c_str(&toCompare)) )
      break;
    if ( tmpStr.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&tmpStr);
    ++_Right;
    if ( (signed int)_Right >= (signed int)&NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>__RTTI_Type_Descriptor_ )
      goto LABEL_15;
  }
  bFound = 1;
  if ( tmpStr.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&tmpStr);
LABEL_15:
  if ( toCompare.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&toCompare);
  return (unsigned __int8)bFound;
}
// A740D8: using guessed type int (__thiscall **NiTMapBase_DFALL_NiPointer_PgWinBut___unsigned long_NiPointer_PgWinBut__ _RTTI Type Descriptor_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004046B0) --------------------------------------------------------
int __stdcall cAntiCheat::EnumChildProc(HWND__ *hwnd, int lParam)
{
  int v2; // eax@2
  char v3; // cl@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v5; // [sp-20h] [bp-150h]@4
  int v6; // [sp-10h] [bp-140h]@4
  signed int v7; // [sp-Ch] [bp-13Ch]@4
  unsigned int v8; // [sp-4h] [bp-134h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // [sp+0h] [bp-130h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > MD5PW; // [sp+4h] [bp-12Ch]@4
  char wnd_title[256]; // [sp+20h] [bp-110h]@1
  unsigned int v12; // [sp+120h] [bp-10h]@1
  int v13; // [sp+12Ch] [bp-4h]@4
  int v14; // [sp+130h] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v8 = (unsigned int)&v14 ^ __security_cookie;
  GetWindowTextA(hwnd, wnd_title, 256);
  if ( wnd_title[0] )
  {
    v2 = (int)wnd_title;
    do
      v3 = *(_BYTE *)v2++;
    while ( v3 );
    CMD5Checksum::GetMD5(&MD5PW, wnd_title, v2 - (_DWORD)&wnd_title[1]);
    v9 = &v5;
    v7 = 15;
    v6 = 0;
    v13 = 0;
    v5.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v5, &MD5PW, 0, 0xFFFFFFFFu);
    if ( cAntiCheat::CompareAgainstHashes(v5) )
      cAntiCheat::KillFO();
    if ( MD5PW.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&MD5PW);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004047A0) --------------------------------------------------------
int __stdcall cAntiCheat::EnumWindowsProc(HWND__ *hWnd, int lParam)
{
  int v2; // eax@1
  unsigned int v3; // edi@2
  void *v4; // esi@2
  HWND__ *v5; // edi@2
  void *v6; // eax@2
  char v7; // cl@3
  char *v8; // eax@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v10; // [sp-2Ch] [bp-78h]@6
  int v11; // [sp-1Ch] [bp-68h]@6
  signed int v12; // [sp-18h] [bp-64h]@6
  int v13; // [sp-14h] [bp-60h]@2
  unsigned int v14; // [sp-10h] [bp-5Ch]@1
  HWND hWndParent; // [sp+0h] [bp-4Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > MD5PW; // [sp+4h] [bp-48h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > windowTitle; // [sp+20h] [bp-2Ch]@2
  unsigned int v18; // [sp+3Ch] [bp-10h]@1
  int v19; // [sp+48h] [bp-4h]@4
  int v20; // [sp+4Ch] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v14 = (unsigned int)&v20 ^ __security_cookie;
  hWndParent = hWnd;
  v2 = GetWindowTextLengthA(hWnd);
  if ( v2 )
  {
    v3 = v2 + 1;
    v4 = operator new__(v2 + 1);
    memset((char *)v4, 0, v3);
    v13 = v3;
    v5 = hWndParent;
    GetWindowTextA(hWndParent, (LPSTR)v4, v13);
    v6 = v4;
    windowTitle.baseclass_0._Myres = 15;
    windowTitle.baseclass_0._Mysize = 0;
    windowTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
    {
      v7 = *(_BYTE *)v6;
      v6 = (char *)v6 + 1;
    }
    while ( v7 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &windowTitle,
      (const char *)v4,
      v6 - ((char *)v4 + 1));
    v19 = 0;
    operator delete__(v4);
    v8 = *(char **)&windowTitle;
    if ( windowTitle.baseclass_0._Myres < 0x10 )
      v8 = (char *)&windowTitle;
    CMD5Checksum::GetMD5(&MD5PW, v8, windowTitle.baseclass_0._Mysize);
    hWndParent = (HWND)&v10;
    v12 = 15;
    v11 = 0;
    LOBYTE(v19) = 1;
    v10.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v10, &MD5PW, 0, 0xFFFFFFFFu);
    if ( cAntiCheat::CompareAgainstHashes(v10) )
    {
      GameFrameWork::_isCheating = 1;
      cAntiCheat::KillFO();
    }
    EnumChildWindows(v5, cAntiCheat::EnumChildProc, 0);
    if ( MD5PW.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&MD5PW);
    MD5PW.baseclass_0._Myres = 15;
    MD5PW.baseclass_0._Mysize = 0;
    MD5PW.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( windowTitle.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&windowTitle);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9873C: using guessed type bool GameFrameWork___isCheating;

//----- (004048F0) --------------------------------------------------------
void __stdcall cAntiCheat::EnumCheck(int a1)
{
  while ( 1 )
  {
    EnumWindows(cAntiCheat::EnumWindowsProc, 0);
    Sleep(0x1388u);
  }
}

//----- (00404920) --------------------------------------------------------
char *__cdecl Folder::Menu()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return &Folder::m_acMenu;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00404940) --------------------------------------------------------
char *__thiscall CharCreateClassWin::GetAvatarCreateName(CharCreateClassWin *this)
{
  return (char *)((int (*)(void))this->m_spNameEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
}

//----- (00404950) --------------------------------------------------------
void __thiscall CharCreateClassWin::KillFocus(CharCreateClassWin *this)
{
  ImeEditWinEx *v1; // ecx@1

  v1 = this->m_spNameEdit.m_pObject;
  if ( v1 )
    ((void (__stdcall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (00404970) --------------------------------------------------------
void __thiscall CharCreateClassWin::SetFocus(CharCreateClassWin *this)
{
  ImeEditWinEx *v1; // ecx@1

  v1 = this->m_spNameEdit.m_pObject;
  if ( v1 )
    ((void (*)(void))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (00404990) --------------------------------------------------------
void __thiscall CharCreateClassWin::ClearNameEditBox(CharCreateClassWin *this)
{
  ImeEditWinEx *v1; // ecx@1

  v1 = this->m_spNameEdit.m_pObject;
  if ( v1 )
    ((void (__stdcall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9787BE);
}

//----- (004049B0) --------------------------------------------------------
void __thiscall CharCreateClassWin::Show(CharCreateClassWin *this, bool b)
{
  ImeEditWinEx *v2; // ecx@3

  if ( b )
  {
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v2 = this->m_spNameEdit.m_pObject;
    if ( v2 )
      ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
  else
  {
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (004049F0) --------------------------------------------------------
void __thiscall CharCreateClassWin::SetSentinelButEnable(CharCreateClassWin *this, bool bEnable)
{
  int v2; // ebx@1
  CharCreateClassWin *v3; // esi@1
  PgWinBut *v4; // ecx@1
  PgWinSpr *v5; // ecx@3

  v2 = bEnable;
  v3 = this;
  v4 = this->m_spSentinelBut.m_pObject;
  if ( v4 )
  {
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
    ((void (__stdcall *)(_DWORD))v3->m_spSentinelBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bEnable);
  }
  v5 = v3->m_spSentinelDisablSpr.m_pObject;
  if ( v5 )
  {
    LOBYTE(v2) = bEnable == 0;
    ((void (__stdcall *)(int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v2);
    ((void (__stdcall *)(int))v3->m_spSentinelDisablSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
  }
}

//----- (00404A60) --------------------------------------------------------
void __thiscall CharCreateClassWin::_CharCreateClassWin(CharCreateClassWin *this)
{
  CharCreateClassWin *v1; // edi@1
  ImeEditWinEx *v2; // esi@1
  PgWinSpr *v3; // esi@6
  PgWinBut *v4; // esi@10
  ImeEditWinEx *v5; // esi@14

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateClassWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateClassWin::_vftable_;
  v2 = this->m_spNameEdit.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spNameEdit.m_pObject = 0;
  }
  v1->m_kClassMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMap<unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(&v1->m_kClassMap.baseclass_0);
  v1->m_kClassMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(&v1->m_kClassMap.baseclass_0);
  operator delete__(v1->m_kClassMap.baseclass_0.m_ppkHashTable);
  v3 = v1->m_spSentinelDisablSpr.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_spSentinelBut.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->m_spNameEdit.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9788CC: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinBut___unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);
// 9788F0: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);
// 978918: using guessed type int (__stdcall *CharCreateClassWin___vftable_)(int uiFlags);
// 978934: using guessed type int (__thiscall *CharCreateClassWin___vftable_)(void *p, char);

//----- (00404BB0) --------------------------------------------------------
void __thiscall CharCreateClassWin::OnSetClass(CharCreateClassWin *this, unsigned int uiClass)
{
  CharCreateClassWin *v2; // esi@1
  const char *v3; // eax@1
  const char *v4; // ebx@1
  PgWinBut *v5; // edi@2
  PgWinBut *v6; // eax@3
  unsigned int v7; // eax@10
  unsigned int v8; // edi@13

  v2 = this;
  v3 = (const char *)this->m_uiClass;
  v4 = (const char *)uiClass;
  if ( v3 != (const char *)uiClass )
  {
    v5 = 0;
    uiClass = 0;
    if ( v3 == (const char *)26 )
    {
      v6 = this->m_spSentinelBut.m_pObject;
      if ( v6 )
      {
        v5 = this->m_spSentinelBut.m_pObject;
        uiClass = (unsigned int)this->m_spSentinelBut.m_pObject;
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
    }
    else
    {
      NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
        (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kClassMap,
        v3,
        (NiPointer<NiShaderLibrary> *)&uiClass);
      v5 = (PgWinBut *)uiClass;
    }
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[133].__vecDelDtor(
      (NiRefObject *)v5,
      0);
    v2->m_uiClass = (unsigned int)v4;
    if ( v4 == (const char *)26 )
    {
      if ( v5 != v2->m_spSentinelBut.m_pObject )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v5,
            1u);
        v7 = (unsigned int)v2->m_spSentinelBut.m_pObject;
        uiClass = v7;
        if ( v7 )
          InterlockedIncrement((volatile LONG *)(v7 + 4));
      }
    }
    else
    {
      NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
        (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&v2->m_kClassMap,
        v4,
        (NiPointer<NiShaderLibrary> *)&uiClass);
    }
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&v2->m_kClassMap,
      v4,
      (NiPointer<NiShaderLibrary> *)&uiClass);
    v8 = uiClass;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)uiClass + 532))(uiClass, 1);
    CharCreateFrameWork::SetClass((CharCreateFrameWork *)v2->baseclass_0.m_pkFrameWork, (char)v4);
    CharCreateFrameWork::ChangeAvatarClass((CharCreateFrameWork *)v2->baseclass_0.m_pkFrameWork);
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
  }
}

//----- (00404CF0) --------------------------------------------------------
void __thiscall CharCreateClassWin::CharCreateClassWin(CharCreateClassWin *this)
{
  CharCreateClassWin *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST08_4@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateClassWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateClassWin::_vftable_;
  v1->m_spNameEdit.m_pObject = 0;
  v1->m_spSentinelBut.m_pObject = 0;
  v1->m_spSentinelDisablSpr.m_pObject = 0;
  v1->m_kClassMap.baseclass_0.m_uiHashSize = 37;
  v1->m_kClassMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  *(_DWORD *)&v1->m_kClassMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kClassMap.baseclass_0.m_uiHashSize;
  v1->m_kClassMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<PgWinBut> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kClassMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMap<unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  v1->m_uiClass = 1;
  *(_DWORD *)&v1->m_acCharName[0] = 0;
  *(_DWORD *)&v1->m_acCharName[4] = 0;
  *(_DWORD *)&v1->m_acCharName[8] = 0;
  *(_DWORD *)&v1->m_acCharName[12] = 0;
}
// 9788CC: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinBut___unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);
// 9788F0: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);
// 978918: using guessed type int (__stdcall *CharCreateClassWin___vftable_)(int uiFlags);
// 978934: using guessed type int (__thiscall *CharCreateClassWin___vftable_)(void *p, char);

//----- (00404DE0) --------------------------------------------------------
bool __thiscall CharCreateClassWin::Create(CharCreateClassWin *this, PgFrameWork *pkFrameWork)
{
  CharCreateClassWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // eax@11
  NiNode *v9; // esi@12
  NiPointer<PgWinBut> v10; // edi@17
  NiPointer<PgWinBut> v11; // ecx@17
  NiPointer<PgWinBut> v12; // eax@17
  NiPointer<PgWinBut> v13; // ecx@19
  NiPointer<PgWinBut> v14; // eax@19
  NiPointer<PgWinBut> v15; // ecx@21
  NiPointer<PgWinBut> v16; // eax@21
  NiPointer<PgWinBut> v17; // eax@23
  EditWinEx *v18; // eax@25
  ImeEditWinEx *v19; // edi@25
  EditWinEx *v20; // ebx@25
  PgSprData *v21; // edi@32
  PgWinBut *v22; // eax@32
  PgWinBut *v23; // edi@32
  PgWinBut *v24; // ebx@32
  PgSprData *v25; // eax@39
  PgWinSpr *v26; // eax@39
  PgWinSpr *v27; // edi@39
  PgWinSpr *v28; // ebx@39
  PgWin *v29; // edi@46
  char *v30; // eax@46
  NiRefObjectVtbl *v31; // edi@46
  int v32; // eax@46
  NiRefObjectVtbl *v33; // edx@46
  int v34; // eax@46
  NiNode *v35; // esi@47
  NiPointer<PgWinBut> v36; // [sp+24h] [bp-40h]@17
  UIUtil ui; // [sp+38h] [bp-2Ch]@17
  int iLeft; // [sp+4Ch] [bp-18h]@11
  int iTop; // [sp+50h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v41; // [sp+60h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v41 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "charcreate\\CreatCharClass.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &iLeft, &iTop, 0);
    if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "CharCreateClassWin", 0) )
    {
      UIUtil::UIUtil(&ui);
      LOBYTE(v41) = 1;
      UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, iLeft, iTop);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      UIUtil::CreateSpr(&ui, "Plane", 0);
      UIUtil::CreateSpr(&ui, "Plane_Name", 0);
      v10.m_pObject = UIUtil::CreateButton(&ui, 0, "Class_Fighter", 0, 3);
      v10.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[133].__vecDelDtor(
        (NiRefObject *)v10.m_pObject,
        1u);
      v36.m_pObject = v10.m_pObject;
      InterlockedIncrement((volatile LONG *)&v10.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        &v2->m_kClassMap.baseclass_0,
        1u,
        v36);
      v36.m_pObject = v11.m_pObject;
      v12.m_pObject = UIUtil::CreateButton(&ui, 1u, "Class_Archer", 0, 3);
      v36.m_pObject = v12.m_pObject;
      if ( v12.m_pObject )
        InterlockedIncrement((volatile LONG *)&v12.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        &v2->m_kClassMap.baseclass_0,
        0xBu,
        v36);
      v36.m_pObject = v13.m_pObject;
      v14.m_pObject = UIUtil::CreateButton(&ui, 2u, "Class_Cleric", 0, 3);
      v36.m_pObject = v14.m_pObject;
      if ( v14.m_pObject )
        InterlockedIncrement((volatile LONG *)&v14.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        &v2->m_kClassMap.baseclass_0,
        6u,
        v36);
      v36.m_pObject = v15.m_pObject;
      v16.m_pObject = UIUtil::CreateButton(&ui, 3u, "Class_Mage", 0, 3);
      v36.m_pObject = v16.m_pObject;
      if ( v16.m_pObject )
        InterlockedIncrement((volatile LONG *)&v16.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        &v2->m_kClassMap.baseclass_0,
        0x10u,
        v36);
      v17.m_pObject = UIUtil::CreateButton(&ui, 4u, "Class_Joker", 0, 3);
      v36.m_pObject = v17.m_pObject;
      if ( v17.m_pObject )
        InterlockedIncrement((volatile LONG *)&v17.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        &v2->m_kClassMap.baseclass_0,
        0x15u,
        v36);
      UIUtil::CreateSpr(&ui, "Job", 0);
      v18 = UIUtil::CreateEditEx(&ui, "Name", 16, NORMAL, 0, 0);
      v19 = v2->m_spNameEdit.m_pObject;
      v20 = v18;
      if ( (EditWinEx *)v19 != v18 )
      {
        if ( v19
          && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v19 )
          v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v19,
            1u);
        v2->m_spNameEdit.m_pObject = (ImeEditWinEx *)v20;
        if ( v20 )
          InterlockedIncrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      EditWinEx::SetDrawFormat(&v2->m_spNameEdit.m_pObject->baseclass_0, 5u);
      v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Class_SentinelNor", &iLeft, &iTop, 0);
      PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Class_SentinelClick");
      PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Class_SentinelOver");
      v22 = PgWinBut::CreateWin(iLeft, iTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 5u, 0, 0);
      v23 = v2->m_spSentinelBut.m_pObject;
      v24 = v22;
      if ( v23 != v22 )
      {
        if ( v23
          && !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v23 )
          v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v23,
            1u);
        v2->m_spSentinelBut.m_pObject = v24;
        if ( v24 )
          InterlockedIncrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      ((void (__stdcall *)(_DWORD))v2->m_spSentinelBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_spSentinelBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Class_SentinelDisable", &iLeft, &iTop, 0);
      v26 = PgWinSpr::CreateWin(iLeft, iTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v27 = v2->m_spSentinelDisablSpr.m_pObject;
      v28 = v26;
      if ( v27 != v26 )
      {
        if ( v27
          && !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v27 )
          v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v27,
            1u);
        v2->m_spSentinelDisablSpr.m_pObject = v28;
        if ( v28 )
          InterlockedIncrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      ((void (__stdcall *)(signed int))v2->m_spSentinelDisablSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_spSentinelDisablSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v2->m_spSentinelDisablSpr.m_pObject->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v29 = (PgWin *)v2->m_spSentinelDisablSpr.m_pObject;
      v30 = TextData3::Get(0xCBBAA1E2u);
      PgWin::SetToolTipWinText(v29, v30);
      UIUtil::CreateSpr(&ui, "Job01", 0);
      ((void (__thiscall *)(CharCreateClassWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.0);
      v31 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v32 = ((int (__thiscall *)(CharCreateClassWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
      v33 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v36.m_pObject = (PgWinBut *)(v32 + 10);
      v34 = (int)v33[41].__vecDelDtor((NiRefObject *)v2, v32 + 10);
      v31[77].__vecDelDtor((NiRefObject *)v2, v34);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      LOBYTE(v41) = 0;
      UIUtil::_UIUtil(&ui);
      v41 = -1;
      if ( spNode.m_pObject )
      {
        v35 = spNode.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v35 )
            v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
        }
      }
      result = 1;
    }
    else
    {
      v9 = spNode.m_pObject;
      v41 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      result = 0;
    }
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("CreatCharClass load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v41 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00405330) --------------------------------------------------------
void __thiscall CharCreateClassWin::OnCommand(CharCreateClassWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      CharCreateClassWin::OnSetClass(this, 1u);
      break;
    case 1u:
      CharCreateClassWin::OnSetClass(this, 0xBu);
      break;
    case 2u:
      CharCreateClassWin::OnSetClass(this, 6u);
      break;
    case 3u:
      CharCreateClassWin::OnSetClass(this, 0x10u);
      break;
    case 4u:
      CharCreateClassWin::OnSetClass(this, 0x15u);
      break;
    case 5u:
      CharCreateClassWin::OnSetClass(this, 0x1Au);
      break;
    default:
      return;
  }
}

//----- (004053A0) --------------------------------------------------------
CharCreateClassWin *__cdecl CharCreateClassWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CharCreateClassWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CharCreateClassWin::CharCreateClassWin((CharCreateClassWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CharCreateClassWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004054D0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(this);
  operator delete__(v1->m_ppkHashTable);
}
// 9788CC: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinBut___unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);

//----- (004054F0) --------------------------------------------------------
void __thiscall NiTMap<unsigned_long_NiPointer<PgWinBut>>::_NiTMap<unsigned_long_NiPointer<PgWinBut>>(NiTMap<unsigned long,NiPointer<PgWinBut> > *this)
{
  NiTMap<unsigned long,NiPointer<PgWinBut> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMap<unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(&this->baseclass_0);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(&v1->baseclass_0);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 9788CC: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinBut___unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);
// 9788F0: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);

//----- (00405560) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9788CC: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinBut___unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);

//----- (004055A0) --------------------------------------------------------
char *__cdecl TextData3::Get(unsigned int eTextID)
{
  int v1; // eax@1
  unsigned int v2; // eax@2
  void *v3; // eax@4
  void *v4; // edi@4
  char *result; // eax@5
  TextData3::Node kNode; // [sp+8h] [bp-10h]@1

  kNode.pStr = &byte_9788EB;
  kNode.pStrVoice = &byte_9788EB;
  kNode.pStrSoundEffect = &byte_9788EB;
  kNode.dwEnumVal = eTextID;
  v1 = *(_DWORD *)(ITableBase<TextDataType3_TextData3>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = bsearch(&kNode, TextData3::ms_apkNode, v2, 0x10u, TextDataNodeComp);
  v4 = v3;
  if ( v3 )
  {
    if ( strcmp(*((const char **)v3 + 2), "None") )
      SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v4 + 2));
    if ( strcmp(*((const char **)v4 + 3), "None") )
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v4 + 3));
    result = (char *)*((_DWORD *)v4 + 1);
  }
  else
  {
    result = &byte_9788EB;
  }
  return result;
}
// A94340: using guessed type int ITableBase_TextDataType3_TextData3___ms_pkTable;

//----- (00405680) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_long_NiPointer<PgWinBut>>::_vector_deleting_destructor_(NiTMap<unsigned long,NiPointer<PgWinBut> > *this, unsigned int a2)
{
  NiTMap<unsigned long,NiPointer<PgWinBut> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMap<unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(&this->baseclass_0);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(&v2->baseclass_0);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9788CC: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinBut___unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);
// 9788F0: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_PgWinBut_____vftable_)(void *p, char);

//----- (00405700) --------------------------------------------------------
void *__thiscall CharCreateClassWin::_scalar_deleting_destructor_(CharCreateClassWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharCreateClassWin::_CharCreateClassWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00405730) --------------------------------------------------------
void __thiscall CharCreateDescritWin::SetClass(CharCreateDescritWin *this, char kClass)
{
  char v2; // al@1

  v2 = this->m_kClass;
  if ( v2 != kClass )
  {
    this->m_kOldClass = v2;
    this->m_kClass = kClass;
  }
}

//----- (00405750) --------------------------------------------------------
void __thiscall CharCreateDescritWin::OnCommand(CharCreateDescritWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
  {
    this->m_pkListWinContent.m_pObject->m_nViewStartPos = this->m_pkSlideBarList.m_pObject->m_nCurPos;
    SlideListWin::UpdateViewList(this->m_pkListWinContent.m_pObject);
  }
}

//----- (00405780) --------------------------------------------------------
void __thiscall CharCreateDescritWin::UpdateMeWin(CharCreateDescritWin *this, float fCurTime)
{
  CharCreateDescritWin *v2; // esi@1

  v2 = this;
  if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->m_pkListWinContent.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) )
  {
    if ( PgWin::ms_iMsDeltaZ <= 0 )
    {
      if ( PgWin::ms_iMsDeltaZ < 0 )
        SlideBar::OnClick2(v2->m_pkSlideBarList.m_pObject);
    }
    else
    {
      SlideBar::OnClick1(v2->m_pkSlideBarList.m_pObject);
    }
  }
}

//----- (004057D0) --------------------------------------------------------
void __thiscall CharCreateDescritWin::UpdateSlideBar(CharCreateDescritWin *this)
{
  CharCreateDescritWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkSlideBarList.m_pObject;
  if ( v2 )
  {
    v3 = v1->m_pkListWinContent.m_pObject;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pkListWinContent.m_pObject->m_nViewStartPos = v1->m_pkSlideBarList.m_pObject->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pkListWinContent.m_pObject);
    }
  }
}

//----- (00405820) --------------------------------------------------------
void __thiscall CharCreateDescritWin::SetTree(CharCreateDescritWin *this, char kClass)
{
  CharCreateDescritWin *v2; // ebx@1
  char *v3; // esi@2
  signed int v4; // edi@2
  int v5; // esi@4
  signed int v6; // edi@4
  char *v7; // esi@7
  signed int v8; // edi@7
  int v9; // esi@9
  signed int v10; // edi@9

  v2 = this;
  if ( kClass == 26 )
  {
    v3 = (char *)&this->m_pkTreeSpr[2];
    v4 = 3;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v5 = (int)&v2->m_pkArrow[1];
    v6 = 3;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0);
      v5 += 4;
      --v6;
    }
    while ( v6 );
  }
  else
  {
    v7 = (char *)this->m_pkTreeSpr;
    v8 = 5;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(1);
      v7 += 4;
      --v8;
    }
    while ( v8 );
    v9 = (int)&v2->m_pkArrow[1];
    v10 = 3;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v9 + 256))(1);
      v9 += 4;
      --v10;
    }
    while ( v10 );
  }
}

//----- (004058C0) --------------------------------------------------------
void __thiscall CharCreateDescritWin::_CharCreateDescritWin(CharCreateDescritWin *this)
{
  CharCreateDescritWin *v1; // esi@1
  char *v2; // edi@1
  SlideBar *v3; // edi@1
  SlideListWin *v4; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateDescritWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateDescritWin::_vftable_;
  v2 = (char *)&this->m_kClassMap;
  this->m_kClassMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kClassMap);
  *(_DWORD *)v2 = &NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(*((void **)v2 + 2));
  _eh_vector_destructor_iterator_(
    v1->m_pkArrow,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkTreeSpr,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkTreeText,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v3 = v1->m_pkSlideBarList.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_pkListWinContent.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 978D2C: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 978D4C: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 978D6C: using guessed type int (__stdcall *CharCreateDescritWin___vftable_)(int uiFlags);
// 978D8C: using guessed type int (__thiscall *CharCreateDescritWin___vftable_)(void *p, char);

//----- (00405A00) --------------------------------------------------------
void __thiscall CharCreateDescritWin::CharCreateDescritWin(CharCreateDescritWin *this)
{
  CharCreateDescritWin *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST0C_4@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateDescritWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateDescritWin::_vftable_;
  v1->m_pkListWinContent.m_pObject = 0;
  v1->m_pkSlideBarList.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_pkTreeText,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_pkTreeSpr,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_pkArrow,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_kClassMap.baseclass_0.m_uiHashSize = 37;
  v1->m_kClassMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  *(_DWORD *)&v1->m_kClassMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kClassMap.baseclass_0.m_uiHashSize;
  v1->m_kClassMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<PgWinSpr> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kClassMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  *(_WORD *)&v1->m_kClass = 257;
}
// 978D2C: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 978D4C: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 978D6C: using guessed type int (__stdcall *CharCreateDescritWin___vftable_)(int uiFlags);
// 978D8C: using guessed type int (__thiscall *CharCreateDescritWin___vftable_)(void *p, char);

//----- (00405B20) --------------------------------------------------------
void __thiscall CharCreateDescritWin::SetMark(CharCreateDescritWin *this, char kClass)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *v2; // esi@1
  const char *v3; // ST00_4@1
  PgWinSpr *v4; // esi@1
  NiPointer<PgWinSpr> spSpr; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spSpr.m_pObject = 0;
  v2 = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kClassMap;
  v3 = (const char *)this->m_kOldClass;
  v6 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kClassMap,
    v3,
    (NiPointer<NiShaderLibrary> *)&spSpr);
  ((void (__stdcall *)(_DWORD))spSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    v2,
    (const char *)(unsigned __int8)kClass,
    (NiPointer<NiShaderLibrary> *)&spSpr);
  v4 = spSpr.m_pObject;
  spSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)spSpr.m_pObject,
    1u);
  v6 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
}

//----- (00405BD0) --------------------------------------------------------
void __thiscall CharCreateDescritWin::SetTreeText(CharCreateDescritWin *this, char kClass)
{
  char v2; // bl@1
  CharCreateDescritWin *v3; // esi@1
  int v4; // esi@9
  void *v5; // eax@11
  int v6; // eax@12
  signed int i; // [sp+8h] [bp-8h]@9
  char v8; // [sp+Eh] [bp-2h]@9
  char uiBaseClass; // [sp+Fh] [bp-1h]@2

  v2 = kClass;
  v3 = this;
  switch ( kClass )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      uiBaseClass = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      uiBaseClass = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      uiBaseClass = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      uiBaseClass = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      uiBaseClass = 21;
      break;
    case 0x1A:
    case 0x1B:
      uiBaseClass = 26;
      break;
    default:
      uiBaseClass = 0;
      break;
  }
  i = 0;
  v8 = CharClass::GetBaseClassID(kClass);
  v4 = (int)v3->m_pkTreeText;
  do
  {
    if ( uiBaseClass == v8 )
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v2);
      if ( v5 )
        v6 = (int)((char *)v5 + 21);
      else
        v6 = (int)&byte_9788EB;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 472))(v6);
      v2 = kClass + i + 1;
    }
    v4 += 4;
    ++i;
  }
  while ( i < 5 );
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (00405D00) --------------------------------------------------------
CharCreateDescritWin *__cdecl CharCreateDescritWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CharCreateDescritWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1ACu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CharCreateDescritWin::CharCreateDescritWin((CharCreateDescritWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CharCreateDescritWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00405E30) --------------------------------------------------------
void __thiscall CharCreateDescritWin::AddTextWithSplit(CharCreateDescritWin *this, char *pcText)
{
  char *v2; // ebx@1
  CharCreateDescritWin *v3; // edi@1
  SlideListWin *v4; // eax@1
  int v5; // ecx@1
  int v6; // edx@3
  int v7; // eax@4
  CSpFont *v8; // esi@7
  double v9; // st7@8
  char *i; // esi@8
  double v11; // st7@9
  SlideBar *v12; // ecx@10
  SlideListWin *v13; // eax@11
  CSpFont *pkFont; // [sp+0h] [bp-320h]@7
  CharCreateDescritWin *v15; // [sp+8h] [bp-318h]@1
  int pkTestWin; // [sp+Ch] [bp-314h]@2
  char szText[256]; // [sp+10h] [bp-310h]@1
  char szTemp2[256]; // [sp+110h] [bp-210h]@1
  char szTemp[256]; // [sp+210h] [bp-110h]@1
  unsigned int v20; // [sp+310h] [bp-10h]@1
  int v21; // [sp+320h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v2 = pcText;
  v3 = this;
  v15 = this;
  szTemp[0] = 0;
  memset(&szTemp[1], 0, 0xFFu);
  szTemp2[0] = 0;
  memset(&szTemp2[1], 0, 0xFFu);
  szText[0] = 0;
  memset(&szText[1], 0, 0xFFu);
  v4 = v3->m_pkListWinContent.m_pObject;
  v5 = (signed int)((char *)v4->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&v4->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v5 )
  {
    v6 = *(_DWORD *)&v4->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( (*(_DWORD *)(*(_DWORD *)v6 + 336) - *(_DWORD *)(*(_DWORD *)v6 + 332)) >> 2 )
      v7 = **(_DWORD **)(*(_DWORD *)v6 + 332);
    else
      v7 = 0;
    pkTestWin = v7;
    v5 = v7;
  }
  else
  {
    pkTestWin = 0;
  }
  v8 = *(CSpFont **)(*(_DWORD *)(v5 + 288) + 312);
  pkFont = v8;
  if ( v8 )
  {
    v9 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v5 + 144))() / 1.049999952316284;
    for ( i = CSpFont::SplitStrByPixelSize(v8, pcText, (signed int)v9, 1);
          i;
          i = CSpFont::SplitStrByPixelSize(pkFont, i, (signed int)v11, 1) )
    {
      strncpy(szTemp, v2, i - v2);
      szTemp[i - v2] = 0;
      sprintf(szTemp2, "%s%s");
      v3 = v15;
      SlideListWin::AddText(v15->m_pkListWinContent.m_pObject, szTemp2);
      SlideListWin::AlignText(v15->m_pkListWinContent.m_pObject, 0);
      v2 = i;
      v11 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)pkTestWin + 144))() / 1.049999952316284;
    }
    v12 = v3->m_pkSlideBarList.m_pObject;
    if ( v12 )
    {
      v13 = v3->m_pkListWinContent.m_pObject;
      if ( v13 )
      {
        SlideBar::SetSplitCnt(v12, v13->m_nSlideSplitCnt);
        v3->m_pkListWinContent.m_pObject->m_nViewStartPos = v3->m_pkSlideBarList.m_pObject->m_nCurPos;
        SlideListWin::UpdateViewList(v3->m_pkListWinContent.m_pObject);
      }
    }
  }
  SlideListWin::UpdateViewList(v3->m_pkListWinContent.m_pObject);
}
// A85C00: using guessed type int __security_cookie;

//----- (00406080) --------------------------------------------------------
void __thiscall CharCreateDescritWin::SetDescription(CharCreateDescritWin *this, char kClass)
{
  CharCreateDescritWin *v2; // esi@1
  char *v3; // eax@2
  char *v4; // eax@2
  char *v5; // eax@2
  char *v6; // eax@3
  char *v7; // eax@3
  char *v8; // eax@3
  char *v9; // eax@4
  char *v10; // eax@4
  char *v11; // eax@4
  char *v12; // eax@5
  char *v13; // eax@5
  char *v14; // eax@5
  char *v15; // eax@6
  char *v16; // eax@6
  char *v17; // eax@6
  char *v18; // eax@7
  char *v19; // eax@7
  char *v20; // eax@7

  v2 = this;
  SlideListWin::RemoveAllList(this->m_pkListWinContent.m_pObject);
  switch ( kClass )
  {
    case 1:
      v3 = TextData2::Get(0xD204354Du);
      CharCreateDescritWin::AddTextWithSplit(v2, v3);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v4 = TextData2::Get(0xD205354Du);
      CharCreateDescritWin::AddTextWithSplit(v2, v4);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v5 = TextData2::Get(0xD206354Du);
      CharCreateDescritWin::AddTextWithSplit(v2, v5);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      break;
    case 0xB:
      v6 = TextData2::Get(0xD9DFF23Du);
      CharCreateDescritWin::AddTextWithSplit(v2, v6);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v7 = TextData2::Get(0xD9DFF33Du);
      CharCreateDescritWin::AddTextWithSplit(v2, v7);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v8 = TextData2::Get(0xD9DFF43Du);
      CharCreateDescritWin::AddTextWithSplit(v2, v8);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      break;
    case 6:
      v9 = TextData2::Get(0xDBCAF847u);
      CharCreateDescritWin::AddTextWithSplit(v2, v9);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v10 = TextData2::Get(0xDBCAF947u);
      CharCreateDescritWin::AddTextWithSplit(v2, v10);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v11 = TextData2::Get(0xDBCAFA47u);
      CharCreateDescritWin::AddTextWithSplit(v2, v11);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      break;
    case 0x10:
      v12 = TextData2::Get(0xAEDEE8D8u);
      CharCreateDescritWin::AddTextWithSplit(v2, v12);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v13 = TextData2::Get(0xAFDEE8D8u);
      CharCreateDescritWin::AddTextWithSplit(v2, v13);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v14 = TextData2::Get(0xB0DEE8D8u);
      CharCreateDescritWin::AddTextWithSplit(v2, v14);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      break;
    case 0x15:
      v15 = TextData2::Get(0xDBF2CF11u);
      CharCreateDescritWin::AddTextWithSplit(v2, v15);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v16 = TextData2::Get(0xDBF2CF12u);
      CharCreateDescritWin::AddTextWithSplit(v2, v16);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v17 = TextData2::Get(0xDBF2CF13u);
      CharCreateDescritWin::AddTextWithSplit(v2, v17);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      break;
    case 0x1A:
      v18 = TextData3::Get(0x2745FE41u);
      CharCreateDescritWin::AddTextWithSplit(v2, v18);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v19 = TextData3::Get(0x2745FE42u);
      CharCreateDescritWin::AddTextWithSplit(v2, v19);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      v20 = TextData3::Get(0x2745FE43u);
      CharCreateDescritWin::AddTextWithSplit(v2, v20);
      SlideListWin::AddText(v2->m_pkListWinContent.m_pObject, "\n");
      break;
    default:
      return;
  }
}

//----- (004063A0) --------------------------------------------------------
void __thiscall CharCreateDescritWin::UpdateView(CharCreateDescritWin *this)
{
  CharCreateDescritWin *v1; // esi@1

  v1 = this;
  CharCreateDescritWin::SetDescription(this, this->m_kClass);
  CharCreateDescritWin::SetMark(v1, v1->m_kClass);
  CharCreateDescritWin::SetTree(v1, v1->m_kClass);
  CharCreateDescritWin::SetTreeText(v1, v1->m_kClass);
}

//----- (004063E0) --------------------------------------------------------
bool __thiscall CharCreateDescritWin::Create(CharCreateDescritWin *this, PgFrameWork *pkFrameWork)
{
  CharCreateDescritWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  volatile LONG *v7; // eax@7
  PgSprData *v9; // eax@12
  NiPointer<PgWinBut> v10; // ecx@15
  NiPointer<PgWinBut> v11; // eax@15
  NiPointer<PgWinBut> v12; // ebx@17
  PgWinSpr *v13; // ebx@19
  PgWinSpr *v14; // ebx@21
  PgWinSpr *v15; // ebx@23
  PgWinSpr *v16; // ebx@25
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // eax@27
  int v18; // eax@27
  PgWinSpr *v19; // eax@28
  PgWinSpr *v20; // edi@28
  PgWinSpr *v21; // ebx@28
  int v22; // eax@36
  int v23; // ebx@36
  D3DXCOLOR v24; // ST28_16@37
  int v25; // eax@37
  int v26; // edi@37
  int v27; // edi@45
  PgFont *v28; // eax@45
  PgWinSpr *v29; // eax@47
  PgWinSpr *v30; // edi@47
  PgWinSpr *v31; // ebx@47
  SLWCreateInfo::Item *v32; // edi@55
  SLWCreateInfo::Item *v33; // edi@57
  PgSprData *v34; // eax@59
  int v35; // eax@59
  SlideListWin *v36; // edi@59
  PgSprData *v37; // eax@67
  SlideBar *v38; // eax@67
  SlideBar *v39; // edi@67
  SlideBar *v40; // ebx@67
  SlideBar *v41; // edi@74
  NiRefObjectVtbl *v42; // ebx@74
  int v43; // eax@74
  NiRefObjectVtbl *v44; // edx@74
  int v45; // eax@74
  NiRefObjectVtbl *v46; // edi@74
  NiNode *v47; // esi@76
  NiPointer<PgWinBut> v48; // [sp+3Ch] [bp-A4h]@15
  int v49; // [sp+40h] [bp-A0h]@1
  NiPointer<PgWinBut> v50; // [sp+44h] [bp-9Ch]@19
  SLWCreateInfo kCreateInfo; // [sp+50h] [bp-90h]@55
  UIUtil ui; // [sp+6Ch] [bp-74h]@15
  int uiTop; // [sp+80h] [bp-60h]@12
  int uiLeft; // [sp+84h] [bp-5Ch]@12
  int v55; // [sp+88h] [bp-58h]@27
  NiPointer<NiNode> spNode; // [sp+8Ch] [bp-54h]@1
  NiPointer<PgWinBut> *i; // [sp+90h] [bp-50h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+94h] [bp-4Ch]@55
  char acBuf[32]; // [sp+B0h] [bp-30h]@27
  unsigned int v60; // [sp+D0h] [bp-10h]@1
  int v61; // [sp+DCh] [bp-4h]@1
  int v62; // [sp+E0h] [bp+0h]@1

  v60 = (unsigned int)&v62 ^ __security_cookie;
  v49 = (unsigned int)&v62 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v61 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "charcreate\\ClassTree.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("ClassTree.nif Load Fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v61 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v7 = (volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "CharCreateDescritWin", 0) )
  {
    v6 = spNode.m_pObject;
    v61 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v7 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
    if ( !InterlockedDecrement(v7) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v61) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, uiLeft, uiTop);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v48.m_pObject = v10.m_pObject;
  i = &v48;
  v11.m_pObject = (PgWinBut *)UIUtil::CreateSpr(&ui, "ClassSmall_Fighter", 0);
  v48.m_pObject = v11.m_pObject;
  if ( v11.m_pObject )
    InterlockedIncrement((volatile LONG *)&v11.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kClassMap,
    1u,
    v48);
  v12.m_pObject = (PgWinBut *)UIUtil::CreateSpr(&ui, "ClassSmall_Archer", 0);
  i = &v48;
  v48.m_pObject = v12.m_pObject;
  if ( v12.m_pObject )
    InterlockedIncrement((volatile LONG *)&v12.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kClassMap,
    0xBu,
    v48);
  ((void (__thiscall *)(PgWinBut *, _DWORD, int, PgWinBut *))v12.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
    v12.m_pObject,
    0,
    v49,
    v50.m_pObject);
  v13 = UIUtil::CreateSpr(&ui, "ClassSmall_Cleric", 0);
  i = &v50;
  v50.m_pObject = (PgWinBut *)v13;
  if ( v13 )
    InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kClassMap,
    6u,
    v50);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v14 = UIUtil::CreateSpr(&ui, "ClassSmall_Mage", 0);
  i = &v50;
  v50.m_pObject = (PgWinBut *)v14;
  if ( v14 )
    InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kClassMap,
    0x10u,
    v50);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v14,
    0);
  v15 = UIUtil::CreateSpr(&ui, "ClassSmall_Joker", 0);
  i = &v50;
  v50.m_pObject = (PgWinBut *)v15;
  if ( v15 )
    InterlockedIncrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kClassMap,
    0x15u,
    v50);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v16 = UIUtil::CreateSpr(&ui, "ClassSmall_Sentinel", 0);
  i = &v50;
  v50.m_pObject = (PgWinBut *)v16;
  if ( v16 )
    InterlockedIncrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kClassMap,
    0x1Au,
    v50);
  v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  v50.m_pObject = 0;
  ((void (__thiscall *)(PgWinSpr *))v17)(v16);
  v18 = 0;
  acBuf[0] = 0;
  *(_DWORD *)&acBuf[1] = 0;
  *(_DWORD *)&acBuf[5] = 0;
  *(_DWORD *)&acBuf[9] = 0;
  *(_DWORD *)&acBuf[13] = 0;
  *(_DWORD *)&acBuf[17] = 0;
  *(_DWORD *)&acBuf[21] = 0;
  *(_DWORD *)&acBuf[25] = 0;
  *(_WORD *)&acBuf[29] = 0;
  acBuf[31] = 0;
  v55 = (int)v2->m_pkTreeSpr;
  do
  {
    v49 = v18 + 1;
    i = (NiPointer<PgWinBut> *)(v18 + 1);
    sprintf(acBuf, "ClassTree0%d");
    v19 = UIUtil::CreateSpr(&ui, acBuf, 0);
    v20 = *(PgWinSpr **)v55;
    v21 = v19;
    if ( *(PgWinSpr **)v55 != v19 )
    {
      if ( v20
        && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v20 )
        v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v20,
          1u);
      *(_DWORD *)v55 = v21;
      if ( v21 )
        InterlockedIncrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v18 = (int)i;
    v55 += 4;
  }
  while ( (signed int)i < 5 );
  v22 = 0;
  v23 = (int)v2->m_pkTreeText;
  do
  {
    v49 = v22 + 1;
    v55 = v22 + 1;
    sprintf(acBuf, "Text0%d");
    *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v25 = (int)UIUtil::CreateTextNoSprEx(&ui, acBuf, "-", COERCE_D3DXCOLOR(v24.r), 5u, 0, 0);
    v26 = *(_DWORD *)v23;
    i = (NiPointer<PgWinBut> *)v25;
    if ( v26 != v25 )
    {
      if ( v26 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v26)(v26, 1);
        v25 = (int)i;
      }
      *(_DWORD *)v23 = v25;
      if ( v25 )
        InterlockedIncrement((volatile LONG *)(v25 + 4));
    }
    v27 = **(_DWORD **)v23;
    i = *(NiPointer<PgWinBut> **)v23;
    v28 = Font::Get(0);
    (*(void (__thiscall **)(NiPointer<PgWinBut> *, PgFont *))(v27 + 452))(i, v28);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v23 + 240))(0);
    v22 = v55;
    v23 += 4;
  }
  while ( v55 < 5 );
  i = 0;
  v55 = (int)v2->m_pkArrow;
  do
  {
    v49 = (int)i;
    sprintf(acBuf, "arrow_0%d");
    v29 = UIUtil::CreateSpr(&ui, acBuf, 0);
    v30 = *(PgWinSpr **)v55;
    v31 = v29;
    if ( *(PgWinSpr **)v55 != v29 )
    {
      if ( v30
        && !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v30 )
        v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v30,
          1u);
      *(_DWORD *)v55 = v31;
      if ( v31 )
        InterlockedIncrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v55 += 4;
    i = (NiPointer<PgWinBut> *)((char *)i + 1);
  }
  while ( (signed int)i < 4 );
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v61) = 2;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  v32 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v32->nItemType = 1;
  v49 = 9;
  v32->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnNor", v49);
  LOBYTE(v61) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v32->vecNodeName,
    &thisa);
  LOBYTE(v61) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v33 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v33->nItemType = 2;
  v49 = 6;
  v33->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column", v49);
  LOBYTE(v61) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v33->vecNodeName,
    &thisa);
  LOBYTE(v61) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox_ClassExp", &uiLeft, &uiTop, 0);
  v35 = (int)SlideListWin::CreateWin(uiLeft, uiTop, v34, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 0, 1);
  v36 = v2->m_pkListWinContent.m_pObject;
  i = (NiPointer<PgWinBut> *)v35;
  if ( v36 != (SlideListWin *)v35 )
  {
    if ( v36 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v36 )
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v36,
          1u);
      v35 = (int)i;
    }
    v2->m_pkListWinContent.m_pObject = (SlideListWin *)v35;
    if ( v35 )
      InterlockedIncrement((volatile LONG *)(v35 + 4));
  }
  v2->m_pkListWinContent.m_pObject->m_bCheckEnable = 0;
  SlideListWin::UpdateViewList(v2->m_pkListWinContent.m_pObject);
  SlideListWin::AlignText(v2->m_pkListWinContent.m_pObject, 0);
  SlideListWin::UpdateViewList(v2->m_pkListWinContent.m_pObject);
  v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  v38 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar",
          "SlideBar_UpBtn",
          "SlideBar_DnBtn",
          v37,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v39 = v2->m_pkSlideBarList.m_pObject;
  v40 = v38;
  if ( v39 != v38 )
  {
    if ( v39
      && !InterlockedDecrement((volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v39 )
      v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v39,
        1u);
    v2->m_pkSlideBarList.m_pObject = v40;
    if ( v40 )
      InterlockedIncrement((volatile LONG *)&v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v2->m_pkSlideBarList.m_pObject->m_uiClickMsg = 0;
  v2->m_pkSlideBarList.m_pObject->m_eType = 1;
  v41 = v2->m_pkSlideBarList.m_pObject;
  v42 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v43 = ((int (__thiscall *)(SlideBar *))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2->m_pkSlideBarList.m_pObject);
  v44 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v49 = v43;
  v45 = ((int (__thiscall *)(SlideBar *))v44[41].__vecDelDtor)(v41);
  v42[77].__vecDelDtor((NiRefObject *)v41, v45);
  SlideBar::SetSplitCnt(v2->m_pkSlideBarList.m_pObject, 4);
  ((void (__thiscall *)(CharCreateDescritWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    1.0);
  v46 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v48.m_pObject = (PgWinBut *)(((int (__thiscall *)(CharCreateDescritWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2)
                             - 10);
  v48.m_pObject = (PgWinBut *)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                                (NiRefObject *)v2,
                                (unsigned int)v48.m_pObject);
  v46[77].__vecDelDtor((NiRefObject *)v2, (unsigned int)v48.m_pObject);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v2,
    1u);
  LOBYTE(v61) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)i);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v61) = 0;
  UIUtil::_UIUtil(&ui);
  v47 = spNode.m_pObject;
  v61 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v47 )
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00406BF0) --------------------------------------------------------
void __thiscall boost::detail::sp_counted_base::weak_release(boost::detail::sp_counted_base *this)
{
  boost::detail::sp_counted_base *v1; // ebx@1
  volatile LONG *v2; // edi@1
  int v3; // esi@3

  v1 = this;
  v2 = (volatile LONG *)&this->mtx_;
  if ( InterlockedExchange((volatile LONG *)&this->mtx_.l_, 1) )
  {
    do
      Sleep(1u);
    while ( InterlockedExchange(v2, 1) );
  }
  v3 = v1->weak_count_ - 1;
  v1->weak_count_ = v3;
  InterlockedExchange(v2, 0);
  if ( !v3 )
    v1->vfptr->destruct(v1);
}

//----- (00406C40) --------------------------------------------------------
char __cdecl CharClass::GetBaseClassID(char kClassID)
{
  char result; // al@2

  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      result = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      result = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      result = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      result = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      result = 21;
      break;
    case 0x1A:
    case 0x1B:
      result = 26;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00406CE0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> > *this)
{
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 978D2C: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);

//----- (00406D00) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 978D2C: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);

//----- (00406D40) --------------------------------------------------------
void __thiscall boost::detail::sp_counted_base::release(boost::detail::sp_counted_base *this)
{
  boost::detail::sp_counted_base *v1; // edi@1
  volatile LONG *v2; // esi@1
  int v3; // eax@3

  v1 = this;
  v2 = (volatile LONG *)&this->mtx_;
  if ( InterlockedExchange((volatile LONG *)&this->mtx_.l_, 1) )
  {
    do
      Sleep(1u);
    while ( InterlockedExchange(v2, 1) );
  }
  v3 = v1->use_count_ - 1;
  v1->use_count_ = v3;
  if ( v3 )
  {
    InterlockedExchange(v2, 0);
  }
  else
  {
    InterlockedExchange(v2, 0);
    v1->vfptr->dispose(v1);
    boost::detail::sp_counted_base::weak_release(v1);
  }
}

//----- (00406D90) --------------------------------------------------------
boost::detail::shared_count *__thiscall boost::detail::shared_count::operator_(boost::detail::shared_count *this, boost::detail::shared_count *r)
{
  boost::detail::sp_counted_base *v2; // edi@1
  boost::detail::sp_counted_base **v3; // esi@1
  boost::detail::shared_count *v5; // [sp+8h] [bp-4h]@1

  v2 = r->pi_;
  v3 = (boost::detail::sp_counted_base **)this;
  v5 = this;
  if ( r->pi_ )
  {
    while ( InterlockedExchange((volatile LONG *)&v2->mtx_.l_, 1) )
      Sleep(1u);
    ++v2->use_count_;
    InterlockedExchange((volatile LONG *)&v2->mtx_.l_, 0);
    v3 = (boost::detail::sp_counted_base **)v5;
  }
  if ( *v3 )
    boost::detail::sp_counted_base::release(*v3);
  *v3 = v2;
  return (boost::detail::shared_count *)v3;
}

//----- (00406DF0) --------------------------------------------------------
PgWinText *__thiscall SlideListWin::GetTextWin(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn)
{
  PgWinText *result; // eax@2
  int v4; // eax@3

  if ( uiIndex >= (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2
    || (v4 = *(_DWORD *)(*(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex),
        uiColumn >= (*(_DWORD *)(v4 + 336) - *(_DWORD *)(v4 + 332)) >> 2) )
    result = 0;
  else
    result = *(PgWinText **)(*(_DWORD *)(v4 + 332) + 4 * uiColumn);
  return result;
}

//----- (00406E40) --------------------------------------------------------
char *__cdecl TextData2::Get(unsigned int eTextID)
{
  int v1; // eax@1
  unsigned int v2; // eax@2
  void *v3; // eax@4
  void *v4; // edi@4
  char *result; // eax@5
  TextData2::Node kNode; // [sp+8h] [bp-10h]@1

  kNode.pStr = &byte_9788EB;
  kNode.pStrVoice = &byte_9788EB;
  kNode.pStrSoundEffect = &byte_9788EB;
  kNode.dwEnumVal = eTextID;
  v1 = *(_DWORD *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = bsearch(&kNode, TextData2::ms_apkNode, v2, 0x10u, TextDataNodeComp);
  v4 = v3;
  if ( v3 )
  {
    if ( strcmp(*((const char **)v3 + 2), "None") )
      SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v4 + 2));
    if ( strcmp(*((const char **)v4 + 3), "None") )
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v4 + 3));
    result = (char *)*((_DWORD *)v4 + 1);
  }
  else
  {
    result = &byte_9788EB;
  }
  return result;
}
// A94344: using guessed type int ITableBase_TextDataType2_TextData2___ms_pkTable;

//----- (00406F20) --------------------------------------------------------
void __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Chassign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _Count, char _Ch)
{
  if ( _Count == 1 )
  {
    if ( this->baseclass_0._Myres >= 0x10 )
      this = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    this->baseclass_0.___u0.baseclass_0.dummy[_Off] = _Ch;
  }
  else
  {
    if ( this->baseclass_0._Myres >= 0x10 )
      this = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    memset((char *)this + _Off, _Ch, _Count);
  }
}

//----- (00406F60) --------------------------------------------------------
void __thiscall boost::shared_ptr<SLWCreateInfo::Item>::_shared_ptr<SLWCreateInfo::Item>(boost::shared_ptr<PgNsTerrain::CPgBlockObject> *this)
{
  boost::detail::sp_counted_base *v1; // ecx@1

  v1 = this->pn.pi_;
  if ( v1 )
    boost::detail::sp_counted_base::release(v1);
}

//----- (00406F70) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_long_NiPointer<PgWinSpr>>::_scalar_deleting_destructor_(NiTMap<unsigned long,NiPointer<PgWinSpr> > *this, unsigned int a2)
{
  NiTMap<unsigned long,NiPointer<PgWinSpr> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned long,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_long_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 978D2C: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 978D4C: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_PgWinSpr_____vftable_)(void *p, char);

//----- (00406FF0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::allocate(std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *this, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x9249249
      || (result = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)operator new(28 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00407050) --------------------------------------------------------
char *__cdecl CharClass::GetLocalName(char kClassID)
{
  void *v1; // eax@1
  char *result; // eax@2

  v1 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
         (unsigned __int8)kClassID);
  if ( v1 )
    result = (char *)v1 + 21;
  else
    result = &byte_9788EB;
  return result;
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (00407080) --------------------------------------------------------
boost::shared_ptr<SLWCreateInfo::Item> *__cdecl std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(boost::shared_ptr<SLWCreateInfo::Item> *_First, boost::shared_ptr<SLWCreateInfo::Item> *_Last, boost::shared_ptr<SLWCreateInfo::Item> *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  boost::shared_ptr<SLWCreateInfo::Item> *v4; // eax@1
  boost::detail::sp_counted_base *v5; // edi@4
  boost::detail::sp_counted_base *v6; // ebx@8
  int v7; // eax@11
  int v8; // ST14_4@15
  volatile LONG *v10; // [sp-14h] [bp-1Ch]@11

  v4 = _First;
  if ( _First != _Last )
  {
    while ( 1 )
    {
      _Dest->px = v4->px;
      v5 = v4->pn.pi_;
      if ( v5 )
      {
        while ( InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 1) )
          Sleep(1u);
        ++v5->use_count_;
        InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 0);
      }
      v6 = _Dest->pn.pi_;
      if ( v6 )
      {
        while ( InterlockedExchange((volatile LONG *)&v6->mtx_.l_, 1) )
          Sleep(1u);
        v7 = v6->use_count_ - 1;
        v6->use_count_ = v7;
        v10 = (volatile LONG *)&v6->mtx_;
        if ( v7 )
        {
          InterlockedExchange(v10, 0);
        }
        else
        {
          InterlockedExchange(v10, 0);
          v6->vfptr->dispose(v6);
          while ( InterlockedExchange((volatile LONG *)&v6->mtx_.l_, 1) )
            Sleep(1u);
          v8 = v6->weak_count_ - 1;
          v6->weak_count_ = v8;
          InterlockedExchange((volatile LONG *)&v6->mtx_.l_, 0);
          if ( !v8 )
            v6->vfptr->destruct(v6);
        }
      }
      _Dest->pn.pi_ = v5;
      ++_Dest;
      ++_First;
      if ( _First == _Last )
        break;
      v4 = _First;
    }
  }
  return _Dest;
}

//----- (00407180) --------------------------------------------------------
void *__thiscall CharCreateDescritWin::_scalar_deleting_destructor_(CharCreateDescritWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharCreateDescritWin::_CharCreateDescritWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004071B0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Count, char _Ch)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  unsigned int v4; // eax@1
  unsigned int v5; // edi@4
  unsigned int v6; // ecx@6
  bool v7; // cf@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@9

  v3 = this;
  v4 = this->baseclass_0._Mysize;
  if ( -1 - v4 <= _Count )
    std::_Xlength_error("string too long");
  if ( !_Count )
    return v3;
  v5 = v4 + _Count;
  if ( v4 + _Count > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v6 = this->baseclass_0._Myres;
  if ( v6 < v5 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v3, v4 + _Count, v4);
    if ( v5 )
    {
LABEL_8:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Chassign(
        v3,
        v3->baseclass_0._Mysize,
        _Count,
        _Ch);
      v7 = v3->baseclass_0._Myres < 0x10;
      v3->baseclass_0._Mysize = v5;
      if ( !v7 )
      {
        *(_BYTE *)(*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + v5) = 0;
        return v3;
      }
      v3->baseclass_0.___u0.baseclass_0.dummy[v5] = 0;
    }
    return v3;
  }
  if ( v5 )
    goto LABEL_8;
  v3->baseclass_0._Mysize = 0;
  if ( v6 < 0x10 )
  {
    result = v3;
    v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v3;
  }
  return result;
}

//----- (00407260) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr)
{
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(this, _Ptr, strlen(_Ptr));
}

//----- (00407290) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // esi@1

  v2 = this;
  if ( this != _Right )
  {
    if ( this->baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&this->baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->baseclass_0._Myres = 15;
    v2->baseclass_0._Mysize = 0;
    v2->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( _Right->baseclass_0._Myres >= 0x10 )
    {
      *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
      *(_DWORD *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    else
    {
      memmove(
        v2->baseclass_0.___u0.baseclass_0.dummy,
        _Right->baseclass_0.___u0.baseclass_0.dummy,
        _Right->baseclass_0._Mysize + 1);
    }
    v2->baseclass_0._Mysize = _Right->baseclass_0._Mysize;
    v2->baseclass_0._Myres = _Right->baseclass_0._Myres;
    _Right->baseclass_0._Myres = 15;
    _Right->baseclass_0._Mysize = 0;
    _Right->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  return v2;
}

//----- (00407310) --------------------------------------------------------
void __cdecl std::_Destroy_range<std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_First, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Last, std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *i; // esi@1

  for ( i = _First; i != _Last; ++i )
  {
    if ( i->baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&i->baseclass_0.___u0.baseclass_0.dummy[0]);
    i->baseclass_0._Myres = 15;
    i->baseclass_0._Mysize = 0;
    i->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
}

//----- (00407350) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::_Uninit_move<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_First, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Last, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Dest, std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Al, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // esi@1

  v6 = _First;
  v7 = _Dest;
  while ( v6 != _Last )
  {
    if ( v7 )
    {
      v7->baseclass_0._Myres = 15;
      v7->baseclass_0._Mysize = 0;
      v7->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( v7 != v6 )
      {
        if ( v7->baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&v7->baseclass_0.___u0.baseclass_0.dummy[0]);
        v7->baseclass_0._Myres = 15;
        v7->baseclass_0._Mysize = 0;
        v7->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( v6->baseclass_0._Myres >= 0x10 )
        {
          *(_DWORD *)&v7->baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
          *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        else
        {
          memmove(
            v7->baseclass_0.___u0.baseclass_0.dummy,
            v6->baseclass_0.___u0.baseclass_0.dummy,
            v6->baseclass_0._Mysize + 1);
        }
        v7->baseclass_0._Mysize = v6->baseclass_0._Mysize;
        v7->baseclass_0._Myres = v6->baseclass_0._Myres;
        v6->baseclass_0._Myres = 15;
        v6->baseclass_0._Mysize = 0;
        v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
    }
    ++v7;
    ++v6;
  }
  return v7;
}

//----- (00407410) --------------------------------------------------------
void __thiscall SLWCreateInfo::_SLWCreateInfo(SLWCreateInfo *this)
{
  SLWCreateInfo *v1; // esi@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( *(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0],
      this->m_arrItem.baseclass_0._Mylast,
      &this->m_arrItem.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_arrItem.baseclass_0._Mylast = 0;
  v1->m_arrItem.baseclass_0._Myend = 0;
}

//----- (00407460) --------------------------------------------------------
void __thiscall SLWCreateInfo::Clear(SLWCreateInfo *this)
{
  SLWCreateInfo *v1; // esi@1
  boost::shared_ptr<SLWCreateInfo::Item> *v2; // eax@1
  boost::shared_ptr<SLWCreateInfo::Item> *v3; // ecx@1
  boost::shared_ptr<SLWCreateInfo::Item> *v4; // edi@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = this->m_arrItem.baseclass_0._Mylast;
  v3 = *(boost::shared_ptr<SLWCreateInfo::Item> **)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    v4 = std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
           v2,
           v2,
           v3,
           __formal);
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      v4,
      v1->m_arrItem.baseclass_0._Mylast,
      &v1->m_arrItem.baseclass_0._Alval,
      __formal);
    v1->m_arrItem.baseclass_0._Mylast = v4;
  }
  v1->m_bMakeData = 0;
  v1->m_nOffX = 0;
  v1->m_nOffY = 0;
}

//----- (004074B0) --------------------------------------------------------
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::reserve(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, unsigned int _Count)
{
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v2; // esi@1
  void *v3; // eax@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // ST04_4@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // eax@6
  int v9; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@4

  v11 = &v9;
  v2 = this;
  if ( _Count > 0x9249249 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 28 < _Count )
  {
    v3 = std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::allocate(
           &this->baseclass_0._Alval,
           _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v12 = 0;
    std::_Uninit_move<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(
      v5,
      v4,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((char *)v2->baseclass_0._Mylast
                    + ((unsigned __int64)(-1840700269i64
                                        * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                       - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32)
                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 4;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      std::_Destroy_range<std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v2->baseclass_0.___u0.baseclass_0.dummy[0],
        v2->baseclass_0._Mylast,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Count);
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v8 = _Ptr;
    v2->baseclass_0._Myend = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&_Ptr[28 * _Count];
    v2->baseclass_0._Mylast = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v8[28 * v7];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (004075D0) --------------------------------------------------------
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Reserve(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 28;
  if ( 153391689 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 28;
  if ( v3 > v4 )
  {
    if ( 153391689 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::reserve(
      this,
      v5);
  }
}

//----- (00407650) --------------------------------------------------------
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val)
{
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v2; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // ecx@5
  unsigned int v7; // edx@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // [sp-18h] [bp-28h]@6
  unsigned int v9; // [sp-14h] [bp-24h]@6
  unsigned int v10; // [sp-10h] [bp-20h]@6

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Reserve(
        v2,
        1u);
    v6 = v2->baseclass_0._Mylast;
    v7 = 0;
    if ( v6 )
    {
      v10 = -1;
      v9 = 0;
      v8 = _Val;
      goto LABEL_11;
    }
  }
  else
  {
    v4 = (signed int)((char *)_Val
                    + ((unsigned __int64)(-1840700269i64
                                        * (signed int)((char *)_Val
                                                     - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32)
                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 4;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Reserve(
        v2,
        1u);
    v6 = v2->baseclass_0._Mylast;
    v7 = 0;
    if ( v6 )
    {
      v10 = -1;
      v9 = 0;
      v8 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                  + 28 * v5);
LABEL_11:
      v6->baseclass_0._Myres = 15;
      v6->baseclass_0._Mysize = v7;
      v6->baseclass_0.___u0.baseclass_0.dummy[0] = v7;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v6, v8, v9, v10);
      goto LABEL_12;
    }
  }
LABEL_12:
  ++v2->baseclass_0._Mylast;
}

//----- (00407720) --------------------------------------------------------
bool __usercall IsSpecialChar<al>(char c1<bl>, char c2)
{
  int v2; // eax@2
  BYTE v4; // [sp+0h] [bp-4h]@0

  return IsDBCSLeadByte(v4) && ((v2 = 94 * (unsigned __int8)c1 + (unsigned __int8)c2 - 16705, v2 < 0) || v2 >= 2350);
}

//----- (00407760) --------------------------------------------------------
bool __usercall IsSpecialCharInStr<al>(char *pstr<eax>)
{
  char *v1; // esi@1
  char v3; // al@3
  char v4; // bl@5
  BYTE c1; // [sp+4h] [bp-4h]@4

  v1 = pstr;
  if ( !pstr )
    return 0;
  v3 = *pstr;
  if ( !v3 )
    return 0;
  while ( 1 )
  {
    c1 = v3;
    if ( !IsDBCSLeadByte(v3) )
    {
      ++v1;
      goto LABEL_9;
    }
    v4 = v1[1];
    if ( IsDBCSLeadByte(c1) )
    {
      if ( 94 * (unsigned __int8)c1 + (unsigned int)(unsigned __int8)v4 - 16705 > 0x92D )
        return 1;
    }
    v1 += 2;
LABEL_9:
    v3 = *v1;
    if ( !*v1 )
      return 0;
  }
}

//----- (004077E0) --------------------------------------------------------
bool __usercall IsSpecialCharInStr2<al>(char *pstr<ecx>)
{
  char *v1; // esi@1
  int v2; // eax@1
  char v3; // cl@2
  int v4; // ebx@3
  int v5; // esi@3
  int v6; // eax@6
  char temp[128]; // [sp+Ch] [bp-84h]@1
  unsigned int v9; // [sp+8Ch] [bp-4h]@1
  int v10; // [sp+90h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = pstr;
  memset(temp, 0, 0x64u);
  strncpy(temp, v1, 0x5Au);
  v2 = (int)temp;
  do
    v3 = *(_BYTE *)v2++;
  while ( v3 );
  v4 = v2 - (_DWORD)&temp[1];
  v5 = 0;
  if ( v2 - (signed int)&temp[1] <= 0 )
    return 0;
  while ( IsDBCSLeadByte(temp[v5]) )
  {
    ++v5;
LABEL_34:
    ++v5;
    if ( v5 >= v4 )
      return 0;
  }
  v6 = (unsigned __int8)temp[v5];
  if ( (_BYTE)v6 != 32
    && (_BYTE)v6 != 39
    && (_BYTE)v6 != 92
    && (_BYTE)v6 != 47
    && (_BYTE)v6 != 58
    && (_BYTE)v6 != 42
    && (_BYTE)v6 != 63
    && (_BYTE)v6 != 60
    && (_BYTE)v6 != 62
    && (_BYTE)v6 != 124
    && (_BYTE)v6 != 126
    && (_BYTE)v6 != 33
    && (_BYTE)v6 != 64
    && (_BYTE)v6 != 37
    && (_BYTE)v6 != 38
    && (_BYTE)v6 != 59
    && (_BYTE)v6 != 46
    && (_BYTE)v6 != 44
    && (_BYTE)v6 != 34
    && (_BYTE)v6 != 96
    && (_BYTE)v6 != 40
    && (_BYTE)v6 != 41
    && (_BYTE)v6 != 43
    && (_BYTE)v6 != 45
    && (_BYTE)v6 != 35
    && (_BYTE)v6 != 36
    && (_BYTE)v6 != 91
    && (_BYTE)v6 != 93 )
    goto LABEL_34;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00407910) --------------------------------------------------------
bool __usercall IsPeculiarStr<al>(char *pcName<esi>)
{
  char *v1; // eax@1
  char v2; // cl@2
  char v3; // bl@3
  int v4; // edx@3
  unsigned int v5; // ecx@3
  char v6; // al@4
  bool result; // al@14

  v1 = pcName;
  do
    v2 = *v1++;
  while ( v2 );
  v3 = 0;
  v4 = v1 - (pcName + 1);
  v5 = 0;
  if ( v1 == pcName + 1 )
    goto LABEL_18;
  do
  {
    v6 = pcName[v5];
    if ( (v6 < 65 || v6 > 90) && (v6 < 97 || v6 > 122) )
    {
      if ( v6 < 48 || v6 > 57 )
      {
        if ( v6 != 95 )
          v3 = 1;
      }
    }
    ++v5;
  }
  while ( v5 < v4 );
  if ( v3 )
    result = 1;
  else
LABEL_18:
    result = 0;
  return result;
}

//----- (00407970) --------------------------------------------------------
void __thiscall CharCreateFrameWork::CreateCancel(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1

  v1 = this;
  PgFrameWork::PostFrameMsgChange(&this->baseclass_0, CharSelectFrameWorkID, 0);
  CharCreateClassWin::KillFocus(v1->m_pkCharCreateClassWin);
}

//----- (00407990) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ChangeAvatarFace(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // eax@1
  Avatar *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
    Avatar::ChangeFaceTextureShape(v2, &v1->m_kShapeData);
}

//----- (004079B0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ChangeAvatarHair(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // eax@1
  Avatar *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
    Avatar::ChangeHairTypeShape(v2, &v1->m_kShapeData);
}

//----- (004079D0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ChangeAvatarHairColor(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // eax@1
  Avatar *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
    Avatar::ChangeHairColorShape(v2, &v1->m_kShapeData);
}

//----- (004079F0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::OnInitializeStatus(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1

  v1 = this;
  CharCreateClassWin::SetFocus(this->m_pkCharCreateClassWin);
  CharCreateClassWin::ClearNameEditBox(v1->m_pkCharCreateClassWin);
}

//----- (00407A10) --------------------------------------------------------
void __thiscall CharCreateFrameWork::OnErrorGotoAccount(CharCreateFrameWork *this)
{
  PgFrameWork::PostFrameMsgChange(&this->baseclass_0, AccountFrameWorkID, 0);
}

//----- (00407A20) --------------------------------------------------------
void __thiscall CharCreateFrameWork::SetClass(CharCreateFrameWork *this, char kClass)
{
  CharCreateFrameWork *v2; // esi@1
  CharCreateDescritWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkCharCreateDescritWin;
  v2->m_kShapeData._bf0 ^= (v2->m_kShapeData._bf0 ^ 4 * kClass) & 0x7C;
  v2->m_kClass = kClass;
  v2->m_bIsActiveMotion = 1;
  CharCreateDescritWin::SetClass(v3, kClass);
  CharCreateDescritWin::UpdateView(v2->m_pkCharCreateDescritWin);
  CharCreateStatWin::SetClass(v2->m_pkCharCreateStatWin, kClass);
  CharCreateStatWin::SetAniCode(v2->m_pkCharCreateStatWin);
}

//----- (00407A70) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ActPos(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  Avatar *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkAvatar;
  v1->m_uiAvatorActiveCode = 102020;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(102020, 0, 0);
  v1->m_bIsAvatorActiveMotion = 1;
}

//----- (00407AA0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ActStand(CharCreateFrameWork *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->m_pkAvatar->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(
    102010,
    0,
    0);
}

//----- (00407AC0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ActNormalStand(CharCreateFrameWork *this)
{
  this->m_bNormalStand = 1;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->m_pkAvatar->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(
    102030,
    0,
    0);
}

//----- (00407AE0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::Draw(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  NiAVObject *v2; // eax@2
  NiCamera *v3; // ST00_4@2
  NiVisibleArray m_kVisible; // [sp+0h] [bp-B0h]@2
  NiCullingProcess m_kCuller; // [sp+10h] [bp-A0h]@2
  unsigned int v6; // [sp+A0h] [bp-10h]@1
  int v7; // [sp+ACh] [bp-4h]@2
  int v8; // [sp+B0h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  if ( this->m_spCamera.m_pObject )
  {
    m_kVisible.m_ppkArray = 0;
    m_kVisible.m_uiCurrentSize = 0;
    m_kVisible.m_uiAllocatedSize = 0;
    m_kVisible.m_uiGrowBy = 1024;
    NiVisibleArray::SetAllocatedSize(&m_kVisible, 0x400u);
    v7 = 0;
    NiCullingProcess::NiCullingProcess(&m_kCuller, &m_kVisible);
    v2 = (NiAVObject *)v1->m_spBackgroundScene.m_pObject;
    v3 = v1->m_spCamera.m_pObject;
    LOBYTE(v7) = 1;
    NiDrawScene(v3, v2, &m_kCuller, 0);
    PgWinMgr::Draw(&Pgg_kWinMgr, NiRenderer::ms_pkRenderer);
    LOBYTE(v7) = 0;
    NiCullingProcess::_NiCullingProcess(&m_kCuller);
    operator delete(m_kVisible.m_ppkArray);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00407BC0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ProcessMsg(CharCreateFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  CharCreateFrameWork *v4; // esi@1

  v4 = this;
  if ( uiMsg == 9 )
  {
    PgFrameWork::PostFrameMsgChange(&this->baseclass_0, AccountFrameWorkID, 0);
  }
  else
  {
    if ( uiMsg == 10 )
    {
      CharCreateClassWin::SetFocus(this->m_pkCharCreateClassWin);
      CharCreateClassWin::ClearNameEditBox(v4->m_pkCharCreateClassWin);
    }
  }
}

//----- (00407C00) --------------------------------------------------------
void __thiscall CharCreateFrameWork::Reset(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // ebx@1
  int v2; // esi@2
  PgWin *v3; // ST10_4@5
  int v4; // [sp+20h] [bp-2Ch]@1
  NiMatrix3 mat3Rot; // [sp+24h] [bp-28h]@5
  unsigned int v6; // [sp+48h] [bp-4h]@1
  int v7; // [sp+4Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  ((void (__stdcall *)(int *, NiNode *))this->m_spAvatarPos.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
    &v4,
    this->m_pkCharNode);
  if ( v4 )
  {
    v2 = v4;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
    {
      if ( v2 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    }
  }
  NiAVObject::UpdateProperties(&v1->m_spBackgroundScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spBackgroundScene.m_pObject->baseclass_0);
  NiAVObject::Update(&v1->m_spBackgroundScene.m_pObject->baseclass_0, 0.0, 1);
  v3 = (PgWin *)v1->m_pkCharCreateInfoWin;
  v1->m_kGender = 1;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkCharCreateViewCtrlWin->baseclass_0.baseclass_0.baseclass_0);
  v1->m_bAutoTurn = 0;
  NiMatrix3::MakeZRotation(&mat3Rot, 0.0);
  memcpy(&v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, &mat3Rot, 0x24u);
  *(_WORD *)&v1->m_bActStart = 0;
  v1->m_bNormalStand = 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00407CD0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::TurnRight(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // ebx@1
  Avatar *v2; // eax@1
  float v3; // ST14_4@3
  NiMatrix3 result; // [sp+14h] [bp-70h]@3
  NiMatrix3 mat3OldRot; // [sp+38h] [bp-4Ch]@3
  NiMatrix3 mat3Rot; // [sp+5Ch] [bp-28h]@3
  unsigned int v7; // [sp+80h] [bp-4h]@1
  int v8; // [sp+84h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
  {
    if ( v2->baseclass_0.m_spScene.m_pObject )
    {
      v3 = Timer::ms_fDeltaTime * -2.0;
      NiMatrix3::MakeZRotation(&mat3Rot, v3);
      memcpy(&mat3OldRot, &v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, sizeof(mat3OldRot));
      memcpy(&mat3Rot, NiMatrix3::operator_(&mat3OldRot, &result, &mat3Rot), sizeof(mat3Rot));
      memcpy(&v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, &mat3Rot, 0x24u);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (00407D60) --------------------------------------------------------
void __thiscall CharCreateFrameWork::TurnLeft(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // ebx@1
  Avatar *v2; // eax@1
  float v3; // ST14_4@3
  NiMatrix3 result; // [sp+14h] [bp-70h]@3
  NiMatrix3 mat3OldRot; // [sp+38h] [bp-4Ch]@3
  NiMatrix3 mat3Rot; // [sp+5Ch] [bp-28h]@3
  unsigned int v7; // [sp+80h] [bp-4h]@1
  int v8; // [sp+84h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
  {
    if ( v2->baseclass_0.m_spScene.m_pObject )
    {
      v3 = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime;
      NiMatrix3::MakeZRotation(&mat3Rot, v3);
      memcpy(&mat3OldRot, &v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, sizeof(mat3OldRot));
      memcpy(&mat3Rot, NiMatrix3::operator_(&mat3OldRot, &result, &mat3Rot), sizeof(mat3Rot));
      memcpy(&v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, &mat3Rot, 0x24u);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (00407DF0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ApplyTerrain(CharCreateFrameWork *this, NiNode *pkGroundNode)
{
  NiTListItem<NiPointer<Shadow> > *v2; // ebx@1
  Shadow *v3; // esi@2
  NiNode *v4; // eax@2
  NiNode *v5; // edi@2
  NiCollisionGroup *v6; // ecx@9
  NiAVObject *pkObject; // [sp+4h] [bp-4h]@2

  v2 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element.m_pObject;
    v4 = v3->m_kDecal.m_spObTerrain.m_pObject;
    v2 = v2->m_pkNext;
    v5 = v4;
    pkObject = (NiAVObject *)v3->m_kDecal.m_spObTerrain.m_pObject;
    if ( v4 != pkGroundNode )
    {
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v3->m_kDecal.m_spObTerrain.m_pObject = pkGroundNode;
      if ( pkGroundNode )
        InterlockedIncrement((volatile LONG *)&pkGroundNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v6 = v3->m_kDecal.m_pkCollisionGroup;
    if ( v6 )
    {
      if ( pkObject )
        NiCollisionGroup::RemoveCollidee(v6, pkObject);
      if ( pkGroundNode )
        NiCollisionGroup::AddCollidee(
          v3->m_kDecal.m_pkCollisionGroup,
          &v3->m_kDecal.m_spObTerrain.m_pObject->baseclass_0,
          0,
          -1,
          1);
    }
  }
}

//----- (00407E90) --------------------------------------------------------
void __thiscall CharCreateFrameWork::RenderShadow(CharCreateFrameWork *this)
{
  NsPgToonExtraData *v1; // edx@1
  bool v2; // al@1
  CharCreateFrameWork *v3; // ebx@1
  NiTListItem<NiPointer<Shadow> > *v4; // esi@1
  int v5; // eax@2
  Shadow *v6; // edi@3
  NiNode **v7; // ecx@4
  NiNode *v8; // eax@4
  Shadow *v9; // eax@7
  NiPoint3 kCharPos; // [sp+8h] [bp-18h]@4
  NsPgToonExtraData *pkToonExtraData; // [sp+14h] [bp-Ch]@1
  int i; // [sp+18h] [bp-8h]@2
  bool bOldToonFlag; // [sp+1Fh] [bp-1h]@1

  v1 = Engine3D::ms_spToonExtraData;
  v2 = Engine3D::ms_spToonExtraData->m_bOn;
  v3 = this;
  Engine3D::ms_spToonExtraData->m_bOn = 0;
  v4 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  pkToonExtraData = v1;
  bOldToonFlag = v2;
  if ( v4 )
  {
    v5 = 0;
    i = 0;
    if ( this->m_nMaxShadowObject )
    {
      do
      {
        v6 = v4->m_element.m_pObject;
        v4 = v4->m_pkNext;
        if ( v6 )
        {
          v7 = (NiNode **)(*(_DWORD *)&v3->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
          v8 = *v7;
          kCharPos.x = (*v7)->baseclass_0.m_kLocal.m_Translate.x;
          kCharPos.y = v8->baseclass_0.m_kLocal.m_Translate.y;
          kCharPos.z = v8->baseclass_0.m_kLocal.m_Translate.z;
          Shadow::Render(v6, *v7, &kCharPos);
          v1 = pkToonExtraData;
          v6->m_spNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
          v5 = i;
        }
        ++v5;
        i = v5;
      }
      while ( v5 < v3->m_nMaxShadowObject );
    }
    for ( ; v4; v9->m_spNode.m_pObject->baseclass_0.m_uFlags |= 1u )
    {
      v9 = v4->m_element.m_pObject;
      v4 = v4->m_pkNext;
    }
    v1->m_bOn = bOldToonFlag;
  }
}

//----- (00407F50) --------------------------------------------------------
void __thiscall CharCreateFrameWork::Update(CharCreateFrameWork *this, float fCurTime)
{
  CharCreateFrameWork *v2; // esi@1
  Net *v3; // ecx@1
  PgNet *v4; // ecx@3
  NiAVObject *v5; // ecx@5
  char *v6; // eax@9
  MsgBox *v7; // eax@9
  char *v8; // eax@10
  NiControllerSequence *v9; // eax@13
  Avatar *v10; // ecx@15
  PgMsg::Frame kMsg; // [sp+1Ch] [bp-18h]@11
  unsigned int v12; // [sp+30h] [bp-4h]@1
  int v13; // [sp+34h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spWorldMgrNet.m_pObject;
  if ( v3 )
    ((void (__cdecl *)(CharCreateFrameWork *, signed int))v3->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
  PgWinMgr::ProcessInput(&Pgg_kWinMgr, 1);
  PgWinMgr::DispatchMessageA(&Pgg_kWinMgr);
  PgWinMgr::UpdateWin(&Pgg_kWinMgr, fCurTime);
  CharCreateFrameWork::RenderShadow(v2);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  if ( v4 )
    PgNet::Flush(v4);
  v5 = (NiAVObject *)v2->m_spBackgroundScene.m_pObject;
  if ( v5 )
    NiAVObject::Update(v5, fCurTime, 1);
  if ( v2->m_spWorldMgrNet.m_pObject->baseclass_0.m_bCut )
  {
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    if ( g_kServer.m_bDoubleConnected == 1 )
    {
      v6 = TextData::Get(0x16526A50u);
      v7 = MsgBox::Modal(MSGBOX_OK, v6);
      g_kServer.m_bDoubleConnected = 0;
    }
    else
    {
      v8 = TextData::Get(0xCF16104Bu);
      v7 = MsgBox::Modal(MSGBOX_OK, v8);
    }
    kMsg.m_uiFrameMsg = 9;
    MsgBox::SetFrameWorkMsgOnClose(v7, &v2->baseclass_0, &kMsg, 0);
  }
  if ( v2->m_bIsAvatorActiveMotion )
  {
    v9 = Char::GetSequence(&v2->m_pkAvatar->baseclass_0, v2->m_uiAvatorActiveCode);
    if ( v9 )
    {
      if ( v9->m_fEndKeyTime <= (double)v9->m_fLastTime )
      {
        v10 = v2->m_pkAvatar;
        v2->m_bIsAvatorActiveMotion = 0;
        ((void (__cdecl *)(signed int, _DWORD, _DWORD))v10->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(
          102010,
          0,
          0);
      }
    }
  }
  if ( v2->m_bAutoTurn )
  {
    if ( v2->m_bTurnLeft )
      CharCreateFrameWork::TurnLeft(v2);
    else
      CharCreateFrameWork::TurnRight(v2);
  }
  if ( v2->m_bActStart )
  {
    v2->m_bActStart = 0;
    v2->m_fActStartTime = fCurTime;
  }
  if ( !v2->m_bActAniPlay && fCurTime - v2->m_fActStartTime > 0.800000011920929 )
  {
    CharMgr::UpdateAvatar(&g_kCharMgr, fCurTime);
    v2->m_bActAniPlay = 1;
  }
  if ( v2->m_bNormalStand )
    CharMgr::UpdateAvatar(&g_kCharMgr, fCurTime);
  if ( g_kSoundMgr.m_pkBGMGroup && !SoundGroupBgm::IsBGMPlaying(g_kSoundMgr.m_pkBGMGroup) )
  {
    SoundMgr::StopBGM(&g_kSoundMgr);
    SoundGroupBgm::SetFadeDurationTime(g_kSoundMgr.m_pkBGMGroup, 0.0);
    SoundMgr::PlayBGM(&g_kSoundMgr, "LoginBackground.mp3");
  }
  SoundMgr::Update(&g_kSoundMgr, fCurTime, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00408150) --------------------------------------------------------
void __thiscall CharCreateFrameWork::SetAvatarEquiq(CharCreateFrameWork *this, ChrClassType eClassType, int iMale)
{
  CharShape *v3; // esi@1
  ChrCreateEquip *v4; // eax@1
  ChrCreateEquip *v5; // edi@1
  ItemInfo *v6; // eax@1
  ItemInfo *v7; // eax@1
  ItemInfo *v8; // eax@1
  ItemInfo *v9; // eax@1
  ItemInfo *v10; // eax@1
  ItemInfo *v11; // eax@1

  v3 = &this->m_pkAvatar->baseclass_0.m_kCharShape;
  v4 = ChrCreateEquipTab::GetByIndex(eClassType, iMale);
  v5 = v4;
  v6 = ItemInfoTab::GetByInxName(v4->Equ_RightHand);
  CharShape::Equip(v3, v6);
  v7 = ItemInfoTab::GetByInxName(v5->Equ_LeftHand);
  CharShape::Equip(v3, v7);
  v8 = ItemInfoTab::GetByInxName(v5->Equ_Shoes);
  CharShape::Equip(v3, v8);
  v9 = ItemInfoTab::GetByInxName(v5->Equ_Head);
  CharShape::Equip(v3, v9);
  v10 = ItemInfoTab::GetByInxName(v5->Equ_Leg);
  CharShape::Equip(v3, v10);
  v11 = ItemInfoTab::GetByInxName(v5->Equ_Body);
  CharShape::Equip(v3, v11);
}

//----- (00408200) --------------------------------------------------------
void __thiscall CharCreateFrameWork::Refresh(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  Avatar *v2; // ecx@1
  Avatar *v3; // ecx@9
  ChrClassType v4; // [sp+10h] [bp-Ch]@2
  int v5; // [sp+14h] [bp-8h]@2

  v1 = this;
  v2 = this->m_pkAvatar;
  v1->m_bIsActiveMotion = 1;
  Avatar::ChangeClassShape(v2, &v1->m_kShapeData, 2u);
  switch ( v1->m_kClass )
  {
    case 1:
      v5 = v1->m_kGender;
      v4 = 0;
      goto LABEL_8;
    case 6:
      v5 = v1->m_kGender;
      v4 = 2;
      goto LABEL_8;
    case 0xB:
      v5 = v1->m_kGender;
      v4 = 1;
      goto LABEL_8;
    case 0x10:
      v5 = v1->m_kGender;
      v4 = 3;
      goto LABEL_8;
    case 0x15:
      v5 = v1->m_kGender;
      v4 = 4;
      goto LABEL_8;
    case 0x1A:
      v5 = v1->m_kGender;
      v4 = 5;
LABEL_8:
      CharCreateFrameWork::SetAvatarEquiq(v1, v4, v5);
      break;
    default:
      break;
  }
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spAvatarPos.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_pkCharNode,
    0);
  NiAVObject::UpdateProperties(&v1->m_spAvatarPos.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spAvatarPos.m_pObject->baseclass_0);
  NiAVObject::Update(&v1->m_spAvatarPos.m_pObject->baseclass_0, 0.0, 1);
  v3 = v1->m_pkAvatar;
  v1->m_uiAvatorActiveCode = 102020;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(102020, 0, 0);
  v1->m_bIsAvatorActiveMotion = 1;
  CharMgr::UpdateAvatar(&g_kCharMgr, Timer::ms_fCurTime);
  v1->m_bActStart = 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00408320) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ChangeAvatarClass(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  Avatar *v2; // eax@1
  int v3; // edi@3
  int v4; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
  {
    ((void (__stdcall *)(int *, NiNode *))this->m_spAvatarPos.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &v4,
      v2->baseclass_0.m_spScene.m_pObject);
    if ( v4 )
    {
      v3 = v4;
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    if ( Avatar::ChangeClassShape(v1->m_pkAvatar, &v1->m_kShapeData, 2u) )
      CharCreateFrameWork::Refresh(v1);
  }
}

//----- (00408390) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ChangeAvatarGender(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  Avatar *v2; // eax@1
  int v3; // edi@3
  int v4; // edi@6
  char v5; // ST04_1@7
  char v6; // ST00_1@7
  void *v7; // edi@10
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-20h]@7
  int v9; // [sp+10h] [bp-10h]@2
  int v10; // [sp+1Ch] [bp-4h]@7

  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
  {
    ((void (__stdcall *)(int *, NiNode *))this->m_spAvatarPos.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &v9,
      v2->baseclass_0.m_spScene.m_pObject);
    if ( v9 )
    {
      v3 = v9;
      if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    v4 = (int)&v1->m_kShapeData;
    if ( Avatar::ChangeGenderShape(v1->m_pkAvatar, &v1->m_kShapeData, 2u) )
    {
      *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      vecResult.baseclass_0._Mylast = 0;
      vecResult.baseclass_0._Myend = 0;
      v5 = *(_BYTE *)v4 >> 7;
      v6 = (*(_BYTE *)v4 >> 2) & 0x1F;
      v10 = 0;
      HairInfoTab::GetEquipableHairType(v6, v5, 0, &vecResult);
      if ( (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2 )
        v1->m_kShapeData.hairtype = **(_BYTE **)&vecResult;
      else
        v1->m_kShapeData.hairtype = 0;
      std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
        (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&vecResult,
        0);
      FaceInfoTab::GetEquipableFace(0, &vecResult);
      v7 = *(void **)&vecResult;
      if ( (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2 )
        v1->m_kShapeData.faceshape = **(_BYTE **)&vecResult;
      else
        v1->m_kShapeData.faceshape = 0;
      v1->m_kShapeData.haircolor = 0;
      CharCreateFrameWork::Refresh(v1);
      if ( v7 )
        operator delete(v7);
    }
  }
}

//----- (004084C0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::CreateOk(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // edi@1
  int v2; // eax@1
  CharCreateClassWin *v3; // ecx@1
  char *v4; // eax@1
  const char *v5; // esi@1
  int v6; // edx@3
  char v7; // cl@4
  char *v8; // eax@6
  char *v9; // eax@12
  char *v10; // eax@13

  v1 = this;
  CharCreateFrameWork::Refresh(this);
  v2 = User::GetEmptyAvatarSlot(&g_kUser);
  v3 = v1->m_pkCharCreateClassWin;
  v1->m_iCreateSlot = v2;
  v4 = CharCreateClassWin::GetAvatarCreateName(v3);
  v5 = v4;
  if ( v4 && *v4 )
  {
    v6 = (int)(v4 + 1);
    do
      v7 = *v4++;
    while ( v7 );
    if ( (unsigned int)&v4[-v6] >= 4 )
    {
      if ( IsSpecialCharInStr((char *)v5)
        || IsSpecialCharInStr2((char *)v5)
        || TextFilterTable::IsBadName((char *)v5)
        || IsPeculiarStr((char *)v5) )
      {
        v9 = TextData::Get(0x329D7E83u);
        MsgBox::Modal(MSGBOX_OK, v9);
      }
      else
      {
        Name5::operator_(&v1->m_kCreateName, v5);
        CharCreateFrameWork::NcAvatarCreateReq(v1);
        CharCreateClassWin::KillFocus(v1->m_pkCharCreateClassWin);
      }
    }
    else
    {
      v8 = TextData::Get(0xFAC40730u);
      MsgBox::Modal(MSGBOX_OK, v8);
    }
  }
  else
  {
    v10 = TextData::Get(0xEAF5E746u);
    MsgBox::Modal(MSGBOX_OK, v10);
  }
}

//----- (00408590) --------------------------------------------------------
int __cdecl std::char_traits<char>::compare(const char *_First1, const char *_First2, unsigned int _Count)
{
  const char *v3; // ecx@1
  const char *v4; // edx@1
  unsigned int v5; // esi@1
  signed int v6; // eax@5

  v3 = _First2;
  v4 = _First1;
  v5 = _Count;
  if ( _Count < 4 )
  {
LABEL_4:
    if ( !v5 )
      return 0;
  }
  else
  {
    while ( *(_DWORD *)v4 == *(_DWORD *)v3 )
    {
      v5 -= 4;
      v3 += 4;
      v4 += 4;
      if ( v5 < 4 )
        goto LABEL_4;
    }
  }
  v6 = (unsigned __int8)*v4 - (unsigned __int8)*v3;
  if ( *v4 != *v3 )
    return (v6 >> 31) | 1;
  if ( v5 <= 1 )
    return 0;
  v6 = (unsigned __int8)v4[1] - (unsigned __int8)v3[1];
  if ( v4[1] != v3[1] )
    return (v6 >> 31) | 1;
  if ( v5 <= 2 )
    return 0;
  v6 = (unsigned __int8)v4[2] - (unsigned __int8)v3[2];
  if ( v4[2] != v3[2] )
    return (v6 >> 31) | 1;
  if ( v5 > 3 )
  {
    v6 = (unsigned __int8)v4[3] - (unsigned __int8)v3[3];
    return (v6 >> 31) | 1;
  }
  return 0;
}

//----- (00408610) --------------------------------------------------------
void __thiscall Name5::operator_(Name5 *this, const char *nm)
{
  *(_QWORD *)&this->n5_name[12] = 0i64;
  *(_QWORD *)&this->n5_name[4] = 0i64;
  *(_DWORD *)&this->n5_name[0] = 0;
  strncpy(this->n5_name, (char *)nm, 0x14u);
}

//----- (00408640) --------------------------------------------------------
unsigned int __cdecl ITableBase<ChrCreateEquip_ChrCreateEquipTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A94358: using guessed type int ITableBase_ChrCreateEquip_ChrCreateEquipTab___ms_pkTable;

//----- (00408660) --------------------------------------------------------
char *__cdecl TextData::Get(unsigned int eTextID)
{
  int v1; // eax@1
  unsigned int v2; // eax@2
  void *v3; // eax@4
  void *v4; // edi@4
  char *result; // eax@5
  TextData::Node kNode; // [sp+8h] [bp-10h]@1

  kNode.pStr = &byte_9788EB;
  kNode.pStrVoice = &byte_9788EB;
  kNode.pStrSoundEffect = &byte_9788EB;
  kNode.dwEnumVal = eTextID;
  v1 = *(_DWORD *)(ITableBase<TextDataType_TextData>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = bsearch(&kNode, TextData::ms_apkNode, v2, 0x10u, TextDataNodeComp);
  v4 = v3;
  if ( v3 )
  {
    if ( strcmp(*((const char **)v3 + 2), "None") )
      SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v4 + 2));
    if ( strcmp(*((const char **)v4 + 3), "None") )
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v4 + 3));
    result = (char *)*((_DWORD *)v4 + 1);
  }
  else
  {
    result = &byte_9788EB;
  }
  return result;
}
// A94350: using guessed type int ITableBase_TextDataType_TextData___ms_pkTable;

//----- (00408740) --------------------------------------------------------
void __thiscall NsDecal::SetObjectTerrain(NsDecal *this, NiNode *_spTerrain)
{
  NsDecal *v2; // esi@1
  NiNode *v3; // edi@1
  NiCollisionGroup *v4; // ecx@8

  v2 = this;
  v3 = this->m_spObTerrain.m_pObject;
  if ( v3 != _spTerrain )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spObTerrain.m_pObject = _spTerrain;
    if ( _spTerrain )
      InterlockedIncrement((volatile LONG *)&_spTerrain->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v4 = v2->m_pkCollisionGroup;
  if ( v4 )
  {
    if ( v3 )
      NiCollisionGroup::RemoveCollidee(v4, &v3->baseclass_0);
    if ( _spTerrain )
      NiCollisionGroup::AddCollidee(v2->m_pkCollisionGroup, &v2->m_spObTerrain.m_pObject->baseclass_0, 0, -1, 1);
  }
}

//----- (004087C0) --------------------------------------------------------
int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, const char *_Ptr, unsigned int _Count)
{
  unsigned int v5; // eax@1
  unsigned int v6; // esi@3
  unsigned int v7; // eax@3
  unsigned int v8; // edx@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@8
  int result; // eax@10

  v5 = this->baseclass_0._Mysize;
  if ( v5 < _Off )
    std::_Xout_of_range("invalid string position");
  v6 = _N0;
  v7 = v5 - _Off;
  if ( v7 < _N0 )
    v6 = v7;
  v8 = v6;
  if ( v6 >= _Count )
    v8 = _Count;
  if ( this->baseclass_0._Myres < 0x10 )
    v9 = this;
  else
    v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
  result = std::char_traits<char>::compare((const char *)v9 + _Off, _Ptr, v8);
  if ( !result )
  {
    if ( v6 >= _Count )
      result = v6 != _Count;
    else
      result = -1;
  }
  return result;
}

//----- (00408830) --------------------------------------------------------
ChrCreateEquip *__cdecl ChrCreateEquipTab::GetByIndex(ChrClassType eClassType, int iMale)
{
  unsigned int v2; // esi@1
  ChrCreateEquip *result; // eax@2

  v2 = 0;
  if ( ITableBase<ChrCreateEquip_ChrCreateEquipTab>::GetTotal() )
  {
    while ( 1 )
    {
      result = (ChrCreateEquip *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable + 4),
                                   v2);
      if ( result->ChrClass == eClassType )
      {
        if ( result->IsMale == iMale )
          break;
      }
      ++v2;
      if ( v2 >= ITableBase<ChrCreateEquip_ChrCreateEquipTab>::GetTotal() )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A94358: using guessed type int ITableBase_ChrCreateEquip_ChrCreateEquipTab___ms_pkTable;

//----- (00408880) --------------------------------------------------------
int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@1

  v2 = _Right;
  if ( _Right->baseclass_0._Myres >= 0x10 )
    v2 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           this,
           0,
           this->baseclass_0._Mysize,
           v2->baseclass_0.___u0.baseclass_0.dummy,
           _Right->baseclass_0._Mysize);
}

//----- (004088B0) --------------------------------------------------------
unsigned int __thiscall stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::operator__(stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // ecx@2
  unsigned int v3; // edx@4
  int i; // eax@4
  int v5; // esi@5
  _ldiv_t v6; // qax@6

  if ( _Keyval->baseclass_0._Myres < 0x10 )
    v2 = _Keyval;
  else
    v2 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Keyval->baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (unsigned int)((char *)v2 + _Keyval->baseclass_0._Mysize);
  for ( i = -2128831035;
        v2 != (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v3;
        i = v5 ^ 16777619 * i )
  {
    v5 = v2->baseclass_0.___u0.baseclass_0.dummy[0];
    v2 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v2 + 1);
  }
  v6 = ldiv(i & 0x7FFFFFFF, 127773);
  return 16807 * v6.rem - 2836 * v6.quot + ((char)-(16807 * v6.rem - 2836 * v6.quot < 0) & 0x7FFFFFFF);
}

//----- (00408910) --------------------------------------------------------
bool __thiscall std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@1

  v3 = _Right;
  if ( _Right->baseclass_0._Myres >= 0x10 )
    v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           _Left,
           0,
           _Left->baseclass_0._Mysize,
           v3->baseclass_0.___u0.baseclass_0.dummy,
           _Right->baseclass_0._Mysize) < 0;
}

//----- (00408940) --------------------------------------------------------
void __cdecl FaceInfoTab::GetEquipableFace(char ucGrade, void *padwResult)
{
  int v2; // eax@1
  void *v3; // ebx@1
  void *v4; // esi@5
  void *v5; // eax@6
  unsigned int v6; // eax@8
  signed int v7; // edi@10
  int v8; // eax@12
  int v9; // eax@16
  unsigned int v10; // [sp+4h] [bp-4h]@2

  v2 = *(_DWORD *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 56);
  v3 = 0;
  if ( v2 )
    v10 = *(_DWORD *)(v2 + 40);
  else
    v10 = 0;
  if ( v10 > 0 )
  {
    v4 = padwResult;
    do
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4), (unsigned int)v3);
      if ( v5 && *((_BYTE *)v5 + 33) <= (unsigned __int8)ucGrade )
      {
        v6 = *((_DWORD *)v4 + 1);
        padwResult = v3;
        if ( (unsigned int)&padwResult >= v6 || *(_DWORD *)v4 > (unsigned int)&padwResult )
        {
          if ( v6 == *((_DWORD *)v4 + 2) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v4,
              1u);
          v9 = *((_DWORD *)v4 + 1);
          if ( v9 )
            *(_DWORD *)v9 = v3;
        }
        else
        {
          v7 = (signed int)((char *)&padwResult - *(_DWORD *)v4) >> 2;
          if ( v6 == *((_DWORD *)v4 + 2) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v4,
              1u);
          v8 = *((_DWORD *)v4 + 1);
          if ( v8 )
            *(_DWORD *)v8 = *(_DWORD *)(*(_DWORD *)v4 + 4 * v7);
        }
        *((_DWORD *)v4 + 1) += 4;
      }
      v3 = (char *)v3 + 1;
    }
    while ( (unsigned int)v3 < v10 );
  }
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;

//----- (004089F0) --------------------------------------------------------
void __cdecl HairInfoTab::GetEquipableHairType(char kClassID, char ucGender, char ucUsableGrade, void *padwResult)
{
  char v4; // al@2
  int v5; // ecx@9
  unsigned int v6; // esi@9
  unsigned int v7; // ecx@10
  char v8; // bl@14
  unsigned int v9; // edi@14
  void *v10; // eax@15
  int v11; // ecx@15
  char v12; // bl@25
  unsigned int v13; // edi@25
  void *v14; // eax@26
  int v15; // ecx@26
  char v16; // bl@36
  unsigned int v17; // edi@36
  void *v18; // eax@37
  int v19; // ecx@37
  char v20; // bl@47
  unsigned int v21; // edi@47
  void *v22; // eax@48
  int v23; // ecx@48
  char v24; // bl@58
  unsigned int v25; // edi@58
  void *v26; // eax@59
  int v27; // ecx@59
  void *v28; // edi@69
  char v29; // bl@69
  void *v30; // eax@70
  int v31; // ecx@70

  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v4 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v4 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v4 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v4 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v4 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v4 = 26;
      break;
    default:
      v4 = 0;
      break;
  }
  v5 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
  v6 = 0;
  if ( v5 )
  {
    v7 = *(_DWORD *)(v5 + 40);
    *(_DWORD *)&kClassID = v7;
  }
  else
  {
    *(_DWORD *)&kClassID = 0;
    v7 = 0;
  }
  switch ( v4 )
  {
    case 1:
      if ( v7 > 0 )
      {
        v8 = ucGender;
        v9 = kClassID;
        do
        {
          v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v6);
          v11 = *(_DWORD *)((char *)v10 + 66);
          if ( v11 == 3 || v11 == 1 && v8 == 1 || v11 == 2 && !v8 )
          {
            if ( *((_BYTE *)v10 + 65) <= (unsigned __int8)ucUsableGrade )
            {
              *(_DWORD *)&kClassID = v6;
              std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
                (const unsigned int *)&kClassID);
            }
          }
          ++v6;
        }
        while ( v6 < v9 );
      }
      break;
    case 6:
      if ( v7 > 0 )
      {
        v12 = ucGender;
        v13 = kClassID;
        do
        {
          v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v6);
          v15 = *(_DWORD *)((char *)v14 + 74);
          if ( (v15 == 3 || v15 == 1 && v12 == 1 || v15 == 2 && !v12)
            && *((_BYTE *)v14 + 65) <= (unsigned __int8)ucUsableGrade )
          {
            *(_DWORD *)&kClassID = v6;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
              (const unsigned int *)&kClassID);
          }
          ++v6;
        }
        while ( v6 < v13 );
      }
      break;
    case 0xB:
      if ( v7 > 0 )
      {
        v16 = ucGender;
        v17 = kClassID;
        do
        {
          v18 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v6);
          v19 = *(_DWORD *)((char *)v18 + 70);
          if ( (v19 == 3 || v19 == 1 && v16 == 1 || v19 == 2 && !v16)
            && *((_BYTE *)v18 + 65) <= (unsigned __int8)ucUsableGrade )
          {
            *(_DWORD *)&kClassID = v6;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
              (const unsigned int *)&kClassID);
          }
          ++v6;
        }
        while ( v6 < v17 );
      }
      break;
    case 0x10:
      if ( v7 > 0 )
      {
        v20 = ucGender;
        v21 = kClassID;
        do
        {
          v22 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v6);
          v23 = *(_DWORD *)((char *)v22 + 78);
          if ( (v23 == 3 || v23 == 1 && v20 == 1 || v23 == 2 && !v20)
            && *((_BYTE *)v22 + 65) <= (unsigned __int8)ucUsableGrade )
          {
            *(_DWORD *)&kClassID = v6;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
              (const unsigned int *)&kClassID);
          }
          ++v6;
        }
        while ( v6 < v21 );
      }
      break;
    case 0x15:
      if ( v7 > 0 )
      {
        v24 = ucGender;
        v25 = kClassID;
        do
        {
          v26 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v6);
          v27 = *(_DWORD *)((char *)v26 + 78);
          if ( (v27 == 3 || v27 == 1 && v24 == 1 || v27 == 2 && !v24)
            && *((_BYTE *)v26 + 65) <= (unsigned __int8)ucUsableGrade )
          {
            *(_DWORD *)&kClassID = v6;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
              (const unsigned int *)&kClassID);
          }
          ++v6;
        }
        while ( v6 < v25 );
      }
      break;
    case 0x1A:
      if ( v7 > 0 )
      {
        v28 = padwResult;
        v29 = ucGender;
        do
        {
          v30 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v6);
          v31 = *(_DWORD *)((char *)v30 + 86);
          if ( (v31 == 3 || v31 == 1 && v29 == 1 || v31 == 2 && !v29)
            && *((_BYTE *)v30 + 65) <= (unsigned __int8)ucUsableGrade )
          {
            padwResult = (void *)v6;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)v28,
              (const unsigned int *)&padwResult);
          }
          ++v6;
        }
        while ( v6 < kClassID );
      }
      break;
    default:
      return;
  }
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;

//----- (00408D30) --------------------------------------------------------
ItemInfo *__cdecl ItemInfoTab::GetByInxName(char *pcInxName)
{
  ItemInfo *v1; // eax@6
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > result; // [sp+0h] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+4h] [bp-2Ch]@3
  unsigned int v4; // [sp+20h] [bp-10h]@1
  int v5; // [sp+2Ch] [bp-4h]@3
  int v6; // [sp+30h] [bp+0h]@1

  v4 = (unsigned int)&v6 ^ __security_cookie;
  if ( !pcInxName || !*pcInxName )
    goto LABEL_10;
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, pcInxName, strlen(pcInxName));
  v5 = 0;
  std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(
    &ItemInfoTab::m_ItemInfoMapByInxName,
    &result,
    &this);
  if ( this.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( result != *(_DWORD *)&stru_AA4F54 )
    v1 = *(ItemInfo **)(*(_DWORD *)&result + 36);
  else
LABEL_10:
    v1 = 0;
  return v1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00408E00) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdSexL(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  PROTO_AVATAR_SHAPE_INFO *v2; // eax@1

  v1 = this;
  v2 = this->m_pkShapeData;
  if ( v2->_bf0 & 0x80 )
    v2->_bf0 &= 0x7Fu;
  else
    v2->_bf0 |= 0x80u;
  CharCreateFrameWork::ChangeAvatarGender((CharCreateFrameWork *)this->baseclass_0.m_pkFrameWork);
  v1->m_nFaceTypeIndex = 0;
  v1->m_nHairColorIndex = 0;
  v1->m_nHairTypeIndex = 0;
}

//----- (00408E40) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdSexR(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  PROTO_AVATAR_SHAPE_INFO *v2; // eax@1

  v1 = this;
  v2 = this->m_pkShapeData;
  if ( v2->_bf0 & 0x80 )
    v2->_bf0 &= 0x7Fu;
  else
    v2->_bf0 |= 0x80u;
  CharCreateFrameWork::ChangeAvatarGender((CharCreateFrameWork *)this->baseclass_0.m_pkFrameWork);
  v1->m_nFaceTypeIndex = 0;
  v1->m_nHairColorIndex = 0;
  v1->m_nHairTypeIndex = 0;
}

//----- (00408E80) --------------------------------------------------------
void __thiscall CharCreateInfoWin::_CharCreateInfoWin(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateInfoWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_pkText,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkBtn,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9790DC: using guessed type int (__stdcall *CharCreateInfoWin___vftable_)(int uiFlags);
// 9790FC: using guessed type int (__thiscall *CharCreateInfoWin___vftable_)(void *p, char);

//----- (00408F10) --------------------------------------------------------
bool __thiscall CharCreateInfoWin::Create(CharCreateInfoWin *this, PROTO_AVATAR_SHAPE_INFO *pkShapeInfo, PgFrameWork *pkFrameWork)
{
  CharCreateInfoWin *v3; // esi@1
  NiTexturePalette *v4; // edi@2
  char *v5; // eax@4
  PROTO_AVATAR_SHAPE_INFO *v6; // eax@4
  PROTO_AVATAR_SHAPE_INFO *v7; // esi@8
  bool result; // al@11
  PgSprData *v9; // eax@12
  PROTO_AVATAR_SHAPE_INFO *v10; // esi@13
  PgWinBut *v11; // eax@18
  PgWinBut *v12; // eax@18
  PgWinBut *v13; // eax@18
  PgWinBut *v14; // eax@18
  PgWinBut *v15; // eax@18
  PgWinBut *v16; // eax@18
  PgWinBut *v17; // eax@18
  PgWinBut *v18; // eax@18
  D3DXCOLOR v19; // ST0C_16@18
  PgWin *v20; // eax@18
  PgWinText *v21; // eax@18
  D3DXCOLOR v22; // ST0C_16@18
  PgWin *v23; // eax@18
  PgWinText *v24; // eax@18
  D3DXCOLOR v25; // ST0C_16@18
  PgWin *v26; // eax@18
  PgWinText *v27; // eax@18
  D3DXCOLOR v28; // ST0C_16@18
  PgWin *v29; // eax@18
  PgWinText *v30; // eax@18
  PROTO_AVATAR_SHAPE_INFO *v31; // esi@19
  UIUtil ui; // [sp+14h] [bp-28h]@18
  int iLeft; // [sp+28h] [bp-14h]@12
  int iTop; // [sp+2Ch] [bp-10h]@12
  int v35; // [sp+38h] [bp-4h]@2

  v3 = this;
  if ( !pkShapeInfo )
    return 0;
  this->m_pkShapeData = pkShapeInfo;
  pkShapeInfo = 0;
  v4 = dword_B70448;
  v35 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "charcreate\\CreatCharInfo.nif");
  PgUtil::LoadNodeNifFile(v5, (NiPointer<NiNode> *)&pkShapeInfo, v4);
  v6 = pkShapeInfo;
  if ( !pkShapeInfo )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("CreatCharInfo load fail", "LoadFail", pkShapeInfo);
      v6 = pkShapeInfo;
    }
    v35 = -1;
    if ( v6 )
    {
      v7 = v6;
      if ( !InterlockedDecrement((volatile LONG *)&v6[1]._bf0) )
      {
        if ( v7 )
          (**(void (__thiscall ***)(PROTO_AVATAR_SHAPE_INFO *, signed int))&v7->_bf0)(v7, 1);
      }
    }
    return 0;
  }
  v9 = PgSprData::Create((NiAVObject *)pkShapeInfo, "Plane", &iLeft, &iTop, 0);
  if ( PgWinFrame::Create(&v3->baseclass_0, 0, 0, v9, 0, pkFrameWork, "CharCreateInfoWin", 0) )
  {
    UIUtil::UIUtil(&ui);
    LOBYTE(v35) = 1;
    UIUtil::SetParent(&ui, &v3->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, iLeft, iTop);
    UIUtil::SetUIGeom(&ui, (NiAVObject *)pkShapeInfo);
    v11 = UIUtil::CreateButton(&ui, 0, "FaceArrowL", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v3->m_pkBtn, (NiD3DDefaultShader *)v11);
    v12 = UIUtil::CreateButton(&ui, 1u, "FaceArrowR", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkBtn[1], (NiD3DDefaultShader *)v12);
    v13 = UIUtil::CreateButton(&ui, 2u, "HairArrowL", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkBtn[4], (NiD3DDefaultShader *)v13);
    v14 = UIUtil::CreateButton(&ui, 3u, "HairArrowR", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkBtn[5], (NiD3DDefaultShader *)v14);
    v15 = UIUtil::CreateButton(&ui, 4u, "ColorArrowL", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkBtn[6], (NiD3DDefaultShader *)v15);
    v16 = UIUtil::CreateButton(&ui, 5u, "ColorArrowR", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkBtn[7], (NiD3DDefaultShader *)v16);
    v17 = UIUtil::CreateButton(&ui, 6u, "GenderArrowL", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkBtn[2], (NiD3DDefaultShader *)v17);
    v18 = UIUtil::CreateButton(&ui, 7u, "GenderArrowR", 0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkBtn[3], (NiD3DDefaultShader *)v18);
    UIUtil::CreateSpr(&ui, "Plane01", 0);
    *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v20 = (PgWin *)UIUtil::CreateSpr(&ui, "Face", 0);
    v21 = UIUtil::CreateAttachedText(&ui, v20, "-", COERCE_D3DXCOLOR(v19.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v3->m_pkText, (NiD3DDefaultShader *)v21);
    *(_QWORD *)&v22.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v22.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v23 = (PgWin *)UIUtil::CreateSpr(&ui, "Color", 0);
    v24 = UIUtil::CreateAttachedText(&ui, v23, "-", COERCE_D3DXCOLOR(v22.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkText[2], (NiD3DDefaultShader *)v24);
    *(_QWORD *)&v25.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v25.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v26 = (PgWin *)UIUtil::CreateSpr(&ui, "Hair", 0);
    v27 = UIUtil::CreateAttachedText(&ui, v26, "-", COERCE_D3DXCOLOR(v25.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkText[1], (NiD3DDefaultShader *)v27);
    *(_QWORD *)&v28.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v28.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v29 = (PgWin *)UIUtil::CreateSpr(&ui, "Gender", 0);
    v30 = UIUtil::CreateAttachedText(&ui, v29, "-", COERCE_D3DXCOLOR(v28.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkText[3], (NiD3DDefaultShader *)v30);
    ((void (__thiscall *)(CharCreateInfoWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v3,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.2,
      0.5);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v3,
      0);
    LOBYTE(v35) = 0;
    UIUtil::_UIUtil(&ui);
    v35 = -1;
    if ( pkShapeInfo )
    {
      v31 = pkShapeInfo;
      if ( !InterlockedDecrement((volatile LONG *)&pkShapeInfo[1]._bf0) )
      {
        if ( v31 )
          (**(void (__thiscall ***)(PROTO_AVATAR_SHAPE_INFO *, signed int))&v31->_bf0)(v31, 1);
      }
    }
    result = 1;
  }
  else
  {
    v10 = pkShapeInfo;
    v35 = -1;
    if ( pkShapeInfo && !InterlockedDecrement((volatile LONG *)&pkShapeInfo[1]._bf0) && v10 )
      (**(void (__thiscall ***)(PROTO_AVATAR_SHAPE_INFO *, signed int))&v10->_bf0)(v10, 1);
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00409380) --------------------------------------------------------
void __thiscall CharCreateInfoWin::CharCreateInfoWin(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateInfoWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_pkBtn,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_pkText,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_pkShapeData = 0;
  v1->m_nHairTypeIndex = 0;
  v1->m_nHairColorIndex = 0;
  v1->m_nFaceTypeIndex = 0;
}
// 9790DC: using guessed type int (__stdcall *CharCreateInfoWin___vftable_)(int uiFlags);
// 9790FC: using guessed type int (__thiscall *CharCreateInfoWin___vftable_)(void *p, char);

//----- (00409430) --------------------------------------------------------
void __thiscall CharCreateInfoWin::UpdateMeWin(CharCreateInfoWin *this, float fCurTime)
{
  CharCreateInfoWin *v2; // esi@1
  void *v3; // eax@1
  int v4; // eax@3
  unsigned int v5; // ebx@4
  unsigned int v6; // edi@6
  void *v7; // eax@7
  void *v8; // eax@11
  char v9; // [sp+4h] [bp-4h]@3

  v2 = this;
  apcSexText[0] = TextData::Get(0xA5A096A3u);
  apcSexText[1] = TextData::Get(0x4D5F9795u);
  ((void (__stdcall *)(char *))v2->m_pkText[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(apcSexText[(unsigned int)v2->m_pkShapeData->_bf0 >> 7]);
  v3 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4),
         v2->m_pkShapeData->faceshape);
  if ( v3 )
    ((void (__stdcall *)(char *))v2->m_pkText[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)v3 + 1);
  v4 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
  v9 = v2->m_pkShapeData->hairtype;
  if ( v4 )
    v5 = *(_DWORD *)(v4 + 40);
  else
    v5 = 0;
  v6 = 0;
  if ( v5 )
  {
    while ( 1 )
    {
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v6);
      if ( *(_BYTE *)v7 == v9 )
        break;
      ++v6;
      if ( v6 >= v5 )
        goto LABEL_11;
    }
    ((void (__stdcall *)(char *))v2->m_pkText[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)v7 + 33);
  }
LABEL_11:
  v8 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
         v2->m_pkShapeData->haircolor);
  if ( v8 )
    ((void (__stdcall *)(char *))v2->m_pkText[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)v8 + 16);
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (00409540) --------------------------------------------------------
CharCreateInfoWin *__cdecl CharCreateInfoWin::CreateWin(PROTO_AVATAR_SHAPE_INFO *pkShapeInfo, PgFrameWork *pkFrameWork)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  CharCreateInfoWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x198u);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    CharCreateInfoWin::CharCreateInfoWin((CharCreateInfoWin *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PROTO_AVATAR_SHAPE_INFO *, PgFrameWork *))(*(_DWORD *)v4 + 540))(
                          v4,
                          pkShapeInfo,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (CharCreateInfoWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}

//----- (00409670) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdFaceL(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  void *v2; // edi@1
  signed int v3; // eax@1
  PROTO_AVATAR_SHAPE_INFO *v4; // ecx@2
  int v5; // ecx@3
  int v6; // ecx@6
  PROTO_AVATAR_SHAPE_INFO *v7; // edx@8
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-1Ch]@1
  int v9; // [sp+18h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v9 = 0;
  FaceInfoTab::GetEquipableFace(0, &vecResult);
  v2 = *(void **)&vecResult;
  v3 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
  if ( v3 )
  {
    v5 = v1->m_nFaceTypeIndex;
    if ( v5 )
      v1->m_nFaceTypeIndex = v5 - 1;
    else
      v1->m_nFaceTypeIndex = v3 - 1;
    v6 = v1->m_nFaceTypeIndex;
    if ( v6 >= v3 )
    {
      v7 = v1->m_pkShapeData;
      v1->m_nFaceTypeIndex = 0;
      v7->faceshape = *(_BYTE *)v2;
    }
    else
    {
      v1->m_pkShapeData->faceshape = *((_BYTE *)v2 + 4 * v6);
    }
  }
  else
  {
    v4 = v1->m_pkShapeData;
    v1->m_nFaceTypeIndex = 0;
    v4->faceshape = 0;
  }
  CharCreateFrameWork::ChangeAvatarFace((CharCreateFrameWork *)v1->baseclass_0.m_pkFrameWork);
  if ( v2 )
    operator delete(v2);
}

//----- (00409750) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdFaceR(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  void *v2; // edi@1
  signed int v3; // eax@1
  PROTO_AVATAR_SHAPE_INFO *v4; // ecx@2
  int v5; // ecx@3
  int v6; // ecx@6
  PROTO_AVATAR_SHAPE_INFO *v7; // edx@8
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-1Ch]@1
  int v9; // [sp+18h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v9 = 0;
  FaceInfoTab::GetEquipableFace(0, &vecResult);
  v2 = *(void **)&vecResult;
  v3 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
  if ( v3 )
  {
    v5 = v1->m_nFaceTypeIndex;
    if ( v5 == v3 - 1 )
      v1->m_nFaceTypeIndex = 0;
    else
      v1->m_nFaceTypeIndex = v5 + 1;
    v6 = v1->m_nFaceTypeIndex;
    if ( v6 >= v3 )
    {
      v7 = v1->m_pkShapeData;
      v1->m_nFaceTypeIndex = 0;
      v7->faceshape = *(_BYTE *)v2;
    }
    else
    {
      v1->m_pkShapeData->faceshape = *((_BYTE *)v2 + 4 * v6);
    }
  }
  else
  {
    v4 = v1->m_pkShapeData;
    v1->m_nFaceTypeIndex = 0;
    v4->faceshape = 0;
  }
  CharCreateFrameWork::ChangeAvatarFace((CharCreateFrameWork *)v1->baseclass_0.m_pkFrameWork);
  if ( v2 )
    operator delete(v2);
}

//----- (00409830) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdHairL(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  unsigned __int8 v2; // al@1
  void *v3; // edi@1
  signed int v4; // eax@1
  PROTO_AVATAR_SHAPE_INFO *v5; // eax@2
  int v6; // ecx@3
  int v7; // ecx@4
  PROTO_AVATAR_SHAPE_INFO *v8; // ecx@8
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-1Ch]@1
  int v10; // [sp+18h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v2 = this->m_pkShapeData->_bf0;
  v10 = 0;
  HairInfoTab::GetEquipableHairType((v2 >> 2) & 0x1F, v2 >> 7, 0, &vecResult);
  v3 = *(void **)&vecResult;
  v4 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
  if ( v4 )
  {
    v6 = v1->m_nHairTypeIndex;
    if ( v6 )
      v7 = v6 - 1;
    else
      v7 = v4 - 1;
    v1->m_nHairTypeIndex = v7;
    if ( v7 >= v4 )
    {
      v8 = v1->m_pkShapeData;
      v1->m_nHairTypeIndex = 0;
      v8->hairtype = *(_BYTE *)v3;
    }
    else
    {
      v1->m_pkShapeData->hairtype = *((_BYTE *)v3 + 4 * v7);
    }
  }
  else
  {
    v5 = v1->m_pkShapeData;
    v1->m_nHairTypeIndex = 0;
    v5->hairtype = 0;
  }
  CharCreateFrameWork::ChangeAvatarHair((CharCreateFrameWork *)v1->baseclass_0.m_pkFrameWork);
  if ( v3 )
    operator delete(v3);
}

//----- (00409920) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdHairR(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  unsigned __int8 v2; // al@1
  void *v3; // edi@1
  signed int v4; // eax@1
  PROTO_AVATAR_SHAPE_INFO *v5; // eax@2
  int v6; // ecx@3
  int v7; // ecx@6
  PROTO_AVATAR_SHAPE_INFO *v8; // edx@8
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-1Ch]@1
  int v10; // [sp+18h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v2 = this->m_pkShapeData->_bf0;
  v10 = 0;
  HairInfoTab::GetEquipableHairType((v2 >> 2) & 0x1F, v2 >> 7, 0, &vecResult);
  v3 = *(void **)&vecResult;
  v4 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
  if ( v4 )
  {
    v6 = v1->m_nHairTypeIndex;
    if ( v6 == v4 - 1 )
      v1->m_nHairTypeIndex = 0;
    else
      v1->m_nHairTypeIndex = v6 + 1;
    v7 = v1->m_nHairTypeIndex;
    if ( v7 >= v4 )
    {
      v8 = v1->m_pkShapeData;
      v1->m_nHairTypeIndex = 0;
      v8->hairtype = *(_BYTE *)v3;
    }
    else
    {
      v1->m_pkShapeData->hairtype = *((_BYTE *)v3 + 4 * v7);
    }
  }
  else
  {
    v5 = v1->m_pkShapeData;
    v1->m_nHairTypeIndex = 0;
    v5->hairtype = 0;
  }
  CharCreateFrameWork::ChangeAvatarHair((CharCreateFrameWork *)v1->baseclass_0.m_pkFrameWork);
  if ( v3 )
    operator delete(v3);
}

//----- (00409A10) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdColorL(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  void *v2; // edi@1
  signed int v3; // eax@1
  PROTO_AVATAR_SHAPE_INFO *v4; // ecx@2
  int v5; // ecx@3
  int v6; // ecx@6
  PROTO_AVATAR_SHAPE_INFO *v7; // edx@8
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-1Ch]@1
  int v9; // [sp+18h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v9 = 0;
  HairColorInfoTab::GetEquipableHairColor(0, &vecResult);
  v2 = *(void **)&vecResult;
  v3 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
  if ( v3 )
  {
    v5 = v1->m_nHairColorIndex;
    if ( v5 )
      v1->m_nHairColorIndex = v5 - 1;
    else
      v1->m_nHairColorIndex = v3 - 1;
    v6 = v1->m_nHairColorIndex;
    if ( v6 >= v3 )
    {
      v7 = v1->m_pkShapeData;
      v1->m_nHairColorIndex = 0;
      v7->haircolor = *(_BYTE *)v2;
    }
    else
    {
      v1->m_pkShapeData->haircolor = *((_BYTE *)v2 + 4 * v6);
    }
  }
  else
  {
    v4 = v1->m_pkShapeData;
    v1->m_nHairColorIndex = 0;
    v4->haircolor = 0;
  }
  CharCreateFrameWork::ChangeAvatarHairColor((CharCreateFrameWork *)v1->baseclass_0.m_pkFrameWork);
  if ( v2 )
    operator delete(v2);
}

//----- (00409AF0) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCmdColorR(CharCreateInfoWin *this)
{
  CharCreateInfoWin *v1; // esi@1
  void *v2; // edi@1
  signed int v3; // eax@1
  PROTO_AVATAR_SHAPE_INFO *v4; // ecx@2
  int v5; // ecx@3
  int v6; // ecx@6
  PROTO_AVATAR_SHAPE_INFO *v7; // edx@8
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-1Ch]@1
  int v9; // [sp+18h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v9 = 0;
  HairColorInfoTab::GetEquipableHairColor(0, &vecResult);
  v2 = *(void **)&vecResult;
  v3 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
  if ( v3 )
  {
    v5 = v1->m_nHairColorIndex;
    if ( v5 == v3 - 1 )
      v1->m_nHairColorIndex = 0;
    else
      v1->m_nHairColorIndex = v5 + 1;
    v6 = v1->m_nHairColorIndex;
    if ( v6 >= v3 )
    {
      v7 = v1->m_pkShapeData;
      v1->m_nHairColorIndex = 0;
      v7->haircolor = *(_BYTE *)v2;
    }
    else
    {
      v1->m_pkShapeData->haircolor = *((_BYTE *)v2 + 4 * v6);
    }
  }
  else
  {
    v4 = v1->m_pkShapeData;
    v1->m_nHairColorIndex = 0;
    v4->haircolor = 0;
  }
  CharCreateFrameWork::ChangeAvatarHairColor((CharCreateFrameWork *)v1->baseclass_0.m_pkFrameWork);
  if ( v2 )
    operator delete(v2);
}

//----- (00409BD0) --------------------------------------------------------
void __thiscall CharCreateInfoWin::OnCommand(CharCreateInfoWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 6u:
      CharCreateInfoWin::OnCmdSexL(this);
      break;
    case 7u:
      CharCreateInfoWin::OnCmdSexR(this);
      break;
    case 0u:
      CharCreateInfoWin::OnCmdFaceL(this);
      break;
    case 1u:
      CharCreateInfoWin::OnCmdFaceR(this);
      break;
    case 2u:
      CharCreateInfoWin::OnCmdHairL(this);
      break;
    case 3u:
      CharCreateInfoWin::OnCmdHairR(this);
      break;
    case 4u:
      CharCreateInfoWin::OnCmdColorL(this);
      break;
    case 5u:
      CharCreateInfoWin::OnCmdColorR(this);
      break;
    default:
      return;
  }
}

//----- (00409C50) --------------------------------------------------------
HairInfo *__cdecl HairInfoTab::GetHairInfo(char byHairID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  HairInfo *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (HairInfo *)CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v3);
      if ( result->ID == byHairID )
        break;
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;

//----- (00409CA0) --------------------------------------------------------
void *__thiscall CharCreateInfoWin::_vector_deleting_destructor_(CharCreateInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharCreateInfoWin::_CharCreateInfoWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00409CD0) --------------------------------------------------------
void __cdecl HairColorInfoTab::GetEquipableHairColor(char ucGrade, void *padwResult)
{
  int v2; // eax@1
  void *v3; // ebx@1
  void *v4; // esi@5
  void *v5; // eax@6
  unsigned int v6; // eax@8
  signed int v7; // edi@10
  int v8; // eax@12
  int v9; // eax@16
  unsigned int v10; // [sp+4h] [bp-4h]@2

  v2 = *(_DWORD *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 56);
  v3 = 0;
  if ( v2 )
    v10 = *(_DWORD *)(v2 + 40);
  else
    v10 = 0;
  if ( v10 > 0 )
  {
    v4 = padwResult;
    do
    {
      v5 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
             (unsigned int)v3);
      if ( v5 && *((_BYTE *)v5 + 61) <= (unsigned __int8)ucGrade )
      {
        v6 = *((_DWORD *)v4 + 1);
        padwResult = v3;
        if ( (unsigned int)&padwResult >= v6 || *(_DWORD *)v4 > (unsigned int)&padwResult )
        {
          if ( v6 == *((_DWORD *)v4 + 2) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v4,
              1u);
          v9 = *((_DWORD *)v4 + 1);
          if ( v9 )
            *(_DWORD *)v9 = v3;
        }
        else
        {
          v7 = (signed int)((char *)&padwResult - *(_DWORD *)v4) >> 2;
          if ( v6 == *((_DWORD *)v4 + 2) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v4,
              1u);
          v8 = *((_DWORD *)v4 + 1);
          if ( v8 )
            *(_DWORD *)v8 = *(_DWORD *)(*(_DWORD *)v4 + 4 * v7);
        }
        *((_DWORD *)v4 + 1) += 4;
      }
      v3 = (char *)v3 + 1;
    }
    while ( (unsigned int)v3 < v10 );
  }
}
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (00409D80) --------------------------------------------------------
NiRTTI *__thiscall NiProperty::GetRTTI(NiProperty *this)
{
  return &NiProperty::m_RTTI;
}

//----- (00409D90) --------------------------------------------------------
void __thiscall NiLight::SetAmbientColor(NiLight *this, NiColor *color)
{
  float v2; // eax@1

  this->m_kAmb.r = color->r;
  this->m_kAmb.g = color->g;
  v2 = color->b;
  ++this->baseclass_0.m_uiRevID;
  this->m_kAmb.b = v2;
}

//----- (00409DC0) --------------------------------------------------------
void __thiscall NiLight::SetDiffuseColor(NiLight *this, NiColor *color)
{
  float v2; // eax@1

  this->m_kDiff.r = color->r;
  this->m_kDiff.g = color->g;
  v2 = color->b;
  ++this->baseclass_0.m_uiRevID;
  this->m_kDiff.b = v2;
}

//----- (00409DF0) --------------------------------------------------------
void __thiscall NiLight::SetSpecularColor(NiLight *this, NiColor *color)
{
  float v2; // eax@1

  this->m_kSpec.r = color->r;
  this->m_kSpec.g = color->g;
  v2 = color->b;
  ++this->baseclass_0.m_uiRevID;
  this->m_kSpec.b = v2;
}

//----- (00409E20) --------------------------------------------------------
void __thiscall NiAlphaProperty::SetBit(NiAlphaProperty *this, bool bVal, unsigned __int16 uMask)
{
  if ( bVal )
    this->m_uFlags |= uMask;
  else
    this->m_uFlags &= ~uMask;
}

//----- (00409E50) --------------------------------------------------------
void __thiscall NiVertexColorProperty::NiVertexColorProperty(NiVertexColorProperty *this)
{
  NiVertexColorProperty *v1; // esi@1

  v1 = this;
  NiObjectNET::NiObjectNET(&this->baseclass_0.baseclass_0);
  v1->m_uFlags = 0;
  v1->m_eSource = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiVertexColorProperty::_vftable_;
  v1->m_eLighting = 1;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (00409E80) --------------------------------------------------------
NiRTTI *__thiscall NiVertexColorProperty::GetRTTI(NiVertexColorProperty *this)
{
  return &NiVertexColorProperty::m_RTTI;
}

//----- (00409E90) --------------------------------------------------------
int __thiscall NiVertexColorProperty::Type(NiVertexColorProperty *this)
{
  return 9;
}

//----- (00409EB0) --------------------------------------------------------
void __thiscall IDirectMessenger::SendDirectMessage(IDirectMessenger *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  IDirectMessenger *v4; // esi@1

  v4 = this;
  if ( this->m_pkMsgHooker )
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->m_pkMsgHooker->vfptr->DirectMessage)(iMsgTag, pvBody, pkFrom);
  v4->vfptr->DirectMessage(v4, iMsgTag, pvBody, pkFrom);
}

//----- (00409EF0) --------------------------------------------------------
bool __thiscall PgFrameWork::Init(PgFrameWork *this, PgMsg::Frame *pkFrameMsg)
{
  bool result; // al@1

  result = 1;
  this->m_bInit = 1;
  return result;
}

//----- (00409F00) --------------------------------------------------------
void __thiscall PgFrameWork::Terminate(PgFrameWork *this)
{
  this->m_bInit = 0;
  this->m_BackFrameID = 0;
}

//----- (00409F10) --------------------------------------------------------
PgWinMgr::PgWinMsg *__thiscall PgTQueue<PgWinMgr::PgWinMsg>::Remove(PgTQueue<PgWinMgr::PgWinMsg> *this, PgWinMgr::PgWinMsg *result)
{
  PgWinMgr::PgWinMsg *v2; // eax@1
  unsigned int v3; // esi@1
  PgWinMgr::PgWinMsg *v4; // edx@1
  unsigned int v5; // edi@1
  int v6; // edx@1

  v2 = result;
  v3 = this->m_uiHead;
  v4 = &this->m_pBase[this->m_uiHead];
  result->m_pkWin = v4->m_pkWin;
  result->m_Msg = v4->m_Msg;
  v5 = v4->m_wParam;
  v6 = v4->m_lParam;
  result->m_wParam = v5;
  result->m_lParam = v6;
  this->m_uiHead = v3 + 1;
  if ( v3 + 1 == this->m_uiAlloced )
    this->m_uiHead = 0;
  if ( this->m_uiHead == this->m_uiTail )
  {
    this->m_uiHead = -1;
    this->m_uiTail = 0;
  }
  return v2;
}

//----- (00409F60) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);

//----- (00409F70) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);

//----- (00409FA0) --------------------------------------------------------
void __thiscall NiCriticalSection::Unlock(NiCriticalSection *this)
{
  bool v1; // zf@1

  v1 = this->m_uiLockCount-- == 1;
  if ( v1 )
    this->m_ulThreadOwner = 0;
  LeaveCriticalSection(&this->m_kCriticalSection);
}

//----- (00409FC0) --------------------------------------------------------
void __thiscall NiTPointerAllocator<unsigned_int>::Deallocate(NiTPointerAllocator<unsigned int> *this, void *pkDel)
{
  bool v2; // zf@1

  EnterCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
  dword_B6DFE8 = GetCurrentThreadId();
  ++dword_B6DFEC;
  *((_DWORD *)pkDel + 1) = 0;
  *(_DWORD *)pkDel = NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
  v2 = dword_B6DFEC-- == 1;
  NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem = (int)pkDel;
  if ( v2 )
    dword_B6DFE8 = 0;
  LeaveCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
}
// 409FC0: could not find valid save-restore pair for esi
// B6DFCC: using guessed type int NiTAbstractPoolAllocator_unsigned int___ms_pkFreeMem;
// B6DFE8: using guessed type int dword_B6DFE8;
// B6DFEC: using guessed type int dword_B6DFEC;

//----- (0040A020) --------------------------------------------------------
int __cdecl NiTAbstractPoolAllocator<unsigned_int>::CreateFreeMem()
{
  void *v0; // eax@1
  signed int v1; // ecx@1
  signed int v2; // eax@1
  unsigned int v3; // esi@2
  int result; // eax@4

  v0 = operator new__(12 * NiTAbstractPoolAllocator<unsigned_int>::ms_uiBlockSize);
  NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem = (int)v0;
  *((_DWORD *)v0 + 3 * NiTAbstractPoolAllocator<unsigned_int>::ms_uiBlockSize - 3) = 0;
  v1 = 1;
  v2 = 12;
  do
  {
    *(_DWORD *)(v2 + NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem) = v2
                                                                           + NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem
                                                                           + 12;
    v3 = v1++;
    v2 += 12;
  }
  while ( v3 < NiTAbstractPoolAllocator<unsigned_int>::ms_uiBlockSize - 2 );
  if ( NiTAbstractPoolAllocator<unsigned_int>::ms_pkBlockHeader )
  {
    *(_DWORD *)NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem = NiTAbstractPoolAllocator<unsigned_int>::ms_pkBlockHeader;
    NiTAbstractPoolAllocator<unsigned_int>::ms_pkBlockHeader = (void *)NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
    result = NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem + 12;
    NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem += 12;
  }
  else
  {
    result = NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
    NiTAbstractPoolAllocator<unsigned_int>::ms_pkBlockHeader = (void *)NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
    *(_DWORD *)NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem = 0;
    NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem += 12;
  }
  return result;
}
// A88D88: using guessed type int NiTAbstractPoolAllocator_unsigned int___ms_uiBlockSize;
// B6DFCC: using guessed type int NiTAbstractPoolAllocator_unsigned int___ms_pkFreeMem;

//----- (0040A0C0) --------------------------------------------------------
void __thiscall NiAlphaProperty::NiAlphaProperty(NiAlphaProperty *this)
{
  NiAlphaProperty *v1; // esi@1

  v1 = this;
  NiObjectNET::NiObjectNET(&this->baseclass_0.baseclass_0);
  v1->m_uFlags = 236;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiAlphaProperty::_vftable_;
  v1->m_ucAlphaTestRef = 0;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (0040A0E0) --------------------------------------------------------
NiRTTI *__thiscall NiAlphaProperty::GetRTTI(NiAlphaProperty *this)
{
  return &NiAlphaProperty::m_RTTI;
}

//----- (0040A100) --------------------------------------------------------
NiRTTI *__thiscall NiFogProperty::GetRTTI(NiFogProperty *this)
{
  return &NiFogProperty::m_RTTI;
}

//----- (0040A110) --------------------------------------------------------
unsigned __int16 __thiscall NiPSysEmitterCtlr::GetInterpolatorCount(NiPSysEmitterCtlr *this)
{
  return 2;
}

//----- (0040A120) --------------------------------------------------------
NiRTTI *__thiscall PgFrameWork::GetRTTI(PgFrameWork *this)
{
  return &PgFrameWork::m_RTTI;
}

//----- (0040A130) --------------------------------------------------------
void __thiscall PgFrameWork::Update(PgFrameWork *this, float fCurTime)
{
  PgFrameWork::ProcessAllMsg(this);
}

//----- (0040A140) --------------------------------------------------------
const char *__thiscall PgFrameWork::GetFrameWorkName(PgFrameWork *this)
{
  return PgFrameWork::m_RTTI.m_pcName;
}

//----- (0040A150) --------------------------------------------------------
void __thiscall PgFrameWork::_PgFrameWork(PgFrameWork *this)
{
  void *v1; // ST00_4@1

  v1 = this->m_kMsgQ.m_pBase;
  this->baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v1);
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);

//----- (0040A170) --------------------------------------------------------
void *__thiscall PgFrameWork::_scalar_deleting_destructor_(PgFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_kMsgQ.m_pBase;
  this->baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);

//----- (0040A1A0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<Shadow> > *v3; // esi@1
  NiTListItem<NiPointer<Shadow> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 9794A0: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);

//----- (0040A230) --------------------------------------------------------
void __thiscall NiTPointerList<NiPointer<Shadow>>::_NiTPointerList<NiPointer<Shadow>>(NiTPointerList<NiPointer<Shadow> > *this)
{
  NiTPointerList<NiPointer<Shadow> > *v1; // edi@1
  NiTListItem<NiPointer<Shadow> > *v2; // esi@1
  NiTListItem<NiPointer<Shadow> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 9794A0: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);

//----- (0040A2B0) --------------------------------------------------------
void *__thiscall NiTPointerAllocator<unsigned_int>::Allocate(NiTPointerAllocator<unsigned int> *this)
{
  DWORD v1; // eax@1
  int v2; // esi@1

  EnterCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
  v1 = GetCurrentThreadId();
  v2 = NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
  ++dword_B6DFEC;
  dword_B6DFE8 = v1;
  if ( !NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem )
  {
    NiTAbstractPoolAllocator<unsigned_int>::CreateFreeMem();
    v2 = NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
  }
  NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem = *(_DWORD *)v2;
  *(_DWORD *)(v2 + 8) = 0;
  *(_DWORD *)v2 = 0;
  *(_DWORD *)(v2 + 4) = 0;
  --dword_B6DFEC;
  if ( !dword_B6DFEC )
    dword_B6DFE8 = 0;
  LeaveCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
  return (void *)v2;
}
// B6DFCC: using guessed type int NiTAbstractPoolAllocator_unsigned int___ms_pkFreeMem;
// B6DFE8: using guessed type int dword_B6DFE8;
// B6DFEC: using guessed type int dword_B6DFEC;

//----- (0040A320) --------------------------------------------------------
void __thiscall CharCreateFrameWork::TerminateWindow(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  unsigned int v2; // eax@15

  v1 = this;
  if ( this->m_pkCharCreateInfoWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_pkCharCreateInfoWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharCreateInfoWin = 0;
  }
  if ( v1->m_pkCharCreateViewCtrlWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCharCreateViewCtrlWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharCreateViewCtrlWin = 0;
  }
  if ( v1->m_pkCharCreateDescritWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCharCreateDescritWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharCreateDescritWin = 0;
  }
  if ( v1->m_pkCharCreateStatWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCharCreateStatWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharCreateStatWin = 0;
  }
  if ( v1->m_pkCharCreateOkCancelWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCharCreateOkCancelWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharCreateOkCancelWin = 0;
  }
  if ( v1->m_pkCharCreateClassWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCharCreateClassWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharCreateClassWin = 0;
  }
  if ( g_pkToolTipWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, g_pkToolTipWin);
    g_pkToolTipWin = 0;
  }
  v2 = stru_B703FC.m_uiHead;
  if ( stru_B703FC.m_uiHead != -1 )
  {
    while ( 1 )
    {
      ++v2;
      if ( v2 == stru_B703FC.m_uiAlloced )
        v2 = 0;
      if ( v2 == stru_B703FC.m_uiTail )
        break;
      if ( v2 == -1 )
      {
        stru_B703FC.m_uiHead = -1;
        return;
      }
    }
    stru_B703FC.m_uiTail = 0;
    stru_B703FC.m_uiHead = -1;
  }
}

//----- (0040A410) --------------------------------------------------------
void __thiscall CharCreateFrameWork::TerminateBackgroundScene(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // edi@1
  NiNode *v2; // esi@1
  NiCamera *v3; // esi@6
  NiNode *v4; // esi@11
  NiNode *v5; // esi@16
  NiNode *v6; // esi@21

  v1 = this;
  v2 = this->m_spAvatarPos.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spAvatarPos.m_pObject = 0;
  }
  v3 = v1->m_spCamera.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spCamera.m_pObject = 0;
  }
  v4 = v1->m_spCharScene.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spCharScene.m_pObject = 0;
  }
  v5 = v1->m_spBackgroundScene.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spBackgroundScene.m_pObject = 0;
  }
  v6 = v1->m_spShadowScene.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    v1->m_spShadowScene.m_pObject = 0;
  }
}

//----- (0040A4E0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::TerminateAvatar(CharCreateFrameWork *this)
{
  NsPgToonExtraData *v1; // eax@1
  CharCreateFrameWork *v2; // edi@1
  NiNode *v3; // esi@3

  v1 = Engine3D::ms_spToonExtraData;
  v2 = this;
  if ( Engine3D::ms_spToonExtraData )
  {
    Engine3D::ms_spToonExtraData->m_fLineSize = 0.0017500001;
    v1->m_pCamera = this->m_pkOldCTCamera;
  }
  v3 = this->m_spAvatarPos.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spAvatarPos.m_pObject = 0;
  }
  v2->m_pkAvatar = 0;
  CharMgr::RemoveAllWithoutMainChar(&g_kCharMgr);
  v2->m_kClass = 1;
}

//----- (0040A550) --------------------------------------------------------
bool __thiscall CharCreateFrameWork::InitNet(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // edi@1
  Net *v2; // esi@1
  Net *v3; // ebx@1

  v1 = this;
  v2 = this->m_spWorldMgrNet.m_pObject;
  v3 = g_kNetMgr.m_spWorldMgr.m_pObject;
  if ( v2 != g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spWorldMgrNet.m_pObject = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount);
  }
  return v1->m_spWorldMgrNet.m_pObject != 0;
}

//----- (0040A5B0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::TerminateNet(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // edi@1
  Net *v2; // esi@1

  v1 = this;
  v2 = this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
}

//----- (0040A5F0) --------------------------------------------------------
bool __thiscall CharCreateFrameWork::InitShadow(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  NiNode *v2; // ecx@1
  NiTListItem<NiPointer<Shadow> > *v3; // edi@1
  unsigned int v4; // eax@1
  NiTListItem<NiPointer<Shadow> > *v5; // ST30_4@2
  void *v6; // eax@5
  int v7; // edi@5
  int v8; // eax@6
  void *v9; // eax@12
  unsigned int v10; // edi@12
  unsigned int v11; // eax@13
  int v12; // ebx@15
  NiNode *v13; // edi@21
  Shadow *v14; // ecx@21
  int v16; // [sp+34h] [bp-34h]@0
  int v17; // [sp+38h] [bp-30h]@0
  int v18; // [sp+3Ch] [bp-2Ch]@0
  int v19; // [sp+40h] [bp-28h]@0
  NiPoint3 kDefaultDirectionalLightDir; // [sp+44h] [bp-24h]@1
  Shadow *v21; // [sp+50h] [bp-18h]@5
  NiPointer<Shadow> spShadow; // [sp+54h] [bp-14h]@7
  unsigned int i; // [sp+58h] [bp-10h]@4
  int v24; // [sp+64h] [bp-4h]@5

  v1 = this;
  v2 = this->m_spShadowScene.m_pObject;
  kDefaultDirectionalLightDir.x = 0.0;
  kDefaultDirectionalLightDir.y = 0.0;
  v1->m_nMaxShadowObject = 1;
  kDefaultDirectionalLightDir.z = 50.0;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_kChildren);
  v3 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3;
      v3 = v3->m_pkNext;
      v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *)&v1->m_kShadowList,
        v5);
    }
    while ( v3 );
    v4 = 0;
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<Shadow> > *)v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<Shadow> > *)v4;
  for ( i = v4; i < v1->m_nMaxShadowObject; ++i )
  {
    v6 = operator new(0x84u);
    v21 = (Shadow *)v6;
    v7 = 0;
    v24 = 0;
    if ( v6 )
    {
      Shadow::Shadow((Shadow *)v6, &kDefaultDirectionalLightDir, 0, 0, 5u);
      v7 = v8;
    }
    spShadow.m_pObject = (Shadow *)v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)(v7 + 4));
    v24 = 1;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v1->m_kShadowList,
      (NiPointer<NiDX92DBufferData> *)&spShadow);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spShadowScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *(_DWORD *)(v7 + 116),
      0);
    v24 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  }
  v9 = operator new(0xE8u);
  v21 = (Shadow *)v9;
  v10 = 0;
  v24 = 2;
  if ( v9 )
  {
    NiNode::NiNode((NiNode *)v9, 0);
    i = v11;
  }
  else
  {
    i = 0;
  }
  v24 = -1;
  NiObjectNET::SetName((NiObjectNET *)i, "ShadowNode");
  v12 = (signed int)((char *)v1->m_vecBGObjectNode.baseclass_0._Mylast
                   - *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v12 )
  {
    do
    {
      ((void (__stdcall *)(NiPointer<Shadow> *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &spShadow,
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10));
      if ( spShadow.m_pObject )
      {
        v21 = spShadow.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spShadow.m_pObject->baseclass_0.m_uiRefCount) )
        {
          if ( v21 )
            ((void (__stdcall *)(signed int))v21->baseclass_0.vfptr->__vecDelDtor)(1);
        }
      }
      (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)i + 116))(
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10++),
        0);
    }
    while ( v10 < v12 );
  }
  v13 = (NiNode *)i;
  ((void (__stdcall *)(unsigned int, _DWORD, int, int, int, int, _DWORD, _DWORD, _DWORD, Shadow *, Shadow *))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    i,
    0,
    v16,
    v17,
    v18,
    v19,
    (_DWORD)kDefaultDirectionalLightDir.x,
    LODWORD(kDefaultDirectionalLightDir.y),
    LODWORD(kDefaultDirectionalLightDir.z),
    v21,
    spShadow.m_pObject);
  spShadow.m_pObject = (Shadow *)1;
  v21 = v14;
  NiAVObject::Update(&v1->m_spCharScene.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::UpdateProperties(&v1->m_spCharScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spCharScene.m_pObject->baseclass_0);
  CharCreateFrameWork::ApplyTerrain(v1, v13);
  return 1;
}

//----- (0040A830) --------------------------------------------------------
void __thiscall CharCreateFrameWork::CharCreateFrameWork(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&CharCreateFrameWork::_vftable_;
  v1->m_spBackgroundScene.m_pObject = 0;
  v1->m_spCharScene.m_pObject = 0;
  v1->m_spCamera.m_pObject = 0;
  v1->m_spAvatarPos.m_pObject = 0;
  *(_DWORD *)&v1->m_kCreateName.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kCreateName.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kCreateName.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kCreateName.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kCreateName.n5_name[0] = 0;
  v1->m_spWorldMgrNet.m_pObject = 0;
  v1->m_spShadowScene.m_pObject = 0;
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  v1->m_iCreateSlot = -1;
  v1->m_iEraseSlot = -1;
  v1->m_pkAvatar = 0;
  v1->m_uiActiveCode = 0;
  *(_WORD *)&v1->m_bAutoTurn = 0;
  v1->m_bIsAvatorActiveMotion = 0;
  v1->m_uiAvatorActiveCode = 0;
  *(_WORD *)&v1->m_bActStart = 0;
  v1->m_pkCharCreateInfoWin = 0;
  v1->m_pkCharCreateViewCtrlWin = 0;
  v1->m_pkCharCreateDescritWin = 0;
  v1->m_pkCharCreateStatWin = 0;
  v1->m_pkCharCreateOkCancelWin = 0;
  v1->m_pkCharCreateClassWin = 0;
  *(_DWORD *)&v1->m_kShapeData._bf0 = 133;
  v1->m_bNormalStand = 1;
  *(_WORD *)&v1->m_kGender = 257;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 9795A4: using guessed type int (__stdcall *CharCreateFrameWork___vftable_)(int uiFlags);

//----- (0040A940) --------------------------------------------------------
void __thiscall CharCreateFrameWork::_CharCreateFrameWork(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // ebx@1
  int v2; // esi@5
  NiTListItem<NiPointer<Shadow> > *v3; // edi@5
  NiTListItem<NiPointer<Shadow> > *v4; // ST00_4@6
  NiNode *v5; // esi@7
  Net *v6; // esi@11
  NiNode *v7; // esi@15
  NiCamera *v8; // esi@19
  NiNode *v9; // esi@23
  NiNode *v10; // esi@27
  void *v11; // ST00_4@31

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&CharCreateFrameWork::_vftable_;
  if ( *(_DWORD *)&this->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  v2 = (int)&v1->m_kShadowList;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v3 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(&v1->m_kShadowList, v4);
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  v5 = v1->m_spShadowScene.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spWorldMgrNet.m_pObject;
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount) && v6 )
    v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spAvatarPos.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spCamera.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spCharScene.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  v10 = v1->m_spBackgroundScene.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v11);
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 9795A4: using guessed type int (__stdcall *CharCreateFrameWork___vftable_)(int uiFlags);

//----- (0040AB10) --------------------------------------------------------
bool __thiscall CharCreateFrameWork::InitBackgroundScene(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // edi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  NiNode *v5; // esi@3
  NiNode *v6; // esi@10
  void *v7; // eax@15
  int v8; // eax@16
  int v9; // ebx@16
  NiNode *v10; // esi@18
  void *v11; // ebx@25
  void *v12; // eax@25
  void *v13; // esi@25
  void *v14; // eax@29
  int v15; // esi@29
  void *v16; // eax@36
  void *v17; // esi@36
  void *v18; // eax@41
  NiNode *v19; // eax@42
  NiNode *v20; // esi@44
  void *v21; // eax@52
  int v22; // eax@53
  int v23; // esi@53
  int v24; // eax@55
  void *v25; // eax@55
  int v26; // eax@56
  int v27; // esi@56
  int v28; // eax@58
  NiNode *v29; // ST64_4@58
  char *v30; // eax@60
  NiNode *v31; // esi@60
  NiShader *v32; // eax@61
  void *v33; // eax@61
  NiNode *v34; // esi@61
  NiNode *v35; // eax@69
  char *v36; // eax@71
  char *v37; // ecx@73
  char *v38; // esi@73
  PgFrameWork *v39; // eax@77
  unsigned int v40; // eax@78
  char *v41; // eax@83
  NiNode *v42; // eax@83
  NiNode *v43; // esi@84
  int v44; // esi@89
  int v46; // esi@94
  char *v47; // eax@101
  int v48; // esi@109
  int v49; // esi@115
  char *pkObj; // [sp+88h] [bp-28h]@1
  NiPointer<NiAlphaProperty> spkAlphaProp; // [sp+8Ch] [bp-24h]@25
  NiD3DDefaultShader *pkCamera; // [sp+90h] [bp-20h]@61
  NiPointer<NiRoom> element; // [sp+94h] [bp-1Ch]@27
  NiNode *v54; // [sp+98h] [bp-18h]@27
  int v55; // [sp+9Ch] [bp-14h]@32
  NiPointer<NiNode> spNode; // [sp+A0h] [bp-10h]@42
  int v57; // [sp+ACh] [bp-4h]@1

  v1 = this;
  v2 = operator new(0xE8u);
  pkObj = (char *)v2;
  v3 = 0;
  v57 = 0;
  if ( v2 )
  {
    NiNode::NiNode((NiNode *)v2, 0);
    v3 = v4;
  }
  v5 = v1->m_spBackgroundScene.m_pObject;
  v57 = -1;
  if ( v5 != (NiNode *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spBackgroundScene.m_pObject = (NiNode *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v6 = v1->m_spShadowScene.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spShadowScene.m_pObject = 0;
  }
  v7 = operator new(0xE8u);
  pkObj = (char *)v7;
  v57 = 1;
  if ( v7 )
  {
    NiNode::NiNode((NiNode *)v7, 0);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  v10 = v1->m_spShadowScene.m_pObject;
  v57 = -1;
  if ( v10 != (NiNode *)v9 )
  {
    if ( v10
      && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v1->m_spShadowScene.m_pObject = (NiNode *)v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)(v9 + 4));
  }
  v11 = 0;
  spkAlphaProp.m_pObject = 0;
  v57 = 2;
  v12 = operator new(0x20u);
  v13 = v12;
  pkObj = (char *)v12;
  LOBYTE(v57) = 3;
  if ( v12 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v12);
    *((_BYTE *)v13 + 30) = 0;
    *(_DWORD *)v13 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v13 + 14) = 236;
    v11 = v13;
    spkAlphaProp.m_pObject = (NiAlphaProperty *)v13;
    InterlockedIncrement((volatile LONG *)v13 + 1);
  }
  *((_WORD *)v11 + 14) |= 1u;
  *((_WORD *)v11 + 14) |= 0x200u;
  *((_WORD *)v11 + 14) = *((_WORD *)v11 + 14) & 0xF3FF | 0x1000;
  *((_BYTE *)v11 + 30) = 8;
  *((_WORD *)v11 + 14) = (*((_WORD *)v11 + 14) & 0xFE5F | 0x40) & 0xFFE3 | 2;
  v54 = v1->m_spShadowScene.m_pObject;
  element.m_pObject = (NiRoom *)v11;
  InterlockedIncrement((volatile LONG *)v11 + 1);
  LOBYTE(v57) = 4;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v54->baseclass_0.m_kPropertyList,
    &element);
  LOBYTE(v57) = 2;
  if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
  v14 = operator new(0x28u);
  v15 = (int)v14;
  pkObj = (char *)v14;
  LOBYTE(v57) = 5;
  if ( v14 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v14);
    *(_DWORD *)v15 = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(v15 + 28) = 0;
    *(_DWORD *)(v15 + 32) = 0;
    *(_DWORD *)(v15 + 36) = 1;
  }
  else
  {
    v15 = 0;
  }
  v55 = v15;
  if ( v15 )
    InterlockedIncrement((volatile LONG *)(v15 + 4));
  *(_DWORD *)(v15 + 32) = 1;
  *(_DWORD *)(v15 + 36) = 1;
  v54 = v1->m_spShadowScene.m_pObject;
  element.m_pObject = (NiRoom *)v15;
  InterlockedIncrement((volatile LONG *)(v15 + 4));
  LOBYTE(v57) = 7;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v54->baseclass_0.m_kPropertyList,
    &element);
  LOBYTE(v57) = 6;
  if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
  v16 = operator new(0x30u);
  v17 = v16;
  pkObj = (char *)v16;
  LOBYTE(v57) = 8;
  if ( v16 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v16);
    *(_DWORD *)v17 = &NiFogProperty::_vftable_;
    *((float *)v17 + 9) = 0.0;
    *((float *)v17 + 10) = 0.0;
    *((float *)v17 + 11) = 0.0;
    *((_WORD *)v17 + 14) = 0;
    *((float *)v17 + 8) = 1.0;
    *((_DWORD *)v17 + 9) = NiColor::BLACK;
    *((_DWORD *)v17 + 10) = dword_B6E000;
    *((_DWORD *)v17 + 11) = dword_B6E004;
  }
  else
  {
    v17 = 0;
  }
  *((_WORD *)v17 + 14) &= 0xFFFEu;
  v54 = v1->m_spShadowScene.m_pObject;
  element.m_pObject = (NiRoom *)v17;
  InterlockedIncrement((volatile LONG *)v17 + 1);
  LOBYTE(v57) = 9;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v54->baseclass_0.m_kPropertyList,
    &element);
  LOBYTE(v57) = 6;
  if ( !InterlockedDecrement((volatile LONG *)v17 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v17)(v17, 1);
  v18 = operator new(0xE8u);
  pkObj = (char *)v18;
  LOBYTE(v57) = 10;
  if ( v18 )
  {
    NiNode::NiNode((NiNode *)v18, 0);
    spNode.m_pObject = v19;
  }
  else
  {
    spNode.m_pObject = 0;
    v19 = 0;
  }
  v20 = v1->m_spCharScene.m_pObject;
  LOBYTE(v57) = 6;
  if ( v20 != v19 )
  {
    if ( v20 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v20 )
        v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
      v19 = spNode.m_pObject;
    }
    v1->m_spCharScene.m_pObject = v19;
    if ( v19 )
      InterlockedIncrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v21 = operator new(0x10Cu);
  pkObj = (char *)v21;
  LOBYTE(v57) = 11;
  if ( v21 )
  {
    NiAmbientLight::NiAmbientLight((NiAmbientLight *)v21);
    v23 = v22;
  }
  else
  {
    v23 = 0;
  }
  *(_DWORD *)(v23 + 188) += 2;
  *(float *)(v23 + 224) = 1.0;
  LOBYTE(v57) = 6;
  *(float *)(v23 + 228) = 0.57999998;
  *(float *)(v23 + 232) = 0.57999998;
  *(float *)(v23 + 236) = 0.57999998;
  v24 = *(_DWORD *)(v23 + 188);
  *(_DWORD *)(v23 + 240) = NiColor::WHITE;
  *(_DWORD *)(v23 + 244) = dword_A88D90;
  *(_DWORD *)(v23 + 248) = dword_A88D94;
  ++v24;
  *(_DWORD *)(v23 + 188) = v24;
  *(_DWORD *)(v23 + 252) = NiColor::BLACK;
  *(_DWORD *)(v23 + 256) = dword_B6E000;
  *(_DWORD *)(v23 + 260) = dword_B6E004;
  *(_DWORD *)(v23 + 188) = v24 + 1;
  NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v23, v1->m_spCharScene.m_pObject);
  *(_BYTE *)(v23 + 176) = 1;
  ((void (__stdcall *)(int, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v23,
    0);
  v25 = operator new(0x118u);
  pkObj = (char *)v25;
  LOBYTE(v57) = 12;
  if ( v25 )
  {
    NiDirectionalLight::NiDirectionalLight((NiDirectionalLight *)v25);
    v27 = v26;
  }
  else
  {
    v27 = 0;
  }
  ++*(_DWORD *)(v27 + 188);
  v28 = *(_DWORD *)(v27 + 188);
  *(float *)(v27 + 224) = 1.0;
  *(_DWORD *)(v27 + 228) = NiColor::BLACK;
  *(_DWORD *)(v27 + 232) = dword_B6E000;
  *(_DWORD *)(v27 + 236) = dword_B6E004;
  *(float *)(v27 + 240) = 1.0;
  *(float *)(v27 + 244) = 1.0;
  v28 += 2;
  *(_DWORD *)(v27 + 188) = v28;
  *(float *)(v27 + 248) = 1.0;
  *(_DWORD *)(v27 + 252) = NiColor::BLACK;
  *(_DWORD *)(v27 + 256) = dword_B6E000;
  *(_DWORD *)(v27 + 260) = dword_B6E004;
  *(_DWORD *)(v27 + 188) = v28 + 1;
  v29 = v1->m_spCharScene.m_pObject;
  LOBYTE(v57) = 6;
  NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v27, v29);
  *(_BYTE *)(v27 + 176) = 1;
  ((void (__stdcall *)(int, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v27,
    0);
  spNode.m_pObject = 0;
  LOBYTE(v57) = 13;
  if ( !Folder::m_bInit )
    Folder::Init();
  v30 = Folder::Merge(&Folder::m_acMenu, "\\CharCreate\\CreatBack.nif");
  v31 = PgUtil::LoadNifFile(v30, 0, 1);
  v54 = v31;
  if ( !v31 )
  {
    v46 = v55;
    LOBYTE(v57) = 2;
    if ( !InterlockedDecrement((volatile LONG *)(v55 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v46)(v46, 1);
    v57 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
    return 0;
  }
  spNode.m_pObject = v31;
  InterlockedIncrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  pkCamera = 0;
  v32 = (NiShader *)v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                      (NiRefObject *)v31,
                      (unsigned int)"Avatar01");
  v33 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v32);
  v34 = v1->m_spAvatarPos.m_pObject;
  element.m_pObject = (NiRoom *)v33;
  if ( v34 != v33 )
  {
    if ( v34 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v34 )
        v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
      v33 = element.m_pObject;
    }
    v1->m_spAvatarPos.m_pObject = (NiNode *)v33;
    if ( v33 )
      InterlockedIncrement((volatile LONG *)v33 + 1);
  }
  v35 = v1->m_spAvatarPos.m_pObject;
  if ( v35 )
    ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v35,
      0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v54,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCharScene.m_pObject,
    0);
  v36 = (char *)v1->m_vecShadowObject.baseclass_0._Mylast;
  element.m_pObject = *(NiRoom **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (char *)element.m_pObject != v36 )
  {
    pkObj = 0;
    memmove((char *)element.m_pObject, v36, 0);
    v1->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)element.m_pObject;
  }
  pkObj = (char *)v1->m_spAvatarPos.m_pObject;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecShadowObject,
    (const unsigned int *)&pkObj);
  v37 = (char *)v1->m_vecBGObjectNode.baseclass_0._Mylast;
  v38 = *(char **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v38 != v37 )
  {
    pkObj = 0;
    memmove(v38, v37, 0);
    v1->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)&v38[(_DWORD)pkObj];
  }
  pkObj = (char *)((int (__stdcall *)(_DWORD))v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Object03");
  if ( pkObj )
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecBGObjectNode,
      (const unsigned int *)&pkObj);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spShadowScene.m_pObject,
    0);
  v39 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v39
    || (v40 = GameFrameWork::GetDisplyAspect((GameFrameWork *)v39, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight),
        v40 != 1)
    && (v40 <= 2 || v40 > 4) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v41 = Folder::Merge(&Folder::m_acMenu, "\\Charcreate\\CreatCam_4_3.nif");
    v42 = PgUtil::LoadNifFile(v41, 0, 1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&spNode, (NiD3DDefaultShader *)v42);
LABEL_84:
    v43 = spNode.m_pObject;
    goto LABEL_85;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v47 = Folder::Merge(&Folder::m_acMenu, "\\Charcreate\\CreatCam_16_9.nif");
  v43 = PgUtil::LoadNifFile(v47, 0, 1);
  if ( v54 == v43 )
    goto LABEL_84;
  if ( !InterlockedDecrement((volatile LONG *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    ((void (__stdcall *)(signed int))v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  spNode.m_pObject = v43;
  if ( !v43 )
    goto LABEL_86;
  InterlockedIncrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
LABEL_85:
  if ( !v43 )
  {
LABEL_86:
    LOBYTE(v57) = 6;
    if ( v43
      && !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
    v44 = v55;
    LOBYTE(v57) = 2;
    if ( !InterlockedDecrement((volatile LONG *)(v55 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v44)(v44, 1);
    v57 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
    return 0;
  }
  if ( !PgUtil::CatchCamera(&v43->baseclass_0, (NiCamera **)&pkCamera) )
  {
    LOBYTE(v57) = 6;
    if ( !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
    v48 = v55;
    LOBYTE(v57) = 2;
    if ( !InterlockedDecrement((volatile LONG *)(v55 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v48)(v48, 1);
    v57 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
    {
      (**(void (__thiscall ***)(void *))v11)(v11);
      return 0;
    }
    return 0;
  }
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_spCamera, pkCamera);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v43,
    0);
  NiAVObject::UpdateProperties(&v1->m_spBackgroundScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spBackgroundScene.m_pObject->baseclass_0);
  NiAVObject::Update(&v1->m_spBackgroundScene.m_pObject->baseclass_0, 0.0, 1);
  LOBYTE(v57) = 6;
  if ( !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
  v49 = v55;
  LOBYTE(v57) = 2;
  if ( !InterlockedDecrement((volatile LONG *)(v55 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v49)(v49, 1);
  v57 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
  return 1;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 9794FC: using guessed type int (__thiscall *NiFogProperty___vftable_)(void *p, char);
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A9541C: using guessed type char Folder__m_bInit;
// B6DFFC: using guessed type int NiColor__BLACK;
// B6E000: using guessed type int dword_B6E000;
// B6E004: using guessed type int dword_B6E004;

//----- (0040B500) --------------------------------------------------------
void __thiscall CharCreateFrameWork::ReleaseShadow(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  NiNode **v2; // ecx@1
  char *v3; // edi@1
  char *v4; // ecx@3
  char *v5; // edi@3
  int v6; // edi@5
  NiTListItem<NiPointer<Shadow> > *v7; // esi@5
  NiTListItem<NiPointer<Shadow> > *v8; // ST08_4@6

  v1 = this;
  v2 = this->m_vecBGObjectNode.baseclass_0._Mylast;
  v3 = *(char **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (NiNode **)v3 != v2 )
  {
    memmove(v3, (char *)v2, 0);
    v1->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)v3;
  }
  v4 = (char *)v1->m_vecShadowObject.baseclass_0._Mylast;
  v5 = *(char **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v5 != v4 )
  {
    memmove(v5, v4, 0);
    v1->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)v5;
  }
  v6 = (int)&v1->m_kShadowList;
  v7 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v7 )
  {
    v8 = v7;
    v7 = v7->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 8))(v6, v8);
  }
  *(_DWORD *)(v6 + 12) = 0;
  *(_DWORD *)(v6 + 4) = 0;
  *(_DWORD *)(v6 + 8) = 0;
}

//----- (0040B5A0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::Terminate(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  void *v2; // edi@1
  Net *v3; // edi@3

  v1 = this;
  CharCreateFrameWork::ReleaseShadow(this);
  v2 = v1->ms_pkStudio;
  if ( v2 )
  {
    Studio::_Studio(v1->ms_pkStudio);
    operator delete(v2);
  }
  v3 = v1->m_spWorldMgrNet.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
  CharCreateFrameWork::TerminateWindow(v1);
  CharCreateFrameWork::TerminateAvatar(v1);
  CharCreateFrameWork::TerminateBackgroundScene(v1);
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.m_BackFrameID = 0;
}

//----- (0040B620) --------------------------------------------------------
bool __thiscall CharCreateFrameWork::InitWindow(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  int v2; // ebx@1
  NiSourceTexture *v3; // eax@2
  CharCreateInfoWin *v4; // eax@3
  PgWin *v5; // eax@3
  bool result; // al@4
  CharCreateDescritWin *v7; // eax@5
  PgWin *v8; // eax@6
  PgWin *v9; // eax@7
  PgWin *v10; // eax@8
  PROTO_AVATARINFORMATION *v11; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v12; // [sp-1Ch] [bp-2Ch]@11
  PgWin *v13; // [sp-4h] [bp-14h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // [sp+Ch] [bp-4h]@11

  v1 = this;
  v2 = 0;
  this->m_kGender = 1;
  this->m_uiActiveCode = 0;
  *(_WORD *)&this->m_bAutoTurn = 0;
  if ( !g_pkToolTipWin )
  {
    v3 = MenuTexMgr::GetTexture(1u);
    g_pkToolTipWin = (PgWin *)ToolTipWin::CreateWin(v3, 7u, 7u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, g_pkToolTipWin);
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v4 = CharCreateInfoWin::CreateWin(&v1->m_kShapeData, &v1->baseclass_0);
  v13 = (PgWin *)v4;
  v1->m_pkCharCreateInfoWin = v4;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v13);
  v5 = (PgWin *)CharCreateViewCtrlWin::CreateWin(&v1->baseclass_0);
  v1->m_pkCharCreateViewCtrlWin = (CharCreateViewCtrlWin *)v5;
  if ( v5
    && (PgWinMgr::ShowWin(&Pgg_kWinMgr, v5),
        v7 = CharCreateDescritWin::CreateWin(&v1->baseclass_0),
        v1->m_pkCharCreateDescritWin = v7,
        v1->m_pkCharCreateInfoWin)
    && (CharCreateDescritWin::SetClass(v7, 1),
        CharCreateDescritWin::UpdateView(v1->m_pkCharCreateDescritWin),
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkCharCreateDescritWin->baseclass_0.baseclass_0.baseclass_0),
        v8 = (PgWin *)CharCreateStatWin::CreateWin(&v1->baseclass_0),
        (v1->m_pkCharCreateStatWin = (CharCreateStatWin *)v8) != 0)
    && (PgWinMgr::ShowWin(&Pgg_kWinMgr, v8),
        v9 = (PgWin *)CharCreateOkCancelWin::CreateWin(&v1->baseclass_0),
        (v1->m_pkCharCreateOkCancelWin = (CharCreateOkCancelWin *)v9) != 0)
    && (PgWinMgr::ShowWin(&Pgg_kWinMgr, v9),
        v10 = (PgWin *)CharCreateClassWin::CreateWin(&v1->baseclass_0),
        (v1->m_pkCharCreateClassWin = (CharCreateClassWin *)v10) != 0) )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v10);
    while ( 1 )
    {
      v11 = User::GetAvatarInfo(&g_kUser, v2);
      if ( v11 )
      {
        v14 = &v12;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &v12,
          "ChrLevel_CanCreateSen");
        if ( v11->level >= CSingleDataMap::GetValue(&g_kSingleDataMap, v12) )
          break;
      }
      ++v2;
      if ( v2 >= 6 )
        return 1;
    }
    CharCreateClassWin::SetSentinelButEnable(v1->m_pkCharCreateClassWin, 1);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0040B7B0) --------------------------------------------------------
bool __thiscall CharCreateFrameWork::InitAvatar(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  NsPgToonExtraData *v2; // eax@1
  NiCamera *v3; // ecx@1
  NiCamera *v4; // edx@1
  double v5; // st7@1
  Avatar *v6; // eax@4
  bool result; // al@7
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+1Ch] [bp-38h]@1
  NiPoint3 kPos; // [sp+2Ch] [bp-28h]@4
  NiPoint3 kDir; // [sp+38h] [bp-1Ch]@4
  float v11; // [sp+44h] [bp-10h]@1
  int v12; // [sp+50h] [bp-4h]@1

  v1 = this;
  v2 = Engine3D::ms_spToonExtraData;
  v3 = Engine3D::ms_spToonExtraData->m_pCamera;
  v4 = v1->m_spCamera.m_pObject;
  v11 = fabs(1.5);
  v5 = v11;
  v1->m_pkOldCTCamera = v3;
  v2->m_pCamera = v4;
  v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal.m_fScale = v5;
  CharCreateFrameWork::fToonLineSize = Engine3D::ms_spToonExtraData->m_fLineSize;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  Engine3D::ms_spToonExtraData->m_fLineSize = 0.00079999998;
  v1->m_kShapeData._bf0 = -123;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v12 = 0;
  HairInfoTab::GetEquipableHairType(1, -1, 0, &vecResult);
  if ( (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2 )
    v1->m_kShapeData.hairtype = **(_BYTE **)&vecResult;
  else
    v1->m_kShapeData.hairtype = 0;
  kPos.x = 0.0;
  *(_WORD *)&v1->m_kShapeData.haircolor = 0;
  kPos.y = 0.0;
  kPos.z = 0.0;
  kDir.x = 0.0;
  kDir.y = -1.0;
  kDir.z = 0.0;
  CharResMgr::RemoveAllCharActor(&g_kCharResMgr);
  v6 = CharMgr::AddAvatar(&g_kCharMgr, &v1->m_kShapeData, &kPos, &kDir, 2u);
  v1->m_pkAvatar = v6;
  if ( v6 )
  {
    v1->m_pkCharNode = v6->baseclass_0.m_spScene.m_pObject;
    v6->baseclass_0.baseclass_0.vfptr[17].DeleteAbStateByAbstateIndex((AbStateInfectee *)v6, COERCE_ABSTATEINDEX(0.0));
    NiAVObject::Update(&v1->m_pkCharNode->baseclass_0, 0.0, 0);
    NiAVObject::UpdateEffects(&v1->m_spAvatarPos.m_pObject->baseclass_0);
    NiAVObject::UpdateProperties(&v1->m_spAvatarPos.m_pObject->baseclass_0);
    CharCreateFrameWork::Refresh(v1);
    if ( *(_DWORD *)&vecResult )
      operator delete(*(void **)&vecResult);
    result = 1;
  }
  else
  {
    if ( *(_DWORD *)&vecResult )
      operator delete(*(void **)&vecResult);
    result = 0;
  }
  return result;
}
// A9434C: using guessed type float CharCreateFrameWork__fToonLineSize;

//----- (0040B940) --------------------------------------------------------
bool __thiscall CharCreateFrameWork::Init(CharCreateFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  CharCreateFrameWork *v2; // esi@1
  bool result; // al@2
  Ni2DBuffer *v4; // eax@7
  Ni2DBuffer::RendererData *v5; // ST04_4@7

  v2 = this;
  if ( CharCreateFrameWork::InitBackgroundScene(this)
    && CharCreateFrameWork::InitAvatar(v2)
    && CharCreateFrameWork::InitWindow(v2)
    && CharCreateFrameWork::InitNet(v2)
    && CharCreateFrameWork::InitShadow(v2) )
  {
    v2->baseclass_0.m_bInit = 1;
    v2->m_iCreateSlot = -1;
    v2->m_iEraseSlot = -1;
    v4 = (Ni2DBuffer *)Studio::Create(NiRenderer::ms_pkRenderer, 8u);
    v5 = (Ni2DBuffer::RendererData *)v2->m_spBackgroundScene.m_pObject;
    v2->ms_pkStudio = (Studio *)v4;
    Studio::SetSubject(v4, v5);
    v2->m_bActStart = 0;
    if ( g_kSoundMgr.m_pkBGMGroup )
    {
      if ( !SoundGroupBgm::IsBGMPlaying(g_kSoundMgr.m_pkBGMGroup) )
      {
        SoundMgr::StopBGM(&g_kSoundMgr);
        SoundGroupBgm::SetFadeDurationTime(g_kSoundMgr.m_pkBGMGroup, 0.0);
        SoundMgr::PlayBGM(&g_kSoundMgr, "LoginBackground.mp3");
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0040BA00) --------------------------------------------------------
void __thiscall PgTList<NiPointer<Shadow>>::_PgTList<NiPointer<Shadow>>(PgTList<NiPointer<Shadow> > *this)
{
  PgTList<NiPointer<Shadow> > *v1; // edi@1
  NiTListItem<NiPointer<Shadow> > *v2; // esi@1
  NiTListItem<NiPointer<Shadow> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);

//----- (0040BA80) --------------------------------------------------------
void *__thiscall PgTList<NiPointer<Shadow>>::_vector_deleting_destructor_(PgTList<NiPointer<Shadow> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<Shadow> > *v3; // esi@1
  NiTListItem<NiPointer<Shadow> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);

//----- (0040BB10) --------------------------------------------------------
NiRTTI *__thiscall CharCreateFrameWork::GetRTTI(CharCreateFrameWork *this)
{
  return &CharCreateFrameWork::m_RTTI;
}

//----- (0040BB20) --------------------------------------------------------
const char *__thiscall CharCreateFrameWork::GetFrameWorkName(CharCreateFrameWork *this)
{
  return CharCreateFrameWork::m_RTTI.m_pcName;
}

//----- (0040BB30) --------------------------------------------------------
void *__thiscall CharCreateFrameWork::_vector_deleting_destructor_(CharCreateFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharCreateFrameWork::_CharCreateFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0040BB60) --------------------------------------------------------
int __thiscall CharCreateFrameWork::On_NC_AVATAR_CREATESUCC_ACK(CharCreateFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1

  v3 = (PgFrameWork *)this;
  User::AddAvatarInfo(&g_kUser, (PROTO_AVATARINFORMATION *)((char *)pvData + 1));
  PgFrameWork::PostFrameMsgChange(v3, CharSelectFrameWorkID, 0);
  return iRevBytes;
}

//----- (0040BB90) --------------------------------------------------------
int __thiscall CharCreateFrameWork::On_NC_USER_CONNECTCUT_CMD(CharCreateFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = iRevBytes;
  if ( *(_WORD *)pvData == 1667 )
    g_kServer.m_bDoubleConnected = 1;
  return result;
}

//----- (0040BBB0) --------------------------------------------------------
void __thiscall CharCreateFrameWork::NcAvatarCreateReq(CharCreateFrameWork *this)
{
  CharCreateFrameWork *v1; // esi@1
  PgNet *v2; // ecx@2
  char v3; // al@3
  int v4; // edx@3
  unsigned int v5; // ecx@3
  unsigned int v6; // eax@3
  unsigned int v7; // edx@3
  PgNet *v8; // ecx@3
  NETCOMMAND netcmd; // [sp+4h] [bp-24h]@3
  PROTO_NC_AVATAR_CREATE_REQ kProto; // [sp+8h] [bp-20h]@3
  unsigned int v11; // [sp+24h] [bp-4h]@1
  int v12; // [sp+28h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  if ( this->m_iCreateSlot != -1 )
  {
    v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    if ( v2 )
    {
      netcmd.protocol = 5121;
      PgNet::AddNetMsg(v2, &netcmd, 2);
      v3 = LOBYTE(v1->m_iCreateSlot);
      v4 = *(_DWORD *)&v1->m_kCreateName.n5_name[0];
      *(_DWORD *)&kProto.char_shape._bf0 = *(_DWORD *)&v1->m_kShapeData._bf0;
      v5 = *(_DWORD *)&v1->m_kCreateName.n5_name[8];
      kProto.slotnum = v3;
      v6 = *(_DWORD *)&v1->m_kCreateName.n5_name[4];
      *(_DWORD *)&kProto.name.n5_name[0] = v4;
      v7 = *(_DWORD *)&v1->m_kCreateName.n5_name[12];
      *(_QWORD *)&kProto.name.n5_name[4] = __PAIR__(v5, v6);
      v8 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
      *(_QWORD *)&kProto.name.n5_name[12] = __PAIR__(*(_DWORD *)&v1->m_kCreateName.n5_name[16], v7);
      PgNet::SendNetMsg(v8, &kProto, 25);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0040BC40) --------------------------------------------------------
int __thiscall CharCreateFrameWork::On_NC_AVATAR_CREATEFAIL_ACK(CharCreateFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // eax@1
  PgFrameWork *v4; // esi@1
  char *v5; // eax@9
  MsgBox *v6; // eax@9
  unsigned int v8; // [sp-4h] [bp-20h]@4
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@10
  unsigned int v10; // [sp+18h] [bp-4h]@1
  int v11; // [sp+1Ch] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = *(_WORD *)pvData;
  v4 = (PgFrameWork *)this;
  if ( v3 <= 385 )
  {
    if ( v3 == 385 )
    {
      v8 = -960315177;
LABEL_9:
      v5 = TextData::Get(v8);
      v6 = MsgBox::Modal(MSGBOX_OK, v5);
      if ( v6 )
      {
        kMsg.m_uiFrameMsg = 10;
        MsgBox::SetFrameWorkMsgOnClose(v6, v4, &kMsg, 0);
      }
    }
    else
    {
      switch ( v3 )
      {
        case 130:
          v8 = -822212817;
          goto LABEL_9;
        case 131:
          v8 = -875776746;
          goto LABEL_9;
        case 132:
          v8 = -1447043387;
          goto LABEL_9;
        case 133:
          v8 = 210332305;
          goto LABEL_9;
        default:
          return iRevBytes;
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0040BCF0) --------------------------------------------------------
int __thiscall CharCreateFrameWork::ProcessNetMsg(CharCreateFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  PgFrameWork *v5; // esi@1
  int result; // eax@1

  v5 = (PgFrameWork *)this;
  result = 0;
  switch ( iDepart )
  {
    case 3:
      if ( iCommand == 23 )
      {
        if ( *(_WORD *)pvData == 1667 )
          g_kServer.m_bDoubleConnected = 1;
        result = iRevBytes;
      }
      break;
    case 5:
      if ( iCommand == 4 )
      {
        result = CharCreateFrameWork::On_NC_AVATAR_CREATEFAIL_ACK(this, iRevBytes, pvData);
      }
      else
      {
        if ( iCommand == 6 )
        {
          User::AddAvatarInfo(&g_kUser, (PROTO_AVATARINFORMATION *)((char *)pvData + 1));
          PgFrameWork::PostFrameMsgChange(v5, CharSelectFrameWorkID, 0);
          result = iRevBytes;
        }
      }
      break;
    case 8:
      if ( iCommand == 17 )
        result = iRevBytes;
      break;
  }
  return result;
}

//----- (0040BD90) --------------------------------------------------------
void __thiscall Name5::operator_(Name5 *this, Name5 *nm)
{
  *(_QWORD *)&this->n5_name[0] = *(_QWORD *)&nm->n5_name[0];
  *(_QWORD *)&this->n5_name[8] = *(_QWORD *)&nm->n5_name[8];
  *(_DWORD *)&this->n5_name[16] = *(_DWORD *)&nm->n5_name[16];
}

//----- (0040BDC0) --------------------------------------------------------
void __thiscall CharCreateOkCancelWin::CharCreateOkCancelWin(CharCreateOkCancelWin *this)
{
  CharCreateOkCancelWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateOkCancelWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateOkCancelWin::_vftable_;
}
// 97965C: using guessed type int (__stdcall *CharCreateOkCancelWin___vftable_)(int uiFlags);
// 97967C: using guessed type int (__thiscall *CharCreateOkCancelWin___vftable_)(void *p, char);

//----- (0040BDE0) --------------------------------------------------------
void __thiscall CharCreateOkCancelWin::_CharCreateOkCancelWin(CharCreateOkCancelWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateOkCancelWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateOkCancelWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97965C: using guessed type int (__stdcall *CharCreateOkCancelWin___vftable_)(int uiFlags);
// 97967C: using guessed type int (__thiscall *CharCreateOkCancelWin___vftable_)(void *p, char);

//----- (0040BE00) --------------------------------------------------------
void __thiscall CharCreateOkCancelWin::OnCmdOK(CharCreateOkCancelWin *this)
{
  CharCreateFrameWork::CreateOk((CharCreateFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0040BE10) --------------------------------------------------------
void __thiscall CharCreateOkCancelWin::OnCmdCancel(CharCreateOkCancelWin *this)
{
  CharCreateFrameWork::CreateCancel((CharCreateFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0040BE20) --------------------------------------------------------
bool __thiscall CharCreateOkCancelWin::Create(CharCreateOkCancelWin *this, PgFrameWork *pkFrameWork)
{
  PgWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  char *v8; // edi@11
  unsigned int v9; // ST18_4@11
  D3DXCOLOR v10; // ST1C_16@11
  int v11; // ST0C_4@11
  int v12; // eax@11
  int v13; // eax@11
  PgWinText *v14; // edi@11
  NiRefObjectVtbl *v15; // ebx@11
  bool v16; // ST34_1@11
  char *v17; // edi@11
  unsigned int v18; // ST18_4@11
  D3DXCOLOR v19; // ST1C_16@11
  int v20; // ST0C_4@11
  int v21; // eax@11
  int v22; // eax@11
  PgWinText *v23; // edi@11
  NiRefObjectVtbl *v24; // ebx@11
  NiRefObjectVtbl *v25; // edi@11
  int v26; // eax@11
  int v27; // eax@11
  NiNode *v28; // esi@12
  bool v29; // [sp+10h] [bp-34h]@0
  UIUtil ui; // [sp+20h] [bp-24h]@11
  NiPointer<NiNode> spNode; // [sp+34h] [bp-10h]@1
  int v32; // [sp+40h] [bp-4h]@1

  v2 = (PgWin *)this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v32 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "charcreate\\CreatCharExitButton.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    UIUtil::UIUtil(&ui);
    LOBYTE(v32) = 1;
    UIUtil::SetParent(&ui, v2);
    UIUtil::SetOffset(&ui, 0, 0);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    v8 = (char *)UIUtil::CreateButton(&ui, 0, "Btn01", 0, 3);
    v9 = (unsigned int)Color::m_kDxWhiteColor.r;
    *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor.g;
    *(_QWORD *)&v10.b = __PAIR__(5, LODWORD(Color::m_kDxWhiteColor.a));
    v11 = (int)TextData::Get(0x4F5F499Fu);
    v12 = (*(int (__thiscall **)(char *))(*(_DWORD *)v8 + 148))(v8);
    v13 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v8 + 144))(v8, v12);
    v14 = UIUtil::CreateTextNoTag(&ui, 0, 0, v13, v11, v8, 0, v9, COERCE_D3DXCOLOR(v10.r), 0, 0, v29);
    v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = (unsigned int)Font::Get(MENU);
    ((void (__thiscall *)(PgWinText *))v15[113].__vecDelDtor)(v14);
    v17 = (char *)UIUtil::CreateButton(&ui, 1u, "Btn02", 0, 3);
    v18 = (unsigned int)Color::m_kDxWhiteColor.r;
    *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor.g;
    *(_QWORD *)&v19.b = __PAIR__(5, LODWORD(Color::m_kDxWhiteColor.a));
    v20 = (int)TextData::Get(0x45B392ACu);
    v21 = (*(int (__thiscall **)(char *))(*(_DWORD *)v17 + 148))(v17);
    v22 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v17 + 144))(v17, v21);
    v23 = UIUtil::CreateTextNoTag(&ui, 0, 0, v22, v20, v17, 0, v18, COERCE_D3DXCOLOR(v19.r), 0, 0, v16);
    v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    Font::Get(MENU);
    ((void (__thiscall *)(PgWinText *))v24[113].__vecDelDtor)(v23);
    ((void (__thiscall *)(PgWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      1.0);
    v25 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = ((int (__thiscall *)(PgWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
    v27 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                 (NiRefObject *)v2,
                 v26 - 10);
    v25[77].__vecDelDtor((NiRefObject *)v2, v27);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor((NiRefObject *)v2, 0);
    LOBYTE(v32) = 0;
    UIUtil::_UIUtil(&ui);
    v32 = -1;
    if ( spNode.m_pObject )
    {
      v28 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v28 )
          v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
      }
    }
    result = 1;
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("CreatCharExitButton load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v32 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0040C0F0) --------------------------------------------------------
void __thiscall CharCreateOkCancelWin::OnCommand(CharCreateOkCancelWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      CharCreateFrameWork::CreateCancel((CharCreateFrameWork *)this->baseclass_0.m_pkFrameWork);
  }
  else
  {
    CharCreateFrameWork::CreateOk((CharCreateFrameWork *)this->baseclass_0.m_pkFrameWork);
  }
}

//----- (0040C120) --------------------------------------------------------
CharCreateOkCancelWin *__cdecl CharCreateOkCancelWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CharCreateOkCancelWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CharCreateOkCancelWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CharCreateOkCancelWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CharCreateOkCancelWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97965C: using guessed type int (__stdcall *CharCreateOkCancelWin___vftable_)(int uiFlags);
// 97967C: using guessed type int (__thiscall *CharCreateOkCancelWin___vftable_)(void *p, char);

//----- (0040C260) --------------------------------------------------------
void *__thiscall CharCreateOkCancelWin::_vector_deleting_destructor_(CharCreateOkCancelWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateOkCancelWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateOkCancelWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97965C: using guessed type int (__stdcall *CharCreateOkCancelWin___vftable_)(int uiFlags);
// 97967C: using guessed type int (__thiscall *CharCreateOkCancelWin___vftable_)(void *p, char);

//----- (0040C2A0) --------------------------------------------------------
void __thiscall CharCreateStatWin::CharCreateStatWin(CharCreateStatWin *this)
{
  CharCreateStatWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateStatWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateStatWin::_vftable_;
  v1->m_pkActor = 0;
  v1->m_kClass = 1;
}
// 979984: using guessed type int (__stdcall *CharCreateStatWin___vftable_)(int uiFlags);
// 9799A4: using guessed type int (__thiscall *CharCreateStatWin___vftable_)(void *p, char);

//----- (0040C2D0) --------------------------------------------------------
void __thiscall CharCreateStatWin::_CharCreateStatWin(CharCreateStatWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateStatWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateStatWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 979984: using guessed type int (__stdcall *CharCreateStatWin___vftable_)(int uiFlags);
// 9799A4: using guessed type int (__thiscall *CharCreateStatWin___vftable_)(void *p, char);

//----- (0040C2F0) --------------------------------------------------------
void __thiscall CharCreateStatWin::UpdateMeWin(CharCreateStatWin *this, float fCurTime)
{
  NiActorManager *v2; // ecx@1

  v2 = this->m_pkActor;
  if ( v2 )
    NiActorManager::Update(v2, fCurTime);
}

//----- (0040C310) --------------------------------------------------------
void __thiscall CharCreateStatWin::SetClass(CharCreateStatWin *this, char kClass)
{
  if ( this->m_kClass != kClass )
    this->m_kClass = kClass;
}

//----- (0040C330) --------------------------------------------------------
bool __thiscall CharCreateStatWin::Create(CharCreateStatWin *this, PgFrameWork *pkFrameWork)
{
  CharCreateStatWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // eax@11
  NiNode *v9; // esi@12
  D3DXCOLOR v10; // ST0C_16@17
  char *v11; // eax@17
  PgWinText *v12; // edi@17
  NiRefObjectVtbl *v13; // ebx@17
  PgFont *v14; // eax@17
  D3DXCOLOR v15; // ST0C_16@17
  char *v16; // eax@17
  PgWinText *v17; // edi@17
  NiRefObjectVtbl *v18; // ebx@17
  PgFont *v19; // eax@17
  D3DXCOLOR v20; // ST0C_16@17
  char *v21; // eax@17
  PgWinText *v22; // edi@17
  NiRefObjectVtbl *v23; // ebx@17
  PgFont *v24; // eax@17
  D3DXCOLOR v25; // ST0C_16@17
  char *v26; // eax@17
  PgWinText *v27; // edi@17
  NiRefObjectVtbl *v28; // ebx@17
  PgFont *v29; // eax@17
  D3DXCOLOR v30; // ST0C_16@17
  char *v31; // eax@17
  PgWinText *v32; // edi@17
  NiRefObjectVtbl *v33; // ebx@17
  PgFont *v34; // eax@17
  D3DXCOLOR v35; // ST0C_16@17
  char *v36; // eax@17
  PgWinText *v37; // edi@17
  NiRefObjectVtbl *v38; // ebx@17
  PgFont *v39; // eax@17
  char *v40; // eax@19
  NiActorManager *v41; // eax@19
  NiRefObjectVtbl *v42; // edi@21
  int v43; // eax@21
  int v44; // eax@21
  NiNode *v45; // esi@21
  UIUtil ui; // [sp+38h] [bp-2Ch]@17
  int uiLeft; // [sp+4Ch] [bp-18h]@11
  int uiTop; // [sp+50h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v50; // [sp+60h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v50 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "charcreate\\ClassStat.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
    if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "CharCreateStatWin", 0) )
    {
      UIUtil::UIUtil(&ui);
      LOBYTE(v50) = 1;
      UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, uiLeft, uiTop);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      UIUtil::CreateSpr(&ui, "Plane02", 0);
      *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v11 = TextData3::Get(0x78E5BEEAu);
      v12 = UIUtil::CreateTextEx(&ui, "Stat01_middle", v11, 0, COERCE_D3DXCOLOR(v10.r), 5u, 0, 0, 0);
      v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v14 = Font::Get(MENU);
      v13[113].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
      *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v16 = TextData3::Get(0x78E4BBEAu);
      v17 = UIUtil::CreateTextEx(&ui, "Stat02_right", v16, 0, COERCE_D3DXCOLOR(v15.r), 5u, 0, 0, 0);
      v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v19 = Font::Get(MENU);
      v18[113].__vecDelDtor((NiRefObject *)v17, (unsigned int)v19);
      *(_QWORD *)&v20.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v20.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v21 = TextData3::Get(0x78F4B4EAu);
      v22 = UIUtil::CreateTextEx(&ui, "Stat03_right", v21, 0, COERCE_D3DXCOLOR(v20.r), 5u, 0, 0, 0);
      v23 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = Font::Get(MENU);
      v23[113].__vecDelDtor((NiRefObject *)v22, (unsigned int)v24);
      *(_QWORD *)&v25.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v25.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v26 = TextData3::Get(0x78E5A8EAu);
      v27 = UIUtil::CreateTextEx(&ui, "Stat04_middle", v26, 0, COERCE_D3DXCOLOR(v25.r), 5u, 0, 0, 0);
      v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v29 = Font::Get(MENU);
      v28[113].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
      *(_QWORD *)&v30.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v30.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v31 = TextData3::Get(0x78EABBEAu);
      v32 = UIUtil::CreateTextEx(&ui, "Stat05_left", v31, 0, COERCE_D3DXCOLOR(v30.r), 5u, 0, 0, 0);
      v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v34 = Font::Get(MENU);
      v33[113].__vecDelDtor((NiRefObject *)v32, (unsigned int)v34);
      *(_QWORD *)&v35.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v35.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v36 = TextData3::Get(0x78E3B4EAu);
      v37 = UIUtil::CreateTextEx(&ui, "Stat06_left", v36, 0, COERCE_D3DXCOLOR(v35.r), 5u, 0, 0, 0);
      v38 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v39 = Font::Get(MENU);
      v38[113].__vecDelDtor((NiRefObject *)v37, (unsigned int)v39);
      if ( !Folder::m_bInit )
        Folder::Init();
      v40 = Folder::Merge(&Folder::m_acMenu, "charcreate\\class_stat\\class_stat.kfm");
      v41 = NiActorManager::Create(v40, 0, 1, 0);
      v2->m_pkActor = v41;
      if ( v41 )
      {
        ((void (__thiscall *)(CharCreateStatWin *, NiAVObject *, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v2,
          v41->m_spNIFRoot.m_pObject,
          0);
        NiActorManager::SetTargetAnimation(v2->m_pkActor, 0);
      }
      ((void (__thiscall *)(CharCreateStatWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.0,
        1.0);
      v42 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v43 = ((int (__thiscall *)(CharCreateStatWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
      v44 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                   (NiRefObject *)v2,
                   v43 - 10);
      v42[77].__vecDelDtor((NiRefObject *)v2, v44);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      LOBYTE(v50) = 0;
      UIUtil::_UIUtil(&ui);
      v45 = spNode.m_pObject;
      v50 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v45 )
        v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
      result = 1;
    }
    else
    {
      v9 = spNode.m_pObject;
      v50 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      result = 0;
    }
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("ClassStat.nif Load Fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v50 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0040C820) --------------------------------------------------------
void __thiscall CharCreateStatWin::SetAniCode(CharCreateStatWin *this)
{
  unsigned int v1; // eax@1

  v1 = 0;
  switch ( this->m_kClass )
  {
    case 1:
      NiActorManager::SetTargetAnimation(this->m_pkActor, 0);
      break;
    case 6:
      NiActorManager::SetTargetAnimation(this->m_pkActor, 1u);
      break;
    case 0xB:
      NiActorManager::SetTargetAnimation(this->m_pkActor, 2u);
      break;
    case 0x10:
      NiActorManager::SetTargetAnimation(this->m_pkActor, 3u);
      break;
    case 0x15:
      NiActorManager::SetTargetAnimation(this->m_pkActor, 4u);
      break;
    case 0x1A:
      v1 = 5;
      goto LABEL_8;
    default:
LABEL_8:
      NiActorManager::SetTargetAnimation(this->m_pkActor, v1);
      break;
  }
}

//----- (0040C8E0) --------------------------------------------------------
CharCreateStatWin *__cdecl CharCreateStatWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CharCreateStatWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CharCreateStatWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CharCreateStatWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_BYTE *)v2 + 348) = 1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CharCreateStatWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 979984: using guessed type int (__stdcall *CharCreateStatWin___vftable_)(int uiFlags);
// 9799A4: using guessed type int (__thiscall *CharCreateStatWin___vftable_)(void *p, char);

//----- (0040CA30) --------------------------------------------------------
void *__thiscall CharCreateStatWin::_scalar_deleting_destructor_(CharCreateStatWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateStatWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateStatWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 979984: using guessed type int (__stdcall *CharCreateStatWin___vftable_)(int uiFlags);
// 9799A4: using guessed type int (__thiscall *CharCreateStatWin___vftable_)(void *p, char);

//----- (0040CA70) --------------------------------------------------------
bool __thiscall NiActorManager::SetTargetAnimation(NiActorManager *this, unsigned int eSequenceID)
{
  NiActorManager *v2; // ebx@1
  NiTListItem<NiActorManager::TimelineData> *v3; // esi@1
  NiTListItem<NiActorManager::TimelineData> *v4; // eax@1
  NiTListItem<NiActorManager::TimelineData> *v5; // ST04_4@2
  unsigned int v6; // esi@4
  bool result; // al@6

  v2 = this;
  v3 = this->m_kTimeline.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3;
      v3 = v3->m_pkNext;
      v2->m_kTimeline.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTObjectAllocator<NiActorManager::TimelineData>,NiActorManager::TimelineData> *)&v2->m_kTimeline,
        v5);
    }
    while ( v3 );
    v4 = 0;
  }
  v6 = eSequenceID;
  *(_DWORD *)&v2->m_kTimeline.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v4;
  v2->m_kTimeline.baseclass_0.m_pkHead = v4;
  v2->m_kTimeline.baseclass_0.m_pkTail = v4;
  if ( v2->m_eTargetID == v6 )
    goto LABEL_8;
  if ( v6 == NiActorManager::INVALID_SEQUENCE_ID
    || (result = NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
                   (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_kSequenceMap,
                   v6,
                   (NiVBSet **)&eSequenceID)) != 0 )
  {
    v2->m_eTargetID = v6;
LABEL_8:
    result = 1;
    v2->m_bBuildTimeline = 1;
  }
  return result;
}
// 9EEF00: using guessed type const unsigned int NiActorManager__INVALID_SEQUENCE_ID;

//----- (0040CAF0) --------------------------------------------------------
void __thiscall CharCreateViewCtrlWin::CharCreateViewCtrlWin(CharCreateViewCtrlWin *this)
{
  CharCreateViewCtrlWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkFrameWork = 0;
  v1->pTurnLeftBtn = 0;
  v1->pTurnRightBtn = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateViewCtrlWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateViewCtrlWin::_vftable_;
}
// 979C14: using guessed type int (__stdcall *CharCreateViewCtrlWin___vftable_)(int uiFlags);
// 979C34: using guessed type int (__thiscall *CharCreateViewCtrlWin___vftable_)(void *p, char);

//----- (0040CB20) --------------------------------------------------------
void __thiscall CharCreateViewCtrlWin::_CharCreateViewCtrlWin(CharCreateViewCtrlWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateViewCtrlWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateViewCtrlWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 979C14: using guessed type int (__stdcall *CharCreateViewCtrlWin___vftable_)(int uiFlags);
// 979C34: using guessed type int (__thiscall *CharCreateViewCtrlWin___vftable_)(void *p, char);

//----- (0040CB40) --------------------------------------------------------
void __thiscall CharCreateViewCtrlWin::OnMouseEvent(CharCreateViewCtrlWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin)
{
  CharCreateViewCtrlWin *v3; // esi@1
  PgFrameWork *v4; // eax@3
  PgFrameWork *v5; // ecx@4
  PgFrameWork *v6; // eax@8
  PgFrameWork *v7; // ecx@9

  v3 = this;
  if ( eMouseEvent == 1 )
  {
    if ( (PgWin *)this->pTurnLeftBtn == pkWin )
    {
      v4 = this->m_pkFrameWork;
      if ( v4 )
      {
        LOBYTE(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = LOBYTE(v4[1].baseclass_0.m_uiMessageNum) == 0;
        v5 = this->m_pkFrameWork;
        if ( LOBYTE(v5[1].baseclass_0.m_uiMessageNum) )
        {
          CharCreateFrameWork::ActNormalStand((CharCreateFrameWork *)v5);
          BYTE3(v3->m_pkFrameWork[1].baseclass_0.m_pkMsgHooker) = 1;
        }
        else
        {
          CharCreateFrameWork::ActStand((CharCreateFrameWork *)v5);
          BYTE3(v3->m_pkFrameWork[1].baseclass_0.m_pkMsgHooker) = 1;
        }
      }
    }
    else
    {
      if ( (PgWin *)this->pTurnRightBtn == pkWin )
      {
        v6 = this->m_pkFrameWork;
        if ( v6 )
        {
          LOBYTE(v6[1].baseclass_0.m_uiMessageNum) = LOBYTE(v6[1].baseclass_0.m_uiMessageNum) == 0;
          v7 = this->m_pkFrameWork;
          if ( LOBYTE(v7[1].baseclass_0.m_uiMessageNum) )
          {
            CharCreateFrameWork::ActNormalStand((CharCreateFrameWork *)v7);
            BYTE3(v3->m_pkFrameWork[1].baseclass_0.m_pkMsgHooker) = 0;
          }
          else
          {
            CharCreateFrameWork::ActStand((CharCreateFrameWork *)v7);
            BYTE3(v3->m_pkFrameWork[1].baseclass_0.m_pkMsgHooker) = 0;
          }
        }
      }
    }
  }
}

//----- (0040CC40) --------------------------------------------------------
bool __thiscall CharCreateViewCtrlWin::Create(CharCreateViewCtrlWin *this, PgFrameWork *pkFrameWork)
{
  CharCreateViewCtrlWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiNode *v5; // esi@5
  PgWinBut *v7; // eax@10
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // edx@10
  NiNode *v9; // esi@11
  UIUtil ui; // [sp+18h] [bp-24h]@10
  NiPointer<NiNode> spNode; // [sp+2Ch] [bp-10h]@1
  int v12; // [sp+38h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  this->m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v12 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\CharCreate\\CreatCharTurnButton.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  if ( !PgWinFrame::Create(&v2->baseclass_0, 393, 654, 0, pkFrameWork, "CharCreateViewCtrlWin", 0) )
  {
    v5 = spNode.m_pObject;
    v12 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v12) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v2->pTurnLeftBtn = UIUtil::CreateButton(&ui, 0, "TurnL", 0, 3);
  v7 = UIUtil::CreateButton(&ui, 1u, "TurnR", 0, 3);
  v8 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
  v2->pTurnRightBtn = v7;
  ((void (__thiscall *)(CharCreateViewCtrlWin *, unsigned int, unsigned int, _DWORD, _DWORD))v8)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.80000001);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  LOBYTE(v12) = 0;
  UIUtil::_UIUtil(&ui);
  v12 = -1;
  if ( spNode.m_pObject )
  {
    v9 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0040CE00) --------------------------------------------------------
CharCreateViewCtrlWin *__cdecl CharCreateViewCtrlWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CharCreateViewCtrlWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x164u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CharCreateViewCtrlWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CharCreateViewCtrlWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CharCreateViewCtrlWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 979C14: using guessed type int (__stdcall *CharCreateViewCtrlWin___vftable_)(int uiFlags);
// 979C34: using guessed type int (__thiscall *CharCreateViewCtrlWin___vftable_)(void *p, char);

//----- (0040CF50) --------------------------------------------------------
void *__thiscall CharCreateViewCtrlWin::_vector_deleting_destructor_(CharCreateViewCtrlWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharCreateViewCtrlWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharCreateViewCtrlWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 979C14: using guessed type int (__stdcall *CharCreateViewCtrlWin___vftable_)(int uiFlags);
// 979C34: using guessed type int (__thiscall *CharCreateViewCtrlWin___vftable_)(void *p, char);

//----- (0040CF90) --------------------------------------------------------
void __thiscall Name3::operator_(Name3 *this, const char *nm)
{
  *(_QWORD *)&this->n3_name[4] = 0i64;
  *(_DWORD *)&this->n3_name[0] = 0;
  strncpy(this->n3_name, (char *)nm, 0xCu);
}

//----- (0040CFB0) --------------------------------------------------------
void __thiscall World::SetMapName(World *this, char *pcMapName)
{
  *(_QWORD *)&this->m_kMapName.n3_name[4] = 0i64;
  *(_DWORD *)&this->m_kMapName.n3_name[0] = 0;
  strncpy(this->m_kMapName.n3_name, pcMapName, 0xCu);
}

//----- (0040CFE0) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::InitWindow(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  CharSelectMenuWin *v2; // eax@1
  bool result; // al@2

  v1 = this;
  v2 = CharSelectMenuWin::CreateWin(&this->baseclass_0);
  v1->m_pkCharSelectMenuWin = v2;
  if ( v2 )
  {
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkCharSelectMenuWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkEventFriendCountWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkChangeNameWin = ChangeNameWin::CreateWin(&v1->baseclass_0);
    if ( g_kSoundMgr.m_pkBGMGroup )
    {
      if ( !SoundGroupBgm::IsBGMPlaying(g_kSoundMgr.m_pkBGMGroup) )
      {
        SoundMgr::StopBGM(&g_kSoundMgr);
        SoundGroupBgm::SetFadeDurationTime(g_kSoundMgr.m_pkBGMGroup, 0.0);
        SoundMgr::PlayBGM(&g_kSoundMgr, "LoginBackground.mp3");
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0040D080) --------------------------------------------------------
void __thiscall CharSelectFrameWork::TerminateWindow(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  ChangeNameWin *v2; // ecx@7
  MsgBox *v3; // edi@9

  v1 = this;
  if ( this->m_pkCharSelectMenuWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_pkCharSelectMenuWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharSelectMenuWin = 0;
  }
  if ( v1->m_pkEventFriendCountWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEventFriendCountWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEventFriendCountWin = 0;
  }
  if ( v1->m_spkMsgBox.m_pObject )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_spkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_pkChangeNameWin;
  if ( v2 )
  {
    ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkChangeNameWin = 0;
  }
  v3 = v1->m_spkMsgBox.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v3,
          1u);
    }
    v1->m_spkMsgBox.m_pObject = 0;
  }
}

//----- (0040D130) --------------------------------------------------------
void __thiscall CharSelectFrameWork::TerminateBackgroundScene(CharSelectFrameWork *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2
  int v4; // edi@8
  signed int v5; // ebx@8
  int v6; // esi@9
  NiCamera *v7; // esi@16
  LONG (__stdcall *v8)(volatile LONG *); // ebx@17
  NiNode *v9; // esi@22
  NiSortAdjustNode *v10; // esi@27
  NiNode *v11; // esi@32
  CharSelectFrameWork *v12; // [sp+Ch] [bp-4h]@1

  v12 = this;
  v1 = (char *)this->m_spCharSelectEffect;
  v2 = 6;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
  v4 = (int)v12->m_aspAvatarPos;
  v5 = 6;
  do
  {
    v6 = *(_DWORD *)v4;
    if ( *(_DWORD *)v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      *(_DWORD *)v4 = 0;
    }
    v4 += 4;
    --v5;
  }
  while ( v5 );
  if ( v12->m_spCamera.m_pObject && (v7 = v12->m_spCamera.m_pObject) != 0 )
  {
    v8 = InterlockedDecrement;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v12->m_spCamera.m_pObject = 0;
  }
  else
  {
    v8 = InterlockedDecrement;
  }
  v9 = v12->m_spCharScene.m_pObject;
  if ( v9 )
  {
    if ( !v8((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    v12->m_spCharScene.m_pObject = 0;
  }
  v10 = v12->m_spBackgroundScene.m_pObject;
  if ( v10 )
  {
    if ( !v8((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v12->m_spBackgroundScene.m_pObject = 0;
  }
  v11 = v12->m_spShadowScene.m_pObject;
  if ( v11 )
  {
    if ( !v8((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    v12->m_spShadowScene.m_pObject = 0;
  }
}

//----- (0040D280) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::InitAvatar(CharSelectFrameWork *this)
{
  NsPgToonExtraData *v1; // eax@1
  double v2; // st7@1
  signed int v3; // ebx@1
  Avatar **v4; // esi@1
  PROTO_AVATARINFORMATION *v5; // edi@2
  Avatar *v6; // eax@3
  NiAVObject *v7; // edi@4
  CharSelectFrameWork *v8; // esi@7
  void *v9; // eax@9
  Picking *v10; // eax@10
  NiPoint3 kPos; // [sp+20h] [bp-2Ch]@3
  NiPoint3 kDir; // [sp+2Ch] [bp-20h]@3
  CharSelectFrameWork *thisa; // [sp+38h] [bp-14h]@1
  char bHaveAvata; // [sp+3Fh] [bp-Dh]@1
  int v16; // [sp+48h] [bp-4h]@9

  thisa = this;
  v1 = Engine3D::ms_spToonExtraData;
  this->m_pkOldCTCamera = Engine3D::ms_spToonExtraData->m_pCamera;
  v1->m_pCamera = this->m_spCamera.m_pObject;
  v2 = Engine3D::ms_spToonExtraData->m_fLineSize;
  bHaveAvata = 0;
  CharSelectFrameWork::fToonLineSize = v2;
  v3 = 0;
  v4 = this->m_apkAvatar;
  Engine3D::ms_spToonExtraData->m_fLineSize = 0.001;
  do
  {
    v5 = User::GetAvatarInfoBySlot(&g_kUser, v3);
    if ( v5 )
    {
      kPos.x = 0.0;
      kPos.y = 0.0;
      kPos.z = 0.0;
      kDir.x = 0.0;
      kDir.y = -1.0;
      kDir.z = 0.0;
      CharResMgr::RemoveAllCharActor(&g_kCharResMgr);
      v6 = CharMgr::AddAvatar(&g_kCharMgr, v5, &kPos, &kDir, 1u);
      *v4 = v6;
      if ( v6 )
      {
        NiAVObject::Update((NiAVObject *)*(v4 - 6), 0.0, 0);
        v7 = (NiAVObject *)(*v4)->baseclass_0.m_spScene.m_pObject;
        ((void (__stdcall *)(NiNode *, _DWORD))(*(v4 - 6))->baseclass_0.baseclass_0.vfptr[3].DeleteAbStateByAbstateIndex)(
          (*v4)->baseclass_0.m_spScene.m_pObject,
          0);
        NiAVObject::Update(v7, 0.0, 0);
        NiAVObject::UpdateEffects((NiAVObject *)*(v4 - 6));
        NiAVObject::UpdateProperties((NiAVObject *)*(v4 - 6));
        CharSelectFrameWork::ActPos(thisa, *v4, v3);
        bHaveAvata = 1;
      }
    }
    else
    {
      *v4 = 0;
    }
    ++v3;
    ++v4;
  }
  while ( v3 < 6 );
  v8 = thisa;
  if ( !bHaveAvata )
    CharSelectMenuWin::DisplayNoCharMsg(thisa->m_pkCharSelectMenuWin);
  User::SetSelectedAvatarSlot(&g_kUser, -1);
  v9 = operator new(0x3Cu);
  thisa = (CharSelectFrameWork *)v9;
  v16 = 0;
  if ( v9 )
    Picking::Picking((Picking *)v9);
  else
    v10 = 0;
  v8->m_pkPick = v10;
  return 1;
}
// A94388: using guessed type float CharSelectFrameWork__fToonLineSize;

//----- (0040D400) --------------------------------------------------------
void __thiscall CharSelectFrameWork::TerminateAvatar(CharSelectFrameWork *this)
{
  NsPgToonExtraData *v1; // eax@1
  char *v2; // edi@3
  signed int v3; // ebx@3
  int v4; // esi@4
  void *v5; // esi@10
  CharSelectFrameWork *v6; // [sp+0h] [bp-4h]@1

  v1 = Engine3D::ms_spToonExtraData;
  v6 = this;
  if ( Engine3D::ms_spToonExtraData )
  {
    Engine3D::ms_spToonExtraData->m_fLineSize = 0.0017500001;
    v1->m_pCamera = this->m_pkOldCTCamera;
  }
  v2 = (char *)this->m_aspAvatarPos;
  v3 = 6;
  do
  {
    v4 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v3;
  }
  while ( v3 );
  CharMgr::RemoveAllWithoutMainChar(&g_kCharMgr);
  v5 = v6->m_pkPick;
  if ( v5 )
  {
    Picking::_Picking(v6->m_pkPick);
    operator delete(v5);
  }
}

//----- (0040D490) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::InitNet(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // ebx@1
  Net *v2; // esi@1
  Net *v3; // edi@1

  v1 = this;
  v2 = this->m_spWorldMgrNet.m_pObject;
  v3 = g_kNetMgr.m_spWorldMgr.m_pObject;
  if ( v2 != g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spWorldMgrNet.m_pObject = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount);
  }
  return 1;
}

//----- (0040D4E0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::TerminateNet(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // edi@1
  Net *v2; // esi@1

  v1 = this;
  v2 = this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
}

//----- (0040D520) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::InitShadow(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  NiNode *v2; // ecx@1
  NiTListItem<NiPointer<Shadow> > *v3; // edi@1
  unsigned int v4; // eax@1
  NiTListItem<NiPointer<Shadow> > *v5; // ST30_4@2
  void *v6; // eax@5
  int v7; // edi@5
  int v8; // eax@6
  void *v9; // eax@12
  unsigned int v10; // ebx@12
  unsigned int v11; // eax@13
  int v12; // edi@15
  NiNode *v13; // edi@21
  Shadow *v14; // ecx@21
  int v16; // [sp+34h] [bp-34h]@0
  int v17; // [sp+38h] [bp-30h]@0
  int v18; // [sp+3Ch] [bp-2Ch]@0
  int v19; // [sp+40h] [bp-28h]@0
  NiPoint3 kDefaultDirectionalLightDir; // [sp+44h] [bp-24h]@1
  Shadow *v21; // [sp+50h] [bp-18h]@5
  NiPointer<Shadow> spShadow; // [sp+54h] [bp-14h]@7
  unsigned int i; // [sp+58h] [bp-10h]@4
  int v24; // [sp+64h] [bp-4h]@5

  v1 = this;
  v2 = this->m_spShadowScene.m_pObject;
  kDefaultDirectionalLightDir.x = 4.0;
  v1->m_nMaxShadowObject = 6;
  kDefaultDirectionalLightDir.y = -45.0;
  kDefaultDirectionalLightDir.z = -17.0;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_kChildren);
  v3 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3;
      v3 = v3->m_pkNext;
      v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *)&v1->m_kShadowList,
        v5);
    }
    while ( v3 );
    v4 = 0;
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<Shadow> > *)v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<Shadow> > *)v4;
  for ( i = v4; i < v1->m_nMaxShadowObject; ++i )
  {
    v6 = operator new(0x84u);
    v21 = (Shadow *)v6;
    v7 = 0;
    v24 = 0;
    if ( v6 )
    {
      Shadow::Shadow((Shadow *)v6, &kDefaultDirectionalLightDir, 0, 0, 5u);
      v7 = v8;
    }
    spShadow.m_pObject = (Shadow *)v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)(v7 + 4));
    v24 = 1;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v1->m_kShadowList,
      (NiPointer<NiDX92DBufferData> *)&spShadow);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spShadowScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *(_DWORD *)(v7 + 116),
      0);
    v24 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  }
  v9 = operator new(0xE8u);
  v21 = (Shadow *)v9;
  v10 = 0;
  v24 = 2;
  if ( v9 )
  {
    NiNode::NiNode((NiNode *)v9, 0);
    i = v11;
  }
  else
  {
    i = 0;
  }
  v24 = -1;
  NiObjectNET::SetName((NiObjectNET *)i, "ShadowNode");
  v12 = (signed int)((char *)v1->m_vecBGObjectNode.baseclass_0._Mylast
                   - *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v12 )
  {
    do
    {
      ((void (__stdcall *)(NiPointer<Shadow> *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &spShadow,
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10));
      if ( spShadow.m_pObject )
      {
        v21 = spShadow.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spShadow.m_pObject->baseclass_0.m_uiRefCount) )
        {
          if ( v21 )
            ((void (__stdcall *)(signed int))v21->baseclass_0.vfptr->__vecDelDtor)(1);
        }
      }
      (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)i + 116))(
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10++),
        0);
    }
    while ( v10 < v12 );
  }
  v13 = (NiNode *)i;
  ((void (__stdcall *)(unsigned int, _DWORD, int, int, int, int, _DWORD, _DWORD, _DWORD, Shadow *, Shadow *))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    i,
    0,
    v16,
    v17,
    v18,
    v19,
    (_DWORD)kDefaultDirectionalLightDir.x,
    LODWORD(kDefaultDirectionalLightDir.y),
    LODWORD(kDefaultDirectionalLightDir.z),
    v21,
    spShadow.m_pObject);
  spShadow.m_pObject = (Shadow *)1;
  v21 = v14;
  NiAVObject::Update(&v1->m_spCharScene.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::UpdateProperties(&v1->m_spCharScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spCharScene.m_pObject->baseclass_0);
  CharSelectFrameWork::ApplyTerrain(v1, v13);
  return 1;
}

//----- (0040D780) --------------------------------------------------------
void __thiscall CharSelectFrameWork::CharSelectFrameWork(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  MsgBox *v2; // edi@1
  int v3; // eax@6
  int v4; // edi@7
  bool v5; // zf@12
  signed int v6; // [sp+4h] [bp-14h]@6
  int v7; // [sp+8h] [bp-10h]@6

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&CharSelectFrameWork::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_spCharSelectEffect,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_aspFairy.m_pObject = 0;
  NpNs_MoveToTarget::NpNs_MoveToTarget(&v1->m_kMoveToTarget);
  _eh_vector_constructor_iterator_(
    v1->m_aspRandomPos,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspAngelPos,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspAvatarPos,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spBackgroundScene.m_pObject = 0;
  v1->m_spCharScene.m_pObject = 0;
  v1->m_spCamera.m_pObject = 0;
  v1->m_spkMsgBox.m_pObject = 0;
  v1->m_spWorldMgrNet.m_pObject = 0;
  v1->m_spShadowScene.m_pObject = 0;
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  v1->m_pkCharSelectMenuWin = 0;
  v1->m_pkEventFriendCountWin = 0;
  v1->m_iEraseSlot = -1;
  v1->m_pkPick = 0;
  v1->m_bDuringLogin = 0;
  v2 = v1->m_spkMsgBox.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spkMsgBox.m_pObject = 0;
  }
  v3 = (int)v1->m_spCharSelectEffect;
  v1->m_bDelAvaActivityMsgCheck = 0;
  v7 = (int)v1->m_spCharSelectEffect;
  v6 = 6;
  do
  {
    v4 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      {
        if ( v4 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      }
      *(_DWORD *)v7 = 0;
    }
    v3 = v7 + 4;
    v5 = v6-- == 1;
    v7 += 4;
  }
  while ( !v5 );
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 979F74: using guessed type int (__stdcall *CharSelectFrameWork___vftable_)(int uiFlags);

//----- (0040D990) --------------------------------------------------------
void __thiscall CharSelectFrameWork::_CharSelectFrameWork(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  PgWin *v2; // eax@1
  MsgBox *v3; // edi@3
  int v4; // edi@12
  NiTListItem<NiPointer<Shadow> > *v5; // ebx@12
  NiTListItem<NiPointer<Shadow> > *v6; // ST0C_4@13
  NiNode *v7; // edi@14
  Net *v8; // edi@18
  MsgBox *v9; // edi@22
  NiCamera *v10; // edi@26
  NiNode *v11; // edi@30
  NiSortAdjustNode *v12; // edi@34
  NiNode *v13; // edi@38
  void *v14; // ST0C_4@42

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&CharSelectFrameWork::_vftable_;
  v2 = (PgWin *)this->m_spkMsgBox.m_pObject;
  if ( v2 )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v2);
  v3 = v1->m_spkMsgBox.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spkMsgBox.m_pObject = 0;
  }
  if ( *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]);
  v4 = (int)&v1->m_kShadowList;
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v5 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5;
    v5 = v5->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4 + 8))(&v1->m_kShadowList, v6);
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v4 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  v7 = v1->m_spShadowScene.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spWorldMgrNet.m_pObject;
  if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.m_uiRefCount) && v8 )
    v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spkMsgBox.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  v10 = v1->m_spCamera.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_spCharScene.m_pObject;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v12 = v1->m_spBackgroundScene.m_pObject;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_aspAvatarPos,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspAngelPos,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspRandomPos,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&v1->m_kMoveToTarget);
  v13 = v1->m_aspFairy.m_pObject;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_spCharSelectEffect,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v14 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v14);
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 979F74: using guessed type int (__stdcall *CharSelectFrameWork___vftable_)(int uiFlags);

//----- (0040DC30) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::InitBackgroundScene(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // edi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  NiSortAdjustNode *v5; // esi@3
  NiNode *v6; // esi@10
  void *v7; // eax@15
  int v8; // eax@16
  int v9; // ebx@16
  NiNode *v10; // esi@18
  float v11; // ebx@25
  void *v12; // eax@25
  float v13; // esi@25
  CharSelectFrameWork *v14; // ecx@27
  NiNode *v15; // esi@27
  void *v16; // eax@29
  float v17; // esi@29
  CharSelectFrameWork *v18; // edx@34
  void *v19; // eax@36
  float v20; // esi@36
  CharSelectFrameWork *v21; // eax@39
  void *v22; // eax@41
  volatile LONG *v23; // eax@42
  CharSelectFrameWork *v24; // edi@44
  NiNode *v25; // esi@44
  void *v26; // eax@52
  int v27; // eax@53
  int v28; // esi@53
  int v29; // eax@55
  void *v30; // eax@55
  int v31; // eax@56
  int v32; // esi@56
  int v33; // eax@58
  float v34; // edx@58
  float v35; // ecx@58
  float v36; // edx@58
  NiNode *v37; // ST80_4@58
  char *v38; // eax@60
  NiNode *v39; // eax@60
  int v40; // ebx@61
  int v41; // eax@62
  int v42; // edi@62
  int v43; // esi@63
  bool result; // al@68
  int v45; // eax@69
  char v46; // al@72
  int v47; // edi@74
  int v48; // eax@82
  char *v49; // eax@84
  char *v50; // edi@84
  int v51; // esi@84
  signed int v52; // ebx@86
  unsigned int v53; // eax@87
  unsigned int v54; // edi@87
  int v55; // edx@88
  int v56; // ecx@89
  signed int v57; // edi@89
  int v58; // eax@90
  int v59; // eax@91
  int v60; // ecx@91
  unsigned int v61; // ecx@93
  int v62; // eax@99
  int v63; // edi@99
  int v64; // ecx@101
  int v65; // eax@102
  int v66; // eax@103
  int v67; // ecx@103
  unsigned int v68; // ecx@105
  int v69; // eax@110
  float v70; // eax@112
  char *v71; // ecx@113
  char *v72; // ebx@113
  int v73; // edi@113
  int v74; // edx@115
  unsigned int v75; // eax@116
  int v76; // ebx@117
  int v77; // ecx@118
  signed int v78; // edx@118
  int v79; // eax@119
  int v80; // eax@121
  int v81; // ecx@121
  unsigned int v82; // ecx@123
  int v83; // edx@128
  int v84; // eax@128
  int v85; // ecx@130
  int v86; // eax@131
  int v87; // eax@133
  int v88; // ecx@133
  unsigned int v89; // ecx@135
  int v90; // eax@140
  int v91; // ebx@143
  int v92; // esi@143
  unsigned int v93; // eax@144
  int v94; // edx@145
  int v95; // ecx@146
  signed int v96; // esi@146
  int v97; // eax@147
  int v98; // eax@149
  int v99; // ecx@149
  unsigned int v100; // ecx@151
  int v101; // eax@156
  int v102; // esi@156
  int v103; // ecx@158
  int v104; // eax@159
  int v105; // eax@161
  int v106; // ecx@161
  unsigned int v107; // ecx@163
  int v108; // eax@168
  int v109; // esi@171
  unsigned int v110; // eax@172
  int v111; // edx@173
  int v112; // ecx@174
  signed int v113; // esi@174
  int v114; // eax@175
  int v115; // eax@177
  int v116; // ecx@177
  unsigned int v117; // ecx@179
  int v118; // eax@184
  int v119; // esi@184
  int v120; // ecx@186
  int v121; // eax@187
  int v122; // eax@189
  int v123; // ecx@189
  unsigned int v124; // ecx@191
  int v125; // eax@196
  int v126; // esi@199
  unsigned int v127; // eax@200
  int v128; // edx@201
  int v129; // ecx@202
  signed int v130; // esi@202
  int v131; // eax@203
  int v132; // eax@205
  int v133; // ecx@205
  unsigned int v134; // ecx@207
  int v135; // eax@212
  int v136; // esi@212
  int v137; // ecx@214
  int v138; // eax@215
  int v139; // eax@217
  int v140; // ecx@217
  unsigned int v141; // ecx@219
  int v142; // eax@224
  int v143; // esi@227
  unsigned int v144; // eax@228
  int v145; // edx@229
  int v146; // ecx@230
  signed int v147; // esi@230
  int v148; // eax@231
  int v149; // eax@233
  int v150; // ecx@233
  unsigned int v151; // ecx@235
  int v152; // eax@240
  int v153; // esi@240
  int v154; // ecx@242
  int v155; // eax@243
  int v156; // eax@245
  int v157; // ecx@245
  unsigned int v158; // ecx@247
  int v159; // eax@252
  int v160; // esi@255
  unsigned int v161; // eax@256
  int v162; // edx@257
  int v163; // ecx@258
  signed int v164; // esi@258
  int v165; // eax@259
  int v166; // eax@261
  int v167; // ecx@261
  unsigned int v168; // ecx@263
  int v169; // eax@268
  int v170; // esi@268
  int v171; // ecx@270
  int v172; // eax@271
  int v173; // eax@273
  int v174; // ecx@273
  unsigned int v175; // ecx@275
  int v176; // eax@280
  PgFrameWork *v177; // eax@283
  unsigned int v178; // eax@284
  int v179; // eax@289
  char v180; // cl@290
  void *v181; // edi@291
  char v182; // al@292
  NiNode *v183; // esi@293
  LONG (__stdcall *v184)(volatile LONG *); // ebx@294
  NiNode *v185; // edi@296
  int v186; // eax@300
  char v187; // cl@301
  void *v188; // edi@302
  char v189; // al@303
  int v190; // edi@304
  NiNode *v191; // esi@304
  int v192; // esi@321
  NiAlphaProperty *v193; // esi@323
  NiCamera *v194; // esi@326
  float v195; // eax@331
  CharSelectFrameWork *v196; // esi@333
  int v197; // esi@335
  NiAlphaProperty *v198; // esi@337
  unsigned int v199; // [sp+80h] [bp-98h]@1
  float pkCamera; // [sp+94h] [bp-84h]@61
  float v201; // [sp+98h] [bp-80h]@55
  float v202; // [sp+9Ch] [bp-7Ch]@55
  float v203; // [sp+A0h] [bp-78h]@55
  NiPointer<NiNode> spNode; // [sp+A4h] [bp-74h]@58
  NiPointer<NiAlphaProperty> spkAlphaProp; // [sp+A8h] [bp-70h]@25
  int v206; // [sp+ACh] [bp-6Ch]@32
  void *v207; // [sp+B0h] [bp-68h]@34
  CharSelectFrameWork *v208; // [sp+B4h] [bp-64h]@1
  volatile LONG *lpAddend; // [sp+B8h] [bp-60h]@42
  int v210; // [sp+BCh] [bp-5Ch]@60
  float k; // [sp+C0h] [bp-58h]@1
  unsigned int i; // [sp+C4h] [bp-54h]@61
  char acObjName[64]; // [sp+C8h] [bp-50h]@62
  unsigned int v214; // [sp+108h] [bp-10h]@1
  int v215; // [sp+114h] [bp-4h]@1
  int v216; // [sp+118h] [bp+0h]@1

  v214 = (unsigned int)&v216 ^ __security_cookie;
  v199 = (unsigned int)&v216 ^ __security_cookie;
  v1 = this;
  v208 = this;
  v2 = operator new(0xECu);
  LODWORD(k) = v2;
  v3 = 0;
  v215 = 0;
  if ( v2 )
  {
    NiSortAdjustNode::NiSortAdjustNode((NiSortAdjustNode *)v2);
    v3 = v4;
  }
  v5 = v1->m_spBackgroundScene.m_pObject;
  v215 = -1;
  if ( v5 != (NiSortAdjustNode *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spBackgroundScene.m_pObject = (NiSortAdjustNode *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v1->m_spBackgroundScene.m_pObject->m_eSortingMode = 0;
  v6 = v1->m_spShadowScene.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spShadowScene.m_pObject = 0;
  }
  v7 = operator new(0xE8u);
  LODWORD(k) = v7;
  v215 = 1;
  if ( v7 )
  {
    NiNode::NiNode((NiNode *)v7, 0);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  v10 = v1->m_spShadowScene.m_pObject;
  v215 = -1;
  if ( v10 != (NiNode *)v9 )
  {
    if ( v10
      && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v1->m_spShadowScene.m_pObject = (NiNode *)v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)(v9 + 4));
  }
  LODWORD(v11) = 0;
  spkAlphaProp.m_pObject = 0;
  v215 = 2;
  v12 = operator new(0x20u);
  LODWORD(v13) = v12;
  LODWORD(k) = v12;
  LOBYTE(v215) = 3;
  if ( v12 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v12);
    *(_BYTE *)(LODWORD(v13) + 30) = 0;
    *LODWORD(v13) = &NiAlphaProperty::_vftable_;
    *(_WORD *)(LODWORD(v13) + 28) = 236;
    v11 = v13;
    spkAlphaProp.m_pObject = (NiAlphaProperty *)LODWORD(v13);
    InterlockedIncrement((volatile LONG *)(LODWORD(v13) + 4));
  }
  *(_WORD *)(LODWORD(v11) + 28) |= 1u;
  *(_WORD *)(LODWORD(v11) + 28) |= 0x200u;
  *(_WORD *)(LODWORD(v11) + 28) = *(_WORD *)(LODWORD(v11) + 28) & 0xF3FF | 0x1000;
  *(_BYTE *)(LODWORD(v11) + 30) = 8;
  v14 = v208;
  *(_WORD *)(LODWORD(v11) + 28) = (*(_WORD *)(LODWORD(v11) + 28) & 0xFE5F | 0x40) & 0xFFE3 | 2;
  v15 = v14->m_spShadowScene.m_pObject;
  k = v11;
  InterlockedIncrement((volatile LONG *)(LODWORD(v11) + 4));
  LOBYTE(v215) = 4;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v15->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&k);
  LOBYTE(v215) = 2;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v11) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v11))(LODWORD(v11), 1);
  v16 = operator new(0x28u);
  LODWORD(v17) = v16;
  LODWORD(k) = v16;
  LOBYTE(v215) = 5;
  if ( v16 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v16);
    *LODWORD(v17) = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(LODWORD(v17) + 28) = 0;
    *(_DWORD *)(LODWORD(v17) + 32) = 0;
    *(_DWORD *)(LODWORD(v17) + 36) = 1;
  }
  else
  {
    LODWORD(v17) = 0;
  }
  v206 = LODWORD(v17);
  if ( LODWORD(v17) )
    InterlockedIncrement((volatile LONG *)(LODWORD(v17) + 4));
  v18 = v208;
  *(_DWORD *)(LODWORD(v17) + 32) = 1;
  *(_DWORD *)(LODWORD(v17) + 36) = 1;
  v207 = v18->m_spShadowScene.m_pObject;
  k = v17;
  InterlockedIncrement((volatile LONG *)(LODWORD(v17) + 4));
  LOBYTE(v215) = 7;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v207 + 156),
    (NiPointer<NiRoom> *)&k);
  LOBYTE(v215) = 6;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v17) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v17))(LODWORD(v17), 1);
  v19 = operator new(0x30u);
  LODWORD(v20) = v19;
  LODWORD(k) = v19;
  LOBYTE(v215) = 8;
  if ( v19 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v19);
    *LODWORD(v20) = &NiFogProperty::_vftable_;
    *(float *)(LODWORD(v20) + 36) = 0.0;
    *(float *)(LODWORD(v20) + 40) = 0.0;
    *(float *)(LODWORD(v20) + 44) = 0.0;
    *(_WORD *)(LODWORD(v20) + 28) = 0;
    *(float *)(LODWORD(v20) + 32) = 1.0;
    *(_DWORD *)(LODWORD(v20) + 36) = NiColor::BLACK;
    *(_DWORD *)(LODWORD(v20) + 40) = dword_B6E000;
    *(_DWORD *)(LODWORD(v20) + 44) = dword_B6E004;
  }
  else
  {
    LODWORD(v20) = 0;
  }
  v21 = v208;
  *(_WORD *)(LODWORD(v20) + 28) &= 0xFFFEu;
  v207 = v21->m_spShadowScene.m_pObject;
  k = v20;
  InterlockedIncrement((volatile LONG *)(LODWORD(v20) + 4));
  LOBYTE(v215) = 9;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v207 + 156),
    (NiPointer<NiRoom> *)&k);
  LOBYTE(v215) = 6;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v20) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v20))(LODWORD(v20), 1);
  v22 = operator new(0xE8u);
  LODWORD(k) = v22;
  LOBYTE(v215) = 10;
  if ( v22 )
  {
    NiNode::NiNode((NiNode *)v22, 0);
    lpAddend = v23;
  }
  else
  {
    lpAddend = 0;
    v23 = 0;
  }
  v24 = v208;
  v25 = v208->m_spCharScene.m_pObject;
  LOBYTE(v215) = 6;
  if ( (volatile LONG *)v25 != v23 )
  {
    if ( v25 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v25 )
        v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
      v23 = lpAddend;
    }
    v208->m_spCharScene.m_pObject = (NiNode *)v23;
    if ( v23 )
      InterlockedIncrement(v23 + 1);
  }
  v26 = operator new(0x10Cu);
  LODWORD(k) = v26;
  LOBYTE(v215) = 11;
  if ( v26 )
  {
    NiAmbientLight::NiAmbientLight((NiAmbientLight *)v26);
    v28 = v27;
  }
  else
  {
    v28 = 0;
  }
  *(_DWORD *)(v28 + 188) += 2;
  *(float *)(v28 + 224) = 1.0;
  LOBYTE(v215) = 6;
  v201 = 0.80000001;
  v202 = 0.80000001;
  v203 = 0.80000001;
  *(float *)(v28 + 228) = 0.80000001;
  *(float *)(v28 + 232) = 0.80000001;
  *(float *)(v28 + 236) = 0.80000001;
  v29 = *(_DWORD *)(v28 + 188);
  *(_DWORD *)(v28 + 240) = NiColor::WHITE;
  *(_DWORD *)(v28 + 244) = dword_A88D90;
  *(_DWORD *)(v28 + 248) = dword_A88D94;
  ++v29;
  *(_DWORD *)(v28 + 188) = v29;
  *(_DWORD *)(v28 + 252) = NiColor::BLACK;
  *(_DWORD *)(v28 + 256) = dword_B6E000;
  *(_DWORD *)(v28 + 260) = dword_B6E004;
  *(_DWORD *)(v28 + 188) = v29 + 1;
  NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v28, v24->m_spCharScene.m_pObject);
  *(_BYTE *)(v28 + 176) = 1;
  ((void (__stdcall *)(int, _DWORD, unsigned int))v24->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v28,
    0,
    v199);
  v30 = operator new(0x118u);
  LODWORD(k) = v30;
  LOBYTE(v215) = 12;
  if ( v30 )
  {
    NiDirectionalLight::NiDirectionalLight((NiDirectionalLight *)v30);
    v32 = v31;
  }
  else
  {
    v32 = 0;
  }
  ++*(_DWORD *)(v32 + 188);
  v33 = *(_DWORD *)(v32 + 188);
  *(float *)(v32 + 224) = 1.0;
  v201 = 1.0;
  *(_DWORD *)(v32 + 228) = NiColor::BLACK;
  v202 = 1.0;
  v203 = 1.0;
  *(_DWORD *)(v32 + 232) = dword_B6E000;
  v34 = v201;
  *(_DWORD *)(v32 + 236) = dword_B6E004;
  v35 = v202;
  *(_DWORD *)(v32 + 240) = LODWORD(v34);
  v36 = v203;
  *(_DWORD *)(v32 + 244) = LODWORD(v35);
  v33 += 2;
  *(_DWORD *)(v32 + 188) = v33;
  *(_DWORD *)(v32 + 248) = LODWORD(v36);
  *(_DWORD *)(v32 + 252) = NiColor::BLACK;
  *(_DWORD *)(v32 + 256) = dword_B6E000;
  *(_DWORD *)(v32 + 260) = dword_B6E004;
  *(_DWORD *)(v32 + 188) = v33 + 1;
  v37 = v24->m_spCharScene.m_pObject;
  LOBYTE(v215) = 6;
  NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v32, v37);
  *(_BYTE *)(v32 + 176) = 1;
  ((void (__stdcall *)(int, _DWORD))v24->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v32,
    0);
  spNode.m_pObject = 0;
  LOBYTE(v215) = 13;
  if ( !Folder::m_bInit )
    Folder::Init();
  v38 = Folder::Merge(&Folder::m_acMenu, "\\CharSelect\\selectBack.nif");
  v39 = PgUtil::LoadNifFile(v38, 0, 1);
  v210 = (int)v39;
  if ( v39 )
  {
    spNode.m_pObject = v39;
    lpAddend = (volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    InterlockedIncrement((volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LODWORD(pkCamera) = 0;
    i = 0;
    v207 = v24->m_aspAvatarPos;
    v40 = (int)v24->m_aspAvatarPos;
    do
    {
      sprintf(acObjName, "Avatar%d");
      v41 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v210 + 72))(acObjName);
      v42 = v41;
      if ( v41 )
      {
        v45 = (*(int (__thiscall **)(int))(*(_DWORD *)v41 + 4))(v41);
        if ( v45 )
        {
          while ( (NiRTTI *)v45 != &NiNode::m_RTTI )
          {
            v45 = *(_DWORD *)(v45 + 4);
            if ( !v45 )
              goto LABEL_72;
          }
          v46 = 1;
        }
        else
        {
LABEL_72:
          v46 = 0;
        }
        v43 = v46 != 0 ? v42 : 0;
      }
      else
      {
        v43 = 0;
      }
      v47 = *(_DWORD *)v40;
      if ( *(_DWORD *)v40 != v43 )
      {
        if ( v47 && !InterlockedDecrement((volatile LONG *)(v47 + 4)) && v47 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v47)(v47, 1);
        *(_DWORD *)v40 = v43;
        if ( v43 )
          InterlockedIncrement((volatile LONG *)(v43 + 4));
      }
      if ( *(_DWORD *)v40 )
      {
        ((void (__stdcall *)(int, _DWORD))v208->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          *(_DWORD *)v40,
          0);
        v48 = *(_DWORD *)v40;
        k = fabs(1.0);
        *(float *)(v48 + 100) = k;
      }
      v40 += 4;
      ++i;
    }
    while ( i < 6 );
    ((void (__stdcall *)(int, _DWORD))v208->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v210,
      0);
    ((void (__stdcall *)(NiNode *, _DWORD))v208->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v208->m_spCharScene.m_pObject,
      0);
    v49 = (char *)v208->m_vecShadowObject.baseclass_0._Mylast;
    v50 = *(char **)&v208->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
    v51 = (int)&v208->m_vecShadowObject;
    if ( v50 != v49 )
    {
      memmove(v50, v49, 0);
      v208->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)v50;
    }
    k = 0.0;
    v52 = 4;
    do
    {
      v53 = *(_DWORD *)(v51 + 4);
      v54 = *(_DWORD *)v207;
      i = *(_DWORD *)v207;
      if ( (unsigned int)&i >= v53 || (v55 = *(_DWORD *)v51, *(_DWORD *)v51 > (unsigned int)&i) )
      {
        v64 = *(_DWORD *)(v51 + 8);
        if ( v53 == v64 )
        {
          v65 = (signed int)(v53 - *(_DWORD *)v51) >> 2;
          if ( (unsigned int)v65 > 0x3FFFFFFE )
            goto LABEL_120;
          v66 = v65 + 1;
          v67 = (v64 - *(_DWORD *)v51) >> 2;
          if ( v66 > (unsigned int)v67 )
          {
            if ( 1073741823 - ((unsigned int)v67 >> 1) >= v67 )
              v68 = ((unsigned int)v67 >> 1) + v67;
            else
              v68 = 0;
            if ( v68 < v66 )
              v68 = v66;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v51,
              v68);
            v52 = 4;
          }
        }
        v69 = *(_DWORD *)(v51 + 4);
        if ( v69 )
          *(_DWORD *)v69 = v54;
      }
      else
      {
        v56 = *(_DWORD *)(v51 + 8);
        v57 = (signed int)((char *)&i - v55) >> 2;
        if ( v53 == v56 )
        {
          v58 = (signed int)(v53 - v55) >> 2;
          if ( (unsigned int)v58 > 0x3FFFFFFE )
            goto LABEL_120;
          v59 = v58 + 1;
          v60 = (v56 - v55) >> 2;
          if ( v59 > (unsigned int)v60 )
          {
            if ( 1073741823 - ((unsigned int)v60 >> 1) >= v60 )
              v61 = ((unsigned int)v60 >> 1) + v60;
            else
              v61 = 0;
            if ( v61 < v59 )
              v61 = v59;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v51,
              v61);
            v52 = 4;
          }
        }
        v62 = *(_DWORD *)(v51 + 4);
        v63 = *(_DWORD *)v51 + 4 * v57;
        if ( v62 )
          *(_DWORD *)v62 = *(_DWORD *)v63;
      }
      v70 = k;
      *(_DWORD *)(v51 + 4) += v52;
      v207 = (char *)v207 + v52;
      LODWORD(k) = LODWORD(v70) + 1;
    }
    while ( (unsigned int)(LODWORD(v70) + 1) < 6 );
    v71 = (char *)v208->m_vecBGObjectNode.baseclass_0._Mylast;
    v72 = *(char **)&v208->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
    v73 = (int)&v208->m_vecBGObjectNode;
    if ( v72 != v71 )
    {
      k = 0.0;
      memmove(v72, v71, 0);
      v208->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)&v72[LODWORD(k)];
    }
    v74 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v210 + 72))("Object02");
    i = v74;
    if ( v74 )
    {
      v75 = *(_DWORD *)(v51 + 4);
      if ( (unsigned int)&i >= v75 || (v76 = *(_DWORD *)v51, *(_DWORD *)v51 > (unsigned int)&i) )
      {
        v85 = *(_DWORD *)(v51 + 8);
        if ( v75 == v85 )
        {
          v86 = (signed int)(v75 - *(_DWORD *)v51) >> 2;
          if ( (unsigned int)v86 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v87 = v86 + 1;
          v88 = (v85 - *(_DWORD *)v51) >> 2;
          if ( v87 > (unsigned int)v88 )
          {
            if ( 1073741823 - ((unsigned int)v88 >> 1) >= v88 )
              v89 = ((unsigned int)v88 >> 1) + v88;
            else
              v89 = 0;
            if ( v89 < v87 )
              v89 = v87;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v51,
              v89);
            v74 = i;
          }
        }
        v90 = *(_DWORD *)(v51 + 4);
        if ( v90 )
          *(_DWORD *)v90 = v74;
      }
      else
      {
        v77 = *(_DWORD *)(v51 + 8);
        v78 = (signed int)((char *)&i - v76) >> 2;
        LODWORD(k) = (signed int)((char *)&i - v76) >> 2;
        if ( v75 == v77 )
        {
          v79 = (signed int)(v75 - v76) >> 2;
          if ( (unsigned int)v79 > 0x3FFFFFFE )
LABEL_120:
            std::_Xlength_error("vector<T> too long");
          v80 = v79 + 1;
          v81 = (v77 - v76) >> 2;
          if ( v80 > (unsigned int)v81 )
          {
            if ( 1073741823 - ((unsigned int)v81 >> 1) >= v81 )
              v82 = ((unsigned int)v81 >> 1) + v81;
            else
              v82 = 0;
            if ( v82 < v80 )
              v82 = v80;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v51,
              v82);
            v78 = LODWORD(k);
          }
        }
        v83 = *(_DWORD *)v51 + 4 * v78;
        v84 = *(_DWORD *)(v51 + 4);
        if ( v84 )
          *(_DWORD *)v84 = *(_DWORD *)v83;
      }
      *(_DWORD *)(v51 + 4) += 4;
    }
    v91 = v210;
    v92 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v210 + 72))(v210, "Object03");
    i = v92;
    if ( v92 )
    {
      v93 = *(_DWORD *)(v73 + 4);
      if ( (unsigned int)&i >= v93 || (v94 = *(_DWORD *)v73, *(_DWORD *)v73 > (unsigned int)&i) )
      {
        v103 = *(_DWORD *)(v73 + 8);
        if ( v93 == v103 )
        {
          v104 = (signed int)(v93 - *(_DWORD *)v73) >> 2;
          if ( (unsigned int)v104 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v105 = v104 + 1;
          v106 = (v103 - *(_DWORD *)v73) >> 2;
          if ( v105 > (unsigned int)v106 )
          {
            if ( 1073741823 - ((unsigned int)v106 >> 1) >= v106 )
              v107 = ((unsigned int)v106 >> 1) + v106;
            else
              v107 = 0;
            if ( v107 < v105 )
              v107 = v105;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v107);
            v91 = v210;
          }
        }
        v108 = *(_DWORD *)(v73 + 4);
        if ( v108 )
          *(_DWORD *)v108 = v92;
      }
      else
      {
        v95 = *(_DWORD *)(v73 + 8);
        v96 = (signed int)((char *)&i - v94) >> 2;
        if ( v93 == v95 )
        {
          v97 = (signed int)(v93 - v94) >> 2;
          if ( (unsigned int)v97 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v98 = v97 + 1;
          v99 = (v95 - v94) >> 2;
          if ( v98 > (unsigned int)v99 )
          {
            if ( 1073741823 - ((unsigned int)v99 >> 1) >= v99 )
              v100 = ((unsigned int)v99 >> 1) + v99;
            else
              v100 = 0;
            if ( v100 < v98 )
              v100 = v98;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v100);
            v91 = v210;
          }
        }
        v101 = *(_DWORD *)(v73 + 4);
        v102 = *(_DWORD *)v73 + 4 * v96;
        if ( v101 )
          *(_DWORD *)v101 = *(_DWORD *)v102;
      }
      *(_DWORD *)(v73 + 4) += 4;
    }
    v109 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v91 + 72))(v91, "Object04");
    i = v109;
    if ( v109 )
    {
      v110 = *(_DWORD *)(v73 + 4);
      if ( (unsigned int)&i >= v110 || (v111 = *(_DWORD *)v73, *(_DWORD *)v73 > (unsigned int)&i) )
      {
        v120 = *(_DWORD *)(v73 + 8);
        if ( v110 == v120 )
        {
          v121 = (signed int)(v110 - *(_DWORD *)v73) >> 2;
          if ( (unsigned int)v121 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v122 = v121 + 1;
          v123 = (v120 - *(_DWORD *)v73) >> 2;
          if ( v122 > (unsigned int)v123 )
          {
            if ( 1073741823 - ((unsigned int)v123 >> 1) >= v123 )
              v124 = ((unsigned int)v123 >> 1) + v123;
            else
              v124 = 0;
            if ( v124 < v122 )
              v124 = v122;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v124);
            v91 = v210;
          }
        }
        v125 = *(_DWORD *)(v73 + 4);
        if ( v125 )
          *(_DWORD *)v125 = v109;
      }
      else
      {
        v112 = *(_DWORD *)(v73 + 8);
        v113 = (signed int)((char *)&i - v111) >> 2;
        if ( v110 == v112 )
        {
          v114 = (signed int)(v110 - v111) >> 2;
          if ( (unsigned int)v114 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v115 = v114 + 1;
          v116 = (v112 - v111) >> 2;
          if ( v115 > (unsigned int)v116 )
          {
            if ( 1073741823 - ((unsigned int)v116 >> 1) >= v116 )
              v117 = ((unsigned int)v116 >> 1) + v116;
            else
              v117 = 0;
            if ( v117 < v115 )
              v117 = v115;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v117);
            v91 = v210;
          }
        }
        v118 = *(_DWORD *)(v73 + 4);
        v119 = *(_DWORD *)v73 + 4 * v113;
        if ( v118 )
          *(_DWORD *)v118 = *(_DWORD *)v119;
      }
      *(_DWORD *)(v73 + 4) += 4;
    }
    v126 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v91 + 72))(v91, "Object07");
    i = v126;
    if ( v126 )
    {
      v127 = *(_DWORD *)(v73 + 4);
      if ( (unsigned int)&i >= v127 || (v128 = *(_DWORD *)v73, *(_DWORD *)v73 > (unsigned int)&i) )
      {
        v137 = *(_DWORD *)(v73 + 8);
        if ( v127 == v137 )
        {
          v138 = (signed int)(v127 - *(_DWORD *)v73) >> 2;
          if ( (unsigned int)v138 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v139 = v138 + 1;
          v140 = (v137 - *(_DWORD *)v73) >> 2;
          if ( v139 > (unsigned int)v140 )
          {
            if ( 1073741823 - ((unsigned int)v140 >> 1) >= v140 )
              v141 = ((unsigned int)v140 >> 1) + v140;
            else
              v141 = 0;
            if ( v141 < v139 )
              v141 = v139;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v141);
            v91 = v210;
          }
        }
        v142 = *(_DWORD *)(v73 + 4);
        if ( v142 )
          *(_DWORD *)v142 = v126;
      }
      else
      {
        v129 = *(_DWORD *)(v73 + 8);
        v130 = (signed int)((char *)&i - v128) >> 2;
        if ( v127 == v129 )
        {
          v131 = (signed int)(v127 - v128) >> 2;
          if ( (unsigned int)v131 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v132 = v131 + 1;
          v133 = (v129 - v128) >> 2;
          if ( v132 > (unsigned int)v133 )
          {
            if ( 1073741823 - ((unsigned int)v133 >> 1) >= v133 )
              v134 = ((unsigned int)v133 >> 1) + v133;
            else
              v134 = 0;
            if ( v134 < v132 )
              v134 = v132;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v134);
            v91 = v210;
          }
        }
        v135 = *(_DWORD *)(v73 + 4);
        v136 = *(_DWORD *)v73 + 4 * v130;
        if ( v135 )
          *(_DWORD *)v135 = *(_DWORD *)v136;
      }
      *(_DWORD *)(v73 + 4) += 4;
    }
    v143 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v91 + 72))(v91, "Loft01");
    i = v143;
    if ( v143 )
    {
      v144 = *(_DWORD *)(v73 + 4);
      if ( (unsigned int)&i >= v144 || (v145 = *(_DWORD *)v73, *(_DWORD *)v73 > (unsigned int)&i) )
      {
        v154 = *(_DWORD *)(v73 + 8);
        if ( v144 == v154 )
        {
          v155 = (signed int)(v144 - *(_DWORD *)v73) >> 2;
          if ( (unsigned int)v155 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v156 = v155 + 1;
          v157 = (v154 - *(_DWORD *)v73) >> 2;
          if ( v156 > (unsigned int)v157 )
          {
            if ( 1073741823 - ((unsigned int)v157 >> 1) >= v157 )
              v158 = ((unsigned int)v157 >> 1) + v157;
            else
              v158 = 0;
            if ( v158 < v156 )
              v158 = v156;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v158);
            v91 = v210;
          }
        }
        v159 = *(_DWORD *)(v73 + 4);
        if ( v159 )
          *(_DWORD *)v159 = v143;
      }
      else
      {
        v146 = *(_DWORD *)(v73 + 8);
        v147 = (signed int)((char *)&i - v145) >> 2;
        if ( v144 == v146 )
        {
          v148 = (signed int)(v144 - v145) >> 2;
          if ( (unsigned int)v148 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v149 = v148 + 1;
          v150 = (v146 - v145) >> 2;
          if ( v149 > (unsigned int)v150 )
          {
            if ( 1073741823 - ((unsigned int)v150 >> 1) >= v150 )
              v151 = ((unsigned int)v150 >> 1) + v150;
            else
              v151 = 0;
            if ( v151 < v149 )
              v151 = v149;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v151);
            v91 = v210;
          }
        }
        v152 = *(_DWORD *)(v73 + 4);
        v153 = *(_DWORD *)v73 + 4 * v147;
        if ( v152 )
          *(_DWORD *)v152 = *(_DWORD *)v153;
      }
      *(_DWORD *)(v73 + 4) += 4;
    }
    v160 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v91 + 72))(v91, "Cylinder25");
    i = v160;
    if ( v160 )
    {
      v161 = *(_DWORD *)(v73 + 4);
      if ( (unsigned int)&i >= v161 || (v162 = *(_DWORD *)v73, *(_DWORD *)v73 > (unsigned int)&i) )
      {
        v171 = *(_DWORD *)(v73 + 8);
        if ( v161 == v171 )
        {
          v172 = (signed int)(v161 - *(_DWORD *)v73) >> 2;
          if ( (unsigned int)v172 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v173 = v172 + 1;
          v174 = (v171 - *(_DWORD *)v73) >> 2;
          if ( v173 > (unsigned int)v174 )
          {
            if ( 1073741823 - ((unsigned int)v174 >> 1) >= v174 )
              v175 = ((unsigned int)v174 >> 1) + v174;
            else
              v175 = 0;
            if ( v175 < v173 )
              v175 = v173;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v175);
            v91 = v210;
          }
        }
        v176 = *(_DWORD *)(v73 + 4);
        if ( v176 )
          *(_DWORD *)v176 = v160;
      }
      else
      {
        v163 = *(_DWORD *)(v73 + 8);
        v164 = (signed int)((char *)&i - v162) >> 2;
        if ( v161 == v163 )
        {
          v165 = (signed int)(v161 - v162) >> 2;
          if ( (unsigned int)v165 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v166 = v165 + 1;
          v167 = (v163 - v162) >> 2;
          if ( v166 > (unsigned int)v167 )
          {
            if ( 1073741823 - ((unsigned int)v167 >> 1) >= v167 )
              v168 = ((unsigned int)v167 >> 1) + v167;
            else
              v168 = 0;
            if ( v168 < v166 )
              v168 = v166;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v73,
              v168);
            v91 = v210;
          }
        }
        v169 = *(_DWORD *)(v73 + 4);
        v170 = *(_DWORD *)v73 + 4 * v164;
        if ( v169 )
          *(_DWORD *)v169 = *(_DWORD *)v170;
      }
      *(_DWORD *)(v73 + 4) += 4;
    }
    ((void (__stdcall *)(NiNode *, _DWORD))v208->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v208->m_spShadowScene.m_pObject,
      0);
    v177 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v177
      && ((v178 = GameFrameWork::GetDisplyAspect(
                    (GameFrameWork *)v177,
                    PgWin::ms_uiScreenWidth,
                    PgWin::ms_uiScreenHeight),
           v178 == 1)
       || v178 > 2 && v178 <= 4) )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v186 = 0;
      do
      {
        v187 = *(&Folder::m_acMenu + v186);
        *(&Folder::m_acMerge + v186++) = v187;
      }
      while ( v187 );
      v188 = &Folder::m_acMerge - 1;
      do
      {
        v189 = *((_BYTE *)v188 + 1);
        v188 = (char *)v188 + 1;
      }
      while ( v189 );
      memcpy(v188, "\\CharSelect\\SelectCam_16_9.nif", 0x1Cu);
      v190 = (int)((char *)v188 + 28);
      *(_WORD *)v190 = *(_WORD *)"if";
      *(_BYTE *)(v190 + 2) = aCharselectSe_1[30];
      v191 = PgUtil::LoadNifFile(&Folder::m_acMerge, 0, 1);
      if ( (NiNode *)v91 != v191 )
      {
        v184 = InterlockedDecrement;
        if ( !InterlockedDecrement(lpAddend) )
          (**(void (__stdcall ***)(_DWORD))v210)(1);
        v185 = v191;
        spNode.m_pObject = v191;
        if ( !v191 )
        {
LABEL_309:
          LOBYTE(v215) = 6;
          if ( v185 && !v184((volatile LONG *)&v185->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v185->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v185, 1u);
          LOBYTE(v215) = 2;
          if ( !v184((volatile LONG *)(v206 + 4)) )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v206)(v206, 1);
          v215 = -1;
          if ( !v184((volatile LONG *)&spkAlphaProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            spkAlphaProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
              (NiRefObject *)spkAlphaProp.m_pObject,
              1u);
          return 0;
        }
        lpAddend = (volatile LONG *)&v191->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
        InterlockedIncrement((volatile LONG *)&v191->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
LABEL_318:
        if ( PgUtil::CatchCamera(&v185->baseclass_0, (NiCamera **)&pkCamera) )
        {
          v194 = v208->m_spCamera.m_pObject;
          k = pkCamera;
          if ( v194 != LODWORD(pkCamera) )
          {
            if ( v194
              && !v184((volatile LONG *)&v194->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
              && v194 )
              v194->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v194, 1u);
            v195 = k;
            v208->m_spCamera.m_pObject = (NiCamera *)LODWORD(k);
            if ( LODWORD(v195) )
              InterlockedIncrement((volatile LONG *)(LODWORD(v195) + 4));
          }
          v196 = v208;
          ((void (__stdcall *)(NiNode *, _DWORD))v208->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v185,
            0);
          NiAVObject::UpdateProperties(&v196->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0);
          NiAVObject::UpdateEffects(&v196->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0);
          NiAVObject::Update(&v196->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0, 0.0, 1);
          LOBYTE(v215) = 6;
          if ( !v184(lpAddend) )
            v185->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v185, 1u);
          v197 = v206;
          LOBYTE(v215) = 2;
          if ( !v184((volatile LONG *)(v206 + 4)) )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v197)(v197, 1);
          v198 = spkAlphaProp.m_pObject;
          v215 = -1;
          if ( !v184((volatile LONG *)&spkAlphaProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v198->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v198, 1u);
          result = 1;
        }
        else
        {
          LOBYTE(v215) = 6;
          if ( !v184(lpAddend) )
            v185->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v185, 1u);
          v192 = v206;
          LOBYTE(v215) = 2;
          if ( !v184((volatile LONG *)(v206 + 4)) )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v192)(v192, 1);
          v193 = spkAlphaProp.m_pObject;
          v215 = -1;
          if ( !v184((volatile LONG *)&spkAlphaProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v193->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v193, 1u);
          result = 0;
        }
        return result;
      }
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v179 = 0;
      do
      {
        v180 = *(&Folder::m_acMenu + v179);
        *(&Folder::m_acMerge + v179++) = v180;
      }
      while ( v180 );
      v181 = &Folder::m_acMerge - 1;
      do
      {
        v182 = *((_BYTE *)v181 + 1);
        v181 = (char *)v181 + 1;
      }
      while ( v182 );
      memcpy(v181, "\\CharSelect\\SelectCam_4_3.nif", 0x1Eu);
      v183 = PgUtil::LoadNifFile(&Folder::m_acMerge, 0, 1);
      if ( (NiNode *)v91 != v183 )
      {
        v184 = InterlockedDecrement;
        if ( !InterlockedDecrement(lpAddend) )
          (**(void (__stdcall ***)(_DWORD))v210)(1);
        v185 = v183;
        spNode.m_pObject = v183;
        if ( v183 )
        {
          lpAddend = (volatile LONG *)&v183->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
          InterlockedIncrement((volatile LONG *)&v183->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
          goto LABEL_318;
        }
        goto LABEL_309;
      }
    }
    v185 = spNode.m_pObject;
    v184 = InterlockedDecrement;
    goto LABEL_318;
  }
  LOBYTE(v215) = 2;
  if ( !InterlockedDecrement((volatile LONG *)(v206 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v206)(v206, 1);
  v215 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v11) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v11))(LODWORD(v11), 1);
  return 0;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 9794FC: using guessed type int (__thiscall *NiFogProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A9541C: using guessed type char Folder__m_bInit;
// B6DFFC: using guessed type int NiColor__BLACK;
// B6E000: using guessed type int dword_B6E000;
// B6E004: using guessed type int dword_B6E004;

//----- (0040EDC0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::ReleaseShadow(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  NiNode **v2; // ecx@1
  char *v3; // edi@1
  char *v4; // ecx@3
  char *v5; // edi@3
  int v6; // edi@5
  NiTListItem<NiPointer<Shadow> > *v7; // esi@5
  NiTListItem<NiPointer<Shadow> > *v8; // ST08_4@6

  v1 = this;
  v2 = this->m_vecBGObjectNode.baseclass_0._Mylast;
  v3 = *(char **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (NiNode **)v3 != v2 )
  {
    memmove(v3, (char *)v2, 0);
    v1->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)v3;
  }
  v4 = (char *)v1->m_vecShadowObject.baseclass_0._Mylast;
  v5 = *(char **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v5 != v4 )
  {
    memmove(v5, v4, 0);
    v1->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)v5;
  }
  v6 = (int)&v1->m_kShadowList;
  v7 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v7 )
  {
    v8 = v7;
    v7 = v7->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 8))(v6, v8);
  }
  *(_DWORD *)(v6 + 12) = 0;
  *(_DWORD *)(v6 + 4) = 0;
  *(_DWORD *)(v6 + 8) = 0;
}

//----- (0040EE60) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::Init(CharSelectFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  CharSelectFrameWork *v2; // esi@1
  bool result; // al@2
  NiAudioSource *(__thiscall *v4)(SoundGroup *, SoundIndex *, bool, bool); // eax@9
  char *v5; // eax@11
  char *v6; // ST08_4@11
  CDataDocument *v7; // eax@11
  char v8; // [sp+4h] [bp-8h]@9
  int v9; // [sp+8h] [bp-4h]@9

  v2 = this;
  if ( CharSelectFrameWork::InitWindow(this)
    && CharSelectFrameWork::InitBackgroundScene(v2)
    && CharSelectFrameWork::InitAvatar(v2)
    && CharSelectFrameWork::InitNet(v2)
    && CharSelectFrameWork::InitShadow(v2) )
  {
    if ( !CharSelectFrameWork::ms_bFirstRun )
    {
      if ( g_kSoundMgr.m_pkNPCVoiceGroup )
      {
        v4 = g_kSoundMgr.m_pkNPCVoiceGroup->baseclass_0.baseclass_0.vfptr->PlaySoundA;
        v9 = (int)"s_title.wav";
        ((void (__stdcall *)(char *, _DWORD, _DWORD))v4)(&v8, 0, 0);
      }
      CharSelectFrameWork::ms_bFirstRun = 1;
    }
    World::Clear(&g_kWorld);
    Inventory::Clear(&g_kInventory);
    World::SetMapName(&g_kWorld, "-");
    v2->m_iEraseSlot = -1;
    v2->m_bDuringLogin = 0;
    v2->baseclass_0.m_bInit = 1;
    v5 = Folder::Menu();
    v6 = Folder::Merge(v5, "\\charselect\\charselect.conf");
    v7 = CDataDocument::Instance();
    CDataDocument::Load(v7, v6);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94396: using guessed type bool CharSelectFrameWork__ms_bFirstRun;

//----- (0040EF40) --------------------------------------------------------
void __thiscall CharSelectFrameWork::Terminate(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  Net *v2; // edi@1

  v1 = this;
  CharSelectFrameWork::ReleaseShadow(this);
  v2 = v1->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
  CharSelectFrameWork::TerminateAvatar(v1);
  CharSelectFrameWork::TerminateBackgroundScene(v1);
  CharSelectFrameWork::TerminateWindow(v1);
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.m_BackFrameID = 0;
}

//----- (0040EFA0) --------------------------------------------------------
NiRTTI *__thiscall CharSelectFrameWork::GetRTTI(CharSelectFrameWork *this)
{
  return &CharSelectFrameWork::m_RTTI;
}

//----- (0040EFB0) --------------------------------------------------------
const char *__thiscall CharSelectFrameWork::GetFrameWorkName(CharSelectFrameWork *this)
{
  return CharSelectFrameWork::m_RTTI.m_pcName;
}

//----- (0040EFC0) --------------------------------------------------------
void *__thiscall CharSelectFrameWork::_scalar_deleting_destructor_(CharSelectFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharSelectFrameWork::_CharSelectFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0040EFF0) --------------------------------------------------------
void __thiscall CharSelectMenuWin::EnableOKBut(CharSelectMenuWin *this, bool b)
{
  CharSelectMenuWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkOkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkDelCharBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
}

//----- (0040F030) --------------------------------------------------------
bool __usercall IsSpecialChar_0<al>(char c1<bl>, char c2)
{
  int v2; // eax@2
  BYTE v4; // [sp+0h] [bp-4h]@0

  return IsDBCSLeadByte(v4) && ((v2 = 94 * (unsigned __int8)c1 + (unsigned __int8)c2 - 16705, v2 < 0) || v2 >= 2350);
}

//----- (0040F070) --------------------------------------------------------
bool __usercall IsSpecialCharInStr_0<al>(char *pstr<eax>)
{
  char *v1; // esi@1
  char v3; // al@3
  char v4; // bl@5
  BYTE c1; // [sp+4h] [bp-4h]@4

  v1 = pstr;
  if ( !pstr )
    return 0;
  v3 = *pstr;
  if ( !v3 )
    return 0;
  while ( 1 )
  {
    c1 = v3;
    if ( !IsDBCSLeadByte(v3) )
    {
      ++v1;
      goto LABEL_9;
    }
    v4 = v1[1];
    if ( IsDBCSLeadByte(c1) )
    {
      if ( 94 * (unsigned __int8)c1 + (unsigned int)(unsigned __int8)v4 - 16705 > 0x92D )
        return 1;
    }
    v1 += 2;
LABEL_9:
    v3 = *v1;
    if ( !*v1 )
      return 0;
  }
}

//----- (0040F0F0) --------------------------------------------------------
bool __usercall IsSpecialCharInStr2_0<al>(char *pstr<ecx>)
{
  char *v1; // esi@1
  int v2; // eax@1
  char v3; // cl@2
  int v4; // ebx@3
  int v5; // esi@3
  int v6; // eax@6
  char temp[128]; // [sp+Ch] [bp-84h]@1
  unsigned int v9; // [sp+8Ch] [bp-4h]@1
  int v10; // [sp+90h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = pstr;
  memset(temp, 0, 0x64u);
  strncpy(temp, v1, 0x5Au);
  v2 = (int)temp;
  do
    v3 = *(_BYTE *)v2++;
  while ( v3 );
  v4 = v2 - (_DWORD)&temp[1];
  v5 = 0;
  if ( v2 - (signed int)&temp[1] <= 0 )
    return 0;
  while ( IsDBCSLeadByte(temp[v5]) )
  {
    ++v5;
LABEL_34:
    ++v5;
    if ( v5 >= v4 )
      return 0;
  }
  v6 = (unsigned __int8)temp[v5];
  if ( (_BYTE)v6 != 32
    && (_BYTE)v6 != 39
    && (_BYTE)v6 != 92
    && (_BYTE)v6 != 47
    && (_BYTE)v6 != 58
    && (_BYTE)v6 != 42
    && (_BYTE)v6 != 63
    && (_BYTE)v6 != 60
    && (_BYTE)v6 != 62
    && (_BYTE)v6 != 124
    && (_BYTE)v6 != 126
    && (_BYTE)v6 != 33
    && (_BYTE)v6 != 64
    && (_BYTE)v6 != 37
    && (_BYTE)v6 != 38
    && (_BYTE)v6 != 59
    && (_BYTE)v6 != 46
    && (_BYTE)v6 != 44
    && (_BYTE)v6 != 34
    && (_BYTE)v6 != 96
    && (_BYTE)v6 != 40
    && (_BYTE)v6 != 41
    && (_BYTE)v6 != 43
    && (_BYTE)v6 != 45
    && (_BYTE)v6 != 35
    && (_BYTE)v6 != 36
    && (_BYTE)v6 != 91
    && (_BYTE)v6 != 93 )
    goto LABEL_34;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0040F220) --------------------------------------------------------
bool __usercall IsPeculiarStr_0<al>(char *pcName<esi>)
{
  char *v1; // eax@1
  char v2; // cl@2
  char v3; // bl@3
  int v4; // edx@3
  unsigned int v5; // ecx@3
  char v6; // al@4
  bool result; // al@14

  v1 = pcName;
  do
    v2 = *v1++;
  while ( v2 );
  v3 = 0;
  v4 = v1 - (pcName + 1);
  v5 = 0;
  if ( v1 == pcName + 1 )
    goto LABEL_18;
  do
  {
    v6 = pcName[v5];
    if ( (v6 < 65 || v6 > 90) && (v6 < 97 || v6 > 122) )
    {
      if ( v6 < 48 || v6 > 57 )
      {
        if ( v6 != 95 )
          v3 = 1;
      }
    }
    ++v5;
  }
  while ( v5 < v4 );
  if ( v3 )
    result = 1;
  else
LABEL_18:
    result = 0;
  return result;
}

//----- (0040F280) --------------------------------------------------------
void __thiscall ChangeNameWin::OnClose(ChangeNameWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  ((void (__stdcall *)(_DWORD))this->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  PgWin::OnClose(v1);
}

//----- (0040F2B0) --------------------------------------------------------
void __thiscall ChangeNameWin::SetNameEdit(ChangeNameWin *this, const char *name)
{
  ChangeNameWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(name);
  ((void (*)(void))v2->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (0040F2E0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnCharEraseFailMsgClose(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1

  v1 = (PgFrameWork *)this;
  NetMgr::CloseAll(&g_kNetMgr);
  PgFrameWork::PostFrameMsgChange(v1, AccountFrameWorkID, 0);
}

//----- (0040F300) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnCharLoginFailMsgClose(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1

  v1 = (PgFrameWork *)this;
  NetMgr::CloseAll(&g_kNetMgr);
  PgFrameWork::PostFrameMsgChange(v1, AccountFrameWorkID, 0);
}

//----- (0040F320) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnZoneConnectFailMsgClose(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1

  v1 = (PgFrameWork *)this;
  NetMgr::CloseAll(&g_kNetMgr);
  PgFrameWork::PostFrameMsgChange(v1, AccountFrameWorkID, 0);
}

//----- (0040F340) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnZoneLoginFailMsgClose(CharSelectFrameWork *this)
{
  this->m_iEraseSlot = -1;
  this->m_bDuringLogin = 0;
  ((void (__stdcall *)(_DWORD))this->m_pkCharSelectMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(1);
}

//----- (0040F370) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnZoneLoginComplete(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1

  v1 = (PgFrameWork *)this;
  CharResMgr::RemoveAllCharActor(&g_kCharResMgr);
  CharResMgr::Init(&g_kCharResMgr);
  PgFrameWork::PostFrameMsgChange(v1, LoadingFrameWorkID, 0);
}

//----- (0040F3A0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnEraseMsgOk(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkCharSelectMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(0);
  CharSelectFrameWork::NcAvatarEraseReq(v1);
  v1->m_bDelAvaActivityMsgCheck = 0;
}

//----- (0040F3D0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnEraseMsgCancel(CharSelectFrameWork *this)
{
  this->m_bDelAvaActivityMsgCheck = 0;
  this->m_iEraseSlot = -1;
  ((void (__stdcall *)(_DWORD))this->m_pkCharSelectMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(1);
}

//----- (0040F400) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnErrorGotoAccount(CharSelectFrameWork *this)
{
  PgFrameWork::PostFrameMsgChange(&this->baseclass_0, AccountFrameWorkID, 0);
}

//----- (0040F410) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnTutorialPopupMsg(CharSelectFrameWork *this, bool bIsSkip)
{
  CharSelectFrameWork::NcCharTutorialPopupAck(this, bIsSkip);
}

//----- (0040F420) --------------------------------------------------------
void __thiscall ChangeNameWin::_ChangeNameWin(ChangeNameWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChangeNameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChangeNameWin::_vftable_;
  this->m_pkInputEdit = 0;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 97A0AC: using guessed type int (__stdcall *ChangeNameWin___vftable_)(int uiFlags);
// 97A0CC: using guessed type int (__thiscall *ChangeNameWin___vftable_)(void *p, char);

//----- (0040F4A0) --------------------------------------------------------
void __thiscall ChangeNameWin::OnShowWin(ChangeNameWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_apkTextWin[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_979FEB);
}

//----- (0040F4C0) --------------------------------------------------------
char __thiscall ChangeNameWin::FindCharSlot(ChangeNameWin *this, char *pcName)
{
  int v2; // edi@2
  PROTO_AVATARINFORMATION *v3; // eax@3
  PROTO_AVATARINFORMATION *v4; // esi@3
  int v5; // ecx@4
  int v6; // edx@4
  int v7; // eax@4
  int v8; // ecx@4
  int v9; // eax@7
  char Name[21]; // [sp+Ch] [bp-1Ch]@4
  unsigned int v12; // [sp+24h] [bp-4h]@1
  int v13; // [sp+28h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  if ( pcName )
  {
    v2 = 0;
    while ( 1 )
    {
      v3 = User::GetAvatarInfo(&g_kUser, v2);
      v4 = v3;
      if ( v3 )
      {
        v5 = *(_DWORD *)&v3->name.n5_name[4];
        v6 = *(_DWORD *)&v3->name.n5_name[8];
        *(_DWORD *)Name = *(_DWORD *)&v3->name.n5_name[0];
        v7 = *(_DWORD *)&v3->name.n5_name[12];
        *(_DWORD *)&Name[4] = v5;
        v8 = *(_DWORD *)&v4->name.n5_name[16];
        *(_DWORD *)&Name[8] = v6;
        *(_DWORD *)&Name[12] = v7;
        *(_DWORD *)&Name[16] = v8;
        Name[20] = 0;
        if ( !Name[0] )
          goto LABEL_7;
        if ( !_strcmpi(pcName, Name) )
          break;
      }
      ++v2;
      if ( v2 >= 6 )
        goto LABEL_7;
    }
    v9 = v4->slot;
  }
  else
  {
LABEL_7:
    LOBYTE(v9) = -1;
  }
  return v9;
}
// A85C00: using guessed type int __security_cookie;

//----- (0040F560) --------------------------------------------------------
void __thiscall ChangeNameWin::Open(ChangeNameWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiMax, char *pcText)
{
  ChangeNameWin *v5; // esi@1
  NiRefObjectVtbl *v6; // edi@1
  unsigned int v7; // eax@1
  NiRefObjectVtbl *v8; // edi@1
  unsigned int v9; // eax@1

  v5 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTextWin[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  v5->m_uiOkMsg = uiOkMsg;
  PgWinMgr::DoModal(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
  v6[43].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsX.x - (v7 >> 1));
  v8 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5);
  v8[44].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsY - (v9 >> 1));
}

//----- (0040F5E0) --------------------------------------------------------
char __usercall SearchSlot<al>(NiAVObject *pkAVObject<eax>)
{
  NiNode *v1; // esi@1
  const char *v2; // ecx@2
  char result; // al@11

  v1 = pkAVObject->m_pkParent;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->baseclass_0.baseclass_0.m_pcName;
      if ( v2 )
      {
        if ( !strcmp("Avatar0", v1->baseclass_0.baseclass_0.m_pcName) )
          return 0;
        if ( !strcmp("Avatar1", v1->baseclass_0.baseclass_0.m_pcName) )
          return 1;
        if ( !strcmp("Avatar2", v1->baseclass_0.baseclass_0.m_pcName) )
          return 2;
        if ( !strcmp("Avatar3", v1->baseclass_0.baseclass_0.m_pcName) )
          return 3;
        if ( !strcmp("Avatar4", v1->baseclass_0.baseclass_0.m_pcName) )
          return 4;
        if ( !strcmp("Avatar5", v1->baseclass_0.baseclass_0.m_pcName) )
          return 5;
        if ( !strcmp("Avatar6", v2) )
          break;
      }
      v1 = v1->baseclass_0.m_pkParent;
      if ( !v1 )
        goto LABEL_11;
    }
    result = 6;
  }
  else
  {
LABEL_11:
    result = -1;
  }
  return result;
}

//----- (0040F7A0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::ActPos(CharSelectFrameWork *this, Avatar *m_pActor, unsigned int ui_pos)
{
  char v3; // al@2

  switch ( Char::GetClass(&m_pActor->baseclass_0) )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v3 = 26;
      break;
    default:
      v3 = 0;
      break;
  }
  switch ( v3 )
  {
    case 1:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)"erBtn",
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A2110 + 2),
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A24F8 + 2),
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)"ame",
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A2CC8 + 2),
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)&unk_9A30B2,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A3498 + 2),
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BA3C8 + 2),
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BA7B0 + 2),
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)off_9BAB98 + 2),
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BAF80 + 2),
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BB368 + 2),
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BB750 + 2),
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)"02d_Click",
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    case 6:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20100010,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20101010,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20102010,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20103010,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20104010,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20105010,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20106010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20200010,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20201010,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20202010,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20203010,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20204010,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20205010,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20206010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    case 0xB:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            goto $LN81_1;
          case 2u:
            goto $LN79;
          case 3u:
            goto $LN78;
          case 4u:
            goto $LN77;
          case 5u:
            goto $LN76;
          case 6u:
            goto $LN75_0;
          case 1u:
            goto $LN17;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            goto $LN71;
          case 2u:
            goto $LN69;
          case 3u:
            goto $LN68_0;
          case 4u:
            goto $LN67_0;
          case 5u:
            goto $LN66;
          case 1u:
            goto $LN7_2;
          case 6u:
            goto $LN2_4;
          default:
            return;
        }
      }
      return;
    case 0x10:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40100010,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40101010,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40102010,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40103010,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40104010,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40105010,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40106010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40200010,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40201010,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40202010,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40203010,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40204010,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40205010,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40206010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    case 0x15:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50100010,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50101010,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50102010,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50103010,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50104010,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50105010,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50106010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50200010,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50201010,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50202010,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50203010,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50204010,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50205010,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)50206010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    case 0x1A:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
$LN81_1:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30100010,
              0,
              0);
            break;
          case 2u:
$LN79:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30102010,
              0,
              0);
            break;
          case 3u:
$LN78:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30103010,
              0,
              0);
            break;
          case 4u:
$LN77:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30104010,
              0,
              0);
            break;
          case 5u:
$LN76:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30105010,
              0,
              0);
            break;
          case 6u:
$LN75_0:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30106010,
              0,
              0);
            break;
          case 1u:
$LN17:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30101010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
$LN71:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30200010,
              0,
              0);
            break;
          case 2u:
$LN69:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30202010,
              0,
              0);
            break;
          case 3u:
$LN68_0:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30203010,
              0,
              0);
            break;
          case 4u:
$LN67_0:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30204010,
              0,
              0);
            break;
          case 5u:
$LN66:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30205010,
              0,
              0);
            break;
          case 1u:
$LN7_2:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30201010,
              0,
              0);
            break;
          case 6u:
$LN2_4:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30206010,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    default:
      return;
  }
}
// 9A2110: using guessed type int (__thiscall *)(NiNode *pkParent, int pkChild, int bFirstAvail);
// 9A24F8: using guessed type int (__stdcall *)(int);
// 9A2CC8: using guessed type int (*)();
// 9A3498: using guessed type int (__stdcall *)(int uiHeight);
// 9BA3C8: using guessed type int (*)();
// 9BA7B0: using guessed type int (__stdcall *)(int iXPos, int iYPos);
// 9BAB98: using guessed type int (__stdcall *[2])(int kCuller);
// 9BAF80: using guessed type int (__stdcall *)(int pkTexture);
// 9BB368: using guessed type int (__stdcall *)(int kRect);
// 9BB750: using guessed type int (__stdcall *)(int kMat, int kTrn, char bOnLeft);

//----- (00410220) --------------------------------------------------------
void __thiscall CharSelectFrameWork::ActActivePos(CharSelectFrameWork *this, Avatar *m_pActor, unsigned int ui_pos)
{
  char v3; // al@2
  ABSTATEINDEX v4; // eax@12

  switch ( Char::GetClass(&m_pActor->baseclass_0) )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v3 = 26;
      break;
    default:
      v3 = 0;
      break;
  }
  switch ( v3 )
  {
    case 1:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = (ABSTATEINDEX)"lverBtn";
            goto LABEL_98;
          case 1u:
            v4 = (ABSTATEINDEX)&off_9A211C;
            goto LABEL_98;
          case 2u:
            v4 = (ABSTATEINDEX)&off_9A2504;
            goto LABEL_98;
          case 3u:
            v4 = (ABSTATEINDEX)"temWin";
            goto LABEL_98;
          case 4u:
            v4 = (ABSTATEINDEX)&off_9A2CD4;
            goto LABEL_98;
          case 5u:
            v4 = (ABSTATEINDEX)"or";
            goto LABEL_98;
          case 6u:
            v4 = (ABSTATEINDEX)&off_9A34A4;
            goto LABEL_98;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = (ABSTATEINDEX)&off_9BA3D4;
            goto LABEL_98;
          case 1u:
            v4 = (ABSTATEINDEX)off_9BA7BC;
            goto LABEL_98;
          case 2u:
            v4 = (ABSTATEINDEX)off_9BABA4;
            goto LABEL_98;
          case 3u:
            v4 = (ABSTATEINDEX)&off_9BAF8C;
            goto LABEL_98;
          case 4u:
            v4 = (ABSTATEINDEX)off_9BB374;
            goto LABEL_98;
          case 5u:
            v4 = (ABSTATEINDEX)&off_9BB75C;
            goto LABEL_98;
          case 6u:
            v4 = (ABSTATEINDEX)"Chat_Cmd_Name%02d_Over";
            goto LABEL_98;
          default:
            return;
        }
      }
      return;
    case 6:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = 20100020;
            goto LABEL_98;
          case 1u:
            v4 = 20101020;
            goto LABEL_98;
          case 2u:
            v4 = 20102020;
            goto LABEL_98;
          case 3u:
            v4 = 20103020;
            goto LABEL_98;
          case 4u:
            v4 = 20104020;
            goto LABEL_98;
          case 5u:
            v4 = 20105020;
            goto LABEL_98;
          case 6u:
            v4 = 20106020;
            goto LABEL_98;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = 20200020;
            goto LABEL_98;
          case 1u:
            v4 = 20201020;
            goto LABEL_98;
          case 2u:
            v4 = 20202020;
            goto LABEL_98;
          case 3u:
            v4 = 20203020;
            goto LABEL_98;
          case 4u:
            v4 = 20204020;
            goto LABEL_98;
          case 5u:
            v4 = 20205020;
            goto LABEL_98;
          case 6u:
            v4 = 20206020;
            goto LABEL_98;
          default:
            return;
        }
      }
      return;
    case 0xB:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            goto $LN90_0;
          case 2u:
            goto $LN88_0;
          case 3u:
            goto $LN87_1;
          case 4u:
            goto $LN86_2;
          case 5u:
            goto $LN85_1;
          case 6u:
            goto $LN84_0;
          case 1u:
            goto $LN20;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            goto $LN79_0;
          case 2u:
            goto $LN77_0;
          case 3u:
            goto $LN76_0;
          case 4u:
            goto $LN75_1;
          case 5u:
            goto $LN74;
          case 1u:
            goto $LN9_0;
          case 6u:
            goto $LN4_4;
          default:
            return;
        }
      }
      return;
    case 0x10:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = 40100020;
            goto LABEL_98;
          case 1u:
            v4 = 40101020;
            goto LABEL_98;
          case 2u:
            v4 = 40102020;
            goto LABEL_98;
          case 3u:
            v4 = 40103020;
            goto LABEL_98;
          case 4u:
            v4 = 40104020;
            goto LABEL_98;
          case 5u:
            v4 = 40105020;
            goto LABEL_98;
          case 6u:
            v4 = 40106020;
            goto LABEL_98;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = 40200020;
            goto LABEL_98;
          case 1u:
            v4 = 40201020;
            goto LABEL_98;
          case 2u:
            v4 = 40202020;
            goto LABEL_98;
          case 3u:
            v4 = 40203020;
            goto LABEL_98;
          case 4u:
            v4 = 40204020;
            goto LABEL_98;
          case 5u:
            v4 = 40205020;
            goto LABEL_98;
          case 6u:
            v4 = 40206020;
            goto LABEL_98;
          default:
            return;
        }
      }
      return;
    case 0x15:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = 50100020;
            goto LABEL_98;
          case 1u:
            v4 = 50101020;
            goto LABEL_98;
          case 2u:
            v4 = 50102020;
            goto LABEL_98;
          case 3u:
            v4 = 50103020;
            goto LABEL_98;
          case 4u:
            v4 = 50104020;
            goto LABEL_98;
          case 5u:
            v4 = 50105020;
            goto LABEL_98;
          case 6u:
            v4 = 50106020;
            goto LABEL_98;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            v4 = 50200020;
            goto LABEL_98;
          case 1u:
            v4 = 50201020;
            goto LABEL_98;
          case 2u:
            v4 = 50202020;
            goto LABEL_98;
          case 3u:
            v4 = 50203020;
            goto LABEL_98;
          case 4u:
            v4 = 50204020;
            goto LABEL_98;
          case 5u:
            v4 = 50205020;
            goto LABEL_98;
          case 6u:
            v4 = 50206020;
            goto LABEL_98;
          default:
            return;
        }
      }
      return;
    case 0x1A:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
$LN90_0:
            v4 = 30100020;
            goto LABEL_98;
          case 2u:
$LN88_0:
            v4 = 30102020;
            goto LABEL_98;
          case 3u:
$LN87_1:
            v4 = 30103020;
            goto LABEL_98;
          case 4u:
$LN86_2:
            v4 = 30104020;
            goto LABEL_98;
          case 5u:
$LN85_1:
            v4 = 30105020;
            goto LABEL_98;
          case 6u:
$LN84_0:
            v4 = 30106020;
            goto LABEL_98;
          case 1u:
$LN20:
            v4 = 30101020;
            goto LABEL_98;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
$LN79_0:
            v4 = 30200020;
            goto LABEL_98;
          case 2u:
$LN77_0:
            v4 = 30202020;
            goto LABEL_98;
          case 3u:
$LN76_0:
            v4 = 30203020;
            goto LABEL_98;
          case 4u:
$LN75_1:
            v4 = 30204020;
            goto LABEL_98;
          case 5u:
$LN74:
            v4 = 30205020;
            goto LABEL_98;
          case 1u:
$LN9_0:
            v4 = 30201020;
            goto LABEL_98;
          case 6u:
$LN4_4:
            v4 = 30206020;
LABEL_98:
            CharSelectFrameWork::uiActiveCode = v4;
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)m_pActor, v4, 0, 0);
            break;
          default:
            return;
        }
      }
      return;
    default:
      return;
  }
}
// 9A211C: using guessed type int (__thiscall *off_9A211C)(NiNode *pkParent, int result, int i, int pkChild);
// 9A2504: using guessed type int (*off_9A2504)();
// 9A2CD4: using guessed type int (__stdcall *off_9A2CD4)(int pkTexture, int iXPos, int iYPos, int uiWidth, int uiHeight, int pkParent, int pcName, int uiExtStyle);
// 9A34A4: using guessed type int (*off_9A34A4)();
// 9BA3D4: using guessed type int (__stdcall *off_9BA3D4)(int kRect);
// 9BA7BC: using guessed type int (*off_9BA7BC[4])();
// 9BABA4: using guessed type int (__stdcall *off_9BABA4[2])(int result, int pkChild);
// 9BAF8C: using guessed type int (*off_9BAF8C)();
// 9BB374: using guessed type int (*off_9BB374[2])();
// 9BB75C: using guessed type int (__stdcall *off_9BB75C)(float fTime, int bUpdateControllers);

//----- (00410820) --------------------------------------------------------
void __thiscall CharSelectFrameWork::ActActiveEndPos(CharSelectFrameWork *this, Avatar *m_pActor, unsigned int ui_pos)
{
  char v3; // al@2
  ABSTATEINDEX v4; // [sp-Ch] [bp-14h]@77
  int v5; // [sp-8h] [bp-10h]@77
  int v6; // [sp-4h] [bp-Ch]@77

  switch ( Char::GetClass(&m_pActor->baseclass_0) )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v3 = 26;
      break;
    default:
      v3 = 0;
      break;
  }
  switch ( v3 )
  {
    case 1:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)"SilverBtn",
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A2124 + 2),
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A250C + 2),
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)"eme",
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A2CDC + 2),
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)"eClick",
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9A34AC + 2),
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BA3DC + 2),
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)off_9BA7C4 + 2),
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BABAC + 2),
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BAF94 + 2),
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BB37C + 2),
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)((char *)&off_9BB764 + 2),
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)10206030,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    case 6:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              MAX_ABSTATEINDEX|STA_JEWELKEEPERBLOODING|0x132B000,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20101030,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20102030,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20103030,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              STA_COLL_HEAL|STA_PIERCINGGUARD|0x132C000,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20105030,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20106030,
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20200030,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20201030,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20202030,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20203030,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              STA_SETM2MAUP|0x1344800,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20205030,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)20206030,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    case 0xB:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            goto $LN81_2;
          case 2u:
            goto $LN79_1;
          case 3u:
            goto $LN78_0;
          case 4u:
            goto $LN77_1;
          case 5u:
            goto $LN76_1;
          case 6u:
            goto $LN75_2;
          case 1u:
            goto $LN17_0;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            goto $LN71_1;
          case 2u:
            goto $LN69_0;
          case 3u:
            goto $LN68_1;
          case 4u:
            goto $LN67_2;
          case 5u:
            goto $LN66_1;
          case 1u:
            goto $LN7_3;
          case 6u:
            goto $LN2_5;
          default:
            return;
        }
      }
      return;
    case 0x10:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40100030,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40101030,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40102030,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40103030,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40104030,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40105030,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40106030,
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40200030,
              0,
              0);
            break;
          case 1u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40201030,
              0,
              0);
            break;
          case 2u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40202030,
              0,
              0);
            break;
          case 3u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40203030,
              0,
              0);
            break;
          case 4u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40204030,
              0,
              0);
            break;
          case 5u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40205030,
              0,
              0);
            break;
          case 6u:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)40206030,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    case 0x15:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
            v6 = 0;
            v5 = 0;
            v4 = 50100030;
            goto LABEL_92;
          case 1u:
            v6 = 0;
            v5 = 0;
            v4 = 50101030;
            goto LABEL_92;
          case 2u:
            v6 = 0;
            v5 = 0;
            v4 = 50102030;
            goto LABEL_92;
          case 3u:
            v6 = 0;
            v5 = 0;
            v4 = 50103030;
            goto LABEL_92;
          case 4u:
            v6 = 0;
            v5 = 0;
            v4 = 50104030;
            goto LABEL_92;
          case 5u:
            v6 = 0;
            v5 = 0;
            v4 = 50105030;
            goto LABEL_92;
          case 6u:
            v6 = 0;
            v5 = 0;
            v4 = 50106030;
            goto LABEL_92;
          default:
            goto $LN30_0;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
            v6 = 0;
            v5 = 0;
            v4 = 50200030;
            goto LABEL_92;
          case 1u:
            v6 = 0;
            v5 = 0;
            v4 = 50201030;
            goto LABEL_92;
          case 2u:
            v6 = 0;
            v5 = 0;
            v4 = 50202030;
            goto LABEL_92;
          case 3u:
            v6 = 0;
            v5 = 0;
            v4 = 50203030;
            goto LABEL_92;
          case 4u:
            v6 = 0;
            v5 = 0;
            v4 = 50204030;
            goto LABEL_92;
          case 5u:
            v6 = 0;
            v5 = 0;
            v4 = 50205030;
            goto LABEL_92;
          case 6u:
            v6 = 0;
            v5 = 0;
            v4 = 50206030;
LABEL_92:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)m_pActor, v4, v5, v6);
            break;
          default:
            goto $LN30_0;
        }
      }
      goto $LN30_0;
    case 0x1A:
$LN30_0:
      if ( m_pActor->baseclass_0.m_kCharShape.m_byGender )
      {
        switch ( ui_pos )
        {
          case 0u:
$LN81_2:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30100030,
              0,
              0);
            break;
          case 2u:
$LN79_1:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30102030,
              0,
              0);
            break;
          case 3u:
$LN78_0:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30103030,
              0,
              0);
            break;
          case 4u:
$LN77_1:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30104030,
              0,
              0);
            break;
          case 5u:
$LN76_1:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30105030,
              0,
              0);
            break;
          case 6u:
$LN75_2:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30106030,
              0,
              0);
            break;
          case 1u:
$LN17_0:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30101030,
              0,
              0);
            break;
          default:
            return;
        }
      }
      else
      {
        switch ( ui_pos )
        {
          case 0u:
$LN71_1:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30200030,
              0,
              0);
            break;
          case 2u:
$LN69_0:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30202030,
              0,
              0);
            break;
          case 3u:
$LN68_1:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30203030,
              0,
              0);
            break;
          case 4u:
$LN67_2:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30204030,
              0,
              0);
            break;
          case 5u:
$LN66_1:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30205030,
              0,
              0);
            break;
          case 1u:
$LN7_3:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30201030,
              0,
              0);
            break;
          case 6u:
$LN2_5:
            m_pActor->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
              (AbStateInfectee *)m_pActor,
              (ABSTATEINDEX)30206030,
              0,
              0);
            break;
          default:
            return;
        }
      }
      return;
    default:
      return;
  }
}
// 9A2124: using guessed type int (*)();
// 9A250C: using guessed type int (*)();
// 9A2CDC: using guessed type int (__stdcall *)(int uiCmdMsgParam);
// 9A34AC: using guessed type int (__stdcall *)(int iYPos);
// 9BA3DC: using guessed type int (__stdcall *)(int iScreenX, int iScreenY);
// 9BA7C4: using guessed type int (*[2])();
// 9BABAC: using guessed type int (__thiscall *)(NiNode *pkParent, int result, int i, int pkChild);
// 9BAF94: using guessed type int (__thiscall *)(NiAVObject *this, int uiHeight);
// 9BB37C: using guessed type int (__thiscall *)(PgWin *this, int uiPos);
// 9BB764: using guessed type int (__thiscall *)(NiAVObject *this, float fTime);

//----- (00411210) --------------------------------------------------------
void __thiscall ChangeNameWin::ChangeNameWin(ChangeNameWin *this)
{
  ChangeNameWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChangeNameWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChangeNameWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_eState = 0;
}
// 97A0AC: using guessed type int (__stdcall *ChangeNameWin___vftable_)(int uiFlags);
// 97A0CC: using guessed type int (__thiscall *ChangeNameWin___vftable_)(void *p, char);

//----- (00411290) --------------------------------------------------------
bool __thiscall ChangeNameWin::Create(ChangeNameWin *this, PgFrameWork *pkFrameWork)
{
  ChangeNameWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  PgSprData *v13; // eax@21
  PgSprData *v14; // edi@22
  PgWinBut *v15; // eax@22
  int v16; // ST24_4@22
  int v17; // ST20_4@22
  PgWinBut *v18; // eax@22
  PgWinBut *v19; // edi@22
  PgWin *v20; // ST4C_4@22
  PgFont *v21; // ST48_4@22
  unsigned int v22; // ST44_4@22
  unsigned int v23; // eax@22
  PgWinText *v24; // edi@22
  NiRefObjectVtbl *v25; // ebx@22
  char *v26; // eax@22
  PgWinBut *v27; // edi@22
  PgWin *v28; // ST4C_4@22
  PgFont *v29; // ST48_4@22
  unsigned int v30; // ST44_4@22
  unsigned int v31; // eax@22
  PgWinText *v32; // edi@22
  NiRefObjectVtbl *v33; // ebx@22
  char *v34; // eax@22
  PgSprData *v35; // edi@22
  PgWinBut *v36; // eax@22
  PgWinBut *v37; // edi@22
  PgWin *v38; // ST4C_4@22
  PgFont *v39; // ST48_4@22
  unsigned int v40; // ST44_4@22
  unsigned int v41; // eax@22
  PgWinText *v42; // edi@22
  NiRefObjectVtbl *v43; // ebx@22
  char *v44; // eax@22
  PgFont *v45; // eax@22
  int v46; // edi@22
  unsigned int v47; // ebx@24
  PgFont *v48; // ST48_4@24
  unsigned int v49; // ST44_4@24
  int v50; // eax@24
  PgWinText *v51; // eax@24
  int v52; // ebx@24
  PgWinText *v53; // ebx@33
  NiRefObjectVtbl *v54; // edi@33
  char *v55; // eax@33
  NiNode *v56; // esi@34
  const char *v57; // [sp+30h] [bp-48h]@16
  int *v58; // [sp+34h] [bp-44h]@16
  int *v59; // [sp+38h] [bp-40h]@16
  NiSourceTexture *v60; // [sp+3Ch] [bp-3Ch]@16
  PgFont *pkFont; // [sp+50h] [bp-28h]@22
  unsigned int uiWidth; // [sp+54h] [bp-24h]@20
  unsigned int uiHeight; // [sp+58h] [bp-20h]@20
  NiSourceTexture *pkTexture; // [sp+5Ch] [bp-1Ch]@1
  int uiLeft; // [sp+60h] [bp-18h]@11
  int uiTop; // [sp+64h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+68h] [bp-10h]@1
  int v68; // [sp+74h] [bp-4h]@1
  signed int i; // [sp+80h] [bp+8h]@22

  v2 = this;
  spNode.m_pObject = 0;
  v68 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v68 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "CalculatorWin", 0) )
  {
    v4 = spNode.m_pObject;
    v68 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v60 = v10;
    v59 = &uiTop;
    v58 = &uiLeft;
    v57 = "Theme";
  }
  else
  {
    v60 = 0;
    v59 = &uiTop;
    v58 = &uiLeft;
    v57 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v57, v58, v59, v60);
  v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, (NiSourceTexture *)v3);
    PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkInputEdit = EditWin::CreateWin(
                          uiLeft + 2,
                          uiTop + 4,
                          uiWidth,
                          uiHeight,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          NORMAL,
                          0x10u,
                          3u,
                          0,
                          0,
                          1);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v15 = PgWinBut::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v16 = uiTop;
  v17 = uiLeft;
  v2->m_apkBtnWin[1] = v15;
  v18 = PgWinBut::CreateWin(v17, v16, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v19 = v2->m_apkBtnWin[1];
  v20 = (PgWin *)v2->m_apkBtnWin[1];
  v2->m_apkBtnWin[0] = v18;
  v21 = Font::Get(0);
  v22 = ((int (__thiscall *)(PgWinBut *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v19);
  v23 = ((int (__thiscall *)(PgWinBut *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v19);
  v24 = PgWinText::CreateWin(0, 1, v23, v22, v21, v20, 0, 0);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v24,
    5u);
  v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v26 = TextData::Get(0x4F5F499Fu);
  v25[118].__vecDelDtor((NiRefObject *)v24, (unsigned int)v26);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    0);
  v27 = v2->m_apkBtnWin[0];
  v28 = (PgWin *)v2->m_apkBtnWin[0];
  v29 = Font::Get(0);
  v30 = ((int (__thiscall *)(PgWinBut *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v27);
  v31 = ((int (__thiscall *)(PgWinBut *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v27);
  v32 = PgWinText::CreateWin(0, 1, v31, v30, v29, v28, 0, 0);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v32,
    5u);
  v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = TextData::Get(0xE0E7461Fu);
  v33[118].__vecDelDtor((NiRefObject *)v32, (unsigned int)v34);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v32,
    0);
  v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor04", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v35, &spNode.m_pObject->baseclass_0, "BtnClick04");
  PgSprData::Add(v35, &spNode.m_pObject->baseclass_0, "BtnOver04");
  v36 = PgWinBut::CreateWin(uiLeft, uiTop, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v37 = v36;
  v38 = (PgWin *)v36;
  v39 = Font::Get(0);
  v40 = ((int (__thiscall *)(PgWinBut *))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v37);
  v41 = ((int (__thiscall *)(PgWinBut *))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v37);
  v42 = PgWinText::CreateWin(0, 1, v41, v40, v39, v38, 0, 0);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v42,
    5u);
  v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData::Get(0x88A297E1u);
  v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v42,
    0);
  v45 = Font::Get(0);
  pkFont = v45;
  i = 0;
  v46 = (int)v2->m_apkTextWin;
  while ( 1 )
  {
    v47 = v45->m_uiDefHeight;
    v48 = v45;
    v49 = v45->m_uiDefHeight;
    v50 = ((int (__thiscall *)(ChangeNameWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
    v51 = PgWinText::CreateWin(8, i * (v47 + 1) + 8, v50 - 16, v49, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v52 = *(_DWORD *)v46;
    pkTexture = (NiSourceTexture *)v51;
    if ( (PgWinText *)v52 != v51 )
    {
      if ( v52 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v52 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v52)(v52, 1);
        v51 = (PgWinText *)pkTexture;
      }
      *(_DWORD *)v46 = v51;
      if ( v51 )
        InterlockedIncrement((volatile LONG *)&v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v46 + 240))(0);
    v46 += 4;
    ++i;
    if ( i >= 2 )
      break;
    v45 = pkFont;
  }
  ((void (__stdcall *)(signed int))v2->m_apkTextWin[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  v53 = v2->m_apkTextWin[0].m_pObject;
  v54 = v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v55 = TextData::Get(0xE2E29DB9u);
  v54[118].__vecDelDtor((NiRefObject *)v53, (unsigned int)v55);
  ((void (__thiscall *)(ChangeNameWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.55000001,
    0.60000002);
  v68 = -1;
  if ( spNode.m_pObject )
  {
    v56 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v56 )
        v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v56, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00411810) --------------------------------------------------------
void __thiscall ChangeNameWin::OnDelCharOk(ChangeNameWin *this)
{
  ChangeNameWin *v1; // esi@1
  char *v2; // eax@1
  char v3; // bl@1
  char *v4; // eax@2
  PgFrameWork *v5; // eax@3

  v1 = this;
  v2 = (char *)((int (*)(void))this->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = ChangeNameWin::FindCharSlot(v1, v2);
  if ( User::GetSelectedAvatarInfo(&g_kUser)->slot == v3 )
  {
    v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, CharSelectFrameWorkID);
    if ( v5 )
    {
      v5[7].m_kMsgQ.m_uiAlloced = (unsigned __int8)v3;
      CharSelectFrameWork::NcAvatarEraseReq((CharSelectFrameWork *)v5);
    }
  }
  else
  {
    v4 = TextData2::Get(0x3CB8C4C9u);
    MsgBox::Modal(MSGBOX_OK, v4);
    ((void (__stdcall *)(_DWORD))v1->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_979FEA);
    ((void (*)(void))v1->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
}

//----- (004118B0) --------------------------------------------------------
void __thiscall ChangeNameWin::BtnState(ChangeNameWin *this, ChangeNameWin::BtnFunction e, bool b)
{
  ChangeNameWin *v3; // esi@1
  char *v4; // edi@1
  signed int v5; // ebx@1
  PgWinText *v6; // ebx@7
  NiRefObjectVtbl *v7; // edi@7
  char *v8; // eax@7
  PgWinText *v9; // ebx@8
  NiRefObjectVtbl *v10; // edi@8
  char *v11; // eax@8
  PgWinText *v12; // ebx@9
  NiRefObjectVtbl *v13; // edi@9
  char *v14; // eax@9

  v3 = this;
  v4 = (char *)this->m_apkBtnWin;
  v5 = 2;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 240))(0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  switch ( e )
  {
    case 1:
      v12 = v3->m_apkTextWin[0].m_pObject;
      v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v14 = TextData2::Get(0xE1B0CB2Du);
      v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
      ((void (__stdcall *)(_DWORD))v3->m_apkBtnWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
      ((void (__stdcall *)(_DWORD))v3->m_apkBtnWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
      v3->m_eState = 1;
      break;
    case 2:
      v9 = v3->m_apkTextWin[0].m_pObject;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = TextData::Get(0xE2E29DB9u);
      v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v11);
      ((void (__stdcall *)(_DWORD))v3->m_apkBtnWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
      ((void (__stdcall *)(_DWORD))v3->m_apkBtnWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
      v3->m_eState = 2;
      break;
    case 3:
      v6 = v3->m_apkTextWin[0].m_pObject;
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData::Get(0xE2E29DB9u);
      v7[118].__vecDelDtor((NiRefObject *)v6, (unsigned int)v8);
      ((void (__stdcall *)(_DWORD))v3->m_apkBtnWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
      ((void (__stdcall *)(_DWORD))v3->m_apkBtnWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
      v3->m_eState = 3;
      break;
    default:
      v3->m_eState = 0;
      break;
  }
}

//----- (00411A10) --------------------------------------------------------
void __thiscall ChangeNameWin::OnCmdOk(ChangeNameWin *this)
{
  ChangeNameWin *v1; // ebx@1
  int v2; // eax@1
  int v3; // edx@1
  char v4; // cl@2
  int v5; // eax@4
  char *v6; // esi@4
  int v7; // edx@4
  char v8; // cl@5
  const char *v9; // eax@12
  PROTO_AVATARINFORMATION *v10; // esi@12
  const char *v11; // eax@13
  char *v12; // eax@14
  PgFrameWork *v13; // eax@15
  _BYTE v14[20]; // ST00_20@18
  _BYTE v15[20]; // ST00_20@19
  int v16; // esi@20
  signed int v17; // edi@20
  char *v18; // eax@24
  unsigned int v19; // [sp-4h] [bp-40h]@7
  Name5 newName5; // [sp+10h] [bp-2Ch]@13
  Name5 newName; // [sp+24h] [bp-18h]@12
  unsigned int v22; // [sp+38h] [bp-4h]@1
  int v23; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v1 = this;
  v2 = ((int (*)(void))this->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = v2 + 1;
  do
    v4 = *(_BYTE *)v2++;
  while ( v4 );
  if ( v2 != v3 )
  {
    v5 = ((int (*)(void))v1->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v6 = (char *)v5;
    v7 = v5 + 1;
    do
      v8 = *(_BYTE *)v5++;
    while ( v8 );
    if ( (unsigned int)(v5 - v7) < 4 )
    {
      v19 = -87816400;
LABEL_24:
      v18 = TextData::Get(v19);
      MsgBox::Modal(MSGBOX_OK, v18);
      return;
    }
    if ( IsSpecialCharInStr_0(v6) || IsSpecialCharInStr2_0(v6) || TextFilterTable::IsBadName(v6) || IsPeculiarStr_0(v6) )
    {
      v19 = 849182339;
      goto LABEL_24;
    }
    v9 = (const char *)((int (*)(void))v1->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    Name5::Name5(&newName, v9);
    v10 = User::GetSelectedAvatarInfo(&g_kUser);
    if ( v10 )
    {
      v11 = (const char *)((int (*)(void))v1->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      Name5::Name5(&newName5, v11);
      if ( Name5::operator__(&newName5, &v10->name) )
      {
        v12 = TextData2::Get(0xA44706DCu);
        MsgBox::Modal(MSGBOX_OK, v12);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, CharSelectFrameWorkID);
        if ( v13 )
        {
          if ( v1->m_eState == 2 )
          {
            *(_DWORD *)v15 = *(_DWORD *)&newName;
            *(_QWORD *)&v15[4] = *(_QWORD *)&newName.n5_name[4];
            *(_QWORD *)&v15[12] = *(_QWORD *)&newName.n5_name[12];
            CharSelectFrameWork::On_NC_AVATAR_RENAME_REQ((CharSelectFrameWork *)v13, *(Name5 *)v15);
          }
          else
          {
            if ( v1->m_eState == 3 )
            {
              *(_DWORD *)v14 = *(_DWORD *)&newName;
              *(_QWORD *)&v14[4] = *(_QWORD *)&newName.n5_name[4];
              *(_QWORD *)&v14[12] = *(_QWORD *)&newName.n5_name[12];
              CharSelectFrameWork::NcUserConnectChangeCharIDReq((CharSelectFrameWork *)v13, *(Name5 *)v14);
            }
          }
          v16 = (int)v1->m_apkBtnWin;
          v17 = 2;
          do
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v16 + 256))(0);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v16 + 240))(0);
            v16 += 4;
            --v17;
          }
          while ( v17 );
          v1->m_eState = 0;
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00411C30) --------------------------------------------------------
void __thiscall ChangeNameWin::OnCmdCancel(ChangeNameWin *this)
{
  ChangeNameWin *v1; // ebx@1
  PgFrameWork *v2; // edi@1
  int v3; // esi@1
  signed int v4; // edi@2
  IDirectMessengerVtbl *v5; // ecx@7
  IDirectMessengerVtbl *v6; // edi@8
  signed int v7; // edi@8

  v1 = this;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, CharSelectFrameWorkID);
  v3 = (int)v1->m_apkBtnWin;
  if ( v2 )
  {
    if ( (unsigned __int8)(*(int (**)(void))(**(_DWORD **)v3 + 260))() == 1 && v1->m_eState == 1 )
    {
      v5 = v2[1].baseclass_0.vfptr;
      LOBYTE(v2[6].baseclass_0.vfptr) = 0;
      v2[7].m_kMsgQ.m_uiAlloced = -1;
      (*((void (__stdcall **)(_DWORD))v5->SetMsgHooker + 63))(1);
    }
    v6 = v2[1].baseclass_0.vfptr;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6[14].DirectDispatchToChildren + 240))(1);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6[14].DirectDispatchToParent + 240))(1);
    v7 = 2;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0);
      v3 += 4;
      --v7;
    }
    while ( v7 );
    v1->m_eState = 0;
  }
  else
  {
    v4 = 2;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v1->m_eState = 0;
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00411D30) --------------------------------------------------------
void __thiscall CharSelectFrameWork::Draw(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  CPostProcessEffectManager *v2; // eax@2
  NiAVObject *v3; // ST04_4@2
  NiCamera *v4; // ST00_4@2
  CPostProcessEffectManager *v5; // eax@4
  NiVisibleArray m_kVisible; // [sp+0h] [bp-B0h]@2
  NiCullingProcess m_kCuller; // [sp+10h] [bp-A0h]@2
  unsigned int v8; // [sp+A0h] [bp-10h]@1
  int v9; // [sp+ACh] [bp-4h]@2
  int v10; // [sp+B0h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  if ( this->m_spCamera.m_pObject )
  {
    v2 = CPostProcessEffectManager::GetInstance();
    CPostProcessEffectManager::OnRenderSceneStart(v2);
    m_kVisible.m_ppkArray = 0;
    m_kVisible.m_uiCurrentSize = 0;
    m_kVisible.m_uiAllocatedSize = 0;
    m_kVisible.m_uiGrowBy = 1024;
    NiVisibleArray::SetAllocatedSize(&m_kVisible, 0x400u);
    v9 = 0;
    NiCullingProcess::NiCullingProcess(&m_kCuller, &m_kVisible);
    v3 = (NiAVObject *)v1->m_spBackgroundScene.m_pObject;
    v4 = v1->m_spCamera.m_pObject;
    LOBYTE(v9) = 1;
    NiDrawScene(v4, v3, &m_kCuller, 0);
    if ( pkScene )
      NiDrawScene(v1->m_spCamera.m_pObject, pkScene, &m_kCuller, 0);
    v5 = CPostProcessEffectManager::GetInstance();
    CPostProcessEffectManager::OnRenderSceneEnd(v5);
    PgWinMgr::Draw(&Pgg_kWinMgr, NiRenderer::ms_pkRenderer);
    LOBYTE(v9) = 0;
    NiCullingProcess::_NiCullingProcess(&m_kCuller);
    operator delete(m_kVisible.m_ppkArray);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00411E60) --------------------------------------------------------
void __thiscall CharSelectFrameWork::SelectOk(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  PROTO_AVATARINFORMATION *v2; // eax@4
  char *v3; // eax@6
  char *v4; // eax@7
  MsgBox *v5; // eax@7
  char bySlot; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_bDelAvaActivityMsgCheck != 1 )
  {
    bySlot = User::GetSelectedAvatarSlot(&g_kUser);
    if ( bySlot != -1 )
    {
      if ( v1->m_bDuringLogin != 1 )
      {
        v2 = User::GetAvatarInfoBySlot(&g_kUser, bySlot);
        if ( v2 )
        {
          if ( v2->CharIDChangeData.bNeedChangeID )
          {
            v3 = TextData2::Get(0x796E65B8u);
            MsgBox::Modal(MSGBOX_OK, v3);
          }
          else
          {
            v1->m_bDuringLogin = 1;
            v4 = TextData::Get(0x24304892u);
            v5 = MsgBox::Modal(0, v4);
            NiPointer<PopupMenuWin>::operator_(
              (NiPointer<NiD3DDefaultShader> *)&v1->m_spkMsgBox,
              (NiD3DDefaultShader *)v5);
            ((void (__stdcall *)(_DWORD))v1->m_pkCharSelectMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(0);
            CharSelectFrameWork::NcCharLoginReq(v1);
          }
        }
      }
    }
  }
}

//----- (00411F10) --------------------------------------------------------
void __thiscall CharSelectFrameWork::SelectCancel(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1

  v1 = (PgFrameWork *)this;
  PgNet::Close(&g_kNetMgr.m_spLogin.m_pObject->baseclass_0);
  PgNet::Close(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0);
  PgFrameWork::PostFrameMsgChange(v1, AccountFrameWorkID, 0);
}

//----- (00411F40) --------------------------------------------------------
void __thiscall CharSelectFrameWork::CreateAvatar(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1
  char *v2; // eax@3

  v1 = (PgFrameWork *)this;
  if ( this->m_iEraseSlot == -1 )
  {
    if ( User::GetEmptyAvatarSlot(&g_kUser) == -1 )
    {
      v2 = TextData::Get(0x8190D6C7u);
      MsgBox::Modal(MSGBOX_OK, v2);
    }
    else
    {
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, CharCreate);
      PgFrameWork::PostFrameMsgChange(v1, CharCreateFrameWorkID, 0);
    }
  }
}

//----- (00411F90) --------------------------------------------------------
void __thiscall CharSelectFrameWork::DeleteAvatar(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  ChangeNameWin *v2; // edi@4
  CharSelectMenuWin *v3; // esi@4
  char *v4; // eax@5

  v1 = this;
  if ( User::GetSelectedAvatarSlot(&g_kUser) != -1 && User::GetSelectedAvatarInfo(&g_kUser) )
  {
    if ( !(unsigned __int8)((int (*)(void))v1->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
      ChangeNameWin::BtnState(v1->m_pkChangeNameWin, BTN_FUNC_DELCHAR_OK, 1);
      v2 = v1->m_pkChangeNameWin;
      ((void (__stdcall *)(_DWORD))v2->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_979FF2);
      ((void (*)(void))v2->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
      v3 = v1->m_pkCharSelectMenuWin;
      ((void (__stdcall *)(_DWORD))v3->m_pkOkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v3->m_pkDelCharBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    }
  }
  else
  {
    v4 = TextData::Get(0x6D768ADFu);
    MsgBox::Modal(MSGBOX_OK, v4);
  }
}

//----- (00412060) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnZoneLoginFail(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1
  char *v2; // eax@3
  MsgBox *v3; // eax@3
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@3
  unsigned int v5; // [sp+18h] [bp-4h]@1
  int v6; // [sp+1Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = (PgFrameWork *)this;
  if ( this->m_spkMsgBox.m_pObject )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_spkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  v2 = TextData::Get(0x807B787Eu);
  v3 = MsgBox::Modal(MSGBOX_OK, v2);
  kMsg.m_uiFrameMsg = 14;
  MsgBox::SetFrameWorkMsgOnClose(v3, v1, &kMsg, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (004120D0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::ApplyTerrain(CharSelectFrameWork *this, NiNode *pkGroundNode)
{
  NiTListItem<NiPointer<Shadow> > *v2; // ebx@1
  Shadow *v3; // esi@2
  NiNode *v4; // eax@2
  NiNode *v5; // edi@2
  NiCollisionGroup *v6; // ecx@9
  NiAVObject *pkObject; // [sp+4h] [bp-4h]@2

  v2 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element.m_pObject;
    v4 = v3->m_kDecal.m_spObTerrain.m_pObject;
    v2 = v2->m_pkNext;
    v5 = v4;
    pkObject = (NiAVObject *)v3->m_kDecal.m_spObTerrain.m_pObject;
    if ( v4 != pkGroundNode )
    {
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v3->m_kDecal.m_spObTerrain.m_pObject = pkGroundNode;
      if ( pkGroundNode )
        InterlockedIncrement((volatile LONG *)&pkGroundNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v6 = v3->m_kDecal.m_pkCollisionGroup;
    if ( v6 )
    {
      if ( pkObject )
        NiCollisionGroup::RemoveCollidee(v6, pkObject);
      if ( pkGroundNode )
        NiCollisionGroup::AddCollidee(
          v3->m_kDecal.m_pkCollisionGroup,
          &v3->m_kDecal.m_spObTerrain.m_pObject->baseclass_0,
          0,
          -1,
          1);
    }
  }
}

//----- (00412170) --------------------------------------------------------
void __thiscall CharSelectFrameWork::RenderShadow(CharSelectFrameWork *this)
{
  NsPgToonExtraData *v1; // edx@1
  bool v2; // al@1
  NiTListItem<NiPointer<Shadow> > *v3; // esi@1
  unsigned int v4; // ebx@2
  Shadow *v5; // edi@5
  int v6; // eax@6
  Shadow *v7; // eax@9
  NiPoint3 kCharPos; // [sp+4h] [bp-18h]@6
  CharSelectFrameWork *v9; // [sp+10h] [bp-Ch]@1
  NsPgToonExtraData *pkToonExtraData; // [sp+14h] [bp-8h]@1
  bool bOldToonFlag; // [sp+1Bh] [bp-1h]@1

  v1 = Engine3D::ms_spToonExtraData;
  v2 = Engine3D::ms_spToonExtraData->m_bOn;
  Engine3D::ms_spToonExtraData->m_bOn = 0;
  v3 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v9 = this;
  pkToonExtraData = v1;
  bOldToonFlag = v2;
  if ( v3 )
  {
    v4 = 0;
    if ( this->m_nMaxShadowObject )
    {
      do
      {
        if ( v4 >= 6 || this->m_apkAvatar[v4] )
        {
          v5 = v3->m_element.m_pObject;
          v3 = v3->m_pkNext;
          if ( v5 )
          {
            v6 = *(_DWORD *)(*(_DWORD *)&this->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4);
            LODWORD(kCharPos.x) = *(_DWORD *)(v6 + 88);
            LODWORD(kCharPos.y) = *(_DWORD *)(v6 + 92);
            LODWORD(kCharPos.z) = *(_DWORD *)(v6 + 96);
            Shadow::Render(v5, (NiNode *)v6, &kCharPos);
            v1 = pkToonExtraData;
            v5->m_spNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
            this = v9;
          }
        }
        ++v4;
      }
      while ( v4 < this->m_nMaxShadowObject );
    }
    for ( ; v3; v7->m_spNode.m_pObject->baseclass_0.m_uFlags |= 1u )
    {
      v7 = v3->m_element.m_pObject;
      v3 = v3->m_pkNext;
    }
    v1->m_bOn = bOldToonFlag;
  }
}

//----- (00412230) --------------------------------------------------------
void __thiscall ChangeNameWin::OnCommand(ChangeNameWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      ChangeNameWin::OnCmdCancel(this);
    }
    else
    {
      if ( wParam == 2 )
        ChangeNameWin::OnDelCharOk(this);
    }
  }
  else
  {
    ChangeNameWin::OnCmdOk(this);
  }
}

//----- (00412260) --------------------------------------------------------
void __thiscall CharSelectFrameWork::SelectAvatar(CharSelectFrameWork *this, unsigned int uiSlot)
{
  CharSelectFrameWork *v2; // esi@1
  char v3; // al@2
  bool v4; // zf@2
  char v5; // bl@5
  NiAVObject **v6; // edi@7
  int v7; // ebx@11
  PROTO_AVATARINFORMATION *v8; // eax@19
  CharSelectMenuWin *v9; // ecx@20
  NiAVObject *v10; // ecx@23
  Avatar *v11; // ecx@26
  PROTO_AVATARINFORMATION *v12; // eax@29
  int v13; // ecx@31
  ChangeNameWin *v14; // edi@31
  int v15; // edx@31
  int v16; // ecx@31
  PROTO_AVATARINFORMATION *v17; // eax@40
  ChangeNameWin *v18; // ecx@42
  ChangeNameWin::BtnFunction v19; // [sp+Ch] [bp-54h]@31
  bool v20; // [sp+10h] [bp-50h]@31
  bool v21; // [sp+10h] [bp-50h]@34
  ChangeNameWin::BtnFunction v22; // [sp+10h] [bp-50h]@42
  bool v23; // [sp+14h] [bp-4Ch]@42
  int v24; // [sp+20h] [bp-40h]@10
  int v25; // [sp+24h] [bp-3Ch]@7
  unsigned __int8 byOldSlot; // [sp+2Bh] [bp-35h]@2
  char name[4]; // [sp+2Ch] [bp-34h]@31
  int v28; // [sp+30h] [bp-30h]@31
  int v29; // [sp+34h] [bp-2Ch]@31
  int v30; // [sp+38h] [bp-28h]@31
  int v31; // [sp+3Ch] [bp-24h]@31
  char v32; // [sp+40h] [bp-20h]@31
  char acName[21]; // [sp+44h] [bp-1Ch]@30
  unsigned int v34; // [sp+5Ch] [bp-4h]@1
  int v35; // [sp+60h] [bp+0h]@1

  v34 = (unsigned int)&v35 ^ __security_cookie;
  v2 = this;
  if ( this->m_bDelAvaActivityMsgCheck != 1 )
  {
    v3 = User::GetSelectedAvatarSlot(&g_kUser);
    v4 = v2->m_pkChangeNameWin == 0;
    byOldSlot = v3;
    if ( !v4
      && (unsigned __int8)((int (*)(void))v2->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
    v5 = uiSlot;
    if ( byOldSlot == (_BYTE)uiSlot || v2->m_bDuringLogin )
    {
      if ( byOldSlot != -1 )
      {
        if ( v2->m_pkChangeNameWin )
        {
          v17 = User::GetAvatarInfoBySlot(&g_kUser, uiSlot);
          if ( v17 )
          {
            *(_DWORD *)acName = *(_DWORD *)&v17->name.n5_name[0];
            *(_DWORD *)&acName[4] = *(_DWORD *)&v17->name.n5_name[4];
            *(_DWORD *)&acName[8] = *(_DWORD *)&v17->name.n5_name[8];
            *(_DWORD *)&acName[12] = *(_DWORD *)&v17->name.n5_name[12];
            *(_DWORD *)&acName[16] = *(_DWORD *)&v17->name.n5_name[16];
            acName[20] = 0;
            if ( v17->CharIDChangeData.bNeedChangeID == 1 )
            {
              Name5::n_string(&v17->name, name);
              v18 = v2->m_pkChangeNameWin;
              v32 = 0;
              ChangeNameWin::SetNameEdit(v18, name);
              PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
              v23 = 1;
              v22 = 3;
            }
            else
            {
              if ( !_mbschr(acName, 0x2Du) )
              {
                CharSelectMenuWin::EnableOKBut(v2->m_pkCharSelectMenuWin, 1);
                CharSelectFrameWork::SelectOk(v2);
                return;
              }
              ChangeNameWin::SetNameEdit(v2->m_pkChangeNameWin, acName);
              PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
              v23 = 1;
              v22 = 2;
            }
            ChangeNameWin::BtnState(v2->m_pkChangeNameWin, v22, v23);
            CharSelectMenuWin::EnableOKBut(v2->m_pkCharSelectMenuWin, 0);
            return;
          }
        }
      }
    }
    else
    {
      User::SetSelectedAvatarSlot(&g_kUser, uiSlot);
      v6 = (NiAVObject **)v2->m_aspAvatarPos;
      v25 = 4;
      do
      {
        if ( *(v6 - 44) && *v6 )
        {
          ((void (__stdcall *)(int *, _DWORD))(*v6)->baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
            &v24,
            *(v6 - 44));
          if ( v24 )
          {
            v7 = v24;
            if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v7 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
            v5 = uiSlot;
          }
          NiAVObject::Update(*v6, 0.0, 0);
          NiAVObject::UpdateProperties(*v6);
        }
        ++v6;
        --v25;
      }
      while ( v25 );
      if ( v5 != -1 && v2->m_apkAvatar[(unsigned __int8)v5] )
      {
        CharSelectFrameWork::bIsActiveMotion = 1;
        CharSelectFrameWork::bRandomMode = 0;
        CharSelectFrameWork::ui_currentFairyPos = (unsigned __int8)v5;
        CharSelectFrameWork::ActActivePos(v2, v2->m_apkAvatar[(unsigned __int8)v5], (unsigned __int8)v5);
        v8 = User::GetAvatarInfoBySlot(&g_kUser, v5);
        if ( !v8 )
          return;
        v9 = v2->m_pkCharSelectMenuWin;
        if ( v9 )
          CharSelectMenuWin::SetMenuTextInfo(v9, v8);
        if ( v2->m_spCharSelectEffect[(unsigned __int8)v5].m_pObject )
        {
          v10 = (NiAVObject *)v2->m_aspAvatarPos[(unsigned __int8)v5].m_pObject;
          if ( v10 )
          {
            NiAVObject::Update(v10, 0.0, 0);
            NiAVObject::UpdateProperties(&v2->m_aspAvatarPos[(unsigned __int8)v5].m_pObject->baseclass_0);
          }
        }
      }
      if ( byOldSlot != -1 )
      {
        v11 = v2->m_apkAvatar[byOldSlot];
        if ( v11 )
          CharSelectFrameWork::ActPos(v2, v11, byOldSlot);
      }
      if ( v2->m_pkChangeNameWin )
      {
        v12 = User::GetAvatarInfoBySlot(&g_kUser, v5);
        if ( v12 )
        {
          *(_DWORD *)acName = *(_DWORD *)&v12->name.n5_name[0];
          *(_DWORD *)&acName[4] = *(_DWORD *)&v12->name.n5_name[4];
          *(_DWORD *)&acName[8] = *(_DWORD *)&v12->name.n5_name[8];
          *(_DWORD *)&acName[12] = *(_DWORD *)&v12->name.n5_name[12];
          *(_DWORD *)&acName[16] = *(_DWORD *)&v12->name.n5_name[16];
          acName[20] = 0;
          if ( v12->CharIDChangeData.bNeedChangeID == 1 )
          {
            v13 = *(_DWORD *)&v12->name.n5_name[4];
            v14 = v2->m_pkChangeNameWin;
            *(_DWORD *)name = *(_DWORD *)&v12->name.n5_name[0];
            v29 = *(_DWORD *)&v12->name.n5_name[8];
            v15 = *(_DWORD *)&v12->name.n5_name[16];
            v28 = v13;
            v16 = *(_DWORD *)&v12->name.n5_name[12];
            v31 = v15;
            v30 = v16;
            v32 = 0;
            ((void (__stdcall *)(char *))v14->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(name);
            ((void (*)(void))v14->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
            PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
            v20 = 1;
            v19 = 3;
          }
          else
          {
            if ( !_mbschr(acName, 0x2Du) )
            {
              v21 = 1;
              goto LABEL_35;
            }
            ChangeNameWin::SetNameEdit(v2->m_pkChangeNameWin, acName);
            PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
            v20 = 1;
            v19 = 2;
          }
          ChangeNameWin::BtnState(v2->m_pkChangeNameWin, v19, v20);
          v21 = 0;
LABEL_35:
          CharSelectMenuWin::EnableOKBut(v2->m_pkCharSelectMenuWin, v21);
          return;
        }
      }
    }
  }
}
// A744C2: using guessed type char CharSelectFrameWork__bRandomMode;
// A85C00: using guessed type int __security_cookie;
// A9437C: using guessed type int CharSelectFrameWork__ui_currentFairyPos;
// A94380: using guessed type char CharSelectFrameWork__bIsActiveMotion;

//----- (00412600) --------------------------------------------------------
void __thiscall CharSelectFrameWork::OnZoneConnectFail(CharSelectFrameWork *this)
{
  PgFrameWork *v1; // esi@1
  char *v2; // eax@3
  MsgBox *v3; // eax@3
  PgMsg::Frame pkFrameMsg; // [sp+4h] [bp-18h]@3
  unsigned int v5; // [sp+18h] [bp-4h]@1
  int v6; // [sp+1Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = (PgFrameWork *)this;
  if ( this->m_spkMsgBox.m_pObject )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_spkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  v2 = TextData::Get(0x807B787Eu);
  v3 = MsgBox::Modal(MSGBOX_OK, v2);
  pkFrameMsg.m_uiFrameMsg = 14;
  MsgBox::SetFrameWorkMsgOnClose(v3, v1, &pkFrameMsg, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00412670) --------------------------------------------------------
void __thiscall CharSelectFrameWork::ProcessInput(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // ebx@1
  Picking *v2; // esi@2
  int v3; // eax@2
  NiAVObject *v4; // edi@2
  NiAVObject *v5; // eax@11
  char v6; // al@11
  NiPoint3 kOrigin; // [sp+4h] [bp-1Ch]@2
  NiPoint3 kDir; // [sp+10h] [bp-10h]@2
  int v9; // [sp+1Ch] [bp-4h]@2

  v1 = this;
  if ( dword_B70350 >= 1 )
  {
    NiCamera::WindowPointToRay(this->m_spCamera.m_pObject, PgWin::ms_iMsX.x, PgWin::ms_iMsY, &kOrigin, &kDir);
    v2 = v1->m_pkPick;
    v3 = (int)v1->m_spCharScene.m_pObject;
    v4 = v2->baseclass_0.m_spRoot.m_pObject;
    v9 = v3;
    if ( v4 != (NiAVObject *)v3 )
    {
      if ( v4 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        v3 = v9;
      }
      v2->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)(v3 + 4));
    }
    if ( Picking::PickCharacter(v1->m_pkPick, &kOrigin, &kDir) )
    {
      v5 = Picking::GetAVObject(v1->m_pkPick, 0);
      v6 = SearchSlot(v5);
      if ( v6 != -1 )
        CharSelectFrameWork::SelectAvatar(v1, (unsigned __int8)v6);
    }
  }
}
// B70350: using guessed type int dword_B70350;

//----- (00412740) --------------------------------------------------------
void __thiscall CharSelectFrameWork::Update(CharSelectFrameWork *this, float fCurTime)
{
  CharSelectFrameWork *v2; // esi@1
  Net *v3; // ecx@1
  PgNet *v4; // ecx@3
  NiAVObject *v5; // ecx@5
  char *v6; // eax@11
  MsgBox *v7; // eax@11
  char *v8; // eax@12
  bool (__thiscall *v9)(NpNs_MoveToTarget *); // eax@15
  int v10; // edi@15
  int v11; // ecx@15
  int v12; // eax@18
  NiNode *v13; // ebx@23
  int v14; // eax@23
  char v15; // al@26
  unsigned int v16; // edi@27
  Char *v17; // ecx@27
  NiControllerSequence *v18; // eax@28
  PgMsg::Frame kMsg; // [sp+28h] [bp-18h]@13
  unsigned int v20; // [sp+3Ch] [bp-4h]@1
  int v21; // [sp+40h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spWorldMgrNet.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(CharSelectFrameWork *, signed int))v3->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
  PgWinMgr::ProcessInput(&Pgg_kWinMgr, 1);
  PgWinMgr::DispatchMessageA(&Pgg_kWinMgr);
  PgWinMgr::UpdateWin(&Pgg_kWinMgr, fCurTime);
  CharSelectFrameWork::ProcessInput(v2);
  CharSelectFrameWork::RenderShadow(v2);
  CharMgr::UpdateAvatar(&g_kCharMgr, fCurTime);
  EffectMgr::Update(&g_kEffectMgr, fCurTime);
  NiAVObject::Update(pkScene, fCurTime, 1);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  if ( v4 )
    PgNet::Flush(v4);
  v5 = (NiAVObject *)v2->m_spBackgroundScene.m_pObject;
  if ( v5 )
    NiAVObject::Update(v5, fCurTime, 1);
  if ( v2->m_spWorldMgrNet.m_pObject->baseclass_0.m_bCut )
  {
    if ( v2->m_spkMsgBox.m_pObject )
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v2->m_spkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    if ( g_kServer.m_bDoubleConnected == 1 )
    {
      v6 = TextData::Get(0x16526A50u);
      v7 = MsgBox::Modal(MSGBOX_OK, v6);
      g_kServer.m_bDoubleConnected = 0;
    }
    else
    {
      v8 = TextData::Get(0xCF16104Bu);
      v7 = MsgBox::Modal(MSGBOX_OK, v8);
    }
    kMsg.m_uiFrameMsg = 18;
    MsgBox::SetFrameWorkMsgOnClose(v7, &v2->baseclass_0, &kMsg, 0);
  }
  if ( v2->m_aspFairy.m_pObject )
  {
    v9 = v2->m_kMoveToTarget.vfptr->IsMove;
    v10 = (int)&v2->m_kMoveToTarget;
    v11 = (int)&v2->m_kMoveToTarget;
    if ( CharSelectFrameWork::bRandomMode )
    {
      if ( !v9((NpNs_MoveToTarget *)v11) )
      {
        if ( (unsigned int)CharSelectFrameWork::ui_currentFairyPos >= 3 )
          v12 = 0;
        else
          v12 = CharSelectFrameWork::ui_currentFairyPos + 1;
        CharSelectFrameWork::ui_currentFairyPos = v12;
        (*(void (__thiscall **)(NpNs_MoveToTarget *, NiPoint3 *))(*(_DWORD *)v10 + 40))(
          &v2->m_kMoveToTarget,
          &v2->m_aspRandomPos[v12].m_pObject->baseclass_0.m_kLocal.m_Translate);
        (*(void (__thiscall **)(NpNs_MoveToTarget *, _DWORD))(*(_DWORD *)v10 + 8))(&v2->m_kMoveToTarget, 10.0);
        (*(void (__thiscall **)(NpNs_MoveToTarget *, _DWORD, NiPoint3 *, NiPoint3 *))(*(_DWORD *)v10 + 28))(
          &v2->m_kMoveToTarget,
          LODWORD(fCurTime),
          &v2->m_aspFairy.m_pObject->baseclass_0.m_kLocal.m_Translate,
          &v2->m_aspRandomPos[CharSelectFrameWork::ui_currentFairyPos].m_pObject->baseclass_0.m_kLocal.m_Translate);
        goto LABEL_24;
      }
    }
    else
    {
      if ( !v9((NpNs_MoveToTarget *)v11) )
      {
        (*(void (__thiscall **)(NpNs_MoveToTarget *, _DWORD))(*(_DWORD *)v10 + 8))(&v2->m_kMoveToTarget, 15.0);
        (*(void (__thiscall **)(NpNs_MoveToTarget *, _DWORD, NiPoint3 *, NiPoint3 *))(*(_DWORD *)v10 + 28))(
          &v2->m_kMoveToTarget,
          LODWORD(fCurTime),
          &v2->m_aspFairy.m_pObject->baseclass_0.m_kLocal.m_Translate,
          &v2->m_aspAngelPos[CharSelectFrameWork::ui_currentFairyPos].m_pObject->baseclass_0.m_kLocal.m_Translate);
LABEL_24:
        (*(void (__thiscall **)(NpNs_MoveToTarget *))(*(_DWORD *)v10 + 36))(&v2->m_kMoveToTarget);
        goto LABEL_25;
      }
    }
    v13 = v2->m_aspFairy.m_pObject;
    v14 = (*(int (__thiscall **)(NpNs_MoveToTarget *))(*(_DWORD *)v10 + 56))(&v2->m_kMoveToTarget);
    LODWORD(v13->baseclass_0.m_kLocal.m_Translate.x) = *(_DWORD *)v14;
    LODWORD(v13->baseclass_0.m_kLocal.m_Translate.y) = *(_DWORD *)(v14 + 4);
    LODWORD(v13->baseclass_0.m_kLocal.m_Translate.z) = *(_DWORD *)(v14 + 8);
    goto LABEL_24;
  }
LABEL_25:
  if ( CharSelectFrameWork::bIsActiveMotion )
  {
    v15 = User::GetSelectedAvatarSlot(&g_kUser);
    if ( v15 == -1 || (v16 = (unsigned __int8)v15, (v17 = (Char *)v2->m_apkAvatar[(unsigned __int8)v15]) == 0) )
      return;
    v18 = Char::GetSequence(v17, CharSelectFrameWork::uiActiveCode);
    if ( v18 && v18->m_fEndKeyTime <= (double)v18->m_fLastTime )
    {
      CharSelectFrameWork::bIsActiveMotion = 0;
      CharSelectFrameWork::ActActiveEndPos(v2, v2->m_apkAvatar[v16], v16);
    }
  }
  if ( g_kSoundMgr.m_pkBGMGroup )
  {
    if ( !SoundGroupBgm::IsBGMPlaying(g_kSoundMgr.m_pkBGMGroup) )
    {
      SoundMgr::StopBGM(&g_kSoundMgr);
      SoundGroupBgm::SetFadeDurationTime(g_kSoundMgr.m_pkBGMGroup, 0.0);
      SoundMgr::PlayBGM(&g_kSoundMgr, "LoginBackground.mp3");
    }
  }
  SoundMgr::Update(&g_kSoundMgr, fCurTime, 0);
}
// 412740: could not find valid save-restore pair for ebx
// A744C2: using guessed type char CharSelectFrameWork__bRandomMode;
// A85C00: using guessed type int __security_cookie;
// A9437C: using guessed type int CharSelectFrameWork__ui_currentFairyPos;
// A94380: using guessed type char CharSelectFrameWork__bIsActiveMotion;

//----- (00412A50) --------------------------------------------------------
void __thiscall CharSelectFrameWork::ProcessMsg(CharSelectFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  switch ( uiMsg )
  {
    case 9u:
      CharSelectFrameWork::OnCharEraseFailMsgClose(this);
      break;
    case 0xAu:
      CharSelectFrameWork::OnCharLoginFailMsgClose(this);
      break;
    case 0xBu:
      CharSelectFrameWork::OnZoneConnectFail(this);
      break;
    case 0xCu:
      CharSelectFrameWork::OnZoneConnectFailMsgClose(this);
      break;
    case 0xDu:
      CharSelectFrameWork::OnZoneLoginFail(this);
      break;
    case 0xEu:
      CharSelectFrameWork::OnZoneLoginFailMsgClose(this);
      break;
    case 0xFu:
      CharSelectFrameWork::OnZoneLoginComplete(this);
      break;
    case 0x10u:
      CharSelectFrameWork::OnEraseMsgOk(this);
      break;
    case 0x11u:
      CharSelectFrameWork::OnEraseMsgCancel(this);
      break;
    case 0x12u:
      PgFrameWork::PostFrameMsgChange(&this->baseclass_0, AccountFrameWorkID, 0);
      break;
    case 0x14u:
      CharSelectFrameWork::NcCharTutorialPopupAck(this, uiwParam != 0);
      break;
    default:
      return;
  }
}

//----- (00412B10) --------------------------------------------------------
ChangeNameWin *__cdecl ChangeNameWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ChangeNameWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x178u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &ChangeNameWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ChangeNameWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 364,
      4u,
      2,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    *((_DWORD *)v2 + 93) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ChangeNameWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97A0AC: using guessed type int (__stdcall *ChangeNameWin___vftable_)(int uiFlags);
// 97A0CC: using guessed type int (__thiscall *ChangeNameWin___vftable_)(void *p, char);

//----- (00412C70) --------------------------------------------------------
void __thiscall Name5::Name5(Name5 *this, const char *str)
{
  *(_QWORD *)&this->n5_name[12] = 0i64;
  *(_QWORD *)&this->n5_name[4] = 0i64;
  *(_DWORD *)&this->n5_name[0] = 0;
  strncpy(this->n5_name, (char *)str, 0x14u);
}

//----- (00412CA0) --------------------------------------------------------
int __thiscall Name5::operator__(Name5 *this, Name5 *nm)
{
  return *(_DWORD *)&this->n5_name[0] == *(_DWORD *)&nm->n5_name[0]
      && *(_DWORD *)&this->n5_name[4] == *(_DWORD *)&nm->n5_name[4]
      && *(_DWORD *)&this->n5_name[8] == *(_DWORD *)&nm->n5_name[8]
      && *(_DWORD *)&this->n5_name[12] == *(_DWORD *)&nm->n5_name[12]
      && *(_DWORD *)&this->n5_name[16] == *(_DWORD *)&nm->n5_name[16];
}

//----- (00412CE0) --------------------------------------------------------
char *__thiscall Name5::n_string(Name5 *this, char *buf)
{
  char *result; // eax@1

  result = buf;
  *(_QWORD *)buf = *(_QWORD *)&this->n5_name[0];
  *((_QWORD *)buf + 1) = *(_QWORD *)&this->n5_name[8];
  *((_DWORD *)buf + 4) = *(_DWORD *)&this->n5_name[16];
  buf[20] = 0;
  return result;
}

//----- (00412D10) --------------------------------------------------------
void __thiscall NsABVPicking::SetTarget(NsABVPicking *this, NiAVObject *pObject)
{
  NsABVPicking *v2; // ebx@1
  NiAVObject *v3; // esi@1

  v2 = this;
  v3 = this->m_spRoot.m_pObject;
  if ( v3 != pObject )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spRoot.m_pObject = pObject;
    if ( pObject )
      InterlockedIncrement((volatile LONG *)&pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (00412D60) --------------------------------------------------------
void *__thiscall ChangeNameWin::_scalar_deleting_destructor_(ChangeNameWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChangeNameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChangeNameWin::_vftable_;
  this->m_pkInputEdit = 0;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97A0AC: using guessed type int (__stdcall *ChangeNameWin___vftable_)(int uiFlags);
// 97A0CC: using guessed type int (__thiscall *ChangeNameWin___vftable_)(void *p, char);

//----- (00412DF0) --------------------------------------------------------
void __thiscall ChatColorSpinWin::SetChatColorID(ChatColorSpinWin *this, char kColorID)
{
  this->m_kChatItem.kChatColorID = kColorID;
  this->m_bReservStop = 1;
}

//----- (00412E10) --------------------------------------------------------
void __thiscall ChatColorSpinWin::SetTimer(ChatColorSpinWin *this, bool bTimer)
{
  double v2; // st7@2

  this->m_bTimer = bTimer;
  if ( bTimer )
  {
    this->m_bStop = 1;
  }
  else
  {
    this->m_fStartTime = Timer::ms_fCurTime;
    v2 = Timer::ms_fCurTime;
    this->m_bStop = 0;
    this->m_fOldTime = v2;
    this->m_bReservStop = 0;
    this->m_bWaitAck = 0;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00412E60) --------------------------------------------------------
void __thiscall ChatColorSpinWin::OnShowWin(ChatColorSpinWin *this)
{
  ChatColorSpinWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@7
  char *v3; // eax@7
  unsigned int v4; // [sp-4h] [bp-Ch]@4

  v1 = this;
  if ( this->m_kChatItem.uiColorType == 1 )
  {
    v4 = 1777710823;
  }
  else
  {
    if ( this->m_kChatItem.uiColorType == 2 )
    {
      v4 = -1260144839;
    }
    else
    {
      if ( this->m_kChatItem.uiColorType != 3 )
        return;
      v4 = -181667187;
    }
  }
  v2 = this->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData3::Get(v4);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkTitleText, (unsigned int)v3);
}

//----- (00412EB0) --------------------------------------------------------
void __thiscall ChatColorSpinWin::OnOK(ChatColorSpinWin *this)
{
  ChatColorSpinWin *v1; // esi@1
  Item *v2; // edi@2
  const int v3; // eax@2
  char *v4; // eax@4
  MsgBox *v5; // eax@4
  PgFrameWork *v6; // esi@5
  char *v7; // eax@6

  v1 = this;
  if ( this->m_bStop )
  {
    v2 = Inventory::GetItemByID(&g_kInventory, LOWORD(this->m_kChatItem.uiItemID));
    v3 = Inventory::GetSlotByID(&g_kInventory, LOWORD(v1->m_kChatItem.uiItemID));
    if ( v2 && v3 >= 0 )
    {
      v1->m_kChatItem.uiInveInx = v3;
      v4 = TextData3::Get(0x9FE2D7BBu);
      v5 = MsgBox::Modal(MSGBOX_OKCANCEL, v4);
      ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    else
    {
      v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v6 )
      {
        v7 = TextData3::Get(0x6955D6Eu);
        GameFrameWork::AddSysMsg((GameFrameWork *)v6, v7);
      }
    }
  }
}

//----- (00412F50) --------------------------------------------------------
void __thiscall ChatColorSpinWin::Roll(ChatColorSpinWin *this)
{
  ChatColorSpinWin *v1; // esi@1
  PgWinSpr *v2; // ecx@1
  double v3; // st7@1

  v1 = this;
  v2 = this->m_pkSpr.m_pObject;
  v1->m_bTimer = 0;
  v1->m_fStartTime = Timer::ms_fCurTime;
  v3 = Timer::ms_fCurTime;
  v1->m_bStop = 0;
  v1->m_fOldTime = v3;
  *(_WORD *)&v1->m_bReservStop = 0;
  ((void (__stdcall *)(signed int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v1->m_fSpeed = 0.1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00412FB0) --------------------------------------------------------
void __thiscall ChatColorSpinWin::Decrease(ChatColorSpinWin *this, float fTime)
{
  ChatColorSpinWin *v2; // esi@1
  PgFrameWork *v3; // ecx@1
  double v4; // st7@1
  ChatColor *v5; // ebx@10
  NiRefObjectVtbl *v6; // edi@11
  NiSourceTexture *v7; // eax@11
  char *v8; // eax@11
  int v9; // esi@14
  int v10; // esi@15
  char *v11; // eax@20
  unsigned int v12; // [sp-Ch] [bp-14h]@17
  GameFrameWork *pkGame; // [sp+4h] [bp-4h]@1
  float fTimea; // [sp+10h] [bp+8h]@2
  float fTimeb; // [sp+10h] [bp+8h]@3
  PgWinSpr *fTimec; // [sp+10h] [bp+8h]@11

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  pkGame = (GameFrameWork *)v3;
  v4 = fTime;
  if ( v2->m_fSpeed <= 2.0 )
  {
    fTimea = v4 - v2->m_fOldTime;
    v2->m_fSpeed = fTimea * 0.009999999776482582 + v2->m_fSpeed;
  }
  fTimeb = v4 - v2->m_fStartTime;
  if ( fTimeb >= 6.0 )
  {
    if ( v2->m_bReservStop )
    {
      if ( v2->m_bWaitAck )
      {
        v5 = ChatColorTab::GetByID(v2->m_kChatItem.kChatColorID);
        if ( v5 )
        {
          SpEffect::Start(v2->m_pkChatColorEffect, &v2->m_pkSpr.m_pObject->baseclass_0.baseclass_0);
          v2->m_pkChatColorEffect->m_spEffect.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
          v6 = v2->m_pkSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          fTimec = v2->m_pkSpr.m_pObject;
          v7 = PgUtil::Create1PixelSourceTexture(v5->ColorR, v5->ColorG, v5->ColorB, -1);
          v6[113].__vecDelDtor((NiRefObject *)fTimec, (unsigned int)v7);
          v8 = (char *)&v2->m_kStartSound;
          *(_WORD *)&v2->m_bStop = 257;
          if ( v2->m_kStartSound.baseclass_0._Myres >= 0x10 )
            v8 = *(char **)v8;
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v8);
          if ( pkGame )
          {
            v9 = v2->m_kChatItem.uiColorType - 1;
            if ( v9 )
            {
              v10 = v9 - 1;
              if ( v10 )
              {
                if ( v10 != 1 )
                  return;
                v12 = 903643866;
              }
              else
              {
                v12 = -225951342;
              }
            }
            else
            {
              v12 = -248056156;
            }
            v11 = TextData3::Get(v12);
            GameFrameWork::AddSysMsg(pkGame, v11);
          }
        }
      }
    }
    else
    {
      if ( !v2->m_bWaitAck )
      {
        if ( v3 )
        {
          GameFrameWork::NcItemChatColorChangeReq((GameFrameWork *)v3, v2->m_kChatItem.uiInveInx);
          v2->m_bWaitAck = 1;
        }
      }
    }
  }
}

//----- (00413150) --------------------------------------------------------
void __thiscall ChatColorSpinWin::Reset(ChatColorSpinWin *this)
{
  ChatColorSpinWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_pkChatColorEffect->m_spEffect.m_pObject->baseclass_0.m_uFlags |= 1u;
}

//----- (00413180) --------------------------------------------------------
void __thiscall ChatColorSpinWin::ChatColorSpinWin(ChatColorSpinWin *this)
{
  ChatColorSpinWin *v1; // esi@1
  PgWinSpr *v2; // edi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatColorSpinWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatColorSpinWin::_vftable_;
  v1->m_pkSpr.m_pObject = 0;
  v1->m_kStartSound.baseclass_0._Myres = 15;
  v1->m_kStartSound.baseclass_0._Mysize = 0;
  v1->m_kStartSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2 = v1->m_pkSpr.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_pkSpr.m_pObject = 0;
  }
  v1->m_fStartTime = 0.0;
  v1->m_pkChatColorEffect = 0;
  v1->m_fOldTime = 0.0;
  *(_DWORD *)&v1->m_bDecrease = 65792;
  v1->m_bWaitAck = 0;
  v1->m_fSpeed = 0.30000001;
  v1->m_pkTitleText = 0;
  v1->m_kChatItem.uiInveInx = 0;
  v1->m_kChatItem.uiItemID = 0;
  v1->m_kChatItem.uiColorType = 0;
  *(_DWORD *)&v1->m_kChatItem.kChatColorID = 0;
}
// 97A42C: using guessed type int (__stdcall *ChatColorSpinWin___vftable_)(int uiFlags);
// 97A44C: using guessed type int (__thiscall *ChatColorSpinWin___vftable_)(void *p, char);

//----- (00413280) --------------------------------------------------------
void __thiscall ChatColorSpinWin::_ChatColorSpinWin(ChatColorSpinWin *this)
{
  ChatColorSpinWin *v1; // esi@1
  SpEffect *v2; // edi@1
  NiNode *v3; // ebx@2
  PgWinSpr *v4; // edi@9

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatColorSpinWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatColorSpinWin::_vftable_;
  v2 = this->m_pkChatColorEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
    v1->m_pkChatColorEffect = 0;
  }
  if ( v1->m_kStartSound.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_kStartSound.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_kStartSound.baseclass_0._Myres = 15;
  v1->m_kStartSound.baseclass_0._Mysize = 0;
  v1->m_kStartSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = v1->m_pkSpr.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97A42C: using guessed type int (__stdcall *ChatColorSpinWin___vftable_)(int uiFlags);
// 97A44C: using guessed type int (__thiscall *ChatColorSpinWin___vftable_)(void *p, char);

//----- (004133A0) --------------------------------------------------------
void __thiscall ChatColorSpinWin::OnCommand(ChatColorSpinWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
  }
  else
  {
    ChatColorSpinWin::OnOK(this);
  }
}

//----- (004133D0) --------------------------------------------------------
void __thiscall ChatColorSpinWin::DirectMessage(ChatColorSpinWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  char *v4; // esi@4

  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
    {
      v4 = (char *)this - 232;
      (*(void (__stdcall **)(_DWORD))(*LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale)
                                    + 256))(0);
      *(_WORD *)(**((_DWORD **)v4 + 98) + 28) |= 1u;
      ChatColorSpinWin::Roll((ChatColorSpinWin *)v4);
    }
  }
}

//----- (00413420) --------------------------------------------------------
void __thiscall ChatColorSpinWin::OnClose(ChatColorSpinWin *this)
{
  ChatColorSpinWin *v1; // esi@1
  PgFrameWork *v2; // eax@2
  void *v3; // eax@3

  v1 = this;
  if ( this->m_bStop )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v1->m_pkChatColorEffect->m_spEffect.m_pObject->baseclass_0.m_uFlags |= 1u;
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
    {
      v3 = v2[19].m_BackFrameID;
      if ( v3 )
        InvWin::SetLock(*((InvWin **)v3 + v1->m_kChatItem.uiInveInx + 87), 0);
    }
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
}

//----- (00413490) --------------------------------------------------------
void __thiscall ChatColorSpinWin::UpdateTimer(ChatColorSpinWin *this, float fTime)
{
  ChatColorSpinWin *v2; // ebx@1
  double v3; // st7@2
  float v4; // ST1C_4@3
  int v5; // eax@4
  int v6; // ecx@4
  unsigned int v7; // ecx@5
  ChatColor *v8; // eax@7
  PgWinSpr *v9; // edi@8
  NiRefObjectVtbl *v10; // esi@8
  NiSourceTexture *v11; // eax@8
  float v12; // ST14_4@11
  float fTimea; // [sp+18h] [bp+8h]@10

  v2 = this;
  if ( this->m_bTimer != 1 )
  {
    v3 = fTime;
    if ( !this->m_bStop )
    {
      v4 = v3 - this->m_fOldTime;
      if ( this->m_fSpeed <= (double)v4 )
      {
        v5 = rand();
        v6 = *(_DWORD *)(ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 56);
        if ( v6 )
          v7 = *(_DWORD *)(v6 + 40);
        else
          v7 = 0;
        v8 = ChatColorTab::GetByID(v5 % v7 + 1);
        if ( v8 )
        {
          v9 = v2->m_pkSpr.m_pObject;
          v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = PgUtil::Create1PixelSourceTexture(v8->ColorR, v8->ColorG, v8->ColorB, -1);
          v10[113].__vecDelDtor((NiRefObject *)v9, (unsigned int)v11);
        }
        v3 = fTime;
        v2->m_fOldTime = fTime;
      }
    }
    fTimea = v3 - v2->m_fStartTime;
    if ( fTimea >= 1.5 )
    {
      v12 = v3;
      ChatColorSpinWin::Decrease(v2, v12);
    }
  }
}
// A9439C: using guessed type int ITableBase_ChatColor_ChatColorTab___ms_pkTable;

//----- (00413580) --------------------------------------------------------
void __thiscall ChatColorSpinWin::UpdateMeWin(ChatColorSpinWin *this, float fCurTime)
{
  ChatColorSpinWin *v2; // esi@1

  v2 = this;
  SpEffect::Update(this->m_pkChatColorEffect, fCurTime);
  ChatColorSpinWin::UpdateTimer(v2, fCurTime);
}

//----- (004135B0) --------------------------------------------------------
ChatColorSpinWin *__cdecl ChatColorSpinWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ChatColorSpinWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ChatColorSpinWin::ChatColorSpinWin((ChatColorSpinWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ChatColorSpinWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004136E0) --------------------------------------------------------
bool __thiscall ChatColorSpinWin::Create(ChatColorSpinWin *this, PgFrameWork *pkFrameWork)
{
  ChatColorSpinWin *v2; // ebx@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  volatile LONG *v7; // eax@7
  PgSprData *v9; // eax@12
  D3DXCOLOR v10; // ST20_16@15
  NiSourceTexture *v11; // eax@15
  PgWinSpr *v12; // eax@15
  PgWinSpr *v13; // esi@15
  PgWinSpr *v14; // edi@15
  char *v15; // esi@22
  unsigned int v16; // ST18_4@22
  D3DXCOLOR v17; // ST1C_16@22
  int v18; // ST0C_4@22
  int v19; // eax@22
  int v20; // eax@22
  D3DXCOLOR v21; // ST18_16@22
  void *v22; // edi@22
  void *v23; // esi@22
  int v24; // esi@22
  int v25; // eax@23
  char v26; // cl@24
  unsigned int v27; // eax@25
  char *v28; // edi@28
  char v29; // al@29
  unsigned int v30; // eax@30
  void *v31; // edi@30
  char v32; // cl@31
  bool v33; // cf@32
  NiNode *v34; // esi@36
  NiNode *v35; // eax@36
  NiNode *v36; // edi@38
  PgWinSpr *v37; // esi@47
  void *v38; // edi@47
  NiObject *v39; // eax@48
  float v40; // edx@50
  float v41; // eax@50
  NiNode *v42; // eax@50
  double v43; // st7@50
  float v44; // edx@50
  float v45; // ecx@50
  NiNode *v46; // esi@51
  unsigned int v47; // [sp+1Ch] [bp-388h]@1
  int uiHeight; // [sp+2Ch] [bp-378h]@22
  float v49; // [sp+30h] [bp-374h]@50
  float v50; // [sp+34h] [bp-370h]@50
  float v51; // [sp+38h] [bp-36Ch]@50
  NiPoint3 EffectPos; // [sp+3Ch] [bp-368h]@50
  int uiWidth; // [sp+48h] [bp-35Ch]@22
  HDC__ *hDC; // [sp+4Ch] [bp-358h]@22
  int uiTop; // [sp+50h] [bp-354h]@12
  int uiLeft; // [sp+54h] [bp-350h]@12
  void *pkTextWin; // [sp+58h] [bp-34Ch]@22
  UIUtil ui; // [sp+5Ch] [bp-348h]@15
  char *pcStr; // [sp+70h] [bp-334h]@22
  NiPointer<NiNode> spNode; // [sp+74h] [bp-330h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strbuf; // [sp+78h] [bp-32Ch]@23
  char acResult[512]; // [sp+94h] [bp-310h]@22
  char acStr[256]; // [sp+294h] [bp-110h]@22
  unsigned int v64; // [sp+394h] [bp-10h]@1
  int v65; // [sp+3A0h] [bp-4h]@1
  int v66; // [sp+3A4h] [bp+0h]@1

  v64 = (unsigned int)&v66 ^ __security_cookie;
  v47 = (unsigned int)&v66 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v65 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ChatColorSpin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("ChatColorSpin.nif Load Fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v65 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v7 = (volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "ChatColorSpin", 0) )
  {
LABEL_13:
    v6 = spNode.m_pObject;
    v65 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v7 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
    if ( !InterlockedDecrement(v7) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v65) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, uiLeft, uiTop);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkTitleText = UIUtil::CreateTextNoSpr(&ui, "WinTitle", &byte_97A313, COERCE_D3DXCOLOR(v10.r), 5u);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  v11 = MenuTexMgr::GetTexture(0x13u);
  UIUtil::CreateSpr(&ui, "Theme", v11);
  UIUtil::CreateSpr(&ui, "BaseSlot", 0);
  v12 = UIUtil::CreateSpr(&ui, "Slot01", 0);
  v13 = v2->m_pkSpr.m_pObject;
  v14 = v12;
  if ( v13 != v12 )
  {
    if ( v13
      && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v13 )
      v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v13,
        1u);
    v2->m_pkSpr.m_pObject = v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__stdcall *)(_DWORD))v2->m_pkSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  UIUtil::CreateSpr(&ui, "Deco01", 0);
  v15 = (char *)UIUtil::CreateButton(&ui, 0, "Ok", 0, 3);
  v16 = (unsigned int)Color::m_kDxWhiteColor.r;
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor.g;
  *(_QWORD *)&v17.b = __PAIR__(5, LODWORD(Color::m_kDxWhiteColor.a));
  v18 = (int)TextData::Get(0x4F5F499Fu);
  v19 = (*(int (__thiscall **)(char *))(*(_DWORD *)v15 + 148))(v15);
  v20 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v15 + 144))(v15, v19);
  UIUtil::CreateTextNoTag(&ui, 0, 0, v20, v18, v15, 0, v16, COERCE_D3DXCOLOR(v17.r), 0, 0, v47);
  UIUtil::CreateButton(&ui, 1u, "Cls", 0, 3);
  PgUtil::GetTriShapeRect(
    &spNode.m_pObject->baseclass_0,
    "Text01",
    &uiLeft,
    &uiTop,
    (unsigned int *)&uiWidth,
    (unsigned int *)&uiHeight);
  *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v22 = UIUtil::CreateTextEx(&ui, "Text01", byte_97A31D, 0, COERCE_D3DXCOLOR(v21.r), 5u, 0, 0, 0);
  pkTextWin = v22;
  hDC = Font::Get(0)->baseclass_0.m_kFontRenderStuff.hDC;
  v23 = TextData3::Get(0xDFCCCECEu);
  pcStr = (char *)v23;
  acResult[0] = 0;
  memset(&acResult[1], 0, 0x1FFu);
  memset(acStr, 0, 0x100u);
  v24 = PgUtil::StringPixelCopy(acStr, (char *)v23, hDC, uiWidth);
  if ( v24 )
  {
    do
    {
      v25 = (int)acStr;
      strbuf.baseclass_0._Myres = 15;
      strbuf.baseclass_0._Mysize = 0;
      strbuf.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      do
        v26 = *(_BYTE *)v25++;
      while ( v26 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &strbuf,
        acStr,
        v25 - (_DWORD)&acStr[1]);
      v27 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strbuf, "\n", 0, 1u);
      if ( v27 == -1 )
      {
        acStr[v24] = 0;
      }
      else
      {
        acStr[v27] = 0;
        v24 = v27 + 1;
      }
      pcStr += v24;
      v28 = (char *)(&strbuf.baseclass_0._Alval + 3);
      do
        v29 = (v28++)[1];
      while ( v29 );
      *(_WORD *)v28 = word_97A3A8;
      v30 = strlen(acStr) + 1;
      v31 = &strbuf.baseclass_0._Alval + 3;
      do
      {
        v32 = *((_BYTE *)v31 + 1);
        v31 = (char *)v31 + 1;
      }
      while ( v32 );
      memcpy(v31, acStr, 4 * (v30 >> 2));
      v33 = strbuf.baseclass_0._Myres < 0x10;
      memcpy((char *)v31 + 4 * (v30 >> 2), &acStr[4 * (v30 >> 2)], v30 & 3);
      if ( !v33 )
        operator delete(*(void **)&strbuf);
      memset(acStr, 0, 0x100u);
      v24 = PgUtil::StringPixelCopy(acStr, pcStr, hDC, uiWidth);
    }
    while ( v24 );
    v22 = pkTextWin;
  }
  (*(void (__thiscall **)(void *))(*(_DWORD *)v22 + 472))(v22);
  (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v22 + 240))(v22, 0);
  v34 = EffectMgr::GetEffectNode(&g_kEffectMgr, "ChatColorSpinEffect");
  v35 = spNode.m_pObject;
  if ( spNode.m_pObject != v34 )
  {
    if ( spNode.m_pObject )
    {
      v36 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v36 )
          v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
      }
    }
    spNode.m_pObject = v34;
    if ( !v34 )
      goto LABEL_44;
    InterlockedIncrement((volatile LONG *)&v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v35 = spNode.m_pObject;
  }
  if ( !v35 )
  {
LABEL_44:
    if ( NiMessageBox::ms_pfnMessageBox )
      NiMessageBox::ms_pfnMessageBox("ChatColorSpinEffect.nif Load Fail", "LoadFail", 0);
    LOBYTE(v65) = 0;
    UIUtil::_UIUtil(&ui);
    goto LABEL_13;
  }
  v37 = UIUtil::CreateSpr(&ui, "Effect01", 0);
  v38 = operator new(0x44u);
  pkTextWin = v38;
  LOBYTE(v65) = 2;
  if ( v38 )
  {
    v39 = NiObject::Clone(&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    SpEffect::SpEffect((SpEffect *)v38, (NiNode *)v39);
  }
  else
  {
    v39 = 0;
  }
  v2->m_pkChatColorEffect = (SpEffect *)v39;
  BYTE2(v39[8].baseclass_0.vfptr) = 1;
  v40 = v37->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
  v41 = v37->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
  EffectPos.x = v37->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
  EffectPos.y = v40;
  v49 = -EffectPos.x;
  EffectPos.z = v41;
  v42 = v2->m_pkChatColorEffect->m_spEffect.m_pObject;
  v50 = -v40;
  v43 = EffectPos.z;
  v44 = v50;
  v42->baseclass_0.m_kLocal.m_Translate.x = v49;
  v51 = v43;
  v45 = v51;
  v42->baseclass_0.m_kLocal.m_Translate.y = v44;
  v42->baseclass_0.m_kLocal.m_Translate.z = v45;
  LOBYTE(v65) = 1;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v2->m_kStartSound,
    "MoverUpgrade_Start",
    0x12u);
  ((void (__thiscall *)(ChatColorSpinWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v65) = 0;
  UIUtil::_UIUtil(&ui);
  v65 = -1;
  if ( spNode.m_pObject )
  {
    v46 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v46 )
        v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
    }
  }
  return 1;
}
// 97A3A8: using guessed type __int16 word_97A3A8;
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00413DF0) --------------------------------------------------------
void __thiscall NiAVObject::SetTranslate(NiAVObject *this, float x, float y, float z)
{
  this->m_kLocal.m_Translate.x = x;
  this->m_kLocal.m_Translate.y = y;
  this->m_kLocal.m_Translate.z = z;
}

//----- (00413E20) --------------------------------------------------------
unsigned int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Off, unsigned int _Count)
{
  unsigned int result; // eax@1
  unsigned int v5; // edi@2
  unsigned int v6; // edi@3
  unsigned int v7; // edi@4
  int v8; // ebx@6
  int v9; // eax@6
  int v10; // esi@6
  int v11; // eax@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // ecx@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // [sp+0h] [bp-4h]@1

  result = _Off;
  v13 = this;
  if ( __PAIR__(_Count, _Off) > this->baseclass_0._Mysize )
  {
    v5 = this->baseclass_0._Mysize;
    if ( _Off >= v5 || (v6 = v5 - _Off, _Count > v6) )
      goto LABEL_9;
    v7 = 1 - _Count + v6;
    if ( this->baseclass_0._Myres >= 0x10 )
      this = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    v8 = (int)((char *)this + _Off);
    memchr((char *)this + _Off, *_Ptr, v7);
    v10 = v9;
    if ( v9 )
    {
      while ( std::char_traits<char>::compare((const char *)v10, _Ptr, _Count) )
      {
        v7 = v7 + v8 - v10 - 1;
        v8 = v10 + 1;
        memchr((char *)(v10 + 1), *_Ptr, v7);
        v10 = v11;
        if ( !v11 )
          goto LABEL_9;
      }
      v12 = v13;
      if ( v13->baseclass_0._Myres >= 0x10 )
        v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v13->baseclass_0.___u0.baseclass_0.dummy[0];
      result = v10 - (_DWORD)v12;
    }
    else
    {
LABEL_9:
      result = -1;
    }
  }
  return result;
}

//----- (00413ED0) --------------------------------------------------------
unsigned int __cdecl ITableBase<ChatColor_ChatColorTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A9439C: using guessed type int ITableBase_ChatColor_ChatColorTab___ms_pkTable;

//----- (00413EF0) --------------------------------------------------------
ChatColor *__cdecl ChatColorTab::GetByID(char kColorID)
{
  unsigned int v1; // esi@1
  ChatColor *result; // eax@2

  v1 = 0;
  if ( ITableBase<ChatColor_ChatColorTab>::GetTotal() )
  {
    while ( 1 )
    {
      result = (ChatColor *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 4),
                              v1);
      if ( result->ChatColorID == kColorID )
        break;
      ++v1;
      if ( v1 >= ITableBase<ChatColor_ChatColorTab>::GetTotal() )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A9439C: using guessed type int ITableBase_ChatColor_ChatColorTab___ms_pkTable;

//----- (00413F30) --------------------------------------------------------
void *__thiscall ChatColorSpinWin::_scalar_deleting_destructor_(ChatColorSpinWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ChatColorSpinWin::_ChatColorSpinWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00413F60) --------------------------------------------------------
void __thiscall ClassChangeWin::OnClose(ClassChangeWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, this->m_pkBox);
}

//----- (00413F80) --------------------------------------------------------
void __thiscall ClassChangeWin::OnHelpLink(ClassChangeWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ClassChangeWin");
}

//----- (00413FB0) --------------------------------------------------------
void __thiscall ClassChangeWin::SetMoney(ClassChangeWin *this, unsigned __int64 kTotalPrice)
{
  __int64 v2; // kr00_8@1
  ClassChangeWin *v3; // esi@1
  NiRefObjectVtbl *v4; // ST20_4@1
  char *v5; // eax@1
  char *v6; // eax@1
  char *v7; // eax@1
  char *v8; // eax@1
  NiRefObjectVtbl *kTotalPrice_4; // [sp+1Ch] [bp+Ch]@1
  NiRefObjectVtbl *kTotalPrice_4a; // [sp+1Ch] [bp+Ch]@1
  NiRefObjectVtbl *kTotalPrice_4b; // [sp+1Ch] [bp+Ch]@1

  v2 = kTotalPrice;
  v3 = this;
  v4 = this->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::GetGold(kTotalPrice);
  v5 = fs("%I64d ");
  v4[118].__vecDelDtor((NiRefObject *)v3->m_pkGoldText, (unsigned int)v5);
  kTotalPrice_4 = v3->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::GetSilver(v2);
  v6 = fs("%I64d ");
  kTotalPrice_4[118].__vecDelDtor((NiRefObject *)v3->m_pkSilverText, (unsigned int)v6);
  kTotalPrice_4a = v3->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::GetCopper(v2);
  v7 = fs("%I64d ");
  kTotalPrice_4a[118].__vecDelDtor((NiRefObject *)v3->m_pkCopperText, (unsigned int)v7);
  kTotalPrice_4b = v3->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::GetGem(v2);
  v8 = fs("%I64d ");
  kTotalPrice_4b[118].__vecDelDtor((NiRefObject *)v3->m_pkGemText, (unsigned int)v8);
}

//----- (004140A0) --------------------------------------------------------
void __thiscall ClassChangeWin::GoCharSelectFrameWork(ClassChangeWin *this)
{
  PgFrameWork *v1; // eax@1
  WaitingForLogoutWin *v2; // esi@2

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
  {
    v2 = (WaitingForLogoutWin *)v1[31].m_BackFrameID;
    if ( v2 )
    {
      WaitingForLogoutWin::SetLogoutType(v2, LT_CHARSELECT);
      WaitingForLogoutWin::OnTimeOver(v2);
    }
  }
}

//----- (004140E0) --------------------------------------------------------
void __thiscall ClassChangeWin::_ClassChangeWin(ClassChangeWin *this)
{
  ClassChangeWin *v1; // esi@1
  char *v2; // edi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClassChangeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ClassChangeWin::_vftable_;
  v2 = (char *)&this->m_kAfterMap;
  this->m_kAfterMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kAfterMap);
  *(_DWORD *)v2 = &NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(*((void **)v2 + 2));
  v1->m_kBeforeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kBeforeMap);
  v1->m_kBeforeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kBeforeMap);
  operator delete__(v1->m_kBeforeMap.baseclass_0.m_ppkHashTable);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97AA90: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 97AABC: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 97AADC: using guessed type int (__stdcall *ClassChangeWin___vftable_)(int uiFlags);
// 97AAFC: using guessed type int (__thiscall *ClassChangeWin___vftable_)(void *p, char);

//----- (004141B0) --------------------------------------------------------
void __thiscall ClassChangeWin::OnOK(ClassChangeWin *this)
{
  ClassChangeWin *v1; // esi@1
  char *v2; // eax@1
  char *v3; // eax@1
  MsgBox *v4; // eax@1

  v1 = this;
  ((void (*)(void))this->m_pkAfterText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  v2 = TextData3::Get(0xEF1FF512u);
  v3 = fs(v2);
  v4 = MsgBox::Modal(MSGBOX_OKCANCEL, v3);
  v1->m_pkBox = (PgWin *)v4;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  SpEffect::Start(v1->m_pkEndEff, &v1->m_pkEndWin->baseclass_0.baseclass_0);
  v1->m_pkEndEff->m_spEffect.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
}

//----- (00414220) --------------------------------------------------------
void __thiscall ClassChangeWin::ClassChangeWin(ClassChangeWin *this)
{
  ClassChangeWin *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST18_4@1
  void *v4; // eax@1
  unsigned int v5; // ST08_4@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClassChangeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ClassChangeWin::_vftable_;
  v1->m_kBeforeMap.baseclass_0.m_uiHashSize = 37;
  v1->m_kBeforeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  *(_DWORD *)&v1->m_kBeforeMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kBeforeMap.baseclass_0.m_uiHashSize;
  v1->m_kBeforeMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned char,NiPointer<PgWinSpr> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kBeforeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  v1->m_kAfterMap.baseclass_0.m_uiHashSize = 37;
  v1->m_kAfterMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  *(_DWORD *)&v1->m_kAfterMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4 = operator new__(0x94u);
  v5 = 4 * v1->m_kAfterMap.baseclass_0.m_uiHashSize;
  v1->m_kAfterMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned char,NiPointer<PgWinSpr> > **)v4;
  memset((char *)v4, 0, v5);
  v1->m_kAfterMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  v1->m_pSlideBarList = 0;
  v1->m_pkBeforeText = 0;
  v1->m_pkAfterText = 0;
  v1->m_pkCopperText = 0;
  v1->m_pkSilverText = 0;
  v1->m_pkGoldText = 0;
  v1->m_pkGemText = 0;
  v1->m_pkBox = 0;
  v1->m_pkEndWin = 0;
  v1->m_pkEndEff = 0;
}
// 97AA90: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 97AABC: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 97AADC: using guessed type int (__stdcall *ClassChangeWin___vftable_)(int uiFlags);
// 97AAFC: using guessed type int (__thiscall *ClassChangeWin___vftable_)(void *p, char);

//----- (00414360) --------------------------------------------------------
bool __thiscall ClassChangeWin::Create(ClassChangeWin *this, PgFrameWork *pkFrameWokr)
{
  ClassChangeWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // eax@11
  NiNode *v9; // esi@12
  NiSourceTexture *v10; // eax@17
  PgSprData *v11; // eax@20
  PgWinSpr *v12; // edi@20
  NiTexturePalette *v13; // ebx@20
  char *v14; // eax@22
  void *v15; // ebx@22
  NiObject *v16; // eax@23
  float v17; // edx@25
  float v18; // ecx@25
  double v19; // st7@25
  NiRefObjectVtbl *v20; // edx@25
  double v21; // st7@25
  NiTexturePalette *v22; // edi@25
  char *v23; // eax@27
  void *v24; // edi@27
  NiObject *v25; // eax@28
  PgWinSpr *v26; // ecx@30
  NiRefObjectVtbl *v27; // eax@30
  float v28; // edx@30
  float v29; // ecx@30
  double v30; // st7@30
  float v31; // ecx@30
  float v32; // edx@30
  PgWin *v33; // edi@30
  D3DXCOLOR v34; // ST1C_16@30
  char *v35; // ST10_4@30
  int v36; // ST0C_4@30
  int v37; // eax@30
  PgWin *v38; // edi@30
  D3DXCOLOR v39; // ST1C_16@30
  char *v40; // ST10_4@30
  int v41; // ST0C_4@30
  int v42; // eax@30
  D3DXCOLOR v43; // ST1C_16@30
  char *v44; // eax@30
  D3DXCOLOR v45; // ST24_16@30
  char *v46; // eax@30
  D3DXCOLOR v47; // ST24_16@30
  char *v48; // eax@30
  double v49; // st6@31
  double v50; // st3@35
  signed int v51; // edi@36
  double v52; // st3@40
  signed int v53; // edx@41
  double v54; // st7@45
  signed int v55; // eax@46
  D3DXCOLOR v56; // ST18_16@50
  PgWinText *v57; // eax@50
  double v58; // st6@50
  double v59; // st6@51
  double v60; // st5@51
  double v61; // st4@51
  double v62; // st3@55
  signed int v63; // edi@56
  double v64; // st3@60
  signed int v65; // edx@61
  double v66; // st7@65
  signed int v67; // eax@66
  double v68; // qt2@67
  double v69; // st4@67
  double v70; // st6@67
  D3DXCOLOR v71; // ST18_16@70
  PgWinText *v72; // eax@70
  double v73; // st6@70
  double v74; // st6@71
  double v75; // st5@71
  double v76; // st4@71
  double v77; // st3@75
  signed int v78; // edi@76
  double v79; // st3@80
  signed int v80; // edx@81
  double v81; // st7@85
  signed int v82; // eax@86
  double v83; // qt0@87
  double v84; // st4@87
  double v85; // st6@87
  D3DXCOLOR v86; // ST18_16@90
  PgWinText *v87; // eax@90
  double v88; // st6@90
  double v89; // st6@91
  double v90; // st5@91
  double v91; // st4@91
  double v92; // st3@95
  signed int v93; // edi@96
  double v94; // st3@100
  signed int v95; // edx@101
  double v96; // st7@105
  signed int v97; // eax@106
  double v98; // qt2@107
  double v99; // st4@107
  double v100; // st6@107
  D3DXCOLOR v101; // ST18_16@110
  PgWinText *v102; // eax@110
  D3DXCOLOR v103; // ST24_16@110
  char *v104; // eax@110
  NiSourceTexture *v105; // edi@110
  D3DXCOLOR v106; // ST1C_16@112
  PgWinText *v107; // eax@112
  PgWinText *v108; // edi@112
  NiRefObjectVtbl *v109; // ebx@112
  char *v110; // eax@112
  D3DXCOLOR v111; // ST28_16@112
  char *v112; // eax@112
  PgSprData *v113; // eax@112
  SlideBar *v114; // eax@112
  SlideBar *v115; // eax@112
  NiRefObjectVtbl *v116; // ebx@112
  SlideBar *v117; // edi@112
  int v118; // eax@112
  int v119; // eax@112
  NiPointer<PgWinSpr> v120; // ecx@112
  NiPointer<PgWinSpr> v121; // eax@112
  NiPointer<PgWinSpr> v122; // ecx@114
  NiPointer<PgWinSpr> v123; // eax@114
  NiPointer<PgWinSpr> v124; // ecx@116
  NiPointer<PgWinSpr> v125; // eax@116
  NiPointer<PgWinSpr> v126; // ecx@118
  NiPointer<PgWinSpr> v127; // eax@118
  NiPointer<PgWinSpr> v128; // ecx@120
  NiPointer<PgWinSpr> v129; // eax@120
  NiPointer<PgWinSpr> v130; // ecx@122
  NiPointer<PgWinSpr> v131; // eax@122
  NiPointer<PgWinSpr> v132; // ecx@124
  NiPointer<PgWinSpr> v133; // eax@124
  NiPointer<PgWinSpr> v134; // ecx@126
  NiPointer<PgWinSpr> v135; // eax@126
  NiPointer<PgWinSpr> v136; // ecx@128
  NiPointer<PgWinSpr> v137; // eax@128
  NiPointer<PgWinSpr> v138; // ecx@130
  NiPointer<PgWinSpr> v139; // eax@130
  NiPointer<PgWinSpr> v140; // ecx@132
  NiPointer<PgWinSpr> v141; // eax@132
  NiPointer<PgWinSpr> v142; // ecx@134
  NiPointer<PgWinSpr> v143; // eax@134
  NiPointer<PgWinSpr> v144; // ecx@136
  NiPointer<PgWinSpr> v145; // eax@136
  NiPointer<PgWinSpr> v146; // ecx@138
  NiPointer<PgWinSpr> v147; // eax@138
  NiPointer<PgWinSpr> v148; // ecx@140
  NiPointer<PgWinSpr> v149; // eax@140
  NiPointer<PgWinSpr> v150; // ecx@142
  NiPointer<PgWinSpr> v151; // eax@142
  NiPointer<PgWinSpr> v152; // ecx@144
  NiPointer<PgWinSpr> v153; // eax@144
  NiPointer<PgWinSpr> v154; // ecx@146
  NiPointer<PgWinSpr> v155; // eax@146
  NiPointer<PgWinSpr> v156; // ecx@148
  NiPointer<PgWinSpr> v157; // eax@148
  NiPointer<PgWinSpr> v158; // ecx@150
  NiPointer<PgWinSpr> v159; // eax@150
  NiPointer<PgWinSpr> v160; // ecx@152
  NiPointer<PgWinSpr> v161; // eax@152
  NiPointer<PgWinSpr> v162; // eax@154
  void *(__thiscall *v163)(NiRefObject *, unsigned int); // edx@156
  NiNode *v164; // esi@157
  NiNode *v165; // esi@160
  const char *v166; // [sp+20h] [bp-6Ch]@18
  int *v167; // [sp+24h] [bp-68h]@18
  int *v168; // [sp+28h] [bp-64h]@18
  NiSourceTexture *v169; // [sp+2Ch] [bp-60h]@18
  NiPointer<PgWinSpr> v170; // [sp+30h] [bp-5Ch]@112
  UIUtil ui; // [sp+40h] [bp-4Ch]@17
  void *(__thiscall *v172)(NiRefObject *, unsigned int); // [sp+54h] [bp-38h]@25
  float v173; // [sp+58h] [bp-34h]@25
  float v174; // [sp+5Ch] [bp-30h]@25
  NiPoint3 EffectPos; // [sp+60h] [bp-2Ch]@25
  int v176; // [sp+6Ch] [bp-20h]@31
  NiPointer<NiNode> pkNiNodePtr; // [sp+70h] [bp-1Ch]@20
  int iLeft; // [sp+74h] [bp-18h]@11
  int iTop; // [sp+78h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+7Ch] [bp-10h]@1
  int v181; // [sp+88h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v181 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ClassChangeWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
    if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWokr, "ClassChageWin", 0) )
    {
      UIUtil::UIUtil(&ui);
      LOBYTE(v181) = 1;
      UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, iLeft, iTop);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      v10 = MenuTexMgr::GetTexture(0x13u);
      if ( v10 )
      {
        v169 = v10;
        v168 = &iTop;
        v167 = &iLeft;
        v166 = "Theme";
      }
      else
      {
        v169 = 0;
        v168 = &iTop;
        v167 = &iLeft;
        v166 = "Theme";
      }
      v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v166, v167, v168, v169);
      PgWinSpr::CreateWin(iLeft, iTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      UIUtil::CreateSpr(&ui, "Panel01", 0);
      UIUtil::CreateSpr(&ui, "Panel02", 0);
      v12 = UIUtil::CreateSpr(&ui, "ClassChangeImage", 0);
      pkNiNodePtr.m_pObject = 0;
      v13 = dword_B70448;
      LOBYTE(v181) = 2;
      if ( !Folder::m_bInit )
        Folder::Init();
      v14 = Folder::Merge(&Folder::m_acEffect, "ClassChangeWin_loop.nif");
      PgUtil::LoadNodeNifFile(v14, &pkNiNodePtr, v13);
      v15 = operator new(0x44u);
      LOBYTE(v181) = 3;
      if ( v15 )
      {
        v16 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
        SpEffect::SpEffect((SpEffect *)v15, (NiNode *)v16);
      }
      else
      {
        v16 = 0;
      }
      v17 = v12->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
      EffectPos.x = v12->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
      v18 = v12->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      *(float *)&v172 = -EffectPos.x;
      EffectPos.z = v18;
      EffectPos.y = v17;
      v19 = v17;
      v20 = v16->baseclass_0.vfptr;
      v16->baseclass_0.vfptr[22].__vecDelDtor = v172;
      v173 = -v19;
      v21 = EffectPos.z;
      v20[23].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v173);
      v174 = v21;
      v20[24].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v174);
      LOBYTE(v181) = 2;
      BYTE1(v16[8].baseclass_0.vfptr) = 1;
      SpEffect::Start((SpEffect *)v16, &v12->baseclass_0.baseclass_0);
      v2->m_pkEndWin = UIUtil::CreateSpr(&ui, "ArrowIcon", 0);
      v22 = dword_B70448;
      if ( !Folder::m_bInit )
        Folder::Init();
      v23 = Folder::Merge(&Folder::m_acEffect, "ClassChangeWin_end.nif");
      PgUtil::LoadNodeNifFile(v23, &pkNiNodePtr, v22);
      v24 = operator new(0x44u);
      LOBYTE(v181) = 4;
      if ( v24 )
      {
        v25 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
        SpEffect::SpEffect((SpEffect *)v24, (NiNode *)v25);
      }
      else
      {
        v25 = 0;
      }
      v26 = v2->m_pkEndWin;
      v2->m_pkEndEff = (SpEffect *)v25;
      v27 = v25->baseclass_0.vfptr;
      EffectPos.x = v26->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
      v28 = v26->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
      v29 = v26->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      *(float *)&v172 = -EffectPos.x;
      EffectPos.y = v28;
      EffectPos.z = v29;
      v173 = -v28;
      v30 = v29;
      v31 = v173;
      v27[22].__vecDelDtor = v172;
      v174 = v30;
      v32 = v174;
      v27[23].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v31);
      v27[24].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v32);
      v2->m_pkEndEff->m_spEffect.m_pObject->baseclass_0.m_uFlags |= 1u;
      LOBYTE(v181) = 2;
      v33 = (PgWin *)UIUtil::CreateButton(&ui, 0, "Ok", 0, 3);
      *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v35 = TextData3::Get(0xB2E6EFC5u);
      v36 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v33);
      v37 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v33);
      UIUtil::CreateTextNoTag(&ui, 0, 0, v37, v36, v35, v33, 0, COERCE_D3DXCOLOR(v34.r), 5u, 0, 0);
      v38 = (PgWin *)UIUtil::CreateButton(&ui, 1u, "Cancel", 0, 3);
      *(_QWORD *)&v39.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v39.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v40 = TextData3::Get(0xF41F3213u);
      v41 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v38);
      v42 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v38);
      UIUtil::CreateTextNoTag(&ui, 0, 0, v42, v41, v40, v38, 0, COERCE_D3DXCOLOR(v39.r), 5u, 0, 0);
      *(_QWORD *)&v43.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v43.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v44 = TextData3::Get(0x4620F773u);
      UIUtil::CreateTextNoSprEx(&ui, "CautionText", v44, COERCE_D3DXCOLOR(v43.r), 5u, 0, 0);
      *(_QWORD *)&v45.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v45.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v46 = TextData3::Get(0x204CFC4Cu);
      v2->m_pkBeforeText = UIUtil::CreateTextNoSpr(&ui, "ClassNameText01", v46, COERCE_D3DXCOLOR(v45.r), 5u);
      *(_QWORD *)&v47.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v47.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v48 = TextData3::Get(0x1F420A08u);
      v2->m_pkAfterText = UIUtil::CreateTextNoSpr(&ui, "ClassNameText02", v48, COERCE_D3DXCOLOR(v47.r), 5u);
      UIUtil::CreateButton(&ui, 1u, "Cls", 0, 3);
      UIUtil::CreateSpr(&ui, "CopperBtn", 0);
      if ( Color::m_kDxWhiteColor.r < 1.0 )
      {
        if ( Color::m_kDxWhiteColor.r > 0.0 )
        {
          v49 = 0.0;
          *(_QWORD *)&EffectPos.y = (signed __int64)(Color::m_kDxWhiteColor.r * 255.0 + 0.5);
          v176 = (signed __int64)(Color::m_kDxWhiteColor.r * 255.0 + 0.5);
        }
        else
        {
          v49 = 0.0;
          v176 = 0;
        }
      }
      else
      {
        v49 = 0.0;
        v176 = 255;
      }
      v50 = Color::m_kDxWhiteColor.g;
      if ( Color::m_kDxWhiteColor.g < 1.0 )
      {
        if ( v50 > v49 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v50 * 255.0 + 0.5);
          v51 = (signed __int64)(v50 * 255.0 + 0.5);
        }
        else
        {
          v51 = 0;
        }
      }
      else
      {
        v51 = 255;
      }
      v52 = Color::m_kDxWhiteColor.b;
      if ( Color::m_kDxWhiteColor.b < 1.0 )
      {
        if ( v52 > v49 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v52 * 255.0 + 0.5);
          v53 = (signed __int64)(v52 * 255.0 + 0.5);
        }
        else
        {
          v53 = 0;
        }
      }
      else
      {
        v53 = 255;
      }
      v54 = Color::m_kDxWhiteColor.a;
      if ( Color::m_kDxWhiteColor.a < 1.0 )
      {
        if ( v49 < v54 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v54 * 255.0 + 0.5);
          v55 = (signed __int64)(v54 * 255.0 + 0.5);
        }
        else
        {
          v55 = 0;
        }
      }
      else
      {
        v55 = 255;
      }
      *(_QWORD *)&v56.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v56.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v57 = UIUtil::CreateTextEx(
              &ui,
              "CopperInput",
              &byte_97A691,
              v53 | ((v51 | ((v176 | (v55 << 8)) << 8)) << 8),
              COERCE_D3DXCOLOR(v56.r),
              5u,
              0,
              0,
              0);
      v2->m_pkCopperText = v57;
      v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v57,
        6u);
      UIUtil::CreateSpr(&ui, "SilverBtn", 0);
      v58 = Color::m_kDxWhiteColor.r;
      if ( Color::m_kDxWhiteColor.r < 1.0 )
      {
        if ( v58 > 0.0 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v58 * 255.0 + 0.5);
          v176 = (signed __int64)(v58 * 255.0 + 0.5);
          v59 = 0.0;
          v61 = 255.0;
          v60 = 0.5;
        }
        else
        {
          v59 = 0.0;
          v176 = 0;
          v60 = 0.5;
          v61 = 255.0;
        }
      }
      else
      {
        v176 = 255;
        v59 = 0.0;
        v60 = 0.5;
        v61 = 255.0;
      }
      v62 = Color::m_kDxWhiteColor.g;
      if ( Color::m_kDxWhiteColor.g < 1.0 )
      {
        if ( v62 > v59 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v62 * v61 + v60);
          v63 = (signed __int64)(v62 * v61 + v60);
        }
        else
        {
          v63 = 0;
        }
      }
      else
      {
        v63 = 255;
      }
      v64 = Color::m_kDxWhiteColor.b;
      if ( Color::m_kDxWhiteColor.b < 1.0 )
      {
        if ( v64 > v59 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v64 * v61 + v60);
          v65 = (signed __int64)(v64 * v61 + v60);
        }
        else
        {
          v65 = 0;
        }
      }
      else
      {
        v65 = 255;
      }
      v66 = Color::m_kDxWhiteColor.a;
      if ( Color::m_kDxWhiteColor.a < 1.0 )
      {
        v68 = v61;
        v69 = v59;
        v70 = v68;
        if ( v69 < v66 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v60 + v70 * v66);
          v67 = (signed __int64)(v60 + v70 * v66);
        }
        else
        {
          v67 = 0;
        }
      }
      else
      {
        v67 = 255;
      }
      *(_QWORD *)&v71.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v71.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v72 = UIUtil::CreateTextEx(
              &ui,
              "SilverInput",
              &byte_97A692,
              v65 | ((v63 | ((v176 | (v67 << 8)) << 8)) << 8),
              COERCE_D3DXCOLOR(v71.r),
              5u,
              0,
              0,
              0);
      v2->m_pkSilverText = v72;
      v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v72,
        6u);
      UIUtil::CreateSpr(&ui, "GoldBtn", 0);
      v73 = Color::m_kDxWhiteColor.r;
      if ( Color::m_kDxWhiteColor.r < 1.0 )
      {
        if ( v73 > 0.0 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v73 * 255.0 + 0.5);
          v176 = (signed __int64)(v73 * 255.0 + 0.5);
          v74 = 0.0;
          v76 = 255.0;
          v75 = 0.5;
        }
        else
        {
          v74 = 0.0;
          v176 = 0;
          v75 = 0.5;
          v76 = 255.0;
        }
      }
      else
      {
        v176 = 255;
        v74 = 0.0;
        v75 = 0.5;
        v76 = 255.0;
      }
      v77 = Color::m_kDxWhiteColor.g;
      if ( Color::m_kDxWhiteColor.g < 1.0 )
      {
        if ( v77 > v74 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v77 * v76 + v75);
          v78 = (signed __int64)(v77 * v76 + v75);
        }
        else
        {
          v78 = 0;
        }
      }
      else
      {
        v78 = 255;
      }
      v79 = Color::m_kDxWhiteColor.b;
      if ( Color::m_kDxWhiteColor.b < 1.0 )
      {
        if ( v79 > v74 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v79 * v76 + v75);
          v80 = (signed __int64)(v79 * v76 + v75);
        }
        else
        {
          v80 = 0;
        }
      }
      else
      {
        v80 = 255;
      }
      v81 = Color::m_kDxWhiteColor.a;
      if ( Color::m_kDxWhiteColor.a < 1.0 )
      {
        v83 = v76;
        v84 = v74;
        v85 = v83;
        if ( v84 < v81 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v75 + v85 * v81);
          v82 = (signed __int64)(v75 + v85 * v81);
        }
        else
        {
          v82 = 0;
        }
      }
      else
      {
        v82 = 255;
      }
      *(_QWORD *)&v86.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v86.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v87 = UIUtil::CreateTextEx(
              &ui,
              "GoldInput",
              &byte_97A693,
              v80 | ((v78 | ((v176 | (v82 << 8)) << 8)) << 8),
              COERCE_D3DXCOLOR(v86.r),
              5u,
              0,
              0,
              0);
      v2->m_pkGoldText = v87;
      v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v87,
        6u);
      UIUtil::CreateSpr(&ui, "GemBtn", 0);
      v88 = Color::m_kDxWhiteColor.r;
      if ( Color::m_kDxWhiteColor.r < 1.0 )
      {
        if ( v88 > 0.0 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v88 * 255.0 + 0.5);
          v176 = (signed __int64)(v88 * 255.0 + 0.5);
          v89 = 0.0;
          v91 = 255.0;
          v90 = 0.5;
        }
        else
        {
          v89 = 0.0;
          v176 = 0;
          v90 = 0.5;
          v91 = 255.0;
        }
      }
      else
      {
        v176 = 255;
        v89 = 0.0;
        v90 = 0.5;
        v91 = 255.0;
      }
      v92 = Color::m_kDxWhiteColor.g;
      if ( Color::m_kDxWhiteColor.g < 1.0 )
      {
        if ( v92 > v89 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v92 * v91 + v90);
          v93 = (signed __int64)(v92 * v91 + v90);
        }
        else
        {
          v93 = 0;
        }
      }
      else
      {
        v93 = 255;
      }
      v94 = Color::m_kDxWhiteColor.b;
      if ( Color::m_kDxWhiteColor.b < 1.0 )
      {
        if ( v94 > v89 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v94 * v91 + v90);
          v95 = (signed __int64)(v94 * v91 + v90);
        }
        else
        {
          v95 = 0;
        }
      }
      else
      {
        v95 = 255;
      }
      v96 = Color::m_kDxWhiteColor.a;
      if ( Color::m_kDxWhiteColor.a < 1.0 )
      {
        v98 = v91;
        v99 = v89;
        v100 = v98;
        if ( v99 < v96 )
        {
          *(_QWORD *)&EffectPos.y = (signed __int64)(v90 + v100 * v96);
          v97 = (signed __int64)(v90 + v100 * v96);
        }
        else
        {
          v97 = 0;
        }
      }
      else
      {
        v97 = 255;
      }
      *(_QWORD *)&v101.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v101.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v102 = UIUtil::CreateTextEx(
               &ui,
               "GemInput",
               &byte_97A6AD,
               v95 | ((v93 | ((v176 | (v97 << 8)) << 8)) << 8),
               COERCE_D3DXCOLOR(v101.r),
               5u,
               0,
               0,
               0);
      v2->m_pkGemText = v102;
      v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v102,
        6u);
      UIUtil::CreateSpr(&ui, "IconSlot", 0);
      *(_QWORD *)&v103.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v103.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v104 = TextData3::Get(0x68DCA5A8u);
      UIUtil::CreateTextNoSpr(&ui, "RecompenseText", v104, COERCE_D3DXCOLOR(v103.r), 5u);
      v105 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
        UIUtil::CreateBtn(&ui, 3u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v105);
      *(_QWORD *)&v106.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v106.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v107 = UIUtil::CreateText(&ui, "Text01", byte_97A6AE, 0, COERCE_D3DXCOLOR(v106.r), 0, 0, 0);
      v108 = v107;
      v109 = v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v110 = TextData3::Get(0x9BCCAEDAu);
      ((void (__thiscall *)(PgWinText *, char *, _DWORD, PgWinSpr *))v109[120].__vecDelDtor)(
        v108,
        v110,
        0,
        v170.m_pObject);
      v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v108,
        0);
      *(_QWORD *)&v111.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v111.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v112 = TextData3::Get(0xBBCA1A3Bu);
      UIUtil::CreateTextNoSpr(&ui, "WinTitle", v112, COERCE_D3DXCOLOR(v111.r), 5u);
      v113 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, 0);
      v114 = SlideBar::CreateWin(
               spNode.m_pObject,
               "SlideBar",
               "SlideBar_UpBtn",
               "SlideBar_DnBtn",
               v113,
               0,
               &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pSlideBarList = v114;
      v114->m_uiClickMsg = 2;
      v2->m_pSlideBarList->m_eType = 1;
      v115 = v2->m_pSlideBarList;
      v116 = v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v117 = v2->m_pSlideBarList;
      v118 = ((int (__thiscall *)(SlideBar *))v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2->m_pSlideBarList);
      v119 = (int)v117->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                    (NiRefObject *)v117,
                    v118);
      v116[77].__vecDelDtor((NiRefObject *)v2->m_pSlideBarList, v119 - 18);
      v170.m_pObject = v120.m_pObject;
      v121.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemAssassin", 0);
      v170.m_pObject = v121.m_pObject;
      if ( v121.m_pObject )
        InterlockedIncrement((volatile LONG *)&v121.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        25,
        v170);
      v170.m_pObject = v122.m_pObject;
      v123.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemCloser", 0);
      v170.m_pObject = v123.m_pObject;
      if ( v123.m_pObject )
        InterlockedIncrement((volatile LONG *)&v123.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        24,
        v170);
      v170.m_pObject = v124.m_pObject;
      v125.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemGladiator", 0);
      v170.m_pObject = v125.m_pObject;
      if ( v125.m_pObject )
        InterlockedIncrement((volatile LONG *)&v125.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        4,
        v170);
      v170.m_pObject = v126.m_pObject;
      v127.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemGuardian", 0);
      v170.m_pObject = v127.m_pObject;
      if ( v127.m_pObject )
        InterlockedIncrement((volatile LONG *)&v127.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        10,
        v170);
      v170.m_pObject = v128.m_pObject;
      v129.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemHolyknight", 0);
      v170.m_pObject = v129.m_pObject;
      if ( v129.m_pObject )
        InterlockedIncrement((volatile LONG *)&v129.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        9,
        v170);
      v170.m_pObject = v130.m_pObject;
      v131.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemKnight", 0);
      v170.m_pObject = v131.m_pObject;
      if ( v131.m_pObject )
        InterlockedIncrement((volatile LONG *)&v131.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        5,
        v170);
      v170.m_pObject = v132.m_pObject;
      v133.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemRanger", 0);
      v170.m_pObject = v133.m_pObject;
      if ( v133.m_pObject )
        InterlockedIncrement((volatile LONG *)&v133.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        15,
        v170);
      v170.m_pObject = v134.m_pObject;
      v135.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemSentinel", 0);
      v170.m_pObject = v135.m_pObject;
      if ( v135.m_pObject )
        InterlockedIncrement((volatile LONG *)&v135.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        26,
        v170);
      v170.m_pObject = v136.m_pObject;
      v137.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemSharpshooter", 0);
      v170.m_pObject = v137.m_pObject;
      if ( v137.m_pObject )
        InterlockedIncrement((volatile LONG *)&v137.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        14,
        v170);
      v170.m_pObject = v138.m_pObject;
      v139.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemWarlock", 0);
      v170.m_pObject = v139.m_pObject;
      if ( v139.m_pObject )
        InterlockedIncrement((volatile LONG *)&v139.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        19,
        v170);
      v170.m_pObject = v140.m_pObject;
      v141.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemWizard", 0);
      v170.m_pObject = v141.m_pObject;
      if ( v141.m_pObject )
        InterlockedIncrement((volatile LONG *)&v141.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kBeforeMap.baseclass_0,
        20,
        v170);
      v170.m_pObject = v142.m_pObject;
      v143.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemAssassin01", 0);
      v170.m_pObject = v143.m_pObject;
      if ( v143.m_pObject )
        InterlockedIncrement((volatile LONG *)&v143.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        25,
        v170);
      v170.m_pObject = v144.m_pObject;
      v145.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemCloser01", 0);
      v170.m_pObject = v145.m_pObject;
      if ( v145.m_pObject )
        InterlockedIncrement((volatile LONG *)&v145.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        24,
        v170);
      v170.m_pObject = v146.m_pObject;
      v147.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemGladiator01", 0);
      v170.m_pObject = v147.m_pObject;
      if ( v147.m_pObject )
        InterlockedIncrement((volatile LONG *)&v147.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        4,
        v170);
      v170.m_pObject = v148.m_pObject;
      v149.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemGuardian01", 0);
      v170.m_pObject = v149.m_pObject;
      if ( v149.m_pObject )
        InterlockedIncrement((volatile LONG *)&v149.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        10,
        v170);
      v170.m_pObject = v150.m_pObject;
      v151.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemHolyknight01", 0);
      v170.m_pObject = v151.m_pObject;
      if ( v151.m_pObject )
        InterlockedIncrement((volatile LONG *)&v151.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        9,
        v170);
      v170.m_pObject = v152.m_pObject;
      v153.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemKnight01", 0);
      v170.m_pObject = v153.m_pObject;
      if ( v153.m_pObject )
        InterlockedIncrement((volatile LONG *)&v153.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        5,
        v170);
      v170.m_pObject = v154.m_pObject;
      v155.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemRanger01", 0);
      v170.m_pObject = v155.m_pObject;
      if ( v155.m_pObject )
        InterlockedIncrement((volatile LONG *)&v155.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        15,
        v170);
      v170.m_pObject = v156.m_pObject;
      v157.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemSentinel01", 0);
      v170.m_pObject = v157.m_pObject;
      if ( v157.m_pObject )
        InterlockedIncrement((volatile LONG *)&v157.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        26,
        v170);
      v170.m_pObject = v158.m_pObject;
      v159.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemSharpshooter01", 0);
      v170.m_pObject = v159.m_pObject;
      if ( v159.m_pObject )
        InterlockedIncrement((volatile LONG *)&v159.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        14,
        v170);
      v170.m_pObject = v160.m_pObject;
      v161.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemWarlock01", 0);
      v170.m_pObject = v161.m_pObject;
      if ( v161.m_pObject )
        InterlockedIncrement((volatile LONG *)&v161.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        19,
        v170);
      v162.m_pObject = UIUtil::CreateSpr(&ui, "ClassEmblemWizard01", 0);
      v170.m_pObject = v162.m_pObject;
      if ( v162.m_pObject )
        InterlockedIncrement((volatile LONG *)&v162.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(
        &v2->m_kAfterMap.baseclass_0,
        20,
        v170);
      v163 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
      *(float *)&v170.m_pObject = 0.5;
      ((void (__thiscall *)(ClassChangeWin *, unsigned int, unsigned int, _DWORD))v163)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5);
      LOBYTE(v181) = 1;
      if ( pkNiNodePtr.m_pObject )
      {
        v164 = pkNiNodePtr.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v164 )
            v164->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v164, 1u);
        }
      }
      LOBYTE(v181) = 0;
      UIUtil::_UIUtil(&ui);
      v165 = spNode.m_pObject;
      v181 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v165 )
        v165->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v165, 1u);
      result = 1;
    }
    else
    {
      v9 = spNode.m_pObject;
      v181 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      result = 0;
    }
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("ClassChangeWin load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v181 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004156A0) --------------------------------------------------------
void __thiscall ClassChangeWin::OnCommand(ClassChangeWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( wParam == 3 )
      {
        v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v3 )
          GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "ClassChangeWin");
      }
    }
  }
  else
  {
    ClassChangeWin::OnOK(this);
  }
}

//----- (004156F0) --------------------------------------------------------
void __thiscall ClassChangeWin::SetChangeClassID(ClassChangeWin *this, char kNewClass)
{
  char *v2; // esi@1
  unsigned int v3; // ecx@1
  unsigned int v4; // eax@1
  int v5; // edx@2
  int v6; // eax@5
  unsigned int v7; // edx@8
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *v8; // edi@8
  unsigned int v9; // eax@8
  NiTMapItem<unsigned char,NiPointer<PgWinSpr> > **v10; // ecx@9
  int v11; // eax@12
  char v12; // al@15
  int v13; // esi@15
  void *v14; // eax@15
  int v15; // eax@16
  void *v16; // eax@20
  int v17; // eax@21
  PgWinSpr *v18; // esi@26
  char v19; // [sp-14h] [bp-34h]@24
  int v20; // [sp-10h] [bp-30h]@0
  NiPointer<PgWinSpr> *v21; // [sp-10h] [bp-30h]@24
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *thisa; // [sp+0h] [bp-20h]@1
  ClassChangeWin *v23; // [sp+4h] [bp-1Ch]@1
  int kBeforeClass; // [sp+8h] [bp-18h]@6
  NiPointer<PgWinSpr> spSpr; // [sp+Ch] [bp-14h]@1
  char kClass; // [sp+13h] [bp-Dh]@7
  int v27; // [sp+1Ch] [bp-4h]@1

  v23 = this;
  spSpr.m_pObject = 0;
  v2 = (char *)&this->m_kBeforeMap;
  v3 = this->m_kBeforeMap.baseclass_0.m_uiHashSize;
  v4 = 0;
  v27 = 0;
  thisa = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *)v2;
  if ( v3 )
  {
    v5 = *((_DWORD *)v2 + 2);
    while ( !*(_DWORD *)v5 )
    {
      ++v4;
      v5 += 4;
      if ( v4 >= v3 )
        goto LABEL_5;
    }
    v6 = *(_DWORD *)(*((_DWORD *)v2 + 2) + 4 * v4);
  }
  else
  {
LABEL_5:
    v6 = 0;
  }
  kBeforeClass = v6;
  while ( kBeforeClass )
  {
    NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetNext(
      (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *)v2,
      (void **)&kBeforeClass,
      &kClass,
      &spSpr);
    ((void (__stdcall *)(_DWORD))spSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  v7 = v23->m_kAfterMap.baseclass_0.m_uiHashSize;
  v8 = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *)&v23->m_kAfterMap;
  v9 = 0;
  if ( v7 <= 0 )
  {
LABEL_12:
    v11 = 0;
  }
  else
  {
    v10 = v23->m_kAfterMap.baseclass_0.m_ppkHashTable;
    while ( !*v10 )
    {
      ++v9;
      ++v10;
      if ( v9 >= v7 )
        goto LABEL_12;
    }
    v11 = (int)v23->m_kAfterMap.baseclass_0.m_ppkHashTable[v9];
  }
  kBeforeClass = v11;
  while ( kBeforeClass )
  {
    NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetNext(
      v8,
      (void **)&kBeforeClass,
      &kClass,
      &spSpr);
    ((void (__stdcall *)(_DWORD))spSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  v12 = Char::GetClass(g_pkMainChar);
  v13 = (unsigned __int8)v12;
  LOBYTE(kBeforeClass) = v12;
  v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v12);
  if ( v14 )
    v15 = (int)((char *)v14 + 21);
  else
    v15 = (int)&byte_9788EB;
  ((void (__stdcall *)(int))v23->m_pkBeforeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v15);
  v16 = CDataReader::GetRecord(
          (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
          (unsigned __int8)kNewClass);
  if ( v16 )
    v17 = (int)((char *)v16 + 21);
  else
    v17 = (int)&byte_9788EB;
  ((void (__stdcall *)(int))v23->m_pkAfterText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v17);
  switch ( v13 )
  {
    case 26:
    case 27:
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetAt(thisa, 26, &spSpr);
      ((void (__stdcall *)(signed int, int))spSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        1,
        v20);
      v21 = &spSpr;
      v19 = 26;
      break;
    default:
      NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetAt(thisa, kBeforeClass, &spSpr);
      ((void (__stdcall *)(signed int, int))spSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        1,
        v20);
      v21 = &spSpr;
      v19 = kNewClass;
      break;
  }
  NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetAt(v8, v19, v21);
  v18 = spSpr.m_pObject;
  ((void (__thiscall *)(PgWinSpr *))spSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(spSpr.m_pObject);
  v27 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v18,
      1u);
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (00415930) --------------------------------------------------------
ClassChangeWin *__cdecl ClassChangeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ClassChangeWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ClassChangeWin::ClassChangeWin((ClassChangeWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ClassChangeWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00415A60) --------------------------------------------------------
unsigned __int16 __thiscall ClassChangeWin::CheckChageState(ClassChangeWin *this, int *iInvPos)
{
  PgFrameWork *v2; // esi@1
  ChargedItemEffect *v3; // eax@2
  InventoryWin *v4; // ecx@3
  char *v5; // esi@4
  int v6; // eax@5
  unsigned __int16 result; // ax@6
  ItemInfo *v8; // esi@7
  __int64 v9; // kr00_8@10
  char v10; // al@10
  signed int v11; // eax@11
  bool v12; // cf@11

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = ChargedEffectTable::GetByEffectEnum(EE_CLASSCHANGE);
    if ( !v3 || (v4 = (InventoryWin *)v2[19].m_BackFrameID) == 0 || (v5 = v3->ItemID, v3 == (ChargedItemEffect *)-2) )
      goto LABEL_19;
    v6 = InventoryWin::FindItem(v4, v3->ItemID);
    *iInvPos = v6;
    if ( v6 >= 192 )
      return 13956;
    v8 = ItemInfoTab::GetByInxName(v5);
    if ( v8
      && (v8->DemandLv > User::Lv(&g_kUser)
       || (v9 = CharClass::GetBitbyClassType(v8->UseClass),
           v10 = Char::GetClass(g_pkMainChar),
           !CharClass::TestChrClassMask(v9, (unsigned __int8)v10))) )
    {
      result = 13954;
    }
    else
    {
LABEL_19:
      v11 = 0;
      v12 = 1;
      while ( !v12 || !g_kInventory.m_aspEquip[v11].m_pObject )
      {
        ++v11;
        v12 = (unsigned int)v11 < 0x1E;
        if ( v11 >= 30 )
          goto LABEL_15;
      }
      result = 13957;
    }
  }
  else
  {
LABEL_15:
    result = 13952;
  }
  return result;
}

//----- (00415B50) --------------------------------------------------------
void __thiscall ClassChangeWin::DirectMessage(ClassChangeWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ClassChangeWin *v4; // edi@1
  PgFrameWork *v5; // esi@4
  PgNet *v6; // esi@6
  char *v7; // eax@11
  unsigned int v8; // [sp-8h] [bp-10h]@8
  int iInvPos; // [sp+4h] [bp-4h]@5

  v4 = this;
  if ( iMsgTag == 27 )
  {
    if ( pvBody )
    {
      if ( !*(_DWORD *)pvBody )
      {
        v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v5 )
        {
          iInvPos = 192;
          switch ( ClassChangeWin::CheckChageState((ClassChangeWin *)((char *)v4 - 232), &iInvPos) )
          {
            case 0x3680u:
              v6 = (PgNet *)g_kNetMgr.m_spZone[g_kNetMgr.m_iNowConnectedZone].m_pObject;
              if ( v6 )
              {
                LOWORD(pvBody) = 12382;
                PgNet::AddNetMsg(v6, &pvBody, 2);
                BYTE3(iMsgTag) = iInvPos;
                PgNet::SendNetMsg(v6, (char *)&iMsgTag + 3, 1);
              }
              return;
            case 0x3682u:
              v8 = 1420051551;
              goto LABEL_11;
            case 0x3685u:
              v8 = 1402624100;
              goto LABEL_11;
            case 0x3684u:
              v8 = 127813735;
LABEL_11:
              v7 = TextData3::Get(v8);
              GameFrameWork::AddSysMsg((GameFrameWork *)v5, v7);
              break;
            default:
              return;
          }
        }
      }
    }
  }
}

//----- (00415C40) --------------------------------------------------------
bool __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::IsKeysEqual(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key1, char key2)
{
  return key1 == key2;
}

//----- (00415C60) --------------------------------------------------------
char *__cdecl Folder::Effect()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return &Folder::m_acEffect;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00415C80) --------------------------------------------------------
bool __cdecl CharClass::TestChrClassMask(__int64 kClassMask, unsigned int dwClass)
{
  bool result; // al@2

  if ( kClassMask & (1i64 << dwClass) )
    result = 1;
  else
    result = 0;
  return result;
}

//----- (00415CB0) --------------------------------------------------------
unsigned int __cdecl ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (00415CD0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this)
{
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 97AA90: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);

//----- (00415CF0) --------------------------------------------------------
void __thiscall NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_NiTMap<unsigned_char_NiPointer<PgWinSpr>>(NiTMap<unsigned char,NiPointer<PgWinSpr> > *this)
{
  NiTMap<unsigned char,NiPointer<PgWinSpr> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 97AA90: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 97AABC: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);

//----- (00415D60) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97AA90: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);

//----- (00415DA0) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vector_deleting_destructor_(NiTMap<unsigned char,NiPointer<PgWinSpr> > *this, unsigned int a2)
{
  NiTMap<unsigned char,NiPointer<PgWinSpr> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMap<unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97AA90: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWinSpr___unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);
// 97AABC: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_PgWinSpr_____vftable_)(void *p, char);

//----- (00415E20) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetAt(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key, NiPointer<PgWinSpr> val)
{
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *v3; // esi@1
  unsigned int (__thiscall *v4)(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *, char); // edx@1
  int v5; // ebx@1
  NiTMapItem<unsigned char,NiPointer<PgWinSpr> > *v6; // edi@1
  int v7; // edi@4
  PgWinSpr *v8; // [sp-10h] [bp-20h]@4
  PgWinSpr **v9; // [sp+0h] [bp-10h]@4
  int v10; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v4 = this->vfptr->KeyToHashIndex;
  v10 = 0;
  v5 = ((int (__stdcall *)(_DWORD))v4)(key);
  v6 = v3->m_ppkHashTable[v5];
  if ( v6 )
  {
    while ( !v3->vfptr->IsKeysEqual(v3, key, v6->m_key) )
    {
      v6 = v6->m_pkNext;
      if ( !v6 )
        goto LABEL_4;
    }
    ((void (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *, NiTMapItem<unsigned char,NiPointer<PgWinSpr> > *, PgWinSpr *))v3->vfptr->ClearValue)(
      v3,
      v6,
      v8);
    v8 = val.m_pObject;
    v9 = &v8;
    if ( val.m_pObject )
      InterlockedIncrement((volatile LONG *)&val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    ((void (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *, NiTMapItem<unsigned char,NiPointer<PgWinSpr> > *, _DWORD))v3->vfptr->SetValue)(
      v3,
      v6,
      key);
  }
  else
  {
LABEL_4:
    v7 = ((int (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *, PgWinSpr *))v3->vfptr->NewItem)(
           v3,
           v8);
    v8 = val.m_pObject;
    v9 = &v8;
    if ( val.m_pObject )
      InterlockedIncrement((volatile LONG *)&val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    ((void (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *, int, _DWORD))v3->vfptr->SetValue)(
      v3,
      v7,
      key);
    *(_DWORD *)v7 = v3->m_ppkHashTable[v5];
    v3->m_ppkHashTable[v5] = (NiTMapItem<unsigned char,NiPointer<PgWinSpr> > *)v7;
    ++*(_DWORD *)&v3->m_kAllocator.___u0.baseclass_0.dummy[0];
  }
  v10 = -1;
  if ( val.m_pObject
    && !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( val.m_pObject )
      val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)val.m_pObject,
        1u);
  }
}

//----- (00415F50) --------------------------------------------------------
bool __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetAt(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key, NiPointer<PgWinSpr> *val)
{
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *v3; // edi@1
  NiTMapItem<unsigned char,NiPointer<PgWinSpr> > *v4; // esi@1
  bool result; // al@4
  PgWinSpr *v6; // edi@5
  PgWinSpr *v7; // esi@10

  v3 = this;
  v4 = this->m_ppkHashTable[((int (__stdcall *)(_DWORD))this->vfptr->KeyToHashIndex)(key)];
  if ( v4 )
  {
    while ( !v3->vfptr->IsKeysEqual(v3, key, v4->m_key) )
    {
      v4 = v4->m_pkNext;
      if ( !v4 )
        goto LABEL_4;
    }
    v6 = val->m_pObject;
    if ( val->m_pObject != v4->m_val.m_pObject )
    {
      if ( v6
        && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v6,
          1u);
      v7 = v4->m_val.m_pObject;
      val->m_pObject = v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00415FE0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::GetNext(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, void **pos, char *key, NiPointer<PgWinSpr> *val)
{
  void *v4; // esi@1
  NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *v5; // ebx@1
  PgWinSpr *v6; // edi@1
  int v7; // eax@6
  int v8; // eax@10
  unsigned int v9; // edx@10
  int v10; // eax@10
  void **v11; // ecx@11

  v4 = *pos;
  v5 = this;
  *key = *((_BYTE *)*pos + 4);
  v6 = val->m_pObject;
  if ( val->m_pObject != (PgWinSpr *)*((_DWORD *)v4 + 2) )
  {
    if ( v6
      && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v7 = *((_DWORD *)v4 + 2);
    val->m_pObject = (PgWinSpr *)v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)(v7 + 4));
  }
  if ( *(_DWORD *)v4 )
  {
    *pos = *(void **)v4;
  }
  else
  {
    v8 = v5->vfptr->KeyToHashIndex(v5, *((_BYTE *)v4 + 4));
    v9 = v5->m_uiHashSize;
    v10 = v8 + 1;
    if ( v10 >= v9 )
    {
LABEL_14:
      *pos = 0;
    }
    else
    {
      v11 = (void **)&v5->m_ppkHashTable[v10];
      while ( !*v11 )
      {
        ++v10;
        ++v11;
        if ( v10 >= v9 )
          goto LABEL_14;
      }
      *pos = *v11;
    }
  }
}

//----- (00416090) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::SetValue(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, NiTMapItem<unsigned char,NiPointer<PgWinSpr> > *pkItem, char key, NiPointer<PgWinSpr> val)
{
  PgWinSpr *v4; // esi@1
  PgWinSpr *v5; // eax@1
  PgWinSpr *v6; // esi@10

  pkItem->m_key = key;
  v4 = pkItem->m_val.m_pObject;
  v5 = val.m_pObject;
  if ( v4 != val.m_pObject )
  {
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v4,
          1u);
      v5 = val.m_pObject;
    }
    pkItem->m_val.m_pObject = v5;
    if ( v5 )
    {
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v5 = val.m_pObject;
    }
  }
  if ( v5 )
  {
    v6 = v5;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v6,
          1u);
    }
  }
}

//----- (00416150) --------------------------------------------------------
ChargedItemEffect *__cdecl ChargedEffectTable::GetByEffectEnum(EffectEnumerate eEffect)
{
  unsigned int v1; // esi@1
  ChargedItemEffect *result; // eax@4

  v1 = 0;
  if ( ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
  {
    while ( *((_DWORD *)CDataReader::GetRecord(
                          (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                          v1)
            + 9) != eEffect )
    {
      ++v1;
      if ( v1 >= ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
        goto LABEL_4;
    }
    result = (ChargedItemEffect *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                                    v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (004161A0) --------------------------------------------------------
void *__thiscall ClassChangeWin::_vector_deleting_destructor_(ClassChangeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ClassChangeWin::_ClassChangeWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004161D0) --------------------------------------------------------
NiColor *__cdecl Color::GetNiColor(NiColor *result, char ucR, char ucG, char ucB)
{
  NiColor *v4; // eax@1

  v4 = result;
  result->r = (double)(unsigned __int8)ucR / 255.0;
  result->g = (double)(unsigned __int8)ucG / 255.0;
  result->b = (double)(unsigned __int8)ucB / 255.0;
  return v4;
}

//----- (00416210) --------------------------------------------------------
D3DXCOLOR *__cdecl Color::GetDxColor(D3DXCOLOR *result, char ucR, char ucG, char ucB, char ucA)
{
  D3DXCOLOR *v5; // eax@1

  v5 = result;
  result->r = (double)(unsigned __int8)ucR / 255.0;
  result->g = (double)(unsigned __int8)ucG / 255.0;
  result->b = (double)(unsigned __int8)ucB / 255.0;
  result->a = (double)(unsigned __int8)ucA / 255.0;
  return v5;
}

//----- (00416260) --------------------------------------------------------
NiColor *__cdecl Color::Dx2NiColor(NiColor *result, D3DXCOLOR *kDxColor)
{
  NiColor *v2; // eax@1

  v2 = result;
  result->r = kDxColor->r;
  result->g = kDxColor->g;
  result->b = kDxColor->b;
  return v2;
}

//----- (00416280) --------------------------------------------------------
D3DXCOLOR *__cdecl Color::Ni2DxColor(D3DXCOLOR *result, NiColor *kNiColor)
{
  D3DXCOLOR *v2; // eax@1

  v2 = result;
  result->r = kNiColor->r;
  result->g = kNiColor->g;
  result->b = kNiColor->b;
  result->a = 1.0;
  return v2;
}

//----- (004162A0) --------------------------------------------------------
void __thiscall DShowMovie::DShowMovie(DShowMovie *this)
{
  DShowMovie *v1; // esi@1

  v1 = this;
  this->vfptr = (DShowMovieVtbl *)&DShowMovie::_vftable_;
  CoInitialize(0);
  v1->m_hShowWnd = 0;
  v1->m_pGraph = 0;
  v1->m_pEvent = 0;
  v1->m_pMediaControl = 0;
}
// 97AD2C: using guessed type int (__thiscall *DShowMovie___vftable_)(void *p, char);

//----- (004162D0) --------------------------------------------------------
bool __thiscall DShowMovie::Load(DShowMovie *this, char *pcFilename, HWND__ *hShowWnd)
{
  DShowMovie *v3; // esi@1
  bool result; // al@2
  LPVOID *v5; // esi@3
  LPVOID v6; // eax@5
  IMediaEventEx *v7; // esi@6
  DShowMovie *v8; // [sp+8h] [bp-224h]@1
  void *pVidWin; // [sp+Ch] [bp-220h]@5
  tagRECT kRect; // [sp+10h] [bp-21Ch]@6
  __int16 awFilename[260]; // [sp+20h] [bp-20Ch]@3
  unsigned int v12; // [sp+228h] [bp-4h]@1
  int v13; // [sp+22Ch] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = this;
  v8 = this;
  if ( hShowWnd )
  {
    MultiByteToWideChar(3u, 8u, pcFilename, strlen(pcFilename) + 1, (LPWSTR)awFilename, 260);
    v5 = (LPVOID *)&v3->m_pGraph;
    if ( CoCreateInstance(&CLSID_FilterGraph, 0, 1u, &IID_IGraphBuilder, v5) >= 0
      && (*(int (__stdcall **)(LPVOID, _DWORD, _DWORD))(*(_DWORD *)*v5 + 52))(*v5, awFilename, 0) >= 0
      && (v6 = *v5,
          pVidWin = 0,
          (**(void (__stdcall ***)(LPVOID, GUID *, void **))v6)(v6, &IID_IVideoWindow, &pVidWin),
          pVidWin)
      && ((*(void (__stdcall **)(void *, HWND__ *))(*(_DWORD *)pVidWin + 116))(pVidWin, hShowWnd),
          (*(void (__stdcall **)(void *, signed int))(*(_DWORD *)pVidWin + 36))(pVidWin, 1140850688),
          GetClientRect(hShowWnd, &kRect),
          (*(void (__stdcall **)(void *, int, int, int, int))(*(_DWORD *)pVidWin + 156))(
            pVidWin,
            kRect.left,
            kRect.top,
            kRect.right - kRect.left,
            kRect.bottom - kRect.top),
          (**(void (__stdcall ***)(LPVOID, GUID *, IMediaEventEx **))*v5)(*v5, &IID_IMediaEventEx, &v8->m_pEvent),
          (v7 = v8->m_pEvent) != 0) )
    {
      ((void (__stdcall *)(IMediaEventEx *, HWND__ *, signed int, _DWORD))v7->baseclass_0.baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
        v7,
        hShowWnd,
        10025,
        0);
      v8->m_hShowWnd = hShowWnd;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00416460) --------------------------------------------------------
void __thiscall DShowMovie::CleanUp(DShowMovie *this)
{
  DShowMovie *v1; // esi@1
  IGraphBuilder *v2; // eax@1
  IMediaControl *v3; // eax@3
  int levCode; // [sp+8h] [bp-8h]@3
  void *pVidWin; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = this->m_pGraph;
  pVidWin = 0;
  if ( v2 && this->m_pEvent )
  {
    v2->baseclass_0.baseclass_0.lpVtbl->QueryInterface((IUnknown *)v2, &IID_IVideoWindow, &pVidWin);
    v1->m_pEvent->baseclass_0.baseclass_0.baseclass_0.lpVtbl[3].QueryInterface(
      (IUnknown *)v1->m_pEvent,
      (_GUID *const )-1,
      (void **)&levCode);
    (*(void (__stdcall **)(void *, _DWORD))(*(_DWORD *)pVidWin + 76))(pVidWin, 0);
    (*(void (__stdcall **)(void *))(*(_DWORD *)pVidWin + 8))(pVidWin);
    v3 = v1->m_pMediaControl;
    if ( v3 )
      v3->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_pMediaControl);
    v1->m_pEvent->baseclass_0.baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_pEvent);
    v1->m_pGraph->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_pGraph);
    v1->m_pMediaControl = 0;
    v1->m_pEvent = 0;
    v1->m_pGraph = 0;
  }
}

//----- (004164F0) --------------------------------------------------------
void __thiscall DShowMovie::Play(DShowMovie *this)
{
  DShowMovie *v1; // esi@1
  bool v2; // zf@1
  IGraphBuilder *v3; // eax@3
  int v4; // esi@3
  void *pVidWin; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = this->m_pGraph == 0;
  pVidWin = 0;
  if ( !v2 )
  {
    (**(void (__stdcall ***)(IGraphBuilder *, GUID *, void **))this->m_pGraph)(
      this->m_pGraph,
      &IID_IVideoWindow,
      &pVidWin);
    if ( pVidWin )
    {
      (*(void (__stdcall **)(void *, signed int))(*(_DWORD *)pVidWin + 76))(pVidWin, -1);
      v3 = v1->m_pGraph;
      v4 = (int)&v1->m_pMediaControl;
      v3->baseclass_0.baseclass_0.lpVtbl->QueryInterface((IUnknown *)v3, &IID_IMediaControl, (void **)v4);
      if ( *(_DWORD *)v4 )
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 28))(*(_DWORD *)v4);
    }
  }
}

//----- (00416550) --------------------------------------------------------
void __thiscall DShowMovie::Stop(DShowMovie *this)
{
  DShowMovie *v1; // esi@1
  IMediaControl *v2; // eax@1
  IMediaEventEx *v3; // eax@3
  int levCode; // [sp+4h] [bp-8h]@4
  void *pVidWin; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = this->m_pMediaControl;
  pVidWin = 0;
  if ( v2 )
  {
    ((void (__stdcall *)(IMediaControl *))v2->baseclass_0.baseclass_0.lpVtbl[3].QueryInterface)(v2);
    (**(void (__stdcall ***)(IGraphBuilder *, GUID *, void **))v1->m_pGraph)(v1->m_pGraph, &IID_IVideoWindow, &pVidWin);
    if ( pVidWin )
    {
      (*(void (__stdcall **)(void *, _DWORD))(*(_DWORD *)pVidWin + 76))(pVidWin, 0);
      (*(void (__stdcall **)(void *))(*(_DWORD *)pVidWin + 8))(pVidWin);
      v3 = v1->m_pEvent;
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.lpVtbl[3].QueryInterface(
          (IUnknown *)v3,
          (_GUID *const )-1,
          (void **)&levCode);
      v1->m_pMediaControl->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_pMediaControl);
      v1->m_pMediaControl = 0;
    }
  }
}

//----- (004165D0) --------------------------------------------------------
bool __thiscall DShowMovie::MsgProc(DShowMovie *this, HWND__ *hWnd, unsigned int uiMsg, unsigned int wParam, int lParam)
{
  DShowMovie *v5; // esi@1
  bool result; // al@7
  int lparam1; // [sp+4h] [bp-4h]@3

  v5 = this;
  if ( hWnd != this->m_hShowWnd
    || uiMsg != 10025
    || ((int (__stdcall *)(IMediaEventEx *, HWND__ **, int *, unsigned int *, _DWORD))this->m_pEvent->baseclass_0.baseclass_0.baseclass_0.lpVtbl[2].Release)(
         this->m_pEvent,
         &hWnd,
         &lparam1,
         &uiMsg,
         0) < 0 )
  {
LABEL_7:
    result = 1;
  }
  else
  {
    while ( 1 )
    {
      ((void (__stdcall *)(IMediaEventEx *, HWND__ *, int, unsigned int))v5->m_pEvent->baseclass_0.baseclass_0.baseclass_0.lpVtbl[4].QueryInterface)(
        v5->m_pEvent,
        hWnd,
        lparam1,
        uiMsg);
      if ( hWnd == (HWND__ *)1 )
        break;
      if ( hWnd == (HWND__ *)2 )
        break;
      if ( ((int (__stdcall *)(IMediaEventEx *, HWND__ **, int *, unsigned int *, _DWORD))v5->m_pEvent->baseclass_0.baseclass_0.baseclass_0.lpVtbl[2].Release)(
             v5->m_pEvent,
             &hWnd,
             &lparam1,
             &uiMsg,
             0) < 0 )
        goto LABEL_7;
    }
    DShowMovie::Stop(v5);
    result = 0;
  }
  return result;
}

//----- (00416660) --------------------------------------------------------
bool __thiscall DShowMovie::IsPlaying(DShowMovie *this)
{
  return 0;
}

//----- (00416670) --------------------------------------------------------
void __thiscall DShowMovie::_DShowMovie(DShowMovie *this)
{
  this->vfptr = (DShowMovieVtbl *)&DShowMovie::_vftable_;
  DShowMovie::CleanUp(this);
  CoUninitialize();
}
// 97AD2C: using guessed type int (__thiscall *DShowMovie___vftable_)(void *p, char);

//----- (00416690) --------------------------------------------------------
void *__thiscall DShowMovie::_vector_deleting_destructor_(DShowMovie *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (DShowMovieVtbl *)&DShowMovie::_vftable_;
  DShowMovie::CleanUp(this);
  CoUninitialize();
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97AD2C: using guessed type int (__thiscall *DShowMovie___vftable_)(void *p, char);

//----- (004166C0) --------------------------------------------------------
unsigned int __cdecl Engine3D::ShaderRunParserCallback(const char *pcLibFile, NiRenderer *pkRenderer, const char *pcDirectory, bool bRecurseSubFolders)
{
  return NSFParserLib_RunShaderParser(pcDirectory, bRecurseSubFolders);
}

//----- (004166E0) --------------------------------------------------------
bool __cdecl Engine3D::ShaderClassCreateCallback(const char *pcLibFile, NiRenderer *pkRenderer, int iDirectoryCount, char **apcDirectories, bool bRecurseSubFolders, NiShaderLibrary **ppkLibrary)
{
  *ppkLibrary = 0;
  return NSBShaderLib_LoadShaderLibrary(pkRenderer, iDirectoryCount, apcDirectories, bRecurseSubFolders, ppkLibrary);
}

//----- (00416710) --------------------------------------------------------
bool __cdecl Engine3D::FXLibraryClassCreate(const char *pcLibFile, NiRenderer *pkRenderer, int iDirectoryCount, char **apcDirectories, bool bRecurseSubFolders, NiShaderLibrary **ppkLibrary)
{
  *ppkLibrary = 0;
  return NiD3DXEffectShaderLib_LoadShaderLibrary(
           pkRenderer,
           iDirectoryCount,
           apcDirectories,
           bRecurseSubFolders,
           ppkLibrary);
}

//----- (00416740) --------------------------------------------------------
bool __cdecl Engine3D::GetEnableCarToon()
{
  bool result; // al@2

  if ( Engine3D::ms_spToonExtraData )
    result = Engine3D::ms_spToonExtraData->m_bOn;
  else
    result = 0;
  return result;
}

//----- (00416750) --------------------------------------------------------
void __cdecl Engine3D::EnableCarToon(bool bEnable)
{
  if ( Engine3D::ms_spToonExtraData )
    Engine3D::ms_spToonExtraData->m_bOn = bEnable;
}

//----- (00416770) --------------------------------------------------------
bool __cdecl Engine3D::Terminate()
{
  INpShader *v0; // esi@2
  NsPgToonExtraData *v1; // esi@6

  if ( Engine3D::ms_spCarToon )
  {
    v0 = Engine3D::ms_spCarToon;
    if ( !InterlockedDecrement((volatile LONG *)&Engine3D::ms_spCarToon->baseclass_0.m_uiRefCount) && v0 )
      v0->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v0, 1u);
    Engine3D::ms_spCarToon = 0;
  }
  v1 = Engine3D::ms_spToonExtraData;
  if ( Engine3D::ms_spToonExtraData )
  {
    if ( !InterlockedDecrement((volatile LONG *)&Engine3D::ms_spToonExtraData->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v1 )
      v1->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
    Engine3D::ms_spToonExtraData = 0;
  }
  NpModelData_ActorM::Terminate();
  NpModelData_KFM::Terminate();
  NpKMI_Tool::Terminate();
  return NpModelData_NiTexturingProperty::Terminate();
}

//----- (004167F0) --------------------------------------------------------
bool __cdecl Engine3D::Init(NiCamera *pkCamera)
{
  char *v1; // ST18_4@3
  NiD3DShaderProgramFactory *v2; // eax@3
  int v3; // eax@5
  char v4; // cl@6
  char *v5; // eax@7
  char v6; // cl@8
  int (*v7)(); // edx@9
  void *v8; // eax@13
  int v9; // eax@14
  int v10; // esi@14
  INpShader *v11; // eax@16
  INpShader *v12; // edi@18
  INpShader *v13; // esi@25
  char *v14; // eax@25
  void *v15; // eax@25
  int v16; // eax@26
  int v17; // esi@26
  NsPgToonExtraData *v18; // eax@28
  NsPgToonExtraData *v19; // edi@30
  NsPgToonExtraData *v20; // eax@35
  void *pacShaderDir[2]; // [sp+14h] [bp-118h]@7
  char acFolder[256]; // [sp+1Ch] [bp-110h]@6
  unsigned int v24; // [sp+11Ch] [bp-10h]@1
  int v25; // [sp+128h] [bp-4h]@13
  int v26; // [sp+12Ch] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  NiShaderFactory::RegisterRunParserCallback(Engine3D::ShaderRunParserCallback);
  NiShaderFactory::RegisterClassCreationCallback(Engine3D::ShaderClassCreateCallback);
  if ( !Folder::m_bInit )
    Folder::Init();
  v1 = Folder::Merge(&Folder::m_acMain, "shader\\");
  v2 = NiD3DShaderProgramFactory::GetInstance();
  NiD3DShaderProgramFactory::AddProgramDirectory(v2, v1);
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = 0;
  do
  {
    v4 = *(&Folder::m_acMain + v3);
    acFolder[v3++] = v4;
  }
  while ( v4 );
  v5 = (char *)&pacShaderDir[1] + 3;
  do
    v6 = (v5++)[1];
  while ( v6 );
  v7 = off_97AD3C;
  *(_DWORD *)v5 = dword_97AD38;
  *((_DWORD *)v5 + 1) = v7;
  pacShaderDir[0] = acFolder;
  pacShaderDir[1] = 0;
  NiShaderFactory::LoadAndRunParserLibrary(0, acFolder, 1);
  if ( !NiShaderFactory::LoadAndRegisterShaderLibrary(0, 1, (char **)pacShaderDir, 1) )
    MessageBoxA(0, "Shader Loading Error", "Error", 0);
  NiShaderFactory::RegisterClassCreationCallback(Engine3D::FXLibraryClassCreate);
  if ( !NiShaderFactory::LoadAndRegisterShaderLibrary(0, 1, (char **)pacShaderDir, 1) )
    MessageBoxA(0, "Shader Loading Error", "Error", 0);
  v8 = operator new(0x44u);
  v25 = 0;
  if ( v8 )
  {
    NsPgToonRegister_v2::NsPgToonRegister_v2((NsPgToonRegister_v2 *)v8);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  v11 = Engine3D::ms_spCarToon;
  v25 = -1;
  if ( Engine3D::ms_spCarToon != (INpShader *)v10 )
  {
    if ( Engine3D::ms_spCarToon )
    {
      v12 = Engine3D::ms_spCarToon;
      if ( !InterlockedDecrement((volatile LONG *)&Engine3D::ms_spCarToon->baseclass_0.m_uiRefCount) )
      {
        if ( v12 )
          v12->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      }
    }
    v11 = (INpShader *)v10;
    Engine3D::ms_spCarToon = (INpShader *)v10;
    if ( v10 )
    {
      InterlockedIncrement((volatile LONG *)(v10 + 4));
      v11 = Engine3D::ms_spCarToon;
    }
  }
  if ( !Folder::m_bInit )
  {
    Folder::Init();
    v11 = Engine3D::ms_spCarToon;
  }
  v13 = v11;
  v14 = Folder::Merge(&Folder::m_acMain, "shader\\");
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v13[1].m_bShaderEnable,
    v14,
    strlen(v14));
  v15 = operator new(0x38u);
  v25 = 1;
  if ( v15 )
  {
    NsPgToonExtraData::NsPgToonExtraData((NsPgToonExtraData *)v15);
    v17 = v16;
  }
  else
  {
    v17 = 0;
  }
  v18 = Engine3D::ms_spToonExtraData;
  v25 = -1;
  if ( Engine3D::ms_spToonExtraData != (NsPgToonExtraData *)v17 )
  {
    if ( Engine3D::ms_spToonExtraData )
    {
      v19 = Engine3D::ms_spToonExtraData;
      if ( !InterlockedDecrement((volatile LONG *)&Engine3D::ms_spToonExtraData->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v19 )
          v19->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
      }
    }
    v18 = (NsPgToonExtraData *)v17;
    Engine3D::ms_spToonExtraData = (NsPgToonExtraData *)v17;
    if ( v17 )
    {
      InterlockedIncrement((volatile LONG *)(v17 + 4));
      v18 = Engine3D::ms_spToonExtraData;
    }
  }
  v18->m_fRevisionNear = 40.0;
  Engine3D::ms_spToonExtraData->m_fRevisionFar = 800.0;
  Engine3D::ms_spToonExtraData->m_bLineColorRevision = 0;
  Engine3D::ms_spToonExtraData->m_bLineSizeRevision = 1;
  Engine3D::ms_spToonExtraData->m_bSelfTexture = 1;
  v20 = Engine3D::ms_spToonExtraData;
  Engine3D::ms_spToonExtraData->m_vLineColor.x = 0.0;
  v20->m_vLineColor.y = 0.0;
  v20->m_vLineColor.z = 0.0;
  v20->m_vLineColor.w = 0.80000001;
  Engine3D::ms_spToonExtraData->m_fLineSize = 0.0017500001;
  Engine3D::ms_spToonExtraData->m_fLineEnableLength = 800.0;
  Engine3D::ms_spToonExtraData->m_pCamera = pkCamera;
  INpShader::Init(Engine3D::ms_spCarToon, NiRenderer::ms_pkRenderer, 0x14u);
  NsPgToonRegister_v2::SetExtraData((NsPgToonRegister_v2 *)Engine3D::ms_spCarToon, Engine3D::ms_spToonExtraData);
  return 1;
}
// 97AD38: using guessed type int dword_97AD38;
// 97AD3C: using guessed type int (*off_97AD3C)();
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00416B40) --------------------------------------------------------
char *__cdecl Folder::Main()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return &Folder::m_acMain;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00416B60) --------------------------------------------------------
char *__cdecl AbsMsgTable::GetAbstateSysMsg()
{
  return 0;
}

//----- (00416B70) --------------------------------------------------------
char *__cdecl ErrMsgTable::GetErrMsg(int iErrCode)
{
  char *v1; // esi@1
  char *result; // eax@4
  char *v3; // eax@434
  unsigned __int16 v4; // ax@465
  Item *v5; // eax@465
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v6; // [sp-1Ch] [bp-20h]@433
  unsigned int v7; // [sp-8h] [bp-Ch]@433
  int v8; // [sp-4h] [bp-8h]@433

  v1 = 0;
  if ( iErrCode <= 844 )
  {
    if ( iErrCode == 844 )
    {
$LN140_0:
      result = TextData2::Get(0xC0F93709u);
    }
    else
    {
      switch ( iErrCode )
      {
        case 66:
          result = TextData::Get(0x94E7E8D1u);
          break;
        case 67:
          result = "DB error";
          break;
        case 68:
          result = TextData::Get(0xC8E81F16u);
          break;
        case 69:
          result = TextData::Get(0x36281E1Fu);
          break;
        case 70:
          result = "DB error";
          break;
        case 71:
          result = TextData::Get(0xDE33190Du);
          break;
        case 72:
          result = TextData::Get(0x25371B0Bu);
          break;
        case 73:
          result = TextData::Get(0x7E87D093u);
          break;
        case 74:
          result = TextData::Get(0x2D7D824Au);
          break;
        case 75:
          result = TextData::Get(0x2127626Du);
          break;
        case 81:
          result = TextData::Get(0x9B7E6C58u);
          break;
        default:
          goto LABEL_467;
      }
    }
    return result;
  }
  if ( iErrCode <= 6977 )
  {
    if ( iErrCode == 6977 )
      return TextData2::Get(0x4910A0D6u);
    if ( iErrCode > 4801 )
    {
      if ( iErrCode > 5313 )
      {
        if ( iErrCode > 5761 )
        {
          if ( iErrCode > 6594 )
          {
            switch ( iErrCode )
            {
              case 6723:
              case 6747:
$LN339:
                result = TextData::Get(0x1C2A0981u);
                break;
              case 6595:
                result = TextData::Get(0x51A1C9A1u);
                break;
              case 6596:
                result = TextData::Get(0x61B778A9u);
                break;
              case 6722:
              case 6746:
                result = TextData::Get(0xCEF8D8D4u);
                break;
              case 6727:
              case 6728:
              case 6729:
                result = TextData2::Get(0xD734031Bu);
                break;
              case 6751:
              case 6752:
              case 6753:
                result = TextData2::Get(0x3A7B6771u);
                break;
              case 6732:
                result = TextData2::Get(0x41DDB3B5u);
                break;
              case 6756:
                result = TextData2::Get(0xA424170Bu);
                break;
              case 6733:
              case 6734:
                result = TextData2::Get(0x71E6EF02u);
                break;
              case 6730:
              case 6731:
              case 6754:
              case 6755:
                result = TextData2::Get(0x8BE9D5DBu);
                break;
              case 6769:
              case 6781:
                result = TextData2::Get(0x8695087u);
                break;
              case 6770:
                result = TextData2::Get(0x746155E1u);
                break;
              case 6771:
                result = TextData2::Get(0x471518Cu);
                break;
              case 6772:
                result = TextData2::Get(0x67745E7Au);
                break;
              case 6773:
                result = TextData2::Get(0x1A1F058Du);
                break;
              case 6774:
                result = TextData2::Get(0x11271834u);
                break;
              case 6776:
                result = TextData2::Get(0x11330884u);
                break;
              case 6777:
                result = TextData2::Get(0xBACBB50Cu);
                break;
              case 6778:
                result = TextData2::Get(0x8240C3Au);
                break;
              case 6779:
                result = TextData2::Get(0xCF220944u);
                break;
              case 6780:
                result = TextData2::Get(0xCCCFB739u);
                break;
              default:
                goto LABEL_467;
            }
            return result;
          }
          if ( iErrCode == 6594 )
            return TextData::Get(0x51A275A1u);
          switch ( iErrCode )
          {
            case 5825:
              return TextData2::Get(0x606E6C4Fu);
            case 5826:
              return TextData2::Get(0xA7EA00D9u);
            case 5827:
              return TextData2::Get(0xADED07E9u);
            case 5828:
              return TextData2::Get(0x5AB6B7A0u);
            case 5829:
              return TextData2::Get(0x325F5B3Du);
            case 5834:
              return TextData2::Get(0x95B2A897u);
            case 5835:
            case 5838:
              return TextData2::Get(0x96EEE1FEu);
            case 5836:
              return TextData2::Get(0xDB4C3725u);
            case 5837:
              return TextData2::Get(0xBD442E39u);
            case 5762:
              return TextData::Get(0xDAE0032Au);
            case 5763:
              return TextData::Get(0x1B212BA3u);
            case 5764:
              return TextData::Get(0x141F698Eu);
            case 5765:
              return TextData::Get(0x3D816F94u);
            case 5766:
              goto $LN339;
            case 5767:
              return TextData::Get(0xA8BE9F32u);
            case 5768:
              return TextData::Get(0xD4D72324u);
            case 5769:
              return TextData::Get(0xA7D2B8D9u);
            case 5770:
              return TextData::Get(0x91B099DEu);
            case 5771:
              return TextData::Get(0xBFBFAE24u);
            case 5772:
              return TextData::Get(0x37276777u);
            case 5960:
              return TextData::Get(0xA12C21Au);
            case 5961:
              return TextData::Get(0x80B4B4BDu);
            case 5963:
              return TextData::Get(0x3DBA7A8Du);
            case 5964:
              return TextData2::Get(0xDE06A716u);
            case 5998:
              return TextData2::Get(0xE3331F2Au);
            case 5965:
              return TextData::Get(0x10F1927u);
            case 5966:
              return TextData::Get(0x79A374B7u);
            case 5976:
              return TextData::Get(0x504E2E5Du);
            case 5984:
              return TextData::Get(0x65896668u);
            case 5992:
              return TextData::Get(0xF94A31FAu);
            case 5993:
              return TextData::Get(0x9CDBD2AFu);
            case 5994:
              return TextData::Get(0x9694814Fu);
            case 5995:
              return TextData::Get(0xFBD7C697u);
            case 5996:
              return TextData::Get(0xE5F7BD95u);
            case 5997:
              return TextData::Get(0x34A36954u);
            case 5968:
              return TextData::Get(0x9BE398A8u);
            case 5953:
              return TextData::Get(0x5D4E12F5u);
            case 5954:
              return TextData::Get(0xF51A1A08u);
            case 5955:
              return TextData::Get(0x59697D71u);
            case 5956:
              return TextData::Get(0x4A697571u);
            case 5957:
              return TextData::Get(0x8D1AB6B9u);
            case 5958:
              return TextData::Get(0x4D697D71u);
            case 5959:
              return TextData::Get(0xDF0ACA08u);
            case 5900:
              return TextData2::Get(0xFD49F994u);
            case 5901:
              return TextData2::Get(0xD0EAC300u);
            case 5902:
              return TextData2::Get(0x5A935C05u);
            case 5903:
              return TextData2::Get(0x69AB47E8u);
            default:
              goto LABEL_467;
          }
        }
        else
        {
          if ( iErrCode == 5761 )
            return TextData::Get(0x1C1A0F22u);
          if ( iErrCode == 5314 )
            return (char *)&unk_97AD96;
          if ( iErrCode == 5315 )
            return (char *)&unk_97AD97;
          if ( iErrCode == 5379 )
            return TextData2::Get(0xE5270D34u);
        }
      }
      else
      {
        if ( iErrCode == 5313 )
          return (char *)&unk_97AD95;
        switch ( iErrCode )
        {
          case 4865:
          case 4866:
          case 4929:
          case 4993:
            return TextData::Get(0x3B4C6C74u);
          case 4802:
            return TextData::Get(0x78AEA49Fu);
          case 4803:
          case 4869:
            return TextData::Get(0xBBF5D3D9u);
          case 4804:
            return TextData::Get(0x85F7BAD0u);
          case 4805:
          case 4806:
            return TextData::Get(0x9BB9B9D3u);
          case 4807:
            return TextData::Get(0x92B673D4u);
          case 4808:
            return TextData::Get(0xE8F3BFE1u);
          case 4809:
            return TextData::Get(0xD5F6BC16u);
          case 4930:
            return TextData::Get(0xEE1DE136u);
          case 4994:
            return TextData::Get(0x94FCC4C1u);
          case 4995:
            return TextData::Get(0xDFFEBC10u);
          case 4867:
            return TextData::Get(0x23491A31u);
          case 4868:
            return TextData::Get(0xDD0B1F04u);
          case 4870:
            return TextData::Get(0x8908C0D3u);
          case 4871:
            return TextData::Get(0x81FBD1CBu);
          case 4872:
            return TextData::Get(0x869ED9C2u);
          case 4873:
            return TextData::Get(0x7EB4BFB5u);
          case 4874:
            return TextData::Get(0xD2671621u);
          case 4931:
            return TextData::Get(0x23381F2Fu);
          case 5000:
            return TextData::Get(0x6C11E1CEu);
          default:
            goto LABEL_467;
        }
      }
      goto LABEL_467;
    }
    if ( iErrCode == 4801 )
      return TextData::Get(0x3B4C6C74u);
    if ( iErrCode > 4482 )
    {
      switch ( iErrCode )
      {
        case 4552:
$LN360:
          result = TextData2::Get(0xFF7A6076u);
          break;
        case 4550:
$LN359:
          result = TextData2::Get(0x99C1A5FEu);
          break;
        case 4488:
$LN358:
          result = TextData2::Get(0x607894D4u);
          break;
        case 4483:
          result = TextData2::Get(0xB1C4C620u);
          break;
        case 4484:
          result = TextData2::Get(0x647E80CAu);
          break;
        case 4485:
          result = TextData2::Get(0xBBBFB40Fu);
          break;
        case 4486:
          result = TextData2::Get(0xB5C1D0C7u);
          break;
        case 4487:
          result = TextData2::Get(0xB4C7D301u);
          break;
        case 4489:
          result = TextData2::Get(0xADC6CD0Du);
          break;
        case 4490:
          result = TextData2::Get(0xF817141Bu);
          break;
        case 4491:
          result = TextData2::Get(0xF623065Fu);
          break;
        case 4492:
          result = TextData2::Get(0x53203u);
          break;
        case 4493:
          result = TextData2::Get(0x1001221u);
          break;
        case 4494:
          result = TextData2::Get(0x8D98B388u);
          break;
        case 4495:
          result = TextData2::Get(0xBABBCDCBu);
          break;
        case 4496:
          result = TextData2::Get(0xBDAEBAC3u);
          break;
        case 4497:
          result = TextData2::Get(0x5F66B54u);
          break;
        case 4498:
          result = TextData2::Get(0x81BEAEFDu);
          break;
        case 4499:
          result = TextData2::Get(0xADB7CDFEu);
          break;
        case 4500:
          result = TextData2::Get(0xF305164Du);
          break;
        case 4501:
          result = TextData2::Get(0xAFBF1317u);
          break;
        case 4502:
          result = TextData2::Get(0x62422u);
          break;
        case 4503:
          result = TextData2::Get(0x9DC6D7C9u);
          break;
        case 4504:
          result = TextData2::Get(0xC1D8585u);
          break;
        case 4505:
          result = TextData2::Get(0x68AED8CFu);
          break;
        case 4507:
          result = TextData2::Get(0x2081B5Fu);
          break;
        case 4508:
          result = TextData2::Get(0xB3C5D319u);
          break;
        case 4509:
          result = TextData2::Get(0x5CC3C4CDu);
          break;
        case 4510:
          result = TextData2::Get(0xA3C3C41Au);
          break;
        case 4511:
          result = TextData2::Get(0xA8BACC2Cu);
          break;
        case 4561:
          result = TextData2::Get(0x4136709Bu);
          break;
        case 4562:
          result = TextData2::Get(0x4A3B6E4Du);
          break;
        case 4548:
        case 4563:
          result = TextData2::Get(0xE03C615Du);
          break;
        case 4564:
          result = TextData2::Get(0x273F7FA6u);
          break;
        case 4565:
          result = TextData2::Get(0x5667685Fu);
          break;
        case 4566:
          result = TextData2::Get(0x5D5CBFA5u);
          break;
        case 4567:
          result = TextData2::Get(0x67A8CD9Du);
          break;
        case 4568:
          result = TextData2::Get(0xF3000BFDu);
          break;
        case 4569:
          result = TextData2::Get(0xFE010458u);
          break;
        case 4571:
          result = TextData2::Get(0xACB0D7D9u);
          break;
        case 4572:
          result = TextData2::Get(0xACB0E3D9u);
          break;
        case 4573:
          result = TextData2::Get(0xB3CADC10u);
          break;
        case 4546:
          result = TextData2::Get(0xDF0F3F61u);
          break;
        case 4547:
          result = TextData2::Get(0xE160503Bu);
          break;
        case 4549:
          result = TextData2::Get(0xE002EB46u);
          break;
        case 4551:
          result = TextData2::Get(0x45D0ADBCu);
          break;
        case 4553:
          result = TextData2::Get(0x4F77B1B9u);
          break;
        case 4554:
          result = TextData2::Get(0xACF8FD11u);
          break;
        case 4555:
          result = TextData2::Get(0xB6D6577u);
          break;
        case 4556:
          result = TextData2::Get(0x51746E67u);
          break;
        case 4557:
          result = TextData2::Get(0x9BC8F40Cu);
          break;
        case 4558:
          result = TextData2::Get(0x4355A64u);
          break;
        case 4559:
          result = TextData2::Get(0x3D9881BFu);
          break;
        case 4574:
          result = TextData2::Get(0x56D89BA9u);
          break;
        case 4575:
          result = TextData2::Get(0xF63BFC03u);
          break;
        case 4506:
          result = TextData2::Get(0x6676867Eu);
          break;
        case 4512:
          result = TextData2::Get(0xF0182711u);
          break;
        case 4577:
          result = TextData2::Get(0x444C3E65u);
          break;
        case 4611:
          result = TextData::Get(0xDABF9AC3u);
          break;
        case 4578:
          result = TextData2::Get(0xEEF8514Au);
          break;
        default:
          goto LABEL_467;
      }
      return result;
    }
    if ( iErrCode == 4482 )
      return TextData2::Get(0xA6B6D3C1u);
    if ( iErrCode <= 1218 )
    {
      if ( iErrCode == 1218 )
      {
        result = TextData::Get(0x122C2F2Au);
      }
      else
      {
        switch ( iErrCode )
        {
          case 911:
          case 912:
            result = TextData2::Get(0x6F7F528Bu);
            break;
          case 846:
            result = TextData2::Get(0x12A074Cu);
            break;
          case 845:
            result = TextData2::Get(0x5D8A71BAu);
            break;
          default:
            goto LABEL_467;
        }
      }
      return result;
    }
    if ( iErrCode <= 1793 )
    {
      if ( iErrCode == 1793 )
        return TextData::Get(0x226625A6u);
      switch ( iErrCode )
      {
        case 1219:
          return TextData::Get(0x6974C3BEu);
        case 1220:
          goto $LN446;
        case 1221:
          return TextData::Get(0xCCE7EB31u);
        case 1222:
          return TextData::Get(0x7DEAE0E1u);
        case 1223:
          return TextData::Get(0xFB151376u);
        case 1224:
          return TextData::Get(0x2E856C99u);
        case 1225:
          return TextData::Get(0x1D3B777Bu);
        case 1227:
          return TextData::Get(0x7A9F949Cu);
        case 1228:
          return TextData::Get(0xC8EDE62Du);
        case 1229:
          return TextData::Get(0x2F402192u);
        case 1230:
          return TextData::Get(0xD9ED1C2Eu);
        case 1231:
          return TextData::Get(0xC13B5133u);
        case 1232:
          return TextData::Get(0xD4EFEEE1u);
        case 1233:
          return TextData::Get(0x71807DDCu);
        case 1234:
          return TextData::Get(0xA318996u);
        case 1235:
          return TextData::Get(0xE5E8343Bu);
        case 1369:
          return TextData2::Get(0x42FBCDA1u);
        case 1242:
          return TextData3::Get(0x265C0106u);
        case 1238:
          goto $LN124_0;
        default:
          goto LABEL_467;
      }
      goto LABEL_467;
    }
    if ( iErrCode <= 2130 )
    {
      if ( iErrCode != 2130 )
      {
        switch ( iErrCode )
        {
          case 1811:
            return TextData::Get(0x975D546Du);
          case 1800:
            return TextData::Get(0x7FFED6DEu);
          case 1801:
            return TextData::Get(0xCF3D2711u);
          case 1802:
            return TextData::Get(0xC6DF531Du);
          case 1803:
            return TextData::Get(0xA3420FF4u);
          case 1804:
            return TextData::Get(0x1393742u);
          case 1805:
            return TextData::Get(0x85F7D6D1u);
          case 1809:
            return TextData::Get(0xC1570D02u);
          case 1796:
            return TextData::Get(0xEA350C44u);
          case 1815:
            return TextData::Get(0xF277060u);
          case 1808:
            return TextData::Get(0x2C601119u);
          case 1818:
            goto $LN360;
          case 1819:
            goto $LN359;
          case 1820:
            goto $LN358;
          case 1822:
            return (char *)&unk_97ADA1;
          case 1794:
            return TextData2::Get(0xD6370F38u);
          default:
            break;
        }
LABEL_467:
        v8 = iErrCode;
        v7 = (unsigned int)TextData::Get(0xB4D3F216u);
        return fs("%s: %d");
      }
      return TextData2::Get(0x973A0E0Du);
    }
    if ( iErrCode == 2888 )
      return TextData2::Get(0x973A0E0Du);
    if ( iErrCode == 3275 )
      return (char *)&unk_97ADA3;
    if ( iErrCode != 4291 )
      goto LABEL_467;
    return TextData2::Get(0xAFDC3929u);
  }
  if ( iErrCode <= 7242 )
  {
    if ( iErrCode == 7242 )
    {
      result = TextData2::Get(0x4A9E96DFu);
    }
    else
    {
      switch ( iErrCode )
      {
        case 6978:
          result = TextData2::Get(0x3DB77BDEu);
          break;
        case 6979:
          result = TextData2::Get(0x75EFBFCFu);
          break;
        case 6980:
          result = TextData2::Get(0x4B99A7C6u);
          break;
        case 6981:
          result = TextData2::Get(0x92E6F429u);
          break;
        case 6982:
          result = TextData2::Get(0xA9E7E31Du);
          break;
        case 6984:
          result = TextData2::Get(0xA4E79CCFu);
          break;
        case 6985:
          result = TextData2::Get(0x8BEAFF15u);
          break;
        case 6986:
          result = TextData2::Get(0x55E7A4D2u);
          break;
        case 6987:
          result = TextData2::Get(0x90F20026u);
          break;
        case 6988:
          result = TextData2::Get(0x9E06B9E1u);
          break;
        case 6989:
          result = TextData2::Get(0xE23B4D69u);
          break;
        case 6990:
          result = TextData2::Get(0x4FA253DFu);
          break;
        case 6991:
          result = TextData2::Get(0x9660ED16u);
          break;
        case 6992:
          result = TextData2::Get(0xA2EFA826u);
          break;
        case 6993:
          result = TextData2::Get(0xEF922C5Eu);
          break;
        case 6994:
          result = TextData2::Get(0xE937DD7Bu);
          break;
        case 6995:
          result = TextData2::Get(0xA52EFA0Du);
          break;
        case 6996:
          result = TextData2::Get(0xD20E1569u);
          break;
        case 7017:
          result = TextData2::Get(0x2F777071u);
          break;
        case 7018:
          result = TextData2::Get(0xE76F7C79u);
          break;
        case 7009:
          result = (char *)&unk_97ADA2;
          break;
        case 7209:
          result = TextData2::Get(0xF53F2563u);
          break;
        case 7210:
          result = TextData2::Get(0xF644216Bu);
          break;
        case 7211:
          result = TextData2::Get(0x99CD0727u);
          break;
        case 7171:
        case 7176:
          result = TextData2::Get(0xE7336090u);
          break;
        case 7172:
        case 7175:
          result = TextData2::Get(0x140AD19Cu);
          break;
        default:
          goto LABEL_467;
      }
    }
    return result;
  }
  if ( iErrCode <= 7616 )
  {
    if ( iErrCode == 7616 )
      return TextData2::Get(0xC9DFC5E6u);
    switch ( iErrCode )
    {
      case 7368:
        goto $LN217;
      case 7355:
        goto $LN216;
      case 7300:
        return TextData2::Get(0xD0FFB43Du);
      case 7303:
        return TextData2::Get(0xBCE5CE35u);
      case 7304:
        goto $LN212;
      case 7354:
        goto $LN211;
      case 7302:
        goto $LN210;
      case 7371:
        goto $LN209;
      case 7301:
        return TextData2::Get(0x8CFBBAD8u);
      case 7318:
        return TextData2::Get(0xA0EAC7ECu);
      case 7357:
        return TextData2::Get(0x83DE96B7u);
      case 7353:
        goto $LN201;
      case 7356:
        goto $LN200;
      case 7372:
        return TextData2::Get(0xC1EBD112u);
      case 7369:
        goto $LN198;
      case 7384:
        goto $LN197;
      default:
        goto LABEL_467;
    }
    goto LABEL_467;
  }
  if ( iErrCode <= 11009 )
  {
    if ( iErrCode == 11009 )
      return TextData2::Get(0x23875179u);
    if ( iErrCode > 8193 )
    {
      if ( iErrCode > 8545 )
      {
        if ( iErrCode > 9749 )
        {
          if ( iErrCode > 10370 )
          {
            switch ( iErrCode )
            {
              case 10372:
              case 10378:
              case 10379:
                result = TextData2::Get(0x7482497u);
                break;
              case 10375:
              case 10383:
                result = TextData2::Get(0x376E68u);
                break;
              case 10380:
              case 10381:
              case 10382:
                result = TextData2::Get(0xD8491D3Eu);
                break;
              case 10373:
                result = TextData2::Get(0x52C75182u);
                break;
              default:
                goto LABEL_467;
            }
          }
          else
          {
            if ( iErrCode == 10370 )
            {
              result = TextData2::Get(0x74C2CFE9u);
            }
            else
            {
              switch ( iErrCode )
              {
                case 9799:
$LN217:
                  result = TextData2::Get(0x3290474Bu);
                  break;
                case 9782:
$LN216:
                  result = TextData2::Get(0xC75A1515u);
                  break;
                case 9751:
$LN212:
                  result = TextData2::Get(0x372CF70Fu);
                  break;
                case 9787:
$LN211:
                  result = TextData2::Get(0x363B6D65u);
                  break;
                case 9755:
$LN210:
                  result = TextData2::Get(0xEBE30517u);
                  break;
                case 9802:
$LN209:
                  result = TextData2::Get(0xD1EB8EFEu);
                  break;
                case 9786:
$LN201:
                  result = TextData2::Get(0x9587C1A6u);
                  break;
                case 9783:
$LN200:
                  result = TextData2::Get(0x4F958ED1u);
                  break;
                case 9800:
$LN198:
                  result = TextData2::Get(0x5A927D84u);
                  break;
                case 9814:
$LN197:
                  result = TextData2::Get(0x8B9C647Fu);
                  break;
                default:
                  goto LABEL_467;
              }
            }
          }
          return result;
        }
        if ( iErrCode == 9749 )
          return TextData2::Get(0x8CFBBAD8u);
        switch ( iErrCode )
        {
          case 8554:
          case 8562:
            return TextData2::Get(0x66F847Eu);
          case 8546:
            return TextData2::Get(0xFD012840u);
          case 8547:
            return TextData2::Get(0x95D8D4E3u);
          case 8555:
            return TextData2::Get(0x5FA5F5B8u);
          default:
            goto LABEL_467;
        }
      }
      else
      {
        if ( iErrCode == 8545 )
          return TextData2::Get(0x66F847Eu);
        switch ( iErrCode )
        {
          case 8196:
            goto $LN140_0;
          case 8194:
            return TextData2::Get(0xF8418A4Bu);
          case 8195:
            return TextData2::Get(0xFF4A8C59u);
          case 8201:
            return TextData2::Get(0x5547D5Fu);
          case 8197:
            return TextData2::Get(0x67B0D2C3u);
          case 8321:
          case 8337:
          case 8353:
            return TextData2::Get(0x3998BCE0u);
          case 8322:
          case 8338:
          case 8354:
            return TextData2::Get(0xA302BC40u);
          case 8323:
            return TextData2::Get(0x569771CAu);
          case 8327:
            return TextData3::Get(0xE94B4980u);
          case 8328:
            return TextData2::Get(0xB8FFB8E9u);
          case 8325:
            return TextData2::Get(0x5EB9B9C7u);
          case 8326:
            return TextData2::Get(0x3AB365C8u);
          case 8324:
            return TextData2::Get(0x11556F80u);
          case 8340:
          case 8356:
            return TextData2::Get(0x5E9A6580u);
          case 8341:
            return TextData2::Get(0xB2FED439u);
          case 8339:
            return TextData2::Get(0x81EAC131u);
          case 8355:
            return TextData2::Get(0x5587579u);
          case 8357:
            return TextData2::Get(0xA9111A27u);
          default:
            goto LABEL_467;
        }
      }
    }
    else
    {
      if ( iErrCode == 8193 )
        return TextData2::Get(0x72F5D8BEu);
      if ( iErrCode > 7809 )
      {
        switch ( iErrCode )
        {
          case 7879:
$LN446:
            result = TextData::Get(0xBC4E4033u);
            break;
          case 7810:
            result = TextData2::Get(0x3C70615Cu);
            break;
          case 7811:
            result = TextData2::Get(0x24966557u);
            break;
          case 7812:
          case 7813:
          case 7814:
          case 7815:
            result = TextData2::Get(0x7DF2C4BFu);
            break;
          case 7877:
          case 7885:
          case 7907:
          case 7922:
          case 7928:
          case 7936:
          case 7944:
          case 7952:
            result = TextData2::Get(0xC4F1D12Bu);
            break;
          case 7878:
            result = TextData2::Get(0x8C73656Fu);
            break;
          case 7881:
            result = TextData2::Get(0x909BD8E0u);
            break;
          case 7882:
          case 7883:
          case 7884:
            result = TextData2::Get(0x29965162u);
            break;
          case 7886:
            result = TextData2::Get(0xC8DFCE1Du);
            break;
          case 7921:
          case 7929:
          case 7937:
          case 7945:
          case 7953:
            result = TextData2::Get(0xD5F3BA10u);
            break;
          case 7923:
            result = TextData2::Get(0x8AEEBAB2u);
            break;
          case 7898:
            result = TextData2::Get(0xD505BABEu);
            break;
          case 7906:
            result = TextData2::Get(0x85FBB6BDu);
            break;
          case 7930:
          case 7938:
            result = TextData2::Get(0x688F6DABu);
            break;
          case 7946:
            result = TextData2::Get(0x2E40FF0Fu);
            break;
          case 7954:
            result = TextData2::Get(0xE3621C0Du);
            break;
          case 8004:
            result = TextData2::Get(0x42A0111u);
            break;
          case 8005:
            result = TextData2::Get(0x322E0C20u);
            break;
          case 8012:
            result = TextData2::Get(0x9780657Fu);
            break;
          case 7961:
            result = TextData2::Get(0x3EA56FA4u);
            break;
          case 7888:
$LN124_0:
            result = TextData2::Get(0x87A8C5F1u);
            break;
          default:
            goto LABEL_467;
        }
        return result;
      }
      if ( iErrCode == 7809 )
        return TextData2::Get(0x314410EFu);
      if ( iErrCode == 7618 )
        return TextData2::Get(0xDBDE140Du);
      if ( iErrCode == 7619 )
        return TextData2::Get(0x1A815B53u);
      if ( iErrCode == 7620 )
        return TextData2::Get(0x10112879u);
    }
    goto LABEL_467;
  }
  if ( iErrCode <= 12393 )
  {
    if ( iErrCode != 12393 )
    {
      switch ( iErrCode )
      {
        case 11010:
          result = TextData2::Get(0xA3DBB817u);
          break;
        case 11073:
          result = TextData2::Get(0x9DE394D5u);
          break;
        case 11074:
          result = TextData2::Get(0x9EE79BC8u);
          break;
        case 11075:
          result = TextData2::Get(0x9C029E0Eu);
          break;
        case 11137:
          result = TextData2::Get(0x42D9BB9Fu);
          break;
        case 11138:
          result = TextData2::Get(0x598C2F96u);
          break;
        case 11153:
          result = TextData2::Get(0xCE452002u);
          break;
        case 11154:
          result = TextData2::Get(0x9ECCB7F0u);
          break;
        case 11155:
          result = TextData2::Get(0x48877E55u);
          break;
        case 11156:
          result = TextData2::Get(0x228F6A49u);
          break;
        case 11157:
          result = TextData2::Get(0xF896156u);
          break;
        case 11158:
          result = TextData2::Get(0x498C7871u);
          break;
        case 11169:
          result = TextData2::Get(0x609C72AFu);
          break;
        case 11170:
          result = TextData2::Get((unsigned int)loc_5E705E);
          break;
        case 11171:
          result = TextData2::Get(0xFA40F960u);
          break;
        case 11177:
          result = TextData2::Get(0x58B5DAADu);
          break;
        case 11178:
          result = TextData2::Get(0xA8151BF0u);
          break;
        case 11179:
          result = TextData2::Get(0xA8171CEAu);
          break;
        case 11180:
          result = TextData2::Get(0x13D8B58u);
          break;
        case 11181:
          result = TextData2::Get(0x3089B197u);
          break;
        case 11182:
          result = TextData2::Get(0x5403620u);
          break;
        case 11201:
          result = TextData2::Get(0xDE7F685Bu);
          break;
        case 11202:
          result = TextData2::Get(0x990F00EBu);
          break;
        case 11203:
          result = TextData2::Get(0xE5614F3Au);
          break;
        default:
          goto LABEL_467;
      }
      return result;
    }
    return TextData2::Get(0xAFDC3929u);
  }
  if ( iErrCode <= 12697 )
  {
    if ( iErrCode == 12697 )
      return TextData3::Get(0xA4C1054Bu);
    switch ( iErrCode )
    {
      case 12585:
        return TextData::Get(0x226625A6u);
      case 12588:
        return TextData::Get(0x7FFED6DEu);
      case 12587:
        return TextData::Get(0x2C601119u);
      case 12586:
        return TextData2::Get(0xD6370F38u);
      case 12394:
        return TextData2::Get(0x548184DDu);
      case 12395:
        return TextData2::Get(0x6681D6DDu);
      case 12396:
        return TextData2::Get(0xAA212A1Eu);
      case 12397:
        return TextData2::Get(0x5F7E8AECu);
      case 12398:
        return TextData2::Get(0x1A2DA098u);
      case 12399:
        return TextData2::Get(0x61D307F0u);
      case 12400:
        return TextData3::Get(0x64868AD3u);
      case 12417:
        return TextData2::Get(0x547DE6BDu);
      case 12418:
        return TextData2::Get(0x54CFE6CFu);
      case 12419:
        return TextData2::Get(0xF4232713u);
      case 12420:
        return TextData2::Get(0x5183F5C8u);
      case 12421:
        return TextData2::Get(0x55ACA9C2u);
      case 12422:
        return TextData2::Get(0x6E88A182u);
      case 12433:
        return TextData2::Get(0xA1BD2A03u);
      case 12434:
        return TextData2::Get(0xA10F2A15u);
      case 12435:
        return TextData2::Get(0x41636B59u);
      case 12436:
        return TextData2::Get(0xA6B93204u);
      case 12437:
        return TextData2::Get(0xF2253AFAu);
      case 12438:
        return TextData2::Get(0xAD113614u);
      case 12590:
        return TextData::Get(0x1E3D0573u);
      case 12591:
        return TextData2::Get(0x7CE5E1E5u);
      case 12592:
        return TextData::Get(0xD4F5BC24u);
      case 12594:
        return TextData::Get(0xCD490130u);
      case 12593:
        return TextData::Get(0xE85E342Au);
      case 12456:
        return TextData2::Get(0xE4E83850u);
      case 12458:
        return TextData2::Get(0x7669E8Eu);
      case 12459:
        return TextData2::Get(0xB01D3B4Cu);
      case 12460:
        return TextData3::Get(0x4FC0E9E9u);
      default:
        goto LABEL_467;
    }
    goto LABEL_467;
  }
  if ( iErrCode <= 13377 )
  {
    if ( iErrCode == 13377 )
      return TextData3::Get(0xCC0F3C39u);
    switch ( iErrCode )
    {
      case 12698:
        return TextData3::Get(0x9C090D3Fu);
      case 12699:
        return TextData3::Get(0x9CE3F724u);
      case 12700:
        return TextData3::Get(0xBA68CBFu);
      case 12701:
        return TextData3::Get(0xEBFD2B90u);
      case 12702:
        return TextData3::Get(0x49599CFFu);
      case 12843:
        return TextData3::Get(0x2F2B7E6Eu);
      case 12846:
        return TextData3::Get(0x86787C69u);
      case 12882:
      case 12883:
        return TextData3::Get(0x98BEF7C3u);
      case 12884:
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &v6,
          "LimitRandomOption");
        v8 = CSingleDataMap::GetValue(&g_kSingleDataMap, v6);
        v7 = -1765869629;
        goto LABEL_434;
      case 12885:
      case 12886:
        return TextData3::Get(0x97BEF7C3u);
      default:
        goto LABEL_467;
    }
    goto LABEL_467;
  }
  if ( iErrCode <= 13913 )
  {
    if ( iErrCode == 13913 )
      return TextData3::Get(0xA72305DEu);
    switch ( iErrCode )
    {
      case 13378:
      case 13406:
      case 13408:
        return TextData3::Get(0xCC0F3C39u);
      case 13521:
      case 13522:
      case 13525:
      case 13533:
        return TextData3::Get(0xB7050908u);
      case 13523:
        return TextData3::Get(0x87ADC7C9u);
      case 13524:
        return TextData3::Get(0x889F78C5u);
      case 13526:
      case 13528:
      case 13529:
      case 13530:
      case 13531:
      case 13532:
        return TextData3::Get(0x94ABBCAFu);
      case 13379:
      case 13380:
        return TextData3::Get(0x97F0E247u);
      case 13381:
      case 13382:
        return TextData3::Get(0x78B0E3E7u);
      case 13400:
        return TextData3::Get(0xC7ECDC49u);
      case 13404:
      case 13405:
        return TextData3::Get(0xBE2F0C3Du);
      case 13441:
        return TextData3::Get(0x3B5B223Bu);
      case 13442:
        return TextData3::Get(0xE209CEDCu);
      default:
        goto LABEL_467;
    }
    goto LABEL_467;
  }
  if ( iErrCode > 14273 )
  {
    switch ( iErrCode )
    {
      case 14274:
        return TextData3::Get(0x6A928276u);
      case 14275:
        return TextData3::Get(0x6DA5857Bu);
      case 14276:
        return TextData3::Get(0x49B8E0C8u);
      case 14278:
        return TextData3::Get(0x6B9B8770u);
      case 14279:
        return TextData::Get(0x91A8CDCEu);
      case 14277:
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &v6,
          "AddMixItem");
        v4 = CSingleDataMap::GetValue(&g_kSingleDataMap, v6);
        v5 = Item::Create(v4);
        if ( !v5 )
          return v1;
        v8 = (int)v5->m_pkInfo->Name;
        v7 = -1628252885;
        goto LABEL_434;
      default:
        goto LABEL_467;
    }
    goto LABEL_467;
  }
  if ( iErrCode != 14273 )
  {
    if ( iErrCode == 13914 || iErrCode == 13915 )
      return TextData3::Get(0xA7D4FEE2u);
    if ( iErrCode == 13916 )
      return TextData3::Get(0xF01B3C26u);
    goto LABEL_467;
  }
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    &v6,
    "MixMinUpgrade");
  v8 = CSingleDataMap::GetValue(&g_kSingleDataMap, v6);
  v7 = -1122297050;
LABEL_434:
  v3 = TextData3::Get(v7);
  return fs(v3);
}
// 5E705E: using guessed type int __thiscall loc_5E705E(ChatBoardFlex *this, float fCurTime);

//----- (00419B30) --------------------------------------------------------
void __thiscall EventRankWin::Clear(EventRankWin *this)
{
  SlideListWin *v1; // ecx@1

  v1 = this->m_pkListWin;
  if ( v1 )
    SlideListWin::RemoveAllList(v1);
}

//----- (00419B40) --------------------------------------------------------
void __thiscall EventRankWin::AddRank(EventRankWin *this, unsigned int uiRank, const char *pcName, unsigned int uiScore)
{
  EventRankWin *v4; // esi@1
  SlideListWin *v5; // ecx@1
  int v6; // edi@2
  char *v7; // eax@2
  char *v8; // eax@2

  v4 = this;
  v5 = this->m_pkListWin;
  if ( v5 )
  {
    v6 = SlideListWin::AddText(v5, 0);
    v7 = fs("%d");
    SlideListWin::SetText(v4->m_pkListWin, v6, 0, v7);
    SlideListWin::SetText(v4->m_pkListWin, v6, 1u, pcName);
    v8 = fs("%d");
    SlideListWin::SetText(v4->m_pkListWin, v6, 2u, v8);
    SlideListWin::AlignText(v4->m_pkListWin, 5u);
    SlideListWin::UpdateViewList(v4->m_pkListWin);
  }
}

//----- (00419BD0) --------------------------------------------------------
void __thiscall EventRankWin::OnShowWin(EventRankWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 5u, 1u, 0);
}

//----- (00419BE0) --------------------------------------------------------
void __thiscall EventRankWin::OnHelpLink(EventRankWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "RankingWin_Olympic");
}

//----- (00419C10) --------------------------------------------------------
void __thiscall EventRankWin::OnRankCur(EventRankWin *this)
{
  EventRankWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  int v3; // eax@3
  int v4; // esi@3
  NiRefObjectVtbl *v5; // esi@6
  char *v6; // eax@6
  char acName[21]; // [sp+4h] [bp-1Ch]@4
  unsigned int v8; // [sp+1Ch] [bp-4h]@1
  int v9; // [sp+20h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
    SlideListWin::RemoveAllList(v2);
  v3 = *(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *(_DWORD *)v3;
  if ( *(_DWORD *)v3 != v3 )
  {
    do
    {
      *(_DWORD *)acName = *(_DWORD *)(v4 + 9);
      *(_DWORD *)&acName[4] = *(_DWORD *)(v4 + 13);
      *(_DWORD *)&acName[8] = *(_DWORD *)(v4 + 17);
      *(_DWORD *)&acName[12] = *(_DWORD *)(v4 + 21);
      *(_DWORD *)&acName[16] = *(_DWORD *)(v4 + 25);
      acName[20] = 0;
      EventRankWin::AddRank(v1, *(_BYTE *)(v4 + 8), acName, *(_DWORD *)(v4 + 29));
      v4 = *(_DWORD *)v4;
    }
    while ( v4 != *(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  if ( v1->m_pkRankBtnText )
  {
    v5 = v1->m_pkRankBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = TextData3::Get(0x64EDE1BEu);
    v5[118].__vecDelDtor((NiRefObject *)v1->m_pkRankBtnText, (unsigned int)v6);
  }
  if ( v1->m_pkRankBtn )
    ((void (__stdcall *)(signed int))v1->m_pkRankBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(2);
}
// A85C00: using guessed type int __security_cookie;

//----- (00419CE0) --------------------------------------------------------
void __thiscall EventRankWin::OnRankPrev(EventRankWin *this)
{
  EventRankWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  int v3; // eax@3
  int v4; // esi@3
  NiRefObjectVtbl *v5; // esi@6
  char *v6; // eax@6
  char acName[21]; // [sp+4h] [bp-1Ch]@4
  unsigned int v8; // [sp+1Ch] [bp-4h]@1
  int v9; // [sp+20h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
    SlideListWin::RemoveAllList(v2);
  v3 = *(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *(_DWORD *)v3;
  if ( *(_DWORD *)v3 != v3 )
  {
    do
    {
      *(_DWORD *)acName = *(_DWORD *)(v4 + 9);
      *(_DWORD *)&acName[4] = *(_DWORD *)(v4 + 13);
      *(_DWORD *)&acName[8] = *(_DWORD *)(v4 + 17);
      *(_DWORD *)&acName[12] = *(_DWORD *)(v4 + 21);
      *(_DWORD *)&acName[16] = *(_DWORD *)(v4 + 25);
      acName[20] = 0;
      EventRankWin::AddRank(v1, *(_BYTE *)(v4 + 8), acName, *(_DWORD *)(v4 + 29));
      v4 = *(_DWORD *)v4;
    }
    while ( v4 != *(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  if ( v1->m_pkRankBtnText )
  {
    v5 = v1->m_pkRankBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = TextData3::Get(0x57AEEBC0u);
    v5[118].__vecDelDtor((NiRefObject *)v1->m_pkRankBtnText, (unsigned int)v6);
  }
  if ( v1->m_pkRankBtn )
    ((void (__stdcall *)(signed int))v1->m_pkRankBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(1);
}
// A85C00: using guessed type int __security_cookie;

//----- (00419DB0) --------------------------------------------------------
void __thiscall EventRankWin::OnCommand(EventRankWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@5

  switch ( wParam )
  {
    case 0u:
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
      break;
    case 1u:
      EventRankWin::OnRankCur(this);
      break;
    case 2u:
      EventRankWin::OnRankPrev(this);
      break;
    case 3u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "RankingWin_Olympic");
      break;
    default:
      return;
  }
}

//----- (00419E20) --------------------------------------------------------
void __thiscall EventRankWin::AddPrevRank(EventRankWin *this, SCENARIO_RANKING_INFO kRank)
{
  int v2; // edi@1
  char *v3; // esi@1
  std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *v4; // eax@1
  int v5; // ecx@1

  v2 = *(_DWORD *)&this->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (char *)&this->m_kPrevRanks;
  v4 = std::_List_val<SCENARIO_RANKING_INFO_std::allocator<SCENARIO_RANKING_INFO>>::_Buynode(
         &this->m_kPrevRanks.baseclass_0,
         *(std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node **)&this->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
         *(std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node **)(v2 + 4),
         &kRank);
  v5 = *((_DWORD *)v3 + 1);
  if ( (unsigned int)(171798690 - v5) < 1 )
    std::_Xlength_error("list<T> too long");
  *((_DWORD *)v3 + 1) = v5 + 1;
  *(_DWORD *)(v2 + 4) = v4;
  v4->_Prev->_Next = v4;
}

//----- (00419E70) --------------------------------------------------------
void __thiscall EventRankWin::AddCurRank(EventRankWin *this, SCENARIO_RANKING_INFO kRank)
{
  int v2; // edi@1
  char *v3; // esi@1
  std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *v4; // eax@1
  int v5; // ecx@1

  v2 = *(_DWORD *)&this->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (char *)&this->m_kCurRanks;
  v4 = std::_List_val<SCENARIO_RANKING_INFO_std::allocator<SCENARIO_RANKING_INFO>>::_Buynode(
         &this->m_kCurRanks.baseclass_0,
         *(std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node **)&this->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
         *(std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node **)(v2 + 4),
         &kRank);
  v5 = *((_DWORD *)v3 + 1);
  if ( (unsigned int)(171798690 - v5) < 1 )
    std::_Xlength_error("list<T> too long");
  *((_DWORD *)v3 + 1) = v5 + 1;
  *(_DWORD *)(v2 + 4) = v4;
  v4->_Prev->_Next = v4;
}

//----- (00419EC0) --------------------------------------------------------
void __thiscall EventRankWin::OnClose(EventRankWin *this)
{
  EventRankWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  void **v3; // ecx@3
  void *v4; // eax@3
  void *v5; // edi@4
  void **v6; // ecx@5
  void *v7; // eax@5
  void *v8; // edi@6

  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
    SlideListWin::RemoveAllList(v2);
  v3 = *(void ***)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *v3;
  *v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kCurRanks.baseclass_0.baseclass_0._Mysize = 0;
  if ( v4 != *(void **)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v5 = *(void **)v4;
      operator delete(v4);
      v4 = v5;
    }
    while ( v5 != *(void **)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v6 = *(void ***)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = *v6;
  *v6 = v6;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kPrevRanks.baseclass_0.baseclass_0._Mysize = 0;
  if ( v7 != *(void **)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v8 = *(void **)v7;
      operator delete(v7);
      v7 = v8;
    }
    while ( v8 != *(void **)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (00419F60) --------------------------------------------------------
void __thiscall EventRankWin::EventRankWin(EventRankWin *this)
{
  EventRankWin *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@6
  std::exception thisa; // [sp+Ch] [bp-24h]@4
  EventRankWin *v6; // [sp+18h] [bp-18h]@1
  int v7; // [sp+1Ch] [bp-14h]@6
  char *_What; // [sp+20h] [bp-10h]@4
  int v9; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  v6 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventRankWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventRankWin::_vftable_;
  v9 = 0;
  v1->m_kPrevRanks.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x24u);
  if ( !v2 )
  {
    v7 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v7);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  LOBYTE(v9) = 1;
  v1->m_kCurRanks.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x24u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 97AF34: using guessed type int (__stdcall *EventRankWin___vftable_)(int uiFlags);
// 97AF54: using guessed type int (__thiscall *EventRankWin___vftable_)(void *p, char);

//----- (0041A050) --------------------------------------------------------
void __thiscall EventRankWin::_EventRankWin(EventRankWin *this)
{
  EventRankWin *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2
  void **v5; // ecx@3
  void *v6; // eax@3
  void *v7; // edi@4

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventRankWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventRankWin::_vftable_;
  v2 = *(void ***)&this->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kCurRanks.baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_kCurRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  v5 = *(void ***)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = *v5;
  *v5 = v5;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kPrevRanks.baseclass_0.baseclass_0._Mysize = 0;
  if ( v6 != *(void **)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v7 = *(void **)v6;
      operator delete(v6);
      v6 = v7;
    }
    while ( v7 != *(void **)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_kPrevRanks.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97AF34: using guessed type int (__stdcall *EventRankWin___vftable_)(int uiFlags);
// 97AF54: using guessed type int (__thiscall *EventRankWin___vftable_)(void *p, char);

//----- (0041A110) --------------------------------------------------------
EventRankWin *__cdecl EventRankWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  EventRankWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x17Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    EventRankWin::EventRankWin((EventRankWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (EventRankWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0041A240) --------------------------------------------------------
bool __thiscall EventRankWin::Create(EventRankWin *this, PgFrameWork *pkFrameWork)
{
  EventRankWin *v2; // esi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  NiSourceTexture *v7; // eax@10
  D3DXCOLOR v8; // ST1C_16@10
  char *v9; // eax@10
  D3DXCOLOR v10; // ST1C_16@10
  char *v11; // eax@10
  D3DXCOLOR v12; // ST1C_16@10
  char *v13; // eax@10
  D3DXCOLOR v14; // ST1C_16@10
  char *v15; // eax@10
  D3DXCOLOR v16; // ST1C_16@10
  char *v17; // eax@10
  PgWin *v18; // edi@10
  D3DXCOLOR v19; // ST1C_16@10
  char *v20; // eax@10
  SLWCreateInfo::Item *v21; // edi@10
  SLWCreateInfo::Item *v22; // edi@12
  SLWCreateInfo::Item *v23; // edi@14
  SLWCreateInfo::Item *v24; // edi@16
  PgSprData *v25; // eax@18
  SlideListWin *v26; // eax@18
  NiNode *v27; // esi@20
  NiTexturePalette *pTexturePalette; // [sp+18h] [bp-74h]@1
  int iTop; // [sp+1Ch] [bp-70h]@18
  SLWCreateInfo kCreateInfo; // [sp+20h] [bp-6Ch]@10
  int iXOff; // [sp+3Ch] [bp-50h]@4
  int iYOff; // [sp+40h] [bp-4Ch]@4
  int iLeft; // [sp+44h] [bp-48h]@18
  UIUtil ui; // [sp+48h] [bp-44h]@10
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+60h] [bp-2Ch]@10
  unsigned int v37; // [sp+7Ch] [bp-10h]@1
  int v38; // [sp+88h] [bp-4h]@1
  int v39; // [sp+8Ch] [bp+0h]@1

  v37 = (unsigned int)&v39 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v38 = 0;
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\RankingWin_Olympic.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v4, 0, pkFrameWork, "EventRankWin", 0) )
  {
    v5 = spNode.m_pObject;
    v38 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v38) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v7 = MenuTexMgr::GetTexture(0x13u);
  UIUtil::CreateSpr(&ui, "Theme", v7);
  UIUtil::CreateSpr(&ui, "Plane", 0);
  *(_QWORD *)&v8.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v8.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v9 = TextData3::Get(0xD72D2235u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v9, COERCE_D3DXCOLOR(v8.r), 5u);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v11 = TextData3::Get(0x6AA4E1D5u);
  UIUtil::CreateTextNoSpr(&ui, "Text01", v11, COERCE_D3DXCOLOR(v10.r), 5u);
  *(_QWORD *)&v12.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v12.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v13 = TextData3::Get(0x6AA0DBD4u);
  UIUtil::CreateTextNoSpr(&ui, "Text02", v13, COERCE_D3DXCOLOR(v12.r), 5u);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = TextData3::Get(0x6CEAE8D6u);
  UIUtil::CreateTextNoSpr(&ui, "Text03", v15, COERCE_D3DXCOLOR(v14.r), 5u);
  UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
  UIUtil::CreateBtn(&ui, 3u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, 0);
  v2->m_pkRankBtn = UIUtil::CreateBtn(&ui, 2u, "BtnNor01", "BtnOver01", "BtnClick01", 0, 0);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v17 = TextData3::Get(0x64EDE1BEu);
  v2->m_pkRankBtnText = UIUtil::CreateAttachedText(
                          &ui,
                          &v2->m_pkRankBtn->baseclass_0.baseclass_0,
                          v17,
                          COERCE_D3DXCOLOR(v16.r),
                          5u);
  v18 = (PgWin *)UIUtil::CreateBtn(&ui, 0, "BtnNor02", "BtnOver02", "BtnClick02", 0, 0);
  *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v20 = TextData3::Get(0x72DAFBE2u);
  UIUtil::CreateAttachedText(&ui, v18, v20, COERCE_D3DXCOLOR(v19.r), 5u);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v38) = 2;
  v21 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v21->nItemType = 1;
  v21->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  LOBYTE(v38) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v21->vecNodeName,
    &thisa);
  LOBYTE(v38) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v22 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v22->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
  LOBYTE(v38) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v22->vecNodeName,
    &thisa);
  LOBYTE(v38) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v22->pNode = spNode.m_pObject;
  v23 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v23->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
  LOBYTE(v38) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v23->vecNodeName,
    &thisa);
  LOBYTE(v38) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v23->pNode = spNode.m_pObject;
  v23->bAbbreviatable = 1;
  v24 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v24->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
  LOBYTE(v38) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v24->vecNodeName,
    &thisa);
  LOBYTE(v38) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v24->pNode = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox02", &iLeft, &iTop, 0);
  v26 = SlideListWin::CreateWin(
          iLeft - iXOff,
          iTop - iYOff,
          v25,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pkListWin = v26;
  SlideListWin::UpdateViewList(v26);
  ((void (__thiscall *)(EventRankWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v38) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)iLeft);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v38) = 0;
  UIUtil::_UIUtil(&ui);
  v27 = spNode.m_pObject;
  v38 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v27 )
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041A810) --------------------------------------------------------
std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *__thiscall std::_List_val<SCENARIO_RANKING_INFO_std::allocator<SCENARIO_RANKING_INFO>>::_Buynode(std::_List_val<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> > *this, std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *_Next, std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *_Prev, SCENARIO_RANKING_INFO *_Val)
{
  std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *result; // eax@1
  std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *v5; // edx@2
  SCENARIO_RANKING_INFO *v6; // esi@3
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *)operator new(0x24u);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<SCENARIO_RANKING_INFO,std::allocator<SCENARIO_RANKING_INFO> >::_Node *)-8 )
  {
    v6 = _Val;
    memcpy(&result->_Myval, _Val, 0x18u);
    BYTE3(result->_Myval.nScore) = BYTE3(v6->nScore);
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0041A880) --------------------------------------------------------
void *__thiscall EventRankWin::_scalar_deleting_destructor_(EventRankWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  EventRankWin::_EventRankWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0041A8B0) --------------------------------------------------------
void __thiscall EventTimeWin::EventTimeWin(EventTimeWin *this)
{
  EventTimeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventTimeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventTimeWin::_vftable_;
  v1->m_pkTimeTextWin = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimer);
  v1->m_uiSecond = 0;
  *(_WORD *)&v1->m_bTimer = 0;
}
// 97B1D4: using guessed type int (__stdcall *EventTimeWin___vftable_)(int uiFlags);
// 97B1F4: using guessed type int (__thiscall *EventTimeWin___vftable_)(void *p, char);

//----- (0041A930) --------------------------------------------------------
void __thiscall EventTimeWin::_EventTimeWin(EventTimeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97B1D4: using guessed type int (__stdcall *EventTimeWin___vftable_)(int uiFlags);
// 97B1F4: using guessed type int (__thiscall *EventTimeWin___vftable_)(void *p, char);

//----- (0041A950) --------------------------------------------------------
void __thiscall EventTimeWin::UpdateTimer(EventTimeWin *this, float fCurTime)
{
  EventTimeWin *v2; // esi@1
  PgWinText *v3; // eax@4
  NiRefObjectVtbl *v4; // edi@5
  char *v5; // eax@5

  v2 = this;
  if ( this->m_bTimer )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimer, fCurTime) )
      ++v2->m_uiSecond;
    v3 = v2->m_pkTimeTextWin;
    if ( v3 )
    {
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = fs("%02d:%02d");
      v4[118].__vecDelDtor((NiRefObject *)v2->m_pkTimeTextWin, (unsigned int)v5);
    }
  }
}

//----- (0041A9C0) --------------------------------------------------------
void __thiscall EventTimeWin::UpdateCloser(EventTimeWin *this, float fCurTime)
{
  PgWin *v2; // esi@1

  v2 = (PgWin *)this;
  if ( this->m_bCloser )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimer, fCurTime) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  }
}

//----- (0041AA00) --------------------------------------------------------
void __thiscall EventTimeWin::UpdateMeWin(EventTimeWin *this, float fCurTime)
{
  EventTimeWin *v2; // esi@1

  v2 = this;
  EventTimeWin::UpdateTimer(this, fCurTime);
  if ( v2->m_bCloser )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kTimer, fCurTime) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0041AA50) --------------------------------------------------------
void __thiscall EventTimeWin::Start(EventTimeWin *this, float fCurTime)
{
  EventTimeWin *v2; // esi@1

  v2 = this;
  CNSTimer_Interval::ReSet(&this->m_kTimer, fCurTime);
  v2->m_kTimer.m_fCheckTime = 1.0;
  v2->m_uiSecond = 0;
  v2->m_bTimer = 1;
}

//----- (0041AA90) --------------------------------------------------------
void __thiscall EventTimeWin::Stop(EventTimeWin *this, float fDeleteTime)
{
  EventTimeWin *v2; // esi@1

  v2 = this;
  *(_WORD *)&this->m_bTimer = 256;
  CNSTimer_Interval::ReSet(&this->m_kTimer, Timer::ms_fCurTime);
  v2->m_kTimer.m_fCheckTime = fDeleteTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0041AAD0) --------------------------------------------------------
bool __thiscall EventTimeWin::Create(EventTimeWin *this, PgFrameWork *pkFrameWork)
{
  EventTimeWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgSprData *v10; // eax@15
  PgWinSpr *v11; // eax@15
  PgSprData *v12; // eax@15
  PgWinSpr *v13; // eax@15
  PgSprData *v14; // eax@15
  PgSprData *v15; // edi@15
  PgWinSpr *v16; // eax@15
  NiPointer<PgSprData::PgHitTester> *v17; // ecx@15
  unsigned int v18; // edi@15
  unsigned int v19; // ebx@15
  PgFont *v20; // eax@15
  PgWinText *v21; // eax@15
  NiRefObjectVtbl *v22; // edi@15
  PgFont *v23; // eax@15
  NiRefObjectVtbl *v24; // edi@15
  int v25; // eax@15
  NiNode *v26; // esi@16
  int uiLeft; // [sp+34h] [bp-18h]@11
  int uiTop; // [sp+38h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+3Ch] [bp-10h]@1
  int v30; // [sp+48h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v30 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v30 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\QuestTime.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "EventTimeWin", 0) )
  {
    v4 = spNode.m_pObject;
    v30 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Reward", &uiLeft, &uiTop, 0);
  v11 = PgWinSpr::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v11,
    1u);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v13 = PgWinSpr::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Time", &uiLeft, &uiTop, v3);
  v15 = v14;
  v16 = PgWinSpr::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  v17 = v15->m_akHitTester.m_pBase;
  v18 = v17->m_pObject->m_uiHeight;
  v19 = v17->m_pObject->m_uiWidth;
  v20 = Font::Get(0);
  v21 = PgWinText::CreateWin(uiLeft, uiTop + 2, v19, v18, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTimeTextWin = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v22 = v2->m_pkTimeTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = Font::Get(LARGEBOLD);
  v22[113].__vecDelDtor((NiRefObject *)v2->m_pkTimeTextWin, (unsigned int)v23);
  ((void (__stdcall *)(_DWORD))v2->m_pkTimeTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("00:00:00");
  ((void (__stdcall *)(_DWORD))v2->m_pkTimeTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(EventTimeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.0);
  v24 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
               (NiRefObject *)v2,
               240u);
  v24[77].__vecDelDtor((NiRefObject *)v2, v25);
  v30 = -1;
  if ( spNode.m_pObject )
  {
    v26 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v26 )
        v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041ADC0) --------------------------------------------------------
EventTimeWin *__cdecl EventTimeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  EventTimeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x180u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &EventTimeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &EventTimeWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    CNSTimer_Interval::CNSTimer_Interval((CNSTimer_Interval *)((char *)v2 + 348));
    *((_DWORD *)v2 + 94) = 0;
    *((_WORD *)v2 + 190) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (EventTimeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97B1D4: using guessed type int (__stdcall *EventTimeWin___vftable_)(int uiFlags);
// 97B1F4: using guessed type int (__thiscall *EventTimeWin___vftable_)(void *p, char);

//----- (0041AF20) --------------------------------------------------------
void *__thiscall EventTimeWin::_scalar_deleting_destructor_(EventTimeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97B1D4: using guessed type int (__stdcall *EventTimeWin___vftable_)(int uiFlags);
// 97B1F4: using guessed type int (__thiscall *EventTimeWin___vftable_)(void *p, char);

//----- (0041AF60) --------------------------------------------------------
void __cdecl Folder::Init()
{
  char *v0; // eax@1
  char *v1; // edx@1
  char v2; // cl@2
  int v3; // eax@3
  char v4; // cl@4
  int v5; // eax@5
  char v6; // cl@6
  char *v7; // eax@7
  char v8; // cl@8
  int v9; // edx@9
  char v10; // cl@9
  int v11; // eax@9
  char v12; // cl@10
  char *v13; // eax@11
  char v14; // cl@12
  int (__thiscall *v15)(GuildNpcMenuWin *, int); // ecx@13
  int v16; // eax@13
  char v17; // cl@14
  char *v18; // eax@15
  char v19; // cl@16
  int v20; // ecx@17
  __int16 v21; // dx@17
  int v22; // eax@17
  char v23; // cl@18
  char *v24; // eax@19
  char v25; // cl@20
  int v26; // edx@21
  __int16 v27; // cx@21
  int v28; // eax@21
  char v29; // cl@22
  char *v30; // eax@23
  char v31; // cl@24
  int v32; // edx@25
  char v33; // cl@25
  int v34; // eax@25
  char v35; // cl@26
  char *v36; // eax@27
  char v37; // cl@28
  int v38; // ecx@29
  char v39; // dl@29
  int v40; // eax@29
  char v41; // cl@30
  char *v42; // eax@31
  char v43; // cl@32
  int v44; // edx@33
  __int16 v45; // cx@33
  int v46; // eax@33
  char v47; // cl@34
  char *v48; // eax@35
  char v49; // cl@36
  int v50; // edx@37
  __int16 v51; // cx@37
  int v52; // eax@37
  char v53; // cl@38
  char *v54; // eax@39
  char v55; // cl@40
  int v56; // edx@41
  char v57; // cl@41
  int v58; // eax@41
  char v59; // cl@42
  char *v60; // eax@43
  char v61; // cl@44
  int (__thiscall *v62)(GuildNpcMenuWin *, int); // ecx@45
  int v63; // eax@45
  char v64; // cl@46
  char *v65; // eax@47
  char v66; // cl@48
  int v67; // ecx@49
  char v68; // dl@49
  int v69; // eax@49
  char v70; // cl@50
  char *v71; // eax@51
  char v72; // cl@52
  __int16 v73; // dx@53
  int v74; // eax@53
  char v75; // cl@54
  char *v76; // eax@55
  char v77; // cl@56
  int v78; // edx@57
  __int16 v79; // cx@57
  Argv kArgv; // [sp+0h] [bp-41Ch]@1
  unsigned int v81; // [sp+40Ch] [bp-10h]@1
  int v82; // [sp+418h] [bp-4h]@1
  int v83; // [sp+41Ch] [bp+0h]@1

  v81 = (unsigned int)&v83 ^ __security_cookie;
  Argv::Argv(&kArgv);
  v82 = 0;
  v0 = Argv::GetMerge(&kArgv, filename);
  v1 = (char *)(&Folder::m_acMain - v0);
  do
  {
    v2 = *v0;
    v0[(_DWORD)v1] = *v0;
    ++v0;
  }
  while ( v2 );
  v3 = 0;
  do
  {
    v4 = kArgv.m_FileName[v3];
    Folder::m_acFileName[v3++] = v4;
  }
  while ( v4 );
  v5 = 0;
  do
  {
    v6 = *(&Folder::m_acMain + v5);
    *(&Folder::m_acMenu + v5++) = v6;
  }
  while ( v6 );
  v7 = &Folder::m_acMenu - 1;
  do
    v8 = (v7++)[1];
  while ( v8 );
  v9 = dword_97B41C;
  *(_DWORD *)v7 = dword_97B418;
  v10 = byte_97B420;
  *((_DWORD *)v7 + 1) = v9;
  v7[8] = v10;
  v11 = 0;
  do
  {
    v12 = *(&Folder::m_acMain + v11);
    Folder::m_acMap[v11++] = v12;
  }
  while ( v12 );
  v13 = &Folder::m_acMap[-1];
  do
    v14 = (v13++)[1];
  while ( v14 );
  v15 = off_97B428;
  *(_DWORD *)v13 = dword_97B424;
  *((_DWORD *)v13 + 1) = v15;
  v16 = 0;
  do
  {
    v17 = *(&Folder::m_acMain + v16);
    *(&Folder::m_acSound + v16++) = v17;
  }
  while ( v17 );
  v18 = &Folder::m_acSound - 1;
  do
    v19 = (v18++)[1];
  while ( v19 );
  v20 = dword_97B430;
  *(_DWORD *)v18 = dword_97B42C;
  v21 = word_97B434;
  *((_DWORD *)v18 + 1) = v20;
  *((_WORD *)v18 + 4) = v21;
  v22 = 0;
  do
  {
    v23 = *(&Folder::m_acMain + v22);
    *(&Folder::m_acEffect + v22++) = v23;
  }
  while ( v23 );
  v24 = &Folder::m_acEffect - 1;
  do
    v25 = (v24++)[1];
  while ( v25 );
  v26 = dword_97B43C;
  *(_DWORD *)v24 = dword_97B438;
  v27 = word_97B440;
  *((_DWORD *)v24 + 1) = v26;
  LOBYTE(v26) = byte_97B442;
  *((_WORD *)v24 + 4) = v27;
  v24[10] = v26;
  v28 = 0;
  do
  {
    v29 = *(&Folder::m_acMain + v28);
    Folder::m_acItem[v28++] = v29;
  }
  while ( v29 );
  v30 = &Folder::m_acItem[-1];
  do
    v31 = (v30++)[1];
  while ( v31 );
  v32 = dword_97B448;
  *(_DWORD *)v30 = dword_97B444;
  v33 = byte_97B44C;
  *((_DWORD *)v30 + 1) = v32;
  v30[8] = v33;
  v34 = 0;
  do
  {
    v35 = *(&Folder::m_acMain + v34);
    *(&Folder::m_acCharacter + v34++) = v35;
  }
  while ( v35 );
  v36 = &Folder::m_acCharacter - 1;
  do
    v37 = (v36++)[1];
  while ( v37 );
  v38 = dword_97B454;
  *(_DWORD *)v36 = dword_97B450;
  v39 = byte_97B458;
  *((_DWORD *)v36 + 1) = v38;
  v36[8] = v39;
  v40 = 0;
  do
  {
    v41 = *(&Folder::m_acMain + v40);
    *(&Folder::m_acSystem + v40++) = v41;
  }
  while ( v41 );
  v42 = &Folder::m_acSystem - 1;
  do
    v43 = (v42++)[1];
  while ( v43 );
  v44 = dword_97B460;
  *(_DWORD *)v42 = dword_97B45C;
  v45 = word_97B464;
  *((_DWORD *)v42 + 1) = v44;
  LOBYTE(v44) = byte_97B466;
  *((_WORD *)v42 + 4) = v45;
  v42[10] = v44;
  v46 = 0;
  do
  {
    v47 = *(&Folder::m_acMain + v46);
    *(&Folder::m_acEffect + v46++) = v47;
  }
  while ( v47 );
  v48 = &Folder::m_acEffect - 1;
  do
    v49 = (v48++)[1];
  while ( v49 );
  v50 = dword_97B46C;
  *(_DWORD *)v48 = dword_97B468;
  v51 = word_97B470;
  *((_DWORD *)v48 + 1) = v50;
  LOBYTE(v50) = byte_97B472;
  *((_WORD *)v48 + 4) = v51;
  v48[10] = v50;
  v52 = 0;
  do
  {
    v53 = *(&Folder::m_acMain + v52);
    *(&Folder::m_acCtrl + v52++) = v53;
  }
  while ( v53 );
  v54 = &Folder::m_acCtrl - 1;
  do
    v55 = (v54++)[1];
  while ( v55 );
  v56 = dword_97B478;
  *(_DWORD *)v54 = dword_97B474;
  v57 = byte_97B47C;
  *((_DWORD *)v54 + 1) = v56;
  v54[8] = v57;
  v58 = 0;
  do
  {
    v59 = Folder::m_acItem[v58];
    *(&Folder::m_acMHObj + v58++) = v59;
  }
  while ( v59 );
  v60 = &Folder::m_acMHObj - 1;
  do
    v61 = (v60++)[1];
  while ( v61 );
  v62 = off_97B484;
  *(_DWORD *)v60 = dword_97B480;
  *((_DWORD *)v60 + 1) = v62;
  v63 = 0;
  do
  {
    v64 = Folder::m_acMap[v63];
    Folder::m_acMHMap[v63++] = v64;
  }
  while ( v64 );
  v65 = &Folder::m_acMHMap[-1];
  do
    v66 = (v65++)[1];
  while ( v66 );
  v67 = dword_97B48C;
  *(_DWORD *)v65 = dword_97B488;
  v68 = byte_97B490;
  *((_DWORD *)v65 + 1) = v67;
  v65[8] = v68;
  v69 = 0;
  do
  {
    v70 = *(&Folder::m_acMain + v69);
    *(&Folder::m_acSkin + v69++) = v70;
  }
  while ( v70 );
  v71 = &Folder::m_acSkin - 1;
  do
    v72 = (v71++)[1];
  while ( v72 );
  v73 = word_97B498;
  *(_DWORD *)v71 = dword_97B494;
  *((_WORD *)v71 + 2) = v73;
  v74 = 0;
  do
  {
    v75 = *(&Folder::m_acMain + v74);
    *(&Folder::m_acLuaScript + v74++) = v75;
  }
  while ( v75 );
  v76 = &Folder::m_acLuaScript - 1;
  do
    v77 = (v76++)[1];
  while ( v77 );
  v78 = dword_97B4A0;
  *(_DWORD *)v76 = dword_97B49C;
  v79 = word_97B4A4;
  *((_DWORD *)v76 + 1) = v78;
  LOBYTE(v78) = byte_97B4A6;
  *((_WORD *)v76 + 4) = v79;
  v76[10] = v78;
  Folder::m_bInit = 1;
  v82 = -1;
  Argv::_Argv(&kArgv);
}
// 97B418: using guessed type int dword_97B418;
// 97B41C: using guessed type int dword_97B41C;
// 97B420: using guessed type char byte_97B420;
// 97B424: using guessed type int dword_97B424;
// 97B428: using guessed type int (__thiscall *off_97B428)(GuildNpcMenuWin *this, int iYOff);
// 97B42C: using guessed type int dword_97B42C;
// 97B430: using guessed type int dword_97B430;
// 97B434: using guessed type __int16 word_97B434;
// 97B438: using guessed type int dword_97B438;
// 97B43C: using guessed type int dword_97B43C;
// 97B440: using guessed type __int16 word_97B440;
// 97B442: using guessed type char byte_97B442;
// 97B444: using guessed type int dword_97B444;
// 97B448: using guessed type int dword_97B448;
// 97B44C: using guessed type char byte_97B44C;
// 97B450: using guessed type int dword_97B450;
// 97B454: using guessed type int dword_97B454;
// 97B458: using guessed type char byte_97B458;
// 97B45C: using guessed type int dword_97B45C;
// 97B460: using guessed type int dword_97B460;
// 97B464: using guessed type __int16 word_97B464;
// 97B466: using guessed type char byte_97B466;
// 97B468: using guessed type int dword_97B468;
// 97B46C: using guessed type int dword_97B46C;
// 97B470: using guessed type __int16 word_97B470;
// 97B472: using guessed type char byte_97B472;
// 97B474: using guessed type int dword_97B474;
// 97B478: using guessed type int dword_97B478;
// 97B47C: using guessed type char byte_97B47C;
// 97B480: using guessed type int dword_97B480;
// 97B484: using guessed type int (__thiscall *off_97B484)(GuildNpcMenuWin *this, int iYOff);
// 97B488: using guessed type int dword_97B488;
// 97B48C: using guessed type int dword_97B48C;
// 97B490: using guessed type char byte_97B490;
// 97B494: using guessed type int dword_97B494;
// 97B498: using guessed type __int16 word_97B498;
// 97B49C: using guessed type int dword_97B49C;
// 97B4A0: using guessed type int dword_97B4A0;
// 97B4A4: using guessed type __int16 word_97B4A4;
// 97B4A6: using guessed type char byte_97B4A6;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041B3B0) --------------------------------------------------------
bool __cdecl Font::IsInit()
{
  return Font::ms_bInit;
}
// A95622: using guessed type char Font__ms_bInit;

//----- (0041B3C0) --------------------------------------------------------
Font::FontDefine *__cdecl Font::GetFontDefine(Font::Type eType)
{
  int v1; // esi@1
  Font::FontDefine *result; // eax@6

  v1 = 13 * eType;
  if ( !strcmp((const char *)dword_A95648[13 * eType], (const char *)&unk_97B4CB) )
    dword_A95648[v1] = (int)Font::ms_acFontFaceName;
  if ( Font::ms_bUsePrivateFont && eType == 1 )
  {
    dword_A9567C = (int)"verdanab";
    dword_A9565C = 14;
    dword_A95664 = 400;
  }
  result = (Font::FontDefine *)&Font::ms_kFontDefine[v1];
  if ( Font::ms_bShineFontLoadFailed )
    dword_A95648[v1] = (int)"verdanab";
  return result;
}
// A7477C: using guessed type char Font__ms_bUsePrivateFont;
// A95620: using guessed type char Font__ms_bShineFontLoadFailed;
// A95628: using guessed type int Font__ms_kFontDefine[];
// A95648: using guessed type int dword_A95648[];
// A9565C: using guessed type int dword_A9565C;
// A95664: using guessed type int dword_A95664;
// A9567C: using guessed type int dword_A9567C;

//----- (0041B460) --------------------------------------------------------
int __stdcall Font::EnumFontsProc(tagLOGFONTA *lplf, tagTEXTMETRICA *lptm, unsigned int dwType, int lpData)
{
  bool v4; // zf@1
  int result; // eax@1

  v4 = strncmp(lplf->lfFaceName, Font::ms_acFontFaceName, strlen(Font::ms_acFontFaceName)) == 0;
  result = 1;
  if ( v4 )
  {
    Font::ms_bUserFontLoadSuccess = 1;
    Font::ms_bUsePrivateFont = 0;
  }
  return result;
}
// A7477C: using guessed type char Font__ms_bUsePrivateFont;
// A95621: using guessed type char Font__ms_bUserFontLoadSuccess;

//----- (0041B4B0) --------------------------------------------------------
void __thiscall Font::FontDefine::FontDefine(Font::FontDefine *this)
{
  this->Height = 12;
  this->Width = 0;
  this->Weight = 400;
  this->Italic = 0;
  this->CharSet = 1;
  this->OutputPrecision = 0;
  this->Quality = 0;
  this->PitchAndFamily = 0;
  this->pFacename = (const char *)&unk_97B51B;
  this->dwOutline = 0;
}

//----- (0041B4F0) --------------------------------------------------------
void __thiscall Font::FontDefine::FontDefine(Font::FontDefine *this, const char *pName, unsigned int height, unsigned int weight)
{
  this->Width = 0;
  this->Italic = 0;
  this->OutputPrecision = 0;
  this->Quality = 0;
  this->PitchAndFamily = 0;
  this->dwOutline = 0;
  this->pFacename = pName;
  this->CharSet = 1;
  this->Height = height;
  this->Weight = weight;
}

//----- (0041B530) --------------------------------------------------------
void __thiscall Font::FontDefine::FontDefine(Font::FontDefine *this, FontSet *pkFontSet)
{
  int v2; // esi@1

  this->Height = pkFontSet->FS_Size;
  this->Width = 0;
  this->Weight = pkFontSet->FS_Bold != 0 ? 700 : 400;
  v2 = pkFontSet->FS_Italic;
  this->OutputPrecision = 0;
  this->Quality = 0;
  this->PitchAndFamily = 0;
  this->Italic = v2;
  this->CharSet = 1;
  this->pFacename = pkFontSet->FS_FontName;
  this->dwOutline = pkFontSet->FS_Outline;
  this->R = pkFontSet->FS_R;
  this->G = pkFontSet->FS_G;
  this->B = pkFontSet->FS_B;
}

//----- (0041B5A0) --------------------------------------------------------
void __cdecl Font::Termiante()
{
  unsigned int v0; // edi@1
  int v1; // esi@2
  char *v2; // eax@11
  char *v3; // eax@13
  char *v4; // eax@15
  char *v5; // eax@17
  char *v6; // eax@21

  v0 = 0;
  do
  {
    v1 = Font::ms_spFont[v0];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      Font::ms_spFont[v0] = 0;
    }
    ++v0;
  }
  while ( v0 < 12 );
  Font::ms_bInit = 0;
  if ( Font::ms_bUsePrivateFont == 1 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v2 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED);
    RemoveFontResourceA(v2);
    if ( !Folder::m_bInit )
      Folder::Init();
    v3 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED);
    DeleteFileA(v3);
    if ( !Folder::m_bInit )
      Folder::Init();
    v4 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED_BOLD);
    RemoveFontResourceA(v4);
    if ( !Folder::m_bInit )
      Folder::Init();
    v5 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED_BOLD);
    DeleteFileA(v5);
  }
  if ( Font::ms_bUserFontLoadSuccess == 1 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v6 = Folder::Merge(&Folder::m_acSkin, Font::ms_acUserFont);
    RemoveFontResourceA(v6);
  }
}
// A7477C: using guessed type char Font__ms_bUsePrivateFont;
// A9541C: using guessed type char Folder__m_bInit;
// A95621: using guessed type char Font__ms_bUserFontLoadSuccess;
// A95622: using guessed type char Font__ms_bInit;
// A95898: using guessed type int Font__ms_spFont[];

//----- (0041B6C0) --------------------------------------------------------
void __cdecl Font::EncryptFontFile()
{
  void *v0; // eax@1
  Encrypt::IEncryptMethod *v1; // eax@2
  Encrypt::IEncryptMethod *v2; // esi@2
  char *v3; // eax@6
  char *v4; // eax@9
  char *v5; // eax@12
  char *v6; // eax@14
  char *v7; // eax@17
  char *v8; // eax@20
  Encrypt::EncryptStream kEnc; // [sp+0h] [bp-1Ch]@1
  void *v10; // [sp+Ch] [bp-10h]@1
  int v11; // [sp+18h] [bp-4h]@1

  Encrypt::Stream::Stream(&kEnc.m_kOriginal.baseclass_0);
  kEnc.m_kOriginal.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::FileStream::_vftable_;
  v11 = 0;
  v0 = operator new(0x24u);
  v10 = v0;
  LOBYTE(v11) = 1;
  if ( v0 )
  {
    Encrypt::EncryptMethodXor::EncryptMethodXor((Encrypt::EncryptMethodXor *)v0, Font::ms_pcEncryptSeed);
    v2 = v1;
  }
  else
  {
    v2 = 0;
  }
  LOBYTE(v11) = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ORIGINAL);
  if ( Encrypt::EncryptStream::LoadOriginal(&kEnc, v3) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v4 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ENCRYPTED);
    Encrypt::EncryptStream::SaveEncrypted(&kEnc, v4, v2);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ORIGINAL);
  DeleteFileA(v5);
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ORIGINAL_BOLD);
  if ( Encrypt::EncryptStream::LoadOriginal(&kEnc, v6) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v7 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ENCRYPTED_BOLD);
    Encrypt::EncryptStream::SaveEncrypted(&kEnc, v7, v2);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ORIGINAL_BOLD);
  DeleteFileA(v8);
  operator delete(v2);
  v11 = -1;
  Encrypt::Stream::_Stream(&kEnc.m_kOriginal.baseclass_0);
}
// 97B60C: using guessed type int (__thiscall *Encrypt__FileStream___vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041B860) --------------------------------------------------------
PgFont *__cdecl Font::Create(Font::Type eType)
{
  Font::FontDefine *v1; // esi@1
  void *v2; // eax@1
  int v3; // edi@1
  int v4; // eax@2
  PgFont *result; // eax@4

  v1 = Font::GetFontDefine(eType);
  v2 = operator new(0x184u);
  v3 = 0;
  if ( v2 )
  {
    PgFont::PgFont((PgFont *)v2);
    v3 = v4;
  }
  if ( CSpFont::Create(
         (CSpFont *)v3,
         (char *)v1->pFacename,
         v1->Height,
         v1->Width,
         v1->Weight,
         v1->Italic,
         v1->CharSet,
         v1->OutputPrecision,
         v1->Quality,
         v1->PitchAndFamily,
         v1->dwOutline,
         0x200u,
         5u) )
  {
    *(_DWORD *)(v3 + 384) = Font::ms_kFontDefine[13 * eType];
    result = (PgFont *)v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95628: using guessed type int Font__ms_kFontDefine[];

//----- (0041B930) --------------------------------------------------------
bool __cdecl Font::ParseIniFile()
{
  char *v0; // eax@3
  _iobuf *v1; // eax@3
  _iobuf *v2; // esi@3
  int iUsePrivateFont; // [sp+0h] [bp-108h]@7
  char acFileBuff[256]; // [sp+4h] [bp-104h]@4
  unsigned int v6; // [sp+104h] [bp-4h]@1
  int v7; // [sp+108h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = Folder::Merge(&Folder::m_acSystem, "font.ini");
  v1 = fopen(v0, "r");
  v2 = v1;
  if ( !v1 )
    return 0;
  if ( !fgets(acFileBuff, 256, v1) )
  {
    fclose(v2);
    return 0;
  }
  fclose(v2);
  sscanf(acFileBuff, "%s %d");
  PgUtil::ChangeCharInText(Font::ms_acFontFaceName, 35, 32, strlen(Font::ms_acFontFaceName));
  Font::ms_bUsePrivateFont = iUsePrivateFont != 0;
  return 1;
}
// A7477C: using guessed type char Font__ms_bUsePrivateFont;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041BA20) --------------------------------------------------------
bool __cdecl Font::IsUserFont()
{
  char *v0; // eax@3
  HANDLE v1; // esi@3
  bool result; // al@4
  char *v3; // eax@6
  char v4; // cl@7
  int v5; // ebx@8
  unsigned int v6; // esi@9
  void *acTTF[8]; // [sp+0h] [bp-168h]@1
  void *hFind; // [sp+20h] [bp-148h]@3
  _WIN32_FIND_DATAA FindData; // [sp+24h] [bp-144h]@3
  unsigned int v10; // [sp+164h] [bp-4h]@1
  int v11; // [sp+168h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  acTTF[0] = ".ttf";
  acTTF[1] = ".ttF";
  acTTF[2] = ".tTf";
  acTTF[3] = ".tTF";
  acTTF[4] = ".Ttf";
  acTTF[5] = ".TtF";
  acTTF[6] = ".TTf";
  acTTF[7] = ".TTF";
  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = Folder::Merge(&Folder::m_acSkin, "*");
  v1 = FindFirstFileA(v0, &FindData);
  hFind = v1;
  if ( v1 == (HANDLE)-1 )
  {
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      if ( FindData.dwFileAttributes != 16 )
      {
        v3 = FindData.cFileName;
        do
          v4 = *v3++;
        while ( v4 );
        v5 = v3 - &FindData.cFileName[1];
        if ( (signed int)(v3 - &FindData.cFileName[1]) >= 4 )
          break;
      }
LABEL_13:
      if ( !FindNextFileA(v1, &FindData) )
        goto LABEL_16;
    }
    v6 = 0;
    while ( strncmp((const char *)acTTF[v6], (const char *)&FindData.dwReserved1 + v5, 4u) )
    {
      ++v6;
      if ( v6 >= 8 )
      {
        v1 = hFind;
        goto LABEL_13;
      }
    }
    strncpy(Font::ms_acFontFaceName, FindData.cFileName, v5 - 4);
    v1 = hFind;
LABEL_16:
    FindClose(v1);
    sprintf(Font::ms_acUserFont, "%s.ttf");
    result = strlen(Font::ms_acFontFaceName) > 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041BBA0) --------------------------------------------------------
PgFont *__cdecl Font::Get(Font::Type eType)
{
  PgFont *v1; // eax@2
  int v2; // edi@2
  int v3; // ebx@2
  PgFont *result; // eax@9
  PgFont *v5; // eax@10
  int v6; // edi@10
  int v7; // ebx@10

  if ( !Font::ms_spFont[eType] )
  {
    v1 = Font::Create(eType);
    v2 = Font::ms_spFont[eType];
    v3 = (int)v1;
    if ( (PgFont *)v2 != v1 )
    {
      if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      Font::ms_spFont[eType] = v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)(v3 + 4));
    }
  }
  result = (PgFont *)Font::ms_spFont[eType];
  if ( !result )
  {
    Font::ms_bShineFontLoadFailed = 1;
    v5 = Font::Create(eType);
    v6 = Font::ms_spFont[eType];
    v7 = (int)v5;
    if ( (PgFont *)v6 != v5 )
    {
      if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      Font::ms_spFont[eType] = v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)(v7 + 4));
    }
    result = (PgFont *)Font::ms_spFont[eType];
  }
  return result;
}
// A95620: using guessed type char Font__ms_bShineFontLoadFailed;
// A95898: using guessed type int Font__ms_spFont[];

//----- (0041BC70) --------------------------------------------------------
FontSet *__cdecl Font::FontInit()
{
  char *v0; // eax@3
  FontSet *result; // eax@4
  signed int v2; // eax@5
  void *v3; // edi@6
  FontSet *v4; // eax@7
  int v5; // edx@7
  int v6; // ecx@7
  int v7; // ecx@7
  int v8; // edx@7
  int v9; // ecx@7
  int v10; // edx@7
  int v11; // edx@7
  int v12; // ecx@7
  int v13; // ecx@7
  int v14; // edx@7
  int v15; // ecx@7
  int v16; // edx@7
  int v17; // [sp+4h] [bp-34h]@6
  int v18; // [sp+8h] [bp-30h]@6
  int v19; // [sp+Ch] [bp-2Ch]@6
  int v20; // [sp+10h] [bp-28h]@6
  int v21; // [sp+14h] [bp-24h]@6
  int v22; // [sp+18h] [bp-20h]@6
  int v23; // [sp+1Ch] [bp-1Ch]@6
  int v24; // [sp+20h] [bp-18h]@6
  char *v25; // [sp+24h] [bp-14h]@6
  int v26; // [sp+28h] [bp-10h]@6
  int v27; // [sp+2Ch] [bp-Ch]@7
  int v28; // [sp+30h] [bp-8h]@7
  int v29; // [sp+34h] [bp-4h]@7

  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = Folder::Merge(&Folder::m_acSystem, "FontSet.shn");
  if ( ITableBase<FontSet_FontSetTab>::Load(v0, 1) )
  {
    v2 = (signed int)Font::ms_kFontDefine;
    do
    {
      v3 = (void *)v2;
      v2 += 52;
      v17 = 12;
      v18 = 0;
      v19 = 400;
      v20 = 0;
      v21 = 1;
      v22 = 0;
      v23 = 0;
      v24 = 0;
      v25 = (char *)&unk_97B51B;
      v26 = 0;
      memcpy(v3, &v17, 0x34u);
    }
    while ( v2 < (signed int)Font::ms_spFont );
    v18 = 0;
    v20 = 0;
    v21 = 1;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = "verdana";
    v17 = 14;
    v19 = 400;
    memcpy(Font::ms_kFontDefine, &v17, 0x34u);
    v17 = 12;
    v18 = 0;
    v20 = 0;
    v21 = 1;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B4E7;
    v19 = 700;
    memcpy(&dword_A9565C, &v17, 0x34u);
    v18 = 0;
    v20 = 0;
    v21 = 1;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B4F6;
    v17 = 14;
    v19 = 400;
    memcpy(&unk_A95690, &v17, 0x34u);
    v18 = 0;
    v20 = 0;
    v21 = 1;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B4F7;
    v17 = 15;
    v19 = 700;
    memcpy(&unk_A956C4, &v17, 0x34u);
    v18 = 0;
    v20 = 0;
    v21 = 1;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B506;
    v17 = 15;
    v19 = 400;
    memcpy(&unk_A956F8, &v17, 0x34u);
    v18 = 0;
    v20 = 0;
    v21 = 1;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B507;
    v17 = 24;
    v19 = 400;
    memcpy(&unk_A9572C, &v17, 0x34u);
    v21 = 1;
    v18 = 0;
    v20 = 0;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B50E;
    v17 = 14;
    v19 = 400;
    memcpy(&unk_A95794, &v17, 0x34u);
    v21 = 1;
    v19 = 700;
    v18 = 0;
    v20 = 0;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B50F;
    v17 = 24;
    memcpy(&unk_A95760, &v17, 0x34u);
    v21 = 1;
    v19 = 700;
    dword_A95784 = 1;
    v18 = 0;
    v20 = 0;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B519;
    v17 = 16;
    memcpy(&unk_A957C8, &v17, 0x34u);
    dword_A957EC = 1;
    v21 = 1;
    v17 = 13;
    v19 = 700;
    v18 = 0;
    v20 = 0;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v26 = 0;
    v25 = (char *)&unk_97B51A;
    memcpy(&unk_A957FC, &v17, 0x34u);
    dword_A95820 = 1;
    v4 = FontSetTab::GetByFSIndex("FS_NamePanel");
    v5 = -(v4->FS_Bold != 0);
    v17 = v4->FS_Size;
    v6 = v4->FS_Italic;
    v18 = 0;
    v19 = (v5 & 0x12C) + 400;
    v20 = v6;
    v21 = 1;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v7 = v4->FS_Outline;
    v25 = v4->FS_FontName;
    v8 = v4->FS_R;
    v26 = v7;
    v9 = v4->FS_G;
    v27 = v8;
    v10 = v4->FS_B;
    v28 = v9;
    v29 = v10;
    memcpy(&unk_A95830, &v17, 0x34u);
    result = FontSetTab::GetByFSIndex("FS_GM");
    v11 = -(result->FS_Bold != 0);
    v17 = result->FS_Size;
    v12 = result->FS_Italic;
    v19 = (v11 & 0x12C) + 400;
    v20 = v12;
    v13 = result->FS_Outline;
    v25 = result->FS_FontName;
    v14 = result->FS_R;
    v26 = v13;
    v15 = result->FS_G;
    v27 = v14;
    v16 = result->FS_B;
    v28 = v15;
    v18 = 0;
    v22 = 0;
    v23 = 0;
    v24 = 0;
    v21 = 1;
    v29 = v16;
    memcpy(&unk_A95864, &v17, 0x34u);
  }
  else
  {
    result = (FontSet *)MessageBoxA(0, "FontSet.shn InitError!!", "Application Initialize Error!", 0x10u);
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;
// A95628: using guessed type int Font__ms_kFontDefine[];
// A9565C: using guessed type int dword_A9565C;
// A95784: using guessed type int dword_A95784;
// A957EC: using guessed type int dword_A957EC;
// A95820: using guessed type int dword_A95820;
// A95898: using guessed type int Font__ms_spFont[];

//----- (0041C040) --------------------------------------------------------
bool __cdecl Font::Init()
{
  char *v0; // eax@4
  char *v1; // eax@6
  HDC__ *v2; // eax@6
  char *v3; // eax@10
  bool result; // al@11
  char *v5; // eax@14
  char *v6; // eax@16
  HANDLE v7; // esi@16
  char *v8; // eax@18
  char v9; // cl@19
  int v10; // eax@20
  char *v11; // eax@24
  Encrypt::IEncryptMethod *v12; // esi@27
  void *v13; // eax@27
  Encrypt::IEncryptMethod *v14; // eax@28
  char *v15; // eax@31
  char *v16; // eax@34
  char *v17; // eax@37
  char *v18; // eax@40
  char *v19; // eax@43
  char *v20; // eax@45
  char *v21; // eax@47
  char *v22; // eax@49
  Encrypt::EncryptStream kEnc; // [sp+4h] [bp-15Ch]@27
  _WIN32_FIND_DATAA FindData; // [sp+10h] [bp-150h]@16
  unsigned int v25; // [sp+150h] [bp-10h]@1
  int v26; // [sp+15Ch] [bp-4h]@27
  int v27; // [sp+160h] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  Font::FontInit();
  if ( Font::IsUserFont() )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v0 = Folder::Merge(&Folder::m_acSkin, Font::ms_acUserFont);
    RemoveFontResourceA(v0);
    if ( !Folder::m_bInit )
      Folder::Init();
    v1 = Folder::Merge(&Folder::m_acSkin, Font::ms_acUserFont);
    AddFontResourceA(v1);
    v2 = GetDC(0);
    EnumFontFamiliesA(v2, 0, Font::EnumFontsProc, 0);
  }
  if ( !Font::ms_bUserFontLoadSuccess )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v3 = Folder::Merge(&Folder::m_acSkin, Font::ms_acUserFont);
    RemoveFontResourceA(v3);
    if ( !Font::ParseIniFile() )
      goto LABEL_53;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acSystem, "verdana.ttf");
  AddFontResourceA(v5);
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acSystem, "*");
  v7 = FindFirstFileA(v6, &FindData);
  if ( v7 != (HANDLE)-1 )
  {
    do
    {
      if ( FindData.dwFileAttributes != 16 )
      {
        v8 = FindData.cFileName;
        do
          v9 = *v8++;
        while ( v9 );
        v10 = v8 - &FindData.cFileName[1];
        if ( v10 >= 4 )
        {
          if ( !_strnicmp(".ttf", (const char *)&FindData.dwReserved1 + v10, 4u) )
          {
            if ( !Folder::m_bInit )
              Folder::Init();
            v11 = Folder::Merge(&Folder::m_acSystem, FindData.cFileName);
            AddFontResourceA(v11);
          }
        }
      }
    }
    while ( FindNextFileA(v7, &FindData) );
    FindClose(v7);
    Font::ms_bInit = 1;
    Font::EncryptFontFile();
    SpScreenText::SetCamera(unk_B703D8);
    if ( Font::ms_bUsePrivateFont == 1 )
    {
      Encrypt::Stream::Stream(&kEnc.m_kOriginal.baseclass_0);
      kEnc.m_kOriginal.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::FileStream::_vftable_;
      v12 = 0;
      v26 = 0;
      v13 = operator new(0x24u);
      LOBYTE(v26) = 1;
      if ( v13 )
      {
        Encrypt::EncryptMethodXor::EncryptMethodXor((Encrypt::EncryptMethodXor *)v13, Font::ms_pcEncryptSeed);
        v12 = v14;
      }
      LOBYTE(v26) = 0;
      if ( !Folder::m_bInit )
        Folder::Init();
      v15 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ENCRYPTED);
      if ( Encrypt::EncryptStream::LoadEncrypted(&kEnc, v15, v12) )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v16 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED);
        Encrypt::EncryptStream::SaveOriginal(&kEnc, v16);
      }
      if ( !Folder::m_bInit )
        Folder::Init();
      v17 = Folder::Merge(&Folder::m_acSystem, ShineFontName::ENCRYPTED_BOLD);
      if ( Encrypt::EncryptStream::LoadEncrypted(&kEnc, v17, v12) )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v18 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED_BOLD);
        Encrypt::EncryptStream::SaveOriginal(&kEnc, v18);
      }
      operator delete(v12);
      v26 = -1;
      Encrypt::Stream::_Stream(&kEnc.m_kOriginal.baseclass_0);
      if ( !Folder::m_bInit )
        Folder::Init();
      v19 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED);
      RemoveFontResourceA(v19);
      if ( !Folder::m_bInit )
        Folder::Init();
      v20 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED);
      AddFontResourceA(v20);
      if ( !Folder::m_bInit )
        Folder::Init();
      v21 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED_BOLD);
      RemoveFontResourceA(v21);
      if ( !Folder::m_bInit )
        Folder::Init();
      v22 = Folder::Merge(&Folder::m_acSystem, ShineFontName::DECRYPTED_BOLD);
      AddFontResourceA(v22);
    }
    result = 1;
  }
  else
  {
LABEL_53:
    result = 0;
  }
  return result;
}
// 97B60C: using guessed type int (__thiscall *Encrypt__FileStream___vftable_)(void *p, char);
// A7477C: using guessed type char Font__ms_bUsePrivateFont;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A95621: using guessed type char Font__ms_bUserFontLoadSuccess;
// A95622: using guessed type char Font__ms_bInit;

//----- (0041C420) --------------------------------------------------------
void *__thiscall Encrypt::FileStream::_vector_deleting_destructor_(Encrypt::FileStream *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  Encrypt::Stream::_Stream(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0041C450) --------------------------------------------------------
void __stdcall _vector_constructor_iterator_(void *__t, unsigned int __s, int __n, void *(__thiscall *__f)(void *))
{
  int v4; // edi@1
  void *v5; // esi@2

  v4 = __n - 1;
  if ( __n - 1 >= 0 )
  {
    v5 = __t;
    do
    {
      __f(v5);
      v5 = (char *)v5 + __s;
      --v4;
    }
    while ( v4 >= 0 );
  }
}

//----- (0041C480) --------------------------------------------------------
void __cdecl PgUtil::ChangeCharInText(char *pcText, char cOld, char cNew, unsigned int uiLen)
{
  char *v4; // esi@1
  unsigned int v5; // edi@3
  signed int v6; // eax@8

  v4 = pcText;
  if ( pcText && *pcText )
  {
    v5 = uiLen;
    do
    {
      if ( !v5 )
        break;
      if ( *v4 == cOld )
        *v4 = cNew;
      if ( IsDBCSLeadByte(*v4) )
      {
        v4 += 2;
        v6 = 2;
      }
      else
      {
        ++v4;
        v6 = 1;
      }
      v5 -= v6;
    }
    while ( *v4 );
  }
}

//----- (0041C4D0) --------------------------------------------------------
char *__cdecl Folder::System()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return &Folder::m_acSystem;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041C4F0) --------------------------------------------------------
FontSet *__cdecl FontSetTab::GetByFSIndex(const char *pcIndex)
{
  int v1; // eax@1
  unsigned int v2; // edi@1
  void *v3; // eax@5
  const char *v4; // esi@5
  int v5; // edx@6
  char v6; // cl@7
  FontSet *result; // eax@10
  unsigned int v8; // [sp+Ch] [bp-4h]@2

  v1 = *(_DWORD *)(ITableBase<FontSet_FontSetTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v8 = *(_DWORD *)(v1 + 40);
  else
    v8 = 0;
  if ( v8 <= 0 )
  {
LABEL_10:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<FontSet_FontSetTab>::ms_pkTable + 4), v2);
      v4 = (const char *)v3;
      if ( v3 )
      {
        v5 = (int)((char *)v3 + 1);
        do
        {
          v6 = *(_BYTE *)v3;
          v3 = (char *)v3 + 1;
        }
        while ( v6 );
        if ( !strncmp(pcIndex, v4, (unsigned int)((char *)v3 - v5)) )
          break;
      }
      ++v2;
      if ( v2 >= v8 )
        goto LABEL_10;
    }
    result = (FontSet *)v4;
  }
  return result;
}
// A958C8: using guessed type int ITableBase_FontSet_FontSetTab___ms_pkTable;

//----- (0041C570) --------------------------------------------------------
void __thiscall FontSetTab::FontSetTab(FontSetTab *this)
{
  FontSetTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<FontSet,FontSetTab>Vtbl *)&ITableBase<FontSet_FontSetTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_FontSet_FontSetTab_::ITableBase_FontSet_FontSetTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<FontSet,FontSetTab>Vtbl *)&FontSetTab::_vftable_;
}
// 97B614: using guessed type int (__cdecl *ITableBase_FontSet_FontSetTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 97B624: using guessed type int (__cdecl *FontSetTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A958CC: using guessed type int _local static guard_;

//----- (0041C5B0) --------------------------------------------------------
void *__thiscall FontSetTab::_vector_deleting_destructor_(FontSetTab *this, unsigned int a2)
{
  FontSetTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<FontSet,FontSetTab>Vtbl *)&ITableBase<FontSet_FontSetTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97B614: using guessed type int (__cdecl *ITableBase_FontSet_FontSetTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0041C630) --------------------------------------------------------
bool __cdecl ITableBase<FontSet_FontSetTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<FontSet_FontSetTab>::ms_pkTable;
  if ( !ITableBase<FontSet_FontSetTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      FontSetTab::FontSetTab((FontSetTab *)v2);
    else
      v2 = 0;
    ITableBase<FontSet_FontSetTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<FontSet_FontSetTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<FontSet_FontSetTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 156 )
  {
    v5 = acFn;
    v6 = ITableBase<FontSet_FontSetTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<FontSet_FontSetTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A958C8: using guessed type int ITableBase_FontSet_FontSetTab___ms_pkTable;

//----- (0041C720) --------------------------------------------------------
void __thiscall ForumWin::ReGenPos(ForumWin *this)
{
  ForumWin *v1; // esi@1
  int v2; // eax@1
  unsigned int v3; // ecx@1

  v1 = this;
  v1->m_uiWebXPos = v1->m_uiPlaneWebXPos
                  + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1);
  v3 = v1->m_uiPlaneWebHeight;
  v1->m_uiWebYPos = v1->m_uiPlaneWebYPos + v2;
  v1->m_uiWebWidth = v1->m_uiPlaneWebWidth;
  v1->m_uiWebHeight = v3;
}

//----- (0041C770) --------------------------------------------------------
void __thiscall ForumWin::UpdateWebPos(ForumWin *this)
{
  ForumWin *v1; // esi@1
  tagRECT rect; // [sp+4h] [bp-14h]@3
  unsigned int v3; // [sp+14h] [bp-4h]@1
  int v4; // [sp+18h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  if ( IsWindow(this->m_hWebWindow) )
  {
    if ( v1->m_bOpen )
    {
      ForumWin::ReGenPos(v1);
      GetWindowRect(g_hMainWnd, &rect);
      MoveWindow(
        v1->m_hWebWindow,
        rect.left + v1->m_uiWebXPos,
        rect.top + v1->m_uiWebYPos,
        v1->m_uiWebWidth,
        v1->m_uiWebHeight,
        1);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0041C800) --------------------------------------------------------
void __thiscall ForumWin::OnWinClose(ForumWin *this)
{
  ForumWin *v1; // esi@1
  HWND__ *v2; // ST0C_4@1
  GameFrameWork *v3; // ecx@3

  v1 = this;
  v2 = this->m_hWebWindow;
  this->m_bOpen = 0;
  if ( !DestroyWindow(v2) )
    MessageBoxA(0, "Error", "Unable to close Forum Win!", 0);
  DestroyWindow(v1->m_hPopWebWindow);
  v3 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
  v1->m_hWebWindow = 0;
  GameFrameWork::CloseForumWin(v3);
}

//----- (0041C850) --------------------------------------------------------
void __thiscall ForumWin::UpdateMeWin(ForumWin *this, float fCurTime)
{
  ForumWin::UpdateWebPos(this);
}

//----- (0041C860) --------------------------------------------------------
bool __thiscall ForumWin::Create(ForumWin *this, PgFrameWork *pkFrameWork)
{
  ForumWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  PgSprData *v9; // eax@9
  NiNode *v10; // esi@12
  bool result; // al@16
  int v12; // ebx@17
  NiNode *v13; // esi@20
  PgFont *v14; // eax@24
  PgWinText *v15; // edi@24
  NiRefObjectVtbl *v16; // ST3C_4@24
  char *v17; // eax@24
  NiSourceTexture *v18; // edi@26
  PgSprData *v19; // eax@26
  PgWinSpr *v20; // eax@26
  PgSprData *v21; // eax@26
  PgWinSpr *v22; // eax@26
  PgSprData *v23; // edi@26
  unsigned int uiWidth; // [sp+38h] [bp-28h]@17
  unsigned int uiHeight; // [sp+3Ch] [bp-24h]@17
  NiPointer<NiTexturingProperty> spTexProp; // [sp+40h] [bp-20h]@4
  NiSourceTexture *pkTexture; // [sp+44h] [bp-1Ch]@7
  int uiLeft; // [sp+48h] [bp-18h]@9
  int uiTop; // [sp+4Ch] [bp-14h]@9
  NiPointer<NiNode> spNode; // [sp+50h] [bp-10h]@1
  int v31; // [sp+5Ch] [bp-4h]@1
  int iOffY; // [sp+68h] [bp+8h]@17

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v31 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ForumWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v31) = 1;
  if ( v8 )
    pkTexture = (NiSourceTexture *)v8[1].__vecDelDtor;
  else
    pkTexture = 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, pkTexture);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "ShopWin", 0) )
  {
    LOBYTE(v31) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v31 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = uiLeft;
  iOffY = uiTop;
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v14 = Font::Get(0);
    v15 = PgWinText::CreateWin(
            uiLeft - v12 + 55,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v14,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v15,
      1u);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v15,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = TextData3::Get(0x35468BADu);
    v16[118].__vecDelDtor((NiRefObject *)v15, (unsigned int)v17);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v15,
      0);
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "Panel01",
           &v2->m_uiPlaneWebXPos,
           &v2->m_uiPlaneWebYPos,
           &v2->m_uiPlaneWebWidth,
           &v2->m_uiPlaneWebHeight) )
    {
      v18 = pkTexture;
      v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
      v20 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - iOffY, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v20,
        1u);
      v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v18);
      v22 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - iOffY, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v22,
        1u);
      v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v18);
      PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(uiLeft - v12 + 155, uiTop - iOffY, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
      ((void (__thiscall *)(ForumWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      ForumWin::ReGenPos(v2);
      LOBYTE(v31) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v31 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v31) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v31 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v31) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v31 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type int Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041CC60) --------------------------------------------------------
void __thiscall ForumWin::OnCommand(ForumWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    ForumWin::OnWinClose(this);
}

//----- (0041CC80) --------------------------------------------------------
void __thiscall ForumWin::ForumWin(ForumWin *this)
{
  ForumWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ForumWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ForumWin::_vftable_;
  v1->m_ForumURL.baseclass_0._Mysize = 0;
  v1->m_ForumURL.baseclass_0._Myres = 15;
  v1->m_ForumURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_WORD *)&v1->m_bOpen = 0;
}
// 97B708: using guessed type int (__stdcall *ForumWin___vftable_)(int uiFlags);
// 97B724: using guessed type int (__thiscall *ForumWin___vftable_)(void *p, char);

//----- (0041CCC0) --------------------------------------------------------
void __thiscall ForumWin::_ForumWin(ForumWin *this)
{
  ForumWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ForumWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ForumWin::_vftable_;
  if ( this->m_ForumURL.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_ForumURL.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_ForumURL.baseclass_0._Myres = 15;
  v1->m_ForumURL.baseclass_0._Mysize = 0;
  v1->m_ForumURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97B708: using guessed type int (__stdcall *ForumWin___vftable_)(int uiFlags);
// 97B724: using guessed type int (__thiscall *ForumWin___vftable_)(void *p, char);

//----- (0041CD10) --------------------------------------------------------
ForumWin *__cdecl ForumWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ForumWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A4u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ForumWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ForumWin::_vftable_;
    *((_DWORD *)v2 + 103) = 15;
    *((_DWORD *)v2 + 102) = 0;
    *((_BYTE *)v2 + 392) = 0;
    *((_WORD *)v2 + 184) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ForumWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97B708: using guessed type int (__stdcall *ForumWin___vftable_)(int uiFlags);
// 97B724: using guessed type int (__thiscall *ForumWin___vftable_)(void *p, char);

//----- (0041CE70) --------------------------------------------------------
void __thiscall ForumWin::OnShowWin(ForumWin *this)
{
  ForumWin *v1; // esi@1
  int v2; // eax@1
  int v3; // ecx@1
  int v4; // edx@1
  int v5; // ebx@1
  const char *v6; // edi@1
  HWND__ *v7; // edi@3
  int v8; // ebx@4
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // edx@7
  int v10; // edx@7
  int nWidth; // [sp+Ch] [bp-30h]@1
  int Y; // [sp+10h] [bp-2Ch]@1
  NiRect<int> kRect; // [sp+14h] [bp-28h]@7
  unsigned int uiPosY; // [sp+24h] [bp-18h]@1
  tagRECT WindowRect; // [sp+28h] [bp-14h]@1
  unsigned int v16; // [sp+38h] [bp-4h]@1
  int v17; // [sp+3Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v1 = this;
  v2 = this->m_uiWebYPos;
  v3 = this->m_uiWebWidth;
  v4 = v1->m_uiWebHeight;
  v5 = v1->m_uiWebXPos;
  Y = v2;
  WindowRect.top = v2;
  nWidth = v3;
  uiPosY = v4;
  WindowRect.left = v5;
  WindowRect.right = v3;
  WindowRect.bottom = v4;
  AdjustWindowRectEx(&WindowRect, 0x40000000u, 0, 0);
  v6 = (const char *)&v1->m_ForumURL;
  v1->m_hWebWindow = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v1->m_ForumURL,
    "http://fiesta.gamigo.com/eu/forum/",
    0x22u);
  if ( v1->m_ForumURL.baseclass_0._Myres >= 0x10 )
    v6 = *(const char **)v6;
  v7 = CreateWindowExA(0, "WebCtrl32", v6, 0x90000000u, v5, Y, nWidth, uiPosY, g_hMainWnd, 0, g_hMainInstance, 0);
  ShowWindow(v7, 5);
  v1->m_hWebWindow = v7;
  if ( IsWindow(v7) )
  {
    ShowWindow(v1->m_hWebWindow, 5);
    v8 = 0;
  }
  else
  {
    v8 = 0;
    if ( NiMessageBox::ms_pfnMessageBox )
      NiMessageBox::ms_pfnMessageBox("CreateWindow Fail", byte_97B642, 0);
  }
  v9 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
  v1->m_bOpen = 1;
  kRect.m_left = v8;
  kRect.m_right = v8;
  kRect.m_top = v8;
  kRect.m_bottom = v8;
  v9(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    (unsigned int)&kRect);
  v10 = kRect.m_bottom - kRect.m_top;
  uiPosY = v8;
  if ( PgWin::ms_uiScreenWidth >= kRect.m_right - kRect.m_left && PgWin::ms_uiScreenHeight >= v10 )
  {
    v8 = (PgWin::ms_uiScreenWidth - (kRect.m_right - kRect.m_left)) >> 1;
    uiPosY = (PgWin::ms_uiScreenHeight - v10) >> 1;
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
    (NiRefObject *)v1,
    v8);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v1,
    uiPosY);
  SetFocus(g_hMainWnd);
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);

//----- (0041D000) --------------------------------------------------------
HWND__ *__cdecl CreateWebWindow(HWND__ *hParent, HINSTANCE__ *hInstance, const char *acWebAddr, tagRECT *rkRect, PgWin *pkWin)
{
  HWND__ *v5; // esi@1
  PgFrameWork *v6; // eax@3

  v5 = CreateWindowExA(
         0,
         "WebCtrl32",
         acWebAddr,
         0x90000000u,
         rkRect->left,
         rkRect->top,
         rkRect->right,
         rkRect->bottom,
         hParent,
         0,
         hInstance,
         0);
  if ( GameFrameWork::ms_bSpawnApps == 1 )
  {
    if ( pkWin )
    {
      v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v6 )
        GameFrameWork::AddWebList(
          (GameFrameWork *)v6,
          (std::pair<HWND__ *,PgWin *>)__PAIR__((unsigned int)pkWin, (unsigned int)v5));
    }
  }
  ShowWindow(v5, 5);
  return v5;
}
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (0041D080) --------------------------------------------------------
void *__thiscall ForumWin::_scalar_deleting_destructor_(ForumWin *this, unsigned int a2)
{
  ForumWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ForumWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ForumWin::_vftable_;
  if ( this->m_ForumURL.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_ForumURL.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_ForumURL.baseclass_0._Myres = 15;
  v2->m_ForumURL.baseclass_0._Mysize = 0;
  v2->m_ForumURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97B708: using guessed type int (__stdcall *ForumWin___vftable_)(int uiFlags);
// 97B724: using guessed type int (__thiscall *ForumWin___vftable_)(void *p, char);

//----- (0041D0F0) --------------------------------------------------------
void __thiscall GuildEmblemIcon::GuildEmblemIcon(GuildEmblemIcon *this)
{
  GuildEmblemIcon *v1; // esi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->m_pkFrameWork = 0;
  v1->m_bInputEmblem = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildEmblemIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildEmblemIcon::_vftable_;
}
// 97B968: using guessed type int (__stdcall *GuildEmblemIcon___vftable_)(int uiFlags);
// 97B984: using guessed type int (__thiscall *GuildEmblemIcon___vftable_)(void *p, char);

//----- (0041D120) --------------------------------------------------------
void __thiscall GuildEmblemIcon::_GuildEmblemIcon(GuildEmblemIcon *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildEmblemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildEmblemIcon::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
}
// 97B968: using guessed type int (__stdcall *GuildEmblemIcon___vftable_)(int uiFlags);
// 97B984: using guessed type int (__thiscall *GuildEmblemIcon___vftable_)(void *p, char);

//----- (0041D140) --------------------------------------------------------
unsigned int __thiscall GuildEmblemIcon::GetEmblemIconIndex(GuildEmblemIcon *this)
{
  return this->m_nIconIndex;
}

//----- (0041D150) --------------------------------------------------------
void __thiscall GuildEmblemIcon::SetSelectEmblem(GuildEmblemIcon *this, bool bInput)
{
  this->m_bInputEmblem = bInput;
}

//----- (0041D160) --------------------------------------------------------
bool __thiscall GuildEmblemIcon::IsSelectEmblemIcon(GuildEmblemIcon *this, const char *nFileNo, const char *nIconNo)
{
  return (unsigned __int8)*nFileNo < 0xFFu && (unsigned __int8)*nIconNo < 0xFFu;
}

//----- (0041D180) --------------------------------------------------------
bool __thiscall GuildEmblemIcon::SetEmblemIcon(GuildEmblemIcon *this, const char *nFileNo, const char *nIconNo, bool bShow)
{
  GuildEmblemIcon *v4; // esi@1
  bool result; // al@3
  NiSourceTexture *v6; // eax@4
  char pFilePath[256]; // [sp+24h] [bp-104h]@4
  unsigned int v8; // [sp+124h] [bp-4h]@1
  int v9; // [sp+128h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v4 = this;
  if ( (unsigned __int8)*nFileNo < 0xFFu && (unsigned __int8)*nIconNo < 0xFFu )
  {
    sprintf(pFilePath, "GuildEmblem%03d");
    v6 = IconMgr::GetTexturePng(pFilePath);
    if ( v6 )
    {
      ((void (__thiscall *)(GuildEmblemIcon *, NiSourceTexture *, _DWORD, signed int, signed int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
        v4,
        v6,
        (unsigned __int8)*nIconNo,
        32,
        32);
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v4,
        bShow);
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v4,
        bShow);
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor(
        (NiRefObject *)v4,
        COERCE_UNSIGNED_INT(0.0));
      result = 1;
    }
    else
    {
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v4,
        0);
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v4,
        0);
      result = 0;
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v4,
      0);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0041D290) --------------------------------------------------------
void __thiscall GuildEmblemIcon::UpdateMeWin(GuildEmblemIcon *this, float fCurTime)
{
  if ( this->m_bInputEmblem )
    IconWin::SelectIcon(&this->baseclass_0);
}

//----- (0041D2B0) --------------------------------------------------------
void __thiscall GuildEmblemIcon::DoAction(GuildEmblemIcon *this)
{
  GuildEmblemIcon *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_nIconIndex);
}

//----- (0041D2E0) --------------------------------------------------------
bool __thiscall GuildEmblemIcon::Create(GuildEmblemIcon *this, int iXPos, int iYPos, unsigned int nIconIndex, PgWin *pkParent, PgFrameWork *pkFrameWork, unsigned int uiWidth, unsigned int uiHeight)
{
  NiAVObject *v8; // esi@1
  bool result; // al@1
  NiProperty *v10; // edi@2
  void *v11; // eax@3
  NiProperty *v12; // eax@4

  v8 = (NiAVObject *)this;
  this->m_pkFrameWork = pkFrameWork;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, uiWidth, uiHeight, pkParent, 0, 0);
  if ( result )
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v8->baseclass_0.baseclass_0.baseclass_0.vfptr[147].__vecDelDtor)(
      v8,
      uiWidth,
      uiHeight,
      "GuildEmblemPick");
    v8[2].m_pkParent = (NiNode *)nIconIndex;
    v10 = NiAVObject::GetProperty(v8, 3);
    if ( !v10 )
    {
      v11 = operator new(0x60u);
      if ( v11 )
        NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v11);
      else
        v12 = 0;
      v10 = v12;
      NiAVObject::AttachProperty(v8, v12);
    }
    *(float *)&v10[2].baseclass_0.m_spControllers.m_pObject = 1.0;
    *(float *)&v10[2].baseclass_0.m_ppkExtra = 1.0;
    result = 1;
    ++v10[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    *(float *)&v10[2].baseclass_0.m_uiExtraDataSize = 1.0;
  }
  return result;
}

//----- (0041D3E0) --------------------------------------------------------
void __thiscall GuildEmblemIcon::SetAlpha(GuildEmblemIcon *this, const float *fAlpha)
{
  NiAVObject *v2; // edi@1
  NiProperty *v3; // esi@1
  void *v4; // eax@2
  NiProperty *v5; // eax@3
  double v6; // st7@6

  v2 = (NiAVObject *)this;
  v3 = NiAVObject::GetProperty(
         &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
         3);
  if ( !v3 )
  {
    v4 = operator new(0x60u);
    if ( v4 )
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v4);
    else
      v5 = 0;
    v3 = v5;
    NiAVObject::AttachProperty(v2, v5);
  }
  v6 = *fAlpha;
  ++v3[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v3[3].baseclass_0.baseclass_0.baseclass_0.vfptr = v6;
}

//----- (0041D470) --------------------------------------------------------
GuildEmblemIcon *__cdecl GuildEmblemIcon::CreateWin(int iXPos, int iYPos, unsigned int nIconIndex, PgWin *pkParent, PgFrameWork *pkFrameWork, unsigned int uiWidth, unsigned int uiHeight)
{
  void *v7; // eax@1
  void *v8; // esi@1
  PgWin *v9; // edi@8
  GuildEmblemIcon *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x188u);
  v8 = v7;
  result.m_pObject = (PgWin *)v7;
  v12 = 0;
  if ( v7 )
  {
    IconWin::IconWin((IconWin *)v7);
    *(_DWORD *)v8 = &GuildEmblemIcon::_vftable_;
    *((_DWORD *)v8 + 58) = &GuildEmblemIcon::_vftable_;
    *((_DWORD *)v8 + 95) = 0;
    *((_BYTE *)v8 + 388) = 0;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)v8 + 1);
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *, PgFrameWork *, unsigned int, unsigned int))(*(_DWORD *)v8 + 608))(
                          v8,
                          iXPos,
                          iYPos,
                          nIconIndex,
                          pkParent,
                          pkFrameWork,
                          uiWidth,
                          uiHeight) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = (GuildEmblemIcon *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}
// 97B968: using guessed type int (__stdcall *GuildEmblemIcon___vftable_)(int uiFlags);
// 97B984: using guessed type int (__thiscall *GuildEmblemIcon___vftable_)(void *p, char);

//----- (0041D5D0) --------------------------------------------------------
NiRTTI *__thiscall PgWinBut::GetRTTI(PgWinBut *this)
{
  return &PgWinBut::m_RTTI;
}

//----- (0041D5E0) --------------------------------------------------------
void __thiscall PgWinBut::SetCommandMsg(PgWinBut *this, unsigned int uiCmdMsg)
{
  this->m_uiCmdMsg = uiCmdMsg;
}

//----- (0041D5F0) --------------------------------------------------------
void __thiscall PgWinBut::SetCommandMsgParam(PgWinBut *this, unsigned int uiCmdMsgParam)
{
  this->m_uiCmdMsgParam = uiCmdMsgParam;
}

//----- (0041D600) --------------------------------------------------------
void __thiscall PgWinBut::Enable(PgWinBut *this, bool b)
{
  PgWinBut *v2; // esi@1
  NiRefObjectVtbl *v3; // edx@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  this->baseclass_0.baseclass_0.m_bEnable = b;
  if ( !(unsigned __int8)((int (*)(void))v3[61].__vecDelDtor)() )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v2,
      3u);
}

//----- (0041D630) --------------------------------------------------------
void __thiscall PgWinBut::DisableAlwaysButShow(PgWinBut *this, bool b)
{
  this->m_bClickCheck = b;
}

//----- (0041D640) --------------------------------------------------------
unsigned int __thiscall PgWinBut::GetCommandMsg(PgWinBut *this)
{
  return this->m_uiCmdMsg;
}

//----- (0041D650) --------------------------------------------------------
void __thiscall PgWinLRBut::SetRCommandMsg(PgWinLRBut *this, unsigned int uiCmdMsg)
{
  this->m_uiRCmdMsg = uiCmdMsg;
}

//----- (0041D660) --------------------------------------------------------
void __thiscall PgWinLRBut::SetRCommandMsgParam(PgWinLRBut *this, unsigned int uiCmdMsgParam)
{
  this->m_uiRCmdMsgParam = uiCmdMsgParam;
}

//----- (0041D670) --------------------------------------------------------
void *__thiscall GuildEmblemIcon::_scalar_deleting_destructor_(GuildEmblemIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildEmblemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildEmblemIcon::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97B968: using guessed type int (__stdcall *GuildEmblemIcon___vftable_)(int uiFlags);
// 97B984: using guessed type int (__thiscall *GuildEmblemIcon___vftable_)(void *p, char);

//----- (0041D6B0) --------------------------------------------------------
void __thiscall NiD3DTextureStage::SetTexture(NiTexturingProperty::Map *this, NiTexture *pkTexture)
{
  NiTexturingProperty::Map *v2; // ebx@1
  NiTexture *v3; // esi@1

  v2 = this;
  v3 = this->m_spTexture.m_pObject;
  if ( v3 != pkTexture )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spTexture.m_pObject = pkTexture;
    if ( pkTexture )
      InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (0041D700) --------------------------------------------------------
void __thiscall NiTexturingProperty::SetBaseTexture(NiTexturingProperty *this, NiTexture *pkTexture)
{
  NiTexturingProperty *v2; // esi@1
  NiTexturingProperty::Map *v3; // edi@1
  void *v4; // eax@2
  void *v5; // eax@3
  NiTexture *v6; // esi@6
  void *pkBaseMap; // [sp+0h] [bp-10h]@2
  int v8; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = *this->m_kMaps.m_pBase;
  if ( !v3 )
  {
    v4 = operator new(0x18u);
    pkBaseMap = v4;
    v8 = 0;
    if ( v4 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v4);
    else
      v5 = 0;
    v3 = (NiTexturingProperty::Map *)v5;
    v8 = -1;
    pkBaseMap = v5;
    NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)&v2->m_kMaps, 0, (NiVBChip *const *)&pkBaseMap);
  }
  v6 = v3->m_spTexture.m_pObject;
  if ( v6 != pkTexture )
  {
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v3->m_spTexture.m_pObject = pkTexture;
    if ( pkTexture )
      InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (0041D7C0) --------------------------------------------------------
void __thiscall PgWinBut::SetButShow(PgWinBut *this, PgWinBut::ButShow eShow)
{
  PgWinBut::ButShow v2; // edi@1
  PgWinBut *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@2
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@7
  PgWinBut *v6; // ecx@7

  v2 = eShow;
  v3 = this;
  if ( this->m_eButShow != eShow )
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[139].__vecDelDtor)(eShow);
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor;
    v3->m_eButShow = eShow;
    if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v4)(v3) )
    {
      v2 = 3;
      if ( v3->m_uiButNum > 3 )
        v3->m_eButShow = 3;
    }
    switch ( v2 )
    {
      case 0:
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
          (NiRefObject *)v3,
          0);
        break;
      case 1:
        v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
        v6 = v3;
        if ( v3->m_uiButNum <= 1 )
          goto LABEL_8;
        v5(&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 1u);
        break;
      case 2:
        v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
        v6 = v3;
        if ( v3->m_uiButNum <= 2 )
LABEL_8:
          v5(&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0);
        else
          v5(&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 2u);
        break;
      case 3:
        if ( v3->m_uiButNum > 3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
            (NiRefObject *)v3,
            3u);
        else
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
            (NiRefObject *)v3,
            0);
        break;
      default:
        return;
    }
  }
}

//----- (0041D8C0) --------------------------------------------------------
void __thiscall PgWinLRBut::DoRAction(PgWinLRBut *this)
{
  PgWinLRBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, v1->m_uiRCmdMsg, v1->m_uiRCmdMsgParam);
}

//----- (0041D8F0) --------------------------------------------------------
void __thiscall IconWin::SetTexture(IconWin *this, NiSourceTexture *pkTexture)
{
  NiTexturingProperty::SetBaseTexture(this->m_spTexProp.m_pObject, &pkTexture->baseclass_0);
}

//----- (0041D900) --------------------------------------------------------
void __thiscall GuildEmblemWin::GuildEmblemWin(GuildEmblemWin *this)
{
  GuildEmblemWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildEmblemWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildEmblemWin::_vftable_;
  v1->m_CheckEmblem.nSelect = 255;
  v1->m_CheckEmblem.nIndex = 255;
  v1->m_CheckEmblem.nColor = 0;
  v1->m_CheckEmblem.nFilePage = 0;
  v1->m_bMaxPage = 0;
  v1->m_nMaxSlotPageCnt = 0;
  v1->m_nCurSlotPageCnt = 0;
  v1->m_pkEmblemSlot = 0;
  memset((char *)v1->m_pkSlotIcon, 0, 0x100u);
  v1->m_pkColorIcon[0] = 0;
  v1->m_pkColorIcon[1] = 0;
  v1->m_pkColorIcon[2] = 0;
  v1->m_pkColorIcon[3] = 0;
  v1->m_pkColorIcon[4] = 0;
  v1->m_pkColorIcon[5] = 0;
  v1->m_pkColorIcon[6] = 0;
  v1->m_pkColorIcon[7] = 0;
}
// 97BDBC: using guessed type int (__stdcall *GuildEmblemWin___vftable_)(int uiFlags);
// 97BDDC: using guessed type int (__thiscall *GuildEmblemWin___vftable_)(void *p, char);

//----- (0041D9A0) --------------------------------------------------------
void __thiscall GuildEmblemWin::_GuildEmblemWin(GuildEmblemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildEmblemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildEmblemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97BDBC: using guessed type int (__stdcall *GuildEmblemWin___vftable_)(int uiFlags);
// 97BDDC: using guessed type int (__thiscall *GuildEmblemWin___vftable_)(void *p, char);

//----- (0041D9C0) --------------------------------------------------------
void __thiscall GuildEmblemWin::OnClose(GuildEmblemWin *this)
{
  GuildEmblemWin *v1; // esi@1
  int v2; // eax@2
  int v3; // eax@5
  bool v4; // zf@5
  GuildEmblemIcon **v5; // eax@5

  v1 = this;
  if ( this->m_CheckEmblem.nIndex != 255 )
  {
    v2 = this->m_CheckEmblem.nSelect;
    if ( v2 != 255 )
    {
      if ( this->m_pkSlotIcon[v2] )
        GuildEmblemIcon::SetSelectEmblem(this->m_pkSlotIcon[v2], 0);
      v3 = v1->m_CheckEmblem.nColor;
      v4 = v1->m_pkColorIcon[v3] == 0;
      v5 = &v1->m_pkColorIcon[v3];
      if ( !v4 )
        GuildEmblemIcon::SetSelectEmblem(*v5, 0);
    }
  }
  GuildEmblemIcon::SetSelectEmblem(v1->m_pkColorIcon[v1->m_CheckEmblem.nColor], 0);
  v1->m_CheckEmblem.nSelect = 255;
  v1->m_CheckEmblem.nIndex = 255;
  v1->m_CheckEmblem.nColor = 0;
  v1->m_CheckEmblem.nFilePage = 0;
  v1->m_nCurSlotPageCnt = 0;
}

//----- (0041DA60) --------------------------------------------------------
void __thiscall GuildEmblemWin::OnCancelWin(GuildEmblemWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::GuildEmblemShowWin((GameFrameWork *)v1, 0);
}

//----- (0041DA80) --------------------------------------------------------
void __thiscall GuildEmblemWin::OnHelp(GuildEmblemWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildEmblemWin");
}

//----- (0041DAB0) --------------------------------------------------------
void __thiscall GuildEmblemWin::ShowSlot(GuildEmblemWin *this, const unsigned int *nColor, const int *nSlotPage)
{
  signed int v3; // eax@3
  int v4; // ecx@3
  signed int v5; // ebx@4
  int v6; // edi@5
  GuildEmblemIcon *v7; // esi@6
  int v8; // eax@8
  GuildEmblemWin *v9; // [sp+0h] [bp-14h]@1
  int v10; // [sp+4h] [bp-10h]@3
  signed int i; // [sp+8h] [bp-Ch]@3
  int v12; // [sp+Ch] [bp-8h]@4
  char nFileNo; // [sp+12h] [bp-2h]@7
  char nIconNo; // [sp+13h] [bp-1h]@7

  v9 = this;
  if ( *nColor < 8 && *nSlotPage >= 0 )
  {
    v3 = 0;
    v4 = (int)this->m_pkSlotIcon;
    i = 0;
    v10 = v4;
    do
    {
      v5 = 0;
      v12 = v4;
      do
      {
        v6 = v5 + 8 * v3;
        if ( v6 >= 64 )
          break;
        v7 = *(GuildEmblemIcon **)v12;
        if ( *(_DWORD *)v12 )
        {
          nIconNo = v5 + 8 * *(_BYTE *)nColor;
          nFileNo = v3 + 8 * *(_BYTE *)nSlotPage;
          if ( !GuildEmblemIcon::SetEmblemIcon(v7, &nFileNo, &nIconNo, 1) )
          {
            v8 = v9->m_CheckEmblem.nSelect;
            if ( v6 == v8 )
            {
              GuildEmblemIcon::SetSelectEmblem(v9->m_pkSlotIcon[v8], 0);
              ((void (__stdcall *)(_DWORD))v9->m_pkEmblemSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            }
          }
          v3 = i;
        }
        v12 += 4;
        ++v5;
      }
      while ( v5 < 8 );
      ++v3;
      v4 = v10 + 32;
      i = v3;
      v10 += 32;
    }
    while ( v3 < 8 );
  }
}

//----- (0041DBA0) --------------------------------------------------------
bool __thiscall GuildEmblemWin::ShowEmblemSlot(GuildEmblemWin *this, const unsigned int *nSelect, const unsigned int *nColor)
{
  GuildEmblemWin *v3; // esi@1
  bool result; // al@2
  unsigned int v5; // ecx@3
  const unsigned int v6; // ebx@3
  const unsigned int *v7; // edi@6
  const unsigned int v8; // eax@6
  GuildEmblemIcon *v9; // ecx@7
  const unsigned int v10; // ecx@8
  bool v11; // zf@8
  GuildEmblemIcon **v12; // esi@8
  int nIconIdx; // [sp+4h] [bp-8h]@6
  char nFileNo; // [sp+Bh] [bp-1h]@7

  v3 = this;
  if ( this->m_pkEmblemSlot )
  {
    v5 = *nSelect;
    v6 = 8 * v3->m_nCurSlotPageCnt + (*nSelect >> 3);
    if ( (v6 & 0x80000000u) == 0 && ((v5 >> 3) & 0x80000000u) == 0 )
    {
      v7 = nColor;
      v8 = v5 + 8 * (*nColor - (*nSelect >> 3));
      nIconIdx = v8;
      if ( v8 > 0x3F )
      {
        result = 0;
      }
      else
      {
        v9 = v3->m_pkEmblemSlot;
        BYTE3(nColor) = v8;
        nFileNo = v6;
        if ( GuildEmblemIcon::SetEmblemIcon(v9, &nFileNo, (const char *)&nColor + 3, 1) )
        {
          v10 = *nSelect;
          v3->m_CheckEmblem.nSelect = *nSelect;
          v3->m_CheckEmblem.nFilePage = v6;
          v3->m_CheckEmblem.nIndex = nIconIdx;
          v3->m_CheckEmblem.nColor = *v7;
          v11 = v3->m_pkSlotIcon[v10] == 0;
          v12 = &v3->m_pkSlotIcon[v10];
          if ( !v11 )
            GuildEmblemIcon::SetSelectEmblem(*v12, 1);
        }
        result = 1;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0041DC70) --------------------------------------------------------
void __thiscall GuildEmblemWin::OnShowWin(GuildEmblemWin *this)
{
  GuildEmblemWin *v1; // esi@1
  unsigned int nColor; // [sp+4h] [bp-4h]@1

  v1 = this;
  nColor = 0;
  GuildEmblemWin::ShowSlot(this, &nColor, &this->m_nCurSlotPageCnt);
  ((void (__stdcall *)(_DWORD))v1->m_pkEmblemSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GuildEmblemIcon::SetSelectEmblem(v1->m_pkColorIcon[0], 1);
}

//----- (0041DCC0) --------------------------------------------------------
void __thiscall GuildEmblemWin::ChangeSlot(GuildEmblemWin *this, bool bNextPage)
{
  GuildEmblemWin *v2; // esi@1
  const int *v3; // edi@1
  int v4; // eax@2
  bool v5; // sf@7
  int v6; // eax@11
  int v7; // ecx@11
  unsigned int nSelect; // [sp+8h] [bp-4h]@11

  v2 = this;
  v3 = &this->m_nCurSlotPageCnt;
  if ( bNextPage )
  {
    ++*v3;
    v4 = *v3;
    if ( this->m_bMaxPage == 1 )
    {
      if ( v4 >= this->m_nMaxSlotPageCnt )
        *v3 = 0;
    }
    else
    {
      if ( v4 > this->m_nMaxSlotPageCnt )
        *v3 = 0;
    }
  }
  else
  {
    v5 = (*v3)-- - 1 < 0;
    if ( v5 )
    {
      if ( this->m_bMaxPage )
        *v3 = this->m_nMaxSlotPageCnt - 1;
      else
        *v3 = this->m_nMaxSlotPageCnt;
    }
  }
  v6 = this->m_CheckEmblem.nColor;
  v7 = this->m_CheckEmblem.nSelect;
  v2->m_CheckEmblem.nFilePage = 8 * *v3;
  *(_DWORD *)&bNextPage = v6;
  nSelect = v7;
  GuildEmblemWin::ShowEmblemSlot(v2, &nSelect, (const unsigned int *)&bNextPage);
  *(_DWORD *)&bNextPage = v2->m_CheckEmblem.nColor;
  GuildEmblemWin::ShowSlot(v2, (const unsigned int *)&bNextPage, v3);
}

//----- (0041DD70) --------------------------------------------------------
void __thiscall GuildEmblemWin::SelectEmblem(GuildEmblemWin *this, const unsigned int *nSelect)
{
  const unsigned int *v2; // ebx@1
  GuildEmblemWin *v3; // esi@1
  int v4; // eax@4
  GuildEmblemIcon *v5; // ecx@8

  v2 = nSelect;
  v3 = this;
  if ( *nSelect < 0x40 && this->m_pkEmblemSlot )
  {
    if ( this->m_CheckEmblem.nIndex < 255 )
    {
      v4 = this->m_CheckEmblem.nSelect;
      if ( v4 < 255 )
      {
        if ( this->m_pkSlotIcon[v4] )
          GuildEmblemIcon::SetSelectEmblem(this->m_pkSlotIcon[v4], 0);
      }
    }
    if ( v3->m_CheckEmblem.nSelect == *v2 )
    {
      v5 = v3->m_pkEmblemSlot;
      v3->m_CheckEmblem.nSelect = 255;
      v3->m_CheckEmblem.nIndex = 255;
      ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
    else
    {
      nSelect = (const unsigned int *)v3->m_CheckEmblem.nColor;
      GuildEmblemWin::ShowEmblemSlot(v3, v2, (const unsigned int *)&nSelect);
    }
  }
}

//----- (0041DE10) --------------------------------------------------------
void __thiscall GuildEmblemWin::SelectColor(GuildEmblemWin *this, const unsigned int *nChangeColorSlot)
{
  const unsigned int *v2; // edi@1
  GuildEmblemWin *v3; // esi@1
  int v4; // eax@2

  v2 = nChangeColorSlot;
  v3 = this;
  if ( *nChangeColorSlot < 8 )
  {
    v4 = this->m_CheckEmblem.nColor;
    if ( v4 < 8 )
    {
      if ( this->m_pkColorIcon[v4] )
      {
        if ( this->m_pkColorIcon[*nChangeColorSlot] )
        {
          GuildEmblemIcon::SetSelectEmblem(this->m_pkColorIcon[v4], 0);
          GuildEmblemIcon::SetSelectEmblem(v3->m_pkColorIcon[*v2], 1);
          v3->m_CheckEmblem.nColor = *v2;
          GuildEmblemWin::ShowSlot(v3, v2, &v3->m_nCurSlotPageCnt);
          if ( v3->m_CheckEmblem.nIndex < 255 || v3->m_CheckEmblem.nSelect < 255 )
          {
            nChangeColorSlot = (const unsigned int *)v3->m_CheckEmblem.nSelect;
            GuildEmblemWin::ShowEmblemSlot(v3, (const unsigned int *)&nChangeColorSlot, v2);
          }
        }
      }
    }
  }
}

//----- (0041DEB0) --------------------------------------------------------
bool __thiscall GuildEmblemWin::Create(GuildEmblemWin *this, PgFrameWork *pkFrameWork)
{
  GuildEmblemWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  int v6; // edi@5
  int v7; // ebx@5
  NiSourceTexture *v8; // eax@5
  PgSprData *v9; // eax@8
  NiSourceTexture *v10; // eax@8
  PgSprData *v11; // eax@8
  D3DXCOLOR v12; // ST40_16@8
  char *v13; // eax@8
  int v14; // eax@8
  unsigned int v15; // edx@8
  PgFont *v16; // eax@8
  PgWinText *v17; // eax@8
  NiRefObjectVtbl *v18; // edx@8
  char *v19; // eax@8
  int v20; // ecx@8
  unsigned int v21; // eax@8
  PgFont *v22; // eax@8
  PgWinText *v23; // eax@8
  NiRefObjectVtbl *v24; // edx@8
  char *v25; // eax@8
  int v26; // ecx@8
  unsigned int v27; // eax@8
  PgFont *v28; // eax@8
  PgWinText *v29; // eax@8
  NiRefObjectVtbl *v30; // edx@8
  char *v31; // eax@8
  D3DXCOLOR v32; // ST40_16@8
  char *v33; // eax@8
  PgSprData *v34; // eax@9
  PgWinBut *v35; // eax@9
  GuildEmblemIcon *v36; // eax@10
  PgSprData *v37; // eax@12
  GuildEmblemIcon *v38; // eax@12
  unsigned int v39; // ecx@13
  unsigned int v40; // ecx@16
  int v41; // eax@16
  int v42; // eax@16
  NiNode *v43; // esi@18
  PgSprData *v45; // eax@26
  GuildEmblemIcon *v46; // eax@26
  PgWinBut *v47; // eax@29
  PgWinBut *v48; // edi@29
  signed int v49; // ebx@30
  NiRefObjectVtbl *v50; // edx@30
  char *v51; // eax@32
  PgWinBut *v52; // eax@33
  PgWinBut *v53; // edi@33
  NiNode *v54; // esi@34
  NiRefObjectVtbl *v55; // eax@38
  char *v56; // eax@40
  NiNode *v57; // esi@41
  const char *v58; // [sp+44h] [bp-A0h]@6
  int *v59; // [sp+48h] [bp-9Ch]@6
  int *v60; // [sp+4Ch] [bp-98h]@6
  NiSourceTexture *v61; // [sp+50h] [bp-94h]@6
  volatile LONG *v62; // [sp+50h] [bp-94h]@19
  unsigned int v63; // [sp+54h] [bp-90h]@1
  NiSourceTexture *pkTexture; // [sp+64h] [bp-80h]@8
  UIUtil ui; // [sp+6Ch] [bp-78h]@5
  NiPointer<NiNode> spNode; // [sp+80h] [bp-64h]@1
  int uiLeft; // [sp+84h] [bp-60h]@4
  int uiTop; // [sp+88h] [bp-5Ch]@4
  unsigned int nPage; // [sp+8Ch] [bp-58h]@8
  unsigned int i; // [sp+90h] [bp-54h]@8
  char acSlotName[64]; // [sp+94h] [bp-50h]@9
  unsigned int v72; // [sp+D4h] [bp-10h]@1
  int v73; // [sp+E0h] [bp-4h]@1
  int v74; // [sp+E4h] [bp+0h]@1

  v72 = (unsigned int)&v74 ^ __security_cookie;
  v63 = (unsigned int)&v74 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v73 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildEmblemWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildEmblemWin", 0) )
  {
    v6 = uiLeft;
    v7 = uiTop;
    UIUtil::UIUtil(&ui);
    LOBYTE(v73) = 1;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, v6, v7);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    v8 = MenuTexMgr::GetTexture(0x13u);
    if ( v8 )
    {
      v61 = v8;
      v60 = &uiTop;
      v59 = &uiLeft;
      v58 = "Theme";
    }
    else
    {
      v61 = 0;
      v60 = &uiTop;
      v59 = &uiLeft;
      v58 = "Theme";
    }
    v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v58, v59, v60, v61);
    PgWinSpr::CreateWin(uiLeft - v6, uiTop - v7, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v10 = MenuTexMgr::GetTexture(0x1Du);
    pkTexture = v10;
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v10);
    PgWinSpr::CreateWin(uiLeft - v6, uiTop - v7, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    UIUtil::CreateSpr(&ui, "Panel01", 0);
    UIUtil::CreateSpr(&ui, "Panel02", 0);
    UIUtil::CreateSpr(&ui, "Panel03", 0);
    *(_QWORD *)&v12.r = Color::m_kDxWinTitleColor;
    *(_QWORD *)&v12.b = qword_A746E8;
    v13 = TextData3::Get(0x99F0E4FCu);
    UIUtil::CreateTextNoSpr(&ui, "WinTitle", v13, COERCE_D3DXCOLOR(v12.r), 5u);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "OutlineText", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v6, uiTop - v7, (PgSprData *)i, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v14 = **(_DWORD **)(i + 36);
    v15 = *(_DWORD *)(v14 + 20);
    nPage = *(_DWORD *)(v14 + 24);
    i = v15;
    v16 = Font::Get(0);
    v17 = PgWinText::CreateWin(uiLeft - v6, uiTop - v7, i, nPage, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v17;
    v18[122].__vecDelDtor((NiRefObject *)v17, 5u);
    nPage = *(_DWORD *)i + 472;
    v19 = TextData3::Get(0xEA533926u);
    (*(void (__thiscall **)(unsigned int, char *))nPage)(i, v19);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "SymbolText01", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v6, uiTop - v7, (PgSprData *)i, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v20 = *(_DWORD *)(i + 36);
    v21 = *(_DWORD *)(*(_DWORD *)v20 + 20);
    nPage = *(_DWORD *)(*(_DWORD *)v20 + 24);
    i = v21;
    v22 = Font::Get(0);
    v23 = PgWinText::CreateWin(uiLeft - v6, uiTop - v7, i, nPage, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v23;
    v24[122].__vecDelDtor((NiRefObject *)v23, 5u);
    nPage = *(_DWORD *)i + 472;
    v25 = TextData3::Get(0x2E533E7Cu);
    (*(void (__thiscall **)(unsigned int, char *))nPage)(i, v25);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "NoticeText00", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v6, uiTop - v7, (PgSprData *)i, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v26 = *(_DWORD *)(i + 36);
    v27 = *(_DWORD *)(*(_DWORD *)v26 + 20);
    nPage = *(_DWORD *)(*(_DWORD *)v26 + 24);
    i = v27;
    v28 = Font::Get(0);
    v29 = PgWinText::CreateWin(uiLeft - v6, uiTop - v7, i, nPage, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v29;
    v30[122].__vecDelDtor((NiRefObject *)v29, 5u);
    nPage = *(_DWORD *)i + 472;
    v31 = TextData3::Get(0xC44F1605u);
    (*(void (__thiscall **)(_DWORD, _DWORD))nPage)(i, v31);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    UIUtil::CreateBtn(&ui, 0xDu, "HelpLinkNor", "HelpLinkClick", "HelpLinkOver", 0, 0);
    UIUtil::CreateBtn(&ui, 0xCu, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    nPage = (unsigned int)UIUtil::CreateBtn(&ui, 0xBu, "OkNor", "OkClick", "OkOver", 0, 0);
    *(_QWORD *)&v32.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v32.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v33 = TextData3::Get(0x2C3B4F9Bu);
    UIUtil::CreateAttachedText(&ui, (PgWin *)nPage, v33, COERCE_D3DXCOLOR(v32.r), 5u);
    i = 0;
    nPage = (unsigned int)v2->m_pkColorIcon;
    while ( 1 )
    {
      sprintf(acSlotName, "OutlineColorSlot%02d");
      v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acSlotName, &uiLeft, &uiTop, pkTexture);
      v35 = PgWinBut::CreateWin(uiLeft - v6, uiTop - v7, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, 0, 0);
      if ( !v35 )
        break;
      v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v35,
        i);
      v36 = GuildEmblemIcon::CreateWin(
              uiLeft - v6,
              uiTop - v7,
              i,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              pkFrameWork,
              0x20u,
              0x20u);
      *(_DWORD *)nPage = v36;
      v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v36,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)nPage + 256))(0);
      nPage += 4;
      ++i;
      if ( (signed int)i >= 8 )
      {
        i = 0;
        nPage = (unsigned int)v2->m_pkSlotIcon;
        while ( 1 )
        {
          sprintf(acSlotName, "SymbolEmblemSlot%02d");
          v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acSlotName, &uiLeft, &uiTop, pkTexture);
          PgWinSpr::CreateWin(uiLeft - v6, uiTop - v7, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
          v38 = GuildEmblemIcon::CreateWin(
                  uiLeft - v6,
                  uiTop - v7,
                  i,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  pkFrameWork,
                  0x20u,
                  0x20u);
          *(_DWORD *)nPage = v38;
          if ( !v38 )
            goto LABEL_27;
          v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v38,
            1u);
          (*(void (__stdcall **)(signed int))(**(_DWORD **)nPage + 256))(1);
          v39 = nPage;
          *(_DWORD *)(*(_DWORD *)nPage + 304) = 1;
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v39 + 516))(16);
          nPage += 4;
          ++i;
          if ( (signed int)i >= 64 )
          {
            nPage = 0;
            sprintf(acSlotName, "GuildEmblem%03d");
            while ( IconMgr::GetTexturePng(acSlotName) )
            {
              ++nPage;
              sprintf(acSlotName, "GuildEmblem%03d");
            }
            v40 = nPage;
            v41 = (signed int)nPage / 8;
            v2->m_nMaxSlotPageCnt = (signed int)nPage / 8;
            v42 = v40 - 8 * v41;
            if ( v42 < 0 )
            {
              LOBYTE(v73) = 0;
              UIUtil::_UIUtil(&ui);
              goto LABEL_18;
            }
            if ( !v42 )
              v2->m_bMaxPage = 1;
            v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EmblemSlot", &uiLeft, &uiTop, 0);
            PgWinSpr::CreateWin(uiLeft - v6, uiTop - v7, v45, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
            v46 = GuildEmblemIcon::CreateWin(
                    uiLeft - v6,
                    uiTop - v7,
                    i,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    pkFrameWork,
                    0x40u,
                    0x40u);
            v2->m_pkEmblemSlot = v46;
            if ( !v46
              || (v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                    (NiRefObject *)v46,
                    0),
                  ((void (__stdcall *)(_DWORD))v2->m_pkEmblemSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
                  v47 = UIUtil::CreateBtn(
                          &ui,
                          0xEu,
                          "OutlinePage_Nor00",
                          "OutlinePage_Click00",
                          "OutlinePage_Over00",
                          0,
                          0),
                  (v48 = v47) == 0) )
              goto LABEL_27;
            v49 = nPage;
            v50 = v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            if ( (signed int)nPage > 8 )
            {
              v50[130].__vecDelDtor((NiRefObject *)v47, 1u);
              v48->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              v51 = TextData3::Get(0x1B4C4C56u);
              PgWin::SetToolTipWinText(&v48->baseclass_0.baseclass_0, v51);
            }
            else
            {
              v50[64].__vecDelDtor((NiRefObject *)v47, 0);
              v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                (NiRefObject *)v48,
                0);
            }
            v52 = UIUtil::CreateBtn(&ui, 0xFu, "OutlinePage_Nor01", "OutlinePage_Click01", "OutlinePage_Over01", 0, 0);
            v53 = v52;
            if ( v52 )
            {
              v55 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              if ( v49 > 8 )
              {
                ((void (__thiscall *)(PgWinBut *, signed int, unsigned int))v55[130].__vecDelDtor)(v53, 1, v63);
                v53->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                v56 = TextData3::Get(0x2E3F4AAAu);
                PgWin::SetToolTipWinText(&v53->baseclass_0.baseclass_0, v56);
              }
              else
              {
                ((void (__thiscall *)(PgWinBut *, _DWORD, unsigned int))v55[64].__vecDelDtor)(v53, 0, v63);
                v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                  (NiRefObject *)v53,
                  0);
              }
              ((void (__thiscall *)(GuildEmblemWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
                v2,
                PgWin::ms_uiScreenWidth,
                PgWin::ms_uiScreenHeight,
                0.5);
              LOBYTE(v73) = 0;
              UIUtil::_UIUtil(&ui);
              v57 = spNode.m_pObject;
              v73 = -1;
              if ( spNode.m_pObject
                && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
                && v57 )
                v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v57, 1u);
              return 1;
            }
            LOBYTE(v73) = 0;
            UIUtil::_UIUtil(&ui);
            v54 = spNode.m_pObject;
            v73 = -1;
            if ( spNode.m_pObject
              && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
              && v54 )
            {
              v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v54, 1u);
              return 0;
            }
            return 0;
          }
        }
      }
    }
LABEL_27:
    LOBYTE(v73) = 0;
    UIUtil::_UIUtil(&ui);
    v43 = spNode.m_pObject;
    v73 = -1;
    if ( spNode.m_pObject )
    {
      v62 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_20:
      if ( !InterlockedDecrement(v62) )
      {
        if ( v43 )
          v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
      }
      return 0;
    }
  }
  else
  {
LABEL_18:
    v43 = spNode.m_pObject;
    v73 = -1;
    if ( spNode.m_pObject )
    {
      v62 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_20;
    }
  }
  return 0;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041E7F0) --------------------------------------------------------
void __thiscall GuildEmblemWin::OnApplyEmblem(GuildEmblemWin *this)
{
  GuildEmblemWin *v1; // esi@1
  PgFrameWork *v2; // edi@1
  GUILD_EMBLEM_INFO v3; // ST0C_2@4
  char *v4; // eax@5

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v1->m_CheckEmblem.nIndex < 255
      && (unsigned __int8)((int (*)(void))v1->m_pkEmblemSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v3.nPTFileNo = LOBYTE(v1->m_CheckEmblem.nFilePage);
      v3.nPTIconNo = LOBYTE(v1->m_CheckEmblem.nIndex);
      GameFrameWork::NcGuildEmblemSaveReq((GameFrameWork *)v2, v3);
    }
    else
    {
      v4 = TextData3::Get(0x73A38DDBu);
      GameFrameWork::AddSysMsg((GameFrameWork *)v2, v4);
    }
  }
}

//----- (0041E870) --------------------------------------------------------
void __thiscall GuildEmblemWin::OnCommand(GuildEmblemWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      GuildEmblemWin::OnApplyEmblem(this);
      break;
    case 0xCu:
      GuildEmblemWin::OnCancelWin(this);
      break;
    case 0xDu:
      GuildEmblemWin::OnHelp(this);
      break;
    case 0xEu:
      GuildEmblemWin::ChangeSlot(this, 0);
      break;
    case 0xFu:
      GuildEmblemWin::ChangeSlot(this, 1);
      break;
    case 0x10u:
      GuildEmblemWin::SelectEmblem(this, (const unsigned int *)&lParam);
      break;
    case 0x11u:
      GuildEmblemWin::SelectColor(this, (const unsigned int *)&lParam);
      break;
    default:
      return;
  }
}

//----- (0041E900) --------------------------------------------------------
GuildEmblemWin *__cdecl GuildEmblemWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildEmblemWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x298u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildEmblemWin::GuildEmblemWin((GuildEmblemWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildEmblemWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0041EA30) --------------------------------------------------------
void *__thiscall GuildEmblemWin::_vector_deleting_destructor_(GuildEmblemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildEmblemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildEmblemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97BDBC: using guessed type int (__stdcall *GuildEmblemWin___vftable_)(int uiFlags);
// 97BDDC: using guessed type int (__thiscall *GuildEmblemWin___vftable_)(void *p, char);

//----- (0041EA70) --------------------------------------------------------
bool __cdecl IconMgr::Init()
{
  return 1;
}

//----- (0041EA80) --------------------------------------------------------
void __cdecl IconMgr::Terminate()
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(&IconMgr::ms_kTextureMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&IconMgr::ms_kAniTextureMap);
}

//----- (0041EAA0) --------------------------------------------------------
NiSourceTexture *__cdecl IconMgr::LoadIconImage(char *pcFileName)
{
  NiImageConverter *v1; // eax@1
  NiSourceTexture *result; // eax@1
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-Ch]@2

  v1 = NiImageConverter::GetImageConverter();
  result = (NiSourceTexture *)((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v1->baseclass_0.vfptr[2].__vecDelDtor)(
                                v1,
                                pcFileName,
                                0);
  if ( result )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    result = NiSourceTexture::Create((NiPixelData *)result, &kPrefs);
  }
  return result;
}

//----- (0041EAF0) --------------------------------------------------------
NiSourceTexture *__cdecl IconMgr::GetTexture(char *pcFileName)
{
  NiSourceTexture *v1; // edi@1
  NiSourceTexture *v2; // esi@2
  bool v3; // zf@2
  NiImageConverter *v4; // eax@5
  NiPixelData *v5; // eax@5
  NiPointer<PgWinBut> v7; // [sp-14h] [bp-13Ch]@5
  unsigned int v8; // [sp-10h] [bp-138h]@1
  NiPointer<PgWinBut> *v9; // [sp+0h] [bp-128h]@14
  NiTexture::FormatPrefs kPrefs; // [sp+4h] [bp-124h]@6
  NiPointer<NiSourceTexture> spTexture; // [sp+10h] [bp-118h]@1
  char acPathName[260]; // [sp+14h] [bp-114h]@5
  unsigned int v13; // [sp+118h] [bp-10h]@1
  int v14; // [sp+124h] [bp-4h]@1
  int v15; // [sp+128h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v8 = (unsigned int)&v15 ^ __security_cookie;
  v1 = 0;
  spTexture.m_pObject = 0;
  v14 = 0;
  if ( !NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
          (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&IconMgr::ms_kTextureMap,
          pcFileName,
          (NiPointer<NiShaderLibrary> *)&spTexture) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v7.m_pObject = (PgWinBut *)pcFileName;
    sprintf(acPathName, "%sIcon\\%s.dds");
    v4 = NiImageConverter::GetImageConverter();
    v5 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(
                          v4,
                          acPathName,
                          0);
    if ( v5 )
    {
      kPrefs.m_ePixelLayout = 6;
      kPrefs.m_eAlphaFmt = 3;
      kPrefs.m_eMipMapped = 0;
      v1 = NiSourceTexture::Create(v5, &kPrefs);
    }
    v2 = spTexture.m_pObject;
    if ( spTexture.m_pObject != v1 )
    {
      if ( spTexture.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spTexture.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      v2 = v1;
      spTexture.m_pObject = v1;
      if ( !v1 )
        goto LABEL_15;
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v3 = v2 == 0;
    if ( !v2 )
      goto LABEL_16;
    v7.m_pObject = (PgWinBut *)v2;
    v9 = &v7;
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      &IconMgr::ms_kTextureMap,
      (unsigned int)pcFileName,
      v7);
LABEL_15:
    v3 = v2 == 0;
    goto LABEL_16;
  }
  v2 = spTexture.m_pObject;
  v3 = spTexture.m_pObject == 0;
LABEL_16:
  v14 = -1;
  if ( !v3 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  return v2;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041EC60) --------------------------------------------------------
NiSourceTexture *__cdecl IconMgr::GetTexturePng(char *pcFileName)
{
  NiSourceTexture *v1; // edi@1
  NiSourceTexture *v2; // esi@2
  bool v3; // zf@2
  NiImageConverter *v4; // eax@5
  NiPixelData *v5; // eax@5
  NiPointer<PgWinBut> v7; // [sp-14h] [bp-13Ch]@5
  unsigned int v8; // [sp-10h] [bp-138h]@1
  NiPointer<PgWinBut> *v9; // [sp+0h] [bp-128h]@14
  NiTexture::FormatPrefs kPrefs; // [sp+4h] [bp-124h]@6
  NiPointer<NiSourceTexture> spTexture; // [sp+10h] [bp-118h]@1
  char acPathName[260]; // [sp+14h] [bp-114h]@5
  unsigned int v13; // [sp+118h] [bp-10h]@1
  int v14; // [sp+124h] [bp-4h]@1
  int v15; // [sp+128h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v8 = (unsigned int)&v15 ^ __security_cookie;
  v1 = 0;
  spTexture.m_pObject = 0;
  v14 = 0;
  if ( !NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
          (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&IconMgr::ms_kTextureMap,
          pcFileName,
          (NiPointer<NiShaderLibrary> *)&spTexture) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v7.m_pObject = (PgWinBut *)pcFileName;
    sprintf(acPathName, "%sIcon\\Png\\%s.png");
    v4 = NiImageConverter::GetImageConverter();
    v5 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(
                          v4,
                          acPathName,
                          0);
    if ( v5 )
    {
      kPrefs.m_ePixelLayout = 6;
      kPrefs.m_eAlphaFmt = 3;
      kPrefs.m_eMipMapped = 0;
      v1 = NiSourceTexture::Create(v5, &kPrefs);
    }
    v2 = spTexture.m_pObject;
    if ( spTexture.m_pObject != v1 )
    {
      if ( spTexture.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spTexture.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      v2 = v1;
      spTexture.m_pObject = v1;
      if ( !v1 )
        goto LABEL_15;
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v3 = v2 == 0;
    if ( !v2 )
      goto LABEL_16;
    v7.m_pObject = (PgWinBut *)v2;
    v9 = &v7;
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      &IconMgr::ms_kTextureMap,
      (unsigned int)pcFileName,
      v7);
LABEL_15:
    v3 = v2 == 0;
    goto LABEL_16;
  }
  v2 = spTexture.m_pObject;
  v3 = spTexture.m_pObject == 0;
LABEL_16:
  v14 = -1;
  if ( !v3 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  return v2;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041EDD0) --------------------------------------------------------
NiPointer<NiTexturingProperty> *__cdecl IconMgr::GetAniTextureProperty(NiPointer<NiTexturingProperty> *result, const char *pkFileName)
{
  NiTexturingProperty *v2; // esi@2
  NiNode *v4; // eax@10
  NiNode *v5; // esi@10
  NiTexturingProperty *v6; // esi@13
  int v7; // edi@18
  NiTexturingProperty *v8; // edi@21
  NiRefObjectVtbl *v9; // edx@27
  NiTexturingProperty *v10; // ecx@27
  NiProperty *v11; // eax@28
  NiTexturingProperty *v12; // ebx@28
  const char *v13; // [sp-14h] [bp-144h]@10
  unsigned int v14; // [sp-10h] [bp-140h]@1
  NiPointer<NiNode> spNode; // [sp+0h] [bp-130h]@10
  NiPointer<NiAVObject> spFindObj; // [sp+4h] [bp-12Ch]@18
  const char **v17; // [sp+8h] [bp-128h]@29
  unsigned int key; // [sp+Ch] [bp-124h]@1
  int v19; // [sp+10h] [bp-120h]@1
  NiPointer<NiTexturingProperty> spTextureProperty; // [sp+14h] [bp-11Ch]@1
  NiPointer<NiTexturingProperty> *v21; // [sp+18h] [bp-118h]@1
  char acPathName[260]; // [sp+1Ch] [bp-114h]@10
  unsigned int v23; // [sp+120h] [bp-10h]@1
  int v24; // [sp+12Ch] [bp-4h]@1
  int v25; // [sp+130h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v14 = (unsigned int)&v25 ^ __security_cookie;
  v19 = 0;
  v21 = result;
  key = (unsigned int)pkFileName;
  spTextureProperty.m_pObject = 0;
  v24 = 1;
  if ( !NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
          &IconMgr::ms_kAniTextureMap,
          pkFileName,
          (NiPointer<NiShaderLibrary> *)&spTextureProperty) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v13 = pkFileName;
    sprintf(acPathName, "%sIcon\\%s.nif");
    v4 = PgUtil::LoadNifFile(acPathName, 0, 1);
    v5 = v4;
    spNode.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v24) = 2;
    if ( v5 )
    {
      v7 = (int)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                  (NiRefObject *)v5,
                  (unsigned int)"Box");
      spFindObj.m_pObject = (NiAVObject *)v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)(v7 + 4));
      LOBYTE(v24) = 3;
      if ( v7 )
      {
        v11 = NiAVObject::GetProperty((NiAVObject *)v7, 8);
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&spTextureProperty,
          (NiD3DDefaultShader *)v11);
        v12 = spTextureProperty.m_pObject;
        if ( !spTextureProperty.m_pObject )
        {
          v17 = &v13;
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&IconMgr::ms_kAniTextureMap,
            key,
            (NiPointer<PgWinBut>)spTextureProperty.m_pObject);
        }
        v21->m_pObject = v12;
        if ( v12 )
          InterlockedIncrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v19 = 1;
        LOBYTE(v24) = 2;
        if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
        LOBYTE(v24) = 1;
        if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
        LOBYTE(v24) = 0;
        if ( !v12
          || InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          return v21;
        v9 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v10 = v12;
      }
      else
      {
        v8 = spTextureProperty.m_pObject;
        v21->m_pObject = spTextureProperty.m_pObject;
        if ( v8 )
          InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v19 = 1;
        LOBYTE(v24) = 1;
        if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
        LOBYTE(v24) = 0;
        if ( !v8
          || InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          return v21;
        v9 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v10 = v8;
      }
      v9->__vecDelDtor(v10, 1);
    }
    else
    {
      v6 = spTextureProperty.m_pObject;
      v21->m_pObject = spTextureProperty.m_pObject;
      if ( v6 )
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v19 = 1;
      LOBYTE(v24) = 0;
      if ( v6
        && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return v21;
  }
  v2 = spTextureProperty.m_pObject;
  result->m_pObject = spTextureProperty.m_pObject;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v19 = 1;
  LOBYTE(v24) = 0;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0041F090) --------------------------------------------------------
unsigned int __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_unsigned_int_NiKFMTool::Sequence__>::KeyToHashIndex(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key)
{
  return key % this->m_uiHashSize;
}

//----- (0041F0B0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> > *this)
{
  NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 97C038: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0041F0D0) --------------------------------------------------------
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>(NiTStringTemplateMap<NiTMap<char const *,NiPointer<NiSourceTexture> >,NiPointer<NiSourceTexture> > *this)
{
  NiTStringTemplateMap<NiTMap<char const *,NiPointer<NiSourceTexture> >,NiPointer<NiSourceTexture> > *v1; // edi@1
  bool v2; // zf@1
  unsigned int v3; // ebx@2
  NiTMapItem<char const *,NiPointer<NiSourceTexture> > *v4; // esi@3
  void *v5; // eax@4

  v1 = this;
  v2 = this->m_bCopy == 0;
  this->baseclass_0.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_vftable_;
  if ( !v2 )
  {
    v3 = 0;
    if ( this->baseclass_0.baseclass_0.m_uiHashSize )
    {
      do
      {
        v4 = v1->baseclass_0.baseclass_0.m_ppkHashTable[v3];
        while ( v4 )
        {
          v5 = (void *)v4->m_key;
          v4 = v4->m_pkNext;
          operator delete__(v5);
        }
        ++v3;
      }
      while ( v3 < v1->baseclass_0.baseclass_0.m_uiHashSize );
    }
  }
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.baseclass_0.m_ppkHashTable);
}
// 97C038: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 97C078: using guessed type int (__thiscall *NiTMap_char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 97C098: using guessed type int (__thiscall *NiTStringTemplateMap_NiTMap_char const __NiPointer_NiSourceTexture___NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0041F180) --------------------------------------------------------
unsigned int __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiShader__>_NiShader__>::KeyToHashIndex(NiTStringTemplateMap<NiTPointerMap<char const *,NiD3DShaderProgramCreator *>,NiD3DShaderProgramCreator *> *this, const char *pKey)
{
  const char *v2; // esi@1
  const char v3; // dl@1
  unsigned int i; // eax@1
  int v5; // edi@2
  int v6; // eax@2

  v2 = pKey;
  v3 = *pKey;
  for ( i = 0; v3; i = v5 + v6 )
  {
    v5 = 33 * i;
    v6 = v3;
    v3 = (v2++)[1];
  }
  return i % this->baseclass_0.baseclass_0.m_uiHashSize;
}

//----- (0041F1C0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>(NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> > *this)
{
  NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 97C058: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiTexturingProperty___char const __NiPointer_NiTexturingProperty_____vftable_)(void *p, char);

//----- (0041F1E0) --------------------------------------------------------
void __thiscall NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>(NiTStringTemplateMap<NiTMap<char const *,NiPointer<NiTexturingProperty> >,NiPointer<NiTexturingProperty> > *this)
{
  NiTStringTemplateMap<NiTMap<char const *,NiPointer<NiTexturingProperty> >,NiPointer<NiTexturingProperty> > *v1; // edi@1
  bool v2; // zf@1
  unsigned int v3; // ebx@2
  NiTMapItem<char const *,NiPointer<NiTexturingProperty> > *v4; // esi@3
  void *v5; // eax@4

  v1 = this;
  v2 = this->m_bCopy == 0;
  this->baseclass_0.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> >Vtbl *)&NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_vftable_;
  if ( !v2 )
  {
    v3 = 0;
    if ( this->baseclass_0.baseclass_0.m_uiHashSize )
    {
      do
      {
        v4 = v1->baseclass_0.baseclass_0.m_ppkHashTable[v3];
        while ( v4 )
        {
          v5 = (void *)v4->m_key;
          v4 = v4->m_pkNext;
          operator delete__(v5);
        }
        ++v3;
      }
      while ( v3 < v1->baseclass_0.baseclass_0.m_uiHashSize );
    }
  }
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> >Vtbl *)&NiTMap<char_const___NiPointer<NiTexturingProperty>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.baseclass_0.m_ppkHashTable);
}
// 97C058: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiTexturingProperty___char const __NiPointer_NiTexturingProperty_____vftable_)(void *p, char);
// 97C0B8: using guessed type int (__thiscall *NiTMap_char const __NiPointer_NiTexturingProperty_____vftable_)(void *p, char);
// 97C0D8: using guessed type int (__thiscall *NiTStringTemplateMap_NiTMap_char const __NiPointer_NiTexturingProperty___NiPointer_NiTexturingProperty_____vftable_)(void *p, char);

//----- (0041F290) --------------------------------------------------------
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::ClearValue(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiActorManager> >,NiPointer<NiActorManager> > *this, NiTMapItem<char const *,NiPointer<NiActorManager> > *pkItem)
{
  if ( this->m_bCopy )
    operator delete__((void *)pkItem->m_key);
}

//----- (0041F2B0) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C038: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0041F2F0) --------------------------------------------------------
void *__thiscall NiTMap<char_const___NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTMap<char const *,NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  NiTMap<char const *,NiPointer<NiSourceTexture> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C038: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 97C078: using guessed type int (__thiscall *NiTMap_char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0041F370) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_scalar_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C058: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiTexturingProperty___char const __NiPointer_NiTexturingProperty_____vftable_)(void *p, char);

//----- (0041F3B0) --------------------------------------------------------
void *__thiscall NiTMap<char_const___NiPointer<NiTexturingProperty>>::_scalar_deleting_destructor_(NiTMap<char const *,NiPointer<NiTexturingProperty> > *this, unsigned int a2)
{
  NiTMap<char const *,NiPointer<NiTexturingProperty> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> >Vtbl *)&NiTMap<char_const___NiPointer<NiTexturingProperty>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiTexturingProperty> >,char const *,NiPointer<NiTexturingProperty> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiTexturingProperty>>_char_const___NiPointer<NiTexturingProperty>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C058: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiTexturingProperty___char const __NiPointer_NiTexturingProperty_____vftable_)(void *p, char);
// 97C0B8: using guessed type int (__thiscall *NiTMap_char const __NiPointer_NiTexturingProperty_____vftable_)(void *p, char);

//----- (0041F430) --------------------------------------------------------
void *__thiscall NiTStringMap<NiPointer<NiTexturingProperty>>::_vector_deleting_destructor_(NiTStringMap<NiPointer<NiTexturingProperty> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>::_NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiTexturingProperty>>_NiPointer<NiTexturingProperty>>(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0041F460) --------------------------------------------------------
void *__thiscall NiTStringMap<NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTStringMap<NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_NiTStringTemplateMap<NiTMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0041F490) --------------------------------------------------------
void *__thiscall ItemMixDataTab::_scalar_deleting_destructor_(ItemMixDataTab *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (ItemMixDataTabVtbl *)&ItemMixDataTab::_vftable_;
  ItemMixData::_ItemMixData(&this->baseclass_4);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C244: using guessed type int (__thiscall *ItemMixDataTab___vftable_)(void *p, char);

//----- (0041F4C0) --------------------------------------------------------
void __thiscall MixItemIcon::MixItemIcon(MixItemIcon *this)
{
  MixItemIcon *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MixItemIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MixItemIcon::_vftable_;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = -1;
  v1->m_pkSender = 0;
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  v1->m_pkFrameWork = 0;
  v1->m_bLock = 0;
}
// 97C24C: using guessed type int (__stdcall *MixItemIcon___vftable_)(int uiFlags);
// 97C26C: using guessed type int (__thiscall *MixItemIcon___vftable_)(void *p, char);

//----- (0041F550) --------------------------------------------------------
void __thiscall MixItemIcon::_MixItemIcon(MixItemIcon *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MixItemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MixItemIcon::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 97C24C: using guessed type int (__stdcall *MixItemIcon___vftable_)(int uiFlags);
// 97C26C: using guessed type int (__thiscall *MixItemIcon___vftable_)(void *p, char);

//----- (0041F570) --------------------------------------------------------
void __thiscall MixItemIcon::SetTranslucence(MixItemIcon *this)
{
  ItemIcon *v1; // esi@1

  v1 = (ItemIcon *)this;
  ItemIcon::SetBackPlaneColor(&this->baseclass_0, 175.0, 175.0, 175.0, 100.0);
  ItemIcon::SetTopPlaneColor(v1, 175.0, 175.0, 175.0, 100.0);
}

//----- (0041F5C0) --------------------------------------------------------
void __thiscall MixItemIcon::SetTransparency(MixItemIcon *this)
{
  ItemIcon *v1; // esi@1

  v1 = (ItemIcon *)this;
  ItemIcon::SetBackPlaneColor(&this->baseclass_0, 0.0, 0.0, 0.0, 0.0);
  ItemIcon::SetTopPlaneColor(v1, 0.0, 0.0, 0.0, 0.0);
}

//----- (0041F610) --------------------------------------------------------
MixItemIcon *__thiscall ItemMixWin::GetInsertedSlot(ItemMixWin *this, unsigned int _uiSlotNum)
{
  MixItemIcon *result; // eax@2

  if ( !_uiSlotNum )
  {
    result = this->m_apkItemIconWin[0];
    if ( result->m_uiSenderInvIndex != -1 )
      return result;
    return 0;
  }
  if ( _uiSlotNum == 1 )
  {
    result = this->m_apkItemIconWin[1];
    if ( result->m_uiSenderInvIndex == -1 )
      return 0;
  }
  else
  {
    if ( _uiSlotNum != 2 || (result = this->m_apkItemIconWin[2], result->m_uiSenderInvIndex == -1) )
      return 0;
  }
  return result;
}

//----- (0041F660) --------------------------------------------------------
bool __thiscall MixItemIcon::Create(MixItemIcon *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  MixItemIcon *v6; // esi@1
  bool result; // al@1

  v6 = this;
  this->m_pkFrameWork = pkFrameWork;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v6->m_uiInvIndex = uiInvIndex;
    ItemIcon::PlaneInit(&v6->baseclass_0);
    ItemIcon::SetBackPlaneColor(&v6->baseclass_0, 0.0, 0.0, 0.0, 0.0);
    ItemIcon::SetTopPlaneColor(&v6->baseclass_0, 0.0, 0.0, 0.0, 0.0);
    ItemIcon::ShowLotText(&v6->baseclass_0, 0);
    result = 1;
  }
  return result;
}

//----- (0041F700) --------------------------------------------------------
bool __thiscall MixItemIcon::SetSenderInvSlotLock(MixItemIcon *this, bool _bLock)
{
  PgWin *v2; // eax@1
  bool result; // al@2
  unsigned int v4; // ecx@3
  InvWin *v5; // ecx@4

  v2 = this->m_pkSender;
  if ( v2
    && (v4 = this->m_uiSenderInvIndex, v4 < 0xC0)
    && (v5 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v4 + 2])) != 0 )
  {
    InvWin::SetLock(v5, _bLock);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0041F740) --------------------------------------------------------
void __thiscall MixItemIcon::ReSetSlot(MixItemIcon *this)
{
  MixItemIcon *v1; // esi@1
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@1
  PgWin *v3; // eax@1
  unsigned int v4; // ecx@2
  InvWin *v5; // eax@3

  v1 = this;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  this->m_bLock = 0;
  ((void (__stdcall *)(_DWORD))v2)(1);
  v3 = v1->m_pkSender;
  if ( v3 )
  {
    v4 = v1->m_uiSenderInvIndex;
    if ( v4 < 0xC0 )
    {
      v5 = (InvWin *)LODWORD(v3[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v4 + 2]);
      if ( v5 )
        InvWin::SetLock(v5, 0);
    }
  }
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_pkSender = 0;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  ItemIcon::SetBackPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
  ItemIcon::SetTopPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
}

//----- (0041F7E0) --------------------------------------------------------
void __thiscall MixItemIcon::SetTemporaryIcon(MixItemIcon *this, unsigned __int16 _pItemId)
{
  MixItemIcon *v2; // esi@1
  Item *v3; // eax@2
  ItemViewInfo *v4; // edi@3
  NiRefObjectVtbl *v5; // ebx@3
  unsigned int v6; // ST04_4@3
  NiSourceTexture *v7; // eax@3
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // eax@3

  v2 = this;
  if ( _pItemId != -1 && (v3 = Item::Create(_pItemId)) != 0 )
  {
    v4 = v3->m_pkViewInfo;
    ItemIcon::SetItem(&v2->baseclass_0, v3, 1);
    v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = v4->IconIndex;
    v7 = IconMgr::GetTexture(v4->IconFile);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v5[146].__vecDelDtor)(v2, v7, v6, 32, 32);
    MixItemIcon::SetTranslucence(v2);
    v8 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v2->m_bLock = 0;
    v8(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u);
  }
  else
  {
    MixItemIcon::ReSetSlot(v2);
  }
}

//----- (0041F870) --------------------------------------------------------
void __thiscall MixItemIcon::OnFirstHitWin(MixItemIcon *this)
{
  MixItemIcon *v1; // esi@1
  PgWin *v2; // eax@5
  unsigned int v3; // ecx@6
  ItemIcon *v4; // ecx@7
  Item *v5; // edi@8
  Item *v6; // eax@9
  ItemInfoWin *v7; // ecx@11

  v1 = this;
  if ( !this->m_bLock )
  {
    if ( ItemIcon::GetItem(&this->baseclass_0) )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    else
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2 = v1->m_pkSender;
    if ( v2 )
    {
      v3 = v1->m_uiSenderInvIndex;
      if ( v3 < 0xC0 )
      {
        v4 = (ItemIcon *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
        if ( v4 )
        {
          v5 = ItemIcon::GetItem(v4);
          if ( v5 )
          {
            v6 = ItemIcon::GetItem(&v1->baseclass_0);
            if ( v6 )
            {
              if ( v5->m_kStruct.itemid == v6->m_kStruct.itemid )
              {
                v7 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
                if ( v7 )
                {
                  ItemInfoWin::SetItemInfo(v7, v6);
                  PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
                }
              }
            }
          }
        }
      }
    }
  }
}

//----- (0041F910) --------------------------------------------------------
void __thiscall ItemMixWin::UpdateMeWin(ItemMixWin *this, float fCurTime)
{
  ItemMixWin *v2; // esi@1
  MixItemIcon *v3; // eax@1
  Item *v4; // eax@4
  ItemInfoWin *v5; // ecx@4
  MixItemIcon *v6; // eax@7
  MixItemIcon *v7; // eax@9
  Item *v8; // eax@13
  ItemInfoWin *v9; // ecx@13
  MixItemIcon *v10; // eax@17
  unsigned __int16 v11; // ax@19
  Item *v12; // eax@19
  ItemInfoWin *v13; // ecx@19
  MixItemIcon *v14; // eax@23
  unsigned __int16 v15; // ax@25
  Item *v16; // eax@25
  ItemInfoWin *v17; // ecx@25
  PgWinSpr *v18; // ebx@29
  NiRefObjectVtbl *v19; // edi@29
  char v20; // al@29
  SpEffect *v21; // ecx@30

  v2 = this;
  v3 = this->m_apkItemIconWin[2];
  if ( v3->m_uiSenderInvIndex == -1 || !v3 )
  {
    if ( (unsigned __int8)((int (__stdcall *)(int, int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
    {
      v4 = Item::Create(LOWORD(v2->m_uiAddItemID));
      v5 = (ItemInfoWin *)v2->m_apkItemIconWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
      if ( v5 )
      {
        if ( v4 )
          ItemInfoWin::SetItemInfo(v5, v4);
      }
    }
  }
  v6 = v2->m_apkItemIconWin[0];
  if ( v6->m_uiSenderInvIndex != -1 && v6 || (v7 = v2->m_apkItemIconWin[1], v7->m_uiSenderInvIndex != -1) && v7 )
  {
    if ( (unsigned __int8)((int (__stdcall *)(int, int))v2->m_apkItemIconWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
    {
      if ( v2->m_uiResultItemID != -1 )
      {
        v8 = Item::Create(LOWORD(v2->m_uiResultItemID));
        v9 = (ItemInfoWin *)v2->m_apkItemIconWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
        if ( v9 )
        {
          if ( v8 )
            ItemInfoWin::SetItemInfo(v9, v8);
        }
      }
    }
    if ( (unsigned __int8)((int (__stdcall *)(int, int))v2->m_apkItemIconWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
    {
      v10 = v2->m_apkItemIconWin[0];
      if ( v10->m_uiSenderInvIndex == -1 || !v10 )
      {
        v11 = ItemIcon::GetItemID(&v2->m_apkItemIconWin[1]->baseclass_0);
        v12 = Item::Create(v11);
        v13 = (ItemInfoWin *)v2->m_apkItemIconWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
        if ( v13 )
        {
          if ( v12 )
            ItemInfoWin::SetItemInfo(v13, v12);
        }
      }
    }
    if ( (unsigned __int8)((int (__stdcall *)(int, int))v2->m_apkItemIconWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
    {
      v14 = v2->m_apkItemIconWin[1];
      if ( v14->m_uiSenderInvIndex == -1 || !v14 )
      {
        v15 = ItemIcon::GetItemID(&v2->m_apkItemIconWin[0]->baseclass_0);
        v16 = Item::Create(v15);
        v17 = (ItemInfoWin *)v2->m_apkItemIconWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
        if ( v17 )
        {
          if ( v16 )
            ItemInfoWin::SetItemInfo(v17, v16);
        }
      }
    }
  }
  if ( !(unsigned __int8)((int (*)(void))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
  {
    v18 = v2->m_pkMixSpr.m_pObject;
    v19 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = ((int (*)(void))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)();
    v19[60].__vecDelDtor((NiRefObject *)v18, v20 == 0);
  }
  v21 = v2->m_apkEffect;
  if ( v21->m_bLive )
    SpEffect::Update(v21, fCurTime);
  else
    SpEffect::End(v21, v2->m_pAttachEffect.m_pObject);
}

//----- (0041FB30) --------------------------------------------------------
void __thiscall ItemMixWin::ResetAddItemIcon(ItemMixWin *this)
{
  MixItemIcon::SetTemporaryIcon(this->m_apkItemIconWin[2], LOWORD(this->m_uiAddItemID));
}

//----- (0041FB50) --------------------------------------------------------
void __thiscall ItemMixWin::SetDisableMixButton(ItemMixWin *this, bool bDisable)
{
  ItemMixWin *v2; // esi@1
  PgWinSpr *v3; // ebx@1
  NiRefObjectVtbl *v4; // edi@1
  char v5; // al@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bDisable == 0);
  v3 = v2->m_pkMixSpr.m_pObject;
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = ((int (*)(void))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)();
  v4[60].__vecDelDtor((NiRefObject *)v3, v5 == 0);
}

//----- (0041FBB0) --------------------------------------------------------
void __thiscall ItemMixWin::OnCancel(ItemMixWin *this)
{
  if ( this->m_pkMsgBox )
    this->m_pkMsgBox = 0;
  GameFrameWork::OnCloseItemMixWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
}

//----- (0041FBE0) --------------------------------------------------------
void __thiscall ItemMixWin::DirectMessage(ItemMixWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ItemMixWin *v4; // esi@1
  NiTListBase<NiTPointerAllocator<unsigned int>,NiDynamicEffect *>Vtbl *v5; // ecx@4
  void (__stdcall *v6)(_DWORD); // edx@4
  NiTListItem<NiDynamicEffect *> *v7; // ecx@4
  NiTListItem<NiDynamicEffect *> *v8; // edx@4
  NiTListItem<NiDynamicEffect *> *v9; // ecx@4
  NiTListItem<NiDynamicEffect *> *v10; // edx@4
  int v11; // ecx@4
  void (__stdcall *v12)(_DWORD); // edx@4

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
    {
      v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.vfptr;
      v6 = (void (__stdcall *)(_DWORD))*((_DWORD *)v5->__vecDelDtor + 60);
      LOBYTE(v5[37].NewItem) = 1;
      v6(0);
      v7 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_pkHead;
      v8 = v7->m_pkNext[20].m_pkNext;
      LOBYTE(v7[37].m_pkPrev) = 1;
      ((void (__stdcall *)(_DWORD))v8)(0);
      v9 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_pkTail;
      v10 = v9->m_pkNext[20].m_pkNext;
      LOBYTE(v9[37].m_pkPrev) = 1;
      ((void (__stdcall *)(_DWORD))v10)(0);
      v11 = *(_DWORD *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v12 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v11 + 240);
      *(_BYTE *)(v11 + 448) = 1;
      v12(0);
      GameFrameWork::NcItemMixItemReq(
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.x),
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.y),
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.z));
      v4->baseclass_0.baseclass_0.baseclass_0.___u3.m_iHeight = 0;
    }
  }
}

//----- (0041FCA0) --------------------------------------------------------
void __thiscall MixItemIcon::DoAction(MixItemIcon *this)
{
  MixItemIcon *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0041FCD0) --------------------------------------------------------
void __thiscall MixItemIcon::DoRAction(MixItemIcon *this)
{
  MixItemIcon *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0041FD00) --------------------------------------------------------
void __thiscall ItemMixWin::OnApply(ItemMixWin *this)
{
  ItemMixWin *v1; // esi@1
  char *v2; // eax@8
  char *v3; // eax@8
  MsgBox *v4; // eax@8

  v1 = this;
  if ( ItemIcon::GetItem(&this->m_apkItemIconWin[0]->baseclass_0) )
    v1->m_uiSlotItemInvNum[0] = LOBYTE(v1->m_apkItemIconWin[0]->m_uiSenderInvIndex);
  if ( ItemIcon::GetItem(&v1->m_apkItemIconWin[1]->baseclass_0) )
    v1->m_uiSlotItemInvNum[1] = LOBYTE(v1->m_apkItemIconWin[1]->m_uiSenderInvIndex);
  if ( ItemIcon::GetItem(&v1->m_apkItemIconWin[2]->baseclass_0) )
    v1->m_uiSlotItemInvNum[2] = LOBYTE(v1->m_apkItemIconWin[2]->m_uiSenderInvIndex);
  if ( ItemIcon::GetItem(&v1->m_apkItemIconWin[3]->baseclass_0) )
  {
    v2 = TextData3::Get(0x6C8BA3D6u);
    v3 = fs(v2);
    v4 = MsgBox::Modal(MSGBOX_OKCANCEL, v3);
    v1->m_pkMsgBox = v4;
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
}

//----- (0041FDC0) --------------------------------------------------------
void __thiscall ItemMixWin::_ItemMixWin(ItemMixWin *this)
{
  ItemMixWin *v1; // esi@1
  SpEffect *v2; // edi@1
  NiNode *v3; // ebx@2
  NiNode *v4; // edi@7
  PgWinSpr *v5; // edi@11

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemMixWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemMixWin::_vftable_;
  v2 = this->m_apkEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
    v1->m_apkEffect = 0;
  }
  v4 = v1->m_pAttachEffect.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v1->m_pkMixSpr.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97C4F0: using guessed type int (__stdcall *ItemMixWin___vftable_)(int uiFlags);
// 97C50C: using guessed type int (__thiscall *ItemMixWin___vftable_)(void *p, char);

//----- (0041FEF0) --------------------------------------------------------
MixItemIcon *__cdecl MixItemIcon::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  MixItemIcon *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x1DCu);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    MixItemIcon::MixItemIcon((MixItemIcon *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *, PgFrameWork *))(*(_DWORD *)v7 + 616))(
                          v7,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (MixItemIcon *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (00420030) --------------------------------------------------------
void __thiscall ItemMixWin::ItemMixWin(ItemMixWin *this)
{
  ItemMixWin *v1; // esi@1
  unsigned __int16 v2; // ax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v3; // [sp-2Ch] [bp-40h]@1
  int v4; // [sp-1Ch] [bp-30h]@1
  signed int v5; // [sp-18h] [bp-2Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // [sp+0h] [bp-14h]@1
  ItemMixWin *v7; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v1 = this;
  v7 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemMixWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemMixWin::_vftable_;
  v8 = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkContents = 0;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_pkMixSpr.m_pObject = 0;
  v1->m_apkEffect = 0;
  v1->m_pAttachEffect.m_pObject = 0;
  v6 = &v3;
  v1->m_pkMsgBox = 0;
  v5 = 15;
  v4 = 0;
  LOBYTE(v8) = 4;
  v3.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v3, "MixMinUpgrade", 0xDu);
  v1->m_uiMinMixItemLevel = CSingleDataMap::GetValue(&g_kSingleDataMap, v3);
  v6 = &v3;
  v5 = 15;
  v4 = 0;
  v3.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v3, "AddMixItem", 0xAu);
  v2 = CSingleDataMap::GetValue(&g_kSingleDataMap, v3);
  v1->m_uiResultItemID = -1;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_uiAddItemID = v2;
  v1->m_uiSlotItemInvNum[0] = 255;
  v1->m_uiSlotItemInvNum[1] = 255;
  v1->m_uiSlotItemInvNum[2] = 255;
  v1->m_uiSlotItemInvNum[3] = 255;
  v1->m_apkItemIconWin[0] = 0;
  v1->m_apkItemIconWin[1] = 0;
  v1->m_apkItemIconWin[2] = 0;
  v1->m_apkItemIconWin[3] = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97C4F0: using guessed type int (__stdcall *ItemMixWin___vftable_)(int uiFlags);
// 97C50C: using guessed type int (__thiscall *ItemMixWin___vftable_)(void *p, char);

//----- (00420180) --------------------------------------------------------
ItemMixWin *__cdecl ItemMixWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ItemMixWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1F0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ItemMixWin::ItemMixWin((ItemMixWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ItemMixWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004202B0) --------------------------------------------------------
void __thiscall ItemMixWin::SetResultItemSlot(ItemMixWin *this, Item *pMaterialItem)
{
  ItemMixWin *v2; // edi@1
  ItemInfo *v3; // eax@2
  char *v4; // eax@3
  char *v5; // eax@5
  unsigned __int16 *v6; // esi@5
  MixItemIcon *v7; // ecx@8

  v2 = this;
  if ( pMaterialItem )
  {
    v3 = pMaterialItem->m_pkInfo;
    if ( v3 )
      v4 = v3->InxName;
    else
      v4 = 0;
    v5 = ItemMixDataTab::GetResultItem(&g_kItemMixDataTab, v4);
    v6 = (unsigned __int16 *)ItemInfoTab::GetByInxName(v5);
    if ( v6 )
      MixItemIcon::SetTemporaryIcon(v2->m_apkItemIconWin[3], *v6);
    v2->m_uiResultItemID = *v6;
  }
  else
  {
    v7 = this->m_apkItemIconWin[3];
    v2->m_uiResultItemID = -1;
    MixItemIcon::ReSetSlot(v7);
    v2->m_uiSlotItemInvNum[3] = 255;
  }
}

//----- (00420330) --------------------------------------------------------
bool __thiscall ItemMixWin::DropItemSlot(ItemMixWin *this, unsigned int _uiReceiverInvIndex, PgWinDrop *_pkDrop)
{
  void *v3; // eax@1
  ItemMixWin *v4; // edi@1
  Item *v6; // ebx@3
  MixItemIcon *v7; // esi@8
  GameFrameWork *v8; // edi@9
  char *v9; // eax@9
  char *v10; // eax@9
  ItemInfo *v11; // eax@10
  char *v12; // eax@11
  GameFrameWork *v13; // edi@16
  char *v14; // eax@16
  char *v15; // eax@16
  MixItemIcon *v16; // ecx@18
  MixItemIcon *v17; // eax@23
  MixItemIcon *v18; // eax@25
  MixItemIcon *v19; // eax@27
  Item *v20; // eax@31
  GameFrameWork *v21; // edi@33
  char *v22; // eax@33
  unsigned int v23; // [sp-4h] [bp-10h]@14
  void *pkContents; // [sp+4h] [bp-8h]@1
  int iLevel; // [sp+8h] [bp-4h]@5
  NiRefObjectVtbl *_uiReceiverInvIndexa; // [sp+14h] [bp+8h]@31

  v3 = _pkDrop->m_pkContents;
  v4 = this;
  pkContents = v3;
  if ( !v3 )
    return 0;
  v6 = (Item *)*((_DWORD *)v3 + 5);
  if ( !v6 )
    return 0;
  iLevel = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[9].__vecDelDtor)(v6);
  if ( _uiReceiverInvIndex && _uiReceiverInvIndex != 1 )
  {
    if ( _uiReceiverInvIndex == 2 )
    {
      v7 = v4->m_apkItemIconWin[2];
      if ( v6->m_kStruct.itemid != v4->m_uiAddItemID )
      {
        Item::Create(LOWORD(v4->m_uiAddItemID));
        v8 = (GameFrameWork *)v4->baseclass_0.m_pkFrameWork;
        v9 = TextData3::Get(0x9EF2D52Bu);
        v10 = fs(v9);
        GameFrameWork::AddSysMsg(v8, v10);
        return 0;
      }
      goto LABEL_23;
    }
    return 0;
  }
  v11 = v6->m_pkInfo;
  if ( v11 )
    v12 = v11->InxName;
  else
    v12 = 0;
  if ( !ItemMixDataTab::IsMixItem(&g_kItemMixDataTab, v12) )
  {
    v23 = 1805354864;
LABEL_33:
    v21 = (GameFrameWork *)v4->baseclass_0.m_pkFrameWork;
    v22 = TextData3::Get(v23);
    GameFrameWork::AddSysMsg(v21, v22);
    return 0;
  }
  if ( iLevel < v4->m_uiMinMixItemLevel )
  {
    v13 = (GameFrameWork *)v4->baseclass_0.m_pkFrameWork;
    v14 = TextData3::Get(0xBD1B1B26u);
    v15 = fs(v14);
    GameFrameWork::AddSysMsg(v13, v15);
    return 0;
  }
  if ( _uiReceiverInvIndex )
  {
    v7 = v4->m_apkItemIconWin[1];
    v16 = v4->m_apkItemIconWin[0];
  }
  else
  {
    v7 = v4->m_apkItemIconWin[0];
    v16 = v4->m_apkItemIconWin[1];
  }
  if ( v16->m_uiSenderInvIndex != -1 && v16 )
  {
    _uiReceiverInvIndexa = v6->baseclass_0.vfptr;
    v20 = ItemIcon::GetItem(&v16->baseclass_0);
    if ( !(unsigned __int8)_uiReceiverInvIndexa[6].__vecDelDtor((NiRefObject *)v6, (unsigned int)v20) )
    {
      v23 = 1236852936;
      goto LABEL_33;
    }
  }
  else
  {
    MixItemIcon::SetTemporaryIcon(v16, v6->m_kStruct.itemid);
    ItemMixWin::SetResultItemSlot(v4, v6);
  }
LABEL_23:
  MixItemIcon::ReSetSlot(v7);
  v7->m_uiSenderType = *((_DWORD *)pkContents + 2);
  v7->m_uiSenderInvIndex = *((_DWORD *)pkContents + 3);
  v7->m_pkSender = _pkDrop->m_pkSender;
  MixItemIcon::SetSenderInvSlotLock(v7, 1);
  ItemIcon::SetItem(&v7->baseclass_0, v6, 1);
  v17 = v4->m_apkItemIconWin[0];
  if ( v17->m_uiSenderInvIndex != -1 )
  {
    if ( v17 )
    {
      v18 = v4->m_apkItemIconWin[1];
      if ( v18->m_uiSenderInvIndex != -1 )
      {
        if ( v18 )
        {
          v19 = v4->m_apkItemIconWin[2];
          if ( v19->m_uiSenderInvIndex != -1 )
          {
            if ( v19 )
            {
              ItemMixWin::SetDisableMixButton(v4, 0);
              MixItemIcon::SetTransparency(v4->m_apkItemIconWin[3]);
            }
          }
        }
      }
    }
  }
  return 1;
}

//----- (00420560) --------------------------------------------------------
void __thiscall ItemMixWin::ResetAllData(ItemMixWin *this)
{
  ItemMixWin *v1; // esi@1
  MixItemIcon *v2; // ecx@1

  v1 = this;
  MixItemIcon::ReSetSlot(this->m_apkItemIconWin[0]);
  MixItemIcon::ReSetSlot(v1->m_apkItemIconWin[1]);
  MixItemIcon::ReSetSlot(v1->m_apkItemIconWin[2]);
  v2 = v1->m_apkItemIconWin[3];
  v1->m_uiSlotItemInvNum[0] = 255;
  v1->m_uiSlotItemInvNum[1] = 255;
  v1->m_uiSlotItemInvNum[2] = 255;
  v1->m_uiResultItemID = -1;
  MixItemIcon::ReSetSlot(v2);
  v1->m_uiSlotItemInvNum[3] = 255;
}

//----- (004205C0) --------------------------------------------------------
void __thiscall ItemMixWin::ShowMixResult(ItemMixWin *this, bool bSuccess)
{
  ItemMixWin *v2; // esi@1
  MixItemIcon *v3; // ecx@1
  char *v4; // eax@7
  char *v5; // eax@7
  PgWinSpr *v6; // ebx@7
  NiRefObjectVtbl *v7; // edi@7
  char v8; // al@7
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@8
  MixItemIcon *v10; // ecx@8
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // eax@8
  MixItemIcon *v12; // ecx@8
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@8
  MixItemIcon *v14; // ecx@8
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@8
  GameFrameWork *bSuccessa; // [sp+Ch] [bp+8h]@7

  v2 = this;
  v3 = this->m_apkItemIconWin[0];
  if ( bSuccess == 1 )
  {
    if ( v3->m_uiSenderInvIndex != -1 && v3 )
      ItemIcon::GetItem(&v3->baseclass_0);
    if ( v2->m_uiResultItemID != -1 )
      Item::Create(LOWORD(v2->m_uiResultItemID));
    SpEffect::Start(v2->m_apkEffect, v2->m_pAttachEffect.m_pObject);
    bSuccessa = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
    v4 = TextData3::Get(0x78FFDAE2u);
    v5 = fs(v4);
    GameFrameWork::AddSysMsg(bSuccessa, v5);
    ItemMixWin::ResetAllData(v2);
    MixItemIcon::SetTemporaryIcon(v2->m_apkItemIconWin[2], LOWORD(v2->m_uiAddItemID));
    ((void (__stdcall *)(_DWORD))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v6 = v2->m_pkMixSpr.m_pObject;
    v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = ((int (*)(void))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)();
    v7[60].__vecDelDtor((NiRefObject *)v6, v8 == 0);
  }
  else
  {
    v9 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v3->m_bLock = 0;
    ((void (__stdcall *)(signed int))v9)(1);
    v10 = v2->m_apkItemIconWin[1];
    v11 = v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v10->m_bLock = 0;
    ((void (__stdcall *)(signed int))v11)(1);
    v12 = v2->m_apkItemIconWin[2];
    v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v12->m_bLock = 0;
    ((void (__stdcall *)(signed int))v13)(1);
    v14 = v2->m_apkItemIconWin[3];
    v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v14->m_bLock = 0;
    ((void (__stdcall *)(signed int))v15)(1);
  }
}

//----- (00420720) --------------------------------------------------------
void __thiscall ItemMixWin::OnSlotLClick(ItemMixWin *this, unsigned int _uiSlotIndex)
{
  ItemMixWin *v2; // esi@1
  MixItemIcon *v3; // ebx@2
  MixItemIcon *v4; // edi@2
  Item *v5; // eax@15
  unsigned int v6; // ecx@16
  MixItemIcon *v7; // ecx@20
  MixItemIcon *v8; // ecx@22
  PgWinSpr *v9; // ebx@25
  NiRefObjectVtbl *v10; // edi@25
  char v11; // al@25
  unsigned __int16 v12; // [sp-4h] [bp-14h]@20
  char bOtherItemSetting; // [sp+Fh] [bp-1h]@1

  v2 = this;
  bOtherItemSetting = 1;
  if ( !_uiSlotIndex )
  {
    v3 = this->m_apkItemIconWin[0];
    v4 = this->m_apkItemIconWin[1];
LABEL_5:
    if ( v4->m_uiSenderInvIndex == -1 || !v4 )
      bOtherItemSetting = 0;
    goto LABEL_14;
  }
  if ( _uiSlotIndex == 1 )
  {
    v3 = this->m_apkItemIconWin[1];
    v4 = this->m_apkItemIconWin[0];
    goto LABEL_5;
  }
  if ( _uiSlotIndex != 2 || (v3 = this->m_apkItemIconWin[2], v3->m_uiSenderInvIndex == -1) || !v3 )
    return;
  v4 = this->m_apkItemIconWin[0];
  if ( v4->m_uiSenderInvIndex == -1 || !v4 )
    v4 = this->m_apkItemIconWin[1]->m_uiSenderInvIndex != -1 ? this->m_apkItemIconWin[1] : 0;
LABEL_14:
  if ( v3 )
  {
    v5 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v5 )
    {
      v2->m_kDropContents.m_eSenderType = v3->m_uiSenderType;
      v2->m_kDropContents.m_eType = 0;
      v6 = v3->m_uiSenderInvIndex;
      v2->m_kDropContents.m_apvParam[0] = v5;
      v2->m_kDropContents.m_uiSenderIndex = v6;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(Item *))v5->baseclass_0.vfptr[3].__vecDelDtor)(v5);
      v2->m_kDrop.m_pkSender = v3->m_pkSender;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      MixItemIcon::ReSetSlot(v3);
      if ( _uiSlotIndex && _uiSlotIndex != 1 )
      {
        if ( !v4 )
          ItemMixWin::ResetAllData(v2);
        MixItemIcon::ReSetSlot(v3);
        v7 = v2->m_apkItemIconWin[2];
        v12 = LOWORD(v2->m_uiAddItemID);
      }
      else
      {
        if ( !bOtherItemSetting )
        {
          MixItemIcon::ReSetSlot(v4);
          v8 = v2->m_apkItemIconWin[3];
          v2->m_uiResultItemID = -1;
          MixItemIcon::ReSetSlot(v8);
          v2->m_uiSlotItemInvNum[3] = 255;
LABEL_25:
          MixItemIcon::SetTranslucence(v2->m_apkItemIconWin[3]);
          ((void (__stdcall *)(_DWORD))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          v9 = v2->m_pkMixSpr.m_pObject;
          v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = ((int (*)(void))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)();
          v10[60].__vecDelDtor((NiRefObject *)v9, v11 == 0);
          return;
        }
        v12 = ItemIcon::GetItemID(&v4->baseclass_0);
        v7 = v3;
      }
      MixItemIcon::SetTemporaryIcon(v7, v12);
      goto LABEL_25;
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (004208E0) --------------------------------------------------------
void __thiscall ItemMixWin::OnClose(ItemMixWin *this)
{
  ItemMixWin *v1; // esi@1
  MsgBox *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkMsgBox;
  if ( v2 )
  {
    MsgBox::Close(v2);
    v1->m_pkMsgBox = 0;
  }
  SpEffect::End(v1->m_apkEffect, v1->m_pAttachEffect.m_pObject);
  ItemMixWin::ResetAllData(v1);
}

//----- (00420920) --------------------------------------------------------
bool __thiscall MixItemIcon::EatDropInstance(MixItemIcon *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  MixItemIcon *v4; // esi@1
  void *v6; // eax@4
  int v7; // ecx@5
  GameFrameWork *v8; // esi@6
  char *v9; // eax@6
  PgWin *v10; // eax@9

  v4 = this;
  if ( this->m_bLock )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( *pkDrop )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( !*((_DWORD *)v6 + 4) )
    {
      v7 = *((_DWORD *)v6 + 2);
      if ( v7 == 1 )
      {
        v8 = (GameFrameWork *)v4->m_pkFrameWork;
        v9 = TextData3::Get(0x6A928276u);
        GameFrameWork::AddSysMsg(v8, v9);
        return 0;
      }
      if ( !v7 )
      {
        if ( *((_DWORD *)v6 + 5) )
        {
          v10 = PgWin::GetParentWin(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          if ( ItemMixWin::DropItemSlot((ItemMixWin *)v10, v4->m_uiInvIndex, *pkDrop) )
          {
            MixItemIcon::SetTransparency(v4);
            return 1;
          }
        }
      }
    }
    PgCursor::ms_bKeepDrop = 1;
  }
  return 0;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (004209C0) --------------------------------------------------------
bool __thiscall ItemMixWin::Create(ItemMixWin *this, PgFrameWork *pkFrameWork)
{
  ItemMixWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  NiSourceTexture *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // eax@13
  D3DXCOLOR v15; // ST44_16@13
  char *v16; // eax@13
  D3DXCOLOR v17; // ST44_16@13
  char *v18; // eax@13
  PgWinBut *v19; // ecx@13
  PgWinSpr *v20; // eax@13
  PgWinSpr *v21; // ecx@13
  char *v22; // eax@21
  PgSprData *v23; // eax@21
  char *v24; // eax@21
  MixItemIcon *v25; // eax@21
  PgSprData *v26; // eax@21
  char *v27; // eax@21
  MixItemIcon *v28; // eax@21
  PgSprData *v29; // eax@21
  PgWinSpr *v30; // eax@21
  NiRefObjectVtbl *v31; // edx@21
  MixItemIcon *v32; // eax@21
  void *v33; // eax@21
  PgWinSpr *v34; // eax@21
  NiRefObjectVtbl *v35; // edx@21
  char *v36; // eax@23
  MixItemIcon *v37; // eax@23
  char *v38; // eax@25
  NiNode *v39; // esi@26
  void *v40; // edi@31
  NiObject *v41; // eax@32
  NiRefObjectVtbl *v42; // eax@35
  PgWinSpr *v43; // ebx@36
  NiRefObjectVtbl *v44; // edi@36
  char v45; // al@36
  NiNode *v46; // esi@37
  NiNode *v47; // esi@40
  const char *v48; // [sp+48h] [bp-70h]@11
  int *v49; // [sp+4Ch] [bp-6Ch]@11
  int *v50; // [sp+50h] [bp-68h]@11
  NiSourceTexture *v51; // [sp+54h] [bp-64h]@11
  UIUtil ui; // [sp+68h] [bp-50h]@10
  float v53; // [sp+7Ch] [bp-3Ch]@35
  float v54; // [sp+80h] [bp-38h]@35
  float v55; // [sp+84h] [bp-34h]@35
  PgSprData *pkSprData; // [sp+88h] [bp-30h]@21
  PgWin *FirstSlot; // [sp+8Ch] [bp-2Ch]@13
  int iXPos; // [sp+90h] [bp-28h]@13
  int iYPos; // [sp+94h] [bp-24h]@13
  NiPointer<NiNode> pkNiNodePtr; // [sp+98h] [bp-20h]@23
  PgWinSpr *EffectSlot; // [sp+9Ch] [bp-1Ch]@13
  NiPointer<NiNode> spNode; // [sp+A0h] [bp-18h]@1
  int iLeft; // [sp+A4h] [bp-14h]@4
  int iTop; // [sp+A8h] [bp-10h]@4
  int v65; // [sp+B4h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v65 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ItemMix.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "ItemMixWin", 0) )
  {
    v6 = spNode.m_pObject;
    v65 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = iLeft;
  v9 = iTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v65) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v8, v9);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v51 = v10;
    v50 = &iTop;
    v49 = &iLeft;
    v48 = "Theme";
  }
  else
  {
    v51 = 0;
    v50 = &iTop;
    v49 = &iLeft;
    v48 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v48, v49, v50, v51);
  PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = MenuTexMgr::GetTexture(0x1Du);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plan01", &iLeft, &iTop, v12);
  PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  *(_QWORD *)&v15.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v15.b = qword_A746E8;
  v16 = TextData3::Get(0x36483349u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v16, COERCE_D3DXCOLOR(v15.r), 5u);
  UIUtil::CreateBtn(&ui, 0xDu, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  v2->m_pkMixBtn = UIUtil::CreateBtn(&ui, 0xCu, "OkNor", "OkClick", "OkOver", "OkDisable", 0);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v18 = TextData3::Get(0x7D90A894u);
  UIUtil::CreateAttachedText(&ui, &v2->m_pkMixBtn->baseclass_0.baseclass_0, v18, COERCE_D3DXCOLOR(v17.r), 5u);
  v19 = v2->m_pkMixBtn;
  iXPos = 0;
  iYPos = 0;
  ((void (__stdcall *)(int *, int *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
    &iXPos,
    &iYPos);
  v20 = UIUtil::CreateSpr(&ui, "OkNor", 0);
  v21 = v2->m_pkMixSpr.m_pObject;
  EffectSlot = v20;
  FirstSlot = (PgWin *)v21;
  if ( v21 != v20 )
  {
    if ( v21 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && FirstSlot )
        ((void (__stdcall *)(signed int))FirstSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
      v20 = EffectSlot;
    }
    v2->m_pkMixSpr.m_pObject = v20;
    if ( v20 )
      InterlockedIncrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__stdcall *)(int, int))v2->m_pkMixSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    iXPos,
    iYPos);
  v2->m_pkMixSpr.m_pObject->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  FirstSlot = (PgWin *)v2->m_pkMixSpr.m_pObject;
  v22 = TextData3::Get(0x6DA5857Bu);
  PgWin::SetToolTipWinText(FirstSlot, v22);
  ((void (__stdcall *)(_DWORD))v2->m_pkMixSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.0);
  ((void (__stdcall *)(signed int))v2->m_pkMixSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MixItemSlot01", &iLeft, &iTop, 0);
  FirstSlot = (PgWin *)PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  FirstSlot->m_pkToolTipWin = g_pkToolTipWin;
  v24 = TextData3::Get(0xD962211Eu);
  PgWin::SetToolTipWinText(FirstSlot, v24);
  v25 = MixItemIcon::CreateWin(iLeft - v8 + 1, iTop - v9 + 1, 0, &v2->baseclass_0.baseclass_0.baseclass_0, pkFrameWork);
  v2->m_apkItemIconWin[0] = v25;
  v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
  ((void (__stdcall *)(signed int))v2->m_apkItemIconWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
  ((void (__stdcall *)(signed int))v2->m_apkItemIconWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
  v2->m_apkItemIconWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
  IconWin::ShowFocus(&v2->m_apkItemIconWin[0]->baseclass_0.baseclass_0, 1);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MixItemSlot02", &iLeft, &iTop, 0);
  FirstSlot = (PgWin *)PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  FirstSlot->m_pkToolTipWin = g_pkToolTipWin;
  v27 = TextData3::Get(0xD962211Eu);
  PgWin::SetToolTipWinText(FirstSlot, v27);
  v28 = MixItemIcon::CreateWin(iLeft - v8 + 1, iTop - v9 + 1, 1u, &v2->baseclass_0.baseclass_0.baseclass_0, pkFrameWork);
  v2->m_apkItemIconWin[1] = v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
  ((void (__stdcall *)(signed int))v2->m_apkItemIconWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
  ((void (__stdcall *)(signed int))v2->m_apkItemIconWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
  v2->m_apkItemIconWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
  IconWin::ShowFocus(&v2->m_apkItemIconWin[1]->baseclass_0.baseclass_0, 1);
  v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MaterialSlot", &iLeft, &iTop, 0);
  v30 = PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v29, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v31 = v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  FirstSlot = (PgWin *)v30;
  v31[60].__vecDelDtor((NiRefObject *)v30, 1u);
  ((void (__stdcall *)(signed int))FirstSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v32 = MixItemIcon::CreateWin(iLeft - v8 + 1, iTop - v9 + 1, 2u, &v2->baseclass_0.baseclass_0.baseclass_0, pkFrameWork);
  v2->m_apkItemIconWin[2] = v32;
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
  ((void (__stdcall *)(signed int))v2->m_apkItemIconWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
  ((void (__stdcall *)(signed int))v2->m_apkItemIconWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
  v2->m_apkItemIconWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
  IconWin::ShowFocus(&v2->m_apkItemIconWin[2]->baseclass_0.baseclass_0, 1);
  v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CplMixItem", &iLeft, &iTop, 0);
  pkSprData = (PgSprData *)v33;
  v34 = PgWinSpr::CreateWin(iLeft - v8, iTop - v9, (PgSprData *)v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  EffectSlot = v34;
  v35[69].__vecDelDtor((NiRefObject *)v34, COERCE_UNSIGNED_INT(0.0));
  ((void (__stdcall *)(signed int))EffectSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  FirstSlot = (PgWin *)EffectSlot;
  InterlockedIncrement((volatile LONG *)&EffectSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  LOBYTE(v65) = 2;
  NiPointer<NiActorManager>::operator_(
    (NiPointer<NiPixelData> *)&v2->m_pAttachEffect,
    (NiPointer<NiPixelData> *)&FirstSlot);
  LOBYTE(v65) = 1;
  if ( !InterlockedDecrement((volatile LONG *)&EffectSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    ((void (__stdcall *)(signed int))EffectSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  EffectSlot = PgWinSpr::CreateWin(iLeft - v8, iTop - v9, pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  EffectSlot->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v36 = TextData3::Get(0xD4622226u);
  PgWin::SetToolTipWinText(&EffectSlot->baseclass_0, v36);
  ((void (__stdcall *)(signed int))EffectSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))EffectSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v37 = MixItemIcon::CreateWin(iLeft - v8 + 1, iTop - v9 + 1, 3u, &v2->baseclass_0.baseclass_0.baseclass_0, pkFrameWork);
  v2->m_apkItemIconWin[3] = v37;
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
  v2->m_apkItemIconWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  pkNiNodePtr.m_pObject = 0;
  LOBYTE(v65) = 3;
  if ( !Folder::m_bInit )
    Folder::Init();
  v38 = Folder::Merge(&Folder::m_acEffect, "SUCC_1.nif");
  PgUtil::LoadNodeNifFile(v38, &pkNiNodePtr, 0);
  if ( pkNiNodePtr.m_pObject )
  {
    v40 = operator new(0x44u);
    LOBYTE(v65) = 4;
    if ( v40 )
    {
      v41 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      SpEffect::SpEffect((SpEffect *)v40, (NiNode *)v41);
    }
    else
    {
      v41 = 0;
    }
    LOBYTE(v65) = 3;
    v2->m_apkEffect = (SpEffect *)v41;
    if ( v41 )
    {
      v42 = v41->baseclass_0.vfptr;
      v53 = 0.0;
      v54 = 0.0;
      *(float *)&v42[22].__vecDelDtor = 0.0;
      v55 = 1000.0;
      *(float *)&v42[23].__vecDelDtor = 0.0;
      *(float *)&v42[24].__vecDelDtor = 1000.0;
      v2->m_apkEffect->m_bClamp = 0;
    }
    ((void (__thiscall *)(ItemMixWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
    ItemMixWin::ResetAllData(v2);
    MixItemIcon::SetTemporaryIcon(v2->m_apkItemIconWin[2], LOWORD(v2->m_uiAddItemID));
    ((void (__stdcall *)(_DWORD))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v43 = v2->m_pkMixSpr.m_pObject;
    v44 = v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v45 = ((int (__thiscall *)(PgWinBut *))v2->m_pkMixBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)(v2->m_pkMixBtn);
    v44[60].__vecDelDtor((NiRefObject *)v43, v45 == 0);
    LOBYTE(v65) = 1;
    if ( pkNiNodePtr.m_pObject )
    {
      v46 = pkNiNodePtr.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v46 )
          v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
      }
    }
    LOBYTE(v65) = 0;
    UIUtil::_UIUtil(&ui);
    v47 = spNode.m_pObject;
    v65 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v47 )
      v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v65) = 0;
    UIUtil::_UIUtil(&ui);
    v39 = spNode.m_pObject;
    v65 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v39 )
      v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v39, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004212C0) --------------------------------------------------------
void __thiscall ItemMixWin::OnCommand(ItemMixWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      ItemMixWin::OnSlotLClick(this, lParam);
      break;
    case 0xCu:
      ItemMixWin::OnApply(this);
      break;
    case 0xDu:
      if ( this->m_pkMsgBox )
        this->m_pkMsgBox = 0;
      GameFrameWork::OnCloseItemMixWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
      break;
    default:
      return;
  }
}

//----- (00421320) --------------------------------------------------------
void __thiscall PgWinDrop::_PgWinDrop(PgWinDrop *this)
{
  this->vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);

//----- (00421330) --------------------------------------------------------
void *__thiscall PgWinDrop::_scalar_deleting_destructor_(PgWinDrop *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);

//----- (00421360) --------------------------------------------------------
void __thiscall DropContents::_DropContents(DropContents *this)
{
  this->vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
}
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);

//----- (00421370) --------------------------------------------------------
void *__thiscall DropContents::_scalar_deleting_destructor_(DropContents *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);

//----- (004213A0) --------------------------------------------------------
InvWin *__thiscall InventoryWin::GetInvWin(InventoryWin *this, unsigned int uiIndex)
{
  InvWin *result; // eax@2

  if ( uiIndex < 0xC0 )
    result = this->m_apkInvWin[uiIndex];
  else
    result = 0;
  return result;
}

//----- (004213C0) --------------------------------------------------------
NiPointer<NiPixelData> *__thiscall NiPointer<NiActorManager>::operator_(NiPointer<NiPixelData> *this, NiPointer<NiPixelData> *ptr)
{
  NiPointer<NiPixelData> *v2; // edi@1
  NiPixelData *v3; // esi@1
  NiPixelData *v4; // eax@6

  v2 = this;
  v3 = this->m_pObject;
  if ( this->m_pObject != ptr->m_pObject )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v4 = ptr->m_pObject;
    v2->m_pObject = ptr->m_pObject;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount);
  }
  return v2;
}

//----- (00421410) --------------------------------------------------------
void *__thiscall MixItemIcon::_scalar_deleting_destructor_(MixItemIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MixItemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MixItemIcon::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C24C: using guessed type int (__stdcall *MixItemIcon___vftable_)(int uiFlags);
// 97C26C: using guessed type int (__thiscall *MixItemIcon___vftable_)(void *p, char);

//----- (00421450) --------------------------------------------------------
void *__thiscall ItemMixWin::_vector_deleting_destructor_(ItemMixWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ItemMixWin::_ItemMixWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00421480) --------------------------------------------------------
bool __thiscall ItemMixDataTab::IsMixItem(ItemMixDataTab *this, char *pcInxName)
{
  ItemMixDataTab *v2; // esi@1
  bool v4; // [sp+1h] [bp-2Dh]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+2h] [bp-2Ch]@1
  unsigned int v6; // [sp+1Eh] [bp-10h]@1
  int v7; // [sp+2Ah] [bp-4h]@1
  int v8; // [sp+2Eh] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcInxName, strlen(pcInxName));
  v7 = 0;
  v4 = ItemMixData::GetMixItemIndex(&v2->baseclass_4, &thisa) == 0;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  return v4 == 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00421530) --------------------------------------------------------
char *__thiscall ItemMixDataTab::GetResultItem(ItemMixDataTab *this, char *pcInxName)
{
  ItemMixDataTab *v2; // esi@1
  char *v3; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@1
  unsigned int v6; // [sp+1Ch] [bp-10h]@1
  int v7; // [sp+28h] [bp-4h]@1
  int v8; // [sp+2Ch] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcInxName, strlen(pcInxName));
  v7 = 0;
  v3 = (char *)ItemMixData::GetMixItemIndex(&v2->baseclass_4, &thisa);
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  return v3;
}
// A85C00: using guessed type int __security_cookie;

//----- (004215D0) --------------------------------------------------------
void __thiscall std::_List_val<ItemViewDummy___std::allocator<ItemViewDummy__>>::__List_val<ItemViewDummy___std::allocator<ItemViewDummy__>>(std::_List_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > *this)
{
  operator delete(*(void **)&this->baseclass_0.___u0.baseclass_0.dummy[0]);
}

//----- (004215E0) --------------------------------------------------------
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::clear(std::list<float,std::allocator<float> > *this)
{
  std::list<float,std::allocator<float> > *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2

  v1 = this;
  v2 = *(void ***)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (00421620) --------------------------------------------------------
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::clear(std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *this)
{
  std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *v1; // edi@1
  int v2; // esi@1
  int v3; // ebx@2

  v1 = this;
  v2 = **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_DWORD *)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  this->baseclass_0.baseclass_0._Mysize = 0;
  if ( v2 != *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v3 = *(_DWORD *)v2;
      std::_Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::__Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>((std::_Pair_base<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)(v2 + 8));
      operator delete((void *)v2);
      v2 = v3;
    }
    while ( v3 != *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (00421660) --------------------------------------------------------
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocato(std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *this)
{
  void **v1; // esi@1

  v1 = (void **)this;
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::clear(this);
  operator delete(*v1);
}

//----- (00421680) --------------------------------------------------------
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>(...)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *v3; // esi@1
  void *v4; // eax@1
  stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v5; // edx@2
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st *v6; // edi@2
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st *v7; // eax@2
  std::exception thisa; // [sp+0h] [bp-1Ch]@7
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *v11; // [sp+Ch] [bp-10h]@1
  int v12; // [sp+18h] [bp-4h]@2

  v3 = this;
  v11 = this;
  this->baseclass_0.___u0.baseclass_0.dummy[0] = _Parg->comp.baseclass_0.dummy[0];
  this->_List.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x30u);
  if ( !v4 )
  {
    _Parg = 0;
    std::exception::exception(&thisa, (const char *const *)&_Parg);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v4;
  *(_DWORD *)v4 = v4;
  *(_DWORD *)(*(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = 0;
  *(_DWORD *)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3->_Vec.baseclass_0._Mylast = 0;
  v3->_Vec.baseclass_0._Myend = 0;
  v5 = *(stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3->_Max_bucket_size = 1.0;
  v6 = *(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st **)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = v3->_Vec.baseclass_0._Mylast;
  LOBYTE(v12) = 1;
  _Parg = v5;
  if ( v6 != v7 )
    v3->_Vec.baseclass_0._Mylast = v6;
  __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
    (std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *)&v3->_Vec,
    *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0],
    0x10u,
    (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Parg);
  v3->_Mask = 7;
  v3->_Maxidx = 8;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00421770) --------------------------------------------------------
void __thiscall KDTeamScoreWin::ResetScore(KDTeamScoreWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1
  int v3; // ecx@6
  int v4; // ecx@8

  v1 = (char *)this->m_pkOneNum;
  v2 = 10;
  do
  {
    if ( *(_DWORD *)v1 )
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
    if ( *((_DWORD *)v1 + 10) )
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 30) + 256))(0);
    v3 = *((_DWORD *)v1 + 40);
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0);
    v4 = *((_DWORD *)v1 + 50);
    if ( v4 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 256))(0);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (004217E0) --------------------------------------------------------
void __thiscall KDTeamScoreWin::ResetWinFlag(KDTeamScoreWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1
  int v3; // ecx@2

  v1 = (char *)this->m_pkFlag[1];
  v2 = 5;
  do
  {
    v3 = *((_DWORD *)v1 - 5);
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0);
    if ( *(_DWORD *)v1 )
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (00421820) --------------------------------------------------------
void __thiscall KDTeamScoreWin::SetScore(KDTeamScoreWin *this, KQ_TEAM_TYPE uiTeam, unsigned int uiScore)
{
  KQ_TEAM_TYPE v3; // edi@1
  unsigned int v4; // esi@3
  unsigned int v5; // ebx@5
  signed int v6; // esi@5
  char *v7; // edi@5
  int v8; // ecx@6
  int v9; // ecx@16
  int v10; // [sp-Ch] [bp-10h]@8
  int v11; // [sp-Ch] [bp-10h]@13
  int v12; // [sp-Ch] [bp-10h]@18
  unsigned int nOneNumber; // [sp+Ch] [bp+8h]@5
  unsigned int nTenNumber; // [sp+10h] [bp+Ch]@5

  v3 = uiTeam;
  if ( !uiTeam || uiTeam == 1 )
  {
    v4 = uiScore;
    if ( uiScore > 0x3E7 )
      v4 = 999;
    nOneNumber = v4 % 0xA;
    v5 = v4 / 0x64;
    nTenNumber = v4 % 0x64 / 0xA;
    v6 = 0;
    v7 = (char *)this->m_pkTenNum[v3];
    do
    {
      v8 = *((_DWORD *)v7 - 20);
      if ( v8 )
      {
        v10 = v6 == nOneNumber;
        (*(void (__stdcall **)(int))(*(_DWORD *)v8 + 256))(v10);
      }
      if ( *(_DWORD *)v7 )
      {
        v11 = v6 == nTenNumber;
        (*(void (__stdcall **)(int))(**(_DWORD **)v7 + 256))(v11);
      }
      v9 = *((_DWORD *)v7 + 20);
      if ( v9 )
      {
        v12 = v6 == v5;
        (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 256))(v12);
      }
      ++v6;
      v7 += 4;
    }
    while ( v6 < 10 );
  }
}

//----- (00421900) --------------------------------------------------------
void __thiscall KDTeamScoreWin::SetWinFlag(KDTeamScoreWin *this, unsigned int uiTeam, unsigned int nWin)
{
  unsigned int v3; // ebx@4
  unsigned int v4; // esi@6
  char *v5; // edi@6
  int v6; // [sp-10h] [bp-10h]@9

  if ( this->m_bUseRound && (!uiTeam || uiTeam == 1) )
  {
    v3 = nWin;
    if ( nWin > 5 )
      v3 = 5;
    v4 = 0;
    v5 = (char *)this->m_pkFlag[uiTeam];
    do
    {
      if ( *(_DWORD *)v5 )
      {
        v6 = v4 < v3;
        (*(void (__stdcall **)(int))(**(_DWORD **)v5 + 256))(v6);
      }
      ++v4;
      v5 += 4;
    }
    while ( v4 < 5 );
  }
}

//----- (00421960) --------------------------------------------------------
void __thiscall KDTeamScoreWin::SetUseRound(KDTeamScoreWin *this, bool bUse)
{
  KDTeamScoreWin *v2; // esi@1
  PgWinText *v3; // ecx@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@2

  v2 = this;
  v3 = this->m_pkRoundTextWin.m_pObject;
  v2->m_bUseRound = bUse;
  if ( v3 )
  {
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( bUse == 1 )
    {
      ((void (__stdcall *)(_DWORD))v4)(1);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v4)(0);
      KDTeamScoreWin::ResetWinFlag(v2);
    }
  }
}

//----- (004219A0) --------------------------------------------------------
void __thiscall KDTeamScoreWin::SetTitleText(KDTeamScoreWin *this, char *acString)
{
  PgWinText *v2; // ecx@1

  v2 = this->m_pkScoreTextWin.m_pObject;
  if ( v2 )
  {
    if ( acString )
      ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acString);
  }
}

//----- (004219D0) --------------------------------------------------------
void __thiscall KDTeamScoreWin::_KDTeamScoreWin(KDTeamScoreWin *this)
{
  KDTeamScoreWin *v1; // esi@1
  PgWinText *v2; // edi@1
  PgWinText *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KDTeamScoreWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KDTeamScoreWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_pkFlag,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkHNum,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkTenNum,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkOneNum,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v2 = v1->m_pkScoreTextWin.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_pkRoundTextWin.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C7F4: using guessed type int (__stdcall *KDTeamScoreWin___vftable_)(int uiFlags);
// 97C814: using guessed type int (__thiscall *KDTeamScoreWin___vftable_)(void *p, char);

//----- (00421AF0) --------------------------------------------------------
void __thiscall KDTeamScoreWin::ResetRound(KDTeamScoreWin *this)
{
  KDTeamScoreWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  PgWinText *v3; // esi@2
  NiRefObjectVtbl *v4; // edi@2
  char *v5; // eax@2
  char *v6; // eax@2

  v1 = this;
  v2 = this->m_pkRoundTextWin.m_pObject;
  if ( v2 )
  {
    v1->m_bUseRound = 0;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    KDTeamScoreWin::ResetWinFlag(v1);
    v3 = v1->m_pkRoundTextWin.m_pObject;
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = TextData3::Get(0x3E5B283Cu);
    v6 = fs(v5);
    v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v6);
  }
}

//----- (00421B50) --------------------------------------------------------
void __thiscall KDTeamScoreWin::SetRound(KDTeamScoreWin *this, unsigned int nRound)
{
  PgWinText *v2; // edi@1
  NiRefObjectVtbl *v3; // esi@2
  char *v4; // eax@2
  char *v5; // eax@2

  v2 = this->m_pkRoundTextWin.m_pObject;
  if ( v2 )
  {
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = TextData3::Get(0x3E5B283Cu);
    v5 = fs(v4);
    v3[118].__vecDelDtor((NiRefObject *)v2, (unsigned int)v5);
  }
}

//----- (00421BA0) --------------------------------------------------------
void __thiscall KDTeamScoreWin::KDTeamScoreWin(KDTeamScoreWin *this)
{
  KDTeamScoreWin *v1; // ebx@1
  int v2; // edi@1
  PgWinText *v3; // esi@1
  PgWinText *v4; // esi@6
  int v5; // esi@13
  int v6; // esi@18
  int v7; // esi@23
  bool v8; // zf@29
  int v9; // edi@30
  int v10; // esi@32
  signed int v11; // [sp+4h] [bp-18h]@11
  signed int v12; // [sp+4h] [bp-18h]@31
  int v13; // [sp+8h] [bp-14h]@11
  int v14; // [sp+8h] [bp-14h]@30
  signed int v15; // [sp+Ch] [bp-10h]@12
  signed int v16; // [sp+Ch] [bp-10h]@30

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KDTeamScoreWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KDTeamScoreWin::_vftable_;
  v1->m_pkRoundTextWin.m_pObject = 0;
  v1->m_pkScoreTextWin.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_pkOneNum,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v2 = (int)v1->m_pkTenNum;
  _eh_vector_constructor_iterator_(
    v1->m_pkTenNum,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_pkHNum,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_pkFlag,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_bUseRound = 0;
  v3 = v1->m_pkRoundTextWin.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_pkRoundTextWin.m_pObject = 0;
  }
  v4 = v1->m_pkScoreTextWin.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_pkScoreTextWin.m_pObject = 0;
  }
  v13 = (int)v1->m_pkTenNum;
  v11 = 10;
  do
  {
    v15 = 2;
    do
    {
      v5 = *(_DWORD *)(v2 - 80);
      if ( v5 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        *(_DWORD *)(v2 - 80) = 0;
      }
      v6 = *(_DWORD *)v2;
      if ( *(_DWORD *)v2 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
        *(_DWORD *)v2 = 0;
      }
      v7 = *(_DWORD *)(v2 + 80);
      if ( v7 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
        *(_DWORD *)(v2 + 80) = 0;
      }
      v2 += 40;
      --v15;
    }
    while ( v15 );
    v2 = v13 + 4;
    v8 = v11-- == 1;
    v13 += 4;
  }
  while ( !v8 );
  v9 = (int)v1->m_pkFlag;
  v14 = (int)v1->m_pkFlag;
  v16 = 5;
  do
  {
    v12 = 2;
    do
    {
      v10 = *(_DWORD *)v9;
      if ( *(_DWORD *)v9 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v10 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        }
        *(_DWORD *)v9 = 0;
      }
      v9 += 20;
      --v12;
    }
    while ( v12 );
    v9 = v14 + 4;
    v8 = v16-- == 1;
    v14 += 4;
  }
  while ( !v8 );
}
// 97C7F4: using guessed type int (__stdcall *KDTeamScoreWin___vftable_)(int uiFlags);
// 97C814: using guessed type int (__thiscall *KDTeamScoreWin___vftable_)(void *p, char);

//----- (00421DF0) --------------------------------------------------------
void __thiscall KDTeamScoreWin::Reset(KDTeamScoreWin *this)
{
  KDTeamScoreWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  PgWinText *v3; // esi@2
  NiRefObjectVtbl *v4; // edi@2
  char *v5; // eax@2
  char *v6; // eax@2

  v1 = this;
  KDTeamScoreWin::ResetScore(this);
  KDTeamScoreWin::ResetWinFlag(v1);
  v2 = v1->m_pkRoundTextWin.m_pObject;
  if ( v2 )
  {
    v1->m_bUseRound = 0;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    KDTeamScoreWin::ResetWinFlag(v1);
    v3 = v1->m_pkRoundTextWin.m_pObject;
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = TextData3::Get(0x3E5B283Cu);
    v6 = fs(v5);
    v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v6);
  }
}

//----- (00421E60) --------------------------------------------------------
bool __thiscall KDTeamScoreWin::Create(KDTeamScoreWin *this, PgFrameWork *pkFrameWork)
{
  KDTeamScoreWin *v2; // ebx@1
  NiSourceTexture *v3; // eax@1
  NiTexturePalette *v4; // esi@1
  NiSourceTexture *v5; // edi@1
  char *v6; // eax@3
  PgSprData *v7; // eax@4
  NiNode *v8; // esi@5
  bool result; // al@9
  NiNode *v10; // esi@11
  int v11; // edi@16
  int v12; // esi@16
  PgSprData *v13; // eax@16
  PgSprData *v14; // eax@19
  PgWinSpr *v15; // eax@20
  PgFont *v16; // eax@21
  PgWinText *v17; // eax@21
  PgWinText *v18; // ecx@21
  NiRefObjectVtbl *v19; // edi@22
  char *v20; // eax@22
  char *v21; // eax@22
  PgFont *v22; // eax@23
  PgWinText *v23; // eax@23
  NiRefObjectVtbl *v24; // esi@24
  char *v25; // eax@24
  signed int v26; // edi@24
  NiNode *v27; // esi@25
  char *v28; // eax@25
  PgSprData *v29; // eax@25
  PgWinSpr *v30; // esi@26
  NiNode *v31; // esi@27
  char *v32; // eax@27
  PgSprData *v33; // eax@27
  PgWinSpr *v34; // eax@28
  NiD3DDefaultShader *v35; // esi@28
  NiNode *v36; // esi@29
  char *v37; // eax@29
  PgSprData *v38; // eax@29
  PgWinSpr *v39; // eax@30
  NiD3DDefaultShader *v40; // esi@30
  NiNode *v41; // esi@31
  char *v42; // eax@31
  PgSprData *v43; // eax@31
  PgWinSpr *v44; // eax@32
  NiD3DDefaultShader *v45; // esi@32
  NiNode *v46; // esi@33
  char *v47; // eax@33
  PgSprData *v48; // eax@33
  PgWinSpr *v49; // eax@34
  NiD3DDefaultShader *v50; // esi@34
  NiNode *v51; // esi@35
  char *v52; // eax@35
  PgSprData *v53; // eax@35
  PgWinSpr *v54; // eax@36
  PgWinSpr *v55; // esi@36
  NiD3DDefaultShader *v56; // ST68_4@37
  NiPointer<NiD3DDefaultShader> *v57; // esi@37
  signed int v58; // edi@38
  NiNode *v59; // esi@39
  char *v60; // eax@39
  PgSprData *v61; // eax@39
  PgWinSpr *v62; // esi@40
  NiNode *v63; // esi@41
  char *v64; // eax@41
  PgSprData *v65; // eax@41
  PgWinSpr *v66; // eax@42
  PgWinSpr *v67; // esi@42
  NiD3DDefaultShader *v68; // ST68_4@43
  NiPointer<NiD3DDefaultShader> *v69; // esi@43
  unsigned int uiWidth; // [sp+7Ch] [bp-28h]@20
  unsigned int uiHeight; // [sp+80h] [bp-24h]@20
  NiPointer<NiD3DDefaultShader> *thisa; // [sp+84h] [bp-20h]@22
  int iOffX; // [sp+88h] [bp-1Ch]@16
  int uiLeft; // [sp+8Ch] [bp-18h]@4
  int uiTop; // [sp+90h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+94h] [bp-10h]@1
  int v77; // [sp+A0h] [bp-4h]@1
  int iOffY; // [sp+ACh] [bp+8h]@16

  v2 = this;
  spNode.m_pObject = 0;
  v77 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  v4 = dword_B70448;
  v5 = v3;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "\\Game\\KDTeamScoreWin.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v5);
  if ( !v7 )
  {
    v8 = spNode.m_pObject;
    v77 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "KDTeamScoreWin", 0) )
  {
    v11 = uiLeft;
    v12 = uiTop;
    iOffX = uiLeft;
    iOffY = uiTop;
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Theme", &uiLeft, &uiTop, 0);
    if ( v13 )
    {
      if ( PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0) )
      {
        v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel00", &uiLeft, &uiTop, 0);
        if ( v14 )
        {
          v15 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
          v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v15,
            0);
          if ( PgUtil::GetTriShapeRect(
                 &spNode.m_pObject->baseclass_0,
                 "TextRound",
                 &uiLeft,
                 &uiTop,
                 &uiWidth,
                 &uiHeight) )
          {
            v16 = Font::Get(0);
            v17 = PgWinText::CreateWin(
                    uiLeft - v11,
                    uiTop - v12,
                    uiWidth,
                    uiHeight,
                    v16,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            NiPointer<PopupMenuWin>::operator_(
              (NiPointer<NiD3DDefaultShader> *)&v2->m_pkRoundTextWin,
              (NiD3DDefaultShader *)v17);
            v18 = v2->m_pkRoundTextWin.m_pObject;
            if ( v18 )
            {
              ((void (__stdcall *)(signed int))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1);
              ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkRoundTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
              v19 = v2->m_pkRoundTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              thisa = (NiPointer<NiD3DDefaultShader> *)v2->m_pkRoundTextWin.m_pObject;
              v20 = TextData3::Get(0x3E5B283Cu);
              v21 = fs(v20);
              v19[118].__vecDelDtor((NiRefObject *)thisa, (unsigned int)v21);
              ((void (__stdcall *)(_DWORD))v2->m_pkRoundTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              if ( PgUtil::GetTriShapeRect(
                     &spNode.m_pObject->baseclass_0,
                     "Frame",
                     &uiLeft,
                     &uiTop,
                     &uiWidth,
                     &uiHeight) )
              {
                v22 = Font::Get(0);
                v23 = PgWinText::CreateWin(
                        uiLeft,
                        uiTop,
                        uiWidth,
                        uiHeight,
                        v22,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
                NiPointer<PopupMenuWin>::operator_(
                  (NiPointer<NiD3DDefaultShader> *)&v2->m_pkScoreTextWin,
                  (NiD3DDefaultShader *)v23);
                if ( v2->m_pkRoundTextWin.m_pObject )
                {
                  ((void (__stdcall *)(signed int))v2->m_pkScoreTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1);
                  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkScoreTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
                  v24 = v2->m_pkScoreTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                  thisa = (NiPointer<NiD3DDefaultShader> *)v2->m_pkScoreTextWin.m_pObject;
                  v25 = TextData3::Get(0x405F2230u);
                  v24[118].__vecDelDtor((NiRefObject *)thisa, (unsigned int)v25);
                  v2->m_pkScoreTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                    (NiRefObject *)v2->m_pkScoreTextWin.m_pObject,
                    0);
                  v26 = 0;
                  thisa = (NiPointer<NiD3DDefaultShader> *)v2->m_pkTenNum[1];
                  while ( 1 )
                  {
                    v27 = spNode.m_pObject;
                    v28 = fs("BlueOneNum%d");
                    v29 = PgSprData::Create(&v27->baseclass_0, v28, &uiLeft, &uiTop, 0);
                    if ( !v29 )
                      break;
                    v30 = PgWinSpr::CreateWin(
                            uiLeft - iOffX,
                            uiTop - iOffY,
                            v29,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    if ( !v30 )
                      break;
                    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                      (NiRefObject *)v30,
                      0);
                    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                      (NiRefObject *)v30,
                      0);
                    NiPointer<PopupMenuWin>::operator_(thisa - 20, (NiD3DDefaultShader *)v30);
                    v31 = spNode.m_pObject;
                    v32 = fs("BlueTenNum%d");
                    v33 = PgSprData::Create(&v31->baseclass_0, v32, &uiLeft, &uiTop, 0);
                    if ( !v33 )
                      break;
                    v34 = PgWinSpr::CreateWin(
                            uiLeft - iOffX,
                            uiTop - iOffY,
                            v33,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    v35 = (NiD3DDefaultShader *)v34;
                    if ( !v34 )
                      break;
                    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                      (NiRefObject *)v34,
                      0);
                    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v35, 0);
                    NiPointer<PopupMenuWin>::operator_(thisa, v35);
                    v36 = spNode.m_pObject;
                    v37 = fs("BlueHNum%d");
                    v38 = PgSprData::Create(&v36->baseclass_0, v37, &uiLeft, &uiTop, 0);
                    if ( !v38 )
                      break;
                    v39 = PgWinSpr::CreateWin(
                            uiLeft - iOffX,
                            uiTop - iOffY,
                            v38,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    v40 = (NiD3DDefaultShader *)v39;
                    if ( !v39 )
                      break;
                    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                      (NiRefObject *)v39,
                      0);
                    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v40, 0);
                    NiPointer<PopupMenuWin>::operator_(thisa + 20, v40);
                    v41 = spNode.m_pObject;
                    v42 = fs("RedOneNum%d");
                    v43 = PgSprData::Create(&v41->baseclass_0, v42, &uiLeft, &uiTop, 0);
                    if ( !v43 )
                      break;
                    v44 = PgWinSpr::CreateWin(
                            uiLeft - iOffX,
                            uiTop - iOffY,
                            v43,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    v45 = (NiD3DDefaultShader *)v44;
                    if ( !v44 )
                      break;
                    v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                      (NiRefObject *)v44,
                      0);
                    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v45, 0);
                    NiPointer<PopupMenuWin>::operator_(thisa - 30, v45);
                    v46 = spNode.m_pObject;
                    v47 = fs("RedTenNum%d");
                    v48 = PgSprData::Create(&v46->baseclass_0, v47, &uiLeft, &uiTop, 0);
                    if ( !v48 )
                      break;
                    v49 = PgWinSpr::CreateWin(
                            uiLeft - iOffX,
                            uiTop - iOffY,
                            v48,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    v50 = (NiD3DDefaultShader *)v49;
                    if ( !v49 )
                      break;
                    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                      (NiRefObject *)v49,
                      0);
                    v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v50, 0);
                    NiPointer<PopupMenuWin>::operator_(thisa - 10, v50);
                    v51 = spNode.m_pObject;
                    v52 = fs("RedHNum%d");
                    v53 = PgSprData::Create(&v51->baseclass_0, v52, &uiLeft, &uiTop, 0);
                    if ( !v53 )
                      break;
                    v54 = PgWinSpr::CreateWin(
                            uiLeft - iOffX,
                            uiTop - iOffY,
                            v53,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    v55 = v54;
                    if ( !v54 )
                      break;
                    v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                      (NiRefObject *)v54,
                      0);
                    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                      (NiRefObject *)v55,
                      0);
                    v56 = (NiD3DDefaultShader *)v55;
                    v57 = thisa;
                    NiPointer<PopupMenuWin>::operator_(thisa + 10, v56);
                    ++v26;
                    thisa = v57 + 1;
                    if ( v26 >= 10 )
                    {
                      v58 = 0;
                      thisa = (NiPointer<NiD3DDefaultShader> *)v2->m_pkFlag;
                      while ( 1 )
                      {
                        v59 = spNode.m_pObject;
                        v60 = fs("BlueFlag0%d");
                        v61 = PgSprData::Create(&v59->baseclass_0, v60, &uiLeft, &uiTop, 0);
                        if ( !v61 )
                          break;
                        v62 = PgWinSpr::CreateWin(
                                uiLeft - iOffX,
                                uiTop - iOffY,
                                v61,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0);
                        if ( !v62 )
                          break;
                        v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                          (NiRefObject *)v62,
                          0);
                        v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                          (NiRefObject *)v62,
                          1u);
                        NiPointer<PopupMenuWin>::operator_(thisa + 5, (NiD3DDefaultShader *)v62);
                        v63 = spNode.m_pObject;
                        v64 = fs("RedFlag0%d");
                        v65 = PgSprData::Create(&v63->baseclass_0, v64, &uiLeft, &uiTop, 0);
                        if ( !v65 )
                          break;
                        v66 = PgWinSpr::CreateWin(
                                uiLeft - iOffX,
                                uiTop - iOffY,
                                v65,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0);
                        v67 = v66;
                        if ( !v66 )
                          break;
                        v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                          (NiRefObject *)v66,
                          0);
                        v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                          (NiRefObject *)v67,
                          1u);
                        v68 = (NiD3DDefaultShader *)v67;
                        v69 = thisa;
                        NiPointer<PopupMenuWin>::operator_(thisa, v68);
                        ++v58;
                        thisa = v69 + 1;
                        if ( v58 >= 5 )
                        {
                          KDTeamScoreWin::Reset(v2);
                          ((void (__thiscall *)(KDTeamScoreWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
                          v77 = -1;
                          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
                          return 1;
                        }
                      }
                      break;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    v77 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  else
  {
    v10 = spNode.m_pObject;
    v77 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00422660) --------------------------------------------------------
KDTeamScoreWin *__cdecl KDTeamScoreWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  KDTeamScoreWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x27Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    KDTeamScoreWin::KDTeamScoreWin((KDTeamScoreWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (KDTeamScoreWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00422790) --------------------------------------------------------
void *__thiscall KDTeamScoreWin::_scalar_deleting_destructor_(KDTeamScoreWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  KDTeamScoreWin::_KDTeamScoreWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004227C0) --------------------------------------------------------
void __thiscall KeyMap::KeyNode::Set(KeyMap::KeyNode *this, unsigned int uiMsg, NiInputKeyboard::KeyCode eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType)
{
  this->m_uiMsg = uiMsg;
  this->m_eCode = eC;
  this->m_ePressType = ePress;
  this->m_uiModif = uiModif;
  this->m_eModifType = eModifType;
  this->m_bKeyboard = 1;
}

//----- (004227F0) --------------------------------------------------------
void __thiscall KeyMap::KeyNode::SetMouse(KeyMap::KeyNode *this, unsigned int uiMsg, NiInputMouse::Button eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType)
{
  this->m_uiMsg = uiMsg;
  this->m_ePressType = ePress;
  this->m_eMouseCode = eC;
  switch ( uiModif )
  {
    case 1u:
      this->m_uiModif = 256;
      this->m_eModifType = eModifType;
      this->m_bKeyboard = 0;
      break;
    case 4u:
      this->m_uiModif = 1024;
      this->m_eModifType = eModifType;
      this->m_bKeyboard = 0;
      break;
    case 0x40u:
      this->m_uiModif = 16384;
      this->m_eModifType = eModifType;
      this->m_bKeyboard = 0;
      break;
    default:
      this->m_uiModif = 0;
      this->m_eModifType = eModifType;
      this->m_bKeyboard = 0;
      break;
  }
}

//----- (00422870) --------------------------------------------------------
bool __thiscall KeyMap::KeyNode::IsSame(KeyMap::KeyNode *this, NiInputKeyboard::KeyCode eC, unsigned int uiModif)
{
  return this->m_eCode == eC && this->m_uiModif == uiModif;
}

//----- (004228A0) --------------------------------------------------------
bool __thiscall KeyMap::KeyNode::IsSame(KeyMap::KeyNode *this, NiInputMouse::Button eC, unsigned int uiModif)
{
  return this->m_eMouseCode == eC && this->m_uiModif == uiModif;
}

//----- (004228D0) --------------------------------------------------------
void __thiscall KeyMap::Process(KeyMap *this)
{
  int v1; // ebx@3
  KeyMap::KeyNode *v2; // edi@4
  KeyMap::PressType v3; // eax@4
  int v4; // eax@5
  signed int v5; // ecx@8
  int v6; // ecx@10
  signed int v7; // eax@11
  int v8; // eax@12
  unsigned int v9; // edx@13
  NiTListItem<KeyMap::KeyNode *> *i; // eax@20
  signed int v11; // eax@24
  signed int v12; // esi@25
  unsigned __int8 v13; // dl@25
  char v14; // al@25
  signed int v15; // eax@28
  int v16; // eax@29
  signed int v17; // eax@33
  signed int v18; // esi@34
  unsigned __int8 v19; // dl@34
  char v20; // al@34
  signed int v21; // eax@37
  int v22; // eax@38
  KeyMap::ModifType v23; // eax@41
  KeyMap *v24; // [sp+0h] [bp-8h]@1
  NiTListItem<KeyMap::KeyNode *> *kPos; // [sp+4h] [bp-4h]@3

  v24 = this;
  if ( !this->m_bEnable || !this->m_pkFrameWork )
    return;
  v1 = g_pkKeyboard;
  kPos = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( !kPos )
    goto LABEL_19;
  do
  {
    v2 = kPos->m_element;
    v3 = v2->m_ePressType;
    if ( v3 )
    {
      v4 = v3 - 1;
      if ( v4 )
      {
        if ( v4 != 1 )
          goto LABEL_17;
        if ( v2->m_bKeyboard )
        {
          v5 = v2->m_eCode;
          if ( !v5 || !((*(_BYTE *)((v5 >> 3) + v1 + 33) >> (v5 & 7)) & 1) )
            goto LABEL_17;
          v6 = *(_DWORD *)(v1 + 16);
        }
        else
        {
          v7 = v2->m_eMouseCode;
          if ( v7 >= 8 || (v8 = g_pkMouse + 16 * (v7 + 8), v6 = *(_DWORD *)(v8 + 8), !*(_BYTE *)(v8 + 1)) )
            goto LABEL_17;
        }
      }
      else
      {
        if ( v2->m_bKeyboard )
        {
          v11 = v2->m_eCode;
          if ( !v11
            || (v12 = v11 >> 3, v13 = *(_BYTE *)((v11 >> 3) + v1 + 33), v14 = v11 & 7, (v13 >> v14) & 1)
            || !((*(_BYTE *)(v12 + v1 + 65) >> v14) & 1) )
            goto LABEL_17;
          v6 = *(_DWORD *)(v1 + 16);
        }
        else
        {
          v15 = v2->m_eMouseCode;
          if ( v15 >= 8
            || (v16 = g_pkMouse + 16 * (v15 + 8), v6 = *(_DWORD *)(v16 + 8), *(_BYTE *)(v16 + 1))
            || !*(_BYTE *)(v16 + 3) )
            goto LABEL_17;
        }
      }
    }
    else
    {
      if ( v2->m_bKeyboard )
      {
        v17 = v2->m_eCode;
        if ( !v17
          || (v18 = v17 >> 3, v19 = *(_BYTE *)((v17 >> 3) + v1 + 33), v20 = v17 & 7, !((v19 >> v20) & 1))
          || (*(_BYTE *)(v18 + v1 + 65) >> v20) & 1 )
          goto LABEL_17;
        v6 = *(_DWORD *)(v1 + 16);
      }
      else
      {
        v21 = v2->m_eMouseCode;
        if ( v21 >= 8
          || (v22 = g_pkMouse + 16 * (v21 + 8), v6 = *(_DWORD *)(v22 + 8), !*(_BYTE *)(v22 + 1))
          || *(_BYTE *)(v22 + 3) )
          goto LABEL_17;
      }
    }
    v9 = v2->m_uiModif;
    if ( v9 )
    {
      v23 = v2->m_eModifType;
      if ( v23 )
      {
        if ( v23 != 1 || v2->m_uiModif != (v6 & v9) )
          goto LABEL_17;
      }
      else
      {
        if ( !(v9 & v6) )
          goto LABEL_17;
      }
    }
    else
    {
      if ( v6 )
        goto LABEL_17;
    }
    if ( !EditWin::ms_pkCurEditWin )
    {
      PgFrameWork::AddMsg(v24->m_pkFrameWork, v2->m_uiMsg, 0, 0);
      v1 = g_pkKeyboard;
    }
LABEL_17:
    kPos = kPos->m_pkNext;
  }
  while ( kPos );
  this = v24;
LABEL_19:
  if ( *(_BYTE *)(v1 + 43) & 4 )
  {
    for ( i = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead; i; i = i->m_pkNext )
      ;
  }
}
// A9816C: using guessed type int g_pkKeyboard;
// A98170: using guessed type int g_pkMouse;

//----- (00422AE0) --------------------------------------------------------
bool __thiscall KeyMap::KeyIsDown(KeyMap *this, NiInputKeyboard::KeyCode eKey)
{
  bool result; // al@2

  if ( eKey )
    result = (*(_BYTE *)(((signed int)eKey >> 3) + g_pkKeyboard + 33) >> (eKey & 7)) & 1;
  else
    result = 0;
  return result;
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00422B10) --------------------------------------------------------
void __thiscall KeyMap::_KeyMap(KeyMap *this)
{
  KeyMap *v1; // ebx@1
  int v2; // edi@1
  NiTListItem<KeyMap::KeyNode *> *v3; // esi@1
  NiTListItem<KeyMap::KeyNode *> *v4; // eax@1
  NiTListItem<KeyMap::KeyNode *> *v5; // ST00_4@2

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyMap::_vftable_;
  KeyMap::RemoveAll(this);
  v2 = (int)&v1->m_kList;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&PgTList<KeyMap::KeyNode__>::_vftable_;
  v3 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3;
      v3 = v3->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(&v1->m_kList, v5);
    }
    while ( v3 );
    v4 = 0;
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v4;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v4;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v4;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA3C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 97CA64: using guessed type int (__thiscall *PgTList_KeyMap__KeyNode _____vftable_)(void *p, char);
// 97CA74: using guessed type int (__thiscall *KeyMap___vftable_)(void *p, char);

//----- (00422BB0) --------------------------------------------------------
void __thiscall KeyMap::Add(KeyMap *this, unsigned int uiMsg, NiInputKeyboard::KeyCode eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType)
{
  KeyMap *v6; // ebx@1
  NiTListItem<KeyMap::KeyNode *> *v7; // eax@1
  KeyMap::KeyNode *v8; // ecx@2
  void *v9; // eax@4
  void *v10; // esi@5
  int v11; // eax@9
  NiTListItem<KeyMap::KeyNode *> *v12; // ecx@9

  v6 = this;
  v7 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( !v7 )
    goto LABEL_4;
  while ( 1 )
  {
    v8 = v7->m_element;
    if ( v8->m_uiMsg == uiMsg )
      break;
    v7 = v7->m_pkNext;
    if ( !v7 )
      goto LABEL_4;
  }
  if ( v8 )
  {
    v8->m_uiMsg = uiMsg;
    v8->m_eCode = eC;
    v8->m_ePressType = ePress;
    v8->m_uiModif = uiModif;
    v8->m_eModifType = eModifType;
    v8->m_bKeyboard = 1;
  }
  else
  {
LABEL_4:
    v9 = operator new(0x1Cu);
    if ( v9 )
    {
      *((_BYTE *)v9 + 20) = 1;
      v10 = v9;
    }
    else
    {
      v10 = 0;
    }
    *((_DWORD *)v10 + 1) = eC;
    *((_DWORD *)v10 + 3) = ePress;
    *((_DWORD *)v10 + 4) = eModifType;
    *(_DWORD *)v10 = uiMsg;
    *((_DWORD *)v10 + 2) = uiModif;
    *((_BYTE *)v10 + 20) = 1;
    v11 = (int)v6->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *)&v6->m_kList);
    *(_DWORD *)(v11 + 8) = v10;
    *(_DWORD *)v11 = 0;
    *(_DWORD *)(v11 + 4) = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v12 = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v12 )
    {
      v12->m_pkNext = (NiTListItem<KeyMap::KeyNode *> *)v11;
      ++*(_DWORD *)&v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<KeyMap::KeyNode *> *)v11;
    }
    else
    {
      ++*(_DWORD *)&v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<KeyMap::KeyNode *> *)v11;
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<KeyMap::KeyNode *> *)v11;
    }
  }
}

//----- (00422C70) --------------------------------------------------------
void __thiscall KeyMap::AddMouse(KeyMap *this, unsigned int uiMsg, NiInputMouse::Button eC, KeyMap::PressType ePress, unsigned int uiModif, KeyMap::ModifType eModifType)
{
  KeyMap *v6; // ebx@1
  NiTListItem<KeyMap::KeyNode *> *v7; // eax@1
  KeyMap::KeyNode *v8; // ecx@2
  void *v9; // eax@4
  void *v10; // edi@5
  int v11; // eax@9
  NiTListItem<KeyMap::KeyNode *> *v12; // ecx@9

  v6 = this;
  v7 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( !v7 )
    goto LABEL_4;
  while ( 1 )
  {
    v8 = v7->m_element;
    if ( v8->m_uiMsg == uiMsg )
      break;
    v7 = v7->m_pkNext;
    if ( !v7 )
      goto LABEL_4;
  }
  if ( v8 )
  {
    v8->m_bKeyboard = 0;
    KeyMap::KeyNode::SetMouse(v8, uiMsg, eC, ePress, uiModif, eModifType);
  }
  else
  {
LABEL_4:
    v9 = operator new(0x1Cu);
    if ( v9 )
    {
      *((_BYTE *)v9 + 20) = 1;
      v10 = v9;
    }
    else
    {
      v10 = 0;
    }
    KeyMap::KeyNode::SetMouse((KeyMap::KeyNode *)v10, uiMsg, eC, ePress, uiModif, eModifType);
    *((_BYTE *)v10 + 20) = 0;
    v11 = (int)v6->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *)&v6->m_kList);
    *(_DWORD *)(v11 + 8) = v10;
    *(_DWORD *)v11 = 0;
    *(_DWORD *)(v11 + 4) = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v12 = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v12 )
    {
      v12->m_pkNext = (NiTListItem<KeyMap::KeyNode *> *)v11;
      ++*(_DWORD *)&v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<KeyMap::KeyNode *> *)v11;
    }
    else
    {
      ++*(_DWORD *)&v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<KeyMap::KeyNode *> *)v11;
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<KeyMap::KeyNode *> *)v11;
    }
  }
}

//----- (00422D30) --------------------------------------------------------
void __thiscall KeyMap::Remove(KeyMap *this, NiInputKeyboard::KeyCode eC, unsigned int uiModif)
{
  NiTListItem<KeyMap::KeyNode *> *v3; // eax@1
  KeyMap::KeyNode *v4; // esi@2
  NiTListItem<KeyMap::KeyNode *> *v5; // eax@6
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v6; // ecx@6
  int v7; // edx@7
  unsigned int v8; // edi@7

  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      if ( v4->m_eCode == eC )
      {
        if ( v4->m_uiModif == uiModif )
          break;
      }
      v3 = v3->m_pkNext;
      if ( !v3 )
        return;
    }
    v5 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v6 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kList;
    if ( v5 )
    {
      while ( 1 )
      {
        v7 = (int)&v5->m_element;
        v8 = (unsigned int)v5;
        v5 = v5->m_pkNext;
        if ( v4 == *(KeyMap::KeyNode **)v7 )
          break;
        if ( !v5 )
          goto LABEL_9;
      }
    }
    else
    {
LABEL_9:
      v8 = 0;
    }
    uiModif = v8;
    if ( v8 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v6, (void **)&uiModif);
    operator delete(v4);
  }
}

//----- (00422DA0) --------------------------------------------------------
void __thiscall KeyMap::Remove(KeyMap *this, NiInputMouse::Button eC, unsigned int uiModif)
{
  NiTListItem<KeyMap::KeyNode *> *v3; // eax@1
  KeyMap::KeyNode *v4; // esi@2
  NiTListItem<KeyMap::KeyNode *> *v5; // eax@6
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v6; // ecx@6
  int v7; // edx@7
  unsigned int v8; // edi@7

  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      if ( v4->m_eMouseCode == eC )
      {
        if ( v4->m_uiModif == uiModif )
          break;
      }
      v3 = v3->m_pkNext;
      if ( !v3 )
        return;
    }
    v5 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v6 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kList;
    if ( v5 )
    {
      while ( 1 )
      {
        v7 = (int)&v5->m_element;
        v8 = (unsigned int)v5;
        v5 = v5->m_pkNext;
        if ( v4 == *(KeyMap::KeyNode **)v7 )
          break;
        if ( !v5 )
          goto LABEL_9;
      }
    }
    else
    {
LABEL_9:
      v8 = 0;
    }
    uiModif = v8;
    if ( v8 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v6, (void **)&uiModif);
    operator delete(v4);
  }
}

//----- (00422E10) --------------------------------------------------------
void __thiscall KeyMap::KeyMap(KeyMap *this)
{
  KeyMap *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyMap::_vftable_;
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&PgTList<KeyMap::KeyNode__>::_vftable_;
  v1->m_pkFrameWork = 0;
  v1->m_bEnable = 1;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 97CA64: using guessed type int (__thiscall *PgTList_KeyMap__KeyNode _____vftable_)(void *p, char);
// 97CA74: using guessed type int (__thiscall *KeyMap___vftable_)(void *p, char);

//----- (00422E50) --------------------------------------------------------
const bool __thiscall NiInputDevice::Button::WasPressed(NiInputDevice::Button *this, unsigned int *uiModifiers)
{
  *uiModifiers = this->m_uiModifiers;
  return this->m_bPressed && !this->m_bLastPressed;
}

//----- (00422E80) --------------------------------------------------------
const bool __thiscall NiInputDevice::Button::WasReleased(NiInputDevice::Button *this, unsigned int *uiModifiers)
{
  *uiModifiers = this->m_uiModifiers;
  return !this->m_bPressed && this->m_bLastPressed;
}

//----- (00422EB0) --------------------------------------------------------
const bool __thiscall NiInputMouse::ButtonIsDown(NiInputMouse *this, NiInputMouse::Button eButton, unsigned int *uiModifiers)
{
  const bool result; // al@2
  char *v4; // eax@3

  if ( (signed int)eButton < 8 )
  {
    v4 = (char *)this + 16 * (eButton + 8);
    *uiModifiers = *((_DWORD *)v4 + 2);
    result = v4[1];
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00422EE0) --------------------------------------------------------
const bool __thiscall NiInputMouse::ButtonWasPressed(NiInputMouse *this, NiInputMouse::Button eButton, unsigned int *uiModifiers)
{
  char *v3; // eax@2

  return (signed int)eButton < 8
      && (v3 = (char *)this + 16 * (eButton + 8), *uiModifiers = *((_DWORD *)v3 + 2), v3[1])
      && !v3[3];
}

//----- (00422F20) --------------------------------------------------------
const bool __thiscall NiInputMouse::ButtonWasReleased(NiInputMouse *this, NiInputMouse::Button eButton, unsigned int *uiModifiers)
{
  char *v3; // eax@2

  return (signed int)eButton < 8
      && (v3 = (char *)this + 16 * (eButton + 8), *uiModifiers = *((_DWORD *)v3 + 2), !v3[1])
      && v3[3];
}

//----- (00422F60) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>(NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
}
// 97CA3C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);

//----- (00422F70) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 97CA3C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);

//----- (00422FB0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<KeyMap::KeyNode *> *v3; // esi@1
  NiTListItem<KeyMap::KeyNode *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CA3C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);
// 97CA54: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);

//----- (00423040) --------------------------------------------------------
void __thiscall NiTPointerList<KeyMap::KeyNode__>::_NiTPointerList<KeyMap::KeyNode__>(NiTPointerList<KeyMap::KeyNode *> *this)
{
  NiTPointerList<KeyMap::KeyNode *> *v1; // edi@1
  NiTListItem<KeyMap::KeyNode *> *v2; // esi@1
  NiTListItem<KeyMap::KeyNode *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
}
// 97CA3C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);
// 97CA54: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);

//----- (004230C0) --------------------------------------------------------
void __thiscall KeyMap::RemoveAll(KeyMap *this)
{
  KeyMap *v1; // edi@1
  NiTListItem<KeyMap::KeyNode *> *i; // esi@1
  NiTListItem<KeyMap::KeyNode *> *v3; // esi@5
  NiTListItem<KeyMap::KeyNode *> *v4; // ST00_4@6

  v1 = this;
  for ( i = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead; i; i = i->m_pkNext )
  {
    if ( i->m_element )
      operator delete(i->m_element);
  }
  v3 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *)&v1->m_kList,
      v4);
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
}

//----- (00423120) --------------------------------------------------------
void __thiscall PgTList<KeyMap::KeyNode__>::_PgTList<KeyMap::KeyNode__>(PgTList<KeyMap::KeyNode *> *this)
{
  PgTList<KeyMap::KeyNode *> *v1; // edi@1
  NiTListItem<KeyMap::KeyNode *> *v2; // esi@1
  NiTListItem<KeyMap::KeyNode *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&PgTList<KeyMap::KeyNode__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
}
// 97CA3C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);
// 97CA64: using guessed type int (__thiscall *PgTList_KeyMap__KeyNode _____vftable_)(void *p, char);

//----- (004231A0) --------------------------------------------------------
void *__thiscall PgTList<KeyMap::KeyNode__>::_scalar_deleting_destructor_(PgTList<KeyMap::KeyNode *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<KeyMap::KeyNode *> *v3; // esi@1
  NiTListItem<KeyMap::KeyNode *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,KeyMap::KeyNode *>Vtbl *)&PgTList<KeyMap::KeyNode__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_KeyMap::KeyNode__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CA3C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__KeyMap__KeyNode _____vftable_)(void *p, char);
// 97CA64: using guessed type int (__thiscall *PgTList_KeyMap__KeyNode _____vftable_)(void *p, char);

//----- (00423230) --------------------------------------------------------
void *__thiscall KeyMap::_vector_deleting_destructor_(KeyMap *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  KeyMap::_KeyMap(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00423260) --------------------------------------------------------
void *__cdecl CreateMyProcessSubfunc(const char *szExeFullPath, char *szCmdLine, _PROCESS_INFORMATION *pi)
{
  int v3; // eax@2
  int v4; // eax@6
  char v5; // cl@7
  int v6; // eax@9
  char v7; // cl@10
  int v8; // eax@11
  void *result; // eax@17
  _PROCESS_INFORMATION *v10; // ecx@19
  void *v11; // edx@20
  const char *v12; // [sp-28h] [bp-3A8h]@15
  char *v13; // [sp-24h] [bp-3A4h]@15
  _STARTUPINFOA StartupInfo; // [sp+Ch] [bp-374h]@14
  _PROCESS_INFORMATION ProcessInformation; // [sp+50h] [bp-330h]@16
  _PROCESS_INFORMATION *v16; // [sp+60h] [bp-320h]@1
  void *szCmdLinePtr; // [sp+64h] [bp-31Ch]@1
  char szDirectory[261]; // [sp+68h] [bp-318h]@10
  char szFullCmdLine[261]; // [sp+170h] [bp-210h]@1
  char szExe[260]; // [sp+278h] [bp-108h]@1
  unsigned int v21; // [sp+37Ch] [bp-4h]@1
  int v22; // [sp+380h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v16 = pi;
  GetShortPathNameA(szExeFullPath, szExe, 0x104u);
  szCmdLinePtr = szFullCmdLine;
  if ( szCmdLine )
  {
    strchr((char *)szExeFullPath, 34);
    if ( v3 )
      _wsprintfA(szFullCmdLine, "%s %s", szExe, szCmdLine);
    else
      _wsprintfA(szFullCmdLine, "\"%s\" %s", szExe, szCmdLine);
  }
  else
  {
    szCmdLinePtr = 0;
  }
  v4 = (int)szExe;
  do
    v5 = *(_BYTE *)v4++;
  while ( v5 );
  if ( (unsigned int)(v4 - (_DWORD)&szExe[1]) > 0x104 )
    goto LABEL_23;
  v6 = 0;
  do
  {
    v7 = szExe[v6];
    szDirectory[v6++] = v7;
  }
  while ( v7 );
  strrchr(szDirectory, 92);
  if ( !v8 )
    goto LABEL_23;
  if ( *(_BYTE *)(v8 - 1) == 58 )
    ++v8;
  *(_BYTE *)v8 = 0;
  StartupInfo.cb = 68;
  StartupInfo.lpReserved = 0;
  StartupInfo.lpDesktop = 0;
  StartupInfo.lpTitle = 0;
  StartupInfo.dwX = 0;
  StartupInfo.dwY = 0;
  StartupInfo.dwXSize = 0;
  StartupInfo.dwYSize = 0;
  StartupInfo.dwXCountChars = 0;
  StartupInfo.dwYCountChars = 0;
  StartupInfo.dwFillAttribute = 0;
  StartupInfo.dwFlags = 1;
  *(_DWORD *)&StartupInfo.wShowWindow = 1;
  StartupInfo.lpReserved2 = 0;
  StartupInfo.hStdInput = 0;
  StartupInfo.hStdOutput = 0;
  StartupInfo.hStdError = 0;
  if ( szCmdLinePtr )
  {
    v13 = szFullCmdLine;
    v12 = 0;
  }
  else
  {
    v13 = 0;
    v12 = szExeFullPath;
  }
  if ( CreateProcessA(v12, v13, 0, 0, 0, 0x20u, 0, szDirectory, &StartupInfo, &ProcessInformation) )
  {
    v10 = v16;
    result = ProcessInformation.hProcess;
    if ( v16 )
    {
      v11 = ProcessInformation.hThread;
      v16->hProcess = ProcessInformation.hProcess;
      v10->hThread = v11;
      v10->dwProcessId = ProcessInformation.dwProcessId;
      v10->dwThreadId = ProcessInformation.dwThreadId;
    }
  }
  else
  {
LABEL_23:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00423460) --------------------------------------------------------
void *__stdcall CreateMyProcess(const char *szExeFullPath, char *szCmdLine)
{
  return CreateMyProcessSubfunc(szExeFullPath, szCmdLine, 0);
}

//----- (00423480) --------------------------------------------------------
void *__stdcall CreateMyProcess2(const char *szExeFullPath, char *szCmdLine, _PROCESS_INFORMATION *pi)
{
  return CreateMyProcessSubfunc(szExeFullPath, szCmdLine, pi);
}

//----- (004234A0) --------------------------------------------------------
void *__stdcall MyShellExecute(const char *szFilename)
{
  void *result; // eax@2
  const char *v2; // eax@4
  const char v3; // cl@5
  char *v4; // edi@8
  char v5; // al@9
  unsigned int v6; // eax@11
  void *v7; // edi@11
  char v8; // cl@12
  const char *v9; // eax@14
  const char *v10; // esi@14
  char *v11; // edi@15
  char v12; // al@16
  _SHELLEXECUTEINFOA ShellExecuteInfo; // [sp+4h] [bp-144h]@8
  char szDirectory[260]; // [sp+40h] [bp-108h]@5
  unsigned int v15; // [sp+144h] [bp-4h]@1
  int v16; // [sp+148h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  if ( szFilename )
  {
    if ( _mbschr(szFilename, 0x3Au) )
    {
      v2 = szFilename;
      do
      {
        v3 = *v2;
        v2[szDirectory - szFilename] = *v2;
        ++v2;
      }
      while ( v3 );
    }
    else
    {
      GetCurrentDirectoryA(0x104u, szDirectory);
      if ( _mbsrchr(szDirectory, 0x5Cu)[1] )
      {
        v4 = (char *)&ShellExecuteInfo.hProcess + 3;
        do
          v5 = (v4++)[1];
        while ( v5 );
        *(_WORD *)v4 = word_97CA88;
      }
      v6 = strlen(szFilename) + 1;
      v7 = (char *)&ShellExecuteInfo.hProcess + 3;
      do
      {
        v8 = *((_BYTE *)v7 + 1);
        v7 = (char *)v7 + 1;
      }
      while ( v8 );
      memcpy(v7, szFilename, v6);
    }
    v9 = _mbsrchr(szDirectory, 0x5Cu);
    *v9 = 0;
    v10 = v9 + 1;
    if ( !_mbschr(szDirectory, 0x5Cu) )
    {
      v11 = (char *)&ShellExecuteInfo.hProcess + 3;
      do
        v12 = (v11++)[1];
      while ( v12 );
      *(_WORD *)v11 = word_97CA8C;
    }
    ShellExecuteInfo.cbSize = 60;
    ShellExecuteInfo.fMask = 320;
    ShellExecuteInfo.hwnd = 0;
    ShellExecuteInfo.lpVerb = 0;
    ShellExecuteInfo.lpFile = v10;
    ShellExecuteInfo.lpParameters = 0;
    ShellExecuteInfo.lpDirectory = szDirectory;
    ShellExecuteInfo.nShow = 1;
    ShellExecuteExA(&ShellExecuteInfo);
    result = ShellExecuteInfo.hProcess;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 97CA88: using guessed type __int16 word_97CA88;
// 97CA8C: using guessed type __int16 word_97CA8C;
// A85C00: using guessed type int __security_cookie;

//----- (00423620) --------------------------------------------------------
void __thiscall LuaArgument::LuaArgument(LuaArgument *this)
{
  this->vfptr = (LuaArgumentVtbl *)&LuaArgument::_vftable_;
  this->m_return_number = 0;
  this->m_return_value = 0;
}
// 97CDB4: using guessed type int (__thiscall *LuaArgument___vftable_)(void *p, char);

//----- (00423640) --------------------------------------------------------
void __thiscall LuaArgument::_LuaArgument(LuaArgument *this)
{
  this->vfptr = (LuaArgumentVtbl *)&LuaArgument::_vftable_;
}
// 97CDB4: using guessed type int (__thiscall *LuaArgument___vftable_)(void *p, char);

//----- (00423650) --------------------------------------------------------
int __thiscall LuaArgument::setArgument(LuaArgument *this, lua_State *L)
{
  return 0;
}

//----- (00423660) --------------------------------------------------------
void __thiscall LuaArgument::setReturn(LuaArgument *this, lua_State *L)
{
  LuaArgument *v2; // esi@1
  bool v3; // zf@1

  v2 = this;
  v3 = this->m_return_number == 1;
  this->m_return_value = -1;
  if ( v3 )
  {
    if ( lua_isnumber(L, -1) )
      v2->m_return_value = (signed int)lua_tonumberx(L, -1, 0);
    lua_settop(L, -2);
  }
}

//----- (004236B0) --------------------------------------------------------
int __thiscall LuaArgument::getReturnNumber(LuaArgument *this)
{
  return this->m_return_number;
}

//----- (004236C0) --------------------------------------------------------
int __thiscall LuaArgument::getReturnValue(LuaArgument *this)
{
  return this->m_return_value;
}

//----- (004236D0) --------------------------------------------------------
bool __thiscall LuaScript::loadFile(LuaScript *this, char *filename)
{
  LuaScript *v2; // esi@1
  lua_State *v3; // eax@1
  bool result; // al@2

  v2 = this;
  ((void (*)(void))this->baseclass_0.vfptr[4].__vecDelDtor)();
  v3 = luaL_newstate();
  v2->m_state = v3;
  luaL_openlibs(v3);
  ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[5].__vecDelDtor)(v2);
  if ( luaL_loadfilex(v2->m_state, filename, 0) )
    result = 0;
  else
    result = lua_pcallk(v2->m_state, 0, 0, 0, 0, 0) == 0;
  return result;
}

//----- (00423740) --------------------------------------------------------
bool __thiscall LuaScript::callFunc(LuaScript *this, const char *funcname, LuaArgument *lua_arg)
{
  LuaScript *v3; // edi@1
  int v4; // ebx@1
  int v5; // eax@1
  int v6; // eax@1
  bool v7; // bl@1

  v3 = this;
  lua_getglobal(this->m_state, funcname);
  v4 = lua_arg->vfptr->setArgument(lua_arg, v3->m_state);
  v5 = lua_arg->vfptr->getReturnNumber(lua_arg);
  v6 = lua_pcallk(v3->m_state, v4, v5, 0, 0, 0);
  v7 = v6 == 0;
  if ( !v6 )
    lua_arg->vfptr->setReturn(lua_arg, v3->m_state);
  return v7;
}

//----- (004237C0) --------------------------------------------------------
void __thiscall LuaScript::clear(LuaScript *this)
{
  LuaScript *v1; // esi@1

  v1 = this;
  if ( this->m_state )
    lua_close(this->m_state);
  v1->m_state = 0;
}

//----- (004237E0) --------------------------------------------------------
void __thiscall LuaScript::pushFunc(LuaScript *this, const char *luafunc, int (__cdecl *func)(lua_State *))
{
  LuaScript *v3; // esi@1

  v3 = this;
  lua_pushcclosure(this->m_state, func, 0);
  lua_setglobal(v3->m_state, luafunc);
}

//----- (00423810) --------------------------------------------------------
int __cdecl LuaScript::cSetEnableInput(lua_State *L)
{
  MainApp *v1; // eax@1
  bool Enable; // [sp+0h] [bp-4h]@1

  Enable = lua_toboolean(L, 1) != 0;
  v1 = MainApp::GetMainAppInstance();
  if ( v1 )
    MainApp::EnableInput(v1, Enable);
  return 0;
}

//----- (00423850) --------------------------------------------------------
int __cdecl LuaScript::cGetHP(lua_State *L)
{
  int v1; // eax@1

  v1 = User::HP(&g_kUser);
  lua_pushinteger(L, v1);
  return 1;
}

//----- (00423880) --------------------------------------------------------
int __cdecl LuaScript::cGetMaxHP(lua_State *L)
{
  int v1; // eax@1

  v1 = User::MaxHP(&g_kUser);
  lua_pushinteger(L, v1);
  return 1;
}

//----- (004238B0) --------------------------------------------------------
int __cdecl LuaScript::cDeleteChar(lua_State *L)
{
  unsigned __int16 v1; // ax@1
  Char *v2; // eax@1

  v1 = lua_tointegerx(L, 1, 0);
  v2 = CharMgr::GetChar(&g_kCharMgr, v1);
  if ( v2 )
    CharMgr::DeleteChar(&g_kCharMgr, v2);
  return 0;
}

//----- (004238F0) --------------------------------------------------------
int __cdecl LuaScript::cActChar(lua_State *L)
{
  unsigned __int16 v1; // di@1
  int v2; // esi@1
  Char *v3; // eax@1

  v1 = lua_tointegerx(L, 1, 0);
  v2 = lua_tointegerx(L, 2, 0);
  v3 = CharMgr::GetChar(&g_kCharMgr, v1);
  if ( v3 )
    v3->baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)v3, (ABSTATEINDEX)v2, 0, 0);
  return 0;
}

//----- (00423940) --------------------------------------------------------
int __cdecl LuaScript::cIsDuringMove(lua_State *L)
{
  unsigned __int16 v1; // ax@1
  Char *v2; // esi@1
  int result; // eax@4

  v1 = lua_tointegerx(L, 1, 0);
  v2 = CharMgr::GetChar(&g_kCharMgr, v1);
  if ( v2 )
  {
    if ( (unsigned __int8)v2->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v2)
      || !(unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[8].Affect)(v2) )
    {
      lua_pushboolean(L, 1);
      result = 1;
    }
    else
    {
      lua_pushboolean(L, 0);
      result = 1;
    }
  }
  else
  {
    lua_pushboolean(L, 0);
    result = 1;
  }
  return result;
}

//----- (004239D0) --------------------------------------------------------
int __cdecl LuaScript::cIsAttack(lua_State *L)
{
  unsigned __int16 v1; // ax@1
  Char *v2; // eax@1
  int v4; // [sp-4h] [bp-Ch]@1
  int AniCode; // [sp+4h] [bp-4h]@2

  v1 = lua_tointegerx(L, 1, 0);
  v2 = CharMgr::GetChar(&g_kCharMgr, v1);
  v4 = 0;
  if ( v2 )
  {
    Char::GetAniCode(v2, 0, (unsigned int *)&AniCode, 0);
    if ( AniCode != 300000 && AniCode != 600000 && AniCode != 700000 )
    {
      lua_pushboolean(L, 0);
      return 1;
    }
    v4 = 1;
  }
  lua_pushboolean(L, v4);
  return 1;
}

//----- (00423A50) --------------------------------------------------------
int __cdecl LuaScript::cGetQuestStatus(lua_State *L)
{
  unsigned __int16 v1; // di@1
  CQuest *v2; // eax@1
  int v3; // eax@1

  v1 = lua_tointegerx(L, 1, 0);
  v2 = QuestDataMgr::GetQuest();
  v3 = CQuest::GetNewQuestStatus(v2, v1);
  lua_pushinteger(L, v3);
  return 1;
}

//----- (00423A90) --------------------------------------------------------
int __cdecl LuaScript::cShowHelpWin(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // ecx@1

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v1 )
    {
      GameFrameWork::OpenHelpWin((GameFrameWork *)v2);
      return 0;
    }
    GameFrameWork::CloseHelpWin((GameFrameWork *)v2);
  }
  return 0;
}

//----- (00423AE0) --------------------------------------------------------
int __cdecl LuaScript::cShowCharWin(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // ecx@1

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v1 )
    {
      GameFrameWork::OpenCharInfoWin((GameFrameWork *)v2);
      return 0;
    }
    GameFrameWork::CloseCharInfoWin((GameFrameWork *)v2);
  }
  return 0;
}

//----- (00423B30) --------------------------------------------------------
int __cdecl LuaScript::cShowInvenWin(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // ecx@1

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v1 )
    {
      GameFrameWork::OpenInventoryWin((GameFrameWork *)v2);
      return 0;
    }
    GameFrameWork::CloseInventoryWin((GameFrameWork *)v2);
  }
  return 0;
}

//----- (00423B80) --------------------------------------------------------
int __cdecl LuaScript::cShowQuestNewsWin(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // ecx@1

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v1 )
    {
      GameFrameWork::OpenQuestNewsWin((GameFrameWork *)v2);
      return 0;
    }
    GameFrameWork::CloseQuestNewsWin((GameFrameWork *)v2);
  }
  return 0;
}

//----- (00423BD0) --------------------------------------------------------
int __cdecl LuaScript::cShowQuestWin(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // ecx@1

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v1 )
    {
      GameFrameWork::OpenQuestWin((GameFrameWork *)v2, 0, 1);
      return 0;
    }
    GameFrameWork::CloseQuestWin((GameFrameWork *)v2);
  }
  return 0;
}

//----- (00423C20) --------------------------------------------------------
int __cdecl LuaScript::cCloseShopWin(lua_State *L)
{
  PgFrameWork *v1; // eax@1
  GameFrameWork *v2; // esi@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v2 = (GameFrameWork *)v1;
  if ( v1 )
  {
    GameFrameWork::CloseShopMenu((GameFrameWork *)v1, 1);
    GameFrameWork::CloseSkillShopMenu(v2);
    GameFrameWork::CloseSoulStoneShopMenu(v2);
  }
  return 0;
}

//----- (00423C60) --------------------------------------------------------
int __cdecl LuaScript::cGetShowWin(lua_State *L)
{
  void *v1; // esi@1
  unsigned __int8 v2; // al@2
  int result; // eax@2

  v1 = lua_touserdata(L, 1);
  if ( v1 )
  {
    lua_pushboolean(L, 1);
    v2 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v1 + 260))(v1);
    lua_pushboolean(L, v2);
    result = 2;
  }
  else
  {
    lua_pushboolean(L, 0);
    result = 1;
  }
  return result;
}

//----- (00423CC0) --------------------------------------------------------
int __cdecl LuaScript::cCreateSprite(lua_State *L)
{
  void *v1; // edi@1
  int v2; // ebx@1
  bool v3; // ST54_1@1
  NiSourceTexture *v4; // eax@3
  void *v5; // edi@3
  float v6; // ST54_4@3
  double Alpha; // [sp+14h] [bp-18h]@1
  int Y; // [sp+20h] [bp-Ch]@1
  int Width; // [sp+24h] [bp-8h]@1
  int Height; // [sp+28h] [bp-4h]@1

  v1 = lua_touserdata(L, 1);
  v2 = lua_tointegerx(L, 2, 0);
  Y = lua_tointegerx(L, 3, 0);
  Width = lua_tointegerx(L, 4, 0);
  Height = lua_tointegerx(L, 5, 0);
  v3 = lua_toboolean(L, 6) != 0;
  Alpha = lua_tonumberx(L, 7, 0);
  if ( !lua_type(L, (int)v1) )
    v1 = 0;
  v4 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
  v5 = PgWinSpr::CreateWin(v4, v2, Y, Width, Height, (PgWin *)v1, 0, 0);
  (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v5 + 240))(v5);
  v6 = Alpha;
  (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v5 + 276))(v5, LODWORD(v6));
  lua_pushlightuserdata(L, v5);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v5);
  return 1;
}

//----- (00423DC0) --------------------------------------------------------
void __thiscall LuaScript::LuaScript(LuaScript *this)
{
  LuaScript *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&LuaScript::_vftable_;
  v1->m_state = 0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 97CDDC: using guessed type int (__thiscall *LuaScript___vftable_)(void *p, char);

//----- (00423DF0) --------------------------------------------------------
void __thiscall LuaScript::_LuaScript(LuaScript *this)
{
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (00423E10) --------------------------------------------------------
int __cdecl LuaScript::cGetCurTime(lua_State *L)
{
  lua_pushnumber(L, Timer::ms_fCurTime);
  return 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00423E40) --------------------------------------------------------
int __cdecl LuaScript::cGetUser(lua_State *L)
{
  int v1; // eax@1
  int v2; // eax@1
  int v3; // eax@1
  int v4; // eax@1

  v1 = User::HP(&g_kUser);
  lua_pushinteger(L, v1);
  v2 = User::MaxHP(&g_kUser);
  lua_pushinteger(L, v2);
  v3 = User::SP(&g_kUser);
  lua_pushinteger(L, v3);
  v4 = User::MaxSP(&g_kUser);
  lua_pushinteger(L, v4);
  lua_pushinteger(L, n);
  return 1;
}

//----- (00423EB0) --------------------------------------------------------
int __cdecl LuaScript::cGetRemainStatPoint(lua_State *L)
{
  lua_pushinteger(L, n);
  return 1;
}

//----- (00423ED0) --------------------------------------------------------
int __cdecl LuaScript::cLoadChar(lua_State *L)
{
  unsigned __int16 v1; // di@1
  unsigned __int16 v2; // bx@1
  float v3; // ST34_4@1
  float v4; // ST30_4@1
  NiPoint3 kPos; // [sp+18h] [bp-58h]@1
  NiPoint3 kDir; // [sp+24h] [bp-4Ch]@1
  NiPoint3 result; // [sp+30h] [bp-40h]@1
  int PosY; // [sp+3Ch] [bp-34h]@1
  int PosX; // [sp+40h] [bp-30h]@1
  int Dir; // [sp+44h] [bp-2Ch]@1
  NiMatrix3 this; // [sp+48h] [bp-28h]@1
  unsigned int v13; // [sp+6Ch] [bp-4h]@1
  int v14; // [sp+70h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v1 = lua_tointegerx(L, 1, 0);
  v2 = lua_tointegerx(L, 2, 0);
  PosX = lua_tointegerx(L, 3, 0);
  PosY = lua_tointegerx(L, 4, 0);
  Dir = lua_tointegerx(L, 5, 0);
  v3 = (double)PosY;
  v4 = (double)PosX;
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  *(float *)&Dir = (NI_PI + NI_PI) * (double)(unsigned __int8)Dir / 180.0;
  NiMatrix3::MakeZRotation(&this, *(float *)&Dir);
  NiMatrix3::operator_(&this, &result, &World::ms_kNorthDir);
  LODWORD(kDir.x) = (_DWORD)result.x;
  kDir.y = result.y;
  kDir.z = result.z;
  CharMgr::AddMob(&g_kCharMgr, v1, v2, &kPos, &kDir, 0, 0);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (00423FC0) --------------------------------------------------------
int __cdecl LuaScript::cMoveChar(lua_State *L)
{
  unsigned __int16 v1; // di@1
  int v2; // ebx@1
  float v3; // ST28_4@1
  float v4; // ST24_4@1
  Char *v5; // eax@1
  Char *v6; // esi@1
  bool v7; // zf@2
  void (__thiscall *v8)(AbStateInfectee *, AbStateInst *, bool); // eax@2
  NiPoint3 kPos; // [sp+18h] [bp-14h]@1
  int ChangMove; // [sp+24h] [bp-8h]@1
  int PosY; // [sp+28h] [bp-4h]@1

  v1 = lua_tointegerx(L, 1, 0);
  ChangMove = lua_tointegerx(L, 2, 0);
  PosY = lua_tointegerx(L, 3, 0);
  v2 = lua_tointegerx(L, 4, 0);
  v3 = (double)PosY;
  v4 = (double)ChangMove;
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  v5 = CharMgr::GetChar(&g_kCharMgr, v1);
  v6 = v5;
  if ( v5 )
  {
    v7 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[7].Affect)(v5) == v2;
    v8 = v6->baseclass_0.vfptr[7].Deaffect;
    LOBYTE(ChangMove) = !v7;
    ((void (__thiscall *)(Char *, int))v8)(v6, v2);
    ((void (__thiscall *)(Char *, NiPoint3 *, int, NiColor *, signed int))v6->baseclass_0.vfptr[7].SetAbStateProperty)(
      v6,
      &kPos,
      ChangMove,
      &Char::INVALIDPOINT3,
      1);
  }
  return 0;
}

//----- (00424080) --------------------------------------------------------
int __cdecl LuaScript::cGetCharPos(lua_State *L)
{
  unsigned __int16 v1; // ax@1
  Char *v2; // eax@1
  int result; // eax@2
  NiPoint3 kPos; // [sp+4h] [bp-Ch]@2

  v1 = lua_tointegerx(L, 1, 0);
  v2 = CharMgr::GetChar(&g_kCharMgr, v1);
  if ( v2 )
  {
    ((void (__thiscall *)(Char *, NiPoint3 *))v2->baseclass_0.vfptr[6].SetAbStateProperty)(v2, &kPos);
    lua_pushboolean(L, 1);
    lua_pushinteger(L, (signed int)kPos.x);
    lua_pushinteger(L, (signed int)kPos.y);
    result = 3;
  }
  else
  {
    lua_pushboolean(L, 0);
    result = 1;
  }
  return result;
}

//----- (00424100) --------------------------------------------------------
int __cdecl LuaScript::cGetClass(lua_State *L)
{
  unsigned __int16 v1; // ax@1
  Char *v2; // eax@1
  char v3; // al@3

  v1 = lua_tointegerx(L, 1, 0);
  v2 = CharMgr::GetChar(&g_kCharMgr, v1);
  if ( v2 )
  {
    switch ( Char::GetClass(v2) )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        v3 = 1;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        v3 = 6;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        v3 = 11;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        v3 = 16;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        v3 = 21;
        break;
      case 0x1A:
      case 0x1B:
        v3 = 26;
        break;
      default:
        v3 = 0;
        break;
    }
    lua_pushinteger(L, (unsigned __int8)v3);
  }
  return 1;
}

//----- (004241E0) --------------------------------------------------------
int __cdecl LuaScript::cGetCharMode(lua_State *L)
{
  unsigned __int16 v1; // ax@1
  Char *v2; // eax@1
  int result; // eax@2

  v1 = lua_tointegerx(L, 1, 0);
  v2 = CharMgr::GetChar(&g_kCharMgr, v1);
  if ( v2 )
  {
    lua_pushinteger(L, v2->m_byMode);
    result = 1;
  }
  else
  {
    lua_pushnil(L);
    result = 1;
  }
  return result;
}

//----- (00424230) --------------------------------------------------------
int __cdecl LuaScript::cGetMainCharHandle(lua_State *L)
{
  lua_pushinteger(L, g_pkMainChar->m_kHandle);
  return 1;
}

//----- (00424260) --------------------------------------------------------
int __cdecl LuaScript::cMoveMainChar(lua_State *L)
{
  int v1; // edi@1
  int result; // eax@2
  float v3; // ST1C_4@3
  float v4; // ST18_4@3
  NiPoint3 kPos; // [sp+14h] [bp-14h]@3
  int PosX; // [sp+20h] [bp-8h]@1
  int PosY; // [sp+24h] [bp-4h]@1

  PosX = lua_tointegerx(L, 1, 0);
  PosY = lua_tointegerx(L, 2, 0);
  v1 = lua_tointegerx(L, 3, 0);
  if ( PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID) )
  {
    v3 = (double)PosY;
    v4 = (double)PosX;
    World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
    if ( g_pkMainChar )
    {
      ((void (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(v1);
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
      MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
      MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, &kPos);
      MainChar::StartMoveTarget((MainChar *)g_pkMainChar);
    }
    result = 0;
  }
  else
  {
    lua_pushboolean(L, 0);
    result = 1;
  }
  return result;
}

//----- (00424330) --------------------------------------------------------
int __cdecl LuaScript::cShowInterface(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // eax@1

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( !v1 )
      GameFrameWork::HideEscapeWin((GameFrameWork *)v2);
    byte_B5BB25 = v1;
  }
  return 0;
}
// B5BB25: using guessed type char byte_B5BB25;

//----- (00424380) --------------------------------------------------------
int __cdecl LuaScript::cShowBasicInfo(lua_State *L)
{
  byte_B5BB4C = lua_toboolean(L, 1) != 0;
  return 0;
}
// B5BB4C: using guessed type char byte_B5BB4C;

//----- (004243A0) --------------------------------------------------------
int __cdecl LuaScript::cShowSkillWin(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // eax@1
  PgWin *v3; // esi@2

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = (PgWin *)v2[20].baseclass_0.m_pkMsgHooker;
    if ( v3 )
    {
      if ( v1 )
      {
        SkillWin::ResetContents((SkillWin *)v2[20].baseclass_0.m_pkMsgHooker);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
        return 0;
      }
      PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v2[20].baseclass_0.m_pkMsgHooker);
    }
  }
  return 0;
}

//----- (00424410) --------------------------------------------------------
int __cdecl LuaScript::cShowAnnounceWin(lua_State *L)
{
  bool v1; // bl@1
  PgFrameWork *v2; // eax@1
  PgWin *v3; // eax@2

  v1 = lua_toboolean(L, 1) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = (PgWin *)v2[28].m_kMsgQ.m_uiHead;
    if ( v3 )
    {
      if ( v1 )
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
        return 0;
      }
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
    }
  }
  return 0;
}

//----- (00424470) --------------------------------------------------------
int __cdecl LuaScript::cShowMiniMapSideWin(lua_State *L)
{
  PgFrameWork *v1; // eax@1
  MiniMapWin *v2; // ecx@2
  bool Show; // [sp+0h] [bp-4h]@1

  Show = lua_toboolean(L, 1) != 0;
  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
  {
    v2 = *(MiniMapWin **)&v1[15].m_bInit;
    if ( v2 )
      MiniMapWin::ShowSideWin(v2, Show);
  }
  return 0;
}

//----- (004244C0) --------------------------------------------------------
int __cdecl LuaScript::cShowHPBar(lua_State *L)
{
  byte_B5BB23 = lua_toboolean(L, 1) != 0;
  return 0;
}
// B5BB23: using guessed type char byte_B5BB23;

//----- (004244E0) --------------------------------------------------------
int __cdecl LuaScript::cShowSPBar(lua_State *L)
{
  byte_B5BB24 = lua_toboolean(L, 1) != 0;
  return 0;
}
// B5BB24: using guessed type char byte_B5BB24;

//----- (00424500) --------------------------------------------------------
int __cdecl LuaScript::cShowNPCName(lua_State *L)
{
  byte_B5BB20 = lua_toboolean(L, 1) != 0;
  return 0;
}
// B5BB20: using guessed type char byte_B5BB20;

//----- (00424520) --------------------------------------------------------
int __cdecl LuaScript::cCloseNPCDialog(lua_State *L)
{
  PgFrameWork *v1; // eax@1
  NpcDialogWin *v2; // ecx@2

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
  {
    v2 = *(NpcDialogWin **)&v1[26].m_bInit;
    if ( v2 )
      NpcDialogWin::CloseDialog(v2);
  }
  if ( g_pkMainChar )
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
  return 0;
}

//----- (00424560) --------------------------------------------------------
int __cdecl LuaScript::cOpenFreeStat(lua_State *L)
{
  PgFrameWork *v1; // eax@1
  PgWin *v2; // esi@2

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
  {
    v2 = (PgWin *)v1[19].m_kMsgQ.m_uiTail;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, (PgWin *)v1[19].m_kMsgQ.m_uiTail) )
      PgWin::ProcessMsg(v2, 5u, 0x15u, 0);
  }
  return 0;
}

//----- (004245A0) --------------------------------------------------------
int __cdecl LuaScript::cEnablePlayGuide(lua_State *L)
{
  int v1; // eax@1
  bool v2; // bl@1
  PgFrameWork *v3; // eax@1
  GameFrameWork *v4; // esi@1

  v1 = lua_toboolean(L, 1);
  v2 = v1 != 0;
  byte_B5BB4D = v1 != 0;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v4 = (GameFrameWork *)v3;
  if ( v3 )
  {
    if ( v2 )
    {
      GameFrameWork::OpenPlayGuideMinWin((GameFrameWork *)v3);
      Singleton<Tutorial>::getInstance()->m_bTutorialFinishMapLink = 1;
      return 0;
    }
    GameFrameWork::ClosePlayGuideWin((GameFrameWork *)v3);
    GameFrameWork::ClosePlayGuideMinWin(v4);
  }
  return 0;
}
// B5BB4D: using guessed type char byte_B5BB4D;

//----- (00424610) --------------------------------------------------------
int __cdecl LuaScript::cResetCamera(lua_State *L)
{
  PgFrameWork *v1; // eax@1
  CameraEffect *v2; // ecx@2

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
  {
    v2 = (CameraEffect *)v1[134].baseclass_0.vfptr;
    if ( v2 )
      CameraEffect::Start(v2, Timer::ms_fCurTime, 0.5, 4u, 1u);
  }
  return 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00424650) --------------------------------------------------------
int __cdecl LuaScript::cMoveCamera(lua_State *L)
{
  PgFrameWork *v1; // eax@1
  PgFrameWork *v2; // esi@1
  float v3; // ST34_4@3
  float v4; // ST30_4@3
  IDirectMessengerVtbl *v5; // eax@3
  float v6; // edx@3
  double v7; // st7@3
  double v8; // st7@3
  float v9; // ST38_4@3
  float v10; // ST34_4@3
  IDirectMessengerVtbl *v11; // ecx@3
  NiPoint3 CameraLookAt; // [sp+18h] [bp-38h]@3
  NiPoint3 DestPos; // [sp+24h] [bp-2Ch]@3
  void (__thiscall *v15)(IDirectMessenger *, int, void *, IDirectMessenger *); // [sp+30h] [bp-20h]@3
  float v16; // [sp+34h] [bp-1Ch]@3
  void (__thiscall *v17)(IDirectMessenger *, int, void *, IDirectMessenger *); // [sp+38h] [bp-18h]@3
  int Dist; // [sp+3Ch] [bp-14h]@1
  int AngleXZ; // [sp+40h] [bp-10h]@1
  int AngleY; // [sp+44h] [bp-Ch]@1
  int PosX; // [sp+48h] [bp-8h]@1
  int PosY; // [sp+4Ch] [bp-4h]@1

  PosX = lua_tointegerx(L, 1, 0);
  PosY = lua_tointegerx(L, 2, 0);
  AngleXZ = lua_tointegerx(L, 3, 0);
  AngleY = lua_tointegerx(L, 4, 0);
  Dist = lua_tointegerx(L, 5, 0);
  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v2 = v1;
  if ( v1 && v1[134].baseclass_0.vfptr )
  {
    v3 = (double)PosY;
    v4 = (double)PosX;
    World::GetAdvGroundPos(&g_kWorld, v4, v3, &DestPos);
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[21].Deaffect)(&CameraLookAt);
    v5 = v2[134].baseclass_0.vfptr;
    *(float *)&v15 = DestPos.x - CameraLookAt.x;
    v16 = DestPos.y - CameraLookAt.y;
    v6 = v16;
    v7 = DestPos.z - CameraLookAt.z;
    v5[1].DirectDispatchToParent = v15;
    v5[2].SetMsgHooker = (void (__thiscall *)(IDirectMessenger *, IDirectMessenger *))LODWORD(v6);
    *(float *)&v17 = v7;
    v8 = (double)AngleY;
    v5[2].SendDirectMessage = v17;
    v9 = v8;
    v10 = (double)AngleXZ;
    CameraEffect::SetAngle((CameraEffect *)v2[134].baseclass_0.vfptr, v10, v9);
    v11 = v2[134].baseclass_0.vfptr;
    *(float *)&v11[2].DirectDispatchToChildren = (double)Dist;
    CameraEffect::Start((CameraEffect *)v11, Timer::ms_fCurTime, 0.5, 3u, 1u);
  }
  return 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00424780) --------------------------------------------------------
int __cdecl LuaScript::cCameraEffect(lua_State *L)
{
  int v1; // esi@1
  PgFrameWork *v2; // eax@1
  CameraEffect *v3; // eax@2

  v1 = lua_tointegerx(L, 1, 0);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = (CameraEffect *)v2[134].baseclass_0.vfptr;
    if ( v3 )
      CameraEffect::Start(v3, Timer::ms_fCurTime, 0.5, v1, 1u);
  }
  return 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004247E0) --------------------------------------------------------
int __cdecl LuaScript::cSetCameraCtrl(lua_State *L)
{
  float v1; // ST30_4@1
  float v2; // ST2C_4@1
  float v3; // ST28_4@1
  int result; // eax@1

  v1 = lua_tonumberx(L, 1, 0);
  v2 = lua_tonumberx(L, 2, 0);
  v3 = lua_tonumberx(L, 3, 0);
  CameraCtrl::SetZoom(&this, v1);
  this.m_fAngleUD = v2;
  result = 0;
  this.m_fAngleLR = v3;
  return result;
}

//----- (00424840) --------------------------------------------------------
int __cdecl LuaScript::cAddSysMsg(lua_State *L)
{
  const char *v1; // eax@1
  PgFrameWork *v2; // eax@1
  const char *v3; // ecx@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > SysMsg; // [sp+0h] [bp-2Ch]@1
  unsigned int v6; // [sp+1Ch] [bp-10h]@1
  int v7; // [sp+28h] [bp-4h]@1
  int v8; // [sp+2Ch] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  SysMsg.baseclass_0._Myres = 15;
  SysMsg.baseclass_0._Mysize = 0;
  SysMsg.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&SysMsg, v1, strlen(v1));
  v7 = 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = *(const char **)&SysMsg;
    if ( SysMsg.baseclass_0._Myres < 0x10 )
      v3 = (const char *)&SysMsg;
    GameFrameWork::AddSysMsg((GameFrameWork *)v2, v3);
  }
  if ( SysMsg.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&SysMsg);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00424910) --------------------------------------------------------
int __cdecl LuaScript::cScriptMsg(lua_State *L)
{
  const char *v1; // eax@1
  unsigned __int16 v2; // si@1
  const char *v3; // eax@1
  ScriptMsg *v4; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ScriptIndex; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  ScriptIndex.baseclass_0._Myres = 15;
  ScriptIndex.baseclass_0._Mysize = 0;
  ScriptIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ScriptIndex, v1, strlen(v1));
  v8 = 0;
  v2 = lua_tointegerx(L, 2, 0);
  v3 = *(const char **)&ScriptIndex;
  if ( ScriptIndex.baseclass_0._Myres < 0x10 )
    v3 = (const char *)&ScriptIndex;
  v4 = ScriptMsgTab::GetScriptMsgInfo(v3);
  ScriptMsgCtrl::AddMsg(v4, 0, v2);
  if ( ScriptIndex.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ScriptIndex);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (004249E0) --------------------------------------------------------
int __cdecl LuaScript::cLoadEffect(lua_State *L)
{
  const char *v1; // eax@1
  unsigned __int8 v2; // bl@1
  float v3; // ST28_4@1
  float v4; // ST24_4@1
  char *v5; // ecx@1
  _BYTE v6[12]; // ST1C_12@3
  _BYTE v7[12]; // ST10_12@3
  Effect *v8; // eax@3
  Effect *v9; // esi@3
  NiNode *v10; // eax@4
  NiPoint3 kPos; // [sp+18h] [bp-74h]@1
  NiPoint3 kDir; // [sp+24h] [bp-68h]@1
  int PosY; // [sp+30h] [bp-5Ch]@1
  float Scale; // [sp+34h] [bp-58h]@1
  int PosX; // [sp+38h] [bp-54h]@1
  NiMatrix3 this; // [sp+3Ch] [bp-50h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > EffectName; // [sp+60h] [bp-2Ch]@1
  unsigned int v19; // [sp+7Ch] [bp-10h]@1
  int v20; // [sp+88h] [bp-4h]@1
  int v21; // [sp+8Ch] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  EffectName.baseclass_0._Myres = 15;
  EffectName.baseclass_0._Mysize = 0;
  EffectName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&EffectName, v1, strlen(v1));
  v20 = 0;
  PosX = lua_tointegerx(L, 2, 0);
  PosY = lua_tointegerx(L, 3, 0);
  v2 = lua_tointegerx(L, 4, 0);
  Scale = lua_tonumberx(L, 5, 0);
  v3 = (double)PosY;
  v4 = (double)PosX;
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  *(float *)&PosX = (NI_PI + NI_PI) * (double)v2 / 180.0;
  NiMatrix3::MakeZRotation(&this, *(float *)&PosX);
  NiMatrix3::operator_(&this, &kDir, &World::ms_kNorthDir);
  v5 = *(char **)&EffectName;
  if ( EffectName.baseclass_0._Myres < 0x10 )
    v5 = (char *)&EffectName;
  *(_DWORD *)v6 = (_DWORD)kDir.x;
  *(_QWORD *)&v6[4] = *(_QWORD *)&kDir.y;
  *(_DWORD *)v7 = (_DWORD)kPos.x;
  *(_QWORD *)&v7[4] = *(_QWORD *)&kPos.y;
  v8 = EffectMgr::JustCreateEffect(&g_kEffectMgr, v5, *(NiPoint3 *)v7, *(NiPoint3 *)v6, 0.0, 1);
  v9 = v8;
  if ( v8 )
  {
    v10 = v8->m_spDefaultEffect.m_pObject;
    if ( v10 )
    {
      Scale = fabs(Scale);
      v10->baseclass_0.m_kLocal.m_fScale = Scale;
    }
    EffectMgr::AttachEffectToWorld(&g_kEffectMgr, v9);
    v9->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v9, LODWORD(Timer::ms_fCurTime));
  }
  if ( EffectName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&EffectName);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// B6DE8C: using guessed type const float NI_PI;

//----- (00424BA0) --------------------------------------------------------
int __cdecl LuaScript::cLoadKFM(lua_State *L)
{
  const char *v1; // eax@1
  unsigned __int8 v2; // bl@1
  float v3; // ST1C_4@1
  float v4; // ST18_4@1
  char *v5; // eax@3
  char *v6; // eax@3
  int v7; // esi@3
  int v8; // ebx@6
  NiPoint3 kDir; // [sp+1Ch] [bp-70h]@1
  NiPoint3 kPos; // [sp+28h] [bp-64h]@1
  NiPointer<NiAVObject> spRootNode; // [sp+34h] [bp-58h]@1
  float PosX; // [sp+38h] [bp-54h]@1
  NiMatrix3 kRot; // [sp+3Ch] [bp-50h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > filename; // [sp+60h] [bp-2Ch]@1
  unsigned int v16; // [sp+7Ch] [bp-10h]@1
  int v17; // [sp+88h] [bp-4h]@1
  int v18; // [sp+8Ch] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  filename.baseclass_0._Myres = 15;
  filename.baseclass_0._Mysize = 0;
  filename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&filename, v1, strlen(v1));
  v17 = 0;
  LODWORD(PosX) = lua_tointegerx(L, 2, 0);
  spRootNode.m_pObject = (NiAVObject *)lua_tointegerx(L, 3, 0);
  v2 = lua_tointegerx(L, 4, 0);
  v3 = (double)(signed int)spRootNode.m_pObject;
  v4 = (double)SLODWORD(PosX);
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  PosX = (NI_PI + NI_PI) * (double)v2 / 180.0;
  NiMatrix3::MakeZRotation(&kRot, PosX);
  NiMatrix3::operator_(&kRot, &kDir, &World::ms_kNorthDir);
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = fs("%s\\%s.kfm");
  v6 = Folder::Merge(&Folder::m_acCharacter, v5);
  v7 = (int)NiActorManager::Create(v6, 0, 1, 0);
  LODWORD(PosX) = v7;
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  if ( v7 )
  {
    v8 = *(_DWORD *)(v7 + 12);
    spRootNode.m_pObject = (NiAVObject *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)(v8 + 4));
    LOBYTE(v17) = 2;
    if ( v8 )
    {
      *(_DWORD *)(v8 + 88) = (_DWORD)kPos.x;
      *(_DWORD *)(v8 + 92) = LODWORD(kPos.y);
      *(_DWORD *)(v8 + 96) = LODWORD(kPos.z);
      NpNs_RotateModelZToVector(&kDir, &kRot);
      memcpy((void *)(v8 + 52), &kRot, 0x24u);
      NiAVObject::Update((NiAVObject *)v8, 0.0, 1);
      NiAVObject::UpdateProperties((NiAVObject *)v8);
      NiAVObject::UpdateEffects((NiAVObject *)v8);
      *(_WORD *)(v8 + 28) &= 0xFFFEu;
      (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)dword_AA519C + 116))(v8, 0);
      v7 = LODWORD(PosX);
    }
    NiActorManager::SetTargetAnimation((NiActorManager *)v7, 0x18A88u);
    NiActorManager::Update((NiActorManager *)v7, 0.0);
    LOBYTE(v17) = 1;
    if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
  }
  LOBYTE(v17) = 0;
  if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  if ( filename.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&filename);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// AA519C: using guessed type int dword_AA519C;
// B6DE8C: using guessed type const float NI_PI;

//----- (00424E00) --------------------------------------------------------
int __cdecl LuaScript::cShowGroundObject(lua_State *L)
{
  const char *v1; // eax@1
  bool v2; // zf@1
  const char *v3; // eax@1
  bool v4; // bl@1
  NiAVObject *v5; // esi@7
  NiPointer<NiAVObject> spObj; // [sp+0h] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NodeName; // [sp+4h] [bp-2Ch]@1
  unsigned int v9; // [sp+20h] [bp-10h]@1
  int v10; // [sp+2Ch] [bp-4h]@1
  int v11; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  NodeName.baseclass_0._Myres = 15;
  NodeName.baseclass_0._Mysize = 0;
  NodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NodeName, v1, strlen(v1));
  v10 = 0;
  v2 = lua_toboolean(L, 2) == 0;
  v3 = *(const char **)&NodeName;
  v4 = !v2;
  if ( NodeName.baseclass_0._Myres < 0x10 )
    v3 = (const char *)&NodeName;
  World::GetGroundObject(&g_kWorld, &spObj, v3);
  if ( spObj.m_pObject )
  {
    if ( v4 )
      spObj.m_pObject->m_uFlags &= 0xFFFEu;
    else
      spObj.m_pObject->m_uFlags |= 1u;
    v5 = spObj.m_pObject;
    if ( spObj.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
  if ( NodeName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&NodeName);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00424F10) --------------------------------------------------------
int __cdecl LuaScript::cPersonalScriptMsg(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // eax@1
  ScriptMsg *v3; // eax@3
  const char *v4; // ecx@3
  int v5; // eax@3
  int v6; // esi@3
  char v7; // dl@4
  unsigned int v8; // eax@5
  char *v9; // edi@5
  unsigned int v10; // esi@5
  char *v11; // eax@8
  unsigned int v12; // esi@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // edi@9
  const char *v14; // eax@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@13
  ScriptMsg *v17; // [sp-1Ch] [bp-88h]@15
  const char *v18; // [sp-18h] [bp-84h]@15
  unsigned __int16 v19; // [sp-14h] [bp-80h]@15
  unsigned int v20; // [sp-10h] [bp-7Ch]@1
  ScriptMsg *pkScriptMsg; // [sp+0h] [bp-6Ch]@3
  unsigned __int16 Handle; // [sp+4h] [bp-68h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ScriptIndex; // [sp+8h] [bp-64h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > message; // [sp+24h] [bp-48h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > personalText; // [sp+40h] [bp-2Ch]@7
  unsigned int v26; // [sp+5Ch] [bp-10h]@1
  int v27; // [sp+68h] [bp-4h]@1
  int v28; // [sp+6Ch] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v20 = (unsigned int)&v28 ^ __security_cookie;
  ScriptIndex.baseclass_0._Myres = 15;
  ScriptIndex.baseclass_0._Mysize = 0;
  ScriptIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ScriptIndex, v1, strlen(v1));
  v27 = 0;
  Handle = lua_tointegerx(L, 2, 0);
  v2 = *(const char **)&ScriptIndex;
  if ( ScriptIndex.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&ScriptIndex;
  v3 = ScriptMsgTab::GetScriptMsgInfo(v2);
  v4 = v3->SM_Msg;
  pkScriptMsg = v3;
  v5 = (int)v3->SM_Msg;
  message.baseclass_0._Myres = 15;
  message.baseclass_0._Mysize = 0;
  message.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = v5 + 1;
  do
    v7 = *(_BYTE *)v5++;
  while ( v7 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&message, v4, v5 - v6);
  LOBYTE(v27) = 1;
  v8 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&message, "%s", 0, 2u);
  v9 = *(char **)&message;
  v10 = v8;
  if ( message.baseclass_0._Myres < 0x10 )
    v9 = (char *)&message;
  personalText.baseclass_0._Myres = 15;
  personalText.baseclass_0._Mysize = 0;
  personalText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&personalText, &byte_97CAA7, 0);
  LOBYTE(v27) = 2;
  if ( v10 != -1 )
  {
    ((void (__cdecl *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v20);
    v11 = fs(v9);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&personalText, v11, strlen(v11));
  }
  v12 = personalText.baseclass_0._Myres;
  v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&personalText;
  v14 = *(const char **)&personalText;
  if ( personalText.baseclass_0._Myres < 0x10 )
    v14 = (const char *)&personalText;
  if ( std::char_traits<char>::compare(v14, &First2, 0) || personalText.baseclass_0._Mysize != 0 )
  {
    v15 = v13;
    if ( v12 < 0x10 )
      v15 = &personalText;
    v19 = Handle;
    v18 = (const char *)v15;
    v17 = pkScriptMsg;
  }
  else
  {
    v19 = Handle;
    v18 = 0;
    v17 = pkScriptMsg;
  }
  ScriptMsgCtrl::AddMsg(v17, v18, v19);
  if ( personalText.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&personalText);
  personalText.baseclass_0._Myres = 15;
  personalText.baseclass_0._Mysize = 0;
  personalText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( message.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&message);
  message.baseclass_0._Myres = 15;
  message.baseclass_0._Mysize = 0;
  message.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( ScriptIndex.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ScriptIndex);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00425110) --------------------------------------------------------
int __cdecl LuaScript::cOpenNPCDialog(lua_State *L)
{
  const char *v1; // eax@1
  PgFrameWork *v2; // esi@1
  const char *v3; // eax@2
  ScriptMsg *v4; // edi@4
  NpcDialogWin *v5; // esi@5
  bool CloseBtn; // [sp+0h] [bp-34h]@1
  unsigned __int16 MobID; // [sp+4h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ScriptIndex; // [sp+8h] [bp-2Ch]@1
  unsigned int v10; // [sp+24h] [bp-10h]@1
  int v11; // [sp+30h] [bp-4h]@1
  int v12; // [sp+34h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  MobID = lua_tointegerx(L, 1, 0);
  ScriptIndex.baseclass_0._Myres = 15;
  ScriptIndex.baseclass_0._Mysize = 0;
  ScriptIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 2, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ScriptIndex, v1, strlen(v1));
  v11 = 0;
  CloseBtn = lua_toboolean(L, 3) != 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = *(const char **)&ScriptIndex;
    if ( ScriptIndex.baseclass_0._Myres < 0x10 )
      v3 = (const char *)&ScriptIndex;
    v4 = ScriptMsgTab::GetScriptMsgInfo(v3);
    if ( v4 )
    {
      v5 = *(NpcDialogWin **)&v2[26].m_bInit;
      if ( v5 )
      {
        NpcDialogWin::CloseDialog(v5);
        NpcDialogWin::OpenNpcScriptDialog(v5, MobID, v4->SM_Msg, CloseBtn);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
  if ( ScriptIndex.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ScriptIndex);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00425230) --------------------------------------------------------
int __cdecl LuaScript::cGetWin(lua_State *L)
{
  const char *v1; // eax@1
  void *v2; // esi@1
  int result; // eax@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v4; // [sp-2Ch] [bp-5Ch]@1
  int v5; // [sp-1Ch] [bp-4Ch]@1
  signed int v6; // [sp-18h] [bp-48h]@1
  unsigned int v7; // [sp-10h] [bp-40h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > WinName; // [sp+4h] [bp-2Ch]@1
  unsigned int v10; // [sp+20h] [bp-10h]@1
  int v11; // [sp+2Ch] [bp-4h]@1
  int v12; // [sp+30h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v7 = (unsigned int)&v12 ^ __security_cookie;
  WinName.baseclass_0._Myres = 15;
  WinName.baseclass_0._Mysize = 0;
  WinName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&WinName, v1, strlen(v1));
  v8 = &v4;
  v6 = 15;
  v5 = 0;
  v11 = 0;
  v4.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v4, &WinName, 0, 0xFFFFFFFFu);
  v2 = PgWinMgr::Find(&Pgg_kWinMgr, v4);
  if ( v2 )
  {
    lua_pushboolean(L, 1);
    lua_pushlightuserdata(L, v2);
    if ( WinName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&WinName);
    result = 2;
  }
  else
  {
    lua_pushboolean(L, 0);
    if ( WinName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&WinName);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00425330) --------------------------------------------------------
int __cdecl LuaScript::cCreateText(lua_State *L)
{
  void *v1; // edi@1
  bool v2; // ST58_1@1
  const char *v3; // eax@1
  PgFont *v4; // eax@3
  void *v5; // edi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@3
  int Width; // [sp+0h] [bp-40h]@1
  int Height; // [sp+4h] [bp-3Ch]@1
  int X; // [sp+Ch] [bp-34h]@1
  int Y; // [sp+10h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Text; // [sp+14h] [bp-2Ch]@1
  unsigned int v13; // [sp+30h] [bp-10h]@1
  int v14; // [sp+3Ch] [bp-4h]@1
  int v15; // [sp+40h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v1 = lua_touserdata(L, 1);
  X = lua_tointegerx(L, 2, 0);
  Y = lua_tointegerx(L, 3, 0);
  Width = lua_tointegerx(L, 4, 0);
  Height = lua_tointegerx(L, 5, 0);
  v2 = lua_toboolean(L, 6) != 0;
  v3 = lua_tolstring(L, 7, 0);
  Text.baseclass_0._Myres = 15;
  Text.baseclass_0._Mysize = 0;
  Text.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Text, v3, strlen(v3));
  v14 = 0;
  if ( !lua_type(L, (int)v1) )
    v1 = 0;
  v4 = Font::Get(0);
  v5 = PgWinText::CreateWin(X, Y, Width, Height, v4, (PgWin *)v1, 0, 0);
  (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 240))(v5);
  (*(void (__thiscall **)(void *, signed int))(*(_DWORD *)v5 + 256))(v5, 1);
  v6 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Text;
  if ( Text.baseclass_0._Myres < 0x10 )
    v6 = &Text;
  (*(void (__thiscall **)(void *, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))(*(_DWORD *)v5 + 472))(
    v5,
    v6);
  (*(void (__thiscall **)(void *, signed int))(*(_DWORD *)v5 + 488))(v5, 5);
  lua_pushlightuserdata(L, v5);
  if ( Text.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&Text);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004254B0) --------------------------------------------------------
int __cdecl LuaScript::cCreateButton(lua_State *L)
{
  void *v1; // ebx@1
  bool v2; // ST50_1@1
  const char *v3; // eax@1
  const char *v4; // edi@1
  const char *v5; // ecx@1
  int v6; // eax@1
  char v7; // dl@2
  NiSourceTexture *v8; // eax@5
  PgSprData *v9; // eax@5
  PgWin *v10; // ebx@5
  PgFont *v11; // eax@5
  PgWinText *v12; // edi@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@5
  int X; // [sp+4h] [bp-3Ch]@1
  int Y; // [sp+8h] [bp-38h]@1
  int Height; // [sp+Ch] [bp-34h]@1
  int Width; // [sp+10h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Text; // [sp+14h] [bp-2Ch]@1
  unsigned int v20; // [sp+30h] [bp-10h]@1
  int v21; // [sp+3Ch] [bp-4h]@3
  int v22; // [sp+40h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v1 = lua_touserdata(L, 1);
  X = lua_tointegerx(L, 2, 0);
  Y = lua_tointegerx(L, 3, 0);
  Width = lua_tointegerx(L, 4, 0);
  Height = lua_tointegerx(L, 5, 0);
  v2 = lua_toboolean(L, 6) != 0;
  v3 = lua_tolstring(L, 7, 0);
  v4 = v3;
  v5 = v3;
  Text.baseclass_0._Myres = 15;
  Text.baseclass_0._Mysize = 0;
  Text.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = (int)(v3 + 1);
  do
    v7 = *v5++;
  while ( v7 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Text, v4, (unsigned int)&v5[-v6]);
  v21 = 0;
  lua_tointegerx(L, 8, 0);
  if ( !lua_type(L, (int)v1) )
    v1 = 0;
  v8 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
  v9 = PgSprData::Create(v8, 1, X, Y, Width, Height);
  v10 = (PgWin *)PgWinBut::CreateWin(X, Y, v9, (PgWin *)v1, 1u, 0, 0);
  ((void (__thiscall *)(PgWin *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v10);
  v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = Font::Get(0);
  v12 = PgWinText::CreateWin(0, 0, Width, Height, v11, v10, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v12,
    1u);
  v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Text;
  if ( Text.baseclass_0._Myres < 0x10 )
    v13 = &Text;
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v12,
    (unsigned int)v13);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  lua_pushlightuserdata(L, v10);
  if ( Text.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&Text);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00425690) --------------------------------------------------------
int __cdecl LuaScript::cActSkill(lua_State *L)
{
  unsigned __int16 v1; // di@1
  const char *v2; // eax@1
  Char *v3; // edi@1
  char *v4; // eax@4
  Char *v5; // eax@9
  Char *v6; // esi@9
  void *v7; // eax@10
  unsigned __int16 v8; // dx@13
  void *v10; // [sp-14h] [bp-48h]@3
  unsigned __int16 AttackerHandle; // [sp+0h] [bp-34h]@1
  ActiveSkillInfo *pkInfo; // [sp+4h] [bp-30h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > SkillIndex; // [sp+8h] [bp-2Ch]@1
  unsigned int v14; // [sp+24h] [bp-10h]@1
  int v15; // [sp+30h] [bp-4h]@1
  int v16; // [sp+34h] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  AttackerHandle = lua_tointegerx(L, 1, 0);
  v1 = lua_tointegerx(L, 2, 0);
  SkillIndex.baseclass_0._Myres = 15;
  SkillIndex.baseclass_0._Mysize = 0;
  SkillIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2 = lua_tolstring(L, 3, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&SkillIndex, v2, strlen(v2));
  v15 = 0;
  v3 = CharMgr::GetChar(&g_kCharMgr, v1);
  if ( v3 )
  {
    v4 = *(char **)&SkillIndex;
    if ( SkillIndex.baseclass_0._Myres < 0x10 )
      v4 = (char *)&SkillIndex;
    pkInfo = ActSkillInfoTab::GetByInxName(v4);
    if ( pkInfo )
    {
      v5 = CharMgr::GetChar(&g_kCharMgr, AttackerHandle);
      v6 = v5;
      if ( v5 )
      {
        ((void (__thiscall *)(Char *, Char *, signed int, _DWORD))v5->baseclass_0.vfptr[9].GetAbstateColor)(
          v5,
          v3,
          1,
          pkInfo->ID);
        v7 = operator new(0x18u);
        if ( v7 )
        {
          *((_DWORD *)v7 + 4) = 0;
          *((_DWORD *)v7 + 2) = 0;
          *((_DWORD *)v7 + 3) = 0;
          *((_DWORD *)v7 + 1) = &NiTList<DamageInfo__>::_vftable_;
        }
        else
        {
          v7 = 0;
        }
        v8 = pkInfo->ID;
        *((_WORD *)v7 + 10) = 0;
        *(_WORD *)v7 = v8;
        AttackSequenceManager::AddSkillSeq(&v6->baseclass_54, (SkillSequence *)v7);
      }
      if ( SkillIndex.baseclass_0._Myres >= 0x10 )
      {
        v10 = *(void **)&SkillIndex;
        goto LABEL_16;
      }
    }
    else
    {
      if ( SkillIndex.baseclass_0._Myres >= 0x10 )
      {
        v10 = *(void **)&SkillIndex;
        goto LABEL_16;
      }
    }
  }
  else
  {
    if ( SkillIndex.baseclass_0._Myres >= 0x10 )
    {
      v10 = *(void **)&SkillIndex;
LABEL_16:
      operator delete(v10);
      return 0;
    }
  }
  return 0;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004257F0) --------------------------------------------------------
int __cdecl LuaScript::cGetCameraCtrl(lua_State *L)
{
  long double v1; // st7@1
  CameraCtrl kCameraCtrl; // [sp+10h] [bp-88h]@1
  int v4; // [sp+94h] [bp-4h]@1

  CameraCtrl::CameraCtrl(&kCameraCtrl, &this);
  v4 = 0;
  v1 = CameraCtrl::GetZoom(&kCameraCtrl);
  lua_pushnumber(L, v1);
  lua_pushnumber(L, kCameraCtrl.m_fAngleUD);
  lua_pushnumber(L, kCameraCtrl.m_fAngleLR);
  v4 = -1;
  CameraCtrl::_CameraCtrl(&kCameraCtrl);
  return 3;
}

//----- (00425890) --------------------------------------------------------
void __thiscall LuaScript::initFunc(LuaScript *this)
{
  LuaScript *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[6].__vecDelDtor)("cGetCurTime", LuaScript::cGetCurTime);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cAddSysMsg",
    LuaScript::cAddSysMsg);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetEnableInput",
    LuaScript::cSetEnableInput);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cScriptMsg",
    LuaScript::cScriptMsg);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetUser",
    LuaScript::cGetUser);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetRemainStatPoint",
    LuaScript::cGetRemainStatPoint);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(v1, "cGetHP", LuaScript::cGetHP);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetMaxHP",
    LuaScript::cGetMaxHP);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cLoadChar",
    LuaScript::cLoadChar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cDeleteChar",
    LuaScript::cDeleteChar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cMoveChar",
    LuaScript::cMoveChar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetCharPos",
    LuaScript::cGetCharPos);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cActChar",
    LuaScript::cActChar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cActSkill",
    LuaScript::cActSkill);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetClass",
    LuaScript::cGetClass);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsDuringMove",
    LuaScript::cIsDuringMove);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsAttack",
    LuaScript::cIsAttack);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetCharMode",
    LuaScript::cGetCharMode);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetMainCharHandle",
    LuaScript::cGetMainCharHandle);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cMoveMainChar",
    LuaScript::cMoveMainChar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetQuestStatus",
    LuaScript::cGetQuestStatus);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cLoadEffect",
    LuaScript::cLoadEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cLoadKFM",
    LuaScript::cLoadKFM);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowGroundObject",
    LuaScript::cShowGroundObject);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowInterface",
    LuaScript::cShowInterface);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowBasicInfo",
    LuaScript::cShowBasicInfo);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowHelpWin",
    LuaScript::cShowHelpWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowCharWin",
    LuaScript::cShowCharWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowInvenWin",
    LuaScript::cShowInvenWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowSkillWin",
    LuaScript::cShowSkillWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowAnnounceWin",
    LuaScript::cShowAnnounceWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowQuestNewsWin",
    LuaScript::cShowQuestNewsWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowMiniMapSideWin",
    LuaScript::cShowMiniMapSideWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowHPBar",
    LuaScript::cShowHPBar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowSPBar",
    LuaScript::cShowSPBar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowNPCName",
    LuaScript::cShowNPCName);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cOpenNPCDialog",
    LuaScript::cOpenNPCDialog);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCloseNPCDialog",
    LuaScript::cCloseNPCDialog);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cOpenFreeStat",
    LuaScript::cOpenFreeStat);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCloseShopWin",
    LuaScript::cCloseShopWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cEnablePlayGuide",
    LuaScript::cEnablePlayGuide);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetWin",
    LuaScript::cGetWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetShowWin",
    LuaScript::cGetShowWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cResetCamera",
    LuaScript::cResetCamera);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cMoveCamera",
    LuaScript::cMoveCamera);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCameraEffect",
    LuaScript::cCameraEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cGetCameraCtrl",
    LuaScript::cGetCameraCtrl);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetCameraCtrl",
    LuaScript::cSetCameraCtrl);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCreateSprite",
    LuaScript::cCreateSprite);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCreateText",
    LuaScript::cCreateText);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCreateButton",
    LuaScript::cCreateButton);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowQuestWin",
    LuaScript::cShowQuestWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cPersonalScriptMsg",
    LuaScript::cPersonalScriptMsg);
}

//----- (00425C90) --------------------------------------------------------
Tutorial *__cdecl Singleton<Tutorial>::getInstance()
{
  Tutorial *result; // eax@1
  void *v1; // eax@2

  result = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v1 = operator new(0xB4u);
    if ( v1 )
    {
      Tutorial::Tutorial(result);
      Singleton<Tutorial>::m_pInstance = result;
    }
    else
    {
      result = 0;
      Singleton<Tutorial>::m_pInstance = 0;
    }
  }
  return result;
}

//----- (00425D10) --------------------------------------------------------
NiPoint3 *__thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt)
{
  NiPoint3 *v3; // eax@1

  v3 = result;
  result->x = this->x - pt->x;
  result->y = this->y - pt->y;
  result->z = this->z - pt->z;
  return v3;
}

//----- (00425D40) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_NiTListBase<DFALL<DamageInfo__>_DamageInfo__>(NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *this)
{
  this->vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (00425D50) --------------------------------------------------------
unsigned int __cdecl ITableBase<ScriptMsg_ScriptMsgTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A95950: using guessed type int ITableBase_ScriptMsg_ScriptMsgTab___ms_pkTable;

//----- (00425D70) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_scalar_deleting_destructor_(NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (00425DA0) --------------------------------------------------------
NiPoint3 *__cdecl NetUtil::NetDir2Point3Dir(NiPoint3 *result, char byNetDir)
{
  float v2; // ST0C_4@1
  NiMatrix3 kMat3; // [sp+Ch] [bp-28h]@1
  unsigned int v5; // [sp+30h] [bp-4h]@1
  int v6; // [sp+34h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = (NI_PI + NI_PI) * (double)(unsigned __int8)byNetDir / 180.0;
  NiMatrix3::MakeZRotation(&kMat3, v2);
  NiMatrix3::operator_(&kMat3, result, &World::ms_kNorthDir);
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (00425E00) --------------------------------------------------------
void *__thiscall LuaArgument::_scalar_deleting_destructor_(LuaArgument *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (LuaArgumentVtbl *)&LuaArgument::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 97CDB4: using guessed type int (__thiscall *LuaArgument___vftable_)(void *p, char);

//----- (00425E30) --------------------------------------------------------
void __thiscall Effect::SetScale(Effect *this, float fScale)
{
  NiNode *v2; // eax@1
  float fScalea; // [sp+8h] [bp+8h]@2

  v2 = this->m_spDefaultEffect.m_pObject;
  if ( v2 )
  {
    fScalea = fabs(fScale);
    v2->baseclass_0.m_kLocal.m_fScale = fScalea;
  }
}

//----- (00425E50) --------------------------------------------------------
void __thiscall DamageInfoSet::Clear(DamageInfoSet *this)
{
  DamageInfoSet *v1; // esi@1
  NiTListItem<DamageInfo *> *v2; // eax@2
  NiTListItem<DamageInfo *> *v3; // ecx@2
  void *v4; // edi@5

  v1 = this;
  while ( *(_DWORD *)&v1->kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v2 = v1->kDamageList.baseclass_0.baseclass_0.m_pkHead;
    v3 = v2->m_pkNext;
    v1->kDamageList.baseclass_0.baseclass_0.m_pkHead = v2->m_pkNext;
    if ( v3 )
      v3->m_pkPrev = 0;
    else
      v1->kDamageList.baseclass_0.baseclass_0.m_pkTail = 0;
    v4 = v2->m_element;
    v1->kDamageList.baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *)v1, v2);
    --*(_DWORD *)&v1->kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    operator delete(v4);
  }
}

//----- (00425EA0) --------------------------------------------------------
void __thiscall NiTList<DamageInfo__>::_NiTList<DamageInfo__>(NiTList<DamageInfo *> *this)
{
  NiTList<DamageInfo *> *v1; // edi@1
  NiTListItem<DamageInfo *> *v2; // esi@1
  NiTListItem<DamageInfo *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (00425F20) --------------------------------------------------------
void *__thiscall NiTList<DamageInfo__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<DamageInfo *>,DamageInfo *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<DamageInfo *> *v3; // esi@1
  NiTListItem<DamageInfo *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (00425FB0) --------------------------------------------------------
ScriptMsg *__cdecl ScriptMsgTab::GetScriptMsgInfo(const char *kIndex)
{
  ScriptMsg *result; // eax@2
  unsigned int v2; // esi@3

  if ( kIndex )
  {
    v2 = 0;
    if ( ITableBase<ScriptMsg_ScriptMsgTab>::GetTotal() )
    {
      while ( 1 )
      {
        result = (ScriptMsg *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 4),
                                v2);
        if ( result )
        {
          if ( result != (ScriptMsg *)-2 && !strcmp(kIndex, result->SM_Inx) )
            break;
        }
        ++v2;
        if ( v2 >= ITableBase<ScriptMsg_ScriptMsgTab>::GetTotal() )
          goto LABEL_8;
      }
    }
    else
    {
LABEL_8:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95950: using guessed type int ITableBase_ScriptMsg_ScriptMsgTab___ms_pkTable;

//----- (00426030) --------------------------------------------------------
int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr)
{
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           this,
           0,
           this->baseclass_0._Mysize,
           _Ptr,
           strlen(_Ptr));
}

//----- (00426060) --------------------------------------------------------
void __thiscall DamageInfoSet::_DamageInfoSet(DamageInfoSet *this)
{
  DamageInfoSet *v1; // edi@1
  NiTListItem<DamageInfo *> *v2; // esi@1
  NiTListItem<DamageInfo *> *v3; // ST00_4@2

  v1 = this;
  DamageInfoSet::Clear(this);
  v1->kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
  v2 = v1->kDamageList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->kDamageList.baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *)v1, v3);
  }
  *(_DWORD *)&v1->kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->kDamageList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->kDamageList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (004260F0) --------------------------------------------------------
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(...)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ebx@1
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *v4; // esi@1
  unsigned int v5; // edi@1
  unsigned int v6; // eax@1
  int v7; // edx@3
  int v8; // ecx@3
  int v9; // esi@3
  int v10; // eax@3
  int v11; // edx@3
  int v12; // eax@5
  unsigned int v13; // esi@8
  int v14; // eax@8
  const char *v15; // edx@9
  unsigned int v16; // edi@11
  unsigned int v17; // ecx@11
  int v18; // eax@15
  bool v19; // sf@15
  unsigned int v20; // esi@20
  const char *v21; // eax@20
  unsigned int v22; // edi@22
  unsigned int v23; // edx@22
  const char *v24; // ecx@25
  int v25; // eax@27
  bool v26; // sf@27
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *v27; // eax@31
  int v28; // [sp+Ch] [bp-Ch]@3
  int v29; // [sp+10h] [bp-8h]@3
  int v30; // [sp+14h] [bp-4h]@3
  int _Where; // [sp+24h] [bp+Ch]@3

  v3 = _Keyval;
  v4 = this;
  v5 = this->_Mask;
  v6 = v5 & stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::operator__(
              (stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)this,
              _Keyval);
  if ( v4->_Maxidx <= v6 )
    v6 += -1 - (v5 >> 1);
  v7 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *(_DWORD *)(v7 + 8 * v6);
  v9 = *(_DWORD *)&v4->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v10 = v7 + 8 * v6;
  v11 = v8;
  v29 = v10;
  v28 = v8;
  _Where = v8;
  v30 = v9;
  while ( 1 )
  {
    if ( v8 == v9 )
      v12 = v9;
    else
      v12 = **(_DWORD **)(v10 + 4);
    if ( v11 == v12 )
    {
      v27 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v27;
    }
    v13 = v3->baseclass_0._Mysize;
    v14 = v11 + 8;
    if ( v3->baseclass_0._Myres < 0x10 )
      v15 = (const char *)v3;
    else
      v15 = *(const char **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
    v16 = *(_DWORD *)(v14 + 16);
    v17 = v16;
    if ( v16 >= v13 )
      v17 = v3->baseclass_0._Mysize;
    if ( *(_DWORD *)(v14 + 20) >= 0x10u )
      v14 = *(_DWORD *)v14;
    v18 = std::char_traits<char>::compare((const char *)v14, v15, v17);
    v19 = v18 < 0;
    if ( !v18 )
    {
      if ( v16 < v13 )
        goto LABEL_19;
      LOBYTE(v18) = v16 != v13;
      v19 = v18 < 0;
    }
    if ( !v19 )
      break;
LABEL_19:
    v11 = *(_DWORD *)_Where;
    v9 = v30;
    v10 = v29;
    v8 = v28;
    _Where = *(_DWORD *)_Where;
  }
  v20 = *(_DWORD *)(_Where + 24);
  v21 = (const char *)(_Where + 8);
  if ( *(_DWORD *)(_Where + 28) >= 0x10u )
    v21 = *(const char **)v21;
  v22 = v3->baseclass_0._Mysize;
  v23 = v3->baseclass_0._Mysize;
  if ( v22 >= v20 )
    v23 = *(_DWORD *)(_Where + 24);
  if ( v3->baseclass_0._Myres < 0x10 )
    v24 = (const char *)v3;
  else
    v24 = *(const char **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
  v25 = std::char_traits<char>::compare(v24, v21, v23);
  v26 = v25 < 0;
  if ( !v25 )
  {
    if ( v22 >= v20 )
    {
      LOBYTE(v25) = v22 != v20;
      v26 = v25 < 0;
      goto LABEL_30;
    }
LABEL_31:
    v27 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v30;
    return v27;
  }
LABEL_30:
  if ( v26 )
    goto LABEL_31;
  v27 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v27;
}

//----- (00426220) --------------------------------------------------------
void __thiscall std::list<float_std::allocator<float>>::_Insert<std::_List_const_iterator<std::_List_val<float_std::allocator<float>>>>(std::list<float,std::allocator<float> > *this, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _Where, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _First, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _Last)
{
  std::list<float,std::allocator<float> > *v4; // edi@1
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > v5; // eax@1
  std::_List_nod<float,std::allocator<float> >::_Node *v6; // eax@3
  unsigned int v7; // ecx@3
  int v8; // [sp-10h] [bp-28h]@1
  std::list<float,std::allocator<float> > *result; // [sp+0h] [bp-18h]@1
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _Next; // [sp+4h] [bp-14h]@1
  int *v11; // [sp+8h] [bp-10h]@1
  int v12; // [sp+14h] [bp-4h]@1

  v11 = &v8;
  v4 = this;
  result = this;
  v5 = _First;
  _Next = _First;
  v12 = 0;
  while ( v5 != _Last )
  {
    v6 = std::_List_val<float_std::allocator<float>>::_Buynode(
           &v4->baseclass_0,
           *(std::_List_nod<float,std::allocator<float> >::_Node **)&_Where,
           *(std::_List_nod<float,std::allocator<float> >::_Node **)(*(_DWORD *)&_Where + 4),
           (const float *)(*(_DWORD *)&v5 + 8));
    v7 = v4->baseclass_0.baseclass_0._Mysize;
    if ( 1073741822 - v7 < 1 )
      std::_Xlength_error("list<T> too long");
    v4->baseclass_0.baseclass_0._Mysize = v7 + 1;
    *(_DWORD *)(*(_DWORD *)&_Where + 4) = v6;
    v6->_Prev->_Next = v6;
    v5 = (std::_List_const_iterator<std::_List_val<float,std::allocator<float> > >)**(_DWORD **)&_First;
    _First = (std::_List_const_iterator<std::_List_val<float,std::allocator<float> > >)**(_DWORD **)&_First;
  }
}

//----- (004262F0) --------------------------------------------------------
ActiveSkillInfo *__cdecl ActSkillInfoTab::GetByInxName(char *pcInxName)
{
  ActiveSkillInfo *result; // eax@4
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ActiveSkillInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ActiveSkillInfo iter; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+4h] [bp-2Ch]@1
  unsigned int v4; // [sp+20h] [bp-10h]@1
  int v5; // [sp+2Ch] [bp-4h]@1
  int v6; // [sp+30h] [bp+0h]@1

  v4 = (unsigned int)&v6 ^ __security_cookie;
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, pcInxName, strlen(pcInxName));
  v5 = 0;
  std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(
    &ActSkillInfoTab::m_hashMap_ByNameIndex,
    (std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *)&iter,
    &this);
  if ( this.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this);
  if ( iter == *(_DWORD *)&stru_B6794C )
    result = 0;
  else
    result = *(ActiveSkillInfo **)(*(_DWORD *)&iter + 36);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (004263A0) --------------------------------------------------------
void __thiscall std::list<float_std::allocator<float>>::list<float_std::allocator<float>>(std::list<float,std::allocator<float> > *this, std::list<float,std::allocator<float> > *_Right)
{
  std::list<float,std::allocator<float> > *v2; // esi@1
  void *v3; // eax@1
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > v4; // ecx@2
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > v5; // eax@2
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > v6; // edx@2
  int v7; // [sp-10h] [bp-34h]@1
  std::exception thisa; // [sp+0h] [bp-24h]@3
  char *_What; // [sp+Ch] [bp-18h]@3
  std::list<float,std::allocator<float> > *v10; // [sp+10h] [bp-14h]@1
  int *v11; // [sp+14h] [bp-10h]@1
  int v12; // [sp+20h] [bp-4h]@2

  v11 = &v7;
  v2 = this;
  v10 = this;
  this->baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0xCu);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = (std::_List_const_iterator<std::_List_val<float,std::allocator<float> > >)**(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = *(std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = (std::_List_const_iterator<std::_List_val<float,std::allocator<float> > >)**(_DWORD **)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = 0;
  LOBYTE(v12) = 1;
  std::list<float_std::allocator<float>>::_Insert<std::_List_const_iterator<std::_List_val<float_std::allocator<float>>>>(
    v2,
    v4,
    v6,
    v5);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00426460) --------------------------------------------------------
void __thiscall CameraCtrl::CameraCtrl(CameraCtrl *this, CameraCtrl *__that)
{
  CameraCtrl *v2; // esi@1

  v2 = this;
  this->vfptr = (CameraCtrlVtbl *)&CameraCtrl::_vftable_;
  this->m_fZoom = __that->m_fZoom;
  this->m_fZoomMax = __that->m_fZoomMax;
  this->m_fZoomMin = __that->m_fZoomMin;
  this->m_fZoomDef = __that->m_fZoomDef;
  this->m_fMsDeltaX = __that->m_fMsDeltaX;
  this->m_fMsDeltaY = __that->m_fMsDeltaY;
  std::list<float_std::allocator<float>>::list<float_std::allocator<float>>(
    &this->m_lstTraceCam,
    &__that->m_lstTraceCam);
  v2->m_kLookAtPos.x = __that->m_kLookAtPos.x;
  v2->m_kLookAtPos.y = __that->m_kLookAtPos.y;
  v2->m_kLookAtPos.z = __that->m_kLookAtPos.z;
  v2->m_fAngleUD = __that->m_fAngleUD;
  v2->m_fAngleUDMax = __that->m_fAngleUDMax;
  v2->m_fAngleUDMin = __that->m_fAngleUDMin;
  v2->m_fAngleLR = __that->m_fAngleLR;
  v2->m_kUpDir.x = __that->m_kUpDir.x;
  v2->m_kUpDir.y = __that->m_kUpDir.y;
  v2->m_kUpDir.z = __that->m_kUpDir.z;
  v2->m_kRightDir.x = __that->m_kRightDir.x;
  v2->m_kRightDir.y = __that->m_kRightDir.y;
  v2->m_kRightDir.z = __that->m_kRightDir.z;
  v2->m_kFrontDir.x = __that->m_kFrontDir.x;
  v2->m_kFrontDir.y = __that->m_kFrontDir.y;
  v2->m_kFrontDir.z = __that->m_kFrontDir.z;
  v2->m_fZoomRatePerTick = __that->m_fZoomRatePerTick;
  v2->m_fLastUpdateTime = __that->m_fLastUpdateTime;
  v2->m_fTargetZoom = __that->m_fTargetZoom;
  v2->m_fTargetAngleLR = __that->m_fTargetAngleLR;
  v2->m_uiCheckRayTile = __that->m_uiCheckRayTile;
}
// 977898: using guessed type int (__thiscall *CameraCtrl___vftable_)(void *p, char);

//----- (00426530) --------------------------------------------------------
void __thiscall Singleton<LuaScriptMgr>::_Singleton<LuaScriptMgr>(Singleton<LuaScriptMgr> *this)
{
  this->vfptr = (Singleton<LuaScriptMgr>Vtbl *)&Singleton<LuaScriptMgr>::_vftable_;
  if ( LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    (*(void (__stdcall **)(_DWORD))*LODWORD(Singleton<LuaScriptMgr>::m_pInstance))(1);
    LODWORD(Singleton<LuaScriptMgr>::m_pInstance) = 0;
  }
  Singleton<LuaScriptMgr>::m_bDestroy = 1;
}
// 97CF68: using guessed type int (__thiscall *Singleton_LuaScriptMgr____vftable_)(void *p, char);
// A95958: using guessed type char Singleton_LuaScriptMgr___m_bDestroy;

//----- (00426560) --------------------------------------------------------
void *__thiscall Singleton<LuaScriptMgr>::_vector_deleting_destructor_(Singleton<LuaScriptMgr> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (Singleton<LuaScriptMgr>Vtbl *)&Singleton<LuaScriptMgr>::_vftable_;
  if ( LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    (*(void (__stdcall **)(_DWORD))*LODWORD(Singleton<LuaScriptMgr>::m_pInstance))(1);
    LODWORD(Singleton<LuaScriptMgr>::m_pInstance) = 0;
  }
  Singleton<LuaScriptMgr>::m_bDestroy = 1;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CF68: using guessed type int (__thiscall *Singleton_LuaScriptMgr____vftable_)(void *p, char);
// A95958: using guessed type char Singleton_LuaScriptMgr___m_bDestroy;

//----- (004265B0) --------------------------------------------------------
bool __thiscall LuaScriptMgr::Init(LuaScriptMgr *this)
{
  char *v1; // eax@3
  char *v2; // eax@5
  char *v3; // eax@7
  char *v4; // eax@9
  char *v5; // eax@11
  char *v6; // eax@13

  if ( !Folder::m_bInit )
    Folder::Init();
  Folder::Merge(&Folder::m_acLuaScript, "?.lua");
  getenv("LUA_PATH");
  v1 = fs("LUA_PATH=%s;%s");
  _putenv(v1);
  if ( !Folder::m_bInit )
    Folder::Init();
  Folder::Merge(&Folder::m_acLuaScript, "?.script");
  getenv("LUA_PATH");
  v2 = fs("LUA_PATH=%s;%s");
  _putenv(v2);
  if ( !Folder::m_bInit )
    Folder::Init();
  Folder::Merge(&Folder::m_acLuaScript, "Tutorial/?.lua");
  getenv("LUA_PATH");
  v3 = fs("LUA_PATH=%s;%s");
  _putenv(v3);
  if ( !Folder::m_bInit )
    Folder::Init();
  Folder::Merge(&Folder::m_acLuaScript, "Tutorial/?.script");
  getenv("LUA_PATH");
  v4 = fs("LUA_PATH=%s;%s");
  _putenv(v4);
  if ( !Folder::m_bInit )
    Folder::Init();
  Folder::Merge(&Folder::m_acLuaScript, "NewbieImprove/?.lua");
  getenv("LUA_PATH");
  v5 = fs("LUA_PATH=%s;%s");
  _putenv(v5);
  if ( !Folder::m_bInit )
    Folder::Init();
  Folder::Merge(&Folder::m_acLuaScript, "NewbieImprove/?.script");
  getenv("LUA_PATH");
  v6 = fs("LUA_PATH=%s;%s");
  _putenv(v6);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00426740) --------------------------------------------------------
bool __thiscall LuaScriptMgr::Terminate(LuaScriptMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kMap);
  return 1;
}

//----- (00426750) --------------------------------------------------------
bool __thiscall LuaScriptMgr::DeleteLuaScript(LuaScriptMgr *this, LuaScriptMgr::eLuaScriptType eType)
{
  return NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(
           (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMap,
           eType);
}

//----- (00426760) --------------------------------------------------------
void __thiscall LuaScriptMgr::_LuaScriptMgr(LuaScriptMgr *this)
{
  LuaScriptMgr *v1; // edi@1
  char *v2; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (Singleton<LuaScriptMgr>Vtbl *)&LuaScriptMgr::_vftable_;
  v2 = (char *)&this->m_kMap;
  this->m_kMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> >Vtbl *)&NiTMap<enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kMap);
  *(_DWORD *)v2 = &NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(*((void **)v2 + 2));
  v1->baseclass_0.vfptr = (Singleton<LuaScriptMgr>Vtbl *)&Singleton<LuaScriptMgr>::_vftable_;
  if ( LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    (*(void (__stdcall **)(_DWORD))*LODWORD(Singleton<LuaScriptMgr>::m_pInstance))(1);
    LODWORD(Singleton<LuaScriptMgr>::m_pInstance) = 0;
  }
  Singleton<LuaScriptMgr>::m_bDestroy = 1;
}
// 97CF68: using guessed type int (__thiscall *Singleton_LuaScriptMgr____vftable_)(void *p, char);
// 97CF70: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_LuaScript___enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);
// 97CF90: using guessed type int (__thiscall *NiTMap_enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);
// 97CFB0: using guessed type int (__thiscall *LuaScriptMgr___vftable_)(void *p, char);
// A95958: using guessed type char Singleton_LuaScriptMgr___m_bDestroy;

//----- (00426810) --------------------------------------------------------
void __thiscall LuaScriptMgr::LuaScriptMgr(LuaScriptMgr *this)
{
  LuaScriptMgr *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST08_4@1

  v1 = this;
  this->baseclass_0.vfptr = (Singleton<LuaScriptMgr>Vtbl *)&LuaScriptMgr::_vftable_;
  this->m_kMap.baseclass_0.m_uiHashSize = 37;
  this->m_kMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> >Vtbl *)&NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
  *(_DWORD *)&this->m_kMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kMap.baseclass_0.m_uiHashSize;
  v1->m_kMap.baseclass_0.m_ppkHashTable = (NiTMapItem<enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> >Vtbl *)&NiTMap<enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
}
// 97CF70: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_LuaScript___enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);
// 97CF90: using guessed type int (__thiscall *NiTMap_enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);
// 97CFB0: using guessed type int (__thiscall *LuaScriptMgr___vftable_)(void *p, char);

//----- (004268B0) --------------------------------------------------------
LuaScript *__thiscall LuaScriptMgr::GetLuaScript(LuaScriptMgr *this, LuaScriptMgr::eLuaScriptType eType)
{
  LuaScript *v2; // esi@1
  NiPointer<LuaScript> spLuaScript; // [sp+0h] [bp-10h]@1
  int v5; // [sp+Ch] [bp-4h]@1

  spLuaScript.m_pObject = 0;
  v5 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kMap,
    (const char *)eType,
    (NiPointer<NiShaderLibrary> *)&spLuaScript);
  v2 = spLuaScript.m_pObject;
  v5 = -1;
  if ( spLuaScript.m_pObject && !InterlockedDecrement((volatile LONG *)&spLuaScript.m_pObject->baseclass_0.m_uiRefCount) )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  return v2;
}

//----- (00426930) --------------------------------------------------------
void __thiscall LuaScriptMgr::Update(LuaScriptMgr *this, float fCurTime)
{
  char *v2; // edi@1
  unsigned int v3; // ecx@1
  unsigned int v4; // eax@1
  int v5; // edx@2
  void *v6; // eax@5
  LuaScript *v7; // esi@7
  int eType; // [sp+14h] [bp-18h]@7
  void *kIter; // [sp+18h] [bp-14h]@6
  NiPointer<LuaScript> spLuaScript; // [sp+1Ch] [bp-10h]@7
  int v11; // [sp+28h] [bp-4h]@7

  v2 = (char *)&this->m_kMap;
  v3 = this->m_kMap.baseclass_0.m_uiHashSize;
  v4 = 0;
  if ( v3 )
  {
    v5 = *((_DWORD *)v2 + 2);
    while ( !*(_DWORD *)v5 )
    {
      ++v4;
      v5 += 4;
      if ( v4 >= v3 )
        goto LABEL_5;
    }
    v6 = *(void **)(*((_DWORD *)v2 + 2) + 4 * v4);
  }
  else
  {
LABEL_5:
    v6 = 0;
  }
  kIter = v6;
  while ( kIter )
  {
    spLuaScript.m_pObject = 0;
    v11 = 0;
    NiTMapBase<DFALL<NiPointer<NiD3DXEffectTechniqueSet>>_char_const___NiPointer<NiD3DXEffectTechniqueSet>>::GetNext(
      (NiTMapBase<NiTPointerAllocator<unsigned int>,HWND__ *,NiPointer<NiRenderTargetGroup> > *)v2,
      &kIter,
      (HWND__ **)&eType,
      (NiPointer<NiRenderTargetGroup> *)&spLuaScript);
    v7 = spLuaScript.m_pObject;
    if ( spLuaScript.m_pObject )
      spLuaScript.m_pObject->baseclass_0.vfptr[3].__vecDelDtor((NiRefObject *)spLuaScript.m_pObject, LODWORD(fCurTime));
    v11 = -1;
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) )
        v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
  }
}

//----- (00426A00) --------------------------------------------------------
bool __thiscall LuaScriptMgr::CreateLuaScript(LuaScriptMgr *this, LuaScriptMgr::eLuaScriptType eType)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v2; // ebx@1
  NiShaderLibrary *v3; // esi@1
  void *v5; // eax@8
  int v6; // eax@9
  int v7; // esi@9
  void (__thiscall **v8)(_DWORD, _DWORD); // edi@15
  char *v9; // eax@15
  volatile LONG *v10; // edi@15
  void *v11; // eax@16
  int v12; // eax@17
  int v13; // edi@23
  char *v14; // eax@23
  unsigned int v15; // [sp-18h] [bp-28h]@15
  NiPointer<PgWinBut> v16; // [sp-14h] [bp-24h]@15
  NiPointer<NiShaderLibrary> val; // [sp+0h] [bp-10h]@1
  int v18; // [sp+Ch] [bp-4h]@1

  val.m_pObject = 0;
  v18 = 0;
  v2 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMap;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kMap,
    (const char *)eType,
    &val);
  v3 = val.m_pObject;
  v18 = -1;
  if ( val.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    if ( !NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(v2, eType) )
      return 0;
  }
  if ( eType )
  {
    if ( eType != 1 )
      return 0;
    v5 = operator new(0xCu);
    v18 = 3;
    if ( v5 )
    {
      LuaScriptNewBie::LuaScriptNewBie((LuaScriptNewBie *)v5);
      v7 = v6;
    }
    else
    {
      v7 = 0;
    }
    if ( v7 )
      InterlockedIncrement((volatile LONG *)(v7 + 4));
    v18 = 4;
    if ( !Folder::m_bInit )
      Folder::Init();
    v8 = *(void (__thiscall ***)(_DWORD, _DWORD))v7;
    v9 = Folder::Merge(&Folder::m_acLuaScript, "NewbieImprove/NewbieImprove.script");
    ((void (__thiscall **)(int, char *))v8)[1](v7, v9);
    val.m_pObject = (NiShaderLibrary *)&v16;
    v10 = (volatile LONG *)(v7 + 4);
    v16.m_pObject = (PgWinBut *)v7;
    InterlockedIncrement((volatile LONG *)(v7 + 4));
    v15 = 1;
  }
  else
  {
    v11 = operator new(0xCu);
    v18 = 1;
    if ( v11 )
    {
      LuaScriptTutorial::LuaScriptTutorial((LuaScriptTutorial *)v11);
      v7 = v12;
    }
    else
    {
      v7 = 0;
    }
    if ( v7 )
      InterlockedIncrement((volatile LONG *)(v7 + 4));
    v18 = 2;
    if ( !Folder::m_bInit )
      Folder::Init();
    v13 = *(_DWORD *)v7;
    v14 = Folder::Merge(&Folder::m_acLuaScript, "Tutorial/Tutorial.script");
    (*(void (__thiscall **)(int, char *))(v13 + 4))(v7, v14);
    val.m_pObject = (NiShaderLibrary *)&v16;
    v10 = (volatile LONG *)(v7 + 4);
    v16.m_pObject = (PgWinBut *)v7;
    InterlockedIncrement((volatile LONG *)(v7 + 4));
    v15 = 0;
  }
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2,
    v15,
    v16);
  v18 = -1;
  if ( !InterlockedDecrement(v10) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00426BD0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>(NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *this)
{
  NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> >Vtbl *)&NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 97CF70: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_LuaScript___enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);

//----- (00426BF0) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> >Vtbl *)&NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CF70: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_LuaScript___enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);

//----- (00426C30) --------------------------------------------------------
void *__thiscall NiTMap<enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_scalar_deleting_destructor_(NiTMap<enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *this, unsigned int a2)
{
  NiTMap<enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> >Vtbl *)&NiTMap<enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<LuaScript> >,enum LuaScriptMgr::eLuaScriptType,NiPointer<LuaScript> >Vtbl *)&NiTMapBase<DFALL<NiPointer<LuaScript>>_enum__LuaScriptMgr::eLuaScriptType_NiPointer<LuaScript>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CF70: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_LuaScript___enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);
// 97CF90: using guessed type int (__thiscall *NiTMap_enum  LuaScriptMgr__eLuaScriptType_NiPointer_LuaScript_____vftable_)(void *p, char);

//----- (00426CB0) --------------------------------------------------------
void *__thiscall LuaScriptMgr::_scalar_deleting_destructor_(LuaScriptMgr *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  LuaScriptMgr::_LuaScriptMgr(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00426CE0) --------------------------------------------------------
void __thiscall LuaScriptNewBie::LuaScriptNewBie(LuaScriptNewBie *this)
{
  LuaScriptNewBie *v1; // esi@1

  v1 = this;
  LuaScript::LuaScript(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LuaScriptNewBie::_vftable_;
}
// 97D030: using guessed type int (__thiscall *LuaScriptNewBie___vftable_)(void *p, char);

//----- (00426D00) --------------------------------------------------------
void __thiscall LuaScriptNewBie::_LuaScriptNewBie(LuaScriptNewBie *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LuaScriptNewBie::_vftable_;
  LuaScript::_LuaScript(&this->baseclass_0);
}
// 97D030: using guessed type int (__thiscall *LuaScriptNewBie___vftable_)(void *p, char);

//----- (00426D10) --------------------------------------------------------
int __cdecl LuaScriptNewBie::cOpenPlayGuide(lua_State *L)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v1, BIL_BATTLE_2);
  return 0;
}

//----- (00426D30) --------------------------------------------------------
int __cdecl LuaScriptNewBie::cOpenPlayGuide_BIL_QUEST_1(lua_State *L)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v1, BIL_QUEST_1);
  return 0;
}

//----- (00426D50) --------------------------------------------------------
void __thiscall LuaScriptNewBie::initFunc(LuaScriptNewBie *this)
{
  LuaScriptNewBie *v1; // esi@1

  v1 = this;
  LuaScript::initFunc(&this->baseclass_0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cOpenPlayGuide",
    LuaScriptNewBie::cOpenPlayGuide);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cOpenPlayGuide_BIL_QUEST_1",
    LuaScriptNewBie::cOpenPlayGuide_BIL_QUEST_1);
}

//----- (00426D80) --------------------------------------------------------
int __thiscall LuaArgumentNewBie::setArgument(LuaArgumentNewBie *this, lua_State *L)
{
  char *v2; // eax@1

  v2 = (char *)&this->m_name;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    v2 = *(char **)v2;
  lua_pushstring(L, v2);
  return 1;
}

//----- (00426DB0) --------------------------------------------------------
int __thiscall LuaArgumentBIL_QUEST_1::setArgument(LuaArgumentBIL_QUEST_1 *this, lua_State *L)
{
  LuaArgumentBIL_QUEST_1 *v2; // esi@1
  char *v3; // eax@1
  const char *v4; // eax@3

  v2 = this;
  v3 = (char *)&this->m_name;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    v3 = *(char **)v3;
  lua_pushstring(L, v3);
  v4 = (const char *)&v2->m_MapName;
  if ( v2->m_MapName.baseclass_0._Myres >= 0x10 )
    v4 = *(const char **)v4;
  lua_pushstring(L, v4);
  return 2;
}

//----- (00426DF0) --------------------------------------------------------
void __thiscall LuaArgumentNewBie::_LuaArgumentNewBie(LuaArgumentNewBie *this)
{
  LuaArgumentNewBie *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentNewBie::_vftable_;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_name.baseclass_0._Myres = 15;
  v1->m_name.baseclass_0._Mysize = 0;
  v1->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v1->baseclass_0);
}
// 97D050: using guessed type int (__thiscall *LuaArgumentNewBie___vftable_)(void *p, char);

//----- (00426E30) --------------------------------------------------------
void __thiscall LuaArgumentBIL_QUEST_1::_LuaArgumentBIL_QUEST_1(LuaArgumentBIL_QUEST_1 *this)
{
  LuaArgumentBIL_QUEST_1 *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentBIL_QUEST_1::_vftable_;
  if ( this->m_MapName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_MapName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_MapName.baseclass_0._Myres = 15;
  v1->m_MapName.baseclass_0._Mysize = 0;
  v1->m_MapName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_name.baseclass_0._Mysize = 0;
  v1->m_name.baseclass_0._Myres = 15;
  v1->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v1->baseclass_0);
}
// 97D068: using guessed type int (__thiscall *LuaArgumentBIL_QUEST_1___vftable_)(void *p, char);

//----- (00426E90) --------------------------------------------------------
void __thiscall LuaArgumentNewBie::LuaArgumentNewBie(LuaArgumentNewBie *this)
{
  LuaArgumentNewBie *v1; // esi@1

  v1 = this;
  LuaArgument::LuaArgument(&this->baseclass_0);
  v1->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentNewBie::_vftable_;
  v1->m_name.baseclass_0._Myres = 15;
  v1->m_name.baseclass_0._Mysize = 0;
  v1->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v1->m_name, "NewbieGuide", 0xBu);
}
// 97D050: using guessed type int (__thiscall *LuaArgumentNewBie___vftable_)(void *p, char);

//----- (00426F00) --------------------------------------------------------
void __thiscall LuaArgumentBIL_QUEST_1::LuaArgumentBIL_QUEST_1(LuaArgumentBIL_QUEST_1 *this, char *pkName)
{
  LuaArgumentBIL_QUEST_1 *v2; // esi@1
  char *v3; // edi@1
  char *v4; // eax@1
  char v5; // dl@2
  char *pkNamea; // [sp+18h] [bp+8h]@1

  v2 = this;
  LuaArgument::LuaArgument(&this->baseclass_0);
  v2->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentBIL_QUEST_1::_vftable_;
  v2->m_name.baseclass_0._Myres = 15;
  v2->m_name.baseclass_0._Mysize = 0;
  v2->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2->m_name, "BIL_QUEST_1", 0xBu);
  v2->m_MapName.baseclass_0._Myres = 15;
  v2->m_MapName.baseclass_0._Mysize = 0;
  v2->m_MapName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = pkName;
  v4 = pkName;
  pkNamea = pkName + 1;
  do
    v5 = *v4++;
  while ( v5 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2->m_MapName, v3, v4 - pkNamea);
}
// 97D068: using guessed type int (__thiscall *LuaArgumentBIL_QUEST_1___vftable_)(void *p, char);

//----- (00426FB0) --------------------------------------------------------
void __thiscall LuaScriptNewBie::update(LuaScriptNewBie *this, float time)
{
  LuaScriptNewBie *v2; // esi@1
  Name3 *v3; // eax@1
  PgFrameWork *v4; // eax@1
  int v5; // eax@4
  int v6; // ST04_4@4
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@4
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // edx@6
  Name3 result; // [sp+0h] [bp-98h]@1
  LuaArgumentBIL_QUEST_1 thisa; // [sp+Ch] [bp-8Ch]@4
  int (__thiscall **v11)(void *, char); // [sp+50h] [bp-48h]@6
  void *p; // [sp+5Ch] [bp-3Ch]@6
  int v13; // [sp+6Ch] [bp-2Ch]@6
  unsigned int v14; // [sp+70h] [bp-28h]@6
  char acName[13]; // [sp+78h] [bp-20h]@1
  unsigned int v16; // [sp+88h] [bp-10h]@1
  int v17; // [sp+94h] [bp-4h]@4
  int v18; // [sp+98h] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  v3 = World::GetMapName(&g_kWorld, &result);
  *(_DWORD *)acName = *(_DWORD *)&v3->n3_name[0];
  *(_DWORD *)&acName[4] = *(_DWORD *)&v3->n3_name[4];
  *(_DWORD *)&acName[8] = *(_DWORD *)&v3->n3_name[8];
  acName[12] = 0;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4
    && GameFrameWork::GetOpenPlayGuideCheck((GameFrameWork *)v4, BIL_QUEST_1)
    && World::IsInArea(&g_kWorld, "BIL_QUEST_1") )
  {
    LuaArgumentBIL_QUEST_1::LuaArgumentBIL_QUEST_1(&thisa, acName);
    v6 = v5;
    v7 = v2->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor;
    v17 = 0;
    ((void (__thiscall *)(LuaScriptNewBie *, _DWORD, int))v7)(v2, "OpenPlayGuide_BIL_QUEST_1", v6);
    v17 = -1;
    LuaArgumentBIL_QUEST_1::_LuaArgumentBIL_QUEST_1(&thisa);
  }
  if ( !strcmp(acName, "Rou") )
  {
    LuaArgument::LuaArgument((LuaArgument *)&v11);
    v17 = 1;
    v11 = &LuaArgumentNewBie::_vftable_;
    v14 = 15;
    v13 = 0;
    LOBYTE(p) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
      "NewbieGuide",
      0xBu);
    v8 = v2->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor;
    v17 = 2;
    ((void (__thiscall *)(LuaScriptNewBie *, _DWORD, int (__thiscall ***)(void *, char)))v8)(v2, "Main", &v11);
    v17 = -1;
    v11 = &LuaArgumentNewBie::_vftable_;
    if ( v14 >= 0x10 )
      operator delete(p);
    v14 = 15;
    v13 = 0;
    LOBYTE(p) = 0;
    LuaArgument::_LuaArgument((LuaArgument *)&v11);
  }
}
// 97D050: using guessed type int (__thiscall *LuaArgumentNewBie___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00427150) --------------------------------------------------------
Name3 *__thiscall World::GetMapName(World *this, Name3 *result)
{
  Name3 *v2; // eax@1

  v2 = result;
  *(_DWORD *)&result->n3_name[0] = *(_DWORD *)&this->m_kMapName.n3_name[0];
  *(_QWORD *)&result->n3_name[4] = *(_QWORD *)&this->m_kMapName.n3_name[4];
  return v2;
}

//----- (00427180) --------------------------------------------------------
void *__thiscall LuaScriptNewBie::_scalar_deleting_destructor_(LuaScriptNewBie *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LuaScriptNewBie::_vftable_;
  LuaScript::_LuaScript(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97D030: using guessed type int (__thiscall *LuaScriptNewBie___vftable_)(void *p, char);

//----- (004271B0) --------------------------------------------------------
void *__thiscall LuaArgumentNewBie::_scalar_deleting_destructor_(LuaArgumentNewBie *this, unsigned int a2)
{
  LuaArgumentNewBie *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentNewBie::_vftable_;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_name.baseclass_0._Myres = 15;
  v2->m_name.baseclass_0._Mysize = 0;
  v2->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97D050: using guessed type int (__thiscall *LuaArgumentNewBie___vftable_)(void *p, char);

//----- (00427200) --------------------------------------------------------
void *__thiscall LuaArgumentBIL_QUEST_1::_vector_deleting_destructor_(LuaArgumentBIL_QUEST_1 *this, unsigned int a2)
{
  LuaArgumentBIL_QUEST_1 *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentBIL_QUEST_1::_vftable_;
  if ( this->m_MapName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_MapName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_MapName.baseclass_0._Myres = 15;
  v2->m_MapName.baseclass_0._Mysize = 0;
  v2->m_MapName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v2->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v2->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_name.baseclass_0._Myres = 15;
  v2->m_name.baseclass_0._Mysize = 0;
  v2->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97D068: using guessed type int (__thiscall *LuaArgumentBIL_QUEST_1___vftable_)(void *p, char);

//----- (00427280) --------------------------------------------------------
void __thiscall LuaScriptTutorial::LuaScriptTutorial(LuaScriptTutorial *this)
{
  LuaScriptTutorial *v1; // esi@1

  v1 = this;
  LuaScript::LuaScript(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LuaScriptTutorial::_vftable_;
}
// 97D4E0: using guessed type int (__thiscall *LuaScriptTutorial___vftable_)(void *p, char);

//----- (004272A0) --------------------------------------------------------
void __thiscall LuaScriptTutorial::_LuaScriptTutorial(LuaScriptTutorial *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LuaScriptTutorial::_vftable_;
  LuaScript::_LuaScript(&this->baseclass_0);
}
// 97D4E0: using guessed type int (__thiscall *LuaScriptTutorial___vftable_)(void *p, char);

//----- (004272B0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cAckMainStep(lua_State *L)
{
  int v1; // esi@1
  PgFrameWork *v2; // eax@1

  v1 = lua_tointegerx(L, 1, 0);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    GameFrameWork::NcCharTutorialStepAck((GameFrameWork *)v2, v1);
  return 0;
}

//----- (004272F0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cCloseTextBoxMsgWin(lua_State *L)
{
  unsigned __int16 v1; // ax@1

  v1 = lua_tointegerx(L, 1, 0);
  ScreenBDMgr::EndSpeechBD(&g_kScrnBDMgr, v1);
  return 0;
}

//----- (00427320) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cHideNewbieToolTip(lua_State *L)
{
  return 0;
}

//----- (00427330) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cTutorialEnable(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bEnable = v3;
  return 0;
}

//----- (004273B0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkMainMenu(lua_State *L)
{
  int v1; // esi@1
  Tutorial *v2; // ecx@5
  void *v3; // eax@6
  Tutorial *v4; // eax@7

  v1 = 10;
  switch ( lua_tointegerx(L, 1, 0) )
  {
    case 1:
      v1 = 6;
      break;
    case 2:
      v1 = 5;
      break;
    case 3:
      v1 = 1;
      break;
    default:
      break;
  }
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial((Tutorial *)v3);
    else
      v4 = 0;
    v2 = v4;
    Singleton<Tutorial>::m_pInstance = v4;
  }
  Tutorial::BlinkMainMenu(v2, 1, v1);
  return 0;
}

//----- (00427480) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkFreeStat(lua_State *L)
{
  Tutorial *v1; // ecx@1
  void *v2; // eax@2
  Tutorial *v3; // eax@3
  int EffectCount; // [sp+4h] [bp-14h]@6
  int EffectKey; // [sp+8h] [bp-10h]@6
  int v7; // [sp+14h] [bp-4h]@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    v7 = 0;
    if ( v2 )
      Tutorial::Tutorial((Tutorial *)v2);
    else
      v3 = 0;
    v1 = v3;
    v7 = -1;
    Singleton<Tutorial>::m_pInstance = v3;
  }
  Tutorial::BlinkFreeStat(v1, &EffectKey, &EffectCount);
  lua_pushinteger(L, EffectKey);
  lua_pushinteger(L, EffectCount);
  return 2;
}

//----- (00427530) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkStoneShop(lua_State *L)
{
  int v1; // eax@1
  Tutorial *v2; // ecx@1
  unsigned int v3; // edi@1
  void *v4; // eax@2
  Tutorial *v5; // eax@3
  int EffectKey; // [sp+4h] [bp-10h]@6
  int v8; // [sp+10h] [bp-4h]@2

  v1 = lua_tointegerx(L, 1, 0);
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    v8 = 0;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v2 = v5;
    v8 = -1;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::BlinkStoneShop(v2, v3, &EffectKey);
  lua_pushinteger(L, EffectKey);
  return 1;
}

//----- (004275E0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkShortCut(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2
  int EffectKey; // [sp+4h] [bp-10h]@6
  int v5; // [sp+10h] [bp-4h]@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    v5 = 0;
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    v5 = -1;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  Tutorial::BlinkShortCut(v1, &EffectKey);
  lua_pushinteger(L, EffectKey);
  return 1;
}

//----- (00427670) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cRemoveBlinkEffect(lua_State *L)
{
  int v1; // eax@1
  Tutorial *v2; // ecx@1
  int v3; // esi@1
  void *v4; // eax@2
  Tutorial *v5; // eax@3

  v1 = lua_tointegerx(L, 1, 0);
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v2 = v5;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::RemoveBlinkEffect(v2, v3);
  return 0;
}

//----- (00427700) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cRemoveBlinkMainMenu(lua_State *L)
{
  Tutorial *v1; // ecx@1
  void *v2; // eax@2
  Tutorial *v3; // eax@3

  lua_toboolean(L, 1);
  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial((Tutorial *)v2);
    else
      v3 = 0;
    v1 = v3;
    Singleton<Tutorial>::m_pInstance = v3;
  }
  Tutorial::BlinkMainMenu(v1, 0, 0);
  return 0;
}

//----- (00427790) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cStopTextScreenEffect(lua_State *L)
{
  TextScreenEffect *v1; // ecx@1
  void *v2; // eax@2
  TextScreenEffect *v3; // eax@3
  TextScreenEffect *v4; // ecx@6
  void *v5; // eax@7
  TextScreenEffect *v6; // eax@8

  v1 = Singleton<TextScreenEffect>::m_pInstance;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v2 = operator new(0x28u);
    if ( v2 )
      TextScreenEffect::TextScreenEffect((TextScreenEffect *)v2);
    else
      v3 = 0;
    v1 = v3;
    Singleton<TextScreenEffect>::m_pInstance = v3;
  }
  TextScreenEffect::AddSchedule(v1, 3);
  v4 = Singleton<TextScreenEffect>::m_pInstance;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v5 = operator new(0x28u);
    if ( v5 )
      TextScreenEffect::TextScreenEffect((TextScreenEffect *)v5);
    else
      v6 = 0;
    v4 = v6;
    Singleton<TextScreenEffect>::m_pInstance = v6;
  }
  TextScreenEffect::AddSchedule(v4, 4);
  return 0;
}

//----- (00427850) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cShowTutorialMark(lua_State *L)
{
  int v1; // eax@1
  bool v2; // bl@1
  float v3; // ST24_4@2
  float v4; // ST20_4@2
  Tutorial *v5; // ecx@3
  void *v6; // eax@4
  Tutorial *v7; // eax@5
  float v8; // ST28_4@8
  _BYTE v9[12]; // ST1C_12@8
  NiPoint3 kPos; // [sp+18h] [bp-28h]@2
  int Show; // [sp+24h] [bp-1Ch]@1
  int Size; // [sp+28h] [bp-18h]@1
  void *PosX; // [sp+2Ch] [bp-14h]@1
  int PosY; // [sp+30h] [bp-10h]@1
  int v16; // [sp+3Ch] [bp-4h]@4

  v1 = lua_toboolean(L, 1);
  v2 = v1 != 0;
  LOBYTE(Show) = v1 != 0;
  PosX = (void *)lua_tointegerx(L, 2, 0);
  PosY = lua_tointegerx(L, 3, 0);
  Size = lua_tointegerx(L, 4, 0);
  if ( v2 )
  {
    v3 = (double)PosY;
    v4 = (double)(signed int)PosX;
    World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  }
  v5 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v6 = operator new(0xB4u);
    PosX = v6;
    v16 = 0;
    if ( v6 )
      Tutorial::Tutorial((Tutorial *)v6);
    else
      v7 = 0;
    v5 = v7;
    v16 = -1;
    Singleton<Tutorial>::m_pInstance = v7;
  }
  v8 = (double)Size;
  *(_DWORD *)v9 = (_DWORD)kPos.x;
  *(_QWORD *)&v9[4] = *(_QWORD *)&kPos.y;
  Tutorial::SetTutorialMark(v5, Show, *(NiPoint3 *)v9, v8);
  return 0;
}

//----- (00427950) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cOpenQuestConditionWin(lua_State *L)
{
  unsigned __int16 v1; // di@1
  int v2; // eax@1
  Tutorial *v3; // ecx@1
  unsigned int v4; // esi@1
  void *v5; // eax@2
  Tutorial *v6; // eax@3
  Tutorial *v7; // eax@6
  void *v8; // eax@7

  v1 = lua_tointegerx(L, 1, 0);
  v2 = lua_tointegerx(L, 2, 0);
  v3 = Singleton<Tutorial>::m_pInstance;
  v4 = v2;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v5 = operator new(0xB4u);
    if ( v5 )
      Tutorial::Tutorial((Tutorial *)v5);
    else
      v6 = 0;
    v3 = v6;
    Singleton<Tutorial>::m_pInstance = v6;
  }
  Tutorial::InitMobKillCount(v3, v1, v4);
  v7 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v8 = operator new(0xB4u);
    if ( v8 )
      Tutorial::Tutorial(v7);
    else
      v7 = 0;
    Singleton<Tutorial>::m_pInstance = v7;
  }
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v7->m_pkMobKillCountWin->baseclass_0.baseclass_0.baseclass_0);
  return 0;
}

//----- (00427A40) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cCloseQuestConditionWin(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  lua_tointegerx(L, 1, 0);
  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMobKillCountWin->baseclass_0.baseclass_0.baseclass_0);
  return 0;
}

//----- (00427AD0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cCloseBoxAnnounceWin(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkBoxAnnounceWin->baseclass_0.baseclass_0.baseclass_0);
  return 0;
}

//----- (00427B50) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetItemShopTab(lua_State *L)
{
  int v1; // eax@1
  Tutorial *v2; // ecx@1
  unsigned int v3; // esi@1
  void *v4; // eax@2
  Tutorial *v5; // eax@3

  v1 = lua_tointegerx(L, 1, 0);
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v2 = v5;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::SetItemShopTab(v2, v3);
  return 0;
}

//----- (00427BE0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsOpenCharWin(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  lua_pushboolean(L, v1->m_bOpenCharWin);
  return 1;
}

//----- (00427C60) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsOpenItemShop(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2
  bool v3; // al@6

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  v3 = Tutorial::IsOpenItemShop(v1);
  lua_pushboolean(L, v3);
  return 1;
}

//----- (00427CF0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsOpenInvenWin(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  lua_pushboolean(L, v1->m_bOpenInvenWin);
  return 1;
}

//----- (00427D70) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsBuyStone(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  lua_pushboolean(L, v1->m_bBuyStone);
  return 1;
}

//----- (00427DF0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsUseStone(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  lua_pushboolean(L, v1->m_bUseStone);
  return 1;
}

//----- (00427E70) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsEndWar(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2
  bool v3; // al@6

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  v3 = Tutorial::IsEndMobKillCount(v1);
  lua_pushboolean(L, v3);
  return 1;
}

//----- (00427F00) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsOpenSkillShop(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2
  bool v3; // al@6

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  v3 = Tutorial::IsOpenSkillShop(v1);
  lua_pushboolean(L, v3);
  return 1;
}

//----- (00427F90) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsOpenSkillWin(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  lua_pushboolean(L, v1->m_bOpenSkillWin);
  return 1;
}

//----- (00428010) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsRegistSkill(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  lua_pushboolean(L, v1->m_bRegistSkill);
  return 1;
}

//----- (00428090) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsEndTextScreenEffect(lua_State *L)
{
  TextScreenEffect *v1; // eax@1
  void *v2; // eax@2
  bool v3; // al@6

  v1 = Singleton<TextScreenEffect>::m_pInstance;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v2 = operator new(0x28u);
    if ( v2 )
      TextScreenEffect::TextScreenEffect(v1);
    else
      v1 = 0;
    Singleton<TextScreenEffect>::m_pInstance = v1;
  }
  v3 = TextScreenEffect::IsEnd(v1);
  lua_pushboolean(L, v3);
  return 1;
}

//----- (00428120) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsOpenNPCDialog(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2
  bool v3; // al@6

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  v3 = Tutorial::IsOpenNPCDialog(v1);
  lua_pushboolean(L, v3);
  return 1;
}

//----- (004281B0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cLockStoneShopInv(lua_State *L)
{
  int v1; // eax@1
  Tutorial *v2; // ecx@1
  unsigned int v3; // esi@1
  void *v4; // eax@2
  Tutorial *v5; // eax@3

  v1 = lua_tointegerx(L, 1, 0);
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v2 = v5;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::LockStoneShopInv(v2, v3);
  return 0;
}

//----- (00428240) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetLockItemSell(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  bool b; // [sp+4h] [bp-10h]@1

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  b = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  Tutorial::SetLockItemSell(v2, b);
  return 0;
}

//----- (004282E0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetLockItemShop(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  bool b; // [sp+4h] [bp-10h]@1

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  b = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  Tutorial::SetLockItemShop(v2, b);
  return 0;
}

//----- (00428380) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetLockStoneShop(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  bool b; // [sp+4h] [bp-10h]@1

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  b = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  Tutorial::SetLockStoneShop(v2, b);
  return 0;
}

//----- (00428420) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetLockSkillShop(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  bool b; // [sp+4h] [bp-10h]@1

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  b = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  Tutorial::SetLockSkillShop(v2, b);
  return 0;
}

//----- (004284C0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetLockItemShopTab(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  bool b; // [sp+4h] [bp-10h]@1

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  b = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  Tutorial::SetLockItemShopTab(v2, b);
  return 0;
}

//----- (00428560) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetLockSkillShopTab(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  bool b; // [sp+4h] [bp-10h]@1

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  b = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  Tutorial::SetLockSkillShopTab(v2, b);
  return 0;
}

//----- (00428600) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetHideQuestGiveUp(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  bool b; // [sp+4h] [bp-10h]@1

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  b = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  Tutorial::SetHideQuestGiveUp(v2, b);
  return 0;
}

//----- (004286A0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetOpenCharWin(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bOpenCharWin = v3;
  return 0;
}

//----- (00428720) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetOpenInvenWin(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bOpenInvenWin = v3;
  return 0;
}

//----- (004287A0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetOpenSkillWin(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bOpenSkillWin = v3;
  return 0;
}

//----- (00428820) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetBuyStone(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bBuyStone = v3;
  return 0;
}

//----- (004288A0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetUseStone(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bUseStone = v3;
  return 0;
}

//----- (00428920) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetRegistSkill(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bRegistSkill = v3;
  return 0;
}

//----- (004289A0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsOpenQuestWin(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  lua_pushboolean(L, v1->m_bOpenQuestWin);
  return 1;
}

//----- (00428A20) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cSetOpenQuestWin(lua_State *L)
{
  bool v1; // zf@1
  Tutorial *v2; // eax@1
  bool v3; // bl@1
  void *v4; // eax@2

  v1 = lua_toboolean(L, 1) == 0;
  v2 = Singleton<Tutorial>::m_pInstance;
  v3 = !v1;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bOpenQuestWin = v3;
  return 0;
}

//----- (00428AA0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkQuestAccept(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2
  int EffectKey; // [sp+4h] [bp-10h]@6
  int v5; // [sp+10h] [bp-4h]@2

  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    v5 = 0;
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    v5 = -1;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  Tutorial::BlinkQuestAccept(v1, &EffectKey);
  lua_pushinteger(L, EffectKey);
  return 1;
}

//----- (00428B30) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cRemoveQuestBlinkEffect(lua_State *L)
{
  Tutorial *v1; // eax@1
  void *v2; // eax@2
  int EffectKey; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@2

  EffectKey = lua_tointegerx(L, 1, 0);
  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    v5 = 0;
    if ( v2 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    v5 = -1;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  Tutorial::RemoveBlinkQuestAccept(v1, &EffectKey);
  return 0;
}

//----- (00428BC0) --------------------------------------------------------
int __thiscall LuaArgumentTutorial::setArgument(LuaArgumentTutorial *this, lua_State *L)
{
  char *v2; // eax@1

  v2 = (char *)&this->m_name;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    v2 = *(char **)v2;
  lua_pushstring(L, v2);
  return 1;
}

//----- (00428BF0) --------------------------------------------------------
int __thiscall LuaArgumentTutorialStep::setArgument(LuaArgumentTutorialStep *this, lua_State *L)
{
  LuaArgumentTutorialStep *v2; // edi@1
  char *v3; // eax@1

  v2 = this;
  v3 = (char *)&this->m_name;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    v3 = *(char **)v3;
  lua_pushstring(L, v3);
  lua_pushnumber(L, (double)v2->m_step);
  return 2;
}

//----- (00428C30) --------------------------------------------------------
void __thiscall LuaArgumentTutorial::_LuaArgumentTutorial(LuaArgumentTutorial *this)
{
  LuaArgumentTutorial *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorial::_vftable_;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_name.baseclass_0._Myres = 15;
  v1->m_name.baseclass_0._Mysize = 0;
  v1->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v1->baseclass_0);
}
// 97D500: using guessed type int (__thiscall *LuaArgumentTutorial___vftable_)(void *p, char);

//----- (00428C70) --------------------------------------------------------
void __thiscall LuaArgumentTutorialStep::_LuaArgumentTutorialStep(LuaArgumentTutorialStep *this)
{
  LuaArgumentTutorialStep *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorialStep::_vftable_;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_name.baseclass_0._Myres = 15;
  v1->m_name.baseclass_0._Mysize = 0;
  v1->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v1->baseclass_0);
}
// 97D518: using guessed type int (__thiscall *LuaArgumentTutorialStep___vftable_)(void *p, char);

//----- (00428CB0) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkEffect(lua_State *L)
{
  Tutorial *v1; // ecx@1
  void *v2; // eax@2
  Tutorial *v3; // eax@3
  std::vector<enum Tutorial::eBlinkEffectType,std::allocator<enum Tutorial::eBlinkEffectType> > BlinkEffectTypeList; // [sp+0h] [bp-28h]@1
  int EffectCount; // [sp+10h] [bp-18h]@6
  int EffectKey; // [sp+14h] [bp-14h]@6
  unsigned int _Val; // [sp+18h] [bp-10h]@1
  int v9; // [sp+24h] [bp-4h]@1

  *(_DWORD *)&BlinkEffectTypeList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  BlinkEffectTypeList.baseclass_0._Mylast = 0;
  BlinkEffectTypeList.baseclass_0._Myend = 0;
  _Val = lua_tointegerx(L, 1, 0);
  v9 = 0;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&BlinkEffectTypeList,
    &_Val);
  v1 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v2 = operator new(0xB4u);
    _Val = (unsigned int)v2;
    LOBYTE(v9) = 1;
    if ( v2 )
      Tutorial::Tutorial((Tutorial *)v2);
    else
      v3 = 0;
    v1 = v3;
    LOBYTE(v9) = 0;
    Singleton<Tutorial>::m_pInstance = v3;
  }
  Tutorial::BlinkEffect(v1, &BlinkEffectTypeList, &EffectKey, &EffectCount);
  lua_pushinteger(L, EffectKey);
  lua_pushinteger(L, EffectCount);
  if ( *(_DWORD *)&BlinkEffectTypeList )
    operator delete(*(void **)&BlinkEffectTypeList);
  return 2;
}

//----- (00428D90) --------------------------------------------------------
void __thiscall LuaArgumentTutorial::LuaArgumentTutorial(LuaArgumentTutorial *this)
{
  LuaArgumentTutorial *v1; // esi@1

  v1 = this;
  LuaArgument::LuaArgument(&this->baseclass_0);
  v1->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorial::_vftable_;
  v1->m_name.baseclass_0._Myres = 15;
  v1->m_name.baseclass_0._Mysize = 0;
  v1->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v1->m_name, "Tutorial", 8u);
}
// 97D500: using guessed type int (__thiscall *LuaArgumentTutorial___vftable_)(void *p, char);

//----- (00428E00) --------------------------------------------------------
void __thiscall LuaArgumentTutorialStep::LuaArgumentTutorialStep(LuaArgumentTutorialStep *this, int step)
{
  LuaArgumentTutorialStep *v2; // esi@1

  v2 = this;
  LuaArgument::LuaArgument(&this->baseclass_0);
  v2->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorialStep::_vftable_;
  v2->m_name.baseclass_0._Myres = 15;
  v2->m_name.baseclass_0._Mysize = 0;
  v2->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2->m_name, "Tutorial", 8u);
  v2->m_step = step;
}
// 97D518: using guessed type int (__thiscall *LuaArgumentTutorialStep___vftable_)(void *p, char);

//----- (00428E70) --------------------------------------------------------
void __thiscall LuaScriptTutorial::update(LuaScriptTutorial *this, float time)
{
  unsigned int v2; // ST08_4@1
  LuaScriptTutorial *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@1
  LuaArgument thisa; // [sp+0h] [bp-38h]@1
  void *p; // [sp+Ch] [bp-2Ch]@1
  int v7; // [sp+1Ch] [bp-1Ch]@1
  unsigned int v8; // [sp+20h] [bp-18h]@1
  unsigned int v9; // [sp+28h] [bp-10h]@1
  int v10; // [sp+34h] [bp-4h]@1
  int v11; // [sp+38h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  v2 = (unsigned int)&v11 ^ __security_cookie;
  v3 = this;
  LuaArgument::LuaArgument(&thisa);
  v10 = 0;
  thisa.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorial::_vftable_;
  v8 = 15;
  v7 = 0;
  LOBYTE(p) = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
    "Tutorial",
    8u);
  v4 = v3->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor;
  v10 = 1;
  ((void (__thiscall *)(LuaScriptTutorial *, _DWORD, LuaArgument *, unsigned int))v4)(v3, "Main", &thisa, v2);
  v10 = -1;
  thisa.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorial::_vftable_;
  if ( v8 >= 0x10 )
    operator delete(p);
  v8 = 15;
  v7 = 0;
  LOBYTE(p) = 0;
  LuaArgument::_LuaArgument(&thisa);
}
// 97D500: using guessed type int (__thiscall *LuaArgumentTutorial___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00428F40) --------------------------------------------------------
void __thiscall LuaScriptTutorial::UpdateStep(LuaScriptTutorial *this, int Step)
{
  unsigned int v2; // ST08_4@1
  LuaScriptTutorial *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@1
  LuaArgument thisa; // [sp+0h] [bp-3Ch]@1
  void *p; // [sp+Ch] [bp-30h]@1
  int v7; // [sp+1Ch] [bp-20h]@1
  unsigned int v8; // [sp+20h] [bp-1Ch]@1
  int v9; // [sp+28h] [bp-14h]@1
  unsigned int v10; // [sp+2Ch] [bp-10h]@1
  int v11; // [sp+38h] [bp-4h]@1
  int v12; // [sp+3Ch] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v2 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  LuaArgument::LuaArgument(&thisa);
  v11 = 0;
  thisa.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorialStep::_vftable_;
  v8 = 15;
  v7 = 0;
  LOBYTE(p) = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
    "Tutorial",
    8u);
  v9 = Step;
  v4 = v3->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor;
  v11 = 1;
  ((void (__thiscall *)(LuaScriptTutorial *, _DWORD, LuaArgument *, unsigned int))v4)(v3, "UpdateStep", &thisa, v2);
  v11 = -1;
  thisa.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorialStep::_vftable_;
  if ( v8 >= 0x10 )
    operator delete(p);
  v8 = 15;
  v7 = 0;
  LOBYTE(p) = 0;
  LuaArgument::_LuaArgument(&thisa);
}
// 97D518: using guessed type int (__thiscall *LuaArgumentTutorialStep___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00429010) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkItemShop(lua_State *L)
{
  const char *v1; // eax@1
  int v2; // edi@1
  Tutorial *v3; // ecx@4
  void *v4; // eax@5
  Tutorial *v5; // eax@6
  int Page; // [sp+4h] [bp-38h]@1
  int EffectKey; // [sp+8h] [bp-34h]@9
  char *pcItemIdx; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ItemIdx; // [sp+10h] [bp-2Ch]@1
  unsigned int v11; // [sp+2Ch] [bp-10h]@1
  int v12; // [sp+38h] [bp-4h]@1
  int v13; // [sp+3Ch] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  ItemIdx.baseclass_0._Myres = 15;
  ItemIdx.baseclass_0._Mysize = 0;
  ItemIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ItemIdx, v1, strlen(v1));
  v12 = 0;
  v2 = lua_tointegerx(L, 2, 0);
  Page = lua_tointegerx(L, 3, 0);
  if ( ItemIdx.baseclass_0._Myres < 0x10 )
    pcItemIdx = (char *)&ItemIdx;
  else
    pcItemIdx = *(char **)&ItemIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v12) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v12) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::BlinkItemShop(v3, pcItemIdx, v2, Page, &EffectKey);
  lua_pushinteger(L, EffectKey);
  if ( ItemIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ItemIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429130) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkInven(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // esi@1
  Tutorial *v3; // ecx@3
  void *v4; // eax@4
  Tutorial *v5; // eax@5
  Tutorial *v6; // ecx@8
  void *v7; // eax@9
  Tutorial *v8; // eax@10
  int EffectKey; // [sp+4h] [bp-30h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ItemIdx; // [sp+8h] [bp-2Ch]@1
  unsigned int v12; // [sp+24h] [bp-10h]@1
  int v13; // [sp+30h] [bp-4h]@1
  int v14; // [sp+34h] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  ItemIdx.baseclass_0._Myres = 15;
  ItemIdx.baseclass_0._Mysize = 0;
  ItemIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ItemIdx, v1, strlen(v1));
  v2 = *(const char **)&ItemIdx;
  v13 = 0;
  if ( ItemIdx.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&ItemIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v13) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v13) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::BlinkInven(v3, v2, &EffectKey);
  v6 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v7 = operator new(0xB4u);
    LOBYTE(v13) = 2;
    if ( v7 )
      Tutorial::Tutorial((Tutorial *)v7);
    else
      v8 = 0;
    v6 = v8;
    LOBYTE(v13) = 0;
    Singleton<Tutorial>::m_pInstance = v8;
  }
  Tutorial::SetItemMoveEffectKey(v6, EffectKey);
  lua_pushinteger(L, EffectKey);
  if ( ItemIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ItemIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429270) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkSkillShop(lua_State *L)
{
  const char *v1; // eax@1
  int v2; // edi@1
  Tutorial *v3; // ecx@4
  void *v4; // eax@5
  Tutorial *v5; // eax@6
  int Page; // [sp+4h] [bp-38h]@1
  int EffectKey; // [sp+8h] [bp-34h]@9
  char *pcItemIdx; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ItemIdx; // [sp+10h] [bp-2Ch]@1
  unsigned int v11; // [sp+2Ch] [bp-10h]@1
  int v12; // [sp+38h] [bp-4h]@1
  int v13; // [sp+3Ch] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  ItemIdx.baseclass_0._Myres = 15;
  ItemIdx.baseclass_0._Mysize = 0;
  ItemIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ItemIdx, v1, strlen(v1));
  v12 = 0;
  v2 = lua_tointegerx(L, 2, 0);
  Page = lua_tointegerx(L, 3, 0);
  if ( ItemIdx.baseclass_0._Myres < 0x10 )
    pcItemIdx = (char *)&ItemIdx;
  else
    pcItemIdx = *(char **)&ItemIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v12) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v12) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::BlinkSkillShop(v3, pcItemIdx, v2, Page, &EffectKey);
  lua_pushinteger(L, EffectKey);
  if ( ItemIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ItemIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429390) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cBlinkSkill(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // esi@1
  Tutorial *v3; // ecx@3
  void *v4; // eax@4
  Tutorial *v5; // eax@5
  int EffectKey; // [sp+4h] [bp-30h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > SkillIdx; // [sp+8h] [bp-2Ch]@1
  unsigned int v9; // [sp+24h] [bp-10h]@1
  int v10; // [sp+30h] [bp-4h]@1
  int v11; // [sp+34h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  SkillIdx.baseclass_0._Myres = 15;
  SkillIdx.baseclass_0._Mysize = 0;
  SkillIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&SkillIdx, v1, strlen(v1));
  v2 = *(const char **)&SkillIdx;
  v10 = 0;
  if ( SkillIdx.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&SkillIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v10) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v10) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  Tutorial::BlinkSkill(v3, v2, &EffectKey);
  lua_pushinteger(L, EffectKey);
  if ( SkillIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&SkillIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429490) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cStartTextScreenEffect(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // eax@1
  ScriptMsg *v3; // esi@3
  TextScreenEffect *v4; // ecx@4
  void *v5; // eax@5
  TextScreenEffect *v6; // eax@6
  TextScreenEffect *v7; // ecx@9
  void *v8; // eax@10
  TextScreenEffect *v9; // eax@11
  TextScreenEffect *v10; // ecx@14
  void *v11; // eax@15
  TextScreenEffect *v12; // eax@16
  float v14; // [sp+18h] [bp-34h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ScriptIndex; // [sp+20h] [bp-2Ch]@1
  unsigned int v16; // [sp+3Ch] [bp-10h]@1
  int v17; // [sp+48h] [bp-4h]@1
  int v18; // [sp+4Ch] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  ScriptIndex.baseclass_0._Myres = 15;
  ScriptIndex.baseclass_0._Mysize = 0;
  ScriptIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ScriptIndex, v1, strlen(v1));
  v2 = *(const char **)&ScriptIndex;
  v17 = 0;
  if ( ScriptIndex.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&ScriptIndex;
  v3 = ScriptMsgTab::GetScriptMsgInfo(v2);
  if ( v3 )
  {
    v4 = Singleton<TextScreenEffect>::m_pInstance;
    v14 = Timer::ms_fCurTime;
    if ( !Singleton<TextScreenEffect>::m_pInstance )
    {
      v5 = operator new(0x28u);
      LOBYTE(v17) = 1;
      if ( v5 )
        TextScreenEffect::TextScreenEffect((TextScreenEffect *)v5);
      else
        v6 = 0;
      v4 = v6;
      LOBYTE(v17) = 0;
      Singleton<TextScreenEffect>::m_pInstance = v6;
    }
    TextScreenEffect::Start(v4, v3->SM_Msg, v14, 0.5, 0);
    v7 = Singleton<TextScreenEffect>::m_pInstance;
    if ( !Singleton<TextScreenEffect>::m_pInstance )
    {
      v8 = operator new(0x28u);
      LOBYTE(v17) = 2;
      if ( v8 )
        TextScreenEffect::TextScreenEffect((TextScreenEffect *)v8);
      else
        v9 = 0;
      v7 = v9;
      LOBYTE(v17) = 0;
      Singleton<TextScreenEffect>::m_pInstance = v9;
    }
    TextScreenEffect::AddSchedule(v7, 1);
    v10 = Singleton<TextScreenEffect>::m_pInstance;
    if ( !Singleton<TextScreenEffect>::m_pInstance )
    {
      v11 = operator new(0x28u);
      LOBYTE(v17) = 3;
      if ( v11 )
        TextScreenEffect::TextScreenEffect((TextScreenEffect *)v11);
      else
        v12 = 0;
      v10 = v12;
      LOBYTE(v17) = 0;
      Singleton<TextScreenEffect>::m_pInstance = v12;
    }
    TextScreenEffect::AddSchedule(v10, 2);
  }
  if ( ScriptIndex.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ScriptIndex);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00429620) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cOpenBoxAnnounceWin(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // eax@1
  ScriptMsg *v3; // esi@3
  Tutorial *v4; // ecx@4
  void *v5; // eax@5
  Tutorial *v6; // eax@6
  Tutorial *v7; // eax@9
  void *v8; // eax@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ScriptIndex; // [sp+4h] [bp-2Ch]@1
  unsigned int v11; // [sp+20h] [bp-10h]@1
  int v12; // [sp+2Ch] [bp-4h]@1
  int v13; // [sp+30h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  ScriptIndex.baseclass_0._Myres = 15;
  ScriptIndex.baseclass_0._Mysize = 0;
  ScriptIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ScriptIndex, v1, strlen(v1));
  v2 = *(const char **)&ScriptIndex;
  v12 = 0;
  if ( ScriptIndex.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&ScriptIndex;
  v3 = ScriptMsgTab::GetScriptMsgInfo(v2);
  if ( v3 )
  {
    v4 = Singleton<Tutorial>::m_pInstance;
    if ( !Singleton<Tutorial>::m_pInstance )
    {
      v5 = operator new(0xB4u);
      LOBYTE(v12) = 1;
      if ( v5 )
        Tutorial::Tutorial((Tutorial *)v5);
      else
        v6 = 0;
      v4 = v6;
      LOBYTE(v12) = 0;
      Singleton<Tutorial>::m_pInstance = v6;
    }
    Tutorial::SetBoxAnnounceMsg(v4, v3->SM_Msg);
    v7 = Singleton<Tutorial>::m_pInstance;
    if ( !Singleton<Tutorial>::m_pInstance )
    {
      v8 = operator new(0xB4u);
      LOBYTE(v12) = 2;
      if ( v8 )
        Tutorial::Tutorial(v7);
      else
        v7 = 0;
      LOBYTE(v12) = 0;
      Singleton<Tutorial>::m_pInstance = v7;
    }
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v7->m_pkBoxAnnounceWin->baseclass_0.baseclass_0.baseclass_0);
  }
  if ( ScriptIndex.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ScriptIndex);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429760) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cOpenTextBoxMsgWin(lua_State *L)
{
  unsigned __int16 v1; // di@1
  const char *v2; // eax@1
  const char *v3; // eax@1
  ScriptMsg *v4; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ScriptIndex; // [sp+10h] [bp-2Ch]@1
  unsigned int v7; // [sp+2Ch] [bp-10h]@1
  int v8; // [sp+38h] [bp-4h]@1
  int v9; // [sp+3Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v1 = lua_tointegerx(L, 1, 0);
  ScriptIndex.baseclass_0._Myres = 15;
  ScriptIndex.baseclass_0._Mysize = 0;
  ScriptIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2 = lua_tolstring(L, 2, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ScriptIndex, v2, strlen(v2));
  v3 = *(const char **)&ScriptIndex;
  v8 = 0;
  if ( ScriptIndex.baseclass_0._Myres < 0x10 )
    v3 = (const char *)&ScriptIndex;
  v4 = ScriptMsgTab::GetScriptMsgInfo(v3);
  if ( v4 )
    ScreenBDMgr::AddSpeechBD(&g_kScrnBDMgr, v1, v4->SM_Msg, 1000000.0);
  if ( ScriptIndex.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ScriptIndex);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429840) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsHaveItem(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // esi@1
  Tutorial *v3; // ecx@3
  void *v4; // eax@4
  Tutorial *v5; // eax@5
  bool v6; // al@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ItemIdx; // [sp+4h] [bp-2Ch]@1
  unsigned int v9; // [sp+20h] [bp-10h]@1
  int v10; // [sp+2Ch] [bp-4h]@1
  int v11; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  ItemIdx.baseclass_0._Myres = 15;
  ItemIdx.baseclass_0._Mysize = 0;
  ItemIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ItemIdx, v1, strlen(v1));
  v2 = *(const char **)&ItemIdx;
  v10 = 0;
  if ( ItemIdx.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&ItemIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v10) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v10) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  v6 = Tutorial::IsHaveItem(v3, v2);
  lua_pushboolean(L, v6);
  if ( ItemIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ItemIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429930) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsEquipItem(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // esi@1
  Tutorial *v3; // ecx@3
  void *v4; // eax@4
  Tutorial *v5; // eax@5
  bool v6; // al@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ItemIdx; // [sp+4h] [bp-2Ch]@1
  unsigned int v9; // [sp+20h] [bp-10h]@1
  int v10; // [sp+2Ch] [bp-4h]@1
  int v11; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  ItemIdx.baseclass_0._Myres = 15;
  ItemIdx.baseclass_0._Mysize = 0;
  ItemIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ItemIdx, v1, strlen(v1));
  v2 = *(const char **)&ItemIdx;
  v10 = 0;
  if ( ItemIdx.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&ItemIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v10) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v10) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  v6 = Tutorial::IsEquipItem(v3, v2);
  lua_pushboolean(L, v6);
  if ( ItemIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ItemIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429A20) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsLearnSkill(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // esi@1
  Tutorial *v3; // ecx@3
  void *v4; // eax@4
  Tutorial *v5; // eax@5
  bool v6; // al@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > SkillIdx; // [sp+4h] [bp-2Ch]@1
  unsigned int v9; // [sp+20h] [bp-10h]@1
  int v10; // [sp+2Ch] [bp-4h]@1
  int v11; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  SkillIdx.baseclass_0._Myres = 15;
  SkillIdx.baseclass_0._Mysize = 0;
  SkillIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&SkillIdx, v1, strlen(v1));
  v2 = *(const char **)&SkillIdx;
  v10 = 0;
  if ( SkillIdx.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&SkillIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v10) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v10) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  v6 = Tutorial::IsLearnSkill(v3, v2);
  lua_pushboolean(L, v6);
  if ( SkillIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&SkillIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429B10) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cIsSelectSkill(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // esi@1
  Tutorial *v3; // ecx@3
  void *v4; // eax@4
  Tutorial *v5; // eax@5
  bool v6; // al@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > SkillIdx; // [sp+4h] [bp-2Ch]@1
  unsigned int v9; // [sp+20h] [bp-10h]@1
  int v10; // [sp+2Ch] [bp-4h]@1
  int v11; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  SkillIdx.baseclass_0._Myres = 15;
  SkillIdx.baseclass_0._Mysize = 0;
  SkillIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&SkillIdx, v1, strlen(v1));
  v2 = *(const char **)&SkillIdx;
  v10 = 0;
  if ( SkillIdx.baseclass_0._Myres < 0x10 )
    v2 = (const char *)&SkillIdx;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    LOBYTE(v10) = 1;
    if ( v4 )
      Tutorial::Tutorial((Tutorial *)v4);
    else
      v5 = 0;
    v3 = v5;
    LOBYTE(v10) = 0;
    Singleton<Tutorial>::m_pInstance = v5;
  }
  v6 = Tutorial::IsSelectSkill(v3, v2);
  lua_pushboolean(L, v6);
  if ( SkillIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&SkillIdx);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429C00) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cLockItemShopInv(lua_State *L)
{
  const char *v1; // eax@1
  int v2; // edi@1
  int v3; // esi@1
  Tutorial *v4; // ecx@4
  void *v5; // eax@5
  Tutorial *v6; // eax@6
  const char *pcIgnoreItemIdx; // [sp+4h] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Ignore_ItemIdx; // [sp+8h] [bp-2Ch]@1
  unsigned int v10; // [sp+24h] [bp-10h]@1
  int v11; // [sp+30h] [bp-4h]@1
  int v12; // [sp+34h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  Ignore_ItemIdx.baseclass_0._Myres = 15;
  Ignore_ItemIdx.baseclass_0._Mysize = 0;
  Ignore_ItemIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Ignore_ItemIdx, v1, strlen(v1));
  v11 = 0;
  v2 = lua_tointegerx(L, 2, 0);
  v3 = lua_tointegerx(L, 3, 0);
  if ( Ignore_ItemIdx.baseclass_0._Myres < 0x10 )
    pcIgnoreItemIdx = (const char *)&Ignore_ItemIdx;
  else
    pcIgnoreItemIdx = *(const char **)&Ignore_ItemIdx;
  v4 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v5 = operator new(0xB4u);
    LOBYTE(v11) = 1;
    if ( v5 )
      Tutorial::Tutorial((Tutorial *)v5);
    else
      v6 = 0;
    v4 = v6;
    LOBYTE(v11) = 0;
    Singleton<Tutorial>::m_pInstance = v6;
  }
  Tutorial::LockItemShopInv(v4, pcIgnoreItemIdx, v2, v3);
  if ( Ignore_ItemIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&Ignore_ItemIdx);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429D10) --------------------------------------------------------
int __cdecl LuaScriptTutorial::cLockSkillShopInv(lua_State *L)
{
  const char *v1; // eax@1
  int v2; // edi@1
  int v3; // esi@1
  Tutorial *v4; // ecx@4
  void *v5; // eax@5
  Tutorial *v6; // eax@6
  const char *pcIgnoreItemIdx; // [sp+4h] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Ignore_ItemIdx; // [sp+8h] [bp-2Ch]@1
  unsigned int v10; // [sp+24h] [bp-10h]@1
  int v11; // [sp+30h] [bp-4h]@1
  int v12; // [sp+34h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  Ignore_ItemIdx.baseclass_0._Myres = 15;
  Ignore_ItemIdx.baseclass_0._Mysize = 0;
  Ignore_ItemIdx.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1 = lua_tolstring(L, 1, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Ignore_ItemIdx, v1, strlen(v1));
  v11 = 0;
  v2 = lua_tointegerx(L, 2, 0);
  v3 = lua_tointegerx(L, 3, 0);
  if ( Ignore_ItemIdx.baseclass_0._Myres < 0x10 )
    pcIgnoreItemIdx = (const char *)&Ignore_ItemIdx;
  else
    pcIgnoreItemIdx = *(const char **)&Ignore_ItemIdx;
  v4 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v5 = operator new(0xB4u);
    LOBYTE(v11) = 1;
    if ( v5 )
      Tutorial::Tutorial((Tutorial *)v5);
    else
      v6 = 0;
    v4 = v6;
    LOBYTE(v11) = 0;
    Singleton<Tutorial>::m_pInstance = v6;
  }
  Tutorial::LockSkillShopInv(v4, pcIgnoreItemIdx, v2, v3);
  if ( Ignore_ItemIdx.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&Ignore_ItemIdx);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00429E20) --------------------------------------------------------
void __thiscall LuaScriptTutorial::initFunc(LuaScriptTutorial *this)
{
  LuaScriptTutorial *v1; // esi@1

  v1 = this;
  LuaScript::initFunc(&this->baseclass_0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cAckMainStep",
    LuaScriptTutorial::cAckMainStep);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cTutorialEnable",
    LuaScriptTutorial::cTutorialEnable);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkMainMenu",
    LuaScriptTutorial::cBlinkMainMenu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkFreeStat",
    LuaScriptTutorial::cBlinkFreeStat);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkItemShop",
    LuaScriptTutorial::cBlinkItemShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkInven",
    LuaScriptTutorial::cBlinkInven);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkSkillShop",
    LuaScriptTutorial::cBlinkSkillShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkStoneShop",
    LuaScriptTutorial::cBlinkStoneShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkSkill",
    LuaScriptTutorial::cBlinkSkill);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkShortCut",
    LuaScriptTutorial::cBlinkShortCut);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkEffect",
    LuaScriptTutorial::cBlinkEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cRemoveBlinkEffect",
    LuaScriptTutorial::cRemoveBlinkEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cRemoveBlinkMainMenu",
    LuaScriptTutorial::cRemoveBlinkMainMenu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cStartTextScreenEffect",
    LuaScriptTutorial::cStartTextScreenEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cStopTextScreenEffect",
    LuaScriptTutorial::cStopTextScreenEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cBlinkQuestAccept",
    LuaScriptTutorial::cBlinkQuestAccept);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cRemoveQuestBlinkEffect",
    LuaScriptTutorial::cRemoveQuestBlinkEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cShowTutorialMark",
    LuaScriptTutorial::cShowTutorialMark);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cOpenQuestConditionWin",
    LuaScriptTutorial::cOpenQuestConditionWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCloseQuestConditionWin",
    LuaScriptTutorial::cCloseQuestConditionWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cOpenBoxAnnounceWin",
    LuaScriptTutorial::cOpenBoxAnnounceWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCloseBoxAnnounceWin",
    LuaScriptTutorial::cCloseBoxAnnounceWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cOpenTextBoxMsgWin",
    LuaScriptTutorial::cOpenTextBoxMsgWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cCloseTextBoxMsgWin",
    LuaScriptTutorial::cCloseTextBoxMsgWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cHideNewbieToolTip",
    LuaScriptTutorial::cHideNewbieToolTip);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetItemShopTab",
    LuaScriptTutorial::cSetItemShopTab);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsOpenCharWin",
    LuaScriptTutorial::cIsOpenCharWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsOpenItemShop",
    LuaScriptTutorial::cIsOpenItemShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsHaveItem",
    LuaScriptTutorial::cIsHaveItem);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsOpenInvenWin",
    LuaScriptTutorial::cIsOpenInvenWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsEquipItem",
    LuaScriptTutorial::cIsEquipItem);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsBuyStone",
    LuaScriptTutorial::cIsBuyStone);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsUseStone",
    LuaScriptTutorial::cIsUseStone);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsEndWar",
    LuaScriptTutorial::cIsEndWar);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsOpenSkillShop",
    LuaScriptTutorial::cIsOpenSkillShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsLearnSkill",
    LuaScriptTutorial::cIsLearnSkill);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsOpenSkillWin",
    LuaScriptTutorial::cIsOpenSkillWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsSelectSkill",
    LuaScriptTutorial::cIsSelectSkill);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsRegistSkill",
    LuaScriptTutorial::cIsRegistSkill);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsEndTextScreenEffect",
    LuaScriptTutorial::cIsEndTextScreenEffect);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsOpenNPCDialog",
    LuaScriptTutorial::cIsOpenNPCDialog);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cIsOpenQuestWin",
    LuaScriptTutorial::cIsOpenQuestWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cLockItemShopInv",
    LuaScriptTutorial::cLockItemShopInv);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cLockStoneShopInv",
    LuaScriptTutorial::cLockStoneShopInv);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cLockSkillShopInv",
    LuaScriptTutorial::cLockSkillShopInv);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetLockItemSell",
    LuaScriptTutorial::cSetLockItemSell);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetLockItemShop",
    LuaScriptTutorial::cSetLockItemShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetLockStoneShop",
    LuaScriptTutorial::cSetLockStoneShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetLockSkillShop",
    LuaScriptTutorial::cSetLockSkillShop);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetLockItemShopTab",
    LuaScriptTutorial::cSetLockItemShopTab);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetLockSkillShopTab",
    LuaScriptTutorial::cSetLockSkillShopTab);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetHideQuestGiveUp",
    LuaScriptTutorial::cSetHideQuestGiveUp);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetOpenCharWin",
    LuaScriptTutorial::cSetOpenCharWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetOpenInvenWin",
    LuaScriptTutorial::cSetOpenInvenWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetOpenSkillWin",
    LuaScriptTutorial::cSetOpenSkillWin);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetBuyStone",
    LuaScriptTutorial::cSetBuyStone);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetUseStone",
    LuaScriptTutorial::cSetUseStone);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetRegistSkill",
    LuaScriptTutorial::cSetRegistSkill);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
    v1,
    "cSetOpenQuestWin",
    LuaScriptTutorial::cSetOpenQuestWin);
}

//----- (0042A290) --------------------------------------------------------
void *__thiscall LuaScriptTutorial::_scalar_deleting_destructor_(LuaScriptTutorial *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LuaScriptTutorial::_vftable_;
  LuaScript::_LuaScript(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97D4E0: using guessed type int (__thiscall *LuaScriptTutorial___vftable_)(void *p, char);

//----- (0042A2C0) --------------------------------------------------------
void *__thiscall LuaArgumentTutorial::_vector_deleting_destructor_(LuaArgumentTutorial *this, unsigned int a2)
{
  LuaArgumentTutorial *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorial::_vftable_;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_name.baseclass_0._Myres = 15;
  v2->m_name.baseclass_0._Mysize = 0;
  v2->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97D500: using guessed type int (__thiscall *LuaArgumentTutorial___vftable_)(void *p, char);

//----- (0042A310) --------------------------------------------------------
void *__thiscall LuaArgumentTutorialStep::_vector_deleting_destructor_(LuaArgumentTutorialStep *this, unsigned int a2)
{
  LuaArgumentTutorialStep *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (LuaArgumentVtbl *)&LuaArgumentTutorialStep::_vftable_;
  if ( this->m_name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_name.baseclass_0._Myres = 15;
  v2->m_name.baseclass_0._Mysize = 0;
  v2->m_name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LuaArgument::_LuaArgument(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97D518: using guessed type int (__thiscall *LuaArgumentTutorialStep___vftable_)(void *p, char);

//----- (0042A360) --------------------------------------------------------
bool __cdecl MenuTexMgr::Init()
{
  return 1;
}

//----- (0042A370) --------------------------------------------------------
void __cdecl MenuTexMgr::Terminate()
{
  unsigned int v0; // edi@1
  int v1; // esi@2

  v0 = 0;
  do
  {
    v1 = MenuTexMgr::ms_aspTexture[v0];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      {
        if ( v1 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      }
      MenuTexMgr::ms_aspTexture[v0] = 0;
    }
    ++v0;
  }
  while ( v0 < 32 );
}
// A95960: using guessed type int MenuTexMgr__ms_aspTexture[];

//----- (0042A3C0) --------------------------------------------------------
void __cdecl MenuTexMgr::Remove(unsigned int uiEnum)
{
  int v1; // esi@2

  if ( uiEnum < 0x20 )
  {
    v1 = MenuTexMgr::ms_aspTexture[uiEnum];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      {
        if ( v1 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      }
      MenuTexMgr::ms_aspTexture[uiEnum] = 0;
    }
  }
}
// A95960: using guessed type int MenuTexMgr__ms_aspTexture[];

//----- (0042A410) --------------------------------------------------------
NiSourceTexture *__cdecl MenuTexMgr::Create(unsigned int uiEnum)
{
  NiImageConverter *v1; // eax@3
  NiSourceTexture *result; // eax@3
  NiTexture::FormatPrefs kPrefs; // [sp+4h] [bp-114h]@4
  char acFileName[260]; // [sp+10h] [bp-108h]@3
  unsigned int v5; // [sp+114h] [bp-4h]@1
  int v6; // [sp+118h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s.tga");
  v1 = NiImageConverter::GetImageConverter();
  result = (NiSourceTexture *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v1->baseclass_0.vfptr[2].__vecDelDtor)(
                                v1,
                                acFileName,
                                0);
  if ( result )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    result = NiSourceTexture::Create((NiPixelData *)result, &kPrefs);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0042A4C0) --------------------------------------------------------
NiSourceTexture *__cdecl MenuTexMgr::GetTexture(unsigned int uiEnum)
{
  NiSourceTexture *result; // eax@2
  NiSourceTexture *v2; // eax@4
  int v3; // esi@4
  int v4; // edi@4

  if ( uiEnum < 0x20 )
  {
    if ( !MenuTexMgr::ms_aspTexture[uiEnum] )
    {
      v2 = MenuTexMgr::Create(uiEnum);
      v3 = MenuTexMgr::ms_aspTexture[uiEnum];
      v4 = (int)v2;
      if ( (NiSourceTexture *)v3 != v2 )
      {
        if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
        MenuTexMgr::ms_aspTexture[uiEnum] = v4;
        if ( v4 )
          InterlockedIncrement((volatile LONG *)(v4 + 4));
      }
    }
    result = (NiSourceTexture *)MenuTexMgr::ms_aspTexture[uiEnum];
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95960: using guessed type int MenuTexMgr__ms_aspTexture[];

//----- (0042A550) --------------------------------------------------------
void __thiscall ItemSlot::ItemSlot(ItemSlot *this)
{
  ItemSlot *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->m_pkFrameWork = 0;
  v1->m_pkSender = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemSlot::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemSlot::_vftable_;
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}
// 97D964: using guessed type int (__stdcall *ItemSlot___vftable_)(int uiFlags);
// 97D984: using guessed type int (__thiscall *ItemSlot___vftable_)(void *p, char);

//----- (0042A5E0) --------------------------------------------------------
void __thiscall ItemSlot::_ItemSlot(ItemSlot *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemSlot::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemSlot::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 97D964: using guessed type int (__stdcall *ItemSlot___vftable_)(int uiFlags);
// 97D984: using guessed type int (__thiscall *ItemSlot___vftable_)(void *p, char);

//----- (0042A600) --------------------------------------------------------
bool __thiscall ItemSlot::Create(ItemSlot *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  ItemSlot *v6; // esi@1
  bool result; // al@1

  v6 = this;
  this->m_pkFrameWork = pkFrameWork;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v6->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (0042A640) --------------------------------------------------------
void __thiscall ItemSlot::OnFirstHitWin(ItemSlot *this)
{
  ItemSlot *v1; // esi@1
  unsigned __int16 v2; // ax@2
  Item *v3; // eax@2
  ItemInfoWin *v4; // ecx@3

  v1 = this;
  if ( ItemIcon::GetItemID(&this->baseclass_0) == -1 )
    goto LABEL_5;
  v2 = ItemIcon::GetItemID(&v1->baseclass_0);
  v3 = Inventory::GetItemByID(&g_kInventory, v2);
  if ( v3 )
  {
    v4 = g_pkItemInfoWin;
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    if ( v4 )
      ItemInfoWin::SetItemInfo(v4, v3);
LABEL_5:
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    return;
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
}

//----- (0042A6A0) --------------------------------------------------------
void __thiscall ItemSlot::ReSetSlot(ItemSlot *this)
{
  this->m_uiSenderType = -1;
  this->m_uiSenderInvIndex = -1;
  this->m_pkSender = 0;
  ItemIcon::SetItem(&this->baseclass_0, 0, 1);
}

//----- (0042A6D0) --------------------------------------------------------
void __thiscall ItemSlot::SetItemByID(ItemSlot *this, unsigned __int16 ItemID)
{
  ItemSlot *v2; // esi@1
  Item *v3; // eax@3

  v2 = this;
  if ( ItemID == -1 )
  {
    ItemIcon::SetItem(&this->baseclass_0, 0, 1);
  }
  else
  {
    v3 = Inventory::GetItemByID(&g_kInventory, ItemID);
    ItemIcon::SetItem(&v2->baseclass_0, v3, 1);
    v2->m_uiSenderInvIndex = Inventory::GetSlotByID(&g_kInventory, ItemID);
  }
}

//----- (0042A730) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::ShowAutoUseItemInfo(MinimonAutoItemUseWin *this)
{
  unsigned __int16 *v1; // ebx@1
  unsigned __int16 v2; // si@2
  int v3; // edi@2
  Item *v4; // eax@4
  unsigned __int16 *v5; // ebx@6
  unsigned __int16 v6; // si@7
  int v7; // edi@7
  Item *v8; // eax@9
  MinimonAutoItemUseWin *v9; // [sp+Ch] [bp-Ch]@1
  signed int v10; // [sp+10h] [bp-8h]@1
  signed int v11; // [sp+10h] [bp-8h]@6
  char *v12; // [sp+14h] [bp-4h]@1
  int v13; // [sp+14h] [bp-4h]@6

  v9 = this;
  v12 = (char *)this->m_apkBuffSlot;
  v1 = this->m_pkBuffItemList;
  v10 = 12;
  do
  {
    v2 = *v1;
    v3 = *(_DWORD *)v12;
    if ( *v1 == -1 )
    {
      ItemIcon::SetItem((ItemIcon *)v3, 0, 1);
    }
    else
    {
      v4 = Inventory::GetItemByID(&g_kInventory, *v1);
      ItemIcon::SetItem((ItemIcon *)v3, v4, 1);
      *(_DWORD *)(v3 + 460) = Inventory::GetSlotByID(&g_kInventory, v2);
    }
    v12 += 4;
    ++v1;
    --v10;
  }
  while ( v10 );
  v13 = (int)v9->m_apkChargedSlot;
  v5 = v9->m_pkChargedItemList;
  v11 = 12;
  do
  {
    v6 = *v5;
    v7 = *(_DWORD *)v13;
    if ( *v5 == -1 )
    {
      ItemIcon::SetItem((ItemIcon *)v7, 0, 1);
    }
    else
    {
      v8 = Inventory::GetItemByID(&g_kInventory, *v5);
      ItemIcon::SetItem((ItemIcon *)v7, v8, 1);
      *(_DWORD *)(v7 + 460) = Inventory::GetSlotByID(&g_kInventory, v6);
    }
    v13 += 4;
    ++v5;
    --v11;
  }
  while ( v11 );
}

//----- (0042A830) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::OnHelpLink(MinimonAutoItemUseWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "Minimon_AutoItemUse");
}

//----- (0042A860) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::OnCancel(MinimonAutoItemUseWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0042A870) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::MinimonAutoItemUseWin(MinimonAutoItemUseWin *this)
{
  MinimonAutoItemUseWin *v1; // esi@1
  int v2; // ecx@1
  int v3; // eax@1
  signed int v4; // edx@1
  int v5; // ecx@3
  int v6; // eax@3
  signed int v7; // edx@3

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MinimonAutoItemUseWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MinimonAutoItemUseWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  *(_WORD *)&v1->m_bAutoUseBuffItem = 0;
  v2 = (int)v1->m_apkBuffSlot;
  v3 = (int)v1->m_pkBuffItemList;
  v4 = 12;
  do
  {
    *(_WORD *)v3 = -1;
    *(_DWORD *)v2 = 0;
    v3 += 2;
    v2 += 4;
    --v4;
  }
  while ( v4 );
  v5 = (int)v1->m_apkChargedSlot;
  v6 = (int)v1->m_pkChargedItemList;
  v7 = 12;
  do
  {
    *(_WORD *)v6 = -1;
    *(_DWORD *)v5 = 0;
    v6 += 2;
    v5 += 4;
    --v7;
  }
  while ( v7 );
  v1->m_pkBuffBtn = 0;
  v1->m_pkChargedBtn = 0;
  v1->m_pkCancelBtn = 0;
  v1->m_pkBuffBtnText = 0;
  v1->m_pkChargedBtnText = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97DBF4: using guessed type int (__stdcall *MinimonAutoItemUseWin___vftable_)(int uiFlags);
// 97DC14: using guessed type int (__thiscall *MinimonAutoItemUseWin___vftable_)(void *p, char);

//----- (0042A930) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::_MinimonAutoItemUseWin(MinimonAutoItemUseWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MinimonAutoItemUseWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MinimonAutoItemUseWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97DBF4: using guessed type int (__stdcall *MinimonAutoItemUseWin___vftable_)(int uiFlags);
// 97DC14: using guessed type int (__thiscall *MinimonAutoItemUseWin___vftable_)(void *p, char);

//----- (0042A960) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::OnSlotLClick(MinimonAutoItemUseWin *this, unsigned int uiSlotIndex)
{
  MinimonAutoItemUseWin *v2; // esi@1
  ItemSlot *v3; // edi@1
  Item *v4; // ebx@2
  unsigned int v5; // eax@3
  unsigned int v6; // eax@3

  v2 = this;
  v3 = this->m_apkBuffSlot[uiSlotIndex];
  if ( v3 )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_kDropContents.m_eSenderType = 0;
      v2->m_kDropContents.m_eType = 6;
      v5 = v3->m_uiSenderInvIndex;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_apvParam[0] = v4;
      v2->m_kDropContents.m_uiSenderIndex = v5;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
      v2->m_kDropContents.m_kItemID = v4->m_pkInfo->ID;
      v2->m_kDrop.m_pkSender = (PgWin *)v2;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      v6 = v3->m_uiInvType;
      if ( v6 )
      {
        if ( v6 == 1 && v2->m_bAutoUseChargedItem )
          GameFrameWork::NcCharChargedItemAutoUseOffReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork);
      }
      else
      {
        if ( v2->m_bAutoUseBuffItem )
          GameFrameWork::NcCharBuffItemAutoUseOffReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork);
      }
      v3->m_uiSenderType = -1;
      v3->m_uiSenderInvIndex = -1;
      v3->m_pkSender = 0;
      ItemIcon::SetItem(&v3->baseclass_0, 0, 1);
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0042AA50) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::OnBuffItemUse(MinimonAutoItemUseWin *this)
{
  char *v1; // esi@3
  ItemIcon **v2; // edi@3
  signed int v3; // ebx@3
  MinimonAutoItemUseWin *v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  if ( this->m_bAutoUseBuffItem )
  {
    GameFrameWork::NcCharBuffItemAutoUseOffReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  }
  else
  {
    v1 = (char *)this->m_pkBuffItemList;
    v2 = (ItemIcon **)this->m_apkBuffSlot;
    v3 = 12;
    do
    {
      if ( ItemIcon::GetItem(*v2) )
        *(_WORD *)v1 = ItemIcon::GetItem(*v2)->m_kStruct.itemid;
      else
        *(_WORD *)v1 = -1;
      ++v2;
      v1 += 2;
      --v3;
    }
    while ( v3 );
    GameFrameWork::NcCharBuffItemAutoUseOnReq((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, v4->m_pkBuffItemList);
  }
}

//----- (0042AAD0) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::OnChargedItemUse(MinimonAutoItemUseWin *this)
{
  char *v1; // esi@3
  ItemIcon **v2; // edi@3
  signed int v3; // ebx@3
  MinimonAutoItemUseWin *v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  if ( this->m_bAutoUseChargedItem )
  {
    GameFrameWork::NcCharChargedItemAutoUseOffReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  }
  else
  {
    v1 = (char *)this->m_pkChargedItemList;
    v2 = (ItemIcon **)this->m_apkChargedSlot;
    v3 = 12;
    do
    {
      if ( ItemIcon::GetItem(*v2) )
        *(_WORD *)v1 = ItemIcon::GetItem(*v2)->m_kStruct.itemid;
      else
        *(_WORD *)v1 = -1;
      ++v2;
      v1 += 2;
      --v3;
    }
    while ( v3 );
    GameFrameWork::NcCharChargedItemAutoUseOnReq(
      (GameFrameWork *)v4->baseclass_0.m_pkFrameWork,
      v4->m_pkChargedItemList);
  }
}

//----- (0042AB50) --------------------------------------------------------
void __thiscall ItemSlot::DoAction(ItemSlot *this)
{
  ItemSlot *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0042AB80) --------------------------------------------------------
void __thiscall ItemSlot::DoRAction(ItemSlot *this)
{
  ItemSlot *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0042ABB0) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::OnCommand(MinimonAutoItemUseWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      MinimonAutoItemUseWin::OnSlotLClick(this, lParam);
      break;
    case 0xCu:
      MinimonAutoItemUseWin::OnBuffItemUse(this);
      break;
    case 0xDu:
      MinimonAutoItemUseWin::OnChargedItemUse(this);
      break;
    case 0xEu:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xFu:
      MinimonAutoItemUseWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (0042AC20) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::SetAutoUseBuffItem(MinimonAutoItemUseWin *this, bool bUse)
{
  MinimonAutoItemUseWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@2
  char *v5; // eax@3
  GameFrameWork *v6; // esi@4
  char *v7; // eax@4
  unsigned int v8; // [sp-4h] [bp-10h]@2

  v2 = this;
  this->m_bAutoUseBuffItem = bUse;
  Char::SetItemAutoUseBuff(g_pkMainChar, bUse);
  v3 = v2->m_pkBuffBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( bUse )
  {
    v4 = TextData3::Get(0xF887E8Au);
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkBuffBtnText, (unsigned int)v4);
    v8 = -791211485;
  }
  else
  {
    v5 = TextData3::Get(0x55807E8Au);
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkBuffBtnText, (unsigned int)v5);
    v8 = -803403229;
  }
  v6 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
  v7 = TextData3::Get(v8);
  GameFrameWork::AddSysMsg(v6, v7);
}

//----- (0042ACB0) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::SetAutoUseChargedItem(MinimonAutoItemUseWin *this, bool bUse)
{
  MinimonAutoItemUseWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@2
  char *v5; // eax@3
  GameFrameWork *v6; // esi@4
  char *v7; // eax@4
  unsigned int v8; // [sp-4h] [bp-10h]@2

  v2 = this;
  this->m_bAutoUseChargedItem = bUse;
  Char::SetItemAutoUseCharged(g_pkMainChar, bUse);
  v3 = v2->m_pkChargedBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( bUse )
  {
    v4 = TextData3::Get(0xF887E8Au);
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkChargedBtnText, (unsigned int)v4);
    v8 = 138543962;
  }
  else
  {
    v5 = TextData3::Get(0x55807E8Au);
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkChargedBtnText, (unsigned int)v5);
    v8 = 138561874;
  }
  v6 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
  v7 = TextData3::Get(v8);
  GameFrameWork::AddSysMsg(v6, v7);
}

//----- (0042AD40) --------------------------------------------------------
bool __thiscall MinimonAutoItemUseWin::DropItemSlot(MinimonAutoItemUseWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop)
{
  ItemSlot *v3; // esi@1
  void *v5; // eax@3
  Item *v6; // eax@5
  unsigned int v7; // edx@6
  signed int v8; // edi@7
  ItemIcon **v9; // ebx@7
  GameFrameWork *v10; // esi@13
  signed int v11; // edi@15
  ItemIcon **v12; // ebx@15
  char *v13; // eax@23
  void *pkContents; // [sp+4h] [bp-Ch]@3
  MinimonAutoItemUseWin *v15; // [sp+Ch] [bp-4h]@1
  Item *pItem; // [sp+18h] [bp+8h]@5

  v3 = this->m_apkBuffSlot[uiReceiverInvIndex];
  v15 = this;
  if ( !v3
    || (v5 = pkDrop->m_pkContents, (pkContents = v5) == 0)
    || *((_DWORD *)v5 + 6) == 1
    || (v6 = (Item *)*((_DWORD *)v5 + 5), (pItem = v6) == 0) )
    return 0;
  v7 = v3->m_uiInvType;
  if ( !v7 )
  {
    v8 = 0;
    v9 = (ItemIcon **)this->m_apkBuffSlot;
    while ( 1 )
    {
      if ( ItemIcon::GetItemID(*v9) == v6->m_kStruct.itemid )
      {
        v10 = (GameFrameWork *)v15->baseclass_0.m_pkFrameWork;
        goto LABEL_23;
      }
      ++v8;
      ++v9;
      if ( v8 >= 12 )
        break;
      v6 = pItem;
    }
    if ( v15->m_bAutoUseBuffItem )
      GameFrameWork::NcCharBuffItemAutoUseOffReq((GameFrameWork *)v15->baseclass_0.m_pkFrameWork);
    goto LABEL_21;
  }
  if ( v7 != 1 )
  {
LABEL_21:
    v3->m_uiSenderType = -1;
    v3->m_uiSenderInvIndex = -1;
    v3->m_pkSender = 0;
    ItemIcon::SetItem(&v3->baseclass_0, 0, 1);
    v3->m_uiSenderType = *((_DWORD *)pkContents + 2);
    v3->m_uiSenderInvIndex = *((_DWORD *)pkContents + 3);
    v3->m_pkSender = pkDrop->m_pkSender;
    ItemIcon::SetItem(&v3->baseclass_0, pItem, 1);
    return 1;
  }
  v11 = 0;
  v12 = (ItemIcon **)this->m_apkChargedSlot;
  while ( ItemIcon::GetItemID(*v12) != v6->m_kStruct.itemid )
  {
    ++v11;
    ++v12;
    if ( v11 >= 12 )
    {
      if ( v15->m_bAutoUseChargedItem )
        GameFrameWork::NcCharChargedItemAutoUseOffReq((GameFrameWork *)v15->baseclass_0.m_pkFrameWork);
      goto LABEL_21;
    }
    v6 = pItem;
  }
  v10 = (GameFrameWork *)v15->baseclass_0.m_pkFrameWork;
LABEL_23:
  v13 = TextData3::Get(0xFB855966u);
  GameFrameWork::AddSysMsg(v10, v13);
  PgCursor::ms_bKeepDrop = 1;
  return 0;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (0042AEC0) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::AutoUseItemExhausted(MinimonAutoItemUseWin *this, unsigned __int16 ItemID)
{
  MinimonAutoItemUseWin *v2; // edi@1
  unsigned __int16 v3; // cx@1
  signed int v4; // esi@2
  int v5; // eax@2
  ItemSlot *v6; // ecx@6
  signed int v7; // esi@7
  int v8; // eax@7
  ItemSlot *v9; // ecx@11
  Item *v10; // eax@12
  GameFrameWork *v11; // edi@14
  char *v12; // eax@14
  char *v13; // eax@14

  v2 = this;
  v3 = ItemID;
  if ( ItemID != -1 )
  {
    v4 = 0;
    v5 = (int)v2->m_pkBuffItemList;
    while ( *(_WORD *)v5 != ItemID )
    {
      ++v4;
      v5 += 2;
      if ( v4 >= 12 )
        goto LABEL_7;
    }
    v6 = v2->m_apkBuffSlot[v4];
    v6->m_uiSenderType = -1;
    v6->m_uiSenderInvIndex = -1;
    v6->m_pkSender = 0;
    ItemIcon::SetItem(&v6->baseclass_0, 0, 1);
    v2->m_pkBuffItemList[v4] = -1;
    v3 = ItemID;
LABEL_7:
    v7 = 0;
    v8 = (int)v2->m_pkChargedItemList;
    while ( *(_WORD *)v8 != v3 )
    {
      ++v7;
      v8 += 2;
      if ( v7 >= 12 )
        goto LABEL_12;
    }
    v9 = v2->m_apkChargedSlot[v7];
    v9->m_uiSenderType = -1;
    v9->m_uiSenderInvIndex = -1;
    v9->m_pkSender = 0;
    ItemIcon::SetItem(&v9->baseclass_0, 0, 1);
    v3 = ItemID;
    v2->m_pkChargedItemList[v7] = -1;
LABEL_12:
    v10 = Inventory::GetItemByID(&g_kInventory, v3);
    if ( v10 )
    {
      if ( v10->m_pkInfo != (ItemInfo *)-2 )
      {
        v11 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v12 = TextData3::Get(0xC1F181Bu);
        v13 = fs(v12);
        GameFrameWork::AddSysMsg(v11, v13);
      }
    }
  }
}

//----- (0042AFD0) --------------------------------------------------------
void __thiscall ItemSlot::UpdateMeWin(ItemSlot *this, float fCurTime)
{
  ItemIcon *v2; // edi@1
  unsigned __int16 v3; // si@2
  PgFrameWork *v4; // eax@3
  InventoryWin *v5; // ecx@4
  char *v6; // eax@6
  PgWin *v7; // eax@7

  v2 = (ItemIcon *)this;
  if ( this->m_fLastUpdateTime + 0.1000000014901161 <= fCurTime )
  {
    this->m_fLastUpdateTime = fCurTime;
    v3 = ItemIcon::GetItemID(&this->baseclass_0);
    if ( v3 != -1 )
    {
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
      {
        v5 = (InventoryWin *)v4[19].m_BackFrameID;
        if ( v5 )
        {
          if ( InventoryWin::GetTotalItemCount(v5, v3) )
          {
            v6 = fs("%d");
            ItemIcon::SetLotText(v2, v6);
          }
          else
          {
            v7 = PgWin::GetParentWin(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
            MinimonAutoItemUseWin::AutoUseItemExhausted((MinimonAutoItemUseWin *)v7, v3);
          }
        }
      }
    }
  }
}

//----- (0042B070) --------------------------------------------------------
bool __thiscall ItemSlot::EatDropInstance(ItemSlot *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  ItemSlot *v4; // esi@1
  void *v5; // eax@2
  int v6; // ecx@3
  int v7; // eax@5
  MinimonAutoUseItem *v8; // eax@6
  GameFrameWork *v9; // esi@8
  char *v10; // eax@8
  unsigned int v12; // ecx@11
  PgWin *v13; // eax@17
  unsigned int v14; // [sp-4h] [bp-Ch]@7

  v4 = this;
  if ( !*pkDrop )
    return 0;
  v5 = (*pkDrop)->m_pkContents;
  if ( *((_DWORD *)v5 + 2) || (v6 = *((_DWORD *)v5 + 4), v6 != 6) && v6 || (v7 = *((_DWORD *)v5 + 5)) == 0 )
  {
LABEL_9:
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  v8 = MinimonAutoUseItemTable::GetMiniMonDataByIDX((char *)(*(_DWORD *)(v7 + 112) + 2));
  if ( !v8 )
  {
    v14 = -1211163901;
LABEL_8:
    v9 = (GameFrameWork *)v4->m_pkFrameWork;
    v10 = TextData3::Get(v14);
    GameFrameWork::AddSysMsg(v9, v10);
    goto LABEL_9;
  }
  v12 = v4->m_uiInvType;
  if ( v12 )
  {
    if ( v12 == 1 && v8->MAUItem != 1 )
    {
      v14 = -267378621;
      goto LABEL_8;
    }
  }
  else
  {
    if ( v8->MAUItem != 2 )
    {
      v14 = -1194847228;
      goto LABEL_8;
    }
  }
  v13 = PgWin::GetParentWin(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  return MinimonAutoItemUseWin::DropItemSlot((MinimonAutoItemUseWin *)v13, v4->m_uiInvIndex, *pkDrop);
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (0042B120) --------------------------------------------------------
void __thiscall MinimonAutoItemUseWin::SetAutoUseItemInfo(MinimonAutoItemUseWin *this, USEITEM_MINIMON_INFO *pInfo)
{
  MinimonAutoItemUseWin *v2; // edi@1
  int v3; // ecx@6
  char *v4; // eax@6
  signed int v5; // edx@6
  int v6; // ecx@8
  char *v7; // eax@8
  signed int v8; // edx@8

  v2 = this;
  if ( pInfo )
  {
    if ( pInfo->bNormalItem )
      MinimonAutoItemUseWin::SetAutoUseBuffItem(this, 1);
    if ( pInfo->bChargedItem )
      MinimonAutoItemUseWin::SetAutoUseChargedItem(v2, 1);
    v3 = (int)v2->m_pkBuffItemList;
    v4 = (char *)pInfo->NormalItemList;
    v5 = 12;
    do
    {
      *(_WORD *)v3 = *(_WORD *)v4;
      v4 += 2;
      v3 += 2;
      --v5;
    }
    while ( v5 );
    v6 = (int)v2->m_pkChargedItemList;
    v7 = (char *)pInfo->ChargedItemList;
    v8 = 12;
    do
    {
      *(_WORD *)v6 = *(_WORD *)v7;
      v7 += 2;
      v6 += 2;
      --v8;
    }
    while ( v8 );
    MinimonAutoItemUseWin::ShowAutoUseItemInfo(v2);
  }
}

//----- (0042B1A0) --------------------------------------------------------
ItemSlot *__cdecl ItemSlot::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  ItemSlot *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x1E0u);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    ItemSlot::ItemSlot((ItemSlot *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *, PgFrameWork *))(*(_DWORD *)v7 + 616))(
                          v7,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (ItemSlot *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (0042B2E0) --------------------------------------------------------
MinimonAutoItemUseWin *__cdecl MinimonAutoItemUseWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MinimonAutoItemUseWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x258u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MinimonAutoItemUseWin::MinimonAutoItemUseWin((MinimonAutoItemUseWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MinimonAutoItemUseWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0042B410) --------------------------------------------------------
bool __thiscall MinimonAutoItemUseWin::Create(MinimonAutoItemUseWin *this, PgFrameWork *pkFrameWork)
{
  MinimonAutoItemUseWin *v2; // edi@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // esi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  D3DXCOLOR v12; // ST1C_16@13
  char *v13; // eax@13
  D3DXCOLOR v14; // ST1C_16@13
  char *v15; // eax@13
  D3DXCOLOR v16; // ST1C_16@13
  char *v17; // eax@13
  D3DXCOLOR v18; // ST1C_16@13
  char *v19; // eax@13
  D3DXCOLOR v20; // ST1C_16@13
  char *v21; // eax@13
  D3DXCOLOR v22; // ST1C_16@13
  char *v23; // eax@13
  D3DXCOLOR v24; // ST1C_16@13
  char *v25; // eax@13
  IconWin **v26; // esi@13
  NiNode *v27; // ebx@14
  char *v28; // eax@14
  PgSprData *v29; // eax@14
  PgWinSpr *v30; // ebx@14
  char *v31; // eax@14
  unsigned int v32; // ebx@14
  ItemSlot *v33; // eax@14
  IconWin *v34; // ecx@14
  IconWin **v35; // esi@15
  NiNode *v36; // ebx@16
  char *v37; // eax@16
  PgSprData *v38; // eax@16
  PgWinSpr *v39; // ebx@16
  char *v40; // eax@16
  unsigned int v41; // ebx@16
  ItemSlot *v42; // eax@16
  IconWin *v43; // ecx@16
  NiNode *v44; // esi@17
  const char *v45; // [sp+20h] [bp-58h]@11
  int *v46; // [sp+24h] [bp-54h]@11
  int *v47; // [sp+28h] [bp-50h]@11
  NiSourceTexture *v48; // [sp+2Ch] [bp-4Ch]@11
  UIUtil ui; // [sp+40h] [bp-38h]@10
  unsigned int i; // [sp+54h] [bp-24h]@13
  int iOffX; // [sp+58h] [bp-20h]@10
  int iOffY; // [sp+5Ch] [bp-1Ch]@10
  NiPointer<NiNode> spNode; // [sp+60h] [bp-18h]@1
  int uiLeft; // [sp+64h] [bp-14h]@4
  int uiTop; // [sp+68h] [bp-10h]@4
  int v56; // [sp+74h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v56 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\Minimon_AutoItemUse.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "MinimonAutoItemUseWin", 0) )
  {
    v6 = spNode.m_pObject;
    v56 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  iOffX = uiLeft;
  iOffY = uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v56) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v8, v9);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v48 = v10;
    v47 = &uiTop;
    v46 = &uiLeft;
    v45 = "Theme";
  }
  else
  {
    v48 = 0;
    v47 = &uiTop;
    v46 = &uiLeft;
    v45 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v45, v46, v47, v48);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  *(_QWORD *)&v12.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v12.b = qword_A746E8;
  v13 = TextData3::Get(0xCD29242Fu);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v13, COERCE_D3DXCOLOR(v12.r), 5u);
  UIUtil::CreateBtn(&ui, 0xFu, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, 0);
  UIUtil::CreateBtn(&ui, 0xEu, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  UIUtil::CreateSpr(&ui, "BuffIcon", 0);
  UIUtil::CreateSpr(&ui, "ChargedIcon", 0);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = TextData3::Get(0x2E2E2861u);
  UIUtil::CreateTextNoSpr(&ui, "BuffTipText", v15, COERCE_D3DXCOLOR(v14.r), 4u);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v17 = TextData3::Get(0x3161264Cu);
  UIUtil::CreateTextNoSpr(&ui, "ChargedTipText", v17, COERCE_D3DXCOLOR(v16.r), 4u);
  *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v19 = TextData3::Get(0x2F415D72u);
  UIUtil::CreateTextNoSpr(&ui, "TipText", v19, COERCE_D3DXCOLOR(v18.r), 4u);
  v2->m_pkBuffBtn = UIUtil::CreateBtn(&ui, 0xCu, "BuffBtnNor", "BuffBtnClick", "BuffBtnOver", 0, 0);
  v2->m_pkChargedBtn = UIUtil::CreateBtn(&ui, 0xDu, "ChargedBtnNor", "ChargedBtnClick", "ChargedBtnOver", 0, 0);
  v2->m_pkCancelBtn = UIUtil::CreateBtn(&ui, 0xEu, "CancelNor", "CancelClick", "CancelOver", 0, 0);
  *(_QWORD *)&v20.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v20.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v21 = TextData3::Get(0xF857E8Au);
  UIUtil::CreateAttachedText(&ui, &v2->m_pkCancelBtn->baseclass_0.baseclass_0, v21, COERCE_D3DXCOLOR(v20.r), 5u);
  *(_QWORD *)&v22.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v22.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v23 = TextData3::Get(0x55807E8Au);
  v2->m_pkBuffBtnText = UIUtil::CreateAttachedText(
                          &ui,
                          &v2->m_pkBuffBtn->baseclass_0.baseclass_0,
                          v23,
                          COERCE_D3DXCOLOR(v22.r),
                          5u);
  *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v25 = TextData3::Get(0x55807E8Au);
  v2->m_pkChargedBtnText = UIUtil::CreateAttachedText(
                             &ui,
                             &v2->m_pkChargedBtn->baseclass_0.baseclass_0,
                             v25,
                             COERCE_D3DXCOLOR(v24.r),
                             5u);
  i = 0;
  v26 = (IconWin **)v2->m_apkBuffSlot;
  do
  {
    v27 = spNode.m_pObject;
    v28 = fs("BuffSlot%02d");
    v29 = PgSprData::Create(&v27->baseclass_0, v28, &uiLeft, &uiTop, 0);
    v30 = PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v29, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v30->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v31 = TextData3::Get(0x4B4B6849u);
    PgWin::SetToolTipWinText(&v30->baseclass_0, v31);
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v30,
      1u);
    v32 = i;
    v33 = ItemSlot::CreateWin(
            uiLeft - iOffX + 1,
            uiTop - iOffY + 1,
            i,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            pkFrameWork);
    *v26 = (IconWin *)v33;
    v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v33,
      1u);
    ((void (__stdcall *)(signed int))(*v26)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))(*v26)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
    ((void (__stdcall *)(signed int))(*v26)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
    (*v26)->baseclass_0.baseclass_0.m_eType = 1;
    LODWORD((*v26)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = 0;
    IconWin::ShowFocus(*v26, 1);
    v34 = *v26;
    LODWORD((*v26)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][0]) = -1;
    LODWORD(v34[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][1]) = -1;
    LODWORD(v34[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y) = 0;
    ItemIcon::SetItem((ItemIcon *)v34, 0, 1);
    ++v26;
    i = v32 + 1;
  }
  while ( (signed int)(v32 + 1) < 12 );
  i = 0;
  v35 = (IconWin **)v2->m_apkChargedSlot;
  do
  {
    v36 = spNode.m_pObject;
    v37 = fs("ChargedSlot%02d");
    v38 = PgSprData::Create(&v36->baseclass_0, v37, &uiLeft, &uiTop, 0);
    v39 = PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v39->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v40 = TextData3::Get(0x4C4B6849u);
    PgWin::SetToolTipWinText(&v39->baseclass_0, v40);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v39,
      1u);
    v41 = i;
    v42 = ItemSlot::CreateWin(
            uiLeft - iOffX + 1,
            uiTop - iOffY + 1,
            i + 12,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            pkFrameWork);
    *v35 = (IconWin *)v42;
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v42,
      1u);
    ((void (__stdcall *)(signed int))(*v35)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))(*v35)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
    ((void (__stdcall *)(signed int))(*v35)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
    (*v35)->baseclass_0.baseclass_0.m_eType = 1;
    LODWORD((*v35)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = 1;
    IconWin::ShowFocus(*v35, 1);
    v43 = *v35;
    LODWORD((*v35)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][0]) = -1;
    LODWORD(v43[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][1]) = -1;
    LODWORD(v43[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y) = 0;
    ItemIcon::SetItem((ItemIcon *)v43, 0, 1);
    ++v35;
    i = v41 + 1;
  }
  while ( (signed int)(v41 + 1) < 12 );
  ((void (__thiscall *)(MinimonAutoItemUseWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.30000001,
    0.5);
  LOBYTE(v56) = 0;
  UIUtil::_UIUtil(&ui);
  v44 = spNode.m_pObject;
  v56 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v44 )
    v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v44, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0042BB10) --------------------------------------------------------
void __thiscall ItemIcon::SetLotText(ItemIcon *this, char *pcText)
{
  ItemIcon *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  ((void (__stdcall *)(_DWORD))v2->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (0042BB50) --------------------------------------------------------
void *__thiscall ItemSlot::_scalar_deleting_destructor_(ItemSlot *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemSlot::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemSlot::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97D964: using guessed type int (__stdcall *ItemSlot___vftable_)(int uiFlags);
// 97D984: using guessed type int (__thiscall *ItemSlot___vftable_)(void *p, char);

//----- (0042BB90) --------------------------------------------------------
MinimonAutoUseItem *__cdecl MinimonAutoUseItemTable::GetMiniMonDataByIDX(char *pcItemIDX)
{
  char *v1; // ebx@1
  int v2; // eax@3
  unsigned int v3; // edi@4
  unsigned int v4; // esi@6
  MinimonAutoUseItem *result; // eax@7

  v1 = pcItemIDX;
  if ( pcItemIDX && *pcItemIDX )
  {
    v2 = *(_DWORD *)(ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable + 56);
    if ( v2 )
      v3 = *(_DWORD *)(v2 + 40);
    else
      v3 = 0;
    v4 = 0;
    if ( v3 )
    {
      do
      {
        result = (MinimonAutoUseItem *)CDataReader::GetRecord(
                                         (CDataReader *)(ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable
                                                       + 4),
                                         v4);
        if ( result )
        {
          if ( !strcmp(result->ItemIDX, v1) )
            return result;
          v1 = pcItemIDX;
        }
        ++v4;
      }
      while ( v4 < v3 );
    }
    result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959E0: using guessed type int ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable___ms_pkTable;

//----- (0042BC20) --------------------------------------------------------
void *__thiscall MinimonAutoItemUseWin::_scalar_deleting_destructor_(MinimonAutoItemUseWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MinimonAutoItemUseWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MinimonAutoItemUseWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97DBF4: using guessed type int (__stdcall *MinimonAutoItemUseWin___vftable_)(int uiFlags);
// 97DC14: using guessed type int (__thiscall *MinimonAutoItemUseWin___vftable_)(void *p, char);

//----- (0042BC70) --------------------------------------------------------
void __thiscall MobKillCountWin::MobKillCountWin(MobKillCountWin *this)
{
  MobKillCountWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkPortrait = 0;
  v1->m_pkText = 0;
  v1->m_uiKillCount = 0;
  v1->m_uiMobCount = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MobKillCountWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MobKillCountWin::_vftable_;
}
// 97DE6C: using guessed type int (__stdcall *MobKillCountWin___vftable_)(int uiFlags);
// 97DE8C: using guessed type int (__thiscall *MobKillCountWin___vftable_)(void *p, char);

//----- (0042BCB0) --------------------------------------------------------
void __thiscall MobKillCountWin::_MobKillCountWin(MobKillCountWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MobKillCountWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MobKillCountWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97DE6C: using guessed type int (__stdcall *MobKillCountWin___vftable_)(int uiFlags);
// 97DE8C: using guessed type int (__thiscall *MobKillCountWin___vftable_)(void *p, char);

//----- (0042BCD0) --------------------------------------------------------
bool __thiscall MobKillCountWin::Create(MobKillCountWin *this, PgFrameWork *pkFrameWork)
{
  MobKillCountWin *v2; // edi@1
  bool result; // al@1
  NiSourceTexture *v4; // eax@2
  PgWin *v5; // esi@2
  PgFont *v6; // ST1C_4@2
  unsigned int v7; // ST18_4@2
  unsigned int v8; // eax@2
  PgWinText *v9; // eax@2
  NiTexture *v10; // esi@2
  unsigned int v11; // ST1C_4@2
  unsigned int v12; // eax@2
  PgWinSpr *v13; // eax@2

  v2 = this;
  result = PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFrameWork, "MobKillCountWin", 0);
  if ( result )
  {
    v4 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
    v5 = (PgWin *)PgWinSpr::CreateWin(v4, 20, 5, 0x64u, 0x1Eu, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
      (NiRefObject *)v5,
      COERCE_UNSIGNED_INT(0.5));
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v5, 0);
    v6 = Font::Get(0);
    v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5);
    v8 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
    v9 = PgWinText::CreateWin(0, 0, v8, v7, v6, v5, 0, 0);
    v2->m_pkText = v9;
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v9,
      5u);
    ((void (__stdcall *)(_DWORD))v2->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v10 = PortraitTextureBuffer::GetMobPortrait(0);
    v11 = ((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v10);
    v12 = ((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v10);
    v13 = PgWinSpr::CreateWin((NiSourceTexture *)v10, 0, 0, v12, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPortrait = v13;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v13,
      0);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.34999999);
    result = 1;
  }
  return result;
}

//----- (0042BE20) --------------------------------------------------------
void __thiscall MobKillCountWin::AddCount(MobKillCountWin *this)
{
  MobKillCountWin *v1; // esi@1
  unsigned int v2; // eax@1
  PgWinText *v3; // eax@3
  NiRefObjectVtbl *v4; // edi@4
  char *v5; // eax@4

  v1 = this;
  v2 = this->m_uiKillCount;
  if ( v2 < this->m_uiMobCount )
    this->m_uiKillCount = v2 + 1;
  v3 = this->m_pkText;
  if ( v3 )
  {
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = fs("(%d / %d)");
    v4[118].__vecDelDtor((NiRefObject *)v1->m_pkText, (unsigned int)v5);
  }
}

//----- (0042BE70) --------------------------------------------------------
bool __thiscall MobKillCountWin::IsEnd(MobKillCountWin *this)
{
  return this->m_uiKillCount == this->m_uiMobCount;
}

//----- (0042BE90) --------------------------------------------------------
void __thiscall MobKillCountWin::Init(MobKillCountWin *this, unsigned __int16 kMobID, unsigned int uiMobCount)
{
  MobKillCountWin *v3; // esi@1
  PgWinSpr *v4; // eax@1
  PgSpr *v5; // edi@2
  NiTexture *v6; // eax@2
  PgWinText *v7; // eax@3
  NiRefObjectVtbl *v8; // edi@4
  char *v9; // eax@4

  v3 = this;
  v4 = this->m_pkPortrait;
  if ( v4 )
  {
    v5 = v4->m_spSpr.m_pObject;
    v6 = PortraitTextureBuffer::GetMobPortrait(kMobID);
    PgSpr::SetTexture(v5, v6);
  }
  v7 = v3->m_pkText;
  v3->m_uiKillCount = 0;
  v3->m_uiMobCount = uiMobCount;
  if ( v7 )
  {
    v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = fs("(%d / %d)");
    v8[118].__vecDelDtor((NiRefObject *)v3->m_pkText, (unsigned int)v9);
  }
}

//----- (0042BF00) --------------------------------------------------------
MobKillCountWin *__cdecl MobKillCountWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  MobKillCountWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &MobKillCountWin::_vftable_;
    *((_DWORD *)v2 + 58) = &MobKillCountWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (MobKillCountWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97DE6C: using guessed type int (__stdcall *MobKillCountWin___vftable_)(int uiFlags);
// 97DE8C: using guessed type int (__thiscall *MobKillCountWin___vftable_)(void *p, char);

//----- (0042C060) --------------------------------------------------------
void *__thiscall MobKillCountWin::_vector_deleting_destructor_(MobKillCountWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MobKillCountWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MobKillCountWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97DE6C: using guessed type int (__stdcall *MobKillCountWin___vftable_)(int uiFlags);
// 97DE8C: using guessed type int (__thiscall *MobKillCountWin___vftable_)(void *p, char);

//----- (0042C0A0) --------------------------------------------------------
void __thiscall SlotWin::SlotWin(SlotWin *this)
{
  SlotWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlotWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlotWin::_vftable_;
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_pkSender = 0;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  v1->m_pkFrameWork = 0;
  v1->m_bLock = 0;
}
// 97E234: using guessed type int (__stdcall *SlotWin___vftable_)(int uiFlags);
// 97E254: using guessed type int (__thiscall *SlotWin___vftable_)(void *p, char);

//----- (0042C130) --------------------------------------------------------
void __thiscall SlotWin::_SlotWin(SlotWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlotWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 97E234: using guessed type int (__stdcall *SlotWin___vftable_)(int uiFlags);
// 97E254: using guessed type int (__thiscall *SlotWin___vftable_)(void *p, char);

//----- (0042C150) --------------------------------------------------------
bool __thiscall SlotWin::Create(SlotWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  SlotWin *v6; // esi@1
  bool result; // al@1

  v6 = this;
  this->m_pkFrameWork = pkFrameWork;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v6->m_uiInvIndex = uiInvIndex;
    ItemIcon::ShowLotText(&v6->baseclass_0, 0);
    result = 1;
  }
  return result;
}

//----- (0042C1B0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::OnHelpLink(MoverUpgradeWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MoverUpgrade");
}

//----- (0042C1E0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::OnShowWin(MoverUpgradeWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v1, BIL_MOVER_3);
}

//----- (0042C210) --------------------------------------------------------
SlotWin *__thiscall MoverUpgradeWin::GetInsertedOldSlot(MoverUpgradeWin *this, unsigned int _uiSlotNum)
{
  MoverUpgradeWin *v2; // esi@1

  v2 = this;
  if ( _uiSlotNum )
  {
    if ( _uiSlotNum == 1 && ItemIcon::GetItem(&this->m_apkSlotWin[1]->baseclass_0) )
      return v2->m_apkSlotWin[1];
  }
  else
  {
    if ( ItemIcon::GetItem(&this->m_apkSlotWin[0]->baseclass_0) )
      return v2->m_apkSlotWin[0];
  }
  return 0;
}

//----- (0042C270) --------------------------------------------------------
void __thiscall SlotWin::OnFirstHitWin(SlotWin *this)
{
  SlotWin *v1; // esi@1
  PgWin *v2; // eax@5
  unsigned int v3; // ecx@6
  ItemIcon *v4; // ecx@7
  Item *v5; // eax@9
  ItemInfoWin *v6; // ecx@10

  v1 = this;
  if ( !this->m_bLock )
  {
    if ( ItemIcon::GetItem(&this->baseclass_0) )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    else
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2 = v1->m_pkSender;
    if ( v2 )
    {
      v3 = v1->m_uiSenderInvIndex;
      if ( v3 < 0xC0 )
      {
        v4 = (ItemIcon *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
        if ( v4 )
        {
          if ( ItemIcon::GetItem(v4) )
          {
            v5 = ItemIcon::GetItem(&v1->baseclass_0);
            if ( v5 )
            {
              v6 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
              if ( v6 )
              {
                ItemInfoWin::SetItemInfo(v6, v5);
                PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              }
            }
          }
        }
      }
    }
  }
}

//----- (0042C300) --------------------------------------------------------
bool __thiscall SlotWin::SetSenderInvSlotLock(SlotWin *this, bool _bLock)
{
  PgWin *v2; // eax@1
  bool result; // al@2
  unsigned int v4; // ecx@3
  InvWin *v5; // ecx@4

  v2 = this->m_pkSender;
  if ( v2
    && (v4 = this->m_uiSenderInvIndex, v4 < 0xC0)
    && (v5 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v4 + 2])) != 0 )
  {
    InvWin::SetLock(v5, _bLock);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042C340) --------------------------------------------------------
void __thiscall MoverUpgradeWin::UpdateMeWin(MoverUpgradeWin *this, float fCurTime)
{
  SpEffect *v2; // ecx@1

  v2 = this->m_apkEffect;
  if ( v2->m_bLive )
    SpEffect::Update(v2, fCurTime);
}

//----- (0042C360) --------------------------------------------------------
void __thiscall MoverUpgradeWin::OnCancel(MoverUpgradeWin *this)
{
  if ( this->m_pkMsgBox )
    this->m_pkMsgBox = 0;
  GameFrameWork::CloseMoverUpgradeWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
}

//----- (0042C390) --------------------------------------------------------
void __thiscall MoverUpgradeWin::DirectMessage(MoverUpgradeWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  MoverUpgradeWin *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
    {
      LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_pkTail[37].m_pkPrev) = 1;
      *(_BYTE *)(*(_DWORD *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0]
               + 448) = 1;
      GameFrameWork::NcMoverUpgradeReq(
        LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
        LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.x),
        LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.y));
      SpEffect::Start(
        (SpEffect *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr,
        (NiNode *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker);
      LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_fRadius) = 0;
    }
  }
}

//----- (0042C400) --------------------------------------------------------
bool __thiscall MoverUpgradeWin::IsUpgrading(MoverUpgradeWin *this)
{
  SpEffect *v1; // eax@1
  bool result; // al@2

  v1 = this->m_apkEffect;
  if ( v1 )
    result = v1->m_bLive;
  else
    result = 0;
  return result;
}

//----- (0042C420) --------------------------------------------------------
void __thiscall SlotWin::DoAction(SlotWin *this)
{
  SlotWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0042C450) --------------------------------------------------------
void __thiscall SlotWin::DoRAction(SlotWin *this)
{
  SlotWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0042C480) --------------------------------------------------------
void __thiscall SlotWin::ReSetSlot(SlotWin *this)
{
  SlotWin *v1; // esi@1
  PgWin *v2; // eax@1
  unsigned int v3; // ecx@2
  InvWin *v4; // ecx@3

  v1 = this;
  v2 = this->m_pkSender;
  this->m_bLock = 0;
  if ( v2 )
  {
    v3 = this->m_uiSenderInvIndex;
    if ( v3 < 0xC0 )
    {
      v4 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
      if ( v4 )
        InvWin::SetLock(v4, 0);
    }
  }
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_pkSender = 0;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}

//----- (0042C4E0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::ShowUpgradeResult(MoverUpgradeWin *this, unsigned int uiSlotIndex, bool bRare, bool bUpgrade)
{
  unsigned int v4; // edi@0
  MoverUpgradeWin *v5; // esi@1
  void *v6; // eax@1
  ItemIcon *v7; // ecx@3
  Item *v8; // eax@4
  Item *v9; // edi@4
  SlotWin *v10; // eax@5
  PgWin *v11; // ecx@5
  unsigned int v12; // eax@6
  InvWin *v13; // ecx@7
  int v14; // eax@9
  PgWinText *v15; // ecx@9
  NiRefObjectVtbl *v16; // edi@10
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // edx@10
  char *v18; // edi@12
  char *v19; // eax@14
  unsigned int v20; // eax@14
  InvWin *v21; // eax@15
  char *v22; // eax@18
  char *v23; // eax@18
  char *v24; // eax@21
  unsigned int v25; // [sp-8h] [bp-10h]@4
  void *pkInventoryWin; // [sp+4h] [bp-4h]@1

  v5 = this;
  v6 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  pkInventoryWin = v6;
  if ( v6 )
  {
    if ( uiSlotIndex < 0xC0 )
    {
      v7 = (ItemIcon *)*((_DWORD *)v6 + uiSlotIndex + 87);
      if ( v7 )
      {
        v25 = v4;
        v8 = ItemIcon::GetItem(v7);
        v9 = v8;
        if ( v8 )
        {
          ItemIcon::SetItem(&v5->m_apkSlotWin[0]->baseclass_0, v8, 1);
          v5->m_apkSlotWin[0]->m_bLock = 0;
          v5->m_apkSlotWin[0]->m_uiSenderInvIndex = uiSlotIndex;
          v10 = v5->m_apkSlotWin[0];
          v11 = v10->m_pkSender;
          if ( v11 )
          {
            v12 = v10->m_uiSenderInvIndex;
            if ( v12 < 0xC0 )
            {
              v13 = (InvWin *)LODWORD(v11[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v12 + 2]);
              if ( v13 )
                InvWin::SetLock(v13, 1);
            }
          }
          v14 = (int)v9->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v9, v25);
          v15 = v5->m_pkMoverNameWin[0];
          if ( v14 )
          {
            v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            fs("(+%d)%s");
            v15 = v5->m_pkMoverNameWin[0];
            v17 = v16[118].__vecDelDtor;
          }
          else
          {
            v17 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
          }
          ((void (__thiscall *)(_DWORD))v17)(v15);
          v18 = 0;
          if ( bRare )
          {
            if ( !bUpgrade )
            {
              v19 = TextData3::Get(0x8C8B5BCAu);
              v18 = fs(v19);
              v20 = v5->m_uiSlotItemInvNum[0];
              if ( v20 >= 0xC0 || (v21 = (InvWin *)*((_DWORD *)pkInventoryWin + v20 + 87)) == 0 )
                return;
              InvWin::SetLock(v21, 0);
              v5->m_uiSlotItemInvNum[0] = 255;
            }
          }
          else
          {
            if ( bUpgrade )
            {
              v22 = TextData3::Get(0xF3B4B5BEu);
              v23 = fs(v22);
            }
            else
            {
              v23 = TextData3::Get(0x2D3C166Du);
            }
            v18 = v23;
          }
          GameFrameWork::AddSysMsg((GameFrameWork *)v5->baseclass_0.m_pkFrameWork, v18);
          v24 = (char *)&v5->m_kSuccessSound;
          if ( v5->m_kSuccessSound.baseclass_0._Myres >= 0x10 )
            v24 = *(char **)v24;
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v24);
        }
      }
    }
  }
}
// 42C4E0: could not find valid save-restore pair for edi

//----- (0042C690) --------------------------------------------------------
void __thiscall MoverUpgradeWin::OnSlotLClick(MoverUpgradeWin *this, unsigned int uiSlotIndex)
{
  MoverUpgradeWin *v2; // esi@1
  SlotWin *v3; // edi@2
  Item *v4; // eax@7
  unsigned int v5; // ecx@8

  v2 = this;
  if ( uiSlotIndex )
  {
    if ( uiSlotIndex == 1 )
    {
      v3 = this->m_apkSlotWin[1];
      ((void (__stdcall *)(_DWORD))this->m_pkMoverNameWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E0E6);
    }
    else
    {
      v3 = (SlotWin *)uiSlotIndex;
    }
  }
  else
  {
    v3 = this->m_apkSlotWin[0];
    ((void (__stdcall *)(_DWORD))this->m_pkMoverNameWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E0CF);
  }
  if ( v3 )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_kDropContents.m_eSenderType = v3->m_uiSenderType;
      v2->m_kDropContents.m_eType = 0;
      v5 = v3->m_uiSenderInvIndex;
      v2->m_kDropContents.m_apvParam[0] = v4;
      v2->m_kDropContents.m_uiSenderIndex = v5;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
      v2->m_kDrop.m_pkSender = v3->m_pkSender;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      SlotWin::ReSetSlot(v3);
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0042C760) --------------------------------------------------------
bool __thiscall MoverUpgradeWin::DropItemSlot(MoverUpgradeWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop)
{
  int v3; // ebx@0
  int v4; // edi@0
  void *v5; // eax@1
  MoverUpgradeWin *v6; // esi@1
  int v8; // ecx@3
  int v9; // ST08_4@4
  int v10; // ebx@4
  int v11; // eax@4
  SlotWin *v12; // edi@5
  PgWinText *v13; // ecx@5
  NiRefObjectVtbl *v14; // ST18_4@6
  char *v15; // eax@6
  NiRefObjectVtbl *v16; // eax@6
  NiRefObjectVtbl *v17; // ST18_4@9
  char *v18; // eax@9
  SlotWin *v19; // eax@12
  char *v20; // [sp-4h] [bp-14h]@5
  Item *pItem; // [sp+4h] [bp-Ch]@3
  void *pkContents; // [sp+8h] [bp-8h]@1

  v5 = pkDrop->m_pkContents;
  v6 = this;
  pkContents = v5;
  if ( !v5 || (v8 = *((_DWORD *)v5 + 5), (pItem = (Item *)v8) == 0) )
    return 0;
  v9 = v3;
  v10 = *(_DWORD *)(v8 + 112) + 34;
  v11 = (*(int (__stdcall **)(int, int))(*(_DWORD *)v8 + 40))(v4, v9);
  if ( uiReceiverInvIndex )
  {
    if ( uiReceiverInvIndex != 1 )
      return 0;
    v12 = v6->m_apkSlotWin[1];
    v13 = v6->m_pkMoverNameWin[1];
    v20 = (char *)v10;
    if ( v11 )
    {
      v17 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v18 = fs("(+%d)%s");
      v13 = v6->m_pkMoverNameWin[1];
      v20 = v18;
      v16 = v17;
      goto LABEL_11;
    }
  }
  else
  {
    v12 = v6->m_apkSlotWin[0];
    v13 = v6->m_pkMoverNameWin[0];
    v20 = (char *)v10;
    if ( v11 )
    {
      v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v15 = fs("(+%d)%s");
      v13 = v6->m_pkMoverNameWin[0];
      v20 = v15;
      v16 = v14;
      goto LABEL_11;
    }
  }
  v16 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
LABEL_11:
  v16[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v20);
  if ( !v12 )
    return 0;
  v19 = MoverUpgradeWin::GetInsertedOldSlot(v6, uiReceiverInvIndex);
  if ( v19 )
    SlotWin::ReSetSlot(v19);
  SlotWin::ReSetSlot(v12);
  v12->m_uiSenderType = *((_DWORD *)pkContents + 2);
  v12->m_uiSenderInvIndex = *((_DWORD *)pkContents + 3);
  v12->m_pkSender = pkDrop->m_pkSender;
  SlotWin::SetSenderInvSlotLock(v12, 1);
  ItemIcon::SetItem(&v12->baseclass_0, pItem, 1);
  return 1;
}
// 42C760: could not find valid save-restore pair for ebx

//----- (0042C880) --------------------------------------------------------
void __thiscall MoverUpgradeWin::ResetAllData(MoverUpgradeWin *this)
{
  MoverUpgradeWin *v1; // esi@1

  v1 = this;
  SlotWin::ReSetSlot(this->m_apkSlotWin[0]);
  SlotWin::ReSetSlot(v1->m_apkSlotWin[1]);
  ((void (__stdcall *)(_DWORD))v1->m_pkMoverNameWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E0E7);
  ((void (__stdcall *)(_DWORD))v1->m_pkMoverNameWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E0EE);
  v1->m_uiSlotItemInvNum[0] = 255;
  v1->m_uiSlotItemInvNum[1] = 255;
}

//----- (0042C8E0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::ResetSubSlot(MoverUpgradeWin *this)
{
  MoverUpgradeWin *v1; // esi@1

  v1 = this;
  SlotWin::ReSetSlot(this->m_apkSlotWin[1]);
  ((void (__stdcall *)(_DWORD))v1->m_pkMoverNameWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E0EF);
  v1->m_uiSlotItemInvNum[1] = 255;
}

//----- (0042C910) --------------------------------------------------------
bool __thiscall SlotWin::EatDropInstance(SlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  SlotWin *v4; // esi@1
  PgFrameWork *v6; // esi@5
  char *v7; // eax@5
  void *v8; // eax@6
  int v9; // eax@8
  GameFrameWork *v10; // esi@10
  char *v11; // eax@10
  PgWin *v12; // eax@13

  v4 = this;
  if ( this->m_bLock )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( !*pkDrop )
    return 0;
  if ( g_pkMainChar->m_byMode == 6 )
  {
    v6 = this->m_pkFrameWork;
    v7 = TextData3::Get(0xE2CEEF05u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v7);
    return 0;
  }
  v8 = (*pkDrop)->m_pkContents;
  if ( *((_DWORD *)v8 + 2) || *((_DWORD *)v8 + 4) || (v9 = *((_DWORD *)v8 + 5)) == 0 )
  {
LABEL_11:
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9) != 23 )
  {
    v10 = (GameFrameWork *)v4->m_pkFrameWork;
    v11 = TextData3::Get(0x442A727Eu);
    GameFrameWork::AddSysMsg(v10, v11);
    goto LABEL_11;
  }
  v12 = PgWin::GetParentWin(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  return MoverUpgradeWin::DropItemSlot((MoverUpgradeWin *)v12, v4->m_uiInvIndex, *pkDrop);
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (0042C9E0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::MoverUpgradeWin(MoverUpgradeWin *this)
{
  MoverUpgradeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoverUpgradeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoverUpgradeWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_pAttachEffect.m_pObject = 0;
  v1->m_kSuccessSound.baseclass_0._Mysize = 0;
  v1->m_kSuccessSound.baseclass_0._Myres = 15;
  v1->m_kSuccessSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_pkMoverNameWin[0] = 0;
  v1->m_apkSlotWin[0] = 0;
  v1->m_pkMoverNameWin[1] = 0;
  v1->m_apkSlotWin[1] = 0;
  v1->m_uiSlotItemInvNum[0] = 255;
  v1->m_uiSlotItemInvNum[1] = 255;
  v1->m_acBeforeMoverName = 0;
  v1->m_pkMsgBox = 0;
  v1->m_apkEffect = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97E4C4: using guessed type int (__stdcall *MoverUpgradeWin___vftable_)(int uiFlags);
// 97E4E4: using guessed type int (__thiscall *MoverUpgradeWin___vftable_)(void *p, char);

//----- (0042CA90) --------------------------------------------------------
void __thiscall MoverUpgradeWin::_MoverUpgradeWin(MoverUpgradeWin *this)
{
  MoverUpgradeWin *v1; // esi@1
  SpEffect *v2; // edi@1
  NiNode *v3; // ebx@2
  NiNode *v4; // edi@9

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoverUpgradeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoverUpgradeWin::_vftable_;
  v2 = this->m_apkEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
    v1->m_apkEffect = 0;
  }
  if ( v1->m_kSuccessSound.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_kSuccessSound.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_kSuccessSound.baseclass_0._Myres = 15;
  v1->m_kSuccessSound.baseclass_0._Mysize = 0;
  v1->m_kSuccessSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = v1->m_pAttachEffect.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97E4C4: using guessed type int (__stdcall *MoverUpgradeWin___vftable_)(int uiFlags);
// 97E4E4: using guessed type int (__thiscall *MoverUpgradeWin___vftable_)(void *p, char);

//----- (0042CBD0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::OnClose(MoverUpgradeWin *this)
{
  MoverUpgradeWin *v1; // esi@1
  MsgBox *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkMsgBox;
  if ( v2 )
  {
    MsgBox::Close(v2);
    v1->m_pkMsgBox = 0;
  }
  SpEffect::End(v1->m_apkEffect, v1->m_pAttachEffect.m_pObject);
  SlotWin::ReSetSlot(v1->m_apkSlotWin[0]);
  SlotWin::ReSetSlot(v1->m_apkSlotWin[1]);
  ((void (__stdcall *)(_DWORD))v1->m_pkMoverNameWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E0E7);
  ((void (__stdcall *)(_DWORD))v1->m_pkMoverNameWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E0EE);
  v1->m_uiSlotItemInvNum[0] = 255;
  v1->m_uiSlotItemInvNum[1] = 255;
}

//----- (0042CC60) --------------------------------------------------------
SlotWin *__cdecl SlotWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  SlotWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x1DCu);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    SlotWin::SlotWin((SlotWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *, PgFrameWork *))(*(_DWORD *)v7 + 616))(
                          v7,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (SlotWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (0042CDA0) --------------------------------------------------------
MoverUpgradeWin *__cdecl MoverUpgradeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MoverUpgradeWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1F8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MoverUpgradeWin::MoverUpgradeWin((MoverUpgradeWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MoverUpgradeWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0042CED0) --------------------------------------------------------
bool __thiscall MoverUpgradeWin::Create(MoverUpgradeWin *this, PgFrameWork *pkFrameWork)
{
  MoverUpgradeWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool v7; // zf@7
  int v9; // edi@11
  int v10; // ebx@11
  NiSourceTexture *v11; // eax@11
  PgSprData *v12; // eax@14
  void *v13; // eax@14
  PgSprData *v14; // eax@14
  D3DXCOLOR v15; // ST34_16@14
  char *v16; // eax@14
  D3DXCOLOR v17; // ST34_16@14
  char *v18; // eax@14
  D3DXCOLOR v19; // ST34_16@14
  char *v20; // eax@14
  PgSprData *v21; // eax@14
  PgWinSpr *v22; // eax@14
  PgWin *v23; // edi@14
  char *v24; // eax@14
  int v25; // edi@14
  SlotWin *v26; // eax@14
  PgSprData *v27; // eax@14
  PgWinSpr *v28; // eax@14
  PgWin *v29; // edi@14
  char *v30; // eax@14
  SlotWin *v31; // eax@14
  D3DXCOLOR v32; // ST2C_16@14
  D3DXCOLOR v33; // ST2C_16@14
  D3DXCOLOR v34; // ST2C_16@14
  PgWinText *v35; // eax@14
  PgWinText *v36; // edi@14
  NiRefObjectVtbl *v37; // ebx@14
  char *v38; // eax@14
  PgWinSpr *v39; // eax@14
  PgWinSpr *v40; // edi@14
  char *v41; // eax@21
  void *v42; // edi@25
  NiObject *v43; // eax@26
  NiRefObjectVtbl *v44; // eax@29
  NiNode *v45; // esi@31
  NiNode *v46; // esi@34
  const char *v47; // [sp+38h] [bp-64h]@12
  int *v48; // [sp+3Ch] [bp-60h]@12
  int *v49; // [sp+40h] [bp-5Ch]@12
  NiSourceTexture *v50; // [sp+44h] [bp-58h]@12
  UIUtil ui; // [sp+58h] [bp-44h]@11
  float v52; // [sp+6Ch] [bp-30h]@29
  float v53; // [sp+70h] [bp-2Ch]@29
  float v54; // [sp+74h] [bp-28h]@29
  int iOffY; // [sp+78h] [bp-24h]@11
  NiSourceTexture *pkBtn; // [sp+7Ch] [bp-20h]@14
  NiPointer<NiNode> pkNiNodePtr; // [sp+80h] [bp-1Ch]@19
  NiPointer<NiNode> spNode; // [sp+84h] [bp-18h]@1
  int uiLeft; // [sp+88h] [bp-14h]@4
  int uiTop; // [sp+8Ch] [bp-10h]@4
  int v61; // [sp+98h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v61 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MoverUpgrade.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "MoverUpgradeWin", 0) )
  {
    v6 = spNode.m_pObject;
    v61 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
LABEL_8:
    if ( !v7 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    return 0;
  }
  v9 = uiTop;
  v10 = uiLeft;
  iOffY = uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v61) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v10, v9);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v50 = v11;
    v49 = &uiTop;
    v48 = &uiLeft;
    v47 = "Theme";
  }
  else
  {
    v50 = 0;
    v49 = &uiTop;
    v48 = &uiLeft;
    v47 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v47, v48, v49, v50);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = MenuTexMgr::GetTexture(0x1Cu);
  pkBtn = (NiSourceTexture *)v13;
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, (NiSourceTexture *)v13);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  *(_QWORD *)&v15.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v15.b = qword_A746E8;
  v16 = TextData3::Get(0x83908ECDu);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v16, COERCE_D3DXCOLOR(v15.r), 5u);
  UIUtil::CreateBtn(&ui, 0xEu, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, 0);
  UIUtil::CreateBtn(&ui, 0xDu, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  pkBtn = (NiSourceTexture *)UIUtil::CreateBtn(&ui, 0xCu, "OkNor", "OkOver", "OkClick", 0, pkBtn);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v18 = TextData3::Get(0xC555975u);
  UIUtil::CreateAttachedText(&ui, (PgWin *)pkBtn, v18, COERCE_D3DXCOLOR(v17.r), 5u);
  pkBtn = (NiSourceTexture *)UIUtil::CreateBtn(&ui, 0xDu, "CancelNor", "CancelOver", "CancelClick", 0, 0);
  *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v20 = TextData::Get(0x97A4A8DFu);
  UIUtil::CreateAttachedText(&ui, (PgWin *)pkBtn, v20, COERCE_D3DXCOLOR(v19.r), 5u);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MainSlot", &uiLeft, &uiTop, 0);
  v22 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v23 = (PgWin *)v22;
  v22->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v24 = TextData3::Get(0x957066D1u);
  PgWin::SetToolTipWinText(v23, v24);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v23, 1u);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v23, 1u);
  v25 = iOffY;
  v26 = SlotWin::CreateWin(
          uiLeft - v10 + 1,
          uiTop - iOffY + 1,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          pkFrameWork);
  v2->m_apkSlotWin[0] = v26;
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    1u);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
  v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
  IconWin::ShowFocus(&v2->m_apkSlotWin[0]->baseclass_0.baseclass_0, 1);
  SlotWin::ReSetSlot(v2->m_apkSlotWin[0]);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubSlot", &uiLeft, &uiTop, 0);
  v28 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v25, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v29 = (PgWin *)v28;
  v28->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v30 = TextData3::Get(0xAB6C7377u);
  PgWin::SetToolTipWinText(v29, v30);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v29, 1u);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v29, 1u);
  v31 = SlotWin::CreateWin(
          uiLeft - v10 + 1,
          uiTop - iOffY + 1,
          1u,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          pkFrameWork);
  v2->m_apkSlotWin[1] = v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    1u);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
  v2->m_apkSlotWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
  IconWin::ShowFocus(&v2->m_apkSlotWin[1]->baseclass_0.baseclass_0, 1);
  SlotWin::ReSetSlot(v2->m_apkSlotWin[1]);
  *(_QWORD *)&v32.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v32.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkMoverNameWin[0] = UIUtil::CreateText(&ui, "MainText", &byte_97E0C6, 0, COERCE_D3DXCOLOR(v32.r), 5u, 0, 1);
  *(_QWORD *)&v33.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v33.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkMoverNameWin[1] = UIUtil::CreateText(&ui, "SubText", &byte_97E0C7, 0, COERCE_D3DXCOLOR(v33.r), 4u, 0, 1);
  *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v35 = UIUtil::CreateText(&ui, "Text01", &byte_97E0CE, 0, COERCE_D3DXCOLOR(v34.r), 0, 0, 0);
  v36 = v35;
  v37 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v38 = TextData3::Get(0xCCDDB835u);
  ((void (__thiscall *)(PgWinText *, char *, _DWORD))v37[120].__vecDelDtor)(v36, v38, 0);
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v36,
    0);
  v39 = PgWinSpr::CreateWin(0, 0, 1u, 1u, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v40 = v39;
  pkFrameWork = (PgFrameWork *)v39;
  if ( v39 )
    InterlockedIncrement((volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  LOBYTE(v61) = 2;
  NiPointer<NiActorManager>::operator_(
    (NiPointer<NiPixelData> *)&v2->m_pAttachEffect,
    (NiPointer<NiPixelData> *)&pkFrameWork);
  LOBYTE(v61) = 1;
  if ( v40
    && !InterlockedDecrement((volatile LONG *)&v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v40,
      1u);
  pkNiNodePtr.m_pObject = 0;
  LOBYTE(v61) = 3;
  if ( !Folder::m_bInit )
    Folder::Init();
  v41 = Folder::Merge(&Folder::m_acEffect, "MoverUpgrade_Start.nif");
  PgUtil::LoadNodeNifFile(v41, &pkNiNodePtr, 0);
  if ( !pkNiNodePtr.m_pObject )
  {
    LOBYTE(v61) = 0;
    UIUtil::_UIUtil(&ui);
    v6 = spNode.m_pObject;
    v61 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_8;
  }
  v42 = operator new(0x44u);
  pkFrameWork = (PgFrameWork *)v42;
  LOBYTE(v61) = 4;
  if ( v42 )
  {
    v43 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    SpEffect::SpEffect((SpEffect *)v42, (NiNode *)v43);
  }
  else
  {
    v43 = 0;
  }
  LOBYTE(v61) = 3;
  v2->m_apkEffect = (SpEffect *)v43;
  if ( v43 )
  {
    v44 = v43->baseclass_0.vfptr;
    v52 = 0.0;
    v53 = 0.0;
    *(float *)&v44[22].__vecDelDtor = 0.0;
    v54 = 1000.0;
    *(float *)&v44[23].__vecDelDtor = 0.0;
    *(float *)&v44[24].__vecDelDtor = 1000.0;
    v2->m_apkEffect->m_bClamp = 1;
  }
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v2->m_kSuccessSound,
    "MoverUpgrade_Start",
    0x12u);
  ((void (__thiscall *)(MoverUpgradeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.30000001,
    0.5);
  LOBYTE(v61) = 1;
  if ( pkNiNodePtr.m_pObject )
  {
    v45 = pkNiNodePtr.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v45 )
        v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
    }
  }
  LOBYTE(v61) = 0;
  UIUtil::_UIUtil(&ui);
  v46 = spNode.m_pObject;
  v61 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v46 )
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0042D6D0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::OnApply(MoverUpgradeWin *this)
{
  MoverUpgradeWin *v1; // esi@1
  PgFrameWork *v2; // esi@2
  char *v3; // eax@2
  Item *v4; // eax@3
  Item *v5; // edi@3
  ItemIcon *v6; // ecx@4
  Item *v7; // eax@4
  const char *v8; // esi@5
  const char *v9; // edi@5
  MoverMain *v10; // ebx@5
  MoverMain *v11; // eax@5
  MoverHG *v12; // esi@9
  MoverHG *v13; // eax@9
  MoverHG *v14; // edi@9
  char *v15; // eax@13
  char *v16; // eax@13
  MsgBox *v17; // eax@13
  GameFrameWork *v18; // esi@15
  char *v19; // eax@17
  GameFrameWork *v20; // esi@18
  char *v21; // eax@18
  unsigned int v22; // [sp-Ch] [bp-14h]@15
  MoverUpgradeWin *v23; // [sp+4h] [bp-4h]@1

  v1 = this;
  v23 = this;
  if ( g_pkMainChar->m_byMode == 6 )
  {
    v2 = this->baseclass_0.m_pkFrameWork;
    v3 = TextData3::Get(0xE2CEEF05u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v2, v3);
    return;
  }
  v4 = ItemIcon::GetItem(&this->m_apkSlotWin[0]->baseclass_0);
  v5 = v4;
  if ( !v4
    || (v6 = (ItemIcon *)v1->m_apkSlotWin[1],
        v1->m_uiSlotItemInvNum[0] = LOBYTE(v1->m_apkSlotWin[0]->m_uiSenderInvIndex),
        v1->m_acBeforeMoverName = v4->m_pkInfo->Name,
        (v7 = ItemIcon::GetItem(v6)) == 0) )
  {
    v20 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
    v21 = TextData3::Get(0x846E64D5u);
    GameFrameWork::AddSysMsg(v20, v21);
    return;
  }
  v1->m_uiSlotItemInvNum[1] = LOBYTE(v1->m_apkSlotWin[1]->m_uiSenderInvIndex);
  v8 = v5->m_pkInfo->InxName;
  v9 = v7->m_pkInfo->InxName;
  v10 = MoverMainTab::GetByMoverIdx(v8);
  v11 = MoverMainTab::GetByMoverIdx(v9);
  if ( v10 && v11 )
  {
    if ( v10->DurationHour || v11->DurationHour )
    {
      v18 = (GameFrameWork *)v23->baseclass_0.m_pkFrameWork;
      v22 = -390197726;
      goto LABEL_17;
    }
    v12 = MoverHGTab::GetByMoverIdx(v8);
    v13 = MoverHGTab::GetByMoverIdx(v9);
    v14 = v13;
    if ( v12 && v13 )
    {
      if ( !strcmp(v12->FeedType, "-") && !strcmp(v14->FeedType, "-") )
      {
        v15 = TextData3::Get(0x509DA7D8u);
        v16 = fs(v15);
        v17 = MsgBox::Modal(MSGBOX_OKCANCEL, v16);
        v23->m_pkMsgBox = v17;
        ((void (__stdcall *)(_DWORD))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        return;
      }
      v18 = (GameFrameWork *)v23->baseclass_0.m_pkFrameWork;
      v22 = -703068376;
LABEL_17:
      v19 = TextData3::Get(v22);
      GameFrameWork::AddSysMsg(v18, v19);
      return;
    }
  }
}

//----- (0042D8C0) --------------------------------------------------------
void __thiscall MoverUpgradeWin::OnCommand(MoverUpgradeWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@7

  switch ( wParam )
  {
    case 0xBu:
      MoverUpgradeWin::OnSlotLClick(this, lParam);
      break;
    case 0xCu:
      MoverUpgradeWin::OnApply(this);
      break;
    case 0xDu:
      if ( this->m_pkMsgBox )
        this->m_pkMsgBox = 0;
      GameFrameWork::CloseMoverUpgradeWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
      break;
    case 0xEu:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "MoverUpgrade");
      break;
    default:
      return;
  }
}

//----- (0042D950) --------------------------------------------------------
Item *__thiscall InventoryWin::GetItemInInv(InventoryWin *this, unsigned int uiIndex)
{
  ItemIcon *v2; // ecx@2
  Item *result; // eax@3

  if ( uiIndex < 0xC0 && (v2 = (ItemIcon *)this->m_apkInvWin[uiIndex]) != 0 )
    result = ItemIcon::GetItem(v2);
  else
    result = 0;
  return result;
}

//----- (0042D980) --------------------------------------------------------
void *__thiscall SlotWin::_scalar_deleting_destructor_(SlotWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlotWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97E234: using guessed type int (__stdcall *SlotWin___vftable_)(int uiFlags);
// 97E254: using guessed type int (__thiscall *SlotWin___vftable_)(void *p, char);

//----- (0042D9C0) --------------------------------------------------------
void *__thiscall MoverUpgradeWin::_scalar_deleting_destructor_(MoverUpgradeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MoverUpgradeWin::_MoverUpgradeWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0042D9F0) --------------------------------------------------------
MoverMain *__cdecl MoverMainTab::GetByMoverIdx(const char *pcMoverIdx)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  void *v3; // eax@5
  const char *v4; // ecx@6
  int v5; // eax@6
  int v6; // esi@6
  char v7; // dl@7
  unsigned int v8; // eax@8
  unsigned int v9; // ebx@8
  unsigned int v10; // esi@8
  unsigned int v11; // ecx@8
  unsigned int v12; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@10
  int v14; // eax@12
  bool v15; // zf@12
  signed int v16; // eax@14
  bool v17; // bl@17
  MoverMain *pkMoverMain; // [sp+0h] [bp-3Ch]@5
  unsigned int i; // [sp+8h] [bp-34h]@4
  unsigned int v21; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v23; // [sp+2Ch] [bp-10h]@1
  int v24; // [sp+38h] [bp-4h]@17
  int v25; // [sp+3Ch] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v21 = *(_DWORD *)(v1 + 40);
  else
    v21 = 0;
  i = 0;
  if ( v21 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 4), v2);
    pkMoverMain = (MoverMain *)v3;
    if ( v3 )
      break;
LABEL_21:
    ++v2;
    i = v2;
    if ( v2 >= v21 )
      return 0;
  }
  v4 = (char *)v3 + 4;
  v5 = (int)((char *)v3 + 4);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = v5 + 1;
  do
    v7 = *(_BYTE *)v5++;
  while ( v7 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, v4, v5 - v6);
  v8 = strlen(pcMoverIdx);
  v9 = this.baseclass_0._Mysize;
  v10 = v8;
  v11 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v8 )
    v11 = v8;
  v12 = this.baseclass_0._Myres;
  v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v13 = &this;
  v14 = std::char_traits<char>::compare(v13->baseclass_0.___u0.baseclass_0.dummy, pcMoverIdx, v11);
  v15 = v14 == 0;
  if ( !v14 )
  {
    if ( v9 >= v10 )
      v16 = v9 != v10;
    else
      v16 = -1;
    v15 = v16 == 0;
  }
  v17 = v15;
  v24 = -1;
  if ( v12 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v17 )
  {
    v2 = i;
    goto LABEL_21;
  }
  return pkMoverMain;
}
// A85C00: using guessed type int __security_cookie;
// A959E4: using guessed type int ITableBase_MoverMain_MoverMainTab___ms_pkTable;

//----- (0042DB50) --------------------------------------------------------
MoverHG *__cdecl MoverHGTab::GetByMoverIdx(const char *pcMoverIdx)
{
  int v1; // eax@1
  unsigned int v2; // edi@1
  void *v3; // eax@5
  const char *v4; // esi@5
  int v5; // edx@6
  char v6; // cl@7
  unsigned int v7; // eax@8
  unsigned int v8; // ebx@8
  unsigned int v9; // esi@8
  unsigned int v10; // ecx@8
  unsigned int v11; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@10
  int v13; // eax@12
  bool v14; // zf@12
  signed int v15; // eax@14
  bool v16; // bl@17
  MoverHG *pkMoverHG; // [sp+0h] [bp-3Ch]@5
  unsigned int i; // [sp+8h] [bp-34h]@4
  unsigned int v20; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v22; // [sp+2Ch] [bp-10h]@1
  int v23; // [sp+38h] [bp-4h]@17
  int v24; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MoverHG_MoverHGTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v20 = *(_DWORD *)(v1 + 40);
  else
    v20 = 0;
  i = 0;
  if ( v20 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverHG_MoverHGTab>::ms_pkTable + 4), v2);
    v4 = (const char *)v3;
    pkMoverHG = (MoverHG *)v3;
    if ( v3 )
      break;
LABEL_21:
    ++v2;
    i = v2;
    if ( v2 >= v20 )
      return 0;
  }
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v5 = (int)((char *)v3 + 1);
  do
  {
    v6 = *(_BYTE *)v3;
    v3 = (char *)v3 + 1;
  }
  while ( v6 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this,
    v4,
    (unsigned int)((char *)v3 - v5));
  v7 = strlen(pcMoverIdx);
  v8 = this.baseclass_0._Mysize;
  v9 = v7;
  v10 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v7 )
    v10 = v7;
  v11 = this.baseclass_0._Myres;
  v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v12 = &this;
  v13 = std::char_traits<char>::compare(v12->baseclass_0.___u0.baseclass_0.dummy, pcMoverIdx, v10);
  v14 = v13 == 0;
  if ( !v13 )
  {
    if ( v8 >= v9 )
      v15 = v8 != v9;
    else
      v15 = -1;
    v14 = v15 == 0;
  }
  v16 = v14;
  v23 = -1;
  if ( v11 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v16 )
  {
    v2 = i;
    goto LABEL_21;
  }
  return pkMoverHG;
}
// A85C00: using guessed type int __security_cookie;
// A959E8: using guessed type int ITableBase_MoverHG_MoverHGTab___ms_pkTable;

//----- (0042DCA0) --------------------------------------------------------
void __thiscall PgTQueue<CMsg__>::Realloc(PgTQueue<CMsg *> *this, unsigned int uiNewSize)
{
  PgTQueue<CMsg *> *v2; // esi@1
  void *v3; // eax@1
  unsigned int v4; // ecx@1
  void *v5; // edi@1
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@4
  void *v8; // ST00_4@8

  v2 = this;
  v3 = operator new__(4 * uiNewSize);
  v4 = v2->m_uiHead;
  v5 = v3;
  v6 = 0;
  if ( v4 < v2->m_uiTail )
  {
    do
      *((_DWORD *)v5 + v6++) = v2->m_pBase[v4++];
    while ( v4 < v2->m_uiTail );
  }
  else
  {
    for ( ; v4 < v2->m_uiAlloced; ++v6 )
      *((_DWORD *)v5 + v6) = v2->m_pBase[v4++];
    v7 = 0;
    if ( v2->m_uiTail )
    {
      do
        *((_DWORD *)v5 + v6++) = v2->m_pBase[v7++];
      while ( v7 < v2->m_uiTail );
    }
  }
  v2->m_uiTail = v6;
  v8 = v2->m_pBase;
  v2->m_uiHead = 0;
  v2->m_uiAlloced = uiNewSize;
  operator delete__(v8);
  v2->m_pBase = (CMsg **)v5;
}

//----- (0042DD40) --------------------------------------------------------
bool __thiscall CMsgMgr::RegisterMsgEater(CMsgMgr *this, void *kMsgID, CMsgEater *pkMsgEater)
{
  void *v3; // edi@1
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v4; // esi@1
  bool result; // al@2

  v3 = kMsgID;
  v4 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMsgMap;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMsgMap,
    (unsigned int)kMsgID,
    (NiVBSet **)&kMsgID);
  if ( kMsgID )
  {
    result = 0;
  }
  else
  {
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
      v4,
      (unsigned int)v3,
      (NiVBSet *)pkMsgEater);
    result = 1;
  }
  return result;
}

//----- (0042DD80) --------------------------------------------------------
void __thiscall CMsgMgr::_CMsgMgr(CMsgMgr *this)
{
  CMsgMgr *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = this;
  v2 = this->m_kMsgQ.m_pBase;
  this->vfptr = (CMsgMgrVtbl *)&CMsgMgr::_vftable_;
  operator delete__(v2);
  v1->m_kMsgMap.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTPointerMap<void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMsgMap);
  v1->m_kMsgMap.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMsgMap);
  operator delete__(v1->m_kMsgMap.baseclass_0.m_ppkHashTable);
}
// 97E708: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__void __CMsgEater _____vftable_)(void *p, char);
// 97E728: using guessed type int (__thiscall *NiTPointerMap_void __CMsgEater _____vftable_)(void *p, char);
// 97E748: using guessed type int (__thiscall *CMsgMgr___vftable_)(void *p, char);

//----- (0042DE10) --------------------------------------------------------
void __thiscall CMsgMgr::PostMsg(CMsgMgr *this, CMsg *pkMsg)
{
  if ( pkMsg )
    PgTQueue<CMsg__>::Add(&this->m_kMsgQ, pkMsg);
}

//----- (0042DE30) --------------------------------------------------------
bool __thiscall CMsgMgr::ProcessMsg(CMsgMgr *this)
{
  CMsgMgr *v1; // edi@1
  unsigned int v2; // edx@1
  int v3; // eax@2
  unsigned int v4; // ecx@3
  unsigned int v5; // eax@8
  CMsg *v6; // ecx@8
  NiTMapItem<void *,CMsgEater *> *v7; // esi@12
  CMsgEater *v8; // ecx@15
  CMsg *v10; // [sp+4h] [bp-10h]@8
  int v11; // [sp+8h] [bp-Ch]@12
  int v12; // [sp+Ch] [bp-8h]@7
  CMsgEater *pkMsgEater; // [sp+10h] [bp-4h]@0

  v1 = this;
  v2 = this->m_kMsgQ.m_uiHead;
  if ( v2 == -1 )
  {
    v3 = 0;
  }
  else
  {
    v4 = this->m_kMsgQ.m_uiTail;
    if ( v2 < v4 )
      v3 = v4 - v2;
    else
      v3 = v4 + v1->m_kMsgQ.m_uiAlloced - v2;
  }
  if ( v3 )
  {
    v12 = v3;
    do
    {
      v5 = v1->m_kMsgQ.m_uiHead;
      v6 = v1->m_kMsgQ.m_pBase[v5++];
      v10 = v6;
      v1->m_kMsgQ.m_uiHead = v5;
      if ( v5 == v1->m_kMsgQ.m_uiAlloced )
        v1->m_kMsgQ.m_uiHead = 0;
      if ( v1->m_kMsgQ.m_uiHead == v1->m_kMsgQ.m_uiTail )
      {
        v1->m_kMsgQ.m_uiHead = -1;
        v1->m_kMsgQ.m_uiTail = 0;
      }
      v11 = ((int (*)(void))v6->baseclass_0.vfptr[2].__vecDelDtor)();
      v7 = v1->m_kMsgMap.baseclass_0.m_ppkHashTable[v1->m_kMsgMap.baseclass_0.vfptr->KeyToHashIndex(
                                                      (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *)&v1->m_kMsgMap,
                                                      (void *)v11)];
      if ( v7 )
      {
        while ( !v1->m_kMsgMap.baseclass_0.vfptr->IsKeysEqual(
                   (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *)&v1->m_kMsgMap,
                   (void *)v11,
                   v7->m_key) )
        {
          v7 = v7->m_pkNext;
          if ( !v7 )
            goto LABEL_15;
        }
        v8 = v7->m_val;
        pkMsgEater = v7->m_val;
      }
      else
      {
LABEL_15:
        v8 = pkMsgEater;
      }
      if ( v8 )
        ((void (__stdcall *)(_DWORD))v8->vfptr->ProcessMsg)(v10);
      --v12;
    }
    while ( v12 );
  }
  return 0;
}

//----- (0042DF10) --------------------------------------------------------
void __thiscall CMsgMgr::Terminate(CMsgMgr *this)
{
  CMsgMgr *v1; // esi@1
  unsigned int v2; // edx@1
  signed int v3; // ebx@1
  int v4; // eax@2
  unsigned int v5; // ecx@3
  unsigned int v6; // ecx@6
  unsigned int v7; // eax@9
  CMsg *v8; // edi@9
  int v9; // [sp+4h] [bp-10h]@7

  v1 = this;
  v2 = this->m_kMsgQ.m_uiHead;
  v3 = -1;
  if ( v2 == -1 )
  {
    v4 = 0;
  }
  else
  {
    v5 = this->m_kMsgQ.m_uiTail;
    if ( v2 < v5 )
      v4 = v5 - v2;
    else
      v4 = v5 + v1->m_kMsgQ.m_uiAlloced - v2;
  }
  v6 = 0;
  if ( v4 )
  {
    v9 = v4;
    while ( 1 )
    {
      v7 = v1->m_kMsgQ.m_uiHead;
      v8 = v1->m_kMsgQ.m_pBase[v7++];
      v1->m_kMsgQ.m_uiHead = v7;
      if ( v7 == v1->m_kMsgQ.m_uiAlloced )
        v1->m_kMsgQ.m_uiHead = v6;
      if ( v1->m_kMsgQ.m_uiHead == v1->m_kMsgQ.m_uiTail )
      {
        v1->m_kMsgQ.m_uiHead = v3;
        v1->m_kMsgQ.m_uiTail = v6;
      }
      if ( v8 != (CMsg *)v6 )
      {
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount);
        if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount) )
          v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
      v3 = -1;
      --v9;
      if ( !v9 )
        break;
      v6 = 0;
    }
  }
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMsgMap);
}

//----- (0042DFE0) --------------------------------------------------------
void __thiscall CMsgMgr::CMsgMgr(CMsgMgr *this)
{
  CMsgMgr *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST0C_4@1

  v1 = this;
  this->vfptr = (CMsgMgrVtbl *)&CMsgMgr::_vftable_;
  this->m_kMsgMap.baseclass_0.m_uiHashSize = 37;
  this->m_kMsgMap.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_;
  *(_DWORD *)&this->m_kMsgMap.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kMsgMap.baseclass_0.m_uiHashSize;
  v1->m_kMsgMap.baseclass_0.m_ppkHashTable = (NiTMapItem<void *,CMsgEater *> **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kMsgMap.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTPointerMap<void___CMsgEater__>::_vftable_;
  v1->m_kMsgQ.m_pBase = (CMsg **)operator new__(4u);
  v1->m_kMsgQ.m_uiAlloced = 1;
  v1->m_kMsgQ.m_uiHead = -1;
  v1->m_kMsgQ.m_uiTail = 0;
}
// 97E708: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__void __CMsgEater _____vftable_)(void *p, char);
// 97E728: using guessed type int (__thiscall *NiTPointerMap_void __CMsgEater _____vftable_)(void *p, char);
// 97E748: using guessed type int (__thiscall *CMsgMgr___vftable_)(void *p, char);

//----- (0042E0B0) --------------------------------------------------------
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *this)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 97E708: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__void __CMsgEater _____vftable_)(void *p, char);

//----- (0042E0D0) --------------------------------------------------------
void __thiscall NiTPointerMap<void___CMsgEater__>::_NiTPointerMap<void___CMsgEater__>(NiTPointerMap<void *,CMsgEater *> *this)
{
  NiTPointerMap<void *,CMsgEater *> *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTPointerMap<void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 97E708: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__void __CMsgEater _____vftable_)(void *p, char);
// 97E728: using guessed type int (__thiscall *NiTPointerMap_void __CMsgEater _____vftable_)(void *p, char);

//----- (0042E140) --------------------------------------------------------
void __thiscall PgTQueue<CMsg__>::Add(PgTQueue<CMsg *> *this, CMsg *element)
{
  PgTQueue<CMsg *> *v2; // esi@1
  unsigned int v3; // eax@1
  CMsg **v4; // eax@2

  v2 = this;
  v3 = this->m_uiHead;
  if ( v3 == -1 )
  {
    v4 = this->m_pBase;
    this->m_uiHead = 0;
    *v4 = element;
    this->m_uiTail = 1;
  }
  else
  {
    if ( v3 == this->m_uiTail )
      PgTQueue<CMsg__>::Realloc(this, 2 * this->m_uiAlloced);
    v2->m_pBase[v2->m_uiTail++] = element;
  }
  if ( v2->m_uiTail == v2->m_uiAlloced )
    v2->m_uiTail = 0;
}

//----- (0042E1A0) --------------------------------------------------------
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vector_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *this, unsigned int a2)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *> *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97E708: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__void __CMsgEater _____vftable_)(void *p, char);

//----- (0042E1E0) --------------------------------------------------------
void *__thiscall NiTPointerMap<void___CMsgEater__>::_scalar_deleting_destructor_(NiTPointerMap<void *,CMsgEater *> *this, unsigned int a2)
{
  NiTPointerMap<void *,CMsgEater *> *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTPointerMap<void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97E708: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__void __CMsgEater _____vftable_)(void *p, char);
// 97E728: using guessed type int (__thiscall *NiTPointerMap_void __CMsgEater _____vftable_)(void *p, char);

//----- (0042E260) --------------------------------------------------------
void *__thiscall CMsgMgr::_scalar_deleting_destructor_(CMsgMgr *this, unsigned int a2)
{
  CMsgMgr *v2; // edi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_kMsgQ.m_pBase;
  this->vfptr = (CMsgMgrVtbl *)&CMsgMgr::_vftable_;
  operator delete__(v3);
  v2->m_kMsgMap.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTPointerMap<void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kMsgMap);
  v2->m_kMsgMap.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,void *,CMsgEater *>Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_void___CMsgEater__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kMsgMap);
  operator delete__(v2->m_kMsgMap.baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97E708: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__void __CMsgEater _____vftable_)(void *p, char);
// 97E728: using guessed type int (__thiscall *NiTPointerMap_void __CMsgEater _____vftable_)(void *p, char);
// 97E748: using guessed type int (__thiscall *CMsgMgr___vftable_)(void *p, char);

//----- (0042E300) --------------------------------------------------------
void __thiscall NifVideo::NifVideo(NifVideo *this)
{
  this->LoadedNif = 0;
}

//----- (0042E320) --------------------------------------------------------
void __thiscall NifVideo::LoadNifVideoSequence(NifVideo *this)
{
  NifVideo *v1; // esi@1
  char *v2; // eax@3

  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acEffect, "Cam.nif");
  if ( PgUtil::LoadNifFile(v2, 0, 1) )
  {
    v1->LoadedNif = 1;
    OutputDebugStringA("LoadNifVideoSequence - loaded nif\n");
  }
  else
  {
    OutputDebugStringA("LoadNifVideoSequence - not able to load nif\n");
  }
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0042E380) --------------------------------------------------------
void __thiscall Oscillation::Oscillation(Oscillation *this)
{
  this->m_fAmplitude = 0.0;
  this->vfptr = (OscillationVtbl *)&Oscillation::_vftable_;
  this->m_fValue = 0.0;
  this->m_fCurrTime = 3.4028235e38;
  this->m_fNextPeakTime = 0.025;
  this->m_fPeriod = 0.1;
  this->m_fDampingMagnitude = 0.5;
  this->m_fPhase = 0.0;
}
// 97E818: using guessed type int (*Oscillation___vftable_)();

//----- (0042E3C0) --------------------------------------------------------
void __thiscall Oscillation::_Oscillation(Oscillation *this)
{
  this->vfptr = (OscillationVtbl *)&Oscillation::_vftable_;
}
// 97E818: using guessed type int (*Oscillation___vftable_)();

//----- (0042E3D0) --------------------------------------------------------
bool __thiscall Oscillation::IsImpacting(Oscillation *this)
{
  return 3.4028235e38 != this->m_fCurrTime;
}

//----- (0042E3F0) --------------------------------------------------------
void __thiscall Oscillation::Impact(Oscillation *this, float fAmplitude, float fStartTime)
{
  this->m_fStartTime = fStartTime;
  this->m_fCurrTime = fStartTime;
  this->m_fTargetAmplitude = 0.0;
  this->m_fAmplitude = fAmplitude;
  this->m_fNextPeakTime = fStartTime + this->m_fPeriod * 0.25;
}

//----- (0042E420) --------------------------------------------------------
void __thiscall Oscillation::Clear(Oscillation *this)
{
  this->m_fTargetAmplitude = 0.0;
  this->m_fAmplitude = 0.0;
  this->m_fValue = 0.0;
  this->m_fCurrTime = 3.4028235e38;
}

//----- (0042E440) --------------------------------------------------------
void __thiscall OscillationEx::OscillationEx(OscillationEx *this)
{
  this->baseclass_0.m_fAmplitude = 0.0;
  this->baseclass_0.vfptr = (OscillationVtbl *)&Oscillation::_vftable_;
  this->baseclass_0.m_fValue = 0.0;
  this->baseclass_0.m_fCurrTime = 3.4028235e38;
  this->baseclass_0.vfptr = (OscillationVtbl *)&OscillationEx::_vftable_;
  this->m_eAxis = 0;
  this->baseclass_0.m_fNextPeakTime = 0.025;
  this->baseclass_0.m_fPeriod = 0.1;
  this->baseclass_0.m_fDampingMagnitude = 0.5;
  this->baseclass_0.m_fPhase = 0.0;
}
// 97E818: using guessed type int (*Oscillation___vftable_)();
// 97E82C: using guessed type int (*OscillationEx___vftable_)();

//----- (0042E490) --------------------------------------------------------
void __thiscall OscillationEx::_OscillationEx(OscillationEx *this)
{
  this->baseclass_0.vfptr = (OscillationVtbl *)&Oscillation::_vftable_;
}
// 97E818: using guessed type int (*Oscillation___vftable_)();

//----- (0042E4A0) --------------------------------------------------------
void __thiscall OscillationEx::Clear(OscillationEx *this)
{
  this->baseclass_0.m_fTargetAmplitude = 0.0;
  this->baseclass_0.m_fAmplitude = 0.0;
  this->baseclass_0.m_fValue = 0.0;
  this->baseclass_0.m_fCurrTime = 3.4028235e38;
  this->m_eAxis = 0;
}

//----- (0042E4C0) --------------------------------------------------------
void __thiscall Oscillation::Update(Oscillation *this, float fTime)
{
  float v2; // ST04_4@2
  double v3; // st7@2
  double v4; // st6@2
  bool v5; // c0@2
  bool v6; // c3@2
  double v7; // st7@2
  float v8; // ST04_4@4
  float fOffset; // [sp+10h] [bp+8h]@2
  float fOffseta; // [sp+10h] [bp+8h]@4

  if ( 3.4028235e38 != this->m_fCurrTime )
  {
    fOffset = fTime - this->m_fCurrTime;
    v2 = fOffset + this->m_fCurrTime;
    v3 = this->m_fCurrTime;
    v4 = this->m_fNextPeakTime;
    v5 = v4 < v3;
    v6 = v4 == v3;
    v7 = v2;
    if ( !(v5 | v6) )
    {
      if ( this->m_fNextPeakTime < v7 )
      {
        fOffseta = v7 - this->m_fNextPeakTime;
        this->m_fStartTime = this->m_fStartTime + fOffseta;
        v8 = fOffseta + this->m_fNextPeakTime;
        this->m_fNextPeakTime = v8 + this->m_fPeriod * 0.5;
      }
    }
    this->m_fCurrTime = v7;
    JUMPOUT(*(int *)loc_42E561);
  }
}
// 42E561: using guessed type int __stdcall(float fOffset);

//----- (0042E5C0) --------------------------------------------------------
void __thiscall OscillationEx::ImPact(OscillationEx *this, float fAmplitude, float fPeriod, float fDamp, EffectAxisEnum eValue, float fStartTime)
{
  this->baseclass_0.m_fStartTime = fStartTime;
  this->m_eAxis = eValue;
  this->baseclass_0.m_fCurrTime = fStartTime;
  this->baseclass_0.m_fTargetAmplitude = 0.0;
  this->baseclass_0.m_fAmplitude = fAmplitude;
  this->baseclass_0.m_fNextPeakTime = fStartTime + this->baseclass_0.m_fPeriod * 0.25;
  this->baseclass_0.m_fPeriod = fPeriod;
  this->baseclass_0.m_fDampingMagnitude = fDamp;
}

//----- (0042E600) --------------------------------------------------------
void __thiscall OscillationEx::Impact(OscillationEx *this, EffectViewInfo *ImpactInfo, float fStartTime)
{
  EffectViewInfo *v3; // eax@1
  float ImpactInfoa; // [sp+8h] [bp+8h]@2

  v3 = ImpactInfo;
  if ( ImpactInfo )
  {
    ImpactInfoa = (double)ImpactInfo->Amplitude / 100.0;
    this->baseclass_0.m_fStartTime = fStartTime;
    this->baseclass_0.m_fCurrTime = fStartTime;
    this->baseclass_0.m_fTargetAmplitude = 0.0;
    this->baseclass_0.m_fAmplitude = ImpactInfoa;
    this->baseclass_0.m_fNextPeakTime = fStartTime + this->baseclass_0.m_fPeriod * 0.25;
    this->baseclass_0.m_fPeriod = (double)v3->Period / 100.0;
    this->baseclass_0.m_fDampingMagnitude = (double)v3->Damp / 100.0;
    this->m_eAxis = v3->Axis;
  }
}

//----- (0042E680) --------------------------------------------------------
void __thiscall OscillationEx::Impact(OscillationEx *this, unsigned __int16 EffectViewInfoID, float fStartTime)
{
  OscillationEx *v3; // esi@1
  EffectViewInfo *v4; // eax@1
  float EffectViewInfoIDa; // [sp+Ch] [bp+8h]@2

  v3 = this;
  v4 = ShakeEffectViewInfoTab::GetByID(EffectViewInfoID);
  if ( v4 )
  {
    EffectViewInfoIDa = (double)v4->Amplitude / 100.0;
    v3->baseclass_0.m_fStartTime = fStartTime;
    v3->baseclass_0.m_fCurrTime = fStartTime;
    v3->baseclass_0.m_fTargetAmplitude = 0.0;
    v3->baseclass_0.m_fAmplitude = EffectViewInfoIDa;
    v3->baseclass_0.m_fNextPeakTime = fStartTime + v3->baseclass_0.m_fPeriod * 0.25;
    v3->baseclass_0.m_fPeriod = (double)v4->Period / 100.0;
    v3->baseclass_0.m_fDampingMagnitude = (double)v4->Damp / 100.0;
    v3->m_eAxis = v4->Axis;
  }
}

//----- (0042E710) --------------------------------------------------------
void __cdecl OscillationEx::GetOscillationStr(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *TargetStr, OscTarget e)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@11
  bool v3; // cf@11

  switch ( e )
  {
    case 4:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "MyCamOsc", 8u);
      break;
    case 0:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "FMyCamOsc", 9u);
      break;
    case 7:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "AllCamOsc", 9u);
      break;
    case 3:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "FAllCamOsc", 0xAu);
      break;
    case 5:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "EneCamOsc", 9u);
      break;
    case 1:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "FEneCamOsc", 0xAu);
      break;
    case 6:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "ParCamOsc", 9u);
      break;
    case 2:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "FParCamOsc", 0xAu);
      break;
    case 8:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TargetStr, "DmgOsc", 6u);
      break;
    default:
      v2 = TargetStr;
      v3 = TargetStr->baseclass_0._Myres < 0x10;
      TargetStr->baseclass_0._Mysize = 0;
      if ( !v3 )
        v2 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&TargetStr->baseclass_0.___u0.baseclass_0.dummy[0];
      v2->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      break;
  }
}

//----- (0042E800) --------------------------------------------------------
unsigned int __cdecl ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A959EC: using guessed type int ITableBase_EffectViewInfo_ShakeEffectViewInfoTab___ms_pkTable;

//----- (0042E820) --------------------------------------------------------
void *__thiscall OscillationEx::_scalar_deleting_destructor_(OscillationEx *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (OscillationVtbl *)&Oscillation::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 97E818: using guessed type int (*Oscillation___vftable_)();

//----- (0042E850) --------------------------------------------------------
EffectViewInfo *__cdecl ShakeEffectViewInfoTab::GetByID(unsigned __int16 ID)
{
  unsigned int v1; // esi@1
  EffectViewInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::GetTotal() )
  {
    while ( *(_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 4),
                        v1) != ID )
    {
      ++v1;
      if ( v1 >= ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (EffectViewInfo *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 4),
                                 v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A959EC: using guessed type int ITableBase_EffectViewInfo_ShakeEffectViewInfoTab___ms_pkTable;

//----- (0042E8A0) --------------------------------------------------------
void __thiscall PartyScoreWin::OnHelpLink(PartyScoreWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "PartyScoreWin");
}

//----- (0042E8D0) --------------------------------------------------------
void __thiscall PartyScoreWin::OnCancelWin(PartyScoreWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::PartyScoreShowWin((GameFrameWork *)v1, 0);
}

//----- (0042E8F0) --------------------------------------------------------
void __thiscall PartyScoreWin::OnSortByTitle01(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
  {
    v3 = v1->m_bReverse1 == 0;
    v1->m_bReverse1 = v3;
    SlideListWin::Sort(v2, 0, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pkListWin);
  }
}

//----- (0042E930) --------------------------------------------------------
void __thiscall PartyScoreWin::OnSortByTitle02(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
  {
    v3 = v1->m_bReverse2 == 0;
    v1->m_bReverse2 = v3;
    SlideListWin::Sort(v2, 1, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pkListWin);
  }
}

//----- (0042E970) --------------------------------------------------------
void __thiscall PartyScoreWin::OnSortByTitle03(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
  {
    v3 = v1->m_bReverse3 == 0;
    v1->m_bReverse3 = v3;
    SlideListWin::Sort(v2, 2, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pkListWin);
  }
}

//----- (0042E9B0) --------------------------------------------------------
void __thiscall PartyScoreWin::OnSortByTitle04(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
  {
    v3 = v1->m_bReverse4 == 0;
    v1->m_bReverse4 = v3;
    SlideListWin::Sort(v2, 3, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pkListWin);
  }
}

//----- (0042E9F0) --------------------------------------------------------
void __thiscall PartyScoreWin::OnSortByTitle05(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 )
  {
    v3 = v1->m_bReverse5 == 0;
    v1->m_bReverse5 = v3;
    SlideListWin::Sort(v2, 4, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pkListWin);
  }
}

//----- (0042EA30) --------------------------------------------------------
void __thiscall PartyScoreWin::OnCommand(PartyScoreWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xAu:
      PartyScoreWin::OnSortByTitle01(this);
      break;
    case 0xBu:
      PartyScoreWin::OnSortByTitle02(this);
      break;
    case 0xCu:
      PartyScoreWin::OnSortByTitle03(this);
      break;
    case 0xDu:
      PartyScoreWin::OnSortByTitle04(this);
      break;
    case 0xEu:
      PartyScoreWin::OnSortByTitle05(this);
      break;
    case 0x11u:
      PartyScoreWin::OnHelpLink(this);
      break;
    case 0x12u:
      PartyScoreWin::OnCancelWin(this);
      break;
    default:
      return;
  }
}

//----- (0042EAB0) --------------------------------------------------------
void __thiscall PartyScoreWin::ShowRaidPartyInfo(PartyScoreWin *this, const char *byStatus, const int *iLev, const int *nIndex, Name5 *Charid, const char *CharClass)
{
  int v6; // ebx@0
  const int v7; // eax@1
  PartyScoreWin *v8; // esi@1
  EntryIconWin *v9; // edx@8
  NiRefObjectVtbl *v10; // ebx@8
  PgWinText *v11; // ST14_4@8
  char *v12; // eax@8
  int v13; // edx@9
  int v14; // ecx@9
  int v15; // edx@9
  int v16; // eax@9
  const int v17; // ecx@9
  char v18; // al@10
  PgWinSpr *v19; // ecx@19
  int v20; // [sp+0h] [bp-2Ch]@0
  D3DXCOLOR *v21; // [sp+0h] [bp-2Ch]@4
  char acstr[21]; // [sp+10h] [bp-1Ch]@9
  unsigned int v23; // [sp+28h] [bp-4h]@1
  int v24; // [sp+2Ch] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v7 = *nIndex;
  v8 = this;
  if ( *nIndex >= 0 && v7 < 20 )
  {
    if ( *byStatus )
    {
      ((void (__stdcall *)(D3DXCOLOR *, int, int))this->m_spEntry[v7].m_pObject->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
        &Color::m_kDxWhiteColor,
        v6,
        v20);
      v21 = &Color::m_kDxWhiteColor;
    }
    else
    {
      ((void (__stdcall *)(_UNKNOWN *, int, int))this->m_spEntry[v7].m_pObject->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
        &Color::m_kDxGrayColor,
        v6,
        v20);
      v21 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
    }
    ((void (__cdecl *)(D3DXCOLOR *))v8->m_spEntry[*nIndex].m_pObject->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v21);
    if ( *byStatus )
    {
      v9 = v8->m_spEntry[*nIndex].m_pObject;
      v10 = v9->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = v9->m_spLevelText.m_pObject;
      v12 = fs("%d");
      v10[118].__vecDelDtor((NiRefObject *)v11, (unsigned int)v12);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v8->m_spEntry[*nIndex].m_pObject->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("?");
    }
    v13 = *(_DWORD *)&Charid->n5_name[4];
    *(_DWORD *)acstr = *(_DWORD *)&Charid->n5_name[0];
    v14 = *(_DWORD *)&Charid->n5_name[8];
    *(_DWORD *)&acstr[4] = v13;
    v15 = *(_DWORD *)&Charid->n5_name[12];
    v16 = *(_DWORD *)&Charid->n5_name[16];
    *(_DWORD *)&acstr[8] = v14;
    v17 = *nIndex;
    *(_DWORD *)&acstr[12] = v15;
    *(_DWORD *)&acstr[16] = v16;
    acstr[20] = 0;
    ((void (__cdecl *)(_DWORD))v8->m_spEntry[v17].m_pObject->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acstr);
    switch ( *CharClass )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        v18 = 1;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        v18 = 6;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        v18 = 11;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        v18 = 16;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        v18 = 21;
        break;
      case 0x1A:
      case 0x1B:
        v18 = 26;
        break;
      default:
        v18 = 0;
        break;
    }
    switch ( v18 )
    {
      case 1:
        ((void (__stdcall *)(signed int))v8->m_spEntry[*nIndex].m_pObject->m_spClassBar[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        return;
      case 6:
        v19 = v8->m_spEntry[*nIndex].m_pObject->m_spClassBar[1].m_pObject;
        goto LABEL_24;
      case 0xB:
        ((void (__stdcall *)(signed int))v8->m_spEntry[*nIndex].m_pObject->m_spClassBar[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        return;
      case 0x10:
        v19 = v8->m_spEntry[*nIndex].m_pObject->m_spClassBar[3].m_pObject;
        goto LABEL_24;
      case 0x15:
        ((void (__stdcall *)(signed int))v8->m_spEntry[*nIndex].m_pObject->m_spClassBar[4].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        break;
      case 0x1A:
        v19 = v8->m_spEntry[*nIndex].m_pObject->m_spClassBar[5].m_pObject;
LABEL_24:
        ((void (__stdcall *)(signed int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        break;
      default:
        return;
    }
  }
}
// 42EAB0: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (0042EDB0) --------------------------------------------------------
void __thiscall PartyScoreWin::InitRaidInfo(PartyScoreWin *this)
{
  EntryIconWin **v1; // esi@1
  signed int v2; // ebx@2
  signed int v3; // edi@4
  signed int v4; // [sp+Ch] [bp-4h]@1

  v1 = (EntryIconWin **)this->m_spEntry;
  v4 = 4;
  do
  {
    v2 = 5;
    do
    {
      if ( *v1 )
      {
        ((void (__stdcall *)(_DWORD))(*v1)->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
        ((void (__stdcall *)(_DWORD))(*v1)->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
        ((void (__stdcall *)(_DWORD))(*v1)->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E857);
        ((void (__stdcall *)(_DWORD))(*v1)->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97E85E);
        EntryIconWin::InitLeaderLooterMark(*v1);
        v3 = 79;
        do
        {
          (*((void (__stdcall **)(_DWORD))(&(*v1)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v3]->__vecDelDtor
           + 64))(0);
          ++v3;
        }
        while ( v3 < 85 );
      }
      ++v1;
      --v2;
    }
    while ( v2 );
    --v4;
  }
  while ( v4 );
}

//----- (0042EE80) --------------------------------------------------------
void __thiscall PartyScoreWin::_PartyScoreWin(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1
  char *v2; // ebx@1
  int v3; // edi@2
  signed int v4; // [sp+4h] [bp-10h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyScoreWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyScoreWin::_vftable_;
  v2 = (char *)this->m_spEntry;
  v4 = 4;
  do
  {
    v3 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v4;
  }
  while ( v4 );
  *(_DWORD *)&v1->m_bReverse1 = 0;
  v1->m_bReverse5 = 0;
  _eh_vector_destructor_iterator_(
    v1->m_spEntry,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97EA50: using guessed type int (__stdcall *PartyScoreWin___vftable_)(int uiFlags);
// 97EA6C: using guessed type int (__thiscall *PartyScoreWin___vftable_)(void *p, char);

//----- (0042EF50) --------------------------------------------------------
void __thiscall PartyScoreWin::OnClose(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1

  v1 = this;
  PartyScoreWin::InitRaidInfo(this);
  SlideListWin::RemoveAllList(v1->m_pkListWin);
}

//----- (0042EF70) --------------------------------------------------------
void __thiscall PartyScoreWin::ShowPartyInfo(PartyScoreWin *this)
{
  PartyScoreWin *v1; // ebx@1
  char v2; // al@1
  AbStateInfecteeVtbl *v3; // edx@1
  char *v4; // eax@1
  int (*v5)(void); // eax@1
  unsigned int v6; // esi@1
  PartyMemberInfo *v7; // eax@2
  int nIndex; // [sp+Ch] [bp-28h]@1
  unsigned int nPartyTotalmember; // [sp+10h] [bp-24h]@1
  int iLev; // [sp+14h] [bp-20h]@1
  char CharClass; // [sp+1Ah] [bp-1Ah]@1
  char byStatus; // [sp+1Bh] [bp-19h]@1
  char Charid[4]; // [sp+1Ch] [bp-18h]@1
  int v14; // [sp+20h] [bp-14h]@1
  int v15; // [sp+24h] [bp-10h]@1
  int v16; // [sp+28h] [bp-Ch]@1
  int v17; // [sp+2Ch] [bp-8h]@1
  unsigned int v18; // [sp+30h] [bp-4h]@1
  int v19; // [sp+34h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v1 = this;
  nPartyTotalmember = g_kParty.m_uiTotalMember;
  v2 = Char::GetClass(g_pkMainChar);
  v3 = g_pkMainChar->baseclass_0.vfptr;
  CharClass = v2;
  v4 = (char *)((int (*)(void))v3[2].DeleteAbStateByAbstateIndex)();
  v17 = 0;
  v16 = 0;
  v15 = 0;
  v14 = 0;
  *(_DWORD *)Charid = 0;
  strncpy(Charid, v4, 0x14u);
  v5 = (int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex;
  nIndex = 0;
  iLev = v5();
  byStatus = 1;
  PartyScoreWin::ShowRaidPartyInfo(v1, &byStatus, &iLev, &nIndex, (Name5 *)Charid, &CharClass);
  v6 = 0;
  if ( (signed int)nPartyTotalmember > 0 )
  {
    do
    {
      v7 = Party::GetMemberInfo(&g_kParty, v6);
      if ( v7 )
      {
        iLev = v6 + 1;
        PartyScoreWin::ShowRaidPartyInfo(v1, &v7->m_ucStatus, &v7->m_iLv, &iLev, &v7->m_kCharID, &v7->m_byChrClass);
      }
      ++v6;
    }
    while ( (signed int)v6 < (signed int)nPartyTotalmember );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0042F050) --------------------------------------------------------
void __thiscall PartyScoreWin::PartyScoreWin(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyScoreWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyScoreWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_spEntry,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_pkListWin = 0;
}
// 97EA50: using guessed type int (__stdcall *PartyScoreWin___vftable_)(int uiFlags);
// 97EA6C: using guessed type int (__thiscall *PartyScoreWin___vftable_)(void *p, char);

//----- (0042F0D0) --------------------------------------------------------
void __thiscall PartyScoreWin::SetPartyScore(PartyScoreWin *this, SHINE_INDUN_RANK_CLIENT *pData, const unsigned __int16 *nRankCount, const char *nPlayTimeHour, const char *nPlayTimeMinute, const char *nPlayTimeSecond)
{
  PartyScoreWin *v6; // edi@1
  char *v7; // esi@4
  int v8; // edx@5
  int v9; // eax@5
  int v10; // ecx@5
  int v11; // eax@5
  SlideListWin *v12; // ecx@5
  int v13; // ebx@5
  void *v14; // eax@5
  const char *v15; // eax@6
  char *v16; // eax@8
  char *v17; // eax@8
  signed int i; // [sp+14h] [bp-124h]@3
  PgFrameWork *pkGame; // [sp+18h] [bp-120h]@2
  char pNumberString[256]; // [sp+1Ch] [bp-11Ch]@8
  char acname[21]; // [sp+11Ch] [bp-1Ch]@5
  unsigned int v22; // [sp+134h] [bp-4h]@1
  int v23; // [sp+138h] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v6 = this;
  if ( this->m_pkListWin )
  {
    pkGame = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( pkGame )
    {
      i = 0;
      if ( *nRankCount > 0u )
      {
        v7 = &pData->nCharID.n5_name[8];
        do
        {
          v8 = *(_DWORD *)v7;
          v9 = *((_DWORD *)v7 - 2);
          *(_DWORD *)&acname[4] = *((_DWORD *)v7 - 1);
          v10 = *((_DWORD *)v7 + 2);
          *(_DWORD *)&acname[8] = v8;
          *(_DWORD *)acname = v9;
          v11 = *((_DWORD *)v7 + 1);
          *(_DWORD *)&acname[16] = v10;
          v12 = v6->m_pkListWin;
          *(_DWORD *)&acname[12] = v11;
          acname[20] = 0;
          v13 = SlideListWin::AddText(v12, acname);
          v14 = CDataReader::GetRecord(
                  (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
                  (unsigned __int8)v7[12]);
          if ( v14 )
            v15 = (char *)v14 + 21;
          else
            v15 = &byte_9788EB;
          SlideListWin::SetText(v6->m_pkListWin, v13, 1u, v15);
          GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)pkGame, *((_QWORD *)v7 + 2), pNumberString);
          SlideListWin::SetText(v6->m_pkListWin, v13, 2u, pNumberString);
          GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)pkGame, *((_QWORD *)v7 + 3), pNumberString);
          SlideListWin::SetText(v6->m_pkListWin, v13, 3u, pNumberString);
          GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)pkGame, *((_QWORD *)v7 + 4), pNumberString);
          SlideListWin::SetText(v6->m_pkListWin, v13, 4u, pNumberString);
          v16 = TextData3::Get(0xE0D1BE17u);
          v17 = fs(v16);
          SlideListWin::SetText(v6->m_pkListWin, v13, 5u, v17);
          v7 += 48;
          ++i;
        }
        while ( i < *nRankCount );
      }
      SlideListWin::UpdateViewList(v6->m_pkListWin);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (0042F2C0) --------------------------------------------------------
PartyScoreWin *__cdecl PartyScoreWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PartyScoreWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1B4u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &PartyScoreWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PartyScoreWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 344,
      4u,
      20,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    *((_DWORD *)v2 + 106) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PartyScoreWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97EA50: using guessed type int (__stdcall *PartyScoreWin___vftable_)(int uiFlags);
// 97EA6C: using guessed type int (__thiscall *PartyScoreWin___vftable_)(void *p, char);

//----- (0042F420) --------------------------------------------------------
void __thiscall PartyScoreWin::ShowRaidInfo(PartyScoreWin *this)
{
  RaidMemberInfo *v1; // edi@1
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v2; // esi@1
  signed int v3; // edx@3
  int v4; // ebx@3
  int v5; // esi@4
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > kInfo; // [sp+0h] [bp-34h]@3
  PartyScoreWin *thisa; // [sp+10h] [bp-24h]@1
  int nIndex; // [sp+14h] [bp-20h]@5
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v9; // [sp+18h] [bp-1Ch]@1
  int v10; // [sp+1Ch] [bp-18h]@1
  NiPointer<EntryIconWin> *v11; // [sp+20h] [bp-14h]@1
  EntryIconWin **v12; // [sp+24h] [bp-10h]@4
  RaidMemberInfo *v13; // [sp+30h] [bp-4h]@3

  thisa = this;
  v1 = 0;
  v2 = g_kRaidinfo.m_MemberInfo;
  v10 = 0;
  v9 = g_kRaidinfo.m_MemberInfo;
  v11 = this->m_spEntry;
  do
  {
    if ( *(RaidMemberInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0] != v2->baseclass_0._Mylast )
    {
      std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>(
        &kInfo,
        v2);
      v3 = (signed int)((unsigned __int64)(2021161081i64
                                         * (unsigned int)((char *)kInfo.baseclass_0._Mylast - *(_DWORD *)&kInfo)) >> 32) >> 5;
      v4 = v3 + ((unsigned int)v3 >> 31);
      v13 = v1;
      if ( v3 + ((unsigned int)v3 >> 31) )
      {
        v12 = (EntryIconWin **)v11;
        v5 = *(_DWORD *)&kInfo + 24;
        do
        {
          nIndex = (int)((char *)v1 + v10);
          PartyScoreWin::ShowRaidPartyInfo(
            thisa,
            (const char *)(v5 - 4),
            (const int *)v5,
            &nIndex,
            (Name5 *)(v5 - 24),
            (const char *)(v5 + 28));
          EntryIconWin::ShowLeaderLooterMark(*v12);
          ++v12;
          v1 = (RaidMemberInfo *)((char *)v1 + 1);
          v5 += 68;
        }
        while ( (unsigned int)v1 < v4 );
        v2 = v9;
        v1 = 0;
      }
      v13 = (RaidMemberInfo *)-1;
      if ( *(RaidMemberInfo **)&kInfo != v1 )
        operator delete(*(void **)&kInfo);
      *(_DWORD *)&kInfo.baseclass_0.___u0.baseclass_0.dummy[0] = v1;
      kInfo.baseclass_0._Mylast = v1;
      kInfo.baseclass_0._Myend = v1;
    }
    v11 += 5;
    v10 += 5;
    ++v2;
    v9 = v2;
  }
  while ( (signed int)v2 < (signed int)&unk_B68084 );
}

//----- (0042F530) --------------------------------------------------------
void __thiscall PartyScoreWin::OnShowWin(PartyScoreWin *this)
{
  PartyScoreWin *v1; // esi@1

  v1 = this;
  if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
  {
    PartyScoreWin::ShowRaidInfo(v1);
  }
  else
  {
    if ( g_kParty.m_uiTotalMember )
      PartyScoreWin::ShowPartyInfo(v1);
  }
}

//----- (0042F560) --------------------------------------------------------
bool __thiscall PartyScoreWin::Create(PartyScoreWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  int v5; // edi@5
  NiSourceTexture *v6; // eax@5
  PgSprData *v7; // eax@8
  PgSprData::PgHitTester *v8; // eax@8
  int v9; // edx@8
  PgFont *v10; // eax@8
  PgWinText *v11; // esi@8
  NiRefObjectVtbl *v12; // edi@8
  char *v13; // eax@8
  SLWCreateInfo::Item *v14; // esi@8
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v15; // esi@8
  NiTexturePalette *v16; // edi@14
  SLWCreateInfo::Item *v17; // eax@15
  SLWCreateInfo::Item *v18; // esi@15
  char *v19; // eax@15
  const char *v20; // edi@15
  char *v21; // ecx@15
  int v22; // eax@15
  char v23; // dl@16
  PgSprData *v24; // eax@20
  SlideListWin *v25; // eax@20
  signed int v26; // esi@20
  char *v27; // eax@21
  D3DXCOLOR v28; // ST1C_16@22
  char *v29; // eax@22
  char *v30; // eax@22
  int v31; // eax@23
  void *v32; // eax@25
  int v33; // esi@25
  int v34; // esi@31
  NiNode *v35; // esi@36
  int v37; // esi@42
  int v38; // eax@43
  PgWin *v39; // esi@50
  D3DXCOLOR v40; // ST1C_16@50
  char *v41; // eax@50
  PgWin *v42; // esi@50
  D3DXCOLOR v43; // ST1C_16@50
  char *v44; // eax@50
  PgWin *v45; // esi@50
  D3DXCOLOR v46; // ST1C_16@50
  char *v47; // eax@50
  PgWin *v48; // esi@50
  D3DXCOLOR v49; // ST1C_16@50
  char *v50; // eax@50
  PgWin *v51; // esi@50
  D3DXCOLOR v52; // ST1C_16@50
  char *v53; // eax@50
  PgWin *v54; // esi@50
  D3DXCOLOR v55; // ST1C_16@50
  char *v56; // eax@50
  NiNode *v57; // esi@52
  const char *v58; // [sp+14h] [bp-A0h]@6
  int *v59; // [sp+18h] [bp-9Ch]@6
  int *v60; // [sp+1Ch] [bp-98h]@6
  NiSourceTexture *v61; // [sp+20h] [bp-94h]@6
  PartyScoreWin *pkParent; // [sp+34h] [bp-80h]@1
  SLWCreateInfo kCreateInfo; // [sp+38h] [bp-7Ch]@8
  UIUtil ui; // [sp+54h] [bp-60h]@5
  PgWin *pkWinSpr; // [sp+68h] [bp-4Ch]@5
  int j; // [sp+6Ch] [bp-48h]@8
  int i; // [sp+70h] [bp-44h]@8
  NiTexturePalette *uiHeight; // [sp+74h] [bp-40h]@1
  int uiTop; // [sp+78h] [bp-3Ch]@4
  void *uiLeft; // [sp+7Ch] [bp-38h]@4
  int iOffY; // [sp+80h] [bp-34h]@5
  NiPointer<NiNode> spNode; // [sp+84h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+88h] [bp-2Ch]@8
  unsigned int v74; // [sp+A4h] [bp-10h]@1
  int v75; // [sp+B0h] [bp-4h]@1
  int v76; // [sp+B4h] [bp+0h]@1

  v74 = (unsigned int)&v76 ^ __security_cookie;
  v2 = (PgWinFrame *)this;
  pkParent = this;
  spNode.m_pObject = 0;
  v75 = 0;
  uiHeight = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\PartyScoreWin.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, uiHeight);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", (int *)&uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v4, 0, pkFrameWork, "PartyScoreWin", 0) )
  {
LABEL_36:
    v35 = spNode.m_pObject;
    v75 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v35 )
      v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
    return 0;
  }
  v5 = (int)uiLeft;
  iOffY = uiTop;
  pkWinSpr = (PgWin *)uiLeft;
  UIUtil::UIUtil(&ui);
  LOBYTE(v75) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v5, iOffY);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v6 = MenuTexMgr::GetTexture(0x13u);
  if ( v6 )
  {
    v61 = v6;
    v60 = &uiTop;
    v59 = (int *)&uiLeft;
    v58 = "Theme";
  }
  else
  {
    v61 = 0;
    v60 = &uiTop;
    v59 = (int *)&uiLeft;
    v58 = "Theme";
  }
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v58, v59, v60, v61);
  PgWinSpr::CreateWin((int)((char *)uiLeft - v5), uiTop - iOffY, v7, &v2->baseclass_0.baseclass_0, 0, 0);
  j = (int)MenuTexMgr::GetTexture(0x1Du);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WinTitle", (int *)&uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v9 = v8->m_uiWidth;
  uiHeight = (NiTexturePalette *)v8->m_uiHeight;
  i = v9;
  v10 = Font::Get(MAIN_MENU);
  v11 = PgWinText::CreateWin(
          (int)((char *)uiLeft - v5),
          uiTop - iOffY,
          i,
          (unsigned int)uiHeight,
          v10,
          &v2->baseclass_0.baseclass_0,
          0,
          0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v11,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v11,
    5u);
  v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = TextData3::Get(0x7F6231C4u);
  v12[118].__vecDelDtor((NiRefObject *)v11, (unsigned int)v13);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v11,
    1u);
  UIUtil::CreateBtn(&ui, 0x12u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  UIUtil::CreateBtn(&ui, 0x11u, "HelpLinkNor", "HelpLinkClick", "HelpLinkOver", 0, 0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v75) = 2;
  v14 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v14->nItemType = 1;
  v14->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  v15 = &v14->vecNodeName;
  LOBYTE(v75) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v15,
    &thisa);
  LOBYTE(v75) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v75) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v15,
    &thisa);
  LOBYTE(v75) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v75) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v15,
    &thisa);
  LOBYTE(v75) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v16 = 0;
  do
  {
    v17 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    v18 = v17;
    v17->nItemType = 2;
    uiHeight = (NiTexturePalette *)((char *)v16 + 1);
    v19 = fs("Column%.2d");
    v20 = v19;
    v21 = v19;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v22 = (int)(v19 + 1);
    do
      v23 = *v21++;
    while ( v23 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v20, (unsigned int)&v21[-v22]);
    LOBYTE(v75) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      &v18->vecNodeName,
      &thisa);
    LOBYTE(v75) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v16 = uiHeight;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v18->pNode = spNode.m_pObject;
    v18->bAbbreviatable = 1;
  }
  while ( (signed int)v16 < 6 );
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", (int *)&uiLeft, &uiTop, (NiSourceTexture *)j);
  v25 = SlideListWin::CreateWin(
          uiLeft - pkWinSpr,
          uiTop - iOffY,
          v24,
          &pkParent->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  pkParent->m_pkListWin = v25;
  SlideListWin::UpdateViewList(v25);
  v26 = 1;
  do
  {
    v27 = fs("Party%.2dNor");
    pkWinSpr = (PgWin *)UIUtil::CreateSpr(&ui, v27, 0);
    if ( !pkWinSpr )
    {
      LOBYTE(v75) = 1;
      if ( *(_DWORD *)&kCreateInfo )
      {
        std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
          *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
          kCreateInfo.m_arrItem.baseclass_0._Mylast,
          &kCreateInfo.m_arrItem.baseclass_0._Alval,
          (std::_Nonscalar_ptr_iterator_tag)pkWinSpr);
        operator delete(*(void **)&kCreateInfo);
      }
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      LOBYTE(v75) = 0;
      UIUtil::_UIUtil(&ui);
      goto LABEL_36;
    }
    *(_QWORD *)&v28.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v28.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v29 = TextData2::Get(0x5F5D33Eu);
    v30 = fs(v29);
    UIUtil::CreateAttachedText(&ui, pkWinSpr, v30, COERCE_D3DXCOLOR(v28.r), 5u);
    ++v26;
  }
  while ( v26 - 1 < 4 );
  i = 0;
  v31 = (int)pkParent->m_spEntry;
  do
  {
    j = 0;
    iOffY = v31;
    do
    {
      v32 = EntryIconWin::CreateWin(
              &spNode.m_pObject->baseclass_0,
              i,
              j,
              &pkParent->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v33 = *(_DWORD *)iOffY;
      uiHeight = (NiTexturePalette *)v32;
      if ( (void *)v33 == v32 )
      {
        v34 = iOffY;
      }
      else
      {
        if ( v33 )
        {
          if ( !InterlockedDecrement((volatile LONG *)(v33 + 4)) && v33 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v33)(v33, 1);
          v32 = uiHeight;
        }
        v34 = iOffY;
        *(_DWORD *)iOffY = v32;
        if ( v32 )
          InterlockedIncrement((volatile LONG *)v32 + 1);
      }
      *(_BYTE *)(*(_DWORD *)v34 + 412) = 1;
      v37 = *(_DWORD *)v34;
      if ( v37 )
      {
        v38 = (*(int (__thiscall **)(int))(*(_DWORD *)v37 + 4))(v37);
        if ( v38 )
        {
          while ( (NiRTTI *)v38 != &PgWin::m_RTTI )
          {
            v38 = *(_DWORD *)(v38 + 4);
            if ( !v38 )
              goto LABEL_48;
          }
          ((void (__thiscall *)(PartyScoreWin *, int, _DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            pkParent,
            v37,
            0);
          NiAVObject::UpdateProperties(&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          NiAVObject::Update(&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
        }
      }
LABEL_48:
      iOffY += 4;
      ++j;
    }
    while ( j < 5 );
    v31 = iOffY;
    ++i;
  }
  while ( i < 4 );
  v39 = (PgWin *)UIUtil::CreateBtn(&ui, 0xAu, "Title01Nor", "Title01Click", "Title01Over", 0, 0);
  *(_QWORD *)&v40.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v40.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v41 = TextData::Get(0x4EA49695u);
  UIUtil::CreateAttachedText(&ui, v39, v41, COERCE_D3DXCOLOR(v40.r), 5u);
  v42 = (PgWin *)UIUtil::CreateBtn(&ui, 0xBu, "Title02Nor", "Title02Click", "Title02Over", 0, 0);
  *(_QWORD *)&v43.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v43.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v44 = TextData::Get(0x4A5F8BA3u);
  UIUtil::CreateAttachedText(&ui, v42, v44, COERCE_D3DXCOLOR(v43.r), 5u);
  v45 = (PgWin *)UIUtil::CreateBtn(&ui, 0xCu, "Title03Nor", "Title03Click", "Title03Over", 0, 0);
  *(_QWORD *)&v46.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v46.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v47 = TextData3::Get(0x9390A4C8u);
  UIUtil::CreateAttachedText(&ui, v45, v47, COERCE_D3DXCOLOR(v46.r), 5u);
  v48 = (PgWin *)UIUtil::CreateBtn(&ui, 0xDu, "Title04Nor", "Title04Click", "Title04Over", 0, 0);
  *(_QWORD *)&v49.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v49.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v50 = TextData3::Get(0x2E342C63u);
  UIUtil::CreateAttachedText(&ui, v48, v50, COERCE_D3DXCOLOR(v49.r), 5u);
  v51 = (PgWin *)UIUtil::CreateBtn(&ui, 0xEu, "Title05Nor", "Title05Click", "Title05Over", 0, 0);
  *(_QWORD *)&v52.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v52.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v53 = TextData3::Get(0x9E846385u);
  UIUtil::CreateAttachedText(&ui, v51, v53, COERCE_D3DXCOLOR(v52.r), 5u);
  v54 = (PgWin *)UIUtil::CreateBtn(&ui, 0xFu, "Title06Nor", "Title06Click", "Title06Over", 0, 0);
  *(_QWORD *)&v55.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v55.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v56 = TextData3::Get(0xF3DFBB2Du);
  UIUtil::CreateAttachedText(&ui, v54, v56, COERCE_D3DXCOLOR(v55.r), 5u);
  ((void (__thiscall *)(PartyScoreWin *, unsigned int, unsigned int, _DWORD, _DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    pkParent,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v75) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)pkWinSpr);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v75) = 0;
  UIUtil::_UIUtil(&ui);
  v57 = spNode.m_pObject;
  v75 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v57 )
      v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v57, 1u);
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0042FE50) --------------------------------------------------------
void __thiscall PgWin::AttachChildWin(PgWin *this, PgWin *pkChild)
{
  NiAVObject *v2; // esi@1
  int v3; // eax@2

  v2 = (NiAVObject *)this;
  if ( pkChild )
  {
    v3 = ((int (__thiscall *)(_DWORD))pkChild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(pkChild);
    if ( v3 )
    {
      while ( (NiRTTI *)v3 != &PgWin::m_RTTI )
      {
        v3 = *(_DWORD *)(v3 + 4);
        if ( !v3 )
          return;
      }
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v2,
        pkChild,
        0);
      NiAVObject::UpdateProperties(v2);
      NiAVObject::Update(v2, 0.0, 1);
    }
  }
}

//----- (0042FEB0) --------------------------------------------------------
void *__thiscall PartyScoreWin::_scalar_deleting_destructor_(PartyScoreWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PartyScoreWin::_PartyScoreWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0042FEE0) --------------------------------------------------------
RaidMemberInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo_std::allocator<RaidMemberInfo>>>_RaidMemberInfo___std::allocator<RaidMemberInfo>>(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > _Last, RaidMemberInfo *_Dest, std::allocator<RaidMemberInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v5; // edx@1
  RaidMemberInfo *result; // eax@1

  v5 = _First;
  for ( result = _Dest; v5 != _Last; ++result )
  {
    if ( result )
      memcpy(result, *(const void **)&v5, 0x44u);
    *(_DWORD *)&v5 += 68;
  }
  return result;
}

//----- (0042FF20) --------------------------------------------------------
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *_Right)
{
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v2; // esi@1
  int v3; // edi@1
  RaidMemberInfo *v4; // eax@4
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v5; // ecx@4
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v6; // ST00_4@4
  int v7; // [sp-10h] [bp-24h]@1
  std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *thisa; // [sp+0h] [bp-14h]@1
  int *v9; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@4

  v9 = &v7;
  v2 = this;
  thisa = (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)this;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  v3 = (signed int)((char *)_Right->baseclass_0._Mylast - *(_DWORD *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0])
     / 68;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  if ( v3 )
  {
    if ( (unsigned int)v3 > 0x3C3C3C3 )
      std::_Xlength_error("vector<T> too long");
    v4 = std::allocator<GuildAcademySelectWin::GuildInfo>::allocate(&this->baseclass_0._Alval, v3);
    v2->baseclass_0._Myend = &v4[v3];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v4;
    v2->baseclass_0._Mylast = v4;
    v5 = (std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > >)_Right->baseclass_0._Mylast;
    v6 = *(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
    v10 = 0;
    v2->baseclass_0._Mylast = std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo_std::allocator<RaidMemberInfo>>>_RaidMemberInfo___std::allocator<RaidMemberInfo>>(
                                v6,
                                v5,
                                v4,
                                &v2->baseclass_0._Alval,
                                (std::_Nonscalar_ptr_iterator_tag)_Right);
  }
}

//----- (00430000) --------------------------------------------------------
void __thiscall std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val)
{
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v2; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // ecx@5
  unsigned int v7; // edx@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // [sp-10h] [bp-20h]@6

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Reserve(
        v2,
        1u);
    v6 = v2->baseclass_0._Mylast;
    v7 = 0;
    if ( v6 )
    {
      v8 = _Val;
      goto LABEL_11;
    }
  }
  else
  {
    v4 = (signed int)((char *)_Val
                    + ((unsigned __int64)(-1840700269i64
                                        * (signed int)((char *)_Val
                                                     - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32)
                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 4;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Reserve(
        v2,
        1u);
    v6 = v2->baseclass_0._Mylast;
    v7 = 0;
    if ( v6 )
    {
      v8 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                  + 28 * v5);
LABEL_11:
      v6->baseclass_0._Myres = 15;
      v6->baseclass_0._Mysize = v7;
      v6->baseclass_0.___u0.baseclass_0.dummy[0] = v7;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v6, v8);
      goto LABEL_12;
    }
  }
LABEL_12:
  ++v2->baseclass_0._Mylast;
}

//----- (004300D0) --------------------------------------------------------
void __thiscall Pet::Pet(Pet *this)
{
  Pet *v1; // esi@1

  v1 = this;
  Char::Char(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Pet::_vftable_;
  v1->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Pet::_vftable_;
  v1->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Pet::_vftable_;
  v1->m_kPetID = -1;
}
// 97EC90: using guessed type int (*Pet___vftable_[2])();
// 97ECB0: using guessed type int (__stdcall *Pet___vftable_)(int);
// 97ECBC: using guessed type int (__thiscall *Pet___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00430100) --------------------------------------------------------
void __thiscall Pet::_Pet(Pet *this)
{
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Pet::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Pet::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Pet::_vftable_;
  Char::_Char(&this->baseclass_0);
}
// 97EC90: using guessed type int (*Pet___vftable_[2])();
// 97ECB0: using guessed type int (__stdcall *Pet___vftable_)(int);
// 97ECBC: using guessed type int (__thiscall *Pet___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00430120) --------------------------------------------------------
bool __thiscall Pet::InitView(Pet *this, bool bEquip, unsigned int uiFrame)
{
  Pet *v3; // edi@1
  NiActorManager *v4; // eax@1
  NiActorManager *v5; // ecx@1
  ActionInfoSet *v6; // eax@9
  NiActorManager::CallbackObjectVtbl *v7; // edx@9
  bool result; // al@10
  NiActorManager *v9; // [sp+Ch] [bp-8h]@1
  NiActorManager *v10; // [sp+10h] [bp-4h]@1

  v3 = this;
  this->baseclass_0.m_kActionMgr.m_fActionStartTime = 0.0;
  this->baseclass_0.m_kActionMgr.m_fActionLastUpdateTime = 0.0;
  this->baseclass_0.m_kActionMgr.m_pkActInfoSet = 0;
  this->baseclass_0.m_kActionMgr.m_pkChar = 0;
  this->baseclass_0.m_kActionMgr.m_pActor = 0;
  this->baseclass_0.m_kActionMgr.m_pkCurPlaySkillViewInfo = 0;
  this->baseclass_0.m_kActionMgr.m_uiCurEventCode = 0;
  this->baseclass_0.m_kActionMgr.m_pkLastAttackActInfo = 0;
  this->baseclass_0.m_kActionMgr.m_iOldLoopCnt = 0;
  this->baseclass_0.m_kActionMgr.m_bUseActorSequence = 0;
  this->baseclass_0.m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&this->baseclass_0.m_kActionMgr.baseclass_0, 0, 0);
  *(_WORD *)&v3->baseclass_0.m_kActionMgr.m_abActionEff[0] = 0;
  v3->baseclass_0.m_kActionMgr.m_abActionEff[2] = 0;
  *(_WORD *)&v3->baseclass_0.m_kActionMgr.m_abActionSnd[0] = 0;
  v3->baseclass_0.m_kActionMgr.m_fEffectStartTime = 0.0;
  v4 = CharResMgr::GetPetActor(&g_kCharResMgr, v3->m_kPetID);
  v5 = v3->baseclass_0.m_spActor.m_pObject;
  v10 = v4;
  v9 = v5;
  if ( v5 != v4 )
  {
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v9 )
        ((void (__stdcall *)(_DWORD))v9->baseclass_0.vfptr->__vecDelDtor)(1);
      v4 = v10;
    }
    v3->baseclass_0.m_spActor.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount);
  }
  v6 = ActionInfoTable::GetPetActionInfo(v3->m_kPetID);
  v7 = v3->baseclass_0.m_kActionMgr.baseclass_0.baseclass_0.vfptr;
  v3->baseclass_0.m_kActionMgr.m_pkActInfoSet = v6;
  ((void (__thiscall *)(_DWORD, _DWORD))v7[1].TextKeyEvent)(&v3->baseclass_0.m_kActionMgr, v3);
  if ( v3->baseclass_0.m_spActor.m_pObject )
    result = (int)v3->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor((AbStateInfectee *)v3, bEquip);
  else
    result = 0;
  return result;
}

//----- (00430250) --------------------------------------------------------
bool __thiscall Pet::Init(Pet *this, unsigned int kPetID, unsigned __int16 kPetHandle, const char *pcName)
{
  unsigned int v4; // ST04_4@1
  Pet *v5; // esi@1
  AbStateInfecteeVtbl *v6; // edx@1
  bool (__thiscall *v7)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@1
  char v8; // al@1
  AbStateInfecteeVtbl *v9; // edx@1
  bool (__thiscall *v10)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@1
  void (__thiscall *v11)(AbStateInfectee *, AbStateInst *, bool); // eax@3
  PupMain *v12; // eax@5
  PupView *v13; // eax@6
  Name3 *v14; // eax@9
  MapInfo *v15; // eax@9
  const char *v17; // [sp-10h] [bp-50h]@4
  Name3 result; // [sp+0h] [bp-40h]@9
  unsigned int v19; // [sp+Ch] [bp-34h]@1
  char v20; // [sp+13h] [bp-2Dh]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > PetName; // [sp+14h] [bp-2Ch]@3
  unsigned int v22; // [sp+30h] [bp-10h]@1
  int v23; // [sp+3Ch] [bp-4h]@3
  int v24; // [sp+40h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v4 = (unsigned int)&v24 ^ __security_cookie;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0.vfptr;
  v19 = kPetID;
  v7 = v6[1].AddAbStateByAbstateIndex;
  this->baseclass_0.m_kHandle = kPetHandle;
  v8 = ((int (__stdcall *)(unsigned int))v7)(v4);
  v9 = v5->baseclass_0.baseclass_0.vfptr;
  v20 = v8;
  v10 = v9[1].AddAbStateByAbstateIndex;
  v5->baseclass_0.m_byMode = 1;
  v5->baseclass_0.m_eStandMode = 0;
  if ( v20 != (unsigned __int8)((int (__thiscall *)(Pet *))v10)(v5) )
    v5->baseclass_0.m_bIsChangeCampMode = 1;
  v11 = v5->baseclass_0.baseclass_0.vfptr[4].Affect;
  v5->m_kPetID = v19;
  v5->baseclass_0.m_kCharShape.m_kClassID = 0;
  v5->baseclass_0.m_bUserCharacter = 0;
  ((void (__thiscall *)(Pet *, signed int))v11)(v5, 1);
  v5->baseclass_0.m_bConnectServer = 1;
  PetName.baseclass_0._Myres = 15;
  PetName.baseclass_0._Mysize = 0;
  PetName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&PetName, pcName, strlen(pcName));
  v23 = 0;
  if ( PetName.baseclass_0._Mysize > 0 )
  {
    v17 = pcName;
LABEL_8:
    ((void (__thiscall *)(Pet *, const char *))v5->baseclass_0.baseclass_0.vfptr[2].GetAbstateColor)(v5, v17);
    goto LABEL_9;
  }
  v12 = PetMainTab::GetByPetID(v19);
  if ( v12 )
  {
    v13 = PetViewTab::GetByPetIdx(v12->PupIDX);
    if ( v13 )
    {
      v17 = v13->Name;
      goto LABEL_8;
    }
  }
LABEL_9:
  v14 = World::GetMapName(&g_kWorld, &result);
  v15 = MapInfoTab::GetByMapName(v14);
  if ( v15 )
    v5->baseclass_0.m_fMaxViewLength = (double)v15->Sight;
  if ( PetName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&PetName);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004303B0) --------------------------------------------------------
bool __thiscall NiD3DTimeSyncController::CanBeExtracted(NiUnsharedGeometryGroup *this)
{
  return 0;
}

//----- (004303C0) --------------------------------------------------------
void *__thiscall Pet::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Pet::_vector_deleting_destructor_((Pet *)((char *)this - 84), a2);
}

//----- (004303D0) --------------------------------------------------------
void *__thiscall Pet::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Pet::_vector_deleting_destructor_((Pet *)((char *)this - 60), a2);
}

//----- (004303E0) --------------------------------------------------------
NiPoint3 *__thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *result, float fScalar)
{
  NiPoint3 *v3; // eax@1
  float fInvScalar; // [sp+Ch] [bp+Ch]@1

  v3 = result;
  fInvScalar = 1.0 / fScalar;
  result->x = this->x * fInvScalar;
  result->y = this->y * fInvScalar;
  result->z = fInvScalar * this->z;
  return v3;
}

//----- (00430410) --------------------------------------------------------
float __thiscall NiPoint3::Length(NiPoint3 *this)
{
  float v1; // ST00_4@1
  float v2; // ST00_4@1
  double v3; // st7@1
  float result; // st7@2

  v1 = this->y * this->y + this->x * this->x + this->z * this->z;
  v2 = sqrt(v1);
  v3 = v2;
  LODWORD(result) = LODWORD(v3);
  return result;
}

//----- (00430450) --------------------------------------------------------
float __thiscall NiPoint3::Unitize(NiPoint3 *this)
{
  float v1; // ST04_4@1
  float v2; // ST04_4@1
  double v3; // st7@1
  float v4; // ST04_4@2
  float result; // st7@4

  v1 = this->y * this->y + this->x * this->x + this->z * this->z;
  v2 = sqrt(v1);
  v3 = v2;
  if ( v2 <= 0.000001 )
  {
    this->x = 0.0;
    this->y = 0.0;
    this->z = 0.0;
    v3 = (float)0.0;
  }
  else
  {
    v4 = 1.0 / v3;
    this->x = this->x * v4;
    this->y = v4 * this->y;
    this->z = v4 * this->z;
  }
  LODWORD(result) = LODWORD(v3);
  return result;
}

//----- (004304E0) --------------------------------------------------------
NiPoint3 *__thiscall NiPoint3::UnitCross(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt)
{
  NiPoint3 *v3; // eax@1
  float cross; // [sp+0h] [bp-Ch]@1
  float cross_4; // [sp+4h] [bp-8h]@1
  float cross_8; // [sp+8h] [bp-4h]@1
  float fLengtha; // [sp+18h] [bp+Ch]@1
  float fLength; // [sp+18h] [bp+Ch]@1
  float fLengthb; // [sp+18h] [bp+Ch]@2

  cross = pt->z * this->y - pt->y * this->z;
  cross_4 = this->z * pt->x - this->x * pt->z;
  cross_8 = pt->y * this->x - pt->x * this->y;
  fLengtha = cross_4 * cross_4 + cross * cross + cross_8 * cross_8;
  fLength = sqrt(fLengtha);
  v3 = result;
  if ( fLength <= 0.000001 )
  {
    result->x = 0.0;
    result->y = 0.0;
    result->z = 0.0;
  }
  else
  {
    fLengthb = 1.0 / fLength;
    result->x = fLengthb * cross;
    result->y = fLengthb * cross_4;
    result->z = fLengthb * cross_8;
  }
  return v3;
}

//----- (004305A0) --------------------------------------------------------
int __thiscall Name3::operator__(Name3 *this, Name3 *nm)
{
  return *(_DWORD *)&this->n3_name[0] == *(_DWORD *)&nm->n3_name[0]
      && *(_DWORD *)&this->n3_name[4] == *(_DWORD *)&nm->n3_name[4]
      && *(_DWORD *)&this->n3_name[8] == *(_DWORD *)&nm->n3_name[8];
}

//----- (004305D0) --------------------------------------------------------
bool __cdecl Math3D::VectToZRot(NiPoint3 *kTargetVect, NiMatrix3 *kRot)
{
  float v2; // edx@1
  bool v3; // al@2
  NiPoint3 *v4; // eax@3
  float v5; // ecx@3
  float v6; // edx@3
  NiPoint3 *v7; // eax@3
  float v8; // ecx@3
  float v9; // edx@3
  NiPoint3 result; // [sp+0h] [bp-24h]@3
  NiPoint3 kYVect; // [sp+Ch] [bp-18h]@3
  NiPoint3 kXVect; // [sp+18h] [bp-Ch]@1
  float kTargetVecta; // [sp+2Ch] [bp+8h]@1
  float kTargetVectb; // [sp+2Ch] [bp+8h]@1

  v2 = kTargetVect->y;
  kXVect.x = kTargetVect->x;
  kXVect.z = 0.0;
  kXVect.y = v2;
  NiPoint3::Unitize(&kXVect);
  kTargetVecta = World::ms_kUpDir.x * kXVect.x + World::ms_kUpDir.y * kXVect.y + World::ms_kUpDir.z * kXVect.z;
  kTargetVectb = fabs(kTargetVecta);
  if ( 1.0 - kTargetVectb >= 0.0000009999999974752427 )
  {
    v4 = NiPoint3::UnitCross(&kXVect, &kYVect, &World::ms_kUpDir);
    v5 = v4->y;
    kXVect.x = v4->x;
    v6 = v4->z;
    kXVect.y = v5;
    kXVect.z = v6;
    v7 = NiPoint3::UnitCross(&World::ms_kUpDir, &result, &kXVect);
    v8 = v7->y;
    kYVect.x = v7->x;
    v9 = v7->z;
    kRot->m_pEntry[0][0] = kXVect.x;
    kYVect.y = v8;
    kYVect.z = v9;
    kRot->m_pEntry[1][0] = kXVect.y;
    kRot->m_pEntry[2][0] = kXVect.z;
    kRot->m_pEntry[0][1] = kYVect.x;
    kRot->m_pEntry[1][1] = kYVect.y;
    kRot->m_pEntry[2][1] = kYVect.z;
    kRot->m_pEntry[0][2] = World::ms_kUpDir.x;
    kRot->m_pEntry[1][2] = World::ms_kUpDir.y;
    kRot->m_pEntry[2][2] = World::ms_kUpDir.z;
    v3 = 1;
  }
  else
  {
    v3 = 0;
  }
  return v3;
}

//----- (004306D0) --------------------------------------------------------
void __thiscall ActionMgr::SetCurPlayActInfo(ActionMgr *this, ActionInfo *pkActionInfo)
{
  unsigned int v2; // edx@2

  this->m_pkCurPlayActInfo = pkActionInfo;
  if ( pkActionInfo )
  {
    v2 = pkActionInfo->uiEventCode;
    this->m_uiCurEventCode = v2;
    if ( 10000 * v2 / 0x2710 == 300000 )
      this->m_pkLastAttackActInfo = pkActionInfo;
  }
  ActorCallBack::SetCurrentActionInfo(&this->baseclass_0, this->m_pActor, pkActionInfo);
}

//----- (00430710) --------------------------------------------------------
bool __thiscall ActionMgr::GetEventCode(ActionMgr *this, const char *_szActionName, unsigned int *OUT_uiEventCode)
{
  ActionInfoSet *v3; // ecx@1
  ActionInfo *v4; // eax@2
  bool result; // al@3

  v3 = this->m_pkActInfoSet;
  if ( v3 && (v4 = ActionInfoSet::GetByInxName(v3, _szActionName)) != 0 )
  {
    *OUT_uiEventCode = v4->uiEventCode;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00430740) --------------------------------------------------------
int __thiscall Char::GetPrevHP(Char *this)
{
  return this->m_iPrevHP;
}

//----- (00430750) --------------------------------------------------------
void __thiscall Char::SetPrevHP(Char *this, int iHP)
{
  this->m_iPrevHP = iHP;
}

//----- (00430760) --------------------------------------------------------
void __thiscall Char::SetMode(Char *this, char byMode)
{
  Char *v2; // esi@1
  char v3; // bl@1

  v2 = this;
  v3 = ((int (*)(void))this->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)();
  v2->m_byMode = byMode;
  switch ( byMode )
  {
    case 2:
      v2->m_eStandMode = 1;
      break;
    case 3:
      Char::OnDead(v2);
      goto $LN2_18;
    default:
$LN2_18:
      v2->m_eStandMode = 0;
      break;
  }
  if ( v3 != (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v2) )
    v2->m_bIsChangeCampMode = 1;
}

//----- (004307E0) --------------------------------------------------------
bool __thiscall Char::IsAlive(Char *this)
{
  return this->m_byMode != 3;
}

//----- (004307F0) --------------------------------------------------------
char *__thiscall Char::GetName(Char *this)
{
  return this->m_acName;
}

//----- (00430800) --------------------------------------------------------
void __thiscall Char::SetName(Char *this, char *pcName)
{
  char *v2; // eax@1
  unsigned int v3; // edx@1
  char v4; // cl@2

  v2 = pcName;
  v3 = this->m_acName - pcName;
  do
  {
    v4 = *v2;
    v2[v3] = *v2;
    ++v2;
  }
  while ( v4 );
}

//----- (00430820) --------------------------------------------------------
int __thiscall Char::GetHP(Char *this)
{
  return this->m_iHP;
}

//----- (00430830) --------------------------------------------------------
int __thiscall Char::GetMaxHP(Char *this)
{
  return this->m_iMaxHP;
}

//----- (00430840) --------------------------------------------------------
int __thiscall Char::GetSP(Char *this)
{
  return this->m_iSP;
}

//----- (00430850) --------------------------------------------------------
int __thiscall Char::GetMaxSP(Char *this)
{
  return this->m_iMaxSP;
}

//----- (00430860) --------------------------------------------------------
int __thiscall Char::GetAP(Char *this)
{
  return this->m_iAP;
}

//----- (00430870) --------------------------------------------------------
int __thiscall Char::GetMaxAP(Char *this)
{
  return this->m_iMaxAP;
}

//----- (00430880) --------------------------------------------------------
int __thiscall Char::GetLP(Char *this)
{
  return this->m_iLP;
}

//----- (00430890) --------------------------------------------------------
int __thiscall Char::GetMaxLP(Char *this)
{
  return this->m_iMaxLP;
}

//----- (004308A0) --------------------------------------------------------
void __thiscall Char::SetMaxHP(Char *this, int iHP)
{
  this->m_iMaxHP = iHP;
}

//----- (004308B0) --------------------------------------------------------
void __thiscall Char::SetSP(Char *this, int iSP)
{
  this->m_iSP = iSP;
}

//----- (004308C0) --------------------------------------------------------
void __thiscall Char::SetMaxSP(Char *this, int iSP)
{
  this->m_iMaxSP = iSP;
}

//----- (004308D0) --------------------------------------------------------
void __thiscall Char::SetAP(Char *this, int iAP)
{
  this->m_iAP = iAP;
}

//----- (004308E0) --------------------------------------------------------
void __thiscall Char::SetMaxAP(Char *this, int iAP)
{
  this->m_iMaxAP = iAP;
}

//----- (004308F0) --------------------------------------------------------
void __thiscall Char::SetLP(Char *this, int iLP)
{
  this->m_iLP = iLP;
}

//----- (00430900) --------------------------------------------------------
void __thiscall ArrowEff::SetHitDamage(Char *this, int iLP)
{
  this->m_iMaxLP = iLP;
}

//----- (00430910) --------------------------------------------------------
int __thiscall Char::GetTOTHP(Char *this)
{
  return this->m_iTOTHP;
}

//----- (00430920) --------------------------------------------------------
int __thiscall Char::GetMaxTOTHP(Char *this)
{
  return this->m_iMaxTOTHP;
}

//----- (00430930) --------------------------------------------------------
void __thiscall Char::SetTOTHP(Char *this, int iHP)
{
  this->m_iTOTHP = iHP;
}

//----- (00430940) --------------------------------------------------------
void __thiscall Char::SetMaxTOTHP(Char *this, int iHP)
{
  this->m_iMaxTOTHP = iHP;
}

//----- (00430950) --------------------------------------------------------
void __thiscall Char::SetPos(Char *this, NiPoint3 *kPos)
{
  Char *v2; // esi@1

  v2 = this;
  this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos((NpNs_MoveToTarget *)&this->m_kMoveToTarget, kPos);
  v2->m_pos3CameraPos.x = kPos->x;
  v2->m_pos3CameraPos.y = kPos->y;
  v2->m_pos3CameraPos.z = kPos->z;
}

//----- (00430990) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetCameraPos(Char *this)
{
  return &this->m_pos3CameraPos;
}

//----- (004309A0) --------------------------------------------------------
void __thiscall Char::GetDir(Char *this, NiPoint3 *kDir)
{
  NpNs_SmoothRotateControler::GetDirection(&this->m_kSmoothRotater, kDir);
}

//----- (004309B0) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetDir(Char *this)
{
  return (NiPoint3 *)Wml::Segment3<double>::Direction((Wml::Segment3<double> *)&this->m_kSmoothRotater);
}

//----- (004309C0) --------------------------------------------------------
Char::MoveMode __thiscall Char::GetMoveMode(Char *this)
{
  return this->m_eMoveMode;
}

//----- (004309D0) --------------------------------------------------------
void __thiscall Char::SetMoveMode(Char *this, Char::MoveMode eMoveMode)
{
  this->m_eMoveMode = eMoveMode;
}

//----- (004309E0) --------------------------------------------------------
bool __thiscall Char::IsDuringMove(Char *this)
{
  return this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->IsMove((NpNs_MoveToTarget *)&this->m_kMoveToTarget);
}

//----- (00430A00) --------------------------------------------------------
bool __thiscall Char::IsDuringRotate(Char *this)
{
  return this->m_kSmoothRotater.m_bRotate;
}

//----- (00430A10) --------------------------------------------------------
void __thiscall Char::SetWalkSpeed(Char *this, float fSpeed)
{
  Char *v2; // esi@1
  AbStateInfecteeVtbl *v3; // eax@1

  v2 = this;
  v3 = this->baseclass_0.vfptr;
  this->m_fWalkSpeed = fSpeed;
  ((void (*)(void))v3[8].IsVisible)();
  MoveToTarget::ChangeSpeed(&v2->m_kMoveToTarget, fSpeed);
}

//----- (00430A40) --------------------------------------------------------
void __thiscall Char::SetRunSpeed(Char *this, float fSpeed)
{
  Char *v2; // esi@1
  AbStateInfecteeVtbl *v3; // eax@1

  v2 = this;
  v3 = this->baseclass_0.vfptr;
  this->m_fRunSpeed = fSpeed;
  ((void (*)(void))v3[8].AddAbStateByAbstateIndex)();
  MoveToTarget::ChangeSpeed(&v2->m_kMoveToTarget, fSpeed);
}

//----- (00430A70) --------------------------------------------------------
float __thiscall Char::GetWalkSpeed(Char *this)
{
  float v1; // ST00_4@1
  double v2; // st7@1
  float result; // st7@2

  v1 = this->m_fMoveSpeedRate * this->m_fWalkSpeed;
  v2 = v1;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (00430A90) --------------------------------------------------------
float __thiscall Char::GetRunSpeed(Char *this)
{
  float v1; // ST00_4@1
  double v2; // st7@1
  float result; // st7@2

  v1 = this->m_fMoveSpeedRate * this->m_fRunSpeed;
  v2 = v1;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (00430AB0) --------------------------------------------------------
void __thiscall Char::SetMoveSpeedRate(Char *this, float fMoveSpeedRate)
{
  double v2; // st7@0
  Char *v3; // esi@1
  float v4; // ST10_4@2
  AbStateInfectee::AbstateColor (__thiscall *v5)(AbStateInfectee *); // edx@1
  AbStateInfecteeVtbl *v6; // eax@2
  void *v7; // edx@3
  float fOldSpeed; // [sp+14h] [bp-4h]@1

  v3 = this;
  this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetSpeed((NpNs_MoveToTarget *)&this->m_kMoveToTarget);
  fOldSpeed = v2;
  ((void (__thiscall *)(Char *))v3->baseclass_0.vfptr[8].AddAbStateByAbstateIndex)(v3);
  v5 = v3->baseclass_0.vfptr[7].GetAbstateColor;
  v3->m_fMoveSpeedRate = fMoveSpeedRate;
  if ( (unsigned __int8)v5(&v3->baseclass_0).dwRGB )
  {
    v6 = v3->baseclass_0.vfptr;
    v4 = v2;
    if ( v4 == fOldSpeed )
      v7 = v6[8].AddAbStateByAbstateIndex;
    else
      v7 = v6[8].IsVisible;
    ((void (__thiscall *)(Char *))v7)(v3);
    MoveToTarget::ChangeSpeed(&v3->m_kMoveToTarget, fOldSpeed);
  }
  ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[12].SetAbStateProperty)(v3, v3->m_fMoveSpeedRate);
  ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[12].Deaffect)(v3, v3->m_fMoveSpeedRate);
}

//----- (00430B60) --------------------------------------------------------
float __thiscall Char::GetMoveSpeedRate(Char *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fMoveSpeedRate;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (00430B70) --------------------------------------------------------
void __thiscall Char::ActRideMove(Char *this)
{
  Char *v1; // esi@1
  ActionInfoSet *v2; // ecx@1
  ActionInfo *v3; // eax@2
  unsigned int uiActRide; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = this->m_kActionMgr.m_pkActInfoSet;
  if ( v2 && (v3 = ActionInfoSet::GetByInxName(v2, "Emotion_ActRide")) != 0 )
    Char::ActNonWeightAction(v1, v3->uiEventCode);
  else
    Char::ActNonWeightAction(v1, uiActRide);
}

//----- (00430BB0) --------------------------------------------------------
void __thiscall Char::ActRideStand(Char *this)
{
  Char *v1; // esi@1
  ActionInfoSet *v2; // ecx@1
  ActionInfo *v3; // eax@2
  unsigned int uiActPetSit; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = this->m_kActionMgr.m_pkActInfoSet;
  if ( v2 && (v3 = ActionInfoSet::GetByInxName(v2, "Emotion_ActPetSit")) != 0 )
    Char::ActNonWeightAction(v1, v3->uiEventCode);
  else
    Char::ActNonWeightAction(v1, uiActPetSit);
}

//----- (00430BF0) --------------------------------------------------------
void __thiscall Char::SetReservedHitDamage(Char *this, unsigned int uiDamage)
{
  this->m_uiHitDamage = uiDamage;
}

//----- (00430C00) --------------------------------------------------------
unsigned int __thiscall Char::GetReservedHitDamage(Char *this)
{
  return this->m_uiHitDamage;
}

//----- (00430C10) --------------------------------------------------------
bool __thiscall Char::IsChangeCampMode(Char *this)
{
  return this->m_bIsChangeCampMode;
}

//----- (00430C20) --------------------------------------------------------
bool __thiscall Char::IsCampMode(Char *this)
{
  char v1; // al@1
  bool result; // al@2

  v1 = this->m_byMode;
  if ( v1 == 4 )
    result = 1;
  else
    result = v1 == 5;
  return result;
}

//----- (00430C40) --------------------------------------------------------
bool __thiscall Char::IsIndividualStorageMode(Char *this)
{
  return this->m_byMode == 5;
}

//----- (00430C50) --------------------------------------------------------
void __thiscall Char::ChangeCampMode(Char *this, bool bCampMode, char byMode)
{
  Char *v3; // esi@1
  AbStateInfectee::AbstateColor (__thiscall *v4)(AbStateInfectee *); // eax@2
  void *(__thiscall *v5)(AbStateInfectee *, unsigned int); // eax@3

  v3 = this;
  if ( bCampMode )
  {
    Char::SetMode(this, byMode);
    v4 = v3->baseclass_0.vfptr[1].GetAbstateColor;
    v3->m_bIsChangeCampMode = 1;
    ((void (__thiscall *)(_DWORD, _DWORD))v4)(v3, 0);
  }
  else
  {
    Char::SetMode(this, 1);
    v5 = v3->baseclass_0.vfptr[1].__vecDelDtor;
    v3->m_bIsChangeCampMode = 1;
    v5(&v3->baseclass_0, 0);
  }
}

//----- (00430CA0) --------------------------------------------------------
int __thiscall Char::GetCharLevel(Char *this)
{
  return this->m_iCharLevel;
}

//----- (00430CB0) --------------------------------------------------------
void *__thiscall Pet::_vector_deleting_destructor_(Pet *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Pet::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Pet::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Pet::_vftable_;
  Char::_Char(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97EC90: using guessed type int (*Pet___vftable_[2])();
// 97ECB0: using guessed type int (__stdcall *Pet___vftable_)(int);
// 97ECBC: using guessed type int (__thiscall *Pet___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00430CF0) --------------------------------------------------------
unsigned int __cdecl ITableBase<MapInfo_MapInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (00430D10) --------------------------------------------------------
void __thiscall Char::InitPos(Char *this, NiPoint3 *kPos, NiPoint3 *kDir)
{
  Char *v3; // esi@1
  NiNode *v4; // eax@1
  float v5; // edx@1
  float v6; // eax@1
  NiPoint3 *v7; // eax@1
  NiMatrix3 kRot; // [sp+8h] [bp-30h]@1
  NiPoint3 kTargetDir; // [sp+2Ch] [bp-Ch]@1

  v3 = this;
  ((void (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr[5].__vecDelDtor)(kPos);
  v4 = v3->m_spScene.m_pObject;
  v4->baseclass_0.m_kLocal.m_Translate.x = kPos->x;
  v4->baseclass_0.m_kLocal.m_Translate.y = kPos->y;
  v4->baseclass_0.m_kLocal.m_Translate.z = kPos->z;
  ((void (__thiscall *)(Char *, NiPoint3 *))v3->baseclass_0.vfptr[6].Affect)(v3, kDir);
  v5 = kDir->y;
  v6 = kDir->z;
  kTargetDir.x = kDir->x;
  kTargetDir.y = v5;
  kTargetDir.z = v6;
  NpNs_SmoothRotateControler::GetTargetDirection(&v3->m_kSmoothRotater, &kTargetDir);
  v7 = (NiPoint3 *)Wml::Segment3<double>::Direction((Wml::Segment3<double> *)&v3->m_kSmoothRotater);
  Math3D::VectToZRot(v7, &kRot);
  memcpy(&v3->m_spScene.m_pObject->baseclass_0.m_kLocal, &kRot, 0x24u);
}

//----- (00430DB0) --------------------------------------------------------
void __thiscall Char::GetPos(Char *this, NiPoint3 *kPos)
{
  NiNode *v2; // eax@1

  v2 = this->m_spScene.m_pObject;
  if ( v2 )
  {
    kPos->x = v2->baseclass_0.m_kLocal.m_Translate.x;
    kPos->y = v2->baseclass_0.m_kLocal.m_Translate.y;
    kPos->z = v2->baseclass_0.m_kLocal.m_Translate.z;
  }
  else
  {
    this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCurrentPos(
      (NpNs_MoveToTarget *)&this->m_kMoveToTarget,
      kPos);
  }
}

//----- (00430DF0) --------------------------------------------------------
void __thiscall Char::GetDir(Char *this, NiMatrix3 *kMat)
{
  memcpy(kMat, &this->m_spScene.m_pObject->baseclass_0.m_kLocal, 0x24u);
}

//----- (00430E10) --------------------------------------------------------
bool __thiscall Char::IsRiding(Char *this)
{
  return this->m_kRidePetCtl.m_spPetActor.m_pObject || this->m_pkMover;
}

//----- (00430E30) --------------------------------------------------------
void __thiscall Char::SetScale(Char *this, float fScale)
{
  NiNode *v2; // eax@1
  float fScalea; // [sp+8h] [bp+8h]@2

  v2 = this->m_spScene.m_pObject;
  if ( v2 )
  {
    fScalea = fabs(fScale);
    v2->baseclass_0.m_kLocal.m_fScale = fScalea;
  }
}

//----- (00430E50) --------------------------------------------------------
PupMain *__cdecl PetMainTab::GetByPetID(unsigned int kPetID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  PupMain *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (PupMain *)CDataReader::GetRecord((CDataReader *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 4), v3);
      if ( result )
      {
        if ( result->PupID == kPetID )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A959F0: using guessed type int ITableBase_PupMain_PetMainTab___ms_pkTable;

//----- (00430EA0) --------------------------------------------------------
MapInfo *__cdecl MapInfoTab::GetByMapName(Name3 *kMapName)
{
  unsigned int v1; // edi@1
  void *v2; // eax@2
  MapInfo *result; // eax@6

  v1 = 0;
  if ( ITableBase<MapInfo_MapInfoTab>::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4), v1);
      if ( *(_DWORD *)((char *)v2 + 2) == *(_DWORD *)&kMapName->n3_name[0] )
      {
        if ( *(_DWORD *)((char *)v2 + 6) == *(_DWORD *)&kMapName->n3_name[4]
          && *(_DWORD *)((char *)v2 + 10) == *(_DWORD *)&kMapName->n3_name[8] )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<MapInfo_MapInfoTab>::GetTotal() )
        goto LABEL_6;
    }
    result = (MapInfo *)CDataReader::GetRecord((CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4), v1);
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (00430F00) --------------------------------------------------------
PupView *__cdecl PetViewTab::GetByPetIdx(const char *pcPetIdx)
{
  int v1; // eax@1
  unsigned int v2; // edi@1
  void *v3; // eax@5
  const char *v4; // esi@5
  int v5; // edx@6
  char v6; // cl@7
  unsigned int v7; // eax@8
  unsigned int v8; // ebx@8
  unsigned int v9; // esi@8
  unsigned int v10; // ecx@8
  unsigned int v11; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@10
  int v13; // eax@12
  bool v14; // zf@12
  signed int v15; // eax@14
  bool v16; // bl@17
  PupView *pkPetView; // [sp+0h] [bp-3Ch]@5
  unsigned int i; // [sp+8h] [bp-34h]@4
  unsigned int v20; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v22; // [sp+2Ch] [bp-10h]@1
  int v23; // [sp+38h] [bp-4h]@17
  int v24; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<PupView_PetViewTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v20 = *(_DWORD *)(v1 + 40);
  else
    v20 = 0;
  i = 0;
  if ( v20 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<PupView_PetViewTab>::ms_pkTable + 4), v2);
    v4 = (const char *)v3;
    pkPetView = (PupView *)v3;
    if ( v3 )
      break;
LABEL_21:
    ++v2;
    i = v2;
    if ( v2 >= v20 )
      return 0;
  }
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v5 = (int)((char *)v3 + 1);
  do
  {
    v6 = *(_BYTE *)v3;
    v3 = (char *)v3 + 1;
  }
  while ( v6 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this,
    v4,
    (unsigned int)((char *)v3 - v5));
  v7 = strlen(pcPetIdx);
  v8 = this.baseclass_0._Mysize;
  v9 = v7;
  v10 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v7 )
    v10 = v7;
  v11 = this.baseclass_0._Myres;
  v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v12 = &this;
  v13 = std::char_traits<char>::compare(v12->baseclass_0.___u0.baseclass_0.dummy, pcPetIdx, v10);
  v14 = v13 == 0;
  if ( !v13 )
  {
    if ( v8 >= v9 )
      v15 = v8 != v9;
    else
      v15 = -1;
    v14 = v15 == 0;
  }
  v16 = v14;
  v23 = -1;
  if ( v11 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v16 )
  {
    v2 = i;
    goto LABEL_21;
  }
  return pkPetView;
}
// A85C00: using guessed type int __security_cookie;
// A959F4: using guessed type int ITableBase_PupView_PetViewTab___ms_pkTable;

//----- (00431050) --------------------------------------------------------
void __thiscall PetNameEditWin::PetNameEditWin(PetNameEditWin *this)
{
  PetNameEditWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkOkBtn = 0;
  v1->m_pkNameEdit = 0;
  v1->m_kPetHandle = -1;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PetNameEditWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PetNameEditWin::_vftable_;
}
// 97F024: using guessed type int (__stdcall *PetNameEditWin___vftable_)(int uiFlags);
// 97F044: using guessed type int (__thiscall *PetNameEditWin___vftable_)(void *p, char);

//----- (00431090) --------------------------------------------------------
void __thiscall PetNameEditWin::_PetNameEditWin(PetNameEditWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PetNameEditWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PetNameEditWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97F024: using guessed type int (__stdcall *PetNameEditWin___vftable_)(int uiFlags);
// 97F044: using guessed type int (__thiscall *PetNameEditWin___vftable_)(void *p, char);

//----- (004310B0) --------------------------------------------------------
void __thiscall PetNameEditWin::UpdateMeWin(PetNameEditWin *this, float fCurTime)
{
  PetNameEditWin *v2; // esi@1
  int v3; // eax@3
  int v4; // edx@3
  char v5; // cl@4

  v2 = this;
  if ( this->m_pkOkBtn && this->m_pkNameEdit )
  {
    v3 = ((int (*)(void))this->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v4 = v3 + 1;
    do
      v5 = *(_BYTE *)v3++;
    while ( v5 );
    ((void (__stdcall *)(_DWORD))v2->m_pkOkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)((unsigned int)(v3 - v4) >= 4);
  }
}

//----- (00431100) --------------------------------------------------------
void __thiscall PetNameEditWin::OnShowWin(PetNameEditWin *this)
{
  PetNameEditWin *v1; // esi@1

  v1 = this;
  if ( this->m_pkNameEdit )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_97EFB7);
    ((void (*)(void))v1->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
}

//----- (00431140) --------------------------------------------------------
void __thiscall PetNameEditWin::OnClose(PetNameEditWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  if ( this->m_pkNameEdit )
    ((void (__stdcall *)(_DWORD))this->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  PgWin::OnClose(v1);
}

//----- (00431170) --------------------------------------------------------
void __thiscall PetNameEditWin::SetName(PetNameEditWin *this, const char *pcName)
{
  PetNameEditWin *v2; // esi@1

  v2 = this;
  if ( this->m_pkNameEdit )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(pcName);
    ((void (*)(void))v2->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
}

//----- (004311B0) --------------------------------------------------------
const char *__thiscall PetNameEditWin::GetName(PetNameEditWin *this)
{
  const char *result; // eax@2

  if ( this->m_pkNameEdit )
    result = (const char *)((int (*)(void))this->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (004311D0) --------------------------------------------------------
void __thiscall PetNameEditWin::SetPetHandle(PetNameEditWin *this, unsigned __int16 kPetHandle)
{
  this->m_kPetHandle = kPetHandle;
}

//----- (004311F0) --------------------------------------------------------
unsigned __int16 __thiscall PetNameEditWin::GetPetHandle(PetNameEditWin *this)
{
  return this->m_kPetHandle;
}

//----- (00431200) --------------------------------------------------------
void __thiscall PetNameEditWin::OnOk(PetNameEditWin *this)
{
  PetNameEditWin *v1; // esi@1
  char *v2; // eax@1
  int v3; // eax@3
  int v4; // edx@5
  char v5; // cl@6
  int v6; // esi@8

  v1 = this;
  v2 = (char *)((int (*)(void))this->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( !TextFilterTable::IsBadName(v2) )
  {
    v3 = v1->m_pkNameEdit ? ((int (*)(void))v1->m_pkNameEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)() : 0;
    v4 = v3 + 1;
    do
      v5 = *(_BYTE *)v3++;
    while ( v5 );
    if ( (unsigned int)(v3 - v4) >= 4 )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
      v6 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      if ( *(_DWORD *)(v6 + 4) )
      {
        (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v6 + 4) + 4))(79, 0, v6);
        if ( *(_DWORD *)(v6 + 4) )
          (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v6 + 4) + 20))(79, 0, v6);
      }
      (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v6 + 20))(v6, 79, 0, v6);
    }
  }
}

//----- (004312A0) --------------------------------------------------------
void __thiscall PetNameEditWin::OnCancel(PetNameEditWin *this)
{
  PetNameEditWin *v1; // esi@1
  int v2; // esi@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  v2 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( *(_DWORD *)(v2 + 4) )
  {
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v2 + 4) + 4))(81, 0, v2);
    if ( *(_DWORD *)(v2 + 4) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v2 + 4) + 20))(81, 0, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 81, 0, v2);
}

//----- (004312F0) --------------------------------------------------------
bool __thiscall PetNameEditWin::Create(PetNameEditWin *this, PgFrameWork *pkFrameWork)
{
  PetNameEditWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiNode *v8; // edi@10
  NiSourceTexture *v9; // eax@10
  PgSprData *v10; // eax@10
  PgWinSpr *v11; // eax@10
  PgSprData *v12; // eax@11
  PgSprData *v13; // edi@12
  PgWin *v14; // ST4C_4@12
  PgWin *v15; // edi@12
  PgFont *v16; // ST48_4@12
  unsigned int v17; // ST44_4@12
  unsigned int v18; // eax@12
  PgWinText *v19; // edi@12
  NiRefObjectVtbl *v20; // ebx@12
  char *v21; // eax@12
  PgSprData *v22; // edi@12
  PgWin *v23; // ST4C_4@12
  PgFont *v24; // ST48_4@12
  unsigned int v25; // ST44_4@12
  unsigned int v26; // eax@12
  PgWinText *v27; // edi@12
  NiRefObjectVtbl *v28; // ebx@12
  char *v29; // eax@12
  PgFont *v30; // ST48_4@12
  unsigned int v31; // ST44_4@12
  int v32; // eax@12
  PgWinText *v33; // edi@12
  NiRefObjectVtbl *v34; // ebx@12
  char *v35; // eax@12
  NiNode *v36; // esi@13
  unsigned int uiWidth; // [sp+44h] [bp-20h]@10
  unsigned int uiHeight; // [sp+48h] [bp-1Ch]@10
  int iLeft; // [sp+4Ch] [bp-18h]@4
  int iTop; // [sp+50h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v42; // [sp+60h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v42 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "PetNameEditWin", 0) )
  {
    v6 = spNode.m_pObject;
    v42 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = spNode.m_pObject;
  v9 = MenuTexMgr::GetTexture(0x13u);
  v10 = PgSprData::Create(&v8->baseclass_0, "Theme", &iLeft, &iTop, v9);
  v11 = PgWinSpr::CreateWin(iLeft, iTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "LotInput", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LotInput", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkNameEdit = EditWin::CreateWin(
                         iLeft + 2,
                         iTop + 4,
                         uiWidth,
                         uiHeight,
                         &v2->baseclass_0.baseclass_0.baseclass_0,
                         NORMAL,
                         0x10u,
                         3u,
                         0,
                         0,
                         1);
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &iLeft, &iTop, 0);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v14 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkOkBtn = (PgWinBut *)v14;
  v15 = v14;
  v16 = Font::Get(0);
  v17 = ((int (__thiscall *)(PgWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v15);
  v18 = ((int (__thiscall *)(PgWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v15);
  v19 = PgWinText::CreateWin(0, 0, v18, v17, v16, v14, 0, 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v19,
    5u);
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData3::Get(0x9403039u);
  v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor04", &iLeft, &iTop, 0);
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "BtnClick04");
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "BtnOver04");
  v23 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v24 = Font::Get(0);
  v25 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v23);
  v26 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v23);
  v27 = PgWinText::CreateWin(0, 0, v26, v25, v24, v23, 0, 0);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    5u);
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData3::Get(0xC2E04238u);
  v28[118].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v27,
    0);
  v30 = Font::Get(0);
  v31 = v30->m_uiDefHeight;
  v32 = ((int (__thiscall *)(PetNameEditWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v33 = PgWinText::CreateWin(8, 8, v32 - 16, v31, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  v34 = v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v35 = TextData3::Get(0x504B6C8Eu);
  ((void (__thiscall *)(PgWinText *, char *, _DWORD))v34[120].__vecDelDtor)(v33, v35, 0);
  ((void (__thiscall *)(PetNameEditWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v42 = -1;
  if ( spNode.m_pObject )
  {
    v36 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v36 )
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004316F0) --------------------------------------------------------
void __thiscall PetNameEditWin::OnCommand(PetNameEditWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      PetNameEditWin::OnCancel(this);
  }
  else
  {
    PetNameEditWin::OnOk(this);
  }
}

//----- (00431710) --------------------------------------------------------
PetNameEditWin *__cdecl PetNameEditWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PetNameEditWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x164u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &PetNameEditWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PetNameEditWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_WORD *)v2 + 176) = -1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PetNameEditWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97F024: using guessed type int (__stdcall *PetNameEditWin___vftable_)(int uiFlags);
// 97F044: using guessed type int (__thiscall *PetNameEditWin___vftable_)(void *p, char);

//----- (00431870) --------------------------------------------------------
void __thiscall IDirectMessenger::DirectDispatch(IDirectMessenger *this, int iMsgTag, void *pvBody, IDirectMessenger::DispatchTo eDispatch)
{
  IDirectMessenger *v4; // esi@1

  v4 = this;
  if ( this->m_pkMsgHooker )
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->m_pkMsgHooker->vfptr->SendDirectMessage)(iMsgTag, pvBody, this);
  if ( eDispatch )
  {
    if ( eDispatch == 1 )
    {
      if ( v4->m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          iMsgTag,
          pvBody,
          v4);
      v4->vfptr->DirectDispatchToParent(v4, iMsgTag, pvBody, v4);
    }
  }
  else
  {
    if ( v4->m_pkMsgHooker )
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->m_pkMsgHooker->vfptr->DirectDispatchToChildren)(
        iMsgTag,
        pvBody,
        v4);
    v4->vfptr->DirectDispatchToChildren(v4, iMsgTag, pvBody, v4);
  }
}

//----- (004318F0) --------------------------------------------------------
void *__thiscall PetNameEditWin::_vector_deleting_destructor_(PetNameEditWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PetNameEditWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PetNameEditWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97F024: using guessed type int (__stdcall *PetNameEditWin___vftable_)(int uiFlags);
// 97F044: using guessed type int (__thiscall *PetNameEditWin___vftable_)(void *p, char);

//----- (00431960) --------------------------------------------------------
NiAudioSource *__cdecl PgExternalLib::ClickSound()
{
  SoundIndex rkIndex; // [sp+0h] [bp-8h]@1

  rkIndex.m_dwIndex = 4;
  rkIndex.m_acFilename = 0;
  return SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
}

//----- (00431990) --------------------------------------------------------
NiAudioSource *__cdecl PgExternalLib::WindowOpenSound()
{
  NiAudioSource *result; // eax@2
  SoundIndex rkIndex; // [sp+0h] [bp-8h]@2

  if ( PgExternalLib::ms_bOpenSoundEnable )
  {
    rkIndex.m_dwIndex = 27;
    rkIndex.m_acFilename = 0;
    result = SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  }
  return result;
}
// B7048C: using guessed type char PgExternalLib__ms_bOpenSoundEnable;

//----- (004319D0) --------------------------------------------------------
NiAudioSource *__cdecl PgExternalLib::WindowCloseSound()
{
  NiAudioSource *result; // eax@2
  SoundIndex rkIndex; // [sp+0h] [bp-8h]@2

  if ( PgExternalLib::ms_bCloseSoundEnable )
  {
    rkIndex.m_dwIndex = 27;
    rkIndex.m_acFilename = 0;
    result = SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
    PgExternalLib::ms_bCloseSoundEnable = 0;
  }
  return result;
}
// B7048D: using guessed type char PgExternalLib__ms_bCloseSoundEnable;

//----- (00431A10) --------------------------------------------------------
NiAudioSource *__cdecl PgExternalLib::ConsonantSound()
{
  SoundIndex rkIndex; // [sp+0h] [bp-8h]@1

  rkIndex.m_dwIndex = 28;
  rkIndex.m_acFilename = 0;
  return SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
}

//----- (00431A40) --------------------------------------------------------
NiAudioSource *__cdecl PgExternalLib::VowelSound()
{
  SoundIndex rkIndex; // [sp+0h] [bp-8h]@1

  rkIndex.m_dwIndex = 29;
  rkIndex.m_acFilename = 0;
  return SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
}

//----- (00431A80) --------------------------------------------------------
void __thiscall Picking::Picking(Picking *this)
{
  Picking *v1; // esi@1

  v1 = this;
  NsABVPicking::NsABVPicking(&this->baseclass_0);
  v1->baseclass_0.m_ePickType = 0;
  v1->baseclass_0.m_eSortType = 0;
  v1->baseclass_0.m_eIntersectType = 0;
  *(_DWORD *)&v1->baseclass_0.m_bReturnTexture = 0;
  v1->baseclass_0.m_eCoordinateType = 1;
  *(_WORD *)&v1->baseclass_0.m_bFrontOnly = 1;
}

//----- (00431AB0) --------------------------------------------------------
bool __thiscall Picking::FirstPick(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir)
{
  this->baseclass_0.m_ePickType = 1;
  this->baseclass_0.m_eSortType = 1;
  return NsABVPicking::PickObjects(&this->baseclass_0, kOrigin, kDir, 0);
}

//----- (00431AE0) --------------------------------------------------------
bool __thiscall Picking::BestPick(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir)
{
  this->baseclass_0.m_ePickType = 0;
  this->baseclass_0.m_eSortType = 0;
  return NsABVPicking::PickObjects(&this->baseclass_0, kOrigin, kDir, 0);
}

//----- (00431B00) --------------------------------------------------------
bool __thiscall Picking::GetNormal(Picking *this, NiPoint3 *kNormal, unsigned int uiIndex)
{
  bool result; // al@2
  NsABVPicking::Record *v4; // eax@3

  if ( uiIndex < this->baseclass_0.m_pickResults.m_uiESize
    && (v4 = this->baseclass_0.m_pickResults.m_pBase[uiIndex]) != 0 )
  {
    kNormal->x = v4->m_normal.x;
    kNormal->y = v4->m_normal.y;
    kNormal->z = v4->m_normal.z;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00431B40) --------------------------------------------------------
float __thiscall Picking::GetDistance(Picking *this, unsigned int uiIndex)
{
  double v2; // st7@2
  NsABVPicking::Record *v3; // eax@3
  float result; // st7@5

  if ( uiIndex < this->baseclass_0.m_pickResults.m_uiESize
    && (v3 = this->baseclass_0.m_pickResults.m_pBase[uiIndex]) != 0 )
    v2 = v3->m_fDistance;
  else
    v2 = -1.0;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (00431B70) --------------------------------------------------------
bool __thiscall Picking::GetIntersection(Picking *this, NiPoint3 *kPos, unsigned int uiIndex)
{
  NsABVPicking::Record *v3; // eax@1
  bool result; // al@2

  v3 = this->baseclass_0.m_pickResults.m_pBase[uiIndex];
  if ( v3 )
  {
    kPos->x = v3->m_intersect.x;
    kPos->y = v3->m_intersect.y;
    kPos->z = v3->m_intersect.z;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00431BA0) --------------------------------------------------------
bool __thiscall Picking::PickGround(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir)
{
  this->baseclass_0.m_ePickType = 0;
  this->baseclass_0.m_eSortType = 0;
  this->baseclass_0.m_eIntersectType = 1;
  return NsABVPicking::PickObjects(&this->baseclass_0, kOrigin, kDir, 0);
}

//----- (00431BD0) --------------------------------------------------------
bool __thiscall Picking::PickCharacter(Picking *this, NiPoint3 *kOrigin, NiPoint3 *kDir)
{
  this->baseclass_0.m_ePickType = 0;
  this->baseclass_0.m_eSortType = 0;
  this->baseclass_0.m_eIntersectType = 2;
  return NsABVPicking::PickObjects(&this->baseclass_0, kOrigin, kDir, 0);
}

//----- (00431C00) --------------------------------------------------------
NiAVObject *__thiscall Picking::GetAVObject(Picking *this, unsigned int uiIndex)
{
  NiAVObject *result; // eax@2
  NiAVObject **v3; // eax@3

  if ( uiIndex < this->baseclass_0.m_pickResults.m_uiESize
    && (v3 = (NiAVObject **)this->baseclass_0.m_pickResults.m_pBase[uiIndex]) != 0 )
    result = *v3;
  else
    result = 0;
  return result;
}

//----- (00431C40) --------------------------------------------------------
int __cdecl PgProfile::Report()
{
  PgProfileNode *v0; // esi@1
  _iobuf *i; // edi@1

  v0 = PgProfileMgr::StartTraversal();
  for ( i = fopen("profile.txt", "w"); v0; v0 = PgProfileMgr::GetNext(v0) )
    fprintf(i, "%s: calls(%u) time(%f) \n");
  return fclose(i);
}

//----- (00431CC0) --------------------------------------------------------
void __thiscall PuzzleTimeWin::ResetTime(PuzzleTimeWin *this, unsigned int second)
{
  PuzzleTimeWin *v2; // ebx@1
  int v3; // esi@1
  signed int v4; // edi@1
  int v5; // esi@3
  signed int v6; // edi@3

  v2 = this;
  PuzzleTimeWin::m_second = second;
  CNSTimer_Interval::ReSet(&this->m_kTimer, Timer::ms_fCurTime);
  v2->m_kTimer.m_fCheckTime = 1.0;
  v3 = (int)v2->m_pkSec01;
  v4 = 6;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 - 64) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  v5 = (int)v2->m_pkSec02;
  v6 = 10;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 - 64) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0);
    v5 += 4;
    --v6;
  }
  while ( v6 );
}
// A959FC: using guessed type unsigned int PuzzleTimeWin__m_second;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00431D60) --------------------------------------------------------
void __thiscall PuzzleTimeWin::UpdateMeWin(PuzzleTimeWin *this, float fCurTime)
{
  int v2; // ebx@0
  int v3; // edi@0
  PuzzleTimeWin *v4; // esi@1
  unsigned int v5; // edi@3
  char *v6; // eax@6
  unsigned int v7; // ebx@9
  unsigned int v8; // ecx@9
  unsigned int v9; // edi@9
  unsigned int v10; // ebx@9
  PgWinSpr *v11; // ecx@10
  PgWinSpr *v12; // ecx@13
  PgWinSpr *v13; // ecx@16
  PgWinSpr *v14; // ecx@19
  int v15; // [sp+4h] [bp-10h]@2
  int v16; // [sp+8h] [bp-Ch]@2
  int v17; // [sp+Ch] [bp-8h]@0
  unsigned int dSec02; // [sp+10h] [bp-4h]@9
  unsigned int dMin02; // [sp+1Ch] [bp+8h]@9

  v4 = this;
  if ( PuzzleTimeWin::m_second )
  {
    v16 = v2;
    v15 = v3;
    if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimer, fCurTime) )
    {
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v4,
        1u);
      v5 = PuzzleTimeWin::m_second-- - 1;
    }
    else
    {
      v5 = PuzzleTimeWin::m_second;
    }
    if ( v5 == 10 )
    {
      SpEffect::Start(v4->m_pkFireEffect, &v4->m_pkTimer->baseclass_0.baseclass_0);
      v6 = (char *)&v4->m_kFireSound;
      if ( v4->m_kFireSound.baseclass_0._Myres >= 0x10 )
        v6 = *(char **)v6;
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v6);
      v5 = PuzzleTimeWin::m_second;
    }
    v7 = v5 / 0x3C % 0x3C;
    v8 = v5 % 0x3C;
    v9 = v7 / 0xA;
    dMin02 = v7 % 0xA;
    v10 = v8 / 0xA;
    dSec02 = v8 % 0xA;
    if ( v9 == 5 )
      v11 = v4->m_pkMin01[0];
    else
      v11 = v4->m_pkMin01[v9 + 1];
    ((void (__stdcall *)(_DWORD, int, int, int))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      0,
      v15,
      v16,
      v17);
    if ( dMin02 == 9 )
      v12 = v4->m_pkMin02[0];
    else
      v12 = v4->m_pkMin02[dMin02 + 1];
    ((void (__stdcall *)(_DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    if ( v10 == 5 )
      v13 = v4->m_pkSec01[0];
    else
      v13 = v4->m_pkSec01[v10 + 1];
    ((void (__stdcall *)(_DWORD))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    if ( dSec02 == 9 )
      v14 = v4->m_pkSec02[0];
    else
      v14 = v4->m_pkSec02[dSec02 + 1];
    ((void (__cdecl *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__thiscall *)(PgWinSpr *))v4->m_pkMin01[v9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4->m_pkMin01[v9]);
    ((void (__cdecl *)(signed int))v4->m_pkMin02[dMin02]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v4->m_pkSec01[v10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v4->m_pkSec01[v10],
      1u);
    v4->m_pkSec02[dSec02]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v4->m_pkSec02[dSec02],
      1u);
  }
}
// 431D60: could not find valid save-restore pair for ebx
// 431D60: could not find valid save-restore pair for edi
// A959FC: using guessed type unsigned int PuzzleTimeWin__m_second;

//----- (00431F30) --------------------------------------------------------
void __thiscall PuzzleTimeWin::PuzzleTimeWin(PuzzleTimeWin *this)
{
  PuzzleTimeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PuzzleTimeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PuzzleTimeWin::_vftable_;
  v1->m_kFireSound.baseclass_0._Myres = 15;
  v1->m_kFireSound.baseclass_0._Mysize = 0;
  v1->m_kFireSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimer);
}
// 97F31C: using guessed type int (__stdcall *PuzzleTimeWin___vftable_)(int uiFlags);
// 97F33C: using guessed type int (__thiscall *PuzzleTimeWin___vftable_)(void *p, char);

//----- (00431FB0) --------------------------------------------------------
void __thiscall PuzzleTimeWin::_PuzzleTimeWin(PuzzleTimeWin *this)
{
  PuzzleTimeWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PuzzleTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PuzzleTimeWin::_vftable_;
  if ( this->m_kFireSound.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kFireSound.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_kFireSound.baseclass_0._Myres = 15;
  v1->m_kFireSound.baseclass_0._Mysize = 0;
  v1->m_kFireSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97F31C: using guessed type int (__stdcall *PuzzleTimeWin___vftable_)(int uiFlags);
// 97F33C: using guessed type int (__thiscall *PuzzleTimeWin___vftable_)(void *p, char);

//----- (00432000) --------------------------------------------------------
PuzzleTimeWin *__cdecl PuzzleTimeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PuzzleTimeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x218u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &PuzzleTimeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PuzzleTimeWin::_vftable_;
    *((_DWORD *)v2 + 125) = 15;
    *((_DWORD *)v2 + 124) = 0;
    *((_BYTE *)v2 + 480) = 0;
    LOBYTE(v6) = 2;
    CNSTimer_Interval::CNSTimer_Interval((CNSTimer_Interval *)((char *)v2 + 508));
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 3;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PuzzleTimeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97F31C: using guessed type int (__stdcall *PuzzleTimeWin___vftable_)(int uiFlags);
// 97F33C: using guessed type int (__thiscall *PuzzleTimeWin___vftable_)(void *p, char);

//----- (00432160) --------------------------------------------------------
bool __thiscall PuzzleTimeWin::Create(PuzzleTimeWin *this, PgFrameWork *pkFrameWork)
{
  PuzzleTimeWin *v2; // edi@1
  signed int v3; // ebx@1
  NiTexturePalette *v4; // esi@1
  char *v5; // eax@3
  PgSprData *v6; // eax@4
  PgSprData *v7; // esi@4
  PgWinSpr *v8; // eax@4
  NiNode *v9; // esi@5
  PgSprData *v11; // eax@10
  PgWinSpr *v12; // eax@10
  NiNode *v13; // esi@11
  char *v14; // eax@11
  PgSprData *v15; // eax@11
  PgWinSpr *v16; // esi@11
  NiNode *v17; // esi@11
  char *v18; // eax@11
  PgSprData *v19; // eax@11
  PgWinSpr *v20; // esi@11
  signed int v21; // ebx@12
  NiNode *v22; // esi@13
  char *v23; // eax@13
  PgSprData *v24; // eax@13
  PgWinSpr *v25; // esi@13
  NiNode *v26; // esi@13
  char *v27; // eax@13
  PgSprData *v28; // eax@13
  PgWinSpr *v29; // esi@13
  unsigned int v30; // eax@14
  NiRefObjectVtbl *v31; // esi@14
  int v32; // eax@14
  int v33; // eax@16
  char v34; // cl@17
  char *v35; // eax@18
  char v36; // cl@19
  int v37; // edx@20
  int v38; // ecx@20
  int v39; // edx@20
  NiObject *v40; // ebx@20
  void *v41; // esi@20
  NiObject *v42; // eax@21
  NiNode *v43; // esi@24
  NiPointer<NiNode> spNode; // [sp+40h] [bp-18h]@1
  int uiLeft; // [sp+44h] [bp-14h]@4
  int uiTop; // [sp+48h] [bp-10h]@4
  int v47; // [sp+54h] [bp-4h]@1
  int pkFrameWorka; // [sp+60h] [bp+8h]@10
  int pkFrameWorkb; // [sp+60h] [bp+8h]@12

  v2 = this;
  v3 = 0;
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v47 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "\\Game\\StopWatch.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v7 = v6;
  v8 = PgWinSpr::CreateWin(uiLeft, uiTop, v6, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTimer = v8;
  v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v8,
    0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "PuzzleTimeWin", 0) )
  {
    v9 = spNode.m_pObject;
    v47 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
    return 0;
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  pkFrameWorka = (int)v2->m_pkSec01;
  do
  {
    v13 = spNode.m_pObject;
    v14 = fs("Num01_%d");
    v15 = PgSprData::Create(&v13->baseclass_0, v14, &uiLeft, &uiTop, 0);
    v16 = PgWinSpr::CreateWin(uiLeft, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v16,
      0);
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v16,
      0);
    *(_DWORD *)(pkFrameWorka - 64) = v16;
    v17 = spNode.m_pObject;
    v18 = fs("Num03_%d");
    v19 = PgSprData::Create(&v17->baseclass_0, v18, &uiLeft, &uiTop, 0);
    v20 = PgWinSpr::CreateWin(uiLeft, uiTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    *(_DWORD *)pkFrameWorka = v20;
    ++v3;
    pkFrameWorka += 4;
  }
  while ( v3 < 6 );
  v21 = 0;
  pkFrameWorkb = (int)v2->m_pkSec02;
  do
  {
    v22 = spNode.m_pObject;
    v23 = fs("Num02_%d");
    v24 = PgSprData::Create(&v22->baseclass_0, v23, &uiLeft, &uiTop, 0);
    v25 = PgWinSpr::CreateWin(uiLeft, uiTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    *(_DWORD *)(pkFrameWorkb - 64) = v25;
    v26 = spNode.m_pObject;
    v27 = fs("Num04_%d");
    v28 = PgSprData::Create(&v26->baseclass_0, v27, &uiLeft, &uiTop, 0);
    v29 = PgWinSpr::CreateWin(uiLeft, uiTop, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    *(_DWORD *)pkFrameWorkb = v29;
    ++v21;
    pkFrameWorkb += 4;
  }
  while ( v21 < 10 );
  v30 = ((int (*)(void))v2->m_pkTimer->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  ((void (__thiscall *)(PuzzleTimeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    (v30 >> 1) + (PgWin::ms_uiScreenWidth >> 1),
    PgWin::ms_uiScreenHeight,
    1.0,
    0.0);
  v31 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v32 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
               (NiRefObject *)v2,
               70u);
  v31[77].__vecDelDtor((NiRefObject *)v2, v32);
  if ( !Folder::m_bInit )
    Folder::Init();
  v33 = 0;
  do
  {
    v34 = *(&Folder::m_acEffect + v33);
    *(&Folder::m_acMerge + v33++) = v34;
  }
  while ( v34 );
  v35 = &Folder::m_acMerge - 1;
  do
    v36 = (v35++)[1];
  while ( v36 );
  v37 = dword_97F2F8;
  *(_DWORD *)v35 = dword_97F2F4;
  v38 = dword_97F2FC;
  *((_DWORD *)v35 + 1) = v37;
  v39 = dword_97F300;
  *((_DWORD *)v35 + 2) = v38;
  LOWORD(v38) = word_97F304;
  *((_DWORD *)v35 + 3) = v39;
  *((_WORD *)v35 + 8) = v38;
  v40 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
  v41 = operator new(0x44u);
  LOBYTE(v47) = 1;
  if ( v41 )
  {
    v42 = NiObject::Clone(v40);
    SpEffect::SpEffect((SpEffect *)v41, (NiNode *)v42);
  }
  else
  {
    v42 = 0;
  }
  LOBYTE(v47) = 0;
  v2->m_pkFireEffect = (SpEffect *)v42;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2->m_kFireSound, "StopWatchFire", 0xDu);
  v47 = -1;
  if ( spNode.m_pObject )
  {
    v43 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v43 )
        v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
    }
  }
  return 1;
}
// 97F2F4: using guessed type int dword_97F2F4;
// 97F2F8: using guessed type int dword_97F2F8;
// 97F2FC: using guessed type int dword_97F2FC;
// 97F300: using guessed type int dword_97F300;
// 97F304: using guessed type __int16 word_97F304;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004325A0) --------------------------------------------------------
void *__thiscall PuzzleTimeWin::_scalar_deleting_destructor_(PuzzleTimeWin *this, unsigned int a2)
{
  PuzzleTimeWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PuzzleTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PuzzleTimeWin::_vftable_;
  if ( this->m_kFireSound.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kFireSound.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_kFireSound.baseclass_0._Myres = 15;
  v2->m_kFireSound.baseclass_0._Mysize = 0;
  v2->m_kFireSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97F31C: using guessed type int (__stdcall *PuzzleTimeWin___vftable_)(int uiFlags);
// 97F33C: using guessed type int (__thiscall *PuzzleTimeWin___vftable_)(void *p, char);

//----- (00432610) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::_RandomOptCountRecoverWin(RandomOptCountRecoverWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RandomOptCountRecoverWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RandomOptCountRecoverWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97F6D4: using guessed type int (__stdcall *RandomOptCountRecoverWin___vftable_)(int uiFlags);
// 97F6F4: using guessed type int (__thiscall *RandomOptCountRecoverWin___vftable_)(void *p, char);

//----- (00432630) --------------------------------------------------------
RandomOptCountRecoverWin *__cdecl RandomOptCountRecoverWin::Modal(RandomOptCountRecoverWin *pkWin)
{
  if ( pkWin )
    PgWinMgr::DoModal(&Pgg_kWinMgr, &pkWin->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  return pkWin;
}

//----- (00432660) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::OnAddtionCount(RandomOptCountRecoverWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_uiReqRecoverCount;
  if ( v1 < this->m_uiCurAbleRecoverCount )
  {
    if ( v1 )
    {
      this->m_uiReqRecoverCount = v1 + 1;
      this->m_bChangedRecoverReqCount = 1;
    }
  }
}

//----- (00432690) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::OnSubtractionCount(RandomOptCountRecoverWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_uiReqRecoverCount;
  if ( v1 <= this->m_uiCurAbleRecoverCount )
  {
    if ( v1 > 1 )
    {
      this->m_uiReqRecoverCount = v1 - 1;
      this->m_bChangedRecoverReqCount = 1;
    }
  }
}

//----- (004326D0) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::SetInvenSlotLock(RandomOptCountRecoverWin *this, bool _bLock)
{
  RandomOptCountRecoverWin *v2; // esi@1
  void *v3; // edi@1
  IconSlotWin *v4; // eax@2
  unsigned int v5; // ecx@2
  InvWin *v6; // ecx@4

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[19].m_BackFrameID;
  if ( v3 )
  {
    v4 = v2->m_apkRecoverCountItemWin;
    v5 = v4->m_kContentsDetail.kItem.uiSenderIndex;
    if ( !v4->m_kContentsDetail.kItem.uiSenderType )
    {
      if ( v5 < 0xC0 )
      {
        v6 = (InvWin *)*((_DWORD *)v3 + v5 + 87);
        if ( v6 )
          InvWin::SetLock(v6, _bLock);
      }
      if ( !_bLock )
        *((_DWORD *)v3 + 371) = -1;
    }
  }
}

//----- (00432740) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::OnApply(RandomOptCountRecoverWin *this)
{
  RandomOptCountRecoverWin *v1; // esi@1
  unsigned int v2; // eax@1
  IconSlotWin *v3; // eax@4
  PgFrameWork *v4; // esi@6
  char *v5; // eax@6

  v1 = this;
  v2 = this->m_uiReqRecoverCount;
  if ( v2 < 1 || v2 > this->m_uiRecoverItemTotalCount )
  {
    v4 = this->baseclass_0.m_pkFrameWork;
    v5 = TextData3::Get(0x97BEF7C3u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
  }
  else
  {
    if ( PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[19].m_BackFrameID )
    {
      v3 = v1->m_apkRecoverCountItemWin;
      if ( !v3->m_kContentsDetail.kItem.uiSenderType )
        GameFrameWork::NcItemRandomOptRecoverCountLimitReq(
          (GameFrameWork *)v1->baseclass_0.m_pkFrameWork,
          v3->m_kContentsDetail.kItem.uiSenderIndex,
          v1->m_uiReqRecoverCount);
    }
  }
}

//----- (004327C0) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::UpdateMeWin(RandomOptCountRecoverWin *this, float fCurTime)
{
  RandomOptCountRecoverWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  NiRefObjectVtbl *v5; // edi@2
  char *v6; // eax@2
  char *v7; // eax@2
  NiRefObjectVtbl *v8; // edi@2
  char *v9; // eax@2
  char *v10; // eax@2

  v2 = this;
  if ( this->m_bChangedRecoverReqCount )
  {
    v3 = this->m_pkText_Count->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = fs("%d");
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkText_Count, (unsigned int)v4);
    v5 = v2->m_pkText_Notice_01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = TextData3::Get(0x636E9D6Du);
    v7 = fs(v6);
    v5[118].__vecDelDtor((NiRefObject *)v2->m_pkText_Notice_01, (unsigned int)v7);
    v8 = v2->m_pkText_Notice_02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = TextData3::Get(0x646E9D6Du);
    v10 = fs(v9);
    v8[118].__vecDelDtor((NiRefObject *)v2->m_pkText_Notice_02, (unsigned int)v10);
    v2->m_bChangedRecoverReqCount = 0;
  }
}

//----- (00432870) --------------------------------------------------------
bool __thiscall RandomOptCountRecoverWin::SetRecoverCountItemSlot(RandomOptCountRecoverWin *this, unsigned int _uiReceiverInvIndex, Item *_pkRecoverCountItem)
{
  RandomOptCountRecoverWin *v3; // esi@1
  void *v4; // edi@1
  bool result; // al@2
  int (__thiscall *v6)(_DWORD); // eax@3
  unsigned int v7; // eax@3
  IconSlotWin *v8; // ecx@3
  void *v9; // ecx@3
  IconSlotWin *v10; // eax@4
  InvWin *v11; // ecx@5
  unsigned int v12; // eax@7
  unsigned int v13; // ecx@7
  PgWinText *v14; // edx@9
  NiRefObjectVtbl *v15; // edi@9
  char *v16; // eax@9
  NiRefObjectVtbl *v17; // edi@9
  char *v18; // eax@9
  char *v19; // eax@9
  PgWinText *v20; // ecx@9
  NiRefObjectVtbl *v21; // edi@9
  char *v22; // eax@9
  DropContents pkDropContents; // [sp+0h] [bp-54h]@3
  int v24; // [sp+50h] [bp-4h]@3

  v3 = this;
  v4 = _pkRecoverCountItem;
  if ( _pkRecoverCountItem )
  {
    IconSlotWin::SetItem(this->m_apkRecoverCountItemWin, _pkRecoverCountItem, 0, 1);
    pkDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
    pkDropContents.m_kItemID = -1;
    pkDropContents.m_uiLot = 0;
    v6 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v4 + 12);
    pkDropContents.m_uiSenderIndex = _uiReceiverInvIndex;
    v24 = 0;
    pkDropContents.m_eSenderType = 0;
    pkDropContents.m_eType = 0;
    pkDropContents.m_apvParam[0] = v4;
    pkDropContents.m_apvParam[1] = 0;
    v7 = v6(v4);
    v8 = v3->m_apkRecoverCountItemWin;
    pkDropContents.m_uiLot = v7;
    IconSlotWin::SetDropContents(v8, &pkDropContents);
    v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[19].m_BackFrameID;
    if ( v9 )
    {
      v10 = v3->m_apkRecoverCountItemWin;
      if ( *(_QWORD *)&v10->m_kContentsDetail.kItem.uiSenderIndex < 0xC0ui64 )
      {
        v11 = (InvWin *)*((_DWORD *)v9 + v10->m_kContentsDetail.kItem.uiSenderIndex + 87);
        if ( v11 )
          InvWin::SetLock(v11, 1);
      }
    }
    v3->m_uiCurAbleRecoverCount = (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 72))(v4);
    v12 = Inventory::GetRandomOptRecoverItemCount(&g_kInventory, (ITEM_INVEN *)&_pkRecoverCountItem);
    v13 = v3->m_uiCurAbleRecoverCount;
    v3->m_uiRecoverItemTotalCount = v12;
    if ( v13 <= v12 )
      v12 = v13;
    v14 = v3->m_pkText_Count;
    v3->m_uiReqRecoverCount = v12;
    v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = fs("%d");
    v15[118].__vecDelDtor((NiRefObject *)v3->m_pkText_Count, (unsigned int)v16);
    v17 = v3->m_pkText_Notice_01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    *(&pkDropContents.m_uiLot + 1) = v3->m_uiReqRecoverCount;
    v18 = TextData3::Get(0x636E9D6Du);
    v19 = fs(v18);
    v20 = v3->m_pkText_Notice_01;
    *(&pkDropContents.m_uiLot + 1) = (unsigned int)v19;
    v17[118].__vecDelDtor((NiRefObject *)v20, (unsigned int)v19);
    v21 = v3->m_pkText_Notice_02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    *(&pkDropContents.m_uiLot + 1) = v3->m_uiReqRecoverCount;
    v22 = TextData3::Get(0x646E9D6Du);
    *(&pkDropContents.m_uiLot + 1) = (unsigned int)fs(v22);
    ((void (__cdecl *)(_DWORD))v21[118].__vecDelDtor)(*(&pkDropContents.m_uiLot + 1));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);

//----- (00432A30) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::ResetAllData(RandomOptCountRecoverWin *this)
{
  RandomOptCountRecoverWin *v1; // esi@1
  void *v2; // edi@1
  IconSlotWin *v3; // eax@2
  unsigned int v4; // ecx@2
  InvWin *v5; // ecx@4
  PgWinText *v6; // ecx@7
  NiRefObjectVtbl *v7; // edi@7
  char *v8; // eax@7
  NiRefObjectVtbl *v9; // edi@7
  char *v10; // eax@7
  char *v11; // eax@7
  NiRefObjectVtbl *v12; // edi@7
  char *v13; // eax@7
  char *v14; // eax@7

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[19].m_BackFrameID;
  if ( v2 )
  {
    v3 = v1->m_apkRecoverCountItemWin;
    v4 = v3->m_kContentsDetail.kItem.uiSenderIndex;
    if ( !v3->m_kContentsDetail.kItem.uiSenderType )
    {
      if ( v4 < 0xC0 )
      {
        v5 = (InvWin *)*((_DWORD *)v2 + v4 + 87);
        if ( v5 )
          InvWin::SetLock(v5, 0);
      }
      *((_DWORD *)v2 + 371) = -1;
    }
  }
  IconSlotWin::Clear(v1->m_apkRecoverCountItemWin);
  v6 = v1->m_pkText_Count;
  v1->m_uiCurAbleRecoverCount = 0;
  v1->m_uiRecoverItemTotalCount = 0;
  v1->m_uiReqRecoverCount = 0;
  v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v8 = fs("%d");
  v7[118].__vecDelDtor((NiRefObject *)v1->m_pkText_Count, (unsigned int)v8);
  v9 = v1->m_pkText_Notice_01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v10 = TextData3::Get(0x636E9D6Du);
  v11 = fs(v10);
  v9[118].__vecDelDtor((NiRefObject *)v1->m_pkText_Notice_01, (unsigned int)v11);
  v12 = v1->m_pkText_Notice_02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = TextData3::Get(0x646E9D6Du);
  v14 = fs(v13);
  v12[118].__vecDelDtor((NiRefObject *)v1->m_pkText_Notice_02, (unsigned int)v14);
}

//----- (00432B50) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::ShowRecoverCountResult(RandomOptCountRecoverWin *this, bool _bSuccess)
{
  RandomOptCountRecoverWin *v2; // esi@1
  GameFrameWork *v3; // edi@3
  char *v4; // eax@3
  char *v5; // eax@3

  v2 = this;
  if ( _bSuccess && IconSlotWin::GetItem(this->m_apkRecoverCountItemWin) )
  {
    v3 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
    v4 = TextData3::Get(0x87819CBEu);
    v5 = fs(v4);
    GameFrameWork::AddSysMsg(v3, v5);
  }
  RandomOptCountRecoverWin::ResetAllData(v2);
}

//----- (00432BB0) --------------------------------------------------------
bool __thiscall RandomOptCountRecoverWin::Create(RandomOptCountRecoverWin *this, PgFrameWork *pkFrameWork)
{
  RandomOptCountRecoverWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  int v6; // edi@5
  NiSourceTexture *v7; // eax@5
  PgSprData *v8; // eax@8
  NiSourceTexture *v9; // edi@8
  NiNode *v10; // esi@10
  D3DXCOLOR v12; // ST1C_16@15
  char *v13; // eax@15
  D3DXCOLOR v14; // ST1C_16@15
  char *v15; // eax@15
  D3DXCOLOR v16; // ST1C_16@15
  char *v17; // eax@15
  PgWin *v18; // eax@15
  IconSlotWin *v19; // eax@15
  D3DXCOLOR v20; // ST1C_16@15
  char *v21; // eax@15
  D3DXCOLOR v22; // ST14_16@15
  PgWinText *v23; // eax@15
  NiRefObjectVtbl *v24; // edi@15
  char *v25; // eax@15
  D3DXCOLOR v26; // ST14_16@15
  PgWinText *v27; // eax@15
  NiRefObjectVtbl *v28; // edi@15
  char *v29; // eax@15
  char *v30; // eax@15
  D3DXCOLOR v31; // ST14_16@15
  PgWinText *v32; // eax@15
  NiRefObjectVtbl *v33; // edi@15
  char *v34; // eax@15
  char *v35; // eax@15
  NiNode *v36; // esi@16
  const char *v37; // [sp+20h] [bp-4Ch]@6
  int *v38; // [sp+24h] [bp-48h]@6
  int *v39; // [sp+28h] [bp-44h]@6
  NiSourceTexture *v40; // [sp+2Ch] [bp-40h]@6
  UIUtil ui; // [sp+40h] [bp-2Ch]@5
  int iLeft; // [sp+54h] [bp-18h]@4
  int iTop; // [sp+58h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-10h]@1
  int v45; // [sp+68h] [bp-4h]@1
  int iOffY; // [sp+74h] [bp+8h]@5

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v45 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin03.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "RandomOptCountRecoverWin", 0) )
  {
LABEL_10:
    v10 = spNode.m_pObject;
    v45 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v6 = iLeft;
  iOffY = iTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v45) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v6, iOffY);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v7 = MenuTexMgr::GetTexture(0x13u);
  if ( v7 )
  {
    v40 = v7;
    v39 = &iTop;
    v38 = &iLeft;
    v37 = "Theme";
  }
  else
  {
    v40 = 0;
    v39 = &iTop;
    v38 = &iLeft;
    v37 = "Theme";
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v37, v38, v39, v40);
  PgWinSpr::CreateWin(iLeft - v6, iTop - iOffY, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v9 = MenuTexMgr::GetTexture(0x1Cu);
  if ( !v9 )
  {
    LOBYTE(v45) = 0;
    UIUtil::_UIUtil(&ui);
    goto LABEL_10;
  }
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  *(_QWORD *)&v12.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v12.b = qword_A746E8;
  v13 = TextData3::Get(0x4A7F7C86u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v13, COERCE_D3DXCOLOR(v12.r), 5u);
  UIUtil::CreateBtn(&ui, 0xDu, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  v2->m_pkAddCountBtn = UIUtil::CreateBtn(&ui, 0xBu, "FrontPageNor", "FrontPageClick", "FrontPageOver", 0, v9);
  v2->m_pkSubCountBtn = UIUtil::CreateBtn(&ui, 0xAu, "NextPageNor", "NextPageClick", "NextPageOver", 0, v9);
  v2->m_pkOkBtn = UIUtil::CreateBtn(&ui, 0xCu, "Btn01Nor", "Btn01Click", "Btn01Over", 0, 0);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = TextData::Get(0x4F5F499Fu);
  UIUtil::CreateAttachedText(&ui, &v2->m_pkOkBtn->baseclass_0.baseclass_0, v15, COERCE_D3DXCOLOR(v14.r), 5u);
  v2->m_pkCancelBtn = UIUtil::CreateBtn(&ui, 0xDu, "Btn02Nor", "Btn02Click", "Btn02Over", 0, 0);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v17 = TextData::Get(0x88A297E1u);
  UIUtil::CreateAttachedText(&ui, &v2->m_pkCancelBtn->baseclass_0.baseclass_0, v17, COERCE_D3DXCOLOR(v16.r), 5u);
  v18 = (PgWin *)UIUtil::CreateSpr(&ui, "ItemSlot", 0);
  v19 = IconSlotWin::CreateWin(1, 0, v18);
  v2->m_apkRecoverCountItemWin = v19;
  v19->baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
  v2->m_apkRecoverCountItemWin->baseclass_0.m_bDroppable = 0;
  ((void (__stdcall *)(signed int))v2->m_apkRecoverCountItemWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_apkRecoverCountItemWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  *(_QWORD *)&v20.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v20.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v21 = TextData3::Get(0x2E80A77Du);
  UIUtil::CreateTextNoSpr(&ui, "Text01", v21, COERCE_D3DXCOLOR(v20.r), 5u);
  *(_QWORD *)&v22.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v22.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v23 = UIUtil::CreateText(&ui, "MyGoldInput", &byte_97F56E, 0, COERCE_D3DXCOLOR(v22.r), 1u, 0, 0);
  v2->m_pkText_Count = v23;
  v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = fs("%d");
  v24[118].__vecDelDtor((NiRefObject *)v2->m_pkText_Count, (unsigned int)v25);
  ((void (__stdcall *)(signed int))v2->m_pkText_Count->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  *(_QWORD *)&v26.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v26.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v27 = UIUtil::CreateText(&ui, "Text02", &byte_97F56F, 0, COERCE_D3DXCOLOR(v26.r), 1u, 0, 0);
  v2->m_pkText_Notice_01 = v27;
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData3::Get(0x636E9D6Du);
  v30 = fs(v29);
  v28[118].__vecDelDtor((NiRefObject *)v2->m_pkText_Notice_01, (unsigned int)v30);
  ((void (__stdcall *)(signed int))v2->m_pkText_Notice_01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_pkText_Notice_01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  *(_QWORD *)&v31.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v31.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v32 = UIUtil::CreateText(&ui, "Text03", byte_97F586, 0, COERCE_D3DXCOLOR(v31.r), 1u, 0, 0);
  v2->m_pkText_Notice_02 = v32;
  v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = TextData3::Get(0x646E9D6Du);
  v35 = fs(v34);
  v33[118].__vecDelDtor((NiRefObject *)v2->m_pkText_Notice_02, (unsigned int)v35);
  ((void (__stdcall *)(signed int))v2->m_pkText_Notice_02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_pkText_Notice_02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__thiscall *)(RandomOptCountRecoverWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  RandomOptCountRecoverWin::ResetAllData(v2);
  LOBYTE(v45) = 0;
  UIUtil::_UIUtil(&ui);
  v45 = -1;
  if ( spNode.m_pObject )
  {
    v36 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v36 )
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00433170) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::OnCancel(RandomOptCountRecoverWin *this)
{
  PgFrameWork *v1; // esi@1
  InventoryWin *v2; // ecx@1

  RandomOptCountRecoverWin::ResetAllData(this);
  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  GameFrameWork::NcActEndOfTrade((GameFrameWork *)v1);
  v2 = (InventoryWin *)v1[19].m_BackFrameID;
  if ( v2 )
    InventoryWin::OnResetRecoverCountState(v2);
}

//----- (004331B0) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::OnCommand(RandomOptCountRecoverWin *this, unsigned int wParam, int lParam)
{
  unsigned int v3; // eax@2
  unsigned int v4; // eax@5

  switch ( wParam )
  {
    case 0xAu:
      v3 = this->m_uiReqRecoverCount;
      if ( v3 < this->m_uiCurAbleRecoverCount )
      {
        if ( v3 )
        {
          this->m_uiReqRecoverCount = v3 + 1;
          this->m_bChangedRecoverReqCount = 1;
        }
      }
      break;
    case 0xBu:
      v4 = this->m_uiReqRecoverCount;
      if ( v4 <= this->m_uiCurAbleRecoverCount && v4 > 1 )
      {
        this->m_uiReqRecoverCount = v4 - 1;
        this->m_bChangedRecoverReqCount = 1;
      }
      break;
    case 0xCu:
      RandomOptCountRecoverWin::OnApply(this);
      break;
    case 0xDu:
      RandomOptCountRecoverWin::OnCancel(this);
      break;
    default:
      return;
  }
}

//----- (00433230) --------------------------------------------------------
void __thiscall RandomOptCountRecoverWin::RandomOptCountRecoverWin(RandomOptCountRecoverWin *this)
{
  RandomOptCountRecoverWin *v1; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v2; // [sp-28h] [bp-3Ch]@1
  int v3; // [sp-18h] [bp-2Ch]@1
  signed int v4; // [sp-14h] [bp-28h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // [sp+0h] [bp-14h]@1
  RandomOptCountRecoverWin *v6; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = this;
  v6 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v5 = &v2;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RandomOptCountRecoverWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RandomOptCountRecoverWin::_vftable_;
  v1->m_apkRecoverCountItemWin = 0;
  v1->m_pkAddCountBtn = 0;
  v1->m_pkSubCountBtn = 0;
  v1->m_pkOkBtn = 0;
  v1->m_pkCancelBtn = 0;
  v1->m_pkText_Count = 0;
  v1->m_pkText_Notice_01 = 0;
  v1->m_pkText_Notice_02 = 0;
  v4 = 15;
  v3 = 0;
  v7 = 0;
  v2.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2, "LimitRandomOption", 0x11u);
  v1->m_uiLimitRandomOptCount = CSingleDataMap::GetValue(&g_kSingleDataMap, v2);
  v1->m_uiCurAbleRecoverCount = 0;
  v1->m_uiRecoverItemTotalCount = 0;
  v1->m_uiReqRecoverCount = 0;
  v1->m_bChangedRecoverReqCount = 0;
}
// 97F6D4: using guessed type int (__stdcall *RandomOptCountRecoverWin___vftable_)(int uiFlags);
// 97F6F4: using guessed type int (__thiscall *RandomOptCountRecoverWin___vftable_)(void *p, char);

//----- (00433310) --------------------------------------------------------
RandomOptCountRecoverWin *__cdecl RandomOptCountRecoverWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  RandomOptCountRecoverWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x18Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    RandomOptCountRecoverWin::RandomOptCountRecoverWin((RandomOptCountRecoverWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (RandomOptCountRecoverWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00433440) --------------------------------------------------------
void *__thiscall RandomOptCountRecoverWin::_scalar_deleting_destructor_(RandomOptCountRecoverWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RandomOptCountRecoverWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RandomOptCountRecoverWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97F6D4: using guessed type int (__stdcall *RandomOptCountRecoverWin___vftable_)(int uiFlags);
// 97F6F4: using guessed type int (__thiscall *RandomOptCountRecoverWin___vftable_)(void *p, char);

//----- (004334A0) --------------------------------------------------------
void __thiscall ChangeSlotWin::ChangeSlotWin(ChangeSlotWin *this)
{
  ChangeSlotWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChangeSlotWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChangeSlotWin::_vftable_;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}
// 97FB0C: using guessed type int (__stdcall *ChangeSlotWin___vftable_)(int uiFlags);
// 97FB2C: using guessed type int (__thiscall *ChangeSlotWin___vftable_)(void *p, char);

//----- (00433510) --------------------------------------------------------
void __thiscall ChangeSlotWin::_ChangeSlotWin(ChangeSlotWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChangeSlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChangeSlotWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 97FB0C: using guessed type int (__stdcall *ChangeSlotWin___vftable_)(int uiFlags);
// 97FB2C: using guessed type int (__thiscall *ChangeSlotWin___vftable_)(void *p, char);

//----- (00433530) --------------------------------------------------------
bool __thiscall ChangeSlotWin::Create(ChangeSlotWin *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent) != 0;
}

//----- (00433550) --------------------------------------------------------
void __thiscall ChangeSlotWin::SetLock(ChangeSlotWin *this, bool bLock)
{
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@1

  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  this->m_bLock = bLock;
  ((void (__stdcall *)(_DWORD))v2)(bLock == 0);
}

//----- (00433590) --------------------------------------------------------
void __thiscall RandomOptionWin::OnHelpLink(RandomOptionWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "RandomOptionWin");
}

//----- (004335C0) --------------------------------------------------------
void __thiscall RandomOptionWin::OnShowWin(RandomOptionWin *this)
{
  PgFrameWork *v1; // eax@1

  PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v1, BIL_RANDOMOPTIONITEM_1);
}

//----- (00433600) --------------------------------------------------------
bool __thiscall RandomOptionWin::IsChangingOption(RandomOptionWin *this)
{
  return this->m_bRandomStart;
}

//----- (00433620) --------------------------------------------------------
void __thiscall ChangeSlotWin::OnFirstHitWin(ChangeSlotWin *this)
{
  ChangeSlotWin *v1; // esi@1
  PgWin *v2; // eax@5
  unsigned int v3; // ecx@6
  ItemIcon *v4; // ecx@7
  Item *v5; // eax@9
  ItemInfoWin *v6; // ecx@10

  v1 = this;
  if ( !this->m_bLock )
  {
    if ( ItemIcon::GetItem(&this->baseclass_0) )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    else
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2 = v1->m_pkSender;
    if ( v2 )
    {
      v3 = v1->m_uiSenderInvIndex;
      if ( v3 < 0xC0 )
      {
        v4 = (ItemIcon *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
        if ( v4 )
        {
          if ( ItemIcon::GetItem(v4) )
          {
            v5 = ItemIcon::GetItem(&v1->baseclass_0);
            if ( v5 )
            {
              v6 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
              if ( v6 )
              {
                ItemInfoWin::SetItemInfo(v6, v5);
                PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              }
            }
          }
        }
      }
    }
  }
}

//----- (004336B0) --------------------------------------------------------
bool __thiscall ChangeSlotWin::SetSenderInvSlotLock(ChangeSlotWin *this, bool _bLock)
{
  PgWin *v2; // eax@1
  bool result; // al@2
  unsigned int v4; // ecx@3
  InvWin *v5; // ecx@4

  v2 = this->m_pkSender;
  if ( v2
    && (v4 = this->m_uiSenderInvIndex, v4 < 0xC0)
    && (v5 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v4 + 2])) != 0 )
  {
    InvWin::SetLock(v5, _bLock);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004336F0) --------------------------------------------------------
void __thiscall RandomOptionWin::SetItemOptionTextDetail(RandomOptionWin *this, unsigned int uiItemPos, unsigned int uiOPTNum, unsigned int uiRotNum)
{
  char *v4; // esi@3
  char *v5; // ecx@3
  int v6; // eax@8
  int v7; // ebx@13
  char *v8; // eax@13
  int v9; // ebx@15
  char *v10; // eax@16
  int v11; // eax@24
  int v12; // ecx@24
  char *v13; // [sp+0h] [bp-18h]@14
  D3DXCOLOR *v14; // [sp+8h] [bp-10h]@25
  char *kOptionValueCompare; // [sp+14h] [bp-4h]@5
  char *kOptionValue; // [sp+20h] [bp+8h]@3

  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      return;
    v4 = (char *)this->m_pkAfterOptionText;
    kOptionValue = (char *)this->m_kAfterOptionValue;
    v5 = (char *)this->m_kBeforeOptionValue;
  }
  else
  {
    v4 = (char *)this->m_pkBeforeOptionText;
    kOptionValue = (char *)this->m_kBeforeOptionValue;
    v5 = (char *)this->m_kAfterOptionValue;
  }
  kOptionValueCompare = v5;
  if ( v4 )
  {
    if ( kOptionValue )
    {
      if ( *(_DWORD *)&v4[4 * uiOPTNum] )
      {
        v6 = *(_DWORD *)&kOptionValue[4 * uiRotNum];
        if ( v6 >= 0 )
        {
          if ( v6 > 0 || *(_DWORD *)&v5[4 * uiRotNum] > 0 )
          {
            switch ( uiOPTNum )
            {
              case 0u:
              case 1u:
              case 2u:
              case 3u:
              case 4u:
              case 5u:
              case 6u:
              case 7u:
              case 8u:
              case 9u:
              case 0xAu:
              case 0xBu:
                if ( v6 )
                {
                  v13 = "+ %d";
                  goto LABEL_21;
                }
                v7 = **(_DWORD **)&v4[4 * uiOPTNum];
                v8 = fs("%d");
                (*(void (__thiscall **)(_DWORD, char *))(v7 + 472))(*(_DWORD *)&v4[4 * uiOPTNum], v8);
                break;
              case 0xCu:
              case 0xDu:
                v9 = **(_DWORD **)&v4[4 * uiOPTNum];
                if ( v6 )
                  v10 = fs("+ %.1f");
                else
                  v10 = fs("%.1f");
                goto LABEL_23;
              case 0xEu:
                if ( v6 )
                {
                  v13 = "- %d";
LABEL_21:
                  v9 = **(_DWORD **)&v4[4 * uiOPTNum];
                }
                else
                {
                  v9 = **(_DWORD **)&v4[4 * uiOPTNum];
                  v13 = "%d";
                }
                v10 = fs(v13);
LABEL_23:
                (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(*(_DWORD *)&v4[4 * uiOPTNum], v10);
                break;
              default:
                break;
            }
          }
          v11 = *(_DWORD *)&kOptionValue[4 * uiRotNum];
          v12 = *(_DWORD *)&kOptionValueCompare[4 * uiRotNum];
          if ( v11 <= v12 )
          {
            if ( v11 >= v12 )
              return;
            v14 = &Color::m_kDxRedColor;
          }
          else
          {
            v14 = &Color::m_kDxGreenColor;
          }
          (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)&v4[4 * uiOPTNum] + 468))(v14);
        }
      }
    }
  }
}

//----- (00433880) --------------------------------------------------------
void __thiscall RandomOptionWin::ItemOptionCompare(RandomOptionWin *this, unsigned int uiItemPos)
{
  char *v2; // esi@2
  signed int v3; // edi@2

  if ( !uiItemPos )
  {
    v2 = (char *)this->m_pkBeforeOptionText;
    v3 = 15;
    do
    {
      if ( (char *)(*(int (**)(void))(**(_DWORD **)v2 + 484))() != "-" )
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 468))(&Color::m_kDxGreenColor);
      v2 += 4;
      --v3;
    }
    while ( v3 );
  }
}

//----- (004338D0) --------------------------------------------------------
void __thiscall RandomOptionWin::ResetItemOption(RandomOptionWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1
  int v3; // ecx@2
  int v4; // ecx@4
  RandomOptionWin *v5; // [sp+Ch] [bp-4h]@1

  v5 = this;
  v1 = (char *)this->m_pkBeforeOptionText;
  v2 = 15;
  do
  {
    v3 = *(_DWORD *)v1;
    *((_DWORD *)v1 + 30) = 0;
    *((_DWORD *)v1 + 45) = 0;
    if ( v3 )
    {
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 472))("-");
      (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v1 + 468))(&Color::m_kDxWhiteColor);
    }
    v4 = *((_DWORD *)v1 + 15);
    if ( v4 )
    {
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 472))("-");
      (*(void (__stdcall **)(D3DXCOLOR *))(**((_DWORD **)v1 + 15) + 468))(&Color::m_kDxWhiteColor);
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
  ((void (__stdcall *)(_UNKNOWN *))v5->m_pkRandomCntTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_97F942);
  v5->m_bStartEffect = 0;
}

//----- (00433980) --------------------------------------------------------
void __thiscall RandomOptionWin::SetChangeAbleOption(RandomOptionWin *this, ItemOptionStorage *pChangeAbleOption)
{
  RandomOptionWin *v2; // esi@1
  signed int v3; // ecx@3
  char *v4; // eax@4
  unsigned int v5; // eax@6
  ItemIcon *v6; // ecx@7
  Item *v7; // eax@8

  v2 = this;
  if ( pChangeAbleOption && this->m_pkChangeSlot )
  {
    v3 = 0;
    if ( pChangeAbleOption->fixed.optionnumber.str._bf0 & 0xFE )
    {
      v4 = (char *)pChangeAbleOption->optionlist;
      do
      {
        v2->m_kAfterOptionValue[(unsigned __int8)*v4] = *(_WORD *)(v4 + 1);
        ++v3;
        v4 += 3;
      }
      while ( v3 < (signed int)((unsigned int)pChangeAbleOption->fixed.optionnumber.str._bf0 >> 1) );
    }
    v5 = v2->m_pkChangeSlot->m_uiSenderInvIndex;
    if ( v5 < 0xC0 )
    {
      v6 = (ItemIcon *)v2->m_pkInventoryWin->m_apkInvWin[v5];
      if ( v6 )
      {
        v7 = ItemIcon::GetItem(v6);
        if ( v7 )
          v2->m_iAfterReMainRandomCnt = v2->m_uiLimitRandomOption
                                      - (unsigned __int8)((int (__thiscall *)(_DWORD))v7->baseclass_0.vfptr[18].__vecDelDtor)(v7);
      }
    }
  }
}

//----- (00433A10) --------------------------------------------------------
void __thiscall ChangeSlotWin::DoAction(ChangeSlotWin *this)
{
  ChangeSlotWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00433A40) --------------------------------------------------------
void __thiscall ChangeSlotWin::DoRAction(ChangeSlotWin *this)
{
  ChangeSlotWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00433A70) --------------------------------------------------------
void __thiscall ChangeSlotWin::ReSetSlot(ChangeSlotWin *this)
{
  ItemIcon *v1; // esi@1
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@1
  NiRefObjectVtbl *v3; // eax@1
  unsigned int v4; // ecx@2
  InvWin *v5; // eax@3

  v1 = (ItemIcon *)this;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  this->m_bLock = 0;
  ((void (__stdcall *)(_DWORD))v2)(1);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v1,
    1u);
  v3 = v1[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( v3 )
  {
    v4 = (unsigned int)v1[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pcName;
    if ( v4 < 0xC0 )
    {
      v5 = (InvWin *)v3[v4 + 87].__vecDelDtor;
      if ( v5 )
        InvWin::SetLock(v5, 0);
    }
  }
  v1[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = -1;
  v1[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pcName = (char *)-1;
  v1[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = 0;
  ItemIcon::SetItem(v1, 0, 1);
}

//----- (00433AF0) --------------------------------------------------------
void __thiscall RandomOptionWin::OnClose(RandomOptionWin *this)
{
  RandomOptionWin *v1; // esi@1
  SpEffect *v2; // ecx@3
  NiNode *v3; // ST08_4@3
  int v4; // esi@3
  bool v5; // zf@3
  DirectUserMsgBody_SendPacket kPacket; // [sp+4h] [bp-Ch]@3

  v1 = this;
  if ( this->m_pkMsgBox )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMsgBox->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMsgBox = 0;
  }
  v2 = v1->m_apkEffect;
  v3 = v1->m_pAttachEffect.m_pObject;
  *(_WORD *)&v1->m_bUseRandomOption = 1;
  SpEffect::End(v2, v3);
  ChangeSlotWin::ReSetSlot(v1->m_pkChangeSlot);
  RandomOptionWin::ResetItemOption(v1);
  v4 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  v5 = *(_DWORD *)(v4 + 4) == 0;
  *(_DWORD *)&kPacket.wDepartment = 720904;
  kPacket.pvPacket = 0;
  if ( !v5 )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v4 + 4) + 4))(
      23,
      &kPacket,
      v4);
    if ( *(_DWORD *)(v4 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v4 + 4) + 20))(
        23,
        &kPacket,
        v4);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_SendPacket *, int))(*(_DWORD *)v4 + 20))(
    v4,
    23,
    &kPacket,
    v4);
}

//----- (00433BA0) --------------------------------------------------------
void __thiscall RandomOptionWin::OnSlotLClick(RandomOptionWin *this)
{
  RandomOptionWin *v1; // esi@1
  ItemIcon *v2; // ecx@1
  Item *v3; // eax@3
  ChangeSlotWin *v4; // ecx@4
  unsigned int v5; // ecx@4

  v1 = this;
  v2 = (ItemIcon *)this->m_pkChangeSlot;
  if ( v2 && v1->m_bSelectChangeOpt != 1 )
  {
    v3 = ItemIcon::GetItem(v2);
    if ( v3 )
    {
      v4 = v1->m_pkChangeSlot;
      v1->m_kDropContents.m_eSenderType = v4->m_uiSenderType;
      v1->m_kDropContents.m_eType = 0;
      v5 = v4->m_uiSenderInvIndex;
      v1->m_kDropContents.m_apvParam[0] = v3;
      v1->m_kDropContents.m_uiSenderIndex = v5;
      v1->m_kDropContents.m_apvParam[1] = 0;
      v1->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      v1->m_kDrop.m_pkSender = v1->m_pkChangeSlot->m_pkSender;
      PgCursor::ms_pkDrop = (int)&v1->m_kDrop;
      ChangeSlotWin::ReSetSlot(v1->m_pkChangeSlot);
      RandomOptionWin::ResetItemOption(v1);
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (00433C40) --------------------------------------------------------
void __thiscall RandomOptionWin::SetRandomCntTextDetail(RandomOptionWin *this, unsigned int uiItemPos)
{
  RandomOptionWin *v2; // esi@1
  int v3; // eax@3
  NiRefObjectVtbl *v4; // edi@7
  char *v5; // eax@7
  char *v6; // eax@7

  v2 = this;
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      return;
    v3 = this->m_iAfterReMainRandomCnt;
  }
  else
  {
    v3 = this->m_iBeforeReMainRandomCnt;
  }
  if ( v3 >= 0 )
  {
    if ( this->m_pkRandomCntTextWin )
    {
      v4 = this->m_pkRandomCntTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = TextData3::Get(0xD7E3063Fu);
      v6 = fs(v5);
      v4[118].__vecDelDtor((NiRefObject *)v2->m_pkRandomCntTextWin, (unsigned int)v6);
    }
  }
}

//----- (00433CB0) --------------------------------------------------------
void __thiscall RandomOptionWin::SetChangeOption(RandomOptionWin *this)
{
  RandomOptionWin *v1; // esi@1
  unsigned int v2; // eax@1
  InventoryWin *v3; // ecx@1
  ItemIcon *v4; // ecx@2
  Item *v5; // edi@3
  char *v6; // eax@5
  char *v7; // eax@5

  v1 = this;
  v2 = this->m_pkChangeSlot->m_uiSenderInvIndex;
  v3 = this->m_pkInventoryWin;
  if ( v2 < 0xC0 )
  {
    v4 = (ItemIcon *)v3->m_apkInvWin[v2];
    if ( v4 )
    {
      v5 = ItemIcon::GetItem(v4);
      if ( v5 )
      {
        if ( v1->m_pkChangeSlot )
        {
          v6 = TextData3::Get(0xEA36301Cu);
          v7 = fs(v6);
          GameFrameWork::AddSysMsg((GameFrameWork *)v1->m_pkFrameWork, v7);
          ItemIcon::SetItem(&v1->m_pkChangeSlot->baseclass_0, v5, 1);
        }
      }
    }
  }
}

//----- (00433D30) --------------------------------------------------------
void __thiscall RandomOptionWin::OnCancel(RandomOptionWin *this)
{
  PgFrameWork *v1; // esi@2
  char *v2; // eax@3

  if ( this->m_bRandomStart == 1 )
  {
    v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v1 )
    {
      v2 = TextData3::Get(0x217D8867u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1, v2);
    }
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00433D80) --------------------------------------------------------
void __thiscall RandomOptionWin::_RandomOptionWin(RandomOptionWin *this)
{
  RandomOptionWin *v1; // esi@1
  SpEffect *v2; // edi@1
  NiNode *v3; // ebx@2
  NiNode *v4; // edi@7

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RandomOptionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RandomOptionWin::_vftable_;
  v2 = this->m_apkEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
    v1->m_apkEffect = 0;
  }
  v4 = v1->m_pAttachEffect.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97FD98: using guessed type int (__stdcall *RandomOptionWin___vftable_)(int uiFlags);
// 97FDB4: using guessed type int (__thiscall *RandomOptionWin___vftable_)(void *p, char);

//----- (00433E80) --------------------------------------------------------
void __thiscall RandomOptionWin::SetItemOptionText(RandomOptionWin *this, unsigned int uiItemPos)
{
  RandomOptionWin *v2; // esi@1
  int v3; // edi@3
  int v4; // ebx@3
  int v5; // eax@8
  int v6; // ST68_4@12
  char *v7; // eax@12
  int v8; // ebx@13
  char *v9; // eax@13
  int v10; // eax@14
  int v11; // ecx@14
  int v12; // edi@21
  int v13; // ebx@21
  int v14; // eax@26
  int v15; // ST68_4@30
  char *v16; // eax@30
  int v17; // ebx@31
  char *v18; // eax@31
  int v19; // eax@32
  int v20; // ecx@32
  int v21; // edi@39
  int v22; // ebx@39
  int v23; // eax@44
  int v24; // ST68_4@48
  char *v25; // eax@48
  int v26; // ebx@49
  char *v27; // eax@49
  int v28; // eax@50
  int v29; // ecx@50
  int v30; // edi@57
  int v31; // ebx@57
  int v32; // eax@62
  int v33; // ST68_4@66
  char *v34; // eax@66
  int v35; // ebx@67
  char *v36; // eax@67
  int v37; // eax@68
  int v38; // ecx@68
  int v39; // edi@75
  int v40; // ebx@75
  int v41; // eax@80
  int v42; // ST68_4@84
  char *v43; // eax@84
  int v44; // ebx@85
  char *v45; // eax@85
  int v46; // eax@86
  int v47; // ecx@86
  int v48; // edi@93
  int v49; // ebx@93
  int v50; // eax@98
  int v51; // ST68_4@102
  char *v52; // eax@102
  int v53; // ebx@103
  char *v54; // eax@103
  int v55; // eax@104
  int v56; // ecx@104
  int v57; // edi@111
  int v58; // ebx@111
  int v59; // eax@116
  int v60; // ST68_4@120
  char *v61; // eax@120
  int v62; // ebx@121
  char *v63; // eax@121
  int v64; // eax@122
  int v65; // ecx@122
  int v66; // edi@129
  int v67; // ebx@129
  int v68; // eax@134
  int v69; // ST68_4@138
  char *v70; // eax@138
  int v71; // ebx@139
  char *v72; // eax@139
  int v73; // eax@140
  int v74; // ecx@140
  int v75; // edi@147
  int v76; // ebx@147
  int v77; // eax@152
  int v78; // ST68_4@156
  char *v79; // eax@156
  int v80; // ebx@157
  char *v81; // eax@157
  int v82; // eax@158
  int v83; // ecx@158
  int v84; // edi@165
  int v85; // ebx@165
  int v86; // eax@170
  int v87; // ST68_4@174
  char *v88; // eax@174
  int v89; // ebx@175
  char *v90; // eax@175
  int v91; // eax@176
  int v92; // ecx@176
  int v93; // edi@183
  int v94; // ebx@183
  int v95; // eax@188
  int v96; // ST68_4@192
  char *v97; // eax@192
  int v98; // ST64_4@193
  char *v99; // ST54_4@193
  int v100; // eax@194
  int v101; // ecx@194
  int v102; // edi@200
  int v103; // ebx@200
  int v104; // eax@205
  int v105; // ST64_4@209
  char *v106; // eax@209
  int v107; // ST68_4@210
  char *v108; // ST54_4@210
  int v109; // eax@211
  int v110; // ecx@211
  int v111; // edi@218
  int v112; // ebx@218
  int v113; // eax@223
  int v114; // ST64_4@227
  char *v115; // eax@227
  int v116; // ST64_4@228
  char *v117; // ST54_4@228
  int v118; // eax@229
  int v119; // ecx@229
  int v120; // edi@236
  int v121; // ebx@236
  int v122; // ecx@236
  int v123; // eax@241
  int v124; // ST64_4@245
  char *v125; // ST54_4@245
  int v126; // ebx@246
  char *v127; // eax@246
  int v128; // eax@247
  int v129; // ecx@247
  int v130; // eax@254
  NiRefObjectVtbl *v131; // edi@258
  char *v132; // eax@258
  char *v133; // eax@258
  unsigned int v134; // [sp+54h] [bp-1Ch]@0
  D3DXCOLOR *v135[5]; // [sp+54h] [bp-1Ch]@15
  D3DXCOLOR *v136; // [sp+54h] [bp-1Ch]@33
  D3DXCOLOR *v137; // [sp+54h] [bp-1Ch]@51
  D3DXCOLOR *v138; // [sp+54h] [bp-1Ch]@69
  D3DXCOLOR *v139; // [sp+54h] [bp-1Ch]@87
  D3DXCOLOR *v140; // [sp+54h] [bp-1Ch]@105
  D3DXCOLOR *v141; // [sp+54h] [bp-1Ch]@123
  D3DXCOLOR *v142; // [sp+54h] [bp-1Ch]@141
  D3DXCOLOR *v143; // [sp+54h] [bp-1Ch]@159
  D3DXCOLOR *v144; // [sp+54h] [bp-1Ch]@177
  D3DXCOLOR *v145; // [sp+54h] [bp-1Ch]@212
  D3DXCOLOR *v146; // [sp+54h] [bp-1Ch]@230
  D3DXCOLOR *v147; // [sp+54h] [bp-1Ch]@248
  int v148; // [sp+68h] [bp-8h]@5
  int v149; // [sp+68h] [bp-8h]@23
  int v150; // [sp+68h] [bp-8h]@41
  int v151; // [sp+68h] [bp-8h]@59
  int v152; // [sp+68h] [bp-8h]@77
  int v153; // [sp+68h] [bp-8h]@95
  int v154; // [sp+68h] [bp-8h]@113
  int v155; // [sp+68h] [bp-8h]@131
  int v156; // [sp+68h] [bp-8h]@149
  int v157; // [sp+68h] [bp-8h]@167
  int v158; // [sp+68h] [bp-8h]@238
  int v159; // [sp+6Ch] [bp-4h]@3
  int v160; // [sp+6Ch] [bp-4h]@21
  int v161; // [sp+6Ch] [bp-4h]@39
  int v162; // [sp+6Ch] [bp-4h]@57
  int v163; // [sp+6Ch] [bp-4h]@75
  int v164; // [sp+6Ch] [bp-4h]@93
  int v165; // [sp+6Ch] [bp-4h]@111
  int v166; // [sp+6Ch] [bp-4h]@129
  int v167; // [sp+6Ch] [bp-4h]@147
  int v168; // [sp+6Ch] [bp-4h]@165
  int v169; // [sp+6Ch] [bp-4h]@183
  int v170; // [sp+6Ch] [bp-4h]@200
  int v171; // [sp+6Ch] [bp-4h]@218
  int v172; // [sp+6Ch] [bp-4h]@238

  v2 = this;
  RandomOptionWin::SetItemOptionTextDetail(this, uiItemPos, 0, v134);
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_19;
    v3 = (int)v2->m_pkAfterOptionText;
    v4 = (int)v2->m_kAfterOptionValue;
    v159 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v3 = (int)v2->m_pkBeforeOptionText;
    v4 = (int)v2->m_kBeforeOptionValue;
    v159 = (int)v2->m_kAfterOptionValue;
  }
  v148 = v4;
  if ( !v3 || !v4 || !*(_DWORD *)(v3 + 4) || (v5 = *(_DWORD *)(v4 + 8), v5 < 0) )
    goto LABEL_19;
  if ( v5 > 0 )
    goto LABEL_13;
  if ( *(_DWORD *)(v159 + 8) > 0 )
  {
    if ( !v5 )
    {
      v6 = **(_DWORD **)(v3 + 4);
      v7 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v6 + 472))(*(_DWORD *)(v3 + 4), v7);
      goto LABEL_14;
    }
LABEL_13:
    v8 = **(_DWORD **)(v3 + 4);
    v9 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v8 + 472))(*(_DWORD *)(v3 + 4), v9);
    v4 = v148;
  }
LABEL_14:
  v10 = *(_DWORD *)(v4 + 8);
  v11 = *(_DWORD *)(v159 + 8);
  if ( v10 <= v11 )
  {
    if ( v10 >= v11 )
      goto LABEL_19;
    v135[0] = &Color::m_kDxRedColor;
  }
  else
  {
    v135[0] = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v3 + 4) + 468))(*(_DWORD *)(v3 + 4), v135[0]);
LABEL_19:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_37;
    v12 = (int)v2->m_pkAfterOptionText;
    v13 = (int)v2->m_kAfterOptionValue;
    v160 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v12 = (int)v2->m_pkBeforeOptionText;
    v13 = (int)v2->m_kBeforeOptionValue;
    v160 = (int)v2->m_kAfterOptionValue;
  }
  v149 = v13;
  if ( !v12 || !v13 || !*(_DWORD *)(v12 + 8) || (v14 = *(_DWORD *)(v13 + 4), v14 < 0) )
    goto LABEL_37;
  if ( v14 > 0 )
    goto LABEL_31;
  if ( *(_DWORD *)(v160 + 4) > 0 )
  {
    if ( !v14 )
    {
      v15 = **(_DWORD **)(v12 + 8);
      v16 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v15 + 472))(*(_DWORD *)(v12 + 8), v16);
      goto LABEL_32;
    }
LABEL_31:
    v17 = **(_DWORD **)(v12 + 8);
    v18 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v17 + 472))(*(_DWORD *)(v12 + 8), v18);
    v13 = v149;
  }
LABEL_32:
  v19 = *(_DWORD *)(v13 + 4);
  v20 = *(_DWORD *)(v160 + 4);
  if ( v19 <= v20 )
  {
    if ( v19 >= v20 )
      goto LABEL_37;
    v136 = &Color::m_kDxRedColor;
  }
  else
  {
    v136 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v12 + 8) + 468))(*(_DWORD *)(v12 + 8), v136);
LABEL_37:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_55;
    v21 = (int)v2->m_pkAfterOptionText;
    v22 = (int)v2->m_kAfterOptionValue;
    v161 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v21 = (int)v2->m_pkBeforeOptionText;
    v22 = (int)v2->m_kBeforeOptionValue;
    v161 = (int)v2->m_kAfterOptionValue;
  }
  v150 = v22;
  if ( !v21 || !v22 || !*(_DWORD *)(v21 + 12) || (v23 = *(_DWORD *)(v22 + 12), v23 < 0) )
    goto LABEL_55;
  if ( v23 > 0 )
    goto LABEL_49;
  if ( *(_DWORD *)(v161 + 12) > 0 )
  {
    if ( !v23 )
    {
      v24 = **(_DWORD **)(v21 + 12);
      v25 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v24 + 472))(*(_DWORD *)(v21 + 12), v25);
      goto LABEL_50;
    }
LABEL_49:
    v26 = **(_DWORD **)(v21 + 12);
    v27 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v26 + 472))(*(_DWORD *)(v21 + 12), v27);
    v22 = v150;
  }
LABEL_50:
  v28 = *(_DWORD *)(v22 + 12);
  v29 = *(_DWORD *)(v161 + 12);
  if ( v28 <= v29 )
  {
    if ( v28 >= v29 )
      goto LABEL_55;
    v137 = &Color::m_kDxRedColor;
  }
  else
  {
    v137 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v21 + 12) + 468))(*(_DWORD *)(v21 + 12), v137);
LABEL_55:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_73;
    v30 = (int)v2->m_pkAfterOptionText;
    v31 = (int)v2->m_kAfterOptionValue;
    v162 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v30 = (int)v2->m_pkBeforeOptionText;
    v31 = (int)v2->m_kBeforeOptionValue;
    v162 = (int)v2->m_kAfterOptionValue;
  }
  v151 = v31;
  if ( !v30 || !v31 || !*(_DWORD *)(v30 + 16) || (v32 = *(_DWORD *)(v31 + 16), v32 < 0) )
    goto LABEL_73;
  if ( v32 > 0 )
    goto LABEL_67;
  if ( *(_DWORD *)(v162 + 16) > 0 )
  {
    if ( !v32 )
    {
      v33 = **(_DWORD **)(v30 + 16);
      v34 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v33 + 472))(*(_DWORD *)(v30 + 16), v34);
      goto LABEL_68;
    }
LABEL_67:
    v35 = **(_DWORD **)(v30 + 16);
    v36 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v35 + 472))(*(_DWORD *)(v30 + 16), v36);
    v31 = v151;
  }
LABEL_68:
  v37 = *(_DWORD *)(v31 + 16);
  v38 = *(_DWORD *)(v162 + 16);
  if ( v37 <= v38 )
  {
    if ( v37 >= v38 )
      goto LABEL_73;
    v138 = &Color::m_kDxRedColor;
  }
  else
  {
    v138 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v30 + 16) + 468))(*(_DWORD *)(v30 + 16), v138);
LABEL_73:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_91;
    v39 = (int)v2->m_pkAfterOptionText;
    v40 = (int)v2->m_kAfterOptionValue;
    v163 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v39 = (int)v2->m_pkBeforeOptionText;
    v40 = (int)v2->m_kBeforeOptionValue;
    v163 = (int)v2->m_kAfterOptionValue;
  }
  v152 = v40;
  if ( !v39 || !v40 || !*(_DWORD *)(v39 + 24) || (v41 = *(_DWORD *)(v40 + 28), v41 < 0) )
    goto LABEL_91;
  if ( v41 > 0 )
    goto LABEL_85;
  if ( *(_DWORD *)(v163 + 28) > 0 )
  {
    if ( !v41 )
    {
      v42 = **(_DWORD **)(v39 + 24);
      v43 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v42 + 472))(*(_DWORD *)(v39 + 24), v43);
      goto LABEL_86;
    }
LABEL_85:
    v44 = **(_DWORD **)(v39 + 24);
    v45 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v44 + 472))(*(_DWORD *)(v39 + 24), v45);
    v40 = v152;
  }
LABEL_86:
  v46 = *(_DWORD *)(v40 + 28);
  v47 = *(_DWORD *)(v163 + 28);
  if ( v46 <= v47 )
  {
    if ( v46 >= v47 )
      goto LABEL_91;
    v139 = &Color::m_kDxRedColor;
  }
  else
  {
    v139 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v39 + 24) + 468))(*(_DWORD *)(v39 + 24), v139);
LABEL_91:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_109;
    v48 = (int)v2->m_pkAfterOptionText;
    v49 = (int)v2->m_kAfterOptionValue;
    v164 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v48 = (int)v2->m_pkBeforeOptionText;
    v49 = (int)v2->m_kBeforeOptionValue;
    v164 = (int)v2->m_kAfterOptionValue;
  }
  v153 = v49;
  if ( !v48 || !v49 || !*(_DWORD *)(v48 + 28) || (v50 = *(_DWORD *)(v49 + 32), v50 < 0) )
    goto LABEL_109;
  if ( v50 > 0 )
    goto LABEL_103;
  if ( *(_DWORD *)(v164 + 32) > 0 )
  {
    if ( !v50 )
    {
      v51 = **(_DWORD **)(v48 + 28);
      v52 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v51 + 472))(*(_DWORD *)(v48 + 28), v52);
      goto LABEL_104;
    }
LABEL_103:
    v53 = **(_DWORD **)(v48 + 28);
    v54 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v53 + 472))(*(_DWORD *)(v48 + 28), v54);
    v49 = v153;
  }
LABEL_104:
  v55 = *(_DWORD *)(v49 + 32);
  v56 = *(_DWORD *)(v164 + 32);
  if ( v55 <= v56 )
  {
    if ( v55 >= v56 )
      goto LABEL_109;
    v140 = &Color::m_kDxRedColor;
  }
  else
  {
    v140 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v48 + 28) + 468))(*(_DWORD *)(v48 + 28), v140);
LABEL_109:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_127;
    v57 = (int)v2->m_pkAfterOptionText;
    v58 = (int)v2->m_kAfterOptionValue;
    v165 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v57 = (int)v2->m_pkBeforeOptionText;
    v58 = (int)v2->m_kBeforeOptionValue;
    v165 = (int)v2->m_kAfterOptionValue;
  }
  v154 = v58;
  if ( !v57 || !v58 || !*(_DWORD *)(v57 + 32) || (v59 = *(_DWORD *)(v58 + 36), v59 < 0) )
    goto LABEL_127;
  if ( v59 > 0 )
    goto LABEL_121;
  if ( *(_DWORD *)(v165 + 36) > 0 )
  {
    if ( !v59 )
    {
      v60 = **(_DWORD **)(v57 + 32);
      v61 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v60 + 472))(*(_DWORD *)(v57 + 32), v61);
      goto LABEL_122;
    }
LABEL_121:
    v62 = **(_DWORD **)(v57 + 32);
    v63 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v62 + 472))(*(_DWORD *)(v57 + 32), v63);
    v58 = v154;
  }
LABEL_122:
  v64 = *(_DWORD *)(v58 + 36);
  v65 = *(_DWORD *)(v165 + 36);
  if ( v64 <= v65 )
  {
    if ( v64 >= v65 )
      goto LABEL_127;
    v141 = &Color::m_kDxRedColor;
  }
  else
  {
    v141 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v57 + 32) + 468))(*(_DWORD *)(v57 + 32), v141);
LABEL_127:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_145;
    v66 = (int)v2->m_pkAfterOptionText;
    v67 = (int)v2->m_kAfterOptionValue;
    v166 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v66 = (int)v2->m_pkBeforeOptionText;
    v67 = (int)v2->m_kBeforeOptionValue;
    v166 = (int)v2->m_kAfterOptionValue;
  }
  v155 = v67;
  if ( !v66 || !v67 || !*(_DWORD *)(v66 + 36) || (v68 = *(_DWORD *)(v67 + 40), v68 < 0) )
    goto LABEL_145;
  if ( v68 > 0 )
    goto LABEL_139;
  if ( *(_DWORD *)(v166 + 40) > 0 )
  {
    if ( !v68 )
    {
      v69 = **(_DWORD **)(v66 + 36);
      v70 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v69 + 472))(*(_DWORD *)(v66 + 36), v70);
      goto LABEL_140;
    }
LABEL_139:
    v71 = **(_DWORD **)(v66 + 36);
    v72 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v71 + 472))(*(_DWORD *)(v66 + 36), v72);
    v67 = v155;
  }
LABEL_140:
  v73 = *(_DWORD *)(v67 + 40);
  v74 = *(_DWORD *)(v166 + 40);
  if ( v73 <= v74 )
  {
    if ( v73 >= v74 )
      goto LABEL_145;
    v142 = &Color::m_kDxRedColor;
  }
  else
  {
    v142 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v66 + 36) + 468))(*(_DWORD *)(v66 + 36), v142);
LABEL_145:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_163;
    v75 = (int)v2->m_pkAfterOptionText;
    v76 = (int)v2->m_kAfterOptionValue;
    v167 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v75 = (int)v2->m_pkBeforeOptionText;
    v76 = (int)v2->m_kBeforeOptionValue;
    v167 = (int)v2->m_kAfterOptionValue;
  }
  v156 = v76;
  if ( !v75 || !v76 || !*(_DWORD *)(v75 + 40) || (v77 = *(_DWORD *)(v76 + 20), v77 < 0) )
    goto LABEL_163;
  if ( v77 > 0 )
    goto LABEL_157;
  if ( *(_DWORD *)(v167 + 20) > 0 )
  {
    if ( !v77 )
    {
      v78 = **(_DWORD **)(v75 + 40);
      v79 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v78 + 472))(*(_DWORD *)(v75 + 40), v79);
      goto LABEL_158;
    }
LABEL_157:
    v80 = **(_DWORD **)(v75 + 40);
    v81 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v80 + 472))(*(_DWORD *)(v75 + 40), v81);
    v76 = v156;
  }
LABEL_158:
  v82 = *(_DWORD *)(v76 + 20);
  v83 = *(_DWORD *)(v167 + 20);
  if ( v82 <= v83 )
  {
    if ( v82 >= v83 )
      goto LABEL_163;
    v143 = &Color::m_kDxRedColor;
  }
  else
  {
    v143 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v75 + 40) + 468))(*(_DWORD *)(v75 + 40), v143);
LABEL_163:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_181;
    v84 = (int)v2->m_pkAfterOptionText;
    v85 = (int)v2->m_kAfterOptionValue;
    v168 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v84 = (int)v2->m_pkBeforeOptionText;
    v85 = (int)v2->m_kBeforeOptionValue;
    v168 = (int)v2->m_kAfterOptionValue;
  }
  v157 = v85;
  if ( !v84 || !v85 || !*(_DWORD *)(v84 + 44) || (v86 = *(_DWORD *)(v85 + 44), v86 < 0) )
    goto LABEL_181;
  if ( v86 > 0 )
    goto LABEL_175;
  if ( *(_DWORD *)(v168 + 44) > 0 )
  {
    if ( !v86 )
    {
      v87 = **(_DWORD **)(v84 + 44);
      v88 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v87 + 472))(*(_DWORD *)(v84 + 44), v88);
      goto LABEL_176;
    }
LABEL_175:
    v89 = **(_DWORD **)(v84 + 44);
    v90 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v89 + 472))(*(_DWORD *)(v84 + 44), v90);
    v85 = v157;
  }
LABEL_176:
  v91 = *(_DWORD *)(v85 + 44);
  v92 = *(_DWORD *)(v168 + 44);
  if ( v91 <= v92 )
  {
    if ( v91 >= v92 )
      goto LABEL_181;
    v144 = &Color::m_kDxRedColor;
  }
  else
  {
    v144 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v84 + 44) + 468))(*(_DWORD *)(v84 + 44), v144);
LABEL_181:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_198;
    v93 = (int)v2->m_pkAfterOptionText;
    v94 = (int)v2->m_kAfterOptionValue;
    v169 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v93 = (int)v2->m_pkBeforeOptionText;
    v94 = (int)v2->m_kBeforeOptionValue;
    v169 = (int)v2->m_kAfterOptionValue;
  }
  if ( v93 )
  {
    if ( v94 )
    {
      if ( *(_DWORD *)(v93 + 48) )
      {
        v95 = *(_DWORD *)(v94 + 24);
        if ( v95 >= 0 )
        {
          if ( v95 > 0 )
            goto LABEL_261;
          if ( *(_DWORD *)(v169 + 24) <= 0 )
            goto LABEL_194;
          if ( v95 )
          {
LABEL_261:
            v98 = **(_DWORD **)(v93 + 48);
            v99 = fs("+ %.1f");
            (*(void (__thiscall **)(_DWORD, char *))(v98 + 472))(*(_DWORD *)(v93 + 48), v99);
          }
          else
          {
            v96 = **(_DWORD **)(v93 + 48);
            v97 = fs("%.1f");
            (*(void (__thiscall **)(_DWORD, char *))(v96 + 472))(*(_DWORD *)(v93 + 48), v97);
          }
LABEL_194:
          v100 = *(_DWORD *)(v94 + 24);
          v101 = *(_DWORD *)(v169 + 24);
          if ( v100 <= v101 )
          {
            if ( v100 < v101 )
              (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v93 + 48) + 468))(
                *(_DWORD *)(v93 + 48),
                &Color::m_kDxRedColor);
          }
          else
          {
            (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v93 + 48) + 468))(
              *(_DWORD *)(v93 + 48),
              &Color::m_kDxGreenColor);
          }
          goto LABEL_198;
        }
      }
    }
  }
LABEL_198:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_216;
    v102 = (int)v2->m_pkAfterOptionText;
    v103 = (int)v2->m_kAfterOptionValue;
    v170 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v102 = (int)v2->m_pkBeforeOptionText;
    v103 = (int)v2->m_kBeforeOptionValue;
    v170 = (int)v2->m_kAfterOptionValue;
  }
  if ( !v102 || !v103 || !*(_DWORD *)(v102 + 52) || (v104 = *(_DWORD *)(v103 + 48), v104 < 0) )
    goto LABEL_216;
  if ( v104 > 0 )
    goto LABEL_210;
  if ( *(_DWORD *)(v170 + 48) > 0 )
  {
    if ( !v104 )
    {
      v105 = **(_DWORD **)(v102 + 52);
      v106 = fs("%.1f");
      (*(void (__thiscall **)(_DWORD, char *))(v105 + 472))(*(_DWORD *)(v102 + 52), v106);
      goto LABEL_211;
    }
LABEL_210:
    v107 = **(_DWORD **)(v102 + 52);
    v108 = fs("+ %.1f");
    (*(void (__thiscall **)(_DWORD, char *))(v107 + 472))(*(_DWORD *)(v102 + 52), v108);
  }
LABEL_211:
  v109 = *(_DWORD *)(v103 + 48);
  v110 = *(_DWORD *)(v170 + 48);
  if ( v109 <= v110 )
  {
    if ( v109 >= v110 )
      goto LABEL_216;
    v145 = &Color::m_kDxRedColor;
  }
  else
  {
    v145 = &Color::m_kDxGreenColor;
  }
  (*(void (__thiscall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v102 + 52) + 468))(*(_DWORD *)(v102 + 52), v145);
LABEL_216:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_234;
    v111 = (int)v2->m_pkAfterOptionText;
    v112 = (int)v2->m_kAfterOptionValue;
    v171 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v111 = (int)v2->m_pkBeforeOptionText;
    v112 = (int)v2->m_kBeforeOptionValue;
    v171 = (int)v2->m_kAfterOptionValue;
  }
  if ( !v111 || !v112 || !*(_DWORD *)(v111 + 56) || (v113 = *(_DWORD *)(v112 + 52), v113 < 0) )
    goto LABEL_234;
  if ( v113 > 0 )
    goto LABEL_228;
  if ( *(_DWORD *)(v171 + 52) > 0 )
  {
    if ( !v113 )
    {
      v114 = **(_DWORD **)(v111 + 56);
      v115 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v114 + 472))(*(_DWORD *)(v111 + 56), v115);
      goto LABEL_229;
    }
LABEL_228:
    v116 = **(_DWORD **)(v111 + 56);
    v117 = fs("- %d");
    (*(void (__thiscall **)(_DWORD, char *))(v116 + 472))(*(_DWORD *)(v111 + 56), v117);
  }
LABEL_229:
  v118 = *(_DWORD *)(v112 + 52);
  v119 = *(_DWORD *)(v171 + 52);
  if ( v118 <= v119 )
  {
    if ( v118 >= v119 )
      goto LABEL_234;
    v146 = &Color::m_kDxRedColor;
  }
  else
  {
    v146 = &Color::m_kDxGreenColor;
  }
  (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)(v111 + 56) + 468))(v146);
LABEL_234:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      goto LABEL_252;
    v120 = (int)v2->m_pkAfterOptionText;
    v121 = (int)v2->m_kAfterOptionValue;
    v122 = (int)v2->m_kBeforeOptionValue;
  }
  else
  {
    v120 = (int)v2->m_pkBeforeOptionText;
    v121 = (int)v2->m_kBeforeOptionValue;
    v122 = (int)v2->m_kAfterOptionValue;
  }
  v172 = v122;
  v158 = v121;
  if ( !v120 || !v121 || !*(_DWORD *)(v120 + 20) || (v123 = *(_DWORD *)(v121 + 56), v123 < 0) )
    goto LABEL_252;
  if ( v123 > 0 )
    goto LABEL_246;
  if ( *(_DWORD *)(v122 + 56) > 0 )
  {
    if ( !v123 )
    {
      v124 = **(_DWORD **)(v120 + 20);
      v125 = fs("%d");
      (*(void (__thiscall **)(_DWORD, char *))(v124 + 472))(*(_DWORD *)(v120 + 20), v125);
      goto LABEL_247;
    }
LABEL_246:
    v126 = **(_DWORD **)(v120 + 20);
    v127 = fs("+ %d");
    (*(void (__thiscall **)(_DWORD, char *))(v126 + 472))(*(_DWORD *)(v120 + 20), v127);
    v121 = v158;
  }
LABEL_247:
  v128 = *(_DWORD *)(v121 + 56);
  v129 = *(_DWORD *)(v172 + 56);
  if ( v128 <= v129 )
  {
    if ( v128 >= v129 )
      goto LABEL_252;
    v147 = &Color::m_kDxRedColor;
  }
  else
  {
    v147 = &Color::m_kDxGreenColor;
  }
  (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)(v120 + 20) + 468))(v147);
LABEL_252:
  if ( uiItemPos )
  {
    if ( uiItemPos != 1 )
      return;
    v130 = v2->m_iAfterReMainRandomCnt;
  }
  else
  {
    v130 = v2->m_iBeforeReMainRandomCnt;
  }
  if ( v130 >= 0 )
  {
    if ( v2->m_pkRandomCntTextWin )
    {
      v131 = v2->m_pkRandomCntTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v132 = TextData3::Get(0xD7E3063Fu);
      v133 = fs(v132);
      v131[118].__vecDelDtor((NiRefObject *)v2->m_pkRandomCntTextWin, (unsigned int)v133);
    }
  }
}

//----- (00434BD0) --------------------------------------------------------
void __thiscall RandomOptionWin::RefreshItemSlot(RandomOptionWin *this)
{
  RandomOptionWin *v1; // esi@1
  unsigned int v2; // eax@1
  InventoryWin *v3; // ecx@1
  ItemIcon *v4; // ecx@2
  Item *v5; // eax@3

  v1 = this;
  v2 = this->m_pkChangeSlot->m_uiSenderInvIndex;
  v3 = this->m_pkInventoryWin;
  if ( v2 < 0xC0 && (v4 = (ItemIcon *)v3->m_apkInvWin[v2]) != 0 )
    v5 = ItemIcon::GetItem(v4);
  else
    v5 = 0;
  ItemIcon::SetItem(&v1->m_pkChangeSlot->baseclass_0, v5, 1);
  RandomOptionWin::SetItemOptionText(v1, 1u);
}

//----- (00434C20) --------------------------------------------------------
void __thiscall RandomOptionWin::SetItemOption(RandomOptionWin *this, unsigned int uiItemPos, ItemOptionStorage *kOptionStorage)
{
  char *v3; // esi@4
  signed int v4; // edx@7
  char *v5; // eax@8

  if ( kOptionStorage )
  {
    if ( uiItemPos )
    {
      if ( uiItemPos != 1 )
        return;
      v3 = (char *)this->m_kAfterOptionValue;
    }
    else
    {
      v3 = (char *)this->m_kBeforeOptionValue;
    }
    if ( v3 )
    {
      v4 = 0;
      if ( kOptionStorage->fixed.optionnumber.str._bf0 & 0xFE )
      {
        v5 = (char *)kOptionStorage->optionlist;
        do
        {
          *(_DWORD *)&v3[4 * (unsigned __int8)*v5] = *(_WORD *)(v5 + 1);
          ++v4;
          v5 += 3;
        }
        while ( v4 < (signed int)((unsigned int)kOptionStorage->fixed.optionnumber.str._bf0 >> 1) );
      }
      RandomOptionWin::SetItemOptionText(this, uiItemPos);
    }
  }
}

//----- (00434C90) --------------------------------------------------------
ChangeSlotWin *__cdecl ChangeSlotWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  ChangeSlotWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1D4u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v3);
    LOBYTE(v8) = 1;
    *(_DWORD *)v4 = &ChangeSlotWin::_vftable_;
    *((_DWORD *)v4 + 58) = &ChangeSlotWin::_vftable_;
    ItemIcon::SetItem((ItemIcon *)v4, 0, 1);
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 612))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (ChangeSlotWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 97FB0C: using guessed type int (__stdcall *ChangeSlotWin___vftable_)(int uiFlags);
// 97FB2C: using guessed type int (__thiscall *ChangeSlotWin___vftable_)(void *p, char);

//----- (00434DF0) --------------------------------------------------------
bool __thiscall RandomOptionWin::Create(RandomOptionWin *this, PgFrameWork *pkFrameWork)
{
  RandomOptionWin *v2; // esi@1
  PgFrameWork *v3; // edi@1
  NiTexturePalette *v4; // ebx@1
  char *v5; // eax@3
  NiNode *v6; // eax@3
  NiNode *v7; // esi@7
  volatile LONG *v8; // eax@7
  PgSprData *v10; // eax@12
  int v11; // ebx@15
  NiSourceTexture *v12; // eax@17
  PgSprData *v13; // eax@20
  PgSprData *v14; // edi@21
  PgSprData *v15; // edi@22
  D3DXCOLOR v16; // ST34_16@22
  char *v17; // eax@22
  PgWinText *v18; // edi@22
  NiRefObjectVtbl *v19; // ebx@22
  PgFont *v20; // eax@22
  D3DXCOLOR v21; // ST2C_16@22
  char *v22; // eax@22
  D3DXCOLOR v23; // ST2C_16@22
  char *v24; // eax@22
  D3DXCOLOR v25; // ST34_16@22
  PgWinText *v26; // ebx@22
  NiRefObjectVtbl *v27; // edi@22
  char *v28; // eax@22
  D3DXCOLOR v29; // ST2C_16@22
  PgWinText *v30; // eax@22
  NiRefObjectVtbl *v31; // edi@22
  PgFont *v32; // eax@22
  signed int v33; // edi@22
  int v34; // ebx@22
  D3DXCOLOR v35; // ST2C_16@23
  char *v36; // ST24_4@23
  char *v37; // eax@23
  D3DXCOLOR v38; // ST2C_16@23
  char *v39; // eax@23
  D3DXCOLOR v40; // ST2C_16@23
  char *v41; // eax@23
  PgWinText *v42; // eax@23
  PgSprData *v43; // eax@24
  int v44; // ebx@24
  PgWinSpr *v45; // edi@24
  ChangeSlotWin *v46; // eax@24
  PgWin *v47; // edi@24
  D3DXCOLOR v48; // ST34_16@24
  char *v49; // eax@24
  PgWinSpr *v50; // edi@24
  NiNode *v51; // ebx@26
  char *v52; // eax@38
  NiNode *v53; // esi@39
  void *v54; // edi@43
  NiObject *v55; // eax@44
  NiRefObjectVtbl *v56; // eax@47
  NiNode *v57; // esi@49
  NiNode *v58; // esi@52
  const char *v59; // [sp+38h] [bp-A4h]@18
  int *v60; // [sp+3Ch] [bp-A0h]@18
  int *v61; // [sp+40h] [bp-9Ch]@18
  NiSourceTexture *v62; // [sp+44h] [bp-98h]@18
  void *kOptionText[15]; // [sp+58h] [bp-84h]@22
  UIUtil ui; // [sp+94h] [bp-48h]@15
  float v65; // [sp+A8h] [bp-34h]@47
  float v66; // [sp+ACh] [bp-30h]@47
  float v67; // [sp+B0h] [bp-2Ch]@47
  int iOffX; // [sp+B4h] [bp-28h]@15
  int v69; // [sp+B8h] [bp-24h]@22
  PgFrameWork *iOffY; // [sp+BCh] [bp-20h]@15
  char **v71; // [sp+C0h] [bp-1Ch]@22
  NiPointer<NiNode> pkNiNodePtr; // [sp+C4h] [bp-18h]@36
  int iLeft; // [sp+C8h] [bp-14h]@12
  NiPointer<NiNode> spNode; // [sp+CCh] [bp-10h]@1
  int v75; // [sp+D8h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = pkFrameWork;
  this->m_pkFrameWork = pkFrameWork;
  v75 = 0;
  this->m_pkInventoryWin = (InventoryWin *)v3[19].m_BackFrameID;
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\RandomOptionWin.nif ");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  v6 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\RandomOptionWin.nif load fila", "LoadFail", spNode.m_pObject);
      v6 = spNode.m_pObject;
    }
    v75 = -1;
    if ( !v6 )
      return 0;
    v7 = v6;
    v8 = (volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, (int *)&pkFrameWork, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v10, 0, v3, "RandomOptionWin", 0) )
  {
LABEL_13:
    v7 = spNode.m_pObject;
    v75 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v8 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
    if ( !InterlockedDecrement(v8) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v11 = iLeft;
  iOffY = pkFrameWork;
  iOffX = iLeft;
  UIUtil::UIUtil(&ui);
  LOBYTE(v75) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  if ( !MenuTexMgr::GetTexture(0x18u) )
  {
    LOBYTE(v75) = 0;
    UIUtil::_UIUtil(&ui);
    goto LABEL_13;
  }
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v62 = v12;
    v61 = (int *)&pkFrameWork;
    v60 = &iLeft;
    v59 = "Theme";
  }
  else
  {
    v62 = 0;
    v61 = (int *)&pkFrameWork;
    v60 = &iLeft;
    v59 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v59, v60, v61, v62);
  PgWinSpr::CreateWin(iLeft, (int)pkFrameWork, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, (int *)&pkFrameWork, 0);
    PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(iLeft, (int)pkFrameWork, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, (int *)&pkFrameWork, 0);
  PgSprData::Add(v15, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v15, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(
    iLeft - v11,
    (char *)pkFrameWork - (char *)iOffY,
    v15,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    4u,
    0,
    0);
  UIUtil::CreateSpr(&ui, "IconSlot", 0);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v17 = TextData3::Get(0x858292DEu);
  v18 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v17, COERCE_D3DXCOLOR(v16.r), 5u);
  v19 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = Font::Get(MAIN_MENU);
  v19[113].__vecDelDtor((NiRefObject *)v18, (unsigned int)v20);
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v18,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v18,
    1u);
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v18,
    0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v22 = TextData3::Get(0xD024FA45u);
  UIUtil::CreateText(&ui, "Text01", v22, 0, COERCE_D3DXCOLOR(v21.r), 4u, 0, 1);
  *(_QWORD *)&v23.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v23.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v24 = TextData3::Get(0xDEE0F93Bu);
  UIUtil::CreateText(&ui, "Text02", v24, 0, COERCE_D3DXCOLOR(v23.r), 4u, 0, 1);
  *(_QWORD *)&v25.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v25.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v26 = UIUtil::CreateTextNoSpr(&ui, "Text03", &byte_97F926, COERCE_D3DXCOLOR(v25.r), 4u);
  v27 = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = TextData3::Get(0x2D2AF24Au);
  ((void (__thiscall *)(PgWinText *, char *, _DWORD))v27[120].__vecDelDtor)(v26, v28, 0);
  kOptionText[0] = TextData::Get(0x535F9BA8u);
  kOptionText[1] = TextData::Get(0x445FA199u);
  kOptionText[2] = TextData::Get(0x9CAB8AE1u);
  kOptionText[3] = TextData::Get(0x495F9DA2u);
  kOptionText[4] = TextData::Get(0x575F9C9Du);
  kOptionText[5] = TextData3::Get(0xE2DB033Eu);
  kOptionText[6] = TextData::Get(0xD342414Au);
  kOptionText[7] = TextData::Get(0x34482B2Bu);
  kOptionText[8] = TextData::Get(0x3B4B7398u);
  kOptionText[9] = TextData::Get(0x2D3C7698u);
  kOptionText[10] = TextData::Get(0x9A03F1DEu);
  kOptionText[11] = TextData::Get(0xD9E9EA4Eu);
  kOptionText[12] = TextData::Get(0x2D8F9C72u);
  kOptionText[13] = TextData3::Get(0x939BE20u);
  kOptionText[14] = TextData3::Get(0x65C9A5E5u);
  *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v30 = UIUtil::CreateText(&ui, "Text04", &byte_97F927, 0, COERCE_D3DXCOLOR(v29.r), 5u, 0, 1);
  v2->m_pkRandomCntTextWin = v30;
  v31 = v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v32 = Font::Get(TITLEBOLD);
  v31[113].__vecDelDtor((NiRefObject *)v2->m_pkRandomCntTextWin, (unsigned int)v32);
  v33 = 1;
  v71 = (char **)kOptionText;
  v34 = (int)v2->m_pkAfterOptionText;
  v69 = 15;
  do
  {
    *(_QWORD *)&v35.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v35.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v36 = *v71;
    v37 = fs("ItemText%02d");
    UIUtil::CreateText(&ui, v37, v36, 0, COERCE_D3DXCOLOR(v35.r), 4u, 0, 0);
    *(_QWORD *)&v38.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v38.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v39 = fs("BeforeCount%02d");
    *(_DWORD *)(v34 - 60) = UIUtil::CreateText(&ui, v39, "-", 0, COERCE_D3DXCOLOR(v38.r), 5u, 0, 0);
    *(_QWORD *)&v40.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v40.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v41 = fs("AfterCount%02d");
    v42 = UIUtil::CreateText(&ui, v41, "-", 0, COERCE_D3DXCOLOR(v40.r), 5u, 0, 0);
    ++v71;
    *(_DWORD *)v34 = v42;
    v34 += 4;
    ++v33;
    --v69;
  }
  while ( v69 );
  v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForgeSlot", &iLeft, (int *)&pkFrameWork, 0);
  v44 = iOffX;
  v45 = PgWinSpr::CreateWin(
          iLeft - iOffX,
          (char *)pkFrameWork - (char *)iOffY,
          v43,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v46 = ChangeSlotWin::CreateWin(
          iLeft - v44 + 1,
          (char *)pkFrameWork - (char *)iOffY + 1,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkChangeSlot = v46;
  v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v46,
    1u);
  ((void (__stdcall *)(signed int))v2->m_pkChangeSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v45,
    1u);
  v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v45,
    1u);
  ((void (__stdcall *)(signed int))v2->m_pkChangeSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_pkChangeSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(2);
  v2->m_pkChangeSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
  IconWin::ShowFocus(&v2->m_pkChangeSlot->baseclass_0.baseclass_0, 1);
  ChangeSlotWin::ReSetSlot(v2->m_pkChangeSlot);
  v47 = (PgWin *)UIUtil::CreateButton(&ui, 0, "Ok", 0, 3);
  *(_QWORD *)&v48.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v48.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v49 = TextData3::Get(0xF591F37u);
  UIUtil::CreateAttachedText(&ui, v47, v49, COERCE_D3DXCOLOR(v48.r), 5u);
  v50 = PgWinSpr::CreateWin(0, 0, 1u, 1u, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  iOffX = (int)v50;
  if ( v50 )
    InterlockedIncrement((volatile LONG *)&v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v51 = v2->m_pAttachEffect.m_pObject;
  LOBYTE(v75) = 2;
  if ( (PgWinSpr *)v51 != v50 )
  {
    if ( v51
      && !InterlockedDecrement((volatile LONG *)&v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v51 )
      v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v51, 1u);
    v2->m_pAttachEffect.m_pObject = (NiNode *)v50;
    if ( v50 )
      InterlockedIncrement((volatile LONG *)&v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  LOBYTE(v75) = 1;
  if ( v50
    && !InterlockedDecrement((volatile LONG *)&v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v50,
      1u);
  ((void (__thiscall *)(RandomOptionWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.30000001,
    0.5);
  pkNiNodePtr.m_pObject = 0;
  LOBYTE(v75) = 3;
  if ( !Folder::m_bInit )
    Folder::Init();
  v52 = Folder::Merge(&Folder::m_acEffect, "RandomOptionProgress.nif");
  PgUtil::LoadNodeNifFile(v52, &pkNiNodePtr, 0);
  if ( !pkNiNodePtr.m_pObject )
  {
    LOBYTE(v75) = 0;
    UIUtil::_UIUtil(&ui);
    v53 = spNode.m_pObject;
    v75 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v53 )
      v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v53, 1u);
    return 0;
  }
  v54 = operator new(0x44u);
  iOffX = (int)v54;
  LOBYTE(v75) = 4;
  if ( v54 )
  {
    v55 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    SpEffect::SpEffect((SpEffect *)v54, (NiNode *)v55);
  }
  else
  {
    v55 = 0;
  }
  LOBYTE(v75) = 3;
  v2->m_apkEffect = (SpEffect *)v55;
  if ( v55 )
  {
    v56 = v55->baseclass_0.vfptr;
    v65 = 0.0;
    v66 = 0.0;
    *(float *)&v56[22].__vecDelDtor = 0.0;
    v67 = 1000.0;
    *(float *)&v56[23].__vecDelDtor = 0.0;
    *(float *)&v56[24].__vecDelDtor = 1000.0;
    v2->m_apkEffect->m_bClamp = 1;
  }
  RandomOptionWin::ResetItemOption(v2);
  LOBYTE(v75) = 1;
  if ( pkNiNodePtr.m_pObject )
  {
    v57 = pkNiNodePtr.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v57 )
        v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v57, 1u);
    }
  }
  LOBYTE(v75) = 0;
  UIUtil::_UIUtil(&ui);
  v58 = spNode.m_pObject;
  v75 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v58 )
    v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v58, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004357C0) --------------------------------------------------------
void __thiscall RandomOptionWin::UpdateMeWin(RandomOptionWin *this, float fCurTime)
{
  RandomOptionWin *v2; // esi@1
  SpEffect *v3; // ecx@1
  char *v4; // eax@6
  MsgBox *v5; // eax@6

  v2 = this;
  v3 = this->m_apkEffect;
  if ( v3->m_bLive )
  {
    SpEffect::Update(v3, fCurTime);
  }
  else
  {
    if ( v2->m_bStartEffect && v2->m_bSuccess && ItemIcon::GetItem(&v2->m_pkChangeSlot->baseclass_0) )
    {
      RandomOptionWin::RefreshItemSlot(v2);
      v2->m_bUseRandomOption = 0;
      v4 = TextData3::Get(0x99D2D6C4u);
      v5 = MsgBox::Modeless(MSGBOX_OKCANCEL, v4);
      v2->m_pkMsgBox = v5;
      if ( v5 )
      {
        ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        v2->m_bStartEffect = 0;
        v2->m_bSuccess = 0;
      }
    }
  }
}

//----- (00435860) --------------------------------------------------------
void __thiscall RandomOptionWin::SetItem(RandomOptionWin *this, unsigned int uiItemPos, Item *pkItem)
{
  RandomOptionWin *v3; // edi@1
  bool v4; // sf@4
  int v5; // eax@4
  int v6; // eax@5
  ItemOptionStorage *v7; // eax@7

  v3 = this;
  if ( pkItem )
  {
    ItemIcon::SetItem(&this->m_pkChangeSlot->baseclass_0, pkItem, 1);
    if ( uiItemPos )
    {
      if ( uiItemPos != 1 )
      {
LABEL_7:
        v7 = (ItemOptionStorage *)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[12].__vecDelDtor)(pkItem);
        RandomOptionWin::SetItemOption(v3, uiItemPos, v7);
        return;
      }
      v5 = v3->m_uiLimitRandomOption
         - (unsigned __int8)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[18].__vecDelDtor)(pkItem);
      v4 = v5 < 0;
      v3->m_iAfterReMainRandomCnt = v5;
    }
    else
    {
      v6 = v3->m_uiLimitRandomOption
         - (unsigned __int8)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[18].__vecDelDtor)(pkItem);
      v4 = v6 < 0;
      v3->m_iBeforeReMainRandomCnt = v6;
    }
    if ( v4 )
      return;
    goto LABEL_7;
  }
}

//----- (004358E0) --------------------------------------------------------
bool __thiscall RandomOptionWin::DropItemSlot(RandomOptionWin *this, PgWinDrop *pkDrop)
{
  RandomOptionWin *v2; // esi@1
  void *v3; // ebx@1
  Item *v5; // edi@3
  char *v6; // eax@5
  int v7; // eax@7
  ItemOptionStorage *v8; // eax@8

  v2 = this;
  RandomOptionWin::ResetItemOption(this);
  v3 = pkDrop->m_pkContents;
  if ( !v3 )
    return 0;
  v5 = (Item *)*((_DWORD *)v3 + 5);
  if ( !v5 )
    return 0;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[18].__vecDelDtor)(*((_DWORD *)v3 + 5)) >= v2->m_uiLimitRandomOption )
  {
    v6 = TextData3::Get(0xE5E9C8F5u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v2->m_pkFrameWork, v6);
    return 0;
  }
  ChangeSlotWin::ReSetSlot(v2->m_pkChangeSlot);
  v2->m_pkChangeSlot->m_uiSenderType = *((_DWORD *)v3 + 2);
  v2->m_pkChangeSlot->m_uiSenderInvIndex = *((_DWORD *)v3 + 3);
  v2->m_pkChangeSlot->m_pkSender = pkDrop->m_pkSender;
  ChangeSlotWin::SetSenderInvSlotLock(v2->m_pkChangeSlot, 1);
  ItemIcon::SetItem(&v2->m_pkChangeSlot->baseclass_0, v5, 1);
  v7 = v2->m_uiLimitRandomOption
     - (unsigned __int8)((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[18].__vecDelDtor)(v5);
  v2->m_iBeforeReMainRandomCnt = v7;
  if ( v7 >= 0 )
  {
    v8 = (ItemOptionStorage *)((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[12].__vecDelDtor)(v5);
    RandomOptionWin::SetItemOption(v2, 0, v8);
  }
  return 1;
}

//----- (004359D0) --------------------------------------------------------
bool __thiscall ChangeSlotWin::EatDropInstance(ChangeSlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PgWin *v4; // esi@1
  void *v6; // eax@4
  int v7; // ecx@5
  int v8; // eax@8
  PgWin *v9; // eax@10
  PgFrameWork *v10; // esi@12
  char *v11; // eax@13

  v4 = (PgWin *)this;
  if ( this->m_bLock )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( !*pkDrop )
    return 0;
  v6 = (*pkDrop)->m_pkContents;
  if ( v6 )
  {
    v7 = *((_DWORD *)v6 + 5);
    if ( !v7 || *((_DWORD *)v6 + 4) || *((_DWORD *)v6 + 2) )
      goto LABEL_14;
    v8 = (*(int (**)(void))(*(_DWORD *)v7 + 48))();
    if ( v8 )
    {
      if ( *(_BYTE *)v8 & 0xFE )
      {
        v9 = PgWin::GetParentWin(v4);
        if ( v9 )
          return RandomOptionWin::DropItemSlot((RandomOptionWin *)v9, *pkDrop);
      }
    }
  }
  v10 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v10 )
  {
    v11 = TextData3::Get(0x37482A69u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v10, v11);
  }
LABEL_14:
  PgCursor::ms_bKeepDrop = 1;
  return 0;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (00435A80) --------------------------------------------------------
void __thiscall RandomOptionWin::RandomOptionWin(RandomOptionWin *this)
{
  RandomOptionWin *v1; // esi@1
  int v2; // eax@1
  signed int v3; // ecx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v4; // [sp-2Ch] [bp-40h]@1
  int v5; // [sp-1Ch] [bp-30h]@1
  signed int v6; // [sp-18h] [bp-2Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // [sp+0h] [bp-14h]@1
  RandomOptionWin *v8; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v1 = this;
  v8 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RandomOptionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RandomOptionWin::_vftable_;
  v9 = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkContents = 0;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_pkChangeSlot = 0;
  v1->m_bStartEffect = 0;
  v1->m_apkEffect = 0;
  v1->m_pAttachEffect.m_pObject = 0;
  v1->m_fCurReqTime = -1.0;
  v7 = &v4;
  *(_WORD *)&v1->m_bSuccess = 256;
  v1->m_bSelectChangeOpt = 0;
  v1->m_iBeforeReMainRandomCnt = 0;
  v1->m_iAfterReMainRandomCnt = 0;
  v6 = 15;
  v5 = 0;
  LOBYTE(v9) = 3;
  v4.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v4, "LimitRandomOption", 0x11u);
  v1->m_uiLimitRandomOption = CSingleDataMap::GetValue(&g_kSingleDataMap, v4);
  v1->m_pkMsgBox = 0;
  v1->m_bRandomStart = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v2 = (int)v1->m_pkAfterOptionText;
  v3 = 15;
  do
  {
    *(_DWORD *)(v2 - 60) = 0;
    *(_DWORD *)v2 = 0;
    v2 += 4;
    --v3;
  }
  while ( v3 );
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 97FD98: using guessed type int (__stdcall *RandomOptionWin___vftable_)(int uiFlags);
// 97FDB4: using guessed type int (__thiscall *RandomOptionWin___vftable_)(void *p, char);

//----- (00435BB0) --------------------------------------------------------
RandomOptionWin *__cdecl RandomOptionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  RandomOptionWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x2D8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    RandomOptionWin::RandomOptionWin((RandomOptionWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (RandomOptionWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00435CE0) --------------------------------------------------------
void __thiscall RandomOptionWin::DirectMessage(RandomOptionWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  RandomOptionWin *v4; // esi@1
  void *v5; // edi@2
  Item *v6; // eax@5
  Item *v7; // edi@5
  int v8; // eax@6
  ItemOptionStorage *v9; // eax@7
  unsigned __int16 *v10; // eax@8
  int v11; // eax@9
  PgWinText *v12; // ecx@9
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@9
  PgWinText *v14; // ecx@10
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@10
  PgWinText *v16; // ecx@13
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // eax@13

  v4 = this;
  if ( iMsgTag != 27 || (v5 = pvBody) == 0 )
    return;
  if ( *(_DWORD *)pvBody )
    goto LABEL_12;
  if ( !BYTE1(this->m_pkAfterOptionText[14]) )
  {
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x61u, 0, 0);
    v14 = v4->m_pkAfterOptionText[9];
    *(_WORD *)((char *)&v4->m_pkAfterOptionText[14] + 1) = 1;
    v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    LOBYTE(v14[1].baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject) = 0;
    ((void (__stdcall *)(_DWORD))v15)(1);
    goto LABEL_11;
  }
  RandomOptionWin::ResetItemOption((RandomOptionWin *)((char *)this - 232));
  v6 = InventoryWin::GetItemInInv(
         LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
         (unsigned int)v4->m_pkAfterOptionText[9][1].baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail);
  v7 = v6;
  if ( v6 )
  {
    ItemIcon::SetItem((ItemIcon *)v4->m_pkAfterOptionText[9], v6, 1);
    v8 = v4->m_kBeforeOptionValue[2]
       - (unsigned __int8)((int (__thiscall *)(_DWORD))v7->baseclass_0.vfptr[18].__vecDelDtor)(v7);
    v4->m_kBeforeOptionValue[0] = v8;
    if ( v8 >= 0 )
    {
      v9 = (ItemOptionStorage *)((int (__thiscall *)(_DWORD))v7->baseclass_0.vfptr[12].__vecDelDtor)(v7);
      RandomOptionWin::SetItemOption((RandomOptionWin *)((char *)v4 - 232), 0, v9);
    }
  }
  v10 = (unsigned __int16 *)ItemInfoTab::GetByInxName("RandomOption");
  if ( v10 )
  {
    v11 = InventoryWin::FindItem(
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
            *v10);
    GameFrameWork::NcItemRandomOptionChangeReq(
      LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]),
      (int)v4->m_pkAfterOptionText[9][1].baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail,
      v11);
    SpEffect::Start((SpEffect *)v4->m_pkAfterOptionText[11], &v4->m_pkAfterOptionText[12]->baseclass_0.baseclass_0);
    v12 = v4->m_pkAfterOptionText[9];
    LOBYTE(v4->m_pkAfterOptionText[10]) = 1;
    v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    LOBYTE(v12[1].baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject) = 1;
    ((void (__stdcall *)(_DWORD))v13)(0);
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, RandomOptionProgress);
    v5 = pvBody;
    *(float *)&v4->m_pkAfterOptionText[13] = Timer::ms_fCurTime;
    BYTE2(v4->m_pkAfterOptionText[14]) = 1;
LABEL_11:
    LOBYTE(v4->m_kBeforeOptionValue[5]) ^= 1u;
LABEL_12:
    if ( *(_DWORD *)v5 == 1 )
    {
      v16 = v4->m_pkAfterOptionText[9];
      *(_WORD *)((char *)&v4->m_pkAfterOptionText[14] + 1) = 1;
      v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
      LOBYTE(v16[1].baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject) = 0;
      ((void (__stdcall *)(_DWORD))v17)(1);
      if ( LOBYTE(v4->m_kBeforeOptionValue[5]) == 1 )
        LOBYTE(v4->m_kBeforeOptionValue[5]) = 0;
    }
    v4->m_kBeforeOptionValue[4] = 0;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00435E90) --------------------------------------------------------
void __thiscall RandomOptionWin::OnApply(RandomOptionWin *this)
{
  RandomOptionWin *v1; // esi@1
  unsigned __int16 *v2; // edi@2
  char *v3; // eax@4
  Item *v4; // eax@5
  char *v5; // eax@6
  char *v6; // eax@9
  MsgBox *v7; // eax@11
  char *v8; // eax@11
  char *v9; // eax@12
  char *v10; // eax@12
  float CurTime; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_bUseRandomOption )
  {
    CurTime = Timer::ms_fCurTime;
    v2 = (unsigned __int16 *)ItemInfoTab::GetByInxName("RandomOption");
    if ( v2 )
    {
      if ( ItemIcon::GetItem(&v1->m_pkChangeSlot->baseclass_0) )
      {
        v4 = ItemIcon::GetItem(&v1->m_pkChangeSlot->baseclass_0);
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[18].__vecDelDtor)(v4) < v1->m_uiLimitRandomOption )
        {
          if ( v1->m_fCurReqTime < 0.0 || CurTime - v1->m_fCurReqTime > 5.0 )
          {
            if ( InventoryWin::GetTotalItemCount(v1->m_pkInventoryWin, *v2) )
            {
              v7 = MsgBox::Modal(MSGBOX_RANDOMOPTION, &pcFormat);
              v1->m_pkMsgBox = v7;
              ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
              v8 = TextData3::Get(0x8AE9ADF6u);
              MsgBox::SetUnderSlotText(v1->m_pkMsgBox, v8);
            }
            else
            {
              v9 = TextData3::Get(0x23515B58u);
              v10 = fs(v9);
              GameFrameWork::AddSysMsg((GameFrameWork *)v1->m_pkFrameWork, v10);
            }
          }
          else
          {
            v6 = TextData::Get(0x85F7D6D1u);
            GameFrameWork::AddSysMsg((GameFrameWork *)v1->m_pkFrameWork, v6);
          }
        }
        else
        {
          v5 = TextData3::Get(0xE5E9C8F5u);
          GameFrameWork::AddSysMsg((GameFrameWork *)v1->m_pkFrameWork, v5);
        }
      }
      else
      {
        v3 = TextData3::Get(0xE24C1B1Fu);
        GameFrameWork::AddSysMsg((GameFrameWork *)v1->m_pkFrameWork, v3);
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00436000) --------------------------------------------------------
void __thiscall RandomOptionWin::OnCommand(RandomOptionWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4

  switch ( wParam )
  {
    case 0u:
      RandomOptionWin::OnApply(this);
      break;
    case 1u:
      RandomOptionWin::OnSlotLClick(this);
      break;
    case 3u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "RandomOptionWin");
      break;
    case 4u:
      RandomOptionWin::OnCancel(this);
      break;
    default:
      return;
  }
}

//----- (00436070) --------------------------------------------------------
void *__thiscall ChangeSlotWin::_vector_deleting_destructor_(ChangeSlotWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChangeSlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChangeSlotWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97FB0C: using guessed type int (__stdcall *ChangeSlotWin___vftable_)(int uiFlags);
// 97FB2C: using guessed type int (__thiscall *ChangeSlotWin___vftable_)(void *p, char);

//----- (004360B0) --------------------------------------------------------
void *__thiscall RandomOptionWin::_vector_deleting_destructor_(RandomOptionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  RandomOptionWin::_RandomOptionWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004360E0) --------------------------------------------------------
void __thiscall IDRankingWin::UpdateMeWin(IDRankingWin *this, float fCurTime)
{
  IDRankingWin *v2; // esi@1
  PgFrameWork *v3; // eax@1
  int v4; // esi@5
  signed int v5; // edi@5

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pkIDSlideListWin, v2->m_pkIDSlideBar);
  if ( (IDRankingWin *)PgWinMgr::GetTopWin(&Pgg_kWinMgr) == v2 && !v2->m_bShowIDSlideList )
  {
    v4 = (int)v2->m_pkTopPortrait;
    v5 = 3;
    do
    {
      (*(void (**)(void))(**(_DWORD **)v4 + 268))();
      v4 += 4;
      --v5;
    }
    while ( v5 );
  }
}

//----- (00436150) --------------------------------------------------------
void __thiscall IDRankingWin::OnMouseEvent(IDRankingWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin)
{
  IDRankingWin *v3; // esi@1
  int v4; // esi@6
  signed int v5; // edi@6

  v3 = this;
  if ( !(unsigned __int8)((int (*)(void))this->m_pkIDSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    && (!eMouseEvent || eMouseEvent == 3) )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)(v3)
      && (PgWinBut *)pkWin != v3->m_pkIDSlideBtn )
    {
      v4 = (int)v3->m_pkTopPortrait;
      v5 = 3;
      do
      {
        (*(void (**)(void))(**(_DWORD **)v4 + 268))();
        v4 += 4;
        --v5;
      }
      while ( v5 );
    }
  }
}

//----- (004361C0) --------------------------------------------------------
void __thiscall IDRankingWin::DirectMessage(IDRankingWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  IDRankingWin *v4; // esi@1
  unsigned int v5; // eax@1
  IDirectMessenger *v6; // eax@2
  NiMaterialProperty *v7; // eax@5
  IDirectMessenger *v8; // eax@6
  int v9; // esi@12
  signed int v10; // edi@12
  int v11; // esi@15
  signed int v12; // edi@15

  v4 = this;
  v5 = this->baseclass_0.baseclass_0.baseclass_0.m_uiExtStyle;
  if ( v5 )
    v6 = (IDirectMessenger *)(v5 + 232);
  else
    v6 = 0;
  if ( pkFrom != v6 )
  {
    v7 = this->baseclass_0.baseclass_0.baseclass_0.m_spMaterialProp.m_pObject;
    v8 = (IDirectMessenger *)(v7 ? (NiMaterialProperty *)&v7[2].m_amb.b : 0);
    if ( pkFrom != v8
      && !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.m_spMaterialProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      if ( iMsgTag == 4 )
      {
        v11 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.___u2;
        v12 = 3;
        do
        {
          (*(void (**)(void))(**(_DWORD **)v11 + 268))();
          v11 += 4;
          --v12;
        }
        while ( v12 );
      }
      else
      {
        if ( iMsgTag == 7 )
        {
          v9 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.___u2;
          v10 = 3;
          do
          {
            (*(void (**)(void))(**(_DWORD **)v9 + 268))();
            v9 += 4;
            --v10;
          }
          while ( v10 );
        }
      }
    }
  }
}

//----- (00436260) --------------------------------------------------------
void __thiscall IDRankingWin::OnHelpLink(IDRankingWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "IDRankingWin");
}

//----- (00436290) --------------------------------------------------------
void __thiscall IDRankingWin::OnCancelWin(IDRankingWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::IDRankingShowWin((GameFrameWork *)v1, 0);
}

//----- (004362B0) --------------------------------------------------------
void __thiscall IDRankingWin::ShowTopPortrait(IDRankingWin *this)
{
  PgWin **v1; // esi@1
  signed int v2; // edi@1

  v1 = (PgWin **)this->m_pkTopPortrait;
  v2 = 3;
  do
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, *v1);
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (004362E0) --------------------------------------------------------
void __thiscall IDRankingWin::ClearMyRecordInfo(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMyRecordMyInfo[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98000F);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecordMyInfo[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98001D);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecordMyInfo[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98001E);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecordMyInfo[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98001F);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[0][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980026);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[0][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980027);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[0][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98002E);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[0][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98002F);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[1][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980051);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[1][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980052);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[1][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980053);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyRecord[1][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980061);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyDate[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980062);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyDate[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980063);
}

//----- (00436410) --------------------------------------------------------
void __thiscall FaceCutMaskWin::FaceCutMaskWin(FaceCutMaskWin *this)
{
  FaceCutMaskWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FaceCutMaskWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FaceCutMaskWin::_vftable_;
  v1->m_pPortraitTexture = 0;
}
// 98054C: using guessed type int (__stdcall *FaceCutMaskWin___vftable_)(int uiFlags);
// 98056C: using guessed type int (__thiscall *FaceCutMaskWin___vftable_)(void *p, char);

//----- (00436440) --------------------------------------------------------
void __thiscall FaceCutMaskWin::_FaceCutMaskWin(FaceCutMaskWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FaceCutMaskWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FaceCutMaskWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98054C: using guessed type int (__stdcall *FaceCutMaskWin___vftable_)(int uiFlags);
// 98056C: using guessed type int (__thiscall *FaceCutMaskWin___vftable_)(void *p, char);

//----- (00436460) --------------------------------------------------------
void __thiscall FaceCutMaskWin::SetPortraitTexture(FaceCutMaskWin *this, NiTexture *pTexture)
{
  FaceCutMaskWin *v2; // esi@1

  v2 = this;
  MaskedWin::SetBaseTexture(this->m_pkTopPortrait, pTexture);
  ((void (__stdcall *)(_DWORD))v2->m_pkTopPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
}

//----- (00436490) --------------------------------------------------------
void __thiscall IDRankingWin::OnShowWin(IDRankingWin *this)
{
  PgFrameWork *v1; // eax@2

  if ( *(SHINE_INDUN_INFO **)&this->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0] == this->m_vecIDInfo.baseclass_0._Mylast )
  {
    v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v1 )
      GameFrameWork::NcInstanceDungeonRankListReq((GameFrameWork *)v1);
  }
}

//----- (004364C0) --------------------------------------------------------
void __thiscall IDRankingWin::ClearRankInfo(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1
  int v2; // esi@1
  signed int v3; // ebx@1
  NiTexture *v4; // eax@2
  int v5; // edi@2

  v1 = this;
  SlideListWin::RemoveAllList(this->m_pkRankListWin);
  v2 = (int)v1->m_pkTopName;
  v3 = 3;
  do
  {
    v4 = PortraitTextureBuffer::GetBlackTexture();
    v5 = *(_DWORD *)(v2 + 24);
    MaskedWin::SetBaseTexture(*(MaskedWin **)(v5 + 344), v4);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 344) + 324))(0.0);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v2 + 472))(&unk_980007);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v2 + 12) + 472))(&unk_98000E);
    v2 += 4;
    --v3;
  }
  while ( v3 );
}

//----- (00436540) --------------------------------------------------------
void __thiscall IDRankingWin::OnSlideIDList(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkIDSlideBar;
  if ( v2 )
  {
    v3 = v1->m_pkIDSlideListWin;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pkIDSlideListWin->m_nViewStartPos = v1->m_pkIDSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pkIDSlideListWin);
    }
  }
}

//----- (00436590) --------------------------------------------------------
void __thiscall IDRankingWin::RecordInfoReq(IDRankingWin *this, unsigned int nTitle, unsigned int nSelectID)
{
  IDRankingWin *v3; // esi@1
  PgFrameWork *v4; // ecx@1
  SHINE_INDUN_INFO *v5; // edx@3

  v3 = this;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 )
  {
    if ( nSelectID != -1 )
    {
      v5 = *(SHINE_INDUN_INFO **)&v3->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v5 != v3->m_vecIDInfo.baseclass_0._Mylast )
      {
        switch ( nTitle )
        {
          case 0u:
            GameFrameWork::NcInstanceDungeonRankTabDamagedealtReq((GameFrameWork *)v4, &v5[nSelectID]);
            v3->m_nReqTitleState = nTitle;
            v3->m_nReqSelectID = nSelectID;
            break;
          case 1u:
            GameFrameWork::NcInstanceDungeonRankTabDamagetakenReq(
              (GameFrameWork *)v4,
              (SHINE_INDUN_INFO *)(*(_DWORD *)&v3->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0] + 13 * nSelectID));
            v3->m_nReqTitleState = nTitle;
            v3->m_nReqSelectID = nSelectID;
            break;
          case 2u:
            GameFrameWork::NcInstanceDungeonRankTabHealingdoneReq((GameFrameWork *)v4, &v5[nSelectID]);
            v3->m_nReqTitleState = nTitle;
            v3->m_nReqSelectID = nSelectID;
            break;
          case 3u:
            GameFrameWork::NcInstanceDungeonRankTabMyRankReq(
              (GameFrameWork *)v4,
              (SHINE_INDUN_INFO *)(*(_DWORD *)&v3->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0] + 13 * nSelectID));
            goto LABEL_9;
          default:
LABEL_9:
            v3->m_nReqTitleState = nTitle;
            v3->m_nReqSelectID = nSelectID;
            break;
        }
      }
    }
  }
}

//----- (00436680) --------------------------------------------------------
void __thiscall IDRankingWin::SetIDSelectBtn(IDRankingWin *this, unsigned int nSelectIDIdx)
{
  IDRankingWin *v2; // esi@1
  MapInfo *v3; // eax@2
  char *v4; // eax@3
  PgWinText *v5; // ecx@4
  int dwMapID; // [sp+8h] [bp-108h]@1
  char chData[256]; // [sp+Ch] [bp-104h]@2
  unsigned int v8; // [sp+10Ch] [bp-4h]@1
  int v9; // [sp+110h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  if ( SlideListWin::GetData(this->m_pkIDSlideListWin, nSelectIDIdx, (unsigned int *)&dwMapID) )
  {
    v3 = MapInfoTab::GetByMapName(dwMapID);
    strncpy(chData, v3->Name, 0x20u);
    if ( *(_BYTE *)(*(_DWORD *)&v2->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0] + 13 * nSelectIDIdx + 12) == 2 )
    {
      v4 = TextData3::Get(0x4026F785u);
      strncat(chData, v4, 0x100u);
    }
    v5 = v2->m_pkIDSlideText;
    v2->m_nSelectID = nSelectIDIdx;
    ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(chData);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00436740) --------------------------------------------------------
bool __thiscall FaceCutMaskWin::Create(FaceCutMaskWin *this, int nIndex)
{
  FaceCutMaskWin *v2; // ebx@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  NiSourceTexture *v5; // eax@3
  NiNode *v6; // edi@3
  NiSourceTexture *v7; // ST18_4@3
  char *v8; // eax@3
  NiRefObjectVtbl *v9; // edi@3
  char *v10; // eax@3
  NiTriShape *v11; // eax@3
  NiTriShape *v12; // edi@3
  int v13; // eax@4
  char v14; // al@7
  NiTexture *v15; // eax@9
  MaskedWin *v16; // ecx@9
  NiNode *v17; // edi@9
  char *v18; // eax@9
  NiRefObjectVtbl *v19; // edi@9
  char *v20; // eax@9
  NiTriShape *v21; // eax@9
  NiTriShape *v22; // esi@9
  int v23; // eax@12
  char v24; // al@15
  NiNode *v25; // esi@17
  NiSourceTexture *pkTexture; // [sp+28h] [bp-1Ch]@3
  int uiLeft; // [sp+2Ch] [bp-18h]@3
  int uiTop; // [sp+30h] [bp-14h]@3
  NiPointer<NiNode> spNode; // [sp+34h] [bp-10h]@1
  int v31; // [sp+40h] [bp-4h]@1
  NiNode *nIndexa; // [sp+4Ch] [bp+8h]@3
  NiNode *nIndexb; // [sp+4Ch] [bp+8h]@9

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v31 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\IDRankingWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = MenuTexMgr::GetTexture(0x1Du);
  v6 = spNode.m_pObject;
  v7 = v5;
  pkTexture = v5;
  v8 = fs("FaceCut_Mask%.2d");
  PgSprData::Create(&v6->baseclass_0, v8, &uiLeft, &uiTop, v7);
  v9 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  nIndexa = spNode.m_pObject;
  v10 = fs("FaceCut_Mask%.2d");
  v11 = (NiTriShape *)v9[18].__vecDelDtor((NiRefObject *)nIndexa, (unsigned int)v10);
  v12 = v11;
  if ( v11 )
  {
    v13 = ((int (__thiscall *)(NiTriShape *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v11);
    if ( v13 )
    {
      while ( (NiRTTI *)v13 != &NiTriShape::m_RTTI )
      {
        v13 = *(_DWORD *)(v13 + 4);
        if ( !v13 )
          goto LABEL_7;
      }
      v14 = 1;
    }
    else
    {
LABEL_7:
      v14 = 0;
    }
    v11 = (NiTriShape *)(v14 != 0 ? (int)v12 : 0);
  }
  v2->m_pkTopPortrait = MaskedWin::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0);
  v15 = PortraitTextureBuffer::GetBlackTexture();
  v16 = v2->m_pkTopPortrait;
  v2->m_pPortraitTexture = v15;
  MaskedWin::SetBaseTexture(v16, v15);
  ((void (__stdcall *)(signed int))v2->m_pkTopPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v17 = spNode.m_pObject;
  v18 = fs("Fill_Exp%.2d");
  PgSprData::Create(&v17->baseclass_0, v18, &uiLeft, &uiTop, pkTexture);
  v19 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  nIndexb = spNode.m_pObject;
  v20 = fs("Fill_Exp%.2d");
  v21 = (NiTriShape *)v19[18].__vecDelDtor((NiRefObject *)nIndexb, (unsigned int)v20);
  v22 = v21;
  if ( v21 )
  {
    v23 = ((int (__thiscall *)(NiTriShape *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v21);
    if ( v23 )
    {
      while ( (NiRTTI *)v23 != &NiTriShape::m_RTTI )
      {
        v23 = *(_DWORD *)(v23 + 4);
        if ( !v23 )
          goto LABEL_15;
      }
      v24 = 1;
    }
    else
    {
LABEL_15:
      v24 = 0;
    }
    v21 = (NiTriShape *)(v24 != 0 ? (int)v22 : 0);
  }
  PgWinCircleGauge::CreateWin(uiLeft, uiTop, v21, 0, 0.0, 360.0, &v2->baseclass_0.baseclass_0.baseclass_0);
  v25 = spNode.m_pObject;
  v31 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00436960) --------------------------------------------------------
void __thiscall IDRankingWin::ShowRankNode(IDRankingWin *this, bool bIsRankNode)
{
  int v2; // ebx@1
  IDRankingWin *v3; // edi@1
  PgWin **v4; // esi@1
  PgWin **i; // esi@3

  v2 = bIsRankNode;
  v3 = this;
  v4 = *(PgWin ***)&this->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v4 != this->m_vecVisibleRank.baseclass_0._Mylast )
  {
    do
    {
      ((void (__stdcall *)(_DWORD))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bIsRankNode);
      ++v4;
    }
    while ( v4 != v3->m_vecVisibleRank.baseclass_0._Mylast );
  }
  for ( i = *(PgWin ***)&v3->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0];
        i != v3->m_vecVisibleMyRecord.baseclass_0._Mylast;
        ++i )
  {
    LOBYTE(v2) = bIsRankNode == 0;
    ((void (__stdcall *)(int))(*i)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
  }
}

//----- (004369D0) --------------------------------------------------------
void __thiscall IDRankingWin::SetTitleBtn(IDRankingWin *this, unsigned int nTitleIdx)
{
  IDRankingWin *v2; // esi@1
  ColumnBut *v3; // eax@1
  ColumnBut *v4; // eax@3
  ColumnBut *v5; // eax@5
  ColumnBut *v6; // eax@7
  PgWinText *v7; // edi@10
  NiRefObjectVtbl *v8; // ebx@10
  char *v9; // eax@10
  PgWinText *v10; // edi@11
  NiRefObjectVtbl *v11; // ebx@11
  char *v12; // eax@11
  PgWinText *v13; // edi@12
  NiRefObjectVtbl *v14; // ebx@12
  char *v15; // eax@12

  v2 = this;
  v3 = this->m_pkTitleStateCheckBox[0];
  if ( v3 )
    v3->m_bCheck = 0;
  v4 = this->m_pkTitleStateCheckBox[1];
  if ( v4 )
    v4->m_bCheck = 0;
  v5 = this->m_pkTitleStateCheckBox[2];
  if ( v5 )
    v5->m_bCheck = 0;
  v6 = this->m_pkTitleStateCheckBox[3];
  if ( v6 )
    v6->m_bCheck = 0;
  switch ( nTitleIdx )
  {
    case 0u:
      this->m_pkTitleStateCheckBox[0]->m_bCheck = 1;
      v7 = this->m_pkRecordListText;
      v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v9 = TextData3::Get(0x9390A4C8u);
      v8[118].__vecDelDtor((NiRefObject *)v7, (unsigned int)v9);
      IDRankingWin::ShowRankNode(v2, 1);
      v2->m_nTitleState = 0;
      break;
    case 1u:
      this->m_pkTitleStateCheckBox[1]->m_bCheck = 1;
      v10 = this->m_pkRecordListText;
      v11 = v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v12 = TextData3::Get(0x2E342C63u);
      v11[118].__vecDelDtor((NiRefObject *)v10, (unsigned int)v12);
      IDRankingWin::ShowRankNode(v2, 1);
      v2->m_nTitleState = 1;
      break;
    case 2u:
      this->m_pkTitleStateCheckBox[2]->m_bCheck = 1;
      v13 = this->m_pkRecordListText;
      v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v15 = TextData3::Get(0x9E846385u);
      v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
      IDRankingWin::ShowRankNode(v2, 1);
      v2->m_nTitleState = 2;
      break;
    case 3u:
      this->m_pkTitleStateCheckBox[3]->m_bCheck = 1;
      IDRankingWin::ShowRankNode(this, 0);
      v2->m_nTitleState = 3;
      break;
    default:
      return;
  }
}

//----- (00436B40) --------------------------------------------------------
void __thiscall IDRankingWin::ShowIDList(IDRankingWin *this, bool bShow)
{
  IDRankingWin *v2; // edi@1
  SlideBar *v3; // ecx@1
  PgWin **i; // esi@1

  v2 = this;
  v3 = this->m_pkIDSlideBar;
  v2->m_bShowIDSlideList = bShow;
  SlideBar::SetSplitCnt(v3, 0);
  v2->m_pkIDSlideListWin->m_nViewStartPos = 0;
  SlideListWin::UpdateViewList(v2->m_pkIDSlideListWin);
  for ( i = *(PgWin ***)&v2->m_vecVisibleIDSelect.baseclass_0.___u0.baseclass_0.dummy[0];
        i != v2->m_vecVisibleIDSelect.baseclass_0._Mylast;
        ++i )
    ((void (__stdcall *)(_DWORD))(*i)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
}

//----- (00436BB0) --------------------------------------------------------
void __thiscall IDRankingWin::SetRankInfo(IDRankingWin *this, const unsigned int *dwMyRank, const int *nRankCnt, SHINE_INDUN_RANK_CLIENT_VALUE *pValue, PROTO_AVATAR_SHAPE_INFO *pShapeInfo1st, PROTO_AVATAR_SHAPE_INFO *pShapeInfo2nd, PROTO_AVATAR_SHAPE_INFO *pShapeInfo3th)
{
  float v7; // esi@0
  PROTO_AVATAR_SHAPE_INFO *v8; // edi@1
  IDRankingWin *v9; // ebx@1
  SHINE_INDUN_RANK_CLIENT_VALUE *v10; // ecx@5
  NiRefObjectVtbl *v11; // esi@9
  char *v12; // eax@9
  char *v13; // eax@9
  NiTexture *v14; // eax@10
  FaceCutMaskWin *v15; // esi@10
  char v16; // al@12
  NiRefObjectVtbl *v17; // esi@20
  char *v18; // eax@20
  char *v19; // eax@20
  char v20; // al@23
  NiRefObjectVtbl *v21; // esi@31
  char *v22; // eax@31
  char *v23; // eax@31
  char v24; // al@34
  const int v25; // edi@45
  char *v26; // eax@45
  int v27; // esi@45
  void *v28; // eax@45
  const char *v29; // eax@46
  float v30; // [sp+8h] [bp-144h]@3
  PgFrameWork *pkGame; // [sp+20h] [bp-12Ch]@2
  signed int i; // [sp+28h] [bp-124h]@2
  SHINE_INDUN_RANK_CLIENT_VALUE *v33; // [sp+2Ch] [bp-120h]@5
  char pNumberString[256]; // [sp+30h] [bp-11Ch]@44
  char acName[21]; // [sp+130h] [bp-1Ch]@5
  unsigned int v36; // [sp+148h] [bp-4h]@1
  int v37; // [sp+14Ch] [bp+0h]@1

  v36 = (unsigned int)&v37 ^ __security_cookie;
  v8 = pShapeInfo1st;
  v9 = this;
  if ( pValue )
  {
    IDRankingWin::ClearRankInfo(this);
    IDRankingWin::SetIDSelectBtn(v9, v9->m_nReqSelectID);
    IDRankingWin::SetTitleBtn(v9, v9->m_nReqTitleState);
    pkGame = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    i = 0;
    if ( *nRankCnt > 0 )
    {
      v30 = v7;
      while ( 1 )
      {
        v10 = &pValue[i];
        acName[20] = 0;
        *(_DWORD *)acName = *(_DWORD *)&v10->nCharID.n5_name[0];
        *(_DWORD *)&acName[4] = *(_DWORD *)&v10->nCharID.n5_name[4];
        *(_DWORD *)&acName[8] = *(_DWORD *)&v10->nCharID.n5_name[8];
        *(_DWORD *)&acName[12] = *(_DWORD *)&v10->nCharID.n5_name[12];
        v33 = &pValue[i];
        *(_DWORD *)&acName[16] = *(_DWORD *)&v10->nCharID.n5_name[16];
        if ( i >= 3 )
          goto LABEL_45;
        if ( !i )
        {
          v21 = v9->m_pkTopName[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v22 = TextData3::Get(0xF6E4B2BCu);
          v23 = fs(v22);
          ((void (__thiscall *)(PgWinText *, char *, _DWORD))v21[118].__vecDelDtor)(
            v9->m_pkTopName[0],
            v23,
            LODWORD(v30));
          if ( v8 == (PROTO_AVATAR_SHAPE_INFO *)-1 )
          {
            v14 = PortraitTextureBuffer::GetBlackTexture();
          }
          else
          {
            switch ( pValue->nCharClass )
            {
              case 1:
              case 2:
              case 3:
              case 4:
              case 5:
                v24 = 1;
                break;
              case 6:
              case 7:
              case 8:
              case 9:
              case 0xA:
                v24 = 6;
                break;
              case 0xB:
              case 0xC:
              case 0xD:
              case 0xE:
              case 0xF:
                v24 = 11;
                break;
              case 0x10:
              case 0x11:
              case 0x12:
              case 0x13:
              case 0x14:
                v24 = 16;
                break;
              case 0x15:
              case 0x16:
              case 0x17:
              case 0x18:
              case 0x19:
                v24 = 21;
                break;
              case 0x1A:
              case 0x1B:
                v24 = 26;
                break;
              default:
                v24 = 0;
                break;
            }
            v14 = PortraitTextureBuffer::GetOtherCharPortrait(
                    (unsigned __int8)v24,
                    (unsigned int)v8->_bf0 >> 7,
                    v8->faceshape,
                    v8->hairtype,
                    v8->haircolor,
                    0xFFFFu,
                    5u,
                    v9->m_nRankingCamPos);
          }
          v15 = v9->m_pkTopPortrait[0];
          goto LABEL_43;
        }
        if ( i == 1 )
          break;
        if ( i == 2 )
        {
          v11 = v9->m_pkTopName[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v12 = TextData3::Get(0xF6D4B1BEu);
          v13 = fs(v12);
          ((void (__thiscall *)(PgWinText *, char *, _DWORD))v11[118].__vecDelDtor)(
            v9->m_pkTopName[2],
            v13,
            LODWORD(v30));
          if ( *(_DWORD *)&pShapeInfo3th->_bf0 == -1 )
          {
            v14 = PortraitTextureBuffer::GetBlackTexture();
            v15 = v9->m_pkTopPortrait[2];
          }
          else
          {
            switch ( pValue[2].nCharClass )
            {
              case 1:
              case 2:
              case 3:
              case 4:
              case 5:
                v16 = 1;
                break;
              case 6:
              case 7:
              case 8:
              case 9:
              case 0xA:
                v16 = 6;
                break;
              case 0xB:
              case 0xC:
              case 0xD:
              case 0xE:
              case 0xF:
                v16 = 11;
                break;
              case 0x10:
              case 0x11:
              case 0x12:
              case 0x13:
              case 0x14:
                v16 = 16;
                break;
              case 0x15:
              case 0x16:
              case 0x17:
              case 0x18:
              case 0x19:
                v16 = 21;
                break;
              case 0x1A:
              case 0x1B:
                v16 = 26;
                break;
              default:
                v16 = 0;
                break;
            }
            v14 = PortraitTextureBuffer::GetOtherCharPortrait(
                    (unsigned __int8)v16,
                    (unsigned int)pShapeInfo3th->_bf0 >> 7,
                    pShapeInfo3th->faceshape,
                    pShapeInfo3th->hairtype,
                    pShapeInfo3th->haircolor,
                    0xFFFFu,
                    5u,
                    v9->m_nRankingCamPos);
            v15 = v9->m_pkTopPortrait[2];
          }
LABEL_43:
          MaskedWin::SetBaseTexture(v15->m_pkTopPortrait, v14);
          v30 = 0.0;
          ((void (*)(void))v15->m_pkTopPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)();
          v10 = &pValue[i];
        }
        GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)pkGame, v10->nValue, pNumberString);
        ((void (__stdcall *)(_DWORD))v9->m_pkTopRecord[i]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
LABEL_45:
        v25 = i + 1;
        v26 = fs("%d");
        v27 = SlideListWin::AddText(v9->m_pkRankListWin, v26);
        SlideListWin::SetText(v9->m_pkRankListWin, v27, 1u, acName);
        v28 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), v33->nCharClass);
        if ( v28 )
          v29 = (char *)v28 + 21;
        else
          v29 = &byte_9788EB;
        SlideListWin::SetText(v9->m_pkRankListWin, v27, 2u, v29);
        GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)pkGame, v33->nValue, pNumberString);
        SlideListWin::SetText(v9->m_pkRankListWin, v27, 3u, pNumberString);
        ++i;
        if ( v25 >= *nRankCnt )
          goto LABEL_49;
        v8 = pShapeInfo1st;
      }
      v17 = v9->m_pkTopName[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v18 = TextData3::Get(0xF6D4ADBDu);
      v19 = fs(v18);
      ((void (__thiscall *)(PgWinText *, char *, _DWORD))v17[118].__vecDelDtor)(v9->m_pkTopName[1], v19, LODWORD(v30));
      if ( *(_DWORD *)&pShapeInfo2nd->_bf0 == -1 )
      {
        v14 = PortraitTextureBuffer::GetBlackTexture();
        v15 = v9->m_pkTopPortrait[1];
      }
      else
      {
        switch ( pValue[1].nCharClass )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v20 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v20 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v20 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v20 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v20 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v20 = 26;
            break;
          default:
            v20 = 0;
            break;
        }
        v14 = PortraitTextureBuffer::GetOtherCharPortrait(
                (unsigned __int8)v20,
                (unsigned int)pShapeInfo2nd->_bf0 >> 7,
                pShapeInfo2nd->faceshape,
                pShapeInfo2nd->hairtype,
                pShapeInfo2nd->haircolor,
                0xFFFFu,
                5u,
                v9->m_nRankingCamPos);
        v15 = v9->m_pkTopPortrait[1];
      }
      goto LABEL_43;
    }
LABEL_49:
    SlideListWin::UpdateViewList(v9->m_pkRankListWin);
  }
}
// 436BB0: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (00437140) --------------------------------------------------------
void __thiscall IDRankingWin::SetMyRecord(IDRankingWin *this, PROTO_NC_INSTANCE_DUNGEON_RANK_TAB_MYRANK_ACK *pValue)
{
  IDRankingWin *v2; // esi@1
  PgFrameWork *v3; // ebx@1
  NiRefObjectVtbl *v4; // ST1C_4@1
  char *v5; // eax@1
  char *v6; // ST0C_4@1
  NiRefObjectVtbl *v7; // ST1C_4@1
  char *v8; // eax@1
  char *v9; // eax@1
  NiRefObjectVtbl *v10; // ST1C_4@1
  char *v11; // eax@1
  char *v12; // ST0C_4@1
  char v13; // al@1
  NiRefObjectVtbl *v14; // ST1C_4@1
  char *v15; // eax@1
  char *v16; // ST0C_4@1
  NiRefObjectVtbl *v17; // ST1C_4@1
  char *v18; // eax@1
  char *v19; // ST0C_4@1
  NiRefObjectVtbl *v20; // ebx@1
  char *v21; // eax@1
  char *v22; // eax@1
  NiRefObjectVtbl *v23; // edi@1
  char *v24; // eax@1
  char *v25; // eax@1
  NiRefObjectVtbl *v26; // edi@1
  char *v27; // eax@1
  char *v28; // eax@1
  char pNumberString[256]; // [sp+10h] [bp-104h]@1
  unsigned int v30; // [sp+110h] [bp-4h]@1
  int v31; // [sp+114h] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  IDRankingWin::ClearMyRecordInfo(v2);
  IDRankingWin::SetIDSelectBtn(v2, v2->m_nReqSelectID);
  IDRankingWin::SetTitleBtn(v2, v2->m_nReqTitleState);
  v4 = v2->m_pkMyRecordMyInfo[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = TextData3::Get(0xEBE1BAC9u);
  v6 = fs(v5);
  v4[118].__vecDelDtor((NiRefObject *)v2->m_pkMyRecordMyInfo[0], (unsigned int)v6);
  v7 = v2->m_pkMyRecordMyInfo[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
  v8 = TextData3::Get(0xF3D7B52Du);
  v9 = fs(v8);
  v7[118].__vecDelDtor((NiRefObject *)v2->m_pkMyRecordMyInfo[1], (unsigned int)v9);
  v10 = v2->m_pkMyRecordMyInfo[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)();
  v11 = TextData3::Get(0xFCDBFF2Du);
  v12 = fs(v11);
  v10[118].__vecDelDtor((NiRefObject *)v2->m_pkMyRecordMyInfo[2], (unsigned int)v12);
  v13 = Char::GetClass(g_pkMainChar);
  CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v13);
  v14 = v2->m_pkMyRecordMyInfo[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v15 = TextData3::Get(0xE7E2FD3Bu);
  v16 = fs(v15);
  v14[118].__vecDelDtor((NiRefObject *)v2->m_pkMyRecordMyInfo[3], (unsigned int)v16);
  GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)v3, pValue->nPrevDamageDealt, pNumberString);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
  GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)v3, pValue->nPrevDamageTaken, pNumberString);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
  GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)v3, pValue->nPrevHealingDone, pNumberString);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
  v17 = v2->m_pkMyRecord[0][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData3::Get(0xE0D1BE17u);
  v19 = fs(v18);
  v17[118].__vecDelDtor((NiRefObject *)v2->m_pkMyRecord[0][3], (unsigned int)v19);
  GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)v3, pValue->nCurrDamageDealt, pNumberString);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
  GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)v3, pValue->nCurrDamageTaken, pNumberString);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
  GameFrameWork::ConvertCommaNumberWork((GameFrameWork *)v3, pValue->nCurrHealingDone, pNumberString);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
  v20 = v2->m_pkMyRecord[1][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData3::Get(0xE0D1BE17u);
  v22 = fs(v21);
  v20[118].__vecDelDtor((NiRefObject *)v2->m_pkMyRecord[1][3], (unsigned int)v22);
  v23 = v2->m_pkMyDate[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = TextData3::Get(0xA2F8BCDCu);
  v25 = fs(v24);
  v23[118].__vecDelDtor((NiRefObject *)v2->m_pkMyDate[0], (unsigned int)v25);
  v26 = v2->m_pkMyDate[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = TextData3::Get(0x95F4C9DFu);
  v28 = fs(v27);
  v26[118].__vecDelDtor((NiRefObject *)v2->m_pkMyDate[1], (unsigned int)v28);
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004374D0) --------------------------------------------------------
void __thiscall IDRankingWin::InitRankInfo(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1

  v1 = this;
  IDRankingWin::ClearRankInfo(this);
  IDRankingWin::SetTitleBtn(v1, v1->m_nTitleState);
  ((void (__stdcall *)(_DWORD))v1->m_pkBottomMyRank->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980006);
  v2 = v1->m_pkIDSlideText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData3::Get(0x9B8FB6D9u);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkIDSlideText, (unsigned int)v3);
}

//----- (00437530) --------------------------------------------------------
void __thiscall IDRankingWin::OnSelectTitle(IDRankingWin *this, int uiMsg)
{
  IDRankingWin *v2; // esi@1
  int v3; // edi@2

  v2 = this;
  IDRankingWin::ShowIDList(this, 0);
  switch ( uiMsg )
  {
    case 11:
      v3 = 0;
      break;
    case 12:
      v3 = 1;
      break;
    case 13:
      v3 = 2;
      break;
    case 14:
      v3 = 3;
      break;
    default:
      v3 = uiMsg;
      break;
  }
  if ( v2->m_nSelectID == -1 )
    IDRankingWin::SetTitleBtn(v2, v3);
  IDRankingWin::RecordInfoReq(v2, v3, v2->m_nSelectID);
}

//----- (004375B0) --------------------------------------------------------
void __thiscall IDRankingWin::OnSelectID(IDRankingWin *this, int nIndex)
{
  IDRankingWin *v2; // esi@1

  v2 = this;
  if ( this->m_nTitleState == 4 )
    IDRankingWin::SetIDSelectBtn(this, nIndex);
  IDRankingWin::ShowIDList(v2, 0);
  IDRankingWin::RecordInfoReq(v2, v2->m_nTitleState, nIndex);
}

//----- (004375F0) --------------------------------------------------------
void __thiscall IDRankingWin::OnIDSelectList(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1
  char v2; // bl@1

  v1 = this;
  v2 = ((int (*)(void))this->m_pkIDSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  IDRankingWin::ShowIDList(v1, v2 == 0);
  if ( !v2 )
    ((void (__thiscall *)(IDRankingWin *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)(v1);
}

//----- (00437630) --------------------------------------------------------
FaceCutMaskWin *__cdecl FaceCutMaskWin::CreateWin(int nIndex)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  FaceCutMaskWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &FaceCutMaskWin::_vftable_;
    *((_DWORD *)v2 + 58) = &FaceCutMaskWin::_vftable_;
    *((_DWORD *)v2 + 87) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int))(*(_DWORD *)v2 + 540))(v2, nIndex) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (FaceCutMaskWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98054C: using guessed type int (__stdcall *FaceCutMaskWin___vftable_)(int uiFlags);
// 98056C: using guessed type int (__thiscall *FaceCutMaskWin___vftable_)(void *p, char);

//----- (00437770) --------------------------------------------------------
void __thiscall IDRankingWin::OnClose(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1
  PgWin **v2; // edi@1
  signed int v3; // ebx@1
  PgWin **i; // edi@3
  PgWin **j; // edi@5
  NiRefObjectVtbl *v6; // edi@7
  char *v7; // eax@7
  int v8; // esi@7
  DirectUserMsgBody_SendPacket kPacket; // [sp+Ch] [bp-Ch]@7

  v1 = this;
  v2 = (PgWin **)this->m_pkTopPortrait;
  v3 = 3;
  do
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, *v2);
    ++v2;
    --v3;
  }
  while ( v3 );
  v1->m_nTitleState = 0;
  v1->m_nSelectID = -1;
  IDRankingWin::ShowIDList(v1, 0);
  for ( i = *(PgWin ***)&v1->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0];
        i != v1->m_vecVisibleRank.baseclass_0._Mylast;
        ++i )
    ((void (__stdcall *)(signed int))(*i)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  for ( j = *(PgWin ***)&v1->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0];
        j != v1->m_vecVisibleMyRecord.baseclass_0._Mylast;
        ++j )
    ((void (__stdcall *)(_DWORD))(*j)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  SlideListWin::RemoveAllList(v1->m_pkRankListWin);
  IDRankingWin::ClearRankInfo(v1);
  IDRankingWin::SetTitleBtn(v1, v1->m_nTitleState);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkBottomMyRank->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980006);
  v6 = v1->m_pkIDSlideText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = TextData3::Get(0x9B8FB6D9u);
  v6[118].__vecDelDtor((NiRefObject *)v1->m_pkIDSlideText, (unsigned int)v7);
  IDRankingWin::ClearMyRecordInfo(v1);
  v8 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  *(_DWORD *)&kPacket.wDepartment = 720904;
  kPacket.pvPacket = 0;
  if ( *(_DWORD *)(v8 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v8 + 4) + 4))(
      23,
      &kPacket,
      v8);
    if ( *(_DWORD *)(v8 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v8 + 4) + 20))(
        23,
        &kPacket,
        v8);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_SendPacket *, int))(*(_DWORD *)v8 + 20))(
    v8,
    23,
    &kPacket,
    v8);
}

//----- (004378C0) --------------------------------------------------------
void __thiscall IDRankingWin::OnCommand(IDRankingWin *this, unsigned int wParam, int lParam)
{
  IDRankingWin *v3; // esi@1
  PgFrameWork *v4; // eax@4

  v3 = this;
  switch ( wParam )
  {
    case 0xBu:
    case 0xCu:
    case 0xDu:
    case 0xEu:
      IDRankingWin::OnSelectTitle(this, wParam);
      break;
    case 0xFu:
      IDRankingWin::OnHelpLink(this);
      break;
    case 0x10u:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::IDRankingShowWin((GameFrameWork *)v4, 0);
      break;
    case 0x11u:
      IDRankingWin::OnIDSelectList(this);
      break;
    case 0x12u:
      IDRankingWin::OnSelectID(this, lParam);
      break;
    case 0x13u:
      IDRankingWin::OnSlideIDList(this);
      break;
    default:
      if ( (unsigned __int8)((int (*)(void))this->m_pkIDSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        IDRankingWin::ShowIDList(v3, 0);
      break;
  }
}

//----- (00437990) --------------------------------------------------------
void __thiscall IDRankingWin::IDRankingWin(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1
  char *v2; // edi@1
  char *v3; // eax@1
  char *v4; // edi@3
  char *v5; // ecx@3
  IDRankingWin *v6; // eax@5
  SHINE_INDUN_INFO *v7; // ecx@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v10; // [sp-2Ch] [bp-40h]@1
  int v11; // [sp-1Ch] [bp-30h]@1
  signed int v12; // [sp-18h] [bp-2Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // [sp+0h] [bp-14h]@1
  IDRankingWin *v14; // [sp+4h] [bp-10h]@1
  int v15; // [sp+10h] [bp-4h]@1

  v1 = this;
  v14 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IDRankingWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IDRankingWin::_vftable_;
  v15 = 0;
  *(_DWORD *)&v1->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecVisibleRank.baseclass_0._Mylast = 0;
  v1->m_vecVisibleRank.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecVisibleMyRecord.baseclass_0._Mylast = 0;
  v1->m_vecVisibleMyRecord.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecVisibleIDSelect.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecVisibleIDSelect.baseclass_0._Mylast = 0;
  v1->m_vecVisibleIDSelect.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecIDInfo.baseclass_0._Mylast = 0;
  v1->m_vecIDInfo.baseclass_0._Myend = 0;
  v13 = &v10;
  v1->m_nTitleState = 0;
  v1->m_nSelectID = -1;
  v1->m_pkRankListWin = 0;
  v1->m_pkRecordListText = 0;
  v1->m_pkIDSlideText = 0;
  v1->m_pkIDSlideListWin = 0;
  v1->m_pkIDSlideBar = 0;
  v1->m_pkIDSlideBtn = 0;
  v12 = 15;
  v11 = 0;
  LOBYTE(v15) = 4;
  v10.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v10, "Ranking_Camera", 0xEu);
  v1->m_nRankingCamPos = CSingleDataMap::GetValue(&g_kSingleDataMap, v10);
  v1->m_pkMyRecord[0][0] = 0;
  v1->m_pkMyRecord[0][1] = 0;
  v1->m_pkMyRecord[0][2] = 0;
  v1->m_pkMyRecord[0][3] = 0;
  v1->m_pkMyRecord[1][0] = 0;
  v1->m_pkMyRecord[1][1] = 0;
  v1->m_pkMyRecord[1][2] = 0;
  v1->m_pkMyRecord[1][3] = 0;
  v1->m_pkMyDate[0] = 0;
  v1->m_pkMyDate[1] = 0;
  v1->m_pkMyRecordMyInfo[0] = 0;
  v1->m_pkMyRecordMyInfo[1] = 0;
  v1->m_pkMyRecordMyInfo[2] = 0;
  v1->m_pkMyRecordMyInfo[3] = 0;
  v1->m_pkTitleStateCheckBox[0] = 0;
  v1->m_pkTitleStateCheckBox[1] = 0;
  v1->m_pkTitleStateCheckBox[2] = 0;
  v1->m_pkTitleStateCheckBox[3] = 0;
  v1->m_pkTopPortrait[0] = 0;
  v1->m_pkTopName[0] = 0;
  v1->m_pkTopRecord[0] = 0;
  v1->m_pkTopPortrait[1] = 0;
  v1->m_pkTopName[1] = 0;
  v1->m_pkTopRecord[1] = 0;
  v1->m_pkTopPortrait[2] = 0;
  v1->m_pkTopName[2] = 0;
  v1->m_pkTopRecord[2] = 0;
  v1->m_pkIDListPanel[0] = 0;
  v1->m_pkIDListPanel[1] = 0;
  v2 = *(char **)&v1->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (char *)v1->m_vecVisibleRank.baseclass_0._Mylast;
  if ( v2 != v3 )
  {
    v14 = 0;
    memmove(v2, v3, 0);
    v1->m_vecVisibleRank.baseclass_0._Mylast = (PgWin **)&v2[(_DWORD)v14];
  }
  v4 = *(char **)&v1->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (char *)v1->m_vecVisibleMyRecord.baseclass_0._Mylast;
  if ( v4 != v5 )
  {
    v14 = 0;
    memmove(v4, v5, 0);
    v1->m_vecVisibleMyRecord.baseclass_0._Mylast = (PgWin **)&v4[(_DWORD)v14];
  }
  v6 = *(IDRankingWin **)&v1->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = v1->m_vecIDInfo.baseclass_0._Mylast;
  v14 = v6;
  if ( (SHINE_INDUN_INFO *)v6 != v7 )
    v1->m_vecIDInfo.baseclass_0._Mylast = (SHINE_INDUN_INFO *)v6;
  v1->m_bShowIDSlideList = 0;
}
// 980790: using guessed type int (__stdcall *IDRankingWin___vftable_)(int uiFlags);
// 9807AC: using guessed type int (__thiscall *IDRankingWin___vftable_)(void *p, char);

//----- (00437C10) --------------------------------------------------------
void __thiscall IDRankingWin::_IDRankingWin(IDRankingWin *this)
{
  IDRankingWin *v1; // esi@1
  SHINE_INDUN_INFO *v2; // ebx@1
  SHINE_INDUN_INFO *v3; // eax@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IDRankingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IDRankingWin::_vftable_;
  v2 = 0;
  this->m_pkTopPortrait[0] = 0;
  this->m_pkTopPortrait[1] = 0;
  this->m_pkTopPortrait[2] = 0;
  v3 = *(SHINE_INDUN_INFO **)&this->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != this->m_vecIDInfo.baseclass_0._Mylast )
    v1->m_vecIDInfo.baseclass_0._Mylast = v3;
  if ( *(SHINE_INDUN_INFO **)&v1->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0] != v2 )
    operator delete(*(void **)&v1->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecIDInfo.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  v1->m_vecIDInfo.baseclass_0._Mylast = v2;
  v1->m_vecIDInfo.baseclass_0._Myend = v2;
  if ( *(SHINE_INDUN_INFO **)&v1->m_vecVisibleIDSelect.baseclass_0.___u0.baseclass_0.dummy[0] != v2 )
    operator delete(*(void **)&v1->m_vecVisibleIDSelect.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecVisibleIDSelect.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  v1->m_vecVisibleIDSelect.baseclass_0._Mylast = (PgWin **)v2;
  v1->m_vecVisibleIDSelect.baseclass_0._Myend = (PgWin **)v2;
  if ( *(SHINE_INDUN_INFO **)&v1->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] != v2 )
    operator delete(*(void **)&v1->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  v1->m_vecVisibleMyRecord.baseclass_0._Mylast = (PgWin **)v2;
  v1->m_vecVisibleMyRecord.baseclass_0._Myend = (PgWin **)v2;
  if ( *(SHINE_INDUN_INFO **)&v1->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] != v2 )
    operator delete(*(void **)&v1->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  v1->m_vecVisibleRank.baseclass_0._Mylast = (PgWin **)v2;
  v1->m_vecVisibleRank.baseclass_0._Myend = (PgWin **)v2;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 980790: using guessed type int (__stdcall *IDRankingWin___vftable_)(int uiFlags);
// 9807AC: using guessed type int (__thiscall *IDRankingWin___vftable_)(void *p, char);

//----- (00437D20) --------------------------------------------------------
IDRankingWin *__cdecl IDRankingWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  IDRankingWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x240u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    IDRankingWin::IDRankingWin((IDRankingWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (IDRankingWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00437E50) --------------------------------------------------------
void __thiscall IDRankingWin::SetIDList(IDRankingWin *this, const unsigned __int16 *nIDListCnt, SHINE_INDUN_INFO *pIndunInfo)
{
  IDRankingWin *v3; // esi@1
  char *v4; // edi@3
  char *v5; // ebx@3
  char *v6; // eax@5
  int v7; // esi@6
  char v8; // cl@6
  int v9; // esi@6
  int v10; // eax@6
  unsigned int v11; // ecx@6
  signed int v12; // edx@8
  int v13; // esi@8
  int v14; // eax@10
  int v15; // esi@10
  int v16; // eax@14
  __int64 v17; // kr00_8@15
  char v18; // cl@15
  MapInfo *pkMapInfo; // [sp+8h] [bp-120h]@4
  signed int i; // [sp+Ch] [bp-11Ch]@2
  IDRankingWin *v21; // [sp+10h] [bp-118h]@1
  SHINE_INDUN_INFO IndounInfo; // [sp+14h] [bp-114h]@2
  char chData[256]; // [sp+24h] [bp-104h]@4
  unsigned int v24; // [sp+124h] [bp-4h]@1
  int v25; // [sp+128h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v3 = this;
  v21 = this;
  if ( pIndunInfo )
  {
    *(_QWORD *)&IndounInfo.MapIDClient.n3_name[4] = 0i64;
    *(_DWORD *)&IndounInfo.MapIDClient.n3_name[0] = 0;
    i = 0;
    if ( *nIDListCnt > 0u )
    {
      v4 = (char *)&this->m_vecIDInfo;
      v5 = &pIndunInfo->ModeIDLv;
      do
      {
        pkMapInfo = MapInfoTab::GetByMapName((Name3 *)v5 - 1);
        strncpy(chData, pkMapInfo->Name, 0x20u);
        if ( *v5 == 2 )
        {
          v6 = TextData3::Get(0x4026F785u);
          strncat(chData, v6, 0x100u);
        }
        v7 = SlideListWin::AddText(v3->m_pkIDSlideListWin, chData);
        SlideListWin::SetText(v21->m_pkIDSlideListWin, v7, 0, chData);
        SlideListWin::SetFontColor(v21->m_pkIDSlideListWin, v7, 255, 255, 255);
        SlideListWin::SetData(v21->m_pkIDSlideListWin, v7, pkMapInfo->ID);
        v8 = *v5;
        v9 = *((_DWORD *)v5 - 3);
        v10 = *((_DWORD *)v5 - 1);
        *(_DWORD *)&IndounInfo.MapIDClient.n3_name[4] = *((_DWORD *)v5 - 2);
        IndounInfo.ModeIDLv = v8;
        v11 = *((_DWORD *)v4 + 1);
        *(_DWORD *)&IndounInfo.MapIDClient.n3_name[0] = v9;
        *(_DWORD *)&IndounInfo.MapIDClient.n3_name[8] = v10;
        if ( (unsigned int)&IndounInfo >= v11 || *(_DWORD *)v4 > (unsigned int)&IndounInfo )
        {
          if ( v11 == *((_DWORD *)v4 + 2) )
            std::vector<SHINE_INDUN_INFO_std::allocator<SHINE_INDUN_INFO>>::_Reserve(
              (std::vector<SHINE_INDUN_INFO,std::allocator<SHINE_INDUN_INFO> > *)v4,
              1u);
          v16 = *((_DWORD *)v4 + 1);
          if ( v16 )
          {
            v17 = *(_QWORD *)&IndounInfo.MapIDClient.n3_name[4];
            *(_DWORD *)v16 = v9;
            *(_DWORD *)(v16 + 4) = v17;
            v18 = IndounInfo.ModeIDLv;
            *(_DWORD *)(v16 + 8) = HIDWORD(v17);
            *(_BYTE *)(v16 + 12) = v18;
          }
        }
        else
        {
          v12 = (signed int)((unsigned __int64)(1321528399i64 * (signed int)((char *)&IndounInfo - *(_DWORD *)v4)) >> 32) >> 2;
          v13 = v12 + ((unsigned int)v12 >> 31);
          if ( v11 == *((_DWORD *)v4 + 2) )
            std::vector<SHINE_INDUN_INFO_std::allocator<SHINE_INDUN_INFO>>::_Reserve(
              (std::vector<SHINE_INDUN_INFO,std::allocator<SHINE_INDUN_INFO> > *)v4,
              1u);
          v14 = *((_DWORD *)v4 + 1);
          v15 = *(_DWORD *)v4 + 13 * v13;
          if ( v14 )
          {
            *(_DWORD *)v14 = *(_DWORD *)v15;
            *(_DWORD *)(v14 + 4) = *(_DWORD *)(v15 + 4);
            *(_DWORD *)(v14 + 8) = *(_DWORD *)(v15 + 8);
            *(_BYTE *)(v14 + 12) = *(_BYTE *)(v15 + 12);
          }
        }
        *((_DWORD *)v4 + 1) += 13;
        v3 = v21;
        v5 += 13;
        ++i;
      }
      while ( i < *nIDListCnt );
    }
    SlideListWin::UpdateViewList(v3->m_pkIDSlideListWin);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00438060) --------------------------------------------------------
bool __thiscall IDRankingWin::Create(IDRankingWin *this, PgFrameWork *pkFrameWork)
{
  IDRankingWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData::PgHitTester *v12; // eax@13
  unsigned int v13; // edi@13
  PgFont *v14; // eax@13
  PgWinText *v15; // edi@13
  char *v16; // eax@13
  D3DXCOLOR v17; // ST170_16@13
  void *v18; // eax@13
  PgSprData *v19; // edi@13
  PgSprData *v20; // ST17C_4@13
  int v21; // edi@13
  ColumnBut *v22; // eax@13
  D3DXCOLOR v23; // ST178_16@13
  char *v24; // eax@13
  ColumnBut *v25; // eax@13
  D3DXCOLOR v26; // ST178_16@13
  char *v27; // eax@13
  ColumnBut *v28; // eax@13
  D3DXCOLOR v29; // ST178_16@13
  char *v30; // eax@13
  ColumnBut *v31; // eax@13
  D3DXCOLOR v32; // ST178_16@13
  char *v33; // eax@13
  SLWCreateInfo::Item *v34; // edi@13
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v35; // edi@13
  SLWCreateInfo::Item *v36; // edi@20
  int v37; // eax@20
  char *v38; // eax@20
  char *v39; // ecx@20
  char v40; // dl@21
  signed int v41; // eax@24
  PgSprData *v42; // eax@25
  SlideListWin *v43; // eax@25
  unsigned int v44; // eax@25
  unsigned int v45; // edx@26
  signed int v46; // ecx@27
  PgWin **v47; // eax@29
  int v48; // ecx@29
  PgWin **v49; // eax@33
  D3DXCOLOR v50; // ST178_16@35
  char *v51; // eax@35
  unsigned int v52; // ecx@35
  unsigned int v53; // edx@36
  signed int v54; // eax@37
  int v55; // ecx@39
  PgWin **v56; // eax@39
  PgWin **v57; // eax@43
  D3DXCOLOR v58; // ST178_16@45
  char *v59; // eax@45
  unsigned int v60; // ecx@45
  unsigned int v61; // edx@46
  signed int v62; // eax@47
  int v63; // ecx@49
  PgWin **v64; // eax@49
  PgWin **v65; // eax@53
  D3DXCOLOR v66; // ST178_16@55
  char *v67; // eax@55
  unsigned int v68; // ecx@55
  unsigned int v69; // edx@56
  signed int v70; // eax@57
  int v71; // ecx@59
  PgWin **v72; // eax@59
  PgWin **v73; // eax@63
  D3DXCOLOR v74; // ST178_16@65
  char *v75; // eax@65
  unsigned int v76; // eax@65
  unsigned int v77; // edx@66
  signed int v78; // ecx@67
  PgWin **v79; // eax@69
  int v80; // ecx@69
  PgWin **v81; // eax@73
  void *v82; // edi@75
  void (__thiscall *v83)(_DWORD, _DWORD); // edx@75
  unsigned int v84; // ecx@75
  unsigned int v85; // edx@76
  signed int v86; // eax@77
  int v87; // ecx@79
  PgWin **v88; // eax@79
  PgWin **v89; // eax@83
  NiNode *v90; // ecx@85
  PgSprData::PgHitTester *v91; // eax@85
  unsigned int v92; // edx@85
  PgFont *v93; // eax@85
  PgWinText *v94; // eax@85
  unsigned int v95; // eax@85
  unsigned int v96; // edx@86
  signed int v97; // ecx@87
  PgWin **v98; // eax@89
  int v99; // ecx@89
  PgWin **v100; // eax@93
  NiNode *v101; // edx@95
  PgSprData::PgHitTester *v102; // eax@95
  unsigned int v103; // edx@95
  PgFont *v104; // eax@95
  PgWinText *v105; // eax@95
  unsigned int v106; // eax@95
  unsigned int v107; // edx@96
  signed int v108; // ecx@97
  PgWin **v109; // eax@99
  int v110; // ecx@99
  PgWin **v111; // eax@103
  NiNode *v112; // edx@105
  PgSprData::PgHitTester *v113; // eax@105
  unsigned int v114; // edx@105
  PgFont *v115; // eax@105
  PgWinText *v116; // eax@105
  unsigned int v117; // eax@105
  unsigned int v118; // edx@106
  signed int v119; // ecx@107
  PgWin **v120; // eax@109
  int v121; // ecx@109
  PgWin **v122; // eax@113
  NiNode *v123; // edx@115
  PgSprData::PgHitTester *v124; // eax@115
  unsigned int v125; // edx@115
  PgFont *v126; // eax@115
  PgWinText *v127; // eax@115
  unsigned int v128; // eax@115
  unsigned int v129; // edx@116
  signed int v130; // ecx@117
  PgWin **v131; // eax@119
  int v132; // ecx@119
  PgWin **v133; // eax@123
  NiNode *v134; // edx@125
  PgSprData::PgHitTester *v135; // eax@125
  unsigned int v136; // edx@125
  PgWin *v137; // ST184_4@125
  PgFont *v138; // eax@125
  PgWinAbbreviateText *v139; // eax@125
  unsigned int v140; // eax@125
  unsigned int v141; // edx@126
  signed int v142; // ecx@127
  PgWin **v143; // eax@129
  int v144; // ecx@129
  PgWin **v145; // eax@133
  NiNode *v146; // edx@135
  PgSprData::PgHitTester *v147; // eax@135
  unsigned int v148; // edx@135
  PgWin *v149; // ST184_4@135
  PgFont *v150; // eax@135
  PgWinAbbreviateText *v151; // eax@135
  unsigned int v152; // eax@135
  unsigned int v153; // edx@136
  signed int v154; // ecx@137
  PgWin **v155; // eax@139
  int v156; // ecx@139
  PgWin **v157; // eax@143
  NiNode *v158; // edx@145
  PgSprData::PgHitTester *v159; // eax@145
  unsigned int v160; // edx@145
  PgFont *v161; // eax@145
  PgWinText *v162; // eax@145
  NiRefObjectVtbl *v163; // edx@145
  char *v164; // eax@145
  unsigned int v165; // eax@145
  unsigned int v166; // edx@146
  signed int v167; // ecx@147
  PgWin **v168; // eax@149
  int v169; // ecx@149
  PgWin **v170; // eax@153
  NiNode *v171; // edx@155
  PgSprData::PgHitTester *v172; // eax@155
  unsigned int v173; // edx@155
  PgWin *v174; // ST184_4@155
  PgFont *v175; // eax@155
  PgWinAbbreviateText *v176; // eax@155
  unsigned int v177; // eax@155
  unsigned int v178; // edx@156
  signed int v179; // ecx@157
  PgWin **v180; // eax@159
  int v181; // ecx@159
  PgWin **v182; // eax@163
  NiNode *v183; // edx@165
  PgSprData::PgHitTester *v184; // eax@165
  unsigned int v185; // edx@165
  PgWin *v186; // ST184_4@165
  PgFont *v187; // eax@165
  PgWinAbbreviateText *v188; // eax@165
  unsigned int v189; // eax@165
  unsigned int v190; // edx@166
  signed int v191; // ecx@167
  PgWin **v192; // eax@169
  int v193; // ecx@169
  PgWin **v194; // eax@173
  NiNode *v195; // edx@175
  PgSprData::PgHitTester *v196; // eax@175
  unsigned int v197; // edx@175
  PgFont *v198; // eax@175
  PgWinText *v199; // eax@175
  NiRefObjectVtbl *v200; // edx@175
  char *v201; // eax@175
  unsigned int v202; // eax@175
  unsigned int v203; // edx@176
  signed int v204; // ecx@177
  PgWin **v205; // eax@179
  int v206; // ecx@179
  PgWin **v207; // eax@183
  NiNode *v208; // edx@185
  PgSprData::PgHitTester *v209; // eax@185
  unsigned int v210; // edx@185
  PgWin *v211; // ST184_4@185
  PgFont *v212; // eax@185
  PgWinAbbreviateText *v213; // eax@185
  unsigned int v214; // eax@185
  unsigned int v215; // edx@186
  signed int v216; // ecx@187
  PgWin **v217; // eax@189
  int v218; // ecx@189
  PgWin **v219; // eax@193
  NiNode *v220; // edx@195
  PgSprData::PgHitTester *v221; // eax@195
  unsigned int v222; // edx@195
  PgWin *v223; // ST184_4@195
  PgFont *v224; // eax@195
  PgWinAbbreviateText *v225; // eax@195
  unsigned int v226; // eax@195
  unsigned int v227; // edx@196
  signed int v228; // ecx@197
  PgWin **v229; // eax@199
  int v230; // ecx@199
  PgWin **v231; // eax@203
  NiNode *v232; // edx@205
  PgSprData::PgHitTester *v233; // eax@205
  unsigned int v234; // edx@205
  PgFont *v235; // eax@205
  PgWinText *v236; // eax@205
  NiRefObjectVtbl *v237; // edx@205
  char *v238; // eax@205
  unsigned int v239; // eax@205
  unsigned int v240; // edx@206
  signed int v241; // ecx@207
  PgWin **v242; // eax@209
  int v243; // ecx@209
  PgWin **v244; // eax@213
  NiNode *v245; // edx@215
  PgSprData::PgHitTester *v246; // eax@215
  unsigned int v247; // edx@215
  PgWin *v248; // ST184_4@215
  PgFont *v249; // eax@215
  PgWinAbbreviateText *v250; // eax@215
  unsigned int v251; // eax@215
  unsigned int v252; // edx@216
  signed int v253; // ecx@217
  PgWin **v254; // eax@219
  int v255; // ecx@219
  PgWin **v256; // eax@223
  NiNode *v257; // edx@225
  PgSprData::PgHitTester *v258; // eax@225
  unsigned int v259; // edx@225
  PgWin *v260; // ST184_4@225
  PgFont *v261; // eax@225
  PgWinAbbreviateText *v262; // eax@225
  unsigned int v263; // eax@225
  unsigned int v264; // edx@226
  signed int v265; // ecx@227
  PgWin **v266; // eax@229
  int v267; // ecx@229
  PgWin **v268; // eax@233
  NiNode *v269; // edx@235
  PgSprData::PgHitTester *v270; // eax@235
  unsigned int v271; // edx@235
  PgFont *v272; // eax@235
  PgWinText *v273; // eax@235
  NiRefObjectVtbl *v274; // edx@235
  char *v275; // eax@235
  unsigned int v276; // eax@235
  unsigned int v277; // edx@236
  signed int v278; // ecx@237
  PgWin **v279; // eax@239
  int v280; // ecx@239
  PgWin **v281; // eax@243
  NiNode *v282; // edx@245
  PgSprData::PgHitTester *v283; // eax@245
  unsigned int v284; // edx@245
  PgWin *v285; // ST184_4@245
  PgFont *v286; // eax@245
  PgWinAbbreviateText *v287; // eax@245
  unsigned int v288; // eax@245
  unsigned int v289; // edx@246
  signed int v290; // ecx@247
  PgWin **v291; // eax@249
  int v292; // ecx@249
  PgWin **v293; // eax@253
  NiNode *v294; // edx@255
  PgSprData::PgHitTester *v295; // eax@255
  unsigned int v296; // edx@255
  PgWin *v297; // ST184_4@255
  PgFont *v298; // eax@255
  PgWinAbbreviateText *v299; // eax@255
  unsigned int v300; // eax@255
  unsigned int v301; // edx@256
  signed int v302; // ecx@257
  PgWin **v303; // eax@259
  int v304; // ecx@259
  PgWin **v305; // eax@263
  void *v306; // eax@266
  unsigned int v307; // eax@266
  unsigned int v308; // ecx@267
  signed int v309; // edx@268
  PgWin **v310; // ecx@268
  void *v311; // edx@268
  int v312; // edx@269
  int v313; // eax@269
  int v314; // ecx@270
  unsigned int v315; // ecx@272
  PgWin **v316; // eax@278
  PgWin **v317; // eax@282
  NiSourceTexture *v318; // eax@284
  unsigned int v319; // eax@285
  NiAVObject **v320; // edi@285
  char *v321; // eax@286
  PgSprData::PgHitTester *v322; // eax@286
  void *v323; // edx@286
  PgWin *v324; // ST184_4@286
  PgFont *v325; // eax@286
  PgWinAbbreviateText *v326; // eax@286
  unsigned int v327; // eax@287
  NiAVObject **v328; // edi@287
  char *v329; // eax@288
  PgSprData::PgHitTester *v330; // eax@288
  void *v331; // edx@288
  PgWin *v332; // ST184_4@288
  PgFont *v333; // eax@288
  PgWinAbbreviateText *v334; // eax@288
  NiAVObject **v335; // edi@289
  char *v336; // eax@290
  PgWinSpr *v337; // eax@290
  D3DXCOLOR v338; // ST178_16@291
  char *v339; // eax@291
  PgWinText *v340; // eax@291
  boost::shared_ptr<SLWCreateInfo::Item> *v341; // ecx@291
  boost::shared_ptr<SLWCreateInfo::Item> *v342; // edi@292
  SLWCreateInfo::Item *v343; // edi@293
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v344; // edi@293
  SLWCreateInfo::Item *v345; // edi@299
  NiSourceTexture *v346; // eax@301
  NiSourceTexture *v347; // edi@301
  PgSprData *v348; // eax@301
  SlideListWin *v349; // eax@301
  PgSprData *v350; // edi@301
  NiObjectNET *v351; // eax@301
  NiObjectNET *v352; // eax@301
  NiObjectNET *v353; // eax@301
  NiObjectNET *v354; // eax@301
  NiObjectNET *v355; // eax@301
  NiObjectNET *v356; // eax@301
  SlideBar *v357; // eax@301
  int v358; // edi@301
  signed int v359; // esi@301
  NiNode *v360; // esi@305
  const char *v361; // [sp+178h] [bp-A4h]@11
  int *v362; // [sp+17Ch] [bp-A0h]@11
  int *v363; // [sp+180h] [bp-9Ch]@11
  NiSourceTexture *v364; // [sp+184h] [bp-98h]@11
  unsigned int v365; // [sp+188h] [bp-94h]@1
  SLWCreateInfo kCreateInfo; // [sp+198h] [bp-84h]@13
  std::_Nonscalar_ptr_iterator_tag __formal[4]; // [sp+1B4h] [bp-68h]@265
  UIUtil ui; // [sp+1B8h] [bp-64h]@10
  NiAVObject *uiHeight; // [sp+1CCh] [bp-50h]@270
  int iOffY; // [sp+1D0h] [bp-4Ch]@10
  NiSourceTexture *pkTexture; // [sp+1D4h] [bp-48h]@13
  NiPointer<NiNode> spNode; // [sp+1D8h] [bp-44h]@1
  unsigned int i; // [sp+1DCh] [bp-40h]@19
  int uiLeft; // [sp+1E0h] [bp-3Ch]@4
  int uiTop; // [sp+1E4h] [bp-38h]@4
  PgWinSpr *pkWinSpr; // [sp+1E8h] [bp-34h]@13
  PgSprData *pkTextWin; // [sp+1ECh] [bp-30h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+1F0h] [bp-2Ch]@13
  unsigned int v379; // [sp+20Ch] [bp-10h]@1
  int v380; // [sp+218h] [bp-4h]@1
  int v381; // [sp+21Ch] [bp+0h]@1

  v379 = (unsigned int)&v381 ^ __security_cookie;
  v365 = (unsigned int)&v381 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v380 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\IDRankingWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "IDRankingWin", 0) )
  {
    v6 = spNode.m_pObject;
    v380 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iOffY = uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v380) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v9, v8);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v364 = v10;
    v363 = &uiTop;
    v362 = &uiLeft;
    v361 = "Theme";
  }
  else
  {
    v364 = 0;
    v363 = &uiTop;
    v362 = &uiLeft;
    v361 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v361, v362, v363, v364);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTexture = MenuTexMgr::GetTexture(0x1Du);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  pkWinSpr = UIUtil::CreateSpr(&ui, "Panel03", 0);
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecVisibleRank,
    (const unsigned int *)&pkWinSpr);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v13 = v12->m_uiHeight;
  pkWinSpr = (PgWinSpr *)v12->m_uiWidth;
  v14 = Font::Get(MAIN_MENU);
  v15 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          (unsigned int)pkWinSpr,
          v13,
          v14,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  ((void (__thiscall *)(PgWinText *, __int64 *, unsigned int))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
    v15,
    &Color::m_kDxWinTitleColor,
    v365);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v15,
    5u);
  pkWinSpr = (PgWinSpr *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v16 = TextData3::Get(0x438F7E97u);
  ((void (__thiscall *)(PgWinText *, char *))pkWinSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
    v15,
    v16);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v15,
    1u);
  UIUtil::CreateBtn(&ui, 0xFu, "HelpLinkNor", "HelpLinkClick", "HelpLinkOver", 0, 0);
  UIUtil::CreateBtn(&ui, 0x10u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v18 = UIUtil::CreateText(&ui, "BottomRank", &byte_97FFEF, 0, COERCE_D3DXCOLOR(v17.r), 1u, 0, 0);
  v2->m_pkBottomMyRank = (PgWinText *)v18;
  pkWinSpr = (PgWinSpr *)v18;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecVisibleRank,
    (const unsigned int *)&pkWinSpr);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "Tab01_On");
  v20 = v19;
  v21 = iOffY;
  v22 = ColumnBut::CreateWin(uiLeft - v9, uiTop - iOffY, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0);
  v2->m_pkTitleStateCheckBox[0] = v22;
  v22->m_bCheck = 1;
  *(_QWORD *)&v23.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v23.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v24 = TextData3::Get(0x9390A4C8u);
  UIUtil::CreateAttachedText(
    &ui,
    &v2->m_pkTitleStateCheckBox[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    v24,
    COERCE_D3DXCOLOR(v23.r),
    5u);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab02_On");
  v25 = ColumnBut::CreateWin(uiLeft - v9, uiTop - v21, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0);
  v2->m_pkTitleStateCheckBox[1] = v25;
  v25->m_bCheck = 0;
  *(_QWORD *)&v26.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v26.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v27 = TextData3::Get(0x2E342C63u);
  UIUtil::CreateAttachedText(
    &ui,
    &v2->m_pkTitleStateCheckBox[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    v27,
    COERCE_D3DXCOLOR(v26.r),
    5u);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab03_On");
  v28 = ColumnBut::CreateWin(uiLeft - v9, uiTop - v21, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0);
  v2->m_pkTitleStateCheckBox[2] = v28;
  v28->m_bCheck = 0;
  *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v30 = TextData3::Get(0x9E846385u);
  UIUtil::CreateAttachedText(
    &ui,
    &v2->m_pkTitleStateCheckBox[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    v30,
    COERCE_D3DXCOLOR(v29.r),
    5u);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab04_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab04_On");
  v31 = ColumnBut::CreateWin(uiLeft - v9, uiTop - v21, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0);
  v2->m_pkTitleStateCheckBox[3] = v31;
  v31->m_bCheck = 0;
  *(_QWORD *)&v32.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v32.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v33 = TextData3::Get(0xE91F0B37u);
  UIUtil::CreateAttachedText(
    &ui,
    &v2->m_pkTitleStateCheckBox[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    v33,
    COERCE_D3DXCOLOR(v32.r),
    5u);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v380) = 2;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  v34 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v34->nItemType = 1;
  v34->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  v35 = &v34->vecNodeName;
  LOBYTE(v380) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v35,
    &thisa);
  LOBYTE(v380) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v380) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v35,
    &thisa);
  LOBYTE(v380) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v380) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v35,
    &thisa);
  LOBYTE(v380) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  i = 0;
  do
  {
    v36 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    v37 = i + 1;
    v36->nItemType = 2;
    i = v37;
    v38 = fs("Column%.2d");
    v39 = v38;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkWinSpr = (PgWinSpr *)(v38 + 1);
    do
      v40 = *v39++;
    while ( v40 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v38, v39 - (char *)pkWinSpr);
    LOBYTE(v380) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      &v36->vecNodeName,
      &thisa);
    LOBYTE(v380) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v41 = i;
    v36->pNode = spNode.m_pObject;
    v36->bAbbreviatable = 1;
    i = v41;
  }
  while ( v41 < 4 );
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, pkTexture);
  v43 = SlideListWin::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          v42,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pkRankListWin = v43;
  SlideListWin::UpdateViewList(v43);
  v44 = (unsigned int)v2->m_vecVisibleRank.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkRankListWin;
  if ( (unsigned int)&pkTextWin >= v44
    || (v45 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0], v45 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v44 == v2->m_vecVisibleRank.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
    v49 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v49 )
      *v49 = (PgWin *)pkTextWin;
  }
  else
  {
    v46 = (signed int)((char *)&pkTextWin - v45) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v45) >> 2);
    if ( (PgWin **)v44 == v2->m_vecVisibleRank.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
      v46 = (signed int)pkWinSpr;
    }
    v47 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    v48 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v46;
    if ( v47 )
      *v47 = *(PgWin **)v48;
  }
  ++v2->m_vecVisibleRank.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)UIUtil::CreateBtn(&ui, 0xAu, "Title01Nor", "Title01Click", "Title01Over", 0, 0);
  *(_QWORD *)&v50.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v50.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v51 = TextData3::Get(0xA6966789u);
  UIUtil::CreateAttachedText(&ui, (PgWin *)pkTextWin, v51, COERCE_D3DXCOLOR(v50.r), 5u);
  pkTexture = (NiSourceTexture *)pkTextWin;
  v52 = (unsigned int)v2->m_vecVisibleRank.baseclass_0._Mylast;
  if ( (unsigned int)&pkTexture >= v52
    || (v53 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0], v53 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v52 == v2->m_vecVisibleRank.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
    v57 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v57 )
      *v57 = (PgWin *)pkTextWin;
  }
  else
  {
    v54 = (signed int)((char *)&pkTexture - v53) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v53) >> 2);
    if ( (PgWin **)v52 == v2->m_vecVisibleRank.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
      v54 = (signed int)pkWinSpr;
    }
    v55 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v54;
    v56 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v56 )
      *v56 = *(PgWin **)v55;
  }
  ++v2->m_vecVisibleRank.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)UIUtil::CreateBtn(&ui, 0xAu, "Title02Nor", "Title02Click", "Title02Over", 0, 0);
  *(_QWORD *)&v58.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v58.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v59 = TextData::Get(0x4EA49695u);
  UIUtil::CreateAttachedText(&ui, (PgWin *)pkTextWin, v59, COERCE_D3DXCOLOR(v58.r), 5u);
  v60 = (unsigned int)v2->m_vecVisibleRank.baseclass_0._Mylast;
  pkTexture = (NiSourceTexture *)pkTextWin;
  if ( (unsigned int)&pkTexture >= v60
    || (v61 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0], v61 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v60 == v2->m_vecVisibleRank.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
    v65 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v65 )
      *v65 = (PgWin *)pkTextWin;
  }
  else
  {
    v62 = (signed int)((char *)&pkTexture - v61) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v61) >> 2);
    if ( (PgWin **)v60 == v2->m_vecVisibleRank.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
      v62 = (signed int)pkWinSpr;
    }
    v63 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v62;
    v64 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v64 )
      *v64 = *(PgWin **)v63;
  }
  ++v2->m_vecVisibleRank.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)UIUtil::CreateBtn(&ui, 0xAu, "Title03Nor", "Title03Click", "Title03Over", 0, 0);
  *(_QWORD *)&v66.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v66.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v67 = TextData::Get(0x4A5F8BA3u);
  UIUtil::CreateAttachedText(&ui, (PgWin *)pkTextWin, v67, COERCE_D3DXCOLOR(v66.r), 5u);
  v68 = (unsigned int)v2->m_vecVisibleRank.baseclass_0._Mylast;
  pkTexture = (NiSourceTexture *)pkTextWin;
  if ( (unsigned int)&pkTexture >= v68
    || (v69 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0], v69 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v68 == v2->m_vecVisibleRank.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
    v73 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v73 )
      *v73 = (PgWin *)pkTextWin;
  }
  else
  {
    v70 = (signed int)((char *)&pkTexture - v69) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v69) >> 2);
    if ( (PgWin **)v68 == v2->m_vecVisibleRank.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
      v70 = (signed int)pkWinSpr;
    }
    v71 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v70;
    v72 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v72 )
      *v72 = *(PgWin **)v71;
  }
  ++v2->m_vecVisibleRank.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)UIUtil::CreateBtn(&ui, 0xAu, "Title04Nor", "Title04Click", "Title04Over", 0, 0);
  *(_QWORD *)&v74.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v74.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v75 = TextData3::Get(0x9390A4C8u);
  v2->m_pkRecordListText = UIUtil::CreateAttachedText(&ui, (PgWin *)pkTextWin, v75, COERCE_D3DXCOLOR(v74.r), 5u);
  pkTexture = (NiSourceTexture *)pkTextWin;
  v76 = (unsigned int)v2->m_vecVisibleRank.baseclass_0._Mylast;
  if ( (unsigned int)&pkTexture >= v76
    || (v77 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0], v77 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v76 == v2->m_vecVisibleRank.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
    v81 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( v81 )
      *v81 = (PgWin *)pkTextWin;
  }
  else
  {
    v78 = (signed int)((char *)&pkTexture - v77) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v77) >> 2);
    if ( (PgWin **)v76 == v2->m_vecVisibleRank.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
        1u);
      v78 = (signed int)pkWinSpr;
    }
    v79 = v2->m_vecVisibleRank.baseclass_0._Mylast;
    v80 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v78;
    if ( v79 )
      *v79 = *(PgWin **)v80;
  }
  ++v2->m_vecVisibleRank.baseclass_0._Mylast;
  v82 = UIUtil::CreateSpr(&ui, "Object02", 0);
  v83 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v82 + 256);
  pkWinSpr = (PgWinSpr *)v82;
  v83(v82, 0);
  v84 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTexture = (NiSourceTexture *)v82;
  if ( (unsigned int)&pkTexture >= v84
    || (v85 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0], v85 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v84 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v89 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v89 )
      *v89 = (PgWin *)pkWinSpr;
  }
  else
  {
    v86 = (signed int)((char *)&pkTexture - v85) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v85) >> 2);
    if ( (PgWin **)v84 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v86 = (signed int)pkWinSpr;
    }
    v87 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v86;
    v88 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v88 )
      *v88 = *(PgWin **)v87;
  }
  v90 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v91 = PgSprData::Create(&v90->baseclass_0, "Title", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v92 = v91->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v91->m_uiHeight;
  i = v92;
  v93 = Font::Get(MAIN_MENU);
  v94 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          i,
          (unsigned int)pkWinSpr,
          v93,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkMyRecordMyInfo[0] = v94;
  v94->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v94,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v95 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecordMyInfo[0];
  if ( (unsigned int)&pkTextWin >= v95
    || (v96 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0], v96 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v95 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v100 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v100 )
      *v100 = (PgWin *)pkTextWin;
  }
  else
  {
    v97 = (signed int)((char *)&pkTextWin - v96) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v96) >> 2);
    if ( (PgWin **)v95 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v97 = (signed int)pkWinSpr;
    }
    v98 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v99 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v97;
    if ( v98 )
      *v98 = *(PgWin **)v99;
  }
  v101 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v102 = PgSprData::Create(&v101->baseclass_0, "Name", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v103 = v102->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v102->m_uiHeight;
  i = v103;
  v104 = Font::Get(MAIN_MENU);
  v105 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v104,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkMyRecordMyInfo[1] = v105;
  v105->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v105,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v106 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecordMyInfo[1];
  if ( (unsigned int)&pkTextWin >= v106
    || (v107 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v107 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v106 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v111 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v111 )
      *v111 = (PgWin *)pkTextWin;
  }
  else
  {
    v108 = (signed int)((char *)&pkTextWin - v107) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v107) >> 2);
    if ( (PgWin **)v106 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v108 = (signed int)pkWinSpr;
    }
    v109 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v110 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v108;
    if ( v109 )
      *v109 = *(PgWin **)v110;
  }
  v112 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v113 = PgSprData::Create(&v112->baseclass_0, "Level", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v114 = v113->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v113->m_uiHeight;
  i = v114;
  v115 = Font::Get(MAIN_MENU);
  v116 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v115,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkMyRecordMyInfo[2] = v116;
  v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v116,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v117 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecordMyInfo[2];
  if ( (unsigned int)&pkTextWin >= v117
    || (v118 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v118 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v117 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v122 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v122 )
      *v122 = (PgWin *)pkTextWin;
  }
  else
  {
    v119 = (signed int)((char *)&pkTextWin - v118) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v118) >> 2);
    if ( (PgWin **)v117 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v119 = (signed int)pkWinSpr;
    }
    v120 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v121 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v119;
    if ( v120 )
      *v120 = *(PgWin **)v121;
  }
  v123 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v124 = PgSprData::Create(&v123->baseclass_0, "Job", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v125 = v124->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v124->m_uiHeight;
  i = v125;
  v126 = Font::Get(MAIN_MENU);
  v127 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v126,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkMyRecordMyInfo[3] = v127;
  v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v127,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecordMyInfo[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v128 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecordMyInfo[3];
  if ( (unsigned int)&pkTextWin >= v128
    || (v129 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v129 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v128 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v133 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v133 )
      *v133 = (PgWin *)pkTextWin;
  }
  else
  {
    v130 = (signed int)((char *)&pkTextWin - v129) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v129) >> 2);
    if ( (PgWin **)v128 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v130 = (signed int)pkWinSpr;
    }
    v131 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v132 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v130;
    if ( v131 )
      *v131 = *(PgWin **)v132;
  }
  v134 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v135 = PgSprData::Create(&v134->baseclass_0, "PastRecord", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v136 = v135->m_uiWidth;
  v137 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v135->m_uiHeight;
  i = v136;
  v138 = Font::Get(MAIN_MENU);
  v139 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v138,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v137,
           7u);
  v2->m_pkMyDate[0] = (PgWinText *)v139;
  v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v139,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyDate[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyDate[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyDate[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v140 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyDate[0];
  if ( (unsigned int)&pkTextWin >= v140
    || (v141 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v141 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v140 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v145 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v145 )
      *v145 = (PgWin *)pkTextWin;
  }
  else
  {
    v142 = (signed int)((char *)&pkTextWin - v141) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v141) >> 2);
    if ( (PgWin **)v140 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v142 = (signed int)pkWinSpr;
    }
    v143 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v144 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v142;
    if ( v143 )
      *v143 = *(PgWin **)v144;
  }
  v146 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v147 = PgSprData::Create(&v146->baseclass_0, "NewRecord", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v148 = v147->m_uiWidth;
  v149 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v147->m_uiHeight;
  i = v148;
  v150 = Font::Get(MAIN_MENU);
  v151 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v150,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v149,
           7u);
  v2->m_pkMyDate[1] = (PgWinText *)v151;
  v151->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v151,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyDate[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyDate[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyDate[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v152 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyDate[1];
  if ( (unsigned int)&pkTextWin >= v152
    || (v153 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v153 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v152 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v157 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v157 )
      *v157 = (PgWin *)pkTextWin;
  }
  else
  {
    v154 = (signed int)((char *)&pkTextWin - v153) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v153) >> 2);
    if ( (PgWin **)v152 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v154 = (signed int)pkWinSpr;
    }
    v155 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v156 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v154;
    if ( v155 )
      *v155 = *(PgWin **)v156;
  }
  v158 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v159 = PgSprData::Create(&v158->baseclass_0, "Damage", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v160 = v159->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v159->m_uiHeight;
  i = v160;
  v161 = Font::Get(MAIN_MENU);
  v162 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v161,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v163 = v162->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (PgSprData *)v162;
  v163[122].__vecDelDtor((NiRefObject *)v162, 5u);
  pkWinSpr = (PgWinSpr *)&pkTextWin->baseclass_0.vfptr[118];
  v164 = TextData3::Get(0x9390A4C8u);
  ((void (__thiscall *)(PgSprData *, char *))pkWinSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
    pkTextWin,
    v164);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
  v165 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTexture = (NiSourceTexture *)pkTextWin;
  if ( (unsigned int)&pkTexture >= v165
    || (v166 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v166 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v165 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v170 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v170 )
      *v170 = (PgWin *)pkTextWin;
  }
  else
  {
    v167 = (signed int)((char *)&pkTexture - v166) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v166) >> 2);
    if ( (PgWin **)v165 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v167 = (signed int)pkWinSpr;
    }
    v168 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v169 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v167;
    if ( v168 )
      *v168 = *(PgWin **)v169;
  }
  v171 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v172 = PgSprData::Create(&v171->baseclass_0, "DamagePastVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v173 = v172->m_uiWidth;
  v174 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v172->m_uiHeight;
  i = v173;
  v175 = Font::Get(MAIN_MENU);
  v176 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v175,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v174,
           7u);
  v2->m_pkMyRecord[0][0] = (PgWinText *)v176;
  v176->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v176,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v177 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[0][0];
  if ( (unsigned int)&pkTextWin >= v177
    || (v178 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v178 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v177 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v182 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v182 )
      *v182 = (PgWin *)pkTextWin;
  }
  else
  {
    v179 = (signed int)((char *)&pkTextWin - v178) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v178) >> 2);
    if ( (PgWin **)v177 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v179 = (signed int)pkWinSpr;
    }
    v180 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v181 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v179;
    if ( v180 )
      *v180 = *(PgWin **)v181;
  }
  v183 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v184 = PgSprData::Create(&v183->baseclass_0, "DamageNewVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v185 = v184->m_uiWidth;
  v186 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v184->m_uiHeight;
  i = v185;
  v187 = Font::Get(MAIN_MENU);
  v188 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v187,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v186,
           7u);
  v2->m_pkMyRecord[1][0] = (PgWinText *)v188;
  v188->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v188,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v189 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[1][0];
  if ( (unsigned int)&pkTextWin >= v189
    || (v190 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v190 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v189 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v194 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v194 )
      *v194 = (PgWin *)pkTextWin;
  }
  else
  {
    v191 = (signed int)((char *)&pkTextWin - v190) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v190) >> 2);
    if ( (PgWin **)v189 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v191 = (signed int)pkWinSpr;
    }
    v192 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v193 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v191;
    if ( v192 )
      *v192 = *(PgWin **)v193;
  }
  v195 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v196 = PgSprData::Create(&v195->baseclass_0, "DamageReceive", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v197 = v196->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v196->m_uiHeight;
  i = v197;
  v198 = Font::Get(MAIN_MENU);
  v199 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v198,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v200 = v199->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (PgSprData *)v199;
  v200[122].__vecDelDtor((NiRefObject *)v199, 5u);
  pkWinSpr = (PgWinSpr *)&pkTextWin->baseclass_0.vfptr[118];
  v201 = TextData3::Get(0x2E342C63u);
  ((void (__thiscall *)(PgSprData *, char *))pkWinSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
    pkTextWin,
    v201);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
  v202 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTexture = (NiSourceTexture *)pkTextWin;
  if ( (unsigned int)&pkTexture >= v202
    || (v203 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v203 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v202 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v207 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v207 )
      *v207 = (PgWin *)pkTextWin;
  }
  else
  {
    v204 = (signed int)((char *)&pkTexture - v203) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v203) >> 2);
    if ( (PgWin **)v202 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v204 = (signed int)pkWinSpr;
    }
    v205 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v206 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v204;
    if ( v205 )
      *v205 = *(PgWin **)v206;
  }
  v208 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v209 = PgSprData::Create(&v208->baseclass_0, "DamageReceivePastVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v210 = v209->m_uiWidth;
  v211 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v209->m_uiHeight;
  i = v210;
  v212 = Font::Get(MAIN_MENU);
  v213 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v212,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v211,
           7u);
  v2->m_pkMyRecord[0][1] = (PgWinText *)v213;
  v213->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v213,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v214 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[0][1];
  if ( (unsigned int)&pkTextWin >= v214
    || (v215 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v215 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v214 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v219 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v219 )
      *v219 = (PgWin *)pkTextWin;
  }
  else
  {
    v216 = (signed int)((char *)&pkTextWin - v215) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v215) >> 2);
    if ( (PgWin **)v214 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v216 = (signed int)pkWinSpr;
    }
    v217 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v218 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v216;
    if ( v217 )
      *v217 = *(PgWin **)v218;
  }
  v220 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v221 = PgSprData::Create(&v220->baseclass_0, "DamageReceiveNewVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v222 = v221->m_uiWidth;
  v223 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v221->m_uiHeight;
  i = v222;
  v224 = Font::Get(MAIN_MENU);
  v225 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v224,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v223,
           7u);
  v2->m_pkMyRecord[1][1] = (PgWinText *)v225;
  v225->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v225,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v226 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[1][1];
  if ( (unsigned int)&pkTextWin >= v226
    || (v227 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v227 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v226 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v231 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v231 )
      *v231 = (PgWin *)pkTextWin;
  }
  else
  {
    v228 = (signed int)((char *)&pkTextWin - v227) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v227) >> 2);
    if ( (PgWin **)v226 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v228 = (signed int)pkWinSpr;
    }
    v229 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v230 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v228;
    if ( v229 )
      *v229 = *(PgWin **)v230;
  }
  v232 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v233 = PgSprData::Create(&v232->baseclass_0, "Heal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v234 = v233->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v233->m_uiHeight;
  i = v234;
  v235 = Font::Get(MAIN_MENU);
  v236 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v235,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v237 = v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (PgSprData *)v236;
  v237[122].__vecDelDtor((NiRefObject *)v236, 5u);
  pkWinSpr = (PgWinSpr *)&pkTextWin->baseclass_0.vfptr[118];
  v238 = TextData3::Get(0x9E846385u);
  ((void (__thiscall *)(_DWORD, _DWORD))pkWinSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
    pkTextWin,
    v238);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
  v239 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTexture = (NiSourceTexture *)pkTextWin;
  if ( (unsigned int)&pkTexture >= v239
    || (v240 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v240 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v239 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v244 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v244 )
      *v244 = (PgWin *)pkTextWin;
  }
  else
  {
    v241 = (signed int)((char *)&pkTexture - v240) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v240) >> 2);
    if ( (PgWin **)v239 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v241 = (signed int)pkWinSpr;
    }
    v242 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v243 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v241;
    if ( v242 )
      *v242 = *(PgWin **)v243;
  }
  v245 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v246 = PgSprData::Create(&v245->baseclass_0, "HealPastVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v247 = v246->m_uiWidth;
  v248 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v246->m_uiHeight;
  i = v247;
  v249 = Font::Get(MAIN_MENU);
  v250 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v249,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v248,
           7u);
  v2->m_pkMyRecord[0][2] = (PgWinText *)v250;
  v250->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v250,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v251 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[0][2];
  if ( (unsigned int)&pkTextWin >= v251
    || (v252 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v252 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v251 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v256 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v256 )
      *v256 = (PgWin *)pkTextWin;
  }
  else
  {
    v253 = (signed int)((char *)&pkTextWin - v252) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v252) >> 2);
    if ( (PgWin **)v251 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v253 = (signed int)pkWinSpr;
    }
    v254 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v255 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v253;
    if ( v254 )
      *v254 = *(PgWin **)v255;
  }
  v257 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v258 = PgSprData::Create(&v257->baseclass_0, "HealNewVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v259 = v258->m_uiWidth;
  v260 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v258->m_uiHeight;
  i = v259;
  v261 = Font::Get(MAIN_MENU);
  v262 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v261,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v260,
           7u);
  v2->m_pkMyRecord[1][2] = (PgWinText *)v262;
  v262->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v262,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v263 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[1][2];
  if ( (unsigned int)&pkTextWin >= v263
    || (v264 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v264 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v263 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v268 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v268 )
      *v268 = (PgWin *)pkTextWin;
  }
  else
  {
    v265 = (signed int)((char *)&pkTextWin - v264) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v264) >> 2);
    if ( (PgWin **)v263 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v265 = (signed int)pkWinSpr;
    }
    v266 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v267 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v265;
    if ( v266 )
      *v266 = *(PgWin **)v267;
  }
  v269 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v270 = PgSprData::Create(&v269->baseclass_0, "ClearTime", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v271 = v270->m_uiWidth;
  pkWinSpr = (PgWinSpr *)v270->m_uiHeight;
  i = v271;
  v272 = Font::Get(MAIN_MENU);
  v273 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v272,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v274 = v273->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (PgSprData *)v273;
  v274[122].__vecDelDtor((NiRefObject *)v273, 5u);
  pkWinSpr = (PgWinSpr *)&pkTextWin->baseclass_0.vfptr[118];
  v275 = TextData3::Get(0xF3DFBB2Du);
  ((void (__thiscall *)(_DWORD, _DWORD))pkWinSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
    pkTextWin,
    v275);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
  v276 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTexture = (NiSourceTexture *)pkTextWin;
  if ( (unsigned int)&pkTexture >= v276
    || (v277 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v277 > (unsigned int)&pkTexture) )
  {
    if ( (PgWin **)v276 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v281 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v281 )
      *v281 = (PgWin *)pkTextWin;
  }
  else
  {
    v278 = (signed int)((char *)&pkTexture - v277) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTexture - v277) >> 2);
    if ( (PgWin **)v276 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v278 = (signed int)pkWinSpr;
    }
    v279 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v280 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v278;
    if ( v279 )
      *v279 = *(PgWin **)v280;
  }
  v282 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v283 = PgSprData::Create(&v282->baseclass_0, "ClearTimePastVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v284 = v283->m_uiWidth;
  v285 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v283->m_uiHeight;
  i = v284;
  v286 = Font::Get(MAIN_MENU);
  v287 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v286,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v285,
           7u);
  v2->m_pkMyRecord[0][3] = (PgWinText *)v287;
  v287->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v287,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[0][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v288 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[0][3];
  if ( (unsigned int)&pkTextWin >= v288
    || (v289 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v289 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v288 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v293 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v293 )
      *v293 = (PgWin *)pkTextWin;
  }
  else
  {
    v290 = (signed int)((char *)&pkTextWin - v289) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v289) >> 2);
    if ( (PgWin **)v288 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v290 = (signed int)pkWinSpr;
    }
    v291 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v292 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v290;
    if ( v291 )
      *v291 = *(PgWin **)v292;
  }
  v294 = spNode.m_pObject;
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  v295 = PgSprData::Create(&v294->baseclass_0, "ClearTimeNewVal", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v296 = v295->m_uiWidth;
  v297 = g_pkToolTipWin;
  pkWinSpr = (PgWinSpr *)v295->m_uiHeight;
  i = v296;
  v298 = Font::Get(MAIN_MENU);
  v299 = PgWinAbbreviateText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY,
           i,
           (unsigned int)pkWinSpr,
           v298,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0,
           0,
           1,
           v297,
           7u);
  v2->m_pkMyRecord[1][3] = (PgWinText *)v299;
  v299->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v299,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyRecord[1][3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v300 = (unsigned int)v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTextWin = (PgSprData *)v2->m_pkMyRecord[1][3];
  if ( (unsigned int)&pkTextWin >= v300
    || (v301 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0],
        v301 > (unsigned int)&pkTextWin) )
  {
    if ( (PgWin **)v300 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
    v305 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    if ( v305 )
      *v305 = (PgWin *)pkTextWin;
  }
  else
  {
    v302 = (signed int)((char *)&pkTextWin - v301) >> 2;
    pkWinSpr = (PgWinSpr *)((signed int)((char *)&pkTextWin - v301) >> 2);
    if ( (PgWin **)v300 == v2->m_vecVisibleMyRecord.baseclass_0._Myend )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleMyRecord,
        1u);
      v302 = (signed int)pkWinSpr;
    }
    v303 = v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
    v304 = *(_DWORD *)&v2->m_vecVisibleMyRecord.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v302;
    if ( v303 )
      *v303 = *(PgWin **)v304;
  }
  ++v2->m_vecVisibleMyRecord.baseclass_0._Mylast;
  pkTexture = 0;
  *(_DWORD *)&__formal[0].dummy[0] = (char *)v2 + 476;
  i = (unsigned int)v2->m_pkTopPortrait;
  do
  {
    v306 = FaceCutMaskWin::CreateWin((int)pkTexture);
    *(_DWORD *)i = v306;
    pkTextWin = (PgSprData *)v306;
    v307 = (unsigned int)v2->m_vecVisibleRank.baseclass_0._Mylast;
    if ( (unsigned int)&pkTextWin >= v307
      || (v308 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0], v308 > (unsigned int)&pkTextWin) )
    {
      if ( (PgWin **)v307 == v2->m_vecVisibleRank.baseclass_0._Myend )
        std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
          (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v2->m_vecVisibleRank,
          1u);
      v317 = v2->m_vecVisibleRank.baseclass_0._Mylast;
      if ( v317 )
        *v317 = (PgWin *)pkTextWin;
    }
    else
    {
      v309 = (signed int)((char *)&pkTextWin - v308);
      v310 = v2->m_vecVisibleRank.baseclass_0._Myend;
      v311 = (void *)(v309 >> 2);
      pkWinSpr = (PgWinSpr *)v311;
      if ( (PgWin **)v307 == v310 )
      {
        v312 = *(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0];
        v313 = (signed int)(v307 - v312) >> 2;
        if ( (unsigned int)v313 > 0x3FFFFFFE )
          std::_Xlength_error("vector<T> too long");
        v314 = (signed int)((char *)v310 - v312) >> 2;
        uiHeight = (NiAVObject *)(v313 + 1);
        if ( v313 + 1 > (unsigned int)v314 )
        {
          if ( 1073741823 - ((unsigned int)v314 >> 1) >= v314 )
            v315 = ((unsigned int)v314 >> 1) + v314;
          else
            v315 = 0;
          if ( v315 < (unsigned int)uiHeight )
            v315 = (unsigned int)uiHeight;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v2->m_vecVisibleRank,
            v315);
        }
        v311 = pkWinSpr;
      }
      v316 = v2->m_vecVisibleRank.baseclass_0._Mylast;
      if ( v316 )
        *v316 = *(PgWin **)(*(_DWORD *)&v2->m_vecVisibleRank.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * (_DWORD)v311);
    }
    v318 = pkTexture;
    ++v2->m_vecVisibleRank.baseclass_0._Mylast;
    i += 4;
    pkTexture = (NiSourceTexture *)((char *)v318 + 1);
  }
  while ( (signed int)((char *)&v318->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 1) < 3 );
  v319 = 0;
  v320 = (NiAVObject **)v2->m_pkTopName;
  do
  {
    uiHeight = (NiAVObject *)spNode.m_pObject;
    i = v319 + 1;
    v321 = fs("TopRankName%.2d");
    v322 = PgSprData::Create(uiHeight, v321, &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v323 = (void *)v322->m_uiWidth;
    v324 = g_pkToolTipWin;
    uiHeight = (NiAVObject *)v322->m_uiHeight;
    pkWinSpr = (PgWinSpr *)v323;
    v325 = Font::Get(MAIN_MENU);
    v326 = PgWinAbbreviateText::CreateWin(
             uiLeft - v9,
             uiTop - iOffY,
             (unsigned int)pkWinSpr,
             (unsigned int)uiHeight,
             v325,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0,
             0,
             1,
             v324,
             7u);
    *v320 = (NiAVObject *)v326;
    v326->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v326,
      5u);
    ((void (__stdcall *)(_DWORD))(*v320)->baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))(*v320)->baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))(*v320)->baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    uiHeight = *v320;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecVisibleRank,
      (const unsigned int *)&uiHeight);
    v319 = i;
    ++v320;
  }
  while ( (signed int)i < 3 );
  v327 = 0;
  v328 = (NiAVObject **)v2->m_pkTopRecord;
  do
  {
    uiHeight = (NiAVObject *)spNode.m_pObject;
    i = v327 + 1;
    v329 = fs("TopDamage%.2d");
    v330 = PgSprData::Create(uiHeight, v329, &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v331 = (void *)v330->m_uiWidth;
    v332 = g_pkToolTipWin;
    uiHeight = (NiAVObject *)v330->m_uiHeight;
    pkWinSpr = (PgWinSpr *)v331;
    v333 = Font::Get(MAIN_MENU);
    v334 = PgWinAbbreviateText::CreateWin(
             uiLeft - v9,
             uiTop - iOffY,
             (unsigned int)pkWinSpr,
             (unsigned int)uiHeight,
             v333,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0,
             0,
             1,
             v332,
             7u);
    *v328 = (NiAVObject *)v334;
    v334->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v334,
      5u);
    ((void (__stdcall *)(_DWORD))(*v328)->baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))(*v328)->baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))(*v328)->baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    uiHeight = *v328;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecVisibleRank,
      (const unsigned int *)&uiHeight);
    v327 = i;
    ++v328;
  }
  while ( (signed int)i < 3 );
  i = 0;
  v335 = (NiAVObject **)v2->m_pkIDListPanel;
  do
  {
    v336 = fs("Panel%02d");
    v337 = UIUtil::CreateSpr(&ui, v336, 0);
    *v335 = (NiAVObject *)v337;
    v337->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v337,
      0);
    ((void (__stdcall *)(_DWORD))(*v335)->baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    uiHeight = *v335;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecVisibleIDSelect,
      (const unsigned int *)&uiHeight);
    ++v335;
    ++i;
  }
  while ( (signed int)i < 2 );
  v2->m_pkIDSlideBtn = UIUtil::CreateBtn(&ui, 0x11u, "BtnNor", "BtnClick", "BtnOver", 0, 0);
  *(_QWORD *)&v338.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v338.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v339 = TextData3::Get(0x9B8FB6D9u);
  v340 = UIUtil::CreateAttachedText(
           &ui,
           &v2->m_pkIDSlideBtn->baseclass_0.baseclass_0,
           v339,
           COERCE_D3DXCOLOR(v338.r),
           5u);
  v341 = *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo;
  v2->m_pkIDSlideText = v340;
  if ( v341 != kCreateInfo.m_arrItem.baseclass_0._Mylast )
  {
    v342 = std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
             kCreateInfo.m_arrItem.baseclass_0._Mylast,
             kCreateInfo.m_arrItem.baseclass_0._Mylast,
             v341,
             __formal[0]);
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      v342,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      __formal[0]);
    kCreateInfo.m_arrItem.baseclass_0._Mylast = v342;
  }
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  v343 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v343->nItemType = 1;
  v343->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor01", 0xEu);
  v344 = &v343->vecNodeName;
  LOBYTE(v380) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v344,
    &thisa);
  LOBYTE(v380) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick01", 0x10u);
  LOBYTE(v380) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v344,
    &thisa);
  LOBYTE(v380) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver01", 0xFu);
  LOBYTE(v380) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v344,
    &thisa);
  LOBYTE(v380) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v345 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v345->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column05", 8u);
  LOBYTE(v380) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v345->vecNodeName,
    &thisa);
  LOBYTE(v380) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v345->pNode = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v346 = MenuTexMgr::GetTexture(4u);
  v347 = v346;
  v348 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText02", &uiLeft, &uiTop, v346);
  v349 = SlideListWin::CreateWin(uiLeft, uiTop, v348, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
  v2->m_pkIDSlideListWin = v349;
  v349->m_uiLClickMsg = 18;
  SlideListWin::AlignText(v2->m_pkIDSlideListWin, 4u);
  SlideListWin::UpdateViewList(v2->m_pkIDSlideListWin);
  v2->m_pkIDSlideListWin->m_bCheckEnable = 0;
  ((void (__cdecl *)(_DWORD))v2->m_pkIDSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  uiHeight = (NiAVObject *)v2->m_pkIDSlideListWin;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecVisibleIDSelect,
    (const unsigned int *)&uiHeight);
  v350 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, v347);
  v351 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor01");
  NiObjectNET::SetName(v351, "SlideBar_DnBtn01Nor");
  v352 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick01");
  NiObjectNET::SetName(v352, "SlideBar_DnBtn01Click");
  v353 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver01");
  NiObjectNET::SetName(v353, "SlideBar_DnBtn01Over");
  v354 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor01");
  NiObjectNET::SetName(v354, "SlideBar_UpBtn01Nor");
  v355 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick01");
  NiObjectNET::SetName(v355, "SlideBar_UpBtn01Click");
  v356 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver01");
  NiObjectNET::SetName(v356, "SlideBar_UpBtn01Over");
  v357 = SlideBar::CreateWin(
           spNode.m_pObject,
           "SlideBar01",
           "SlideBar_UpBtn01",
           "SlideBar_DnBtn01",
           v350,
           0,
           &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkIDSlideBar = v357;
  v357->m_uiClickMsg = 19;
  v2->m_pkIDSlideBar->m_eType = 1;
  ((void (__stdcall *)(_DWORD))v2->m_pkIDSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  SlideBar::SetSplitCnt(v2->m_pkIDSlideBar, v2->m_pkIDSlideListWin->m_nSlideSplitCnt);
  uiHeight = (NiAVObject *)v2->m_pkIDSlideBar;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecVisibleIDSelect,
    (const unsigned int *)&uiHeight);
  ((void (__thiscall *)(IDRankingWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v358 = *(_DWORD *)&__formal[0].dummy[0];
  pkWinSpr = (PgWinSpr *)((char *)&v2->baseclass_0.baseclass_0 + 88);
  uiHeight = (NiAVObject *)((char *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0 + 92);
  v359 = 3;
  do
  {
    (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)v358 + 308))(
      *(_DWORD *)v358,
      (signed int)*(float *)&pkWinSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr);
    v358 += 4;
    --v359;
  }
  while ( v359 );
  LOBYTE(v380) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      __formal[0]);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v380) = 0;
  UIUtil::_UIUtil(&ui);
  v360 = spNode.m_pObject;
  v380 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v360 )
    v360->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v360, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0043AA50) --------------------------------------------------------
void __thiscall Name3::Name3(Name3 *this)
{
  *(_QWORD *)&this->n3_name[4] = 0i64;
  *(_DWORD *)&this->n3_name[0] = 0;
}

//----- (0043AA60) --------------------------------------------------------
void *__thiscall FaceCutMaskWin::_scalar_deleting_destructor_(FaceCutMaskWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FaceCutMaskWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FaceCutMaskWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98054C: using guessed type int (__stdcall *FaceCutMaskWin___vftable_)(int uiFlags);
// 98056C: using guessed type int (__thiscall *FaceCutMaskWin___vftable_)(void *p, char);

//----- (0043AAA0) --------------------------------------------------------
MapInfo *__cdecl MapInfoTab::GetByMapName(const unsigned __int16 id)
{
  unsigned int v1; // esi@1
  MapInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<MapInfo_MapInfoTab>::GetTotal() )
  {
    while ( *(_WORD *)CDataReader::GetRecord((CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4), v1) != id )
    {
      ++v1;
      if ( v1 >= ITableBase<MapInfo_MapInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (MapInfo *)CDataReader::GetRecord((CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4), v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (0043AAF0) --------------------------------------------------------
SHINE_INDUN_INFO *__thiscall std::allocator<SHINE_INDUN_INFO>::allocate(std::allocator<SHINE_INDUN_INFO> *this, unsigned int _Count)
{
  SHINE_INDUN_INFO *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x13B13B13 || (result = (SHINE_INDUN_INFO *)operator new(13 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0043AB50) --------------------------------------------------------
SHINE_INDUN_INFO *__cdecl std::_Uninit_move<SHINE_INDUN_INFO___SHINE_INDUN_INFO___std::allocator<SHINE_INDUN_INFO>_SHINE_INDUN_INFO>(SHINE_INDUN_INFO *_First, SHINE_INDUN_INFO *_Last, SHINE_INDUN_INFO *_Dest, std::allocator<SHINE_INDUN_INFO> *_Al, SHINE_INDUN_INFO *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  SHINE_INDUN_INFO *v6; // ecx@1
  SHINE_INDUN_INFO *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
    {
      *(_DWORD *)&result->MapIDClient.n3_name[0] = *(_DWORD *)&v6->MapIDClient.n3_name[0];
      *(_DWORD *)&result->MapIDClient.n3_name[4] = *(_DWORD *)&v6->MapIDClient.n3_name[4];
      *(_DWORD *)&result->MapIDClient.n3_name[8] = *(_DWORD *)&v6->MapIDClient.n3_name[8];
      result->ModeIDLv = v6->ModeIDLv;
    }
    ++v6;
  }
  return result;
}

//----- (0043AB90) --------------------------------------------------------
void __thiscall std::vector<SHINE_INDUN_INFO_std::allocator<SHINE_INDUN_INFO>>::reserve(std::vector<SHINE_INDUN_INFO,std::allocator<SHINE_INDUN_INFO> > *this, unsigned int _Count)
{
  std::vector<SHINE_INDUN_INFO,std::allocator<SHINE_INDUN_INFO> > *v2; // esi@1
  void *v3; // eax@4
  SHINE_INDUN_INFO *v4; // ST04_4@4
  SHINE_INDUN_INFO *v5; // ST00_4@4
  SHINE_INDUN_INFO *v6; // ebx@4
  signed int v7; // edx@4
  int v8; // edi@4
  SHINE_INDUN_INFO *i; // eax@5
  char *v10; // ecx@8
  char *v11; // edi@8
  int v12; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v14; // [sp+4h] [bp-10h]@1
  int v15; // [sp+10h] [bp-4h]@4

  v14 = &v12;
  v2 = this;
  if ( _Count > 0x13B13B13 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 13 < _Count )
  {
    v3 = std::allocator<SHINE_INDUN_INFO>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(SHINE_INDUN_INFO **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v15 = 0;
    std::_Uninit_move<SHINE_INDUN_INFO___SHINE_INDUN_INFO___std::allocator<SHINE_INDUN_INFO>_SHINE_INDUN_INFO>(
      v5,
      v4,
      (SHINE_INDUN_INFO *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = *(SHINE_INDUN_INFO **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (signed int)((unsigned __int64)(1321528399i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 2;
    v8 = v7 + ((unsigned int)v7 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      for ( i = v2->baseclass_0._Mylast; v6 != i; ++v6 )
        ;
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v10 = _Ptr;
    v11 = &_Ptr[13 * v8];
    v2->baseclass_0._Myend = (SHINE_INDUN_INFO *)&_Ptr[13 * _Count];
    v2->baseclass_0._Mylast = (SHINE_INDUN_INFO *)v11;
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v10;
  }
}

//----- (0043ACA0) --------------------------------------------------------
void __thiscall std::vector<SHINE_INDUN_INFO_std::allocator<SHINE_INDUN_INFO>>::_Reserve(std::vector<SHINE_INDUN_INFO,std::allocator<SHINE_INDUN_INFO> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 13;
  if ( 330382099 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 13;
  if ( v3 > v4 )
  {
    if ( 330382099 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<SHINE_INDUN_INFO_std::allocator<SHINE_INDUN_INFO>>::reserve(this, v5);
  }
}

//----- (0043AD20) --------------------------------------------------------
void *__thiscall IDRankingWin::_vector_deleting_destructor_(IDRankingWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  IDRankingWin::_IDRankingWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0043AD60) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::OnChat(const char *pcStr, unsigned __int16 kHandle, float fLifeTime)
{
  if ( kHandle != -1 )
    ScreenBDMgr::AddSpeechBD(&g_kScrnBDMgr, kHandle, (char *)pcStr, fLifeTime);
}

//----- (0043AD90) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::OnAnnounce(const char *pcStr, D3DXCOLOR kColor, float fLifeTime)
{
  PgFrameWork *v3; // eax@1
  AnnounceWin *v4; // ecx@2

  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
  {
    v4 = (AnnounceWin *)v3[28].m_kMsgQ.m_uiHead;
    if ( v4 )
      AnnounceWin::AddText(v4, (char *)pcStr, &kColor, 0, fLifeTime);
  }
}

//----- (0043ADD0) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::OnRemain(const char *pcStr, D3DXCOLOR kColor, float fLifeTime)
{
  PgFrameWork *v3; // eax@1
  AnnounceWin *v4; // ecx@2

  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
  {
    v4 = (AnnounceWin *)v3[28].m_kMsgQ.m_uiTail;
    if ( v4 )
      AnnounceWin::AddText(v4, (char *)pcStr, &kColor, 1, fLifeTime);
  }
}

//----- (0043AE10) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::OnAutorun(const char *pcStr, D3DXCOLOR kColor, float fLifeTime)
{
  PgFrameWork *v3; // eax@1
  GTInformWin *v4; // ecx@2
  D3DXCOLOR v5; // ST04_16@3

  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
  {
    v4 = (GTInformWin *)v3[33].m_kMsgQ.m_uiHead;
    if ( v4 )
    {
      *(_QWORD *)&v5.r = *(_QWORD *)&kColor;
      *(_QWORD *)&v5.b = *(_QWORD *)&kColor.b;
      GTInformWin::AddText(v4, (char *)pcStr, COERCE_D3DXCOLOR(v5.r), 0, fLifeTime);
    }
  }
}

//----- (0043AE70) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::OnNPCDlg(const char *pcStr, const char *pcFaceCutIndex, bool bCloseBtn, float fLifeTime)
{
  PgFrameWork *v4; // eax@1
  PgFrameWork *v5; // esi@1

  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v5 = v4;
  if ( v4 && *(_DWORD *)&v4[26].m_bInit )
  {
    if ( (unsigned __int8)(*(int (**)(void))(v4[28].m_kMsgQ.m_pBase->m_uiDumy[0] + 260))()
      || (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v5[25].m_kMsgQ.m_uiTail + 260))()
      || (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v5[26].m_kMsgQ.m_uiAlloced + 260))()
      || (unsigned __int8)(*(int (**)(void))(**(_DWORD **)&v5[25].m_bInit + 260))()
      || (unsigned __int8)(*((int (**)(void))v5[26].baseclass_0.vfptr->SetMsgHooker + 65))() )
    {
      OutputDebugStringA("\ni don't open the dialog since shop is open\n");
    }
    else
    {
      NpcDialogWin::CloseDialog(*(NpcDialogWin **)&v5[26].m_bInit);
      NpcDialogWin::OpenNpcScriptDialog(
        *(NpcDialogWin **)&v5[26].m_bInit,
        (char *)pcFaceCutIndex,
        (char *)pcStr,
        bCloseBtn);
      NpcDialogWin::SetCloseTime(*(NpcDialogWin **)&v5[26].m_bInit, fLifeTime);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, *(PgWin **)&v5[26].m_bInit);
    }
  }
}

//----- (0043AF60) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::OnBoxAnnounce(const char *pcStr, float fLifeTime)
{
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  BoxAnnounceWin *v4; // eax@6
  Tutorial *v5; // eax@7
  void *v6; // eax@8
  Tutorial *v7; // eax@12
  void *v8; // eax@13

  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v4 = v2->m_pkBoxAnnounceWin;
  if ( v4 )
  {
    BoxAnnounceWin::SetMsg(v4, pcStr);
    v5 = Singleton<Tutorial>::m_pInstance;
    if ( !Singleton<Tutorial>::m_pInstance )
    {
      v6 = operator new(0xB4u);
      if ( v6 )
        Tutorial::Tutorial(v5);
      else
        v5 = 0;
      Singleton<Tutorial>::m_pInstance = v5;
    }
    BoxAnnounceWin::SetLifeTime(v5->m_pkBoxAnnounceWin, fLifeTime);
    v7 = Singleton<Tutorial>::m_pInstance;
    if ( !Singleton<Tutorial>::m_pInstance )
    {
      v8 = operator new(0xB4u);
      if ( v8 )
        Tutorial::Tutorial(v7);
      else
        v7 = 0;
      Singleton<Tutorial>::m_pInstance = v7;
    }
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v7->m_pkBoxAnnounceWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0043B090) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::AddAbStateMsg(AbStateMsg *pkAbStateMsg)
{
  char *v1; // eax@2
  char v2; // dl@3
  char *v3; // esi@4
  PgFrameWork *v4; // eax@6
  AnnounceWin *v5; // ecx@7
  D3DXCOLOR kColor; // [sp+10h] [bp-4Ch]@4
  D3DXCOLOR TextColor; // [sp+20h] [bp-3Ch]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kStr; // [sp+30h] [bp-2Ch]@2
  unsigned int v9; // [sp+4Ch] [bp-10h]@1
  int v10; // [sp+58h] [bp-4h]@2
  int v11; // [sp+5Ch] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  if ( pkAbStateMsg )
  {
    kStr.baseclass_0._Myres = 15;
    kStr.baseclass_0._Mysize = 0;
    kStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v1 = pkAbStateMsg->AbStateMsgDesc;
    v10 = 0;
    do
      v2 = *v1++;
    while ( v2 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kStr,
      pkAbStateMsg->AbStateMsgDesc,
      v1 - &pkAbStateMsg->AbStateMsgDesc[1]);
    Color::GetDxColor(&kColor, pkAbStateMsg->R, pkAbStateMsg->G, pkAbStateMsg->B, -1);
    v3 = *(char **)&kStr;
    if ( kStr.baseclass_0._Myres < 0x10 )
      v3 = (char *)&kStr;
    LODWORD(TextColor.r) = (_DWORD)kColor.r;
    TextColor.g = kColor.g;
    TextColor.a = kColor.a;
    TextColor.b = kColor.b;
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      v5 = (AnnounceWin *)v4[28].m_kMsgQ.m_uiHead;
      if ( v5 )
        AnnounceWin::AddText(v5, v3, &TextColor, 0, 8.0);
    }
    if ( kStr.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kStr);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0043B1B0) --------------------------------------------------------
void __cdecl ScriptMsgCtrl::AddMsg(ScriptMsg *pkScriptMsg, const char *pcStr, unsigned __int16 kHandle)
{
  char *v3; // eax@4
  char v4; // cl@5
  unsigned int v5; // ecx@7
  const char *v6; // eax@10
  const char *v7; // ecx@13
  D3DXCOLOR v8; // ST04_16@15
  const char *v9; // ecx@16
  D3DXCOLOR v10; // ST04_16@18
  const char *v11; // ecx@19
  D3DXCOLOR v12; // ST04_16@21
  FaceCutMsg *v13; // eax@22
  const char *v14; // ecx@23
  const char *v15; // eax@26
  D3DXCOLOR kColor; // [sp+10h] [bp-40h]@9
  float fLifeTime; // [sp+20h] [bp-30h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kStr; // [sp+24h] [bp-2Ch]@2
  unsigned int v19; // [sp+40h] [bp-10h]@1
  int v20; // [sp+4Ch] [bp-4h]@2
  int v21; // [sp+50h] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  if ( pkScriptMsg )
  {
    kStr.baseclass_0._Myres = 15;
    kStr.baseclass_0._Mysize = 0;
    kStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v20 = 0;
    if ( !pcStr
      || (std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kStr, pcStr, strlen(pcStr)),
          !kStr.baseclass_0._Mysize) )
    {
      v3 = pkScriptMsg->SM_Msg;
      do
        v4 = *v3++;
      while ( v4 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &kStr,
        pkScriptMsg->SM_Msg,
        v3 - &pkScriptMsg->SM_Msg[1]);
    }
    v5 = pkScriptMsg->SM_LifeTime;
    fLifeTime = 1000000.0;
    if ( v5 )
      fLifeTime = (double)(v5 / 0x3E8);
    Color::GetDxColor(&kColor, pkScriptMsg->R, pkScriptMsg->G, pkScriptMsg->B, -1);
    switch ( pkScriptMsg->SM_Pos )
    {
      case 0:
        v6 = *(const char **)&kStr;
        if ( kStr.baseclass_0._Myres < 0x10 )
          v6 = (const char *)&kStr;
        ScriptMsgCtrl::OnChat(v6, kHandle, fLifeTime);
        break;
      case 1:
        v7 = *(const char **)&kStr;
        if ( kStr.baseclass_0._Myres < 0x10 )
          v7 = (const char *)&kStr;
        *(_QWORD *)&v8.r = *(_QWORD *)&kColor;
        *(_QWORD *)&v8.b = *(_QWORD *)&kColor.b;
        ScriptMsgCtrl::OnAnnounce(v7, COERCE_D3DXCOLOR(v8.r), fLifeTime);
        break;
      case 2:
        v9 = *(const char **)&kStr;
        if ( kStr.baseclass_0._Myres < 0x10 )
          v9 = (const char *)&kStr;
        *(_QWORD *)&v10.r = *(_QWORD *)&kColor;
        *(_QWORD *)&v10.b = *(_QWORD *)&kColor.b;
        ScriptMsgCtrl::OnRemain(v9, COERCE_D3DXCOLOR(v10.r), fLifeTime);
        break;
      case 3:
        v11 = *(const char **)&kStr;
        if ( kStr.baseclass_0._Myres < 0x10 )
          v11 = (const char *)&kStr;
        *(_QWORD *)&v12.r = *(_QWORD *)&kColor;
        *(_QWORD *)&v12.b = *(_QWORD *)&kColor.b;
        ScriptMsgCtrl::OnAutorun(v11, COERCE_D3DXCOLOR(v12.r), fLifeTime);
        break;
      case 4:
        v13 = FaceCutMsgTab::GetByScripMsgInx(pkScriptMsg->SM_Inx);
        if ( v13 )
        {
          v14 = *(const char **)&kStr;
          if ( kStr.baseclass_0._Myres < 0x10 )
            v14 = (const char *)&kStr;
          ScriptMsgCtrl::OnNPCDlg(v14, v13->FaceCutFile, v13->IsCloseBtn != 0, fLifeTime);
        }
        break;
      case 5:
        v15 = *(const char **)&kStr;
        if ( kStr.baseclass_0._Myres < 0x10 )
          v15 = (const char *)&kStr;
        ScriptMsgCtrl::OnBoxAnnounce(v15, fLifeTime);
        break;
      default:
        break;
    }
    if ( kStr.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kStr);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0043B430) --------------------------------------------------------
FaceCutMsg *__cdecl FaceCutMsgTab::GetByScripMsgInx(const char *pcScriptMsgInx)
{
  const char *v1; // ebx@1
  unsigned int v2; // edi@1
  int v3; // eax@2
  void *v4; // eax@6
  const char *v5; // esi@6
  int v6; // edx@7
  char v7; // cl@8
  const char *v8; // eax@9
  int v9; // edx@9
  char v10; // cl@10
  unsigned int v11; // ebx@11
  unsigned int v12; // eax@11
  unsigned int v13; // esi@11
  unsigned int v14; // ecx@11
  unsigned int v15; // edi@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@13
  int v17; // eax@15
  bool v18; // zf@15
  signed int v19; // eax@17
  bool v20; // bl@20
  FaceCutMsg *pkFaceCutMsg; // [sp+0h] [bp-3Ch]@6
  unsigned int i; // [sp+8h] [bp-34h]@5
  unsigned int v24; // [sp+Ch] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@7
  unsigned int v26; // [sp+2Ch] [bp-10h]@1
  int v27; // [sp+38h] [bp-4h]@20
  int v28; // [sp+3Ch] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v1 = pcScriptMsgInx;
  v2 = 0;
  if ( !pcScriptMsgInx
    || ((v3 = *(_DWORD *)(ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable + 56)) == 0 ? (v24 = 0) : (v24 = *(_DWORD *)(v3 + 40)),
        i = 0,
        v24 <= 0) )
    return 0;
  while ( 1 )
  {
    v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable + 4), v2);
    v5 = (const char *)v4;
    pkFaceCutMsg = (FaceCutMsg *)v4;
    if ( v4 )
      break;
LABEL_24:
    ++v2;
    i = v2;
    if ( v2 >= v24 )
      return 0;
  }
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = (int)((char *)v4 + 1);
  do
  {
    v7 = *(_BYTE *)v4;
    v4 = (char *)v4 + 1;
  }
  while ( v7 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this,
    v5,
    (unsigned int)((char *)v4 - v6));
  v8 = v1;
  v9 = (int)(v1 + 1);
  do
    v10 = *v8++;
  while ( v10 );
  v11 = this.baseclass_0._Mysize;
  v12 = (unsigned int)&v8[-v9];
  v13 = v12;
  v14 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v12 )
    v14 = v12;
  v15 = this.baseclass_0._Myres;
  v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v16 = &this;
  v17 = std::char_traits<char>::compare(v16->baseclass_0.___u0.baseclass_0.dummy, pcScriptMsgInx, v14);
  v18 = v17 == 0;
  if ( !v17 )
  {
    if ( v11 >= v13 )
      v19 = v11 != v13;
    else
      v19 = -1;
    v18 = v19 == 0;
  }
  v20 = v18;
  v27 = -1;
  if ( v15 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v20 )
  {
    v2 = i;
    v1 = pcScriptMsgInx;
    goto LABEL_24;
  }
  return pkFaceCutMsg;
}
// A85C00: using guessed type int __security_cookie;
// A95A00: using guessed type int ITableBase_FaceCutMsg_FaceCutMsgTab___ms_pkTable;

//----- (0043B5E0) --------------------------------------------------------
void __thiscall SteamCallback::_SteamCallback(SteamCallback *this)
{
  SteamCallback *v1; // esi@1
  bool v2; // zf@1

  v1 = this;
  v2 = (this->m_CallbackGameOverlayActivated.baseclass_0.m_nCallbackFlags & 1) == 0;
  this->m_CallbackGameOverlayActivated.baseclass_0.vfptr = (CCallbackBaseVtbl *)&CCallback<SteamCallback_GameOverlayActivated_t_0>::_vftable_;
  if ( !v2 )
    _SteamAPI_UnregisterCallback(&this->m_CallbackGameOverlayActivated);
  v2 = (v1->m_GetAuthSessionTicketResponse.baseclass_0.m_nCallbackFlags & 1) == 0;
  v1->m_GetAuthSessionTicketResponse.baseclass_0.vfptr = (CCallbackBaseVtbl *)&CCallback<SteamCallback_GetAuthSessionTicketResponse_t_0>::_vftable_;
  if ( !v2 )
    _SteamAPI_UnregisterCallback(v1);
}
// 976694: using guessed type int __cdecl _SteamAPI_UnregisterCallback(_DWORD);
// 980AD8: using guessed type int (__stdcall *CCallback_SteamCallback_GetAuthSessionTicketResponse_t_0____vftable_)(int pvParam, char __formal, int, int);
// 980AE8: using guessed type int (__stdcall *CCallback_SteamCallback_GameOverlayActivated_t_0____vftable_)(int pvParam, char __formal, int, int);

//----- (0043B620) --------------------------------------------------------
void __thiscall SteamCallback::SteamCallback(SteamCallback *this)
{
  SteamCallback *v1; // esi@1

  v1 = this;
  this->m_GetAuthSessionTicketResponse.baseclass_0.m_nCallbackFlags = 0;
  this->m_GetAuthSessionTicketResponse.baseclass_0.m_iCallback = 0;
  this->m_GetAuthSessionTicketResponse.baseclass_0.vfptr = (CCallbackBaseVtbl *)&CCallback<SteamCallback_GetAuthSessionTicketResponse_t_0>::_vftable_;
  v1->m_GetAuthSessionTicketResponse.m_pObj = v1;
  this->m_GetAuthSessionTicketResponse.m_Func = SteamCallback::OnGetAuthSessionTicketResponse;
  if ( SteamCallback::OnGetAuthSessionTicketResponse )
  {
    this->m_GetAuthSessionTicketResponse.m_pObj = this;
    this->m_GetAuthSessionTicketResponse.m_Func = SteamCallback::OnGetAuthSessionTicketResponse;
    _SteamAPI_RegisterCallback(this, 163);
  }
  v1->m_CallbackGameOverlayActivated.baseclass_0.m_nCallbackFlags = 0;
  v1->m_CallbackGameOverlayActivated.baseclass_0.m_iCallback = 0;
  v1->m_CallbackGameOverlayActivated.baseclass_0.vfptr = (CCallbackBaseVtbl *)&CCallback<SteamCallback_GameOverlayActivated_t_0>::_vftable_;
  v1->m_CallbackGameOverlayActivated.m_pObj = v1;
  v1->m_CallbackGameOverlayActivated.m_Func = SteamCallback::OnGameOverlayActivated;
  if ( SteamCallback::OnGameOverlayActivated )
  {
    v1->m_CallbackGameOverlayActivated.m_pObj = v1;
    v1->m_CallbackGameOverlayActivated.m_Func = SteamCallback::OnGameOverlayActivated;
    _SteamAPI_RegisterCallback(&v1->m_CallbackGameOverlayActivated, 331);
  }
}
// 976690: using guessed type int __cdecl _SteamAPI_RegisterCallback(_DWORD, _DWORD);
// 980AD8: using guessed type int (__stdcall *CCallback_SteamCallback_GetAuthSessionTicketResponse_t_0____vftable_)(int pvParam, char __formal, int, int);
// 980AE8: using guessed type int (__stdcall *CCallback_SteamCallback_GameOverlayActivated_t_0____vftable_)(int pvParam, char __formal, int, int);

//----- (0043B6A0) --------------------------------------------------------
void __thiscall CCallback<SteamCallback_GetAuthSessionTicketResponse_t_0>::Run(CCallback<SteamCallback,GameOverlayActivated_t,0> *this, void *pvParam)
{
  this->m_Func(this->m_pObj, (GameOverlayActivated_t *)pvParam);
}

//----- (0043B6B0) --------------------------------------------------------
void __thiscall CCallback<SteamCallback_GameOverlayActivated_t_0>::Run(CCallback<SteamCallback,GameOverlayActivated_t,0> *this, void *pvParam, bool __formal, unsigned __int64 a4)
{
  this->m_Func(this->m_pObj, (GameOverlayActivated_t *)pvParam);
}

//----- (0043B6D0) --------------------------------------------------------
void __cdecl SteamConfig::Running()
{
  SteamConfig::m_bRunning = 1;
}
// A95A09: using guessed type char SteamConfig__m_bRunning;

//----- (0043B6E0) --------------------------------------------------------
bool __cdecl SteamConfig::IsRunning()
{
  return SteamConfig::m_bRunning;
}
// A95A09: using guessed type char SteamConfig__m_bRunning;

//----- (0043B6F0) --------------------------------------------------------
const char *__cdecl SteamConfig::GetURL(unsigned __int64 uiSteamAccountID)
{
  void *v1; // eax@1
  ItemMallInfo *v2; // eax@2
  ItemMallInfo *v3; // esi@2
  char *v4; // eax@6
  const char *v5; // eax@7
  tagItemMallFileData *v6; // eax@8
  char *v7; // eax@12
  char *v8; // eax@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@14
  char *v10; // edi@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+Ch] [bp-E4h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > stID; // [sp+28h] [bp-C8h]@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > stHash; // [sp+44h] [bp-ACh]@12
  char acURL[128]; // [sp+60h] [bp-90h]@9
  unsigned int v15; // [sp+E0h] [bp-10h]@1
  int v16; // [sp+ECh] [bp-4h]@1
  int v17; // [sp+F0h] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v1 = operator new(0x2224u);
  v16 = 0;
  if ( v1 )
  {
    ItemMallInfo::ItemMallInfo((ItemMallInfo *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  v16 = -1;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = fs("%sSteamStartURL.hb");
  ItemMallInfo::LoadFromFile(v3, v4);
  if ( ItemMallInfo::GetTotalURLNum(v3, 0) == -1 )
  {
    v5 = 0;
  }
  else
  {
    v6 = ItemMallInfo::GetData(v3, 0, 0);
    if ( v6 )
      strncpy(acURL, v6->Path, 0x80u);
    if ( v3 )
    {
      ItemMallInfo::_ItemMallInfo(v3);
      operator delete(v3);
    }
    stID.baseclass_0._Myres = 15;
    stID.baseclass_0._Mysize = 0;
    stID.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v16 = 1;
    v7 = fs("%I64d");
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&stID, v7, strlen(v7));
    stHash.baseclass_0._Myres = 15;
    stHash.baseclass_0._Mysize = 0;
    stHash.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v16) = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&stHash, "qfgt3L9Li88lJMxo", 0x10u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&stHash, &stID, 0, 0xFFFFFFFFu);
    v8 = *(char **)&stHash;
    if ( stHash.baseclass_0._Myres < 0x10 )
      v8 = (char *)&stHash;
    v9 = CMD5Checksum::GetMD5(&result, v8, stHash.baseclass_0._Mysize);
    LOBYTE(v16) = 3;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&stHash, v9);
    LOBYTE(v16) = 2;
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
    v10 = fs(acURL);
    if ( stHash.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&stHash);
    stHash.baseclass_0._Myres = 15;
    stHash.baseclass_0._Mysize = 0;
    stHash.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( stID.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&stID);
    v5 = v10;
  }
  return v5;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0043B960) --------------------------------------------------------
bool __thiscall NiRenderer::Check_RenderTargetGroupActive(NiRenderer *this, const char *pcCallingFunction, bool bExpectedValue)
{
  bool result; // al@3

  if ( this->m_eFrameState == 1 || this->m_eOffScreenFrameState == 1 )
    result = this->m_bRenderTargetGroupActive == bExpectedValue;
  else
    result = 0;
  return result;
}

//----- (0043B9A0) --------------------------------------------------------
void __thiscall Studio::Studio(Studio *this)
{
  Studio *v1; // ebx@1
  NiVisibleArray *v2; // esi@1
  NiNode *v3; // esi@1
  void *v4; // eax@6
  int v5; // eax@7
  NiAVObject *v6; // esi@9
  NiCamera *v7; // eax@17
  NiAVObject *v8; // ecx@17
  NiAVObject *v9; // eax@17
  NiFrustum frust; // [sp+20h] [bp-48h]@17
  NiPoint3 kWorldPt; // [sp+3Ch] [bp-2Ch]@17
  NiPoint3 kWorldUp; // [sp+48h] [bp-20h]@17
  Studio *v13; // [sp+54h] [bp-14h]@1
  void *v14; // [sp+58h] [bp-10h]@6
  int v15; // [sp+64h] [bp-4h]@1

  v1 = this;
  v13 = this;
  this->m_spCamera.m_pObject = 0;
  v15 = 0;
  this->m_spRenderer.m_pObject = 0;
  this->m_spRenderedTexture.m_pObject = 0;
  this->m_spRenderTargetGroup.m_pObject = 0;
  this->m_spSubject.m_pObject = 0;
  this->m_bgColor.r = 0.0;
  v2 = &this->m_kVisible;
  this->m_bgColor.g = 0.0;
  this->m_bgColor.b = 0.0;
  this->m_bgColor.a = 0.0;
  this->m_kVisible.m_ppkArray = 0;
  this->m_kVisible.m_uiCurrentSize = 0;
  this->m_kVisible.m_uiAllocatedSize = 0;
  this->m_kVisible.m_uiGrowBy = 128;
  NiVisibleArray::SetAllocatedSize(&this->m_kVisible, 0x80u);
  LOBYTE(v15) = 5;
  NiCullingProcess::NiCullingProcess(&v1->m_kCuller, v2);
  v3 = v1->m_spSubject.m_pObject;
  LOBYTE(v15) = 6;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spSubject.m_pObject = 0;
  }
  v4 = operator new(0x128u);
  v14 = v4;
  LOBYTE(v15) = 7;
  if ( v4 )
  {
    NiCamera::NiCamera((NiCamera *)v4);
    v14 = (void *)v5;
  }
  else
  {
    v14 = 0;
    v5 = 0;
  }
  v6 = (NiAVObject *)v1->m_spCamera.m_pObject;
  LOBYTE(v15) = 6;
  if ( v6 != (NiAVObject *)v5 )
  {
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v5 = (int)v14;
    }
    v1->m_spCamera.m_pObject = (NiCamera *)v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)(v5 + 4));
  }
  v7 = v1->m_spCamera.m_pObject;
  kWorldUp.x = 0.0;
  kWorldUp.y = 0.0;
  v7->baseclass_0.m_kLocal.m_Translate.x = 0.0;
  kWorldUp.z = -100.0;
  v7->baseclass_0.m_kLocal.m_Translate.y = 0.0;
  v7->baseclass_0.m_kLocal.m_Translate.z = -100.0;
  NiAVObject::Update(&v1->m_spCamera.m_pObject->baseclass_0, 0.0, 1);
  v8 = (NiAVObject *)v1->m_spCamera.m_pObject;
  kWorldUp.x = 0.0;
  kWorldUp.y = -1.0;
  kWorldUp.z = 0.0;
  kWorldPt.x = 0.0;
  kWorldPt.y = 0.0;
  kWorldPt.z = 100.0;
  NiCamera::LookAtWorldPoint((NiCamera *)v8, &kWorldPt, &kWorldUp);
  v9 = (NiAVObject *)v1->m_spCamera.m_pObject;
  memcpy(&frust, &v1->m_spCamera.m_pObject->m_kViewFrustum, sizeof(frust));
  frust.m_fFar = 10000.0;
  frust.m_fNear = 0.0099999998;
  frust.m_fLeft = -15.5;
  frust.m_fTop = 15.5;
  frust.m_fRight = 16.5;
  frust.m_fBottom = -16.5;
  frust.m_bOrtho = 1;
  NiCamera::SetViewFrustum((NiCamera *)v9, &frust);
  NiAVObject::Update(&v1->m_spCamera.m_pObject->baseclass_0, 0.0, 1);
  v1->m_bgColor.r = 1.0;
  v1->m_bgColor.g = 0.0;
  v1->m_bgColor.b = 0.0;
  v1->m_bgColor.a = 1.0;
}

//----- (0043BBA0) --------------------------------------------------------
void __thiscall Studio::_Studio(Studio *this)
{
  Studio *v1; // esi@1
  NiNode *v2; // edi@1
  NiCamera *v3; // edi@6
  NiRenderer *v4; // edi@11
  NiNode *v5; // edi@16
  NiRenderTargetGroup *v6; // edi@20
  NiRenderedTexture *v7; // edi@24
  NiRenderer *v8; // edi@28
  NiCamera *v9; // esi@32

  v1 = this;
  v2 = this->m_spSubject.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spSubject.m_pObject = 0;
  }
  v3 = v1->m_spCamera.m_pObject;
  if ( v1->m_spCamera.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spCamera.m_pObject = 0;
  }
  v4 = v1->m_spRenderer.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spRenderer.m_pObject = 0;
  }
  NiCullingProcess::_NiCullingProcess(&v1->m_kCuller);
  operator delete(v1->m_kVisible.m_ppkArray);
  v5 = v1->m_spSubject.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spRenderTargetGroup.m_pObject;
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount) && v6 )
    v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spRenderedTexture.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spRenderer.m_pObject;
  if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.m_uiRefCount) && v8 )
    v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spCamera.m_pObject;
  if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  }
}

//----- (0043BD40) --------------------------------------------------------
void __thiscall Studio::ClickAndStuff(Studio *this, float fTime)
{
  Studio *v2; // esi@1
  NsPgToonExtraData *v3; // edi@5
  NiCamera *v4; // ecx@5
  NiD3DDefaultShader *v5; // ST0C_4@5
  NiAccumulator *v6; // ebx@5
  NiCamera *pkOldCTCamera; // [sp+0h] [bp-18h]@5
  NiRenderer *v8; // [sp+4h] [bp-14h]@5
  NiPointer<NiAccumulator> spOldSorter; // [sp+8h] [bp-10h]@5
  int v10; // [sp+14h] [bp-4h]@5

  v2 = this;
  if ( this->m_spRenderer.m_pObject
    && this->m_spSubject.m_pObject
    && this->m_spRenderedTexture.m_pObject
    && this->m_spCamera.m_pObject )
  {
    v3 = Engine3D::ms_spToonExtraData;
    v4 = Engine3D::ms_spToonExtraData->m_pCamera;
    Engine3D::ms_spToonExtraData->m_pCamera = v2->m_spCamera.m_pObject;
    pkOldCTCamera = v4;
    ((void (__stdcall *)(NiColorA *))v2->m_spRenderer.m_pObject->baseclass_0.baseclass_0.vfptr[19].__vecDelDtor)(&v2->m_bgColor);
    NiRenderer::BeginFrame(v2->m_spRenderer.m_pObject);
    NiRenderer::BeginUsingRenderTargetGroup(v2->m_spRenderer.m_pObject, v2->m_spRenderTargetGroup.m_pObject, 7u);
    spOldSorter.m_pObject = 0;
    v5 = (NiD3DDefaultShader *)v2->m_spRenderer.m_pObject->m_spAccum.m_pObject;
    v10 = 0;
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&spOldSorter, v5);
    v6 = v2->m_spRenderer.m_pObject->m_spAccum.m_pObject;
    v8 = v2->m_spRenderer.m_pObject;
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
      v8->m_spAccum.m_pObject = 0;
    }
    NiDrawScene(v2->m_spCamera.m_pObject, &v2->m_spSubject.m_pObject->baseclass_0, &v2->m_kCuller, 0);
    NiRenderer::SetSorter(v2->m_spRenderer.m_pObject, spOldSorter.m_pObject);
    NiRenderer::EndUsingRenderTargetGroup(v2->m_spRenderer.m_pObject);
    NiRenderer::EndFrame(v2->m_spRenderer.m_pObject);
    NiRenderer::DisplayFrame(v2->m_spRenderer.m_pObject);
    v3->m_pCamera = pkOldCTCamera;
    v10 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spOldSorter);
  }
}

//----- (0043BE70) --------------------------------------------------------
void __thiscall Studio::SetCamera(Studio *this, NiCamera *pkCamera)
{
  Studio *v2; // edi@1
  NiCamera *v3; // esi@1
  NiCamera *v4; // esi@6

  v2 = this;
  v3 = this->m_spCamera.m_pObject;
  if ( this->m_spCamera.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spCamera.m_pObject = 0;
  }
  v4 = v2->m_spCamera.m_pObject;
  if ( v2->m_spCamera.m_pObject != pkCamera )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v2->m_spCamera.m_pObject = pkCamera;
    if ( pkCamera )
      InterlockedIncrement((volatile LONG *)&pkCamera->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (0043BEE0) --------------------------------------------------------
Studio *__cdecl Studio::Create(NiRenderer *pRenderer, unsigned int uiDetail)
{
  void *v2; // eax@1
  int v3; // esi@1
  int v4; // eax@2
  int v5; // ebx@3
  Studio *result; // eax@11
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@12
  int v8; // eax@12
  NiRenderedTexture *v9; // eax@12
  int v10; // edi@12
  NiRenderedTexture *v11; // ebx@12
  int v12; // ecx@19
  NiRenderer *v13; // ST04_4@20
  Ni2DBuffer *v14; // eax@20
  NiRenderTargetGroup *v15; // eax@20
  int v16; // edi@20
  NiRenderTargetGroup *v17; // ebx@20
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-1Ch]@12
  void *v19; // [sp+Ch] [bp-10h]@1
  int v20; // [sp+18h] [bp-4h]@1

  v2 = operator new(0xC4u);
  v19 = v2;
  v3 = 0;
  v20 = 0;
  if ( v2 )
  {
    Studio::Studio((Studio *)v2);
    v3 = v4;
  }
  v5 = *(_DWORD *)(v3 + 4);
  v20 = -1;
  if ( (NiRenderer *)v5 != pRenderer )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    *(_DWORD *)(v3 + 4) = pRenderer;
    if ( pRenderer )
      InterlockedIncrement((volatile LONG *)&pRenderer->baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !*(_DWORD *)(v3 + 4) )
    goto LABEL_30;
  v7 = pRenderer->baseclass_0.baseclass_0.vfptr[26].__vecDelDtor;
  kPrefs.m_ePixelLayout = 6;
  kPrefs.m_eAlphaFmt = 3;
  kPrefs.m_eMipMapped = 2;
  v8 = ((int (__thiscall *)(NiRenderer *))v7)(pRenderer);
  (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 76))(v8, 0);
  kPrefs.m_ePixelLayout = 2;
  v9 = NiRenderedTexture::Create(1 << uiDetail, 1 << uiDetail, *(NiRenderer **)(v3 + 4), &kPrefs);
  v10 = *(_DWORD *)(v3 + 8);
  v11 = v9;
  if ( (NiRenderedTexture *)v10 != v9 )
  {
    if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
    *(_DWORD *)(v3 + 8) = v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v12 = *(_DWORD *)(v3 + 8);
  if ( v12 )
  {
    v13 = *(NiRenderer **)(v3 + 4);
    v14 = (Ni2DBuffer *)(*(int (**)(void))(*(_DWORD *)v12 + 68))();
    v15 = NiRenderTargetGroup::Create(v14, v13, 1, 1);
    v16 = *(_DWORD *)(v3 + 12);
    v17 = v15;
    if ( (NiRenderTargetGroup *)v16 != v15 )
    {
      if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
      *(_DWORD *)(v3 + 12) = v17;
      if ( v17 )
        InterlockedIncrement((volatile LONG *)&v17->baseclass_0.baseclass_0.m_uiRefCount);
    }
    result = (Studio *)v3;
  }
  else
  {
LABEL_30:
    Studio::_Studio((Studio *)v3);
    operator delete((void *)v3);
    result = 0;
  }
  return result;
}

//----- (0043C090) --------------------------------------------------------
void __thiscall NiPointer<NiProperty>::NiPointer<NiProperty>(NiPointer<NiProperty> *this, NiProperty *pObject)
{
  this->m_pObject = pObject;
  if ( pObject )
    InterlockedIncrement((volatile LONG *)&pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
}

//----- (0043C0B0) --------------------------------------------------------
bool __thiscall NiRenderer::BeginFrame(NiRenderer *this)
{
  NiRenderer *v1; // esi@1
  bool result; // al@2

  v1 = this;
  if ( this->m_eFrameState
    || this->m_eOffScreenFrameState
    || !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)() )
  {
    result = 0;
  }
  else
  {
    result = 1;
    v1->m_eFrameState = 1;
  }
  return result;
}

//----- (0043C0E0) --------------------------------------------------------
bool __thiscall NiRenderer::EndFrame(NiRenderer *this)
{
  NiRenderer *v1; // esi@1
  bool result; // al@2

  v1 = this;
  if ( this->m_eFrameState != 1
    || this->m_eOffScreenFrameState
    || !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)() )
  {
    result = 0;
  }
  else
  {
    v1->m_eFrameState = 2;
    result = 1;
  }
  return result;
}

//----- (0043C110) --------------------------------------------------------
bool __thiscall NiRenderer::DisplayFrame(NiRenderer *this)
{
  NiRenderer *v1; // esi@1
  bool result; // al@2

  v1 = this;
  if ( this->m_eFrameState != 2
    || this->m_eOffScreenFrameState
    || !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[68].__vecDelDtor)() )
  {
    result = 0;
  }
  else
  {
    result = 1;
    ++v1->m_uiFrameID;
    v1->m_eFrameState = 0;
  }
  return result;
}

//----- (0043C150) --------------------------------------------------------
bool __thiscall NiRenderer::BeginUsingRenderTargetGroup(NiRenderer *this, NiRenderTargetGroup *pkTarget, unsigned int uiClearMode)
{
  NiRenderer *v3; // esi@1
  bool result; // al@4
  bool v5; // bl@9
  bool v6; // zf@13

  v3 = this;
  if ( this->m_eFrameState != 1 && this->m_eOffScreenFrameState != 1 || this->m_bRenderTargetGroupActive )
  {
    result = 0;
  }
  else
  {
    if ( pkTarget )
    {
      EnterCriticalSection(&this->m_kRendererLock.m_kCriticalSection);
      v3->m_kRendererLock.m_ulThreadOwner = GetCurrentThreadId();
      ++v3->m_kRendererLock.m_uiLockCount;
      if ( v3->m_kRendererLock.m_uiLockCount == 1 )
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3);
      result = ((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.vfptr[72].__vecDelDtor)(
                 v3,
                 pkTarget,
                 uiClearMode);
      v5 = result;
      if ( result )
      {
        v3->m_bRenderTargetGroupActive = 1;
      }
      else
      {
        if ( v3->m_kRendererLock.m_uiLockCount == 1 )
          ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3);
        v6 = v3->m_kRendererLock.m_uiLockCount-- == 1;
        if ( v6 )
          v3->m_kRendererLock.m_ulThreadOwner = 0;
        LeaveCriticalSection(&v3->m_kRendererLock.m_kCriticalSection);
        result = v5;
      }
    }
    else
    {
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)this);
      result = 0;
    }
  }
  return result;
}

//----- (0043C220) --------------------------------------------------------
bool __thiscall NiRenderer::EndUsingRenderTargetGroup(NiRenderer *this)
{
  NiRenderer *v1; // esi@1
  bool result; // al@4
  bool v3; // zf@8

  v1 = this;
  if ( (this->m_eFrameState == 1 || this->m_eOffScreenFrameState == 1)
    && this->m_bRenderTargetGroupActive == 1
    && (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[73].__vecDelDtor)() )
  {
    if ( v1->m_kRendererLock.m_uiLockCount == 1 )
      ((void (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1);
    v3 = v1->m_kRendererLock.m_uiLockCount-- == 1;
    if ( v3 )
      v1->m_kRendererLock.m_ulThreadOwner = 0;
    LeaveCriticalSection(&v1->m_kRendererLock.m_kCriticalSection);
    v1->m_bRenderTargetGroupActive = 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0043C280) --------------------------------------------------------
void __thiscall NiRenderer::SetSorter(NiRenderer *this, NiAccumulator *pkAccum)
{
  NiRenderer *v2; // ebx@1
  NiAccumulator *v3; // esi@1

  v2 = this;
  v3 = this->m_spAccum.m_pObject;
  if ( v3 != pkAccum )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spAccum.m_pObject = pkAccum;
    if ( pkAccum )
      InterlockedIncrement((volatile LONG *)&pkAccum->baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (0043C2D0) --------------------------------------------------------
void __thiscall ItemSlotWin::ItemSlotWin(ItemSlotWin *this)
{
  ItemSlotWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemSlotWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemSlotWin::_vftable_;
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_pkSender = 0;
  v1->m_uiInvIndex = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  v1->m_pkFrameWork = 0;
  v1->m_bLock = 0;
}
// 980D84: using guessed type int (__stdcall *ItemSlotWin___vftable_)(int uiFlags);
// 980DA4: using guessed type int (__thiscall *ItemSlotWin___vftable_)(void *p, char);

//----- (0043C360) --------------------------------------------------------
void __thiscall ItemSlotWin::_ItemSlotWin(ItemSlotWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemSlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemSlotWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 980D84: using guessed type int (__stdcall *ItemSlotWin___vftable_)(int uiFlags);
// 980DA4: using guessed type int (__thiscall *ItemSlotWin___vftable_)(void *p, char);

//----- (0043C380) --------------------------------------------------------
bool __thiscall ItemSlotWin::Create(ItemSlotWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  ItemSlotWin *v6; // esi@1
  bool result; // al@1

  v6 = this;
  this->m_pkFrameWork = pkFrameWork;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v6->m_uiInvIndex = uiInvIndex;
    ItemIcon::ShowLotText(&v6->baseclass_0, 0);
    result = 1;
  }
  return result;
}

//----- (0043C3E0) --------------------------------------------------------
void __thiscall TermExtendWin::OnHelpLink(TermExtendWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "TermExtendWin");
}

//----- (0043C410) --------------------------------------------------------
ItemSlotWin *__thiscall TermExtendWin::GetInsertedOldSlot(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1
  ItemSlotWin *result; // eax@2

  v1 = this;
  if ( ItemIcon::GetItem(&this->m_apkSlotWin->baseclass_0) )
    result = v1->m_apkSlotWin;
  else
    result = 0;
  return result;
}

//----- (0043C430) --------------------------------------------------------
long double __usercall difftime<edx:eax>(int _Time1<ecx>, int _Time2<eax>)
{
  long double result; // qax@1

  _difftime32(_Time1, _Time2);
  return result;
}
// 43C430: function return type is incorrect (must be floating point)

//----- (0043C440) --------------------------------------------------------
int __usercall mktime<eax>(tm *_Tm<eax>)
{
  return _mktime32(_Tm);
}

//----- (0043C460) --------------------------------------------------------
void __thiscall ItemSlotWin::OnFirstHitWin(ItemSlotWin *this)
{
  ItemSlotWin *v1; // esi@1
  PgWin *v2; // eax@5
  unsigned int v3; // ecx@6
  ItemIcon *v4; // ecx@7
  Item *v5; // eax@9
  ItemInfoWin *v6; // ecx@10

  v1 = this;
  if ( !this->m_bLock )
  {
    if ( ItemIcon::GetItem(&this->baseclass_0) )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    else
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2 = v1->m_pkSender;
    if ( v2 )
    {
      v3 = v1->m_uiSenderInvIndex;
      if ( v3 < 0xC0 )
      {
        v4 = (ItemIcon *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
        if ( v4 )
        {
          if ( ItemIcon::GetItem(v4) )
          {
            v5 = ItemIcon::GetItem(&v1->baseclass_0);
            if ( v5 )
            {
              v6 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
              if ( v6 )
              {
                ItemInfoWin::SetItemInfo(v6, v5);
                PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              }
            }
          }
        }
      }
    }
  }
}

//----- (0043C4F0) --------------------------------------------------------
bool __thiscall ItemSlotWin::SetSenderInvSlotLock(ItemSlotWin *this, bool _bLock)
{
  PgWin *v2; // eax@1
  bool result; // al@2
  unsigned int v4; // ecx@3
  InvWin *v5; // ecx@4

  v2 = this->m_pkSender;
  if ( v2
    && (v4 = this->m_uiSenderInvIndex, v4 < 0xC0)
    && (v5 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v4 + 2])) != 0 )
  {
    InvWin::SetLock(v5, _bLock);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0043C530) --------------------------------------------------------
void __thiscall TermExtendWin::UpdateMeWin(TermExtendWin *this, float fCurTime)
{
  TermExtendWin *v2; // esi@1
  SpEffect *v3; // ecx@1
  int v4; // [sp+0h] [bp-8h]@5

  v2 = this;
  v3 = this->m_apkEffect;
  if ( v3->m_bLive )
    SpEffect::Update(v3, fCurTime);
  v4 = v2->m_bIsExtendItem && v2->m_bIsTermItem;
  ((void (__stdcall *)(int))v2->m_pkOKBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v4);
}

//----- (0043C580) --------------------------------------------------------
void __thiscall TermExtendWin::ExtendItemInvenLock(TermExtendWin *this, bool bLock)
{
  void *v2; // eax@1
  unsigned int v3; // ecx@2
  InvWin *v4; // ecx@3

  v2 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  if ( v2 )
  {
    v3 = this->m_uiExtendItemInvNum;
    if ( v3 < 0xC0 )
    {
      v4 = (InvWin *)*((_DWORD *)v2 + v3 + 87);
      if ( v4 )
        InvWin::SetLock(v4, bLock);
    }
  }
}

//----- (0043C5C0) --------------------------------------------------------
void __thiscall TermExtendWin::DirectMessage(TermExtendWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  TermExtendWin *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
    {
      LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.vfptr[37].NewItem) = 1;
      GameFrameWork::NcTermExtendReq(
        LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
        LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.y),
        LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.z));
      SpEffect::Start(
        (SpEffect *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_uiMessageNum,
        (NiNode *)v4->baseclass_0.baseclass_0.baseclass_0.___u2.m_iWidth);
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker = 0;
    }
  }
}

//----- (0043C620) --------------------------------------------------------
void __thiscall ItemSlotWin::DoAction(ItemSlotWin *this)
{
  ItemSlotWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0043C650) --------------------------------------------------------
void __thiscall ItemSlotWin::DoRAction(ItemSlotWin *this)
{
  ItemSlotWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0043C680) --------------------------------------------------------
void __thiscall ItemSlotWin::ReSetSlot(ItemSlotWin *this)
{
  ItemSlotWin *v1; // esi@1
  PgWin *v2; // eax@1
  unsigned int v3; // ecx@2
  InvWin *v4; // ecx@3

  v1 = this;
  v2 = this->m_pkSender;
  this->m_bLock = 0;
  if ( v2 )
  {
    v3 = this->m_uiSenderInvIndex;
    if ( v3 < 0xC0 )
    {
      v4 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
      if ( v4 )
        InvWin::SetLock(v4, 0);
    }
  }
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_pkSender = 0;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}

//----- (0043C6E0) --------------------------------------------------------
void __thiscall TermExtendWin::SetExtendInfo(TermExtendWin *this, ExtendItemInfo pExtendInfo)
{
  TermExtendWin *v2; // esi@1
  char *v3; // eax@3
  char *v4; // eax@3
  void *v5; // eax@3
  unsigned int v6; // ecx@4
  InvWin *v7; // eax@5

  v2 = this;
  if ( (_DWORD)pExtendInfo.pcItemIDX
    && TermExtendMatchGroupDescTable::GetGroupNameByExtendItemIDX(pExtendInfo.pcItemIDX) )
  {
    v2->m_uiExtendItemInvNum = pExtendInfo.uiInventoryNum;
    v2->m_ExtendGroup = pExtendInfo.pcItemIDX;
    v3 = TextData3::Get(0x7EF6C3CEu);
    v4 = fs(v3);
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkInfoDescText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)(
      v4,
      0);
    v5 = v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
    if ( v5 )
    {
      v6 = v2->m_uiExtendItemInvNum;
      if ( v6 < 0xC0 )
      {
        v7 = (InvWin *)*((_DWORD *)v5 + v6 + 87);
        if ( v7 )
          InvWin::SetLock(v7, 1);
      }
    }
    v2->m_bIsExtendItem = 1;
  }
}

//----- (0043C7A0) --------------------------------------------------------
void __thiscall TermExtendWin::OnApply(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1
  char *v2; // eax@1
  char *v3; // eax@1
  MsgBox *v4; // eax@1

  v1 = this;
  this->m_uiTermItemInvNum = LOBYTE(this->m_apkSlotWin->m_uiSenderInvIndex);
  v2 = TextData3::Get(0xC6071319u);
  v3 = fs(v2);
  v4 = MsgBox::Modal(MSGBOX_OKCANCEL, v3);
  v1->m_pkMsgBox = v4;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
}

//----- (0043C7F0) --------------------------------------------------------
void __thiscall TermExtendWin::TermExtendWin(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TermExtendWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TermExtendWin::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_pAttachEffect.m_pObject = 0;
  v1->m_kSuccessSound.baseclass_0._Mysize = 0;
  v1->m_kSuccessSound.baseclass_0._Myres = 15;
  v1->m_kSuccessSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_apkSlotWin = 0;
  v1->m_pkItemNameText = 0;
  v1->m_pkTermText = 0;
  v1->m_pkInfoDescText = 0;
  v1->m_ExtendGroup = 0;
  *(_WORD *)&v1->m_bIsExtendItem = 0;
  v1->m_pkOKBtn = 0;
  v1->m_pkMsgBox = 0;
  v1->m_apkEffect = 0;
  v1->m_uiExtendItemInvNum = 255;
  v1->m_uiTermItemInvNum = 255;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 981014: using guessed type int (__stdcall *TermExtendWin___vftable_)(int uiFlags);
// 981034: using guessed type int (__thiscall *TermExtendWin___vftable_)(void *p, char);

//----- (0043C8B0) --------------------------------------------------------
void __thiscall TermExtendWin::_TermExtendWin(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1
  SpEffect *v2; // edi@1
  NiNode *v3; // ebx@2
  NiNode *v4; // edi@9

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TermExtendWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TermExtendWin::_vftable_;
  v2 = this->m_apkEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
    v1->m_apkEffect = 0;
  }
  if ( v1->m_kSuccessSound.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_kSuccessSound.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_kSuccessSound.baseclass_0._Myres = 15;
  v1->m_kSuccessSound.baseclass_0._Mysize = 0;
  v1->m_kSuccessSound.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = v1->m_pAttachEffect.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 981014: using guessed type int (__stdcall *TermExtendWin___vftable_)(int uiFlags);
// 981034: using guessed type int (__thiscall *TermExtendWin___vftable_)(void *p, char);

//----- (0043C9F0) --------------------------------------------------------
void __thiscall TermExtendWin::SetTermItemInfo(TermExtendWin *this, Item *pItem)
{
  TermExtendWin *v2; // edi@1
  NiRefObjectVtbl *v3; // esi@2
  char *v4; // eax@2
  unsigned int v5; // eax@4
  int v6; // ebx@4
  int v7; // ST2C_4@4
  int v8; // ST28_4@4
  int v9; // ST34_4@4
  int v10; // ST24_4@4
  int v11; // eax@4
  int v12; // esi@4
  int v13; // eax@4
  long double v14; // st7@4
  long double v15; // st7@4
  void *(__thiscall *v16)(NiRefObject *, unsigned int); // eax@4
  TermExtendWin *v17; // [sp+1Ch] [bp-D0h]@1
  tm TimeRL; // [sp+20h] [bp-CCh]@4
  tm TimeRH; // [sp+44h] [bp-A8h]@4
  char acRemainigTime[128]; // [sp+68h] [bp-84h]@3
  unsigned int v21; // [sp+E8h] [bp-4h]@1
  int v22; // [sp+ECh] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v2 = this;
  v17 = this;
  if ( pItem )
  {
    ((void (__stdcall *)(char *))this->m_pkItemNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pItem->m_pkInfo->Name);
    acRemainigTime[0] = 0;
    memset(&acRemainigTime[1], 0, 0x7Fu);
    if ( ((int (__thiscall *)(Item *))pItem->baseclass_0.vfptr[11].__vecDelDtor)(pItem) )
    {
      v5 = *(_DWORD *)((int (__thiscall *)(Item *))pItem->baseclass_0.vfptr[11].__vecDelDtor)(pItem);
      v6 = (v5 >> 19) & 0x3F;
      v7 = (unsigned __int8)v5;
      v8 = (v5 >> 13) & 0x3F;
      v9 = v5 >> 25;
      v10 = (v5 >> 8) & 0x1F;
      sprintf(acRemainigTime, "%04d-%02d-%02d %02d:%02d");
      ((void (__cdecl *)(_DWORD))v2->m_pkTermText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acRemainigTime);
      memcpy(&TimeRL, &Timer::ms_dLastServerTime, sizeof(TimeRL));
      v11 = _mktime32(&TimeRL);
      TimeRH.tm_mon = v10 - 1;
      v12 = v11;
      TimeRH.tm_year = v7 + 100;
      TimeRH.tm_mday = v8;
      TimeRH.tm_hour = v6;
      TimeRH.tm_min = v9;
      TimeRH.tm_sec = 0;
      v13 = _mktime32(&TimeRH);
      v14 = _difftime32(v13, v12);
      v15 = (double)ChargedEffectTable::GetByInxName(v17->m_ExtendGroup, 0)->KeepTime_Hour + v14 / 3600.0;
      v16 = v17->m_pkTermText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
      if ( v15 <= 2160.0 )
        ((void (__stdcall *)(D3DXCOLOR *))v16)(&Color::m_kDxGreenColor);
      else
        ((void (__stdcall *)(D3DXCOLOR *))v16)(&Color::m_kDxRedColor);
    }
  }
  else
  {
    v3 = this->m_pkItemNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = TextData3::Get(0xD0F48A22u);
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkItemNameText, (unsigned int)v4);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTermText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980C13);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0043CC20) --------------------------------------------------------
bool __thiscall TermExtendWin::DropItemSlot(TermExtendWin *this, PgWinDrop *pkDrop)
{
  PgWinDrop *v2; // ebx@1
  void *v3; // edi@1
  TermExtendWin *v4; // esi@1
  bool result; // al@2
  Item *v6; // eax@3
  ItemSlotWin *v7; // ecx@5
  ItemSlotWin *v8; // ecx@7
  PgWin *v9; // eax@7
  unsigned int v10; // ecx@8
  InvWin *v11; // eax@9
  Item *pItem; // [sp+14h] [bp+8h]@3

  v2 = pkDrop;
  v3 = pkDrop->m_pkContents;
  v4 = this;
  if ( v3 && (v6 = (Item *)*((_DWORD *)v3 + 5), (pItem = v6) != 0) )
  {
    TermExtendWin::SetTermItemInfo(this, v6);
    if ( ItemIcon::GetItem(&v4->m_apkSlotWin->baseclass_0) )
    {
      v7 = v4->m_apkSlotWin;
      if ( v7 )
        ItemSlotWin::ReSetSlot(v7);
    }
    ItemSlotWin::ReSetSlot(v4->m_apkSlotWin);
    v4->m_apkSlotWin->m_uiSenderType = *((_DWORD *)v3 + 2);
    v4->m_apkSlotWin->m_uiSenderInvIndex = *((_DWORD *)v3 + 3);
    v4->m_apkSlotWin->m_pkSender = v2->m_pkSender;
    v8 = v4->m_apkSlotWin;
    v9 = v8->m_pkSender;
    if ( v9 )
    {
      v10 = v8->m_uiSenderInvIndex;
      if ( v10 < 0xC0 )
      {
        v11 = (InvWin *)LODWORD(v9[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v10 + 2]);
        if ( v11 )
          InvWin::SetLock(v11, 1);
      }
    }
    ItemIcon::SetItem(&v4->m_apkSlotWin->baseclass_0, pItem, 1);
    v4->m_bIsTermItem = 1;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0043CD00) --------------------------------------------------------
void __thiscall TermExtendWin::ResetAllData(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1

  v1 = this;
  ItemSlotWin::ReSetSlot(this->m_apkSlotWin);
  TermExtendWin::SetTermItemInfo(v1, 0);
  ((void (__stdcall *)(_DWORD))v1->m_pkInfoDescText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980C22);
  v1->m_uiExtendItemInvNum = 255;
  v1->m_uiTermItemInvNum = 255;
  *(_WORD *)&v1->m_bIsExtendItem = 0;
}

//----- (0043CD50) --------------------------------------------------------
bool __thiscall ItemSlotWin::EatDropInstance(ItemSlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  void *v5; // eax@5
  int v6; // esi@7
  PgWin *v7; // ebx@9
  TermExtendMatch *v8; // edi@9
  int v9; // eax@11
  GameFrameWork *v10; // esi@13
  char *v11; // eax@16
  unsigned int v12; // [sp-10h] [bp-14h]@13
  ItemSlotWin *v13; // [sp+0h] [bp-4h]@1

  v13 = this;
  if ( this->m_bLock )
    goto LABEL_20;
  if ( !*pkDrop )
    return 0;
  v5 = (*pkDrop)->m_pkContents;
  if ( *((_DWORD *)v5 + 2) || *((_DWORD *)v5 + 4) )
  {
LABEL_20:
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  v6 = *((_DWORD *)v5 + 5);
  if ( !v6 )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  v7 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v8 = TermExtendMatchTable::GetTermExtendMatchByItemIDX((char *)(*(_DWORD *)(v6 + 112) + 2));
  if ( !v8
    || (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 44))(v6)
    && (v9 = *(_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 44))(v6), !(_BYTE)v9)
    && !(v9 & 0xFFFFFF00) )
  {
    v10 = (GameFrameWork *)v13->m_pkFrameWork;
    v12 = 1374016199;
LABEL_16:
    v11 = TextData3::Get(v12);
    GameFrameWork::AddSysMsg(v10, v11);
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( strcmp(
         (const char *)v7[1].baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
         v8->ExtendItemIDX) )
  {
    v10 = (GameFrameWork *)v13->m_pkFrameWork;
    v12 = -1530081759;
    goto LABEL_16;
  }
  return TermExtendWin::DropItemSlot((TermExtendWin *)v7, *pkDrop);
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (0043CE70) --------------------------------------------------------
void __thiscall TermExtendWin::ShowUpgradeResult(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1
  void *v2; // ebx@1
  unsigned int v3; // eax@2
  ItemIcon *v4; // ecx@3
  Item *v5; // eax@4
  Item *v6; // edi@4
  ItemSlotWin *v7; // eax@5
  PgWin *v8; // ecx@5
  unsigned int v9; // eax@6
  InvWin *v10; // ecx@7
  GameFrameWork *v11; // edi@9
  char *v12; // eax@9
  char *v13; // eax@9
  unsigned int v14; // eax@11
  ItemIcon *v15; // eax@12

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  if ( v2 )
  {
    v3 = this->m_uiTermItemInvNum;
    if ( v3 < 0xC0 )
    {
      v4 = (ItemIcon *)*((_DWORD *)v2 + v3 + 87);
      if ( v4 )
      {
        v5 = ItemIcon::GetItem(v4);
        v6 = v5;
        if ( v5 )
        {
          ItemIcon::SetItem(&v1->m_apkSlotWin->baseclass_0, v5, 1);
          v1->m_apkSlotWin->m_bLock = 0;
          v1->m_apkSlotWin->m_uiSenderInvIndex = v1->m_uiTermItemInvNum;
          v7 = v1->m_apkSlotWin;
          v8 = v7->m_pkSender;
          if ( v8 )
          {
            v9 = v7->m_uiSenderInvIndex;
            if ( v9 < 0xC0 )
            {
              v10 = (InvWin *)LODWORD(v8[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v9 + 2]);
              if ( v10 )
                InvWin::SetLock(v10, 1);
            }
          }
          TermExtendWin::SetTermItemInfo(v1, v6);
          v11 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
          v12 = TextData3::Get(0xE2E8E424u);
          GameFrameWork::AddSysMsg(v11, v12);
          v13 = (char *)&v1->m_kSuccessSound;
          if ( v1->m_kSuccessSound.baseclass_0._Myres >= 0x10 )
            v13 = *(char **)v13;
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v13);
          v14 = v1->m_uiExtendItemInvNum;
          if ( v14 >= 0xC0 || (v15 = (ItemIcon *)*((_DWORD *)v2 + v14 + 87)) == 0 || !ItemIcon::GetItem(v15) )
            v1->m_bIsExtendItem = 0;
        }
      }
    }
  }
}

//----- (0043CF90) --------------------------------------------------------
void __thiscall TermExtendWin::OnSlotLClick(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1
  ItemSlotWin *v2; // edi@1
  Item *v3; // eax@2
  unsigned int v4; // ecx@3

  v1 = this;
  TermExtendWin::SetTermItemInfo(this, 0);
  v2 = v1->m_apkSlotWin;
  if ( v2 )
  {
    v3 = ItemIcon::GetItem(&v1->m_apkSlotWin->baseclass_0);
    if ( v3 )
    {
      v1->m_kDropContents.m_eSenderType = v2->m_uiSenderType;
      v1->m_kDropContents.m_eType = 0;
      v4 = v2->m_uiSenderInvIndex;
      v1->m_kDropContents.m_apvParam[0] = v3;
      v1->m_kDropContents.m_uiSenderIndex = v4;
      v1->m_kDropContents.m_apvParam[1] = 0;
      v1->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      v1->m_kDrop.m_pkSender = v2->m_pkSender;
      PgCursor::ms_pkDrop = (int)&v1->m_kDrop;
      ItemSlotWin::ReSetSlot(v2);
      v1->m_bIsTermItem = 0;
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0043D020) --------------------------------------------------------
void __thiscall TermExtendWin::OnCancel(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ecx@2
  InvWin *v4; // ecx@3

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  if ( v2 )
  {
    v3 = this->m_uiExtendItemInvNum;
    if ( v3 < 0xC0 )
    {
      v4 = (InvWin *)*((_DWORD *)v2 + v3 + 87);
      if ( v4 )
        InvWin::SetLock(v4, 0);
    }
  }
  ItemSlotWin::ReSetSlot(v1->m_apkSlotWin);
  TermExtendWin::SetTermItemInfo(v1, 0);
  ((void (__stdcall *)(_DWORD))v1->m_pkInfoDescText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980C22);
  v1->m_uiExtendItemInvNum = 255;
  v1->m_uiTermItemInvNum = 255;
  *(_WORD *)&v1->m_bIsExtendItem = 0;
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0043D0B0) --------------------------------------------------------
void __thiscall TermExtendWin::OnClose(TermExtendWin *this)
{
  TermExtendWin *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ecx@2
  InvWin *v4; // ecx@3
  NiNode *v5; // ST00_4@5
  SpEffect *v6; // ecx@5

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  if ( v2 )
  {
    v3 = this->m_uiExtendItemInvNum;
    if ( v3 < 0xC0 )
    {
      v4 = (InvWin *)*((_DWORD *)v2 + v3 + 87);
      if ( v4 )
        InvWin::SetLock(v4, 0);
    }
  }
  ItemSlotWin::ReSetSlot(v1->m_apkSlotWin);
  TermExtendWin::SetTermItemInfo(v1, 0);
  ((void (__stdcall *)(_DWORD))v1->m_pkInfoDescText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_980C22);
  v5 = v1->m_pAttachEffect.m_pObject;
  v6 = v1->m_apkEffect;
  v1->m_uiExtendItemInvNum = 255;
  v1->m_uiTermItemInvNum = 255;
  *(_WORD *)&v1->m_bIsExtendItem = 0;
  SpEffect::End(v6, v5);
}

//----- (0043D140) --------------------------------------------------------
ItemSlotWin *__cdecl ItemSlotWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  ItemSlotWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x1D8u);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    ItemSlotWin::ItemSlotWin((ItemSlotWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *, PgFrameWork *))(*(_DWORD *)v7 + 616))(
                          v7,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (ItemSlotWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (0043D280) --------------------------------------------------------
TermExtendWin *__cdecl TermExtendWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  TermExtendWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x200u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    TermExtendWin::TermExtendWin((TermExtendWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (TermExtendWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0043D3B0) --------------------------------------------------------
void __thiscall TermExtendWin::OnCommand(TermExtendWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@5

  switch ( wParam )
  {
    case 0xBu:
      TermExtendWin::OnSlotLClick(this);
      break;
    case 0xCu:
      TermExtendWin::OnApply(this);
      break;
    case 0xDu:
      TermExtendWin::OnCancel(this);
      break;
    case 0xEu:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "TermExtendWin");
      break;
    default:
      return;
  }
}

//----- (0043D420) --------------------------------------------------------
bool __thiscall TermExtendWin::Create(TermExtendWin *this, PgFrameWork *pkFrameWork)
{
  TermExtendWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  D3DXCOLOR v12; // ST18_16@13
  char *v13; // eax@13
  D3DXCOLOR v14; // ST18_16@13
  char *v15; // eax@13
  D3DXCOLOR v16; // ST18_16@13
  char *v17; // eax@13
  PgSprData *v18; // eax@13
  PgWinSpr *v19; // eax@13
  ItemSlotWin *v20; // eax@13
  D3DXCOLOR v21; // ST10_16@13
  char *v22; // eax@13
  D3DXCOLOR v23; // ST10_16@13
  D3DXCOLOR v24; // ST10_16@13
  PgWinSpr *v25; // edi@13
  char *v26; // eax@20
  NiNode *v27; // esi@21
  void *v28; // edi@26
  NiObject *v29; // eax@27
  NiRefObjectVtbl *v30; // eax@30
  NiNode *v31; // esi@32
  NiNode *v32; // esi@35
  const char *v33; // [sp+10h] [bp-60h]@11
  int *v34; // [sp+14h] [bp-5Ch]@11
  int *v35; // [sp+18h] [bp-58h]@11
  NiSourceTexture *v36; // [sp+1Ch] [bp-54h]@11
  UIUtil ui; // [sp+30h] [bp-40h]@10
  float v38; // [sp+44h] [bp-2Ch]@30
  float v39; // [sp+48h] [bp-28h]@30
  float v40; // [sp+4Ch] [bp-24h]@30
  PgWin *pkBtn; // [sp+50h] [bp-20h]@13
  NiPointer<NiNode> pkNiNodePtr; // [sp+54h] [bp-1Ch]@18
  int uiLeft; // [sp+58h] [bp-18h]@4
  int uiTop; // [sp+5Ch] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+60h] [bp-10h]@1
  int v46; // [sp+6Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v46 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\TermExtendWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "TermExtendWin", 0) )
  {
    v6 = spNode.m_pObject;
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v46) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v8, v9);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v36 = v10;
    v35 = &uiTop;
    v34 = &uiLeft;
    v33 = "Theme";
  }
  else
  {
    v36 = 0;
    v35 = &uiTop;
    v34 = &uiLeft;
    v33 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v33, v34, v35, v36);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "IconSlot", 0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  *(_QWORD *)&v12.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v12.b = qword_A746E8;
  v13 = TextData3::Get(0x3F8C848Eu);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v13, COERCE_D3DXCOLOR(v12.r), 5u);
  UIUtil::CreateBtn(&ui, 0xEu, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, 0);
  UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
  v2->m_pkOKBtn = UIUtil::CreateBtn(&ui, 0xCu, "OkNor", "OkOver", "OkClick", "OkDisable", 0);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = TextData3::Get(0xB3EE354Eu);
  UIUtil::CreateAttachedText(&ui, &v2->m_pkOKBtn->baseclass_0.baseclass_0, v15, COERCE_D3DXCOLOR(v14.r), 5u);
  pkBtn = (PgWin *)UIUtil::CreateBtn(&ui, 0xDu, "CancelNor", "CancelOver", "CancelClick", 0, 0);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v17 = TextData::Get(0x97A4A8DFu);
  UIUtil::CreateAttachedText(&ui, pkBtn, v17, COERCE_D3DXCOLOR(v16.r), 5u);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MainSlot", &uiLeft, &uiTop, 0);
  v19 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v19,
    1u);
  v20 = ItemSlotWin::CreateWin(
          uiLeft - v8 + 1,
          uiTop - v9 + 1,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          pkFrameWork);
  v2->m_apkSlotWin = v20;
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    1u);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(11);
  ((void (__stdcall *)(signed int))v2->m_apkSlotWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(10);
  v2->m_apkSlotWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
  IconWin::ShowFocus(&v2->m_apkSlotWin->baseclass_0.baseclass_0, 1);
  ItemSlotWin::ReSetSlot(v2->m_apkSlotWin);
  *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v22 = TextData3::Get(0xD0F48A22u);
  v2->m_pkItemNameText = UIUtil::CreateText(&ui, "NoticeText01", v22, 0, COERCE_D3DXCOLOR(v21.r), 5u, 0, 1);
  *(_QWORD *)&v23.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v23.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkTermText = UIUtil::CreateText(&ui, "NoticeText02", &byte_980C0B, 0, COERCE_D3DXCOLOR(v23.r), 5u, 0, 1);
  *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkInfoDescText = UIUtil::CreateText(&ui, "NoticeText03", &byte_980C12, 0, COERCE_D3DXCOLOR(v24.r), 0, 0, 0);
  v25 = PgWinSpr::CreateWin(0, 0, 1u, 1u, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkFrameWork = (PgFrameWork *)v25;
  if ( v25 )
    InterlockedIncrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  LOBYTE(v46) = 2;
  NiPointer<NiActorManager>::operator_(
    (NiPointer<NiPixelData> *)&v2->m_pAttachEffect,
    (NiPointer<NiPixelData> *)&pkFrameWork);
  LOBYTE(v46) = 1;
  if ( v25
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v25,
      1u);
  pkNiNodePtr.m_pObject = 0;
  LOBYTE(v46) = 3;
  if ( !Folder::m_bInit )
    Folder::Init();
  v26 = Folder::Merge(&Folder::m_acEffect, "TermExtend.nif");
  PgUtil::LoadNodeNifFile(v26, &pkNiNodePtr, 0);
  if ( pkNiNodePtr.m_pObject )
  {
    v28 = operator new(0x44u);
    pkFrameWork = (PgFrameWork *)v28;
    LOBYTE(v46) = 4;
    if ( v28 )
    {
      v29 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      SpEffect::SpEffect((SpEffect *)v28, (NiNode *)v29);
    }
    else
    {
      v29 = 0;
    }
    LOBYTE(v46) = 3;
    v2->m_apkEffect = (SpEffect *)v29;
    if ( v29 )
    {
      v30 = v29->baseclass_0.vfptr;
      v38 = 0.0;
      v39 = 0.0;
      *(float *)&v30[22].__vecDelDtor = 0.0;
      v40 = 1000.0;
      *(float *)&v30[23].__vecDelDtor = 0.0;
      *(float *)&v30[24].__vecDelDtor = 1000.0;
      v2->m_apkEffect->m_bClamp = 1;
    }
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v2->m_kSuccessSound,
      "MoverUpgrade_Start",
      0x12u);
    ((void (__thiscall *)(TermExtendWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
    LOBYTE(v46) = 1;
    if ( pkNiNodePtr.m_pObject )
    {
      v31 = pkNiNodePtr.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v31 )
          v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
      }
    }
    LOBYTE(v46) = 0;
    UIUtil::_UIUtil(&ui);
    v32 = spNode.m_pObject;
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v32 )
      v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v46) = 0;
    UIUtil::_UIUtil(&ui);
    v27 = spNode.m_pObject;
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v27 )
      v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0043DAC0) --------------------------------------------------------
void *__thiscall ItemSlotWin::_scalar_deleting_destructor_(ItemSlotWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemSlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemSlotWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 980D84: using guessed type int (__stdcall *ItemSlotWin___vftable_)(int uiFlags);
// 980DA4: using guessed type int (__thiscall *ItemSlotWin___vftable_)(void *p, char);

//----- (0043DB00) --------------------------------------------------------
TermExtendMatch *__cdecl TermExtendMatchTable::GetTermExtendMatchByItemIDX(char *pcItemIDX)
{
  char *v1; // ebx@1
  int v2; // eax@3
  unsigned int v3; // edi@4
  unsigned int v4; // esi@6
  TermExtendMatch *result; // eax@7

  v1 = pcItemIDX;
  if ( pcItemIDX && *pcItemIDX )
  {
    v2 = *(_DWORD *)(ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable + 56);
    if ( v2 )
      v3 = *(_DWORD *)(v2 + 40);
    else
      v3 = 0;
    v4 = 0;
    if ( v3 )
    {
      do
      {
        result = (TermExtendMatch *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable + 4),
                                      v4);
        if ( result )
        {
          if ( !strcmp(result->TermItemIDX, v1) )
            return result;
          v1 = pcItemIDX;
        }
        ++v4;
      }
      while ( v4 < v3 );
    }
    result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95A0C: using guessed type int ITableBase_TermExtendMatch_TermExtendMatchTable___ms_pkTable;

//----- (0043DB90) --------------------------------------------------------
char *__cdecl TermExtendMatchGroupDescTable::GetGroupNameByExtendItemIDX(char *pcItemIDX)
{
  char *v1; // ebx@1
  int v2; // eax@3
  unsigned int v3; // edi@4
  unsigned int v4; // esi@6
  void *v5; // eax@7

  v1 = pcItemIDX;
  if ( pcItemIDX && *pcItemIDX )
  {
    v2 = *(_DWORD *)(ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable + 56);
    if ( v2 )
      v3 = *(_DWORD *)(v2 + 40);
    else
      v3 = 0;
    v4 = 0;
    if ( !v3 )
      return 0;
    while ( 1 )
    {
      v5 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable + 4),
             v4);
      if ( v5 )
      {
        if ( !strcmp((const char *)v5, v1) )
          return (char *)v5 + 32;
        v1 = pcItemIDX;
      }
      ++v4;
      if ( v4 >= v3 )
        return 0;
    }
  }
  return 0;
}
// A95A10: using guessed type int ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable___ms_pkTable;

//----- (0043DC20) --------------------------------------------------------
ChargedItemEffect *__cdecl ChargedEffectTable::GetByInxName(char *pcInxName, bool isCharged)
{
  unsigned int v2; // edi@3
  ChargedItemEffect *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v2 = 0;
    if ( ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                                v2)
              + 2,
                pcInxName) )
      {
        ++v2;
        if ( v2 >= ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
          goto LABEL_6;
      }
      result = (ChargedItemEffect *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                                      v2);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (0043DCB0) --------------------------------------------------------
void *__thiscall TermExtendWin::_vector_deleting_destructor_(TermExtendWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  TermExtendWin::_TermExtendWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0043DCE0) --------------------------------------------------------
int __cdecl TextDataNodeComp(const void *p1, const void *p2)
{
  int result; // eax@2

  if ( *(_DWORD *)p1 >= *(_DWORD *)p2 )
    result = *(_DWORD *)p1 != *(_DWORD *)p2;
  else
    result = -1;
  return result;
}

//----- (0043DD10) --------------------------------------------------------
void __thiscall TextData::BeforeTerminate(TextData *this)
{
  operator delete__(TextData::ms_apkNode);
  TextData::ms_apkNode = 0;
}

//----- (0043DD30) --------------------------------------------------------
bool __thiscall TextData::DataProcess(TextData *this)
{
  bool result; // al@2
  int v2; // eax@3
  unsigned int v3; // ebx@4
  void *v4; // eax@5
  int v5; // edx@6
  int v6; // ecx@7
  unsigned int v7; // esi@11
  int v8; // edi@12
  void *v9; // eax@13
  int v10; // eax@16
  unsigned int v11; // eax@17

  if ( ITableBase<TextDataType_TextData>::ms_pkTable )
  {
    v2 = *(_DWORD *)(ITableBase<TextDataType_TextData>::ms_pkTable + 56);
    if ( v2 )
    {
      v3 = *(_DWORD *)(v2 + 40);
      if ( v3 )
      {
        v4 = operator new__(16 * v3);
        if ( v4 )
        {
          v5 = v3 - 1;
          if ( ((v3 - 1) & 0x80000000u) == 0 )
          {
            v6 = (int)((char *)v4 + 8);
            do
            {
              *(_DWORD *)(v6 - 4) = &byte_9788EB;
              *(_DWORD *)v6 = &byte_9788EB;
              *(_DWORD *)(v6 + 4) = &byte_9788EB;
              v6 += 16;
              --v5;
            }
            while ( v5 >= 0 );
          }
        }
        else
        {
          v4 = 0;
        }
        v7 = 0;
        TextData::ms_apkNode = v4;
        if ( v3 )
        {
          v8 = 0;
          do
          {
            v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<TextDataType_TextData>::ms_pkTable + 4), v7);
            if ( v9 )
            {
              *(_DWORD *)((char *)TextData::ms_apkNode + v8) = *(_DWORD *)v9;
              *(_DWORD *)((char *)TextData::ms_apkNode + v8 + 4) = (char *)v9 + 68;
              *(_DWORD *)((char *)TextData::ms_apkNode + v8 + 8) = (char *)v9 + 4;
              *(_DWORD *)((char *)TextData::ms_apkNode + v8 + 12) = (char *)v9 + 36;
            }
            ++v7;
            v8 += 16;
          }
          while ( v7 < v3 );
        }
        v10 = *(_DWORD *)(ITableBase<TextDataType_TextData>::ms_pkTable + 56);
        if ( v10 )
          v11 = *(_DWORD *)(v10 + 40);
        else
          v11 = 0;
        qsort(TextData::ms_apkNode, v11, 0x10u, TextDataNodeComp);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94350: using guessed type int ITableBase_TextDataType_TextData___ms_pkTable;

//----- (0043DE20) --------------------------------------------------------
int __cdecl TextData2NodeComp(const void *p1, const void *p2)
{
  int result; // eax@2

  if ( *(_DWORD *)p1 >= *(_DWORD *)p2 )
    result = *(_DWORD *)p1 != *(_DWORD *)p2;
  else
    result = -1;
  return result;
}

//----- (0043DE50) --------------------------------------------------------
void __thiscall TextData2::BeforeTerminate(TextData2 *this)
{
  operator delete__(TextData2::ms_apkNode);
  TextData2::ms_apkNode = 0;
}

//----- (0043DE70) --------------------------------------------------------
bool __thiscall TextData2::DataProcess(TextData2 *this)
{
  bool result; // al@2
  int v2; // eax@3
  unsigned int v3; // ebx@4
  void *v4; // eax@5
  int v5; // edx@6
  int v6; // ecx@7
  unsigned int v7; // esi@11
  int v8; // edi@12
  void *v9; // eax@13
  int v10; // eax@16
  unsigned int v11; // eax@17

  if ( ITableBase<TextDataType2_TextData2>::ms_pkTable )
  {
    v2 = *(_DWORD *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 56);
    if ( v2 )
    {
      v3 = *(_DWORD *)(v2 + 40);
      if ( v3 )
      {
        v4 = operator new__(16 * v3);
        if ( v4 )
        {
          v5 = v3 - 1;
          if ( ((v3 - 1) & 0x80000000u) == 0 )
          {
            v6 = (int)((char *)v4 + 8);
            do
            {
              *(_DWORD *)(v6 - 4) = &byte_9788EB;
              *(_DWORD *)v6 = &byte_9788EB;
              *(_DWORD *)(v6 + 4) = &byte_9788EB;
              v6 += 16;
              --v5;
            }
            while ( v5 >= 0 );
          }
        }
        else
        {
          v4 = 0;
        }
        v7 = 0;
        TextData2::ms_apkNode = v4;
        if ( v3 )
        {
          v8 = 0;
          do
          {
            v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 4), v7);
            if ( v9 )
            {
              *(_DWORD *)((char *)TextData2::ms_apkNode + v8) = *(_DWORD *)v9;
              *(_DWORD *)((char *)TextData2::ms_apkNode + v8 + 4) = (char *)v9 + 68;
              *(_DWORD *)((char *)TextData2::ms_apkNode + v8 + 8) = (char *)v9 + 4;
              *(_DWORD *)((char *)TextData2::ms_apkNode + v8 + 12) = (char *)v9 + 36;
            }
            ++v7;
            v8 += 16;
          }
          while ( v7 < v3 );
        }
        v10 = *(_DWORD *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 56);
        if ( v10 )
          v11 = *(_DWORD *)(v10 + 40);
        else
          v11 = 0;
        qsort(TextData2::ms_apkNode, v11, 0x10u, TextData2NodeComp);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94344: using guessed type int ITableBase_TextDataType2_TextData2___ms_pkTable;

//----- (0043DF70) --------------------------------------------------------
int __cdecl TextData3NodeComp(const void *p1, const void *p2)
{
  int result; // eax@2

  if ( *(_DWORD *)p1 >= *(_DWORD *)p2 )
    result = *(_DWORD *)p1 != *(_DWORD *)p2;
  else
    result = -1;
  return result;
}

//----- (0043DFA0) --------------------------------------------------------
void __thiscall TextData3::BeforeTerminate(TextData3 *this)
{
  operator delete__(TextData3::ms_apkNode);
  TextData3::ms_apkNode = 0;
}

//----- (0043DFC0) --------------------------------------------------------
bool __thiscall TextData3::DataProcess(TextData3 *this)
{
  bool result; // al@2
  int v2; // eax@3
  unsigned int v3; // ebx@4
  void *v4; // eax@5
  int v5; // edx@6
  int v6; // ecx@7
  unsigned int v7; // esi@11
  int v8; // edi@12
  void *v9; // eax@13
  int v10; // eax@16
  unsigned int v11; // eax@17

  if ( ITableBase<TextDataType3_TextData3>::ms_pkTable )
  {
    v2 = *(_DWORD *)(ITableBase<TextDataType3_TextData3>::ms_pkTable + 56);
    if ( v2 )
    {
      v3 = *(_DWORD *)(v2 + 40);
      if ( v3 )
      {
        v4 = operator new__(16 * v3);
        if ( v4 )
        {
          v5 = v3 - 1;
          if ( ((v3 - 1) & 0x80000000u) == 0 )
          {
            v6 = (int)((char *)v4 + 8);
            do
            {
              *(_DWORD *)(v6 - 4) = &byte_9788EB;
              *(_DWORD *)v6 = &byte_9788EB;
              *(_DWORD *)(v6 + 4) = &byte_9788EB;
              v6 += 16;
              --v5;
            }
            while ( v5 >= 0 );
          }
        }
        else
        {
          v4 = 0;
        }
        v7 = 0;
        TextData3::ms_apkNode = v4;
        if ( v3 )
        {
          v8 = 0;
          do
          {
            v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<TextDataType3_TextData3>::ms_pkTable + 4), v7);
            if ( v9 )
            {
              *(_DWORD *)((char *)TextData3::ms_apkNode + v8) = *(_DWORD *)v9;
              *(_DWORD *)((char *)TextData3::ms_apkNode + v8 + 4) = (char *)v9 + 68;
              *(_DWORD *)((char *)TextData3::ms_apkNode + v8 + 8) = (char *)v9 + 4;
              *(_DWORD *)((char *)TextData3::ms_apkNode + v8 + 12) = (char *)v9 + 36;
            }
            ++v7;
            v8 += 16;
          }
          while ( v7 < v3 );
        }
        v10 = *(_DWORD *)(ITableBase<TextDataType3_TextData3>::ms_pkTable + 56);
        if ( v10 )
          v11 = *(_DWORD *)(v10 + 40);
        else
          v11 = 0;
        qsort(TextData3::ms_apkNode, v11, 0x10u, TextData3NodeComp);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94340: using guessed type int ITableBase_TextDataType3_TextData3___ms_pkTable;

//----- (0043E0B0) --------------------------------------------------------
bool __thiscall ProcessingString::IsRemovableCharacter(ProcessingString *this, char ch)
{
  char *v2; // ecx@2
  char v3; // al@2
  bool result; // al@4

  if ( bFilterTableInited )
  {
    result = acRemoveFilter[ch];
  }
  else
  {
    v2 = "`~!@#$^&*()_+|-=\\[]{};':\",.<>/?";
    v3 = 96;
    do
    {
      ++v2;
      acRemoveFilter[v3] = 1;
      v3 = *v2;
    }
    while ( *v2 );
    result = acRemoveFilter[ch];
    bFilterTableInited = 1;
  }
  return result;
}

//----- (0043E110) --------------------------------------------------------
void __thiscall ProcessingString::ProcessingString(ProcessingString *this)
{
  this->m_acSource[0] = 0;
}

//----- (0043E120) --------------------------------------------------------
void __thiscall TextFilter::_TextFilter(TextFilter *this)
{
  void *v1; // ST00_4@1

  v1 = this->m_pcKeyStr;
  this->vfptr = (TextFilterVtbl *)&TextFilter::_vftable_;
  operator delete__(v1);
}
// 98135C: using guessed type int (*TextFilter___vftable_)();

//----- (0043E140) --------------------------------------------------------
void __thiscall TextFilterReplace::_TextFilterReplace(TextFilterReplace *this)
{
  TextFilterReplace *v1; // esi@1
  void *v2; // ST04_4@1
  void *v3; // ST00_4@1

  v1 = this;
  v2 = this->m_pcAlternateStr;
  this->baseclass_0.vfptr = (TextFilterVtbl *)&TextFilterReplace::_vftable_;
  operator delete__(v2);
  v3 = v1->baseclass_0.m_pcKeyStr;
  v1->baseclass_0.vfptr = (TextFilterVtbl *)&TextFilter::_vftable_;
  operator delete__(v3);
}
// 98135C: using guessed type int (*TextFilter___vftable_)();
// 981368: using guessed type int (__stdcall *TextFilterReplace___vftable_)(int pkStr, int pcFindPos, int pcKey);

//----- (0043E170) --------------------------------------------------------
void __thiscall ProcessingString::Replace(ProcessingString *this, char *pcBasePos, char *pcKey, char *pcAlternate)
{
  ProcessingString *v4; // ebx@1
  unsigned int v5; // edi@2
  char *v6; // esi@5
  char *v7; // edi@5
  int v8; // ebx@5
  int v9; // ebx@5
  char *v10; // eax@5
  char *v11; // edx@5
  char v12; // cl@6
  int v13; // edi@7
  char v14; // cl@15
  char *i; // eax@15
  int v16; // ecx@17
  char v17; // dl@17
  int v18; // eax@17
  char *v19; // esi@18
  char *j; // eax@21
  const char *v21; // [sp-10h] [bp-30h]@10
  const char *v22; // [sp-Ch] [bp-2Ch]@10
  unsigned int v23; // [sp-8h] [bp-28h]@10
  int v24; // [sp+8h] [bp-18h]@5
  int pcSourceKeyEnd; // [sp+Ch] [bp-14h]@5
  unsigned int iShiftCount; // [sp+10h] [bp-10h]@5
  const char *v27; // [sp+14h] [bp-Ch]@1
  const char *dst; // [sp+18h] [bp-8h]@5
  ProcessingString *v29; // [sp+1Ch] [bp-4h]@1

  v4 = this;
  v29 = this;
  v27 = this->m_acPreprocessed;
  if ( (unsigned int)pcBasePos < (unsigned int)this->m_acPreprocessed
    || (v5 = (unsigned int)this->m_apcMapToSource, (unsigned int)pcBasePos > (unsigned int)this->m_apcMapToSource)
    || (unsigned int)&pcBasePos[strlen(pcAlternate)] > v5
    || (unsigned int)&pcBasePos[strlen(pcKey)] > v5 )
    return;
  v6 = (char *)(pcBasePos - (char *)v4 - 512);
  v7 = v4->m_apcMapToSource[(_DWORD)v6];
  v24 = (int)&v4->m_apcMapToSource[(_DWORD)v6];
  dst = v4->m_apcMapToSource[(_DWORD)v6];
  v8 = *(_DWORD *)&v4->m_acPreprocessed[4 * (_DWORD)&v6[strlen(pcKey)] + 508];
  pcSourceKeyEnd = v8;
  iShiftCount = (unsigned int)&v7[strlen(pcAlternate) - v8 - 1];
  v9 = strlen(v27);
  v10 = pcKey;
  v11 = pcKey + 1;
  do
    v12 = *v10++;
  while ( v12 );
  v13 = v10 - v11;
  if ( v10 - v11 != v9 && _mbsncmp(dst, " ", 1u) )
  {
    if ( (signed int)&v6[v13] < v9 )
    {
      v23 = 1;
      v22 = " ";
      v21 = v29->m_apcMapToSource[(_DWORD)&v6[v13]];
      goto LABEL_13;
    }
    if ( (signed int)(v6 - 1) > 0 )
    {
      v23 = 1;
      v22 = " ";
      v21 = *(const char **)&v29->m_acPreprocessed[4 * (_DWORD)v6 + 508];
LABEL_13:
      if ( _mbsncmp(v21, v22, v23) )
        return;
      goto LABEL_14;
    }
  }
LABEL_14:
  if ( iShiftCount )
  {
    v14 = *(_BYTE *)(pcSourceKeyEnd + 1);
    for ( i = acTemp; v14; ++i )
    {
      *i = v14;
      v14 = i[pcSourceKeyEnd + 1 - (_DWORD)acTemp + 1];
    }
    v16 = v24;
    *i = 0;
    v17 = acTemp[0];
    v18 = iShiftCount + pcSourceKeyEnd + 1;
    if ( acTemp[0] )
    {
      v19 = &acTemp[-v18];
      do
      {
        *(_BYTE *)v18 = v17;
        *(_DWORD *)v16 += iShiftCount;
        v17 = v19[v18++ + 1];
        v16 += 4;
      }
      while ( v17 );
    }
    *(_BYTE *)v18 = 0;
  }
  for ( j = pcKey; *j; ++pcBasePos )
  {
    *pcBasePos = 32;
    ++j;
  }
  memcpy((char *)dst, pcAlternate, strlen(pcAlternate));
}

//----- (0043E360) --------------------------------------------------------
void __thiscall ProcessingString::ClearOddStuff(ProcessingString *this, char *string)
{
  int v2; // eax@1
  char v3; // cl@2
  int v4; // ebx@3
  int v5; // edi@3
  unsigned int v6; // esi@4
  const char *v7; // eax@4
  char v8; // bl@5
  int i; // [sp+Ch] [bp-CCh]@3
  char repl[96]; // [sp+14h] [bp-C4h]@1
  char look[94]; // [sp+74h] [bp-64h]@1
  unsigned int v12; // [sp+D4h] [bp-4h]@1
  int v13; // [sp+D8h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  memcpy(look, word_981298, 0x5Cu);
  *(_WORD *)&look[92] = word_981298[46];
  v2 = (int)look;
  memcpy(
    repl,
    "olbasbtbgalllllclsllasfsyecysloouqaaaaaaceeeeiiiidnoooooxouuuuydbaaaaaaceeeeiiiionoooooouuuuydy",
    sizeof(repl));
  do
    v3 = *(_BYTE *)v2++;
  while ( v3 );
  v4 = v2 - (_DWORD)&look[1];
  v5 = 0;
  for ( i = v2 - (_DWORD)&look[1]; v5 < v4; ++v5 )
  {
    v6 = look[v5];
    v7 = _mbschr(string, look[v5]);
    if ( v7 )
    {
      v8 = repl[v5];
      do
      {
        *v7 = v8;
        v7 = _mbschr(string, v6);
      }
      while ( v7 );
      v4 = i;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0043E420) --------------------------------------------------------
void __thiscall ProcessingString::Preprocess(ProcessingString *this, char *pcSource, bool bPreprecess)
{
  char *v3; // esi@1
  char *v4; // eax@2
  char v5; // cl@3
  char *v6; // eax@4
  char v7; // cl@5
  char *v8; // eax@6
  int v9; // ebx@6
  int v10; // edi@6
  int v11; // [sp+8h] [bp-210h]@6
  ProcessingString *thisa; // [sp+Ch] [bp-20Ch]@1
  int pcSrcCopy; // [sp+10h] [bp-208h]@6
  char acSrcCopy[512]; // [sp+14h] [bp-204h]@5
  unsigned int v15; // [sp+214h] [bp-4h]@1
  int v16; // [sp+218h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = (char *)this;
  thisa = this;
  if ( (signed int)strlen(pcSource) < 512 )
  {
    v4 = pcSource;
    do
    {
      v5 = *v4;
      v4[v3 - pcSource] = *v4;
      ++v4;
    }
    while ( v5 );
    v6 = pcSource;
    do
    {
      v7 = *v6;
      v6[acSrcCopy - pcSource] = *v6;
      ++v6;
    }
    while ( v7 );
    pcSrcCopy = (int)acSrcCopy;
    v8 = v3 + 512;
    v11 = (int)(v3 + 512);
    v9 = (int)(v3 + 512);
    v10 = (int)(v3 + 1024);
    if ( *v3 )
    {
      do
      {
        if ( IsDBCSLeadByte(*v3) )
        {
          *(_WORD *)v9 = *(_WORD *)pcSrcCopy;
          *(_DWORD *)v10 = v3;
          *(_DWORD *)(v10 + 4) = v3 + 1;
          v9 += 2;
          v10 += 8;
          v3 += 2;
          pcSrcCopy += 2;
        }
        else
        {
          if ( !bPreprecess || !ProcessingString::IsRemovableCharacter(thisa, *v3) )
          {
            *(_BYTE *)v9 = *(_BYTE *)pcSrcCopy;
            *(_DWORD *)v10 = v3;
            ++v9;
            v10 += 4;
          }
          ++v3;
          ++pcSrcCopy;
        }
      }
      while ( *v3 );
      v8 = (char *)v11;
    }
    *(_BYTE *)v9 = 0;
    _mbsupr(v8);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0043E540) --------------------------------------------------------
void __thiscall TextFilter::TextFilter(TextFilter *this, char *pcKey)
{
  TextFilter *v2; // edi@1
  char *v3; // eax@3
  char v4; // cl@4
  void *v5; // eax@5
  char *v6; // ecx@5
  void *v7; // edx@5
  char v8; // al@6

  v2 = this;
  this->vfptr = (TextFilterVtbl *)&TextFilter::_vftable_;
  if ( pcKey )
  {
    v3 = pcKey;
    do
      v4 = *v3++;
    while ( v4 );
    v5 = operator new__(v3 - (pcKey + 1) + 1);
    v2->m_pcKeyStr = (char *)v5;
    v6 = pcKey;
    v7 = v5;
    do
    {
      v8 = *v6;
      *(_BYTE *)v7 = *v6++;
      v7 = (char *)v7 + 1;
    }
    while ( v8 );
    _mbsupr(v2->m_pcKeyStr);
  }
  else
  {
    this->m_pcKeyStr = 0;
  }
}
// 98135C: using guessed type int (*TextFilter___vftable_)();

//----- (0043E5A0) --------------------------------------------------------
void __thiscall TextFilter::Filter(TextFilter *this, ProcessingString *pkStr)
{
  TextFilter *v2; // edi@1
  char *v3; // edx@1
  char *v4; // eax@2
  int v5; // esi@2
  char v6; // cl@3
  const char *i; // esi@5
  int PatLen; // [sp+4h] [bp-4h]@4

  v2 = this;
  v3 = this->m_pcKeyStr;
  if ( v3 )
  {
    v4 = this->m_pcKeyStr;
    v5 = (int)(v3 + 1);
    do
      v6 = *v4++;
    while ( v6 );
    PatLen = (int)&v4[-v5];
    if ( (signed int)&v4[-v5] >= 1 )
    {
      for ( i = _mbsstr(pkStr->m_acPreprocessed, v3); i; i = _mbsstr(&i[PatLen], v2->m_pcKeyStr) )
        v2->vfptr->DoJob(v2, pkStr, (char *)i, v2->m_pcKeyStr);
    }
  }
}

//----- (0043E610) --------------------------------------------------------
void __thiscall TextFilterReplace::TextFilterReplace(TextFilterReplace *this, char *pcKey, char *pcAlternate)
{
  TextFilterReplace *v3; // esi@1
  char *v4; // eax@3
  char v5; // cl@4
  void *v6; // eax@5
  char *v7; // ecx@5
  void *v8; // edx@5
  char v9; // al@6

  v3 = this;
  TextFilter::TextFilter(&this->baseclass_0, pcKey);
  v3->baseclass_0.vfptr = (TextFilterVtbl *)&TextFilterReplace::_vftable_;
  if ( pcAlternate )
  {
    v4 = pcAlternate;
    do
      v5 = *v4++;
    while ( v5 );
    v6 = operator new__(v4 - (pcAlternate + 1) + 1);
    v3->m_pcAlternateStr = (char *)v6;
    v7 = pcAlternate;
    v8 = v6;
    do
    {
      v9 = *v7;
      *(_BYTE *)v8 = *v7++;
      v8 = (char *)v8 + 1;
    }
    while ( v9 );
  }
  else
  {
    v3->m_pcAlternateStr = 0;
  }
}
// 981368: using guessed type int (__stdcall *TextFilterReplace___vftable_)(int pkStr, int pcFindPos, int pcKey);

//----- (0043E6A0) --------------------------------------------------------
void __thiscall TextFilterReplace::DoJob(TextFilterReplace *this, ProcessingString *pkStr, char *pcFindPos, char *pcKey)
{
  ProcessingString::Replace(pkStr, pcFindPos, pcKey, this->m_pcAlternateStr);
}

//----- (0043E6C0) --------------------------------------------------------
void __thiscall TextFilterSet::Terminate(TextFilterSet *this)
{
  TextFilterSet *v1; // esi@1
  NiTListItem<TextFilter *> *v2; // eax@2
  NiTListItem<TextFilter *> *v3; // ecx@2
  TextFilter *v4; // edi@5

  v1 = this;
  while ( *(_DWORD *)&v1->m_kTextFilterList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v2 = v1->m_kTextFilterList.baseclass_0.baseclass_0.m_pkTail;
    v3 = v2->m_pkPrev;
    v1->m_kTextFilterList.baseclass_0.baseclass_0.m_pkTail = v3;
    if ( v3 )
      v3->m_pkNext = 0;
    else
      v1->m_kTextFilterList.baseclass_0.baseclass_0.m_pkHead = 0;
    v4 = v2->m_element;
    v1->m_kTextFilterList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<TextFilter *>,TextFilter *> *)v1,
      v2);
    --*(_DWORD *)&v1->m_kTextFilterList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    if ( v4 )
      v4->vfptr->__vecDelDtor(v4, 1u);
  }
}

//----- (0043E720) --------------------------------------------------------
char *__thiscall TextFilterSet::Filter(TextFilterSet *this, char *pcSourceStr, bool bPreprecess)
{
  TextFilterSet *v3; // esi@1
  ProcessingString *v4; // edi@1
  NiTListItem<TextFilter *> *v5; // esi@1
  TextFilter *v6; // ecx@2

  v3 = this;
  v4 = &this->m_kPrcStr;
  ProcessingString::Preprocess(&this->m_kPrcStr, pcSourceStr, bPreprecess);
  v5 = v3->m_kTextFilterList.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5->m_element;
    v5 = v5->m_pkNext;
    TextFilter::Filter(v6, v4);
  }
  return (char *)v4;
}

//----- (0043E760) --------------------------------------------------------
void __thiscall TextFilterSet::AddFilter(TextFilterSet *this, TextFilter *pkFilter)
{
  TextFilterSet *v2; // esi@1
  int v3; // eax@1
  NiTListItem<TextFilter *> *v4; // ecx@1

  v2 = this;
  v3 = ((int (*)(void))this->m_kTextFilterList.baseclass_0.baseclass_0.vfptr->NewItem)();
  *(_DWORD *)(v3 + 8) = pkFilter;
  *(_DWORD *)v3 = 0;
  *(_DWORD *)(v3 + 4) = v2->m_kTextFilterList.baseclass_0.baseclass_0.m_pkTail;
  v4 = v2->m_kTextFilterList.baseclass_0.baseclass_0.m_pkTail;
  if ( v4 )
  {
    v4->m_pkNext = (NiTListItem<TextFilter *> *)v3;
    ++*(_DWORD *)&v2->m_kTextFilterList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v2->m_kTextFilterList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<TextFilter *> *)v3;
  }
  else
  {
    ++*(_DWORD *)&v2->m_kTextFilterList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v2->m_kTextFilterList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<TextFilter *> *)v3;
    v2->m_kTextFilterList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<TextFilter *> *)v3;
  }
}

//----- (0043E7B0) --------------------------------------------------------
void __thiscall TextFilterSet::_TextFilterSet(TextFilterSet *this)
{
  TextFilterSet *v1; // edi@1
  NiTListItem<TextFilter *> *v2; // esi@1
  NiTListItem<TextFilter *> *v3; // ST00_4@2

  v1 = this;
  TextFilterSet::Terminate(this);
  v1->m_kTextFilterList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTPointerListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
  v2 = v1->m_kTextFilterList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->m_kTextFilterList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<TextFilter *>,TextFilter *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->m_kTextFilterList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kTextFilterList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kTextFilterList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kTextFilterList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
}
// 981374: using guessed type int (__thiscall *NiTListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);
// 981384: using guessed type int (__thiscall *NiTPointerListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);

//----- (0043E840) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<TextFilter__>_TextFilter__>::_NiTListBase<DFALL<TextFilter__>_TextFilter__>(NiTListBase<DFALL<TextFilter *>,TextFilter *> *this)
{
  this->vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
}
// 981374: using guessed type int (__thiscall *NiTListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);

//----- (0043E850) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<TextFilter__>_TextFilter__>::_scalar_deleting_destructor_(NiTListBase<DFALL<TextFilter *>,TextFilter *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 981374: using guessed type int (__thiscall *NiTListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);

//----- (0043E880) --------------------------------------------------------
void *__thiscall TextFilter::_scalar_deleting_destructor_(TextFilter *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pcKeyStr;
  this->vfptr = (TextFilterVtbl *)&TextFilter::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98135C: using guessed type int (*TextFilter___vftable_)();

//----- (0043E8B0) --------------------------------------------------------
void *__thiscall TextFilterReplace::_scalar_deleting_destructor_(TextFilterReplace *this, unsigned int a2)
{
  TextFilterReplace *v2; // esi@1
  void *v3; // ST04_4@1
  void *v4; // ST00_4@1

  v2 = this;
  v3 = this->m_pcAlternateStr;
  this->baseclass_0.vfptr = (TextFilterVtbl *)&TextFilterReplace::_vftable_;
  operator delete__(v3);
  v4 = v2->baseclass_0.m_pcKeyStr;
  v2->baseclass_0.vfptr = (TextFilterVtbl *)&TextFilter::_vftable_;
  operator delete__(v4);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98135C: using guessed type int (*TextFilter___vftable_)();
// 981368: using guessed type int (__stdcall *TextFilterReplace___vftable_)(int pkStr, int pcFindPos, int pcKey);

//----- (0043E8F0) --------------------------------------------------------
void *__thiscall NiTList<TextFilter__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<TextFilter *>,TextFilter *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<TextFilter *> *v3; // esi@1
  NiTListItem<TextFilter *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTPointerListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981374: using guessed type int (__thiscall *NiTListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);
// 981384: using guessed type int (__thiscall *NiTPointerListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);

//----- (0043E980) --------------------------------------------------------
void __thiscall NiTList<TextFilter__>::_NiTList<TextFilter__>(NiTList<TextFilter *> *this)
{
  NiTList<TextFilter *> *v1; // edi@1
  NiTListItem<TextFilter *> *v2; // esi@1
  NiTListItem<TextFilter *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTPointerListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<TextFilter *>,TextFilter *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTListBase<DFALL<TextFilter__>_TextFilter__>::_vftable_;
}
// 981374: using guessed type int (__thiscall *NiTListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);
// 981384: using guessed type int (__thiscall *NiTPointerListBase_DFALL_TextFilter ___TextFilter _____vftable_)(void *p, char);

//----- (0043EA00) --------------------------------------------------------
void __userpurge TextFilterTable::FilterEmotion_::_2_::TextFilterEmotion::TextFilterEmotion(char *pcEmotionCmd<esi>, char *pcKey)
{
  char *v2; // eax@3
  char v3; // cl@4
  void *v4; // eax@5
  char *v5; // ecx@5
  void *v6; // edx@5
  char v7; // al@6
  char *pcKeya; // [sp+18h] [bp+Ch]@0

  TextFilter::TextFilter((TextFilter *)pcKey, pcKeya);
  *(_DWORD *)pcKey = &::::TextFilterEmotion::_vftable_;
  if ( pcEmotionCmd )
  {
    v2 = pcEmotionCmd;
    do
      v3 = *v2++;
    while ( v3 );
    v4 = operator new__(v2 - (pcEmotionCmd + 1) + 1);
    *((_DWORD *)pcKey + 2) = v4;
    v5 = pcEmotionCmd;
    v6 = v4;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6 = *v5++;
      v6 = (char *)v6 + 1;
    }
    while ( v7 );
  }
  else
  {
    *((_DWORD *)pcKey + 2) = 0;
  }
}
// 981414: using guessed type int (__stdcall *____TextFilterEmotion___vftable_)(int pkStr, int pcFindPos);

//----- (0043EAA0) --------------------------------------------------------
void __usercall TextFilterTable::FilterEmotion_::_2_::TextFilterEmotion::_TextFilterEmotion(int a1<esi>)
{
  void *v1; // ST00_4@1

  v1 = *(void **)(a1 + 8);
  *(_DWORD *)a1 = &::::TextFilterEmotion::_vftable_;
  operator delete__(v1);
  TextFilter::_TextFilter((TextFilter *)a1);
}
// 981414: using guessed type int (__stdcall *____TextFilterEmotion___vftable_)(int pkStr, int pcFindPos);

//----- (0043EAC0) --------------------------------------------------------
int __cdecl TextFilterTable::IsForbiddenGuildName(char *pcName)
{
  unsigned int v1; // eax@3

  return !pcName
      || !strcmp(pcName, (const char *)&unk_9813A2)
      || (v1 = strlen(pcName), *pcName == 32)
      || pcName[v1 - 1] == 32;
}

//----- (0043EB30) --------------------------------------------------------
void __thiscall TextFilterTable::FilterEmotion_::_2_::TextFilterEmotion::DoJob(ProcessingString *pkStr, char *pcFindPos, char *pcKey)
{
  char v3; // al@1
  char *v4; // eax@3
  PROTO_NC_ACT_EMOTICON_CMD kCmd; // [sp+1h] [bp-1h]@4

  v3 = g_pkMainChar->m_byMode;
  if ( v3 != 4 && v3 != 5 )
  {
    v4 = (char *)ActionViewTable::GetByInxName(*(char **)&pkStr->m_acSource[8]);
    if ( v4 )
    {
      kCmd.emoticonid = *v4;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x20u, &kCmd, 1);
    }
  }
}

//----- (0043EB80) --------------------------------------------------------
bool __cdecl TextFilterTable::LoadSlanderFilter()
{
  char *v0; // eax@3
  bool result; // al@3

  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = Folder::Merge(&Folder::m_acSystem, "SlanderFilter.shn");
  result = ITableBase<SlanderFilter_SlanderFilterTable>::Load(v0, 1);
  if ( result )
  {
    if ( ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable )
    {
      (**(void (***)(void))ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable)();
      if ( ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable )
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 8))(1);
      ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable = 0;
    }
    result = 1;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;
// A95D28: using guessed type int ITableBase_SlanderFilter_SlanderFilterTable___ms_pkTable;

//----- (0043EBE0) --------------------------------------------------------
char *__cdecl TextFilterTable::FilterSlander(char *pcSlander)
{
  char *v1; // eax@7
  void *v3; // eax@9
  TextFilter *v4; // eax@10
  unsigned int v5; // esi@12
  void *v6; // edi@13
  void *v7; // eax@13
  TextFilter *v8; // eax@14

  if ( !(_S3 & 1) )
  {
    _S3 |= 1u;
    unk_A95D54 = 0;
    unk_A95D4C = 0;
    unk_A95D50 = 0;
    s_kTextFilterSet.m_kTextFilterList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTList<TextFilter__>::_vftable_;
    ProcessingString::ProcessingString(&stru_A95D58);
    atexit(TextFilterTable::FilterSlander_::_2_::_dynamic_atexit_destructor_for__s_kTextFilterSet__);
  }
  if ( !s_bInit )
  {
    s_bInit = 1;
    if ( !Folder::m_bInit )
      Folder::Init();
    v1 = Folder::Merge(&Folder::m_acSystem, "SlanderFilter.shn");
    if ( !ITableBase<SlanderFilter_SlanderFilterTable>::Load(v1, 1) )
      return pcSlander;
    v3 = operator new(0xCu);
    if ( v3 )
      TextFilterReplace::TextFilterReplace((TextFilterReplace *)v3, "%s", "s");
    else
      v4 = 0;
    TextFilterSet::AddFilter(&s_kTextFilterSet, v4);
    v5 = 0;
    if ( ITableBase<SlanderFilter_SlanderFilterTable>::GetTotal() )
    {
      do
      {
        v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 4), v5);
        v7 = operator new(0xCu);
        if ( v7 )
          TextFilterReplace::TextFilterReplace((TextFilterReplace *)v7, (char *)v6, (char *)v6 + 32);
        else
          v8 = 0;
        TextFilterSet::AddFilter(&s_kTextFilterSet, v8);
        ++v5;
      }
      while ( v5 < ITableBase<SlanderFilter_SlanderFilterTable>::GetTotal() );
    }
    if ( ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable )
    {
      (**(void (***)(void))ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable)();
      if ( ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable )
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 8))(1);
      ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable = 0;
    }
  }
  return TextFilterSet::Filter(&s_kTextFilterSet, pcSlander, 1);
}
// 981450: using guessed type int (__thiscall *NiTList_TextFilter _____vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;
// A95D28: using guessed type int ITableBase_SlanderFilter_SlanderFilterTable___ms_pkTable;

//----- (0043EDA0) --------------------------------------------------------
#error "43EF0D: positive sp value has been found (funcsize=104)"

//----- (0043EF10) --------------------------------------------------------
bool __cdecl TextFilterTable::IsBadName(char *pcName)
{
  char *v1; // eax@4
  unsigned int v3; // esi@7
  void *v4; // eax@8
  char *v5; // eax@10
  char v6; // cl@11
  unsigned int v7; // esi@12
  void *v8; // eax@13
  int v9; // ecx@13

  if ( s_bInit_1 )
  {
LABEL_9:
    if ( !s_bBadNameLoaded )
      return 1;
    goto LABEL_10;
  }
  s_bInit_1 = 1;
  if ( !Folder::m_bInit )
    Folder::Init();
  v1 = Folder::Merge(&Folder::m_acSystem, "BadNameFilter.shn");
  if ( !ITableBase<BadNameFilter_BadNameFilterTable>::Load(v1, 1) )
  {
    s_bBadNameLoaded = 0;
    return 1;
  }
  s_bBadNameLoaded = 1;
  v3 = 0;
  if ( ITableBase<BadNameFilter_BadNameFilterTable>::GetTotal() )
  {
    do
    {
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable + 4), v3);
      _mbsupr((char *)v4);
      ++v3;
    }
    while ( v3 < ITableBase<BadNameFilter_BadNameFilterTable>::GetTotal() );
    goto LABEL_9;
  }
LABEL_10:
  v5 = pcName;
  do
  {
    v6 = *v5;
    v5[s_acCapitalizedName - pcName] = *v5;
    ++v5;
  }
  while ( v6 );
  _mbsupr(s_acCapitalizedName);
  v7 = 0;
  if ( ITableBase<BadNameFilter_BadNameFilterTable>::GetTotal() )
  {
    do
    {
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable + 4), v7);
      v9 = *((_DWORD *)v8 + 8);
      if ( v9 )
      {
        if ( v9 == 1 && _mbsstr(s_acCapitalizedName, (const char *)v8) )
          return 1;
      }
      else
      {
        if ( !_mbsicmp(pcName, (const char *)v8) )
          return 1;
      }
      ++v7;
    }
    while ( v7 < ITableBase<BadNameFilter_BadNameFilterTable>::GetTotal() );
  }
  return 0;
}
// A9541C: using guessed type char Folder__m_bInit;
// A95D30: using guessed type int ITableBase_BadNameFilter_BadNameFilterTable___ms_pkTable;

//----- (0043F030) --------------------------------------------------------
bool __cdecl TextFilterTable::IsBlockedID(char *pcID)
{
  unsigned int v1; // esi@1
  int v2; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@2
  const char *v4; // eax@4
  bool result; // al@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strTemp; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v1 = 15;
  strTemp.baseclass_0._Myres = 15;
  strTemp.baseclass_0._Mysize = 0;
  strTemp.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2 = **(_DWORD **)&TextFilterTable::ms_listBlockedID;
  v8 = 0;
  if ( v2 == *(_DWORD *)&TextFilterTable::ms_listBlockedID )
  {
LABEL_10:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strTemp;
      strTemp.baseclass_0._Mysize = 0;
      if ( v1 < 0x10 )
        v3 = &strTemp;
      v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &strTemp,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v2 + 8),
        0,
        0xFFFFFFFFu);
      v1 = strTemp.baseclass_0._Myres;
      v4 = *(const char **)&strTemp;
      if ( strTemp.baseclass_0._Myres < 0x10 )
        v4 = (const char *)&strTemp;
      if ( !strcmp(v4, pcID) )
        break;
      v2 = *(_DWORD *)v2;
      if ( v2 == *(_DWORD *)&TextFilterTable::ms_listBlockedID )
      {
        if ( strTemp.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&strTemp);
        goto LABEL_10;
      }
    }
    if ( strTemp.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strTemp);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0043F130) --------------------------------------------------------
void __cdecl TextFilterTable::DelFromBlockedID(char *pcTargetID)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+0h] [bp-2Ch]@2
  unsigned int v2; // [sp+1Ch] [bp-10h]@1
  int v3; // [sp+28h] [bp-4h]@2
  int v4; // [sp+2Ch] [bp+0h]@1

  v2 = (unsigned int)&v4 ^ __security_cookie;
  if ( TextFilterTable::IsBlockedID(pcTargetID) )
  {
    this.baseclass_0._Myres = 15;
    this.baseclass_0._Mysize = 0;
    this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, pcTargetID, strlen(pcTargetID));
    v3 = 0;
    std::list<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::remove(
      &TextFilterTable::ms_listBlockedID,
      &this);
    if ( this.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&this);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0043F1E0) --------------------------------------------------------
void __cdecl TextFilterTable::SaveBlockedID()
{
  char *v0; // eax@3
  _iobuf *v1; // edi@3
  int v2; // esi@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@8
  char *v5; // edx@10
  char v6; // cl@11
  unsigned int ntotal; // [sp+0h] [bp-50h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strTemp; // [sp+4h] [bp-4Ch]@5
  char temp[32]; // [sp+20h] [bp-30h]@8
  unsigned int v10; // [sp+40h] [bp-10h]@1
  int v11; // [sp+4Ch] [bp-4h]@5
  int v12; // [sp+50h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = fs("%s\\blist.shd");
  v1 = fopen(v0, "wb");
  if ( v1 )
  {
    ntotal = TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize;
    if ( (signed int)TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize > 0 )
    {
      fwrite(&ntotal, 4u, 1u, v1);
      strTemp.baseclass_0._Myres = 15;
      strTemp.baseclass_0._Mysize = 0;
      strTemp.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v2 = **(_DWORD **)&TextFilterTable::ms_listBlockedID;
      v11 = 0;
      if ( v2 != *(_DWORD *)&TextFilterTable::ms_listBlockedID )
      {
        do
        {
          v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strTemp;
          strTemp.baseclass_0._Mysize = 0;
          if ( strTemp.baseclass_0._Myres < 0x10 )
            v3 = &strTemp;
          v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &strTemp,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v2 + 8),
            0,
            0xFFFFFFFFu);
          *(_DWORD *)temp = 0;
          *(_DWORD *)&temp[4] = 0;
          *(_DWORD *)&temp[8] = 0;
          *(_DWORD *)&temp[12] = 0;
          *(_DWORD *)&temp[16] = 0;
          *(_DWORD *)&temp[20] = 0;
          *(_DWORD *)&temp[24] = 0;
          *(_DWORD *)&temp[28] = 0;
          v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strTemp;
          if ( strTemp.baseclass_0._Myres < 0x10 )
            v4 = &strTemp;
          v5 = (char *)(temp - (char *)v4);
          do
          {
            v6 = v4->baseclass_0.___u0.baseclass_0.dummy[0];
            v4->baseclass_0.___u0.baseclass_0.dummy[(_DWORD)v5] = v4->baseclass_0.___u0.baseclass_0.dummy[0];
            v4 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 1);
          }
          while ( v6 );
          fwrite(temp, 0x20u, 1u, v1);
          v2 = *(_DWORD *)v2;
        }
        while ( v2 != *(_DWORD *)&TextFilterTable::ms_listBlockedID );
        if ( strTemp.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&strTemp);
      }
    }
    fclose(v1);
  }
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::clear(&TextFilterTable::ms_listBlockedID);
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0043F340) --------------------------------------------------------
void __cdecl TextFilterTable::AddToBlockedID(char *pcTargetID)
{
  void *v1; // esi@3
  int v2; // esi@7
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v3; // ST04_4@7
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v4; // eax@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+0h] [bp-2Ch]@7
  unsigned int v6; // [sp+1Ch] [bp-10h]@1
  int v7; // [sp+28h] [bp-4h]@7
  int v8; // [sp+2Ch] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  if ( TextFilterTable::IsBlockedID(pcTargetID) != 1 )
  {
    if ( TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize >= 0x64 )
    {
      v1 = (void *)**(_DWORD **)&TextFilterTable::ms_listBlockedID;
      if ( **(_DWORD **)&TextFilterTable::ms_listBlockedID != *(_DWORD *)&TextFilterTable::ms_listBlockedID )
      {
        **((_DWORD **)v1 + 1) = *(_DWORD *)v1;
        *(_DWORD *)(*(_DWORD *)v1 + 4) = *((_DWORD *)v1 + 1);
        if ( *((_DWORD *)v1 + 7) >= 0x10u )
          operator delete(*((void **)v1 + 2));
        *((_DWORD *)v1 + 7) = 15;
        *((_DWORD *)v1 + 6) = 0;
        *((_BYTE *)v1 + 8) = 0;
        operator delete(v1);
        --TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize;
      }
    }
    this.baseclass_0._Myres = 15;
    this.baseclass_0._Mysize = 0;
    this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, pcTargetID, strlen(pcTargetID));
    v2 = *(_DWORD *)&TextFilterTable::ms_listBlockedID;
    v3 = *(std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node **)(*(_DWORD *)&TextFilterTable::ms_listBlockedID + 4);
    v7 = 0;
    v4 = std::_List_val<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Buynode(
           &TextFilterTable::ms_listBlockedID.baseclass_0,
           *(std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node **)&TextFilterTable::ms_listBlockedID,
           v3,
           &this);
    if ( 153391688 - TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize < 1 )
      std::_Xlength_error("list<T> too long");
    ++TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize;
    *(_DWORD *)(v2 + 4) = v4;
    v4->_Prev->_Next = v4;
    if ( this.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&this);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0043F470) --------------------------------------------------------
_iobuf *__cdecl TextFilterTable::LoadBlockedID()
{
  char *v0; // eax@3
  _iobuf *result; // eax@3
  _iobuf *v2; // edi@3
  int v3; // eax@7
  char v4; // cl@8
  unsigned int v5; // eax@9
  int v6; // esi@10
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v7; // ST14_4@10
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v8; // eax@10
  int i; // [sp+0h] [bp-54h]@6
  int totalcnt; // [sp+4h] [bp-50h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+8h] [bp-4Ch]@10
  char temp[32]; // [sp+24h] [bp-30h]@7
  unsigned int v13; // [sp+44h] [bp-10h]@1
  int v14; // [sp+50h] [bp-4h]@10
  int v15; // [sp+54h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::clear(&TextFilterTable::ms_listBlockedID);
  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = fs("%s\\blist.shd");
  result = fopen(v0, "rb");
  v2 = result;
  if ( result )
  {
    fseek(result, 0, 2);
    if ( ftell(v2) )
    {
      fseek(v2, 0, 0);
      fread(&totalcnt, 4u, 1u, v2);
      if ( totalcnt < 100 )
      {
        for ( i = 0; i < totalcnt; ++i )
        {
          *(_DWORD *)temp = 0;
          *(_DWORD *)&temp[4] = 0;
          *(_DWORD *)&temp[8] = 0;
          *(_DWORD *)&temp[12] = 0;
          *(_DWORD *)&temp[16] = 0;
          *(_DWORD *)&temp[20] = 0;
          *(_DWORD *)&temp[24] = 0;
          *(_DWORD *)&temp[28] = 0;
          fread(temp, 0x20u, 1u, v2);
          v3 = (int)temp;
          do
            v4 = *(_BYTE *)v3++;
          while ( v4 );
          v5 = v3 - (_DWORD)&temp[1];
          if ( v5 )
          {
            this.baseclass_0._Myres = 15;
            this.baseclass_0._Mysize = 0;
            this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, temp, v5);
            v6 = *(_DWORD *)&TextFilterTable::ms_listBlockedID;
            v7 = *(std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node **)(*(_DWORD *)&TextFilterTable::ms_listBlockedID + 4);
            v14 = 0;
            v8 = std::_List_val<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Buynode(
                   &TextFilterTable::ms_listBlockedID.baseclass_0,
                   *(std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node **)&TextFilterTable::ms_listBlockedID,
                   v7,
                   &this);
            if ( 153391688 - TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize < 1 )
              std::_Xlength_error("list<T> too long");
            ++TextFilterTable::ms_listBlockedID.baseclass_0.baseclass_0._Mysize;
            *(_DWORD *)(v6 + 4) = v8;
            v8->_Prev->_Next = v8;
            v14 = -1;
            if ( this.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&this);
          }
        }
      }
    }
    result = (_iobuf *)fclose(v2);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0043F610) --------------------------------------------------------
void *__thiscall ::::TextFilterEmotion::_scalar_deleting_destructor_(TextFilterTable::FilterEmotion::__l2::TextFilterEmotion *this, unsigned int a2)
{
  TextFilter *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = (TextFilter *)this;
  v3 = this->m_pcEmotionCmd;
  this->baseclass_0.vfptr = (TextFilterVtbl *)&::::TextFilterEmotion::_vftable_;
  operator delete__(v3);
  TextFilter::_TextFilter(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981414: using guessed type int (__stdcall *____TextFilterEmotion___vftable_)(int pkStr, int pcFindPos);

//----- (0043F650) --------------------------------------------------------
unsigned int __cdecl ITableBase<ActionViewInfo_ActionViewTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0043F670) --------------------------------------------------------
unsigned int __cdecl ITableBase<SlanderFilter_SlanderFilterTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A95D28: using guessed type int ITableBase_SlanderFilter_SlanderFilterTable___ms_pkTable;

//----- (0043F690) --------------------------------------------------------
unsigned int __cdecl ITableBase<BadNameFilter_BadNameFilterTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A95D30: using guessed type int ITableBase_BadNameFilter_BadNameFilterTable___ms_pkTable;

//----- (0043F6B0) --------------------------------------------------------
unsigned int __cdecl ITableBase<EmotionFilter_EmotionFilterTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A95D2C: using guessed type int ITableBase_EmotionFilter_EmotionFilterTable___ms_pkTable;

//----- (0043F6D0) --------------------------------------------------------
void *__thiscall SlanderFilterTable::_vector_deleting_destructor_(SlanderFilterTable *this, unsigned int a2)
{
  SlanderFilterTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<SlanderFilter,SlanderFilterTable>Vtbl *)&ITableBase<SlanderFilter_SlanderFilterTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981420: using guessed type int (__cdecl *ITableBase_SlanderFilter_SlanderFilterTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0043F750) --------------------------------------------------------
ActionViewInfo *__cdecl ActionViewTable::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  ActionViewInfo *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                                v1)
              + 1,
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
          goto LABEL_6;
      }
      result = (ActionViewInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                                   v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0043F7E0) --------------------------------------------------------
bool __cdecl std::operator__<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@1

  v2 = _Right;
  if ( _Right->baseclass_0._Myres >= 0x10 )
    v2 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           _Left,
           0,
           _Left->baseclass_0._Mysize,
           v2->baseclass_0.___u0.baseclass_0.dummy,
           _Right->baseclass_0._Mysize) == 0;
}

//----- (0043F810) --------------------------------------------------------
void __thiscall SlanderFilterTable::SlanderFilterTable(SlanderFilterTable *this)
{
  SlanderFilterTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<SlanderFilter,SlanderFilterTable>Vtbl *)&ITableBase<SlanderFilter_SlanderFilterTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_SlanderFilter_SlanderFilterTable_::ITableBase_SlanderFilter_SlanderFilterTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<SlanderFilter,SlanderFilterTable>Vtbl *)&SlanderFilterTable::_vftable_;
}
// 981420: using guessed type int (__cdecl *ITableBase_SlanderFilter_SlanderFilterTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 981460: using guessed type int (__cdecl *SlanderFilterTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A95D38: using guessed type int _local static guard_;

//----- (0043F850) --------------------------------------------------------
void __thiscall EmotionFilterTable::EmotionFilterTable(EmotionFilterTable *this)
{
  EmotionFilterTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<EmotionFilter,EmotionFilterTable>Vtbl *)&ITableBase<EmotionFilter_EmotionFilterTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_EmotionFilter_EmotionFilterTable_::ITableBase_EmotionFilter_EmotionFilterTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<EmotionFilter,EmotionFilterTable>Vtbl *)&EmotionFilterTable::_vftable_;
}
// 981440: using guessed type int (__cdecl *ITableBase_EmotionFilter_EmotionFilterTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 981470: using guessed type int (__cdecl *EmotionFilterTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A95D3C: using guessed type int _local static guard_;

//----- (0043F890) --------------------------------------------------------
void *__thiscall EmotionFilterTable::_scalar_deleting_destructor_(EmotionFilterTable *this, unsigned int a2)
{
  EmotionFilterTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<EmotionFilter,EmotionFilterTable>Vtbl *)&ITableBase<EmotionFilter_EmotionFilterTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981440: using guessed type int (__cdecl *ITableBase_EmotionFilter_EmotionFilterTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0043F910) --------------------------------------------------------
bool __cdecl ITableBase<SlanderFilter_SlanderFilterTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable;
  if ( !ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      SlanderFilterTable::SlanderFilterTable((SlanderFilterTable *)v2);
    else
      v2 = 0;
    ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<SlanderFilter_SlanderFilterTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95D28: using guessed type int ITableBase_SlanderFilter_SlanderFilterTable___ms_pkTable;

//----- (0043F9F0) --------------------------------------------------------
bool __cdecl ITableBase<EmotionFilter_EmotionFilterTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable;
  if ( !ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      EmotionFilterTable::EmotionFilterTable((EmotionFilterTable *)v2);
    else
      v2 = 0;
    ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<EmotionFilter_EmotionFilterTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95D2C: using guessed type int ITableBase_EmotionFilter_EmotionFilterTable___ms_pkTable;

//----- (0043FAD0) --------------------------------------------------------
void __thiscall BadNameFilterTable::BadNameFilterTable(BadNameFilterTable *this)
{
  BadNameFilterTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BadNameFilter,BadNameFilterTable>Vtbl *)&ITableBase<BadNameFilter_BadNameFilterTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BadNameFilter_BadNameFilterTable_::ITableBase_BadNameFilter_BadNameFilterTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BadNameFilter,BadNameFilterTable>Vtbl *)&BadNameFilterTable::_vftable_;
}
// 981430: using guessed type int (__cdecl *ITableBase_BadNameFilter_BadNameFilterTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 981480: using guessed type int (__cdecl *BadNameFilterTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A95D40: using guessed type int _local static guard_;

//----- (0043FB10) --------------------------------------------------------
void *__thiscall BadNameFilterTable::_scalar_deleting_destructor_(BadNameFilterTable *this, unsigned int a2)
{
  BadNameFilterTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BadNameFilter,BadNameFilterTable>Vtbl *)&ITableBase<BadNameFilter_BadNameFilterTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981430: using guessed type int (__cdecl *ITableBase_BadNameFilter_BadNameFilterTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0043FB90) --------------------------------------------------------
bool __cdecl ITableBase<BadNameFilter_BadNameFilterTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable;
  if ( !ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BadNameFilterTable::BadNameFilterTable((BadNameFilterTable *)v2);
    else
      v2 = 0;
    ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 24 )
  {
    v5 = acFn;
    v6 = ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BadNameFilter_BadNameFilterTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95D30: using guessed type int ITableBase_BadNameFilter_BadNameFilterTable___ms_pkTable;

//----- (0043FC70) --------------------------------------------------------
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::clear(std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this)
{
  std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v1; // edi@1
  int v2; // esi@1
  int v3; // ebx@2

  v1 = this;
  v2 = **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_DWORD *)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  this->baseclass_0.baseclass_0._Mysize = 0;
  if ( v2 != *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v3 = *(_DWORD *)v2;
      if ( *(_DWORD *)(v2 + 28) >= 0x10u )
        operator delete(*(void **)(v2 + 8));
      *(_DWORD *)(v2 + 28) = 15;
      *(_DWORD *)(v2 + 24) = 0;
      *(_BYTE *)(v2 + 8) = 0;
      operator delete((void *)v2);
      v2 = v3;
    }
    while ( v3 != *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (0043FCD0) --------------------------------------------------------
void __thiscall std::list<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::remove(std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val_arg)
{
  std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v2; // ebx@1
  int v3; // edi@1
  const char *v4; // edx@2
  const char *v5; // eax@2
  unsigned int v6; // esi@4
  unsigned int v7; // ecx@4
  int v8; // eax@11
  int v9; // esi@11
  int _Phead; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Val; // [sp+4h] [bp-2Ch]@1
  unsigned int v12; // [sp+20h] [bp-10h]@1
  int v13; // [sp+30h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, _Val_arg, 0, 0xFFFFFFFFu);
  v3 = **(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  _Phead = *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  while ( v3 != _Phead )
  {
    v4 = *(const char **)&_Val;
    v5 = (const char *)(v3 + 8);
    if ( _Val.baseclass_0._Myres < 0x10 )
      v4 = (const char *)&_Val;
    v6 = *(_DWORD *)(v3 + 24);
    v7 = _Val.baseclass_0._Mysize;
    if ( v6 < _Val.baseclass_0._Mysize )
      v7 = *(_DWORD *)(v3 + 24);
    if ( *(_DWORD *)(v3 + 28) >= 0x10u )
      v5 = *(const char **)v5;
    if ( std::char_traits<char>::compare(v5, v4, v7) || v6 < _Val.baseclass_0._Mysize || v6 != _Val.baseclass_0._Mysize )
    {
      v3 = *(_DWORD *)v3;
    }
    else
    {
      v8 = *(_DWORD *)(v3 + 4);
      v9 = v3;
      v3 = *(_DWORD *)v3;
      *(_DWORD *)v8 = v3;
      *(_DWORD *)(v3 + 4) = v8;
      if ( *(_DWORD *)(v9 + 28) >= 0x10u )
        operator delete(*(void **)(v9 + 8));
      *(_DWORD *)(v9 + 28) = 15;
      *(_DWORD *)(v9 + 24) = 0;
      *(_BYTE *)(v9 + 8) = 0;
      operator delete((void *)v9);
      --v2->baseclass_0.baseclass_0._Mysize;
    }
  }
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
}
// A85C00: using guessed type int __security_cookie;

//----- (0043FE00) --------------------------------------------------------
std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *__thiscall std::_List_val<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Buynode(std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *_Next, std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *_Prev, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val)
{
  void *v4; // esi@1
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v5; // edx@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // ecx@2
  int v8; // [sp-10h] [bp-30h]@1
  std::exception thisa; // [sp+0h] [bp-20h]@5
  void *p; // [sp+Ch] [bp-14h]@1
  int *v11; // [sp+10h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-4h]@2

  v11 = &v8;
  v4 = operator new(0x24u);
  p = v4;
  if ( !v4 )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  *(_DWORD *)v4 = _Next;
  v6 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 8);
  v12 = 0;
  *((_DWORD *)v4 + 1) = v5;
  _Next = (std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *)((char *)v4 + 8);
  _Prev = (std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *)((char *)v4 + 8);
  LOBYTE(v12) = 1;
  if ( v4 != (void *)-8 )
  {
    *((_DWORD *)v4 + 6) = 0;
    *((_DWORD *)v4 + 7) = 15;
    v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v6, _Val, 0, 0xFFFFFFFFu);
  }
  return (std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0043FEE0) --------------------------------------------------------
void __thiscall TextScreenWin::Start(TextScreenWin *this, const char *pcText)
{
  TextScreenWin *v2; // esi@1
  PgWinText *v3; // ecx@1
  bool v4; // sf@4
  double v5; // st7@4

  v2 = this;
  v3 = this->m_spText.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(const char *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  if ( v2->m_bIsCinematic )
  {
    v4 = ((PgWin::ms_uiScreenHeight - 180) & 0x80000000u) != 0;
    v5 = (double)(signed int)(PgWin::ms_uiScreenHeight - 180);
  }
  else
  {
    v5 = (double)(signed int)PgWin::ms_uiScreenHeight;
    v4 = (PgWin::ms_uiScreenHeight & 0x80000000u) != 0;
  }
  if ( v4 )
    v5 = v5 + 4294967300.0;
  v2->m_fTextYPos = v5;
  v2->m_bEnd = 0;
}

//----- (0043FF50) --------------------------------------------------------
void __thiscall TextScreenWin::UpdateMeWin(TextScreenWin *this, float fTime)
{
  TextScreenWin *v2; // esi@1
  PgWinText *v3; // edi@2
  double v4; // st7@6
  tagSIZE kSize; // [sp+4h] [bp-8h]@3

  v2 = this;
  if ( !this->m_bEnd )
  {
    v3 = this->m_spText.m_pObject;
    if ( v3 )
    {
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
        (NiRefObject *)v3,
        (signed int)this->m_fTextYPos);
      ((void (__stdcall *)(tagSIZE *))v2->m_spText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(&kSize);
    }
    if ( v2->m_bIsCinematic )
    {
      kSize.cy = PgWin::ms_uiScreenHeight - 180;
      v2->m_fTextYPos = (double)(PgWin::ms_uiScreenHeight - 180);
    }
    else
    {
      v4 = v2->m_fTextYPos;
      kSize.cy = -kSize.cy;
      if ( (double)kSize.cy >= v4 )
        v2->m_bEnd = 1;
      else
        v2->m_fTextYPos = v2->m_fTextYPos - 0.5;
    }
  }
}

//----- (00440010) --------------------------------------------------------
bool __thiscall TextScreenEffect::IsEnd(TextScreenEffect *this)
{
  TextScreenWin *v1; // eax@1
  bool result; // al@2

  v1 = this->m_spTextScreenWin.m_pObject;
  if ( v1 )
    result = v1->m_bEnd;
  else
    result = 0;
  return result;
}

//----- (00440030) --------------------------------------------------------
void __thiscall TextScreenEffect::UpdateTextScreen(TextScreenEffect *this, float fCurTime)
{
  TextScreenWin *v2; // eax@1

  v2 = this->m_spTextScreenWin.m_pObject;
  if ( v2 )
  {
    if ( v2->m_bEnd )
    {
      this->m_eSchedule = 0;
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0);
    }
  }
}

//----- (00440060) --------------------------------------------------------
void __thiscall TextScreenWin::TextScreenWin(TextScreenWin *this)
{
  TextScreenWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TextScreenWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TextScreenWin::_vftable_;
  v1->m_spText.m_pObject = 0;
  v1->m_fTextYPos = 0.0;
  *(_WORD *)&v1->m_bEnd = 0;
}
// 9814C8: using guessed type int (__stdcall *TextScreenWin___vftable_)(int uiFlags);
// 9814E4: using guessed type int (__thiscall *TextScreenWin___vftable_)(void *p, char);

//----- (004400A0) --------------------------------------------------------
void __thiscall TextScreenWin::_TextScreenWin(TextScreenWin *this)
{
  PgWin *v1; // esi@1
  PgWinText *v2; // edi@1

  v1 = (PgWin *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TextScreenWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TextScreenWin::_vftable_;
  v2 = this->m_spText.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWin::_PgWin(v1);
}
// 9814C8: using guessed type int (__stdcall *TextScreenWin___vftable_)(int uiFlags);
// 9814E4: using guessed type int (__thiscall *TextScreenWin___vftable_)(void *p, char);

//----- (00440130) --------------------------------------------------------
bool __thiscall TextScreenWin::Create(TextScreenWin *this)
{
  int v1; // ebx@0
  TextScreenWin *v2; // esi@1
  unsigned int v3; // edi@1
  bool result; // al@1
  PgFont *v5; // eax@2
  PgWinText *v6; // eax@2
  PgWinText *v7; // ebx@2
  PgWinText *v8; // eax@10
  float v9; // ST5C_4@10
  NiSourceTexture *v10; // ebx@10
  int v11; // [sp-4h] [bp-10h]@2
  PgWinText *v12; // [sp+8h] [bp-4h]@2

  v2 = this;
  v3 = PgWin::ms_uiScreenHeight >> 2;
  result = PgWin::Create(&this->baseclass_0, 0, 0, 1u, 1u, 0, 0, 0);
  if ( result )
  {
    v11 = v1;
    v5 = Font::Get(LARGEBOLD);
    v6 = PgWinText::CreateWin(0, 0, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, v5, &v2->baseclass_0, 0, 0);
    v7 = v2->m_spText.m_pObject;
    v12 = v6;
    if ( v7 != v6 )
    {
      if ( v7 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v7,
            1u);
        v6 = v12;
      }
      v2->m_spText.m_pObject = v6;
      if ( v6 )
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(signed int, int))v2->m_spText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      1,
      v11);
    v8 = v2->m_spText.m_pObject;
    v9 = (double)PgWin::ms_uiScreenHeight;
    v2->m_fTextYPos = v9;
    ((void (__thiscall *)(PgWinText *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v2->m_spText.m_pObject);
    v10 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -56);
    PgWinSpr::CreateWin(v10, 0, 0, PgWin::ms_uiScreenWidth, v3, &v2->baseclass_0, 0, 0);
    PgWinSpr::CreateWin(v10, 0, 3 * v3, PgWin::ms_uiScreenWidth, v3, &v2->baseclass_0, 0, 0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0);
    result = 1;
  }
  return result;
}
// 440130: could not find valid save-restore pair for ebx

//----- (00440280) --------------------------------------------------------
void __thiscall TextScreenEffect::_TextScreenEffect(TextScreenEffect *this)
{
  TextScreenEffect *v1; // ebx@1
  TextScreenWin *v2; // esi@1
  NiScreenElements *v3; // esi@5
  int v4; // esi@9
  NiTListItem<int> *v5; // edi@9
  TextScreenEffect *v6; // eax@9
  NiTListItem<int> *v7; // ST00_4@10

  v1 = this;
  this->baseclass_0.vfptr = (Singleton<TextScreenEffect>Vtbl *)&TextScreenEffect::_vftable_;
  v2 = this->m_spTextScreenWin.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_spFadeScreen.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = (int)&v1->m_kListSchedule;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&PgTList<int>::_vftable_;
  v5 = v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v6 = 0;
  if ( v5 )
  {
    do
    {
      v7 = v5;
      v5 = v5->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4 + 8))(&v1->m_kListSchedule, v7);
    }
    while ( v5 );
    v6 = 0;
  }
  *(_DWORD *)&v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<int> *)v6;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<int> *)v6;
  *(_DWORD *)v4 = &NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
  v1->baseclass_0.vfptr = (Singleton<TextScreenEffect>Vtbl *)&Singleton<TextScreenEffect>::_vftable_;
  if ( Singleton<TextScreenEffect>::m_pInstance != v6 )
  {
    ((void (__stdcall *)(_DWORD))Singleton<TextScreenEffect>::m_pInstance->baseclass_0.vfptr->__vecDelDtor)(1);
    Singleton<TextScreenEffect>::m_pInstance = 0;
  }
  Singleton<TextScreenEffect>::m_bDestroy = 1;
}
// 981490: using guessed type int (__thiscall *Singleton_TextScreenEffect____vftable_)(void *p, char);
// 981498: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);
// 9814B8: using guessed type int (__thiscall *PgTList_int____vftable_)(void *p, char);
// 9816B0: using guessed type int (__thiscall *TextScreenEffect___vftable_)(void *p, char);
// A9760C: using guessed type char Singleton_TextScreenEffect___m_bDestroy;

//----- (00440390) --------------------------------------------------------
void __thiscall TextScreenEffect::Stop(TextScreenEffect *this)
{
  TextScreenEffect *v1; // ebx@1
  NiTListItem<int> *v2; // eax@1
  NiTListItem<int> *v3; // edi@1
  NiTListItem<int> *v4; // ST00_4@2
  NiScreenElements *v5; // esi@4
  TextScreenWin *v6; // esi@10

  v1 = this;
  v2 = 0;
  this->m_eSchedule = 0;
  v3 = this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    do
    {
      v4 = v3;
      v3 = v3->m_pkNext;
      v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,int> *)&v1->m_kListSchedule,
        v4);
    }
    while ( v3 );
    v2 = 0;
  }
  *(_DWORD *)&v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v2;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v2;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v2;
  v1->m_fStartTime = 0.0;
  v1->m_fFadeTime = 0.0;
  v5 = v1->m_spFadeScreen.m_pObject;
  if ( (NiTListItem<int> *)v5 != v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spFadeScreen.m_pObject = 0;
    v2 = 0;
  }
  if ( (NiTListItem<int> *)v1->m_spTextScreenWin.m_pObject != v2 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_spTextScreenWin.m_pObject->baseclass_0);
    v6 = v1->m_spTextScreenWin.m_pObject;
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v6,
            1u);
      }
      v1->m_spTextScreenWin.m_pObject = 0;
    }
  }
}

//----- (00440430) --------------------------------------------------------
void __thiscall TextScreenEffect::Draw(TextScreenEffect *this, NiRenderer *pkRenderer)
{
  TextScreenEffect *v2; // esi@1
  NiAVObject *v3; // ST04_4@3
  NiScreenElements *v4; // ecx@9
  NiVisibleArray kWinVisible; // [sp+0h] [bp-B4h]@3
  NiCamera *pkCamera; // [sp+10h] [bp-A4h]@2
  PgWinCullingProcess kWinCuller; // [sp+14h] [bp-A0h]@3
  unsigned int v8; // [sp+A4h] [bp-10h]@1
  int v9; // [sp+B0h] [bp-4h]@3
  int v10; // [sp+B4h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  if ( this->m_eSchedule == 2 )
  {
    pkCamera = unk_B703D8;
    if ( !unk_B703D8 )
      return;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_spTextScreenWin.m_pObject->baseclass_0);
    kWinVisible.m_ppkArray = 0;
    kWinVisible.m_uiCurrentSize = 0;
    kWinVisible.m_uiAllocatedSize = 0;
    kWinVisible.m_uiGrowBy = 1024;
    NiVisibleArray::SetAllocatedSize(&kWinVisible, 0x400u);
    v9 = 0;
    PgWinCullingProcess::PgWinCullingProcess(&kWinCuller, &kWinVisible);
    v3 = (NiAVObject *)v2->m_spTextScreenWin.m_pObject;
    LOBYTE(v9) = 1;
    NiDrawScene(pkCamera, v3, &kWinCuller.baseclass_0, 0);
    LOBYTE(v9) = 0;
    PgWinCullingProcess::_PgWinCullingProcess(&kWinCuller);
    v9 = -1;
    operator delete(kWinVisible.m_ppkArray);
  }
  if ( pkRenderer )
  {
    if ( pkRenderer->m_eFrameState == 1 || pkRenderer->m_eOffScreenFrameState == 1 )
    {
      if ( pkRenderer->m_bRenderTargetGroupActive == 1 )
        pkRenderer->baseclass_0.baseclass_0.vfptr[71].__vecDelDtor((NiRefObject *)pkRenderer, 0);
    }
    v4 = v2->m_spFadeScreen.m_pObject;
    if ( v4 )
      NiScreenElements::Draw(v4, pkRenderer);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00440570) --------------------------------------------------------
void __thiscall TextScreenEffect::UpdateFade(TextScreenEffect *this, float fCurTime)
{
  int v2; // eax@3
  double v3; // st7@5
  float *v4; // edx@6
  float *v5; // edx@11
  NiScreenElements *v6; // eax@16
  NiColorA Color; // [sp+0h] [bp-18h]@3
  float v8; // [sp+10h] [bp-8h]@6
  float v9; // [sp+14h] [bp-4h]@6

  fCurTime = (fCurTime - this->m_fStartTime) / this->m_fFadeTime;
  if ( fCurTime < 1.0 )
  {
    LODWORD(Color.r) = NiColorA::BLACK;
    LODWORD(Color.b) = dword_A88DA0;
    v2 = this->m_eSchedule - 1;
    LODWORD(Color.g) = dword_A88D9C;
    LODWORD(Color.a) = dword_A88DA4;
    if ( v2 )
    {
      if ( v2 == 2 )
      {
        v4 = &v9;
        v9 = 0.0;
        v8 = 1.0;
        if ( fCurTime >= 0.0 )
          v4 = &fCurTime;
        if ( *v4 >= 1.0 )
          v4 = &v8;
        v3 = 1.0 - *v4;
      }
      else
      {
        v3 = 0.0;
      }
    }
    else
    {
      v5 = &v8;
      v8 = 0.0;
      v9 = 1.0;
      if ( fCurTime >= 0.0 )
        v5 = &fCurTime;
      if ( *v5 >= 1.0 )
        v5 = &v9;
      v3 = *v5 + 0.0;
    }
    v6 = this->m_spFadeScreen.m_pObject;
    Color.a = v3;
    if ( v6 )
      NiScreenElementsData::SetColors(
        (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
        0,
        &Color);
  }
  else
  {
    this->m_eSchedule = 0;
  }
}
// A88D98: using guessed type int NiColorA__BLACK;
// A88D9C: using guessed type int dword_A88D9C;
// A88DA0: using guessed type int dword_A88DA0;
// A88DA4: using guessed type int dword_A88DA4;

//----- (00440660) --------------------------------------------------------
void __thiscall TextScreenEffect::AddSchedule(TextScreenEffect *this, int eSchedule)
{
  char *v2; // esi@1
  NiTListItem<int> *v3; // eax@1
  int v4; // ecx@1

  v2 = (char *)&this->m_kListSchedule;
  v3 = this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,int> *)&this->m_kListSchedule);
  v3->m_element = eSchedule;
  v3->m_pkNext = 0;
  v3->m_pkPrev = (NiTListItem<int> *)*((_DWORD *)v2 + 2);
  v4 = *((_DWORD *)v2 + 2);
  if ( v4 )
  {
    *(_DWORD *)v4 = v3;
    ++*((_DWORD *)v2 + 3);
    *((_DWORD *)v2 + 2) = v3;
  }
  else
  {
    ++*((_DWORD *)v2 + 3);
    *((_DWORD *)v2 + 1) = v3;
    *((_DWORD *)v2 + 2) = v3;
  }
}

//----- (004406C0) --------------------------------------------------------
bool __thiscall TextScreenEffect::InitFadeScreen(TextScreenEffect *this)
{
  TextScreenEffect *v1; // edi@1
  int v2; // ebx@1
  void *v3; // esi@2
  void *v4; // eax@3
  NiScreenElementsData *v5; // eax@4
  int v6; // eax@6
  NiScreenElements *v7; // esi@7
  NiScreenElements *v8; // eax@14
  void *v10; // eax@16
  void *v11; // esi@16
  void *v12; // eax@20
  void *v13; // esi@20

  v1 = this;
  v2 = 0;
  if ( !this->m_spFadeScreen.m_pObject )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
    {
      v4 = operator new(0x70u);
      if ( v4 )
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v4, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      else
        v5 = 0;
      NiScreenElements::NiScreenElements((NiScreenElements *)v3, v5);
      v2 = v6;
    }
    v7 = v1->m_spFadeScreen.m_pObject;
    if ( v7 != (NiScreenElements *)v2 )
    {
      if ( v7
        && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v7,
          1u);
      v1->m_spFadeScreen.m_pObject = (NiScreenElements *)v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    v8 = v1->m_spFadeScreen.m_pObject;
    if ( !v8
      || ((NiScreenElementsData::Insert(
             (NiScreenElementsData *)v8->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
             4u,
             0,
             0),
           NiScreenElementsData::SetRectangle(
             (NiScreenElementsData *)v1->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
             0,
             0.0,
             0.0,
             1.0,
             1.0),
           NiScreenElementsData::UpdateBound((NiScreenElementsData *)v1->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject),
           v10 = operator new(0x28u),
           (v11 = v10) == 0) ? (v11 = 0) : (NiObjectNET::NiObjectNET((NiObjectNET *)v10),
                                            *(_DWORD *)v11 = &NiVertexColorProperty::_vftable_,
                                            *((_WORD *)v11 + 14) = 0,
                                            *((_DWORD *)v11 + 8) = 0,
                                            *((_DWORD *)v11 + 9) = 1),
          !v11
       || ((*((_DWORD *)v11 + 8) = 1,
            *((_DWORD *)v11 + 9) = 0,
            NiAVObject::AttachProperty(
              &v1->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              (NiProperty *)v11),
            v12 = operator new(0x20u),
            (v13 = v12) == 0) ? (v13 = 0) : (NiObjectNET::NiObjectNET((NiObjectNET *)v12),
                                             *(_DWORD *)v13 = &NiAlphaProperty::_vftable_,
                                             *((_WORD *)v13 + 14) = 236,
                                             *((_BYTE *)v13 + 30) = 0),
           !v13)) )
      return 0;
    *((_WORD *)v13 + 14) = *((_WORD *)v13 + 14) & 0xFEED | 0xED;
    NiAVObject::AttachProperty(
      &v1->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      (NiProperty *)v13);
    NiAVObject::UpdateProperties(&v1->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  return 1;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (004408D0) --------------------------------------------------------
void __thiscall TextScreenEffect::Update(TextScreenEffect *this, float fCurTime)
{
  TextScreenEffect *v2; // esi@1
  char *v3; // eax@2
  NiTListItem<int> *v4; // ecx@3
  TextScreenWin *v5; // eax@7
  PgWin *v6; // ST00_4@9

  v2 = this;
  if ( *(_DWORD *)&this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v3 = (char *)&this->m_eSchedule;
    if ( !this->m_eSchedule )
    {
      v4 = this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( !v4 )
        return;
      *(_DWORD *)v3 = v4->m_element;
      NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v2->m_kListSchedule,
        (NiLight *const *)&v2->m_eSchedule);
      v2->m_fStartTime = fCurTime;
    }
  }
  switch ( v2->m_eSchedule )
  {
    case 1:
    case 3:
      TextScreenEffect::UpdateFade(v2, fCurTime);
      break;
    case 2:
      v5 = v2->m_spTextScreenWin.m_pObject;
      if ( v5 )
      {
        if ( v5->m_bEnd )
        {
          v6 = (PgWin *)v2->m_spTextScreenWin.m_pObject;
          v2->m_eSchedule = 0;
          PgWinMgr::CloseWin(&Pgg_kWinMgr, v6);
        }
      }
      break;
    case 4:
      TextScreenEffect::Stop(v2);
      break;
    default:
      return;
  }
}

//----- (00440970) --------------------------------------------------------
void __thiscall TextScreenEffect::TextScreenEffect(TextScreenEffect *this)
{
  this->baseclass_0.vfptr = (Singleton<TextScreenEffect>Vtbl *)&TextScreenEffect::_vftable_;
  this->m_eSchedule = 0;
  *(_DWORD *)&this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&PgTList<int>::_vftable_;
  this->m_fStartTime = 0.0;
  this->m_fFadeTime = 0.0;
  this->m_spFadeScreen.m_pObject = 0;
  this->m_spTextScreenWin.m_pObject = 0;
}
// 9814B8: using guessed type int (__thiscall *PgTList_int____vftable_)(void *p, char);
// 9816B0: using guessed type int (__thiscall *TextScreenEffect___vftable_)(void *p, char);

//----- (004409A0) --------------------------------------------------------
TextScreenWin *__cdecl TextScreenWin::CreateWin()
{
  void *v0; // eax@1
  void *v1; // esi@1
  PgWin *v2; // edi@8
  TextScreenWin *v3; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x12Cu);
  v1 = v0;
  result.m_pObject = (PgWin *)v0;
  v5 = 0;
  if ( v0 )
  {
    PgWin::PgWin((PgWin *)v0);
    *(_DWORD *)v1 = &TextScreenWin::_vftable_;
    *((_DWORD *)v1 + 58) = &TextScreenWin::_vftable_;
    *((_DWORD *)v1 + 72) = 0;
    *((float *)v1 + 73) = 0.0;
    *((_WORD *)v1 + 148) = 0;
  }
  else
  {
    v1 = 0;
  }
  if ( v1 )
    InterlockedIncrement((volatile LONG *)v1 + 1);
  v5 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v1);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 452))(v1) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v1 + 356))(v1);
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = (TextScreenWin *)v1;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v1);
    if ( result.m_pObject )
    {
      v2 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v2 )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
    }
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = 0;
  }
  return v3;
}
// 9814C8: using guessed type int (__stdcall *TextScreenWin___vftable_)(int uiFlags);
// 9814E4: using guessed type int (__thiscall *TextScreenWin___vftable_)(void *p, char);

//----- (00440AF0) --------------------------------------------------------
bool __thiscall TextScreenEffect::InitWin(TextScreenEffect *this)
{
  TextScreenEffect *v1; // ebx@1
  bool result; // al@2
  TextScreenWin *v3; // eax@3
  TextScreenWin *v4; // esi@3
  TextScreenWin *v5; // edi@3

  v1 = this;
  if ( this->m_spTextScreenWin.m_pObject )
  {
    result = 1;
  }
  else
  {
    v3 = TextScreenWin::CreateWin();
    v4 = v1->m_spTextScreenWin.m_pObject;
    v5 = v3;
    if ( v4 != v3 )
    {
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v4,
          1u);
      v1->m_spTextScreenWin.m_pObject = v5;
      if ( v5 )
        InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    result = v1->m_spTextScreenWin.m_pObject != 0;
  }
  return result;
}

//----- (00440B50) --------------------------------------------------------
void __thiscall TextScreenEffect::Start(TextScreenEffect *this, const char *pcText, float fCurTime, float fFadeTime, bool isCinematic)
{
  TextScreenEffect *v5; // esi@1
  TextScreenWin *v6; // eax@3

  v5 = this;
  if ( TextScreenEffect::InitWin(this) && TextScreenEffect::InitFadeScreen(v5) )
  {
    v6 = v5->m_spTextScreenWin.m_pObject;
    if ( v6 )
    {
      v6->m_bIsCinematic = isCinematic;
      TextScreenWin::Start(v5->m_spTextScreenWin.m_pObject, pcText);
    }
    v5->m_fStartTime = fCurTime;
    v5->m_fFadeTime = fFadeTime;
    NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)&v5->m_kListSchedule);
    v5->m_eSchedule = 0;
  }
}

//----- (00440BB0) --------------------------------------------------------
void __thiscall Singleton<TextScreenEffect>::_Singleton<TextScreenEffect>(Singleton<TextScreenEffect> *this)
{
  this->vfptr = (Singleton<TextScreenEffect>Vtbl *)&Singleton<TextScreenEffect>::_vftable_;
  if ( Singleton<TextScreenEffect>::m_pInstance )
  {
    ((void (__stdcall *)(_DWORD))Singleton<TextScreenEffect>::m_pInstance->baseclass_0.vfptr->__vecDelDtor)(1);
    Singleton<TextScreenEffect>::m_pInstance = 0;
  }
  Singleton<TextScreenEffect>::m_bDestroy = 1;
}
// 981490: using guessed type int (__thiscall *Singleton_TextScreenEffect____vftable_)(void *p, char);
// A9760C: using guessed type char Singleton_TextScreenEffect___m_bDestroy;

//----- (00440BE0) --------------------------------------------------------
void *__thiscall Singleton<TextScreenEffect>::_vector_deleting_destructor_(Singleton<TextScreenEffect> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (Singleton<TextScreenEffect>Vtbl *)&Singleton<TextScreenEffect>::_vftable_;
  if ( Singleton<TextScreenEffect>::m_pInstance )
  {
    ((void (__stdcall *)(_DWORD))Singleton<TextScreenEffect>::m_pInstance->baseclass_0.vfptr->__vecDelDtor)(1);
    Singleton<TextScreenEffect>::m_pInstance = 0;
  }
  Singleton<TextScreenEffect>::m_bDestroy = 1;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981490: using guessed type int (__thiscall *Singleton_TextScreenEffect____vftable_)(void *p, char);
// A9760C: using guessed type char Singleton_TextScreenEffect___m_bDestroy;

//----- (00440C30) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_NiTListBase<NiTPointerAllocator<unsigned_int>_int>(NiTListBase<NiTPointerAllocator<unsigned int>,int> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
}
// 981498: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);

//----- (00440C40) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,int> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 981498: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);

//----- (00440C70) --------------------------------------------------------
void __thiscall NiTPointerList<int>::_NiTPointerList<int>(NiTPointerList<int> *this)
{
  NiTPointerList<int> *v1; // edi@1
  NiTListItem<int> *v2; // esi@1
  NiTListItem<int> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,int> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
}
// 981498: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);
// 9814A8: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);

//----- (00440CF0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_int>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,int> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<int> *v3; // esi@1
  NiTListItem<int> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981498: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);
// 9814A8: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);

//----- (00440D80) --------------------------------------------------------
void __thiscall PgTList<int>::_PgTList<int>(PgTList<int> *this)
{
  PgTList<int> *v1; // edi@1
  NiTListItem<int> *v2; // esi@1
  NiTListItem<int> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&PgTList<int>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,int> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
}
// 981498: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);
// 9814B8: using guessed type int (__thiscall *PgTList_int____vftable_)(void *p, char);

//----- (00440E00) --------------------------------------------------------
void *__thiscall PgTList<int>::_vector_deleting_destructor_(PgTList<int> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<int> *v3; // esi@1
  NiTListItem<int> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,int>Vtbl *)&PgTList<int>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981498: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__int____vftable_)(void *p, char);
// 9814B8: using guessed type int (__thiscall *PgTList_int____vftable_)(void *p, char);

//----- (00440E90) --------------------------------------------------------
void *__thiscall TextScreenWin::_vector_deleting_destructor_(TextScreenWin *this, unsigned int a2)
{
  PgWin *v2; // esi@1
  PgWinText *v3; // edi@1

  v2 = (PgWin *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TextScreenWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TextScreenWin::_vftable_;
  v3 = this->m_spText.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWin::_PgWin(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9814C8: using guessed type int (__stdcall *TextScreenWin___vftable_)(int uiFlags);
// 9814E4: using guessed type int (__thiscall *TextScreenWin___vftable_)(void *p, char);

//----- (00440F30) --------------------------------------------------------
void *__thiscall TextScreenEffect::_scalar_deleting_destructor_(TextScreenEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  TextScreenEffect::_TextScreenEffect(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00440F60) --------------------------------------------------------
int __cdecl Timer::GetHour(long double Sec)
{
  return (signed int)(Sec / 3600.0);
}

//----- (00440F80) --------------------------------------------------------
int __cdecl Timer::GetDay(long double Sec)
{
  return (signed int)(Sec / 86400.0);
}

//----- (00440FA0) --------------------------------------------------------
int __cdecl Timer::GetMin(long double Sec)
{
  return (signed int)(Sec / 60.0);
}

//----- (00440FC0) --------------------------------------------------------
bool __cdecl Timer::TimeCheck(tm *kTime)
{
  int v1; // ecx@4
  int v2; // ecx@6
  int v3; // ecx@8
  int v4; // ecx@10
  int v5; // ecx@12
  int v6; // eax@14

  return kTime
      && kTime->tm_sec >= 0
      && kTime->tm_sec <= 59
      && (v1 = kTime->tm_min, v1 >= 0)
      && v1 <= 59
      && (v2 = kTime->tm_hour, v2 >= 0)
      && v2 <= 23
      && (v3 = kTime->tm_mday, v3 >= 1)
      && v3 <= 31
      && (v4 = kTime->tm_mon, v4 >= 0)
      && v4 <= 31
      && (v5 = kTime->tm_wday, v5 >= 0)
      && v5 <= 6
      && (v6 = kTime->tm_yday, v6 >= 0)
      && v6 <= 365;
}

//----- (00441030) --------------------------------------------------------
bool __thiscall Tutorial::SetLockItemSell(Tutorial *this, bool b)
{
  this->m_bLockItemSell = b;
  return 1;
}

//----- (00441040) --------------------------------------------------------
bool __thiscall Tutorial::SetLockItemShop(Tutorial *this, bool b)
{
  this->m_bLockItemShop = b;
  return 1;
}

//----- (00441050) --------------------------------------------------------
bool __thiscall Tutorial::SetLockSkillShop(Tutorial *this, bool b)
{
  this->m_bLockSkillShop = b;
  return 1;
}

//----- (00441060) --------------------------------------------------------
bool __thiscall Tutorial::SetLockItemShopTab(Tutorial *this, bool b)
{
  this->m_bLockItemShopTab = b;
  return 1;
}

//----- (00441070) --------------------------------------------------------
bool __thiscall Tutorial::SetLockSkillShopTab(Tutorial *this, bool b)
{
  this->m_bLockSkillShopTab = b;
  return 1;
}

//----- (00441080) --------------------------------------------------------
bool __thiscall Tutorial::SetHideQuestGiveUp(Tutorial *this, bool b)
{
  this->m_bHideQuestGiveUp = b;
  return 1;
}

//----- (00441090) --------------------------------------------------------
void __thiscall Tutorial::SetBoxAnnounceMsg(Tutorial *this, const char *pcMsg)
{
  BoxAnnounceWin *v2; // ecx@1

  v2 = this->m_pkBoxAnnounceWin;
  if ( v2 )
    BoxAnnounceWin::SetMsg(v2, pcMsg);
}

//----- (004410B0) --------------------------------------------------------
void __thiscall Tutorial::InitMobKillCount(Tutorial *this, unsigned __int16 kMobID, unsigned int uiMobCount)
{
  MobKillCountWin *v3; // ecx@1

  v3 = this->m_pkMobKillCountWin;
  if ( v3 )
    MobKillCountWin::Init(v3, kMobID, uiMobCount);
}

//----- (004410D0) --------------------------------------------------------
void __thiscall Tutorial::AddMobKillCount(Tutorial *this)
{
  MobKillCountWin *v1; // ecx@1

  v1 = this->m_pkMobKillCountWin;
  if ( v1 )
    MobKillCountWin::AddCount(v1);
}

//----- (004410E0) --------------------------------------------------------
bool __thiscall Tutorial::IsEndMobKillCount(Tutorial *this)
{
  MobKillCountWin *v1; // ecx@1
  bool result; // al@2

  v1 = this->m_pkMobKillCountWin;
  if ( v1 )
    result = MobKillCountWin::IsEnd(v1);
  else
    result = 0;
  return result;
}

//----- (00441100) --------------------------------------------------------
void __thiscall Tutorial::Terminate(Tutorial *this)
{
  Tutorial *v1; // esi@1
  NiNode *v2; // edi@2

  v1 = this;
  *(_DWORD *)&this->m_bEnable = 0;
  *(_DWORD *)&this->m_bBuyStone = 0;
  *(_DWORD *)&this->m_bLockItemShop = 0;
  *(_WORD *)&this->m_bHideQuestGiveUp = 0;
  if ( this->m_spTutorialMark.m_pObject )
  {
    v2 = this->m_spTutorialMark.m_pObject;
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      v1->m_spTutorialMark.m_pObject = 0;
    }
  }
  if ( v1->m_pkBoxAnnounceWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkBoxAnnounceWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkBoxAnnounceWin = 0;
  }
  if ( v1->m_pkMobKillCountWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMobKillCountWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMobKillCountWin = 0;
  }
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_UIEffectList);
  NsDecal::Terminate(&v1->m_kTutorialMarkDecal);
  LODWORD(v1->m_kTutorialMarkPos.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_kTutorialMarkPos.y = NiPoint3::ZERO.y;
  v1->m_kTutorialMarkPos.z = NiPoint3::ZERO.z;
}

//----- (004411C0) --------------------------------------------------------
void __thiscall Tutorial::Update(Tutorial *this, float fTime)
{
  NiNode *v2; // eax@2

  if ( this->m_bEnable )
  {
    v2 = this->m_spTutorialMark.m_pObject;
    if ( v2 )
      NsDecal::Update(&this->m_kTutorialMarkDecal, 0.0, v2, &this->m_kTutorialMarkPos);
  }
}

//----- (004411F0) --------------------------------------------------------
bool __thiscall Tutorial::BlinkMainMenu(Tutorial *this, bool bActive, int iSlotType)
{
  PgFrameWork *v3; // eax@1
  bool result; // al@2
  MainMenuWin *v5; // ecx@3

  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 && (v5 = (MainMenuWin *)v3[16].baseclass_0.vfptr) != 0 )
  {
    MainMenuWin::SetBlinkEffect(v5, bActive, iSlotType);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00441230) --------------------------------------------------------
void __thiscall Tutorial::SetItemMoveEffectKey(Tutorial *this, int iEffectKey)
{
  PgFrameWork *v2; // eax@1
  void *v3; // eax@2

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = v2[19].m_BackFrameID;
    if ( v3 )
      *((_DWORD *)v3 + 640) = iEffectKey;
  }
}

//----- (00441260) --------------------------------------------------------
bool __thiscall Tutorial::IsHaveItem(Tutorial *this, const char *pcItemIdx)
{
  PgFrameWork *v2; // eax@1
  bool result; // al@2
  InventoryWin *v4; // ecx@3

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 && (v4 = (InventoryWin *)v2[19].m_BackFrameID) != 0 )
    result = InventoryWin::FindItem(v4, (char *)pcItemIdx) < 0xC1;
  else
    result = 0;
  return result;
}

//----- (004412A0) --------------------------------------------------------
bool __thiscall Tutorial::IsEquipItem(Tutorial *this, const char *pcItemIdx)
{
  PgFrameWork *v2; // eax@1
  bool result; // al@2
  InventoryWin *v4; // ecx@3

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 && (v4 = (InventoryWin *)v2[19].m_BackFrameID) != 0 )
    result = InventoryWin::FindEquipItem(v4, pcItemIdx) < 0x1F;
  else
    result = 0;
  return result;
}

//----- (004412E0) --------------------------------------------------------
bool __thiscall Tutorial::IsOpenItemShop(Tutorial *this)
{
  PgFrameWork *v1; // eax@1
  bool result; // al@2
  unsigned int v3; // ecx@3

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 && (v3 = v1[25].m_kMsgQ.m_uiTail) != 0 )
    result = (*(int (**)(void))(*(_DWORD *)v3 + 260))();
  else
    result = 0;
  return result;
}

//----- (00441310) --------------------------------------------------------
bool __thiscall Tutorial::IsOpenSkillShop(Tutorial *this)
{
  PgFrameWork *v1; // eax@1
  bool result; // al@2
  int v3; // ecx@3

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 && (v3 = *(_DWORD *)&v1[25].m_bInit) != 0 )
    result = (*(int (**)(void))(*(_DWORD *)v3 + 260))();
  else
    result = 0;
  return result;
}

//----- (00441340) --------------------------------------------------------
bool __thiscall Tutorial::IsOpenNPCDialog(Tutorial *this)
{
  PgFrameWork *v1; // eax@1
  bool result; // al@2
  int v3; // ecx@3

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 && (v3 = *(_DWORD *)&v1[26].m_bInit) != 0 )
    result = (*(int (**)(void))(*(_DWORD *)v3 + 260))();
  else
    result = 0;
  return result;
}

//----- (00441370) --------------------------------------------------------
bool __thiscall Tutorial::LockStoneShopInv(Tutorial *this, unsigned int uiIgnoreSlot)
{
  PgFrameWork *v2; // eax@1
  bool result; // al@2
  IDirectMessengerVtbl *v4; // ebx@3
  unsigned int v5; // edi@5
  int v6; // ebx@5
  int v7; // esi@8

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v4 = v2[26].baseclass_0.vfptr;
    if ( v4 )
    {
      v5 = 0;
      v6 = (int)&v4[14].DirectDispatchToParent;
      do
      {
        if ( v5 != uiIgnoreSlot && v5 < 0xC0 )
        {
          v7 = *(_DWORD *)v6;
          if ( *(_DWORD *)v6 )
          {
            (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 276))(*(_DWORD *)v6, 0.5);
            (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 240))(v7, 0);
          }
        }
        ++v5;
        v6 += 4;
      }
      while ( v5 < 2 );
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00441400) --------------------------------------------------------
bool __thiscall Tutorial::SetLockStoneShop(Tutorial *this, bool b)
{
  PgFrameWork *v2; // eax@1
  IDirectMessengerVtbl *v3; // ebx@2
  unsigned int v4; // edi@3
  int v5; // ebx@3
  int v6; // esi@5
  double v7; // st7@7
  float v8; // ST10_4@9

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = v2[26].baseclass_0.vfptr;
    if ( v3 )
    {
      v4 = 0;
      v5 = (int)&v3[14].DirectDispatchToParent;
      do
      {
        if ( v4 < 0xC0 )
        {
          v6 = *(_DWORD *)v5;
          if ( *(_DWORD *)v5 )
          {
            if ( b )
              v7 = 0.5;
            else
              v7 = 1.0;
            v8 = v7;
            (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 276))(v6, LODWORD(v8));
            (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 240))(v6, b == 0);
          }
        }
        ++v4;
        v5 += 4;
      }
      while ( v4 < 2 );
    }
  }
  return 0;
}

//----- (00441490) --------------------------------------------------------
bool __thiscall Tutorial::SetItemShopTab(Tutorial *this, unsigned int uiTab)
{
  PgFrameWork *v2; // eax@1
  bool result; // al@2
  PgWin *v4; // edi@3
  unsigned int v5; // esi@5

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v4 = (PgWin *)v2[25].m_kMsgQ.m_uiTail;
    if ( v4 )
    {
      v5 = 2;
      if ( uiTab )
      {
        if ( uiTab == 1 )
        {
          v5 = 3;
        }
        else
        {
          if ( uiTab == 2 )
            v5 = 4;
        }
      }
      result = PgWinMgr::IsIn(&Pgg_kWinMgr, v4);
      if ( result )
      {
        PgWin::ProcessMsg(v4, 5u, v5, 0);
        result = 1;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00441510) --------------------------------------------------------
void __thiscall Tutorial::_Tutorial(Tutorial *this)
{
  Tutorial *v1; // esi@1
  char *v2; // edi@1
  NiNode *v3; // edi@1

  v1 = this;
  this->baseclass_0.vfptr = (Singleton<Tutorial>Vtbl *)&Tutorial::_vftable_;
  v2 = (char *)&this->m_kBlinkWinList;
  this->m_kBlinkWinList.baseclass_0.vfptr = (NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *>Vtbl *)&NiTMap<enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kBlinkWinList);
  *(_DWORD *)v2 = &NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(*((void **)v2 + 2));
  v3 = v1->m_spTutorialMark.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  NsDecal::_NsDecal(&v1->m_kTutorialMarkDecal);
  v1->m_UIEffectList.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMap<int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_UIEffectList);
  v1->m_UIEffectList.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_UIEffectList);
  operator delete__(v1->m_UIEffectList.baseclass_0.m_ppkHashTable);
  v1->baseclass_0.vfptr = (Singleton<Tutorial>Vtbl *)&Singleton<Tutorial>::_vftable_;
  if ( Singleton<Tutorial>::m_pInstance )
  {
    ((void (__stdcall *)(_DWORD))Singleton<Tutorial>::m_pInstance->baseclass_0.vfptr->__vecDelDtor)(1);
    Singleton<Tutorial>::m_pInstance = 0;
  }
  Singleton<Tutorial>::m_bDestroy = 1;
}
// 9816EC: using guessed type int (__thiscall *Singleton_Tutorial____vftable_)(void *p, char);
// 9816F4: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWin___int_NiPointer_PgWin_____vftable_)(void *p, char);
// 981714: using guessed type int (__thiscall *NiTMapBase_DFALL_PgWin ___enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);
// 981734: using guessed type int (__thiscall *NiTMap_int_NiPointer_PgWin_____vftable_)(void *p, char);
// 981754: using guessed type int (__thiscall *NiTMap_enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);
// 981774: using guessed type int (__thiscall *Tutorial___vftable_)(void *p, char);
// A97654: using guessed type char Singleton_Tutorial___m_bDestroy;

//----- (00441630) --------------------------------------------------------
bool __thiscall Tutorial::BlinkStoneShop(Tutorial *this, unsigned int uiSlot, int *iEffectKey)
{
  Tutorial *v3; // ebx@1
  PgFrameWork *v4; // eax@1
  bool result; // al@2
  IDirectMessengerVtbl *v6; // eax@3
  PgWin *v7; // eax@5
  int v8; // ecx@6
  UIBlinkEffect *v9; // eax@6
  NiPointer<PgWinBut> v10; // [sp-4h] [bp-20h]@6
  NiColorA kColor; // [sp+Ch] [bp-10h]@6

  v3 = this;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4
    && (v6 = v4[26].baseclass_0.vfptr) != 0
    && uiSlot < 0xC0
    && (v7 = (PgWin *)*((_DWORD *)&v6[14].DirectDispatchToParent + uiSlot)) != 0 )
  {
    v8 = *(_DWORD *)&v3->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    kColor.r = 255.0;
    v10.m_pObject = (PgWinBut *)v8;
    kColor.g = 250.0;
    kColor.b = 205.0;
    kColor.a = 255.0;
    *iEffectKey = v8;
    v9 = UIBlinkEffect::CreateWin(v7, &kColor);
    v10.m_pObject = (PgWinBut *)v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v3->m_UIEffectList,
      *iEffectKey,
      v10);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004416E0) --------------------------------------------------------
bool __thiscall Tutorial::BlinkInven(Tutorial *this, const char *pcItemIdx, int *iEffectKey)
{
  Tutorial *v3; // edi@1
  PgFrameWork *v4; // eax@1
  bool result; // al@2
  void *v6; // esi@3
  unsigned int v7; // eax@4
  unsigned int v8; // ebx@4
  PgWin *v9; // eax@6
  int v10; // edx@7
  UIBlinkEffect *v11; // eax@7
  int v12; // edi@9
  NiPointer<PgWinBut> v13; // [sp-4h] [bp-28h]@7
  NiColorA kColor; // [sp+Ch] [bp-18h]@7
  NiPointer<PgWinBut> *v15; // [sp+1Ch] [bp-8h]@7
  Tutorial *v16; // [sp+20h] [bp-4h]@1

  v3 = this;
  v16 = this;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4
    && (v6 = v4[19].m_BackFrameID) != 0
    && (v7 = InventoryWin::FindItem((InventoryWin *)v6, (char *)pcItemIdx), v8 = v7, v7 <= 0xC0)
    && v7 < 0xC0
    && (v9 = (PgWin *)*((_DWORD *)v6 + v7 + 87)) != 0 )
  {
    v10 = *(_DWORD *)&v3->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    kColor.r = 255.0;
    v13.m_pObject = (PgWinBut *)iEffectKey;
    kColor.g = 250.0;
    *iEffectKey = v10;
    v15 = &v13;
    kColor.b = 205.0;
    kColor.a = 255.0;
    v11 = UIBlinkEffect::CreateWin(v9, &kColor);
    v13.m_pObject = (PgWinBut *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v12 = (int)&v16->m_UIEffectList;
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v16->m_UIEffectList,
      *iEffectKey,
      v13);
    *((_DWORD *)v6 + 641) = InventoryWin::FindItemID((InventoryWin *)v6, (char *)pcItemIdx);
    *((_DWORD *)v6 + 637) = v12;
    result = 1;
    *((_DWORD *)v6 + 639) = v8;
    *((_BYTE *)v6 + 2553) = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004417D0) --------------------------------------------------------
bool __thiscall Tutorial::BlinkShortCut(Tutorial *this, int *iEffectKey)
{
  Tutorial *v2; // ebx@1
  PgFrameWork *v3; // eax@1
  bool result; // al@2
  unsigned int v5; // edx@3
  unsigned int v6; // ecx@3
  IDirectMessengerVtbl *v7; // eax@9
  PgWin *v8; // eax@10
  int v9; // ecx@11
  UIBlinkEffect *v10; // eax@11
  NiPointer<PgWinBut> v11; // [sp-4h] [bp-20h]@11
  NiColorA kColor; // [sp+Ch] [bp-10h]@11

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v3 )
    goto LABEL_16;
  v5 = 0;
  v6 = 0;
  while ( v6 < 0x64 && *(&unk_A9E21C + v6) )
  {
    ++v6;
    if ( v6 >= 0x12 )
      goto LABEL_9;
  }
  v5 = v6;
LABEL_9:
  v7 = v3[18].baseclass_0.vfptr;
  if ( !v7 )
    goto LABEL_16;
  v8 = (PgWin *)*((_DWORD *)&v7[14].DirectDispatchToChildren + v5);
  if ( v8 )
  {
    v9 = *(_DWORD *)&v2->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    kColor.r = 255.0;
    v11.m_pObject = (PgWinBut *)v9;
    kColor.g = 250.0;
    kColor.b = 205.0;
    kColor.a = 255.0;
    *iEffectKey = v9;
    v10 = UIBlinkEffect::CreateWin(v8, &kColor);
    v11.m_pObject = (PgWinBut *)v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_UIEffectList,
      *iEffectKey,
      v11);
    result = 1;
  }
  else
  {
LABEL_16:
    result = 0;
  }
  return result;
}

//----- (00441890) --------------------------------------------------------
bool __thiscall Tutorial::BlinkEffect(Tutorial *this, std::vector<enum Tutorial::eBlinkEffectType,std::allocator<enum Tutorial::eBlinkEffectType> > *kBlinkEffectTypeList, int *riEffectKey, int *riEffectCount)
{
  std::vector<enum Tutorial::eBlinkEffectType,std::allocator<enum Tutorial::eBlinkEffectType> > *v4; // edx@1
  signed int v5; // eax@1
  bool result; // al@2
  char *v7; // edi@4
  int v8; // ebx@6
  int (__thiscall *v9)(_DWORD, _DWORD); // eax@6
  int v10; // eax@6
  PgWinBut *v11; // ecx@6
  NiRefObjectVtbl *v12; // esi@6
  int (__thiscall *v13)(_DWORD, _DWORD, _DWORD); // edx@7
  UIBlinkEffect *v14; // eax@12
  NiPointer<PgWinBut> v15; // [sp-4h] [bp-34h]@6
  NiColorA kColor; // [sp+Ch] [bp-24h]@12
  NiPointer<PgWinBut> *v17; // [sp+1Ch] [bp-14h]@12
  int iSize; // [sp+20h] [bp-10h]@1
  PgWin *pkWin; // [sp+24h] [bp-Ch]@10
  Tutorial *v20; // [sp+28h] [bp-8h]@1
  int i; // [sp+2Ch] [bp-4h]@3

  v4 = kBlinkEffectTypeList;
  v5 = (signed int)((char *)kBlinkEffectTypeList->baseclass_0._Mylast
                  - *(_DWORD *)&kBlinkEffectTypeList->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  v20 = this;
  iSize = v5;
  if ( v5 > 0 )
  {
    *riEffectKey = *(_DWORD *)&this->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    i = 0;
    if ( v5 > 0 )
    {
      v7 = (char *)&this->m_kBlinkWinList;
      while ( 1 )
      {
        v8 = *(_DWORD *)(*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * i);
        v9 = *(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 4);
        v15.m_pObject = *(PgWinBut **)(*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * i);
        v10 = v9(v7, v15.m_pObject);
        v11 = (PgWinBut *)*((_DWORD *)v7 + 2);
        v12 = (&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v10];
        if ( v12 )
        {
          while ( 1 )
          {
            v13 = *(int (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 8);
            v15.m_pObject = (PgWinBut *)v12[1].__vecDelDtor;
            if ( (unsigned __int8)v13(v7, v8, v15.m_pObject) )
              break;
            v12 = (NiRefObjectVtbl *)v12->__vecDelDtor;
            if ( !v12 )
              goto LABEL_11;
          }
          pkWin = (PgWin *)v12[2].__vecDelDtor;
        }
LABEL_11:
        if ( pkWin )
        {
          v15.m_pObject = v11;
          kColor.r = 255.0;
          v17 = &v15;
          kColor.g = 250.0;
          kColor.b = 205.0;
          kColor.a = 255.0;
          v14 = UIBlinkEffect::CreateWin(pkWin, &kColor);
          v15.m_pObject = (PgWinBut *)v14;
          if ( v14 )
            InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v20->m_UIEffectList,
            *riEffectKey,
            v15);
        }
        ++i;
        if ( i >= iSize )
          break;
        v4 = kBlinkEffectTypeList;
      }
      this = v20;
    }
    *riEffectCount = *(_DWORD *)&this->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] - *riEffectKey;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004419A0) --------------------------------------------------------
bool __thiscall Tutorial::BlinkQuestAccept(Tutorial *this, int *iEffectKey)
{
  Tutorial *v2; // ebx@1
  PgFrameWork *v3; // eax@1
  bool result; // al@2
  unsigned int v5; // esi@3
  NiPointer<PgWinBut> v6; // [sp-4h] [bp-10h]@6

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3
    && (v5 = v3[21].m_kMsgQ.m_uiAlloced) != 0
    && *(_DWORD *)(v5 + 700)
    && CQuestWin2::AddAutoBlinkBut((CQuestWin2 *)v5, *(PgWinBut **)(v5 + 700)) )
  {
    *iEffectKey = *(_DWORD *)&v2->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v6.m_pObject = (PgWinBut *)v5;
    InterlockedIncrement((volatile LONG *)(v5 + 4));
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_UIEffectList,
      *iEffectKey,
      v6);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00441A20) --------------------------------------------------------
void __thiscall Tutorial::RemoveBlinkQuestAccept(Tutorial *this, int *iEffectKey)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v2; // edi@1
  int v3; // ST00_4@1
  PgWin *v4; // esi@1
  NiShader *v5; // eax@2
  NiPointer<PgWin> spWin; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  spWin.m_pObject = 0;
  v2 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_UIEffectList;
  v3 = *iEffectKey;
  v7 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_UIEffectList,
    (const char *)v3,
    (NiPointer<NiShaderLibrary> *)&spWin);
  v4 = spWin.m_pObject;
  if ( spWin.m_pObject )
  {
    v5 = CPostProcessEffect::DynamicCast(&PgWin::m_RTTI, (NiShader *)spWin.m_pObject);
    if ( v5 )
    {
      if ( v5[43].m_uiImplementation )
      {
        if ( CQuestWin2::RemoveAutoBlinkBut((CQuestWin2 *)v5, (PgWinBut *)v5[43].m_uiImplementation) )
          NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(
            v2,
            *iEffectKey);
        v7 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spWin);
      }
      else
      {
        v7 = -1;
        if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          ((void (__cdecl *)(signed int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
      }
    }
    else
    {
      v7 = -1;
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        ((void (__cdecl *)(signed int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
    }
  }
}

//----- (00441B40) --------------------------------------------------------
void __thiscall Tutorial::Tutorial(Tutorial *this)
{
  Tutorial *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST08_4@1
  void *v4; // eax@1
  unsigned int v5; // ST08_4@1

  v1 = this;
  this->baseclass_0.vfptr = (Singleton<Tutorial>Vtbl *)&Tutorial::_vftable_;
  *(_DWORD *)&this->m_bEnable = 0;
  *(_DWORD *)&this->m_bBuyStone = 0;
  *(_DWORD *)&this->m_bLockItemShop = 0;
  *(_WORD *)&this->m_bHideQuestGiveUp = 0;
  this->m_bTutorialFinishMapLink = 0;
  this->m_UIEffectList.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vftable_;
  this->m_UIEffectList.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&this->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_UIEffectList.baseclass_0.m_uiHashSize;
  v1->m_UIEffectList.baseclass_0.m_ppkHashTable = (NiTMapItem<int,NiPointer<PgWin> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_UIEffectList.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMap<int_NiPointer<PgWin>>::_vftable_;
  NsDecal::NsDecal(&v1->m_kTutorialMarkDecal);
  LODWORD(v1->m_kTutorialMarkPos.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_kTutorialMarkPos.y = NiPoint3::ZERO.y;
  v1->m_kTutorialMarkPos.z = NiPoint3::ZERO.z;
  v1->m_spTutorialMark.m_pObject = 0;
  v1->m_pkBoxAnnounceWin = 0;
  v1->m_pkMobKillCountWin = 0;
  v1->m_kBlinkWinList.baseclass_0.vfptr = (NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *>Vtbl *)&NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
  v1->m_kBlinkWinList.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kBlinkWinList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4 = operator new__(0x94u);
  v5 = 4 * v1->m_kBlinkWinList.baseclass_0.m_uiHashSize;
  v1->m_kBlinkWinList.baseclass_0.m_ppkHashTable = (NiTMapItem<enum Tutorial::eBlinkEffectType,PgWin *> **)v4;
  memset((char *)v4, 0, v5);
  v1->m_kBlinkWinList.baseclass_0.vfptr = (NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *>Vtbl *)&NiTMap<enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
}
// 9816F4: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWin___int_NiPointer_PgWin_____vftable_)(void *p, char);
// 981714: using guessed type int (__thiscall *NiTMapBase_DFALL_PgWin ___enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);
// 981734: using guessed type int (__thiscall *NiTMap_int_NiPointer_PgWin_____vftable_)(void *p, char);
// 981754: using guessed type int (__thiscall *NiTMap_enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);
// 981774: using guessed type int (__thiscall *Tutorial___vftable_)(void *p, char);

//----- (00441C80) --------------------------------------------------------
void __thiscall Tutorial::Init(Tutorial *this, PgFrameWork *pkFrameWork)
{
  Tutorial *v2; // ebx@1
  int v3; // edi@3
  char *v4; // eax@3
  NiNode *v5; // esi@3
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@5
  void *v7; // eax@7
  int v8; // eax@8
  NiNode *v9; // esi@9
  int v10; // edi@16
  NiObject *v11; // ecx@17
  NiObject *v12; // esi@17
  int v13; // [sp-14h] [bp-2Ch]@6
  NiNode *spNode; // [sp+0h] [bp-18h]@3
  NiNode *v15; // [sp+4h] [bp-14h]@17
  int pkObject; // [sp+8h] [bp-10h]@5
  int v17; // [sp+14h] [bp-4h]@5

  v2 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = 0;
  v4 = Folder::Merge(&Folder::m_acSystem, "Misc\\TutorialMark.nif");
  v5 = PgUtil::LoadNifFile(v4, 0, 1);
  spNode = v5;
  if ( v5 )
    InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor;
  v17 = 0;
  pkObject = (int)v6(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)"Plane01");
  if ( pkObject )
  {
    v7 = operator new(0xE8u);
    LOBYTE(v17) = 1;
    if ( v7 )
    {
      NiNode::NiNode((NiNode *)v7, 0);
      v3 = v8;
    }
    v9 = v2->m_spTutorialMark.m_pObject;
    LOBYTE(v17) = 0;
    if ( v9 != (NiNode *)v3 )
    {
      if ( v9
        && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v2->m_spTutorialMark.m_pObject = (NiNode *)v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)(v3 + 4));
    }
    v10 = *(_DWORD *)(pkObject + 160);
    while ( v10 )
    {
      v11 = *(NiObject **)(v10 + 8);
      v10 = *(_DWORD *)v10;
      v15 = v2->m_spTutorialMark.m_pObject;
      v12 = NiObject::Clone(v11);
      pkObject = (int)v12;
      if ( v12 )
        InterlockedIncrement((volatile LONG *)&v12->baseclass_0.m_uiRefCount);
      LOBYTE(v17) = 2;
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v15->baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&pkObject);
      LOBYTE(v17) = 0;
      if ( v12 && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.m_uiRefCount) )
        v12->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    }
    (*(void (__stdcall **)(NiNode *, _DWORD))(*(_DWORD *)dword_AA519C + 116))(v2->m_spTutorialMark.m_pObject, 0);
    NsDecal::Init(&v2->m_kTutorialMarkDecal);
    v2->m_kTutorialMarkDecal.m_pkHpTerrain = pkTerrain;
    NsDecal::SetObjectTerrain(&v2->m_kTutorialMarkDecal, spTerrain);
    v2->m_pkBoxAnnounceWin = BoxAnnounceWin::CreateWin(pkFrameWork);
    v5 = spNode;
    v2->m_pkMobKillCountWin = MobKillCountWin::CreateWin(pkFrameWork);
    v13 = (int)&spNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  }
  else
  {
    v13 = (int)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  }
  v17 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v13) )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
}
// A9541C: using guessed type char Folder__m_bInit;
// AA519C: using guessed type int dword_AA519C;

//----- (00441E70) --------------------------------------------------------
void __thiscall Tutorial::SetTutorialMark(Tutorial *this, bool bShow, NiPoint3 kPos, float fSize)
{
  NiNode *v4; // eax@1

  v4 = this->m_spTutorialMark.m_pObject;
  if ( v4 )
  {
    if ( bShow )
      v4->baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v4->baseclass_0.m_uFlags |= 1u;
    LODWORD(this->m_kTutorialMarkPos.x) = (_DWORD)kPos.x;
    this->m_kTutorialMarkPos.y = kPos.y;
    this->m_kTutorialMarkPos.z = kPos.z;
    NsDecal::SetDecalSize(&this->m_kTutorialMarkDecal, fSize, fSize);
  }
}

//----- (00441ED0) --------------------------------------------------------
void __thiscall Tutorial::RemoveBlinkEffect(Tutorial *this, int iEffectKey)
{
  PgWin *v2; // esi@1
  PgWin *v3; // edi@2
  PgWin *v4; // ebx@6
  PgWin *v5; // ebx@9
  LONG (__stdcall *v6)(volatile LONG *); // ebx@13
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *thisa; // [sp+4h] [bp-18h]@1
  NiPointer<PgWin> result; // [sp+8h] [bp-14h]@5
  NiPointer<PgWin> spWin; // [sp+Ch] [bp-10h]@1
  int v10; // [sp+18h] [bp-4h]@1

  spWin.m_pObject = 0;
  v10 = 0;
  thisa = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_UIEffectList;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_UIEffectList,
    (const char *)iEffectKey,
    (NiPointer<NiShaderLibrary> *)&spWin);
  v2 = spWin.m_pObject;
  if ( spWin.m_pObject )
  {
    v3 = PgWin::GetParentWin(spWin.m_pObject);
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v10) = 1;
    if ( v3 )
    {
      PgWin::DetachChildWin(v3, &result, v2);
      if ( result.m_pObject )
      {
        v4 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v4 )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
      }
    }
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, v2);
    v5 = result.m_pObject;
    if ( result.m_pObject
      && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v6 = InterlockedDecrement;
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v2 = 0;
    spWin.m_pObject = 0;
    LOBYTE(v10) = 0;
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
  else
  {
    v6 = InterlockedDecrement;
  }
  NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(thisa, iEffectKey);
  v10 = -1;
  if ( v2 )
  {
    if ( !v6((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  }
}

//----- (00442030) --------------------------------------------------------
bool __thiscall Tutorial::BlinkFreeStat(Tutorial *this, int *iEffectKey, int *iEffectCount)
{
  Tutorial *v3; // edi@1
  PgFrameWork *v4; // eax@1
  void *v5; // ebx@1
  bool result; // al@2
  unsigned int v7; // esi@3
  PgWinBut *v8; // ecx@4
  int v9; // edx@4
  PgWin **v10; // edi@4
  void *v11; // eax@4
  int v12; // edi@4
  int v13; // esi@4
  UIBlinkEffect *v14; // eax@5
  NiPointer<PgWinBut> v15; // [sp-14h] [bp-48h]@5
  NiColorA kColor; // [sp+0h] [bp-34h]@5
  std::vector<PgWin *,std::allocator<PgWin *> > vecWin; // [sp+10h] [bp-24h]@4
  unsigned int _Val; // [sp+20h] [bp-14h]@4
  Tutorial *v19; // [sp+24h] [bp-10h]@1
  int v20; // [sp+30h] [bp-4h]@4

  v3 = this;
  v19 = this;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v5 = 0;
  if ( v4 && (v7 = v4[19].m_kMsgQ.m_uiTail) != 0 )
  {
    *(_DWORD *)&vecWin.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    vecWin.baseclass_0._Mylast = 0;
    vecWin.baseclass_0._Myend = 0;
    _Val = *(_DWORD *)(v7 + 572);
    v20 = 0;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&vecWin,
      &_Val);
    _Val = *(_DWORD *)(v7 + 576);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&vecWin,
      &_Val);
    _Val = *(_DWORD *)(v7 + 580);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&vecWin,
      &_Val);
    _Val = *(_DWORD *)(v7 + 584);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&vecWin,
      &_Val);
    _Val = *(_DWORD *)(v7 + 588);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&vecWin,
      &_Val);
    v9 = *(_DWORD *)&v3->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v10 = vecWin.baseclass_0._Mylast;
    *iEffectKey = v9;
    v11 = *(void **)&vecWin;
    v12 = (signed int)((char *)v10 - *(_DWORD *)&vecWin) >> 2;
    v13 = 0;
    if ( v12 > 0 )
    {
      do
      {
        kColor.r = 255.0;
        v15.m_pObject = v8;
        kColor.g = 250.0;
        _Val = (unsigned int)&v15;
        kColor.b = 205.0;
        kColor.a = 255.0;
        v14 = UIBlinkEffect::CreateWin(*(PgWin **)(*(_DWORD *)&vecWin + 4 * v13), &kColor);
        v15.m_pObject = (PgWinBut *)v14;
        if ( v14 )
          InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
          (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v19->m_UIEffectList,
          v13++ + *iEffectKey,
          v15);
      }
      while ( v13 < v12 );
      v11 = *(void **)&vecWin;
      v5 = 0;
    }
    *iEffectCount = *(_DWORD *)&v19->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] - *iEffectKey;
    if ( v11 != v5 )
      operator delete(v11);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004421C0) --------------------------------------------------------
bool __thiscall Tutorial::BlinkItemShop(Tutorial *this, const char *pcItemIdx, unsigned int uiTab, unsigned int uiPage, int *iEffectKey)
{
  PgFrameWork *v5; // eax@1
  unsigned int v6; // ebx@1
  unsigned int v8; // edi@5
  unsigned int v9; // eax@8
  unsigned int v10; // esi@11
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v11; // eax@16
  IconWin *v12; // eax@24
  PgWin *v13; // esi@24
  int v14; // edx@25
  UIBlinkEffect *v15; // eax@25
  unsigned int v16; // esi@27
  PgWin *v17; // edi@32
  NiPointer<PgWinBut> v18; // [sp-4h] [bp-30h]@25
  NiColorA kColor; // [sp+Ch] [bp-20h]@25
  ItemInfo *pkItemInfo; // [sp+1Ch] [bp-10h]@4
  ItemShopWin *pkWin; // [sp+20h] [bp-Ch]@3
  NiPointer<PgWinBut> val; // [sp+24h] [bp-8h]@1
  unsigned int uiSlot; // [sp+28h] [bp-4h]@5
  unsigned int uiTotal; // [sp+34h] [bp+8h]@11

  val.m_pObject = (PgWinBut *)this;
  v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v6 = 0;
  if ( !v5
    || (pkWin = (ItemShopWin *)v5[25].m_kMsgQ.m_uiTail) == 0
    || (pkItemInfo = ItemInfoTab::GetByInxName((char *)pcItemIdx)) == 0 )
    return 0;
  v8 = 42 * uiPage;
  uiSlot = 0;
  if ( uiTab )
  {
    if ( uiTab != 1 )
    {
      if ( uiTab == 2 )
      {
        v9 = Market::GetTotalAcc();
        goto LABEL_11;
      }
      return 0;
    }
    v9 = Market::GetTotalArmor();
  }
  else
  {
    v9 = Market::GetTotalWeapon();
  }
LABEL_11:
  uiTotal = v9;
  v10 = 42 * uiPage;
  if ( v8 < v9 )
  {
    while ( v6 < 0x2A )
    {
      if ( uiTab )
      {
        if ( uiTab == 1 )
        {
          v11 = Market::GetArmor(v10);
        }
        else
        {
          if ( uiTab != 2 )
            return 0;
          v11 = Market::GetAcc(v10);
        }
      }
      else
      {
        v11 = Market::GetWeaopn(v10);
      }
      if ( v11 && v11->item == pkItemInfo->ID )
      {
        uiSlot = v10 - v8;
        break;
      }
      ++v10;
      ++v6;
      if ( v10 >= uiTotal )
        break;
    }
  }
  v12 = (IconWin *)ItemShopWin::GetInvWin(pkWin, uiSlot);
  v13 = (PgWin *)v12;
  if ( !v12 )
    return 0;
  IconWin::IconDisable(v12, 0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v13, 1u);
  kColor.r = 255.0;
  v14 = (int)val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
  kColor.g = 250.0;
  v18.m_pObject = val.m_pObject;
  kColor.b = 205.0;
  kColor.a = 255.0;
  *iEffectKey = v14;
  v15 = UIBlinkEffect::CreateWin(v13, &kColor);
  v18.m_pObject = (PgWinBut *)v15;
  if ( v15 )
    InterlockedIncrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiExtraDataSize,
    *iEffectKey,
    v18);
  v16 = 2;
  if ( uiTab )
  {
    if ( uiTab == 1 )
    {
      v16 = 3;
    }
    else
    {
      if ( uiTab == 2 )
        v16 = 4;
    }
  }
  v17 = (PgWin *)pkWin;
  if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &pkWin->baseclass_0.baseclass_0.baseclass_0) )
    PgWin::ProcessMsg(v17, 5u, v16, 0);
  if ( PgWinMgr::IsIn(&Pgg_kWinMgr, v17) )
    PgWin::ProcessMsg(v17, 5u, 0xCu, uiPage);
  return 1;
}

//----- (00442380) --------------------------------------------------------
bool __thiscall Tutorial::BlinkSkillShop(Tutorial *this, const char *pcItemIdx, unsigned int uiTab, unsigned int uiPage, int *iEffectKey)
{
  PgFrameWork *v5; // eax@1
  unsigned int v6; // ebx@1
  unsigned int v7; // edi@4
  unsigned int v8; // eax@5
  unsigned int v9; // esi@10
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v10; // eax@13
  IconWin *v11; // eax@23
  PgWin *v12; // esi@23
  int v13; // ecx@24
  UIBlinkEffect *v14; // eax@24
  PgWin *v15; // esi@26
  bool result; // al@32
  NiPointer<PgWinBut> v17; // [sp-4h] [bp-30h]@24
  NiColorA kColor; // [sp+Ch] [bp-20h]@24
  ItemInfo *pkItemInfo; // [sp+1Ch] [bp-10h]@3
  NPCSkillWin *pkWin; // [sp+20h] [bp-Ch]@2
  Tutorial *v21; // [sp+24h] [bp-8h]@1
  unsigned int uiSlot; // [sp+28h] [bp-4h]@4
  unsigned int uiTotal; // [sp+34h] [bp+8h]@10

  v21 = this;
  v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v6 = 0;
  if ( !v5
    || (pkWin = *(NPCSkillWin **)&v5[25].m_bInit) == 0
    || (pkItemInfo = ItemInfoTab::GetByInxName((char *)pcItemIdx)) == 0 )
    goto LABEL_33;
  v7 = 42 * uiPage;
  uiSlot = 0;
  switch ( uiTab )
  {
    case 0u:
      v8 = Market::GetTotalFigActiveSkill();
      break;
    case 1u:
      v8 = Market::GetTotalCleActiveSkill();
      break;
    case 2u:
      v8 = Market::GetTotalArcActiveSkill();
      break;
    case 3u:
      v8 = Market::GetTotalMagActiveSkill();
      break;
    case 4u:
      v8 = Market::GetTotalJokActiveSkill();
      break;
    default:
      goto LABEL_33;
  }
  uiTotal = v8;
  v9 = 42 * uiPage;
  if ( v7 < v8 )
  {
    while ( v6 < 0x2A )
    {
      switch ( uiTab )
      {
        case 0u:
          v10 = Market::GetFigActSkill(v9);
          break;
        case 1u:
          v10 = Market::GetCleActSkill(v9);
          break;
        case 2u:
          v10 = Market::GetArcActSkill(v9);
          break;
        case 3u:
          v10 = Market::GetMagActSkill(v9);
          break;
        case 4u:
          v10 = Market::GetJokActSkill(v9);
          break;
      }
      if ( v10 && v10->item == pkItemInfo->ID )
      {
        uiSlot = v9 - v7;
        break;
      }
      ++v9;
      ++v6;
      if ( v9 >= uiTotal )
        break;
    }
  }
  v11 = (IconWin *)NPCSkillWin::GetInvWin(pkWin, uiSlot);
  v12 = (PgWin *)v11;
  if ( v11 )
  {
    IconWin::IconDisable(v11, 0);
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v12, 1u);
    kColor.r = 255.0;
    v13 = *(_DWORD *)&v21->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    kColor.g = 250.0;
    v17.m_pObject = (PgWinBut *)v13;
    kColor.b = 205.0;
    kColor.a = 255.0;
    *iEffectKey = v13;
    v14 = UIBlinkEffect::CreateWin(v12, &kColor);
    v17.m_pObject = (PgWinBut *)v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v21->m_UIEffectList,
      *iEffectKey,
      v17);
    v15 = (PgWin *)pkWin;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &pkWin->baseclass_0.baseclass_0.baseclass_0) )
      PgWin::ProcessMsg(v15, 5u, 2u, 0);
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, v15) )
      PgWin::ProcessMsg(v15, 5u, 8u, uiTab);
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, v15) )
      PgWin::ProcessMsg(v15, 5u, 0xCu, uiPage);
    result = 1;
  }
  else
  {
LABEL_33:
    result = 0;
  }
  return result;
}

//----- (00442590) --------------------------------------------------------
bool __thiscall Tutorial::BlinkSkill(Tutorial *this, const char *pcSkillIdx, int *iEffectKey)
{
  PgFrameWork *v3; // eax@1
  bool result; // al@2
  IDirectMessenger *v5; // ebx@3
  unsigned int v6; // edi@5
  SkillIcon **v7; // ebx@5
  SkillIcon *v8; // esi@6
  int v9; // ecx@9
  UIBlinkEffect *v10; // eax@9
  NiPointer<PgWinBut> v11; // [sp-4h] [bp-24h]@9
  NiColorA kColor; // [sp+Ch] [bp-14h]@9
  Tutorial *v13; // [sp+1Ch] [bp-4h]@1
  ActiveSkillInfo *pkActiveSkillInfo; // [sp+28h] [bp+8h]@4

  v13 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3
    && (v5 = v3[20].baseclass_0.m_pkMsgHooker) != 0
    && (pkActiveSkillInfo = ActSkillInfoTab::GetByInxName((char *)pcSkillIdx)) != 0 )
  {
    v6 = 0;
    v7 = (SkillIcon **)&v5[29].m_pkMsgHooker;
    do
    {
      v8 = *v7;
      if ( *v7 && SkillIcon::GetSkill(*v7) == pkActiveSkillInfo->ID )
        break;
      ++v6;
      ++v7;
    }
    while ( v6 < 8 );
    v9 = *(_DWORD *)&v13->m_UIEffectList.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    kColor.r = 255.0;
    v11.m_pObject = (PgWinBut *)v9;
    kColor.g = 250.0;
    kColor.b = 205.0;
    kColor.a = 255.0;
    *iEffectKey = v9;
    v10 = UIBlinkEffect::CreateWin(&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, &kColor);
    v11.m_pObject = (PgWinBut *)v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v13->m_UIEffectList,
      *iEffectKey,
      v11);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00442670) --------------------------------------------------------
bool __thiscall Tutorial::IsLearnSkill(Tutorial *this, const char *pcSkillIdx)
{
  unsigned __int16 *v2; // eax@1
  bool result; // al@2

  v2 = (unsigned __int16 *)ActSkillInfoTab::GetByInxName((char *)pcSkillIdx);
  if ( v2 )
    result = Skill::IsLearnSkill(*v2);
  else
    result = 0;
  return result;
}

//----- (004426A0) --------------------------------------------------------
bool __thiscall Tutorial::IsSelectSkill(Tutorial *this, const char *pcSkillIdx)
{
  int v2; // eax@2
  __int16 v3; // si@3
  ActiveSkillInfo *v4; // eax@4
  bool result; // al@5

  if ( PgCursor::ms_pkDrop
    && (v2 = *(_DWORD *)(PgCursor::ms_pkDrop + 4)) != 0
    && (v3 = *(_WORD *)(v2 + 20), v3 != -1)
    && (v4 = ActSkillInfoTab::GetByInxName((char *)pcSkillIdx)) != 0 )
    result = v4->ID == v3;
  else
    result = 0;
  return result;
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (004426F0) --------------------------------------------------------
bool __thiscall Tutorial::LockItemShopInv(Tutorial *this, const char *pcIgnoreItemIdx, unsigned int uiTab, unsigned int uiPage)
{
  PgFrameWork *v4; // eax@1
  unsigned int v6; // edi@4
  unsigned int v7; // eax@8
  unsigned int v8; // esi@11
  unsigned int v9; // ebx@12
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v10; // eax@17
  unsigned int v11; // edi@27
  IconWin *v12; // eax@29
  IconWin *v13; // esi@29
  ItemShopWin *pkWin; // [sp+0h] [bp-Ch]@3
  ItemInfo *pkItemInfo; // [sp+4h] [bp-8h]@4
  int uiIgnoreSlot; // [sp+8h] [bp-4h]@4
  unsigned int uiTotal; // [sp+14h] [bp+8h]@11

  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v4 || (pkWin = (ItemShopWin *)v4[25].m_kMsgQ.m_uiTail) == 0 )
    return 0;
  pkItemInfo = ItemInfoTab::GetByInxName((char *)pcIgnoreItemIdx);
  v6 = 42 * uiPage;
  uiIgnoreSlot = 42;
  if ( uiTab )
  {
    if ( uiTab == 1 )
    {
      v7 = Market::GetTotalArmor();
    }
    else
    {
      if ( uiTab != 2 )
        return 0;
      v7 = Market::GetTotalAcc();
    }
  }
  else
  {
    v7 = Market::GetTotalWeapon();
  }
  uiTotal = v7;
  v8 = 42 * uiPage;
  if ( v6 < v7 )
  {
    v9 = 0;
    while ( v9 < 0x2A )
    {
      if ( uiTab )
      {
        if ( uiTab == 1 )
        {
          v10 = Market::GetArmor(v8);
        }
        else
        {
          if ( uiTab != 2 )
            return 0;
          v10 = Market::GetAcc(v8);
        }
      }
      else
      {
        v10 = Market::GetWeaopn(v8);
      }
      if ( v10 && pkItemInfo && v10->item == pkItemInfo->ID )
      {
        uiIgnoreSlot = v8 - v6;
        break;
      }
      ++v8;
      ++v9;
      if ( v8 >= uiTotal )
        break;
    }
  }
  v11 = 0;
  do
  {
    if ( v11 != uiIgnoreSlot )
    {
      v12 = (IconWin *)ItemShopWin::GetInvWin(pkWin, v11);
      v13 = v12;
      if ( v12 )
      {
        IconWin::IconDisable(v12, 1);
        v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v13,
          0);
      }
    }
    ++v11;
  }
  while ( v11 < 0x2A );
  return 1;
}

//----- (00442810) --------------------------------------------------------
bool __thiscall Tutorial::LockSkillShopInv(Tutorial *this, const char *pcIgnoreItemIdx, unsigned int uiTab, unsigned int uiPage)
{
  PgFrameWork *v4; // eax@1
  bool result; // al@2
  unsigned int v6; // edi@4
  unsigned int v7; // eax@5
  unsigned int v8; // esi@10
  unsigned int v9; // ebx@11
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v10; // eax@14
  unsigned int v11; // edi@23
  IconWin *v12; // eax@25
  IconWin *v13; // esi@25
  NPCSkillWin *pkWin; // [sp+0h] [bp-Ch]@3
  ItemInfo *pkItemInfo; // [sp+4h] [bp-8h]@4
  int uiIgnoreSlot; // [sp+8h] [bp-4h]@4
  unsigned int uiTotal; // [sp+14h] [bp+8h]@10

  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 && (pkWin = *(NPCSkillWin **)&v4[25].m_bInit) != 0 )
  {
    pkItemInfo = ItemInfoTab::GetByInxName((char *)pcIgnoreItemIdx);
    v6 = 42 * uiPage;
    uiIgnoreSlot = 42;
    switch ( uiTab )
    {
      case 0u:
        v7 = Market::GetTotalFigActiveSkill();
        goto LABEL_10;
      case 1u:
        v7 = Market::GetTotalCleActiveSkill();
        goto LABEL_10;
      case 2u:
        v7 = Market::GetTotalArcActiveSkill();
        goto LABEL_10;
      case 3u:
        v7 = Market::GetTotalMagActiveSkill();
        goto LABEL_10;
      case 4u:
        v7 = Market::GetTotalJokActiveSkill();
LABEL_10:
        uiTotal = v7;
        v8 = 42 * uiPage;
        if ( v6 >= v7 )
          goto LABEL_23;
        v9 = 0;
        break;
      default:
        return 0;
    }
    while ( v9 < 0x2A )
    {
      switch ( uiTab )
      {
        case 0u:
          v10 = Market::GetFigActSkill(v8);
          break;
        case 1u:
          v10 = Market::GetCleActSkill(v8);
          break;
        case 2u:
          v10 = Market::GetArcActSkill(v8);
          break;
        case 3u:
          v10 = Market::GetMagActSkill(v8);
          break;
        case 4u:
          v10 = Market::GetJokActSkill(v8);
          break;
      }
      if ( v10 && pkItemInfo && v10->item == pkItemInfo->ID )
      {
        uiIgnoreSlot = v8 - v6;
        break;
      }
      ++v8;
      ++v9;
      if ( v8 >= uiTotal )
        break;
    }
LABEL_23:
    v11 = 0;
    do
    {
      if ( v11 != uiIgnoreSlot )
      {
        v12 = (IconWin *)NPCSkillWin::GetInvWin(pkWin, v11);
        v13 = v12;
        if ( v12 )
        {
          IconWin::IconDisable(v12, 1);
          v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v13,
            0);
        }
      }
      ++v11;
    }
    while ( v11 < 0x2A );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00442970) --------------------------------------------------------
void __thiscall Singleton<Tutorial>::_Singleton<Tutorial>(Singleton<Tutorial> *this)
{
  this->vfptr = (Singleton<Tutorial>Vtbl *)&Singleton<Tutorial>::_vftable_;
  if ( Singleton<Tutorial>::m_pInstance )
  {
    ((void (__stdcall *)(_DWORD))Singleton<Tutorial>::m_pInstance->baseclass_0.vfptr->__vecDelDtor)(1);
    Singleton<Tutorial>::m_pInstance = 0;
  }
  Singleton<Tutorial>::m_bDestroy = 1;
}
// 9816EC: using guessed type int (__thiscall *Singleton_Tutorial____vftable_)(void *p, char);
// A97654: using guessed type char Singleton_Tutorial___m_bDestroy;

//----- (004429A0) --------------------------------------------------------
void *__thiscall Singleton<Tutorial>::_vector_deleting_destructor_(Singleton<Tutorial> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (Singleton<Tutorial>Vtbl *)&Singleton<Tutorial>::_vftable_;
  if ( Singleton<Tutorial>::m_pInstance )
  {
    ((void (__stdcall *)(_DWORD))Singleton<Tutorial>::m_pInstance->baseclass_0.vfptr->__vecDelDtor)(1);
    Singleton<Tutorial>::m_pInstance = 0;
  }
  Singleton<Tutorial>::m_bDestroy = 1;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9816EC: using guessed type int (__thiscall *Singleton_Tutorial____vftable_)(void *p, char);
// A97654: using guessed type char Singleton_Tutorial___m_bDestroy;

//----- (004429F0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>(NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> > *this)
{
  NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9816F4: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWin___int_NiPointer_PgWin_____vftable_)(void *p, char);

//----- (00442A10) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this, unsigned int key, NiPointer<PgWinBut> val)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v3; // esi@1
  unsigned int (__thiscall *v4)(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *, unsigned int); // edx@1
  int v5; // ebx@1
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > *v6; // edi@1
  int v7; // edi@4
  PgWinBut *v8; // [sp-10h] [bp-20h]@4
  PgWinBut **v9; // [sp+0h] [bp-10h]@4
  int v10; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v4 = this->vfptr->KeyToHashIndex;
  v10 = 0;
  v5 = ((int (__stdcall *)(unsigned int))v4)(key);
  v6 = v3->m_ppkHashTable[v5];
  if ( v6 )
  {
    while ( !v3->vfptr->IsKeysEqual(v3, key, v6->m_key) )
    {
      v6 = v6->m_pkNext;
      if ( !v6 )
        goto LABEL_4;
    }
    ((void (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *, NiTMapItem<unsigned long,NiPointer<PgWinBut> > *, PgWinBut *))v3->vfptr->ClearValue)(
      v3,
      v6,
      v8);
    v8 = val.m_pObject;
    v9 = &v8;
    if ( val.m_pObject )
      InterlockedIncrement((volatile LONG *)&val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    ((void (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *, NiTMapItem<unsigned long,NiPointer<PgWinBut> > *, unsigned int))v3->vfptr->SetValue)(
      v3,
      v6,
      key);
  }
  else
  {
LABEL_4:
    v7 = ((int (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *, PgWinBut *))v3->vfptr->NewItem)(
           v3,
           v8);
    v8 = val.m_pObject;
    v9 = &v8;
    if ( val.m_pObject )
      InterlockedIncrement((volatile LONG *)&val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    ((void (__thiscall *)(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *, int, unsigned int))v3->vfptr->SetValue)(
      v3,
      v7,
      key);
    *(_DWORD *)v7 = v3->m_ppkHashTable[v5];
    v3->m_ppkHashTable[v5] = (NiTMapItem<unsigned long,NiPointer<PgWinBut> > *)v7;
    ++*(_DWORD *)&v3->m_kAllocator.___u0.baseclass_0.dummy[0];
  }
  v10 = -1;
  if ( val.m_pObject
    && !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( val.m_pObject )
      val.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)val.m_pObject,
        1u);
  }
}

//----- (00442B40) --------------------------------------------------------
void __thiscall NiTMap<int_NiPointer<PgWin>>::_NiTMap<int_NiPointer<PgWin>>(NiTMap<int,NiPointer<PgWin> > *this)
{
  NiTMap<int,NiPointer<PgWin> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMap<int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 9816F4: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWin___int_NiPointer_PgWin_____vftable_)(void *p, char);
// 981734: using guessed type int (__thiscall *NiTMap_int_NiPointer_PgWin_____vftable_)(void *p, char);

//----- (00442BB0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>(NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *> *this)
{
  NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *> *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *>Vtbl *)&NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 981714: using guessed type int (__thiscall *NiTMapBase_DFALL_PgWin ___enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);

//----- (00442BD0) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9816F4: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWin___int_NiPointer_PgWin_____vftable_)(void *p, char);

//----- (00442C10) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vector_deleting_destructor_(NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *> *this, unsigned int a2)
{
  NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *> *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *>Vtbl *)&NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981714: using guessed type int (__thiscall *NiTMapBase_DFALL_PgWin ___enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);

//----- (00442C50) --------------------------------------------------------
NiPointer<PgWin> *__thiscall PgWin::DetachChildWin(PgWin *this, NiPointer<PgWin> *result, PgWin *pkChild)
{
  PgWin *v3; // ecx@1
  PgWin *v4; // esi@1
  int v5; // eax@2
  int v6; // eax@3
  char v7; // al@6
  PgWin *v8; // esi@11

  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
    &pkChild,
    pkChild);
  v3 = pkChild;
  v4 = pkChild;
  if ( pkChild )
  {
    v6 = ((int (*)(void))pkChild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v6 )
    {
      while ( (NiRTTI *)v6 != &PgWin::m_RTTI )
      {
        v6 = *(_DWORD *)(v6 + 4);
        if ( !v6 )
          goto LABEL_6;
      }
      v7 = 1;
    }
    else
    {
LABEL_6:
      v7 = 0;
    }
    v3 = pkChild;
    v5 = v7 != 0 ? (int)v4 : 0;
  }
  else
  {
    v5 = 0;
  }
  result->m_pObject = (PgWin *)v5;
  if ( v5 )
  {
    InterlockedIncrement((volatile LONG *)(v5 + 4));
    v3 = pkChild;
  }
  if ( v3 )
  {
    v8 = v3;
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
  }
  return result;
}

//----- (00442D30) --------------------------------------------------------
void *__thiscall NiTMap<int_NiPointer<PgWin>>::_vector_deleting_destructor_(NiTMap<int,NiPointer<PgWin> > *this, unsigned int a2)
{
  NiTMap<int,NiPointer<PgWin> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMap<int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<PgWin> >,int,NiPointer<PgWin> >Vtbl *)&NiTMapBase<DFALL<NiPointer<PgWin>>_int_NiPointer<PgWin>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9816F4: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_PgWin___int_NiPointer_PgWin_____vftable_)(void *p, char);
// 981734: using guessed type int (__thiscall *NiTMap_int_NiPointer_PgWin_____vftable_)(void *p, char);

//----- (00442DB0) --------------------------------------------------------
void *__thiscall NiTMap<enum__Tutorial::eBlinkEffectType_PgWin__>::_scalar_deleting_destructor_(NiTMap<enum Tutorial::eBlinkEffectType,PgWin *> *this, unsigned int a2)
{
  NiTMap<enum Tutorial::eBlinkEffectType,PgWin *> *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *>Vtbl *)&NiTMap<enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<PgWin *>,enum Tutorial::eBlinkEffectType,PgWin *>Vtbl *)&NiTMapBase<DFALL<PgWin__>_enum__Tutorial::eBlinkEffectType_PgWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981714: using guessed type int (__thiscall *NiTMapBase_DFALL_PgWin ___enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);
// 981754: using guessed type int (__thiscall *NiTMap_enum  Tutorial__eBlinkEffectType_PgWin _____vftable_)(void *p, char);

//----- (00442E30) --------------------------------------------------------
void __thiscall NsDecal::SetDecalSize(NsDecal *this, float fHeight_, float fWidth_)
{
  NsDecal *v3; // esi@1
  NiNode *v4; // eax@1
  NiAVObject *v5; // edi@2
  NiAVObject *v6; // edx@3
  NiColor kColor; // [sp+14h] [bp-Ch]@3

  v3 = this;
  v4 = this->m_spCollider.m_pObject;
  this->m_fDecalHight = fHeight_;
  this->m_fDecalWidth = fWidth_;
  if ( v4 )
  {
    v5 = v4->baseclass_0.m_spCollisionObject.m_pObject[3].m_pkSceneObject;
    if ( ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(v5) == 1 )
    {
      v5->m_kLocal.m_Rotate.m_pEntry[0][0] = v3->m_fDecalWidth * 0.5;
      v5->m_kLocal.m_Rotate.m_pEntry[0][1] = 0.5 * v3->m_fDecalHight;
      v5->m_kLocal.m_Rotate.m_pEntry[0][2] = v3->m_fDecalHight;
      NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v3->m_spCollider.m_pObject->m_kChildren);
      v6 = (NiAVObject *)v3->m_spCollider.m_pObject;
      kColor.r = 0.0;
      kColor.g = 0.0;
      kColor.b = 1.0;
      NiOptimizeABV::CreateWireABV(v6, &kColor, 1.0, "WireABVTemp", 0);
      NiAVObject::Update(&v3->m_spCollider.m_pObject->baseclass_0, 0.0, 1);
    }
  }
}

//----- (00442ED0) --------------------------------------------------------
void *__thiscall Tutorial::_vector_deleting_destructor_(Tutorial *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  Tutorial::_Tutorial(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00442F00) --------------------------------------------------------
void __thiscall UIBlinkEffect::UIBlinkEffect(UIBlinkEffect *this)
{
  UIBlinkEffect *v1; // esi@1

  v1 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UIBlinkEffect::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UIBlinkEffect::_vftable_;
  v1->m_bActive = 0;
}
// 981794: using guessed type int (__stdcall *UIBlinkEffect___vftable_)(int uiFlags);
// 9817B4: using guessed type int (__thiscall *UIBlinkEffect___vftable_)(void *p, char);

//----- (00442F30) --------------------------------------------------------
void __thiscall UIBlinkEffect::_UIBlinkEffect(UIBlinkEffect *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UIBlinkEffect::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UIBlinkEffect::_vftable_;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
}
// 981794: using guessed type int (__stdcall *UIBlinkEffect___vftable_)(int uiFlags);
// 9817B4: using guessed type int (__thiscall *UIBlinkEffect___vftable_)(void *p, char);

//----- (00442F50) --------------------------------------------------------
bool __thiscall UIBlinkEffect::Create(UIBlinkEffect *this, PgWin *pkParent, NiColorA *kColor)
{
  unsigned int v3; // edi@1
  unsigned int v4; // ebx@1
  NiSourceTexture *v5; // eax@3
  bool result; // al@3
  PgWinSpr *thisa; // [sp+Ch] [bp-4h]@1

  v3 = 0;
  v4 = 0;
  thisa = (PgWinSpr *)this;
  if ( pkParent )
  {
    v3 = ((int (__thiscall *)(_DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(pkParent);
    v4 = ((int (__thiscall *)(_DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pkParent);
  }
  v5 = PgUtil::Create1PixelSourceTexture(
         (signed int)kColor->r,
         (signed int)kColor->g,
         (signed int)kColor->b,
         (signed int)kColor->a);
  result = PgWinSpr::Create(thisa, v5, 0, 0, v3, v4, pkParent, 0, 0);
  if ( result )
  {
    thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)thisa,
      0);
    result = 1;
  }
  return result;
}

//----- (00443050) --------------------------------------------------------
bool __thiscall UIBlinkEffect::Create(UIBlinkEffect *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, NiColorA *kColor)
{
  PgWinSpr *v7; // esi@1
  NiSourceTexture *v8; // eax@1
  bool result; // al@1

  v7 = (PgWinSpr *)this;
  v8 = PgUtil::Create1PixelSourceTexture(
         (signed int)kColor->r,
         (signed int)kColor->g,
         (signed int)kColor->b,
         (signed int)kColor->a);
  result = PgWinSpr::Create(v7, v8, iXPos, iYPos, uiWidth, uiHeight, pkParent, 0, 0);
  if ( result )
  {
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v7,
      0);
    result = 1;
  }
  return result;
}

//----- (00443130) --------------------------------------------------------
void __thiscall UIBlinkEffect::UpdateMeWin(UIBlinkEffect *this, float fTime)
{
  double v2; // st7@0
  UIBlinkEffect *v3; // esi@1
  double v4; // st6@2
  float v5; // ST08_4@3
  double v6; // st7@5
  float v7; // ST08_4@7
  float v8; // ST00_4@11
  float fAlpha; // [sp+8h] [bp-4h]@1

  v3 = this;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
  fAlpha = v2;
  if ( !v3->m_bActive )
  {
    v4 = fAlpha;
    if ( fAlpha <= 1.0 )
    {
      v7 = v4 + Timer::ms_fDeltaTime;
      v4 = v7;
    }
    if ( v4 >= 1.0 )
    {
      v3->m_bActive = 1;
      v6 = (float)1.0;
      goto LABEL_11;
    }
LABEL_10:
    v6 = v4;
    goto LABEL_11;
  }
  v4 = fAlpha;
  if ( fAlpha >= 0.0 )
  {
    v5 = v4 - Timer::ms_fDeltaTime;
    v4 = v5;
  }
  if ( v4 > 0.0 )
    goto LABEL_10;
  v3->m_bActive = 0;
  v6 = (float)0.0;
LABEL_11:
  v8 = v6;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v3,
    LODWORD(v8));
}
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (004431D0) --------------------------------------------------------
UIBlinkEffect *__cdecl UIBlinkEffect::CreateWin(PgWin *pkParent, NiColorA *kColor)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@8
  UIBlinkEffect *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x12Cu);
  v3 = v2;
  result.m_pObject = (PgWin *)v2;
  v7 = 0;
  if ( v2 )
  {
    PgWinSpr::PgWinSpr((PgWinSpr *)v2);
    *(_DWORD *)v3 = &UIBlinkEffect::_vftable_;
    *((_DWORD *)v3 + 58) = &UIBlinkEffect::_vftable_;
    *((_BYTE *)v3 + 296) = 0;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgWin *, NiColorA *))(*(_DWORD *)v3 + 520))(v3, pkParent, kColor) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = (UIBlinkEffect *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}
// 981794: using guessed type int (__stdcall *UIBlinkEffect___vftable_)(int uiFlags);
// 9817B4: using guessed type int (__thiscall *UIBlinkEffect___vftable_)(void *p, char);

//----- (00443320) --------------------------------------------------------
UIBlinkEffect *__cdecl UIBlinkEffect::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, NiColorA *kColor)
{
  void *v6; // eax@1
  void *v7; // esi@1
  PgWin *v8; // edi@8
  UIBlinkEffect *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x12Cu);
  v7 = v6;
  result.m_pObject = (PgWin *)v6;
  v11 = 0;
  if ( v6 )
  {
    PgWinSpr::PgWinSpr((PgWinSpr *)v6);
    *(_DWORD *)v7 = &UIBlinkEffect::_vftable_;
    *((_DWORD *)v7 + 58) = &UIBlinkEffect::_vftable_;
    *((_BYTE *)v7 + 296) = 0;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)v7 + 1);
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, unsigned int, PgWin *, NiColorA *))(*(_DWORD *)v7 + 516))(
                          v7,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          kColor) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = (UIBlinkEffect *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}
// 981794: using guessed type int (__stdcall *UIBlinkEffect___vftable_)(int uiFlags);
// 9817B4: using guessed type int (__thiscall *UIBlinkEffect___vftable_)(void *p, char);

//----- (00443480) --------------------------------------------------------
void *__thiscall UIBlinkEffect::_vector_deleting_destructor_(UIBlinkEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UIBlinkEffect::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UIBlinkEffect::_vftable_;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981794: using guessed type int (__stdcall *UIBlinkEffect___vftable_)(int uiFlags);
// 9817B4: using guessed type int (__thiscall *UIBlinkEffect___vftable_)(void *p, char);

//----- (004434C0) --------------------------------------------------------
void __thiscall UIUtil::SetParent(UIUtil *this, PgWin *pkParent)
{
  this->m_pkParent = pkParent;
}

//----- (004434D0) --------------------------------------------------------
void __thiscall UIUtil::SetOffset(UIUtil *this, int iXOff, int iYOff)
{
  this->m_iXOff = iXOff;
  this->m_iYOff = iYOff;
}

//----- (004434F0) --------------------------------------------------------
void __thiscall UIUtil::GetOffset(UIUtil *this, int *iXOff, int *iYOff)
{
  *iXOff = this->m_iXOff;
  *iYOff = this->m_iYOff;
}

//----- (00443510) --------------------------------------------------------
PgWinText *__thiscall UIUtil::CreateAttachedText(UIUtil *this, PgWin *pkParent, char *pcText, D3DXCOLOR kColor, unsigned int uiAlign)
{
  PgWin *v5; // esi@1
  PgFont *v6; // ST10_4@1
  unsigned int v7; // ST0C_4@1
  unsigned int v8; // eax@1
  PgWinText *v9; // esi@1

  v5 = pkParent;
  v6 = Font::Get(0);
  v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5);
  v8 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
  v9 = PgWinText::CreateWin(0, 1, v8, v7, v6, pkParent, 0, 0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v9,
    uiAlign);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)pcText);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)&kColor);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  return v9;
}

//----- (004435A0) --------------------------------------------------------
bool __thiscall UIUtil::CreateFrame(UIUtil *this, const char *pkFileName, const char *pkSprName, PgWinFrame *pkWinFrame, PgFrameWork *pkFrameWork, const char *pkFrameName)
{
  return 1;
}

//----- (004435B0) --------------------------------------------------------
PgFont *__thiscall UIUtil::AddOutLineFromFontType(UIUtil *this, Font::Type pkType, unsigned int dwOutline)
{
  PgFont *result; // eax@2
  void *v4; // eax@3
  CSpFont *v5; // eax@4
  CSpFont *v6; // esi@4
  Font::FontDefine kFontDefine; // [sp+0h] [bp-40h]@3
  int v8; // [sp+3Ch] [bp-4h]@3

  if ( (signed int)pkType < 12 )
  {
    memcpy(&kFontDefine, Font::GetFontDefine(pkType), sizeof(kFontDefine));
    v4 = operator new(0x184u);
    v8 = 0;
    if ( v4 )
    {
      PgFont::PgFont((PgFont *)v4);
      v6 = v5;
    }
    else
    {
      v6 = 0;
    }
    v8 = -1;
    if ( v6 )
      CSpFont::Create(
        v6,
        (char *)kFontDefine.pFacename,
        kFontDefine.Height,
        kFontDefine.Width,
        kFontDefine.Weight,
        kFontDefine.Italic,
        kFontDefine.CharSet,
        kFontDefine.OutputPrecision,
        kFontDefine.Quality,
        kFontDefine.PitchAndFamily,
        dwOutline,
        0x200u,
        5u);
    result = (PgFont *)v6;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00443690) --------------------------------------------------------
PgWinText *__thiscall UIUtil::CreateTextNoTag(UIUtil *this, int uiLeft, int uiTop, int uiWidth, int uiHeight, char *pcText, PgWin *pkParent, unsigned int uiMargin, D3DXCOLOR kColor, unsigned int uiAlign, NiSourceTexture *pkTexture, bool bAutoAbberitate)
{
  PgWin *v12; // ST28_4@1
  UIUtil *v13; // esi@1
  bool v14; // ST24_1@1
  PgFont *v15; // eax@1
  PgWinText *v16; // esi@1

  v12 = g_pkToolTipWin;
  v13 = this;
  v14 = bAutoAbberitate;
  v15 = Font::Get(SMALL);
  v16 = (PgWinText *)PgWinAbbreviateText::CreateWin(
                       uiMargin + uiLeft - v13->m_iXOff,
                       uiMargin + uiTop - v13->m_iYOff,
                       uiWidth - uiMargin,
                       uiHeight - uiMargin,
                       v15,
                       pkParent,
                       0,
                       0,
                       0,
                       v14,
                       v12,
                       0x1Eu);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v16,
    uiAlign);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v16,
    (unsigned int)&kColor);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v16,
    (unsigned int)pcText);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  return v16;
}

//----- (00443730) --------------------------------------------------------
void __thiscall UIUtil::UIUtil(UIUtil *this)
{
  UIUtil *v1; // esi@1
  NiAVObject *v2; // edi@1

  v1 = this;
  this->vfptr = (UIUtilVtbl *)&UIUtil::_vftable_;
  this->m_spUIGeom.m_pObject = 0;
  this->m_iXOff = 0;
  this->m_iYOff = 0;
  this->m_pkParent = 0;
  v2 = this->m_spUIGeom.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spUIGeom.m_pObject = 0;
  }
}
// 9819FC: using guessed type int (__thiscall *UIUtil___vftable_)(void *p, char);

//----- (004437B0) --------------------------------------------------------
void __thiscall UIUtil::_UIUtil(UIUtil *this)
{
  UIUtil *v1; // edi@1
  NiAVObject *v2; // esi@1
  NiAVObject *v3; // edi@6

  v1 = this;
  this->vfptr = (UIUtilVtbl *)&UIUtil::_vftable_;
  v2 = this->m_spUIGeom.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spUIGeom.m_pObject = 0;
  }
  v3 = v1->m_spUIGeom.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}
// 9819FC: using guessed type int (__thiscall *UIUtil___vftable_)(void *p, char);

//----- (00443850) --------------------------------------------------------
void __thiscall UIUtil::SetUIGeom(UIUtil *this, NiAVObject *pkNode)
{
  UIUtil *v2; // ebx@1
  NiAVObject *v3; // esi@1

  v2 = this;
  v3 = this->m_spUIGeom.m_pObject;
  if ( v3 != pkNode )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spUIGeom.m_pObject = pkNode;
    if ( pkNode )
      InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (004438A0) --------------------------------------------------------
PgWinBut *__thiscall UIUtil::CreateBtn(UIUtil *this, unsigned int uiCmdMsg, char *pcNormal, char *pcFocus, char *pcPushed, char *pcDisable, NiSourceTexture *pkTexture)
{
  UIUtil *v7; // esi@1
  PgSprData *v8; // edi@1

  v7 = this;
  v8 = PgSprData::Create(this->m_spUIGeom.m_pObject, pcNormal, (int *)&pcNormal, (int *)&pkTexture, pkTexture);
  if ( pcFocus )
    PgSprData::Add(v8, v7->m_spUIGeom.m_pObject, pcFocus);
  if ( pcPushed )
    PgSprData::Add(v8, v7->m_spUIGeom.m_pObject, pcPushed);
  if ( pcDisable )
    PgSprData::Add(v8, v7->m_spUIGeom.m_pObject, pcDisable);
  return PgWinBut::CreateWin(
           (int)&pcNormal[-v7->m_iXOff],
           (int)((char *)pkTexture - v7->m_iYOff),
           v8,
           v7->m_pkParent,
           uiCmdMsg,
           0,
           0);
}

//----- (00443930) --------------------------------------------------------
PgWinBut *__thiscall UIUtil::CreateBtnNoSpr(UIUtil *this, unsigned int uiCmdMsg, char *pcTag)
{
  UIUtil *v3; // esi@1
  PgWinBut *result; // eax@2
  int uiLeft; // [sp+4h] [bp-Ch]@1
  int uiTop; // [sp+8h] [bp-8h]@1
  unsigned int uiWidth; // [sp+Ch] [bp-4h]@1

  v3 = this;
  if ( PgUtil::GetTriShapeRect(this->m_spUIGeom.m_pObject, pcTag, &uiLeft, &uiTop, &uiWidth, (unsigned int *)&pcTag) )
    result = PgWinBut::CreateWin(
               uiLeft - v3->m_iXOff,
               uiTop - v3->m_iYOff,
               uiWidth,
               (unsigned int)pcTag,
               v3->m_pkParent,
               uiCmdMsg,
               0,
               0);
  else
    result = 0;
  return result;
}

//----- (004439A0) --------------------------------------------------------
PgWinCloseBut *__thiscall UIUtil::CreateCloseBtn(UIUtil *this, char *pcNormal, char *pcFocus, char *pcClick)
{
  UIUtil *v4; // esi@1
  PgSprData *v5; // edi@1
  int uiLeft; // [sp+8h] [bp-4h]@1

  v4 = this;
  v5 = PgSprData::Create(this->m_spUIGeom.m_pObject, pcNormal, &uiLeft, (int *)&pcNormal, 0);
  if ( pcFocus )
    PgSprData::Add(v5, v4->m_spUIGeom.m_pObject, pcFocus);
  if ( pcClick )
    PgSprData::Add(v5, v4->m_spUIGeom.m_pObject, pcClick);
  return PgWinCloseBut::CreateWin(uiLeft - v4->m_iXOff, (int)&pcNormal[-v4->m_iYOff], v5, v4->m_pkParent);
}

//----- (00443A10) --------------------------------------------------------
EditWinEx *__thiscall UIUtil::CreateEditEx(UIUtil *this, char *pcTag, int iLimit, EditWin::Type eType, NiSourceTexture *pkTexture, bool bClearTextOnEnd)
{
  char *v6; // edi@1
  UIUtil *v7; // esi@1
  EditWinEx *result; // eax@2
  PgSprData *v9; // eax@3
  int uiWidth; // [sp+8h] [bp-Ch]@1
  unsigned int uiHeight; // [sp+Ch] [bp-8h]@1
  int uiLeft; // [sp+10h] [bp-4h]@1

  v6 = pcTag;
  v7 = this;
  if ( PgUtil::GetTriShapeRect(
         this->m_spUIGeom.m_pObject,
         pcTag,
         &uiLeft,
         (int *)&pcTag,
         (unsigned int *)&uiWidth,
         &uiHeight) )
  {
    v9 = PgSprData::Create(v7->m_spUIGeom.m_pObject, v6, &uiLeft, (int *)&pcTag, pkTexture);
    PgWinSpr::CreateWin(uiLeft, (int)pcTag, v9, v7->m_pkParent, 0, 0);
    result = (EditWinEx *)ImeEditWinEx::CreateWin(
                            uiLeft - v7->m_iXOff + 2,
                            (int)&pcTag[-v7->m_iYOff + 2],
                            uiWidth - 3,
                            uiHeight,
                            v7->m_pkParent,
                            eType,
                            iLimit,
                            0,
                            bClearTextOnEnd,
                            0,
                            1,
                            0);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00443AC0) --------------------------------------------------------
EditWin *__thiscall UIUtil::CreateEdit(UIUtil *this, char *pcTag, int iLimit, EditWin::Type eType, NiSourceTexture *pkTexture, bool bClearTextOnEnd)
{
  char *v6; // edi@1
  UIUtil *v7; // esi@1
  EditWin *result; // eax@2
  PgSprData *v9; // eax@3
  int uiWidth; // [sp+8h] [bp-Ch]@1
  unsigned int uiHeight; // [sp+Ch] [bp-8h]@1
  int uiLeft; // [sp+10h] [bp-4h]@1

  v6 = pcTag;
  v7 = this;
  if ( PgUtil::GetTriShapeRect(
         this->m_spUIGeom.m_pObject,
         pcTag,
         &uiLeft,
         (int *)&pcTag,
         (unsigned int *)&uiWidth,
         &uiHeight) )
  {
    v9 = PgSprData::Create(v7->m_spUIGeom.m_pObject, v6, &uiLeft, (int *)&pcTag, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v7->m_iXOff, (int)&pcTag[-v7->m_iYOff], v9, v7->m_pkParent, 0, 0);
    result = EditWin::CreateWin(
               uiLeft - v7->m_iXOff + 2,
               (int)&pcTag[-v7->m_iYOff + 4],
               uiWidth + 10,
               uiHeight,
               v7->m_pkParent,
               eType,
               iLimit,
               1u,
               bClearTextOnEnd,
               0,
               1);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00443B70) --------------------------------------------------------
PgWinText *__thiscall UIUtil::CreateTextNoSprEx(UIUtil *this, char *pcTag, char *pcText, D3DXCOLOR kColor, unsigned int uiAlign, unsigned int uiMinusLeft, unsigned int uiMinusTop)
{
  UIUtil *v7; // esi@1
  PgWinText *result; // eax@2
  PgWin *v9; // ST14_4@3
  PgFont *v10; // eax@3
  PgWinText *v11; // esi@3
  int uiLeft; // [sp+4h] [bp-Ch]@1
  int uiTop; // [sp+8h] [bp-8h]@1
  unsigned int uiWidth; // [sp+Ch] [bp-4h]@1

  v7 = this;
  if ( PgUtil::GetTriShapeRect(this->m_spUIGeom.m_pObject, pcTag, &uiLeft, &uiTop, &uiWidth, (unsigned int *)&pcTag) )
  {
    v9 = v7->m_pkParent;
    v10 = Font::Get(SMALL);
    v11 = PgWinText::CreateWin(
            uiLeft - v7->m_iXOff - uiMinusLeft - 2,
            uiTop - v7->m_iYOff - uiMinusTop + 2,
            uiWidth,
            (unsigned int)pcTag,
            v10,
            v9,
            0,
            0);
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v11,
      uiAlign);
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v11,
      (unsigned int)&kColor);
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v11,
      (unsigned int)pcText);
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v11,
      0);
    result = v11;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00443C30) --------------------------------------------------------
PgWinText *__thiscall UIUtil::CreateTextNoSpr(UIUtil *this, char *pcTag, char *pcText, D3DXCOLOR kColor, unsigned int uiAlign)
{
  UIUtil *v5; // esi@1
  PgWinText *result; // eax@2
  PgWin *v7; // ST14_4@3
  PgFont *v8; // eax@3
  PgWinText *v9; // esi@3
  int uiLeft; // [sp+4h] [bp-Ch]@1
  int uiTop; // [sp+8h] [bp-8h]@1
  unsigned int uiWidth; // [sp+Ch] [bp-4h]@1

  v5 = this;
  if ( PgUtil::GetTriShapeRect(this->m_spUIGeom.m_pObject, pcTag, &uiLeft, &uiTop, &uiWidth, (unsigned int *)&pcTag) )
  {
    v7 = v5->m_pkParent;
    v8 = Font::Get(SMALL);
    v9 = PgWinText::CreateWin(
           uiLeft - v5->m_iXOff - 2,
           uiTop - v5->m_iYOff + 2,
           uiWidth,
           (unsigned int)pcTag,
           v8,
           v7,
           0,
           0);
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v9,
      uiAlign);
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v9,
      (unsigned int)&kColor);
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v9,
      (unsigned int)pcText);
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v9,
      0);
    result = v9;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00443CF0) --------------------------------------------------------
PgWinSpr *__thiscall UIUtil::CreateSpr(UIUtil *this, char *pcTag, NiSourceTexture *pkTexture)
{
  UIUtil *v3; // esi@1
  PgSprData *v4; // eax@1

  v3 = this;
  v4 = PgSprData::Create(this->m_spUIGeom.m_pObject, pcTag, (int *)&pcTag, (int *)&pkTexture, pkTexture);
  return PgWinSpr::CreateWin(
           (int)&pcTag[-v3->m_iXOff],
           (int)((char *)pkTexture - v3->m_iYOff),
           v4,
           v3->m_pkParent,
           0,
           0);
}

//----- (00443D40) --------------------------------------------------------
IconWin *__thiscall UIUtil::CreateIcon(UIUtil *this, const char *pkIconName, int Index, int LbuttonMsg, int RbuttonMgg, UIUtil::IconCreateFunc *rFunction)
{
  UIUtil *v6; // esi@1
  PgSprData *v7; // eax@1
  IconWin *v8; // esi@1
  int v9; // edi@1
  int uiLeft; // [sp+8h] [bp-4h]@1

  v6 = this;
  v7 = PgSprData::Create(this->m_spUIGeom.m_pObject, pkIconName, &uiLeft, (int *)&pkIconName, 0);
  PgWinSpr::CreateWin(uiLeft - v6->m_iXOff, (int)&pkIconName[-v6->m_iYOff], v7, v6->m_pkParent, 0, 0);
  v8 = (IconWin *)((int (__stdcall *)(int, const char *, PgWin *))rFunction->vfptr->Create)(
                    uiLeft - v6->m_iXOff + 1,
                    &pkIconName[-v6->m_iYOff + 1],
                    v6->m_pkParent);
  v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
    (NiRefObject *)v8,
    LbuttonMsg);
  v9 = Index;
  v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v8,
    Index);
  v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor(
    (NiRefObject *)v8,
    RbuttonMgg);
  v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[141].__vecDelDtor(
    (NiRefObject *)v8,
    v9);
  return v8;
}

//----- (00443DF0) --------------------------------------------------------
PgWinBar *__thiscall UIUtil::CreateBar(UIUtil *this, char *pkTag, NiSourceTexture *pkTexture)
{
  UIUtil *v3; // esi@1
  PgSprData *v4; // eax@1
  PgWinBar *v5; // esi@1

  v3 = this;
  v4 = PgSprData::Create(this->m_spUIGeom.m_pObject, pkTag, (int *)&pkTag, (int *)&pkTexture, pkTexture);
  v5 = PgWinBar::CreateWin(
         (int)&pkTag[-v3->m_iXOff],
         (int)((char *)pkTexture - v3->m_iYOff),
         v4,
         v3->m_pkParent,
         BGT_RIGHT);
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v5,
    0);
  return v5;
}

//----- (00443E50) --------------------------------------------------------
PgWinText *__thiscall UIUtil::CreateText(UIUtil *this, char *pcTag, char *pcText, unsigned int uiMargin, D3DXCOLOR kColor, unsigned int uiAlign, NiSourceTexture *pkTexture, bool bAutoAbberitate)
{
  UIUtil *v8; // esi@1
  PgSprData *v9; // edi@1
  PgSprData::PgHitTester *v10; // eax@1
  unsigned int v11; // edi@1
  unsigned int v12; // ebx@1
  PgWin *v13; // ST28_4@1
  bool v14; // ST24_1@1
  PgWin *v15; // ST14_4@1
  PgFont *v16; // eax@1
  PgWinText *v17; // esi@1

  v8 = this;
  v9 = PgSprData::Create(this->m_spUIGeom.m_pObject, pcTag, (int *)&pcTag, (int *)&pkTexture, pkTexture);
  PgWinSpr::CreateWin((int)&pcTag[-v8->m_iXOff], (int)((char *)pkTexture - v8->m_iYOff), v9, v8->m_pkParent, 0, 0);
  v10 = v9->m_akHitTester.m_pBase->m_pObject;
  v11 = v10->m_uiWidth;
  v12 = v10->m_uiHeight;
  v13 = g_pkToolTipWin;
  v14 = bAutoAbberitate;
  v15 = v8->m_pkParent;
  v16 = Font::Get(SMALL);
  v17 = (PgWinText *)PgWinAbbreviateText::CreateWin(
                       (int)(&pcTag[uiMargin] - v8->m_iXOff),
                       (int)((char *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                           + uiMargin
                           - v8->m_iYOff
                           + 2),
                       v11 - uiMargin,
                       v12 - uiMargin,
                       v16,
                       v15,
                       0,
                       0,
                       0,
                       v14,
                       v13,
                       0x1Eu);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    uiAlign);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v17,
    (unsigned int)&kColor);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v17,
    (unsigned int)pcText);
  return v17;
}

//----- (00443F20) --------------------------------------------------------
PgWinText *__thiscall UIUtil::CreateTextEx(UIUtil *this, char *pcTag, char *pcText, unsigned int uiMargin, D3DXCOLOR kColor, unsigned int uiAlign, NiSourceTexture *pkTexture, int uiMinusTop, int uiMinusLeft)
{
  UIUtil *v9; // esi@1
  PgSprData *v10; // edi@1
  PgSprData::PgHitTester *v11; // eax@1
  unsigned int v12; // edi@1
  unsigned int v13; // ebx@1
  PgWin *v14; // ST20_4@1
  PgFont *v15; // eax@1
  PgWinText *v16; // esi@1

  v9 = this;
  v10 = PgSprData::Create(this->m_spUIGeom.m_pObject, pcTag, (int *)&pcTag, (int *)&pkTexture, pkTexture);
  PgWinSpr::CreateWin((int)&pcTag[-v9->m_iXOff], (int)((char *)pkTexture - v9->m_iYOff), v10, v9->m_pkParent, 0, 0);
  v11 = v10->m_akHitTester.m_pBase->m_pObject;
  v12 = v11->m_uiWidth;
  v13 = v11->m_uiHeight;
  v14 = v9->m_pkParent;
  v15 = Font::Get(SMALL);
  v16 = PgWinText::CreateWin(
          (int)(&pcTag[uiMargin] + -uiMinusLeft - v9->m_iXOff),
          (int)((char *)pkTexture + uiMargin - v9->m_iYOff + uiMinusTop),
          v12 - uiMargin,
          v13 - uiMargin,
          v15,
          v14,
          0,
          0);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v16,
    uiAlign);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v16,
    (unsigned int)&kColor);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v16,
    (unsigned int)pcText);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  return v16;
}

//----- (00444000) --------------------------------------------------------
PgWinBut *__thiscall UIUtil::CreateButton(UIUtil *this, unsigned int uiCmdMsg, const char *pkButtonName, NiSourceTexture *pkTexture, int nCheckButtonCount)
{
  UIUtil *v5; // esi@1
  const char *v6; // ecx@1
  unsigned int v8; // edi@9
  const char *v9; // ecx@10
  unsigned int v10; // edi@16
  PgWinBut *v11; // esi@26
  int uiTop; // [sp+4h] [bp-C8h]@3
  int uiLeft; // [sp+8h] [bp-C4h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right; // [sp+Ch] [bp-C0h]@9
  NiSourceTexture *pkSprData; // [sp+10h] [bp-BCh]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strButtonName; // [sp+14h] [bp-B8h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+30h] [bp-9Ch]@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNorName; // [sp+4Ch] [bp-80h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strdata[3]; // [sp+68h] [bp-64h]@9
  unsigned int v20; // [sp+BCh] [bp-10h]@1
  int v21; // [sp+C8h] [bp-4h]@1
  int v22; // [sp+CCh] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v5 = this;
  pkSprData = pkTexture;
  strButtonName.baseclass_0._Myres = 15;
  strButtonName.baseclass_0._Mysize = 0;
  strButtonName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &strButtonName,
    pkButtonName,
    strlen(pkButtonName));
  v21 = 0;
  std::operator_<char_std::char_traits<char>_std::allocator<char>>(&strNorName, &strButtonName, "Nor");
  v6 = *(const char **)&strNorName;
  LOBYTE(v21) = 1;
  if ( strNorName.baseclass_0._Myres < 0x10 )
    v6 = (const char *)&strNorName;
  pkSprData = (NiSourceTexture *)PgSprData::Create(v5->m_spUIGeom.m_pObject, v6, &uiLeft, &uiTop, pkSprData);
  if ( pkSprData )
  {
    strdata[0].baseclass_0._Myres = 15;
    strdata[0].baseclass_0._Mysize = 0;
    strdata[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(strdata, "Click", 5u);
    LOBYTE(v21) = 2;
    strdata[1].baseclass_0._Myres = 15;
    strdata[1].baseclass_0._Mysize = 0;
    strdata[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strdata[1], "Over", 4u);
    LOBYTE(v21) = 3;
    strdata[2].baseclass_0._Myres = 15;
    strdata[2].baseclass_0._Mysize = 0;
    strdata[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strdata[2], "Disable", 7u);
    LOBYTE(v21) = 4;
    v8 = 0;
    _Right = strdata;
    while ( 1 )
    {
      std::operator_<char_std::char_traits<char>_std::allocator<char>>(&strName, &strButtonName, _Right);
      v9 = *(const char **)&strName;
      LOBYTE(v21) = 5;
      if ( strName.baseclass_0._Myres < 0x10 )
        v9 = (const char *)&strName;
      if ( !PgSprData::Add((PgSprData *)pkSprData, v5->m_spUIGeom.m_pObject, v9) )
        break;
      LOBYTE(v21) = 4;
      if ( strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strName);
      ++_Right;
      ++v8;
      if ( v8 >= 3 )
      {
        v10 = 16;
LABEL_26:
        v11 = PgWinBut::CreateWin(
                uiLeft - v5->m_iXOff,
                uiTop - v5->m_iYOff,
                (PgSprData *)pkSprData,
                v5->m_pkParent,
                uiCmdMsg,
                0,
                0);
        LOBYTE(v21) = 1;
        _eh_vector_destructor_iterator_(
          strdata,
          0x1Cu,
          3,
          (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
        if ( strNorName.baseclass_0._Myres >= v10 )
          operator delete(*(void **)&strNorName);
        strNorName.baseclass_0._Myres = 15;
        strNorName.baseclass_0._Mysize = 0;
        strNorName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( strButtonName.baseclass_0._Myres >= v10 )
          operator delete(*(void **)&strButtonName);
        return v11;
      }
    }
    if ( nCheckButtonCount == v8 + 1 )
    {
      v10 = 16;
      LOBYTE(v21) = 4;
      if ( strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strName);
      goto LABEL_26;
    }
    if ( strName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strName);
    strName.baseclass_0._Myres = 15;
    strName.baseclass_0._Mysize = 0;
    strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v21) = 1;
    _eh_vector_destructor_iterator_(
      strdata,
      0x1Cu,
      3,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    if ( strNorName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strNorName);
    strNorName.baseclass_0._Myres = 15;
    strNorName.baseclass_0._Mysize = 0;
    strNorName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strButtonName.baseclass_0._Myres >= 0x10 )
    {
      operator delete(*(void **)&strButtonName);
      return 0;
    }
  }
  else
  {
    if ( strNorName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strNorName);
    strNorName.baseclass_0._Myres = 15;
    strNorName.baseclass_0._Mysize = 0;
    strNorName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strButtonName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strButtonName);
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00444340) --------------------------------------------------------
ColumnBut *__thiscall UIUtil::CreateCheckButton(UIUtil *this, unsigned int uiCmdMsg, const char *pkButtonTagName, NiSourceTexture *pkTexture, int nCheckButtonCount)
{
  UIUtil *v5; // esi@1
  const char *v6; // ecx@1
  unsigned int v8; // edi@9
  const char *v9; // ecx@10
  unsigned int v10; // edi@16
  ColumnBut *v11; // esi@26
  int uiTop; // [sp+4h] [bp-C8h]@3
  int uiLeft; // [sp+8h] [bp-C4h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right; // [sp+Ch] [bp-C0h]@9
  NiSourceTexture *pkSprData; // [sp+10h] [bp-BCh]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strButtonName; // [sp+14h] [bp-B8h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+30h] [bp-9Ch]@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNorName; // [sp+4Ch] [bp-80h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strdata[3]; // [sp+68h] [bp-64h]@9
  unsigned int v20; // [sp+BCh] [bp-10h]@1
  int v21; // [sp+C8h] [bp-4h]@1
  int v22; // [sp+CCh] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v5 = this;
  pkSprData = pkTexture;
  strButtonName.baseclass_0._Myres = 15;
  strButtonName.baseclass_0._Mysize = 0;
  strButtonName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &strButtonName,
    pkButtonTagName,
    strlen(pkButtonTagName));
  v21 = 0;
  std::operator_<char_std::char_traits<char>_std::allocator<char>>(&strNorName, &strButtonName, "Nor");
  v6 = *(const char **)&strNorName;
  LOBYTE(v21) = 1;
  if ( strNorName.baseclass_0._Myres < 0x10 )
    v6 = (const char *)&strNorName;
  pkSprData = (NiSourceTexture *)PgSprData::Create(v5->m_spUIGeom.m_pObject, v6, &uiLeft, &uiTop, pkSprData);
  if ( pkSprData )
  {
    strdata[0].baseclass_0._Myres = 15;
    strdata[0].baseclass_0._Mysize = 0;
    strdata[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(strdata, "Click", 5u);
    LOBYTE(v21) = 2;
    strdata[1].baseclass_0._Myres = 15;
    strdata[1].baseclass_0._Mysize = 0;
    strdata[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strdata[1], "Over", 4u);
    LOBYTE(v21) = 3;
    strdata[2].baseclass_0._Myres = 15;
    strdata[2].baseclass_0._Mysize = 0;
    strdata[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strdata[2], "Disable", 7u);
    LOBYTE(v21) = 4;
    v8 = 0;
    _Right = strdata;
    while ( 1 )
    {
      std::operator_<char_std::char_traits<char>_std::allocator<char>>(&strName, &strButtonName, _Right);
      v9 = *(const char **)&strName;
      LOBYTE(v21) = 5;
      if ( strName.baseclass_0._Myres < 0x10 )
        v9 = (const char *)&strName;
      if ( !PgSprData::Add((PgSprData *)pkSprData, v5->m_spUIGeom.m_pObject, v9) )
        break;
      LOBYTE(v21) = 4;
      if ( strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strName);
      ++_Right;
      ++v8;
      if ( v8 >= 3 )
      {
        v10 = 16;
LABEL_26:
        v11 = ColumnBut::CreateWin(
                uiLeft - v5->m_iXOff,
                uiTop - v5->m_iYOff,
                (PgSprData *)pkSprData,
                v5->m_pkParent,
                uiCmdMsg,
                0);
        LOBYTE(v21) = 1;
        _eh_vector_destructor_iterator_(
          strdata,
          0x1Cu,
          3,
          (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
        if ( strNorName.baseclass_0._Myres >= v10 )
          operator delete(*(void **)&strNorName);
        strNorName.baseclass_0._Myres = 15;
        strNorName.baseclass_0._Mysize = 0;
        strNorName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( strButtonName.baseclass_0._Myres >= v10 )
          operator delete(*(void **)&strButtonName);
        return v11;
      }
    }
    if ( nCheckButtonCount == v8 + 1 )
    {
      v10 = 16;
      LOBYTE(v21) = 4;
      if ( strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strName);
      goto LABEL_26;
    }
    if ( strName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strName);
    strName.baseclass_0._Myres = 15;
    strName.baseclass_0._Mysize = 0;
    strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v21) = 1;
    _eh_vector_destructor_iterator_(
      strdata,
      0x1Cu,
      3,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    if ( strNorName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strNorName);
    strNorName.baseclass_0._Myres = 15;
    strNorName.baseclass_0._Mysize = 0;
    strNorName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strButtonName.baseclass_0._Myres >= 0x10 )
    {
      operator delete(*(void **)&strButtonName);
      return 0;
    }
  }
  else
  {
    if ( strNorName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strNorName);
    strNorName.baseclass_0._Myres = 15;
    strNorName.baseclass_0._Mysize = 0;
    strNorName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strButtonName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strButtonName);
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00444680) --------------------------------------------------------
void *__thiscall UIUtil::_vector_deleting_destructor_(UIUtil *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  UIUtil::_UIUtil(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004446B0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, const char *_Right)
{
  unsigned int v3; // edi@1
  unsigned int v4; // eax@1
  bool v5; // cf@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@5

  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = result->baseclass_0._Mysize;
  v4 = _Left->baseclass_0._Mysize + strlen(_Right);
  if ( v3 <= v4
    && result->baseclass_0._Myres != v4
    && std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Grow(result, v4, 1) )
  {
    v5 = result->baseclass_0._Myres < 0x10;
    result->baseclass_0._Mysize = v3;
    if ( v5 )
      v6 = result;
    else
      v6 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&result->baseclass_0.___u0.baseclass_0.dummy[0];
    v6->baseclass_0.___u0.baseclass_0.dummy[v3] = 0;
  }
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, _Left, 0, 0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, _Right, strlen(_Right));
  return result;
}

//----- (00444790) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  unsigned int v3; // edi@1
  unsigned int v4; // eax@1
  bool v5; // cf@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@5

  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = result->baseclass_0._Mysize;
  v4 = _Right->baseclass_0._Mysize + _Left->baseclass_0._Mysize;
  if ( v3 <= v4
    && result->baseclass_0._Myres != v4
    && std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Grow(result, v4, 1) )
  {
    v5 = result->baseclass_0._Myres < 0x10;
    result->baseclass_0._Mysize = v3;
    if ( v5 )
      v6 = result;
    else
      v6 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&result->baseclass_0.___u0.baseclass_0.dummy[0];
    v6->baseclass_0.___u0.baseclass_0.dummy[v3] = 0;
  }
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, _Left, 0, 0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, _Right, 0, 0xFFFFFFFFu);
  return result;
}

//----- (00444850) --------------------------------------------------------
void __thiscall ZlibUtil::ZlibUtil(ZlibUtil *this)
{
  this->vfptr = (ZlibUtilVtbl *)ZlibUtil::_vftable_;
  this->baseclass_4.zalloc = 0;
  this->baseclass_4.zfree = 0;
  this->baseclass_4.opaque = 0;
  this->m_uiSize = 0;
}
// 981ACC: using guessed type int (__stdcall *ZlibUtil___vftable_[2])(int);

//----- (00444870) --------------------------------------------------------
int __thiscall ZlibUtil::load_input(ZlibUtil *this)
{
  ZlibUtil *v1; // esi@1
  _iobuf *v2; // ST0C_4@2

  v1 = this;
  if ( !this->baseclass_4.avail_in )
  {
    v2 = this->fin;
    this->baseclass_4.next_in = this->input_buffer;
    this->baseclass_4.avail_in = fread(this->input_buffer, 1u, 0x1000u, v2);
  }
  return v1->baseclass_4.avail_in;
}

//----- (004448A0) --------------------------------------------------------
int __thiscall ZlibUtil::flush_output(ZlibUtil *this)
{
  ZlibUtil *v1; // esi@1
  unsigned int v2; // edi@1
  char *v3; // ebx@2

  v1 = this;
  v2 = 4096 - this->baseclass_4.avail_out;
  if ( 4096 != this->baseclass_4.avail_out )
  {
    v3 = this->output_buffer;
    if ( fwrite(this->output_buffer, 1u, v2, this->fout) != v2 )
    {
      v1->err = -1;
      return 0;
    }
    v1->baseclass_4.next_out = v3;
    v1->baseclass_4.avail_out = 4096;
  }
  v1->m_uiSize = v2;
  return v2;
}

//----- (004448F0) --------------------------------------------------------
int __thiscall ZlibUtil::flush_outputToBuffer(ZlibUtil *this)
{
  bool v1; // zf@1
  int result; // eax@1

  result = 4096 - this->baseclass_4.avail_out;
  v1 = 4096 == this->baseclass_4.avail_out;
  this->m_uiSize = result;
  if ( !v1 )
  {
    this->baseclass_4.next_out = this->output_buffer;
    this->baseclass_4.avail_out = 4096;
  }
  return result;
}

//----- (00444920) --------------------------------------------------------
void __thiscall zlibUtil2::zlibUtil2(zlibUtil2 *this)
{
  this->vfptr = (zlibUtil2Vtbl *)&zlibUtil2::_vftable_;
  this->baseclass_4.zalloc = 0;
  this->baseclass_4.zfree = 0;
  this->baseclass_4.opaque = 0;
  this->result_output_buffer = 0;
  this->result_output_size = 0;
  this->result_output_max_size = 0;
}
// 981AD8: using guessed type int (__thiscall *zlibUtil2___vftable_)(void *p, char);

//----- (00444950) --------------------------------------------------------
void __thiscall zlibUtil2::_zlibUtil2(zlibUtil2 *this)
{
  void *v1; // ecx@1

  this->vfptr = (zlibUtil2Vtbl *)&zlibUtil2::_vftable_;
  v1 = this->result_output_buffer;
  if ( v1 )
    free(v1);
}
// 981AD8: using guessed type int (__thiscall *zlibUtil2___vftable_)(void *p, char);

//----- (00444970) --------------------------------------------------------
int __thiscall zlibUtil2::flush_output(zlibUtil2 *this)
{
  zlibUtil2 *v1; // esi@1
  unsigned int v2; // edi@1
  unsigned int v3; // eax@2
  int result; // eax@3

  v1 = this;
  v2 = 4096 - this->baseclass_4.avail_out;
  if ( 4096 != this->baseclass_4.avail_out )
  {
    v3 = this->result_output_max_size;
    if ( v2 + this->result_output_size > v3 )
    {
      result = (int)realloc(this->result_output_buffer, v3 + 4096);
      v1->result_output_buffer = (char *)result;
      if ( !result )
      {
        v1->err = -1;
        return result;
      }
      v1->result_output_max_size += 4096;
    }
    memcpy(&v1->result_output_buffer[v1->result_output_size], v1->output_buffer, v2);
    v1->result_output_size += v2;
    v1->baseclass_4.next_out = v1->output_buffer;
    v1->baseclass_4.avail_out = 4096;
  }
  return v2;
}

//----- (00444A00) --------------------------------------------------------
int __thiscall ZlibUtil::compress(ZlibUtil *this, const char *input, const char *output, int level)
{
  ZlibUtil *v4; // esi@1
  _iobuf *v5; // ST28_4@3
  unsigned int v6; // eax@3
  int v7; // eax@4
  bool v8; // zf@4
  unsigned int v9; // edi@4
  int v10; // eax@12
  unsigned int v11; // edi@12
  int v12; // eax@22
  int result; // eax@26

  v4 = this;
  memset(this->result_input_buffer, 0, 0x1000u);
  v4->m_uiSize = 0;
  v4->err = 0;
  v4->baseclass_4.avail_in = 0;
  v4->baseclass_4.avail_out = 4096;
  v4->baseclass_4.next_out = v4->output_buffer;
  v4->m_AbortFlag = 0;
  v4->fin = fopen(input, "rb");
  v4->fout = fopen(output, "wb");
  deflateInit_(&v4->baseclass_4, level, "1.2.2", 56);
  if ( !v4->m_AbortFlag )
  {
    do
    {
      if ( !v4->baseclass_4.avail_in )
      {
        v5 = v4->fin;
        v4->baseclass_4.next_in = v4->input_buffer;
        v6 = fread(v4->input_buffer, 1u, 0x1000u, v5);
        v4->baseclass_4.avail_in = v6;
        if ( !v6 )
          break;
      }
      v7 = deflate(&v4->baseclass_4, 0);
      v9 = 4096 - v4->baseclass_4.avail_out;
      v8 = 4096 == v4->baseclass_4.avail_out;
      v4->err = v7;
      if ( !v8 )
      {
        if ( fwrite(v4->output_buffer, 1u, v9, v4->fout) != v9 )
        {
          v4->err = -1;
          break;
        }
        v4->baseclass_4.next_out = v4->output_buffer;
        v4->baseclass_4.avail_out = 4096;
      }
      v8 = v4->err == 0;
      v4->m_uiSize = v9;
    }
    while ( v8 && !v4->m_AbortFlag );
  }
  if ( v4->m_AbortFlag )
    goto LABEL_20;
  while ( 1 )
  {
    v10 = deflate(&v4->baseclass_4, 4);
    v11 = 4096 - v4->baseclass_4.avail_out;
    v8 = 4096 == v4->baseclass_4.avail_out;
    v4->err = v10;
    if ( v8 )
      goto LABEL_15;
    if ( fwrite(v4->output_buffer, 1u, v11, v4->fout) != v11 )
      break;
    v4->baseclass_4.next_out = v4->output_buffer;
    v4->baseclass_4.avail_out = 4096;
LABEL_15:
    v4->m_uiSize = v11;
    if ( !v11 || v4->err || v4->m_AbortFlag )
      goto LABEL_20;
  }
  v4->err = -1;
LABEL_20:
  deflateEnd(&v4->baseclass_4);
  if ( v4->m_AbortFlag )
  {
    v4->vfptr->status(v4, "User Abort");
  }
  else
  {
    v12 = v4->err;
    if ( v12 && v12 != 1 )
    {
      v4->vfptr->status(v4, "Zlib Error");
    }
    else
    {
      v4->vfptr->status(v4, "Success");
      v4->err = 0;
    }
  }
  fclose(v4->fin);
  fclose(v4->fout);
  v4->fin = 0;
  v4->fout = 0;
  result = -7;
  if ( !v4->m_AbortFlag )
    result = v4->err;
  return result;
}

//----- (00444BF0) --------------------------------------------------------
int __thiscall ZlibUtil::compressToMemory(ZlibUtil *this, const char *input, int level)
{
  ZlibUtil *v3; // ebx@1
  int v4; // edi@1
  _iobuf *v5; // ST20_4@3
  unsigned int v6; // eax@3
  int v7; // eax@4
  bool v8; // zf@4
  int v9; // ecx@4
  unsigned int v10; // edx@8
  int v11; // eax@11
  int v12; // ecx@11
  int v13; // edi@18
  int v14; // eax@18
  int v15; // eax@24
  int result; // eax@28
  unsigned int uiOffset; // [sp+14h] [bp+8h]@8

  v3 = this;
  v4 = 0;
  memset(this->result_input_buffer, 0, 0x1000u);
  v3->baseclass_4.next_out = v3->output_buffer;
  v3->m_uiSize = 0;
  v3->err = 0;
  v3->baseclass_4.avail_in = 0;
  v3->baseclass_4.avail_out = 4096;
  v3->m_AbortFlag = 0;
  v3->fin = fopen(input, "rb");
  deflateInit_(&v3->baseclass_4, level, "1.2.2", 56);
  while ( !v3->m_AbortFlag )
  {
    if ( !v3->baseclass_4.avail_in )
    {
      v5 = v3->fin;
      v3->baseclass_4.next_in = v3->input_buffer;
      v6 = fread(v3->input_buffer, 1u, 0x1000u, v5);
      v3->baseclass_4.avail_in = v6;
      if ( !v6 )
        break;
    }
    v7 = deflate(&v3->baseclass_4, 0);
    v9 = 4096 - v3->baseclass_4.avail_out;
    v8 = 4096 == v3->baseclass_4.avail_out;
    v3->err = v7;
    if ( !v8 )
    {
      v3->baseclass_4.next_out = v3->output_buffer;
      v3->baseclass_4.avail_out = 4096;
    }
    v3->m_uiSize = v9;
    if ( v7 )
      break;
  }
  v10 = v3->m_uiSize;
  uiOffset = v10;
  if ( v10 > 0 )
  {
    memcpy(v3->result_input_buffer, v3->output_buffer, v10);
    v4 = 0;
  }
  if ( v3->m_AbortFlag == v4 )
  {
    do
    {
      v11 = deflate(&v3->baseclass_4, 4);
      v12 = 4096 - v3->baseclass_4.avail_out;
      v8 = 4096 == v3->baseclass_4.avail_out;
      v3->err = v11;
      if ( !v8 )
      {
        v3->baseclass_4.next_out = v3->output_buffer;
        v3->baseclass_4.avail_out = 4096;
      }
      v3->m_uiSize = v12;
    }
    while ( v12 != v4 && v11 == v4 && v3->m_AbortFlag == v4 );
    v10 = uiOffset;
  }
  if ( v10 < v10 + v3->m_uiSize )
  {
    v13 = -8268 - (_DWORD)v3;
    v14 = (int)&v3->result_input_buffer[v10];
    while ( 1 )
    {
      *(_BYTE *)v14 = *(_BYTE *)(-4096 - v10 + v14);
      ++v14;
      if ( v14 + v13 >= v10 + v3->m_uiSize )
        break;
      v13 = -8268 - (_DWORD)v3;
    }
    v4 = 0;
  }
  v3->m_uiSize += v10;
  deflateEnd(&v3->baseclass_4);
  if ( v3->m_AbortFlag == v4 )
  {
    v15 = v3->err;
    if ( v15 == v4 || v15 == 1 )
    {
      v3->vfptr->status(v3, "Success");
      v3->err = v4;
    }
    else
    {
      v3->vfptr->status(v3, "Zlib Error");
    }
  }
  else
  {
    v3->vfptr->status(v3, "User Abort");
  }
  fclose(v3->fin);
  v3->fin = (_iobuf *)v4;
  result = -7;
  if ( v3->m_AbortFlag == v4 )
    result = v3->err;
  return result;
}

//----- (00444DD0) --------------------------------------------------------
int __thiscall ZlibUtil::decompress(ZlibUtil *this, const char *input, const char *output)
{
  ZlibUtil *v3; // esi@1
  _iobuf *v4; // ST24_4@3
  unsigned int v5; // eax@3
  int v6; // eax@4
  bool v7; // zf@4
  unsigned int v8; // edi@4
  int v9; // eax@12
  unsigned int v10; // edi@12
  int v11; // eax@22
  _iobuf *v12; // eax@28
  int result; // eax@30

  v3 = this;
  memset(this->result_input_buffer, 0, 0x1000u);
  v3->err = 0;
  v3->baseclass_4.avail_in = 0;
  v3->baseclass_4.avail_out = 4096;
  v3->baseclass_4.next_out = v3->output_buffer;
  v3->m_AbortFlag = 0;
  v3->fin = fopen(input, "rb");
  v3->fout = fopen(output, "wb");
  inflateInit_(&v3->baseclass_4, "1.2.2", 56);
  if ( !v3->m_AbortFlag )
  {
    do
    {
      if ( !v3->baseclass_4.avail_in )
      {
        v4 = v3->fin;
        v3->baseclass_4.next_in = v3->input_buffer;
        v5 = fread(v3->input_buffer, 1u, 0x1000u, v4);
        v3->baseclass_4.avail_in = v5;
        if ( !v5 )
          break;
      }
      v6 = inflate(&v3->baseclass_4, 0);
      v8 = 4096 - v3->baseclass_4.avail_out;
      v7 = 4096 == v3->baseclass_4.avail_out;
      v3->err = v6;
      if ( !v7 )
      {
        if ( fwrite(v3->output_buffer, 1u, v8, v3->fout) != v8 )
        {
          v3->err = -1;
          break;
        }
        v3->baseclass_4.next_out = v3->output_buffer;
        v3->baseclass_4.avail_out = 4096;
      }
      v7 = v3->err == 0;
      v3->m_uiSize = v8;
    }
    while ( v7 && !v3->m_AbortFlag );
  }
  if ( v3->m_AbortFlag )
    goto LABEL_20;
  while ( 1 )
  {
    v9 = inflate(&v3->baseclass_4, 4);
    v10 = 4096 - v3->baseclass_4.avail_out;
    v7 = 4096 == v3->baseclass_4.avail_out;
    v3->err = v9;
    if ( v7 )
      goto LABEL_15;
    if ( fwrite(v3->output_buffer, 1u, v10, v3->fout) != v10 )
      break;
    v3->baseclass_4.next_out = v3->output_buffer;
    v3->baseclass_4.avail_out = 4096;
LABEL_15:
    v3->m_uiSize = v10;
    if ( !v10 || v3->err || v3->m_AbortFlag )
      goto LABEL_20;
  }
  v3->err = -1;
LABEL_20:
  inflateEnd(&v3->baseclass_4);
  if ( v3->m_AbortFlag )
  {
    v3->vfptr->status(v3, "User Abort");
  }
  else
  {
    v11 = v3->err;
    if ( v11 && v11 != 1 )
    {
      v3->vfptr->status(v3, "Zlib Error");
    }
    else
    {
      v3->vfptr->status(v3, "Success");
      v3->err = 0;
    }
  }
  if ( v3->fin )
    fclose(v3->fin);
  v12 = v3->fout;
  v3->fin = 0;
  if ( v12 )
    fclose(v12);
  v3->fout = 0;
  result = -7;
  if ( !v3->m_AbortFlag )
    result = v3->err;
  return result;
}

//----- (00444FC0) --------------------------------------------------------
int __thiscall ZlibUtil::decompressToBuffer(ZlibUtil *this, const char *input)
{
  ZlibUtil *v2; // ebx@1
  int v3; // edi@1
  _iobuf *v4; // ST1C_4@3
  unsigned int v5; // eax@3
  int v6; // eax@4
  bool v7; // zf@4
  int v8; // ecx@4
  unsigned int v9; // edx@8
  int v10; // eax@11
  int v11; // ecx@11
  int v12; // edi@18
  int v13; // eax@18
  int v14; // eax@24
  int result; // eax@30
  unsigned int uiOffset; // [sp+14h] [bp+8h]@8

  v2 = this;
  v3 = 0;
  memset(this->result_input_buffer, 0, 0x1000u);
  v2->baseclass_4.next_out = v2->output_buffer;
  v2->m_uiSize = 0;
  v2->err = 0;
  v2->baseclass_4.avail_in = 0;
  v2->baseclass_4.avail_out = 4096;
  v2->m_AbortFlag = 0;
  v2->fin = fopen(input, "rb");
  inflateInit_(&v2->baseclass_4, "1.2.2", 56);
  while ( !v2->m_AbortFlag )
  {
    if ( !v2->baseclass_4.avail_in )
    {
      v4 = v2->fin;
      v2->baseclass_4.next_in = v2->input_buffer;
      v5 = fread(v2->input_buffer, 1u, 0x1000u, v4);
      v2->baseclass_4.avail_in = v5;
      if ( !v5 )
        break;
    }
    v6 = inflate(&v2->baseclass_4, 0);
    v8 = 4096 - v2->baseclass_4.avail_out;
    v7 = 4096 == v2->baseclass_4.avail_out;
    v2->err = v6;
    if ( !v7 )
    {
      v2->baseclass_4.next_out = v2->output_buffer;
      v2->baseclass_4.avail_out = 4096;
    }
    v2->m_uiSize = v8;
    if ( v6 )
      break;
  }
  v9 = v2->m_uiSize;
  uiOffset = v9;
  if ( v9 > 0 )
  {
    memcpy(v2->result_input_buffer, v2->output_buffer, v9);
    v3 = 0;
  }
  if ( v2->m_AbortFlag == v3 )
  {
    do
    {
      v10 = inflate(&v2->baseclass_4, 4);
      v11 = 4096 - v2->baseclass_4.avail_out;
      v7 = 4096 == v2->baseclass_4.avail_out;
      v2->err = v10;
      if ( !v7 )
      {
        v2->baseclass_4.next_out = v2->output_buffer;
        v2->baseclass_4.avail_out = 4096;
      }
      v2->m_uiSize = v11;
    }
    while ( v11 != v3 && v10 == v3 && v2->m_AbortFlag == v3 );
    v9 = uiOffset;
  }
  if ( v9 < v9 + v2->m_uiSize )
  {
    v12 = -8268 - (_DWORD)v2;
    v13 = (int)&v2->result_input_buffer[v9];
    while ( 1 )
    {
      *(_BYTE *)v13 = *(_BYTE *)(-4096 - v9 + v13);
      ++v13;
      if ( v13 + v12 >= v9 + v2->m_uiSize )
        break;
      v12 = -8268 - (_DWORD)v2;
    }
    v3 = 0;
  }
  v2->m_uiSize += v9;
  inflateEnd(&v2->baseclass_4);
  if ( v2->m_AbortFlag == v3 )
  {
    v14 = v2->err;
    if ( v14 == v3 || v14 == 1 )
    {
      v2->vfptr->status(v2, "Success");
      v2->err = v3;
    }
    else
    {
      v2->vfptr->status(v2, "Zlib Error");
    }
  }
  else
  {
    v2->vfptr->status(v2, "User Abort");
  }
  if ( v2->fin != (_iobuf *)v3 )
    fclose(v2->fin);
  v2->fin = (_iobuf *)v3;
  result = -7;
  if ( v2->m_AbortFlag == v3 )
    result = v2->err;
  return result;
}

//----- (004451B0) --------------------------------------------------------
int __thiscall zlibUtil2::compress(zlibUtil2 *this, char *input, unsigned int input_size, char **output, unsigned int *output_size, int level)
{
  zlibUtil2 *v6; // esi@1
  void *v7; // eax@1

  v6 = this;
  this->baseclass_4.next_in = input;
  v7 = this->result_output_buffer;
  this->err = 0;
  this->baseclass_4.avail_in = input_size;
  v6->baseclass_4.next_out = v6->output_buffer;
  this->baseclass_4.avail_out = 4096;
  if ( v7 )
    free(v7);
  v6->result_output_buffer = 0;
  v6->result_output_max_size = 0;
  v6->result_output_size = 0;
  deflateInit_(&v6->baseclass_4, level, "1.2.2", 56);
  do
  {
    v6->err = deflate(&v6->baseclass_4, 0);
    zlibUtil2::flush_output(v6);
  }
  while ( !v6->err );
  do
    v6->err = deflate(&v6->baseclass_4, 4);
  while ( zlibUtil2::flush_output(v6) && !v6->err );
  deflateEnd(&v6->baseclass_4);
  if ( v6->err == 1 )
    v6->err = 0;
  *output = v6->result_output_buffer;
  *output_size = v6->result_output_size;
  return v6->err;
}

//----- (00445280) --------------------------------------------------------
int __thiscall zlibUtil2::decompress(zlibUtil2 *this, char *input, unsigned int input_size, char **output, unsigned int *output_size)
{
  zlibUtil2 *v5; // esi@1
  void *v6; // eax@1

  v5 = this;
  this->baseclass_4.next_in = input;
  v6 = this->result_output_buffer;
  this->err = 0;
  this->baseclass_4.avail_in = input_size;
  v5->baseclass_4.next_out = v5->output_buffer;
  this->baseclass_4.avail_out = 4096;
  if ( v6 )
    free(v6);
  v5->result_output_buffer = 0;
  v5->result_output_max_size = 0;
  v5->result_output_size = 0;
  inflateInit_(&v5->baseclass_4, "1.2.2", 56);
  do
  {
    v5->err = inflate(&v5->baseclass_4, 0);
    zlibUtil2::flush_output(v5);
  }
  while ( !v5->err );
  do
    v5->err = inflate(&v5->baseclass_4, 4);
  while ( zlibUtil2::flush_output(v5) && !v5->err );
  inflateEnd(&v5->baseclass_4);
  if ( v5->err == 1 )
    v5->err = 0;
  *output = v5->result_output_buffer;
  *output_size = v5->result_output_size;
  return v5->err;
}

//----- (00445350) --------------------------------------------------------
void *__thiscall zlibUtil2::_vector_deleting_destructor_(zlibUtil2 *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  v3 = this->result_output_buffer;
  this->vfptr = (zlibUtil2Vtbl *)&zlibUtil2::_vftable_;
  if ( v3 )
    free(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981AD8: using guessed type int (__thiscall *zlibUtil2___vftable_)(void *p, char);

//----- (00445390) --------------------------------------------------------
void __thiscall AutoSizingTextWin::AutoSizingTextWin(AutoSizingTextWin *this)
{
  AutoSizingTextWin *v1; // esi@1

  v1 = this;
  PgWinText::PgWinText(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoSizingTextWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoSizingTextWin::_vftable_;
}
// 981AE0: using guessed type int (__stdcall *AutoSizingTextWin___vftable_)(int uiFlags);
// 981AFC: using guessed type int (__thiscall *AutoSizingTextWin___vftable_)(void *p, char);

//----- (004453B0) --------------------------------------------------------
void __thiscall AutoSizingTextWin::_AutoSizingTextWin(AutoSizingTextWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoSizingTextWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoSizingTextWin::_vftable_;
  PgWinText::_PgWinText(&this->baseclass_0);
}
// 981AE0: using guessed type int (__stdcall *AutoSizingTextWin___vftable_)(int uiFlags);
// 981AFC: using guessed type int (__thiscall *AutoSizingTextWin___vftable_)(void *p, char);

//----- (004453D0) --------------------------------------------------------
bool __thiscall AutoSizingTextWin::Create(AutoSizingTextWin *this, int iXPos, int iYPos, PgFont *pkFont, PgWin *pkParent)
{
  return PgWinText::Create(&this->baseclass_0, iXPos, iYPos, 0, 0, pkFont, pkParent, 0, 0) != 0;
}

//----- (00445400) --------------------------------------------------------
void __thiscall AutoSizingTextWin::SetText(AutoSizingTextWin *this, char *pcText)
{
  AutoSizingTextWin *v2; // esi@1
  PgTextGeometry *v3; // ecx@1
  int v4; // ebx@3
  void *v5; // ecx@6
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@7
  tagRECT *v7; // [sp-4h] [bp-2Ch]@7
  tagSIZE kSize; // [sp+Ch] [bp-1Ch]@6
  tagRECT kRect; // [sp+14h] [bp-14h]@3
  unsigned int v10; // [sp+24h] [bp-4h]@1
  int v11; // [sp+28h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  v3 = this->baseclass_0.m_spTextGeom.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(char *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  v4 = ((int (__thiscall *)(AutoSizingTextWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)(v2);
  SetRect(&kRect, 0, 0, 0, 0);
  if ( pcText && *pcText && v4 )
  {
    SelectObject(*(HDC *)(v4 + 192), *(HGDIOBJ *)(v4 + 184));
    PgFont::GetTextSize((PgFont *)v4, pcText, strlen(pcText), &kSize);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
      (NiRefObject *)v2,
      kSize.cx);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
      (NiRefObject *)v2,
      kSize.cy);
    kRect.bottom = kSize.cy;
    v5 = v2->baseclass_0.m_spTextGeom.m_pObject;
    kRect.right = kSize.cx;
    if ( !v5 )
      return;
    v6 = *(void *(__thiscall **)(NiRefObject *, unsigned int))(*(_DWORD *)v5 + 172);
    v7 = &kRect;
  }
  else
  {
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v6 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor;
    v7 = 0;
    v5 = v2;
  }
  v6((NiRefObject *)v5, (unsigned int)v7);
}
// A85C00: using guessed type int __security_cookie;

//----- (00445500) --------------------------------------------------------
AutoSizingTextWin *__cdecl AutoSizingTextWin::CreateWin(int iXPos, int iYPos, PgFont *pkFont, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  AutoSizingTextWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x124u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWinText::PgWinText((PgWinText *)v4);
    *(_DWORD *)v5 = &AutoSizingTextWin::_vftable_;
    *((_DWORD *)v5 + 58) = &AutoSizingTextWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgFont *, PgWin *))(*(_DWORD *)v5 + 504))(
                          v5,
                          iXPos,
                          iYPos,
                          pkFont,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (AutoSizingTextWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 981AE0: using guessed type int (__stdcall *AutoSizingTextWin___vftable_)(int uiFlags);
// 981AFC: using guessed type int (__thiscall *AutoSizingTextWin___vftable_)(void *p, char);

//----- (00445650) --------------------------------------------------------
void __thiscall PgFont::GetTextSize(PgFont *this, char *pcText, int iTextSize, tagSIZE *kSize)
{
  char *v4; // esi@1
  int v5; // edi@1
  PgFont *v6; // ebx@1
  int v7; // ebx@3
  tagSIZE *v8; // eax@11
  PgFont *v9; // [sp+Ch] [bp-4h]@1

  v4 = pcText;
  v5 = iTextSize;
  v6 = this;
  v9 = this;
  if ( !CSpFont::GetTextSize(&this->baseclass_0, pcText, iTextSize, kSize, 0, 0, 0, 0) )
  {
    GetTextExtentPoint32A(v6->baseclass_0.m_kFontRenderStuff.hDC, pcText, iTextSize, kSize);
    if ( v6->baseclass_0.m_dwOutlineOffset )
    {
      v7 = 0;
      if ( *pcText )
      {
        do
        {
          if ( v5 <= 0 )
            break;
          if ( *v4 == 32 )
          {
            --v5;
            ++v4;
          }
          else
          {
            ++v7;
            if ( IsDBCSLeadByte(*v4) )
            {
              v4 += 2;
              v5 -= 2;
            }
            else
            {
              ++v4;
              --v5;
            }
          }
        }
        while ( *v4 );
      }
      v8 = kSize;
      v8->cy += 2 * v9->baseclass_0.m_dwOutlineOffset;
      v8->cx += 2 * v7 * v9->baseclass_0.m_dwOutlineOffset;
    }
  }
}

//----- (004456F0) --------------------------------------------------------
void __thiscall PgTextGeometry::SetDrawFormat(PgTextGeometry *this, unsigned int uiDrawFormat)
{
  unsigned int v2; // eax@2
  int v3; // eax@5

  this->m_uiDrawFormat = uiDrawFormat;
  if ( uiDrawFormat & 1 )
    v2 = 2;
  else
    v2 = uiDrawFormat & 2 | 1;
  if ( uiDrawFormat & 4 )
  {
    v3 = v2 | 0x20;
  }
  else
  {
    if ( uiDrawFormat & 8 )
      v3 = v2 | 0x30;
    else
      v3 = v2 | 0x10;
  }
  if ( v3 != this->baseclass_0.m_iAlignOption )
  {
    this->baseclass_0.m_iAlignOption = v3;
    this->baseclass_0.m_bInvalidate = 1;
  }
}

//----- (00445750) --------------------------------------------------------
NiRTTI *__thiscall PgWinText::GetRTTI(PgWinText *this)
{
  return &PgWinText::m_RTTI;
}

//----- (00445760) --------------------------------------------------------
void __cdecl PgWinText::VsSetText(PgWinText *this, char *pcFormat)
{
  char pcText[256]; // [sp+4h] [bp-104h]@1
  unsigned int v3; // [sp+104h] [bp-4h]@1
  int v4; // [sp+108h] [bp+0h]@1
  char ap; // [sp+118h] [bp+10h]@0

  v3 = (unsigned int)&v4 ^ __security_cookie;
  vsprintf(pcText, pcFormat, &ap);
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)this,
    (unsigned int)pcText);
}
// A85C00: using guessed type int __security_cookie;

//----- (004457B0) --------------------------------------------------------
void __thiscall PgWinText::SetTextColor(PgWinText *this, char ucR, char ucG, char ucB, char ucA)
{
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@1
  D3DXCOLOR kColor; // [sp+0h] [bp-10h]@1

  kColor.r = (double)(unsigned __int8)ucR / 255.0;
  v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
  kColor.g = (double)(unsigned __int8)ucG / 255.0;
  kColor.b = (double)(unsigned __int8)ucB / 255.0;
  kColor.a = (double)(unsigned __int8)ucA / 255.0;
  ((void (__stdcall *)(D3DXCOLOR *))v5)(&kColor);
}

//----- (00445810) --------------------------------------------------------
void *__thiscall AutoSizingTextWin::_scalar_deleting_destructor_(AutoSizingTextWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoSizingTextWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoSizingTextWin::_vftable_;
  PgWinText::_PgWinText(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981AE0: using guessed type int (__stdcall *AutoSizingTextWin___vftable_)(int uiFlags);
// 981AFC: using guessed type int (__thiscall *AutoSizingTextWin___vftable_)(void *p, char);

//----- (00445850) --------------------------------------------------------
void __thiscall PgWinText::SetFont(PgWinText *this, PgFont *pkFont)
{
  PgTextGeometry *v2; // ecx@1

  v2 = this->m_spTextGeom.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(pkFont);
}

//----- (00445870) --------------------------------------------------------
PgFont *__thiscall PgWinText::GetFont(PgWinText *this)
{
  PgTextGeometry *v1; // eax@1
  PgFont *result; // eax@2

  v1 = this->m_spTextGeom.m_pObject;
  if ( v1 )
    result = v1->m_spPgFont.m_pObject;
  else
    result = 0;
  return result;
}

//----- (00445890) --------------------------------------------------------
void __thiscall PgWinText::SetTextRect(PgWinText *this, tagRECT *kRect)
{
  PgTextGeometry *v2; // ecx@1

  v2 = this->m_spTextGeom.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(kRect);
}

//----- (004458B0) --------------------------------------------------------
void __thiscall PgWinText::SetTextColor(PgWinText *this, D3DXCOLOR *kColor)
{
  PgTextGeometry *v2; // ecx@1

  v2 = this->m_spTextGeom.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(kColor);
}

//----- (004458D0) --------------------------------------------------------
void __thiscall PgWinText::SetText(PgWinText *this, const char *pcText)
{
  PgTextGeometry *v2; // ecx@1

  v2 = this->m_spTextGeom.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
}

//----- (004458F0) --------------------------------------------------------
char *__thiscall PgWinText::GetText(PgWinText *this)
{
  PgTextGeometry *v1; // ecx@1
  char *result; // eax@2

  v1 = this->m_spTextGeom.m_pObject;
  if ( v1 )
    result = (char *)((int (*)(void))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (00445910) --------------------------------------------------------
void __thiscall PgWinText::SetDrawFormat(PgWinText *this, unsigned int uiDrawFormat)
{
  PgTextGeometry *v2; // edx@1
  unsigned int v3; // eax@3
  int v4; // eax@6

  v2 = this->m_spTextGeom.m_pObject;
  if ( v2 )
  {
    v2->m_uiDrawFormat = uiDrawFormat;
    if ( uiDrawFormat & 1 )
      v3 = 2;
    else
      v3 = uiDrawFormat & 2 | 1;
    if ( uiDrawFormat & 4 )
    {
      v4 = v3 | 0x20;
    }
    else
    {
      if ( uiDrawFormat & 8 )
        v4 = v3 | 0x30;
      else
        v4 = v3 | 0x10;
    }
    if ( v4 != v2->baseclass_0.m_iAlignOption )
    {
      v2->baseclass_0.m_iAlignOption = v4;
      v2->baseclass_0.m_bInvalidate = 1;
    }
  }
}

//----- (00445970) --------------------------------------------------------
void __thiscall ClientWin::ClientWin(ClientWin *this)
{
  ClientWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClientWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ClientWin::_vftable_;
}
// 981CFC: using guessed type int (__stdcall *ClientWin___vftable_)(int uiFlags);
// 981D1C: using guessed type int (__thiscall *ClientWin___vftable_)(void *p, char);

//----- (00445990) --------------------------------------------------------
void __thiscall ClientWin::_ClientWin(ClientWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClientWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ClientWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 981CFC: using guessed type int (__stdcall *ClientWin___vftable_)(int uiFlags);
// 981D1C: using guessed type int (__thiscall *ClientWin___vftable_)(void *p, char);

//----- (004459B0) --------------------------------------------------------
bool __thiscall ClientWin::Create(ClientWin *this, int iXPos, int iYPos, PgWin *pkParent)
{
  bool result; // al@2

  if ( pkParent )
    result = PgWin::Create(&this->baseclass_0, iXPos, iYPos, 1u, 1u, pkParent, 0, 0) != 0;
  else
    result = 0;
  return result;
}

//----- (004459E0) --------------------------------------------------------
void __thiscall ClientWin::OnCommand(ClientWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // eax@1

  v3 = PgWin::GetParentWin(&this->baseclass_0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
    v3,
    wParam,
    lParam);
}

//----- (00445A00) --------------------------------------------------------
ClientWin *__cdecl ClientWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  ClientWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x120u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    PgWin::PgWin((PgWin *)v3);
    *(_DWORD *)v4 = &ClientWin::_vftable_;
    *((_DWORD *)v4 + 58) = &ClientWin::_vftable_;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 452))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (ClientWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 981CFC: using guessed type int (__stdcall *ClientWin___vftable_)(int uiFlags);
// 981D1C: using guessed type int (__thiscall *ClientWin___vftable_)(void *p, char);

//----- (00445B50) --------------------------------------------------------
void *__thiscall ClientWin::_vector_deleting_destructor_(ClientWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClientWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ClientWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 981CFC: using guessed type int (__stdcall *ClientWin___vftable_)(int uiFlags);
// 981D1C: using guessed type int (__thiscall *ClientWin___vftable_)(void *p, char);

//----- (00445B90) --------------------------------------------------------
void __thiscall EditWin::OnCommand(EditWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam && this->m_bEnalbe )
  {
    if ( this->m_bForceFocusWhenClick )
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
}

//----- (00445BC0) --------------------------------------------------------
void __thiscall EditWin::OnClose(EditWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  PgWin::OnClose(v1);
}

//----- (00445BE0) --------------------------------------------------------
void __thiscall EditWin::SetEnable(EditWin *this, bool bRes)
{
  this->m_bEnalbe = bRes;
  if ( !bRes )
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (00445C00) --------------------------------------------------------
void __thiscall EditWinEx::SetFocusClear(EditWinEx *this, bool b)
{
  this->m_bClearTextWhenFocusOn = b;
}

//----- (00445C10) --------------------------------------------------------
char *__thiscall EditWin::GetText(EditWin *this)
{
  return (char *)((int (*)(void))this->m_spEditWin.m_pObject->baseclass_0.vfptr[4].__vecDelDtor)();
}

//----- (00445C20) --------------------------------------------------------
char *__thiscall EditWin::GetLastText(EditWin *this)
{
  return (char *)((int (*)(void))this->m_spEditWin.m_pObject->baseclass_0.vfptr[7].__vecDelDtor)();
}

//----- (00445C30) --------------------------------------------------------
void __thiscall EditWin::SetText(EditWin *this, const char *pcText)
{
  ((void (__stdcall *)(_DWORD))this->m_spEditWin.m_pObject->baseclass_0.vfptr[5].__vecDelDtor)(pcText);
}

//----- (00445C50) --------------------------------------------------------
void __thiscall EditWin::ChangeText(EditWin *this, const char *pcText)
{
  EditWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_spEditWin.m_pObject->baseclass_0.vfptr[5].__vecDelDtor)(pcText);
  SendMessageA(v2->m_spEditWin.m_pObject->m_hWnd, 0x100u, 0x23u, 0);
}

//----- (00445C90) --------------------------------------------------------
void __thiscall EditWin::ClearAllText(EditWin *this)
{
  ((void (*)(void))this->m_spEditWin.m_pObject->baseclass_0.vfptr[11].__vecDelDtor)();
}

//----- (00445CA0) --------------------------------------------------------
void __thiscall EditWin::SetTextColor(EditWin *this, D3DXCOLOR *kDxColor)
{
  ((void (__stdcall *)(_DWORD))this->m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(kDxColor);
}

//----- (00445CC0) --------------------------------------------------------
void __thiscall EditWin::SetFocus(EditWin *this)
{
  EditWin *v1; // esi@1
  PgWinEditText *v2; // ecx@2

  v1 = this;
  if ( this->m_bEnalbe )
  {
    EditWin::ms_pkCurEditWin = (PgWin *)this;
    ((void (*)(void))this->m_spEditWin.m_pObject->baseclass_0.vfptr[3].__vecDelDtor)();
    v2 = v1->m_spTextWin.m_pObject;
    v1->m_uiLastBlinkTime = 0;
    v1->m_iShowCaret = 0;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
}

//----- (00445D10) --------------------------------------------------------
void __thiscall EditWin::KillFocus(EditWin *this, bool bShowText)
{
  if ( (EditWin *)EditWin::ms_pkCurEditWin == this )
  {
    EditWin::ms_pkCurEditWin = 0;
    ((void (__stdcall *)(_DWORD))this->m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShowText);
    SetFocus(g_hMainWnd);
  }
}

//----- (00445D50) --------------------------------------------------------
void __thiscall EditWin::Recover_focus(EditWin *this)
{
  HWND__ *v1; // esi@3

  if ( this->m_bEnalbe && (EditWin *)EditWin::ms_pkCurEditWin == this )
  {
    v1 = this->m_spEditWin.m_pObject->m_hWnd;
    if ( v1 != GetFocus() )
      SetFocus(v1);
  }
}

//----- (00445D80) --------------------------------------------------------
EditWin::ImeStatus __thiscall EditWin::GetImeStatus(EditWin *this)
{
  HWND__ *v1; // ebx@1
  EditWin::ImeStatus result; // eax@2
  EditWin::ImeStatus v3; // edi@3
  int v4; // esi@4
  int dwSent; // [sp+4h] [bp-8h]@4
  int dwConv; // [sp+8h] [bp-4h]@4

  v1 = this->m_spEditWin.m_pObject->m_hWnd;
  if ( v1 )
  {
    result = (EditWin::ImeStatus)ImmGetContext(v1);
    v3 = result;
    if ( result )
    {
      ImmGetConversionStatus((HIMC)result, (LPDWORD)&dwConv, (LPDWORD)&dwSent);
      v4 = -((dwConv & 1) != 0);
      ImmReleaseContext(v1, (HIMC)v3);
      result = v4 + 2;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00445DE0) --------------------------------------------------------
void __thiscall EditWin::SetImeStatus(EditWin *this, EditWin::ImeStatus eStatus)
{
  HWND__ *v2; // edi@1
  HIMC__ *v3; // eax@2
  HIMC__ *v4; // esi@2
  DWORD v5; // [sp-Ch] [bp-18h]@4
  DWORD v6; // [sp-8h] [bp-14h]@4
  int dwConv; // [sp+4h] [bp-8h]@3
  DWORD dwSent; // [sp+8h] [bp-4h]@3

  v2 = this->m_spEditWin.m_pObject->m_hWnd;
  if ( v2 )
  {
    v3 = ImmGetContext(v2);
    v4 = v3;
    if ( v3 )
    {
      ImmGetConversionStatus(v3, (LPDWORD)&dwConv, &dwSent);
      if ( eStatus == 1 )
      {
        v6 = dwSent;
        v5 = 1;
      }
      else
      {
        v6 = dwSent;
        v5 = 0;
      }
      ImmSetConversionStatus(v4, v5, v6);
      ImmReleaseContext(v2, v4);
    }
  }
}

//----- (00445E40) --------------------------------------------------------
void __thiscall EditWin::SetWidth(EditWin *this, unsigned int uiWidth)
{
  PgWinEditText *v2; // ecx@1

  this->baseclass_0.___u2.m_iWidth = uiWidth;
  v2 = this->m_spTextWin.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)(uiWidth);
}

//----- (00445E70) --------------------------------------------------------
void __thiscall EditWin::SetHeight(EditWin *this, unsigned int uiHeight)
{
  PgWinEditText *v2; // ecx@1

  this->baseclass_0.___u3.m_iHeight = uiHeight;
  v2 = this->m_spTextWin.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor)(uiHeight);
}

//----- (00445EA0) --------------------------------------------------------
void __thiscall EditWin::SetAutoAlign(EditWin *this, bool bAutoAlign)
{
  PgWinEditText *v2; // ecx@1

  v2 = this->m_spTextWin.m_pObject;
  if ( v2 )
    PgWinEditText::SetAutoAlign(v2, bAutoAlign);
}

//----- (00445EC0) --------------------------------------------------------
bool __thiscall EditWin::GetAutoAlign(EditWin *this)
{
  PgWinEditText *v1; // ecx@1
  bool result; // al@2

  v1 = this->m_spTextWin.m_pObject;
  if ( v1 )
    result = PgWinEditText::GetAutoAlign(v1);
  else
    result = 0;
  return result;
}

//----- (00445EE0) --------------------------------------------------------
void __thiscall EditWin::SelectAll(EditWin *this)
{
  HWND__ *v1; // eax@1

  v1 = this->m_spEditWin.m_pObject->m_hWnd;
  if ( v1 )
    SendMessageA(v1, 0xB1u, 0, -1);
}

//----- (00445F00) --------------------------------------------------------
void __thiscall EditWin::StrAlign(EditWin *this)
{
  const char *v1; // eax@1
  tagSIZE kSize; // [sp+0h] [bp-8h]@2

  v1 = (const char *)((int (*)(void))this->m_spEditWin.m_pObject->baseclass_0.vfptr[4].__vecDelDtor)();
  if ( v1 )
    GetTextExtentPoint32A(0, v1, strlen(v1), &kSize);
}

//----- (00445F40) --------------------------------------------------------
void __thiscall EditWin::EditWin(EditWin *this)
{
  EditWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EditWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EditWin::_vftable_;
  v1->m_spFont.m_pObject = 0;
  v1->m_spEditWin.m_pObject = 0;
  v1->m_spTextWin.m_pObject = 0;
  v1->m_spCaret.m_pObject = 0;
  if ( !EditWin::ms_uiCaretBlinkTime )
    EditWin::ms_uiCaretBlinkTime = GetCaretBlinkTime();
  v1->m_uiLastBlinkTime = 0;
  v1->m_iShowCaret = 0;
  v1->m_bIsLinkEdit = 0;
  v1->m_bEnalbe = 1;
}
// 981EEC: using guessed type int (__stdcall *EditWin___vftable_)(int uiFlags);
// 981F0C: using guessed type int (__thiscall *EditWin___vftable_)(void *p, char);
// A97658: using guessed type int EditWin__ms_uiCaretBlinkTime;

//----- (00445FB0) --------------------------------------------------------
void __thiscall EditWin::_EditWin(EditWin *this)
{
  EditWin *v1; // esi@1
  PgFont *v2; // edi@1
  PgEditWin *v3; // edi@6
  PgWinEditText *v4; // edi@11
  NiScreenElements *v5; // edi@16
  NiScreenElements *v6; // edi@21
  PgWinEditText *v7; // edi@25
  PgEditWin *v8; // edi@29
  PgFont *v9; // edi@33

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EditWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EditWin::_vftable_;
  v2 = this->m_spFont.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spFont.m_pObject = 0;
  }
  v3 = v1->m_spEditWin.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spEditWin.m_pObject = 0;
  }
  v4 = v1->m_spTextWin.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spTextWin.m_pObject = 0;
  }
  v5 = v1->m_spCaret.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spCaret.m_pObject = 0;
  }
  v6 = v1->m_spCaret.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spTextWin.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  v8 = v1->m_spEditWin.m_pObject;
  if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount) && v8 )
    v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spFont.m_pObject;
  if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.m_uiRefCount) && v9 )
    v9->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  PgWin::_PgWin(&v1->baseclass_0);
}
// 981EEC: using guessed type int (__stdcall *EditWin___vftable_)(int uiFlags);
// 981F0C: using guessed type int (__thiscall *EditWin___vftable_)(void *p, char);

//----- (00446170) --------------------------------------------------------
void __thiscall EditWin::SetCaretColor(EditWin *this, D3DXCOLOR *kDxColor)
{
  NiAVObject *v2; // ecx@1
  NiProperty *v3; // eax@2
  float v4; // edx@3
  double v5; // st7@3
  float v6; // ecx@3
  float v7; // ST0C_4@3

  v2 = (NiAVObject *)this->m_spCaret.m_pObject;
  if ( v2 )
  {
    v3 = NiAVObject::GetProperty(v2, 3);
    if ( v3 )
    {
      v4 = kDxColor->g;
      v5 = kDxColor->b;
      v6 = kDxColor->r;
      ++v3[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      v7 = v5;
      v3[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(v6);
      v3[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(v4);
      v3[2].baseclass_0.m_uiExtraDataSize = LODWORD(v7);
    }
  }
}

//----- (004461C0) --------------------------------------------------------
void __thiscall EditWin::OnEditEnd(EditWin *this, unsigned int wParam, int lParam)
{
  int v3; // esi@1
  PgWin *v4; // eax@1

  v3 = (int)this;
  v4 = PgWin::GetParentWin(&this->baseclass_0);
  if ( v4 )
    PgWin::PostMsg((PgWin *)v3, v4, 4u, wParam, v3);
  (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 484))(v3, 1);
}

//----- (00446200) --------------------------------------------------------
void __thiscall EditWin::UpdateMeWin(EditWin *this, float fCurTime)
{
  EditWin *v2; // esi@1
  int v3; // ecx@2
  unsigned int v4; // eax@2
  int v5; // edx@3
  NiScreenElements *v6; // eax@4
  int v7; // edi@7
  int v8; // eax@7
  int v9; // ebx@7
  char *v10; // edi@10
  int v11; // eax@10
  int v12; // edx@10
  int v13; // ebx@10
  char v14; // cl@11
  unsigned int v15; // eax@12
  unsigned int v16; // ebx@12
  PgTextGeometry *v17; // eax@16
  bool v18; // cl@17
  PgFont *v19; // ebx@17
  tagRECT *v20; // ST18_4@17
  bool v21; // ST14_1@17
  bool v22; // ST10_1@17
  int v23; // ST0C_4@17
  int v24; // eax@17
  NiScreenElements *v25; // esi@19
  float v26; // eax@19
  float v27; // ST2C_4@19
  signed __int64 kPoint; // [sp+8h] [bp-Ch]@2
  bool bAutoWordWrap[4]; // [sp+10h] [bp-4h]@2
  int iYPos; // [sp+1Ch] [bp+8h]@7

  v2 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)() )
  {
    v2->m_spCaret.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    return;
  }
  v3 = EditWin::ms_uiCaretBlinkTime + v2->m_uiLastBlinkTime;
  *(_DWORD *)bAutoWordWrap = HIWORD(fCurTime) | 0xC00;
  kPoint = (signed __int64)(fCurTime * 1000.0);
  v4 = (signed __int64)(fCurTime * 1000.0);
  if ( v3 <= v4 )
  {
    v5 = 1 - v2->m_iShowCaret;
    v2->m_uiLastBlinkTime = v4;
    v2->m_iShowCaret = v5;
  }
  v6 = v2->m_spCaret.m_pObject;
  if ( v2->m_iShowCaret == 1 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  else
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v7 = 0;
  iYPos = 0;
  v8 = ((int (*)(void))v2->m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  v9 = v8;
  if ( !v8 || !*(_BYTE *)v8 )
    goto LABEL_19;
  SelectObject(v2->m_spFont.m_pObject->baseclass_0.m_kFontRenderStuff.hDC, v2->m_spFont.m_pObject->baseclass_0.m_hFont);
  if ( v2->m_eType == 1342177312 )
  {
    v10 = fs(0);
    v11 = v9;
    v12 = (int)v10;
    v13 = v9 + 1;
    do
      v14 = *(_BYTE *)v11++;
    while ( v14 );
    v15 = v11 - v13;
    v16 = v15;
    if ( v15 )
    {
      memset(v10, 42, v15);
      v12 = (int)&v10[v16];
    }
    *(_BYTE *)v12 = 0;
  }
  else
  {
    v10 = (char *)v9;
  }
  v17 = v2->m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject;
  if ( v17 )
  {
    v18 = v17->baseclass_0.m_bTextCmdOn;
    v19 = v2->m_spFont.m_pObject;
    bAutoWordWrap[0] = v17->baseclass_0.m_bAutoWordWrap;
    v20 = &v17->baseclass_0.m_kRect;
    v21 = v18;
    v22 = bAutoWordWrap[0];
    v23 = v17->baseclass_0.m_iVerticalGap;
    v24 = PgEditWin::GetCaretPos(v2->m_spEditWin.m_pObject);
    PgFont::GetCursorPosOnText(v19, v10, v24, (tagPOINT *)&kPoint, v23, v22, v21, v20, 17);
    v7 = kPoint;
    iYPos = HIDWORD(kPoint);
    if ( (unsigned int)kPoint >= ((int (__thiscall *)(EditWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2) )
      v7 = ((int (__thiscall *)(EditWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2)
         - 1;
LABEL_19:
    v25 = v2->m_spCaret.m_pObject;
    v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    *(_DWORD *)bAutoWordWrap = v7 + 1;
    v27 = (double)(v7 + 1) - 1.0;
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v27;
    *(float *)&kPoint = (double)iYPos - 2.0;
    LODWORD(v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y) = kPoint;
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v26;
  }
}
// A97658: using guessed type int EditWin__ms_uiCaretBlinkTime;

//----- (00446400) --------------------------------------------------------
void __thiscall EditWinEx::SetDrawFormat(EditWinEx *this, unsigned int uiAlign)
{
  EditWinEx *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(uiAlign);
  ((void (*)(void))v2->baseclass_0.m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor)();
  ((void (*)(void))v2->baseclass_0.m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)();
}

//----- (00446450) --------------------------------------------------------
unsigned int __thiscall EditWinEx::GetDrawFormat(EditWinEx *this)
{
  PgTextGeometry *v1; // eax@1
  unsigned int result; // eax@2

  v1 = this->baseclass_0.m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject;
  if ( v1 )
    result = v1->m_uiDrawFormat;
  else
    result = 0;
  return result;
}

//----- (00446470) --------------------------------------------------------
void __thiscall EditWinEx::OnEditEnd(EditWinEx *this, unsigned int wParam, int lParam)
{
  int v3; // esi@1
  PgWin *v4; // eax@1

  v3 = (int)this;
  v4 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
  if ( v4 )
    PgWin::PostMsg((PgWin *)v3, v4, 4u, 0, v3);
  (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 484))(v3, 1);
}

//----- (004464A0) --------------------------------------------------------
void __thiscall EditWinEx::KillFocus(EditWinEx *this, bool bShowText)
{
  EditWinEx *v2; // esi@1
  int v3; // eax@2
  int v4; // edx@2
  char v5; // cl@3
  int v6; // eax@6

  v2 = this;
  if ( (EditWinEx *)EditWin::ms_pkCurEditWin == this )
  {
    EditWin::ms_pkCurEditWin = 0;
    ((void (__stdcall *)(_DWORD))this->baseclass_0.m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShowText);
    SetFocus(g_hMainWnd);
    v3 = ((int (__thiscall *)(EditWinEx *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v2);
    v4 = v3 + 1;
    do
      v5 = *(_BYTE *)v3++;
    while ( v5 );
    if ( v3 == v4 && v2->m_DefaultStr.baseclass_0._Mysize )
    {
      v6 = (int)&v2->m_DefaultStr;
      if ( v2->m_DefaultStr.baseclass_0._Myres >= 0x10 )
        v6 = *(_DWORD *)v6;
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
        (NiRefObject *)v2,
        v6);
    }
  }
}

//----- (00446520) --------------------------------------------------------
void __thiscall EditWinEx::SetFocus(EditWinEx *this)
{
  EditWinEx *v1; // esi@1
  PgWin *v2; // eax@3
  int v3; // ebx@3
  PgWin *v4; // edi@3
  PgWinEditText *v5; // ecx@5

  v1 = this;
  if ( this->baseclass_0.m_bEnalbe )
  {
    if ( EditWin::ms_pkCurEditWin )
    {
      v2 = PgWin::GetParentWin(EditWin::ms_pkCurEditWin);
      v3 = (int)EditWin::ms_pkCurEditWin;
      v4 = v2;
      if ( PgWinMgr::IsIn(&Pgg_kWinMgr, v2) )
        PgWin::ProcessMsg(v4, 3u, 0, v3);
    }
    EditWin::ms_pkCurEditWin = (PgWin *)v1;
    ((void (*)(void))v1->baseclass_0.m_spEditWin.m_pObject->baseclass_0.vfptr[3].__vecDelDtor)();
    v5 = v1->baseclass_0.m_spTextWin.m_pObject;
    v1->baseclass_0.m_uiLastBlinkTime = 0;
    v1->baseclass_0.m_iShowCaret = 0;
    ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    if ( v1->m_bClearTextWhenFocusOn == 1 )
      ((void (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v1);
  }
}

//----- (004465B0) --------------------------------------------------------
bool __thiscall EditWin::Create(EditWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick)
{
  EditWin *v12; // esi@1
  PgFont *v13; // eax@1
  PgFont *v14; // edi@1
  PgFont *v15; // ebx@1
  bool result; // al@9
  unsigned int v17; // edi@11
  PgEditWin *v18; // eax@14
  PgFont *v19; // eax@14
  bool v20; // zf@14
  PgWinEditText **v21; // edi@14
  NiD3DDefaultShader *v22; // eax@15
  PgWinEditText *v23; // eax@16
  NiScreenElementsData *v24; // edi@20
  void *v25; // eax@20
  int v26; // ebx@20
  int v27; // eax@21
  NiScreenElements *v28; // edi@22
  void *v29; // eax@29
  int v30; // eax@30
  float v31; // ecx@32
  NiAVObject *v32; // ecx@32
  void *v33; // eax@32
  void *v34; // edi@32
  NiAVObject *v35; // ecx@35
  NiScreenElements *v36; // eax@35
  float v37; // ecx@35
  float v38; // edx@35
  HINSTANCE__ *v39; // [sp-4h] [bp-80h]@12
  HWND__ *v40; // [sp+0h] [bp-7Ch]@12
  unsigned int v41; // [sp+4h] [bp-78h]@12
  unsigned int v42; // [sp+8h] [bp-74h]@12
  int v43; // [sp+Ch] [bp-70h]@12
  bool v44; // [sp+10h] [bp-6Ch]@12
  tagRECT *v45; // [sp+14h] [bp-68h]@12
  HFONT__ *v46; // [sp+18h] [bp-64h]@12
  unsigned int v47; // [sp+1Ch] [bp-60h]@1
  tagSIZE kSize; // [sp+2Ch] [bp-50h]@20
  float v49; // [sp+34h] [bp-48h]@32
  float v50; // [sp+38h] [bp-44h]@32
  float v51; // [sp+3Ch] [bp-40h]@32
  int v52; // [sp+40h] [bp-3Ch]@1
  unsigned int uiStyle; // [sp+44h] [bp-38h]@1
  int iLimitLength; // [sp+48h] [bp-34h]@1
  unsigned int v55; // [sp+4Ch] [bp-30h]@1
  PgWin *v56; // [sp+50h] [bp-2Ch]@1
  unsigned int v57; // [sp+54h] [bp-28h]@1
  unsigned int v58; // [sp+58h] [bp-24h]@1
  tagRECT kRect; // [sp+5Ch] [bp-20h]@11
  unsigned int v60; // [sp+6Ch] [bp-10h]@1
  int v61; // [sp+78h] [bp-4h]@20
  int v62; // [sp+7Ch] [bp+0h]@1

  v60 = (unsigned int)&v62 ^ __security_cookie;
  v47 = (unsigned int)&v62 ^ __security_cookie;
  v58 = uiWidth;
  uiStyle = eType;
  v12 = this;
  LOBYTE(v52) = bClearTextOnEnd;
  v57 = uiHeight;
  v56 = pkParent;
  iLimitLength = uiLimitTextLen;
  v55 = uiStopFlag;
  v13 = Font::Get(eFontType);
  v14 = v12->m_spFont.m_pObject;
  v15 = v13;
  if ( v14 != v13 )
  {
    if ( v14 && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.m_uiRefCount) && v14 )
      v14->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    v12->m_spFont.m_pObject = v15;
    if ( v15 )
      InterlockedIncrement((volatile LONG *)&v15->baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v12->m_spFont.m_pObject && PgWin::Create(&v12->baseclass_0, iXPos, iYPos, v58, v57, v56, 0, 0) )
  {
    kRect.top = iYPos;
    v17 = uiStyle;
    kRect.left = iXPos;
    kRect.right = iXPos + v58;
    kRect.bottom = iYPos + v57;
    if ( uiStyle == 1342181380 )
    {
      v46 = v12->m_spFont.m_pObject->baseclass_0.m_hFont;
      v45 = &kRect;
      v44 = v52;
      v43 = iLimitLength;
      v42 = v55;
      v41 = uiStyle;
      v40 = g_hMainWnd;
      v39 = g_hMainInstance;
    }
    else
    {
      v46 = 0;
      v45 = 0;
      v44 = v52;
      v43 = iLimitLength;
      v42 = v55;
      v41 = uiStyle;
      v40 = g_hMainWnd;
      v39 = g_hMainInstance;
    }
    v18 = PgEditWin::CreateWin(v39, v40, v41, v42, v43, v44, v45, v46);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v12->m_spEditWin, (NiD3DDefaultShader *)v18);
    EditWin::SetFont(v12);
    v19 = v12->m_spFont.m_pObject;
    v12->m_eType = uiStyle;
    v20 = v17 == 1342177312;
    v21 = (PgWinEditText **)&v12->m_spTextWin;
    if ( v20 )
    {
      v22 = (NiD3DDefaultShader *)PgWinPasswdText::CreateWin(0, 0, v58, v57, v19, &v12->baseclass_0, 0, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v12->m_spTextWin, v22);
    }
    else
    {
      v23 = PgWinEditText::CreateWin(0, 0, v58, v57, v19, &v12->baseclass_0, 0, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v12->m_spTextWin, (NiD3DDefaultShader *)v23);
      if ( uiStyle == 1342181380 )
      {
        (*v21)->baseclass_0.m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
        PgWinEditText::SetAutoAlign(*v21, 0);
      }
    }
    ((void (__stdcall *)(PgWinEditText *, unsigned int))v12->m_spEditWin.m_pObject->baseclass_0.vfptr[22].__vecDelDtor)(
      *v21,
      v47);
    v12->m_bForceFocusWhenClick = bForceFocusWhenClick;
    if ( bForceFocusWhenClick )
      PgWinBut::CreateWin(0, 0, v58, v57, &v12->baseclass_0, 0, 0, 0);
    SelectObject(
      v12->m_spFont.m_pObject->baseclass_0.m_kFontRenderStuff.hDC,
      v12->m_spFont.m_pObject->baseclass_0.m_hFont);
    PgFont::GetTextSize(v12->m_spFont.m_pObject, "|", 1, &kSize);
    v24 = PgUtil::CreateScreenGeometryData(2u, kSize.cy + 2);
    v25 = operator new(0xC4u);
    v56 = (PgWin *)v25;
    v26 = 0;
    v61 = 0;
    if ( v25 )
    {
      NiScreenElements::NiScreenElements((NiScreenElements *)v25, v24);
      v26 = v27;
    }
    v28 = v12->m_spCaret.m_pObject;
    v61 = -1;
    if ( v28 != (NiScreenElements *)v26 )
    {
      if ( v28
        && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v28 )
        v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v28,
          1u);
      v12->m_spCaret.m_pObject = (NiScreenElements *)v26;
      if ( v26 )
        InterlockedIncrement((volatile LONG *)(v26 + 4));
    }
    v29 = operator new(0x60u);
    v56 = (PgWin *)v29;
    v61 = 1;
    if ( v29 )
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v29);
    else
      v30 = 0;
    ++*(_DWORD *)(v30 + 88);
    v49 = 1.0;
    v50 = 1.0;
    v51 = 1.0;
    *(float *)(v30 + 68) = 1.0;
    v31 = v51;
    *(float *)(v30 + 72) = 1.0;
    *(_DWORD *)(v30 + 76) = LODWORD(v31);
    v32 = (NiAVObject *)v12->m_spCaret.m_pObject;
    v61 = -1;
    NiAVObject::AttachProperty(v32, (NiProperty *)v30);
    v33 = operator new(0x28u);
    v34 = v33;
    v56 = (PgWin *)v33;
    v61 = 2;
    if ( v33 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v33);
      *(_DWORD *)v34 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v34 + 14) = 0;
      *((_DWORD *)v34 + 8) = 0;
      *((_DWORD *)v34 + 9) = 1;
    }
    else
    {
      v34 = 0;
    }
    *((_DWORD *)v34 + 8) = 0;
    *((_DWORD *)v34 + 9) = 0;
    v35 = (NiAVObject *)v12->m_spCaret.m_pObject;
    v61 = -1;
    NiAVObject::AttachProperty(v35, (NiProperty *)v34);
    v36 = v12->m_spCaret.m_pObject;
    v37 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v50 = -2.0;
    v38 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v37;
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v50;
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v38;
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor(
      (NiRefObject *)v12,
      (unsigned int)v12->m_spCaret.m_pObject);
    NiAVObject::UpdateProperties(&v12->baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v12->baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00446990) --------------------------------------------------------
void __thiscall EditWinEx::EditWinEx(EditWinEx *this)
{
  EditWinEx *v1; // esi@1
  int v2; // edi@1
  bool v3; // cf@3

  v1 = this;
  EditWin::EditWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EditWinEx::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EditWinEx::_vftable_;
  v2 = (int)&v1->m_DefaultStr;
  v1->m_DefaultStr.baseclass_0._Myres = 15;
  v1->m_DefaultStr.baseclass_0._Mysize = 0;
  v1->m_DefaultStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !EditWin::ms_uiCaretBlinkTime )
    EditWin::ms_uiCaretBlinkTime = GetCaretBlinkTime();
  v1->baseclass_0.m_uiLastBlinkTime = 0;
  v1->baseclass_0.m_iShowCaret = 0;
  v1->baseclass_0.m_bEnalbe = 1;
  v3 = v1->m_DefaultStr.baseclass_0._Myres < 0x10;
  v1->m_DefaultStr.baseclass_0._Mysize = 0;
  if ( !v3 )
    v2 = *(_DWORD *)v2;
  *(_BYTE *)v2 = 0;
  v1->m_bClearTextWhenFocusOn = 0;
}
// 982118: using guessed type int (__stdcall *EditWinEx___vftable_)(int uiFlags);
// 982134: using guessed type int (__thiscall *EditWinEx___vftable_)(void *p, char);
// A97658: using guessed type int EditWin__ms_uiCaretBlinkTime;

//----- (00446A00) --------------------------------------------------------
void __thiscall EditWinEx::_EditWinEx(EditWinEx *this)
{
  EditWinEx *v1; // edi@1
  PgFont *v2; // esi@1
  PgEditWin *v3; // esi@6
  PgWinEditText *v4; // esi@11
  NiScreenElements *v5; // esi@16
  int v6; // eax@22

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EditWinEx::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EditWinEx::_vftable_;
  v2 = this->baseclass_0.m_spFont.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->baseclass_0.m_spFont.m_pObject = 0;
  }
  v3 = v1->baseclass_0.m_spEditWin.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->baseclass_0.m_spEditWin.m_pObject = 0;
  }
  v4 = v1->baseclass_0.m_spTextWin.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->baseclass_0.m_spTextWin.m_pObject = 0;
  }
  v5 = v1->baseclass_0.m_spCaret.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->baseclass_0.m_spCaret.m_pObject = 0;
  }
  v1->m_DefaultStr.baseclass_0._Mysize = 0;
  if ( v1->m_DefaultStr.baseclass_0._Myres < 0x10 )
    v6 = (int)&v1->m_DefaultStr;
  else
    v6 = *(_DWORD *)&v1->m_DefaultStr.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_BYTE *)v6 = 0;
  if ( v1->m_DefaultStr.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_DefaultStr.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_DefaultStr.baseclass_0._Myres = 15;
  v1->m_DefaultStr.baseclass_0._Mysize = 0;
  v1->m_DefaultStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  EditWin::_EditWin(&v1->baseclass_0);
}
// 982118: using guessed type int (__stdcall *EditWinEx___vftable_)(int uiFlags);
// 982134: using guessed type int (__thiscall *EditWinEx___vftable_)(void *p, char);

//----- (00446B70) --------------------------------------------------------
bool __thiscall EditWinEx::Create(EditWinEx *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick)
{
  return EditWin::Create(
           &this->baseclass_0,
           iXPos,
           iYPos,
           uiWidth,
           uiHeight,
           pkParent,
           eType,
           uiLimitTextLen,
           uiStopFlag,
           bClearTextOnEnd,
           eFontType,
           bForceFocusWhenClick);
}

//----- (00446B80) --------------------------------------------------------
EditWin *__cdecl EditWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick)
{
  void *v11; // eax@1
  int v12; // eax@2
  int v13; // esi@2
  PgWin *v14; // edi@8
  EditWin *v15; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v17; // [sp+10h] [bp-4h]@1

  v11 = operator new(0x148u);
  result.m_pObject = (PgWin *)v11;
  v17 = 0;
  if ( v11 )
  {
    EditWin::EditWin((EditWin *)v11);
    v13 = v12;
  }
  else
  {
    v13 = 0;
  }
  if ( v13 )
    InterlockedIncrement((volatile LONG *)(v13 + 4));
  v17 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v13);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, unsigned int, PgWin *, EditWin::Type, unsigned int, unsigned int, _DWORD, Font::Type, _DWORD))(*(_DWORD *)v13 + 492))(
                          v13,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          eType,
                          uiLimitTextLen,
                          uiStopFlag,
                          bClearTextOnEnd,
                          eFontType,
                          bForceFocusWhenClick) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v13 + 356))(v13);
    v17 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
    v15 = (EditWin *)v13;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v13);
    if ( result.m_pObject )
    {
      v14 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v14 )
          v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
      }
    }
    v17 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
    v15 = 0;
  }
  return v15;
}

//----- (00446CE0) --------------------------------------------------------
EditWinEx *__cdecl EditWinEx::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick)
{
  void *v11; // eax@1
  int v12; // eax@2
  int v13; // esi@2
  PgWin *v14; // edi@8
  EditWinEx *v15; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v17; // [sp+10h] [bp-4h]@1

  v11 = operator new(0x168u);
  result.m_pObject = (PgWin *)v11;
  v17 = 0;
  if ( v11 )
  {
    EditWinEx::EditWinEx((EditWinEx *)v11);
    v13 = v12;
  }
  else
  {
    v13 = 0;
  }
  if ( v13 )
    InterlockedIncrement((volatile LONG *)(v13 + 4));
  v17 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v13);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, unsigned int, PgWin *, EditWin::Type, unsigned int, unsigned int, _DWORD, Font::Type, _DWORD))(*(_DWORD *)v13 + 492))(
                          v13,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          eType,
                          uiLimitTextLen,
                          uiStopFlag,
                          bClearTextOnEnd,
                          eFontType,
                          bForceFocusWhenClick) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v13 + 356))(v13);
    v17 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
    v15 = (EditWinEx *)v13;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v13);
    if ( result.m_pObject )
    {
      v14 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v14 )
          v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
      }
    }
    v17 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
    v15 = 0;
  }
  return v15;
}

//----- (00446E40) --------------------------------------------------------
void __thiscall EditWinEx::SetDefaultStr(EditWinEx *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *DefaultStr)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_DefaultStr,
    DefaultStr,
    0,
    0xFFFFFFFFu);
}

//----- (00446E60) --------------------------------------------------------
void __cdecl PgUtil::SetXYTranslate(NiAVObject *pkAVObj, float fX, float fY)
{
  float v3; // ecx@1

  v3 = pkAVObj->m_kLocal.m_Translate.z;
  pkAVObj->m_kLocal.m_Translate.x = fX;
  pkAVObj->m_kLocal.m_Translate.y = fY;
  pkAVObj->m_kLocal.m_Translate.z = v3;
}

//----- (00446EA0) --------------------------------------------------------
void __thiscall EditWin::SetFont(EditWin *this)
{
  PgFont *v1; // ebx@1
  PgEditWin *v2; // esi@1
  PgFont *v3; // edi@1

  v1 = this->m_spFont.m_pObject;
  v2 = this->m_spEditWin.m_pObject;
  v3 = v2->m_spFont.m_pObject;
  if ( v3 != v1 )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spFont.m_pObject = v1;
    if ( v1 )
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (00446EF0) --------------------------------------------------------
bool __thiscall EditWin::IsDuringEdit(EditWin *this)
{
  bool result; // al@2

  if ( (EditWin *)EditWin::ms_pkCurEditWin == this )
    result = GetFocus() != 0;
  else
    result = 0;
  return result;
}

//----- (00446F10) --------------------------------------------------------
void *__thiscall EditWin::_scalar_deleting_destructor_(EditWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  EditWin::_EditWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00446F40) --------------------------------------------------------
void *__thiscall EditWinEx::_scalar_deleting_destructor_(EditWinEx *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  EditWinEx::_EditWinEx(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00446F70) --------------------------------------------------------
void __thiscall FlexMsgBox::FlexMsgBox(FlexMsgBox *this)
{
  FlexMsgBox *v1; // esi@1

  v1 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FlexMsgBox::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FlexMsgBox::_vftable_;
  v1->m_pkTextGeom = 0;
}
// 982370: using guessed type int (__stdcall *FlexMsgBox___vftable_)(int uiFlags);
// 98238C: using guessed type int (__thiscall *FlexMsgBox___vftable_)(void *p, char);

//----- (00446FA0) --------------------------------------------------------
void __thiscall FlexMsgBox::_FlexMsgBox(FlexMsgBox *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FlexMsgBox::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FlexMsgBox::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
}
// 982370: using guessed type int (__stdcall *FlexMsgBox___vftable_)(int uiFlags);
// 98238C: using guessed type int (__thiscall *FlexMsgBox___vftable_)(void *p, char);

//----- (00446FC0) --------------------------------------------------------
void __thiscall FlexMsgBox::SetText(FlexMsgBox *this, char *pcText)
{
  FlexMsgBox *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  int v4; // eax@1
  int v5; // edi@1
  PgWinBut *v6; // edi@2
  NiRefObjectVtbl *v7; // ST10_4@2
  int v8; // eax@2
  int v9; // edx@2
  NiRefObjectVtbl *v10; // eax@2
  NiRefObjectVtbl *v11; // ebx@3
  unsigned int v12; // edi@3
  unsigned int v13; // eax@3
  PgWinBut *v14; // edi@3
  NiRefObjectVtbl *v15; // ST10_4@3
  PgTextGeometry *v16; // ebx@3
  int v17; // eax@3
  NiRefObjectVtbl *v18; // edi@4
  int v19; // eax@4
  NiRefObjectVtbl *v20; // edi@4
  int v21; // eax@4
  int pcTexta; // [sp+18h] [bp+8h]@2
  int pcTextb; // [sp+18h] [bp+8h]@3

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  v3 = v2->m_pkOKBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = ((int (*)(void))v2->m_pkTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)();
  v3[44].__vecDelDtor((NiRefObject *)v2->m_pkOKBut, v4 + 2 * v2->baseclass_0.m_uiEdgeHeight + 3);
  v5 = ((int (*)(void))v2->m_pkTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor)()
     + 2 * v2->baseclass_0.m_uiEdgeWidth;
  if ( v5 >= (unsigned int)((int (*)(void))v2->m_pkOKBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)() )
  {
    v11 = v2->m_pkOKBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v12 = v2->baseclass_0.m_uiEdgeWidth
        - ((unsigned int)((int (*)(void))v2->m_pkOKBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)() >> 1);
    v13 = ((int (*)(void))v2->m_pkTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor)();
    v11[43].__vecDelDtor((NiRefObject *)v2->m_pkOKBut, v12 + (v13 >> 1));
    v14 = v2->m_pkOKBut;
    v15 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = v2->m_pkTextGeom;
    pcTextb = ((int (*)(void))v2->m_pkTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)();
    v17 = ((int (__thiscall *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v14);
    v9 = (int)v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
                (NiRefObject *)v16,
                v17 + pcTextb + 2 * v2->baseclass_0.m_uiEdgeHeight + 6)
       + 2 * v2->baseclass_0.m_uiEdgeWidth;
    v10 = v15;
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkOKBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v2->baseclass_0.m_uiEdgeWidth);
    v6 = v2->m_pkOKBut;
    v7 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pcTexta = ((int (*)(void))v2->m_pkTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)();
    v8 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v6);
    v9 = (int)v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                (NiRefObject *)v6,
                v8 + pcTexta + 2 * v2->baseclass_0.m_uiEdgeHeight + 6)
       + 2 * v2->baseclass_0.m_uiEdgeWidth;
    v10 = v7;
  }
  v10[135].__vecDelDtor((NiRefObject *)v2, v9);
  v18 = v2->m_pkThemeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v19 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v18[117].__vecDelDtor((NiRefObject *)v2->m_pkThemeWin, v19 - (v2->baseclass_0.m_uiEdgeWidth >> 1) - 1);
  v20 = v2->m_pkThemeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2);
  v20[118].__vecDelDtor((NiRefObject *)v2->m_pkThemeWin, v21 - (v2->baseclass_0.m_uiEdgeHeight >> 1) - 1);
}

//----- (004471B0) --------------------------------------------------------
void __thiscall FlexMsgBox::SetVerticalGap(FlexMsgBox *this, int iGap)
{
  SpScreenText::SetVerticalGap(&this->m_pkTextGeom->baseclass_0, iGap);
}

//----- (004471C0) --------------------------------------------------------
void __thiscall FlexMsgBox::OnCommand(FlexMsgBox *this, unsigned int wParam, int lParam)
{
  FlexMsgBox *v3; // edi@1
  bool v4; // zf@2
  char *v5; // esi@2

  v3 = this;
  if ( wParam == 10 )
  {
    v4 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
    v5 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    wParam = 0;
    if ( !v4 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        27,
        &wParam,
        &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          27,
          &wParam,
          &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      27,
      &wParam,
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PgWin::PostMsg(
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      2u,
      0,
      0);
  }
}

//----- (00447230) --------------------------------------------------------
bool __thiscall FlexMsgBox::Create(FlexMsgBox *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, PgFrameWork *pkFrameWork)
{
  FlexMsgBox *v5; // esi@1
  unsigned int v6; // edi@1
  unsigned int v7; // ebx@1
  bool result; // al@2
  PgFont *v9; // eax@4
  NiSourceTexture *v10; // ecx@6
  float v11; // ST30_4@6
  float v12; // ST34_4@6
  NiTexturePalette *v13; // edi@6
  char *v14; // eax@8
  NiSourceTexture *v15; // eax@9
  PgSprData *v16; // eax@12
  PgWinSpr *v17; // eax@12
  PgSprData *v18; // edi@14
  PgWin *v19; // ST14_4@14
  PgWin *v20; // edi@14
  PgFont *v21; // ST10_4@14
  unsigned int v22; // ST0C_4@14
  unsigned int v23; // eax@14
  PgWinText *v24; // edi@14
  NiRefObjectVtbl *v25; // ebx@14
  char *v26; // eax@14
  PgFrameWork *v27; // esi@15
  const char *v28; // [sp-20h] [bp-38h]@10
  int *v29; // [sp-1Ch] [bp-34h]@10
  int *v30; // [sp-18h] [bp-30h]@10
  NiSourceTexture *v31; // [sp-14h] [bp-2Ch]@10
  void *pkTexturea; // [sp+20h] [bp+8h]@3

  v5 = this;
  v6 = uiEdgeHeight;
  v7 = uiEdgeWidth;
  if ( !FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, 0, pkFrameWork) )
    goto LABEL_21;
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v5,
    2 * v5->baseclass_0.m_uiEdgeWidth + 128,
    2 * v5->baseclass_0.m_uiEdgeHeight + 12);
  pkTexturea = operator new(0x14Cu);
  if ( pkTexturea )
  {
    v9 = Font::Get(0);
    PgTextGeometry::PgTextGeometry((PgTextGeometry *)pkTexturea, v9);
  }
  else
  {
    v9 = 0;
  }
  v5->m_pkTextGeom = (PgTextGeometry *)v9;
  v10 = v9->baseclass_0.m_kBucketBuffer.m_aspkTextures[15].m_pObject;
  v11 = (double)v7;
  v12 = (double)v6;
  v9->baseclass_0.m_kBucketBuffer.m_aspkTextures[13].m_pObject = (NiSourceTexture *)LODWORD(v11);
  v9->baseclass_0.m_kBucketBuffer.m_aspkTextures[14].m_pObject = (NiSourceTexture *)LODWORD(v12);
  v9->baseclass_0.m_kBucketBuffer.m_aspkTextures[15].m_pObject = v10;
  v5->m_pkTextGeom->baseclass_0.m_bTextCmdOn = 1;
  SpScreenText::SetVerticalGap(&v5->m_pkTextGeom->baseclass_0, 3);
  pkFrameWork = 0;
  v13 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v14 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v14, (NiPointer<NiNode> *)&pkFrameWork, v13);
  if ( pkFrameWork )
  {
    v15 = MenuTexMgr::GetTexture(0x13u);
    if ( v15 )
    {
      v31 = v15;
      v30 = (int *)&uiEdgeHeight;
      v29 = (int *)&uiEdgeWidth;
      v28 = "Theme";
    }
    else
    {
      v31 = 0;
      v30 = (int *)&uiEdgeHeight;
      v29 = (int *)&uiEdgeWidth;
      v28 = "Theme";
    }
    v16 = PgSprData::Create((NiAVObject *)pkFrameWork, v28, v29, v30, v31);
    v17 = PgWinSpr::CreateWin(
            uiEdgeWidth,
            uiEdgeHeight,
            v16,
            &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v5->m_pkThemeWin = v17;
    if ( v17 )
    {
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v17,
        0);
      ((void (__stdcall *)(_DWORD, _DWORD))v5->m_pkThemeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v5->m_pkTextGeom,
        0);
    }
    v18 = PgSprData::Create((NiAVObject *)pkFrameWork, "BtnNor01", (int *)&uiEdgeWidth, (int *)&uiEdgeHeight, 0);
    PgSprData::Add(v18, (NiAVObject *)pkFrameWork, "BtnClick01");
    PgSprData::Add(v18, (NiAVObject *)pkFrameWork, "BtnOver01");
    v19 = (PgWin *)PgWinBut::CreateWin(
                     uiEdgeWidth,
                     uiEdgeHeight,
                     v18,
                     &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                     0xAu,
                     0,
                     0);
    v5->m_pkOKBut = (PgWinBut *)v19;
    v20 = v19;
    v21 = Font::Get(0);
    v22 = ((int (__thiscall *)(_DWORD))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v20);
    v23 = ((int (__thiscall *)(_DWORD))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v20);
    v24 = PgWinText::CreateWin(0, 0, v23, v22, v21, v19, 0, 0);
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v24,
      5u);
    v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData::Get(0x4F5F499Fu);
    v25[118].__vecDelDtor((NiRefObject *)v24, (unsigned int)v26);
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v24,
      0);
    NiAVObject::UpdateProperties(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( pkFrameWork )
    {
      v27 = pkFrameWork;
      if ( !InterlockedDecrement((volatile LONG *)&pkFrameWork->baseclass_0.m_pkMsgHooker) )
      {
        if ( v27 )
          v27->baseclass_0.vfptr->SetMsgHooker((IDirectMessenger *)v27, (IDirectMessenger *)1);
      }
    }
    result = 1;
  }
  else
  {
LABEL_21:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00447530) --------------------------------------------------------
FlexMsgBox *__cdecl FlexMsgBox::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth, PgFrameWork *pkFrameWork)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  FlexMsgBox *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1ACu);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    FrameBoxWin::FrameBoxWin((FrameBoxWin *)v4);
    *(_DWORD *)v5 = &FlexMsgBox::_vftable_;
    *((_DWORD *)v5 + 58) = &FlexMsgBox::_vftable_;
    *((_DWORD *)v5 + 104) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiSourceTexture *, unsigned int, unsigned int, PgFrameWork *))(*(_DWORD *)v5 + 548))(
                          v5,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (FlexMsgBox *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 982370: using guessed type int (__stdcall *FlexMsgBox___vftable_)(int uiFlags);
// 98238C: using guessed type int (__thiscall *FlexMsgBox___vftable_)(void *p, char);

//----- (00447680) --------------------------------------------------------
void __cdecl FlexMsgBox::Open(char *pcText)
{
  NiSourceTexture *v1; // eax@1
  PgWin *v2; // esi@1

  v1 = MenuTexMgr::GetTexture(1u);
  v2 = (PgWin *)FlexMsgBox::CreateWin(v1, 5u, 5u, 0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
  FlexMsgBox::SetText((FlexMsgBox *)v2, pcText);
}

//----- (004476E0) --------------------------------------------------------
void *__thiscall FlexMsgBox::_scalar_deleting_destructor_(FlexMsgBox *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FlexMsgBox::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FlexMsgBox::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 982370: using guessed type int (__stdcall *FlexMsgBox___vftable_)(int uiFlags);
// 98238C: using guessed type int (__thiscall *FlexMsgBox___vftable_)(void *p, char);

//----- (00447720) --------------------------------------------------------
void __thiscall FrameBoxWin::FrameBoxWin(FrameBoxWin *this)
{
  FrameBoxWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_bLock = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FrameBoxWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FrameBoxWin::_vftable_;
  *(_WORD *)&v1->m_bSizeDraggable = 0;
  v1->m_iSizeDragMinWidth = 100;
  v1->m_iSizeDragMaxWidth = 500;
  v1->m_iSizeDragMinHeight = 60;
  v1->m_iSizeDragMaxHeight = 300;
}
// 9825BC: using guessed type int (__stdcall *FrameBoxWin___vftable_)(int uiFlags);
// 9825DC: using guessed type int (__thiscall *FrameBoxWin___vftable_)(void *p, char);

//----- (00447780) --------------------------------------------------------
void __thiscall FrameBoxWin::_FrameBoxWin(FrameBoxWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FrameBoxWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FrameBoxWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9825BC: using guessed type int (__stdcall *FrameBoxWin___vftable_)(int uiFlags);
// 9825DC: using guessed type int (__thiscall *FrameBoxWin___vftable_)(void *p, char);

//----- (004477A0) --------------------------------------------------------
bool __thiscall FrameBoxWin::SizeDragHitTest(FrameBoxWin *this)
{
  FrameBoxWin *v1; // esi@1
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // eax@1
  NiRefObjectVtbl *v3; // eax@1
  int v4; // eax@1
  NiRefObjectVtbl *v5; // eax@1
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@1
  int v7; // eax@1
  NiRefObjectVtbl *v8; // edx@1
  int v9; // eax@1
  NiRefObjectVtbl *v10; // edx@1
  int v11; // eax@1
  int v12; // edx@1
  NiRefObjectVtbl *v13; // eax@1
  int v14; // eax@1
  NiRefObjectVtbl *v15; // edx@1
  int v16; // eax@1
  int v17; // edx@1
  NiRefObjectVtbl *v18; // eax@1
  int v19; // eax@1
  int v20; // edx@1
  NiRefObjectVtbl *v21; // eax@1
  int v22; // eax@1
  int v23; // ebx@1
  int v24; // edi@1
  bool v25; // al@1
  int x; // [sp+Ch] [bp-4Ch]@1
  int y; // [sp+10h] [bp-48h]@1
  tagRECT kRight; // [sp+14h] [bp-44h]@1
  tagRECT kBottom; // [sp+24h] [bp-34h]@1
  tagRECT kTop; // [sp+34h] [bp-24h]@1
  tagRECT kLeft; // [sp+44h] [bp-14h]@1
  unsigned int v33; // [sp+54h] [bp-4h]@1
  int v34; // [sp+58h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v1 = this;
  y = 0;
  x = 0;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor;
  this->m_kSizeDragBarState.bLeft = 0;
  *(_WORD *)&this->m_kSizeDragBarState.bRight = 0;
  this->m_kSizeDragBarState.bBottom = 0;
  ((void (__stdcall *)(int *, int *))v2)(&x, &y);
  kLeft.right = x + 7;
  v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kLeft.left = x - 7;
  kLeft.top = y - 7;
  v4 = ((int (__thiscall *)(FrameBoxWin *))v3[37].__vecDelDtor)(v1);
  kLeft.bottom = v4 + y + 7;
  v5 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kTop.left = x - 7;
  v6 = v5[36].__vecDelDtor;
  kTop.top = y - 7;
  v7 = ((int (__thiscall *)(FrameBoxWin *))v6)(v1);
  kTop.right = v7 + x + 7;
  v8 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kTop.bottom = y + 7;
  v9 = ((int (__thiscall *)(FrameBoxWin *))v8[36].__vecDelDtor)(v1);
  kRight.left = v9 + x - 7;
  v10 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kRight.top = y - 7;
  v11 = ((int (__thiscall *)(FrameBoxWin *))v10[36].__vecDelDtor)(v1);
  v12 = v11 + x + 7;
  v13 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kRight.right = v12;
  v14 = ((int (__thiscall *)(FrameBoxWin *))v13[37].__vecDelDtor)(v1);
  kRight.bottom = v14 + y + 7;
  v15 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kBottom.left = x - 7;
  v16 = ((int (__thiscall *)(FrameBoxWin *))v15[37].__vecDelDtor)(v1);
  v17 = v16 + y - 7;
  v18 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kBottom.top = v17;
  v19 = ((int (__thiscall *)(FrameBoxWin *))v18[36].__vecDelDtor)(v1);
  v20 = v19 + x + 7;
  v21 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  kBottom.right = v20;
  v22 = ((int (__thiscall *)(FrameBoxWin *))v21[37].__vecDelDtor)(v1);
  v23 = PgWin::ms_iMsY;
  v24 = PgWin::ms_iMsX.x;
  kBottom.bottom = v22 + y + 7;
  v1->m_kSizeDragBarState.bLeft = PtInRect(&kLeft, (POINT)__PAIR__(PgWin::ms_iMsY, PgWin::ms_iMsX.x)) != 0;
  v1->m_kSizeDragBarState.bTop = PtInRect(&kTop, (POINT)__PAIR__(v23, v24)) != 0;
  v1->m_kSizeDragBarState.bRight = PtInRect(&kRight, (POINT)__PAIR__(v23, v24)) != 0;
  v25 = PtInRect(&kBottom, (POINT)__PAIR__(v23, v24)) != 0;
  v1->m_kSizeDragBarState.bBottom = v25;
  if ( v1->m_kSizeDragBarState.bRight == 1 && v1->m_kSizeDragBarState.bLeft == 1 )
    *(_WORD *)&v1->m_kSizeDragBarState.bLeft = 1;
  if ( v25 == 1 && v1->m_kSizeDragBarState.bTop == 1 )
    *(_WORD *)&v1->m_kSizeDragBarState.bTop = 1;
  return v1->m_kSizeDragBarState.bLeft
      || v1->m_kSizeDragBarState.bRight
      || v1->m_kSizeDragBarState.bTop
      || v1->m_kSizeDragBarState.bBottom;
}
// A85C00: using guessed type int __security_cookie;

//----- (004479C0) --------------------------------------------------------
void __thiscall FrameBoxWin::ResizeLimited(FrameBoxWin *this, int iWidth, int iHeight)
{
  int v3; // esi@1
  int v4; // eax@5

  v3 = iWidth;
  if ( iWidth < this->m_iSizeDragMinWidth )
    v3 = this->m_iSizeDragMinWidth;
  if ( v3 > this->m_iSizeDragMaxWidth )
    v3 = this->m_iSizeDragMaxWidth;
  v4 = iHeight;
  if ( iHeight < this->m_iSizeDragMinHeight )
    v4 = this->m_iSizeDragMinHeight;
  if ( v4 > this->m_iSizeDragMaxHeight )
    v4 = this->m_iSizeDragMaxHeight;
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v3,
    v4);
}

//----- (00447A10) --------------------------------------------------------
bool __thiscall FrameBoxWin::HitTestEx(FrameBoxWin *this, int iSx, int iSy)
{
  FrameBoxWin *v3; // esi@1
  int v4; // eax@2
  int v5; // eax@4

  v3 = this;
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor)(
    &iSx,
    &iSy);
  return iSx >= -7
      && (v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3),
          iSx < v4 + 7)
      && iSy >= -7
      && (v5 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3),
          iSy < v5 + 7);
}

//----- (00447A70) --------------------------------------------------------
void __thiscall FrameBoxWin::ProcessMeInput(FrameBoxWin *this, bool *bHit)
{
  int v2; // ebx@0
  int v3; // edi@0
  FrameBoxWin *v4; // esi@1
  signed int v5; // edi@2
  NiRefObjectVtbl *v6; // eax@10
  int v7; // edx@17
  int v8; // eax@17
  int v9; // ecx@17
  int v10; // edi@17
  int v11; // ebx@17
  int v12; // eax@22
  NiRefObjectVtbl *v13; // edx@22
  int v14; // eax@22
  NiRefObjectVtbl *v15; // edx@22
  int v16; // eax@22
  NiRefObjectVtbl *v17; // edx@22
  int v18; // eax@22
  bool v19; // zf@22
  int v20; // ecx@23
  int v21; // ecx@25
  int v22; // edx@25
  bool v23; // sf@25
  unsigned __int8 v24; // of@25
  int v25; // edx@25
  int v26; // ecx@29
  int v27; // ecx@31
  int v28; // ecx@33
  int v29; // ecx@37
  int v30; // ecx@39
  int v31; // edi@41
  int v32; // ecx@43
  int v33; // ecx@45
  int v34; // ebx@47
  int v35; // ecx@50
  void *(__thiscall *v36)(NiRefObject *, unsigned int); // eax@50
  int v37; // eax@50
  void *(__thiscall *v38)(NiRefObject *, unsigned int); // edx@50
  int v39; // eax@50
  void *(__thiscall *v40)(NiRefObject *, unsigned int); // edx@50
  int v41; // eax@50
  int v42; // [sp-8h] [bp-2Ch]@17
  int v43; // [sp-4h] [bp-28h]@2
  int iNewLeft; // [sp+8h] [bp-1Ch]@27
  int iNewWidth; // [sp+Ch] [bp-18h]@27
  DirectUserMsgBody_SizeDrag kDrag; // [sp+10h] [bp-14h]@50
  unsigned int v47; // [sp+20h] [bp-4h]@1
  int v48; // [sp+24h] [bp+0h]@1

  v47 = (unsigned int)&v48 ^ __security_cookie;
  v4 = this;
  if ( this->m_bLock )
    return;
  v43 = v3;
  v5 = 1;
  if ( dword_B70350 < 1 )
  {
    if ( !(dword_B7035C >= 1) )
      goto LABEL_15;
    if ( (FrameBoxWin *)PgWin::ms_pkCapture == this )
    {
      PgWin::ms_pkCapture = 0;
      PgWinFrame::ResetAttachPos(&this->baseclass_0);
    }
LABEL_14:
    v4->m_bIsDuringSizeDrag = 0;
LABEL_15:
    if ( !v4->m_bIsDuringSizeDrag )
      goto LABEL_54;
    goto LABEL_16;
  }
  if ( !(unsigned __int8)((int (__thiscall *)(FrameBoxWin *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(this)
    || !FrameBoxWin::SizeDragHitTest(v4) )
    goto LABEL_14;
  ((void (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)(v4);
  byte_B7034C = 0;
  if ( dword_B70350 )
    --dword_B70350;
  if ( !v4->m_bSizeDraggable || PgWin::ms_pkCapture )
    goto LABEL_14;
  PgWin::ms_pkCapture = (PgWin *)v4;
  if ( !v4->m_bIsDuringSizeDrag )
  {
    v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4->m_bIsDuringSizeDrag = 1;
    v4->m_iSizeDragOrgX = PgWin::ms_iMsX.x;
    v4->m_iSizeDragOrgY = PgWin::ms_iMsY;
    v4->m_iSizeDragOrgLeft = ((int (__thiscall *)(FrameBoxWin *))v6[41].__vecDelDtor)(v4);
    v4->m_iSizeDragOrgTop = ((int (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4);
    v4->m_iSizeDragOrgWidth = ((int (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4);
    v4->m_iSizeDragOrgHeight = ((int (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4);
    goto LABEL_15;
  }
LABEL_16:
  if ( (FrameBoxWin *)PgWin::ms_pkCapture == v4 )
  {
    v7 = PgWin::ms_iMsX.x;
    v8 = v4->m_iSizeDragOrgX;
    v9 = v4->m_iSizeDragOrgY;
    v42 = v2;
    v10 = PgWin::ms_iMsX.x - v8;
    v11 = PgWin::ms_iMsY - v9;
    if ( !PgWin::ms_iMsX.x )
    {
      if ( PgWin::ms_iMsY == PgWin::ms_iMsX.x )
      {
        v11 = *(_DWORD *)(g_pkMouse + 68);
        v10 = 1;
        v4->m_iSizeDragOrgX = v8 + 1;
        v4->m_iSizeDragOrgY = v11 + v9;
        goto LABEL_22;
      }
      v7 = PgWin::ms_iMsX.x;
    }
    v4->m_iSizeDragOrgX = v7;
    v4->m_iSizeDragOrgY = PgWin::ms_iMsY;
LABEL_22:
    v12 = ((int (__thiscall *)(FrameBoxWin *, int, int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(
            v4,
            v42,
            v43);
    v13 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4->m_iSizeDragOrgLeft = v12;
    v14 = ((int (__thiscall *)(FrameBoxWin *))v13[42].__vecDelDtor)(v4);
    v15 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4->m_iSizeDragOrgTop = v14;
    v16 = ((int (__thiscall *)(FrameBoxWin *))v15[36].__vecDelDtor)(v4);
    v17 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4->m_iSizeDragOrgWidth = v16;
    v18 = ((int (__thiscall *)(FrameBoxWin *))v17[37].__vecDelDtor)(v4);
    v19 = v4->m_kSizeDragBarState.bLeft == 0;
    v4->m_iSizeDragOrgHeight = v18;
    if ( v19 )
    {
      if ( v4->m_kSizeDragBarState.bRight )
      {
        v26 = v4->m_iSizeDragMaxWidth;
        if ( v10 + v4->m_iSizeDragOrgWidth > v26 )
          v10 = v26 - v4->m_iSizeDragOrgWidth;
        v27 = v4->m_iSizeDragMinWidth;
        if ( v10 + v4->m_iSizeDragOrgWidth < v27 )
          v10 = v27 - v4->m_iSizeDragOrgWidth;
        iNewLeft = v4->m_iSizeDragOrgLeft;
        v28 = v10 + v4->m_iSizeDragOrgWidth;
      }
      else
      {
        v28 = v4->m_iSizeDragOrgWidth;
        iNewLeft = v4->m_iSizeDragOrgLeft;
      }
      iNewWidth = v28;
    }
    else
    {
      v20 = v4->m_iSizeDragMaxWidth;
      if ( v4->m_iSizeDragOrgWidth - v10 > v20 )
        v10 = v4->m_iSizeDragOrgWidth - v20;
      v21 = v4->m_iSizeDragMinWidth;
      v22 = v4->m_iSizeDragOrgWidth - v10;
      v24 = __OFSUB__(v22, v21);
      v23 = v22 - v21 < 0;
      v25 = v4->m_iSizeDragOrgWidth;
      if ( v23 ^ v24 )
        v10 = v25 - v21;
      iNewLeft = v10 + v4->m_iSizeDragOrgLeft;
      iNewWidth = v25 - v10;
    }
    if ( v4->m_kSizeDragBarState.bTop )
    {
      v29 = v4->m_iSizeDragMaxHeight;
      if ( v18 - v11 > v29 )
        v11 = v18 - v29;
      v30 = v4->m_iSizeDragMinHeight;
      if ( v18 - v11 < v30 )
        v11 = v18 - v30;
      v31 = v11 + v4->m_iSizeDragOrgTop;
      v18 -= v11;
    }
    else
    {
      if ( v4->m_kSizeDragBarState.bBottom )
      {
        v32 = v4->m_iSizeDragMaxHeight;
        if ( v18 + v11 > v32 )
          v11 = v32 - v18;
        v33 = v4->m_iSizeDragMinHeight;
        if ( v18 + v11 < v33 )
          v11 = v33 - v18;
        v31 = v4->m_iSizeDragOrgTop;
        v34 = v18 + v11;
        goto LABEL_50;
      }
      v31 = v4->m_iSizeDragOrgTop;
    }
    v34 = v18;
LABEL_50:
    ((void (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4);
    ((void (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4);
    v35 = iNewWidth
        - ((int (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4);
    v36 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    kDrag.iDeltaWidth = v35;
    v37 = ((int (__thiscall *)(FrameBoxWin *))v36)(v4);
    v38 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor;
    kDrag.iDeltaHeight = v34 - v37;
    ((void (__thiscall *)(FrameBoxWin *))v38)(v4);
    v39 = ((int (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v4);
    v40 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    kDrag.iDeltaLeft = iNewLeft - v39;
    v41 = ((int (__thiscall *)(FrameBoxWin *))v40)(v4);
    v19 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
    kDrag.iDeltaTop = v31 - v41;
    if ( !v19 )
    {
      ((void (__stdcall *)(signed int, DirectUserMsgBody_SizeDrag *, IDirectMessenger *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        14,
        &kDrag,
        &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, DirectUserMsgBody_SizeDrag *, IDirectMessenger *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          14,
          &kDrag,
          &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    ((void (__thiscall *)(IDirectMessenger *, signed int, DirectUserMsgBody_SizeDrag *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent)(
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      14,
      &kDrag);
    v5 = 1;
  }
LABEL_54:
  if ( (unsigned __int8)((int (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)(v4) )
  {
    if ( dword_B70350 )
      dword_B70350 += v5;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      PgWin::ms_kbRbutPressed.m_iBool += v5;
    PgWinFrame::ProcessMeInput(&v4->baseclass_0, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      PgWin::ms_kbRbutPressed.m_iBool -= v5;
    byte_B7034C = 0;
    if ( dword_B70350 )
      dword_B70350 -= v5;
  }
}
// 447A70: could not find valid save-restore pair for ebx
// 447A70: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;
// A98170: using guessed type int g_pkMouse;
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;
// B7035C: using guessed type int dword_B7035C;

//----- (00447EE0) --------------------------------------------------------
void __thiscall FrameBoxWin::AddScreenElement(FrameBoxWin *this, NiScreenElements *pkGeom, unsigned int uiTextureWidth, unsigned int uiTextureHeight, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight)
{
  float v8; // ST20_4@1
  float v9; // ST2C_4@1
  float v10; // ST34_4@1
  float v11; // ST30_4@1
  NiGeometryData *v12; // ecx@1
  int v13; // edi@1
  float v14; // ST48_4@1
  float v15; // ST40_4@1
  double v16; // st7@1
  float v17; // ST48_4@1
  float v18; // ST14_4@1
  float v19; // ST48_4@1
  float v20; // ST10_4@1
  float v21; // ST48_4@1
  float v22; // ST0C_4@1
  float v23; // ST48_4@1
  NiPoint2 pkPts[4]; // [sp+44h] [bp-24h]@1
  unsigned int v25; // [sp+64h] [bp-4h]@1
  int v26; // [sp+68h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v11 = (double)(uiHeight + uiYPos);
  pkPts[0].x = (double)uiXPos;
  pkPts[0].y = (double)uiYPos;
  pkPts[1].x = (double)uiXPos;
  pkPts[1].y = v11;
  pkPts[2].x = (double)(uiWidth + uiXPos);
  pkPts[2].y = v11;
  pkPts[3].x = (double)(uiWidth + uiXPos);
  v12 = pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
  pkPts[3].y = (double)uiYPos;
  v13 = NiScreenElementsData::Insert((NiScreenElementsData *)v12, 4u, 0, 0);
  NiScreenElementsData::SetVertex(
    (NiScreenElementsData *)pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    v13,
    0,
    pkPts);
  NiScreenElementsData::SetVertex(
    (NiScreenElementsData *)pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    v13,
    1,
    &pkPts[1]);
  NiScreenElementsData::SetVertex(
    (NiScreenElementsData *)pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    v13,
    2,
    &pkPts[2]);
  NiScreenElementsData::SetVertex(
    (NiScreenElementsData *)pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    v13,
    3,
    &pkPts[3]);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  v14 = (double)uiTextureHeight;
  v15 = (double)uiTextureWidth;
  v16 = v14;
  v17 = v11 / v14;
  v18 = v17;
  v10 = (double)(uiWidth + uiXPos);
  v19 = v10 / v15;
  v20 = v19;
  v9 = (double)uiYPos;
  v21 = v9 / v16;
  v22 = v21;
  v8 = (double)uiXPos;
  v23 = v8 / v15;
  NiScreenElementsData::SetTextures(
    (NiScreenElementsData *)pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    v13,
    0,
    v23,
    v22,
    v20,
    v18);
}
// A85C00: using guessed type int __security_cookie;

//----- (004480C0) --------------------------------------------------------
void __thiscall FrameBoxWin::ResizeScreenElement(FrameBoxWin *this, NiScreenElements *pkGeom, unsigned int uiIndex, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight)
{
  NiScreenElements *v7; // esi@1
  NiGeometryData *v8; // ecx@2
  bool v9; // sf@3
  unsigned int v10; // edx@3
  double v11; // st7@3
  NiScreenElementsData *v12; // ecx@5
  NiScreenElementsData *v13; // ecx@5
  NiScreenElementsData *v14; // ecx@5
  NiPoint2 kValue; // [sp+4h] [bp-Ch]@5
  float fTop; // [sp+Ch] [bp-4h]@3
  float fLeft; // [sp+18h] [bp+8h]@3
  float fBottom; // [sp+20h] [bp+10h]@5
  float fRight; // [sp+24h] [bp+14h]@3

  v7 = pkGeom;
  if ( pkGeom )
  {
    v8 = pkGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
    if ( LOWORD(v8[1].m_pkNormal) )
    {
      fLeft = (double)uiXPos;
      fTop = (double)uiYPos;
      v9 = ((uiHeight + uiYPos) & 0x80000000u) != 0;
      v10 = uiHeight + uiYPos;
      fRight = (double)(uiWidth + uiXPos);
      v11 = (double)(signed int)v10;
      if ( v9 )
        v11 = v11 + 4294967300.0;
      fBottom = v11;
      kValue.x = fLeft;
      kValue.y = fTop;
      NiScreenElementsData::SetVertex((NiScreenElementsData *)v8, uiIndex, 0, &kValue);
      v12 = (NiScreenElementsData *)v7->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
      kValue.x = fLeft;
      kValue.y = fBottom;
      NiScreenElementsData::SetVertex(v12, uiIndex, 1, &kValue);
      kValue.x = fRight;
      v13 = (NiScreenElementsData *)v7->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
      kValue.y = fBottom;
      NiScreenElementsData::SetVertex(v13, uiIndex, 2, &kValue);
      v14 = (NiScreenElementsData *)v7->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
      kValue.x = fRight;
      kValue.y = fTop;
      NiScreenElementsData::SetVertex(v14, uiIndex, 3, &kValue);
      NiScreenElementsData::UpdateBound((NiScreenElementsData *)v7->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    }
  }
}

//----- (004481D0) --------------------------------------------------------
void __thiscall FrameBoxWin::Resize(FrameBoxWin *this, unsigned int uiWidth, unsigned int uiHeight)
{
  unsigned int v3; // eax@1
  FrameBoxWin *v4; // esi@1
  NiRefObjectVtbl *v5; // edx@7
  unsigned int v6; // ST14_4@7
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@7

  v3 = uiWidth;
  v4 = this;
  if ( this->m_uiOrgWidth != uiWidth || this->m_uiOrgHeight != uiHeight )
  {
    if ( uiWidth < 2 * this->m_uiEdgeWidth + 1 )
      v3 = 2 * this->m_uiEdgeWidth + 1;
    if ( uiHeight < 2 * this->m_uiEdgeHeight + 1 )
      v3 = 2 * this->m_uiEdgeHeight + 1;
    v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    this->m_uiOrgWidth = v3;
    v6 = v3;
    v7 = v5[38].__vecDelDtor;
    this->m_uiOrgHeight = uiHeight;
    v7(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v6);
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
      (NiRefObject *)v4,
      uiHeight);
    FrameBoxWin::ResizeScreenElement(v4, v4->m_pkGeom, 0, 0, 0, v4->m_uiEdgeWidth, v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      1u,
      v4->m_uiOrgWidth - v4->m_uiEdgeWidth,
      0,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      2u,
      0,
      v4->m_uiOrgHeight - v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      3u,
      v4->m_uiOrgWidth - v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      4u,
      v4->m_uiEdgeWidth,
      0,
      v4->m_uiOrgWidth - 2 * v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      5u,
      0,
      v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - 2 * v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      6u,
      v4->m_uiOrgWidth - v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - 2 * v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      7u,
      v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - v4->m_uiEdgeHeight,
      v4->m_uiOrgWidth - 2 * v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::ResizeScreenElement(
      v4,
      v4->m_pkGeom,
      8u,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight,
      v4->m_uiOrgWidth - 2 * v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - 2 * v4->m_uiEdgeHeight);
    ((void (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
    NiAVObject::Update(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  }
}

//----- (004483F0) --------------------------------------------------------
bool __thiscall FrameBoxWin::CreateGeometry(FrameBoxWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight)
{
  FrameBoxWin *v4; // esi@1
  bool result; // al@2
  void *v6; // eax@5
  NiScreenElementsData *v7; // edi@5
  NiScreenElementsData *v8; // eax@6
  void *v9; // eax@7
  NiScreenElements *v10; // eax@8
  void *v11; // eax@10
  void *v12; // edi@10
  void *v13; // eax@13
  int v14; // eax@14
  int v15; // edi@14

  v4 = this;
  if ( pkTexture
    && ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture) > 2 * uiEdgeWidth
    && ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(pkTexture) > 2 * uiEdgeHeight )
  {
    v4->m_uiEdgeHeight = uiEdgeHeight;
    v4->m_uiEdgeWidth = uiEdgeWidth;
    v4->m_uiOrgWidth = ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture);
    v4->m_uiOrgHeight = ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(pkTexture);
    v6 = operator new(0x70u);
    v7 = 0;
    if ( v6 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v6, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
      v7 = v8;
    }
    v9 = operator new(0xC4u);
    if ( v9 )
      NiScreenElements::NiScreenElements((NiScreenElements *)v9, v7);
    else
      v10 = 0;
    v4->m_pkGeom = v10;
    v11 = operator new(0x20u);
    v12 = v11;
    if ( v11 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v11);
      *(_DWORD *)v12 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v12 + 14) = 236;
      *((_BYTE *)v12 + 30) = 0;
    }
    else
    {
      v12 = 0;
    }
    *((_WORD *)v12 + 14) |= 1u;
    NiAVObject::AttachProperty(&v4->m_pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (NiProperty *)v12);
    v13 = operator new(0x44u);
    if ( v13 )
    {
      NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v13);
      v15 = v14;
    }
    else
    {
      v15 = 0;
    }
    NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v15, &pkTexture->baseclass_0);
    NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v15, 0);
    *(_DWORD *)(v15 + 28) = 2;
    NiAVObject::AttachProperty(&v4->m_pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (NiProperty *)v15);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      0,
      0,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      v4->m_uiOrgWidth - v4->m_uiEdgeWidth,
      0,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      0,
      v4->m_uiOrgHeight - v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      v4->m_uiOrgWidth - v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      v4->m_uiEdgeWidth,
      0,
      v4->m_uiOrgWidth - 2 * v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      0,
      v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - 2 * v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      v4->m_uiOrgWidth - v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - 2 * v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - v4->m_uiEdgeHeight,
      v4->m_uiOrgWidth - 2 * v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight);
    FrameBoxWin::AddScreenElement(
      v4,
      v4->m_pkGeom,
      v4->m_uiOrgWidth,
      v4->m_uiOrgHeight,
      v4->m_uiEdgeWidth,
      v4->m_uiEdgeHeight,
      v4->m_uiOrgWidth - 2 * v4->m_uiEdgeWidth,
      v4->m_uiOrgHeight - 2 * v4->m_uiEdgeHeight);
    ((void (__thiscall *)(FrameBoxWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
    ((void (__thiscall *)(FrameBoxWin *, NiScreenElements *, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v4,
      v4->m_pkGeom,
      0);
    NiAVObject::UpdateProperties(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (004487B0) --------------------------------------------------------
bool __thiscall FrameBoxWin::Create(FrameBoxWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, int iXPos, int iYPos, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  FrameBoxWin *v8; // esi@1
  bool result; // al@1
  NiRefObjectVtbl *v10; // ebx@3
  int v11; // eax@3
  NiRefObjectVtbl *v12; // ebx@3
  int v13; // eax@3

  v8 = this;
  result = PgWinFrame::Create(&this->baseclass_0, iXPos, iYPos, pkParent, pkFrameWork, 0, 0);
  if ( result )
  {
    result = FrameBoxWin::CreateGeometry(v8, pkTexture, uiEdgeHeight, uiEdgeWidth);
    if ( result )
    {
      v10 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = ((int (__thiscall *)(_DWORD))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture);
      v10[38].__vecDelDtor((NiRefObject *)v8, v11);
      v12 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v13 = ((int (__thiscall *)(_DWORD))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(pkTexture);
      v12[39].__vecDelDtor((NiRefObject *)v8, v13);
      result = 1;
    }
  }
  return result;
}

//----- (00448830) --------------------------------------------------------
FrameBoxWin *__cdecl FrameBoxWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth, int iXPos, int iYPos, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v7; // eax@1
  int v8; // eax@2
  int v9; // esi@2
  PgWin *v10; // edi@8
  FrameBoxWin *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x1A0u);
  result.m_pObject = (PgWin *)v7;
  v13 = 0;
  if ( v7 )
  {
    FrameBoxWin::FrameBoxWin((FrameBoxWin *)v7);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)(v9 + 4));
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiSourceTexture *, unsigned int, unsigned int, int, int, PgWin *, PgFrameWork *))(*(_DWORD *)v9 + 544))(
                          v9,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth,
                          iXPos,
                          iYPos,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    v11 = (FrameBoxWin *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}

//----- (00448980) --------------------------------------------------------
void __thiscall PgWin::Bool::RealizeFalse(PgWin::Bool *this)
{
  bool v1; // zf@1
  int v2; // eax@2

  v1 = this->m_bReserveFalse == 0;
  this->m_bReserveFalse = 0;
  if ( !v1 )
  {
    v2 = this->m_iBool;
    if ( v2 )
      this->m_iBool = v2 - 1;
  }
}

//----- (004489A0) --------------------------------------------------------
void *__thiscall FrameBoxWin::_scalar_deleting_destructor_(FrameBoxWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FrameBoxWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FrameBoxWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9825BC: using guessed type int (__stdcall *FrameBoxWin___vftable_)(int uiFlags);
// 9825DC: using guessed type int (__thiscall *FrameBoxWin___vftable_)(void *p, char);

//----- (004489E0) --------------------------------------------------------
void __thiscall NiTexturingProperty::SetBaseFilterMode(NiTexturingProperty *this, NiTexturingProperty::FilterMode eMode)
{
  NiTexturingProperty *v2; // edi@1
  NiTexturingProperty::Map *v3; // eax@1
  void *v4; // eax@2
  void *v5; // eax@3
  void *v6; // esi@5
  void *pkBaseMap; // [sp+0h] [bp-10h]@2
  int v8; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = *this->m_kMaps.m_pBase;
  if ( v3 )
  {
    v3->m_eFilter = eMode;
  }
  else
  {
    v4 = operator new(0x18u);
    pkBaseMap = v4;
    v8 = 0;
    if ( v4 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v4);
    else
      v5 = 0;
    v6 = v5;
    pkBaseMap = v5;
    NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)&v2->m_kMaps, 0, (NiVBChip *const *)&pkBaseMap);
    *((_DWORD *)v6 + 3) = eMode;
  }
}

//----- (00448A80) --------------------------------------------------------
void __thiscall ImeCandListWin::ImeCandListWin(ImeCandListWin *this)
{
  ImeCandListWin *v1; // esi@1

  v1 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ImeCandListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ImeCandListWin::_vftable_;
  v1->m_bAttachBottom = 0;
}
// 98282C: using guessed type int (__stdcall *ImeCandListWin___vftable_)(int uiFlags);
// 98284C: using guessed type int (__thiscall *ImeCandListWin___vftable_)(void *p, char);

//----- (00448AB0) --------------------------------------------------------
void __thiscall ImeCandListWin::_ImeCandListWin(ImeCandListWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ImeCandListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ImeCandListWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
}
// 98282C: using guessed type int (__stdcall *ImeCandListWin___vftable_)(int uiFlags);
// 98284C: using guessed type int (__thiscall *ImeCandListWin___vftable_)(void *p, char);

//----- (00448AD0) --------------------------------------------------------
void __thiscall ImeCandListWin::ClearText(ImeCandListWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_apkTextWin;
  v2 = 10;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 472))(&unk_982802);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (00448B00) --------------------------------------------------------
bool __thiscall ImeCandListWin::SetText(ImeCandListWin *this, int nLine, char *pcText, int r, int g, int b)
{
  ImeCandListWin *v6; // edi@1
  bool result; // al@2
  char acStr[256]; // [sp+Ch] [bp-104h]@3
  unsigned int v9; // [sp+10Ch] [bp-4h]@1
  int v10; // [sp+110h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v6 = this;
  if ( nLine < 9 )
  {
    ((void (__stdcall *)(int, int, int, signed int))this->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      r,
      g,
      b,
      255);
    sprintf(acStr, "%d: %s");
    ((void (__stdcall *)(_DWORD))v6->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00448BA0) --------------------------------------------------------
void __thiscall ImeCandListWin::EnableAttachBottom(ImeCandListWin *this, bool b)
{
  this->m_bAttachBottom = b;
}

//----- (00448BB0) --------------------------------------------------------
bool __thiscall ImeCandListWin::Create(ImeCandListWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, PgWin *pkParent)
{
  ImeCandListWin *v5; // esi@1
  bool result; // al@1
  void *v7; // eax@2
  unsigned int v8; // eax@4
  int v9; // ebx@4
  int v10; // edi@4
  PgWinText *v11; // eax@6
  tagSIZE kSize; // [sp+4h] [bp-Ch]@3
  PgFont *pkFont; // [sp+Ch] [bp-4h]@2
  signed int uiEdgeWidtha; // [sp+1Ch] [bp+Ch]@4
  int iFontW; // [sp+20h] [bp+10h]@2
  int iFontH; // [sp+24h] [bp+14h]@2

  v5 = this;
  result = FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, pkParent, 0);
  if ( result )
  {
    iFontH = 12;
    iFontW = 8;
    v7 = Font::Get(0);
    pkFont = (PgFont *)v7;
    if ( v7 )
    {
      PgFont::GetTextSize((PgFont *)v7, "W", 1, &kSize);
      iFontW = kSize.cx;
      iFontH = kSize.cy + 2;
    }
    v8 = 32 * iFontW;
    v9 = 0;
    v10 = (int)v5->m_apkTextWin;
    uiEdgeWidtha = 10;
    while ( 1 )
    {
      v11 = PgWinText::CreateWin(
              v5->baseclass_0.m_uiEdgeWidth,
              v5->baseclass_0.m_uiEdgeHeight + v9 + 2,
              v8,
              iFontH + 2,
              pkFont,
              &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      *(_DWORD *)v10 = v11;
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v11,
        0);
      v9 += iFontH;
      v10 += 4;
      --uiEdgeWidtha;
      if ( !uiEdgeWidtha )
        break;
      v8 = 32 * iFontW;
    }
    ((void (__thiscall *)(ImeCandListWin *, unsigned int, unsigned int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
      v5,
      2 * (v5->baseclass_0.m_uiEdgeWidth + 8 * iFontW),
      iFontH + 2 * v5->baseclass_0.m_uiEdgeHeight);
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v5,
      0);
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v5,
      0);
    result = 1;
  }
  return result;
}

//----- (00448CE0) --------------------------------------------------------
void __thiscall ImeCandListWin::SetCandList(ImeCandListWin *this, PgImeCtrl::CandList *kCandList)
{
  ImeCandListWin *v2; // edi@1
  char *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@3
  ImeCandListWin *v5; // ecx@3
  int v6; // esi@6
  PgImeCtrl::CandList *v7; // eax@7
  PgWinText *v8; // edi@15
  NiRefObjectVtbl *v9; // edx@15
  unsigned int v10; // eax@16
  PgImeCtrl::CandList *v11; // ecx@17
  unsigned int v12; // eax@20
  void *v13; // edi@20
  char v14; // cl@21
  void *v15; // edi@22
  const void *v16; // esi@22
  char v17; // cl@22
  unsigned int v18; // eax@23
  void *v19; // edi@23
  char v20; // cl@24
  char *v21; // [sp-10h] [bp-22Ch]@11
  int v22; // [sp-Ch] [bp-228h]@11
  int v23; // [sp-8h] [bp-224h]@11
  unsigned int v24; // [sp-4h] [bp-220h]@4
  int v25; // [sp-4h] [bp-220h]@11
  unsigned int v26; // [sp+Ch] [bp-210h]@20
  char *v27; // [sp+10h] [bp-20Ch]@1
  signed int v28; // [sp+14h] [bp-208h]@1
  PgImeCtrl::CandList *i; // [sp+14h] [bp-208h]@7
  PgImeCtrl::CandList *j; // [sp+14h] [bp-208h]@17
  char acTempStr[256]; // [sp+18h] [bp-204h]@16
  char acStr[256]; // [sp+118h] [bp-104h]@15
  unsigned int v33; // [sp+218h] [bp-4h]@1
  int v34; // [sp+21Ch] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v2 = this;
  v3 = (char *)this->m_apkTextWin;
  v27 = (char *)this->m_apkTextWin;
  v28 = 10;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v3 + 472))(&unk_982802);
    v3 += 4;
    --v28;
  }
  while ( v28 );
  v4 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  v5 = v2;
  if ( kCandList->dwCount )
  {
    v4(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u);
    if ( kCandList->bVerticalCand )
    {
      v6 = 0;
      if ( kCandList->dwPageSize )
      {
        v7 = kCandList;
        for ( i = kCandList; ; v7 = i )
        {
          if ( v7->acCandidate[0][0] )
          {
            if ( kCandList->dwSelection == v6 )
            {
              v25 = 0;
              v23 = 255;
              v22 = 0;
              v21 = (char *)v7;
            }
            else
            {
              v25 = 255;
              v23 = 255;
              v22 = 255;
              v21 = (char *)v7;
            }
          }
          else
          {
            v25 = 255;
            v23 = 255;
            v22 = 255;
            v21 = " ";
          }
          ImeCandListWin::SetText(v2, v6, v21, v22, v23, v25);
          i = (PgImeCtrl::CandList *)((char *)i + 256);
          ++v6;
          if ( v6 >= kCandList->dwPageSize )
            break;
        }
      }
      sprintf(acStr, "(%d/%d)");
      ((void (__stdcall *)(signed int, signed int, signed int, signed int))v2->m_apkTextWin[9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        255,
        255,
        255,
        255);
      v8 = v2->m_apkTextWin[9];
      v9 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = (ImeCandListWin *)v8;
    }
    else
    {
      v10 = 0;
      acStr[0] = 0;
      acTempStr[0] = 0;
      if ( kCandList->dwPageSize )
      {
        v11 = kCandList;
        for ( j = kCandList; ; v11 = j )
        {
          if ( v11->acCandidate[0][0] )
          {
            v26 = v10 + 1;
            sprintf(acTempStr, "%d:%s");
            v12 = strlen(acTempStr) + 1;
            v13 = &acTempStr[255];
            do
            {
              v14 = *((_BYTE *)v13 + 1);
              v13 = (char *)v13 + 1;
            }
            while ( v14 );
            j = (PgImeCtrl::CandList *)((char *)j + 256);
            memcpy(v13, acTempStr, 4 * (v12 >> 2));
            v16 = &acTempStr[4 * (v12 >> 2)];
            v15 = (char *)v13 + 4 * (v12 >> 2);
            v17 = v12;
            v10 = v26;
            memcpy(v15, v16, v17 & 3);
            if ( v26 < kCandList->dwPageSize )
              continue;
          }
          break;
        }
      }
      sprintf(acTempStr, "(%d/%d)");
      v18 = strlen(acTempStr) + 1;
      v19 = &acTempStr[255];
      do
      {
        v20 = *((_BYTE *)v19 + 1);
        v19 = (char *)v19 + 1;
      }
      while ( v20 );
      memcpy(v19, acTempStr, v18);
      (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)v27 + 464))(
        255,
        255,
        255,
        255);
      v5 = *(ImeCandListWin **)v27;
      v9 = (NiRefObjectVtbl *)**(_DWORD **)v27;
    }
    v4 = v9[118].__vecDelDtor;
    v24 = (unsigned int)acStr;
  }
  else
  {
    v24 = 0;
  }
  v4(
    &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    v24);
}
// A85C00: using guessed type int __security_cookie;

//----- (00448F70) --------------------------------------------------------
void __thiscall ImeCandListWin::AdjustSizeWin(ImeCandListWin *this, int iXPos, int iYPos, int iBottomYPos)
{
  ImeCandListWin *v4; // edi@1
  int (*v5)(void); // edx@1
  char *v6; // esi@1
  int v7; // ebx@1
  char *v8; // eax@3
  tagSIZE kSize; // [sp+Ch] [bp-18h]@5
  ImeCandListWin *v10; // [sp+14h] [bp-10h]@1
  int v11; // [sp+18h] [bp-Ch]@2
  int iMaxCx; // [sp+1Ch] [bp-8h]@2
  int iCy; // [sp+20h] [bp-4h]@2

  v4 = this;
  v5 = (int (*)(void))this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor;
  v6 = (char *)this->m_apkTextWin;
  v10 = this;
  v7 = v5();
  if ( v7 )
  {
    SelectObject(*(HDC *)(v7 + 192), *(HGDIOBJ *)(v7 + 184));
    iMaxCx = 0;
    iCy = 0;
    v11 = 10;
    do
    {
      v8 = (char *)(*(int (**)(void))(**(_DWORD **)v6 + 484))();
      if ( v8 && *v8 )
      {
        PgFont::GetTextSize((PgFont *)v7, v8, strlen(v8), &kSize);
        if ( kSize.cx > iMaxCx )
          iMaxCx = kSize.cx;
        v4 = v10;
        iCy += kSize.cy + 2;
      }
      v6 += 4;
      --v11;
    }
    while ( v11 );
    if ( iMaxCx )
      ((void (__thiscall *)(ImeCandListWin *, unsigned int, unsigned int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
        v4,
        iMaxCx + 2 * v4->baseclass_0.m_uiEdgeWidth,
        iCy + 2 * v4->baseclass_0.m_uiEdgeHeight);
    if ( v4->m_bAttachBottom )
      ((void (__thiscall *)(ImeCandListWin *, int, int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v4,
        iXPos,
        iBottomYPos);
    else
      ((void (__thiscall *)(ImeCandListWin *, int, unsigned int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v4,
        iXPos,
        iYPos - 2 * v4->baseclass_0.m_uiEdgeHeight - iCy);
  }
}

//----- (004490A0) --------------------------------------------------------
ImeCandListWin *__cdecl ImeCandListWin::CreateWin(PgWin *pkParent)
{
  void *v1; // eax@1
  void *v2; // esi@1
  int v3; // edi@6
  NiSourceTexture *v4; // eax@6
  PgWin *v5; // edi@8
  ImeCandListWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1CCu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v8 = 0;
  if ( v1 )
  {
    FrameBoxWin::FrameBoxWin((FrameBoxWin *)v1);
    *(_DWORD *)v2 = &ImeCandListWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ImeCandListWin::_vftable_;
    *((_BYTE *)v2 + 456) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  v3 = *(_DWORD *)v2;
  v4 = MenuTexMgr::GetTexture(1u);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiSourceTexture *, signed int, signed int, PgWin *))(v3 + 548))(
                          v2,
                          v4,
                          7,
                          7,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v6 = (ImeCandListWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v6 = 0;
  }
  return v6;
}
// 98282C: using guessed type int (__stdcall *ImeCandListWin___vftable_)(int uiFlags);
// 98284C: using guessed type int (__thiscall *ImeCandListWin___vftable_)(void *p, char);

//----- (00449200) --------------------------------------------------------
void *__thiscall ImeCandListWin::_scalar_deleting_destructor_(ImeCandListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ImeCandListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ImeCandListWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98282C: using guessed type int (__stdcall *ImeCandListWin___vftable_)(int uiFlags);
// 98284C: using guessed type int (__thiscall *ImeCandListWin___vftable_)(void *p, char);

//----- (00449240) --------------------------------------------------------
void __thiscall ImeEditWin::EnalbeCompStrAttachBottom(ImeEditWin *this, bool b)
{
  ImeCandListWin *v2; // ecx@1

  v2 = this->m_spCandListWin.m_pObject;
  if ( v2 )
    ImeCandListWin::EnableAttachBottom(v2, b);
}

//----- (00449260) --------------------------------------------------------
void __thiscall ImeEditWin::EnablePaste(ImeEditWin *this, bool bEnable)
{
  PgImeEditWin::EnablePaste((PgImeEditWin *)this->baseclass_0.m_spEditWin.m_pObject, bEnable);
}

//----- (00449270) --------------------------------------------------------
bool __thiscall ImeEditWin::IsCompStrExist(ImeEditWin *this)
{
  PgEditWin *v1; // eax@1
  bool result; // al@2

  v1 = this->baseclass_0.m_spEditWin.m_pObject;
  if ( v1 )
    result = LOBYTE(v1[1].m_pcText) != 0;
  else
    result = 0;
  return result;
}

//----- (00449290) --------------------------------------------------------
bool __thiscall ImeEditWin::IsOnCandList(ImeEditWin *this)
{
  PgEditWin *v1; // eax@1
  bool result; // al@3
  PgImeCtrl::CandList NowCandList; // [sp+0h] [bp-914h]@3

  v1 = this->baseclass_0.m_spEditWin.m_pObject;
  if ( !v1
    || !this->m_spCandListWin.m_pObject
    || (memcpy(&NowCandList, &v1[7], sizeof(NowCandList)), result = 1, NowCandList.bShowWindow != 1)
    || NowCandList.dwSelection >= 0xA )
    result = 0;
  return result;
}

//----- (004492E0) --------------------------------------------------------
void __thiscall ImeEditWinEx::EnalbeCompStrAttachBottom(ImeEditWinEx *this, bool b)
{
  ImeCandListWin *v2; // ecx@1

  v2 = this->m_spCandListWin.m_pObject;
  if ( v2 )
    ImeCandListWin::EnableAttachBottom(v2, b);
}

//----- (00449300) --------------------------------------------------------
void __thiscall ImeEditWinEx::EnablePaste(ImeEditWinEx *this, bool bEnable)
{
  PgImeEditWin::EnablePaste((PgImeEditWin *)this->baseclass_0.baseclass_0.m_spEditWin.m_pObject, bEnable);
}

//----- (00449310) --------------------------------------------------------
bool __thiscall ImeEditWinEx::IsCompStrExist(ImeEditWinEx *this)
{
  PgEditWin *v1; // eax@1
  bool result; // al@2

  v1 = this->baseclass_0.baseclass_0.m_spEditWin.m_pObject;
  if ( v1 )
    result = LOBYTE(v1[1].m_pcText) != 0;
  else
    result = 0;
  return result;
}

//----- (00449330) --------------------------------------------------------
bool __thiscall ImeEditWinEx::IsOnCandList(ImeEditWinEx *this)
{
  PgEditWin *v1; // eax@1
  bool result; // al@3
  PgImeCtrl::CandList NowCandList; // [sp+0h] [bp-914h]@3

  v1 = this->baseclass_0.baseclass_0.m_spEditWin.m_pObject;
  if ( !v1
    || !this->m_spCandListWin.m_pObject
    || (memcpy(&NowCandList, &v1[7], sizeof(NowCandList)), result = 1, NowCandList.bShowWindow != 1)
    || NowCandList.dwSelection >= 0xA )
    result = 0;
  return result;
}

//----- (00449380) --------------------------------------------------------
void __thiscall ImeEditWin::ImeEditWin(ImeEditWin *this)
{
  ImeEditWin *v1; // esi@1

  v1 = this;
  EditWin::EditWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ImeEditWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ImeEditWin::_vftable_;
  v1->m_spCandListWin.m_pObject = 0;
  if ( !EditWin::ms_uiCaretBlinkTime )
    EditWin::ms_uiCaretBlinkTime = GetCaretBlinkTime();
  v1->baseclass_0.m_uiLastBlinkTime = 0;
  v1->baseclass_0.m_iShowCaret = 0;
  v1->baseclass_0.m_bEnalbe = 1;
}
// 982A80: using guessed type int (__stdcall *ImeEditWin___vftable_)(int uiFlags);
// 982A9C: using guessed type int (__thiscall *ImeEditWin___vftable_)(void *p, char);
// A97658: using guessed type int EditWin__ms_uiCaretBlinkTime;

//----- (004493E0) --------------------------------------------------------
void __thiscall ImeEditWin::_ImeEditWin(ImeEditWin *this)
{
  ImeEditWin *v1; // esi@1
  PgFont *v2; // edi@1
  PgEditWin *v3; // edi@6
  PgWinEditText *v4; // edi@11
  NiScreenElements *v5; // edi@16
  ImeCandListWin *v6; // edi@21

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ImeEditWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ImeEditWin::_vftable_;
  v2 = this->baseclass_0.m_spFont.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->baseclass_0.m_spFont.m_pObject = 0;
  }
  v3 = v1->baseclass_0.m_spEditWin.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->baseclass_0.m_spEditWin.m_pObject = 0;
  }
  v4 = v1->baseclass_0.m_spTextWin.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->baseclass_0.m_spTextWin.m_pObject = 0;
  }
  v5 = v1->baseclass_0.m_spCaret.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->baseclass_0.m_spCaret.m_pObject = 0;
  }
  v6 = v1->m_spCandListWin.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  EditWin::_EditWin(&v1->baseclass_0);
}
// 982A80: using guessed type int (__stdcall *ImeEditWin___vftable_)(int uiFlags);
// 982A9C: using guessed type int (__thiscall *ImeEditWin___vftable_)(void *p, char);

//----- (00449520) --------------------------------------------------------
void __thiscall ImeEditWin::UpdateMeWin(ImeEditWin *this, float fCurTime)
{
  ImeEditWin *v2; // esi@1
  PgEditWin *v3; // eax@1
  char v4; // bl@1
  int v5; // ecx@8
  unsigned int v6; // eax@8
  int v7; // edx@9
  NiScreenElements *v8; // eax@10
  int v9; // edi@14
  int v10; // eax@14
  char *v11; // ebx@14
  PgTextGeometry *v12; // edi@16
  int v13; // eax@17
  NiScreenElements *v14; // eax@21
  float v15; // ecx@21
  float v16; // ST2C_4@21
  float v17; // ST30_4@21
  ImeCandListWin *v18; // ecx@21
  PgWinImeEditText *v19; // edi@24
  ImeCandListWin *v20; // ebx@25
  int v21; // ST1C_4@26
  int v22; // ST18_4@26
  int v23; // eax@26
  ImeCandListWin *v24; // esi@27
  signed __int64 rkPoint; // [sp+14h] [bp-Ch]@8
  PgEditWin *thisa; // [sp+1Ch] [bp-4h]@1
  int iCaretPos; // [sp+28h] [bp+8h]@14
  int iCaretPosa; // [sp+28h] [bp+8h]@17

  v2 = this;
  v3 = this->baseclass_0.m_spEditWin.m_pObject;
  v4 = 1;
  thisa = v3;
  if ( v3 )
  {
    if ( BYTE2(v3[41].m_hParentWnd) == 1 && (ImeEditWin *)EditWin::ms_pkCurEditWin == this && v3->m_hWnd != GetFocus() )
      v4 = 0;
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v2)
      && v4 == 1 )
    {
      v5 = EditWin::ms_uiCaretBlinkTime + v2->baseclass_0.m_uiLastBlinkTime;
      rkPoint = (signed __int64)(fCurTime * 1000.0);
      v6 = (signed __int64)(fCurTime * 1000.0);
      if ( v5 <= v6 )
      {
        v7 = 1 - v2->baseclass_0.m_iShowCaret;
        v2->baseclass_0.m_uiLastBlinkTime = v6;
        v2->baseclass_0.m_iShowCaret = v7;
      }
      v8 = v2->baseclass_0.m_spCaret.m_pObject;
      if ( v2->baseclass_0.m_iShowCaret == 1 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      else
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      v2->baseclass_0.m_spCaret.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    v9 = 0;
    iCaretPos = 0;
    v10 = ((int (*)(void))v2->baseclass_0.m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
    v11 = (char *)v10;
    if ( v10 && *(_BYTE *)v10 )
    {
      SelectObject(
        v2->baseclass_0.m_spFont.m_pObject->baseclass_0.m_kFontRenderStuff.hDC,
        v2->baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont);
      v12 = v2->baseclass_0.m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject;
      if ( !v12 )
        return;
      v13 = PgEditWin::GetCaretPos(thisa);
      iCaretPosa = v13;
      if ( LOBYTE(thisa[1].m_pcText) )
        iCaretPosa = PgImeEditWin::GetImeCaretPos((PgImeEditWin *)thisa) + v13;
      PgFont::GetCursorPosOnText(
        v2->baseclass_0.m_spFont.m_pObject,
        v11,
        iCaretPosa,
        (tagPOINT *)&rkPoint,
        v12->baseclass_0.m_iVerticalGap,
        v12->baseclass_0.m_bAutoWordWrap,
        v12->baseclass_0.m_bTextCmdOn,
        &v12->baseclass_0.m_kRect,
        v12->baseclass_0.m_iAlignOption);
      v9 = rkPoint;
      iCaretPos = HIDWORD(rkPoint);
      if ( (unsigned int)rkPoint >= ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2) )
        v9 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2)
           - 1;
    }
    v14 = v2->baseclass_0.m_spCaret.m_pObject;
    HIDWORD(rkPoint) = v9 + 1;
    v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v16 = (double)(v9 + 1);
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v16;
    v17 = (double)iCaretPos;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v17;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v15;
    v18 = v2->m_spCandListWin.m_pObject;
    if ( v18 )
      ImeCandListWin::SetCandList(v18, (PgImeCtrl::CandList *)&thisa[7]);
    if ( LOBYTE(thisa[1].m_pcText) )
    {
      v19 = (PgWinImeEditText *)v2->baseclass_0.m_spTextWin.m_pObject;
      if ( v19 )
      {
        v20 = v2->m_spCandListWin.m_pObject;
        if ( v20 )
        {
          v21 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2);
          v22 = PgWinImeEditText::GetCandStrYPos(v19);
          v23 = PgWinImeEditText::GetCandStrXPos(v19);
          ImeCandListWin::AdjustSizeWin(v20, v23, v22, v21);
        }
      }
    }
    else
    {
      v24 = v2->m_spCandListWin.m_pObject;
      if ( v24 )
        ImeCandListWin::AdjustSizeWin(v24, 0, 0, 0);
    }
  }
}
// A97658: using guessed type int EditWin__ms_uiCaretBlinkTime;

//----- (00449780) --------------------------------------------------------
void __thiscall ImeEditWinEx::ImeEditWinEx(ImeEditWinEx *this)
{
  ImeEditWinEx *v1; // esi@1

  v1 = this;
  EditWinEx::EditWinEx(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ImeEditWinEx::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ImeEditWinEx::_vftable_;
  v1->m_spCandListWin.m_pObject = 0;
  if ( !EditWin::ms_uiCaretBlinkTime )
    EditWin::ms_uiCaretBlinkTime = GetCaretBlinkTime();
  v1->baseclass_0.baseclass_0.m_uiLastBlinkTime = 0;
  v1->baseclass_0.baseclass_0.m_iShowCaret = 0;
  v1->baseclass_0.baseclass_0.m_bEnalbe = 1;
}
// 982C94: using guessed type int (__stdcall *ImeEditWinEx___vftable_)(int uiFlags);
// 982CB4: using guessed type int (__thiscall *ImeEditWinEx___vftable_)(void *p, char);
// A97658: using guessed type int EditWin__ms_uiCaretBlinkTime;

//----- (004497E0) --------------------------------------------------------
void __thiscall ImeEditWinEx::_ImeEditWinEx(ImeEditWinEx *this)
{
  ImeEditWinEx *v1; // esi@1
  PgFont *v2; // edi@1
  PgEditWin *v3; // edi@6
  PgWinEditText *v4; // edi@11
  NiScreenElements *v5; // edi@16
  ImeCandListWin *v6; // edi@21

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ImeEditWinEx::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ImeEditWinEx::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_spFont.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->baseclass_0.baseclass_0.m_spFont.m_pObject = 0;
  }
  v3 = v1->baseclass_0.baseclass_0.m_spEditWin.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->baseclass_0.baseclass_0.m_spEditWin.m_pObject = 0;
  }
  v4 = v1->baseclass_0.baseclass_0.m_spTextWin.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->baseclass_0.baseclass_0.m_spTextWin.m_pObject = 0;
  }
  v5 = v1->baseclass_0.baseclass_0.m_spCaret.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->baseclass_0.baseclass_0.m_spCaret.m_pObject = 0;
  }
  v6 = v1->m_spCandListWin.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  EditWinEx::_EditWinEx(&v1->baseclass_0);
}
// 982C94: using guessed type int (__stdcall *ImeEditWinEx___vftable_)(int uiFlags);
// 982CB4: using guessed type int (__thiscall *ImeEditWinEx___vftable_)(void *p, char);

//----- (00449920) --------------------------------------------------------
void __thiscall ImeEditWinEx::UpdateMeWin(ImeEditWinEx *this, float fCurTime)
{
  ImeEditWinEx *v2; // esi@1
  PgEditWin *v3; // edi@1
  char v4; // bl@1
  bool v5; // zf@4
  int v6; // ecx@8
  unsigned int v7; // eax@8
  int v8; // edx@9
  NiScreenElements *v9; // eax@10
  int v10; // ebx@14
  void *v11; // eax@17
  PgTextGeometry *v12; // edi@19
  int v13; // eax@20
  NiScreenElements *v14; // eax@29
  float v15; // ecx@29
  float v16; // ST2C_4@29
  ImeCandListWin *v17; // ecx@29
  PgWinImeEditText *v18; // edi@32
  ImeCandListWin *v19; // ebx@33
  int v20; // ST1C_4@34
  int v21; // ST18_4@34
  int v22; // eax@34
  ImeCandListWin *v23; // esi@35
  signed __int64 rkPoint; // [sp+10h] [bp-10h]@8
  int pcText; // [sp+18h] [bp-8h]@8
  PgEditWin *thisa; // [sp+1Ch] [bp-4h]@1
  int iCaretPos; // [sp+28h] [bp+8h]@17
  int iCaretPosa; // [sp+28h] [bp+8h]@20

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.m_spEditWin.m_pObject;
  v4 = 1;
  thisa = v3;
  if ( v3 )
  {
    if ( BYTE2(v3[41].m_hParentWnd) == 1 )
    {
      if ( (ImeEditWinEx *)EditWin::ms_pkCurEditWin == this )
      {
        v5 = v3->m_hWnd == GetFocus();
        v3 = thisa;
        if ( !v5 )
          v4 = 0;
      }
    }
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v2)
      && v4 == 1 )
    {
      v6 = EditWin::ms_uiCaretBlinkTime + v2->baseclass_0.baseclass_0.m_uiLastBlinkTime;
      pcText = HIWORD(fCurTime) | 0xC00;
      rkPoint = (signed __int64)(fCurTime * 1000.0);
      v7 = (signed __int64)(fCurTime * 1000.0);
      if ( v6 <= v7 )
      {
        v8 = 1 - v2->baseclass_0.baseclass_0.m_iShowCaret;
        v2->baseclass_0.baseclass_0.m_uiLastBlinkTime = v7;
        v2->baseclass_0.baseclass_0.m_iShowCaret = v8;
      }
      v9 = v2->baseclass_0.baseclass_0.m_spCaret.m_pObject;
      if ( v2->baseclass_0.baseclass_0.m_iShowCaret == 1 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      else
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      v2->baseclass_0.baseclass_0.m_spCaret.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    v10 = 0;
    if ( EditWinEx::GetDrawFormat(&v2->baseclass_0) == 1 && !EditWin::GetAutoAlign(&v2->baseclass_0.baseclass_0) )
      v10 = (unsigned int)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2) >> 1;
    iCaretPos = 0;
    v11 = (void *)((int (*)(void))v2->baseclass_0.baseclass_0.m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
    pcText = (int)v11;
    if ( v11 && *(_BYTE *)v11 )
    {
      SelectObject(
        v2->baseclass_0.baseclass_0.m_spFont.m_pObject->baseclass_0.m_kFontRenderStuff.hDC,
        v2->baseclass_0.baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont);
      v12 = v2->baseclass_0.baseclass_0.m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject;
      if ( !v12 )
        return;
      v13 = PgEditWin::GetCaretPos(thisa);
      iCaretPosa = v13;
      if ( LOBYTE(thisa[1].m_pcText) )
        iCaretPosa = PgImeEditWin::GetImeCaretPos((PgImeEditWin *)thisa) + v13;
      PgFont::GetCursorPosOnText(
        v2->baseclass_0.baseclass_0.m_spFont.m_pObject,
        (char *)pcText,
        iCaretPosa,
        (tagPOINT *)&rkPoint,
        v12->baseclass_0.m_iVerticalGap,
        v12->baseclass_0.m_bAutoWordWrap,
        v12->baseclass_0.m_bTextCmdOn,
        &v12->baseclass_0.m_kRect,
        v12->baseclass_0.m_iAlignOption);
      if ( EditWinEx::GetDrawFormat(&v2->baseclass_0) != 1 || EditWin::GetAutoAlign(&v2->baseclass_0.baseclass_0) )
        v10 = rkPoint;
      else
        v10 += (signed int)rkPoint / 2;
      iCaretPos = HIDWORD(rkPoint);
      if ( v10 >= (unsigned int)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2) )
        v10 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2)
            - 1;
      v3 = thisa;
    }
    v14 = v2->baseclass_0.baseclass_0.m_spCaret.m_pObject;
    pcText = v10 + 1;
    v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v16 = (double)(v10 + 1);
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v16;
    *(float *)&rkPoint = (double)iCaretPos;
    LODWORD(v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y) = rkPoint;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v15;
    v17 = v2->m_spCandListWin.m_pObject;
    if ( v17 )
      ImeCandListWin::SetCandList(v17, (PgImeCtrl::CandList *)&v3[7]);
    if ( LOBYTE(v3[1].m_pcText) )
    {
      v18 = (PgWinImeEditText *)v2->baseclass_0.baseclass_0.m_spTextWin.m_pObject;
      if ( v18 )
      {
        v19 = v2->m_spCandListWin.m_pObject;
        if ( v19 )
        {
          v20 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2);
          v21 = PgWinImeEditText::GetCandStrYPos(v18);
          v22 = PgWinImeEditText::GetCandStrXPos(v18);
          ImeCandListWin::AdjustSizeWin(v19, v22, v21, v20);
        }
      }
    }
    else
    {
      v23 = v2->m_spCandListWin.m_pObject;
      if ( v23 )
        ImeCandListWin::AdjustSizeWin(v23, 0, 0, 0);
    }
  }
}
// A97658: using guessed type int EditWin__ms_uiCaretBlinkTime;

//----- (00449BD0) --------------------------------------------------------
bool __thiscall ImeEditWin::Create(ImeEditWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt)
{
  ImeEditWin *v13; // esi@1
  PgFont *v14; // eax@1
  PgFont *v15; // edi@1
  PgFont *v16; // ebx@1
  bool result; // al@9
  unsigned int v18; // eax@11
  unsigned int v19; // edi@11
  bool v20; // cl@11
  int v21; // edx@11
  NiD3DDefaultShader *v22; // eax@14
  unsigned int v23; // eax@14
  PgWinEditText *v24; // edi@14
  ImeCandListWin *v25; // eax@26
  ImeCandListWin *v26; // edi@26
  ImeCandListWin *v27; // ebx@26
  NiScreenElementsData *v28; // edi@33
  void *v29; // eax@33
  int v30; // ebx@33
  int v31; // eax@34
  NiScreenElements *v32; // edi@35
  void *v33; // eax@42
  int v34; // eax@43
  float v35; // ecx@45
  NiAVObject *v36; // ecx@45
  void *v37; // eax@45
  void *v38; // edi@45
  NiAVObject *v39; // ecx@48
  NiScreenElements *v40; // eax@48
  float v41; // ecx@48
  float v42; // edx@48
  HINSTANCE__ *v43; // [sp+4h] [bp-84h]@12
  HWND__ *v44; // [sp+8h] [bp-80h]@12
  unsigned int v45; // [sp+Ch] [bp-7Ch]@12
  unsigned int v46; // [sp+10h] [bp-78h]@12
  int v47; // [sp+14h] [bp-74h]@12
  bool v48; // [sp+18h] [bp-70h]@12
  tagRECT *v49; // [sp+1Ch] [bp-6Ch]@12
  HFONT__ *v50; // [sp+20h] [bp-68h]@12
  unsigned int v51; // [sp+28h] [bp-60h]@1
  tagSIZE kSize; // [sp+38h] [bp-50h]@33
  float v53; // [sp+40h] [bp-48h]@45
  float v54; // [sp+44h] [bp-44h]@45
  float v55; // [sp+48h] [bp-40h]@45
  int v56; // [sp+4Ch] [bp-3Ch]@1
  int iLimitLength; // [sp+50h] [bp-38h]@1
  unsigned int uiStyle; // [sp+54h] [bp-34h]@1
  unsigned int v59; // [sp+58h] [bp-30h]@1
  PgWin *v60; // [sp+5Ch] [bp-2Ch]@1
  unsigned int v61; // [sp+60h] [bp-28h]@1
  unsigned int v62; // [sp+64h] [bp-24h]@1
  tagRECT kRect; // [sp+68h] [bp-20h]@11
  unsigned int v64; // [sp+78h] [bp-10h]@1
  int v65; // [sp+84h] [bp-4h]@33
  int v66; // [sp+88h] [bp+0h]@1

  v64 = (unsigned int)&v66 ^ __security_cookie;
  v51 = (unsigned int)&v66 ^ __security_cookie;
  v61 = uiWidth;
  uiStyle = eType;
  v13 = this;
  LOBYTE(v56) = bClearTextOnEnd;
  v59 = uiHeight;
  v60 = pkParent;
  iLimitLength = uiLimitTextLen;
  v62 = uiStopFlag;
  v14 = Font::Get(eFontType);
  v15 = v13->baseclass_0.m_spFont.m_pObject;
  v16 = v14;
  if ( v15 != v14 )
  {
    if ( v15 && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.m_uiRefCount) && v15 )
      v15->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    v13->baseclass_0.m_spFont.m_pObject = v16;
    if ( v16 )
      InterlockedIncrement((volatile LONG *)&v16->baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v13->baseclass_0.m_spFont.m_pObject
    && PgWin::Create(&v13->baseclass_0.baseclass_0, iXPos, iYPos, v61, v59, v60, 0, 0) )
  {
    v18 = uiStyle;
    kRect.left = iXPos;
    v19 = v59;
    kRect.top = iYPos;
    kRect.right = iXPos + v61;
    v20 = v56;
    kRect.bottom = v59 + iYPos;
    v21 = iLimitLength;
    v13->baseclass_0.m_eType = uiStyle;
    if ( v18 == 1342181380 )
    {
      v50 = v13->baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont;
      v49 = &kRect;
      v48 = v20;
      v47 = v21;
      v46 = v62;
      v45 = 1342181380;
      v44 = g_hMainWnd;
      v43 = g_hMainInstance;
    }
    else
    {
      v50 = 0;
      v49 = 0;
      v48 = v20;
      v47 = v21;
      v46 = v62;
      v45 = v18;
      v44 = g_hMainWnd;
      v43 = g_hMainInstance;
    }
    v22 = (NiD3DDefaultShader *)PgImeEditWin::CreateWin(v43, v44, v45, v46, v47, v48, v49, v50, 1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v13->baseclass_0.m_spEditWin, v22);
    v23 = (unsigned int)PgWinImeEditText::CreateWin(
                          0,
                          0,
                          v61,
                          v19,
                          v13->baseclass_0.m_spFont.m_pObject,
                          &v13->baseclass_0.baseclass_0,
                          0,
                          0);
    v24 = v13->baseclass_0.m_spTextWin.m_pObject;
    v62 = v23;
    if ( v24 != (PgWinEditText *)v23 )
    {
      if ( v24 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v24 )
          v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v24,
            1u);
        v23 = v62;
      }
      v13->baseclass_0.m_spTextWin.m_pObject = (PgWinEditText *)v23;
      if ( v23 )
        InterlockedIncrement((volatile LONG *)(v23 + 4));
    }
    if ( uiStyle == 1342181380 )
    {
      v13->baseclass_0.m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
      PgWinEditText::SetAutoAlign(v13->baseclass_0.m_spTextWin.m_pObject, 0);
    }
    ((void (__thiscall *)(PgEditWin *, PgWinEditText *, unsigned int))v13->baseclass_0.m_spEditWin.m_pObject->baseclass_0.vfptr[22].__vecDelDtor)(
      v13->baseclass_0.m_spEditWin.m_pObject,
      v13->baseclass_0.m_spTextWin.m_pObject,
      v51);
    v13->baseclass_0.m_bForceFocusWhenClick = bForceFocusWhenClick;
    if ( bForceFocusWhenClick )
      PgWinBut::CreateWin(0, 0, v61, v59, &v13->baseclass_0.baseclass_0, 0, 0, 0);
    v25 = ImeCandListWin::CreateWin(&v13->baseclass_0.baseclass_0);
    v26 = v13->m_spCandListWin.m_pObject;
    v27 = v25;
    if ( v26 != v25 )
    {
      if ( v26
        && !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v26 )
        v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v26,
          1u);
      v13->m_spCandListWin.m_pObject = v27;
      if ( v27 )
        InterlockedIncrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v13->m_spCandListWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(1.0);
    SelectObject(
      v13->baseclass_0.m_spFont.m_pObject->baseclass_0.m_kFontRenderStuff.hDC,
      v13->baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont);
    PgFont::GetTextSize(v13->baseclass_0.m_spFont.m_pObject, "|", 1, &kSize);
    v28 = PgUtil::CreateScreenGeometryData(2u, kSize.cy + 2);
    v29 = operator new(0xC4u);
    v60 = (PgWin *)v29;
    v30 = 0;
    v65 = 0;
    if ( v29 )
    {
      NiScreenElements::NiScreenElements((NiScreenElements *)v29, v28);
      v30 = v31;
    }
    v32 = v13->baseclass_0.m_spCaret.m_pObject;
    v65 = -1;
    if ( v32 != (NiScreenElements *)v30 )
    {
      if ( v32
        && !InterlockedDecrement((volatile LONG *)&v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v32 )
        v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v32,
          1u);
      v13->baseclass_0.m_spCaret.m_pObject = (NiScreenElements *)v30;
      if ( v30 )
        InterlockedIncrement((volatile LONG *)(v30 + 4));
    }
    v33 = operator new(0x60u);
    v60 = (PgWin *)v33;
    v65 = 1;
    if ( v33 )
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v33);
    else
      v34 = 0;
    ++*(_DWORD *)(v34 + 88);
    v53 = 1.0;
    v54 = 1.0;
    v55 = 1.0;
    *(float *)(v34 + 68) = 1.0;
    v35 = v55;
    *(float *)(v34 + 72) = 1.0;
    *(_DWORD *)(v34 + 76) = LODWORD(v35);
    v36 = (NiAVObject *)v13->baseclass_0.m_spCaret.m_pObject;
    v65 = -1;
    NiAVObject::AttachProperty(v36, (NiProperty *)v34);
    v37 = operator new(0x28u);
    v38 = v37;
    v60 = (PgWin *)v37;
    v65 = 2;
    if ( v37 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v37);
      *(_DWORD *)v38 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v38 + 14) = 0;
      *((_DWORD *)v38 + 8) = 0;
      *((_DWORD *)v38 + 9) = 1;
    }
    else
    {
      v38 = 0;
    }
    *((_DWORD *)v38 + 8) = 0;
    *((_DWORD *)v38 + 9) = 0;
    v39 = (NiAVObject *)v13->baseclass_0.m_spCaret.m_pObject;
    v65 = -1;
    NiAVObject::AttachProperty(v39, (NiProperty *)v38);
    v40 = v13->baseclass_0.m_spCaret.m_pObject;
    v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v54 = -2.0;
    v42 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v41;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v54;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v42;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor(
      (NiRefObject *)v13,
      (unsigned int)v13->baseclass_0.m_spCaret.m_pObject);
    NiAVObject::UpdateProperties(&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0044A020) --------------------------------------------------------
bool __thiscall ImeEditWinEx::Create(ImeEditWinEx *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt)
{
  ImeEditWinEx *v13; // esi@1
  PgFont *v14; // eax@1
  PgFont *v15; // edi@1
  PgFont *v16; // ebx@1
  bool result; // al@9
  unsigned int v18; // eax@11
  unsigned int v19; // edi@11
  bool v20; // cl@11
  int v21; // edx@11
  NiD3DDefaultShader *v22; // eax@14
  unsigned int v23; // eax@14
  PgWinEditText *v24; // edi@14
  ImeCandListWin *v25; // eax@26
  ImeCandListWin *v26; // edi@26
  ImeCandListWin *v27; // ebx@26
  NiScreenElementsData *v28; // edi@33
  void *v29; // eax@33
  int v30; // ebx@33
  int v31; // eax@34
  NiScreenElements *v32; // edi@35
  void *v33; // eax@42
  int v34; // eax@43
  float v35; // ecx@45
  NiAVObject *v36; // ecx@45
  void *v37; // eax@45
  void *v38; // edi@45
  NiAVObject *v39; // ecx@48
  NiScreenElements *v40; // eax@48
  float v41; // ecx@48
  float v42; // edx@48
  HINSTANCE__ *v43; // [sp+4h] [bp-84h]@12
  HWND__ *v44; // [sp+8h] [bp-80h]@12
  unsigned int v45; // [sp+Ch] [bp-7Ch]@12
  unsigned int v46; // [sp+10h] [bp-78h]@12
  int v47; // [sp+14h] [bp-74h]@12
  bool v48; // [sp+18h] [bp-70h]@12
  tagRECT *v49; // [sp+1Ch] [bp-6Ch]@12
  HFONT__ *v50; // [sp+20h] [bp-68h]@12
  unsigned int v51; // [sp+28h] [bp-60h]@1
  tagSIZE kSize; // [sp+38h] [bp-50h]@33
  float v53; // [sp+40h] [bp-48h]@45
  float v54; // [sp+44h] [bp-44h]@45
  float v55; // [sp+48h] [bp-40h]@45
  int v56; // [sp+4Ch] [bp-3Ch]@1
  int iLimitLength; // [sp+50h] [bp-38h]@1
  unsigned int uiStyle; // [sp+54h] [bp-34h]@1
  unsigned int v59; // [sp+58h] [bp-30h]@1
  PgWin *v60; // [sp+5Ch] [bp-2Ch]@1
  unsigned int v61; // [sp+60h] [bp-28h]@1
  unsigned int v62; // [sp+64h] [bp-24h]@1
  tagRECT kRect; // [sp+68h] [bp-20h]@11
  unsigned int v64; // [sp+78h] [bp-10h]@1
  int v65; // [sp+84h] [bp-4h]@33
  int v66; // [sp+88h] [bp+0h]@1

  v64 = (unsigned int)&v66 ^ __security_cookie;
  v51 = (unsigned int)&v66 ^ __security_cookie;
  v61 = uiWidth;
  uiStyle = eType;
  v13 = this;
  LOBYTE(v56) = bClearTextOnEnd;
  v59 = uiHeight;
  v60 = pkParent;
  iLimitLength = uiLimitTextLen;
  v62 = uiStopFlag;
  v14 = Font::Get(eFontType);
  v15 = v13->baseclass_0.baseclass_0.m_spFont.m_pObject;
  v16 = v14;
  if ( v15 != v14 )
  {
    if ( v15 && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.m_uiRefCount) && v15 )
      v15->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    v13->baseclass_0.baseclass_0.m_spFont.m_pObject = v16;
    if ( v16 )
      InterlockedIncrement((volatile LONG *)&v16->baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v13->baseclass_0.baseclass_0.m_spFont.m_pObject
    && PgWin::Create(&v13->baseclass_0.baseclass_0.baseclass_0, iXPos, iYPos, v61, v59, v60, 0, 0) )
  {
    v18 = uiStyle;
    kRect.left = iXPos;
    v19 = v59;
    kRect.top = iYPos;
    kRect.right = iXPos + v61;
    v20 = v56;
    kRect.bottom = v59 + iYPos;
    v21 = iLimitLength;
    v13->baseclass_0.baseclass_0.m_eType = uiStyle;
    if ( v18 == 1342181380 )
    {
      v50 = v13->baseclass_0.baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont;
      v49 = &kRect;
      v48 = v20;
      v47 = v21;
      v46 = v62;
      v45 = 1342181380;
      v44 = g_hMainWnd;
      v43 = g_hMainInstance;
    }
    else
    {
      v50 = 0;
      v49 = 0;
      v48 = v20;
      v47 = v21;
      v46 = v62;
      v45 = v18;
      v44 = g_hMainWnd;
      v43 = g_hMainInstance;
    }
    v22 = (NiD3DDefaultShader *)PgImeEditWin::CreateWin(v43, v44, v45, v46, v47, v48, v49, v50, 1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v13->baseclass_0.baseclass_0.m_spEditWin, v22);
    v23 = (unsigned int)PgWinImeEditText::CreateWin(
                          0,
                          0,
                          v61,
                          v19,
                          v13->baseclass_0.baseclass_0.m_spFont.m_pObject,
                          &v13->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0);
    v24 = v13->baseclass_0.baseclass_0.m_spTextWin.m_pObject;
    v62 = v23;
    if ( v24 != (PgWinEditText *)v23 )
    {
      if ( v24 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v24 )
          v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v24,
            1u);
        v23 = v62;
      }
      v13->baseclass_0.baseclass_0.m_spTextWin.m_pObject = (PgWinEditText *)v23;
      if ( v23 )
        InterlockedIncrement((volatile LONG *)(v23 + 4));
    }
    if ( uiStyle == 1342181380 )
    {
      v13->baseclass_0.baseclass_0.m_spTextWin.m_pObject->baseclass_0.m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
      PgWinEditText::SetAutoAlign(v13->baseclass_0.baseclass_0.m_spTextWin.m_pObject, 0);
    }
    ((void (__thiscall *)(PgEditWin *, PgWinEditText *, unsigned int))v13->baseclass_0.baseclass_0.m_spEditWin.m_pObject->baseclass_0.vfptr[22].__vecDelDtor)(
      v13->baseclass_0.baseclass_0.m_spEditWin.m_pObject,
      v13->baseclass_0.baseclass_0.m_spTextWin.m_pObject,
      v51);
    v13->baseclass_0.baseclass_0.m_bForceFocusWhenClick = bForceFocusWhenClick;
    if ( bForceFocusWhenClick )
      PgWinBut::CreateWin(0, 0, v61, v59, &v13->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v25 = ImeCandListWin::CreateWin(&v13->baseclass_0.baseclass_0.baseclass_0);
    v26 = v13->m_spCandListWin.m_pObject;
    v27 = v25;
    if ( v26 != v25 )
    {
      if ( v26
        && !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v26 )
        v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v26,
          1u);
      v13->m_spCandListWin.m_pObject = v27;
      if ( v27 )
        InterlockedIncrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v13->m_spCandListWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(1.0);
    SelectObject(
      v13->baseclass_0.baseclass_0.m_spFont.m_pObject->baseclass_0.m_kFontRenderStuff.hDC,
      v13->baseclass_0.baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont);
    PgFont::GetTextSize(v13->baseclass_0.baseclass_0.m_spFont.m_pObject, "|", 1, &kSize);
    v28 = PgUtil::CreateScreenGeometryData(2u, kSize.cy + 2);
    v29 = operator new(0xC4u);
    v60 = (PgWin *)v29;
    v30 = 0;
    v65 = 0;
    if ( v29 )
    {
      NiScreenElements::NiScreenElements((NiScreenElements *)v29, v28);
      v30 = v31;
    }
    v32 = v13->baseclass_0.baseclass_0.m_spCaret.m_pObject;
    v65 = -1;
    if ( v32 != (NiScreenElements *)v30 )
    {
      if ( v32
        && !InterlockedDecrement((volatile LONG *)&v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v32 )
        v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v32,
          1u);
      v13->baseclass_0.baseclass_0.m_spCaret.m_pObject = (NiScreenElements *)v30;
      if ( v30 )
        InterlockedIncrement((volatile LONG *)(v30 + 4));
    }
    v33 = operator new(0x60u);
    v60 = (PgWin *)v33;
    v65 = 1;
    if ( v33 )
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v33);
    else
      v34 = 0;
    ++*(_DWORD *)(v34 + 88);
    v53 = 1.0;
    v54 = 1.0;
    v55 = 1.0;
    *(float *)(v34 + 68) = 1.0;
    v35 = v55;
    *(float *)(v34 + 72) = 1.0;
    *(_DWORD *)(v34 + 76) = LODWORD(v35);
    v36 = (NiAVObject *)v13->baseclass_0.baseclass_0.m_spCaret.m_pObject;
    v65 = -1;
    NiAVObject::AttachProperty(v36, (NiProperty *)v34);
    v37 = operator new(0x28u);
    v38 = v37;
    v60 = (PgWin *)v37;
    v65 = 2;
    if ( v37 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v37);
      *(_DWORD *)v38 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v38 + 14) = 0;
      *((_DWORD *)v38 + 8) = 0;
      *((_DWORD *)v38 + 9) = 1;
    }
    else
    {
      v38 = 0;
    }
    *((_DWORD *)v38 + 8) = 0;
    *((_DWORD *)v38 + 9) = 0;
    v39 = (NiAVObject *)v13->baseclass_0.baseclass_0.m_spCaret.m_pObject;
    v65 = -1;
    NiAVObject::AttachProperty(v39, (NiProperty *)v38);
    v40 = v13->baseclass_0.baseclass_0.m_spCaret.m_pObject;
    v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v54 = -2.0;
    v42 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v41;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v54;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v42;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor(
      (NiRefObject *)v13,
      (unsigned int)v13->baseclass_0.baseclass_0.m_spCaret.m_pObject);
    NiAVObject::UpdateProperties(&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0044A470) --------------------------------------------------------
ImeEditWin *__cdecl ImeEditWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt)
{
  void *v12; // eax@1
  int v13; // eax@2
  int v14; // esi@2
  PgWin *v15; // edi@8
  ImeEditWin *v16; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v18; // [sp+10h] [bp-4h]@1

  v12 = operator new(0x14Cu);
  result.m_pObject = (PgWin *)v12;
  v18 = 0;
  if ( v12 )
  {
    ImeEditWin::ImeEditWin((ImeEditWin *)v12);
    v14 = v13;
  }
  else
  {
    v14 = 0;
  }
  if ( v14 )
    InterlockedIncrement((volatile LONG *)(v14 + 4));
  v18 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v14);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, unsigned int, PgWin *, EditWin::Type, unsigned int, unsigned int, _DWORD, Font::Type, _DWORD, _DWORD))(*(_DWORD *)v14 + 496))(
                          v14,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          eType,
                          uiLimitTextLen,
                          uiStopFlag,
                          bClearTextOnEnd,
                          eFontType,
                          bForceFocusWhenClick,
                          bNoAlt) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v14 + 356))(v14);
    v18 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
    v16 = (ImeEditWin *)v14;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v14);
    if ( result.m_pObject )
    {
      v15 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v15 )
          v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      }
    }
    v18 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
    v16 = 0;
  }
  return v16;
}

//----- (0044A5D0) --------------------------------------------------------
ImeEditWinEx *__cdecl ImeEditWinEx::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick, bool bNoAlt)
{
  void *v12; // eax@1
  int v13; // eax@2
  int v14; // esi@2
  PgWin *v15; // edi@8
  ImeEditWinEx *v16; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v18; // [sp+10h] [bp-4h]@1

  v12 = operator new(0x16Cu);
  result.m_pObject = (PgWin *)v12;
  v18 = 0;
  if ( v12 )
  {
    ImeEditWinEx::ImeEditWinEx((ImeEditWinEx *)v12);
    v14 = v13;
  }
  else
  {
    v14 = 0;
  }
  if ( v14 )
    InterlockedIncrement((volatile LONG *)(v14 + 4));
  v18 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v14);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, unsigned int, PgWin *, EditWin::Type, unsigned int, unsigned int, _DWORD, Font::Type, _DWORD, _DWORD))(*(_DWORD *)v14 + 496))(
                          v14,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          eType,
                          uiLimitTextLen,
                          uiStopFlag,
                          bClearTextOnEnd,
                          eFontType,
                          bForceFocusWhenClick,
                          bNoAlt) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v14 + 356))(v14);
    v18 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
    v16 = (ImeEditWinEx *)v14;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v14);
    if ( result.m_pObject )
    {
      v15 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v15 )
          v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      }
    }
    v18 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
    v16 = 0;
  }
  return v16;
}

//----- (0044A730) --------------------------------------------------------
void *__thiscall ImeEditWin::_vector_deleting_destructor_(ImeEditWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ImeEditWin::_ImeEditWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0044A760) --------------------------------------------------------
void *__thiscall ImeEditWinEx::_vector_deleting_destructor_(ImeEditWinEx *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ImeEditWinEx::_ImeEditWinEx(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0044A790) --------------------------------------------------------
void __thiscall InputBox::InputBox(InputBox *this)
{
  InputBox *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InputBox::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InputBox::_vftable_;
  v1->m_eActionAfterInputEnd = 1;
}
// 982F44: using guessed type int (__stdcall *InputBox___vftable_)(int uiFlags);
// 982F64: using guessed type int (__thiscall *InputBox___vftable_)(void *p, char);

//----- (0044A7C0) --------------------------------------------------------
void __thiscall InputBox::_InputBox(InputBox *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InputBox::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InputBox::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 982F44: using guessed type int (__stdcall *InputBox___vftable_)(int uiFlags);
// 982F64: using guessed type int (__thiscall *InputBox___vftable_)(void *p, char);

//----- (0044A7E0) --------------------------------------------------------
void __thiscall InputBox::SetText(InputBox *this, char *pcText)
{
  ((void (__stdcall *)(_DWORD))this->m_pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
}

//----- (0044A800) --------------------------------------------------------
void __thiscall InputBox::SetActionAfterInputEnd(InputBox *this, InputBox::ActionAfterInputEnd eInputEnd)
{
  this->m_eActionAfterInputEnd = eInputEnd;
}

//----- (0044A810) --------------------------------------------------------
void __thiscall InputBox::OnClose(InputBox *this)
{
  ((void (__stdcall *)(_DWORD))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (0044A830) --------------------------------------------------------
void __thiscall InputBox::OnShowWin(InputBox *this)
{
  InputBox *v1; // esi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  ((void (*)(void))v1->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
  ((void (*)(void))v1->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (0044A860) --------------------------------------------------------
void __thiscall InputBox::SetFocus(InputBox *this)
{
  ((void (*)(void))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (0044A870) --------------------------------------------------------
void __thiscall InputBox::OnCmdOk(InputBox *this)
{
  InputBox *v1; // edi@1
  char *v2; // eax@1
  bool v3; // zf@1
  DirectUserMsgBody_InputBoxResponse kBody; // [sp+8h] [bp-8h]@1

  v1 = this;
  v2 = (char *)((int (*)(void))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  kBody.pcInputText = v2;
  kBody.eResponse = 0;
  if ( !v3 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_InputBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      28,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, DirectUserMsgBody_InputBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToChildren)(
        28,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToChildren(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    28,
    &kBody,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  if ( v1->m_eActionAfterInputEnd == 1 )
  {
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  else
  {
    if ( v1->m_eActionAfterInputEnd == 2 )
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  }
}

//----- (0044A910) --------------------------------------------------------
void __thiscall InputBox::OnCmdCancel(InputBox *this)
{
  InputBox *v1; // edi@1
  char *v2; // eax@1
  bool v3; // zf@1
  DirectUserMsgBody_InputBoxResponse kBody; // [sp+8h] [bp-8h]@1

  v1 = this;
  v2 = (char *)((int (*)(void))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  kBody.pcInputText = v2;
  kBody.eResponse = 1;
  if ( !v3 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_InputBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      28,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, DirectUserMsgBody_InputBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToChildren)(
        28,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToChildren(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    28,
    &kBody,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  if ( v1->m_eActionAfterInputEnd == 1 )
  {
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  else
  {
    if ( v1->m_eActionAfterInputEnd == 2 )
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  }
}

//----- (0044A9B0) --------------------------------------------------------
void __thiscall InputBox::OnEditEnd(InputBox *this, unsigned int wParam, int lParam)
{
  if ( wParam == 1 )
  {
    InputBox::OnCmdOk(this);
  }
  else
  {
    if ( wParam == 4 )
      InputBox::OnCmdCancel(this);
  }
}

//----- (0044A9E0) --------------------------------------------------------
bool __thiscall InputBox::Create(InputBox *this)
{
  InputBox *v1; // esi@1
  NiTexturePalette *v2; // edi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  NiSourceTexture *v7; // eax@10
  PgSprData *v8; // eax@13
  PgWinSpr *v9; // eax@13
  PgFont *v10; // eax@16
  PgWinText *v11; // edi@16
  NiNode *v12; // ST0C_4@16
  PgSprData *v13; // edi@16
  NiPointer<PgSprData::PgHitTester> *v14; // edx@16
  unsigned int v15; // edi@16
  unsigned int v16; // ebx@16
  PgFont *v17; // eax@16
  PgWinText *v18; // edi@16
  NiRefObjectVtbl *v19; // ebx@16
  char *v20; // eax@16
  PgSprData *v21; // edi@16
  NiPointer<PgSprData::PgHitTester> *v22; // ecx@16
  unsigned int v23; // edi@16
  unsigned int v24; // ebx@16
  PgFont *v25; // eax@16
  PgWinText *v26; // edi@16
  NiRefObjectVtbl *v27; // ebx@16
  char *v28; // eax@16
  EditWin *v29; // eax@16
  NiNode *v30; // esi@17
  const char *v31; // [sp-20h] [bp-54h]@11
  int *v32; // [sp-1Ch] [bp-50h]@11
  int *v33; // [sp-18h] [bp-4Ch]@11
  NiSourceTexture *v34; // [sp-14h] [bp-48h]@11
  UIUtil ui; // [sp+0h] [bp-34h]@16
  unsigned int uiWidth; // [sp+14h] [bp-20h]@15
  unsigned int uiHeight; // [sp+18h] [bp-1Ch]@15
  int uiLeft; // [sp+1Ch] [bp-18h]@4
  int uiTop; // [sp+20h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+24h] [bp-10h]@1
  int v41; // [sp+30h] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v2 = dword_B70448;
  v41 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\AddFriendList.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, v2);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v1->baseclass_0, 0, 0, v4, 0, 0, "InputBox", 0) )
    goto LABEL_23;
  v7 = MenuTexMgr::GetTexture(0x13u);
  if ( v7 )
  {
    v34 = v7;
    v33 = &uiTop;
    v32 = &uiLeft;
    v31 = "Theme";
  }
  else
  {
    v34 = 0;
    v33 = &uiTop;
    v32 = &uiLeft;
    v31 = "Theme";
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v31, v32, v33, v34);
  v9 = PgWinSpr::CreateWin(uiLeft, uiTop, v8, &v1->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v9,
      0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_23:
    v5 = spNode.m_pObject;
    v41 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  v10 = Font::Get(0);
  v11 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v10, &v1->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v11,
    1u);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v11,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  v12 = spNode.m_pObject;
  v1->m_pkTextWin = v11;
  v13 = PgSprData::Create(&v12->baseclass_0, "BtnNor02", &uiLeft, &uiTop, 0);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "BtnOver02");
  PgWinBut::CreateWin(uiLeft, uiTop, v13, &v1->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v14 = v13->m_akHitTester.m_pBase;
  v15 = v14->m_pObject->m_uiHeight;
  v16 = v14->m_pObject->m_uiWidth;
  v17 = Font::Get(0);
  v18 = PgWinText::CreateWin(uiLeft, uiTop + 1, v16, v15, v17, &v1->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v18,
    5u);
  v19 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = TextData::Get(0x4F5F499Fu);
  v19[118].__vecDelDtor((NiRefObject *)v18, (unsigned int)v20);
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v18,
    0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, &uiTop, 0);
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "BtnOver03");
  PgWinBut::CreateWin(uiLeft, uiTop, v21, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v22 = v21->m_akHitTester.m_pBase;
  v23 = v22->m_pObject->m_uiHeight;
  v24 = v22->m_pObject->m_uiWidth;
  v25 = Font::Get(0);
  v26 = PgWinText::CreateWin(uiLeft, uiTop + 1, v24, v23, v25, &v1->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v26,
    5u);
  v27 = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = TextData::Get(0x88A297E1u);
  v27[118].__vecDelDtor((NiRefObject *)v26, (unsigned int)v28);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v41) = 1;
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetParent(&ui, &v1->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v29 = UIUtil::CreateEdit(&ui, "InputBox", 16, NORMAL, 0, 1);
  v1->m_pkEditWin = v29;
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
    (NiRefObject *)v29,
    (unsigned int)&unk_982EBF);
  ((void (__stdcall *)(signed int))v1->m_pkEditWin->m_spEditWin.m_pObject->baseclass_0.vfptr[13].__vecDelDtor)(5);
  ((void (__stdcall *)(_DWORD))v1->m_pkEditWin->m_spEditWin.m_pObject->baseclass_0.vfptr[15].__vecDelDtor)(0);
  LOBYTE(v41) = 0;
  UIUtil::_UIUtil(&ui);
  v41 = -1;
  if ( spNode.m_pObject )
  {
    v30 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v30 )
        v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0044ADE0) --------------------------------------------------------
void __thiscall InputBox::OnCommand(InputBox *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      InputBox::OnCmdCancel(this);
  }
  else
  {
    InputBox::OnCmdOk(this);
  }
}

//----- (0044AE00) --------------------------------------------------------
InputBox *__cdecl InputBox::CreateWin()
{
  void *v0; // eax@1
  void *v1; // esi@1
  PgWin *v2; // edi@8
  InputBox *v3; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x168u);
  v1 = v0;
  result.m_pObject = (PgWin *)v0;
  v5 = 0;
  if ( v0 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v0);
    *(_DWORD *)v1 = &InputBox::_vftable_;
    *((_DWORD *)v1 + 58) = &InputBox::_vftable_;
    *((_DWORD *)v1 + 89) = 1;
  }
  else
  {
    v1 = 0;
  }
  if ( v1 )
    InterlockedIncrement((volatile LONG *)v1 + 1);
  v5 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v1);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 540))(v1) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v1 + 356))(v1);
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = (InputBox *)v1;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v1);
    if ( result.m_pObject )
    {
      v2 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v2 )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
    }
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = 0;
  }
  return v3;
}
// 982F44: using guessed type int (__stdcall *InputBox___vftable_)(int uiFlags);
// 982F64: using guessed type int (__thiscall *InputBox___vftable_)(void *p, char);

//----- (0044AF50) --------------------------------------------------------
void *__thiscall InputBox::_vector_deleting_destructor_(InputBox *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InputBox::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InputBox::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 982F44: using guessed type int (__stdcall *InputBox___vftable_)(int uiFlags);
// 982F64: using guessed type int (__thiscall *InputBox___vftable_)(void *p, char);

//----- (0044AF90) --------------------------------------------------------
void __thiscall ListItem::SetText(ListItem *this, char *pcText)
{
  ListItem *v2; // esi@1
  char *v3; // eax@2
  char *v4; // eax@4
  char *v5; // edx@4
  char v6; // cl@5
  int v7; // edi@6
  char *v8; // edx@8
  char *v9; // ecx@8
  char v10; // al@9

  v2 = this;
  if ( pcText || (v3 = this->m_pcText) == 0 )
  {
    v4 = pcText;
    v5 = pcText + 1;
    do
      v6 = *v4++;
    while ( v6 );
    v7 = v4 - v5;
    if ( v2->m_uiAllocLength <= v4 - v5 )
    {
      operator delete__(v2->m_pcText);
      v2->m_uiAllocLength = v7 + 1;
      v2->m_pcText = (char *)operator new__(v7 + 1);
    }
    v8 = v2->m_pcText;
    v9 = pcText;
    do
    {
      v10 = *v9;
      *v8++ = *v9++;
    }
    while ( v10 );
  }
  else
  {
    *v3 = 0;
  }
}

//----- (0044B000) --------------------------------------------------------
bool __thiscall ListWin::SetItem(ListWin *this, int iIndex, void *pvItem)
{
  int v3; // eax@1
  bool result; // al@2

  v3 = ((int (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(iIndex);
  if ( v3 )
  {
    *(_DWORD *)(v3 + 8) = pvItem;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0044B030) --------------------------------------------------------
void *__thiscall ListWin::GetItem(ListWin *this, int iIndex)
{
  void *result; // eax@1

  result = (void *)((int (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(iIndex);
  if ( result )
    result = (void *)*((_DWORD *)result + 2);
  return result;
}

//----- (0044B050) --------------------------------------------------------
int __thiscall ListWin::GetCurSel(ListWin *this)
{
  return this->m_iCurSelIndex;
}

//----- (0044B060) --------------------------------------------------------
void __thiscall ListWin::SetTextColor(ListWin *this, char ucR, char ucG, char ucB, char ucA)
{
  ListWin *v5; // esi@1
  D3DXCOLOR *v6; // eax@1
  D3DXCOLOR result; // [sp+4h] [bp-10h]@1

  v5 = this;
  v6 = Color::GetDxColor(&result, ucR, ucG, ucB, ucA);
  v5->m_kTextColor.r = v6->r;
  v5->m_kTextColor.g = v6->g;
  v5->m_kTextColor.b = v6->b;
  v5->m_kTextColor.a = v6->a;
}

//----- (0044B0B0) --------------------------------------------------------
void __thiscall ListWin::SetSelectedTextColor(ListWin *this, char ucR, char ucG, char ucB, char ucA)
{
  ListWin *v5; // esi@1
  D3DXCOLOR *v6; // eax@1
  D3DXCOLOR result; // [sp+4h] [bp-10h]@1

  v5 = this;
  v6 = Color::GetDxColor(&result, ucR, ucG, ucB, ucA);
  v5->m_kSelectedTextColor.r = v6->r;
  v5->m_kSelectedTextColor.g = v6->g;
  v5->m_kSelectedTextColor.b = v6->b;
  v5->m_kSelectedTextColor.a = v6->a;
}

//----- (0044B100) --------------------------------------------------------
void __thiscall ListWin::SetSelectedTextColor(ListWin *this, D3DXCOLOR *kColor)
{
  this->m_kSelectedTextColor.r = kColor->r;
  this->m_kSelectedTextColor.g = kColor->g;
  this->m_kSelectedTextColor.b = kColor->b;
  this->m_kSelectedTextColor.a = kColor->a;
}

//----- (0044B130) --------------------------------------------------------
void __thiscall ListWin::OnCommand(ListWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[126].__vecDelDtor)(lParam);
}

//----- (0044B150) --------------------------------------------------------
void __thiscall ListWin::OnSelected(ListWin *this, int lParam)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(lParam);
}

//----- (0044B160) --------------------------------------------------------
int __thiscall ListWin::GetCount(ListWin *this)
{
  return *(_DWORD *)&this->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
}

//----- (0044B170) --------------------------------------------------------
ListItem *__thiscall ListWin::GetListItem(ListWin *this, int iIndex)
{
  int v2; // edi@1
  ListWin *v3; // esi@1
  NiTListItem<NiPointer<ListItem> > *v4; // eax@4
  ListItem *result; // eax@10

  v2 = iIndex;
  v3 = this;
  if ( iIndex < 0
    || iIndex >= ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)()
    || (unsigned int)iIndex >= *(_DWORD *)&v3->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
    goto LABEL_14;
  v4 = v3->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( iIndex )
  {
    do
    {
      if ( v4 )
        v4 = v4->m_pkNext;
      else
        v4 = 0;
      --v2;
    }
    while ( v2 );
  }
  if ( v4 )
    result = v4->m_element.m_pObject;
  else
LABEL_14:
    result = 0;
  return result;
}

//----- (0044B1D0) --------------------------------------------------------
PgWinText *__thiscall ListWin::GetTextWin(ListWin *this, int iIndex)
{
  int v2; // edi@1
  ListWin *v3; // esi@1
  NiTListItem<NiPointer<PgWinText> > *v4; // eax@4
  PgWinText *result; // eax@10

  v2 = iIndex;
  v3 = this;
  if ( iIndex < 0
    || iIndex >= ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)()
    || (unsigned int)iIndex >= *(_DWORD *)&v3->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
    goto LABEL_14;
  v4 = v3->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( iIndex )
  {
    do
    {
      if ( v4 )
        v4 = v4->m_pkNext;
      else
        v4 = 0;
      --v2;
    }
    while ( v2 );
  }
  if ( v4 )
    result = v4->m_element.m_pObject;
  else
LABEL_14:
    result = 0;
  return result;
}

//----- (0044B230) --------------------------------------------------------
void __thiscall ListWin::_ListWin(ListWin *this)
{
  char *v1; // esi@1
  NiTListItem<PgWinBut *> *v2; // edi@1
  NiTListItem<PgWinBut *> *v3; // ST00_4@2
  char *v4; // esi@4
  NiTListItem<NiPointer<PgWinText> > *v5; // edi@4
  NiTListItem<NiPointer<PgWinText> > *v6; // ST00_4@5
  char *v7; // esi@7
  NiTListItem<NiPointer<ListItem> > *v8; // edi@7
  NiTListItem<NiPointer<ListItem> > *v9; // ST00_4@8
  ListWin *thisa; // [sp+4h] [bp-10h]@1

  thisa = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ListWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ListWin::_vftable_;
  v1 = (char *)&this->m_kBtnList;
  this->m_kBtnList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWinBut *>,PgWinBut *>Vtbl *)&NiTPointerListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
  v2 = this->m_kBtnList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    do
    {
      v3 = v2;
      v2 = v2->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v1 + 8))(v1, v3);
    }
    while ( v2 );
    this = thisa;
  }
  *((_DWORD *)v1 + 3) = 0;
  *((_DWORD *)v1 + 1) = 0;
  *((_DWORD *)v1 + 2) = 0;
  *(_DWORD *)v1 = &NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
  v4 = (char *)&this->m_kTextWinList;
  this->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&PgTList<NiPointer<PgWinText>>::_vftable_;
  v5 = this->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v5 )
  {
    do
    {
      v6 = v5;
      v5 = v5->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4 + 8))(v4, v6);
    }
    while ( v5 );
    this = thisa;
  }
  *((_DWORD *)v4 + 3) = 0;
  *((_DWORD *)v4 + 1) = 0;
  *((_DWORD *)v4 + 2) = 0;
  *(_DWORD *)v4 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
  v7 = (char *)&this->m_kItemList;
  this->m_kItemList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&PgTList<NiPointer<ListItem>>::_vftable_;
  v8 = this->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v8 )
  {
    do
    {
      v9 = v8;
      v8 = v8->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 8))(v7, v9);
    }
    while ( v8 );
    this = thisa;
  }
  *((_DWORD *)v7 + 3) = 0;
  *((_DWORD *)v7 + 1) = 0;
  *((_DWORD *)v7 + 2) = 0;
  *(_DWORD *)v7 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 98318C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);
// 9831AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);
// 9831BC: using guessed type int (__thiscall *NiTListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);
// 9831D4: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);
// 9831F4: using guessed type int (__thiscall *PgTList_NiPointer_ListItem_____vftable_)(void *p, char);
// 983214: using guessed type int (__thiscall *PgTList_NiPointer_PgWinText_____vftable_)(void *p, char);
// 983224: using guessed type int (__stdcall *ListWin___vftable_)(int uiFlags);
// 983244: using guessed type int (__thiscall *ListWin___vftable_)(void *p, char);

//----- (0044B350) --------------------------------------------------------
bool __thiscall ListWin::Create(ListWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, unsigned int uiLineSpace)
{
  ListWin *v8; // ebx@1
  unsigned int v9; // esi@1
  bool result; // al@2
  PgFont *v11; // edi@3
  unsigned int v12; // eax@4
  int v13; // ecx@4
  __int64 v14; // qax@4
  int v15; // eax@8
  int v16; // edi@8
  PgWinBut *v17; // eax@13
  PgWinBut *v18; // edi@13
  void *(__thiscall *v19)(NiRefObject *, unsigned int); // edx@13
  unsigned int v20; // ST1C_4@13
  int v21; // eax@13
  NiTListItem<PgWinBut *> *v22; // ecx@13
  tagSIZE kSize; // [sp+0h] [bp-14h]@4
  int v24; // [sp+10h] [bp-4h]@10

  v8 = this;
  v9 = uiHeight;
  if ( PgWin::Create(&this->baseclass_0, iXPos, iYPos, uiWidth, uiHeight, pkParent, 0, 0)
    && (v11 = pkFont) != 0
    && (PgFont::GetTextSize(pkFont, "W", 1, &kSize),
        v12 = uiLineSpace,
        v13 = kSize.cy,
        v8->m_uiLineSpace = uiLineSpace,
        pkParent = (PgWin *)(v13 + v12),
        v14 = v9 / (v13 + v12),
        v8->m_uiTotalViewLineNum = v14,
        (_DWORD)v14 != HIDWORD(v14)) )
  {
    pkParent = (PgWin *)HIDWORD(v14);
    uiHeight = HIDWORD(v14);
    if ( (unsigned int)v14 > HIDWORD(v14) )
    {
      while ( 1 )
      {
        v15 = (int)PgWinText::CreateWin(0, (int)pkParent, uiWidth, v13, v11, &v8->baseclass_0, 0, 0);
        v16 = v15;
        iYPos = v15;
        if ( v15 )
          InterlockedIncrement((volatile LONG *)(v15 + 4));
        v24 = 0;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v8->m_kTextWinList,
          (NiPointer<NiDX92DBufferData> *)&iYPos);
        v24 = -1;
        if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
        v17 = PgWinBut::CreateWin(0, (int)pkParent, uiWidth, kSize.cy + v8->m_uiLineSpace, &v8->baseclass_0, 0, 0, 0);
        v18 = v17;
        v19 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor;
        v20 = uiHeight;
        v17->m_eType = 0;
        v19(&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v20);
        v21 = (int)v8->m_kBtnList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWinBut *>,PgWinBut *> *)&v8->m_kBtnList);
        *(_DWORD *)(v21 + 8) = v18;
        *(_DWORD *)v21 = 0;
        *(_DWORD *)(v21 + 4) = v8->m_kBtnList.baseclass_0.baseclass_0.m_pkTail;
        v22 = v8->m_kBtnList.baseclass_0.baseclass_0.m_pkTail;
        if ( v22 )
          v22->m_pkNext = (NiTListItem<PgWinBut *> *)v21;
        else
          v8->m_kBtnList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWinBut *> *)v21;
        ++*(_DWORD *)&v8->m_kBtnList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        v13 = kSize.cy;
        v8->m_kBtnList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWinBut *> *)v21;
        pkParent = (PgWin *)((char *)pkParent + v13 + v8->m_uiLineSpace);
        ++uiHeight;
        if ( uiHeight >= v8->m_uiTotalViewLineNum )
          break;
        v11 = pkFont;
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0044B530) --------------------------------------------------------
int __thiscall ListWin::AddString(ListWin *this, char *pcText)
{
  ListWin *v2; // edi@1
  void *v3; // eax@1
  void *v4; // esi@1
  PgWinText *v5; // eax@6
  NiPointer<ListItem> spListItem; // [sp+0h] [bp-14h]@4
  int iIndex; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@6

  v2 = this;
  iIndex = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = operator new(0x14u);
  v4 = v3;
  if ( v3 )
  {
    *(_DWORD *)v3 = &NiRefObject::_vftable_;
    *((_DWORD *)v3 + 1) = 0;
    InterlockedIncrement(&NiRefObject::ms_uiObjects);
    *(_DWORD *)v4 = &ListItem::_vftable_;
    *((_DWORD *)v4 + 2) = 0;
    *((_DWORD *)v4 + 3) = 0;
    *((_DWORD *)v4 + 4) = 0;
  }
  else
  {
    v4 = 0;
  }
  spListItem.m_pObject = (ListItem *)v4;
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v9 = 0;
  ListItem::SetText((ListItem *)v4, pcText);
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v2->m_kItemList,
    (NiPointer<NiDX92DBufferData> *)&spListItem);
  v5 = ListWin::GetTextWin(v2, iIndex);
  if ( v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v5,
      (unsigned int)pcText);
  v9 = -1;
  if ( v4 && !InterlockedDecrement((volatile LONG *)v4 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
  return iIndex;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9831CC: using guessed type int (__thiscall *ListItem___vftable_)(void *p, char);

//----- (0044B630) --------------------------------------------------------
bool __thiscall ListWin::SetCurSel(ListWin *this, int iIndex)
{
  int v2; // esi@1
  bool result; // al@2
  PgWinText *v4; // eax@4
  PgWinText *v5; // eax@6
  PgWin *v6; // eax@8

  v2 = (int)this;
  if ( iIndex < ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)() )
  {
    if ( *(_DWORD *)(v2 + 288) != iIndex )
    {
      v4 = ListWin::GetTextWin((ListWin *)v2, *(_DWORD *)(v2 + 288));
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
          (NiRefObject *)v4,
          v2 + 296);
      *(_DWORD *)(v2 + 288) = iIndex;
      v5 = ListWin::GetTextWin((ListWin *)v2, iIndex);
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
          (NiRefObject *)v5,
          v2 + 312);
      v6 = PgWin::GetParentWin((PgWin *)v2);
      if ( v6 )
        PgWin::PostMsg((PgWin *)v2, v6, 0, *(_DWORD *)(v2 + 288), v2);
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0044B6D0) --------------------------------------------------------
void __thiscall ListWin::ResetContent(ListWin *this)
{
  ListWin *v1; // ebx@1
  PgWinText *v2; // eax@1
  NiTListItem<NiPointer<PgWinText> > *v3; // esi@3
  PgWinText *v4; // ecx@4
  NiTListItem<NiPointer<ListItem> > *v5; // esi@7
  NiTListItem<NiPointer<ListItem> > *v6; // eax@7
  NiTListItem<NiPointer<ListItem> > *v7; // ST00_4@8

  v1 = this;
  v2 = ListWin::GetTextWin(this, this->m_iCurSelIndex);
  if ( v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v2,
      (unsigned int)&v1->m_kTextColor);
  v3 = v1->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3->m_element.m_pObject;
    v3 = v3->m_pkNext;
    if ( v4 )
      ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_983186);
  }
  v5 = v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v6 = 0;
  if ( v5 )
  {
    do
    {
      v7 = v5;
      v5 = v5->m_pkNext;
      v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *)&v1->m_kItemList,
        v7);
    }
    while ( v5 );
    v6 = 0;
  }
  *(_DWORD *)&v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v6;
  v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v6;
  v1->m_iCurSelIndex = -1;
}

//----- (0044B770) --------------------------------------------------------
void __thiscall ListWin::UpdateMeWin(ListWin *this, float fCurTime)
{
  ListWin *v2; // esi@1
  NiTListItem<PgWinBut *> *v3; // ebx@1
  int v4; // edi@1
  PgWinBut *v5; // eax@2
  NiTListItem<NiPointer<PgWinText> > *v6; // eax@5
  int v7; // ecx@6
  PgWinText *v8; // esi@12
  bool v9; // zf@14
  NiRefObjectVtbl *v10; // eax@14
  PgWinBut *pkBtn; // [sp+Ch] [bp-8h]@2
  ListWin *i; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->m_kBtnList.baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  for ( i = this; v3; ++v4 )
  {
    v5 = v3->m_element;
    v3 = v3->m_pkNext;
    pkBtn = v5;
    if ( v4 >= 0
      && v4 < ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v2)
      && (unsigned int)v4 < *(_DWORD *)&v2->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
    {
      v6 = v2->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v4 )
      {
        v7 = v4;
        do
        {
          if ( v6 )
            v6 = v6->m_pkNext;
          else
            v6 = 0;
          --v7;
        }
        while ( v7 );
      }
      if ( v6 )
      {
        v8 = v6->m_element.m_pObject;
        if ( v8 && i->m_iCurSelIndex != v4 )
        {
          v9 = ((int (__stdcall *)(_DWORD, _DWORD))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                 PgWin::ms_iMsX.x,
                 PgWin::ms_iMsY) == 0;
          v10 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          if ( v9 )
            v10[117].__vecDelDtor((NiRefObject *)v8, (unsigned int)&i->m_kTextColor);
          else
            ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v10[116].__vecDelDtor)(v8, 0, 255, 0, 255);
        }
        v2 = i;
      }
    }
  }
}

//----- (0044B860) --------------------------------------------------------
void __thiscall ListWin::ListWin(ListWin *this)
{
  ListWin *v1; // esi@1
  D3DXCOLOR *v2; // eax@1
  D3DXCOLOR *v3; // eax@1
  D3DXCOLOR result; // [sp+0h] [bp-20h]@1
  ListWin *v5; // [sp+10h] [bp-10h]@1
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v5 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ListWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ListWin::_vftable_;
  v6 = 0;
  *(_DWORD *)&v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kItemList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&PgTList<NiPointer<ListItem>>::_vftable_;
  *(_DWORD *)&v1->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kTextWinList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&PgTList<NiPointer<PgWinText>>::_vftable_;
  *(_DWORD *)&v1->m_kBtnList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBtnList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kBtnList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kBtnList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWinBut *>,PgWinBut *>Vtbl *)&NiTList<PgWinBut__>::_vftable_;
  LOBYTE(v6) = 3;
  v1->m_iCurSelIndex = -1;
  v1->m_uiLineSpace = 1;
  v2 = Color::GetDxColor(&result, -1, -1, -1, -1);
  v1->m_kTextColor.r = v2->r;
  v1->m_kTextColor.g = v2->g;
  v1->m_kTextColor.b = v2->b;
  v1->m_kTextColor.a = v2->a;
  v3 = Color::GetDxColor(&result, 0, -1, 0, -1);
  v1->m_kSelectedTextColor.r = v3->r;
  v1->m_kSelectedTextColor.g = v3->g;
  v1->m_kSelectedTextColor.b = v3->b;
  v1->m_kSelectedTextColor.a = v3->a;
  v1->m_uiTotalViewLineNum = 0;
}
// 9831F4: using guessed type int (__thiscall *PgTList_NiPointer_ListItem_____vftable_)(void *p, char);
// 983204: using guessed type int (__thiscall *NiTList_PgWinBut _____vftable_)(void *p, char);
// 983214: using guessed type int (__thiscall *PgTList_NiPointer_PgWinText_____vftable_)(void *p, char);
// 983224: using guessed type int (__stdcall *ListWin___vftable_)(int uiFlags);
// 983244: using guessed type int (__thiscall *ListWin___vftable_)(void *p, char);

//----- (0044B9B0) --------------------------------------------------------
bool __thiscall ListWin::DeleteString(ListWin *this, int iIndex)
{
  ListWin *v2; // esi@1
  int v3; // eax@1
  int v4; // edx@1
  bool v5; // al@2
  int v6; // eax@4
  PgWin *v7; // esi@11
  NiPointer<PgWin> result; // [sp+4h] [bp-4h]@11

  v2 = this;
  v3 = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v4 = iIndex;
  if ( iIndex >= v3 )
    goto LABEL_18;
  if ( (unsigned int)iIndex < *(_DWORD *)&v2->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v6 = (int)v2->m_kItemList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( iIndex )
    {
      do
      {
        if ( v6 )
          v6 = *(_DWORD *)v6;
        else
          v6 = 0;
        --v4;
      }
      while ( v4 );
    }
  }
  else
  {
    v6 = 0;
  }
  iIndex = v6;
  if ( v6 )
  {
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v2->m_kItemList,
      &result,
      (void **)&iIndex);
    v7 = result.m_pObject;
    if ( result.m_pObject
      && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    v5 = 1;
  }
  else
  {
LABEL_18:
    v5 = 0;
  }
  return v5;
}

//----- (0044BA40) --------------------------------------------------------
ListWin *__cdecl ListWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, PgWin *pkParent, unsigned int uiLineSpace)
{
  void *v7; // eax@1
  int v8; // eax@2
  int v9; // esi@2
  PgWin *v10; // edi@8
  ListWin *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x17Cu);
  result.m_pObject = (PgWin *)v7;
  v13 = 0;
  if ( v7 )
  {
    ListWin::ListWin((ListWin *)v7);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)(v9 + 4));
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, unsigned int, PgFont *, PgWin *, unsigned int))(*(_DWORD *)v9 + 500))(
                          v9,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkFont,
                          pkParent,
                          uiLineSpace) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    v11 = (ListWin *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}

//----- (0044BB90) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
}
// 98318C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);

//----- (0044BBA0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
}
// 9831AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);

//----- (0044BBB0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_NiTListBase<DFALL<PgWinBut__>_PgWinBut__>(NiTListBase<DFALL<PgWinBut *>,PgWinBut *> *this)
{
  this->vfptr = (NiTListBase<DFALL<PgWinBut *>,PgWinBut *>Vtbl *)&NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
}
// 9831BC: using guessed type int (__thiscall *NiTListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);

//----- (0044BBC0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 98318C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);

//----- (0044BBF0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9831AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);

//----- (0044BC20) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_scalar_deleting_destructor_(NiTListBase<DFALL<PgWinBut *>,PgWinBut *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<PgWinBut *>,PgWinBut *>Vtbl *)&NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9831BC: using guessed type int (__thiscall *NiTListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);

//----- (0044BC50) --------------------------------------------------------
void __thiscall NiTPointerList<NiPointer<ListItem>>::_NiTPointerList<NiPointer<ListItem>>(NiTPointerList<NiPointer<ListItem> > *this)
{
  NiTPointerList<NiPointer<ListItem> > *v1; // edi@1
  NiTListItem<NiPointer<ListItem> > *v2; // esi@1
  NiTListItem<NiPointer<ListItem> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
}
// 98318C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);
// 98319C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);

//----- (0044BCD0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<ListItem> > *v3; // esi@1
  NiTListItem<NiPointer<ListItem> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98318C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);
// 98319C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);

//----- (0044BD60) --------------------------------------------------------
void __thiscall PgTList<NiPointer<ListItem>>::_PgTList<NiPointer<ListItem>>(PgTList<NiPointer<ListItem> > *this)
{
  PgTList<NiPointer<ListItem> > *v1; // edi@1
  NiTListItem<NiPointer<ListItem> > *v2; // esi@1
  NiTListItem<NiPointer<ListItem> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&PgTList<NiPointer<ListItem>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
}
// 98318C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);
// 9831F4: using guessed type int (__thiscall *PgTList_NiPointer_ListItem_____vftable_)(void *p, char);

//----- (0044BDE0) --------------------------------------------------------
void *__thiscall ListItem::_scalar_deleting_destructor_(ListItem *this, unsigned int a2)
{
  ListItem *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pcText;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&ListItem::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9831CC: using guessed type int (__thiscall *ListItem___vftable_)(void *p, char);

//----- (0044BE20) --------------------------------------------------------
void __thiscall NiTList<PgWinBut__>::_NiTList<PgWinBut__>(NiTList<PgWinBut *> *this)
{
  NiTList<PgWinBut *> *v1; // edi@1
  NiTListItem<PgWinBut *> *v2; // esi@1
  NiTListItem<PgWinBut *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWinBut *>,PgWinBut *>Vtbl *)&NiTPointerListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<PgWinBut *>,PgWinBut *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWinBut *>,PgWinBut *>Vtbl *)&NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
}
// 9831BC: using guessed type int (__thiscall *NiTListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);
// 9831D4: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);

//----- (0044BEA0) --------------------------------------------------------
void *__thiscall PgTList<NiPointer<ListItem>>::_scalar_deleting_destructor_(PgTList<NiPointer<ListItem> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<ListItem> > *v3; // esi@1
  NiTListItem<NiPointer<ListItem> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<ListItem> >Vtbl *)&PgTList<NiPointer<ListItem>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98318C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_ListItem_____vftable_)(void *p, char);
// 9831F4: using guessed type int (__thiscall *PgTList_NiPointer_ListItem_____vftable_)(void *p, char);

//----- (0044BF30) --------------------------------------------------------
void __thiscall NiTPointerList<NiPointer<PgWinText>>::_NiTPointerList<NiPointer<PgWinText>>(NiTPointerList<NiPointer<PgWinText> > *this)
{
  NiTPointerList<NiPointer<PgWinText> > *v1; // edi@1
  NiTListItem<NiPointer<PgWinText> > *v2; // esi@1
  NiTListItem<NiPointer<PgWinText> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
}
// 9831AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);
// 9831E4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);

//----- (0044BFB0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<PgWinBut__>_PgWinBut__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<PgWinBut *>,PgWinBut *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PgWinBut *> *v3; // esi@1
  NiTListItem<PgWinBut *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<PgWinBut *>,PgWinBut *>Vtbl *)&NiTPointerListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<PgWinBut__>_PgWinBut__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9831BC: using guessed type int (__thiscall *NiTListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);
// 9831D4: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PgWinBut ___PgWinBut _____vftable_)(void *p, char);

//----- (0044C040) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<PgWinText> > *v3; // esi@1
  NiTListItem<NiPointer<PgWinText> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9831AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);
// 9831E4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);

//----- (0044C0D0) --------------------------------------------------------
void __thiscall PgTList<NiPointer<PgWinText>>::_PgTList<NiPointer<PgWinText>>(PgTList<NiPointer<PgWinText> > *this)
{
  PgTList<NiPointer<PgWinText> > *v1; // edi@1
  NiTListItem<NiPointer<PgWinText> > *v2; // esi@1
  NiTListItem<NiPointer<PgWinText> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&PgTList<NiPointer<PgWinText>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
}
// 9831AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);
// 983214: using guessed type int (__thiscall *PgTList_NiPointer_PgWinText_____vftable_)(void *p, char);

//----- (0044C150) --------------------------------------------------------
NiPointer<PgWin> *__thiscall NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::RemoveHead(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result)
{
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *v2; // esi@1
  NiTListItem<NiPointer<PgWin> > *v3; // edi@1
  NiTListItem<NiPointer<PgWin> > *v4; // eax@1
  PgWin *v5; // eax@4

  v2 = this;
  v3 = this->baseclass_0.m_pkHead;
  v4 = v3->m_pkNext;
  this->baseclass_0.m_pkHead = v3->m_pkNext;
  if ( v4 )
    v4->m_pkPrev = 0;
  else
    this->baseclass_0.m_pkTail = 0;
  v5 = v3->m_element.m_pObject;
  result->m_pObject = v5;
  if ( v5 )
    InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr->DeleteItem)(v2);
  --*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  return result;
}

//----- (0044C1E0) --------------------------------------------------------
NiPointer<PgWin> *__thiscall NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::RemoveTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result)
{
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *v2; // esi@1
  NiTListItem<NiPointer<PgWin> > *v3; // edi@1
  NiTListItem<NiPointer<PgWin> > *v4; // eax@1
  PgWin *v5; // eax@4

  v2 = this;
  v3 = this->baseclass_0.m_pkTail;
  v4 = v3->m_pkPrev;
  this->baseclass_0.m_pkTail = v4;
  if ( v4 )
    v4->m_pkNext = 0;
  else
    this->baseclass_0.m_pkHead = 0;
  v5 = v3->m_element.m_pObject;
  result->m_pObject = v5;
  if ( v5 )
    InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr->DeleteItem)(v2);
  --*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  return result;
}

//----- (0044C270) --------------------------------------------------------
void *__thiscall PgTList<NiPointer<PgWinText>>::_scalar_deleting_destructor_(PgTList<NiPointer<PgWinText> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<PgWinText> > *v3; // esi@1
  NiTListItem<NiPointer<PgWinText> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWinText> >Vtbl *)&PgTList<NiPointer<PgWinText>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgWinText>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9831AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgWinText_____vftable_)(void *p, char);
// 983214: using guessed type int (__thiscall *PgTList_NiPointer_PgWinText_____vftable_)(void *p, char);

//----- (0044C300) --------------------------------------------------------
NiPointer<PgWin> *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::RemovePos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result, void **kPos)
{
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *v3; // esi@1
  void *v4; // ebx@1
  NiPointer<PgWin> *v5; // eax@2
  int v6; // edx@5
  void *v7; // eax@5
  int v8; // edi@9

  v3 = this;
  v4 = *kPos;
  if ( *kPos == this->baseclass_0.m_pkHead )
  {
    *kPos = *(void **)v4;
    NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::RemoveHead(this, result);
    v5 = result;
  }
  else
  {
    if ( v4 == this->baseclass_0.m_pkTail )
    {
      *kPos = 0;
      NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::RemoveTail(this, result);
      v5 = result;
    }
    else
    {
      v6 = *((_DWORD *)v4 + 1);
      v7 = *(void **)v4;
      *kPos = *(void **)v4;
      if ( v6 )
        *(_DWORD *)v6 = v7;
      if ( v7 )
        *((_DWORD *)v7 + 1) = v6;
      v8 = *((_DWORD *)v4 + 2);
      if ( v8 )
        InterlockedIncrement((volatile LONG *)(v8 + 4));
      v3->baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)v3,
        (NiTListItem<NiPointer<PgWin> > *)v4);
      --*(_DWORD *)&v3->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      result->m_pObject = (PgWin *)v8;
      if ( v8 )
        InterlockedIncrement((volatile LONG *)(v8 + 4));
      if ( v8 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
      }
      v5 = result;
    }
  }
  return v5;
}

//----- (0044C420) --------------------------------------------------------
void *__thiscall ListWin::_vector_deleting_destructor_(ListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ListWin::_ListWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0044C450) --------------------------------------------------------
NiTexture *__thiscall MaskedWin::GetBaseTexture(MaskedWin *this)
{
  return this->m_pkCurrTexture;
}

//----- (0044C460) --------------------------------------------------------
NiTriShape *__thiscall MaskedWin::GetTriShape(MaskedWin *this)
{
  return this->m_spShape.m_pObject;
}

//----- (0044C470) --------------------------------------------------------
void __thiscall MaskedWin::MaskedWin(MaskedWin *this)
{
  MaskedWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MaskedWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MaskedWin::_vftable_;
  v1->m_spShape.m_pObject = 0;
  v1->m_pkCurrTexture = 0;
}
// 98349C: using guessed type int (__stdcall *MaskedWin___vftable_)(int uiFlags);
// 9834BC: using guessed type int (__thiscall *MaskedWin___vftable_)(void *p, char);

//----- (0044C4A0) --------------------------------------------------------
void __thiscall MaskedWin::_MaskedWin(MaskedWin *this)
{
  MaskedWin *v1; // esi@1
  NiTriShape *v2; // edi@1
  NiTriShape *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MaskedWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MaskedWin::_vftable_;
  v2 = this->m_spShape.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spShape.m_pObject = 0;
  }
  v3 = v1->m_spShape.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWin::_PgWin(&v1->baseclass_0);
}
// 98349C: using guessed type int (__stdcall *MaskedWin___vftable_)(int uiFlags);
// 9834BC: using guessed type int (__thiscall *MaskedWin___vftable_)(void *p, char);

//----- (0044C560) --------------------------------------------------------
bool __thiscall MaskedWin::Create(MaskedWin *this, int iXPos, int iYPos, NiTriShape *pkTriShape, bool bAlphaBlend, PgWin *pkParent)
{
  NiGeometryData *v6; // eax@1
  NiPoint3 *v7; // ebx@1
  float v8; // ST3C_4@1
  double v9; // st7@1
  unsigned int v10; // edi@1
  int v11; // edx@1
  float v12; // ST3C_4@1
  double v13; // st6@1
  unsigned int v14; // esi@3
  int v15; // ecx@3
  int v16; // ecx@38
  int v17; // esi@38
  NiTriShape *v18; // esi@48
  NiGeometry *v20; // [sp-Ch] [bp-2Ch]@55
  NiShader *v21; // [sp-8h] [bp-28h]@55
  MaskedWin *thisa; // [sp+10h] [bp-10h]@1
  float fTop; // [sp+14h] [bp-Ch]@1
  float fLeft; // [sp+18h] [bp-8h]@1
  NiGeometry *bAlphaBlenda; // [sp+34h] [bp+14h]@55
  NiGeometry *bAlphaBlendb; // [sp+34h] [bp+14h]@56

  v6 = pkTriShape->baseclass_0.baseclass_0.m_spModelData.m_pObject;
  v7 = v6->m_pkVertex;
  v8 = v7->x;
  v9 = v8;
  v10 = v6->m_usVertices;
  fLeft = v8;
  v11 = 1;
  thisa = this;
  v12 = v7->y;
  v13 = v12;
  fTop = v12;
  if ( v10 > 1 )
  {
    if ( (signed int)(v10 - 1) >= 4 )
    {
      v14 = ((v10 - 5) >> 2) + 1;
      v15 = (int)&v7[2];
      v11 = 4 * v14 + 1;
      do
      {
        if ( fLeft <= (double)*(float *)(v15 - 12) )
        {
          if ( *(float *)(v15 - 12) > v9 )
            v9 = *(float *)(v15 - 12);
        }
        else
        {
          fLeft = *(float *)(v15 - 12);
        }
        if ( fTop <= (double)*(float *)(v15 - 8) )
        {
          if ( *(float *)(v15 - 8) > v13 )
            v13 = *(float *)(v15 - 8);
        }
        else
        {
          fTop = *(float *)(v15 - 8);
        }
        if ( fLeft <= (double)*(float *)v15 )
        {
          if ( *(float *)v15 > v9 )
            v9 = *(float *)v15;
        }
        else
        {
          fLeft = *(float *)v15;
        }
        if ( fTop <= (double)*(float *)(v15 + 4) )
        {
          if ( *(float *)(v15 + 4) > v13 )
            v13 = *(float *)(v15 + 4);
        }
        else
        {
          fTop = *(float *)(v15 + 4);
        }
        if ( fLeft <= (double)*(float *)(v15 + 12) )
        {
          if ( *(float *)(v15 + 12) > v9 )
            v9 = *(float *)(v15 + 12);
        }
        else
        {
          fLeft = *(float *)(v15 + 12);
        }
        if ( fTop <= (double)*(float *)(v15 + 16) )
        {
          if ( *(float *)(v15 + 16) > v13 )
            v13 = *(float *)(v15 + 16);
        }
        else
        {
          fTop = *(float *)(v15 + 16);
        }
        if ( fLeft <= (double)*(float *)(v15 + 24) )
        {
          if ( *(float *)(v15 + 24) > v9 )
            v9 = *(float *)(v15 + 24);
        }
        else
        {
          fLeft = *(float *)(v15 + 24);
        }
        if ( fTop <= (double)*(float *)(v15 + 28) )
        {
          if ( *(float *)(v15 + 28) > v13 )
            v13 = *(float *)(v15 + 28);
        }
        else
        {
          fTop = *(float *)(v15 + 28);
        }
        v15 += 48;
        --v14;
      }
      while ( v14 );
    }
    if ( v11 < v10 )
    {
      v16 = (int)&v7[v11];
      v17 = v10 - v11;
      do
      {
        if ( fLeft <= (double)*(float *)v16 )
        {
          if ( *(float *)v16 > v9 )
            v9 = *(float *)v16;
        }
        else
        {
          fLeft = *(float *)v16;
        }
        if ( fTop <= (double)*(float *)(v16 + 4) )
        {
          if ( *(float *)(v16 + 4) > v13 )
            v13 = *(float *)(v16 + 4);
        }
        else
        {
          fTop = *(float *)(v16 + 4);
        }
        v16 += 12;
        --v17;
      }
      while ( v17 );
    }
  }
  v18 = thisa->m_spShape.m_pObject;
  if ( v18 != pkTriShape )
  {
    if ( v18
      && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v18 )
      v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v18,
        1u);
    thisa->m_spShape.m_pObject = pkTriShape;
    InterlockedIncrement((volatile LONG *)&pkTriShape->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__stdcall *)(NiTriShape *, signed int))thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    thisa->m_spShape.m_pObject,
    1);
  NiAVObject::UpdateProperties(&thisa->baseclass_0.baseclass_0.baseclass_0);
  thisa->m_spShape.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  if ( bAlphaBlend )
  {
    bAlphaBlenda = (NiGeometry *)thisa->m_spShape.m_pObject;
    v21 = (NiShader *)MaskShader::GetShader();
    v20 = bAlphaBlenda;
  }
  else
  {
    bAlphaBlendb = (NiGeometry *)thisa->m_spShape.m_pObject;
    v21 = (NiShader *)MaskShader::GetShader_NoAlphaBlend();
    v20 = bAlphaBlendb;
  }
  NiShaderFactory::AttachShader(v20, v21);
  return PgWin::Create(
           &thisa->baseclass_0,
           iXPos,
           iYPos,
           (signed __int64)(v9 + 0.5) - (signed __int64)(fLeft + 0.5),
           (signed __int64)(v13 + 0.5) - (signed __int64)(fTop + 0.5),
           pkParent,
           0,
           0);
}

//----- (0044C900) --------------------------------------------------------
void __thiscall MaskedWin::SetBaseTextureMatrix(MaskedWin *this, float fOffX, float fOffY, float fScaleX, float fScaleY)
{
  MaskedWin *v5; // ebx@1
  NiExtraData *v6; // eax@1
  void *v7; // eax@2
  void *v8; // edi@2
  void *v9; // eax@2
  void *v10; // esi@2
  NiRefObjectVtbl *v11; // eax@6

  v5 = this;
  v6 = NiObjectNET::GetExtraData(&this->m_spShape.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, "*texmat");
  if ( v6 )
  {
    v11 = v6[1].baseclass_0.baseclass_0.vfptr;
    *(float *)&v11->__vecDelDtor = fOffX;
    *(float *)&v11[1].__vecDelDtor = fOffY;
    *(float *)&v11[2].__vecDelDtor = fScaleX;
    *(float *)&v11[3].__vecDelDtor = fScaleY;
  }
  else
  {
    v7 = operator new(0x10u);
    v8 = v7;
    *(float *)v7 = fOffX;
    *((float *)v7 + 1) = fOffY;
    *((float *)v7 + 2) = fScaleX;
    *((float *)v7 + 3) = fScaleY;
    v9 = operator new(0x14u);
    v10 = v9;
    if ( v9 )
    {
      NiExtraData::NiExtraData((NiExtraData *)v9);
      *(_DWORD *)v10 = &NiBinaryExtraData::_vftable_;
      *((_DWORD *)v10 + 4) = 16;
      *((_DWORD *)v10 + 3) = v8;
    }
    else
    {
      v10 = 0;
    }
    NiObjectNET::AddExtraData(
      &v5->m_spShape.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      "*texmat",
      (NiExtraData *)v10);
  }
}
// 983454: using guessed type int (__thiscall *NiBinaryExtraData___vftable_)(void *p, char);

//----- (0044C9F0) --------------------------------------------------------
void __thiscall MaskedWin::SetDarkMap(MaskedWin *this, NiTexture *pkTexture)
{
  unsigned int v2; // esi@1
  int v3; // edi@1

  v2 = NiAVObject::GetProperty(&this->m_spShape.m_pObject->baseclass_0.baseclass_0.baseclass_0, 8)[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.m_uiRefCount;
  v3 = *(_DWORD *)(v2 + 4);
  if ( (NiTexture *)v3 != pkTexture )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    *(_DWORD *)(v2 + 4) = pkTexture;
    if ( pkTexture )
      InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (0044CA50) --------------------------------------------------------
void __thiscall MaskedWin::SetBaseTexture(MaskedWin *this, NiTexture *pkTexture)
{
  MaskedWin *v2; // esi@1
  NiProperty *v3; // edi@1
  void *v4; // eax@2
  NiProperty *v5; // eax@3
  NiAVObject *v6; // ecx@7

  v2 = this;
  v3 = NiAVObject::GetProperty(&this->m_spShape.m_pObject->baseclass_0.baseclass_0.baseclass_0, 8);
  if ( !v3 )
  {
    v4 = operator new(0x44u);
    if ( v4 )
      NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v4);
    else
      v5 = 0;
    v3 = v5;
    NiAVObject::AttachProperty(&v2->m_spShape.m_pObject->baseclass_0.baseclass_0.baseclass_0, v5);
  }
  if ( v2->m_pkCurrTexture != pkTexture )
  {
    NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v3, pkTexture);
    v6 = (NiAVObject *)v2->m_spShape.m_pObject;
    v2->m_pkCurrTexture = pkTexture;
    NiAVObject::UpdateProperties(v6);
  }
}

//----- (0044CB00) --------------------------------------------------------
MaskedWin *__cdecl MaskedWin::CreateWin(int iXPos, int iYPos, NiTriShape *pkTriShape, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  MaskedWin *v7; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x128u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &MaskedWin::_vftable_;
    *((_DWORD *)v5 + 58) = &MaskedWin::_vftable_;
    *((_DWORD *)v5 + 72) = 0;
    *((_DWORD *)v5 + 73) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( MaskedWin::Create((MaskedWin *)v5, iXPos, iYPos, pkTriShape, 1, pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (MaskedWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    }
    v7 = 0;
  }
  return v7;
}
// 98349C: using guessed type int (__stdcall *MaskedWin___vftable_)(int uiFlags);
// 9834BC: using guessed type int (__thiscall *MaskedWin___vftable_)(void *p, char);

//----- (0044CC60) --------------------------------------------------------
MaskedWin *__cdecl MaskedWin::CreateWin_MaskShaderNoAlphaBlend(int iXPos, int iYPos, NiTriShape *pkTriShape, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  MaskedWin *v7; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x128u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &MaskedWin::_vftable_;
    *((_DWORD *)v5 + 58) = &MaskedWin::_vftable_;
    *((_DWORD *)v5 + 72) = 0;
    *((_DWORD *)v5 + 73) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( MaskedWin::Create((MaskedWin *)v5, iXPos, iYPos, pkTriShape, 0, pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (MaskedWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    }
    v7 = 0;
  }
  return v7;
}
// 98349C: using guessed type int (__stdcall *MaskedWin___vftable_)(int uiFlags);
// 9834BC: using guessed type int (__thiscall *MaskedWin___vftable_)(void *p, char);

//----- (0044CDC0) --------------------------------------------------------
void __thiscall NiBinaryExtraData::NiBinaryExtraData(NiBinaryExtraData *this, const unsigned int uiSize, char *pcBinaryData)
{
  NiBinaryExtraData *v3; // esi@1

  v3 = this;
  NiExtraData::NiExtraData(&this->baseclass_0);
  v3->m_uiSize = uiSize;
  v3->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiBinaryExtraData::_vftable_;
  v3->m_pcBinaryData = pcBinaryData;
}
// 983454: using guessed type int (__thiscall *NiBinaryExtraData___vftable_)(void *p, char);

//----- (0044CDF0) --------------------------------------------------------
NiRTTI *__thiscall NiBinaryExtraData::GetRTTI(NiBinaryExtraData *this)
{
  return &NiBinaryExtraData::m_RTTI;
}

//----- (0044CE00) --------------------------------------------------------
void *__thiscall NiBinaryExtraData::_vector_deleting_destructor_(NiBinaryExtraData *this, unsigned int a2)
{
  NiBinaryExtraData *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pcBinaryData;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiBinaryExtraData::_vftable_;
  operator delete(v3);
  v2->m_pcBinaryData = 0;
  NiExtraData::_NiExtraData(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 983454: using guessed type int (__thiscall *NiBinaryExtraData___vftable_)(void *p, char);

//----- (0044CE40) --------------------------------------------------------
void *__thiscall MaskedWin::_vector_deleting_destructor_(MaskedWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MaskedWin::_MaskedWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0044CE70) --------------------------------------------------------
bool __thiscall MaskShader::Initialize(MaskShader *this, NiDX9Renderer *pkRenderer)
{
  return NiD3DDefaultShader::Initialize(&this->baseclass_0, pkRenderer) != 0;
}

//----- (0044CE90) --------------------------------------------------------
void __thiscall MaskShader::_MaskShader(MaskShader *this)
{
  MaskShader *v1; // esi@1
  NiD3DPass *v2; // ecx@1
  bool v3; // zf@2
  NiD3DPass *v4; // ecx@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MaskShader::_vftable_;
  v2 = this->m_spPassOne.m_pObject;
  if ( v2 )
  {
    v3 = v2->m_uiRefCount-- == 1;
    if ( v3 )
      NiD3DPass::ReturnPassToPool(v2);
    v1->m_spPassOne.m_pObject = 0;
  }
  v4 = v1->m_spPassOne.m_pObject;
  if ( v4 )
  {
    v3 = v4->m_uiRefCount-- == 1;
    if ( v3 )
      NiD3DPass::ReturnPassToPool(v4);
  }
  NiD3DDefaultShader::_NiD3DDefaultShader(&v1->baseclass_0);
}
// 9836CC: using guessed type int (__thiscall *MaskShader___vftable_)(void *p, char);

//----- (0044CF20) --------------------------------------------------------
bool __thiscall MaskShader::CreateStagesAndPasses(MaskShader *this)
{
  MaskShader *v1; // esi@1
  NiD3DTextureStage *v2; // edi@1
  NiTexture *v3; // ebx@1
  NiD3DTextureStageGroup *v4; // ecx@6
  NiD3DTextureStage *v5; // ebx@6
  NiTexture *v6; // edi@6
  NiPointer<NiD3DPass> *v7; // edi@11
  NiD3DPass *v8; // ecx@11
  bool v9; // zf@13
  NiD3DPass *v10; // edi@15
  NiD3DPass *v11; // eax@17
  NiD3DPass *v12; // edi@20
  NiD3DPass *v13; // edi@22
  NiD3DPass *v14; // edi@24
  NiD3DPass *v15; // edi@26
  unsigned int v16; // ebx@26
  NiD3DPass *v17; // edi@28
  NiD3DPass *v18; // edi@30
  NiD3DPass *v19; // edi@32
  NiD3DPass *v20; // edi@34
  NiD3DPass *v21; // edi@36
  NiD3DPass *v22; // edi@38
  NiD3DPass *v23; // esi@40
  NiD3DTextureStage *v24; // eax@42
  NiD3DTextureStage *v25; // eax@45
  NiPointer<NiD3DPass> result; // [sp+0h] [bp-18h]@11
  NiPointer<NiD3DTextureStage> spStage; // [sp+4h] [bp-14h]@1
  NiPointer<NiD3DTextureStage> spStage2; // [sp+8h] [bp-10h]@6
  int v30; // [sp+14h] [bp-4h]@1

  v1 = this;
  NiD3DTextureStage::CreateNewStage(&spStage);
  v2 = spStage.m_pObject;
  spStage.m_pObject->m_uiStage = 0;
  v3 = v2->m_spTexture.m_pObject;
  v30 = 0;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spTexture.m_pObject = 0;
  }
  NiD3DTextureStageGroup::SetStageState(v2->m_pkTextureStageGroup, 0xBu, 0, 0);
  v4 = v2->m_pkTextureStageGroup;
  v2->m_bTextureTransform = 1;
  NiD3DTextureStageGroup::SetStageState(v4, 0x18u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 1u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 2u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 3u, 0, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 4u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 5u, 2u, 0);
  NiD3DTextureStage::SetFilterMode(spStage.m_pObject, FILTER_TRILERP);
  NiD3DTextureStage::CreateNewStage(&spStage2);
  spStage2.m_pObject->m_uiStage = 1;
  v5 = spStage2.m_pObject;
  v6 = spStage2.m_pObject->m_spTexture.m_pObject;
  LOBYTE(v30) = 1;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v5->m_spTexture.m_pObject = 0;
  }
  NiD3DTextureStageGroup::SetStageState(spStage2.m_pObject->m_pkTextureStageGroup, 0xBu, 1u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage2.m_pObject->m_pkTextureStageGroup, 1u, 4u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage2.m_pObject->m_pkTextureStageGroup, 2u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage2.m_pObject->m_pkTextureStageGroup, 3u, 1u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage2.m_pObject->m_pkTextureStageGroup, 4u, 4u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage2.m_pObject->m_pkTextureStageGroup, 5u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage2.m_pObject->m_pkTextureStageGroup, 6u, 1u, 0);
  v7 = NiD3DPass::CreateNewPass(&result);
  v8 = v1->m_spPassOne.m_pObject;
  LOBYTE(v30) = 2;
  if ( v8 != v7->m_pObject )
  {
    if ( v8 )
    {
      v9 = v8->m_uiRefCount-- == 1;
      if ( v9 )
        NiD3DPass::ReturnPassToPool(v8);
    }
    v10 = v7->m_pObject;
    v1->m_spPassOne.m_pObject = v10;
    if ( v10 )
      ++v10->m_uiRefCount;
  }
  v11 = result.m_pObject;
  LOBYTE(v30) = 1;
  if ( result.m_pObject )
  {
    --result.m_pObject->m_uiRefCount;
    if ( !v11->m_uiRefCount )
      NiD3DPass::ReturnPassToPool(v11);
  }
  NiD3DPass::SetStage(v1->m_spPassOne.m_pObject, v1->m_spPassOne.m_pObject->m_uiCurrentStage, spStage.m_pObject);
  NiD3DPass::SetStage(v1->m_spPassOne.m_pObject, v1->m_spPassOne.m_pObject->m_uiCurrentStage, spStage2.m_pObject);
  v12 = v1->m_spPassOne.m_pObject;
  if ( !v12->m_pkRenderStateGroup )
    v12->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v12->m_pkRenderStateGroup, 0x16u, 2u, 0);
  v13 = v1->m_spPassOne.m_pObject;
  if ( !v13->m_pkRenderStateGroup )
    v13->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v13->m_pkRenderStateGroup, 7u, 0, 0);
  v14 = v1->m_spPassOne.m_pObject;
  if ( !v14->m_pkRenderStateGroup )
    v14->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v14->m_pkRenderStateGroup, 0xEu, 0, 0);
  v15 = v1->m_spPassOne.m_pObject;
  v16 = v1->m_bAlphaBlend;
  if ( !v15->m_pkRenderStateGroup )
    v15->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v15->m_pkRenderStateGroup, 0x1Bu, v16, 0);
  v17 = v1->m_spPassOne.m_pObject;
  if ( !v17->m_pkRenderStateGroup )
    v17->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v17->m_pkRenderStateGroup, 0x13u, 5u, 0);
  v18 = v1->m_spPassOne.m_pObject;
  if ( !v18->m_pkRenderStateGroup )
    v18->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v18->m_pkRenderStateGroup, 0x14u, 6u, 0);
  v19 = v1->m_spPassOne.m_pObject;
  if ( !v19->m_pkRenderStateGroup )
    v19->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v19->m_pkRenderStateGroup, 0x1Cu, 0, 0);
  v20 = v1->m_spPassOne.m_pObject;
  if ( !v20->m_pkRenderStateGroup )
    v20->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v20->m_pkRenderStateGroup, 0x89u, 0, 0);
  v21 = v1->m_spPassOne.m_pObject;
  if ( !v21->m_pkRenderStateGroup )
    v21->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v21->m_pkRenderStateGroup, 0xFu, 1u, 0);
  v22 = v1->m_spPassOne.m_pObject;
  if ( !v22->m_pkRenderStateGroup )
    v22->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v22->m_pkRenderStateGroup, 0x19u, 7u, 0);
  v23 = v1->m_spPassOne.m_pObject;
  if ( !v23->m_pkRenderStateGroup )
    v23->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v23->m_pkRenderStateGroup, 0x18u, 0, 0);
  v24 = spStage2.m_pObject;
  LOBYTE(v30) = 0;
  if ( spStage2.m_pObject )
  {
    --spStage2.m_pObject->m_uiRefCount;
    if ( !v24->m_uiRefCount )
      NiD3DTextureStage::ReturnStageToPool(v24);
  }
  v25 = spStage.m_pObject;
  v30 = -1;
  if ( spStage.m_pObject )
  {
    --spStage.m_pObject->m_uiRefCount;
    if ( !v25->m_uiRefCount )
      NiD3DTextureStage::ReturnStageToPool(v25);
  }
  return 1;
}

//----- (0044D320) --------------------------------------------------------
LONG __cdecl MaskShader::Terminate()
{
  LONG result; // eax@1
  int v1; // esi@2
  int v2; // esi@6

  result = MaskShader::m_spShader;
  if ( MaskShader::m_spShader )
  {
    v1 = MaskShader::m_spShader;
    result = InterlockedDecrement((volatile LONG *)(MaskShader::m_spShader + 4));
    if ( !result && v1 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    MaskShader::m_spShader = 0;
  }
  v2 = MaskShader::m_spNoAlphaBlendShader;
  if ( MaskShader::m_spNoAlphaBlendShader )
  {
    result = InterlockedDecrement((volatile LONG *)(MaskShader::m_spNoAlphaBlendShader + 4));
    if ( !result )
    {
      if ( v2 )
        result = (**(int (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    }
    MaskShader::m_spNoAlphaBlendShader = 0;
  }
  return result;
}
// A97668: using guessed type int MaskShader__m_spShader;
// A9766C: using guessed type int MaskShader__m_spNoAlphaBlendShader;

//----- (0044D390) --------------------------------------------------------
void __thiscall MaskShader::MaskShader(MaskShader *this, bool bEnableAlphaBlend)
{
  MaskShader *v2; // esi@1
  char *v3; // [sp-14h] [bp-24h]@2

  v2 = this;
  NiD3DDefaultShader::NiD3DDefaultShader(&this->baseclass_0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MaskShader::_vftable_;
  v2->m_spPassOne.m_pObject = 0;
  v2->m_uiLinePassNum = 0;
  v2->m_bAlphaBlend = bEnableAlphaBlend;
  if ( bEnableAlphaBlend )
    v3 = "SHPortrait";
  else
    v3 = "SHPortrait22";
  NiShader::SetName((NiShaderLibrary *)v2, v3);
  MaskShader::CreateStagesAndPasses(v2);
  v2->m_bAlphaBlend = bEnableAlphaBlend;
}
// 9836CC: using guessed type int (__thiscall *MaskShader___vftable_)(void *p, char);

//----- (0044D440) --------------------------------------------------------
unsigned int __thiscall MaskShader::UpdatePipeline(MaskShader *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound)
{
  MaskShader *v8; // esi@1
  NiD3DPass **v9; // edi@3
  NiProperty *v10; // ebx@3
  NiD3DTextureStage *v11; // eax@3
  NiD3DTextureStage *v12; // esi@3
  NiD3DTextureStage *v13; // eax@5
  void *v14; // edi@5
  NiRefObjectVtbl *v15; // eax@8
  void *(__thiscall *v16)(NiRefObject *, unsigned int); // ebx@9
  NiTexture *v17; // edi@11
  unsigned int v18; // eax@18
  NiExtraData *v19; // eax@21
  NiRefObjectVtbl *v20; // eax@22
  bool v21; // zf@24
  NiProperty *pkTexProp; // [sp+4h] [bp-10h]@3
  NiTexturingProperty::Map *spStage2; // [sp+28h] [bp+14h]@5

  v8 = this;
  if ( !this->baseclass_0.baseclass_0.m_kPasses.m_uiMaxSize )
    NiTArray<NiPointer<NiD3DPass>>::SetSize(
      &this->baseclass_0.baseclass_0.m_kPasses,
      this->baseclass_0.baseclass_0.m_kPasses.m_uiGrowBy);
  v9 = (NiD3DPass **)&v8->m_spPassOne;
  NiTArray<NiPointer<NiD3DPass>>::SetAt(&v8->baseclass_0.baseclass_0.m_kPasses, 0, &v8->m_spPassOne);
  v8->baseclass_0.baseclass_0.m_uiPassCount = 1;
  v10 = pkState->m_aspProps[8].m_pObject;
  pkTexProp = pkState->m_aspProps[8].m_pObject;
  v11 = NiD3DPass::GetStage(v8->m_spPassOne.m_pObject, 0);
  v12 = v11;
  if ( v11 )
    ++v11->m_uiRefCount;
  v13 = NiD3DPass::GetStage(*v9, 1u);
  v14 = v13;
  spStage2 = (NiTexturingProperty::Map *)v13;
  if ( v13 )
    ++v13->m_uiRefCount;
  if ( v10 )
  {
    v15 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
    if ( v15 )
      v16 = v15[1].__vecDelDtor;
    else
      v16 = 0;
    v17 = v12->m_spTexture.m_pObject;
    if ( (char *)v17 != (char *)v16 )
    {
      if ( v17 && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v17 )
        v17->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
      v12->m_spTexture.m_pObject = (NiTexture *)v16;
      if ( v16 )
        InterlockedIncrement((volatile LONG *)v16 + 1);
    }
    v18 = pkTexProp[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.m_uiRefCount;
    if ( v18 )
      NiD3DTextureStage::SetTexture(spStage2, *(NiTexture **)(v18 + 4));
    v14 = spStage2;
  }
  v12->m_kTextureTransformation.___u0._s0._11 = 1.0;
  v12->m_kTextureTransformation.___u0._s0._21 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._31 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._41 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._12 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._32 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._42 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._13 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._23 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._43 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._14 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._24 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._34 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._22 = 1.0;
  v12->m_kTextureTransformation.___u0._s0._33 = 1.0;
  v12->m_kTextureTransformation.___u0._s0._44 = 1.0;
  v19 = NiObjectNET::GetExtraData(&pkGeometry->baseclass_0.baseclass_0, "*texmat");
  if ( v19 )
  {
    v20 = v19[1].baseclass_0.baseclass_0.vfptr;
    v12->m_kTextureTransformation.___u0._s0._11 = *(float *)&v20[2].__vecDelDtor;
    v12->m_kTextureTransformation.___u0._s0._22 = *(float *)&v20[3].__vecDelDtor;
    v12->m_kTextureTransformation.___u0._s0._31 = *(float *)&v20->__vecDelDtor;
    v12->m_kTextureTransformation.___u0._s0._32 = *(float *)&v20[1].__vecDelDtor;
  }
  if ( v14 )
  {
    v21 = (*((_DWORD *)v14 + 23))-- == 1;
    if ( v21 )
      NiD3DTextureStage::ReturnStageToPool((NiD3DTextureStage *)v14);
  }
  if ( v12 )
  {
    v21 = v12->m_uiRefCount-- == 1;
    if ( v21 )
      NiD3DTextureStage::ReturnStageToPool(v12);
  }
  return 1;
}

//----- (0044D5E0) --------------------------------------------------------
MaskShader *__cdecl MaskShader::GetShader()
{
  MaskShader *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2
  int v3; // edi@7

  result = (MaskShader *)MaskShader::m_spShader;
  if ( !MaskShader::m_spShader )
  {
    v1 = operator new(0x120u);
    v2 = (int)v1;
    if ( v1 )
    {
      NiD3DDefaultShader::NiD3DDefaultShader((NiD3DDefaultShader *)v1);
      *(_DWORD *)v2 = &MaskShader::_vftable_;
      *(_DWORD *)(v2 + 276) = 0;
      *(_DWORD *)(v2 + 280) = 0;
      *(_BYTE *)(v2 + 284) = 1;
      NiShader::SetName((NiShaderLibrary *)v2, "SHPortrait");
      MaskShader::CreateStagesAndPasses((MaskShader *)v2);
      *(_BYTE *)(v2 + 284) = 1;
    }
    else
    {
      v2 = 0;
    }
    result = (MaskShader *)MaskShader::m_spShader;
    if ( MaskShader::m_spShader != v2 )
    {
      if ( MaskShader::m_spShader )
      {
        v3 = MaskShader::m_spShader;
        if ( !InterlockedDecrement((volatile LONG *)(MaskShader::m_spShader + 4)) )
        {
          if ( v3 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
        }
      }
      result = (MaskShader *)v2;
      MaskShader::m_spShader = v2;
      if ( v2 )
      {
        InterlockedIncrement((volatile LONG *)(v2 + 4));
        result = (MaskShader *)MaskShader::m_spShader;
      }
    }
  }
  return result;
}
// 9836CC: using guessed type int (__thiscall *MaskShader___vftable_)(void *p, char);
// A97668: using guessed type int MaskShader__m_spShader;

//----- (0044D6F0) --------------------------------------------------------
MaskShader *__cdecl MaskShader::GetShader_NoAlphaBlend()
{
  MaskShader *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2
  int v3; // edi@7

  result = (MaskShader *)MaskShader::m_spNoAlphaBlendShader;
  if ( !MaskShader::m_spNoAlphaBlendShader )
  {
    v1 = operator new(0x120u);
    v2 = (int)v1;
    if ( v1 )
    {
      NiD3DDefaultShader::NiD3DDefaultShader((NiD3DDefaultShader *)v1);
      *(_DWORD *)v2 = &MaskShader::_vftable_;
      *(_DWORD *)(v2 + 276) = 0;
      *(_DWORD *)(v2 + 280) = 0;
      *(_BYTE *)(v2 + 284) = 0;
      NiShader::SetName((NiShaderLibrary *)v2, "SHPortrait22");
      MaskShader::CreateStagesAndPasses((MaskShader *)v2);
      *(_BYTE *)(v2 + 284) = 0;
      *(_DWORD *)v2 = &MaskShader_NoAlphaBlend::_vftable_;
    }
    else
    {
      v2 = 0;
    }
    result = (MaskShader *)MaskShader::m_spNoAlphaBlendShader;
    if ( MaskShader::m_spNoAlphaBlendShader != v2 )
    {
      if ( MaskShader::m_spNoAlphaBlendShader )
      {
        v3 = MaskShader::m_spNoAlphaBlendShader;
        if ( !InterlockedDecrement((volatile LONG *)(MaskShader::m_spNoAlphaBlendShader + 4)) )
        {
          if ( v3 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
        }
      }
      result = (MaskShader *)v2;
      MaskShader::m_spNoAlphaBlendShader = v2;
      if ( v2 )
      {
        InterlockedIncrement((volatile LONG *)(v2 + 4));
        result = (MaskShader *)MaskShader::m_spNoAlphaBlendShader;
      }
    }
  }
  return result;
}
// 9836CC: using guessed type int (__thiscall *MaskShader___vftable_)(void *p, char);
// 983744: using guessed type int (__thiscall *MaskShader_NoAlphaBlend___vftable_)(void *p, char);
// A9766C: using guessed type int MaskShader__m_spNoAlphaBlendShader;

//----- (0044D800) --------------------------------------------------------
void __thiscall NiPointer<NiD3DTextureStage>::_NiPointer<NiD3DTextureStage>(NiPointer<NiD3DTextureStage> *this)
{
  NiD3DTextureStage *v1; // ecx@1
  bool v2; // zf@2

  v1 = this->m_pObject;
  if ( v1 )
  {
    v2 = v1->m_uiRefCount-- == 1;
    if ( v2 )
      NiD3DTextureStage::ReturnStageToPool(v1);
  }
}

//----- (0044D820) --------------------------------------------------------
void __thiscall NiPointer<NiD3DPass>::_NiPointer<NiD3DPass>(NiPointer<NiD3DPass> *this)
{
  NiD3DPass *v1; // ecx@1
  bool v2; // zf@2

  v1 = this->m_pObject;
  if ( v1 )
  {
    v2 = v1->m_uiRefCount-- == 1;
    if ( v2 )
      NiD3DPass::ReturnPassToPool(v1);
  }
}

//----- (0044D840) --------------------------------------------------------
void __thiscall NiTArray<NiPointer<NiD3DPass>>::SetSize(NiTArray<NiPointer<NiD3DPass> > *this, unsigned int uiMaxSize)
{
  NiTArray<NiPointer<NiD3DPass> > *v2; // esi@1
  int v3; // ebx@1
  unsigned int v4; // edx@3
  int v5; // edi@4
  int v6; // ecx@5
  bool v7; // zf@6
  void *v8; // eax@12
  int v9; // ecx@13
  void *v10; // eax@13
  int v11; // edi@14
  unsigned int v12; // eax@16
  signed int v13; // edx@16
  NiPointer<NiD3DPass> *v14; // edi@17
  int v15; // ebx@17
  NiD3DPass *v16; // ecx@17
  int v17; // edi@17
  int v18; // ebx@21
  unsigned int j; // edi@25
  NiPointer<NiD3DPass> *v20; // eax@26
  NiD3DPass *v21; // ecx@26
  int v22; // ebx@26
  void *v23; // esi@33
  void *pSaveBase; // [sp+0h] [bp-10h]@12
  unsigned int i; // [sp+18h] [bp+8h]@16

  v2 = this;
  v3 = uiMaxSize;
  if ( uiMaxSize != this->m_uiMaxSize )
  {
    if ( uiMaxSize < this->m_uiSize )
    {
      v4 = uiMaxSize;
      do
      {
        v5 = (int)&v2->m_pBase[v4];
        if ( *(_DWORD *)v5 )
        {
          v6 = *(_DWORD *)v5;
          if ( *(_DWORD *)v5 )
          {
            v7 = (*(_DWORD *)(v6 + 104))-- == 1;
            if ( v7 )
            {
              NiD3DPass::ReturnPassToPool((NiD3DPass *)v6);
              v4 = uiMaxSize;
            }
            *(_DWORD *)v5 = 0;
          }
          --v2->m_uiESize;
        }
        ++v4;
        uiMaxSize = v4;
      }
      while ( v4 < v2->m_uiSize );
      v2->m_uiSize = v3;
    }
    v8 = v2->m_pBase;
    pSaveBase = v2->m_pBase;
    v2->m_uiMaxSize = v3;
    if ( v3 )
    {
      v9 = 4 * v3 | -((unsigned __int64)(unsigned int)v3 >> 30 != 0);
      v10 = operator new__((v9 + 4) | -__CFADD__(v9, 4));
      if ( v10 )
      {
        v11 = (int)((char *)v10 + 4);
        *(_DWORD *)v10 = v3;
        _eh_vector_constructor_iterator_(
          (char *)v10 + 4,
          4u,
          v3,
          (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
          (void (__thiscall *)(void *))NiPointer<NiD3DPass>::_NiPointer<NiD3DPass>);
      }
      else
      {
        v11 = 0;
      }
      v12 = 0;
      v13 = -1;
      v2->m_pBase = (NiPointer<NiD3DPass> *)v11;
      i = 0;
      if ( v2->m_uiSize )
      {
        do
        {
          v14 = v2->m_pBase;
          v15 = 4 * v12;
          v16 = v14[v12].m_pObject;
          v17 = (int)&v14[v12];
          if ( v16 != *((NiD3DPass **)pSaveBase + v12) )
          {
            if ( v16 )
            {
              v7 = v16->m_uiRefCount-- == 1;
              if ( v7 )
              {
                NiD3DPass::ReturnPassToPool(v16);
                v12 = i;
              }
            }
            v18 = *(_DWORD *)((char *)pSaveBase + v15);
            *(_DWORD *)v17 = v18;
            if ( v18 )
              ++*(_DWORD *)(v18 + 104);
          }
          ++v12;
          i = v12;
        }
        while ( v12 < v2->m_uiSize );
        v13 = -1;
      }
      for ( j = v2->m_uiSize; j < v2->m_uiMaxSize; ++j )
      {
        v20 = v2->m_pBase;
        v21 = v20[j].m_pObject;
        v22 = (int)&v20[j];
        if ( v21 )
        {
          v7 = v13 + v21->m_uiRefCount == 0;
          v21->m_uiRefCount += v13;
          if ( v7 )
            NiD3DPass::ReturnPassToPool(v21);
          *(_DWORD *)v22 = 0;
          v13 = -1;
        }
      }
      v8 = pSaveBase;
    }
    else
    {
      v2->m_pBase = 0;
    }
    if ( v8 )
    {
      v23 = (char *)v8 - 4;
      _eh_vector_destructor_iterator_(
        v8,
        4u,
        *((_DWORD *)v8 - 1),
        (void (__thiscall *)(void *))NiPointer<NiD3DPass>::_NiPointer<NiD3DPass>);
      operator delete__(v23);
    }
  }
}

//----- (0044DA10) --------------------------------------------------------
void __thiscall NiTArray<NiPointer<NiD3DPass>>::SetAt(NiTArray<NiPointer<NiD3DPass> > *this, unsigned int uiIndex, NiPointer<NiD3DPass> *element)
{
  NiPointer<NiD3DPass> *v3; // edx@5
  NiPointer<NiD3DPass> *v4; // esi@10
  NiD3DPass *v5; // ecx@10
  bool v6; // zf@12
  NiD3DPass *v7; // eax@14

  if ( uiIndex < this->m_uiMaxSize )
  {
    if ( uiIndex < this->m_uiSize )
    {
      v3 = this->m_pBase;
      if ( element->m_pObject )
      {
        if ( v3[uiIndex].m_pObject == 0 )
          ++this->m_uiESize;
      }
      else
      {
        if ( v3[uiIndex].m_pObject != 0 )
          --this->m_uiESize;
      }
    }
    else
    {
      this->m_uiSize = uiIndex + 1;
      if ( element->m_pObject )
        ++this->m_uiESize;
    }
    v4 = &this->m_pBase[uiIndex];
    v5 = v4->m_pObject;
    if ( v4->m_pObject != element->m_pObject )
    {
      if ( v5 )
      {
        v6 = v5->m_uiRefCount-- == 1;
        if ( v6 )
          NiD3DPass::ReturnPassToPool(v5);
      }
      v7 = element->m_pObject;
      v4->m_pObject = element->m_pObject;
      if ( v7 )
        ++v7->m_uiRefCount;
    }
  }
}

//----- (0044DA90) --------------------------------------------------------
NiD3DTextureStage *__thiscall NiD3DPass::GetStage(NiD3DPass *this, unsigned int uiStageNum)
{
  NiD3DTextureStage *v2; // esi@2
  NiD3DTextureStage *v3; // ecx@4
  char v4; // bl@4
  bool v5; // zf@8
  NiD3DTextureStage *uiStageNuma; // [sp+18h] [bp+8h]@2

  if ( uiStageNum >= this->m_kStages.m_uiSize )
  {
    v3 = 0;
    uiStageNuma = 0;
    v2 = 0;
    v4 = 2;
  }
  else
  {
    v2 = this->m_kStages.m_pBase[uiStageNum].m_pObject;
    uiStageNuma = v2;
    if ( v2 )
      ++v2->m_uiRefCount;
    v3 = v2;
    v4 = 1;
  }
  if ( v4 & 2 )
  {
    v4 &= 0xFDu;
    if ( v3 )
    {
      v5 = v3->m_uiRefCount-- == 1;
      if ( v5 )
        NiD3DTextureStage::ReturnStageToPool(v3);
    }
  }
  if ( v4 & 1 )
  {
    if ( v2 )
    {
      v5 = v2->m_uiRefCount-- == 1;
      if ( v5 )
        NiD3DTextureStage::ReturnStageToPool(v2);
    }
  }
  return uiStageNuma;
}

//----- (0044DB40) --------------------------------------------------------
NiRTTI *__thiscall MaskShader::GetRTTI(MaskShader *this)
{
  return &MaskShader::m_RTTI;
}

//----- (0044DB50) --------------------------------------------------------
NiRTTI *__thiscall MaskShader_NoAlphaBlend::GetRTTI(MaskShader_NoAlphaBlend *this)
{
  return &MaskShader_NoAlphaBlend::m_RTTI;
}

//----- (0044DB60) --------------------------------------------------------
void *__thiscall MaskShader_NoAlphaBlend::_scalar_deleting_destructor_(MaskShader_NoAlphaBlend *this, unsigned int a2)
{
  MaskShader_NoAlphaBlend *v2; // esi@1
  NiD3DPass *v3; // ecx@1
  bool v4; // zf@2
  NiD3DPass *v5; // ecx@5

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MaskShader::_vftable_;
  v3 = this->baseclass_0.m_spPassOne.m_pObject;
  if ( v3 )
  {
    v4 = v3->m_uiRefCount-- == 1;
    if ( v4 )
      NiD3DPass::ReturnPassToPool(v3);
    v2->baseclass_0.m_spPassOne.m_pObject = 0;
  }
  v5 = v2->baseclass_0.m_spPassOne.m_pObject;
  if ( v5 )
  {
    v4 = v5->m_uiRefCount-- == 1;
    if ( v4 )
      NiD3DPass::ReturnPassToPool(v5);
  }
  NiD3DDefaultShader::_NiD3DDefaultShader(&v2->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9836CC: using guessed type int (__thiscall *MaskShader___vftable_)(void *p, char);

//----- (0044DC00) --------------------------------------------------------
void __thiscall MsgBox::SetFrameWorkMsgOnClose(MsgBox *this, PgFrameWork *pkFrameWork, PgMsg::Frame *pkFrameMsg, PgMsg::Frame *pkFrameCancelMsg)
{
  MsgBox *v4; // esi@1

  v4 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(pkFrameWork);
  if ( pkFrameMsg )
  {
    v4->m_kFrameMsg.m_uiDumy[0] = pkFrameMsg->m_uiDumy[0];
    v4->m_kFrameMsg.m_uiDumy[1] = pkFrameMsg->m_uiDumy[1];
    v4->m_kFrameMsg.m_uiFrameMsg = pkFrameMsg->m_uiFrameMsg;
    v4->m_kFrameMsg.m_uiFrameWParam = pkFrameMsg->m_uiFrameWParam;
    v4->m_kFrameMsg.m_uiFramelParam = pkFrameMsg->m_uiFramelParam;
  }
  if ( pkFrameCancelMsg )
  {
    v4->m_kFrameCancelMsg.m_uiDumy[0] = pkFrameCancelMsg->m_uiDumy[0];
    v4->m_kFrameCancelMsg.m_uiDumy[1] = pkFrameCancelMsg->m_uiDumy[1];
    v4->m_kFrameCancelMsg.m_uiFrameMsg = pkFrameCancelMsg->m_uiFrameMsg;
    v4->m_kFrameCancelMsg.m_uiFrameWParam = pkFrameCancelMsg->m_uiFrameWParam;
    v4->m_kFrameCancelMsg.m_uiFramelParam = pkFrameCancelMsg->m_uiFramelParam;
  }
}

//----- (0044DC90) --------------------------------------------------------
void __thiscall MsgBox::SetFrameWorkMsgOnPrivateStore(MsgBox *this, PgFrameWork *pkFrameWork, PgMsg::Frame *pkFrameMsg, PgMsg::Frame *pkFrameCancelMsg, PgMsg::Frame *pkFrameSearchMsg, PgMsg::Frame *pkFrameCloseMsg)
{
  MsgBox *v6; // esi@1

  v6 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(pkFrameWork);
  if ( pkFrameMsg )
  {
    v6->m_kFrameMsg.m_uiDumy[0] = pkFrameMsg->m_uiDumy[0];
    v6->m_kFrameMsg.m_uiDumy[1] = pkFrameMsg->m_uiDumy[1];
    v6->m_kFrameMsg.m_uiFrameMsg = pkFrameMsg->m_uiFrameMsg;
    v6->m_kFrameMsg.m_uiFrameWParam = pkFrameMsg->m_uiFrameWParam;
    v6->m_kFrameMsg.m_uiFramelParam = pkFrameMsg->m_uiFramelParam;
  }
  if ( pkFrameCancelMsg )
  {
    v6->m_kFrameCancelMsg.m_uiDumy[0] = pkFrameCancelMsg->m_uiDumy[0];
    v6->m_kFrameCancelMsg.m_uiDumy[1] = pkFrameCancelMsg->m_uiDumy[1];
    v6->m_kFrameCancelMsg.m_uiFrameMsg = pkFrameCancelMsg->m_uiFrameMsg;
    v6->m_kFrameCancelMsg.m_uiFrameWParam = pkFrameCancelMsg->m_uiFrameWParam;
    v6->m_kFrameCancelMsg.m_uiFramelParam = pkFrameCancelMsg->m_uiFramelParam;
  }
  if ( pkFrameSearchMsg )
  {
    v6->m_kFrameSearchMsg.m_uiDumy[0] = pkFrameSearchMsg->m_uiDumy[0];
    v6->m_kFrameSearchMsg.m_uiDumy[1] = pkFrameSearchMsg->m_uiDumy[1];
    v6->m_kFrameSearchMsg.m_uiFrameMsg = pkFrameSearchMsg->m_uiFrameMsg;
    v6->m_kFrameSearchMsg.m_uiFrameWParam = pkFrameSearchMsg->m_uiFrameWParam;
    v6->m_kFrameSearchMsg.m_uiFramelParam = pkFrameSearchMsg->m_uiFramelParam;
  }
  if ( pkFrameCloseMsg )
  {
    v6->m_kFrameCloseMsg.m_uiDumy[0] = pkFrameCloseMsg->m_uiDumy[0];
    v6->m_kFrameCloseMsg.m_uiDumy[1] = pkFrameCloseMsg->m_uiDumy[1];
    v6->m_kFrameCloseMsg.m_uiFrameMsg = pkFrameCloseMsg->m_uiFrameMsg;
    v6->m_kFrameCloseMsg.m_uiFrameWParam = pkFrameCloseMsg->m_uiFrameWParam;
    v6->m_kFrameCloseMsg.m_uiFramelParam = pkFrameCloseMsg->m_uiFramelParam;
  }
}

//----- (0044DD80) --------------------------------------------------------
void __thiscall MsgBox::SetWindowMsgOnClose(MsgBox *this, PgWin *pkRevMsgWin, unsigned int uiOkMsg, unsigned int wOkParam, int lOkParam, unsigned int uiCancelMsg, unsigned int wCancelParam, int lCancelParam)
{
  this->m_pkRevMsgWinOnClose = pkRevMsgWin;
  this->m_uiOkMsg = uiOkMsg;
  this->m_wOkParam = wOkParam;
  this->m_lOkParam = lOkParam;
  this->m_uiCancelMsg = uiCancelMsg;
  this->m_wCancelParam = wCancelParam;
  this->m_lCancelParam = lCancelParam;
}

//----- (0044DDD0) --------------------------------------------------------
void __thiscall MsgBox::SetItemIconByID(MsgBox *this, unsigned __int16 nID)
{
  ItemIcon *v2; // ecx@1

  v2 = this->m_pkItemSlotWin;
  if ( v2 )
    ItemIcon::SetItemAsID(v2, nID);
}

//----- (0044DDF0) --------------------------------------------------------
void __thiscall MsgBox::SetUnderSlotText(MsgBox *this, char *pkText)
{
  ((void (__stdcall *)(_DWORD))this->m_pkUnderSlotTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkText);
}

//----- (0044DE10) --------------------------------------------------------
void __thiscall MsgBox::OnCmdBut1(MsgBox *this)
{
  MsgBox *v1; // esi@1
  PgFrameWork *v2; // ecx@1
  PgWin *v3; // ecx@3
  unsigned int v4; // eax@4
  bool v5; // zf@6
  DirectUserMsgBody_MsgBoxResponse kBody; // [sp+8h] [bp-4h]@6

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  if ( v2 )
  {
    PgFrameWork::AddMsg(
      v2,
      v1->m_kFrameMsg.m_uiFrameMsg,
      v1->m_kFrameMsg.m_uiFrameWParam,
      v1->m_kFrameMsg.m_uiFramelParam);
  }
  else
  {
    v3 = v1->m_pkRevMsgWinOnClose;
    if ( v3 )
    {
      v4 = v1->m_uiOkMsg;
      if ( v4 )
        PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v3, v4, v1->m_wOkParam, v1->m_lOkParam);
    }
  }
  v5 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  kBody.eResponse = 0;
  if ( !v5 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      27,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        27,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    27,
    &kBody,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  MsgBox::m_bOkCheck = 1;
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
}
// A97678: using guessed type bool MsgBox__m_bOkCheck;

//----- (0044DEE0) --------------------------------------------------------
void __thiscall MsgBox::OnCmdBut2(MsgBox *this)
{
  MsgBox *v1; // esi@1
  PgFrameWork *v2; // ecx@1
  PgWin *v3; // ecx@3
  unsigned int v4; // eax@4
  bool v5; // zf@6
  DirectUserMsgBody_MsgBoxResponse kBody; // [sp+8h] [bp-4h]@6

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  if ( v2 )
  {
    PgFrameWork::AddMsg(
      v2,
      v1->m_kFrameCancelMsg.m_uiFrameMsg,
      v1->m_kFrameCancelMsg.m_uiFrameWParam,
      v1->m_kFrameCancelMsg.m_uiFramelParam);
  }
  else
  {
    v3 = v1->m_pkRevMsgWinOnClose;
    if ( v3 )
    {
      v4 = v1->m_uiCancelMsg;
      if ( v4 )
        PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v3, v4, v1->m_wCancelParam, v1->m_lCancelParam);
    }
  }
  v5 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  kBody.eResponse = 1;
  if ( !v5 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      27,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToChildren)(
        27,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToChildren(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    27,
    &kBody,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
}

//----- (0044DFA0) --------------------------------------------------------
void __thiscall MsgBox::OnCmdBut4(MsgBox *this)
{
  MsgBox *v1; // edi@1
  PgFrameWork *v2; // ecx@1
  bool v3; // zf@3
  DirectUserMsgBody_MsgBoxResponse kBody; // [sp+8h] [bp-4h]@3

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  if ( v2 )
    PgFrameWork::AddMsg(
      v2,
      v1->m_kFrameCloseMsg.m_uiFrameMsg,
      v1->m_kFrameCloseMsg.m_uiFrameWParam,
      v1->m_kFrameCloseMsg.m_uiFramelParam);
  v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  kBody.eResponse = 1;
  if ( !v3 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      27,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToChildren)(
        27,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToChildren(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    27,
    &kBody,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
}

//----- (0044E030) --------------------------------------------------------
void __thiscall MsgBox::ProcessMeInput(MsgBox *this, bool *bHit)
{
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    switch ( this->m_eButType )
    {
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
        MsgBox::OnCmdBut4(this);
        break;
      case 1:
        MsgBox::OnCmdBut1(this);
        break;
      default:
        return;
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (0044E0A0) --------------------------------------------------------
void __thiscall MsgBox::SetMsg(MsgBox *this, char *pcText)
{
  char *v2; // edi@1
  char *v3; // esi@1
  signed int v4; // ebx@1
  char *v5; // esi@5
  int v6; // eax@7
  int v7; // eax@7
  int v8; // ecx@7
  int v9; // edi@7
  char *v10; // esi@10
  signed int v11; // edi@10
  HDC__ *hDC; // [sp+Ch] [bp-110h]@5
  char *v13; // [sp+10h] [bp-10Ch]@1
  char *psrc; // [sp+14h] [bp-108h]@1
  char acStr[256]; // [sp+18h] [bp-104h]@7
  unsigned int v16; // [sp+118h] [bp-4h]@1
  int v17; // [sp+11Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = (char *)this->m_apkTextWin;
  psrc = pcText;
  v13 = (char *)this->m_apkTextWin;
  v3 = (char *)this->m_apkTextWin;
  v4 = 4;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v3 + 472))(&unk_9837D6);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( pcText && *pcText )
  {
    hDC = *(HDC__ **)((*(int (**)(void))(**(_DWORD **)v2 + 456))() + 192);
    v5 = v2;
    do
    {
      if ( !*psrc )
        break;
      v6 = (*(int (**)(void))(**(_DWORD **)v5 + 144))();
      v7 = PgUtil::StringPixelCopy(acStr, psrc, hDC, v6);
      v8 = *(_DWORD *)v5;
      v9 = v7;
      acStr[v7] = 0;
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 472))(acStr);
      psrc += v9;
      v2 = v13;
      ++v4;
      v5 += 4;
    }
    while ( v4 < 4 );
    if ( v4 == 1 )
    {
      (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)v2 + 488))(*(_DWORD *)v2, 1);
    }
    else
    {
      v10 = v2;
      v11 = 4;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v10 + 488))(0);
        v10 += 4;
        --v11;
      }
      while ( v11 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0044E1E0) --------------------------------------------------------
void __thiscall MsgBox::_MsgBox(MsgBox *this)
{
  MsgBox *v1; // esi@1
  PgWinText *v2; // edi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MsgBox::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MsgBox::_vftable_;
  v2 = this->m_pkUnderSlotTextWin.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_apkTextWin,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 983A28: using guessed type int (__stdcall *MsgBox___vftable_)(int uiFlags);
// 983A44: using guessed type int (__thiscall *MsgBox___vftable_)(void *p, char);

//----- (0044E280) --------------------------------------------------------
bool __thiscall MsgBox::CreateOkBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // edi@1
  PgWin *v4; // ebx@1
  PgSprData *v5; // esi@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // esi@1
  PgWin *v8; // ST14_4@1
  PgFont *v9; // ST10_4@1
  unsigned int v10; // ST0C_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // esi@1
  NiRefObjectVtbl *v13; // edi@1
  char *v14; // eax@1

  v3 = spNode;
  v4 = (PgWin *)this;
  v5 = PgSprData::Create(&spNode->baseclass_0, "BtnNor01", (int *)&spNode, (int *)&pkTexture, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick01");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver01");
  v6 = PgWinBut::CreateWin((int)spNode, (int)pkTexture, v5, v4, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData::Get(0x4F5F499Fu);
  v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  return 1;
}

//----- (0044E360) --------------------------------------------------------
bool __thiscall MsgBox::CreateOkCancelBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // edi@1
  PgWin *v4; // ebx@1
  PgSprData *v5; // esi@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // esi@1
  PgWin *v8; // ST14_4@1
  PgFont *v9; // ST10_4@1
  unsigned int v10; // ST0C_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // esi@1
  NiRefObjectVtbl *v13; // ST2C_4@1
  char *v14; // eax@1
  PgSprData *v15; // esi@1
  PgWinBut *v16; // eax@1
  PgWinBut *v17; // esi@1
  PgWin *v18; // ST14_4@1
  PgFont *v19; // ST10_4@1
  unsigned int v20; // ST0C_4@1
  unsigned int v21; // eax@1
  PgWinText *v22; // esi@1
  NiRefObjectVtbl *v23; // edi@1
  char *v24; // eax@1
  int uiLeft; // [sp+10h] [bp-4h]@1

  v3 = spNode;
  v4 = (PgWin *)this;
  v5 = PgSprData::Create(&spNode->baseclass_0, "BtnNor02", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick02");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver02");
  v6 = PgWinBut::CreateWin(uiLeft, (int)spNode, v5, v4, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData::Get(0x4F5F499Fu);
  v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  v15 = PgSprData::Create(&v3->baseclass_0, "BtnNor03", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v15, &v3->baseclass_0, "BtnClick03");
  PgSprData::Add(v15, &v3->baseclass_0, "BtnOver03");
  v16 = PgWinBut::CreateWin(uiLeft, (int)spNode, v15, v4, 2u, 0, 0);
  v17 = v16;
  v18 = (PgWin *)v16;
  v19 = Font::Get(0);
  v20 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v17);
  v21 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v17);
  v22 = PgWinText::CreateWin(0, 0, v21, v20, v19, v18, 0, 0);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v22,
    5u);
  v23 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = TextData::Get(0x88A297E1u);
  v23[118].__vecDelDtor((NiRefObject *)v22, (unsigned int)v24);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  return 1;
}

//----- (0044E500) --------------------------------------------------------
bool __thiscall MsgBox::CreateCancelBut(MsgBox *this, NiNode *pkNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // edi@1
  PgWin *v4; // ebx@1
  PgSprData *v5; // esi@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // esi@1
  PgWin *v8; // ST14_4@1
  PgFont *v9; // ST10_4@1
  unsigned int v10; // ST0C_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // esi@1
  NiRefObjectVtbl *v13; // edi@1
  char *v14; // eax@1

  v3 = pkNode;
  v4 = (PgWin *)this;
  v5 = PgSprData::Create(&pkNode->baseclass_0, "BtnNor01", (int *)&pkNode, (int *)&pkTexture, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick01");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver01");
  v6 = PgWinBut::CreateWin((int)pkNode, (int)pkTexture, v5, v4, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData::Get(0x88A297E1u);
  v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  return 1;
}

//----- (0044E5E0) --------------------------------------------------------
bool __thiscall MsgBox::CreateDenialCloseBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // edi@1
  PgWin *v4; // ebx@1
  PgSprData *v5; // esi@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // esi@1
  PgWin *v8; // ST14_4@1
  PgFont *v9; // ST10_4@1
  unsigned int v10; // ST0C_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // esi@1
  NiRefObjectVtbl *v13; // ST2C_4@1
  char *v14; // eax@1
  PgSprData *v15; // esi@1
  PgWinBut *v16; // eax@1
  PgWinBut *v17; // esi@1
  PgWin *v18; // ST14_4@1
  PgFont *v19; // ST10_4@1
  unsigned int v20; // ST0C_4@1
  unsigned int v21; // eax@1
  PgWinText *v22; // esi@1
  NiRefObjectVtbl *v23; // edi@1
  char *v24; // eax@1
  int uiLeft; // [sp+10h] [bp-4h]@1

  v3 = spNode;
  v4 = (PgWin *)this;
  v5 = PgSprData::Create(&spNode->baseclass_0, "BtnNor02", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick02");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver02");
  v6 = PgWinBut::CreateWin(uiLeft, (int)spNode, v5, v4, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData::Get(0x92C1BAABu);
  v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  v15 = PgSprData::Create(&v3->baseclass_0, "BtnNor03", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v15, &v3->baseclass_0, "BtnClick03");
  PgSprData::Add(v15, &v3->baseclass_0, "BtnOver03");
  v16 = PgWinBut::CreateWin(uiLeft, (int)spNode, v15, v4, 2u, 0, 0);
  v17 = v16;
  v18 = (PgWin *)v16;
  v19 = Font::Get(0);
  v20 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v17);
  v21 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v17);
  v22 = PgWinText::CreateWin(0, 0, v21, v20, v19, v18, 0, 0);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v22,
    5u);
  v23 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = TextData::Get(0x9AE7FBE7u);
  v23[118].__vecDelDtor((NiRefObject *)v22, (unsigned int)v24);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  return 1;
}

//----- (0044E780) --------------------------------------------------------
bool __thiscall MsgBox::CreatePrivateStoreBut(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // esi@1
  PgWin *v4; // ebx@1
  PgSprData *v5; // edi@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // edi@1
  PgWin *v8; // ST14_4@1
  PgFont *v9; // ST10_4@1
  unsigned int v10; // ST0C_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // edi@1
  NiRefObjectVtbl *v13; // ST2C_4@1
  char *v14; // eax@1
  PgSprData *v15; // edi@1
  PgWinBut *v16; // eax@1
  PgWinBut *v17; // edi@1
  PgWin *v18; // ST14_4@1
  PgFont *v19; // ST10_4@1
  unsigned int v20; // ST0C_4@1
  unsigned int v21; // eax@1
  PgWinText *v22; // edi@1
  NiRefObjectVtbl *v23; // ST2C_4@1
  char *v24; // eax@1
  PgSprData *v25; // edi@1
  PgWinBut *v26; // eax@1
  PgWin *v27; // edi@1
  char *v28; // eax@1
  PgFont *v29; // ST10_4@1
  unsigned int v30; // ST0C_4@1
  unsigned int v31; // eax@1
  PgWinText *v32; // edi@1
  NiRefObjectVtbl *v33; // ST2C_4@1
  char *v34; // eax@1
  PgSprData *v35; // edi@1
  PgWinBut *v36; // eax@1
  PgWinBut *v37; // esi@1
  PgWin *v38; // ST14_4@1
  PgFont *v39; // ST10_4@1
  unsigned int v40; // ST0C_4@1
  unsigned int v41; // eax@1
  PgWinText *v42; // esi@1
  NiRefObjectVtbl *v43; // edi@1
  char *v44; // eax@1
  int uiLeft; // [sp+10h] [bp-4h]@1

  v3 = spNode;
  v4 = (PgWin *)this;
  v5 = PgSprData::Create(&spNode->baseclass_0, "BtnNor06", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick06");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver06");
  v6 = PgWinBut::CreateWin(uiLeft, (int)spNode, v5, v4, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData::Get(0x425FA2A9u);
  v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  v15 = PgSprData::Create(&v3->baseclass_0, "BtnNor07", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v15, &v3->baseclass_0, "BtnClick07");
  PgSprData::Add(v15, &v3->baseclass_0, "BtnOver07");
  v16 = PgWinBut::CreateWin(uiLeft, (int)spNode, v15, v4, 2u, 0, 0);
  v17 = v16;
  v18 = (PgWin *)v16;
  v19 = Font::Get(0);
  v20 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v17);
  v21 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v17);
  v22 = PgWinText::CreateWin(0, 0, v21, v20, v19, v18, 0, 0);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v22,
    5u);
  v23 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = TextData::Get(0x53AB9599u);
  v23[118].__vecDelDtor((NiRefObject *)v22, (unsigned int)v24);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  v25 = PgSprData::Create(&v3->baseclass_0, "BtnNor08", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v25, &v3->baseclass_0, "BtnClick08");
  PgSprData::Add(v25, &v3->baseclass_0, "BtnOver08");
  v26 = PgWinBut::CreateWin(uiLeft, (int)spNode, v25, v4, 3u, 0, 0);
  v27 = (PgWin *)v26;
  v26->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v28 = TextData3::Get(0x150C5652u);
  PgWin::SetToolTipWinText(v27, v28);
  v29 = Font::Get(0);
  v30 = ((int (__thiscall *)(PgWin *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v27);
  v31 = ((int (__thiscall *)(PgWin *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v27);
  v32 = PgWinText::CreateWin(0, 0, v31, v30, v29, v27, 0, 0);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v32,
    5u);
  v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = TextData3::Get(0xE37156Cu);
  v33[118].__vecDelDtor((NiRefObject *)v32, (unsigned int)v34);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v32,
    0);
  v35 = PgSprData::Create(&v3->baseclass_0, "BtnNor09", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v35, &v3->baseclass_0, "BtnClick09");
  PgSprData::Add(v35, &v3->baseclass_0, "BtnOver09");
  v36 = PgWinBut::CreateWin(uiLeft, (int)spNode, v35, v4, 4u, 0, 0);
  v37 = v36;
  v38 = (PgWin *)v36;
  v39 = Font::Get(0);
  v40 = ((int (__thiscall *)(PgWinBut *))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v37);
  v41 = ((int (__thiscall *)(PgWinBut *))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v37);
  v42 = PgWinText::CreateWin(0, 0, v41, v40, v39, v38, 0, 0);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v42,
    5u);
  v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData::Get(0x88A297E1u);
  v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v42,
    0);
  return 1;
}

//----- (0044EAC0) --------------------------------------------------------
bool __thiscall MsgBox::CreateAgreeRefusal(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // edi@1
  PgWin *v4; // ebx@1
  PgSprData *v5; // esi@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // esi@1
  PgWin *v8; // ST14_4@1
  PgFont *v9; // ST10_4@1
  unsigned int v10; // ST0C_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // esi@1
  NiRefObjectVtbl *v13; // ST2C_4@1
  char *v14; // eax@1
  PgSprData *v15; // esi@1
  PgWinBut *v16; // eax@1
  PgWinBut *v17; // esi@1
  PgWin *v18; // ST14_4@1
  PgFont *v19; // ST10_4@1
  unsigned int v20; // ST0C_4@1
  unsigned int v21; // eax@1
  PgWinText *v22; // esi@1
  NiRefObjectVtbl *v23; // edi@1
  char *v24; // eax@1
  int uiLeft; // [sp+10h] [bp-4h]@1

  v3 = spNode;
  v4 = (PgWin *)this;
  v5 = PgSprData::Create(&spNode->baseclass_0, "BtnNor02", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick02");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver02");
  v6 = PgWinBut::CreateWin(uiLeft, (int)spNode, v5, v4, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData::Get(0x4B512F76u);
  v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  v15 = PgSprData::Create(&v3->baseclass_0, "BtnNor03", &uiLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v15, &v3->baseclass_0, "BtnClick03");
  PgSprData::Add(v15, &v3->baseclass_0, "BtnOver03");
  v16 = PgWinBut::CreateWin(uiLeft, (int)spNode, v15, v4, 2u, 0, 0);
  v17 = v16;
  v18 = (PgWin *)v16;
  v19 = Font::Get(0);
  v20 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v17);
  v21 = ((int (__thiscall *)(PgWinBut *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v17);
  v22 = PgWinText::CreateWin(0, 0, v21, v20, v19, v18, 0, 0);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v22,
    5u);
  v23 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = TextData::Get(0x5B916E95u);
  v23[118].__vecDelDtor((NiRefObject *)v22, (unsigned int)v24);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  return 1;
}

//----- (0044EC60) --------------------------------------------------------
bool __thiscall MsgBox::CreateSearching(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // edi@1
  PgWin *v4; // ebx@1
  PgSprData *v5; // esi@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // esi@1
  PgWin *v8; // ST14_4@1
  PgFont *v9; // ST10_4@1
  unsigned int v10; // ST0C_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // esi@1
  NiRefObjectVtbl *v13; // edi@1
  char *v14; // eax@1

  v3 = spNode;
  v4 = (PgWin *)this;
  v5 = PgSprData::Create(&spNode->baseclass_0, "BtnNor01", (int *)&spNode, (int *)&pkTexture, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick01");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver01");
  v6 = PgWinBut::CreateWin((int)spNode, (int)pkTexture, v5, v4, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData3::Get(0x7C76B0C9u);
  v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  return 1;
}

//----- (0044ED70) --------------------------------------------------------
void __thiscall MsgBox::OnCmdBut3(MsgBox *this)
{
  MsgBox *v1; // esi@1
  MarketSearchWin *v2; // ecx@2
  int v3; // esi@4
  char *v4; // edi@4
  PgFrameWork *v5; // ecx@8
  PgWin *v6; // ecx@10
  unsigned int v7; // eax@11
  bool v8; // zf@13
  DirectUserMsgBody_MsgBoxResponse kBody; // [sp+8h] [bp-4h]@13

  v1 = this;
  if ( this->m_eButType != 4
    || (v2 = (MarketSearchWin *)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[141].m_kMsgQ.m_uiAlloced) == 0
    || MarketSearchWin::DelayTimeCheck(v2) )
  {
    v5 = v1->baseclass_0.m_pkFrameWork;
    if ( v5 )
    {
      PgFrameWork::AddMsg(
        v5,
        v1->m_kFrameSearchMsg.m_uiFrameMsg,
        v1->m_kFrameSearchMsg.m_uiFrameWParam,
        v1->m_kFrameSearchMsg.m_uiFramelParam);
    }
    else
    {
      v6 = v1->m_pkRevMsgWinOnClose;
      if ( v6 )
      {
        v7 = v1->m_uiCancelMsg;
        if ( v7 )
          PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v6, v7, v1->m_wCancelParam, v1->m_lCancelParam);
      }
    }
    v8 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
    kBody.eResponse = 1;
    if ( !v8 )
    {
      ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        27,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, DirectUserMsgBody_MsgBoxResponse *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToChildren)(
          27,
          &kBody,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToChildren(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      27,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  }
  else
  {
    v3 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v4 = TextData3::Get(0xE40B203Cu);
    if ( *(_DWORD *)(v3 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 4) + 4))(25, v4, v3);
      if ( *(_DWORD *)(v3 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 4) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
}

//----- (0044EEB0) --------------------------------------------------------
void __thiscall MsgBox::MsgBox(MsgBox *this)
{
  MsgBox *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MsgBox::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MsgBox::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_pkUnderSlotTextWin.m_pObject = 0;
  v1->m_pkRevMsgWinOnClose = 0;
}
// 983A28: using guessed type int (__stdcall *MsgBox___vftable_)(int uiFlags);
// 983A44: using guessed type int (__thiscall *MsgBox___vftable_)(void *p, char);

//----- (0044EF40) --------------------------------------------------------
void __thiscall MsgBox::OnCommand(MsgBox *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 1u:
      MsgBox::OnCmdBut1(this);
      break;
    case 2u:
      MsgBox::OnCmdBut2(this);
      break;
    case 3u:
      MsgBox::OnCmdBut3(this);
      break;
    case 4u:
      MsgBox::OnCmdBut4(this);
      break;
    default:
      return;
  }
}

//----- (0044EF90) --------------------------------------------------------
MsgBox *__cdecl MsgBox::CreateWin(MsgBox::ButType eBut)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MsgBox *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1E0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MsgBox::MsgBox((MsgBox *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, MsgBox::ButType))(*(_DWORD *)v3 + 540))(v3, eBut) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MsgBox *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0044F0C0) --------------------------------------------------------
MsgBox *__cdecl MsgBox::Modal(MsgBox::ButType eBut, char *pcFormat)
{
  MsgBox *result; // eax@1
  MsgBox *v3; // esi@1
  char pcText[512]; // [sp+4h] [bp-204h]@2
  unsigned int v5; // [sp+204h] [bp-4h]@1
  int v6; // [sp+208h] [bp+0h]@1
  char ap; // [sp+218h] [bp+10h]@0

  v5 = (unsigned int)&v6 ^ __security_cookie;
  result = MsgBox::CreateWin(eBut);
  v3 = result;
  if ( result )
  {
    vsprintf(pcText, pcFormat, &ap);
    MsgBox::SetMsg(v3, pcText);
    PgWinMgr::DoModal(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    result = v3;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0044F130) --------------------------------------------------------
MsgBox *__cdecl MsgBox::Modeless(MsgBox::ButType eBut, char *pcFormat)
{
  MsgBox *result; // eax@1
  MsgBox *v3; // esi@1
  char pcText[512]; // [sp+4h] [bp-204h]@2
  unsigned int v5; // [sp+204h] [bp-4h]@1
  int v6; // [sp+208h] [bp+0h]@1
  char ap; // [sp+218h] [bp+10h]@0

  v5 = (unsigned int)&v6 ^ __security_cookie;
  result = MsgBox::CreateWin(eBut);
  v3 = result;
  if ( result )
  {
    vsprintf(pcText, pcFormat, &ap);
    MsgBox::SetMsg(v3, pcText);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
    result = v3;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0044F1A0) --------------------------------------------------------
bool __thiscall MsgBox::CreateRandomOption(MsgBox *this, NiNode *spNode, NiSourceTexture *pkTexture)
{
  NiNode *v3; // edi@1
  MsgBox *v4; // esi@1
  PgSprData *v5; // ebx@1
  PgWinBut *v6; // eax@1
  PgWinBut *v7; // ebx@1
  PgWin *v8; // ST2C_4@1
  PgFont *v9; // ST28_4@1
  unsigned int v10; // ST24_4@1
  unsigned int v11; // eax@1
  PgWinText *v12; // ebx@1
  char *v13; // eax@1
  PgSprData *v14; // ebx@1
  PgWinBut *v15; // eax@1
  PgWinBut *v16; // ebx@1
  PgWin *v17; // ST2C_4@1
  PgFont *v18; // ST28_4@1
  unsigned int v19; // ST24_4@1
  unsigned int v20; // eax@1
  PgWinText *v21; // ebx@1
  char *v22; // eax@1
  PgSprData *v23; // eax@1
  ItemIcon *v24; // eax@1
  unsigned __int16 *v25; // eax@1
  bool result; // al@1
  PgFont *v27; // eax@2
  PgWinText *v28; // eax@2
  PgWinText *v29; // edi@2
  PgWinText *v30; // ebx@2
  unsigned int uiWidth; // [sp+Ch] [bp-10h]@1
  unsigned int uiHeight; // [sp+10h] [bp-Ch]@1
  NiRefObjectVtbl *v33; // [sp+14h] [bp-8h]@1
  int iLeft; // [sp+18h] [bp-4h]@1

  v3 = spNode;
  v4 = this;
  v5 = PgSprData::Create(&spNode->baseclass_0, "BtnNor02", &iLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v5, &v3->baseclass_0, "BtnClick02");
  PgSprData::Add(v5, &v3->baseclass_0, "BtnOver02");
  v6 = PgWinBut::CreateWin(iLeft, (int)spNode, v5, &v4->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v7 = v6;
  v8 = (PgWin *)v6;
  v9 = Font::Get(0);
  v10 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7);
  v11 = ((int (__thiscall *)(PgWinBut *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  v12 = PgWinText::CreateWin(0, 0, v11, v10, v9, v8, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  v33 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = TextData::Get(0x4F5F499Fu);
  v33[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v13);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  v14 = PgSprData::Create(&v3->baseclass_0, "BtnNor03", &iLeft, (int *)&spNode, pkTexture);
  PgSprData::Add(v14, &v3->baseclass_0, "BtnClick03");
  PgSprData::Add(v14, &v3->baseclass_0, "BtnOver03");
  v15 = PgWinBut::CreateWin(iLeft, (int)spNode, v14, &v4->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v16 = v15;
  v17 = (PgWin *)v15;
  v18 = Font::Get(0);
  v19 = ((int (__thiscall *)(PgWinBut *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v16);
  v20 = ((int (__thiscall *)(PgWinBut *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v16);
  v21 = PgWinText::CreateWin(0, 0, v20, v19, v18, v17, 0, 0);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v33 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v22 = TextData::Get(0x88A297E1u);
  v33[118].__vecDelDtor((NiRefObject *)v21, (unsigned int)v22);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  v23 = PgSprData::Create(&v3->baseclass_0, "ItemSlot", &iLeft, (int *)&spNode, pkTexture);
  PgWinSpr::CreateWin(iLeft, (int)spNode, v23, 0, 0, 0);
  v24 = ItemIcon::CreateWin(
          iLeft + 1,
          (int)((char *)&spNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 1),
          &v4->baseclass_0.baseclass_0.baseclass_0);
  v4->m_pkItemSlotWin = v24;
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    0);
  ((void (__stdcall *)(signed int))v4->m_pkItemSlotWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v25 = (unsigned __int16 *)ItemInfoTab::GetByInxName("RandomOption");
  ItemIcon::SetItemAsID(v4->m_pkItemSlotWin, *v25);
  v4->m_pkItemSlotWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMessageNum(
    &v4->m_pkItemSlotWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    0);
  result = PgUtil::GetTriShapeRect(&v3->baseclass_0, "Text01", &iLeft, (int *)&spNode, &uiWidth, &uiHeight);
  if ( result )
  {
    v27 = Font::Get(0);
    v28 = PgWinText::CreateWin(
            iLeft,
            (int)spNode,
            uiWidth,
            uiHeight,
            v27,
            &v4->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v29 = v4->m_pkUnderSlotTextWin.m_pObject;
    v30 = v28;
    if ( v29 != v28 )
    {
      if ( v29
        && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v29 )
        v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v29,
          1u);
      v4->m_pkUnderSlotTextWin.m_pObject = v30;
      if ( v30 )
        InterlockedIncrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(signed int))v4->m_pkUnderSlotTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    ((void (__stdcall *)(_DWORD))v4->m_pkUnderSlotTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
    v4->m_pkUnderSlotTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v4->m_pkUnderSlotTextWin.m_pObject,
      0);
    result = 1;
  }
  return result;
}

//----- (0044F4B0) --------------------------------------------------------
bool __thiscall MsgBox::Create(MsgBox *this, MsgBox::ButType eBut)
{
  MsgBox *v2; // esi@1
  void *v3; // edi@1
  bool result; // al@6
  NiTexturePalette *v5; // ebx@7
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  NiNode *v8; // esi@11
  NiSourceTexture *v9; // eax@16
  PgSprData *v10; // eax@19
  PgWinSpr *v11; // eax@19
  PgFont *v12; // eax@21
  unsigned int v13; // edi@23
  PgFont *v14; // ST10_4@23
  unsigned int v15; // ST0C_4@23
  int v16; // eax@23
  PgWinText *v17; // eax@23
  PgWinText *v18; // edi@23
  PgWinText *v19; // ebx@23
  void *(__thiscall *v20)(NiRefObject *, unsigned int); // edx@40
  NiNode *v21; // eax@40
  NiNode *v22; // esi@41
  const char *v23; // [sp+4h] [bp-48h]@17
  int *v24; // [sp+8h] [bp-44h]@17
  int *v25; // [sp+Ch] [bp-40h]@17
  NiSourceTexture *v26; // [sp+10h] [bp-3Ch]@17
  PgFont *pkFont; // [sp+24h] [bp-28h]@21
  signed int i; // [sp+28h] [bp-24h]@21
  int uiLeft; // [sp+2Ch] [bp-20h]@10
  int uiTop; // [sp+30h] [bp-1Ch]@10
  NiPointer<PgWinText> *v31; // [sp+34h] [bp-18h]@21
  NiSourceTexture *pkTexture; // [sp+38h] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+3Ch] [bp-10h]@1
  int v34; // [sp+48h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v34 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v34 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, 0, 0, 0) )
  {
    v9 = MenuTexMgr::GetTexture(0x13u);
    if ( v9 )
    {
      v26 = v9;
      v25 = &uiTop;
      v24 = &uiLeft;
      v23 = "Theme";
    }
    else
    {
      v26 = 0;
      v25 = &uiTop;
      v24 = &uiLeft;
      v23 = "Theme";
    }
    v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v23, v24, v25, v26);
    v11 = PgWinSpr::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v11,
        0);
    v12 = Font::Get(0);
    pkFont = v12;
    i = 0;
    v31 = v2->m_apkTextWin;
    while ( 1 )
    {
      v13 = v12->m_uiDefHeight;
      v14 = v12;
      v15 = v12->m_uiDefHeight;
      v16 = ((int (__thiscall *)(MsgBox *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
      v17 = PgWinText::CreateWin(
              8,
              i * (v13 + 1) + 8,
              v16 - 16,
              v15,
              v14,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v18 = v31->m_pObject;
      v19 = v17;
      if ( v31->m_pObject != v17 )
      {
        if ( v18
          && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v18 )
          v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v18,
            1u);
        v31->m_pObject = v19;
        if ( v19 )
          InterlockedIncrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      ((void (__stdcall *)(_DWORD))v31->m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ++v31;
      ++i;
      if ( i >= 4 )
        break;
      v12 = pkFont;
    }
    switch ( eBut )
    {
      case 1:
        MsgBox::CreateOkBut(v2, spNode.m_pObject, pkTexture);
        break;
      case 3:
        MsgBox::CreateCancelBut(v2, spNode.m_pObject, pkTexture);
        break;
      case 2:
        MsgBox::CreateOkCancelBut(v2, spNode.m_pObject, pkTexture);
        break;
      case 4:
        MsgBox::CreatePrivateStoreBut(v2, spNode.m_pObject, pkTexture);
        break;
      case 5:
        MsgBox::CreateDenialCloseBut(v2, spNode.m_pObject, pkTexture);
        break;
      case 6:
        MsgBox::CreateAgreeRefusal(v2, spNode.m_pObject, pkTexture);
        break;
      case 7:
        MsgBox::CreateSearching(v2, spNode.m_pObject, pkTexture);
        break;
      case 8:
        MsgBox::CreateRandomOption(v2, spNode.m_pObject, pkTexture);
        break;
      default:
        break;
    }
    v20 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
    v2->m_eButType = eBut;
    ((void (__thiscall *)(MsgBox *, unsigned int, unsigned int, _DWORD, _DWORD))v20)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v21 = spNode.m_pObject;
    v2->m_pkRevMsgWinOnClose = 0;
    v2->m_uiOkMsg = 0;
    v2->m_wOkParam = 0;
    v2->m_lOkParam = 0;
    v2->m_uiCancelMsg = 0;
    v2->m_wCancelParam = 0;
    v2->m_lCancelParam = 0;
    v34 = -1;
    if ( v21 )
    {
      v22 = v21;
      if ( !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v22 )
          v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v8 = spNode.m_pObject;
    v34 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0044F860) --------------------------------------------------------
void *__thiscall MsgBox::_scalar_deleting_destructor_(MsgBox *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MsgBox::_MsgBox(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0044F890) --------------------------------------------------------
void __thiscall PgWinProxy::OnCommand(PgWinProxy *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgWin *v4; // eax@1

  v3 = (PgWin *)this;
  v4 = PgWin::GetParentWin(&this->baseclass_0);
  if ( v4 )
    PgWin::PostCommandMsg(v3, v4, wParam, lParam);
}

//----- (0044F8C0) --------------------------------------------------------
void __thiscall PgWinProxy::OnEditEnd(PgWinProxy *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgWin *v4; // eax@1

  v3 = (PgWin *)this;
  v4 = PgWin::GetParentWin(&this->baseclass_0);
  if ( v4 )
    PgWin::PostMsg(v3, v4, 4u, wParam, lParam);
}

//----- (0044F8F0) --------------------------------------------------------
PgWinProxy *__cdecl PgWinProxy::CreateWin(PgWin *pkParent)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PgWinProxy *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x120u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWin::PgWin((PgWin *)v1);
    *(_DWORD *)v2 = &PgWinProxy::_vftable_;
    *((_DWORD *)v2 + 58) = &PgWinProxy::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, _DWORD, _DWORD, signed int, signed int, PgWin *, _DWORD, _DWORD))(*(_DWORD *)v2 + 336))(
                          v2,
                          0,
                          0,
                          1,
                          1,
                          pkParent,
                          0,
                          0) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PgWinProxy *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 983C68: using guessed type int (__stdcall *PgWinProxy___vftable_)(int uiFlags);
// 983C84: using guessed type int (__thiscall *PgWinProxy___vftable_)(void *p, char);

//----- (0044FA40) --------------------------------------------------------
PgWinProxy *__cdecl PgWinProxy::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  PgWinProxy *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x120u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWin::PgWin((PgWin *)v5);
    *(_DWORD *)v6 = &PgWinProxy::_vftable_;
    *((_DWORD *)v6 + 58) = &PgWinProxy::_vftable_;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, unsigned int, PgWin *, _DWORD, _DWORD))(*(_DWORD *)v6 + 336))(
                          v6,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          0,
                          0) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (PgWinProxy *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 983C68: using guessed type int (__stdcall *PgWinProxy___vftable_)(int uiFlags);
// 983C84: using guessed type int (__thiscall *PgWinProxy___vftable_)(void *p, char);

//----- (0044FB90) --------------------------------------------------------
void __thiscall SlideBar::SlideBar(SlideBar *this)
{
  SlideBar *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->m_nSplitCnt = 0;
  v1->m_nCurPos = 0;
  v1->m_eType = 0;
  v1->m_pkSlidePoint = 0;
  v1->m_pkSlide = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlideBar::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlideBar::_vftable_;
  v1->m_uiClickMsg = -1;
  v1->m_uiID = -1;
}
// 983E78: using guessed type int (__stdcall *SlideBar___vftable_)(int uiFlags);
// 983E94: using guessed type int (__thiscall *SlideBar___vftable_)(void *p, char);

//----- (0044FBE0) --------------------------------------------------------
void __thiscall SlideBar::_SlideBar(SlideBar *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlideBar::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlideBar::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 983E78: using guessed type int (__stdcall *SlideBar___vftable_)(int uiFlags);
// 983E94: using guessed type int (__thiscall *SlideBar___vftable_)(void *p, char);

//----- (0044FC00) --------------------------------------------------------
void __thiscall SlideBar::SetCurPos(SlideBar *this, int nPos)
{
  int v2; // eax@1
  SlideBar *v3; // esi@1
  int v4; // ecx@1
  PgWinSpr *v5; // ecx@5
  int v6; // edi@5
  int v7; // ebx@5
  SlideBar::Type v8; // ecx@7
  signed int v9; // edx@7
  signed int v10; // eax@7
  PgWinSpr *v11; // esi@11
  signed int nLeft; // [sp+Ch] [bp-8h]@5
  signed int nTop; // [sp+10h] [bp-4h]@5
  int fSplitLength; // [sp+1Ch] [bp+8h]@5
  float fSplitLengtha; // [sp+1Ch] [bp+8h]@8
  float fSplitLengthb; // [sp+1Ch] [bp+8h]@8
  float fSplitLengthc; // [sp+1Ch] [bp+8h]@10
  float fSplitLengthd; // [sp+1Ch] [bp+8h]@10

  v2 = nPos;
  v3 = this;
  v4 = this->m_nSplitCnt;
  if ( nPos >= v4 )
    v2 = v4 - 1;
  if ( v2 < 0 )
    v2 = 0;
  v5 = v3->m_pkSlide;
  v3->m_nCurPos = v2;
  nLeft = ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)();
  ((void (*)(void))v3->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[49].__vecDelDtor)();
  nTop = ((int (*)(void))v3->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[50].__vecDelDtor)();
  ((void (*)(void))v3->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[51].__vecDelDtor)();
  v6 = ((int (*)(void))v3->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v7 = ((int (*)(void))v3->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  fSplitLength = v3->m_nSplitCnt - 1;
  if ( v3->m_nSplitCnt == 1 )
    fSplitLength = 1;
  v8 = v3->m_eType;
  v9 = 0;
  v10 = 0;
  if ( v8 )
  {
    if ( v8 == 1 )
    {
      fSplitLengthc = (double)(v7
                             - ((int (*)(void))v3->m_pkSlidePoint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)())
                    / (double)fSplitLength;
      fSplitLengthd = (double)v3->m_nCurPos * fSplitLengthc;
      v10 = (signed int)(fSplitLengthd + (double)nTop);
      v9 = nLeft;
    }
  }
  else
  {
    fSplitLengtha = (double)(v6
                           - ((int (*)(void))v3->m_pkSlidePoint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)())
                  / (double)fSplitLength;
    fSplitLengthb = (double)v3->m_nCurPos * fSplitLengtha;
    v9 = (signed int)(fSplitLengthb + (double)nLeft);
    v10 = nTop;
  }
  v11 = v3->m_pkSlidePoint;
  if ( v11 )
    ((void (__thiscall *)(PgWinSpr *, signed int, signed int))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v11,
      v9,
      v10);
}

//----- (0044FD50) --------------------------------------------------------
void __thiscall SlideBar::SetSplitCnt(SlideBar *this, int nSplitCnt)
{
  int v2; // ST00_4@1

  v2 = this->m_nCurPos;
  this->m_nSplitCnt = nSplitCnt;
  SlideBar::SetCurPos(this, v2);
}

//----- (0044FD70) --------------------------------------------------------
void __thiscall SlideBar::SendMessageToParent(SlideBar *this)
{
  SlideBar *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0);
  if ( v2 )
    PgWin::SendMsg(&v1->baseclass_0, v2, 5u, v1->m_uiClickMsg, v1->m_uiID);
}

//----- (0044FDA0) --------------------------------------------------------
void __thiscall SlideBar::OnSlideBar(SlideBar *this)
{
  SlideBar *v1; // esi@1
  int v2; // edi@1
  int v3; // ebx@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // eax@2
  SlideBar::Type v5; // eax@2
  double v6; // st7@3
  int v7; // eax@7
  PgWin *v8; // eax@7
  signed int nWidth; // [sp+Ch] [bp-10h]@1
  float fSlidePos; // [sp+10h] [bp-Ch]@1
  int nPosY; // [sp+14h] [bp-8h]@2
  int nPosX; // [sp+18h] [bp-4h]@2

  v1 = this;
  v2 = ((int (*)(void))this->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)();
  ((void (*)(void))v1->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[49].__vecDelDtor)();
  v3 = ((int (*)(void))v1->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[50].__vecDelDtor)();
  ((void (*)(void))v1->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[51].__vecDelDtor)();
  nWidth = ((int (*)(void))v1->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  LODWORD(fSlidePos) = ((int (*)(void))v1->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  if ( (unsigned __int8)((int (__stdcall *)(int, int))v1->m_pkSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) )
  {
    v4 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor;
    nPosX = PgWin::ms_iMsX.x;
    nPosY = PgWin::ms_iMsY;
    ((void (__thiscall *)(SlideBar *, int *, int *))v4)(v1, &nPosX, &nPosY);
    v5 = v1->m_eType;
    if ( v5 )
    {
      if ( v5 != 1 )
        goto LABEL_7;
      v6 = (double)(nPosY - v3) / (double)SLODWORD(fSlidePos);
    }
    else
    {
      v6 = (double)(nPosX - v2) / (double)nWidth;
    }
    fSlidePos = v6;
LABEL_7:
    v7 = (signed int)((double)v1->m_nSplitCnt * fSlidePos);
    v1->m_nCurPos = v7;
    SlideBar::SetCurPos(v1, v7);
    v8 = PgWin::GetParentWin(&v1->baseclass_0);
    if ( v8 )
      PgWin::SendMsg(&v1->baseclass_0, v8, 5u, v1->m_uiClickMsg, v1->m_uiID);
  }
}

//----- (0044FEE0) --------------------------------------------------------
void __thiscall SlideBar::OnClick1(SlideBar *this)
{
  SlideBar *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  SlideBar::SetCurPos(this, this->m_nCurPos - 1);
  v2 = PgWin::GetParentWin(&v1->baseclass_0);
  if ( v2 )
    PgWin::SendMsg(&v1->baseclass_0, v2, 5u, v1->m_uiClickMsg, v1->m_uiID);
}

//----- (0044FF20) --------------------------------------------------------
void __thiscall SlideBar::OnClick2(SlideBar *this)
{
  SlideBar *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  SlideBar::SetCurPos(this, this->m_nCurPos + 1);
  v2 = PgWin::GetParentWin(&v1->baseclass_0);
  if ( v2 )
    PgWin::SendMsg(&v1->baseclass_0, v2, 5u, v1->m_uiClickMsg, v1->m_uiID);
}

//----- (0044FF60) --------------------------------------------------------
void __thiscall SlideBar::OnMouseEvent(SlideBar *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin)
{
  SlideBar *v3; // esi@1

  v3 = this;
  if ( PgWin::IsVisible(&this->baseclass_0) && (PgWinSpr *)pkWin == v3->m_pkSlide && !eMouseEvent )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)(v3) )
      SlideBar::OnSlideBar(v3);
  }
}

//----- (0044FFA0) --------------------------------------------------------
void __thiscall SlideBar::OnCommand(SlideBar *this, unsigned int wParam, int lParam)
{
  SlideBar *v3; // esi@1
  int v4; // eax@3
  PgWin *v5; // eax@5

  v3 = this;
  if ( wParam )
  {
    if ( wParam != 1 )
      return;
    v4 = this->m_nCurPos + 1;
  }
  else
  {
    v4 = this->m_nCurPos - 1;
  }
  SlideBar::SetCurPos(this, v4);
  v5 = PgWin::GetParentWin(&v3->baseclass_0);
  if ( v5 )
    PgWin::SendMsg(&v3->baseclass_0, v5, 5u, v3->m_uiClickMsg, v3->m_uiID);
}

//----- (0044FFF0) --------------------------------------------------------
bool __thiscall SlideBar::Create(SlideBar *this, NiNode *pNode, char *pName, char *pName1, char *pName2, PgSprData *pkMovePoint, unsigned int uiID, PgWin *pkParent)
{
  unsigned int v8; // ST30_4@1
  SlideBar *v9; // esi@1
  NiAVObject *v10; // eax@1
  NiProperty *v11; // eax@1
  NiRefObjectVtbl *v12; // eax@3
  PgSprData *v13; // eax@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // eax@6
  const char *v15; // eax@8
  PgSprData *v16; // ebx@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@10
  const char *v18; // eax@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v19; // eax@14
  const char *v20; // eax@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // eax@18
  const char *v22; // eax@20
  PgSprData *v23; // ebx@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v24; // eax@22
  const char *v25; // eax@24
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v26; // eax@26
  const char *v27; // eax@28
  PgWinSpr *v28; // eax@30
  NiProperty *spTexProp; // [sp+Ch] [bp-74h]@1
  NiSourceTexture *pkTexture; // [sp+10h] [bp-70h]@4
  int uiTop; // [sp+14h] [bp-6Ch]@6
  int uiLeft; // [sp+18h] [bp-68h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+1Ch] [bp-64h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+38h] [bp-48h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strResult; // [sp+54h] [bp-2Ch]@6
  unsigned int v37; // [sp+70h] [bp-10h]@1
  int v38; // [sp+7Ch] [bp-4h]@3
  int v39; // [sp+80h] [bp+0h]@1

  v37 = (unsigned int)&v39 ^ __security_cookie;
  v8 = (unsigned int)&v39 ^ __security_cookie;
  v9 = this;
  PgWin::AttachChildWin(pkParent, &this->baseclass_0);
  ((void (__thiscall *)(SlideBar *, _DWORD, unsigned int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(
    v9,
    0,
    v8);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[35].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)&unk_983E48);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[75].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    1u);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v9,
    1u);
  v9->m_uiID = uiID;
  v10 = (NiAVObject *)pNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)pNode,
                        (unsigned int)pName);
  v11 = NiAVObject::GetProperty(v10, 8);
  spTexProp = v11;
  if ( v11 )
  {
    InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v11 = spTexProp;
  }
  v12 = v11[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  v38 = 0;
  if ( v12 )
    pkTexture = (NiSourceTexture *)v12[1].__vecDelDtor;
  else
    pkTexture = 0;
  v13 = PgSprData::Create(&pNode->baseclass_0, pName, &uiLeft, &uiTop, pkTexture);
  v9->m_pkSlide = PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v9->baseclass_0, 0, 0);
  strResult.baseclass_0._Myres = 15;
  strResult.baseclass_0._Mysize = 0;
  strResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v38) = 2;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, pName1, strlen(pName1));
  v14 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &strName, "Nor");
  LOBYTE(v38) = 3;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strResult, v14);
  LOBYTE(v38) = 2;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v15 = *(const char **)&strResult;
  if ( strResult.baseclass_0._Myres < 0x10 )
    v15 = (const char *)&strResult;
  v16 = PgSprData::Create(&pNode->baseclass_0, v15, &uiLeft, &uiTop, pkTexture);
  v17 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &strName, "Click");
  LOBYTE(v38) = 4;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strResult, v17);
  LOBYTE(v38) = 2;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v18 = *(const char **)&strResult;
  if ( strResult.baseclass_0._Myres < 0x10 )
    v18 = (const char *)&strResult;
  PgSprData::Add(v16, &pNode->baseclass_0, v18);
  v19 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &strName, "Over");
  LOBYTE(v38) = 5;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strResult, v19);
  LOBYTE(v38) = 2;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v20 = *(const char **)&strResult;
  if ( strResult.baseclass_0._Myres < 0x10 )
    v20 = (const char *)&strResult;
  PgSprData::Add(v16, &pNode->baseclass_0, v20);
  PgWinBut::CreateWin(uiLeft, uiTop, v16, &v9->baseclass_0, 0, 0, 0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, pName2, strlen(pName2));
  v21 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &strName, "Nor");
  LOBYTE(v38) = 6;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strResult, v21);
  LOBYTE(v38) = 2;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v22 = *(const char **)&strResult;
  if ( strResult.baseclass_0._Myres < 0x10 )
    v22 = (const char *)&strResult;
  v23 = PgSprData::Create(&pNode->baseclass_0, v22, &uiLeft, &uiTop, pkTexture);
  v24 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &strName, "Click");
  LOBYTE(v38) = 7;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strResult, v24);
  LOBYTE(v38) = 2;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v25 = *(const char **)&strResult;
  if ( strResult.baseclass_0._Myres < 0x10 )
    v25 = (const char *)&strResult;
  PgSprData::Add(v23, &pNode->baseclass_0, v25);
  v26 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &strName, "Over");
  LOBYTE(v38) = 8;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strResult, v26);
  LOBYTE(v38) = 2;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v27 = *(const char **)&strResult;
  result.baseclass_0._Myres = 15;
  result.baseclass_0._Mysize = 0;
  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( strResult.baseclass_0._Myres < 0x10 )
    v27 = (const char *)&strResult;
  PgSprData::Add(v23, &pNode->baseclass_0, v27);
  PgWinBut::CreateWin(uiLeft, uiTop, v23, &v9->baseclass_0, 1u, 0, 0);
  v28 = PgWinSpr::CreateWin(0, 0, pkMovePoint, &v9->baseclass_0, 0, 0);
  v9->m_pkSlidePoint = v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v28,
    0);
  SlideBar::SetCurPos(v9, 0);
  if ( strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strName);
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( strResult.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strResult);
  strResult.baseclass_0._Myres = 15;
  strResult.baseclass_0._Mysize = 0;
  strResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v38 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&spTexProp->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    spTexProp->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spTexProp, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00450460) --------------------------------------------------------
SlideBar *__cdecl SlideBar::CreateWin(NiNode *pNode, char *pName, char *pName1, char *pName2, PgSprData *pkMovePoint, unsigned int uiID, PgWin *pkParent)
{
  void *v7; // eax@1
  void *v8; // esi@1
  PgWin *v9; // edi@8
  SlideBar *v10; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x13Cu);
  v8 = v7;
  result.m_pObject = (PgWin *)v7;
  v12 = 0;
  if ( v7 )
  {
    PgWin::PgWin((PgWin *)v7);
    *(_DWORD *)v8 = &SlideBar::_vftable_;
    *((_DWORD *)v8 + 58) = &SlideBar::_vftable_;
    *((_DWORD *)v8 + 74) = 0;
    *((_DWORD *)v8 + 75) = 0;
    *((_DWORD *)v8 + 76) = 0;
    *((_DWORD *)v8 + 78) = -1;
    *((_DWORD *)v8 + 77) = -1;
    *((_DWORD *)v8 + 73) = 0;
    *((_DWORD *)v8 + 72) = 0;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)v8 + 1);
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( SlideBar::Create((SlideBar *)v8, pNode, pName, pName1, pName2, pkMovePoint, uiID, pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = (SlideBar *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( v8 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    }
    v10 = 0;
  }
  return v10;
}
// 983E78: using guessed type int (__stdcall *SlideBar___vftable_)(int uiFlags);
// 983E94: using guessed type int (__thiscall *SlideBar___vftable_)(void *p, char);

//----- (004505E0) --------------------------------------------------------
void *__thiscall SlideBar::_scalar_deleting_destructor_(SlideBar *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlideBar::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlideBar::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 983E78: using guessed type int (__stdcall *SlideBar___vftable_)(int uiFlags);
// 983E94: using guessed type int (__thiscall *SlideBar___vftable_)(void *p, char);

//----- (00450620) --------------------------------------------------------
int __thiscall SlideListWin::GetFontSize(SlideListWin *this, unsigned int uiIndex, int nSize)
{
  return 0;
}

//----- (00450630) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::SetData(SlideListWin::ListItem *this, unsigned int dwData)
{
  this->m_dwData = dwData;
  return 1;
}

//----- (00450640) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::GetData(SlideListWin::ListItem *this, unsigned int *dwData)
{
  *dwData = this->m_dwData;
  return 1;
}

//----- (00450650) --------------------------------------------------------
unsigned int __thiscall ColumnBut::GetTextWinSize(ColumnBut *this)
{
  return (signed int)((char *)this->m_vecTextWin.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
}

//----- (00450660) --------------------------------------------------------
bool __thiscall ColumnBut::SetFontSize(ColumnBut *this, unsigned int uiIndex, int nSize)
{
  bool result; // al@2
  int v4; // edi@3
  int v5; // esi@3
  PgFont *v6; // eax@3

  if ( uiIndex < (signed int)((char *)this->m_vecTextWin.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    v4 = *(_DWORD *)(*(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex);
    v5 = *(_DWORD *)v4;
    v6 = Font::Get((Font::Type)nSize);
    (*(void (__thiscall **)(int, PgFont *))(v5 + 452))(v4, v6);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004506B0) --------------------------------------------------------
bool __thiscall ColumnBut::SetFontColor(ColumnBut *this, unsigned int uiIndex, int r, int g, int b)
{
  bool result; // al@2

  if ( uiIndex < (signed int)((char *)this->m_vecTextWin.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(*(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                        + 4 * uiIndex)
                                                          + 464))(
      r,
      g,
      b,
      255);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450700) --------------------------------------------------------
bool __thiscall ColumnBut::AlignText(ColumnBut *this, unsigned int uiIndex, unsigned int uiDrawFormat)
{
  bool result; // al@2

  if ( uiIndex < (signed int)((char *)this->m_vecTextWin.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]
                                                + 4 * uiIndex)
                                  + 488))(uiDrawFormat);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450740) --------------------------------------------------------
void __thiscall ColumnBut::SetText(ColumnBut *this, unsigned int uiIndex, const char *szString)
{
  if ( uiIndex < (signed int)((char *)this->m_vecTextWin.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&this->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]
                                                + 4 * uiIndex)
                                  + 472))(szString);
}

//----- (00450780) --------------------------------------------------------
void __thiscall ColumnBut::SetButShow(ColumnBut *this, PgWinBut::ButShow eShow)
{
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@4

  if ( this->baseclass_0.baseclass_0.m_eButShow != eShow )
  {
    this->baseclass_0.baseclass_0.m_eButShow = eShow;
    switch ( eShow )
    {
      case 0:
        goto $LN10_4;
      case 4:
        v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
        if ( this->baseclass_0.baseclass_0.m_uiButNum <= 1 )
          goto LABEL_5;
        ((void (__stdcall *)(_DWORD))v2)(1);
        break;
      case 2:
        v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
        if ( this->baseclass_0.baseclass_0.m_uiButNum <= 2 )
LABEL_5:
          ((void (__stdcall *)(_DWORD))v2)(0);
        else
          ((void (__stdcall *)(_DWORD))v2)(2);
        break;
      case 3:
        if ( this->baseclass_0.baseclass_0.m_uiButNum <= 3 )
$LN10_4:
          ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
        else
          ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(3);
        break;
      default:
        return;
    }
  }
}

//----- (00450820) --------------------------------------------------------
void __thiscall ColumnBut::ProcessMeInput(ColumnBut *this, bool *bHit)
{
  ColumnBut *v2; // esi@1

  v2 = this;
  PgWinLRBut::ProcessMeInput(&this->baseclass_0, bHit);
  if ( v2->m_bCheck )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v2,
      4u);
}

//----- (00450850) --------------------------------------------------------
unsigned int __thiscall SlideListWin::GetItemSize(SlideListWin *this)
{
  return (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
}

//----- (00450860) --------------------------------------------------------
bool __thiscall SlideListWin::SetData(SlideListWin *this, unsigned int uiIndex, unsigned int dwData)
{
  bool result; // al@2

  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    **(_DWORD **)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiIndex) = dwData;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004508A0) --------------------------------------------------------
bool __thiscall SlideListWin::GetData(SlideListWin *this, unsigned int uiColumn, unsigned int *dwData)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    *dwData = **(_DWORD **)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiColumn);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004508E0) --------------------------------------------------------
void __thiscall SlideListWin::SetToolTipWin(SlideListWin *this, PgWin *pkToolTipWin)
{
  unsigned int v2; // eax@1
  int v3; // edx@2

  v2 = 0;
  if ( (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    do
    {
      v3 = *(_DWORD *)(*(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v2);
      if ( v3 )
        *(_DWORD *)(v3 + 272) = pkToolTipWin;
      ++v2;
    }
    while ( v2 < (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
  }
}

//----- (00450930) --------------------------------------------------------
void __thiscall SlideListWin::SetToolTipWinText(SlideListWin *this, int nItemIndex, char *pcText)
{
  int v3; // ecx@2

  if ( (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 > nItemIndex )
  {
    v3 = *(_DWORD *)(*(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * nItemIndex);
    if ( v3 )
    {
      if ( *(_DWORD *)(v3 + 272) )
        PgWin::SetToolTipWinText((PgWin *)v3, pcText);
    }
  }
}

//----- (00450970) --------------------------------------------------------
ColumnBut *__thiscall SlideListWin::GetColumn(SlideListWin *this, unsigned int iItemIndex, unsigned int uiColumn)
{
  ColumnBut *result; // eax@2

  if ( iItemIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                               - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3
    && *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * iItemIndex)
    && iItemIndex < (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                               - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
    result = *(ColumnBut **)(*(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * iItemIndex);
  else
    result = 0;
  return result;
}

//----- (004509C0) --------------------------------------------------------
int __thiscall SlideListWin::GetCurSelIndex(SlideListWin *this)
{
  int result; // eax@1
  signed int v2; // edx@1
  int v3; // esi@2

  result = 0;
  v2 = (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
  if ( v2 )
  {
    v3 = *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    while ( !*(_DWORD *)v3 || !*(_BYTE *)(*(_DWORD *)v3 + 4) )
    {
      ++result;
      v3 += 8;
      if ( result >= (unsigned int)v2 )
        goto LABEL_6;
    }
  }
  else
  {
LABEL_6:
    result = -1;
  }
  return result;
}

//----- (00450A00) --------------------------------------------------------
bool __thiscall SlideListWin::SetCurSelIndex(SlideListWin *this, int nSelIndex)
{
  int v2; // eax@1
  unsigned int v3; // edx@3
  int v4; // eax@4
  int v5; // eax@8
  bool result; // al@9

  v2 = (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
  if ( nSelIndex >= v2 && nSelIndex >= 0 )
    goto LABEL_13;
  v3 = 0;
  if ( v2 )
  {
    do
    {
      v4 = *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v3);
      if ( v4 )
        *(_BYTE *)(v4 + 4) = 0;
      ++v3;
    }
    while ( v3 < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 );
  }
  if ( nSelIndex >= 0
    && (v5 = *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * nSelIndex)) != 0 )
  {
    *(_BYTE *)(v5 + 4) = 1;
    result = 1;
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}

//----- (00450A70) --------------------------------------------------------
unsigned int __thiscall SLWCreateInfo::GetItemCnt(SLWCreateInfo *this)
{
  return (signed int)((char *)this->m_arrItem.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
}

//----- (00450A80) --------------------------------------------------------
SLWCreateInfo::Item *__thiscall SLWCreateInfo::GetItemInfo(SLWCreateInfo *this, int nIndex)
{
  SLWCreateInfo::Item *result; // eax@2

  if ( nIndex < (signed int)((char *)this->m_arrItem.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
    result = *(SLWCreateInfo::Item **)(*(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * nIndex);
  else
    result = 0;
  return result;
}

//----- (00450AB0) --------------------------------------------------------
unsigned int __thiscall SlideListWin::ListItem::GetColumnSize(SlideListWin::ListItem *this)
{
  return (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
       / 48;
}

//----- (00450AD0) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::SetFontSize(SlideListWin::ListItem *this, unsigned int uiColumn, int nSize)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48 )
  {
    *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 28) = nSize;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450B10) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::SetFontColor(SlideListWin::ListItem *this, unsigned int uiColumn, int r, int g, int b)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48 )
  {
    *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 32) = r;
    *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 36) = g;
    *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 40) = b;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450B70) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::AlignText(SlideListWin::ListItem *this, unsigned int uiColumn, unsigned int uiDrawFormat)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48 )
  {
    *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 44) = uiDrawFormat;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450BB0) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::GetAlignText(SlideListWin::ListItem *this, unsigned int uiColumn, unsigned int *uiDrawFormat)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48 )
  {
    *uiDrawFormat = *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 44);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450BF0) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::GetFontSize(SlideListWin::ListItem *this, unsigned int uiColumn, int *nSize)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48 )
  {
    *nSize = *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 28);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450C30) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::GetFontColor(SlideListWin::ListItem *this, unsigned int uiColumn, int *r, int *g, int *b)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48 )
  {
    *r = *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 32);
    *g = *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 36);
    *b = *(_DWORD *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * uiColumn + 40);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450C90) --------------------------------------------------------
void __thiscall SlideListWin::ListItem::SetFontSize(SlideListWin::ListItem *this, int nSize)
{
  unsigned int v2; // esi@1
  int v3; // eax@1
  int v4; // edi@2

  v2 = 0;
  v3 = (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
     / 48;
  if ( v3 )
  {
    v4 = 0;
    if ( (unsigned int)v3 <= 0 )
      goto LABEL_4;
    do
    {
      *(_DWORD *)(v4 + *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 28) = nSize;
LABEL_4:
      ++v2;
      v4 += 48;
    }
    while ( v2 < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
               / 48 );
  }
}

//----- (00450CF0) --------------------------------------------------------
void __thiscall SlideListWin::ListItem::SetFontColor(SlideListWin::ListItem *this, int r, int g, int b)
{
  unsigned int v4; // edi@1
  int v5; // eax@1
  int v6; // esi@2

  v4 = 0;
  v5 = (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
     / 48;
  if ( v5 )
  {
    v6 = 0;
    if ( (unsigned int)v5 <= 0 )
      goto LABEL_4;
    do
    {
      *(_DWORD *)(v6 + *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 32) = r;
      *(_DWORD *)(v6 + *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 36) = g;
      *(_DWORD *)(v6 + *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 40) = b;
LABEL_4:
      ++v4;
      v6 += 48;
    }
    while ( v4 < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
               / 48 );
  }
}

//----- (00450D60) --------------------------------------------------------
void __thiscall SlideListWin::ListItem::AlignText(SlideListWin::ListItem *this, unsigned int uiDrawFormat)
{
  unsigned int v2; // esi@1
  int v3; // eax@1
  int v4; // edi@2

  v2 = 0;
  v3 = (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
     / 48;
  if ( v3 )
  {
    v4 = 0;
    if ( (unsigned int)v3 <= 0 )
      goto LABEL_4;
    do
    {
      *(_DWORD *)(v4 + *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 44) = uiDrawFormat;
LABEL_4:
      ++v2;
      v4 += 48;
    }
    while ( v2 < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
               / 48 );
  }
}

//----- (00450DC0) --------------------------------------------------------
void __thiscall ColumnBut::DoAction(ColumnBut *this)
{
  ColumnBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_nIndex);
}

//----- (00450DF0) --------------------------------------------------------
void __thiscall ColumnBut::DoRAction(ColumnBut *this)
{
  ColumnBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.m_uiRCmdMsg,
      v1->m_nIndex);
}

//----- (00450E20) --------------------------------------------------------
bool __thiscall SlideListWin::SetFontSize(SlideListWin *this, unsigned int uiIndex, int nSize)
{
  bool result; // al@2

  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    SlideListWin::ListItem::SetFontSize(
      *(SlideListWin::ListItem **)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiIndex),
      nSize);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450E60) --------------------------------------------------------
bool __thiscall SlideListWin::SetFontColor(SlideListWin *this, unsigned int uiIndex, int r, int g, int b)
{
  bool result; // al@2

  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    SlideListWin::ListItem::SetFontColor(
      *(SlideListWin::ListItem **)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiIndex),
      r,
      g,
      b);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450EA0) --------------------------------------------------------
bool __thiscall SlideListWin::SetFontSize(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn, int nSize)
{
  bool result; // al@2
  int v5; // esi@3

  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    v5 = *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiIndex);
    if ( uiColumn < (*(_DWORD *)(v5 + 12) - *(_DWORD *)(v5 + 8)) / 48 )
      *(_DWORD *)(*(_DWORD *)(v5 + 8) + 48 * uiColumn + 28) = nSize;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450F00) --------------------------------------------------------
bool __thiscall SlideListWin::SetFontColor(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn, int r, int g, int b)
{
  bool result; // al@2
  int v7; // ecx@3
  signed int v8; // edx@3

  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    v7 = *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiIndex);
    v8 = (signed int)((unsigned __int64)(715827883i64 * (*(_DWORD *)(v7 + 12) - *(_DWORD *)(v7 + 8))) >> 32) >> 3;
    if ( uiColumn < v8 + ((unsigned int)v8 >> 31) )
    {
      *(_DWORD *)(*(_DWORD *)(v7 + 8) + 48 * uiColumn + 32) = r;
      *(_DWORD *)(*(_DWORD *)(v7 + 8) + 48 * uiColumn + 36) = g;
      *(_DWORD *)(*(_DWORD *)(v7 + 8) + 48 * uiColumn + 40) = b;
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00450F80) --------------------------------------------------------
bool __thiscall SlideListWin::AlignText(SlideListWin *this, unsigned int uiDrawFormat)
{
  unsigned int v2; // ebx@1
  int v3; // esi@2
  unsigned int v4; // edi@2
  int v5; // eax@2
  int v6; // ebx@3
  unsigned int ui; // [sp+4h] [bp-4h]@1

  v2 = 0;
  ui = 0;
  if ( (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    while ( 1 )
    {
      v3 = *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v2);
      v4 = 0;
      v5 = (*(_DWORD *)(v3 + 12) - *(_DWORD *)(v3 + 8)) / 48;
      if ( v5 )
        break;
LABEL_7:
      ++v2;
      ui = v2;
      if ( v2 >= (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
        return 1;
    }
    v6 = 0;
    if ( (unsigned int)v5 <= 0 )
      goto LABEL_5;
    while ( 1 )
    {
      *(_DWORD *)(*(_DWORD *)(v3 + 8) + v6 + 44) = uiDrawFormat;
LABEL_5:
      ++v4;
      v6 += 48;
      if ( v4 >= (*(_DWORD *)(v3 + 12) - *(_DWORD *)(v3 + 8)) / 48 )
      {
        v2 = ui;
        goto LABEL_7;
      }
    }
  }
  return 1;
}

//----- (00451020) --------------------------------------------------------
bool __thiscall SlideListWin::AlignText(SlideListWin *this, unsigned int uiColumn, unsigned int uiDrawFormat)
{
  unsigned int v3; // edi@1
  int v4; // esi@2

  v3 = 0;
  if ( (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    do
    {
      v4 = *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v3);
      if ( uiColumn < (*(_DWORD *)(v4 + 12) - *(_DWORD *)(v4 + 8)) / 48 )
        *(_DWORD *)(*(_DWORD *)(v4 + 8) + 48 * uiColumn + 44) = uiDrawFormat;
      ++v3;
    }
    while ( v3 < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 );
  }
  return 1;
}

//----- (00451090) --------------------------------------------------------
void __thiscall SlideListWin::SetToolTipWinTextInColumn(SlideListWin *this, unsigned int TextWinIndex, char *pcText)
{
  SlideListWin *v3; // esi@1
  unsigned int v4; // edi@1
  int v5; // ecx@2
  PgWin *v6; // ecx@4

  v3 = this;
  v4 = 0;
  if ( (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    do
    {
      v5 = *(_DWORD *)(*(_DWORD *)&v3->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4);
      if ( v5 && TextWinIndex < (*(_DWORD *)(v5 + 336) - *(_DWORD *)(v5 + 332)) >> 2 )
      {
        v6 = *(PgWin **)(*(_DWORD *)(v5 + 332) + 4 * TextWinIndex);
        if ( v6 )
          PgWin::SetToolTipWinText(v6, pcText);
      }
      ++v4;
    }
    while ( v4 < (signed int)((char *)v3->m_vecButList.baseclass_0._Mylast
                            - *(_DWORD *)&v3->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
  }
}

//----- (00451110) --------------------------------------------------------
void __thiscall SlideListWin::SetToolTipWin(SlideListWin *this, unsigned int TextWinIndex, PgWin *pkToolTipWin)
{
  unsigned int v3; // esi@1
  int v4; // edx@2
  int v5; // eax@4

  v3 = 0;
  if ( (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    do
    {
      v4 = *(_DWORD *)(*(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v3);
      if ( v4 && TextWinIndex < (*(_DWORD *)(v4 + 336) - *(_DWORD *)(v4 + 332)) >> 2 )
      {
        v5 = *(_DWORD *)(*(_DWORD *)(v4 + 332) + 4 * TextWinIndex);
        if ( v5 )
          *(_DWORD *)(v5 + 272) = pkToolTipWin;
      }
      ++v3;
    }
    while ( v3 < (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
  }
}

//----- (00451180) --------------------------------------------------------
float __thiscall SLWCreateInfo::GetHeight(SLWCreateInfo *this)
{
  double v1; // st7@2
  int v2; // eax@3
  int v3; // edx@3
  float result; // st7@5

  if ( (signed int)((char *)this->m_arrItem.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3
    && (v2 = **(_DWORD **)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0],
        v3 = *(_DWORD *)(v2 + 8),
        v3 != *(_DWORD *)(v2 + 12)) )
    v1 = (double)*(unsigned int *)(**(_DWORD **)(*(_DWORD *)v3 + 36) + 24);
  else
    v1 = -1.0;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (004511D0) --------------------------------------------------------
const char *__thiscall SlideListWin::ListItem::GetText(SlideListWin::ListItem *this, unsigned int nIndex)
{
  const char *result; // eax@2

  if ( nIndex < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
              / 48 )
  {
    result = (const char *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * nIndex);
    if ( *((_DWORD *)result + 5) >= 0x10u )
      result = *(const char **)result;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00451210) --------------------------------------------------------
char *__thiscall SlideListWin::GetMouseOnItemText(SlideListWin *this, int *retIndex, int ColumnTextIndex)
{
  SlideListWin *v3; // esi@1
  int v4; // edi@1
  int v5; // eax@1
  char *result; // eax@4
  int v7; // edi@5
  char bHit; // [sp+Bh] [bp-1h]@1

  v3 = this;
  v4 = 0;
  v5 = ((signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                   - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
     - 1;
  bHit = 0;
  if ( v5 )
  {
    while ( 1 )
    {
      (*(void (__stdcall **)(char *))(**(_DWORD **)(*(_DWORD *)&v3->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 4 * v4)
                                    + 316))(&bHit);
      if ( bHit == 1 )
        break;
      ++v4;
      if ( v4 >= (unsigned int)(((signed int)((char *)v3->m_vecButList.baseclass_0._Mylast
                                            - *(_DWORD *)&v3->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
                              - 1) )
        goto LABEL_4;
    }
    *retIndex = v4;
    v7 = *(_DWORD *)(*(_DWORD *)&v3->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4);
    if ( ColumnTextIndex < (unsigned int)((*(_DWORD *)(v7 + 336) - *(_DWORD *)(v7 + 332)) >> 2) )
      result = (char *)(*(int (**)(void))(**(_DWORD **)(*(_DWORD *)(v7 + 332) + 4 * ColumnTextIndex) + 484))();
    else
      result = (char *)(*(int (**)(void))(v0 + 484))();
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (004512C0) --------------------------------------------------------
const char *__thiscall SlideListWin::GetText(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn)
{
  const char *result; // eax@2
  int v4; // esi@3

  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    v4 = *(_DWORD *)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiIndex);
    if ( uiColumn < (*(_DWORD *)(v4 + 12) - *(_DWORD *)(v4 + 8)) / 48 )
    {
      result = (const char *)(*(_DWORD *)(v4 + 8) + 48 * uiColumn);
      if ( *((_DWORD *)result + 5) >= 0x10u )
        result = *(const char **)result;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00451330) --------------------------------------------------------
void __thiscall SlideListWin::UpdateViewList(SlideListWin *this)
{
  SlideListWin *v1; // esi@1
  int v2; // eax@1
  unsigned int v3; // ebx@1
  int v4; // edi@2
  int v5; // eax@5
  unsigned int v6; // ecx@5
  unsigned int v7; // edx@5
  int v8; // edi@6
  int v9; // eax@7
  int v10; // ebx@8
  unsigned int v11; // esi@12
  int v12; // eax@12
  int v13; // ecx@15
  int v14; // ecx@21
  int v15; // ecx@22
  SlideListWin *v16; // [sp+14h] [bp-14h]@1
  int uiButIndex; // [sp+18h] [bp-10h]@8
  unsigned int ui; // [sp+1Ch] [bp-Ch]@5
  int szText; // [sp+20h] [bp-8h]@14
  int v20; // [sp+24h] [bp-4h]@13

  v1 = this;
  v2 = *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = 0;
  v16 = this;
  if ( (signed int)((char *)this->m_vecButList.baseclass_0._Mylast - v2) >> 2 )
  {
    do
    {
      v4 = *(_DWORD *)(v2 + 4 * v3);
      if ( v4 )
      {
        (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 256))(v4, 0);
        (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 240))(v4, 0);
      }
      v2 = *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
      ++v3;
    }
    while ( v3 < (signed int)((char *)v1->m_vecButList.baseclass_0._Mylast - v2) >> 2 );
  }
  v5 = *(_DWORD *)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = v1->m_nViewStartPos;
  v7 = 0;
  ui = v6;
  while ( v6 < (signed int)((char *)v1->m_arrListItem.baseclass_0._Mylast - v5) >> 3 )
  {
    v8 = *(_DWORD *)(v5 + 8 * v6);
    if ( v8 )
    {
      v9 = *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v7 >= (signed int)((char *)v1->m_vecButList.baseclass_0._Mylast - v9) >> 2
        || (v10 = *(_DWORD *)(v9 + 4 * v7), uiButIndex = v7 + 1, !v10) )
        return;
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v10 + 256))(v10, 1);
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v10 + 240))(v10, 1);
      if ( v1->m_bCheckEnable )
        *(_BYTE *)(v10 + 380) = *(_BYTE *)(v8 + 4);
      else
        *(_BYTE *)(v10 + 380) = 0;
      v11 = 0;
      v12 = (*(_DWORD *)(v8 + 12) - *(_DWORD *)(v8 + 8)) / 48;
      if ( v12 )
      {
        v20 = 0;
        if ( (unsigned int)v12 <= 0 )
        {
          szText = 0;
          goto LABEL_18;
        }
        do
        {
          v13 = v20 + *(_DWORD *)(v8 + 8);
          if ( *(_DWORD *)(v13 + 20) >= 0x10u )
            v13 = *(_DWORD *)v13;
          szText = v13;
LABEL_18:
          if ( v11 < (*(_DWORD *)(v10 + 336) - *(_DWORD *)(v10 + 332)) >> 2 )
          {
            if ( v11 < v12 )
              (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, signed int))(**(_DWORD **)(*(_DWORD *)(v10 + 332) + 4 * v11)
                                                                        + 464))(
                *(_DWORD *)(v20 + *(_DWORD *)(v8 + 8) + 32),
                *(_DWORD *)(v20 + *(_DWORD *)(v8 + 8) + 36),
                *(_DWORD *)(v20 + *(_DWORD *)(v8 + 8) + 40),
                255);
            v14 = *(_DWORD *)(v8 + 8);
            if ( v11 < (*(_DWORD *)(v8 + 12) - v14) / 48 )
            {
              v15 = *(_DWORD *)(v14 + v20 + 44);
              if ( v11 < (*(_DWORD *)(v10 + 336) - *(_DWORD *)(v10 + 332)) >> 2 )
                (*(void (__thiscall **)(_DWORD, int))(**(_DWORD **)(*(_DWORD *)(v10 + 332) + 4 * v11) + 488))(
                  *(_DWORD *)(*(_DWORD *)(v10 + 332) + 4 * v11),
                  v15);
            }
            if ( v11 < (*(_DWORD *)(v10 + 336) - *(_DWORD *)(v10 + 332)) >> 2 )
              (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v10 + 332) + 4 * v11) + 472))(szText);
          }
          v20 += 48;
          ++v11;
          v12 = (*(_DWORD *)(v8 + 12) - *(_DWORD *)(v8 + 8)) / 48;
        }
        while ( v11 < v12 );
      }
      v1 = v16;
      v7 = uiButIndex;
      v6 = ui;
    }
    v5 = *(_DWORD *)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    ++v6;
    ui = v6;
  }
}

//----- (00451580) --------------------------------------------------------
void __thiscall SlideListWin::OnClickItem(SlideListWin *this, int nItemIndex)
{
  SlideListWin *v2; // esi@1
  int v3; // eax@2
  signed int v4; // edi@2
  unsigned int v5; // ecx@2
  int v6; // eax@3
  int v7; // eax@6
  int v8; // edi@6
  NiNode *v9; // ebx@7
  int v10; // eax@8
  char v11; // al@11
  PgWin *v12; // eax@12

  v2 = this;
  if ( nItemIndex < (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                               - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    v3 = *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    v4 = (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast - v3) >> 3;
    v5 = 0;
    if ( v4 )
    {
      do
      {
        v6 = *(_DWORD *)(v3 + 8 * v5);
        if ( v6 )
          *(_BYTE *)(v6 + 4) = 0;
        v3 = *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
        ++v5;
      }
      while ( v5 < (signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast - v3) >> 3 );
    }
    v7 = *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    v8 = nItemIndex + v2->m_nViewStartPos;
    if ( v8 < (signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast - v7) >> 3 )
    {
      *(_BYTE *)(*(_DWORD *)(v7 + 8 * v8) + 4) = 1;
      v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
      if ( v9 )
      {
        v10 = ((int (__thiscall *)(NiNode *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent);
        if ( v10 )
        {
          while ( (NiRTTI *)v10 != &PgWin::m_RTTI )
          {
            v10 = *(_DWORD *)(v10 + 4);
            if ( !v10 )
              goto LABEL_11;
          }
          v11 = 1;
        }
        else
        {
LABEL_11:
          v11 = 0;
        }
        v12 = (PgWin *)(v11 != 0 ? (int)v9 : 0);
        if ( v12 )
          PgWin::SendMsg(&v2->baseclass_0.baseclass_0, v12, 5u, v2->m_uiLClickMsg, v8);
      }
      SlideListWin::UpdateViewList(v2);
    }
  }
}

//----- (00451660) --------------------------------------------------------
void __thiscall SlideListWin::OnRClickItem(SlideListWin *this, int nItemIndex)
{
  SlideListWin *v2; // esi@1
  int v3; // eax@2
  signed int v4; // edi@2
  unsigned int v5; // ecx@2
  int v6; // eax@3
  int v7; // eax@6
  int v8; // edi@6
  NiNode *v9; // ebx@7
  int v10; // eax@8
  char v11; // al@11
  PgWin *v12; // eax@12

  v2 = this;
  if ( nItemIndex < (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                               - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    v3 = *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    v4 = (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast - v3) >> 3;
    v5 = 0;
    if ( v4 )
    {
      do
      {
        v6 = *(_DWORD *)(v3 + 8 * v5);
        if ( v6 )
          *(_BYTE *)(v6 + 4) = 0;
        v3 = *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
        ++v5;
      }
      while ( v5 < (signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast - v3) >> 3 );
    }
    v7 = *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    v8 = nItemIndex + v2->m_nViewStartPos;
    if ( v8 < (signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast - v7) >> 3 )
    {
      *(_BYTE *)(*(_DWORD *)(v7 + 8 * v8) + 4) = 1;
      v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
      if ( v9 )
      {
        v10 = ((int (__thiscall *)(NiNode *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent);
        if ( v10 )
        {
          while ( (NiRTTI *)v10 != &PgWin::m_RTTI )
          {
            v10 = *(_DWORD *)(v10 + 4);
            if ( !v10 )
              goto LABEL_11;
          }
          v11 = 1;
        }
        else
        {
LABEL_11:
          v11 = 0;
        }
        v12 = (PgWin *)(v11 != 0 ? (int)v9 : 0);
        if ( v12 )
          PgWin::SendMsg(&v2->baseclass_0.baseclass_0, v12, 5u, v2->m_uiRClickMsg, v8);
      }
      SlideListWin::UpdateViewList(v2);
    }
  }
}

//----- (00451740) --------------------------------------------------------
void __thiscall SlideListWin::KillSelIndex(SlideListWin *this)
{
  SlideListWin *v1; // esi@1
  int v2; // eax@1
  signed int v3; // edx@1
  unsigned int v4; // ecx@1
  int v5; // eax@2
  int v6; // eax@5
  unsigned int v7; // ebx@5
  int v8; // edi@6
  int v9; // eax@9
  unsigned int v10; // ecx@9
  unsigned int v11; // edx@9
  int v12; // edi@10
  int v13; // eax@11
  int v14; // ebx@12
  unsigned int v15; // esi@16
  int v16; // eax@16
  int v17; // ecx@19
  int v18; // ecx@25
  int v19; // ecx@26
  SlideListWin *v20; // [sp+14h] [bp-14h]@1
  int v21; // [sp+18h] [bp-10h]@12
  unsigned int v22; // [sp+1Ch] [bp-Ch]@9
  int v23; // [sp+20h] [bp-8h]@18
  int v24; // [sp+24h] [bp-4h]@17

  v1 = this;
  v2 = *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast - v2) >> 3;
  v4 = 0;
  v20 = v1;
  if ( v3 )
  {
    do
    {
      v5 = *(_DWORD *)(v2 + 8 * v4);
      if ( v5 )
        *(_BYTE *)(v5 + 4) = 0;
      v2 = *(_DWORD *)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
      ++v4;
    }
    while ( v4 < (signed int)((char *)v1->m_arrListItem.baseclass_0._Mylast - v2) >> 3 );
  }
  v6 = *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = 0;
  if ( (signed int)((char *)v1->m_vecButList.baseclass_0._Mylast - v6) >> 2 )
  {
    do
    {
      v8 = *(_DWORD *)(v6 + 4 * v7);
      if ( v8 )
      {
        (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 256))(v8, 0);
        (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 240))(v8, 0);
      }
      v6 = *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
      ++v7;
    }
    while ( v7 < (signed int)((char *)v1->m_vecButList.baseclass_0._Mylast - v6) >> 2 );
  }
  v9 = *(_DWORD *)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  v10 = v1->m_nViewStartPos;
  v11 = 0;
  v22 = v10;
  while ( v10 < (signed int)((char *)v1->m_arrListItem.baseclass_0._Mylast - v9) >> 3 )
  {
    v12 = *(_DWORD *)(v9 + 8 * v10);
    if ( v12 )
    {
      v13 = *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v11 >= (signed int)((char *)v1->m_vecButList.baseclass_0._Mylast - v13) >> 2
        || (v14 = *(_DWORD *)(v13 + 4 * v11), v21 = v11 + 1, !v14) )
        return;
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v14 + 256))(v14, 1);
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v14 + 240))(v14, 1);
      if ( v1->m_bCheckEnable )
        *(_BYTE *)(v14 + 380) = *(_BYTE *)(v12 + 4);
      else
        *(_BYTE *)(v14 + 380) = 0;
      v15 = 0;
      v16 = (*(_DWORD *)(v12 + 12) - *(_DWORD *)(v12 + 8)) / 48;
      if ( v16 )
      {
        v24 = 0;
        if ( (unsigned int)v16 <= 0 )
        {
          v23 = 0;
          goto LABEL_22;
        }
        do
        {
          v17 = v24 + *(_DWORD *)(v12 + 8);
          if ( *(_DWORD *)(v17 + 20) >= 0x10u )
            v17 = *(_DWORD *)v17;
          v23 = v17;
LABEL_22:
          if ( v15 < (*(_DWORD *)(v14 + 336) - *(_DWORD *)(v14 + 332)) >> 2 )
          {
            if ( v15 < v16 )
              (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, signed int))(**(_DWORD **)(*(_DWORD *)(v14 + 332) + 4 * v15)
                                                                        + 464))(
                *(_DWORD *)(v24 + *(_DWORD *)(v12 + 8) + 32),
                *(_DWORD *)(v24 + *(_DWORD *)(v12 + 8) + 36),
                *(_DWORD *)(v24 + *(_DWORD *)(v12 + 8) + 40),
                255);
            v18 = *(_DWORD *)(v12 + 8);
            if ( v15 < (*(_DWORD *)(v12 + 12) - v18) / 48 )
            {
              v19 = *(_DWORD *)(v18 + v24 + 44);
              if ( v15 < (*(_DWORD *)(v14 + 336) - *(_DWORD *)(v14 + 332)) >> 2 )
                (*(void (__thiscall **)(_DWORD, int))(**(_DWORD **)(*(_DWORD *)(v14 + 332) + 4 * v15) + 488))(
                  *(_DWORD *)(*(_DWORD *)(v14 + 332) + 4 * v15),
                  v19);
            }
            if ( v15 < (*(_DWORD *)(v14 + 336) - *(_DWORD *)(v14 + 332)) >> 2 )
              (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v14 + 332) + 4 * v15) + 472))(v23);
          }
          v24 += 48;
          ++v15;
          v16 = (*(_DWORD *)(v12 + 12) - *(_DWORD *)(v12 + 8)) / 48;
        }
        while ( v15 < v16 );
      }
      v1 = v20;
      v11 = v21;
      v10 = v22;
    }
    v9 = *(_DWORD *)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    ++v10;
    v22 = v10;
  }
}

//----- (004519C0) --------------------------------------------------------
void __thiscall SlideListWin::OnCommand(SlideListWin *this, unsigned int wParam, int lParam)
{
  SlideListWin *v3; // esi@1

  v3 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
  {
    if ( wParam )
    {
      if ( wParam == 1 )
        SlideListWin::OnRClickItem(v3, lParam);
    }
    else
    {
      SlideListWin::OnClickItem(v3, lParam);
    }
  }
}

//----- (00451A00) --------------------------------------------------------
void __thiscall ColumnBut::ColumnBut(ColumnBut *this)
{
  ColumnBut *v1; // esi@1

  v1 = this;
  PgWinLRBut::PgWinLRBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ColumnBut::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ColumnBut::_vftable_;
  *(_DWORD *)&v1->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecTextWin.baseclass_0._Mylast = 0;
  v1->m_vecTextWin.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecSprWin.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSprWin.baseclass_0._Mylast = 0;
  v1->m_vecSprWin.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecAddWin.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecAddWin.baseclass_0._Mylast = 0;
  v1->m_vecAddWin.baseclass_0._Myend = 0;
  v1->m_bCheck = 0;
  v1->m_nIndex = -1;
  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_vecAddWin,
    0x3Cu);
}
// 9840A4: using guessed type int (__stdcall *ColumnBut___vftable_)(int uiFlags);
// 9840C4: using guessed type int (__thiscall *ColumnBut___vftable_)(void *p, char);

//----- (00451AB0) --------------------------------------------------------
void __thiscall ColumnBut::_ColumnBut(ColumnBut *this)
{
  ColumnBut *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ColumnBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ColumnBut::_vftable_;
  if ( *(_DWORD *)&this->m_vecAddWin.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecAddWin.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecAddWin.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecAddWin.baseclass_0._Mylast = 0;
  v1->m_vecAddWin.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecSprWin.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecSprWin.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecSprWin.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSprWin.baseclass_0._Mylast = 0;
  v1->m_vecSprWin.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecTextWin.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecTextWin.baseclass_0._Mylast = 0;
  v1->m_vecTextWin.baseclass_0._Myend = 0;
  PgWinLRBut::_PgWinLRBut(&v1->baseclass_0);
}
// 9840A4: using guessed type int (__stdcall *ColumnBut___vftable_)(int uiFlags);
// 9840C4: using guessed type int (__thiscall *ColumnBut___vftable_)(void *p, char);

//----- (00451B40) --------------------------------------------------------
ColumnBut *__cdecl ColumnBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg)
{
  void *v6; // eax@1
  int v7; // eax@2
  int v8; // esi@2
  PgWin *v9; // edi@8
  ColumnBut *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x184u);
  result.m_pObject = (PgWin *)v6;
  v12 = 0;
  if ( v6 )
  {
    ColumnBut::ColumnBut((ColumnBut *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, PgSprData *, PgWin *, unsigned int, unsigned int))(*(_DWORD *)v8 + 580))(
                          v8,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg,
                          uiRCmdMsg) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = (ColumnBut *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}

//----- (00451C80) --------------------------------------------------------
void __thiscall ColumnBut::AddTextWin(ColumnBut *this, PgWinText *pkTextWin)
{
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&this->m_vecTextWin,
    (const unsigned int *)&pkTextWin);
}

//----- (00451CA0) --------------------------------------------------------
bool __thiscall SlideListWin::Create(SlideListWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd)
{
  void *v8; // edi@1
  SLWCreateInfo *v9; // esi@2
  signed int v10; // ebx@3
  double v11; // st7@4
  int v12; // eax@5
  int v13; // ecx@5
  signed int v14; // eax@8
  unsigned int v15; // edx@8
  unsigned int v16; // ebx@8
  int (__thiscall *v17)(_DWORD); // edx@8
  unsigned int v18; // eax@8
  int v19; // eax@9
  int v20; // edx@9
  PgWin *v21; // ebx@9
  bool result; // al@10
  int v23; // ecx@12
  int v24; // eax@12
  int v25; // edi@14
  unsigned int v26; // esi@15
  PgSprData **v27; // eax@17
  ColumnBut *v28; // eax@18
  int v29; // edx@18
  int v30; // eax@22
  int v31; // ecx@22
  PgWinAbbreviateText *v32; // esi@29
  PgTextGeometry *v33; // eax@30
  int v34; // eax@33
  unsigned int v35; // edx@34
  int v36; // ecx@35
  int v37; // eax@35
  int v38; // eax@40
  int *v39; // eax@42
  int v40; // eax@44
  int v41; // esi@45
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v42; // eax@45
  unsigned int v43; // ecx@46
  int v44; // eax@46
  int *v45; // eax@49
  int v46; // ebx@51
  int v47; // ebx@53
  char *v48; // eax@54
  NiObjectNET *v49; // eax@56
  ItemIcon *v50; // esi@56
  int v51; // ebx@59
  const char *v52; // eax@60
  int v53; // ebx@65
  char *v54; // ecx@66
  D3DXCOLOR v55; // ST1C_16@68
  NiObjectNET *v56; // eax@68
  NiRefObjectVtbl *v57; // ebx@70
  PgFont *v58; // eax@70
  ItemIcon *v59; // eax@71
  int v60; // eax@71
  unsigned int v61; // eax@80
  int v62; // esi@80
  int v63; // edx@81
  int v64; // ecx@82
  signed int v65; // ebx@82
  int v66; // eax@83
  int v67; // eax@84
  int v68; // ecx@84
  unsigned int v69; // ecx@86
  int v70; // eax@91
  int v71; // ebx@91
  int v72; // ecx@93
  int v73; // eax@94
  int v74; // eax@95
  int v75; // ecx@95
  unsigned int v76; // ecx@97
  int v77; // eax@102
  int v78; // eax@104
  int v79; // edx@104
  const unsigned int *v80; // [sp-14h] [bp-50h]@58
  const char *v81; // [sp-14h] [bp-50h]@64
  UIUtil ui; // [sp+0h] [bp-3Ch]@9
  int v83; // [sp+14h] [bp-28h]@8
  int v84; // [sp+18h] [bp-24h]@50
  int v85; // [sp+1Ch] [bp-20h]@43
  unsigned int _Val; // [sp+20h] [bp-1Ch]@24
  PgFont *pkFont; // [sp+24h] [bp-18h]@20
  int i; // [sp+28h] [bp-14h]@9
  PgWin *pkParenta; // [sp+2Ch] [bp-10h]@1
  int v90; // [sp+38h] [bp-4h]@9
  int iOffX; // [sp+44h] [bp+8h]@9
  int iOffY; // [sp+48h] [bp+Ch]@9
  int uii; // [sp+4Ch] [bp+10h]@12

  v8 = this;
  pkParenta = (PgWin *)this;
  if ( PgWinSpr::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, 0, 0)
    && (v9 = kCreateInfo, kCreateInfo->m_bMakeData)
    && ((v10 = (signed int)((char *)kCreateInfo->m_arrItem.baseclass_0._Mylast
                          - *(_DWORD *)&kCreateInfo->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3) != 0 ? ((v12 = **(_DWORD **)&kCreateInfo->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0], v13 = *(_DWORD *)(v12 + 8), v13 != *(_DWORD *)(v12 + 12)) ? (v11 = (double)*(unsigned int *)(**(_DWORD **)(*(_DWORD *)v13 + 36) + 24)) : (v11 = -1.0)) : (v11 = -1.0),
        *(float *)&pkParent = v11,
        v14 = (signed int)*(float *)&pkParent,
        v15 = uiLineSpace,
        *((_DWORD *)v8 + 82) = v10 - 1,
        v16 = v14 + v15,
        v17 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v8 + 148),
        v83 = v16,
        v18 = v17(v8),
        (*((_DWORD *)v8 + 83) = v18 / v16) != 0) )
  {
    *((_DWORD *)v8 + 83) = (*(int (__thiscall **)(void *))(*(_DWORD *)v8 + 148))(v8) / v16;
    v19 = (*(int (__thiscall **)(void *))(*(_DWORD *)v8 + 148))(v8);
    v20 = v9->m_nOffX;
    uiLineSpace = (v19 - v16 * *((_DWORD *)v8 + 83)) >> 1;
    iOffX = v20;
    iOffY = v9->m_nOffY;
    UIUtil::UIUtil(&ui);
    v21 = 0;
    v90 = 0;
    i = 0;
    if ( *((_DWORD *)v8 + 83) > 0 )
    {
      while ( 1 )
      {
        v23 = *(_DWORD *)&v9->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0];
        v24 = (signed int)((char *)v9->m_arrItem.baseclass_0._Mylast
                         - *(_DWORD *)&v9->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
        pkParent = v21;
        uii = (int)v21;
        if ( v24 > (unsigned int)v21 )
        {
          while ( 1 )
          {
            if ( uii < v24 )
            {
              v25 = *(_DWORD *)(v23 + 8 * uii);
              if ( v25 )
              {
                v26 = 0;
                if ( uii )
                {
                  if ( *(_DWORD *)v25 == 2 )
                  {
                    pkFont = Font::Get(0);
                    if ( LODWORD(pkParenta[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][2]) )
                      pkFont = (PgFont *)LODWORD(pkParenta[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][2]);
                    v30 = *(_DWORD *)(v25 + 8);
                    v31 = *(_DWORD *)(v25 + 12);
                    if ( v30 == v31 || ((v31 - v30) & 0xFFFFFFFC) <= 0 )
                      _Val = 0;
                    else
                      _Val = *(_DWORD *)(**(_DWORD **)(*(_DWORD *)v30 + 36) + 24);
                    if ( v30 != v31 && ((v31 - v30) & 0xFFFFFFFC) > 0 )
                      v26 = *(_DWORD *)(**(_DWORD **)(*(_DWORD *)v30 + 36) + 20);
                    v32 = PgWinAbbreviateText::CreateWin(
                            iOffX + *(_DWORD *)(v25 + 56),
                            iOffY + *(_DWORD *)(v25 + 60),
                            v26,
                            _Val,
                            pkFont,
                            v21,
                            0,
                            0,
                            *(_DWORD *)(v25 + 92),
                            *(_BYTE *)(v25 + 88),
                            g_pkToolTipWin,
                            0x1Eu);
                    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
                      (NiRefObject *)v32,
                      5u);
                    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
                      (NiRefObject *)v32,
                      (unsigned int)"Column");
                    if ( bTextCmd )
                    {
                      v33 = v32->baseclass_0.m_spTextGeom.m_pObject;
                      if ( v33 )
                        v33->baseclass_0.m_bTextCmdOn = 1;
                    }
                    _Val = (unsigned int)v32;
                    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v21[1].baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.z,
                      &_Val);
                  }
                  v34 = *(_DWORD *)(v25 + 48);
                  if ( v34 )
                  {
                    v35 = 0;
                    _Val = 0;
                    if ( v34 )
                    {
                      do
                      {
                        v36 = *(_DWORD *)(v25 + 44);
                        v37 = *(_DWORD *)(v36 + 4);
                        while ( !*(_BYTE *)(v37 + 45) )
                        {
                          if ( *(_DWORD *)(v37 + 12) >= v35 )
                          {
                            v36 = v37;
                            v37 = *(_DWORD *)v37;
                          }
                          else
                          {
                            v37 = *(_DWORD *)(v37 + 8);
                          }
                        }
                        v38 = *(_DWORD *)(v25 + 44);
                        pkFont = (PgFont *)v36;
                        if ( v36 == v38 || v35 < *(_DWORD *)(v36 + 12) )
                        {
                          v85 = v38;
                          v39 = &v85;
                        }
                        else
                        {
                          v39 = (int *)&pkFont;
                        }
                        v40 = *v39;
                        if ( v40 != *(_DWORD *)(v25 + 44) )
                        {
                          v41 = v40 + 16;
                          v42 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
                                  (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)(v25 + 24),
                                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v40 + 16));
                          pkFont = (PgFont *)v42;
                          if ( v42 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)(v25 + 28) )
                            goto LABEL_111;
                          v43 = v42->_Myval.baseclass_0.first.baseclass_0._Mysize;
                          v44 = (int)&v42->_Myval;
                          if ( *(_DWORD *)(v44 + 20) >= 0x10u )
                            v44 = *(_DWORD *)v44;
                          if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v41,
                                 0,
                                 *(_DWORD *)(v41 + 16),
                                 (const char *)v44,
                                 v43) < 0 )
                          {
LABEL_111:
                            v84 = *(_DWORD *)(v25 + 28);
                            v45 = &v84;
                          }
                          else
                          {
                            v45 = (int *)&pkFont;
                          }
                          v46 = *v45;
                          if ( *v45 != *(_DWORD *)(v25 + 28) )
                          {
                            switch ( *(_DWORD *)(v46 + 40) )
                            {
                              case 0:
                                v47 = v46 + 12;
                                if ( *(_DWORD *)(v47 + 20) < 0x10u )
                                  v48 = (char *)v47;
                                else
                                  v48 = *(char **)v47;
                                v49 = (NiObjectNET *)UIUtil::CreateSpr(&ui, v48, 0);
                                v50 = (ItemIcon *)v49;
                                if ( *(_DWORD *)(v47 + 20) >= 0x10u )
                                  v47 = *(_DWORD *)v47;
                                NiObjectNET::SetName(v49, (const char *)v47);
                                v80 = (const unsigned int *)&pkFont;
                                goto LABEL_75;
                              case 2:
                                v51 = v46 + 12;
                                if ( *(_DWORD *)(v51 + 20) < 0x10u )
                                  v52 = (const char *)v51;
                                else
                                  v52 = *(const char **)v51;
                                v50 = (ItemIcon *)UIUtil::CreateCheckButton(&ui, 0, v52, 0, 2);
                                if ( *(_DWORD *)(v51 + 20) >= 0x10u )
                                  v51 = *(_DWORD *)v51;
                                v81 = (const char *)v51;
                                goto LABEL_74;
                              case 4:
                                v53 = v46 + 12;
                                if ( *(_DWORD *)(v53 + 20) < 0x10u )
                                  v54 = (char *)v53;
                                else
                                  v54 = *(char **)v53;
                                *(_QWORD *)&v55.r = *(_QWORD *)&Color::m_kDxWhiteColor;
                                *(_QWORD *)&v55.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
                                v56 = (NiObjectNET *)UIUtil::CreateTextNoSpr(&ui, v54, "-", COERCE_D3DXCOLOR(v55.r), 5u);
                                v50 = (ItemIcon *)v56;
                                if ( *(_DWORD *)(v53 + 20) >= 0x10u )
                                  v53 = *(_DWORD *)v53;
                                NiObjectNET::SetName(v56, (const char *)v53);
                                v57 = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                                v58 = Font::Get(0);
                                v57[113].__vecDelDtor((NiRefObject *)v50, (unsigned int)v58);
                                v80 = (const unsigned int *)&pkFont;
                                goto LABEL_75;
                              case 3:
                                v59 = ItemIcon::CreateWin(
                                        iOffX + *(_DWORD *)(v25 + 56),
                                        iOffY + *(_DWORD *)(v25 + 60),
                                        pkParent);
                                v50 = v59;
                                v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
                                ItemIcon::SetItem(v59, 0, 1);
                                ItemIcon::SetItemAsID(v50, 0);
                                v60 = v46 + 12;
                                if ( *(_DWORD *)(v46 + 32) >= 0x10u )
                                  v60 = *(_DWORD *)v60;
                                v81 = (const char *)v60;
LABEL_74:
                                NiObjectNET::SetName(
                                  &v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                                  v81);
                                v80 = (const unsigned int *)&pkFont;
LABEL_75:
                                pkFont = (PgFont *)v50;
                                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                                  (std::vector<unsigned long,std::allocator<unsigned long> > *)pkParent[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2],
                                  v80);
                                break;
                              default:
                                break;
                            }
                          }
                        }
                        v35 = _Val + 1;
                        _Val = v35;
                      }
                      while ( v35 < *(_DWORD *)(v25 + 48) );
                      v21 = pkParent;
                    }
                  }
                }
                else
                {
                  if ( *(_DWORD *)v25 == 1 )
                  {
                    v27 = *(PgSprData ***)(v25 + 8);
                    if ( v27 == *(PgSprData ***)(v25 + 12) )
                    {
                      v90 = -1;
                      UIUtil::_UIUtil(&ui);
                      goto LABEL_107;
                    }
                    v28 = ColumnBut::CreateWin(iOffX, uiLineSpace + iOffY, *v27, pkParenta, 0, 1u);
                    v29 = i;
                    v21 = (PgWin *)v28;
                    v28->baseclass_0.baseclass_0.m_eType = 1;
                    v28->m_nIndex = v29;
                    pkParent = (PgWin *)v28;
                    v28->m_bCheck = 0;
                    UIUtil::SetParent(&ui, &v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
                    UIUtil::SetOffset(&ui, 0, 0);
                    UIUtil::SetUIGeom(&ui, *(NiAVObject **)(v25 + 4));
                  }
                }
              }
            }
            v23 = *(_DWORD *)&kCreateInfo->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0];
            v24 = (signed int)((char *)kCreateInfo->m_arrItem.baseclass_0._Mylast
                             - *(_DWORD *)&kCreateInfo->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
            ++uii;
            if ( uii >= (unsigned int)v24 )
            {
              v8 = pkParenta;
              break;
            }
          }
        }
        v61 = *((_DWORD *)v8 + 75);
        v62 = (int)((char *)v8 + 296);
        if ( (unsigned int)&pkParent >= v61 || (v63 = *(_DWORD *)v62, *(_DWORD *)v62 > (unsigned int)&pkParent) )
        {
          v72 = *((_DWORD *)v8 + 76);
          if ( v61 == v72 )
          {
            v73 = (signed int)(v61 - *(_DWORD *)v62) >> 2;
            if ( (unsigned int)v73 > 0x3FFFFFFE )
LABEL_108:
              std::_Xlength_error("vector<T> too long");
            v74 = v73 + 1;
            v75 = (v72 - *(_DWORD *)v62) >> 2;
            if ( v74 > (unsigned int)v75 )
            {
              if ( 1073741823 - ((unsigned int)v75 >> 1) >= v75 )
                v76 = ((unsigned int)v75 >> 1) + v75;
              else
                v76 = 0;
              if ( v76 < v74 )
                v76 = v74;
              std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v62,
                v76);
              v8 = pkParenta;
            }
          }
          v77 = *(_DWORD *)(v62 + 4);
          if ( v77 )
            *(_DWORD *)v77 = v21;
        }
        else
        {
          v64 = *((_DWORD *)v8 + 76);
          v65 = (signed int)((char *)&pkParent - v63) >> 2;
          if ( v61 == v64 )
          {
            v66 = (signed int)(v61 - v63) >> 2;
            if ( (unsigned int)v66 > 0x3FFFFFFE )
              goto LABEL_108;
            v67 = v66 + 1;
            v68 = (v64 - v63) >> 2;
            if ( v67 > (unsigned int)v68 )
            {
              if ( 1073741823 - ((unsigned int)v68 >> 1) >= v68 )
                v69 = ((unsigned int)v68 >> 1) + v68;
              else
                v69 = 0;
              if ( v69 < v67 )
                v69 = v67;
              std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v62,
                v69);
              v8 = pkParenta;
            }
          }
          v70 = *(_DWORD *)(v62 + 4);
          v71 = *(_DWORD *)v62 + 4 * v65;
          if ( v70 )
            *(_DWORD *)v70 = *(_DWORD *)v71;
        }
        v78 = i;
        v79 = v83;
        *(_DWORD *)(v62 + 4) += 4;
        uiLineSpace += v79;
        i = v78 + 1;
        if ( v78 + 1 >= *((_DWORD *)v8 + 83) )
          break;
        v9 = kCreateInfo;
        v21 = 0;
      }
    }
    v90 = -1;
    UIUtil::_UIUtil(&ui);
    result = 1;
  }
  else
  {
LABEL_107:
    result = 0;
  }
  return result;
}

//----- (004522E0) --------------------------------------------------------
bool __thiscall SlideListWin::Create(SlideListWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgFont *pkFont, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd)
{
  this->m_pkFont = pkFont;
  return SlideListWin::Create(this, iXPos, iYPos, pkSprData, pkParent, kCreateInfo, uiLineSpace, bTextCmd);
}

//----- (00452320) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::SetText(SlideListWin::ListItem *this, unsigned int uiColumn, const char *szText)
{
  bool result; // al@2

  if ( uiColumn < (signed int)((char *)this->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48 )
  {
    if ( szText )
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                               + 48 * uiColumn),
        szText,
        strlen(szText));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00452390) --------------------------------------------------------
bool __thiscall SlideListWin::SetText(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn, const char *szText)
{
  bool result; // al@2

  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    SlideListWin::ListItem::SetText(
      *(SlideListWin::ListItem **)(*(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * uiIndex),
      uiColumn,
      szText);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004523D0) --------------------------------------------------------
void __thiscall SlideListWin::SlideListWin(SlideListWin *this)
{
  SlideListWin *v1; // esi@1

  v1 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlideListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlideListWin::_vftable_;
  *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecButList.baseclass_0._Mylast = 0;
  v1->m_vecButList.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_arrListItem.baseclass_0._Mylast = 0;
  v1->m_arrListItem.baseclass_0._Myend = 0;
  v1->m_fCurSlideBtnPos = 0.0;
  v1->m_nColumnCnt = 0;
  v1->m_nMaxViewListCnt = 0;
  v1->m_nSlideSplitCnt = 0;
  v1->m_nViewStartPos = 0;
  v1->m_pkFont = 0;
  v1->m_uiLClickMsg = -1;
  v1->m_uiRClickMsg = -1;
  v1->m_bCheckEnable = 1;
}
// 98432C: using guessed type int (__stdcall *SlideListWin___vftable_)(int uiFlags);
// 98434C: using guessed type int (__thiscall *SlideListWin___vftable_)(void *p, char);

//----- (00452450) --------------------------------------------------------
void __thiscall SlideListWin::_SlideListWin(SlideListWin *this)
{
  SlideListWin *v1; // esi@1
  boost::shared_ptr<SLWCreateInfo::Item> *v2; // eax@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlideListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlideListWin::_vftable_;
  v2 = *(boost::shared_ptr<SLWCreateInfo::Item> **)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      v2,
      (boost::shared_ptr<SLWCreateInfo::Item> *)this->m_arrListItem.baseclass_0._Mylast,
      (std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *)&this->m_arrListItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)this);
    operator delete(*(void **)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_arrListItem.baseclass_0._Mylast = 0;
  v1->m_arrListItem.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecButList.baseclass_0._Mylast = 0;
  v1->m_vecButList.baseclass_0._Myend = 0;
  PgWinSpr::_PgWinSpr(&v1->baseclass_0);
}
// 98432C: using guessed type int (__stdcall *SlideListWin___vftable_)(int uiFlags);
// 98434C: using guessed type int (__thiscall *SlideListWin___vftable_)(void *p, char);

//----- (00452520) --------------------------------------------------------
SlideListWin *__cdecl SlideListWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd)
{
  void *v7; // eax@1
  int v8; // eax@2
  int v9; // esi@2
  PgWin *v10; // edi@8
  SlideListWin *v11; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x16Cu);
  result.m_pObject = (PgWin *)v7;
  v13 = 0;
  if ( v7 )
  {
    SlideListWin::SlideListWin((SlideListWin *)v7);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)(v9 + 4));
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( SlideListWin::Create((SlideListWin *)v9, iXPos, iYPos, pkSprData, pkParent, kCreateInfo, uiLineSpace, bTextCmd) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    v11 = (SlideListWin *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    }
    v11 = 0;
  }
  return v11;
}

//----- (00452670) --------------------------------------------------------
SlideListWin *__cdecl SlideListWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgFont *pkFont, SLWCreateInfo *kCreateInfo, unsigned int uiLineSpace, bool bTextCmd)
{
  void *v8; // eax@1
  int v9; // eax@2
  int v10; // esi@2
  bool v11; // ST18_1@6
  unsigned int v12; // ST14_4@6
  PgFont *v13; // edi@8
  SlideListWin *result; // eax@13

  v8 = operator new(0x16Cu);
  if ( v8 )
  {
    SlideListWin::SlideListWin((SlideListWin *)v8);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  if ( v10 )
    InterlockedIncrement((volatile LONG *)(v10 + 4));
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v10);
  v11 = bTextCmd;
  v12 = uiLineSpace;
  *(_DWORD *)(v10 + 360) = pkFont;
  if ( SlideListWin::Create((SlideListWin *)v10, iXPos, iYPos, pkSprData, pkParent, kCreateInfo, v12, v11) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v10 + 356))(v10);
    if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
    result = (SlideListWin *)v10;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, (NiPointer<PgWin> *)&pkFont, (PgWin *)v10);
    if ( pkFont )
    {
      v13 = pkFont;
      if ( !InterlockedDecrement((volatile LONG *)&pkFont->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v13 )
          v13->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
      }
    }
    if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
    result = 0;
  }
  return result;
}

//----- (004527C0) --------------------------------------------------------
bool __thiscall SlideListWin::RemoveItem(SlideListWin *this, unsigned int uiIndex)
{
  SlideListWin *v2; // esi@1
  bool result; // al@2
  int v4; // eax@3
  int v5; // ecx@3
  int v6; // eax@8

  v2 = this;
  if ( uiIndex < (signed int)((char *)this->m_arrListItem.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
  {
    v4 = *(_DWORD *)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = 0;
    if ( (boost::shared_ptr<SlideListWin::ListItem> *)v4 != v2->m_arrListItem.baseclass_0._Mylast )
    {
      while ( v5 != uiIndex )
      {
        v4 += 8;
        ++v5;
        if ( (boost::shared_ptr<SlideListWin::ListItem> *)v4 == v2->m_arrListItem.baseclass_0._Mylast )
          goto LABEL_8;
      }
      std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
        (boost::shared_ptr<SLWCreateInfo::Item> *)(v4 + 8),
        (boost::shared_ptr<SLWCreateInfo::Item> *)v2->m_arrListItem.baseclass_0._Mylast,
        (boost::shared_ptr<SLWCreateInfo::Item> *)v4,
        (std::_Nonscalar_ptr_iterator_tag)uiIndex);
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        (boost::shared_ptr<SLWCreateInfo::Item> *)&v2->m_arrListItem.baseclass_0._Mylast[-1],
        (boost::shared_ptr<SLWCreateInfo::Item> *)v2->m_arrListItem.baseclass_0._Mylast,
        (std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *)&v2->m_arrListItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)uiIndex);
      --v2->m_arrListItem.baseclass_0._Mylast;
    }
LABEL_8:
    v6 = ((signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast
                     - *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3)
       - v2->m_nMaxViewListCnt
       + 1;
    v2->m_nSlideSplitCnt = v6;
    if ( v6 <= 0 )
      v2->m_nSlideSplitCnt = 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00452870) --------------------------------------------------------
bool __thiscall SLWCreateInfo::MakeTempData(SLWCreateInfo *this, NiSourceTexture *pkTexture)
{
  signed int v3; // ebx@3
  signed int v4; // eax@3
  int v5; // esi@5
  int v6; // ecx@7
  int v7; // eax@12
  NiAVObject *v8; // eax@14
  NiProperty *v9; // eax@15
  NiProperty *v10; // edi@15
  NiRefObjectVtbl *v11; // eax@16
  int v12; // eax@20
  PgSprData *v13; // eax@22
  PgSprData *v14; // edi@24
  unsigned int v15; // edi@27
  signed int v16; // ebx@28
  PgSprData **v17; // ecx@29
  int v18; // eax@30
  int v19; // ecx@33
  signed int v20; // edx@33
  int v21; // eax@36
  bool v22; // cf@36
  NiAVObject *v23; // eax@38
  NiProperty *v24; // eax@39
  NiProperty *v25; // edi@39
  NiRefObjectVtbl *v26; // eax@40
  int v27; // eax@45
  PgSprData *v28; // eax@47
  unsigned int v29; // ebx@49
  PgSprData *v30; // edi@49
  char *v31; // eax@54
  PgSprData *v32; // eax@56
  NiTexturingProperty *v33; // edi@58
  int v34; // ecx@61
  signed int v35; // edx@61
  int v36; // edx@63
  NiPointer<NiTexturingProperty> spTexProp; // [sp+0h] [bp-30h]@15
  int uiTop; // [sp+4h] [bp-2Ch]@47
  int uiLeft; // [sp+8h] [bp-28h]@47
  int nItemTop; // [sp+Ch] [bp-24h]@22
  int nItemLeft; // [sp+10h] [bp-20h]@22
  SLWCreateInfo *v42; // [sp+14h] [bp-1Ch]@1
  NiPointer<PgSprData> _Val; // [sp+18h] [bp-18h]@22
  int uiIndex; // [sp+1Ch] [bp-14h]@3
  NiSourceTexture *v45; // [sp+20h] [bp-10h]@36
  int v46; // [sp+2Ch] [bp-4h]@24

  v42 = this;
  if ( this->m_bMakeData )
    return 0;
  v3 = 0;
  v4 = (signed int)((char *)this->m_arrItem.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
  uiIndex = 0;
  if ( v4 )
  {
    do
    {
      if ( v3 < (signed int)((char *)this->m_arrItem.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 )
        v5 = *(_DWORD *)(*(_DWORD *)&this->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v3);
      else
        v5 = 0;
      v6 = *(_DWORD *)(v5 + 4);
      if ( !v6 || !((*(_DWORD *)(v5 + 76) - *(_DWORD *)(v5 + 72)) / 28) )
        return 0;
      if ( v3 )
      {
        if ( *(_DWORD *)v5 != 2 )
          return 0;
        v21 = *(_DWORD *)(v5 + 72);
        v22 = *(_DWORD *)(v21 + 20) < 0x10u;
        v45 = 0;
        if ( !v22 )
          v21 = *(_DWORD *)v21;
        v23 = (NiAVObject *)(*(int (__stdcall **)(int))(*(_DWORD *)v6 + 72))(v21);
        if ( v23 )
        {
          v24 = NiAVObject::GetProperty(v23, 8);
          v25 = v24;
          if ( v24 )
          {
            InterlockedIncrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
            v26 = v25[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
            v45 = (NiSourceTexture *)(v26 ? v26[1].__vecDelDtor : 0);
            if ( !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
              v25->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
          }
        }
        v27 = *(_DWORD *)(v5 + 72);
        if ( *(_DWORD *)(v27 + 20) >= 0x10u )
          v27 = *(_DWORD *)v27;
        v28 = PgSprData::Create(*(NiAVObject **)(v5 + 4), (const char *)v27, &uiTop, &uiLeft, v45);
        _Val.m_pObject = v28;
        if ( v28 )
          InterlockedIncrement((volatile LONG *)&v28->baseclass_0.m_uiRefCount);
        v29 = 1;
        v46 = 1;
        std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
          (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)(v5 + 8),
          &_Val);
        v30 = _Val.m_pObject;
        v46 = -1;
        if ( _Val.m_pObject && !InterlockedDecrement((volatile LONG *)&_Val.m_pObject->baseclass_0.m_uiRefCount) )
          v30->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
        *(_DWORD *)(v5 + 56) = uiTop - nItemLeft;
        *(_DWORD *)(v5 + 60) = uiLeft - nItemTop;
        if ( (unsigned int)((*(_DWORD *)(v5 + 76) - *(_DWORD *)(v5 + 72)) / 28) > 1 )
        {
          _Val.m_pObject = (PgSprData *)28;
          do
          {
            v31 = (char *)_Val.m_pObject + *(_DWORD *)(v5 + 72);
            if ( *((_DWORD *)v31 + 5) >= 0x10u )
              v31 = *(char **)v31;
            v32 = PgSprData::Create(*(NiAVObject **)(v5 + 4), v31, &uiTop, &uiLeft, v45);
            spTexProp.m_pObject = (NiTexturingProperty *)v32;
            if ( v32 )
              InterlockedIncrement((volatile LONG *)&v32->baseclass_0.m_uiRefCount);
            v46 = 2;
            std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
              (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)(v5 + 8),
              (NiPointer<PgSprData> *)&spTexProp);
            v33 = spTexProp.m_pObject;
            v46 = -1;
            if ( spTexProp.m_pObject
              && !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
              v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
            v34 = *(_DWORD *)(v5 + 76) - *(_DWORD *)(v5 + 72);
            _Val.m_pObject = (PgSprData *)((char *)_Val.m_pObject + 28);
            v35 = (signed int)(v34 + ((unsigned __int64)(-1840700269i64 * v34) >> 32)) >> 4;
            ++v29;
          }
          while ( v29 < v35 + ((unsigned int)v35 >> 31) );
        }
      }
      else
      {
        if ( *(_DWORD *)v5 != 1 )
          return 0;
        if ( !pkTexture )
        {
          v7 = *(_DWORD *)(v5 + 72);
          if ( *(_DWORD *)(v7 + 20) >= 0x10u )
            v7 = *(_DWORD *)v7;
          v8 = (NiAVObject *)(*(int (__stdcall **)(int))(*(_DWORD *)v6 + 72))(v7);
          if ( v8 )
          {
            v9 = NiAVObject::GetProperty(v8, 8);
            v10 = v9;
            spTexProp.m_pObject = (NiTexturingProperty *)v9;
            if ( v9 )
            {
              InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
              v11 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
              if ( v11 )
                pkTexture = (NiSourceTexture *)v11[1].__vecDelDtor;
              else
                pkTexture = 0;
            }
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
          }
        }
        v12 = *(_DWORD *)(v5 + 72);
        if ( *(_DWORD *)(v12 + 20) >= 0x10u )
          v12 = *(_DWORD *)v12;
        v13 = PgSprData::Create(*(NiAVObject **)(v5 + 4), (const char *)v12, &nItemLeft, &nItemTop, pkTexture);
        _Val.m_pObject = v13;
        if ( v13 )
          InterlockedIncrement((volatile LONG *)&v13->baseclass_0.m_uiRefCount);
        v46 = 0;
        std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
          (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)(v5 + 8),
          &_Val);
        v14 = _Val.m_pObject;
        v46 = -1;
        if ( _Val.m_pObject && !InterlockedDecrement((volatile LONG *)&_Val.m_pObject->baseclass_0.m_uiRefCount) )
          v14->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
        *(_DWORD *)(v5 + 56) = nItemLeft;
        *(_DWORD *)(v5 + 60) = nItemTop;
        v15 = 1;
        if ( (unsigned int)((*(_DWORD *)(v5 + 76) - *(_DWORD *)(v5 + 72)) / 28) <= 1 )
          goto LABEL_63;
        v16 = 28;
        do
        {
          v17 = *(PgSprData ***)(v5 + 8);
          if ( v17 != *(PgSprData ***)(v5 + 12) )
          {
            v18 = v16 + *(_DWORD *)(v5 + 72);
            if ( *(_DWORD *)(v18 + 20) >= 0x10u )
              v18 = *(_DWORD *)v18;
            PgSprData::Add(*v17, *(NiAVObject **)(v5 + 4), (const char *)v18);
          }
          v19 = *(_DWORD *)(v5 + 76) - *(_DWORD *)(v5 + 72);
          v20 = (signed int)(v19 + ((unsigned __int64)(-1840700269i64 * v19) >> 32)) >> 4;
          ++v15;
          v16 += 28;
        }
        while ( v15 < v20 + ((unsigned int)v20 >> 31) );
      }
      v3 = uiIndex;
LABEL_63:
      ++v3;
      v36 = (signed int)((char *)v42->m_arrItem.baseclass_0._Mylast
                       - *(_DWORD *)&v42->m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
      uiIndex = v3;
      this = v42;
    }
    while ( v3 < (unsigned int)v36 );
  }
  this->m_bMakeData = 1;
  return 1;
}

//----- (00452C40) --------------------------------------------------------
void __thiscall SlideListWin::RemoveAllList(SlideListWin *this)
{
  SlideListWin *v1; // esi@1
  boost::shared_ptr<SlideListWin::ListItem> *v2; // eax@1
  boost::shared_ptr<SLWCreateInfo::Item> *v3; // ecx@1
  boost::shared_ptr<SLWCreateInfo::Item> *v4; // edi@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = this->m_arrListItem.baseclass_0._Mylast;
  v3 = *(boost::shared_ptr<SLWCreateInfo::Item> **)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (boost::shared_ptr<SlideListWin::ListItem> *)v3 != v2 )
  {
    v4 = std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
           (boost::shared_ptr<SLWCreateInfo::Item> *)v2,
           (boost::shared_ptr<SLWCreateInfo::Item> *)v2,
           v3,
           __formal);
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      v4,
      (boost::shared_ptr<SLWCreateInfo::Item> *)v1->m_arrListItem.baseclass_0._Mylast,
      (std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *)&v1->m_arrListItem.baseclass_0._Alval,
      __formal);
    v1->m_arrListItem.baseclass_0._Mylast = (boost::shared_ptr<SlideListWin::ListItem> *)v4;
  }
  SlideListWin::UpdateViewList(v1);
  v1->m_nSlideSplitCnt = 0;
}

//----- (00452CA0) --------------------------------------------------------
void __thiscall SlideListWin::Sort(SlideListWin *this, int nColumnNum, bool bReverse, bool bSortByNUm)
{
  SlideListWin *v4; // esi@1
  boost::shared_ptr<SlideListWin::ListItem> *v5; // eax@1
  boost::shared_ptr<SlideListWin::ListItem> *v6; // ecx@1
  int v7; // [sp-8h] [bp-Ch]@1

  v4 = this;
  v5 = this->m_arrListItem.baseclass_0._Mylast;
  v6 = *(boost::shared_ptr<SlideListWin::ListItem> **)&this->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = v5 - v6;
  if ( bSortByNUm )
    std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListNumSorter>(
      v6,
      v5,
      v7,
      (SlideListWin::ListNumSorter)nColumnNum);
  else
    std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListSorter>(
      v6,
      v5,
      v7,
      (SlideListWin::ListSorter)nColumnNum);
  if ( bReverse )
    std::_Reverse<boost::shared_ptr<SlideListWin::ListItem>__>(
      *(boost::shared_ptr<SlideListWin::ListItem> **)&v4->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0],
      v4->m_arrListItem.baseclass_0._Mylast,
      (std::bidirectional_iterator_tag)bSortByNUm);
}

//----- (00452D00) --------------------------------------------------------
bool __thiscall SlideListWin::ListItem::SetColumnCnt(SlideListWin::ListItem *this, unsigned int uiColumnCnt)
{
  signed int v2; // edx@1
  std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *v3; // ecx@1
  bool result; // al@2

  v2 = (signed int)((char *)this->m_vecColumn.baseclass_0._Myend
                  - *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]);
  v3 = &this->m_vecColumn;
  if ( uiColumnCnt > v2 / 48 )
  {
    std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::reserve(
      v3,
      uiColumnCnt);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00452D40) --------------------------------------------------------
void __thiscall SlideListWin::ListItem::ListItem(SlideListWin::ListItem *this, const char *szText, int ncolumnCnt)
{
  SlideListWin::ListItem *v3; // edi@1
  unsigned int v4; // ebx@1

  v3 = this;
  v4 = 0;
  *(_DWORD *)&this->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_vecColumn.baseclass_0._Mylast = 0;
  this->m_vecColumn.baseclass_0._Myend = 0;
  if ( ncolumnCnt )
  {
    std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::resize(
      &this->m_vecColumn,
      ncolumnCnt);
    if ( szText )
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v3->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0],
        szText,
        strlen(szText));
      v4 = 0;
    }
    v3->m_dwData = v4;
    v3->m_bCheck = 0;
  }
}

//----- (00452DD0) --------------------------------------------------------
void __thiscall SlideListWin::ListItem::AddText(SlideListWin::ListItem *this, const char *szText)
{
  SlideListWin::ListItem *v2; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-40h]@1
  int v4; // [sp+1Ch] [bp-24h]@3
  int v5; // [sp+20h] [bp-20h]@3
  int v6; // [sp+24h] [bp-1Ch]@3
  int v7; // [sp+28h] [bp-18h]@3
  unsigned int v8; // [sp+30h] [bp-10h]@1
  int v9; // [sp+3Ch] [bp-4h]@1
  int v10; // [sp+40h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v9 = 0;
  if ( szText )
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szText, strlen(szText));
  v4 = 0;
  v7 = 255;
  v6 = 255;
  v5 = 255;
  v9 = 1;
  std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::push_back(
    &v2->m_vecColumn,
    (SlideListWin::ListItem::ColumnData *)&thisa);
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
}
// A85C00: using guessed type int __security_cookie;

//----- (00452E90) --------------------------------------------------------
int __thiscall SlideListWin::AddText(SlideListWin *this, const char *szText)
{
  SlideListWin *v2; // edi@1
  void *v3; // ebx@1
  unsigned int v4; // eax@2
  SlideListWin::ListItem *v5; // eax@6
  int result; // eax@10
  int v7; // ecx@10
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-14h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = operator new(0x18u);
  _Val.pn.pi_ = (boost::detail::sp_counted_base *)v3;
  v9 = 0;
  if ( v3 )
  {
    v4 = v2->m_nColumnCnt;
    *((_DWORD *)v3 + 2) = 0;
    *((_DWORD *)v3 + 3) = 0;
    *((_DWORD *)v3 + 4) = 0;
    LOBYTE(v9) = 1;
    if ( v4 )
    {
      std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::resize(
        (std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *)((char *)v3 + 8),
        v4);
      if ( szText )
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          *((std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)v3 + 2),
          szText,
          strlen(szText));
        v3 = _Val.pn.pi_;
      }
      *(_DWORD *)v3 = 0;
      *((_BYTE *)v3 + 4) = 0;
    }
    v5 = (SlideListWin::ListItem *)v3;
  }
  else
  {
    v5 = 0;
  }
  v9 = -1;
  _Val.px = v5;
  boost::detail::shared_count::shared_count(&_Val.pn, v5, 0);
  v9 = 2;
  std::vector<boost::shared_ptr<SlideListWin::ListItem>_std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>::push_back(
    &v2->m_arrListItem,
    &_Val);
  v9 = -1;
  if ( _Val.pn.pi_ )
    boost::detail::sp_counted_base::release(_Val.pn.pi_);
  result = ((signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast
                       - *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3)
         - 1;
  v7 = ((signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast
                   - *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3)
     - v2->m_nMaxViewListCnt
     + 1;
  v2->m_nSlideSplitCnt = v7;
  if ( v7 <= 0 )
    v2->m_nSlideSplitCnt = 0;
  return result;
}

//----- (00452FB0) --------------------------------------------------------
int __thiscall SlideListWin::AddHeadText(SlideListWin *this, const char *szText)
{
  SlideListWin *v2; // ebx@1
  void *v3; // ecx@1
  unsigned int v4; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > **v5; // esi@2
  boost::detail::sp_counted_base *v6; // eax@5
  SlideListWin::ListItem *v7; // eax@6
  int v8; // edi@8
  signed int v9; // edi@8
  boost::shared_ptr<SlideListWin::ListItem> *v10; // eax@8
  boost::shared_ptr<SlideListWin::ListItem> *v11; // edx@8
  int v12; // eax@13
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-14h]@1
  int v15; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = operator new(0x18u);
  _Val.pn.pi_ = (boost::detail::sp_counted_base *)v3;
  v15 = 0;
  if ( v3 )
  {
    v4 = v2->m_nColumnCnt;
    v5 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)((char *)v3 + 8);
    *((_DWORD *)v3 + 2) = 0;
    *((_DWORD *)v3 + 3) = 0;
    *((_DWORD *)v3 + 4) = 0;
    LOBYTE(v15) = 1;
    if ( v4 )
    {
      std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::resize(
        (std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *)((char *)v3 + 8),
        v4);
      if ( szText )
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(*v5, szText, strlen(szText));
      v6 = _Val.pn.pi_;
      _Val.pn.pi_->vfptr = 0;
      LOBYTE(v6->use_count_) = 0;
      v3 = v6;
    }
    v7 = (SlideListWin::ListItem *)v3;
  }
  else
  {
    v7 = 0;
  }
  v8 = *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  v15 = -1;
  _Val.px = v7;
  boost::detail::shared_count::shared_count(&_Val.pn, v7, 0);
  v9 = v8 - *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0];
  v15 = 2;
  std::vector<boost::shared_ptr<SlideListWin::ListItem>_std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>::push_back(
    &v2->m_arrListItem,
    &_Val);
  v10 = v2->m_arrListItem.baseclass_0._Mylast;
  v11 = (boost::shared_ptr<SlideListWin::ListItem> *)(*(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]
                                                    + 8 * (v9 >> 3));
  if ( v11 != &v10[-1] && &v10[-1] != v10 )
    std::_Rotate<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>>(
      v11,
      v10 - 1,
      v10,
      0,
      0);
  v15 = -1;
  if ( _Val.pn.pi_ )
    boost::detail::sp_counted_base::release(_Val.pn.pi_);
  v12 = ((signed int)((char *)v2->m_arrListItem.baseclass_0._Mylast
                    - *(_DWORD *)&v2->m_arrListItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 3)
      - v2->m_nMaxViewListCnt
      + 1;
  v2->m_nSlideSplitCnt = v12;
  if ( v12 <= 0 )
    v2->m_nSlideSplitCnt = 0;
  return 0;
}

//----- (00453110) --------------------------------------------------------
SLWCreateInfo::Item *__thiscall SLWCreateInfo::AddItemInfo(SLWCreateInfo *this, int nItemType)
{
  std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *v2; // esi@1
  void *v3; // eax@1
  SLWCreateInfo::Item *v4; // eax@2
  boost::shared_ptr<SLWCreateInfo::Item> spItem; // [sp+0h] [bp-18h]@4
  boost::checked_deleter<SLWCreateInfo::Item> d[4]; // [sp+8h] [bp-10h]@1
  int v8; // [sp+14h] [bp-4h]@1

  v2 = (std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *)this;
  v3 = operator new(0x60u);
  *(_DWORD *)&d[0].dummy[0] = v3;
  v8 = 0;
  if ( v3 )
    SLWCreateInfo::Item::Item((SLWCreateInfo::Item *)v3);
  else
    v4 = 0;
  d[0].dummy[0] = 0;
  v8 = -1;
  spItem.px = v4;
  boost::detail::shared_count::shared_count(&spItem.pn, v4, 0);
  v8 = 1;
  std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::push_back(
    v2,
    &spItem);
  v8 = -1;
  if ( spItem.pn.pi_ )
    boost::detail::sp_counted_base::release(spItem.pn.pi_);
  return spItem.px;
}

//----- (004531B0) --------------------------------------------------------
void __thiscall boost::detail::sp_counted_base::destruct(boost::detail::sp_counted_base *this)
{
  if ( this )
    ((void (__stdcall *)(_DWORD))this->vfptr->__vecDelDtor)(1);
}

//----- (004531C0) --------------------------------------------------------
void *__thiscall boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::_vector_deleting_destructor_(boost::detail::sp_counted_base_impl<PgNsTerrain::CPgBlockObject *,boost::checked_deleter<PgNsTerrain::CPgBlockObject> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (boost::detail::sp_counted_baseVtbl *)&boost::detail::sp_counted_base::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 984068: using guessed type int (__thiscall *boost__detail__sp_counted_base___vftable_)(void *p, char);

//----- (004531F0) --------------------------------------------------------
void *__thiscall boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::get_deleter(boost::detail::sp_counted_base_impl<SlideListWin::ListItem *,boost::checked_deleter<SlideListWin::ListItem> > *this, type_info *ti)
{
  boost::detail::sp_counted_base_impl<SlideListWin::ListItem *,boost::checked_deleter<SlideListWin::ListItem> > *v2; // esi@1
  void *result; // eax@2

  v2 = this;
  if ( type_info::operator__(ti, &boost::checked_deleter<SlideListWin::ListItem>__RTTI_Type_Descriptor_) )
    result = &v2->del;
  else
    result = 0;
  return result;
}

//----- (00453220) --------------------------------------------------------
void *__thiscall boost::detail::sp_counted_base_impl<SLWCreateInfo::Item___boost::checked_deleter<SLWCreateInfo::Item>>::get_deleter(boost::detail::sp_counted_base_impl<SLWCreateInfo::Item *,boost::checked_deleter<SLWCreateInfo::Item> > *this, type_info *ti)
{
  boost::detail::sp_counted_base_impl<SLWCreateInfo::Item *,boost::checked_deleter<SLWCreateInfo::Item> > *v2; // esi@1
  void *result; // eax@2

  v2 = this;
  if ( type_info::operator__(ti, &boost::checked_deleter<SLWCreateInfo::Item>__RTTI_Type_Descriptor_) )
    result = &v2->del;
  else
    result = 0;
  return result;
}

//----- (00453250) --------------------------------------------------------
SlideListWin::ListItem::ColumnData *__thiscall std::allocator<SlideListWin::ListItem::ColumnData>::allocate(std::allocator<SlideListWin::ListItem::ColumnData> *this, unsigned int _Count)
{
  SlideListWin::ListItem::ColumnData *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x5555555 || (result = (SlideListWin::ListItem::ColumnData *)operator new(48 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004532B0) --------------------------------------------------------
boost::shared_ptr<SlideListWin::ListItem> *__cdecl std::_Move_backward<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, boost::shared_ptr<SlideListWin::ListItem> *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  boost::shared_ptr<SlideListWin::ListItem> *v4; // eax@1
  SlideListWin::ListItem *v5; // edx@4
  int v6; // eax@4
  int v7; // edi@4
  boost::detail::sp_counted_base *v8; // ebx@8
  int v9; // eax@11
  int v10; // ST14_4@15
  volatile LONG *v12; // [sp-14h] [bp-1Ch]@11
  boost::shared_ptr<SlideListWin::ListItem> *_Lasta; // [sp+14h] [bp+Ch]@4

  v4 = _Last;
  if ( _First != _Last )
  {
    while ( 1 )
    {
      v5 = v4[-1].px;
      v6 = (int)&v4[-1];
      _Dest[-1].px = v5;
      v7 = *(_DWORD *)(v6 + 4);
      _Lasta = (boost::shared_ptr<SlideListWin::ListItem> *)v6;
      --_Dest;
      if ( v7 )
      {
        while ( InterlockedExchange((volatile LONG *)(v7 + 12), 1) )
          Sleep(1u);
        ++*(_DWORD *)(v7 + 4);
        InterlockedExchange((volatile LONG *)(v7 + 12), 0);
      }
      v8 = _Dest->pn.pi_;
      if ( v8 )
      {
        while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
          Sleep(1u);
        v9 = v8->use_count_ - 1;
        v8->use_count_ = v9;
        v12 = (volatile LONG *)&v8->mtx_;
        if ( v9 )
        {
          InterlockedExchange(v12, 0);
        }
        else
        {
          InterlockedExchange(v12, 0);
          v8->vfptr->dispose(v8);
          while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
            Sleep(1u);
          v10 = v8->weak_count_ - 1;
          v8->weak_count_ = v10;
          InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 0);
          if ( !v10 )
            v8->vfptr->destruct(v8);
        }
      }
      _Dest->pn.pi_ = (boost::detail::sp_counted_base *)v7;
      if ( _Lasta == _First )
        break;
      v4 = _Lasta;
    }
  }
  return _Dest;
}

//----- (004533C0) --------------------------------------------------------
bool __thiscall SlideListWin::ListNumSorter::operator__(SlideListWin::ListNumSorter *this, boost::shared_ptr<SlideListWin::ListItem> *spItem1, boost::shared_ptr<SlideListWin::ListItem> *spItem2)
{
  int v3; // ecx@1
  SlideListWin::ListItem *v4; // esi@1
  bool result; // al@2
  SlideListWin::ListItem *v6; // edi@3
  const char *v7; // ebx@5
  int v8; // eax@6
  const char *v9; // esi@10
  int v10; // eax@11
  double v11; // ST14_8@14

  v3 = this->m_nColumnNumForSort;
  v4 = spItem1->px;
  if ( v3 < (signed int)((char *)spItem1->px->m_vecColumn.baseclass_0._Mylast
                       - *(_DWORD *)&spItem1->px->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
          / 48 )
  {
    v6 = spItem2->px;
    result = v3 < (signed int)((char *)spItem2->px->m_vecColumn.baseclass_0._Mylast
                             - *(_DWORD *)&spItem2->px->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                / 48
          && (v3 < (unsigned int)((signed int)((char *)v4->m_vecColumn.baseclass_0._Mylast
                                             - *(_DWORD *)&v4->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                                / 48) ? ((v8 = *(_DWORD *)&v4->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]
                                             + 48 * v3,
                                          *(_DWORD *)(v8 + 20) < 0x10u) ? (v7 = (const char *)(*(_DWORD *)&v4->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                             + 48 * v3)) : (v7 = *(const char **)v8)) : (v7 = 0),
              v3 < (unsigned int)((signed int)((char *)v6->m_vecColumn.baseclass_0._Mylast
                                             - *(_DWORD *)&v6->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                                / 48) ? ((v10 = *(_DWORD *)&v6->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]
                                              + 48 * v3,
                                          *(_DWORD *)(v10 + 20) < 0x10u) ? (v9 = (const char *)(*(_DWORD *)&v6->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                              + 48 * v3)) : (v9 = *(const char **)v10)) : (v9 = 0),
              v11 = atof(v7),
              atof(v9) > v11);
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (004534C0) --------------------------------------------------------
bool __thiscall SlideListWin::ListSorter::operator__(SlideListWin::ListSorter *this, boost::shared_ptr<SlideListWin::ListItem> *spItem1, boost::shared_ptr<SlideListWin::ListItem> *spItem2)
{
  int v3; // ecx@1
  SlideListWin::ListItem *v4; // edi@1
  bool result; // al@2
  SlideListWin::ListItem *v6; // esi@3
  const char *v7; // esi@6
  int v8; // eax@7
  int v9; // eax@11
  int v10; // kr00_4@14

  v3 = this->m_nColumnNumForSort;
  v4 = spItem1->px;
  if ( v3 < (signed int)((char *)spItem1->px->m_vecColumn.baseclass_0._Mylast
                       - *(_DWORD *)&spItem1->px->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
          / 48 )
  {
    v6 = spItem2->px;
    if ( v3 < (signed int)((char *)spItem2->px->m_vecColumn.baseclass_0._Mylast
                         - *(_DWORD *)&spItem2->px->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
            / 48 )
    {
      if ( v3 < (unsigned int)((signed int)((char *)v6->m_vecColumn.baseclass_0._Mylast
                                          - *(_DWORD *)&v6->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                             / 48) )
      {
        v8 = *(_DWORD *)&v6->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * v3;
        if ( *(_DWORD *)(v8 + 20) < 0x10u )
          v7 = (const char *)(*(_DWORD *)&v6->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * v3);
        else
          v7 = *(const char **)v8;
      }
      else
      {
        v7 = 0;
      }
      if ( v3 < (unsigned int)((signed int)((char *)v4->m_vecColumn.baseclass_0._Mylast
                                          - *(_DWORD *)&v4->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0])
                             / 48) )
      {
        v9 = *(_DWORD *)&v4->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] + 48 * v3;
        if ( *(_DWORD *)(v9 + 20) >= 0x10u )
          v9 = *(_DWORD *)v9;
      }
      else
      {
        v9 = 0;
      }
      v10 = strcmp((const char *)v9, v7);
      if ( v10 )
        result = -(v10 < 0) - ((v10 < 0) - 1) < 0;
      else
        result = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (004535C0) --------------------------------------------------------
void __thiscall std::allocator<boost::shared_ptr<SlideListWin::ListItem>>::construct(std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *this, boost::shared_ptr<SLWCreateInfo::Item> *_Ptr, boost::shared_ptr<SLWCreateInfo::Item> *_Val)
{
  boost::detail::sp_counted_base *v3; // esi@2

  if ( _Ptr )
  {
    _Ptr->px = _Val->px;
    v3 = _Val->pn.pi_;
    _Ptr->pn.pi_ = v3;
    if ( v3 )
    {
      while ( InterlockedExchange((volatile LONG *)&v3->mtx_.l_, 1) )
        Sleep(1u);
      ++v3->use_count_;
      InterlockedExchange((volatile LONG *)&v3->mtx_.l_, 0);
    }
  }
}

//----- (00453610) --------------------------------------------------------
void __cdecl std::_Construct<boost::shared_ptr<SLWCreateInfo::Item>_boost::shared_ptr<SLWCreateInfo::Item>_const__>(boost::shared_ptr<SLWCreateInfo::Item> *_Ptr, boost::shared_ptr<SLWCreateInfo::Item> *_Val)
{
  boost::detail::sp_counted_base *v2; // esi@2

  if ( _Ptr )
  {
    _Ptr->px = _Val->px;
    v2 = _Val->pn.pi_;
    _Ptr->pn.pi_ = v2;
    if ( v2 )
    {
      while ( InterlockedExchange((volatile LONG *)&v2->mtx_.l_, 1) )
        Sleep(1u);
      ++v2->use_count_;
      InterlockedExchange((volatile LONG *)&v2->mtx_.l_, 0);
    }
  }
}

//----- (00453660) --------------------------------------------------------
void __cdecl std::_Push_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Top, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListNumSorter _Pred)
{
  int v5; // eax@1
  boost::shared_ptr<SlideListWin::ListItem> *v6; // edi@4
  boost::shared_ptr<SlideListWin::ListItem> *v7; // ebx@4
  boost::detail::sp_counted_base *v8; // ebx@5
  boost::detail::sp_counted_base *v9; // edi@9
  int v10; // eax@12
  boost::detail::sp_counted_base *v11; // ebx@17
  volatile LONG *v12; // ebx@18
  boost::detail::sp_counted_base *v13; // ebx@21
  int v14; // eax@24
  volatile LONG *v15; // [sp-8h] [bp-1Ch]@12
  volatile LONG *v16; // [sp-8h] [bp-1Ch]@24
  int _Idx; // [sp+10h] [bp-4h]@1
  boost::detail::sp_counted_base *_Topa; // [sp+24h] [bp+10h]@17
  int _Vala; // [sp+28h] [bp+14h]@29

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top >= _Hole )
  {
LABEL_16:
    v6 = _First;
  }
  else
  {
    while ( 1 )
    {
      v6 = _First;
      v7 = &_First[v5];
      if ( !SlideListWin::ListNumSorter::operator__(&_Pred, &_First[v5], _Val) )
        break;
      _First[_Hole].px = v7->px;
      v8 = v7->pn.pi_;
      if ( v8 )
      {
        while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
          Sleep(1u);
        ++v8->use_count_;
        InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 0);
        v6 = _First;
      }
      v9 = v6[_Hole].pn.pi_;
      if ( v9 )
      {
        while ( InterlockedExchange((volatile LONG *)&v9->mtx_.l_, 1) )
          Sleep(1u);
        v10 = v9->use_count_ - 1;
        v9->use_count_ = v10;
        v15 = (volatile LONG *)&v9->mtx_;
        if ( v10 )
        {
          InterlockedExchange(v15, 0);
        }
        else
        {
          InterlockedExchange(v15, 0);
          v9->vfptr->dispose(v9);
          boost::detail::sp_counted_base::weak_release(v9);
        }
      }
      _First[_Hole].pn.pi_ = v8;
      _Hole = _Idx;
      _Idx = (_Idx - 1) / 2;
      if ( _Top >= _Hole )
        goto LABEL_16;
      v5 = _Idx;
    }
  }
  v6[_Hole].px = _Val->px;
  v11 = _Val->pn.pi_;
  _Topa = v11;
  if ( v11 )
  {
    v12 = (volatile LONG *)&v11->mtx_;
    while ( InterlockedExchange(v12, 1) )
      Sleep(1u);
    ++_Topa->use_count_;
    InterlockedExchange(v12, 0);
  }
  v13 = v6[_Hole].pn.pi_;
  if ( v13 )
  {
    while ( InterlockedExchange((volatile LONG *)&v13->mtx_.l_, 1) )
      Sleep(1u);
    v14 = v13->use_count_ - 1;
    v13->use_count_ = v14;
    v16 = (volatile LONG *)&v13->mtx_;
    if ( v14 )
    {
      InterlockedExchange(v16, 0);
LABEL_26:
      _First[_Hole].pn.pi_ = _Topa;
      return;
    }
    InterlockedExchange(v16, 0);
    v13->vfptr->dispose(v13);
    while ( InterlockedExchange((volatile LONG *)&v13->mtx_.l_, 1) )
      Sleep(1u);
    _Vala = v13->weak_count_ - 1;
    v13->weak_count_ = _Vala;
    InterlockedExchange((volatile LONG *)&v13->mtx_.l_, 0);
    if ( _Vala )
      goto LABEL_26;
    v13->vfptr->destruct(v13);
    _First[_Hole].pn.pi_ = _Topa;
  }
  else
  {
    v6[_Hole].pn.pi_ = _Topa;
  }
}

//----- (00453860) --------------------------------------------------------
void __cdecl std::_Push_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Top, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListSorter _Pred)
{
  int v5; // eax@1
  boost::shared_ptr<SlideListWin::ListItem> *v6; // edi@4
  boost::shared_ptr<SlideListWin::ListItem> *v7; // ebx@4
  boost::detail::sp_counted_base *v8; // ebx@5
  boost::detail::sp_counted_base *v9; // edi@9
  int v10; // eax@12
  boost::detail::sp_counted_base *v11; // ebx@17
  volatile LONG *v12; // ebx@18
  boost::detail::sp_counted_base *v13; // ebx@21
  int v14; // eax@24
  volatile LONG *v15; // [sp-8h] [bp-1Ch]@12
  volatile LONG *v16; // [sp-8h] [bp-1Ch]@24
  int _Idx; // [sp+10h] [bp-4h]@1
  boost::detail::sp_counted_base *_Topa; // [sp+24h] [bp+10h]@17
  int _Vala; // [sp+28h] [bp+14h]@29

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top >= _Hole )
  {
LABEL_16:
    v6 = _First;
  }
  else
  {
    while ( 1 )
    {
      v6 = _First;
      v7 = &_First[v5];
      if ( !SlideListWin::ListSorter::operator__(&_Pred, &_First[v5], _Val) )
        break;
      _First[_Hole].px = v7->px;
      v8 = v7->pn.pi_;
      if ( v8 )
      {
        while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
          Sleep(1u);
        ++v8->use_count_;
        InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 0);
        v6 = _First;
      }
      v9 = v6[_Hole].pn.pi_;
      if ( v9 )
      {
        while ( InterlockedExchange((volatile LONG *)&v9->mtx_.l_, 1) )
          Sleep(1u);
        v10 = v9->use_count_ - 1;
        v9->use_count_ = v10;
        v15 = (volatile LONG *)&v9->mtx_;
        if ( v10 )
        {
          InterlockedExchange(v15, 0);
        }
        else
        {
          InterlockedExchange(v15, 0);
          v9->vfptr->dispose(v9);
          boost::detail::sp_counted_base::weak_release(v9);
        }
      }
      _First[_Hole].pn.pi_ = v8;
      _Hole = _Idx;
      _Idx = (_Idx - 1) / 2;
      if ( _Top >= _Hole )
        goto LABEL_16;
      v5 = _Idx;
    }
  }
  v6[_Hole].px = _Val->px;
  v11 = _Val->pn.pi_;
  _Topa = v11;
  if ( v11 )
  {
    v12 = (volatile LONG *)&v11->mtx_;
    while ( InterlockedExchange(v12, 1) )
      Sleep(1u);
    ++_Topa->use_count_;
    InterlockedExchange(v12, 0);
  }
  v13 = v6[_Hole].pn.pi_;
  if ( v13 )
  {
    while ( InterlockedExchange((volatile LONG *)&v13->mtx_.l_, 1) )
      Sleep(1u);
    v14 = v13->use_count_ - 1;
    v13->use_count_ = v14;
    v16 = (volatile LONG *)&v13->mtx_;
    if ( v14 )
    {
      InterlockedExchange(v16, 0);
LABEL_26:
      _First[_Hole].pn.pi_ = _Topa;
      return;
    }
    InterlockedExchange(v16, 0);
    v13->vfptr->dispose(v13);
    while ( InterlockedExchange((volatile LONG *)&v13->mtx_.l_, 1) )
      Sleep(1u);
    _Vala = v13->weak_count_ - 1;
    v13->weak_count_ = _Vala;
    InterlockedExchange((volatile LONG *)&v13->mtx_.l_, 0);
    if ( _Vala )
      goto LABEL_26;
    v13->vfptr->destruct(v13);
    _First[_Hole].pn.pi_ = _Topa;
  }
  else
  {
    v6[_Hole].pn.pi_ = _Topa;
  }
}

//----- (00453A60) --------------------------------------------------------
NiPointer<PgSprData> *__cdecl std::_Uninit_move<NiPointer<ScreenBoardTexture::DescInfo>___NiPointer<ScreenBoardTexture::DescInfo>___std::allocator<NiPointer<ScreenBoardTexture::DescInfo>>_NiPointer<ScreenBoardTexture::DescInfo>>(NiPointer<PgSprData> *_First, NiPointer<PgSprData> *_Last, NiPointer<PgSprData> *_Dest, std::allocator<NiPointer<PgSprData> > *_Al, NiPointer<PgSprData> *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  NiPointer<PgSprData> *v6; // esi@1
  NiPointer<PgSprData> *v7; // edi@2
  NiPointer<PgSprData> v8; // eax@4
  NiPointer<PgSprData> *result; // eax@7

  v6 = _First;
  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v7 = _Dest;
    do
    {
      if ( v7 )
      {
        v8.m_pObject = v6->m_pObject;
        v7->m_pObject = v6->m_pObject;
        if ( v8.m_pObject )
          InterlockedIncrement((volatile LONG *)&v8.m_pObject->baseclass_0.m_uiRefCount);
      }
      ++v6;
      ++v7;
    }
    while ( v6 != _Last );
    result = v7;
  }
  return result;
}

//----- (00453AB0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal)
{
  boost::shared_ptr<SlideListWin::ListItem> *v4; // edi@2
  boost::detail::sp_counted_base *v5; // ebx@5
  SlideListWin::ListItem *v6; // ecx@5
  boost::shared_ptr<SlideListWin::ListItem> *v7; // ST04_4@10
  boost::shared_ptr<SlideListWin::ListItem> *v8; // edi@10
  boost::detail::sp_counted_base *v9; // edi@14
  int v10; // eax@17
  boost::shared_ptr<SlideListWin::ListItem> *v11; // ecx@18
  boost::shared_ptr<SlideListWin::ListItem> *v12; // edi@21
  int v13; // edi@24
  volatile LONG v14; // ebx@28
  int v15; // eax@31
  volatile LONG v16; // edi@44
  int v17; // eax@47
  volatile LONG *v18; // ebx@56
  boost::detail::sp_counted_base *v19; // edi@58
  int v20; // eax@58
  volatile LONG *v21; // [sp-18h] [bp-44h]@31
  volatile LONG *v22; // [sp-18h] [bp-44h]@47
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-2Ch]@5
  int v24; // [sp+8h] [bp-24h]@35
  boost::shared_ptr<SlideListWin::ListItem> *_First1; // [sp+Ch] [bp-20h]@5
  int v26; // [sp+10h] [bp-1Ch]@24
  boost::shared_ptr<SlideListWin::ListItem> *spItem2; // [sp+14h] [bp-18h]@3
  boost::shared_ptr<SlideListWin::ListItem> *_Next; // [sp+18h] [bp-14h]@2
  volatile LONG *_Next1; // [sp+1Ch] [bp-10h]@5
  int v30; // [sp+28h] [bp-4h]@9

  if ( _First != _Last )
  {
    v4 = _First + 1;
    _Next = _First + 1;
    if ( &_First[1] != _Last )
    {
      spItem2 = _First;
      while ( 1 )
      {
        v5 = spItem2[1].pn.pi_;
        v6 = v4->px;
        _Next1 = (volatile LONG *)v4;
        _Val.px = v6;
        _First1 = spItem2 + 2;
        _Val.pn.pi_ = v5;
        if ( v5 )
        {
          while ( InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 1) )
            Sleep(1u);
          ++v5->use_count_;
          InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 0);
          v4 = _Next;
        }
        v30 = 0;
        if ( SlideListWin::ListNumSorter::operator__(&_Pred, &_Val, _First) )
        {
          v7 = v4;
          v8 = _First;
          std::_Move_backward<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
            _First,
            v7,
            _First1,
            (std::_Nonscalar_ptr_iterator_tag)_First);
          _First->px = _Val.px;
          if ( v5 )
          {
            while ( InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 1) )
              Sleep(1u);
            ++v5->use_count_;
            InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 0);
            v8 = _First;
          }
          v9 = v8->pn.pi_;
          if ( v9 )
          {
            _Next1 = (volatile LONG *)&v9->mtx_;
            if ( InterlockedExchange((volatile LONG *)&v9->mtx_.l_, 1) )
            {
              do
                Sleep(1u);
              while ( InterlockedExchange(_Next1, 1) );
            }
            v10 = v9->use_count_ - 1;
            v9->use_count_ = v10;
            if ( v10 )
            {
              InterlockedExchange(_Next1, 0);
              v11 = _First;
              goto LABEL_55;
            }
            InterlockedExchange(_Next1, 0);
            v9->vfptr->dispose(v9);
            boost::detail::sp_counted_base::weak_release(v9);
          }
          v11 = _First;
        }
        else
        {
          v12 = spItem2;
          _First1 = spItem2;
          if ( SlideListWin::ListNumSorter::operator__(&_Pred, &_Val, spItem2) )
          {
            while ( 1 )
            {
              *_Next1 = (volatile LONG)v12->px;
              v13 = (int)v12->pn.pi_;
              v26 = v13;
              if ( v13 )
              {
                while ( InterlockedExchange((volatile LONG *)(v13 + 12), 1) )
                  Sleep(1u);
                ++*(_DWORD *)(v13 + 4);
                InterlockedExchange((volatile LONG *)(v13 + 12), 0);
              }
              v14 = _Next1[1];
              if ( v14 )
              {
                while ( InterlockedExchange((volatile LONG *)(v14 + 12), 1) )
                  Sleep(1u);
                v15 = *(_DWORD *)(v14 + 4) - 1;
                *(_DWORD *)(v14 + 4) = v15;
                v21 = (volatile LONG *)(v14 + 12);
                if ( v15 )
                {
                  InterlockedExchange(v21, 0);
                }
                else
                {
                  InterlockedExchange(v21, 0);
                  (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v14 + 4))(v14);
                  while ( InterlockedExchange((volatile LONG *)(v14 + 12), 1) )
                    Sleep(1u);
                  v24 = *(_DWORD *)(v14 + 8) - 1;
                  *(_DWORD *)(v14 + 8) = v24;
                  InterlockedExchange((volatile LONG *)(v14 + 12), 0);
                  if ( !v24 )
                    (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v14 + 8))(v14);
                }
                v13 = v26;
              }
              _Next1[1] = v13;
              _Next1 = (volatile LONG *)_First1;
              --_First1;
              if ( !SlideListWin::ListNumSorter::operator__(&_Pred, &_Val, _First1) )
                break;
              v12 = _First1;
            }
            v5 = _Val.pn.pi_;
          }
          *_Next1 = (signed int)_Val.px;
          if ( v5 )
          {
            while ( InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 1) )
              Sleep(1u);
            ++v5->use_count_;
            InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 0);
          }
          v16 = _Next1[1];
          if ( v16 )
          {
            while ( InterlockedExchange((volatile LONG *)(v16 + 12), 1) )
              Sleep(1u);
            v17 = *(_DWORD *)(v16 + 4) - 1;
            *(_DWORD *)(v16 + 4) = v17;
            v22 = (volatile LONG *)(v16 + 12);
            if ( v17 )
            {
              InterlockedExchange(v22, 0);
            }
            else
            {
              InterlockedExchange(v22, 0);
              (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v16 + 4))(v16);
              while ( InterlockedExchange((volatile LONG *)(v16 + 12), 1) )
                Sleep(1u);
              v24 = *(_DWORD *)(v16 + 8) - 1;
              *(_DWORD *)(v16 + 8) = v24;
              InterlockedExchange((volatile LONG *)(v16 + 12), 0);
              if ( !v24 )
                (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v16 + 8))(v16);
            }
            v5 = _Val.pn.pi_;
          }
          v11 = (boost::shared_ptr<SlideListWin::ListItem> *)_Next1;
        }
LABEL_55:
        v11->pn.pi_ = v5;
        v30 = -1;
        if ( v5 )
        {
          v18 = (volatile LONG *)&v5->mtx_;
          while ( InterlockedExchange(v18, 1) )
            Sleep(1u);
          v19 = _Val.pn.pi_;
          v20 = _Val.pn.pi_->use_count_ - 1;
          _Val.pn.pi_->use_count_ = v20;
          if ( v20 )
          {
            InterlockedExchange(v18, 0);
          }
          else
          {
            InterlockedExchange(v18, 0);
            v19->vfptr->dispose(v19);
            while ( InterlockedExchange(v18, 1) )
              Sleep(1u);
            v24 = v19->weak_count_ - 1;
            v19->weak_count_ = v24;
            InterlockedExchange(v18, 0);
            if ( !v24 )
              v19->vfptr->destruct(v19);
          }
        }
        ++spItem2;
        ++_Next;
        if ( _Next == _Last )
          return;
        v4 = _Next;
      }
    }
  }
}

//----- (00453E80) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal)
{
  boost::shared_ptr<SlideListWin::ListItem> *v4; // edi@2
  boost::detail::sp_counted_base *v5; // ebx@5
  SlideListWin::ListItem *v6; // ecx@5
  boost::shared_ptr<SlideListWin::ListItem> *v7; // ST04_4@10
  boost::shared_ptr<SlideListWin::ListItem> *v8; // edi@10
  boost::detail::sp_counted_base *v9; // edi@14
  int v10; // eax@17
  boost::shared_ptr<SlideListWin::ListItem> *v11; // ecx@18
  boost::shared_ptr<SlideListWin::ListItem> *v12; // edi@21
  int v13; // edi@24
  volatile LONG v14; // ebx@28
  int v15; // eax@31
  volatile LONG v16; // edi@44
  int v17; // eax@47
  volatile LONG *v18; // ebx@56
  boost::detail::sp_counted_base *v19; // edi@58
  int v20; // eax@58
  volatile LONG *v21; // [sp-18h] [bp-44h]@31
  volatile LONG *v22; // [sp-18h] [bp-44h]@47
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-2Ch]@5
  int v24; // [sp+8h] [bp-24h]@35
  boost::shared_ptr<SlideListWin::ListItem> *_First1; // [sp+Ch] [bp-20h]@5
  int v26; // [sp+10h] [bp-1Ch]@24
  boost::shared_ptr<SlideListWin::ListItem> *spItem2; // [sp+14h] [bp-18h]@3
  boost::shared_ptr<SlideListWin::ListItem> *_Next; // [sp+18h] [bp-14h]@2
  volatile LONG *_Next1; // [sp+1Ch] [bp-10h]@5
  int v30; // [sp+28h] [bp-4h]@9

  if ( _First != _Last )
  {
    v4 = _First + 1;
    _Next = _First + 1;
    if ( &_First[1] != _Last )
    {
      spItem2 = _First;
      while ( 1 )
      {
        v5 = spItem2[1].pn.pi_;
        v6 = v4->px;
        _Next1 = (volatile LONG *)v4;
        _Val.px = v6;
        _First1 = spItem2 + 2;
        _Val.pn.pi_ = v5;
        if ( v5 )
        {
          while ( InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 1) )
            Sleep(1u);
          ++v5->use_count_;
          InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 0);
          v4 = _Next;
        }
        v30 = 0;
        if ( SlideListWin::ListSorter::operator__(&_Pred, &_Val, _First) )
        {
          v7 = v4;
          v8 = _First;
          std::_Move_backward<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
            _First,
            v7,
            _First1,
            (std::_Nonscalar_ptr_iterator_tag)_First);
          _First->px = _Val.px;
          if ( v5 )
          {
            while ( InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 1) )
              Sleep(1u);
            ++v5->use_count_;
            InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 0);
            v8 = _First;
          }
          v9 = v8->pn.pi_;
          if ( v9 )
          {
            _Next1 = (volatile LONG *)&v9->mtx_;
            if ( InterlockedExchange((volatile LONG *)&v9->mtx_.l_, 1) )
            {
              do
                Sleep(1u);
              while ( InterlockedExchange(_Next1, 1) );
            }
            v10 = v9->use_count_ - 1;
            v9->use_count_ = v10;
            if ( v10 )
            {
              InterlockedExchange(_Next1, 0);
              v11 = _First;
              goto LABEL_55;
            }
            InterlockedExchange(_Next1, 0);
            v9->vfptr->dispose(v9);
            boost::detail::sp_counted_base::weak_release(v9);
          }
          v11 = _First;
        }
        else
        {
          v12 = spItem2;
          _First1 = spItem2;
          if ( SlideListWin::ListSorter::operator__(&_Pred, &_Val, spItem2) )
          {
            while ( 1 )
            {
              *_Next1 = (volatile LONG)v12->px;
              v13 = (int)v12->pn.pi_;
              v26 = v13;
              if ( v13 )
              {
                while ( InterlockedExchange((volatile LONG *)(v13 + 12), 1) )
                  Sleep(1u);
                ++*(_DWORD *)(v13 + 4);
                InterlockedExchange((volatile LONG *)(v13 + 12), 0);
              }
              v14 = _Next1[1];
              if ( v14 )
              {
                while ( InterlockedExchange((volatile LONG *)(v14 + 12), 1) )
                  Sleep(1u);
                v15 = *(_DWORD *)(v14 + 4) - 1;
                *(_DWORD *)(v14 + 4) = v15;
                v21 = (volatile LONG *)(v14 + 12);
                if ( v15 )
                {
                  InterlockedExchange(v21, 0);
                }
                else
                {
                  InterlockedExchange(v21, 0);
                  (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v14 + 4))(v14);
                  while ( InterlockedExchange((volatile LONG *)(v14 + 12), 1) )
                    Sleep(1u);
                  v24 = *(_DWORD *)(v14 + 8) - 1;
                  *(_DWORD *)(v14 + 8) = v24;
                  InterlockedExchange((volatile LONG *)(v14 + 12), 0);
                  if ( !v24 )
                    (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v14 + 8))(v14);
                }
                v13 = v26;
              }
              _Next1[1] = v13;
              _Next1 = (volatile LONG *)_First1;
              --_First1;
              if ( !SlideListWin::ListSorter::operator__(&_Pred, &_Val, _First1) )
                break;
              v12 = _First1;
            }
            v5 = _Val.pn.pi_;
          }
          *_Next1 = (signed int)_Val.px;
          if ( v5 )
          {
            while ( InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 1) )
              Sleep(1u);
            ++v5->use_count_;
            InterlockedExchange((volatile LONG *)&v5->mtx_.l_, 0);
          }
          v16 = _Next1[1];
          if ( v16 )
          {
            while ( InterlockedExchange((volatile LONG *)(v16 + 12), 1) )
              Sleep(1u);
            v17 = *(_DWORD *)(v16 + 4) - 1;
            *(_DWORD *)(v16 + 4) = v17;
            v22 = (volatile LONG *)(v16 + 12);
            if ( v17 )
            {
              InterlockedExchange(v22, 0);
            }
            else
            {
              InterlockedExchange(v22, 0);
              (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v16 + 4))(v16);
              while ( InterlockedExchange((volatile LONG *)(v16 + 12), 1) )
                Sleep(1u);
              v24 = *(_DWORD *)(v16 + 8) - 1;
              *(_DWORD *)(v16 + 8) = v24;
              InterlockedExchange((volatile LONG *)(v16 + 12), 0);
              if ( !v24 )
                (*(void (__thiscall **)(volatile LONG))(*(_DWORD *)v16 + 8))(v16);
            }
            v5 = _Val.pn.pi_;
          }
          v11 = (boost::shared_ptr<SlideListWin::ListItem> *)_Next1;
        }
LABEL_55:
        v11->pn.pi_ = v5;
        v30 = -1;
        if ( v5 )
        {
          v18 = (volatile LONG *)&v5->mtx_;
          while ( InterlockedExchange(v18, 1) )
            Sleep(1u);
          v19 = _Val.pn.pi_;
          v20 = _Val.pn.pi_->use_count_ - 1;
          _Val.pn.pi_->use_count_ = v20;
          if ( v20 )
          {
            InterlockedExchange(v18, 0);
          }
          else
          {
            InterlockedExchange(v18, 0);
            v19->vfptr->dispose(v19);
            while ( InterlockedExchange(v18, 1) )
              Sleep(1u);
            v24 = v19->weak_count_ - 1;
            v19->weak_count_ = v24;
            InterlockedExchange(v18, 0);
            if ( !v24 )
              v19->vfptr->destruct(v19);
          }
        }
        ++spItem2;
        ++_Next;
        if ( _Next == _Last )
          return;
        v4 = _Next;
      }
    }
  }
}

//----- (00454250) --------------------------------------------------------
void __cdecl std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred)
{
  SlideListWin::ListItem *v4; // eax@2
  boost::detail::sp_counted_base *v5; // eax@2
  SlideListWin::ListItem *v6; // eax@4
  boost::detail::sp_counted_base *v7; // eax@4
  SlideListWin::ListItem *v8; // eax@6
  boost::detail::sp_counted_base *v9; // eax@6

  if ( SlideListWin::ListNumSorter::operator__(&_Pred, _Mid, _First) )
  {
    v4 = _Mid->px;
    _Mid->px = _First->px;
    _First->px = v4;
    v5 = _First->pn.pi_;
    _First->pn.pi_ = _Mid->pn.pi_;
    _Mid->pn.pi_ = v5;
  }
  if ( SlideListWin::ListNumSorter::operator__(&_Pred, _Last, _Mid) )
  {
    v6 = _Last->px;
    _Last->px = _Mid->px;
    _Mid->px = v6;
    v7 = _Mid->pn.pi_;
    _Mid->pn.pi_ = _Last->pn.pi_;
    _Last->pn.pi_ = v7;
  }
  if ( SlideListWin::ListNumSorter::operator__(&_Pred, _Mid, _First) )
  {
    v8 = _Mid->px;
    _Mid->px = _First->px;
    _First->px = v8;
    v9 = _First->pn.pi_;
    _First->pn.pi_ = _Mid->pn.pi_;
    _Mid->pn.pi_ = v9;
  }
}

//----- (004542D0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Bottom, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListNumSorter _Pred)
{
  int v5; // edi@1
  boost::shared_ptr<SlideListWin::ListItem> *v6; // ebx@2
  boost::detail::sp_counted_base *v7; // edi@4
  boost::detail::sp_counted_base *v8; // ebx@8
  int v9; // eax@11
  int v10; // ST24_4@15
  int v11; // ecx@17
  boost::shared_ptr<SlideListWin::ListItem> *v12; // ebx@17
  int v13; // edi@21
  boost::detail::sp_counted_base *v14; // edi@25
  int v15; // eax@28
  volatile LONG *v16; // [sp-8h] [bp-24h]@11
  volatile LONG *v17; // [sp-8h] [bp-24h]@28
  int _Top; // [sp+Ch] [bp-10h]@1
  boost::detail::sp_counted_base *v19; // [sp+10h] [bp-Ch]@21
  volatile LONG *Target; // [sp+14h] [bp-8h]@22
  int _Idx; // [sp+18h] [bp-4h]@1

  v5 = 2 * _Hole + 2;
  _Top = _Hole;
  _Idx = v5;
  if ( v5 >= _Bottom )
  {
    v12 = _First;
  }
  else
  {
    do
    {
      v6 = _First;
      if ( SlideListWin::ListNumSorter::operator__(&_Pred, &_First[v5], &_First[v5 - 1]) )
      {
        --v5;
        _Idx = v5;
      }
      _First[_Hole].px = _First[v5].px;
      v7 = _First[v5].pn.pi_;
      if ( v7 )
      {
        while ( InterlockedExchange((volatile LONG *)&v7->mtx_.l_, 1) )
          Sleep(1u);
        ++v7->use_count_;
        InterlockedExchange((volatile LONG *)&v7->mtx_.l_, 0);
        v6 = _First;
      }
      v8 = v6[_Hole].pn.pi_;
      if ( v8 )
      {
        while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
          Sleep(1u);
        v9 = v8->use_count_ - 1;
        v8->use_count_ = v9;
        v16 = (volatile LONG *)&v8->mtx_;
        if ( v9 )
        {
          InterlockedExchange(v16, 0);
        }
        else
        {
          InterlockedExchange(v16, 0);
          v8->vfptr->dispose(v8);
          while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
            Sleep(1u);
          v10 = v8->weak_count_ - 1;
          v8->weak_count_ = v10;
          InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 0);
          if ( !v10 )
            v8->vfptr->destruct(v8);
        }
      }
      v11 = _Hole;
      v12 = _First;
      _Hole = _Idx;
      _First[v11].pn.pi_ = v7;
      _Idx = 2 * _Idx + 2;
      v5 = _Idx;
    }
    while ( _Idx < _Bottom );
  }
  if ( v5 == _Bottom )
  {
    v12[_Hole].px = v12[_Bottom - 1].px;
    v13 = *((_DWORD *)&v12[_Bottom] - 1);
    v19 = (boost::detail::sp_counted_base *)v13;
    if ( v13 )
    {
      Target = (volatile LONG *)(v13 + 12);
      while ( InterlockedExchange(Target, 1) )
        Sleep(1u);
      ++*(_DWORD *)(v13 + 4);
      InterlockedExchange(Target, 0);
    }
    v14 = v12[_Hole].pn.pi_;
    if ( v14 )
    {
      while ( InterlockedExchange((volatile LONG *)&v14->mtx_.l_, 1) )
        Sleep(1u);
      v15 = v14->use_count_ - 1;
      v14->use_count_ = v15;
      v17 = (volatile LONG *)&v14->mtx_;
      if ( v15 )
      {
        InterlockedExchange(v17, 0);
      }
      else
      {
        InterlockedExchange(v17, 0);
        v14->vfptr->dispose(v14);
        boost::detail::sp_counted_base::weak_release(v14);
      }
      v12 = _First;
    }
    v12[_Hole].pn.pi_ = v19;
    _Hole = _Bottom - 1;
  }
  std::_Push_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(
    v12,
    _Hole,
    _Top,
    _Val,
    _Pred);
}

//----- (004544C0) --------------------------------------------------------
void __cdecl std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred)
{
  SlideListWin::ListItem *v4; // eax@2
  boost::detail::sp_counted_base *v5; // eax@2
  SlideListWin::ListItem *v6; // eax@4
  boost::detail::sp_counted_base *v7; // eax@4
  SlideListWin::ListItem *v8; // eax@6
  boost::detail::sp_counted_base *v9; // eax@6

  if ( SlideListWin::ListSorter::operator__(&_Pred, _Mid, _First) )
  {
    v4 = _Mid->px;
    _Mid->px = _First->px;
    _First->px = v4;
    v5 = _First->pn.pi_;
    _First->pn.pi_ = _Mid->pn.pi_;
    _Mid->pn.pi_ = v5;
  }
  if ( SlideListWin::ListSorter::operator__(&_Pred, _Last, _Mid) )
  {
    v6 = _Last->px;
    _Last->px = _Mid->px;
    _Mid->px = v6;
    v7 = _Mid->pn.pi_;
    _Mid->pn.pi_ = _Last->pn.pi_;
    _Last->pn.pi_ = v7;
  }
  if ( SlideListWin::ListSorter::operator__(&_Pred, _Mid, _First) )
  {
    v8 = _Mid->px;
    _Mid->px = _First->px;
    _First->px = v8;
    v9 = _First->pn.pi_;
    _First->pn.pi_ = _Mid->pn.pi_;
    _Mid->pn.pi_ = v9;
  }
}

//----- (00454540) --------------------------------------------------------
void __cdecl std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, int _Hole, int _Bottom, boost::shared_ptr<SlideListWin::ListItem> *_Val, SlideListWin::ListSorter _Pred)
{
  int v5; // edi@1
  boost::shared_ptr<SlideListWin::ListItem> *v6; // ebx@2
  boost::detail::sp_counted_base *v7; // edi@4
  boost::detail::sp_counted_base *v8; // ebx@8
  int v9; // eax@11
  int v10; // ST24_4@15
  int v11; // ecx@17
  boost::shared_ptr<SlideListWin::ListItem> *v12; // ebx@17
  int v13; // edi@21
  boost::detail::sp_counted_base *v14; // edi@25
  int v15; // eax@28
  volatile LONG *v16; // [sp-8h] [bp-24h]@11
  volatile LONG *v17; // [sp-8h] [bp-24h]@28
  int _Top; // [sp+Ch] [bp-10h]@1
  boost::detail::sp_counted_base *v19; // [sp+10h] [bp-Ch]@21
  volatile LONG *Target; // [sp+14h] [bp-8h]@22
  int _Idx; // [sp+18h] [bp-4h]@1

  v5 = 2 * _Hole + 2;
  _Top = _Hole;
  _Idx = v5;
  if ( v5 >= _Bottom )
  {
    v12 = _First;
  }
  else
  {
    do
    {
      v6 = _First;
      if ( SlideListWin::ListSorter::operator__(&_Pred, &_First[v5], &_First[v5 - 1]) )
      {
        --v5;
        _Idx = v5;
      }
      _First[_Hole].px = _First[v5].px;
      v7 = _First[v5].pn.pi_;
      if ( v7 )
      {
        while ( InterlockedExchange((volatile LONG *)&v7->mtx_.l_, 1) )
          Sleep(1u);
        ++v7->use_count_;
        InterlockedExchange((volatile LONG *)&v7->mtx_.l_, 0);
        v6 = _First;
      }
      v8 = v6[_Hole].pn.pi_;
      if ( v8 )
      {
        while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
          Sleep(1u);
        v9 = v8->use_count_ - 1;
        v8->use_count_ = v9;
        v16 = (volatile LONG *)&v8->mtx_;
        if ( v9 )
        {
          InterlockedExchange(v16, 0);
        }
        else
        {
          InterlockedExchange(v16, 0);
          v8->vfptr->dispose(v8);
          while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
            Sleep(1u);
          v10 = v8->weak_count_ - 1;
          v8->weak_count_ = v10;
          InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 0);
          if ( !v10 )
            v8->vfptr->destruct(v8);
        }
      }
      v11 = _Hole;
      v12 = _First;
      _Hole = _Idx;
      _First[v11].pn.pi_ = v7;
      _Idx = 2 * _Idx + 2;
      v5 = _Idx;
    }
    while ( _Idx < _Bottom );
  }
  if ( v5 == _Bottom )
  {
    v12[_Hole].px = v12[_Bottom - 1].px;
    v13 = *((_DWORD *)&v12[_Bottom] - 1);
    v19 = (boost::detail::sp_counted_base *)v13;
    if ( v13 )
    {
      Target = (volatile LONG *)(v13 + 12);
      while ( InterlockedExchange(Target, 1) )
        Sleep(1u);
      ++*(_DWORD *)(v13 + 4);
      InterlockedExchange(Target, 0);
    }
    v14 = v12[_Hole].pn.pi_;
    if ( v14 )
    {
      while ( InterlockedExchange((volatile LONG *)&v14->mtx_.l_, 1) )
        Sleep(1u);
      v15 = v14->use_count_ - 1;
      v14->use_count_ = v15;
      v17 = (volatile LONG *)&v14->mtx_;
      if ( v15 )
      {
        InterlockedExchange(v17, 0);
      }
      else
      {
        InterlockedExchange(v17, 0);
        v14->vfptr->dispose(v14);
        boost::detail::sp_counted_base::weak_release(v14);
      }
      v12 = _First;
    }
    v12[_Hole].pn.pi_ = v19;
    _Hole = _Bottom - 1;
  }
  std::_Push_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(
    v12,
    _Hole,
    _Top,
    _Val,
    _Pred);
}

//----- (00454730) --------------------------------------------------------
void __cdecl std::_Rotate<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, int *__formal, boost::shared_ptr<SlideListWin::ListItem> *a5)
{
  boost::shared_ptr<SlideListWin::ListItem> *v5; // edx@1
  boost::shared_ptr<SlideListWin::ListItem> *v6; // ebx@1
  unsigned int v7; // edi@1
  signed int v8; // eax@1
  signed int v9; // esi@1
  int v10; // edx@2
  int v11; // edx@6
  boost::shared_ptr<SlideListWin::ListItem> *v12; // ecx@7
  boost::shared_ptr<SlideListWin::ListItem> *v13; // esi@7
  SlideListWin::ListItem *v14; // edx@9
  boost::detail::sp_counted_base *v15; // edx@9
  signed int v16; // edx@9
  int _Mida; // [sp+18h] [bp+Ch]@6

  v5 = _First;
  v6 = _Last;
  v7 = _Mid - _First;
  v8 = _Last - _First;
  v9 = v7;
  if ( v7 )
  {
    do
    {
      v10 = v8 % v9;
      v8 = v9;
      v9 = v10;
    }
    while ( v10 );
    v5 = _First;
  }
  if ( v8 < (signed int)(_Last - _First) && v8 > 0 )
  {
    v11 = (int)&v5[v8];
    _Mida = v11;
    do
    {
      v12 = (boost::shared_ptr<SlideListWin::ListItem> *)(v11 + 8 * v7);
      v13 = (boost::shared_ptr<SlideListWin::ListItem> *)v11;
      if ( v12 == v6 )
        v12 = _First;
      do
      {
        v14 = v13->px;
        v13->px = v12->px;
        v12->px = v14;
        v15 = v12->pn.pi_;
        v12->pn.pi_ = v13->pn.pi_;
        v6 = _Last;
        v13->pn.pi_ = v15;
        v16 = _Last - v12;
        v13 = v12;
        if ( (signed int)v7 >= v16 )
          v12 = &_First[v7 - v16];
        else
          v12 += v7;
      }
      while ( v12 != (boost::shared_ptr<SlideListWin::ListItem> *)_Mida );
      --v8;
      v11 = _Mida - 8;
      _Mida -= 8;
    }
    while ( v8 > 0 );
  }
}

//----- (004547D0) --------------------------------------------------------
void __thiscall std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(std::vector<unsigned long,std::allocator<unsigned long> > *this, const unsigned int *_Val)
{
  std::vector<unsigned long,std::allocator<unsigned long> > *v2; // esi@1
  unsigned int *v3; // eax@1
  signed int v4; // edi@3
  unsigned int *v5; // eax@5
  unsigned int *v6; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == this->baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)this,
        1u);
    v6 = v2->baseclass_0._Mylast;
    if ( v6 )
      *v6 = *_Val;
  }
  else
  {
    v4 = (signed int)((char *)_Val - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    if ( v3 == this->baseclass_0._Myend )
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)this,
        1u);
    v5 = v2->baseclass_0._Mylast;
    if ( v5 )
    {
      *v5 = *(_DWORD *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (00454840) --------------------------------------------------------
void __cdecl std::_Reverse<boost::shared_ptr<SlideListWin::ListItem>__>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, std::bidirectional_iterator_tag __formal)
{
  boost::shared_ptr<SlideListWin::ListItem> *v3; // eax@1
  boost::shared_ptr<SlideListWin::ListItem> *i; // ecx@1
  SlideListWin::ListItem *v5; // edx@3
  boost::detail::sp_counted_base *v6; // edx@3

  v3 = _First;
  for ( i = _Last; v3 != i; ++v3 )
  {
    --i;
    if ( v3 == i )
      break;
    v5 = v3->px;
    v3->px = i->px;
    i->px = v5;
    v6 = i->pn.pi_;
    i->pn.pi_ = v3->pn.pi_;
    v3->pn.pi_ = v6;
  }
}

//----- (00454880) --------------------------------------------------------
boost::shared_ptr<SLWCreateInfo::Item> *__cdecl std::_Uninit_move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>___std::allocator<boost::shared_ptr<SlideListWin::ListItem>>_boost::shared_ptr<SlideListWin::ListItem>>(boost::shared_ptr<SLWCreateInfo::Item> *_First, boost::shared_ptr<SLWCreateInfo::Item> *_Last, boost::shared_ptr<SLWCreateInfo::Item> *_Dest, std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *_Al, boost::shared_ptr<SLWCreateInfo::Item> *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  boost::shared_ptr<SLWCreateInfo::Item> *v6; // ecx@1
  boost::shared_ptr<SLWCreateInfo::Item> *v7; // eax@2
  boost::detail::sp_counted_base *v8; // esi@3
  boost::shared_ptr<SLWCreateInfo::Item> *result; // eax@7

  v6 = _First;
  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    do
    {
      v7 = _Dest;
      if ( _Dest )
      {
        _Dest->px = v6->px;
        v8 = v6->pn.pi_;
        _Dest->pn.pi_ = v8;
        if ( v8 )
        {
          while ( InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 1) )
            Sleep(1u);
          ++v8->use_count_;
          InterlockedExchange((volatile LONG *)&v8->mtx_.l_, 0);
          v7 = _Dest;
          v6 = _First;
        }
      }
      ++v6;
      result = v7 + 1;
      _Dest = result;
      _First = v6;
    }
    while ( v6 != _Last );
  }
  return result;
}

//----- (00454900) --------------------------------------------------------
void __cdecl std::_Median<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred)
{
  unsigned int v4; // eax@1
  int v5; // eax@2
  int v6; // edi@2
  unsigned int v7; // ebx@2
  boost::shared_ptr<SlideListWin::ListItem> *v8; // edx@2
  boost::shared_ptr<SlideListWin::ListItem> *v9; // ST30_4@2
  boost::shared_ptr<SlideListWin::ListItem> *_Firsta; // [sp+Ch] [bp+8h]@2

  v4 = _Last - _First;
  if ( (signed int)v4 <= 40 )
  {
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v5 = (signed int)(v4 + 1) / 8;
    v6 = 16 * v5;
    v7 = 8 * v5;
    v8 = &_First[2 * v5];
    v9 = _First;
    _Firsta = &_First[v5];
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(v9, _Firsta, v8, _Pred);
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(
      &_Mid[-v7 / 8u],
      _Mid,
      &_Mid[v7 / 8],
      _Pred);
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(
      &_Last[-v6 / 8u],
      &_Last[-v7 / 8u],
      _Last,
      _Pred);
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(
      _Firsta,
      _Mid,
      &_Last[-v7 / 8u],
      _Pred);
  }
}

//----- (004549A0) --------------------------------------------------------
void __cdecl std::_Make_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred, int *__formal, boost::shared_ptr<SlideListWin::ListItem> *a5)
{
  boost::shared_ptr<SlideListWin::ListItem> *v5; // ecx@1
  int v6; // ebx@1
  int v7; // esi@4
  SlideListWin::ListItem *v8; // eax@4
  int v9; // eax@11
  volatile LONG *v10; // [sp-18h] [bp-34h]@11
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-1Ch]@4
  int v12; // [sp+8h] [bp-14h]@15
  int _Bottom; // [sp+Ch] [bp-10h]@1
  int v14; // [sp+18h] [bp-4h]@8

  v5 = _First;
  _Bottom = _Last - _First;
  v6 = _Bottom / 2;
  if ( _Bottom / 2 > 0 )
  {
    while ( 1 )
    {
      v7 = *((_DWORD *)&v5[v6] - 1);
      v8 = v5[v6-- - 1].px;
      _Val.px = v8;
      _Val.pn.pi_ = (boost::detail::sp_counted_base *)v7;
      if ( v7 )
      {
        while ( InterlockedExchange((volatile LONG *)(v7 + 12), 1) )
          Sleep(1u);
        ++*(_DWORD *)(v7 + 4);
        InterlockedExchange((volatile LONG *)(v7 + 12), 0);
        v5 = _First;
      }
      v14 = 0;
      std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(
        v5,
        v6,
        _Bottom,
        &_Val,
        _Pred);
      v14 = -1;
      if ( v7 )
      {
        while ( InterlockedExchange((volatile LONG *)(v7 + 12), 1) )
          Sleep(1u);
        v9 = *(_DWORD *)(v7 + 4) - 1;
        *(_DWORD *)(v7 + 4) = v9;
        v10 = (volatile LONG *)(v7 + 12);
        if ( v9 )
        {
          InterlockedExchange(v10, 0);
        }
        else
        {
          InterlockedExchange(v10, 0);
          (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7);
          while ( InterlockedExchange((volatile LONG *)(v7 + 12), 1) )
            Sleep(1u);
          v12 = *(_DWORD *)(v7 + 8) - 1;
          *(_DWORD *)(v7 + 8) = v12;
          InterlockedExchange((volatile LONG *)(v7 + 12), 0);
          if ( !v12 )
            (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 8))(v7);
        }
      }
      if ( v6 <= 0 )
        break;
      v5 = _First;
    }
  }
}

//----- (00454B00) --------------------------------------------------------
void __cdecl std::_Median<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Mid, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred)
{
  unsigned int v4; // eax@1
  int v5; // eax@2
  int v6; // edi@2
  unsigned int v7; // ebx@2
  boost::shared_ptr<SlideListWin::ListItem> *v8; // edx@2
  boost::shared_ptr<SlideListWin::ListItem> *v9; // ST30_4@2
  boost::shared_ptr<SlideListWin::ListItem> *_Firsta; // [sp+Ch] [bp+8h]@2

  v4 = _Last - _First;
  if ( (signed int)v4 <= 40 )
  {
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v5 = (signed int)(v4 + 1) / 8;
    v6 = 16 * v5;
    v7 = 8 * v5;
    v8 = &_First[2 * v5];
    v9 = _First;
    _Firsta = &_First[v5];
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(v9, _Firsta, v8, _Pred);
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(
      &_Mid[-v7 / 8u],
      _Mid,
      &_Mid[v7 / 8],
      _Pred);
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(
      &_Last[-v6 / 8u],
      &_Last[-v7 / 8u],
      _Last,
      _Pred);
    std::_Med3<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(
      _Firsta,
      _Mid,
      &_Last[-v7 / 8u],
      _Pred);
  }
}

//----- (00454BA0) --------------------------------------------------------
void __cdecl std::_Make_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred, int *__formal, boost::shared_ptr<SlideListWin::ListItem> *a5)
{
  boost::shared_ptr<SlideListWin::ListItem> *v5; // ecx@1
  int v6; // ebx@1
  int v7; // esi@4
  SlideListWin::ListItem *v8; // eax@4
  int v9; // eax@11
  volatile LONG *v10; // [sp-18h] [bp-34h]@11
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-1Ch]@4
  int v12; // [sp+8h] [bp-14h]@15
  int _Bottom; // [sp+Ch] [bp-10h]@1
  int v14; // [sp+18h] [bp-4h]@8

  v5 = _First;
  _Bottom = _Last - _First;
  v6 = _Bottom / 2;
  if ( _Bottom / 2 > 0 )
  {
    while ( 1 )
    {
      v7 = *((_DWORD *)&v5[v6] - 1);
      v8 = v5[v6-- - 1].px;
      _Val.px = v8;
      _Val.pn.pi_ = (boost::detail::sp_counted_base *)v7;
      if ( v7 )
      {
        while ( InterlockedExchange((volatile LONG *)(v7 + 12), 1) )
          Sleep(1u);
        ++*(_DWORD *)(v7 + 4);
        InterlockedExchange((volatile LONG *)(v7 + 12), 0);
        v5 = _First;
      }
      v14 = 0;
      std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(
        v5,
        v6,
        _Bottom,
        &_Val,
        _Pred);
      v14 = -1;
      if ( v7 )
      {
        while ( InterlockedExchange((volatile LONG *)(v7 + 12), 1) )
          Sleep(1u);
        v9 = *(_DWORD *)(v7 + 4) - 1;
        *(_DWORD *)(v7 + 4) = v9;
        v10 = (volatile LONG *)(v7 + 12);
        if ( v9 )
        {
          InterlockedExchange(v10, 0);
        }
        else
        {
          InterlockedExchange(v10, 0);
          (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7);
          while ( InterlockedExchange((volatile LONG *)(v7 + 12), 1) )
            Sleep(1u);
          v12 = *(_DWORD *)(v7 + 8) - 1;
          *(_DWORD *)(v7 + 8) = v12;
          InterlockedExchange((volatile LONG *)(v7 + 12), 0);
          if ( !v12 )
            (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 8))(v7);
        }
      }
      if ( v6 <= 0 )
        break;
      v5 = _First;
    }
  }
}

//----- (00454D00) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal)
{
  int v4; // edi@1
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-14h]@1
  int v6; // [sp+10h] [bp-4h]@5

  v4 = *((_DWORD *)_Last - 1);
  _Val.px = _Last[-1].px;
  _Val.pn.pi_ = (boost::detail::sp_counted_base *)v4;
  if ( v4 )
  {
    while ( InterlockedExchange((volatile LONG *)(v4 + 12), 1) )
      Sleep(1u);
    ++*(_DWORD *)(v4 + 4);
    InterlockedExchange((volatile LONG *)(v4 + 12), 0);
  }
  _Last[-1].px = _First->px;
  v6 = 0;
  boost::detail::shared_count::operator_((boost::detail::shared_count *)_Last - 1, &_First->pn);
  std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(
    _First,
    0,
    (signed int)((char *)_Last - (char *)_First - 8) >> 3,
    &_Val,
    _Pred);
  v6 = -1;
  if ( v4 )
    boost::detail::sp_counted_base::release((boost::detail::sp_counted_base *)v4);
}

//----- (00454DD0) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred, boost::shared_ptr<SlideListWin::ListItem> *__formal)
{
  int v4; // edi@1
  boost::shared_ptr<SlideListWin::ListItem> _Val; // [sp+0h] [bp-14h]@1
  int v6; // [sp+10h] [bp-4h]@5

  v4 = *((_DWORD *)_Last - 1);
  _Val.px = _Last[-1].px;
  _Val.pn.pi_ = (boost::detail::sp_counted_base *)v4;
  if ( v4 )
  {
    while ( InterlockedExchange((volatile LONG *)(v4 + 12), 1) )
      Sleep(1u);
    ++*(_DWORD *)(v4 + 4);
    InterlockedExchange((volatile LONG *)(v4 + 12), 0);
  }
  _Last[-1].px = _First->px;
  v6 = 0;
  boost::detail::shared_count::operator_((boost::detail::shared_count *)_Last - 1, &_First->pn);
  std::_Adjust_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(
    _First,
    0,
    (signed int)((char *)_Last - (char *)_First - 8) >> 3,
    &_Val,
    _Pred);
  v6 = -1;
  if ( v4 )
    boost::detail::sp_counted_base::release((boost::detail::sp_counted_base *)v4);
}

//----- (00454EA0) --------------------------------------------------------
void *__thiscall ColumnBut::_scalar_deleting_destructor_(ColumnBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ColumnBut::_ColumnBut(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00454ED0) --------------------------------------------------------
void __cdecl std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(boost::shared_ptr<SLWCreateInfo::Item> *_First, boost::shared_ptr<SLWCreateInfo::Item> *_Last, std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  int v4; // eax@2
  int v5; // ebx@3
  int v6; // eax@6
  int v7; // ST14_4@10
  boost::shared_ptr<SLWCreateInfo::Item> *v8; // ecx@12
  volatile LONG *v9; // [sp-14h] [bp-18h]@6
  char *_Firsta; // [sp+Ch] [bp+8h]@2

  if ( _First != _Last )
  {
    v4 = (int)&_First->pn;
    _Firsta = (char *)&_First->pn;
    do
    {
      v5 = *(_DWORD *)v4;
      if ( *(_DWORD *)v4 )
      {
        while ( InterlockedExchange((volatile LONG *)(v5 + 12), 1) )
          Sleep(1u);
        v6 = *(_DWORD *)(v5 + 4) - 1;
        *(_DWORD *)(v5 + 4) = v6;
        v9 = (volatile LONG *)(v5 + 12);
        if ( v6 )
        {
          InterlockedExchange(v9, 0);
        }
        else
        {
          InterlockedExchange(v9, 0);
          (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5);
          while ( InterlockedExchange((volatile LONG *)(v5 + 12), 1) )
            Sleep(1u);
          v7 = *(_DWORD *)(v5 + 8) - 1;
          *(_DWORD *)(v5 + 8) = v7;
          InterlockedExchange((volatile LONG *)(v5 + 12), 0);
          if ( !v7 )
            (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 8))(v5);
        }
      }
      v4 = (int)(_Firsta + 8);
      v8 = (boost::shared_ptr<SLWCreateInfo::Item> *)(_Firsta + 4);
      _Firsta += 8;
    }
    while ( v8 != _Last );
  }
}

//----- (00454F90) --------------------------------------------------------
std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *__cdecl std::_Unguarded_partition<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *result, boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred)
{
  unsigned int v4; // esi@1
  int v5; // ebx@1
  unsigned int v6; // eax@10
  unsigned int v7; // edi@10
  int v8; // eax@14
  int v9; // ecx@14
  int v10; // ecx@14
  bool v11; // zf@17
  int v12; // ebx@18
  int v13; // eax@21
  int v14; // eax@21
  int v15; // ecx@27
  int v16; // ecx@27
  int v17; // ST1C_4@28
  int v18; // ST1C_4@28
  unsigned int v19; // edx@28
  int v20; // ecx@31
  int v21; // ecx@31
  int v22; // edx@32
  int v23; // ecx@32
  int v24; // ecx@32
  int v25; // ecx@33
  int v26; // ecx@33
  std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *v27; // eax@34
  int _Glast; // [sp+18h] [bp-8h]@2
  unsigned int _Glasta; // [sp+18h] [bp-8h]@10
  int _Plast; // [sp+1Ch] [bp-4h]@1

  v4 = (unsigned int)&_First[(signed int)(_Last - _First) / 2];
  std::_Median<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = v4 + 8;
  _Plast = v4 + 8;
  if ( (unsigned int)_First < v4 )
  {
    do
    {
      _Glast = v4 - 8;
      if ( SlideListWin::ListNumSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)(v4 - 8),
             (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
        break;
      if ( SlideListWin::ListNumSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)v4,
             (boost::shared_ptr<SlideListWin::ListItem> *)_Glast) )
        break;
      v4 -= 8;
    }
    while ( (unsigned int)_First < _Glast );
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( SlideListWin::ListNumSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)v5,
             (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
        break;
      if ( SlideListWin::ListNumSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)v4,
             (boost::shared_ptr<SlideListWin::ListItem> *)v5) )
        break;
      v5 += 8;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = v5;
  }
  v6 = v4;
  v7 = v5;
  _Glasta = v4;
  while ( 1 )
  {
    while ( 1 )
    {
      if ( v7 < (unsigned int)_Last )
      {
        do
        {
          if ( !SlideListWin::ListNumSorter::operator__(
                  &_Pred,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v4,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v7) )
          {
            if ( SlideListWin::ListNumSorter::operator__(
                   &_Pred,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v7,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
              break;
            v8 = v5;
            v9 = *(_DWORD *)v5;
            *(_DWORD *)v5 = *(_DWORD *)v7;
            *(_DWORD *)v7 = v9;
            v10 = *(_DWORD *)(v7 + 4);
            *(_DWORD *)(v7 + 4) = *(_DWORD *)(v5 + 4);
            v5 += 8;
            *(_DWORD *)(v8 + 4) = v10;
          }
          v7 += 8;
        }
        while ( v7 < (unsigned int)_Last );
        v6 = _Glasta;
        _Plast = v5;
      }
      v11 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        v12 = v6 - 8;
        do
        {
          if ( !SlideListWin::ListNumSorter::operator__(
                  &_Pred,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v12,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
          {
            if ( SlideListWin::ListNumSorter::operator__(
                   &_Pred,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v4,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v12) )
              break;
            v13 = *(_DWORD *)(v4 - 8);
            v4 -= 8;
            *(_DWORD *)v4 = *(_DWORD *)v12;
            *(_DWORD *)v12 = v13;
            v14 = *(_DWORD *)(v12 + 4);
            *(_DWORD *)(v12 + 4) = *(_DWORD *)(v4 + 4);
            *(_DWORD *)(v4 + 4) = v14;
          }
          v12 -= 8;
          _Glasta -= 8;
        }
        while ( (unsigned int)_First < _Glasta );
        v6 = _Glasta;
        v5 = _Plast;
        v11 = _Glasta == (_DWORD)_First;
      }
      if ( v11 )
        break;
      v6 -= 8;
      _Glasta = v6;
      if ( (boost::shared_ptr<SlideListWin::ListItem> *)v7 == _Last )
      {
        v4 -= 8;
        if ( v6 != v4 )
        {
          v20 = *(_DWORD *)v6;
          *(_DWORD *)v6 = *(_DWORD *)v4;
          *(_DWORD *)v4 = v20;
          v21 = *(_DWORD *)(v4 + 4);
          *(_DWORD *)(v4 + 4) = *(_DWORD *)(v6 + 4);
          *(_DWORD *)(v6 + 4) = v21;
        }
        v22 = *(_DWORD *)(v5 - 8);
        v23 = *(_DWORD *)v4;
        v5 -= 8;
        *(_DWORD *)v4 = v22;
        *(_DWORD *)v5 = v23;
        v24 = *(_DWORD *)(v5 + 4);
        *(_DWORD *)(v5 + 4) = *(_DWORD *)(v4 + 4);
        _Plast = v5;
        *(_DWORD *)(v4 + 4) = v24;
      }
      else
      {
        v25 = *(_DWORD *)v7;
        *(_DWORD *)v7 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v25;
        v26 = *(_DWORD *)(v6 + 4);
        *(_DWORD *)(v6 + 4) = *(_DWORD *)(v7 + 4);
        *(_DWORD *)(v7 + 4) = v26;
        v7 += 8;
      }
    }
    if ( (boost::shared_ptr<SlideListWin::ListItem> *)v7 == _Last )
      break;
    if ( v5 != v7 )
    {
      v15 = *(_DWORD *)v4;
      *(_DWORD *)v4 = *(_DWORD *)v5;
      *(_DWORD *)v5 = v15;
      v16 = *(_DWORD *)(v5 + 4);
      *(_DWORD *)(v5 + 4) = *(_DWORD *)(v4 + 4);
      *(_DWORD *)(v4 + 4) = v16;
    }
    v17 = *(_DWORD *)v4;
    *(_DWORD *)v4 = *(_DWORD *)v7;
    *(_DWORD *)v7 = v17;
    v18 = *(_DWORD *)(v7 + 4);
    *(_DWORD *)(v7 + 4) = *(_DWORD *)(v4 + 4);
    v19 = v4;
    v5 += 8;
    v4 += 8;
    _Plast = v5;
    v7 += 8;
    *(_DWORD *)(v19 + 4) = v18;
  }
  v27 = result;
  result->baseclass_0.first = (boost::shared_ptr<SlideListWin::ListItem> *)v4;
  result->baseclass_0.second = (boost::shared_ptr<SlideListWin::ListItem> *)v5;
  return v27;
}

//----- (004551B0) --------------------------------------------------------
std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *__cdecl std::_Unguarded_partition<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *result, boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred)
{
  unsigned int v4; // esi@1
  int v5; // ebx@1
  unsigned int v6; // eax@10
  unsigned int v7; // edi@10
  int v8; // eax@14
  int v9; // ecx@14
  int v10; // ecx@14
  bool v11; // zf@17
  int v12; // ebx@18
  int v13; // eax@21
  int v14; // eax@21
  int v15; // ecx@27
  int v16; // ecx@27
  int v17; // ST1C_4@28
  int v18; // ST1C_4@28
  unsigned int v19; // edx@28
  int v20; // ecx@31
  int v21; // ecx@31
  int v22; // edx@32
  int v23; // ecx@32
  int v24; // ecx@32
  int v25; // ecx@33
  int v26; // ecx@33
  std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> *v27; // eax@34
  int _Glast; // [sp+18h] [bp-8h]@2
  unsigned int _Glasta; // [sp+18h] [bp-8h]@10
  int _Plast; // [sp+1Ch] [bp-4h]@1

  v4 = (unsigned int)&_First[(signed int)(_Last - _First) / 2];
  std::_Median<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = v4 + 8;
  _Plast = v4 + 8;
  if ( (unsigned int)_First < v4 )
  {
    do
    {
      _Glast = v4 - 8;
      if ( SlideListWin::ListSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)(v4 - 8),
             (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
        break;
      if ( SlideListWin::ListSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)v4,
             (boost::shared_ptr<SlideListWin::ListItem> *)_Glast) )
        break;
      v4 -= 8;
    }
    while ( (unsigned int)_First < _Glast );
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( SlideListWin::ListSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)v5,
             (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
        break;
      if ( SlideListWin::ListSorter::operator__(
             &_Pred,
             (boost::shared_ptr<SlideListWin::ListItem> *)v4,
             (boost::shared_ptr<SlideListWin::ListItem> *)v5) )
        break;
      v5 += 8;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = v5;
  }
  v6 = v4;
  v7 = v5;
  _Glasta = v4;
  while ( 1 )
  {
    while ( 1 )
    {
      if ( v7 < (unsigned int)_Last )
      {
        do
        {
          if ( !SlideListWin::ListSorter::operator__(
                  &_Pred,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v4,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v7) )
          {
            if ( SlideListWin::ListSorter::operator__(
                   &_Pred,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v7,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
              break;
            v8 = v5;
            v9 = *(_DWORD *)v5;
            *(_DWORD *)v5 = *(_DWORD *)v7;
            *(_DWORD *)v7 = v9;
            v10 = *(_DWORD *)(v7 + 4);
            *(_DWORD *)(v7 + 4) = *(_DWORD *)(v5 + 4);
            v5 += 8;
            *(_DWORD *)(v8 + 4) = v10;
          }
          v7 += 8;
        }
        while ( v7 < (unsigned int)_Last );
        v6 = _Glasta;
        _Plast = v5;
      }
      v11 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        v12 = v6 - 8;
        do
        {
          if ( !SlideListWin::ListSorter::operator__(
                  &_Pred,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v12,
                  (boost::shared_ptr<SlideListWin::ListItem> *)v4) )
          {
            if ( SlideListWin::ListSorter::operator__(
                   &_Pred,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v4,
                   (boost::shared_ptr<SlideListWin::ListItem> *)v12) )
              break;
            v13 = *(_DWORD *)(v4 - 8);
            v4 -= 8;
            *(_DWORD *)v4 = *(_DWORD *)v12;
            *(_DWORD *)v12 = v13;
            v14 = *(_DWORD *)(v12 + 4);
            *(_DWORD *)(v12 + 4) = *(_DWORD *)(v4 + 4);
            *(_DWORD *)(v4 + 4) = v14;
          }
          v12 -= 8;
          _Glasta -= 8;
        }
        while ( (unsigned int)_First < _Glasta );
        v6 = _Glasta;
        v5 = _Plast;
        v11 = _Glasta == (_DWORD)_First;
      }
      if ( v11 )
        break;
      v6 -= 8;
      _Glasta = v6;
      if ( (boost::shared_ptr<SlideListWin::ListItem> *)v7 == _Last )
      {
        v4 -= 8;
        if ( v6 != v4 )
        {
          v20 = *(_DWORD *)v6;
          *(_DWORD *)v6 = *(_DWORD *)v4;
          *(_DWORD *)v4 = v20;
          v21 = *(_DWORD *)(v4 + 4);
          *(_DWORD *)(v4 + 4) = *(_DWORD *)(v6 + 4);
          *(_DWORD *)(v6 + 4) = v21;
        }
        v22 = *(_DWORD *)(v5 - 8);
        v23 = *(_DWORD *)v4;
        v5 -= 8;
        *(_DWORD *)v4 = v22;
        *(_DWORD *)v5 = v23;
        v24 = *(_DWORD *)(v5 + 4);
        *(_DWORD *)(v5 + 4) = *(_DWORD *)(v4 + 4);
        _Plast = v5;
        *(_DWORD *)(v4 + 4) = v24;
      }
      else
      {
        v25 = *(_DWORD *)v7;
        *(_DWORD *)v7 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v25;
        v26 = *(_DWORD *)(v6 + 4);
        *(_DWORD *)(v6 + 4) = *(_DWORD *)(v7 + 4);
        *(_DWORD *)(v7 + 4) = v26;
        v7 += 8;
      }
    }
    if ( (boost::shared_ptr<SlideListWin::ListItem> *)v7 == _Last )
      break;
    if ( v5 != v7 )
    {
      v15 = *(_DWORD *)v4;
      *(_DWORD *)v4 = *(_DWORD *)v5;
      *(_DWORD *)v5 = v15;
      v16 = *(_DWORD *)(v5 + 4);
      *(_DWORD *)(v5 + 4) = *(_DWORD *)(v4 + 4);
      *(_DWORD *)(v4 + 4) = v16;
    }
    v17 = *(_DWORD *)v4;
    *(_DWORD *)v4 = *(_DWORD *)v7;
    *(_DWORD *)v7 = v17;
    v18 = *(_DWORD *)(v7 + 4);
    *(_DWORD *)(v7 + 4) = *(_DWORD *)(v4 + 4);
    v19 = v4;
    v5 += 8;
    v4 += 8;
    _Plast = v5;
    v7 += 8;
    *(_DWORD *)(v19 + 4) = v18;
  }
  v27 = result;
  result->baseclass_0.first = (boost::shared_ptr<SlideListWin::ListItem> *)v4;
  result->baseclass_0.second = (boost::shared_ptr<SlideListWin::ListItem> *)v5;
  return v27;
}

//----- (004553D0) --------------------------------------------------------
void __cdecl std::_Dest_val<std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(std::allocator<SlideListWin::ListItem::ColumnData> *_Alval, SlideListWin::ListItem::ColumnData *_Pdest)
{
  if ( _Pdest->m_strColumnText.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Pdest->m_strColumnText.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Pdest->m_strColumnText.baseclass_0._Myres = 15;
  _Pdest->m_strColumnText.baseclass_0._Mysize = 0;
  _Pdest->m_strColumnText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (00455400) --------------------------------------------------------
void __cdecl std::_Destroy_range<std::allocator<SlideListWin::ListItem::ColumnData>>(SlideListWin::ListItem::ColumnData *_First, SlideListWin::ListItem::ColumnData *_Last, std::allocator<SlideListWin::ListItem::ColumnData> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  SlideListWin::ListItem::ColumnData *i; // esi@1

  for ( i = _First; i != _Last; ++i )
  {
    if ( i->m_strColumnText.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&i->m_strColumnText.baseclass_0.___u0.baseclass_0.dummy[0]);
    i->m_strColumnText.baseclass_0._Myres = 15;
    i->m_strColumnText.baseclass_0._Mysize = 0;
    i->m_strColumnText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
}

//----- (00455440) --------------------------------------------------------
void __cdecl std::_Sort_heap<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListNumSorter _Pred)
{
  boost::shared_ptr<SlideListWin::ListItem> *v3; // esi@1
  unsigned int i; // edi@1

  v3 = _Last;
  for ( i = (char *)_Last - (char *)_First; (signed int)(i & 0xFFFFFFF8) > 8; --v3 )
  {
    std::_Pop_heap_0<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(
      _First,
      v3,
      _Pred,
      0);
    i -= 8;
  }
}

//----- (00455490) --------------------------------------------------------
void __cdecl std::_Sort_heap<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, SlideListWin::ListSorter _Pred)
{
  boost::shared_ptr<SlideListWin::ListItem> *v3; // esi@1
  unsigned int i; // edi@1

  v3 = _Last;
  for ( i = (char *)_Last - (char *)_First; (signed int)(i & 0xFFFFFFF8) > 8; --v3 )
  {
    std::_Pop_heap_0<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(
      _First,
      v3,
      _Pred,
      0);
    i -= 8;
  }
}

//----- (004554E0) --------------------------------------------------------
void __thiscall std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::reserve(std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *this, unsigned int _Count)
{
  std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *v2; // esi@1
  void *v3; // eax@4
  void *v4; // ebx@4
  boost::shared_ptr<SLWCreateInfo::Item> *v5; // ST04_4@4
  boost::shared_ptr<SLWCreateInfo::Item> *v6; // ST00_4@4
  boost::shared_ptr<SLWCreateInfo::Item> *v7; // ecx@4
  boost::shared_ptr<SLWCreateInfo::Item> *v8; // eax@4
  int v9; // edi@4
  int v10; // [sp-10h] [bp-24h]@1
  void *_Ptr; // [sp+0h] [bp-14h]@4
  int *v12; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@4

  v12 = &v10;
  v2 = this;
  if ( _Count > 0x1FFFFFFF )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 3 < _Count )
  {
    v3 = std::allocator<NiPoint2>::allocate((std::allocator<NiPoint2> *)&this->baseclass_0._Alval, _Count);
    v4 = v3;
    v5 = v2->baseclass_0._Mylast;
    v6 = *(boost::shared_ptr<SLWCreateInfo::Item> **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = v3;
    v13 = 0;
    std::_Uninit_move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>___std::allocator<boost::shared_ptr<SlideListWin::ListItem>>_boost::shared_ptr<SlideListWin::ListItem>>(
      v6,
      v5,
      (boost::shared_ptr<SLWCreateInfo::Item> *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v7 = v2->baseclass_0._Mylast;
    v8 = *(boost::shared_ptr<SLWCreateInfo::Item> **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    v9 = (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
    v13 = -1;
    if ( v8 )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        v8,
        v7,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Count);
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v2->baseclass_0._Myend = (boost::shared_ptr<SLWCreateInfo::Item> *)((char *)v4 + 8 * _Count);
    v2->baseclass_0._Mylast = (boost::shared_ptr<SLWCreateInfo::Item> *)((char *)v4 + 8 * v9);
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v4;
  }
}

//----- (004555D0) --------------------------------------------------------
void __cdecl std::_Uninit_def_fill_n<SlideListWin::ListItem::ColumnData___unsigned_int_SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(SlideListWin::ListItem::ColumnData *_First, unsigned int _Count, SlideListWin::ListItem::ColumnData *__formal, std::allocator<SlideListWin::ListItem::ColumnData> *_Al, SlideListWin::ListItem::ColumnData *a5, std::_Nonscalar_ptr_iterator_tag a6)
{
  int v6; // esi@1
  int v7; // edx@4
  int v8; // eax@4
  int v9; // ecx@4
  int v10; // edx@4
  unsigned int v11; // [sp-10h] [bp-60h]@1
  int v12; // [sp+0h] [bp-50h]@3
  SlideListWin::ListItem::ColumnData *_Next; // [sp+4h] [bp-4Ch]@1
  int v14; // [sp+8h] [bp-48h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Right; // [sp+Ch] [bp-44h]@3
  int v16; // [sp+28h] [bp-28h]@3
  int v17; // [sp+2Ch] [bp-24h]@3
  int v18; // [sp+30h] [bp-20h]@3
  int v19; // [sp+34h] [bp-1Ch]@3
  int v20; // [sp+38h] [bp-18h]@3
  unsigned int v21; // [sp+3Ch] [bp-14h]@1
  unsigned int *v22; // [sp+40h] [bp-10h]@1
  int v23; // [sp+4Ch] [bp-4h]@1
  int v24; // [sp+50h] [bp+0h]@1

  v21 = (unsigned int)&v24 ^ __security_cookie;
  v11 = (unsigned int)&v24 ^ __security_cookie;
  v22 = &v11;
  v6 = (int)_First;
  _Next = _First;
  v23 = 0;
  while ( 1 )
  {
    v14 = v6;
    if ( _Count <= 0 )
      break;
    _Right.baseclass_0._Myres = 15;
    _Right.baseclass_0._Mysize = 0;
    _Right.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v16 = 0;
    v19 = 255;
    v18 = 255;
    v17 = 255;
    v20 = 5;
    v12 = v6;
    LOBYTE(v23) = 2;
    if ( v6 )
    {
      *(_DWORD *)(v6 + 20) = 15;
      *(_DWORD *)(v6 + 16) = 0;
      *(_BYTE *)v6 = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
        &_Right,
        0,
        0xFFFFFFFFu);
      v7 = v17;
      v8 = v18;
      *(_DWORD *)(v6 + 28) = v16;
      v9 = v19;
      *(_DWORD *)(v6 + 32) = v7;
      v10 = v20;
      *(_DWORD *)(v6 + 36) = v8;
      *(_DWORD *)(v6 + 40) = v9;
      *(_DWORD *)(v6 + 44) = v10;
    }
    LOBYTE(v23) = 0;
    if ( _Right.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Right);
    --_Count;
    v6 += 48;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004556E0) --------------------------------------------------------
SlideListWin::ListItem::ColumnData *__cdecl std::_Move<SlideListWin::ListItem::ColumnData___SlideListWin::ListItem::ColumnData__>(SlideListWin::ListItem::ColumnData *_First, SlideListWin::ListItem::ColumnData *_Last, SlideListWin::ListItem::ColumnData *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  SlideListWin::ListItem::ColumnData *v4; // edi@2
  char *v5; // esi@2
  unsigned int v6; // edx@3
  SlideListWin::ListItem::ColumnData *result; // eax@4

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = _Dest;
    v5 = (char *)&_First->m_r;
    do
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_strColumnText,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v5 - 32),
        0,
        0xFFFFFFFFu);
      v4->m_nFontSize = *((_DWORD *)v5 - 1);
      v4->m_r = *(_DWORD *)v5;
      v4->m_g = *((_DWORD *)v5 + 1);
      v4->m_b = *((_DWORD *)v5 + 2);
      v6 = *((_DWORD *)v5 + 3);
      v5 += 48;
      v4->m_uiAlignText = v6;
      ++v4;
    }
    while ( (SlideListWin::ListItem::ColumnData *)(v5 - 32) != _Last );
    result = v4;
  }
  return result;
}

//----- (00455740) --------------------------------------------------------
SlideListWin::ListItem::ColumnData *__cdecl std::_Uninit_move<SlideListWin::ListItem::ColumnData___SlideListWin::ListItem::ColumnData___std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(SlideListWin::ListItem::ColumnData *_First, SlideListWin::ListItem::ColumnData *_Last, SlideListWin::ListItem::ColumnData *_Dest, std::allocator<SlideListWin::ListItem::ColumnData> *_Al, SlideListWin::ListItem::ColumnData *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  SlideListWin::ListItem::ColumnData *v6; // esi@1
  SlideListWin::ListItem::ColumnData *v7; // edi@1
  int v9; // [sp-10h] [bp-24h]@1
  SlideListWin::ListItem::ColumnData *_Next; // [sp+0h] [bp-14h]@1
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v11 = &v9;
  v6 = _Dest;
  v7 = _First;
  _Next = _Dest;
  v12 = 0;
  while ( v7 != _Last )
  {
    LOBYTE(v12) = 1;
    if ( v6 )
    {
      v6->m_strColumnText.baseclass_0._Myres = 15;
      v6->m_strColumnText.baseclass_0._Mysize = 0;
      v6->m_strColumnText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v6->m_strColumnText,
        &v7->m_strColumnText,
        0,
        0xFFFFFFFFu);
      v6->m_nFontSize = v7->m_nFontSize;
      v6->m_r = v7->m_r;
      v6->m_g = v7->m_g;
      v6->m_b = v7->m_b;
      v6->m_uiAlignText = v7->m_uiAlignText;
    }
    ++v6;
    LOBYTE(v12) = 0;
    ++v7;
  }
  return v6;
}

//----- (00455810) --------------------------------------------------------
void __thiscall std::vector<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::_vector<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this)
{
  std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *v1; // esi@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
      *(NiPointer<PgSprData> **)&this->baseclass_0.___u0.baseclass_0.dummy[0],
      this->baseclass_0._Mylast,
      &this->baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0._Mylast = 0;
  v1->baseclass_0._Myend = 0;
}

//----- (00455860) --------------------------------------------------------
void __thiscall std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::_Reserve(std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *this, unsigned int _Count)
{
  signed int v2; // eax@1
  unsigned int v3; // eax@3
  signed int v4; // edx@3
  unsigned int v5; // edx@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
  if ( 536870911 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
  if ( v3 > v4 )
  {
    if ( 536870911 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::reserve(
      this,
      v5);
  }
}

//----- (004558C0) --------------------------------------------------------
void __cdecl std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListNumSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, int _Ideal, SlideListWin::ListNumSorter _Pred)
{
  boost::shared_ptr<SlideListWin::ListItem> *v4; // ebx@1
  boost::shared_ptr<SlideListWin::ListItem> *v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(
      &_Mid,
      v4,
      v5,
      _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFF8) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFF8) )
    {
      std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListNumSorter>(
        _Mid.baseclass_0.second,
        v5,
        v7,
        _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListNumSorter>(
        v4,
        _Mid.baseclass_0.first,
        v7,
        _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter_boost::shared_ptr<SlideListWin::ListItem>>(
        v4,
        v5,
        _Pred,
        0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFF8) > 8 )
      std::_Make_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListNumSorter>(
        v4,
        v5,
        _Pred,
        0,
        0);
    std::_Sort_heap<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListNumSorter>(v4, v5, _Pred);
  }
}

//----- (004559B0) --------------------------------------------------------
void __cdecl std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListSorter>(boost::shared_ptr<SlideListWin::ListItem> *_First, boost::shared_ptr<SlideListWin::ListItem> *_Last, int _Ideal, SlideListWin::ListSorter _Pred)
{
  boost::shared_ptr<SlideListWin::ListItem> *v4; // ebx@1
  boost::shared_ptr<SlideListWin::ListItem> *v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<boost::shared_ptr<SlideListWin::ListItem> *,boost::shared_ptr<SlideListWin::ListItem> *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(
      &_Mid,
      v4,
      v5,
      _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFF8) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFF8) )
    {
      std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListSorter>(
        _Mid.baseclass_0.second,
        v5,
        v7,
        _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<boost::shared_ptr<SlideListWin::ListItem>___int_SlideListWin::ListSorter>(
        v4,
        _Mid.baseclass_0.first,
        v7,
        _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter_boost::shared_ptr<SlideListWin::ListItem>>(
        v4,
        v5,
        _Pred,
        0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFF8) > 8 )
      std::_Make_heap<boost::shared_ptr<SlideListWin::ListItem>___int_boost::shared_ptr<SlideListWin::ListItem>_SlideListWin::ListSorter>(
        v4,
        v5,
        _Pred,
        0,
        0);
    std::_Sort_heap<boost::shared_ptr<SlideListWin::ListItem>___SlideListWin::ListSorter>(v4, v5, _Pred);
  }
}

//----- (00455AA0) --------------------------------------------------------
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::_vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this)
{
  std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *v1; // esi@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    std::_Destroy_range<std::allocator<SlideListWin::ListItem::ColumnData>>(
      *(SlideListWin::ListItem::ColumnData **)&this->baseclass_0.___u0.baseclass_0.dummy[0],
      this->baseclass_0._Mylast,
      &this->baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0._Mylast = 0;
  v1->baseclass_0._Myend = 0;
}

//----- (00455AF0) --------------------------------------------------------
void __thiscall std::vector<boost::shared_ptr<SlideListWin::ListItem>_std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>::push_back(std::vector<boost::shared_ptr<SlideListWin::ListItem>,std::allocator<boost::shared_ptr<SlideListWin::ListItem> > > *this, boost::shared_ptr<SlideListWin::ListItem> *_Val)
{
  std::vector<boost::shared_ptr<SlideListWin::ListItem>,std::allocator<boost::shared_ptr<SlideListWin::ListItem> > > *v2; // esi@1
  boost::shared_ptr<SlideListWin::ListItem> *v3; // eax@1
  signed int v4; // edi@3

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == this->baseclass_0._Myend )
      std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::_Reserve(
        (std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *)this,
        1u);
    std::allocator<boost::shared_ptr<SlideListWin::ListItem>>::construct(
      (std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *)&v2->baseclass_0._Alval,
      (boost::shared_ptr<SLWCreateInfo::Item> *)v2->baseclass_0._Mylast,
      (boost::shared_ptr<SLWCreateInfo::Item> *)_Val);
    ++v2->baseclass_0._Mylast;
  }
  else
  {
    v4 = (signed int)((char *)_Val - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
    if ( v3 == this->baseclass_0._Myend )
      std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::_Reserve(
        (std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *)this,
        1u);
    std::allocator<boost::shared_ptr<SlideListWin::ListItem>>::construct(
      (std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > *)&v2->baseclass_0._Alval,
      (boost::shared_ptr<SLWCreateInfo::Item> *)v2->baseclass_0._Mylast,
      (boost::shared_ptr<SLWCreateInfo::Item> *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v4));
    ++v2->baseclass_0._Mylast;
  }
}

//----- (00455B60) --------------------------------------------------------
void *__thiscall SlideListWin::_vector_deleting_destructor_(SlideListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SlideListWin::_SlideListWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00455B90) --------------------------------------------------------
void __thiscall std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::push_back(std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *this, boost::shared_ptr<SLWCreateInfo::Item> *_Val)
{
  std::vector<boost::shared_ptr<SLWCreateInfo::Item>,std::allocator<boost::shared_ptr<SLWCreateInfo::Item> > > *v2; // esi@1
  boost::shared_ptr<SLWCreateInfo::Item> *v3; // eax@1
  int v4; // ecx@2
  signed int v5; // edi@3

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3
    || (v4 = *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0],
        *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val) )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::_Reserve(
        v2,
        1u);
    std::_Construct<boost::shared_ptr<SLWCreateInfo::Item>_boost::shared_ptr<SLWCreateInfo::Item>_const__>(
      v2->baseclass_0._Mylast,
      _Val);
    ++v2->baseclass_0._Mylast;
  }
  else
  {
    v5 = (signed int)((char *)_Val - v4) >> 3;
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<boost::shared_ptr<SLWCreateInfo::Item>_std::allocator<boost::shared_ptr<SLWCreateInfo::Item>>>::_Reserve(
        v2,
        1u);
    std::allocator<boost::shared_ptr<SlideListWin::ListItem>>::construct(
      &v2->baseclass_0._Alval,
      v2->baseclass_0._Mylast,
      (boost::shared_ptr<SLWCreateInfo::Item> *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v5));
    ++v2->baseclass_0._Mylast;
  }
}

//----- (00455C00) --------------------------------------------------------
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::reserve(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, unsigned int _Count)
{
  std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *v2; // esi@1
  void *v3; // eax@4
  SlideListWin::ListItem::ColumnData *v4; // ST04_4@4
  SlideListWin::ListItem::ColumnData *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // eax@6
  char *v9; // edx@6
  int v10; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v12; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@4

  v12 = &v10;
  v2 = this;
  if ( _Count > 0x5555555 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 48 < _Count )
  {
    v3 = std::allocator<SlideListWin::ListItem::ColumnData>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(SlideListWin::ListItem::ColumnData **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v13 = 0;
    std::_Uninit_move<SlideListWin::ListItem::ColumnData___SlideListWin::ListItem::ColumnData___std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(
      v5,
      v4,
      (SlideListWin::ListItem::ColumnData *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((unsigned __int64)(715827883i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      std::_Destroy_range<std::allocator<SlideListWin::ListItem::ColumnData>>(
        *(SlideListWin::ListItem::ColumnData **)&v2->baseclass_0.___u0.baseclass_0.dummy[0],
        v2->baseclass_0._Mylast,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Count);
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v8 = _Ptr;
    v9 = &_Ptr[48 * v7];
    v2->baseclass_0._Myend = (SlideListWin::ListItem::ColumnData *)&_Ptr[48 * _Count];
    v2->baseclass_0._Mylast = (SlideListWin::ListItem::ColumnData *)v9;
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (00455D10) --------------------------------------------------------
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::_Reserve(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 48;
  if ( 89478485 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 48;
  if ( v3 > v4 )
  {
    if ( 89478485 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::reserve(
      this,
      v5);
  }
}

//----- (00455D90) --------------------------------------------------------
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::push_back(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, SlideListWin::ListItem::ColumnData *_Val)
{
  std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *v2; // ebx@1
  SlideListWin::ListItem::ColumnData *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  int v6; // edi@5
  SlideListWin::ListItem::ColumnData *v7; // esi@5
  int v8; // edi@5
  SlideListWin::ListItem::ColumnData *v9; // edi@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::_Reserve(
        v2,
        1u);
    v9 = v2->baseclass_0._Mylast;
    if ( v9 )
    {
      v9->m_strColumnText.baseclass_0._Myres = 15;
      v9->m_strColumnText.baseclass_0._Mysize = 0;
      v9->m_strColumnText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v9->m_strColumnText,
        &_Val->m_strColumnText,
        0,
        0xFFFFFFFFu);
      v9->m_nFontSize = _Val->m_nFontSize;
      v9->m_r = _Val->m_r;
      v9->m_g = _Val->m_g;
      v9->m_b = _Val->m_b;
      v9->m_uiAlignText = _Val->m_uiAlignText;
    }
  }
  else
  {
    v4 = (signed int)((unsigned __int64)(715827883i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::_Reserve(
        v2,
        1u);
    v6 = 3 * v5;
    v7 = v2->baseclass_0._Mylast;
    v8 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 16 * v6;
    if ( v7 )
    {
      v7->m_strColumnText.baseclass_0._Myres = 15;
      v7->m_strColumnText.baseclass_0._Mysize = 0;
      v7->m_strColumnText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v7->m_strColumnText,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v8,
        0,
        0xFFFFFFFFu);
      v7->m_nFontSize = *(_DWORD *)(v8 + 28);
      v7->m_r = *(_DWORD *)(v8 + 32);
      v7->m_g = *(_DWORD *)(v8 + 36);
      v7->m_b = *(_DWORD *)(v8 + 40);
      v7->m_uiAlignText = *(_DWORD *)(v8 + 44);
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (00455EB0) --------------------------------------------------------
void __thiscall std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::resize(std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *this, unsigned int _Newsize)
{
  std::vector<SlideListWin::ListItem::ColumnData,std::allocator<SlideListWin::ListItem::ColumnData> > *v2; // esi@1
  SlideListWin::ListItem::ColumnData *v3; // ebx@1
  signed int v4; // ecx@1
  SlideListWin::ListItem::ColumnData *v5; // edi@2
  SlideListWin::ListItem::ColumnData *v6; // edi@3

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  v4 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]);
  if ( v4 / 48 <= _Newsize )
  {
    if ( v4 / 48 < _Newsize )
    {
      std::vector<SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>>::_Reserve(
        v2,
        _Newsize - v4 / 48);
      std::_Uninit_def_fill_n<SlideListWin::ListItem::ColumnData___unsigned_int_SlideListWin::ListItem::ColumnData_std::allocator<SlideListWin::ListItem::ColumnData>_SlideListWin::ListItem::ColumnData>(
        v2->baseclass_0._Mylast,
        _Newsize
      - (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) / 48,
        0,
        &v2->baseclass_0._Alval,
        0,
        (std::_Nonscalar_ptr_iterator_tag)_Newsize);
      v2->baseclass_0._Mylast += _Newsize
                               - (signed int)((char *)v2->baseclass_0._Mylast
                                            - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])
                               / 48;
    }
  }
  else
  {
    v5 = (SlideListWin::ListItem::ColumnData *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 48 * _Newsize);
    if ( v5 != v3 )
    {
      v6 = std::_Move<SlideListWin::ListItem::ColumnData___SlideListWin::ListItem::ColumnData__>(
             v3,
             v3,
             v5,
             (std::_Nonscalar_ptr_iterator_tag)_Newsize);
      std::_Destroy_range<std::allocator<SlideListWin::ListItem::ColumnData>>(
        v6,
        v2->baseclass_0._Mylast,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Newsize);
      v2->baseclass_0._Mylast = v6;
    }
  }
}

//----- (00455F80) --------------------------------------------------------
void __thiscall boost::checked_deleter<SlideListWin::ListItem>::operator__(boost::checked_deleter<SlideListWin::ListItem> *this, SlideListWin::ListItem *x)
{
  SlideListWin::ListItem::ColumnData *v2; // eax@2

  if ( x )
  {
    v2 = *(SlideListWin::ListItem::ColumnData **)&x->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v2 )
    {
      std::_Destroy_range<std::allocator<SlideListWin::ListItem::ColumnData>>(
        v2,
        x->m_vecColumn.baseclass_0._Mylast,
        &x->m_vecColumn.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)x);
      operator delete(*(void **)&x->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    *(_DWORD *)&x->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    x->m_vecColumn.baseclass_0._Mylast = 0;
    x->m_vecColumn.baseclass_0._Myend = 0;
    operator delete(x);
  }
}

//----- (00455FE0) --------------------------------------------------------
void __thiscall boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::dispose(boost::detail::sp_counted_base_impl<SlideListWin::ListItem *,boost::checked_deleter<SlideListWin::ListItem> > *this)
{
  SlideListWin::ListItem *v1; // esi@1
  SlideListWin::ListItem::ColumnData *v2; // eax@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this->ptr;
  if ( v1 )
  {
    v2 = *(SlideListWin::ListItem::ColumnData **)&v1->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v2 )
    {
      std::_Destroy_range<std::allocator<SlideListWin::ListItem::ColumnData>>(
        v2,
        v1->m_vecColumn.baseclass_0._Mylast,
        &v1->m_vecColumn.baseclass_0._Alval,
        __formal);
      operator delete(*(void **)&v1->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    *(_DWORD *)&v1->m_vecColumn.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v1->m_vecColumn.baseclass_0._Mylast = 0;
    v1->m_vecColumn.baseclass_0._Myend = 0;
    operator delete(v1);
  }
}

//----- (00456040) --------------------------------------------------------
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>(CSingleDataMap *this)
{
  CSingleDataMap *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st result; // [sp+0h] [bp-14h]@1
  CSingleDataMap *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)*((_DWORD *)&this->m_SingleData.baseclass_0.baseclass_0 + 1);
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::erase(
    &this->m_SingleData.baseclass_0,
    &result,
    v3,
    v2);
  operator delete(*((void **)&v1->m_SingleData.baseclass_0.baseclass_0 + 1));
}

//----- (004560A0) --------------------------------------------------------
void __thiscall boost::detail::shared_count::shared_count(boost::detail::shared_count *this, SlideListWin::ListItem *p, boost::checked_deleter<SlideListWin::ListItem> d)
{
  boost::detail::shared_count *v3; // esi@1
  void *v4; // eax@1
  int v5; // [sp-10h] [bp-20h]@1
  int *v6; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  v6 = &v5;
  v3 = this;
  this->pi_ = 0;
  v7 = 0;
  v4 = operator new(0x18u);
  if ( v4 )
  {
    *((_DWORD *)v4 + 1) = 1;
    *((_DWORD *)v4 + 2) = 1;
    *((_DWORD *)v4 + 3) = 0;
    *(_DWORD *)v4 = &boost::detail::sp_counted_base_impl<SlideListWin::ListItem___boost::checked_deleter<SlideListWin::ListItem>>::_vftable_;
    *((_DWORD *)v4 + 4) = p;
  }
  else
  {
    v4 = 0;
  }
  v3->pi_ = (boost::detail::sp_counted_base *)v4;
}
// 98407C: using guessed type int (__thiscall *boost__detail__sp_counted_base_impl_SlideListWin__ListItem __boost__checked_deleter_SlideListWin__ListItem_____vftable_)(void *p, char);

//----- (00456140) --------------------------------------------------------
void __thiscall SLWCreateInfo::Item::_Item(SLWCreateInfo::Item *this)
{
  SLWCreateInfo::Item *v1; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v3; // ST10_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v4; // ST0C_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v5; // ST10_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v6; // ST0C_4@3
  NiPointer<PgSprData> *v7; // eax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a result; // [sp+0h] [bp-18h]@3
  std::map<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > *v9; // [sp+4h] [bp-14h]@3
  std::_Nonscalar_ptr_iterator_tag __formal[4]; // [sp+8h] [bp-10h]@1
  int v11; // [sp+14h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)&__formal[0].dummy[0] = this;
  v11 = 0;
  v2 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->vecNodeName.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
  {
    std::_Destroy_range<std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(
      v2,
      this->vecNodeName.baseclass_0._Mylast,
      &this->vecNodeName.baseclass_0._Alval,
      __formal[0]);
    operator delete(*(void **)&v1->vecNodeName.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->vecNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->vecNodeName.baseclass_0._Mylast = 0;
  v1->vecNodeName.baseclass_0._Myend = 0;
  v9 = &v1->mapSprDataWinStateOrder;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,)*((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1);
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,)**((_DWORD **)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1);
  LOBYTE(v11) = 2;
  std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(
    &v1->mapSprDataWinStateOrder.baseclass_0,
    &result,
    v4,
    v3);
  operator delete(*((void **)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a)&v1->mapSprDataWinState;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)*((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1);
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)**((_DWORD **)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1);
  LOBYTE(v11) = 3;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *)&v1->mapSprDataWinState,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st *)&v9,
    v6,
    v5);
  operator delete(*((void **)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1));
  v7 = *(NiPointer<PgSprData> **)&v1->vecSprData.baseclass_0.___u0.baseclass_0.dummy[0];
  v11 = -1;
  if ( v7 )
  {
    std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
      v7,
      v1->vecSprData.baseclass_0._Mylast,
      &v1->vecSprData.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)result.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]);
    operator delete(*(void **)&v1->vecSprData.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->vecSprData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->vecSprData.baseclass_0._Mylast = 0;
  v1->vecSprData.baseclass_0._Myend = 0;
}

//----- (00456240) --------------------------------------------------------
void __thiscall SLWCreateInfo::Item::Item(SLWCreateInfo::Item *this)
{
  SLWCreateInfo::Item *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@6
  std::exception thisa; // [sp+Ch] [bp-24h]@4
  SLWCreateInfo::Item *v6; // [sp+18h] [bp-18h]@1
  int v7; // [sp+1Ch] [bp-14h]@6
  char *_What; // [sp+20h] [bp-10h]@4
  int v9; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  v6 = this;
  *(_DWORD *)&this->vecSprData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->vecSprData.baseclass_0._Mylast = 0;
  this->vecSprData.baseclass_0._Myend = 0;
  v9 = 0;
  *((_DWORD *)&this->mapSprDataWinState.baseclass_0.baseclass_0 + 2) = 0;
  v2 = operator new(0x30u);
  if ( !v2 )
  {
    v7 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v7);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1) = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0
                                                                                      + 1);
  *(_DWORD *)(*((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0
                                                                                      + 1);
  *(_BYTE *)(*((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->mapSprDataWinState.baseclass_0.baseclass_0 + 1) + 45) = 1;
  LOBYTE(v9) = 1;
  *((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 2) = 0;
  v3 = operator new(0x30u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1) = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0
                                                                                           + 1);
  *(_DWORD *)(*((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0
                                                                                           + 1);
  *(_BYTE *)(*((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->mapSprDataWinStateOrder.baseclass_0.baseclass_0 + 1) + 45) = 1;
  *(_DWORD *)&v1->vecNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->vecNodeName.baseclass_0._Mylast = 0;
  v1->vecNodeName.baseclass_0._Myend = 0;
  v1->nItemType = 0;
  v1->pNode = 0;
  v1->bAbbreviatable = 0;
  v1->nVisiableTextMaxNums = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00456360) --------------------------------------------------------
void __thiscall boost::checked_deleter<SLWCreateInfo::Item>::operator__(boost::checked_deleter<SLWCreateInfo::Item> *this, SLWCreateInfo::Item *x)
{
  if ( x )
  {
    SLWCreateInfo::Item::_Item(x);
    operator delete(x);
  }
}

//----- (00456380) --------------------------------------------------------
void __thiscall boost::detail::sp_counted_base_impl<SLWCreateInfo::Item___boost::checked_deleter<SLWCreateInfo::Item>>::dispose(boost::detail::sp_counted_base_impl<SLWCreateInfo::Item *,boost::checked_deleter<SLWCreateInfo::Item> > *this)
{
  void *v1; // esi@1

  v1 = this->ptr;
  if ( v1 )
  {
    SLWCreateInfo::Item::_Item(this->ptr);
    operator delete(v1);
  }
}

//----- (004563A0) --------------------------------------------------------
void __thiscall boost::detail::shared_count::shared_count(boost::detail::shared_count *this, SLWCreateInfo::Item *p, boost::checked_deleter<SLWCreateInfo::Item> d)
{
  boost::detail::shared_count *v3; // esi@1
  void *v4; // eax@1
  int v5; // [sp-10h] [bp-20h]@1
  int *v6; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  v6 = &v5;
  v3 = this;
  this->pi_ = 0;
  v7 = 0;
  v4 = operator new(0x18u);
  if ( v4 )
  {
    *((_DWORD *)v4 + 1) = 1;
    *((_DWORD *)v4 + 2) = 1;
    *((_DWORD *)v4 + 3) = 0;
    *(_DWORD *)v4 = &boost::detail::sp_counted_base_impl<SLWCreateInfo::Item___boost::checked_deleter<SLWCreateInfo::Item>>::_vftable_;
    *((_DWORD *)v4 + 4) = p;
  }
  else
  {
    v4 = 0;
  }
  v3->pi_ = (boost::detail::sp_counted_base *)v4;
}
// 984090: using guessed type int (__thiscall *boost__detail__sp_counted_base_impl_SLWCreateInfo__Item __boost__checked_deleter_SLWCreateInfo__Item_____vftable_)(void *p, char);

//----- (00456440) --------------------------------------------------------
void __thiscall SpeechBubbleWin::SpeechBubbleWin(SpeechBubbleWin *this)
{
  SpeechBubbleWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_fNpcPosX = 0.0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpeechBubbleWin::_vftable_;
  v1->m_fNpcPosY = 0.0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpeechBubbleWin::_vftable_;
  v1->m_uiMode = 0;
}
// 984694: using guessed type int (__stdcall *SpeechBubbleWin___vftable_)(int uiFlags);
// 9846B4: using guessed type int (__thiscall *SpeechBubbleWin___vftable_)(void *p, char);

//----- (00456480) --------------------------------------------------------
void __thiscall SpeechBubbleWin::_SpeechBubbleWin(SpeechBubbleWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpeechBubbleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpeechBubbleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 984694: using guessed type int (__stdcall *SpeechBubbleWin___vftable_)(int uiFlags);
// 9846B4: using guessed type int (__thiscall *SpeechBubbleWin___vftable_)(void *p, char);

//----- (004564A0) --------------------------------------------------------
void __thiscall SpeechBubbleWin::SetBubbleWidth(SpeechBubbleWin *this, unsigned int uiWidth)
{
  unsigned int v2; // eax@1
  SpeechBubbleWin *v3; // esi@1
  unsigned int v4; // ecx@1
  int v5; // eax@3
  int v6; // ebx@3
  int v7; // edi@3
  int v8; // eax@3
  int v9; // eax@3
  NiRefObjectVtbl *v10; // edi@3
  int v11; // eax@3
  NiRefObjectVtbl *v12; // edi@3
  int v13; // eax@3
  NiRefObjectVtbl *v14; // ebx@3
  PgWinSpr *v15; // edi@3
  int v16; // eax@3
  PgWinSpr *v17; // ecx@3
  NiRefObjectVtbl *v18; // ebx@3
  PgWinSpr *v19; // edi@3
  int v20; // eax@3
  NiRefObjectVtbl *v21; // edi@3
  int v22; // eax@3
  NiRefObjectVtbl *v23; // ebx@3
  PgWinSpr *v24; // edi@3
  int v25; // eax@3
  NiRefObjectVtbl *uiWidtha; // [sp+14h] [bp+8h]@3
  NiRefObjectVtbl *uiWidthb; // [sp+14h] [bp+8h]@3
  int uiWidthc; // [sp+14h] [bp+8h]@3
  int uiWidthd; // [sp+14h] [bp+8h]@3
  int uiWidthe; // [sp+14h] [bp+8h]@3

  v2 = uiWidth;
  v3 = this;
  v4 = this->m_uiMinWidth;
  if ( v4 > uiWidth )
    v2 = v4;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v3,
    v2);
  v5 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v3);
  v6 = v3->baseclass_0.baseclass_0.baseclass_0.___u2.m_iWidth;
  v7 = v5;
  ((void (__stdcall *)(_DWORD))v3->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5 + v3->m_uiConner02PosX - v6);
  uiWidtha = v3->m_pkCornor02ArrowUp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v8 = ((int (*)(void))v3->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  uiWidtha[43].__vecDelDtor((NiRefObject *)v3->m_pkCornor02ArrowUp, v8);
  uiWidthb = v3->m_pkCornor02ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (*)(void))v3->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  uiWidthb[43].__vecDelDtor((NiRefObject *)v3->m_pkCornor02ArrowRight, v9);
  ((void (__stdcall *)(_DWORD))v3->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v7 + v3->m_uiConner02PosX - v6);
  v10 = v3->m_pkCornor04ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = ((int (*)(void))v3->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v10[43].__vecDelDtor((NiRefObject *)v3->m_pkCornor04ArrowDown, v11);
  v12 = v3->m_pkCornor04ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = ((int (*)(void))v3->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v12[43].__vecDelDtor((NiRefObject *)v3->m_pkCornor04ArrowRight, v13);
  v14 = v3->m_pkMiddleUP->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v15 = v3->m_pkCornor02;
  uiWidthc = ((int (*)(void))v3->m_pkMiddleUP->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v16 = ((int (__thiscall *)(_DWORD))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v15);
  v14[117].__vecDelDtor((NiRefObject *)v3->m_pkMiddleUP, v16 - uiWidthc);
  v17 = v3->m_pkMiddleDown;
  v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v19 = v3->m_pkCornor04;
  uiWidthd = ((int (*)(void))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v20 = ((int (__thiscall *)(_DWORD))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v19);
  v18[117].__vecDelDtor((NiRefObject *)v3->m_pkMiddleDown, v20 - uiWidthd);
  v21 = v3->m_pkMiddleRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v22 = ((int (*)(void))v3->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v21[43].__vecDelDtor((NiRefObject *)v3->m_pkMiddleRight, v22);
  v23 = v3->m_pkCenter->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = v3->m_pkMiddleUP;
  uiWidthe = ((int (*)(void))v3->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v25 = ((int (__thiscall *)(_DWORD))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v24);
  v23[117].__vecDelDtor((NiRefObject *)v3->m_pkCenter, uiWidthe - v25);
}

//----- (004566A0) --------------------------------------------------------
void __thiscall SpeechBubbleWin::SetBubbleHeight(SpeechBubbleWin *this, unsigned int uiHeight)
{
  unsigned int v2; // eax@1
  SpeechBubbleWin *v3; // esi@1
  unsigned int v4; // ecx@1
  int v5; // eax@3
  int v6; // ebx@3
  int v7; // edi@3
  int v8; // eax@3
  int v9; // eax@3
  NiRefObjectVtbl *v10; // edi@3
  int v11; // eax@3
  NiRefObjectVtbl *v12; // edi@3
  int v13; // eax@3
  NiRefObjectVtbl *v14; // ebx@3
  PgWinSpr *v15; // edi@3
  int v16; // eax@3
  NiRefObjectVtbl *v17; // edi@3
  int v18; // eax@3
  NiRefObjectVtbl *v19; // ebx@3
  PgWinSpr *v20; // edi@3
  int v21; // eax@3
  NiRefObjectVtbl *v22; // ebx@3
  PgWinSpr *v23; // edi@3
  int v24; // eax@3
  NiRefObjectVtbl *uiHeighta; // [sp+14h] [bp+8h]@3
  NiRefObjectVtbl *uiHeightb; // [sp+14h] [bp+8h]@3
  int uiHeightc; // [sp+14h] [bp+8h]@3
  int uiHeightd; // [sp+14h] [bp+8h]@3
  int uiHeighte; // [sp+14h] [bp+8h]@3

  v2 = uiHeight;
  v3 = this;
  v4 = this->m_uiMinHeight;
  if ( v4 > uiHeight )
    v2 = v4;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v3,
    v2);
  v5 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(v3);
  v6 = v3->baseclass_0.baseclass_0.baseclass_0.___u3.m_iHeight;
  v7 = v5;
  ((void (__stdcall *)(_DWORD))v3->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v5 + v3->m_uiConner03PosY - v6);
  uiHeighta = v3->m_pkCornor03ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v8 = ((int (*)(void))v3->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  uiHeighta[44].__vecDelDtor((NiRefObject *)v3->m_pkCornor03ArrowDown, v8);
  uiHeightb = v3->m_pkCornor03ArrowLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (*)(void))v3->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  uiHeightb[44].__vecDelDtor((NiRefObject *)v3->m_pkCornor03ArrowLeft, v9);
  ((void (__stdcall *)(_DWORD))v3->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v7 + v3->m_uiConner03PosY - v6);
  v10 = v3->m_pkCornor04ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = ((int (*)(void))v3->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v10[44].__vecDelDtor((NiRefObject *)v3->m_pkCornor04ArrowDown, v11);
  v12 = v3->m_pkCornor04ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = ((int (*)(void))v3->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v12[44].__vecDelDtor((NiRefObject *)v3->m_pkCornor04ArrowRight, v13);
  v14 = v3->m_pkMiddleLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v15 = v3->m_pkCornor03;
  uiHeightc = ((int (*)(void))v3->m_pkMiddleLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v16 = ((int (__thiscall *)(_DWORD))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v15);
  v14[118].__vecDelDtor((NiRefObject *)v3->m_pkMiddleLeft, v16 - uiHeightc);
  v17 = v3->m_pkMiddleDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = ((int (*)(void))v3->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v17[44].__vecDelDtor((NiRefObject *)v3->m_pkMiddleDown, v18);
  v19 = v3->m_pkMiddleRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = v3->m_pkCornor04;
  uiHeightd = ((int (*)(void))v3->m_pkMiddleRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v21 = ((int (__thiscall *)(_DWORD))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v20);
  v19[118].__vecDelDtor((NiRefObject *)v3->m_pkMiddleRight, v21 - uiHeightd);
  v22 = v3->m_pkCenter->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = v3->m_pkMiddleLeft;
  uiHeighte = ((int (*)(void))v3->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v24 = ((int (__thiscall *)(_DWORD))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v23);
  v22[118].__vecDelDtor((NiRefObject *)v3->m_pkCenter, uiHeighte - v24);
}

//----- (004568A0) --------------------------------------------------------
void __thiscall SpeechBubbleWin::HideArrowWin(SpeechBubbleWin *this)
{
  SpeechBubbleWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkCornor01ArrowUp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor01ArrowLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor02ArrowUp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor02ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor03ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor03ArrowLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor04ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor04ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (00456980) --------------------------------------------------------
void __thiscall SpeechBubbleWin::SetNpcPos(SpeechBubbleWin *this, float x, float y)
{
  this->m_fNpcPosX = x;
  this->m_fNpcPosY = y;
}

//----- (004569A0) --------------------------------------------------------
void __thiscall SpeechBubbleWin::SetTargetXY(SpeechBubbleWin *this, float fTargetX, float fTargetY)
{
  int v3; // esi@0
  int v4; // ST04_4@1
  SpeechBubbleWin *v5; // esi@1
  unsigned int v6; // edi@5
  int v7; // edi@8
  int v8; // edi@13
  int v9; // edi@16
  unsigned int v10; // edi@17
  int v11; // edi@19
  int v12; // edi@20
  int v13; // edi@22
  double v14; // [sp+8h] [bp-Ch]@1
  double v15; // [sp+8h] [bp-Ch]@13

  v4 = v3;
  v5 = this;
  v14 = fTargetX + 50.0;
  if ( (double)((int (__stdcall *)(int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v4) <= v14
    || (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5) <= fTargetY + 50.0 )
  {
    if ( (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5) <= v14
      || (v6 = (unsigned int)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(v5) >> 1,
          (double)(((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5)
                 - v6) >= fTargetY + 50.0) )
    {
      if ( (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5) <= v14
        || (v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(v5),
            (double)(unsigned int)(((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5)
                                 + v7) <= fTargetY + 50.0) )
      {
        if ( (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5) <= v14
          || (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5) >= fTargetY + 50.0 )
        {
          v15 = fTargetX - 50.0;
          v8 = ((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v5);
          if ( (double)(unsigned int)(((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5)
                                    + v8) >= v15
            || (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5) <= fTargetY + 50.0 )
          {
            v9 = ((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v5);
            if ( (double)(unsigned int)(((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5)
                                      + v9) >= v15
              || (v10 = (unsigned int)((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(v5) >> 1,
                  (double)(((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5)
                         - v10) >= fTargetY + 50.0) )
            {
              v11 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v5);
              if ( (double)(unsigned int)(((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5)
                                        + v11) >= v15
                || (v12 = ((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(v5),
                    (double)(unsigned int)(((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5)
                                         + v12) <= fTargetY + 50.0) )
              {
                v13 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v5);
                if ( (double)(unsigned int)(((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5)
                                          + v13) < v15 )
                {
                  if ( (double)((int (__thiscall *)(SpeechBubbleWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5) < fTargetY + 50.0 )
                  {
                    SpeechBubbleWin::HideArrowWin(v5);
                    ((void (__stdcall *)(_DWORD))v5->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                    ((void (__stdcall *)(signed int))v5->m_pkCornor04ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                  }
                }
              }
              else
              {
                SpeechBubbleWin::HideArrowWin(v5);
                ((void (__cdecl *)(_DWORD))v5->m_pkCornor04->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                ((void (__cdecl *)(signed int))v5->m_pkCornor04ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              }
            }
            else
            {
              SpeechBubbleWin::HideArrowWin(v5);
              ((void (__cdecl *)(_DWORD))v5->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ((void (__cdecl *)(signed int))v5->m_pkCornor02ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            }
          }
          else
          {
            SpeechBubbleWin::HideArrowWin(v5);
            ((void (__cdecl *)(_DWORD))v5->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            ((void (__cdecl *)(signed int))v5->m_pkCornor02ArrowUp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          }
        }
        else
        {
          SpeechBubbleWin::HideArrowWin(v5);
          ((void (__cdecl *)(_DWORD))v5->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          ((void (__cdecl *)(signed int))v5->m_pkCornor03ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        }
      }
      else
      {
        SpeechBubbleWin::HideArrowWin(v5);
        ((void (__cdecl *)(_DWORD))v5->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__cdecl *)(signed int))v5->m_pkCornor03ArrowLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
    }
    else
    {
      SpeechBubbleWin::HideArrowWin(v5);
      ((void (__cdecl *)(_DWORD))v5->m_pkCornor01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__cdecl *)(signed int))v5->m_pkCornor01ArrowLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
  }
  else
  {
    SpeechBubbleWin::HideArrowWin(v5);
    ((void (__cdecl *)(_DWORD))v5->m_pkCornor01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(signed int))v5->m_pkCornor01ArrowUp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
}
// 4569A0: could not find valid save-restore pair for esi

//----- (00456E40) --------------------------------------------------------
unsigned int __thiscall SpeechBubbleWin::GetBubbleHeight(SpeechBubbleWin *this)
{
  return ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)();
}

//----- (00456E50) --------------------------------------------------------
void __thiscall SpeechBubbleWin::UpdateMainCharMode(SpeechBubbleWin *this, NiCamera *pkWorldCamera)
{
  SpeechBubbleWin *v2; // esi@1
  Char *v3; // eax@1
  _BYTE v4[12]; // ST0C_12@2
  float v5; // ST08_4@2
  float v6; // ST04_4@2
  NiPoint3 k2DOrthoPos; // [sp+1Ch] [bp-1Ch]@2
  NiPoint3 kWorldPos; // [sp+28h] [bp-10h]@2

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, g_pkMainChar->m_kHandle);
  if ( v3 )
  {
    Char::GetHeightPos(v3, &kWorldPos);
    kWorldPos.z = kWorldPos.z - 3.0;
    *(_DWORD *)v4 = (_DWORD)kWorldPos.x;
    *(_QWORD *)&v4[4] = *(_QWORD *)&kWorldPos.y;
    v5 = (double)PgWin::ms_uiScreenHeight;
    v6 = (double)PgWin::ms_uiScreenWidth;
    if ( PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v6, v5, *(NiPoint3 *)v4, &k2DOrthoPos) )
      SpeechBubbleWin::SetTargetXY(v2, k2DOrthoPos.x, k2DOrthoPos.y);
  }
}

//----- (00456F10) --------------------------------------------------------
bool __thiscall SpeechBubbleWin::Create(SpeechBubbleWin *this, PgFrameWork *pkFrameWork)
{
  SpeechBubbleWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // eax@15
  NiRefObjectVtbl *v11; // edx@15
  int v12; // eax@15
  int v13; // edi@15
  int v14; // ebx@15
  NiNode *v15; // ecx@15
  PgSprData *v16; // eax@15
  PgWinSpr *v17; // eax@15
  PgSprData *v18; // eax@15
  PgWinSpr *v19; // eax@15
  PgSprData *v20; // eax@15
  PgWinSpr *v21; // eax@15
  PgSprData *v22; // eax@15
  PgWinSpr *v23; // eax@15
  PgSprData *v24; // eax@15
  PgWinSpr *v25; // eax@15
  int v26; // eax@15
  NiNode *v27; // ecx@15
  PgSprData *v28; // eax@15
  PgWinSpr *v29; // eax@15
  PgSprData *v30; // eax@15
  PgWinSpr *v31; // eax@15
  PgSprData *v32; // eax@15
  PgWinSpr *v33; // eax@15
  PgSprData *v34; // eax@15
  PgWinSpr *v35; // eax@15
  int v36; // eax@15
  NiNode *v37; // ecx@15
  PgSprData *v38; // eax@15
  PgWinSpr *v39; // eax@15
  PgSprData *v40; // eax@15
  PgWinSpr *v41; // eax@15
  PgSprData *v42; // eax@15
  PgWinSpr *v43; // eax@15
  PgSprData *v44; // eax@15
  PgWinSpr *v45; // eax@15
  PgSprData *v46; // eax@15
  PgWinSpr *v47; // eax@15
  PgSprData *v48; // eax@15
  PgWinSpr *v49; // eax@15
  PgSprData *v50; // eax@15
  PgWinSpr *v51; // eax@15
  PgSprData *v52; // eax@15
  PgWinSpr *v53; // eax@15
  PgFont *v54; // eax@15
  PgWinText *v55; // eax@15
  NiRefObjectVtbl *v56; // edi@15
  PgFont *v57; // eax@15
  NiNode *v58; // esi@16
  NiSourceTexture *pkTexture; // [sp+88h] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+8Ch] [bp-18h]@1
  int uiLeft; // [sp+90h] [bp-14h]@11
  int uiTop; // [sp+94h] [bp-10h]@11
  int v63; // [sp+A0h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v63 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v63 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\SpeechBubbleWin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "SpeechBubbleWin", 0) )
  {
    v4 = spNode.m_pObject;
    v63 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = ((int (__thiscall *)(SpeechBubbleWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v11 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v2->m_uiMinWidth = v10;
  v12 = ((int (__thiscall *)(SpeechBubbleWin *))v11[37].__vecDelDtor)(v2);
  v13 = uiLeft;
  v14 = uiTop;
  v15 = spNode.m_pObject;
  v2->m_uiMinHeight = v12;
  v16 = PgSprData::Create(&v15->baseclass_0, "Corner01Nor", &uiLeft, &uiTop, pkTexture);
  v17 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor01 = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner01ArrowUp", &uiLeft, &uiTop, pkTexture);
  v19 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor01ArrowUp = v19;
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor01ArrowUp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner01ArrowLeft01", &uiLeft, &uiTop, pkTexture);
  v21 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor01ArrowLeft = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor01ArrowLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Middle_Up", &uiLeft, &uiTop, pkTexture);
  v23 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMiddleUP = v23;
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v23,
    0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner02Nor", &uiLeft, &uiTop, pkTexture);
  v25 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor02 = v25;
  v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v25,
    0);
  v26 = ((int (*)(void))v2->m_pkCornor02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v27 = spNode.m_pObject;
  v2->m_uiConner02PosX = v26;
  v28 = PgSprData::Create(&v27->baseclass_0, "Corner02ArrowUp", &uiLeft, &uiTop, pkTexture);
  v29 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor02ArrowUp = v29;
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor02ArrowUp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner02ArrowRight01", &uiLeft, &uiTop, pkTexture);
  v31 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor02ArrowRight = v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor02ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Middle_Left", &uiLeft, &uiTop, pkTexture);
  v33 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMiddleLeft = v33;
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner03Nor", &uiLeft, &uiTop, pkTexture);
  v35 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor03 = v35;
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v35,
    0);
  v36 = ((int (*)(void))v2->m_pkCornor03->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v37 = spNode.m_pObject;
  v2->m_uiConner03PosY = v36;
  v38 = PgSprData::Create(&v37->baseclass_0, "Corner03ArrowDown", &uiLeft, &uiTop, pkTexture);
  v39 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor03ArrowDown = v39;
  v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v39,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor03ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner03ArrowLeft01", &uiLeft, &uiTop, pkTexture);
  v41 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor03ArrowLeft = v41;
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v41,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor03ArrowLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Middle_Down", &uiLeft, &uiTop, pkTexture);
  v43 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMiddleDown = v43;
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v43,
    0);
  v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner04Nor", &uiLeft, &uiTop, pkTexture);
  v45 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v44, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor04 = v45;
  v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v45,
    0);
  v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner04ArrowDown", &uiLeft, &uiTop, pkTexture);
  v47 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v46, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor04ArrowDown = v47;
  v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v47,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor04ArrowDown->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Corner04ArrowRight01", &uiLeft, &uiTop, pkTexture);
  v49 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCornor04ArrowRight = v49;
  v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v49,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCornor04ArrowRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Middle_Right", &uiLeft, &uiTop, pkTexture);
  v51 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v50, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMiddleRight = v51;
  v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v51,
    0);
  v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Center", &uiLeft, &uiTop, pkTexture);
  v53 = PgWinSpr::CreateWin(uiLeft - v13, uiTop - v14, v52, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCenter = v53;
  v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v53,
    0);
  v54 = Font::Get(0);
  v55 = PgWinText::CreateWin(0, 1, 0x12Cu, 0x12Cu, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTextWin = v55;
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v55,
    0);
  SpScreenText::SetVerticalGap(&v2->m_pkTextWin->m_spTextGeom.m_pObject->baseclass_0, 6);
  v56 = v2->m_pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v57 = Font::Get(BOLD);
  v56[113].__vecDelDtor((NiRefObject *)v2->m_pkTextWin, (unsigned int)v57);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(SpeechBubbleWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.0);
  v63 = -1;
  if ( spNode.m_pObject )
  {
    v58 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v58 )
        v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v58, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004576D0) --------------------------------------------------------
void __thiscall SpeechBubbleWin::Update(SpeechBubbleWin *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  unsigned int v4; // eax@1

  v4 = this->m_uiMode;
  if ( v4 )
  {
    if ( v4 == 1 )
      SpeechBubbleWin::SetTargetXY(this, this->m_fNpcPosX, this->m_fNpcPosY);
  }
  else
  {
    SpeechBubbleWin::UpdateMainCharMode(this, pkWorldCamera);
  }
}

//----- (00457710) --------------------------------------------------------
void __thiscall SpeechBubbleWin::SetText(SpeechBubbleWin *this, const char *text)
{
  SpeechBubbleWin *v2; // esi@1
  int v3; // edi@1
  PgFont *v4; // eax@5
  PgWinText *v5; // eax@5
  NiRefObjectVtbl *v6; // edi@5
  PgFont *v7; // eax@5
  int v8; // [sp+8h] [bp-4h]@1

  v2 = this;
  ((void (__stdcall *)(int *, PgWinText *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
    &v8,
    this->m_pkTextWin);
  v3 = v8;
  if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v3 )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
  v2->m_pkTextWin = 0;
  v4 = Font::Get(0);
  v5 = PgWinText::CreateWin(0, 1, 0x190u, 0x12Cu, v4, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTextWin = v5;
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v5,
    0);
  SpScreenText::SetVerticalGap(&v2->m_pkTextWin->m_spTextGeom.m_pObject->baseclass_0, 4);
  v6 = v2->m_pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = Font::Get(BOLD);
  v6[113].__vecDelDtor((NiRefObject *)v2->m_pkTextWin, (unsigned int)v7);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(const char *))v2->m_pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(text);
  SpeechBubbleWin::SetBubbleWidth(v2, 0x190u);
  SpeechBubbleWin::SetBubbleHeight(v2, 0x12Cu);
}

//----- (00457810) --------------------------------------------------------
SpeechBubbleWin *__cdecl SpeechBubbleWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SpeechBubbleWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1BCu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *((float *)v2 + 109) = 0.0;
    *(_DWORD *)v2 = &SpeechBubbleWin::_vftable_;
    *((float *)v2 + 110) = 0.0;
    *((_DWORD *)v2 + 58) = &SpeechBubbleWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SpeechBubbleWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 984694: using guessed type int (__stdcall *SpeechBubbleWin___vftable_)(int uiFlags);
// 9846B4: using guessed type int (__thiscall *SpeechBubbleWin___vftable_)(void *p, char);

//----- (00457960) --------------------------------------------------------
void *__thiscall SpeechBubbleWin::_vector_deleting_destructor_(SpeechBubbleWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpeechBubbleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpeechBubbleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 984694: using guessed type int (__stdcall *SpeechBubbleWin___vftable_)(int uiFlags);
// 9846B4: using guessed type int (__thiscall *SpeechBubbleWin___vftable_)(void *p, char);

//----- (004579A0) --------------------------------------------------------
void __thiscall WebMsgWin::SetFrameWorkMsg(WebMsgWin *this, PgFrameWork *pkFrameWork, PgMsg::Frame *pkFrameMsg)
{
  WebMsgWin *v3; // esi@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(pkFrameWork);
  if ( pkFrameMsg )
  {
    v3->m_kFrameMsg.m_uiDumy[0] = pkFrameMsg->m_uiDumy[0];
    v3->m_kFrameMsg.m_uiDumy[1] = pkFrameMsg->m_uiDumy[1];
    v3->m_kFrameMsg.m_uiFrameMsg = pkFrameMsg->m_uiFrameMsg;
    v3->m_kFrameMsg.m_uiFrameWParam = pkFrameMsg->m_uiFrameWParam;
    v3->m_kFrameMsg.m_uiFramelParam = pkFrameMsg->m_uiFramelParam;
  }
}

//----- (004579F0) --------------------------------------------------------
void __thiscall WebMsgWin::OnCommand(WebMsgWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00457A10) --------------------------------------------------------
void __thiscall WebMsgWin::ProcessMeInput(WebMsgWin *this, bool *bHit)
{
  PgWin *v2; // esi@1
  PgFrameWork *v3; // eax@2

  v2 = (PgWin *)this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
      BYTE3(v3[73].m_kMsgQ.m_uiAlloced) = 0;
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00457A50) --------------------------------------------------------
void __thiscall WebMsgWin::UpdateMeWin(WebMsgWin *this, float fCurTime)
{
  WebMsgWin *v2; // esi@1
  int v3; // ST10_4@2
  int v4; // ST0C_4@2
  int v5; // eax@2
  int v6; // ST08_4@2
  int v7; // eax@2
  tagRECT kRect; // [sp+4h] [bp-14h]@2
  unsigned int v9; // [sp+14h] [bp-4h]@1
  int v10; // [sp+18h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  if ( this->m_hWebWindow )
  {
    GetWindowRect(g_hMainWnd, &kRect);
    v3 = v2->m_uiWebHeight;
    v4 = v2->m_uiWebWidth;
    v5 = ((int (__thiscall *)(WebMsgWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
    v6 = kRect.top + v2->m_iWebYPos + v5;
    v7 = ((int (__thiscall *)(WebMsgWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v2);
    MoveWindow(v2->m_hWebWindow, kRect.left + v2->m_iWebXPos + v7, v6, v4, v3, 1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00457AE0) --------------------------------------------------------
bool __thiscall WebMsgWin::Create(WebMsgWin *this, const char *pcTitle)
{
  WebMsgWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  PgFont *v8; // eax@11
  PgWinText *v9; // edi@11
  PgSprData *v10; // edi@13
  unsigned int uiWidth; // [sp+24h] [bp-20h]@10
  unsigned int uiHeight; // [sp+28h] [bp-1Ch]@10
  int uiLeft; // [sp+2Ch] [bp-18h]@4
  int uiTop; // [sp+30h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+34h] [bp-10h]@1
  int v16; // [sp+40h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v16 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\Account\\SpawnAppsNotice.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, 0, 0, 0)
    || !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Title", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v16 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = Font::Get(0);
  v9 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v9,
    1u);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)pcTitle);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "WebPage",
         &v2->m_iWebXPos,
         &v2->m_iWebYPos,
         &v2->m_uiWebWidth,
         &v2->m_uiWebHeight) )
  {
    v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor(
      (NiRefObject *)v2,
      PgWin::ms_uiScreenWidth);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v16 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 1;
  }
  else
  {
    v16 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00457D60) --------------------------------------------------------
const char *__thiscall WebMsgWin::GetURL(WebMsgWin *this)
{
  const char *result; // eax@1

  result = (const char *)&this->m_kWebURL;
  if ( this->m_kWebURL.baseclass_0._Myres >= 0x10 )
    result = *(const char **)result;
  return result;
}

//----- (00457D80) --------------------------------------------------------
void __thiscall WebMsgWin::WebMsgWin(WebMsgWin *this)
{
  WebMsgWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WebMsgWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WebMsgWin::_vftable_;
  v1->m_kWebURL.baseclass_0._Mysize = 0;
  v1->m_kWebURL.baseclass_0._Myres = 15;
  v1->m_kWebURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}
// 984940: using guessed type int (__stdcall *WebMsgWin___vftable_)(int uiFlags);
// 98495C: using guessed type int (__thiscall *WebMsgWin___vftable_)(void *p, char);

//----- (00457DC0) --------------------------------------------------------
void __thiscall WebMsgWin::_WebMsgWin(WebMsgWin *this)
{
  WebMsgWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WebMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WebMsgWin::_vftable_;
  if ( this->m_kWebURL.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kWebURL.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_kWebURL.baseclass_0._Myres = 15;
  v1->m_kWebURL.baseclass_0._Mysize = 0;
  v1->m_kWebURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 984940: using guessed type int (__stdcall *WebMsgWin___vftable_)(int uiFlags);
// 98495C: using guessed type int (__thiscall *WebMsgWin___vftable_)(void *p, char);

//----- (00457E10) --------------------------------------------------------
void __thiscall WebMsgWin::OnClose(WebMsgWin *this)
{
  WebMsgWin *v1; // esi@1
  PgFrameWork *v2; // ecx@1
  bool v3; // cf@3
  int v4; // eax@3

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  if ( v2 )
    PgFrameWork::AddMsg(
      v2,
      v1->m_kFrameMsg.m_uiFrameMsg,
      v1->m_kFrameMsg.m_uiFrameWParam,
      v1->m_kFrameMsg.m_uiFramelParam);
  v3 = v1->m_kWebURL.baseclass_0._Myres < 0x10;
  v4 = (int)&v1->m_kWebURL;
  v1->m_kWebURL.baseclass_0._Mysize = 0;
  if ( !v3 )
    v4 = *(_DWORD *)v4;
  *(_BYTE *)v4 = 0;
  DestroyWindow(v1->m_hWebWindow);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
}

//----- (00457E70) --------------------------------------------------------
void __thiscall WebMsgWin::OnShowWin(WebMsgWin *this)
{
  WebMsgWin *v1; // esi@1
  int v2; // eax@3
  int v3; // edi@3
  int v4; // eax@3
  int v5; // eax@3
  const char *v6; // ecx@3
  HWND__ *v7; // edi@5
  tagRECT kRect; // [sp+Ch] [bp-14h]@3
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  if ( this->m_hWebWindow )
  {
    DestroyWindow(this->m_hWebWindow);
    v1->m_hWebWindow = 0;
  }
  GetWindowRect(g_hMainWnd, &kRect);
  v2 = ((int (__thiscall *)(WebMsgWin *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v1);
  v3 = kRect.left + v1->m_iWebXPos + v2;
  v4 = ((int (__thiscall *)(WebMsgWin *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1);
  v5 = kRect.top + v1->m_iWebYPos + v4;
  v6 = (const char *)&v1->m_kWebURL;
  if ( v1->m_kWebURL.baseclass_0._Myres >= 0x10 )
    v6 = *(const char **)v6;
  v7 = CreateWindowExA(
         0,
         "WebCtrl32",
         v6,
         0x90000000u,
         v3,
         v5,
         v1->m_uiWebWidth,
         v1->m_uiWebHeight,
         g_hMainWnd,
         0,
         g_hMainInstance,
         0);
  ShowWindow(v7, 5);
  v1->m_hWebWindow = v7;
}
// A85C00: using guessed type int __security_cookie;

//----- (00457F50) --------------------------------------------------------
WebMsgWin *__cdecl WebMsgWin::CreateWin(const char *pcTitle)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WebMsgWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1ACu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WebMsgWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WebMsgWin::_vftable_;
    *((_DWORD *)v2 + 97) = 15;
    *((_DWORD *)v2 + 96) = 0;
    *((_BYTE *)v2 + 368) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, const char *))(*(_DWORD *)v2 + 548))(v2, pcTitle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WebMsgWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 984940: using guessed type int (__stdcall *WebMsgWin___vftable_)(int uiFlags);
// 98495C: using guessed type int (__thiscall *WebMsgWin___vftable_)(void *p, char);

//----- (004580A0) --------------------------------------------------------
WebMsgWin *__cdecl WebMsgWin::Modal(const char *pcURL, const char *pcTitle)
{
  WebMsgWin *result; // eax@1
  PgWin *v3; // esi@1

  result = WebMsgWin::CreateWin(pcTitle);
  v3 = (PgWin *)result;
  if ( result )
  {
    result->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
      (NiRefObject *)result,
      (unsigned int)pcURL);
    PgWinMgr::DoModal(&Pgg_kWinMgr, v3, 0, 0, 0);
    result = (WebMsgWin *)v3;
  }
  return result;
}

//----- (004580E0) --------------------------------------------------------
WebMsgWin *__cdecl WebMsgWin::Modaless(const char *pcURL, const char *pcTitle)
{
  WebMsgWin *result; // eax@1
  PgWin *v3; // esi@1

  result = WebMsgWin::CreateWin(pcTitle);
  v3 = (PgWin *)result;
  if ( result )
  {
    result->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
      (NiRefObject *)result,
      (unsigned int)pcURL);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
    result = (WebMsgWin *)v3;
  }
  return result;
}

//----- (00458120) --------------------------------------------------------
void __thiscall WebMsgWin::SetURL(WebMsgWin *this, const char *pcURL)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this->m_kWebURL, pcURL, strlen(pcURL));
}

//----- (00458150) --------------------------------------------------------
void *__thiscall WebMsgWin::_scalar_deleting_destructor_(WebMsgWin *this, unsigned int a2)
{
  WebMsgWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WebMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WebMsgWin::_vftable_;
  if ( this->m_kWebURL.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kWebURL.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_kWebURL.baseclass_0._Myres = 15;
  v2->m_kWebURL.baseclass_0._Mysize = 0;
  v2->m_kWebURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 984940: using guessed type int (__stdcall *WebMsgWin___vftable_)(int uiFlags);
// 98495C: using guessed type int (__thiscall *WebMsgWin___vftable_)(void *p, char);

//----- (004581C0) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetPortA(CWebHttpConnect *this, unsigned __int16 nPort)
{
  int result; // eax@2

  if ( !nPort || this->UrlInfo.bUsePort )
  {
    result = 0;
  }
  else
  {
    this->UrlInfo.bUsePort = 1;
    this->UrlInfo.nPort = nPort;
    result = 1;
  }
  return result;
}

//----- (00458200) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetServer(CWebHttpConnect *this, char *sServer)
{
  CWebHttpConnect *v2; // esi@1
  int result; // eax@2

  v2 = this;
  if ( !sServer || this->UrlInfo.bUseServer )
  {
    result = 0;
  }
  else
  {
    strncpy(this->UrlInfo.sServer, sServer, 0x40u);
    result = 1;
    ++v2->UrlInfo.bUseServer;
  }
  return result;
}

//----- (00458240) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetPath(CWebHttpConnect *this, char *sPath)
{
  CWebHttpConnect *v2; // esi@1
  int result; // eax@2

  v2 = this;
  if ( !sPath || this->UrlInfo.bUsePath )
  {
    result = 0;
  }
  else
  {
    strncpy(this->UrlInfo.sPath, sPath, 0x100u);
    result = 1;
    ++v2->UrlInfo.bUsePath;
  }
  return result;
}

//----- (00458290) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetVersion(CWebHttpConnect *this, char *sVersion)
{
  CWebHttpConnect *v2; // esi@1
  int result; // eax@2

  v2 = this;
  if ( !sVersion || this->UrlInfo.bUseVersion )
  {
    result = 0;
  }
  else
  {
    strncpy(this->UrlInfo.sVersion, sVersion, 0x10u);
    result = 1;
    ++v2->UrlInfo.bUseVersion;
  }
  return result;
}

//----- (004582D0) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetFuntion(CWebHttpConnect *this, char *sFuntion)
{
  CWebHttpConnect *v2; // esi@1
  int result; // eax@2

  v2 = this;
  if ( !sFuntion || this->UrlInfo.bUseFuntion )
  {
    result = 0;
  }
  else
  {
    strncpy(this->UrlInfo.sFuntion, sFuntion, 0x40u);
    result = 1;
    ++v2->UrlInfo.bUseFuntion;
  }
  return result;
}

//----- (00458310) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetParameter(CWebHttpConnect *this, char *sParameter, char *sParameterData)
{
  CWebHttpConnect *v3; // esi@1
  int result; // eax@2
  unsigned int v5; // eax@4

  v3 = this;
  if ( sParameter && sParameterData && (v5 = this->UrlInfo.nParameterCnt, v5 < 0xC) )
  {
    _snprintf(this->UrlInfo.sParameter[v5], 0x80u, "%s=%s");
    result = 1;
    ++v3->UrlInfo.nParameterCnt;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00458370) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetParameter(CWebHttpConnect *this, char *sParameter)
{
  CWebHttpConnect *v2; // esi@1
  int result; // eax@2
  unsigned int v4; // eax@3

  v2 = this;
  if ( sParameter && (v4 = this->UrlInfo.nParameterCnt, v4 < 0xC) )
  {
    _snprintf(this->UrlInfo.sParameter[v4], 0x80u, "%s");
    result = 1;
    ++v2->UrlInfo.nParameterCnt;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004583C0) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetSharedSecret(CWebHttpConnect *this, char *sSharedSecret)
{
  CWebHttpConnect *v2; // esi@1
  int result; // eax@2

  v2 = this;
  if ( !sSharedSecret || this->UrlInfo.bUseSharedSecret )
  {
    result = 0;
  }
  else
  {
    strncpy(this->UrlInfo.sSharedSecret, sSharedSecret, 0x100u);
    result = 1;
    ++v2->UrlInfo.bUseSharedSecret;
  }
  return result;
}

//----- (00458410) --------------------------------------------------------
int __thiscall CWebHttpConnect::SetTokenSecret(CWebHttpConnect *this, char *sTokenSecret)
{
  CWebHttpConnect *v2; // esi@1
  int result; // eax@2

  v2 = this;
  if ( !sTokenSecret || this->UrlInfo.bUseTokenSecret )
  {
    result = 0;
  }
  else
  {
    strncpy(this->UrlInfo.sTokenSecret, sTokenSecret, 0x100u);
    result = 1;
    ++v2->UrlInfo.bUseTokenSecret;
  }
  return result;
}

//----- (00458460) --------------------------------------------------------
char *__thiscall CWebHttpConnect::MakeAddress(CWebHttpConnect *this)
{
  CWebHttpConnect *v1; // esi@1
  unsigned int v2; // eax@1
  unsigned int v3; // edi@2
  char *v4; // ebx@3

  v1 = this;
  v2 = this->UrlInfo.nParameterCnt;
  if ( v2 )
  {
    v3 = 0;
    if ( v2 )
    {
      v4 = (char *)this->UrlInfo.sParameter;
      do
      {
        v1->UrlInfo.nAddressLen += _snprintf(
                                     &v1->UrlInfo.sAddress[v1->UrlInfo.nAddressLen],
                                     1024 - v1->UrlInfo.nAddressLen,
                                     "%s&");
        ++v3;
        v4 += 128;
      }
      while ( v3 < v1->UrlInfo.nParameterCnt );
    }
    --v1->UrlInfo.nAddressLen;
    v1->UrlInfo.sAddress[v1->UrlInfo.nAddressLen] = 0;
    v1->UrlInfo.nParameterCnt = 0;
  }
  return v1->UrlInfo.sAddress;
}

//----- (004584E0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CWebHttpConnect::GetHTMLDocument(CWebHttpConnect *this)
{
  return &this->HTMLDocument;
}

//----- (004584F0) --------------------------------------------------------
char *__thiscall CWebHttpConnect::GetString(CWebHttpConnect *this, char *sItem)
{
  char *v2; // edx@1
  CWebHttpConnect *v3; // esi@1
  char *result; // eax@2
  unsigned int v5; // edi@4
  int v6; // eax@8
  unsigned int v7; // ecx@13
  int v8; // eax@15
  char v9; // al@17
  unsigned int nItemLen; // [sp+4h] [bp-4h]@4

  v2 = sItem;
  v3 = this;
  if ( sItem && this->bHtmlSuccess )
  {
    nItemLen = strlen(sItem);
    v5 = 0;
    if ( v3->nHTMLDocumentLen )
    {
      while ( 1 )
      {
        v6 = (int)(v3->HTMLDocument.baseclass_0._Myres < 0x10 ? &v3->HTMLDocument : *(_DWORD *)&v3->HTMLDocument.baseclass_0.___u0.baseclass_0.dummy[0]);
        if ( !strncmp((const char *)(v5 + v6), v2, nItemLen) )
          break;
        ++v5;
        if ( v5 >= v3->nHTMLDocumentLen )
          return 0;
        v2 = sItem;
      }
      v7 = 0;
      if ( v3->nHTMLDocumentLen )
      {
        do
        {
          if ( v3->HTMLDocument.baseclass_0._Myres < 0x10 )
            v8 = (int)&v3->HTMLDocument;
          else
            v8 = *(_DWORD *)&v3->HTMLDocument.baseclass_0.___u0.baseclass_0.dummy[0];
          v9 = *(_BYTE *)(v5 + v7 + v8 + nItemLen + 3);
          v3->sSelectItem[v7] = v9;
          if ( v9 == 34 )
            break;
          ++v7;
        }
        while ( v7 < v3->nHTMLDocumentLen );
      }
      v3->sSelectItem[v7] = 0;
      result = v3->sSelectItem;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004585C0) --------------------------------------------------------
void __thiscall CWebHttpConnect::CWebHttpConnect(CWebHttpConnect *this)
{
  this->HTMLDocument.baseclass_0._Myres = 15;
  this->HTMLDocument.baseclass_0._Mysize = 0;
  this->HTMLDocument.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (004585E0) --------------------------------------------------------
void __thiscall CWebHttpConnect::_CWebHttpConnect(CWebHttpConnect *this)
{
  CWebHttpConnect *v1; // esi@1

  v1 = this;
  if ( this->HTMLDocument.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->HTMLDocument.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->HTMLDocument.baseclass_0._Myres = 15;
  v1->HTMLDocument.baseclass_0._Mysize = 0;
  v1->HTMLDocument.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (00458610) --------------------------------------------------------
int __thiscall CWebHttpConnect::InitConnection(CWebHttpConnect *this, unsigned int nTimeOut)
{
  CWebHttpConnect *v2; // esi@1
  char *v3; // eax@1
  bool v4; // cf@1
  HINTERNET v5; // eax@3
  int result; // eax@4

  v2 = this;
  v3 = (char *)&this->HTMLDocument;
  this->nError = 0;
  v4 = this->HTMLDocument.baseclass_0._Myres < 0x10;
  this->HTMLDocument.baseclass_0._Mysize = 0;
  if ( !v4 )
    v3 = *(char **)v3;
  *v3 = 0;
  memset(&this->UrlInfo.bUsePort, 0, 0xDA4u);
  v5 = InternetOpenA("HTTP_CONNECT", 0, 0, 0, 0);
  v2->hInternet = v5;
  if ( v5 )
  {
    InternetSetOptionA(v5, 2u, &nTimeOut, 4u);
    InternetSetOptionA(v2->hInternet, 6u, &nTimeOut, 4u);
    InternetSetOptionA(v2->hInternet, 5u, &nTimeOut, 4u);
    InternetSetOptionA(v2->hInternet, 7u, &nTimeOut, 4u);
    InternetSetOptionA(v2->hInternet, 8u, &nTimeOut, 4u);
    result = 1;
  }
  else
  {
    v2->nError = GetLastError();
    result = 0;
  }
  return result;
}

//----- (004586D0) --------------------------------------------------------
int __thiscall CWebHttpConnect::QueryToServer(CWebHttpConnect *this)
{
  CWebHttpConnect *v1; // esi@1
  unsigned __int16 v2; // ST08_2@1
  void *v3; // ST00_4@1
  HINTERNET v4; // eax@1
  char *v6; // eax@4
  HINTERNET v7; // eax@5
  void *i; // edi@7
  int v9; // ecx@11
  int v10; // eax@12
  char v11; // cl@13
  int v12; // eax@14
  int dwRead; // [sp+4h] [bp-110h]@11
  int dwInfoBufferLength; // [sp+8h] [bp-10Ch]@7
  char szReadBuffer[257]; // [sp+Ch] [bp-108h]@10
  unsigned int v16; // [sp+110h] [bp-4h]@1
  int v17; // [sp+114h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v1 = this;
  v2 = this->UrlInfo.nPort;
  v3 = this->hInternet;
  this->bHtmlSuccess = 0;
  v4 = InternetConnectA(v3, this->UrlInfo.sServer, v2, 0, 0, 3u, 0, 0);
  v1->hConnection = v4;
  if ( !v4 )
    goto LABEL_20;
  v6 = CWebHttpConnect::MakeAddress(v1);
  if ( !v6 )
    return 0;
  v7 = HttpOpenRequestA(v1->hConnection, "GET", v6, 0, 0, 0, 0, 0);
  v1->hRequest = v7;
  if ( !v7 || !HttpSendRequestA(v7, 0, 0, 0, 0) )
  {
LABEL_20:
    v1->nError = GetLastError();
    return 0;
  }
  dwInfoBufferLength = 10;
  for ( i = malloc(0xBu);
        !HttpQueryInfoA(v1->hRequest, 0x13u, i, (LPDWORD)&dwInfoBufferLength, 0);
        i = malloc(dwInfoBufferLength + 1) )
  {
    if ( GetLastError() != 122 )
      break;
    free(i);
  }
  szReadBuffer[0] = 0;
  memset(&szReadBuffer[1], 0, 0x100u);
  v1->nHTMLDocumentLen = 0;
  while ( 1 )
  {
    InternetReadFile(v1->hRequest, szReadBuffer, 0x100u, (LPDWORD)&dwRead);
    v9 = dwRead + v1->nHTMLDocumentLen;
    szReadBuffer[dwRead] = 0;
    if ( (unsigned int)v9 >= 0x186A0 )
      break;
    v10 = (int)szReadBuffer;
    do
      v11 = *(_BYTE *)v10++;
    while ( v11 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &v1->HTMLDocument,
      szReadBuffer,
      v10 - (_DWORD)&szReadBuffer[1]);
    v12 = dwRead;
    v1->nHTMLDocumentLen += dwRead;
    v1->bHtmlSuccess = 1;
    if ( !v12 )
      goto LABEL_17;
  }
  v1->bHtmlSuccess = 0;
LABEL_17:
  InternetCloseHandle(v1->hRequest);
  InternetCloseHandle(v1->hConnection);
  InternetCloseHandle(v1->hInternet);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004588B0) --------------------------------------------------------
void __thiscall CWebContainer::_CWebContainer(CWebContainer *this)
{
  CWebContainer *v1; // esi@1
  CWebEventSink *v2; // eax@1

  v1 = this;
  v2 = this->m_pEvent;
  this->baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_4.baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_8.baseclass_0.baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_c.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_10.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  v2->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v2);
  v1->m_punk->lpVtbl->Release(v1->m_punk);
}
// 984D18: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984D38: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984D64: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984DA4: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984DE4: using guessed type int (__stdcall *CWebContainer___vftable_)(int this, int riid, int ppv);

//----- (004588F0) --------------------------------------------------------
void __thiscall CWebContainer::setLocation(CWebContainer *this, int x, int y, int cx, int cy)
{
  int v5; // eax@1
  int v6; // edx@1
  char *v7; // esi@1
  int v8; // eax@1

  v5 = x;
  this->m_rect.top = y;
  v6 = cy;
  v7 = (char *)&this->m_rect;
  this->m_rect.left = v5;
  v8 = cx;
  this->m_rect.bottom = v6;
  this->m_rect.right = v8;
  (**(void (__stdcall ***)(_DWORD, _DWORD, _DWORD))this->m_punk)(this->m_punk, &IID_IOleInPlaceObject, &x);
  (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)x + 28))(x, v7, v7);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)x + 8))(x);
}

//----- (00458940) --------------------------------------------------------
void __thiscall CWebContainer::setVisible(CWebContainer *this, bool bVisible)
{
  int v2; // edi@0
  CWebContainer *v3; // esi@1
  HWND__ *v4; // edx@1
  int v5; // ecx@1
  void *pioo; // [sp+4h] [bp-4h]@1

  v3 = this;
  (**(void (__stdcall ***)(IUnknown *, GUID *, void **))this->m_punk)(this->m_punk, &IID_IOleObject, &pioo);
  v4 = v3->m_hWnd;
  v5 = *(_DWORD *)pioo;
  if ( bVisible )
  {
    (*(void (__stdcall **)(void *, signed int, _DWORD, CWebContainer *, _DWORD, HWND__ *, tagRECT *, int))(v5 + 44))(
      pioo,
      -5,
      0,
      v3,
      0,
      v4,
      &v3->m_rect,
      v2);
    (*(void (__stdcall **)(void *, signed int, _DWORD, CWebContainer *, _DWORD, HWND__ *, tagRECT *))(*(_DWORD *)pioo + 44))(
      pioo,
      -1,
      0,
      v3,
      0,
      v3->m_hWnd,
      &v3->m_rect);
    (*(void (__cdecl **)(void *))(*(_DWORD *)pioo + 8))(pioo);
  }
  else
  {
    (*(void (__stdcall **)(void *, signed int, _DWORD, CWebContainer *, _DWORD, HWND__ *, _DWORD))(v5 + 44))(
      pioo,
      -3,
      0,
      v3,
      0,
      v4,
      0);
    (*(void (__stdcall **)(void *))(*(_DWORD *)pioo + 8))(pioo);
  }
}
// 458940: could not find valid save-restore pair for edi

//----- (004589D0) --------------------------------------------------------
void __thiscall CWebContainer::setFocus(CWebContainer *this, bool bFocus)
{
  CWebContainer *v2; // esi@1

  v2 = this;
  if ( bFocus )
  {
    (**(void (__stdcall ***)(_DWORD, _DWORD, _DWORD))this->m_punk)(this->m_punk, &IID_IOleObject, &bFocus);
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)bFocus + 44))(
      bFocus,
      -4,
      0,
      v2,
      0,
      v2->m_hWnd,
      &v2->m_rect);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)bFocus + 8))(bFocus);
  }
}

//----- (00458A20) --------------------------------------------------------
HRESULT __stdcall CWebEventSink::Invoke(CWebEventSink *this, int dispidMember, _GUID *riid, unsigned int lcid, unsigned __int16 wFlags, tagDISPPARAMS *pDispParams, tagVARIANT *pvarResult, tagEXCEPINFO *pExcepInfo, unsigned int *puArgErr)
{
  return pDispParams != 0 ? 0 : -2147024809;
}

//----- (00458A40) --------------------------------------------------------
IConnectionPoint *__thiscall CWebContainer::GetConnectionPoint(CWebContainer *this, _GUID *riid)
{
  IConnectionPoint *pcp; // [sp+0h] [bp-8h]@1
  void *pcpc; // [sp+4h] [bp-4h]@1

  (**(void (__stdcall ***)(IUnknown *, GUID *, void **))this->m_punk)(
    this->m_punk,
    &IID_IConnectionPointContainer,
    &pcpc);
  (*(void (__stdcall **)(void *, _GUID *, IConnectionPoint **))(*(_DWORD *)pcpc + 16))(pcpc, riid, &pcp);
  (*(void (__stdcall **)(void *))(*(_DWORD *)pcpc + 8))(pcpc);
  return pcp;
}

//----- (00458A80) --------------------------------------------------------
HRESULT __thiscall CWebContainer::getWeb(CWebContainer *this, IWebBrowser2 **ppweb)
{
  return (**(int (__stdcall ***)(_DWORD, _DWORD, _DWORD))this->m_punk)(this->m_punk, &IID_IWebBrowser2, ppweb);
}

//----- (00458AA0) --------------------------------------------------------
void __thiscall CWebCtrl::CWebCtrl(CWebCtrl *this, HWND__ *hwnd)
{
  CWebCtrl *v2; // esi@1

  v2 = this;
  this->m_hWnd = hwnd;
  this->m_cxScroll = GetSystemMetrics(21) + 2;
  v2->m_cyScroll = GetSystemMetrics(20) + 2;
}

//----- (00458AD0) --------------------------------------------------------
void __thiscall CWebCtrl::Navigate(CWebCtrl *this, char *psz)
{
  int v2; // esi@3
  void *v3; // edi@3
  tagVARIANT v; // [sp+4h] [bp-14h]@3
  CWebCtrl *v5; // [sp+14h] [bp-4h]@1

  v5 = this;
  if ( psz )
  {
    if ( *psz )
    {
      v2 = lstrlenA(psz) + 1;
      v3 = operator new__(2 * v2);
      MultiByteToWideChar(0, 0, psz, -1, (LPWSTR)v3, v2);
      VariantInit(&v);
      v.___u0._s0.vt = 8;
      LODWORD(v.___u0._s0.llVal) = SysAllocString((const OLECHAR *)v3);
      operator delete__(v3);
      ((void (__stdcall *)(IWebBrowser2 *, tagVARIANT *, _DWORD, _DWORD, _DWORD, _DWORD))v5->m_pweb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.lpVtbl[17].AddRef)(
        v5->m_pweb,
        &v,
        0,
        0,
        0,
        0);
      VariantClear(&v);
    }
  }
}

//----- (00458B80) --------------------------------------------------------
void __thiscall CWebCtrl::Navigate(CWebCtrl *this, char *szURL, char *szPostData, char *szHeaders)
{
  int v4; // esi@3
  void *v5; // edi@3
  int v6; // eax@3
  int v7; // esi@4
  void *v8; // edi@4
  VARIANTARG *v9; // edi@4
  int v10; // esi@6
  VARIANTARG *v11; // esi@7
  tagVARIANT varHeaders; // [sp+4h] [bp-40h]@4
  tagVARIANT varURL; // [sp+14h] [bp-30h]@3
  tagVARIANT varPostData; // [sp+24h] [bp-20h]@7
  CWebCtrl *v15; // [sp+34h] [bp-10h]@1
  SAFEARRAYBOUND rgsabound; // [sp+38h] [bp-Ch]@1
  VARIANTARG *pvarHeaders; // [sp+40h] [bp-4h]@1

  v15 = this;
  rgsabound.lLbound = 0;
  pvarHeaders = 0;
  if ( szURL && *szURL )
  {
    v4 = lstrlenA(szURL) + 1;
    v5 = operator new__(2 * v4);
    MultiByteToWideChar(0, 0, szURL, -1, (LPWSTR)v5, v4);
    VariantInit(&varURL);
    varURL.___u0._s0.vt = 8;
    LODWORD(varURL.___u0._s0.llVal) = SysAllocString((const OLECHAR *)v5);
    operator delete__(v5);
    v6 = lstrlenA(szHeaders);
    if ( v6 <= 0 )
    {
      v9 = pvarHeaders;
    }
    else
    {
      v7 = v6 + 1;
      v8 = operator new__(2 * (v6 + 1));
      MultiByteToWideChar(0, 0, szHeaders, -1, (LPWSTR)v8, v7);
      VariantInit(&varHeaders);
      varHeaders.___u0._s0.vt = 8;
      LODWORD(varHeaders.___u0._s0.llVal) = SysAllocString((const OLECHAR *)v8);
      operator delete__(v8);
      v9 = &varHeaders;
    }
    v10 = lstrlenA(szPostData);
    if ( v10 <= 0 )
    {
      v11 = (VARIANTARG *)rgsabound.lLbound;
    }
    else
    {
      VariantInit(&varPostData);
      rgsabound.cElements = v10;
      rgsabound.lLbound = 0;
      LODWORD(varPostData.___u0._s0.llVal) = SafeArrayCreate(0x11u, 1u, &rgsabound);
      varPostData.___u0._s0.vt = 8209;
      SafeArrayAccessData(LODWORD(varPostData.___u0._s0.llVal), (void **)&szHeaders);
      memcpy(szHeaders, szPostData, v10);
      SafeArrayUnaccessData(LODWORD(varPostData.___u0._s0.llVal));
      v11 = &varPostData;
    }
    ((void (__stdcall *)(IWebBrowser2 *, tagVARIANT *, _DWORD, _DWORD, VARIANTARG *, VARIANTARG *))v15->m_pweb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.lpVtbl[17].AddRef)(
      v15->m_pweb,
      &varURL,
      0,
      0,
      v11,
      v9);
    VariantClear(&varURL);
    if ( v11 )
      VariantClear(v11);
    if ( v9 )
      VariantClear(v9);
  }
}

//----- (00458D20) --------------------------------------------------------
bool __stdcall UninitWebCtrl()
{
  bool v0; // bl@1
  HINSTANCE__ *v1; // eax@1
  tagWNDCLASSA wc; // [sp+4h] [bp-28h]@1

  v0 = 0;
  v1 = GetModuleHandleA(0);
  if ( GetClassInfoA(v1, "WebCtrl32", &wc) )
    v0 = UnregisterClassA("WebCtrl32", wc.hInstance) != 0;
  CoUninitialize();
  return v0;
}

//----- (00458D70) --------------------------------------------------------
void __thiscall CWebContainer::ConnectEvents(CWebContainer *this)
{
  CWebContainer *v1; // esi@1
  int v2; // edi@1
  int v3; // [sp+8h] [bp-8h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v1 = this;
  (**(void (__stdcall ***)(IUnknown *, GUID *, int *))this->m_punk)(this->m_punk, &IID_IConnectionPointContainer, &v4);
  (*(void (__stdcall **)(int, GUID *, int *))(*(_DWORD *)v4 + 16))(v4, &DIID_DWebBrowserEvents2, &v3);
  (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4);
  v2 = v3;
  (*(void (__stdcall **)(int, CWebEventSink *, unsigned int *))(*(_DWORD *)v3 + 20))(
    v3,
    v1->m_pEvent,
    &v1->m_eventCookie);
  (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2);
}

//----- (00458DD0) --------------------------------------------------------
void __thiscall CWebContainer::DisconnectEvents(CWebContainer *this)
{
  CWebContainer *v1; // esi@1
  int v2; // edi@1
  int v3; // [sp+8h] [bp-8h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v1 = this;
  (**(void (__stdcall ***)(IUnknown *, GUID *, int *))this->m_punk)(this->m_punk, &IID_IConnectionPointContainer, &v4);
  (*(void (__stdcall **)(int, GUID *, int *))(*(_DWORD *)v4 + 16))(v4, &DIID_DWebBrowserEvents2, &v3);
  (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4);
  v2 = v3;
  (*(void (__stdcall **)(int, unsigned int))(*(_DWORD *)v3 + 24))(v3, v1->m_eventCookie);
  (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2);
}

//----- (00458E30) --------------------------------------------------------
void __thiscall CWebCtrl::Navigate_EX(CWebCtrl *this, char *URL)
{
  char *v2; // eax@2
  char v3; // cl@3
  int v4; // eax@4
  char v5; // cl@5
  int v6; // esi@6
  int i; // eax@6
  char *v8; // edi@7
  int v9; // esi@11
  void *v10; // edi@11
  int v11; // eax@11
  int v12; // esi@12
  void *v13; // edi@12
  void *v14; // edi@12
  int v15; // esi@14
  int v16; // esi@15
  __int16 v17; // [sp+4h] [bp-244h]@12
  BSTR v18; // [sp+Ch] [bp-23Ch]@12
  VARIANTARG pvarg; // [sp+14h] [bp-234h]@11
  __int16 v20; // [sp+24h] [bp-224h]@15
  SAFEARRAY *psa; // [sp+2Ch] [bp-21Ch]@15
  CWebCtrl *v22; // [sp+34h] [bp-214h]@1
  SAFEARRAYBOUND rgsabound; // [sp+38h] [bp-210h]@10
  void *dst; // [sp+40h] [bp-208h]@10
  char szFlag[256]; // [sp+44h] [bp-204h]@2
  char szURL[256]; // [sp+144h] [bp-104h]@2
  unsigned int v27; // [sp+244h] [bp-4h]@1
  int v28; // [sp+248h] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v22 = this;
  if ( strlen(URL) <= 0xFF )
  {
    memset(szURL, 0, 0x100u);
    memset(szFlag, 0, 0x100u);
    v2 = URL;
    do
    {
      v3 = *v2;
      v2[szURL - URL] = *v2;
      ++v2;
    }
    while ( v3 );
    v4 = (int)szURL;
    do
      v5 = *(_BYTE *)v4++;
    while ( v5 );
    v6 = v4 - (_DWORD)&szURL[1];
    for ( i = 0; i < v6; ++i )
    {
      v8 = &szURL[i];
      if ( szURL[i] == 63 )
      {
        memcpy(szFlag, &szURL[i + 1], v6 - i);
        *v8 = 0;
        i = v6;
      }
    }
    rgsabound.lLbound = 0;
    dst = 0;
    if ( szURL[0] )
    {
      v9 = lstrlenA(szURL) + 1;
      v10 = operator new__(2 * v9);
      MultiByteToWideChar(0, 0, szURL, -1, (LPWSTR)v10, v9);
      VariantInit(&pvarg);
      pvarg.___u0._s0.vt = 8;
      LODWORD(pvarg.___u0._s0.llVal) = SysAllocString((const OLECHAR *)v10);
      operator delete__(v10);
      v11 = lstrlenA("Content-Type: application/x-www-form-urlencoded");
      if ( v11 <= 0 )
      {
        v14 = dst;
      }
      else
      {
        v12 = v11 + 1;
        v13 = operator new__(2 * (v11 + 1));
        MultiByteToWideChar(0, 0, "Content-Type: application/x-www-form-urlencoded", -1, (LPWSTR)v13, v12);
        VariantInit((VARIANTARG *)&v17);
        v17 = 8;
        v18 = SysAllocString((const OLECHAR *)v13);
        operator delete__(v13);
        v14 = &v17;
      }
      v15 = lstrlenA(szFlag);
      if ( v15 <= 0 )
      {
        v16 = rgsabound.lLbound;
      }
      else
      {
        VariantInit((VARIANTARG *)&v20);
        rgsabound.cElements = v15;
        rgsabound.lLbound = 0;
        psa = SafeArrayCreate(0x11u, 1u, &rgsabound);
        v20 = 8209;
        SafeArrayAccessData(psa, &dst);
        memcpy((char *)dst, szFlag, v15);
        SafeArrayUnaccessData(psa);
        v16 = (int)&v20;
      }
      ((void (__stdcall *)(IWebBrowser2 *, VARIANTARG *, _DWORD, _DWORD, int, void *))v22->m_pweb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.lpVtbl[17].AddRef)(
        v22->m_pweb,
        &pvarg,
        0,
        0,
        v16,
        v14);
      VariantClear(&pvarg);
      if ( v16 )
        VariantClear((VARIANTARG *)v16);
      if ( v14 )
        VariantClear((VARIANTARG *)v14);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004590F0) --------------------------------------------------------
void __thiscall CWebContainer::CWebContainer(CWebContainer *this, HWND__ *hwnd)
{
  CWebContainer *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  this->baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_4.baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_8.baseclass_0.baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_c.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->baseclass_10.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
  this->m_cRef = 0;
  this->m_hWnd = hwnd;
  this->m_punk = 0;
  SetRectEmpty(&this->m_rect);
  v3 = operator new(8u);
  if ( v3 )
  {
    *(_DWORD *)v3 = &CWebEventSink::_vftable_;
    *((_DWORD *)v3 + 1) = 0;
    v2->m_pEvent = (CWebEventSink *)v3;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 4))(v3);
  }
  else
  {
    v2->m_pEvent = 0;
    (*(void (__stdcall **)(_DWORD))(v0 + 4))(0);
  }
}
// 984D18: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984D38: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984D64: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984DA4: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984DE4: using guessed type int (__stdcall *CWebContainer___vftable_)(int this, int riid, int ppv);
// 984E0C: using guessed type int (__stdcall *CWebEventSink___vftable_)(int this, int riid, int ppv);

//----- (00459180) --------------------------------------------------------
void __thiscall CWebContainer::add(CWebContainer *this)
{
  CWebContainer *v1; // esi@1
  int v2; // edi@1
  int v3; // ebx@1
  int v4; // [sp+Ch] [bp-24h]@1
  void *pioo; // [sp+10h] [bp-20h]@1
  void *ppsi; // [sp+14h] [bp-1Ch]@1
  int v7; // [sp+18h] [bp-18h]@1
  _GUID clsid; // [sp+1Ch] [bp-14h]@1
  unsigned int v9; // [sp+2Ch] [bp-4h]@1
  int v10; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  CLSIDFromString(L"Shell.Explorer", &clsid);
  v2 = (int)&v1->m_punk;
  CoCreateInstance(&clsid, 0, 5u, &IID_IUnknown, (LPVOID *)&v1->m_punk);
  (*(void (__stdcall **)(_DWORD, GUID *, void **))**(void (__stdcall ****)(_DWORD, _DWORD, _DWORD))v2)(
    *(_DWORD *)v2,
    &IID_IOleObject,
    &pioo);
  (*(void (__stdcall **)(void *, CWebContainer *))(*(_DWORD *)pioo + 12))(pioo, v1);
  (*(void (__stdcall **)(void *))(*(_DWORD *)pioo + 8))(pioo);
  (*(void (__stdcall **)(_DWORD, GUID *, void **))**(void (__stdcall ****)(_DWORD, _DWORD, _DWORD))v2)(
    *(_DWORD *)v2,
    &IID_IPersistStreamInit,
    &ppsi);
  (*(void (__stdcall **)(void *))(*(_DWORD *)ppsi + 32))(ppsi);
  (*(void (__stdcall **)(void *))(*(_DWORD *)ppsi + 8))(ppsi);
  (*(void (__stdcall **)(_DWORD, GUID *, int *))**(void (__stdcall ****)(_DWORD, _DWORD, _DWORD))v2)(
    *(_DWORD *)v2,
    &IID_IConnectionPointContainer,
    &v7);
  (*(void (__stdcall **)(int, GUID *, int *))(*(_DWORD *)v7 + 16))(v7, &DIID_DWebBrowserEvents2, &v4);
  (*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7);
  v3 = v4;
  (*(void (__stdcall **)(int, CWebEventSink *, unsigned int *))(*(_DWORD *)v4 + 20))(
    v4,
    v1->m_pEvent,
    &v1->m_eventCookie);
  (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3);
  (*(void (__stdcall **)(_DWORD, GUID *, int *))**(void (__stdcall ****)(_DWORD, _DWORD, _DWORD))v2)(
    *(_DWORD *)v2,
    &IID_IOleObject,
    &v7);
  (*(void (__stdcall **)(int, signed int, _DWORD, CWebContainer *, _DWORD, HWND__ *, tagRECT *))(*(_DWORD *)v7 + 44))(
    v7,
    -5,
    0,
    v1,
    0,
    v1->m_hWnd,
    &v1->m_rect);
  (*(void (__stdcall **)(int, signed int, _DWORD, CWebContainer *, _DWORD, HWND__ *, tagRECT *))(*(_DWORD *)v7 + 44))(
    v7,
    -1,
    0,
    v1,
    0,
    v1->m_hWnd,
    &v1->m_rect);
  (*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7);
  (***(void (__stdcall ****)(_DWORD, _DWORD, _DWORD))v2)(*(_DWORD *)v2, &IID_IOleObject, &v7);
  (*(void (__stdcall **)(_DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 44))(
    v7,
    -4,
    0,
    v1,
    0,
    v1->m_hWnd,
    &v1->m_rect);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 8))(v7);
}
// A85C00: using guessed type int __security_cookie;

//----- (004592F0) --------------------------------------------------------
void __thiscall CWebContainer::remove(CWebContainer *this)
{
  CWebContainer *v1; // esi@1
  int v2; // edi@1
  int v3; // [sp+8h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-Ch]@1
  void *pipo; // [sp+10h] [bp-8h]@1
  void *pioo; // [sp+14h] [bp-4h]@1

  v1 = this;
  (**(void (__stdcall ***)(IUnknown *, GUID *, void **))this->m_punk)(this->m_punk, &IID_IOleObject, &pioo);
  (*(void (__stdcall **)(void *, signed int))(*(_DWORD *)pioo + 24))(pioo, 1);
  (*(void (__stdcall **)(void *, _DWORD))(*(_DWORD *)pioo + 12))(pioo, 0);
  (*(void (__stdcall **)(void *))(*(_DWORD *)pioo + 8))(pioo);
  (**(void (__stdcall ***)(IUnknown *, GUID *, void **))v1->m_punk)(v1->m_punk, &IID_IOleInPlaceObject, &pipo);
  (*(void (__stdcall **)(void *))(*(_DWORD *)pipo + 24))(pipo);
  (*(void (__stdcall **)(void *))(*(_DWORD *)pipo + 20))(pipo);
  (*(void (__stdcall **)(void *))(*(_DWORD *)pipo + 8))(pipo);
  (**(void (__stdcall ***)(IUnknown *, GUID *, int *))v1->m_punk)(v1->m_punk, &IID_IConnectionPointContainer, &v4);
  (*(void (__stdcall **)(int, GUID *, int *))(*(_DWORD *)v4 + 16))(v4, &DIID_DWebBrowserEvents2, &v3);
  (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4);
  v2 = v3;
  (*(void (__stdcall **)(int, unsigned int))(*(_DWORD *)v3 + 24))(v3, v1->m_eventCookie);
  (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2);
}

//----- (004593C0) --------------------------------------------------------
int __thiscall CWebCtrl::WebCtrlProc(CWebCtrl *this, unsigned int uMsg, unsigned int wParam, int lParam)
{
  CWebCtrl *v4; // esi@1
  void *v5; // eax@8
  CWebContainer *v6; // eax@9
  CWebContainer *v8; // esi@17

  v4 = this;
  if ( uMsg > 0xC )
  {
    if ( uMsg == 277 )
      return 0;
    if ( uMsg == 1025 )
    {
      CWebContainer::setVisible(this->m_pContainer, 1);
      return 0;
    }
    if ( uMsg == 1026 )
    {
      v8 = this->m_pContainer;
      (**(void (__stdcall ***)(_DWORD, _DWORD, _DWORD))v8->m_punk)(v8->m_punk, &IID_IOleObject, &lParam);
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)lParam + 44))(
        lParam,
        -3,
        0,
        v8,
        0,
        v8->m_hWnd,
        0);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)lParam + 8))(lParam);
      return 0;
    }
    return DefWindowProcA(this->m_hWnd, uMsg, wParam, lParam);
  }
  if ( uMsg == 12 )
  {
    CWebCtrl::Navigate_EX(this, (char *)lParam);
    return 0;
  }
  if ( uMsg == 1 )
  {
    v5 = operator new(0x38u);
    if ( v5 )
      CWebContainer::CWebContainer((CWebContainer *)v5, v4->m_hWnd);
    else
      v6 = 0;
    v4->m_pContainer = v6;
    v6->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)v6);
    CWebContainer::add(v4->m_pContainer);
    (**(void (__stdcall ***)(_DWORD, _DWORD, _DWORD))v4->m_pContainer->m_punk)(
      v4->m_pContainer->m_punk,
      &IID_IWebBrowser2,
      &v4->m_pweb);
    CWebCtrl::Navigate_EX(v4, *(char **)(lParam + 36));
    return 0;
  }
  if ( uMsg == 2 )
  {
    this->m_pweb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)this->m_pweb);
    CWebContainer::remove(v4->m_pContainer);
    v4->m_pContainer->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v4->m_pContainer);
    return 0;
  }
  if ( uMsg != 5 )
    return DefWindowProcA(this->m_hWnd, uMsg, wParam, lParam);
  CWebContainer::setLocation(this->m_pContainer, 0, 0, (unsigned __int16)lParam, (unsigned int)lParam >> 16);
  return 0;
}

//----- (00459550) --------------------------------------------------------
int __stdcall WebCtrlProc(HWND__ *hwnd, unsigned int uMsg, unsigned int wParam, int lParam)
{
  signed int v4; // ebx@1
  HANDLE v5; // esi@1
  void *v7; // eax@4
  int lResult; // [sp+18h] [bp+Ch]@8

  v4 = uMsg;
  v5 = GetPropA(hwnd, "this");
  if ( !v5 )
  {
    if ( uMsg != 1 )
      return DefWindowProcA(hwnd, uMsg, wParam, lParam);
    v7 = operator new(0x14u);
    v5 = v7;
    if ( v7 )
    {
      *(_DWORD *)v7 = hwnd;
      *((_DWORD *)v7 + 1) = GetSystemMetrics(21) + 2;
      v4 = 1;
      *((_DWORD *)v5 + 2) = GetSystemMetrics(20) + 2;
    }
    else
    {
      v5 = 0;
    }
    SetPropA(hwnd, "this", v5);
  }
  lResult = CWebCtrl::WebCtrlProc((CWebCtrl *)v5, v4, wParam, lParam);
  if ( v4 == 2 )
  {
    RemovePropA(hwnd, "this");
    operator delete(v5);
  }
  return lResult;
}

//----- (00459610) --------------------------------------------------------
bool __stdcall InitWebCtrl()
{
  HINSTANCE__ *v0; // esi@1
  bool result; // al@2
  tagWNDCLASSA wc; // [sp+4h] [bp-28h]@1

  CoInitialize(0);
  v0 = GetModuleHandleA(0);
  if ( GetClassInfoA(v0, "WebCtrl32", &wc) )
  {
    result = 1;
  }
  else
  {
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hIcon = 0;
    wc.hCursor = 0;
    wc.hbrBackground = 0;
    wc.lpszMenuName = 0;
    wc.lpszClassName = 0;
    wc.style = 16936;
    wc.lpfnWndProc = WebCtrlProc;
    wc.hInstance = v0;
    wc.hCursor = LoadCursorA(0, (LPCSTR)0x7F00);
    wc.lpszClassName = "WebCtrl32";
    result = RegisterClassA(&wc) != 0;
  }
  return result;
}

//----- (004596A0) --------------------------------------------------------
int __cdecl IsEqualGUID(_GUID *rguid1, _GUID *rguid2)
{
  _GUID *v2; // ecx@1
  _GUID *v3; // edx@1
  signed int v4; // eax@1
  signed int v6; // eax@5

  v2 = rguid2;
  v3 = rguid1;
  v4 = 16;
  while ( v3->Data1 == v2->Data1 )
  {
    v4 -= 4;
    v2 = (_GUID *)((char *)v2 + 4);
    v3 = (_GUID *)((char *)v3 + 4);
    if ( (unsigned int)v4 < 4 )
      return 1;
  }
  v6 = LOBYTE(v3->Data1) - LOBYTE(v2->Data1);
  if ( LOBYTE(v3->Data1) == LOBYTE(v2->Data1) )
  {
    v6 = BYTE1(v3->Data1) - BYTE1(v2->Data1);
    if ( BYTE1(v3->Data1) == BYTE1(v2->Data1) )
    {
      v6 = BYTE2(v3->Data1) - BYTE2(v2->Data1);
      if ( BYTE2(v3->Data1) == BYTE2(v2->Data1) )
        v6 = BYTE3(v3->Data1) - BYTE3(v2->Data1);
    }
  }
  return ((v6 >> 31) | 1) == 0;
}

//----- (00459710) --------------------------------------------------------
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv)
{
  CWebContainer *v3; // eax@3
  HRESULT result; // eax@4

  if ( IsEqualGUID(riid, &IID_IOleClientSite) )
    goto LABEL_22;
  if ( IsEqualGUID(riid, &IID_IOleInPlaceSite) )
  {
    v3 = this;
    if ( this )
    {
      *ppv = &this->baseclass_4;
      this->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)this);
      return 0;
    }
LABEL_16:
    *ppv = 0;
    v3->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)v3);
    return 0;
  }
  if ( IsEqualGUID(riid, &IID_IOleInPlaceFrame) || IsEqualGUID(riid, &IID_IOleInPlaceUIWindow) )
  {
    v3 = this;
    if ( this )
    {
      *ppv = &this->baseclass_8;
      this->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)this);
      return 0;
    }
    goto LABEL_16;
  }
  if ( IsEqualGUID(riid, &IID_IOleControlSite) )
  {
    v3 = this;
    if ( this )
    {
      *ppv = &this->baseclass_c;
      this->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)this);
      return 0;
    }
    goto LABEL_16;
  }
  if ( IsEqualGUID(riid, &IID_IOleWindow) )
    goto LABEL_22;
  if ( IsEqualGUID(riid, &IID_IDispatch) )
  {
    v3 = this;
    if ( this )
    {
      *ppv = &this->baseclass_10;
      this->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)this);
      return 0;
    }
    goto LABEL_16;
  }
  if ( IsEqualGUID(riid, &IID_IUnknown) )
  {
LABEL_22:
    *ppv = this;
    this->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)this);
    result = 0;
  }
  else
  {
    *ppv = 0;
    result = -2147467262;
  }
  return result;
}

//----- (00459870) --------------------------------------------------------
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this)
{
  return InterlockedIncrement((volatile LONG *)&this->m_cRef);
}

//----- (00459890) --------------------------------------------------------
HRESULT __stdcall CWebContainer::GetContainer(CWebContainer *this, IOleContainer **__formal)
{
  return -2147467262;
}

//----- (004598A0) --------------------------------------------------------
HRESULT __stdcall CWebContainer::GetWindow(CWebContainer *this, HWND__ **phwnd)
{
  *phwnd = (HWND__ *)this->m_cRef;
  return 0;
}

//----- (004598C0) --------------------------------------------------------
HRESULT __stdcall CWebContainer::GetWindowContext(CWebContainer *this, IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppIIPUIWin, tagRECT *prcPosRect, tagRECT *prcClipRect, tagOIFI *pFrameInfo)
{
  IOleInPlaceFrame *v6; // ecx@2
  int v7; // ecx@4
  int v8; // edx@4
  tagRECT rc; // [sp+14h] [bp-14h]@4
  unsigned int v11; // [sp+24h] [bp-4h]@1
  int v12; // [sp+28h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  if ( this == (CWebContainer *)4 )
    v6 = 0;
  else
    v6 = (IOleInPlaceFrame *)&this->baseclass_4;
  *ppFrame = v6;
  *ppIIPUIWin = 0;
  GetClientRect((HWND)this->m_cRef, &rc);
  v7 = rc.right;
  v8 = rc.bottom;
  prcPosRect->left = 0;
  prcPosRect->top = 0;
  prcPosRect->right = v7;
  prcPosRect->bottom = v8;
  CopyRect(prcClipRect, prcPosRect);
  pFrameInfo->cb = 20;
  pFrameInfo->fMDIApp = 0;
  pFrameInfo->hwndFrame = (HWND__ *)this->m_cRef;
  pFrameInfo->haccel = 0;
  pFrameInfo->cAccelEntries = 0;
  (*ppFrame)->baseclass_0.baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)*ppFrame);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00459970) --------------------------------------------------------
unsigned int *__thiscall NiGeometryGroupManager::CreateGroup(CProperty<CGlowScreenEffect,unsigned int> *this, CBaseObject *pObject)
{
  return 0;
}

//----- (00459980) --------------------------------------------------------
HRESULT __stdcall CWebContainer::Scroll(CWebContainer *this, tagMSG *__formal, unsigned int __formala)
{
  return -2147467263;
}

//----- (00459990) --------------------------------------------------------
HRESULT __stdcall CWebContainer::SetBorderSpace(CWebEventSink *this, unsigned int *__formal)
{
  return -2147467263;
}

//----- (004599A0) --------------------------------------------------------
HRESULT __stdcall CWebContainer::SaveObject(CWebContainer *this)
{
  return -2147467263;
}

//----- (004599B0) --------------------------------------------------------
HRESULT __stdcall CWebContainer::Invoke(CWebContainer *this, int __formal, _GUID *__formala, unsigned int a4, unsigned __int16 a5, tagDISPPARAMS *a6, tagVARIANT *a7, tagEXCEPINFO *a8, unsigned int *a9)
{
  return -2147352573;
}

//----- (004599C0) --------------------------------------------------------
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this)
{
  return CWebContainer::AddRef((CWebContainer *)((char *)this - 4));
}

//----- (004599D0) --------------------------------------------------------
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this)
{
  return CWebContainer::AddRef((CWebContainer *)((char *)this - 8));
}

//----- (004599E0) --------------------------------------------------------
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this)
{
  return CWebContainer::AddRef((CWebContainer *)((char *)this - 12));
}

//----- (004599F0) --------------------------------------------------------
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv)
{
  return CWebContainer::QueryInterface((CWebContainer *)((char *)this - 4), riid, ppv);
}

//----- (00459A00) --------------------------------------------------------
unsigned int __stdcall CWebContainer::AddRef(CWebContainer *this)
{
  return CWebContainer::AddRef((CWebContainer *)((char *)this - 16));
}

//----- (00459A10) --------------------------------------------------------
HRESULT __stdcall CWebContainer::ContextSensitiveHelp(CWebEventSink *this, unsigned int *__formal)
{
  return CWebContainer::SetBorderSpace((CWebEventSink *)((char *)this - 4), __formal);
}

//----- (00459A20) --------------------------------------------------------
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv)
{
  return CWebContainer::QueryInterface((CWebContainer *)((char *)this - 8), riid, ppv);
}

//----- (00459A30) --------------------------------------------------------
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv)
{
  return CWebContainer::QueryInterface((CWebContainer *)((char *)this - 12), riid, ppv);
}

//----- (00459A40) --------------------------------------------------------
HRESULT __stdcall CWebContainer::QueryInterface(CWebContainer *this, _GUID *riid, void **ppv)
{
  return CWebContainer::QueryInterface((CWebContainer *)((char *)this - 16), riid, ppv);
}

//----- (00459A50) --------------------------------------------------------
HRESULT __stdcall CWebContainer::GetWindow(CWebContainer *this, HWND__ **phwnd)
{
  return CWebContainer::GetWindow((CWebContainer *)((char *)this - 4), phwnd);
}

//----- (00459A60) --------------------------------------------------------
HRESULT __stdcall CWebEventSink::QueryInterface(CWebEventSink *this, _GUID *riid, void **ppv)
{
  HRESULT result; // eax@2

  if ( IsEqualGUID(riid, &IID_IDispatch) )
  {
    *ppv = this;
    this->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)this);
    result = 0;
  }
  else
  {
    if ( IsEqualGUID(riid, &IID_IUnknown) )
    {
      *ppv = this;
      this->baseclass_0.baseclass_0.lpVtbl->AddRef((IUnknown *)this);
      result = 0;
    }
    else
    {
      *ppv = 0;
      result = -2147467262;
    }
  }
  return result;
}

//----- (00459AD0) --------------------------------------------------------
unsigned int __stdcall CWebEventSink::AddRef(CWebEventSink *this)
{
  return InterlockedIncrement((volatile LONG *)&this->m_cRef);
}

//----- (00459AF0) --------------------------------------------------------
unsigned int __stdcall CWebEventSink::Release(CWebEventSink *this)
{
  unsigned int result; // eax@1
  unsigned int v2; // esi@1

  result = InterlockedDecrement((volatile LONG *)&this->m_cRef);
  v2 = result;
  if ( !result )
  {
    operator delete(this);
    result = v2;
  }
  return result;
}

//----- (00459B20) --------------------------------------------------------
HRESULT __stdcall CWebEventSink::GetIDsOfNames(CWebEventSink *this, _GUID *__formal, wchar_t **a3, unsigned int a4, unsigned int a5, int *pdispid)
{
  *pdispid = -1;
  return -2147352570;
}

//----- (00459B40) --------------------------------------------------------
HRESULT __stdcall CWebEventSink::GetTypeInfo(CWebEventSink *this, unsigned int __formal, unsigned int __formala, ITypeInfo **a4)
{
  return -2147467263;
}

//----- (00459B50) --------------------------------------------------------
unsigned int __stdcall CWebContainer::Release(CWebContainer *this)
{
  unsigned int result; // eax@1
  unsigned int v2; // edi@1
  CWebEventSink *v3; // eax@3

  result = InterlockedDecrement((volatile LONG *)&this->m_cRef);
  v2 = result;
  if ( !result )
  {
    if ( this )
    {
      v3 = this->m_pEvent;
      this->baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
      this->baseclass_4.baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
      this->baseclass_8.baseclass_0.baseclass_0.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
      this->baseclass_c.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
      this->baseclass_10.baseclass_0.lpVtbl = (IUnknownVtbl *)&CWebContainer::_vftable_;
      v3->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v3);
      this->m_punk->lpVtbl->Release(this->m_punk);
      operator delete(this);
      result = v2;
    }
  }
  return result;
}
// 984D18: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984D38: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984D64: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984DA4: using guessed type int (__stdcall *CWebContainer___vftable_)(int, int, int);
// 984DE4: using guessed type int (__stdcall *CWebContainer___vftable_)(int this, int riid, int ppv);

//----- (00459BC0) --------------------------------------------------------
unsigned int __stdcall CWebContainer::Release(CWebContainer *this)
{
  return CWebContainer::Release((CWebContainer *)((char *)this - 8));
}

//----- (00459BD0) --------------------------------------------------------
unsigned int __stdcall CWebContainer::Release(CWebContainer *this)
{
  return CWebContainer::Release((CWebContainer *)((char *)this - 12));
}

//----- (00459BE0) --------------------------------------------------------
unsigned int __stdcall CWebContainer::Release(CWebContainer *this)
{
  return CWebContainer::Release((CWebContainer *)((char *)this - 16));
}

//----- (00459BF0) --------------------------------------------------------
unsigned int __stdcall CWebContainer::Release(CWebContainer *this)
{
  return CWebContainer::Release((CWebContainer *)((char *)this - 4));
}

//----- (00459C00) --------------------------------------------------------
HRESULT __usercall D3DUtil_LoadDeviceCursor<eax>(HICON__ *hCursor<ecx>, IDirect3DSurface9 **rpkSurf<edx>, IDirect3DDevice9 *pd3dDevice, bool bAddWatermark)
{
  int v4; // esi@1
  unsigned int v5; // ebx@1
  HRESULT (__stdcall *v6)(IUnknown *, _GUID *const , void **); // eax@1
  int v7; // edi@2
  HDC v8; // edi@2
  HDC v9; // eax@4
  HDC__ *v10; // edi@4
  int v11; // ecx@7
  char *v12; // edx@7
  unsigned int v13; // edi@8
  unsigned int v14; // eax@9
  void *v15; // ebx@9
  int v16; // eax@12
  int v17; // esi@12
  tagBITMAP bm; // [sp+Ch] [bp-B8h]@1
  _D3DLOCKED_RECT lr; // [sp+24h] [bp-A0h]@6
  int v20; // [sp+2Ch] [bp-98h]@7
  unsigned int i; // [sp+30h] [bp-94h]@9
  int v22; // [sp+34h] [bp-90h]@7
  _ICONINFO iconinfo; // [sp+38h] [bp-8Ch]@1
  HDC hdcColor; // [sp+4Ch] [bp-78h]@1
  IDirect3DSurface9 **v25; // [sp+50h] [bp-74h]@1
  unsigned int dwWidth; // [sp+54h] [bp-70h]@1
  HDC hdcMask; // [sp+58h] [bp-6Ch]@1
  HDC__ *hdcScreen; // [sp+5Ch] [bp-68h]@1
  void *v29; // [sp+60h] [bp-64h]@7
  unsigned int dwHeightDest; // [sp+64h] [bp-60h]@1
  int v31; // [sp+68h] [bp-5Ch]@7
  unsigned int y; // [sp+6Ch] [bp-58h]@6
  void *pcrArrayColor; // [sp+70h] [bp-54h]@1
  void *pCursorSurface; // [sp+74h] [bp-50h]@1
  void *pcrArrayMask; // [sp+78h] [bp-4Ch]@1
  char *hgdiobjOld; // [sp+7Ch] [bp-48h]@1
  int dwHeightSrc; // [sp+80h] [bp-44h]@1
  char bBWCursor; // [sp+87h] [bp-3Dh]@1
  tagBITMAPINFO bmi; // [sp+88h] [bp-3Ch]@2
  __int16 wMask[5]; // [sp+B4h] [bp-10h]@20
  unsigned int v41; // [sp+C0h] [bp-4h]@1
  int v42; // [sp+C4h] [bp+0h]@1

  v41 = (unsigned int)&v42 ^ __security_cookie;
  hgdiobjOld = (char *)pd3dDevice;
  iconinfo.fIcon = 0;
  iconinfo.xHotspot = 0;
  iconinfo.yHotspot = 0;
  iconinfo.hbmMask = 0;
  iconinfo.hbmColor = 0;
  v25 = rpkSurf;
  pCursorSurface = 0;
  hdcColor = 0;
  hdcMask = 0;
  hdcScreen = 0;
  pcrArrayColor = 0;
  pcrArrayMask = 0;
  JUMPOUT(GetIconInfo(hCursor, &iconinfo), 0, &End);
  JUMPOUT(GetObjectA(0, 24, &bm), 0, &End);
  v4 = bm.bmWidth;
  dwWidth = bm.bmWidth;
  dwHeightSrc = bm.bmHeight;
  bBWCursor = 1;
  v5 = (unsigned int)bm.bmHeight >> 1;
  v6 = pd3dDevice->baseclass_0.lpVtbl[12].QueryInterface;
  dwHeightDest = (unsigned int)bm.bmHeight >> 1;
  if ( ((int (__cdecl *)(IDirect3DDevice9 *, int, unsigned int, signed int, signed int, void **, _DWORD))v6)(
         pd3dDevice,
         bm.bmWidth,
         (unsigned int)bm.bmHeight >> 1,
         21,
         3,
         &pCursorSurface,
         0) >= 0 )
  {
    v7 = dwHeightSrc;
    pcrArrayMask = operator new__(4 * v4 * dwHeightSrc);
    memset((char *)&bmi, 0, 0x2Cu);
    bmi.bmiHeader.biSize = 40;
    bmi.bmiHeader.biWidth = v4;
    bmi.bmiHeader.biHeight = v7;
    *(_DWORD *)&bmi.bmiHeader.biPlanes = 2097153;
    bmi.bmiHeader.biCompression = 0;
    hdcScreen = GetDC(0);
    v8 = CreateCompatibleDC(hdcScreen);
    hdcMask = v8;
    if ( v8 )
    {
      hgdiobjOld = (char *)SelectObject(v8, iconinfo.hbmMask);
      GetDIBits(v8, iconinfo.hbmMask, 0, dwHeightSrc, pcrArrayMask, &bmi, 0);
      SelectObject(v8, hgdiobjOld);
      if ( !bBWCursor )
      {
        pcrArrayColor = operator new__(4 * v4 * v5);
        v9 = CreateCompatibleDC(hdcScreen);
        v10 = v9;
        hdcColor = v9;
        if ( !v9 )
          goto LABEL_26;
        SelectObject(v9, iconinfo.hbmColor);
        GetDIBits(v10, iconinfo.hbmColor, 0, v5, pcrArrayColor, &bmi, 0);
      }
      (*(void (__cdecl **)(void *, _D3DLOCKED_RECT *, _DWORD, _DWORD))(*(_DWORD *)pCursorSurface + 52))(
        pCursorSurface,
        &lr,
        0,
        0);
      y = 0;
      if ( v5 )
      {
        v22 = -v4;
        v29 = lr.pBits;
        v11 = -4 * v4;
        v12 = (char *)pcrArrayMask + v4 * (4 * v5 - 4);
        v20 = -4 * v4;
        v31 = v4 * (dwHeightSrc - 1);
        hgdiobjOld = (char *)pcrArrayMask + v4 * (4 * v5 - 4);
        do
        {
          v13 = 0;
          if ( v4 )
          {
            v14 = pcrArrayColor - pcrArrayMask;
            v15 = v29;
            dwHeightSrc = 15;
            for ( i = pcrArrayColor - pcrArrayMask; ; v14 = i )
            {
              if ( bBWCursor )
              {
                v16 = *(_DWORD *)v12;
                v17 = *((_DWORD *)pcrArrayMask + v13 + v31);
              }
              else
              {
                v16 = *(_DWORD *)&v12[v14];
                v17 = *(_DWORD *)v12;
              }
              *(_DWORD *)v15 = v17 ? 0 : v16 | 0xFF000000;
              if ( bAddWatermark && v13 < 0xC && y < 5 )
              {
                wMask[0] = -13120;
                wMask[1] = -23904;
                wMask[2] = -23392;
                wMask[3] = -23904;
                wMask[4] = -13120;
                if ( (unsigned __int16)wMask[y] & (1 << dwHeightSrc) )
                  *(_DWORD *)v15 |= 0xFF808080u;
              }
              --dwHeightSrc;
              ++v13;
              v12 += 4;
              v15 = (char *)v15 + 4;
              if ( v13 >= dwWidth )
                break;
            }
            v4 = dwWidth;
            v5 = dwHeightDest;
            v12 = hgdiobjOld;
            v11 = v20;
          }
          ++y;
          v29 = (char *)v29 + 4 * v4;
          v31 += v22;
          v12 += v11;
          hgdiobjOld = v12;
        }
        while ( y < v5 );
      }
      (*(void (__cdecl **)(void *))(*(_DWORD *)pCursorSurface + 56))(pCursorSurface);
    }
  }
LABEL_26:
  JUMPOUT(End);
}
// A85C00: using guessed type int __security_cookie;

//----- (00459FE0) --------------------------------------------------------
Cursor::Type __cdecl Cursor::GetCursor()
{
  return Cursor::ms_eType;
}
// A76390: using guessed type int Cursor__ms_eType;

//----- (00459FF0) --------------------------------------------------------
bool __cdecl Cursor::GetEnableHardware()
{
  return Cursor::ms_bEnableHardware;
}
// A7638D: using guessed type char Cursor__ms_bEnableHardware;

//----- (0045A010) --------------------------------------------------------
HCURSOR __cdecl Cursor::ReleaseSystemCursor()
{
  HCURSOR *v0; // esi@1
  HCURSOR result; // eax@2

  v0 = (HCURSOR *)&Cursor::ms_akHWCurRes;
  do
  {
    result = *v0;
    if ( *v0 )
    {
      result = (HCURSOR)DestroyCursor(*v0);
      *v0 = 0;
    }
    v0 += 4;
  }
  while ( (signed int)v0 < (signed int)&Cursor::ms_bDeviceSupportHWCursor );
  return result;
}
// A97788: using guessed type char Cursor__ms_bDeviceSupportHWCursor;

//----- (0045A040) --------------------------------------------------------
int __cdecl Cursor::ReleaseHWCurRes()
{
  signed int v0; // esi@1
  int result; // eax@2

  v0 = (signed int)&unk_A9768C;
  do
  {
    result = *(_DWORD *)v0;
    if ( *(_DWORD *)v0 )
    {
      result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(*(_DWORD *)v0);
      *(_DWORD *)v0 = 0;
    }
    v0 += 16;
  }
  while ( v0 < (signed int)&Cursor::ms_pkStudio );
  return result;
}

//----- (0045A080) --------------------------------------------------------
PgCursor *__cdecl Cursor::GetPgCursor()
{
  return Cursor::ms_spGraphicCursor;
}

//----- (0045A090) --------------------------------------------------------
void __cdecl Cursor::UpdateGraphicCursorPos(int iXPos, int iYPos)
{
  if ( Cursor::ms_spGraphicCursor )
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(
      0.0,
      iXPos,
      iYPos);
}

//----- (0045A0C0) --------------------------------------------------------
void __cdecl Cursor::SetGraphicCursorInfo(Cursor::Type eType, int iTexOffLeft, int iTexOffTop)
{
  PgCursor::SetCursorInfo(eType, dword_A97690[4 * eType], dword_A97694[4 * eType], iTexOffLeft, iTexOffTop);
}
// A97690: using guessed type int dword_A97690[];
// A97694: using guessed type int dword_A97694[];

//----- (0045A0F0) --------------------------------------------------------
void __cdecl Cursor::TerminateGraphicCursor()
{
  Cursor::ms_spGraphicCursor = 0;
  PgCursor::Shutdown();
}

//----- (0045A100) --------------------------------------------------------
bool __cdecl Cursor::SetGraphicCursor(Cursor::Type eType)
{
  if ( Cursor::ms_eType != eType )
  {
    Cursor::ms_eType = eType;
    PgCursor::SetType(Cursor::ms_spGraphicCursor, eType);
  }
  return 1;
}
// A76390: using guessed type int Cursor__ms_eType;

//----- (0045A130) --------------------------------------------------------
void __cdecl Cursor::ShowGraphicCursor(bool bShow)
{
  if ( Cursor::ms_spGraphicCursor )
    ((void (__stdcall *)(_DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(bShow);
}

//----- (0045A160) --------------------------------------------------------
int __cdecl Cursor::DrawGraphicCursor()
{
  int result; // eax@2

  if ( Cursor::ms_spGraphicCursor )
    result = ((int (*)(void))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)();
  return result;
}

//----- (0045A180) --------------------------------------------------------
void __cdecl Cursor::InvalidateDropIcon()
{
  Cursor::ms_bInvalidateDropIcon = 1;
  Cursor::ms_bDropContentsExist = 0;
}
// A97789: using guessed type char Cursor__ms_bDropContentsExist;
// A9778A: using guessed type char Cursor__ms_bInvalidateDropIcon;

//----- (0045A1A0) --------------------------------------------------------
void __cdecl Cursor::SetCursorPos(int iXPos, int iYPos)
{
  if ( Cursor::ms_spGraphicCursor )
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(
      0.0,
      iXPos,
      iYPos);
  SetCursorPos(iXPos, iYPos);
}

//----- (0045A1D0) --------------------------------------------------------
int __cdecl Cursor::Draw()
{
  int result; // eax@3

  if ( !Cursor::ms_bEnableHardware )
  {
    if ( Cursor::ms_spGraphicCursor )
      result = ((int (*)(void))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)();
  }
  return result;
}
// A7638D: using guessed type char Cursor__ms_bEnableHardware;

//----- (0045A1F0) --------------------------------------------------------
bool __cdecl Cursor::CreateSystemCursor()
{
  int v0; // ebx@1
  char *v1; // eax@4
  int v2; // ecx@4
  char v3; // dl@5
  const void *v4; // esi@6
  char v5; // cl@7
  unsigned int v6; // eax@8
  void *v7; // edi@8
  char v8; // cl@9
  HICON__ *v9; // eax@10
  unsigned int v10; // edx@12
  int v11; // eax@12
  _ICONINFO iconinfo; // [sp+Ch] [bp-18h]@11
  char **v14; // [sp+20h] [bp-4h]@1

  v0 = (int)dword_A97690;
  v14 = apcFileName;
  while ( 1 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v1 = *v14;
    v2 = 0;
    do
    {
      v3 = *(&Folder::m_acMenu + v2);
      *(&Folder::m_acMerge + v2++) = v3;
    }
    while ( v3 );
    v4 = v1;
    do
      v5 = *v1++;
    while ( v5 );
    v6 = v1 - v4;
    v7 = &Folder::m_acMerge - 1;
    do
    {
      v8 = *((_BYTE *)v7 + 1);
      v7 = (char *)v7 + 1;
    }
    while ( v8 );
    memcpy(v7, v4, v6);
    v9 = (HICON__ *)LoadImageA(0, &Folder::m_acMerge, 2u, 0, 0, 0x2010u);
    *(_DWORD *)(v0 - 8) = v9;
    if ( !v9 )
      break;
    iconinfo.fIcon = 0;
    iconinfo.xHotspot = 0;
    iconinfo.yHotspot = 0;
    iconinfo.hbmMask = 0;
    iconinfo.hbmColor = 0;
    if ( !GetIconInfo(v9, &iconinfo) )
      break;
    v10 = iconinfo.xHotspot;
    *(_DWORD *)(v0 + 4) = iconinfo.yHotspot;
    v11 = (int)(v14 + 1);
    *(_DWORD *)v0 = v10;
    v0 += 16;
    v14 = (char **)v11;
    if ( v11 >= (signed int)&NiZBufferProperty__RTTI_Type_Descriptor_ )
      return 1;
  }
  return 0;
}
// A763D8: using guessed type int (__thiscall **NiZBufferProperty _RTTI Type Descriptor_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;
// A97690: using guessed type int dword_A97690[];

//----- (0045A2D0) --------------------------------------------------------
bool __cdecl Cursor::CreateHWCurRes()
{
  signed int v0; // eax@1
  HICON__ *v1; // ecx@2
  HBITMAP__ *v2; // esi@2
  int v3; // ebx@3
  unsigned int v4; // edi@5
  int v5; // esi@5
  UINT v6; // ebx@9
  HDC__ *v7; // ebx@9
  HDC__ *v8; // eax@12
  HDC__ *v9; // ebx@12
  unsigned int v10; // ebx@16
  int v11; // ecx@16
  char *v12; // eax@16
  unsigned int v13; // edi@17
  unsigned int v14; // ecx@18
  int v15; // ecx@21
  int v16; // edx@21
  bool v17; // zf@28
  char pv; // [sp+Ch] [bp-A8h]@4
  int v20; // [sp+10h] [bp-A4h]@5
  UINT v21; // [sp+14h] [bp-A0h]@5
  char v22; // [sp+24h] [bp-90h]@15
  UINT v23; // [sp+28h] [bp-8Ch]@16
  NiRefObjectVtbl *pkDevice; // [sp+2Ch] [bp-88h]@1
  int v25; // [sp+30h] [bp-84h]@16
  unsigned int i; // [sp+34h] [bp-80h]@18
  int v27; // [sp+38h] [bp-7Ch]@16
  _ICONINFO piconinfo; // [sp+3Ch] [bp-78h]@3
  HDC__ *v29; // [sp+50h] [bp-64h]@3
  unsigned int v30; // [sp+54h] [bp-60h]@16
  char *v31; // [sp+58h] [bp-5Ch]@16
  int v32; // [sp+5Ch] [bp-58h]@1
  HDC hdc; // [sp+60h] [bp-54h]@3
  UINT v34; // [sp+64h] [bp-50h]@16
  HDC hDC; // [sp+68h] [bp-4Ch]@3
  HGDIOBJ h; // [sp+6Ch] [bp-48h]@11
  void *p; // [sp+70h] [bp-44h]@3
  int v38; // [sp+74h] [bp-40h]@3
  LPVOID lpvBits; // [sp+78h] [bp-3Ch]@3
  UINT cLines; // [sp+7Ch] [bp-38h]@5
  char v41; // [sp+83h] [bp-31h]@6
  char bmi[4]; // [sp+84h] [bp-30h]@9
  int v43; // [sp+88h] [bp-2Ch]@9
  UINT v44; // [sp+8Ch] [bp-28h]@9
  int v45; // [sp+90h] [bp-24h]@9
  int v46; // [sp+94h] [bp-20h]@9
  unsigned int v47; // [sp+B0h] [bp-4h]@1
  int v48; // [sp+B4h] [bp+0h]@1

  v47 = (unsigned int)&v48 ^ __security_cookie;
  v0 = (signed int)&Cursor::ms_akHWCurRes;
  pkDevice = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
  v32 = (int)&Cursor::ms_akHWCurRes;
  while ( 1 )
  {
    v1 = *(HICON__ **)v0;
    v2 = 0;
    if ( *(_DWORD *)v0 )
      break;
LABEL_46:
    v0 += 16;
    v32 = v0;
    if ( v0 >= (signed int)&Cursor::ms_bDeviceSupportHWCursor )
      return 1;
  }
  v3 = -2147467259;
  v38 = 0;
  hdc = 0;
  v29 = 0;
  hDC = 0;
  p = 0;
  lpvBits = 0;
  piconinfo.fIcon = 0;
  piconinfo.xHotspot = 0;
  piconinfo.yHotspot = 0;
  piconinfo.hbmMask = 0;
  piconinfo.hbmColor = 0;
  if ( GetIconInfo(v1, &piconinfo) && GetObjectA(piconinfo.hbmMask, 24, &pv) )
  {
    v4 = v21;
    v5 = v20;
    cLines = v21;
    if ( piconinfo.hbmColor )
    {
      v41 = 0;
    }
    else
    {
      v41 = 1;
      v4 = v21 >> 1;
    }
    v3 = (*(int (__stdcall **)(NiRefObjectVtbl *, int, unsigned int, signed int, signed int, int *, _DWORD))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))pkDevice->__vecDelDtor + 36))(
           pkDevice,
           v20,
           v4,
           21,
           3,
           &v38,
           0);
    if ( v3 < 0 )
      goto LABEL_30;
    v6 = cLines;
    lpvBits = operator new__(4 * v5 * cLines);
    memset(bmi, 0, 0x2Cu);
    *(_DWORD *)bmi = 40;
    v43 = v5;
    v44 = v6;
    v45 = 2097153;
    v46 = 0;
    hDC = GetDC(0);
    v7 = CreateCompatibleDC(hDC);
    v29 = v7;
    if ( !v7 )
    {
      v3 = -2147467259;
LABEL_30:
      v2 = 0;
      goto LABEL_31;
    }
    h = SelectObject(v7, piconinfo.hbmMask);
    GetDIBits(v7, piconinfo.hbmMask, 0, cLines, lpvBits, (LPBITMAPINFO)bmi, 0);
    SelectObject(v7, h);
    if ( !v41 )
    {
      p = operator new__(4 * v5 * v4);
      v8 = CreateCompatibleDC(hDC);
      v9 = v8;
      hdc = v8;
      if ( !v8 )
      {
        v3 = -2147467259;
        goto LABEL_30;
      }
      SelectObject(v8, piconinfo.hbmColor);
      GetDIBits(v9, piconinfo.hbmColor, 0, v4, p, (LPBITMAPINFO)bmi, 0);
    }
    (*(void (__stdcall **)(int, char *, _DWORD, _DWORD))(*(_DWORD *)v38 + 52))(v38, &v22, 0, 0);
    if ( v4 )
    {
      v25 = -v5;
      v34 = v23;
      v10 = v5 * (cLines - 1);
      v11 = -4 * v5;
      v12 = (char *)lpvBits + v5 * (4 * v4 - 4);
      v27 = -4 * v5;
      v30 = v5 * (cLines - 1);
      v31 = (char *)lpvBits + v5 * (4 * v4 - 4);
      h = (HGDIOBJ)v4;
      do
      {
        v13 = 0;
        if ( v5 )
        {
          cLines = v34;
          v14 = p - lpvBits;
          for ( i = p - lpvBits; ; v14 = i )
          {
            if ( v41 )
            {
              v15 = *(_DWORD *)v12;
              v16 = *((_DWORD *)lpvBits + v13 + v10);
              v10 = v30;
            }
            else
            {
              v15 = *(_DWORD *)&v12[v14];
              v16 = *(_DWORD *)v12;
            }
            *(_DWORD *)cLines = v16 ? 0 : v15 | 0xFF000000;
            cLines += 4;
            ++v13;
            v12 += 4;
            if ( v13 >= v5 )
              break;
          }
          v11 = v27;
          v12 = v31;
        }
        v10 += v25;
        v34 += 4 * v5;
        v12 += v11;
        v17 = h-- == (HGDIOBJ)1;
        v31 = v12;
        v30 = v10;
      }
      while ( !v17 );
    }
    (*(void (__stdcall **)(int))(*(_DWORD *)v38 + 56))(v38);
    v3 = 0;
    goto LABEL_30;
  }
LABEL_31:
  if ( piconinfo.hbmMask != v2 )
    DeleteObject(piconinfo.hbmMask);
  if ( piconinfo.hbmColor != v2 )
    DeleteObject(piconinfo.hbmColor);
  if ( (HBITMAP__ *)hDC != v2 )
    ReleaseDC((HWND)v2, hDC);
  if ( (HBITMAP__ *)hdc != v2 )
    DeleteDC(hdc);
  if ( (HBITMAP__ *)v29 != v2 )
    DeleteDC(v29);
  if ( p != v2 )
    operator delete__(p);
  if ( lpvBits != v2 )
    operator delete__(lpvBits);
  v0 = v32;
  *(_DWORD *)(v32 + 4) = v38;
  if ( (HBITMAP__ *)v3 == v2 )
    goto LABEL_46;
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A97788: using guessed type char Cursor__ms_bDeviceSupportHWCursor;

//----- (0045A650) --------------------------------------------------------
bool __cdecl Cursor::ResetHardwareCursor(Cursor::Type eType)
{
  bool result; // al@2

  if ( eType == 17 )
    result = 0;
  else
    result = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr->__vecDelDtor
              + 10))(
               NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr,
               *((_DWORD *)&Cursor::ms_akHWCurRes + 4 * eType + 2),
               *((_DWORD *)&Cursor::ms_akHWCurRes + 4 * eType + 3),
               *((_DWORD *)&Cursor::ms_akHWCurRes + 4 * eType + 1)) >= 0;
  return result;
}

//----- (0045A690) --------------------------------------------------------
void __cdecl Cursor::ShowHardwareCursor(bool bShow)
{
  NiRefObjectVtbl *v1; // eax@2

  if ( NiRenderer::ms_pkRenderer )
  {
    v1 = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
    if ( v1 )
      (*((void (__stdcall **)(_DWORD, _DWORD))v1->__vecDelDtor + 12))(v1, bShow);
  }
}

//----- (0045A6C0) --------------------------------------------------------
void __cdecl Cursor::SetHardwareCursorPos(int iXPos, int iYPos)
{
  NiRefObjectVtbl *v2; // eax@2

  if ( NiRenderer::ms_pkRenderer )
  {
    v2 = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
    if ( v2 )
      (*((void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))v2->__vecDelDtor + 11))(v2, iXPos, iYPos, 1);
  }
}

//----- (0045A6F0) --------------------------------------------------------
void __cdecl PutCursorOnTexture(IDirect3DSurface9 *pkSurf, int iXOff, int iYOff, NiSourceTexture *pkTex)
{
  int v4; // ebx@0
  int v5; // esi@0
  NiTexture::RendererData *v6; // ecx@2
  void *v7; // eax@3
  void *v8; // esi@3
  unsigned int (__stdcall *v9)(IUnknown *); // edx@3
  void *v10; // ebx@3
  void *v11; // eax@3
  signed int v12; // edx@3
  _D3DLOCKED_RECT kLRSrc; // [sp+4h] [bp-2Ch]@3
  _D3DLOCKED_RECT kLRDest; // [sp+Ch] [bp-24h]@3
  void *pkDXTex; // [sp+14h] [bp-1Ch]@3
  IDirect3DSurface9 *v16; // [sp+18h] [bp-18h]@1
  tagRECT kLockRect; // [sp+1Ch] [bp-14h]@3
  unsigned int v18; // [sp+2Ch] [bp-4h]@1
  int v19; // [sp+30h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v16 = pkSurf;
  if ( pkTex )
  {
    v6 = pkTex->baseclass_0.m_pkRendererData;
    if ( v6 )
    {
      v7 = (void *)((int (__stdcall *)(int, int))v6->vfptr[1].GetWidth)(v5, v4);
      v8 = v7;
      v9 = pkSurf->baseclass_0.baseclass_0.lpVtbl[4].AddRef;
      pkDXTex = v7;
      ((void (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, _DWORD, _DWORD))v9)(pkSurf, &kLRSrc, 0, 0);
      v10 = kLRSrc.pBits;
      kLockRect.top = iYOff;
      kLockRect.bottom = iYOff + 32;
      kLockRect.left = iXOff;
      kLockRect.right = iXOff + 32;
      (*(void (__stdcall **)(void *, _DWORD, _D3DLOCKED_RECT *, tagRECT *, _DWORD))(*(_DWORD *)v8 + 76))(
        v8,
        0,
        &kLRDest,
        &kLockRect,
        0);
      v11 = kLRDest.pBits;
      v12 = 32;
      do
      {
        memcpy(v11, v10, 0x80u);
        v11 = (char *)v11 + kLRDest.Pitch;
        v10 = (char *)v10 + kLRSrc.Pitch;
        --v12;
      }
      while ( v12 );
      (*(void (__cdecl **)(void *, _DWORD))(*(_DWORD *)pkDXTex + 80))(pkDXTex, 0);
      v16->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v16);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0045A7B0) --------------------------------------------------------
bool __cdecl Cursor::InitGraphicCursor()
{
  void *v0; // eax@1
  int v1; // ebx@1
  NiPixelData *v2; // eax@2
  int v3; // esi@4
  signed int v4; // edi@4
  NiRenderer *v5; // edi@10
  int v6; // esi@10
  NiRect<int> kRect; // [sp+0h] [bp-24h]@10
  NiSourceTexture *pkTexture; // [sp+10h] [bp-14h]@1
  int i; // [sp+14h] [bp-10h]@4
  int v11; // [sp+20h] [bp-4h]@1

  PgCursor::SetMaxCursorType(16);
  v0 = operator new(0x70u);
  pkTexture = (NiSourceTexture *)v0;
  v1 = 0;
  v11 = 0;
  if ( v0 )
    NiPixelData::NiPixelData((NiPixelData *)v0, 0x80u, 0x80u, &NiPixelFormat::RGBA32, 1u, 1u);
  else
    v2 = 0;
  v11 = -1;
  pkTexture = NiSourceTexture::Create(v2, &NiSourceTexture::ms_kDefaultPrefs);
  v3 = 0;
  i = 0;
  v4 = (signed int)&unk_A9768C;
  while ( 1 )
  {
    if ( !*(_DWORD *)v4
      || (PutCursorOnTexture(*(IDirect3DSurface9 **)v4, v3, v1, pkTexture),
          PgCursor::SetCursorInfo(i, *(_DWORD *)(v4 + 4), *(_DWORD *)(v4 + 8), v3, v1),
          v3 += 32,
          v3 + 32 <= 128) )
      goto LABEL_9;
    v1 += 32;
    if ( v1 > 128 )
      return 0;
    v3 = 0;
LABEL_9:
    ++i;
    v4 += 16;
    if ( v4 >= (signed int)&Cursor::ms_pkStudio )
    {
      v5 = NiRenderer::ms_pkRenderer;
      v6 = ((int (__thiscall *)(NiRenderer *))NiRenderer::ms_pkRenderer->baseclass_0.baseclass_0.vfptr[26].__vecDelDtor)(NiRenderer::ms_pkRenderer);
      kRect.m_right = 0;
      kRect.m_bottom = 0;
      kRect.m_left = 0;
      kRect.m_top = 0;
      kRect.m_right = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 60))(v6);
      kRect.m_bottom = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 64))(v6);
      Cursor::ms_spGraphicCursor = PgCursor::CreateFromTex(v5, &kRect, 4u, 0, pkTexture);
      return Cursor::ms_spGraphicCursor != 0;
    }
  }
}

//----- (0045A910) --------------------------------------------------------
bool __cdecl Cursor::IsHWCursorSupport()
{
  bool result; // al@2
  NiRefObjectVtbl *v1; // eax@3
  _D3DCAPS9 kCaps; // [sp+0h] [bp-134h]@4
  unsigned int v3; // [sp+130h] [bp-4h]@1
  int v4; // [sp+134h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  if ( NiRenderer::ms_pkRenderer
    && (v1 = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr) != 0
    && !(*(int (__stdcall **)(NiRefObjectVtbl *, _D3DCAPS9 *))((int (__stdcall **)(_DWORD, _DWORD))v1->__vecDelDtor + 7))(
          v1,
          &kCaps) )
  {
    if ( kCaps.CursorCaps & 1 )
      result = 1;
    else
      result = (LOBYTE(kCaps.CursorCaps) >> 1) & 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0045A990) --------------------------------------------------------
void __cdecl Cursor::ShowCursor(bool bShow)
{
  NiRefObjectVtbl *v1; // eax@4

  if ( Cursor::ms_bShow )
  {
    if ( Cursor::ms_bEnableHardware )
    {
      if ( NiRenderer::ms_pkRenderer )
      {
        v1 = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
        if ( v1 )
          (*((void (__stdcall **)(_DWORD, _DWORD))v1->__vecDelDtor + 12))(v1, bShow);
      }
    }
    else
    {
      if ( Cursor::ms_spGraphicCursor )
        ((void (__stdcall *)(_DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(bShow);
    }
  }
}
// A7638C: using guessed type char Cursor__ms_bShow;
// A7638D: using guessed type char Cursor__ms_bEnableHardware;

//----- (0045A9E0) --------------------------------------------------------
int __cdecl Cursor::OnResetDevice()
{
  int result; // eax@2

  if ( Cursor::ms_bEnableHardware )
  {
    result = Cursor::ms_eType;
    if ( Cursor::ms_eType != 17 )
      result = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr->__vecDelDtor
                + 10))(
                 NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr,
                 *((_DWORD *)&Cursor::ms_akHWCurRes + 4 * Cursor::ms_eType + 2),
                 *((_DWORD *)&Cursor::ms_akHWCurRes + 4 * Cursor::ms_eType + 3),
                 *((_DWORD *)&Cursor::ms_akHWCurRes + 4 * Cursor::ms_eType + 1));
  }
  return result;
}
// A7638D: using guessed type char Cursor__ms_bEnableHardware;
// A76390: using guessed type int Cursor__ms_eType;

//----- (0045AA20) --------------------------------------------------------
bool __cdecl Cursor::InitHardwareCursor()
{
  return Cursor::CreateHWCurRes()
      && (Cursor::ms_pkDropIconSurface
       || (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr->__vecDelDtor
           + 36))(
            NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr,
            32,
            32,
            21,
            3,
            &Cursor::ms_pkDropIconSurface,
            0) >= 0);
}

//----- (0045AA70) --------------------------------------------------------
int __cdecl Cursor::TerminateHardwareCursor()
{
  NiD3DDefaultShader *v0; // esi@5
  signed int v1; // esi@10
  int result; // eax@11

  if ( Cursor::ms_pkDropIconSurface )
  {
    Cursor::ms_pkDropIconSurface->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)Cursor::ms_pkDropIconSurface);
    Cursor::ms_pkDropIconSurface = 0;
  }
  if ( Cursor::ms_pkDropIconSurfaceTemp )
  {
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)Cursor::ms_pkDropIconSurfaceTemp + 8))(Cursor::ms_pkDropIconSurfaceTemp);
    Cursor::ms_pkDropIconSurfaceTemp = 0;
  }
  v0 = Cursor::ms_spDropIconTexture.m_pObject;
  if ( Cursor::ms_spDropIconTexture.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&Cursor::ms_spDropIconTexture.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v0 )
      v0->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v0, 1u);
    Cursor::ms_spDropIconTexture.m_pObject = 0;
  }
  v1 = (signed int)&unk_A9768C;
  do
  {
    result = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(*(_DWORD *)v1);
      *(_DWORD *)v1 = 0;
    }
    v1 += 16;
  }
  while ( v1 < (signed int)&Cursor::ms_pkStudio );
  return result;
}
// A97794: using guessed type int Cursor__ms_pkDropIconSurfaceTemp;

//----- (0045AB10) --------------------------------------------------------
bool __cdecl Cursor::SetHardwareCursor(Cursor::Type eType)
{
  bool result; // al@2

  if ( Cursor::ms_eType == eType )
  {
    result = 1;
  }
  else
  {
    if ( (signed int)eType < 16 )
    {
      Cursor::ms_eType = eType;
      result = Cursor::ResetHardwareCursor(eType);
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A76390: using guessed type int Cursor__ms_eType;

//----- (0045AB40) --------------------------------------------------------
void __cdecl Cursor::Show(bool bShow)
{
  if ( bShow )
  {
    Cursor::ms_bShow = bShow;
    Cursor::ShowCursor(bShow);
  }
  else
  {
    Cursor::ShowCursor(0);
    Cursor::ms_bShow = 0;
  }
}
// A7638C: using guessed type char Cursor__ms_bShow;

//----- (0045AB70) --------------------------------------------------------
void __cdecl Cursor::Terminate()
{
  void *v0; // esi@1
  NiD3DDefaultShader *v1; // esi@4
  HCURSOR *v2; // esi@8
  NiD3DDefaultShader *v3; // esi@13

  v0 = Cursor::ms_pkStudio;
  if ( Cursor::ms_pkStudio )
  {
    Studio::_Studio(Cursor::ms_pkStudio);
    operator delete(v0);
  }
  if ( Cursor::ms_spCursorRenderCamera.m_pObject )
  {
    v1 = Cursor::ms_spCursorRenderCamera.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&Cursor::ms_spCursorRenderCamera.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v1 )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
    Cursor::ms_spCursorRenderCamera.m_pObject = 0;
  }
  v2 = (HCURSOR *)&Cursor::ms_akHWCurRes;
  do
  {
    if ( *v2 )
    {
      DestroyCursor(*v2);
      *v2 = 0;
    }
    v2 += 4;
  }
  while ( (signed int)v2 < (signed int)&Cursor::ms_bDeviceSupportHWCursor );
  Cursor::TerminateHardwareCursor();
  Cursor::ms_spGraphicCursor = 0;
  PgCursor::Shutdown();
  if ( Cursor::ms_spCursorFrame.m_pObject )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, (PgWin *)Cursor::ms_spCursorFrame.m_pObject);
    v3 = Cursor::ms_spCursorFrame.m_pObject;
    if ( Cursor::ms_spCursorFrame.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&Cursor::ms_spCursorFrame.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
      Cursor::ms_spCursorFrame.m_pObject = 0;
    }
  }
}
// A97788: using guessed type char Cursor__ms_bDeviceSupportHWCursor;

//----- (0045AC40) --------------------------------------------------------
bool __cdecl Cursor::SetCursor(Cursor::Type eType)
{
  if ( Cursor::ms_bDropContentsExist )
    return 0;
  if ( !Cursor::ms_bEnableHardware )
  {
    if ( Cursor::ms_eType != eType )
    {
      Cursor::ms_eType = eType;
      PgCursor::SetType(Cursor::ms_spGraphicCursor, eType);
    }
    return 1;
  }
  if ( Cursor::ms_eType == eType )
    return 1;
  if ( (signed int)eType >= 16 )
    return 0;
  Cursor::ms_eType = eType;
  return Cursor::ResetHardwareCursor(eType);
}
// A7638D: using guessed type char Cursor__ms_bEnableHardware;
// A76390: using guessed type int Cursor__ms_eType;
// A97789: using guessed type char Cursor__ms_bDropContentsExist;

//----- (0045ACA0) --------------------------------------------------------
void __cdecl Cursor::EnableHardware(bool bEnable)
{
  NiRefObjectVtbl *v1; // eax@5
  NiRefObjectVtbl *v2; // eax@8

  if ( bEnable )
  {
    Cursor::ms_bEnableHardware = 1;
    if ( Cursor::ms_spGraphicCursor )
      ((void (__stdcall *)(_DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(0);
    if ( NiRenderer::ms_pkRenderer )
    {
      v1 = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
      if ( v1 )
        (*((void (__stdcall **)(_DWORD, _DWORD))v1->__vecDelDtor + 12))(v1, 1);
    }
  }
  else
  {
    Cursor::ms_bEnableHardware = 0;
    if ( NiRenderer::ms_pkRenderer )
    {
      v2 = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
      if ( v2 )
        (*((void (__stdcall **)(_DWORD, _DWORD))v2->__vecDelDtor + 12))(v2, 0);
    }
    if ( Cursor::ms_spGraphicCursor )
      ((void (__stdcall *)(_DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(1);
  }
}
// A7638D: using guessed type char Cursor__ms_bEnableHardware;

//----- (0045AD20) --------------------------------------------------------
int __cdecl Cursor::SwitchCursor()
{
  int result; // eax@4

  if ( Cursor::ms_bEnableHardware )
  {
    Cursor::ms_bEnableHardware = 0;
    if ( Cursor::ms_spGraphicCursor )
      ((void (__stdcall *)(_DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(0);
    result = (int)NiRenderer::ms_pkRenderer;
    if ( NiRenderer::ms_pkRenderer )
    {
      result = (int)NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
      if ( result )
        result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)result + 48))(result, 1);
    }
  }
  else
  {
    result = (int)NiRenderer::ms_pkRenderer;
    Cursor::ms_bEnableHardware = 1;
    if ( NiRenderer::ms_pkRenderer )
    {
      result = (int)NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
      if ( result )
        result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)result + 48))(result, 0);
    }
    if ( Cursor::ms_spGraphicCursor )
      result = ((int (__stdcall *)(_DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(1);
  }
  return result;
}
// A7638D: using guessed type char Cursor__ms_bEnableHardware;

//----- (0045ADA0) --------------------------------------------------------
#error "45ADA0: undefined or illegal type 'DIRECT3DTEXTURE9' (funcsize=557)"

//----- (0045B4C0) --------------------------------------------------------
bool __cdecl Cursor::Init()
{
  bool result; // al@2
  NiRefObjectVtbl *v1; // eax@15

  if ( Cursor::CreateSystemCursor()
    && Cursor::CreateHWCurRes()
    && (Cursor::ms_pkDropIconSurface
     || (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr->__vecDelDtor
         + 36))(
          NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr,
          32,
          32,
          21,
          3,
          &Cursor::ms_pkDropIconSurface,
          0) >= 0)
    && Cursor::InitGraphicCursor() )
  {
    Cursor::ms_bDeviceSupportHWCursor = Cursor::IsHWCursorSupport();
    Cursor::EnableHardware(Cursor::ms_bDeviceSupportHWCursor);
    if ( !Cursor::ms_bDropContentsExist )
    {
      if ( Cursor::ms_bEnableHardware )
      {
        if ( Cursor::ms_eType )
        {
          Cursor::ms_eType = 0;
          Cursor::ResetHardwareCursor(0);
        }
      }
      else
      {
        if ( Cursor::ms_eType )
        {
          Cursor::ms_eType = 0;
          PgCursor::SetType(Cursor::ms_spGraphicCursor, 0);
        }
      }
    }
    Cursor::ms_bShow = 1;
    if ( Cursor::ms_bEnableHardware )
    {
      if ( NiRenderer::ms_pkRenderer )
      {
        v1 = NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr;
        if ( v1 )
          (*((void (__stdcall **)(_DWORD, _DWORD))v1->__vecDelDtor + 12))(v1, 1);
      }
    }
    else
    {
      if ( Cursor::ms_spGraphicCursor )
        ((void (__stdcall *)(_DWORD))Cursor::ms_spGraphicCursor->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(1);
    }
    Cursor::ShowCursor(1);
    Cursor::ms_pkStudio = Studio::Create(NiRenderer::ms_pkRenderer, 5u);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A7638C: using guessed type char Cursor__ms_bShow;
// A7638D: using guessed type char Cursor__ms_bEnableHardware;
// A76390: using guessed type int Cursor__ms_eType;
// A97788: using guessed type char Cursor__ms_bDeviceSupportHWCursor;
// A97789: using guessed type char Cursor__ms_bDropContentsExist;

//----- (0045B5E0) --------------------------------------------------------
void __thiscall NiZBufferProperty::NiZBufferProperty(NiZBufferProperty *this)
{
  NiZBufferProperty *v1; // esi@1

  v1 = this;
  NiObjectNET::NiObjectNET(&this->baseclass_0.baseclass_0);
  v1->m_uFlags = 3;
  v1->m_eTest = 3;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiZBufferProperty::_vftable_;
}
// 984FD4: using guessed type int (__thiscall *NiZBufferProperty___vftable_)(void *p, char);

//----- (0045B600) --------------------------------------------------------
NiRTTI *__thiscall NiZBufferProperty::GetRTTI(NiZBufferProperty *this)
{
  return &NiZBufferProperty::m_RTTI;
}

//----- (0045B610) --------------------------------------------------------
void __thiscall CursorState::SetState(CursorState *this, CursorState::CURSORSTATE eState)
{
  this->m_eState = eState;
}

//----- (0045B620) --------------------------------------------------------
void __thiscall CursorState::CancelPutOnBelongClear(CursorState *this)
{
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
}

//----- (0045B640) --------------------------------------------------------
void __thiscall CursorState::CursorState(CursorState *this)
{
  this->baseclass_0.vfptr = (Singleton<CursorState>Vtbl *)&CursorState::_vftable_;
  this->m_eState = 0;
}
// 985024: using guessed type int (__thiscall *CursorState___vftable_)(void *p, char);

//----- (0045B650) --------------------------------------------------------
void __thiscall CursorState::_CursorState(CursorState *this)
{
  this->baseclass_0.vfptr = (Singleton<CursorState>Vtbl *)&Singleton<CursorState>::_vftable_;
  if ( Singleton<CursorState>::m_pInstance )
  {
    (**(void (__stdcall ***)(_DWORD))Singleton<CursorState>::m_pInstance)(1);
    Singleton<CursorState>::m_pInstance = 0;
  }
  Singleton<CursorState>::m_bDestroy = 1;
}
// 98501C: using guessed type int (__thiscall *Singleton_CursorState____vftable_)(void *p, char);
// A977A8: using guessed type int Singleton_CursorState___m_pInstance;
// A977AC: using guessed type char Singleton_CursorState___m_bDestroy;

//----- (0045B680) --------------------------------------------------------
void __thiscall CursorState::CancelState(CursorState *this, CursorState::CURSORSTATE e)
{
  CursorState *v2; // esi@1

  v2 = this;
  if ( e == 1 )
    PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v2->m_eState = 0;
}

//----- (0045B6B0) --------------------------------------------------------
void *__thiscall Singleton<CursorState>::_scalar_deleting_destructor_(CursorState *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (Singleton<CursorState>Vtbl *)&Singleton<CursorState>::_vftable_;
  if ( Singleton<CursorState>::m_pInstance )
  {
    (**(void (__stdcall ***)(_DWORD))Singleton<CursorState>::m_pInstance)(1);
    Singleton<CursorState>::m_pInstance = 0;
  }
  Singleton<CursorState>::m_bDestroy = 1;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98501C: using guessed type int (__thiscall *Singleton_CursorState____vftable_)(void *p, char);
// A977A8: using guessed type int Singleton_CursorState___m_pInstance;
// A977AC: using guessed type char Singleton_CursorState___m_bDestroy;

//----- (0045B700) --------------------------------------------------------
void __thiscall GlobalTokens::GlobalTokens(GlobalTokens *this)
{
  ;
}

//----- (0045B720) --------------------------------------------------------
void __cdecl _loclog(char *acMsg)
{
  _iobuf *v1; // eax@2
  _iobuf *v2; // esi@2
  char ap; // [sp+Ch] [bp+Ch]@0

  if ( g_acLogFilePath[0] )
  {
    vsprintf(acTempStr, acMsg, &ap);
    v1 = fopen(g_acLogFilePath, "a");
    v2 = v1;
    if ( v1 )
    {
      fprintf(v1, acTempStr);
      fclose(v2);
    }
  }
}

//----- (0045B770) --------------------------------------------------------
bool __cdecl _loclog_init(char *acDirName, char *acLogFileName, char *acDescriptor)
{
  int v3; // eax@1
  unsigned int v4; // eax@1
  void *v5; // edi@1
  char v6; // cl@2
  tm *v7; // eax@3
  tm *v8; // esi@3
  _iobuf *v9; // eax@5
  bool result; // al@6
  __int64 ltime; // [sp+4h] [bp-25Ch]@3
  char *v12; // [sp+Ch] [bp-254h]@1
  char *v13; // [sp+10h] [bp-250h]@1
  char acTempStr[260]; // [sp+14h] [bp-24Ch]@1
  char acLogDir[260]; // [sp+118h] [bp-148h]@1
  char acDateTime[32]; // [sp+21Ch] [bp-44h]@3
  char acTime[16]; // [sp+23Ch] [bp-24h]@6
  char acDate[16]; // [sp+24Ch] [bp-14h]@6
  unsigned int v19; // [sp+25Ch] [bp-4h]@1
  int v20; // [sp+260h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v12 = acLogFileName;
  v13 = acDescriptor;
  GetModuleFileNameA(0, acLogDir, 0x104u);
  strrchr(acLogDir, 92);
  *(_BYTE *)(v3 + 1) = 0;
  sprintf(acTempStr, "%s");
  v4 = strlen(acTempStr) + 1;
  v5 = &acTempStr[259];
  do
  {
    v6 = *((_BYTE *)v5 + 1);
    v5 = (char *)v5 + 1;
  }
  while ( v6 );
  memcpy(v5, acTempStr, v4);
  _mkdir(acLogDir);
  acDateTime[0] = 0;
  _time64(&ltime);
  v7 = _localtime64(&ltime);
  v8 = v7;
  if ( v7 )
    strftime(acDateTime, 0x1Fu, "%m_%d-%H_%M", v7);
  sprintf(g_acLogFilePath, "%s\\%s");
  v9 = fopen(g_acLogFilePath, "wt");
  if ( v9 )
  {
    fclose(v9);
    _loclog("=============================Starting Log==============================\n");
    strftime(acDate, 0xFu, "%Y/%m/%d", v8);
    strftime(acTime, 0xFu, "%I:%M:%S %p", v8);
    _loclog("Descriptor: %s\n");
    _loclog("Date: %s\n");
    _loclog("Time: %s\n");
    _loclog("=======================================================================\n");
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0045B930) --------------------------------------------------------
int __cdecl _purecall()
{
  return 0;
}

//----- (0045B940) --------------------------------------------------------
MainApp *__cdecl MainApp::GetMainAppInstance()
{
  return (MainApp *)MainApp::ms_pkMainApp;
}
// A97DE4: using guessed type int MainApp__ms_pkMainApp;

//----- (0045B950) --------------------------------------------------------
int __stdcall EnumMyWndProc(HWND__ *hWnd, int lParam)
{
  int dwProcessID; // [sp+4h] [bp-10h]@1
  char szName[7]; // [sp+8h] [bp-Ch]@2
  unsigned int v5; // [sp+10h] [bp-4h]@1
  int v6; // [sp+14h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  GetWindowThreadProcessId(hWnd, (LPDWORD)&dwProcessID);
  if ( g_ProcessID == dwProcessID )
  {
    GetWindowTextA(hWnd, szName, 7);
    if ( !strncmp("³Ý¸¶ºí", szName, 6u) )
      ShowWindow(hWnd, 6);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A97DE8: using guessed type unsigned __int32 g_ProcessID;

//----- (0045B9C0) --------------------------------------------------------
int __cdecl MinimizeProcess(const char *sExeName)
{
  HANDLE v1; // esi@1
  HANDLE v2; // esi@4
  int dwExitCode; // [sp+4h] [bp-134h]@5
  void *hSnapshot; // [sp+8h] [bp-130h]@1
  tagPROCESSENTRY32 pe32; // [sp+Ch] [bp-12Ch]@2
  unsigned int v7; // [sp+134h] [bp-4h]@1
  int v8; // [sp+138h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = CreateToolhelp32Snapshot(2u, 0);
  hSnapshot = v1;
  if ( v1 != (HANDLE)-1 )
  {
    pe32.dwSize = 296;
    if ( Process32First(v1, &pe32) )
    {
      do
      {
        _strupr(pe32.szExeFile);
        if ( !strcmp(pe32.szExeFile, "IEXPLORE.EXE") )
        {
          v2 = OpenProcess(0x1FFFFFu, 0, pe32.th32ProcessID);
          if ( v2 )
          {
            GetExitCodeProcess(v2, (LPDWORD)&dwExitCode);
            g_ProcessID = pe32.th32ProcessID;
            EnumWindows(EnumMyWndProc, 0);
            CloseHandle(v2);
          }
          v1 = hSnapshot;
        }
      }
      while ( Process32Next(v1, &pe32) );
    }
    CloseHandle(v1);
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A97DE8: using guessed type unsigned __int32 g_ProcessID;

//----- (0045BAE0) --------------------------------------------------------
void __thiscall MainApp::Terminate(MainApp *this)
{
  MainApp *v1; // esi@1
  DShowMovie *v2; // ecx@1

  v1 = this;
  CPostProcessEffectManager::Destroy();
  TextEffMgr::Terminate(&g_kTextEffMgr);
  ScreenBDMgr::Terminate(&g_kScrnBDMgr);
  EffectMgr::Terminate(&g_kEffectMgr);
  Engine3D::Terminate();
  World::Terminate(&g_kWorld);
  MenuTexMgr::Terminate();
  DropItemMgr::Terminate(&g_kDropItemMgr);
  MapObjMgr::Terminate(&g_kMapObjMgr);
  CharResMgr::Terminate(&g_kCharResMgr);
  CharMgr::Terminate(&g_kCharMgr);
  NetMgr::Terminate(&g_kNetMgr);
  MainApp::TerminateInput(v1);
  PgTerminateInstance();
  MainApp::TerminateGameData(v1);
  MachineOpt::Save();
  MaskShader::Terminate();
  NiApplication::Terminate(&v1->baseclass_0);
  SoundMgr::Terminate(&g_kSoundMgr);
  v2 = v1->m_pkNetMarbleLogo;
  if ( v2 )
  {
    ((void (__cdecl *)(_DWORD))v2->vfptr->__vecDelDtor)(1);
    v1->m_pkNetMarbleLogo = 0;
  }
  if ( MainApp::st_pbyDummyMemory )
  {
    operator delete__(MainApp::st_pbyDummyMemory);
    MainApp::st_pbyDummyMemory = 0;
  }
  Font::Termiante();
}

//----- (0045BBC0) --------------------------------------------------------
bool __thiscall MainApp::MeasureTime(MainApp *this)
{
  MainApp *v1; // esi@1
  float v2; // ST04_4@3
  bool v3; // zf@3
  double v4; // st7@3
  float v5; // ST04_4@3
  double v6; // st6@3
  double v7; // st5@4
  bool result; // al@5
  float v9; // ST04_4@8
  float fDeltaTime; // [sp+4h] [bp-4h]@9

  v1 = this;
  if ( -1.0 == this->baseclass_0.m_fLastTime )
  {
    this->baseclass_0.m_fLastTime = NiGetCurrentTimeInSec();
    v1->baseclass_0.m_iClicks = 0;
    v1->baseclass_0.m_fAccumTime = 0.0;
  }
  v2 = NiGetCurrentTimeInSec();
  v3 = v1->baseclass_0.m_bNVPerfHUD == 0;
  v4 = v2;
  v1->baseclass_0.m_fCurrentTime = v2;
  v5 = v2 - v1->baseclass_0.m_fLastTime;
  v6 = v5;
  if ( v3 )
  {
    v7 = 0.0;
  }
  else
  {
    v7 = 0.0;
    if ( 0.0 == v6 )
      return 1;
  }
  if ( v7 > v6 )
  {
    v9 = v7;
    v6 = v9;
  }
  v1->baseclass_0.m_fLastTime = v4;
  fDeltaTime = v6 + v1->baseclass_0.m_fAccumTime;
  v1->baseclass_0.m_fAccumTime = fDeltaTime;
  if ( v1->baseclass_0.m_fMinFramePeriod + v1->baseclass_0.m_fLastFrame <= fDeltaTime )
  {
    result = 1;
    v1->baseclass_0.m_fFrameTime = fDeltaTime - v1->baseclass_0.m_fLastFrame;
    v1->baseclass_0.m_fLastFrame = v1->baseclass_0.m_fAccumTime;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0045BC90) --------------------------------------------------------
void __thiscall MainApp::EnableInput(MainApp *this, bool bEnable)
{
  this->m_bEnableInput = bEnable;
}

//----- (0045BCA0) --------------------------------------------------------
void __thiscall MainApp::ProcessInput(MainApp *this)
{
  MainApp *v1; // esi@1
  tagPOINT kPoint; // [sp+4h] [bp-8h]@1

  v1 = this;
  GetCursorPos(&kPoint);
  if ( !v1->baseclass_0.m_bFullscreen )
    ScreenToClient(v1->baseclass_0.m_pkAppWindow->m_pRenderWnd, &kPoint);
  Cursor::UpdateGraphicCursorPos(kPoint.x, kPoint.y);
}

//----- (0045BCE0) --------------------------------------------------------
void __cdecl LoadSoundOption()
{
  MachineOpt::SoundOption kOpt; // [sp+8h] [bp-20h]@1
  float v1; // [sp+24h] [bp-4h]@2

  memcpy(&kOpt, MachineOpt::GetSoundOption(), sizeof(kOpt));
  if ( g_kSoundMgr.m_pkBGMGroup )
  {
    v1 = (double)kOpt.uiMasterVolume / 50.0;
    SoundMgr::SetMasterVolume(&g_kSoundMgr, v1);
    v1 = (double)kOpt.uiBgVolume / 50.0;
    SoundMgr::SetBgVolume(&g_kSoundMgr, v1);
    v1 = (double)kOpt.uiEffectVolume / 50.0;
    SoundMgr::SetEffectVolume(&g_kSoundMgr, v1);
    v1 = (double)kOpt.uiEnvEffectVolume / 50.0;
    SoundMgr::SetEnvEffectVolume(&g_kSoundMgr, v1);
    v1 = (double)kOpt.uiVoiceVolume / 50.0;
    SoundMgr::SetVoiceVolume(&g_kSoundMgr, v1);
  }
}

//----- (0045BDE0) --------------------------------------------------------
void __cdecl LogZBufferState(PgWin *pkWin)
{
  NiAVObject *i; // esi@1
  int v2; // eax@2
  int uiPos; // [sp+8h] [bp-4h]@1

  uiPos = 0;
  for ( i = (NiAVObject *)PgWin::GetNextChildWin(pkWin, (unsigned int *)&uiPos);
        i;
        i = (NiAVObject *)PgWin::GetNextChildWin(pkWin, (unsigned int *)&uiPos) )
  {
    v2 = ((int (__thiscall *)(NiAVObject *))i->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(i);
    if ( v2 )
    {
      while ( (NiRTTI *)v2 != &PgWinText::m_RTTI )
      {
        v2 = *(_DWORD *)(v2 + 4);
        if ( !v2 )
          goto LABEL_7;
      }
      NiAVObject::GetProperty(i, 11);
      NiAVObject::GetProperty(i, 0);
    }
LABEL_7:
    LogZBufferState((PgWin *)i);
  }
}

//----- (0045BE60) --------------------------------------------------------
void __thiscall MainApp::DisplaySplash(MainApp *this, const char *pcName, const char *pcProgressBarName, int LoadingRate)
{
  void *v4; // esi@1
  int v5; // ebx@1
  void *v6; // eax@2
  NiScreenElementsData *v7; // eax@3
  int v8; // eax@5
  void *v9; // esi@6
  void *v10; // eax@7
  NiScreenElementsData *v11; // eax@8
  int v12; // eax@8
  int v13; // esi@8
  int v14; // eax@9
  NiScreenElementsData *v15; // ecx@11
  double v16; // ST34_8@11
  NiScreenElementsData *v17; // ecx@11
  void *v18; // eax@11
  int v19; // eax@12
  int v20; // edi@12
  void *v21; // eax@14
  int v22; // eax@15
  int v23; // edi@22
  void *v24; // eax@27
  int v25; // edi@27
  void *v26; // eax@34
  int v27; // edi@34
  NiRenderer *v28; // ecx@41
  bool v29; // zf@41
  signed int v30; // eax@43
  int v31; // ecx@46
  NiRenderTargetGroup *v32; // eax@49
  NiRenderer *v33; // ecx@50
  NiRenderer *v34; // ecx@54
  NiRenderer *v35; // edi@58
  MainApp *v36; // [sp+3Ch] [bp-10h]@1

  v36 = this;
  v4 = operator new(0xC4u);
  v5 = 0;
  if ( v4 )
  {
    v6 = operator new(0x70u);
    if ( v6 )
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v6, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
    else
      v7 = 0;
    NiScreenElements::NiScreenElements((NiScreenElements *)v4, v7);
    v5 = v8;
  }
  v9 = operator new(0xC4u);
  if ( v9 )
  {
    v10 = operator new(0x70u);
    if ( v10 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v10, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
      NiScreenElements::NiScreenElements((NiScreenElements *)v9, v11);
      v13 = v12;
    }
    else
    {
      NiScreenElements::NiScreenElements((NiScreenElements *)v9, 0);
      v13 = v14;
    }
  }
  else
  {
    v13 = 0;
  }
  NiScreenElementsData::Insert(*(NiScreenElementsData **)(v5 + 184), 4u, 0, 0);
  NiScreenElementsData::Insert(*(NiScreenElementsData **)(v13 + 184), 4u, 0, 0);
  NiScreenElementsData::SetRectangle(*(NiScreenElementsData **)(v5 + 184), 0, 0.0, 0.0, 1.0, 1.0);
  v15 = *(NiScreenElementsData **)(v13 + 184);
  v16 = (double)LoadingRate / 100.0;
  *(float *)&LoadingRate = v16 * 0.5;
  NiScreenElementsData::SetRectangle(v15, 0, 0.27734751, 0.75520003, *(float *)&LoadingRate, 0.015);
  NiScreenElementsData::UpdateBound(*(NiScreenElementsData **)(v5 + 184));
  NiScreenElementsData::UpdateBound(*(NiScreenElementsData **)(v13 + 184));
  NiScreenElementsData::SetColors(*(NiScreenElementsData **)(v5 + 184), 0, &NiColorA::WHITE);
  NiScreenElementsData::SetColors(*(NiScreenElementsData **)(v13 + 184), 0, &NiColorA::WHITE);
  NiScreenElementsData::SetTextures(*(NiScreenElementsData **)(v5 + 184), 0, 0, 0.0, 0.0, 1.0, 1.0);
  v17 = *(NiScreenElementsData **)(v13 + 184);
  *(float *)&LoadingRate = v16;
  NiScreenElementsData::SetTextures(v17, 0, 0, 0.0, 0.0, *(float *)&LoadingRate, 1.0);
  v18 = operator new(0x44u);
  LoadingRate = (int)v18;
  if ( v18 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v18, pcName);
    v20 = v19;
  }
  else
  {
    v20 = 0;
  }
  NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)v20, 0);
  v21 = operator new(0x44u);
  LoadingRate = (int)v21;
  if ( v21 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v21, pcProgressBarName);
    LoadingRate = v22;
  }
  else
  {
    *(float *)&LoadingRate = 0.0;
  }
  NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)LoadingRate, 0);
  pcName = (const char *)v20;
  if ( v20 )
    InterlockedIncrement((volatile LONG *)(v20 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v5 + 156),
    (NiPointer<NiRoom> *)&pcName);
  if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v20)(v20, 1);
  v23 = LoadingRate;
  if ( *(float *)&LoadingRate != 0.0 )
    InterlockedIncrement((volatile LONG *)(LoadingRate + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v13 + 156),
    (NiPointer<NiRoom> *)&LoadingRate);
  if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v23)(v23, 1);
  v24 = operator new(0x28u);
  v25 = (int)v24;
  LoadingRate = (int)v24;
  if ( v24 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v24);
    *(_DWORD *)v25 = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(v25 + 28) = 0;
    *(_DWORD *)(v25 + 32) = 0;
    *(_DWORD *)(v25 + 36) = 1;
  }
  else
  {
    v25 = 0;
  }
  *(_DWORD *)(v25 + 32) = 1;
  *(_DWORD *)(v25 + 36) = 0;
  LoadingRate = v25;
  InterlockedIncrement((volatile LONG *)(v25 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v5 + 156),
    (NiPointer<NiRoom> *)&LoadingRate);
  if ( !InterlockedDecrement((volatile LONG *)(v25 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v25)(v25, 1);
  LoadingRate = v25;
  InterlockedIncrement((volatile LONG *)(v25 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v13 + 156),
    (NiPointer<NiRoom> *)&LoadingRate);
  if ( !InterlockedDecrement((volatile LONG *)(v25 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v25)(v25, 1);
  v26 = operator new(0x20u);
  v27 = (int)v26;
  LoadingRate = (int)v26;
  if ( v26 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v26);
    *(_DWORD *)v27 = &NiAlphaProperty::_vftable_;
    *(_WORD *)(v27 + 28) = 236;
    *(_BYTE *)(v27 + 30) = 0;
  }
  else
  {
    v27 = 0;
  }
  *(_WORD *)(v27 + 28) &= 0xFFFEu;
  LoadingRate = v27;
  InterlockedIncrement((volatile LONG *)(v27 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v5 + 156),
    (NiPointer<NiRoom> *)&LoadingRate);
  if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v27)(v27, 1);
  LoadingRate = v27;
  InterlockedIncrement((volatile LONG *)(v27 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v13 + 156),
    (NiPointer<NiRoom> *)&LoadingRate);
  if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v27)(v27, 1);
  NiAVObject::UpdateProperties((NiAVObject *)v5);
  NiAVObject::Update((NiAVObject *)v5, 0.0, 1);
  NiAVObject::UpdateProperties((NiAVObject *)v13);
  NiAVObject::Update((NiAVObject *)v13, 0.0, 1);
  v28 = v36->baseclass_0.m_spRenderer.m_pObject;
  v29 = v28->m_eFrameState == 0;
  LoadingRate = (int)v36->baseclass_0.m_spRenderer.m_pObject;
  if ( !v29 || v28->m_eOffScreenFrameState )
  {
    v30 = 1;
  }
  else
  {
    v29 = ((int (*)(void))v28->baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)() == 0;
    v30 = 1;
    if ( !v29 )
      *(_DWORD *)(LoadingRate + 116) = 1;
  }
  v31 = (int)v36->baseclass_0.m_spRenderer.m_pObject;
  LoadingRate = v31;
  if ( (*(_DWORD *)(v31 + 116) == v30 || *(_DWORD *)(v31 + 120) == v30) && !*(_BYTE *)(v31 + 128) )
  {
    v32 = (NiRenderTargetGroup *)(*(int (**)(void))(*(_DWORD *)v31 + 104))();
    NiRenderer::BeginUsingRenderTargetGroup((NiRenderer *)LoadingRate, v32, 7u);
    v30 = 1;
  }
  v33 = v36->baseclass_0.m_spRenderer.m_pObject;
  if ( (v33->m_eFrameState == v30 || v33->m_eOffScreenFrameState == v30) && v33->m_bRenderTargetGroupActive == 1 )
    ((void (__stdcall *)(_DWORD))v33->baseclass_0.baseclass_0.vfptr[71].__vecDelDtor)(0);
  NiScreenElements::Draw((NiScreenElements *)v5, v36->baseclass_0.m_spRenderer.m_pObject);
  NiScreenElements::Draw((NiScreenElements *)v13, v36->baseclass_0.m_spRenderer.m_pObject);
  NiRenderer::EndUsingRenderTargetGroup(v36->baseclass_0.m_spRenderer.m_pObject);
  v34 = v36->baseclass_0.m_spRenderer.m_pObject;
  v29 = v34->m_eFrameState == 1;
  LoadingRate = (int)v36->baseclass_0.m_spRenderer.m_pObject;
  if ( v29
    && !v34->m_eOffScreenFrameState
    && (unsigned __int8)((int (*)(void))v34->baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)() )
    *(_DWORD *)(LoadingRate + 116) = 2;
  v35 = v36->baseclass_0.m_spRenderer.m_pObject;
  if ( v35->m_eFrameState == 2
    && !v35->m_eOffScreenFrameState
    && (unsigned __int8)((int (__thiscall *)(NiRenderer *))v35->baseclass_0.baseclass_0.vfptr[68].__vecDelDtor)(v35) )
  {
    ++v35->m_uiFrameID;
    v35->m_eFrameState = 0;
  }
  (**(void (__thiscall ***)(_DWORD))v5)(v5);
  (**(void (__cdecl ***)(_DWORD))v13)(1);
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (0045C470) --------------------------------------------------------
void __thiscall MainApp::ChangeDisplayMode(MainApp *this)
{
  MainApp *v1; // esi@1
  int v2; // eax@6
  char *v3; // eax@8
  int systemScreenWidht; // [sp+8h] [bp-4h]@6

  v1 = this;
  if ( GameFrameWork::ms_bSpawnApps == 1 )
  {
    if ( GameFrameWork::ms_bGameFrameStart )
    {
      if ( MachineOpt::ms_kGraphicOption.bWindowFullMode )
      {
        OutputDebugStringA("Window Mode");
        v1->baseclass_0.m_pkAppWindow->m_uiWidth = 1024;
        v1->baseclass_0.m_pkAppWindow->m_uiHeight = 768;
        MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1024;
        MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 768;
        MachineOpt::ms_kGraphicOption.bWindowFullMode = 0;
        MainApp::ReCreateRenderer(v1);
      }
      OutputDebugStringA("SpawnApps:detachWindow()");
      systemScreenWidht = GetSystemMetrics(0);
      v2 = GetSystemMetrics(1);
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = systemScreenWidht;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v2;
      MachineOpt::ms_kGraphicOption.bWindowFullMode = 1;
      MainApp::ReCreateRenderer(v1);
    }
    v3 = TextData2::Get(0x170AE918u);
    MsgBox::Modal(MSGBOX_OK, v3);
    CNSTimer_Interval::ReSet(&v1->m_kTimerInterval, Timer::ms_fCurTime);
    v1->m_kTimerInterval.m_fCheckTime = 1.0;
    v1->m_bChangeDisplay = 1;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A987C7: using guessed type bool GameFrameWork__ms_bGameFrameStart;
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (0045C560) --------------------------------------------------------
void __thiscall MainApp::OnIdle(MainApp *this)
{
  MainApp *v1; // esi@1
  float v2; // ST0C_4@14
  NiFrameRate *v3; // ecx@17
  CQuest *v4; // eax@19
  unsigned int v5; // edi@20
  NiRenderer *v6; // edi@22
  NiRenderer *v7; // edi@26

  v1 = this;
  if ( this->m_bChangeDisplay && CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, Timer::ms_fCurTime) )
    v1->m_bChangeDisplay = 0;
  if ( GetAsyncKeyState(13) & 0x8000 && GetAsyncKeyState(18) & 0x8000 && !v1->m_bChangeDisplay )
    MainApp::ChangeDisplayMode(v1);
  if ( !v1->m_pkNetMarbleLogo )
  {
    if ( GameFrameWork::ms_bWindowSizeChanged )
    {
      GameFrameWork::ms_bWindowSizeChanged = 0;
      MainApp::ReCreateRenderer(v1);
    }
    if ( AccountFrameWork::ms_bWindowSizeChanged )
    {
      AccountFrameWork::ms_bWindowSizeChanged = 0;
      MainApp::ReCreateRenderer(v1);
    }
    if ( v1->baseclass_0.vfptr->MeasureTime((NiApplication *)v1) )
    {
      v2 = v1->baseclass_0.m_fCurrentTime;
      Timer::ms_fOldTime = Timer::ms_fCurTime;
      Timer::ms_fCurTime = v2;
      Timer::ms_fDeltaTime = v2 - Timer::ms_fOldTime;
      if ( v1->m_bEnableInput )
        v1->baseclass_0.vfptr->UpdateInput((NiApplication *)v1);
      v1->baseclass_0.vfptr->ProcessInput((NiApplication *)v1);
      Cursor::Update(Timer::ms_fCurTime);
      if ( v1->baseclass_0.m_bFrameRateEnabled )
      {
        v3 = v1->baseclass_0.m_pkFrameRate;
        if ( v3 )
        {
          NiFrameRate::TakeSample(v3);
          NiFrameRate::Update(v1->baseclass_0.m_pkFrameRate);
        }
      }
      NetMgr::Update(&g_kNetMgr, Timer::ms_fCurTime);
      PgFrameMgr::Update(&Pgg_kFrameMgr, Timer::ms_fCurTime);
      v4 = QuestDataMgr::GetQuest();
      v4->vfptr->QuestPlayer_TimeProcess(v4);
      if ( !MainApp::IsSkipDraw(v1, Timer::ms_fCurTime) )
      {
        v5 = NiRenderer::ms_pkRenderer[9].m_kPrecacheCriticalSection.m_uiLockCount;
        if ( v5 != v1->m_dwResetCounter )
        {
          Cursor::OnResetDevice();
          PortraitTextureBuffer::Terminate();
          v1->m_dwResetCounter = v5;
        }
        ((void (__stdcall *)(_DWORD))v1->baseclass_0.m_spRenderer.m_pObject->baseclass_0.baseclass_0.vfptr[20].__vecDelDtor)(&unk_B30C14);
        v6 = v1->baseclass_0.m_spRenderer.m_pObject;
        if ( !v6->m_eFrameState
          && !v6->m_eOffScreenFrameState
          && (unsigned __int8)((int (__thiscall *)(_DWORD))v6->baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)(v1->baseclass_0.m_spRenderer.m_pObject) )
          v6->m_eFrameState = 1;
        NiRenderer::BeginUsingDefaultRenderTargetGroup(v1->baseclass_0.m_spRenderer.m_pObject, 7u);
        PgFrameMgr::Draw(&Pgg_kFrameMgr);
        Cursor::Draw();
        NiRenderer::EndUsingRenderTargetGroup(v1->baseclass_0.m_spRenderer.m_pObject);
        v7 = v1->baseclass_0.m_spRenderer.m_pObject;
        if ( v7->m_eFrameState == 1
          && !v7->m_eOffScreenFrameState
          && (unsigned __int8)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)(v1->baseclass_0.m_spRenderer.m_pObject) )
          v7->m_eFrameState = 2;
        NiRenderer::DisplayFrame(v1->baseclass_0.m_spRenderer.m_pObject);
        ++v1->baseclass_0.m_iClicks;
      }
      if ( Pgg_kFrameMgr.m_bQuit )
        NiApplication::QuitApplication(&v1->baseclass_0);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97640: using guessed type float Timer__ms_fDeltaTime;
// A97644: using guessed type float Timer__ms_fOldTime;
// A98290: using guessed type bool AccountFrameWork__ms_bWindowSizeChanged;
// A987C5: using guessed type bool GameFrameWork__ms_bWindowSizeChanged;

//----- (0045C7B0) --------------------------------------------------------
bool __thiscall MainApp::CheckSpawnApps(MainApp *this)
{
  int v1; // ebx@1
  void *v2; // eax@3
  ItemMallInfo *v3; // eax@4
  ItemMallInfo *v4; // esi@4
  int v5; // eax@7
  tagItemMallFileData *v6; // eax@9
  tagItemMallFileData *v7; // edi@9
  int v8; // eax@10
  char v9; // cl@11
  int v10; // eax@14
  char v11; // cl@15
  int v12; // eax@20
  char v13; // cl@21
  const char *v14; // eax@22
  int MaxURLNum; // [sp+0h] [bp-11Ch]@7
  ItemMallInfo *v17; // [sp+4h] [bp-118h]@4
  char acPathName[260]; // [sp+8h] [bp-114h]@1
  unsigned int v19; // [sp+10Ch] [bp-10h]@1
  int v20; // [sp+118h] [bp-4h]@3
  int v21; // [sp+11Ch] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v1 = 0;
  memset(acPathName, 0, 0x104u);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sFiesta.ini");
  GameFrameWork::ms_bSpawnApps = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &GameFrameWork::ms_strLauncher,
    "Original",
    8u);
  v2 = operator new(0x2224u);
  v20 = 0;
  if ( v2 )
  {
    ItemMallInfo::ItemMallInfo((ItemMallInfo *)v2);
    v4 = v3;
    v17 = v3;
  }
  else
  {
    v17 = 0;
    v4 = 0;
  }
  v20 = -1;
  if ( !v4 )
    return 0;
  ItemMallInfo::LoadFromFile(v4, acPathName);
  v5 = ItemMallInfo::GetTotalURLNum(v4, 0);
  MaxURLNum = v5;
  if ( v5 == -1 || v5 < 0 )
    goto LABEL_25;
  while ( 1 )
  {
    v6 = ItemMallInfo::GetData(v4, 0, v1);
    v7 = v6;
    if ( v6 )
      break;
LABEL_18:
    ++v1;
    if ( v1 > MaxURLNum )
      goto LABEL_25;
  }
  v8 = (int)v6->Path;
  do
    v9 = *(_BYTE *)v8++;
  while ( v9 );
  if ( !strncmp(v7->Path, "Original", v8 - (_DWORD)((char *)v7 + 9)) )
  {
    OutputDebugStringA("SpawnApps Off.");
LABEL_17:
    v4 = v17;
    goto LABEL_18;
  }
  v10 = (int)v7->Path;
  do
    v11 = *(_BYTE *)v10++;
  while ( v11 );
  if ( (char *)v10 == &v7->Path[1] )
    goto LABEL_17;
  v12 = (int)v7->Path;
  GameFrameWork::ms_bSpawnApps = 1;
  GameFrameWork::ms_bFirstRun = 1;
  do
    v13 = *(_BYTE *)v12++;
  while ( v13 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &GameFrameWork::ms_strLauncher,
    v7->Path,
    v12 - (_DWORD)((char *)v7 + 9));
  v14 = *(const char **)&GameFrameWork::ms_strLauncher;
  if ( GameFrameWork::ms_strLauncher.baseclass_0._Myres < 0x10 )
    v14 = (const char *)&GameFrameWork::ms_strLauncher;
  OutputDebugStringA(v14);
  v4 = v17;
  MachineOpt::ms_kGraphicOption.bWindowFullMode = 0;
LABEL_25:
  ItemMallInfo::_ItemMallInfo(v4);
  operator delete(v4);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;
// A987CD: using guessed type bool GameFrameWork__ms_bFirstRun;

//----- (0045C990) --------------------------------------------------------
void __cdecl SetupExceptionHandler()
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v0; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > AppName; // [sp+0h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > AppVersion; // [sp+1Ch] [bp-2Ch]@1
  unsigned int v3; // [sp+38h] [bp-10h]@1
  int v4; // [sp+44h] [bp-4h]@1
  int v5; // [sp+48h] [bp+0h]@1

  v3 = (unsigned int)&v5 ^ __security_cookie;
  AppName.baseclass_0._Myres = 15;
  AppName.baseclass_0._Mysize = 0;
  AppName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&AppName, "EU", 2u);
  v4 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&AppName, "_Release ", 9u);
  AppVersion.baseclass_0._Myres = 15;
  AppVersion.baseclass_0._Mysize = 0;
  AppVersion.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&AppVersion, &AppName, 0, 0xFFFFFFFFu);
  LOBYTE(v4) = 1;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&AppVersion, "Aug 21 2017", 0xBu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&AppVersion, " ", 1u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&AppVersion, "16:31:40", 8u);
  BT_InstallSehFilter();
  BT_SetAppName("FiestaOnline");
  v0 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&AppVersion;
  if ( AppVersion.baseclass_0._Myres < 0x10 )
    v0 = &AppVersion;
  BT_SetAppVersion(v0);
  BT_SetSupportServer("46.253.154.134", 9010);
  BT_SetFlags(41);
  if ( AppVersion.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&AppVersion);
  AppVersion.baseclass_0._Myres = 15;
  AppVersion.baseclass_0._Mysize = 0;
  AppVersion.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( AppName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&AppName);
}
// 976000: using guessed type int __stdcall BT_SetAppVersion(_DWORD);
// 976004: using guessed type int __stdcall BT_SetFlags(_DWORD);
// 976008: using guessed type int __stdcall BT_SetSupportServer(_DWORD, _DWORD);
// 97600C: using guessed type int __stdcall BT_SetAppName(_DWORD);
// 976010: using guessed type int __stdcall BT_InstallSehFilter();
// A85C00: using guessed type int __security_cookie;

//----- (0045CAC0) --------------------------------------------------------
void __thiscall MainApp::MainApp(MainApp *this)
{
  MainApp *v1; // esi@1
  int v2; // eax@3
  unsigned int v3; // edi@3
  unsigned __int8 v4; // ST33_1@3
  int v5; // edi@4
  int v6; // eax@5
  bool v7; // zf@5
  NiUnsharedGeometryGroup *v8; // ecx@6
  int v9; // [sp+4h] [bp-209Ch]@3
  CPData kCpData; // [sp+Ch] [bp-2094h]@1
  unsigned int v11; // [sp+2090h] [bp-10h]@1
  int v12; // [sp+209Ch] [bp-4h]@1
  int v13; // [sp+20A0h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  NiApplication::NiApplication(&this->baseclass_0, "FiestaOnline", 0x400u, 0x300u, 0, 0, 0);
  v12 = 0;
  v1->baseclass_0.vfptr = (NiApplicationVtbl *)&MainApp::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  PgImeCtrl::PgImeCtrl(&v1->m_kImeCtrl);
  v1->m_SplashTexName.baseclass_0._Myres = 15;
  v1->m_SplashTexName.baseclass_0._Mysize = 0;
  v1->m_SplashTexName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_ProgressBarTexName.baseclass_0._Myres = 15;
  v1->m_ProgressBarTexName.baseclass_0._Mysize = 0;
  v1->m_ProgressBarTexName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v12) = 3;
  CreateThread(0, 0, (LPTHREAD_START_ROUTINE)cAntiCheat::EnumCheck, 0, 0, 0);
  CreateThread(0, 0, (LPTHREAD_START_ROUTINE)cAntiCheat::CRCCheck, 0, 0, 0);
  SetupExceptionHandler();
  if ( InitAnalyzeArgument(&kCpData) )
  {
    *(_QWORD *)&g_kServer.m_kLoginAddr.m_kAddr.n4_name[8] = 0i64;
    *(_QWORD *)&g_kServer.m_kLoginAddr.m_kAddr.n4_name[0] = 0i64;
    strncpy(g_kServer.m_kLoginAddr.m_kAddr.n4_name, kCpData.ServIP, 0x10u);
    g_kServer.m_kLoginAddr.m_iPort = kCpData.ServPort;
  }
  v2 = rand() % 100 + 1;
  v3 = (unsigned __int8)v2;
  v4 = v2;
  v9 = (unsigned __int8)v2;
  MainApp::st_pbyDummyMemory = operator new__((unsigned __int8)v2);
  memset((char *)MainApp::st_pbyDummyMemory, 0, v3);
  if ( v4 > 0u )
  {
    v5 = 0;
    do
    {
      v6 = rand();
      ++v5;
      v7 = v9-- == 1;
      *((_BYTE *)MainApp::st_pbyDummyMemory + v5 - 1) = v6 % 255;
    }
    while ( !v7 );
  }
  v1->m_fOldDrawTime = 0.0;
  *(_WORD *)&v1->m_bUseFoption = 0;
  v1->m_bUseWinoption = 0;
  v1->baseclass_0.m_bRendererDialog = 0;
  v1->baseclass_0.m_bExclusiveMouse = 0;
  v1->m_bEnableInput = 1;
  enable_sperror(1);
  enable_spcritical(1);
  EnumDisplaySettingsA(0, 0xFFFFFFFEu, &v1->m_SaveMode);
  MainApp::ProcessCommandLineBeforInit(v1);
  MainApp::SetupWindow(v1);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate(v8);
  v1->m_dwResetCounter = 0;
  v1->m_pkNetMarbleLogo = 0;
  InitWebCtrl();
  v1->m_bChangeDisplay = 0;
}
// 45CAC0: could not find valid save-restore pair for ebx
// 45CAC0: could not find valid save-restore pair for edi
// 45CAC0: could not find valid save-restore pair for esi
// 98649C: using guessed type int (__thiscall *MainApp___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0045CCD0) --------------------------------------------------------
bool __thiscall MainApp::Initialize(MainApp *this)
{
  MainApp *v1; // esi@1
  char *v2; // eax@3
  char *v4; // eax@8
  char *v5; // eax@12
  HWND__ *v6; // edi@14
  LONG v7; // eax@14
  char *v8; // eax@17
  char *v9; // eax@19
  const char *v10; // ebx@19
  const char *v11; // edi@19
  const char *v12; // ecx@20
  const char *v13; // eax@23
  const char *v14; // ecx@37
  const char *v15; // eax@40
  const char *v16; // ecx@45
  const char *v17; // eax@48
  const char *v18; // ecx@55
  const char *v19; // eax@58
  NiAppWindow *v20; // eax@66
  float v21; // ST10_4@66
  float v22; // ST0C_4@66
  bool v23; // zf@80
  NiRenderer *v24; // ecx@83
  void *v25; // eax@83
  int v26; // eax@84
  int v27; // edi@84
  NiRenderer *v28; // ecx@88
  NiImageConverter *v29; // esi@88
  void *v30; // eax@89
  unsigned int v31; // eax@90
  unsigned int v32; // ST10_4@92
  void *(__thiscall *v33)(NiRefObject *, unsigned int); // eax@92
  char *v34; // eax@93
  char *v35; // ST10_4@93
  CDataDocument *v36; // eax@93
  const char *v37; // ebx@93
  char *v38; // esi@94
  unsigned int v39; // eax@94
  void *v40; // edi@94
  char v41; // cl@95
  LuaScriptMgr *v42; // eax@101
  char *v43; // [sp+8h] [bp-23Ch]@26
  float v44; // [sp+1Ch] [bp-228h]@83
  __int64 seed; // [sp+20h] [bp-224h]@66
  float v46; // [sp+28h] [bp-21Ch]@83
  _WIN32_FIND_DATAA FindData; // [sp+2Ch] [bp-218h]@96
  tagRECT kRect; // [sp+16Ch] [bp-D8h]@80
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > SplashTexName; // [sp+17Ch] [bp-C8h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ProgressBarTexName; // [sp+198h] [bp-ACh]@15
  char acFullPath[128]; // [sp+1B4h] [bp-90h]@94
  unsigned int v52; // [sp+234h] [bp-10h]@1
  int v53; // [sp+240h] [bp-4h]@15
  int v54; // [sp+244h] [bp+0h]@1

  v52 = (unsigned int)&v54 ^ __security_cookie;
  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSystem, "TextData.shn");
  if ( !ITableBase<TextDataType_TextData>::Load(v2, 1) )
  {
    MainApp::InitError("Text Data Initialize Fail!");
    return 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acSystem, "TextData2.shn");
  if ( !ITableBase<TextDataType2_TextData2>::Load(v4, 1) )
  {
    MainApp::InitError("Text Data2 Initialize Fail!");
    return 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acSystem, "TextData3.shn");
  if ( !ITableBase<TextDataType3_TextData3>::Load(v5, 1) )
  {
    MainApp::InitError("Text Data3 Initialize Fail!");
    return 0;
  }
  v6 = v1->baseclass_0.m_pkAppWindow->m_pWnd;
  v7 = (LONG)LoadIconA(NiApplication::ms_pInstance, (LPCSTR)5);
  SetClassLongA(v6, -14, v7);
  if ( !NiApplication::Initialize(&v1->baseclass_0) )
    return 0;
  SplashTexName.baseclass_0._Myres = 15;
  SplashTexName.baseclass_0._Mysize = 0;
  SplashTexName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v53 = 0;
  ProgressBarTexName.baseclass_0._Myres = 15;
  ProgressBarTexName.baseclass_0._Mysize = 0;
  ProgressBarTexName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v53) = 1;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "loading\\NowLoading.TGA");
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&SplashTexName, v8, strlen(v8));
  if ( !Folder::m_bInit )
    Folder::Init();
  v9 = Folder::Merge(&Folder::m_acMenu, "loading\\ProgressBar.tga");
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ProgressBarTexName, v9, strlen(v9));
  v10 = (const char *)&v1->m_SplashTexName;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v1->m_SplashTexName,
    &SplashTexName,
    0,
    0xFFFFFFFFu);
  v11 = (const char *)&v1->m_ProgressBarTexName;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v1->m_ProgressBarTexName,
    &ProgressBarTexName,
    0,
    0xFFFFFFFFu);
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres < 0x10 )
    v12 = (const char *)&v1->m_ProgressBarTexName;
  else
    v12 = *(const char **)v11;
  if ( v1->m_SplashTexName.baseclass_0._Myres < 0x10 )
    v13 = (const char *)&v1->m_SplashTexName;
  else
    v13 = *(const char **)v10;
  MainApp::DisplaySplash(v1, v13, v12, 10);
  Char::SetDefWalkSpeed(60.0);
  Char::SetDefRunSpeed(115.0);
  if ( !PgInitInstance() )
  {
    v43 = "PgInstance Initialize Fail!";
LABEL_27:
    MainApp::InitError(v43);
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&ProgressBarTexName);
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&SplashTexName);
    return 0;
  }
  if ( !MainApp::InitAppHandle(v1) )
  {
    v43 = "AppHandle Initialize Fail!";
    goto LABEL_27;
  }
  if ( !MainApp::InitInput(v1) )
  {
    v43 = "Input Initialize Fail!";
    goto LABEL_27;
  }
  if ( !Font::Init() )
  {
    v43 = "Font Initialize Fail!";
    goto LABEL_27;
  }
  if ( !NetMgr::Init(&g_kNetMgr) )
  {
    v43 = "Network Initialize Fail!";
    goto LABEL_27;
  }
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres < 0x10 )
    v14 = (const char *)&v1->m_ProgressBarTexName;
  else
    v14 = *(const char **)v11;
  if ( v1->m_SplashTexName.baseclass_0._Myres < 0x10 )
    v15 = (const char *)&v1->m_SplashTexName;
  else
    v15 = *(const char **)v10;
  MainApp::DisplaySplash(v1, v15, v14, 20);
  if ( !MainApp::InitGameData(v1) )
  {
    v43 = "Game Data Initialize Fail!";
    goto LABEL_27;
  }
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres < 0x10 )
    v16 = (const char *)&v1->m_ProgressBarTexName;
  else
    v16 = *(const char **)v11;
  if ( v1->m_SplashTexName.baseclass_0._Myres < 0x10 )
    v17 = (const char *)&v1->m_SplashTexName;
  else
    v17 = *(const char **)v10;
  MainApp::DisplaySplash(v1, v17, v16, 70);
  if ( !CharMgr::Init(&g_kCharMgr) )
  {
    v43 = "Character Manager Initialize Fail!";
    goto LABEL_27;
  }
  if ( !CharResMgr::Init(&g_kCharResMgr) )
  {
    v43 = "Character Resource Manager Initialize Fail!";
    goto LABEL_27;
  }
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres < 0x10 )
    v18 = (const char *)&v1->m_ProgressBarTexName;
  else
    v18 = *(const char **)v11;
  if ( v1->m_SplashTexName.baseclass_0._Myres < 0x10 )
    v19 = (const char *)&v1->m_SplashTexName;
  else
    v19 = *(const char **)v10;
  MainApp::DisplaySplash(v1, v19, v18, 90);
  if ( !MapObjMgr::Init(&g_kMapObjMgr) )
  {
    v43 = "Map Object Manager Initialize Fail!";
    goto LABEL_27;
  }
  if ( !DropItemMgr::Init(&g_kDropItemMgr) )
  {
    v43 = "DropItem Manager Initialize Fail!";
    goto LABEL_27;
  }
  if ( !MenuTexMgr::Init() )
  {
    v43 = "Menu Texture Manager Initialize Fail!";
    goto LABEL_27;
  }
  v20 = v1->baseclass_0.m_pkAppWindow;
  v21 = (double)v20->m_uiHeight;
  HIDWORD(seed) = v20->m_uiWidth;
  v22 = (double)HIDWORD(seed);
  if ( !World::Init(&g_kWorld, v22, v21) )
  {
    v43 = "World Initialize Fail!";
    goto LABEL_27;
  }
  if ( !Engine3D::Init(pkCamera) )
  {
    v43 = "Engine3D Initialize Fail!";
    goto LABEL_27;
  }
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres >= 0x10 )
    v11 = *(const char **)v11;
  if ( v1->m_SplashTexName.baseclass_0._Myres >= 0x10 )
    v10 = *(const char **)v10;
  MainApp::DisplaySplash(v1, v10, v11, 100);
  SoundMgr::Init(&g_kSoundMgr);
  LoadSoundOption();
  if ( !EffectMgr::Init(&g_kEffectMgr) )
  {
    v43 = "Effect Initialize Fail!";
    goto LABEL_27;
  }
  if ( !ScreenBDMgr::Init(&g_kScrnBDMgr) )
  {
    v43 = "Speech Initialize Fail!";
    goto LABEL_27;
  }
  if ( !TextEffMgr::Init(&g_kTextEffMgr) )
  {
    v43 = "Text Effect Initialize Fail!";
    goto LABEL_27;
  }
  v1->m_dwStyle = GetWindowLongA(v1->baseclass_0.m_pkAppWindow->m_pWnd, -16);
  GetWindowRect(v1->baseclass_0.m_pkAppWindow->m_pRenderWnd, &kRect);
  v23 = v1->baseclass_0.m_bRendererDialog == 0;
  v1->m_uiStartHeight = kRect.bottom - kRect.top;
  if ( v23 && MachineOpt::ms_kGraphicOption.bWindowFullMode )
    MainApp::ReCreateRenderer(v1);
  v46 = v1->baseclass_0.m_fCurrentTime;
  seed = (signed __int64)(v46 * 1000.0);
  srand((signed __int64)(v46 * 1000.0));
  v24 = v1->baseclass_0.m_spRenderer.m_pObject;
  v44 = 1.0;
  *(float *)&seed = 0.0;
  *((float *)&seed + 1) = 1.0;
  ((void (__stdcall *)(float *))v24->baseclass_0.baseclass_0.vfptr[20].__vecDelDtor)(&v44);
  v25 = operator new(0x34u);
  HIDWORD(seed) = v25;
  LOBYTE(v53) = 2;
  if ( v25 )
  {
    NiAlphaAccumulator::NiAlphaAccumulator((NiAlphaAccumulator *)v25);
    v27 = v26;
  }
  else
  {
    v27 = 0;
  }
  HIDWORD(seed) = v27;
  if ( v27 )
    InterlockedIncrement((volatile LONG *)(v27 + 4));
  v28 = v1->baseclass_0.m_spRenderer.m_pObject;
  LOBYTE(v53) = 3;
  NiRenderer::SetSorter(v28, (NiAccumulator *)v27);
  PgFrameMgr::RegisterAllFrameWork(&Pgg_kFrameMgr);
  v1->m_kStartFrameWorkID = AccountFrameWorkID;
  MainApp::CheckSpawnApps(v1);
  MainApp::ProcessCommandLine(v1);
  v29 = NiImageConverter::GetImageConverter();
  if ( v29 )
  {
    v30 = operator new(0xB0u);
    LODWORD(v46) = v30;
    LOBYTE(v53) = 4;
    if ( v30 )
      NiPNGReader::NiPNGReader((NiPNGReader *)v30);
    else
      v31 = 0;
    v32 = v31;
    v33 = v29->baseclass_0.vfptr[13].__vecDelDtor;
    LOBYTE(v53) = 3;
    v33(&v29->baseclass_0, v32);
  }
  World::SetCameraZoomRatePerTick(&g_kWorld, 0.001);
  World::SetCameraZoomMin(&g_kWorld, 40.0);
  World::SetCameraZoomMax(&g_kWorld, 360.0);
  World::SetCameraZoomDef(&g_kWorld, 280.0);
  CPostProcessEffectManager::GetInstance();
  v34 = Folder::Main();
  v35 = Folder::Merge(v34, "Default.conf");
  v36 = CDataDocument::Instance();
  CDataDocument::Load(v36, v35);
  PgFrameMgr::Start(&Pgg_kFrameMgr, AccountFrameWorkID, 0);
  MaskShader::GetShader();
  MaskShader::GetShader_NoAlphaBlend();
  v37 = (const char *)&"BGM_BrightField01.mp3";
  do
  {
    v38 = fs("%s");
    Folder::Sound();
    sprintf(acFullPath, "%s");
    v39 = strlen(v38) + 1;
    v40 = &ProgressBarTexName.baseclass_0._Alval + 3;
    do
    {
      v41 = *((_BYTE *)v40 + 1);
      v40 = (char *)v40 + 1;
    }
    while ( v41 );
    memcpy(v40, v38, v39);
    if ( FindFirstFileA(acFullPath, &FindData) != (HANDLE)-1 && !strcmp(FindData.cFileName, v37) )
    {
      SetFileAttributesA(acFullPath, 0x80u);
      if ( !DeleteFileA(acFullPath) )
        DeleteFileA(acFullPath);
    }
    v37 += 64;
  }
  while ( (signed int)v37 < (signed int)&BlockedData_0 );
  v42 = Singleton<LuaScriptMgr>::getInstance();
  LuaScriptMgr::Init(v42);
  LOBYTE(v53) = 1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&seed + 1);
  std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&ProgressBarTexName);
  std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&SplashTexName);
  return 1;
}
// A76448: using guessed type char (*_RemoveBGMFile)[64];
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0045D4C0) --------------------------------------------------------
NiApplication *__cdecl NiApplication::Create()
{
  NiApplication *result; // eax@2
  void *v1; // eax@3

  if ( MainApp::CheckWindowLocale() )
  {
    v1 = operator new(0xD90u);
    if ( v1 )
    {
      MainApp::MainApp((MainApp *)result);
      MainApp::ms_pkMainApp = (int)result;
    }
    else
    {
      result = 0;
      MainApp::ms_pkMainApp = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97DE4: using guessed type int MainApp__ms_pkMainApp;

//----- (0045D550) --------------------------------------------------------
LuaScriptMgr *__cdecl Singleton<LuaScriptMgr>::getInstance()
{
  LuaScriptMgr *result; // eax@1
  void *v1; // eax@2

  result = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
  if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    v1 = operator new(0x14u);
    if ( v1 )
    {
      LuaScriptMgr::LuaScriptMgr(result);
      LODWORD(Singleton<LuaScriptMgr>::m_pInstance) = result;
    }
    else
    {
      result = 0;
      LODWORD(Singleton<LuaScriptMgr>::m_pInstance) = 0;
    }
  }
  return result;
}

//----- (0045D5D0) --------------------------------------------------------
char *__cdecl Folder::Sound()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return &Folder::m_acSound;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0045D5F0) --------------------------------------------------------
void __thiscall NiTexturingProperty::SetBaseClampMode(NiTexturingProperty *this, NiTexturingProperty::ClampMode eMode)
{
  NiTexturingProperty *v2; // edi@1
  NiTexturingProperty::Map *v3; // eax@1
  void *v4; // eax@2
  void *v5; // eax@3
  void *v6; // esi@5
  void *pkBaseMap; // [sp+0h] [bp-10h]@2
  int v8; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = *this->m_kMaps.m_pBase;
  if ( v3 )
  {
    v3->m_eClamp = eMode;
  }
  else
  {
    v4 = operator new(0x18u);
    pkBaseMap = v4;
    v8 = 0;
    if ( v4 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v4);
    else
      v5 = 0;
    v6 = v5;
    pkBaseMap = v5;
    NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)&v2->m_kMaps, 0, (NiVBChip *const *)&pkBaseMap);
    *((_DWORD *)v6 + 2) = eMode;
  }
}

//----- (0045D690) --------------------------------------------------------
void __thiscall Server::SetLoginAddr(Server *this, char *pcAddr)
{
  *(_QWORD *)&this->m_kLoginAddr.m_kAddr.n4_name[8] = 0i64;
  *(_QWORD *)&this->m_kLoginAddr.m_kAddr.n4_name[0] = 0i64;
  strncpy(this->m_kLoginAddr.m_kAddr.n4_name, pcAddr, 0x10u);
}

//----- (0045D6C0) --------------------------------------------------------
bool __thiscall NiRenderer::BeginUsingDefaultRenderTargetGroup(NiRenderer *this, unsigned int uiClearMode)
{
  NiRenderer *v2; // esi@1
  bool result; // al@4
  NiRenderTargetGroup *v4; // eax@5

  v2 = this;
  if ( this->m_eFrameState != 1 && this->m_eOffScreenFrameState != 1 || this->m_bRenderTargetGroupActive )
  {
    result = 0;
  }
  else
  {
    v4 = (NiRenderTargetGroup *)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[26].__vecDelDtor)();
    result = NiRenderer::BeginUsingRenderTargetGroup(v2, v4, uiClearMode);
  }
  return result;
}

//----- (0045D700) --------------------------------------------------------
void *__thiscall TextData::_vector_deleting_destructor_(TextData *this, unsigned int a2)
{
  TextData *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<TextDataType,TextData>Vtbl *)&ITableBase<TextDataType_TextData>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 986430: using guessed type int (__cdecl *ITableBase_TextDataType_TextData____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0045D780) --------------------------------------------------------
void *__thiscall TextData2::_scalar_deleting_destructor_(TextData2 *this, unsigned int a2)
{
  TextData2 *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<TextDataType2,TextData2>Vtbl *)&ITableBase<TextDataType2_TextData2>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 986440: using guessed type int (__cdecl *ITableBase_TextDataType2_TextData2____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0045D800) --------------------------------------------------------
void *__thiscall TextData3::_scalar_deleting_destructor_(TextData3 *this, unsigned int a2)
{
  TextData3 *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<TextDataType3,TextData3>Vtbl *)&ITableBase<TextDataType3_TextData3>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 986450: using guessed type int (__cdecl *ITableBase_TextDataType3_TextData3____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0045D880) --------------------------------------------------------
void __thiscall TextData::TextData(TextData *this)
{
  TextData *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<TextDataType,TextData>Vtbl *)&ITableBase<TextDataType_TextData>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_TextDataType_TextData_::ITableBase_TextDataType_TextData__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<TextDataType,TextData>Vtbl *)TextData::_vftable_;
}
// 986430: using guessed type int (__cdecl *ITableBase_TextDataType_TextData____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 98646C: using guessed type int (*TextData___vftable_[2])();
// A97DEC: using guessed type int _local static guard_;

//----- (0045D8C0) --------------------------------------------------------
void __thiscall TextData2::TextData2(TextData2 *this)
{
  TextData2 *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<TextDataType2,TextData2>Vtbl *)&ITableBase<TextDataType2_TextData2>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_TextDataType2_TextData2_::ITableBase_TextDataType2_TextData2__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<TextDataType2,TextData2>Vtbl *)TextData2::_vftable_;
}
// 986440: using guessed type int (__cdecl *ITableBase_TextDataType2_TextData2____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 98647C: using guessed type int (*TextData2___vftable_[2])();
// A97DF0: using guessed type int _local static guard_;

//----- (0045D900) --------------------------------------------------------
void __thiscall TextData3::TextData3(TextData3 *this)
{
  TextData3 *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<TextDataType3,TextData3>Vtbl *)&ITableBase<TextDataType3_TextData3>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_TextDataType3_TextData3_::ITableBase_TextDataType3_TextData3__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<TextDataType3,TextData3>Vtbl *)TextData3::_vftable_;
}
// 986450: using guessed type int (__cdecl *ITableBase_TextDataType3_TextData3____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 98648C: using guessed type int (*TextData3___vftable_[2])();
// A97DF4: using guessed type int _local static guard_;

//----- (0045D940) --------------------------------------------------------
bool __cdecl ITableBase<TextDataType_TextData>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<TextDataType_TextData>::ms_pkTable;
  if ( !ITableBase<TextDataType_TextData>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      TextData::TextData((TextData *)v2);
    else
      v2 = 0;
    ITableBase<TextDataType_TextData>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<TextDataType_TextData>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<TextDataType_TextData>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 385 )
  {
    v5 = acFn;
    v6 = ITableBase<TextDataType_TextData>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<TextDataType_TextData>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94350: using guessed type int ITableBase_TextDataType_TextData___ms_pkTable;

//----- (0045DA20) --------------------------------------------------------
bool __cdecl ITableBase<TextDataType2_TextData2>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<TextDataType2_TextData2>::ms_pkTable;
  if ( !ITableBase<TextDataType2_TextData2>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      TextData2::TextData2((TextData2 *)v2);
    else
      v2 = 0;
    ITableBase<TextDataType2_TextData2>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 385 )
  {
    v5 = acFn;
    v6 = ITableBase<TextDataType2_TextData2>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<TextDataType2_TextData2>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94344: using guessed type int ITableBase_TextDataType2_TextData2___ms_pkTable;

//----- (0045DB00) --------------------------------------------------------
bool __cdecl ITableBase<TextDataType3_TextData3>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<TextDataType3_TextData3>::ms_pkTable;
  if ( !ITableBase<TextDataType3_TextData3>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      TextData3::TextData3((TextData3 *)v2);
    else
      v2 = 0;
    ITableBase<TextDataType3_TextData3>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<TextDataType3_TextData3>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<TextDataType3_TextData3>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 385 )
  {
    v5 = acFn;
    v6 = ITableBase<TextDataType3_TextData3>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<TextDataType3_TextData3>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94340: using guessed type int ITableBase_TextDataType3_TextData3___ms_pkTable;

//----- (0045DBE0) --------------------------------------------------------
void *__thiscall MainApp::_scalar_deleting_destructor_(MainApp *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MainApp::_MainApp(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0045DC10) --------------------------------------------------------
bool __cdecl MainApp::CheckWindowLocale()
{
  return 1;
}

//----- (0045DC20) --------------------------------------------------------
void __usercall SetImeNativeModeFalse(HWND__ *hWnd<edi>)
{
  HIMC__ *v1; // esi@1
  HWND__ *v2; // [sp+0h] [bp-8h]@0

  v1 = ImmGetContext(v2);
  ImmNotifyIME(v1, 0x15u, 4u, 0);
  ImmNotifyIME(v1, 0x11u, 0, 0);
  ImmReleaseContext(hWnd, v1);
}

//----- (0045DC50) --------------------------------------------------------
bool __thiscall MainApp::OnIme(MainApp *this, NiEventRecord *pEventRecord)
{
  unsigned int v2; // edx@1
  bool result; // al@1
  unsigned int v4; // edx@3
  HWND__ *v5; // edi@5
  HIMC__ *v6; // esi@5

  v2 = pEventRecord->uiMsg;
  result = 0;
  if ( v2 == 269 || v2 == 642 && ((v4 = pEventRecord->wParam, v4 == 6) || v4 == 8) )
  {
    v5 = pEventRecord->hWnd;
    v6 = ImmGetContext(pEventRecord->hWnd);
    ImmNotifyIME(v6, 0x15u, 4u, 0);
    ImmNotifyIME(v6, 0x11u, 0, 0);
    ImmReleaseContext(v5, v6);
    result = 1;
  }
  return result;
}

//----- (0045DCB0) --------------------------------------------------------
bool __cdecl WeaponTitleTab::Load(char *pcFn)
{
  return CWeaponTitle::Read(&WeaponTitleTab::ms_kTab, pcFn, 0x6C0u, 0x40u) != 0;
}

//----- (0045DCD0) --------------------------------------------------------
bool __thiscall MainApp::OnWindowDestroy(MainApp *this, HWND__ *pWnd, bool bOption)
{
  return NiApplication::OnWindowDestroy(&this->baseclass_0, pWnd, bOption);
}

//----- (0045DCE0) --------------------------------------------------------
void __cdecl MainApp::InitError(char *pcErrMsg)
{
  MessageBoxA(0, pcErrMsg, "Application Initialize Error!", 0x10u);
}

//----- (0045DD10) --------------------------------------------------------
bool __thiscall MainApp::IsSkipDraw(MainApp *this, float fCurTime)
{
  return 0;
}

//----- (0045DD20) --------------------------------------------------------
void __thiscall MainApp::TerminateGameData(MainApp *this)
{
  ShortCutMgr::Terminate(&g_kShortCutMgr);
  Inventory::Clear(&g_kInventory);
  Inventory::ClearMiniHouse(&g_kInventory);
  Inventory::ClearMiniHouseAllItemInv(&g_kInventory);
  IconMgr::Terminate();
  ActionInfoTable::Terminate();
  Skill::Terminate();
}

//----- (0045DD60) --------------------------------------------------------
void __thiscall MainApp::OnWindowActivate(MainApp *this, HDC__ *pDrawContext, bool bActivate)
{
  if ( bActivate )
  {
    if ( EditWin::ms_pkCurEditWin )
      EditWin::Recover_focus((EditWin *)EditWin::ms_pkCurEditWin);
  }
}

//----- (0045DD80) --------------------------------------------------------
bool __thiscall MainApp::InitAppHandle(MainApp *this)
{
  NiAppWindow *v1; // eax@1
  HWND__ *v2; // ecx@2
  bool result; // al@2
  HWND__ *v4; // ecx@3

  v1 = this->baseclass_0.m_pkAppWindow;
  if ( this->baseclass_0.m_bFullscreen )
  {
    v2 = v1->m_pWnd;
    result = 1;
    g_hMainInstance = NiApplication::ms_pInstance;
    g_hMainWnd = v2;
  }
  else
  {
    v4 = v1->m_pRenderWnd;
    result = 1;
    g_hMainInstance = NiApplication::ms_pInstance;
    g_hMainWnd = v4;
  }
  return result;
}

//----- (0045DDC0) --------------------------------------------------------
void __thiscall MainApp::ProcessCommandLineBeforInit(MainApp *this)
{
  signed int v1; // eax@1
  char *v2; // edi@4
  char *v3; // esi@4
  int v4; // edx@13
  char *v5; // ecx@13
  bool v6; // cf@14
  char v7; // al@16
  int v8; // eax@18
  void *v9; // eax@24
  int v10; // eax@25
  char *v11; // eax@35
  char v12; // cl@36
  char *v13; // eax@41
  char v14; // cl@42
  char *v15; // eax@58
  char v16; // cl@59
  char *v17; // eax@64
  char v18; // cl@65
  char *v19; // eax@70
  char v20; // cl@71
  MainApp *v21; // [sp+4h] [bp-14h]@1
  int i; // [sp+8h] [bp-10h]@1

  v21 = this;
  v1 = 1;
  i = 1;
  if ( __argc > 1 )
  {
    while ( 1 )
    {
      v2 = __argv[v1];
      v3 = __argv[v1 + 1];
      if ( !v2 || !*v2 )
        return;
      if ( strcmp(__argv[v1], "-f") )
      {
        if ( strcmp(v2, "-d") )
        {
          if ( !strcmp(v2, "-win") )
            v21->m_bUseWinoption = 1;
        }
        else
        {
          v21->m_bUseDoption = 1;
          v21->baseclass_0.m_bRendererDialog = 1;
        }
      }
      if ( !strcmp(v2, "-w") )
        ++i;
      v4 = (int)"-steam_login";
      v5 = v2;
      while ( 1 )
      {
        v6 = (unsigned __int8)*v5 < *(_BYTE *)v4;
        if ( *v5 != *(_BYTE *)v4 )
          break;
        if ( !*v5 )
          goto LABEL_18;
        v7 = v5[1];
        v6 = (unsigned __int8)v7 < *(_BYTE *)(v4 + 1);
        if ( v7 != *(_BYTE *)(v4 + 1) )
          break;
        v5 += 2;
        v4 += 2;
        if ( !v7 )
        {
LABEL_18:
          v8 = 0;
          goto LABEL_20;
        }
      }
      v8 = -v6 - (v6 - 1);
LABEL_20:
      if ( !v8 )
        break;
      if ( strcmp(v2, "-i") )
      {
        if ( strcmp(v2, "-u") )
        {
          if ( strcmp(v2, "-p") )
          {
            if ( strcmp(v2, "-l") )
            {
              if ( strcmp(v2, "-osk_server") )
              {
                if ( strcmp(v2, "-osk_store") )
                {
                  if ( strcmp(v2, "-tip") )
                    goto LABEL_29;
                  if ( v3 && *v3 )
                  {
                    Server::SetLoginAddr(&g_kServer, v3);
                    v19 = v3;
                    do
                    {
                      v20 = *v19;
                      v19[g_kServer.m_szCPIP - v3] = *v19;
                      ++v19;
                    }
                    while ( v20 );
                    g_kServer.m_bTestServer = 1;
                  }
                  i += 2;
                }
                else
                {
                  if ( v3 && *v3 )
                  {
                    v17 = v3;
                    do
                    {
                      v18 = *v17;
                      v17[g_kServer.m_szCPShopUrl - v3] = *v17;
                      ++v17;
                    }
                    while ( v18 );
                  }
                  i += 2;
                }
              }
              else
              {
                if ( !g_kServer.m_bTestServer && v3 && *v3 )
                {
                  Server::SetLoginAddr(&g_kServer, v3);
                  v15 = v3;
                  do
                  {
                    v16 = *v15;
                    v15[g_kServer.m_szCPIP - v3] = *v15;
                    ++v15;
                  }
                  while ( v16 );
                }
                i += 2;
              }
            }
            else
            {
              if ( v3 && *v3 )
                g_iChinaLocaleNo = atoi(v3);
              i += 2;
            }
          }
          else
          {
            if ( v3 && *v3 )
              g_kServer.m_kLoginAddr.m_iPort = atoi(v3);
            i += 2;
          }
        }
        else
        {
          if ( v3 && *v3 )
          {
            v13 = v3;
            do
            {
              v14 = *v13;
              v13[g_kServer.m_szCPShopUrl - v3] = *v13;
              ++v13;
            }
            while ( v14 );
          }
          i += 2;
        }
      }
      else
      {
        if ( v3 && *v3 )
        {
          *(_QWORD *)&g_kServer.m_kLoginAddr.m_kAddr.n4_name[8] = 0i64;
          *(_QWORD *)&g_kServer.m_kLoginAddr.m_kAddr.n4_name[0] = 0i64;
          strncpy(g_kServer.m_kLoginAddr.m_kAddr.n4_name, v3, 0x10u);
          v11 = v3;
          do
          {
            v12 = *v11;
            v11[g_kServer.m_szCPIP - v3] = *v11;
            ++v11;
          }
          while ( v12 );
        }
        i += 2;
      }
LABEL_30:
      if ( i >= __argc )
        return;
      v1 = i;
    }
    if ( (unsigned __int8)_SteamAPI_IsSteamRunning(v5, v4) && (unsigned __int8)_SteamAPI_Init() )
    {
      if ( !SteamCallback::This )
      {
        v9 = operator new(0x2Cu);
        if ( v9 )
          SteamCallback::SteamCallback((SteamCallback *)v9);
        else
          v10 = 0;
        SteamCallback::This = v10;
      }
      SteamConfig::Running();
    }
LABEL_29:
    ++i;
    goto LABEL_30;
  }
}
// 97668C: using guessed type int _SteamAPI_Init(void);
// 97669C: using guessed type int __fastcall _SteamAPI_IsSteamRunning(_DWORD, _DWORD);
// A95A04: using guessed type int SteamCallback__This;

//----- (0045E270) --------------------------------------------------------
// local variable allocation has failed!
bool __thiscall MainApp::CheckDisplayCard(MainApp *this, unsigned int uiWidth, unsigned int uiHeight, unsigned int uiMultisample, bool bFullScreen)
{
  NiDX9SystemDesc *v5; // eax@3
  unsigned int v6; // edx@3
  NiDX9AdapterDesc *v7; // ecx@4
  NiDX9DeviceDesc *v8; // ecx@7
  bool result; // al@10
  NiDX9AdapterDesc *v10; // edx@12
  unsigned int v11; // ebx@14
  NiDX9DeviceDesc *v12; // eax@14
  unsigned int v13; // ecx@14
  NiDX9AdapterDesc::ModeDesc **v14; // edi@15
  NiDX9AdapterDesc::ModeDesc *v15; // esi@16
  NiDX9AdapterDesc::ModeDesc *v16; // ecx@20
  _D3DFORMAT v17; // esi@27
  NiTListItem<NiDX9DeviceDesc::DisplayFormatInfo *> *v18; // eax@29
  NiDX9DeviceDesc::DisplayFormatInfo *v19; // edi@30
  NiDX9Renderer::DepthStencilFormat v20; // ebx@33
  _D3DMULTISAMPLE_TYPE v21; // esi@33
  unsigned int uiMode; // [sp+0h] [bp-Ch]@16
  NiDX9AdapterDesc::ModeDesc **v23; // [sp+4h] [bp-8h]@15
  bool bDisplayRes; // [sp+Bh] [bp-1h]@14
  char eFormat_3; // [sp+23h] [bp+17h]@14
  char eFormat_3a; // [sp+23h] [bp+17h]@19
  char eFormat_3b; // [sp+23h] [bp+17h]@21

  if ( !(_S3_0 & 1) )
  {
    _S3_0 |= 1u;
    ms_bFullscreen = bFullScreen;
  }
  v5 = NiDX9Renderer::GetSystemDesc();
  v6 = v5->m_kAdapterList.m_uiSize;
  ms_pkInfo = v5;
  if ( v6 )
    v7 = *v5->m_kAdapterList.m_pBase;
  else
    v7 = 0;
  if ( ms_bFullscreen || (v8 = v7->m_pkHALDeviceDesc, v8->m_kD3DCaps9.DeviceType) && v8 && v8->m_bRenderWindowed )
  {
    if ( v6 )
      v10 = *v5->m_kAdapterList.m_pBase;
    else
      v10 = 0;
    v11 = v10->m_kModeList.m_uiSize;
    v12 = v10->m_pkHALDeviceDesc->m_kD3DCaps9.DeviceType != 0 ? v10->m_pkHALDeviceDesc : 0;
    v13 = 0;
    ms_pkAdapter = v10;
    ms_pkDevice = v12;
    eFormat_3 = 0;
    bDisplayRes = 0;
    if ( !v11 )
      goto LABEL_44;
    v23 = v10->m_kModeList.m_pBase;
    v14 = v10->m_kModeList.m_pBase;
    while ( 1 )
    {
      v15 = *v14;
      uiMode = v13;
      if ( (*v14)->m_uiWidth == uiWidth )
      {
        if ( v15->m_uiHeight == uiHeight && v15->m_uiBPP == 32 )
          break;
      }
      ++v13;
      ++v14;
      eFormat_3a = 1;
      if ( v13 >= v11 )
      {
        v16 = v23[uiMode];
        goto LABEL_24;
      }
    }
    bDisplayRes = 1;
    if ( eFormat_3b )
      v16 = v23[v13];
    else
LABEL_44:
      v16 = 0;
LABEL_24:
    ms_pkMode = v16;
    if ( v12 )
    {
      if ( v16 )
      {
        v17 = v16->m_eD3DFormat;
        *(_DWORD *)&bFullScreen = v16->m_eD3DFormat;
      }
      else
      {
        v17 = bFullScreen;
      }
      v18 = v12->m_kScreenFormats.baseclass_0.baseclass_0.m_pkHead;
      if ( v18 )
      {
        while ( 1 )
        {
          v19 = v18->m_element;
          v18 = v18->m_pkNext;
          if ( v19->m_eFormat == v17 )
            break;
          if ( !v18 )
            goto LABEL_32;
        }
      }
      else
      {
LABEL_32:
        v19 = 0;
      }
      v20 = NiDX9DeviceDesc::DisplayFormatInfo::FindClosestDepthStencil(v19, ms_b32BitZBuffer != 0 ? 32 : 16, 0);
      NiDX9DeviceDesc::DisplayFormatInfo::GetNonmaskableMultiSampleQuality(
        v19,
        ms_bFullscreen == 0,
        v17,
        (_D3DFORMAT)v20);
      NiDX9Select::ms_uiMultisample = 0;
      v21 = 2;
      while ( !NiDX9DeviceDesc::DisplayFormatInfo::IsMultiSampleValid(
                 v19,
                 ms_bFullscreen == 0,
                 v21,
                 (_D3DFORMAT)bFullScreen,
                 (_D3DFORMAT)v20) )
      {
        ++v21;
        if ( (unsigned int)v21 >= 0x11 )
          goto LABEL_39;
      }
      if ( uiMultisample == 1 )
        NiDX9Select::ms_uiMultisample = v21;
LABEL_39:
      if ( !NiDX9Select::ms_uiMultisample )
        MachineOpt::ms_kGraphicOption.ui_DisplayMultisample = 0;
      result = bDisplayRes;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// 45E270: variables would overlap: ST3C_1/1 and ST3C_3/3

//----- (0045E450) --------------------------------------------------------
void __thiscall MainApp::SetWinMinimized(MainApp *this)
{
  ShowWindow(this->baseclass_0.m_pkAppWindow->m_pWnd, 6);
}

//----- (0045E460) --------------------------------------------------------
bool __thiscall MainApp::InitInput(MainApp *this)
{
  MainApp *v1; // esi@1
  NiInputSystem *v2; // ecx@1
  int v3; // edi@1
  int v4; // esi@3
  int v5; // edi@8
  int v6; // esi@10
  bool result; // al@15

  v1 = this;
  PgImeCtrl::SetHWND(&this->m_kImeCtrl, g_hMainWnd);
  v2 = v1->baseclass_0.m_spInputSystem.m_pObject;
  v1->m_kImeCtrl.m_bPreventNative = 1;
  g_pkKeyboard = (int)v2->m_spKeyboard.m_pObject;
  g_pkMouse = (int)v1->baseclass_0.m_spInputSystem.m_pObject->m_spMouse.m_pObject;
  v3 = g_pkKeyboard;
  if ( unk_B70428 != g_pkKeyboard )
  {
    if ( unk_B70428 )
    {
      v4 = unk_B70428;
      if ( !InterlockedDecrement((volatile LONG *)(unk_B70428 + 4)) )
      {
        if ( v4 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      }
    }
    unk_B70428 = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v5 = g_pkMouse;
  if ( unk_B70424 != g_pkMouse )
  {
    if ( unk_B70424 )
    {
      v6 = unk_B70424;
      if ( !InterlockedDecrement((volatile LONG *)(unk_B70424 + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    unk_B70424 = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)(v5 + 4));
  }
  SetCursor(0);
  result = Cursor::Init();
  if ( result )
  {
    unk_B70420 = Cursor::GetPgCursor();
    result = 1;
  }
  return result;
}
// A9816C: using guessed type int g_pkKeyboard;
// A98170: using guessed type int g_pkMouse;

//----- (0045E540) --------------------------------------------------------
void __thiscall MainApp::SetupWindow(MainApp *this)
{
  MainApp *v1; // esi@1
  NiAppWindow *v2; // edx@1
  unsigned int v3; // edi@1
  unsigned int v4; // ebx@1
  unsigned int v5; // ecx@1
  bool v6; // al@2
  NiAppWindow *v7; // edx@2
  unsigned int v8; // eax@7
  unsigned int v9; // ecx@7
  int systemScreenWidht; // [sp+Ch] [bp-Ch]@1
  int systemScreenHeight; // [sp+10h] [bp-8h]@1
  unsigned int uiDisplayMultisample; // [sp+14h] [bp-4h]@1

  v1 = this;
  MachineOpt::Load();
  v2 = v1->baseclass_0.m_pkAppWindow;
  v1->baseclass_0.m_bFullscreen = MachineOpt::ms_kGraphicOption.bWindowFullMode;
  v3 = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  v4 = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight;
  v5 = MachineOpt::ms_kGraphicOption.ui_DisplayMultisample;
  v2->m_uiWidth = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  v1->baseclass_0.m_pkAppWindow->m_uiHeight = v4;
  uiDisplayMultisample = v5;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v3;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v4;
  systemScreenWidht = GetSystemMetrics(0);
  systemScreenHeight = GetSystemMetrics(1);
  if ( v1->baseclass_0.m_bFullscreen )
  {
    MachineOpt::ms_kGraphicOption.bWindowFullMode = 1;
    v1->baseclass_0.m_bFullscreen = 0;
    v6 = MainApp::CheckDisplayCard(v1, v3, v4, uiDisplayMultisample, 0);
    v7 = v1->baseclass_0.m_pkAppWindow;
    if ( v6 )
    {
      v7->m_uiWidth = v3;
      v1->baseclass_0.m_pkAppWindow->m_uiHeight = v4;
    }
    else
    {
      v7->m_uiWidth = 800;
      v1->baseclass_0.m_pkAppWindow->m_uiHeight = 600;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 800;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 600;
    }
  }
  else
  {
    if ( MainApp::CheckDisplayCard(v1, v3, v4, uiDisplayMultisample, 0)
      || (MessageBoxA(0, "¿¡·¯", "¿¡·¯", 0), MainApp::CheckDisplayCard(v1, 0x320u, 0x258u, 0, 1)) )
    {
      v9 = 600;
      v8 = 800;
    }
    else
    {
      MessageBoxA(0, "¿¡·¯2", "¿¡·¯2", 0);
      v8 = 800;
      v9 = 600;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 800;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 600;
    }
    MachineOpt::ms_kGraphicOption.bWindowFullMode = 0;
    if ( (unsigned int)systemScreenWidht < 0x400 || (unsigned int)systemScreenHeight < 0x300 )
    {
      v1->baseclass_0.m_pkAppWindow->m_uiWidth = v8;
      v1->baseclass_0.m_pkAppWindow->m_uiHeight = v9;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v8;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v9;
    }
    else
    {
      if ( v3 >= systemScreenWidht || v4 >= systemScreenHeight )
      {
        v1->baseclass_0.m_pkAppWindow->m_uiWidth = v3;
        v1->baseclass_0.m_pkAppWindow->m_uiHeight = v4;
        MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v3;
        MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v4;
      }
    }
  }
  v1->baseclass_0.m_bRendererDialog = 0;
  v1->m_bStartUseAntiOption = MachineOpt::ms_kGraphicOption.ui_DisplayMultisample != 0;
}

//----- (0045E6E0) --------------------------------------------------------
void __thiscall MainApp::SetWinMaxmized(MainApp *this)
{
  unsigned int v1; // ebx@1
  unsigned int v2; // edi@1
  MainApp *v3; // esi@1
  NiAppWindow *v4; // edx@1
  LONG v5; // eax@1
  NiAppWindow *v6; // eax@4
  int v7; // edi@4
  HWND__ **v8; // eax@5
  unsigned int uiDisplayHeight; // [sp+Ch] [bp-B8h]@1
  HWND__ *hStatusWnd; // [sp+10h] [bp-B4h]@6
  _devicemodeA dm; // [sp+14h] [bp-B0h]@1
  tagRECT statusRect; // [sp+B0h] [bp-14h]@9
  unsigned int v13; // [sp+C0h] [bp-4h]@1
  int v14; // [sp+C4h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v1 = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  v2 = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight;
  v3 = this;
  uiDisplayHeight = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight;
  memset(dm.dmDeviceName, 0, 0x9Cu);
  v4 = v3->baseclass_0.m_pkAppWindow;
  dm.dmSize = 156;
  dm.dmFields = 1835008;
  dm.dmBitsPerPel = 32;
  dm.dmPelsWidth = v1;
  dm.dmPelsHeight = v2;
  v5 = GetWindowLongA(v4->m_pWnd, -16);
  SetWindowLongA(v3->baseclass_0.m_pkAppWindow->m_pWnd, -16, v5 & 0xFF37FFFF | 0x80);
  if ( !ChangeDisplaySettingsA(&dm, 2u) )
  {
    if ( ChangeDisplaySettingsA(&dm, 4u) )
      ChangeDisplaySettingsA(&dm, 0);
    ShowWindow(v3->baseclass_0.m_pkAppWindow->m_pWnd, 3);
    v6 = v3->baseclass_0.m_pkAppWindow;
    v7 = 0;
    if ( v6->m_uiNumStatusPanes && (v8 = v6->m_ppStatusWnd) != 0 )
      hStatusWnd = *v8;
    else
      hStatusWnd = 0;
    if ( IsWindow(hStatusWnd) )
    {
      GetWindowRect(hStatusWnd, &statusRect);
      v7 = statusRect.bottom - statusRect.top;
      ShowWindow(hStatusWnd, 0);
    }
    SetWindowPos(v3->baseclass_0.m_pkAppWindow->m_pWnd, 0, 0, 0, v1, uiDisplayHeight + v7, 0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0045E840) --------------------------------------------------------
void __thiscall MainApp::SetWinNormal(MainApp *this)
{
  unsigned int v1; // ebx@1
  MainApp *v2; // edi@1
  DEVMODEA *v3; // esi@1
  int v4; // eax@2
  NiAppWindow *v5; // edi@5
  HWND__ **v6; // edi@6
  HWND__ *v7; // edi@7
  int v8; // edi@11
  int v9; // edi@11
  int v10; // ebx@11
  int v11; // ebx@11
  int v12; // eax@11
  MainApp *v13; // [sp+Ch] [bp-24h]@1
  unsigned int uiDisplayWidth; // [sp+10h] [bp-20h]@1
  unsigned int uiDisplayHeight; // [sp+14h] [bp-1Ch]@1
  int systemScreenWidht; // [sp+18h] [bp-18h]@2
  int systemScreenWidhta; // [sp+18h] [bp-18h]@5
  tagRECT statusRect; // [sp+1Ch] [bp-14h]@10
  unsigned int v19; // [sp+2Ch] [bp-4h]@1
  int v20; // [sp+30h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v1 = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  v2 = this;
  v3 = &this->m_SaveMode;
  v13 = this;
  uiDisplayWidth = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  uiDisplayHeight = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight;
  if ( !ChangeDisplaySettingsA(&this->m_SaveMode, 2u) )
  {
    ChangeDisplaySettingsA(v3, 0);
    systemScreenWidht = GetSystemMetrics(0);
    v4 = GetSystemMetrics(1);
    if ( systemScreenWidht < v1 || v4 < uiDisplayHeight )
    {
      uiDisplayWidth = systemScreenWidht;
      uiDisplayHeight = v4;
      v1 = systemScreenWidht;
    }
    GameFrameWork::ms_uiDisResWidth = v1;
    GameFrameWork::ms_uiDisResHeight = uiDisplayHeight;
    SetWindowLongA(v2->baseclass_0.m_pkAppWindow->m_pWnd, -16, v2->m_dwStyle);
    ShowWindow(v2->baseclass_0.m_pkAppWindow->m_pWnd, 9);
    v5 = v2->baseclass_0.m_pkAppWindow;
    systemScreenWidhta = 0;
    if ( v5->m_uiNumStatusPanes && (v6 = v5->m_ppStatusWnd) != 0 )
      v7 = *v6;
    else
      v7 = 0;
    if ( IsWindow(v7) )
    {
      ShowWindow(v7, 5);
      GetWindowRect(v7, &statusRect);
      systemScreenWidhta = statusRect.bottom - statusRect.top;
    }
    v8 = GetSystemMetrics(45);
    v9 = 2 * (GetSystemMetrics(5) + v8);
    v10 = GetSystemMetrics(46);
    v11 = 2 * (GetSystemMetrics(6) + v10);
    v12 = systemScreenWidhta + v11 + GetSystemMetrics(4);
    SetWindowPos(v13->baseclass_0.m_pkAppWindow->m_pWnd, 0, 0, 0, uiDisplayWidth + v9, uiDisplayHeight + v12, 0);
    MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = uiDisplayWidth;
    MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = uiDisplayHeight;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0045E990) --------------------------------------------------------
void __thiscall MainApp::ReCreateRenderer(MainApp *this)
{
  unsigned int v1; // ebx@1
  unsigned int v2; // edi@1
  MainApp *v3; // esi@1
  int v4; // eax@1
  unsigned int v5; // eax@7
  unsigned int v6; // ecx@7
  char *v7; // eax@16
  int v8; // ecx@17
  NiAppWindow *v9; // eax@17
  unsigned int v10; // edx@17
  unsigned int v11; // eax@17
  unsigned int v12; // edx@19
  double v13; // st6@19
  float v14; // ST28_4@22
  float v15; // ST24_4@22
  HWND__ *v16; // [sp-18h] [bp-54h]@10
  NiDX9Renderer::FrameBufferFormat v17; // [sp-14h] [bp-50h]@10
  NiDX9Renderer::DepthStencilFormat v18; // [sp-10h] [bp-4Ch]@10
  NiDX9Renderer::PresentationInterval v19; // [sp-Ch] [bp-48h]@10
  NiDX9Renderer::SwapEffect v20; // [sp-8h] [bp-44h]@10
  unsigned int v21; // [sp-4h] [bp-40h]@10
  NiFrustum m_kViewFrustum; // [sp+14h] [bp-28h]@21
  float systemScreenHeight; // [sp+30h] [bp-Ch]@1
  int fHeight; // [sp+34h] [bp-8h]@1
  unsigned int offsetY; // [sp+38h] [bp-4h]@1

  v1 = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight;
  v2 = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  v3 = this;
  offsetY = MachineOpt::ms_kGraphicOption.ui_DisplayMultisample;
  GameFrameWork::ms_uiDisResWidth = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  GameFrameWork::ms_uiDisResHeight = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight;
  fHeight = GetSystemMetrics(0);
  v4 = GetSystemMetrics(1);
  LODWORD(systemScreenHeight) = v4;
  if ( MachineOpt::ms_kGraphicOption.bWindowFullMode )
  {
    if ( !MainApp::CheckDisplayCard(v3, v2, v1, offsetY, v3->baseclass_0.m_bFullscreen) )
    {
      v5 = fHeight;
      v3->baseclass_0.m_pkAppWindow->m_uiWidth = fHeight;
      v6 = LODWORD(systemScreenHeight);
      v3->baseclass_0.m_pkAppWindow->m_uiHeight = LODWORD(systemScreenHeight);
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v5;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v6;
      GameFrameWork::ms_uiDisResWidth = v5;
      GameFrameWork::ms_uiDisResHeight = v6;
    }
    MainApp::SetWinMaxmized(v3);
  }
  else
  {
    if ( v2 > fHeight || v1 > v4 )
    {
      v3->baseclass_0.m_pkAppWindow->m_uiWidth = v2;
      v3->baseclass_0.m_pkAppWindow->m_uiHeight = v1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v2;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v1;
      GameFrameWork::ms_uiDisResWidth = v2;
      GameFrameWork::ms_uiDisResHeight = v1;
    }
    MainApp::CheckDisplayCard(v3, v2, v1, offsetY, v3->baseclass_0.m_bFullscreen);
    MainApp::SetWinNormal(v3);
  }
  SetForegroundWindow(v3->baseclass_0.m_pkAppWindow->m_pWnd);
  SetFocus(v3->baseclass_0.m_pkAppWindow->m_pWnd);
  if ( *(float *)&offsetY == 0.0 )
  {
    v21 = 0;
    v20 = 0;
    v19 = 1;
    v18 = 0;
    v17 = 0;
    v16 = v3->baseclass_0.m_pkAppWindow->m_pRenderWnd;
  }
  else
  {
    if ( v3->m_bStartUseAntiOption )
    {
      v21 = NiDX9Select::ms_uiMultisample;
      v20 = 0;
      v19 = 0;
      v18 = 0;
      v17 = 0;
      v16 = v3->baseclass_0.m_pkAppWindow->m_pRenderWnd;
    }
    else
    {
      v21 = 0;
      v20 = 0;
      v19 = 1;
      v18 = 0;
      v17 = 0;
      v16 = v3->baseclass_0.m_pkAppWindow->m_pRenderWnd;
    }
  }
  NiDX9Renderer::Recreate(
    (NiDX9Renderer *)v3->baseclass_0.m_spRenderer.m_pObject,
    0,
    0,
    0x28u,
    v16,
    v17,
    v18,
    v19,
    v20,
    v21,
    1u,
    0);
  if ( v3->m_bStartUseAntiOption != (offsetY != 0) && !v3->m_bStartUseAntiOption )
  {
    v7 = TextData::Get(0x1547855Cu);
    MsgBox::Modal(MSGBOX_OK, v7);
  }
  PgWin::ms_uiScreenHeight = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight;
  PgWin::ms_uiScreenWidth = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth;
  PgWin::ms_iScreenBottomPos = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight - 1;
  v8 = unk_B70420;
  PgWin::ms_iScreenTopPos = 0;
  PgWin::ms_iScreenLeftPos = 0;
  PgWin::ms_iScreenRightPos = MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth - 1;
  v9 = v3->baseclass_0.m_pkAppWindow;
  v10 = v9->m_uiWidth;
  v11 = v9->m_uiHeight;
  PgWin::ms_uiScreenWidth = v10;
  PgWin::ms_uiScreenHeight = v11;
  if ( unk_B70420 )
  {
    *(_DWORD *)(unk_B70420 + 68) = 0;
    *(_DWORD *)(v8 + 76) = 0;
    *(_DWORD *)(v8 + 72) = v10;
    *(_DWORD *)(v8 + 80) = v11;
  }
  systemScreenHeight = (double)PgWin::ms_uiScreenWidth;
  v12 = v3->m_uiStartHeight;
  *(float *)&fHeight = (double)PgWin::ms_uiScreenHeight;
  v13 = (double)(signed int)v3->m_uiStartHeight;
  if ( (v12 & 0x80000000u) != 0 )
    v13 = v13 + 4294967300.0;
  *(float *)&offsetY = *(float *)&fHeight - v13 + 0.5;
  NiFrustum::NiFrustum(&m_kViewFrustum, 0);
  m_kViewFrustum.m_fLeft = 0.5;
  m_kViewFrustum.m_bOrtho = 1;
  m_kViewFrustum.m_fRight = systemScreenHeight + 0.5;
  m_kViewFrustum.m_fTop = *(float *)&fHeight - *(float *)&offsetY;
  m_kViewFrustum.m_fBottom = -*(float *)&offsetY;
  m_kViewFrustum.m_fNear = 1.0;
  m_kViewFrustum.m_fFar = 10000.0;
  NiCamera::SetViewFrustum(unk_B703D8, &m_kViewFrustum);
  NiCamera::SetViewFrustum(&g_kScrnBDMgr.m_spScreenSpaceCamera.m_pObject->baseclass_0, &m_kViewFrustum);
  NiCamera::SetViewFrustum(dword_B5B0F8, &m_kViewFrustum);
  v15 = (double)PgWin::ms_uiScreenWidth;
  v14 = (double)PgWin::ms_uiScreenHeight;
  World::SetCameraFrustum(&g_kWorld, v15, v14);
}
// A8E7CC: using guessed type int PgWin__ms_iScreenRightPos;
// A8E7D0: using guessed type int PgWin__ms_iScreenBottomPos;
// B70328: using guessed type int PgWin__ms_iScreenLeftPos;
// B7032C: using guessed type int PgWin__ms_iScreenTopPos;

//----- (0045EC90) --------------------------------------------------------
bool __thiscall MainApp::OnDefault(MainApp *this, NiEventRecord *pEventRecord)
{
  unsigned int v2; // eax@1
  NiDX92DBufferData *v3; // edi@1
  NiInputSystem *v4; // ecx@6
  int v5; // eax@7
  int v6; // eax@7
  NiInputSystem *v7; // ecx@12
  bool result; // al@16
  unsigned int v9; // eax@17
  PgFrameWork *v10; // eax@22
  PgFrameWork *v11; // eax@27
  int v12; // ecx@36
  char *v13; // eax@42
  int v14; // ebx@44
  int v15; // eax@44
  tagPOINT point; // [sp+Ch] [bp-110h]@1
  char acFilename[260]; // [sp+14h] [bp-108h]@24
  unsigned int v18; // [sp+118h] [bp-4h]@1
  int v19; // [sp+11Ch] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v2 = pEventRecord->uiMsg;
  v3 = (NiDX92DBufferData *)this;
  point.y = (int)pEventRecord;
  if ( v2 > 0x10F )
  {
    if ( v2 > 0x288 )
    {
      if ( v2 < 0x290 )
        return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
      if ( v2 > 0x291 )
      {
        if ( v2 != 32769 || GameFrameWork::ms_bSpawnApps != 1 )
          return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
        OutputDebugStringA("WM_APP_FULLSCREEN");
        if ( GameFrameWork::ms_bGameFrameStart )
        {
          v14 = GetSystemMetrics(0);
          v15 = GetSystemMetrics(1);
          MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v14;
          MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v15;
          MachineOpt::ms_kGraphicOption.bWindowFullMode = 1;
          MainApp::ReCreateRenderer((MainApp *)v3);
        }
        MachineOpt::ms_kGraphicOption.bWindowFullMode = 0;
        v13 = TextData2::Get(0x170AE918u);
        MsgBox::Modal(MSGBOX_OK, v13);
        return 1;
      }
    }
    else
    {
      if ( v2 != 648 )
      {
        if ( v2 == 512 )
        {
          if ( this->baseclass_0.m_bFullscreen )
          {
            v12 = HIWORD(pEventRecord->lParam);
            point.x = LOWORD(pEventRecord->lParam);
            point.y = v12;
            ClientToScreen(g_hMainWnd, &point);
            Cursor::SetHardwareCursorPos(point.x, point.y);
          }
          return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
        }
        if ( v2 <= 0x280 || v2 > 0x286 )
          return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
      }
    }
LABEL_33:
    if ( MainApp::OnIme(this, pEventRecord) != 1 )
      return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
    return 1;
  }
  if ( v2 >= 0x10D )
    goto LABEL_33;
  switch ( v2 )
  {
    case 6u:
      if ( LOWORD(pEventRecord->wParam) )
      {
        if ( (unsigned int)LOWORD(pEventRecord->wParam) - 1 <= 1 )
        {
          v4 = this->baseclass_0.m_spInputSystem.m_pObject;
          if ( v4 )
          {
            ((void (*)(void))v4->baseclass_0.vfptr[8].__vecDelDtor)();
            v5 = g_pkMouse;
            *(_BYTE *)(g_pkMouse + 130) = *(_BYTE *)(g_pkMouse + 128);
            *(_BYTE *)(v5 + 131) = *(_BYTE *)(v5 + 129);
            *(_DWORD *)(v5 + 140) = *(_DWORD *)(v5 + 136);
            *(_WORD *)(v5 + 128) = 0;
            *(_DWORD *)(v5 + 136) = 0;
            *(_DWORD *)(v5 + 16) &= 0xFFFFFFFEu;
            v6 = g_pkMouse;
            *(_BYTE *)(g_pkMouse + 146) = *(_BYTE *)(g_pkMouse + 144);
            *(_BYTE *)(v6 + 147) = *(_BYTE *)(v6 + 145);
            *(_DWORD *)(v6 + 156) = *(_DWORD *)(v6 + 152);
            *(_WORD *)(v6 + 144) = 0;
            *(_DWORD *)(v6 + 152) = 0;
            *(_DWORD *)(v6 + 16) &= 0xFFFFFFFDu;
          }
          if ( EditWin::ms_pkCurEditWin )
            EditWin::Recover_focus((EditWin *)EditWin::ms_pkCurEditWin);
          if ( !m_bMinimize )
          {
            m_bMinimize = 1;
            SoundMgr::MuteSound(&g_kSoundMgr, 0);
            SoundMgr::SetAmbientVolumeSync(&g_kSoundMgr);
          }
        }
      }
      else
      {
        v7 = this->baseclass_0.m_spInputSystem.m_pObject;
        if ( v7 )
          ((void (*)(void))v7->baseclass_0.vfptr[8].__vecDelDtor)();
        if ( m_bMinimize == 1 )
        {
          m_bMinimize = 0;
          SoundMgr::MuteSound(&g_kSoundMgr, 1);
        }
      }
      goto $LN87_4;
    case 0x20u:
$LN87_4:
      SetCursor(0);
      Cursor::ShowCursor(1);
      return 1;
    case 0x104u:
      v9 = pEventRecord->wParam;
      if ( v9 != 121 && v9 != 18 )
        return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
      return 1;
    case 0x101u:
      if ( pEventRecord->wParam != 44 )
        return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
      if ( MachineOpt::ms_kGraphicOption.bScreenShotEnable )
      {
        ScreenShot(this->baseclass_0.m_spRenderer.m_pObject, g_hMainWnd, acFilename, 260);
      }
      else
      {
        v10 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v10 )
        {
          BYTE1(v10[142].baseclass_0.vfptr) = 0;
          return 1;
        }
      }
      result = 1;
      break;
    case 0x10u:
      if ( !PgFrameMgr::IsInRun(&Pgg_kFrameMgr, GameFrameWorkID) )
        return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
      v11 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      PgFrameWork::AddMsg(v11, 0x1Au, 0, 0);
      return 1;
    default:
      return NiDX92DBufferData::Recreate(v3, (IDirect3DDevice9 *)pEventRecord);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A98170: using guessed type int g_pkMouse;
// A987C7: using guessed type bool GameFrameWork__ms_bGameFrameStart;
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (0045F140) --------------------------------------------------------
void __thiscall MainApp::ProcessCommandLine(MainApp *this)
{
  signed int v1; // eax@1
  char *v2; // esi@4
  const char *v3; // edi@4
  char v4; // al@9
  char v5; // al@14
  char v6; // al@19
  char v7; // al@24
  MapInfo *v8; // eax@29
  char v9; // al@43
  MainApp *v10; // [sp+0h] [bp-18h]@1
  int i; // [sp+4h] [bp-14h]@1
  Name3 kMapName; // [sp+8h] [bp-10h]@29
  unsigned int v13; // [sp+14h] [bp-4h]@1
  int v14; // [sp+18h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v1 = 1;
  v10 = this;
  i = 1;
  if ( __argc > 1 )
  {
    while ( 1 )
    {
      v2 = __argv[v1];
      v3 = __argv[v1 + 1];
      if ( !v2 || !*v2 )
        return;
      if ( strcmp(__argv[v1], "-c") )
      {
        if ( strcmp(v2, "-g") )
        {
          if ( strcmp(v2, "-h") )
          {
            if ( strcmp(v2, "-face") )
            {
              if ( strcmp(v2, "-m") )
              {
                if ( !strcmp(v2, "-t") )
                  goto LABEL_35;
                if ( !strcmp(v2, "-n") )
                {
                  v10->m_kStartFrameWorkID = GameFrameWorkID;
LABEL_35:
                  ++i;
                  goto LABEL_36;
                }
                if ( !strcmp(v2, "-s") )
                {
                  SoundMgr::Enable(&g_kSoundMgr, 0);
                  goto LABEL_35;
                }
                if ( strcmp(v2, "-a") )
                {
                  if ( strcmp(v2, "-app") )
                    goto LABEL_35;
                  if ( v3 && *v3 )
                    SetWindowTextA(v10->baseclass_0.m_pkAppWindow->m_pWnd, v3);
                  i += 2;
                }
                else
                {
                  if ( v3 && *v3 )
                  {
                    v9 = atoi(v3);
                    User::SetSelectedAvatarSlot(&g_kUser, v9);
                  }
                  i += 2;
                }
              }
              else
              {
                if ( v3 )
                {
                  if ( *v3 )
                  {
                    *(_QWORD *)&kMapName.n3_name[4] = 0i64;
                    *(_DWORD *)&kMapName.n3_name[0] = 0;
                    strncpy(kMapName.n3_name, (char *)v3, 0xCu);
                    User::SetMainCharLoginMapName(&g_kUser, &kMapName);
                    v8 = MapInfoTab::GetByMapName(&kMapName);
                    if ( v8 )
                      User::SetMainCharLoginMapInitPos(&g_kUser, v8->RegenX, v8->RegenY);
                  }
                }
                i += 2;
              }
            }
            else
            {
              if ( v3 && *v3 )
              {
                v7 = atoi(v3);
                User::SetMainCharFaceType(&g_kUser, v7);
              }
              i += 2;
            }
          }
          else
          {
            if ( v3 && *v3 )
            {
              v6 = atoi(v3);
              User::SetMainCharHairType(&g_kUser, v6);
            }
            i += 2;
          }
        }
        else
        {
          if ( v3 && *v3 )
          {
            v5 = atoi(v3);
            User::SetMainCharGender(&g_kUser, v5);
          }
          i += 2;
        }
      }
      else
      {
        if ( v3 )
        {
          if ( *v3 )
          {
            v4 = CharClass::GetClassIDByEngName((char *)v3);
            User::SetMainCharClass(&g_kUser, v4);
          }
        }
        i += 2;
      }
LABEL_36:
      if ( i >= __argc )
        return;
      v1 = i;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0045F500) --------------------------------------------------------
void __thiscall MainApp::_MainApp(MainApp *this)
{
  MainApp *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiApplicationVtbl *)&MainApp::_vftable_;
  if ( ChangeDisplaySettingsA(0, 0) )
    ChangeDisplaySettingsA(&v1->m_SaveMode, 1u);
  UninitWebCtrl();
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_ProgressBarTexName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_ProgressBarTexName.baseclass_0._Myres = 15;
  v1->m_ProgressBarTexName.baseclass_0._Mysize = 0;
  v1->m_ProgressBarTexName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->m_SplashTexName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_SplashTexName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_SplashTexName.baseclass_0._Myres = 15;
  v1->m_SplashTexName.baseclass_0._Mysize = 0;
  v1->m_SplashTexName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgImeCtrl::_PgImeCtrl(&v1->m_kImeCtrl);
  NiApplication::_NiApplication(&v1->baseclass_0);
}
// 98649C: using guessed type int (__thiscall *MainApp___vftable_)(void *p, char);

//----- (0045F5E0) --------------------------------------------------------
bool __thiscall MainApp::InitGameData(MainApp *this)
{
  MainApp *v1; // ebx@1
  char *v2; // eax@3
  char *v4; // eax@8
  char *v5; // eax@12
  char *v6; // eax@16
  char *v7; // eax@20
  char *v8; // eax@22
  char *v9; // eax@22
  char *v10; // eax@24
  char *v11; // eax@24
  char *v12; // eax@26
  char *v13; // eax@26
  char *v14; // eax@28
  char *v15; // eax@28
  char *v16; // eax@30
  char *v17; // eax@30
  char *v18; // eax@32
  char *v19; // eax@32
  char *v20; // eax@34
  char *v21; // eax@34
  char *v22; // eax@36
  char *v23; // eax@36
  char *v24; // eax@38
  char *v25; // eax@38
  char *v26; // eax@40
  char *v27; // eax@40
  char *v28; // eax@42
  char *v29; // eax@42
  char *v30; // eax@44
  char *v31; // eax@44
  char *v32; // eax@46
  char *v33; // eax@46
  char *v34; // eax@48
  char *v35; // eax@48
  char *v36; // eax@50
  char *v37; // eax@50
  char *v38; // eax@52
  char *v39; // eax@52
  char *v40; // eax@54
  char *v41; // eax@54
  char *v42; // eax@56
  char *v43; // eax@56
  char *v44; // eax@58
  char *v45; // eax@58
  char *v46; // eax@60
  char *v47; // eax@60
  char *v48; // eax@62
  char *v49; // eax@62
  char *v50; // eax@64
  char *v51; // eax@64
  char *v52; // eax@66
  char *v53; // eax@66
  char *v54; // eax@68
  char *v55; // eax@68
  char *v56; // eax@70
  char *v57; // eax@70
  char *v58; // eax@72
  char *v59; // eax@72
  char *v60; // eax@74
  char *v61; // eax@74
  char *v62; // eax@76
  char *v63; // eax@76
  char *v64; // eax@79
  char *v65; // eax@79
  const char *v66; // ecx@82
  const char *v67; // eax@85
  const char *v68; // ecx@89
  const char *v69; // eax@92
  char *v70; // eax@94
  char *v71; // eax@94
  char *v72; // eax@96
  char *v73; // eax@96
  char *v74; // eax@98
  char *v75; // eax@98
  char *v76; // eax@100
  char *v77; // eax@100
  char *v78; // eax@102
  char *v79; // eax@102
  char *v80; // eax@105
  char *v81; // eax@105
  char *v82; // eax@107
  char *v83; // eax@107
  char *v84; // eax@109
  char *v85; // eax@109
  char *v86; // eax@111
  char *v87; // eax@111
  char *v88; // eax@113
  char *v89; // eax@113
  char *v90; // eax@115
  char *v91; // eax@115
  char *v92; // eax@117
  char *v93; // eax@117
  char *v94; // eax@119
  char *v95; // eax@119
  char *v96; // eax@121
  char *v97; // eax@121
  char *v98; // eax@123
  char *v99; // eax@123
  char *v100; // eax@125
  char *v101; // eax@125
  char *v102; // eax@128
  char *v103; // eax@128
  char *v104; // eax@130
  char *v105; // eax@130
  const char *v106; // ecx@133
  const char *v107; // eax@136
  char *v108; // eax@138
  char *v109; // eax@138
  char *v110; // eax@140
  char *v111; // eax@140
  char *v112; // eax@142
  char *v113; // eax@142
  char *v114; // eax@144
  char *v115; // eax@144
  char *v116; // eax@146
  char *v117; // eax@146
  char *v118; // eax@150
  char *v119; // eax@150
  char *v120; // eax@152
  char *v121; // eax@152
  char *v122; // eax@154
  char *v123; // eax@154
  char *v124; // eax@156
  char *v125; // eax@156
  char *v126; // eax@158
  char *v127; // eax@158
  char *v128; // eax@160
  char *v129; // eax@160
  char *v130; // eax@162
  char *v131; // eax@162
  char *v132; // eax@164
  char *v133; // eax@164
  char *v134; // eax@166
  char *v135; // eax@166
  char *v136; // eax@168
  char *v137; // eax@168
  char *v138; // eax@170
  char *v139; // eax@170
  char *v140; // eax@172
  char *v141; // eax@172
  char *v142; // eax@174
  char *v143; // eax@174
  char *v144; // eax@176
  char *v145; // eax@176
  char *v146; // eax@178
  char *v147; // eax@178
  char *v148; // eax@180
  char *v149; // eax@180
  char *v150; // eax@182
  char *v151; // eax@182
  char *v152; // eax@184
  char *v153; // eax@184
  char *v154; // eax@186
  char *v155; // eax@186
  char *v156; // eax@188
  char *v157; // eax@188
  char *v158; // eax@190
  char *v159; // eax@190
  char *v160; // eax@192
  char *v161; // eax@192
  char *v162; // eax@194
  char *v163; // eax@194
  char *v164; // eax@196
  char *v165; // eax@196
  char *v166; // eax@198
  char *v167; // eax@198
  char *v168; // eax@200
  char *v169; // eax@200
  char *v170; // eax@202
  char *v171; // eax@202
  char *v172; // eax@204
  char *v173; // eax@204
  char *v174; // eax@206
  char *v175; // eax@206
  char *v176; // eax@208
  char *v177; // eax@208
  char *v178; // eax@210
  char *v179; // eax@210
  char *v180; // eax@212
  char *v181; // eax@212
  char *v182; // eax@214
  char *v183; // eax@214
  char *v184; // eax@216
  char *v185; // eax@216
  char *v186; // eax@218
  char *v187; // eax@218
  char *v188; // eax@220
  char *v189; // eax@220
  char *v190; // eax@222
  char *v191; // eax@222
  char *v192; // eax@224
  char *v193; // eax@224
  char *v194; // eax@226
  char *v195; // eax@226
  char *v196; // eax@228
  char *v197; // eax@228
  char *v198; // eax@230
  char *v199; // eax@230
  char *v200; // eax@232
  char *v201; // eax@232
  char *v202; // eax@234
  char *v203; // eax@234
  char *v204; // eax@236
  char *v205; // eax@236
  char *v206; // eax@238
  char *v207; // eax@238
  char *v208; // eax@240
  char *v209; // eax@240
  char *v210; // eax@242
  char *v211; // eax@242
  char *v212; // eax@244
  char *v213; // eax@244
  char *v214; // eax@246
  char *v215; // eax@246
  char *v216; // eax@248
  char *v217; // eax@248
  char *v218; // eax@250
  char *v219; // eax@250
  char *v220; // eax@252
  char *v221; // eax@252
  char *v222; // eax@254
  char *v223; // eax@254
  char *v224; // eax@256
  char *v225; // eax@256
  char *v226; // eax@258
  char *v227; // eax@258
  char *v228; // eax@260
  char *v229; // eax@260
  char *v230; // eax@262
  char *v231; // eax@262
  char *v232; // eax@264
  char *v233; // eax@264
  char *v234; // eax@266
  char *v235; // eax@266
  char *v236; // eax@268
  char *v237; // eax@268

  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSystem, "ClassName.shn");
  if ( !ITableBase<ClassName_CharClass>::Load(v2, 1) )
  {
    MessageBoxA(0, "ClassName.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acSystem, "RaceNameInfo.shn");
  if ( !ITableBase<RaceName_CharRace>::Load(v4, 1) )
  {
    MessageBoxA(0, "RaceNameInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acSystem, "MobInfo.shn");
  if ( !ITableBase<MobInfo_MobInfoTab>::Load(v5, 1) )
  {
    MessageBoxA(0, "MobInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acSystem, "MobViewInfo.shn");
  if ( !ITableBase<MobViewInfo_MobViewInfoTab>::Load(v6, 1) )
  {
    MessageBoxA(0, "MobViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acSystem, "NPCViewInfo.shn");
  if ( !ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::Load(v7, 1) )
  {
    MessageBoxA(0, "NPCViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v8 = Folder::System();
  v9 = Folder::Merge(v8, "Riding.shn");
  if ( !ITableBase<RIDING_RidePetTable>::Load(v9, 1) )
  {
    MessageBoxA(0, "Riding.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v10 = Folder::System();
  v11 = Folder::Merge(v10, "MoverMain.shn");
  if ( !ITableBase<MoverMain_MoverMainTab>::Load(v11, 1) )
  {
    MessageBoxA(0, "MoverMain.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v12 = Folder::System();
  v13 = Folder::Merge(v12, "MoverUseSkill.shn");
  if ( !ITableBase<MoverUseSkill_MoverUseSkillTab>::Load(v13, 1) )
  {
    MessageBoxA(0, "MoverUseSkill.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v14 = Folder::System();
  v15 = Folder::Merge(v14, "MoverHG.shn");
  if ( !ITableBase<MoverHG_MoverHGTab>::Load(v15, 1) )
  {
    MessageBoxA(0, "MoverHG.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v16 = Folder::System();
  v17 = Folder::Merge(v16, "MoverView.shn");
  if ( !ITableBase<MoverView_MoverViewTab>::Load(v17, 1) )
  {
    MessageBoxA(0, "MoverView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v18 = Folder::System();
  v19 = Folder::Merge(v18, "MoverSlotView.shn");
  if ( !ITableBase<MoverSlotView_MoverSlotViewTab>::Load(v19, 1) )
  {
    MessageBoxA(0, "MoverSlotView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v20 = Folder::System();
  v21 = Folder::Merge(v20, "MoverSlotCharAni.shn");
  if ( !ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::Load(v21, 1) )
  {
    MessageBoxA(0, "MoverSlotCharAni.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v22 = Folder::System();
  v23 = Folder::Merge(v22, "MoverAbility.shn");
  if ( !ITableBase<MoverAbility_MoverAbilityTab>::Load(v23, 1) )
  {
    MessageBoxA(0, "MoverAbility.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v24 = Folder::System();
  v25 = Folder::Merge(v24, "MoverItem.shn");
  if ( !ITableBase<MoverItem_MoverItemTab>::Load(v25, 1) )
  {
    MessageBoxA(0, "MoverItem.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v26 = Folder::System();
  v27 = Folder::Merge(v26, "PupMain.shn");
  if ( !ITableBase<PupMain_PetMainTab>::Load(v27, 1) )
  {
    MessageBoxA(0, "PupMain.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v28 = Folder::System();
  v29 = Folder::Merge(v28, "PupView.shn");
  if ( !ITableBase<PupView_PetViewTab>::Load(v29, 1) )
  {
    MessageBoxA(0, "PupView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v30 = Folder::System();
  v31 = Folder::Merge(v30, "MoverUpgradeEffect.shn");
  if ( !ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::Load(v31, 1) )
  {
    MessageBoxA(0, "MoverUpgradeEffect.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v32 = Folder::System();
  v33 = Folder::Merge(v32, "MapInfo.shn");
  if ( !ITableBase<MapInfo_MapInfoTab>::Load(v33, 1) )
  {
    MessageBoxA(0, "MapInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v34 = Folder::System();
  v35 = Folder::Merge(v34, "MapViewInfo.shn");
  if ( !ITableBase<MapViewInfo_MapViewInfoTab>::Load(v35, 1) )
  {
    MessageBoxA(0, "MapViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v36 = Folder::System();
  v37 = Folder::Merge(v36, "MobCoordinate.shn");
  if ( !ITableBase<MobCoordinate_MobCoordinateTab>::Load(v37, 1) )
  {
    MessageBoxA(0, "MobCoordinate.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v38 = Folder::System();
  v39 = Folder::Merge(v38, "ItemInfo.shn");
  if ( !ITableBase<ItemInfo_ItemInfoTab>::Load(v39, 1) )
  {
    MessageBoxA(0, "ItemInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  ItemInfoTab::BuildItemInfoMapByInxName();
  ItemInfoTab::GenerateCRCSum();
  v40 = Folder::System();
  v41 = Folder::Merge(v40, "ItemViewInfo.shn");
  if ( !ITableBase<ItemViewInfo_ItemViewInfoTab>::Load(v41, 1) )
  {
    MessageBoxA(0, "ItemViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v42 = Folder::System();
  v43 = Folder::Merge(v42, "ItemViewEquipTypeInfo.shn");
  if ( !ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::Load(v43, 1) )
  {
    MessageBoxA(0, "ItemViewEquipTypeInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v44 = Folder::System();
  v45 = Folder::Merge(v44, "ItemViewDummy.shn");
  if ( !ItemViewDummyTab::Load(v45, 1) )
  {
    MessageBoxA(0, "ItemViewDummy.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v46 = Folder::System();
  v47 = Folder::Merge(v46, "ActiveSkillGroup.shn");
  if ( !ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::Load(v47, 1) )
  {
    MessageBoxA(0, "ActiveSkillGroup.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v48 = Folder::System();
  v49 = Folder::Merge(v48, "ItemActionCondition.shn");
  if ( !ITableBase<ItemActionCondition_ItemActionConditionTab>::Load(v49, 1) )
  {
    MessageBoxA(0, "ItemActionCondition.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v50 = Folder::System();
  v51 = Folder::Merge(v50, "ActionEffectItem.shn");
  if ( !ITableBase<ActionEffectItem_ActionEffectItemTab>::Load(v51, 1) )
  {
    MessageBoxA(0, "ActionEffectItem.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v52 = Folder::System();
  v53 = Folder::Merge(v52, "ItemActionEffect.shn");
  if ( !ITableBase<ItemActionEffect_ItemActionEffectTab>::Load(v53, 1) )
  {
    MessageBoxA(0, "ItemActionEffect.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v54 = Folder::System();
  v55 = Folder::Merge(v54, "SetEffect.shn");
  if ( !ITableBase<SetEffect_SetEffectTab>::Load(v55, 1) )
  {
    MessageBoxA(0, "SetEffect.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v56 = Folder::System();
  v57 = Folder::Merge(v56, "ItemActionEffectDesc.shn");
  if ( !ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::Load(v57, 1) )
  {
    MessageBoxA(0, "ItemActionEffectDesc.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v58 = Folder::System();
  v59 = Folder::Merge(v58, "SetItemName.shn");
  if ( !ITableBase<SetItemName_SetItemNameTab>::Load(v59, 1) )
  {
    MessageBoxA(0, "SetItemName.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v60 = Folder::System();
  v61 = Folder::Merge(v60, "ItemAction.shn");
  if ( !ITableBase<ItemAction_ItemActionTab>::Load(v61, 1) )
  {
    MessageBoxA(0, "ItemAction.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v62 = Folder::System();
  v63 = Folder::Merge(v62, "UpgradeInfo.shn");
  if ( !ITableBase<UpGradeInfo_UpGradeInfoTab>::Load(v63, 1) )
  {
    MessageBoxA(0, "UpgradeInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !Skill::Init() )
    return 0;
  v64 = Folder::System();
  v65 = Folder::Merge(v64, "ActionViewInfo.shn");
  if ( !ITableBase<ActionViewInfo_ActionViewTable>::Load(v65, 1) )
  {
    MessageBoxA(0, "ActionViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres < 0x10 )
    v66 = (const char *)&v1->m_ProgressBarTexName;
  else
    v66 = *(const char **)&v1->m_ProgressBarTexName.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v1->m_SplashTexName.baseclass_0._Myres < 0x10 )
    v67 = (const char *)&v1->m_SplashTexName;
  else
    v67 = *(const char **)&v1->m_SplashTexName.baseclass_0.___u0.baseclass_0.dummy[0];
  MainApp::DisplaySplash(v1, v67, v66, 40);
  if ( !ActionInfoTable::Init() )
    return 0;
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres < 0x10 )
    v68 = (const char *)&v1->m_ProgressBarTexName;
  else
    v68 = *(const char **)&v1->m_ProgressBarTexName.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v1->m_SplashTexName.baseclass_0._Myres < 0x10 )
    v69 = (const char *)&v1->m_SplashTexName;
  else
    v69 = *(const char **)&v1->m_SplashTexName.baseclass_0.___u0.baseclass_0.dummy[0];
  MainApp::DisplaySplash(v1, v69, v68, 50);
  v70 = Folder::System();
  v71 = Folder::Merge(v70, "KingdomQuestDesc.shn");
  if ( !ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::Load(v71, 1) )
  {
    MessageBoxA(0, "KingdomQuestDesc.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v72 = Folder::System();
  v73 = Folder::Merge(v72, "HairInfo.shn");
  if ( !ITableBase<HairInfo_HairInfoTab>::Load(v73, 1) )
  {
    MessageBoxA(0, "HairInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v74 = Folder::System();
  v75 = Folder::Merge(v74, "HairColorInfo.shn");
  if ( !ITableBase<HairColorInfo_HairColorInfoTab>::Load(v75, 1) )
  {
    MessageBoxA(0, "HairColorInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v76 = Folder::System();
  v77 = Folder::Merge(v76, "FaceInfo.shn");
  if ( !ITableBase<FaceInfo_FaceInfoTab>::Load(v77, 1) )
  {
    MessageBoxA(0, "FaceInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v78 = Folder::System();
  v79 = Folder::Merge(v78, "WeaponAttrib.shn");
  if ( !ITableBase<WeaponAttrib_WeaponAttribTab>::Load(v79, 1) )
  {
    MessageBoxA(0, "WeaponAttrib.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !IconMgr::Init() )
    return 0;
  v80 = Folder::System();
  v81 = Folder::Merge(v80, "AbState.shn");
  if ( !ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::Load(v81, 1) )
  {
    MessageBoxA(0, "AbState.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v82 = Folder::System();
  v83 = Folder::Merge(v82, "AbStateView.shn");
  if ( !ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::Load(v83, 1) )
  {
    MessageBoxA(0, "AbStateView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v84 = Folder::System();
  v85 = Folder::Merge(v84, "SubAbState.shn");
  if ( !ITableBase<SubAbStateInfo_SubAbStateInfoTab>::Load(v85, 1) )
  {
    MessageBoxA(0, "SubAbState.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v86 = Folder::System();
  v87 = Folder::Merge(v86, "DamageSoundInfo.shn");
  if ( !ITableBase<DmgSndMapByArmorType_DmgSndTab>::Load(v87, 1) )
  {
    MessageBoxA(0, "DamageSoundInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v88 = Folder::System();
  v89 = Folder::Merge(v88, "WeaponTitleData.shn");
  if ( !WeaponTitleTab::Load(v89) )
  {
    MessageBoxA(0, "WeaponTitleData.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v90 = Folder::System();
  v91 = Folder::Merge(v90, "CharacterTitleData.shn");
  if ( !CCharacterTitleData::Read(&g_characterTitleData, v91, 0x99Bu, 0xACu) )
  {
    MessageBoxA(0, "CharacterTitleData.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v92 = Folder::System();
  v93 = Folder::Merge(v92, "Produce.shn");
  if ( !ITableBase<ProduceInfo_ProduceInfoTable>::Load(v93, 1) )
  {
    MessageBoxA(0, "Produce.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  ProduceInfoTable::BuildMeterialMap();
  v94 = Folder::System();
  v95 = Folder::Merge(v94, "ProduceView.shn");
  if ( !ITableBase<ProduceViewInfo_ProduceViewInfoTable>::Load(v95, 1) )
  {
    MessageBoxA(0, "ProduceView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v96 = Folder::System();
  v97 = Folder::Merge(v96, "Gather.shn");
  if ( !ITableBase<GatherInfo_GatherInfoTable>::Load(v97, 1) )
  {
    MessageBoxA(0, "Gather.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v98 = Folder::System();
  v99 = Folder::Merge(v98, "NpcDialogData.shn");
  if ( !ITableBase<NpcDialogData_NpcDialogDataTable>::Load(v99, 1) )
  {
    MessageBoxA(0, "NpcDialogData.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v100 = Folder::System();
  v101 = Folder::Merge(v100, "GradeItemOption.shn");
  if ( !ITableBase<GradeItemOption_GradeItemOptionTab>::Load(v101, 1) )
  {
    MessageBoxA(0, "GradeItemOption.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !ShortCutMgr::Init(&g_kShortCutMgr) )
    return 0;
  v102 = Folder::System();
  v103 = Folder::Merge(v102, "UpEffect.shn");
  if ( !ITableBase<UpEffectData_UpEffectTab>::Load(v103, 1) )
  {
    MessageBoxA(0, "UpEffect.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v104 = Folder::System();
  v105 = Folder::Merge(v104, "ItemDismantle.shn");
  if ( !ITableBase<ItemDismantle_ItemDismantleTab>::Load(v105, 1) )
  {
    MessageBoxA(0, "ItemDismantle.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( v1->m_ProgressBarTexName.baseclass_0._Myres < 0x10 )
    v106 = (const char *)&v1->m_ProgressBarTexName;
  else
    v106 = *(const char **)&v1->m_ProgressBarTexName.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v1->m_SplashTexName.baseclass_0._Myres < 0x10 )
    v107 = (const char *)&v1->m_SplashTexName;
  else
    v107 = *(const char **)&v1->m_SplashTexName.baseclass_0.___u0.baseclass_0.dummy[0];
  MainApp::DisplaySplash(v1, v107, v106, 60);
  v108 = Folder::System();
  v109 = Folder::Merge(v108, "ColorInfo.shn");
  if ( !ITableBase<ColorInfoType_ColorInfoTable>::Load(v109, 1) )
  {
    MessageBoxA(0, "ColorInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v110 = Folder::System();
  v111 = Folder::Merge(v110, "MiniHouse.shn");
  if ( !ITableBase<MiniHouse_MiniHouseTable>::Load(v111, 1) )
  {
    MessageBoxA(0, "MiniHouse.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v112 = Folder::System();
  v113 = Folder::Merge(v112, "ItemShopView.shn");
  if ( !ITableBase<ItemShopView_ItemShopViewTable>::Load(v113, 1) )
  {
    MessageBoxA(0, "ItemShopView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v114 = Folder::System();
  v115 = Folder::Merge(v114, "ChargedEffect.shn");
  if ( !ITableBase<ChargedItemEffect_ChargedEffectTable>::Load(v115, 1) )
  {
    MessageBoxA(0, "ChargedEffect.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v116 = Folder::System();
  v117 = Folder::Merge(v116, "ItemMix.shn");
  if ( !ItemMixData::Read(&stru_A958D4, v117, 0x2Cu, 0x40u) )
  {
    MessageBoxA(0, "ItemMix.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  if ( !TextFilterTable::LoadSlanderFilter() )
  {
    MessageBoxA(0, "FilterSlander InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v118 = Folder::System();
  v119 = Folder::Merge(v118, "MiniHouseFurniture.shn");
  if ( !ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::Load(v119, 1) )
  {
    MessageBoxA(0, "MiniHouseFurniture.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v120 = Folder::System();
  v121 = Folder::Merge(v120, "MiniHouseObjAni.shn");
  if ( !ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::Load(v121, 1) )
  {
    MessageBoxA(0, "MiniHouseObjAni.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v122 = Folder::System();
  v123 = Folder::Merge(v122, "MiniHouseEndure.shn");
  if ( !ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::Load(v123, 1) )
  {
    MessageBoxA(0, "MiniHouseEndure.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v124 = Folder::System();
  v125 = Folder::Merge(v124, "WorldMapAvatarInfo.shn");
  if ( !ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::Load(v125, 1) )
  {
    MessageBoxA(0, "WorldMapAvatarInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v126 = Folder::System();
  v127 = Folder::Merge(v126, "MiniHouseFurnitureObjEffect.shn");
  if ( !ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::Load(v127, 1) )
  {
    MessageBoxA(0, "MiniHouseFurnitureObjEffect.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v128 = Folder::System();
  v129 = Folder::Merge(v128, "TownPortal.shn");
  if ( !ITableBase<TownPortal_TownPortalInfoTable>::Load(v129, 1) )
  {
    MessageBoxA(0, "TownPortal.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v130 = Folder::System();
  v131 = Folder::Merge(v130, "EffectViewInfo.shn");
  if ( !ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::Load(v131, 1) )
  {
    MessageBoxA(0, "EffectViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v132 = Folder::System();
  v133 = Folder::Merge(v132, "GuildTournamentSkillDesc.shn");
  if ( !ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::Load(v133, 1) )
  {
    MessageBoxA(0, "GuildTournamentStateDesc.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v134 = Folder::System();
  v135 = Folder::Merge(v134, "GuildTournamentSkill.shn");
  if ( !ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::Load(v135, 1) )
  {
    MessageBoxA(0, "GuildTournamentState.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v136 = Folder::System();
  v137 = Folder::Merge(v136, "GuildTournamentRequire.shn");
  if ( !ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::Load(v137, 1) )
  {
    MessageBoxA(0, "GuildTournamentRequire.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v138 = Folder::System();
  v139 = Folder::Merge(v138, "ActionEffectInfo.shn");
  if ( !ITableBase<ActionEffectInfo_ActionEffectInfoTab>::Load(v139, 1) )
  {
    MessageBoxA(0, "ActionEffectInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v140 = Folder::System();
  v141 = Folder::Merge(v140, "DiceDividind.shn");
  if ( !ITableBase<DICE_Dividind_DiceDividIndTab>::Load(v141, 1) )
  {
    MessageBoxA(0, "DiceDividind.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v142 = Folder::System();
  v143 = Folder::Merge(v142, "MobRandomIdleAni.shn");
  if ( !ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::Load(v143, 1) )
  {
    MessageBoxA(0, "MobRandomIdleAni.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v144 = Folder::System();
  v145 = Folder::Merge(v144, "GBHouse.shn");
  if ( !ITableBase<GBHouse_GBHouseTab>::Load(v145, 1) )
  {
    MessageBoxA(0, "GBHouse.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v146 = Folder::System();
  v147 = Folder::Merge(v146, "GBDICEDividind.shn");
  if ( !ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::Load(v147, 1) )
  {
    MessageBoxA(0, "GBDICEDividind.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v148 = Folder::System();
  v149 = Folder::Merge(v148, "CharacterTitleStateView.shn");
  if ( !ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::Load(v149, 1) )
  {
    MessageBoxA(0, "CharacterTitleStateView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v150 = Folder::System();
  v151 = Folder::Merge(v150, "MHEmotion.shn");
  if ( !ITableBase<MHEmotion_MiniHouseEmotionTab>::Load(v151, 1) )
  {
    MessageBoxA(0, "MHEmotion.shn!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v152 = Folder::System();
  v153 = Folder::Merge(v152, "MobKillAnnounceText.shn");
  if ( !ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::Load(v153, 1) )
  {
    MessageBoxA(0, "MobKillAnnounceText.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v154 = Folder::System();
  v155 = Folder::Merge(v154, "GTIView.shn");
  if ( !ITableBase<GTIView_GTIViewInfoTab>::Load(v155, 1) )
  {
    MessageBoxA(0, "GTIView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v156 = Folder::System();
  v157 = Folder::Merge(v156, "DamageEffect.shn");
  if ( !ITableBase<DamageEffect_DamageEffectTab>::Load(v157, 1) )
  {
    MessageBoxA(0, "DamageEffect.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v158 = Folder::System();
  v159 = Folder::Merge(v158, "MapWayPoint.shn");
  if ( !ITableBase<MapWayPoint_MapWayPointTab>::Load(v159, 1) )
  {
    MessageBoxA(0, "MapWayPoint.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v160 = Folder::System();
  v161 = Folder::Merge(v160, "MapLinkPoint.shn");
  if ( !ITableBase<MapLinkPoint_MapLinkPointTab>::Load(v161, 1) )
  {
    MessageBoxA(0, "MapLinkPoint.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v162 = Folder::System();
  v163 = Folder::Merge(v162, "BasicInfoTitle.shn");
  if ( !ITableBase<BasicInfoTitle_BasicInfoTitleTab>::Load(v163, 1) )
  {
    MessageBoxA(0, "BasicInfoTitle.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v164 = Folder::System();
  v165 = Folder::Merge(v164, "BasicInfoLink.shn");
  if ( !ITableBase<BasicInfoLink_BasicInfoLinkTab>::Load(v165, 1) )
  {
    MessageBoxA(0, "BasicInfoLink.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v166 = Folder::System();
  v167 = Folder::Merge(v166, "BasicInfoTip.shn");
  if ( !ITableBase<BasicInfoTip_BasicInfoTipTab>::Load(v167, 1) )
  {
    MessageBoxA(0, "BasicInfoTip.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v168 = Folder::System();
  v169 = Folder::Merge(v168, "BasicInfoTipCycle.shn");
  if ( !ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::Load(v169, 1) )
  {
    MessageBoxA(0, "BasicInfoTipCycle.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v170 = Folder::System();
  v171 = Folder::Merge(v170, "BasicInfoFind.shn");
  if ( !ITableBase<BasicInfoFind_BasicInfoFindTab>::Load(v171, 1) )
  {
    MessageBoxA(0, "BasicInfoFind.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v172 = Folder::System();
  v173 = Folder::Merge(v172, "BasicInfoFindUI.shn");
  if ( !ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::Load(v173, 1) )
  {
    MessageBoxA(0, "BasicInfoFindUI.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v174 = Folder::System();
  v175 = Folder::Merge(v174, "BasicInfoFindWord.shn");
  if ( !ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::Load(v175, 1) )
  {
    MessageBoxA(0, "BasicInfoFindWord.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v176 = Folder::System();
  v177 = Folder::Merge(v176, "BelongTypeInfo.shn");
  if ( !ITableBase<BelongTypeInfo_BelongTypeInfoTab>::Load(v177, 1) )
  {
    MessageBoxA(0, "BelongTypeInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v178 = Folder::System();
  v179 = Folder::Merge(v178, "ChargedIconItem.shn");
  if ( !ITableBase<ChargedIconItem_ChargedIconItemTab>::Load(v179, 1) )
  {
    MessageBoxA(0, "ChargedIconItem.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v180 = Folder::System();
  v181 = Folder::Merge(v180, "ChargedMessageItem.shn");
  if ( !ITableBase<ChargedMessageItem_ChargedMsgItemTab>::Load(v181, 1) )
  {
    MessageBoxA(0, "ChargedMessageItem.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v182 = Folder::System();
  v183 = Folder::Merge(v182, "ChargedDeletableBuff.shn");
  if ( !ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::Load(v183, 1) )
  {
    MessageBoxA(0, "ChargedDeletableBuff.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v184 = Folder::System();
  v185 = Folder::Merge(v184, "CollectCard.shn");
  if ( !ITableBase<CollectCard_CollectCardTab>::Load(v185, 1) )
  {
    MessageBoxA(0, "CollectCard.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v186 = Folder::System();
  v187 = Folder::Merge(v186, "CollectCardView.shn");
  if ( !ITableBase<CollectCardView_CollectCardViewTab>::Load(v187, 1) )
  {
    MessageBoxA(0, "CollectCardView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v188 = Folder::System();
  v189 = Folder::Merge(v188, "CollectCardGroupDesc.shn");
  if ( !ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::Load(v189, 1) )
  {
    MessageBoxA(0, "CollectCardGroupDesc.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v190 = Folder::System();
  v191 = Folder::Merge(v190, "CollectCardReward.shn");
  if ( !ITableBase<CollectCardReward_CollectCardRewardTab>::Load(v191, 1) )
  {
    MessageBoxA(0, "CollectCardReward.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v192 = Folder::System();
  v193 = Folder::Merge(v192, "CollectCardTitle.shn");
  if ( !ITableBase<CollectCardTitle_CollectCardTitleTab>::Load(v193, 1) )
  {
    MessageBoxA(0, "CollectCardTitle.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v194 = Folder::System();
  v195 = Folder::Merge(v194, "ScriptMsg.shn");
  if ( !ITableBase<ScriptMsg_ScriptMsgTab>::Load(v195, 1) )
  {
    MessageBoxA(0, "ScriptMsg.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v196 = Folder::System();
  v197 = Folder::Merge(v196, "FaceCutMsg.shn");
  if ( !FaceCutMsgTab::Load(v197, 1) )
  {
    MessageBoxA(0, "FaceCutMsg.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v198 = Folder::System();
  v199 = Folder::Merge(v198, "AttendReward.shn");
  if ( !ITableBase<AttendReward_AttendRewardTab>::Load(v199, 1) )
  {
    MessageBoxA(0, "AttendReward.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v200 = Folder::System();
  v201 = Folder::Merge(v200, "KQVoteDesc.shn");
  if ( !ITableBase<KQVoteDesc_KQVoteDescTable>::Load(v201, 1) )
  {
    MessageBoxA(0, "KQVoteDesc.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v202 = Folder::System();
  v203 = Folder::Merge(v202, "KQVoteMajorityRate.shn");
  if ( !ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::Load(v203, 1) )
  {
    MessageBoxA(0, "KQVoteMajorityRate.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v204 = Folder::System();
  v205 = Folder::Merge(v204, "KQIsVote.shn");
  if ( !ITableBase<KQIsVote_KQIsVoteTable>::Load(v205, 1) )
  {
    MessageBoxA(0, "KQIsVote.shn. InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v206 = Folder::System();
  v207 = Folder::Merge(v206, "KQTeam.shn");
  if ( !ITableBase<KQTeam_KQTeamTable>::Load(v207, 1) )
  {
    MessageBoxA(0, "KQTeam.shn. InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v208 = Folder::System();
  v209 = Folder::Merge(v208, "SingleData.shn");
  if ( !CSingleDataMap::InitSingleDataArray(&g_kSingleDataMap, v209, 7u, 0x22u) )
  {
    MessageBoxA(0, "SingleData.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v210 = Folder::System();
  v211 = Folder::Merge(v210, "MobConditionView.shn");
  if ( !ITableBase<MobConditionView_MobConditionViewTab>::Load(v211, 1) )
  {
    MessageBoxA(0, "MobConditionView.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v212 = Folder::System();
  v213 = Folder::Merge(v212, "MobNoFadeIn.shn");
  if ( !ITableBase<MobNoFadeIn_MobNoFadeInTab>::Load(v213, 1) )
  {
    MessageBoxA(0, "MobNoFadeIn.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v214 = Folder::System();
  v215 = Folder::Merge(v214, "MarketSearchInfo.shn");
  if ( !ITableBase<MarketSearchInfo_MarketSearchInfoTab>::Load(v215, 1) )
  {
    MessageBoxA(0, "MarketSearchInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v216 = Folder::System();
  v217 = Folder::Merge(v216, "ChrCreateEquip.shn");
  if ( !ITableBase<ChrCreateEquip_ChrCreateEquipTab>::Load(v217, 1) )
  {
    MessageBoxA(0, "ChrCreateEquip.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v218 = Folder::System();
  v219 = Folder::Merge(v218, "ItemMoney.shn");
  if ( !ITableBase<ItemMoney_ItemMoneyTab>::Load(v219, 1) )
  {
    MessageBoxA(0, "ItemMoney.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v220 = Folder::System();
  v221 = Folder::Merge(v220, "ChatColor.shn");
  if ( !ITableBase<ChatColor_ChatColorTab>::Load(v221, 1) )
  {
    MessageBoxA(0, "ChatColorTab.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v222 = Folder::System();
  v223 = Folder::Merge(v222, "TermExtendMatch.shn");
  if ( !ITableBase<TermExtendMatch_TermExtendMatchTable>::Load(v223, 1) )
  {
    MessageBoxA(0, "TermExtendMatch.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v224 = Folder::System();
  v225 = Folder::Merge(v224, "TermExtendMatchGroupDesc.shn");
  if ( !ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::Load(v225, 1) )
  {
    MessageBoxA(0, "TermExtendMatchGroupDesc.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v226 = Folder::System();
  v227 = Folder::Merge(v226, "AbStateMsg.shn");
  if ( !ITableBase<AbStateMsg_AbStateMsgTable>::Load(v227, 1) )
  {
    MessageBoxA(0, "AbStateMsg.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v228 = Folder::System();
  v229 = Folder::Merge(v228, "MinimonInfo.shn");
  if ( !ITableBase<MinimonInfo_MinimonInfoTable>::Load(v229, 1) )
  {
    MessageBoxA(0, "MinimonInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v230 = Folder::System();
  v231 = Folder::Merge(v230, "MinimonAutoUseItem.shn");
  if ( !ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::Load(v231, 1) )
  {
    MessageBoxA(0, "MinimonAutoUseItem.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v232 = Folder::System();
  v233 = Folder::Merge(v232, "UseClassTypeInfo.shn");
  if ( !ITableBase<UseClassTypeInfo_UseCalssTypeTable>::Load(v233, 1) )
  {
    MessageBoxA(0, "UseClassTypeInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v234 = Folder::System();
  v235 = Folder::Merge(v234, "ChrBasicEquip.shn");
  if ( !ITableBase<ChrBasicEquip_ChrBasicEquipTab>::Load(v235, 1) )
  {
    MessageBoxA(0, "ChrBasicEquip.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  v236 = Folder::System();
  v237 = Folder::Merge(v236, "BRAccUpgradeInfo.shn");
  if ( !ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::Load(v237, 1) )
  {
    MessageBoxA(0, "BRAccUpgradeInfo.shn InitError!!", "Application Initialize Error!", 0x10u);
    return 0;
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00461280) --------------------------------------------------------
void __thiscall Name3::Name3(Name3 *this, const char *str)
{
  *(_QWORD *)&this->n3_name[4] = 0i64;
  *(_DWORD *)&this->n3_name[0] = 0;
  strncpy(this->n3_name, (char *)str, 0xCu);
}

//----- (004612B0) --------------------------------------------------------
bool __thiscall IIDTableBase<PassiveSkillInfo_PasSkillInfoTab_unsigned_short>::DataProcess(IIDTableBase<SubAbStateInfo,SubAbStateInfoTab,unsigned short> *this)
{
  IIDTableBase<SubAbStateInfo,SubAbStateInfoTab,unsigned short> *v1; // esi@1
  unsigned int i; // edi@1
  CDataReader::HEAD *v3; // eax@2
  void *v4; // eax@4
  signed int v5; // eax@4
  bool result; // al@8
  void *v7; // eax@11
  unsigned int j; // edi@11
  CDataReader::HEAD *v9; // eax@12
  void *v10; // eax@14
  unsigned __int16 v11; // ST1C_2@14
  signed int iMostLargeID; // [sp+10h] [bp-4h]@1

  v1 = this;
  iMostLargeID = -1;
  for ( i = 0; ; ++i )
  {
    v3 = v1->baseclass_0.m_kDataReader.m_pHead;
    if ( !v3 )
      break;
    if ( i >= v3->nNumOfRecord )
      break;
    v4 = CDataReader::GetRecord(&v1->baseclass_0.m_kDataReader, i);
    v5 = (unsigned __int16)((int (__thiscall *)(_DWORD, _DWORD))v1->baseclass_0.vfptr[1].BeforeTerminate)(v1, v4);
    if ( (unsigned __int16)v5 > iMostLargeID )
      iMostLargeID = v5;
  }
  if ( iMostLargeID >= 0 )
  {
    if ( v1->m_pkRecordIDMap )
      operator delete__(v1->m_pkRecordIDMap);
    v7 = operator new__(4 * (iMostLargeID + 1));
    v1->m_pkRecordIDMap = (SubAbStateInfo **)v7;
    memset((char *)v7, 0, 4 * iMostLargeID + 4);
    for ( j = 0; ; ++j )
    {
      v9 = v1->baseclass_0.m_kDataReader.m_pHead;
      if ( !v9 )
        break;
      if ( j >= v9->nNumOfRecord )
        break;
      v10 = CDataReader::GetRecord(&v1->baseclass_0.m_kDataReader, j);
      v11 = ((int (__thiscall *)(_DWORD, _DWORD))v1->baseclass_0.vfptr[1].BeforeTerminate)(v1, v10);
      v1->m_pkRecordIDMap[v11] = (SubAbStateInfo *)CDataReader::GetRecord(&v1->baseclass_0.m_kDataReader, j);
    }
    v1->m_tMostLargeID = iMostLargeID;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004613B0) --------------------------------------------------------
void *__thiscall ITableBase<RaceName_CharRace>::_scalar_deleting_destructor_(CharRace *this, unsigned int a2)
{
  CharRace *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<RaceName,CharRace>Vtbl *)&ITableBase<RaceName_CharRace>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987E6C: using guessed type int (__cdecl *ITableBase_RaceName_CharRace____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461430) --------------------------------------------------------
void *__thiscall ITableBase<MapInfo_MapInfoTab>::_scalar_deleting_destructor_(ITableBase<MapInfo,MapInfoTab> *this, unsigned int a2)
{
  ITableBase<MapInfo,MapInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<MapInfo,MapInfoTab>Vtbl *)&ITableBase<MapInfo_MapInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987E7C: using guessed type int (__cdecl *ITableBase_MapInfo_MapInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004614B0) --------------------------------------------------------
void *__thiscall MapInfoTab::_vector_deleting_destructor_(MapInfoTab *this, unsigned int a2)
{
  MapInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MapInfo,MapInfoTab>Vtbl *)&IIDTableBase<MapInfo_MapInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<MapInfo,MapInfoTab>Vtbl *)&ITableBase<MapInfo_MapInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987E7C: using guessed type int (__cdecl *ITableBase_MapInfo_MapInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 987E8C: using guessed type int (__cdecl *IIDTableBase_MapInfo_MapInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461540) --------------------------------------------------------
void *__thiscall ITableBase<MapViewInfo_MapViewInfoTab>::_vector_deleting_destructor_(ITableBase<MapViewInfo,MapViewInfoTab> *this, unsigned int a2)
{
  ITableBase<MapViewInfo,MapViewInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<MapViewInfo,MapViewInfoTab>Vtbl *)&ITableBase<MapViewInfo_MapViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987EA4: using guessed type int (__cdecl *ITableBase_MapViewInfo_MapViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004615C0) --------------------------------------------------------
void *__thiscall ITableBase<UpGradeInfo_UpGradeInfoTab>::_scalar_deleting_destructor_(ITableBase<UpGradeInfo,UpGradeInfoTab> *this, unsigned int a2)
{
  ITableBase<UpGradeInfo,UpGradeInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<UpGradeInfo,UpGradeInfoTab>Vtbl *)&ITableBase<UpGradeInfo_UpGradeInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987ECC: using guessed type int (__cdecl *ITableBase_UpGradeInfo_UpGradeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461640) --------------------------------------------------------
void *__thiscall ITableBase<ActionViewInfo_ActionViewTable>::_scalar_deleting_destructor_(ITableBase<ActionViewInfo,ActionViewTable> *this, unsigned int a2)
{
  ITableBase<ActionViewInfo,ActionViewTable> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<ActionViewInfo,ActionViewTable>Vtbl *)&ITableBase<ActionViewInfo_ActionViewTable>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F14: using guessed type int (__cdecl *ITableBase_ActionViewInfo_ActionViewTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004616C0) --------------------------------------------------------
void *__thiscall ActionViewTable::_scalar_deleting_destructor_(ActionViewTable *this, unsigned int a2)
{
  ActionViewTable *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ActionViewInfo,ActionViewTable>Vtbl *)&IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<ActionViewInfo,ActionViewTable>Vtbl *)&ITableBase<ActionViewInfo_ActionViewTable>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F14: using guessed type int (__cdecl *ITableBase_ActionViewInfo_ActionViewTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 987F24: using guessed type int (__cdecl *IIDTableBase_ActionViewInfo_ActionViewTable_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461750) --------------------------------------------------------
void *__thiscall ITableBase<ProduceInfo_ProduceInfoTable>::_scalar_deleting_destructor_(ProduceInfoTable *this, unsigned int a2)
{
  ProduceInfoTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ProduceInfo,ProduceInfoTable>Vtbl *)&ITableBase<ProduceInfo_ProduceInfoTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F3C: using guessed type int (__cdecl *ITableBase_ProduceInfo_ProduceInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004617D0) --------------------------------------------------------
void *__thiscall GatherInfoTable::_vector_deleting_destructor_(GatherInfoTable *this, unsigned int a2)
{
  GatherInfoTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GatherInfo,GatherInfoTable>Vtbl *)&ITableBase<GatherInfo_GatherInfoTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F4C: using guessed type int (__cdecl *ITableBase_GatherInfo_GatherInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461850) --------------------------------------------------------
void *__thiscall ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::_scalar_deleting_destructor_(KQDescTable *this, unsigned int a2)
{
  KQDescTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<KINGDOM_QUEST_DESC,KQDescTable>Vtbl *)&ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F5C: using guessed type int (__cdecl *ITableBase_KINGDOM_QUEST_DESC_KQDescTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004618D0) --------------------------------------------------------
void *__thiscall ProduceViewInfoTable::_vector_deleting_destructor_(ProduceViewInfoTable *this, unsigned int a2)
{
  ProduceViewInfoTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ProduceViewInfo,ProduceViewInfoTable>Vtbl *)&ITableBase<ProduceViewInfo_ProduceViewInfoTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F6C: using guessed type int (__cdecl *ITableBase_ProduceViewInfo_ProduceViewInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461950) --------------------------------------------------------
void *__thiscall GradeItemOptionTab::_scalar_deleting_destructor_(GradeItemOptionTab *this, unsigned int a2)
{
  GradeItemOptionTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GradeItemOption,GradeItemOptionTab>Vtbl *)&ITableBase<GradeItemOption_GradeItemOptionTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F8C: using guessed type int (__cdecl *ITableBase_GradeItemOption_GradeItemOptionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004619D0) --------------------------------------------------------
void *__thiscall ITableBase<MiniHouse_MiniHouseTable>::_scalar_deleting_destructor_(MiniHouseTable *this, unsigned int a2)
{
  MiniHouseTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouse,MiniHouseTable>Vtbl *)&ITableBase<MiniHouse_MiniHouseTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F9C: using guessed type int (__cdecl *ITableBase_MiniHouse_MiniHouseTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461A50) --------------------------------------------------------
void *__thiscall ItemShopViewTable::_vector_deleting_destructor_(ItemShopViewTable *this, unsigned int a2)
{
  ItemShopViewTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemShopView,ItemShopViewTable>Vtbl *)&ITableBase<ItemShopView_ItemShopViewTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987FAC: using guessed type int (__cdecl *ITableBase_ItemShopView_ItemShopViewTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461AD0) --------------------------------------------------------
void *__thiscall ITableBase<RIDING_RidePetTable>::_vector_deleting_destructor_(ITableBase<RIDING,RidePetTable> *this, unsigned int a2)
{
  ITableBase<RIDING,RidePetTable> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<RIDING,RidePetTable>Vtbl *)&ITableBase<RIDING_RidePetTable>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987FBC: using guessed type int (__cdecl *ITableBase_RIDING_RidePetTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461B50) --------------------------------------------------------
void *__thiscall ITableBase<ItemDismantle_ItemDismantleTab>::_vector_deleting_destructor_(ItemDismantleTab *this, unsigned int a2)
{
  ItemDismantleTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemDismantle,ItemDismantleTab>Vtbl *)&ITableBase<ItemDismantle_ItemDismantleTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988004: using guessed type int (__cdecl *ITableBase_ItemDismantle_ItemDismantleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461BD0) --------------------------------------------------------
void *__thiscall ITableBase<SetEffect_SetEffectTab>::_vector_deleting_destructor_(SetEffectTab *this, unsigned int a2)
{
  SetEffectTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<SetEffect,SetEffectTab>Vtbl *)&ITableBase<SetEffect_SetEffectTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988044: using guessed type int (__cdecl *ITableBase_SetEffect_SetEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461C50) --------------------------------------------------------
void *__thiscall ItemActionEffectTab::_scalar_deleting_destructor_(ItemActionEffectTab *this, unsigned int a2)
{
  ItemActionEffectTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemActionEffect,ItemActionEffectTab>Vtbl *)&ITableBase<ItemActionEffect_ItemActionEffectTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988074: using guessed type int (__cdecl *ITableBase_ItemActionEffect_ItemActionEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461CD0) --------------------------------------------------------
void *__thiscall ItemActionConditionTab::_scalar_deleting_destructor_(ItemActionConditionTab *this, unsigned int a2)
{
  ItemActionConditionTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemActionCondition,ItemActionConditionTab>Vtbl *)&ITableBase<ItemActionCondition_ItemActionConditionTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988084: using guessed type int (__cdecl *ITableBase_ItemActionCondition_ItemActionConditionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461D50) --------------------------------------------------------
void *__thiscall GuildTournamentStateTab::_vector_deleting_destructor_(GuildTournamentStateTab *this, unsigned int a2)
{
  GuildTournamentStateTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_SKILL,GuildTournamentStateTab>Vtbl *)&ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9880A4: using guessed type int (__cdecl *ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461DD0) --------------------------------------------------------
void *__thiscall GBDiceDividIndTab::_scalar_deleting_destructor_(GBDiceDividIndTab *this, unsigned int a2)
{
  GBDiceDividIndTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GB_DICE_Dividind,GBDiceDividIndTab>Vtbl *)&ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9880D4: using guessed type int (__cdecl *ITableBase_GB_DICE_Dividind_GBDiceDividIndTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461E50) --------------------------------------------------------
void *__thiscall GBHouseTab::_scalar_deleting_destructor_(GBHouseTab *this, unsigned int a2)
{
  GBHouseTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GBHouse,GBHouseTab>Vtbl *)&ITableBase<GBHouse_GBHouseTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9880E4: using guessed type int (__cdecl *ITableBase_GBHouse_GBHouseTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461ED0) --------------------------------------------------------
void *__thiscall ITableBase<MobCoordinate_MobCoordinateTab>::_vector_deleting_destructor_(ITableBase<MobCoordinate,MobCoordinateTab> *this, unsigned int a2)
{
  ITableBase<MobCoordinate,MobCoordinateTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<MobCoordinate,MobCoordinateTab>Vtbl *)&ITableBase<MobCoordinate_MobCoordinateTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988114: using guessed type int (__cdecl *ITableBase_MobCoordinate_MobCoordinateTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461F50) --------------------------------------------------------
void *__thiscall MobCoordinateTab::_vector_deleting_destructor_(MobCoordinateTab *this, unsigned int a2)
{
  MobCoordinateTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobCoordinate,MobCoordinateTab>Vtbl *)&IIDTableBase<MobCoordinate_MobCoordinateTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<MobCoordinate,MobCoordinateTab>Vtbl *)&ITableBase<MobCoordinate_MobCoordinateTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988114: using guessed type int (__cdecl *ITableBase_MobCoordinate_MobCoordinateTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988124: using guessed type int (__cdecl *IIDTableBase_MobCoordinate_MobCoordinateTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00461FE0) --------------------------------------------------------
void *__thiscall ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::_scalar_deleting_destructor_(ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab> *this, unsigned int a2)
{
  ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab>Vtbl *)&ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98813C: using guessed type int (__cdecl *ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462060) --------------------------------------------------------
void *__thiscall IIDTableBase<MobKillAnnounceText_MobKillAnnounceTextTab_unsigned_short>::_scalar_deleting_destructor_(MobKillAnnounceTextTab *this, unsigned int a2)
{
  MobKillAnnounceTextTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab>Vtbl *)&IIDTableBase<MobKillAnnounceText_MobKillAnnounceTextTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab>Vtbl *)&ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98813C: using guessed type int (__cdecl *ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 98814C: using guessed type int (__cdecl *IIDTableBase_MobKillAnnounceText_MobKillAnnounceTextTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004620F0) --------------------------------------------------------
void *__thiscall ITableBase<GTIView_GTIViewInfoTab>::_vector_deleting_destructor_(GTIViewInfoTab *this, unsigned int a2)
{
  GTIViewInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GTIView,GTIViewInfoTab>Vtbl *)&ITableBase<GTIView_GTIViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988164: using guessed type int (__cdecl *ITableBase_GTIView_GTIViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462170) --------------------------------------------------------
void *__thiscall DamageEffectTab::_vector_deleting_destructor_(DamageEffectTab *this, unsigned int a2)
{
  DamageEffectTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<DamageEffect,DamageEffectTab>Vtbl *)&ITableBase<DamageEffect_DamageEffectTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988174: using guessed type int (__cdecl *ITableBase_DamageEffect_DamageEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004621F0) --------------------------------------------------------
void *__thiscall ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::_scalar_deleting_destructor_(ActiveSkillGroupTab *this, unsigned int a2)
{
  ActiveSkillGroupTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ActiveSkillGroup,ActiveSkillGroupTab>Vtbl *)&ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988184: using guessed type int (__cdecl *ITableBase_ActiveSkillGroup_ActiveSkillGroupTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462270) --------------------------------------------------------
void *__thiscall MapWayPointTab::_vector_deleting_destructor_(MapWayPointTab *this, unsigned int a2)
{
  MapWayPointTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MapWayPoint,MapWayPointTab>Vtbl *)&ITableBase<MapWayPoint_MapWayPointTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988194: using guessed type int (__cdecl *ITableBase_MapWayPoint_MapWayPointTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004622F0) --------------------------------------------------------
void *__thiscall ITableBase<MapLinkPoint_MapLinkPointTab>::_vector_deleting_destructor_(MapLinkPointTab *this, unsigned int a2)
{
  MapLinkPointTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MapLinkPoint,MapLinkPointTab>Vtbl *)&ITableBase<MapLinkPoint_MapLinkPointTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9881A4: using guessed type int (__cdecl *ITableBase_MapLinkPoint_MapLinkPointTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462370) --------------------------------------------------------
void *__thiscall ITableBase<ChargedIconItem_ChargedIconItemTab>::_scalar_deleting_destructor_(ITableBase<ChargedIconItem,ChargedIconItemTab> *this, unsigned int a2)
{
  ITableBase<ChargedIconItem,ChargedIconItemTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<ChargedIconItem,ChargedIconItemTab>Vtbl *)&ITableBase<ChargedIconItem_ChargedIconItemTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9881C4: using guessed type int (__cdecl *ITableBase_ChargedIconItem_ChargedIconItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004623F0) --------------------------------------------------------
void *__thiscall ITableBase<ChargedMessageItem_ChargedMsgItemTab>::_vector_deleting_destructor_(ITableBase<ChargedMessageItem,ChargedMsgItemTab> *this, unsigned int a2)
{
  ITableBase<ChargedMessageItem,ChargedMsgItemTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<ChargedMessageItem,ChargedMsgItemTab>Vtbl *)&ITableBase<ChargedMessageItem_ChargedMsgItemTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9881EC: using guessed type int (__cdecl *ITableBase_ChargedMessageItem_ChargedMsgItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462470) --------------------------------------------------------
void *__thiscall IIDTableBase<ChargedMessageItem_ChargedMsgItemTab_unsigned_short>::_scalar_deleting_destructor_(ChargedMsgItemTab *this, unsigned int a2)
{
  ChargedMsgItemTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedMessageItem,ChargedMsgItemTab>Vtbl *)&IIDTableBase<ChargedMessageItem_ChargedMsgItemTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedMessageItem,ChargedMsgItemTab>Vtbl *)&ITableBase<ChargedMessageItem_ChargedMsgItemTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9881EC: using guessed type int (__cdecl *ITableBase_ChargedMessageItem_ChargedMsgItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9881FC: using guessed type int (__cdecl *IIDTableBase_ChargedMessageItem_ChargedMsgItemTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462500) --------------------------------------------------------
void *__thiscall BasicInfoFindUITab::_vector_deleting_destructor_(BasicInfoFindUITab *this, unsigned int a2)
{
  BasicInfoFindUITab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoFindUI,BasicInfoFindUITab>Vtbl *)&ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988274: using guessed type int (__cdecl *ITableBase_BasicInfoFindUI_BasicInfoFindUITab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462580) --------------------------------------------------------
void *__thiscall BasicInfoFindWordTab::_scalar_deleting_destructor_(BasicInfoFindWordTab *this, unsigned int a2)
{
  BasicInfoFindWordTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoFindWord,BasicInfoFindWordTab>Vtbl *)&ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988284: using guessed type int (__cdecl *ITableBase_BasicInfoFindWord_BasicInfoFindWordTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462600) --------------------------------------------------------
void *__thiscall CollectCardTab::_scalar_deleting_destructor_(CollectCardTab *this, unsigned int a2)
{
  CollectCardTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCard,CollectCardTab>Vtbl *)&ITableBase<CollectCard_CollectCardTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988294: using guessed type int (__cdecl *ITableBase_CollectCard_CollectCardTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462680) --------------------------------------------------------
void *__thiscall CollectCardGroupDescTab::_scalar_deleting_destructor_(CollectCardGroupDescTab *this, unsigned int a2)
{
  CollectCardGroupDescTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardGroupDesc,CollectCardGroupDescTab>Vtbl *)&ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9882B4: using guessed type int (__cdecl *ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462700) --------------------------------------------------------
void *__thiscall CollectCardTitleTab::_vector_deleting_destructor_(CollectCardTitleTab *this, unsigned int a2)
{
  CollectCardTitleTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardTitle,CollectCardTitleTab>Vtbl *)&ITableBase<CollectCardTitle_CollectCardTitleTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9882D4: using guessed type int (__cdecl *ITableBase_CollectCardTitle_CollectCardTitleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462780) --------------------------------------------------------
void *__thiscall ITableBase<AttendReward_AttendRewardTab>::_vector_deleting_destructor_(ITableBase<AttendReward,AttendRewardTab> *this, unsigned int a2)
{
  ITableBase<AttendReward,AttendRewardTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<AttendReward,AttendRewardTab>Vtbl *)&ITableBase<AttendReward_AttendRewardTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9882E4: using guessed type int (__cdecl *ITableBase_AttendReward_AttendRewardTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462800) --------------------------------------------------------
void *__thiscall MoverMainTab::_scalar_deleting_destructor_(MoverMainTab *this, unsigned int a2)
{
  MoverMainTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverMain,MoverMainTab>Vtbl *)&ITableBase<MoverMain_MoverMainTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98830C: using guessed type int (__cdecl *ITableBase_MoverMain_MoverMainTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462880) --------------------------------------------------------
void *__thiscall ITableBase<MoverHG_MoverHGTab>::_vector_deleting_destructor_(MoverHGTab *this, unsigned int a2)
{
  MoverHGTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverHG,MoverHGTab>Vtbl *)&ITableBase<MoverHG_MoverHGTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98832C: using guessed type int (__cdecl *ITableBase_MoverHG_MoverHGTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462900) --------------------------------------------------------
void *__thiscall ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::_vector_deleting_destructor_(MoverSlotCharAniTab *this, unsigned int a2)
{
  MoverSlotCharAniTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverSlotCharAni,MoverSlotCharAniTab>Vtbl *)&ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98835C: using guessed type int (__cdecl *ITableBase_MoverSlotCharAni_MoverSlotCharAniTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462980) --------------------------------------------------------
void *__thiscall ITableBase<MoverItem_MoverItemTab>::_vector_deleting_destructor_(MoverItemTab *this, unsigned int a2)
{
  MoverItemTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverItem,MoverItemTab>Vtbl *)&ITableBase<MoverItem_MoverItemTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98837C: using guessed type int (__cdecl *ITableBase_MoverItem_MoverItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462A00) --------------------------------------------------------
void *__thiscall ITableBase<PupMain_PetMainTab>::_vector_deleting_destructor_(PetMainTab *this, unsigned int a2)
{
  PetMainTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<PupMain,PetMainTab>Vtbl *)&ITableBase<PupMain_PetMainTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98838C: using guessed type int (__cdecl *ITableBase_PupMain_PetMainTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462A80) --------------------------------------------------------
void *__thiscall ITableBase<KQIsVote_KQIsVoteTable>::_scalar_deleting_destructor_(KQIsVoteTable *this, unsigned int a2)
{
  KQIsVoteTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<KQIsVote,KQIsVoteTable>Vtbl *)&ITableBase<KQIsVote_KQIsVoteTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9883CC: using guessed type int (__cdecl *ITableBase_KQIsVote_KQIsVoteTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462B00) --------------------------------------------------------
void *__thiscall MobConditionViewTab::_vector_deleting_destructor_(MobConditionViewTab *this, unsigned int a2)
{
  MobConditionViewTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MobConditionView,MobConditionViewTab>Vtbl *)&ITableBase<MobConditionView_MobConditionViewTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9883EC: using guessed type int (__cdecl *ITableBase_MobConditionView_MobConditionViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462B80) --------------------------------------------------------
void *__thiscall MoverUpgradeEffectTab::_scalar_deleting_destructor_(MoverUpgradeEffectTab *this, unsigned int a2)
{
  MoverUpgradeEffectTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverUpgradeEffect,MoverUpgradeEffectTab>Vtbl *)&ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98842C: using guessed type int (__cdecl *ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462C00) --------------------------------------------------------
void *__thiscall ChatColorTab::_scalar_deleting_destructor_(ChatColorTab *this, unsigned int a2)
{
  ChatColorTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ChatColor,ChatColorTab>Vtbl *)&ITableBase<ChatColor_ChatColorTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98843C: using guessed type int (__cdecl *ITableBase_ChatColor_ChatColorTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462C80) --------------------------------------------------------
void *__thiscall MinimonInfoTable::_scalar_deleting_destructor_(MinimonInfoTable *this, unsigned int a2)
{
  MinimonInfoTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MinimonInfo,MinimonInfoTable>Vtbl *)&ITableBase<MinimonInfo_MinimonInfoTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98847C: using guessed type int (__cdecl *ITableBase_MinimonInfo_MinimonInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462D00) --------------------------------------------------------
void *__thiscall ITableBase<UseClassTypeInfo_UseCalssTypeTable>::_scalar_deleting_destructor_(UseCalssTypeTable *this, unsigned int a2)
{
  UseCalssTypeTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<UseClassTypeInfo,UseCalssTypeTable>Vtbl *)&ITableBase<UseClassTypeInfo_UseCalssTypeTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9884AC: using guessed type int (__cdecl *ITableBase_UseClassTypeInfo_UseCalssTypeTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462D80) --------------------------------------------------------
void *__thiscall ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::_vector_deleting_destructor_(ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab> *this, unsigned int a2)
{
  ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab>Vtbl *)&ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9884CC: using guessed type int (__cdecl *ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462E00) --------------------------------------------------------
void *__thiscall BRAccUpgradeInfoTab::_scalar_deleting_destructor_(BRAccUpgradeInfoTab *this, unsigned int a2)
{
  BRAccUpgradeInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab>Vtbl *)&IIDTableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab>Vtbl *)&ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9884CC: using guessed type int (__cdecl *ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9884DC: using guessed type int (__cdecl *IIDTableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462E90) --------------------------------------------------------
void *__thiscall ITableBase<ItemInfo_ItemInfoTab>::_vector_deleting_destructor_(ITableBase<ItemInfo,ItemInfoTab> *this, unsigned int a2)
{
  ITableBase<ItemInfo,ItemInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<ItemInfo,ItemInfoTab>Vtbl *)&ITableBase<ItemInfo_ItemInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988504: using guessed type int (__cdecl *ITableBase_ItemInfo_ItemInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462F10) --------------------------------------------------------
void *__thiscall IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::_scalar_deleting_destructor_(ItemInfoTab *this, unsigned int a2)
{
  ItemInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemInfo,ItemInfoTab>Vtbl *)&IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemInfo,ItemInfoTab>Vtbl *)&ITableBase<ItemInfo_ItemInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988504: using guessed type int (__cdecl *ITableBase_ItemInfo_ItemInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988514: using guessed type int (__cdecl *IIDTableBase_ItemInfo_ItemInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00462FA0) --------------------------------------------------------
void *__thiscall ITableBase<ItemViewInfo_ItemViewInfoTab>::_scalar_deleting_destructor_(ITableBase<ItemViewInfo,ItemViewInfoTab> *this, unsigned int a2)
{
  ITableBase<ItemViewInfo,ItemViewInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<ItemViewInfo,ItemViewInfoTab>Vtbl *)&ITableBase<ItemViewInfo_ItemViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98852C: using guessed type int (__cdecl *ITableBase_ItemViewInfo_ItemViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463020) --------------------------------------------------------
void *__thiscall ITableBase<HairColorInfo_HairColorInfoTab>::_vector_deleting_destructor_(HairColorInfoTab *this, unsigned int a2)
{
  HairColorInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<HairColorInfo,HairColorInfoTab>Vtbl *)&ITableBase<HairColorInfo_HairColorInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9885A4: using guessed type int (__cdecl *ITableBase_HairColorInfo_HairColorInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004630A0) --------------------------------------------------------
void *__thiscall ITableBase<MobInfo_MobInfoTab>::_vector_deleting_destructor_(ITableBase<MobInfo,MobInfoTab> *this, unsigned int a2)
{
  ITableBase<MobInfo,MobInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<MobInfo,MobInfoTab>Vtbl *)&ITableBase<MobInfo_MobInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9885B4: using guessed type int (__cdecl *ITableBase_MobInfo_MobInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463120) --------------------------------------------------------
void *__thiscall IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::_vector_deleting_destructor_(MobInfoTab *this, unsigned int a2)
{
  MobInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobInfo,MobInfoTab>Vtbl *)&IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<MobInfo,MobInfoTab>Vtbl *)&ITableBase<MobInfo_MobInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9885B4: using guessed type int (__cdecl *ITableBase_MobInfo_MobInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9885C4: using guessed type int (__cdecl *IIDTableBase_MobInfo_MobInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004631B0) --------------------------------------------------------
void *__thiscall ITableBase<MobViewInfo_MobViewInfoTab>::_scalar_deleting_destructor_(ITableBase<MobViewInfo,MobViewInfoTab> *this, unsigned int a2)
{
  ITableBase<MobViewInfo,MobViewInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<MobViewInfo,MobViewInfoTab>Vtbl *)&ITableBase<MobViewInfo_MobViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9885DC: using guessed type int (__cdecl *ITableBase_MobViewInfo_MobViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463230) --------------------------------------------------------
void *__thiscall MobViewInfoTab::_vector_deleting_destructor_(MobViewInfoTab *this, unsigned int a2)
{
  MobViewInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobViewInfo,MobViewInfoTab>Vtbl *)&IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<MobViewInfo,MobViewInfoTab>Vtbl *)&ITableBase<MobViewInfo_MobViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9885DC: using guessed type int (__cdecl *ITableBase_MobViewInfo_MobViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9885EC: using guessed type int (__cdecl *IIDTableBase_MobViewInfo_MobViewInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004632C0) --------------------------------------------------------
void *__thiscall ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::_scalar_deleting_destructor_(ITableBase<CharNPC_ViewInfo,NPCViewInfoTab> *this, unsigned int a2)
{
  ITableBase<CharNPC_ViewInfo,NPCViewInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<CharNPC_ViewInfo,NPCViewInfoTab>Vtbl *)&ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988604: using guessed type int (__cdecl *ITableBase_CharNPC_ViewInfo_NPCViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463340) --------------------------------------------------------
void *__thiscall IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::_scalar_deleting_destructor_(NPCViewInfoTab *this, unsigned int a2)
{
  NPCViewInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<CharNPC_ViewInfo,NPCViewInfoTab>Vtbl *)&IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<CharNPC_ViewInfo,NPCViewInfoTab>Vtbl *)&ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988604: using guessed type int (__cdecl *ITableBase_CharNPC_ViewInfo_NPCViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988614: using guessed type int (__cdecl *IIDTableBase_CharNPC_ViewInfo_NPCViewInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004633D0) --------------------------------------------------------
void *__thiscall ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::_scalar_deleting_destructor_(MHFurnitureObjEffectTab *this, unsigned int a2)
{
  MHFurnitureObjEffectTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseFurnitureObjEffect,MHFurnitureObjEffectTab>Vtbl *)&ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98863C: using guessed type int (__cdecl *ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463450) --------------------------------------------------------
void *__thiscall ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::_vector_deleting_destructor_(MiniHouseObjAniInfoTab *this, unsigned int a2)
{
  MiniHouseObjAniInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseObjAni,MiniHouseObjAniInfoTab>Vtbl *)&ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98864C: using guessed type int (__cdecl *ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004634D0) --------------------------------------------------------
void *__thiscall MiniHouseFuritureInfoTab::_vector_deleting_destructor_(MiniHouseFuritureInfoTab *this, unsigned int a2)
{
  MiniHouseFuritureInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseFurniture,MiniHouseFuritureInfoTab>Vtbl *)&ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98866C: using guessed type int (__cdecl *ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463550) --------------------------------------------------------
void *__thiscall UpEffectTab::_vector_deleting_destructor_(UpEffectTab *this, unsigned int a2)
{
  UpEffectTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<UpEffectData,UpEffectTab>Vtbl *)&ITableBase<UpEffectData_UpEffectTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98868C: using guessed type int (__cdecl *ITableBase_UpEffectData_UpEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004635D0) --------------------------------------------------------
void *__thiscall ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::_vector_deleting_destructor_(ITableBase<AbnormalStateInfo,AbnormalStateInfoTab> *this, unsigned int a2)
{
  ITableBase<AbnormalStateInfo,AbnormalStateInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<AbnormalStateInfo,AbnormalStateInfoTab>Vtbl *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98869C: using guessed type int (__cdecl *ITableBase_AbnormalStateInfo_AbnormalStateInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463650) --------------------------------------------------------
void *__thiscall ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::_vector_deleting_destructor_(ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab> *this, unsigned int a2)
{
  ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab>Vtbl *)&ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9886C4: using guessed type int (__cdecl *ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004636D0) --------------------------------------------------------
void *__thiscall AbnormalStateViewInfoTab::_scalar_deleting_destructor_(AbnormalStateViewInfoTab *this, unsigned int a2)
{
  AbnormalStateViewInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab>Vtbl *)&IIDTableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab>Vtbl *)&ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9886C4: using guessed type int (__cdecl *ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9886D4: using guessed type int (__cdecl *IIDTableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463760) --------------------------------------------------------
void *__thiscall ITableBase<SubAbStateInfo_SubAbStateInfoTab>::_vector_deleting_destructor_(ITableBase<SubAbStateInfo,SubAbStateInfoTab> *this, unsigned int a2)
{
  ITableBase<SubAbStateInfo,SubAbStateInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<SubAbStateInfo,SubAbStateInfoTab>Vtbl *)&ITableBase<SubAbStateInfo_SubAbStateInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9886EC: using guessed type int (__cdecl *ITableBase_SubAbStateInfo_SubAbStateInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004637E0) --------------------------------------------------------
void *__thiscall ChargedEffectTable::_scalar_deleting_destructor_(ChargedEffectTable *this, unsigned int a2)
{
  ChargedEffectTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ChargedItemEffect,ChargedEffectTable>Vtbl *)&ITableBase<ChargedItemEffect_ChargedEffectTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988734: using guessed type int (__cdecl *ITableBase_ChargedItemEffect_ChargedEffectTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463860) --------------------------------------------------------
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Splice_same(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Where, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Right, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _First, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Last, unsigned int _Count)
{
  unsigned int v6; // edx@2
  int v7; // ecx@5

  if ( this != _Right )
  {
    v6 = this->baseclass_0.baseclass_0._Mysize;
    if ( 1073741822 - v6 < _Count )
      std::_Xlength_error("list<T> too long");
    this->baseclass_0.baseclass_0._Mysize = _Count + v6;
    _Right->baseclass_0.baseclass_0._Mysize -= _Count;
  }
  **(_DWORD **)(*(_DWORD *)&_First + 4) = _Last;
  **(_DWORD **)(*(_DWORD *)&_Last + 4) = _Where;
  **(_DWORD **)(*(_DWORD *)&_Where + 4) = _First;
  v7 = *(_DWORD *)(*(_DWORD *)&_Where + 4);
  *(_DWORD *)(*(_DWORD *)&_Where + 4) = *(_DWORD *)(*(_DWORD *)&_Last + 4);
  *(_DWORD *)(*(_DWORD *)&_Last + 4) = *(_DWORD *)(*(_DWORD *)&_First + 4);
  *(_DWORD *)(*(_DWORD *)&_First + 4) = v7;
}

//----- (004638E0) --------------------------------------------------------
char __cdecl CharClass::GetClassIDByEngName(char *pcEngName)
{
  unsigned int v1; // edi@1

  v1 = 0;
  while ( strcmp(
            (const char *)CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), v1)
          + 5,
            pcEngName) )
  {
    ++v1;
    if ( (signed int)v1 >= 28 )
      return 0;
  }
  return *(_BYTE *)CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), v1);
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (00463950) --------------------------------------------------------
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_Splice_same(...)
{
  unsigned int v6; // edx@2
  int v7; // ecx@5

  if ( this != _Right )
  {
    v6 = this->baseclass_0.baseclass_0._Mysize;
    if ( 107374181 - v6 < _Count )
      std::_Xlength_error("list<T> too long");
    this->baseclass_0.baseclass_0._Mysize = _Count + v6;
    _Right->baseclass_0.baseclass_0._Mysize -= _Count;
  }
  **(_DWORD **)(*(_DWORD *)&_First + 4) = _Last;
  **(_DWORD **)(*(_DWORD *)&_Last + 4) = _Where;
  **(_DWORD **)(*(_DWORD *)&_Where + 4) = _First;
  v7 = *(_DWORD *)(*(_DWORD *)&_Where + 4);
  *(_DWORD *)(*(_DWORD *)&_Where + 4) = *(_DWORD *)(*(_DWORD *)&_Last + 4);
  *(_DWORD *)(*(_DWORD *)&_Last + 4) = *(_DWORD *)(*(_DWORD *)&_First + 4);
  *(_DWORD *)(*(_DWORD *)&_First + 4) = v7;
}

//----- (004639D0) --------------------------------------------------------
void __thiscall ColorInfoTable::ColorInfoTable(ColorInfoTable *this)
{
  ColorInfoTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ColorInfoType,ColorInfoTable>Vtbl *)&ITableBase<ColorInfoType_ColorInfoTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ColorInfoType_ColorInfoTable_::ITableBase_ColorInfoType_ColorInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ColorInfoType,ColorInfoTable>Vtbl *)&ColorInfoTable::_vftable_;
}
// 9884F4: using guessed type int (__cdecl *ITableBase_ColorInfoType_ColorInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988744: using guessed type int (__cdecl *ColorInfoTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97F90: using guessed type int _local static guard_;

//----- (00463A10) --------------------------------------------------------
bool __thiscall ColorInfoTable::DataProcess(ColorInfoTable *this)
{
  int v1; // eax@1

  v1 = *(_DWORD *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 56);
  return v1 && *(_DWORD *)(v1 + 40) == 55;
}

//----- (00463A30) --------------------------------------------------------
void *__thiscall ITableBase<ColorInfoType_ColorInfoTable>::_scalar_deleting_destructor_(ColorInfoTable *this, unsigned int a2)
{
  ColorInfoTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ColorInfoType,ColorInfoTable>Vtbl *)&ITableBase<ColorInfoType_ColorInfoTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9884F4: using guessed type int (__cdecl *ITableBase_ColorInfoType_ColorInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463AB0) --------------------------------------------------------
void __thiscall ItemViewEquipTypeInfoTab::ItemViewEquipTypeInfoTab(ItemViewEquipTypeInfoTab *this)
{
  ItemViewEquipTypeInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemViewEquipTypeInfo,ItemViewEquipTypeInfoTab>Vtbl *)&ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab_::ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemViewEquipTypeInfo,ItemViewEquipTypeInfoTab>Vtbl *)&ItemViewEquipTypeInfoTab::_vftable_;
}
// 988554: using guessed type int (__cdecl *ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988754: using guessed type int (__cdecl *ItemViewEquipTypeInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97F94: using guessed type int _local static guard_;

//----- (00463AF0) --------------------------------------------------------
void *__thiscall ItemViewEquipTypeInfoTab::_scalar_deleting_destructor_(ItemViewEquipTypeInfoTab *this, unsigned int a2)
{
  ItemViewEquipTypeInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemViewEquipTypeInfo,ItemViewEquipTypeInfoTab>Vtbl *)&ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988554: using guessed type int (__cdecl *ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463B70) --------------------------------------------------------
void __thiscall ItemMoneyTab::ItemMoneyTab(ItemMoneyTab *this)
{
  ItemMoneyTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemMoney,ItemMoneyTab>Vtbl *)&ITableBase<ItemMoney_ItemMoneyTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemMoney_ItemMoneyTab_::ITableBase_ItemMoney_ItemMoneyTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemMoney,ItemMoneyTab>Vtbl *)&ItemMoneyTab::_vftable_;
}
// 988564: using guessed type int (__cdecl *ITableBase_ItemMoney_ItemMoneyTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988764: using guessed type int (__cdecl *ItemMoneyTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97F98: using guessed type int _local static guard_;

//----- (00463BB0) --------------------------------------------------------
void *__thiscall ITableBase<ItemMoney_ItemMoneyTab>::_vector_deleting_destructor_(ItemMoneyTab *this, unsigned int a2)
{
  ItemMoneyTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemMoney,ItemMoneyTab>Vtbl *)&ITableBase<ItemMoney_ItemMoneyTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988564: using guessed type int (__cdecl *ITableBase_ItemMoney_ItemMoneyTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463C30) --------------------------------------------------------
void __thiscall CharClass::CharClass(CharClass *this)
{
  CharClass *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ClassName,CharClass>Vtbl *)&ITableBase<ClassName_CharClass>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ClassName_CharClass_::ITableBase_ClassName_CharClass__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ClassName,CharClass>Vtbl *)&CharClass::_vftable_;
}
// 988574: using guessed type int (__cdecl *ITableBase_ClassName_CharClass____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988774: using guessed type int (__cdecl *CharClass___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97F9C: using guessed type int _local static guard_;

//----- (00463C70) --------------------------------------------------------
void *__thiscall ITableBase<ClassName_CharClass>::_vector_deleting_destructor_(CharClass *this, unsigned int a2)
{
  CharClass *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ClassName,CharClass>Vtbl *)&ITableBase<ClassName_CharClass>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988574: using guessed type int (__cdecl *ITableBase_ClassName_CharClass____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463CF0) --------------------------------------------------------
void __thiscall ActionEffectInfoTab::ActionEffectInfoTab(ActionEffectInfoTab *this)
{
  ActionEffectInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ActionEffectInfo,ActionEffectInfoTab>Vtbl *)&ITableBase<ActionEffectInfo_ActionEffectInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ActionEffectInfo_ActionEffectInfoTab_::ITableBase_ActionEffectInfo_ActionEffectInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ActionEffectInfo,ActionEffectInfoTab>Vtbl *)&ActionEffectInfoTab::_vftable_;
}
// 988584: using guessed type int (__cdecl *ITableBase_ActionEffectInfo_ActionEffectInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988784: using guessed type int (__cdecl *ActionEffectInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FA0: using guessed type int _local static guard_;

//----- (00463D30) --------------------------------------------------------
void *__thiscall ActionEffectInfoTab::_scalar_deleting_destructor_(ActionEffectInfoTab *this, unsigned int a2)
{
  ActionEffectInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ActionEffectInfo,ActionEffectInfoTab>Vtbl *)&ITableBase<ActionEffectInfo_ActionEffectInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988584: using guessed type int (__cdecl *ITableBase_ActionEffectInfo_ActionEffectInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463DB0) --------------------------------------------------------
void __thiscall HairInfoTab::HairInfoTab(HairInfoTab *this)
{
  HairInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<HairInfo,HairInfoTab>Vtbl *)&ITableBase<HairInfo_HairInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_HairInfo_HairInfoTab_::ITableBase_HairInfo_HairInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<HairInfo,HairInfoTab>Vtbl *)&HairInfoTab::_vftable_;
}
// 988594: using guessed type int (__cdecl *ITableBase_HairInfo_HairInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988794: using guessed type int (__cdecl *HairInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FA4: using guessed type int _local static guard_;

//----- (00463DF0) --------------------------------------------------------
void *__thiscall HairInfoTab::_vector_deleting_destructor_(HairInfoTab *this, unsigned int a2)
{
  HairInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<HairInfo,HairInfoTab>Vtbl *)&ITableBase<HairInfo_HairInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988594: using guessed type int (__cdecl *ITableBase_HairInfo_HairInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463E70) --------------------------------------------------------
void __thiscall HairColorInfoTab::HairColorInfoTab(HairColorInfoTab *this)
{
  HairColorInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<HairColorInfo,HairColorInfoTab>Vtbl *)&ITableBase<HairColorInfo_HairColorInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_HairColorInfo_HairColorInfoTab_::ITableBase_HairColorInfo_HairColorInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<HairColorInfo,HairColorInfoTab>Vtbl *)&HairColorInfoTab::_vftable_;
}
// 9885A4: using guessed type int (__cdecl *ITableBase_HairColorInfo_HairColorInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9887A4: using guessed type int (__cdecl *HairColorInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FA8: using guessed type int _local static guard_;

//----- (00463EB0) --------------------------------------------------------
void __thiscall ShakeEffectViewInfoTab::ShakeEffectViewInfoTab(ShakeEffectViewInfoTab *this)
{
  ShakeEffectViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<EffectViewInfo,ShakeEffectViewInfoTab>Vtbl *)&ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_EffectViewInfo_ShakeEffectViewInfoTab_::ITableBase_EffectViewInfo_ShakeEffectViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<EffectViewInfo,ShakeEffectViewInfoTab>Vtbl *)&ShakeEffectViewInfoTab::_vftable_;
}
// 98862C: using guessed type int (__cdecl *ITableBase_EffectViewInfo_ShakeEffectViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9887B4: using guessed type int (__cdecl *ShakeEffectViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FAC: using guessed type int _local static guard_;

//----- (00463EF0) --------------------------------------------------------
void *__thiscall ShakeEffectViewInfoTab::_scalar_deleting_destructor_(ShakeEffectViewInfoTab *this, unsigned int a2)
{
  ShakeEffectViewInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<EffectViewInfo,ShakeEffectViewInfoTab>Vtbl *)&ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98862C: using guessed type int (__cdecl *ITableBase_EffectViewInfo_ShakeEffectViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00463F70) --------------------------------------------------------
void __thiscall MHFurnitureObjEffectTab::MHFurnitureObjEffectTab(MHFurnitureObjEffectTab *this)
{
  MHFurnitureObjEffectTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseFurnitureObjEffect,MHFurnitureObjEffectTab>Vtbl *)&ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab_::ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MiniHouseFurnitureObjEffect,MHFurnitureObjEffectTab>Vtbl *)&MHFurnitureObjEffectTab::_vftable_;
}
// 98863C: using guessed type int (__cdecl *ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9887C4: using guessed type int (__cdecl *MHFurnitureObjEffectTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FB0: using guessed type int _local static guard_;

//----- (00463FB0) --------------------------------------------------------
void __thiscall MiniHouseObjAniInfoTab::MiniHouseObjAniInfoTab(MiniHouseObjAniInfoTab *this)
{
  MiniHouseObjAniInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseObjAni,MiniHouseObjAniInfoTab>Vtbl *)&ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab_::ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MiniHouseObjAni,MiniHouseObjAniInfoTab>Vtbl *)&MiniHouseObjAniInfoTab::_vftable_;
}
// 98864C: using guessed type int (__cdecl *ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9887D4: using guessed type int (__cdecl *MiniHouseObjAniInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FB4: using guessed type int _local static guard_;

//----- (00463FF0) --------------------------------------------------------
void __thiscall MiniHouseEndureInfoTable::MiniHouseEndureInfoTable(MiniHouseEndureInfoTable *this)
{
  MiniHouseEndureInfoTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseEndure,MiniHouseEndureInfoTable>Vtbl *)&ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable_::ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MiniHouseEndure,MiniHouseEndureInfoTable>Vtbl *)&MiniHouseEndureInfoTable::_vftable_;
}
// 98865C: using guessed type int (__cdecl *ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9887E4: using guessed type int (__cdecl *MiniHouseEndureInfoTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FB8: using guessed type int _local static guard_;

//----- (00464030) --------------------------------------------------------
void *__thiscall MiniHouseEndureInfoTable::_vector_deleting_destructor_(MiniHouseEndureInfoTable *this, unsigned int a2)
{
  MiniHouseEndureInfoTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseEndure,MiniHouseEndureInfoTable>Vtbl *)&ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98865C: using guessed type int (__cdecl *ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004640B0) --------------------------------------------------------
void __thiscall MiniHouseFuritureInfoTab::MiniHouseFuritureInfoTab(MiniHouseFuritureInfoTab *this)
{
  MiniHouseFuritureInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouseFurniture,MiniHouseFuritureInfoTab>Vtbl *)&ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab_::ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MiniHouseFurniture,MiniHouseFuritureInfoTab>Vtbl *)&MiniHouseFuritureInfoTab::_vftable_;
}
// 98866C: using guessed type int (__cdecl *ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9887F4: using guessed type int (__cdecl *MiniHouseFuritureInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FBC: using guessed type int _local static guard_;

//----- (004640F0) --------------------------------------------------------
void __thiscall MiniHouseEmotionTab::MiniHouseEmotionTab(MiniHouseEmotionTab *this)
{
  MiniHouseEmotionTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MHEmotion,MiniHouseEmotionTab>Vtbl *)&ITableBase<MHEmotion_MiniHouseEmotionTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MHEmotion_MiniHouseEmotionTab_::ITableBase_MHEmotion_MiniHouseEmotionTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MHEmotion,MiniHouseEmotionTab>Vtbl *)&MiniHouseEmotionTab::_vftable_;
}
// 98867C: using guessed type int (__cdecl *ITableBase_MHEmotion_MiniHouseEmotionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988804: using guessed type int (__cdecl *MiniHouseEmotionTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FC0: using guessed type int _local static guard_;

//----- (00464130) --------------------------------------------------------
void *__thiscall MiniHouseEmotionTab::_vector_deleting_destructor_(MiniHouseEmotionTab *this, unsigned int a2)
{
  MiniHouseEmotionTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MHEmotion,MiniHouseEmotionTab>Vtbl *)&ITableBase<MHEmotion_MiniHouseEmotionTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98867C: using guessed type int (__cdecl *ITableBase_MHEmotion_MiniHouseEmotionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004641B0) --------------------------------------------------------
void __thiscall UpEffectTab::UpEffectTab(UpEffectTab *this)
{
  UpEffectTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<UpEffectData,UpEffectTab>Vtbl *)&ITableBase<UpEffectData_UpEffectTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_UpEffectData_UpEffectTab_::ITableBase_UpEffectData_UpEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<UpEffectData,UpEffectTab>Vtbl *)&UpEffectTab::_vftable_;
}
// 98868C: using guessed type int (__cdecl *ITableBase_UpEffectData_UpEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988814: using guessed type int (__cdecl *UpEffectTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FC4: using guessed type int _local static guard_;

//----- (004641F0) --------------------------------------------------------
void __thiscall ScriptMsgTab::ScriptMsgTab(ScriptMsgTab *this)
{
  ScriptMsgTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ScriptMsg,ScriptMsgTab>Vtbl *)&ITableBase<ScriptMsg_ScriptMsgTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ScriptMsg_ScriptMsgTab_::ITableBase_ScriptMsg_ScriptMsgTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ScriptMsg,ScriptMsgTab>Vtbl *)&ScriptMsgTab::_vftable_;
}
// 988714: using guessed type int (__cdecl *ITableBase_ScriptMsg_ScriptMsgTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988824: using guessed type int (__cdecl *ScriptMsgTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FC8: using guessed type int _local static guard_;

//----- (00464230) --------------------------------------------------------
void *__thiscall ScriptMsgTab::_vector_deleting_destructor_(ScriptMsgTab *this, unsigned int a2)
{
  ScriptMsgTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ScriptMsg,ScriptMsgTab>Vtbl *)&ITableBase<ScriptMsg_ScriptMsgTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988714: using guessed type int (__cdecl *ITableBase_ScriptMsg_ScriptMsgTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004642B0) --------------------------------------------------------
void __thiscall ChargedEffectTable::ChargedEffectTable(ChargedEffectTable *this)
{
  ChargedEffectTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ChargedItemEffect,ChargedEffectTable>Vtbl *)&ITableBase<ChargedItemEffect_ChargedEffectTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ChargedItemEffect_ChargedEffectTable_::ITableBase_ChargedItemEffect_ChargedEffectTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ChargedItemEffect,ChargedEffectTable>Vtbl *)&ChargedEffectTable::_vftable_;
}
// 988734: using guessed type int (__cdecl *ITableBase_ChargedItemEffect_ChargedEffectTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988834: using guessed type int (__cdecl *ChargedEffectTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FCC: using guessed type int _local static guard_;

//----- (004642F0) --------------------------------------------------------
void __thiscall CharRace::CharRace(CharRace *this)
{
  CharRace *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<RaceName,CharRace>Vtbl *)&ITableBase<RaceName_CharRace>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_RaceName_CharRace_::ITableBase_RaceName_CharRace__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<RaceName,CharRace>Vtbl *)&CharRace::_vftable_;
}
// 987E6C: using guessed type int (__cdecl *ITableBase_RaceName_CharRace____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988844: using guessed type int (__cdecl *CharRace___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FD0: using guessed type int _local static guard_;

//----- (00464330) --------------------------------------------------------
void __thiscall FaceInfoTab::FaceInfoTab(FaceInfoTab *this)
{
  FaceInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<FaceInfo,FaceInfoTab>Vtbl *)&ITableBase<FaceInfo_FaceInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_FaceInfo_FaceInfoTab_::ITableBase_FaceInfo_FaceInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<FaceInfo,FaceInfoTab>Vtbl *)&FaceInfoTab::_vftable_;
}
// 987EF4: using guessed type int (__cdecl *ITableBase_FaceInfo_FaceInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988854: using guessed type int (__cdecl *FaceInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FD4: using guessed type int _local static guard_;

//----- (00464370) --------------------------------------------------------
void *__thiscall FaceInfoTab::_scalar_deleting_destructor_(FaceInfoTab *this, unsigned int a2)
{
  FaceInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<FaceInfo,FaceInfoTab>Vtbl *)&ITableBase<FaceInfo_FaceInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987EF4: using guessed type int (__cdecl *ITableBase_FaceInfo_FaceInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004643F0) --------------------------------------------------------
void __thiscall DmgSndTab::DmgSndTab(DmgSndTab *this)
{
  DmgSndTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<DmgSndMapByArmorType,DmgSndTab>Vtbl *)&ITableBase<DmgSndMapByArmorType_DmgSndTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_DmgSndMapByArmorType_DmgSndTab_::ITableBase_DmgSndMapByArmorType_DmgSndTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<DmgSndMapByArmorType,DmgSndTab>Vtbl *)&DmgSndTab::_vftable_;
}
// 987F04: using guessed type int (__cdecl *ITableBase_DmgSndMapByArmorType_DmgSndTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988864: using guessed type int (__cdecl *DmgSndTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FD8: using guessed type int _local static guard_;

//----- (00464430) --------------------------------------------------------
void *__thiscall ITableBase<DmgSndMapByArmorType_DmgSndTab>::_scalar_deleting_destructor_(DmgSndTab *this, unsigned int a2)
{
  DmgSndTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<DmgSndMapByArmorType,DmgSndTab>Vtbl *)&ITableBase<DmgSndMapByArmorType_DmgSndTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F04: using guessed type int (__cdecl *ITableBase_DmgSndMapByArmorType_DmgSndTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004644B0) --------------------------------------------------------
void __thiscall ProduceInfoTable::ProduceInfoTable(ProduceInfoTable *this)
{
  ProduceInfoTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ProduceInfo,ProduceInfoTable>Vtbl *)&ITableBase<ProduceInfo_ProduceInfoTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ProduceInfo_ProduceInfoTable_::ITableBase_ProduceInfo_ProduceInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ProduceInfo,ProduceInfoTable>Vtbl *)&ProduceInfoTable::_vftable_;
}
// 987F3C: using guessed type int (__cdecl *ITableBase_ProduceInfo_ProduceInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988874: using guessed type int (__cdecl *ProduceInfoTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FDC: using guessed type int _local static guard_;

//----- (004644F0) --------------------------------------------------------
void __thiscall GatherInfoTable::GatherInfoTable(GatherInfoTable *this)
{
  GatherInfoTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GatherInfo,GatherInfoTable>Vtbl *)&ITableBase<GatherInfo_GatherInfoTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GatherInfo_GatherInfoTable_::ITableBase_GatherInfo_GatherInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GatherInfo,GatherInfoTable>Vtbl *)&GatherInfoTable::_vftable_;
}
// 987F4C: using guessed type int (__cdecl *ITableBase_GatherInfo_GatherInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988884: using guessed type int (__cdecl *GatherInfoTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FE0: using guessed type int _local static guard_;

//----- (00464530) --------------------------------------------------------
void __thiscall KQDescTable::KQDescTable(KQDescTable *this)
{
  KQDescTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<KINGDOM_QUEST_DESC,KQDescTable>Vtbl *)&ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_KINGDOM_QUEST_DESC_KQDescTable_::ITableBase_KINGDOM_QUEST_DESC_KQDescTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<KINGDOM_QUEST_DESC,KQDescTable>Vtbl *)&KQDescTable::_vftable_;
}
// 987F5C: using guessed type int (__cdecl *ITableBase_KINGDOM_QUEST_DESC_KQDescTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988894: using guessed type int (__cdecl *KQDescTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FE4: using guessed type int _local static guard_;

//----- (00464570) --------------------------------------------------------
void __thiscall ProduceViewInfoTable::ProduceViewInfoTable(ProduceViewInfoTable *this)
{
  ProduceViewInfoTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ProduceViewInfo,ProduceViewInfoTable>Vtbl *)&ITableBase<ProduceViewInfo_ProduceViewInfoTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ProduceViewInfo_ProduceViewInfoTable_::ITableBase_ProduceViewInfo_ProduceViewInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ProduceViewInfo,ProduceViewInfoTable>Vtbl *)&ProduceViewInfoTable::_vftable_;
}
// 987F6C: using guessed type int (__cdecl *ITableBase_ProduceViewInfo_ProduceViewInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9888A4: using guessed type int (__cdecl *ProduceViewInfoTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FE8: using guessed type int _local static guard_;

//----- (004645B0) --------------------------------------------------------
void __thiscall NpcDialogDataTable::NpcDialogDataTable(NpcDialogDataTable *this)
{
  NpcDialogDataTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<NpcDialogData,NpcDialogDataTable>Vtbl *)&ITableBase<NpcDialogData_NpcDialogDataTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_NpcDialogData_NpcDialogDataTable_::ITableBase_NpcDialogData_NpcDialogDataTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<NpcDialogData,NpcDialogDataTable>Vtbl *)&NpcDialogDataTable::_vftable_;
}
// 987F7C: using guessed type int (__cdecl *ITableBase_NpcDialogData_NpcDialogDataTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9888B4: using guessed type int (__cdecl *NpcDialogDataTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FEC: using guessed type int _local static guard_;

//----- (004645F0) --------------------------------------------------------
void *__thiscall NpcDialogDataTable::_scalar_deleting_destructor_(NpcDialogDataTable *this, unsigned int a2)
{
  NpcDialogDataTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<NpcDialogData,NpcDialogDataTable>Vtbl *)&ITableBase<NpcDialogData_NpcDialogDataTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987F7C: using guessed type int (__cdecl *ITableBase_NpcDialogData_NpcDialogDataTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464670) --------------------------------------------------------
void __thiscall GradeItemOptionTab::GradeItemOptionTab(GradeItemOptionTab *this)
{
  GradeItemOptionTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GradeItemOption,GradeItemOptionTab>Vtbl *)&ITableBase<GradeItemOption_GradeItemOptionTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GradeItemOption_GradeItemOptionTab_::ITableBase_GradeItemOption_GradeItemOptionTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GradeItemOption,GradeItemOptionTab>Vtbl *)&GradeItemOptionTab::_vftable_;
}
// 987F8C: using guessed type int (__cdecl *ITableBase_GradeItemOption_GradeItemOptionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9888C4: using guessed type int (__cdecl *GradeItemOptionTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FF0: using guessed type int _local static guard_;

//----- (004646B0) --------------------------------------------------------
void __thiscall MiniHouseTable::MiniHouseTable(MiniHouseTable *this)
{
  MiniHouseTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MiniHouse,MiniHouseTable>Vtbl *)&ITableBase<MiniHouse_MiniHouseTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MiniHouse_MiniHouseTable_::ITableBase_MiniHouse_MiniHouseTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MiniHouse,MiniHouseTable>Vtbl *)&MiniHouseTable::_vftable_;
}
// 987F9C: using guessed type int (__cdecl *ITableBase_MiniHouse_MiniHouseTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9888D4: using guessed type int (__cdecl *MiniHouseTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FF4: using guessed type int _local static guard_;

//----- (004646F0) --------------------------------------------------------
void __thiscall ItemShopViewTable::ItemShopViewTable(ItemShopViewTable *this)
{
  ItemShopViewTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemShopView,ItemShopViewTable>Vtbl *)&ITableBase<ItemShopView_ItemShopViewTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemShopView_ItemShopViewTable_::ITableBase_ItemShopView_ItemShopViewTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemShopView,ItemShopViewTable>Vtbl *)&ItemShopViewTable::_vftable_;
}
// 987FAC: using guessed type int (__cdecl *ITableBase_ItemShopView_ItemShopViewTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9888E4: using guessed type int (__cdecl *ItemShopViewTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FF8: using guessed type int _local static guard_;

//----- (00464730) --------------------------------------------------------
void __thiscall WeaponAttribTab::WeaponAttribTab(WeaponAttribTab *this)
{
  WeaponAttribTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<WeaponAttrib,WeaponAttribTab>Vtbl *)&ITableBase<WeaponAttrib_WeaponAttribTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_WeaponAttrib_WeaponAttribTab_::ITableBase_WeaponAttrib_WeaponAttribTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<WeaponAttrib,WeaponAttribTab>Vtbl *)&WeaponAttribTab::_vftable_;
}
// 987FE4: using guessed type int (__cdecl *ITableBase_WeaponAttrib_WeaponAttribTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9888F4: using guessed type int (__cdecl *WeaponAttribTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A97FFC: using guessed type int _local static guard_;

//----- (00464770) --------------------------------------------------------
void *__thiscall WeaponAttribTab::_vector_deleting_destructor_(WeaponAttribTab *this, unsigned int a2)
{
  WeaponAttribTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<WeaponAttrib,WeaponAttribTab>Vtbl *)&ITableBase<WeaponAttrib_WeaponAttribTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987FE4: using guessed type int (__cdecl *ITableBase_WeaponAttrib_WeaponAttribTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004647F0) --------------------------------------------------------
void __thiscall WorldMapAvatarInfoTab::WorldMapAvatarInfoTab(WorldMapAvatarInfoTab *this)
{
  WorldMapAvatarInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<WorldMapAvatarInfo,WorldMapAvatarInfoTab>Vtbl *)&ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab_::ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<WorldMapAvatarInfo,WorldMapAvatarInfoTab>Vtbl *)&WorldMapAvatarInfoTab::_vftable_;
}
// 987FF4: using guessed type int (__cdecl *ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988904: using guessed type int (__cdecl *WorldMapAvatarInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98000: using guessed type int _local static guard_;

//----- (00464830) --------------------------------------------------------
void *__thiscall WorldMapAvatarInfoTab::_vector_deleting_destructor_(WorldMapAvatarInfoTab *this, unsigned int a2)
{
  WorldMapAvatarInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<WorldMapAvatarInfo,WorldMapAvatarInfoTab>Vtbl *)&ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987FF4: using guessed type int (__cdecl *ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004648B0) --------------------------------------------------------
void __thiscall ItemDismantleTab::ItemDismantleTab(ItemDismantleTab *this)
{
  ItemDismantleTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemDismantle,ItemDismantleTab>Vtbl *)&ITableBase<ItemDismantle_ItemDismantleTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemDismantle_ItemDismantleTab_::ITableBase_ItemDismantle_ItemDismantleTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemDismantle,ItemDismantleTab>Vtbl *)&ItemDismantleTab::_vftable_;
}
// 988004: using guessed type int (__cdecl *ITableBase_ItemDismantle_ItemDismantleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988914: using guessed type int (__cdecl *ItemDismantleTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98004: using guessed type int _local static guard_;

//----- (004648F0) --------------------------------------------------------
void __thiscall TownPortalInfoTable::TownPortalInfoTable(TownPortalInfoTable *this)
{
  TownPortalInfoTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<TownPortal,TownPortalInfoTable>Vtbl *)&ITableBase<TownPortal_TownPortalInfoTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_TownPortal_TownPortalInfoTable_::ITableBase_TownPortal_TownPortalInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<TownPortal,TownPortalInfoTable>Vtbl *)&TownPortalInfoTable::_vftable_;
}
// 988014: using guessed type int (__cdecl *ITableBase_TownPortal_TownPortalInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988924: using guessed type int (__cdecl *TownPortalInfoTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98008: using guessed type int _local static guard_;

//----- (00464930) --------------------------------------------------------
void *__thiscall TownPortalInfoTable::_scalar_deleting_destructor_(TownPortalInfoTable *this, unsigned int a2)
{
  TownPortalInfoTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<TownPortal,TownPortalInfoTable>Vtbl *)&ITableBase<TownPortal_TownPortalInfoTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988014: using guessed type int (__cdecl *ITableBase_TownPortal_TownPortalInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004649B0) --------------------------------------------------------
void __thiscall SetItemNameTab::SetItemNameTab(SetItemNameTab *this)
{
  SetItemNameTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<SetItemName,SetItemNameTab>Vtbl *)&ITableBase<SetItemName_SetItemNameTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_SetItemName_SetItemNameTab_::ITableBase_SetItemName_SetItemNameTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<SetItemName,SetItemNameTab>Vtbl *)&SetItemNameTab::_vftable_;
}
// 988024: using guessed type int (__cdecl *ITableBase_SetItemName_SetItemNameTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988934: using guessed type int (__cdecl *SetItemNameTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9800C: using guessed type int _local static guard_;

//----- (004649F0) --------------------------------------------------------
void *__thiscall ITableBase<SetItemName_SetItemNameTab>::_scalar_deleting_destructor_(SetItemNameTab *this, unsigned int a2)
{
  SetItemNameTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<SetItemName,SetItemNameTab>Vtbl *)&ITableBase<SetItemName_SetItemNameTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988024: using guessed type int (__cdecl *ITableBase_SetItemName_SetItemNameTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464A70) --------------------------------------------------------
void __thiscall ItemActionEffectDescTab::ItemActionEffectDescTab(ItemActionEffectDescTab *this)
{
  ItemActionEffectDescTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemActionEffectDesc,ItemActionEffectDescTab>Vtbl *)&ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab_::ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemActionEffectDesc,ItemActionEffectDescTab>Vtbl *)&ItemActionEffectDescTab::_vftable_;
}
// 988034: using guessed type int (__cdecl *ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988944: using guessed type int (__cdecl *ItemActionEffectDescTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98010: using guessed type int _local static guard_;

//----- (00464AB0) --------------------------------------------------------
void *__thiscall ItemActionEffectDescTab::_scalar_deleting_destructor_(ItemActionEffectDescTab *this, unsigned int a2)
{
  ItemActionEffectDescTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemActionEffectDesc,ItemActionEffectDescTab>Vtbl *)&ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988034: using guessed type int (__cdecl *ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464B30) --------------------------------------------------------
void __thiscall SetEffectTab::SetEffectTab(SetEffectTab *this)
{
  SetEffectTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<SetEffect,SetEffectTab>Vtbl *)&ITableBase<SetEffect_SetEffectTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_SetEffect_SetEffectTab_::ITableBase_SetEffect_SetEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<SetEffect,SetEffectTab>Vtbl *)&SetEffectTab::_vftable_;
}
// 988044: using guessed type int (__cdecl *ITableBase_SetEffect_SetEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988954: using guessed type int (__cdecl *SetEffectTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98014: using guessed type int _local static guard_;

//----- (00464B70) --------------------------------------------------------
void __thiscall ActionEffectItemTab::ActionEffectItemTab(ActionEffectItemTab *this)
{
  ActionEffectItemTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ActionEffectItem,ActionEffectItemTab>Vtbl *)&ITableBase<ActionEffectItem_ActionEffectItemTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ActionEffectItem_ActionEffectItemTab_::ITableBase_ActionEffectItem_ActionEffectItemTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ActionEffectItem,ActionEffectItemTab>Vtbl *)&ActionEffectItemTab::_vftable_;
}
// 988054: using guessed type int (__cdecl *ITableBase_ActionEffectItem_ActionEffectItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988964: using guessed type int (__cdecl *ActionEffectItemTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98018: using guessed type int _local static guard_;

//----- (00464BB0) --------------------------------------------------------
void *__thiscall ActionEffectItemTab::_scalar_deleting_destructor_(ActionEffectItemTab *this, unsigned int a2)
{
  ActionEffectItemTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ActionEffectItem,ActionEffectItemTab>Vtbl *)&ITableBase<ActionEffectItem_ActionEffectItemTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988054: using guessed type int (__cdecl *ITableBase_ActionEffectItem_ActionEffectItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464C30) --------------------------------------------------------
void __thiscall ItemActionTab::ItemActionTab(ItemActionTab *this)
{
  ItemActionTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemAction,ItemActionTab>Vtbl *)&ITableBase<ItemAction_ItemActionTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemAction_ItemActionTab_::ITableBase_ItemAction_ItemActionTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemAction,ItemActionTab>Vtbl *)&ItemActionTab::_vftable_;
}
// 988064: using guessed type int (__cdecl *ITableBase_ItemAction_ItemActionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988974: using guessed type int (__cdecl *ItemActionTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9801C: using guessed type int _local static guard_;

//----- (00464C70) --------------------------------------------------------
void *__thiscall ITableBase<ItemAction_ItemActionTab>::_vector_deleting_destructor_(ItemActionTab *this, unsigned int a2)
{
  ItemActionTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemAction,ItemActionTab>Vtbl *)&ITableBase<ItemAction_ItemActionTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988064: using guessed type int (__cdecl *ITableBase_ItemAction_ItemActionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464CF0) --------------------------------------------------------
void __thiscall ItemActionEffectTab::ItemActionEffectTab(ItemActionEffectTab *this)
{
  ItemActionEffectTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemActionEffect,ItemActionEffectTab>Vtbl *)&ITableBase<ItemActionEffect_ItemActionEffectTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemActionEffect_ItemActionEffectTab_::ITableBase_ItemActionEffect_ItemActionEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemActionEffect,ItemActionEffectTab>Vtbl *)&ItemActionEffectTab::_vftable_;
}
// 988074: using guessed type int (__cdecl *ITableBase_ItemActionEffect_ItemActionEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988984: using guessed type int (__cdecl *ItemActionEffectTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98020: using guessed type int _local static guard_;

//----- (00464D30) --------------------------------------------------------
void __thiscall ItemActionConditionTab::ItemActionConditionTab(ItemActionConditionTab *this)
{
  ItemActionConditionTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemActionCondition,ItemActionConditionTab>Vtbl *)&ITableBase<ItemActionCondition_ItemActionConditionTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemActionCondition_ItemActionConditionTab_::ITableBase_ItemActionCondition_ItemActionConditionTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemActionCondition,ItemActionConditionTab>Vtbl *)&ItemActionConditionTab::_vftable_;
}
// 988084: using guessed type int (__cdecl *ITableBase_ItemActionCondition_ItemActionConditionTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988994: using guessed type int (__cdecl *ItemActionConditionTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98024: using guessed type int _local static guard_;

//----- (00464D70) --------------------------------------------------------
void __thiscall GuildTournamentStateDescTab::GuildTournamentStateDescTab(GuildTournamentStateDescTab *this)
{
  GuildTournamentStateDescTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_SKILLDESC,GuildTournamentStateDescTab>Vtbl *)&ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab_::ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_SKILLDESC,GuildTournamentStateDescTab>Vtbl *)&GuildTournamentStateDescTab::_vftable_;
}
// 988094: using guessed type int (__cdecl *ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9889A4: using guessed type int (__cdecl *GuildTournamentStateDescTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98028: using guessed type int _local static guard_;

//----- (00464DB0) --------------------------------------------------------
void *__thiscall GuildTournamentStateDescTab::_vector_deleting_destructor_(GuildTournamentStateDescTab *this, unsigned int a2)
{
  GuildTournamentStateDescTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_SKILLDESC,GuildTournamentStateDescTab>Vtbl *)&ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988094: using guessed type int (__cdecl *ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464E30) --------------------------------------------------------
void __thiscall GuildTournamentStateTab::GuildTournamentStateTab(GuildTournamentStateTab *this)
{
  GuildTournamentStateTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_SKILL,GuildTournamentStateTab>Vtbl *)&ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab_::ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_SKILL,GuildTournamentStateTab>Vtbl *)&GuildTournamentStateTab::_vftable_;
}
// 9880A4: using guessed type int (__cdecl *ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9889B4: using guessed type int (__cdecl *GuildTournamentStateTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9802C: using guessed type int _local static guard_;

//----- (00464E70) --------------------------------------------------------
void __thiscall GTRequireTab::GTRequireTab(GTRequireTab *this)
{
  GTRequireTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_REQUIRE,GTRequireTab>Vtbl *)&ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab_::ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_REQUIRE,GTRequireTab>Vtbl *)&GTRequireTab::_vftable_;
}
// 9880B4: using guessed type int (__cdecl *ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9889C4: using guessed type int (__cdecl *GTRequireTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98030: using guessed type int _local static guard_;

//----- (00464EB0) --------------------------------------------------------
void *__thiscall ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::_scalar_deleting_destructor_(GTRequireTab *this, unsigned int a2)
{
  GTRequireTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<GUILD_TOURNAMENT_REQUIRE,GTRequireTab>Vtbl *)&ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9880B4: using guessed type int (__cdecl *ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464F30) --------------------------------------------------------
void __thiscall DiceDividIndTab::DiceDividIndTab(DiceDividIndTab *this)
{
  DiceDividIndTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<DICE_Dividind,DiceDividIndTab>Vtbl *)&ITableBase<DICE_Dividind_DiceDividIndTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_DICE_Dividind_DiceDividIndTab_::ITableBase_DICE_Dividind_DiceDividIndTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<DICE_Dividind,DiceDividIndTab>Vtbl *)&DiceDividIndTab::_vftable_;
}
// 9880C4: using guessed type int (__cdecl *ITableBase_DICE_Dividind_DiceDividIndTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9889D4: using guessed type int (__cdecl *DiceDividIndTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98034: using guessed type int _local static guard_;

//----- (00464F70) --------------------------------------------------------
void *__thiscall DiceDividIndTab::_vector_deleting_destructor_(DiceDividIndTab *this, unsigned int a2)
{
  DiceDividIndTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<DICE_Dividind,DiceDividIndTab>Vtbl *)&ITableBase<DICE_Dividind_DiceDividIndTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9880C4: using guessed type int (__cdecl *ITableBase_DICE_Dividind_DiceDividIndTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00464FF0) --------------------------------------------------------
void __thiscall GBDiceDividIndTab::GBDiceDividIndTab(GBDiceDividIndTab *this)
{
  GBDiceDividIndTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GB_DICE_Dividind,GBDiceDividIndTab>Vtbl *)&ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GB_DICE_Dividind_GBDiceDividIndTab_::ITableBase_GB_DICE_Dividind_GBDiceDividIndTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GB_DICE_Dividind,GBDiceDividIndTab>Vtbl *)&GBDiceDividIndTab::_vftable_;
}
// 9880D4: using guessed type int (__cdecl *ITableBase_GB_DICE_Dividind_GBDiceDividIndTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9889E4: using guessed type int (__cdecl *GBDiceDividIndTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98038: using guessed type int _local static guard_;

//----- (00465030) --------------------------------------------------------
void __thiscall GBHouseTab::GBHouseTab(GBHouseTab *this)
{
  GBHouseTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GBHouse,GBHouseTab>Vtbl *)&ITableBase<GBHouse_GBHouseTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GBHouse_GBHouseTab_::ITableBase_GBHouse_GBHouseTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GBHouse,GBHouseTab>Vtbl *)&GBHouseTab::_vftable_;
}
// 9880E4: using guessed type int (__cdecl *ITableBase_GBHouse_GBHouseTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9889F4: using guessed type int (__cdecl *GBHouseTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9803C: using guessed type int _local static guard_;

//----- (00465070) --------------------------------------------------------
void __thiscall MobRandomIdleAniTab::MobRandomIdleAniTab(MobRandomIdleAniTab *this)
{
  MobRandomIdleAniTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MobRandomIdleAni,MobRandomIdleAniTab>Vtbl *)&ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MobRandomIdleAni_MobRandomIdleAniTab_::ITableBase_MobRandomIdleAni_MobRandomIdleAniTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MobRandomIdleAni,MobRandomIdleAniTab>Vtbl *)&MobRandomIdleAniTab::_vftable_;
}
// 9880F4: using guessed type int (__cdecl *ITableBase_MobRandomIdleAni_MobRandomIdleAniTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A04: using guessed type int (__cdecl *MobRandomIdleAniTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98040: using guessed type int _local static guard_;

//----- (004650B0) --------------------------------------------------------
void *__thiscall MobRandomIdleAniTab::_scalar_deleting_destructor_(MobRandomIdleAniTab *this, unsigned int a2)
{
  MobRandomIdleAniTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MobRandomIdleAni,MobRandomIdleAniTab>Vtbl *)&ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9880F4: using guessed type int (__cdecl *ITableBase_MobRandomIdleAni_MobRandomIdleAniTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465130) --------------------------------------------------------
void __thiscall CharacterTitleStateViewTab::CharacterTitleStateViewTab(CharacterTitleStateViewTab *this)
{
  CharacterTitleStateViewTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<CharacterTitleStateView,CharacterTitleStateViewTab>Vtbl *)&ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab_::ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<CharacterTitleStateView,CharacterTitleStateViewTab>Vtbl *)&CharacterTitleStateViewTab::_vftable_;
}
// 988104: using guessed type int (__cdecl *ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A14: using guessed type int (__cdecl *CharacterTitleStateViewTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98044: using guessed type int _local static guard_;

//----- (00465170) --------------------------------------------------------
void *__thiscall CharacterTitleStateViewTab::_vector_deleting_destructor_(CharacterTitleStateViewTab *this, unsigned int a2)
{
  CharacterTitleStateViewTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<CharacterTitleStateView,CharacterTitleStateViewTab>Vtbl *)&ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988104: using guessed type int (__cdecl *ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004651F0) --------------------------------------------------------
void __thiscall GTIViewInfoTab::GTIViewInfoTab(GTIViewInfoTab *this)
{
  GTIViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<GTIView,GTIViewInfoTab>Vtbl *)&ITableBase<GTIView_GTIViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_GTIView_GTIViewInfoTab_::ITableBase_GTIView_GTIViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<GTIView,GTIViewInfoTab>Vtbl *)&GTIViewInfoTab::_vftable_;
}
// 988164: using guessed type int (__cdecl *ITableBase_GTIView_GTIViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A24: using guessed type int (__cdecl *GTIViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98048: using guessed type int _local static guard_;

//----- (00465230) --------------------------------------------------------
void __thiscall DamageEffectTab::DamageEffectTab(DamageEffectTab *this)
{
  DamageEffectTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<DamageEffect,DamageEffectTab>Vtbl *)&ITableBase<DamageEffect_DamageEffectTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_DamageEffect_DamageEffectTab_::ITableBase_DamageEffect_DamageEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<DamageEffect,DamageEffectTab>Vtbl *)&DamageEffectTab::_vftable_;
}
// 988174: using guessed type int (__cdecl *ITableBase_DamageEffect_DamageEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A34: using guessed type int (__cdecl *DamageEffectTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9804C: using guessed type int _local static guard_;

//----- (00465270) --------------------------------------------------------
void __thiscall ActiveSkillGroupTab::ActiveSkillGroupTab(ActiveSkillGroupTab *this)
{
  ActiveSkillGroupTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ActiveSkillGroup,ActiveSkillGroupTab>Vtbl *)&ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ActiveSkillGroup_ActiveSkillGroupTab_::ITableBase_ActiveSkillGroup_ActiveSkillGroupTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ActiveSkillGroup,ActiveSkillGroupTab>Vtbl *)&ActiveSkillGroupTab::_vftable_;
}
// 988184: using guessed type int (__cdecl *ITableBase_ActiveSkillGroup_ActiveSkillGroupTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A44: using guessed type int (__cdecl *ActiveSkillGroupTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98050: using guessed type int _local static guard_;

//----- (004652B0) --------------------------------------------------------
void __thiscall MapWayPointTab::MapWayPointTab(MapWayPointTab *this)
{
  MapWayPointTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MapWayPoint,MapWayPointTab>Vtbl *)&ITableBase<MapWayPoint_MapWayPointTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MapWayPoint_MapWayPointTab_::ITableBase_MapWayPoint_MapWayPointTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MapWayPoint,MapWayPointTab>Vtbl *)&MapWayPointTab::_vftable_;
}
// 988194: using guessed type int (__cdecl *ITableBase_MapWayPoint_MapWayPointTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A54: using guessed type int (__cdecl *MapWayPointTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98054: using guessed type int _local static guard_;

//----- (004652F0) --------------------------------------------------------
void __thiscall MapLinkPointTab::MapLinkPointTab(MapLinkPointTab *this)
{
  MapLinkPointTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MapLinkPoint,MapLinkPointTab>Vtbl *)&ITableBase<MapLinkPoint_MapLinkPointTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MapLinkPoint_MapLinkPointTab_::ITableBase_MapLinkPoint_MapLinkPointTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MapLinkPoint,MapLinkPointTab>Vtbl *)&MapLinkPointTab::_vftable_;
}
// 9881A4: using guessed type int (__cdecl *ITableBase_MapLinkPoint_MapLinkPointTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A64: using guessed type int (__cdecl *MapLinkPointTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98058: using guessed type int _local static guard_;

//----- (00465330) --------------------------------------------------------
void __thiscall BelongTypeInfoTab::BelongTypeInfoTab(BelongTypeInfoTab *this)
{
  BelongTypeInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BelongTypeInfo,BelongTypeInfoTab>Vtbl *)&ITableBase<BelongTypeInfo_BelongTypeInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BelongTypeInfo_BelongTypeInfoTab_::ITableBase_BelongTypeInfo_BelongTypeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BelongTypeInfo,BelongTypeInfoTab>Vtbl *)&BelongTypeInfoTab::_vftable_;
}
// 9881B4: using guessed type int (__cdecl *ITableBase_BelongTypeInfo_BelongTypeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A74: using guessed type int (__cdecl *BelongTypeInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9805C: using guessed type int _local static guard_;

//----- (00465370) --------------------------------------------------------
void *__thiscall ITableBase<BelongTypeInfo_BelongTypeInfoTab>::_vector_deleting_destructor_(BelongTypeInfoTab *this, unsigned int a2)
{
  BelongTypeInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BelongTypeInfo,BelongTypeInfoTab>Vtbl *)&ITableBase<BelongTypeInfo_BelongTypeInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9881B4: using guessed type int (__cdecl *ITableBase_BelongTypeInfo_BelongTypeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004653F0) --------------------------------------------------------
void __thiscall ChargedDeletableBuffTab::ChargedDeletableBuffTab(ChargedDeletableBuffTab *this)
{
  ChargedDeletableBuffTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ChargedDeletableBuff,ChargedDeletableBuffTab>Vtbl *)&ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab_::ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ChargedDeletableBuff,ChargedDeletableBuffTab>Vtbl *)&ChargedDeletableBuffTab::_vftable_;
}
// 988214: using guessed type int (__cdecl *ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A84: using guessed type int (__cdecl *ChargedDeletableBuffTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98060: using guessed type int _local static guard_;

//----- (00465430) --------------------------------------------------------
void *__thiscall ChargedDeletableBuffTab::_vector_deleting_destructor_(ChargedDeletableBuffTab *this, unsigned int a2)
{
  ChargedDeletableBuffTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ChargedDeletableBuff,ChargedDeletableBuffTab>Vtbl *)&ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988214: using guessed type int (__cdecl *ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004654B0) --------------------------------------------------------
void __thiscall BasicInfoTitleTab::BasicInfoTitleTab(BasicInfoTitleTab *this)
{
  BasicInfoTitleTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoTitle,BasicInfoTitleTab>Vtbl *)&ITableBase<BasicInfoTitle_BasicInfoTitleTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BasicInfoTitle_BasicInfoTitleTab_::ITableBase_BasicInfoTitle_BasicInfoTitleTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BasicInfoTitle,BasicInfoTitleTab>Vtbl *)&BasicInfoTitleTab::_vftable_;
}
// 988224: using guessed type int (__cdecl *ITableBase_BasicInfoTitle_BasicInfoTitleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988A94: using guessed type int (__cdecl *BasicInfoTitleTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98064: using guessed type int _local static guard_;

//----- (004654F0) --------------------------------------------------------
void *__thiscall BasicInfoTitleTab::_vector_deleting_destructor_(BasicInfoTitleTab *this, unsigned int a2)
{
  BasicInfoTitleTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoTitle,BasicInfoTitleTab>Vtbl *)&ITableBase<BasicInfoTitle_BasicInfoTitleTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988224: using guessed type int (__cdecl *ITableBase_BasicInfoTitle_BasicInfoTitleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465570) --------------------------------------------------------
void __thiscall BasicInfoLinkTab::BasicInfoLinkTab(BasicInfoLinkTab *this)
{
  BasicInfoLinkTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoLink,BasicInfoLinkTab>Vtbl *)&ITableBase<BasicInfoLink_BasicInfoLinkTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BasicInfoLink_BasicInfoLinkTab_::ITableBase_BasicInfoLink_BasicInfoLinkTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BasicInfoLink,BasicInfoLinkTab>Vtbl *)&BasicInfoLinkTab::_vftable_;
}
// 988234: using guessed type int (__cdecl *ITableBase_BasicInfoLink_BasicInfoLinkTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988AA4: using guessed type int (__cdecl *BasicInfoLinkTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98068: using guessed type int _local static guard_;

//----- (004655B0) --------------------------------------------------------
void *__thiscall BasicInfoLinkTab::_vector_deleting_destructor_(BasicInfoLinkTab *this, unsigned int a2)
{
  BasicInfoLinkTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoLink,BasicInfoLinkTab>Vtbl *)&ITableBase<BasicInfoLink_BasicInfoLinkTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988234: using guessed type int (__cdecl *ITableBase_BasicInfoLink_BasicInfoLinkTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465630) --------------------------------------------------------
void __thiscall BasicInfoTipTab::BasicInfoTipTab(BasicInfoTipTab *this)
{
  BasicInfoTipTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoTip,BasicInfoTipTab>Vtbl *)&ITableBase<BasicInfoTip_BasicInfoTipTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BasicInfoTip_BasicInfoTipTab_::ITableBase_BasicInfoTip_BasicInfoTipTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BasicInfoTip,BasicInfoTipTab>Vtbl *)&BasicInfoTipTab::_vftable_;
}
// 988244: using guessed type int (__cdecl *ITableBase_BasicInfoTip_BasicInfoTipTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988AB4: using guessed type int (__cdecl *BasicInfoTipTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9806C: using guessed type int _local static guard_;

//----- (00465670) --------------------------------------------------------
void *__thiscall ITableBase<BasicInfoTip_BasicInfoTipTab>::_scalar_deleting_destructor_(BasicInfoTipTab *this, unsigned int a2)
{
  BasicInfoTipTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoTip,BasicInfoTipTab>Vtbl *)&ITableBase<BasicInfoTip_BasicInfoTipTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988244: using guessed type int (__cdecl *ITableBase_BasicInfoTip_BasicInfoTipTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004656F0) --------------------------------------------------------
void __thiscall BasicInfoTipCycleTab::BasicInfoTipCycleTab(BasicInfoTipCycleTab *this)
{
  BasicInfoTipCycleTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoTipCycle,BasicInfoTipCycleTab>Vtbl *)&ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab_::ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BasicInfoTipCycle,BasicInfoTipCycleTab>Vtbl *)&BasicInfoTipCycleTab::_vftable_;
}
// 988254: using guessed type int (__cdecl *ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988AC4: using guessed type int (__cdecl *BasicInfoTipCycleTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98070: using guessed type int _local static guard_;

//----- (00465730) --------------------------------------------------------
void *__thiscall ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::_vector_deleting_destructor_(BasicInfoTipCycleTab *this, unsigned int a2)
{
  BasicInfoTipCycleTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoTipCycle,BasicInfoTipCycleTab>Vtbl *)&ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988254: using guessed type int (__cdecl *ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004657B0) --------------------------------------------------------
void __thiscall BasicInfoFindTab::BasicInfoFindTab(BasicInfoFindTab *this)
{
  BasicInfoFindTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoFind,BasicInfoFindTab>Vtbl *)&ITableBase<BasicInfoFind_BasicInfoFindTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BasicInfoFind_BasicInfoFindTab_::ITableBase_BasicInfoFind_BasicInfoFindTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BasicInfoFind,BasicInfoFindTab>Vtbl *)&BasicInfoFindTab::_vftable_;
}
// 988264: using guessed type int (__cdecl *ITableBase_BasicInfoFind_BasicInfoFindTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988AD4: using guessed type int (__cdecl *BasicInfoFindTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98074: using guessed type int _local static guard_;

//----- (004657F0) --------------------------------------------------------
void *__thiscall ITableBase<BasicInfoFind_BasicInfoFindTab>::_vector_deleting_destructor_(BasicInfoFindTab *this, unsigned int a2)
{
  BasicInfoFindTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoFind,BasicInfoFindTab>Vtbl *)&ITableBase<BasicInfoFind_BasicInfoFindTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988264: using guessed type int (__cdecl *ITableBase_BasicInfoFind_BasicInfoFindTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465870) --------------------------------------------------------
void __thiscall BasicInfoFindUITab::BasicInfoFindUITab(BasicInfoFindUITab *this)
{
  BasicInfoFindUITab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoFindUI,BasicInfoFindUITab>Vtbl *)&ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BasicInfoFindUI_BasicInfoFindUITab_::ITableBase_BasicInfoFindUI_BasicInfoFindUITab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BasicInfoFindUI,BasicInfoFindUITab>Vtbl *)&BasicInfoFindUITab::_vftable_;
}
// 988274: using guessed type int (__cdecl *ITableBase_BasicInfoFindUI_BasicInfoFindUITab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988AE4: using guessed type int (__cdecl *BasicInfoFindUITab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98078: using guessed type int _local static guard_;

//----- (004658B0) --------------------------------------------------------
void __thiscall BasicInfoFindWordTab::BasicInfoFindWordTab(BasicInfoFindWordTab *this)
{
  BasicInfoFindWordTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<BasicInfoFindWord,BasicInfoFindWordTab>Vtbl *)&ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BasicInfoFindWord_BasicInfoFindWordTab_::ITableBase_BasicInfoFindWord_BasicInfoFindWordTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<BasicInfoFindWord,BasicInfoFindWordTab>Vtbl *)&BasicInfoFindWordTab::_vftable_;
}
// 988284: using guessed type int (__cdecl *ITableBase_BasicInfoFindWord_BasicInfoFindWordTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988AF4: using guessed type int (__cdecl *BasicInfoFindWordTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9807C: using guessed type int _local static guard_;

//----- (004658F0) --------------------------------------------------------
void __thiscall CollectCardTab::CollectCardTab(CollectCardTab *this)
{
  CollectCardTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCard,CollectCardTab>Vtbl *)&ITableBase<CollectCard_CollectCardTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_CollectCard_CollectCardTab_::ITableBase_CollectCard_CollectCardTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<CollectCard,CollectCardTab>Vtbl *)&CollectCardTab::_vftable_;
}
// 988294: using guessed type int (__cdecl *ITableBase_CollectCard_CollectCardTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B04: using guessed type int (__cdecl *CollectCardTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98080: using guessed type int _local static guard_;

//----- (00465930) --------------------------------------------------------
void __thiscall CollectCardViewTab::CollectCardViewTab(CollectCardViewTab *this)
{
  CollectCardViewTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardView,CollectCardViewTab>Vtbl *)&ITableBase<CollectCardView_CollectCardViewTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_CollectCardView_CollectCardViewTab_::ITableBase_CollectCardView_CollectCardViewTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<CollectCardView,CollectCardViewTab>Vtbl *)&CollectCardViewTab::_vftable_;
}
// 9882A4: using guessed type int (__cdecl *ITableBase_CollectCardView_CollectCardViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B14: using guessed type int (__cdecl *CollectCardViewTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98084: using guessed type int _local static guard_;

//----- (00465970) --------------------------------------------------------
void *__thiscall CollectCardViewTab::_scalar_deleting_destructor_(CollectCardViewTab *this, unsigned int a2)
{
  CollectCardViewTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardView,CollectCardViewTab>Vtbl *)&ITableBase<CollectCardView_CollectCardViewTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9882A4: using guessed type int (__cdecl *ITableBase_CollectCardView_CollectCardViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004659F0) --------------------------------------------------------
void __thiscall CollectCardGroupDescTab::CollectCardGroupDescTab(CollectCardGroupDescTab *this)
{
  CollectCardGroupDescTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardGroupDesc,CollectCardGroupDescTab>Vtbl *)&ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab_::ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<CollectCardGroupDesc,CollectCardGroupDescTab>Vtbl *)&CollectCardGroupDescTab::_vftable_;
}
// 9882B4: using guessed type int (__cdecl *ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B24: using guessed type int (__cdecl *CollectCardGroupDescTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98088: using guessed type int _local static guard_;

//----- (00465A30) --------------------------------------------------------
void __thiscall CollectCardRewardTab::CollectCardRewardTab(CollectCardRewardTab *this)
{
  CollectCardRewardTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardReward,CollectCardRewardTab>Vtbl *)&ITableBase<CollectCardReward_CollectCardRewardTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_CollectCardReward_CollectCardRewardTab_::ITableBase_CollectCardReward_CollectCardRewardTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<CollectCardReward,CollectCardRewardTab>Vtbl *)&CollectCardRewardTab::_vftable_;
}
// 9882C4: using guessed type int (__cdecl *ITableBase_CollectCardReward_CollectCardRewardTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B34: using guessed type int (__cdecl *CollectCardRewardTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9808C: using guessed type int _local static guard_;

//----- (00465A70) --------------------------------------------------------
void *__thiscall ITableBase<CollectCardReward_CollectCardRewardTab>::_vector_deleting_destructor_(CollectCardRewardTab *this, unsigned int a2)
{
  CollectCardRewardTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardReward,CollectCardRewardTab>Vtbl *)&ITableBase<CollectCardReward_CollectCardRewardTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9882C4: using guessed type int (__cdecl *ITableBase_CollectCardReward_CollectCardRewardTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465AF0) --------------------------------------------------------
void __thiscall CollectCardTitleTab::CollectCardTitleTab(CollectCardTitleTab *this)
{
  CollectCardTitleTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<CollectCardTitle,CollectCardTitleTab>Vtbl *)&ITableBase<CollectCardTitle_CollectCardTitleTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_CollectCardTitle_CollectCardTitleTab_::ITableBase_CollectCardTitle_CollectCardTitleTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<CollectCardTitle,CollectCardTitleTab>Vtbl *)&CollectCardTitleTab::_vftable_;
}
// 9882D4: using guessed type int (__cdecl *ITableBase_CollectCardTitle_CollectCardTitleTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B44: using guessed type int (__cdecl *CollectCardTitleTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98090: using guessed type int _local static guard_;

//----- (00465B30) --------------------------------------------------------
void __thiscall MoverMainTab::MoverMainTab(MoverMainTab *this)
{
  MoverMainTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverMain,MoverMainTab>Vtbl *)&ITableBase<MoverMain_MoverMainTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverMain_MoverMainTab_::ITableBase_MoverMain_MoverMainTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverMain,MoverMainTab>Vtbl *)&MoverMainTab::_vftable_;
}
// 98830C: using guessed type int (__cdecl *ITableBase_MoverMain_MoverMainTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B54: using guessed type int (__cdecl *MoverMainTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98094: using guessed type int _local static guard_;

//----- (00465B70) --------------------------------------------------------
void __thiscall MoverUseSkillTab::MoverUseSkillTab(MoverUseSkillTab *this)
{
  MoverUseSkillTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverUseSkill,MoverUseSkillTab>Vtbl *)&ITableBase<MoverUseSkill_MoverUseSkillTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverUseSkill_MoverUseSkillTab_::ITableBase_MoverUseSkill_MoverUseSkillTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverUseSkill,MoverUseSkillTab>Vtbl *)&MoverUseSkillTab::_vftable_;
}
// 98831C: using guessed type int (__cdecl *ITableBase_MoverUseSkill_MoverUseSkillTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B64: using guessed type int (__cdecl *MoverUseSkillTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98098: using guessed type int _local static guard_;

//----- (00465BB0) --------------------------------------------------------
void *__thiscall ITableBase<MoverUseSkill_MoverUseSkillTab>::_vector_deleting_destructor_(MoverUseSkillTab *this, unsigned int a2)
{
  MoverUseSkillTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverUseSkill,MoverUseSkillTab>Vtbl *)&ITableBase<MoverUseSkill_MoverUseSkillTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98831C: using guessed type int (__cdecl *ITableBase_MoverUseSkill_MoverUseSkillTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465C30) --------------------------------------------------------
void __thiscall MoverHGTab::MoverHGTab(MoverHGTab *this)
{
  MoverHGTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverHG,MoverHGTab>Vtbl *)&ITableBase<MoverHG_MoverHGTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverHG_MoverHGTab_::ITableBase_MoverHG_MoverHGTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverHG,MoverHGTab>Vtbl *)&MoverHGTab::_vftable_;
}
// 98832C: using guessed type int (__cdecl *ITableBase_MoverHG_MoverHGTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B74: using guessed type int (__cdecl *MoverHGTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9809C: using guessed type int _local static guard_;

//----- (00465C70) --------------------------------------------------------
void __thiscall MoverViewTab::MoverViewTab(MoverViewTab *this)
{
  MoverViewTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverView,MoverViewTab>Vtbl *)&ITableBase<MoverView_MoverViewTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverView_MoverViewTab_::ITableBase_MoverView_MoverViewTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverView,MoverViewTab>Vtbl *)&MoverViewTab::_vftable_;
}
// 98833C: using guessed type int (__cdecl *ITableBase_MoverView_MoverViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B84: using guessed type int (__cdecl *MoverViewTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980A0: using guessed type int _local static guard_;

//----- (00465CB0) --------------------------------------------------------
void *__thiscall MoverViewTab::_vector_deleting_destructor_(MoverViewTab *this, unsigned int a2)
{
  MoverViewTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverView,MoverViewTab>Vtbl *)&ITableBase<MoverView_MoverViewTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98833C: using guessed type int (__cdecl *ITableBase_MoverView_MoverViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465D30) --------------------------------------------------------
void __thiscall MoverSlotViewTab::MoverSlotViewTab(MoverSlotViewTab *this)
{
  MoverSlotViewTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverSlotView,MoverSlotViewTab>Vtbl *)&ITableBase<MoverSlotView_MoverSlotViewTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverSlotView_MoverSlotViewTab_::ITableBase_MoverSlotView_MoverSlotViewTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverSlotView,MoverSlotViewTab>Vtbl *)&MoverSlotViewTab::_vftable_;
}
// 98834C: using guessed type int (__cdecl *ITableBase_MoverSlotView_MoverSlotViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988B94: using guessed type int (__cdecl *MoverSlotViewTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980A4: using guessed type int _local static guard_;

//----- (00465D70) --------------------------------------------------------
void *__thiscall MoverSlotViewTab::_vector_deleting_destructor_(MoverSlotViewTab *this, unsigned int a2)
{
  MoverSlotViewTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverSlotView,MoverSlotViewTab>Vtbl *)&ITableBase<MoverSlotView_MoverSlotViewTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98834C: using guessed type int (__cdecl *ITableBase_MoverSlotView_MoverSlotViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465DF0) --------------------------------------------------------
void __thiscall MoverSlotCharAniTab::MoverSlotCharAniTab(MoverSlotCharAniTab *this)
{
  MoverSlotCharAniTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverSlotCharAni,MoverSlotCharAniTab>Vtbl *)&ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverSlotCharAni_MoverSlotCharAniTab_::ITableBase_MoverSlotCharAni_MoverSlotCharAniTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverSlotCharAni,MoverSlotCharAniTab>Vtbl *)&MoverSlotCharAniTab::_vftable_;
}
// 98835C: using guessed type int (__cdecl *ITableBase_MoverSlotCharAni_MoverSlotCharAniTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988BA4: using guessed type int (__cdecl *MoverSlotCharAniTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980A8: using guessed type int _local static guard_;

//----- (00465E30) --------------------------------------------------------
void __thiscall MoverAbilityTab::MoverAbilityTab(MoverAbilityTab *this)
{
  MoverAbilityTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverAbility,MoverAbilityTab>Vtbl *)&ITableBase<MoverAbility_MoverAbilityTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverAbility_MoverAbilityTab_::ITableBase_MoverAbility_MoverAbilityTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverAbility,MoverAbilityTab>Vtbl *)&MoverAbilityTab::_vftable_;
}
// 98836C: using guessed type int (__cdecl *ITableBase_MoverAbility_MoverAbilityTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988BB4: using guessed type int (__cdecl *MoverAbilityTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980AC: using guessed type int _local static guard_;

//----- (00465E70) --------------------------------------------------------
void *__thiscall ITableBase<MoverAbility_MoverAbilityTab>::_scalar_deleting_destructor_(MoverAbilityTab *this, unsigned int a2)
{
  MoverAbilityTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverAbility,MoverAbilityTab>Vtbl *)&ITableBase<MoverAbility_MoverAbilityTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98836C: using guessed type int (__cdecl *ITableBase_MoverAbility_MoverAbilityTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00465EF0) --------------------------------------------------------
void __thiscall MoverItemTab::MoverItemTab(MoverItemTab *this)
{
  MoverItemTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverItem,MoverItemTab>Vtbl *)&ITableBase<MoverItem_MoverItemTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverItem_MoverItemTab_::ITableBase_MoverItem_MoverItemTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverItem,MoverItemTab>Vtbl *)&MoverItemTab::_vftable_;
}
// 98837C: using guessed type int (__cdecl *ITableBase_MoverItem_MoverItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988BC4: using guessed type int (__cdecl *MoverItemTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980B0: using guessed type int _local static guard_;

//----- (00465F30) --------------------------------------------------------
void __thiscall PetMainTab::PetMainTab(PetMainTab *this)
{
  PetMainTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<PupMain,PetMainTab>Vtbl *)&ITableBase<PupMain_PetMainTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_PupMain_PetMainTab_::ITableBase_PupMain_PetMainTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<PupMain,PetMainTab>Vtbl *)&PetMainTab::_vftable_;
}
// 98838C: using guessed type int (__cdecl *ITableBase_PupMain_PetMainTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988BD4: using guessed type int (__cdecl *PetMainTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980B4: using guessed type int _local static guard_;

//----- (00465F70) --------------------------------------------------------
void __thiscall PetViewTab::PetViewTab(PetViewTab *this)
{
  PetViewTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<PupView,PetViewTab>Vtbl *)&ITableBase<PupView_PetViewTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_PupView_PetViewTab_::ITableBase_PupView_PetViewTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<PupView,PetViewTab>Vtbl *)&PetViewTab::_vftable_;
}
// 98839C: using guessed type int (__cdecl *ITableBase_PupView_PetViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988BE4: using guessed type int (__cdecl *PetViewTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980B8: using guessed type int _local static guard_;

//----- (00465FB0) --------------------------------------------------------
void *__thiscall PetViewTab::_scalar_deleting_destructor_(PetViewTab *this, unsigned int a2)
{
  PetViewTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<PupView,PetViewTab>Vtbl *)&ITableBase<PupView_PetViewTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98839C: using guessed type int (__cdecl *ITableBase_PupView_PetViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00466030) --------------------------------------------------------
void __thiscall KQVoteDescTable::KQVoteDescTable(KQVoteDescTable *this)
{
  KQVoteDescTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<KQVoteDesc,KQVoteDescTable>Vtbl *)&ITableBase<KQVoteDesc_KQVoteDescTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_KQVoteDesc_KQVoteDescTable_::ITableBase_KQVoteDesc_KQVoteDescTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<KQVoteDesc,KQVoteDescTable>Vtbl *)&KQVoteDescTable::_vftable_;
}
// 9883AC: using guessed type int (__cdecl *ITableBase_KQVoteDesc_KQVoteDescTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988BF4: using guessed type int (__cdecl *KQVoteDescTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980BC: using guessed type int _local static guard_;

//----- (00466070) --------------------------------------------------------
void *__thiscall KQVoteDescTable::_scalar_deleting_destructor_(KQVoteDescTable *this, unsigned int a2)
{
  KQVoteDescTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<KQVoteDesc,KQVoteDescTable>Vtbl *)&ITableBase<KQVoteDesc_KQVoteDescTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9883AC: using guessed type int (__cdecl *ITableBase_KQVoteDesc_KQVoteDescTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004660F0) --------------------------------------------------------
void __thiscall KQVoteMajorityRateTable::KQVoteMajorityRateTable(KQVoteMajorityRateTable *this)
{
  KQVoteMajorityRateTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<KQVoteMajorityRate,KQVoteMajorityRateTable>Vtbl *)&ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable_::ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<KQVoteMajorityRate,KQVoteMajorityRateTable>Vtbl *)&KQVoteMajorityRateTable::_vftable_;
}
// 9883BC: using guessed type int (__cdecl *ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C04: using guessed type int (__cdecl *KQVoteMajorityRateTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980C0: using guessed type int _local static guard_;

//----- (00466130) --------------------------------------------------------
void *__thiscall ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::_vector_deleting_destructor_(KQVoteMajorityRateTable *this, unsigned int a2)
{
  KQVoteMajorityRateTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<KQVoteMajorityRate,KQVoteMajorityRateTable>Vtbl *)&ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9883BC: using guessed type int (__cdecl *ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004661B0) --------------------------------------------------------
void __thiscall KQIsVoteTable::KQIsVoteTable(KQIsVoteTable *this)
{
  KQIsVoteTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<KQIsVote,KQIsVoteTable>Vtbl *)&ITableBase<KQIsVote_KQIsVoteTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_KQIsVote_KQIsVoteTable_::ITableBase_KQIsVote_KQIsVoteTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<KQIsVote,KQIsVoteTable>Vtbl *)&KQIsVoteTable::_vftable_;
}
// 9883CC: using guessed type int (__cdecl *ITableBase_KQIsVote_KQIsVoteTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C14: using guessed type int (__cdecl *KQIsVoteTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980C4: using guessed type int _local static guard_;

//----- (004661F0) --------------------------------------------------------
void __thiscall KQTeamTable::KQTeamTable(KQTeamTable *this)
{
  KQTeamTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<KQTeam,KQTeamTable>Vtbl *)&ITableBase<KQTeam_KQTeamTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_KQTeam_KQTeamTable_::ITableBase_KQTeam_KQTeamTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<KQTeam,KQTeamTable>Vtbl *)&KQTeamTable::_vftable_;
}
// 9883DC: using guessed type int (__cdecl *ITableBase_KQTeam_KQTeamTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C24: using guessed type int (__cdecl *KQTeamTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980C8: using guessed type int _local static guard_;

//----- (00466230) --------------------------------------------------------
void *__thiscall KQTeamTable::_scalar_deleting_destructor_(KQTeamTable *this, unsigned int a2)
{
  KQTeamTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<KQTeam,KQTeamTable>Vtbl *)&ITableBase<KQTeam_KQTeamTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9883DC: using guessed type int (__cdecl *ITableBase_KQTeam_KQTeamTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004662B0) --------------------------------------------------------
void __thiscall MobConditionViewTab::MobConditionViewTab(MobConditionViewTab *this)
{
  MobConditionViewTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MobConditionView,MobConditionViewTab>Vtbl *)&ITableBase<MobConditionView_MobConditionViewTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MobConditionView_MobConditionViewTab_::ITableBase_MobConditionView_MobConditionViewTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MobConditionView,MobConditionViewTab>Vtbl *)&MobConditionViewTab::_vftable_;
}
// 9883EC: using guessed type int (__cdecl *ITableBase_MobConditionView_MobConditionViewTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C34: using guessed type int (__cdecl *MobConditionViewTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980CC: using guessed type int _local static guard_;

//----- (004662F0) --------------------------------------------------------
void __thiscall MobNoFadeInTab::MobNoFadeInTab(MobNoFadeInTab *this)
{
  MobNoFadeInTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MobNoFadeIn,MobNoFadeInTab>Vtbl *)&ITableBase<MobNoFadeIn_MobNoFadeInTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MobNoFadeIn_MobNoFadeInTab_::ITableBase_MobNoFadeIn_MobNoFadeInTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MobNoFadeIn,MobNoFadeInTab>Vtbl *)&MobNoFadeInTab::_vftable_;
}
// 9883FC: using guessed type int (__cdecl *ITableBase_MobNoFadeIn_MobNoFadeInTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C44: using guessed type int (__cdecl *MobNoFadeInTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980D0: using guessed type int _local static guard_;

//----- (00466330) --------------------------------------------------------
void *__thiscall ITableBase<MobNoFadeIn_MobNoFadeInTab>::_vector_deleting_destructor_(MobNoFadeInTab *this, unsigned int a2)
{
  MobNoFadeInTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MobNoFadeIn,MobNoFadeInTab>Vtbl *)&ITableBase<MobNoFadeIn_MobNoFadeInTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9883FC: using guessed type int (__cdecl *ITableBase_MobNoFadeIn_MobNoFadeInTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004663B0) --------------------------------------------------------
void __thiscall MarketSearchInfoTab::MarketSearchInfoTab(MarketSearchInfoTab *this)
{
  MarketSearchInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MarketSearchInfo,MarketSearchInfoTab>Vtbl *)&ITableBase<MarketSearchInfo_MarketSearchInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MarketSearchInfo_MarketSearchInfoTab_::ITableBase_MarketSearchInfo_MarketSearchInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MarketSearchInfo,MarketSearchInfoTab>Vtbl *)&MarketSearchInfoTab::_vftable_;
}
// 98840C: using guessed type int (__cdecl *ITableBase_MarketSearchInfo_MarketSearchInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C54: using guessed type int (__cdecl *MarketSearchInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980D4: using guessed type int _local static guard_;

//----- (004663F0) --------------------------------------------------------
void *__thiscall MarketSearchInfoTab::_scalar_deleting_destructor_(MarketSearchInfoTab *this, unsigned int a2)
{
  MarketSearchInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MarketSearchInfo,MarketSearchInfoTab>Vtbl *)&ITableBase<MarketSearchInfo_MarketSearchInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98840C: using guessed type int (__cdecl *ITableBase_MarketSearchInfo_MarketSearchInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00466470) --------------------------------------------------------
void __thiscall ChrCreateEquipTab::ChrCreateEquipTab(ChrCreateEquipTab *this)
{
  ChrCreateEquipTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ChrCreateEquip,ChrCreateEquipTab>Vtbl *)&ITableBase<ChrCreateEquip_ChrCreateEquipTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ChrCreateEquip_ChrCreateEquipTab_::ITableBase_ChrCreateEquip_ChrCreateEquipTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ChrCreateEquip,ChrCreateEquipTab>Vtbl *)&ChrCreateEquipTab::_vftable_;
}
// 98841C: using guessed type int (__cdecl *ITableBase_ChrCreateEquip_ChrCreateEquipTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C64: using guessed type int (__cdecl *ChrCreateEquipTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980D8: using guessed type int _local static guard_;

//----- (004664B0) --------------------------------------------------------
void *__thiscall ChrCreateEquipTab::_scalar_deleting_destructor_(ChrCreateEquipTab *this, unsigned int a2)
{
  ChrCreateEquipTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ChrCreateEquip,ChrCreateEquipTab>Vtbl *)&ITableBase<ChrCreateEquip_ChrCreateEquipTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98841C: using guessed type int (__cdecl *ITableBase_ChrCreateEquip_ChrCreateEquipTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00466530) --------------------------------------------------------
void __thiscall MoverUpgradeEffectTab::MoverUpgradeEffectTab(MoverUpgradeEffectTab *this)
{
  MoverUpgradeEffectTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MoverUpgradeEffect,MoverUpgradeEffectTab>Vtbl *)&ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab_::ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MoverUpgradeEffect,MoverUpgradeEffectTab>Vtbl *)&MoverUpgradeEffectTab::_vftable_;
}
// 98842C: using guessed type int (__cdecl *ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C74: using guessed type int (__cdecl *MoverUpgradeEffectTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980DC: using guessed type int _local static guard_;

//----- (00466570) --------------------------------------------------------
void __thiscall ChatColorTab::ChatColorTab(ChatColorTab *this)
{
  ChatColorTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ChatColor,ChatColorTab>Vtbl *)&ITableBase<ChatColor_ChatColorTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ChatColor_ChatColorTab_::ITableBase_ChatColor_ChatColorTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ChatColor,ChatColorTab>Vtbl *)&ChatColorTab::_vftable_;
}
// 98843C: using guessed type int (__cdecl *ITableBase_ChatColor_ChatColorTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C84: using guessed type int (__cdecl *ChatColorTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980E0: using guessed type int _local static guard_;

//----- (004665B0) --------------------------------------------------------
void __thiscall TermExtendMatchTable::TermExtendMatchTable(TermExtendMatchTable *this)
{
  TermExtendMatchTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<TermExtendMatch,TermExtendMatchTable>Vtbl *)&ITableBase<TermExtendMatch_TermExtendMatchTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_TermExtendMatch_TermExtendMatchTable_::ITableBase_TermExtendMatch_TermExtendMatchTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<TermExtendMatch,TermExtendMatchTable>Vtbl *)&TermExtendMatchTable::_vftable_;
}
// 98844C: using guessed type int (__cdecl *ITableBase_TermExtendMatch_TermExtendMatchTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988C94: using guessed type int (__cdecl *TermExtendMatchTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980E4: using guessed type int _local static guard_;

//----- (004665F0) --------------------------------------------------------
void *__thiscall ITableBase<TermExtendMatch_TermExtendMatchTable>::_scalar_deleting_destructor_(TermExtendMatchTable *this, unsigned int a2)
{
  TermExtendMatchTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<TermExtendMatch,TermExtendMatchTable>Vtbl *)&ITableBase<TermExtendMatch_TermExtendMatchTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98844C: using guessed type int (__cdecl *ITableBase_TermExtendMatch_TermExtendMatchTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00466670) --------------------------------------------------------
void __thiscall TermExtendMatchGroupDescTable::TermExtendMatchGroupDescTable(TermExtendMatchGroupDescTable *this)
{
  TermExtendMatchGroupDescTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<TermExtendMatchGroupDesc,TermExtendMatchGroupDescTable>Vtbl *)&ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable_::ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<TermExtendMatchGroupDesc,TermExtendMatchGroupDescTable>Vtbl *)&TermExtendMatchGroupDescTable::_vftable_;
}
// 98845C: using guessed type int (__cdecl *ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988CA4: using guessed type int (__cdecl *TermExtendMatchGroupDescTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980E8: using guessed type int _local static guard_;

//----- (004666B0) --------------------------------------------------------
void *__thiscall ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::_scalar_deleting_destructor_(TermExtendMatchGroupDescTable *this, unsigned int a2)
{
  TermExtendMatchGroupDescTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<TermExtendMatchGroupDesc,TermExtendMatchGroupDescTable>Vtbl *)&ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98845C: using guessed type int (__cdecl *ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00466730) --------------------------------------------------------
void __thiscall AbStateMsgTable::AbStateMsgTable(AbStateMsgTable *this)
{
  AbStateMsgTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<AbStateMsg,AbStateMsgTable>Vtbl *)&ITableBase<AbStateMsg_AbStateMsgTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_AbStateMsg_AbStateMsgTable_::ITableBase_AbStateMsg_AbStateMsgTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<AbStateMsg,AbStateMsgTable>Vtbl *)&AbStateMsgTable::_vftable_;
}
// 98846C: using guessed type int (__cdecl *ITableBase_AbStateMsg_AbStateMsgTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988CB4: using guessed type int (__cdecl *AbStateMsgTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980EC: using guessed type int _local static guard_;

//----- (00466770) --------------------------------------------------------
void *__thiscall ITableBase<AbStateMsg_AbStateMsgTable>::_vector_deleting_destructor_(AbStateMsgTable *this, unsigned int a2)
{
  AbStateMsgTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<AbStateMsg,AbStateMsgTable>Vtbl *)&ITableBase<AbStateMsg_AbStateMsgTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98846C: using guessed type int (__cdecl *ITableBase_AbStateMsg_AbStateMsgTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004667F0) --------------------------------------------------------
void __thiscall MinimonInfoTable::MinimonInfoTable(MinimonInfoTable *this)
{
  MinimonInfoTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MinimonInfo,MinimonInfoTable>Vtbl *)&ITableBase<MinimonInfo_MinimonInfoTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MinimonInfo_MinimonInfoTable_::ITableBase_MinimonInfo_MinimonInfoTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MinimonInfo,MinimonInfoTable>Vtbl *)&MinimonInfoTable::_vftable_;
}
// 98847C: using guessed type int (__cdecl *ITableBase_MinimonInfo_MinimonInfoTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988CC4: using guessed type int (__cdecl *MinimonInfoTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980F0: using guessed type int _local static guard_;

//----- (00466830) --------------------------------------------------------
void __thiscall MinimonAutoUseItemTable::MinimonAutoUseItemTable(MinimonAutoUseItemTable *this)
{
  MinimonAutoUseItemTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MinimonAutoUseItem,MinimonAutoUseItemTable>Vtbl *)&ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable_::ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MinimonAutoUseItem,MinimonAutoUseItemTable>Vtbl *)&MinimonAutoUseItemTable::_vftable_;
}
// 98848C: using guessed type int (__cdecl *ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988CD4: using guessed type int (__cdecl *MinimonAutoUseItemTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980F4: using guessed type int _local static guard_;

//----- (00466870) --------------------------------------------------------
void *__thiscall MinimonAutoUseItemTable::_scalar_deleting_destructor_(MinimonAutoUseItemTable *this, unsigned int a2)
{
  MinimonAutoUseItemTable *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MinimonAutoUseItem,MinimonAutoUseItemTable>Vtbl *)&ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98848C: using guessed type int (__cdecl *ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004668F0) --------------------------------------------------------
void __thiscall ItemViewDummyTab::ItemViewDummyTab(ItemViewDummyTab *this)
{
  ItemViewDummyTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemViewDummy,ItemViewDummyTab>Vtbl *)&ITableBase<ItemViewDummy_ItemViewDummyTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemViewDummy_ItemViewDummyTab_::ITableBase_ItemViewDummy_ItemViewDummyTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ItemViewDummy,ItemViewDummyTab>Vtbl *)&ItemViewDummyTab::_vftable_;
}
// 98849C: using guessed type int (__cdecl *ITableBase_ItemViewDummy_ItemViewDummyTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988CE4: using guessed type int (__cdecl *ItemViewDummyTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980F8: using guessed type int _local static guard_;

//----- (00466930) --------------------------------------------------------
void *__thiscall ITableBase<ItemViewDummy_ItemViewDummyTab>::_vector_deleting_destructor_(ItemViewDummyTab *this, unsigned int a2)
{
  ItemViewDummyTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ItemViewDummy,ItemViewDummyTab>Vtbl *)&ITableBase<ItemViewDummy_ItemViewDummyTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98849C: using guessed type int (__cdecl *ITableBase_ItemViewDummy_ItemViewDummyTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (004669B0) --------------------------------------------------------
void __thiscall UseCalssTypeTable::UseCalssTypeTable(UseCalssTypeTable *this)
{
  UseCalssTypeTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<UseClassTypeInfo,UseCalssTypeTable>Vtbl *)&ITableBase<UseClassTypeInfo_UseCalssTypeTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_UseClassTypeInfo_UseCalssTypeTable_::ITableBase_UseClassTypeInfo_UseCalssTypeTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<UseClassTypeInfo,UseCalssTypeTable>Vtbl *)&UseCalssTypeTable::_vftable_;
}
// 9884AC: using guessed type int (__cdecl *ITableBase_UseClassTypeInfo_UseCalssTypeTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988CF4: using guessed type int (__cdecl *UseCalssTypeTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A980FC: using guessed type int _local static guard_;

//----- (004669F0) --------------------------------------------------------
void __thiscall ChrBasicEquipTab::ChrBasicEquipTab(ChrBasicEquipTab *this)
{
  ChrBasicEquipTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<ChrBasicEquip,ChrBasicEquipTab>Vtbl *)&ITableBase<ChrBasicEquip_ChrBasicEquipTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ChrBasicEquip_ChrBasicEquipTab_::ITableBase_ChrBasicEquip_ChrBasicEquipTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<ChrBasicEquip,ChrBasicEquipTab>Vtbl *)&ChrBasicEquipTab::_vftable_;
}
// 9884BC: using guessed type int (__cdecl *ITableBase_ChrBasicEquip_ChrBasicEquipTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D04: using guessed type int (__cdecl *ChrBasicEquipTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98100: using guessed type int _local static guard_;

//----- (00466A30) --------------------------------------------------------
void *__thiscall ChrBasicEquipTab::_vector_deleting_destructor_(ChrBasicEquipTab *this, unsigned int a2)
{
  ChrBasicEquipTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<ChrBasicEquip,ChrBasicEquipTab>Vtbl *)&ITableBase<ChrBasicEquip_ChrBasicEquipTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9884BC: using guessed type int (__cdecl *ITableBase_ChrBasicEquip_ChrBasicEquipTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00466AB0) --------------------------------------------------------
void __thiscall FaceCutMsgTab::FaceCutMsgTab(FaceCutMsgTab *this)
{
  FaceCutMsgTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<FaceCutMsg,FaceCutMsgTab>Vtbl *)&ITableBase<FaceCutMsg_FaceCutMsgTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_FaceCutMsg_FaceCutMsgTab_::ITableBase_FaceCutMsg_FaceCutMsgTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<FaceCutMsg,FaceCutMsgTab>Vtbl *)&FaceCutMsgTab::_vftable_;
}
// 988724: using guessed type int (__cdecl *ITableBase_FaceCutMsg_FaceCutMsgTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D14: using guessed type int (__cdecl *FaceCutMsgTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98150: using guessed type int _local static guard_;

//----- (00466AF0) --------------------------------------------------------
void *__thiscall FaceCutMsgTab::_vector_deleting_destructor_(FaceCutMsgTab *this, unsigned int a2)
{
  FaceCutMsgTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<FaceCutMsg,FaceCutMsgTab>Vtbl *)&ITableBase<FaceCutMsg_FaceCutMsgTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 988724: using guessed type int (__cdecl *ITableBase_FaceCutMsg_FaceCutMsgTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (00466B70) --------------------------------------------------------
bool __cdecl ITableBase<ColorInfoType_ColorInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable;
  if ( !*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ColorInfoTable::ColorInfoTable((ColorInfoTable *)v2);
    else
      v2 = 0;
    *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 22 )
  {
    v5 = acFn;
    v6 = *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(**(_DWORD **)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00466C50) --------------------------------------------------------
bool __cdecl ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable;
  if ( !ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemViewEquipTypeInfoTab::ItemViewEquipTypeInfoTab((ItemViewEquipTypeInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1082 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97DFC: using guessed type int ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab___ms_pkTable;

//----- (00466D30) --------------------------------------------------------
bool __cdecl ITableBase<ItemMoney_ItemMoneyTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable;
  if ( !ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemMoneyTab::ItemMoneyTab((ItemMoneyTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 55 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E00: using guessed type int ITableBase_ItemMoney_ItemMoneyTab___ms_pkTable;

//----- (00466E10) --------------------------------------------------------
bool __cdecl ITableBase<ClassName_CharClass>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ClassName_CharClass>::ms_pkTable;
  if ( !ITableBase<ClassName_CharClass>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CharClass::CharClass((CharClass *)v2);
    else
      v2 = 0;
    ITableBase<ClassName_CharClass>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ClassName_CharClass>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 196 )
  {
    v5 = acFn;
    v6 = ITableBase<ClassName_CharClass>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ClassName_CharClass>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (00466EF0) --------------------------------------------------------
bool __cdecl ITableBase<ActionEffectInfo_ActionEffectInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable;
  if ( !ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ActionEffectInfoTab::ActionEffectInfoTab((ActionEffectInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 391 )
  {
    v5 = acFn;
    v6 = ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E04: using guessed type int ITableBase_ActionEffectInfo_ActionEffectInfoTab___ms_pkTable;

//----- (00466FD0) --------------------------------------------------------
bool __cdecl ITableBase<HairInfo_HairInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<HairInfo_HairInfoTab>::ms_pkTable;
  if ( !ITableBase<HairInfo_HairInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      HairInfoTab::HairInfoTab((HairInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<HairInfo_HairInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 14925 )
  {
    v5 = acFn;
    v6 = ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;

//----- (004670B0) --------------------------------------------------------
bool __cdecl ITableBase<HairColorInfo_HairColorInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable;
  if ( !ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      HairColorInfoTab::HairColorInfoTab((HairColorInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 197 )
  {
    v5 = acFn;
    v6 = ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (00467190) --------------------------------------------------------
bool __cdecl ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable;
  if ( !ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ShakeEffectViewInfoTab::ShakeEffectViewInfoTab((ShakeEffectViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 117 )
  {
    v5 = acFn;
    v6 = ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959EC: using guessed type int ITableBase_EffectViewInfo_ShakeEffectViewInfoTab___ms_pkTable;

//----- (00467270) --------------------------------------------------------
bool __cdecl ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable;
  if ( !ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MHFurnitureObjEffectTab::MHFurnitureObjEffectTab((MHFurnitureObjEffectTab *)v2);
    else
      v2 = 0;
    ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 4627 )
  {
    v5 = acFn;
    v6 = ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable
                              + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E08: using guessed type int ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab___ms_pkTable;

//----- (00467350) --------------------------------------------------------
bool __cdecl ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable;
  if ( !ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MiniHouseObjAniInfoTab::MiniHouseObjAniInfoTab((MiniHouseObjAniInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 625 )
  {
    v5 = acFn;
    v6 = ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E0C: using guessed type int ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab___ms_pkTable;

//----- (00467430) --------------------------------------------------------
bool __cdecl ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable;
  if ( !ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MiniHouseEndureInfoTable::MiniHouseEndureInfoTable((MiniHouseEndureInfoTable *)v2);
    else
      v2 = 0;
    ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 251 )
  {
    v5 = acFn;
    v6 = ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E10: using guessed type int ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable___ms_pkTable;

//----- (00467510) --------------------------------------------------------
bool __cdecl ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable;
  if ( !ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MiniHouseFuritureInfoTab::MiniHouseFuritureInfoTab((MiniHouseFuritureInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1017 )
  {
    v5 = acFn;
    v6 = ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E14: using guessed type int ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab___ms_pkTable;

//----- (004675F0) --------------------------------------------------------
bool __cdecl ITableBase<MHEmotion_MiniHouseEmotionTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable;
  if ( !ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MiniHouseEmotionTab::MiniHouseEmotionTab((MiniHouseEmotionTab *)v2);
    else
      v2 = 0;
    ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 483 )
  {
    v5 = acFn;
    v6 = ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E18: using guessed type int ITableBase_MHEmotion_MiniHouseEmotionTab___ms_pkTable;

//----- (004676D0) --------------------------------------------------------
bool __cdecl ITableBase<UpEffectData_UpEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<UpEffectData_UpEffectTab>::ms_pkTable;
  if ( !ITableBase<UpEffectData_UpEffectTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      UpEffectTab::UpEffectTab((UpEffectTab *)v2);
    else
      v2 = 0;
    ITableBase<UpEffectData_UpEffectTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<UpEffectData_UpEffectTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<UpEffectData_UpEffectTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 14887 )
  {
    v5 = acFn;
    v6 = ITableBase<UpEffectData_UpEffectTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<UpEffectData_UpEffectTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E1C: using guessed type int ITableBase_UpEffectData_UpEffectTab___ms_pkTable;

//----- (004677B0) --------------------------------------------------------
bool __cdecl ITableBase<ScriptMsg_ScriptMsgTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable;
  if ( !ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ScriptMsgTab::ScriptMsgTab((ScriptMsgTab *)v2);
    else
      v2 = 0;
    ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1273 )
  {
    v5 = acFn;
    v6 = ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95950: using guessed type int ITableBase_ScriptMsg_ScriptMsgTab___ms_pkTable;

//----- (00467890) --------------------------------------------------------
bool __cdecl ITableBase<ChargedItemEffect_ChargedEffectTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable;
  if ( !ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ChargedEffectTable::ChargedEffectTable((ChargedEffectTable *)v2);
    else
      v2 = 0;
    ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 141 )
  {
    v5 = acFn;
    v6 = ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (00467970) --------------------------------------------------------
bool __cdecl ITableBase<RaceName_CharRace>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<RaceName_CharRace>::ms_pkTable;
  if ( !ITableBase<RaceName_CharRace>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CharRace::CharRace((CharRace *)v2);
    else
      v2 = 0;
    ITableBase<RaceName_CharRace>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<RaceName_CharRace>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<RaceName_CharRace>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 148 )
  {
    v5 = acFn;
    v6 = ITableBase<RaceName_CharRace>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<RaceName_CharRace>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E20: using guessed type int ITableBase_RaceName_CharRace___ms_pkTable;

//----- (00467A50) --------------------------------------------------------
bool __cdecl ITableBase<FaceInfo_FaceInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable;
  if ( !ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      FaceInfoTab::FaceInfoTab((FaceInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1119 )
  {
    v5 = acFn;
    v6 = ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;

//----- (00467B30) --------------------------------------------------------
bool __cdecl ITableBase<DmgSndMapByArmorType_DmgSndTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable;
  if ( !ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      DmgSndTab::DmgSndTab((DmgSndTab *)v2);
    else
      v2 = 0;
    ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 3829 )
  {
    v5 = acFn;
    v6 = ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E24: using guessed type int ITableBase_DmgSndMapByArmorType_DmgSndTab___ms_pkTable;

//----- (00467C10) --------------------------------------------------------
bool __cdecl ITableBase<ProduceInfo_ProduceInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable;
  if ( !ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ProduceInfoTable::ProduceInfoTable((ProduceInfoTable *)v2);
    else
      v2 = 0;
    ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 6309 )
  {
    v5 = acFn;
    v6 = ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (00467CF0) --------------------------------------------------------
bool __cdecl ITableBase<GatherInfo_GatherInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable;
  if ( !ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GatherInfoTable::GatherInfoTable((GatherInfoTable *)v2);
    else
      v2 = 0;
    ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 959 )
  {
    v5 = acFn;
    v6 = ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E2C: using guessed type int ITableBase_GatherInfo_GatherInfoTable___ms_pkTable;

//----- (00467DD0) --------------------------------------------------------
bool __cdecl ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable;
  if ( !ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      KQDescTable::KQDescTable((KQDescTable *)v2);
    else
      v2 = 0;
    ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 75 )
  {
    v5 = acFn;
    v6 = ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E30: using guessed type int ITableBase_KINGDOM_QUEST_DESC_KQDescTable___ms_pkTable;

//----- (00467EB0) --------------------------------------------------------
bool __cdecl ITableBase<ProduceViewInfo_ProduceViewInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable;
  if ( !ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ProduceViewInfoTable::ProduceViewInfoTable((ProduceViewInfoTable *)v2);
    else
      v2 = 0;
    ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1014 )
  {
    v5 = acFn;
    v6 = ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E34: using guessed type int ITableBase_ProduceViewInfo_ProduceViewInfoTable___ms_pkTable;

//----- (00467F90) --------------------------------------------------------
bool __cdecl ITableBase<NpcDialogData_NpcDialogDataTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable;
  if ( !ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      NpcDialogDataTable::NpcDialogDataTable((NpcDialogDataTable *)v2);
    else
      v2 = 0;
    ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 101 )
  {
    v5 = acFn;
    v6 = ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E38: using guessed type int ITableBase_NpcDialogData_NpcDialogDataTable___ms_pkTable;

//----- (00468070) --------------------------------------------------------
bool __cdecl ITableBase<GradeItemOption_GradeItemOptionTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable;
  if ( !ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GradeItemOptionTab::GradeItemOptionTab((GradeItemOptionTab *)v2);
    else
      v2 = 0;
    ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 616 )
  {
    v5 = acFn;
    v6 = ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E3C: using guessed type int ITableBase_GradeItemOption_GradeItemOptionTab___ms_pkTable;

//----- (00468150) --------------------------------------------------------
bool __cdecl ITableBase<MiniHouse_MiniHouseTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable;
  if ( !ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MiniHouseTable::MiniHouseTable((MiniHouseTable *)v2);
    else
      v2 = 0;
    ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 488 )
  {
    v5 = acFn;
    v6 = ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E40: using guessed type int ITableBase_MiniHouse_MiniHouseTable___ms_pkTable;

//----- (00468230) --------------------------------------------------------
bool __cdecl ITableBase<ItemShopView_ItemShopViewTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable;
  if ( !ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemShopViewTable::ItemShopViewTable((ItemShopViewTable *)v2);
    else
      v2 = 0;
    ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 4146 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E44: using guessed type int ITableBase_ItemShopView_ItemShopViewTable___ms_pkTable;

//----- (00468310) --------------------------------------------------------
bool __cdecl ITableBase<WeaponAttrib_WeaponAttribTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable;
  if ( !ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      WeaponAttribTab::WeaponAttribTab((WeaponAttribTab *)v2);
    else
      v2 = 0;
    ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 308 )
  {
    v5 = acFn;
    v6 = ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E48: using guessed type int ITableBase_WeaponAttrib_WeaponAttribTab___ms_pkTable;

//----- (004683F0) --------------------------------------------------------
bool __cdecl ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable;
  if ( !ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      WorldMapAvatarInfoTab::WorldMapAvatarInfoTab((WorldMapAvatarInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 37 )
  {
    v5 = acFn;
    v6 = ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E4C: using guessed type int ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab___ms_pkTable;

//----- (004684D0) --------------------------------------------------------
bool __cdecl ITableBase<ItemDismantle_ItemDismantleTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable;
  if ( !ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemDismantleTab::ItemDismantleTab((ItemDismantleTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 9530 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E50: using guessed type int ITableBase_ItemDismantle_ItemDismantleTab___ms_pkTable;

//----- (004685B0) --------------------------------------------------------
bool __cdecl ITableBase<TownPortal_TownPortalInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  NiStringExtraData *v2; // eax@1
  void *v3; // eax@2
  char *v4; // eax@7
  char *v5; // ecx@9
  char *v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable;
  if ( !ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      TownPortalInfoTable::TownPortalInfoTable((TownPortalInfoTable *)v2);
    else
      v2 = 0;
    ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)&v2->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( CDataReader::Read(
         (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
         acFn)
    && (v4 = ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable[3].baseclass_0.m_pcName) != 0
    && *(_DWORD *)v4 == 213 )
  {
    v5 = acFn;
    v6 = (char *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable[4].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    do
    {
      v7 = *v5;
      *v6++ = *v5++;
    }
    while ( v7 );
    result = ((int (*)(void))ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00468690) --------------------------------------------------------
bool __cdecl ITableBase<SetItemName_SetItemNameTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<SetItemName_SetItemNameTab>::ms_pkTable;
  if ( !ITableBase<SetItemName_SetItemNameTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      SetItemNameTab::SetItemNameTab((SetItemNameTab *)v2);
    else
      v2 = 0;
    ITableBase<SetItemName_SetItemNameTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<SetItemName_SetItemNameTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<SetItemName_SetItemNameTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 76 )
  {
    v5 = acFn;
    v6 = ITableBase<SetItemName_SetItemNameTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<SetItemName_SetItemNameTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E58: using guessed type int ITableBase_SetItemName_SetItemNameTab___ms_pkTable;

//----- (00468770) --------------------------------------------------------
bool __cdecl ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable;
  if ( !ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemActionEffectDescTab::ItemActionEffectDescTab((ItemActionEffectDescTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 538 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E5C: using guessed type int ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab___ms_pkTable;

//----- (00468850) --------------------------------------------------------
bool __cdecl ITableBase<SetEffect_SetEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<SetEffect_SetEffectTab>::ms_pkTable;
  if ( !ITableBase<SetEffect_SetEffectTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      SetEffectTab::SetEffectTab((SetEffectTab *)v2);
    else
      v2 = 0;
    ITableBase<SetEffect_SetEffectTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<SetEffect_SetEffectTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<SetEffect_SetEffectTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 16 )
  {
    v5 = acFn;
    v6 = ITableBase<SetEffect_SetEffectTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<SetEffect_SetEffectTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E60: using guessed type int ITableBase_SetEffect_SetEffectTab___ms_pkTable;

//----- (00468930) --------------------------------------------------------
bool __cdecl ITableBase<ActionEffectItem_ActionEffectItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable;
  if ( !ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ActionEffectItemTab::ActionEffectItemTab((ActionEffectItemTab *)v2);
    else
      v2 = 0;
    ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 14 )
  {
    v5 = acFn;
    v6 = ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E64: using guessed type int ITableBase_ActionEffectItem_ActionEffectItemTab___ms_pkTable;

//----- (00468A10) --------------------------------------------------------
bool __cdecl ITableBase<ItemAction_ItemActionTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemAction_ItemActionTab>::ms_pkTable;
  if ( !ITableBase<ItemAction_ItemActionTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemActionTab::ItemActionTab((ItemActionTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemAction_ItemActionTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 64 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E68: using guessed type int ITableBase_ItemAction_ItemActionTab___ms_pkTable;

//----- (00468AF0) --------------------------------------------------------
bool __cdecl ITableBase<ItemActionEffect_ItemActionEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable;
  if ( !ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemActionEffectTab::ItemActionEffectTab((ItemActionEffectTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 154 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E6C: using guessed type int ITableBase_ItemActionEffect_ItemActionEffectTab___ms_pkTable;

//----- (00468BD0) --------------------------------------------------------
bool __cdecl ITableBase<ItemActionCondition_ItemActionConditionTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable;
  if ( !ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemActionConditionTab::ItemActionConditionTab((ItemActionConditionTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 279 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E70: using guessed type int ITableBase_ItemActionCondition_ItemActionConditionTab___ms_pkTable;

//----- (00468CB0) --------------------------------------------------------
bool __cdecl ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable;
  if ( !ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GuildTournamentStateDescTab::GuildTournamentStateDescTab((GuildTournamentStateDescTab *)v2);
    else
      v2 = 0;
    ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 691 )
  {
    v5 = acFn;
    v6 = ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable
                              + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E74: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab___ms_pkTable;

//----- (00468D90) --------------------------------------------------------
bool __cdecl ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable;
  if ( !ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GuildTournamentStateTab::GuildTournamentStateTab((GuildTournamentStateTab *)v2);
    else
      v2 = 0;
    ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 251 )
  {
    v5 = acFn;
    v6 = ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E78: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab___ms_pkTable;

//----- (00468E70) --------------------------------------------------------
bool __cdecl ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable;
  if ( !ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GTRequireTab::GTRequireTab((GTRequireTab *)v2);
    else
      v2 = 0;
    ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 24 )
  {
    v5 = acFn;
    v6 = ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E7C: using guessed type int ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab___ms_pkTable;

//----- (00468F50) --------------------------------------------------------
bool __cdecl ITableBase<DICE_Dividind_DiceDividIndTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable;
  if ( !ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      DiceDividIndTab::DiceDividIndTab((DiceDividIndTab *)v2);
    else
      v2 = 0;
    ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 2686 )
  {
    v5 = acFn;
    v6 = ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E80: using guessed type int ITableBase_DICE_Dividind_DiceDividIndTab___ms_pkTable;

//----- (00469030) --------------------------------------------------------
bool __cdecl ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable;
  if ( !ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GBDiceDividIndTab::GBDiceDividIndTab((GBDiceDividIndTab *)v2);
    else
      v2 = 0;
    ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 2686 )
  {
    v5 = acFn;
    v6 = ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E84: using guessed type int ITableBase_GB_DICE_Dividind_GBDiceDividIndTab___ms_pkTable;

//----- (00469110) --------------------------------------------------------
bool __cdecl ITableBase<GBHouse_GBHouseTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GBHouse_GBHouseTab>::ms_pkTable;
  if ( !ITableBase<GBHouse_GBHouseTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GBHouseTab::GBHouseTab((GBHouseTab *)v2);
    else
      v2 = 0;
    ITableBase<GBHouse_GBHouseTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<GBHouse_GBHouseTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<GBHouse_GBHouseTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 40 )
  {
    v5 = acFn;
    v6 = ITableBase<GBHouse_GBHouseTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GBHouse_GBHouseTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E88: using guessed type int ITableBase_GBHouse_GBHouseTab___ms_pkTable;

//----- (004691F0) --------------------------------------------------------
bool __cdecl ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable;
  if ( !ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MobRandomIdleAniTab::MobRandomIdleAniTab((MobRandomIdleAniTab *)v2);
    else
      v2 = 0;
    ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 10 )
  {
    v5 = acFn;
    v6 = ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E8C: using guessed type int ITableBase_MobRandomIdleAni_MobRandomIdleAniTab___ms_pkTable;

//----- (004692D0) --------------------------------------------------------
bool __cdecl ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable;
  if ( !ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CharacterTitleStateViewTab::CharacterTitleStateViewTab((CharacterTitleStateViewTab *)v2);
    else
      v2 = 0;
    ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 538 )
  {
    v5 = acFn;
    v6 = ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E90: using guessed type int ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab___ms_pkTable;

//----- (004693B0) --------------------------------------------------------
bool __cdecl ITableBase<GTIView_GTIViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable;
  if ( !ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      GTIViewInfoTab::GTIViewInfoTab((GTIViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 140 )
  {
    v5 = acFn;
    v6 = ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E94: using guessed type int ITableBase_GTIView_GTIViewInfoTab___ms_pkTable;

//----- (00469490) --------------------------------------------------------
bool __cdecl ITableBase<DamageEffect_DamageEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable;
  if ( !ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      DamageEffectTab::DamageEffectTab((DamageEffectTab *)v2);
    else
      v2 = 0;
    ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 134 )
  {
    v5 = acFn;
    v6 = ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E98: using guessed type int ITableBase_DamageEffect_DamageEffectTab___ms_pkTable;

//----- (00469570) --------------------------------------------------------
bool __cdecl ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable;
  if ( !ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ActiveSkillGroupTab::ActiveSkillGroupTab((ActiveSkillGroupTab *)v2);
    else
      v2 = 0;
    ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 18 )
  {
    v5 = acFn;
    v6 = ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E9C: using guessed type int ITableBase_ActiveSkillGroup_ActiveSkillGroupTab___ms_pkTable;

//----- (00469650) --------------------------------------------------------
bool __cdecl ITableBase<MapWayPoint_MapWayPointTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable;
  if ( !ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MapWayPointTab::MapWayPointTab((MapWayPointTab *)v2);
    else
      v2 = 0;
    ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 37 )
  {
    v5 = acFn;
    v6 = ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EA0: using guessed type int ITableBase_MapWayPoint_MapWayPointTab___ms_pkTable;

//----- (00469730) --------------------------------------------------------
bool __cdecl ITableBase<MapLinkPoint_MapLinkPointTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable;
  if ( !ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MapLinkPointTab::MapLinkPointTab((MapLinkPointTab *)v2);
    else
      v2 = 0;
    ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 43 )
  {
    v5 = acFn;
    v6 = ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EA4: using guessed type int ITableBase_MapLinkPoint_MapLinkPointTab___ms_pkTable;

//----- (00469810) --------------------------------------------------------
bool __cdecl ITableBase<BelongTypeInfo_BelongTypeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable;
  if ( !ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BelongTypeInfoTab::BelongTypeInfoTab((BelongTypeInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 70 )
  {
    v5 = acFn;
    v6 = ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EA8: using guessed type int ITableBase_BelongTypeInfo_BelongTypeInfoTab___ms_pkTable;

//----- (004698F0) --------------------------------------------------------
bool __cdecl ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable;
  if ( !ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ChargedDeletableBuffTab::ChargedDeletableBuffTab((ChargedDeletableBuffTab *)v2);
    else
      v2 = 0;
    ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1 )
  {
    v5 = acFn;
    v6 = ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EAC: using guessed type int ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab___ms_pkTable;

//----- (004699D0) --------------------------------------------------------
bool __cdecl ITableBase<BasicInfoTitle_BasicInfoTitleTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable;
  if ( !ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BasicInfoTitleTab::BasicInfoTitleTab((BasicInfoTitleTab *)v2);
    else
      v2 = 0;
    ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 268 )
  {
    v5 = acFn;
    v6 = ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EB0: using guessed type int ITableBase_BasicInfoTitle_BasicInfoTitleTab___ms_pkTable;

//----- (00469AB0) --------------------------------------------------------
bool __cdecl ITableBase<BasicInfoLink_BasicInfoLinkTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable;
  if ( !ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BasicInfoLinkTab::BasicInfoLinkTab((BasicInfoLinkTab *)v2);
    else
      v2 = 0;
    ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 2260 )
  {
    v5 = acFn;
    v6 = ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (00469B90) --------------------------------------------------------
bool __cdecl ITableBase<BasicInfoTip_BasicInfoTipTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable;
  if ( !ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BasicInfoTipTab::BasicInfoTipTab((BasicInfoTipTab *)v2);
    else
      v2 = 0;
    ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 285 )
  {
    v5 = acFn;
    v6 = ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EB8: using guessed type int ITableBase_BasicInfoTip_BasicInfoTipTab___ms_pkTable;

//----- (00469C70) --------------------------------------------------------
bool __cdecl ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable;
  if ( !ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BasicInfoTipCycleTab::BasicInfoTipCycleTab((BasicInfoTipCycleTab *)v2);
    else
      v2 = 0;
    ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1 )
  {
    v5 = acFn;
    v6 = ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EBC: using guessed type int ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab___ms_pkTable;

//----- (00469D50) --------------------------------------------------------
bool __cdecl ITableBase<BasicInfoFind_BasicInfoFindTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable;
  if ( !ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BasicInfoFindTab::BasicInfoFindTab((BasicInfoFindTab *)v2);
    else
      v2 = 0;
    ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 18 )
  {
    v5 = acFn;
    v6 = ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EC0: using guessed type int ITableBase_BasicInfoFind_BasicInfoFindTab___ms_pkTable;

//----- (00469E30) --------------------------------------------------------
bool __cdecl ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable;
  if ( !ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BasicInfoFindUITab::BasicInfoFindUITab((BasicInfoFindUITab *)v2);
    else
      v2 = 0;
    ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 51 )
  {
    v5 = acFn;
    v6 = ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EC4: using guessed type int ITableBase_BasicInfoFindUI_BasicInfoFindUITab___ms_pkTable;

//----- (00469F10) --------------------------------------------------------
bool __cdecl ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable;
  if ( !ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      BasicInfoFindWordTab::BasicInfoFindWordTab((BasicInfoFindWordTab *)v2);
    else
      v2 = 0;
    ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 76 )
  {
    v5 = acFn;
    v6 = ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EC8: using guessed type int ITableBase_BasicInfoFindWord_BasicInfoFindWordTab___ms_pkTable;

//----- (00469FF0) --------------------------------------------------------
bool __cdecl ITableBase<CollectCard_CollectCardTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<CollectCard_CollectCardTab>::ms_pkTable;
  if ( !ITableBase<CollectCard_CollectCardTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CollectCardTab::CollectCardTab((CollectCardTab *)v2);
    else
      v2 = 0;
    ITableBase<CollectCard_CollectCardTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 126 )
  {
    v5 = acFn;
    v6 = ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (0046A0D0) --------------------------------------------------------
bool __cdecl ITableBase<CollectCardView_CollectCardViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable;
  if ( !ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CollectCardViewTab::CollectCardViewTab((CollectCardViewTab *)v2);
    else
      v2 = 0;
    ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1177 )
  {
    v5 = acFn;
    v6 = ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97ED0: using guessed type int ITableBase_CollectCardView_CollectCardViewTab___ms_pkTable;

//----- (0046A1B0) --------------------------------------------------------
bool __cdecl ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable;
  if ( !ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CollectCardGroupDescTab::CollectCardGroupDescTab((CollectCardGroupDescTab *)v2);
    else
      v2 = 0;
    ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 76 )
  {
    v5 = acFn;
    v6 = ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97ED4: using guessed type int ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab___ms_pkTable;

//----- (0046A290) --------------------------------------------------------
bool __cdecl ITableBase<CollectCardReward_CollectCardRewardTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable;
  if ( !ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CollectCardRewardTab::CollectCardRewardTab((CollectCardRewardTab *)v2);
    else
      v2 = 0;
    ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 273 )
  {
    v5 = acFn;
    v6 = ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97ED8: using guessed type int ITableBase_CollectCardReward_CollectCardRewardTab___ms_pkTable;

//----- (0046A370) --------------------------------------------------------
bool __cdecl ITableBase<CollectCardTitle_CollectCardTitleTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable;
  if ( !ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      CollectCardTitleTab::CollectCardTitleTab((CollectCardTitleTab *)v2);
    else
      v2 = 0;
    ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EDC: using guessed type int ITableBase_CollectCardTitle_CollectCardTitleTab___ms_pkTable;

//----- (0046A450) --------------------------------------------------------
bool __cdecl ITableBase<MoverMain_MoverMainTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverMain_MoverMainTab>::ms_pkTable;
  if ( !ITableBase<MoverMain_MoverMainTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverMainTab::MoverMainTab((MoverMainTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverMain_MoverMainTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 186 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959E4: using guessed type int ITableBase_MoverMain_MoverMainTab___ms_pkTable;

//----- (0046A530) --------------------------------------------------------
bool __cdecl ITableBase<MoverUseSkill_MoverUseSkillTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable;
  if ( !ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverUseSkillTab::MoverUseSkillTab((MoverUseSkillTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverUseSkill_MoverUseSkillTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EE0: using guessed type int ITableBase_MoverUseSkill_MoverUseSkillTab___ms_pkTable;

//----- (0046A610) --------------------------------------------------------
bool __cdecl ITableBase<MoverHG_MoverHGTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverHG_MoverHGTab>::ms_pkTable;
  if ( !ITableBase<MoverHG_MoverHGTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverHGTab::MoverHGTab((MoverHGTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverHG_MoverHGTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverHG_MoverHGTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverHG_MoverHGTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 149 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverHG_MoverHGTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverHG_MoverHGTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959E8: using guessed type int ITableBase_MoverHG_MoverHGTab___ms_pkTable;

//----- (0046A6F0) --------------------------------------------------------
bool __cdecl ITableBase<MoverView_MoverViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverView_MoverViewTab>::ms_pkTable;
  if ( !ITableBase<MoverView_MoverViewTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverViewTab::MoverViewTab((MoverViewTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverView_MoverViewTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverView_MoverViewTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverView_MoverViewTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1072 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverView_MoverViewTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverView_MoverViewTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EE4: using guessed type int ITableBase_MoverView_MoverViewTab___ms_pkTable;

//----- (0046A7D0) --------------------------------------------------------
bool __cdecl ITableBase<MoverSlotView_MoverSlotViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable;
  if ( !ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverSlotViewTab::MoverSlotViewTab((MoverSlotViewTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 12 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EE8: using guessed type int ITableBase_MoverSlotView_MoverSlotViewTab___ms_pkTable;

//----- (0046A8B0) --------------------------------------------------------
bool __cdecl ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable;
  if ( !ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverSlotCharAniTab::MoverSlotCharAniTab((MoverSlotCharAniTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 96 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EEC: using guessed type int ITableBase_MoverSlotCharAni_MoverSlotCharAniTab___ms_pkTable;

//----- (0046A990) --------------------------------------------------------
bool __cdecl ITableBase<MoverAbility_MoverAbilityTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable;
  if ( !ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverAbilityTab::MoverAbilityTab((MoverAbilityTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 904 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EF0: using guessed type int ITableBase_MoverAbility_MoverAbilityTab___ms_pkTable;

//----- (0046AA70) --------------------------------------------------------
bool __cdecl ITableBase<MoverItem_MoverItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverItem_MoverItemTab>::ms_pkTable;
  if ( !ITableBase<MoverItem_MoverItemTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverItemTab::MoverItemTab((MoverItemTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverItem_MoverItemTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverItem_MoverItemTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverItem_MoverItemTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverItem_MoverItemTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverItem_MoverItemTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EF4: using guessed type int ITableBase_MoverItem_MoverItemTab___ms_pkTable;

//----- (0046AB50) --------------------------------------------------------
bool __cdecl ITableBase<PupMain_PetMainTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<PupMain_PetMainTab>::ms_pkTable;
  if ( !ITableBase<PupMain_PetMainTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      PetMainTab::PetMainTab((PetMainTab *)v2);
    else
      v2 = 0;
    ITableBase<PupMain_PetMainTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 145 )
  {
    v5 = acFn;
    v6 = ITableBase<PupMain_PetMainTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<PupMain_PetMainTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959F0: using guessed type int ITableBase_PupMain_PetMainTab___ms_pkTable;

//----- (0046AC30) --------------------------------------------------------
bool __cdecl ITableBase<PupView_PetViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<PupView_PetViewTab>::ms_pkTable;
  if ( !ITableBase<PupView_PetViewTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      PetViewTab::PetViewTab((PetViewTab *)v2);
    else
      v2 = 0;
    ITableBase<PupView_PetViewTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<PupView_PetViewTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<PupView_PetViewTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 277 )
  {
    v5 = acFn;
    v6 = ITableBase<PupView_PetViewTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<PupView_PetViewTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959F4: using guessed type int ITableBase_PupView_PetViewTab___ms_pkTable;

//----- (0046AD10) --------------------------------------------------------
bool __cdecl ITableBase<KQVoteDesc_KQVoteDescTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable;
  if ( !ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      KQVoteDescTable::KQVoteDescTable((KQVoteDescTable *)v2);
    else
      v2 = 0;
    ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 609 )
  {
    v5 = acFn;
    v6 = ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EF8: using guessed type int ITableBase_KQVoteDesc_KQVoteDescTable___ms_pkTable;

//----- (0046ADF0) --------------------------------------------------------
bool __cdecl ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable;
  if ( !ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      KQVoteMajorityRateTable::KQVoteMajorityRateTable((KQVoteMajorityRateTable *)v2);
    else
      v2 = 0;
    ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1 )
  {
    v5 = acFn;
    v6 = ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EFC: using guessed type int ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable___ms_pkTable;

//----- (0046AED0) --------------------------------------------------------
bool __cdecl ITableBase<KQIsVote_KQIsVoteTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable;
  if ( !ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      KQIsVoteTable::KQIsVoteTable((KQIsVoteTable *)v2);
    else
      v2 = 0;
    ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 5 )
  {
    v5 = acFn;
    v6 = ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F00: using guessed type int ITableBase_KQIsVote_KQIsVoteTable___ms_pkTable;

//----- (0046AFB0) --------------------------------------------------------
bool __cdecl ITableBase<KQTeam_KQTeamTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<KQTeam_KQTeamTable>::ms_pkTable;
  if ( !ITableBase<KQTeam_KQTeamTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      KQTeamTable::KQTeamTable((KQTeamTable *)v2);
    else
      v2 = 0;
    ITableBase<KQTeam_KQTeamTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<KQTeam_KQTeamTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<KQTeam_KQTeamTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 241 )
  {
    v5 = acFn;
    v6 = ITableBase<KQTeam_KQTeamTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<KQTeam_KQTeamTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F04: using guessed type int ITableBase_KQTeam_KQTeamTable___ms_pkTable;

//----- (0046B090) --------------------------------------------------------
bool __cdecl ITableBase<MobConditionView_MobConditionViewTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable;
  if ( !ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MobConditionViewTab::MobConditionViewTab((MobConditionViewTab *)v2);
    else
      v2 = 0;
    ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 50 )
  {
    v5 = acFn;
    v6 = ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F08: using guessed type int ITableBase_MobConditionView_MobConditionViewTab___ms_pkTable;

//----- (0046B170) --------------------------------------------------------
bool __cdecl ITableBase<MobNoFadeIn_MobNoFadeInTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable;
  if ( !ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MobNoFadeInTab::MobNoFadeInTab((MobNoFadeInTab *)v2);
    else
      v2 = 0;
    ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1 )
  {
    v5 = acFn;
    v6 = ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F0C: using guessed type int ITableBase_MobNoFadeIn_MobNoFadeInTab___ms_pkTable;

//----- (0046B250) --------------------------------------------------------
bool __cdecl ITableBase<MarketSearchInfo_MarketSearchInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable;
  if ( !ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MarketSearchInfoTab::MarketSearchInfoTab((MarketSearchInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 18 )
  {
    v5 = acFn;
    v6 = ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F10: using guessed type int ITableBase_MarketSearchInfo_MarketSearchInfoTab___ms_pkTable;

//----- (0046B330) --------------------------------------------------------
bool __cdecl ITableBase<ChrCreateEquip_ChrCreateEquipTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable;
  if ( !ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ChrCreateEquipTab::ChrCreateEquipTab((ChrCreateEquipTab *)v2);
    else
      v2 = 0;
    ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1145 )
  {
    v5 = acFn;
    v6 = ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ChrCreateEquip_ChrCreateEquipTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94358: using guessed type int ITableBase_ChrCreateEquip_ChrCreateEquipTab___ms_pkTable;

//----- (0046B410) --------------------------------------------------------
bool __cdecl ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable;
  if ( !ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MoverUpgradeEffectTab::MoverUpgradeEffectTab((MoverUpgradeEffectTab *)v2);
    else
      v2 = 0;
    ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 541 )
  {
    v5 = acFn;
    v6 = ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F14: using guessed type int ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab___ms_pkTable;

//----- (0046B4F0) --------------------------------------------------------
bool __cdecl ITableBase<ChatColor_ChatColorTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ChatColor_ChatColorTab>::ms_pkTable;
  if ( !ITableBase<ChatColor_ChatColorTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ChatColorTab::ChatColorTab((ChatColorTab *)v2);
    else
      v2 = 0;
    ITableBase<ChatColor_ChatColorTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 22 )
  {
    v5 = acFn;
    v6 = ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9439C: using guessed type int ITableBase_ChatColor_ChatColorTab___ms_pkTable;

//----- (0046B5D0) --------------------------------------------------------
bool __cdecl ITableBase<TermExtendMatch_TermExtendMatchTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable;
  if ( !ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      TermExtendMatchTable::TermExtendMatchTable((TermExtendMatchTable *)v2);
    else
      v2 = 0;
    ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<TermExtendMatch_TermExtendMatchTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95A0C: using guessed type int ITableBase_TermExtendMatch_TermExtendMatchTable___ms_pkTable;

//----- (0046B6B0) --------------------------------------------------------
bool __cdecl ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable;
  if ( !ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      TermExtendMatchGroupDescTable::TermExtendMatchGroupDescTable((TermExtendMatchGroupDescTable *)v2);
    else
      v2 = 0;
    ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 140 )
  {
    v5 = acFn;
    v6 = ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable>::ms_pkTable
                              + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95A10: using guessed type int ITableBase_TermExtendMatchGroupDesc_TermExtendMatchGroupDescTable___ms_pkTable;

//----- (0046B790) --------------------------------------------------------
bool __cdecl ITableBase<AbStateMsg_AbStateMsgTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable;
  if ( !ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      AbStateMsgTable::AbStateMsgTable((AbStateMsgTable *)v2);
    else
      v2 = 0;
    ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1102 )
  {
    v5 = acFn;
    v6 = ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F18: using guessed type int ITableBase_AbStateMsg_AbStateMsgTable___ms_pkTable;

//----- (0046B870) --------------------------------------------------------
bool __cdecl ITableBase<MinimonInfo_MinimonInfoTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable;
  if ( !ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MinimonInfoTable::MinimonInfoTable((MinimonInfoTable *)v2);
    else
      v2 = 0;
    ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 51 )
  {
    v5 = acFn;
    v6 = ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F1C: using guessed type int ITableBase_MinimonInfo_MinimonInfoTable___ms_pkTable;

//----- (0046B950) --------------------------------------------------------
bool __cdecl ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable;
  if ( !ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MinimonAutoUseItemTable::MinimonAutoUseItemTable((MinimonAutoUseItemTable *)v2);
    else
      v2 = 0;
    ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MinimonAutoUseItem_MinimonAutoUseItemTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959E0: using guessed type int ITableBase_MinimonAutoUseItem_MinimonAutoUseItemTable___ms_pkTable;

//----- (0046BA30) --------------------------------------------------------
bool __cdecl ITableBase<ItemViewDummy_ItemViewDummyTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable;
  if ( !ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ItemViewDummyTab::ItemViewDummyTab((ItemViewDummyTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 334 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F20: using guessed type int ITableBase_ItemViewDummy_ItemViewDummyTab___ms_pkTable;

//----- (0046BB10) --------------------------------------------------------
bool __cdecl ITableBase<UseClassTypeInfo_UseCalssTypeTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable;
  if ( !ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      UseCalssTypeTable::UseCalssTypeTable((UseCalssTypeTable *)v2);
    else
      v2 = 0;
    ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1162 )
  {
    v5 = acFn;
    v6 = ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F24: using guessed type int ITableBase_UseClassTypeInfo_UseCalssTypeTable___ms_pkTable;

//----- (0046BBF0) --------------------------------------------------------
bool __cdecl ITableBase<ChrBasicEquip_ChrBasicEquipTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable;
  if ( !ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      ChrBasicEquipTab::ChrBasicEquipTab((ChrBasicEquipTab *)v2);
    else
      v2 = 0;
    ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 12 )
  {
    v5 = acFn;
    v6 = ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F28: using guessed type int ITableBase_ChrBasicEquip_ChrBasicEquipTab___ms_pkTable;

//----- (0046BCD0) --------------------------------------------------------
void __thiscall ItemInfoTab::ItemInfoTab(ItemInfoTab *this)
{
  ItemInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemInfo,ItemInfoTab>Vtbl *)&ITableBase<ItemInfo_ItemInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemInfo_ItemInfoTab_::ITableBase_ItemInfo_ItemInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemInfo,ItemInfoTab>Vtbl *)&ItemInfoTab::_vftable_;
}
// 988504: using guessed type int (__cdecl *ITableBase_ItemInfo_ItemInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D24: using guessed type int (__cdecl *ItemInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98134: using guessed type int _local static guard_;

//----- (0046BD20) --------------------------------------------------------
void __thiscall ItemViewInfoTab::ItemViewInfoTab(ItemViewInfoTab *this)
{
  ItemViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemViewInfo,ItemViewInfoTab>Vtbl *)&ITableBase<ItemViewInfo_ItemViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ItemViewInfo_ItemViewInfoTab_::ITableBase_ItemViewInfo_ItemViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemViewInfo,ItemViewInfoTab>Vtbl *)&ItemViewInfoTab::_vftable_;
}
// 98852C: using guessed type int (__cdecl *ITableBase_ItemViewInfo_ItemViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D3C: using guessed type int (__cdecl *ItemViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98138: using guessed type int _local static guard_;

//----- (0046BD70) --------------------------------------------------------
void *__thiscall ItemViewInfoTab::_vector_deleting_destructor_(ItemViewInfoTab *this, unsigned int a2)
{
  ItemViewInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemViewInfo,ItemViewInfoTab>Vtbl *)&IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<ItemViewInfo,ItemViewInfoTab>Vtbl *)&ITableBase<ItemViewInfo_ItemViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98852C: using guessed type int (__cdecl *ITableBase_ItemViewInfo_ItemViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 98853C: using guessed type int (__cdecl *IIDTableBase_ItemViewInfo_ItemViewInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046BE00) --------------------------------------------------------
void __thiscall MobInfoTab::MobInfoTab(MobInfoTab *this)
{
  MobInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobInfo,MobInfoTab>Vtbl *)&ITableBase<MobInfo_MobInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MobInfo_MobInfoTab_::ITableBase_MobInfo_MobInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<MobInfo,MobInfoTab>Vtbl *)&MobInfoTab::_vftable_;
}
// 9885B4: using guessed type int (__cdecl *ITableBase_MobInfo_MobInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D54: using guessed type int (__cdecl *MobInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98104: using guessed type int _local static guard_;

//----- (0046BE50) --------------------------------------------------------
void __thiscall MobViewInfoTab::MobViewInfoTab(MobViewInfoTab *this)
{
  MobViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobViewInfo,MobViewInfoTab>Vtbl *)&ITableBase<MobViewInfo_MobViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MobViewInfo_MobViewInfoTab_::ITableBase_MobViewInfo_MobViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<MobViewInfo,MobViewInfoTab>Vtbl *)&MobViewInfoTab::_vftable_;
}
// 9885DC: using guessed type int (__cdecl *ITableBase_MobViewInfo_MobViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D6C: using guessed type int (__cdecl *MobViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9813C: using guessed type int _local static guard_;

//----- (0046BEA0) --------------------------------------------------------
void __thiscall NPCViewInfoTab::NPCViewInfoTab(NPCViewInfoTab *this)
{
  NPCViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<CharNPC_ViewInfo,NPCViewInfoTab>Vtbl *)&ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_CharNPC_ViewInfo_NPCViewInfoTab_::ITableBase_CharNPC_ViewInfo_NPCViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<CharNPC_ViewInfo,NPCViewInfoTab>Vtbl *)&NPCViewInfoTab::_vftable_;
}
// 988604: using guessed type int (__cdecl *ITableBase_CharNPC_ViewInfo_NPCViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D84: using guessed type int (__cdecl *NPCViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98140: using guessed type int _local static guard_;

//----- (0046BEF0) --------------------------------------------------------
void __thiscall AbnormalStateInfoTab::AbnormalStateInfoTab(AbnormalStateInfoTab *this)
{
  AbnormalStateInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateInfo,AbnormalStateInfoTab>Vtbl *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_AbnormalStateInfo_AbnormalStateInfoTab_::ITableBase_AbnormalStateInfo_AbnormalStateInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateInfo,AbnormalStateInfoTab>Vtbl *)&AbnormalStateInfoTab::_vftable_;
}
// 98869C: using guessed type int (__cdecl *ITableBase_AbnormalStateInfo_AbnormalStateInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988D9C: using guessed type int (__cdecl *AbnormalStateInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98144: using guessed type int _local static guard_;

//----- (0046BF40) --------------------------------------------------------
void *__thiscall AbnormalStateInfoTab::_vector_deleting_destructor_(AbnormalStateInfoTab *this, unsigned int a2)
{
  AbnormalStateInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateInfo,AbnormalStateInfoTab>Vtbl *)&IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateInfo,AbnormalStateInfoTab>Vtbl *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98869C: using guessed type int (__cdecl *ITableBase_AbnormalStateInfo_AbnormalStateInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9886AC: using guessed type int (__cdecl *IIDTableBase_AbnormalStateInfo_AbnormalStateInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046BFD0) --------------------------------------------------------
void __thiscall AbnormalStateViewInfoTab::AbnormalStateViewInfoTab(AbnormalStateViewInfoTab *this)
{
  AbnormalStateViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab>Vtbl *)&ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab_::ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<AbnormalStateViewInfo,AbnormalStateViewInfoTab>Vtbl *)&AbnormalStateViewInfoTab::_vftable_;
}
// 9886C4: using guessed type int (__cdecl *ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988DB4: using guessed type int (__cdecl *AbnormalStateViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98148: using guessed type int _local static guard_;

//----- (0046C020) --------------------------------------------------------
void __thiscall SubAbStateInfoTab::SubAbStateInfoTab(SubAbStateInfoTab *this)
{
  SubAbStateInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<SubAbStateInfo,SubAbStateInfoTab>Vtbl *)&ITableBase<SubAbStateInfo_SubAbStateInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_SubAbStateInfo_SubAbStateInfoTab_::ITableBase_SubAbStateInfo_SubAbStateInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<SubAbStateInfo,SubAbStateInfoTab>Vtbl *)&SubAbStateInfoTab::_vftable_;
}
// 9886EC: using guessed type int (__cdecl *ITableBase_SubAbStateInfo_SubAbStateInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988DCC: using guessed type int (__cdecl *SubAbStateInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9814C: using guessed type int _local static guard_;

//----- (0046C070) --------------------------------------------------------
void *__thiscall SubAbStateInfoTab::_vector_deleting_destructor_(SubAbStateInfoTab *this, unsigned int a2)
{
  SubAbStateInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<SubAbStateInfo,SubAbStateInfoTab>Vtbl *)&IIDTableBase<SubAbStateInfo_SubAbStateInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<SubAbStateInfo,SubAbStateInfoTab>Vtbl *)&ITableBase<SubAbStateInfo_SubAbStateInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9886EC: using guessed type int (__cdecl *ITableBase_SubAbStateInfo_SubAbStateInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9886FC: using guessed type int (__cdecl *IIDTableBase_SubAbStateInfo_SubAbStateInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046C100) --------------------------------------------------------
void __thiscall MapInfoTab::MapInfoTab(MapInfoTab *this)
{
  MapInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MapInfo,MapInfoTab>Vtbl *)&ITableBase<MapInfo_MapInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MapInfo_MapInfoTab_::ITableBase_MapInfo_MapInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<MapInfo,MapInfoTab>Vtbl *)&MapInfoTab::_vftable_;
}
// 987E7C: using guessed type int (__cdecl *ITableBase_MapInfo_MapInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988DE4: using guessed type int (__cdecl *MapInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98108: using guessed type int _local static guard_;

//----- (0046C150) --------------------------------------------------------
void __thiscall MapViewInfoTab::MapViewInfoTab(MapViewInfoTab *this)
{
  MapViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MapViewInfo,MapViewInfoTab>Vtbl *)&ITableBase<MapViewInfo_MapViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MapViewInfo_MapViewInfoTab_::ITableBase_MapViewInfo_MapViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<MapViewInfo,MapViewInfoTab>Vtbl *)&MapViewInfoTab::_vftable_;
}
// 987EA4: using guessed type int (__cdecl *ITableBase_MapViewInfo_MapViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988DFC: using guessed type int (__cdecl *MapViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9810C: using guessed type int _local static guard_;

//----- (0046C1A0) --------------------------------------------------------
void *__thiscall IIDTableBase<MapViewInfo_MapViewInfoTab_unsigned_short>::_vector_deleting_destructor_(MapViewInfoTab *this, unsigned int a2)
{
  MapViewInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MapViewInfo,MapViewInfoTab>Vtbl *)&IIDTableBase<MapViewInfo_MapViewInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<MapViewInfo,MapViewInfoTab>Vtbl *)&ITableBase<MapViewInfo_MapViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987EA4: using guessed type int (__cdecl *ITableBase_MapViewInfo_MapViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 987EB4: using guessed type int (__cdecl *IIDTableBase_MapViewInfo_MapViewInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046C230) --------------------------------------------------------
void __thiscall UpGradeInfoTab::UpGradeInfoTab(UpGradeInfoTab *this)
{
  UpGradeInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<UpGradeInfo,UpGradeInfoTab>Vtbl *)&ITableBase<UpGradeInfo_UpGradeInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_UpGradeInfo_UpGradeInfoTab_::ITableBase_UpGradeInfo_UpGradeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<UpGradeInfo,UpGradeInfoTab>Vtbl *)&UpGradeInfoTab::_vftable_;
}
// 987ECC: using guessed type int (__cdecl *ITableBase_UpGradeInfo_UpGradeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988E14: using guessed type int (__cdecl *UpGradeInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98110: using guessed type int _local static guard_;

//----- (0046C280) --------------------------------------------------------
void *__thiscall IIDTableBase<UpGradeInfo_UpGradeInfoTab_unsigned_short>::_scalar_deleting_destructor_(UpGradeInfoTab *this, unsigned int a2)
{
  UpGradeInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<UpGradeInfo,UpGradeInfoTab>Vtbl *)&IIDTableBase<UpGradeInfo_UpGradeInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<UpGradeInfo,UpGradeInfoTab>Vtbl *)&ITableBase<UpGradeInfo_UpGradeInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987ECC: using guessed type int (__cdecl *ITableBase_UpGradeInfo_UpGradeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 987EDC: using guessed type int (__cdecl *IIDTableBase_UpGradeInfo_UpGradeInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046C310) --------------------------------------------------------
void __thiscall ActionViewTable::ActionViewTable(ActionViewTable *this)
{
  ActionViewTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ActionViewInfo,ActionViewTable>Vtbl *)&ITableBase<ActionViewInfo_ActionViewTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ActionViewInfo_ActionViewTable_::ITableBase_ActionViewInfo_ActionViewTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<ActionViewInfo,ActionViewTable>Vtbl *)&ActionViewTable::_vftable_;
}
// 987F14: using guessed type int (__cdecl *ITableBase_ActionViewInfo_ActionViewTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988E2C: using guessed type int (__cdecl *ActionViewTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98114: using guessed type int _local static guard_;

//----- (0046C360) --------------------------------------------------------
unsigned __int16 __thiscall ActionViewTable::GetID(AttendRewardTab *this, AttendReward *pkRecord)
{
  return pkRecord->AR_ID;
}

//----- (0046C370) --------------------------------------------------------
void __thiscall RidePetTable::RidePetTable(RidePetTable *this)
{
  RidePetTable *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<RIDING,RidePetTable>Vtbl *)&ITableBase<RIDING_RidePetTable>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_RIDING_RidePetTable_::ITableBase_RIDING_RidePetTable__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<RIDING,RidePetTable>Vtbl *)&RidePetTable::_vftable_;
}
// 987FBC: using guessed type int (__cdecl *ITableBase_RIDING_RidePetTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988E44: using guessed type int (__cdecl *RidePetTable___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98118: using guessed type int _local static guard_;

//----- (0046C3C0) --------------------------------------------------------
void *__thiscall RidePetTable::_vector_deleting_destructor_(RidePetTable *this, unsigned int a2)
{
  RidePetTable *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<RIDING,RidePetTable>Vtbl *)&IIDTableBase<RIDING_RidePetTable_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<RIDING,RidePetTable>Vtbl *)&ITableBase<RIDING_RidePetTable>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 987FBC: using guessed type int (__cdecl *ITableBase_RIDING_RidePetTable____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 987FCC: using guessed type int (__cdecl *IIDTableBase_RIDING_RidePetTable_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046C450) --------------------------------------------------------
void __thiscall MobCoordinateTab::MobCoordinateTab(MobCoordinateTab *this)
{
  MobCoordinateTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobCoordinate,MobCoordinateTab>Vtbl *)&ITableBase<MobCoordinate_MobCoordinateTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MobCoordinate_MobCoordinateTab_::ITableBase_MobCoordinate_MobCoordinateTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<MobCoordinate,MobCoordinateTab>Vtbl *)&MobCoordinateTab::_vftable_;
}
// 988114: using guessed type int (__cdecl *ITableBase_MobCoordinate_MobCoordinateTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988E5C: using guessed type int (__cdecl *MobCoordinateTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9811C: using guessed type int _local static guard_;

//----- (0046C4A0) --------------------------------------------------------
void __thiscall MobKillAnnounceTextTab::MobKillAnnounceTextTab(MobKillAnnounceTextTab *this)
{
  MobKillAnnounceTextTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab>Vtbl *)&ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab_::ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<MobKillAnnounceText,MobKillAnnounceTextTab>Vtbl *)&MobKillAnnounceTextTab::_vftable_;
}
// 98813C: using guessed type int (__cdecl *ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988E74: using guessed type int (__cdecl *MobKillAnnounceTextTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98120: using guessed type int _local static guard_;

//----- (0046C4F0) --------------------------------------------------------
void __thiscall ChargedIconItemTab::ChargedIconItemTab(ChargedIconItemTab *this)
{
  ChargedIconItemTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedIconItem,ChargedIconItemTab>Vtbl *)&ITableBase<ChargedIconItem_ChargedIconItemTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ChargedIconItem_ChargedIconItemTab_::ITableBase_ChargedIconItem_ChargedIconItemTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedIconItem,ChargedIconItemTab>Vtbl *)&ChargedIconItemTab::_vftable_;
}
// 9881C4: using guessed type int (__cdecl *ITableBase_ChargedIconItem_ChargedIconItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988E8C: using guessed type int (__cdecl *ChargedIconItemTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98124: using guessed type int _local static guard_;

//----- (0046C540) --------------------------------------------------------
void *__thiscall IIDTableBase<ChargedIconItem_ChargedIconItemTab_unsigned_short>::_scalar_deleting_destructor_(ChargedIconItemTab *this, unsigned int a2)
{
  ChargedIconItemTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedIconItem,ChargedIconItemTab>Vtbl *)&IIDTableBase<ChargedIconItem_ChargedIconItemTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedIconItem,ChargedIconItemTab>Vtbl *)&ITableBase<ChargedIconItem_ChargedIconItemTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9881C4: using guessed type int (__cdecl *ITableBase_ChargedIconItem_ChargedIconItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9881D4: using guessed type int (__cdecl *IIDTableBase_ChargedIconItem_ChargedIconItemTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046C5D0) --------------------------------------------------------
void __thiscall ChargedMsgItemTab::ChargedMsgItemTab(ChargedMsgItemTab *this)
{
  ChargedMsgItemTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedMessageItem,ChargedMsgItemTab>Vtbl *)&ITableBase<ChargedMessageItem_ChargedMsgItemTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ChargedMessageItem_ChargedMsgItemTab_::ITableBase_ChargedMessageItem_ChargedMsgItemTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<ChargedMessageItem,ChargedMsgItemTab>Vtbl *)&ChargedMsgItemTab::_vftable_;
}
// 9881EC: using guessed type int (__cdecl *ITableBase_ChargedMessageItem_ChargedMsgItemTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988EA4: using guessed type int (__cdecl *ChargedMsgItemTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98128: using guessed type int _local static guard_;

//----- (0046C620) --------------------------------------------------------
void __thiscall AttendRewardTab::AttendRewardTab(AttendRewardTab *this)
{
  AttendRewardTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<AttendReward,AttendRewardTab>Vtbl *)&ITableBase<AttendReward_AttendRewardTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_AttendReward_AttendRewardTab_::ITableBase_AttendReward_AttendRewardTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<AttendReward,AttendRewardTab>Vtbl *)&AttendRewardTab::_vftable_;
}
// 9882E4: using guessed type int (__cdecl *ITableBase_AttendReward_AttendRewardTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988EBC: using guessed type int (__cdecl *AttendRewardTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A9812C: using guessed type int _local static guard_;

//----- (0046C670) --------------------------------------------------------
void *__thiscall IIDTableBase<AttendReward_AttendRewardTab_unsigned_short>::_scalar_deleting_destructor_(AttendRewardTab *this, unsigned int a2)
{
  AttendRewardTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<AttendReward,AttendRewardTab>Vtbl *)&IIDTableBase<AttendReward_AttendRewardTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<AttendReward,AttendRewardTab>Vtbl *)&ITableBase<AttendReward_AttendRewardTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9882E4: using guessed type int (__cdecl *ITableBase_AttendReward_AttendRewardTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9882F4: using guessed type int (__cdecl *IIDTableBase_AttendReward_AttendRewardTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (0046C700) --------------------------------------------------------
void __thiscall BRAccUpgradeInfoTab::BRAccUpgradeInfoTab(BRAccUpgradeInfoTab *this)
{
  BRAccUpgradeInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab>Vtbl *)&ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab_::ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<BRAccUpgradeInfo,BRAccUpgradeInfoTab>Vtbl *)&BRAccUpgradeInfoTab::_vftable_;
}
// 9884CC: using guessed type int (__cdecl *ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 988ED4: using guessed type int (__cdecl *BRAccUpgradeInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// A98130: using guessed type int _local static guard_;

//----- (0046C750) --------------------------------------------------------
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Insert<std::_List_const_iterator<std::_List_val<ItemViewDummy___std::allocator<ItemViewDummy__>>>>(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Where, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _First, std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Last)
{
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *v4; // edi@1
  std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > v5; // eax@1
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v6; // eax@3
  unsigned int v7; // ecx@3
  int v8; // [sp-10h] [bp-28h]@1
  std::list<float,std::allocator<float> > *result; // [sp+0h] [bp-18h]@1
  std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > _Next; // [sp+4h] [bp-14h]@1
  int *v11; // [sp+8h] [bp-10h]@1
  int v12; // [sp+14h] [bp-4h]@1

  v11 = &v8;
  v4 = this;
  result = (std::list<float,std::allocator<float> > *)this;
  v5 = _First;
  _Next = _First;
  v12 = 0;
  while ( v5 != _Last )
  {
    v6 = std::_List_val<char___std::allocator<char__>>::_Buynode(
           &v4->baseclass_0,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)&_Where,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)&_Where + 4),
           (ItemViewDummy *const *)(*(_DWORD *)&v5 + 8));
    v7 = v4->baseclass_0.baseclass_0._Mysize;
    if ( 1073741822 - v7 < 1 )
      std::_Xlength_error("list<T> too long");
    v4->baseclass_0.baseclass_0._Mysize = v7 + 1;
    *(_DWORD *)(*(_DWORD *)&_Where + 4) = v6;
    v6->_Prev->_Next = v6;
    v5 = (std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > >)**(_DWORD **)&_First;
    _First = (std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > >)**(_DWORD **)&_First;
  }
}

//----- (0046C820) --------------------------------------------------------
bool __cdecl ITableBase<FaceCutMsg_FaceCutMsgTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable;
  if ( !ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      FaceCutMsgTab::FaceCutMsgTab((FaceCutMsgTab *)v2);
    else
      v2 = 0;
    ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 51 )
  {
    v5 = acFn;
    v6 = ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<FaceCutMsg_FaceCutMsgTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95A00: using guessed type int ITableBase_FaceCutMsg_FaceCutMsgTab___ms_pkTable;

//----- (0046C900) --------------------------------------------------------
void __thiscall std::_Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::__Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>(std::_Pair_base<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *this)
{
  std::_Pair_base<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2

  v1 = this;
  v2 = *(void ***)&this->second.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->second.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->second.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->second.baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->second.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->second.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->second.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  if ( v1->first.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->first.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->first.baseclass_0._Myres = 15;
  v1->first.baseclass_0._Mysize = 0;
  v1->first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (0046C970) --------------------------------------------------------
bool __cdecl ITableBase<ItemInfo_ItemInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( !ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      ItemInfoTab::ItemInfoTab((ItemInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 19303 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0046CA50) --------------------------------------------------------
bool __cdecl ITableBase<ItemViewInfo_ItemViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  if ( !ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      ItemViewInfoTab::ItemViewInfoTab((ItemViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 14454 )
  {
    v5 = acFn;
    v6 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (0046CB30) --------------------------------------------------------
bool __cdecl ITableBase<MobInfo_MobInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( !ITableBase<MobInfo_MobInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      MobInfoTab::MobInfoTab((MobInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MobInfo_MobInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1193 )
  {
    v5 = acFn;
    v6 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (0046CC10) --------------------------------------------------------
bool __cdecl ITableBase<MobViewInfo_MobViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  if ( !ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      MobViewInfoTab::MobViewInfoTab((MobViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 3601 )
  {
    v5 = acFn;
    v6 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (0046CCF0) --------------------------------------------------------
bool __cdecl ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable;
  if ( !ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      NPCViewInfoTab::NPCViewInfoTab((NPCViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 15482 )
  {
    v5 = acFn;
    v6 = ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F60: using guessed type int ITableBase_CharNPC_ViewInfo_NPCViewInfoTab___ms_pkTable;

//----- (0046CDD0) --------------------------------------------------------
bool __cdecl ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  GameFrameWork *v2; // eax@1
  void *v3; // eax@2
  float v4; // eax@7
  char *v5; // ecx@9
  char *v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  if ( !ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      AbnormalStateInfoTab::AbnormalStateInfoTab((AbnormalStateInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)&v2->baseclass_0.baseclass_0.m_pkMsgHooker);
  if ( CDataReader::Read(
         (CDataReader *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.m_pkMsgHooker,
         acFn)
    && COERCE_SIGNED_INT(v4 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->m_kCharMover.m_pos3LastPos.z) != 0
    && *LODWORD(v4) == 4042 )
  {
    v5 = acFn;
    v6 = (char *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->m_kCharMover.m_pos3CurPos.z;
    do
    {
      v7 = *v5;
      *v6++ = *v5++;
    }
    while ( v7 );
    result = ((int (*)(void))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->SendDirectMessage)() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0046CEB0) --------------------------------------------------------
bool __cdecl ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
  if ( !ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      AbnormalStateViewInfoTab::AbnormalStateViewInfoTab((AbnormalStateViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 5642 )
  {
    v5 = acFn;
    v6 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (0046CF90) --------------------------------------------------------
bool __cdecl ITableBase<SubAbStateInfo_SubAbStateInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable;
  if ( !ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      SubAbStateInfoTab::SubAbStateInfoTab((SubAbStateInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1068 )
  {
    v5 = acFn;
    v6 = ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F6C: using guessed type int ITableBase_SubAbStateInfo_SubAbStateInfoTab___ms_pkTable;

//----- (0046D070) --------------------------------------------------------
bool __cdecl ITableBase<MapInfo_MapInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
  if ( !ITableBase<MapInfo_MapInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      MapInfoTab::MapInfoTab((MapInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MapInfo_MapInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 504 )
  {
    v5 = acFn;
    v6 = ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (0046D150) --------------------------------------------------------
bool __cdecl ITableBase<MapViewInfo_MapViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable;
  if ( !ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      MapViewInfoTab::MapViewInfoTab((MapViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 3107 )
  {
    v5 = acFn;
    v6 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (0046D230) --------------------------------------------------------
bool __cdecl ITableBase<UpGradeInfo_UpGradeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable;
  if ( !ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      UpGradeInfoTab::UpGradeInfoTab((UpGradeInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 2603 )
  {
    v5 = acFn;
    v6 = ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F34: using guessed type int ITableBase_UpGradeInfo_UpGradeInfoTab___ms_pkTable;

//----- (0046D310) --------------------------------------------------------
bool __cdecl ITableBase<ActionViewInfo_ActionViewTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
  if ( !ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      ActionViewTable::ActionViewTable((ActionViewTable *)v2);
    else
      v2 = 0;
    ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 587 )
  {
    v5 = acFn;
    v6 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0046D3F0) --------------------------------------------------------
bool __cdecl ITableBase<RIDING_RidePetTable>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<RIDING_RidePetTable>::ms_pkTable;
  if ( !ITableBase<RIDING_RidePetTable>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      RidePetTable::RidePetTable((RidePetTable *)v2);
    else
      v2 = 0;
    ITableBase<RIDING_RidePetTable>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 5585 )
  {
    v5 = acFn;
    v6 = ITableBase<RIDING_RidePetTable>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<RIDING_RidePetTable>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F38: using guessed type int ITableBase_RIDING_RidePetTable___ms_pkTable;

//----- (0046D4D0) --------------------------------------------------------
bool __cdecl ITableBase<MobCoordinate_MobCoordinateTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable;
  if ( !ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      MobCoordinateTab::MobCoordinateTab((MobCoordinateTab *)v2);
    else
      v2 = 0;
    ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 257 )
  {
    v5 = acFn;
    v6 = ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;

//----- (0046D5B0) --------------------------------------------------------
bool __cdecl ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable;
  if ( !ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      MobKillAnnounceTextTab::MobKillAnnounceTextTab((MobKillAnnounceTextTab *)v2);
    else
      v2 = 0;
    ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 140 )
  {
    v5 = acFn;
    v6 = ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F40: using guessed type int ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab___ms_pkTable;

//----- (0046D690) --------------------------------------------------------
bool __cdecl ITableBase<ChargedIconItem_ChargedIconItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable;
  if ( !ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      ChargedIconItemTab::ChargedIconItemTab((ChargedIconItemTab *)v2);
    else
      v2 = 0;
    ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 741 )
  {
    v5 = acFn;
    v6 = ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F44: using guessed type int ITableBase_ChargedIconItem_ChargedIconItemTab___ms_pkTable;

//----- (0046D770) --------------------------------------------------------
bool __cdecl ITableBase<ChargedMessageItem_ChargedMsgItemTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable;
  if ( !ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      ChargedMsgItemTab::ChargedMsgItemTab((ChargedMsgItemTab *)v2);
    else
      v2 = 0;
    ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 44 )
  {
    v5 = acFn;
    v6 = ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F48: using guessed type int ITableBase_ChargedMessageItem_ChargedMsgItemTab___ms_pkTable;

//----- (0046D850) --------------------------------------------------------
bool __cdecl ITableBase<AttendReward_AttendRewardTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
  if ( !ITableBase<AttendReward_AttendRewardTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      AttendRewardTab::AttendRewardTab((AttendRewardTab *)v2);
    else
      v2 = 0;
    ITableBase<AttendReward_AttendRewardTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 152 )
  {
    v5 = acFn;
    v6 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (0046D930) --------------------------------------------------------
bool __cdecl ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable;
  if ( !ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      BRAccUpgradeInfoTab::BRAccUpgradeInfoTab((BRAccUpgradeInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 6860 )
  {
    v5 = acFn;
    v6 = ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F50: using guessed type int ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab___ms_pkTable;

//----- (0046DA20) --------------------------------------------------------
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::list<ItemViewDummy___std::allocator<ItemViewDummy__>>(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Right)
{
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *v2; // esi@1
  void *v3; // eax@1
  std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > v4; // ecx@2
  std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > v5; // eax@2
  std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > v6; // edx@2
  int v7; // [sp-10h] [bp-34h]@1
  std::exception thisa; // [sp+0h] [bp-24h]@3
  char *_What; // [sp+Ch] [bp-18h]@3
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *v10; // [sp+10h] [bp-14h]@1
  int *v11; // [sp+14h] [bp-10h]@1
  int v12; // [sp+20h] [bp-4h]@2

  v11 = &v7;
  v2 = this;
  v10 = this;
  this->baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0xCu);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = (std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > >)**(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = *(std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = (std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > >)**(_DWORD **)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = 0;
  LOBYTE(v12) = 1;
  std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Insert<std::_List_const_iterator<std::_List_val<ItemViewDummy___std::allocator<ItemViewDummy__>>>>(
    v2,
    v4,
    v6,
    v5);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0046DAE0) --------------------------------------------------------
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Assign_rv(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Right)
{
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *v2; // esi@1
  void *v3; // eax@2
  void *v4; // edi@3

  v2 = this;
  if ( this != _Right )
  {
    v3 = (void *)**(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    *(_DWORD *)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    this->baseclass_0.baseclass_0._Mysize = 0;
    if ( v3 != *(void **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      do
      {
        v4 = *(void **)v3;
        operator delete(v3);
        v3 = v4;
      }
      while ( v4 != *(void **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
    }
    if ( _Right->baseclass_0.baseclass_0._Mysize )
      std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Splice_same(
        v2,
        (std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > >)**(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
        _Right,
        (std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > >)**(_DWORD **)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
        *(std::_List_const_iterator<std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
        _Right->baseclass_0.baseclass_0._Mysize);
  }
}

//----- (0046DB40) --------------------------------------------------------
bool __cdecl FaceCutMsgTab::Load(char *pcFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@2
  unsigned int v3; // edi@3
  unsigned int v4; // esi@5
  void *v5; // eax@6
  bool result; // al@10

  if ( ITableBase<FaceCutMsg_FaceCutMsgTab>::Load(pcFn, bErrorWhenOpenFailed) )
  {
    v2 = *(_DWORD *)(ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 56);
    if ( v2 )
      v3 = *(_DWORD *)(v2 + 40);
    else
      v3 = 0;
    v4 = 0;
    if ( v3 )
    {
      while ( 1 )
      {
        v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 4), v4);
        if ( v5 )
        {
          if ( *(_DWORD *)((char *)v5 + 546) == 4 && !FaceCutMsgTab::GetByScripMsgInx((const char *)v5 + 2) )
            break;
        }
        ++v4;
        if ( v4 >= v3 )
          goto LABEL_10;
      }
      result = 0;
    }
    else
    {
LABEL_10:
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95950: using guessed type int ITableBase_ScriptMsg_ScriptMsgTab___ms_pkTable;

//----- (0046DBC0) --------------------------------------------------------
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *_Val2)
{
  result->baseclass_0.first.baseclass_0._Myres = 15;
  result->baseclass_0.first.baseclass_0._Mysize = 0;
  result->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&result->baseclass_0.first, _Val1);
  std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::list<ItemViewDummy___std::allocator<ItemViewDummy__>>(
    &result->baseclass_0.second,
    _Val2);
  return result;
}

//----- (0046DC30) --------------------------------------------------------
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *this, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *_Right)
{
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *v2; // esi@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *v3; // ebx@1
  int v4; // edi@1
  void *v5; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *v7; // [sp+Ch] [bp-14h]@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *v8; // [sp+10h] [bp-10h]@1
  int v9; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  v8 = this;
  v3 = _Right;
  this->baseclass_0.first.baseclass_0._Myres = 15;
  this->baseclass_0.first.baseclass_0._Mysize = 0;
  this->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->baseclass_0.first,
    &v3->baseclass_0.first);
  v9 = 0;
  v4 = (int)&v2->baseclass_0.second;
  v7 = &v2->baseclass_0.second;
  v2->baseclass_0.second.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0xCu);
  if ( !v5 )
  {
    _Right = 0;
    std::exception::exception(&thisa, (const char *const *)&_Right);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v4 = v5;
  *(_DWORD *)v5 = v5;
  *(_DWORD *)(*(_DWORD *)v4 + 4) = *(_DWORD *)v4;
  LOBYTE(v9) = 1;
  std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Assign_rv(
    &v2->baseclass_0.second,
    &v3->baseclass_0.second);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0046DCF0) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Check_size(std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *this)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *v1; // ebx@1
  double v2; // st7@1
  unsigned int v3; // esi@1
  signed int v4; // eax@2
  std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *v5; // ecx@5
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st *v6; // edi@5
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st v9; // ST08_4@9
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Val; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = this->_Max_bucket_size;
  v3 = this->_Maxidx;
  *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = (double)this->_List.baseclass_0.baseclass_0._Mysize
                                                                                 / (double)v3;
  if ( *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] > v2 )
  {
    v4 = 0;
    do
    {
      if ( v3 >= 0x1FFFFFFF )
        break;
      ++v4;
      v3 *= 2;
    }
    while ( v4 < 3 );
    v5 = (std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *)&this->_Vec;
    v6 = *(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st **)&v1->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
    _Val = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v6 != v1->_Vec.baseclass_0._Mylast )
    {
      v5 = (std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *)&v1->_Vec;
      v1->_Vec.baseclass_0._Mylast = v6;
    }
    __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
      v5,
      *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v5->baseclass_0.___u0.baseclass_0.dummy[0],
      2 * v3,
      &_Val);
    v1->_Mask = v3 - 1;
    v9 = *(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v1->_Maxidx = v3;
    std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Reinsert(
      v1,
      v9);
  }
}

//----- (0046DDA0) --------------------------------------------------------
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::erase(...)
{
  std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<ch v3; // esi@1
  std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *v4; // edi@1
  int v5; // ecx@1
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st *v6; // eax@3
  int _Wherea; // [sp+14h] [bp+Ch]@1

  v3 = _Where;
  v4 = this;
  v5 = **(_DWORD **)&_Where;
  _Wherea = **(_DWORD **)&_Where;
  if ( v3 != *(_DWORD *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    **(_DWORD **)(*(_DWORD *)&v3 + 4) = **(_DWORD **)&v3;
    *(_DWORD *)(**(_DWORD **)&v3 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    std::_Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::__Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>((std::_Pair_base<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)(*(_DWORD *)&v3 + 8));
    operator delete(*(void **)&v3);
    v5 = _Wherea;
    --v4->baseclass_0.baseclass_0._Mysize;
  }
  v6 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  return v6;
}

//----- (0046DDF0) --------------------------------------------------------
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Insert(...)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *v4; // ebx@1
  unsigned int v5; // esi@1
  unsigned int v6; // eax@1
  int v7; // edi@1
  int v8; // edx@3
  int v9; // ecx@3
  std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<ch v10; // esi@3
  int v11; // eax@3
  std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *v12; // edx@3
  unsigned int v13; // ebx@5
  unsigned int v14; // edi@6
  const char *v15; // eax@6
  unsigned int v16; // edx@8
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *v17; // ecx@10
  int v18; // eax@12
  bool v19; // sf@12
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st v20; // ecx@18
  int v21; // eax@20
  int v22; // edx@20
  int v23; // eax@20
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *v24; // eax@23
  std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_trait *v25; // eax@27
  int v26; // edx@30
  int v27; // eax@31
  int v28; // [sp+Ch] [bp-14h]@3
  unsigned int v29; // [sp+10h] [bp-10h]@5
  std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > cons *thisa; // [sp+14h] [bp-Ch]@3
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *v31; // [sp+18h] [bp-8h]@1
  int v32; // [sp+1Ch] [bp-4h]@1

  v4 = this;
  v5 = this->_Mask;
  v31 = this;
  v6 = stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::operator__(
         (stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)this,
         &_Val->baseclass_0.first);
  v7 = v5 & v6;
  v32 = v5 & v6;
  if ( v4->_Maxidx <= (v5 & v6) )
  {
    v7 += -1 - (v5 >> 1);
    v32 = v7;
  }
  v8 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v9 = *(_DWORD *)(v8 + 8 * v7);
  v10 = *(std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<ch *)&v4->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v11 = v8 + 8 * v7;
  v12 = &v4->_List;
  v28 = v9;
  thisa = &v4->_List;
  if ( v10 == v9
    || (v10 = (std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<ch)**(_DWORD **)(v11 + 4),
        v10 == v9) )
  {
LABEL_18:
    v20 = _Plist;
    if ( v10 != **(_DWORD **)&_Plist )
    {
      std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_Splice_same(
        v12,
        v10,
        v12,
        _Plist.baseclass_0,
        *(std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<ch *)_Plist,
        1u);
      v20 = _Plist;
    }
    v21 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
    v22 = *(_DWORD *)(v21 + 8 * v7);
    v23 = v21 + 8 * v7;
    if ( v22 == *(_DWORD *)&thisa->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      *(_DWORD *)v23 = v20;
      *(_DWORD *)(*(_DWORD *)&v31->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v32 + 4) = v20;
    }
    else
    {
      if ( v22 == v10 )
      {
        *(_DWORD *)v23 = v20;
      }
      else
      {
        v26 = **(_DWORD **)(v23 + 4);
        *(_DWORD *)(v23 + 4) = v26;
        if ( v26 != v20 )
        {
          v27 = *(_DWORD *)&v31->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v32 + 4;
          *(_DWORD *)v27 = *(_DWORD *)(*(_DWORD *)v27 + 4);
        }
      }
    }
    std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Check_size(v31);
    v25 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Plist;
    result->baseclass_0.second = 1;
    return v25;
  }
  v13 = _Val->baseclass_0.first.baseclass_0._Mysize;
  v29 = _Val->baseclass_0.first.baseclass_0._Myres;
  while ( 1 )
  {
    v10 = *(std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<ch *)(*(_DWORD *)&v10 + 4);
    v14 = *(_DWORD *)(*(_DWORD *)&v10 + 24);
    v15 = (const char *)(*(_DWORD *)&v10 + 8);
    if ( *(_DWORD *)(*(_DWORD *)&v10 + 28) >= 0x10u )
      v15 = *(const char **)v15;
    v16 = v13;
    if ( v13 >= v14 )
      v16 = *(_DWORD *)(*(_DWORD *)&v10 + 24);
    v17 = _Val;
    if ( v29 >= 0x10 )
      v17 = *(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > **)&_Val->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
    v18 = std::char_traits<char>::compare(v17->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy, v15, v16);
    v19 = v18 < 0;
    if ( v18 )
      break;
    if ( v13 >= v14 )
    {
      LOBYTE(v18) = v13 != v14;
      v19 = v18 < 0;
      break;
    }
LABEL_16:
    if ( v10 == v28 )
      goto LABEL_17;
  }
  if ( v19 )
    goto LABEL_16;
  if ( v29 < 0x10 )
    v24 = _Val;
  else
    v24 = *(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > **)&_Val->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&v10 + 8),
         0,
         *(_DWORD *)(*(_DWORD *)&v10 + 24),
         v24->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy,
         v13) < 0 )
  {
    v10 = (std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<ch)**(_DWORD **)&v10;
LABEL_17:
    v4 = v31;
    v7 = v32;
    v12 = thisa;
    goto LABEL_18;
  }
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::erase(
    thisa,
    (std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st *)&_Val,
    _Plist.baseclass_0);
  v25 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v10;
  result->baseclass_0.second = 0;
  return v25;
}

//----- (0046DF70) --------------------------------------------------------
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Reinsert(...)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *v2; // esi@1
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st v3; // ST08_4@3
  bool v4; // bl@3
  std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_trait result; // [sp+4h] [bp-8h]@3
  int _Lasta; // [sp+14h] [bp+8h]@2

  v2 = this;
  if ( **(_DWORD **)&this->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] != _Last )
  {
    _Lasta = *(_DWORD *)(*(_DWORD *)&_Last + 4);
    do
    {
      v3 = (std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st)**(_DWORD **)&v2->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v4 = v3 == _Lasta;
      std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Insert(
        v2,
        &result,
        (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)(*(_DWORD *)&v3 + 8),
        v3);
    }
    while ( !v4 );
  }
}

//----- (0046DFC0) --------------------------------------------------------
int std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>(...)
{
  void *v4; // esi@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@2
  int v7; // [sp-10h] [bp-30h]@1
  std::exception thisa; // [sp+0h] [bp-20h]@5
  void *p; // [sp+Ch] [bp-14h]@1
  int *v10; // [sp+10h] [bp-10h]@1
  int v11; // [sp+1Ch] [bp-4h]@2

  v10 = &v7;
  v4 = operator new(0x30u);
  p = v4;
  if ( !v4 )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Next;
  *((_DWORD *)v4 + 1) = _Prev;
  v11 = 0;
  *(_DWORD *)v4 = v5;
  _Next = (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 8);
  _Prev = (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 8);
  LOBYTE(v11) = 1;
  if ( v4 != (void *)-8 )
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>(
      (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)((char *)v4 + 8),
      _Val);
  return (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0046E080) --------------------------------------------------------
int ___insert_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std______Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2_V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__c(...)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *v3; // ebx@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > **v4; // eax@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // edi@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@1
  unsigned int v7; // ecx@1

  v3 = this;
  v4 = *(std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > ***)&this->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = *v4;
  v6 = std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>(
         &this->_List.baseclass_0,
         *v4,
         (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*v4)->_Mysize,
         _Val);
  v7 = v3->_List.baseclass_0.baseclass_0._Mysize;
  if ( 107374181 - v7 < 1 )
    std::_Xlength_error("list<T> too long");
  v3->_List.baseclass_0.baseclass_0._Mysize = v7 + 1;
  v5->_Mysize = (unsigned int)v6;
  *(_DWORD *)v6->_Mysize = v6;
  std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>_stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>>_0>>::_Insert(
    v3,
    result,
    (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)(**(_DWORD **)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 8),
    **(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st **)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  return result;
}

//----- (0046E0F0) --------------------------------------------------------
bool __cdecl ItemViewDummyTab::Load(char *pcFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@2
  unsigned int v3; // eax@5
  void *v4; // eax@6
  const char *v5; // edi@6
  char v6; // al@7
  void *v7; // eax@12
  void *v8; // esi@12
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v9; // eax@13
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *v10; // eax@13
  int v11; // edi@16
  int v12; // esi@16
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v13; // eax@16
  int v14; // ecx@16
  bool v15; // al@19
  char v16; // [sp+0h] [bp-A4h]@13
  int (__thiscall **pExceptionObject)(void *, char); // [sp+8h] [bp-9Ch]@20
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > dummys; // [sp+14h] [bp-90h]@12
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > result; // [sp+20h] [bp-84h]@9
  char *_What; // [sp+24h] [bp-80h]@20
  void *dummy; // [sp+28h] [bp-7Ch]@6
  unsigned int i; // [sp+2Ch] [bp-78h]@5
  unsigned int v23; // [sp+30h] [bp-74h]@3
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > v24; // [sp+34h] [bp-70h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+5Ch] [bp-48h]@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Val1; // [sp+78h] [bp-2Ch]@13
  unsigned int v27; // [sp+94h] [bp-10h]@1
  int v28; // [sp+A0h] [bp-4h]@9
  int v29; // [sp+A4h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  if ( ITableBase<ItemViewDummy_ItemViewDummyTab>::Load(pcFn, bErrorWhenOpenFailed) )
  {
    v2 = *(_DWORD *)(ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable + 56);
    if ( v2 )
      v23 = *(_DWORD *)(v2 + 40);
    else
      v23 = 0;
    v3 = 0;
    for ( i = 0; v3 < v23; i = v3 )
    {
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemViewDummy_ItemViewDummyTab>::ms_pkTable + 4), v3);
      v5 = (const char *)v4;
      dummy = v4;
      if ( v4 )
      {
        v6 = *((_BYTE *)v4 + 32);
        if ( v6 && v6 != 1 )
          goto $LN276;
        this.baseclass_0._Myres = 15;
        this.baseclass_0._Mysize = 0;
        this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, v5, strlen(v5));
        v28 = 0;
        std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(
          &ItemViewDummyTab::m_DummyMap,
          &result,
          &this);
        v28 = -1;
        if ( this.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&this);
        this.baseclass_0._Myres = 15;
        this.baseclass_0._Mysize = 0;
        this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( result == *(_DWORD *)&stru_A95928 )
        {
          dummys.baseclass_0.baseclass_0._Mysize = 0;
          v7 = operator new(0xCu);
          v8 = v7;
          if ( !v7 )
          {
            _What = 0;
            std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
            pExceptionObject = &std::bad_alloc::_vftable_;
            _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
          }
          *(_DWORD *)v7 = v7;
          *(_DWORD *)&dummys.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v7;
          *((_DWORD *)v7 + 1) = v7;
          v28 = 1;
          v9 = std::_List_val<char___std::allocator<char__>>::_Buynode(
                 &dummys.baseclass_0,
                 (std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *)v7,
                 (std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *)v7,
                 (ItemViewDummy *const *)&dummy);
          *((_DWORD *)v8 + 1) = v9;
          v9->_Prev->_Next = v9;
          dummys.baseclass_0.baseclass_0._Mysize = 1;
          _Val1.baseclass_0._Myres = 15;
          _Val1.baseclass_0._Mysize = 0;
          _Val1.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val1, v5, strlen(v5));
          LOBYTE(v28) = 2;
          v10 = std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>__>(
                  &v24,
                  &_Val1,
                  &dummys);
          LOBYTE(v28) = 3;
          ___insert_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std______Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2_V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__c(
            (std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> >,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::les *)&ItemViewDummyTab::m_DummyMap,
            (std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > >,std::allocator<std::pair<std::basic_string<char,std::char_trait *)&v16,
            v10);
          std::_Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>::__Pair_base<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>>((std::_Pair_base<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > > *)&v24);
          if ( _Val1.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&_Val1);
          _Val1.baseclass_0._Myres = 15;
          _Val1.baseclass_0._Mysize = 0;
          _Val1.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          v28 = -1;
          std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&dummys);
        }
        else
        {
          v11 = *(_DWORD *)(*(_DWORD *)&result + 36);
          v12 = *(_DWORD *)&result + 36;
          v13 = std::_List_val<char___std::allocator<char__>>::_Buynode(
                  (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)(*(_DWORD *)&result + 36),
                  *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)&result + 36),
                  *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(v11 + 4),
                  (ItemViewDummy *const *)&dummy);
          v14 = *(_DWORD *)(v12 + 4);
          if ( (unsigned int)(1073741822 - v14) < 1 )
            std::_Xlength_error("list<T> too long");
          *(_DWORD *)(v12 + 4) = v14 + 1;
          *(_DWORD *)(v11 + 4) = v13;
          v13->_Prev->_Next = v13;
        }
      }
      v3 = i + 1;
    }
    v15 = 1;
  }
  else
  {
$LN276:
    v15 = 0;
  }
  return v15;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F20: using guessed type int ITableBase_ItemViewDummy_ItemViewDummyTab___ms_pkTable;

//----- (0046E380) --------------------------------------------------------
void __thiscall PgFrameMgr::RegisterAllFrameWork(PgFrameMgr *this)
{
  PgFrameMgr *v1; // esi@1
  void *v2; // eax@1
  PgFrameWork *v3; // eax@2
  void *v4; // eax@4
  PgFrameWork *v5; // eax@5
  void *v6; // eax@7
  PgFrameWork *v7; // eax@8
  void *v8; // eax@10
  PgFrameWork *v9; // eax@11
  void *v10; // eax@13
  PgFrameWork *v11; // eax@14
  void *v12; // eax@16
  PgFrameWork *v13; // eax@17
  void *v14; // eax@19
  PgFrameWork *v15; // eax@20
  void *v16; // eax@22
  PgFrameWork *v17; // eax@23
  void *v18; // eax@25
  PgFrameWork *v19; // eax@26

  v1 = this;
  v2 = operator new(0x23Cu);
  if ( v2 )
    AccountFrameWork::AccountFrameWork((AccountFrameWork *)v2);
  else
    v3 = 0;
  AccountFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v3);
  v4 = operator new(0x28u);
  if ( v4 )
    LoginWorldNetFrameWork::LoginWorldNetFrameWork((LoginWorldNetFrameWork *)v4);
  else
    v5 = 0;
  LoginWorldNetFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v5);
  v6 = operator new(0x3Cu);
  if ( v6 )
    ZoneLoginNetFrameWork::ZoneLoginNetFrameWork((ZoneLoginNetFrameWork *)v6);
  else
    v7 = 0;
  ZoneLoginNetFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v7);
  v8 = operator new(0x16Cu);
  if ( v8 )
    CharSelectFrameWork::CharSelectFrameWork((CharSelectFrameWork *)v8);
  else
    v9 = 0;
  CharSelectFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v9);
  v10 = operator new(0xD4u);
  if ( v10 )
    CharCreateFrameWork::CharCreateFrameWork((CharCreateFrameWork *)v10);
  else
    v11 = 0;
  CharCreateFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v11);
  v12 = operator new(0x3Cu);
  if ( v12 )
    LoadingFrameWork::LoadingFrameWork((LoadingFrameWork *)v12);
  else
    v13 = 0;
  LoadingFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v13);
  v14 = operator new(0x1438u);
  if ( v14 )
    GameFrameWork::GameFrameWork((GameFrameWork *)v14);
  else
    v15 = 0;
  GameFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v15);
  v16 = operator new(0x6Cu);
  if ( v16 )
    LinkFrameWork::LinkFrameWork((LinkFrameWork *)v16);
  else
    v17 = 0;
  LinkFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v17);
  v18 = operator new(0xC0u);
  if ( v18 )
    CHairShopFrameWork::CHairShopFrameWork((CHairShopFrameWork *)v18);
  else
    v19 = 0;
  CHairShopFrameWorkID = PgFrameMgr::RegisterFrameWork(v1, v19);
}

//----- (0046E5A0) --------------------------------------------------------
void __thiscall NiActionData::_NiActionData(NiActionData *this)
{
  this->vfptr = (NiActionDataVtbl *)&NiActionData::_vftable_;
}
// 988FD8: using guessed type int (__thiscall *NiActionData___vftable_)(void *p, char);

//----- (0046E5B0) --------------------------------------------------------
void *__thiscall NiPointer<NiAVObject>::_vector_deleting_destructor_(NiPointer<NiAlphaProperty> *this, unsigned int a2)
{
  void *v2; // edi@1
  void *result; // eax@4
  NiAlphaProperty *v4; // esi@5

  v2 = this;
  if ( a2 & 2 )
  {
    _eh_vector_destructor_iterator_(
      this,
      4u,
      (int)this[-1].m_pObject,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    if ( a2 & 1 )
      operator delete__((char *)v2 - 4);
    result = (char *)v2 - 4;
  }
  else
  {
    v4 = this->m_pObject;
    if ( this->m_pObject
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    if ( a2 & 1 )
      operator delete(v2);
    result = v2;
  }
  return result;
}

//----- (0046E630) --------------------------------------------------------
void *__thiscall NiActionData::_vector_deleting_destructor_(NiActionData *this, unsigned int a2)
{
  void *v2; // esi@1
  void *result; // eax@4

  v2 = this;
  if ( a2 & 2 )
  {
    _eh_vector_destructor_iterator_(
      this,
      0x1Cu,
      *((_DWORD *)this - 1),
      (void (__thiscall *)(void *))NiActionData::_NiActionData);
    if ( a2 & 1 )
      operator delete__((char *)v2 - 4);
    result = (char *)v2 - 4;
  }
  else
  {
    this->vfptr = (NiActionDataVtbl *)&NiActionData::_vftable_;
    if ( a2 & 1 )
      operator delete(this);
    result = v2;
  }
  return result;
}
// 988FD8: using guessed type int (__thiscall *NiActionData___vftable_)(void *p, char);

//----- (0046E690) --------------------------------------------------------
boost::singleton_pool<boost::fast_pool_allocator_tag,28,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>::pool_type *__cdecl boost::details::pool::singleton_default<boost::singleton_pool<boost::fast_pool_allocator_tag_28_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>::pool_type>::instance()
{
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    InitializeCriticalSection(&obj.baseclass_0.mtx);
    obj.p.baseclass_0.first = 0;
    obj.p.list.ptr = 0;
    obj.p.list.sz = 0;
    obj.p.requested_size = 28;
    obj.p.next_size = 32;
    atexit(_dynamic_atexit_destuctor_for__obj__);
  }
  return &obj;
}
// A98228: using guessed type int _local static guard_;

//----- (0046E6F0) --------------------------------------------------------
void __thiscall AccountFrameWork::TerminateWindow(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkBack )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_pkBack->baseclass_0);
    v1->m_pkBack = 0;
  }
  if ( v1->m_pkAge12 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAge12->baseclass_0);
    v1->m_pkAge12 = 0;
  }
  if ( v1->m_aragon )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_aragon->baseclass_0);
    v1->m_aragon = 0;
  }
  if ( v1->m_pkPublisherWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPublisherWin->baseclass_0);
    v1->m_pkPublisherWin = 0;
  }
  if ( v1->m_pkAccountWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAccountWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkAccountWin = 0;
  }
  if ( v1->m_pkWorldSelectWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWorldSelectWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkWorldSelectWin = 0;
  }
  if ( v1->m_pkSpawnAppsWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkSpawnAppsWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkSpawnAppsWin = 0;
  }
  if ( v1->m_pkSignUpWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkSignUpWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkSignUpWin = 0;
  }
  MenuTexMgr::Remove(3u);
}

//----- (0046E7B0) --------------------------------------------------------
bool __thiscall AccountFrameWork::ReceiveWinProc(AccountFrameWork *this)
{
  AccountFrameWork *v1; // edi@1
  NiTListItem<PgWin *> *i; // esi@2
  NiTListItem<PgWin *> *v3; // esi@4
  NiTListItem<PgWin *> *v4; // ST00_4@5

  v1 = this;
  if ( *(_DWORD *)&this->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    for ( i = this->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead; i; i = i->m_pkNext )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, i->m_element);
  }
  v3 = v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *)&v1->m_ReceiveWinList,
      v4);
  }
  *(_DWORD *)&v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  return 1;
}

//----- (0046E810) --------------------------------------------------------
void __thiscall AccountFrameWork::TerminateNet(AccountFrameWork *this)
{
  AccountFrameWork *v1; // edi@1
  Net *v2; // esi@1
  Net *v3; // esi@6

  v1 = this;
  this->m_bDuringWorldSelect = 0;
  v2 = this->m_spLoginNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spLoginNet.m_pObject = 0;
  }
  v3 = v1->m_spWorldMgrNet.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
}

//----- (0046E880) --------------------------------------------------------
bool __thiscall AccountFrameWork::InitKeyMap(AccountFrameWork *this)
{
  AccountFrameWork *v1; // ebx@1
  int v2; // edi@1
  void *v3; // eax@2
  int v4; // eax@3
  KeyMap *v5; // esi@4

  v1 = this;
  v2 = 0;
  if ( !this->m_spKeyMap.m_pObject )
  {
    v3 = operator new(0x20u);
    if ( v3 )
    {
      KeyMap::KeyMap((KeyMap *)v3);
      v2 = v4;
    }
    v5 = v1->m_spKeyMap.m_pObject;
    if ( v5 != (KeyMap *)v2 )
    {
      if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spKeyMap.m_pObject = (KeyMap *)v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    v1->m_spKeyMap.m_pObject->m_pkFrameWork = (PgFrameWork *)v1;
  }
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x13u, KEY_F5, WAS_RELEASED, 0, 0);
  return 1;
}

//----- (0046E940) --------------------------------------------------------
void __thiscall AccountFrameWork::TerminateKeyMap(AccountFrameWork *this)
{
  AccountFrameWork *v1; // edi@1
  KeyMap *v2; // esi@1

  v1 = this;
  v2 = this->m_spKeyMap.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spKeyMap.m_pObject = 0;
  }
}

//----- (0046E980) --------------------------------------------------------
void __thiscall AccountFrameWork::TerminateBackgroundScene(AccountFrameWork *this)
{
  AccountFrameWork *v1; // edi@1
  NiNode *v2; // esi@1
  NiCamera *v3; // esi@6
  NiSortAdjustNode *v4; // esi@11

  v1 = this;
  v2 = this->m_spShadowScene.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spShadowScene.m_pObject = 0;
  }
  v3 = v1->m_spCamera.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spCamera.m_pObject = 0;
  }
  v4 = v1->m_spBackgroundScene.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    v1->m_spBackgroundScene.m_pObject = 0;
  }
}

//----- (0046EA20) --------------------------------------------------------
bool __thiscall AccountFrameWork::InitWindow(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  NiImageConverter *v2; // eax@3
  NiPixelData *v3; // eax@3
  NiSourceTexture *v4; // edi@4
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@8
  unsigned int v6; // ST60_4@8
  unsigned int v7; // eax@8
  PgWinSpr *v8; // eax@8
  NiImageConverter *v9; // eax@10
  NiPixelData *v10; // eax@10
  NiSourceTexture *v11; // ebx@10
  unsigned int v12; // ST60_4@17
  unsigned int v13; // eax@17
  NiSourceTexture *v14; // ebx@17
  PgWinSpr *v15; // eax@17
  NiImageConverter *v16; // eax@19
  NiPixelData *v17; // eax@19
  unsigned int v18; // ST60_4@26
  unsigned int v19; // eax@26
  NiSourceTexture *v20; // ebx@26
  PgWinSpr *v21; // eax@26
  NiImageConverter *v22; // eax@28
  NiPixelData *v23; // eax@28
  unsigned int v24; // ST60_4@35
  unsigned int v25; // eax@35
  PgWinSpr *v26; // eax@35
  WorldSelectWin *v27; // eax@35
  PgWin *v28; // eax@38
  int v30; // eax@46
  unsigned __int64 *v31; // eax@46
  const char *v32; // eax@46
  char *v33; // eax@48
  unsigned int v34; // [sp+6Ch] [bp-140h]@1
  NiTexture::FormatPrefs kPrefs; // [sp+80h] [bp-12Ch]@5
  NiPointer<NiSourceTexture> spTexture; // [sp+8Ch] [bp-120h]@6
  int v37; // [sp+90h] [bp-11Ch]@11
  int v38; // [sp+94h] [bp-118h]@11
  int v39; // [sp+98h] [bp-114h]@11
  char acPathName[256]; // [sp+9Ch] [bp-110h]@3
  unsigned int v41; // [sp+19Ch] [bp-10h]@1
  int v42; // [sp+1A8h] [bp-4h]@8
  int v43; // [sp+1ACh] [bp+0h]@1

  v41 = (unsigned int)&v43 ^ __security_cookie;
  v34 = (unsigned int)&v43 ^ __security_cookie;
  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sAccount\\%s.tga");
  v2 = NiImageConverter::GetImageConverter();
  v3 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD, unsigned int))v2->baseclass_0.vfptr[2].__vecDelDtor)(
                        v2,
                        acPathName,
                        0,
                        v34);
  if ( v3 )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    v4 = NiSourceTexture::Create(v3, &kPrefs);
  }
  else
  {
    v4 = 0;
  }
  spTexture.m_pObject = v4;
  if ( v4 )
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor;
  v42 = 0;
  v6 = ((int (__thiscall *)(NiSourceTexture *))v5)(v4);
  v7 = ((int (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v4);
  v8 = PgWinSpr::CreateWin(0, 0, v4, 0, 0, 0, v7, v6, 0, 0, 0);
  v1->m_pkBack = v8;
  v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v8,
    PgWin::ms_uiScreenWidth);
  ((void (__stdcall *)(unsigned int))v1->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(PgWin::ms_uiScreenHeight);
  ((void (__stdcall *)(_DWORD))v1->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sAccount\\%s.tga");
  v9 = NiImageConverter::GetImageConverter();
  v10 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v9->baseclass_0.vfptr[2].__vecDelDtor)(
                         v9,
                         acPathName,
                         0);
  v11 = 0;
  if ( v10 )
  {
    v37 = 6;
    v38 = 3;
    v39 = 0;
    v11 = NiSourceTexture::Create(v10, (NiTexture::FormatPrefs *)&v37);
  }
  if ( v4 != v11 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v4 = v11;
    spTexture.m_pObject = v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v12 = ((int (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
  v13 = ((int (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v4);
  v14 = 0;
  v15 = PgWinSpr::CreateWin(0, 0, v4, 0, 0, 0, v13, v12, 0, 0, 0);
  v1->m_pkAge12 = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkAge12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.89999998,
    0.1);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sAccount\\%s.tga");
  v16 = NiImageConverter::GetImageConverter();
  v17 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v16->baseclass_0.vfptr[2].__vecDelDtor)(
                         v16,
                         acPathName,
                         0);
  if ( v17 )
  {
    v37 = 6;
    v38 = 3;
    v39 = 0;
    v14 = NiSourceTexture::Create(v17, (NiTexture::FormatPrefs *)&v37);
  }
  if ( v4 != v14 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v4 = v14;
    spTexture.m_pObject = v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v18 = ((int (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
  v19 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v4);
  v20 = 0;
  v21 = PgWinSpr::CreateWin(0, 0, v4, 0, 0, 0, v19, v18, 0, 0, 0);
  v1->m_aragon = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_aragon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    1.0);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sAccount\\%s.tga");
  v22 = NiImageConverter::GetImageConverter();
  v23 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v22->baseclass_0.vfptr[2].__vecDelDtor)(
                         v22,
                         acPathName,
                         0);
  if ( v23 )
  {
    v37 = 6;
    v38 = 3;
    v39 = 0;
    v20 = NiSourceTexture::Create(v23, (NiTexture::FormatPrefs *)&v37);
  }
  if ( v4 != v20 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v4 = v20;
    spTexture.m_pObject = v20;
    if ( v20 )
      InterlockedIncrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v24 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
  v25 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v4);
  v26 = PgWinSpr::CreateWin(0, 0, v4, 0, 0, 0, v25, v24, 0, 0, 0);
  v1->m_pkPublisherWin = v26;
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkPublisherWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    1.0);
  LOBYTE(v42) = 1;
  v1->m_pkAccountWin = AccountWin::CreateWin(&v1->baseclass_0);
  v27 = WorldSelectWin::CreateWin(&v1->baseclass_0);
  v1->m_pkWorldSelectWin = v27;
  if ( v27 )
    WorldSelectWin::InitWorldSelectExitWin(v27, &v1->baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkBack->baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkAge12->baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_aragon->baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkPublisherWin->baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkAccountWin->baseclass_0.baseclass_0.baseclass_0);
  v1->m_pkSpawnAppsWin = 0;
  v1->m_pkSignUpWin = 0;
  if ( GameFrameWork::ms_bSpawnApps == 1 )
  {
    v1->m_pkSpawnAppsWin = SpawnAppsWin::CreateWin(&v1->baseclass_0);
    v28 = (PgWin *)SignUpWin::CreateWin(&v1->baseclass_0);
    v1->m_pkSignUpWin = (SignUpWin *)v28;
    if ( v28 )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v28);
  }
  if ( v1->m_pkAccountWin )
  {
    if ( SteamConfig::IsRunning() )
    {
      if ( !_SteamUser() )
      {
        v42 = -1;
        if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        return 0;
      }
      v30 = _SteamUser();
      v31 = (unsigned __int64 *)(*(int (__thiscall **)(int, int *))(*(_DWORD *)v30 + 8))(v30, &v38);
      v32 = SteamConfig::GetURL(*v31);
    }
    else
    {
      v32 = TextData3::Get(0x2641359Du);
    }
    AccountWin::SetRegisterURL(v1->m_pkAccountWin, v32);
    v33 = TextData3::Get(0x29418899u);
    AccountWin::SetForgotPassword(v1->m_pkAccountWin, v33);
  }
  v42 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  return 1;
}
// 976688: using guessed type int _SteamUser(void);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (0046EFE0) --------------------------------------------------------
bool __thiscall AccountFrameWork::ReceiveWinCheck(AccountFrameWork *this)
{
  int v1; // edi@2
  char *v2; // esi@3
  int v3; // eax@4
  int v4; // ecx@4
  bool result; // al@8

  if ( unk_B703F8 )
  {
    v1 = unk_B703F0;
    if ( unk_B703F0 )
    {
      v2 = (char *)&this->m_ReceiveWinList;
      do
      {
        v3 = (*(int (__thiscall **)(char *))(*(_DWORD *)v2 + 4))(v2);
        *(_DWORD *)(v3 + 8) = *(_DWORD *)(v1 + 8);
        *(_DWORD *)v3 = 0;
        *(_DWORD *)(v3 + 4) = *((_DWORD *)v2 + 2);
        v4 = *((_DWORD *)v2 + 2);
        if ( v4 )
          *(_DWORD *)v4 = v3;
        else
          *((_DWORD *)v2 + 1) = v3;
        ++*((_DWORD *)v2 + 3);
        *((_DWORD *)v2 + 2) = v3;
        v1 = *(_DWORD *)v1;
      }
      while ( v1 );
      result = 1;
    }
    else
    {
      result = 1;
    }
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (0046F040) --------------------------------------------------------
bool __thiscall AccountFrameWork::InitNet(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  Net *v2; // edi@1
  Net *v3; // ebx@1
  PgNet *v4; // ecx@8
  Net *v5; // ebx@10
  Net *v6; // edi@10
  char acAddr[17]; // [sp+Ch] [bp-18h]@9
  unsigned int v9; // [sp+20h] [bp-4h]@1
  int v10; // [sp+24h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  v2 = this->m_spLoginNet.m_pObject;
  v3 = g_kNetMgr.m_spLogin.m_pObject;
  if ( v2 != g_kNetMgr.m_spLogin.m_pObject )
  {
    if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spLoginNet.m_pObject = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount);
  }
  v4 = (PgNet *)v1->m_spLoginNet.m_pObject;
  if ( v4 )
  {
    *(_DWORD *)acAddr = *(_DWORD *)&g_kServer.m_kLoginAddr.m_kAddr.n4_name[0];
    *(_QWORD *)&acAddr[4] = *(_QWORD *)&g_kServer.m_kLoginAddr.m_kAddr.n4_name[4];
    *(_DWORD *)&acAddr[12] = *(_DWORD *)&g_kServer.m_kLoginAddr.m_kAddr.n4_name[12];
    acAddr[16] = 0;
    PgNet::SetAddress(v4, acAddr);
    PgNet::SetPortA(&v1->m_spLoginNet.m_pObject->baseclass_0, g_kServer.m_kLoginAddr.m_iPort);
  }
  v5 = g_kNetMgr.m_spWorldMgr.m_pObject;
  v6 = v1->m_spWorldMgrNet.m_pObject;
  if ( v6 != g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spWorldMgrNet.m_pObject = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount);
  }
  v1->m_bDuringWorldSelect = 0;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0046F130) --------------------------------------------------------
bool __thiscall AccountFrameWork::InitShadow(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  NiNode *v2; // ecx@1
  NiTListItem<NiPointer<Shadow> > *v3; // edi@1
  unsigned int v4; // eax@1
  NiTListItem<NiPointer<Shadow> > *v5; // ST30_4@2
  void *v6; // eax@5
  int v7; // edi@5
  int v8; // eax@6
  void *v9; // eax@12
  unsigned int v10; // ebx@12
  unsigned int v11; // eax@13
  int v12; // edi@15
  NiNode *v13; // edi@21
  Shadow *v14; // ecx@21
  int v16; // [sp+34h] [bp-34h]@0
  int v17; // [sp+38h] [bp-30h]@0
  int v18; // [sp+3Ch] [bp-2Ch]@0
  int v19; // [sp+40h] [bp-28h]@0
  NiPoint3 kDefaultDirectionalLightDir; // [sp+44h] [bp-24h]@1
  Shadow *v21; // [sp+50h] [bp-18h]@5
  NiPointer<Shadow> spShadow; // [sp+54h] [bp-14h]@7
  unsigned int i; // [sp+58h] [bp-10h]@4
  int v24; // [sp+64h] [bp-4h]@5

  v1 = this;
  v2 = this->m_spShadowScene.m_pObject;
  kDefaultDirectionalLightDir.x = 51.0;
  v1->m_nMaxShadowObject = 3;
  kDefaultDirectionalLightDir.y = 1.0;
  kDefaultDirectionalLightDir.z = 15.0;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_kChildren);
  v3 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3;
      v3 = v3->m_pkNext;
      v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *)&v1->m_kShadowList,
        v5);
    }
    while ( v3 );
    v4 = 0;
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<Shadow> > *)v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<Shadow> > *)v4;
  for ( i = v4; i < v1->m_nMaxShadowObject; ++i )
  {
    v6 = operator new(0x84u);
    v21 = (Shadow *)v6;
    v7 = 0;
    v24 = 0;
    if ( v6 )
    {
      Shadow::Shadow((Shadow *)v6, &kDefaultDirectionalLightDir, 0, 0, 5u);
      v7 = v8;
    }
    spShadow.m_pObject = (Shadow *)v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)(v7 + 4));
    v24 = 1;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v1->m_kShadowList,
      (NiPointer<NiDX92DBufferData> *)&spShadow);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spShadowScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *(_DWORD *)(v7 + 116),
      0);
    v24 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  }
  v9 = operator new(0xE8u);
  v21 = (Shadow *)v9;
  v10 = 0;
  v24 = 2;
  if ( v9 )
  {
    NiNode::NiNode((NiNode *)v9, 0);
    i = v11;
  }
  else
  {
    i = 0;
  }
  v24 = -1;
  NiObjectNET::SetName((NiObjectNET *)i, "ShadowNode");
  v12 = (signed int)((char *)v1->m_vecBGObjectNode.baseclass_0._Mylast
                   - *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v12 )
  {
    do
    {
      ((void (__stdcall *)(NiPointer<Shadow> *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &spShadow,
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10));
      if ( spShadow.m_pObject )
      {
        v21 = spShadow.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spShadow.m_pObject->baseclass_0.m_uiRefCount) )
        {
          if ( v21 )
            ((void (__stdcall *)(signed int))v21->baseclass_0.vfptr->__vecDelDtor)(1);
        }
      }
      (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)i + 116))(
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10++),
        0);
    }
    while ( v10 < v12 );
  }
  v13 = (NiNode *)i;
  ((void (__stdcall *)(unsigned int, _DWORD, int, int, int, int, _DWORD, _DWORD, _DWORD, Shadow *, Shadow *))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    i,
    0,
    v16,
    v17,
    v18,
    v19,
    (_DWORD)kDefaultDirectionalLightDir.x,
    LODWORD(kDefaultDirectionalLightDir.y),
    LODWORD(kDefaultDirectionalLightDir.z),
    v21,
    spShadow.m_pObject);
  spShadow.m_pObject = (Shadow *)1;
  v21 = v14;
  NiAVObject::Update(&v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0, 0.0, 1);
  NiAVObject::UpdateProperties(&v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0);
  AccountFrameWork::ApplyTerrain(v1, v13);
  return 1;
}

//----- (0046F390) --------------------------------------------------------
bool __thiscall AccountFrameWork::InitBackgroundScene(AccountFrameWork *this)
{
  AccountFrameWork *v1; // edi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  NiSortAdjustNode *v5; // esi@3
  NiNode *v6; // esi@10
  void *v7; // eax@15
  int v8; // eax@16
  int v9; // ebx@16
  NiNode *v10; // esi@18
  void *v11; // ebx@25
  void *v12; // eax@25
  void *v13; // esi@25
  NiNode *v14; // esi@27
  void *v15; // eax@29
  int v16; // esi@29
  void *v17; // eax@36
  void *v18; // esi@36
  char *v19; // eax@43
  NiNode *v20; // esi@43
  int v21; // esi@44
  bool result; // al@48
  char *v23; // eax@49
  char *v24; // ecx@57
  int v25; // eax@65
  int v26; // eax@67
  int v27; // esi@69
  int v28; // eax@70
  signed int v29; // ecx@75
  void *v30; // esi@75
  int v31; // esi@77
  char *v32; // ecx@78
  unsigned int v33; // edx@78
  int v34; // eax@78
  unsigned int v35; // edx@80
  void *v36; // ecx@81
  int v37; // eax@81
  double v38; // st7@82
  int v39; // eax@85
  int v40; // eax@89
  NiAVObject *v41; // eax@92
  int v42; // esi@93
  NiCamera *v43; // esi@98
  void *v44; // eax@103
  int v45; // esi@105
  NiNode *pkNode; // [sp+70h] [bp-28h]@43
  unsigned int uiExtraDataSize; // [sp+74h] [bp-24h]@68
  char *pkCamera; // [sp+7Ch] [bp-1Ch]@92
  char *pkTextKey; // [sp+80h] [bp-18h]@27
  int v50; // [sp+84h] [bp-14h]@30
  unsigned int uiNumKeys; // [sp+88h] [bp-10h]@34
  int v52; // [sp+94h] [bp-4h]@1

  v1 = this;
  v2 = operator new(0xECu);
  v3 = 0;
  v52 = 0;
  if ( v2 )
  {
    NiSortAdjustNode::NiSortAdjustNode((NiSortAdjustNode *)v2);
    v3 = v4;
  }
  v5 = v1->m_spBackgroundScene.m_pObject;
  v52 = -1;
  if ( v5 != (NiSortAdjustNode *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spBackgroundScene.m_pObject = (NiSortAdjustNode *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v1->m_spBackgroundScene.m_pObject->m_eSortingMode = 0;
  v6 = v1->m_spShadowScene.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spShadowScene.m_pObject = 0;
  }
  v7 = operator new(0xE8u);
  v52 = 1;
  if ( v7 )
  {
    NiNode::NiNode((NiNode *)v7, 0);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  v10 = v1->m_spShadowScene.m_pObject;
  v52 = -1;
  if ( v10 != (NiNode *)v9 )
  {
    if ( v10
      && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v1->m_spShadowScene.m_pObject = (NiNode *)v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)(v9 + 4));
  }
  v11 = 0;
  v52 = 2;
  v12 = operator new(0x20u);
  v13 = v12;
  LOBYTE(v52) = 3;
  if ( v12 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v12);
    *((_BYTE *)v13 + 30) = 0;
    *(_DWORD *)v13 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v13 + 14) = 236;
    v11 = v13;
    InterlockedIncrement((volatile LONG *)v13 + 1);
  }
  *((_WORD *)v11 + 14) |= 1u;
  *((_WORD *)v11 + 14) |= 0x200u;
  *((_WORD *)v11 + 14) = *((_WORD *)v11 + 14) & 0xF3FF | 0x1000;
  *((_BYTE *)v11 + 30) = 8;
  *((_WORD *)v11 + 14) = (*((_WORD *)v11 + 14) & 0xFE5F | 0x40) & 0xFFE3 | 2;
  v14 = v1->m_spShadowScene.m_pObject;
  pkTextKey = (char *)v11;
  InterlockedIncrement((volatile LONG *)v11 + 1);
  LOBYTE(v52) = 4;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v14->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&pkTextKey);
  LOBYTE(v52) = 2;
  if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
  v15 = operator new(0x28u);
  v16 = (int)v15;
  LOBYTE(v52) = 5;
  if ( v15 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v15);
    *(_DWORD *)v16 = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(v16 + 28) = 0;
    *(_DWORD *)(v16 + 32) = 0;
    *(_DWORD *)(v16 + 36) = 1;
    v50 = v16;
  }
  else
  {
    v16 = 0;
    v50 = 0;
  }
  if ( v16 )
    InterlockedIncrement((volatile LONG *)(v16 + 4));
  *(_DWORD *)(v16 + 32) = 1;
  *(_DWORD *)(v16 + 36) = 1;
  uiNumKeys = (unsigned int)v1->m_spShadowScene.m_pObject;
  pkTextKey = (char *)v16;
  InterlockedIncrement((volatile LONG *)(v16 + 4));
  LOBYTE(v52) = 7;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(uiNumKeys + 156),
    (NiPointer<NiRoom> *)&pkTextKey);
  LOBYTE(v52) = 6;
  if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
  v17 = operator new(0x30u);
  v18 = v17;
  LOBYTE(v52) = 8;
  if ( v17 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v17);
    *(_DWORD *)v18 = &NiFogProperty::_vftable_;
    *((float *)v18 + 9) = 0.0;
    *((float *)v18 + 10) = 0.0;
    *((float *)v18 + 11) = 0.0;
    *((_WORD *)v18 + 14) = 0;
    *((float *)v18 + 8) = 1.0;
    *((_DWORD *)v18 + 9) = NiColor::BLACK;
    *((_DWORD *)v18 + 10) = dword_B6E000;
    *((_DWORD *)v18 + 11) = dword_B6E004;
  }
  else
  {
    v18 = 0;
  }
  *((_WORD *)v18 + 14) &= 0xFFFEu;
  uiNumKeys = (unsigned int)v1->m_spShadowScene.m_pObject;
  pkTextKey = (char *)v18;
  InterlockedIncrement((volatile LONG *)v18 + 1);
  LOBYTE(v52) = 9;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(uiNumKeys + 156),
    (NiPointer<NiRoom> *)&pkTextKey);
  LOBYTE(v52) = 6;
  if ( !InterlockedDecrement((volatile LONG *)v18 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v18)(v18, 1);
  if ( !Folder::m_bInit )
    Folder::Init();
  v19 = Folder::Merge(&Folder::m_acMenu, "\\Account\\LoginBackground.nif");
  v20 = PgUtil::LoadNifFile(v19, 0, 1);
  pkNode = v20;
  if ( v20 )
  {
    ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v20,
      0);
    v23 = (char *)v1->m_vecShadowObject.baseclass_0._Mylast;
    pkTextKey = *(char **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( pkTextKey != v23 )
    {
      uiNumKeys = 0;
      memmove(pkTextKey, v23, 0);
      v1->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)&pkTextKey[uiNumKeys];
    }
    uiNumKeys = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v20,
                       (unsigned int)"dragon");
    if ( uiNumKeys )
      std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
        (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecShadowObject,
        &uiNumKeys);
    uiNumKeys = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v20,
                       (unsigned int)"cat");
    if ( uiNumKeys )
      std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
        (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecShadowObject,
        &uiNumKeys);
    uiNumKeys = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v20,
                       (unsigned int)"Sphere01");
    if ( uiNumKeys )
      std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
        (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecShadowObject,
        &uiNumKeys);
    v24 = (char *)v1->m_vecBGObjectNode.baseclass_0._Mylast;
    pkTextKey = *(char **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( pkTextKey != v24 )
    {
      uiNumKeys = 0;
      memmove(pkTextKey, v24, 0);
      v1->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)&pkTextKey[uiNumKeys];
    }
    uiNumKeys = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v20,
                       (unsigned int)"Object05");
    if ( uiNumKeys )
      std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
        (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecBGObjectNode,
        &uiNumKeys);
    uiNumKeys = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v20,
                       (unsigned int)"Object049");
    if ( uiNumKeys )
      std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
        (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecBGObjectNode,
        &uiNumKeys);
    uiNumKeys = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v20,
                       (unsigned int)"Object04");
    if ( uiNumKeys )
      std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
        (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecBGObjectNode,
        &uiNumKeys);
    ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v1->m_spShadowScene.m_pObject,
      0);
    v25 = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)v20,
                 (unsigned int)"LOGIN_BG_1_C");
    if ( v25 )
      v1->m_pkTimeController = *(NiTimeController **)(v25 + 12);
    v26 = (int)v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)v20,
                 (unsigned int)"Note");
    uiNumKeys = v26;
    if ( v26 )
    {
      uiExtraDataSize = *(_DWORD *)(v26 + 20);
      pkTextKey = 0;
      if ( uiExtraDataSize )
      {
        while ( 1 )
        {
          v27 = *(_DWORD *)(*(_DWORD *)(uiNumKeys + 16) + 4 * (_DWORD)pkTextKey);
          if ( v27 )
          {
            v28 = (*(int (__thiscall **)(int))(*(_DWORD *)v27 + 4))(v27);
            if ( v28 )
              break;
          }
LABEL_73:
          ++pkTextKey;
          if ( (unsigned int)pkTextKey >= uiExtraDataSize )
            goto LABEL_83;
        }
        while ( (NiRTTI *)v28 != &NiTextKeyExtraData::m_RTTI )
        {
          v28 = *(_DWORD *)(v28 + 4);
          if ( !v28 )
            goto LABEL_73;
        }
        v29 = *(_DWORD *)(v27 + 12);
        v30 = *(void **)(v27 + 16);
        uiNumKeys = v29;
        pkTextKey = (char *)v30;
        if ( v30 && (unsigned int)v29 < 3 )
        {
          v31 = 0;
          if ( v29 >= 4 )
          {
            v32 = pkTextKey + 16;
            v33 = ((uiNumKeys - 4) >> 2) + 1;
            v34 = (int)&v1->m_fBGMStartTime[1];
            v31 = 4 * v33;
            do
            {
              v34 += 16;
              *(float *)(v34 - 20) = *((float *)v32 - 4);
              v32 += 32;
              --v33;
              *(float *)(v34 - 16) = *((float *)v32 - 10);
              *(float *)(v34 - 12) = *((float *)v32 - 8);
              *(float *)(v34 - 8) = *((float *)v32 - 6);
            }
            while ( v33 );
          }
          v35 = uiNumKeys;
          if ( v31 < uiNumKeys )
          {
            v36 = pkTextKey;
            v37 = (int)&v1->m_fBGMStartTime[v31];
            do
            {
              v38 = *((float *)v36 + 2 * v31++);
              *(float *)v37 = v38;
              v37 += 4;
            }
            while ( v31 < v35 );
          }
        }
      }
    }
LABEL_83:
    if ( AccountFrameWork::ms_bSecondStart == 1 )
    {
      LODWORD(v1->m_fBGMStartTime[0]) = 0;
      LODWORD(v1->m_fBGMStartTime[1]) = 0;
    }
    v39 = (int)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)pkNode,
                 (unsigned int)"logo02");
    v1->m_pkAniLogo = (NiNode *)v39;
    if ( v39 )
    {
      if ( AccountFrameWork::ms_bSecondStart )
        *(_WORD *)(v39 + 28) |= 1u;
      else
        *(_WORD *)(v39 + 28) &= 0xFFFEu;
    }
    v40 = (int)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)pkNode,
                 (unsigned int)"logo01");
    v1->m_pkStaticLogo = (NiNode *)v40;
    if ( AccountFrameWork::ms_bSecondStart )
      *(_WORD *)(v40 + 28) &= 0xFFFEu;
    else
      *(_WORD *)(v40 + 28) |= 1u;
    v41 = (NiAVObject *)v1->m_spBackgroundScene.m_pObject;
    pkCamera = 0;
    if ( PgUtil::CatchCamera(v41, (NiCamera **)&pkCamera) )
    {
      v43 = v1->m_spCamera.m_pObject;
      pkTextKey = pkCamera;
      if ( (char *)v43 != pkCamera )
      {
        if ( v43
          && !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v43 )
          v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
        v44 = pkTextKey;
        v1->m_spCamera.m_pObject = (NiCamera *)pkTextKey;
        if ( v44 )
          InterlockedIncrement((volatile LONG *)v44 + 1);
      }
      NiAVObject::UpdateProperties(&v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0);
      NiAVObject::UpdateEffects(&v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0);
      NiAVObject::Update(&v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0, 0.0, 1);
      v45 = v50;
      LOBYTE(v52) = 2;
      if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v45)(v45, 1);
      v52 = -1;
      if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
      result = 1;
    }
    else
    {
      v42 = v50;
      LOBYTE(v52) = 2;
      if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v42)(v42, 1);
      v52 = -1;
      if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
      result = 0;
    }
  }
  else
  {
    v21 = v50;
    LOBYTE(v52) = 2;
    if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
    v52 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
    result = 0;
  }
  return result;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 9794FC: using guessed type int (__thiscall *NiFogProperty___vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;
// A982A4: using guessed type char AccountFrameWork__ms_bSecondStart;
// B6DFFC: using guessed type int NiColor__BLACK;
// B6E000: using guessed type int dword_B6E000;
// B6E004: using guessed type int dword_B6E004;

//----- (0046FBB0) --------------------------------------------------------
void __thiscall AccountFrameWork::ReleaseShadow(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  NiNode **v2; // ecx@1
  char *v3; // edi@1
  char *v4; // ecx@3
  char *v5; // edi@3
  int v6; // edi@5
  NiTListItem<NiPointer<Shadow> > *v7; // esi@5
  NiTListItem<NiPointer<Shadow> > *v8; // ST08_4@6

  v1 = this;
  v2 = this->m_vecBGObjectNode.baseclass_0._Mylast;
  v3 = *(char **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (NiNode **)v3 != v2 )
  {
    memmove(v3, (char *)v2, 0);
    v1->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)v3;
  }
  v4 = (char *)v1->m_vecShadowObject.baseclass_0._Mylast;
  v5 = *(char **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v5 != v4 )
  {
    memmove(v5, v4, 0);
    v1->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)v5;
  }
  v6 = (int)&v1->m_kShadowList;
  v7 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v7 )
  {
    v8 = v7;
    v7 = v7->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 8))(v6, v8);
  }
  *(_DWORD *)(v6 + 12) = 0;
  *(_DWORD *)(v6 + 4) = 0;
  *(_DWORD *)(v6 + 8) = 0;
}

//----- (0046FC50) --------------------------------------------------------
bool __thiscall AccountFrameWork::Init(AccountFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  AccountFrameWork *v2; // esi@1
  bool result; // al@2
  NiAudioSystem *v4; // eax@9
  int v5; // eax@9
  float v6; // ST28_4@16
  NiAudioSystem *v7; // eax@16
  PgFrameWork *v8; // eax@17
  char *v9; // eax@20
  char *v10; // ST1C_4@20
  CDataDocument *v11; // eax@20
  NiSourceTexture *v12; // eax@20
  char acFileName[256]; // [sp+2Ch] [bp-104h]@10
  unsigned int v14; // [sp+12Ch] [bp-4h]@1
  int v15; // [sp+130h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  this->m_pkAccountAnotherBGM = 0;
  this->m_pkTimeController = 0;
  *(_WORD *)&this->m_bStartBGM[0] = 0;
  LODWORD(this->m_fBGMStartTime[0]) = 0;
  LODWORD(this->m_fBGMStartTime[1]) = 0;
  this->m_fFrameStartTime = 0.0;
  this->m_pkStaticLogo = 0;
  this->m_pkAniLogo = 0;
  if ( AccountFrameWork::ReceiveWinCheck(this)
    && AccountFrameWork::InitWindow(v2)
    && AccountFrameWork::ReceiveWinProc(v2)
    && AccountFrameWork::InitNet(v2)
    && AccountFrameWork::InitKeyMap(v2)
    && AccountFrameWork::InitBackgroundScene(v2)
    && AccountFrameWork::InitShadow(v2) )
  {
    v4 = NiAudioSystem::GetAudioSystem();
    v5 = (int)v4->baseclass_0.baseclass_0.vfptr[17].__vecDelDtor((NiRefObject *)v4, 1u);
    v2->m_pkAccountAnotherBGM = (NiAudioSource *)v5;
    if ( v5 )
    {
      Folder::Sound();
      sprintf(acFileName, "%s%s");
      ((void (__stdcall *)(_DWORD))v2->m_pkAccountAnotherBGM->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(acFileName);
      ((void (__stdcall *)(signed int))v2->m_pkAccountAnotherBGM->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[32].__vecDelDtor)(1);
      if ( (unsigned __int8)((int (*)(void))v2->m_pkAccountAnotherBGM->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)() )
      {
        ((void (__stdcall *)(signed int))v2->m_pkAccountAnotherBGM->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(1);
        if ( !AccountFrameWork::ms_bSecondStart )
          ((void (*)(void))v2->m_pkAccountAnotherBGM->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[54].__vecDelDtor)();
        if ( g_kSoundMgr.m_pkBGMGroup )
        {
          SoundGroup::StopAllSoundWholeGroup();
          ((void (*)(void))g_kSoundMgr.m_pkBGMGroup->baseclass_0.baseclass_0.vfptr->StopAllSound)();
          SoundMgr::StopBGM(&g_kSoundMgr);
          SoundMgr::PlayBGM(&g_kSoundMgr, "LoginBackground.mp3");
        }
        v6 = SoundGroup::GetMasterGain() * g_kSoundMgr.m_pkBGMGroup->baseclass_0.baseclass_0.m_fGain;
        ((void (__stdcall *)(_DWORD))v2->m_pkAccountAnotherBGM->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor)(LODWORD(v6));
        ((void (__stdcall *)(_DWORD))v2->m_pkAccountAnotherBGM->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(0.0);
        v7 = NiAudioSystem::GetAudioSystem();
        ((void (__thiscall *)(NiAudioSystem *, _DWORD, signed int))v7->baseclass_0.baseclass_0.vfptr[22].__vecDelDtor)(
          v7,
          0.0,
          1);
      }
      else
      {
        v2->m_pkAccountAnotherBGM = 0;
      }
    }
    AccountFrameWork::ms_bSecondStart = 1;
    v2->baseclass_0.m_bInit = 1;
    v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v8 )
    {
      if ( LOBYTE(v8[64].m_kMsgQ.m_uiAlloced) )
        ((void (*)(void))v2->m_spLoginNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
    }
    v9 = Folder::Menu();
    v10 = Folder::Merge(v9, "\\Account\\Account.conf");
    v11 = CDataDocument::Instance();
    CDataDocument::Load(v11, v10);
    v2->m_pkPopupMenuWin = 0;
    v12 = MenuTexMgr::GetTexture(1u);
    v2->m_pkPopupMenuWin = PopupMenuWin::CreateWin(v12, 5u, 5u, &v2->baseclass_0);
    AccountFrameWork::SetResList(v2);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A982A4: using guessed type char AccountFrameWork__ms_bSecondStart;

//----- (0046FEE0) --------------------------------------------------------
void __thiscall AccountFrameWork::Terminate(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  NiAudioSource *v2; // ecx@1
  NiAudioSource *v3; // ecx@2
  NiTimeController *v4; // ecx@5
  KeyMap *v5; // edi@7

  v1 = this;
  v2 = this->m_pkAccountAnotherBGM;
  if ( v2 )
  {
    ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)();
    NiObjectNET::RemoveAllControllers(&v1->m_pkAccountAnotherBGM->baseclass_0.baseclass_0);
    NiObjectNET::RemoveAllExtraData(&v1->m_pkAccountAnotherBGM->baseclass_0.baseclass_0);
    v3 = v1->m_pkAccountAnotherBGM;
    if ( v3 )
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
    v1->m_pkAccountAnotherBGM = 0;
  }
  v4 = v1->m_pkTimeController;
  if ( v4 )
  {
    ((void (*)(void))v4->baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)();
    v1->m_pkTimeController = 0;
  }
  AccountFrameWork::ReleaseShadow(v1);
  AccountFrameWork::TerminateBackgroundScene(v1);
  v5 = v1->m_spKeyMap.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spKeyMap.m_pObject = 0;
  }
  AccountFrameWork::TerminateWindow(v1);
  AccountFrameWork::TerminateNet(v1);
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.m_BackFrameID = 0;
}

//----- (0046FF90) --------------------------------------------------------
NiSourceTexture *__cdecl PgUtil::LoadSourceTexture(const char *pcFileName)
{
  NiSourceTexture *result; // eax@2
  NiImageConverter *v2; // eax@3
  NiPixelData *v3; // eax@3
  NiTexture::FormatPrefs kPrefs; // [sp+4h] [bp-Ch]@4

  if ( pcFileName
    && (v2 = NiImageConverter::GetImageConverter(),
        (v3 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, const char *, _DWORD))v2->baseclass_0.vfptr[2].__vecDelDtor)(
                               v2,
                               pcFileName,
                               0)) != 0) )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    result = NiSourceTexture::Create(v3, &kPrefs);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0046FFF0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::AddNodeTail(NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, NiTListItem<PgWin *> *pkNode)
{
  NiTListItem<PgWin *> *v2; // edx@1

  pkNode->m_pkNext = 0;
  pkNode->m_pkPrev = this->m_pkTail;
  v2 = this->m_pkTail;
  if ( v2 )
  {
    v2->m_pkNext = pkNode;
    ++*(_DWORD *)&this->m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    this->m_pkTail = pkNode;
  }
  else
  {
    ++*(_DWORD *)&this->m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    this->m_pkHead = pkNode;
    this->m_pkTail = pkNode;
  }
}

//----- (00470040) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_CONNECTCUT_CMD(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = iRevBytes;
  if ( *(_WORD *)pvData == 1667 )
    g_kServer.m_bDoubleConnected = 1;
  return result;
}

//----- (00470060) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_WORLD_STATUS_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  AccountFrameWork *v3; // esi@1

  v3 = this;
  Server::SetWorldMgrAddr(&g_kServer, (PROTO_NC_USER_LOGIN_ACK *)pvData);
  if ( (unsigned __int8)((int (*)(void))v3->m_pkWorldSelectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    WorldSelectWin::UpdateServerList(v3->m_pkWorldSelectWin);
  return iRevBytes;
}

//----- (004700A0) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_XTRAP_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (004700B0) --------------------------------------------------------
void __thiscall AccountFrameWork::NcUserLoginCpReq(AccountFrameWork *this, char *acCpKey)
{
  AccountFrameWork *v2; // edi@1
  PgNet *v3; // ecx@1
  unsigned int v4; // eax@1
  PgNet *v5; // ecx@1
  int v6; // esi@1
  PROTO_NC_USER_LOGIN_NETMARBLE_REQ kProto; // [sp+Ch] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spLoginNet.m_pObject;
  netcmd.protocol = 3101;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = strlen(acCpKey);
  v5 = (PgNet *)v2->m_spLoginNet.m_pObject;
  v6 = v4 + 1;
  kProto.CPCookieLength = v4 + 1;
  PgNet::AddNetMsg(v5, &kProto, 2);
  PgNet::SendNetMsg(&v2->m_spLoginNet.m_pObject->baseclass_0, acCpKey, v6);
}

//----- (00470120) --------------------------------------------------------
void __thiscall AccountFrameWork::NcUserXtrapReq(AccountFrameWork *this, char *acXTrapKey)
{
  AccountFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  unsigned int v4; // eax@1
  PgNet *v5; // ecx@1
  int v6; // ebx@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-8h]@1
  PROTO_NC_USER_XTRAP_REQ kProto; // [sp+13h] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spLoginNet.m_pObject;
  netcmd.protocol = 3076;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = strlen(acXTrapKey);
  v5 = (PgNet *)v2->m_spLoginNet.m_pObject;
  v6 = v4 + 1;
  kProto.XTrapClientKeyLength = v4 + 1;
  PgNet::AddNetMsg(v5, &kProto, 1);
  PgNet::SendNetMsg(&v2->m_spLoginNet.m_pObject->baseclass_0, acXTrapKey, v6);
}

//----- (00470180) --------------------------------------------------------
void __thiscall AccountFrameWork::NcUserWorldSelectReq(AccountFrameWork *this, unsigned int uiIndex)
{
  AccountFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@2
  int v5; // esi@2
  int v6; // eax@2
  NETCOMMAND netcmd; // [sp+4h] [bp-8Ch]@2
  PROTO_NC_USER_WORLDSELECT_REQ kProto; // [sp+Bh] [bp-85h]@2
  char kServerName[128]; // [sp+Ch] [bp-84h]@2
  unsigned int v10; // [sp+8Ch] [bp-4h]@1
  int v11; // [sp+90h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spLoginNet.m_pObject;
  if ( v3 )
  {
    netcmd.protocol = 3083;
    PgNet::AddNetMsg(v3, &netcmd, 2);
    v4 = (PgNet *)v2->m_spLoginNet.m_pObject;
    kProto.worldno = uiIndex;
    PgNet::SendNetMsg(v4, &kProto, 1);
    Server::GetWorldName(&g_kServer, uiIndex, g_kUserLoginLogForXTrap);
    Server::GetWorldName(&g_kServer, uiIndex, g_kServer.kServerName);
    Server::GetWorldName(&g_kServer, uiIndex, kServerName);
    v5 = BT_OpenLogFile("ConnectWorldInfo.txt", 2);
    BT_SetLogFlags(v5, 2);
    v6 = BT_GetLogFileName(v5);
    BT_AddLogFile(v6);
    BT_ClearLog(v5);
    _BT_AppLogEntryF(v5, 4, "WorldName [ %s ]", kServerName);
    BT_CloseLogFile(v5);
  }
}
// 976014: using guessed type int __stdcall BT_CloseLogFile(_DWORD);
// 976018: using guessed type int _BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...);
// 97601C: using guessed type int __stdcall BT_ClearLog(_DWORD);
// 976020: using guessed type int __stdcall BT_AddLogFile(_DWORD);
// 976024: using guessed type int __stdcall BT_GetLogFileName(_DWORD);
// 976028: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD);
// 97602C: using guessed type int __stdcall BT_OpenLogFile(_DWORD, _DWORD);
// A85C00: using guessed type int __security_cookie;

//----- (00470270) --------------------------------------------------------
void __thiscall AccountFrameWork::NcUserWorldStatusReq(AccountFrameWork *this)
{
  PgNet *v1; // ecx@1
  AccountFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spLoginNet.m_pObject;
  if ( v1 )
  {
    LOWORD(netcmd) = 3099;
    PgNet::SendNetMsg(v1, &netcmd, 2);
  }
}

//----- (004702A0) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_LOGIN_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  AccountFrameWork *v3; // esi@1
  PgWin *v4; // esi@4

  v3 = this;
  Server::SetWorldMgrAddr(&g_kServer, (PROTO_NC_USER_LOGIN_ACK *)pvData);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkAccountWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkWorldSelectWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v3->m_pkSignUpWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkSignUpWin->baseclass_0.baseclass_0.baseclass_0);
  if ( GameFrameWork::ms_bFirstRun == 1 )
  {
    v4 = (PgWin *)v3->m_pkSpawnAppsWin;
    if ( v4 )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
    GameFrameWork::ms_bFirstRun = 0;
  }
  return iRevBytes;
}
// A987CD: using guessed type bool GameFrameWork__ms_bFirstRun;

//----- (00470310) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_LOGINFAIL_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  AccountFrameWork *v3; // esi@1
  char *v4; // eax@1
  MsgBox *v5; // ecx@1
  PgMsg::Frame *v7; // [sp-8h] [bp-38h]@2
  PgMsg::Frame *v8; // [sp-4h] [bp-34h]@2
  PgMsg::Frame kCancelMsg; // [sp+4h] [bp-2Ch]@2
  PgMsg::Frame kMsg; // [sp+18h] [bp-18h]@2
  unsigned int v11; // [sp+2Ch] [bp-4h]@1
  int v12; // [sp+30h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
  v5 = MsgBox::Modal(MSGBOX_OK, v4);
  if ( g_kServer.m_bCP )
  {
    kMsg.m_uiFrameMsg = 14;
    kCancelMsg.m_uiFrameMsg = 14;
    v8 = &kCancelMsg;
    v7 = &kMsg;
  }
  else
  {
    v8 = 0;
    kMsg.m_uiFrameMsg = 20;
    v7 = &kMsg;
  }
  MsgBox::SetFrameWorkMsgOnClose(v5, &v3->baseclass_0, v7, v8);
  PgNet::Close(&v3->m_spLoginNet.m_pObject->baseclass_0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (00470390) --------------------------------------------------------
void __thiscall AccountFrameWork::NcUserLoginReq(AccountFrameWork *this, char byLoginType)
{
  AccountFrameWork *v2; // esi@1
  PgFrameWork *v3; // eax@2
  PgFrameWork *v4; // edi@2
  int v5; // edx@4
  int v6; // eax@4
  int v7; // ecx@4
  int v8; // edx@4
  int v9; // eax@4
  int v10; // ecx@4
  int v11; // eax@4
  PgNet *v12; // ecx@4
  PgNet *v13; // ecx@6
  char *v14; // eax@6
  PgNet *v15; // ecx@8
  int v16; // eax@8
  char v17; // cl@9
  NETCOMMAND netcmd; // [sp+8h] [bp-60h]@4
  __int64 pdata; // [sp+Ch] [bp-5Ch]@6
  int v20; // [sp+14h] [bp-54h]@6
  int v21; // [sp+18h] [bp-50h]@6
  __int16 v22; // [sp+1Ch] [bp-4Ch]@6
  int v23; // [sp+1Eh] [bp-4Ah]@6
  int v24; // [sp+22h] [bp-46h]@6
  int v25; // [sp+26h] [bp-42h]@6
  int v26; // [sp+2Ah] [bp-3Eh]@6
  __int64 v27; // [sp+2Eh] [bp-3Ah]@6
  int v28; // [sp+36h] [bp-32h]@6
  int v29; // [sp+3Ah] [bp-2Eh]@6
  int v30; // [sp+3Eh] [bp-2Ah]@6
  Name5 AppName; // [sp+44h] [bp-24h]@4
  int v32; // [sp+58h] [bp-10h]@4
  int v33; // [sp+5Ch] [bp-Ch]@4
  int v34; // [sp+60h] [bp-8h]@4
  unsigned int v35; // [sp+64h] [bp-4h]@1
  int v36; // [sp+68h] [bp+0h]@1

  v35 = (unsigned int)&v36 ^ __security_cookie;
  v2 = this;
  if ( this->m_spLoginNet.m_pObject )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = v3;
    if ( v3 && LOBYTE(v3[64].m_kMsgQ.m_uiAlloced) )
    {
      netcmd.protocol = 3127;
      PgNet::AddNetMsg(&v2->m_spLoginNet.m_pObject->baseclass_0, &netcmd, 2);
      v5 = *(_DWORD *)&v2->m_OTP.n8_name[8];
      v6 = *(_DWORD *)&v2->m_OTP.n8_name[0];
      *(_DWORD *)&AppName.n5_name[4] = *(_DWORD *)&v2->m_OTP.n8_name[4];
      v7 = *(_DWORD *)&v2->m_OTP.n8_name[16];
      *(_DWORD *)&AppName.n5_name[8] = v5;
      v8 = *(_DWORD *)&v2->m_OTP.n8_name[20];
      *(_DWORD *)&AppName.n5_name[0] = v6;
      v9 = *(_DWORD *)&v2->m_OTP.n8_name[12];
      *(_DWORD *)&AppName.n5_name[16] = v7;
      v10 = *(_DWORD *)&v2->m_OTP.n8_name[28];
      v32 = v8;
      *(_DWORD *)&AppName.n5_name[12] = v9;
      v11 = *(_DWORD *)&v2->m_OTP.n8_name[24];
      v34 = v10;
      v12 = (PgNet *)v2->m_spLoginNet.m_pObject;
      v33 = v11;
      PgNet::SendNetMsg(v12, &AppName, 32);
      LOBYTE(v4[64].m_kMsgQ.m_uiAlloced) = 0;
    }
    else
    {
      if ( !g_kServer.m_bGameAngelLogin )
      {
        v13 = (PgNet *)v2->m_spLoginNet.m_pObject;
        netcmd.protocol = 3128;
        PgNet::AddNetMsg(v13, &netcmd, 2);
        v26 = 0;
        v25 = 0;
        v24 = 0;
        v23 = 0;
        v30 = 0;
        v29 = 0;
        v28 = 0;
        v27 = 0i64;
        v21 = 0;
        v20 = 0;
        pdata = 0i64;
        v22 = 0;
        strncpy((char *)&pdata, g_kUser.m_acUserID, 0x12u);
        v26 = 0;
        v25 = 0;
        v24 = 0;
        v23 = 0;
        strncpy((char *)&v23, source, 0x10u);
        v14 = *(char **)&GameFrameWork::ms_strLauncher;
        if ( GameFrameWork::ms_strLauncher.baseclass_0._Myres < 0x10 )
          v14 = (char *)&GameFrameWork::ms_strLauncher;
        v34 = 0;
        v33 = 0;
        v32 = 0;
        *(_QWORD *)&AppName.n5_name[12] = 0i64;
        strncpy(&AppName.n5_name[12], v14, 0x14u);
        v28 = v32;
        v27 = *(_QWORD *)&AppName.n5_name[12];
        v30 = v34;
        v15 = (PgNet *)v2->m_spLoginNet.m_pObject;
        v29 = v33;
        PgNet::SendNetMsg(v15, &pdata, 54);
        *(_QWORD *)&AppName.n5_name[12] = pdata;
        v33 = v21;
        v32 = v20;
        LOWORD(v34) = v22;
        BYTE2(v34) = 0;
        v16 = 0;
        do
        {
          v17 = AppName.n5_name[v16 + 12];
          byte_B31FB8[v16++] = v17;
        }
        while ( v17 );
        dword_B31FD8 = dword_98920C;
        dword_B31FDC = (int)off_989210;
        dword_B31FF8 = dword_989214;
        dword_B31FFC = (int)off_989218;
        *(_DWORD *)g_kUserLoginLogForXTrap = dword_98921C;
        dword_B31F9C = (int)off_989220;
        dword_B32018 = 0;
      }
      *(_DWORD *)source = 0;
      dword_AA2D77 = 0;
      dword_AA2D7B = 0;
      dword_AA2D7F = 0;
      byte_AA2D83 = 0;
    }
  }
}
// 98920C: using guessed type int dword_98920C;
// 989210: using guessed type int (__cdecl *off_989210)(int result, int _Val1, int _Val2);
// 989214: using guessed type int dword_989214;
// 989218: using guessed type int (__cdecl *off_989218)(int result, int _Val1, int _Val2);
// 98921C: using guessed type int dword_98921C;
// 989220: using guessed type int (__cdecl *off_989220)(int result, int _Val1, int _Val2);
// A85C00: using guessed type int __security_cookie;
// AA2D77: using guessed type int dword_AA2D77;
// AA2D7B: using guessed type int dword_AA2D7B;
// AA2D7F: using guessed type int dword_AA2D7F;
// AA2D83: using guessed type char byte_AA2D83;
// B31F9C: using guessed type int dword_B31F9C;
// B31FD8: using guessed type int dword_B31FD8;
// B31FDC: using guessed type int dword_B31FDC;
// B31FF8: using guessed type int dword_B31FF8;
// B31FFC: using guessed type int dword_B31FFC;
// B32018: using guessed type int dword_B32018;

//----- (004705D0) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_CLIENT_WRONGVERSION_CHECK_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1
  char *v4; // eax@1
  MsgBox *v5; // eax@1
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@1
  unsigned int v8; // [sp+18h] [bp-4h]@1
  int v9; // [sp+1Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v3 = (PgFrameWork *)this;
  v4 = TextData::Get(0x3E413758u);
  v5 = MsgBox::Modal(MSGBOX_OK, v4);
  kMsg.m_uiFrameMsg = 18;
  MsgBox::SetFrameWorkMsgOnClose(v5, v3, &kMsg, 0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (00470630) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_CLIENT_RIGHTVERSION_CHECK_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  AccountFrameWork *v3; // esi@1
  PgNet *v4; // ecx@5
  PgNet *v5; // ecx@5
  __int16 pdata; // [sp+0h] [bp-2090h]@5
  char v8; // [sp+7h] [bp-2089h]@5
  CPData kCpData; // [sp+8h] [bp-2088h]@2
  unsigned int v10; // [sp+208Ch] [bp-4h]@1
  int v11; // [sp+2090h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = this;
  if ( g_kServer.m_bCP && GetAnalyzeArgument(&kCpData) )
    AccountFrameWork::NcUserLoginCpReq(v3, kCpData.CpCookie);
  else
    AccountFrameWork::NcUserLoginReq(v3, 0);
  v4 = (PgNet *)v3->m_spLoginNet.m_pObject;
  pdata = 3076;
  PgNet::AddNetMsg(v4, &pdata, 2);
  v5 = (PgNet *)v3->m_spLoginNet.m_pObject;
  v8 = 29;
  PgNet::AddNetMsg(v5, &v8, 1);
  PgNet::SendNetMsg(&v3->m_spLoginNet.m_pObject->baseclass_0, "33B543B0CA6E7C41E5D1D0651307", 29);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004706E0) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_USER_WORLDSELECT_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  AccountFrameWork *v3; // edi@1
  char v4; // bl@1
  char *v5; // eax@1
  int v6; // eax@11
  int v7; // edx@11
  int v8; // eax@11
  PgNet *v9; // ecx@11
  char acAddr[17]; // [sp+Ch] [bp-18h]@11
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = this;
  v4 = 0;
  v5 = 0;
  switch ( *(_BYTE *)pvData )
  {
    case 0:
      v5 = TextData::Get(0x283D4D3Au);
      break;
    case 1:
      v5 = TextData::Get(0x29878F92u);
      break;
    case 2:
      v5 = TextData::Get(0xF04A3156u);
      break;
    case 3:
      v5 = TextData::Get(0x687C9E69u);
      break;
    case 4:
      v5 = TextData::Get(0xE2E3F21Au);
      break;
    case 5:
      v5 = TextData::Get(0x3382D26u);
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v4 = 1;
      break;
    default:
      break;
  }
  v3->m_bDuringWorldSelect = 0;
  if ( v4 )
  {
    v6 = *(_DWORD *)((char *)pvData + 1);
    v7 = *(_DWORD *)((char *)pvData + 9);
    *(_DWORD *)&acAddr[4] = *(_DWORD *)((char *)pvData + 5);
    *(_DWORD *)acAddr = v6;
    v8 = *(_DWORD *)((char *)pvData + 13);
    v9 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
    *(_DWORD *)&acAddr[8] = v7;
    *(_DWORD *)&acAddr[12] = v8;
    acAddr[16] = 0;
    PgNet::SetAddress(v9, acAddr);
    PgNet::SetPortA(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, *(_WORD *)((char *)pvData + 17));
    User::SetValidata_new(&g_kUser, (unsigned __int16 *)((char *)pvData + 19));
    OutputDebugStringA("server_ack\n");
    PgNet::Close(&v3->m_spLoginNet.m_pObject->baseclass_0);
    PgNet::Close(&v3->m_spWorldMgrNet.m_pObject->baseclass_0);
    PgFrameWork::PostFrameMsgStart(&v3->baseclass_0, LoginWorldNetFrameWorkID, 0);
  }
  else
  {
    MsgBox::Modal(MSGBOX_OK, v5);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (00470830) --------------------------------------------------------
void __thiscall AccountFrameWork::NcUserVersionReq(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@2
  char *v4; // edx@4
  char v5; // cl@5
  NETCOMMAND netcmd; // [sp+4h] [bp-64h]@2
  PROTO_NC_USER_CLIENT_VERSION_CHECK_REQ kProto; // [sp+8h] [bp-60h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+48h] [bp-20h]@2
  unsigned int v9; // [sp+64h] [bp-4h]@1
  int v10; // [sp+68h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  v2 = (PgNet *)this->m_spLoginNet.m_pObject;
  if ( v2 )
  {
    netcmd.protocol = 3173;
    PgNet::AddNetMsg(v2, &netcmd, 2);
    v3 = ClientVersionKeyInfo::getVersionKey(&result);
    if ( v3->baseclass_0._Myres >= 0x10 )
      v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
    v4 = (char *)((char *)&kProto - (char *)v3);
    do
    {
      v5 = v3->baseclass_0.___u0.baseclass_0.dummy[0];
      v3->baseclass_0.___u0.baseclass_0.dummy[(_DWORD)v4] = v3->baseclass_0.___u0.baseclass_0.dummy[0];
      v3 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 1);
    }
    while ( v5 );
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
    PgNet::SendNetMsg(&v1->m_spLoginNet.m_pObject->baseclass_0, &kProto, 64);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004708B0) --------------------------------------------------------
int __thiscall AccountFrameWork::On_NC_MISC_SEED_ACK(AccountFrameWork *this, int iRevBytes, void *pvData)
{
  AccountFrameWork *v3; // esi@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->m_spLoginNet.m_pObject->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(*(_WORD *)pvData);
  AccountFrameWork::NcUserVersionReq(v3);
  return iRevBytes;
}

//----- (004708E0) --------------------------------------------------------
int __thiscall AccountFrameWork::ProcessNetMsg(AccountFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  AccountFrameWork *v5; // esi@1
  int result; // eax@1

  v5 = this;
  result = 0;
  switch ( iDepart )
  {
    case 2:
      if ( iCommand == 7 )
      {
        ((void (__stdcall *)(_DWORD))this->m_spLoginNet.m_pObject->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(*(_WORD *)pvData);
        AccountFrameWork::NcUserVersionReq(v5);
$LN36_2:
        result = iRevBytes;
      }
      break;
    case 3:
      switch ( iCommand )
      {
        case 23:
          result = AccountFrameWork::On_NC_USER_CONNECTCUT_CMD(this, iRevBytes, pvData);
          break;
        case 102:
          result = AccountFrameWork::On_NC_USER_CLIENT_WRONGVERSION_CHECK_ACK(this, iRevBytes, pvData);
          break;
        case 103:
          result = AccountFrameWork::On_NC_USER_CLIENT_RIGHTVERSION_CHECK_ACK(this, iRevBytes, pvData);
          break;
        case 10:
          result = AccountFrameWork::On_NC_USER_LOGIN_ACK(this, iRevBytes, pvData);
          break;
        case 9:
          result = AccountFrameWork::On_NC_USER_LOGINFAIL_ACK(this, iRevBytes, pvData);
          break;
        case 12:
          result = AccountFrameWork::On_NC_USER_WORLDSELECT_ACK(this, iRevBytes, pvData);
          break;
        case 28:
          result = AccountFrameWork::On_NC_USER_WORLD_STATUS_ACK(this, iRevBytes, pvData);
          break;
        case 5:
          goto $LN36_2;
        default:
          return result;
      }
      break;
    case 8:
      if ( iCommand == 17 )
        result = iRevBytes;
      break;
  }
  return result;
}

//----- (00470A70) --------------------------------------------------------
void __thiscall std::locale::facet::_Incref(std::locale::facet *this)
{
  std::locale::facet *v1; // esi@1
  unsigned int v2; // eax@1
  std::_Lockit _Lock; // [sp+4h] [bp-4h]@1

  v1 = this;
  std::_Lockit::_Lockit(&_Lock, 0);
  v2 = v1->_Refs;
  if ( v2 < 0xFFFFFFFF )
    v1->_Refs = v2 + 1;
  std::_Lockit::__Lockit(&_Lock);
}

//----- (00470AA0) --------------------------------------------------------
std::locale::facet *__thiscall std::locale::facet::_Decref(std::locale::facet *this)
{
  std::locale::facet *v1; // edi@1
  unsigned int v2; // eax@1
  std::locale::facet *v3; // esi@4
  std::_Lockit _Lock; // [sp+8h] [bp-4h]@1

  v1 = this;
  std::_Lockit::_Lockit(&_Lock, 0);
  v2 = v1->_Refs;
  if ( v2 && v2 < 0xFFFFFFFF )
    v1->_Refs = v2 - 1;
  v3 = (std::locale::facet *)(v1->_Refs == 0 ? (int)v1 : 0);
  std::_Lockit::__Lockit(&_Lock);
  return v3;
}

//----- (00470AE0) --------------------------------------------------------
void __thiscall std::locale::facet::_facet(std::locale::facet *this)
{
  this->vfptr = (std::locale::facetVtbl *)&std::locale::facet::_vftable_;
}
// 98928C: using guessed type int (__thiscall *std__locale__facet___vftable_)(void *p, char);

//----- (00470AF0) --------------------------------------------------------
void __thiscall std::locale::_locale(std::locale *this)
{
  int v1; // edi@1
  unsigned int v2; // eax@2
  int v3; // esi@5
  int v4; // esi@5
  std::_Lockit thisa; // [sp+4h] [bp-4h]@2

  v1 = *(_DWORD *)&this->___u0.baseclass_0.dummy[0];
  if ( *(_DWORD *)&this->___u0.baseclass_0.dummy[0] )
  {
    std::_Lockit::_Lockit(&thisa, 0);
    v2 = *(_DWORD *)(v1 + 4);
    if ( v2 && v2 < 0xFFFFFFFF )
      *(_DWORD *)(v1 + 4) = v2 - 1;
    v3 = -(*(_DWORD *)(v1 + 4) == 0);
    std::_Lockit::__Lockit(&thisa);
    v4 = v1 & v3;
    if ( v4 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
  }
}

//----- (00470B40) --------------------------------------------------------
std::locale *__thiscall std::ios_base::getloc(std::ios_base *this, std::locale *result)
{
  std::locale v2; // esi@1
  std::locale *v3; // edi@1
  unsigned int v4; // eax@1

  v2 = *this->_Ploc;
  v3 = result;
  *(_DWORD *)&result->___u0.baseclass_0.dummy[0] = v2;
  std::_Lockit::_Lockit((std::_Lockit *)&result, 0);
  v4 = *(_DWORD *)(*(_DWORD *)&v2 + 4);
  if ( v4 < 0xFFFFFFFF )
    *(_DWORD *)(*(_DWORD *)&v2 + 4) = v4 + 1;
  std::_Lockit::__Lockit((std::_Lockit *)&result);
  return v3;
}

//----- (00470B80) --------------------------------------------------------
void *__thiscall std::basic_ios<char_std::char_traits<char>>::_scalar_deleting_destructor_(std::basic_ios<char,std::char_traits<char> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (std::ios_baseVtbl *)&std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);

//----- (00470BB0) --------------------------------------------------------
void __thiscall Name8::Name8(Name8 *this)
{
  *(_QWORD *)&this->n8_name[24] = 0i64;
  *(_QWORD *)&this->n8_name[16] = 0i64;
  *(_QWORD *)&this->n8_name[8] = 0i64;
  *(_QWORD *)&this->n8_name[0] = 0i64;
}

//----- (00470BD0) --------------------------------------------------------
void __thiscall std::basic_ios<char_std::char_traits<char>>::_basic_ios<char_std::char_traits<char>>(std::basic_ios<char,std::char_traits<char> > *this)
{
  this->baseclass_0.vfptr = (std::ios_baseVtbl *)&std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor(&this->baseclass_0);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);

//----- (00470BE0) --------------------------------------------------------
void __thiscall std::basic_istream<char_std::char_traits<char>>::_basic_istream<char_std::char_traits<char>>(std::basic_istream<char,std::char_traits<char> > *this)
{
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 4) + 4) - 16) = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
}
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);

//----- (00470BF0) --------------------------------------------------------
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Gnavail(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  __int64 result; // qax@2

  if ( *this->_IGnext )
    result = *this->_IGcount;
  else
    result = 0i64;
  return result;
}

//----- (00470C10) --------------------------------------------------------
bool __thiscall Server::GetWorldName(Server *this, char ucIndex, char *pcWorldName)
{
  unsigned int v3; // esi@1
  signed int v4; // eax@1
  FiestaServerList::ServerInfo *v5; // edi@2
  int v6; // ecx@2
  int v7; // eax@6
  int v8; // ecx@6
  int v9; // eax@6
  int v10; // ecx@6
  int v11; // eax@6
  char v12; // cl@7
  char acName[17]; // [sp+4h] [bp-18h]@6
  unsigned int v15; // [sp+18h] [bp-4h]@1
  int v16; // [sp+1Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = this->m_kFiestaServerList.m_uiTotalWorld;
  v4 = 0;
  if ( (signed int)v3 > 0 )
  {
    v5 = this->m_kFiestaServerList.pkServerInfo;
    v6 = (int)&v5->kWorldNo;
    while ( *(_BYTE *)v6 != ucIndex )
    {
      ++v4;
      v6 += 18;
      if ( v4 >= (signed int)v3 )
        return 1;
    }
    v7 = 9 * v4;
    v8 = *(_DWORD *)&v5[2 * v7 / 0x12u].kWorldName.n4_name[0];
    v9 = (int)&v5[2 * v7 / 0x12u];
    *(_DWORD *)acName = v8;
    *(_DWORD *)&acName[4] = *(_DWORD *)(v9 + 4);
    v10 = *(_DWORD *)(v9 + 8);
    *(_DWORD *)&acName[12] = *(_DWORD *)(v9 + 12);
    v11 = (int)acName;
    *(_DWORD *)&acName[8] = v10;
    acName[16] = 0;
    do
    {
      v12 = *(_BYTE *)v11;
      *(_BYTE *)(pcWorldName - acName + v11) = *(_BYTE *)v11;
      ++v11;
    }
    while ( v12 );
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00470CA0) --------------------------------------------------------
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Reset_back(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  char **v1; // edx@1
  char *v2; // eax@2

  v1 = this->baseclass_0._IGfirst;
  if ( *v1 == &this->_Mychar )
  {
    v2 = this->_Set_egptr;
    *v1 = this->_Set_eback;
    *this->baseclass_0._IGnext = v2;
    *this->baseclass_0._IGcount = 0;
  }
}

//----- (00470CD0) --------------------------------------------------------
std::locale *__thiscall std::basic_streambuf<char_std::char_traits<char>>::getloc(std::basic_streambuf<char,std::char_traits<char> > *this, std::locale *result)
{
  std::locale v2; // esi@1
  std::locale *v3; // edi@1
  unsigned int v4; // eax@1

  v2 = *this->_Plocale;
  v3 = result;
  *(_DWORD *)&result->___u0.baseclass_0.dummy[0] = v2;
  std::_Lockit::_Lockit((std::_Lockit *)&result, 0);
  v4 = *(_DWORD *)(*(_DWORD *)&v2 + 4);
  if ( v4 < 0xFFFFFFFF )
    *(_DWORD *)(*(_DWORD *)&v2 + 4) = v4 + 1;
  std::_Lockit::__Lockit((std::_Lockit *)&result);
  return v3;
}

//----- (00470D10) --------------------------------------------------------
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Init(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  this->_IGnext = &this->_Gnext;
  this->_IPnext = &this->_Pnext;
  this->_IGfirst = &this->_Gfirst;
  this->_IGcount = &this->_Gcount;
  this->_IPfirst = &this->_Pfirst;
  this->_IPcount = &this->_Pcount;
  this->_Pfirst = 0;
  *this->_IPnext = 0;
  *this->_IPcount = 0;
  *this->_IGfirst = 0;
  *this->_IGnext = 0;
  *this->_IGcount = 0;
}

//----- (00470D70) --------------------------------------------------------
int __thiscall std::codecvt<char_char_int>::do_out(std::codecvt<char,char,int> *this, int *__formal, const char *_First1, const char *a4, const char **_Mid1, char *_First2, char *a7, char **_Mid2)
{
  *_Mid1 = _First1;
  *_Mid2 = _First2;
  return 3;
}

//----- (00470D90) --------------------------------------------------------
int __thiscall std::codecvt<char_char_int>::do_unshift(std::codecvt<char,char,int> *this, int *__formal, char *_First2, char *a4, char **_Mid2)
{
  *_Mid2 = _First2;
  return 3;
}

//----- (00470DB0) --------------------------------------------------------
int __thiscall std::codecvt<char_char_int>::do_length(std::codecvt<char,char,int> *this, const int *__formal, const char *_First1, const char *_Last1, unsigned int _Count)
{
  int result; // eax@1

  result = _Last1 - _First1;
  if ( _Count < _Last1 - _First1 )
    result = _Count;
  return result;
}

//----- (00470DD0) --------------------------------------------------------
char __thiscall std::ctype<char>::do_tolower(std::ctype<char> *this, char _Ch)
{
  return _Tolower((unsigned __int8)_Ch, &this->_Ctype);
}

//----- (00470DF0) --------------------------------------------------------
const char *__thiscall std::ctype<char>::do_tolower(std::ctype<char> *this, char *_First, const char *_Last)
{
  int *v3; // esi@1
  _Ctypevec *v4; // edi@2

  v3 = (int *)_First;
  if ( _First != _Last )
  {
    v4 = &this->_Ctype;
    do
    {
      *(_BYTE *)v3 = _Tolower(*(_BYTE *)v3, v4);
      v3 = (int *)((char *)v3 + 1);
    }
    while ( (const char *)v3 != _Last );
  }
  return (const char *)v3;
}

//----- (00470E20) --------------------------------------------------------
char __thiscall std::ctype<char>::do_toupper(std::ctype<char> *this, char _Ch)
{
  return _Toupper((unsigned __int8)_Ch, &this->_Ctype);
}

//----- (00470E40) --------------------------------------------------------
const char *__thiscall std::ctype<char>::do_toupper(std::ctype<char> *this, char *_First, const char *_Last)
{
  int *v3; // esi@1
  _Ctypevec *v4; // edi@2

  v3 = (int *)_First;
  if ( _First != _Last )
  {
    v4 = &this->_Ctype;
    do
    {
      *(_BYTE *)v3 = _Toupper(*(_BYTE *)v3, v4);
      v3 = (int *)((char *)v3 + 1);
    }
    while ( (const char *)v3 != _Last );
  }
  return (const char *)v3;
}

//----- (00470E70) --------------------------------------------------------
char __thiscall std::ctype<char>::do_widen(std::ctype<char> *this, char _Byte)
{
  return _Byte;
}

//----- (00470E80) --------------------------------------------------------
const char *__thiscall std::ctype<char>::do_widen(std::ctype<char> *this, const char *_First, const char *_Last, char *_Dest)
{
  memcpy(_Dest, (char *)_First, _Last - _First);
  return _Last;
}

//----- (00470EB0) --------------------------------------------------------
char __thiscall std::ctype<char>::do_narrow(std::ctype<char> *this, char _Ch, char __formal)
{
  return _Ch;
}

//----- (00470EC0) --------------------------------------------------------
const char *__thiscall std::ctype<char>::do_narrow(std::ctype<char> *this, const char *_First, const char *_Last, char __formal, char *_Dest)
{
  memcpy(_Dest, (char *)_First, _Last - _First);
  return _Last;
}

//----- (00470EF0) --------------------------------------------------------
void *__thiscall std::ctype<char>::_vector_deleting_destructor_(std::ctype<char> *this, unsigned int a2)
{
  std::ctype<char> *v2; // esi@1
  int v3; // eax@1

  v2 = this;
  v3 = this->_Ctype._Delfl;
  this->baseclass_0.baseclass_0.vfptr = (std::locale::facetVtbl *)&std::ctype<char>::_vftable_;
  if ( v3 <= 0 )
  {
    if ( v3 < 0 )
      operator delete__((void *)this->_Ctype._Table);
  }
  else
  {
    free((void *)this->_Ctype._Table);
  }
  v2->baseclass_0.baseclass_0.vfptr = (std::locale::facetVtbl *)&std::locale::facet::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98928C: using guessed type int (__thiscall *std__locale__facet___vftable_)(void *p, char);
// 9892D0: using guessed type int (__thiscall *std__ctype_char____vftable_)(void *p, char);

//----- (00470F50) --------------------------------------------------------
void __thiscall std::ios_base::clear(std::ios_base *this, int _State, bool _Reraise)
{
  int v3; // eax@1
  int v4; // ecx@1
  std::error_category *v5; // edi@5
  std::error_category *v6; // edi@8
  std::error_category *v7; // edi@10
  std::exception thisa; // [sp+0h] [bp-14h]@5
  int v9; // [sp+Ch] [bp-8h]@6
  std::error_category *v10; // [sp+10h] [bp-4h]@6

  v3 = _State & 0x17;
  this->_Mystate = v3;
  v4 = v3 & this->_Except;
  if ( v4 )
  {
    if ( _Reraise )
      _CxxThrowException(0, 0);
    if ( v4 & 4 )
    {
      v5 = std::iostream_category();
      *(_DWORD *)&_Reraise = "ios_base::badbit set";
      std::exception::exception(&thisa, (const char *const *)&_Reraise);
      v9 = 1;
      v10 = v5;
      thisa.vfptr = (std::exceptionVtbl *)&std::ios_base::failure::_vftable_;
      _CxxThrowException(&thisa, &_TI4_AVfailure_ios_base_std__);
    }
    if ( v4 & 2 )
    {
      v6 = std::iostream_category();
      *(_DWORD *)&_Reraise = "ios_base::failbit set";
      std::exception::exception(&thisa, (const char *const *)&_Reraise);
      v9 = 1;
      v10 = v6;
      thisa.vfptr = (std::exceptionVtbl *)&std::ios_base::failure::_vftable_;
      _CxxThrowException(&thisa, &_TI4_AVfailure_ios_base_std__);
    }
    v7 = std::iostream_category();
    *(_DWORD *)&_Reraise = "ios_base::eofbit set";
    std::exception::exception(&thisa, (const char *const *)&_Reraise);
    v9 = 1;
    v10 = v7;
    thisa.vfptr = (std::exceptionVtbl *)&std::ios_base::failure::_vftable_;
    _CxxThrowException(&thisa, &_TI4_AVfailure_ios_base_std__);
  }
}
// 989304: using guessed type int (__thiscall *std__ios_base__failure___vftable_)(void *p, char);

//----- (00471030) --------------------------------------------------------
void __thiscall std::runtime_error::runtime_error(std::runtime_error *this, std::runtime_error *__that)
{
  std::runtime_error *v2; // esi@1

  v2 = this;
  std::exception::exception(&this->baseclass_0, &__that->baseclass_0);
  v2->baseclass_0.vfptr = (std::exceptionVtbl *)&std::runtime_error::_vftable_;
}
// 989280: using guessed type int (__thiscall *std__runtime_error___vftable_)(void *p, char);

//----- (00471050) --------------------------------------------------------
void __thiscall std::system_error::system_error(std::system_error *this, std::system_error *__that)
{
  std::system_error *v2; // esi@1

  v2 = this;
  std::exception::exception(&this->baseclass_0.baseclass_0, &__that->baseclass_0.baseclass_0);
  v2->baseclass_0.baseclass_0.vfptr = (std::exceptionVtbl *)&std::system_error::_vftable_;
  v2->_Mycode._Myval = __that->_Mycode._Myval;
  v2->_Mycode._Mycat = __that->_Mycode._Mycat;
}
// 9892F8: using guessed type int (__thiscall *std__system_error___vftable_)(void *p, char);

//----- (00471080) --------------------------------------------------------
void __thiscall std::ios_base::_Init(std::ios_base *this)
{
  std::ios_base *v1; // esi@1
  void *v2; // ebx@1
  unsigned int v3; // eax@2
  std::_Lockit thisa; // [sp+Ch] [bp-8h]@2
  std::locale::_Locimp *v5; // [sp+10h] [bp-4h]@2

  v1 = this;
  this->_Ploc = 0;
  *(_DWORD *)&this->___u1.baseclass_8.dummy[0] = 0;
  this->_Except = 0;
  this->_Fmtfl = 513;
  this->_Prec = 6i64;
  this->_Wide = 0i64;
  this->_Arr = 0;
  this->_Calls = 0;
  std::ios_base::clear(this, 0, 0);
  v2 = operator new(4u);
  if ( v2 )
  {
    *(_DWORD *)v2 = std::locale::_Init();
    v5 = std::locale::_Getgloballocale();
    std::_Lockit::_Lockit(&thisa, 0);
    v3 = v5->baseclass_0._Refs;
    if ( v3 < 0xFFFFFFFF )
      v5->baseclass_0._Refs = v3 + 1;
    std::_Lockit::__Lockit(&thisa);
    v1->_Ploc = (std::locale *)v2;
  }
  else
  {
    v1->_Ploc = 0;
  }
}

//----- (00471110) --------------------------------------------------------
void __thiscall std::ios_base::failure::failure(std::ios_base::failure *this, std::ios_base::failure *__that)
{
  std::ios_base::failure *v2; // esi@1

  v2 = this;
  std::exception::exception(&this->baseclass_0.baseclass_0.baseclass_0, &__that->baseclass_0.baseclass_0.baseclass_0);
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr = (std::exceptionVtbl *)&std::system_error::_vftable_;
  v2->baseclass_0._Mycode._Myval = __that->baseclass_0._Mycode._Myval;
  v2->baseclass_0._Mycode._Mycat = __that->baseclass_0._Mycode._Mycat;
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr = (std::exceptionVtbl *)&std::ios_base::failure::_vftable_;
}
// 9892F8: using guessed type int (__thiscall *std__system_error___vftable_)(void *p, char);
// 989304: using guessed type int (__thiscall *std__ios_base__failure___vftable_)(void *p, char);

//----- (00471140) --------------------------------------------------------
void __thiscall std::basic_ostream<char_std::char_traits<char>>::_Sentry_base::__Sentry_base(std::basic_istream<char,std::char_traits<char> >::sentry *this)
{
  int v1; // eax@1

  v1 = *(_DWORD *)&this->baseclass_0._Myistr->gap10[*(_DWORD *)(*(_DWORD *)&this->baseclass_0._Myistr->gap0[0] + 4) + 40];
  if ( v1 )
    (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 8))(v1);
}

//----- (00471160) --------------------------------------------------------
void __thiscall std::_Yarn<char>::__Yarn<char>(std::_Yarn<char> *this)
{
  std::_Yarn<char> *v1; // esi@1

  v1 = this;
  if ( this->_Myptr )
    free(this->_Myptr);
  v1->_Myptr = 0;
}

//----- (00471180) --------------------------------------------------------
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  std::basic_streambuf<char,std::char_traits<char> > *v1; // esi@1
  std::locale *v2; // ebx@1
  int v3; // edi@2
  unsigned int v4; // eax@3
  int v5; // esi@6
  int v6; // esi@6
  std::_Lockit thisa; // [sp+8h] [bp-8h]@3
  std::basic_streambuf<char,std::char_traits<char> > *v8; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = this->_Plocale;
  v8 = this;
  this->vfptr = (std::basic_streambuf<char,std::char_traits<char> >Vtbl *)&std::basic_streambuf<char_std::char_traits<char>>::_vftable_;
  if ( v2 )
  {
    v3 = *(_DWORD *)&v2->___u0.baseclass_0.dummy[0];
    if ( *(_DWORD *)&v2->___u0.baseclass_0.dummy[0] )
    {
      std::_Lockit::_Lockit(&thisa, 0);
      v4 = *(_DWORD *)(v3 + 4);
      if ( v4 && v4 < 0xFFFFFFFF )
        *(_DWORD *)(v3 + 4) = v4 - 1;
      v5 = -(*(_DWORD *)(v3 + 4) == 0);
      std::_Lockit::__Lockit(&thisa);
      v6 = v3 & v5;
      if ( v6 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      v1 = v8;
    }
    operator delete(v2);
  }
  std::_Mutex::__Mutex(&v1->_Mylock);
}
// 98935C: using guessed type int (__thiscall *std__basic_streambuf_char_std__char_traits_char_____vftable_)(void *p, char);

//----- (00471200) --------------------------------------------------------
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Lock(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  std::_Mutex::_Lock(&this->_Mylock);
}

//----- (00471210) --------------------------------------------------------
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Unlock(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  std::_Mutex::_Unlock(&this->_Mylock);
}

//----- (00471220) --------------------------------------------------------
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::overflow(std::basic_streambuf<char,std::char_traits<char> > *this, int __formal)
{
  return -1;
}

//----- (00471230) --------------------------------------------------------
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::showmanyc(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  return 0i64;
}

//----- (00471240) --------------------------------------------------------
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::underflow(NiBoundingVolume *this)
{
  return -1;
}

//----- (00471250) --------------------------------------------------------
std::basic_streambuf<char,std::char_traits<char> > *__thiscall std::basic_streambuf<char_std::char_traits<char>>::setbuf(std::basic_streambuf<char,std::char_traits<char> > *this, char *__formal, __int64 __formala)
{
  return this;
}

//----- (00471260) --------------------------------------------------------
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::_Pnavail(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  __int64 result; // qax@2

  if ( *this->_IPnext )
    result = *this->_IPcount;
  else
    result = 0i64;
  return result;
}

//----- (00471280) --------------------------------------------------------
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::uflow(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  std::basic_streambuf<char,std::char_traits<char> > *v1; // esi@1
  int result; // eax@1
  char **v3; // eax@2
  int *v4; // ecx@2

  v1 = this;
  result = ((int (*)(void))this->vfptr->underflow)();
  if ( result != -1 )
  {
    --*v1->_IGcount;
    v3 = v1->_IGnext;
    v4 = (int *)(*v3)++;
    result = *(_BYTE *)v4;
  }
  return result;
}

//----- (004712B0) --------------------------------------------------------
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::xsgetn(std::basic_streambuf<char,std::char_traits<char> > *this, char *_Ptr, __int64 _Count)
{
  std::basic_streambuf<char,std::char_traits<char> > *v3; // ebx@1
  __int64 v4; // qax@2
  unsigned int v5; // edi@2
  unsigned int v6; // esi@2
  int v7; // eax@8
  unsigned int v8; // kr04_4@9
  __int64 _Copied; // [sp+4h] [bp-8h]@1

  v3 = this;
  _Copied = 0i64;
  if ( _Count > 0 )
  {
    do
    {
      v4 = std::basic_streambuf<char_std::char_traits<char>>::_Gnavail(v3);
      v5 = HIDWORD(v4);
      v6 = v4;
      if ( SHIDWORD(v4) >= 0 && (SHIDWORD(v4) > 0 || (_DWORD)v4) )
      {
        if ( _Count < v4 )
        {
          v5 = HIDWORD(_Count);
          v6 = _Count;
        }
        memcpy(_Ptr, *v3->_IGnext, v6);
        _Ptr += v6;
        _Copied += __PAIR__(v5, v6);
        _Count -= __PAIR__(v5, v6);
        *v3->_IGcount -= v6;
        *v3->_IGnext += v6;
      }
      else
      {
        v7 = v3->vfptr->uflow(v3);
        if ( v7 == -1 )
          return _Copied;
        v8 = _Copied;
        LODWORD(_Copied) = _Copied + 1;
        *_Ptr++ = v7;
        HIDWORD(_Copied) = (__PAIR__(HIDWORD(_Copied), v8) + 1) >> 32;
        --_Count;
      }
    }
    while ( SHIDWORD(_Count) > 0 || SHIDWORD(_Count) >= 0 && (_DWORD)_Count );
  }
  return _Copied;
}

//----- (00471380) --------------------------------------------------------
__int64 __thiscall std::basic_streambuf<char_std::char_traits<char>>::xsputn(std::basic_streambuf<char,std::char_traits<char> > *this, const char *_Ptr, __int64 _Count)
{
  std::basic_streambuf<char,std::char_traits<char> > *v3; // ebx@1
  __int64 v4; // qax@2
  unsigned int v5; // edi@2
  unsigned int v6; // esi@2
  __int64 _Copied; // [sp+4h] [bp-8h]@1

  v3 = this;
  _Copied = 0i64;
  if ( _Count > 0 )
  {
    do
    {
      v4 = std::basic_streambuf<char_std::char_traits<char>>::_Pnavail(v3);
      v5 = HIDWORD(v4);
      v6 = v4;
      if ( SHIDWORD(v4) >= 0 && (SHIDWORD(v4) > 0 || (_DWORD)v4) )
      {
        if ( _Count < v4 )
        {
          v5 = HIDWORD(_Count);
          v6 = _Count;
        }
        memcpy(*v3->_IPnext, (char *)_Ptr, v6);
        _Ptr += v6;
        _Copied += __PAIR__(v5, v6);
        _Count -= __PAIR__(v5, v6);
        *v3->_IPcount -= v6;
        *v3->_IPnext += v6;
      }
      else
      {
        if ( v3->vfptr->overflow(v3, (unsigned __int8)*_Ptr) == -1 )
          return _Copied;
        ++_Ptr;
        ++_Copied;
        --_Count;
      }
    }
    while ( SHIDWORD(_Count) > 0 || SHIDWORD(_Count) >= 0 && (_DWORD)_Count );
  }
  return _Copied;
}

//----- (00471450) --------------------------------------------------------
std::fpos<int> *__thiscall std::basic_streambuf<char_std::char_traits<char>>::seekoff(std::basic_streambuf<char,std::char_traits<char> > *this, std::fpos<int> *result, __int64 __formal, int a4, int a5)
{
  std::fpos<int> *v5; // eax@1
  int v6; // edx@1

  v5 = result;
  v6 = dword_9DF6FC;
  LODWORD(result->_Myoff) = std::_BADOFF;
  HIDWORD(result->_Myoff) = v6;
  result->_Fpos = 0i64;
  result->_Mystate = 0;
  return v5;
}
// 9DF6F8: using guessed type const __int64 std___BADOFF;
// 9DF6FC: using guessed type int dword_9DF6FC;

//----- (00471480) --------------------------------------------------------
std::fpos<int> *__thiscall std::basic_streambuf<char_std::char_traits<char>>::seekpos(std::basic_streambuf<char,std::char_traits<char> > *this, std::fpos<int> *result, std::fpos<int> __formal, int a4)
{
  std::fpos<int> *v4; // eax@1
  int v5; // edx@1

  v4 = result;
  v5 = dword_9DF6FC;
  LODWORD(result->_Myoff) = std::_BADOFF;
  HIDWORD(result->_Myoff) = v5;
  result->_Fpos = 0i64;
  result->_Mystate = 0;
  return v4;
}
// 9DF6F8: using guessed type const __int64 std___BADOFF;
// 9DF6FC: using guessed type int dword_9DF6FC;

//----- (004714B0) --------------------------------------------------------
void *__thiscall std::basic_istream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_istream<char,std::char_traits<char> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = (char *)this - 16;
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 4) + 4) - 16) = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)&this->gap0[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);

//----- (004714F0) --------------------------------------------------------
void *__thiscall std::basic_streambuf<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_streambuf<char,std::char_traits<char> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00471520) --------------------------------------------------------
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Init(std::basic_filebuf<char,std::char_traits<char> > *this, _iobuf *_File, std::basic_filebuf<char,std::char_traits<char> >::_Initfl _Which)
{
  this->baseclass_0._IGfirst = &this->baseclass_0._Gfirst;
  this->baseclass_0._IGnext = &this->baseclass_0._Gnext;
  this->baseclass_0._IPnext = &this->baseclass_0._Pnext;
  this->_Closef = _Which == 1;
  this->baseclass_0._IGcount = &this->baseclass_0._Gcount;
  this->_Wrotesome = 0;
  this->baseclass_0._IPfirst = &this->baseclass_0._Pfirst;
  this->baseclass_0._IPcount = &this->baseclass_0._Pcount;
  this->baseclass_0._Pfirst = 0;
  *this->baseclass_0._IPnext = 0;
  *this->baseclass_0._IPcount = 0;
  *this->baseclass_0._IGfirst = 0;
  *this->baseclass_0._IGnext = 0;
  *this->baseclass_0._IGcount = 0;
  if ( _File )
  {
    this->baseclass_0._IGfirst = &_File->_base;
    this->baseclass_0._IPfirst = &_File->_base;
    this->baseclass_0._IGnext = (char **)_File;
    this->baseclass_0._IPnext = (char **)_File;
    this->baseclass_0._IGcount = &_File->_cnt;
    this->baseclass_0._IPcount = &_File->_cnt;
  }
  this->_Myfile = _File;
  this->_State = _Stinit;
  this->_Pcvt = 0;
}

//----- (004715C0) --------------------------------------------------------
void __thiscall std::basic_streambuf<char_std::char_traits<char>>::basic_streambuf<char_std::char_traits<char>>(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  std::basic_streambuf<char,std::char_traits<char> > *v1; // esi@1
  void *v2; // edi@1
  std::locale::_Locimp *v3; // ebx@2
  unsigned int v4; // eax@2
  std::_Lockit thisa; // [sp+4h] [bp-10h]@2
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  this->vfptr = (std::basic_streambuf<char,std::char_traits<char> >Vtbl *)&std::basic_streambuf<char_std::char_traits<char>>::_vftable_;
  std::_Mutex::_Mutex(&this->_Mylock);
  v6 = 0;
  v2 = operator new(4u);
  if ( v2 )
  {
    *(_DWORD *)v2 = std::locale::_Init();
    v3 = std::locale::_Getgloballocale();
    std::_Lockit::_Lockit(&thisa, 0);
    v4 = v3->baseclass_0._Refs;
    if ( v4 < 0xFFFFFFFF )
      v3->baseclass_0._Refs = v4 + 1;
    std::_Lockit::__Lockit(&thisa);
  }
  else
  {
    v2 = 0;
  }
  v1->_IGfirst = &v1->_Gfirst;
  v1->_IGnext = &v1->_Gnext;
  v1->_IPnext = &v1->_Pnext;
  v1->_Plocale = (std::locale *)v2;
  v1->_IPfirst = &v1->_Pfirst;
  v1->_IGcount = &v1->_Gcount;
  v1->_IPcount = &v1->_Pcount;
  v1->_Pfirst = 0;
  *v1->_IPnext = 0;
  *v1->_IPcount = 0;
  *v1->_IGfirst = 0;
  *v1->_IGnext = 0;
  *v1->_IGcount = 0;
}
// 98935C: using guessed type int (__thiscall *std__basic_streambuf_char_std__char_traits_char_____vftable_)(void *p, char);

//----- (004716B0) --------------------------------------------------------
void __thiscall std::_Locinfo::_Locinfo(std::_Locinfo *this, const char *_Pch)
{
  std::_Locinfo *v2; // esi@1
  std::exception thisa; // [sp+0h] [bp-1Ch]@2
  std::_Locinfo *v4; // [sp+Ch] [bp-10h]@1
  int v5; // [sp+18h] [bp-4h]@1

  v2 = this;
  v4 = this;
  std::_Lockit::_Lockit(&this->_Lock, 0);
  v5 = 0;
  v2->_Days._Myptr = 0;
  v2->_Days._Nul = 0;
  v2->_Months._Myptr = 0;
  v2->_Months._Nul = 0;
  v2->_Oldlocname._Myptr = 0;
  v2->_Oldlocname._Nul = 0;
  v2->_Newlocname._Myptr = 0;
  v2->_Newlocname._Nul = 0;
  LOBYTE(v5) = 4;
  if ( !_Pch )
  {
    _Pch = "bad locale name";
    std::exception::exception(&thisa, &_Pch);
    thisa.vfptr = (std::exceptionVtbl *)&std::runtime_error::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVruntime_error_std__);
  }
  std::_Locinfo::_Locinfo_ctor(v2, _Pch);
}
// 989280: using guessed type int (__thiscall *std__runtime_error___vftable_)(void *p, char);

//----- (00471760) --------------------------------------------------------
void __thiscall std::_Locinfo::__Locinfo(std::_Locinfo *this)
{
  std::_Locinfo *v1; // esi@1

  v1 = this;
  std::_Locinfo::_Locinfo_dtor(this);
  if ( v1->_Newlocname._Myptr )
    free(v1->_Newlocname._Myptr);
  v1->_Newlocname._Myptr = 0;
  if ( v1->_Oldlocname._Myptr )
    free(v1->_Oldlocname._Myptr);
  v1->_Oldlocname._Myptr = 0;
  if ( v1->_Months._Myptr )
    free(v1->_Months._Myptr);
  v1->_Months._Myptr = 0;
  if ( v1->_Days._Myptr )
    free(v1->_Days._Myptr);
  v1->_Days._Myptr = 0;
  std::_Lockit::__Lockit(&v1->_Lock);
}

//----- (00471810) --------------------------------------------------------
unsigned int __cdecl std::ctype<char>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc)
{
  char v2; // bl@1
  void *v3; // esi@3
  const char *v4; // eax@5
  _Ctypevec *v5; // eax@7
  std::_Locinfo this; // [sp+0h] [bp-44h]@7
  _Ctypevec result; // [sp+24h] [bp-20h]@7
  void *v9; // [sp+34h] [bp-10h]@1
  int v10; // [sp+40h] [bp-4h]@3

  v2 = 0;
  v9 = 0;
  if ( _Ppf && !*_Ppf )
  {
    v3 = operator new(0x18u);
    v9 = v3;
    v10 = 0;
    if ( v3 )
    {
      if ( *(_DWORD *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24) )
        v4 = *(const char **)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24);
      else
        v4 = (const char *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 28);
      std::_Locinfo::_Locinfo(&this, v4);
      v2 = 1;
      *((_DWORD *)v3 + 1) = 0;
      *(_DWORD *)v3 = &std::ctype<char>::_vftable_;
      v5 = _Getctype(&result);
      *((_DWORD *)v3 + 2) = v5->_Hand;
      *((_DWORD *)v3 + 3) = v5->_Page;
      *((_DWORD *)v3 + 4) = v5->_Table;
      *((_DWORD *)v3 + 5) = v5->_Delfl;
    }
    else
    {
      v3 = 0;
    }
    v10 = -1;
    *_Ppf = (std::locale::facet *)v3;
    if ( v2 & 1 )
      std::_Locinfo::__Locinfo(&this);
  }
  return 2;
}
// 9892D0: using guessed type int (__thiscall *std__ctype_char____vftable_)(void *p, char);

//----- (004718F0) --------------------------------------------------------
int __thiscall std::basic_streambuf<char_std::char_traits<char>>::snextc(std::basic_streambuf<char,std::char_traits<char> > *this)
{
  std::basic_streambuf<char,std::char_traits<char> > *v1; // esi@1
  char *v2; // eax@1
  char **v3; // esi@3
  int *v4; // eax@3
  int result; // eax@3
  int *v6; // edx@5
  char **v7; // eax@6
  int *v8; // ecx@6
  int **v9; // eax@9

  v1 = this;
  v2 = *this->_IGnext;
  if ( !v2 )
    goto LABEL_15;
  if ( *this->_IGcount > 1 )
  {
    --*this->_IGcount;
    v3 = this->_IGnext;
    v4 = (int *)(*v3 + 1);
    *v3 = (char *)v4;
    return *(_BYTE *)v4;
  }
  if ( v2 && (v6 = this->_IGcount, *v6 > 0) )
  {
    --*v6;
    v7 = this->_IGnext;
    v8 = (int *)(*v7)++;
    result = *(_BYTE *)v8;
  }
  else
  {
LABEL_15:
    result = this->vfptr->uflow(this);
  }
  if ( result != -1 )
  {
    v9 = (int **)v1->_IGnext;
    if ( *v9 && *v1->_IGcount > 0 )
      result = *(_BYTE *)*v9;
    else
      result = v1->vfptr->underflow(v1);
  }
  return result;
}

//----- (00471970) --------------------------------------------------------
std::ctype<char> *__cdecl std::use_facet<std::ctype<char>>(std::locale *_Loc)
{
  int v1; // ebx@1
  std::locale *v2; // edi@5
  int v3; // esi@5
  int v4; // eax@5
  int v5; // ecx@6
  std::locale::_Locimp *v6; // eax@8
  int v7; // esi@9
  unsigned int v8; // eax@18
  char pExceptionObject; // [sp+0h] [bp-24h]@16
  std::_Lockit _Lock; // [sp+Ch] [bp-18h]@1
  std::_Lockit this; // [sp+10h] [bp-14h]@2
  int _Psave; // [sp+14h] [bp-10h]@1
  int v14; // [sp+20h] [bp-4h]@1

  std::_Lockit::_Lockit(&_Lock, 0);
  v1 = std::_Facetptr<std::ctype<char>>::_Psave;
  v14 = 0;
  _Psave = std::_Facetptr<std::ctype<char>>::_Psave;
  if ( !std::ctype<char>::id )
  {
    std::_Lockit::_Lockit(&this, 0);
    if ( !std::ctype<char>::id )
    {
      ++std::locale::id::_Id_cnt;
      std::ctype<char>::id = std::locale::id::_Id_cnt;
    }
    std::_Lockit::__Lockit(&this);
  }
  v2 = _Loc;
  v3 = std::ctype<char>::id;
  v4 = *(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0];
  if ( (unsigned int)std::ctype<char>::id >= *(_DWORD *)(*(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0] + 12) )
  {
    v5 = 0;
  }
  else
  {
    v5 = *(_DWORD *)(*(_DWORD *)(v4 + 8) + 4 * std::ctype<char>::id);
    if ( v5 )
    {
LABEL_11:
      v7 = v5;
LABEL_12:
      if ( v7 )
        goto LABEL_21;
      goto LABEL_13;
    }
  }
  if ( !*(_BYTE *)(v4 + 20) )
    goto LABEL_11;
  v6 = std::locale::_Getgloballocale();
  if ( v3 < v6->_Facetcount )
  {
    v7 = (int)v6->_Facetvec[v3];
    goto LABEL_12;
  }
LABEL_13:
  if ( v1 )
  {
    v7 = v1;
  }
  else
  {
    if ( std::ctype<char>::_Getcat((std::locale::facet **)&_Psave, v2) == -1 )
    {
      std::bad_cast::bad_cast((std::bad_cast *)&pExceptionObject, "bad cast");
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_cast_std__);
    }
    v7 = _Psave;
    std::_Facetptr<std::ctype<char>>::_Psave = _Psave;
    std::_Lockit::_Lockit((std::_Lockit *)&_Loc, 0);
    v8 = *(_DWORD *)(v7 + 4);
    if ( v8 < 0xFFFFFFFF )
      *(_DWORD *)(v7 + 4) = v8 + 1;
    std::_Lockit::__Lockit((std::_Lockit *)&_Loc);
    std::locale::facet::_Facet_Register((std::locale::facet *)v7);
  }
LABEL_21:
  v14 = -1;
  std::_Lockit::__Lockit(&_Lock);
  return (std::ctype<char> *)v7;
}
// A98298: using guessed type int std___Facetptr_std__ctype_char_____Psave;
// B6C3B0: using guessed type int std__locale__id___Id_cnt;
// B6C3B4: using guessed type int std__ctype_char___id;

//----- (00471AB0) --------------------------------------------------------
std::basic_istream<char,std::char_traits<char> > *__thiscall std::basic_istream<char_std::char_traits<char>>::seekg(std::basic_istream<char,std::char_traits<char> > *this, __int64 _Off, int _Way)
{
  std::basic_istream<char,std::char_traits<char> > *v3; // esi@1
  int v4; // ecx@1
  int v5; // ecx@3
  int v6; // eax@3
  int v7; // ecx@3
  int v8; // eax@3
  __int64 v10; // [sp+4h] [bp-18h]@2
  int v11; // [sp+Ch] [bp-10h]@2

  v3 = this;
  v4 = *(_DWORD *)(*(_DWORD *)&this->gap0[0] + 4);
  if ( !(*((_BYTE *)&v3->_Chcount + v4 + 4) & 6) )
  {
    (*(void (__stdcall **)(__int64 *, _DWORD, _DWORD, int, signed int))(**(_DWORD **)&v3->gap10[v4 + 40] + 40))(
      &v10,
      _Off,
      HIDWORD(_Off),
      _Way,
      1);
    if ( v10 + v11 == std::_BADOFF )
    {
      v5 = *(_DWORD *)(*(_DWORD *)&v3->gap0[0] + 4);
      v6 = *(_DWORD *)((char *)&v3->_Chcount + v5 + 4);
      v7 = (int)((char *)v3 + v5);
      v8 = v6 | 2;
      if ( !*(_DWORD *)(v7 + 56) )
        v8 |= 4u;
      std::ios_base::clear((std::ios_base *)v7, v8, 0);
    }
  }
  return v3;
}
// 9DF6F8: using guessed type const __int64 std___BADOFF;

//----- (00471B30) --------------------------------------------------------
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Lock(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  if ( this->_Myfile )
    _lock_file(this->_Myfile);
}

//----- (00471B40) --------------------------------------------------------
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Unlock(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  if ( this->_Myfile )
    _unlock_file(this->_Myfile);
}

//----- (00471B50) --------------------------------------------------------
bool __cdecl std::_Fputc<char>(char _Byte, _iobuf *_File)
{
  return fputc(_Byte, _File) != -1;
}

//----- (00471B70) --------------------------------------------------------
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::underflow(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  std::basic_filebuf<char,std::char_traits<char> > *v1; // esi@1
  int *v2; // ecx@1
  int result; // eax@3
  int v4; // edi@4

  v1 = this;
  v2 = (int *)*this->baseclass_0._IGnext;
  if ( v2 && v2 < (int *)((char *)v2 + *v1->baseclass_0._IGcount) )
  {
    result = *(_BYTE *)v2;
  }
  else
  {
    result = v1->baseclass_0.vfptr->uflow((std::basic_streambuf<char,std::char_traits<char> > *)v1);
    v4 = result;
    if ( result != -1 )
    {
      v1->baseclass_0.vfptr->pbackfail((std::basic_streambuf<char,std::char_traits<char> > *)v1, result);
      result = v4;
    }
  }
  return result;
}

//----- (00471BC0) --------------------------------------------------------
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::sync(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  std::basic_filebuf<char,std::char_traits<char> > *v1; // esi@1
  int result; // eax@4

  v1 = this;
  if ( this->_Myfile
    && ((int (__stdcall *)(_DWORD))this->baseclass_0.vfptr->overflow)(-1) != -1
    && fflush(v1->_Myfile) < 0 )
    result = -1;
  else
    result = 0;
  return result;
}

//----- (00471BF0) --------------------------------------------------------
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Set_back(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  char **v1; // edx@1
  char *v2; // eax@1

  v1 = this->baseclass_0._IGfirst;
  v2 = &this->_Mychar;
  if ( *v1 != &this->_Mychar )
  {
    this->_Set_eback = *v1;
    this->_Set_egptr = &(*this->baseclass_0._IGnext)[*this->baseclass_0._IGcount];
  }
  *v1 = v2;
  *this->baseclass_0._IGnext = v2;
  *this->baseclass_0._IGcount = 1;
}

//----- (00471C30) --------------------------------------------------------
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::pbackfail(std::basic_filebuf<char,std::char_traits<char> > *this, int _Meta)
{
  std::basic_filebuf<char,std::char_traits<char> > *v2; // esi@1
  char *v3; // eax@1

  v2 = this;
  v3 = *this->baseclass_0._IGnext;
  if ( v3 && *this->baseclass_0._IGfirst < v3 && (_Meta == -1 || *(v3 - 1) == _Meta) )
  {
    ++*this->baseclass_0._IGcount;
    --*this->baseclass_0._IGnext;
    return _Meta != -1 ? _Meta : 0;
  }
  if ( this->_Myfile && _Meta != -1 )
  {
    if ( !this->_Pcvt && ungetc((unsigned __int8)_Meta, this->_Myfile) != -1 )
      return _Meta;
    if ( (char *)*(std::basic_filebuf<char,std::char_traits<char> > **)v2->baseclass_0._IGnext != &v2->_Mychar )
    {
      v2->_Mychar = _Meta;
      std::basic_filebuf<char_std::char_traits<char>>::_Set_back(v2);
      return _Meta;
    }
  }
  return -1;
}

//----- (00471CC0) --------------------------------------------------------
std::basic_streambuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::setbuf(std::basic_filebuf<char,std::char_traits<char> > *this, char *_Buffer, __int64 _Count)
{
  std::basic_filebuf<char,std::char_traits<char> > *v3; // edi@1
  _iobuf *v4; // ecx@1
  int v5; // eax@4
  std::basic_streambuf<char,std::char_traits<char> > *result; // eax@7

  v3 = this;
  v4 = this->_Myfile;
  if ( !v4 || (_Buffer || _Count ? (v5 = 0) : (v5 = 4), setvbuf(v4, _Buffer, v5, _Count)) )
  {
    result = 0;
  }
  else
  {
    std::basic_filebuf<char_std::char_traits<char>>::_Init(v3, v3->_Myfile, _Openfl);
    result = (std::basic_streambuf<char,std::char_traits<char> > *)v3;
  }
  return result;
}

//----- (00471D20) --------------------------------------------------------
char __thiscall std::basic_ios<char_std::char_traits<char>>::widen(std::basic_ios<char,std::char_traits<char> > *this, char _Byte)
{
  std::locale *v2; // eax@1
  std::ctype<char> *v3; // eax@1
  std::locale v4; // edi@1
  std::ctype<char> *v5; // ebx@1
  unsigned int v6; // eax@2
  int v7; // esi@5
  int v8; // esi@5
  std::_Lockit thisa; // [sp+0h] [bp-14h]@2
  std::locale result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v2 = std::ios_base::getloc(&this->baseclass_0, &result);
  v12 = 0;
  v3 = std::use_facet<std::ctype<char>>(v2);
  v4 = result;
  v5 = v3;
  v12 = -1;
  if ( result )
  {
    std::_Lockit::_Lockit(&thisa, 0);
    v6 = *(_DWORD *)(*(_DWORD *)&v4 + 4);
    if ( v6 && v6 < 0xFFFFFFFF )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6 - 1;
    v7 = -(*(_DWORD *)(*(_DWORD *)&v4 + 4) == 0);
    std::_Lockit::__Lockit(&thisa);
    v8 = *(_DWORD *)&v4 & v7;
    if ( v8 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
  }
  return ((int (__cdecl *)(_DWORD))v5->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(_Byte);
}

//----- (00471DD0) --------------------------------------------------------
unsigned int __cdecl std::codecvt<char_char_int>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc)
{
  char v2; // bl@1
  void *v3; // esi@3
  const char *v4; // eax@5
  std::_Locinfo this; // [sp+0h] [bp-34h]@7
  void *v7; // [sp+24h] [bp-10h]@1
  int v8; // [sp+30h] [bp-4h]@3

  v2 = 0;
  v7 = 0;
  if ( _Ppf && !*_Ppf )
  {
    v3 = operator new(8u);
    v7 = v3;
    v8 = 0;
    if ( v3 )
    {
      if ( *(_DWORD *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24) )
        v4 = *(const char **)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24);
      else
        v4 = (const char *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 28);
      std::_Locinfo::_Locinfo(&this, v4);
      v2 = 1;
      *((_DWORD *)v3 + 1) = 0;
      *(_DWORD *)v3 = &std::codecvt<char_char_int>::_vftable_;
    }
    else
    {
      v3 = 0;
    }
    v8 = -1;
    *_Ppf = (std::locale::facet *)v3;
    if ( v2 & 1 )
      std::_Locinfo::__Locinfo(&this);
  }
  return 2;
}
// 9892AC: using guessed type int (__thiscall *std__codecvt_char_char_int____vftable_)(void *p, char);

//----- (00471E80) --------------------------------------------------------
std::basic_ostream<char,std::char_traits<char> > *__thiscall std::basic_ostream<char_std::char_traits<char>>::flush(std::basic_ostream<char,std::char_traits<char> > *this)
{
  std::basic_ostream<char,std::char_traits<char> > *v1; // esi@1
  int v2; // eax@1
  signed int v3; // edi@1
  int v4; // ecx@4
  int v5; // eax@5

  v1 = this;
  v2 = *(_DWORD *)(*(_DWORD *)&this->dummy[0] + 4);
  v3 = 0;
  if ( !(this->dummy[v2 + 12] & 6)
    && (*(int (__thiscall **)(_DWORD))(**(_DWORD **)&this->dummy[v2 + 56] + 52))(*(_DWORD *)&this->dummy[v2 + 56]) == -1 )
    v3 = 4;
  v4 = (int)((char *)v1 + *(_DWORD *)(*(_DWORD *)&v1->dummy[0] + 4));
  if ( v3 )
  {
    v5 = v3 | *(_DWORD *)(v4 + 12);
    if ( !*(_DWORD *)(v4 + 56) )
      v5 |= 4u;
    std::ios_base::clear((std::ios_base *)v4, v5, 0);
  }
  return v1;
}

//----- (00471ED0) --------------------------------------------------------
#error "472064: positive sp value has been found (funcsize=118)"

//----- (00472070) --------------------------------------------------------
std::codecvt<char,char,int> *__cdecl std::use_facet<std::codecvt<char_char_int>>(std::locale *_Loc)
{
  int v1; // ebx@1
  std::locale *v2; // edi@5
  int v3; // esi@5
  int v4; // eax@5
  int v5; // ecx@6
  std::locale::_Locimp *v6; // eax@8
  int v7; // esi@9
  unsigned int v8; // eax@18
  char pExceptionObject; // [sp+0h] [bp-24h]@16
  std::_Lockit _Lock; // [sp+Ch] [bp-18h]@1
  std::_Lockit this; // [sp+10h] [bp-14h]@2
  int _Psave; // [sp+14h] [bp-10h]@1
  int v14; // [sp+20h] [bp-4h]@1

  std::_Lockit::_Lockit(&_Lock, 0);
  v1 = std::_Facetptr<std::codecvt<char_char_int>>::_Psave;
  v14 = 0;
  _Psave = std::_Facetptr<std::codecvt<char_char_int>>::_Psave;
  if ( !std::codecvt<char_char_int>::id )
  {
    std::_Lockit::_Lockit(&this, 0);
    if ( !std::codecvt<char_char_int>::id )
    {
      ++std::locale::id::_Id_cnt;
      std::codecvt<char_char_int>::id = std::locale::id::_Id_cnt;
    }
    std::_Lockit::__Lockit(&this);
  }
  v2 = _Loc;
  v3 = std::codecvt<char_char_int>::id;
  v4 = *(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0];
  if ( (unsigned int)std::codecvt<char_char_int>::id >= *(_DWORD *)(*(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0] + 12) )
  {
    v5 = 0;
  }
  else
  {
    v5 = *(_DWORD *)(*(_DWORD *)(v4 + 8) + 4 * std::codecvt<char_char_int>::id);
    if ( v5 )
    {
LABEL_11:
      v7 = v5;
LABEL_12:
      if ( v7 )
        goto LABEL_21;
      goto LABEL_13;
    }
  }
  if ( !*(_BYTE *)(v4 + 20) )
    goto LABEL_11;
  v6 = std::locale::_Getgloballocale();
  if ( v3 < v6->_Facetcount )
  {
    v7 = (int)v6->_Facetvec[v3];
    goto LABEL_12;
  }
LABEL_13:
  if ( v1 )
  {
    v7 = v1;
  }
  else
  {
    if ( std::codecvt<char_char_int>::_Getcat((std::locale::facet **)&_Psave, v2) == -1 )
    {
      std::bad_cast::bad_cast((std::bad_cast *)&pExceptionObject, "bad cast");
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_cast_std__);
    }
    v7 = _Psave;
    std::_Facetptr<std::codecvt<char_char_int>>::_Psave = _Psave;
    std::_Lockit::_Lockit((std::_Lockit *)&_Loc, 0);
    v8 = *(_DWORD *)(v7 + 4);
    if ( v8 < 0xFFFFFFFF )
      *(_DWORD *)(v7 + 4) = v8 + 1;
    std::_Lockit::__Lockit((std::_Lockit *)&_Loc);
    std::locale::facet::_Facet_Register((std::locale::facet *)v7);
  }
LABEL_21:
  v14 = -1;
  std::_Lockit::__Lockit(&_Lock);
  return (std::codecvt<char,char,int> *)v7;
}
// A9829C: using guessed type int std___Facetptr_std__codecvt_char_char_int_____Psave;
// A982A0: using guessed type int std__codecvt_char_char_int___id;
// B6C3B0: using guessed type int std__locale__id___Id_cnt;

//----- (004721B0) --------------------------------------------------------
#error "4722AB: positive sp value has been found (funcsize=93)"

//----- (00472300) --------------------------------------------------------
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::uflow(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  std::basic_filebuf<char,std::char_traits<char> > *v1; // esi@1
  char **v2; // esi@3
  int *v3; // eax@3
  int result; // eax@3
  char **v5; // ecx@5
  char *v6; // eax@6
  int i; // eax@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // eax@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // edx@11
  int v10; // eax@13
  const void *v11; // eax@17
  int v12; // esi@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // edi@28
  unsigned int v15; // edi@30
  int v16; // ecx@31
  int v17; // esi@32
  char *_Dest; // [sp+0h] [bp-38h]@13
  void *_Src; // [sp+4h] [bp-34h]@13
  unsigned __int8 _Ch; // [sp+Bh] [bp-2Dh]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Str; // [sp+Ch] [bp-2Ch]@10
  unsigned int v22; // [sp+28h] [bp-10h]@1
  int v23; // [sp+34h] [bp-4h]@10
  int v24; // [sp+38h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v1 = this;
  if ( *this->baseclass_0._IGnext
    && *this->baseclass_0._IGnext < &(*this->baseclass_0._IGnext)[*this->baseclass_0._IGcount] )
  {
    --*this->baseclass_0._IGcount;
    v2 = this->baseclass_0._IGnext;
    v3 = (int *)(*v2)++;
    return *(_BYTE *)v3;
  }
  if ( this->_Myfile )
  {
    v5 = this->baseclass_0._IGfirst;
    if ( *v5 == &v1->_Mychar )
    {
      v6 = v1->_Set_egptr;
      *v5 = v1->_Set_eback;
      *v1->baseclass_0._IGnext = v6;
      *v1->baseclass_0._IGcount = 0;
    }
    if ( v1->_Pcvt )
    {
      _Str.baseclass_0._Myres = 15;
      _Str.baseclass_0._Mysize = 0;
      _Str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v23 = 0;
      for ( i = getc(v1->_Myfile); i != -1; i = getc(v1->_Myfile) )
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&_Str, 1u, i);
        v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Str;
        v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Str;
        if ( _Str.baseclass_0._Myres < 0x10 )
        {
          v9 = &_Str;
          v8 = &_Str;
        }
        v10 = ((int (__stdcall *)(int *, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *, char *, void **, unsigned __int8 *, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *, char **))v1->_Pcvt->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(
                &v1->_State,
                v8,
                (char *)v9 + _Str.baseclass_0._Mysize,
                &_Src,
                &_Ch,
                &_Str,
                &_Dest);
        if ( v10 < 0 )
          break;
        if ( v10 <= 1 )
        {
          if ( (unsigned __int8 *)_Dest != &_Ch )
          {
            v14 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Str;
            if ( _Str.baseclass_0._Myres < 0x10 )
              v14 = &_Str;
            v15 = _Str.baseclass_0._Mysize + (char *)v14 - _Src;
            while ( (signed int)v15 > 0 )
            {
              v16 = *((_BYTE *)_Src + v15-- - 1);
              ungetc(v16, v1->_Myfile);
            }
            v17 = _Ch;
            std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str);
            return v17;
          }
          v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Str;
          if ( _Str.baseclass_0._Myres < 0x10 )
            v13 = &_Str;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(&_Str, 0, _Src - v13);
        }
        else
        {
          if ( v10 != 3 )
            break;
          if ( _Str.baseclass_0._Mysize >= 1 )
          {
            v11 = *(const void **)&_Str;
            if ( _Str.baseclass_0._Myres < 0x10 )
              v11 = &_Str;
            memcpy_s(&_Ch, 1u, v11, 1u);
            v12 = _Ch;
            std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str);
            return v12;
          }
        }
      }
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str);
    }
    else
    {
      result = getc(v1->_Myfile);
      if ( result != -1 )
        return (unsigned __int8)result;
    }
  }
  return -1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004724F0) --------------------------------------------------------
void __thiscall std::basic_filebuf<char_std::char_traits<char>>::imbue(std::basic_filebuf<char,std::char_traits<char> > *this, std::locale *_Loc)
{
  std::basic_filebuf<char,std::char_traits<char> > *v2; // edi@1
  std::codecvt<char,char,int> *v3; // esi@1

  v2 = this;
  v3 = std::use_facet<std::codecvt<char_char_int>>(_Loc);
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v3) )
  {
    v2->_Pcvt = 0;
  }
  else
  {
    v2->_Pcvt = v3;
    std::basic_streambuf<char_std::char_traits<char>>::_Init(&v2->baseclass_0);
  }
}

//----- (00472530) --------------------------------------------------------
std::basic_filebuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::open(std::basic_filebuf<char,std::char_traits<char> > *this, const wchar_t *_Filename, int _Mode, int _Prot)
{
  std::basic_filebuf<char,std::char_traits<char> > *v4; // esi@1
  _iobuf *v5; // eax@2
  std::locale *v6; // eax@3
  std::codecvt<char,char,int> *v7; // edi@3
  std::basic_filebuf<char,std::char_traits<char> > *result; // eax@4

  v4 = this;
  if ( this->_Myfile || (v5 = std::_Fiopen(_Filename, _Mode, _Prot)) == 0 )
  {
    result = 0;
  }
  else
  {
    std::basic_filebuf<char_std::char_traits<char>>::_Init(v4, v5, _Openfl);
    v6 = std::basic_streambuf<char_std::char_traits<char>>::getloc(&v4->baseclass_0, (std::locale *)&_Prot);
    v7 = std::use_facet<std::codecvt<char_char_int>>(v6);
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v7) )
    {
      v4->_Pcvt = 0;
      std::locale::_locale((std::locale *)&_Prot);
      result = v4;
    }
    else
    {
      v4->_Pcvt = v7;
      std::basic_streambuf<char_std::char_traits<char>>::_Init(&v4->baseclass_0);
      std::locale::_locale((std::locale *)&_Prot);
      result = v4;
    }
  }
  return result;
}

//----- (00472610) --------------------------------------------------------
bool __thiscall std::basic_filebuf<char_std::char_traits<char>>::_Endwrite(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  std::basic_filebuf<char,std::char_traits<char> > *v1; // edi@1
  const void *v2; // eax@5
  unsigned int v3; // ebx@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // edx@6
  int v5; // eax@8
  int v6; // eax@9
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *v7; // ecx@10
  void *v8; // ecx@13
  unsigned int v9; // esi@15
  char *_Dest; // [sp+0h] [bp-30h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Str; // [sp+4h] [bp-2Ch]@4
  unsigned int v13; // [sp+20h] [bp-10h]@1
  int v14; // [sp+2Ch] [bp-4h]@4
  int v15; // [sp+30h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  if ( !this->_Pcvt || !this->_Wrotesome )
    return 1;
  if ( ((int (__stdcall *)(signed int))this->baseclass_0.vfptr->overflow)(-1) == -1 )
    return 0;
  _Str.baseclass_0._Myres = 15;
  *(_QWORD *)&_Str.baseclass_0.___u0.baseclass_0.dummy[0] = 0i64;
  _Str.baseclass_0._Mysize = 8;
  _Str.baseclass_0.___u0._Bx._Buf[8] = 0;
  v14 = 0;
LABEL_5:
  v2 = *(const void **)&_Str;
  v3 = _Str.baseclass_0._Myres;
  while ( 1 )
  {
    v4 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v2;
    if ( v3 < 0x10 )
    {
      v4 = &_Str;
      v2 = &_Str;
    }
    v5 = ((int (__stdcall *)(int *, const void *, char *, char **))v1->_Pcvt->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor)(
           &v1->_State,
           v2,
           (char *)v4 + _Str.baseclass_0._Mysize,
           &_Dest);
    if ( v5 )
      break;
    v1->_Wrotesome = 0;
LABEL_13:
    v3 = _Str.baseclass_0._Myres;
    v2 = *(const void **)&_Str;
    v8 = *(void **)&_Str;
    if ( _Str.baseclass_0._Myres < 0x10 )
      v8 = &_Str;
    v9 = _Dest - v8;
    if ( _Dest != v8 )
    {
      if ( _Str.baseclass_0._Myres < 0x10 )
        v2 = &_Str;
      if ( v9 != fwrite(v2, 1u, v9, v1->_Myfile) )
      {
        v7 = (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str;
        goto LABEL_24;
      }
      v3 = _Str.baseclass_0._Myres;
      v2 = *(const void **)&_Str;
    }
    if ( !v1->_Wrotesome )
    {
      v7 = (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str;
      goto LABEL_27;
    }
    if ( !v9 )
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&_Str, 8u, 0);
      goto LABEL_5;
    }
  }
  v6 = v5 - 1;
  if ( !v6 )
    goto LABEL_13;
  v7 = (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str;
  if ( v6 != 2 )
  {
LABEL_24:
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>(v7);
    return 0;
  }
LABEL_27:
  std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>(v7);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00472750) --------------------------------------------------------
int __thiscall std::basic_filebuf<char_std::char_traits<char>>::overflow(std::basic_filebuf<char,std::char_traits<char> > *this, int _Meta)
{
  int result; // eax@1
  std::basic_filebuf<char,std::char_traits<char> > *v3; // esi@1
  char *v4; // edx@2
  int *v5; // ecx@3
  char **v6; // esi@4
  char *v7; // eax@4
  char **v8; // edx@6
  char *v9; // ecx@7
  const void *v10; // eax@12
  unsigned int v11; // ebx@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // edx@13
  int v13; // eax@15
  void *v14; // ecx@17
  unsigned int v15; // edi@19
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *v16; // ecx@26
  int *_Src; // [sp+0h] [bp-38h]@15
  char *_Dest; // [sp+4h] [bp-34h]@15
  int _Ch; // [sp+8h] [bp-30h]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Str; // [sp+Ch] [bp-2Ch]@11
  unsigned int v21; // [sp+28h] [bp-10h]@1
  int v22; // [sp+34h] [bp-4h]@11
  int v23; // [sp+38h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  result = 0;
  v3 = this;
  if ( _Meta != -1 )
  {
    v4 = *this->baseclass_0._IPnext;
    if ( v4 )
    {
      v5 = this->baseclass_0._IPcount;
      if ( v4 < &v4[*v5] )
      {
        --*v5;
        v6 = v3->baseclass_0._IPnext;
        v7 = (*v6)++;
        *v7 = _Meta;
        return _Meta;
      }
    }
    if ( !v3->_Myfile )
      return -1;
    v8 = v3->baseclass_0._IGfirst;
    if ( *v8 == &v3->_Mychar )
    {
      v9 = v3->_Set_egptr;
      *v8 = v3->_Set_eback;
      *v3->baseclass_0._IGnext = v9;
      *v3->baseclass_0._IGcount = 0;
    }
    if ( !v3->_Pcvt )
    {
      if ( fputc((char)_Meta, v3->_Myfile) != -1 )
        return _Meta;
      return -1;
    }
    LOBYTE(_Ch) = _Meta;
    _Str.baseclass_0._Myres = 15;
    *(_QWORD *)&_Str.baseclass_0.___u0.baseclass_0.dummy[0] = 0i64;
    _Str.baseclass_0._Mysize = 8;
    _Str.baseclass_0.___u0._Bx._Buf[8] = 0;
    v22 = 0;
LABEL_12:
    v10 = *(const void **)&_Str;
    v11 = _Str.baseclass_0._Myres;
    while ( 1 )
    {
      v12 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v10;
      if ( v11 < 0x10 )
      {
        v12 = &_Str;
        v10 = &_Str;
      }
      v13 = ((int (__stdcall *)(int *, int *, char *, int **, const void *, char *, char **))v3->_Pcvt->baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
              &v3->_State,
              &_Ch,
              (char *)&_Ch + 1,
              &_Src,
              v10,
              (char *)v12 + _Str.baseclass_0._Mysize,
              &_Dest);
      if ( v13 < 0 )
        goto LABEL_33;
      if ( v13 > 1 )
        break;
      v11 = _Str.baseclass_0._Myres;
      v10 = *(const void **)&_Str;
      v14 = *(void **)&_Str;
      if ( _Str.baseclass_0._Myres < 0x10 )
        v14 = &_Str;
      v15 = _Dest - v14;
      if ( _Dest != v14 )
      {
        if ( _Str.baseclass_0._Myres < 0x10 )
          v10 = &_Str;
        if ( v15 != fwrite(v10, 1u, v15, v3->_Myfile) )
          goto LABEL_33;
        v11 = _Str.baseclass_0._Myres;
        v10 = *(const void **)&_Str;
      }
      v3->_Wrotesome = 1;
      if ( _Src != &_Ch )
      {
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str);
        return _Meta;
      }
      if ( !v15 )
      {
        v16 = (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str;
        if ( _Str.baseclass_0._Mysize < 0x20 )
        {
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&_Str, 8u, 0);
          goto LABEL_12;
        }
        goto LABEL_34;
      }
    }
    if ( v13 != 3 )
    {
LABEL_33:
      v16 = (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str;
LABEL_34:
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>(v16);
      return -1;
    }
    if ( std::_Fputc<char>(_Ch, v3->_Myfile) )
    {
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str);
      result = _Meta;
    }
    else
    {
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Str);
      result = -1;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00472940) --------------------------------------------------------
std::fpos<int> *__thiscall std::basic_filebuf<char_std::char_traits<char>>::seekoff(std::basic_filebuf<char,std::char_traits<char> > *this, std::fpos<int> *result, __int64 _Off, int _Way, int __formal)
{
  std::basic_filebuf<char,std::char_traits<char> > *v5; // esi@1
  unsigned int v6; // ebx@4
  unsigned int v7; // edi@4
  char **v8; // ecx@12
  char *v9; // eax@13
  unsigned __int64 v10; // qax@14
  int v11; // ecx@14

  v5 = this;
  if ( (char *)*(std::basic_filebuf<char,std::char_traits<char> > **)this->baseclass_0._IGnext != &this->_Mychar
    || _Way != 1
    || this->_Pcvt )
  {
    v7 = HIDWORD(_Off);
    v6 = _Off;
  }
  else
  {
    v6 = _Off - 1;
    v7 = ((unsigned __int64)(_Off - 1) >> 32) - 1;
  }
  if ( !this->_Myfile
    || !std::basic_filebuf<char_std::char_traits<char>>::_Endwrite(this)
    || (v7 | v6 || _Way != 1) && _fseeki64(v5->_Myfile, __PAIR__(v7, v6), _Way)
    || fgetpos(v5->_Myfile, &_Off) )
  {
    LODWORD(v10) = result;
    result->_Myoff = std::_BADOFF;
    result->_Fpos = 0i64;
    result->_Mystate = 0;
  }
  else
  {
    v8 = v5->baseclass_0._IGfirst;
    if ( *v8 == &v5->_Mychar )
    {
      v9 = v5->_Set_egptr;
      *v8 = v5->_Set_eback;
      *v5->baseclass_0._IGnext = v9;
      *v5->baseclass_0._IGcount = 0;
    }
    v10 = __PAIR__(HIDWORD(_Off), (unsigned int)result);
    LODWORD(result->_Fpos) = _Off;
    v11 = v5->_State;
    result->_Myoff = 0i64;
    HIDWORD(result->_Fpos) = HIDWORD(v10);
    result->_Mystate = v11;
  }
  return (std::fpos<int> *)v10;
}
// 9DF6F8: using guessed type const __int64 std___BADOFF;

//----- (00472A30) --------------------------------------------------------
std::fpos<int> *__thiscall std::basic_filebuf<char_std::char_traits<char>>::seekpos(std::basic_filebuf<char,std::char_traits<char> > *this, std::fpos<int> *result, std::fpos<int> _Pos, int __formal)
{
  std::basic_filebuf<char,std::char_traits<char> > *v4; // esi@1
  int v5; // ecx@1
  unsigned __int64 v6; // qax@7
  int v7; // ecx@7
  __int64 _Fileposition; // [sp+Ch] [bp-8h]@1

  v4 = this;
  v5 = 0;
  _Fileposition = _Pos._Fpos;
  if ( !v4->_Myfile )
    goto LABEL_9;
  if ( !std::basic_filebuf<char_std::char_traits<char>>::_Endwrite(v4)
    || fsetpos(v4->_Myfile, &_Fileposition)
    || _Pos._Myoff && _fseeki64(v4->_Myfile, _Pos._Myoff, 1)
    || fgetpos(v4->_Myfile, &_Fileposition) )
  {
    v5 = 0;
LABEL_9:
    LODWORD(v6) = result;
    result->_Myoff = std::_BADOFF;
    LODWORD(result->_Fpos) = v5;
    HIDWORD(result->_Fpos) = v5;
    result->_Mystate = v5;
    return (std::fpos<int> *)v6;
  }
  v4->_State = _Pos._Mystate;
  std::basic_filebuf<char_std::char_traits<char>>::_Reset_back(v4);
  v6 = __PAIR__(HIDWORD(_Fileposition), (unsigned int)result);
  LODWORD(result->_Fpos) = _Fileposition;
  v7 = v4->_State;
  result->_Myoff = 0i64;
  HIDWORD(result->_Fpos) = HIDWORD(v6);
  result->_Mystate = v7;
  return (std::fpos<int> *)v6;
}
// 9DF6F8: using guessed type const __int64 std___BADOFF;

//----- (00472B10) --------------------------------------------------------
std::basic_filebuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::close(std::basic_filebuf<char,std::char_traits<char> > *this)
{
  std::basic_filebuf<char,std::char_traits<char> > *v1; // esi@1
  std::basic_filebuf<char,std::char_traits<char> > *v2; // edi@1
  int v3; // ecx@6
  std::basic_filebuf<char,std::char_traits<char> > *result; // eax@6

  v1 = this;
  v2 = this;
  if ( !this->_Myfile )
    goto LABEL_9;
  if ( !std::basic_filebuf<char_std::char_traits<char>>::_Endwrite(this) )
    v2 = 0;
  if ( fclose(v1->_Myfile) )
LABEL_9:
    v2 = 0;
  v1->baseclass_0._IGfirst = &v1->baseclass_0._Gfirst;
  v1->_Closef = 0;
  v1->_Wrotesome = 0;
  v1->baseclass_0._IGnext = &v1->baseclass_0._Gnext;
  v1->baseclass_0._IPnext = &v1->baseclass_0._Pnext;
  v1->baseclass_0._IPfirst = &v1->baseclass_0._Pfirst;
  v1->baseclass_0._IGcount = &v1->baseclass_0._Gcount;
  v1->baseclass_0._IPcount = &v1->baseclass_0._Pcount;
  v1->baseclass_0._Pfirst = 0;
  *v1->baseclass_0._IPnext = 0;
  *v1->baseclass_0._IPcount = 0;
  *v1->baseclass_0._IGfirst = 0;
  *v1->baseclass_0._IGnext = 0;
  *v1->baseclass_0._IGcount = 0;
  v1->_Myfile = 0;
  v3 = _Stinit;
  result = v2;
  v1->_Pcvt = 0;
  v1->_State = v3;
  return result;
}

//----- (00472BA0) --------------------------------------------------------
void *__thiscall std::basic_filebuf<char_std::char_traits<char>>::_scalar_deleting_destructor_(std::basic_filebuf<char,std::char_traits<char> > *this, unsigned int a2)
{
  std::basic_filebuf<char,std::char_traits<char> > *v2; // esi@1
  char **v3; // ecx@2
  char *v4; // eax@3

  v2 = this;
  this->baseclass_0.vfptr = (std::basic_streambuf<char,std::char_traits<char> >Vtbl *)&std::basic_filebuf<char_std::char_traits<char>>::_vftable_;
  if ( this->_Myfile )
  {
    v3 = this->baseclass_0._IGfirst;
    if ( *v3 == &v2->_Mychar )
    {
      v4 = v2->_Set_egptr;
      *v3 = v2->_Set_eback;
      *v2->baseclass_0._IGnext = v4;
      *v2->baseclass_0._IGcount = 0;
    }
  }
  if ( v2->_Closef )
    std::basic_filebuf<char_std::char_traits<char>>::close(v2);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9893BC: using guessed type int (__thiscall *std__basic_filebuf_char_std__char_traits_char_____vftable_)(void *p, char);

//----- (00472C40) --------------------------------------------------------
void __thiscall std::basic_ifstream<char_std::char_traits<char>>::basic_ifstream<char_std::char_traits<char>>(std::basic_ifstream<char,std::char_traits<char> > *this)
{
  std::basic_ifstream<char,std::char_traits<char> > *v1; // ebx@1
  char *v2; // edi@3
  char v3; // al@3
  bool v4; // zf@3
  int v5; // [sp+1Ch] [bp+8h]@0

  v1 = this;
  if ( v5 )
  {
    *(_DWORD *)&this->___u0.baseclass_0.gap0[0] = &std::basic_ifstream<char_std::char_traits<char>>::_vbtable_;
    *(_DWORD *)&this->gap68[0] = &std::basic_ios<char_std::char_traits<char>>::_vftable_;
  }
  *(_DWORD *)&this->___u0.baseclass_0.gap0[*(_DWORD *)(*(_DWORD *)&this->___u0.baseclass_0.gap0[0] + 4)] = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
  this->___u0.baseclass_0._Chcount = 0i64;
  v2 = (char *)this + *(_DWORD *)(*(_DWORD *)&this->___u0.baseclass_0.gap0[0] + 4);
  std::ios_base::_Init((std::ios_base *)((char *)this + *(_DWORD *)(*(_DWORD *)&this->___u0.baseclass_0.gap0[0] + 4)));
  *((_DWORD *)v2 + 14) = (char *)v1 + 16;
  *((_DWORD *)v2 + 15) = 0;
  v3 = std::basic_ios<char_std::char_traits<char>>::widen((std::basic_ios<char,std::char_traits<char> > *)v2, 32);
  v4 = *((_DWORD *)v2 + 14) == 0;
  v2[64] = v3;
  if ( v4 )
    std::ios_base::clear((std::ios_base *)v2, *((_DWORD *)v2 + 3) | 4, 0);
  *(_DWORD *)&v1->___u0.baseclass_0.gap0[*(_DWORD *)(*(_DWORD *)&v1->___u0.baseclass_0.gap0[0] + 4)] = &std::basic_ifstream<char_std::char_traits<char>>::_vftable_;
  std::basic_streambuf<char_std::char_traits<char>>::basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)v1->___u0.baseclass_0.gap10);
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[32] = (char *)v1 + 40;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[0] = &std::basic_filebuf<char_std::char_traits<char>>::_vftable_;
  v1->___u0._s1._Filebuffer._Closef = 0;
  v1->___u0._s1._Filebuffer._Wrotesome = 0;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[16] = (char *)v1 + 24;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[36] = (char *)v1 + 44;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[48] = (char *)v1 + 56;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[20] = (char *)v1 + 28;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[52] = (char *)v1 + 60;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[12] = 0;
  **(_DWORD **)&v1->___u0.baseclass_0.gap10[36] = 0;
  **(_DWORD **)&v1->___u0.baseclass_0.gap10[52] = 0;
  **(_DWORD **)&v1->___u0.baseclass_0.gap10[16] = 0;
  **(_DWORD **)&v1->___u0.baseclass_0.gap10[32] = 0;
  **(_DWORD **)&v1->___u0.baseclass_0.gap10[48] = 0;
  v1->___u0._s1._Filebuffer._Myfile = 0;
  v1->___u0._s1._Filebuffer._State = _Stinit;
  *(_DWORD *)&v1->___u0.baseclass_0.gap10[68] = 0;
}
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);
// 9892A4: using guessed type int (__thiscall *std__basic_ios_char_std__char_traits_char_____vftable_)(void *p, char);
// 9893BC: using guessed type int (__thiscall *std__basic_filebuf_char_std__char_traits_char_____vftable_)(void *p, char);
// 9893FC: using guessed type int (__stdcall *std__basic_ifstream_char_std__char_traits_char_____vftable_)(char);

//----- (00472D70) --------------------------------------------------------
void __thiscall std::basic_ifstream<char_std::char_traits<char>>::_basic_ifstream<char_std::char_traits<char>>(std::basic_ifstream<char,std::char_traits<char> > *this)
{
  char *v1; // esi@1
  int v2; // ecx@2
  int v3; // eax@3

  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 26) + 4) - 104) = &std::basic_ifstream<char_std::char_traits<char>>::_vftable_;
  v1 = (char *)this - 88;
  *((_DWORD *)this - 22) = &std::basic_filebuf<char_std::char_traits<char>>::_vftable_;
  if ( *(_DWORD *)&this->___u0.baseclass_0.gap10[-20] )
  {
    v2 = *((_DWORD *)v1 + 4);
    if ( *(char **)v2 == v1 + 72 )
    {
      v3 = *((_DWORD *)v1 + 16);
      *(_DWORD *)v2 = *((_DWORD *)v1 + 15);
      **((_DWORD **)v1 + 8) = v3;
      **((_DWORD **)v1 + 12) = 0;
    }
  }
  if ( v1[80] )
    std::basic_filebuf<char_std::char_traits<char>>::close((std::basic_filebuf<char,std::char_traits<char> > *)v1);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)v1);
  *(_DWORD *)&v1[*(_DWORD *)(*((_DWORD *)v1 - 4) + 4) - 16] = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
}
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);
// 9893BC: using guessed type int (__thiscall *std__basic_filebuf_char_std__char_traits_char_____vftable_)(void *p, char);
// 9893FC: using guessed type int (__stdcall *std__basic_ifstream_char_std__char_traits_char_____vftable_)(char);

//----- (00472E20) --------------------------------------------------------
void __thiscall std::basic_ifstream<char_std::char_traits<char>>::_vbase_destructor(std::basic_ifstream<char,std::char_traits<char> > *this)
{
  std::ios_base *v1; // esi@1

  v1 = (std::ios_base *)this->gap68;
  std::basic_ifstream<char_std::char_traits<char>>::_basic_ifstream<char_std::char_traits<char>>((std::basic_ifstream<char,std::char_traits<char> > *)((char *)this + 104));
  v1->vfptr = (std::ios_baseVtbl *)&std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor(v1);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);

//----- (00472E40) --------------------------------------------------------
void *__thiscall std::basic_ifstream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_ifstream<char,std::char_traits<char> > *this, unsigned int a2)
{
  void *v2; // edi@1
  std::ios_base *v3; // esi@1

  v2 = (char *)this - 104;
  v3 = (std::ios_base *)this;
  std::basic_ifstream<char_std::char_traits<char>>::_basic_ifstream<char_std::char_traits<char>>(this);
  v3->vfptr = (std::ios_baseVtbl *)&std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);

//----- (00472E80) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl ClientVersionKeyInfo::getVersionKey(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  HINSTANCE__ *v1; // eax@1
  int v2; // ecx@2
  int v3; // eax@2
  char *v4; // ecx@2
  signed int v5; // eax@2
  int v6; // ecx@4
  int v7; // eax@4
  int v8; // eax@5
  int v9; // ecx@6
  int v10; // eax@6
  int v11; // esi@8
  void *v12; // edi@8
  int v13; // ecx@9
  int v14; // eax@9
  char *v15; // ecx@9
  int v16; // eax@9
  unsigned int v17; // ST10_4@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // esi@12
  std::basic_ifstream<char,std::char_traits<char> > mFile; // [sp+0h] [bp-2E8h]@1
  int v21; // [sp+B0h] [bp-238h]@6
  int v22; // [sp+B4h] [bp-234h]@7
  int v23; // [sp+B8h] [bp-230h]@6
  int v24; // [sp+BCh] [bp-22Ch]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v25; // [sp+C8h] [bp-220h]@1
  int v26; // [sp+CCh] [bp-21Ch]@1
  __int16 mFileName[260]; // [sp+D0h] [bp-218h]@1
  unsigned int v28; // [sp+2D8h] [bp-10h]@1
  int v29; // [sp+2E4h] [bp-4h]@1
  int v30; // [sp+2E8h] [bp+0h]@1

  v28 = (unsigned int)&v30 ^ __security_cookie;
  v29 = 0;
  v25 = result;
  v26 = 0;
  std::basic_ifstream<char_std::char_traits<char>>::basic_ifstream<char_std::char_traits<char>>(&mFile);
  v29 = 1;
  v1 = GetModuleHandleW(0);
  GetModuleFileNameW(v1, (LPWSTR)mFileName, 0x104u);
  if ( std::basic_filebuf<char_std::char_traits<char>>::open(
         (std::basic_filebuf<char,std::char_traits<char> > *)mFile.___u0.baseclass_0.gap10,
         (const wchar_t *)mFileName,
         33,
         64) )
  {
    v6 = *(_DWORD *)(*(_DWORD *)&mFile + 4);
    v7 = *(_DWORD *)&mFile.___u0.baseclass_0.gap10[v6 + 40];
    v4 = (char *)&mFile + v6;
    v5 = v7 != 0 ? 0 : 4;
  }
  else
  {
    v2 = *(_DWORD *)(*(_DWORD *)&mFile + 4);
    v3 = *(_DWORD *)((char *)&mFile.___u0.baseclass_0._Chcount + v2 + 4);
    v4 = (char *)&mFile + v2;
    v5 = v3 | 2;
    if ( !*((_DWORD *)v4 + 14) )
      v5 |= 4u;
  }
  std::ios_base::clear((std::ios_base *)v4, v5, 0);
  std::basic_istream<char_std::char_traits<char>>::seekg(&mFile.___u0.baseclass_0, 0i64, 2);
  v8 = *(_DWORD *)(*(_DWORD *)&mFile + 4);
  if ( *((_BYTE *)&mFile.___u0.baseclass_0._Chcount + v8 + 4) & 6 )
  {
    v22 = HIDWORD(std::_BADOFF);
    v10 = std::_BADOFF;
    v9 = 0;
    v24 = 0;
  }
  else
  {
    (*(void (__stdcall **)(int *, _DWORD, _DWORD, signed int, signed int))(**(_DWORD **)&mFile.___u0.baseclass_0.gap10[v8 + 40]
                                                                         + 40))(
      &v21,
      0,
      0,
      1,
      1);
    v9 = v23;
    v10 = v21;
  }
  v11 = v10 + v9;
  std::basic_istream<char_std::char_traits<char>>::seekg(&mFile.___u0.baseclass_0, 0i64, 0);
  v12 = operator new__(v11);
  std::basic_istream<char_std::char_traits<char>>::read(&mFile.___u0.baseclass_0, (char *)v12, v11);
  if ( !std::basic_filebuf<char_std::char_traits<char>>::close((std::basic_filebuf<char,std::char_traits<char> > *)mFile.___u0.baseclass_0.gap10) )
  {
    v13 = *(_DWORD *)(*(_DWORD *)&mFile + 4);
    v14 = *(_DWORD *)((char *)&mFile.___u0.baseclass_0._Chcount + v13 + 4);
    v15 = (char *)&mFile + v13;
    v16 = v14 | 2;
    if ( !*((_DWORD *)v15 + 14) )
      v16 |= 4u;
    std::ios_base::clear((std::ios_base *)v15, v16, 0);
  }
  v17 = v11;
  v18 = v25;
  CMD5Checksum::GetMD5(v25, (char *)v12, v17);
  v26 = 1;
  operator delete__(v12);
  LOBYTE(v29) = 0;
  std::basic_ifstream<char_std::char_traits<char>>::_basic_ifstream<char_std::char_traits<char>>((std::basic_ifstream<char,std::char_traits<char> > *)((char *)&mFile + 104));
  *(_DWORD *)&mFile.gap68[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)mFile.gap68);
  return v18;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 9DF6F8: using guessed type const __int64 std___BADOFF;
// A85C00: using guessed type int __security_cookie;

//----- (00473090) --------------------------------------------------------
void __thiscall AccountFrameWork::OnLoginWorldComplete(AccountFrameWork *this)
{
  PgFrameWork::PostFrameMsgChange(&this->baseclass_0, CharSelectFrameWorkID, 0);
}

//----- (004730A0) --------------------------------------------------------
void __thiscall AccountFrameWork::OnCharLoginComplete(AccountFrameWork *this)
{
  PgFrameWork::PostFrameMsgStart(&this->baseclass_0, ZoneLoginNetFrameWorkID, 0);
}

//----- (004730B0) --------------------------------------------------------
void __thiscall AccountFrameWork::OnZoneLoginComplete(AccountFrameWork *this)
{
  PgFrameWork::PostFrameMsgChange(&this->baseclass_0, LoadingFrameWorkID, 0);
}

//----- (004730C0) --------------------------------------------------------
void __thiscall AccountFrameWork::OnWrongVersionMsgClose(AccountFrameWork *this)
{
  NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
  PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
}

//----- (004730F0) --------------------------------------------------------
void __thiscall AccountFrameWork::Exit(AccountFrameWork *this)
{
  PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
}

//----- (00473100) --------------------------------------------------------
void __thiscall AccountFrameWork::WorldSelectOk(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  int v2; // eax@1
  unsigned int v3; // edi@1

  v1 = this;
  v2 = WorldSelectWin::GetSelectedWorldNum(this->m_pkWorldSelectWin);
  v3 = v2;
  if ( v2 >= 0 )
  {
    Server::SetSelectServerIndex(&g_kServer, v2);
    if ( !v1->m_bDuringWorldSelect )
    {
      AccountFrameWork::NcUserWorldSelectReq(v1, v3);
      v1->m_bDuringWorldSelect = 1;
    }
  }
}

//----- (00473140) --------------------------------------------------------
void __thiscall AccountFrameWork::SetResList(AccountFrameWork *this)
{
  this->m_ResList[1].m_uiResWidth = 1024;
  this->m_ResList[1].m_uiResHeight = 768;
  this->m_ResList[2].m_uiResHeight = 768;
  this->m_ResList[4].m_uiResHeight = 1024;
  this->m_ResList[2].m_uiResWidth = 1280;
  this->m_ResList[3].m_uiResWidth = 1280;
  this->m_ResList[4].m_uiResWidth = 1280;
  this->m_ResList[6].m_uiResWidth = 1600;
  this->m_ResList[6].m_uiResHeight = 1200;
  this->m_ResList[7].m_uiResWidth = 1600;
  this->m_ResList[9].m_uiResHeight = 1200;
  this->m_ResList[11].m_uiResWidth = 1280;
  this->m_ResList[0].m_uiResWidth = 800;
  this->m_ResList[0].m_uiResHeight = 600;
  this->m_ResList[0].m_bCheckAdd = 0;
  this->m_ResList[0].m_eAspect = 0;
  this->m_ResList[1].m_bCheckAdd = 0;
  this->m_ResList[1].m_eAspect = 0;
  this->m_ResList[2].m_bCheckAdd = 0;
  this->m_ResList[2].m_eAspect = 1;
  this->m_ResList[3].m_uiResHeight = 960;
  this->m_ResList[3].m_bCheckAdd = 0;
  this->m_ResList[3].m_eAspect = 0;
  this->m_ResList[4].m_bCheckAdd = 0;
  this->m_ResList[4].m_eAspect = 2;
  this->m_ResList[5].m_uiResWidth = 1400;
  this->m_ResList[5].m_uiResHeight = 1050;
  this->m_ResList[5].m_bCheckAdd = 0;
  this->m_ResList[5].m_eAspect = 0;
  this->m_ResList[6].m_bCheckAdd = 0;
  this->m_ResList[6].m_eAspect = 0;
  this->m_ResList[7].m_uiResHeight = 900;
  this->m_ResList[7].m_bCheckAdd = 0;
  this->m_ResList[7].m_eAspect = 4;
  this->m_ResList[8].m_uiResWidth = 1920;
  this->m_ResList[8].m_uiResHeight = 1400;
  this->m_ResList[8].m_bCheckAdd = 0;
  this->m_ResList[8].m_eAspect = 4;
  this->m_ResList[9].m_uiResWidth = 1920;
  this->m_ResList[9].m_bCheckAdd = 0;
  this->m_ResList[9].m_eAspect = 3;
  this->m_ResList[10].m_uiResWidth = 1680;
  this->m_ResList[10].m_uiResHeight = 1050;
  this->m_ResList[10].m_bCheckAdd = 0;
  this->m_ResList[10].m_eAspect = 3;
  this->m_ResList[11].m_uiResHeight = 800;
  this->m_ResList[11].m_bCheckAdd = 0;
  this->m_ResList[11].m_eAspect = 3;
  this->m_ResList[12].m_uiResWidth = 1600;
  this->m_ResList[12].m_uiResHeight = 900;
  this->m_ResList[12].m_bCheckAdd = 0;
  this->m_ResList[12].m_eAspect = 4;
  this->m_ResList[13].m_uiResWidth = 1440;
  this->m_ResList[13].m_uiResHeight = 900;
  this->m_ResList[13].m_bCheckAdd = 0;
  this->m_ResList[13].m_eAspect = 3;
  this->m_ResList[14].m_uiResWidth = 1920;
  this->m_ResList[14].m_uiResHeight = 1080;
  this->m_ResList[14].m_bCheckAdd = 0;
  this->m_ResList[14].m_eAspect = 4;
  this->m_ResList[15].m_uiResWidth = 2560;
  this->m_ResList[15].m_uiResHeight = 1440;
  this->m_ResList[15].m_bCheckAdd = 0;
  this->m_ResList[15].m_eAspect = 4;
  this->m_ResList[16].m_uiResWidth = 3840;
  this->m_ResList[16].m_uiResHeight = 2160;
  this->m_ResList[16].m_bCheckAdd = 0;
  this->m_ResList[16].m_eAspect = 4;
  this->m_ResList[17].m_uiResWidth = 1366;
  this->m_ResList[17].m_uiResHeight = 768;
  this->m_ResList[18].m_uiResHeight = 1440;
  this->m_ResList[17].m_bCheckAdd = 0;
  this->m_ResList[17].m_eAspect = 4;
  this->m_ResList[18].m_uiResWidth = 3440;
  this->m_ResList[18].m_bCheckAdd = 0;
  this->m_ResList[18].m_eAspect = 4;
}

//----- (004733A0) --------------------------------------------------------
void __thiscall AccountFrameWork::SetResListDefault(AccountFrameWork *this)
{
  char *v1; // eax@1
  signed int v2; // ecx@1

  v1 = (char *)&this->m_ResList[0].m_bCheckAdd;
  v2 = 21;
  do
  {
    *v1 = 0;
    v1 += 16;
    --v2;
  }
  while ( v2 );
}

//----- (004733C0) --------------------------------------------------------
void __thiscall AccountFrameWork::Draw(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  CPostProcessEffectManager *v2; // eax@2
  CPostProcessEffectManager *v3; // eax@2
  NiVisibleArray m_kVisible; // [sp+0h] [bp-B0h]@2
  NiCullingProcess m_kCuller; // [sp+10h] [bp-A0h]@2
  unsigned int v6; // [sp+A0h] [bp-10h]@1
  int v7; // [sp+ACh] [bp-4h]@2
  int v8; // [sp+B0h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  if ( this->m_spCamera.m_pObject )
  {
    m_kVisible.m_ppkArray = 0;
    m_kVisible.m_uiCurrentSize = 0;
    m_kVisible.m_uiAllocatedSize = 0;
    m_kVisible.m_uiGrowBy = 1024;
    NiVisibleArray::SetAllocatedSize(&m_kVisible, 0x400u);
    v7 = 0;
    NiCullingProcess::NiCullingProcess(&m_kCuller, &m_kVisible);
    LOBYTE(v7) = 1;
    v2 = CPostProcessEffectManager::GetInstance();
    CPostProcessEffectManager::OnRenderSceneStart(v2);
    NiDrawScene(v1->m_spCamera.m_pObject, &v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0, &m_kCuller, 0);
    v3 = CPostProcessEffectManager::GetInstance();
    CPostProcessEffectManager::OnRenderSceneEnd(v3);
    PgWinMgr::Draw(&Pgg_kWinMgr, NiRenderer::ms_pkRenderer);
    LOBYTE(v7) = 0;
    NiCullingProcess::_NiCullingProcess(&m_kCuller);
    operator delete(m_kVisible.m_ppkArray);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004734D0) --------------------------------------------------------
void __thiscall AccountFrameWork::ProcessInput(AccountFrameWork *this)
{
  KeyMap::Process(this->m_spKeyMap.m_pObject);
}

//----- (004734E0) --------------------------------------------------------
void __thiscall AccountFrameWork::OpenResolutionPopup(AccountFrameWork *this)
{
  AccountFrameWork *v1; // ebx@1
  NiDX9SystemDesc *v2; // eax@1
  bool v3; // zf@1
  NiDX9AdapterDesc *v4; // eax@2
  unsigned int v5; // edx@4
  int v6; // esi@4
  unsigned int v7; // edx@5
  unsigned int v8; // edi@6
  NiDX9AdapterDesc::ModeDesc *v9; // eax@7
  unsigned int v10; // ecx@8
  unsigned int v11; // eax@9
  PopupMenu *v12; // eax@12
  int v13; // eax@15
  signed int v14; // ecx@15
  unsigned int v15; // ebx@19
  NiDX9AdapterDesc::ModeDesc *v16; // eax@20
  unsigned int v17; // edi@21
  unsigned int v18; // eax@22
  unsigned int v19; // ecx@22
  PopupMenu *v20; // eax@27
  int v21; // eax@30
  signed int v22; // ecx@30
  PopupMenu *v23; // eax@33
  int systemScreenHeight; // [sp+Ch] [bp-14h]@4
  int systemScreenWidth; // [sp+10h] [bp-10h]@4
  AccountFrameWork *FullResNum; // [sp+14h] [bp-Ch]@1
  unsigned int FullResNuma; // [sp+14h] [bp-Ch]@5
  unsigned int WinResNum; // [sp+18h] [bp-8h]@18
  unsigned int uiModeCount; // [sp+1Ch] [bp-4h]@4

  v1 = this;
  FullResNum = this;
  PgWinMgr::DoModal(&Pgg_kWinMgr, &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  PopupMenuWin::Clear(v1->m_pkPopupMenuWin);
  v2 = NiDX9Renderer::GetSystemDesc();
  v3 = v2->m_kAdapterList.m_uiSize == 0;
  ms_pkInfo_0 = v2;
  if ( v3 )
    v4 = 0;
  else
    v4 = *v2->m_kAdapterList.m_pBase;
  v5 = v4->m_kModeList.m_uiSize;
  ms_pkAdapter_0 = v4;
  uiModeCount = v5;
  systemScreenWidth = GetSystemMetrics(0);
  systemScreenHeight = GetSystemMetrics(1);
  v6 = (int)v1->m_ResList;
  if ( MachineOpt::ms_kGraphicOption.bWindowFullMode )
  {
    v7 = 0;
    FullResNuma = 0;
    do
    {
      v8 = 0;
      if ( uiModeCount )
      {
        do
        {
          v9 = ms_pkAdapter_0->m_kModeList.m_pBase[v8];
          if ( !*(_BYTE *)(v6 + 8) )
          {
            v10 = v9->m_uiWidth;
            if ( v9->m_uiWidth == *(_DWORD *)v6 )
            {
              v11 = v9->m_uiHeight;
              if ( v11 == *(_DWORD *)(v6 + 4) )
              {
                if ( v10 != 800 || v11 != 600 )
                {
                  v12 = PopupMenuTemplate::AccountFrameGetResolutionMenu(v7);
                  PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v12);
                  v7 = FullResNuma;
                  *(_BYTE *)(v6 + 8) = 1;
                }
              }
            }
          }
          ++v8;
        }
        while ( v8 < uiModeCount );
      }
      ++v7;
      v6 += 16;
      FullResNuma = v7;
    }
    while ( v7 < 0x15 );
    v13 = (int)&v1->m_ResList[0].m_bCheckAdd;
    v14 = 21;
    do
    {
      *(_BYTE *)v13 = 0;
      v13 += 16;
      --v14;
    }
    while ( v14 );
  }
  else
  {
    WinResNum = 0;
    do
    {
      v15 = 0;
      if ( uiModeCount )
      {
        do
        {
          v16 = ms_pkAdapter_0->m_kModeList.m_pBase[v15];
          if ( !*(_BYTE *)(v6 + 8) )
          {
            v17 = v16->m_uiWidth;
            if ( v16->m_uiWidth == *(_DWORD *)v6 )
            {
              v18 = v16->m_uiHeight;
              v19 = *(_DWORD *)(v6 + 4);
              if ( v18 == v19 )
              {
                if ( (unsigned int)systemScreenWidth >= *(_DWORD *)v6
                  && systemScreenHeight >= v19
                  && (v17 != 800 || v18 != 600) )
                {
                  v20 = PopupMenuTemplate::AccountFrameGetResolutionMenu(WinResNum);
                  PopupMenuWin::AddMenu(FullResNum->m_pkPopupMenuWin, v20);
                  *(_BYTE *)(v6 + 8) = 1;
                }
              }
            }
          }
          ++v15;
        }
        while ( v15 < uiModeCount );
      }
      v6 += 16;
      ++WinResNum;
    }
    while ( WinResNum < 0x15 );
    v21 = (int)&FullResNum->m_ResList[0].m_bCheckAdd;
    v22 = 21;
    do
    {
      *(_BYTE *)v21 = 0;
      v21 += 16;
      --v22;
    }
    while ( v22 );
    v1 = FullResNum;
  }
  v23 = PopupMenuTemplate::GetCancelMenu();
  PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v23);
  PopupMenuWin::FinishMenu(v1->m_pkPopupMenuWin, 0);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
  PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
}

//----- (004736F0) --------------------------------------------------------
void __thiscall AccountFrameWork::SetOptionResolution(AccountFrameWork *this, unsigned int uiWidth, unsigned int uiHeight)
{
  WorldSelectWin *v3; // eax@1
  WorldSelectOptionSetWin *v4; // esi@2
  char temp[256]; // [sp+4h] [bp-104h]@3
  unsigned int v6; // [sp+104h] [bp-4h]@1
  int v7; // [sp+108h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = uiWidth;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = uiHeight;
  v3 = this->m_pkWorldSelectWin;
  if ( v3 )
  {
    v4 = v3->m_pkWorldSelectOptionSetWin;
    if ( v4 )
    {
      sprintf(temp, "%i x %i");
      WorldSelectOptionSetWin::SetResolutionText(v4, temp);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00473760) --------------------------------------------------------
void __thiscall AccountFrameWork::ChangeResolution(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  double v2; // st7@5
  float v3; // ST2C_4@8
  WorldSelectWin *v4; // ecx@9

  v1 = this;
  if ( this->m_pkBack )
  {
    ((void (__stdcall *)(unsigned int))this->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(PgWin::ms_uiScreenWidth);
    ((void (__stdcall *)(unsigned int))v1->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(PgWin::ms_uiScreenHeight);
  }
  if ( v1->m_pkAge12 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkAge12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.89999998,
      0.1);
  v2 = 1.0;
  if ( v1->m_aragon )
  {
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_aragon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      1.0,
      1.0);
    v2 = 1.0;
  }
  if ( v1->m_pkPublisherWin )
  {
    v3 = v2;
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkPublisherWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.0,
      LODWORD(v3));
  }
  v4 = v1->m_pkWorldSelectWin;
  if ( v4 )
    WorldSelectWin::UpdateWinPos(v4);
}

//----- (00473840) --------------------------------------------------------
void __thiscall AccountFrameWork::OnWorldMgrConnectFail(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  char *v2; // eax@1

  v1 = this;
  v2 = TextData::Get(0x40526158u);
  MsgBox::Modal(MSGBOX_OK, v2);
  AccountWin::ActiveInput(v1->m_pkAccountWin);
}

//----- (00473870) --------------------------------------------------------
void __thiscall AccountFrameWork::OnLoginWorldFail(AccountFrameWork *this, unsigned int uiwParam)
{
  AccountFrameWork *v2; // esi@1
  char *v3; // eax@1

  v2 = this;
  TextData::Get(0x1A1F264Bu);
  v3 = fs("%s error_code: %o");
  MsgBox::Modal(MSGBOX_OK, v3);
  AccountWin::ActiveInput(v2->m_pkAccountWin);
}

//----- (004738B0) --------------------------------------------------------
void __thiscall AccountFrameWork::OnCharLoginFail(AccountFrameWork *this, unsigned int uiwParam)
{
  AccountFrameWork *v2; // esi@1
  char *v3; // eax@1

  v2 = this;
  v3 = TextData::Get(0x1A1F264Bu);
  MsgBox::Modal(MSGBOX_OK, v3);
  AccountWin::ActiveInput(v2->m_pkAccountWin);
}

//----- (004738E0) --------------------------------------------------------
void __thiscall AccountFrameWork::OnZoneServerConnectFail(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  char *v2; // eax@1

  v1 = this;
  v2 = TextData::Get(0x414F1857u);
  MsgBox::Modal(MSGBOX_OK, v2);
  AccountWin::ActiveInput(v1->m_pkAccountWin);
}

//----- (00473910) --------------------------------------------------------
void __thiscall AccountFrameWork::OnZoneLoginFail(AccountFrameWork *this, unsigned int uiwParam)
{
  AccountFrameWork *v2; // esi@1
  char *v3; // eax@1

  v2 = this;
  v3 = TextData::Get(0xD11E2748u);
  MsgBox::Modal(MSGBOX_OK, v3);
  AccountWin::ActiveInput(v2->m_pkAccountWin);
}

//----- (00473940) --------------------------------------------------------
void __thiscall AccountFrameWork::OnInitializeState(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1

  v1 = this;
  this->m_bDuringWorldSelect = 0;
  if ( g_kServer.m_bCP )
  {
    PgNet::Close(&g_kNetMgr.m_spLogin.m_pObject->baseclass_0);
    PgNet::Close(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0);
    PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkWorldSelectWin->baseclass_0.baseclass_0.baseclass_0);
    AccountWin::ActiveInput(v1->m_pkAccountWin);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkAccountWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (004739B0) --------------------------------------------------------
void __thiscall AccountFrameWork::TryUserLogin(AccountFrameWork *this, char *pcID, char *pcPasswd)
{
  AccountFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  strncpy(g_kUser.m_acUserID, pcID, 0x12u);
  byte_AA2D72 = 0;
  strncpy(source, pcPasswd, 0x10u);
  byte_AA2D83 = 0;
  AccountWin::DeactiveInput(v3->m_pkAccountWin);
  if ( !(unsigned __int8)((int (*)(void))v3->m_spLoginNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)() )
  {
    v4 = TextData::Get(0xC50DD512u);
    MsgBox::Modal(MSGBOX_OK, v4);
    AccountWin::ActiveInput(v3->m_pkAccountWin);
  }
}
// AA2D72: using guessed type char byte_AA2D72;
// AA2D83: using guessed type char byte_AA2D83;

//----- (00473A20) --------------------------------------------------------
void __thiscall AccountFrameWork::WorldSelectCancel(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1
  PgWin *v2; // ST00_4@3
  PgWin *v3; // esi@3

  v1 = this;
  if ( g_kServer.m_bCP )
  {
    PgNet::Close(&g_kNetMgr.m_spLogin.m_pObject->baseclass_0);
    PgNet::Close(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0);
    PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
  }
  else
  {
    v2 = (PgWin *)this->m_pkWorldSelectWin;
    this->m_bDuringWorldSelect = 0;
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
    AccountWin::ActiveInput(v1->m_pkAccountWin);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkAccountWin->baseclass_0.baseclass_0.baseclass_0);
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    v3 = (PgWin *)v1->m_pkSignUpWin;
    if ( v3 )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
  }
}

//----- (00473AB0) --------------------------------------------------------
void __thiscall AccountFrameWork::RenderShadow(AccountFrameWork *this)
{
  int v1; // eax@1
  NsPgToonExtraData *v2; // ecx@1
  bool v3; // dl@1
  int v4; // esi@1
  unsigned int v5; // edi@2
  int v6; // ebx@3
  int v7; // edx@4
  int v8; // eax@5
  float v9; // ST18_4@5
  float v10; // ecx@5
  int v11; // edx@8
  NiPoint3 kCharPos; // [sp+14h] [bp-18h]@5
  NsPgToonExtraData *pkToonExtraData; // [sp+20h] [bp-Ch]@1
  int v14; // [sp+24h] [bp-8h]@1
  bool bOldToonFlag; // [sp+2Bh] [bp-1h]@1

  v1 = (int)this;
  v2 = Engine3D::ms_spToonExtraData;
  v3 = Engine3D::ms_spToonExtraData->m_bOn;
  Engine3D::ms_spToonExtraData->m_bOn = 0;
  v4 = *(_DWORD *)(v1 + 152);
  v14 = v1;
  pkToonExtraData = v2;
  bOldToonFlag = v3;
  if ( v4 )
  {
    v5 = 0;
    if ( *(_DWORD *)(v1 + 180) )
    {
      do
      {
        v6 = *(_DWORD *)(v4 + 8);
        v4 = *(_DWORD *)v4;
        if ( v6 )
        {
          v7 = *(_DWORD *)(v1 + 184);
          if ( (*(_DWORD *)(v1 + 188) - v7) >> 2 >= v5 )
            break;
          v8 = *(_DWORD *)(v7 + 4 * v5);
          LODWORD(v9) = *(_DWORD *)(v8 + 40);
          LODWORD(v10) = *(_DWORD *)(v8 + 44);
          LODWORD(kCharPos.x) = *(_DWORD *)(v8 + 36);
          kCharPos.z = v10;
          kCharPos.y = v9;
          Shadow::Render((Shadow *)v6, *(NiNode **)(v7 + 4 * v5), &kCharPos);
          *(_WORD *)(*(_DWORD *)(v6 + 116) + 28) &= 0xFFFEu;
          v1 = v14;
          v2 = pkToonExtraData;
        }
        ++v5;
      }
      while ( v5 < *(_DWORD *)(v1 + 180) );
    }
    while ( v4 )
    {
      v11 = *(_DWORD *)(v4 + 8);
      v4 = *(_DWORD *)v4;
      *(_WORD *)(*(_DWORD *)(v11 + 116) + 28) |= 1u;
    }
    v2->m_bOn = bOldToonFlag;
  }
}

//----- (00473B90) --------------------------------------------------------
void __thiscall AccountFrameWork::SetOptionResolution(AccountFrameWork *this, unsigned int uiParam)
{
  AccountFrameWork *v2; // edx@1
  unsigned int v3; // eax@2
  unsigned int v4; // ecx@2
  WorldSelectWin *v5; // edx@21
  WorldSelectOptionSetWin *v6; // esi@22
  char pcResolutionText; // [sp+0h] [bp-104h]@23
  unsigned int v8; // [sp+100h] [bp-4h]@1
  int v9; // [sp+104h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  AccountFrameWork::ms_bWindowSizeChanged = 1;
  switch ( uiParam )
  {
    case 0u:
      v3 = 800;
      v4 = 600;
      break;
    case 2u:
      v3 = 1280;
      goto LABEL_20;
    case 3u:
      v3 = 1280;
      v4 = 960;
      break;
    case 4u:
      v3 = 1280;
      v4 = 1024;
      break;
    case 5u:
      v3 = 1400;
      v4 = 1050;
      break;
    case 6u:
      v3 = 1600;
      v4 = 1200;
      break;
    case 7u:
    case 0xCu:
      v3 = 1600;
      v4 = 900;
      break;
    case 8u:
      v3 = 1920;
      v4 = 1440;
      break;
    case 9u:
      v3 = 1920;
      v4 = 1200;
      break;
    case 0xAu:
      v3 = 1680;
      v4 = 1050;
      break;
    case 0xBu:
      v3 = 1280;
      v4 = 800;
      break;
    case 0xDu:
      v3 = 1440;
      v4 = 900;
      break;
    case 0xEu:
      v3 = 1920;
      v4 = 1080;
      break;
    case 0xFu:
      v3 = 2560;
      v4 = 1440;
      break;
    case 0x10u:
      v3 = 3840;
      v4 = 2160;
      break;
    case 0x11u:
      v3 = 1366;
      goto LABEL_20;
    case 0x12u:
      v3 = 3440;
      v4 = 1440;
      break;
    default:
      v3 = 1024;
LABEL_20:
      v4 = 768;
      break;
  }
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v3;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v4;
  v5 = v2->m_pkWorldSelectWin;
  if ( v5 )
  {
    v6 = v5->m_pkWorldSelectOptionSetWin;
    if ( v6 )
    {
      sprintf(&pcResolutionText, "%i x %i");
      WorldSelectOptionSetWin::SetResolutionText(v6, &pcResolutionText);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A98290: using guessed type bool AccountFrameWork__ms_bWindowSizeChanged;

//----- (00473D40) --------------------------------------------------------
void __thiscall AccountFrameWork::Update(AccountFrameWork *this, float fCurTime)
{
  AccountFrameWork *v2; // esi@1
  Net *v3; // ecx@1
  NiNode *v4; // ecx@9
  float v5; // ST1C_4@11
  PgNet *v6; // ecx@13
  NiAVObject *v7; // ecx@15
  float v8; // ST20_4@16
  Net *v9; // eax@17
  char *v10; // eax@20
  MsgBox *v11; // eax@20
  char *v12; // eax@21
  Net *v13; // eax@23
  char *v14; // eax@26
  MsgBox *v15; // eax@26
  char *v16; // eax@27
  WorldSelectWin *v17; // ecx@29
  SteamCallback *v18; // ecx@35
  void *v19; // eax@36
  int v20; // eax@37
  unsigned int v21; // [sp+10h] [bp-4Ch]@1
  PgMsg::Frame kMsg; // [sp+24h] [bp-38h]@22
  PgMsg::Frame pkFrameMsg; // [sp+38h] [bp-24h]@28
  unsigned int v24; // [sp+4Ch] [bp-10h]@1
  int v25; // [sp+58h] [bp-4h]@36
  int v26; // [sp+5Ch] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  v21 = (unsigned int)&v26 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spLoginNet.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(AccountFrameWork *, signed int))v3->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
  PgWinMgr::ProcessInput(&Pgg_kWinMgr, 1);
  PgWinMgr::DispatchMessageA(&Pgg_kWinMgr);
  PgWinMgr::UpdateWin(&Pgg_kWinMgr, fCurTime);
  KeyMap::Process(v2->m_spKeyMap.m_pObject);
  AccountFrameWork::RenderShadow(v2);
  if ( 0.0 == v2->m_fFrameStartTime )
    v2->m_fFrameStartTime = fCurTime;
  if ( v2->m_pkTimeController )
  {
    if ( g_kSoundMgr.m_pkBGMGroup && !SoundGroupBgm::IsBGMPlaying(g_kSoundMgr.m_pkBGMGroup) )
      SoundMgr::PlayBGM(&g_kSoundMgr, "LoginBackground.mp3");
    v4 = v2->m_pkAniLogo;
    if ( v4 )
    {
      if ( !(v4->baseclass_0.m_uFlags & 1) )
      {
        v5 = fCurTime - v2->m_fFrameStartTime;
        if ( v2->m_pkTimeController->m_fHiKeyTime <= (double)v5 )
        {
          v4->baseclass_0.m_uFlags |= 1u;
          v2->m_pkStaticLogo->baseclass_0.m_uFlags &= 0xFFFEu;
        }
      }
    }
  }
  v6 = (PgNet *)v2->m_spLoginNet.m_pObject;
  if ( v6 )
    PgNet::Flush(v6);
  v7 = (NiAVObject *)v2->m_spBackgroundScene.m_pObject;
  if ( v7 )
  {
    v8 = fCurTime - v2->m_fFrameStartTime;
    NiAVObject::Update(v7, v8, 1);
  }
  v9 = v2->m_spLoginNet.m_pObject;
  if ( v9 && v9->baseclass_0.m_bCut )
  {
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    if ( g_kServer.m_bDoubleConnected == 1 )
    {
      v10 = TextData::Get(0x16526A50u);
      v11 = MsgBox::Modal(MSGBOX_OK, v10);
      g_kServer.m_bDoubleConnected = 0;
    }
    else
    {
      v12 = TextData::Get(0xD009162Fu);
      v11 = MsgBox::Modal(MSGBOX_OK, v12);
    }
    kMsg.m_uiFrameMsg = 20;
    MsgBox::SetFrameWorkMsgOnClose(v11, &v2->baseclass_0, &kMsg, 0);
  }
  v13 = v2->m_spWorldMgrNet.m_pObject;
  if ( v13 && v13->baseclass_0.m_bCut )
  {
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    if ( g_kServer.m_bDoubleConnected == 1 )
    {
      v14 = TextData::Get(0x16526A50u);
      v15 = MsgBox::Modal(MSGBOX_OK, v14);
      g_kServer.m_bDoubleConnected = 0;
    }
    else
    {
      v16 = TextData::Get(0xD3141630u);
      v15 = MsgBox::Modal(MSGBOX_OK, v16);
    }
    pkFrameMsg.m_uiFrameMsg = 20;
    MsgBox::SetFrameWorkMsgOnClose(v15, &v2->baseclass_0, &pkFrameMsg, 0);
  }
  v17 = v2->m_pkWorldSelectWin;
  if ( v17
    && (unsigned __int8)((int (__cdecl *)(unsigned int))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v21) )
  {
    if ( !(_S3_1 & 1) )
    {
      _S3_1 |= 1u;
      dwPrevTime = timeGetTime();
    }
    if ( timeGetTime() > dwPrevTime + 10000 )
    {
      AccountFrameWork::NcUserWorldStatusReq(v2);
      dwPrevTime = timeGetTime();
    }
  }
  SoundMgr::Update(&g_kSoundMgr, fCurTime, 0);
  v18 = (SteamCallback *)SteamCallback::This;
  if ( !SteamCallback::This )
  {
    v19 = operator new(0x2Cu);
    v25 = 0;
    if ( v19 )
      SteamCallback::SteamCallback((SteamCallback *)v19);
    else
      v20 = 0;
    v18 = (SteamCallback *)v20;
    v25 = -1;
    SteamCallback::This = v20;
  }
  SteamCallback::Update(v18);
}
// A85C00: using guessed type int __security_cookie;
// A95A04: using guessed type int SteamCallback__This;

//----- (00474010) --------------------------------------------------------
void __thiscall AccountFrameWork::ProcessMsg(AccountFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  WorldSelectWin *v4; // ecx@16
  WorldSelectOptionSetWin *v5; // esi@17
  WorldSelectWin *v6; // ecx@19
  WorldSelectOptionSetWin *v7; // esi@20
  WorldSelectWin *v8; // ecx@22
  WorldSelectOptionSetWin *v9; // esi@23
  WorldSelectWin *v10; // ecx@25
  WorldSelectOptionSetWin *v11; // esi@26
  WorldSelectWin *v12; // ecx@28
  WorldSelectWin *v13; // ecx@31
  WorldSelectOptionSetWin *v14; // esi@32
  WorldSelectWin *v15; // ecx@34
  WorldSelectOptionSetWin *v16; // esi@35
  WorldSelectWin *v17; // ecx@37
  WorldSelectWin *v18; // ecx@40
  WorldSelectOptionSetWin *v19; // esi@41
  WorldSelectWin *v20; // ecx@43
  WorldSelectOptionSetWin *v21; // esi@44
  WorldSelectWin *v22; // ecx@46
  WorldSelectOptionSetWin *v23; // esi@47
  WorldSelectWin *v24; // ecx@49
  WorldSelectOptionSetWin *v25; // esi@50
  WorldSelectWin *v26; // ecx@52
  WorldSelectOptionSetWin *v27; // esi@53
  WorldSelectWin *v28; // ecx@55
  WorldSelectWin *v29; // ecx@58
  WorldSelectOptionSetWin *v30; // esi@59
  WorldSelectWin *v31; // ecx@61
  WorldSelectOptionSetWin *v32; // esi@62
  WorldSelectWin *v33; // ecx@64
  WorldSelectOptionSetWin *v34; // esi@65
  WorldSelectWin *v35; // ecx@67
  WorldSelectOptionSetWin *v36; // esi@68
  unsigned int v37; // [sp-8h] [bp-10Ch]@15
  char pcResolutionText; // [sp+0h] [bp-104h]@18
  unsigned int v39; // [sp+100h] [bp-4h]@1
  int v40; // [sp+104h] [bp+0h]@1

  v39 = (unsigned int)&v40 ^ __security_cookie;
  switch ( uiMsg )
  {
    case 9u:
      AccountFrameWork::OnWorldMgrConnectFail(this);
      return;
    case 0xAu:
      PgFrameWork::PostFrameMsgChange(&this->baseclass_0, CharSelectFrameWorkID, 0);
      return;
    case 0xBu:
      AccountFrameWork::OnLoginWorldFail(this, uiwParam);
      return;
    case 0xCu:
      PgFrameWork::PostFrameMsgStart(&this->baseclass_0, ZoneLoginNetFrameWorkID, 0);
      return;
    case 0xDu:
      AccountFrameWork::OnCharLoginFail(this, uiwParam);
      return;
    case 0xFu:
      AccountFrameWork::OnZoneServerConnectFail(this);
      return;
    case 0x10u:
      PgFrameWork::PostFrameMsgChange(&this->baseclass_0, LoadingFrameWorkID, 0);
      return;
    case 0x11u:
      AccountFrameWork::OnZoneLoginFail(this, uiwParam);
      return;
    case 0x12u:
      AccountFrameWork::OnWrongVersionMsgClose(this);
      return;
    case 0x13u:
      AccountFrameWork::NcUserWorldStatusReq(this);
      return;
    case 0x14u:
      *(_DWORD *)source = 0;
      dword_AA2D77 = 0;
      dword_AA2D7B = 0;
      dword_AA2D7F = 0;
      byte_AA2D83 = 0;
      AccountFrameWork::OnInitializeState(this);
      return;
    case 0xEu:
      *(_DWORD *)source = 0;
      dword_AA2D77 = 0;
      dword_AA2D7B = 0;
      dword_AA2D7F = 0;
      byte_AA2D83 = 0;
      PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
      return;
    case 0x15u:
      AccountFrameWork::OpenResolutionPopup(this);
      return;
    case 0x16u:
      v37 = 0;
      goto LABEL_71;
    case 0x17u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1024;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 768;
      v4 = this->m_pkWorldSelectWin;
      if ( v4 )
      {
        v5 = v4->m_pkWorldSelectOptionSetWin;
        if ( v5 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v5, &pcResolutionText);
        }
      }
      return;
    case 0x18u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1280;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 768;
      v6 = this->m_pkWorldSelectWin;
      if ( v6 )
      {
        v7 = v6->m_pkWorldSelectOptionSetWin;
        if ( v7 )
          goto LABEL_57;
      }
      return;
    case 0x19u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1280;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 960;
      v8 = this->m_pkWorldSelectWin;
      if ( v8 )
      {
        v9 = v8->m_pkWorldSelectOptionSetWin;
        if ( v9 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v9, &pcResolutionText);
        }
      }
      return;
    case 0x1Au:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1280;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1024;
      v10 = this->m_pkWorldSelectWin;
      if ( v10 )
      {
        v11 = v10->m_pkWorldSelectOptionSetWin;
        if ( v11 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v11, &pcResolutionText);
        }
      }
      return;
    case 0x1Bu:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1400;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1050;
      v12 = this->m_pkWorldSelectWin;
      if ( v12 )
      {
        v7 = v12->m_pkWorldSelectOptionSetWin;
        if ( v7 )
          goto LABEL_57;
      }
      return;
    case 0x1Cu:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1600;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1200;
      v13 = this->m_pkWorldSelectWin;
      if ( v13 )
      {
        v14 = v13->m_pkWorldSelectOptionSetWin;
        if ( v14 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v14, &pcResolutionText);
        }
      }
      return;
    case 0x1Du:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1600;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 900;
      v15 = this->m_pkWorldSelectWin;
      if ( v15 )
      {
        v16 = v15->m_pkWorldSelectOptionSetWin;
        if ( v16 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v16, &pcResolutionText);
        }
      }
      return;
    case 0x1Eu:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1920;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1440;
      v17 = this->m_pkWorldSelectWin;
      if ( v17 )
      {
        v7 = v17->m_pkWorldSelectOptionSetWin;
        if ( v7 )
          goto LABEL_57;
      }
      break;
    case 0x1Fu:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1920;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1200;
      v18 = this->m_pkWorldSelectWin;
      if ( v18 )
      {
        v19 = v18->m_pkWorldSelectOptionSetWin;
        if ( v19 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v19, &pcResolutionText);
        }
      }
      break;
    case 0x20u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1680;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1050;
      v20 = this->m_pkWorldSelectWin;
      if ( v20 )
      {
        v21 = v20->m_pkWorldSelectOptionSetWin;
        if ( v21 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v21, &pcResolutionText);
        }
      }
      break;
    case 0x21u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1280;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 800;
      v22 = this->m_pkWorldSelectWin;
      if ( v22 )
      {
        v23 = v22->m_pkWorldSelectOptionSetWin;
        if ( v23 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v23, &pcResolutionText);
        }
      }
      break;
    case 0x22u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1600;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 900;
      v24 = this->m_pkWorldSelectWin;
      if ( v24 )
      {
        v25 = v24->m_pkWorldSelectOptionSetWin;
        if ( v25 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v25, &pcResolutionText);
        }
      }
      break;
    case 0x23u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1440;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 900;
      v26 = this->m_pkWorldSelectWin;
      if ( v26 )
      {
        v27 = v26->m_pkWorldSelectOptionSetWin;
        if ( v27 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v27, &pcResolutionText);
        }
      }
      break;
    case 0x24u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1920;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1080;
      v28 = this->m_pkWorldSelectWin;
      if ( v28 )
      {
        v7 = v28->m_pkWorldSelectOptionSetWin;
        if ( v7 )
        {
LABEL_57:
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v7, &pcResolutionText);
        }
      }
      break;
    case 0x25u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 2560;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1440;
      v29 = this->m_pkWorldSelectWin;
      if ( v29 )
      {
        v30 = v29->m_pkWorldSelectOptionSetWin;
        if ( v30 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v30, &pcResolutionText);
        }
      }
      break;
    case 0x26u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 3840;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 2160;
      v31 = this->m_pkWorldSelectWin;
      if ( v31 )
      {
        v32 = v31->m_pkWorldSelectOptionSetWin;
        if ( v32 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v32, &pcResolutionText);
        }
      }
      break;
    case 0x27u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 1366;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 768;
      v33 = this->m_pkWorldSelectWin;
      if ( v33 )
      {
        v34 = v33->m_pkWorldSelectOptionSetWin;
        if ( v34 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v34, &pcResolutionText);
        }
      }
      break;
    case 0x28u:
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = 3440;
      MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = 1440;
      v35 = this->m_pkWorldSelectWin;
      if ( v35 )
      {
        v36 = v35->m_pkWorldSelectOptionSetWin;
        if ( v36 )
        {
          sprintf(&pcResolutionText, "%i x %i");
          WorldSelectOptionSetWin::SetResolutionText(v36, &pcResolutionText);
        }
      }
      break;
    case 0x29u:
      v37 = 19;
LABEL_71:
      AccountFrameWork::SetOptionResolution(this, v37);
      break;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;
// A98290: using guessed type bool AccountFrameWork__ms_bWindowSizeChanged;
// AA2D77: using guessed type int dword_AA2D77;
// AA2D7B: using guessed type int dword_AA2D7B;
// AA2D7F: using guessed type int dword_AA2D7F;
// AA2D83: using guessed type char byte_AA2D83;

//----- (004749C0) --------------------------------------------------------
void __thiscall AccountFrameWork::ApplyTerrain(AccountFrameWork *this, NiNode *pkGroundNode)
{
  NiTListItem<NiPointer<Shadow> > *v2; // ebx@1
  Shadow *v3; // esi@2
  NiNode *v4; // eax@2
  NiNode *v5; // edi@2
  NiCollisionGroup *v6; // ecx@9
  AccountFrameWork *v7; // [sp+28h] [bp-Ch]@1
  NiAVObject *pkObject; // [sp+2Ch] [bp-8h]@2
  unsigned int i; // [sp+30h] [bp-4h]@1

  v2 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v7 = this;
  for ( i = 0; v2; ++i )
  {
    v3 = v2->m_element.m_pObject;
    v4 = v3->m_kDecal.m_spObTerrain.m_pObject;
    v2 = v2->m_pkNext;
    v5 = v4;
    pkObject = (NiAVObject *)v3->m_kDecal.m_spObTerrain.m_pObject;
    if ( v4 != pkGroundNode )
    {
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v3->m_kDecal.m_spObTerrain.m_pObject = pkGroundNode;
      if ( pkGroundNode )
        InterlockedIncrement((volatile LONG *)&pkGroundNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v6 = v3->m_kDecal.m_pkCollisionGroup;
    if ( v6 )
    {
      if ( pkObject )
        NiCollisionGroup::RemoveCollidee(v6, pkObject);
      if ( pkGroundNode )
        NiCollisionGroup::AddCollidee(
          v3->m_kDecal.m_pkCollisionGroup,
          &v3->m_kDecal.m_spObTerrain.m_pObject->baseclass_0,
          0,
          -1,
          1);
    }
    if ( (signed int)((char *)v7->m_vecShadowObject.baseclass_0._Mylast
                    - *(_DWORD *)&v7->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 <= i )
      break;
    if ( *(float *)(*(_DWORD *)(*(_DWORD *)&v7->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * i) + 48) > 100.0 )
      NsDecal::SetDecalSize(&v3->m_kDecal, 1200.0, 1200.0);
  }
}

//----- (00474AD0) --------------------------------------------------------
void __thiscall AccountFrameWork::AccountFrameWork(AccountFrameWork *this)
{
  AccountFrameWork *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&AccountFrameWork::_vftable_;
  *(_DWORD *)&v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&PgTList<PgWin__>::_vftable_;
  v1->m_spKeyMap.m_pObject = 0;
  v1->m_spLoginNet.m_pObject = 0;
  v1->m_spWorldMgrNet.m_pObject = 0;
  v1->m_spBackgroundScene.m_pObject = 0;
  v1->m_spCamera.m_pObject = 0;
  v1->m_spShadowScene.m_pObject = 0;
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  v1->m_pkBack = 0;
  v1->m_pkAge12 = 0;
  v1->m_aragon = 0;
  v1->m_pkAccountWin = 0;
  v1->m_pkWorldSelectWin = 0;
  v1->m_bDuringWorldSelect = 0;
  v1->m_bFirstRun = 1;
  *(_DWORD *)&v1->m_OTP.n8_name[0] = 0;
  *(_DWORD *)&v1->m_OTP.n8_name[4] = 0;
  *(_DWORD *)&v1->m_OTP.n8_name[8] = 0;
  *(_DWORD *)&v1->m_OTP.n8_name[12] = 0;
  *(_DWORD *)&v1->m_OTP.n8_name[16] = 0;
  *(_DWORD *)&v1->m_OTP.n8_name[20] = 0;
  *(_DWORD *)&v1->m_OTP.n8_name[24] = 0;
  *(_DWORD *)&v1->m_OTP.n8_name[28] = 0;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 989480: using guessed type int (__thiscall *PgTList_PgWin _____vftable_)(void *p, char);
// 989494: using guessed type int (__stdcall *AccountFrameWork___vftable_)(int uiFlags);

//----- (00474BD0) --------------------------------------------------------
void __thiscall AccountFrameWork::_AccountFrameWork(AccountFrameWork *this)
{
  AccountFrameWork *v1; // edi@1
  int v2; // esi@5
  NiTListItem<NiPointer<Shadow> > *v3; // ebx@5
  NiTListItem<NiPointer<Shadow> > *v4; // ST00_4@6
  NiNode *v5; // esi@7
  NiCamera *v6; // esi@11
  NiSortAdjustNode *v7; // esi@15
  Net *v8; // esi@19
  Net *v9; // esi@23
  KeyMap *v10; // esi@27
  int v11; // ebx@31
  NiTListItem<PgWin *> *v12; // esi@31
  NiTListItem<PgWin *> *v13; // eax@31
  NiTListItem<PgWin *> *v14; // ST00_4@32
  void *v15; // ST00_4@34

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&AccountFrameWork::_vftable_;
  this->m_bDuringWorldSelect = 0;
  if ( *(_DWORD *)&this->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  v2 = (int)&v1->m_kShadowList;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v3 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(&v1->m_kShadowList, v4);
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  v5 = v1->m_spShadowScene.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spCamera.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spBackgroundScene.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spWorldMgrNet.m_pObject;
  if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.m_uiRefCount) && v8 )
    v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spLoginNet.m_pObject;
  if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.m_uiRefCount) && v9 )
    v9->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  v10 = v1->m_spKeyMap.m_pObject;
  if ( v10 && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.m_uiRefCount) && v10 )
    v10->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = (int)&v1->m_ReceiveWinList;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&PgTList<PgWin__>::_vftable_;
  v12 = v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v13 = 0;
  if ( v12 )
  {
    do
    {
      v14 = v12;
      v12 = v12->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v11 + 8))(&v1->m_ReceiveWinList, v14);
    }
    while ( v12 );
    v13 = 0;
  }
  *(_DWORD *)&v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v13;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v13;
  v1->m_ReceiveWinList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v13;
  *(_DWORD *)v11 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
  v15 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v15);
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 989450: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);
// 989480: using guessed type int (__thiscall *PgTList_PgWin _____vftable_)(void *p, char);
// 989494: using guessed type int (__stdcall *AccountFrameWork___vftable_)(int uiFlags);

//----- (00474DE0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
}
// 989450: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);

//----- (00474DF0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 989450: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);

//----- (00474E20) --------------------------------------------------------
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PgWin *> *this)
{
  *(_DWORD *)&this->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->baseclass_0.m_pkHead = 0;
  this->baseclass_0.m_pkTail = 0;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
}
// 989460: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);

//----- (00474E40) --------------------------------------------------------
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>(NiTPointerList<PgWin *> *this)
{
  NiTPointerList<PgWin *> *v1; // edi@1
  NiTListItem<PgWin *> *v2; // esi@1
  NiTListItem<PgWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
}
// 989450: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);
// 989460: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);

//----- (00474EC0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vector_deleting_destructor_(NiTPointerList<PgWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PgWin *> *v3; // esi@1
  NiTListItem<PgWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989450: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);
// 989460: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);

//----- (00474F50) --------------------------------------------------------
void __thiscall NiTPointerList<PgWin__>::NiTPointerList<PgWin__>(NiTPointerList<PgWin *> *this)
{
  *(_DWORD *)&this->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->baseclass_0.baseclass_0.m_pkHead = 0;
  this->baseclass_0.baseclass_0.m_pkTail = 0;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTPointerList<PgWin__>::_vftable_;
}
// 989470: using guessed type int (__thiscall *NiTPointerList_PgWin _____vftable_)(void *p, char);

//----- (00474F70) --------------------------------------------------------
void __thiscall PgTList<PgWin__>::_PgTList<PgWin__>(PgTList<PgWin *> *this)
{
  PgTList<PgWin *> *v1; // edi@1
  NiTListItem<PgWin *> *v2; // esi@1
  NiTListItem<PgWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&PgTList<PgWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
}
// 989450: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);
// 989480: using guessed type int (__thiscall *PgTList_PgWin _____vftable_)(void *p, char);

//----- (00474FF0) --------------------------------------------------------
void *__thiscall PgTList<PgWin__>::_vector_deleting_destructor_(PgTList<PgWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PgWin *> *v3; // esi@1
  NiTListItem<PgWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&PgTList<PgWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989450: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWin _____vftable_)(void *p, char);
// 989480: using guessed type int (__thiscall *PgTList_PgWin _____vftable_)(void *p, char);

//----- (00475080) --------------------------------------------------------
NiRTTI *__thiscall AccountFrameWork::GetRTTI(AccountFrameWork *this)
{
  return &AccountFrameWork::m_RTTI;
}

//----- (00475090) --------------------------------------------------------
const char *__thiscall AccountFrameWork::GetFrameWorkName(AccountFrameWork *this)
{
  return AccountFrameWork::m_RTTI.m_pcName;
}

//----- (004750A0) --------------------------------------------------------
void *__thiscall AccountFrameWork::_scalar_deleting_destructor_(AccountFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AccountFrameWork::_AccountFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004750E0) --------------------------------------------------------
int __thiscall LoginWorldNetFrameWork::On_NC_USER_LOGINWORLDFAIL_ACK(LoginWorldNetFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // eax@1
  PgFrameWork *v4; // esi@1
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@1
  unsigned int v7; // [sp+18h] [bp-4h]@1
  int v8; // [sp+1Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = *(_WORD *)pvData;
  v4 = (PgFrameWork *)this;
  kMsg.m_uiFrameMsg = 11;
  kMsg.m_uiFrameWParam = v3;
  PgFrameWork::PostMsgToFrameWork(&this->baseclass_0, AccountFrameWorkID, &kMsg);
  PgFrameWork::PostFrameMsgTerminate(v4);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (00475130) --------------------------------------------------------
void __thiscall LoginWorldNetFrameWork::Terminate(LoginWorldNetFrameWork *this)
{
  this->baseclass_0.m_bInit = 0;
  this->baseclass_0.m_BackFrameID = 0;
}

//----- (00475140) --------------------------------------------------------
void __thiscall LoginWorldNetFrameWork::Update(LoginWorldNetFrameWork *this, float fCurTime)
{
  LoginWorldNetFrameWork *v2; // esi@1
  Net *v3; // ecx@1
  PgNet *v4; // ecx@3
  Net *v5; // eax@5

  v2 = this;
  v3 = this->m_spWorldMgrNet.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  if ( v4 )
    PgNet::Flush(v4);
  v5 = v2->m_spWorldMgrNet.m_pObject;
  if ( v5 )
  {
    if ( v5->baseclass_0.m_bCut )
      PgFrameWork::PostFrameMsgTerminate(&v2->baseclass_0);
  }
}

//----- (00475180) --------------------------------------------------------
void __thiscall LoginWorldNetFrameWork::OnConnectWorldMgr(LoginWorldNetFrameWork *this)
{
  PgFrameWork *v1; // esi@1
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@2
  unsigned int v3; // [sp+18h] [bp-4h]@1
  int v4; // [sp+1Ch] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = (PgFrameWork *)this;
  if ( !(unsigned __int8)((int (*)(void))this->m_spWorldMgrNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)() )
  {
    kMsg.m_uiFrameMsg = 9;
    PgFrameWork::PostMsgToFrameWork(v1, AccountFrameWorkID, &kMsg);
    PgFrameWork::PostFrameMsgTerminate(v1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004751D0) --------------------------------------------------------
int __thiscall LoginWorldNetFrameWork::On_NC_USER_LOGINWORLD_ACK(LoginWorldNetFrameWork *this, int iRevBytes, void *pvData)
{
  LoginWorldNetFrameWork *v3; // esi@1
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@1
  unsigned int v6; // [sp+18h] [bp-4h]@1
  int v7; // [sp+1Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v3 = this;
  g_kServer.m_kWorldMgrHandle = *(_WORD *)pvData;
  User::SetAvatarInfo(&g_kUser, (PROTO_AVATARINFORMATION *)((char *)pvData + 3), *((_BYTE *)pvData + 2));
  kMsg.m_uiFrameMsg = 10;
  PgFrameWork::PostMsgToFrameWork(&v3->baseclass_0, AccountFrameWorkID, &kMsg);
  PgFrameWork::PostFrameMsgTerminate(&v3->baseclass_0);
  Net::NcMiscGameTimeReq(v3->m_spWorldMgrNet.m_pObject);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (00475240) --------------------------------------------------------
void __thiscall LoginWorldNetFrameWork::LoginWorldNetFrameWork(LoginWorldNetFrameWork *this)
{
  LoginWorldNetFrameWork *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&LoginWorldNetFrameWork::_vftable_;
  v1->m_spWorldMgrNet.m_pObject = 0;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 9894F4: using guessed type int (__stdcall *LoginWorldNetFrameWork___vftable_)(int uiFlags);

//----- (004752A0) --------------------------------------------------------
void __thiscall LoginWorldNetFrameWork::_LoginWorldNetFrameWork(LoginWorldNetFrameWork *this)
{
  LoginWorldNetFrameWork *v1; // edi@1
  Net *v2; // esi@1
  Net *v3; // esi@6
  void *v4; // ST00_4@10

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&LoginWorldNetFrameWork::_vftable_;
  v2 = this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
  v3 = v1->m_spWorldMgrNet.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v4);
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 9894F4: using guessed type int (__stdcall *LoginWorldNetFrameWork___vftable_)(int uiFlags);

//----- (00475350) --------------------------------------------------------
bool __thiscall LoginWorldNetFrameWork::Init(LoginWorldNetFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  LoginWorldNetFrameWork *v2; // edi@1
  Net *v3; // esi@1
  Net *v4; // ebx@1
  PgMsg::Frame kMsg; // [sp+Ch] [bp-18h]@8
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spWorldMgrNet.m_pObject;
  v4 = g_kNetMgr.m_spWorldMgr.m_pObject;
  if ( v3 != g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spWorldMgrNet.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount);
  }
  kMsg.m_uiFrameMsg = 9;
  PgFrameWork::PostMsgToMe(&v2->baseclass_0, &kMsg);
  v2->baseclass_0.m_bInit = 1;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004753D0) --------------------------------------------------------
void __thiscall LoginWorldNetFrameWork::ProcessMsg(LoginWorldNetFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  PgFrameWork *v4; // esi@1
  PgMsg::Frame pkFrameMsg; // [sp+4h] [bp-18h]@3
  unsigned int v6; // [sp+18h] [bp-4h]@1
  int v7; // [sp+1Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v4 = (PgFrameWork *)this;
  if ( uiMsg == 9 )
  {
    if ( !(unsigned __int8)((int (*)(void))this->m_spWorldMgrNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)() )
    {
      pkFrameMsg.m_uiFrameMsg = 9;
      PgFrameWork::PostMsgToFrameWork(v4, AccountFrameWorkID, &pkFrameMsg);
      PgFrameWork::PostFrameMsgTerminate(v4);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00475430) --------------------------------------------------------
void __thiscall LoginWorldNetFrameWork::NcUserLoginWorldReq(LoginWorldNetFrameWork *this)
{
  LoginWorldNetFrameWork *v1; // ebx@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+8h] [bp-5Ch]@2
  char pdata[4]; // [sp+Ch] [bp-58h]@2
  int v5; // [sp+10h] [bp-54h]@2
  int v6; // [sp+14h] [bp-50h]@2
  int v7; // [sp+18h] [bp-4Ch]@2
  __int16 v8; // [sp+1Ch] [bp-48h]@2
  char v9; // [sp+1Eh] [bp-46h]@2
  unsigned int v10; // [sp+60h] [bp-4h]@1
  int v11; // [sp+64h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    netcmd.protocol = 3087;
    PgNet::AddNetMsg(v2, &netcmd, 2);
    memset(pdata, 0, 0x52u);
    v7 = 0;
    v6 = 0;
    v5 = 0;
    *(_DWORD *)pdata = 0;
    v8 = 0;
    strncpy(pdata, g_kUser.m_acUserID, 0x12u);
    memcpy(&v9, User::GetValidate_new(&g_kUser), 0x40u);
    PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, pdata, 82);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004754D0) --------------------------------------------------------
int __thiscall LoginWorldNetFrameWork::On_NC_MISC_SEED_ACK(LoginWorldNetFrameWork *this, int iRevBytes, void *pvData)
{
  LoginWorldNetFrameWork *v3; // esi@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->m_spWorldMgrNet.m_pObject->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(*(_WORD *)pvData);
  LoginWorldNetFrameWork::NcUserLoginWorldReq(v3);
  return iRevBytes;
}

//----- (00475500) --------------------------------------------------------
int __thiscall LoginWorldNetFrameWork::ProcessNetMsg(LoginWorldNetFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  LoginWorldNetFrameWork *v5; // esi@1
  int result; // eax@1
  unsigned int v7; // eax@8
  PgMsg::Frame pkFrameMsg; // [sp+4h] [bp-18h]@8
  unsigned int v9; // [sp+18h] [bp-4h]@1
  int v10; // [sp+1Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v5 = this;
  result = 0;
  switch ( iDepart )
  {
    case 2:
      if ( iCommand == 7 )
      {
        ((void (__stdcall *)(_DWORD))this->m_spWorldMgrNet.m_pObject->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(*(_WORD *)pvData);
        LoginWorldNetFrameWork::NcUserLoginWorldReq(v5);
        result = iRevBytes;
      }
      break;
    case 3:
      if ( iCommand == 20 )
      {
        result = LoginWorldNetFrameWork::On_NC_USER_LOGINWORLD_ACK(this, iRevBytes, pvData);
      }
      else
      {
        if ( iCommand == 21 )
        {
          v7 = *(_WORD *)pvData;
          pkFrameMsg.m_uiFrameMsg = 11;
          pkFrameMsg.m_uiFrameWParam = v7;
          PgFrameWork::PostMsgToFrameWork(&this->baseclass_0, AccountFrameWorkID, &pkFrameMsg);
          PgFrameWork::PostFrameMsgTerminate(&v5->baseclass_0);
          result = iRevBytes;
        }
      }
      break;
    case 8:
      if ( iCommand == 17 )
        result = iRevBytes;
      break;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (004755E0) --------------------------------------------------------
NiRTTI *__thiscall LoginWorldNetFrameWork::GetRTTI(LoginWorldNetFrameWork *this)
{
  return &LoginWorldNetFrameWork::m_RTTI;
}

//----- (004755F0) --------------------------------------------------------
const char *__thiscall LoginWorldNetFrameWork::GetFrameWorkName(LoginWorldNetFrameWork *this)
{
  return LoginWorldNetFrameWork::m_RTTI.m_pcName;
}

//----- (00475600) --------------------------------------------------------
void *__thiscall LoginWorldNetFrameWork::_scalar_deleting_destructor_(LoginWorldNetFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  LoginWorldNetFrameWork::_LoginWorldNetFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00475630) --------------------------------------------------------
void __thiscall SignUpWin::SignUpWin(SignUpWin *this)
{
  SignUpWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SignUpWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SignUpWin::_vftable_;
  memset(v1->acSignUpUrl, 0, 0x200u);
}
// 98962C: using guessed type int (__stdcall *SignUpWin___vftable_)(int uiFlags);
// 98964C: using guessed type int (__thiscall *SignUpWin___vftable_)(void *p, char);

//----- (00475670) --------------------------------------------------------
void __thiscall SignUpWin::_SignUpWin(SignUpWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SignUpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SignUpWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98962C: using guessed type int (__stdcall *SignUpWin___vftable_)(int uiFlags);
// 98964C: using guessed type int (__thiscall *SignUpWin___vftable_)(void *p, char);

//----- (004756A0) --------------------------------------------------------
void __thiscall SignUpWin::GotoSignUpPage(SignUpWin *this)
{
  ShellExecuteA(0, "open", this->acSignUpUrl, 0, 0, 5);
}

//----- (004756C0) --------------------------------------------------------
void __thiscall SpawnAppsWin::SpawnAppsWin(SpawnAppsWin *this)
{
  SpawnAppsWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpawnAppsWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpawnAppsWin::_vftable_;
  memset(v1->m_acWebUrl, 0, 0x200u);
}
// 989870: using guessed type int (__stdcall *SpawnAppsWin___vftable_)(int uiFlags);
// 98988C: using guessed type int (__thiscall *SpawnAppsWin___vftable_)(void *p, char);

//----- (00475700) --------------------------------------------------------
void __thiscall SpawnAppsWin::_SpawnAppsWin(SpawnAppsWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpawnAppsWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpawnAppsWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 989870: using guessed type int (__stdcall *SpawnAppsWin___vftable_)(int uiFlags);
// 98988C: using guessed type int (__thiscall *SpawnAppsWin___vftable_)(void *p, char);

//----- (00475720) --------------------------------------------------------
void __thiscall SpawnAppsWin::OnClose(SpawnAppsWin *this)
{
  DestroyWindow(this->m_hWebWindow);
}

//----- (00475730) --------------------------------------------------------
void __thiscall SpawnAppsWin::CloseWin(SpawnAppsWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  DestroyWindow(this->m_hWebWindow);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (00475750) --------------------------------------------------------
void __thiscall SpawnAppsWin::ReGenPos(SpawnAppsWin *this)
{
  SpawnAppsWin *v1; // esi@1
  int v2; // eax@1
  unsigned int v3; // ecx@1

  v1 = this;
  v1->m_uiWebXPos = v1->m_uiPlaneWebXPos
                  + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1);
  v3 = v1->m_uiPlaneWebHeight;
  v1->m_uiWebYPos = v1->m_uiPlaneWebYPos + v2;
  v1->m_uiWebWidth = v1->m_uiPlaneWebWidth;
  v1->m_uiWebHeight = v3;
}

//----- (004757A0) --------------------------------------------------------
void __thiscall SpawnAppsWin::UpdateWebPos(SpawnAppsWin *this)
{
  SpawnAppsWin *v1; // esi@1
  int v2; // eax@2
  NiRefObjectVtbl *v3; // edx@2
  int v4; // eax@2
  unsigned int v5; // ecx@2
  unsigned int v6; // edx@2
  tagRECT rect; // [sp+4h] [bp-14h]@2
  unsigned int v8; // [sp+14h] [bp-4h]@1
  int v9; // [sp+18h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  if ( IsWindow(this->m_hWebWindow) )
  {
    v2 = ((int (__thiscall *)(SpawnAppsWin *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v1);
    v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v1->m_uiWebXPos = v1->m_uiPlaneWebXPos + v2;
    v4 = ((int (__thiscall *)(SpawnAppsWin *))v3[42].__vecDelDtor)(v1);
    v5 = v1->m_uiPlaneWebWidth;
    v6 = v1->m_uiPlaneWebHeight;
    v1->m_uiWebYPos = v1->m_uiPlaneWebYPos + v4;
    v1->m_uiWebWidth = v5;
    v1->m_uiWebHeight = v6;
    GetWindowRect(g_hMainWnd, &rect);
    MoveWindow(
      v1->m_hWebWindow,
      rect.left + v1->m_uiWebXPos,
      rect.top + v1->m_uiWebYPos,
      v1->m_uiWebWidth,
      v1->m_uiWebHeight,
      1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00475870) --------------------------------------------------------
void __thiscall SignUpWin::OnCommand(SignUpWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    ShellExecuteA(0, "open", this->acSignUpUrl, 0, 0, 5);
}

//----- (004758A0) --------------------------------------------------------
void __thiscall SignUpWin::LoadUrl(SignUpWin *this)
{
  SignUpWin *v1; // edi@1
  void *v2; // eax@3
  ItemMallInfo *v3; // eax@4
  ItemMallInfo *v4; // esi@4
  tagItemMallFileData *v5; // eax@8
  int v6; // eax@9
  int v7; // edx@9
  char v8; // cl@10
  char acPathName[260]; // [sp+4h] [bp-114h]@1
  unsigned int v10; // [sp+108h] [bp-10h]@1
  int v11; // [sp+114h] [bp-4h]@3
  int v12; // [sp+118h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  memset(acPathName, 0, 0x104u);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sSpawnApps.hb");
  v2 = operator new(0x2224u);
  v11 = 0;
  if ( v2 )
  {
    ItemMallInfo::ItemMallInfo((ItemMallInfo *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  v11 = -1;
  if ( v4 )
  {
    ItemMallInfo::LoadFromFile(v4, acPathName);
    if ( ItemMallInfo::GetTotalURLNum(v4, 1) != -1 )
    {
      v5 = ItemMallInfo::GetData(v4, 1, 0);
      if ( v5 )
      {
        v6 = (int)v5->Path;
        v7 = (int)&v1->acSignUpUrl[-v6];
        do
        {
          v8 = *(_BYTE *)v6;
          *(_BYTE *)(v7 + v6) = *(_BYTE *)v6;
          ++v6;
        }
        while ( v8 );
      }
      ItemMallInfo::_ItemMallInfo(v4);
      operator delete(v4);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004759B0) --------------------------------------------------------
void __thiscall SpawnAppsWin::OnCommand(SpawnAppsWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1

  v3 = (PgWin *)this;
  if ( wParam == 1 )
  {
    DestroyWindow(this->m_hWebWindow);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  }
}

//----- (004759E0) --------------------------------------------------------
bool __thiscall SpawnAppsWin::LoadURL(SpawnAppsWin *this)
{
  SpawnAppsWin *v1; // edi@1
  void *v2; // eax@3
  ItemMallInfo *v3; // eax@4
  ItemMallInfo *v4; // esi@4
  bool result; // al@7
  tagItemMallFileData *v6; // eax@9
  int v7; // eax@10
  int v8; // edx@10
  char v9; // cl@11
  char acPathName[260]; // [sp+4h] [bp-114h]@1
  unsigned int v11; // [sp+108h] [bp-10h]@1
  int v12; // [sp+114h] [bp-4h]@3
  int v13; // [sp+118h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  memset(acPathName, 0, 0x104u);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sSpawnApps.hb");
  v2 = operator new(0x2224u);
  v12 = 0;
  if ( v2 )
  {
    ItemMallInfo::ItemMallInfo((ItemMallInfo *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  v12 = -1;
  if ( v4 && (ItemMallInfo::LoadFromFile(v4, acPathName), ItemMallInfo::GetTotalURLNum(v4, 1) != -1) )
  {
    v6 = ItemMallInfo::GetData(v4, 1, 1);
    if ( v6 )
    {
      v7 = (int)v6->Path;
      v8 = (int)&v1->m_acWebUrl[-v7];
      do
      {
        v9 = *(_BYTE *)v7;
        *(_BYTE *)(v8 + v7) = *(_BYTE *)v7;
        ++v7;
      }
      while ( v9 );
    }
    ItemMallInfo::_ItemMallInfo(v4);
    operator delete(v4);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00475B00) --------------------------------------------------------
void __thiscall SpawnAppsWin::UpdateMeWin(SpawnAppsWin *this, float fCurTime)
{
  SpawnAppsWin::UpdateWebPos(this);
}

//----- (00475B10) --------------------------------------------------------
bool __thiscall SignUpWin::Create(SignUpWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiSourceTexture *v5; // eax@4
  NiSourceTexture *v6; // edi@4
  PgSprData *v7; // eax@4
  NiNode *v8; // esi@5
  PgSprData *v10; // edi@10
  NiNode *v11; // esi@11
  int uiLeft; // [sp+14h] [bp-18h]@4
  int uiTop; // [sp+18h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v15; // [sp+28h] [bp-4h]@1

  v2 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v15 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\Account\\SpawnAppsButton.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = MenuTexMgr::GetTexture(0x1Au);
  v6 = v5;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v5);
  if ( !PgWinFrame::Create(v2, 0, 0, v7, 0, pkFrameWork, "SignUpWin", 0) )
  {
    v8 = spNode.m_pObject;
    v15 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RegisterNor", &uiLeft, &uiTop, v6);
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "RegisterClick");
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "RegisterOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0, 0, 0, 0);
  ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.82999998,
    0.64999998);
  SignUpWin::LoadUrl((SignUpWin *)v2);
  v15 = -1;
  if ( spNode.m_pObject )
  {
    v11 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00475CD0) --------------------------------------------------------
bool __thiscall SpawnAppsWin::Create(SpawnAppsWin *this, PgFrameWork *pkFrameWork)
{
  SpawnAppsWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiSourceTexture *v5; // eax@4
  NiSourceTexture *v6; // ebx@4
  PgSprData *v7; // eax@4
  NiNode *v8; // esi@5
  bool result; // al@9
  PgFont *v10; // eax@11
  PgWinText *v11; // edi@11
  char *v12; // eax@11
  PgSprData *v13; // edi@13
  unsigned int uiWidth; // [sp+28h] [bp-20h]@10
  unsigned int uiHeight; // [sp+2Ch] [bp-1Ch]@10
  int uiLeft; // [sp+30h] [bp-18h]@4
  int uiTop; // [sp+34h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+38h] [bp-10h]@1
  int v19; // [sp+44h] [bp-4h]@1
  NiRefObjectVtbl *pkFrameWorka; // [sp+50h] [bp+8h]@11

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v19 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\Account\\SpawnAppsNotice.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = MenuTexMgr::GetTexture(0x1Au);
  v6 = v5;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v5);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "SpawnAppsWin", 0)
    || !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Title", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v8 = spNode.m_pObject;
    v19 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  v10 = Font::Get(0);
  v11 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v11,
    1u);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v11,
    (unsigned int)&Color::m_kDxWinTitleColor);
  pkFrameWorka = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v12 = TextData2::Get(0x96E3C2ECu);
  pkFrameWorka[118].__vecDelDtor((NiRefObject *)v11, (unsigned int)v12);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "WebPage",
         &v2->m_uiPlaneWebXPos,
         &v2->m_uiPlaneWebYPos,
         &v2->m_uiPlaneWebWidth,
         &v2->m_uiPlaneWebHeight) )
  {
    PgSprData::Create(&spNode.m_pObject->baseclass_0, "WebPage", &uiLeft, &uiTop, v6);
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v6);
    PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    ((void (__thiscall *)(SpawnAppsWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    SpawnAppsWin::LoadURL(v2);
    SpawnAppsWin::ReGenPos(v2);
    v19 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 1;
  }
  else
  {
    v19 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00475F80) --------------------------------------------------------
void __thiscall SpawnAppsWin::OnShowWin(SpawnAppsWin *this)
{
  unsigned int v1; // ebx@1
  SpawnAppsWin *v2; // esi@1
  int v3; // edi@1
  int v4; // eax@1
  char v5; // cl@2
  HWND__ *v6; // edi@3
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // edx@3
  int v8; // ecx@3
  NiRect<int> kRect; // [sp+Ch] [bp-218h]@3
  unsigned int uiPosY; // [sp+1Ch] [bp-208h]@3
  char acWebString[512]; // [sp+20h] [bp-204h]@1
  unsigned int v12; // [sp+220h] [bp-4h]@1
  int v13; // [sp+224h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v1 = 0;
  v2 = this;
  v3 = this->m_uiWebXPos;
  acWebString[0] = 0;
  memset(&acWebString[1], 0, 0x1FFu);
  v4 = (int)v2->m_acWebUrl;
  do
  {
    v5 = *(_BYTE *)v4;
    *(_BYTE *)(acWebString - v2->m_acWebUrl + v4) = *(_BYTE *)v4;
    ++v4;
  }
  while ( v5 );
  v6 = CreateWindowExA(
         0,
         "WebCtrl32",
         acWebString,
         0x90000000u,
         v3,
         v2->m_uiWebYPos,
         v2->m_uiWebWidth,
         v2->m_uiWebHeight,
         g_hMainWnd,
         0,
         g_hMainInstance,
         0);
  ShowWindow(v6, 5);
  v7 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
  v2->m_hWebWindow = v6;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  v7(
    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    (unsigned int)&kRect);
  v8 = kRect.m_bottom - kRect.m_top;
  uiPosY = 0;
  if ( PgWin::ms_uiScreenWidth >= kRect.m_right - kRect.m_left && PgWin::ms_uiScreenHeight >= v8 )
  {
    v1 = (PgWin::ms_uiScreenWidth - (kRect.m_right - kRect.m_left)) >> 1;
    uiPosY = (PgWin::ms_uiScreenHeight - v8) >> 1;
  }
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
    (NiRefObject *)v2,
    v1);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v2,
    uiPosY);
}
// A85C00: using guessed type int __security_cookie;

//----- (004760D0) --------------------------------------------------------
SignUpWin *__cdecl SignUpWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SignUpWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x358u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &SignUpWin::_vftable_;
    *((_DWORD *)v2 + 58) = &SignUpWin::_vftable_;
    memset((char *)v2 + 344, 0, 0x200u);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SignUpWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98962C: using guessed type int (__stdcall *SignUpWin___vftable_)(int uiFlags);
// 98964C: using guessed type int (__thiscall *SignUpWin___vftable_)(void *p, char);

//----- (00476230) --------------------------------------------------------
SpawnAppsWin *__cdecl SpawnAppsWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SpawnAppsWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x37Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &SpawnAppsWin::_vftable_;
    *((_DWORD *)v2 + 58) = &SpawnAppsWin::_vftable_;
    memset((char *)v2 + 348, 0, 0x200u);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SpawnAppsWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 989870: using guessed type int (__stdcall *SpawnAppsWin___vftable_)(int uiFlags);
// 98988C: using guessed type int (__thiscall *SpawnAppsWin___vftable_)(void *p, char);

//----- (00476390) --------------------------------------------------------
void *__thiscall SignUpWin::_scalar_deleting_destructor_(SignUpWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SignUpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SignUpWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98962C: using guessed type int (__stdcall *SignUpWin___vftable_)(int uiFlags);
// 98964C: using guessed type int (__thiscall *SignUpWin___vftable_)(void *p, char);

//----- (004763D0) --------------------------------------------------------
void *__thiscall SpawnAppsWin::_scalar_deleting_destructor_(SpawnAppsWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpawnAppsWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpawnAppsWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989870: using guessed type int (__stdcall *SpawnAppsWin___vftable_)(int uiFlags);
// 98988C: using guessed type int (__thiscall *SpawnAppsWin___vftable_)(void *p, char);

//----- (00476410) --------------------------------------------------------
bool __thiscall AccountWin::CheckID(AccountWin *this, char *pcID)
{
  bool result; // al@1

  result = 1;
  this->m_uiCheckResult = 1;
  if ( *pcID )
    this->m_uiCheckResult = 0;
  else
    result = 0;
  return result;
}

//----- (00476440) --------------------------------------------------------
bool __thiscall AccountWin::CheckPasswd(AccountWin *this, char *pcPasswd)
{
  bool result; // al@2

  this->m_uiCheckResult = 2;
  if ( *pcPasswd )
  {
    this->m_uiCheckResult = 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00476470) --------------------------------------------------------
void __thiscall AccountWin::OnRegister(AccountWin *this)
{
  const char *v1; // edx@1
  char *v2; // eax@1
  char *v3; // esi@1
  char v4; // cl@2

  v1 = this->m_acRegURL;
  v2 = this->m_acRegURL;
  v3 = &this->m_acRegURL[1];
  do
    v4 = *v2++;
  while ( v4 );
  if ( v2 != v3 )
    ShellExecuteA(0, "open", v1, 0, 0, 5);
}

//----- (004764B0) --------------------------------------------------------
void __thiscall AccountWin::OnForgotPassword(AccountWin *this)
{
  const char *v1; // edx@1
  char *v2; // eax@1
  char *v3; // esi@1
  char v4; // cl@2

  v1 = this->m_acPasswordURL;
  v2 = this->m_acPasswordURL;
  v3 = &this->m_acPasswordURL[1];
  do
    v4 = *v2++;
  while ( v4 );
  if ( v2 != v3 )
    ShellExecuteA(0, "open", v1, 0, 0, 5);
}

//----- (004764F0) --------------------------------------------------------
void __thiscall AccountWin::SetRegisterURL(AccountWin *this, const char *pcURL)
{
  AccountWin *v2; // edi@1

  v2 = this;
  if ( pcURL )
  {
    if ( *pcURL )
    {
      memset(this->m_acRegURL, 0, 0x400u);
      strncpy(v2->m_acRegURL, (char *)pcURL, 0x400u);
      v2->m_acRegURL[1023] = 0;
    }
  }
}

//----- (00476540) --------------------------------------------------------
void __thiscall AccountWin::SetForgotPassword(AccountWin *this, const char *pcURL)
{
  AccountWin *v2; // edi@1

  v2 = this;
  if ( pcURL )
  {
    if ( *pcURL )
    {
      memset(this->m_acPasswordURL, 0, 0x400u);
      strncpy(v2->m_acPasswordURL, (char *)pcURL, 0x400u);
      v2->m_acPasswordURL[1023] = 0;
    }
  }
}

//----- (00476590) --------------------------------------------------------
void __thiscall AccountWin::SetEditFocus(AccountWin *this, unsigned int uiFocus)
{
  AccountWin *v2; // esi@1
  EditWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_spIDEdit.m_pObject;
  if ( v3 )
  {
    v2->m_uiCurFoscus = uiFocus;
    if ( uiFocus )
    {
      if ( uiFocus != 1 )
      {
        if ( uiFocus != 2 )
          return;
        v3 = v2->m_spPasswdEdit.m_pObject;
      }
      ((void (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v2->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    }
  }
}

//----- (004765F0) --------------------------------------------------------
void __thiscall AccountWin::OnCmdExit(AccountWin *this)
{
  AccountFrameWork::Exit((AccountFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00476600) --------------------------------------------------------
bool __thiscall AccountWin::ChekcIDPasswd(AccountWin *this)
{
  AccountWin *v1; // esi@1
  int v2; // edi@1
  int v3; // eax@1
  bool result; // al@3

  v1 = this;
  v2 = ((int (*)(void))this->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = ((int (*)(void))v1->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v1->m_uiCheckResult = 1;
  if ( *(_BYTE *)v2 && (v1->m_uiCheckResult = 0, v1->m_uiCheckResult = 2, *(_BYTE *)v3) )
  {
    v1->m_uiCheckResult = 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00476660) --------------------------------------------------------
void __thiscall AccountWin::ActiveInput(AccountWin *this)
{
  AccountWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_spIDEdit.m_pObject;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 1;
    ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor(
    (NiRefObject *)v1,
    1u);
  ((void (__stdcall *)(_DWORD))v1->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_989AD1);
}

//----- (004766B0) --------------------------------------------------------
void __thiscall AccountWin::DeactiveInput(AccountWin *this)
{
  AccountWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_spIDEdit.m_pObject;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 0;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor(
    (NiRefObject *)v1,
    0);
}

//----- (00476700) --------------------------------------------------------
bool __thiscall AccountWin::OnModalWinClose(AccountWin *this, PgWin *pkModalWin)
{
  AccountWin *v2; // esi@1
  EditWin *v3; // ecx@4

  v2 = this;
  if ( this->m_uiCheckResult == 1 )
    goto LABEL_12;
  if ( this->m_uiCheckResult == 2 )
  {
    if ( !this->m_spIDEdit.m_pObject )
      goto LABEL_7;
    v3 = this->m_spPasswdEdit.m_pObject;
    v2->m_uiCurFoscus = 2;
    goto LABEL_6;
  }
  if ( this->m_uiCheckResult == 3 )
  {
LABEL_12:
    v3 = this->m_spIDEdit.m_pObject;
    if ( v3 )
    {
      v2->m_uiCurFoscus = 1;
LABEL_6:
      ((void (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
      goto LABEL_7;
    }
  }
LABEL_7:
  v2->m_uiCheckResult = 0;
  return 1;
}

//----- (00476760) --------------------------------------------------------
void __thiscall AccountWin::AccountWin(AccountWin *this)
{
  AccountWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AccountWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AccountWin::_vftable_;
  v1->m_spIDEdit.m_pObject = 0;
  v1->m_spPasswdEdit.m_pObject = 0;
  v1->m_uiCurFoscus = 0;
  v1->m_bRun = 0;
}
// 989BB0: using guessed type int (__stdcall *AccountWin___vftable_)(int uiFlags);
// 989BCC: using guessed type int (__thiscall *AccountWin___vftable_)(void *p, char);

//----- (004767A0) --------------------------------------------------------
void __thiscall AccountWin::_AccountWin(AccountWin *this)
{
  AccountWin *v1; // esi@1
  EditWin *v2; // edi@1
  EditWin *v3; // edi@6
  EditWin *v4; // edi@11
  EditWin *v5; // edi@15

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AccountWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AccountWin::_vftable_;
  v2 = this->m_spIDEdit.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spIDEdit.m_pObject = 0;
  }
  v3 = v1->m_spPasswdEdit.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spPasswdEdit.m_pObject = 0;
  }
  v4 = v1->m_spPasswdEdit.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->m_spIDEdit.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 989BB0: using guessed type int (__stdcall *AccountWin___vftable_)(int uiFlags);
// 989BCC: using guessed type int (__thiscall *AccountWin___vftable_)(void *p, char);

//----- (004768C0) --------------------------------------------------------
void __thiscall AccountWin::OnShowWin(AccountWin *this)
{
  AccountWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_spIDEdit.m_pObject;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 1;
    ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
}

//----- (004768F0) --------------------------------------------------------
void __thiscall AccountWin::OnClose(AccountWin *this)
{
  AccountWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  PgWin::OnClose(&this->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_spIDEdit.m_pObject;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 0;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  }
}

//----- (00476930) --------------------------------------------------------
bool __thiscall AccountWin::CreateKoreaAccountWin(AccountWin *this, PgFrameWork *pkFrameWork)
{
  AccountWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // eax@15
  NiRefObjectVtbl *v11; // edx@15
  PgSprData *v12; // edi@15
  PgSprData *v13; // edi@15
  EditWin *v14; // eax@16
  EditWin *v15; // eax@17
  EditWin *v16; // ecx@17
  PgSprData *v17; // edi@19
  PgSprData *v18; // edi@19
  NiNode *v19; // esi@20
  unsigned int uiWidth; // [sp+0h] [bp-20h]@15
  unsigned int uiHeight; // [sp+4h] [bp-1Ch]@15
  int uiLeft; // [sp+8h] [bp-18h]@11
  int uiTop; // [sp+Ch] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+10h] [bp-10h]@1
  int v25; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v25 = 0;
  v3 = MenuTexMgr::GetTexture(3u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v25 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Account\\LoginInputPanel.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InputPanel", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "AccountWin", 0) )
  {
    v4 = spNode.m_pObject;
    v25 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = ((int (__thiscall *)(AccountWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v11 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  uiWidth = v10;
  uiHeight = ((int (__thiscall *)(AccountWin *))v11[37].__vecDelDtor)(v2);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Login", &uiLeft, &uiTop, v3);
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "LoginClick");
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "LoginOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Quit", &uiLeft, &uiTop, v3);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "QuitClick");
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "QuitOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ID", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v14 = EditWin::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            NORMAL,
            0x12u,
            3u,
            0,
            0,
            1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spIDEdit, (NiD3DDefaultShader *)v14);
  }
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Password", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v15 = EditWin::CreateWin(
          uiLeft + 2,
          uiTop + 4,
          uiWidth,
          uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          PASSWD,
          0x10u,
          3u,
          0,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spPasswdEdit, (NiD3DDefaultShader *)v15);
  v16 = v2->m_spIDEdit.m_pObject;
  if ( v16 )
    ((void (*)(void))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  EditWin::SetImeStatus(v2->m_spIDEdit.m_pObject, IS_ENGLISH);
  EditWin::SetImeStatus(v2->m_spPasswdEdit.m_pObject, IS_ENGLISH);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RegisterNomal", &uiLeft, &uiTop, 0);
  PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "RegisterClick");
  PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "RegisterOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForgotPWNomal", &uiLeft, &uiTop, 0);
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "ForgotPWClick");
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "ForgotPWOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
  v25 = -1;
  if ( spNode.m_pObject )
  {
    v19 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v19 )
        v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00476CE0) --------------------------------------------------------
void __thiscall AccountWin::DisplayCheckMsg(AccountWin *this)
{
  AccountWin *v1; // esi@1
  char *v2; // eax@5
  MsgBox *v3; // eax@5
  EditWin *v4; // ecx@7
  unsigned int v5; // [sp-4h] [bp-8h]@3

  v1 = this;
  if ( this->m_uiCheckResult == 1 )
  {
    v5 = -1628315387;
  }
  else
  {
    if ( this->m_uiCheckResult != 2 )
      goto LABEL_7;
    v5 = -248365224;
  }
  v2 = TextData::Get(v5);
  v3 = MsgBox::Modal(MSGBOX_OK, v2);
  if ( v3 )
    MsgBox::SetWindowMsgOnClose(v3, &v1->baseclass_0.baseclass_0.baseclass_0, 5u, 2u, 0, 0, 0, 0);
LABEL_7:
  v4 = v1->m_spIDEdit.m_pObject;
  if ( v4 )
  {
    v1->m_uiCurFoscus = 0;
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  }
}

//----- (00476D60) --------------------------------------------------------
bool __thiscall AccountWin::Create(AccountWin *this, PgFrameWork *pkFrameWork)
{
  AccountWin *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@1
  NiRect<int> kRect; // [sp+1Ch] [bp-14h]@1
  int iX; // [sp+2Ch] [bp-4h]@1

  v2 = this;
  AccountWin::CreateKoreaAccountWin(this, pkFrameWork);
  v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[46].__vecDelDtor;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  v3(
    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    (unsigned int)&kRect);
  PgScreenXY::GetBoxClipLeftTop(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    kRect.m_right - kRect.m_left + 1,
    kRect.m_bottom - kRect.m_top + 1,
    0.83600003,
    0.75,
    &iX,
    (int *)&pkFrameWork);
  ((void (__thiscall *)(AccountWin *, int, PgFrameWork *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    v2,
    iX,
    pkFrameWork);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  return 1;
}

//----- (00476E00) --------------------------------------------------------
void __thiscall AccountWin::OnCmdOk(AccountWin *this, bool bCheck)
{
  AccountWin *v2; // esi@1
  char *v3; // edi@4
  char *v4; // eax@4

  v2 = this;
  if ( !bCheck || AccountWin::ChekcIDPasswd(this) )
  {
    v3 = (char *)((int (*)(void))v2->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v4 = (char *)((int (*)(void))v2->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    AccountFrameWork::TryUserLogin((AccountFrameWork *)v2->baseclass_0.m_pkFrameWork, v4, v3);
  }
  else
  {
    AccountWin::DisplayCheckMsg(v2);
  }
}

//----- (00476E60) --------------------------------------------------------
void __thiscall AccountWin::OnEditEnd(AccountWin *this, unsigned int wParam, int lParam)
{
  AccountWin *v3; // esi@1
  EditWin *v4; // ecx@5
  char *v5; // edi@7
  char *v6; // eax@7
  EditWin *v7; // ecx@9

  v3 = this;
  if ( this->m_uiCurFoscus == 1 )
  {
    if ( this->m_spIDEdit.m_pObject )
    {
      v7 = this->m_spPasswdEdit.m_pObject;
      v3->m_uiCurFoscus = 2;
      ((void (*)(void))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
    }
  }
  else
  {
    if ( this->m_uiCurFoscus == 2 )
    {
      if ( wParam == 1 && AccountWin::ChekcIDPasswd(this) )
      {
        v5 = (char *)((int (*)(void))v3->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v6 = (char *)((int (*)(void))v3->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        AccountFrameWork::TryUserLogin((AccountFrameWork *)v3->baseclass_0.m_pkFrameWork, v6, v5);
      }
      else
      {
        v4 = v3->m_spIDEdit.m_pObject;
        if ( v4 )
        {
          v3->m_uiCurFoscus = 1;
          ((void (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
        }
      }
    }
  }
}

//----- (00476F10) --------------------------------------------------------
void __thiscall AccountWin::UpdateMeWin(AccountWin *this, float fCurTime)
{
  AccountWin *v2; // esi@1
  EditWin *v3; // ecx@3
  EditWin *v4; // ecx@6
  char *v5; // edi@6
  char *v6; // eax@6

  v2 = this;
  EditWin::SetImeStatus(this->m_spIDEdit.m_pObject, IS_ENGLISH);
  EditWin::SetImeStatus(v2->m_spPasswdEdit.m_pObject, IS_ENGLISH);
  if ( (unsigned __int8)((int (*)(void))v2->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)()
    && v2->m_spIDEdit.m_pObject )
  {
    v3 = v2->m_spPasswdEdit.m_pObject;
    v2->m_uiCurFoscus = 2;
    ((void (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
  if ( !v2->m_bRun )
  {
    if ( g_kServer.m_bCP )
    {
      v4 = v2->m_spPasswdEdit.m_pObject;
      v2->m_bRun = 1;
      v5 = (char *)((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      v6 = (char *)((int (*)(void))v2->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      AccountFrameWork::TryUserLogin((AccountFrameWork *)v2->baseclass_0.m_pkFrameWork, v6, v5);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2,
        0);
    }
  }
}

//----- (00476FC0) --------------------------------------------------------
void __thiscall AccountWin::OnCommand(AccountWin *this, unsigned int wParam, int lParam)
{
  AccountWin *v3; // esi@1
  char *v4; // edi@4
  char *v5; // eax@4

  v3 = this;
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  switch ( wParam )
  {
    case 0u:
      if ( AccountWin::ChekcIDPasswd(v3) )
      {
        v4 = (char *)((int (*)(void))v3->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v5 = (char *)((int (*)(void))v3->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        AccountFrameWork::TryUserLogin((AccountFrameWork *)v3->baseclass_0.m_pkFrameWork, v5, v4);
      }
      else
      {
        AccountWin::DisplayCheckMsg(v3);
      }
      break;
    case 1u:
      AccountFrameWork::Exit((AccountFrameWork *)v3->baseclass_0.m_pkFrameWork);
      break;
    case 2u:
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor(
        (NiRefObject *)v3,
        0);
      break;
    case 3u:
      AccountWin::OnRegister(v3);
      break;
    case 4u:
      AccountWin::OnForgotPassword(v3);
      break;
    default:
      return;
  }
}

//----- (00477090) --------------------------------------------------------
AccountWin *__cdecl AccountWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  AccountWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x96Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &AccountWin::_vftable_;
    *((_DWORD *)v2 + 58) = &AccountWin::_vftable_;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_BYTE *)v2 + 344) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (AccountWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 989BB0: using guessed type int (__stdcall *AccountWin___vftable_)(int uiFlags);
// 989BCC: using guessed type int (__thiscall *AccountWin___vftable_)(void *p, char);

//----- (004771F0) --------------------------------------------------------
void *__thiscall AccountWin::_scalar_deleting_destructor_(AccountWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AccountWin::_AccountWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00477220) --------------------------------------------------------
int __thiscall WorldSelectWin::GetSelectedWorldNum(WorldSelectWin *this)
{
  return this->m_iSelectServer;
}

//----- (00477230) --------------------------------------------------------
void __thiscall WorldSelectWin::InitServerListCtrlData(WorldSelectWin *this)
{
  this->m_uiSelectedServerIndex = -1;
  this->m_uiDisableIndex = -1;
  this->m_uiClickServerIndex = -1;
  this->m_bDoubleClick = 0;
  this->m_bJoin = 0;
}

//----- (00477260) --------------------------------------------------------
int __thiscall WorldSelectWin::FindIndex(WorldSelectWin *this, int WorldNo)
{
  return -1;
}

//----- (00477270) --------------------------------------------------------
void __thiscall WorldSelectWin::OnClose(WorldSelectWin *this)
{
  WorldSelectWin *v1; // esi@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkWorldSelectExitWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkWorldSelectOptionWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkWorldSelectOptionSetWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004772B0) --------------------------------------------------------
void __thiscall WorldSelectExitWin::WorldSelectExitWin(WorldSelectExitWin *this)
{
  WorldSelectExitWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectExitWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectExitWin::_vftable_;
}
// 98A0DC: using guessed type int (__stdcall *WorldSelectExitWin___vftable_)(int uiFlags);
// 98A0FC: using guessed type int (__thiscall *WorldSelectExitWin___vftable_)(void *p, char);

//----- (004772D0) --------------------------------------------------------
void __thiscall WorldSelectExitWin::_WorldSelectExitWin(WorldSelectExitWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectExitWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectExitWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98A0DC: using guessed type int (__stdcall *WorldSelectExitWin___vftable_)(int uiFlags);
// 98A0FC: using guessed type int (__thiscall *WorldSelectExitWin___vftable_)(void *p, char);

//----- (004772F0) --------------------------------------------------------
void __thiscall WorldSelectOptionWin::WorldSelectOptionWin(WorldSelectOptionWin *this)
{
  WorldSelectOptionWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectOptionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectOptionWin::_vftable_;
  v1->m_pkWorldSelectOptionSetWin = 0;
}
// 98A320: using guessed type int (__stdcall *WorldSelectOptionWin___vftable_)(int uiFlags);
// 98A33C: using guessed type int (__thiscall *WorldSelectOptionWin___vftable_)(void *p, char);

//----- (00477320) --------------------------------------------------------
void __thiscall WorldSelectOptionWin::_WorldSelectOptionWin(WorldSelectOptionWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectOptionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectOptionWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98A320: using guessed type int (__stdcall *WorldSelectOptionWin___vftable_)(int uiFlags);
// 98A33C: using guessed type int (__thiscall *WorldSelectOptionWin___vftable_)(void *p, char);

//----- (00477340) --------------------------------------------------------
void __thiscall WorldSelectOptionWin::OnCommand(WorldSelectOptionWin *this, unsigned int wParam, int lParam)
{
  WorldSelectOptionWin *v3; // esi@1

  v3 = this;
  if ( !wParam )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkWorldSelectOptionSetWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkWorldSelectOptionSetWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::DoModal(&Pgg_kWinMgr, &v3->m_pkWorldSelectOptionSetWin->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  }
}

//----- (004773A0) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::WorldSelectOptionSetWin(WorldSelectOptionSetWin *this)
{
  WorldSelectOptionSetWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectOptionSetWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectOptionSetWin::_vftable_;
  MachineOpt::GraphicOption::GraphicOption(&v1->m_kOpenGraphicOption);
  v1->m_pkWinModeBtn = 0;
  v1->m_pkResolutionTextWin = 0;
  v1->m_bChangeOption = 0;
}
// 98A560: using guessed type int (__stdcall *WorldSelectOptionSetWin___vftable_)(int uiFlags);
// 98A57C: using guessed type int (__thiscall *WorldSelectOptionSetWin___vftable_)(void *p, char);

//----- (00477420) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::_WorldSelectOptionSetWin(WorldSelectOptionSetWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectOptionSetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectOptionSetWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98A560: using guessed type int (__stdcall *WorldSelectOptionSetWin___vftable_)(int uiFlags);
// 98A57C: using guessed type int (__thiscall *WorldSelectOptionSetWin___vftable_)(void *p, char);

//----- (00477440) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::SetResolutionText(WorldSelectOptionSetWin *this, char *pcResolutionText)
{
  if ( pcResolutionText )
  {
    if ( this->m_pkResolutionTextWin )
      ((void (__stdcall *)(_DWORD))this->m_pkResolutionTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcResolutionText);
  }
}

//----- (00477470) --------------------------------------------------------
void __thiscall WorldSelectWin::UpdateServerList(WorldSelectWin *this)
{
  char *v1; // edi@1
  char *v2; // esi@2
  signed int v3; // ebx@2
  int v4; // eax@5
  int v5; // edi@7
  bool v6; // zf@13
  WorldSelectWin *v7; // [sp+Ch] [bp-10h]@1
  signed int v8; // [sp+10h] [bp-Ch]@1
  unsigned int v9; // [sp+14h] [bp-8h]@1
  unsigned int v10; // [sp+18h] [bp-4h]@1

  v9 = 8 * this->m_uiPageNum;
  v7 = this;
  v10 = 32 * this->m_uiPageNum;
  v1 = (char *)this->m_pkServerStateSprWin;
  v8 = 8;
  do
  {
    v2 = v1;
    v3 = 5;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0);
      v2 += 4;
      --v3;
    }
    while ( v3 );
    if ( v9 < g_kServer.m_kFiestaServerList.m_uiTotalWorld )
    {
      v4 = *(_DWORD *)&v7->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( (signed int)v9 >= (signed int)((char *)v7->m_vecServerOrder.baseclass_0._Mylast - v4) >> 2 )
      {
$LN9_14:
        v5 = *((_DWORD *)v1 + 4);
LABEL_12:
        (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 256))(v5, 1);
      }
      else
      {
        switch ( g_kServer.m_kFiestaServerList.pkServerInfo[*(_DWORD *)(v10 + v4)].kWorldState )
        {
          case 1:
            v5 = *((_DWORD *)v1 + 3);
            goto LABEL_12;
          case 6:
          case 7:
          case 8:
            v5 = *(_DWORD *)v1;
            goto LABEL_12;
          case 9:
            v5 = *((_DWORD *)v1 + 2);
            goto LABEL_12;
          case 5:
          case 0xA:
            v5 = *((_DWORD *)v1 + 1);
            goto LABEL_12;
          case 0:
          case 2:
          case 3:
          case 4:
            goto $LN9_14;
          default:
            break;
        }
      }
    }
    v10 += 4;
    v6 = v8-- == 1;
    ++v9;
    v1 = v2;
  }
  while ( !v6 );
}

//----- (00477570) --------------------------------------------------------
void __thiscall WorldSelectWin::OnCmdExit(WorldSelectWin *this)
{
  AccountFrameWork::WorldSelectCancel((AccountFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00477580) --------------------------------------------------------
void __thiscall WorldSelectWin::SaveLastConnectWorldInfo(WorldSelectWin *this)
{
  WorldSelectWin *v1; // edi@1
  char *v2; // eax@3
  _iobuf *v3; // eax@3
  _iobuf *v4; // esi@3

  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = fs("%s\\WCInfo.hsb");
  v3 = fopen(v2, "w+b");
  v4 = v3;
  if ( v3 )
  {
    fwrite(&v1->m_uiSelectedServerIndex, 4u, 1u, v3);
    fwrite(&v1->m_uiPageNum, 4u, 1u, v4);
    fclose(v4);
  }
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004775F0) --------------------------------------------------------
bool __thiscall WorldSelectWin::LoadLastConnectWorldInfo(WorldSelectWin *this)
{
  WorldSelectWin *v1; // edi@1
  char *v2; // eax@3
  _iobuf *v3; // eax@3
  _iobuf *v4; // esi@3
  bool result; // al@4

  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = fs("%s\\WCInfo.hsb");
  v3 = fopen(v2, "rb");
  v4 = v3;
  if ( v3 )
  {
    fread(&v1->m_uiSelectedServerIndex, 4u, 1u, v3);
    fread(&v1->m_uiPageNum, 4u, 1u, v4);
    fclose(v4);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00477660) --------------------------------------------------------
void __thiscall WorldSelectWin::UpdateWinPos(WorldSelectWin *this)
{
  WorldSelectWin *v1; // esi@1
  WorldSelectOptionSetWin *v2; // ecx@1
  NiRefObjectVtbl *v3; // ST34_4@1
  int v4; // ST24_4@1

  v1 = this;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.52999997,
    0.60000002);
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_pkWorldSelectExitWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.94999999,
    0.059999999);
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_pkWorldSelectOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.94999999,
    0.15000001);
  v2 = v1->m_pkWorldSelectOptionSetWin;
  v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = (signed int)v1->m_pkWorldSelectOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x
     - ((int (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)((signed int)v1->m_pkWorldSelectOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y);
  v3[77].__vecDelDtor((NiRefObject *)v1->m_pkWorldSelectOptionSetWin, v4);
}

//----- (00477750) --------------------------------------------------------
void __thiscall WorldSelectExitWin::OnExit(WorldSelectExitWin *this)
{
  AccountFrameWork::WorldSelectCancel((AccountFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00477760) --------------------------------------------------------
bool __thiscall WorldSelectOptionWin::Create(WorldSelectOptionWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  NiNode *v7; // esi@10
  UIUtil ui; // [sp+10h] [bp-2Ch]@10
  int iLeft; // [sp+24h] [bp-18h]@4
  int iTop; // [sp+28h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+2Ch] [bp-10h]@1
  int v12; // [sp+38h] [bp-4h]@1

  v2 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v12 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Account\\Option.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, 0);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v4, 0, pkFrameWork, "Option", 0) )
  {
    v5 = spNode.m_pObject;
    v12 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v12) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateButton(&ui, 0, "Option", 0, 3);
  ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.94999999,
    0.15000001);
  LOBYTE(v12) = 0;
  UIUtil::_UIUtil(&ui);
  v7 = spNode.m_pObject;
  v12 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00477900) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::OnClose(WorldSelectOptionSetWin *this)
{
  unsigned int v1; // edx@2

  if ( !this->m_bChangeOption )
  {
    MachineOpt::ms_kGraphicOption.bWindowFullMode = this->m_kOpenGraphicOption.bWindowFullMode;
    v1 = this->m_kOpenGraphicOption.ui_DisplayResolutionHeight;
    MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = this->m_kOpenGraphicOption.ui_DisplayResolutionWidth;
    MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = v1;
    this->m_pkWinModeBtn->m_bCheck = MachineOpt::ms_kGraphicOption.bWindowFullMode == 0;
    AccountFrameWork::ms_bWindowSizeChanged = 1;
  }
  this->m_bChangeOption = 0;
}
// A98290: using guessed type bool AccountFrameWork__ms_bWindowSizeChanged;

//----- (00477950) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::ProcessMeInput(WorldSelectOptionSetWin *this, bool *bHit)
{
  PgWin *v2; // esi@1

  v2 = (PgWin *)this;
  if ( dword_B7035C >= 1 )
  {
    if ( !(unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                             PgWin::ms_iMsX.x,
                             PgWin::ms_iMsY) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  }
}
// B7035C: using guessed type int dword_B7035C;

//----- (00477990) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::ReadOption(WorldSelectOptionSetWin *this)
{
  memcpy(&this->m_kOpenGraphicOption, &MachineOpt::ms_kGraphicOption, sizeof(this->m_kOpenGraphicOption));
}

//----- (004779B0) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::OpenResolutionPopup(WorldSelectOptionSetWin *this)
{
  PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0x15u, 0, 0);
}

//----- (004779D0) --------------------------------------------------------
bool __thiscall WorldSelectWin::Create(WorldSelectWin *this, PgFrameWork *pkFrameWork)
{
  WorldSelectWin *v2; // esi@1
  NiNode *v3; // esi@2
  bool v4; // zf@4
  bool result; // al@7
  void *v6; // eax@8
  void *v7; // edi@8
  NiTexturePalette *v8; // edi@12
  char *v9; // eax@14
  PgSprData *v10; // eax@15
  int v11; // edi@17
  int v12; // ebx@17
  PgSprData *v13; // eax@17
  PgWinSpr *v14; // eax@17
  PgWinBut *v15; // eax@18
  PgSprData *v16; // eax@21
  PgWinSpr *v17; // eax@21
  PgSprData *v18; // eax@25
  PgWinSpr *v19; // eax@25
  PgSprData *v20; // eax@25
  PgWinSpr *v21; // eax@25
  PgSprData *v22; // eax@25
  PgWinSpr *v23; // eax@25
  PgSprData *v24; // eax@25
  PgWinSpr *v25; // eax@25
  PgSprData *v26; // eax@25
  PgWinSpr *v27; // eax@25
  PgSprData *v28; // eax@25
  PgWinSpr *v29; // eax@25
  PgSprData *v30; // eax@25
  PgWinSpr *v31; // eax@25
  PgSprData *v32; // eax@25
  PgWinSpr *v33; // eax@25
  PgSprData *v34; // eax@25
  PgWinSpr *v35; // eax@25
  NiNode *v36; // esi@27
  unsigned int v37; // [sp+38h] [bp-F8h]@1
  void *pchNodeName[5]; // [sp+48h] [bp-E8h]@19
  NiSourceTexture *pkTexture_SvList; // [sp+5Ch] [bp-D4h]@8
  int v40; // [sp+60h] [bp-D0h]@17
  PgWinBut **i; // [sp+64h] [bp-CCh]@17
  unsigned int j; // [sp+68h] [bp-C8h]@17
  NiSourceTexture *pkTexture; // [sp+6Ch] [bp-C4h]@1
  signed int pkSprData; // [sp+70h] [bp-C0h]@17
  NiPointer<NiNode> spNode; // [sp+74h] [bp-BCh]@1
  int uiTop; // [sp+78h] [bp-B8h]@15
  int uiLeft; // [sp+7Ch] [bp-B4h]@15
  char temp[32]; // [sp+80h] [bp-B0h]@21
  char acNodeName[128]; // [sp+A0h] [bp-90h]@18
  unsigned int v50; // [sp+120h] [bp-10h]@1
  int v51; // [sp+12Ch] [bp-4h]@1
  int v52; // [sp+130h] [bp+0h]@1

  v50 = (unsigned int)&v52 ^ __security_cookie;
  v37 = (unsigned int)&v52 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v51 = 0;
  pkTexture = MenuTexMgr::GetTexture(0x10u);
  if ( !pkTexture )
  {
    v3 = spNode.m_pObject;
    v51 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v4 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v4 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    return 0;
  }
  v6 = MenuTexMgr::GetTexture(0x11u);
  v7 = v6;
  pkTexture_SvList = (NiSourceTexture *)v6;
  if ( !v6 )
  {
    v3 = spNode.m_pObject;
    v51 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v4 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v2->m_uiListTexWidth = (*(int (__thiscall **)(void *))(*(_DWORD *)v6 + 60))(v6);
  v2->m_uiListTexHeight = (*(int (__thiscall **)(void *))(*(_DWORD *)v7 + 64))(v7);
  v8 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v9 = Folder::Merge(&Folder::m_acMenu, "\\Account\\LoginServerList.nif");
  PgUtil::LoadNodeNifFile(v9, &spNode, v8);
  if ( !spNode.m_pObject )
    return 0;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v10, 0, pkFrameWork, "WorldSelectWin", 0) )
  {
    v11 = uiLeft;
    v12 = uiTop;
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v14 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      v14,
      0,
      v37);
    pkSprData = (signed int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "SelectNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "SelectClick");
    PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "SelectOver");
    PgWinBut::CreateWin(
      uiLeft - v11,
      uiTop - v12,
      (PgSprData *)pkSprData,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0,
      0,
      0);
    j = 1;
    i = v2->m_pkServerButton;
    v40 = 8;
    do
    {
      memset(acNodeName, 0, 0x80u);
      sprintf(acNodeName, "ServerNameNor_%.2d");
      pkSprData = (signed int)PgSprData::Create(
                                &spNode.m_pObject->baseclass_0,
                                acNodeName,
                                &uiLeft,
                                &uiTop,
                                pkTexture_SvList);
      memset(acNodeName, 0, 0x80u);
      sprintf(acNodeName, "ServerNameClick_%.2d");
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, acNodeName);
      memset(acNodeName, 0, 0x80u);
      sprintf(acNodeName, "ServerNameOver_%.2d");
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, acNodeName);
      ++j;
      v15 = PgWinBut::CreateWin(
              uiLeft - v11,
              uiTop - v12,
              (PgSprData *)pkSprData,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              j,
              0,
              0);
      *i = v15;
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v15,
        0);
      ++i;
      --v40;
    }
    while ( v40 );
    pchNodeName[0] = "ServerConGood_";
    pchNodeName[1] = "ServerConBusy_";
    pchNodeName[2] = "ServerConNormal_";
    pchNodeName[3] = "ServerConCheck_";
    pchNodeName[4] = "ServerConClosed_";
    i = 0;
    pkSprData = 105;
    do
    {
      j = 0;
      do
      {
        sprintf(temp, "%s%.2d");
        v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, temp, &uiLeft, &uiTop, pkTexture);
        v17 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        if ( v17 )
        {
          (&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[j + pkSprData] = (NiRefObjectVtbl *)v17;
          v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v17,
            0);
        }
        ++j;
      }
      while ( (signed int)j < 5 );
      i = (PgWinBut **)((char *)i + 1);
      pkSprData += 5;
    }
    while ( pkSprData < 145 );
    pkSprData = (signed int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnLeft_Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "BtnLeft_Click");
    PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "BtnLeft_Over");
    PgWinBut::CreateWin(
      uiLeft - v11,
      uiTop - v12,
      (PgSprData *)pkSprData,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xAu,
      0,
      0);
    pkSprData = (signed int)PgSprData::Create(
                              &spNode.m_pObject->baseclass_0,
                              "BtnRight_Nor",
                              &uiLeft,
                              &uiTop,
                              pkTexture);
    PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "BtnRight_Click");
    PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "BtnRight_Over");
    PgWinBut::CreateWin(
      uiLeft - v11,
      uiTop - v12,
      (PgSprData *)pkSprData,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xBu,
      0,
      0);
    v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_01", &uiLeft, &uiTop, pkTexture);
    v19 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[0] = v19;
    ((void (__thiscall *)(PgWinSpr *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v19);
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_02", &uiLeft, &uiTop, pkTexture);
    v21 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[1] = v21;
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v21,
      0);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_03", &uiLeft, &uiTop, pkTexture);
    v23 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[2] = v23;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v23,
      0);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_04", &uiLeft, &uiTop, pkTexture);
    v25 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[3] = v25;
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_05", &uiLeft, &uiTop, pkTexture);
    v27 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[4] = v27;
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v27,
      0);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_06", &uiLeft, &uiTop, pkTexture);
    v29 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[5] = v29;
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_07", &uiLeft, &uiTop, pkTexture);
    v31 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[6] = v31;
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_08", &uiLeft, &uiTop, pkTexture);
    v33 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[7] = v33;
    v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v33,
      0);
    v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num_09", &uiLeft, &uiTop, pkTexture);
    v35 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPageWin[8] = v35;
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v35,
      0);
    ((void (__thiscall *)(WorldSelectWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.52999997,
      0.60000002);
    if ( WorldSelectWin::LoadLastConnectWorldInfo(v2) )
      v2->m_bLoadSuccess = 1;
    v36 = spNode.m_pObject;
    v51 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v36 )
      v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
    result = 1;
  }
  else
  {
    v51 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00478370) --------------------------------------------------------
void __thiscall WorldSelectWin::OnCmdOk(WorldSelectWin *this, bool bCheck)
{
  WorldSelectWin *v2; // esi@1

  v2 = this;
  AccountFrameWork::WorldSelectOk((AccountFrameWork *)this->baseclass_0.m_pkFrameWork);
  WorldSelectWin::SaveLastConnectWorldInfo(v2);
  v2->m_uiClickServerIndex = -1;
  v2->m_bDoubleClick = 0;
  v2->m_bJoin = 0;
}

//----- (004783B0) --------------------------------------------------------
void __thiscall WorldSelectWin::UpdateServerBtnState(WorldSelectWin *this, unsigned int nSelectedSlot)
{
  WorldSelectWin *v2; // esi@1
  char *v3; // edi@1
  signed int v4; // ebx@1
  int v5; // eax@4
  int *v6; // ebx@5
  signed int v7; // eax@6
  char *v8; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = (char *)this->m_pkServerButton;
  v8 = (char *)this->m_pkServerButton;
  v4 = 8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 532))(0);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( nSelectedSlot < 8 )
  {
    v5 = 8 * v2->m_uiPageNum;
    if ( v5 + nSelectedSlot >= g_kServer.m_kFiestaServerList.m_uiTotalWorld
      || (v6 = *(int **)&v2->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0],
          v6 == v2->m_vecServerOrder.baseclass_0._Mylast) )
    {
      if ( v5 >= (unsigned int)((signed int)((char *)v2->m_vecServerOrder.baseclass_0._Mylast
                                           - *(_DWORD *)&v2->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2) )
        v2->m_iSelectServer = g_kServer.m_kFiestaServerList.pkServerInfo[**(_DWORD **)&v2->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0]].kWorldNo;
      else
        v2->m_iSelectServer = g_kServer.m_kFiestaServerList.pkServerInfo[*(_DWORD *)(*(_DWORD *)&v2->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                   + 32 * v2->m_uiPageNum)].kWorldNo;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 532))(1);
    }
    else
    {
      v7 = v6[v5 + nSelectedSlot];
      if ( v7 < (signed int)g_kServer.m_kFiestaServerList.m_uiTotalWorld && v7 >= 0 )
        v2->m_iSelectServer = g_kServer.m_kFiestaServerList.pkServerInfo[v7].kWorldNo;
      ((void (__stdcall *)(_DWORD))v2->m_pkServerButton[nSelectedSlot]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[133].__vecDelDtor)(1);
      if ( v2->m_bJoin )
      {
        AccountFrameWork::WorldSelectOk((AccountFrameWork *)v2->baseclass_0.m_pkFrameWork);
        WorldSelectWin::SaveLastConnectWorldInfo(v2);
        v2->m_uiClickServerIndex = -1;
        v2->m_bDoubleClick = 0;
        v2->m_bJoin = 0;
      }
    }
  }
}

//----- (00478500) --------------------------------------------------------
void __thiscall WorldSelectWin::MakeEmptyServerName(WorldSelectWin *this, PgWinBut *pkBtn)
{
  PgSpr *v2; // eax@2
  PgSprData *v3; // eax@3
  NiScreenElementsData *v4; // esi@5
  PgSpr *v5; // eax@6
  PgSprData *v6; // eax@7
  NiScreenElementsData *v7; // esi@9
  PgSpr *v8; // eax@10
  PgSprData *v9; // eax@11
  NiScreenElementsData *v10; // esi@13
  NiPoint2 kValue; // [sp+4h] [bp-8h]@6

  if ( pkBtn )
  {
    v2 = pkBtn->baseclass_0.m_spSpr.m_pObject;
    v3 = v2 ? v2->m_spSprData.m_pObject : 0;
    v4 = v3->m_akGeomData.m_pBase->m_pObject;
    if ( v4 )
    {
      kValue.x = 0.0;
      kValue.y = 0.0;
      NiScreenElementsData::SetTexture(v4, 0, 0, 0, &kValue);
      kValue.x = 0.0;
      kValue.y = 0.0;
      NiScreenElementsData::SetTexture(v4, 0, 1, 0, &kValue);
      kValue.x = 0.0;
      kValue.y = 0.0;
      NiScreenElementsData::SetTexture(v4, 0, 2, 0, &kValue);
      kValue.x = 0.0;
      kValue.y = 0.0;
      NiScreenElementsData::SetTexture(v4, 0, 3, 0, &kValue);
      v5 = pkBtn->baseclass_0.m_spSpr.m_pObject;
      v6 = v5 ? v5->m_spSprData.m_pObject : 0;
      v7 = v6->m_akGeomData.m_pBase[2].m_pObject;
      if ( v7 )
      {
        kValue.x = 0.0;
        kValue.y = 0.0;
        NiScreenElementsData::SetTexture(v7, 0, 0, 0, &kValue);
        kValue.x = 0.0;
        kValue.y = 0.0;
        NiScreenElementsData::SetTexture(v7, 0, 1, 0, &kValue);
        kValue.x = 0.0;
        kValue.y = 0.0;
        NiScreenElementsData::SetTexture(v7, 0, 2, 0, &kValue);
        kValue.x = 0.0;
        kValue.y = 0.0;
        NiScreenElementsData::SetTexture(v7, 0, 3, 0, &kValue);
        v8 = pkBtn->baseclass_0.m_spSpr.m_pObject;
        if ( v8 )
          v9 = v8->m_spSprData.m_pObject;
        else
          v9 = 0;
        v10 = v9->m_akGeomData.m_pBase[1].m_pObject;
        if ( v10 )
        {
          kValue.x = 0.0;
          kValue.y = 0.0;
          NiScreenElementsData::SetTexture(v10, 0, 0, 0, &kValue);
          kValue.x = 0.0;
          kValue.y = 0.0;
          NiScreenElementsData::SetTexture(v10, 0, 1, 0, &kValue);
          kValue.x = 0.0;
          kValue.y = 0.0;
          NiScreenElementsData::SetTexture(v10, 0, 2, 0, &kValue);
          kValue.x = 0.0;
          kValue.y = 0.0;
          NiScreenElementsData::SetTexture(v10, 0, 3, 0, &kValue);
        }
      }
    }
  }
}

//----- (004786A0) --------------------------------------------------------
bool __thiscall WorldSelectExitWin::Create(WorldSelectExitWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // edi@1
  NiSourceTexture *v3; // esi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // ebx@15
  PgSprData *v11; // esi@15
  NiNode *v12; // esi@16
  int uiLeft; // [sp+18h] [bp-18h]@11
  int uiTop; // [sp+1Ch] [bp-14h]@11
  NiPointer<NiNode> spNodeExit; // [sp+20h] [bp-10h]@1
  int v16; // [sp+2Ch] [bp-4h]@1
  int iOffY; // [sp+38h] [bp+8h]@15

  v2 = (PgWinFrame *)this;
  spNodeExit.m_pObject = 0;
  v16 = 0;
  v3 = MenuTexMgr::GetTexture(0x10u);
  if ( !v3 )
  {
    v4 = spNodeExit.m_pObject;
    v16 = -1;
    if ( !spNodeExit.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNodeExit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNodeExit.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Account\\Exit.nif");
  PgUtil::LoadNodeNifFile(v8, &spNodeExit, v7);
  if ( !spNodeExit.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNodeExit.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(v2, 0, 0, v9, 0, pkFrameWork, "WorldSelectExitWin", 0) )
  {
    v4 = spNodeExit.m_pObject;
    v16 = -1;
    if ( !spNodeExit.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNodeExit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = uiLeft;
  iOffY = uiTop;
  v11 = PgSprData::Create(&spNodeExit.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v11, &spNodeExit.m_pObject->baseclass_0, "CancelClick");
  PgSprData::Add(v11, &spNodeExit.m_pObject->baseclass_0, "CancelOver");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - iOffY, v11, &v2->baseclass_0.baseclass_0, 0, 0, 0);
  ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.94999999,
    0.059999999);
  v16 = -1;
  if ( spNodeExit.m_pObject )
  {
    v12 = spNodeExit.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNodeExit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00478890) --------------------------------------------------------
void __thiscall WorldSelectExitWin::OnCommand(WorldSelectExitWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    AccountFrameWork::WorldSelectCancel((AccountFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (004788B0) --------------------------------------------------------
bool __thiscall WorldSelectOptionSetWin::Create(WorldSelectOptionSetWin *this, PgFrameWork *pkFrameWork)
{
  WorldSelectOptionSetWin *v2; // edi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  NiSourceTexture *v7; // eax@10
  PgSprData *v8; // eax@13
  PgWin *v9; // esi@13
  D3DXCOLOR v10; // ST1C_16@13
  char *v11; // ST10_4@13
  int v12; // ST0C_4@13
  int v13; // eax@13
  PgWin *v14; // esi@13
  D3DXCOLOR v15; // ST1C_16@13
  int v16; // ST0C_4@13
  int v17; // eax@13
  ColumnBut *v18; // eax@13
  D3DXCOLOR v19; // ST18_16@13
  char *v20; // eax@13
  NiNode *v21; // esi@14
  const char *v22; // [sp-1Ch] [bp-48h]@11
  int *v23; // [sp-18h] [bp-44h]@11
  int *v24; // [sp-14h] [bp-40h]@11
  NiSourceTexture *v25; // [sp-10h] [bp-3Ch]@11
  UIUtil ui; // [sp+0h] [bp-2Ch]@13
  int iLeft; // [sp+14h] [bp-18h]@4
  int iTop; // [sp+18h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v30; // [sp+28h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v30 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Account\\OptionSet.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, 0);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v4, 0, pkFrameWork, "OptionSet", 0) )
  {
    v5 = spNode.m_pObject;
    v30 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  v7 = MenuTexMgr::GetTexture(0x13u);
  if ( v7 )
  {
    v25 = v7;
    v24 = &iTop;
    v23 = &iLeft;
    v22 = "Theme";
  }
  else
  {
    v25 = 0;
    v24 = &iTop;
    v23 = &iLeft;
    v22 = "Theme";
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v22, v23, v24, v25);
  PgWinSpr::CreateWin(iLeft, iTop, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v30) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  v9 = (PgWin *)UIUtil::CreateButton(&ui, 0, "Apply", 0, 3);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v11 = TextData::Get(0x9FF9F4E6u);
  v12 = ((int (__thiscall *)(PgWin *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v9);
  v13 = ((int (__thiscall *)(PgWin *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v9);
  UIUtil::CreateTextNoTag(&ui, 0, 0, v13, v12, v11, v9, 0, COERCE_D3DXCOLOR(v10.r), 5u, 0, 0);
  UIUtil::CreateButton(&ui, 1u, "Cls", 0, 3);
  v14 = (PgWin *)UIUtil::CreateButton(&ui, 2u, "Resolution", 0, 3);
  *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v16 = ((int (__thiscall *)(PgWin *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v14);
  v17 = ((int (__thiscall *)(PgWin *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v14);
  v2->m_pkResolutionTextWin = UIUtil::CreateTextNoTag(
                                &ui,
                                0,
                                0,
                                v17,
                                v16,
                                "-",
                                v14,
                                0,
                                COERCE_D3DXCOLOR(v15.r),
                                5u,
                                0,
                                0);
  v18 = UIUtil::CreateCheckButton(&ui, 3u, "WinMode", 0, 2);
  v2->m_pkWinModeBtn = v18;
  v18->m_bCheck = MachineOpt::ms_kGraphicOption.bWindowFullMode == 0;
  *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v20 = TextData::Get(0x3354398Du);
  UIUtil::CreateTextEx(&ui, "WinModeText", v20, 0, COERCE_D3DXCOLOR(v19.r), 5u, 0, 0, 0);
  LOBYTE(v30) = 0;
  UIUtil::_UIUtil(&ui);
  v30 = -1;
  if ( spNode.m_pObject )
  {
    v21 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v21 )
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00478BE0) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::OnCommand(WorldSelectOptionSetWin *this, unsigned int wParam, int lParam)
{
  bool v3; // zf@2

  switch ( wParam )
  {
    case 3u:
      this->m_pkWinModeBtn->m_bCheck = this->m_pkWinModeBtn->m_bCheck == 0;
      v3 = this->m_pkWinModeBtn->m_bCheck == 0;
      AccountFrameWork::ms_bWindowSizeChanged = 1;
      MachineOpt::ms_kGraphicOption.bWindowFullMode = v3;
      break;
    case 2u:
      PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0x15u, 0, 0);
      break;
    case 0u:
      this->m_bChangeOption = 1;
      goto $LN1_20;
    case 1u:
$LN1_20:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    default:
      return;
  }
}
// A98290: using guessed type bool AccountFrameWork__ms_bWindowSizeChanged;

//----- (00478C70) --------------------------------------------------------
void __thiscall WorldSelectOptionSetWin::OnShowWin(WorldSelectOptionSetWin *this)
{
  WorldSelectOptionSetWin *v1; // ebx@1
  char temp[256]; // [sp+Ch] [bp-104h]@1
  unsigned int v3; // [sp+10Ch] [bp-4h]@1
  int v4; // [sp+110h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  memcpy(&this->m_kOpenGraphicOption, &MachineOpt::ms_kGraphicOption, sizeof(this->m_kOpenGraphicOption));
  sprintf(temp, "%i x %i");
  ((void (__stdcall *)(_DWORD))v1->m_pkResolutionTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(temp);
}
// A85C00: using guessed type int __security_cookie;

//----- (00478CF0) --------------------------------------------------------
void __thiscall WorldSelectWin::_WorldSelectWin(WorldSelectWin *this)
{
  WorldSelectWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectWin::_vftable_;
  this->m_uiSelectedServerIndex = -1;
  this->m_uiDisableIndex = -1;
  this->m_uiClickServerIndex = -1;
  *(_WORD *)&this->m_bDoubleClick = 0;
  this->m_bJoin = 0;
  if ( *(_DWORD *)&this->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecServerOrder.baseclass_0._Mylast = 0;
  v1->m_vecServerOrder.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 98A7B0: using guessed type int (__stdcall *WorldSelectWin___vftable_)(int uiFlags);
// 98A7CC: using guessed type int (__thiscall *WorldSelectWin___vftable_)(void *p, char);

//----- (00478D60) --------------------------------------------------------
void __thiscall WorldSelectWin::LoadServerListOrder(WorldSelectWin *this)
{
  WorldSelectWin *v1; // ebx@1
  char *v2; // eax@3
  _iobuf *v3; // eax@3
  _iobuf *v4; // esi@3
  int v5; // edi@3
  int PageNum; // [sp+Ch] [bp-8h]@4
  int MaxNum; // [sp+10h] [bp-4h]@4

  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = fs("%s\\SOrder.sdf");
  v3 = fopen(v2, "rb");
  v4 = v3;
  v5 = 0;
  if ( v3 )
  {
    MaxNum = 0;
    PageNum = 0;
    fread(&MaxNum, 4u, 1u, v3);
    if ( MaxNum > 0 && MaxNum > 0 )
    {
      do
      {
        if ( feof(v4) )
          break;
        fread(&PageNum, 4u, 1u, v4);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecServerOrder,
          (const unsigned int *)&PageNum);
        ++v5;
      }
      while ( v5 < MaxNum );
    }
    fclose(v4);
  }
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00478E10) --------------------------------------------------------
void __thiscall WorldSelectWin::MakeServerListOrder(WorldSelectWin *this)
{
  char *v1; // esi@1
  unsigned int v2; // edi@1
  int v3; // ebx@2
  unsigned int v4; // eax@3
  signed int v5; // edi@5
  int v6; // eax@7
  int v7; // eax@12
  unsigned int ServerListCount; // [sp+8h] [bp-8h]@1
  int i; // [sp+Ch] [bp-4h]@2

  v1 = (char *)&this->m_vecServerOrder;
  v2 = g_kServer.m_kFiestaServerList.m_uiTotalWorld;
  ServerListCount = g_kServer.m_kFiestaServerList.m_uiTotalWorld;
  if ( *(int **)&this->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0] == this->m_vecServerOrder.baseclass_0._Mylast )
  {
    v3 = 0;
    i = 0;
    if ( (g_kServer.m_kFiestaServerList.m_uiTotalWorld & 0x80000000u) == 0 )
    {
      do
      {
        v4 = *((_DWORD *)v1 + 1);
        if ( (unsigned int)&i >= v4 || *(_DWORD *)v1 > (unsigned int)&i )
        {
          if ( v4 == *((_DWORD *)v1 + 2) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v1,
              1u);
          v7 = *((_DWORD *)v1 + 1);
          if ( v7 )
            *(_DWORD *)v7 = v3;
        }
        else
        {
          v5 = (signed int)((char *)&i - *(_DWORD *)v1) >> 2;
          if ( v4 == *((_DWORD *)v1 + 2) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v1,
              1u);
          v6 = *((_DWORD *)v1 + 1);
          if ( v6 )
            *(_DWORD *)v6 = *(_DWORD *)(*(_DWORD *)v1 + 4 * v5);
          v2 = ServerListCount;
        }
        *((_DWORD *)v1 + 1) += 4;
        ++v3;
        i = v3;
      }
      while ( v3 <= (signed int)v2 );
    }
  }
}

//----- (00478EB0) --------------------------------------------------------
WorldSelectExitWin *__cdecl WorldSelectExitWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WorldSelectExitWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WorldSelectExitWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WorldSelectExitWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WorldSelectExitWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98A0DC: using guessed type int (__stdcall *WorldSelectExitWin___vftable_)(int uiFlags);
// 98A0FC: using guessed type int (__thiscall *WorldSelectExitWin___vftable_)(void *p, char);

//----- (00478FF0) --------------------------------------------------------
WorldSelectOptionWin *__cdecl WorldSelectOptionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WorldSelectOptionWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WorldSelectOptionWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WorldSelectOptionWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WorldSelectOptionWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98A320: using guessed type int (__stdcall *WorldSelectOptionWin___vftable_)(int uiFlags);
// 98A33C: using guessed type int (__thiscall *WorldSelectOptionWin___vftable_)(void *p, char);

//----- (00479130) --------------------------------------------------------
WorldSelectOptionSetWin *__cdecl WorldSelectOptionSetWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WorldSelectOptionSetWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A0u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &WorldSelectOptionSetWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WorldSelectOptionSetWin::_vftable_;
    MachineOpt::GraphicOption::GraphicOption((MachineOpt::GraphicOption *)((char *)v2 + 348));
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 103) = 0;
    *((_BYTE *)v2 + 409) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WorldSelectOptionSetWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98A560: using guessed type int (__stdcall *WorldSelectOptionSetWin___vftable_)(int uiFlags);
// 98A57C: using guessed type int (__thiscall *WorldSelectOptionSetWin___vftable_)(void *p, char);

//----- (00479290) --------------------------------------------------------
void __thiscall WorldSelectWin::WorldSelectWin(WorldSelectWin *this)
{
  WorldSelectWin *v1; // esi@1
  char *v2; // eax@1
  char *v3; // ebx@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  *(_DWORD *)&v1->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecServerOrder.baseclass_0._Mylast = 0;
  v1->m_vecServerOrder.baseclass_0._Myend = 0;
  v1->m_fBtClickDelayTime = 0.0;
  v1->m_uiListTexHeight = 0;
  v1->m_uiListTexWidth = 0;
  v1->m_uiSelectedServerIndex = -1;
  v1->m_uiDisableIndex = -1;
  v1->m_uiClickServerIndex = -1;
  *(_WORD *)&v1->m_bDoubleClick = 0;
  v1->m_bJoin = 0;
  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_vecServerOrder,
    0x1Eu);
  v2 = (char *)v1->m_vecServerOrder.baseclass_0._Mylast;
  v3 = *(char **)&v1->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    memmove(v3, v2, 0);
    v1->m_vecServerOrder.baseclass_0._Mylast = (int *)v3;
  }
  WorldSelectWin::LoadServerListOrder(v1);
}
// 98A7B0: using guessed type int (__stdcall *WorldSelectWin___vftable_)(int uiFlags);
// 98A7CC: using guessed type int (__thiscall *WorldSelectWin___vftable_)(void *p, char);

//----- (00479390) --------------------------------------------------------
WorldSelectWin *__cdecl WorldSelectWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  WorldSelectWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x298u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    WorldSelectWin::WorldSelectWin((WorldSelectWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (WorldSelectWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004794C0) --------------------------------------------------------
void __thiscall WorldSelectWin::UpdatePageState(WorldSelectWin *this)
{
  WorldSelectWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1
  int v4; // esi@3
  signed int v5; // edi@3
  double v6; // st7@7
  int v7; // ecx@7
  unsigned int v8; // eax@7
  double v9; // st6@7
  double v10; // st5@7
  signed int v11; // esi@9
  int v12; // edi@9
  int *v13; // edx@11
  int *v14; // eax@11
  signed int v15; // eax@13
  PgWinBut *v16; // esi@17
  int v17; // eax@17
  PgSpr *v18; // eax@17
  PgSprData *v19; // eax@18
  NiScreenElementsData *v20; // edi@20
  PgSpr *v21; // eax@20
  PgSprData *v22; // eax@21
  NiScreenElementsData *v23; // edi@23
  PgSpr *v24; // esi@23
  PgSprData *v25; // esi@24
  NiScreenElementsData *v26; // esi@26
  int v27; // [sp+Ch] [bp-A0h]@26
  float v28; // [sp+10h] [bp-9Ch]@26
  NiPoint2 kValue; // [sp+14h] [bp-98h]@20
  int v30; // [sp+1Ch] [bp-90h]@26
  float v31; // [sp+20h] [bp-8Ch]@26
  float v32; // [sp+24h] [bp-88h]@23
  float v33; // [sp+28h] [bp-84h]@23
  float v34; // [sp+2Ch] [bp-80h]@26
  float v35; // [sp+30h] [bp-7Ch]@26
  float v36; // [sp+34h] [bp-78h]@20
  float v37; // [sp+38h] [bp-74h]@20
  float v38; // [sp+3Ch] [bp-70h]@26
  float v39; // [sp+40h] [bp-6Ch]@26
  float v40; // [sp+44h] [bp-68h]@23
  float v41; // [sp+48h] [bp-64h]@23
  double v42; // [sp+4Ch] [bp-60h]@17
  int v43; // [sp+54h] [bp-58h]@20
  float v44; // [sp+58h] [bp-54h]@20
  int v45; // [sp+5Ch] [bp-50h]@23
  float v46; // [sp+60h] [bp-4Ch]@23
  int v47; // [sp+64h] [bp-48h]@23
  float v48; // [sp+68h] [bp-44h]@23
  int v49; // [sp+6Ch] [bp-40h]@20
  float v50; // [sp+70h] [bp-3Ch]@20
  int nCurrStartServerIdx; // [sp+74h] [bp-38h]@7
  float cDefalutX; // [sp+78h] [bp-34h]@9
  int cHeightGapInTex; // [sp+7Ch] [bp-30h]@9
  int cWidthGapInTex; // [sp+80h] [bp-2Ch]@7
  float cWidthInTex; // [sp+84h] [bp-28h]@7
  int i; // [sp+88h] [bp-24h]@9
  int cDefalutY; // [sp+8Ch] [bp-20h]@9
  float cHeightInTex; // [sp+90h] [bp-1Ch]@9
  unsigned int v59; // [sp+94h] [bp-18h]@9
  float fx; // [sp+98h] [bp-14h]@17
  float v61; // [sp+9Ch] [bp-10h]@17
  int v62; // [sp+A0h] [bp-Ch]@7
  float v63; // [sp+A4h] [bp-8h]@17
  float fy; // [sp+A8h] [bp-4h]@17

  v1 = this;
  v2 = (char *)this->m_pkPageWin;
  v3 = 9;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  ((void (__stdcall *)(signed int))v1->m_pkPageWin[v1->m_uiPageNum]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v1->m_uiDisableIndex = -1;
  v4 = (int)v1->m_pkServerButton;
  v5 = 8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 532))(0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  if ( *(int **)&v1->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0] == v1->m_vecServerOrder.baseclass_0._Mylast )
    WorldSelectWin::MakeServerListOrder(v1);
  v6 = (double)v1->m_uiListTexWidth;
  v7 = 8 * v1->m_uiPageNum;
  nCurrStartServerIdx = 8 * v1->m_uiPageNum;
  *(float *)&v62 = v6;
  v8 = v1->m_uiListTexHeight;
  cWidthInTex = 268.0 / *(float *)&v62;
  *(float *)&v62 = 2.0 / *(float *)&v62;
  v9 = *(float *)&v62;
  cWidthGapInTex = v62;
  v10 = (double)(signed int)v1->m_uiListTexHeight;
  if ( (v8 & 0x80000000u) != 0 )
    v10 = v10 + 4294967300.0;
  *(float *)&v62 = v10;
  v11 = 0;
  v12 = (int)v1->m_pkServerButton;
  i = 0;
  v59 = 4 * v7;
  cHeightInTex = 32.0 / *(float *)&v62;
  *(float *)&v62 = 2.0 / *(float *)&v62;
  cHeightGapInTex = v62;
  cDefalutY = v62;
  v62 = (int)v1->m_pkServerButton;
  cDefalutX = v9;
  while ( 1 )
  {
    v13 = *(int **)&v1->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0];
    v14 = v1->m_vecServerOrder.baseclass_0._Mylast;
    if ( v13 == v14 )
      break;
    if ( v11 + v7 > v14 - v13 - 1
      || (v15 = v13[v59 / 4], v15 >= (signed int)g_kServer.m_kFiestaServerList.m_uiTotalWorld)
      || v15 < 0 )
    {
      WorldSelectWin::MakeEmptyServerName(v1, *(PgWinBut **)v12);
    }
    else
    {
      if ( v1->m_uiDisableIndex < v11 )
        v1->m_uiDisableIndex = v11;
      v16 = *(PgWinBut **)v12;
      (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)v12 + 256))(*(_DWORD *)v12, 1);
      v17 = *(_DWORD *)(v59 + *(_DWORD *)&v1->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0]) / 3;
      LODWORD(v61) = *(_DWORD *)(v59 + *(_DWORD *)&v1->m_vecServerOrder.baseclass_0.___u0.baseclass_0.dummy[0]) % 3;
      LODWORD(v63) = v17;
      v18 = v16->baseclass_0.m_spSpr.m_pObject;
      fx = (*(float *)&cWidthGapInTex + cWidthInTex) * (double)SLODWORD(v61) + cDefalutX;
      v42 = *(float *)&cHeightGapInTex + cHeightInTex;
      fy = v42 * (double)SLODWORD(v63) * 3.0 + *(float *)&cDefalutY;
      if ( v18 )
        v19 = v18->m_spSprData.m_pObject;
      else
        v19 = 0;
      v20 = v19->m_akGeomData.m_pBase->m_pObject;
      kValue.x = fx;
      kValue.y = fy;
      NiScreenElementsData::SetTexture(v20, 0, 0, 0, &kValue);
      v36 = fx;
      v63 = fy + cHeightInTex;
      v37 = v63;
      NiScreenElementsData::SetTexture(v20, 0, 1, 0, (NiPoint2 *)&v36);
      v61 = fx + cWidthInTex;
      *(float *)&v43 = v61;
      v44 = v63;
      NiScreenElementsData::SetTexture(v20, 0, 2, 0, (NiPoint2 *)&v43);
      *(float *)&v49 = v61;
      v50 = fy;
      NiScreenElementsData::SetTexture(v20, 0, 3, 0, (NiPoint2 *)&v49);
      v21 = v16->baseclass_0.m_spSpr.m_pObject;
      fy = fy + v42;
      if ( v21 )
        v22 = v21->m_spSprData.m_pObject;
      else
        v22 = 0;
      v23 = v22->m_akGeomData.m_pBase[2].m_pObject;
      v40 = fx;
      v41 = fy;
      NiScreenElementsData::SetTexture(v23, 0, 0, 0, (NiPoint2 *)&v40);
      v32 = fx;
      v63 = fy + cHeightInTex;
      v33 = v63;
      NiScreenElementsData::SetTexture(v23, 0, 1, 0, (NiPoint2 *)&v32);
      *(float *)&v47 = v61;
      v48 = v63;
      NiScreenElementsData::SetTexture(v23, 0, 2, 0, (NiPoint2 *)&v47);
      *(float *)&v45 = v61;
      v46 = fy;
      NiScreenElementsData::SetTexture(v23, 0, 3, 0, (NiPoint2 *)&v45);
      v24 = v16->baseclass_0.m_spSpr.m_pObject;
      fy = fy + v42;
      if ( v24 )
        v25 = v24->m_spSprData.m_pObject;
      else
        v25 = 0;
      v26 = v25->m_akGeomData.m_pBase[1].m_pObject;
      v38 = fx;
      v39 = fy;
      NiScreenElementsData::SetTexture(v26, 0, 0, 0, (NiPoint2 *)&v38);
      v34 = fx;
      v63 = fy + cHeightInTex;
      v35 = v63;
      NiScreenElementsData::SetTexture(v26, 0, 1, 0, (NiPoint2 *)&v34);
      *(float *)&v30 = v61;
      v31 = v63;
      NiScreenElementsData::SetTexture(v26, 0, 2, 0, (NiPoint2 *)&v30);
      *(float *)&v27 = v61;
      v28 = fy;
      NiScreenElementsData::SetTexture(v26, 0, 3, 0, (NiPoint2 *)&v27);
      v12 = v62;
      v11 = i;
    }
    v59 += 4;
    ++v11;
    v12 += 4;
    i = v11;
    v62 = v12;
    if ( v11 >= 8 )
    {
      WorldSelectWin::UpdateServerList(v1);
      return;
    }
    v7 = nCurrStartServerIdx;
  }
}

//----- (004798D0) --------------------------------------------------------
void __thiscall WorldSelectWin::InitWorldSelectExitWin(WorldSelectWin *this, PgFrameWork *pkFrameWork)
{
  WorldSelectWin *v2; // esi@1
  WorldSelectOptionSetWin *v3; // eax@1
  WorldSelectOptionWin *v4; // ebx@1
  NiRefObjectVtbl *v5; // edi@1
  int pkFrameWorka; // [sp+14h] [bp+8h]@1

  v2 = this;
  this->m_pkWorldSelectExitWin = WorldSelectExitWin::CreateWin(pkFrameWork);
  v2->m_pkWorldSelectOptionWin = WorldSelectOptionWin::CreateWin(pkFrameWork);
  v3 = WorldSelectOptionSetWin::CreateWin(pkFrameWork);
  v4 = v2->m_pkWorldSelectOptionWin;
  v2->m_pkWorldSelectOptionSetWin = v3;
  v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkFrameWorka = (int)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                        (NiRefObject *)v3,
                        (signed int)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y);
  v5[77].__vecDelDtor(
    (NiRefObject *)v2->m_pkWorldSelectOptionSetWin,
    (signed int)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x - pkFrameWorka);
  v2->m_pkWorldSelectOptionWin->m_pkWorldSelectOptionSetWin = v2->m_pkWorldSelectOptionSetWin;
}

//----- (00479960) --------------------------------------------------------
void __thiscall WorldSelectWin::OnShowWin(WorldSelectWin *this)
{
  WorldSelectWin *v1; // esi@1
  bool v2; // zf@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkWorldSelectExitWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkWorldSelectOptionWin->baseclass_0.baseclass_0.baseclass_0);
  WorldSelectWin::MakeServerListOrder(v1);
  v2 = v1->m_bLoadSuccess == 0;
  v1->m_uiPageNum = 0;
  v1->m_iSelectServer = -1;
  if ( v2 )
  {
    v1->m_uiSelectedServerIndex = -1;
    v1->m_uiDisableIndex = -1;
    v1->m_uiClickServerIndex = -1;
    v1->m_bDoubleClick = 0;
    v1->m_bJoin = 0;
  }
  WorldSelectWin::UpdatePageState(v1);
  if ( v1->m_bLoadSuccess )
    WorldSelectWin::UpdateServerBtnState(v1, v1->m_uiSelectedServerIndex);
}

//----- (004799F0) --------------------------------------------------------
void __thiscall WorldSelectWin::OnNextPage(WorldSelectWin *this)
{
  WorldSelectWin *v1; // esi@1
  unsigned int v2; // eax@1

  v1 = this;
  v2 = this->m_uiPageNum;
  if ( 8 * v2 + 8 < g_kServer.m_kFiestaServerList.m_uiTotalWorld )
    this->m_uiPageNum = v2 + 1;
  WorldSelectWin::UpdatePageState(this);
  if ( v1->m_uiSelectedServerIndex != -1 )
    WorldSelectWin::UpdateServerBtnState(v1, v1->m_uiSelectedServerIndex);
}

//----- (00479A30) --------------------------------------------------------
void __thiscall WorldSelectWin::OnBackPage(WorldSelectWin *this)
{
  WorldSelectWin *v1; // esi@1
  unsigned int v2; // eax@1

  v1 = this;
  v2 = this->m_uiPageNum;
  if ( v2 )
    this->m_uiPageNum = v2 - 1;
  WorldSelectWin::UpdatePageState(this);
  if ( v1->m_uiSelectedServerIndex != -1 )
    WorldSelectWin::UpdateServerBtnState(v1, v1->m_uiSelectedServerIndex);
}

//----- (00479A60) --------------------------------------------------------
void __thiscall WorldSelectWin::UpdateMeWin(WorldSelectWin *this, float fCurTime)
{
  WorldSelectWin *v2; // esi@1
  char v3; // cl@4
  char v4; // bl@6
  int v5; // eax@30
  int v6; // eax@35

  v2 = this;
  if ( !(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1)
    && CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime) )
  {
    v2->m_bDoubleClick = 0;
    v2->m_uiClickServerIndex = -1;
  }
  v3 = *(_BYTE *)(g_pkKeyboard + 48);
  if ( !(v3 & 2) && *(_BYTE *)(g_pkKeyboard + 80) & 2
    || (v4 = *(_BYTE *)(g_pkKeyboard + 42), !(v4 & 1)) && *(_BYTE *)(g_pkKeyboard + 74) & 1 )
  {
    v6 = v2->m_uiSelectedServerIndex;
    if ( v6 == -1 )
      goto LABEL_31;
    if ( v6 )
    {
      v2->m_uiSelectedServerIndex = v6 - 1;
      WorldSelectWin::UpdateServerBtnState(v2, v6 - 1);
    }
  }
  else
  {
    if ( (v3 & 0x40 || !(*(_BYTE *)(g_pkKeyboard + 80) & 0x40))
      && (*(_BYTE *)(g_pkKeyboard + 43) & 1 || !(*(_BYTE *)(g_pkKeyboard + 75) & 1)) )
    {
      if ( !(v3 & 8) && *(_BYTE *)(g_pkKeyboard + 80) & 8 || !(v4 & 8) && *(_BYTE *)(g_pkKeyboard + 74) & 8 )
      {
        WorldSelectWin::OnBackPage(v2);
        WorldSelectWin::UpdateServerBtnState(v2, v2->m_uiSelectedServerIndex);
      }
      else
      {
        if ( !(v3 & 0x10) && *(_BYTE *)(g_pkKeyboard + 80) & 0x10
          || !(v4 & 0x20) && *(_BYTE *)(g_pkKeyboard + 74) & 0x20 )
        {
          WorldSelectWin::OnNextPage(v2);
          WorldSelectWin::UpdateServerBtnState(v2, v2->m_uiSelectedServerIndex);
        }
        else
        {
          if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 || !(*(_BYTE *)(g_pkKeyboard + 65) & 2) )
          {
            if ( !(*(_BYTE *)(g_pkKeyboard + 36) & 0x10) && *(_BYTE *)(g_pkKeyboard + 68) & 0x10
              || !(*(_BYTE *)(g_pkKeyboard + 46) & 4) && *(_BYTE *)(g_pkKeyboard + 78) & 4 )
              WorldSelectWin::OnCmdOk(v2, 1);
          }
          else
          {
            WorldSelectWin::InitServerListCtrlData(v2);
            AccountFrameWork::WorldSelectCancel((AccountFrameWork *)v2->baseclass_0.m_pkFrameWork);
          }
        }
      }
      return;
    }
    v5 = v2->m_uiSelectedServerIndex;
    if ( v5 == -1 )
    {
LABEL_31:
      v2->m_uiSelectedServerIndex = 0;
      WorldSelectWin::UpdateServerBtnState(v2, 0);
      return;
    }
    if ( v5 != 7 && v5 != v2->m_uiDisableIndex )
    {
      v2->m_uiSelectedServerIndex = v5 + 1;
      WorldSelectWin::UpdateServerBtnState(v2, v5 + 1);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00479C00) --------------------------------------------------------
void __thiscall WorldSelectWin::OnCommand(WorldSelectWin *this, unsigned int wParam, int lParam)
{
  WorldSelectWin *v3; // esi@1
  bool v4; // al@4

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      WorldSelectWin::OnCmdOk(this, 1);
      break;
    case 1u:
      AccountFrameWork::WorldSelectCancel((AccountFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 2u:
    case 3u:
    case 4u:
    case 5u:
    case 6u:
    case 7u:
    case 8u:
    case 9u:
      v4 = this->m_bDoubleClick;
      if ( !v4 )
        goto LABEL_14;
      if ( this->m_uiClickServerIndex == wParam )
        this->m_bJoin = 1;
      if ( !v4 )
      {
LABEL_14:
        CNSTimer_Interval::ReSet(&this->m_kTimerInterval, Timer::ms_fCurTime);
        v3->m_kTimerInterval.m_fCheckTime = 0.5;
        v3->m_bDoubleClick = 1;
        v3->m_uiClickServerIndex = wParam;
      }
      WorldSelectWin::UpdateServerBtnState(v3, wParam - 2);
      v3->m_uiSelectedServerIndex = wParam - 2;
      break;
    case 0xAu:
      WorldSelectWin::OnBackPage(this);
      break;
    case 0xBu:
      WorldSelectWin::OnNextPage(this);
      break;
    default:
      return;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00479CE0) --------------------------------------------------------
const bool __thiscall NiInputKeyboard::KeyWasReleased(NiInputKeyboard *this, NiInputKeyboard::KeyCode eKey)
{
  const bool result; // al@2

  if ( eKey )
    result = !(((unsigned __int8)this->m_aucKeystate[(signed int)eKey >> 3] >> (eKey & 7)) & 1)
          && ((unsigned __int8)this->m_aucKeystateLastUpdate[(signed int)eKey >> 3] >> (eKey & 7)) & 1;
  else
    result = 0;
  return result;
}

//----- (00479D20) --------------------------------------------------------
void *__thiscall WorldSelectExitWin::_scalar_deleting_destructor_(WorldSelectExitWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectExitWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectExitWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98A0DC: using guessed type int (__stdcall *WorldSelectExitWin___vftable_)(int uiFlags);
// 98A0FC: using guessed type int (__thiscall *WorldSelectExitWin___vftable_)(void *p, char);

//----- (00479D60) --------------------------------------------------------
void *__thiscall WorldSelectOptionWin::_vector_deleting_destructor_(WorldSelectOptionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectOptionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectOptionWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98A320: using guessed type int (__stdcall *WorldSelectOptionWin___vftable_)(int uiFlags);
// 98A33C: using guessed type int (__thiscall *WorldSelectOptionWin___vftable_)(void *p, char);

//----- (00479DA0) --------------------------------------------------------
void *__thiscall WorldSelectOptionSetWin::_scalar_deleting_destructor_(WorldSelectOptionSetWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldSelectOptionSetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldSelectOptionSetWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98A560: using guessed type int (__stdcall *WorldSelectOptionSetWin___vftable_)(int uiFlags);
// 98A57C: using guessed type int (__thiscall *WorldSelectOptionSetWin___vftable_)(void *p, char);

//----- (00479DE0) --------------------------------------------------------
void *__thiscall WorldSelectWin::_vector_deleting_destructor_(WorldSelectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  WorldSelectWin::_WorldSelectWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00479E10) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_USER_CONNECTCUT_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = iRevBytes;
  if ( *(_WORD *)pvData == 1667 )
    g_kServer.m_bDoubleConnected = 1;
  return result;
}

//----- (00479E30) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_PRISON_GET_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork::ms_bStateIsPrison = 0;
  CharSelectFrameWork::ms_dPrisonTimeMinute = 0;
  CharSelectFrameWork::ms_bGetPrisonInfo = 1;
  if ( *(_WORD *)pvData == 3504 )
  {
    CharSelectFrameWork::ms_bStateIsPrison = 1;
    CharSelectFrameWork::ms_dPrisonTimeMinute = *((_WORD *)pvData + 1);
  }
  return iRevBytes;
}
// A94394: using guessed type bool CharSelectFrameWork__ms_bGetPrisonInfo;
// A94395: using guessed type bool CharSelectFrameWork__ms_bStateIsPrison;
// A94398: using guessed type unsigned __int32 CharSelectFrameWork__ms_dPrisonTimeMinute;

//----- (00479E80) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_EVENT_FRIEND_GETCOUNT_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (00479E90) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHARGED_BOOTHSLOTSIZE_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_BYTE *)pvData <= 0x14u )
    PrivateStoreWin::ms_byBoothSize = *(_BYTE *)pvData;
  return iRevBytes;
}
// A7CF04: using guessed type unsigned __int8 PrivateStoreWin__ms_byBoothSize;

//----- (00479EB0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  MachineOpt::SetGameOpt((PROTO_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD *)pvData);
  CharSelectFrameWork::ms_bLoadGameSystemOptionSuccess = 1;
  CharSelectFrameWork::m_bLoadGameSystemOption = 1;
  return iRevBytes;
}
// A9438E: using guessed type bool CharSelectFrameWork__m_bLoadGameSystemOption;
// A94392: using guessed type bool CharSelectFrameWork__ms_bLoadGameSystemOptionSuccess;

//----- (00479EE0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_KEYMAP_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  MachineOpt::SetKeyMap((PROTO_NC_CHAR_OPTION_IMPROVE_GET_KEYMAP_CMD *)pvData);
  result = iRevBytes;
  CharSelectFrameWork::m_bLoadNewKeyMapOption = 1;
  return result;
}
// A9438D: using guessed type bool CharSelectFrameWork__m_bLoadNewKeyMapOption;

//----- (00479F00) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_SHORTCUTDATA_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // esi@1
  SHORT_CUT_DATA *v4; // edi@2

  CharSelectFrameWork::m_bLoadShortCutDataOption = 1;
  ShortCutMgr::Clear(&g_kShortCutMgr);
  OptionManager::Clear(&GameFrameWork::m_kOptionManager);
  OptionManager::Register(&GameFrameWork::m_kOptionManager, &g_kShortCutMgr.baseclass_0);
  CharSelectFrameWork::ms_bNewCharCreat = 0;
  CharSelectFrameWork::ms_bShortCutDataLoaded = 1;
  v3 = 0;
  if ( *(_WORD *)pvData > 0u )
  {
    v4 = (SHORT_CUT_DATA *)((char *)pvData + 2);
    do
    {
      ShortCutMgr::LoadFromPacket(&g_kShortCutMgr, v4);
      ++v3;
      ++v4;
    }
    while ( v3 < *(_WORD *)pvData );
  }
  return iRevBytes;
}
// A94381: using guessed type bool CharSelectFrameWork__m_bLoadShortCutDataOption;
// A94393: using guessed type bool CharSelectFrameWork__ms_bNewCharCreat;
// A982C8: using guessed type bool CharSelectFrameWork__ms_bShortCutDataLoaded;

//----- (00479F70) --------------------------------------------------------
void __thiscall CharSelectFrameWork::NcAvatarEraseReq(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  PgNet *v2; // ecx@2
  PgFrameWork *v3; // eax@3
  PgNet *v4; // ecx@5
  NETCOMMAND netcmd; // [sp+4h] [bp-Ch]@5
  NETCOMMAND netcmd1; // [sp+8h] [bp-8h]@3
  PROTO_NC_AVATAR_ERASE_REQ kProto; // [sp+Fh] [bp-1h]@5

  v1 = this;
  if ( this->m_iEraseSlot != -1 )
  {
    v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    if ( v2 )
    {
      netcmd1.protocol = 14346;
      PgNet::SendNetMsg(v2, &netcmd1, 2);
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::NcRaidLeaveReq((GameFrameWork *)v3);
      netcmd.protocol = 5127;
      PgNet::AddNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &netcmd, 2);
      v4 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
      kProto.slot = LOBYTE(v1->m_iEraseSlot);
      PgNet::SendNetMsg(v4, &kProto, 1);
    }
  }
}

//----- (0047A000) --------------------------------------------------------
void __thiscall CharSelectFrameWork::NcCharLoginReq(CharSelectFrameWork *this)
{
  CharSelectFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  char v3; // al@2
  PgNet *v4; // ecx@2
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@2
  PROTO_NC_CHAR_LOGIN_REQ kProto; // [sp+Bh] [bp-1h]@2

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    netcmd.protocol = 4097;
    PgNet::AddNetMsg(v2, &netcmd, 2);
    v3 = User::GetSelectedAvatarSlot(&g_kUser);
    v4 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
    kProto.slot = v3;
    PgNet::SendNetMsg(v4, &kProto, 1);
  }
}

//----- (0047A050) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_LOGIN_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  int v4; // eax@1

  v3 = *((_WORD *)pvData + 8);
  *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[0] = *(_QWORD *)pvData;
  *(_DWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[8] = *((_DWORD *)pvData + 2);
  v4 = *((_DWORD *)pvData + 3);
  g_kServer.m_kZoneAddr.m_iPort = v3;
  *(_DWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[12] = v4;
  PgFrameWork::PostFrameMsgStart(&this->baseclass_0, ZoneLoginNetFrameWorkID, 0);
  return iRevBytes;
}

//----- (0047A0A0) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::OnLoadShortCutDataOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_SHORTCUTDATA_ACK *pkAck)
{
  SpStream kStream; // [sp+0h] [bp-1Ch]@2
  int v4; // [sp+18h] [bp-4h]@2

  CharSelectFrameWork::m_bLoadShortCutDataOption = 1;
  ShortCutMgr::Clear(&g_kShortCutMgr);
  OptionManager::Clear(&GameFrameWork::m_kOptionManager);
  OptionManager::Register(&GameFrameWork::m_kOptionManager, &g_kShortCutMgr.baseclass_0);
  CharSelectFrameWork::ms_bNewCharCreat = 0;
  CharSelectFrameWork::ms_bShortCutDataLoaded = 0;
  if ( pkAck->bSuccess )
  {
    CharSelectFrameWork::ms_bShortCutDataLoaded = 1;
    kStream.m_abyData = (char *)operator new__(0x400u);
    kStream.m_uiMaxSize = 1024;
    kStream.m_uiHeadIndex = 0;
    kStream.m_uiTailIndex = 0;
    v4 = 0;
    SpStream::PushMem(&kStream, &pkAck->Data, 0x400u);
    if ( ShortCutMgr::LoadOption(&g_kShortCutMgr, &kStream) )
    {
      ShortCutMgr::CheckContents(&g_kShortCutMgr);
      operator delete__(kStream.m_abyData);
      return 1;
    }
    CharSelectFrameWork::ms_bShortCutDataLoaded = 0;
    operator delete__(kStream.m_abyData);
  }
  else
  {
    CharSelectFrameWork::ms_bShortCutDataLoaded = 0;
    if ( User::Lv(&g_kUser) <= 5 )
      CharSelectFrameWork::ms_bNewCharCreat = 1;
  }
  return 0;
}
// A94381: using guessed type bool CharSelectFrameWork__m_bLoadShortCutDataOption;
// A94393: using guessed type bool CharSelectFrameWork__ms_bNewCharCreat;
// A982C8: using guessed type bool CharSelectFrameWork__ms_bShortCutDataLoaded;

//----- (0047A1D0) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::OnLoadShortCutSizeOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_SHORTCUTSIZE_ACK *pkAck)
{
  bool result; // al@1
  unsigned int v3; // ecx@2

  result = 1;
  CharSelectFrameWork::m_bLoadShortCutSizeOption = 1;
  if ( pkAck->bSuccess )
  {
    v3 = *(_DWORD *)&pkAck->Data.Data[0];
    if ( (_WORD)v3 == MachineOpt::ms_shortCutSizeOptionData
      && (unsigned __int8)(v3 >> 16) == unk_B5BB52
      && BYTE3(v3) == byte_B5BB53
      && (unsigned __int8)*(_WORD *)&pkAck->Data.Data[4] == (_BYTE)dword_B5BB54 )
    {
      memcpy(&MachineOpt::ms_shortCutSizeOptionData, &pkAck->Data, 0x17u);
      ShortCutWin::m_uiShortcutSubWinIndex = (unsigned int)dword_B5BB54 >> 24;
      CharSelectFrameWork::ms_bLoadShortCutSizeOptionSuccess = 1;
    }
    else
    {
      CharSelectFrameWork::ms_bLoadShortCutSizeOptionSuccess = 0;
      result = 0;
    }
  }
  else
  {
    CharSelectFrameWork::ms_bLoadShortCutSizeOptionSuccess = 0;
    result = 0;
  }
  return result;
}
// A94382: using guessed type bool CharSelectFrameWork__m_bLoadShortCutSizeOption;
// A94390: using guessed type bool CharSelectFrameWork__ms_bLoadShortCutSizeOptionSuccess;
// A99D80: using guessed type unsigned int ShortCutWin__m_uiShortcutSubWinIndex;
// B5BB53: using guessed type char byte_B5BB53;
// B5BB54: using guessed type int dword_B5BB54;

//----- (0047A280) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::OnLoadWindowPosOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_WINDOWPOS_ACK *pkAck)
{
  bool result; // al@1
  unsigned int v3; // ecx@2

  result = 1;
  CharSelectFrameWork::m_bLoadWindowsPosOption = 1;
  if ( pkAck->bSuccess )
  {
    v3 = *(_DWORD *)&pkAck->Data.Data[0];
    if ( (_WORD)v3 == MachineOpt::m_stSaveWinPosOption
      && (unsigned __int8)(v3 >> 16) == unk_A82602
      && BYTE3(v3) == byte_A82603
      && (unsigned __int8)*(_WORD *)&pkAck->Data.Data[4] == (_BYTE)word_A82604 )
    {
      memcpy(&MachineOpt::m_stSaveWinPosOption, &pkAck->Data, 0xFAu);
      CharSelectFrameWork::ms_bLoadWindowsPosOptionSuccess = 1;
    }
    else
    {
      CharSelectFrameWork::ms_bLoadWindowsPosOptionSuccess = 0;
      result = 0;
    }
  }
  else
  {
    CharSelectFrameWork::ms_bLoadWindowsPosOptionSuccess = 0;
    result = 0;
  }
  return result;
}
// A82603: using guessed type char byte_A82603;
// A82604: using guessed type __int16 word_A82604;
// A94383: using guessed type bool CharSelectFrameWork__m_bLoadWindowsPosOption;
// A94391: using guessed type bool CharSelectFrameWork__ms_bLoadWindowsPosOptionSuccess;

//----- (0047A320) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::OnLoadKeyMappingOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_KEYMAPPING_ACK *pkAck)
{
  bool result; // al@2
  unsigned int v3; // eax@4
  PgFrameWork *v4; // eax@9
  __int16 kVersion_4; // [sp+8h] [bp-4h]@4

  MachineOpt::MakeDefaultKey();
  if ( CharSelectFrameWork::m_bLoadNewKeyMapOption == 1 )
  {
    result = 1;
  }
  else
  {
    CharSelectFrameWork::m_bLoadKeyMappingOption = 1;
    if ( pkAck->bSuccess )
    {
      v3 = *(_DWORD *)&pkAck->Data.Data[0];
      kVersion_4 = *(_WORD *)&pkAck->Data.Data[4];
      if ( (_WORD)v3 == MachineOpt::m_keyMappingBuff
        && (unsigned __int8)(v3 >> 16) == unk_A82702
        && BYTE3(v3) == byte_A82703
        && (_BYTE)kVersion_4 == (_BYTE)word_A82704 )
      {
        memcpy(&MachineOpt::m_keyMappingBuff, &pkAck->Data, 0xF4u);
        CharSelectFrameWork::ms_bLoadKeyMappingOptionSuccess = 1;
        v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v4 )
        {
          GameFrameWork::SaveAllKeyOpt((GameFrameWork *)v4);
          CharSelectFrameWork::ms_bLoadGameSystemOptionSuccess = 1;
        }
        result = 1;
      }
      else
      {
        CharSelectFrameWork::ms_bLoadKeyMappingOptionSuccess = 0;
        result = 0;
      }
    }
    else
    {
      CharSelectFrameWork::ms_bLoadKeyMappingOptionSuccess = 0;
      result = 0;
    }
  }
  return result;
}
// A82703: using guessed type char byte_A82703;
// A82704: using guessed type __int16 word_A82704;
// A9438C: using guessed type bool CharSelectFrameWork__m_bLoadKeyMappingOption;
// A9438D: using guessed type bool CharSelectFrameWork__m_bLoadNewKeyMapOption;
// A9438F: using guessed type bool CharSelectFrameWork__ms_bLoadKeyMappingOptionSuccess;
// A94392: using guessed type bool CharSelectFrameWork__ms_bLoadGameSystemOptionSuccess;

//----- (0047A400) --------------------------------------------------------
bool __thiscall CharSelectFrameWork::OnLoadGameOption(CharSelectFrameWork *this, PROTO_NC_CHAR_OPTION_GET_GAME_ACK *pkAck)
{
  unsigned int v2; // eax@2
  bool result; // al@6
  PgFrameWork *v4; // eax@7
  __int16 kVersion_4; // [sp+4h] [bp-4h]@2

  CharSelectFrameWork::m_bLoadGameSystemOption = 1;
  if ( pkAck->bSuccess )
  {
    v2 = *(_DWORD *)&pkAck->Data.Data[0];
    kVersion_4 = *(_WORD *)&pkAck->Data.Data[4];
    if ( (_WORD)v2 == MachineOpt::ms_kGameOption
      && (unsigned __int8)(v2 >> 16) == byte_B5BB1A
      && BYTE3(v2) == byte_B5BB1B
      && (_BYTE)kVersion_4 == byte_B5BB1C )
    {
      memcpy(&MachineOpt::ms_kGameOption, &pkAck->Data, 0x37u);
      CharSelectFrameWork::ms_bLoadGameSystemOptionSuccess = 1;
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::OnSaveServerGameOption((GameFrameWork *)v4);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9438E: using guessed type bool CharSelectFrameWork__m_bLoadGameSystemOption;
// A94392: using guessed type bool CharSelectFrameWork__ms_bLoadGameSystemOptionSuccess;
// B5BB1A: using guessed type char byte_B5BB1A;
// B5BB1B: using guessed type char byte_B5BB1B;
// B5BB1C: using guessed type char byte_B5BB1C;

//----- (0047A4B0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_SHORTCUTDATA_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork::OnLoadShortCutDataOption(this, (PROTO_NC_CHAR_OPTION_GET_SHORTCUTDATA_ACK *)pvData);
  return iRevBytes;
}

//----- (0047A4D0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_SHORTCUTSIZE_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork::OnLoadShortCutSizeOption(this, (PROTO_NC_CHAR_OPTION_GET_SHORTCUTSIZE_ACK *)pvData);
  return iRevBytes;
}

//----- (0047A4F0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_WINDOWPOS_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork::OnLoadWindowPosOption(this, (PROTO_NC_CHAR_OPTION_GET_WINDOWPOS_ACK *)pvData);
  return iRevBytes;
}

//----- (0047A510) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_KEYMAPPING_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork::OnLoadKeyMappingOption(this, (PROTO_NC_CHAR_OPTION_GET_KEYMAPPING_ACK *)pvData);
  return iRevBytes;
}

//----- (0047A530) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_OPTION_GET_GAME_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork::OnLoadGameOption(this, (PROTO_NC_CHAR_OPTION_GET_GAME_ACK *)pvData);
  return iRevBytes;
}

//----- (0047A550) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_USER_WILL_WORLD_SELECT_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork *v3; // ebx@1
  PgFrameWork *v4; // eax@2
  int v5; // edx@3
  int v6; // ecx@3
  int v7; // edx@3
  int v8; // ecx@3
  int v9; // edx@3
  int v10; // ecx@3
  int v11; // edx@3
  PgFrameWork *v12; // eax@3
  int v14; // [sp+8h] [bp-20h]@3
  int v15; // [sp+Ch] [bp-1Ch]@3
  int v16; // [sp+10h] [bp-18h]@3
  int v17; // [sp+14h] [bp-14h]@3
  int v18; // [sp+18h] [bp-10h]@3
  int v19; // [sp+1Ch] [bp-Ch]@3
  int v20; // [sp+20h] [bp-8h]@3
  int v21; // [sp+24h] [bp-4h]@3

  v3 = this;
  if ( *(_WORD *)pvData == 7768 )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, AccountFrameWorkID);
    if ( v4 )
    {
      memcpy(&v14, (char *)pvData + 2, 0x20u);
      v5 = v14;
      *(_DWORD *)&v4[2].m_bInit = v15;
      v6 = v17;
      v4[2].m_BackFrameID = (void *)v5;
      v7 = v16;
      v4[3].baseclass_0.m_pkMsgHooker = (IDirectMessenger *)v6;
      v8 = v19;
      v4[3].baseclass_0.vfptr = (IDirectMessengerVtbl *)v7;
      v9 = v18;
      v4[3].m_kMsgQ.m_pBase = (PgMsg::Frame *)v8;
      v10 = v21;
      v4[3].baseclass_0.m_uiMessageNum = v9;
      v11 = v20;
      v4[3].m_kMsgQ.m_uiHead = v10;
      v4[3].m_kMsgQ.m_uiAlloced = v11;
      CharSelectFrameWork::SelectCancel(v3);
      v12 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v12 )
      {
        LOBYTE(v12[64].m_kMsgQ.m_uiAlloced) = 1;
        return iRevBytes;
      }
    }
  }
  else
  {
    CharSelectFrameWork::SelectCancel(this);
  }
  return iRevBytes;
}

//----- (0047A600) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_TUTORIAL_DOING_CMD(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  LuaScriptMgr *v3; // ecx@1
  void *v4; // eax@2
  float v5; // eax@3
  Tutorial *v6; // eax@6
  void *v7; // eax@7

  v3 = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
  if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    v4 = operator new(0x14u);
    if ( v4 )
      LuaScriptMgr::LuaScriptMgr((LuaScriptMgr *)v4);
    else
      LODWORD(v5) = 0;
    v3 = (LuaScriptMgr *)LODWORD(v5);
    Singleton<LuaScriptMgr>::m_pInstance = v5;
  }
  LuaScriptMgr::CreateLuaScript(v3, 0);
  v6 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v7 = operator new(0xB4u);
    if ( v7 )
      Tutorial::Tutorial(v6);
    else
      v6 = 0;
    Singleton<Tutorial>::m_pInstance = v6;
  }
  v6->m_bEnable = 1;
  return iRevBytes;
}

//----- (0047A6C0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::NcCharTutorialPopupAck(CharSelectFrameWork *this, bool bIsSkip)
{
  CharSelectFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_CHAR_TUTORIAL_POPUP_ACK kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 4369;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.bIsSkip = bIsSkip;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (0047A710) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_AVATAR_ERASEFAIL_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  CharSelectFrameWork *v3; // esi@1
  char *v4; // eax@4
  CharSelectMenuWin *v5; // ecx@4
  unsigned int v7; // [sp-4h] [bp-8h]@2

  v3 = this;
  if ( *(_WORD *)pvData == 199 )
    v7 = -2038724912;
  else
    v7 = 1076860256;
  v4 = TextData::Get(v7);
  MsgBox::Modal(MSGBOX_OK, v4);
  v5 = v3->m_pkCharSelectMenuWin;
  v3->m_iEraseSlot = -1;
  ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(1);
  return iRevBytes;
}

//----- (0047A770) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_AVATAR_ERASESUCC_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  CharSelectFrameWork *v4; // esi@1
  void *v5; // ebx@2
  CharSelectMenuWin *v6; // ecx@5
  char v7; // al@5

  v3 = pvData;
  v4 = this;
  User::MarkAsErased(&g_kUser, *(_BYTE *)pvData);
  User::DeleteAvatar(&g_kUser, *(_BYTE *)v3);
  ((void (__stdcall *)(_DWORD, _DWORD))v4->m_aspAvatarPos[*(_BYTE *)v3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
    &pvData,
    v4->m_apkAvatar[*(_BYTE *)v3]->baseclass_0.m_spScene.m_pObject);
  if ( pvData )
  {
    v5 = pvData;
    if ( !InterlockedDecrement((volatile LONG *)pvData + 1) )
    {
      if ( v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    }
  }
  CharMgr::DeleteAvatar(&g_kCharMgr, &v4->m_apkAvatar[*(_BYTE *)v3]->baseclass_0);
  v4->m_apkAvatar[*(_BYTE *)v3] = 0;
  v6 = v4->m_pkCharSelectMenuWin;
  v4->m_iEraseSlot = -1;
  ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(1);
  v7 = 0;
  if ( v4->m_apkAvatar[0] )
    v7 = 1;
  if ( v4->m_apkAvatar[1] )
    v7 = 1;
  if ( v4->m_apkAvatar[2] )
    v7 = 1;
  if ( v4->m_apkAvatar[3] )
    v7 = 1;
  if ( v4->m_apkAvatar[4] )
    v7 = 1;
  if ( !v4->m_apkAvatar[5] && !v7 )
    CharSelectMenuWin::DisplayNoCharMsg(v4->m_pkCharSelectMenuWin);
  if ( (unsigned __int8)((int (*)(void))v4->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}

//----- (0047A8A0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_LOGINFAIL_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // eax@1
  CharSelectFrameWork *v4; // edi@1
  char *v5; // esi@9
  MsgBox *v6; // eax@12
  unsigned int v8; // [sp-4h] [bp-24h]@4
  PgMsg::Frame kMsg; // [sp+8h] [bp-18h]@12
  unsigned int v10; // [sp+1Ch] [bp-4h]@1
  int v11; // [sp+20h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( v3 > 1410 )
  {
    switch ( v3 )
    {
      case 1411:
        v8 = 916022610;
        break;
      case 1412:
        v8 = 1016253352;
        break;
      case 1413:
        v8 = 547208352;
        break;
      case 1414:
        v8 = 1033203029;
        break;
      case 1415:
        v8 = 1134324063;
        break;
      case 1416:
        v8 = 731674969;
        break;
      case 1417:
        v8 = 848194976;
        break;
      case 1418:
        v8 = 1083799451;
        break;
      case 1419:
        v8 = 697658719;
        break;
      case 1420:
        v8 = 680879780;
        break;
      case 1421:
        v8 = -297174961;
        break;
      case 1422:
        v8 = 546793820;
        break;
      case 1423:
        v8 = 849373601;
        break;
      case 1424:
        v8 = 91254085;
        break;
      case 1425:
        v8 = -409573026;
        break;
      case 1426:
        v8 = 2129243814;
        break;
      case 1427:
        v8 = 932542547;
        break;
      case 1428:
        v8 = 965374299;
        break;
      case 1429:
        v8 = -1303385310;
        break;
      default:
        goto $LN3_34;
    }
  }
  else
  {
    if ( v3 == 1410 )
    {
      v8 = -527534261;
    }
    else
    {
      switch ( v3 )
      {
        case 321:
          v8 = 239413302;
          goto LABEL_9;
        case 322:
        case 323:
          v8 = 844857999;
          goto LABEL_9;
        case 324:
          v8 = 726568865;
          goto LABEL_9;
        case 328:
          TextData2::Get(0x719584DDu);
          break;
        default:
          break;
      }
$LN3_34:
      v8 = -2139391874;
    }
  }
LABEL_9:
  v5 = TextData::Get(v8);
  if ( v5 )
  {
    if ( v4->m_spkMsgBox.m_pObject )
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v4->m_spkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    v6 = MsgBox::Modal(MSGBOX_OK, v5);
    kMsg.m_uiFrameMsg = 14;
    MsgBox::SetFrameWorkMsgOnClose(v6, &v4->baseclass_0, &kMsg, 0);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047AAA0) --------------------------------------------------------
void __thiscall CharSelectFrameWork::On_NC_AVATAR_RENAME_REQ(CharSelectFrameWork *this, Name5 newName)
{
  CharSelectFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@2
  NETCOMMAND netcmd; // [sp+8h] [bp-20h]@2
  PROTO_NC_AVATAR_RENAME_REQ kProto; // [sp+Ch] [bp-1Ch]@2
  unsigned int v7; // [sp+24h] [bp-4h]@1
  int v8; // [sp+28h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  if ( v3 )
  {
    netcmd.protocol = 5135;
    PgNet::AddNetMsg(v3, &netcmd, 2);
    *(_QWORD *)&kProto.NewName.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.NewName.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.NewName.n5_name[0] = 0;
    kProto.SlotNo = User::GetSelectedAvatarSlot(&g_kUser);
    *(_DWORD *)&kProto.NewName.n5_name[8] = *(_DWORD *)&newName.n5_name[8];
    *(_QWORD *)&kProto.NewName.n5_name[0] = *(_QWORD *)&newName;
    v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
    *(_QWORD *)&kProto.NewName.n5_name[12] = *(_QWORD *)&newName.n5_name[12];
    PgNet::SendNetMsg(v4, &kProto, 21);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047AB40) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_AVATAR_RENAME_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  CharSelectFrameWork *v4; // ebx@1
  PROTO_AVATARINFORMATION *v5; // edi@2
  int v6; // edx@3
  int v7; // eax@3
  int v8; // edx@3
  CharSelectMenuWin *v9; // esi@3
  PgWin *v10; // ebx@5
  char *v11; // eax@8
  char Name[128]; // [sp+Ch] [bp-84h]@3
  unsigned int v14; // [sp+8Ch] [bp-4h]@1
  int v15; // [sp+90h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = *(_WORD *)((char *)pvData + 21);
  v4 = this;
  if ( v3 == 208 )
  {
    v5 = User::GetAvatarInfoBySlot(&g_kUser, *(_BYTE *)pvData);
    if ( v5 )
    {
      v6 = *(_DWORD *)((char *)pvData + 5);
      *(_DWORD *)Name = *(_DWORD *)((char *)pvData + 1);
      *(_DWORD *)&Name[8] = *(_DWORD *)((char *)pvData + 9);
      v7 = *(_DWORD *)((char *)pvData + 17);
      *(_DWORD *)&Name[4] = v6;
      v8 = *(_DWORD *)((char *)pvData + 13);
      *(_DWORD *)&Name[16] = v7;
      Name[20] = 0;
      *(_DWORD *)&Name[12] = v8;
      *(_DWORD *)&v5->name.n5_name[16] = 0;
      *(_DWORD *)&v5->name.n5_name[12] = 0;
      *(_DWORD *)&v5->name.n5_name[8] = 0;
      *(_DWORD *)&v5->name.n5_name[4] = 0;
      *(_DWORD *)&v5->name.n5_name[0] = 0;
      strncpy(v5->name.n5_name, Name, 0x14u);
      v9 = v4->m_pkCharSelectMenuWin;
      if ( v9 )
      {
        ((void (__stdcall *)(signed int))v9->m_pkOkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(signed int))v9->m_pkDelCharBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        CharSelectMenuWin::SetMenuTextInfo(v4->m_pkCharSelectMenuWin, v5);
      }
      v10 = (PgWin *)v4->m_pkChangeNameWin;
      if ( v10 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v10);
    }
  }
  else
  {
    if ( v3 == 209 )
    {
      v11 = TextData::Get(0x3095528Au);
      MsgBox::Modeless(MSGBOX_OK, v11);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047AC50) --------------------------------------------------------
void __thiscall CharSelectFrameWork::NcUserConnectChangeCharIDReq(CharSelectFrameWork *this, Name5 CharName)
{
  CharSelectFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@2
  NETCOMMAND netcmd; // [sp+8h] [bp-20h]@2
  PROTO_NC_USER_CONNECTION_CHANGE_CHAR_ID_REQ kProto; // [sp+Ch] [bp-1Ch]@2
  unsigned int v7; // [sp+24h] [bp-4h]@1
  int v8; // [sp+28h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  if ( v3 )
  {
    netcmd.protocol = -19447;
    PgNet::AddNetMsg(v3, &netcmd, 2);
    *(_QWORD *)&kProto.sNewID.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.sNewID.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.sNewID.n5_name[0] = 0;
    kProto.nSlotNo = User::GetSelectedAvatarSlot(&g_kUser);
    *(_DWORD *)&kProto.sNewID.n5_name[8] = *(_DWORD *)&CharName.n5_name[8];
    *(_QWORD *)&kProto.sNewID.n5_name[0] = *(_QWORD *)&CharName;
    v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
    *(_QWORD *)&kProto.sNewID.n5_name[12] = *(_QWORD *)&CharName.n5_name[12];
    PgNet::SendNetMsg(v4, &kProto, 21);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047ACF0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACK(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  PROTO_AVATARINFORMATION *v3; // edi@1
  char *v4; // eax@5
  char *v5; // eax@5
  char *v6; // eax@6
  int v7; // eax@8
  int v8; // edx@8
  CharSelectMenuWin *v9; // ecx@8
  CharSelectMenuWin *v10; // esi@10
  unsigned int v12; // [sp-4h] [bp-30h]@7
  CharSelectFrameWork *v13; // [sp+Ch] [bp-20h]@1
  char acName[21]; // [sp+10h] [bp-1Ch]@8
  unsigned int v15; // [sp+28h] [bp-4h]@1
  int v16; // [sp+2Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v13 = this;
  v3 = User::GetAvatarInfoBySlot(&g_kUser, *((_BYTE *)pvData + 2));
  if ( v3 )
  {
    if ( *(_WORD *)pvData == 8384 )
    {
      v7 = *(_DWORD *)((char *)pvData + 11);
      v8 = *(_DWORD *)((char *)pvData + 7);
      *(_DWORD *)acName = *(_DWORD *)((char *)pvData + 3);
      *(_DWORD *)&acName[12] = *(_DWORD *)((char *)pvData + 15);
      *(_DWORD *)&acName[8] = v7;
      *(_DWORD *)&acName[4] = v8;
      *(_DWORD *)&acName[16] = *(_DWORD *)((char *)pvData + 19);
      acName[20] = 0;
      *(_DWORD *)&v3->name.n5_name[16] = 0;
      *(_DWORD *)&v3->name.n5_name[12] = 0;
      *(_DWORD *)&v3->name.n5_name[8] = 0;
      *(_DWORD *)&v3->name.n5_name[4] = 0;
      *(_DWORD *)&v3->name.n5_name[0] = 0;
      strncpy(v3->name.n5_name, acName, 0x14u);
      *(_WORD *)&v3->CharIDChangeData.bNeedChangeID = 0;
      v9 = v13->m_pkCharSelectMenuWin;
      if ( v9 )
        CharSelectMenuWin::SetMenuTextInfo(v9, v3);
      v10 = v13->m_pkCharSelectMenuWin;
      ((void (__stdcall *)(signed int))v10->m_pkOkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      v10->m_pkDelCharBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v10->m_pkDelCharBtn,
        1u);
      v12 = -689566961;
    }
    else
    {
      if ( *(_WORD *)pvData != 8391 )
      {
        if ( *(_WORD *)pvData != 8401 )
        {
          v4 = TextData2::Get(0xA7D8C2F0u);
          v5 = fs(v4);
          MsgBox::Modal(MSGBOX_OK, v5);
LABEL_13:
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v13->m_pkChangeNameWin->baseclass_0.baseclass_0.baseclass_0);
          return iRevBytes;
        }
        v6 = TextData::Get(0xA9BFDEC5u);
LABEL_12:
        MsgBox::Modal(MSGBOX_OK, v6);
        goto LABEL_13;
      }
      v12 = 170205213;
    }
    v6 = TextData2::Get(v12);
    goto LABEL_12;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047AE40) --------------------------------------------------------
int __thiscall CharSelectFrameWork::On_NC_CHAR_TUTORIAL_POPUP_REQ(CharSelectFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1
  char *v4; // eax@1
  MsgBox *v5; // eax@1
  PgMsg::Frame kOkMsg; // [sp+4h] [bp-2Ch]@1
  PgMsg::Frame kCancelMsg; // [sp+18h] [bp-18h]@1
  unsigned int v9; // [sp+2Ch] [bp-4h]@1
  int v10; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = (PgFrameWork *)this;
  v4 = TextData3::Get(0x1E498394u);
  v5 = MsgBox::Modal(MSGBOX_OKCANCEL, v4);
  kOkMsg.m_uiFrameMsg = 20;
  kCancelMsg.m_uiFrameMsg = 20;
  kOkMsg.m_uiFrameWParam = 0;
  kCancelMsg.m_uiFrameWParam = 1;
  MsgBox::SetFrameWorkMsgOnClose(v5, v3, &kOkMsg, &kCancelMsg);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047AEB0) --------------------------------------------------------
int __thiscall CharSelectFrameWork::ProcessNetMsg(CharSelectFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = 0;
  switch ( iDepart )
  {
    case 45:
      if ( iCommand == 12 )
        result = CharSelectFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACK(this, iRevBytes, pvData);
      break;
    case 8:
      if ( iCommand == 17 )
        result = iRevBytes;
      break;
    case 4:
      if ( iCommand > 272 )
      {
        if ( iCommand == 285 )
          result = CharSelectFrameWork::On_NC_CHAR_TUTORIAL_DOING_CMD(this, iRevBytes, pvData);
      }
      else
      {
        switch ( iCommand )
        {
          case 272:
            result = CharSelectFrameWork::On_NC_CHAR_TUTORIAL_POPUP_REQ(this, iRevBytes, pvData);
            break;
          case 2:
            result = CharSelectFrameWork::On_NC_CHAR_LOGINFAIL_ACK(this, iRevBytes, pvData);
            break;
          case 3:
            result = CharSelectFrameWork::On_NC_CHAR_LOGIN_ACK(this, iRevBytes, pvData);
            break;
        }
      }
      break;
    case 5:
      switch ( iCommand )
      {
        case 10:
          result = CharSelectFrameWork::On_NC_AVATAR_ERASEFAIL_ACK(this, iRevBytes, pvData);
          break;
        case 12:
          result = CharSelectFrameWork::On_NC_AVATAR_ERASESUCC_ACK(this, iRevBytes, pvData);
          break;
        case 16:
          result = CharSelectFrameWork::On_NC_AVATAR_RENAME_ACK(this, iRevBytes, pvData);
          break;
      }
      break;
    case 3:
      if ( iCommand == 23 )
      {
        result = CharSelectFrameWork::On_NC_USER_CONNECTCUT_CMD(this, iRevBytes, pvData);
      }
      else
      {
        if ( iCommand == 52 )
          result = CharSelectFrameWork::On_NC_USER_WILL_WORLD_SELECT_ACK(this, iRevBytes, pvData);
      }
      break;
    case 28:
      switch ( iCommand )
      {
        case 50:
          result = CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_SHORTCUTDATA_CMD(this, iRevBytes, pvData);
          break;
        case 51:
          result = CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_KEYMAP_CMD(this, iRevBytes, pvData);
          break;
        case 52:
          result = CharSelectFrameWork::On_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD(this, iRevBytes, pvData);
          break;
        case 3:
          CharSelectFrameWork::OnLoadShortCutDataOption(this, (PROTO_NC_CHAR_OPTION_GET_SHORTCUTDATA_ACK *)pvData);
          result = iRevBytes;
          break;
        case 5:
          CharSelectFrameWork::OnLoadShortCutSizeOption(this, (PROTO_NC_CHAR_OPTION_GET_SHORTCUTSIZE_ACK *)pvData);
          result = iRevBytes;
          break;
        case 13:
          CharSelectFrameWork::OnLoadWindowPosOption(this, (PROTO_NC_CHAR_OPTION_GET_WINDOWPOS_ACK *)pvData);
          result = iRevBytes;
          break;
        case 15:
          CharSelectFrameWork::OnLoadKeyMappingOption(this, (PROTO_NC_CHAR_OPTION_GET_KEYMAPPING_ACK *)pvData);
          result = iRevBytes;
          break;
        case 11:
          CharSelectFrameWork::OnLoadGameOption(this, (PROTO_NC_CHAR_OPTION_GET_GAME_ACK *)pvData);
          result = iRevBytes;
          break;
        case 7:
        case 9:
          goto $LN85_7;
        default:
          return result;
      }
      return result;
    case 22:
      if ( iCommand == 11 )
      {
        CharSelectFrameWork::OnLoadGameOption(this, (PROTO_NC_CHAR_OPTION_GET_GAME_ACK *)pvData);
        result = iRevBytes;
      }
      break;
    case 31:
      if ( iCommand == 7 )
        result = CharSelectFrameWork::On_NC_PRISON_GET_ACK(this, iRevBytes, pvData);
      break;
    case 36:
      if ( iCommand == 16 )
      {
        if ( *(_BYTE *)pvData <= 0x14u )
          PrivateStoreWin::ms_byBoothSize = *(_BYTE *)pvData;
$LN85_7:
        result = iRevBytes;
      }
      break;
    default:
      return result;
  }
  return result;
}
// A7CF04: using guessed type unsigned __int8 PrivateStoreWin__ms_byBoothSize;

//----- (0047B180) --------------------------------------------------------
void __thiscall SpStream::_SpStream(NiTSet<CPostProcessEffect *> *this)
{
  operator delete__(this->m_pBase);
}

//----- (0047B1A0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_DOING_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_DOING_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_DOING_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B1C0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_DONE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_DONE_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_DONE_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B1E0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_READ_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_READ_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B200) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_QUEST_REPEAT_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_REPEAT_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B220) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_ABSTATE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  User::InitABState(&g_kUser, (PROTO_NC_CHAR_ABSTATE_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B240) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_SKILL_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  Skill::InitSkill((PROTO_NC_CHAR_CLIENT_SKILL_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B260) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_PASSIVE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  Skill::InitPassiveSkill((PROTO_NC_CHAR_SKILL_PASSIVE_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B280) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_CHARTITLE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  MainChar::InitCharactorTitle((MainChar *)g_pkMainChar, (PROTO_NC_CHAR_CLIENT_CHARTITLE_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B2A0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_ITEM_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  Inventory::InitData(&g_kInventory, (PROTO_NC_CHAR_CLIENT_ITEM_CMD *)pvData, (char *)pvData);
  ShortCutMgr::InitShortCutFromInventory(&g_kShortCutMgr);
  return iRevBytes;
}

//----- (0047B2D0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_GAME_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0047B2E0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // edi@1
  PROTO_CHARGEDBUFF_INFO *v4; // esi@2

  ChargedItemList::Clear();
  v3 = 0;
  if ( *(_WORD *)pvData > 0u )
  {
    v4 = (PROTO_CHARGEDBUFF_INFO *)((char *)pvData + 2);
    do
    {
      ChargedItemList::AddUsingItem(v4);
      ++v3;
      ++v4;
    }
    while ( v3 < *(_WORD *)pvData );
  }
  return iRevBytes;
}

//----- (0047B320) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHARGED_BOOTHSLOTSIZE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_BYTE *)pvData <= 0x14u )
    PrivateStoreWin::ms_byBoothSize = *(_BYTE *)pvData;
  return iRevBytes;
}
// A7CF04: using guessed type unsigned __int8 PrivateStoreWin__ms_byBoothSize;

//----- (0047B340) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_COININFO_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  User::SetCoin(&g_kUser, *(_QWORD *)pvData);
  User::SetExchangeableCoin(&g_kUser, *((_QWORD *)pvData + 1));
  return iRevBytes;
}

//----- (0047B380) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_QUEST_RESET_TIME_CLIENT_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CClientQuest::SetQuestResetTime((CClientQuest *)v3, (PROTO_NC_QUEST_RESET_TIME_CMD *)pvData);
  return iRevBytes;
}

//----- (0047B3A0) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::Terminate(ZoneLoginNetFrameWork *this)
{
  ZoneLoginNetFrameWork *v1; // esi@1
  Net *v2; // edi@1

  v1 = this;
  v2 = this->m_spZoneNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spZoneNet.m_pObject = 0;
  }
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
}

//----- (0047B3E0) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::Update(ZoneLoginNetFrameWork *this, float fCurTime)
{
  ZoneLoginNetFrameWork *v2; // esi@1
  bool v3; // al@3
  Net *v4; // ecx@12
  PgNet *v5; // ecx@14

  v2 = this;
  v3 = CharSelectFrameWork::m_bLoadKeyMappingOption || CharSelectFrameWork::m_bLoadNewKeyMapOption;
  if ( CharSelectFrameWork::m_bLoadShortCutDataOption
    && CharSelectFrameWork::m_bLoadShortCutSizeOption
    && CharSelectFrameWork::m_bLoadWindowsPosOption
    && v3
    && CharSelectFrameWork::m_bLoadGameSystemOption
    && CharSelectFrameWork::ms_bGetPrisonInfo )
  {
    CharSelectFrameWork::m_bLoadShortCutDataOption = 0;
    CharSelectFrameWork::m_bLoadShortCutSizeOption = 0;
    CharSelectFrameWork::m_bLoadWindowsPosOption = 0;
    CharSelectFrameWork::m_bLoadKeyMappingOption = 0;
    CharSelectFrameWork::m_bLoadNewKeyMapOption = 0;
    CharSelectFrameWork::m_bLoadGameSystemOption = 0;
    CharSelectFrameWork::ms_bGetPrisonInfo = 0;
    PgFrameWork::PostMsgToFrameWork(&this->baseclass_0, CharSelectFrameWorkID, &this->m_kMapLoginMsg);
    PgFrameWork::PostFrameMsgTerminate(&v2->baseclass_0);
    PgNet::StopDispatchMsg(&v2->m_spZoneNet.m_pObject->baseclass_0);
  }
  else
  {
    v4 = this->m_spZoneNet.m_pObject;
    if ( v4 )
      ((void (__stdcall *)(_DWORD, _DWORD))v4->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
    PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
    v5 = (PgNet *)v2->m_spZoneNet.m_pObject;
    if ( v5 )
      PgNet::Flush(v5);
  }
}
// A94381: using guessed type bool CharSelectFrameWork__m_bLoadShortCutDataOption;
// A94382: using guessed type bool CharSelectFrameWork__m_bLoadShortCutSizeOption;
// A94383: using guessed type bool CharSelectFrameWork__m_bLoadWindowsPosOption;
// A9438C: using guessed type bool CharSelectFrameWork__m_bLoadKeyMappingOption;
// A9438D: using guessed type bool CharSelectFrameWork__m_bLoadNewKeyMapOption;
// A9438E: using guessed type bool CharSelectFrameWork__m_bLoadGameSystemOption;
// A94394: using guessed type bool CharSelectFrameWork__ms_bGetPrisonInfo;

//----- (0047B4B0) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::OnTryConnectToZone(ZoneLoginNetFrameWork *this)
{
  PgFrameWork *v1; // esi@1
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@2
  unsigned int v3; // [sp+18h] [bp-4h]@1
  int v4; // [sp+1Ch] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = (PgFrameWork *)this;
  if ( !(unsigned __int8)((int (*)(void))this->m_spZoneNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)() )
  {
    kMsg.m_uiFrameMsg = 11;
    PgFrameWork::PostMsgToFrameWork(v1, CharSelectFrameWorkID, &kMsg);
    PgFrameWork::PostFrameMsgTerminate(v1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047B500) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::NcMapLoginCompleteCmd(ZoneLoginNetFrameWork *this)
{
  PgNet *v1; // ecx@1
  PgFrameWork *v2; // eax@2
  ZoneLoginNetFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  if ( v1 )
  {
    LOWORD(netcmd) = 6147;
    PgNet::SendNetMsg(v1, &netcmd, 2);
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
      LOBYTE(v2[141].m_kMsgQ.m_pBase) = 1;
  }
}

//----- (0047B540) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_BASE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // edx@1
  int v6; // eax@1
  int v7; // eax@1
  char v8; // cl@2
  int result; // eax@3
  char acCharName[19]; // [sp+4h] [bp-1Ch]@1
  char v11; // [sp+18h] [bp-8h]@1
  unsigned int v12; // [sp+1Ch] [bp-4h]@1
  int v13; // [sp+20h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  Skill::SetEmpowerResetable(*((_BYTE *)pvData + 101) & 1);
  User::SetMainCharBaseData(&g_kUser, (PROTO_NC_CHAR_BASE_CMD *)pvData);
  v3 = *((_DWORD *)pvData + 2);
  v4 = *((_DWORD *)pvData + 3);
  *(_DWORD *)acCharName = *((_DWORD *)pvData + 1);
  v5 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acCharName[4] = v3;
  v6 = *((_DWORD *)pvData + 5);
  *(_DWORD *)&acCharName[12] = v5;
  *(_DWORD *)&acCharName[16] = v6;
  *(_DWORD *)&acCharName[8] = v4;
  v11 = 0;
  acCharName[18] = 0;
  v7 = 0;
  do
  {
    v8 = acCharName[v7];
    *((_BYTE *)&dword_B31FD8 + v7++) = v8;
  }
  while ( v8 );
  result = iRevBytes;
  dword_B32018 = *((_BYTE *)pvData + 25);
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B31FD8: using guessed type int dword_B31FD8;
// B32018: using guessed type int dword_B32018;

//----- (0047B5D0) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::ZoneLoginNetFrameWork(ZoneLoginNetFrameWork *this)
{
  ZoneLoginNetFrameWork *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&ZoneLoginNetFrameWork::_vftable_;
  v1->m_spZoneNet.m_pObject = 0;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 98AA74: using guessed type int (__stdcall *ZoneLoginNetFrameWork___vftable_)(int uiFlags);

//----- (0047B630) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::_ZoneLoginNetFrameWork(ZoneLoginNetFrameWork *this)
{
  ZoneLoginNetFrameWork *v1; // edi@1
  Net *v2; // esi@1
  Net *v3; // esi@6
  void *v4; // ST00_4@10

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&ZoneLoginNetFrameWork::_vftable_;
  v2 = this->m_spZoneNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spZoneNet.m_pObject = 0;
  }
  v3 = v1->m_spZoneNet.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v4);
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 98AA74: using guessed type int (__stdcall *ZoneLoginNetFrameWork___vftable_)(int uiFlags);

//----- (0047B6E0) --------------------------------------------------------
bool __thiscall ZoneLoginNetFrameWork::Init(ZoneLoginNetFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  ZoneLoginNetFrameWork *v2; // esi@1
  Net *v3; // ebx@1
  Net *v4; // edi@1
  CQuest *v5; // esi@8
  PgMsg::Frame kMsg; // [sp+Ch] [bp-2Ch]@8
  char acstr[17]; // [sp+20h] [bp-18h]@1
  unsigned int v9; // [sp+34h] [bp-4h]@1
  int v10; // [sp+38h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = g_kNetMgr.m_spZone[g_kNetMgr.m_iNowConnectedZone].m_pObject;
  v4 = this->m_spZoneNet.m_pObject;
  *(_QWORD *)acstr = *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[0];
  *(_QWORD *)&acstr[8] = *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[8];
  acstr[16] = 0;
  if ( v4 != v3 )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v2->m_spZoneNet.m_pObject = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount);
  }
  PgNet::SetAddress(&v2->m_spZoneNet.m_pObject->baseclass_0, acstr);
  PgNet::SetPortA(&v2->m_spZoneNet.m_pObject->baseclass_0, g_kServer.m_kZoneAddr.m_iPort);
  kMsg.m_uiFrameMsg = 9;
  PgFrameWork::PostMsgToMe(&v2->baseclass_0, &kMsg);
  v2->baseclass_0.m_bInit = 1;
  v5 = QuestDataMgr::GetQuest();
  CQuest::ClearQuest(v5);
  v5->vfptr->QuestPlayer_TimeProcess(v5);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047B7C0) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::ProcessMsg(ZoneLoginNetFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  PgFrameWork *v4; // esi@1
  PgMsg::Frame pkFrameMsg; // [sp+4h] [bp-18h]@3
  unsigned int v6; // [sp+18h] [bp-4h]@1
  int v7; // [sp+1Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v4 = (PgFrameWork *)this;
  if ( uiMsg == 9 )
  {
    if ( !(unsigned __int8)((int (*)(void))this->m_spZoneNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)() )
    {
      pkFrameMsg.m_uiFrameMsg = 11;
      PgFrameWork::PostMsgToFrameWork(v4, CharSelectFrameWorkID, &pkFrameMsg);
      PgFrameWork::PostFrameMsgTerminate(v4);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047B820) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_MAP_LOGINFAIL_ACK(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1
  unsigned int v4; // ecx@1
  char *v5; // eax@2
  PgWin *v6; // eax@2
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@1
  unsigned int v9; // [sp+18h] [bp-4h]@1
  int v10; // [sp+1Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = (PgFrameWork *)this;
  v4 = *(_WORD *)pvData;
  kMsg.m_uiFrameMsg = 13;
  kMsg.m_uiFrameWParam = v4;
  if ( v4 == 327 )
  {
    CShnDataFileCheckSum::GetDataFileName(&ShnDataFile, (SHN_DATA_FILE_INDEX)*((_BYTE *)pvData + 2));
    kMsg.m_uiFrameMsg = 12;
    v5 = TextData::Get(0x8899DAD5u);
    v6 = (PgWin *)MsgBox::Modal(MSGBOX_OK, v5);
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, v6);
  }
  PgFrameWork::PostMsgToFrameWork(v3, CharSelectFrameWorkID, &kMsg);
  PgFrameWork::PostFrameMsgTerminate(v3);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047B8B0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_MAP_LOGIN_ACK(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  ZoneLoginNetFrameWork *v3; // esi@1
  int result; // eax@1

  v3 = this;
  User::SetMainCharMapLoginData(&g_kUser, (PROTO_NC_CHAR_MAPLOGIN_ACK *)pvData);
  LOWORD(pvData) = 28676;
  PgNet::SendNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &pvData, 2);
  LOWORD(pvData) = 28684;
  PgNet::SendNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &pvData, 2);
  LOWORD(pvData) = 31750;
  PgNet::SendNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &pvData, 2);
  result = iRevBytes;
  v3->m_kMapLoginMsg.m_uiFrameMsg = 15;
  return result;
}

//----- (0047B930) --------------------------------------------------------
void __thiscall ZoneLoginNetFrameWork::NcMapLoginReq(ZoneLoginNetFrameWork *this)
{
  ZoneLoginNetFrameWork *v1; // edi@1
  PgNet *v2; // ecx@1
  SHN_DATA_FILE_INDEX v3; // ebx@1
  PROTO_AVATARINFORMATION *v4; // esi@2
  char *v5; // esi@2
  Name8 *v6; // eax@3
  NETCOMMAND netcmd; // [sp+0h] [bp-6ECh]@2
  PROTO_NC_MAP_LOGIN_REQ kProto; // [sp+4h] [bp-6E8h]@2
  char Name[128]; // [sp+65Ch] [bp-90h]@2
  unsigned int v10; // [sp+6DCh] [bp-10h]@1
  int v11; // [sp+6E8h] [bp-4h]@2
  int v12; // [sp+6ECh] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  v3 = 0;
  if ( v2 )
  {
    netcmd.protocol = 6145;
    PgNet::AddNetMsg(v2, &netcmd, 2);
    *(_QWORD *)&kProto.chardata.charid.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.chardata.charid.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.chardata.charid.n5_name[0] = 0;
    _eh_vector_constructor_iterator_(
      kProto.checksum,
      0x20u,
      50,
      (void (__thiscall *)(void *))Name8::Name8,
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
    kProto.chardata.wldmanhandle = g_kServer.m_kWorldMgrHandle;
    v11 = 0;
    v4 = User::GetSelectedAvatarInfo(&g_kUser);
    Name[0] = 0;
    memset(&Name[1], 0, 0x7Fu);
    *(_DWORD *)Name = *(_DWORD *)&v4->name.n5_name[0];
    *(_DWORD *)&Name[4] = *(_DWORD *)&v4->name.n5_name[4];
    *(_DWORD *)&Name[8] = *(_DWORD *)&v4->name.n5_name[8];
    *(_DWORD *)&Name[12] = *(_DWORD *)&v4->name.n5_name[12];
    *(_DWORD *)&Name[16] = *(_DWORD *)&v4->name.n5_name[16];
    Name[20] = 0;
    *(_QWORD *)&kProto.chardata.charid.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.chardata.charid.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.chardata.charid.n5_name[0] = 0;
    strncpy(kProto.chardata.charid.n5_name, Name, 0x14u);
    v5 = &kProto.checksum[0].n8_name[8];
    do
    {
      v6 = CShnDataFileCheckSum::GetDataFileCheckSum(&ShnDataFile, v3);
      *((_DWORD *)v5 - 2) = *(_DWORD *)&v6->n8_name[0];
      *((_DWORD *)v5 - 1) = *(_DWORD *)&v6->n8_name[4];
      *(_DWORD *)v5 = *(_DWORD *)&v6->n8_name[8];
      *((_DWORD *)v5 + 1) = *(_DWORD *)&v6->n8_name[12];
      *((_DWORD *)v5 + 2) = *(_DWORD *)&v6->n8_name[16];
      *((_DWORD *)v5 + 3) = *(_DWORD *)&v6->n8_name[20];
      *((_DWORD *)v5 + 4) = *(_DWORD *)&v6->n8_name[24];
      *((_DWORD *)v5 + 5) = *(_DWORD *)&v6->n8_name[28];
      ++v3;
      v5 += 32;
    }
    while ( (signed int)v3 < 50 );
    PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kProto, 1622);
    v11 = -1;
    _eh_vector_destructor_iterator_(
      kProto.checksum,
      0x20u,
      50,
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047BAF0) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_MISC_SEED_ACK(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  ZoneLoginNetFrameWork *v3; // esi@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->m_spZoneNet.m_pObject->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(*(_WORD *)pvData);
  ZoneLoginNetFrameWork::NcMapLoginReq(v3);
  return iRevBytes;
}

//----- (0047BB20) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_SHAPE_CMD(ZoneLoginNetFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@1
  int v4; // eax@2
  char *v5; // edx@4
  char v6; // cl@5
  PROTO_NC_CHAR_BASE_CMD *v7; // eax@6
  PROTO_NC_CHAR_BASE_CMD *v8; // edi@6
  int v9; // esi@6
  int v10; // eax@6
  void *v11; // eax@6
  int v12; // eax@7
  char acCharName[19]; // [sp+10h] [bp-1Ch]@6
  char v15; // [sp+24h] [bp-8h]@6
  unsigned int v16; // [sp+28h] [bp-4h]@1
  int v17; // [sp+2Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  User::SetMainCharShapeData(&g_kUser, (PROTO_AVATAR_SHAPE_INFO *)pvData);
  v3 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
         (*(_BYTE *)pvData >> 2) & 0x1F);
  if ( v3 )
    v4 = (int)((char *)v3 + 21);
  else
    v4 = (int)&byte_9788EB;
  v5 = (char *)&dword_B31FF8 - v4;
  do
  {
    v6 = *(_BYTE *)v4;
    v5[v4] = *(_BYTE *)v4;
    ++v4;
  }
  while ( v6 );
  v7 = User::GetMainCharBaseData(&g_kUser);
  v8 = v7;
  *(_DWORD *)acCharName = *(_DWORD *)&v7->charid.n5_name[0];
  *(_DWORD *)&acCharName[4] = *(_DWORD *)&v7->charid.n5_name[4];
  *(_DWORD *)&acCharName[8] = *(_DWORD *)&v7->charid.n5_name[8];
  *(_DWORD *)&acCharName[12] = *(_DWORD *)&v7->charid.n5_name[12];
  *(_DWORD *)&acCharName[16] = *(_DWORD *)&v7->charid.n5_name[16];
  v15 = 0;
  acCharName[18] = 0;
  v9 = BT_OpenLogFile("UserInfo.txt", 2);
  BT_SetLogFlags(v9, 2);
  v10 = BT_GetLogFileName(v9);
  BT_AddLogFile(v10);
  BT_ClearLog(v9);
  _BT_AppLogEntryF(v9, 4, "UserAccount [ %s ]", &g_kUser);
  _BT_AppLogEntryF(v9, 4, "CharID [ %d ]", v8->chrregnum);
  _BT_AppLogEntryF(v9, 4, "CharName [ %s ]", acCharName);
  v11 = CDataReader::GetRecord(
          (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
          (*(_BYTE *)pvData >> 2) & 0x1F);
  if ( v11 )
    v12 = (int)((char *)v11 + 21);
  else
    v12 = (int)&byte_9788EB;
  _BT_AppLogEntryF(v9, 4, "CharClass [ %s ]", v12);
  BT_CloseLogFile(v9);
  return iRevBytes;
}
// 976014: using guessed type int __stdcall BT_CloseLogFile(_DWORD);
// 976018: using guessed type int _BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...);
// 97601C: using guessed type int __stdcall BT_ClearLog(_DWORD);
// 976020: using guessed type int __stdcall BT_AddLogFile(_DWORD);
// 976024: using guessed type int __stdcall BT_GetLogFileName(_DWORD);
// 976028: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD);
// 97602C: using guessed type int __stdcall BT_OpenLogFile(_DWORD, _DWORD);
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;
// B31FF8: using guessed type int dword_B31FF8;

//----- (0047BC70) --------------------------------------------------------
int __thiscall ZoneLoginNetFrameWork::ProcessNetMsg(ZoneLoginNetFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  ZoneLoginNetFrameWork *v5; // esi@1
  int result; // eax@1
  CQuest *v7; // eax@9
  CQuest *v8; // eax@10
  CQuest *v9; // eax@11
  CQuest *v10; // eax@12
  CQuest *v11; // eax@28

  v5 = this;
  result = 0;
  switch ( iDepart )
  {
    case 8:
      if ( iCommand == 17 )
        result = iRevBytes;
      break;
    case 2:
      if ( iCommand == 7 )
      {
        ((void (__stdcall *)(_DWORD))this->m_spZoneNet.m_pObject->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(*(_WORD *)pvData);
        ZoneLoginNetFrameWork::NcMapLoginReq(v5);
        result = iRevBytes;
      }
      break;
    case 4:
      switch ( iCommand )
      {
        case 56:
          result = ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_BASE_CMD(this, iRevBytes, pvData);
          break;
        case 57:
          result = ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_SHAPE_CMD(this, iRevBytes, pvData);
          break;
        case 58:
          v7 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_DOING_CMD_ACK(v7, (PROTO_NC_CHAR_QUEST_DOING_CMD *)pvData);
          result = iRevBytes;
          break;
        case 59:
          v8 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_DONE_CMD_ACK(v8, (PROTO_NC_CHAR_QUEST_DONE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 206:
          v9 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(v9, (PROTO_NC_CHAR_QUEST_READ_CMD *)pvData);
          result = iRevBytes;
          break;
        case 215:
          v10 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(v10, (PROTO_NC_CHAR_QUEST_REPEAT_CMD *)pvData);
          result = iRevBytes;
          break;
        case 60:
          User::InitABState(&g_kUser, (PROTO_NC_CHAR_ABSTATE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 61:
          Skill::InitSkill((PROTO_NC_CHAR_CLIENT_SKILL_CMD *)pvData);
          result = iRevBytes;
          break;
        case 71:
          result = ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_ITEM_CMD(this, iRevBytes, pvData);
          break;
        case 73:
          MainChar::InitCharactorTitle((MainChar *)g_pkMainChar, (PROTO_NC_CHAR_CLIENT_CHARTITLE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 62:
          Skill::InitPassiveSkill((PROTO_NC_CHAR_SKILL_PASSIVE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 74:
          result = ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(this, iRevBytes, pvData);
          break;
        case 222:
          result = ZoneLoginNetFrameWork::On_NC_CHAR_CLIENT_COININFO_CMD(this, iRevBytes, pvData);
          break;
        case 72:
          goto $LN81_5;
        default:
          return result;
      }
      return result;
    case 6:
      if ( iCommand == 2 )
      {
        result = ZoneLoginNetFrameWork::On_NC_MAP_LOGIN_ACK(this, iRevBytes, pvData);
      }
      else
      {
        if ( iCommand == 4 )
          result = ZoneLoginNetFrameWork::On_NC_MAP_LOGINFAIL_ACK(this, iRevBytes, pvData);
      }
      break;
    case 36:
      if ( iCommand == 16 )
      {
        if ( *(_BYTE *)pvData > 0x14u )
          goto $LN81_5;
        PrivateStoreWin::ms_byBoothSize = *(_BYTE *)pvData;
        result = iRevBytes;
      }
      break;
    case 17:
      if ( iCommand == 30 )
      {
        v11 = QuestDataMgr::GetQuest();
        CClientQuest::SetQuestResetTime((CClientQuest *)v11, (PROTO_NC_QUEST_RESET_TIME_CMD *)pvData);
$LN81_5:
        result = iRevBytes;
      }
      break;
    default:
      return result;
  }
  return result;
}
// A7CF04: using guessed type unsigned __int8 PrivateStoreWin__ms_byBoothSize;

//----- (0047BFA0) --------------------------------------------------------
NiRTTI *__thiscall ZoneLoginNetFrameWork::GetRTTI(ZoneLoginNetFrameWork *this)
{
  return &ZoneLoginNetFrameWork::m_RTTI;
}

//----- (0047BFB0) --------------------------------------------------------
const char *__thiscall ZoneLoginNetFrameWork::GetFrameWorkName(ZoneLoginNetFrameWork *this)
{
  return ZoneLoginNetFrameWork::m_RTTI.m_pcName;
}

//----- (0047BFC0) --------------------------------------------------------
void __thiscall PROTO_NC_MAP_LOGIN_REQ::_PROTO_NC_MAP_LOGIN_REQ(PROTO_NC_MAP_LOGIN_REQ *this)
{
  _eh_vector_destructor_iterator_(
    this->checksum,
    0x20u,
    50,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (0047BFE0) --------------------------------------------------------
void *__thiscall ZoneLoginNetFrameWork::_scalar_deleting_destructor_(ZoneLoginNetFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ZoneLoginNetFrameWork::_ZoneLoginNetFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0047C010) --------------------------------------------------------
void __thiscall CharSelectInfoWin::CharSelectInfoWin(CharSelectInfoWin *this)
{
  CharSelectInfoWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSelectInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharSelectInfoWin::_vftable_;
}
// 98AB34: using guessed type int (__stdcall *CharSelectInfoWin___vftable_)(int uiFlags);
// 98AB54: using guessed type int (__thiscall *CharSelectInfoWin___vftable_)(void *p, char);

//----- (0047C030) --------------------------------------------------------
void __thiscall CharSelectInfoWin::_CharSelectInfoWin(CharSelectInfoWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSelectInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharSelectInfoWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98AB34: using guessed type int (__stdcall *CharSelectInfoWin___vftable_)(int uiFlags);
// 98AB54: using guessed type int (__thiscall *CharSelectInfoWin___vftable_)(void *p, char);

//----- (0047C050) --------------------------------------------------------
bool __thiscall CharSelectInfoWin::Create(CharSelectInfoWin *this, PgFrameWork *pkFrameWork)
{
  CharSelectInfoWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgFont *v10; // eax@17
  PgWinText *v11; // eax@17
  PgFont *v12; // eax@17
  PgWinText *v13; // edi@17
  NiRefObjectVtbl *v14; // ebx@17
  char *v15; // eax@17
  PgFont *v16; // eax@18
  PgWinText *v17; // eax@18
  PgFont *v18; // eax@18
  PgWinText *v19; // edi@18
  NiRefObjectVtbl *v20; // ebx@18
  char *v21; // eax@18
  PgFont *v22; // eax@19
  PgWinText *v23; // eax@19
  PgFont *v24; // eax@19
  PgWinText *v25; // edi@19
  NiRefObjectVtbl *v26; // ebx@19
  char *v27; // eax@19
  PgFont *v28; // eax@20
  PgWinText *v29; // eax@20
  PgFont *v30; // eax@20
  PgWinText *v31; // eax@20
  PgWinText *v32; // edi@20
  NiRefObjectVtbl *v33; // ebx@20
  PgSprData *v34; // eax@20
  PgFont *v35; // eax@20
  PgFont *v36; // eax@20
  PgWinText *v37; // eax@20
  PgWinText *v38; // edi@20
  NiRefObjectVtbl *v39; // ebx@20
  PgSprData *v40; // eax@20
  PgFont *v41; // eax@20
  PgFont *v42; // eax@20
  PgWinText *v43; // eax@20
  PgWinText *v44; // edi@20
  NiRefObjectVtbl *v45; // ebx@20
  char *v46; // eax@20
  NiSourceTexture *pkTexture; // [sp+0h] [bp-24h]@1
  NiPointer<NiNode> spNode; // [sp+4h] [bp-20h]@1
  unsigned int uiWidth; // [sp+8h] [bp-1Ch]@15
  unsigned int uiHeight; // [sp+Ch] [bp-18h]@15
  int uiLeft; // [sp+10h] [bp-14h]@11
  int uiTop; // [sp+14h] [bp-10h]@11
  int v53; // [sp+20h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v53 = 0;
  v3 = MenuTexMgr::GetTexture(5u);
  pkTexture = v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v53 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\CharSelect\\SelectCharCharInfo.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CharInfoPanel", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 32, 47, v9, 0, pkFrameWork, "CharSelectInfoWin", 0) )
  {
    v4 = spNode.m_pObject;
    v53 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Name", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v10 = Font::Get(0),
        v11 = PgWinText::CreateWin(
                uiLeft,
                uiTop + 2,
                uiWidth,
                uiHeight,
                v10,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkNameTextWin = v11,
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v11,
          1u),
        v12 = Font::Get(0),
        v13 = PgWinText::CreateWin(
                uiLeft - 42,
                uiTop + 1,
                uiWidth,
                uiHeight,
                v12,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v15 = TextData::Get(0x4EA49695u),
        v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15),
        v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
          (NiRefObject *)v13,
          (unsigned int)&Color::m_kDxMenuColor),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Level", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v16 = Font::Get(0),
        v17 = PgWinText::CreateWin(
                uiLeft,
                uiTop + 2,
                uiWidth,
                uiHeight,
                v16,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkLevelTextWin = v17,
        v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v17,
          1u),
        v18 = Font::Get(0),
        v19 = PgWinText::CreateWin(
                uiLeft - 42,
                uiTop + 1,
                uiWidth,
                uiHeight,
                v18,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v21 = TextData::Get(0x98A49F99u),
        v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21),
        v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
          (NiRefObject *)v19,
          (unsigned int)&Color::m_kDxMenuColor),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Job", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v22 = Font::Get(0),
        v23 = PgWinText::CreateWin(
                uiLeft,
                uiTop + 2,
                uiWidth,
                uiHeight,
                v22,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkClassTextWin = v23,
        v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v23,
          1u),
        v24 = Font::Get(0),
        v25 = PgWinText::CreateWin(
                uiLeft - 42,
                uiTop + 1,
                uiWidth,
                uiHeight,
                v24,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v27 = TextData::Get(0x96B28AA0u),
        v26[118].__vecDelDtor((NiRefObject *)v25, (unsigned int)v27),
        v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
          (NiRefObject *)v25,
          (unsigned int)&Color::m_kDxMenuColor),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Position", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
    v53 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v28 = Font::Get(0);
  v29 = PgWinText::CreateWin(uiLeft, uiTop + 2, uiWidth, uiHeight, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkPositionTextWin = v29;
  ((void (__thiscall *)(PgWinText *))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v29);
  v30 = Font::Get(0);
  v31 = PgWinText::CreateWin(
          uiLeft - 42,
          uiTop + 1,
          uiWidth,
          uiHeight,
          v30,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v32 = v31;
  v33 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0xA4F6EBECu);
  ((void (__thiscall *)(PgWinText *))v33[118].__vecDelDtor)(v32);
  ((void (__thiscall *)(PgWinText *))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v32);
  v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HpDark", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft, uiTop, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v35 = Font::Get(0);
  v2->m_pkHPTextWin = PgWinText::CreateWin(
                        uiLeft,
                        uiTop + 1,
                        uiWidth,
                        uiHeight,
                        v35,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
  v36 = Font::Get(0);
  v37 = PgWinText::CreateWin(
          uiLeft - 42,
          uiTop + 1,
          uiWidth,
          uiHeight,
          v36,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v38 = v37;
  v39 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x485F49A4u);
  ((void (__thiscall *)(PgWinText *))v39[118].__vecDelDtor)(v38);
  v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v38,
    (unsigned int)&Color::m_kDxMenuColor);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpDark", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft, uiTop, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v41 = Font::Get(0);
  v2->m_pkSPTextWin = PgWinText::CreateWin(
                        uiLeft,
                        uiTop + 1,
                        uiWidth,
                        uiHeight,
                        v41,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
  v42 = Font::Get(0);
  v43 = PgWinText::CreateWin(
          uiLeft - 42,
          uiTop + 1,
          uiWidth,
          uiHeight,
          v42,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v44 = v43;
  v45 = v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v46 = TextData::Get(0x535F49A4u);
  v45[118].__vecDelDtor((NiRefObject *)v44, (unsigned int)v46);
  v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v44,
    (unsigned int)&Color::m_kDxMenuColor);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v53 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0047C620) --------------------------------------------------------
void __thiscall CharSelectInfoWin::SetAvatarInfo(CharSelectInfoWin *this, PROTO_AVATARINFORMATION *pkInfo)
{
  CharSelectInfoWin *v2; // esi@1
  int v3; // eax@3
  int v4; // edx@3
  int v5; // ecx@3
  int v6; // eax@3
  PgWinText *v7; // ecx@3
  void *v8; // eax@3
  int v9; // eax@4
  MapInfo *v10; // eax@6
  char acStr[64]; // [sp+8h] [bp-5Ch]@3
  char acCharName[21]; // [sp+48h] [bp-1Ch]@3
  unsigned int v13; // [sp+60h] [bp-4h]@1
  int v14; // [sp+64h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v2 = this;
  if ( pkInfo )
  {
    v3 = *(_DWORD *)&pkInfo->name.n5_name[0];
    v4 = *(_DWORD *)&pkInfo->name.n5_name[8];
    *(_DWORD *)&acCharName[4] = *(_DWORD *)&pkInfo->name.n5_name[4];
    v5 = *(_DWORD *)&pkInfo->name.n5_name[16];
    *(_DWORD *)acCharName = v3;
    v6 = *(_DWORD *)&pkInfo->name.n5_name[12];
    *(_DWORD *)&acCharName[16] = v5;
    v7 = v2->m_pkNameTextWin;
    *(_DWORD *)&acCharName[8] = v4;
    *(_DWORD *)&acCharName[12] = v6;
    acCharName[20] = 0;
    ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acCharName);
    sprintf(acStr, "%d");
    ((void (__stdcall *)(_DWORD))v2->m_pkLevelTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    v8 = CDataReader::GetRecord(
           (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
           ((unsigned __int8)pkInfo->shape._bf0 >> 2) & 0x1F);
    if ( v8 )
      v9 = (int)((char *)v8 + 21);
    else
      v9 = (int)&byte_9788EB;
    ((void (__stdcall *)(int))v2->m_pkClassTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v9);
    v10 = MapInfoTab::GetByMapName(&pkInfo->loginmap);
    if ( v10 )
      ((void (__stdcall *)(char *))v2->m_pkPositionTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v10->Name);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkHPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AB02);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AB03);
  }
  else
  {
    ((void (__stdcall *)(_UNKNOWN *))this->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AAD7);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkLevelTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AAE6);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkClassTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AAE7);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkPositionTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AAFA);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkHPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AAFB);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98AB01);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (0047C7D0) --------------------------------------------------------
CharSelectInfoWin *__cdecl CharSelectInfoWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CharSelectInfoWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CharSelectInfoWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CharSelectInfoWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CharSelectInfoWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98AB34: using guessed type int (__stdcall *CharSelectInfoWin___vftable_)(int uiFlags);
// 98AB54: using guessed type int (__thiscall *CharSelectInfoWin___vftable_)(void *p, char);

//----- (0047C910) --------------------------------------------------------
void *__thiscall CharSelectInfoWin::_scalar_deleting_destructor_(CharSelectInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSelectInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharSelectInfoWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98AB34: using guessed type int (__stdcall *CharSelectInfoWin___vftable_)(int uiFlags);
// 98AB54: using guessed type int (__thiscall *CharSelectInfoWin___vftable_)(void *p, char);

//----- (0047C950) --------------------------------------------------------
void __thiscall CharSelectMenuWin::CharSelectMenuWin(CharSelectMenuWin *this)
{
  CharSelectMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSelectMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharSelectMenuWin::_vftable_;
  v1->pkCancelBut = 0;
}
// 98AE74: using guessed type int (__stdcall *CharSelectMenuWin___vftable_)(int uiFlags);
// 98AE94: using guessed type int (__thiscall *CharSelectMenuWin___vftable_)(void *p, char);

//----- (0047C980) --------------------------------------------------------
void __thiscall CharSelectMenuWin::_CharSelectMenuWin(CharSelectMenuWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSelectMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharSelectMenuWin::_vftable_;
  this->pkCancelBut = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98AE74: using guessed type int (__stdcall *CharSelectMenuWin___vftable_)(int uiFlags);
// 98AE94: using guessed type int (__thiscall *CharSelectMenuWin___vftable_)(void *p, char);

//----- (0047C9A0) --------------------------------------------------------
void __thiscall CharSelectMenuWin::OnCmdCancel(CharSelectMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, AccountFrameWorkID);
  if ( v1 )
  {
    v1[2].m_BackFrameID = 0;
    *(_DWORD *)&v1[2].m_bInit = 0;
    v1[3].baseclass_0.vfptr = 0;
    v1[3].baseclass_0.m_pkMsgHooker = 0;
    v1[3].baseclass_0.m_uiMessageNum = 0;
    v1[3].m_kMsgQ.m_pBase = 0;
    v1[3].m_kMsgQ.m_uiAlloced = 0;
    v1[3].m_kMsgQ.m_uiHead = 0;
  }
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 3u, 0x33u, 0, 0);
}

//----- (0047C9F0) --------------------------------------------------------
void __thiscall CharSelectMenuWin::OnCmdCreateChar(CharSelectMenuWin *this)
{
  CharSelectFrameWork::CreateAvatar((CharSelectFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0047CA00) --------------------------------------------------------
void __thiscall CharSelectMenuWin::OnCmdDeleteChar(CharSelectMenuWin *this)
{
  CharSelectFrameWork::DeleteAvatar((CharSelectFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0047CA10) --------------------------------------------------------
void __thiscall CharSelectMenuWin::OnCmdOk(CharSelectMenuWin *this)
{
  CharSelectFrameWork::SelectOk((CharSelectFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0047CA20) --------------------------------------------------------
void __thiscall CharSelectMenuWin::UpdateMeWin(CharSelectMenuWin *this, float fCurTime)
{
  PgFrameWork *v2; // eax@3

  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 && !(*(_BYTE *)(g_pkKeyboard + 65) & 2) )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, AccountFrameWorkID);
    if ( v2 )
    {
      v2[2].m_BackFrameID = 0;
      *(_DWORD *)&v2[2].m_bInit = 0;
      v2[3].baseclass_0.vfptr = 0;
      v2[3].baseclass_0.m_pkMsgHooker = 0;
      v2[3].baseclass_0.m_uiMessageNum = 0;
      v2[3].m_kMsgQ.m_pBase = 0;
      v2[3].m_kMsgQ.m_uiAlloced = 0;
      v2[3].m_kMsgQ.m_uiHead = 0;
    }
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 3u, 0x33u, 0, 0);
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (0047CA80) --------------------------------------------------------
bool __thiscall CharSelectMenuWin::Create(CharSelectMenuWin *this, PgFrameWork *pkFrameWork)
{
  CharSelectMenuWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@10
  int v9; // ebx@10
  PgSprData *v10; // eax@10
  PgWinSpr *v11; // eax@10
  PgWinSpr *v12; // edi@10
  PgWin *v13; // ST5C_4@10
  PgFont *v14; // ST58_4@10
  unsigned int v15; // ST54_4@10
  unsigned int v16; // eax@10
  PgWinText *v17; // eax@10
  PgTextGeometry *v18; // eax@10
  NiRefObjectVtbl *v19; // edi@12
  char *v20; // eax@12
  NiRefObjectVtbl *v21; // edi@12
  PgFont *v22; // eax@12
  PgSprData *v23; // edi@12
  PgWin *v24; // ST5C_4@12
  PgFont *v25; // ST58_4@12
  unsigned int v26; // ST54_4@12
  unsigned int v27; // eax@12
  PgWinText *v28; // edi@12
  PgFont *v29; // eax@12
  char *v30; // eax@12
  D3DXCOLOR *v31; // eax@12
  PgSprData *v32; // edi@12
  PgWin *v33; // ST5C_4@12
  PgWin *v34; // edi@12
  PgFont *v35; // ST58_4@12
  unsigned int v36; // ST54_4@12
  unsigned int v37; // eax@12
  PgWinText *v38; // edi@12
  D3DXCOLOR *v39; // eax@12
  PgFont *v40; // eax@12
  char *v41; // eax@12
  PgSprData *v42; // edi@12
  PgWin *v43; // ST5C_4@12
  PgWin *v44; // edi@12
  PgFont *v45; // ST58_4@12
  unsigned int v46; // ST54_4@12
  unsigned int v47; // eax@12
  PgWinText *v48; // edi@12
  D3DXCOLOR *v49; // eax@12
  PgFont *v50; // eax@12
  char *v51; // eax@12
  PgSprData *v52; // edi@12
  PgWin *v53; // ST5C_4@12
  PgWin *v54; // edi@12
  PgFont *v55; // ST58_4@12
  unsigned int v56; // ST54_4@12
  unsigned int v57; // eax@12
  PgWinText *v58; // edi@12
  NiRefObjectVtbl *v59; // ebx@12
  D3DXCOLOR *v60; // eax@12
  NiRefObjectVtbl *v61; // ebx@12
  PgFont *v62; // eax@12
  NiRefObjectVtbl *v63; // ebx@12
  char *v64; // eax@12
  NiNode *v65; // esi@13
  D3DXCOLOR result; // [sp+78h] [bp-2Ch]@12
  NiRefObjectVtbl *v67; // [sp+88h] [bp-1Ch]@12
  int uiLeft; // [sp+8Ch] [bp-18h]@4
  int uiTop; // [sp+90h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+94h] [bp-10h]@1
  int v71; // [sp+A0h] [bp-4h]@1
  int iOffY; // [sp+ACh] [bp+8h]@10

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v71 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\CharSelect\\SelectPanel.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "CharSelectMenuWin", 0) )
  {
    v6 = spNode.m_pObject;
    v71 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iOffY = uiTop;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextPanel", &uiLeft, &uiTop, 0);
  v11 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = v11;
  v13 = (PgWin *)v11;
  v14 = Font::Get(0);
  v15 = ((int (__thiscall *)(PgWinSpr *))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v12);
  v16 = ((int (__thiscall *)(PgWinSpr *))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v12);
  v17 = PgWinText::CreateWin(0, 2, v16, v15, v14, v13, 0, 0);
  v2->m_pkSelectMenuTextWin = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v18 = v2->m_pkSelectMenuTextWin->m_spTextGeom.m_pObject;
  if ( v18 )
    v18->baseclass_0.m_bTextCmdOn = 1;
  v19 = v2->m_pkSelectMenuTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = TextData::Get(0x5EFDC1BFu);
  v19[118].__vecDelDtor((NiRefObject *)v2->m_pkSelectMenuTextWin, (unsigned int)v20);
  ((void (__stdcall *)(_DWORD))v2->m_pkSelectMenuTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  SpScreenText::SetVerticalGap(&v2->m_pkSelectMenuTextWin->m_spTextGeom.m_pObject->baseclass_0, 6);
  v21 = v2->m_pkSelectMenuTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v22 = Font::Get(MENU);
  v21[113].__vecDelDtor((NiRefObject *)v2->m_pkSelectMenuTextWin, (unsigned int)v22);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CreatCharNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "CreatCharClick");
  PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "CreatCharOver");
  v24 = (PgWin *)PgWinBut::CreateWin(uiLeft - v9, uiTop - iOffY, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  LOBYTE(v24[1].baseclass_0.baseclass_0.m_pkParent) = 0;
  v25 = Font::Get(0);
  v26 = ((int (__thiscall *)(PgWin *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v24);
  v27 = ((int (__thiscall *)(PgWin *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v24);
  v28 = PgWinText::CreateWin(0, 2, v27, v26, v25, v24, 0, 0);
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v28,
    5u);
  v67 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = Font::Get(MENU);
  v67[113].__vecDelDtor((NiRefObject *)v28, (unsigned int)v29);
  v67 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v30 = TextData::Get(0xDFE33F2Cu);
  v67[118].__vecDelDtor((NiRefObject *)v28, (unsigned int)v30);
  v67 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = Color::GetDxColor(&result, 55, -1, 0, -1);
  v67[117].__vecDelDtor((NiRefObject *)v28, (unsigned int)v31);
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v28,
    0);
  SpScreenText::SetShadowOffset(&v28->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DelCharNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "DelCharClick");
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "DelCharOver");
  v33 = (PgWin *)PgWinBut::CreateWin(
                   uiLeft - v9,
                   uiTop - iOffY,
                   v32,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   1u,
                   0,
                   0);
  v2->m_pkDelCharBtn = (PgWinBut *)v33;
  v34 = v33;
  v35 = Font::Get(0);
  v36 = ((int (__thiscall *)(PgWin *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v34);
  v37 = ((int (__thiscall *)(PgWin *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v34);
  v38 = PgWinText::CreateWin(0, 2, v37, v36, v35, v33, 0, 0);
  v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v38,
    5u);
  v67 = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v39 = Color::GetDxColor(&result, 55, -1, 0, -1);
  v67[117].__vecDelDtor((NiRefObject *)v38, (unsigned int)v39);
  v67 = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v40 = Font::Get(MENU);
  v67[113].__vecDelDtor((NiRefObject *)v38, (unsigned int)v40);
  v67 = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v41 = TextData::Get(0xE0E7461Fu);
  v67[118].__vecDelDtor((NiRefObject *)v38, (unsigned int)v41);
  v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v38,
    0);
  SpScreenText::SetShadowOffset(&v38->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "StartNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "StartClick");
  PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "StartOver");
  v43 = (PgWin *)PgWinBut::CreateWin(
                   uiLeft - v9,
                   uiTop - iOffY,
                   v42,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   2u,
                   0,
                   0);
  v2->m_pkOkBut = (PgWinBut *)v43;
  v44 = v43;
  v45 = Font::Get(0);
  v46 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v44);
  v47 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v44);
  v48 = PgWinText::CreateWin(0, 2, v47, v46, v45, v43, 0, 0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v48,
    5u);
  v67 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v49 = Color::GetDxColor(&result, 55, -1, 0, -1);
  v67[117].__vecDelDtor((NiRefObject *)v48, (unsigned int)v49);
  v67 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v50 = Font::Get(MENU);
  v67[113].__vecDelDtor((NiRefObject *)v48, (unsigned int)v50);
  v67 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v51 = TextData::Get(0x88ADEBE6u);
  v67[118].__vecDelDtor((NiRefObject *)v48, (unsigned int)v51);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v48,
    0);
  SpScreenText::SetShadowOffset(&v48->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v52, &spNode.m_pObject->baseclass_0, "PrePageClick");
  PgSprData::Add(v52, &spNode.m_pObject->baseclass_0, "PrePageOver");
  v53 = (PgWin *)PgWinBut::CreateWin(
                   uiLeft - v9,
                   uiTop - iOffY,
                   v52,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   3u,
                   0,
                   0);
  v2->pkCancelBut = (PgWinBut *)v53;
  v54 = v53;
  v55 = Font::Get(0);
  v56 = ((int (__thiscall *)(PgWin *))v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v54);
  v57 = ((int (__thiscall *)(PgWin *))v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v54);
  v58 = PgWinText::CreateWin(0, 2, v57, v56, v55, v53, 0, 0);
  v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v58,
    5u);
  v59 = v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v60 = Color::GetDxColor(&result, 55, -1, 0, -1);
  v59[117].__vecDelDtor((NiRefObject *)v58, (unsigned int)v60);
  v61 = v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v62 = Font::Get(MENU);
  v61[113].__vecDelDtor((NiRefObject *)v58, (unsigned int)v62);
  v63 = v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v64 = TextData::Get(0xE803E037u);
  v63[118].__vecDelDtor((NiRefObject *)v58, (unsigned int)v64);
  v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v58,
    0);
  SpScreenText::SetShadowOffset(&v58->m_spTextGeom.m_pObject->baseclass_0, 1u);
  ((void (__thiscall *)(CharSelectMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    1.0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v71 = -1;
  if ( spNode.m_pObject )
  {
    v65 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v65 )
        v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v65, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0047D190) --------------------------------------------------------
void __thiscall CharSelectMenuWin::EnableChildWinLogin(CharSelectMenuWin *this, bool b)
{
  CharSelectMenuWin *v2; // esi@1

  v2 = this;
  PgWin::EnableChildWin(&this->baseclass_0.baseclass_0.baseclass_0, b);
  if ( v2->pkCancelBut )
  {
    ((void (__stdcall *)(_DWORD))v2->pkCancelBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->pkCancelBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
  }
}

//----- (0047D1E0) --------------------------------------------------------
void __thiscall CharSelectMenuWin::OnCommand(CharSelectMenuWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      CharSelectFrameWork::CreateAvatar((CharSelectFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 1u:
      CharSelectFrameWork::DeleteAvatar((CharSelectFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 2u:
      CharSelectFrameWork::SelectOk((CharSelectFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 3u:
      CharSelectMenuWin::OnCmdCancel(this);
      break;
    default:
      return;
  }
}

//----- (0047D240) --------------------------------------------------------
void __thiscall CharSelectMenuWin::SetMenuTextInfo(CharSelectMenuWin *this, PROTO_AVATARINFORMATION *pkInfo)
{
  int v2; // ecx@3
  int v3; // edx@3
  int v4; // ebx@3
  int v5; // edi@3
  int v6; // eax@3
  int v7; // ecx@3
  int v8; // edx@3
  int v9; // ecx@4
  int v10; // edx@4
  char *v11; // eax@5
  char *v12; // eax@6
  CharSelectMenuWin *v13; // [sp+4h] [bp-4E8h]@1
  char kMapName[4]; // [sp+Ch] [bp-4E0h]@3
  int v15; // [sp+10h] [bp-4DCh]@3
  int v16; // [sp+14h] [bp-4D8h]@3
  char msg[1024]; // [sp+18h] [bp-4D4h]@4
  char Name[128]; // [sp+418h] [bp-D4h]@3
  char acMapName[64]; // [sp+498h] [bp-54h]@3
  char acName[13]; // [sp+4D8h] [bp-14h]@3
  unsigned int v21; // [sp+4E8h] [bp-4h]@1
  int v22; // [sp+4ECh] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v13 = this;
  if ( pkInfo )
  {
    if ( this->m_pkSelectMenuTextWin )
    {
      v2 = *(_DWORD *)&pkInfo->name.n5_name[4];
      v3 = *(_DWORD *)&pkInfo->name.n5_name[8];
      v4 = *(_DWORD *)&pkInfo->loginmap.n3_name[4];
      v5 = *(_DWORD *)&pkInfo->loginmap.n3_name[0];
      *(_DWORD *)Name = *(_DWORD *)&pkInfo->name.n5_name[0];
      v6 = *(_DWORD *)&pkInfo->name.n5_name[12];
      *(_DWORD *)&Name[4] = v2;
      v7 = *(_DWORD *)&pkInfo->name.n5_name[16];
      *(_DWORD *)&Name[12] = v6;
      *(_DWORD *)&Name[8] = v3;
      v8 = *(_DWORD *)&pkInfo->loginmap.n3_name[8];
      *(_DWORD *)&Name[16] = v7;
      Name[20] = 0;
      *(_DWORD *)&acName[8] = v8;
      acName[12] = 0;
      memset(acMapName, 0, 0x40u);
      *(_DWORD *)acMapName = v5;
      *(_DWORD *)&acMapName[4] = v4;
      v16 = 0;
      v15 = 0;
      *(_DWORD *)kMapName = 0;
      strncpy(kMapName, acMapName, 0xCu);
      if ( MapInfoTab::GetByMapName((Name3 *)kMapName) )
      {
        msg[0] = 0;
        memset(&msg[1], 0, 0x3FFu);
        v9 = *(_DWORD *)&pkInfo->loginmap.n3_name[8];
        v10 = *(_DWORD *)&pkInfo->loginmap.n3_name[0];
        *(_DWORD *)&acName[4] = *(_DWORD *)&pkInfo->loginmap.n3_name[4];
        *(_DWORD *)&acName[8] = v9;
        *(_DWORD *)acName = v10;
        acName[12] = 0;
        if ( strcmp(acName, "EldPri") )
        {
          v12 = TextData::Get(0x4A8F8F6Eu);
          sprintf(msg, v12);
        }
        else
        {
          v11 = TextData::Get(0x3051484Au);
          sprintf(msg, v11);
        }
        if ( v13->m_pkSelectMenuTextWin )
          ((void (__stdcall *)(_DWORD))v13->m_pkSelectMenuTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(msg);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047D450) --------------------------------------------------------
void __thiscall CharSelectMenuWin::DisplayNoCharMsg(CharSelectMenuWin *this)
{
  CharSelectMenuWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1

  v1 = this;
  v2 = this->m_pkSelectMenuTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData::Get(0xE9EECF07u);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkSelectMenuTextWin, (unsigned int)v3);
}

//----- (0047D480) --------------------------------------------------------
CharSelectMenuWin *__cdecl CharSelectMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CharSelectMenuWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CharSelectMenuWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CharSelectMenuWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 544))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CharSelectMenuWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98AE74: using guessed type int (__stdcall *CharSelectMenuWin___vftable_)(int uiFlags);
// 98AE94: using guessed type int (__thiscall *CharSelectMenuWin___vftable_)(void *p, char);

//----- (0047D5C0) --------------------------------------------------------
const bool __thiscall NiInputKeyboard::KeyWasPressed(NiInputKeyboard *this, NiInputKeyboard::KeyCode eKey)
{
  const bool result; // al@2

  if ( eKey )
    result = ((unsigned __int8)this->m_aucKeystate[(signed int)eKey >> 3] >> (eKey & 7)) & 1
          && !(((unsigned __int8)this->m_aucKeystateLastUpdate[(signed int)eKey >> 3] >> (eKey & 7)) & 1);
  else
    result = 0;
  return result;
}

//----- (0047D600) --------------------------------------------------------
void *__thiscall CharSelectMenuWin::_scalar_deleting_destructor_(CharSelectMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSelectMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharSelectMenuWin::_vftable_;
  this->pkCancelBut = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98AE74: using guessed type int (__stdcall *CharSelectMenuWin___vftable_)(int uiFlags);
// 98AE94: using guessed type int (__thiscall *CharSelectMenuWin___vftable_)(void *p, char);

//----- (0047D640) --------------------------------------------------------
void __thiscall EventFriendCountWin::EventFriendCountWin(EventFriendCountWin *this)
{
  EventFriendCountWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventFriendCountWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventFriendCountWin::_vftable_;
}
// 98B110: using guessed type int (__stdcall *EventFriendCountWin___vftable_)(int uiFlags);
// 98B12C: using guessed type int (__thiscall *EventFriendCountWin___vftable_)(void *p, char);

//----- (0047D660) --------------------------------------------------------
void __thiscall EventFriendCountWin::_EventFriendCountWin(EventFriendCountWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventFriendCountWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventFriendCountWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98B110: using guessed type int (__stdcall *EventFriendCountWin___vftable_)(int uiFlags);
// 98B12C: using guessed type int (__thiscall *EventFriendCountWin___vftable_)(void *p, char);

//----- (0047D680) --------------------------------------------------------
void __thiscall EventFriendCountWin::SetCountText(EventFriendCountWin *this, unsigned __int16 dNum)
{
  EventFriendCountWin *v2; // esi@1
  char *v3; // eax@1
  char pcResultText[1024]; // [sp+4h] [bp-404h]@1
  unsigned int v5; // [sp+404h] [bp-4h]@1
  int v6; // [sp+408h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  v3 = TextData::Get(0xE2E5D02Cu);
  sprintf(pcResultText, v3);
  ((void (__stdcall *)(_DWORD))v2->m_pkCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcResultText);
}
// A85C00: using guessed type int __security_cookie;

//----- (0047D6E0) --------------------------------------------------------
bool __thiscall EventFriendCountWin::Create(EventFriendCountWin *this, PgFrameWork *pkFrameWork)
{
  EventFriendCountWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  PgWinSpr *v10; // eax@13
  PgFont *v11; // ST10_4@15
  unsigned int v12; // ST0C_4@15
  unsigned int v13; // eax@15
  PgWinText *v14; // eax@15
  NiRefObjectVtbl *v15; // edi@15
  D3DXCOLOR *v16; // eax@15
  NiRefObjectVtbl *v17; // edi@15
  PgFont *v18; // eax@15
  char *v19; // eax@15
  NiNode *v20; // esi@16
  const char *v21; // [sp+10h] [bp-44Ch]@11
  int *v22; // [sp+14h] [bp-448h]@11
  int *v23; // [sp+18h] [bp-444h]@11
  NiSourceTexture *v24; // [sp+1Ch] [bp-440h]@11
  D3DXCOLOR result; // [sp+30h] [bp-42Ch]@15
  int uiTop; // [sp+40h] [bp-41Ch]@4
  int uiLeft; // [sp+44h] [bp-418h]@4
  NiPointer<NiNode> spNode; // [sp+48h] [bp-414h]@1
  char string; // [sp+4Ch] [bp-410h]@15
  unsigned int v30; // [sp+44Ch] [bp-10h]@1
  int v31; // [sp+458h] [bp-4h]@1
  int v32; // [sp+45Ch] [bp+0h]@1

  v30 = (unsigned int)&v32 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v31 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\Game\\MessageWin02.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "EventFriendCountWin", 0) )
  {
    v6 = spNode.m_pObject;
    v31 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v24 = v8;
    v23 = &uiTop;
    v22 = &uiLeft;
    v21 = "Theme";
  }
  else
  {
    v24 = 0;
    v23 = &uiTop;
    v22 = &uiLeft;
    v21 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v21, v22, v23, v24);
  v10 = PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
  v11 = Font::Get(0);
  v12 = ((int (__thiscall *)(EventFriendCountWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2);
  v13 = ((int (__thiscall *)(EventFriendCountWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v14 = PgWinText::CreateWin(0, 0, v13, v12, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCountTextWin = v14;
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v14,
    5u);
  v15 = v2->m_pkCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v16 = Color::GetDxColor(&result, 55, -1, 0, -1);
  v15[117].__vecDelDtor((NiRefObject *)v2->m_pkCountTextWin, (unsigned int)v16);
  v17 = v2->m_pkCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = Font::Get(MENU);
  v17[113].__vecDelDtor((NiRefObject *)v2->m_pkCountTextWin, (unsigned int)v18);
  ((void (__stdcall *)(_DWORD))v2->m_pkCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("EventFriendWin");
  ((void (__stdcall *)(_DWORD))v2->m_pkCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  SpScreenText::SetShadowOffset(&v2->m_pkCountTextWin->m_spTextGeom.m_pObject->baseclass_0, 1u);
  ((void (__thiscall *)(EventFriendCountWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.079999998,
    0.050000001);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v19 = TextData::Get(0xE2E5D02Cu);
  sprintf(&string, v19);
  ((void (__stdcall *)(char *))v2->m_pkCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&string);
  v31 = -1;
  if ( spNode.m_pObject )
  {
    v20 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v20 )
        v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0047D9D0) --------------------------------------------------------
EventFriendCountWin *__cdecl EventFriendCountWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  EventFriendCountWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &EventFriendCountWin::_vftable_;
    *((_DWORD *)v2 + 58) = &EventFriendCountWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (EventFriendCountWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98B110: using guessed type int (__stdcall *EventFriendCountWin___vftable_)(int uiFlags);
// 98B12C: using guessed type int (__thiscall *EventFriendCountWin___vftable_)(void *p, char);

//----- (0047DB10) --------------------------------------------------------
void *__thiscall EventFriendCountWin::_scalar_deleting_destructor_(EventFriendCountWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventFriendCountWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventFriendCountWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98B110: using guessed type int (__stdcall *EventFriendCountWin___vftable_)(int uiFlags);
// 98B12C: using guessed type int (__thiscall *EventFriendCountWin___vftable_)(void *p, char);

//----- (0047DB50) --------------------------------------------------------
bool __usercall IsSpecialCharInStr2_1<al>(char *pstr<ecx>)
{
  char *v1; // esi@1
  int v2; // eax@1
  char v3; // cl@2
  int v4; // ebx@3
  int v5; // esi@3
  int v6; // eax@6
  char temp[128]; // [sp+Ch] [bp-84h]@1
  unsigned int v9; // [sp+8Ch] [bp-4h]@1
  int v10; // [sp+90h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = pstr;
  memset(temp, 0, 0x64u);
  strncpy(temp, v1, 0x5Au);
  v2 = (int)temp;
  do
    v3 = *(_BYTE *)v2++;
  while ( v3 );
  v4 = v2 - (_DWORD)&temp[1];
  v5 = 0;
  if ( v2 - (signed int)&temp[1] <= 0 )
    return 0;
  while ( IsDBCSLeadByte(temp[v5]) )
  {
    ++v5;
LABEL_34:
    ++v5;
    if ( v5 >= v4 )
      return 0;
  }
  v6 = (unsigned __int8)temp[v5];
  if ( (_BYTE)v6 != 32
    && (_BYTE)v6 != 39
    && (_BYTE)v6 != 92
    && (_BYTE)v6 != 47
    && (_BYTE)v6 != 58
    && (_BYTE)v6 != 42
    && (_BYTE)v6 != 63
    && (_BYTE)v6 != 60
    && (_BYTE)v6 != 62
    && (_BYTE)v6 != 124
    && (_BYTE)v6 != 126
    && (_BYTE)v6 != 33
    && (_BYTE)v6 != 64
    && (_BYTE)v6 != 37
    && (_BYTE)v6 != 38
    && (_BYTE)v6 != 59
    && (_BYTE)v6 != 46
    && (_BYTE)v6 != 44
    && (_BYTE)v6 != 34
    && (_BYTE)v6 != 96
    && (_BYTE)v6 != 40
    && (_BYTE)v6 != 41
    && (_BYTE)v6 != 43
    && (_BYTE)v6 != 45
    && (_BYTE)v6 != 35
    && (_BYTE)v6 != 36
    && (_BYTE)v6 != 91
    && (_BYTE)v6 != 93 )
    goto LABEL_34;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047DC80) --------------------------------------------------------
void __thiscall GameFrameWork::AddGMUserChat(GameFrameWork *this, char *pcText)
{
  ChatDisplayWin2::AddGMNormalChat(this->m_pkChatDisplayWin, pcText);
}

//----- (0047DC90) --------------------------------------------------------
void __thiscall GameFrameWork::AddGMOtherUserChat(GameFrameWork *this, char *pcText)
{
  ChatDisplayWin2::AddGMOtherNormalChat(this->m_pkChatDisplayWin, pcText);
}

//----- (0047DCA0) --------------------------------------------------------
void __thiscall GameFrameWork::AddAnnounceMsg(GameFrameWork *this, char *pxText, D3DXCOLOR TextColor)
{
  AnnounceWin::AddText(this->m_pkAnnounceWin, pxText, &TextColor, 0, 0.0);
}

//----- (0047DCD0) --------------------------------------------------------
void __thiscall GameFrameWork::AddSysMsg(GameFrameWork *this, const char *pcText)
{
  GameFrameWork *v2; // esi@1
  ChatDisplayWin2 *v3; // ecx@1
  ChatDisplayWin *v4; // ecx@3

  v2 = this;
  v3 = this->m_pkChatDisplayWin;
  if ( v3 )
    ChatDisplayWin2::AddSystemChat(v3, pcText);
  v4 = (ChatDisplayWin *)v2->m_pkSysMsgDisplayWin;
  if ( v4 )
    ChatDisplayWin::AddSystemChat(v4, pcText);
}

//----- (0047DD00) --------------------------------------------------------
void __thiscall GameFrameWork::AddBattleMsg(GameFrameWork *this, char *pcText)
{
  ChatDisplayWin *v2; // ecx@1

  v2 = (ChatDisplayWin *)this->m_pkSysMsgDisplayWin;
  if ( v2 )
    ChatDisplayWin::AddBattleChat(v2, pcText);
}

//----- (0047DD20) --------------------------------------------------------
void __cdecl GameFrameWork::VaAddSysMsg(GameFrameWork *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // ecx@1
  ChatDisplayWin *v3; // ecx@3
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v5; // [sp+104h] [bp-4h]@1
  int v6; // [sp+108h] [bp+0h]@1
  char ap; // [sp+118h] [bp+10h]@0

  v5 = (unsigned int)&v6 ^ __security_cookie;
  vsprintf(str, pcFormat, &ap);
  v2 = this->m_pkChatDisplayWin;
  if ( v2 )
    ChatDisplayWin2::AddSystemChat(v2, str);
  v3 = (ChatDisplayWin *)this->m_pkSysMsgDisplayWin;
  if ( v3 )
    ChatDisplayWin::AddSystemChat(v3, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (0047DD90) --------------------------------------------------------
void __thiscall GameFrameWork::AddAuthorMsg(GameFrameWork *this, char *pcText)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  ChatDisplayWin2::AddAuthorChat(this->m_pkChatDisplayWin, pcText);
  ChatDisplayWin::AddAuthorChat(&v2->m_pkSysMsgDisplayWin->baseclass_0, pcText);
}

//----- (0047DDC0) --------------------------------------------------------
bool __usercall IsChatCommandPrefix<al>(char *pcText<esi>, int *iPrefixLen)
{
  bool result; // al@3

  if ( IsDBCSLeadByte(*pcText) || *pcText != 47 )
  {
    result = 0;
  }
  else
  {
    *iPrefixLen = 1;
    result = 1;
  }
  return result;
}

//----- (0047DDF0) --------------------------------------------------------
void __usercall StrCopyToSpace(char *pcDest<ecx>, char *pcSrc<eax>, int *iCount<ebx>)
{
  char *v3; // edi@1
  char *v4; // esi@1
  char v5; // al@3

  v3 = pcDest;
  v4 = pcSrc;
  *iCount = 0;
  if ( pcDest )
  {
    if ( pcSrc )
    {
      v5 = *pcSrc;
      if ( v5 )
      {
        if ( v5 != 32 )
        {
          do
          {
            if ( !v5 )
              break;
            if ( IsDBCSLeadByte(v5) )
            {
              *v3 = *v4;
              v3[1] = v4[1];
              v3 += 2;
              v4 += 2;
              *iCount += 2;
            }
            else
            {
              *v3++ = *v4++;
              ++*iCount;
            }
            v5 = *v4;
          }
          while ( *v4 != 32 );
        }
      }
    }
  }
}

//----- (0047DE50) --------------------------------------------------------
bool __usercall IsAllSpace<al>(char *pcSrc<ecx>)
{
  char v1; // al@2

  if ( pcSrc )
  {
    v1 = *pcSrc;
    if ( *pcSrc )
    {
      while ( v1 == 32 )
      {
        v1 = (pcSrc++)[1];
        if ( !v1 )
          return 1;
      }
    }
  }
  return 0;
}

//----- (0047DE80) --------------------------------------------------------
bool __usercall GetShisperNameStrLen<al>(int *iCount<ecx>, char *pcText)
{
  char *v2; // eax@1
  int *v3; // ebx@1
  bool result; // al@5
  char acName[256]; // [sp+4h] [bp-104h]@5
  unsigned int v6; // [sp+104h] [bp-4h]@1
  int v7; // [sp+108h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = pcText;
  v3 = iCount;
  if ( pcText && *pcText )
  {
    if ( *pcText == 32 )
    {
      do
        ++v2;
      while ( *v2 == 32 );
    }
    *iCount = 0;
    StrCopyToSpace(acName, v2, iCount);
    ++*v3;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047DEF0) --------------------------------------------------------
bool __usercall IsValidShisperChat<al>(char *pcText<ecx>)
{
  char *v1; // esi@1
  bool result; // al@8
  int iCount; // [sp+4h] [bp-108h]@6
  char acName[256]; // [sp+8h] [bp-104h]@6
  unsigned int v5; // [sp+108h] [bp-4h]@1
  int v6; // [sp+10Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = pcText;
  if ( !pcText || !*pcText )
    goto LABEL_12;
  if ( *pcText == 32 )
  {
    do
      ++v1;
    while ( *v1 == 32 );
  }
  if ( *v1 && (iCount = 0, StrCopyToSpace(acName, v1, &iCount), iCount) && v1[iCount] )
    result = 1;
  else
LABEL_12:
    result = 0;
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047DF70) --------------------------------------------------------
bool __usercall IsShisperChat<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@2

  if ( !pcText || strncmp(pcText, "w ", 2u) && strncmp(pcText, "W ", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047DFB0) --------------------------------------------------------
bool __usercall IsVote<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@2

  if ( !pcText || strncmp(pcText, "v ", 2u) && strncmp(pcText, "V ", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047DFF0) --------------------------------------------------------
void __thiscall GameFrameWork::GetNameInStr(GameFrameWork *this, char *pcReturnID, char *pcInputStr)
{
  char v3; // ST0C_1@1
  char *v4; // esi@6
  unsigned int iCount; // [sp+4h] [bp-4h]@1

  v3 = *pcInputStr;
  iCount = 0;
  if ( !IsDBCSLeadByte(v3) && *pcInputStr == 47 )
  {
    if ( pcInputStr == (char *)-1 || strncmp(pcInputStr + 1, "w ", 2u) && strncmp(pcInputStr + 1, "W ", 2u) )
    {
      if ( strncmp(pcInputStr + 1, "friendship", 0xAu) )
        return;
      v4 = pcInputStr + 11;
    }
    else
    {
      v4 = pcInputStr + 2;
    }
    if ( *v4 )
    {
      for ( ; *v4 == 32; ++v4 )
        ;
      StrCopyToSpace(pcReturnID, v4, (int *)&iCount);
      if ( iCount )
      {
        if ( iCount <= 0x14 )
          pcReturnID[iCount] = 0;
      }
    }
  }
}

//----- (0047E0A0) --------------------------------------------------------
void __thiscall GameFrameWork::FilteringWithoutID(GameFrameWork *this, char *pcText, char *pcCharID)
{
  char *v3; // esi@1
  GameFrameWork *v4; // ebx@1
  char *v5; // eax@3
  int v6; // edx@3
  char v7; // cl@4
  unsigned int v8; // ebx@5
  int v9; // esi@6
  char *last; // [sp+Ch] [bp-10Ch]@1
  int iAllStrLen; // [sp+10h] [bp-108h]@1
  char acCharName[256]; // [sp+14h] [bp-104h]@1
  unsigned int v13; // [sp+114h] [bp-4h]@1
  int v14; // [sp+118h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = pcCharID;
  v4 = this;
  last = pcCharID;
  memset(acCharName, 0, 0x100u);
  iAllStrLen = strlen(pcText);
  if ( !pcCharID )
  {
    GameFrameWork::GetNameInStr(v4, acCharName, pcText);
    last = acCharName;
    v3 = acCharName;
  }
  v5 = v3;
  v6 = (int)(v3 + 1);
  do
    v7 = *v5++;
  while ( v7 );
  v8 = (unsigned int)&v5[-v6];
  if ( v5 != (char *)v6 )
  {
    v9 = 0;
    if ( (signed int)(v8 + iAllStrLen) > 0 )
    {
      while ( strncmp(&pcText[v9], last, v8) )
      {
        ++v9;
        if ( v9 >= (signed int)(v8 + iAllStrLen) )
          goto LABEL_11;
      }
      iAllStrLen = v8 + v9;
    }
LABEL_11:
    TextFilterTable::FilterSlander(&pcText[iAllStrLen]);
    pcText[iAllStrLen] = 0;
    sprintf(pcText, "%s %s");
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E1A0) --------------------------------------------------------
bool __usercall IsPartyChat<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@3

  if ( strncmp(pcText, "p ", 2u) && strncmp(pcText, "P ", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047E1E0) --------------------------------------------------------
bool __usercall IsGuildChat<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@3

  if ( strncmp(pcText, "g ", 2u) && strncmp(pcText, "G ", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047E220) --------------------------------------------------------
bool __usercall IsGuildAcademyChat<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@3

  if ( strncmp(pcText, "a ", 2u) && strncmp(pcText, "A ", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047E260) --------------------------------------------------------
bool __usercall IsRaidChat<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@3

  if ( strncmp(pcText, "f ", 2u) && strncmp(pcText, "F ", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047E2A0) --------------------------------------------------------
bool __usercall isreplyWhisperChat<al>(char *pcText<esi>, int *iTextLen<edi>)
{
  bool result; // al@4

  if ( strncmp(pcText, "r ", 2u) && strncmp(pcText, "R ", 2u) )
  {
    if ( strncmp(pcText, "¤¡ ", 3u) )
    {
      result = 0;
    }
    else
    {
      *iTextLen = 3;
      result = 1;
    }
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047E300) --------------------------------------------------------
bool __usercall IsShoutChat<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@3

  if ( strncmp(pcText, "s ", 2u) && strncmp(pcText, "S ", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047E340) --------------------------------------------------------
bool __usercall IsNormalChat<al>(char *pcText<esi>, int *iTextLen)
{
  bool result; // al@3

  if ( strncmp(pcText, "n", 2u) && strncmp(pcText, "N", 2u) )
  {
    result = 0;
  }
  else
  {
    *iTextLen = 2;
    result = 1;
  }
  return result;
}

//----- (0047E380) --------------------------------------------------------
bool __thiscall GameFrameWork::DecodingClientOnlyChat(GameFrameWork *this, char *pcText)
{
  return 0;
}

//----- (0047E390) --------------------------------------------------------
bool __thiscall GameFrameWork::DecodingDebugChat(GameFrameWork *this, char *pcText)
{
  return 0;
}

//----- (0047E3A0) --------------------------------------------------------
void __thiscall GameFrameWork::AddSChatItemLink(GameFrameWork *this, int eType, SHINE_ITEM_STRUCT *pItem)
{
  ChatDisplayWin2::AddChatBoardFlexIItemLink(this->m_pkChatDisplayWin, (ChatBoardFlex::Type)eType, pItem);
}

//----- (0047E3B0) --------------------------------------------------------
void __thiscall ChatCommandList::InitPos(ChatCommandList *this)
{
  this->m_nCurChatComNum = (signed int)((char *)this->m_VectorChatCommand.baseclass_0._Mylast
                                      - *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0])
                         / 28;
}

//----- (0047E3D0) --------------------------------------------------------
void __thiscall GameFrameWork::AddUserChat(GameFrameWork *this, char *pcText, char kChatID)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    ChatDisplayWin2::AddNormalChat(this->m_pkChatDisplayWin, pcText, kChatID);
    ChatDisplayWin::AddNormalChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, pcText, kChatID);
  }
}

//----- (0047E410) --------------------------------------------------------
void __thiscall GameFrameWork::AddOtherUserChat(GameFrameWork *this, char *pcText, char kChatID)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    ChatDisplayWin2::AddOtherNormalChat(this->m_pkChatDisplayWin, pcText, kChatID);
    ChatDisplayWin::AddOtherNormalChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, pcText, kChatID);
  }
}

//----- (0047E450) --------------------------------------------------------
void __thiscall GameFrameWork::AddUserChat(GameFrameWork *this, char *pcText)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    ChatDisplayWin2::AddNormalChat(this->m_pkChatDisplayWin, pcText);
    ChatDisplayWin::AddNormalChat(&v2->m_pkSysMsgDisplayWin->baseclass_0, pcText);
  }
}

//----- (0047E490) --------------------------------------------------------
void __thiscall GameFrameWork::AddOtherUserChat(GameFrameWork *this, char *pcText)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    ChatDisplayWin2::AddOtherNormalChat(this->m_pkChatDisplayWin, pcText);
    ChatDisplayWin::AddOtherNormalChat(&v2->m_pkSysMsgDisplayWin->baseclass_0, pcText);
  }
}

//----- (0047E4D0) --------------------------------------------------------
void __thiscall GameFrameWork::AddPartyChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("[%s] : %s");
    ChatDisplayWin2::AddPartyChat(v3->m_pkChatDisplayWin, v4);
    v5 = fs("[%s] : %s");
    ChatDisplayWin::AddPartyChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E570) --------------------------------------------------------
void __thiscall GameFrameWork::AddRaidChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char acName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("[%s] : %s");
    ChatDisplayWin2::AddRaidChat(v3->m_pkChatDisplayWin, v4);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E5F0) --------------------------------------------------------
void __thiscall GameFrameWork::AddOtherRaidChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char acName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("{color,#FFFF00,[%s]} : %s");
    ChatDisplayWin2::AddOtherRaidChat(v3->m_pkChatDisplayWin, v4);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E670) --------------------------------------------------------
void __thiscall GameFrameWork::AddGuildChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("[%s] : %s");
    ChatDisplayWin2::AddGuildChat(v3->m_pkChatDisplayWin, v4);
    v5 = fs("[%s] : %s");
    ChatDisplayWin::AddGuildChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E710) --------------------------------------------------------
void __thiscall GameFrameWork::AddOtherPartyChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("{color,#FFFF00,[%s]} : %s");
    ChatDisplayWin2::AddOtherPartyChat(v3->m_pkChatDisplayWin, v4);
    v5 = fs("{color,#FFFF00,[%s]} : %s");
    ChatDisplayWin::AddPartyChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E7B0) --------------------------------------------------------
void __thiscall GameFrameWork::AddOtherGuildChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("{color,#FFFF00,[%s]} : %s");
    ChatDisplayWin2::AddOtherGuildChat(v3->m_pkChatDisplayWin, v4);
    v5 = fs("{color,#FFFF00,[%s]} : %s");
    ChatDisplayWin::AddGuildChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E850) --------------------------------------------------------
void __thiscall GameFrameWork::AddGuildAcademyChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("[%s] : %s");
    ChatDisplayWin2::AddGuildAcademyChat(v3->m_pkChatDisplayWin, v4);
    v5 = fs("[%s] : %s");
    ChatDisplayWin::AddGuildAcademyChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E8F0) --------------------------------------------------------
void __thiscall GameFrameWork::AddOtherGuildAcademyChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    v4 = fs("{color,#FFFF00,[%s]} : %s");
    ChatDisplayWin2::AddOtherGuildAcademyChat(v3->m_pkChatDisplayWin, v4);
    v5 = fs("{color, #FFFF00,[%s]} : %s");
    ChatDisplayWin::AddGuildAcademyChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047E990) --------------------------------------------------------
void __thiscall GameFrameWork::AddWhisperChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // ebx@1
  char *v4; // eax@3
  char *v5; // eax@3
  char acName[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  if ( !byte_B5BB28 )
  {
    *(_QWORD *)acName = *(_QWORD *)&kCharID;
    *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
    acName[20] = 0;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)&kCharID;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
    if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
    {
      v4 = fs("{color,#FFFF00,[From %s]} : %s");
      ChatDisplayWin2::AddWhisperChat(v3->m_pkChatDisplayWin, v4);
      v5 = fs("{color,#FFFF00,[From %s]} : %s");
      ChatDisplayWin::AddWhisperChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// B5BB28: using guessed type char byte_B5BB28;

//----- (0047EA60) --------------------------------------------------------
void __thiscall GameFrameWork::AddWhisperChat_To(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // ebx@1
  char *v4; // eax@3
  char *v5; // eax@3
  char acName[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  if ( !byte_B5BB28 )
  {
    *(_QWORD *)acName = *(_QWORD *)&kCharID;
    *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
    acName[20] = 0;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)&kCharID;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
    if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
    {
      v4 = fs("[To %s] : %s");
      ChatDisplayWin2::AddWhisperChat(v3->m_pkChatDisplayWin, v4);
      v5 = fs("[To %s] : %s");
      ChatDisplayWin::AddWhisperChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// B5BB28: using guessed type char byte_B5BB28;

//----- (0047EB30) --------------------------------------------------------
void __thiscall GameFrameWork::AddShoutChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  char *v5; // eax@4
  char *v6; // eax@5
  char *v7; // [sp-Ch] [bp-30h]@3
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v9; // [sp+20h] [bp-4h]@1
  int v10; // [sp+24h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_DWORD *)&acName[8] = *(_DWORD *)&kCharID.n5_name[8];
  *(_QWORD *)&acName[12] = *(_QWORD *)&kCharID.n5_name[12];
  acName[20] = 0;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
  {
    if ( strcmp(acName, (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)()) )
    {
      v5 = fs("{color,#FFFF00,[%s]} : %s");
      ChatDisplayWin2::AddShoutChat(v3->m_pkChatDisplayWin, v5);
      v7 = "{color,#FFFF00,[%s]} : %s";
    }
    else
    {
      v4 = fs("[%s] : %s");
      ChatDisplayWin2::AddShoutChat(v3->m_pkChatDisplayWin, v4);
      v7 = "[%s] : %s";
    }
    v6 = fs(v7);
    ChatDisplayWin::AddShoutChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v6);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0047EC30) --------------------------------------------------------
void __thiscall GameFrameWork::AddGMWhisperChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v7; // [sp+20h] [bp-4h]@1
  int v8; // [sp+24h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  if ( !byte_B5BB28 )
  {
    *(_QWORD *)acName = *(_QWORD *)&kCharID;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)&kCharID;
    *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
    acName[20] = 0;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
    v4 = fs("[From %s] : %s");
    ChatDisplayWin2::AddGMWhisperChat(v3->m_pkChatDisplayWin, v4);
    v5 = fs("[From %s] : %s");
    ChatDisplayWin::AddGMWhisperChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v5);
  }
}
// A85C00: using guessed type int __security_cookie;
// B5BB28: using guessed type char byte_B5BB28;

//----- (0047ECF0) --------------------------------------------------------
void __thiscall GameFrameWork::AddGMWhisperChat_To(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // ebx@1
  char *v4; // eax@2
  char acName[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v6; // [sp+20h] [bp-4h]@1
  int v7; // [sp+24h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v3 = this;
  if ( !byte_B5BB28 )
  {
    *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_QWORD *)acName = *(_QWORD *)&kCharID;
    *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
    acName[20] = 0;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)&kCharID;
    *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
    v4 = fs("[To %s] : %s");
    ChatDisplayWin2::AddGMWhisperChat(v3->m_pkChatDisplayWin, v4);
  }
}
// A85C00: using guessed type int __security_cookie;
// B5BB28: using guessed type char byte_B5BB28;

//----- (0047ED90) --------------------------------------------------------
void __thiscall GameFrameWork::AddGMShoutChat(GameFrameWork *this, Name5 kCharID, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1
  char acName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)acName = *(_QWORD *)&kCharID;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kCharID.n5_name[16];
  acName[20] = 0;
  v4 = fs("{color,#FFFF00,[%s]} : %s");
  ChatDisplayWin2::AddGMShoutChat(v3->m_pkChatDisplayWin, v4);
}
// A85C00: using guessed type int __security_cookie;

//----- (0047EE00) --------------------------------------------------------
void __thiscall GameFrameWork::SetSaveChatComList(GameFrameWork *this, bool bSave)
{
  this->m_kChatComList.m_bIsSaveCommand = bSave;
}

//----- (0047EE10) --------------------------------------------------------
const char *__thiscall ChatCommandList::GetUpCommand(ChatCommandList *this)
{
  bool v1; // sf@1
  int v2; // esi@3
  int v3; // edi@3
  const char *result; // eax@4

  v1 = this->m_nCurChatComNum-- - 1 < 0;
  if ( v1 )
    this->m_nCurChatComNum = 0;
  v2 = this->m_nCurChatComNum;
  v3 = *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 >= (signed int)((char *)this->m_VectorChatCommand.baseclass_0._Mylast
                        - *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0])
           / 28 )
  {
    result = 0;
  }
  else
  {
    result = (const char *)(v3 + 28 * v2);
    if ( *(_DWORD *)(v3 + 28 * v2 + 20) >= 0x10u )
      result = *(const char **)result;
  }
  return result;
}

//----- (0047EE60) --------------------------------------------------------
const char *__thiscall ChatCommandList::GetDownCommand(ChatCommandList *this)
{
  int v1; // edi@1
  int v2; // eax@1
  int v3; // ecx@3
  const char *result; // eax@4

  ++this->m_nCurChatComNum;
  v1 = *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0];
  v2 = (signed int)((char *)this->m_VectorChatCommand.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0])
     / 28;
  if ( this->m_nCurChatComNum >= v2 )
    this->m_nCurChatComNum = v2 - 1;
  v3 = this->m_nCurChatComNum;
  if ( v3 <= -1 )
  {
    result = 0;
  }
  else
  {
    result = (const char *)(v1 + 28 * v3);
    if ( *(_DWORD *)(v1 + 28 * v3 + 20) >= 0x10u )
      result = *(const char **)result;
  }
  return result;
}

//----- (0047EEB0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateCheckTab(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  ChatDisplayWin2 *v2; // ecx@1
  char *v3; // eax@4
  int v4; // eax@4
  char *v5; // eax@5

  v1 = this;
  v2 = this->m_pkChatDisplayWin;
  if ( v2 && ChatDisplayWin2::IsDuringEdit(v2) && !ChatDisplayWin2::IsItemLinkInfo(v1->m_pkChatDisplayWin) )
  {
    v3 = ChatDisplayWin2::GetCurrentChatText(v1->m_pkChatDisplayWin);
    strchr(v3, 9);
    if ( v4 )
    {
      ChatDisplayWin2::ChatStart(v1->m_pkChatDisplayWin, &byte_98B35E);
      v5 = TextData3::Get(0xE45192Du);
      GameFrameWork::AddSysMsg(v1, v5);
    }
  }
}

//----- (0047EF20) --------------------------------------------------------
bool __usercall IsChatCommand<al>(unsigned int eTextID<eax>, char *pcChatText, int *iTextLen)
{
  char *v3; // eax@1
  bool result; // al@2
  char *v5; // ecx@4
  int v6; // esi@4
  char v7; // dl@5

  v3 = TextData::Get(eTextID);
  if ( v3 && strcmp(v3, (const char *)&unk_98B35F) )
  {
    v5 = v3;
    v6 = (int)(v3 + 1);
    do
      v7 = *v5++;
    while ( v7 );
    *iTextLen = (int)&v5[-v6];
    result = strncmp(pcChatText, v3, (unsigned int)&v5[-v6]) == 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0047EFA0) --------------------------------------------------------
bool __thiscall GameFrameWork::SetPrisonInfo(GameFrameWork *this, char *pcText, bool bAdd)
{
  char *v3; // eax@2
  int v4; // edx@2
  char v5; // cl@3
  char v6; // cl@6
  char *i; // esi@7
  char v8; // al@9
  int v9; // ecx@9
  char *v10; // edx@10
  char v11; // al@15
  int v12; // ecx@15
  char *v13; // edx@16
  int v14; // eax@19
  unsigned __int16 v15; // di@19
  char *v16; // eax@23
  char v18; // al@27
  int v19; // ecx@27
  char *v20; // edx@28
  char *v21; // eax@31
  char v22; // cl@32
  char *v23; // eax@36
  char v24; // cl@37
  int v25; // eax@40
  _BYTE v26[20]; // [sp-20h] [bp-44Ch]@40
  unsigned int v27; // [sp-4h] [bp-430h]@21
  GameFrameWork *v28; // [sp+10h] [bp-41Ch]@1
  Name5 thisa; // [sp+14h] [bp-418h]@40
  char time[255]; // [sp+28h] [bp-404h]@15
  char charID[255]; // [sp+128h] [bp-304h]@9
  char sRemark[255]; // [sp+228h] [bp-204h]@36
  char sReason[255]; // [sp+328h] [bp-104h]@27
  unsigned int v34; // [sp+428h] [bp-4h]@1
  int v35; // [sp+42Ch] [bp+0h]@1

  v34 = (unsigned int)&v35 ^ __security_cookie;
  v28 = this;
  if ( bAdd )
  {
    v3 = TextData::Get(0xA18DC7BFu);
    v4 = (int)(v3 + 1);
    do
      v5 = *v3++;
    while ( v5 );
  }
  else
  {
    v3 = TextData::Get(0x34350B0Eu);
    v4 = (int)(v3 + 1);
    do
      v6 = *v3++;
    while ( v6 );
  }
  for ( i = &pcText[(_DWORD)&v3[-v4]]; *i == 32; ++i )
    ;
  charID[0] = 0;
  memset(&charID[1], 0, 0xFEu);
  v8 = *i;
  v9 = 0;
  if ( *i != 32 )
  {
    v10 = (char *)(charID - i);
    while ( v8 )
    {
      i[(_DWORD)v10] = v8;
      v8 = (i++)[1];
      ++v9;
      if ( v8 == 32 )
        goto LABEL_13;
    }
    v27 = -434300655;
    goto LABEL_23;
  }
LABEL_13:
  for ( charID[v9] = 0; *i == 32; ++i )
    ;
  time[0] = 0;
  memset(&time[1], 0, 0xFEu);
  v11 = *i;
  v12 = 0;
  if ( *i != 32 )
  {
    v13 = (char *)(time - i);
    while ( v11 )
    {
      i[(_DWORD)v13] = v11;
      v11 = (i++)[1];
      ++v12;
      if ( v11 == 32 )
        goto LABEL_19;
    }
    v27 = -434235119;
    goto LABEL_23;
  }
LABEL_19:
  time[v12] = 0;
  v14 = atoi(time);
  v15 = v14;
  if ( bAdd && !v14 )
  {
    v27 = -434169583;
LABEL_23:
    v16 = TextData::Get(v27);
    MsgBox::Modeless(MSGBOX_OK, v16);
    return 0;
  }
  sprintf(time, "%i");
  for ( ; *i == 32; ++i )
    ;
  sReason[0] = 0;
  memset(&sReason[1], 0, 0xFEu);
  v18 = *i;
  v19 = 0;
  if ( *i != 32 )
  {
    v20 = (char *)(sReason - i);
    while ( v18 )
    {
      i[(_DWORD)v20] = v18;
      v18 = (i++)[1];
      ++v19;
      if ( v18 == 32 )
        goto LABEL_31;
    }
    v27 = -434104047;
    goto LABEL_23;
  }
LABEL_31:
  v21 = sReason;
  sReason[v19] = 0;
  do
    v22 = *v21++;
  while ( v22 );
  if ( v21 == &sReason[1] )
  {
    v27 = -434038511;
    goto LABEL_23;
  }
  sRemark[0] = 0;
  memset(&sRemark[1], 0, 0xFEu);
  sprintf(sRemark, "%s");
  v23 = sRemark;
  do
    v24 = *v23++;
  while ( v24 );
  if ( v23 == &sRemark[1] )
  {
    v27 = -433972975;
    goto LABEL_23;
  }
  Name5::Name5(&thisa, charID);
  *(_QWORD *)v26 = *(_QWORD *)v25;
  *(_QWORD *)&v26[8] = *(_QWORD *)(v25 + 8);
  *(_DWORD *)&v26[16] = *(_DWORD *)(v25 + 16);
  if ( bAdd )
    GameFrameWork::NcPrisonAddGMReq(v28, *(Name5 *)v26, v15, sReason, sRemark);
  else
    GameFrameWork::NcPrisonAlterGMReq(v28, *(Name5 *)v26, v15, sReason, sRemark);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0047F240) --------------------------------------------------------
char *__thiscall GameFrameWork::SmartWhisper::GetLast(GameFrameWork::SmartWhisper *this)
{
  char *result; // eax@1

  result = (char *)this->m_kRecentWhisperList.baseclass_0.baseclass_0._Mysize;
  if ( result )
  {
    this->m_uiCurrentPos = (unsigned int)(result - 1);
    result = (char *)(*(_DWORD *)(*(_DWORD *)&this->m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                + 4)
                    + 8);
    if ( *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&this->m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                               + 4)
                   + 28) >= 0x10u )
      result = *(char **)result;
  }
  return result;
}

//----- (0047F260) --------------------------------------------------------
char *__thiscall GameFrameWork::SmartWhisper::GetPrev(GameFrameWork::SmartWhisper *this)
{
  char *result; // eax@2
  unsigned int v2; // eax@3
  unsigned int v3; // edx@5
  int i; // eax@5

  if ( this->m_kRecentWhisperList.baseclass_0.baseclass_0._Mysize )
  {
    v2 = this->m_uiCurrentPos;
    if ( v2 )
      this->m_uiCurrentPos = v2 - 1;
    v3 = this->m_uiCurrentPos;
    for ( i = **(_DWORD **)&this->m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
          v3;
          i = *(_DWORD *)i )
      --v3;
    result = fs("%s");
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0047F2A0) --------------------------------------------------------
char *__thiscall GameFrameWork::SmartWhisper::GetNext(GameFrameWork::SmartWhisper *this)
{
  unsigned int v1; // edx@1
  char *result; // eax@2
  unsigned int v3; // eax@3
  unsigned int v4; // edx@5
  int i; // eax@5

  v1 = this->m_kRecentWhisperList.baseclass_0.baseclass_0._Mysize;
  if ( v1 )
  {
    v3 = this->m_uiCurrentPos + 1;
    if ( v3 < v1 )
      this->m_uiCurrentPos = v3;
    v4 = this->m_uiCurrentPos;
    for ( i = **(_DWORD **)&this->m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
          v4;
          i = *(_DWORD *)i )
      --v4;
    result = fs("%s");
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0047F2E0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateSmartReply(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  char *v2; // esi@2
  unsigned int v3; // eax@4
  int v4; // eax@5
  char *v5; // eax@8

  v1 = this;
  if ( ChatDisplayWin2::IsDuringEdit(this->m_pkChatDisplayWin) )
  {
    v2 = ChatDisplayWin2::GetCurrentChatText(v1->m_pkChatDisplayWin);
    if ( !_strcmpi(v2, "/r ") || !strcmp(v2, "/¤¡ ") )
    {
      v3 = v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0._Mysize;
      if ( v3 )
      {
        v1->m_kSmartWhisper.m_uiCurrentPos = v3 - 1;
        v4 = *(_DWORD *)(*(_DWORD *)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                       + 4)
           + 8;
        if ( *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                   + 4)
                       + 28) >= 0x10u )
          v4 = *(_DWORD *)v4;
        if ( v4 )
        {
          v5 = fs("/w %s ");
          ChatDisplayWin2::ChatStart(v1->m_pkChatDisplayWin, v5);
        }
      }
    }
  }
}

//----- (0047F390) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateSmartWhisper(GameFrameWork *this)
{
  GameFrameWork *v1; // ebx@1
  char *v2; // eax@4
  int v3; // edx@4
  char v4; // cl@5
  GameFrameWork::SmartWhisper::State v5; // eax@8
  char *v6; // esi@9
  unsigned int v7; // eax@11
  int v8; // eax@12
  char *v9; // eax@15
  int v10; // ecx@18
  char v11; // al@18
  char *v12; // eax@24
  unsigned int v13; // eax@28
  char *v14; // [sp-Ch] [bp-14h]@20

  v1 = this;
  if ( !ChatDisplayWin2::IsDuringEdit(this->m_pkChatDisplayWin) )
  {
    v1->m_kSmartWhisper.m_eState = 0;
    return;
  }
  if ( v1->m_kSmartWhisper.m_eState == 2 )
  {
    v2 = ChatDisplayWin2::GetCurrentChatText(v1->m_pkChatDisplayWin);
    v3 = (int)(v2 + 1);
    do
      v4 = *v2++;
    while ( v4 );
    if ( v2 == (char *)v3 )
      v1->m_kSmartWhisper.m_eState = 0;
  }
  v5 = v1->m_kSmartWhisper.m_eState;
  if ( !v5 )
  {
    v6 = ChatDisplayWin2::GetCurrentChatText(v1->m_pkChatDisplayWin);
    if ( !_strcmpi(v6, "/w ") || !strcmp(v6, "/¤¸ ") )
    {
      v7 = v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0._Mysize;
      if ( v7 )
      {
        v1->m_kSmartWhisper.m_uiCurrentPos = v7 - 1;
        v8 = *(_DWORD *)(*(_DWORD *)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                       + 4)
           + 8;
        if ( *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                   + 4)
                       + 28) >= 0x10u )
          v8 = *(_DWORD *)v8;
        if ( v8 )
        {
          v9 = fs("/w %s ");
          ChatDisplayWin2::ChatStart(v1->m_pkChatDisplayWin, v9);
          v1->m_kSmartWhisper.m_eState = 1;
        }
      }
    }
    return;
  }
  if ( v5 != 1 )
    return;
  v10 = g_pkKeyboard;
  v11 = *(_BYTE *)(g_pkKeyboard + 48);
  if ( v11 & 2 && !(*(_BYTE *)(g_pkKeyboard + 80) & 2) )
  {
    GameFrameWork::SmartWhisper::GetPrev(&v1->m_kSmartWhisper);
    v14 = "/w %s ";
LABEL_24:
    v12 = fs(v14);
    ChatDisplayWin2::ChatStart(v1->m_pkChatDisplayWin, v12);
    v10 = g_pkKeyboard;
    goto LABEL_25;
  }
  if ( v11 & 0x40 && !(*(_BYTE *)(g_pkKeyboard + 80) & 0x40) )
  {
    GameFrameWork::SmartWhisper::GetNext(&v1->m_kSmartWhisper);
    v14 = "/w %s ";
    goto LABEL_24;
  }
LABEL_25:
  if ( *(_BYTE *)(v10 + 34) & 0x40 && !(*(_BYTE *)(v10 + 66) & 0x40) )
  {
    ChatDisplayWin2::ChatStart(v1->m_pkChatDisplayWin, "/w ");
    v1->m_kSmartWhisper.m_eState = 2;
    v10 = g_pkKeyboard;
  }
  v13 = 0;
  while ( !*(_BYTE *)(v10 + v13 + 33) )
  {
    ++v13;
    if ( v13 >= 0x20 )
      return;
  }
  if ( !(*(_BYTE *)(v10 + 48) & 0x42) && !(*(_BYTE *)(v10 + 34) & 0x40) )
    v1->m_kSmartWhisper.m_eState = 2;
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (0047F560) --------------------------------------------------------
bool __thiscall GameFrameWork::DecodingAuthorChat(GameFrameWork *this, char *pcText)
{
  char *v2; // esi@1
  GameFrameWork *v3; // ebx@1
  char *v4; // esi@3
  BYTE v5; // al@3
  char *i; // esi@16
  char v8; // al@21
  BYTE v9; // al@31
  BYTE v10; // al@44
  BYTE v11; // al@54
  BYTE v12; // al@64
  char *j; // esi@77
  char *v14; // eax@110
  int v15; // edx@110
  char v16; // cl@111
  char *v17; // eax@112
  char *v18; // eax@115
  int v19; // edx@115
  char v20; // cl@116
  char *v21; // eax@117
  PgWin *v22; // eax@124
  int v23; // eax@136
  float v24; // esi@139
  int v25; // edi@139
  BYTE v26; // al@139
  int v27; // eax@147
  ScenarioMgr *v28; // eax@153
  Name3 *v29; // eax@162
  int v30; // ecx@162
  int v31; // eax@163
  char *v32; // eax@163
  int v33; // ecx@166
  char *v34; // eax@193
  char *v35; // eax@193
  NiNode *v36; // eax@193
  CharDecal *v37; // eax@193
  CharDecal *v38; // esi@193
  NiPoint3 *v39; // eax@194
  float v40; // ecx@194
  float v41; // edx@194
  float v42; // eax@194
  int v43; // eax@197
  unsigned int v44; // ecx@197
  const char *v45; // esi@204
  unsigned __int16 v46; // ax@204
  char *v47; // eax@207
  char *v48; // eax@210
  char *v49; // eax@213
  char *v50; // [sp-4h] [bp-64h]@162
  double v51; // [sp+4h] [bp-5Ch]@79
  int v52; // [sp+Ch] [bp-54h]@79
  float v53; // [sp+10h] [bp-50h]@79
  double v54; // [sp+14h] [bp-4Ch]@79
  NiPoint3 kDir; // [sp+28h] [bp-38h]@162
  NiPoint3 kPos; // [sp+34h] [bp-2Ch]@31
  float fMax; // [sp+40h] [bp-20h]@207
  float fMin; // [sp+44h] [bp-1Ch]@1
  const char *fVal; // [sp+48h] [bp-18h]@94
  char acMapName[13]; // [sp+4Ch] [bp-14h]@162
  unsigned int v61; // [sp+5Ch] [bp-4h]@1
  int v62; // [sp+60h] [bp+0h]@1

  v61 = (unsigned int)&v62 ^ __security_cookie;
  v2 = pcText;
  v3 = this;
  if ( IsChatCommand(pcText, 0x9798BBB1u, (int *)&fMin) && v3->m_iAdminLevel >= 100 )
  {
    v4 = &pcText[LODWORD(fMin)];
    v5 = pcText[LODWORD(fMin)];
    if ( pcText[LODWORD(fMin)] == 32 )
      goto LABEL_217;
    while ( v5 )
    {
      if ( IsDBCSLeadByte(v5) && v4[1] )
        v4 += 2;
      else
        ++v4;
      v5 = *v4;
      if ( *v4 == 32 )
        goto LABEL_12;
    }
    if ( *v4 == 32 )
    {
LABEL_217:
      do
LABEL_12:
        ++v4;
      while ( *v4 == 32 );
    }
    GameFrameWork::NcActNoticeCmd(v3, v4);
    return 1;
  }
  if ( !strncmp(pcText, "note", 4u) && v3->m_iAdminLevel >= 100 )
  {
    for ( i = pcText + 4; *i == 32; ++i )
      ;
    GameFrameWork::NcActNoticeCmd(v3, i);
    return 1;
  }
  if ( !strncmp(pcText, "goto", 4u) && v3->m_iAdminLevel >= 100 )
  {
    v8 = *pcText;
    if ( *pcText == 32 )
      goto LABEL_218;
    while ( v8 )
    {
      if ( IsDBCSLeadByte(v8) && v2[1] )
        v2 += 2;
      else
        ++v2;
      v8 = *v2;
      if ( *v2 == 32 )
        goto LABEL_30;
    }
    if ( *v2 == 32 )
    {
LABEL_218:
      do
LABEL_30:
        ++v2;
      while ( *v2 == 32 );
    }
    kPos.x = atof(v2);
    v9 = *v2;
    if ( *v2 == 32 )
      goto LABEL_219;
    while ( v9 )
    {
      if ( IsDBCSLeadByte(v9) && v2[1] )
        v2 += 2;
      else
        ++v2;
      v9 = *v2;
      if ( *v2 == 32 )
        goto LABEL_40;
    }
    if ( *v2 == 32 )
    {
LABEL_219:
      do
LABEL_40:
        ++v2;
      while ( *v2 == 32 );
    }
    kPos.y = atof(v2);
    World::GetAdvGroundPos(&g_kWorld, kPos.x, kPos.y, &kPos);
    GameFrameWork::OnPickGround(v3, &kPos, 1);
  }
  if ( strncmp(v2, "amblight", 8u) || v3->m_iAdminLevel < 100 )
  {
    if ( !strncmp(v2, "fdel", 4u) && v3->m_iAdminLevel >= 100 )
    {
      for ( j = v2 + 4; *j == 32; ++j )
        ;
      LODWORD(fMin) = (char *)&v51 + 4;
      v54 = 0.0;
      v53 = 0.0;
      v52 = 0;
      strncpy((char *)&v51 + 4, j, 0x14u);
      GameFrameWork::NcFriendDelReq(v3, *(Name5 *)((char *)&v51 + 4));
      return 1;
    }
    if ( !strncmp(v2, "action", 6u) && v3->m_iAdminLevel >= 100 )
    {
      GameFrameWork::OpenActionWin(v3);
      return 1;
    }
    if ( !strncmp(v2, "go", 2u) && v3->m_iAdminLevel >= 100 )
    {
      GameFrameWork::OpenGraphicOptionWin(v3);
      return 1;
    }
    if ( !strncmp(v2, "showchr", 7u) && v3->m_iAdminLevel >= 50 )
    {
      g_pkMainChar->m_spScene.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
      return 1;
    }
    if ( !strncmp(v2, "hidechr", 7u) && v3->m_iAdminLevel >= 50 )
    {
      g_pkMainChar->m_spScene.m_pObject->baseclass_0.m_uFlags |= 1u;
      return 1;
    }
    if ( !strncmp(v2, "zoomrate", 8u) && v3->m_iAdminLevel >= 50 )
    {
      fVal = v2 + 8;
      WhileSpace((char **)&fVal);
      fMin = atof(fVal);
      World::SetCameraZoomRatePerTick(&g_kWorld, fMin);
      return 1;
    }
    if ( !strncmp(v2, "killme", 6u) && v3->m_iAdminLevel >= 100 )
      terminate();
    if ( !strncmp(v2, "zoommin", 7u) && v3->m_iAdminLevel >= 50 )
    {
      fVal = v2 + 7;
      WhileSpace((char **)&fVal);
      fMin = atof(fVal);
      World::SetCameraZoomMin(&g_kWorld, fMin);
      return 1;
    }
    if ( !strncmp(v2, "zoommax", 7u) && v3->m_iAdminLevel >= 50 )
    {
      fVal = v2 + 7;
      WhileSpace((char **)&fVal);
      fMin = atof(fVal);
      World::SetCameraZoomMax(&g_kWorld, fMin);
      return 1;
    }
    if ( !strncmp(v2, "ton", 3u) && v3->m_iAdminLevel >= 50 )
    {
      v3->m_bTextEffMgr = 1;
      return 1;
    }
    if ( !strncmp(v2, "toff", 4u) && v3->m_iAdminLevel >= 50 )
    {
      v3->m_bTextEffMgr = 0;
      return 1;
    }
    v14 = TextData::Get(0x34350B0Eu);
    v15 = (int)(v14 + 1);
    do
      v16 = *v14++;
    while ( v16 );
    HIDWORD(v54) = &v14[-v15];
    v17 = TextData::Get(0x34350B0Eu);
    if ( !strncmp(v2, v17, HIDWORD(v54)) && v3->m_iAdminLevel >= 100 )
      return GameFrameWork::SetPrisonInfo(v3, v2, 0);
    v18 = TextData::Get(0xA18DC7BFu);
    v19 = (int)(v18 + 1);
    do
      v20 = *v18++;
    while ( v20 );
    HIDWORD(v54) = &v18[-v19];
    v21 = TextData::Get(0xA18DC7BFu);
    if ( !strncmp(v2, v21, HIDWORD(v54)) && v3->m_iAdminLevel >= 100 )
      return GameFrameWork::SetPrisonInfo(v3, v2, 1);
    if ( strncmp(v2, "GM", 2u) || v3->m_iAdminLevel < 20 )
    {
      if ( strncmp(v2, "ShopWin", 7u) || v3->m_iAdminLevel < 100 )
      {
        if ( !strcmp(v2, "SendDT") && v3->m_iAdminLevel >= 100 )
        {
          GameFrameWork::Send_NC_MISC_PINGTEST_CLIENT_ZONE_DB(v3);
          return 1;
        }
        if ( !strncmp(v2, "timetest", 8u) && v3->m_iAdminLevel >= 100 )
        {
          fVal = v2 + 8;
          WhileSpace((char **)&fVal);
          v23 = atoi(fVal);
          Server::SetTimeTest(&g_kServer, v23 != 0);
          return 1;
        }
        if ( !strncmp(v2, "time", 4u) && v3->m_iAdminLevel >= 100 )
        {
          fVal = v2 + 4;
          WhileSpace((char **)&fVal);
          LODWORD(v24) = fVal;
          v25 = atoi(fVal);
          v26 = *LODWORD(v24);
          if ( *LODWORD(v24) != 32 )
          {
            do
            {
              if ( !v26 )
                break;
              if ( IsDBCSLeadByte(v26) && *(_BYTE *)(LODWORD(v24) + 1) )
                LODWORD(v24) += 2;
              else
                ++LODWORD(v24);
              v26 = *LODWORD(v24);
            }
            while ( *LODWORD(v24) != 32 );
            fVal = (const char *)LODWORD(v24);
          }
          WhileSpace((char **)&fVal);
          v27 = atoi(fVal);
          Server::SetCurrentTime(&g_kServer, v25, v27);
          return 1;
        }
        if ( !strncmp(v2, "onedaytime", 0xAu) && v3->m_iAdminLevel >= 100 )
        {
          fVal = v2 + 10;
          WhileSpace((char **)&fVal);
          fMin = atof(fVal);
          Server::SetOneDayTime(&g_kServer, fMin);
          return 1;
        }
        if ( !strcmp(v2, "run15") && v3->m_iAdminLevel >= 100 )
        {
          v28 = ScenarioMgr::GetScenarioMgr();
          ScenarioMgr::RunScenario(v28, 0xFu, 0, 0);
          return 1;
        }
        if ( !strcmp(v2, "effecton") && v3->m_iAdminLevel >= 50 )
        {
          EffectMgr::s_bEnableEffect = 1;
          return 1;
        }
        if ( !strcmp(v2, "effectoff") && v3->m_iAdminLevel >= 50 )
        {
          EffectMgr::s_bEnableEffect = 0;
          return 1;
        }
        if ( strncmp(v2, "getdir", 6u) || v3->m_iAdminLevel < 100 )
        {
          if ( strncmp(v2, "getpos", 6u) || v3->m_iAdminLevel < 100 )
          {
            if ( !strncmp(v2, "fogon", 5u) && v3->m_iAdminLevel >= 50 )
            {
              World::EnableFog(&g_kWorld, 1);
              return 1;
            }
            if ( !strncmp(v2, "fogoff", 6u) && v3->m_iAdminLevel >= 50 )
            {
              World::EnableFog(&g_kWorld, 0);
              return 1;
            }
            if ( !strncmp(v2, "dlighton", 8u) && v3->m_iAdminLevel >= 50 )
            {
              *(_BYTE *)(dword_B30C0C + 176) = 1;
              return 1;
            }
            if ( !strncmp(v2, "dlightoff", 9u) && v3->m_iAdminLevel >= 50 )
            {
              *(_BYTE *)(dword_B30C0C + 176) = 0;
              return 1;
            }
            if ( !strncmp(v2, "BeautyShop", 0xAu) && v3->m_iAdminLevel >= 100 )
            {
              GameFrameWork::OnGoBeautyShop(v3);
              return 1;
            }
            if ( !strncmp(v2, "showHP", 6u) && v3->m_iAdminLevel >= 50 )
            {
              v3->m_pkTargetWin->m_bShowMobHP = 1;
              return 1;
            }
            if ( !strncmp(v2, "hideHP", 6u) && v3->m_iAdminLevel >= 50 )
            {
              v3->m_pkTargetWin->m_bShowMobHP = 0;
              return 1;
            }
            if ( !strncmp(v2, "OpenKQ", 6u) && v3->m_iAdminLevel >= 100 )
            {
              v22 = (PgWin *)v3->m_pkKingDomQuest;
              goto LABEL_126;
            }
            if ( strncmp(v2, "Decal", 5u) || v3->m_iAdminLevel < 100 )
            {
              if ( strncmp(v2, "rideon", 6u) || v3->m_iAdminLevel < 100 )
              {
                if ( strncmp(v2, "rideoff", 7u) || v3->m_iAdminLevel < 100 )
                {
                  if ( strncmp(v2, "sound", 5u) || v3->m_iAdminLevel < 100 )
                  {
                    if ( strncmp(v2, "sndmin", 6u) || v3->m_iAdminLevel < 100 )
                    {
                      if ( strncmp(v2, "sndmax", 6u) || v3->m_iAdminLevel < 100 )
                      {
                        if ( strncmp(v2, "sndinfo", 0xAu) || v3->m_iAdminLevel < 100 )
                          return 0;
                        fMin = 0.0;
                        fMax = 0.0;
                        SoundGroup::GetSoundMinMax(&g_kSoundMgr.m_pkEffectGroup->baseclass_0.baseclass_0, &fMax, &fMin);
                        v54 = fMin;
                        *(double *)&v52 = fMax;
                        v49 = fs("min[ %f ], max [ %f ]");
                        GameFrameWork::AddSysMsg(v3, v49);
                      }
                      else
                      {
                        fVal = v2 + 6;
                        WhileSpace((char **)&fVal);
                        *(float *)&fVal = atof(fVal);
                        SoundGroup::SetMaxDistance(
                          &g_kSoundMgr.m_pkEffectGroup->baseclass_0.baseclass_0,
                          *(float *)&fVal);
                        fMin = 0.0;
                        fMax = 0.0;
                        SoundGroup::GetSoundMinMax(&g_kSoundMgr.m_pkEffectGroup->baseclass_0.baseclass_0, &fMax, &fMin);
                        v54 = fMin;
                        *(double *)&v52 = fMax;
                        v48 = fs("min[ %f ], max [ %f ]");
                        GameFrameWork::AddSysMsg(v3, v48);
                      }
                    }
                    else
                    {
                      fVal = v2 + 6;
                      WhileSpace((char **)&fVal);
                      *(float *)&fVal = atof(fVal);
                      SoundGroup::SetMinDistance(&g_kSoundMgr.m_pkEffectGroup->baseclass_0.baseclass_0, *(float *)&fVal);
                      fMax = 0.0;
                      fMin = 0.0;
                      SoundGroup::GetSoundMinMax(&g_kSoundMgr.m_pkEffectGroup->baseclass_0.baseclass_0, &fMin, &fMax);
                      v54 = fMax;
                      *(double *)&v52 = fMin;
                      v47 = fs("min[ %f ], max [ %f ]");
                      GameFrameWork::AddSysMsg(v3, v47);
                    }
                  }
                  else
                  {
                    fVal = v2 + 5;
                    WhileSpace((char **)&fVal);
                    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
                    v45 = fVal;
                    SoundMgr::CreateSound(&g_kSoundMgr, (char *)fVal, &kPos);
                    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
                    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].__vecDelDtor)(&kDir);
                    LOWORD(v45) = atoi(v45);
                    v46 = rand();
                    CharMgr::AddMob(&g_kCharMgr, (unsigned __int16)v45, v46, &kPos, &kDir, 0, 0);
                  }
                }
                else
                {
                  GameFrameWork::NcMoverRideOffReq(v3);
                }
              }
              else
              {
                fVal = v2 + 6;
                WhileSpace((char **)&fVal);
                v43 = atoi(fVal);
                v44 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
                if ( v44 )
                  GameFrameWork::NcMoverRideOnReq(v3, *(_WORD *)(v44 + 2908), v43);
              }
            }
            else
            {
              v34 = Folder::Effect();
              v35 = Folder::Merge(v34, "MineArea100.nif");
              v36 = Ns_LoadNifFile(v35, 0);
              v37 = DecalMgr::AddDecal(&stru_B31F08, v36);
              v38 = v37;
              if ( v37 )
              {
                CharDecal::SetRadius(v37, 300.0);
                fMin = -(Timer::ms_fCurTime + 1.0);
                CharDecal::SetLifeTime(v38, fMin);
                v39 = Char::GetHeightPos(g_pkMainChar, &kDir);
                v40 = v39->x;
                v41 = v39->y;
                v42 = v39->z;
                v38->m_kPos.x = v40;
                v38->m_kPos.y = v41;
                v38->m_kPos.z = v42;
              }
            }
            return 1;
          }
          ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
          v29 = World::GetMapName(&g_kWorld, (Name3 *)&kDir);
          v33 = *(_DWORD *)&v29->n3_name[0];
          v54 = kPos.z;
          *(_DWORD *)acMapName = v33;
          *(double *)&v52 = kPos.y;
          v50 = "%s %f  %f %f";
        }
        else
        {
          ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].__vecDelDtor)(&kPos);
          v29 = World::GetMapName(&g_kWorld, (Name3 *)&kDir);
          v30 = *(_DWORD *)&v29->n3_name[0];
          v54 = kPos.z;
          *(_DWORD *)acMapName = v30;
          *(double *)&v52 = kPos.y;
          v50 = "%s %f  %f %f";
        }
        *(_DWORD *)&acMapName[4] = *(_DWORD *)&v29->n3_name[4];
        v31 = *(_DWORD *)&v29->n3_name[8];
        acMapName[12] = 0;
        *(_DWORD *)&acMapName[8] = v31;
        v32 = fs(v50);
        GameFrameWork::AddSysMsg(v3, v32);
        return 1;
      }
      v22 = (PgWin *)v3->m_pkShopWin;
    }
    else
    {
      if ( v3->m_pkGMCommandWin )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkGMCommandWin->baseclass_0.baseclass_0.baseclass_0);
      v22 = (PgWin *)v3->m_pkGMPrisonWin;
    }
    if ( v22 )
    {
LABEL_126:
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v22);
      return 1;
    }
    return 1;
  }
  kPos.x = 0.0;
  kPos.y = 0.0;
  kPos.z = 0.0;
  v10 = *v2;
  if ( *v2 == 32 )
    goto LABEL_220;
  while ( v10 )
  {
    if ( IsDBCSLeadByte(v10) && v2[1] )
      v2 += 2;
    else
      ++v2;
    v10 = *v2;
    if ( *v2 == 32 )
      goto LABEL_53;
  }
  if ( *v2 == 32 )
  {
LABEL_220:
    do
LABEL_53:
      ++v2;
    while ( *v2 == 32 );
  }
  kPos.x = atof(v2);
  v11 = *v2;
  if ( *v2 == 32 )
    goto LABEL_221;
  while ( v11 )
  {
    if ( IsDBCSLeadByte(v11) && v2[1] )
      v2 += 2;
    else
      ++v2;
    v11 = *v2;
    if ( *v2 == 32 )
      goto LABEL_63;
  }
  if ( *v2 == 32 )
  {
LABEL_221:
    do
LABEL_63:
      ++v2;
    while ( *v2 == 32 );
  }
  kPos.y = atof(v2);
  v12 = *v2;
  if ( *v2 == 32 )
    goto LABEL_222;
  while ( v12 )
  {
    if ( IsDBCSLeadByte(v12) && v2[1] )
      v2 += 2;
    else
      ++v2;
    v12 = *v2;
    if ( *v2 == 32 )
      goto LABEL_73;
  }
  if ( *v2 == 32 )
  {
LABEL_222:
    do
LABEL_73:
      ++v2;
    while ( *v2 == 32 );
  }
  kPos.z = atof(v2);
  World::SetAmbientLightAmbientColor(&g_kWorld, (NiColor *)&kPos);
  return 1;
}
// A81793: using guessed type bool EffectMgr__s_bEnableEffect;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// B30C0C: using guessed type int dword_B30C0C;

//----- (004804B0) --------------------------------------------------------
void __thiscall ChatCommandList::ChatCommandList(ChatCommandList *this)
{
  *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_VectorChatCommand.baseclass_0._Mylast = 0;
  this->m_VectorChatCommand.baseclass_0._Myend = 0;
  this->m_nCurChatComNum = 0;
  this->m_bIsSaveCommand = 1;
}

//----- (004804D0) --------------------------------------------------------
void __thiscall ChatCommandList::_ChatCommandList(ChatCommandList *this)
{
  ChatCommandList *v1; // esi@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    std::_Destroy_range<std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(
      *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0],
      this->m_VectorChatCommand.baseclass_0._Mylast,
      &this->m_VectorChatCommand.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_VectorChatCommand.baseclass_0._Mylast = 0;
  v1->m_VectorChatCommand.baseclass_0._Myend = 0;
}

//----- (00480520) --------------------------------------------------------
void __thiscall ChatCommandList::Clear(ChatCommandList *this)
{
  ChatCommandList *v1; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ecx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // edi@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = this->m_VectorChatCommand.baseclass_0._Mylast;
  v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    v4 = std::_Move<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::basic_string<char_std::char_traits<char>_std::allocator<char>>__>(
           v2,
           v2,
           v3,
           __formal);
    std::_Destroy_range<std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(
      v4,
      v1->m_VectorChatCommand.baseclass_0._Mylast,
      &v1->m_VectorChatCommand.baseclass_0._Alval,
      __formal);
    v1->m_VectorChatCommand.baseclass_0._Mylast = v4;
  }
}

//----- (00480560) --------------------------------------------------------
void __thiscall ChatCommandList::AddText(ChatCommandList *this, const char *pText)
{
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v2; // ebx@1
  int v3; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@5
  unsigned int v5; // [sp+1Ch] [bp-10h]@1
  int v6; // [sp+28h] [bp-4h]@5
  int v7; // [sp+2Ch] [bp+0h]@1

  v5 = (unsigned int)&v7 ^ __security_cookie;
  v2 = (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)this;
  if ( this->m_bIsSaveCommand )
  {
    v3 = (signed int)((char *)this->m_VectorChatCommand.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0])
       / 28;
    if ( !v3
      || std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                  + 28 * v3
                                                                                  - 28),
           0,
           *(_DWORD *)(*(_DWORD *)&this->m_VectorChatCommand.baseclass_0.___u0.baseclass_0.dummy[0] + 28 * v3 - 28 + 16),
           pText,
           strlen(pText)) )
    {
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pText, strlen(pText));
      v6 = 0;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        v2,
        &thisa);
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
    }
  }
  else
  {
    this->m_bIsSaveCommand = 1;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00480660) --------------------------------------------------------
void __thiscall GameFrameWork::SmartWhisper::MarkAsRecentlyUsed(GameFrameWork::SmartWhisper *this, char *pcWhisperID)
{
  std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > *v2; // eax@1
  std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > v3; // ebx@1
  char *v4; // esi@1
  char *v5; // edi@1
  unsigned int v6; // esi@2
  const char *v7; // eax@2
  unsigned int v8; // edx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@6
  int v10; // eax@8
  bool v11; // zf@8
  signed int v12; // eax@10
  int v13; // esi@17
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v14; // ST0C_4@17
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v15; // ST08_4@17
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v16; // eax@17
  int v17; // ecx@17
  std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > v18; // eax@19
  void *v19; // esi@25
  GameFrameWork::SmartWhisper *v20; // [sp+0h] [bp-54h]@1
  bool v21; // [sp+Bh] [bp-49h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Val; // [sp+Ch] [bp-48h]@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+28h] [bp-2Ch]@2
  unsigned int v24; // [sp+44h] [bp-10h]@1
  int v25; // [sp+50h] [bp-4h]@13
  int v26; // [sp+54h] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  v2 = *(std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > **)&this->m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *(std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > *)&v2->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v4 = pcWhisperID;
  v5 = (char *)&this->m_kRecentWhisperList;
  v20 = this;
  if ( *(std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > **)&v2->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == v2 )
  {
LABEL_17:
    _Val.baseclass_0._Myres = 15;
    _Val.baseclass_0._Mysize = 0;
    _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, v4, strlen(v4));
    v13 = *(_DWORD *)v5;
    v14 = *(std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node **)(*(_DWORD *)v5 + 4);
    v15 = *(std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node **)v5;
    v25 = 1;
    v16 = std::_List_val<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Buynode<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(
            (std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v5,
            v15,
            v14,
            &_Val);
    v17 = *((_DWORD *)v5 + 1);
    if ( (unsigned int)(153391688 - v17) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v5 + 1) = v17 + 1;
    *(_DWORD *)(v13 + 4) = v16;
    v16->_Prev->_Next = v16;
    if ( _Val.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Val);
    while ( v20->m_kRecentWhisperList.baseclass_0.baseclass_0._Mysize >= 0x64 )
    {
      v19 = (void *)**(_DWORD **)v5;
      if ( v19 != *(void **)v5 )
      {
        **((_DWORD **)v19 + 1) = *(_DWORD *)v19;
        *(_DWORD *)(*(_DWORD *)v19 + 4) = *((_DWORD *)v19 + 1);
        if ( *((_DWORD *)v19 + 7) >= 0x10u )
          operator delete(*((void **)v19 + 2));
        *((_DWORD *)v19 + 7) = 15;
        *((_DWORD *)v19 + 6) = 0;
        *((_BYTE *)v19 + 8) = 0;
        operator delete(v19);
        --*((_DWORD *)v5 + 1);
      }
    }
  }
  else
  {
    while ( 1 )
    {
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v4, strlen(v4));
      v6 = *(_DWORD *)(*(_DWORD *)&v3 + 24);
      v7 = (const char *)(*(_DWORD *)&v3 + 8);
      if ( *(_DWORD *)(*(_DWORD *)&v3 + 28) >= 0x10u )
        v7 = *(const char **)v7;
      v8 = thisa.baseclass_0._Mysize;
      if ( thisa.baseclass_0._Mysize >= v6 )
        v8 = *(_DWORD *)(*(_DWORD *)&v3 + 24);
      v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
      if ( thisa.baseclass_0._Myres < 0x10 )
        v9 = &thisa;
      v10 = std::char_traits<char>::compare(v9->baseclass_0.___u0.baseclass_0.dummy, v7, v8);
      v11 = v10 == 0;
      if ( !v10 )
      {
        if ( thisa.baseclass_0._Mysize >= v6 )
          v12 = thisa.baseclass_0._Mysize != v6;
        else
          v12 = -1;
        v11 = v12 == 0;
      }
      v21 = v11;
      v25 = -1;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      if ( v21 )
        break;
      v3 = (std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > >)**(_DWORD **)&v3;
      v4 = pcWhisperID;
      if ( v3 == *(_DWORD *)v5 )
        goto LABEL_17;
    }
    v18 = *(std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > *)v5;
    if ( *(_DWORD *)v5 != v3 && v18 != **(_DWORD **)&v3 )
      std::list<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Splice_same(
        (std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v5,
        v18,
        (std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v5,
        v3,
        *(std::_List_const_iterator<std::_List_val<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > *)v3,
        1u);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00480870) --------------------------------------------------------
bool __thiscall GameFrameWork::DecodingCmdChat(GameFrameWork *this, char *pcText)
{
  char *v2; // esi@1
  GameFrameWork *v3; // edi@1
  char *v4; // esi@2
  BYTE v5; // al@2
  int v6; // ebx@3
  char *v7; // eax@17
  bool result; // al@17
  char *v9; // esi@22
  BYTE v10; // al@22
  char *v11; // eax@73
  char *v12; // eax@73
  ChatDisplayWin2 *v13; // ecx@73
  const char *v14; // esi@73
  ChatDisplayWin *v15; // ecx@75
  char *v16; // esi@79
  BYTE i; // al@79
  char *v18; // esi@90
  BYTE v19; // al@90
  int v20; // eax@99
  int v21; // edx@99
  float v22; // eax@99
  char *v23; // esi@102
  BYTE v24; // al@102
  char *v25; // esi@112
  BYTE v26; // al@112
  char *v27; // eax@124
  bool v28; // zf@128
  char *v29; // edi@149
  unsigned int v30; // esi@149
  char *v31; // edi@151
  char *v32; // eax@156
  int v33; // eax@160
  char v34; // cl@161
  int v35; // eax@162
  int v36; // eax@168
  char *v37; // esi@168
  Char *v38; // eax@189
  const char *v39; // eax@194
  GameFrameWork *v40; // esi@198
  int v41; // eax@209
  char *v42; // esi@209
  char *v43; // esi@218
  char *v44; // eax@221
  GameFrameWork *v45; // ebx@223
  BYTE v46; // al@224
  Name5 *v47; // eax@232
  KingdomQuestWin *v48; // ecx@232
  unsigned int v49; // eax@232
  char *v50; // esi@233
  const char *v51; // eax@236
  BYTE v52; // al@240
  char *v53; // esi@240
  Name5 *v54; // eax@248
  KingdomQuestWin *v55; // ecx@248
  unsigned int v56; // eax@248
  __int64 v57; // [sp-14h] [bp-18Ch]@153
  __int64 v58; // [sp-10h] [bp-188h]@19
  __int64 v59; // [sp-8h] [bp-180h]@19
  float v60; // [sp+0h] [bp-178h]@19
  unsigned int v61; // [sp+4h] [bp-174h]@1
  GameFrameWork *thisa; // [sp+14h] [bp-164h]@1
  unsigned int iCount; // [sp+18h] [bp-160h]@1
  char *pcName; // [sp+1Ch] [bp-15Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strChat; // [sp+20h] [bp-158h]@194
  Name5 kCharID; // [sp+3Ch] [bp-13Ch]@19
  char acName[256]; // [sp+50h] [bp-128h]@149
  char acMainCharID[21]; // [sp+150h] [bp-28h]@160
  unsigned int v69; // [sp+168h] [bp-10h]@1
  int v70; // [sp+174h] [bp-4h]@194
  int v71; // [sp+178h] [bp+0h]@1

  v69 = (unsigned int)&v71 ^ __security_cookie;
  v61 = (unsigned int)&v71 ^ __security_cookie;
  v2 = pcText;
  v3 = this;
  thisa = this;
  pcName = pcText;
  if ( IsChatCommand(pcText, 0x43706657u, (int *)&iCount) )
  {
    v4 = &pcText[iCount];
    v5 = pcText[iCount];
    if ( pcText[iCount] == 32 )
    {
      v6 = 0;
    }
    else
    {
      while ( 1 )
      {
        v6 = 0;
        if ( !v5 )
          break;
        if ( IsDBCSLeadByte(v5) && v4[1] )
          v4 += 2;
        else
          ++v4;
        v5 = *v4;
        if ( *v4 == 32 )
          goto LABEL_13;
      }
      if ( *v4 != 32 )
        goto LABEL_14;
    }
    do
LABEL_13:
      ++v4;
    while ( *v4 == 32 );
LABEL_14:
    if ( g_kRaidinfo.m_bIsMeRaidSubLeader == (_BYTE)v6 && g_kRaidinfo.m_bIsMeRaidLeader == (_BYTE)v6 )
    {
      if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
      {
        v7 = TextData2::Get(0x42A0111u);
        GameFrameWork::AddSysMsg(thisa, v7);
        result = 1;
      }
      else
      {
        GameFrameWork::NcPartyJoinReq(thisa, v4);
        result = 1;
      }
      return result;
    }
    *(_DWORD *)&kCharID.n5_name[16] = v6;
    *(_DWORD *)&kCharID.n5_name[12] = v6;
    *(_DWORD *)&kCharID.n5_name[8] = v6;
    *(_DWORD *)&kCharID.n5_name[4] = v6;
    *(_DWORD *)&kCharID.n5_name[0] = v6;
    strncpy(kCharID.n5_name, v4, 0x14u);
    v58 = *(_QWORD *)&kCharID;
    v59 = *(_QWORD *)&kCharID.n5_name[8];
    LODWORD(v60) = *(_DWORD *)&kCharID.n5_name[16];
    GameFrameWork::NcRaidInvitationReq(thisa, *(Name5 *)&v58);
    return 1;
  }
  if ( !strncmp(pcText, "contract", 8u) )
  {
    v9 = &pcText[iCount];
    v10 = pcText[iCount];
    if ( pcText[iCount] == 32 )
      goto LABEL_256;
    while ( v10 )
    {
      if ( IsDBCSLeadByte(v10) && v9[1] )
        v9 += 2;
      else
        ++v9;
      v10 = *v9;
      if ( *v9 == 32 )
        goto LABEL_31;
    }
    if ( *v9 == 32 )
    {
LABEL_256:
      do
LABEL_31:
        ++v9;
      while ( *v9 == 32 );
    }
    GameFrameWork::NcPartyJoinReq(v3, v9);
    return 1;
  }
  if ( !strncmp(pcText, "server", 6u) )
  {
    if ( strcmp("GFT-GRM0", g_kServer.kServerName) )
    {
      if ( strcmp("GFT-GRM1", g_kServer.kServerName) )
      {
        if ( strcmp("GFT-ENG0", g_kServer.kServerName) )
        {
          if ( strcmp("GFT-GRM2", g_kServer.kServerName) )
          {
            if ( strcmp("GFT-GRM3", g_kServer.kServerName) )
            {
              if ( strcmp("GFT-GRM4", g_kServer.kServerName) )
              {
                if ( strcmp("GFT-FRA0", g_kServer.kServerName) )
                {
                  if ( strcmp("GFT-GRM5", g_kServer.kServerName) )
                  {
                    if ( strcmp("GFT-SPA0", g_kServer.kServerName) )
                    {
                      if ( strcmp("GFT-FRA1", g_kServer.kServerName) )
                      {
                        if ( strcmp("GFT-GRM6", g_kServer.kServerName) )
                        {
                          if ( strcmp("GFT-ITA0", g_kServer.kServerName) )
                          {
                            if ( strcmp("GFT-ENG1", g_kServer.kServerName) )
                            {
                              if ( strcmp("GFT-GRM7", g_kServer.kServerName) )
                              {
                                if ( strcmp("GFT-FRA2", g_kServer.kServerName) )
                                {
                                  if ( strcmp("ENID", g_kServer.kServerName) )
                                  {
                                    if ( strcmp("PAGEL", g_kServer.kServerName) )
                                    {
                                      if ( strcmp("ISYA", g_kServer.kServerName) )
                                      {
                                        if ( strcmp("JENIRA", g_kServer.kServerName) )
                                          v60 = -8.384477e-34;
                                        else
                                          v60 = 5.0825043e-19;
                                      }
                                      else
                                      {
                                        v60 = 3.1765652e-20;
                                      }
                                    }
                                    else
                                    {
                                      v60 = 1.2706261e-19;
                                    }
                                  }
                                  else
                                  {
                                    v60 = 2.0330017e-18;
                                  }
                                }
                                else
                                {
                                  v60 = 8.1862169e-18;
                                }
                              }
                              else
                              {
                                v60 = 2.0465542e-18;
                              }
                            }
                            else
                            {
                              v60 = 5.1163856e-19;
                            }
                          }
                          else
                          {
                            v60 = 1.2790964e-19;
                          }
                        }
                        else
                        {
                          v60 = 3.197741e-20;
                        }
                      }
                      else
                      {
                        v60 = 8.327175e-15;
                      }
                    }
                    else
                    {
                      v60 = 2.0817937e-15;
                    }
                  }
                  else
                  {
                    v60 = 5.2044844e-16;
                  }
                }
                else
                {
                  v60 = 1.3011211e-16;
                }
              }
              else
              {
                v60 = 3.2528027e-17;
              }
            }
            else
            {
              v60 = 8.1320068e-18;
            }
          }
          else
          {
            v60 = 2.0330017e-18;
          }
        }
        else
        {
          v60 = 5.0825043e-19;
        }
      }
      else
      {
        v60 = 1.2706261e-19;
      }
    }
    else
    {
      v60 = 3.1765652e-20;
    }
    LODWORD(v60) = TextData::Get(LODWORD(v60));
    v11 = TextData::Get(0x472BFFA5u);
    v12 = fs(v11);
    v13 = v3->m_pkChatDisplayWin;
    v14 = v12;
    if ( v13 )
      ChatDisplayWin2::AddSystemChat(v13, v12);
    v15 = (ChatDisplayWin *)v3->m_pkSysMsgDisplayWin;
    if ( v15 )
      ChatDisplayWin::AddSystemChat(v15, v14);
    return 1;
  }
  if ( IsChatCommand(pcText, 0xE7271D0Au, (int *)&iCount) )
  {
    v16 = &pcText[iCount];
    for ( i = pcText[iCount]; *v16 != 32; i = *v16 )
    {
      if ( !i )
        break;
      if ( IsDBCSLeadByte(i) && v16[1] )
        v16 += 2;
      else
        ++v16;
    }
    if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
    {
      GameFrameWork::NcRaidLeaveReq(v3);
      result = 1;
    }
    else
    {
      GameFrameWork::NcPartyLeaveReq(v3);
      result = 1;
    }
    return result;
  }
  if ( IsChatCommand(pcText, 0x31301252u, (int *)&iCount) )
  {
    v18 = &pcText[iCount];
    v19 = pcText[iCount];
    pcName = &pcText[iCount];
    if ( v19 != 32 )
    {
      do
      {
        if ( !v19 )
          break;
        if ( IsDBCSLeadByte(v19) && v18[1] )
          v18 += 2;
        else
          ++v18;
        v19 = *v18;
      }
      while ( *v18 != 32 );
      pcName = v18;
    }
    WhileSpace(&pcName);
    if ( g_kRaidinfo.m_bIsMeRaidLeader )
    {
      Name5::Name5(&kCharID, pcName);
      LODWORD(v58) = *(_DWORD *)v20;
      HIDWORD(v58) = *(_DWORD *)(v20 + 4);
      LODWORD(v59) = *(_DWORD *)(v20 + 8);
      v21 = *(_DWORD *)(v20 + 12);
      LODWORD(v22) = *(_DWORD *)(v20 + 16);
      HIDWORD(v59) = v21;
      v60 = v22;
      GameFrameWork::NcRaidVanishReq(v3, *(Name5 *)&v58);
      result = 1;
    }
    else
    {
      GameFrameWork::NcPartyKickOffReq(v3, pcName);
      result = 1;
    }
    return result;
  }
  if ( IsChatCommand(pcText, 0x8373A89Cu, (int *)&iCount) )
  {
    v23 = &pcText[iCount];
    v24 = pcText[iCount];
    pcName = &pcText[iCount];
    if ( v24 != 32 )
    {
      do
      {
        if ( !v24 )
          break;
        if ( IsDBCSLeadByte(v24) && v23[1] )
          v23 += 2;
        else
          ++v23;
        v24 = *v23;
      }
      while ( *v23 != 32 );
      pcName = v23;
    }
    WhileSpace(&pcName);
    GameFrameWork::NcPartyChangeMasterReq(v3, pcName);
    return 1;
  }
  if ( IsChatCommand(pcText, 0xFAF72626u, (int *)&iCount) )
  {
    v25 = &pcText[iCount];
    v26 = pcText[iCount];
    pcName = &pcText[iCount];
    if ( v26 != 32 )
    {
      do
      {
        if ( !v26 )
          break;
        if ( IsDBCSLeadByte(v26) && v25[1] )
          v25 += 2;
        else
          ++v25;
        v26 = *v25;
      }
      while ( *v25 != 32 );
      pcName = v25;
    }
    WhileSpace(&pcName);
    GameFrameWork::NcRaidWarningReq(v3, pcName);
    return 1;
  }
  if ( IsChatCommand(pcText, 0xD724FF12u, (int *)&iCount) )
  {
    if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) && !g_kRaidinfo.m_bIsMeRaidLeader )
    {
      v27 = TextData2::Get(0x314410EFu);
      GameFrameWork::AddSysMsg(v3, v27);
      return 1;
    }
    if ( g_kParty.m_uiTotalMember )
    {
      GameFrameWork::NcRaidMakeReq(v3);
      return 1;
    }
    return 1;
  }
  if ( !IsPartyChat(pcText, (int *)&iCount) )
  {
    if ( IsGuildChat(pcText, (int *)&iCount) )
    {
      v28 = pcText[iCount] == 0;
      pcName = &pcText[iCount];
      if ( v28 )
        return 1;
      WhileSpace(&pcName);
      if ( *pcName )
        GameFrameWork::NcGuildChatReq(v3, pcName);
      return 1;
    }
    if ( IsGuildAcademyChat(pcText, (int *)&iCount) )
    {
      v28 = pcText[iCount] == 0;
      pcName = &pcText[iCount];
      if ( v28 )
        return 1;
      WhileSpace(&pcName);
      if ( *pcName )
        GameFrameWork::NcGuildAcademyChatReq(v3, pcName);
      return 1;
    }
    if ( IsRaidChat(pcText, (int *)&iCount) )
    {
      v28 = pcText[iCount] == 0;
      pcName = &pcText[iCount];
      if ( v28 )
        return 1;
      WhileSpace(&pcName);
      if ( *pcName )
        GameFrameWork::NcRaidChatReq(v3, pcName);
      return 1;
    }
    if ( IsShisperChat(pcText, (int *)&iCount) )
    {
      v28 = pcText[iCount] == 0;
      pcName = &pcText[iCount];
      if ( v28 )
        return 1;
      WhileSpace(&pcName);
      v29 = pcName;
      iCount = 0;
      StrCopyToSpace(acName, pcName, (int *)&iCount);
      v30 = iCount;
      if ( iCount && iCount <= 0x14 )
      {
        LODWORD(v60) = acName;
        acName[iCount] = 0;
        Name5::Name5(&kCharID, LODWORD(v60));
        v31 = &v29[v30];
        v28 = *v31 == 0;
        pcName = v31;
        if ( v28 )
          return 1;
        WhileSpace(&pcName);
        if ( *pcName )
        {
          v57 = *(_QWORD *)&kCharID;
          *(__int64 *)((char *)&v58 + 4) = *(_QWORD *)&kCharID.n5_name[8];
          HIDWORD(v59) = *(_DWORD *)&kCharID.n5_name[16];
          GameFrameWork::NcActWhisperReq(thisa, *(Name5 *)&v57, pcName);
          GameFrameWork::SmartWhisper::MarkAsRecentlyUsed(&thisa->m_kSmartWhisper, acName);
        }
        return 1;
      }
      v60 = -0.0016414917;
      goto LABEL_156;
    }
    if ( isreplyWhisperChat(pcText, (int *)&iCount) )
    {
      v28 = pcText[iCount] == 0;
      pcName = &pcText[iCount];
      if ( v28 )
        return 1;
      WhileSpace(&pcName);
      Name5::n_string(&GameFrameWork::m_kWhisperCharID, acMainCharID);
      v33 = (int)acMainCharID;
      acMainCharID[20] = 0;
      do
        v34 = *(_BYTE *)v33++;
      while ( v34 );
      v35 = v33 - (_DWORD)&acMainCharID[1];
      if ( !v35 || (unsigned int)v35 > 0x14 )
      {
        v60 = 246189.58;
LABEL_156:
        v32 = TextData::Get(LODWORD(v60));
        GameFrameWork::AddSysMsg(thisa, v32);
        return 1;
      }
      Name5::Name5(&kCharID, acMainCharID);
      if ( *pcName )
      {
        v57 = *(_QWORD *)&kCharID;
        *(__int64 *)((char *)&v58 + 4) = *(_QWORD *)&kCharID.n5_name[8];
        HIDWORD(v59) = *(_DWORD *)&kCharID.n5_name[16];
        GameFrameWork::NcActWhisperReq(thisa, *(Name5 *)&v57, pcName);
        GameFrameWork::SmartWhisper::MarkAsRecentlyUsed(&thisa->m_kSmartWhisper, acMainCharID);
        return 1;
      }
      return 1;
    }
    if ( !strncmp(pcText, "friendship", 0xAu) )
    {
      v36 = (unsigned __int8)pcText[10];
      v37 = pcText + 10;
      pcName = pcText + 10;
      if ( !(_BYTE)v36 )
        return 1;
      if ( (_BYTE)v36 != 32 )
      {
        do
        {
          if ( !(_BYTE)v36 )
            break;
          if ( IsDBCSLeadByte(v36) && v37[1] )
            v37 += 2;
          else
            ++v37;
          LOBYTE(v36) = *v37;
        }
        while ( *v37 != 32 );
        pcName = v37;
      }
      WhileSpace(&pcName);
      if ( *pcName )
      {
        iCount = (unsigned int)&v58;
        Name5::Name5((Name5 *)&v58, pcName);
        GameFrameWork::NcFriendSetReq(thisa, *(Name5 *)&v58);
        return 1;
      }
      return 1;
    }
    if ( IsShoutChat(pcText, (int *)&iCount) )
    {
      v28 = pcText[iCount] == 0;
      pcName = &pcText[iCount];
      if ( v28 )
        return 1;
      WhileSpace(&pcName);
      if ( *pcName )
      {
        GameFrameWork::NcActShoutCmd(thisa, pcName);
        return 1;
      }
      return 1;
    }
    if ( !strncmp(pcText, "attack", 6u) )
    {
      GameFrameWork::OnDoublePickChar(
        thisa,
        (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0]);
      return 1;
    }
    if ( !strncmp(pcText, "looting", 7u) )
    {
      GameFrameWork::GetDropItemByArea(thisa, 0);
      return 1;
    }
    if ( strncmp(pcText, "pm", 2u) )
    {
      if ( !strncmp(pcText, "trade", 5u) )
      {
        v38 = CharMgr::GetChar(&g_kCharMgr, pcText + 6);
        if ( v38 && v38->m_bUserCharacter )
        {
          GameFrameWork::OnPopupProposeTrade(thisa, v38);
          return 1;
        }
        return 1;
      }
      if ( !strncmp(pcText, "whisper", 7u) )
      {
        if ( pcText[7] != 32 )
          return 1;
        strChat.baseclass_0._Myres = 15;
        strChat.baseclass_0._Mysize = 0;
        strChat.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v70 = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strChat, "/w ", 3u);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strChat, pcText + 8);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strChat, " ", 1u);
        v39 = *(const char **)&strChat;
        if ( strChat.baseclass_0._Myres < 0x10 )
          v39 = (const char *)&strChat;
        GameFrameWork::OnOpenChatEditWin(thisa, v39);
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strChat);
        return 1;
      }
      if ( !strncmp(pcText, "stick", 5u) )
      {
        v40 = thisa;
        CNSTimer_Interval::ReSet(&thisa->m_kStickTimer, Timer::ms_fCurTime);
        thisa->m_kStickTimer.m_fCheckTime = 1.0;
        GameFrameWork::Stick(
          v40,
          (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0],
          1);
        return 1;
      }
      if ( !strncmp(pcText, "assist", 6u) )
      {
        GameFrameWork::CurTargetAssist(thisa);
        return 1;
      }
      if ( !strncmp(pcText, "autorun", 7u) )
      {
        GameFrameWork::AutoRun(thisa);
        return 1;
      }
      if ( IsNormalChat(pcText, (int *)&iCount) )
        return 1;
      if ( !strncmp(pcText, "HPSton", 6u) )
      {
        GameFrameWork::OnHPSoulStoneUse_Key(thisa);
        return 1;
      }
      if ( !strncmp(pcText, "SPSton", 6u) )
      {
        GameFrameWork::OnSPSoulStoneUse_Key(thisa);
        return 1;
      }
      if ( !strncmp(pcText, "Ignore", 6u) )
      {
        v41 = (unsigned __int8)pcText[6];
        v42 = pcText + 6;
        pcName = pcText + 6;
        if ( !(_BYTE)v41 )
          return 1;
        if ( (_BYTE)v41 != 32 )
        {
          do
          {
            if ( !(_BYTE)v41 )
              break;
            if ( IsDBCSLeadByte(v41) && v42[1] )
              v42 += 2;
            else
              ++v42;
            LOBYTE(v41) = *v42;
          }
          while ( *v42 != 32 );
          pcName = v42;
        }
        WhileSpace(&pcName);
        v43 = pcName;
        if ( !*pcName || IsSpecialCharInStr2_1(pcName) )
          return 1;
        Name5::Name5(&kCharID, v43);
        v58 = *(_QWORD *)&kCharID;
        v59 = *(_QWORD *)&kCharID.n5_name[8];
        LODWORD(v60) = *(_DWORD *)&kCharID.n5_name[16];
        if ( !ChatBlockListWin::IsRestrictID(thisa->m_pkChatBlockListWin, *(Name5 *)&v58) )
        {
          v58 = *(_QWORD *)&kCharID;
          v59 = *(_QWORD *)&kCharID.n5_name[8];
          LODWORD(v60) = *(_DWORD *)&kCharID.n5_name[16];
          GameFrameWork::NcChatRestrictAddReq(thisa, *(Name5 *)&v58);
          LODWORD(v60) = v43;
          v44 = TextData::Get(0x3E738588u);
          GameFrameWork::VaAddSysMsg(thisa, v44);
          return 1;
        }
        return 1;
      }
      if ( IsVote(pcText, (int *)&iCount) )
      {
        v45 = thisa;
        if ( thisa->m_eFieldMapType != 1 )
          return 1;
        v46 = *pcText;
        if ( *pcText != 32 )
        {
          do
          {
            if ( !v46 )
              break;
            if ( IsDBCSLeadByte(v46) && v2[1] )
              v2 += 2;
            else
              ++v2;
            v46 = *v2;
          }
          while ( *v2 != 32 );
          pcName = v2;
        }
        WhileSpace(&pcName);
        v47 = User::GetMainCharID(&g_kUser);
        Name5::n_string(v47, acMainCharID);
        v48 = thisa->m_pkKingDomQuest;
        acMainCharID[20] = 0;
        v49 = KingdomQuestWin::GetJoinQuestHandle(v48);
        if ( GameFrameWork::IsVotePossible(thisa, v49) )
        {
          v50 = pcName;
          if ( strcmp(pcName, (const char *)&unk_98B36A) )
          {
            if ( strcmp(pcName, acMainCharID) && KingdomQuestPlayerList::IsPlayerName(thisa->m_pkKQPlayerList, pcName) )
            {
              v51 = acMainCharID;
LABEL_237:
              VoteWin::SetProposerText(v45->m_pkVoteWin, v51);
              VoteWin::SetTargetText(v45->m_pkVoteWin, v50);
              GameFrameWork::NcKqVoteStartCheckReq(v45);
              return 1;
            }
          }
        }
      }
      else
      {
        if ( !strncmp(pcText, "vote", 4u) )
        {
          v45 = thisa;
          if ( thisa->m_eFieldMapType != 1 )
            return 1;
          v52 = pcText[4];
          v53 = pcText + 4;
          pcName = pcText + 4;
          if ( v52 != 32 )
          {
            do
            {
              if ( !v52 )
                break;
              if ( IsDBCSLeadByte(v52) && v53[1] )
                v53 += 2;
              else
                ++v53;
              v52 = *v53;
            }
            while ( *v53 != 32 );
            pcName = v53;
          }
          WhileSpace(&pcName);
          v54 = User::GetMainCharID(&g_kUser);
          Name5::n_string(v54, &strChat.baseclass_0.___u0._Bx._Buf[4]);
          v55 = thisa->m_pkKingDomQuest;
          strChat.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
          v56 = KingdomQuestWin::GetJoinQuestHandle(v55);
          if ( GameFrameWork::IsVotePossible(thisa, v56) )
          {
            v50 = pcName;
            if ( strcmp(pcName, (const char *)&unk_98B36B) )
            {
              if ( strcmp(pcName, &strChat.baseclass_0.___u0._Bx._Buf[4])
                && KingdomQuestPlayerList::IsPlayerName(thisa->m_pkKQPlayerList, pcName) )
              {
                v51 = &strChat.baseclass_0.___u0._Bx._Buf[4];
                goto LABEL_237;
              }
            }
          }
        }
      }
    }
    return 0;
  }
  v28 = pcText[iCount] == 0;
  pcName = &pcText[iCount];
  if ( v28 )
    return 1;
  WhileSpace(&pcName);
  if ( *pcName )
    GameFrameWork::NcActPartyChatReq(v3, pcName);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00481CA0) --------------------------------------------------------
void __thiscall GameFrameWork::DecodingChat(GameFrameWork *this, char *pcText, char *pcDefaultCmd, char *pcCharID)
{
  char *v4; // esi@1
  bool v5; // zf@1
  GameFrameWork *v6; // edi@1
  char v7; // al@2
  unsigned int v8; // eax@6
  char *i; // ecx@6
  ChatDisplayWin2 *v10; // ecx@10
  int v11; // edi@12
  char *v12; // eax@14
  char v13; // al@16
  int v14; // esi@16
  int v15; // edi@16
  char j; // al@20
  int v17; // eax@23
  char v18; // cl@24
  char *v19; // eax@30
  char *v20; // ebx@32
  char *v21; // eax@37
  char v22; // al@38
  void *v23; // edx@54
  char *v24; // eax@54
  int v25; // edx@54
  char v26; // cl@55
  char *v27; // esi@56
  char *v28; // eax@57
  GameFrameWork *v29; // esi@57
  char *v30; // eax@58
  const char *v31; // [sp-4h] [bp-228h]@45
  int iPrefixLen; // [sp+10h] [bp-214h]@34
  GameFrameWork *thisa; // [sp+14h] [bp-210h]@1
  char *pcTemp; // [sp+18h] [bp-20Ch]@42
  char bReturn; // [sp+1Eh] [bp-206h]@34
  bool b; // [sp+1Fh] [bp-205h]@36
  char pFilterText[256]; // [sp+20h] [bp-204h]@12
  char pTemp[256]; // [sp+120h] [bp-104h]@12
  unsigned int v39; // [sp+220h] [bp-4h]@1
  int v40; // [sp+224h] [bp+0h]@1

  v39 = (unsigned int)&v40 ^ __security_cookie;
  v4 = pcText;
  v5 = *pcText == 47;
  v6 = this;
  thisa = this;
  if ( v5 )
  {
    v7 = pcText[1];
    if ( v7 == 119 || v7 == 87 )
    {
      memset(this->m_acMessage, 0, 0x400u);
      memcpy(v6->m_acMessage, pcText, strlen(pcText));
      v6->m_bWhisper = 1;
    }
  }
  if ( *pcText )
  {
    v8 = strlen(pcText);
    for ( i = &pcText[v8 - 1]; v8; --v8 )
    {
      if ( *i != 32 )
        break;
      *i-- = 0;
    }
    if ( *pcText )
    {
      v10 = v6->m_pkChatDisplayWin;
      if ( v10 && ChatDisplayWin2::IsItemLinkInfo(v10) )
      {
        v11 = 0;
        memset(pFilterText, 0, 0x100u);
        memset(pTemp, 0, 0x100u);
        if ( *pcText )
        {
          do
          {
            if ( strncmp(v4, "{color,", 7u) )
            {
              if ( IsDBCSLeadByte(*v4) )
              {
                strncat(pTemp, v4, 2u);
                v4 += 2;
                v11 += 2;
              }
              else
              {
                pTemp[v11++] = *v4++;
              }
            }
            else
            {
              v12 = TextFilterTable::FilterSlander(pTemp);
              if ( v12 )
              {
                strncat(pFilterText, v12, strlen(v12));
                memset(pTemp, 0, 0x100u);
                v11 = 0;
              }
              strncat(pTemp, "{color,", 7u);
              v13 = v4[7];
              v14 = (int)(v4 + 7);
              v15 = v11 + 7;
              if ( v13 )
              {
                while ( v13 != 44 )
                {
                  ++v14;
                  pTemp[v15] = v13;
                  v13 = *(_BYTE *)v14;
                  ++v15;
                  if ( !*(_BYTE *)v14 )
                    goto LABEL_23;
                }
                for ( j = *(_BYTE *)v14; *(_BYTE *)v14; ++v15 )
                {
                  if ( j == 125 )
                    break;
                  ++v14;
                  pTemp[v15] = j;
                  j = *(_BYTE *)v14;
                }
              }
LABEL_23:
              v17 = (int)pTemp;
              pTemp[v15] = *(_BYTE *)v14;
              v4 = (char *)(v14 + 1);
              do
                v18 = *(_BYTE *)v17++;
              while ( v18 );
              strncat(pFilterText, pTemp, v17 - (_DWORD)&pTemp[1]);
              memset(pTemp, 0, 0x100u);
              v11 = 0;
            }
          }
          while ( *v4 );
        }
        v19 = TextFilterTable::FilterSlander(pTemp);
        if ( v19 )
          strncat(pFilterText, v19, strlen(v19));
        v6 = thisa;
        v20 = pFilterText;
      }
      else
      {
        v20 = TextFilterTable::FilterSlander(pcText);
      }
      LOBYTE(iPrefixLen) = *v20;
      bReturn = 0;
      if ( IsDBCSLeadByte(iPrefixLen) || *v20 != 47 )
      {
        switch ( (char)iPrefixLen )
        {
          case 37:
          case 38:
          case 42:
            break;
          case 36:
            if ( !v6->m_bEnableAdmin )
              break;
            b = GameFrameWork::DecodingAuthorChat(v6, v20 + 1);
            v22 = bReturn;
            goto LABEL_39;
          default:
            TextFilterTable::FilterEmotion(v20);
            break;
        }
$LN84_4:
        if ( !pcDefaultCmd )
        {
          if ( *v20 && !IsAllSpace(v20) )
          {
            ChatCommandList::AddText(&v6->m_kChatComList, v20);
            ChatCommandList::InitPos(&v6->m_kChatComList);
          }
LABEL_63:
          GameFrameWork::NcActChatReq(v6, v20);
          return;
        }
        if ( IsShisperChat(pcDefaultCmd + 1, (int *)&pcTemp) && IsValidShisperChat(v20) )
        {
          if ( GetShisperNameStrLen(v20, (int *)&pcTemp) )
          {
            v31 = &pcTemp[(_DWORD)v20];
LABEL_53:
            ChatCommandList::AddText(&v6->m_kChatComList, v31);
            ChatCommandList::InitPos(&v6->m_kChatComList);
            goto LABEL_54;
          }
        }
        else
        {
          if ( *v20 && !IsAllSpace(v20) )
          {
            v31 = v20;
            goto LABEL_53;
          }
        }
LABEL_54:
        v23 = fs(0);
        v24 = pcDefaultCmd;
        pcTemp = (char *)v23;
        v25 = v23 - pcDefaultCmd;
        do
        {
          v26 = *v24;
          v24[v25] = *v24;
          ++v24;
        }
        while ( v26 );
        v27 = strcat(pcTemp, v20);
        if ( IsChatCommandPrefix(pcTemp, &iPrefixLen) )
        {
          v28 = &v27[iPrefixLen];
          v29 = thisa;
          if ( GameFrameWork::DecodingCmdChat(thisa, v28) )
            return;
          v30 = TextData::Get(0x28597396u);
          GameFrameWork::VaAddSysMsg(v29, v30);
          v6 = v29;
        }
        else
        {
          v6 = thisa;
        }
        goto LABEL_63;
      }
      iPrefixLen = 1;
      b = GameFrameWork::DecodingCmdChat(v6, v20 + 1);
      if ( !b )
      {
        v21 = TextData::Get(0x28597396u);
        GameFrameWork::VaAddSysMsg(v6, v21);
      }
      v22 = 1;
LABEL_39:
      if ( b != 1 && v22 != 1 )
        goto $LN84_4;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00482170) --------------------------------------------------------
void __cdecl WhileSpace(char **pcText)
{
  for ( ; **pcText == 32; ++*pcText )
    ;
}

//----- (00482190) --------------------------------------------------------
void __thiscall Server::SetOneDayTime(Server *this, float fOneDayTime)
{
  Server *v2; // esi@1
  float v3; // ST08_4@1

  v2 = this;
  this->m_fOldGameTimeWhenSet = this->m_fGameTimeWhenSet;
  this->m_fOldAppTimeWhenSet = this->m_fAppTimeWhenSet;
  this->m_fOldOneDayTime = Server::ONE_DAY_TIME;
  v3 = Server::GetGameTime(this, Timer::ms_fCurTime);
  Server::ONE_DAY_TIME = fOneDayTime;
  v2->m_fGameTimeWhenSet = v3;
  v2->m_fAppTimeWhenSet = Timer::ms_fCurTime;
}
// A81188: using guessed type float Server__ONE_DAY_TIME;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00482200) --------------------------------------------------------
void __thiscall Server::SetTimeTest(Server *this, bool bTest)
{
  Server *v2; // esi@1
  float v3; // ST0C_4@1

  v2 = this;
  v3 = Server::GetGameTime(this, Timer::ms_fCurTime);
  Server::ms_bTimeTest = bTest;
  v2->m_fOffSetTime = 0.0;
  v2->m_fOffSetTime = v3 - Server::GetGameTime(v2, Timer::ms_fCurTime);
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// B3201C: using guessed type bool Server__ms_bTimeTest;

//----- (00482260) --------------------------------------------------------
void __thiscall Server::SetCurrentTime(Server *this, int nHour, int nMinute)
{
  Server *v3; // esi@1
  float v4; // ST0C_4@1

  v3 = this;
  v4 = Server::GetGameTime(this, Timer::ms_fCurTime);
  Server::ms_bTimeTest = 1;
  v3->m_fOffSetTime = 0.0;
  v3->m_fOffSetTime = v4 - Server::GetGameTime(v3, Timer::ms_fCurTime);
  Server::ms_fCurTime = (double)(60 * (nMinute + 60 * nHour)) * Server::ONE_DAY_TIME / 86400.0;
}
// A81188: using guessed type float Server__ONE_DAY_TIME;
// A9763C: using guessed type float Timer__ms_fCurTime;
// B3201C: using guessed type bool Server__ms_bTimeTest;
// B32020: using guessed type float Server__ms_fCurTime;

//----- (004822F0) --------------------------------------------------------
void __thiscall TutorialMgr::TutorialMgr(TutorialMgr *this)
{
  this->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.kID = 0;
  this->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.bOn = 0;
  this->m_kWaitEvent_On_NC_WT_LICENSE_ACK.bOn = 0;
  this->m_kWaitEvent_On_NC_WT_LICENSE_ACK.kID = 0;
  this->m_kWaitEvent_OnShortCutSkill.bOn = 0;
  this->m_kWaitEvent_OnShortCutSkill.kID = 0;
  this->m_kWaitEvent_On_NC_ITEM_UPGRADE_ACK.kID = 0;
  this->m_kWaitEvent_On_NC_ITEM_UPGRADE_ACK.bOn = 0;
  this->m_kWaitEvent_OpenItemUpgradeWin.kID = 0;
  this->m_kWaitEvent_OpenItemUpgradeWin.bOn = 0;
  this->m_kWaitEvent_OnSPSoulStoneUse_Key.kID = 0;
  this->m_kWaitEvent_OnSPSoulStoneUse_Key.bOn = 0;
  this->m_kWaitEvent_OnHPSoulStoneUse_Key.kID = 0;
  this->m_kWaitEvent_OnHPSoulStoneUse_Key.bOn = 0;
  this->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.kID = 0;
  this->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.bOn = 0;
  this->m_kWaitEvent_OpenInventoryWin.kID = 0;
  this->m_kWaitEvent_OpenInventoryWin.bOn = 0;
  this->m_kWaitEvent_OpenWeaponTitleWin.kID = 0;
  this->m_kWaitEvent_OpenWeaponTitleWin.bOn = 0;
  memset(TutorialMgr::m_arrPass, 0, 0x64u);
}

//----- (00482360) --------------------------------------------------------
TutorialMgr *__cdecl TutorialMgr::GetTutorialMgr()
{
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  return &kTutorialMgr;
}
// A98300: using guessed type int _local static guard_;

//----- (00482390) --------------------------------------------------------
bool __thiscall ChatBlockListWin::IsRestrictID(ChatBlockListWin *this, Name5 kCharID)
{
  return CChatRestrict::Get(&this->m_RestrictList, &kCharID) != 0;
}

//----- (004823B0) --------------------------------------------------------
int std::list<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Splice_same(...)
{
  unsigned int v6; // edx@2
  int v7; // ecx@5

  if ( this != _Right )
  {
    v6 = this->baseclass_0.baseclass_0._Mysize;
    if ( 153391688 - v6 < _Count )
      std::_Xlength_error("list<T> too long");
    this->baseclass_0.baseclass_0._Mysize = _Count + v6;
    _Right->baseclass_0.baseclass_0._Mysize -= _Count;
  }
  **(_DWORD **)(*(_DWORD *)&_First + 4) = _Last;
  **(_DWORD **)(*(_DWORD *)&_Last + 4) = _Where;
  **(_DWORD **)(*(_DWORD *)&_Where + 4) = _First;
  v7 = *(_DWORD *)(*(_DWORD *)&_Where + 4);
  *(_DWORD *)(*(_DWORD *)&_Where + 4) = *(_DWORD *)(*(_DWORD *)&_Last + 4);
  *(_DWORD *)(*(_DWORD *)&_Last + 4) = *(_DWORD *)(*(_DWORD *)&_First + 4);
  *(_DWORD *)(*(_DWORD *)&_First + 4) = v7;
}

//----- (00482430) --------------------------------------------------------
ScenarioMgr *__cdecl ScenarioMgr::GetScenarioMgr()
{
  void *v0; // eax@5
  std::exception this; // [sp+0h] [bp-1Ch]@8
  char *_What; // [sp+Ch] [bp-10h]@8
  int v4; // [sp+18h] [bp-4h]@2

  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    v4 = 0;
    if ( !(_local_static_guard_ & 1) )
    {
      _local_static_guard_ |= 1u;
      TutorialMgr::TutorialMgr(&kTutorialMgr);
      atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
    }
    kScenarioMgr.m_listScenatio.baseclass_0.baseclass_0._Mysize = 0;
    v0 = operator new(0xCu);
    if ( v0 )
    {
      *(_DWORD *)&kScenarioMgr.m_listScenatio.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v0;
      *(_DWORD *)v0 = v0;
      *(_DWORD *)(*(_DWORD *)&kScenarioMgr + 4) = *(_DWORD *)&kScenarioMgr;
      kScenarioMgr.m_pTutorialMgr = &kTutorialMgr;
      atexit(_dynamic_atexit_destuctor_for__kScenarioMgr__);
    }
    _What = 0;
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
  }
  return &kScenarioMgr;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A98300: using guessed type int _local static guard_;
// A98314: using guessed type int _local static guard_;

//----- (00482510) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::_Move<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___std::basic_string<char_std::char_traits<char>_std::allocator<char>>__>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_First, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Last, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // edi@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@11

  v4 = _First;
  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v5 = _Dest;
    do
    {
      if ( v5 != v4 )
      {
        if ( v5->baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&v5->baseclass_0.___u0.baseclass_0.dummy[0]);
        v5->baseclass_0._Myres = 15;
        v5->baseclass_0._Mysize = 0;
        v5->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( v4->baseclass_0._Myres >= 0x10 )
        {
          *(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
          *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        else
        {
          memmove(
            v5->baseclass_0.___u0.baseclass_0.dummy,
            v4->baseclass_0.___u0.baseclass_0.dummy,
            v4->baseclass_0._Mysize + 1);
        }
        v5->baseclass_0._Mysize = v4->baseclass_0._Mysize;
        v5->baseclass_0._Myres = v4->baseclass_0._Myres;
        v4->baseclass_0._Myres = 15;
        v4->baseclass_0._Mysize = 0;
        v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
      ++v4;
      ++v5;
    }
    while ( v4 != _Last );
    result = v5;
  }
  return result;
}

//----- (004825A0) --------------------------------------------------------
int std::_List_val<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::_Buynode<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(...)
{
  void *v4; // esi@1
  std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *v5; // edx@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // ecx@2
  int v8; // [sp-10h] [bp-30h]@1
  std::exception thisa; // [sp+0h] [bp-20h]@5
  void *p; // [sp+Ch] [bp-14h]@1
  int *v11; // [sp+10h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-4h]@2

  v11 = &v8;
  v4 = operator new(0x24u);
  p = v4;
  if ( !v4 )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  *(_DWORD *)v4 = _Next;
  v6 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 8);
  v12 = 0;
  *((_DWORD *)v4 + 1) = v5;
  _Next = (std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *)((char *)v4 + 8);
  _Prev = (std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *)((char *)v4 + 8);
  LOBYTE(v12) = 1;
  if ( v4 != (void *)-8 )
  {
    *((_DWORD *)v4 + 6) = 0;
    *((_DWORD *)v4 + 7) = 15;
    v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v6, _Val);
  }
  return (std::_List_nod<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00482670) --------------------------------------------------------
void __thiscall GameFrameWork::OnF7(GameFrameWork *this)
{
  Char::FadeInfoReset(g_pkMainChar);
}

//----- (00482680) --------------------------------------------------------
void __thiscall GameFrameWork::OnF8(GameFrameWork *this)
{
  Char::StartFadeIn(g_pkMainChar);
}

//----- (00482690) --------------------------------------------------------
void __thiscall GameFrameWork::OnF9(GameFrameWork *this)
{
  Char::StartFadeOut(g_pkMainChar);
}

//----- (004826D0) --------------------------------------------------------
GatherType __cdecl GatherInfoTable::MapMobTypeToGatherType(MobType eType)
{
  GatherType result; // eax@2

  switch ( eType )
  {
    case 9:
    case 21:
      result = 0;
      break;
    case 10:
      result = 2;
      break;
    default:
      result = 1;
      break;
  }
  return result;
}

//----- (00482730) --------------------------------------------------------
void __thiscall GatheringTask::OnStart(GatheringTask *this)
{
  GatheringTask *v1; // esi@1
  GatheringWin *v2; // eax@1

  v1 = this;
  v2 = GatheringWin::CreateWin(0);
  v1->m_pkGatheringWin = v2;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  ((void (__stdcall *)(_DWORD))v1->m_pkGatheringWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  PgWin::EnableOpenCloseSound(&v1->m_pkGatheringWin->baseclass_0.baseclass_0.baseclass_0, 0);
  v1->m_eState = 0;
}

//----- (00482780) --------------------------------------------------------
void __cdecl HSDebug_Log(char *pPath, void *pData)
{
  _iobuf *v2; // esi@1
  tm *v3; // eax@2
  char *v4; // eax@4
  __int64 ltime; // [sp+4h] [bp-2Ch]@2
  char acDateTime[32]; // [sp+Ch] [bp-24h]@3
  unsigned int v7; // [sp+2Ch] [bp-4h]@1
  int v8; // [sp+30h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = fopen(pPath, "a");
  if ( v2 )
  {
    _time64(&ltime);
    v3 = _localtime64(&ltime);
    if ( v3 )
      strftime(acDateTime, 0x1Fu, "%m-%d %H:%M :%S", v3);
    v4 = fs("Time : %s\n");
    fprintf(v2, v4);
    fclose(v2);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00482810) --------------------------------------------------------
void __thiscall GameFrameWork::ApplyShortCutSizeData(GameFrameWork *this)
{
  signed int v1; // eax@1
  signed int v2; // edi@1
  GameFrameWork *v3; // esi@1
  ShortCutWin *v4; // ebx@4
  unsigned int v5; // edx@4
  PgWin **v6; // edi@13
  int v7; // ebx@13
  ShortCutWin **v8; // esi@15
  signed int v9; // edi@15

  v1 = BYTE3(dword_B5BB54);
  v2 = 0;
  v3 = this;
  ShortCutWin::m_uiShortcutSubWinIndex = BYTE3(dword_B5BB54);
  if ( BYTE2(dword_B5BB54) )
  {
    do
    {
      if ( v2 )
      {
        if ( byte_B5BB5A[3 * v2] )
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, *((PgWin **)&v3->m_pkShortCutWin + v2));
          PgWinMgr::ShowWin(&Pgg_kWinMgr, *((PgWin **)&v3->m_pkShortCutWinV + v2));
          v4 = (ShortCutWin *)*((_DWORD *)&v3->m_pkShortCutWinV + v2);
        }
        else
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, *((PgWin **)&v3->m_pkShortCutWinV + v2));
          PgWinMgr::ShowWin(&Pgg_kWinMgr, *((PgWin **)&v3->m_pkShortCutWin + v2));
          v4 = (ShortCutWin *)*((_DWORD *)&v3->m_pkShortCutWin + v2);
        }
        v5 = (unsigned __int8)byte_B5BB59[3 * v2];
      }
      else
      {
        if ( byte_B5BB5A[0] )
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0);
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0);
          v4 = v3->m_pkShortCutWinV;
          v5 = (unsigned __int8)byte_B5BB59[0];
        }
        else
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0);
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0);
          v4 = v3->m_pkShortCutWin;
          v5 = (unsigned __int8)byte_B5BB59[0];
        }
      }
      v4->m_uiCurPage = v5;
      ShortCutWin::ResetIconWin(v4);
      ShortCutWin::SetPageTextWin(v4);
      ++v2;
    }
    while ( v2 < BYTE2(dword_B5BB54) );
    v1 = ShortCutWin::m_uiShortcutSubWinIndex;
  }
  if ( v1 < 4 )
  {
    v6 = (PgWin **)&v3->m_pkShortCutSubWinV[v1];
    v7 = 4 - v1;
    do
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, *(v6 - 5));
      PgWinMgr::CloseWin(&Pgg_kWinMgr, *v6);
      ++v6;
      --v7;
    }
    while ( v7 );
  }
  ShortCutWin::SizeBtnPosToStatus(v3->m_pkShortCutWin);
  ShortCutWin::ReflashShortCutWin(v3->m_pkShortCutWin);
  ShortCutWin::SizeBtnPosToStatus(v3->m_pkShortCutWinV);
  ShortCutWin::ReflashShortCutWin(v3->m_pkShortCutWinV);
  v8 = v3->m_pkShortCutSubWinV;
  v9 = 4;
  do
  {
    ShortCutWin::SizeBtnPosToStatus(*(v8 - 5));
    ShortCutWin::ReflashShortCutWin(*(v8 - 5));
    ShortCutWin::SizeBtnPosToStatus(*v8);
    ShortCutWin::ReflashShortCutWin(*v8);
    ++v8;
    --v9;
  }
  while ( v9 );
}
// A99D80: using guessed type unsigned int ShortCutWin__m_uiShortcutSubWinIndex;
// B5BB54: using guessed type int dword_B5BB54;

//----- (004829C0) --------------------------------------------------------
void __thiscall GameFrameWork::ApplyKeyMappingData(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  ShortCutWin **v2; // edi@5
  signed int v3; // ebx@5

  v1 = this;
  if ( CharSelectFrameWork::m_bLoadNewKeyMapOption )
  {
    KeyRemappingWin::SetSyncFromOpt(this->m_pkKeyRemappingWin, 1);
  }
  else
  {
    if ( CharSelectFrameWork::ms_bLoadKeyMappingOptionSuccess )
    {
      KeyRemappingWin::SaveDefalultKeyRemapping(this->m_pkKeyRemappingWin, 0);
      KeyRemappingWin::LoadDefalultKeyRemapping(v1->m_pkKeyRemappingWin, 0);
      KeyRemappingWin::ReflashContents(v1->m_pkKeyRemappingWin);
    }
  }
  v2 = v1->m_pkShortCutSubWinV;
  v3 = 4;
  do
  {
    ShortCutWin::ReflashHotKey(v1->m_pkShortCutWin);
    ShortCutWin::ReflashHotKey(v1->m_pkShortCutWinV);
    ShortCutWin::ReflashHotKey(*(v2 - 5));
    ShortCutWin::ReflashHotKey(*v2);
    ++v2;
    --v3;
  }
  while ( v3 );
}
// A9438D: using guessed type bool CharSelectFrameWork__m_bLoadNewKeyMapOption;
// A9438F: using guessed type bool CharSelectFrameWork__ms_bLoadKeyMappingOptionSuccess;

//----- (00482A50) --------------------------------------------------------
void __thiscall GameFrameWork::RegistereWinPostion(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin **v2; // edi@71
  signed int v3; // ebx@71
  PgWin *v4; // esi@77

  v1 = this;
  if ( this->m_pkStatusWin )
    MachineOpt::RegistereWinPostion(&this->m_pkStatusWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkTargetWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkChatDisplayWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkChatDisplayWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkSysMsgDisplayWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkSysMsgDisplayWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkCharInfoWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkInventoryWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkSkillWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkSystemWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkSystemWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkMiniHouseMenuWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkMiniHouseMenuWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkPrivateStoreWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkDivideWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkDivideWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkMoneyWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkMoneyWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkMainCharSpeechBubbleWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkMainCharSpeechBubbleWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkKQuestTimeWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkKQuestTimeWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkIDTimeWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkIDTimeWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkKingDomQuest )
    MachineOpt::RegistereWinPostion(&v1->m_pkKingDomQuest->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkActionWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkQuestWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkPuzzleTimeWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkPuzzleTimeWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkCalculatorWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkCalculatorWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkItemShopWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkUserTradeWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkUserTradeWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkNPCSkillWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkNPCSoulWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkStorageWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkStorageWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkEnchantGemWin1 )
    MachineOpt::RegistereWinPostion(&v1->m_pkEnchantGemWin1->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkEnchantGemWin2 )
    MachineOpt::RegistereWinPostion(&v1->m_pkEnchantGemWin2->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkEnchantGemWin3 )
    MachineOpt::RegistereWinPostion(&v1->m_pkEnchantGemWin3->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkWeaponTitleWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkWeaponTitleWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkItemShopWin2 )
    MachineOpt::RegistereWinPostion(&v1->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkMiniMapWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkMainMenuWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkMainMenuWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkShortCutWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkShortCutWinV )
    MachineOpt::RegistereWinPostion(&v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkKQPKRealTimeRankWin )
    MachineOpt::RegistereWinPostion(&v1->m_pkKQPKRealTimeRankWin->baseclass_0.baseclass_0.baseclass_0);
  v2 = (PgWin **)v1->m_pkShortCutSubWinV;
  v3 = 4;
  do
  {
    if ( *(v2 - 5) )
      MachineOpt::RegistereWinPostion(*(v2 - 5));
    if ( *v2 )
      MachineOpt::RegistereWinPostion(*v2);
    ++v2;
    --v3;
  }
  while ( v3 );
  v4 = (PgWin *)v1->m_pkTOTWin;
  if ( v4 )
    MachineOpt::RegistereWinPostion(v4);
}

//----- (00482D50) --------------------------------------------------------
PgWin *__thiscall GameFrameWork::GetWinPosByOption(GameFrameWork *this, unsigned int index)
{
  PgWin *result; // eax@1

  result = 0;
  switch ( index )
  {
    case 0u:
      result = (PgWin *)this->m_pkStatusWin;
      break;
    case 1u:
      result = (PgWin *)this->m_pkTargetWin;
      break;
    case 2u:
      result = (PgWin *)this->m_pkShortCutWin;
      break;
    case 3u:
      result = (PgWin *)this->m_pkShortCutWinV;
      break;
    case 4u:
      result = (PgWin *)this->m_pkShortCutSubWin[0];
      break;
    case 5u:
      result = (PgWin *)this->m_pkShortCutSubWin[1];
      break;
    case 6u:
      result = (PgWin *)this->m_pkShortCutSubWin[2];
      break;
    case 7u:
      result = (PgWin *)this->m_pkShortCutSubWin[3];
      break;
    case 8u:
      result = (PgWin *)this->m_pkShortCutSubWinV[0];
      break;
    case 9u:
      result = (PgWin *)this->m_pkShortCutSubWinV[1];
      break;
    case 0xAu:
      result = (PgWin *)this->m_pkShortCutSubWinV[2];
      break;
    case 0xBu:
      result = (PgWin *)this->m_pkShortCutSubWinV[3];
      break;
    case 0xCu:
      result = (PgWin *)this->m_pkItemUpgradeWin;
      break;
    case 0xDu:
      result = (PgWin *)this->m_pkMoverUpgradeWin;
      break;
    case 0xEu:
      result = (PgWin *)this->m_pkFriendWin;
      break;
    case 0xFu:
      result = (PgWin *)this->m_pkFriendAddWin;
      break;
    case 0x10u:
      result = (PgWin *)this->m_pkActionWin;
      break;
    case 0x11u:
      result = (PgWin *)this->m_pkKingDomQuest;
      break;
    case 0x12u:
      result = (PgWin *)this->m_pkOptionWin;
      break;
    case 0x13u:
      result = (PgWin *)this->m_pkCharInfoWin;
      break;
    case 0x14u:
      result = (PgWin *)this->m_pkInventoryWin;
      break;
    case 0x15u:
      result = (PgWin *)this->m_pkSkillWin;
      break;
    case 0x16u:
      result = (PgWin *)this->m_pkMiniMapWin;
      break;
    case 0x17u:
      result = (PgWin *)this->m_pkChatDisplayWin;
      break;
    case 0x18u:
      result = (PgWin *)this->m_pkSysMsgDisplayWin;
      break;
    case 0x19u:
      result = (PgWin *)this->m_pkTOTWin;
      break;
    case 0x1Au:
      result = (PgWin *)this->m_pkItemMixWin;
      break;
    default:
      return result;
  }
  return result;
}

//----- (00482EF0) --------------------------------------------------------
void __thiscall GameFrameWork::SetRewardWinQuestID(GameFrameWork *this, unsigned __int16 hQuestID)
{
  RewardWin *v2; // ecx@1

  v2 = this->m_pkRewardWin;
  if ( v2 )
    RewardWin::UpdateReward(v2, hQuestID);
}

//----- (00482F10) --------------------------------------------------------
void __thiscall GameFrameWork::ApplyWindowPosData(GameFrameWork *this)
{
  unsigned int v1; // ebx@1
  GameFrameWork *v2; // edi@1
  void *v3; // esi@3
  unsigned int v4; // eax@32
  unsigned int v5; // ecx@32
  unsigned int i; // [sp+2Ch] [bp-4h]@1

  v1 = 0;
  v2 = this;
  i = 0;
  if ( dword_A82606 )
  {
    while ( 1 )
    {
      switch ( v1 )
      {
        case 0u:
          v3 = v2->m_pkStatusWin;
          goto LABEL_30;
        case 1u:
          v3 = v2->m_pkTargetWin;
          goto LABEL_30;
        case 2u:
          v3 = v2->m_pkShortCutWin;
          goto LABEL_30;
        case 3u:
          v3 = v2->m_pkShortCutWinV;
          goto LABEL_30;
        case 4u:
          v3 = v2->m_pkShortCutSubWin[0];
          goto LABEL_30;
        case 5u:
          v3 = v2->m_pkShortCutSubWin[1];
          goto LABEL_30;
        case 6u:
          v3 = v2->m_pkShortCutSubWin[2];
          goto LABEL_30;
        case 7u:
          v3 = v2->m_pkShortCutSubWin[3];
          goto LABEL_30;
        case 8u:
          v3 = v2->m_pkShortCutSubWinV[0];
          goto LABEL_30;
        case 9u:
          v3 = v2->m_pkShortCutSubWinV[1];
          goto LABEL_30;
        case 0xAu:
          v3 = v2->m_pkShortCutSubWinV[2];
          goto LABEL_30;
        case 0xBu:
          v3 = v2->m_pkShortCutSubWinV[3];
          goto LABEL_30;
        case 0xCu:
          v3 = v2->m_pkItemUpgradeWin;
          goto LABEL_30;
        case 0xDu:
          v3 = v2->m_pkMoverUpgradeWin;
          goto LABEL_30;
        case 0xEu:
          v3 = v2->m_pkFriendWin;
          goto LABEL_30;
        case 0xFu:
          v3 = v2->m_pkFriendAddWin;
          goto LABEL_30;
        case 0x10u:
          v3 = v2->m_pkActionWin;
          goto LABEL_30;
        case 0x11u:
          v3 = v2->m_pkKingDomQuest;
          goto LABEL_30;
        case 0x12u:
          v3 = v2->m_pkOptionWin;
          goto LABEL_30;
        case 0x13u:
          v3 = v2->m_pkCharInfoWin;
          goto LABEL_30;
        case 0x14u:
          v3 = v2->m_pkInventoryWin;
          goto LABEL_30;
        case 0x15u:
          v3 = v2->m_pkSkillWin;
          goto LABEL_30;
        case 0x16u:
          v3 = v2->m_pkMiniMapWin;
          goto LABEL_30;
        case 0x17u:
          v3 = v2->m_pkChatDisplayWin;
          goto LABEL_30;
        case 0x18u:
          v3 = v2->m_pkSysMsgDisplayWin;
          goto LABEL_30;
        case 0x19u:
          v3 = v2->m_pkTOTWin;
          goto LABEL_30;
        case 0x1Au:
          v3 = v2->m_pkItemMixWin;
LABEL_30:
          if ( !v3 )
            goto LABEL_41;
          if ( v3 == v2->m_pkChatDisplayWin )
          {
            v4 = ruiWidth;
            v5 = ruiHeight;
          }
          else
          {
            if ( v3 != v2->m_pkSysMsgDisplayWin )
              goto LABEL_38;
            v4 = dword_A826E6;
            v5 = dword_A826EE;
          }
          if ( !v4 && !v5 )
            return;
          (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 540))(v3, v4, v5);
LABEL_38:
          (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v3 + 308))(v3);
          if ( v3 == v2->m_pkOptionWin )
            (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(
              v3,
              PgWin::ms_uiScreenWidth,
              PgWin::ms_uiScreenHeight,
              0.0,
              0.5);
          v1 = i;
LABEL_41:
          ++v1;
          i = v1;
          if ( v1 >= dword_A82606 )
            return;
          break;
        default:
          goto LABEL_41;
      }
    }
  }
}
// 482F10: could not find valid save-restore pair for esi
// A82606: using guessed type int dword_A82606;

//----- (00483190) --------------------------------------------------------
void __thiscall GameFrameWork::TerminateNet(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  Net *v3; // edi@2
  PgNet *v4; // ecx@7
  Net *v5; // edi@9

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  if ( v2 )
  {
    PgNet::Close(v2);
    v3 = v1->m_spZoneNet.m_pObject;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      v1->m_spZoneNet.m_pObject = 0;
    }
  }
  v4 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
  if ( v4 )
  {
    if ( !v1->m_bBackCharSelect )
    {
      PgNet::Close(v4);
      v5 = v1->m_spWorldMgrNet.m_pObject;
      if ( v5 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v5 )
            v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
        }
        v1->m_spWorldMgrNet.m_pObject = 0;
      }
    }
  }
}

//----- (00483220) --------------------------------------------------------
bool __thiscall GameFrameWork::InitInput(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  int v2; // ebx@1
  void *v3; // eax@2
  int v4; // eax@3
  KeyMap *v5; // edi@4

  v1 = this;
  v2 = 0;
  if ( !this->m_spKeyMap.m_pObject )
  {
    v3 = operator new(0x20u);
    if ( v3 )
    {
      KeyMap::KeyMap((KeyMap *)v3);
      v2 = v4;
    }
    v5 = v1->m_spKeyMap.m_pObject;
    if ( v5 != (KeyMap *)v2 )
    {
      if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spKeyMap.m_pObject = (KeyMap *)v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    v1->m_spKeyMap.m_pObject->m_pkFrameWork = (PgFrameWork *)v1;
  }
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xBu, KEY_RETURN, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xF4u, KEY_SLASH, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x1Du, KEY_ESCAPE, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x1Eu, KEY_F1, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x1Fu, KEY_F2, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x20u, KEY_F3, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x21u, KEY_F4, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x22u, KEY_F5, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x23u, KEY_F6, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x2Cu, KEY_TAB, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x2Du, KEY_1, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x2Eu, KEY_2, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x2Fu, KEY_3, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x30u, KEY_4, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x31u, KEY_5, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x32u, KEY_6, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x33u, KEY_7, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x34u, KEY_8, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x35u, KEY_9, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x36u, KEY_0, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x37u, KEY_MINUS, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x38u, KEY_EQUALS, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x39u, KEY_1, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x3Au, KEY_2, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x3Bu, KEY_3, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x3Cu, KEY_4, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x3Du, KEY_5, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x3Eu, KEY_6, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x3Fu, KEY_7, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x40u, KEY_8, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x41u, KEY_9, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x42u, KEY_0, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x43u, KEY_MINUS, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x44u, KEY_EQUALS, 0, 0x40u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x45u, KEY_1, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x46u, KEY_2, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x47u, KEY_3, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x48u, KEY_4, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x49u, KEY_5, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x4Au, KEY_6, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x4Bu, KEY_7, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x4Cu, KEY_8, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x4Du, KEY_9, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x4Eu, KEY_0, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x4Fu, KEY_MINUS, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x50u, KEY_EQUALS, 0, 1u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x51u, KEY_1, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x52u, KEY_2, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x53u, KEY_3, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x54u, KEY_4, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x55u, KEY_5, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x56u, KEY_6, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x57u, KEY_7, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x58u, KEY_8, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x59u, KEY_9, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x5Au, KEY_0, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x5Bu, KEY_MINUS, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x5Cu, KEY_EQUALS, 0, 4u, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x67u, KEY_Z, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x68u, KEY_E, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x69u, KEY_Q, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x6Au, KEY_C, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x6Bu, KEY_I, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x6Cu, KEY_K, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x6Du, KEY_V, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x6Eu, KEY_F, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x6Fu, KEY_M, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xA2u, KEY_H, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xACu, KEY_B, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xADu, KEY_HOME, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x10u, KEY_L, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x70u, KEY_P, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x14u, KEY_X, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xC0u, KEY_END, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0x14u, KEY_X, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xF5u, KEY_G, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xF5u, KEY_O, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xF5u, KEY_T, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xF5u, KEY_R, WAS_RELEASED, 0, 0);
  KeyMap::Add(v1->m_spKeyMap.m_pObject, 0xF5u, KEY_Z, WAS_RELEASED, 0, 0);
  return 1;
}

//----- (00483980) --------------------------------------------------------
void __thiscall GameFrameWork::TerminateInput(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  KeyMap *v2; // esi@1

  v1 = this;
  v2 = this->m_spKeyMap.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spKeyMap.m_pObject = 0;
  }
}

//----- (004839C0) --------------------------------------------------------
void __thiscall GameFrameWork::TerminateWorld(GameFrameWork *this)
{
  if ( g_kSoundMgr.m_pkBGMGroup )
  {
    SoundGroupBgm::SetFadeDurationTime(g_kSoundMgr.m_pkBGMGroup, 0.0);
    SoundMgr::StopBGM(&g_kSoundMgr);
  }
  SoundMgr::StopAllSound(&g_kSoundMgr);
}

//----- (004839F0) --------------------------------------------------------
void __thiscall GameFrameWork::TerminateCharacter(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  Skill::ClearLearnSkill();
  Skill::ClearLearnPassiveSkill();
  if ( g_pkMainChar )
  {
    if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() == 1 )
      Char::Shape_UnMetamorphosis(g_pkMainChar, 0);
    if ( g_pkMainChar && g_pkMainChar->m_kCharShape.m_bAutoPickItem )
      Char::SetItemAutoPickState(g_pkMainChar, 0);
  }
  CharMgr::RemoveAllWithoutMainChar(&g_kCharMgr);
  if ( g_pkMainChar )
    MainChar::ResetOnLink((MainChar *)g_pkMainChar);
  if ( v1->m_pkNpcDlgWin )
  {
    GameFrameWork::NcActEndOfTrade(v1);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v1->m_kSkillCasting.eState = 0;
}

//----- (00483A90) --------------------------------------------------------
void __thiscall GameFrameWork::InitNewCharCreate(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  QuestNewsWin *v4; // ecx@8
  CQuestWin2 *v5; // ecx@12

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bEnable && CharSelectFrameWork::ms_bNewCharCreat )
  {
    v4 = v1->m_pkQuestNewsWin;
    if ( v4 )
    {
      if ( QuestNewsWin::QuestPlayer_LevelChange(v4, 1) )
        EffectMgr::CreatePigeonEffect(&g_kEffectMgr, g_pkMainChar, Timer::ms_fCurTime);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkQuestNewsWin->baseclass_0.baseclass_0.baseclass_0);
    }
    v5 = v1->m_pkQuestWin;
    if ( v5 )
      CQuestWin2::LevelChange(v5, 1);
    NpcDialogWin::OpenNpcQuestDialog(v1->m_pkNpcDlgWin, 0x6Fu, 0x6Eu, 0xFFFFu, 0, 1);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A94393: using guessed type bool CharSelectFrameWork__ms_bNewCharCreat;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00483B90) --------------------------------------------------------
void __thiscall GameFrameWork::TerminateSystem(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  NiCollisionGroup *v2; // esi@1

  v1 = this;
  NiCollisionGroup::RemoveAll(this->m_pkCollisionGroup);
  v2 = v1->m_pkCollisionGroup;
  if ( v2 )
  {
    NiCollisionGroup::_NiCollisionGroup(v2);
    operator delete(v2);
  }
}

//----- (00483BC0) --------------------------------------------------------
void __thiscall GameFrameWork::OnSaveServerShortCutSizeOption(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  PgNet *v3; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-20h]@1
  PROTO_NC_CHAR_OPTION_SET_SHORTCUTSIZE_CMD kCmdShortCutSize; // [sp+8h] [bp-1Ch]@1
  unsigned int v6; // [sp+20h] [bp-4h]@1
  int v7; // [sp+24h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 28689;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  BYTE3(dword_B5BB54) = ShortCutWin::m_uiShortcutSubWinIndex;
  BYTE2(dword_B5BB54) = 5;
  *(_DWORD *)&kCmdShortCutSize.Data.Data[0] = MachineOpt::ms_shortCutSizeOptionData;
  *(_DWORD *)&kCmdShortCutSize.Data.Data[4] = dword_B5BB54;
  *(_DWORD *)&kCmdShortCutSize.Data.Data[12] = dword_B5BB5C;
  *(_DWORD *)&kCmdShortCutSize.Data.Data[8] = *(_DWORD *)byte_B5BB58;
  *(_DWORD *)&kCmdShortCutSize.Data.Data[16] = dword_B5BB60;
  v3 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
  *(_DWORD *)&kCmdShortCutSize.Data.Data[20] = dword_B5BB64;
  PgNet::SendNetMsg(v3, &kCmdShortCutSize, 24);
  PgNet::Flush(&v1->m_spWorldMgrNet.m_pObject->baseclass_0);
}
// A85C00: using guessed type int __security_cookie;
// A99D80: using guessed type unsigned int ShortCutWin__m_uiShortcutSubWinIndex;
// B5BB54: using guessed type int dword_B5BB54;
// B5BB5C: using guessed type int dword_B5BB5C;
// B5BB60: using guessed type int dword_B5BB60;
// B5BB64: using guessed type int dword_B5BB64;

//----- (00483C60) --------------------------------------------------------
void __thiscall GameFrameWork::OnSaveServerWindowPosOption(GameFrameWork *this)
{
  GameFrameWork *v1; // ebx@1
  PgNet *v2; // ecx@1
  unsigned int v3; // edi@1
  PgWin *v4; // eax@2
  ChatDisplayWin2 *v5; // esi@2
  NiRefObjectVtbl *v6; // edx@3
  double v7; // st7@3
  NiRefObjectVtbl *v8; // eax@3
  float v9; // ST18_4@3
  PgNet *v10; // ecx@8
  NETCOMMAND netcmd; // [sp+10h] [bp-198h]@1
  unsigned int v12; // [sp+14h] [bp-194h]@3
  int fYPosRate; // [sp+18h] [bp-190h]@3
  PROTO_NC_CHAR_OPTION_SET_WINDOWPOS_CMD kCmd; // [sp+1Ch] [bp-18Ch]@1
  unsigned int v15; // [sp+1A4h] [bp-4h]@1
  int v16; // [sp+1A8h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 28693;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  memset(kCmd.Data.Data, 0, 0x188u);
  v3 = 0;
  if ( dword_A82606 )
  {
    do
    {
      v4 = GameFrameWork::GetWinPosByOption(v1, v3);
      v5 = (ChatDisplayWin2 *)v4;
      if ( v4 )
      {
        v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        fYPosRate = PgWin::ms_uiScreenWidth;
        v12 = ((int (__thiscall *)(PgWin *))v6[41].__vecDelDtor)(v4);
        v7 = (double)(signed int)v12 / (double)(unsigned int)fYPosRate;
        v8 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v12 = PgWin::ms_uiScreenHeight;
        v9 = v7;
        fYPosRate = ((int (__thiscall *)(ChatDisplayWin2 *))v8[42].__vecDelDtor)(v5);
        *(float *)&fYPosRate = (double)fYPosRate / (double)v12;
        flt_A8260A[2 * v3] = v9;
        flt_A8260E[2 * v3] = *(float *)&fYPosRate;
        if ( v5 == v1->m_pkChatDisplayWin )
        {
          ChatDisplayWin2::GetSize(v5, &ruiWidth, &ruiHeight);
        }
        else
        {
          if ( (SysMsgDisplayWin *)v5 == v1->m_pkSysMsgDisplayWin )
            ChatDisplayWin::GetSize((ChatDisplayWin *)v5, &dword_A826E6, &dword_A826EE);
        }
      }
      ++v3;
    }
    while ( v3 < dword_A82606 );
  }
  memcpy(&kCmd, &MachineOpt::m_stSaveWinPosOption, 0xF8u);
  v10 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
  *(_WORD *)&kCmd.Data.Data[248] = *((_WORD *)&MachineOpt::m_stSaveWinPosOption + 124);
  PgNet::SendNetMsg(v10, &kCmd, 392);
  PgNet::Flush(&v1->m_spWorldMgrNet.m_pObject->baseclass_0);
}
// A82606: using guessed type int dword_A82606;
// A8260A: using guessed type float flt_A8260A[];
// A8260E: using guessed type float flt_A8260E[];
// A85C00: using guessed type int __security_cookie;

//----- (00483E00) --------------------------------------------------------
void __thiscall GameFrameWork::OnSaveServerKeyRemappingOption(GameFrameWork *this)
{
  GameFrameWork *v1; // ebx@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-13Ch]@1
  PROTO_NC_CHAR_OPTION_SET_KEYMAPPING_CMD kCmd; // [sp+10h] [bp-138h]@1
  unsigned int v5; // [sp+144h] [bp-4h]@1
  int v6; // [sp+148h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 28694;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  memset(kCmd.Data.Data, 0, 0x134u);
  memcpy(&kCmd, &MachineOpt::m_keyMappingBuff, 0xF4u);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kCmd, 308);
  PgNet::Flush(&v1->m_spWorldMgrNet.m_pObject->baseclass_0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00483EA0) --------------------------------------------------------
void __thiscall GameFrameWork::OnSaveServerGameOption(GameFrameWork *this)
{
  char v1; // bl@1
  signed int v2; // edx@1
  char *v3; // eax@1
  char v4; // cl@3
  char DummyMem[1024]; // [sp+8h] [bp-404h]@1
  unsigned int v6; // [sp+408h] [bp-4h]@1
  int v7; // [sp+40Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  memset(&DummyMem[1], 0, 0x3FFu);
  v1 = byte_B5BB20;
  strcpy(DummyMem, "\x1C");
  v2 = 0;
  v3 = &DummyMem[4];
  do
  {
    *((_WORD *)v3 - 1) = v2;
    switch ( (unsigned __int16)v2 )
    {
      case 0u:
        v4 = byte_B5BB1E;
        goto LABEL_25;
      case 1u:
        v4 = byte_B5BB1F;
        goto LABEL_25;
      case 2u:
      case 0x15u:
        *v3 = v1;
        break;
      case 3u:
        v4 = byte_B5BB21;
        goto LABEL_25;
      case 4u:
        v4 = byte_B5BB22;
        goto LABEL_25;
      case 5u:
        v4 = byte_B5BB23;
        goto LABEL_25;
      case 6u:
        v4 = byte_B5BB24;
        goto LABEL_25;
      case 7u:
        v4 = byte_B5BB25;
        goto LABEL_25;
      case 8u:
        v4 = byte_B5BB26;
        goto LABEL_25;
      case 9u:
        v4 = byte_B5BB4B;
        goto LABEL_25;
      case 0xAu:
        v4 = byte_B5BB4C;
        goto LABEL_25;
      case 0xBu:
        v4 = byte_B5BB4D;
        goto LABEL_25;
      case 0xCu:
        v4 = byte_B5BB28;
        goto LABEL_25;
      case 0xDu:
        v4 = byte_B5BB29;
        goto LABEL_25;
      case 0xEu:
        v4 = byte_B5BB2A;
        goto LABEL_25;
      case 0xFu:
        v4 = byte_B5BB2B;
        goto LABEL_25;
      case 0x10u:
        v4 = byte_B5BB2C;
        goto LABEL_25;
      case 0x11u:
        v4 = byte_B5BB2D;
        goto LABEL_25;
      case 0x13u:
        v4 = byte_B5BB46;
        goto LABEL_25;
      case 0x14u:
        v4 = byte_B5BB47;
        goto LABEL_25;
      case 0x16u:
        v4 = byte_B5BB48;
        goto LABEL_25;
      case 0x1Bu:
        v4 = byte_B5BB4E;
LABEL_25:
        *v3 = v4;
        break;
      default:
        break;
    }
    ++v2;
    v3 += 3;
  }
  while ( v2 < *(unsigned __int16 *)DummyMem );
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Cu, 0x3Bu, DummyMem, 3 * *(unsigned __int16 *)DummyMem + 2);
}
// A85C00: using guessed type int __security_cookie;
// B5BB1E: using guessed type char byte_B5BB1E;
// B5BB1F: using guessed type char byte_B5BB1F;
// B5BB20: using guessed type char byte_B5BB20;
// B5BB21: using guessed type char byte_B5BB21;
// B5BB22: using guessed type char byte_B5BB22;
// B5BB23: using guessed type char byte_B5BB23;
// B5BB24: using guessed type char byte_B5BB24;
// B5BB25: using guessed type char byte_B5BB25;
// B5BB26: using guessed type char byte_B5BB26;
// B5BB28: using guessed type char byte_B5BB28;
// B5BB29: using guessed type char byte_B5BB29;
// B5BB2A: using guessed type char byte_B5BB2A;
// B5BB2B: using guessed type char byte_B5BB2B;
// B5BB2C: using guessed type char byte_B5BB2C;
// B5BB2D: using guessed type char byte_B5BB2D;
// B5BB46: using guessed type char byte_B5BB46;
// B5BB47: using guessed type char byte_B5BB47;
// B5BB48: using guessed type char byte_B5BB48;
// B5BB4B: using guessed type char byte_B5BB4B;
// B5BB4C: using guessed type char byte_B5BB4C;
// B5BB4D: using guessed type char byte_B5BB4D;
// B5BB4E: using guessed type char byte_B5BB4E;

//----- (00484070) --------------------------------------------------------
GatherInfo *__thiscall GatheringTask::FindGatherInfo(GatheringTask *this, GatherType eType, unsigned __int16 nItemID)
{
  int v3; // esi@1
  int v4; // esi@2
  int v5; // eax@3
  int v6; // edx@6
  unsigned int v7; // edi@10
  GatherInfo *result; // eax@11
  bool v9; // zf@15

  v3 = 0;
  if ( nItemID != -1 )
  {
    v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            nItemID) )
    {
      if ( nItemID <= *(_WORD *)(v4 + 200) )
      {
        v6 = *(_DWORD *)(v4 + 196);
        if ( *(_DWORD *)(v6 + 4 * nItemID) )
          v5 = *(_DWORD *)(v6 + 4 * nItemID);
        else
          v5 = 0;
      }
      else
      {
        v5 = 0;
      }
    }
    else
    {
      v5 = 0;
    }
    v3 = v5;
  }
  v7 = 0;
  if ( ITableBase<GatherInfo_GatherInfoTable>::GetTotal() )
  {
    while ( 1 )
    {
      result = (GatherInfo *)CDataReader::GetRecord(
                               (CDataReader *)(ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 4),
                               v7);
      if ( result && result->Type == eType )
      {
        if ( v3 )
        {
          v9 = strcmp(result->NeededTool0, (const char *)(v3 + 2)) == 0;
        }
        else
        {
          if ( !eType )
            return result;
          v9 = eType == 2;
        }
        if ( v9 )
          break;
      }
      ++v7;
      if ( v7 >= ITableBase<GatherInfo_GatherInfoTable>::GetTotal() )
        return 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E2C: using guessed type int ITableBase_GatherInfo_GatherInfoTable___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00484150) --------------------------------------------------------
bool __thiscall GameFrameWork::InitNet(GameFrameWork *this)
{
  Net *v1; // ebx@1
  GameFrameWork *v2; // edi@1
  Net *v3; // esi@1
  bool result; // al@9
  Net *v5; // esi@10
  Net *v6; // ebx@10

  v1 = g_kNetMgr.m_spZone[g_kNetMgr.m_iNowConnectedZone].m_pObject;
  v2 = this;
  v3 = this->m_spZoneNet.m_pObject;
  if ( v3 != v1 )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spZoneNet.m_pObject = v1;
    if ( v1 )
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !v2->m_spZoneNet.m_pObject )
    goto LABEL_21;
  v5 = v2->m_spWorldMgrNet.m_pObject;
  v6 = g_kNetMgr.m_spWorldMgr.m_pObject;
  if ( v5 != g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v2->m_spWorldMgrNet.m_pObject = v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v2->m_spWorldMgrNet.m_pObject )
  {
    PgNet::ContinueDispatchMsg(&v2->m_spZoneNet.m_pObject->baseclass_0);
    result = 1;
  }
  else
  {
LABEL_21:
    result = 0;
  }
  return result;
}

//----- (00484210) --------------------------------------------------------
void __thiscall GameFrameWork::ChangeWinDefaultPos(GameFrameWork *this)
{
  signed int v1; // esi@0
  GameFrameWork *v2; // edi@1
  int v3; // ebx@1
  MiniMapWin *v4; // eax@9
  FullMapWin *v5; // eax@10
  PgWin *v6; // ecx@12
  PgWin *v7; // ecx@14
  NiRefObjectVtbl *v8; // esi@20
  int v9; // eax@20
  int v10; // esi@22
  int v11; // eax@24
  float v12; // ecx@24
  int v13; // ebx@24
  int (*v14)(void); // edx@24
  int v15; // eax@24
  int v16; // eax@24
  int v17; // ebx@28
  int v18; // eax@28
  int v19; // eax@28
  int v20; // edx@28
  int v21; // ebx@28
  int v22; // eax@28
  FullMapWin *v23; // ecx@32
  ChatDisplayWin2 *v24; // ecx@34
  double v25; // st7@35
  int v26; // esi@35
  void (__thiscall *v27)(_DWORD, _DWORD, _DWORD); // edx@35
  ChatDisplayWin *v28; // ecx@36
  double v29; // st7@37
  int v30; // esi@37
  void (__thiscall *v31)(_DWORD, _DWORD, _DWORD); // edx@37
  StatusBuffWin *v32; // ecx@50
  int v33; // esi@51
  void (__thiscall *v34)(_DWORD, _DWORD, _DWORD); // edx@51
  StatusBuffWin *v35; // ecx@52
  int v36; // esi@53
  void (__thiscall *v37)(_DWORD, _DWORD, _DWORD); // edx@53
  StatusBuffWin *v38; // ecx@54
  int v39; // esi@55
  void (__thiscall *v40)(_DWORD, _DWORD, _DWORD); // edx@55
  GTIFlagWin *v41; // eax@61
  GTIFlagWin *v42; // eax@63
  signed int v43; // [sp+200h] [bp-34h]@19
  int v44; // [sp+20Ch] [bp-28h]@35
  int v45; // [sp+210h] [bp-24h]@35
  int v46; // [sp+214h] [bp-20h]@35
  int v47; // [sp+218h] [bp-1Ch]@35
  int uiWidth; // [sp+21Ch] [bp-18h]@35
  int uiHeight; // [sp+220h] [bp-14h]@24
  float v50; // [sp+224h] [bp-10h]@24
  unsigned int uiHeightRate; // [sp+228h] [bp-Ch]@22
  float uiColumn; // [sp+22Ch] [bp-8h]@16
  int uiRow; // [sp+230h] [bp-4h]@16

  v2 = this;
  v3 = 0;
  if ( this->m_pkCharInfoWin )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))this->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.0,
      0.5);
  if ( v2->m_pkMiniHouseMenuWin )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkMiniHouseMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
  if ( v2->m_pkCurrentCommunityWin )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkCurrentCommunityWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
  if ( v2->m_pkPrivateStoreWin )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
  v4 = v2->m_pkMiniMapWin;
  if ( v4 )
  {
    v5 = v4->m_pkFullMapWin;
    if ( v5 )
      ((void (__thiscall *)(FullMapWin *, unsigned int, unsigned int, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v5,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.5);
  }
  v6 = (PgWin *)v2->m_pkStatusWin;
  if ( v6 )
    PgWin::InitPosLeftTop(v6, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 0.0, 0.0);
  v7 = (PgWin *)v2->m_pkMiniMapWin;
  if ( v7 )
    PgWin::InitPosRightTop(v7, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 1.0, 0.0);
  uiColumn = 0.0;
  uiRow = 0;
  if ( v2->m_pkShortCutWin )
  {
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.0,
      1.0);
    if ( v2->m_pkShortCutWin->m_bShowFlag )
      uiRow = 1;
  }
  v43 = v1;
  if ( v2->m_pkShortCutWinV )
  {
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      1.0,
      0.0);
    v8 = v2->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = ((int (__stdcall *)(signed int))v2->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(160);
    v8[77].__vecDelDtor((NiRefObject *)v2->m_pkShortCutWinV, v9);
    if ( v2->m_pkShortCutWinV->m_bShowFlag )
      LODWORD(uiColumn) = 1;
  }
  v10 = (int)v2->m_pkShortCutSubWinV;
  uiHeightRate = 4;
  do
  {
    if ( *(_DWORD *)(v10 - 20) != v3 )
    {
      (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)(v10 - 20) + 236))(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.0,
        1.0);
      v11 = (*(int (**)(void))(**(_DWORD **)(v10 - 20) + 148))();
      LODWORD(v12) = *(_DWORD *)(v10 - 20);
      v13 = uiRow * v11;
      uiHeight = **(_DWORD **)(v10 - 20) + 308;
      v14 = *(int (**)(void))(*LODWORD(v12) + 168);
      v50 = v12;
      v15 = v14();
      v16 = (*(int (__stdcall **)(int))(*LODWORD(v50) + 164))(v15 - v13);
      (*(void (__thiscall **)(_DWORD, int))uiHeight)(*(_DWORD *)(v10 - 20), v16);
      if ( *(_BYTE *)(*(_DWORD *)(v10 - 20) + 1094) )
        ++uiRow;
      v3 = 0;
    }
    if ( *(_DWORD *)v10 != v3 )
    {
      (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v10 + 236))(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        1.0,
        0.0);
      v17 = **(_DWORD **)v10;
      v18 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v10 + 164))(160);
      (*(void (__thiscall **)(_DWORD, int))(v17 + 308))(*(_DWORD *)v10, v18);
      v19 = (*(int (**)(void))(**(_DWORD **)v10 + 144))();
      v20 = **(_DWORD **)v10;
      v21 = LODWORD(uiColumn) * v19;
      uiHeight = **(_DWORD **)v10 + 308;
      v22 = (*(int (__stdcall **)(signed int))(v20 + 164))(160);
      (*(void (__thiscall **)(_DWORD, int))uiHeight)(*(_DWORD *)v10, v22 - v21);
      if ( *(_BYTE *)(*(_DWORD *)v10 + 1094) )
        ++LODWORD(uiColumn);
      v3 = 0;
    }
    v10 += 4;
    --uiHeightRate;
  }
  while ( *(float *)&uiHeightRate != 0.0 );
  v23 = v2->m_pkMiniMapWin->m_pkFullMapWin;
  if ( v23 != (FullMapWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
  v24 = v2->m_pkChatDisplayWin;
  if ( v24 != (ChatDisplayWin2 *)v3 )
  {
    ChatDisplayWin2::GetSize(v24, (unsigned int *)&uiWidth, (unsigned int *)&uiHeight);
    LODWORD(v50) = PgWin::ms_uiScreenHeight - uiHeight - 100;
    v25 = (double)LODWORD(v50);
    LODWORD(v50) = PgWin::ms_uiScreenHeight;
    v26 = (int)v2->m_pkChatDisplayWin;
    v27 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v26 + 208);
    LODWORD(v50) = PgWin::ms_uiScreenHeight;
    LODWORD(uiColumn) = PgWin::ms_uiScreenWidth;
    uiRow = v26;
    v44 = v3;
    v45 = v3;
    v46 = v3;
    v47 = v3;
    *(float *)&uiHeightRate = v25 / (double)PgWin::ms_uiScreenHeight;
    v27(v26, &v44, v43);
    v43 = (signed int)((double)LODWORD(uiColumn) * 0.0 - (double)v44);
    (*(void (__thiscall **)(int))(*(_DWORD *)v26 + 308))(uiRow);
  }
  v28 = (ChatDisplayWin *)v2->m_pkSysMsgDisplayWin;
  if ( v28 != (ChatDisplayWin *)v3 )
  {
    ChatDisplayWin::GetSize(v28, (unsigned int *)&uiWidth, (unsigned int *)&uiHeight);
    LODWORD(v50) = PgWin::ms_uiScreenHeight - uiHeight - 100;
    v29 = (double)LODWORD(v50);
    LODWORD(v50) = PgWin::ms_uiScreenHeight;
    v30 = (int)v2->m_pkSysMsgDisplayWin;
    v31 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v30 + 208);
    LODWORD(v50) = PgWin::ms_uiScreenHeight;
    LODWORD(uiColumn) = PgWin::ms_uiScreenWidth;
    uiRow = v30;
    v44 = v3;
    v45 = v3;
    v46 = v3;
    v47 = v3;
    *(float *)&uiHeightRate = v29 / (double)PgWin::ms_uiScreenHeight;
    v31(v30, &v44, v43);
    v43 = (signed int)((double)LODWORD(uiColumn) - (double)v45);
    (*(void (__thiscall **)(int))(*(_DWORD *)v30 + 308))(uiRow);
    ChatDisplayWin::SetDefaultSize(&v2->m_pkSysMsgDisplayWin->baseclass_0);
  }
  if ( v2->m_pkTOTWin != (TargetOfTheTargetWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkTOTWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.56999999,
      0.2);
  if ( v2->m_pkTargetWin != (TargetWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.52999997,
      0.0);
  if ( v2->m_pkInventoryWin != (InventoryWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.75,
      0.5);
  if ( v2->m_pkActionWin != (ActionWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.75,
      0.5);
  if ( v2->m_pkSkillWin != (SkillWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.75,
      0.5);
  if ( v2->m_pkQuestWin != (CQuestWin2 *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.75,
      0.5);
  MachineOpt::UserLoginOption::SetDefault(&MachineOpt::ms_kUserLoginOption);
  v32 = v2->m_pkStatusBuffWin;
  if ( v32 != (StatusBuffWin *)v3 )
  {
    StatusBuffWin::SetFrameBoxSize(v32, 0xC8u, 0x14u);
    StatusBuffWin::AlignBuf(v2->m_pkStatusBuffWin, 10, 1);
    v33 = (int)v2->m_pkStatusBuffWin;
    uiColumn = MachineOpt::ms_kUserLoginOption.BufXPos;
    v50 = MachineOpt::ms_kUserLoginOption.BufYPos;
    v34 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v33 + 208);
    uiHeightRate = PgWin::ms_uiScreenWidth;
    uiHeight = PgWin::ms_uiScreenHeight;
    uiRow = v33;
    v44 = v3;
    v45 = v3;
    v46 = v3;
    v47 = v3;
    v34(v33, &v44, v43);
    v43 = (signed int)((double)uiHeightRate * uiColumn - (double)v44);
    (*(void (__thiscall **)(int))(*(_DWORD *)v33 + 308))(uiRow);
  }
  v35 = v2->m_pkStatusDBuffWin;
  if ( v35 != (StatusBuffWin *)v3 )
  {
    StatusBuffWin::SetFrameBoxSize(v35, 0xC8u, 0x14u);
    StatusBuffWin::AlignBuf(v2->m_pkStatusDBuffWin, 10, 1);
    v36 = (int)v2->m_pkStatusDBuffWin;
    uiColumn = MachineOpt::ms_kUserLoginOption.DBufXPos;
    v50 = MachineOpt::ms_kUserLoginOption.DBufYPos;
    v37 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v36 + 208);
    uiHeightRate = PgWin::ms_uiScreenWidth;
    uiHeight = PgWin::ms_uiScreenHeight;
    uiRow = v36;
    v44 = v3;
    v45 = v3;
    v46 = v3;
    v47 = v3;
    v37(v36, &v44, v43);
    v43 = (signed int)((double)uiHeightRate * uiColumn - (double)v44);
    (*(void (__thiscall **)(int))(*(_DWORD *)v36 + 308))(uiRow);
  }
  v38 = v2->m_pkStatusChargedBuffWin;
  if ( v38 != (StatusBuffWin *)v3 )
  {
    StatusBuffWin::SetFrameBoxSize(v38, 0xC8u, 0x14u);
    StatusBuffWin::AlignBuf(v2->m_pkStatusChargedBuffWin, 10, 1);
    v39 = (int)v2->m_pkStatusChargedBuffWin;
    uiColumn = MachineOpt::ms_kUserLoginOption.DBufXPos;
    v40 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v39 + 208);
    uiHeightRate = PgWin::ms_uiScreenWidth;
    v50 = MachineOpt::ms_kUserLoginOption.DBufYPos + 0.02800000086426735;
    uiHeight = PgWin::ms_uiScreenHeight;
    uiRow = v39;
    v44 = v3;
    v45 = v3;
    v46 = v3;
    v47 = v3;
    v40(v39, &v44, v43);
    (*(void (__thiscall **)(int))(*(_DWORD *)v39 + 308))(uiRow);
  }
  if ( v2->m_pkMHMinimizeWin != (mhMinimizeWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkMHMinimizeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.89999998,
      0.30000001);
  if ( v2->m_pkQuestNewsWin != (QuestNewsWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkQuestNewsWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.69999999,
      0.1);
  if ( GuildTask::GetGTIMyFlagWin() )
  {
    v41 = GuildTask::GetGTIMyFlagWin();
    ((void (__thiscall *)(GTIFlagWin *, unsigned int, unsigned int, _DWORD, _DWORD))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v41,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.57999998,
      0.15000001);
  }
  if ( GuildTask::GetGTIEnemyFlagWin() )
  {
    v42 = GuildTask::GetGTIEnemyFlagWin();
    ((void (__thiscall *)(GTIFlagWin *, unsigned int, unsigned int, _DWORD, _DWORD))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v42,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.69999999,
      0.15000001);
  }
  if ( v2->m_pkCastingProgressBar != (CastingProgressWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkCastingProgressBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.80000001);
  if ( v2->m_pkMarketSearchWin != (MarketSearchWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkMarketSearchWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
  if ( v2->m_pkMoverUpgradeWin != (MoverUpgradeWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
  if ( v2->m_pkRandomOptionWin != (RandomOptionWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkRandomOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
  if ( v2->m_pkTermExtendWin != (TermExtendWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkTermExtendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
  if ( v2->m_pkMinimonAutoItemUseWin != (MinimonAutoItemUseWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkMinimonAutoItemUseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
  if ( v2->m_pkItemMixWin != (ItemMixWin *)v3 )
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v2->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
}
// 484210: could not find valid save-restore pair for esi

//----- (00484D60) --------------------------------------------------------
void __thiscall GameFrameWork::SetWindowsPosOption(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  PgWin **v2; // esi@4
  signed int v3; // ebx@4
  PgWin *v4; // ecx@7
  ChatDisplayWin2 *v5; // ecx@10
  double v6; // st7@11
  PgWin *v7; // ecx@11
  ChatDisplayWin *v8; // ecx@12
  double v9; // st7@13
  PgWin *v10; // ecx@13
  PgWin *v11; // ecx@14
  NiRefObjectVtbl *v12; // esi@20
  int v13; // eax@20
  int v14; // esi@22
  int v15; // eax@24
  unsigned int v16; // ecx@24
  int v17; // ebx@24
  int (*v18)(void); // edx@24
  int v19; // eax@24
  int v20; // eax@24
  int v21; // ebx@27
  int v22; // eax@27
  int v23; // eax@27
  int v24; // edx@27
  int v25; // ebx@27
  int v26; // eax@27
  double v27; // st7@36
  float v28; // ST19C_4@39
  float v29; // ST198_4@41
  float v30; // ST198_4@43
  float v31; // ST19C_4@45
  float v32; // ST198_4@45
  float v33; // ST198_4@47
  float v34; // ST198_4@49
  float v35; // ST19C_4@53
  float v36; // ST198_4@53
  float v37; // ST19C_4@55
  float v38; // ST198_4@55
  float v39; // ST198_4@57
  PgWin *v40; // ecx@58
  PgWin *v41; // ecx@60
  float v42; // ST19C_4@63
  float v43; // ST198_4@63
  float v44; // ST19C_4@65
  float v45; // ST198_4@65
  float v46; // ST19C_4@67
  float v47; // ST198_4@67
  float v48; // ST198_4@69
  float v49; // ST19C_4@73
  PgWin **v50; // esi@74
  signed int v51; // ebx@74
  int uiWidth; // [sp+1ACh] [bp-14h]@11
  unsigned int v53; // [sp+1B0h] [bp-10h]@11
  int uiHeight; // [sp+1B4h] [bp-Ch]@11
  float uiColumn; // [sp+1B8h] [bp-8h]@11
  int uiRow; // [sp+1BCh] [bp-4h]@16

  v1 = this;
  if ( this->m_pkMainMenuWin )
    ((void (__stdcall *)(unsigned int, unsigned int))this->m_pkMainMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_uiScreenWidth - 44,
      PgWin::ms_uiScreenHeight - 40);
  MachineOpt::SetWinPostion(&v1->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkFriendAddWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkKingDomQuest->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkSysMsgDisplayWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  MachineOpt::SetWinPostion(&v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
  if ( GameFrameWork::ms_uiFirstCreateDevice )
  {
    v4 = (PgWin *)v1->m_pkStatusWin;
    if ( GameFrameWork::ms_bRendererRecreated )
    {
      if ( v4 )
        PgWin::InitPosLeftTop(v4, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 0.0, 0.0);
      v5 = v1->m_pkChatDisplayWin;
      if ( v5 )
      {
        ChatDisplayWin2::GetSize(v5, (unsigned int *)&uiWidth, (unsigned int *)&uiHeight);
        v53 = PgWin::ms_uiScreenHeight - uiHeight - 100;
        v6 = (double)v53;
        v53 = PgWin::ms_uiScreenHeight;
        v7 = (PgWin *)v1->m_pkChatDisplayWin;
        uiColumn = v6 / (double)PgWin::ms_uiScreenHeight;
        PgWin::InitPosLeftTop(v7, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 0.0, uiColumn);
      }
      v8 = (ChatDisplayWin *)v1->m_pkSysMsgDisplayWin;
      if ( v8 )
      {
        ChatDisplayWin::GetSize(v8, (unsigned int *)&uiWidth, (unsigned int *)&uiHeight);
        v53 = PgWin::ms_uiScreenHeight - uiHeight - 100;
        v9 = (double)v53;
        v53 = PgWin::ms_uiScreenHeight;
        v10 = (PgWin *)v1->m_pkSysMsgDisplayWin;
        uiColumn = v9 / (double)PgWin::ms_uiScreenHeight;
        PgWin::InitPosRightTop(v10, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 1.0, uiColumn);
      }
      v11 = (PgWin *)v1->m_pkMiniMapWin;
      if ( v11 )
        PgWin::InitPosRightTop(v11, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 1.0, 0.0);
      uiColumn = 0.0;
      uiRow = 0;
      if ( v1->m_pkShortCutWin )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.0,
          1.0);
        if ( v1->m_pkShortCutWin->m_bShowFlag )
          uiRow = 1;
      }
      if ( v1->m_pkShortCutWinV )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          1.0,
          0.0);
        v12 = v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v13 = ((int (__stdcall *)(signed int))v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(160);
        v12[77].__vecDelDtor((NiRefObject *)v1->m_pkShortCutWinV, v13);
        if ( v1->m_pkShortCutWinV->m_bShowFlag )
          LODWORD(uiColumn) = 1;
      }
      v14 = (int)v1->m_pkShortCutSubWinV;
      uiHeight = 4;
      do
      {
        if ( *(_DWORD *)(v14 - 20) )
        {
          (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)(v14 - 20) + 236))(
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            0.0,
            0.92500001);
          v15 = (*(int (**)(void))(**(_DWORD **)(v14 - 20) + 148))();
          v16 = *(_DWORD *)(v14 - 20);
          v17 = uiRow * v15;
          uiWidth = **(_DWORD **)(v14 - 20) + 308;
          v18 = *(int (**)(void))(*(_DWORD *)v16 + 168);
          v53 = v16;
          v19 = v18();
          v20 = (*(int (__stdcall **)(int))(*(_DWORD *)v53 + 164))(v19 - v17);
          (*(void (__thiscall **)(_DWORD, int))uiWidth)(*(_DWORD *)(v14 - 20), v20);
          if ( *(_BYTE *)(*(_DWORD *)(v14 - 20) + 1094) )
            ++uiRow;
        }
        if ( *(_DWORD *)v14 )
        {
          (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v14 + 236))(
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            0.94499999,
            0.0);
          v21 = **(_DWORD **)v14;
          v22 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v14 + 164))(160);
          (*(void (__thiscall **)(_DWORD, int))(v21 + 308))(*(_DWORD *)v14, v22);
          v23 = (*(int (**)(void))(**(_DWORD **)v14 + 144))();
          v24 = **(_DWORD **)v14;
          v25 = LODWORD(uiColumn) * v23;
          uiWidth = **(_DWORD **)v14 + 308;
          v26 = (*(int (__stdcall **)(signed int))(v24 + 164))(160);
          (*(void (__thiscall **)(_DWORD, int))uiWidth)(*(_DWORD *)v14, v26 - v25);
          if ( *(_BYTE *)(*(_DWORD *)v14 + 1094) )
            ++LODWORD(uiColumn);
        }
        v14 += 4;
        --uiHeight;
      }
      while ( uiHeight );
      if ( v1->m_pkMysteryVaultWin )
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkMysteryVaultWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.95300001,
          0.66000003);
      if ( v1->m_pkQuestNewsWin )
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkQuestNewsWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.69999999,
          0.1);
      if ( v1->m_pkQuestFinishWin )
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkQuestFinishWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          1.0,
          0.60000002);
      v27 = 0.5;
      if ( v1->m_pkMapLinkGateWin )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkMapLinkGateWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.5,
          0.5);
        v27 = 0.5;
      }
      if ( v1->m_pkMoveBtnWin )
      {
        v28 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkMoveBtnWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.63999999,
          LODWORD(v28));
        v27 = 0.5;
      }
      if ( v1->m_pkGuildWarInformWin )
      {
        v29 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkGuildWarInformWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v29),
          0.2);
        v27 = 0.5;
      }
      if ( v1->m_pkGTInformWin )
      {
        v30 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkGTInformWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v30),
          0.2);
        v27 = 0.5;
      }
      if ( v1->m_pkExpeditionWarnigMsgWin )
      {
        v31 = v27;
        v32 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkExpeditionWarnigMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v32),
          LODWORD(v31));
        v27 = 0.5;
      }
      if ( v1->m_pkAnnounceWin )
      {
        v33 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, signed int))v1->m_pkAnnounceWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v33),
          150);
        v27 = 0.5;
      }
      if ( v1->m_pkRemainAnnounceWin )
      {
        v34 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkRemainAnnounceWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v34),
          0.13);
        v27 = 0.5;
      }
      if ( v1->m_pkAttendIconWin )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkAttendIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.51999998,
          0.89999998);
        v27 = 0.5;
      }
      if ( v1->m_pkAttendCheckWin )
      {
        v35 = v27;
        v36 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkAttendCheckWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v36),
          LODWORD(v35));
        v27 = 0.5;
      }
      if ( v1->m_pkAttendRewardWin )
      {
        v37 = v27;
        v38 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkAttendRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v38),
          LODWORD(v37));
        v27 = 0.5;
      }
      if ( v1->m_pkWelcomeMsgWin )
      {
        v39 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkWelcomeMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v39),
          0.2);
        v27 = 0.5;
      }
      v40 = (PgWin *)v1->m_pkGambleWin;
      if ( v40 )
      {
        PgWin::InitPosRightTop(v40, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 1.0, 0.30000001);
        v27 = 0.5;
      }
      v41 = (PgWin *)v1->m_pkGambleMiniWin;
      if ( v41 )
      {
        PgWin::InitPosRightTop(v41, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 0.98000002, 0.30000001);
        v27 = 0.5;
      }
      if ( v1->m_pkGambleDiceGameWin )
      {
        v42 = v27;
        v43 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v43),
          LODWORD(v42));
        v27 = 0.5;
      }
      if ( v1->m_pkDiceGameWin )
      {
        v44 = v27;
        v45 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v45),
          LODWORD(v44));
        v27 = 0.5;
      }
      if ( v1->m_pkSlotMachineWin )
      {
        v46 = v27;
        v47 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v47),
          LODWORD(v46));
        v27 = 0.5;
      }
      if ( v1->m_pkAutoRunMsgWin )
      {
        v48 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkAutoRunMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          LODWORD(v48),
          0.60000002);
        v27 = 0.5;
      }
      if ( v1->m_pkPlayGuideMinWin )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkPlayGuideMinWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.89999998,
          0.66000003);
        v27 = 0.5;
      }
      if ( v1->m_pkPlayGuideWin )
      {
        v49 = v27;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          1.0,
          LODWORD(v49));
      }
    }
    else
    {
      MachineOpt::SetWinPostion(&v1->m_pkStatusWin->baseclass_0.baseclass_0.baseclass_0);
      MachineOpt::SetWinPostion(&v1->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0);
      MachineOpt::SetWinPostion(&v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0);
      v50 = (PgWin **)v1->m_pkShortCutSubWinV;
      v51 = 4;
      do
      {
        MachineOpt::SetWinPostion(*(v50 - 5));
        MachineOpt::SetWinPostion(*v50);
        ++v50;
        --v51;
      }
      while ( v51 );
      MachineOpt::SetWinPostion(&v1->m_pkChatDisplayWin->baseclass_0.baseclass_0.baseclass_0);
    }
    MachineOpt::SetWinPostion(&v1->m_pkTOTWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    MachineOpt::SetWinPostion(&v1->m_pkStatusWin->baseclass_0.baseclass_0.baseclass_0);
    MachineOpt::SetWinPostion(&v1->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0);
    MachineOpt::SetWinPostion(&v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0);
    v2 = (PgWin **)v1->m_pkShortCutSubWinV;
    v3 = 4;
    do
    {
      MachineOpt::SetWinPostion(*(v2 - 5));
      MachineOpt::SetWinPostion(*v2);
      ++v2;
      --v3;
    }
    while ( v3 );
    MachineOpt::SetWinPostion(&v1->m_pkChatDisplayWin->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A987C4: using guessed type bool GameFrameWork__ms_bRendererRecreated;
// A987C8: using guessed type unsigned int GameFrameWork__ms_uiFirstCreateDevice;

//----- (00485750) --------------------------------------------------------
bool __thiscall GameFrameWork::InitWorld(GameFrameWork *this)
{
  Name3 *v1; // esi@1
  Name3 *v2; // eax@1
  Name3 *v3; // eax@4
  Name3 *v4; // eax@4
  MapInfo *v5; // eax@4
  Name3 *v6; // eax@6
  MapViewInfo *v7; // eax@6
  MapViewInfo *v8; // esi@6
  float v10; // ST00_4@11
  SoundGroupAmbient *v11; // esi@13
  Name3 *v12; // eax@13
  char acMapName[13]; // [sp+Ch] [bp-14h]@1
  unsigned int v14; // [sp+1Ch] [bp-4h]@1
  int v15; // [sp+20h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v1 = User::GetMainCharLoginMapName(&g_kUser);
  v2 = World::GetMapName(&g_kWorld, (Name3 *)acMapName);
  if ( *(_DWORD *)&v2->n3_name[0] == *(_DWORD *)&v1->n3_name[0]
    && *(_DWORD *)&v2->n3_name[4] == *(_DWORD *)&v1->n3_name[4]
    && *(_DWORD *)&v2->n3_name[8] == *(_DWORD *)&v1->n3_name[8] )
  {
    World::LoadMap(&g_kWorld, 1);
    World::RemoveAllChar(&g_kWorld);
  }
  else
  {
    v3 = User::GetMainCharLoginMapName(&g_kUser);
    dword_B30C3C = *(_DWORD *)&v3->n3_name[0];
    dword_B30C40 = *(_DWORD *)&v3->n3_name[4];
    dword_B30C44 = *(_DWORD *)&v3->n3_name[8];
    v4 = User::GetMainCharLoginMapName(&g_kUser);
    v5 = MapInfoTab::GetByMapName(v4);
    if ( v5 )
      *(_DWORD *)&g_pkMainChar[1].m_AttackTargetHandle = v5->Sight;
    byte_B30C4C = v5->KingdomMap;
    World::LoadMap(&g_kWorld, 0);
    v6 = User::GetMainCharLoginMapName(&g_kUser);
    v7 = MapViewInfoTab::GetByMapName(v6);
    v8 = v7;
    if ( !v7 )
    {
      User::GetMainCharLoginMapName(&g_kUser);
      return 0;
    }
    if ( v7->MinimapView )
      World::LoadMiniMap(&g_kWorld);
    else
      World::LoadEmptyMiniMap(&g_kWorld);
    v10 = (double)v8->ZoomMax;
    World::SetCameraZoomMax(&g_kWorld, v10);
  }
  v11 = g_kSoundMgr.m_pkAmbientGroup;
  v12 = User::GetMainCharLoginMapName(&g_kUser);
  *(_DWORD *)acMapName = *(_DWORD *)&v12->n3_name[0];
  *(_DWORD *)&acMapName[4] = *(_DWORD *)&v12->n3_name[4];
  *(_DWORD *)&acMapName[8] = *(_DWORD *)&v12->n3_name[8];
  acMapName[12] = 0;
  if ( v11 )
    SoundGroupAmbient::LoadAreaTable(v11, acMapName);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// B30C3C: using guessed type int dword_B30C3C;
// B30C40: using guessed type int dword_B30C40;
// B30C44: using guessed type int dword_B30C44;
// B30C4C: using guessed type char byte_B30C4C;

//----- (004858C0) --------------------------------------------------------
bool __thiscall GameFrameWork::InitCharacter(GameFrameWork *this)
{
  PROTO_NC_CHAR_MAPLOGIN_ACK *v1; // eax@1
  bool result; // al@1
  Char *v3; // ebx@2
  signed int v4; // esi@2
  bool v5; // cf@2
  Char *v6; // esi@7
  char v7; // bl@7
  bool (__thiscall *v8)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@7
  void *v9; // eax@10
  Tutorial *v10; // eax@11
  GameFrameWork *v11; // [sp+0h] [bp-10h]@1

  v11 = this;
  v1 = User::GetMainCharMapLoginData(&g_kUser);
  result = MainChar::Init((MainChar *)g_pkMainChar, v1);
  if ( result )
  {
    World::AttachChar(&g_kWorld, g_pkMainChar);
    v3 = g_pkMainChar;
    v4 = 0;
    v5 = 1;
    do
    {
      if ( v5 && g_kInventory.m_aspEquip[v4].m_pObject )
        CharShape::Equip(&v3->m_kCharShape, g_kInventory.m_aspEquip[v4].m_pObject);
      ++v4;
      v5 = (unsigned int)v4 < 0x1E;
    }
    while ( v4 < 30 );
    v6 = g_pkMainChar;
    v7 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)();
    v8 = v6->baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
    v6->m_byMode = 1;
    v6->m_eStandMode = 0;
    if ( v7 != (unsigned __int8)((int (__thiscall *)(Char *))v8)(v6) )
      v6->m_bIsChangeCampMode = 1;
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(1);
    Party::Clear(&g_kParty);
    RaidInfo::ClearRaidInfo(&g_kRaidinfo);
    StatusWin::ApplyCharInfo(v11->m_pkStatusWin);
    if ( !Singleton<Tutorial>::m_pInstance )
    {
      v9 = operator new(0xB4u);
      if ( v9 )
        Tutorial::Tutorial((Tutorial *)v9);
      else
        v10 = 0;
      Singleton<Tutorial>::m_pInstance = v10;
    }
    result = 1;
  }
  return result;
}

//----- (00485A10) --------------------------------------------------------
bool __thiscall GameFrameWork::InitSystem(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  void *v2; // eax@1
  int v3; // ebx@1
  NiCollisionGroup *v4; // eax@2
  int v5; // eax@4
  NiAVObject *v6; // esi@4
  int v7; // eax@7

  v1 = this;
  v2 = operator new(0x30u);
  v3 = 0;
  if ( v2 )
    NiCollisionGroup::NiCollisionGroup((NiCollisionGroup *)v2);
  else
    v4 = 0;
  v1->m_pkCollisionGroup = v4;
  v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[21].SetAbStateProperty)();
  v6 = (NiAVObject *)v5;
  if ( v5 )
  {
    if ( *(_DWORD *)(v5 + 188) > 0u )
      v3 = **(_DWORD **)(v5 + 180);
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)(v3 + 176));
    v7 = *(_DWORD *)(v3 + 172);
    *(_DWORD *)(v7 + 56) = GameFrameWork::CollisionCallback;
    *(_DWORD *)(v7 + 60) = (char *)v1 + 2340;
    NiCollisionGroup::AddCollider(v1->m_pkCollisionGroup, v6, 0, -1, 1);
  }
  NiCollisionGroup::AddCollidee(v1->m_pkCollisionGroup, pkObject, 0, -1, 1);
  return 1;
}

//----- (00485AF0) --------------------------------------------------------
void __thiscall GameFrameWork::TerminateWindow(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin **v2; // ebx@37
  PgWin *v3; // ST00_4@100
  PgWin *v4; // eax@215
  PgWin **v5; // ebx@273
  NiTListItem<PgWin *> *v6; // ebx@291
  NiTListItem<PgWin *> *v7; // ST00_4@292
  PgWin **v8; // ebx@313
  signed int v9; // ebx@317
  CollectWin *v10; // ecx@318
  signed int v11; // [sp+8h] [bp-4h]@37
  signed int v12; // [sp+8h] [bp-4h]@273
  signed int v13; // [sp+8h] [bp-4h]@313

  v1 = this;
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&this->m_setEscapeHide);
  PgWinMgr::CloseAllWin(&Pgg_kWinMgr);
  IconWin::ClearRegisteredCoolTime();
  if ( v1->m_pkEventFriendWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEventFriendWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEventFriendWin = 0;
  }
  if ( v1->m_pkMainCharHPBarWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMainCharHPBarWin->baseclass_0.baseclass_0);
    v1->m_pkMainCharHPBarWin = 0;
  }
  if ( v1->m_pkTargetCharHPBarWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkTargetCharHPBarWin->baseclass_0.baseclass_0);
    v1->m_pkTargetCharHPBarWin = 0;
  }
  if ( g_pkToolTipWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, g_pkToolTipWin);
    g_pkToolTipWin = 0;
  }
  if ( g_pkItemInfoWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    g_pkItemInfoWin = 0;
  }
  if ( g_pkSkillInfoWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, g_pkSkillInfoWin);
    g_pkSkillInfoWin = 0;
  }
  if ( g_pkSoulStoneInfoWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, g_pkSoulStoneInfoWin);
    g_pkSoulStoneInfoWin = 0;
  }
  if ( v1->m_pkStatusWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkStatusWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkStatusWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkStatusWin = 0;
  }
  if ( v1->m_pkRidePetWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkRidePetWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRidePetWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkRidePetWin = 0;
  }
  if ( v1->m_pkGuildWarStateWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGuildWarStateWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGuildWarStateWin = 0;
  }
  if ( v1->m_pkItemUpgradeWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemUpgradeWin = 0;
  }
  if ( v1->m_pkMoverUpgradeWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMoverUpgradeWin = 0;
  }
  if ( v1->m_pkItemMixWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemMixWin = 0;
  }
  if ( v1->m_pkItemLinkInfoWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemLinkInfoWin = 0;
  }
  if ( v1->m_pkTargetWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkTargetWin = 0;
  }
  if ( v1->m_pkMiniMapWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMiniMapWin = 0;
  }
  if ( v1->m_pkShortCutWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkShortCutWin = 0;
  }
  if ( v1->m_pkShortCutWinV )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkShortCutWinV = 0;
  }
  v2 = (PgWin **)v1->m_pkShortCutSubWinV;
  v11 = 4;
  do
  {
    if ( *(v2 - 5) )
    {
      MachineOpt::RegistereWinPostion(*(v2 - 5));
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, *(v2 - 5));
      *(v2 - 5) = 0;
    }
    if ( *v2 )
    {
      MachineOpt::RegistereWinPostion(*v2);
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, *v2);
      *v2 = 0;
    }
    ++v2;
    --v11;
  }
  while ( v11 );
  if ( v1->m_pkMainMenuWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMainMenuWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMainMenuWin = 0;
  }
  if ( v1->m_pkChatDisplayWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkChatDisplayWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkChatDisplayWin = 0;
  }
  if ( v1->m_pkSysMsgDisplayWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkSysMsgDisplayWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkSysMsgDisplayWin = 0;
  }
  if ( v1->m_pkCharInfoWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharInfoWin = 0;
  }
  if ( v1->m_pkStatusBuffWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkStatusBuffWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkStatusBuffWin = 0;
  }
  if ( v1->m_pkStatusDBuffWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkStatusDBuffWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkStatusDBuffWin = 0;
  }
  if ( v1->m_pkStatusChargedBuffWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkStatusChargedBuffWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkStatusChargedBuffWin = 0;
  }
  if ( v1->m_pkPrivateStoreWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPrivateStoreWin = 0;
  }
  if ( v1->m_pkInventoryWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkInventoryWin = 0;
  }
  if ( v1->m_pkMiniHouseInventoryWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkMiniHouseInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMiniHouseInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMiniHouseInventoryWin = 0;
  }
  if ( v1->m_pkSkillWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkSkillWin = 0;
  }
  if ( v1->m_pkActionWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkActionWin = 0;
  }
  if ( v1->m_pkKingDomQuest )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkKingDomQuest->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkKingDomQuest->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkKingDomQuest = 0;
  }
  if ( v1->m_pkQuestWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkQuestWin = 0;
    v1->m_pkRewardWin = 0;
  }
  if ( v1->m_pkQuestFinishWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkQuestFinishWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkQuestFinishWin = 0;
  }
  if ( v1->m_pkShopWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkShopWin = 0;
  }
  if ( v1->m_pkRoarWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRoarWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkRoarWin = 0;
  }
  if ( v1->m_pkCalculatorWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCalculatorWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCalculatorWin = 0;
  }
  if ( v1->m_pkKeyRemappingWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkKeyRemappingWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkKeyRemappingWin = 0;
  }
  if ( v1->m_pkHelpWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkHelpWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkHelpWin = 0;
  }
  if ( v1->m_pkQuestNewsWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkQuestNewsWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkQuestNewsWin = 0;
  }
  if ( v1->m_pkForumWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkForumWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkForumWin = 0;
  }
  if ( v1->m_pkOptionSoundWin )
    v1->m_pkOptionSoundWin = 0;
  if ( v1->m_pkOptionGraphicWin )
    v1->m_pkOptionGraphicWin = 0;
  if ( v1->m_pkOptionSystemWin )
    v1->m_pkOptionSystemWin = 0;
  if ( v1->m_pkOptionWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkOptionWin = 0;
  }
  if ( v1->m_pkPMWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkPMWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPMWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPMWin = 0;
  }
  if ( v1->m_pkWeddingInfoWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkWeddingInfoWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWeddingInfoWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkWeddingInfoWin = 0;
  }
  if ( v1->m_pkHolyPromiseWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkHolyPromiseWin->baseclass_0.baseclass_0.baseclass_0);
    HolyPromiseWin::Terminate(v1->m_pkHolyPromiseWin);
    v3 = (PgWin *)v1->m_pkHolyPromiseWin;
    v1->m_uiInsertNum = 0;
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v3);
    v1->m_pkHolyPromiseWin = 0;
  }
  if ( v1->m_pkHolyPromiseAddWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkHolyPromiseAddWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkHolyPromiseAddWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkHolyPromiseAddWin = 0;
  }
  if ( v1->m_pkFriendWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkFriendWin = 0;
  }
  if ( v1->m_pkFriendAddWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkFriendAddWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkFriendAddWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkFriendAddWin = 0;
  }
  if ( v1->m_pkGuildWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkGuildWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGuildWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGuildWin = 0;
  }
  if ( v1->m_pkGuildAcademyWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkGuildAcademyWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGuildAcademyWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGuildAcademyWin = 0;
  }
  if ( v1->m_pkPopupMenuWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPopupMenuWin = 0;
  }
  if ( v1->m_pkDesktopWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDesktopWin->baseclass_0);
    v1->m_pkDesktopWin = 0;
  }
  if ( v1->m_pkWaitingForLogoutWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWaitingForLogoutWin->baseclass_0);
    v1->m_pkWaitingForLogoutWin = 0;
  }
  if ( v1->m_pkMiniHouseMenuWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkMiniHouseMenuWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMiniHouseMenuWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMiniHouseMenuWin = 0;
  }
  if ( v1->m_pkSystemWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkSystemWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkSystemWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkSystemWin = 0;
  }
  if ( v1->m_pkDivideWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDivideWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDivideWin = 0;
  }
  if ( v1->m_pkInputTextWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkInputTextWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkInputTextWin = 0;
  }
  if ( v1->m_pkMoneyWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMoneyWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMoneyWin = 0;
  }
  if ( v1->m_pkHolyRewardMoneyWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkHolyRewardMoneyWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkHolyRewardMoneyWin = 0;
  }
  if ( v1->m_pkDiceRewardMoneyWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceRewardMoneyWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDiceRewardMoneyWin = 0;
  }
  if ( v1->m_pkDiceExpectMoneyWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceExpectMoneyWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDiceExpectMoneyWin = 0;
  }
  if ( v1->m_pkDiceGameWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDiceGameWin = 0;
  }
  if ( v1->m_pkDiceGameMinimizeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceGameMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDiceGameMinimizeWin = 0;
  }
  if ( v1->m_pkDiceGameHelpWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceGameHelpWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDiceGameHelpWin = 0;
  }
  if ( v1->m_pkDiceExpectMoneyWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceGameRankWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDiceGameRankWin = 0;
    if ( v1->m_pkDiceExpectMoneyWin )
    {
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceGameRateSheetWin->baseclass_0.baseclass_0.baseclass_0);
      v1->m_pkDiceGameRateSheetWin = 0;
      if ( v1->m_pkDiceExpectMoneyWin )
      {
        PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkDiceGameNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
        v1->m_pkDiceGameNpcDlgWin = 0;
      }
    }
  }
  if ( v1->m_pkGambleWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGambleWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGambleWin = 0;
  }
  if ( v1->m_pkGambleMiniWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGambleMiniWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGambleMiniWin = 0;
  }
  if ( v1->m_pkCoinExchangeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCoinExchangeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCoinExchangeWin = 0;
  }
  if ( v1->m_pkGambleHouseCardWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGambleHouseCardWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGambleHouseCardWin = 0;
  }
  if ( v1->m_pkGambleDiceGameWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGambleDiceGameWin = 0;
  }
  if ( v1->m_pkSlotMachineWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkSlotMachineWin = 0;
  }
  if ( v1->m_pkGBSlotHelpWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGBSlotHelpWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGBSlotHelpWin = 0;
  }
  if ( v1->m_pkGBSlotRankWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGBSlotRankWin = 0;
  }
  if ( v1->m_pkMiniSlotMachineWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMiniSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMiniSlotMachineWin = 0;
  }
  if ( v1->m_pkItemMallMenuWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkItemMallMenuWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemMallMenuWin = 0;
  }
  PartyWinInterface::Destory(v1->m_pkPartyWinInterface);
  if ( v1->m_pkItemShopWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemShopWin = 0;
  }
  if ( v1->m_pkUserTradeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkUserTradeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkUserTradeWin = 0;
  }
  if ( v1->m_pkNPCSkillWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkNPCSkillWin = 0;
  }
  if ( v1->m_pkNPCSoulWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkNPCSoulWin = 0;
  }
  if ( v1->m_pkNpcDlgWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkNpcDlgWin = 0;
  }
  if ( v1->m_pkEnchantGemWin1 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemWin1->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEnchantGemWin1 = 0;
  }
  if ( v1->m_pkEnchantGemWin2 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemWin2->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEnchantGemWin2 = 0;
  }
  if ( v1->m_pkEnchantGemWin3 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemWin3->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEnchantGemWin3 = 0;
  }
  if ( v1->m_pkEnchantGemDeleteWin1 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemDeleteWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEnchantGemDeleteWin1 = 0;
  }
  if ( v1->m_pkEnchantGemDeleteWin2 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemDeleteWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEnchantGemDeleteWin2 = 0;
  }
  if ( v1->m_pkEnchantGemDeleteWin3 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemDeleteWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEnchantGemDeleteWin3 = 0;
  }
  if ( v1->m_pkEnchantGemToolTipWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEnchantGemToolTipWin = 0;
  }
  if ( v1->m_pkWeaponTitleWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWeaponTitleWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkWeaponTitleWin = 0;
  }
  if ( v1->m_pkWeaponTitleDeleteWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWeaponTitleDeleteWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkWeaponTitleDeleteWin = 0;
  }
  if ( v1->m_pkFriendCallWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkFriendCallWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkFriendCallWin = 0;
  }
  if ( v1->m_pkChargedItemListWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkChargedItemListWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkChargedItemListWin = 0;
  }
  if ( v1->m_pkItemShopWin2 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemShopWin2 = 0;
  }
  if ( v1->m_pkServerMenuWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkServerMenuWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkServerMenuWin = 0;
  }
  if ( v1->m_pkReviveMenuWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkReviveMenuWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkReviveMenuWin = 0;
  }
  if ( v1->m_pkRebirthMenuWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRebirthMenuWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkRebirthMenuWin = 0;
  }
  if ( v1->m_pkStorageWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkStorageWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkStorageWin = 0;
  }
  if ( v1->m_pkCastingProgressBar )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCastingProgressBar->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCastingProgressBar = 0;
  }
  if ( v1->m_pkAnnounceWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAnnounceWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkAnnounceWin = 0;
  }
  if ( v1->m_pkRemainAnnounceWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRemainAnnounceWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkRemainAnnounceWin = 0;
  }
  if ( v1->m_pkGuildWarInformWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGuildWarInformWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGuildWarInformWin = 0;
  }
  if ( v1->m_pkPkKqRankingWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPkKqRankingWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPkKqRankingWin = 0;
  }
  v4 = ms_pkTestWin;
  if ( ms_pkTestWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, ms_pkTestWin);
    v4 = 0;
    ms_pkTestWin = 0;
  }
  if ( ms_pkTestWin2 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v4);
    ms_pkTestWin2 = 0;
  }
  if ( v1->m_pkMainCharSpeechBubbleWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMainCharSpeechBubbleWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMainCharSpeechBubbleWin = 0;
  }
  if ( v1->m_pkKQuestTimeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkKQuestTimeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkKQuestTimeWin = 0;
  }
  if ( v1->m_pkIDTimeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkIDTimeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkIDTimeWin = 0;
  }
  if ( v1->m_pkKQPKRealTimeRankWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkKQPKRealTimeRankWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkKQPKRealTimeRankWin = 0;
  }
  if ( v1->m_pkPrisonTimeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPrisonTimeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPrisonTimeWin = 0;
  }
  if ( v1->m_pkReportWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkReportWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkReportWin = 0;
  }
  if ( v1->m_pkGMPrisonWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGMPrisonWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGMPrisonWin = 0;
  }
  if ( v1->m_pkGMCommandWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGMCommandWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGMCommandWin = 0;
  }
  if ( v1->m_pkGuildWarKillCountWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGuildWarKillCountWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGuildWarKillCountWin = 0;
  }
  if ( v1->m_pkChatBlockListWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkChatBlockListWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkChatBlockListWin = 0;
  }
  if ( v1->m_pkWingStoneWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWingStoneWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkWingStoneWin = 0;
  }
  if ( v1->m_pkWingStoneMapWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWingStoneMapWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkWingStoneMapWin = 0;
  }
  MiniHouseIndoor::ClearUI(&g_kWorld.m_MiniHouseIndoorMode);
  if ( v1->m_pkMHInputPassWordWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHInputPassWordWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHInputPassWordWin = 0;
    OutputDebugStringA("Clear m_pkMHInputPassWordWin\n");
  }
  if ( v1->m_pkMHAnnounceWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHAnnounceWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHAnnounceWin = 0;
    OutputDebugStringA("Clear m_pkMHAnnounceWin\n");
  }
  if ( v1->m_pkMHEmotionWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHEmotionWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHMouseControlWin = 0;
    OutputDebugStringA("Clear m_pkMHJoinWin\n");
  }
  if ( v1->m_pkMHMouseControlWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHMouseControlWin = 0;
    OutputDebugStringA("Clear m_pkMHJoinWin\n");
  }
  if ( v1->m_pkMHJoinWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHJoinWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHJoinWin = 0;
    OutputDebugStringA("Clear m_pkMHJoinWin\n");
  }
  if ( v1->m_pkMHInfoWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHInfoWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHInfoWin = 0;
    OutputDebugStringA("Clear m_pkMHInfoWin\n");
  }
  if ( v1->m_pkMHSettingWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHSettingWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHSettingWin = 0;
    OutputDebugStringA("Clear m_pkMHSettingWin\n");
  }
  if ( v1->m_pkMHPortalListWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHPortalListWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHPortalListWin = 0;
    OutputDebugStringA("Clear m_pkMHPortalListWin\n");
  }
  if ( v1->m_pkMHGuestBookWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHGuestBookWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHGuestBookWin = 0;
    OutputDebugStringA("Clear m_pkMHGuestBookWin\n");
  }
  if ( v1->m_pkMHEditRoomWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHEditRoomWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHEditRoomWin = 0;
    OutputDebugStringA("Clear m_pkMHEditRoomWin\n");
  }
  if ( v1->m_pkMHMinimizeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHMinimizeWin = 0;
    OutputDebugStringA("Clear m_pkMHMinimizeWin\n");
  }
  if ( v1->m_pkMHRepairWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMHRepairWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMHRepairWin = 0;
    OutputDebugStringA("Clear m_pkMHItemInventoryWin\n");
  }
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMakeKarisWin->baseclass_0.baseclass_0.baseclass_0);
  v1->m_pkMakeKarisWin = 0;
  if ( v1->m_pkItemRepairWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkItemRepairWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemRepairWin = 0;
  }
  if ( v1->m_pkMoveBtnWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMoveBtnWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMoveBtnWin = 0;
  }
  if ( v1->m_pkAutoRunMsgWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAutoRunMsgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkAutoRunMsgWin = 0;
  }
  v5 = (PgWin **)v1->m_pkExpeditionPartyWin;
  v12 = 4;
  do
  {
    if ( *v5 )
    {
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, *v5);
      *v5 = 0;
    }
    ++v5;
    --v12;
  }
  while ( v12 );
  if ( v1->m_pkExpeditionWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkExpeditionWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkExpeditionWin = 0;
  }
  if ( v1->m_pkExpeditionMemberAddWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkExpeditionMemberAddWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkExpeditionMemberAddWin = 0;
  }
  if ( v1->m_pkExpeditionWarnigMsgWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkExpeditionWarnigMsgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkExpeditionWarnigMsgWin = 0;
  }
  if ( v1->m_pkMysteryVaultWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMysteryVaultWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMysteryVaultWin = 0;
  }
  if ( v1->m_pkMapLinkGateWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMapLinkGateWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMapLinkGateWin = 0;
  }
  if ( v1->m_pkTOTWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkTOTWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkTOTWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkTOTWin = 0;
  }
  if ( v1->m_pkGTInformWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGTInformWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGTInformWin = 0;
  }
  PopupMenuTemplate::Terminate();
  v6 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead;
  while ( v6 )
  {
    v7 = v6;
    v6 = v6->m_pkNext;
    v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kAutoCloseWinList,
      v7);
  }
  *(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = 0;
  if ( v1->m_pkRollingDiceMsgWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRollingDiceMsgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkRollingDiceMsgWin = 0;
  }
  if ( v1->m_pkRollingDiceWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRollingDiceWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkRollingDiceWin = 0;
  }
  if ( v1->m_pkPartyLootSetupWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPartyLootSetupWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPartyLootSetupWin = 0;
  }
  if ( v1->m_pkGateChannelWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGateChannelWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGateChannelWin = 0;
  }
  if ( v1->m_pkQuestStartItemWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkQuestStartItemWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkQuestStartItemWin = 0;
  }
  if ( v1->m_pkPlayGuideMinWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideMinWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPlayGuideMinWin = 0;
  }
  if ( v1->m_pkPlayGuideWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPlayGuideWin = 0;
  }
  if ( v1->m_pkBasicInfoTipWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkBasicInfoTipWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkBasicInfoTipWin = 0;
  }
  if ( v1->m_pkServerTimeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkServerTimeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkServerTimeWin = 0;
  }
  if ( v1->m_pkWelcomeMsgWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkWelcomeMsgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkWelcomeMsgWin = 0;
  }
  v8 = (PgWin **)v1->m_pkCollectCardWin;
  v13 = 4;
  do
  {
    if ( *v8 )
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, *v8);
    ++v8;
    --v13;
  }
  while ( v13 );
  v9 = 105;
  do
  {
    v10 = v1->m_pkCollectWin;
    if ( (&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v9] )
      PgWinMgr::DestroyWin(
        &Pgg_kWinMgr,
        (PgWin *)(&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v9]);
    ++v9;
  }
  while ( (unsigned int)(v9 * 4) < 0x1AC );
  if ( v1->m_pkCollectWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCollectWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCollectWin = 0;
  }
  if ( v1->m_pkCollectPeepingWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkCollectPeepingWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCollectPeepingWin = 0;
  }
  if ( v1->m_pkAttendIconWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAttendIconWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkAttendIconWin = 0;
  }
  if ( v1->m_pkAttendRewardWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAttendRewardWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkAttendRewardWin = 0;
  }
  if ( v1->m_pkAttendCheckWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAttendCheckWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkAttendCheckWin = 0;
  }
  if ( v1->m_pkFeedMoverWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkFeedMoverWin = 0;
  }
  if ( v1->m_pkPetNameEditWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPetNameEditWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPetNameEditWin = 0;
  }
  if ( v1->m_pkEventRankWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEventRankWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEventRankWin = 0;
  }
  if ( v1->m_pkEventTimeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkEventTimeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkEventTimeWin = 0;
  }
  if ( v1->m_pkVoteWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkVoteWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkVoteWin = 0;
  }
  if ( v1->m_pkIndunLevelSelectWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkIndunLevelSelectWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkIndunLevelSelectWin = 0;
  }
  if ( v1->m_pkIndunLevelMsgWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkIndunLevelMsgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkIndunLevelMsgWin = 0;
  }
  if ( v1->m_pkKQScoreWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkKQScoreWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkKQScoreWin = 0;
  }
  if ( v1->m_pkMarketSearchWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMarketSearchWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMarketSearchWin = 0;
  }
  if ( v1->m_pkPuzzleTimeWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPuzzleTimeWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPuzzleTimeWin = 0;
  }
  if ( v1->m_pkRandomOptionWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRandomOptionWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkRandomOptionWin = 0;
  }
  if ( v1->m_pkTermExtendWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkTermExtendWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkTermExtendWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkTermExtendWin = 0;
  }
  if ( v1->m_pkMinimonAutoItemUseWin )
  {
    MachineOpt::RegistereWinPostion(&v1->m_pkMinimonAutoItemUseWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkMinimonAutoItemUseWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkMinimonAutoItemUseWin = 0;
  }
  if ( v1->m_pkKDTeamScoreWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkKDTeamScoreWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkKDTeamScoreWin = 0;
  }
  if ( v1->m_pkGuildEmblemWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkGuildEmblemWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkGuildEmblemWin = 0;
  }
  if ( v1->m_pkIDRankingWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkIDRankingWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkIDRankingWin = 0;
  }
  if ( v1->m_pkPartyScoreWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkPartyScoreWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPartyScoreWin = 0;
  }
}
// A98318: using guessed type int ms_pkTestWin2;

//----- (00487090) --------------------------------------------------------
void __thiscall GameFrameWork::Terminate(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  void *v2; // edi@1
  KeyMap *v3; // edi@5
  NiNode *v4; // edi@10
  NiNode *v5; // edi@15
  NiNode *v6; // edi@20
  NiNode *v7; // edi@25
  QuestHelperMgr *v8; // eax@30
  EffectMsg *v9; // edi@30
  LuaScriptMgr *v10; // ecx@32
  void *v11; // eax@33
  float v12; // eax@34
  Tutorial *v13; // ecx@37
  void *v14; // eax@38
  Tutorial *v15; // eax@39
  TextScreenEffect *v16; // ecx@42
  void *v17; // eax@43
  TextScreenEffect *v18; // eax@44

  v1 = this;
  PgExternalLib::EnableOpenSound(0);
  PgExternalLib::EnableCloseSound(0);
  MachineOpt::Save();
  ICharDeadEvent::TerminateAll();
  ITimer::ClearTimer();
  GuildTask::Terminate();
  WeddingTask::Terminate();
  GuildListTask::Terminate();
  MHDiceGameTask::Terminate();
  GuildAcademyTask::Terminate();
  GuildAcademySelectTask::Terminate();
  ItemRepairTask::Terminate();
  ITask::FinishTaskAll();
  GameFrameWork::TerminateWindow(v1);
  EffectMgr::RemoveAll(&g_kEffectMgr);
  NiCollisionGroup::RemoveAll(v1->m_pkCollisionGroup);
  v2 = v1->m_pkCollisionGroup;
  if ( v2 )
  {
    NiCollisionGroup::_NiCollisionGroup(v1->m_pkCollisionGroup);
    operator delete(v2);
  }
  GameFrameWork::TerminateCharacter(v1);
  if ( g_kSoundMgr.m_pkBGMGroup )
  {
    SoundGroupBgm::SetFadeDurationTime(g_kSoundMgr.m_pkBGMGroup, 0.0);
    SoundMgr::StopBGM(&g_kSoundMgr);
  }
  SoundMgr::StopAllSound(&g_kSoundMgr);
  v3 = v1->m_spKeyMap.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spKeyMap.m_pObject = 0;
  }
  GameFrameWork::TerminateNet(v1);
  Cursor::SetCursor(0);
  PortraitTextureBuffer::Terminate();
  v4 = v1->m_pEffect1.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_pEffect1.m_pObject = 0;
  }
  v5 = v1->m_pEffect2.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_pEffect2.m_pObject = 0;
  }
  v6 = v1->m_pOXEffectO.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_pOXEffectO.m_pObject = 0;
  }
  v7 = v1->m_pOXEffectX.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v1->m_pOXEffectX.m_pObject = 0;
  }
  CGuildMonster::GetInstance();
  CGuildMonster::ReleaseInstance();
  v8 = QuestHelperMgr::GetInstance();
  QuestHelperMgr::Terminate(v8);
  QuestHelperMgr::GetInstance();
  QuestHelperMgr::ReleaseInstance();
  v9 = v1->m_pkEffectMsg;
  v1->m_bWelcomeMsg = 1;
  if ( v9 )
  {
    EffectMsg::_EffectMsg(v9);
    operator delete(v9);
    v1->m_pkEffectMsg = 0;
  }
  v10 = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
  if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    v11 = operator new(0x14u);
    if ( v11 )
      LuaScriptMgr::LuaScriptMgr((LuaScriptMgr *)v11);
    else
      LODWORD(v12) = 0;
    v10 = (LuaScriptMgr *)LODWORD(v12);
    Singleton<LuaScriptMgr>::m_pInstance = v12;
  }
  LuaScriptMgr::Terminate(v10);
  v13 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v14 = operator new(0xB4u);
    if ( v14 )
      Tutorial::Tutorial((Tutorial *)v14);
    else
      v15 = 0;
    v13 = v15;
    Singleton<Tutorial>::m_pInstance = v15;
  }
  Tutorial::Terminate(v13);
  v16 = Singleton<TextScreenEffect>::m_pInstance;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v17 = operator new(0x28u);
    if ( v17 )
      TextScreenEffect::TextScreenEffect((TextScreenEffect *)v17);
    else
      v18 = 0;
    v16 = v18;
    Singleton<TextScreenEffect>::m_pInstance = v18;
  }
  TextScreenEffect::Terminate(v16);
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.m_BackFrameID = 0;
}

//----- (00487380) --------------------------------------------------------
bool __thiscall GameFrameWork::InitWindow(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // eax@1
  MainCharHPBarWin *v3; // eax@1
  NiSourceTexture *v4; // eax@2
  NiSourceTexture *v5; // eax@4
  NiSourceTexture *v6; // eax@6
  NiSourceTexture *v7; // eax@8
  PgWin *v8; // eax@9
  PgWin *v9; // eax@9
  unsigned int v10; // edi@9
  unsigned int v11; // eax@9
  PgWinBar *v12; // ecx@9
  unsigned int v13; // edi@9
  unsigned int v14; // eax@9
  PgWinBar *v15; // ecx@9
  unsigned int v16; // edi@9
  unsigned int v17; // eax@9
  PgWinBar *v18; // ecx@9
  ItemUpgradeWin *v19; // eax@9
  NiSourceTexture *v20; // eax@9
  ItemInfoWin *v21; // eax@9
  bool result; // al@9
  TargetWin *v23; // eax@10
  PgWin *v24; // eax@10
  PgWin *v25; // eax@10
  int v26; // edi@10
  NiObjectNET **v27; // ebx@10
  PgWin *v28; // eax@12
  unsigned int v29; // edi@12
  ChatDisplayWin *v30; // eax@14
  PgWin *v31; // eax@14
  PgWin *v32; // eax@14
  PgWin *v33; // eax@14
  PgWin *v34; // eax@14
  MiniHouseInventoryWin *v35; // eax@14
  InventoryWin *v36; // ecx@14
  IDTimeWin *v37; // eax@14
  PartyWinInterface *v38; // ecx@14
  OptionGraphicWin *v39; // eax@14
  OptionBaseWin *v40; // ecx@14
  OptionSystemWin *v41; // eax@14
  OptionBaseWin *v42; // edx@14
  OptionSoundWin *v43; // eax@14
  OptionBaseWin *v44; // ecx@14
  RewardWin *v45; // eax@14
  CQuestWin2 *v46; // ecx@15
  NiSourceTexture *v47; // eax@17
  PgWin *v48; // eax@17
  PgWin *v49; // eax@17
  PgWin *v50; // eax@17
  PgWin *v51; // eax@17
  PgWin *v52; // eax@17
  PgWin *v53; // eax@19
  PgWin *v54; // eax@19
  char *v55; // ecx@21
  int v56; // edx@21
  int v57; // eax@21
  int v58; // edi@22
  int v59; // eax@23
  int v60; // ecx@27
  unsigned int v61; // ecx@29
  int v62; // edx@34
  unsigned int v63; // edi@38
  unsigned int v64; // eax@38
  void *v65; // eax@40
  PgWin *v66; // eax@42
  int v67; // ebx@44
  MsgBox *v68; // edi@48
  mhInputPassWordWin *v69; // eax@53
  mhRepairObjWin *v70; // eax@56
  PgWin *v71; // ecx@59
  PrisonTimeWin *v72; // ecx@63
  MapLinkGateWin *v73; // edi@65
  int v74; // ebx@65
  int v75; // eax@65
  NiTListItem<PgWin *> *v76; // ecx@65
  MakeKarisWin *v77; // edi@68
  int v78; // eax@68
  NiTListItem<PgWin *> *v79; // ecx@68
  TargetOfTheTargetWin *v80; // eax@71
  NiTListItem<PgWin *> *v81; // eax@72
  StatusWin *v82; // STE8_4@73
  int v83; // eax@73
  NiTListItem<PgWin *> *v84; // ecx@73
  MiniMapWin *v85; // STE8_4@76
  int v86; // eax@76
  NiTListItem<PgWin *> *v87; // ecx@76
  ChatDisplayWin2 *v88; // STE8_4@79
  int v89; // eax@79
  NiTListItem<PgWin *> *v90; // ecx@79
  TargetWin *v91; // STE8_4@82
  int v92; // eax@82
  NiTListItem<PgWin *> *v93; // ecx@82
  ShortCutWin *v94; // STE8_4@85
  int v95; // eax@85
  NiTListItem<PgWin *> *v96; // ecx@85
  MainMenuWin *v97; // STE8_4@88
  int v98; // eax@88
  NiTListItem<PgWin *> *v99; // ecx@88
  TargetOfTheTargetWin *v100; // STE8_4@91
  int v101; // eax@91
  NiTListItem<PgWin *> *v102; // ecx@91
  GTInformWin *v103; // STE8_4@94
  int v104; // eax@94
  NiTListItem<PgWin *> *v105; // ecx@94
  MysteryVaultWin *v106; // STE8_4@97
  int v107; // eax@97
  NiTListItem<PgWin *> *v108; // ecx@97
  PlayGuideMinWin *v109; // STE8_4@100
  int v110; // eax@100
  NiTListItem<PgWin *> *v111; // ecx@100
  ShortCutWin *v112; // STE8_4@103
  int v113; // eax@103
  NiTListItem<PgWin *> *v114; // ecx@103
  ShortCutWin *v115; // STE8_4@106
  int v116; // eax@106
  NiTListItem<PgWin *> *v117; // ecx@106
  QuestNewsWin *v118; // STE8_4@109
  int v119; // eax@109
  NiTListItem<PgWin *> *v120; // ecx@109
  int v121; // STE4_4@113
  int v122; // eax@113
  NiTListItem<PgWin *> *v123; // ecx@113
  int v124; // STE4_4@118
  int v125; // eax@118
  NiTListItem<PgWin *> *v126; // ecx@118
  SysMsgDisplayWin *v127; // STE4_4@122
  int v128; // eax@122
  NiTListItem<PgWin *> *v129; // ecx@122
  StatusBuffWin *v130; // STE4_4@125
  int v131; // eax@125
  NiTListItem<PgWin *> *v132; // ecx@125
  StatusBuffWin *v133; // STE4_4@128
  int v134; // eax@128
  NiTListItem<PgWin *> *v135; // ecx@128
  StatusBuffWin *v136; // STE4_4@131
  int v137; // eax@131
  NiTListItem<PgWin *> *v138; // ecx@131
  ServerTimeWin *v139; // eax@134
  ServerTimeWin *v140; // STE4_4@134
  int v141; // eax@134
  NiTListItem<PgWin *> *v142; // ecx@134
  AttendIconWin *v143; // eax@137
  AttendIconWin *v144; // STE4_4@137
  int v145; // eax@137
  NiTListItem<PgWin *> *v146; // ecx@137
  NiObjectNET *v147; // eax@140
  PgFont *v148; // eax@140
  bool v149; // zf@141
  AttendIconWin *v150; // eax@142
  KDTeamScoreWin *v151; // eax@144
  RandomOptionWin *v152; // STE4_4@146
  int v153; // eax@146
  NiTListItem<PgWin *> *v154; // ecx@146
  ItemUpgradeMsgWin *v155; // STE4_4@149
  int v156; // eax@149
  NiTListItem<PgWin *> *v157; // ecx@149
  MapLinkGateWin *v158; // STE4_4@152
  int v159; // eax@152
  NiTListItem<PgWin *> *v160; // ecx@152
  MinimonAutoItemUseWin *v161; // STE4_4@155
  int v162; // eax@155
  NiTListItem<PgWin *> *v163; // ecx@155
  NpcDialogWin *v164; // STE4_4@158
  int v165; // eax@158
  NiTListItem<PgWin *> *v166; // ecx@158
  IDRankingWin *v167; // STE4_4@161
  int v168; // eax@161
  NiTListItem<PgWin *> *v169; // ecx@161
  EventRankWin *v170; // STE4_4@164
  int v171; // eax@164
  NiTListItem<PgWin *> *v172; // ecx@164
  EventRankWin *v173; // edi@167
  int v174; // eax@167
  NiTListItem<PgWin *> *v175; // ecx@167
  TermExtendWin *v176; // edi@170
  int v177; // eax@170
  NiTListItem<PgWin *> *v178; // ecx@170
  MinimonAutoItemUseWin *v179; // esi@173
  int v180; // eax@173
  int v181; // ecx@173
  float fCycle; // [sp+E0h] [bp-110h]@40
  NiTListItem<PgWin *> *fCyclea; // [sp+E0h] [bp-110h]@71
  int fCycleb; // [sp+E0h] [bp-110h]@112
  int fCyclec; // [sp+E0h] [bp-110h]@117
  signed int fCycled; // [sp+E0h] [bp-110h]@140
  signed int v187; // [sp+E8h] [bp-108h]@112
  signed int v188; // [sp+E8h] [bp-108h]@117
  int v189; // [sp+E8h] [bp-108h]@140
  char shortCutSubWinName[255]; // [sp+ECh] [bp-104h]@11
  unsigned int v191; // [sp+1ECh] [bp-4h]@1
  int v192; // [sp+1F0h] [bp+0h]@1

  v191 = (unsigned int)&v192 ^ __security_cookie;
  v1 = this;
  memset(this->m_chatLog, 0, 0x800u);
  v2 = (PgWin *)MainCharHPBarWin::CreateWin();
  v1->m_pkMainCharHPBarWin = (MainCharHPBarWin *)v2;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
  v3 = MainCharHPBarWin::CreateWin();
  v1->m_pkTargetCharHPBarWin = v3;
  v3->m_bIsMainCharHPBarWin = 0;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkTargetCharHPBarWin->baseclass_0.baseclass_0);
  if ( !g_pkToolTipWin )
  {
    v4 = MenuTexMgr::GetTexture(1u);
    g_pkToolTipWin = (PgWin *)ToolTipWin::CreateWin(v4, 7u, 7u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, g_pkToolTipWin);
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  if ( !g_pkItemInfoWin )
  {
    v5 = MenuTexMgr::GetTexture(1u);
    g_pkItemInfoWin = ItemInfoWin::CreateWin(v5, 7u, 7u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    ((void (__stdcall *)(_DWORD))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  if ( !g_pkSkillInfoWin )
  {
    v6 = MenuTexMgr::GetTexture(1u);
    g_pkSkillInfoWin = (PgWin *)SkillInfoWin::CreateWin(v6, 7u, 7u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, g_pkSkillInfoWin);
    ((void (__stdcall *)(_DWORD))g_pkSkillInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))g_pkSkillInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  if ( !g_pkSoulStoneInfoWin )
  {
    v7 = MenuTexMgr::GetTexture(1u);
    g_pkSoulStoneInfoWin = (PgWin *)SoulStoneInfoWin::CreateWin(v7, 7u, 7u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, g_pkSoulStoneInfoWin);
    ((void (__stdcall *)(_DWORD))g_pkSoulStoneInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))g_pkSoulStoneInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v8 = (PgWin *)PkRealTiemRankWin::CreateWin(&v1->baseclass_0);
  v1->m_pkKQPKRealTimeRankWin = (PkRealTiemRankWin *)v8;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v8);
  ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkKQPKRealTimeRankWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.89999998,
    0.5);
  ((void (__stdcall *)(_DWORD))v1->m_pkKQPKRealTimeRankWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v9 = (PgWin *)StatusWin::CreateWin(&v1->baseclass_0);
  v1->m_pkStatusWin = (StatusWin *)v9;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v9);
  v10 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)();
  v11 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[3].Deaffect)();
  v12 = v1->m_pkStatusWin->m_pkHPGauge_kr;
  v12->m_fCurValue = (double)v10;
  v12->m_fMaxValue = (double)v11;
  PgWinBar::OnChangeValue(v12);
  v13 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[3].SetAbStateProperty)();
  v14 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[3].IsVisible)();
  v15 = v1->m_pkStatusWin->m_pkSPGauge_kr;
  v15->m_fCurValue = (double)v13;
  v15->m_fMaxValue = (double)v14;
  PgWinBar::OnChangeValue(v15);
  ((void (__stdcall *)(signed int))v1->m_pkStatusWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkStatusWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v16 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[3].GetAbstateColor)();
  v17 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[3].__vecDelDtor)();
  v18 = v1->m_pkStatusWin->m_pkLPGauge_kr;
  v18->m_fCurValue = (double)v16;
  v18->m_fMaxValue = (double)v17;
  PgWinBar::OnChangeValue(v18);
  v19 = ItemUpgradeWin::CreateWin(&v1->baseclass_0);
  v1->m_pkItemUpgradeWin = v19;
  v1->m_pkItemUpgradeMsgWin = v19->m_pkItemUpgradeMsgWin;
  v1->m_pkMoverUpgradeWin = MoverUpgradeWin::CreateWin(&v1->baseclass_0);
  v1->m_pkItemMixWin = ItemMixWin::CreateWin(&v1->baseclass_0);
  v20 = MenuTexMgr::GetTexture(1u);
  v21 = ItemInfoWin::CreateWin(v20, 7u, 7u);
  v1->m_pkItemLinkInfoWin = v21;
  result = ItemInfoWin::CreateCloseButton(v21);
  if ( result )
  {
    v23 = TargetWin::CreateWin(&v1->baseclass_0);
    v1->m_pkTargetWin = v23;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v23,
      1u);
    ((void (__stdcall *)(signed int))v1->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v24 = (PgWin *)MiniMapWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMiniMapWin = (MiniMapWin *)v24;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v24);
    ((void (__stdcall *)(signed int))v1->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v25 = (PgWin *)ShortCutWin::CreateWin(&v1->baseclass_0, 0);
    v1->m_pkShortCutWin = (ShortCutWin *)v25;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v25);
    v1->m_pkShortCutWinV = ShortCutWin::CreateWin(&v1->baseclass_0, 1);
    v26 = 0;
    v27 = (NiObjectNET **)v1->m_pkShortCutSubWinV;
    do
    {
      *(v27 - 5) = (NiObjectNET *)ShortCutWin::CreateSubWin(&v1->baseclass_0, 0, v26);
      sprintf(shortCutSubWinName, "ShortCutSubWin%i");
      NiObjectNET::SetName(*(v27 - 5), shortCutSubWinName);
      *v27 = (NiObjectNET *)ShortCutWin::CreateSubWin(&v1->baseclass_0, 1, v26);
      sprintf(shortCutSubWinName, "ShortCutSubWinV%i");
      NiObjectNET::SetName(*v27, shortCutSubWinName);
      v1->m_bLastShortCutSubWinDirV[v26++] = 0;
      ++v27;
    }
    while ( v26 < 4 );
    GameFrameWork::NowLoadingText(v1, 10);
    v28 = (PgWin *)MainMenuWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMainMenuWin = (MainMenuWin *)v28;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v28);
    v1->m_pkChatDisplayWin = ChatDisplayWin2::CreateWin(&v1->baseclass_0);
    v29 = 0;
    do
    {
      ChatDisplayWin2::SetOption(v1->m_pkChatDisplayWin, dword_B5BB2E[v29] & 0xFFFFFF7F, v29);
      ++v29;
    }
    while ( (signed int)v29 < 5 );
    ((void (__stdcall *)(signed int, signed int))v1->m_pkChatDisplayWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
      27,
      1);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkChatDisplayWin->baseclass_0.baseclass_0.baseclass_0);
    v30 = (ChatDisplayWin *)SysMsgDisplayWin::CreateWin(&v1->baseclass_0);
    v1->m_pkSysMsgDisplayWin = (SysMsgDisplayWin *)v30;
    ChatDisplayWin::SetOption(v30, dword_B5BB42 | 0x80);
    ((void (__stdcall *)(signed int, signed int))v1->m_pkSysMsgDisplayWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
      19,
      1);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkSysMsgDisplayWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkCharInfoWin = CharInfoWin::CreateWin(&v1->baseclass_0);
    v1->m_pkInventoryWin = InventoryWin::CreateWin(&v1->baseclass_0);
    v1->m_pkEnchantGemWin1 = EnchantGemWin::CreateWin(&v1->baseclass_0, 1u);
    v1->m_pkEnchantGemWin2 = EnchantGemWin::CreateWin(&v1->baseclass_0, 2u);
    v1->m_pkEnchantGemWin3 = EnchantGemWin::CreateWin(&v1->baseclass_0, 3u);
    v1->m_pkEnchantGemDeleteWin1 = EnchantGemDeleteWin::CreateWin(&v1->baseclass_0, 1u);
    v1->m_pkEnchantGemDeleteWin2 = EnchantGemDeleteWin::CreateWin(&v1->baseclass_0, 2u);
    v1->m_pkEnchantGemDeleteWin3 = EnchantGemDeleteWin::CreateWin(&v1->baseclass_0, 3u);
    v31 = (PgWin *)EnchantGemToolTipWin::CreateWin(&v1->baseclass_0);
    v1->m_pkEnchantGemToolTipWin = (EnchantGemToolTipWin *)v31;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v31);
    ((void (__stdcall *)(_DWORD))v1->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v1->m_pkWeaponTitleWin = WeaponTitleWin::CreateWin(&v1->baseclass_0);
    v1->m_pkWeaponTitleDeleteWin = WeaponTitleDeleteWin::CreateWin(&v1->baseclass_0);
    v32 = (PgWin *)StatusBuffWin::CreateWin(&v1->baseclass_0, 0);
    v1->m_pkStatusBuffWin = (StatusBuffWin *)v32;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v32);
    v33 = (PgWin *)StatusBuffWin::CreateWin(&v1->baseclass_0, DBUFF_UI);
    v1->m_pkStatusDBuffWin = (StatusBuffWin *)v33;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v33);
    v34 = (PgWin *)StatusBuffWin::CreateWin(&v1->baseclass_0, CHARGEDBUFF_UI);
    v1->m_pkStatusChargedBuffWin = (StatusBuffWin *)v34;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v34);
    GameFrameWork::NowLoadingText(v1, 30);
    v35 = MiniHouseInventoryWin::CreateWin(&v1->baseclass_0);
    v36 = v1->m_pkInventoryWin;
    v1->m_pkMiniHouseInventoryWin = v35;
    InventoryWin::UpdateInventory(v36);
    v1->m_pkSkillWin = SkillWin::CreateWin(&v1->baseclass_0);
    v1->m_pkSystemWin = SystemWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMiniHouseMenuWin = MiniHouseMenuWin::CreateWin(&v1->baseclass_0);
    v1->m_pkPrivateStoreWin = PrivateStoreWin::CreateWin(&v1->baseclass_0);
    v1->m_pkDivideWin = DivideWin::CreateWin(&v1->baseclass_0);
    v1->m_pkInputTextWin = InputTextWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMoneyWin = MoneyWin::CreateWin(&v1->baseclass_0);
    v1->m_pkHolyRewardMoneyWin = HolyRewardMoneyWin::CreateWin(&v1->baseclass_0);
    v1->m_pkDiceRewardMoneyWin = MHDiceRewardMoneyWin::CreateWin(&v1->baseclass_0, 1);
    v1->m_pkDiceExpectMoneyWin = MHDiceRewardMoneyWin::CreateWin(&v1->baseclass_0, 0);
    v1->m_pkDiceGameWin = MiniHouseDiceGameWin::CreateWin(0);
    v1->m_pkDiceGameMinimizeWin = mhMinimizeDiceGameWin::CreateWin(0);
    v1->m_pkDiceGameHelpWin = mhDiceHelpWin::CreateWin(0);
    v1->m_pkDiceGameRankWin = mhDiceRankWin::CreateWin(0);
    v1->m_pkDiceGameRateSheetWin = mhDiceRateSheetWin::CreateWin(0);
    v1->m_pkDiceGameNpcDlgWin = NpcDialogWin::CreateWin(0, "DiceGameNpcDlgWin", 0);
    v1->m_pkGambleMiniWin = GambleMiniWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGambleWin = GambleWin::CreateWin(&v1->baseclass_0);
    v1->m_pkCoinExchangeWin = CoinExchangeWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGambleHouseCardWin = GambleHouseCardWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGambleDiceGameWin = GambleDiceGameWin::CreateWin(&v1->baseclass_0);
    v1->m_pkSlotMachineWin = SlotMachineWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGBSlotHelpWin = GBSlotHelpWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGBSlotRankWin = GBSlotRankWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMiniSlotMachineWin = MiniSlotMachineWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMainCharSpeechBubbleWin = SpeechBubbleWin::CreateWin(&v1->baseclass_0);
    v1->m_pkKQuestTimeWin = KQuestTimeWin::CreateWin(&v1->baseclass_0);
    v37 = IDTimeWin::CreateWin(&v1->baseclass_0);
    v38 = v1->m_pkPartyWinInterface;
    v1->m_pkIDTimeWin = v37;
    PartyWinInterface::Create(v38, &v1->baseclass_0);
    CNSTimer_Interval::ReSet(&v1->m_kPartyUpdateTime, Timer::ms_fCurTime);
    v1->m_kPartyUpdateTime.m_fCheckTime = 5.0;
    v1->m_pkActionWin = ActionWin::CreateWin(&v1->baseclass_0);
    v1->m_pkKingDomQuest = KingdomQuestWin::CreateWin(&v1->baseclass_0);
    v1->m_pkQuestWin = CQuestWin2::CreateWin(&v1->baseclass_0);
    v1->m_pkFriendWin = FriendWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGuildWin = GuildWin::CreateWin(&v1->baseclass_0);
    v1->m_pkPMWin = CPartyMatchWin::CreateWin(&v1->baseclass_0);
    v1->m_pkWeddingInfoWin = WeddingInfoWin::CreateWin(&v1->baseclass_0);
    v1->m_pkHolyPromiseWin = HolyPromiseWin::CreateWin(&v1->baseclass_0);
    v1->m_pkHolyPromiseAddWin = HolyPromiseAddWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGuildAcademyWin = GuildAcademyWin::CreateWin(&v1->baseclass_0);
    v1->m_pkChatBlockListWin = ChatBlockListWin::CreateWin(&v1->baseclass_0);
    v1->m_pkCurrentCommunityWin = 0;
    v1->m_pkFriendAddWin = FriendAddWin::CreateWin(&v1->baseclass_0);
    v1->m_pkOptionWin = OptionBaseWin::CreateWin(&v1->baseclass_0);
    v39 = OptionGraphicWin::CreateWin(&v1->baseclass_0);
    v40 = v1->m_pkOptionWin;
    v1->m_pkOptionGraphicWin = v39;
    v39->m_pkOptionBaseWin = v40;
    v41 = OptionSystemWin::CreateWin(&v1->baseclass_0);
    v42 = v1->m_pkOptionWin;
    v1->m_pkOptionSystemWin = v41;
    v41->m_pkOptionBaseWin = v42;
    v43 = OptionSoundWin::CreateWin(&v1->baseclass_0);
    v44 = v1->m_pkOptionWin;
    v1->m_pkOptionSoundWin = v43;
    v43->m_pkOptionBaseWin = v44;
    GameFrameWork::NowLoadingText(v1, 40);
    v1->m_pkCalculatorWin = CalculatorWin::CreateWin(&v1->baseclass_0);
    v1->m_pkItemShopWin = ItemShopWin::CreateWin(&v1->baseclass_0);
    v1->m_pkUserTradeWin = UserTradeWin::CreateWin(&v1->baseclass_0);
    v1->m_pkNPCSkillWin = NPCSkillWin::CreateWin(&v1->baseclass_0);
    v1->m_pkNPCSoulWin = NPCSoulWin::CreateWin(&v1->baseclass_0);
    v1->m_pkFriendCallWin = FriendCallWin::CreateWin(&v1->baseclass_0);
    v1->m_pkChargedItemListWin = ChargedItemListWin::CreateWin(&v1->baseclass_0);
    v1->m_pkItemShopWin2 = NPCItemWin::CreateWin(&v1->baseclass_0);
    v1->m_pkServerMenuWin = ServerMenuWin::CreateWin(&v1->baseclass_0);
    v1->m_pkReviveMenuWin = ReviveMenuWin::CreateWin(&v1->baseclass_0);
    v1->m_pkRebirthMenuWin = RebirthMenuWin::CreateWin(&v1->baseclass_0);
    v1->m_pkNpcDlgWin = NpcDialogWin::CreateWin(&v1->baseclass_0, "NPCDialogWin", 1);
    v1->m_pkStorageWin = StorageWin::CreateWin(&v1->baseclass_0);
    v45 = RewardWin::CreateWin(&v1->baseclass_0);
    v1->m_pkRewardWin = v45;
    if ( v45 )
    {
      v46 = v1->m_pkQuestWin;
      if ( v46 )
        CQuestWin2::SetRewardWin(v46, v45);
    }
    v1->m_pkRidePetWin = RidePetWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGuildWarStateWin = GuildWarStateWin::CreateWin(&v1->baseclass_0);
    v1->m_pkItemMallMenuWin = ItemMallMenuWin::CreateWin(&v1->baseclass_0);
    v47 = MenuTexMgr::GetTexture(1u);
    v1->m_pkPopupMenuWin = PopupMenuWin::CreateWin(v47, 5u, 5u, &v1->baseclass_0);
    v48 = (PgWin *)DesktopWin::CreateWin(0x800u, 0x600u, &v1->baseclass_0);
    v1->m_pkDesktopWin = (DesktopWin *)v48;
    PgWinMgr::ShowWinAtAbsoluteFar(&Pgg_kWinMgr, v48);
    v49 = (PgWin *)CastingProgressWin::CreateWin(&v1->baseclass_0, 0);
    v1->m_pkCastingProgressBar = (CastingProgressWin *)v49;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v49);
    v50 = (PgWin *)AnnounceWin::CreateWin(&v1->baseclass_0);
    v1->m_pkAnnounceWin = (AnnounceWin *)v50;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v50);
    v51 = (PgWin *)GuildWarInformWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGuildWarInformWin = (GuildWarInformWin *)v51;
    PgWinMgr::ShowWinAtAbsoluteNear(&Pgg_kWinMgr, v51);
    v52 = (PgWin *)AnnounceWin::CreateWin(&v1->baseclass_0);
    v1->m_pkRemainAnnounceWin = (AnnounceWin *)v52;
    if ( v52 )
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v52);
      ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkRemainAnnounceWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.13);
    }
    GameFrameWork::NowLoadingText(v1, 50);
    v53 = (PgWin *)GuildWarKillCountWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGuildWarKillCountWin = (GuildWarKillCountWin *)v53;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v53);
    v1->m_pkWaitingForLogoutWin = WaitingForLogoutWin::CreateWin(0x800u, 0x600u, &v1->baseclass_0);
    v1->m_pkHelpWin = HelpWin::CreateWin(&v1->baseclass_0);
    v1->m_pkPkKqRankingWin = PkKqRankingWin::CreateWin(&v1->baseclass_0);
    v1->m_pkShopWin = ShopWin::CreateWin(&v1->baseclass_0);
    v1->m_pkKeyRemappingWin = KeyRemappingWin::CreateWin(&v1->baseclass_0);
    v1->m_pkForumWin = ForumWin::CreateWin(&v1->baseclass_0);
    v1->m_pkQuestNewsWin = QuestNewsWin::CreateWin(&v1->baseclass_0);
    v54 = (PgWin *)QuestFinishWin::CreateWin(&v1->baseclass_0);
    v1->m_pkQuestFinishWin = (QuestFinishWin *)v54;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v54);
    v1->m_pkRoarWin = RoarWin::CreateWin(&v1->baseclass_0);
    v1->m_pkWingStoneWin = WingStoneWin::CreateWin(&v1->baseclass_0);
    v1->m_pkWingStoneMapWin = WingStoneMapWin::CreateWin(&v1->baseclass_0);
    v1->m_pkAutoRunMsgWin = GTInformWin::CreateWin(&v1->baseclass_0);
    v1->m_pkPlayGuideMinWin = PlayGuideMinWin::CreateWin(&v1->baseclass_0);
    if ( byte_B5BB4D )
      GameFrameWork::OpenPlayGuideMinWin(v1);
    v1->m_pkPlayGuideWin = PlayGuideWin::CreateWin(&v1->baseclass_0);
    v55 = (char *)v1->m_kGuideViewList.baseclass_0._Mylast;
    v56 = *(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0];
    v57 = (signed int)((char *)v1->m_kGuideViewList.baseclass_0._Mylast - v56) >> 2;
    if ( (unsigned int)v57 <= 0xC5 )
    {
      if ( (unsigned int)v57 >= 0xC5 )
        goto LABEL_38;
      if ( 1073741823 - (197 - v57) < (unsigned int)v57 )
        std::_Xlength_error("vector<T> too long");
      v60 = (signed int)((char *)v1->m_kGuideViewList.baseclass_0._Myend - v56) >> 2;
      if ( (unsigned int)v60 < 0xC5 )
      {
        if ( 1073741823 - ((unsigned int)v60 >> 1) >= v60 )
          v61 = ((unsigned int)v60 >> 1) + v60;
        else
          v61 = 0;
        if ( v61 < 0xC5 )
          v61 = 197;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_kGuideViewList,
          v61);
      }
      v62 = (signed int)((char *)v1->m_kGuideViewList.baseclass_0._Mylast
                       - *(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 197 != v62 )
        memset(v1->m_kGuideViewList.baseclass_0._Mylast, 0, 4 * (197 - v62));
      v59 = (int)&v1->m_kGuideViewList.baseclass_0._Mylast[197
                                                         - ((signed int)((char *)v1->m_kGuideViewList.baseclass_0._Mylast
                                                                       - *(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)];
    }
    else
    {
      v58 = v56 + 788;
      if ( (char *)(v56 + 788) == v55 )
        goto LABEL_38;
      memmove((char *)(v56 + 788), v55, 0);
      v59 = v58;
    }
    v1->m_kGuideViewList.baseclass_0._Mylast = (int *)v59;
LABEL_38:
    v63 = 0;
    v64 = 0;
    do
    {
      *(_DWORD *)(v64 + *(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0]) = -1;
      v64 += 4;
    }
    while ( v64 < 0x314 );
    v1->m_uiGuideViewKillCount = 0;
    v1->m_bGuideViewList = 0;
    fCycle = 0.0;
    v65 = CDataReader::GetRecord((CDataReader *)(ITableBase<BasicInfoTipCycle_BasicInfoTipCycleTab>::ms_pkTable + 4), 0);
    if ( v65 )
      fCycle = (double)*(unsigned int *)v65 / 1000.0;
    v66 = (PgWin *)BasicInfoTipWin::CreateWin(&v1->baseclass_0, fCycle);
    v1->m_pkBasicInfoTipWin = (BasicInfoTipWin *)v66;
    if ( byte_B5BB4C )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v66);
    v67 = (int)v1->m_pkExpeditionPartyWin;
    do
    {
      if ( !*(_DWORD *)v67 )
        *(_DWORD *)v67 = ExpeditionPartyWin::CreateWin(&v1->baseclass_0, v63);
      ++v63;
      v67 += 4;
    }
    while ( (signed int)v63 < 4 );
    v1->m_pkExpeditionWin = ExpeditionWin::CreateWin(&v1->baseclass_0);
    v1->m_pkExpeditionMemberAddWin = ExpeditionMemberAddWin::CreateWin(&v1->baseclass_0);
    v1->m_pkExpeditionWarnigMsgWin = GTInformWin::CreateWin(&v1->baseclass_0);
    v68 = v1->m_pkRaidReplyWin.m_pObject;
    if ( v68 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v68 )
        v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v68,
          1u);
      v1->m_pkRaidReplyWin.m_pObject = 0;
    }
    v1->m_pkMysteryVaultWin = MysteryVaultWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMapLinkGateWin = MapLinkGateWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHAnnounceWin = AnnounceWin::CreateWin(&v1->baseclass_0);
    v69 = mhInputPassWordWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHInputPassWordWin = v69;
    if ( !v69 && NiMessageBox::ms_pfnMessageBox )
      NiMessageBox::ms_pfnMessageBox("m_pkMHInputPassWordWin Error", &byte_98B953, 0);
    v70 = mhRepairObjWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHRepairWin = v70;
    if ( !v70 && NiMessageBox::ms_pfnMessageBox )
      NiMessageBox::ms_pfnMessageBox("Reairwin Error", byte_98B956, 0);
    v1->m_pkMHEmotionWin = mhEmotionWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHMinimizeWin = mhMinimizeWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHInfoWin = mhInfoWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHPortalListWin = mhPortalListWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHGuestBookWin = mhGuestBookWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHEditRoomWin = mhEditRoomWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHSettingWin = mhSettingWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHJoinWin = mhJoinWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMHMouseControlWin = mhMouseControlWin::CreateWin(&v1->baseclass_0);
    v71 = (PgWin *)v1->m_pkMHInfoWin;
    v1->m_pkMHCurrentWin = v71;
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      1.0,
      0.43000001);
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkMHAnnounceWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.80000001);
    v1->m_pkMakeKarisWin = MakeKarisWin::CreateWin(&v1->baseclass_0);
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkAutoRunMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.60000002);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkAutoRunMsgWin->baseclass_0.baseclass_0.baseclass_0);
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkExpeditionWarnigMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkExpeditionWarnigMsgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkItemRepairWin = ItemRepairWin::CreateWin(&v1->baseclass_0);
    v1->m_pkMoveBtnWin = MoveModeWin::CreateWin(&v1->baseclass_0);
    if ( !((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].Affect)() && User::Lv(&g_kUser) <= 0x14 )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMoveBtnWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkPrisonTimeWin = PrisonTimeWin::CreateWin(&v1->baseclass_0);
    v1->m_pkReportWin = ReportWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGMPrisonWin = GMPrisonWin::CreateWin(&v1->baseclass_0);
    v1->m_pkKQJoinReplyWin = 0;
    if ( CharSelectFrameWork::ms_bStateIsPrison )
    {
      v72 = v1->m_pkPrisonTimeWin;
      if ( v72 )
        PrisonTimeWin::ResetTime(v72, 60 * CharSelectFrameWork::ms_dPrisonTimeMinute);
    }
    v73 = v1->m_pkMapLinkGateWin;
    v74 = (int)&v1->m_kAutoCloseWinList;
    v75 = (int)v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kAutoCloseWinList);
    *(_DWORD *)(v75 + 8) = v73;
    *(_DWORD *)v75 = 0;
    *(_DWORD *)(v75 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
    v76 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v76 )
      v76->m_pkNext = (NiTListItem<PgWin *> *)v75;
    else
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v75;
    ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v75;
    v77 = v1->m_pkMakeKarisWin;
    v78 = (*(int (__thiscall **)(NiTList<PgWin *> *))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
    *(_DWORD *)(v78 + 8) = v77;
    *(_DWORD *)v78 = 0;
    *(_DWORD *)(v78 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
    v79 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v79 )
      v79->m_pkNext = (NiTListItem<PgWin *> *)v78;
    else
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v78;
    ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v78;
    v80 = TargetOfTheTargetWin::CreateWin(&v1->baseclass_0);
    v1->m_pkTOTWin = v80;
    ((void (__thiscall *)(TargetOfTheTargetWin *, unsigned int, unsigned int, _DWORD, _DWORD))v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v80,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.56999999,
      0.2);
    v1->m_pkGTInformWin = GTInformWin::CreateWin(&v1->baseclass_0);
    v1->m_pkRollingDiceMsgWin = RollingDiceMsgWin::CreateWin(&v1->baseclass_0);
    v1->m_pkRollingDiceWin = RollingDiceWin::CreateWin(&v1->baseclass_0);
    v1->m_pkPartyLootSetupWin = PartyLootSetupWin::CreateWin(&v1->baseclass_0);
    v1->m_pkGateChannelWin = GateChannelWin::CreateWin(&v1->baseclass_0);
    v1->m_pkQuestStartItemWin = QuestStartItemWin::CreateWin(&v1->baseclass_0);
    fCyclea = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead;
    while ( fCyclea )
    {
      v81 = fCyclea;
      fCyclea = fCyclea->m_pkNext;
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList,
        v81);
    }
    *(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = 0;
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = 0;
    v82 = v1->m_pkStatusWin;
    v83 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v83 + 8) = v82;
    *(_DWORD *)v83 = 0;
    *(_DWORD *)(v83 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v84 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v84 )
      v84->m_pkNext = (NiTListItem<PgWin *> *)v83;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v83;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v83;
    v85 = v1->m_pkMiniMapWin;
    v86 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v86 + 8) = v85;
    *(_DWORD *)v86 = 0;
    *(_DWORD *)(v86 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v87 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v87 )
      v87->m_pkNext = (NiTListItem<PgWin *> *)v86;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v86;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v86;
    v88 = v1->m_pkChatDisplayWin;
    v89 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v89 + 8) = v88;
    *(_DWORD *)v89 = 0;
    *(_DWORD *)(v89 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v90 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v90 )
      v90->m_pkNext = (NiTListItem<PgWin *> *)v89;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v89;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v89;
    v91 = v1->m_pkTargetWin;
    v92 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v92 + 8) = v91;
    *(_DWORD *)v92 = 0;
    *(_DWORD *)(v92 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v93 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v93 )
      v93->m_pkNext = (NiTListItem<PgWin *> *)v92;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v92;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v92;
    v94 = v1->m_pkShortCutWin;
    v95 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v95 + 8) = v94;
    *(_DWORD *)v95 = 0;
    *(_DWORD *)(v95 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v96 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v96 )
      v96->m_pkNext = (NiTListItem<PgWin *> *)v95;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v95;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v95;
    v97 = v1->m_pkMainMenuWin;
    v98 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v98 + 8) = v97;
    *(_DWORD *)v98 = 0;
    *(_DWORD *)(v98 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v99 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v99 )
      v99->m_pkNext = (NiTListItem<PgWin *> *)v98;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v98;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v98;
    v100 = v1->m_pkTOTWin;
    v101 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v101 + 8) = v100;
    *(_DWORD *)v101 = 0;
    *(_DWORD *)(v101 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v102 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v102 )
      v102->m_pkNext = (NiTListItem<PgWin *> *)v101;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v101;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v101;
    v103 = v1->m_pkGTInformWin;
    v104 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v104 + 8) = v103;
    *(_DWORD *)v104 = 0;
    *(_DWORD *)(v104 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v105 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v105 )
      v105->m_pkNext = (NiTListItem<PgWin *> *)v104;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v104;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v104;
    v106 = v1->m_pkMysteryVaultWin;
    v107 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v107 + 8) = v106;
    *(_DWORD *)v107 = 0;
    *(_DWORD *)(v107 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v108 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v108 )
      v108->m_pkNext = (NiTListItem<PgWin *> *)v107;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v107;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v107;
    v109 = v1->m_pkPlayGuideMinWin;
    v110 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v110 + 8) = v109;
    *(_DWORD *)v110 = 0;
    *(_DWORD *)(v110 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v111 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v111 )
      v111->m_pkNext = (NiTListItem<PgWin *> *)v110;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v110;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v110;
    v112 = v1->m_pkShortCutWin;
    v113 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v113 + 8) = v112;
    *(_DWORD *)v113 = 0;
    *(_DWORD *)(v113 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v114 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v114 )
      v114->m_pkNext = (NiTListItem<PgWin *> *)v113;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v113;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v113;
    v115 = v1->m_pkShortCutWinV;
    v116 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v116 + 8) = v115;
    *(_DWORD *)v116 = 0;
    *(_DWORD *)(v116 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v117 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v117 )
      v117->m_pkNext = (NiTListItem<PgWin *> *)v116;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v116;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v116;
    v118 = v1->m_pkQuestNewsWin;
    v119 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v119 + 8) = v118;
    *(_DWORD *)v119 = 0;
    *(_DWORD *)(v119 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v120 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v120 )
      v120->m_pkNext = (NiTListItem<PgWin *> *)v119;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v119;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v119;
    fCycleb = (int)v1->m_pkShortCutSubWin;
    v187 = 4;
    do
    {
      v121 = *(_DWORD *)fCycleb;
      v122 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
      *(_DWORD *)(v122 + 8) = v121;
      *(_DWORD *)v122 = 0;
      *(_DWORD *)(v122 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
      v123 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v123 )
        v123->m_pkNext = (NiTListItem<PgWin *> *)v122;
      else
        v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v122;
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v122;
      ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      fCycleb += 4;
      --v187;
    }
    while ( v187 );
    fCyclec = (int)v1->m_pkShortCutSubWinV;
    v188 = 4;
    do
    {
      v124 = *(_DWORD *)fCyclec;
      v125 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
      *(_DWORD *)(v125 + 8) = v124;
      *(_DWORD *)v125 = 0;
      *(_DWORD *)(v125 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
      v126 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v126 )
        v126->m_pkNext = (NiTListItem<PgWin *> *)v125;
      else
        v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v125;
      fCyclec += 4;
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v125;
      ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      --v188;
    }
    while ( v188 );
    v127 = v1->m_pkSysMsgDisplayWin;
    v128 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v128 + 8) = v127;
    *(_DWORD *)v128 = 0;
    *(_DWORD *)(v128 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v129 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v129 )
      v129->m_pkNext = (NiTListItem<PgWin *> *)v128;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v128;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v128;
    v130 = v1->m_pkStatusBuffWin;
    v131 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v131 + 8) = v130;
    *(_DWORD *)v131 = 0;
    *(_DWORD *)(v131 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v132 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v132 )
      v132->m_pkNext = (NiTListItem<PgWin *> *)v131;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v131;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v131;
    v133 = v1->m_pkStatusDBuffWin;
    v134 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v134 + 8) = v133;
    *(_DWORD *)v134 = 0;
    *(_DWORD *)(v134 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v135 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v135 )
      v135->m_pkNext = (NiTListItem<PgWin *> *)v134;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v134;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v134;
    v136 = v1->m_pkStatusChargedBuffWin;
    v137 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v137 + 8) = v136;
    *(_DWORD *)v137 = 0;
    *(_DWORD *)(v137 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v138 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v138 )
      v138->m_pkNext = (NiTListItem<PgWin *> *)v137;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v137;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v137;
    v139 = ServerTimeWin::CreateWin(&v1->baseclass_0);
    v1->m_pkServerTimeWin = v139;
    ServerTimeWin::EnableServerTime(v139, 1);
    v140 = v1->m_pkServerTimeWin;
    v141 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v141 + 8) = v140;
    *(_DWORD *)v141 = 0;
    *(_DWORD *)(v141 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v142 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v142 )
      v142->m_pkNext = (NiTListItem<PgWin *> *)v141;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v141;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v141;
    v143 = AttendIconWin::CreateWin(&v1->baseclass_0);
    v144 = v143;
    v1->m_pkAttendIconWin = v143;
    v145 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
    *(_DWORD *)(v145 + 8) = v144;
    *(_DWORD *)v145 = 0;
    *(_DWORD *)(v145 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    v146 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
    if ( v146 )
      v146->m_pkNext = (NiTListItem<PgWin *> *)v145;
    else
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v145;
    ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v145;
    v147 = (NiObjectNET *)AnnounceWin::CreateWin(&v1->baseclass_0);
    v1->m_pkWelcomeMsgWin = (AnnounceWin *)v147;
    NiObjectNET::SetName(v147, "WelcomeMsgWin");
    v148 = Font::Get(LARGEBOLD);
    AnnounceWin::SetFont(v1->m_pkWelcomeMsgWin, v148);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkWelcomeMsgWin->baseclass_0.baseclass_0.baseclass_0);
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkWelcomeMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.30000001);
    v1->m_pkCollectWin = CollectWin::CreateWin(&v1->baseclass_0, 0);
    v1->m_pkCollectPeepingWin = CollectWin::CreateWin(&v1->baseclass_0, 1);
    v189 = (int)v1->m_pkCollectCardWin;
    fCycled = 4;
    do
    {
      *(_DWORD *)v189 = CollectCardWin::CreateWin(&v1->baseclass_0);
      v149 = fCycled-- == 1;
      v189 += 4;
    }
    while ( !v149 );
    v1->m_pkAttendRewardWin = AttendRewardWin::CreateWin(&v1->baseclass_0);
    v1->m_pkAttendCheckWin = AttendCheckWin::CreateWin(&v1->baseclass_0);
    GameFrameWork::OnOpenAttendIconWin(v1);
    v150 = v1->m_pkAttendIconWin;
    if ( v150 )
    {
      v150->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      v150->m_bEvtState = 0;
    }
    v1->m_pkFeedMoverWin = FeedMoverWin::CreateWin(&v1->baseclass_0);
    v1->m_pkPetNameEditWin = PetNameEditWin::CreateWin(&v1->baseclass_0);
    v1->m_pkEventRankWin = EventRankWin::CreateWin(&v1->baseclass_0);
    v1->m_pkEventTimeWin = EventTimeWin::CreateWin(&v1->baseclass_0);
    v1->m_pkVoteWin = VoteWin::CreateWin(&v1->baseclass_0);
    v1->m_pkKQPlayerList = v1->m_pkKingDomQuest->m_pkKingdomQuestPlayerList;
    v1->m_pkKQTeamList = v1->m_pkKingDomQuest->m_pkKingdomQuestTeamList;
    v1->m_pkIndunLevelSelectWin = IndunLevelSelectWin::CreateWin(&v1->baseclass_0);
    v1->m_pkIndunLevelMsgWin = IndunLevelMsgWin::CreateWin(&v1->baseclass_0);
    v1->m_pkKQScoreWin = KQScoreWin::CreateWin(&v1->baseclass_0);
    v151 = KDTeamScoreWin::CreateWin(&v1->baseclass_0);
    v1->m_pkKDTeamScoreWin = v151;
    if ( v151 )
    {
      v1->m_pkMarketSearchWin = MarketSearchWin::CreateWin(&v1->baseclass_0);
      v1->m_pkPuzzleTimeWin = PuzzleTimeWin::CreateWin(&v1->baseclass_0);
      v1->m_pkRandomOptionWin = RandomOptionWin::CreateWin(&v1->baseclass_0);
      v1->m_pkChatColorSpinWin = ChatColorSpinWin::CreateWin(&v1->baseclass_0);
      v1->m_pkTermExtendWin = TermExtendWin::CreateWin(&v1->baseclass_0);
      v1->m_pkMinimonAutoItemUseWin = MinimonAutoItemUseWin::CreateWin(&v1->baseclass_0);
      v1->m_pkClassChangeWin = ClassChangeWin::CreateWin(&v1->baseclass_0);
      v1->m_pkGuildEmblemWin = GuildEmblemWin::CreateWin(&v1->baseclass_0);
      v1->m_pkIDRankingWin = IDRankingWin::CreateWin(&v1->baseclass_0);
      v1->m_pkPartyScoreWin = PartyScoreWin::CreateWin(&v1->baseclass_0);
      v152 = v1->m_pkRandomOptionWin;
      v153 = (*(int (__thiscall **)(NiTList<PgWin *> *))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v153 + 8) = v152;
      *(_DWORD *)v153 = 0;
      *(_DWORD *)(v153 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v154 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v154 )
        v154->m_pkNext = (NiTListItem<PgWin *> *)v153;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v153;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v153;
      v155 = v1->m_pkItemUpgradeMsgWin;
      v156 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v156 + 8) = v155;
      *(_DWORD *)v156 = 0;
      *(_DWORD *)(v156 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v157 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v157 )
        v157->m_pkNext = (NiTListItem<PgWin *> *)v156;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v156;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v156;
      v158 = v1->m_pkMapLinkGateWin;
      v159 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v159 + 8) = v158;
      *(_DWORD *)v159 = 0;
      *(_DWORD *)(v159 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v160 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v160 )
        v160->m_pkNext = (NiTListItem<PgWin *> *)v159;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v159;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v159;
      v161 = v1->m_pkMinimonAutoItemUseWin;
      v162 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v162 + 8) = v161;
      *(_DWORD *)v162 = 0;
      *(_DWORD *)(v162 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v163 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v163 )
        v163->m_pkNext = (NiTListItem<PgWin *> *)v162;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v162;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v162;
      v164 = v1->m_pkNpcDlgWin;
      v165 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v165 + 8) = v164;
      *(_DWORD *)v165 = 0;
      *(_DWORD *)(v165 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v166 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v166 )
        v166->m_pkNext = (NiTListItem<PgWin *> *)v165;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v165;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v165;
      v167 = v1->m_pkIDRankingWin;
      v168 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v168 + 8) = v167;
      *(_DWORD *)v168 = 0;
      *(_DWORD *)(v168 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v169 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v169 )
        v169->m_pkNext = (NiTListItem<PgWin *> *)v168;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v168;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v168;
      v170 = v1->m_pkEventRankWin;
      v171 = (int)v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v1->m_kCanHideWinList);
      *(_DWORD *)(v171 + 8) = v170;
      *(_DWORD *)v171 = 0;
      *(_DWORD *)(v171 + 4) = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
      v172 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v172 )
        v172->m_pkNext = (NiTListItem<PgWin *> *)v171;
      else
        v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v171;
      ++*(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v171;
      v173 = v1->m_pkEventRankWin;
      v174 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v174 + 8) = v173;
      *(_DWORD *)v174 = 0;
      *(_DWORD *)(v174 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v175 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v175 )
        v175->m_pkNext = (NiTListItem<PgWin *> *)v174;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v174;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v174;
      v176 = v1->m_pkTermExtendWin;
      v177 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v74 + 4))(&v1->m_kAutoCloseWinList);
      *(_DWORD *)(v177 + 8) = v176;
      *(_DWORD *)v177 = 0;
      *(_DWORD *)(v177 + 4) = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      v178 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail;
      if ( v178 )
        v178->m_pkNext = (NiTListItem<PgWin *> *)v177;
      else
        v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v177;
      v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v177;
      ++*(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v179 = v1->m_pkMinimonAutoItemUseWin;
      v180 = (*(int (__thiscall **)(int))(*(_DWORD *)v74 + 4))(v74);
      *(_DWORD *)(v180 + 8) = v179;
      *(_DWORD *)v180 = 0;
      *(_DWORD *)(v180 + 4) = *(_DWORD *)(v74 + 8);
      v181 = *(_DWORD *)(v74 + 8);
      if ( v181 )
        *(_DWORD *)v181 = v180;
      else
        *(_DWORD *)(v74 + 4) = v180;
      ++*(_DWORD *)(v74 + 12);
      *(_DWORD *)(v74 + 8) = v180;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// 487380: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A94395: using guessed type bool CharSelectFrameWork__ms_bStateIsPrison;
// A94398: using guessed type unsigned __int32 CharSelectFrameWork__ms_dPrisonTimeMinute;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97EBC: using guessed type int ITableBase_BasicInfoTipCycle_BasicInfoTipCycleTab___ms_pkTable;
// B5BB2E: using guessed type int dword_B5BB2E[];
// B5BB42: using guessed type int dword_B5BB42;
// B5BB4C: using guessed type char byte_B5BB4C;
// B5BB4D: using guessed type char byte_B5BB4D;

//----- (004891B0) --------------------------------------------------------
bool __thiscall GameFrameWork::Init(GameFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  GameFrameWork *v2; // edi@1
  QuestHelperMgr *v3; // eax@4
  ShortCutWin *v4; // ecx@4
  bool result; // al@7
  int v6; // ecx@11
  signed int v7; // eax@11
  ShortCutWin **v8; // esi@19
  signed int v9; // ebx@19
  PgNet *v10; // ecx@24
  NETCOMMAND netcmd; // [sp+30h] [bp-38h]@24
  unsigned int v12; // [sp+58h] [bp-10h]@1
  int v13; // [sp+68h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  kTutorialMgr.m_pkFrameWork = (PgFrameWork *)this;
  QuestDataMgr::GetQuest()[1].m_pQuestArray = (PLAYER_QUEST_INFO *)this;
  v3 = QuestHelperMgr::GetInstance();
  QuestHelperMgr::Init(v3);
  GameFrameWork::NowLoadingText(v2, 0);
  v4 = v2->m_pkShortCutWin;
  if ( v4 )
    ShortCutWin::ResetIconWin(v4);
  if ( !GameFrameWork::InitNet(v2) || !GameFrameWork::InitInput(v2) || !GameFrameWork::InitWindow(v2) )
    goto LABEL_29;
  if ( !CharSelectFrameWork::ms_bLoadShortCutSizeOptionSuccess )
  {
    HIWORD(dword_B5BB54) = 5;
    v6 = 0;
    v7 = (signed int)byte_B5BB59;
    do
    {
      *(_BYTE *)v7 = v6;
      *(_BYTE *)(v7 - 1) = 12;
      *(_BYTE *)(v7 + 1) = 0;
      v7 += 3;
      ++v6;
    }
    while ( v7 < (signed int)&MachineOpt::ms_kUserLoginOption );
  }
  GameFrameWork::ApplyShortCutSizeData(v2);
  ScreenBDMgr::InitCharBD(&g_kScrnBDMgr, byte_B5BB4B);
  GameFrameWork::NowLoadingText(v2, 60);
  if ( !CharSelectFrameWork::ms_bLoadWindowsPosOptionSuccess
    || byte_B5BB27
    || MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth != dword_A826F2
    && MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight != dword_A826F6 )
    GameFrameWork::ChangeWinDefaultPos(v2);
  else
    GameFrameWork::ApplyWindowPosData(v2);
  GameFrameWork::ApplyKeyMappingData(v2);
  ShortCutMgr::CheckContents(&g_kShortCutMgr);
  ShortCutWin::ReflashShortCutWin(v2->m_pkShortCutWin);
  ShortCutWin::ReflashShortCutWin(v2->m_pkShortCutWinV);
  v8 = v2->m_pkShortCutSubWinV;
  v9 = 4;
  do
  {
    ShortCutWin::ReflashShortCutWin(*(v8 - 5));
    ShortCutWin::ReflashShortCutWin(*v8);
    ++v8;
    --v9;
  }
  while ( v9 );
  CNSTimer_Interval::ReSet(&v2->m_kTimerInterval, Timer::ms_fCurTime);
  v2->m_kTimerInterval.m_fCheckTime = 5.0;
  GameFrameWork::NowLoadingText(v2, 70);
  if ( GameFrameWork::InitWorld(v2)
    && (CharResMgr::PreLoadCharRes(&g_kCharResMgr), GameFrameWork::NowLoadingText(v2, 95), GameFrameWork::InitSystem(v2)) )
  {
    if ( GameFrameWork::InitCharacter(v2) )
    {
      GameFrameWork::NowLoadingText(v2, 100);
      MachineOpt::SetGraphicOption(&MachineOpt::ms_kGraphicOption);
    }
    v10 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
    netcmd.protocol = 28767;
    PgNet::SendNetMsg(v10, &netcmd, 2);
    PgNet::Flush(&v2->m_spWorldMgrNet.m_pObject->baseclass_0);
    result = 1;
  }
  else
  {
LABEL_29:
    result = 0;
  }
  return result;
}
// A826F2: using guessed type int dword_A826F2;
// A826F6: using guessed type int dword_A826F6;
// A85C00: using guessed type int __security_cookie;
// A94390: using guessed type bool CharSelectFrameWork__ms_bLoadShortCutSizeOptionSuccess;
// A94391: using guessed type bool CharSelectFrameWork__ms_bLoadWindowsPosOptionSuccess;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98300: using guessed type int _local static guard_;
// B5BB27: using guessed type char byte_B5BB27;
// B5BB4B: using guessed type char byte_B5BB4B;
// B5BB54: using guessed type int dword_B5BB54;

//----- (0048A4C0) --------------------------------------------------------
bool __thiscall GatheringTask::OnProcessNetMsg(GatheringTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GatheringTask *v5; // edi@1
  GatheringWin *v6; // ecx@4
  bool result; // al@5
  Char *v8; // eax@6
  MobInfo *v9; // eax@7
  GatherType v10; // eax@8
  GatherInfo *v11; // eax@8
  GatherInfo *v12; // esi@8
  signed int v13; // ebx@10
  char v14; // cl@12
  int v15; // eax@12
  void *v16; // esi@18
  Char *v17; // eax@18
  Char *v18; // ebx@18
  MobInfo *v19; // eax@20
  GatherType v20; // eax@21
  GatherInfo *v21; // eax@21
  unsigned __int16 *v22; // eax@22
  Char *v23; // esi@24
  Char *v24; // eax@29
  Char *v25; // edi@32
  Char *v26; // eax@32
  Char *pkTarget; // [sp+14h] [bp+8h]@6
  unsigned __int16 *pkCaster; // [sp+20h] [bp+14h]@9
  Char *pkCastera; // [sp+20h] [bp+14h]@18

  v5 = this;
  if ( iDepart == 8 )
  {
    switch ( iCommand )
    {
      case 46:
        if ( *((_WORD *)pvData + 2) != 2817 )
        {
          v6 = this->m_pkGatheringWin;
          v5->m_eState = 0;
          GatheringWin::GatheringFail(v6);
          Char::StopGathering(g_pkMainChar);
          return 1;
        }
        v8 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
        pkTarget = v8;
        if ( !v8
          || (v9 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v8->m_kCharShape.m_kMobID, 1)) == 0
          || (v10 = GatherInfoTable::MapMobTypeToGatherType(v9->Type),
              v11 = GatheringTask::FindGatherInfo(v5, v10, *(_WORD *)pvData),
              (v12 = v11) == 0)
          || (pkCaster = (unsigned __int16 *)ItemInfoTab::GetByInxName(v11->EqipItemView)) == 0 )
          return 1;
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v5->m_pkGatheringWin->baseclass_0.baseclass_0.baseclass_0);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->m_pkGatheringWin->baseclass_0.baseclass_0.baseclass_0);
        v13 = v12->AniNumber;
        if ( ChargedItemList::IsEffecting(EE_FASTMINING) )
          v13 /= 2;
        v14 = v12->NeededTool0[0];
        v15 = 3;
        if ( v14 == 65 )
        {
          v15 = 5;
        }
        else
        {
          if ( v14 == 67 || v14 == 77 )
            v15 = 4;
        }
        GatheringWin::StartGathering(v5->m_pkGatheringWin, 0x3E8u, v13, v15);
        Char::ActGathering(g_pkMainChar, pkTarget, *pkCaster);
        v5->m_eState = 2;
        result = 1;
        break;
      case 47:
        v16 = pvData;
        pkCastera = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
        v17 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v16 + 1));
        v18 = v17;
        if ( !pkCastera
          || !v17
          || (v19 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v17->m_kCharShape.m_kMobID, 1)) == 0
          || (v20 = GatherInfoTable::MapMobTypeToGatherType(v19->Type),
              (v21 = GatheringTask::FindGatherInfo(v5, v20, *((_WORD *)v16 + 2))) == 0)
          || (v22 = (unsigned __int16 *)ItemInfoTab::GetByInxName(v21->EqipItemView)) == 0 )
          return 1;
        Char::ActGathering(pkCastera, v18, *v22);
        return 1;
      case 49:
        v23 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
        CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
        if ( !v23 )
          return 1;
        Char::StopGathering(v23);
        if ( v23 == g_pkMainChar )
          GatheringWin::GatheringFail(v5->m_pkGatheringWin);
        return 1;
      case 51:
        if ( *(_WORD *)pvData == 2817 )
        {
          v24 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
          if ( v24 )
            Char::ActResourceDisappearing(v24);
        }
        GatheringWin::GatheringSuccess(v5->m_pkGatheringWin);
        Char::StopGathering(g_pkMainChar);
        v5->m_eState = 0;
        return 1;
      case 52:
        v25 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
        v26 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
        if ( v26 )
          Char::ActResourceDisappearing(v26);
        if ( !v25 )
          return 1;
        Char::StopGathering(v25);
        return 1;
      default:
        goto LABEL_36;
    }
  }
  else
  {
LABEL_36:
    result = 0;
  }
  return result;
}

//----- (0048A7B0) --------------------------------------------------------
GatherInfo *__thiscall GatheringTask::FindGatherInfo(GatheringTask *this, GatherType eType, int *bIsItemUsable)
{
  int v3; // ebx@1
  void *v4; // eax@2
  void *v5; // edi@2
  int v6; // eax@5
  char v7; // cl@6
  int v8; // eax@8
  char v9; // cl@9
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v10; // eax@10
  unsigned int v11; // edi@13
  Item *v12; // eax@14
  ItemInfo *v13; // eax@15
  const char *v14; // ecx@16
  int v15; // eax@16
  int v16; // esi@16
  char v17; // dl@17
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v18; // eax@18
  int v19; // ebx@18
  unsigned int v20; // esi@19
  int v21; // eax@19
  unsigned int v22; // edi@21
  unsigned int v23; // edx@21
  const char *v24; // ecx@23
  int v25; // eax@25
  bool v26; // sf@25
  signed int v27; // eax@27
  char *v29; // eax@32
  int v30; // esi@34
  char *v31; // esi@42
  signed int v32; // edi@42
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pai result; // [sp+0h] [bp-80h]@10
  int dwValue; // [sp+8h] [bp-78h]@13
  int *v35; // [sp+Ch] [bp-74h]@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v36; // [sp+10h] [bp-70h]@18
  unsigned int uiUsing; // [sp+14h] [bp-6Ch]@13
  void *pkGatherInfo; // [sp+18h] [bp-68h]@1
  unsigned int i; // [sp+1Ch] [bp-64h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+20h] [bp-60h]@8
  int v41; // [sp+3Ch] [bp-44h]@10
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocato mapTool[3]; // [sp+40h] [bp-40h]@1
  unsigned int v43; // [sp+70h] [bp-10h]@1
  int v44; // [sp+7Ch] [bp-4h]@1
  int v45; // [sp+80h] [bp+0h]@1

  v43 = (unsigned int)&v45 ^ __security_cookie;
  v35 = bIsItemUsable;
  *bIsItemUsable = 1;
  v3 = 0;
  pkGatherInfo = 0;
  _eh_vector_constructor_iterator_(
    mapTool,
    0x10u,
    3,
    (void (__thiscall *)(void *))std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>,
    (void (__thiscall *)(void *))std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>);
  v44 = 0;
  if ( ITableBase<GatherInfo_GatherInfoTable>::GetTotal() )
  {
    do
    {
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 4), v3);
      v5 = v4;
      if ( v4 && *(_DWORD *)((char *)v4 + 34) == eType )
      {
        if ( !strcmp((const char *)v4 + 38, (const char *)&unk_98B950) )
        {
          v44 = -1;
          _eh_vector_destructor_iterator_(
            mapTool,
            0x10u,
            3,
            (void (__thiscall *)(void *))std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>);
          return (GatherInfo *)v5;
        }
        v6 = (int)((char *)v5 + 38);
        do
          v7 = *(_BYTE *)v6++;
        while ( v7 );
        if ( (void *)v6 != (char *)v5 + 39 )
        {
          v8 = (int)((char *)v5 + 38);
          thisa.baseclass_0._Myres = 15;
          thisa.baseclass_0._Mysize = 0;
          thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          do
            v9 = *(_BYTE *)v8++;
          while ( v9 );
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &thisa,
            (const char *)v5 + 38,
            v8 - (_DWORD)((char *)v5 + 39));
          v41 = v3;
          LOBYTE(v44) = 1;
          v10 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>((std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_tr *)mapTool, (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> *)&thisa);
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Linsert(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)mapTool,
            &result,
            v10,
            0);
          LOBYTE(v44) = 0;
          if ( thisa.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&thisa);
        }
      }
      ++v3;
    }
    while ( v3 < ITableBase<GatherInfo_GatherInfoTable>::GetTotal() );
  }
  ChargedItemList::GetTotalEffectingValue(EE_MOREINVENTORY, (unsigned int *)&dwValue);
  v11 = 0;
  uiUsing = 8 * (3 * dwValue + 6);
  i = 0;
  while ( 1 )
  {
    v12 = g_kInventory.m_aspInv[v11].m_pObject;
    if ( v12 )
    {
      v13 = v12->m_pkInfo;
      if ( v13 )
      {
        v14 = v13->InxName;
        v15 = (int)v13->InxName;
        *(_DWORD *)&thisa.baseclass_0._Alval.baseclass_0.dummy[0] = 15;
        thisa.baseclass_0._Myres = 0;
        thisa.baseclass_0.___u0._Bx._Buf[4] = 0;
        v16 = v15 + 1;
        do
          v17 = *(_BYTE *)v15++;
        while ( v17 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&thisa + 4),
          v14,
          v15 - v16);
        LOBYTE(v44) = 2;
        v18 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
                (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)mapTool,
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&thisa + 4));
        v19 = *((_DWORD *)&mapTool[0].baseclass_0.baseclass_0 + 1);
        v36 = v18;
        if ( v18 == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&mapTool[0].baseclass_0.baseclass_0
                    + 1) )
          goto LABEL_47;
        v20 = v18->_Myval.baseclass_0.first.baseclass_0._Mysize;
        v21 = (int)&v18->_Myval;
        if ( *(_DWORD *)(v21 + 20) >= 0x10u )
          v21 = *(_DWORD *)v21;
        v22 = thisa.baseclass_0._Myres;
        v23 = thisa.baseclass_0._Myres;
        if ( thisa.baseclass_0._Myres >= v20 )
          v23 = v20;
        v24 = *(const char **)&thisa.baseclass_0.___u0._Bx._Buf[4];
        if ( *(_DWORD *)&thisa.baseclass_0._Alval.baseclass_0.dummy[0] < 0x10u )
          v24 = &thisa.baseclass_0.___u0._Bx._Buf[4];
        v25 = std::char_traits<char>::compare(v24, (const char *)v21, v23);
        v26 = v25 < 0;
        if ( !v25 )
        {
          if ( v22 >= v20 )
            v27 = v22 != v20;
          else
            v27 = -1;
          v26 = v27 < 0;
        }
        v11 = i;
        if ( v26 )
        {
LABEL_47:
          *(_DWORD *)&result.baseclass_0.second = v19;
          v29 = (char *)&result.baseclass_0.second;
        }
        else
        {
          v29 = (char *)&v36;
        }
        v30 = *(_DWORD *)v29;
        LOBYTE(v44) = 0;
        if ( *(_DWORD *)&thisa.baseclass_0._Alval.baseclass_0.dummy[0] >= 0x10u )
        {
          operator delete(*(void **)&thisa.baseclass_0.___u0._Bx._Buf[4]);
          v19 = *((_DWORD *)&mapTool[0].baseclass_0.baseclass_0 + 1);
        }
        *(_DWORD *)&thisa.baseclass_0._Alval.baseclass_0.dummy[0] = 15;
        thisa.baseclass_0._Myres = 0;
        thisa.baseclass_0.___u0._Bx._Buf[4] = 0;
        if ( v30 != v19 )
          break;
      }
    }
    ++v11;
    i = v11;
    if ( v11 >= 0xC0 )
      goto LABEL_42;
  }
  if ( v11 >= uiUsing )
    *v35 = 0;
  pkGatherInfo = CDataReader::GetRecord(
                   (CDataReader *)(ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 4),
                   *(_DWORD *)(v30 + 40));
LABEL_42:
  v31 = (char *)(&mapTool[0].baseclass_0.baseclass_0 + 1);
  v32 = 3;
  do
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *)(v31 - 4),
      *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ **)(*(_DWORD *)v31 + 4));
    *(_DWORD *)(*(_DWORD *)v31 + 4) = *(_DWORD *)v31;
    **(_DWORD **)v31 = *(_DWORD *)v31;
    *(_DWORD *)(*(_DWORD *)v31 + 8) = *(_DWORD *)v31;
    *((_DWORD *)v31 + 1) = 0;
    v31 += 16;
    --v32;
  }
  while ( v32 );
  v44 = -1;
  _eh_vector_destructor_iterator_(
    mapTool,
    0x10u,
    3,
    (void (__thiscall *)(void *))std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>);
  return (GatherInfo *)pkGatherInfo;
}
// A85C00: using guessed type int __security_cookie;
// A97E2C: using guessed type int ITableBase_GatherInfo_GatherInfoTable___ms_pkTable;

//----- (0048AAD0) --------------------------------------------------------
void __thiscall GatheringTask::DirectMessage(GatheringTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GatheringTask *v4; // esi@1
  void *v5; // ebx@11
  MobInfo *v6; // eax@12
  GatherType v7; // eax@12
  GatherType v8; // edi@12
  unsigned __int16 v9; // ax@12
  char *v10; // edi@21
  unsigned int v11; // [sp-Ch] [bp-10h]@16

  v4 = this;
  if ( iMsgTag == 30 )
  {
    if ( !this->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail )
    {
      v5 = pvBody;
      if ( !Char::IsBrokenResource(*(Char **)pvBody) )
      {
        v6 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(*(_WORD *)(*(_DWORD *)v5 + 942), 1);
        v7 = GatherInfoTable::MapMobTypeToGatherType(v6->Type);
        v8 = v7;
        v9 = GatherInfoTable::GetSkillIDByType(v7);
        if ( v9 != -1 )
        {
          if ( !Skill::IsLearnProdSkill(v9)
            || (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() )
          {
            v11 = 1821530491;
          }
          else
          {
            if ( GatheringTask::FindGatherInfo((GatheringTask *)((char *)v4 - 8), v8, &iMsgTag) )
            {
              if ( iMsgTag )
              {
                LOWORD(pvBody) = *(_WORD *)(*(_DWORD *)v5 + 548);
                NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x2Du, &pvBody, 2);
                v4->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
                return;
              }
              v11 = -1074321369;
            }
            else
            {
              v11 = -12878195;
            }
          }
          v10 = TextData::Get(v11);
          if ( v4->baseclass_0.baseclass_0.m_uiRefCount )
          {
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v4->baseclass_0.baseclass_0.m_uiRefCount + 4))(
              25,
              v10,
              v4);
            if ( v4->baseclass_0.baseclass_0.m_uiRefCount )
              (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v4->baseclass_0.baseclass_0.m_uiRefCount + 20))(
                25,
                v10,
                v4);
          }
          ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
            v4,
            25,
            v10,
            v4);
        }
      }
    }
  }
  else
  {
    if ( iMsgTag == 31 )
    {
      if ( this->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail == (NiTListItem<NiPointer<ITask> > *)2 )
      {
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x32u, 0, 0);
        v4->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)3;
      }
    }
    else
    {
      if ( iMsgTag == 32
        && this->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail == (NiTListItem<NiPointer<ITask> > *)2 )
      {
        if ( !pvBody )
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x30u, 0, 0);
        GatheringWin::GatheringFail(*(GatheringWin **)&v4->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]);
        Char::StopGathering(g_pkMainChar);
        v4->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = 0;
      }
    }
  }
}

//----- (0048AC70) --------------------------------------------------------
MobInfo *__cdecl IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  MobInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(MobInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (0048ACC0) --------------------------------------------------------
void __cdecl MachineOpt::SetViewTerrainLength(float fLength)
{
  MachineOpt::ms_kGraphicOption.fViewTerrainLength = fLength;
  if ( !byte_AA5149 )
    flt_B30B8C = fLength * MachineOpt::ms_kGraphicOption.fViewTerrainRate;
}
// AA5149: using guessed type char byte_AA5149;
// B30B8C: using guessed type float flt_B30B8C;

//----- (0048ACF0) --------------------------------------------------------
ItemInfo *__cdecl IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(unsigned __int16 kItemID)
{
  int v1; // esi@1
  ItemInfo *result; // eax@2
  int v3; // ecx@4

  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          kItemID)
    && kItemID <= *(_WORD *)(v1 + 200)
    && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * kItemID)) )
    result = *(ItemInfo **)(v3 + 4 * kItemID);
  else
    result = 0;
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0048AD40) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>(NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> > *this)
{
  this->vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
}
// 98BB80: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);

//----- (0048AD50) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_scalar_deleting_destructor_(NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 98BB80: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);

//----- (0048AD80) --------------------------------------------------------
NiPointer<MapNavigator> *__cdecl MapNavigator::GetMapNavigator(NiPointer<MapNavigator> *result)
{
  int v1; // eax@1

  v1 = MapNavigator::ms_spMapNavigatorTask;
  result->m_pObject = (MapNavigator *)MapNavigator::ms_spMapNavigatorTask;
  if ( v1 )
    InterlockedIncrement((volatile LONG *)(v1 + 4));
  return result;
}
// A9B130: using guessed type int MapNavigator__ms_spMapNavigatorTask;

//----- (0048ADB0) --------------------------------------------------------
NiAVObject *__thiscall NiNode::GetAt(NiNode *this, unsigned int i)
{
  NiAVObject *result; // eax@2

  if ( this->m_kChildren.m_uiSize > i )
    result = this->m_kChildren.m_pBase[i].m_pObject;
  else
    result = 0;
  return result;
}

//----- (0048ADE0) --------------------------------------------------------
void __cdecl ShineLogDisplay::Log(ShineLogDisplay *this, char *pcStr)
{
  char ap; // [sp+14h] [bp+10h]@0

  if ( this->m_pkFrameWork )
  {
    vsprintf(acTempStr, pcStr, &ap);
    GameFrameWork::AddSysMsg(this->m_pkFrameWork, acTempStr);
  }
}

//----- (0048AE20) --------------------------------------------------------
unsigned int __cdecl ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (0048AE40) --------------------------------------------------------
unsigned int __cdecl ITableBase<GatherInfo_GatherInfoTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E2C: using guessed type int ITableBase_GatherInfo_GatherInfoTable___ms_pkTable;

//----- (0048AE60) --------------------------------------------------------
void __thiscall PgWin::InitPosLeftTop(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate)
{
  PgWin *v5; // esi@1
  NiRect<int> kRect; // [sp+8h] [bp-10h]@1

  v5 = this;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  ((void (__stdcall *)(NiRect<int> *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(&kRect);
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor(
    (NiRefObject *)v5,
    (signed int)((double)uiScreenWidth * fXPosRate - (double)kRect.m_left));
}

//----- (0048AEE0) --------------------------------------------------------
void __thiscall PgWin::InitPosRightTop(PgWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate)
{
  PgWin *v5; // esi@1
  NiRect<int> kRect; // [sp+8h] [bp-10h]@1

  v5 = this;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  ((void (__stdcall *)(NiRect<int> *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(&kRect);
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor(
    (NiRefObject *)v5,
    (signed int)((double)uiScreenWidth * fXPosRate - (double)kRect.m_right));
}

//----- (0048AF60) --------------------------------------------------------
void __thiscall PgWinBar::OnChangeValue(PgWinBar *this)
{
  PgWinBar::BarGrowType v1; // edx@1
  unsigned int v2; // esi@5
  unsigned int v3; // eax@9
  unsigned int v4; // [sp+8h] [bp-8h]@0
  int bReverse; // [sp+Ch] [bp-4h]@0

  v1 = this->m_eType;
  if ( v1 && v1 != 2 )
  {
    if ( v1 != 1 && v1 != 3 )
      v2 = v4;
    else
      v2 = this->baseclass_0.m_spSpr.m_pObject->m_spSprData.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiHeight;
  }
  else
  {
    v2 = this->baseclass_0.m_spSpr.m_pObject->m_spSprData.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiWidth;
  }
  if ( 0.0 == this->m_fMaxValue )
  {
    v3 = 0;
  }
  else
  {
    v3 = (signed __int64)(this->m_fCurValue / this->m_fMaxValue * (double)v2);
    if ( v3 > v2 )
      v3 = v2;
  }
  if ( !v1 || (LOBYTE(bReverse) = 0, v1 == 1) )
    LOBYTE(bReverse) = 1;
  if ( v1 && v1 != 2 )
  {
    if ( v1 == 3 || v1 == 1 )
      ((void (__stdcall *)(unsigned int, int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
        v3,
        bReverse);
  }
  else
  {
    ((void (__stdcall *)(unsigned int, int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(
      v3,
      bReverse);
  }
}

//----- (0048B050) --------------------------------------------------------
void __cdecl MachineOpt::SetGraphicOption(MachineOpt::GraphicOption *kGraphicOption)
{
  memcpy(&MachineOpt::ms_kGraphicOption, kGraphicOption, 0x3Cu);
  BYTE3(MachineOpt::ms_kGraphicOption.fViewTerrainRate) = BYTE3(kGraphicOption->fViewTerrainRate);
  MachineOpt::SetCurGama(MachineOpt::ms_kGraphicOption.fCurGama);
}

//----- (0048B0E0) --------------------------------------------------------
MapViewInfo *__cdecl MapViewInfoTab::GetByMapName(Name3 *kMapName)
{
  unsigned int v1; // edi@1
  void *v2; // eax@2
  MapViewInfo *result; // eax@6

  v1 = 0;
  if ( ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 4), v1);
      if ( *(_DWORD *)((char *)v2 + 2) == *(_DWORD *)&kMapName->n3_name[0] )
      {
        if ( *(_DWORD *)((char *)v2 + 6) == *(_DWORD *)&kMapName->n3_name[4]
          && *(_DWORD *)((char *)v2 + 10) == *(_DWORD *)&kMapName->n3_name[8] )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal() )
        goto LABEL_6;
    }
    result = (MapViewInfo *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 4),
                              v1);
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (0048B140) --------------------------------------------------------
unsigned __int16 __cdecl GatherInfoTable::GetSkillIDByType(GatherType eType)
{
  unsigned int v1; // esi@1
  void *v2; // eax@2
  unsigned __int16 result; // ax@4

  v1 = 0;
  if ( ITableBase<GatherInfo_GatherInfoTable>::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<GatherInfo_GatherInfoTable>::ms_pkTable + 4), v1);
      if ( *(_DWORD *)((char *)v2 + 34) == eType )
        break;
      ++v1;
      if ( v1 >= ITableBase<GatherInfo_GatherInfoTable>::GetTotal() )
        goto LABEL_4;
    }
    result = *(_WORD *)v2;
  }
  else
  {
LABEL_4:
    result = -1;
  }
  return result;
}
// A97E2C: using guessed type int ITableBase_GatherInfo_GatherInfoTable___ms_pkTable;

//----- (0048B190) --------------------------------------------------------
void __thiscall NiTList<NiPointer<ITask>>::_NiTList<NiPointer<ITask>>(NiTList<NiPointer<ITask> > *this)
{
  NiTList<NiPointer<ITask> > *v1; // edi@1
  NiTListItem<NiPointer<ITask> > *v2; // esi@1
  NiTListItem<NiPointer<ITask> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> > *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
}
// 98BB80: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);
// 98BB98: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);

//----- (0048B210) --------------------------------------------------------
void __thiscall ITask::_ITask(ITask *this)
{
  char *v1; // esi@1
  NiTListItem<NiPointer<ITask> > *v2; // edi@1
  NiTListItem<NiPointer<ITask> > *v3; // ST00_4@2
  char *v4; // esi@4
  NiTListItem<NiPointer<ITask> > *v5; // edi@4
  NiTListItem<NiPointer<ITask> > *v6; // ST00_4@5
  ITask *v7; // [sp+4h] [bp-10h]@1

  v7 = this;
  v1 = (char *)&this->m_kSerialTaskList;
  this->m_kSerialTaskList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  v2 = this->m_kSerialTaskList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    do
    {
      v3 = v2;
      v2 = v2->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v1 + 8))(v1, v3);
    }
    while ( v2 );
    this = v7;
  }
  *((_DWORD *)v1 + 3) = 0;
  *((_DWORD *)v1 + 1) = 0;
  *((_DWORD *)v1 + 2) = 0;
  *(_DWORD *)v1 = &NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  v4 = (char *)&this->m_kChildTaskList;
  this->m_kChildTaskList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  v5 = this->m_kChildTaskList.baseclass_0.baseclass_0.m_pkHead;
  if ( v5 )
  {
    do
    {
      v6 = v5;
      v5 = v5->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4 + 8))(v4, v6);
    }
    while ( v5 );
    this = v7;
  }
  *((_DWORD *)v4 + 3) = 0;
  *((_DWORD *)v4 + 1) = 0;
  *((_DWORD *)v4 + 2) = 0;
  *(_DWORD *)v4 = &NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 98BB80: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);
// 98BB98: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);

//----- (0048B2E0) --------------------------------------------------------
void __thiscall ProductTask::OnStart(ProductTask *this)
{
  ProductTask *v1; // esi@1
  ProductionWin *v2; // eax@1
  CastingProgressWin *v3; // eax@1

  v1 = this;
  v2 = ProductionWin::CreateWin(0);
  v1->m_pkProductionWin = v2;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v3 = CastingProgressWin::CreateWin(0, 1);
  v1->m_pkCastingWin = v3;
  ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  PgWin::EnableOpenCloseSound(&v1->m_pkCastingWin->baseclass_0.baseclass_0.baseclass_0, 0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkCastingWin->baseclass_0.baseclass_0.baseclass_0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCastingWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ProductTask::ms_pkProductionWin = v1->m_pkProductionWin;
}

//----- (0048B350) --------------------------------------------------------
ActiveSkillInfo *__cdecl IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  ActiveSkillInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(ActiveSkillInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (0048B3A0) --------------------------------------------------------
void __thiscall ProductTask::DirectMessage(ProductTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ProductTask *v4; // ebx@1
  void *v5; // esi@5
  int v6; // edi@5
  int v7; // esi@5
  int v8; // esi@6
  int v9; // edx@9

  v4 = this;
  switch ( iMsgTag )
  {
    case 33:
      ProductionWin::OpenDialog(
        *(ProductionWin **)&this->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0],
        *(_WORD *)pvBody);
      break;
    case 34:
      v5 = pvBody;
      LOWORD(pvBody) = *(_WORD *)pvBody;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x35u, &pvBody, 2);
      v6 = *(_WORD *)v5;
      v7 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                              v6) )
      {
        if ( (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) )
        {
          v9 = *(_DWORD *)(v7 + 196);
          if ( *(_DWORD *)(v9 + 4 * v6) )
            v8 = *(_DWORD *)(v9 + 4 * v6);
          else
            v8 = 0;
        }
        else
        {
          v8 = 0;
        }
      }
      else
      {
        v8 = 0;
      }
      PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v4->m_eState);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v4->m_eState);
      if ( v8 )
        CastingProgressWin::StartCasting((CastingProgressWin *)v4->m_eState, *(_DWORD *)(v8 + 203), 0);
      Char::ActProducing(g_pkMainChar);
      break;
    case 35:
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x39u, 0, 0);
      ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
      CastingProgressWin::CastingFail((CastingProgressWin *)v4->m_eState);
      ProductionWin::ProduceStop(*(ProductionWin **)&v4->baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]);
      break;
  }
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (0048B4B0) --------------------------------------------------------
bool __thiscall ProductTask::OnProcessNetMsg(ProductTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  ProductTask *v5; // edi@1
  Skill::LearnProdSkillInfo *v6; // eax@4
  bool result; // al@5
  char *v8; // esi@7
  char *v9; // ebx@7
  Char *v10; // eax@12
  Char *v11; // eax@15
  char *v12; // esi@19
  char *v13; // ebx@19
  int v14; // esi@22
  int v15; // eax@22
  int v16; // edx@22
  _BYTE v17[12]; // ST0C_12@22
  ProductionWin *v18; // ecx@22
  int v19; // esi@26
  int v20; // eax@26
  int v21; // edx@26
  int *v22; // ecx@26
  int v23; // edx@26
  _BYTE v24[12]; // ST0C_12@27
  Char *v25; // esi@29
  int v26; // edi@30
  int v27; // edx@30
  int v28; // [sp+18h] [bp-20h]@22
  int v29; // [sp+1Ch] [bp-1Ch]@22
  int v30; // [sp+20h] [bp-18h]@22
  float v31; // [sp+24h] [bp-14h]@22
  float v32; // [sp+28h] [bp-10h]@22

  v5 = this;
  if ( iDepart == 8 )
  {
    switch ( iCommand )
    {
      case 54:
        v8 = (char *)&this->baseclass_0.baseclass_8;
        v9 = TextData::Get(0xB312958u);
        if ( v5->baseclass_0.baseclass_8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            v9,
            &v5->baseclass_0.baseclass_8);
          if ( v5->baseclass_0.baseclass_8.m_pkMsgHooker )
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              v9,
              &v5->baseclass_0.baseclass_8);
        }
        (*(void (__thiscall **)(IDirectMessenger *, signed int, char *, IDirectMessenger *))(*(_DWORD *)v8 + 20))(
          &v5->baseclass_0.baseclass_8,
          25,
          v9,
          &v5->baseclass_0.baseclass_8);
        ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
        CastingProgressWin::CastingFail(v5->m_pkCastingWin);
        ProductionWin::ProduceStop(v5->m_pkProductionWin);
        goto $LN16_8;
      case 55:
        goto $LN16_8;
      case 56:
        v10 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
        if ( v10 )
          Char::ActProducing(v10);
        return 1;
      case 58:
        v11 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
        if ( v11 )
          ((void (__thiscall *)(Char *))v11->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v11);
        return 1;
      case 59:
        if ( *((_WORD *)pvData + 1) != 2817 )
        {
          v12 = (char *)&this->baseclass_0.baseclass_8;
          v13 = TextData::Get(0xCEF24328u);
          if ( v5->baseclass_0.baseclass_8.m_pkMsgHooker )
          {
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              25,
              v13,
              &v5->baseclass_0.baseclass_8);
            if ( v5->baseclass_0.baseclass_8.m_pkMsgHooker )
              ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                25,
                v13,
                &v5->baseclass_0.baseclass_8);
          }
          (*(void (__thiscall **)(IDirectMessenger *, signed int, char *, IDirectMessenger *))(*(_DWORD *)v12 + 20))(
            &v5->baseclass_0.baseclass_8,
            25,
            v13,
            &v5->baseclass_0.baseclass_8);
          CastingProgressWin::CastingFail(v5->m_pkCastingWin);
          ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
          v14 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
          v15 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
          v16 = *(_DWORD *)v14;
          v32 = 1.0;
          v31 = Timer::ms_fCurTime;
          v28 = v16;
          v29 = *(_DWORD *)(v14 + 4);
          v30 = *(_DWORD *)(v14 + 8);
          *(_DWORD *)v17 = *(_DWORD *)v15;
          *(_QWORD *)&v17[4] = *(_QWORD *)(v15 + 4);
          EffectMgr::CreateEffect(
            &g_kEffectMgr,
            "PrdctFail",
            *(NiPoint3 *)v17,
            *(NiPoint3 *)&v28,
            Timer::ms_fCurTime,
            1.0);
          v18 = v5->m_pkProductionWin;
          if ( v18 )
          {
            ProductionWin::ProduceStop(v18);
            result = 1;
          }
          else
          {
$LN16_8:
            result = 1;
          }
          return result;
        }
        CastingProgressWin::CastingSuccess(this->m_pkCastingWin);
        ProductionWin::RefreshProductSkillList(v5->m_pkProductionWin);
        if ( !ProductionWin::ProduceComplete(v5->m_pkProductionWin) )
          ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
        v19 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
        v20 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
        v21 = *(_DWORD *)v19;
        v32 = 1.0;
        v22 = &v28;
        v31 = Timer::ms_fCurTime;
        v28 = v21;
        v29 = *(_DWORD *)(v19 + 4);
        v23 = *(_DWORD *)(v19 + 8);
LABEL_27:
        v22[2] = v23;
        *(_DWORD *)v24 = *(_DWORD *)v20;
        *(_QWORD *)&v24[4] = *(_QWORD *)(v20 + 4);
        EffectMgr::CreateEffect(&g_kEffectMgr, "PrdctSucc", *(NiPoint3 *)v24, *(NiPoint3 *)&v28, v31, v32);
        break;
      case 60:
        v25 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
        if ( !v25 )
          return 1;
        ((void (__thiscall *)(Char *))v25->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v25);
        v26 = ((int (__thiscall *)(Char *))v25->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)(v25);
        v20 = ((int (__thiscall *)(Char *))v25->baseclass_0.vfptr[6].Deaffect)(v25);
        v27 = *(_DWORD *)v26;
        v32 = 1.0;
        v22 = &v28;
        v31 = Timer::ms_fCurTime;
        v28 = v27;
        v29 = *(_DWORD *)(v26 + 4);
        v23 = *(_DWORD *)(v26 + 8);
        goto LABEL_27;
      default:
        return 0;
    }
    return 1;
  }
  if ( iDepart == 18 && iCommand == 29 )
  {
    v6 = Skill::GetLearnProductSkill(*(_WORD *)pvData);
    if ( v6 )
    {
      v6->kSkillExp = *(_DWORD *)((char *)pvData + 2);
      return 1;
    }
    return 1;
  }
  return 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0048B7F0) --------------------------------------------------------
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Linsert(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> *result, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  unsigned int v10; // edi@2
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval >= v10;
      else
        v9 = v10 < v7->_Myval;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
                          v5,
                          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval >= v4->_Myval )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
                        v5,
                        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (0048B8D0) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, unsigned int *_Val)
{
  std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *result; // eax@1
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)operator new(0x14u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)-12 )
    result->_Myval = *_Val;
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0048B940) --------------------------------------------------------
bool __thiscall NiPoint3::operator__(NiPoint3 *this, NiPoint3 *pt)
{
  return pt->x == this->x && pt->y == this->y && pt->z == this->z;
}

//----- (0048B980) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Metamorphosis(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PopupMenu *v2; // eax@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    v2 = PopupMenuTemplate::GetMainCharUnMetamorphosis();
    PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v2);
  }
}

//----- (0048B9B0) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_CharName(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PopupMenu *v2; // eax@3

  v1 = this;
  if ( this->m_bTargetIsMainChar != 1 )
  {
    if ( this->m_pkTarget )
    {
      v2 = PopupMenuTemplate::GetTargetCharName((unsigned int)this->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v2);
    }
  }
}

//----- (0048B9F0) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Whisper(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PopupMenu *v2; // eax@2

  v1 = this;
  if ( this->m_bTargetIsMainChar != 1 )
  {
    v2 = PopupMenuTemplate::GetChatWhisperMenu((unsigned int)this->m_pcName);
    PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v2);
  }
}

//----- (0048BA20) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_PartyBuff(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PopupMenu *v2; // eax@4

  v1 = this;
  if ( this->m_bTargetIsPartyMember || this->m_bTargetIsRaidMember && this->m_bTargetIsMainChar != 1 )
  {
    v2 = PopupMenuTemplate::GetPartyBuffMenu((unsigned int)this->m_pcName);
    PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v2);
  }
}

//----- (0048BA60) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Follow(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  int v2; // esi@3
  int v3; // eax@3
  float v4; // ST08_4@3
  float v5; // ST0C_4@3
  float v6; // ST10_4@3
  float v7; // ST14_4@3
  float v8; // ST14_4@3
  PopupMenu *v9; // eax@4

  v1 = this;
  if ( this->m_bTargetIsMainChar != 1 && this->m_pkTarget )
  {
    v2 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v3 = ((int (*)(void))v1->m_pkTarget->baseclass_0.vfptr[6].Deaffect)();
    v4 = *(float *)v3 - *(float *)v2;
    v5 = *(float *)(v3 + 4) - *(float *)(v2 + 4);
    v6 = *(float *)(v3 + 8) - *(float *)(v2 + 8);
    v7 = v4 * v4 + v5 * v5 + v6 * v6;
    v8 = sqrt(v7);
    if ( v8 <= 200.0 )
    {
      v9 = PopupMenuTemplate::GetFollowCharMenu((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v9);
    }
  }
}

//----- (0048BB20) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Vote(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  unsigned int v2; // eax@3
  PopupMenu *v3; // eax@4

  v1 = this;
  if ( this->m_bTargetIsMainChar != 1 && this->m_eFieldMapType == 1 )
  {
    v2 = KingdomQuestWin::GetJoinQuestHandle(this->m_pkKingDomQuest);
    if ( GameFrameWork::IsVotePossible(v1, v2) )
    {
      v3 = PopupMenuTemplate::GetVoteMenu((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v3);
    }
  }
}

//----- (0048BB70) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Cancel(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PopupMenu *v2; // eax@1

  v1 = this;
  v2 = PopupMenuTemplate::GetCancelMenu();
  PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v2);
}

//----- (0048BB90) --------------------------------------------------------
void __thiscall GameFrameWork::SetResListDefault(GameFrameWork *this)
{
  char *v1; // eax@1
  signed int v2; // ecx@1

  v1 = (char *)&this->m_ResList[0].m_bCheckAdd;
  v2 = 21;
  do
  {
    *v1 = 0;
    v1 += 16;
    --v2;
  }
  while ( v2 );
}

//----- (0048BBB0) --------------------------------------------------------
KeyMap *__thiscall GameFrameWork::GetKeyMap(GameFrameWork *this)
{
  return this->m_spKeyMap.m_pObject;
}

//----- (0048BBC0) --------------------------------------------------------
void __thiscall GameFrameWork::SetPopupInfo(GameFrameWork *this, char *pcName)
{
  char *v2; // edi@1
  GameFrameWork *v3; // esi@1
  Char *v4; // eax@2
  PartyMemberInfo *v5; // eax@2
  bool v6; // cl@4
  RaidMemberInfo *v7; // eax@6
  Name5 v8; // [sp-14h] [bp-24h]@2
  int v9; // [sp-10h] [bp-20h]@2
  int v10; // [sp-Ch] [bp-1Ch]@2
  int v11; // [sp-8h] [bp-18h]@2
  int v12; // [sp-4h] [bp-14h]@2
  Name5 *v13; // [sp+Ch] [bp-4h]@2
  Char *pkTarget; // [sp+18h] [bp+8h]@2

  v2 = pcName;
  v3 = this;
  if ( pcName )
  {
    v4 = CharMgr::GetUserChar(&g_kCharMgr, pcName);
    v3->m_pkTarget = v4;
    pkTarget = v4;
    v13 = &v8;
    v12 = 0;
    v11 = 0;
    v10 = 0;
    v9 = 0;
    *(_DWORD *)&v8.n5_name[0] = 0;
    strncpy(v8.n5_name, v2, 0x14u);
    v5 = Party::GetMemberInfo(&g_kParty, v8);
    v3->m_pkPartyInfo = v5;
    v6 = pkTarget && g_pkMainChar == pkTarget;
    v3->m_bTargetIsPartyMember = v5 != 0;
    v3->m_bTargetIsMainChar = v6;
    v12 = 0;
    v11 = 0;
    v10 = 0;
    v9 = 0;
    *(_DWORD *)&v8.n5_name[0] = 0;
    strncpy(v8.n5_name, v2, 0x14u);
    v7 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, v8);
    v3->m_pkRaidInfo = v7;
    v3->m_bTargetIsRaidMember = v7 != 0;
    v3->m_pcName = v2;
  }
}

//----- (0048BC90) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Collection(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  PopupMenu *v5; // eax@8
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v7 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v7 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 && v1->m_bTargetIsMainChar != 1 )
  {
    if ( v1->m_pkTarget )
    {
      v5 = PopupMenuTemplate::GetCollectOpenMenu((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v5);
    }
  }
}

//----- (0048BD50) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Trade(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  PopupMenu *v5; // eax@8
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v7 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v7 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 && v1->m_bTargetIsMainChar != 1 )
  {
    if ( v1->m_pkTarget )
    {
      v5 = PopupMenuTemplate::GetProposeTradeMenu((unsigned int)v1->m_pkTarget);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v5);
    }
  }
}

//----- (0048BE10) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_InviteGuild(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  CClientGuild *v5; // eax@8
  PopupMenu *v6; // eax@9
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v8; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v8 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v8 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 && v1->m_bTargetIsMainChar != 1 && v1->m_pkTarget )
  {
    v5 = GuildTask::GetGuild();
    if ( CClientGuild::CanIInvite(v5) )
    {
      v6 = PopupMenuTemplate::GetInviteGuildMenu((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v6);
    }
  }
}

//----- (0048BEE0) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_InviteParty(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  PopupMenu *v5; // eax@9
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v7 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v7 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 && RaidInfo::IsMeRaidMember(&g_kRaidinfo) != 1 && v1->m_bTargetIsPartyMember != 1 )
  {
    if ( v1->m_bTargetIsMainChar != 1 )
    {
      v5 = PopupMenuTemplate::GetInvitePartyMenu((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v5);
    }
  }
}

//----- (0048BFB0) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_InviteFriend(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  MHDiceGameTask *v3; // edi@2
  char *v4; // ST04_4@9
  PopupMenu *v5; // eax@10
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-2Ch]@1
  bool v7; // [sp+7h] [bp-25h]@1
  char CharID[4]; // [sp+8h] [bp-24h]@9
  int v9; // [sp+Ch] [bp-20h]@9
  int v10; // [sp+10h] [bp-1Ch]@9
  int v11; // [sp+14h] [bp-18h]@9
  int v12; // [sp+18h] [bp-14h]@9
  unsigned int v13; // [sp+1Ch] [bp-10h]@1
  int v14; // [sp+28h] [bp-4h]@1
  int v15; // [sp+2Ch] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v14 = 0;
  v7 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v14 = -1;
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  if ( !v7 && RaidInfo::IsMeRaidMember(&g_kRaidinfo) != 1 && v1->m_bTargetIsMainChar != 1 && v1->m_pkTarget )
  {
    v4 = v1->m_pcName;
    v12 = 0;
    v11 = 0;
    v10 = 0;
    v9 = 0;
    *(_DWORD *)CharID = 0;
    strncpy(CharID, v4, 0x14u);
    if ( GameFrameWork::IsFriend(v1, (Name5 *)CharID) != 1 )
    {
      v5 = PopupMenuTemplate::GetInviteFriendMenu((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v5);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0048C0C0) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Party(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  PopupMenu *v5; // eax@10
  PopupMenu *v6; // eax@11
  PopupMenu *v7; // eax@15
  PopupMenu *v8; // eax@15
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v10; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v10 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v10 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 && RaidInfo::IsMeRaidMember(&g_kRaidinfo) != 1 )
  {
    if ( Party::IsMePartyMaster(&g_kParty) == 1 )
    {
      if ( v1->m_bTargetIsPartyMember == 1 )
      {
        if ( !v1->m_bTargetIsMainChar )
        {
          v5 = PopupMenuTemplate::GetFirePartyMemberMenu((unsigned int)v1->m_pcName);
          PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v5);
          if ( v1->m_pkPartyInfo->m_ucStatus == 1 )
          {
            v6 = PopupMenuTemplate::GetDelegatePartyChiefMenu((unsigned int)v1->m_pcName);
            PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v6);
          }
        }
      }
    }
    if ( g_kParty.m_uiTotalMember && !v1->m_bTargetIsRaidMember )
    {
      if ( v1->m_bTargetIsMainChar == 1 )
      {
        v7 = PopupMenuTemplate::GetQuitPartyMenu();
        PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v7);
        v8 = PopupMenuTemplate::GetPartyLootSetupMenu();
        PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v8);
      }
    }
  }
}

//----- (0048C200) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_Raid(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  PopupMenu *v5; // eax@10
  PopupMenu *v6; // eax@12
  RaidMemberInfo *v7; // eax@15
  _BYTE v8[20]; // ST00_20@15
  PopupMenu *v9; // eax@17
  PopupMenu *v10; // eax@19
  PopupMenu *v11; // eax@19
  RaidMemberInfo *v12; // eax@19
  _BYTE v13[20]; // ST00_20@19
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v15; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v15 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v15 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 && RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
  {
    if ( v1->m_bTargetIsRaidMember )
    {
      if ( v1->m_bTargetIsMainChar == 1 )
        v6 = PopupMenuTemplate::GetRaidMemberLeaveMenu((unsigned int)v1->m_pcName);
      else
        v6 = PopupMenuTemplate::GetRaidMemberSelectMenu((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v6);
      if ( g_kRaidinfo.m_bIsMeRaidLeader )
      {
        v7 = v1->m_pkRaidInfo;
        *(_DWORD *)v8 = *(_DWORD *)&v7->m_kCharID.n5_name[0];
        *(_QWORD *)&v8[4] = *(_QWORD *)&v7->m_kCharID.n5_name[4];
        *(_QWORD *)&v8[12] = *(_QWORD *)&v7->m_kCharID.n5_name[12];
        if ( !RaidInfo::IsLooter(&g_kRaidinfo, *(Name5 *)v8) && g_kRaidinfo.m_eLootType == 2 )
        {
          v9 = PopupMenuTemplate::GetChangeRaidLooterMenu((unsigned int)v1->m_pcName);
          PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v9);
        }
        if ( !v1->m_bTargetIsMainChar )
        {
          v10 = PopupMenuTemplate::GetRaidMemberVanishMenu((unsigned int)v1->m_pcName);
          PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v10);
          v11 = PopupMenuTemplate::GetChangeRaidLeaderMenu((unsigned int)v1->m_pcName);
          PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v11);
          v12 = v1->m_pkRaidInfo;
          *(_DWORD *)v13 = *(_DWORD *)&v12->m_kCharID.n5_name[0];
          *(_QWORD *)&v13[4] = *(_QWORD *)&v12->m_kCharID.n5_name[4];
          *(_QWORD *)&v13[12] = *(_QWORD *)&v12->m_kCharID.n5_name[12];
          if ( RaidInfo::IsSubLeader(&g_kRaidinfo, *(Name5 *)v13) )
            v5 = PopupMenuTemplate::GetDownRaidSubLeaderMenu((unsigned int)v1->m_pcName);
          else
            v5 = PopupMenuTemplate::GetUpRaidSubLeaderMenu((unsigned int)v1->m_pcName);
          goto LABEL_22;
        }
      }
    }
    else
    {
      if ( g_kRaidinfo.m_bIsMeRaidLeader || g_kRaidinfo.m_bIsMeRaidSubLeader )
      {
        v5 = PopupMenuTemplate::GetRaidMemberInviteMenu((unsigned int)v1->m_pcName);
LABEL_22:
        PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v5);
        return;
      }
    }
  }
}

//----- (0048C410) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_InviteHolyPromise(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // esi@2
  PopupMenu *v5; // eax@7
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v7 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2) == 1;
  v7 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 )
  {
    if ( v1->m_bTargetIsMainChar != 1 )
    {
      v5 = PopupMenuTemplate::GetInviteHighHolyPromise((unsigned int)v1->m_pcName);
      PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v5);
    }
  }
}

//----- (0048C4C0) --------------------------------------------------------
void __thiscall GameFrameWork::AddPopupMenu_RideOn(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  int v2; // esi@5
  int v3; // eax@5
  float v4; // ST08_4@5
  float v5; // ST0C_4@5
  float v6; // ST10_4@5
  float v7; // ST14_4@5
  float v8; // ST14_4@5
  Mover *v9; // ecx@6
  PopupMenu *v10; // eax@10

  v1 = this;
  if ( this->m_bTargetIsMainChar != 1
    && this->m_pkTarget
    && (this->m_bTargetIsPartyMember || this->m_bTargetIsRaidMember) )
  {
    v2 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v3 = ((int (*)(void))v1->m_pkTarget->baseclass_0.vfptr[6].Deaffect)();
    v4 = *(float *)v3 - *(float *)v2;
    v5 = *(float *)(v3 + 4) - *(float *)(v2 + 4);
    v6 = *(float *)(v3 + 8) - *(float *)(v2 + 8);
    v7 = v5 * v5 + v4 * v4 + v6 * v6;
    v8 = sqrt(v7);
    if ( v8 <= 300.0 )
    {
      v9 = v1->m_pkTarget->m_pkMover;
      if ( v9 )
      {
        if ( Mover::IsEmptySlot(v9)
          && (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() != 1 )
        {
          if ( !g_pkMainChar->m_pkMover )
          {
            v10 = PopupMenuTemplate::GetRideOnMenu((unsigned int)v1->m_pcName);
            PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v10);
          }
        }
      }
    }
  }
}

//----- (0048C5D0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenResolutionPopup(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  NiDX9SystemDesc *v2; // eax@1
  unsigned int v3; // ebx@1
  NiDX9AdapterDesc *v4; // eax@2
  unsigned int v5; // ecx@4
  int v6; // esi@4
  unsigned int v7; // edi@5
  NiDX9AdapterDesc::ModeDesc *v8; // eax@6
  unsigned int v9; // ecx@7
  unsigned int v10; // eax@8
  PopupMenu *v11; // eax@11
  int v12; // eax@14
  signed int v13; // ecx@14
  unsigned int v14; // ebx@18
  NiDX9AdapterDesc::ModeDesc *v15; // eax@19
  unsigned int v16; // edi@20
  unsigned int v17; // edx@20
  unsigned int v18; // eax@21
  unsigned int v19; // ecx@21
  PopupMenu *v20; // eax@26
  int v21; // eax@29
  signed int v22; // ecx@29
  PopupMenu *v23; // eax@31
  int systemScreenHeight; // [sp+Ch] [bp-14h]@4
  int systemScreenWidth; // [sp+10h] [bp-10h]@4
  unsigned int WinResNum; // [sp+14h] [bp-Ch]@17
  unsigned int uiModeCount; // [sp+18h] [bp-8h]@4
  GameFrameWork *v28; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v28 = this;
  PopupMenuWin::Clear(this->m_pkPopupMenuWin);
  v2 = NiDX9Renderer::GetSystemDesc();
  v3 = 0;
  ms_pkInfo_1 = v2;
  if ( v2->m_kAdapterList.m_uiSize )
    v4 = *v2->m_kAdapterList.m_pBase;
  else
    v4 = 0;
  v5 = v4->m_kModeList.m_uiSize;
  ms_pkAdapter_1 = v4;
  uiModeCount = v5;
  systemScreenWidth = GetSystemMetrics(0);
  systemScreenHeight = GetSystemMetrics(1);
  v6 = (int)&v1->m_ResList[0].m_bCheckAdd;
  if ( MachineOpt::ms_kGraphicOption.bWindowFullMode )
  {
    do
    {
      v7 = 0;
      if ( uiModeCount )
      {
        do
        {
          v8 = ms_pkAdapter_1->m_kModeList.m_pBase[v7];
          if ( !*(_BYTE *)v6 )
          {
            v9 = v8->m_uiWidth;
            if ( v8->m_uiWidth == *(_DWORD *)(v6 - 8) )
            {
              v10 = v8->m_uiHeight;
              if ( v10 == *(_DWORD *)(v6 - 4) )
              {
                if ( v9 != 800 || v10 != 600 )
                {
                  v11 = PopupMenuTemplate::GetResolutionMenu(v3);
                  PopupMenuWin::AddMenu(v28->m_pkPopupMenuWin, v11);
                  *(_BYTE *)v6 = 1;
                }
              }
            }
          }
          ++v7;
        }
        while ( v7 < uiModeCount );
      }
      ++v3;
      v6 += 16;
    }
    while ( v3 < 0x15 );
    v12 = (int)&v28->m_ResList[0].m_bCheckAdd;
    v13 = 21;
    do
    {
      *(_BYTE *)v12 = 0;
      v12 += 16;
      --v13;
    }
    while ( v13 );
  }
  else
  {
    WinResNum = 0;
    do
    {
      v14 = 0;
      if ( uiModeCount )
      {
        do
        {
          v15 = ms_pkAdapter_1->m_kModeList.m_pBase[v14];
          if ( !*(_BYTE *)v6 )
          {
            v16 = v15->m_uiWidth;
            v17 = *(_DWORD *)(v6 - 8);
            if ( v15->m_uiWidth == v17 )
            {
              v18 = v15->m_uiHeight;
              v19 = *(_DWORD *)(v6 - 4);
              if ( v18 == v19 )
              {
                if ( systemScreenWidth >= v17 && systemScreenHeight >= v19 && (v16 != 800 || v18 != 600) )
                {
                  v20 = PopupMenuTemplate::GetResolutionMenu(WinResNum);
                  PopupMenuWin::AddMenu(v28->m_pkPopupMenuWin, v20);
                  *(_BYTE *)v6 = 1;
                }
              }
            }
          }
          ++v14;
        }
        while ( v14 < uiModeCount );
      }
      v6 += 16;
      ++WinResNum;
    }
    while ( WinResNum < 0x15 );
    v21 = (int)&v28->m_ResList[0].m_bCheckAdd;
    v22 = 21;
    do
    {
      *(_BYTE *)v21 = 0;
      v21 += 16;
      --v22;
    }
    while ( v22 );
  }
  v23 = PopupMenuTemplate::GetCancelMenu();
  PopupMenuWin::AddMenu(v28->m_pkPopupMenuWin, v23);
  PopupMenuWin::FinishMenu(v28->m_pkPopupMenuWin, 0);
  ((void (__stdcall *)(_DWORD, _DWORD))v28->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
  PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v28->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
}

//----- (0048C7C0) --------------------------------------------------------
bool __thiscall GameFrameWork::IsCapableKeyControl(GameFrameWork *this)
{
  return !g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount
      && g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount <= 0
      && g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount <= 0
      && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[10].Affect)();
}

//----- (0048C7F0) --------------------------------------------------------
bool __thiscall GameFrameWork::UpdateCursorState(GameFrameWork *this)
{
  int v1; // eax@1
  void *v2; // eax@2
  bool result; // al@7

  v1 = Singleton<CursorState>::m_pInstance;
  if ( !Singleton<CursorState>::m_pInstance )
  {
    v2 = operator new(8u);
    if ( v2 )
      CursorState::CursorState((CursorState *)v1);
    else
      v1 = 0;
    Singleton<CursorState>::m_pInstance = v1;
  }
  if ( *(_DWORD *)(v1 + 4) == 1 )
  {
    Cursor::SetCursor((Cursor::Type)15);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A977A8: using guessed type int Singleton_CursorState___m_pInstance;

//----- (0048C880) --------------------------------------------------------
int __cdecl GameFrameWork::CollisionCallback(NiCollisionGroup::Intersect *kIntersect)
{
  NiRefObjectVtbl *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  int result; // eax@1
  double v4; // st7@3
  signed int v5; // eax@5
  signed int v6; // ecx@5
  signed int v7; // edx@5
  double v8; // st7@10
  int v9; // eax@10
  int v10; // ecx@10
  double v11; // st6@10
  double v12; // st6@10
  float v13; // ST08_4@10
  double v14; // st6@10
  float v15; // ST0C_4@10
  NiPoint3 pos3AxisTwo; // [sp+14h] [bp-20h]@10
  NiPoint3 pos3AxisOne; // [sp+20h] [bp-14h]@10
  float f1; // [sp+2Ch] [bp-8h]@3
  float f0; // [sp+30h] [bp-4h]@3
  float nSigna; // [sp+3Ch] [bp+8h]@3
  float nSignb; // [sp+3Ch] [bp+8h]@3
  float nSign; // [sp+3Ch] [bp+8h]@3
  float nSignc; // [sp+3Ch] [bp+8h]@10

  v1 = kIntersect->pkObj0->m_spCollisionObject.m_pObject[5].baseclass_0.baseclass_0.vfptr;
  v2 = kIntersect->pkObj1->m_spCollisionObject.m_pObject[4].baseclass_0.baseclass_0.vfptr;
  result = (*(int (__thiscall **)(NiRefObjectVtbl *))((int (__thiscall **)(_DWORD))v2->__vecDelDtor + 3))(kIntersect->pkObj1->m_spCollisionObject.m_pObject[4].baseclass_0.baseclass_0.vfptr);
  if ( result == 1 )
  {
    ++v1->__vecDelDtor;
    if ( (char *)v1->__vecDelDtor > (char *)(void *(__thiscall *)(NiRefObject *, unsigned int))1 )
      return result;
    v1[1].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))v2;
    nSigna = fabs(*(float *)&v2[6].__vecDelDtor);
    f0 = nSigna;
    nSignb = fabs(*(float *)&v2[9].__vecDelDtor);
    f1 = nSignb;
    nSign = fabs(*(float *)&v2[12].__vecDelDtor);
    v4 = f0;
    if ( f1 >= (double)f0 )
    {
      if ( nSign >= (double)f1 )
      {
        LODWORD(nSign) = (signed int)(*(float *)&v2[12].__vecDelDtor / nSign);
        v5 = 0;
        v6 = 1;
        v7 = 2;
      }
      else
      {
        LODWORD(nSign) = (signed int)(*(float *)&v2[9].__vecDelDtor / f1);
        v5 = 2;
        v6 = 0;
        v7 = 1;
      }
    }
    else
    {
      if ( nSign >= v4 )
      {
        v5 = LODWORD(nSign);
        v6 = LODWORD(nSign);
        v7 = LODWORD(nSign);
      }
      else
      {
        LODWORD(nSign) = (signed int)(*(float *)&v2[6].__vecDelDtor / v4);
        v5 = 1;
        v6 = 2;
        v7 = 0;
      }
    }
    v1[11].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))v5;
    v1[13].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))v7;
    v1[12].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))v6;
    nSignc = (double)SLODWORD(nSign);
    v8 = *(float *)&v2[3 * v5 + 4].__vecDelDtor;
    v9 = (int)&v2[3 * v5 + 4];
    v10 = 3 * v6;
    pos3AxisTwo.x = v8 * nSignc;
    pos3AxisTwo.y = *(float *)(v9 + 4) * nSignc;
    v11 = *(float *)(v9 + 8);
    LODWORD(pos3AxisOne.x) = (_DWORD)pos3AxisTwo.x;
    pos3AxisOne.y = pos3AxisTwo.y;
    pos3AxisTwo.z = v11 * nSignc;
    v12 = *(float *)&v2[v10 + 4].__vecDelDtor;
    pos3AxisOne.z = pos3AxisTwo.z;
    v13 = v12 * nSignc;
    v14 = *(float *)&v2[v10 + 5].__vecDelDtor;
    pos3AxisTwo.x = v13;
    v15 = v14 * nSignc;
    pos3AxisTwo.y = v15;
    pos3AxisTwo.z = 0.0;
    pos3AxisOne.z = 0.0;
    NiPoint3::Unitize(&pos3AxisOne);
    NiPoint3::Unitize(&pos3AxisTwo);
    *(float *)&v1[2].__vecDelDtor = pos3AxisOne.x;
    *(float *)&v1[3].__vecDelDtor = pos3AxisOne.y;
    *(float *)&v1[4].__vecDelDtor = pos3AxisOne.z;
    *(float *)&v1[5].__vecDelDtor = pos3AxisTwo.x;
    *(float *)&v1[6].__vecDelDtor = pos3AxisTwo.y;
    *(float *)&v1[7].__vecDelDtor = pos3AxisTwo.z;
    *(float *)&v1[8].__vecDelDtor = 0.0;
    *(float *)&v1[9].__vecDelDtor = 0.0;
    *(float *)&v1[10].__vecDelDtor = 1.0;
  }
  return 0;
}

//----- (0048CA40) --------------------------------------------------------
void __thiscall GameFrameWork::OnPickGround(GameFrameWork *this, NiPoint3 *kGroundPos, bool bViewPoint)
{
  GameFrameWork *v3; // ebx@1
  NiPoint3 *v4; // edi@7
  char *v5; // eax@8
  MapNavigator *v6; // esi@13
  GTInformWin *v7; // esi@15
  D3DXCOLOR *v8; // eax@16
  D3DXCOLOR v9; // ST04_16@16
  char *v10; // eax@16
  _BYTE v11[12]; // ST10_12@18
  char *v12; // eax@21
  D3DXCOLOR result; // [sp+14h] [bp-10h]@16

  v3 = this;
  if ( ChatBoardFlex::ms_bClickLog )
  {
    ChatBoardFlex::ms_bClickLog = 0;
    return;
  }
  if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() )
  {
    if ( g_pkMainChar->m_pkMover )
    {
      if ( g_pkMainChar->m_uiMoverSlot )
      {
        GameFrameWork::sRideOffValue::SetMove(&v3->m_kRideOffValue, kGroundPos, bViewPoint);
        GameFrameWork::NcMoverRideOffReq(v3);
        return;
      }
      if ( !Char::IsMoverMovable(g_pkMainChar) )
        return;
    }
    v4 = kGroundPos;
    if ( World::IsBlock(&g_kWorld, kGroundPos->x, kGroundPos->y) == 1 )
    {
      v5 = TextData::Get(0x2D517FA1u);
      GameFrameWork::AddSysMsg(v3, v5);
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].Deaffect)() )
      {
        if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount
          || AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, STA_CANNOTCONTROL) )
        {
          v12 = TextData2::Get(0x26598D91u);
          GameFrameWork::AddSysMsg(v3, v12);
        }
        else
        {
          v6 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&kGroundPos)->m_pObject;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&kGroundPos);
          if ( v6 )
          {
            if ( v6->m_bIsWorking )
            {
              v6->m_bIsWorking = 0;
              v7 = v3->m_pkAutoRunMsgWin;
              if ( v7 )
              {
                GTInformWin::Clear(v3->m_pkAutoRunMsgWin);
                v8 = Color::GetDxColor(&result, -1, -112, 0, -1);
                *(_QWORD *)&v9.r = *(_QWORD *)&v8->r;
                *(_QWORD *)&v9.b = *(_QWORD *)&v8->b;
                v10 = TextData2::Get(0x3C517589u);
                GTInformWin::AddText(v7, v10, COERCE_D3DXCOLOR(v9.r), 0, 3.0);
              }
            }
          }
          if ( bViewPoint )
          {
            *(_DWORD *)v11 = LODWORD(v4->x);
            *(_QWORD *)&v11[4] = *(_QWORD *)&v4->y;
            World::ShowMoveTargetPoint(&g_kWorld, *(NiPoint3 *)v11);
          }
          else
          {
            dword_B30C38->m_uFlags |= 1u;
          }
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
          MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
          MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, v4);
          MainChar::StartMoveTarget((MainChar *)g_pkMainChar);
        }
      }
    }
  }
}
// A99E7E: using guessed type bool ChatBoardFlex__ms_bClickLog;

//----- (0048CC50) --------------------------------------------------------
bool __thiscall GameFrameWork::OnOnePickChar(GameFrameWork *this, Char *pkChar)
{
  GameFrameWork *v2; // edi@1
  char v4; // al@5
  MobInfo *v5; // eax@20
  BasicInfoLinkType v6; // eax@21
  signed int v7; // [sp-4h] [bp-Ch]@16

  v2 = this;
  if ( !pkChar )
  {
    GameFrameWork::CancelCharSelect(this);
    return 0;
  }
  if ( !GameFrameWork::TargetCharReq(this, pkChar) || (v4 = g_pkMainChar->m_byMode, v4 == 4) || v4 == 5 )
    return 0;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[1].Affect)(pkChar) && Char::IsNPC(pkChar) )
  {
    if ( Char::IsActGathering(g_pkMainChar) )
      ITask::DirectDispatchAll(32, 0);
    MainChar::SetReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKCHAR);
  }
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(pkChar) )
    MainChar::SetReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKCHAR);
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[1].Affect)(pkChar) )
  {
    if ( Char::IsNPC(pkChar) )
    {
      v7 = Char::IsLinkGate(pkChar) != 0 ? 120 : 3;
LABEL_19:
      GameFrameWork::OpenPlayGuideWin(v2, (BasicInfoLinkType)v7);
      goto LABEL_20;
    }
    if ( Char::IsResource(pkChar) )
    {
      v7 = 174;
      goto LABEL_19;
    }
  }
LABEL_20:
  v5 = Char::GetMobInfo(pkChar);
  if ( v5 )
  {
    v6 = BasicInfoLinkTab::GetbyCType(BIL_C_MOB_CLICK, v5->InxName);
    if ( v6 )
      GameFrameWork::OpenPlayGuideWin(v2, v6);
  }
  return 1;
}

//----- (0048CD60) --------------------------------------------------------
void __thiscall GameFrameWork::OnDoublePickChar(GameFrameWork *this, Char *pkChar)
{
  GameFrameWork *v2; // edi@1
  Char *v3; // esi@4
  MainChar *v4; // ecx@10
  MainChar::TargetType v5; // eax@16
  MainChar *v6; // ecx@16
  MapNavigator *v7; // esi@26
  GTInformWin *v8; // esi@28
  D3DXCOLOR *v9; // eax@29
  D3DXCOLOR v10; // ST04_16@29
  char *v11; // eax@29
  D3DXCOLOR result; // [sp+10h] [bp-10h]@29

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() )
  {
    GameFrameWork::OnOnePickChar(v2, pkChar);
  }
  else
  {
    if ( g_pkMainChar->m_byMode != 4 )
    {
      v3 = pkChar;
      if ( pkChar )
      {
        if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)()
          && Char::IsMoverMovable(g_pkMainChar)
          && !(unsigned __int8)((int (*)(void))v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v3)
            && v3->m_byMode == 5 )
          {
            v4 = (MainChar *)g_pkMainChar;
            if ( g_pkMainChar->m_byMode == 2 )
            {
              Char::SetMode(g_pkMainChar, 1);
              GameFrameWork::NcActChangeModeReq(v2, 1);
              v4 = (MainChar *)g_pkMainChar;
            }
            MainChar::SetReserveAct(v4, RESERVEACT_PICKCHAR);
            LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[1]) = 0;
          }
          else
          {
            if ( Char::IsActGathering(g_pkMainChar) && Char::IsResource(v3) )
            {
              OutputDebugStringA("### ÀÌ¹Ì Ã¤Á");
            }
            else
            {
              v5 = MainChar::GetTargetType((MainChar *)g_pkMainChar, v3);
              v6 = (MainChar *)g_pkMainChar;
              if ( v5 == 3
                || g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount <= 0
                && v3->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount > 0 )
              {
                if ( g_pkMainChar->m_byMode == 1 )
                {
                  Char::SetMode(g_pkMainChar, 2);
                  GameFrameWork::NcActChangeModeReq(v2, 2);
                  v6 = (MainChar *)g_pkMainChar;
                }
                MainChar::SetReserveAct(v6, RESERVEACT_PICKCHAR);
                LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[1]) = 0;
              }
              else
              {
                if ( Char::IsNPC(v3) == 1 )
                {
                  MainChar::SetReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKCHAR);
                  LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[1]) = 0;
                }
              }
              if ( v2->m_pkStickChar )
                GameFrameWork::Stick(v2, 0, 0);
              v7 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&pkChar)->m_pObject;
              NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkChar);
              if ( v7 )
              {
                if ( v7->m_bIsWorking )
                {
                  v7->m_bIsWorking = 0;
                  v8 = v2->m_pkAutoRunMsgWin;
                  if ( v8 )
                  {
                    GTInformWin::Clear(v2->m_pkAutoRunMsgWin);
                    v9 = Color::GetDxColor(&result, -1, -112, 0, -1);
                    *(_QWORD *)&v10.r = *(_QWORD *)&v9->r;
                    *(_QWORD *)&v10.b = *(_QWORD *)&v9->b;
                    v11 = TextData2::Get(0x3C517589u);
                    GTInformWin::AddText(v8, v11, COERCE_D3DXCOLOR(v10.r), 0, 3.0);
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

//----- (0048CF90) --------------------------------------------------------
void __thiscall GameFrameWork::OnPickDropItem(GameFrameWork *this, DropItem *pkDropItem)
{
  GameFrameWork *v2; // ebx@1
  char *v3; // eax@2
  unsigned __int16 v4; // ax@5
  ItemInfo *v5; // eax@6
  char *v6; // eax@10
  ItemInfo *v7; // eax@11
  ItemInfo *v8; // edi@11

  v2 = this;
  if ( CharShape::IsSpactralGlowEnable(&g_pkMainChar->m_kCharShape) )
  {
    v3 = TextData2::Get(0x72B4E9C5u);
    GameFrameWork::AddSysMsg(v2, v3);
    return;
  }
  if ( InventoryWin::ms_bGetDropItemActionReady && pkDropItem )
  {
    v4 = pkDropItem->m_kItemID;
    if ( v4 == 1302 )
      goto LABEL_20;
    v5 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v4);
    if ( !v5 )
      return;
    if ( (v5->MaxLot != 1 || Inventory::GetTotalInv(&g_kInventory) < 192)
      && Inventory::IsReaminSlot(&g_kInventory, pkDropItem->m_kItemID) )
    {
LABEL_20:
      v7 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(pkDropItem->m_kItemID);
      v8 = v7;
      if ( v7
        && CItemAuthorityBase::IA_IsDataAccBelonged(&g_kItemAuthority, v7->BT_Inx)
        && !CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v8->BT_Inx)
        && v8->Type != 3
        && (RollingDiceMsgWin::SetItemInfo(v2->m_pkRollingDiceMsgWin, pkDropItem->m_kItemID, pkDropItem->m_kHandle),
            v2->m_pkRollingDiceMsgWin) )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkRollingDiceMsgWin->baseclass_0.baseclass_0.baseclass_0);
      else
        GameFrameWork::NcItemPickReq(v2, pkDropItem->m_kHandle);
    }
    else
    {
      v6 = TextData::Get(0xF4F9E3F0u);
      GameFrameWork::AddSysMsg(v2, v6);
    }
  }
}
// A7C517: using guessed type bool InventoryWin__ms_bGetDropItemActionReady;

//----- (0048D0D0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCharPopupMenu(GameFrameWork *this, char *pcName)
{
  GameFrameWork *v2; // esi@1
  PopupMenu *v3; // eax@2
  PopupMenu *v4; // eax@5
  PopupMenu *v5; // eax@7
  PopupMenu *v6; // eax@11
  unsigned int v7; // eax@14
  PopupMenu *v8; // eax@15
  PopupMenuWin *v9; // ecx@16
  PopupMenu *v10; // eax@18

  v2 = this;
  PopupMenuWin::Clear(this->m_pkPopupMenuWin);
  GameFrameWork::SetPopupInfo(v2, pcName);
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    v3 = PopupMenuTemplate::GetMainCharUnMetamorphosis();
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v3);
  }
  if ( v2->m_bTargetIsMainChar != 1 && v2->m_pkTarget )
  {
    v4 = PopupMenuTemplate::GetTargetCharName((unsigned int)v2->m_pcName);
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v4);
  }
  GameFrameWork::AddPopupMenu_Collection(v2);
  GameFrameWork::AddPopupMenu_Trade(v2);
  GameFrameWork::AddPopupMenu_InviteGuild(v2);
  GameFrameWork::AddPopupMenu_InviteParty(v2);
  GameFrameWork::AddPopupMenu_Party(v2);
  GameFrameWork::AddPopupMenu_Raid(v2);
  if ( v2->m_bTargetIsMainChar != 1 )
  {
    v5 = PopupMenuTemplate::GetChatWhisperMenu((unsigned int)v2->m_pcName);
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v5);
  }
  if ( v2->m_bTargetIsPartyMember || v2->m_bTargetIsRaidMember && v2->m_bTargetIsMainChar != 1 )
  {
    v6 = PopupMenuTemplate::GetPartyBuffMenu((unsigned int)v2->m_pcName);
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v6);
  }
  GameFrameWork::AddPopupMenu_Follow(v2);
  GameFrameWork::AddPopupMenu_InviteHolyPromise(v2);
  GameFrameWork::AddPopupMenu_RideOn(v2);
  if ( v2->m_bTargetIsMainChar != 1 )
  {
    if ( v2->m_eFieldMapType == 1 )
    {
      v7 = KingdomQuestWin::GetJoinQuestHandle(v2->m_pkKingDomQuest);
      if ( GameFrameWork::IsVotePossible(v2, v7) )
      {
        v8 = PopupMenuTemplate::GetVoteMenu((unsigned int)v2->m_pcName);
        PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v8);
      }
    }
  }
  GameFrameWork::AddPopupMenu_InviteFriend(v2);
  v9 = v2->m_pkPopupMenuWin;
  if ( v9->m_dwMenuCount )
  {
    v10 = PopupMenuTemplate::GetCancelMenu();
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v10);
    PopupMenuWin::FinishMenu(v2->m_pkPopupMenuWin, 0);
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    PopupMenuWin::Clear(v9);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0048D2B0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenRaidMemberPopupMenu(GameFrameWork *this, char *pcName)
{
  GameFrameWork *v2; // esi@1
  PopupMenu *v3; // eax@2
  PopupMenu *v4; // eax@6
  PopupMenuWin *v5; // ecx@7
  PopupMenu *v6; // eax@9

  v2 = this;
  PopupMenuWin::Clear(this->m_pkPopupMenuWin);
  GameFrameWork::SetPopupInfo(v2, pcName);
  GameFrameWork::AddPopupMenu_Raid(v2);
  if ( v2->m_bTargetIsMainChar != 1 )
  {
    v3 = PopupMenuTemplate::GetChatWhisperMenu((unsigned int)v2->m_pcName);
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v3);
  }
  if ( v2->m_bTargetIsPartyMember || v2->m_bTargetIsRaidMember && v2->m_bTargetIsMainChar != 1 )
  {
    v4 = PopupMenuTemplate::GetPartyBuffMenu((unsigned int)v2->m_pcName);
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v4);
  }
  v5 = v2->m_pkPopupMenuWin;
  if ( v5->m_dwMenuCount )
  {
    v6 = PopupMenuTemplate::GetCancelMenu();
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v6);
    PopupMenuWin::FinishMenu(v2->m_pkPopupMenuWin, 0);
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    PopupMenuWin::Clear(v5);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0048D3B0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenKQTeamPopupMenu(GameFrameWork *this, char *pcName)
{
  GameFrameWork *v2; // esi@1
  PopupMenu *v3; // eax@2
  PopupMenu *v4; // eax@5
  PopupMenu *v5; // eax@7
  unsigned int v6; // eax@10
  PopupMenu *v7; // eax@11
  PopupMenuWin *v8; // ecx@12
  PopupMenu *v9; // eax@14

  v2 = this;
  PopupMenuWin::Clear(this->m_pkPopupMenuWin);
  GameFrameWork::SetPopupInfo(v2, pcName);
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    v3 = PopupMenuTemplate::GetMainCharUnMetamorphosis();
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v3);
  }
  if ( v2->m_bTargetIsMainChar != 1 && v2->m_pkTarget )
  {
    v4 = PopupMenuTemplate::GetTargetCharName((unsigned int)v2->m_pcName);
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v4);
  }
  GameFrameWork::AddPopupMenu_Collection(v2);
  GameFrameWork::AddPopupMenu_Trade(v2);
  GameFrameWork::AddPopupMenu_InviteGuild(v2);
  if ( v2->m_bTargetIsMainChar != 1 )
  {
    v5 = PopupMenuTemplate::GetChatWhisperMenu((unsigned int)v2->m_pcName);
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v5);
  }
  GameFrameWork::AddPopupMenu_Follow(v2);
  GameFrameWork::AddPopupMenu_InviteHolyPromise(v2);
  GameFrameWork::AddPopupMenu_RideOn(v2);
  if ( v2->m_bTargetIsMainChar != 1 )
  {
    if ( v2->m_eFieldMapType == 1 )
    {
      v6 = KingdomQuestWin::GetJoinQuestHandle(v2->m_pkKingDomQuest);
      if ( GameFrameWork::IsVotePossible(v2, v6) )
      {
        v7 = PopupMenuTemplate::GetVoteMenu((unsigned int)v2->m_pcName);
        PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v7);
      }
    }
  }
  GameFrameWork::AddPopupMenu_InviteFriend(v2);
  v8 = v2->m_pkPopupMenuWin;
  if ( v8->m_dwMenuCount )
  {
    v9 = PopupMenuTemplate::GetCancelMenu();
    PopupMenuWin::AddMenu(v2->m_pkPopupMenuWin, v9);
    PopupMenuWin::FinishMenu(v2->m_pkPopupMenuWin, 0);
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    PopupMenuWin::Clear(v8);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0048D540) --------------------------------------------------------
bool __thiscall GameFrameWork::TranslatePickedMHObj(GameFrameWork *this, NiPoint3 *kGroundPos)
{
  int v2; // eax@6
  mhObject *v4; // edi@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // ecx@9
  const char *v6; // eax@11
  bool v7; // zf@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // ecx@15
  const char *v9; // eax@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // ecx@21
  const char *v11; // eax@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // ecx@29
  const char *v13; // eax@31
  float v14; // edx@35
  int v15; // eax@35
  float v16; // esi@35

  if ( kGroundPos->x == *(float *)(dword_AA502C + 88)
    && kGroundPos->y == *(float *)(dword_AA502C + 92)
    && kGroundPos->z == *(float *)(dword_AA502C + 96) )
    return 1;
  if ( nowState != 3 )
  {
    if ( nowState != 5 || stru_AA4FFC.baseclass_0._Mysize <= 5 )
      return 1;
    v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhRoomFloorName_0;
    if ( mhRoomFloorName_0.baseclass_0._Myres < 0x10 )
      v12 = &mhRoomFloorName_0;
    v13 = *(const char **)&stru_AA4FFC;
    if ( stru_AA4FFC.baseclass_0._Myres < 0x10 )
      v13 = (const char *)&stru_AA4FFC;
    v7 = _mbsnbcmp(v13, v12->baseclass_0.___u0.baseclass_0.dummy, mhRoomFloorName_0.baseclass_0._Mysize) == 0;
    goto LABEL_34;
  }
  if ( stru_AA4FFC.baseclass_0._Mysize > 5 )
  {
    v2 = MiniHouseIndoor::GetPickedObjID(&g_kWorld.m_MiniHouseIndoorMode);
    if ( v2 == -1 || (v4 = mhObjectManager::GetObjectA(&stru_AA4FA8, v2)) == 0 )
      return 0;
    v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhRoomFloorName_0;
    if ( mhRoomFloorName_0.baseclass_0._Myres < 0x10 )
      v5 = &mhRoomFloorName_0;
    v6 = *(const char **)&stru_AA4FFC;
    if ( stru_AA4FFC.baseclass_0._Myres < 0x10 )
      v6 = (const char *)&stru_AA4FFC;
    if ( _mbsnbcmp(v6, v5->baseclass_0.___u0.baseclass_0.dummy, mhRoomFloorName_0.baseclass_0._Mysize) )
    {
      v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhRoomWallName_0;
      if ( mhRoomWallName_0.baseclass_0._Myres < 0x10 )
        v8 = &mhRoomWallName_0;
      v9 = *(const char **)&stru_AA4FFC;
      if ( stru_AA4FFC.baseclass_0._Myres < 0x10 )
        v9 = (const char *)&stru_AA4FFC;
      if ( _mbsnbcmp(v9, v8->baseclass_0.___u0.baseclass_0.dummy, mhRoomWallName_0.baseclass_0._Mysize) )
      {
        v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhRoomRoofName_0;
        if ( mhRoomRoofName_0.baseclass_0._Myres < 0x10 )
          v10 = &mhRoomRoofName_0;
        v11 = *(const char **)&stru_AA4FFC;
        if ( stru_AA4FFC.baseclass_0._Myres < 0x10 )
          v11 = (const char *)&stru_AA4FFC;
        if ( _mbsnbcmp(v11, v10->baseclass_0.___u0.baseclass_0.dummy, mhRoomRoofName_0.baseclass_0._Mysize) )
          return 1;
        v7 = v4->m_BindType.m_byBindType[2] == 1;
      }
      else
      {
        v7 = *(_WORD *)&v4->m_BindType.m_byBindType[0] == 1;
      }
    }
    else
    {
      v7 = *(_WORD *)&v4->m_BindType.m_byBindType[0] >> 8 == 1;
    }
LABEL_34:
    if ( v7 )
    {
      v14 = kGroundPos->y;
      v15 = dword_AA502C;
      v16 = kGroundPos->z;
      *(_DWORD *)(dword_AA502C + 88) = LODWORD(kGroundPos->x);
      *(_DWORD *)(v15 + 92) = LODWORD(v14);
      *(_DWORD *)(v15 + 96) = LODWORD(v16);
    }
  }
  return 1;
}
// AA502C: using guessed type int dword_AA502C;

//----- (0048D740) --------------------------------------------------------
void __thiscall GameFrameWork::OnPickChar(GameFrameWork *this, Char *pkChar)
{
  Char *v2; // esi@1
  GameFrameWork *v3; // ebx@1
  Name3 *v4; // eax@8
  MobInfo *v5; // edi@9
  char v6; // cl@13
  unsigned int v7; // esi@15
  NiPoint3 kDirToMainChar; // [sp+8h] [bp-Ch]@8

  v2 = pkChar;
  v3 = this;
  if ( pkChar
    && pkChar != g_pkMainChar
    && !PrivateStoreWin::ms_bPrivateStoreWin
    && !AbStateInfectee::FindAbstateInstBySubAbstateType(&g_pkMainChar->baseclass_0, SUBAB_BLIND) )
  {
    MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, 0);
    if ( (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] == v2 )
      GameFrameWork::OnDoublePickChar(v3, v2);
    else
      GameFrameWork::OnOnePickChar(v3, v2);
    v4 = World::GetMapName(&g_kWorld, (Name3 *)&kDirToMainChar);
    if ( MapInfoTab::GetByMapName(v4) )
    {
      v5 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v2->m_kCharShape.m_kMobID, 1);
      if ( v5 )
      {
        if ( Char::IsNPC(v2) && v5->Type == 15 )
        {
          LOWORD(pkChar) = v2->m_kHandle;
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xCAu, &pkChar, 2);
        }
      }
    }
    v6 = g_pkMainChar->m_byMode;
    if ( v6 != 4 )
    {
      if ( v6 != 5 )
      {
        v7 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
        if ( v7 )
        {
          Char::GetDirToChar((Char *)v7, &kDirToMainChar, g_pkMainChar);
          if ( *(_BYTE *)(v7 + 1916) == 5 )
          {
            if ( NiPoint3::Length(&kDirToMainChar) < 150.0 )
              GameFrameWork::NcBoothEntryReq(v3, *(_WORD *)(v7 + 548));
          }
        }
      }
    }
  }
}
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (0048D870) --------------------------------------------------------
void __thiscall GameFrameWork::OnPickCharWithRBut(GameFrameWork *this, Char *pkChar)
{
  GameFrameWork *v2; // edi@1
  char v3; // al@5
  char *v4; // eax@11

  v2 = this;
  if ( pkChar && pkChar != g_pkMainChar )
  {
    if ( (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] != pkChar )
    {
      if ( !GameFrameWork::TargetCharReq(this, pkChar) || (v3 = g_pkMainChar->m_byMode, v3 == 4) || v3 == 5 )
        return;
      if ( Char::IsNPC(pkChar) )
        MainChar::SetReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKCHAR);
    }
    if ( pkChar->m_bUserCharacter )
    {
      if ( dword_AA501C <= 1 )
      {
        v4 = (char *)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(pkChar);
        GameFrameWork::OpenCharPopupMenu(v2, v4);
      }
    }
  }
}
// AA501C: using guessed type int dword_AA501C;

//----- (0048D8F0) --------------------------------------------------------
bool __thiscall GameFrameWork::ProcessMHInput(GameFrameWork *this, World::PickEnum ePick, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos, DropItem **pkDropItem)
{
  GameFrameWork *v7; // esi@1
  mhMouseControlWin *v8; // ecx@2
  unsigned int v9; // eax@2
  mhMouseControlWin *v10; // ecx@2
  unsigned int v11; // eax@2
  World::PickEnum v12; // eax@3
  World::PickEnum v13; // ebx@3
  char *v14; // eax@7
  MsgBox *v15; // eax@7
  char v17; // al@14
  _BYTE v18[12]; // ST08_12@17
  bool v19; // [sp-4h] [bp-40h]@17
  tagPOINT kPoint; // [sp+Ch] [bp-30h]@2
  Char **v21; // [sp+14h] [bp-28h]@1
  NiRefObjectVtbl *v22; // [sp+18h] [bp-24h]@2
  tagPOINT NewMousePos; // [sp+1Ch] [bp-20h]@1
  PgMsg::Frame kOkMsg; // [sp+24h] [bp-18h]@7
  unsigned int v25; // [sp+38h] [bp-4h]@1
  int v26; // [sp+3Ch] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v21 = pkChar;
  v7 = this;
  NewMousePos.y = (int)kDir;
  if ( (signed int)nowState >= 1 )
  {
    GetCursorPos(&kPoint);
    v8 = v7->m_pkMHMouseControlWin;
    v22 = v7->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = mhMouseControlWin::GetCenterX(v8);
    v22[43].__vecDelDtor((NiRefObject *)v7->m_pkMHMouseControlWin, kPoint.x - v9);
    v10 = v7->m_pkMHMouseControlWin;
    v22 = v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v11 = mhMouseControlWin::GetCenterY(v10);
    v22[44].__vecDelDtor((NiRefObject *)v7->m_pkMHMouseControlWin, kPoint.y - v11);
    if ( dword_B70350 < 1 )
    {
      v13 = ePick;
      goto LABEL_12;
    }
    v12 = World::PickSomethingProcess(&g_kWorld, kOrigin, (NiPoint3 *)NewMousePos.y, v21, kGroundPos);
    v13 = v12;
    if ( (signed int)v12 >= 6 )
    {
      if ( (signed int)v12 <= 7 )
      {
        mhMouseControlWin::SetCtrlDown(v7->m_pkMHMouseControlWin, 0);
      }
      else
      {
        if ( v12 == 9 )
        {
          if ( !unk_B7040C )
          {
            v14 = TextData2::Get(0x3E3F4992u);
            v15 = MsgBox::Modal(MSGBOX_OKCANCEL, v14);
            kOkMsg.m_uiFrameMsg = 227;
            kOkMsg.m_uiFramelParam = 0;
            MsgBox::SetFrameWorkMsgOnClose(v15, &v7->baseclass_0, &kOkMsg, 0);
          }
          goto LABEL_12;
        }
      }
    }
    if ( v13 == 7 )
      return 1;
LABEL_12:
    if ( !dword_AA502C || v13 == 5 )
      return 0;
    v17 = (*(_BYTE *)(g_pkKeyboard + 36) >> 5) & 1;
    if ( !((*(_BYTE *)(g_pkKeyboard + 36) >> 5) & 1)
      || *(_BYTE *)(g_pkKeyboard + 68) & 0x20
      || *(_BYTE *)(g_pkKeyboard + 40) & 1 )
    {
      if ( v17 )
      {
        if ( !(*(_BYTE *)(g_pkKeyboard + 40) & 1) )
        {
          GetCursorPos(&NewMousePos);
          MiniHouseIndoor::PickedObjRotate(&g_kWorld.m_MiniHouseIndoorMode, NewMousePos, 0);
          return 0;
        }
        if ( v17 )
          goto LABEL_33;
      }
      if ( !(*(_BYTE *)(g_pkKeyboard + 68) & 0x20) )
      {
LABEL_33:
        GameFrameWork::TranslatePickedMHObj(v7, kGroundPos);
        return 0;
      }
      SetCursorPos(dword_AA5038, dword_AA503C);
      v19 = 0;
    }
    else
    {
      GetCursorPos(&NewMousePos);
      *(_DWORD *)v18 = LODWORD(kGroundPos->x);
      *(_QWORD *)&v18[4] = *(_QWORD *)&kGroundPos->y;
      MiniHouseIndoor::SetMouseDownStartPos(&g_kWorld.m_MiniHouseIndoorMode, NewMousePos, *(NiPoint3 *)v18, 0);
      v19 = 1;
    }
    mhMouseControlWin::SetCtrlDown(v7->m_pkMHMouseControlWin, v19);
    return 0;
  }
  if ( !nowState || dword_B70350 < 1 || World::PickMHObj(&g_kWorld, nowState, kOrigin, kDir, kGroundPos, 0) != 8 )
    return 0;
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9816C: using guessed type int g_pkKeyboard;
// AA502C: using guessed type int dword_AA502C;
// B70350: using guessed type int dword_B70350;

//----- (0048DB30) --------------------------------------------------------
void __thiscall GameFrameWork::SetMHRClickMenu(GameFrameWork *this, mhObject *pPickedObj)
{
  mhObject *v2; // ebx@2
  int v3; // esi@3
  int v4; // edi@3
  int v5; // edi@4
  int v6; // eax@7
  MiniHouseFurniture *v7; // eax@10
  MiniHouseObjAni *v8; // eax@12
  MiniHouseObjAni *v9; // esi@12
  int v10; // eax@14
  __int16 v11; // cx@16
  bool v12; // [sp-14h] [bp-18h]@17
  bool v13; // [sp-10h] [bp-14h]@11
  GameFrameWork *thisa; // [sp+0h] [bp-4h]@1
  MiniHouseFurniture *pFurInfo; // [sp+Ch] [bp+8h]@10

  thisa = this;
  if ( (signed int)nowState <= 1 )
  {
    v2 = pPickedObj;
    if ( pPickedObj )
    {
      v3 = pPickedObj->m_iResGUID;
      v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              pPickedObj->m_iResGUID) )
      {
        if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) )
        {
          v6 = *(_DWORD *)(v4 + 196) + 4 * (unsigned __int16)v3;
          v5 = *(_DWORD *)v6 ? *(_DWORD *)v6 : 0;
        }
        else
        {
          v5 = 0;
        }
      }
      else
      {
        v5 = 0;
      }
      v7 = MiniHouseFuritureInfoTab::GetObjByName((char *)(v5 + 2));
      pFurInfo = v7;
      if ( v5 )
      {
        v13 = 0;
        if ( (unsigned __int16)dword_AA5112 == v2->m_iGUID )
        {
          v8 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(v2->m_iResGUID, 0x7530u, 0);
          v9 = v8;
          if ( !v8 )
            goto LABEL_23;
          if ( v8->AniGroupIDMaxNum > 1u )
          {
            v10 = rand();
            v9 = ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::GetByIndex(v10 % v9->AniGroupIDMaxNum + v9->Handle);
          }
          if ( v9 )
          {
            v11 = LOWORD(v2->m_iGUID);
            HIWORD(dword_AA5112) = v9->Handle;
            LOWORD(dword_AA5112) = v11;
            if ( !pFurInfo )
              return;
            v13 = 1;
            v12 = pFurInfo->Grip != 0;
          }
          else
          {
LABEL_23:
            v13 = 0;
            v12 = pFurInfo->Grip != 0;
          }
        }
        else
        {
          v12 = v7->Grip != 0;
        }
        GameFrameWork::OnOpenMHPopUpMenuObjAction(thisa, (char *)(v5 + 34), v2, v12, v13);
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// AA5112: using guessed type int dword_AA5112;

//----- (0048DC60) --------------------------------------------------------
void __thiscall GameFrameWork::OnPickMiniHouse(GameFrameWork *this, unsigned __int16 hMinihouse)
{
  PgFrameWork *v2; // edi@1
  int v3; // eax@3
  int v4; // edx@4
  int v5; // edx@4
  int v6; // eax@4
  char *v7; // eax@4
  MsgBox *v8; // eax@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > result; // [sp+8h] [bp-4Ch]@2
  unsigned __int16 _Keyval[2]; // [sp+Ch] [bp-48h]@2
  PgMsg::Frame kCancelMsg; // [sp+10h] [bp-44h]@5
  PgMsg::Frame kOkMsg; // [sp+24h] [bp-30h]@5
  char acName[21]; // [sp+38h] [bp-1Ch]@4
  unsigned int v14; // [sp+50h] [bp-4h]@1
  int v15; // [sp+54h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = (PgFrameWork *)this;
  if ( !unk_B7040C )
  {
    *(_DWORD *)_Keyval = hMinihouse;
    std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
      &g_kMiniHouseMgr,
      &result,
      _Keyval);
    if ( result != stru_B67CF0 )
    {
      v3 = *(_DWORD *)(*(_DWORD *)&result + 16);
      if ( v3 )
      {
        v4 = *(_DWORD *)(v3 + 18);
        *(_DWORD *)acName = *(_DWORD *)(v3 + 14);
        *(_DWORD *)&acName[8] = *(_DWORD *)(v3 + 22);
        *(_DWORD *)&acName[4] = v4;
        v5 = *(_DWORD *)(v3 + 26);
        v6 = *(_DWORD *)(v3 + 30);
        *(_DWORD *)&acName[12] = v5;
        *(_DWORD *)&acName[16] = v6;
        acName[20] = 0;
        v7 = TextData2::Get(0x7E97E3DFu);
        v8 = MsgBox::Modal(MSGBOX_OKCANCEL, v7);
        if ( v8 )
        {
          kOkMsg.m_uiFrameWParam = hMinihouse;
          kOkMsg.m_uiFrameMsg = 242;
          kCancelMsg.m_uiFrameMsg = 243;
          MsgBox::SetFrameWorkMsgOnClose(v8, v2, &kOkMsg, &kCancelMsg);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0048DD30) --------------------------------------------------------
void __thiscall GameFrameWork::ProcessInput(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  InventoryWin *v2; // esi@16
  InventoryWin *v3; // edi@19
  RandomOptCountRecoverWin *v4; // ecx@24
  char v5; // bl@24
  char v6; // al@32
  World::PickEnum v7; // eax@39
  Char *v8; // eax@42
  Char *v9; // edi@42
  unsigned __int16 *v10; // eax@48
  ExpeditionWin *v11; // ecx@51
  int v12; // eax@55
  int v13; // edx@55
  double v14; // st7@55
  int v15; // eax@55
  MapNavigator *v16; // edi@60
  GTInformWin *v17; // edi@62
  D3DXCOLOR *v18; // eax@63
  D3DXCOLOR v19; // ST08_16@63
  char *v20; // eax@63
  char v21; // cl@66
  const char *v22; // eax@69
  const char *v23; // eax@73
  NiNode *v24; // eax@79
  NiNode *v25; // eax@80
  mhObject *v26; // eax@80
  mhObject *v27; // ebx@80
  MiniHouseObjAni *v28; // eax@81
  MiniHouseObjAni *v29; // edi@81
  int v30; // eax@83
  unsigned __int16 v31; // ax@85
  signed __int16 v32; // cx@89
  NiNode *v33; // eax@99
  NiNode *v34; // eax@100
  mhObject *v35; // eax@100
  _BYTE v36[12]; // ST0C_12@111
  _BYTE v37[12]; // ST00_12@111
  World::PickEnum v38; // ebx@114
  GuildListWin *v39; // eax@119
  GuildListWin *v40; // eax@120
  GuildTournamentBaseWin *v41; // eax@122
  GuildTournamentBaseWin *v42; // eax@123
  ExpeditionWin *v43; // ecx@128
  MobType v44; // eax@137
  QuestHelperMgr *v45; // edi@141
  const char *v46; // eax@143
  int v47; // edx@143
  char v48; // cl@144
  NiPoint3 *v49; // eax@146
  _BYTE v50[12]; // ST14_12@146
  ChatDisplayWin2 *v51; // ecx@158
  char v52; // bl@158
  int v53; // eax@160
  StatusBuffWin *v54; // ecx@165
  int v55; // eax@167
  StatusBuffWin *v56; // ecx@172
  int v57; // eax@174
  StatusBuffWin *v58; // ecx@179
  int v59; // eax@181
  ExpeditionWin *v60; // ecx@187
  ChatDisplayWin *v61; // ecx@190
  int v62; // eax@192
  ItemInfo *v63; // edi@209
  Item *v64; // ecx@212
  int v65; // edi@214
  int v66; // edi@214
  int v67; // eax@214
  int v68; // [sp+0h] [bp-44h]@33
  Cursor::Type v69; // [sp+0h] [bp-44h]@109
  Cursor::Type v70; // [sp+0h] [bp-44h]@132
  Cursor::Type v71; // [sp+0h] [bp-44h]@162
  Cursor::Type v72; // [sp+0h] [bp-44h]@169
  Cursor::Type v73; // [sp+0h] [bp-44h]@176
  Cursor::Type v74; // [sp+0h] [bp-44h]@183
  D3DXCOLOR result; // [sp+10h] [bp-34h]@6
  NiPoint3 kGroundPos; // [sp+20h] [bp-24h]@39
  float v77; // [sp+2Ch] [bp-18h]@55
  tagPOINT Point; // [sp+30h] [bp-14h]@6
  int hMiniHouseHandle; // [sp+38h] [bp-Ch]@37
  Char *pkChar; // [sp+3Ch] [bp-8h]@6
  int hMinihouse; // [sp+40h] [bp-4h]@6

  v1 = this;
  if ( dword_B30F24 == 1 )
  {
    Cursor::SetCursor((Cursor::Type)12);
    if ( !(*(_BYTE *)(g_pkKeyboard + 33) & 2) || ChatDisplayWin2::IsDuringEdit(v1->m_pkChatDisplayWin) )
    {
      if ( dword_B70350 >= 1 )
      {
        if ( World::Pick(
               &g_kWorld,
               &v1->m_kCameraRayOrigin,
               &v1->m_kCameraRayDir,
               &pkChar,
               (NiPoint3 *)&result.g,
               (DropItem **)&Point.y,
               (unsigned __int16 *)&hMinihouse) == 2 )
          ItemRepairWin::CancelItemRepair(v1->m_pkItemRepairWin);
      }
    }
    else
    {
      dword_B30F24 = 2;
    }
    return;
  }
  if ( dword_B30F28 == 1 )
  {
    Cursor::SetCursor((Cursor::Type)13);
    if ( InventoryWin::ms_uiMode != 7 )
      InventoryWin::OnCreateNewSocket(v1->m_pkInventoryWin, 0);
    if ( !(*(_BYTE *)(g_pkKeyboard + 33) & 2) || ChatDisplayWin2::IsDuringEdit(v1->m_pkChatDisplayWin) )
    {
      if ( dword_B70350 >= 1 )
      {
        if ( World::Pick(
               &g_kWorld,
               &v1->m_kCameraRayOrigin,
               &v1->m_kCameraRayDir,
               &pkChar,
               (NiPoint3 *)&result.g,
               (DropItem **)&Point.y,
               (unsigned __int16 *)&hMinihouse) == 2 )
        {
          v2 = v1->m_pkInventoryWin;
          if ( v2 )
            InventoryWin::OnCreateNewSocket(v2, 0);
        }
      }
    }
    else
    {
      dword_B30F28 = 2;
    }
    return;
  }
  if ( dword_B30F2C == 1 )
  {
    Cursor::SetCursor((Cursor::Type)14);
    v3 = v1->m_pkInventoryWin;
    if ( InventoryWin::ms_uiMode != 9 )
      InventoryWin::OnResetRecoverCountState(v1->m_pkInventoryWin);
    if ( !(*(_BYTE *)(g_pkKeyboard + 33) & 2) || ChatDisplayWin2::IsDuringEdit(v1->m_pkChatDisplayWin) )
    {
      v4 = v3->m_pkRandomOptCountRecoverWin;
      v5 = 1;
      if ( v4
        && (unsigned __int8)((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        v5 = 0;
      if ( dword_B70350 >= 1
        && v5
        && World::Pick(
             &g_kWorld,
             &v1->m_kCameraRayOrigin,
             &v1->m_kCameraRayDir,
             &pkChar,
             (NiPoint3 *)&result.g,
             (DropItem **)&Point.y,
             (unsigned __int16 *)&hMinihouse) == 2 )
        InventoryWin::OnResetRecoverCountState(v3);
    }
    else
    {
      dword_B30F2C = 2;
    }
    return;
  }
  KeyMap::Process(this->m_spKeyMap.m_pObject);
  Singleton<CursorState>::getInstance();
  if ( GameFrameWork::UpdateCursorState(v1) == 1 )
    return;
  v6 = *(_BYTE *)(g_pkKeyboard + 48);
  if ( v6 < 0 )
  {
    v68 = -70;
LABEL_36:
    World::AddCameraZoom(&g_kWorld, v68);
    goto LABEL_37;
  }
  if ( v6 & 4 )
  {
    v68 = 70;
    goto LABEL_36;
  }
LABEL_37:
  GameFrameWork::UpdateCheckTab(v1);
  GameFrameWork::UpdateSmartWhisper(v1);
  GameFrameWork::UpdateSmartReply(v1);
  NiCamera::WindowPointToRay(pkCamera, PgWin::ms_iMsX.x, PgWin::ms_iMsY, &v1->m_kCameraRayOrigin, &v1->m_kCameraRayDir);
  hMiniHouseHandle = 65535;
  if ( nowState )
  {
    if ( dword_AA4FE8 )
    {
      v7 = World::Pick(
             &g_kWorld,
             &v1->m_kCameraRayOrigin,
             &v1->m_kCameraRayDir,
             (Char **)&hMinihouse,
             &kGroundPos,
             (DropItem **)&pkChar,
             (unsigned __int16 *)&hMiniHouseHandle);
      if ( GameFrameWork::ProcessMHInput(
             v1,
             v7,
             &v1->m_kCameraRayOrigin,
             &v1->m_kCameraRayDir,
             (Char **)&hMinihouse,
             &kGroundPos,
             (DropItem **)&pkChar) == 1 )
        return;
    }
  }
  if ( dword_B70350 >= 1 )
  {
    if ( g_ClickedPrivateStoreBD )
    {
      v8 = CharMgr::GetChar(&g_kCharMgr, g_ClickedPrivateStoreBD->m_kCharHandle);
      v9 = v8;
      if ( v8 && v8->m_byMode == 5 )
      {
        ((void (__thiscall *)(Char *))v8->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v8);
        GameFrameWork::OnPickChar(v1, v9);
        goto LABEL_45;
      }
    }
    else
    {
      if ( g_ClickedMiniHouseBD )
      {
        v10 = (unsigned __int16 *)CGuildMonster::GetGuildEumFromMob(
                                    (CMiniHouseMgr *)&g_kMiniHouseMgr,
                                    *(_WORD *)(g_ClickedMiniHouseBD + 8));
        if ( v10 )
        {
          GameFrameWork::OnPickMiniHouse(v1, *v10);
LABEL_45:
          if ( dword_B70350 )
            --dword_B70350;
          return;
        }
      }
    }
    if ( dword_B70350 >= 1 )
    {
      v11 = v1->m_pkExpeditionWin;
      if ( v11 )
      {
        if ( (ExpeditionWin *)unk_B70444 != v11 && v11->m_bIsSelecteSlot )
          ExpeditionWin::ClickReset(v11);
      }
    }
  }
  v12 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  LODWORD(v1->m_kCharMover.m_pos3CurPos.x) = *(_DWORD *)v12;
  LODWORD(v1->m_kCharMover.m_pos3CurPos.y) = *(_DWORD *)(v12 + 4);
  LODWORD(v1->m_kCharMover.m_pos3CurPos.z) = *(_DWORD *)(v12 + 8);
  v77 = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][0];
  *(float *)&Point.x = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
  v13 = Point.x;
  v14 = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
  v1->m_kCharMover.m_pos3CameraDir.x = v77;
  *(float *)&Point.y = v14;
  v15 = Point.y;
  LODWORD(v1->m_kCharMover.m_pos3CameraDir.y) = v13;
  LODWORD(v1->m_kCharMover.m_pos3CameraDir.z) = v15;
  if ( dword_B70368 >= 1 && dword_B70344 >= 1 && GameFrameWork::IsCapableKeyControl(v1) == 1 )
  {
    v1->m_kCharMover.m_bKeyDown = 1;
    v1->m_kCharMover.m_bDownFront = 1;
    if ( v1->m_kCharMover.m_bAutoRun )
      KeyboardMoveProcess::SetAutoRun(&v1->m_kCharMover, 0);
    v16 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&pkChar)->m_pObject;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkChar);
    if ( v16 )
    {
      if ( v16->m_bIsWorking )
      {
        v16->m_bIsWorking = 0;
        v17 = v1->m_pkAutoRunMsgWin;
        if ( v17 )
        {
          GTInformWin::Clear(v1->m_pkAutoRunMsgWin);
          v18 = Color::GetDxColor(&result, -1, -112, 0, -1);
          *(_QWORD *)&v19.r = *(_QWORD *)&v18->r;
          *(_QWORD *)&v19.b = *(_QWORD *)&v18->b;
          v20 = TextData2::Get(0x3C517589u);
          GTInformWin::AddText(v17, v20, COERCE_D3DXCOLOR(v19.r), 0, 3.0);
        }
      }
    }
  }
  if ( ChatDisplayWin2::IsDuringEdit(v1->m_pkChatDisplayWin) && !v1->m_kSmartWhisper.m_eState )
  {
    v21 = *(_BYTE *)(g_pkKeyboard + 48);
    if ( v21 & 2 || !(*(_BYTE *)(g_pkKeyboard + 80) & 2) )
    {
      if ( v21 & 0x40 || !(*(_BYTE *)(g_pkKeyboard + 80) & 0x40) )
      {
        if ( !(*(_BYTE *)(g_pkKeyboard + 34) & 0x80) && *(_BYTE *)(g_pkKeyboard + 66) & 0x80 )
          ChatDisplayWin2::SetWhisperEditFocus(v1->m_pkChatDisplayWin);
      }
      else
      {
        if ( !ChatDisplayWin2::IsOnCandList(v1->m_pkChatDisplayWin) )
        {
          v23 = ChatCommandList::GetDownCommand(&v1->m_kChatComList);
          ChatDisplayWin2::ChatStart(v1->m_pkChatDisplayWin, v23);
        }
      }
    }
    else
    {
      if ( !ChatDisplayWin2::IsOnCandList(v1->m_pkChatDisplayWin) )
      {
        v22 = ChatCommandList::GetUpCommand(&v1->m_kChatComList);
        ChatDisplayWin2::ChatStart(v1->m_pkChatDisplayWin, v22);
      }
    }
  }
  if ( PgWin::ms_kbRbutPressed.m_iBool >= 1 )
  {
    dword_A98738 = 1;
    GetCursorPos(&Point);
    dword_A98734 = Point.x;
    dword_A98730 = Point.y;
    Cursor::Show(0);
    if ( (signed int)nowState <= 1 )
    {
      v24 = (NiNode *)World::GetCandidatePickObj(&g_kWorld, &v1->m_kCameraRayOrigin, &v1->m_kCameraRayDir, &kGroundPos);
      if ( v24 )
      {
        v25 = mhObjectManager::FindRootNode(&stru_AA4FA8, v24);
        v26 = mhObjectManager::GetObjectA(&stru_AA4FA8, v25);
        v27 = v26;
        if ( v26 )
        {
          v28 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(v26->m_iResGUID, 0x7530u, 0);
          v29 = v28;
          if ( v28 )
          {
            if ( v28->AniGroupIDMaxNum > 1u )
            {
              v30 = rand();
              v29 = ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::GetByIndex(v30 % v29->AniGroupIDMaxNum + v29->Handle);
            }
            if ( v29 )
            {
              v31 = v29->Handle;
              LOWORD(dword_AA5112) = LOWORD(v27->m_iGUID);
              HIWORD(dword_AA5112) = v31;
            }
          }
          if ( word_AA5144 == -1 )
            word_AA5144 = LOWORD(v27->m_iGUID);
          goto LABEL_92;
        }
        dword_AA5112 = -1;
        if ( word_AA5144 != -1 )
          goto LABEL_92;
        v32 = ::v4;
      }
      else
      {
        dword_AA5112 = -1;
        v32 = -1;
      }
      word_AA5144 = v32;
      goto LABEL_92;
    }
  }
LABEL_92:
  if ( dword_A98738 )
  {
    World::AddCameraRotate(&g_kWorld, PgWin::ms_iMsDeltaX, PgWin::ms_iMsDeltaY);
    if ( PgWin::ms_iMsDeltaX || PgWin::ms_iMsDeltaY )
      byte_A9872C = 1;
    SetCursorPos(dword_A98734, dword_A98730);
    if ( dword_A98738 )
    {
      if ( !*(_BYTE *)(g_pkMouse + 145) )
      {
        dword_A98738 = 0;
        Cursor::Show(1);
        if ( (signed int)nowState <= 1 )
        {
          v33 = (NiNode *)World::GetCandidatePickObj(
                            &g_kWorld,
                            &v1->m_kCameraRayOrigin,
                            &v1->m_kCameraRayDir,
                            &kGroundPos);
          if ( v33 )
          {
            v34 = mhObjectManager::FindRootNode(&stru_AA4FA8, v33);
            v35 = mhObjectManager::GetObjectA(&stru_AA4FA8, v34);
            if ( v35 )
            {
              if ( word_AA5144 == LOWORD(v35->m_iGUID) )
                GameFrameWork::SetMHRClickMenu(v1, v35);
            }
          }
          word_AA5144 = -1;
        }
      }
    }
  }
  if ( PgWin::ms_iMsDeltaZ && !unk_B7044C && !v1->m_bUIScroll )
    World::AddCameraZoom(&g_kWorld, PgWin::ms_iMsDeltaZ);
  g_pkMouseOverDropItem = 0;
  if ( unk_B7040C )
  {
    v69 = 0;
LABEL_201:
    Cursor::SetCursor(v69);
    goto LABEL_202;
  }
  if ( v1->m_kSkillCasting.eState != 1 )
  {
    World::SetMagicCircleEnable(&g_kWorld, 0);
    pkChar = (Char *)unk_B70444;
    g_pkMouseOvereMob = 0;
    if ( unk_B70444 || PgWin::ms_pkCapture )
    {
      v38 = 0;
    }
    else
    {
      v38 = World::PickWithoutGround(
              &g_kWorld,
              &v1->m_kCameraRayOrigin,
              &v1->m_kCameraRayDir,
              (Char **)&hMinihouse,
              (DropItem **)&Point.y,
              (unsigned __int16 *)&hMiniHouseHandle);
      if ( *(_BYTE *)(g_pkMouse + 129) )
      {
        if ( ChatDisplayWin2::IsDuringEdit(v1->m_pkChatDisplayWin) == 1 && !ChatBoardFlex::ms_bClickLog )
          ChatDisplayWin2::ShowChatEditBox(v1->m_pkChatDisplayWin, 0);
        if ( GuildListTask::GetGuildListWin() )
        {
          v39 = GuildListTask::GetGuildListWin();
          if ( (unsigned __int8)((int (*)(void))v39->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)() == 1 )
          {
            v40 = GuildListTask::GetGuildListWin();
            GuildListWin::EditKillForus(v40);
          }
        }
        if ( GuildTask::GetGuildTournamnetBaseWin() )
        {
          v41 = GuildTask::GetGuildTournamnetBaseWin();
          if ( (unsigned __int8)((int (*)(void))v41->m_pkGTRequestListWin->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)() == 1 )
          {
            v42 = GuildTask::GetGuildTournamnetBaseWin();
            GTRequestListWin::EditKillForus(v42->m_pkGTRequestListWin);
          }
        }
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMHEmotionWin->baseclass_0.baseclass_0.baseclass_0);
      }
    }
    switch ( v38 )
    {
      case 1:
        g_pkMouseOvereMob = hMinihouse;
        if ( dword_B70350 >= 1 )
        {
          v43 = v1->m_pkExpeditionWin;
          if ( v43 )
            ExpeditionWin::ClickReset(v43);
        }
        if ( Char::IsResource((Char *)hMinihouse) )
        {
          switch ( MainChar::GetObjType((MainChar *)g_pkMainChar, (Char *)hMinihouse) )
          {
            case 4:
            case 6:
            case 7:
              v70 = 7;
              goto LABEL_148;
            case 5:
            case 8:
              v70 = 8;
              goto LABEL_148;
            default:
              goto LABEL_149;
          }
          goto LABEL_149;
        }
        if ( Char::IsNPC((Char *)hMinihouse) )
        {
          if ( Char::IsLinkGate((Char *)hMinihouse)
            || (unsigned __int8)(*(int (**)(void))(*(_DWORD *)hMinihouse + 32))()
            && ((v44 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(*(_WORD *)(hMinihouse + 942), 1)->Type,
                 v44 == 24)
             || v44 == 29) )
          {
LABEL_149:
            if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)hMinihouse + 32))() && !Char::IsNPC((Char *)hMinihouse) )
              g_pkMouseOvereMob = hMinihouse;
            goto LABEL_202;
          }
          v70 = 6;
        }
        else
        {
          if ( MainChar::GetTargetType((MainChar *)g_pkMainChar, (Char *)hMinihouse) != 3 )
            goto LABEL_149;
          v45 = QuestHelperMgr::GetInstance();
          if ( v45 )
          {
            if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)hMinihouse + 32))() )
            {
              QuestHelperMgr::AddConditionToolTip(v45, (Char *)hMinihouse);
              v46 = QuestHelperMgr::GetConditionText(v45);
              v47 = (int)(v46 + 1);
              do
                v48 = *v46++;
              while ( v48 );
              if ( v46 != (const char *)v47 )
              {
                v49 = Char::GetHeightPos((Char *)hMinihouse, (NiPoint3 *)&result.g);
                *(_DWORD *)v50 = LODWORD(v49->x);
                *(_QWORD *)&v50[4] = *(_QWORD *)&v49->y;
                QuestHelperMgr::MoveConditionToolTip(v45, *(NiPoint3 *)v50);
                ((void (*)(void))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor)();
              }
            }
          }
          v70 = 1;
        }
LABEL_148:
        Cursor::SetCursor(v70);
        goto LABEL_149;
      case 3:
        if ( *(_BYTE *)(g_pkMouse + 129) )
        {
          v69 = 3;
          goto LABEL_201;
        }
        Cursor::SetCursor((Cursor::Type)2);
        g_pkMouseOverDropItem = Point.y;
        goto LABEL_202;
      case 0:
      case 4:
        if ( nowState == 2
          && !(unsigned __int8)((int (*)(void))v1->m_pkMHRepairWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          Cursor::SetCursor((Cursor::Type)11);
          return;
        }
        v51 = v1->m_pkChatDisplayWin;
        v52 = 0;
        if ( !v51 || pkChar )
          goto LABEL_165;
        v53 = (unsigned __int8)ChatDisplayWin2::GetCursorStateOnPanel(v51) - 1;
        if ( v53 )
        {
          if ( v53 != 1 )
            goto LABEL_165;
          v71 = 3;
        }
        else
        {
          v71 = 2;
        }
        Cursor::SetCursor(v71);
        v52 = 1;
LABEL_165:
        v54 = v1->m_pkStatusBuffWin;
        if ( !v54 || pkChar )
          goto LABEL_172;
        v55 = (unsigned __int8)StatusBuffWin::GetCursorStateOnPanel(v54) - 1;
        if ( v55 )
        {
          if ( v55 != 1 )
            goto LABEL_172;
          v72 = 3;
        }
        else
        {
          v72 = 2;
        }
        Cursor::SetCursor(v72);
        v52 = 1;
LABEL_172:
        v56 = v1->m_pkStatusDBuffWin;
        if ( !v56 || pkChar )
          goto LABEL_179;
        v57 = (unsigned __int8)StatusBuffWin::GetCursorStateOnPanel(v56) - 1;
        if ( v57 )
        {
          if ( v57 != 1 )
            goto LABEL_179;
          v73 = 3;
        }
        else
        {
          v73 = 2;
        }
        Cursor::SetCursor(v73);
        v52 = 1;
LABEL_179:
        v58 = v1->m_pkStatusChargedBuffWin;
        if ( !v58 || pkChar )
          goto LABEL_186;
        v59 = (unsigned __int8)StatusBuffWin::GetCursorStateOnPanel(v58) - 1;
        if ( v59 )
        {
          if ( v59 != 1 )
            goto LABEL_186;
          v74 = 3;
        }
        else
        {
          v74 = 2;
        }
        Cursor::SetCursor(v74);
        v52 = 1;
LABEL_186:
        if ( dword_B70350 >= 1 )
        {
          v60 = v1->m_pkExpeditionWin;
          if ( v60 )
            ExpeditionWin::ClickReset(v60);
        }
        if ( v52 )
          goto LABEL_202;
        v61 = (ChatDisplayWin *)v1->m_pkSysMsgDisplayWin;
        if ( !v61 || pkChar )
          goto LABEL_196;
        v62 = (unsigned __int8)ChatDisplayWin::GetCursorStateOnPanel(v61) - 1;
        if ( !v62 )
        {
          v69 = 2;
          goto LABEL_201;
        }
        if ( v62 == 1 )
        {
          v69 = 3;
          goto LABEL_201;
        }
LABEL_196:
        if ( PgWin::ms_bCursorSetted )
          goto LABEL_202;
        if ( nowState != 2
          || (unsigned __int8)((int (*)(void))v1->m_pkMHRepairWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          v69 = 0;
        else
          v69 = 11;
        goto LABEL_201;
      default:
        goto LABEL_202;
    }
  }
  Cursor::SetCursor((Cursor::Type)5);
  *(_DWORD *)v36 = LODWORD(v1->m_kCameraRayDir.x);
  *(_QWORD *)&v36[4] = *(_QWORD *)&v1->m_kCameraRayDir.y;
  *(_DWORD *)v37 = LODWORD(v1->m_kCameraRayOrigin.x);
  *(_QWORD *)&v37[4] = *(_QWORD *)&v1->m_kCameraRayOrigin.y;
  World::GetAdvGroundPos(&g_kWorld, *(NiPoint3 *)v37, *(NiPoint3 *)v36, (NiPoint3 *)&result.g, (float *)&pkChar);
  World::SetMagicCirclePos(&g_kWorld, (NiPoint3 *)&result.g);
  World::SetMagicCircleEnable(&g_kWorld, 1);
LABEL_202:
  if ( PgWin::ms_kbRbutReleased.m_iBool >= 1 )
  {
    if ( !byte_A9872C )
    {
      Point.y = 65535;
      if ( World::Pick(
             &g_kWorld,
             &v1->m_kCameraRayOrigin,
             &v1->m_kCameraRayDir,
             &pkChar,
             (NiPoint3 *)&result.g,
             (DropItem **)&hMinihouse,
             (unsigned __int16 *)&Point.y) == 1 )
      {
        GameFrameWork::OnPickCharWithRBut(v1, pkChar);
        if ( PgWin::ms_kbRbutReleased.m_iBool )
          --PgWin::ms_kbRbutReleased.m_iBool;
      }
    }
    byte_A9872C = 0;
  }
  if ( *(_BYTE *)(g_pkKeyboard + 36) & 0x20
    && (v63 = g_pkItemInfoWin->m_pkItemInfo,
        (unsigned __int8)((int (*)(void))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)())
    && v63
    && !g_pkItemInfoWin->m_pkItemInfo->Type
    && (v64 = g_pkItemInfoWin->m_pkItem) != 0
    && (unsigned __int8)((int (*)(void))v64->baseclass_0.vfptr[1].__vecDelDtor)() == 5 )
  {
    v65 = ((int (*)(void))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v66 = ((int (*)(void))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + v65;
    v67 = ((int (*)(void))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    ((void (__stdcall *)(int, int))v1->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v66,
      v67);
    ((void (*)(void))v1->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)();
    GameFrameWork::OnOpenEnchantGemToolTip(v1, g_pkItemInfoWin->m_pkItem);
  }
  else
  {
    GameFrameWork::OnCloseEnchantGemToolTip(v1);
  }
}
// A9816C: using guessed type int g_pkKeyboard;
// A98170: using guessed type int g_pkMouse;
// A9872C: using guessed type char byte_A9872C;
// A98738: using guessed type int dword_A98738;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A99E7E: using guessed type bool ChatBoardFlex__ms_bClickLog;
// AA2510: using guessed type int g_ClickedMiniHouseBD;
// AA2720: using guessed type int g_pkMouseOvereMob;
// AA3CF8: using guessed type int g_pkMouseOverDropItem;
// AA5112: using guessed type int dword_AA5112;
// AA5144: using guessed type __int16 word_AA5144;
// B30F24: using guessed type int dword_B30F24;
// B30F28: using guessed type int dword_B30F28;
// B30F2C: using guessed type int dword_B30F2C;
// B70330: using guessed type bool PgWin__ms_bCursorSetted;
// B70344: using guessed type int dword_B70344;
// B70350: using guessed type int dword_B70350;
// B70368: using guessed type int dword_B70368;

//----- (0048EAE0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMHPopupMenuWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  mhInfoWin *v2; // edi@1
  int v3; // eax@1
  const char *v4; // eax@1
  mhInfoWin *v5; // eax@1
  int v6; // eax@2
  PopupMenu *v7; // eax@11
  PopupMenu *v8; // eax@11
  char v9; // [sp+7h] [bp-2Dh]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+8h] [bp-2Ch]@1
  unsigned int v11; // [sp+24h] [bp-10h]@1
  int v12; // [sp+30h] [bp-4h]@1
  int v13; // [sp+34h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  PopupMenuWin::Clear(this->m_pkPopupMenuWin);
  v2 = v1->m_pkMHInfoWin;
  v3 = SlideListWin::GetCurSelIndex(v2->m_GuestNameList);
  v4 = SlideListWin::GetText(v2->m_GuestNameList, v3, 0);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v4, strlen(v4));
  v5 = v1->m_pkMHInfoWin;
  v12 = 0;
  if ( v5->m_FullRoomMakerName.baseclass_0._Mysize )
  {
    v6 = (int)&v5->m_FullRoomMakerName;
    if ( *(_DWORD *)(v6 + 20) >= 0x10u )
      v6 = *(_DWORD *)v6;
  }
  else
  {
    v6 = ((int (__thiscall *)(PgWinText *))v5->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v5->m_pkTextFieldWin[0]);
  }
  if ( !std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
          &thisa,
          0,
          thisa.baseclass_0._Mysize,
          (const char *)v6,
          strlen((const char *)v6))
    || (v9 = 1, dword_AA501C != 2) )
    v9 = 0;
  v12 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v9 )
  {
    v7 = PopupMenuTemplate::GetmhUI_GuestListKickGuestMenu();
    PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v7);
    v8 = PopupMenuTemplate::GetCancelMenu();
    PopupMenuWin::AddMenu(v1->m_pkPopupMenuWin, v8);
    PopupMenuWin::FinishMenu(v1->m_pkPopupMenuWin, 0);
    ((void (__stdcall *)(int, int))v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}
// A85C00: using guessed type int __security_cookie;
// AA501C: using guessed type int dword_AA501C;

//----- (0048EC80) --------------------------------------------------------
void __thiscall GameFrameWork::OpenWingStonePlacePopup(GameFrameWork *this)
{
  GameFrameWork *v1; // ebx@1
  unsigned __int16 *v2; // eax@1
  Item *v3; // eax@1
  unsigned int v4; // edi@3
  unsigned __int16 v5; // si@6
  char *v6; // eax@7
  int v7; // ebx@7
  char *v8; // eax@8
  PopupMenu *v9; // eax@8
  PopupMenuWin *v10; // ecx@8
  char *v11; // eax@9
  int v12; // ebx@10
  int v13; // esi@10
  int v14; // eax@11
  int v15; // ecx@14
  int v16; // eax@17
  char *v17; // edx@17
  char v18; // cl@18
  char *v19; // eax@19
  char *v20; // edx@19
  char v21; // cl@20
  unsigned int v22; // eax@21
  void *v23; // edi@21
  char v24; // cl@22
  PopupMenuWin *v25; // ecx@27
  unsigned int v26; // [sp-14h] [bp-D0h]@9
  char *v27; // [sp-10h] [bp-CCh]@9
  unsigned __int16 v28; // [sp-Ch] [bp-C8h]@7
  int i; // [sp+4h] [bp-B8h]@3
  GameFrameWork *v30; // [sp+8h] [bp-B4h]@1
  char *v31; // [sp+Ch] [bp-B0h]@4
  unsigned int v32; // [sp+10h] [bp-ACh]@2
  __int16 v33; // [sp+74h] [bp-48h]@2
  char v34; // [sp+76h] [bp-46h]@2
  char acText[32]; // [sp+78h] [bp-44h]@17
  char acText2[32]; // [sp+98h] [bp-24h]@19
  unsigned int v37; // [sp+B8h] [bp-4h]@1
  int v38; // [sp+BCh] [bp+0h]@1

  v37 = (unsigned int)&v38 ^ __security_cookie;
  v1 = this;
  v30 = this;
  PopupMenuWin::Clear(this->m_pkPopupMenuWin);
  v2 = (unsigned __int16 *)ItemInfoTab::GetByInxName("GoddessWing");
  v3 = Inventory::GetItemByID(&g_kInventory, *v2);
  if ( v3 )
  {
    memcpy(&v32, &v3->m_kStruct, 0x64u);
    v33 = *(_WORD *)((char *)&v3->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v34 = BYTE3(v3->m_kStruct.itemattr.binditem.portal[9].y);
    if ( (unsigned __int8)(v32 >> 16) )
    {
      v4 = 0;
      i = 0;
      if ( (unsigned __int8)(v32 >> 16) )
      {
        v31 = (char *)&v32 + 3;
        while ( 1 )
        {
          v5 = *(_WORD *)v31;
          if ( *(_WORD *)v31 == -1 )
          {
            v6 = TextData::Get(0x9BEBE5D9u);
            v7 = v4 + 1;
            v28 = -1;
            if ( !v6 )
            {
              v8 = fs(" %d. Empty Space");
              v9 = PopupMenuTemplate::GetWingStonePositionList(v4, v8, v5);
              v10 = v30->m_pkPopupMenuWin;
              goto LABEL_25;
            }
            v11 = TextData::Get(0x4E3E2E25u);
            v27 = fs(v11);
            v26 = v4;
          }
          else
          {
            v12 = *(_WORD *)v31;
            v13 = ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
            if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable
                                                                     + 16))(
                                    ITableBase<MapInfo_MapInfoTab>::ms_pkTable,
                                    *(_WORD *)v31) )
            {
              if ( (unsigned __int16)v12 <= *(_WORD *)(v13 + 200) )
              {
                v15 = *(_DWORD *)(v13 + 196);
                if ( *(_DWORD *)(v15 + 4 * v12) )
                  v14 = *(_DWORD *)(v15 + 4 * v12);
                else
                  v14 = 0;
              }
              else
              {
                v14 = 0;
              }
            }
            else
            {
              v14 = 0;
            }
            v16 = v14 + 14;
            v17 = &acText[-v16];
            do
            {
              v18 = *(_BYTE *)v16;
              v17[v16] = *(_BYTE *)v16;
              ++v16;
            }
            while ( v18 );
            v7 = v4 + 1;
            v19 = fs(" %d. ");
            v20 = (char *)(acText2 - v19);
            do
            {
              v21 = *v19;
              v19[(_DWORD)v20] = *v19;
              ++v19;
            }
            while ( v21 );
            v22 = strlen(acText) + 1;
            v23 = &acText[31];
            do
            {
              v24 = *((_BYTE *)v23 + 1);
              v23 = (char *)v23 + 1;
            }
            while ( v24 );
            memcpy(v23, acText, 4 * (v22 >> 2));
            v28 = *(_WORD *)v31;
            memcpy((char *)v23 + 4 * (v22 >> 2), &acText[4 * (v22 >> 2)], v22 & 3);
            v27 = acText2;
            v26 = i;
          }
          v9 = PopupMenuTemplate::GetWingStonePositionList(v26, v27, v28);
          v10 = v30->m_pkPopupMenuWin;
LABEL_25:
          PopupMenuWin::AddMenu(v10, v9);
          v31 += 10;
          i = v7;
          if ( v7 >= BYTE2(v32) )
          {
            v1 = v30;
            break;
          }
          v4 = v7;
        }
      }
    }
    v25 = v1->m_pkPopupMenuWin;
    if ( v25->m_dwMenuCount )
    {
      PopupMenuWin::FinishMenu(v25, 0);
      ((void (__stdcall *)(int, int))v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        PgWin::ms_iMsX.x,
        PgWin::ms_iMsY);
      PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      PopupMenuWin::Clear(v25);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (0048EEF0) --------------------------------------------------------
CursorState *__cdecl Singleton<CursorState>::getInstance()
{
  CursorState *result; // eax@1
  void *v1; // eax@2

  result = (CursorState *)Singleton<CursorState>::m_pInstance;
  if ( !Singleton<CursorState>::m_pInstance )
  {
    v1 = operator new(8u);
    if ( v1 )
    {
      CursorState::CursorState(result);
      Singleton<CursorState>::m_pInstance = (int)result;
    }
    else
    {
      result = 0;
      Singleton<CursorState>::m_pInstance = 0;
    }
  }
  return result;
}
// A977A8: using guessed type int Singleton_CursorState___m_pInstance;

//----- (0048EF70) --------------------------------------------------------
MapInfo *__cdecl IIDTableBase<MapInfo_MapInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  MapInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 16))(
                          ITableBase<MapInfo_MapInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(MapInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (0048EFC0) --------------------------------------------------------
NiPoint3 *__thiscall NiCamera::GetWorldDirection(NiCamera *this, NiPoint3 *result)
{
  NiPoint3 *v2; // eax@1

  v2 = result;
  result->x = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][0];
  result->y = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
  result->z = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
  return v2;
}

//----- (0048EFE0) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetDirToChar(Char *this, NiPoint3 *result, Char *pkChar)
{
  Char *v3; // esi@1
  NiPoint3 *v4; // eax@2
  float v5; // edx@2
  float v6; // ecx@2
  float v7; // edx@4
  float v8; // ecx@4
  float v9; // ecx@5
  float v10; // edx@5
  NiPoint3 kMyPos; // [sp+8h] [bp-30h]@3
  NiPoint3 kToPos; // [sp+14h] [bp-24h]@3
  NiPoint3 kMyDir; // [sp+20h] [bp-18h]@1
  float v14; // [sp+2Ch] [bp-Ch]@3
  float v15; // [sp+30h] [bp-8h]@3
  float v16; // [sp+34h] [bp-4h]@3
  float pkChara; // [sp+44h] [bp+Ch]@3
  float pkCharb; // [sp+44h] [bp+Ch]@3

  v3 = this;
  ((void (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr[6].__vecDelDtor)(&kMyDir);
  if ( pkChar )
  {
    ((void (__thiscall *)(Char *, NiPoint3 *))v3->baseclass_0.vfptr[6].SetAbStateProperty)(v3, &kMyPos);
    ((void (__thiscall *)(Char *, NiPoint3 *))pkChar->baseclass_0.vfptr[6].SetAbStateProperty)(pkChar, &kToPos);
    v14 = kToPos.x - kMyPos.x;
    v15 = kToPos.y - kMyPos.y;
    v16 = kToPos.z - kMyPos.z;
    pkChara = v15 * v15 + v14 * v14 + v16 * v16;
    pkCharb = sqrt(pkChara);
    v4 = result;
    if ( pkCharb >= 1.0 )
    {
      v9 = v15;
      result->x = v14;
      v10 = v16;
      result->y = v9;
      result->z = v10;
    }
    else
    {
      v7 = kMyDir.y;
      LODWORD(result->x) = (_DWORD)kMyDir.x;
      v8 = kMyDir.z;
      result->y = v7;
      result->z = v8;
    }
  }
  else
  {
    v4 = result;
    v5 = kMyDir.y;
    LODWORD(result->x) = (_DWORD)kMyDir.x;
    v6 = kMyDir.z;
    result->y = v5;
    result->z = v6;
  }
  return v4;
}

//----- (0048F0D0) --------------------------------------------------------
void __thiscall GameFrameWork::sRideOffValue::SetMove(GameFrameWork::sRideOffValue *this, NiPoint3 *kGroundPos, bool bViewPoint)
{
  this->m_kSkillID = -1;
  this->m_pkTarget = 0;
  this->m_kPoint.x = 0;
  this->m_kPoint.y = 0;
  LODWORD(this->m_kGroundPos.x) = (_DWORD)NiPoint3::ZERO.x;
  this->m_kGroundPos.y = NiPoint3::ZERO.y;
  this->m_kGroundPos.z = NiPoint3::ZERO.z;
  this->m_bViewPoint = 0;
  this->m_kGroundPos.x = kGroundPos->x;
  this->m_kGroundPos.y = kGroundPos->y;
  this->m_kGroundPos.z = kGroundPos->z;
  this->m_bViewPoint = bViewPoint;
}

//----- (0048F130) --------------------------------------------------------
void __thiscall mhMouseControlWin::SetCtrlDown(mhMouseControlWin *this, bool b)
{
  mhMouseControlWin *v2; // esi@1

  v2 = this;
  this->m_bCtrlDown = b;
  mhMouseControlWin::ShowBtn(this, AllLeft, b);
  mhMouseControlWin::ShowBtn(v2, AllRight, b);
  mhMouseControlWin::ShowBtn(v2, CtrlNormal, 1);
}

//----- (0048F170) --------------------------------------------------------
void __thiscall GTRequestListWin::EditKillForus(GTRequestListWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (0048F190) --------------------------------------------------------
void __thiscall ChatDisplayWin2::ShowChatEditBox(ChatDisplayWin2 *this, bool b)
{
  ChatDisplayWin2 *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@1

  v2 = this;
  v3 = this->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( b )
  {
    ((void (__stdcall *)(_DWORD))v3)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkChatKorMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (*)(void))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v3)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkChatKorMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(0);
  }
}

//----- (0048F230) --------------------------------------------------------
void __thiscall GuildListWin::EditKillForus(GuildListWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (0048F250) --------------------------------------------------------
NiPointer<MHDiceGameTask> *__cdecl MHDiceGameTask::GetDiceGameTask(NiPointer<MHDiceGameTask> *result)
{
  int v1; // eax@1

  v1 = MHDiceGameTask::ms_spMHDiceGameTask;
  result->m_pObject = (MHDiceGameTask *)MHDiceGameTask::ms_spMHDiceGameTask;
  if ( v1 )
    InterlockedIncrement((volatile LONG *)(v1 + 4));
  return result;
}
// B6797C: using guessed type int MHDiceGameTask__ms_spMHDiceGameTask;

//----- (0048F280) --------------------------------------------------------
void __thiscall World::SetMoveTargetPointPos(World *this, NiPoint3 kPos)
{
  World *v2; // esi@1
  NiNode *v3; // eax@2

  v2 = this;
  if ( this->m_spMoveTargetPointNode.m_pObject )
  {
    World::GetAdvGroundPos(this, kPos.x, kPos.y, &kPos);
    v3 = v2->m_spMoveTargetPointNode.m_pObject;
    LODWORD(v3->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
    v3->baseclass_0.m_kLocal.m_Translate.y = kPos.y;
    v3->baseclass_0.m_kLocal.m_Translate.z = kPos.z;
    NiAVObject::Update(&v2->m_spMoveTargetPointNode.m_pObject->baseclass_0, 0.0, 1);
  }
}

//----- (0048F2E0) --------------------------------------------------------
void __thiscall World::ShowMoveTargetPoint(World *this, NiPoint3 kPos)
{
  World *v2; // esi@1
  NiNode *v3; // eax@1
  NiNode *v4; // eax@2
  NiPoint3 kTargetPos; // [sp+10h] [bp-Ch]@1

  v2 = this;
  v3 = this->m_spMoveTargetPointNode.m_pObject;
  v3->baseclass_0.m_uFlags &= 0xFFFEu;
  LODWORD(kTargetPos.x) = (_DWORD)kPos.x;
  kTargetPos.y = kPos.y;
  kTargetPos.z = kPos.z;
  if ( v3 )
  {
    World::GetAdvGroundPos(this, kPos.x, kPos.y, &kTargetPos);
    v4 = v2->m_spMoveTargetPointNode.m_pObject;
    LODWORD(v4->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kTargetPos.x;
    v4->baseclass_0.m_kLocal.m_Translate.y = kTargetPos.y;
    v4->baseclass_0.m_kLocal.m_Translate.z = kTargetPos.z;
    NiAVObject::Update(&v2->m_spMoveTargetPointNode.m_pObject->baseclass_0, 0.0, 1);
  }
}

//----- (0048F360) --------------------------------------------------------
MiniHouseObjAni *__cdecl ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::GetByIndex(unsigned int uiIndex)
{
  return (MiniHouseObjAni *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 4),
                              uiIndex);
}
// A97E0C: using guessed type int ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab___ms_pkTable;

//----- (0048F380) --------------------------------------------------------
BasicInfoLinkType __cdecl BasicInfoLinkTab::GetbyCType(BIL_C_Type eType, char *pkCValue)
{
  BasicInfoLinkType result; // eax@2
  int v3; // eax@3
  unsigned int v4; // edi@4
  unsigned int v5; // esi@6
  void *v6; // eax@7

  if ( pkCValue )
  {
    v3 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
    if ( v3 )
      v4 = *(_DWORD *)(v3 + 40);
    else
      v4 = 0;
    v5 = 0;
    if ( v4 )
    {
      while ( 1 )
      {
        v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4), v5);
        if ( v6 )
        {
          if ( *((_DWORD *)v6 + 2) == eType && !strcmp((const char *)v6 + 12, pkCValue) )
            break;
        }
        ++v5;
        if ( v5 >= v4 )
          goto LABEL_11;
      }
      result = *((_DWORD *)v6 + 1);
    }
    else
    {
LABEL_11:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (0048F410) --------------------------------------------------------
MiniHouseObjAni *__cdecl MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(unsigned __int16 ItemID, unsigned int uiAniGroupID, unsigned int uiGroupIndex)
{
  int v3; // eax@1
  unsigned int v4; // edi@2
  int v5; // ebx@4
  unsigned int v6; // esi@4
  void *v7; // eax@5

  v3 = *(_DWORD *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 56);
  if ( v3 )
    v4 = *(_DWORD *)(v3 + 40);
  else
    v4 = 0;
  v5 = 0;
  v6 = 0;
  if ( !v4 )
    return 0;
  while ( 1 )
  {
    v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 4), v6);
    if ( *((_WORD *)v7 + 1) != ItemID || *(_WORD *)((char *)v7 + 5) != uiAniGroupID )
      goto LABEL_9;
    if ( v5 == uiGroupIndex )
      return (MiniHouseObjAni *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 4),
                                  v6);
    ++v5;
LABEL_9:
    ++v6;
    if ( v6 >= v4 )
      return 0;
  }
}
// A97E0C: using guessed type int ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab___ms_pkTable;

//----- (0048F480) --------------------------------------------------------
MiniHouseFurniture *__cdecl MiniHouseFuritureInfoTab::GetObjByName(char *acName)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  void *v4; // eax@5
  MiniHouseFurniture *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      v4 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable + 4),
             v3);
      if ( !_mbscmp((const char *)v4 + 2, acName) )
        break;
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (MiniHouseFurniture *)CDataReader::GetRecord(
                                     (CDataReader *)(ITableBase<MiniHouseFurniture_MiniHouseFuritureInfoTab>::ms_pkTable
                                                   + 4),
                                     v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97E14: using guessed type int ITableBase_MiniHouseFurniture_MiniHouseFuritureInfoTab___ms_pkTable;

//----- (0048F4F0) --------------------------------------------------------
bool __cdecl std::operator__<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, const char *_Right)
{
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           _Left,
           0,
           _Left->baseclass_0._Mysize,
           _Right,
           strlen(_Right)) != 0;
}

//----- (0048F530) --------------------------------------------------------
stMINIHOUSEINFO *__thiscall CGuildMonster::GetGuildEumFromMob(CMiniHouseMgr *this, unsigned __int16 kHandle)
{
  CMiniHouseMgr *v2; // esi@1
  stMINIHOUSEINFO *result; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *iter; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    &this->m_mapInfo.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&iter,
    &kHandle);
  if ( iter == v2->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    result = 0;
  else
    result = iter->_Myval.baseclass_0.second;
  return result;
}

//----- (0048F560) --------------------------------------------------------
void __thiscall PartyWinInterface::OpenPopMenuParty(PartyWinInterface *this, char *pcName)
{
  signed int v2; // ebx@3
  MiniPartyWin **v3; // edi@3
  signed int v4; // edi@8
  PartyWin **v5; // esi@8
  PartyWinInterface *v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( this->m_apkPartyWin[0] )
  {
    if ( this->isMiniPartyWinShow )
    {
      v2 = 0;
      v3 = this->m_apkMiniPartyWin;
      while ( strcmp(MiniPartyWin::GetMemberName(*v3), pcName) )
      {
        ++v2;
        ++v3;
        if ( v2 >= 4 )
          return;
      }
      v6->m_apkMiniPartyWin[v2]->m_bOpenPopUp = 1;
    }
    else
    {
      v4 = 0;
      v5 = this->m_apkPartyWin;
      while ( strcmp(PartyWin::GetMemberName(*v5), pcName) )
      {
        ++v4;
        ++v5;
        if ( v4 >= 4 )
          return;
      }
      v6->m_apkPartyWin[v4]->m_bOpenPopUp = 1;
    }
  }
}

//----- (0048F660) --------------------------------------------------------
void __thiscall GuildJoinReqTask::SetTargetID(GuildJoinReqTask *this, char *pcName)
{
  char *v2; // eax@1
  char *v3; // ecx@1
  int v4; // eax@1
  char v5; // dl@2

  v2 = this->m_acTargetID;
  *(_DWORD *)&this->m_acTargetID[0] = 0;
  *(_DWORD *)&this->m_acTargetID[4] = 0;
  *(_DWORD *)&this->m_acTargetID[8] = 0;
  *(_DWORD *)&this->m_acTargetID[12] = 0;
  this->m_acTargetID[16] = 0;
  v3 = pcName;
  v4 = v2 - pcName;
  do
  {
    v5 = *v3;
    v3[v4] = *v3;
    ++v3;
  }
  while ( v5 );
}

//----- (0048F6B0) --------------------------------------------------------
void __thiscall GameFrameWork::ClientSecurity(GameFrameWork *this)
{
  ItemInfoTab::CheckCRC();
  ActSkillInfoTab::CheckCRC();
  if ( GameFrameWork::_isCheating )
    terminate();
}
// A9873C: using guessed type bool GameFrameWork___isCheating;

//----- (0048F6D0) --------------------------------------------------------
void __thiscall GameFrameWork::KarisDivide_OK(GameFrameWork *this)
{
  MakeKarisWin::StartEffectt(this->m_pkMakeKarisWin);
}

//----- (0048F6F0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenChargedItemListWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkChargedItemListWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkChargedItemListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkChargedItemListWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkChargedItemListWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0048F740) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenChatEditWin(GameFrameWork *this, const char *szText)
{
  GameFrameWork *v2; // esi@1
  ChatDisplayWin2 *v3; // ecx@5

  v2 = this;
  if ( (PgWin *)this->m_pkPrivateStoreWin == PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    || (PgWin *)v2->m_pkDivideWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    && (PgWin *)v2->m_pkMoneyWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    && (PgWin *)v2->m_pkHolyRewardMoneyWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr) )
  {
    v3 = v2->m_pkChatDisplayWin;
    if ( v3 )
    {
      if ( !ChatDisplayWin2::IsDuringEdit(v3) )
        ChatDisplayWin2::ChatStart(v2->m_pkChatDisplayWin, szText);
    }
  }
}

//----- (0048F7C0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenSlashStartChat(GameFrameWork *this, const char *szText)
{
  GameFrameWork *v2; // esi@1
  ChatDisplayWin2 *v3; // ecx@5

  v2 = this;
  if ( (PgWin *)this->m_pkPrivateStoreWin == PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    || (PgWin *)v2->m_pkDivideWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    && (PgWin *)v2->m_pkMoneyWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    && (PgWin *)v2->m_pkHolyRewardMoneyWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr) )
  {
    v3 = v2->m_pkChatDisplayWin;
    if ( v3 )
    {
      if ( !ChatDisplayWin2::IsDuringEdit(v3) )
        ChatDisplayWin2::ChatStart(v2->m_pkChatDisplayWin, szText);
    }
  }
}

//----- (0048F840) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenAutoWhisperChat(GameFrameWork *this, const char *szText)
{
  GameFrameWork *v2; // esi@1
  ChatDisplayWin2 *v3; // ecx@5

  v2 = this;
  if ( (PgWin *)this->m_pkPrivateStoreWin == PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    || (PgWin *)v2->m_pkDivideWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    && (PgWin *)v2->m_pkMoneyWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    && (PgWin *)v2->m_pkHolyRewardMoneyWin != PgWinMgr::GetTopWin(&Pgg_kWinMgr) )
  {
    v3 = v2->m_pkChatDisplayWin;
    if ( v3 )
    {
      if ( !ChatDisplayWin2::IsDuringEdit(v3) )
        ChatDisplayWin2::ChatStart(v2->m_pkChatDisplayWin, szText);
    }
  }
}

//----- (0048F8C0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseCharInfoWin(GameFrameWork *this)
{
  if ( this->m_pkCharInfoWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (0048F8E0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenKQuestTimeWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkKQuestTimeWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkKQuestTimeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkKQuestTimeWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkKQuestTimeWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0048F930) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenShortCutSubWin(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  PgWin **v2; // esi@2
  unsigned int v3; // edi@2
  ShortCutWin *v4; // eax@12
  ShortCutWin *v5; // eax@17
  signed int v6; // ebx@18
  int v7; // esi@20
  int v8; // edi@22
  int v9; // ebx@22
  int v10; // ST48_4@22
  int v11; // eax@22
  int v12; // eax@22
  ShortCutWin *v13; // ecx@24
  NiRefObjectVtbl *v14; // esi@25
  int v15; // eax@25
  int v16; // esi@26
  int v17; // edi@28
  int v18; // ebx@28
  int v19; // eax@28
  int v20; // ebx@28
  int v21; // eax@28
  GameFrameWork *v22; // [sp+44h] [bp-10h]@1
  signed int v23; // [sp+4Ch] [bp-8h]@20
  signed int v24; // [sp+4Ch] [bp-8h]@26
  signed int uVerticalSortNum; // [sp+50h] [bp-4h]@17
  signed int uVerticalSortNuma; // [sp+50h] [bp-4h]@24

  v1 = this;
  v22 = this;
  if ( ShortCutWin::m_uiShortcutSubWinIndex == 4 )
  {
    v2 = (PgWin **)this->m_pkShortCutSubWinV;
    v3 = ShortCutWin::m_uiShortcutSubWinIndex;
    do
    {
      if ( BYTE2((*(v2 - 5))[3].baseclass_0.m_kBound.m_fRadius) )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, *(v2 - 5));
      if ( BYTE2((*v2)[3].baseclass_0.m_kBound.m_fRadius) )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, *v2);
      ++v2;
      --v3;
    }
    while ( v3 );
    ShortCutWin::m_uiShortcutSubWinIndex = 0;
  }
  else
  {
    if ( this->m_pkShortCutSubWin[ShortCutWin::m_uiShortcutSubWinIndex]
      && this->m_pkShortCutSubWinV[ShortCutWin::m_uiShortcutSubWinIndex] )
    {
      if ( this->m_bLastShortCutSubWinDirV[ShortCutWin::m_uiShortcutSubWinIndex] )
        v4 = this->m_pkShortCutSubWinV[ShortCutWin::m_uiShortcutSubWinIndex];
      else
        v4 = this->m_pkShortCutSubWin[ShortCutWin::m_uiShortcutSubWinIndex];
      if ( v4->m_bShowFlag )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->baseclass_0.baseclass_0.baseclass_0);
      else
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->baseclass_0.baseclass_0.baseclass_0);
      v5 = v1->m_pkShortCutWin;
      uVerticalSortNum = 0;
      if ( v5->m_bShowFlag )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.0,
          1.0);
        v6 = 1;
        uVerticalSortNum = 1;
      }
      else
      {
        v6 = 1;
      }
      v7 = (int)v1->m_pkShortCutSubWin;
      v23 = 4;
      do
      {
        if ( *(_BYTE *)(*(_DWORD *)v7 + 1094) )
        {
          v8 = (unsigned __int16)uVerticalSortNum * (*(int (**)(void))(**(_DWORD **)v7 + 148))();
          (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v7 + 236))(
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            0.0,
            1.0);
          v9 = **(_DWORD **)v7;
          v10 = *(_DWORD *)v7;
          v11 = (*(int (**)(void))(**(_DWORD **)v7 + 168))();
          v12 = (*(int (__stdcall **)(int))(*(_DWORD *)v10 + 164))(v11 - v8);
          (*(void (__thiscall **)(_DWORD, int))(v9 + 308))(*(_DWORD *)v7, v12);
          ++uVerticalSortNum;
          v1 = v22;
          v6 = 1;
        }
        v7 += 4;
        v23 -= v6;
      }
      while ( v23 );
      v13 = v1->m_pkShortCutWinV;
      uVerticalSortNuma = 0;
      if ( v13->m_bShowFlag )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          1.0,
          0.0);
        v14 = v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v15 = ((int (__stdcall *)(signed int))v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(160);
        v14[77].__vecDelDtor((NiRefObject *)v1->m_pkShortCutWinV, v15);
        uVerticalSortNuma = v6;
      }
      v16 = (int)v1->m_pkShortCutSubWinV;
      v24 = 4;
      do
      {
        if ( *(_BYTE *)(*(_DWORD *)v16 + 1094) )
        {
          v17 = (unsigned __int16)uVerticalSortNuma * (*(int (**)(void))(**(_DWORD **)v16 + 144))();
          (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v16 + 236))(
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            1.0,
            0.0);
          v18 = **(_DWORD **)v16;
          v19 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v16 + 164))(160);
          (*(void (__thiscall **)(_DWORD, int))(v18 + 308))(*(_DWORD *)v16, v19);
          v20 = **(_DWORD **)v16;
          v21 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v16 + 164))(160);
          (*(void (__thiscall **)(_DWORD, int))(v20 + 308))(*(_DWORD *)v16, v21 - v17);
          ++uVerticalSortNuma;
          v6 = 1;
        }
        v16 += 4;
        v24 -= v6;
      }
      while ( v24 );
      ShortCutWin::m_uiShortcutSubWinIndex += v6;
    }
  }
}
// A99D80: using guessed type unsigned int ShortCutWin__m_uiShortcutSubWinIndex;

//----- (0048FBF0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenShortCutPanelTurn(GameFrameWork *this, ShortCutWin *targetWin, ShortCutWin *hideWin)
{
  GameFrameWork *v3; // edi@1
  signed int v4; // ebx@3
  ShortCutWin *v5; // ecx@8
  int v6; // esi@10
  int v7; // edi@12
  int v8; // ebx@12
  int v9; // ST58_4@12
  int v10; // eax@12
  int v11; // eax@12
  ShortCutWin *v12; // ecx@14
  NiRefObjectVtbl *v13; // esi@15
  int v14; // eax@15
  int v15; // esi@16
  int v16; // edi@18
  int v17; // ebx@18
  int v18; // eax@18
  int v19; // ebx@18
  int v20; // eax@18
  GameFrameWork *v21; // [sp+54h] [bp-Ch]@1
  signed int v22; // [sp+5Ch] [bp-4h]@10
  signed int v23; // [sp+5Ch] [bp-4h]@16
  signed int uVerticalSortNum; // [sp+6Ch] [bp+Ch]@8
  signed int uVerticalSortNuma; // [sp+6Ch] [bp+Ch]@14

  v3 = this;
  v21 = this;
  if ( hideWin && targetWin )
  {
    byte_B5BB5A[0] = hideWin == this->m_pkShortCutWin;
    ShortCutWin::SizeBtnPosToStatus(targetWin);
    v4 = 1;
    if ( hideWin->m_bShowFlag )
    {
      v4 = hideWin->m_uiCurPage;
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &hideWin->baseclass_0.baseclass_0.baseclass_0);
    }
    if ( targetWin->m_bShowFlag )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &targetWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &targetWin->baseclass_0.baseclass_0.baseclass_0);
      targetWin->m_uiCurPage = v4;
      ShortCutWin::ResetIconWin(targetWin);
      ShortCutWin::SetPageTextWin(targetWin);
      ShortCutWin::ReflashHotKey(targetWin);
    }
    v5 = v3->m_pkShortCutWin;
    uVerticalSortNum = 0;
    if ( v5->m_bShowFlag )
    {
      ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.0,
        1.0);
      uVerticalSortNum = 1;
    }
    v6 = (int)v3->m_pkShortCutSubWin;
    v22 = 4;
    do
    {
      if ( *(_BYTE *)(*(_DWORD *)v6 + 1094) )
      {
        v7 = (unsigned __int16)uVerticalSortNum * (*(int (**)(void))(**(_DWORD **)v6 + 148))();
        (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v6 + 236))(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.0,
          1.0);
        v8 = **(_DWORD **)v6;
        v9 = *(_DWORD *)v6;
        v10 = (*(int (**)(void))(**(_DWORD **)v6 + 168))();
        v11 = (*(int (__stdcall **)(int))(*(_DWORD *)v9 + 164))(v10 - v7);
        (*(void (__thiscall **)(_DWORD, int))(v8 + 308))(*(_DWORD *)v6, v11);
        ++uVerticalSortNum;
        v3 = v21;
      }
      v6 += 4;
      --v22;
    }
    while ( v22 );
    v12 = v3->m_pkShortCutWinV;
    uVerticalSortNuma = 0;
    if ( v12->m_bShowFlag )
    {
      ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        1.0,
        0.0);
      v13 = v3->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v14 = ((int (__stdcall *)(signed int))v3->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(160);
      v13[77].__vecDelDtor((NiRefObject *)v3->m_pkShortCutWinV, v14);
      uVerticalSortNuma = 1;
    }
    v15 = (int)v3->m_pkShortCutSubWinV;
    v23 = 4;
    do
    {
      if ( *(_BYTE *)(*(_DWORD *)v15 + 1094) )
      {
        v16 = (unsigned __int16)uVerticalSortNuma * (*(int (**)(void))(**(_DWORD **)v15 + 144))();
        (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v15 + 236))(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          1.0,
          0.0);
        v17 = **(_DWORD **)v15;
        v18 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v15 + 164))(160);
        (*(void (__thiscall **)(_DWORD, int))(v17 + 308))(*(_DWORD *)v15, v18);
        v19 = **(_DWORD **)v15;
        v20 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v15 + 164))(160);
        (*(void (__thiscall **)(_DWORD, int))(v19 + 308))(*(_DWORD *)v15, v20 - v16);
        ++uVerticalSortNuma;
      }
      v15 += 4;
      --v23;
    }
    while ( v23 );
    ShortCutWin::ReflashShortCutWin(targetWin);
  }
}

//----- (0048FE80) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenShortCutSubPanelTurn(GameFrameWork *this, ShortCutWin *targetWin, ShortCutWin *hideWin)
{
  GameFrameWork *v3; // edi@1
  ShortCutWin *v4; // ebx@2
  int v5; // esi@3
  ShortCutWin *v6; // ecx@11
  int v7; // esi@13
  int v8; // edi@15
  int v9; // ebx@15
  int v10; // ST58_4@15
  int v11; // eax@15
  int v12; // eax@15
  ShortCutWin *v13; // ecx@17
  NiRefObjectVtbl *v14; // esi@18
  int v15; // eax@18
  int v16; // esi@19
  int v17; // edi@21
  int v18; // ebx@21
  int v19; // eax@21
  int v20; // ebx@21
  int v21; // eax@21
  GameFrameWork *v22; // [sp+54h] [bp-Ch]@1
  signed int pageNum; // [sp+5Ch] [bp-4h]@6
  signed int pageNuma; // [sp+5Ch] [bp-4h]@13
  signed int pageNumb; // [sp+5Ch] [bp-4h]@19
  signed int uVerticalSortNum; // [sp+6Ch] [bp+Ch]@11
  signed int uVerticalSortNuma; // [sp+6Ch] [bp+Ch]@17

  v3 = this;
  v22 = this;
  if ( hideWin )
  {
    v4 = targetWin;
    if ( targetWin )
    {
      v5 = targetWin->m_iSubTabLevel;
      *((_BYTE *)&dword_B5BB5C + 3 * v5 + 1) = hideWin == this->m_pkShortCutSubWin[v5];
      ShortCutWin::SizeBtnPosToStatus(targetWin);
      pageNum = 1;
      if ( hideWin->m_bShowFlag )
      {
        pageNum = hideWin->m_uiCurPage;
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &hideWin->baseclass_0.baseclass_0.baseclass_0);
      }
      if ( targetWin->m_bShowFlag )
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &targetWin->baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &targetWin->baseclass_0.baseclass_0.baseclass_0);
        v3->m_bLastShortCutSubWinDirV[v5] = targetWin->m_bVerticalMode;
        targetWin->m_uiCurPage = pageNum;
        ShortCutWin::ResetIconWin(targetWin);
        ShortCutWin::SetPageTextWin(targetWin);
        ShortCutWin::ReflashHotKey(targetWin);
      }
      v6 = v3->m_pkShortCutWin;
      uVerticalSortNum = 0;
      if ( v6->m_bShowFlag )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.0,
          1.0);
        uVerticalSortNum = 1;
      }
      v7 = (int)v3->m_pkShortCutSubWin;
      pageNuma = 4;
      do
      {
        if ( *(_BYTE *)(*(_DWORD *)v7 + 1094) )
        {
          v8 = (unsigned __int16)uVerticalSortNum * (*(int (**)(void))(**(_DWORD **)v7 + 148))();
          (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v7 + 236))(
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            0.0,
            1.0);
          v9 = **(_DWORD **)v7;
          v10 = *(_DWORD *)v7;
          v11 = (*(int (**)(void))(**(_DWORD **)v7 + 168))();
          v12 = (*(int (__stdcall **)(int))(*(_DWORD *)v10 + 164))(v11 - v8);
          (*(void (__thiscall **)(_DWORD, int))(v9 + 308))(*(_DWORD *)v7, v12);
          ++uVerticalSortNum;
          v4 = targetWin;
          v3 = v22;
        }
        v7 += 4;
        --pageNuma;
      }
      while ( pageNuma );
      v13 = v3->m_pkShortCutWinV;
      uVerticalSortNuma = 0;
      if ( v13->m_bShowFlag )
      {
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          1.0,
          0.0);
        v14 = v3->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v15 = ((int (__stdcall *)(signed int))v3->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(160);
        v14[77].__vecDelDtor((NiRefObject *)v3->m_pkShortCutWinV, v15);
        uVerticalSortNuma = 1;
      }
      v16 = (int)v3->m_pkShortCutSubWinV;
      pageNumb = 4;
      do
      {
        if ( *(_BYTE *)(*(_DWORD *)v16 + 1094) )
        {
          v17 = (unsigned __int16)uVerticalSortNuma * (*(int (**)(void))(**(_DWORD **)v16 + 144))();
          (*(void (__stdcall **)(unsigned int, unsigned int, _DWORD, _DWORD))(**(_DWORD **)v16 + 236))(
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            1.0,
            0.0);
          v18 = **(_DWORD **)v16;
          v19 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v16 + 164))(160);
          (*(void (__thiscall **)(_DWORD, int))(v18 + 308))(*(_DWORD *)v16, v19);
          v20 = **(_DWORD **)v16;
          v21 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v16 + 164))(160);
          (*(void (__thiscall **)(_DWORD, int))(v20 + 308))(*(_DWORD *)v16, v21 - v17);
          ++uVerticalSortNuma;
          v4 = targetWin;
        }
        v16 += 4;
        --pageNumb;
      }
      while ( pageNumb );
      ShortCutWin::ReflashShortCutWin(v4);
    }
  }
}
// B5BB5C: using guessed type int dword_B5BB5C;

//----- (00490140) --------------------------------------------------------
void __thiscall GameFrameWork::OnReflashShortCutWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  ShortCutWin **v2; // esi@5
  signed int v3; // edi@5

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    ShortCutWin::ReflashShortCutWin(v1->m_pkShortCutWin);
  if ( (unsigned __int8)((int (*)(void))v1->m_pkShortCutWinV->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    ShortCutWin::ReflashShortCutWin(v1->m_pkShortCutWinV);
  v2 = v1->m_pkShortCutSubWinV;
  v3 = 4;
  do
  {
    if ( (unsigned __int8)((int (*)(void))(*(v2 - 5))->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      ShortCutWin::ReflashShortCutWin(*(v2 - 5));
    if ( (unsigned __int8)((int (*)(void))(*v2)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      ShortCutWin::ReflashShortCutWin(*v2);
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (00490230) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseMHInputPassWordWin(GameFrameWork *this)
{
  if ( this->m_pkMHInputPassWordWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMHInputPassWordWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490250) --------------------------------------------------------
void __thiscall GameFrameWork::CloseNpcDlgWin(GameFrameWork *this)
{
  NpcDialogWin *v1; // ecx@1

  v1 = this->m_pkNpcDlgWin;
  if ( v1 )
    NpcDialogWin::CloseDialog(v1);
}

//----- (00490270) --------------------------------------------------------
void __thiscall GameFrameWork::CloseMHInfoWin(GameFrameWork *this, bool bNoDefault)
{
  GameFrameWork *v2; // esi@1
  PgWin *v3; // ST00_4@3

  v2 = this;
  if ( this->m_pkMHCurrentWin )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, this->m_pkMHCurrentWin);
    v2->m_pkMHCurrentWin = 0;
    if ( !bNoDefault )
    {
      v3 = (PgWin *)v2->m_pkMHInfoWin;
      v2->m_pkMHCurrentWin = v3;
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
    }
  }
}

//----- (004902C0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenReportWin(GameFrameWork *this)
{
  if ( this->m_pkReportWin )
    GameFrameWork::NcReportGetReq(this);
}

//----- (004902D0) --------------------------------------------------------
bool __thiscall GameFrameWork::OpenWingStoneMapWin(GameFrameWork *this)
{
  return PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkWingStoneMapWin->baseclass_0.baseclass_0.baseclass_0) != 0;
}

//----- (004902F0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseWingStoneMapWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkWingStoneMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkWingStoneMapWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490320) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMiniPartyWin(GameFrameWork *this)
{
  PartyWinInterface::TogglePartyWin(this->m_pkPartyWinInterface);
}

//----- (00490330) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenItemMallWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkItemMallMenuWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkItemMallMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemMallMenuWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkItemMallMenuWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00490380) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenSystemWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkSystemWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  if ( v1->m_pkSystemWin )
  {
    if ( (unsigned __int8)((int (*)(void))v1->m_pkSystemWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkSystemWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkSystemWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00490410) --------------------------------------------------------
void __thiscall GameFrameWork::OnCharSelect(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  Skill::ClearLearnSkill();
  Skill::ClearLearnPassiveSkill();
  GameFrameWork::OnSaveServerShortCutDataOption(v1);
  GameFrameWork::OnSaveServerShortCutSizeOption(v1);
  GameFrameWork::OnSaveServerWindowPosOption(v1);
  GameFrameWork::OnSaveServerKeyRemappingOption(v1);
  GameFrameWork::OnSaveServerGameOption(v1);
  AbStateInfectee::ClearAbState(&g_pkMainChar->baseclass_0, 0);
  MachineOpt::SaveUserInfo();
  PgFrameWork::PostFrameMsgChange(&v1->baseclass_0, CharSelectFrameWorkID, 0);
}

//----- (00490470) --------------------------------------------------------
void __thiscall GameFrameWork::OnErrorGotoAccount(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  GameFrameWork::OnSaveServerShortCutDataOption(this);
  GameFrameWork::OnSaveServerShortCutSizeOption(v1);
  GameFrameWork::OnSaveServerWindowPosOption(v1);
  GameFrameWork::OnSaveServerKeyRemappingOption(v1);
  GameFrameWork::OnSaveServerGameOption(v1);
  Skill::ClearLearnSkill();
  Skill::ClearLearnPassiveSkill();
  AbStateInfectee::ClearAbState(&g_pkMainChar->baseclass_0, 0);
  NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
  PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
}

//----- (004904D0) --------------------------------------------------------
void __thiscall GameFrameWork::OnErrorGotoExit(GameFrameWork *this)
{
  NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
  PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
}

//----- (00490520) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenDivideWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiMsg, unsigned int uiMax, char *pcText, unsigned int uiMode)
{
  this->m_pkDivideWin->m_eMode = uiMode;
  DivideWin::Open(this->m_pkDivideWin, pkCallerWin, uiMsg, uiMax, pcText);
}

//----- (00490560) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenInputTextWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiMsg, char *pcText)
{
  InputTextWin::Open(this->m_pkInputTextWin, pkCallerWin, uiMsg, pcText);
}

//----- (00490570) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMoneyWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiOKMsg, unsigned int uiCancelMsg, char *pcText, char *pcText2)
{
  GameFrameWork *v6; // esi@1

  v6 = this;
  MoneyWin::Open(this->m_pkMoneyWin, pkCallerWin, uiOKMsg, uiCancelMsg, pcText);
  if ( pcText2 )
    MoneyWin::SetTitle2(v6->m_pkMoneyWin, pcText2);
}

//----- (004905B0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenHolyRewardMoneyWin(GameFrameWork *this, unsigned int uiOKMsg, unsigned int uiCancelMsg, char *pcText1, char *pcText2)
{
  GameFrameWork *v5; // esi@1

  v5 = this;
  if ( !PgWin::IsVisible(&this->m_pkHolyRewardMoneyWin->baseclass_0.baseclass_0.baseclass_0) )
    HolyRewardMoneyWin::Open(v5->m_pkHolyRewardMoneyWin, uiOKMsg, uiCancelMsg, pcText1, pcText2);
}

//----- (004905F0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseEnchantGemWin(GameFrameWork *this, bool bEnchantWin, bool bDelteteWin)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  if ( bEnchantWin )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkEnchantGemWin1->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEnchantGemWin2->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEnchantGemWin3->baseclass_0.baseclass_0.baseclass_0);
  }
  if ( bDelteteWin )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEnchantGemDeleteWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEnchantGemDeleteWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEnchantGemDeleteWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00490670) --------------------------------------------------------
void __thiscall GameFrameWork::CloseWeapontitleWin(GameFrameWork *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkWeaponTitleWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490690) --------------------------------------------------------
void __thiscall GameFrameWork::OpenMiniHouseInventoryWin(GameFrameWork *this)
{
  if ( this->m_pkMiniHouseInventoryWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkMiniHouseInventoryWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004906B0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseInventoryWin(GameFrameWork *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004906D0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCalculatorWin(GameFrameWork *this, PgWin *pkCallerWin, unsigned int uiMsg, unsigned int uiMax, char *pcText)
{
  CalculatorWin::Open(this->m_pkCalculatorWin, pkCallerWin, uiMsg, uiMax, pcText);
}

//----- (004906E0) --------------------------------------------------------
void __thiscall GameFrameWork::UnEquip(GameFrameWork *this, unsigned int uiEquipPos)
{
  InventoryWin::UnEquip(this->m_pkInventoryWin, uiEquipPos);
}

//----- (004906F0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenKDQuestWin(GameFrameWork *this, bool bJoin)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( this->m_pkKingDomQuest )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkKingDomQuest->baseclass_0.baseclass_0.baseclass_0);
    KingdomQuestWin::CheckButtonEnableSetting(v2->m_pkKingDomQuest);
    GameFrameWork::NcKqListRefreshReq(v2);
  }
}

//----- (00490720) --------------------------------------------------------
void __thiscall GameFrameWork::OpenQuestWin(GameFrameWork *this, bool bSelectTab, int SelectIdx)
{
  GameFrameWork *v3; // esi@1
  CQuestWin2 *v4; // ecx@1
  signed int v5; // [sp-4h] [bp-8h]@3

  v3 = this;
  v4 = this->m_pkQuestWin;
  if ( v4 )
  {
    if ( bSelectTab )
      v5 = SelectIdx;
    else
      v5 = 1;
    CQuestWin2::SelectTab(v4, v5);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00490760) --------------------------------------------------------
void __thiscall GameFrameWork::CloseQuestWin(GameFrameWork *this)
{
  if ( this->m_pkQuestWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490780) --------------------------------------------------------
void __thiscall GameFrameWork::OpenHelpWin(GameFrameWork *this)
{
  if ( this->m_pkHelpWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkHelpWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004907A0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseHelpWin(GameFrameWork *this)
{
  if ( this->m_pkHelpWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkHelpWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004907C0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenHelpWin(GameFrameWork *this, BasicInfoLinkType Type)
{
  if ( this->m_pkHelpWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkHelpWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004907E0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenPlayGuideSearchList(GameFrameWork *this, char *acUIFile)
{
  PlayGuideWin *v2; // ecx@2

  if ( acUIFile )
  {
    v2 = this->m_pkPlayGuideWin;
    if ( v2 )
      PlayGuideWin::OpenPlayGuideSearchList(v2, acUIFile);
  }
}

//----- (00490820) --------------------------------------------------------
void __thiscall GameFrameWork::CloseWingStoneWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  WingStoneWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkWingStoneWin;
  if ( v2 )
  {
    WingStoneWin::CloseWingStoneWin(v2);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkWingStoneWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00490850) --------------------------------------------------------
void __thiscall GameFrameWork::OpenForumWin(GameFrameWork *this)
{
  if ( this->m_pkForumWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkForumWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490870) --------------------------------------------------------
void __thiscall GameFrameWork::CloseForumWin(GameFrameWork *this)
{
  if ( this->m_pkForumWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkForumWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490890) --------------------------------------------------------
void __thiscall GameFrameWork::OpenShopWin(GameFrameWork *this)
{
  if ( this->m_pkShopWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004908B0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseShopWin(GameFrameWork *this)
{
  if ( this->m_pkShopWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004908D0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseKDQuestWin(GameFrameWork *this)
{
  if ( this->m_pkKingDomQuest )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkKingDomQuest->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004908F0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenActionWin(GameFrameWork *this)
{
  if ( this->m_pkActionWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490910) --------------------------------------------------------
void __thiscall GameFrameWork::CloseActionWin(GameFrameWork *this)
{
  if ( this->m_pkActionWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490930) --------------------------------------------------------
void __thiscall GameFrameWork::SetTopFriendAddWin(GameFrameWork *this)
{
  if ( this->m_pkFriendAddWin )
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, &this->m_pkFriendAddWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490950) --------------------------------------------------------
void __thiscall GameFrameWork::CloseFriendAddWin(GameFrameWork *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkFriendAddWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490970) --------------------------------------------------------
void __thiscall GameFrameWork::CloseChatBlockListWin(GameFrameWork *this)
{
  if ( this->m_pkChatBlockListWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkChatBlockListWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490990) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateChatBlockListWin(GameFrameWork *this)
{
  ChatBlockListWin *v1; // ecx@1

  v1 = this->m_pkChatBlockListWin;
  if ( v1 )
    ChatBlockListWin::UpdateViewList(v1);
}

//----- (004909A0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenRaidMemberAddWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1

  v1 = this;
  v2 = (PgWin *)this->m_pkExpeditionMemberAddWin;
  if ( v2 )
  {
    if ( !PgWin::IsVisible(v2) )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_pkExpeditionMemberAddWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.5);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkExpeditionMemberAddWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00490A00) --------------------------------------------------------
void __thiscall GameFrameWork::CloseRaidMemberAddWin(GameFrameWork *this)
{
  if ( this->m_pkExpeditionMemberAddWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkExpeditionMemberAddWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490A20) --------------------------------------------------------
void __thiscall GameFrameWork::CloseMysteryVaultWin(GameFrameWork *this)
{
  if ( this->m_pkMysteryVaultWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMysteryVaultWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490A40) --------------------------------------------------------
void __thiscall GameFrameWork::OpenMapLinkGateWin(GameFrameWork *this)
{
  if ( this->m_pkMapLinkGateWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkMapLinkGateWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490A60) --------------------------------------------------------
void __thiscall GameFrameWork::CloseMapLinkGateWin(GameFrameWork *this)
{
  if ( this->m_pkMapLinkGateWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMapLinkGateWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490A80) --------------------------------------------------------
void __thiscall GameFrameWork::CloseHolyPromiseAddWin(GameFrameWork *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkHolyPromiseAddWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490AA0) --------------------------------------------------------
void __thiscall GameFrameWork::SetTopHolyPromiseAddWin(GameFrameWork *this)
{
  if ( this->m_pkHolyPromiseAddWin )
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, &this->m_pkHolyPromiseAddWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490AC0) --------------------------------------------------------
void __thiscall GameFrameWork::ActivateRaidWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1

  v1 = this;
  v2 = (PgWin *)this->m_pkExpeditionWin;
  if ( v2 )
  {
    if ( PgWin::IsVisible(v2) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkExpeditionWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkExpeditionWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00490B00) --------------------------------------------------------
void __thiscall GameFrameWork::CloseCommunityWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1
  NiRefObjectVtbl *v3; // edi@2
  int v4; // eax@2
  NiRefObjectVtbl *v5; // edi@2
  int v6; // eax@2

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( v2 )
  {
    v3 = v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v3[43].__vecDelDtor((NiRefObject *)v1->m_pkFriendWin, v4);
    v5 = v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = ((int (*)(void))v1->m_pkCurrentCommunityWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    v5[44].__vecDelDtor((NiRefObject *)v1->m_pkFriendWin, v6);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v1->m_pkCurrentCommunityWin);
    v1->m_pkCurrentCommunityWin = 0;
  }
}

//----- (00490B80) --------------------------------------------------------
void __thiscall GameFrameWork::OnOptionWinApply(GameFrameWork *this, int nType)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( nType )
  {
    if ( nType == 1 )
    {
      OptionGraphicWin::OnApply(this->m_pkOptionGraphicWin);
      v2->m_bDisplayApplyCheck = 1;
    }
    else
    {
      if ( nType == 2 )
        OptionSoundWin::OnApply(this->m_pkOptionSoundWin);
    }
  }
  else
  {
    OptionSystemWin::OnApply(this->m_pkOptionSystemWin);
  }
}

//----- (00490BD0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOptionWinDefaultSetting(GameFrameWork *this, int nType)
{
  if ( nType )
  {
    if ( nType == 1 )
      OptionGraphicWin::OnDefaultSetting(this->m_pkOptionGraphicWin);
    if ( nType == 2 )
      OptionSoundWin::OnDefaultSetting(this->m_pkOptionSoundWin);
  }
  else
  {
    OptionSystemWin::OnDefaultSetting(this->m_pkOptionSystemWin);
  }
}

//----- (00490C10) --------------------------------------------------------
void __thiscall GameFrameWork::OpenGameOptionWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0);
  OptionSoundWin::CloseWin(v1->m_pkOptionSoundWin);
  OptionGraphicWin::CloseWin(v1->m_pkOptionGraphicWin);
  OptionSystemWin::OpenWin(v1->m_pkOptionSystemWin);
}

//----- (00490C80) --------------------------------------------------------
void __thiscall GameFrameWork::OpenGraphicOptionWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0);
  OptionSoundWin::CloseWin(v1->m_pkOptionSoundWin);
  OptionSystemWin::CloseWin(v1->m_pkOptionSystemWin);
  OptionGraphicWin::OpenWin(v1->m_pkOptionGraphicWin);
}

//----- (00490CF0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenSoundOptionWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0);
  OptionSystemWin::CloseWin(v1->m_pkOptionSystemWin);
  OptionGraphicWin::CloseWin(v1->m_pkOptionGraphicWin);
  OptionSoundWin::OpenWin(v1->m_pkOptionSoundWin);
}

//----- (00490D60) --------------------------------------------------------
void __thiscall GameFrameWork::OpenKeyRemappingOptionWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  OptionSystemWin::CloseWin(this->m_pkOptionSystemWin);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkKeyRemappingWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490D90) --------------------------------------------------------
void __thiscall GameFrameWork::CloseOptionWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  OptionGraphicWin::OnWinClose(this->m_pkOptionGraphicWin);
  OptionSystemWin::OnWinClose(v1->m_pkOptionSystemWin);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkOptionWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490DD0) --------------------------------------------------------
void __thiscall GameFrameWork::NcQuestGiveUpReq(GameFrameWork *this, unsigned __int16 nQuestID)
{
  GameFrameWork::SendNetMsgZoneMgr(this, 0x11u, 7u, &nQuestID, 2);
}

//----- (00490DF0) --------------------------------------------------------
void __thiscall GameFrameWork::NcQuestClientScenarioDoneReq(GameFrameWork *this, unsigned __int16 kID)
{
  GameFrameWork::SendNetMsgZoneMgr(this, 0x11u, 0xBu, &kID, 2);
}

//----- (00490E10) --------------------------------------------------------
void __thiscall GameFrameWork::NcMiscHideExceptMeCmd(GameFrameWork *this, bool bOn)
{
  if ( bOn )
  {
    GameFrameWork::SendNetMsgZoneMgr(this, 2u, 0x17u, 0, 0);
    CMiniHouseMgr::RemoveAll((CMiniHouseMgr *)&g_kMiniHouseMgr, 1);
  }
  else
  {
    GameFrameWork::SendNetMsgZoneMgr(this, 2u, 0x18u, 0, 0);
  }
}

//----- (00490E50) --------------------------------------------------------
void __thiscall GameFrameWork::NcQuestScriptCmdAck(GameFrameWork *this, unsigned __int16 kID, char byScriptCmd, unsigned int dwResult)
{
  PROTO_NC_QUEST_SCRIPT_CMD_ACK kAck; // [sp+0h] [bp-8h]@1

  kAck.nQSC = byScriptCmd;
  kAck.nQuestID = kID;
  kAck.nResult = dwResult;
  GameFrameWork::SendNetMsgZoneMgr(this, 0x11u, 2u, &kAck, 7);
}

//----- (00490E80) --------------------------------------------------------
void __thiscall GameFrameWork::SetWingStonePlaceList(GameFrameWork *this, unsigned int uiParam)
{
  WingStoneWin::ChoiceList(this->m_pkWingStoneWin, uiParam);
}

//----- (00490EB0) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseJoinWin(GameFrameWork *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMHJoinWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00490ED0) --------------------------------------------------------
void __thiscall GameFrameWork::MHObjFocusCancel(GameFrameWork *this)
{
  MiniHouseIndoor::SetFocusObj(&g_kWorld.m_MiniHouseIndoorMode, 0, 1);
  MiniHouseIndoor::CancelPickObj(&g_kWorld.m_MiniHouseIndoorMode);
}

//----- (00490EF0) --------------------------------------------------------
void __thiscall GameFrameWork::MHObjUsePortal(GameFrameWork *this)
{
  PROTO_NC_MINIHOUSE_PORTAL_EFFECT_REQ kProto; // [sp+1h] [bp-1h]@1

  kProto.dummy[0] = 0;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x56u, &kProto, 1);
}

//----- (00490F10) --------------------------------------------------------
void __thiscall GameFrameWork::OnShowMakeKarisWin(GameFrameWork *this, bool bShow)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( bShow == 1 )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkMakeKarisWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMakeKarisWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00490F60) --------------------------------------------------------
void __thiscall GameFrameWork::SetInvLockAllItems(GameFrameWork *this, bool b)
{
  InventoryWin *v2; // ecx@1

  v2 = this->m_pkInventoryWin;
  if ( v2 )
  {
    if ( b )
      InventoryWin::LockAllItem(v2);
    else
      InventoryWin::UnLockAllItem(v2);
  }
}

//----- (00490F90) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenEnchantGemWin(GameFrameWork *this, SHINE_ITEM_STRUCT kStruct, void *pvBody, unsigned int UI_TYPE)
{
  GameFrameWork *v4; // ebx@1
  PgWin *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // ebx@5
  char kStructa; // [sp+Ch] [bp-6Ch]@1
  unsigned __int8 v9; // [sp+47h] [bp-31h]@2
  unsigned __int8 v10; // [sp+48h] [bp-30h]@2
  __int16 v11; // [sp+70h] [bp-8h]@1
  char v12; // [sp+72h] [bp-6h]@1
  unsigned int v13; // [sp+74h] [bp-4h]@1
  int v14; // [sp+78h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v4 = this;
  v5 = (PgWin *)this->m_pkEnchantGemWin1;
  memcpy(&kStructa, &kStruct, 0x64u);
  v11 = *(_WORD *)((char *)&kStruct.itemattr.binditem.portal[9].y + 1);
  v12 = BYTE3(kStruct.itemattr.binditem.portal[9].y);
  v6 = pvBody;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v5);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkEnchantGemWin2->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkEnchantGemWin3->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkEnchantGemDeleteWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkEnchantGemDeleteWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkEnchantGemDeleteWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( UI_TYPE )
  {
    if ( UI_TYPE != 1 )
      return;
    if ( v9 == v10 )
    {
      v7 = (PgWin *)v4->m_pkEnchantGemDeleteWin1;
    }
    else
    {
      if ( v9 - v10 == 1 )
      {
        v7 = (PgWin *)v4->m_pkEnchantGemDeleteWin2;
      }
      else
      {
        if ( v9 - v10 != 2 )
          return;
        v7 = (PgWin *)v4->m_pkEnchantGemDeleteWin3;
      }
    }
  }
  else
  {
    if ( v9 == v10 )
    {
      v7 = (PgWin *)v4->m_pkEnchantGemWin1;
    }
    else
    {
      if ( v9 - v10 == 1 )
      {
        v7 = (PgWin *)v4->m_pkEnchantGemWin2;
      }
      else
      {
        if ( v9 - v10 != 2 )
          return;
        v7 = (PgWin *)v4->m_pkEnchantGemWin3;
      }
    }
  }
  if ( v7 )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v7);
    EnchantGemWin::OnSetEnchantGem((EnchantGemWin *)v7, (SHINE_ITEM_STRUCT *)&kStructa, v6);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004910B0) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseEnchantGemToolTip(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  EnchantGemToolTipWin *v2; // ecx@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v2 = v1->m_pkEnchantGemToolTipWin;
    if ( v2->m_ItemID != -1 )
      EnchantGemToolTipWin::Clear(v2);
    ((void (__stdcall *)(_DWORD))v1->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00491100) --------------------------------------------------------
void __thiscall GameFrameWork::OpenQuestNewsWin(GameFrameWork *this)
{
  PgWin *v1; // ecx@1

  this->m_pkQuestNewsWin->m_ePigeonState = 2;
  v1 = (PgWin *)this->m_pkQuestNewsWin;
  if ( v1 )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v1);
}

//----- (00491130) --------------------------------------------------------
void __thiscall GameFrameWork::CloseQuestNewsWin(GameFrameWork *this)
{
  if ( this->m_pkQuestNewsWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkQuestNewsWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00491150) --------------------------------------------------------
void __thiscall GameFrameWork::OpenPlayGuideMinWin(GameFrameWork *this)
{
  if ( this->m_pkPlayGuideMinWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkPlayGuideMinWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00491170) --------------------------------------------------------
void __thiscall GameFrameWork::ClosePlayGuideMinWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkPlayGuideMinWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkPlayGuideMinWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideMinWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (004911B0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenPlayGuideWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkPlayGuideWin )
  {
    if ( !(unsigned __int8)((int (*)(void))this->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (004911F0) --------------------------------------------------------
void __thiscall GameFrameWork::ClosePlayGuideWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkPlayGuideWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00491230) --------------------------------------------------------
void __thiscall GameFrameWork::RefreshHotKey(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  ShortCutWin **v2; // esi@1
  signed int v3; // ebx@1

  v1 = this;
  v2 = this->m_pkShortCutSubWinV;
  v3 = 4;
  do
  {
    ShortCutWin::ReflashHotKey(v1->m_pkShortCutWin);
    ShortCutWin::ReflashHotKey(v1->m_pkShortCutWinV);
    ShortCutWin::ReflashHotKey(*(v2 - 5));
    ShortCutWin::ReflashHotKey(*v2);
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (00491270) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCollectWin(GameFrameWork *this, bool bOpen)
{
  PgWin *v2; // [sp-4h] [bp-4h]@2

  if ( this->m_pkCollectWin )
  {
    v2 = (PgWin *)this->m_pkCollectWin;
    if ( bOpen )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    else
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  }
}

//----- (004912A0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCollectPeepingWin(GameFrameWork *this, bool bOpen)
{
  PgWin *v2; // [sp-4h] [bp-4h]@2

  if ( this->m_pkCollectPeepingWin )
  {
    v2 = (PgWin *)this->m_pkCollectPeepingWin;
    if ( bOpen )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    else
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  }
}

//----- (004912D0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenAttendIconWin(GameFrameWork *this)
{
  if ( this->m_pkAttendIconWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkAttendIconWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004912F0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenAttendRewardWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkAttendRewardWin )
  {
    ((void (*)(void))this->m_pkAttendRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)();
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkAttendRewardWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00491320) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenAttendCheckWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  int v2; // eax@4

  v1 = this;
  if ( this->m_pkAttendCheckWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkAttendCheckWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkAttendCheckWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkAttendCheckWin->baseclass_0.baseclass_0.baseclass_0);
      v2 = AttendCheckWin::GetMonthRewardIndex(v1->m_pkAttendCheckWin);
      if ( v2 != -1 )
        GameFrameWork::NcCharEventAttendRewardReq(v1, v2, 27);
    }
  }
}

//----- (00491380) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenReviveMenuWin(GameFrameWork *this, bool bShow)
{
  PgWin *v2; // [sp-4h] [bp-4h]@2

  if ( this->m_pkReviveMenuWin )
  {
    v2 = (PgWin *)this->m_pkReviveMenuWin;
    if ( bShow )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    else
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  }
}

//----- (004913B0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenRebirthMenuWin(GameFrameWork *this, bool bShow)
{
  PgWin *v2; // [sp-4h] [bp-4h]@2

  if ( this->m_pkRebirthMenuWin )
  {
    v2 = (PgWin *)this->m_pkRebirthMenuWin;
    if ( bShow )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    else
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  }
}

//----- (004913E0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenKQScoreWin(GameFrameWork *this, bool b)
{
  GameFrameWork *v2; // esi@1
  KQScoreWin *v3; // ecx@2

  v2 = this;
  if ( this->m_pkKQScoreWin )
  {
    v3 = this->m_pkKQScoreWin;
    if ( b )
    {
      if ( !(unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkKQScoreWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkKQScoreWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00491450) --------------------------------------------------------
void __thiscall GameFrameWork::SetInventoryNewMark(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  InventoryWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkInventoryWin;
  if ( v2 )
  {
    InventoryWin::SetStartNewMark(v2);
    InventoryWin::NcNewRewardAndChargedItem(v1->m_pkInventoryWin);
  }
}

//----- (00491470) --------------------------------------------------------
void __thiscall GameFrameWork::CloseClassChangeWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  GameFrameWork::NcActEndOfTrade(this);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkClassChangeWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00491490) --------------------------------------------------------
void __thiscall GameFrameWork::OpenKDTeamScoreWin(GameFrameWork *this, bool bOpen)
{
  GameFrameWork *v2; // esi@1
  KDTeamScoreWin *v3; // ecx@2

  v2 = this;
  if ( this->m_pkKDTeamScoreWin )
  {
    v3 = this->m_pkKDTeamScoreWin;
    if ( bOpen )
    {
      if ( !(unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkKDTeamScoreWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkKDTeamScoreWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00491500) --------------------------------------------------------
void __thiscall GameFrameWork::GuildEmblemShowWin(GameFrameWork *this, bool bShow)
{
  GameFrameWork *v2; // esi@1
  GuildEmblemWin *v3; // ecx@2

  v2 = this;
  if ( this->m_pkGuildEmblemWin )
  {
    v3 = this->m_pkGuildEmblemWin;
    if ( bShow )
    {
      if ( !(unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGuildEmblemWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkGuildEmblemWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00491570) --------------------------------------------------------
void __thiscall GameFrameWork::PartyScoreShowWin(GameFrameWork *this, bool bShow)
{
  GameFrameWork *v2; // esi@1
  PartyScoreWin *v3; // ecx@2

  v2 = this;
  if ( this->m_pkPartyScoreWin )
  {
    v3 = this->m_pkPartyScoreWin;
    if ( bShow )
    {
      if ( !(unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkPartyScoreWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkPartyScoreWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004915E0) --------------------------------------------------------
void __thiscall GameFrameWork::IDRankingShowWin(GameFrameWork *this, bool bShow)
{
  GameFrameWork *v2; // esi@1
  IDRankingWin *v3; // ecx@2

  v2 = this;
  if ( this->m_pkIDRankingWin )
  {
    v3 = this->m_pkIDRankingWin;
    if ( bShow )
    {
      if ( !(unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkIDRankingWin->baseclass_0.baseclass_0.baseclass_0);
        IDRankingWin::ShowTopPortrait(v2->m_pkIDRankingWin);
      }
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkIDRankingWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00491650) --------------------------------------------------------
void __thiscall GameFrameWork::ChatItemLink(GameFrameWork *this, char *pText, SHINE_ITEM_STRUCT *rItemStruct)
{
  if ( pText )
    ChatDisplayWin2::SetItemChatLink(this->m_pkChatDisplayWin, pText, rItemStruct);
}

//----- (00491670) --------------------------------------------------------
void __thiscall GameFrameWork::LinkItemShowWin(GameFrameWork *this, bool bShow)
{
  GameFrameWork *v2; // esi@1
  ItemInfoWin *v3; // ecx@2

  v2 = this;
  if ( this->m_pkItemLinkInfoWin )
  {
    v3 = this->m_pkItemLinkInfoWin;
    if ( bShow )
    {
      if ( !(unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004916E0) --------------------------------------------------------
bool __thiscall GameFrameWork::IsItemInfoWin(GameFrameWork *this)
{
  bool result; // al@2

  if ( this->m_pkItemLinkInfoWin )
    result = ((int (*)(void))this->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (00491700) --------------------------------------------------------
void __thiscall GameFrameWork::ClickLinkItemInfo(GameFrameWork *this, Item *pItem, int iX, int iY)
{
  GameFrameWork *v4; // esi@1
  int v5; // edi@2
  int v6; // eax@2
  unsigned int v7; // ecx@2
  int v8; // edi@2
  int v9; // ecx@2
  int v10; // edi@6
  ItemInfoWin *v11; // eax@6
  float v12; // ST0C_4@6
  float v13; // ST10_4@6

  v4 = this;
  if ( pItem )
  {
    ItemInfoWin::SetItemInfo(this->m_pkItemLinkInfoWin, pItem);
    ItemInfoWin::SetCloseButtonPos(v4->m_pkItemLinkInfoWin);
    v5 = ((int (*)(void))v4->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v6 = ((int (*)(void))v4->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v7 = PgWin::ms_uiScreenWidth - v5;
    v8 = iY;
    v9 = v7 - iX;
    if ( v9 < 0 )
      iX += v9;
    if ( ((PgWin::ms_uiScreenHeight - v6 - iY) & 0x80000000u) != 0 )
      v8 = PgWin::ms_uiScreenHeight - v6;
    v10 = v8
        - ((int (*)(void))v4->m_pkShortCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v11 = v4->m_pkItemLinkInfoWin;
    v12 = (double)iX;
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v12;
    v13 = (double)v10;
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v13;
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 0.0;
    ((void (*)(void))v4->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)();
    if ( v4->m_pkItemLinkInfoWin )
    {
      if ( !(unsigned __int8)((int (*)(void))v4->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkItemLinkInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00491800) --------------------------------------------------------
bool __thiscall GameFrameWork::IsRoarShowWin(GameFrameWork *this)
{
  bool result; // al@2

  if ( this->m_pkRoarWin )
    result = ((int (*)(void))this->m_pkRoarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (00491820) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenPrivateStoreWinKey(GameFrameWork *this)
{
  if ( !EditWin::ms_pkCurEditWin )
    PgFrameWork::AddMsg(&this->baseclass_0, 0xA3u, 0, 0);
}

//----- (00491840) --------------------------------------------------------
void __thiscall GameFrameWork::SetOptionResolution(GameFrameWork *this, unsigned int uiWidth, unsigned int uiHeight)
{
  GameFrameWork::ms_uiDisResWidth = uiWidth;
  GameFrameWork::ms_uiDisResHeight = uiHeight;
  dword_A826F2 = uiWidth;
  dword_A826F6 = uiHeight;
  OptionGraphicWin::SetResoulution(this->m_pkOptionGraphicWin, uiWidth, uiHeight);
}
// A826F2: using guessed type int dword_A826F2;
// A826F6: using guessed type int dword_A826F6;

//----- (00491870) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCharInfoWin(GameFrameWork *this)
{
  Tutorial *v1; // eax@2
  void *v2; // eax@3

  if ( this->m_pkCharInfoWin )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0);
    v1 = Singleton<Tutorial>::m_pInstance;
    if ( !Singleton<Tutorial>::m_pInstance )
    {
      v2 = operator new(0xB4u);
      if ( v2 )
        Tutorial::Tutorial(v1);
      else
        v1 = 0;
      Singleton<Tutorial>::m_pInstance = v1;
    }
    v1->m_bOpenCharWin = 1;
  }
}

//----- (004918F0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenCharInfoWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // esi@3

  v1 = this;
  if ( this->m_pkCharInfoWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v2 = (PgWin *)v1->m_pkCharInfoWin;
      if ( v2 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
    }
    else
    {
      GameFrameWork::OpenCharInfoWin(v1);
    }
  }
}

//----- (00491930) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMiniHouseInventoryWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // esi@4

  v1 = this;
  if ( this->m_pkMiniHouseInventoryWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkMiniHouseInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMiniHouseInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      v2 = (PgWin *)v1->m_pkMiniHouseInventoryWin;
      if ( v2 )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    }
  }
}

//----- (00491980) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenSkillWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkSkillWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      SkillWin::ResetContents(v1->m_pkSkillWin);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkSkillWin->baseclass_0.baseclass_0.baseclass_0);
      Singleton<Tutorial>::getInstance()->m_bOpenSkillWin = 1;
    }
  }
}

//----- (004919E0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenQuestWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // esi@3
  CQuestWin2 *v3; // ecx@5

  v1 = this;
  if ( this->m_pkQuestWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v2 = (PgWin *)v1->m_pkQuestWin;
      if ( v2 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
    }
    else
    {
      v3 = v1->m_pkQuestWin;
      if ( v3 )
      {
        CQuestWin2::SelectTab(v3, 1);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}

//----- (00491A40) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenHelpWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkPlayGuideWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      if ( v1->m_pkPlayGuideWin )
      {
        if ( (unsigned __int8)((int (*)(void))v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0);
      }
    }
    else
    {
      PlayGuideWin::Reset(v1->m_pkPlayGuideWin);
      if ( v1->m_pkPlayGuideWin
        && !(unsigned __int8)((int (*)(void))v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00491AD0) --------------------------------------------------------
void __thiscall GameFrameWork::OnDeleteMHItem(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  mhEditRoomWin *v2; // eax@1
  ItemIcon *v3; // ecx@2
  PgNet *v4; // ecx@3
  int v5; // eax@3
  float v6; // edx@3
  float v7; // ecx@3
  NETCOMMAND netcmd; // [sp+10h] [bp-24h]@3
  __int64 v9; // [sp+14h] [bp-20h]@3
  unsigned __int16 v10; // [sp+1Eh] [bp-16h]@3
  PROTO_NC_ITEM_DROP_REQ kItemDropPacket; // [sp+20h] [bp-14h]@3
  unsigned int v12; // [sp+30h] [bp-4h]@1
  int v13; // [sp+34h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkMHEditRoomWin;
  if ( v2 )
  {
    v3 = (ItemIcon *)v2->m_pkWorkTargetWin;
    if ( v3 )
    {
      ItemIcon::GetItem(v3);
      v4 = (PgNet *)v1->m_spZoneNet.m_pObject;
      netcmd.protocol = 12295;
      PgNet::AddNetMsg(v4, &netcmd, 2);
      Sleep(1u);
      v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      LODWORD(v6) = *(_DWORD *)(v5 + 4);
      LODWORD(v7) = *(_DWORD *)v5;
      HIDWORD(v9) = v10 | 0xC00;
      kItemDropPacket.slot.Inven = v1->m_pkMHEditRoomWin->m_kWorkTargetInven.Inven;
      kItemDropPacket.lot = 1;
      kItemDropPacket.loc.x = (signed __int64)v7;
      v9 = (signed __int64)v6;
      kItemDropPacket.loc.y = (signed __int64)v6;
      PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kItemDropPacket, 14);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00491BD0) --------------------------------------------------------
void __thiscall GameFrameWork::JoinDiceGameReq(GameFrameWork *this)
{
  MHDiceGameTask *v1; // ecx@1
  MHDiceGameTask *v2; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v1 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v4 = 0;
  MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_REQ(v1);
  v4 = -1;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
}

//----- (00491C50) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenDiceRewardWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  mhEditRoomWin *v2; // eax@2
  ItemIcon *v3; // ecx@3
  unsigned __int16 v4; // di@4
  Item *v5; // eax@4

  v1 = this;
  if ( this->m_pkDiceRewardMoneyWin )
  {
    v2 = this->m_pkMHEditRoomWin;
    if ( v2 )
    {
      v3 = (ItemIcon *)v2->m_pkWorkTargetWin;
      if ( v3 )
      {
        v4 = v2->m_kWorkTargetInven.Inven;
        v5 = ItemIcon::GetItem(v3);
        MHDiceRewardMoneyWin::SetAmout(
          v1->m_pkDiceRewardMoneyWin,
          *(_QWORD *)&v5->m_kStruct.itemattr.amulet.UpgradeOption.optionlist[5].itemoption_value);
        v1->m_pkDiceRewardMoneyWin->m_nInvenSlot.Inven = v4;
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkDiceRewardMoneyWin->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}

//----- (00491CC0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenDiceExpectWin(GameFrameWork *this)
{
  mhEditRoomWin *v1; // eax@2
  MHDiceGameTask *v2; // ecx@4
  MHDiceGameTask *v3; // esi@5
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-14h]@4
  PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_REQ data; // [sp+4h] [bp-10h]@4
  int v6; // [sp+10h] [bp-4h]@4

  if ( this->m_pkDiceExpectMoneyWin )
  {
    v1 = this->m_pkMHEditRoomWin;
    if ( v1 )
    {
      if ( v1->m_pkWorkTargetWin )
      {
        data.nInvenSlot.Inven = v1->m_kWorkTargetInven.Inven;
        v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
        v6 = 0;
        MHDiceGameTask::Recv_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_REQ(v2, &data);
        v6 = -1;
        if ( result.m_pObject )
        {
          v3 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v3 )
              v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
          }
        }
      }
    }
  }
}

//----- (00491D70) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMiniPartyWinKey(GameFrameWork *this)
{
  if ( !EditWin::ms_pkCurEditWin )
    PartyWinInterface::TogglePartyWin(this->m_pkPartyWinInterface);
}

//----- (00491D90) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenForumWin(GameFrameWork *this)
{
  if ( this->m_pkForumWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkForumWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00491DB0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenItemShopWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // esi@4

  v1 = this;
  if ( this->m_pkShopWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      ShopWin::OnWinClose(v1->m_pkShopWin);
    }
    else
    {
      v2 = (PgWin *)v1->m_pkShopWin;
      if ( v2 )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    }
  }
}

//----- (00491E00) --------------------------------------------------------
void __thiscall GameFrameWork::OnTab_Key(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char v2; // [sp-4h] [bp-8h]@2

  v1 = this;
  if ( g_pkMainChar->m_byMode == 1 )
  {
    Char::SetMode(g_pkMainChar, 2);
    v2 = 2;
  }
  else
  {
    Char::SetMode(g_pkMainChar, 1);
    v2 = 1;
  }
  GameFrameWork::NcActChangeModeReq(v1, v2);
  if ( Char::CheckActState(g_pkMainChar, 100000) )
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
}

//----- (00491E60) --------------------------------------------------------
void __thiscall GameFrameWork::OnKeyDownMoveFront(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( GameFrameWork::IsCapableKeyControl(this) )
    {
      v1->m_kCharMover.m_bKeyDown = 1;
      v1->m_kCharMover.m_bDownFront = 1;
    }
  }
}

//----- (00491E80) --------------------------------------------------------
void __thiscall GameFrameWork::OnKeyDownMoveBack(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( GameFrameWork::IsCapableKeyControl(this) )
    {
      v1->m_kCharMover.m_bKeyDown = 1;
      v1->m_kCharMover.m_bDownBack = 1;
    }
  }
}

//----- (00491EA0) --------------------------------------------------------
void __thiscall GameFrameWork::OnKeyDownMoveRight(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( GameFrameWork::IsCapableKeyControl(this) )
    {
      v1->m_kCharMover.m_bKeyDown = 1;
      v1->m_kCharMover.m_bDownRight = 1;
    }
  }
}

//----- (00491EC0) --------------------------------------------------------
void __thiscall GameFrameWork::OnKeyDownMoveLeft(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( GameFrameWork::IsCapableKeyControl(this) )
    {
      v1->m_kCharMover.m_bKeyDown = 1;
      v1->m_kCharMover.m_bdownLeft = 1;
    }
  }
}

//----- (00491EE0) --------------------------------------------------------
void __thiscall GameFrameWork::OnKeyDownJump(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( GameFrameWork::IsCapableKeyControl(this) )
      GameFrameWork::ActJump(v1);
  }
}

//----- (00491F00) --------------------------------------------------------
void __thiscall GameFrameWork::ChangeRun(GameFrameWork *this)
{
  Char *v1; // ecx@2
  Mover *v2; // eax@2

  if ( !((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].Affect)() )
  {
    ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(1);
    v1 = g_pkMainChar;
    v2 = g_pkMainChar->m_pkMover;
    if ( v2 && !g_pkMainChar->m_uiMoverSlot )
    {
      ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.baseclass_0.vfptr[7].Deaffect)(g_pkMainChar->m_pkMover, 1);
      v1 = g_pkMainChar;
    }
    if ( !Char::CheckActState(v1, 100000) )
      ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[11].AddAbStateByAbstateIndex)();
  }
}

//----- (00491F80) --------------------------------------------------------
void __thiscall GameFrameWork::ChangeWalk(GameFrameWork *this)
{
  Char *v1; // ecx@1
  Mover *v2; // eax@1

  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(0);
  v1 = g_pkMainChar;
  v2 = g_pkMainChar->m_pkMover;
  if ( v2 && !g_pkMainChar->m_uiMoverSlot )
  {
    ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.baseclass_0.vfptr[7].Deaffect)(g_pkMainChar->m_pkMover, 0);
    v1 = g_pkMainChar;
  }
  if ( !Char::CheckActState(v1, 100000) )
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[11].AddAbStateByAbstateIndex)();
}

//----- (00491FE0) --------------------------------------------------------
void __thiscall GameFrameWork::OnHPSoulStoneUse_Key(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  StatusWin *v2; // ecx@5

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( !(_local_static_guard_ & 1) )
    {
      _local_static_guard_ |= 1u;
      TutorialMgr::TutorialMgr(&kTutorialMgr);
      atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
    }
    TutorialMgr::OnHPSoulStoneUse_Key(&kTutorialMgr);
    v2 = v1->m_pkStatusWin;
    if ( v2 )
      StatusWin::OnCmdHPSoul(v2);
  }
}
// A98300: using guessed type int _local static guard_;

//----- (00492040) --------------------------------------------------------
void __thiscall GameFrameWork::OnSPSoulStoneUse_Key(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  StatusWin *v2; // ecx@5

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( !(_local_static_guard_ & 1) )
    {
      _local_static_guard_ |= 1u;
      TutorialMgr::TutorialMgr(&kTutorialMgr);
      atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
    }
    TutorialMgr::OnSPSoulStoneUse_Key(&kTutorialMgr);
    v2 = v1->m_pkStatusWin;
    if ( v2 )
      StatusWin::OnCmdSPSoul(v2);
  }
}
// A98300: using guessed type int _local static guard_;

//----- (004920A0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenEnchantGemWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::OnOpenWeaponTitleWin(&kTutorialMgr);
  if ( !(unsigned __int8)((int (*)(void))v1->m_pkEnchantGemWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    && !(unsigned __int8)((int (*)(void))v1->m_pkEnchantGemWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    && !(unsigned __int8)((int (*)(void))v1->m_pkEnchantGemWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkEnchantGemWin1->baseclass_0.baseclass_0.baseclass_0);
}
// A98300: using guessed type int _local static guard_;

//----- (00492130) --------------------------------------------------------
void __thiscall GameFrameWork::OpenWeapontitleWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::OnOpenWeaponTitleWin(&kTutorialMgr);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkWeaponTitleWin->baseclass_0.baseclass_0.baseclass_0);
}
// A98300: using guessed type int _local static guard_;

//----- (00492180) --------------------------------------------------------
void __thiscall GameFrameWork::OpenInventoryWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  Tutorial *v2; // eax@4
  void *v3; // eax@5
  MainMenuWin *v4; // ecx@9

  v1 = this;
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::OpenInventoryWin(&kTutorialMgr);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  v2->m_bOpenInvenWin = 1;
  v4 = v1->m_pkMainMenuWin;
  if ( v4 )
    MainMenuWin::ShowNewMark(v4, 0);
}
// A98300: using guessed type int _local static guard_;

//----- (00492250) --------------------------------------------------------
void __thiscall GameFrameWork::CloseShopMenu(GameFrameWork *this, bool bSendEndOfTrade)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( bSendEndOfTrade )
    GameFrameWork::NcActEndOfTrade(this);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492290) --------------------------------------------------------
void __thiscall GameFrameWork::OpenSkillShopMenu(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char v2; // al@5

  v1 = this;
  if ( !(unsigned __int8)((int (*)(void))this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OpenInventoryWin(v1);
  if ( !(unsigned __int8)((int (*)(void))v1->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0);
  v2 = User::GetMainCharClass(&g_kUser);
  NPCSkillWin::SelectClassPage(v1->m_pkNPCSkillWin, v2);
  InventoryWin::ms_uiMode = 1;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492300) --------------------------------------------------------
void __thiscall GameFrameWork::CloseSkillShopMenu(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  GameFrameWork::NcActEndOfTrade(this);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492330) --------------------------------------------------------
void __thiscall GameFrameWork::OpenSoulStoneShopMenu(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !(unsigned __int8)((int (*)(void))this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OpenInventoryWin(v1);
  if ( !(unsigned __int8)((int (*)(void))v1->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 1;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492380) --------------------------------------------------------
void __thiscall GameFrameWork::CloseSoulStoneShopMenu(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  GameFrameWork::NcActEndOfTrade(this);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004923B0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenStorageMenu(GameFrameWork *this, char byTargetPage)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  StorageWin::RefreshPage(this->m_pkStorageWin, byTargetPage);
  if ( !(unsigned __int8)((int (*)(void))v2->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OpenInventoryWin(v2);
  if ( !(unsigned __int8)((int (*)(void))v2->m_pkStorageWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkStorageWin->baseclass_0.baseclass_0.baseclass_0);
    InventoryWin::ms_uiMode = 2;
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492420) --------------------------------------------------------
void __thiscall GameFrameWork::CloseStorageMenu(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !this->m_eOpenType )
    GameFrameWork::NcActEndOfTrade(this);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x4Du, 0, 0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkStorageWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492460) --------------------------------------------------------
void __thiscall GameFrameWork::OpenItemShopWin(GameFrameWork *this, unsigned __int16 handle)
{
  Char *v2; // eax@1
  Char *v3; // edi@1
  int v4; // ebx@1
  int v5; // esi@1
  int v6; // esi@2
  int v7; // ebx@2
  int v8; // edx@6
  int v9; // esi@9
  int v10; // edi@9
  int v11; // eax@13
  PgWin *v12; // eax@20
  GameFrameWork *thisa; // [sp+Ch] [bp-4h]@1

  thisa = this;
  v2 = CharMgr::GetChar(&g_kCharMgr, handle);
  v3 = v2;
  v4 = 0;
  v5 = 0;
  if ( v2 )
  {
    v6 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
    v7 = v2->m_kCharShape.m_kMobID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                            ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                            v2->m_kCharShape.m_kMobID) )
    {
      if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) )
      {
        v8 = *(_DWORD *)(v6 + 196);
        v4 = *(_DWORD *)(v8 + 4 * v7) ? *(_DWORD *)(v8 + 4 * v7) : 0;
      }
      else
      {
        v4 = 0;
      }
    }
    else
    {
      v4 = 0;
    }
    v9 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
    v10 = v3->m_kCharShape.m_kMobID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                            v10) )
    {
      if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) )
      {
        v11 = *(_DWORD *)(v9 + 196) + 4 * v10;
        v5 = *(_DWORD *)v11 ? *(_DWORD *)v11 : 0;
      }
      else
      {
        v5 = 0;
      }
    }
    else
    {
      v5 = 0;
    }
    if ( v4 )
    {
      if ( *(_DWORD *)(v4 + 99) == 14 )
      {
        v12 = (PgWin *)GuildTask::GetGuildTournamentStorageWin();
        PgWinMgr::ShowWin(&Pgg_kWinMgr, v12);
      }
      else
      {
        if ( !(unsigned __int8)((int (*)(void))thisa->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          GameFrameWork::OpenInventoryWin(thisa);
      }
    }
  }
  if ( !(unsigned __int8)((int (*)(void))thisa->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    if ( v5 )
      NPCItemWin::ResetPage(thisa->m_pkItemShopWin2, *(_DWORD *)(v5 + 170));
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &thisa->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0);
    if ( v4 )
    {
      if ( *(_DWORD *)(v4 + 99) != 14 )
        InventoryWin::ms_uiMode = 1;
    }
  }
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004925B0) --------------------------------------------------------
void __thiscall GameFrameWork::CloseItemShopWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  GameFrameWork::NcActEndOfTrade(this);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0);
  NPCItemWin::TabShow(v1->m_pkItemShopWin2, 0, 0);
  NPCItemWin::TabShow(v1->m_pkItemShopWin2, TAPTYPE_ITEM, 0);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492600) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenCharInfoWinKey(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // esi@4

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin && this->m_pkCharInfoWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkCharInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v2 = (PgWin *)v1->m_pkCharInfoWin;
      if ( v2 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
    }
    else
    {
      GameFrameWork::OpenCharInfoWin(v1);
    }
  }
}

//----- (00492650) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenSkillWinKey(GameFrameWork *this)
{
  if ( !EditWin::ms_pkCurEditWin )
    GameFrameWork::OnOpenSkillWin(this);
}

//----- (00492660) --------------------------------------------------------
void __thiscall GameFrameWork::OpenQuestWin(GameFrameWork *this, int iSelectID, int iSelectTab)
{
  GameFrameWork *v3; // esi@1
  CQuestWin2 *v4; // ecx@1
  Tutorial *v5; // eax@2
  void *v6; // eax@3

  v3 = this;
  v4 = this->m_pkQuestWin;
  if ( v4 )
  {
    CQuestWin2::SelectTab(v4, iSelectTab);
    CQuestWin2::SetSelectedID(v3->m_pkQuestWin, iSelectID);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
    v5 = Singleton<Tutorial>::m_pInstance;
    if ( !Singleton<Tutorial>::m_pInstance )
    {
      v6 = operator new(0xB4u);
      if ( v6 )
        Tutorial::Tutorial(v5);
      else
        v5 = 0;
      Singleton<Tutorial>::m_pInstance = v5;
    }
    if ( v5->m_bEnable )
    {
      CQuestWin2::SelectTab(v3->m_pkQuestWin, 2);
      Singleton<Tutorial>::getInstance()->m_bOpenQuestWin = 1;
    }
  }
}

//----- (00492730) --------------------------------------------------------
void __thiscall GameFrameWork::OpenFriendAddWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  unsigned int v2; // ecx@2
  const char *v3; // eax@4

  v1 = this;
  if ( this->m_pkFriendAddWin )
  {
    v2 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
    if ( v2 )
    {
      if ( *(_BYTE *)(v2 + 2672) )
      {
        v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 84))();
        FriendAddWin::SetTargetName(v1->m_pkFriendAddWin, v3);
      }
    }
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkFriendAddWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00492780) --------------------------------------------------------
void __thiscall GameFrameWork::OpenChatBlockListWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1
  PgWin *v3; // esi@6

  v1 = this;
  v2 = (PgWin *)this->m_pkChatBlockListWin;
  if ( v2 )
  {
    if ( PgWin::IsVisible(v2) )
    {
      v3 = (PgWin *)v1->m_pkChatBlockListWin;
      if ( v3 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
    }
    else
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_pkChatBlockListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.5);
      if ( !(unsigned __int8)((int (*)(void))v1->m_pkChatBlockListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
        ((void (__stdcall *)(_DWORD))v1->m_pkChatBlockListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkChatBlockListWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00492820) --------------------------------------------------------
void __thiscall GameFrameWork::OpenMysteryVaultWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bEnable )
  {
    if ( v1->m_pkMysteryVaultWin )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMysteryVaultWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (004928B0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenHolyPromiseAddWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  unsigned int v2; // ecx@2
  const char *v3; // eax@4

  v1 = this;
  if ( this->m_pkHolyPromiseAddWin )
  {
    v2 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
    if ( v2 )
    {
      if ( *(_BYTE *)(v2 + 2672) )
      {
        v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 84))();
        HolyPromiseAddWin::SetTargetName(v1->m_pkHolyPromiseAddWin, v3);
      }
    }
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkHolyPromiseAddWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00492900) --------------------------------------------------------
void __thiscall GameFrameWork::OpenItemUpgradeWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::OpenItemUpgradeWin(&kTutorialMgr);
  ItemUpgradeWin::ResetAllData(v1->m_pkItemUpgradeWin);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
}
// A98300: using guessed type int _local static guard_;
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492970) --------------------------------------------------------
void __thiscall GameFrameWork::OpenMoverUpgradeWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
  MoverUpgradeWin::ResetAllData(v1->m_pkMoverUpgradeWin);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004929B0) --------------------------------------------------------
void __thiscall GameFrameWork::OnPartyJoinProposeAccept(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  Name5 *v2; // eax@1
  _BYTE v3[20]; // ST00_20@1
  Name5 result; // [sp+4h] [bp-14h]@1

  v1 = this;
  v2 = Party::GetJoinProposeCharID(&g_kParty, &result);
  *(_DWORD *)v3 = *(_DWORD *)&v2->n5_name[0];
  *(_QWORD *)&v3[4] = *(_QWORD *)&v2->n5_name[4];
  *(_QWORD *)&v3[12] = *(_QWORD *)&v2->n5_name[12];
  GameFrameWork::NcPartyJoinProposeAllowAck(v1, *(Name5 *)v3);
  Party::ClearJoinProposeData(&g_kParty);
}

//----- (00492A00) --------------------------------------------------------
void __thiscall GameFrameWork::OnPartyJoinProposeReject(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  Name5 *v2; // eax@1
  _BYTE v3[20]; // ST00_20@1
  Name5 result; // [sp+4h] [bp-14h]@1

  v1 = this;
  v2 = Party::GetJoinProposeCharID(&g_kParty, &result);
  *(_DWORD *)v3 = *(_DWORD *)&v2->n5_name[0];
  *(_QWORD *)&v3[4] = *(_QWORD *)&v2->n5_name[4];
  *(_QWORD *)&v3[12] = *(_QWORD *)&v2->n5_name[12];
  GameFrameWork::NcPartyJoinProposeRejectAck(v1, *(Name5 *)v3);
  Party::ClearJoinProposeData(&g_kParty);
}

//----- (00492A50) --------------------------------------------------------
void __thiscall GameFrameWork::OnTradeProposeAskAccept(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  MsgBox *v2; // esi@1

  v1 = this;
  GameFrameWork::NcTradeProposeyesAck(this);
  v2 = v1->m_spUserTradeMsgBox.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v2,
          1u);
    }
    v1->m_spUserTradeMsgBox.m_pObject = 0;
  }
}

//----- (00492A90) --------------------------------------------------------
void __thiscall GameFrameWork::OnTradeProposeAskReject(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  MsgBox *v2; // esi@1

  v1 = this;
  GameFrameWork::NcTradeProposeAskNoAck(this);
  v2 = v1->m_spUserTradeMsgBox.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v2,
          1u);
    }
    v1->m_spUserTradeMsgBox.m_pObject = 0;
  }
}

//----- (00492AD0) --------------------------------------------------------
void __thiscall GameFrameWork::OnFriendConfirmReqYes(GameFrameWork *this, unsigned int lParam)
{
  _BYTE v2[20]; // ST00_20@2

  if ( lParam )
  {
    *(_DWORD *)v2 = *(_DWORD *)lParam;
    *(_QWORD *)&v2[4] = *(_QWORD *)(lParam + 4);
    *(_QWORD *)&v2[12] = *(_QWORD *)(lParam + 12);
    GameFrameWork::NcFriendSetConfirmAck(this, *(Name5 *)v2, 1);
    operator delete((void *)lParam);
  }
}

//----- (00492B20) --------------------------------------------------------
void __thiscall GameFrameWork::OnFriendConfirmReqNo(GameFrameWork *this, unsigned int lParam)
{
  _BYTE v2[20]; // ST00_20@2

  if ( lParam )
  {
    *(_DWORD *)v2 = *(_DWORD *)lParam;
    *(_QWORD *)&v2[4] = *(_QWORD *)(lParam + 4);
    *(_QWORD *)&v2[12] = *(_QWORD *)(lParam + 12);
    GameFrameWork::NcFriendSetConfirmAck(this, *(Name5 *)v2, 0);
    operator delete((void *)lParam);
  }
}

//----- (00492B70) --------------------------------------------------------
void __thiscall GameFrameWork::OnFriendDeleteYse(GameFrameWork *this, unsigned int lParam)
{
  _BYTE v2[20]; // ST00_20@2

  if ( lParam )
  {
    *(_DWORD *)v2 = *(_DWORD *)lParam;
    *(_QWORD *)&v2[4] = *(_QWORD *)(lParam + 4);
    *(_QWORD *)&v2[12] = *(_QWORD *)(lParam + 12);
    GameFrameWork::NcFriendDelReq(this, *(Name5 *)v2);
    operator delete((void *)lParam);
  }
}

//----- (00492BB0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenItemMixWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
  ItemMixWin::ResetAllData(v1->m_pkItemMixWin);
  ItemMixWin::ResetAddItemIcon(v1->m_pkItemMixWin);
  ItemMixWin::SetDisableMixButton(v1->m_pkItemMixWin, 1);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492C10) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseItemMixWin(GameFrameWork *this, bool bSendEndofTrade)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
  if ( bSendEndofTrade )
    GameFrameWork::NcActEndOfTrade(v2);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00492C50) --------------------------------------------------------
void __thiscall GameFrameWork::OnPopupProposeTrade(GameFrameWork *this, Char *pkTarget)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( this->m_pkPopupMenuWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( pkTarget )
    GameFrameWork::NcTradeProposeReq(v2, pkTarget->m_kHandle);
}

//----- (00492C90) --------------------------------------------------------
void __thiscall GameFrameWork::OnTimerTradeReject(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // eax@1
  MsgBox *v3; // edi@2

  v1 = this;
  v2 = (PgWin *)this->m_spUserTradeMsgBox.m_pObject;
  if ( v2 )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
    GameFrameWork::NcTradeProposeAskNoAck(v1);
    v3 = v1->m_spUserTradeMsgBox.m_pObject;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v3,
            1u);
      }
      v1->m_spUserTradeMsgBox.m_pObject = 0;
    }
  }
}

//----- (00492CF0) --------------------------------------------------------
void __thiscall GameFrameWork::OnSpace(GameFrameWork *this)
{
  if ( !EditWin::ms_pkCurEditWin )
    GameFrameWork::OnDoublePickChar(
      this,
      (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0]);
}

//----- (00492D10) --------------------------------------------------------
bool __thiscall GameFrameWork::CancelCharSelect(GameFrameWork *this)
{
  bool result; // al@2

  if ( g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] )
  {
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 9u, 8u, 0, 0);
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00492D50) --------------------------------------------------------
bool __thiscall GameFrameWork::TargetCharReq(GameFrameWork *this, Char *pkChar)
{
  Char *v2; // esi@1
  GameFrameWork *v3; // ebx@1
  Mover *v4; // edi@4
  bool result; // al@11

  v2 = pkChar;
  v3 = this;
  if ( !pkChar || pkChar->m_kHandle == -1 || !MainChar::IsCharTargetableState((MainChar *)g_pkMainChar, pkChar) )
    goto LABEL_15;
  v4 = pkChar->m_pkMover;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(pkChar) )
  {
    if ( !Mover::IsAbility((Mover *)pkChar) )
      v2 = Mover::GetSlotChar((Mover *)pkChar, 0);
  }
  else
  {
    if ( v4 && Mover::IsAbility(v4) )
      v2 = (Char *)v4;
  }
  if ( v2 )
  {
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, v2);
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[1]) = 1;
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
    GameFrameWork::NcBatTargettingReq(v3, v2->m_kHandle);
    result = 1;
  }
  else
  {
LABEL_15:
    result = 0;
  }
  return result;
}

//----- (00492E20) --------------------------------------------------------
void __thiscall GameFrameWork::OnWhisperChatStart(GameFrameWork *this, const char *charName)
{
  GameFrameWork *v2; // esi@1
  _BYTE v3[20]; // ST00_20@1
  char dest[4]; // [sp+4h] [bp-18h]@1
  __int64 v5; // [sp+8h] [bp-14h]@1
  __int64 v6; // [sp+10h] [bp-Ch]@1
  unsigned int v7; // [sp+18h] [bp-4h]@1
  int v8; // [sp+1Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  v6 = 0i64;
  v5 = 0i64;
  *(_DWORD *)dest = 0;
  strncpy(dest, (char *)charName, 0x14u);
  *(_DWORD *)v3 = *(_DWORD *)dest;
  *(_QWORD *)&v3[4] = v5;
  *(_QWORD *)&v3[12] = v6;
  GameFrameWork::AddWhisperList(v2, *(Name5 *)v3);
  ChatDisplayWin2::OnWhisperTab(v2->m_pkChatDisplayWin, 1);
}
// A85C00: using guessed type int __security_cookie;

//----- (00492EA0) --------------------------------------------------------
void __thiscall GameFrameWork::MiniHouseIndoorModeOut(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  MHDiceGameTask *v5; // ecx@6
  MHDiceGameTask *v6; // esi@7
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-14h]@1
  NETCOMMAND netcmd; // [sp+4h] [bp-10h]@12
  int v9; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v9 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2);
  v9 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( v3 )
  {
    v5 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    v9 = 1;
    v5->m_bOutReserveOnMiniHouse = 1;
    MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_REQ(v5);
    v9 = -1;
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          ((void (__cdecl *)(signed int))v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
      }
    }
  }
  else
  {
    if ( v1->m_pkMHCurrentWin )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v1->m_pkMHCurrentWin);
      v1->m_pkMHCurrentWin = 0;
    }
    netcmd.protocol = -29672;
    PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &netcmd, 2);
    byte_AA5170 = 0;
  }
}
// AA5170: using guessed type char byte_AA5170;

//----- (00492FD0) --------------------------------------------------------
void __thiscall GameFrameWork::SendKickReq(GameFrameWork *this, unsigned __int16 KickedChar)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = -29678;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &KickedChar, 2);
}

//----- (00493020) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMHPopUpMenuObjAction(GameFrameWork *this, char *pObjName, mhObject *pkObj, bool bCanHold, bool bCanAni)
{
  int v5; // ebx@0
  int v6; // edi@0
  GameFrameWork *v7; // esi@1
  mhEmotionWin *v8; // ecx@2
  int v9; // ST08_4@2
  int v10; // ST04_4@2
  mhEmotionWin *v11; // ecx@2
  NiRefObjectVtbl *v12; // ebx@2
  mhEmotionWin *v13; // edi@2
  double v14; // ST10_8@2
  signed int v15; // ST08_4@2
  signed int v16; // ST04_4@2

  v7 = this;
  if ( pkObj )
  {
    v8 = this->m_pkMHEmotionWin;
    v9 = v5;
    v8->m_ObjID = LOWORD(pkObj->m_iGUID);
    v10 = v6;
    v8->m_bCanHold = bCanHold;
    v8->m_bCanAni = bCanAni;
    mhEmotionWin::UpdateInfo(v8);
    v11 = v7->m_pkMHEmotionWin;
    v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = v7->m_pkMHEmotionWin;
    v14 = (double)PgWin::ms_iMsX.x;
    v15 = (signed int)((double)PgWin::ms_iMsY
                     - (double)(unsigned int)((int (__stdcall *)(int, int))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(
                                               v10,
                                               v9)
                     * 0.5);
    v16 = (signed int)(v14
                     - (double)(unsigned int)((int (__thiscall *)(mhEmotionWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v13)
                     * 0.5);
    ((void (__thiscall *)(mhEmotionWin *))v12[77].__vecDelDtor)(v7->m_pkMHEmotionWin);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v7->m_pkMHEmotionWin->baseclass_0.baseclass_0.baseclass_0);
  }
}
// 493020: could not find valid save-restore pair for ebx
// 493020: could not find valid save-restore pair for edi

//----- (00493100) --------------------------------------------------------
void __thiscall GameFrameWork::MinimizeMHWins(GameFrameWork *this, unsigned int uiwParam)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( uiwParam )
  {
    if ( uiwParam == 1 && PgWin::IsVisible(this->m_pkMHCurrentWin) == 1 )
    {
      if ( v2->m_pkMHCurrentWin )
        ((void (__stdcall *)(_DWORD))v2->m_pkMHCurrentWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkMHMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkMHMinimizeWin->m_bAutoOnOff = 1;
    }
  }
  else
  {
    if ( this->m_pkMHCurrentWin )
      ((void (__stdcall *)(_DWORD))this->m_pkMHCurrentWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkMHMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkMHMinimizeWin->m_bAutoOnOff = 0;
  }
}

//----- (004931A0) --------------------------------------------------------
void __thiscall GameFrameWork::NormalizeMHWins(GameFrameWork *this, unsigned int uiwParam)
{
  GameFrameWork *v2; // edi@1
  PgWin *v3; // ecx@2
  PgWin *v4; // esi@5
  mhEditRoomWin *v5; // ecx@6
  PgWin *v6; // esi@11
  mhGuestBookWin *v7; // ecx@13
  PgWin *v8; // esi@14
  mhEditRoomWin *v9; // ecx@15

  v2 = this;
  if ( uiwParam )
  {
    if ( uiwParam == 1 && this->m_pkMHMinimizeWin->m_bAutoOnOff == 1 )
    {
      v6 = this->m_pkMHCurrentWin;
      if ( v6 )
      {
        if ( !strcmp(v6->baseclass_0.baseclass_0.baseclass_0.m_pcName, "mhGuestBookWin") )
        {
          v7 = (mhGuestBookWin *)v2->m_pkMHCurrentWin;
          LOBYTE(v6[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][0]) = 1;
          mhGuestBookWin::ReGenPos(v7);
        }
        v8 = v2->m_pkMHCurrentWin;
        if ( !strcmp(v8->baseclass_0.baseclass_0.baseclass_0.m_pcName, "mhEditRoomWin") )
        {
          v9 = (mhEditRoomWin *)v2->m_pkMHCurrentWin;
          LOBYTE(v8[12].baseclass_0.m_kEffectList.baseclass_0.baseclass_0.vfptr) = 1;
          mhEditRoomWin::ReGenPos(v9);
        }
        ((void (__stdcall *)(_DWORD))v2->m_pkMHCurrentWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkMHMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkMHMinimizeWin->m_bAutoOnOff = 0;
    }
  }
  else
  {
    v3 = this->m_pkMHCurrentWin;
    if ( v3 )
    {
      if ( !strcmp(v3->baseclass_0.baseclass_0.baseclass_0.m_pcName, "mhGuestBookWin") )
      {
        LOBYTE(v3[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][0]) = 1;
        mhGuestBookWin::ReGenPos((mhGuestBookWin *)v3);
      }
      v4 = v2->m_pkMHCurrentWin;
      if ( !strcmp(v4->baseclass_0.baseclass_0.baseclass_0.m_pcName, "mhEditRoomWin") )
      {
        v5 = (mhEditRoomWin *)v2->m_pkMHCurrentWin;
        LOBYTE(v4[12].baseclass_0.m_kEffectList.baseclass_0.baseclass_0.vfptr) = 1;
        mhEditRoomWin::ReGenPos(v5);
      }
      ((void (__stdcall *)(_DWORD))v2->m_pkMHCurrentWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkMHMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00493360) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenGuildTournamentStorage(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  GuildTournamentStorageWin *v2; // eax@3
  PgWin *v3; // eax@3

  v1 = this;
  InventoryWin::ms_uiMode = 4;
  if ( !(unsigned __int8)((int (*)(void))this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OpenInventoryWin(v1);
  v2 = GuildTask::GetGuildTournamentStorageWin();
  GuildTournamentStorageWin::ResetContents(v2);
  v3 = (PgWin *)GuildTask::GetGuildTournamentStorageWin();
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004933B0) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseGTStorageWin(GameFrameWork *this)
{
  PgWin *v1; // eax@1

  v1 = (PgWin *)GuildTask::GetGuildTournamentStorageWin();
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004933D0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenGuildAcademyStorage(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  GuildAcademyStorageWin *v2; // eax@1
  PgWin *v3; // eax@4

  v1 = this;
  v2 = GuildAcademyTask::GetGuildAcademyStorageWin();
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    InventoryWin::ms_uiMode = 5;
    if ( !(unsigned __int8)((int (*)(void))v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      GameFrameWork::OpenInventoryWin(v1);
    v3 = (PgWin *)GuildAcademyTask::GetGuildAcademyStorageWin();
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00493420) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseGuildAcademyStorage(GameFrameWork *this)
{
  PgWin *v1; // eax@1

  v1 = (PgWin *)GuildAcademyTask::GetGuildAcademyStorageWin();
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00493440) --------------------------------------------------------
void __thiscall GameFrameWork::OpenMHRepairWin(GameFrameWork *this, bool b, bool bRepairing)
{
  GameFrameWork *v3; // esi@1
  InventoryWin *v4; // ecx@1
  PgWin *v5; // eax@2

  v3 = this;
  v4 = this->m_pkInventoryWin;
  if ( v4 )
  {
    v5 = (PgWin *)v3->m_pkMHRepairWin;
    if ( v5 )
    {
      if ( b )
      {
        InventoryWin::LockAllItem(v4);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkMHRepairWin->baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v5);
        mhRepairObjWin::RepairEnd(v3->m_pkMHRepairWin);
        if ( !bRepairing )
        {
          if ( nowState == 2 )
          {
            MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_NORMAL);
            MiniHouseIndoor::SetRepairObjID(&g_kWorld.m_MiniHouseIndoorMode, 0xFFFFu);
            mhRepairObjWin::SetRepairObjID(v3->m_pkMHRepairWin, 0xFFFFu);
          }
        }
        InventoryWin::UnLockAllItem(v3->m_pkInventoryWin);
      }
    }
  }
}

//----- (004934E0) --------------------------------------------------------
void __thiscall GameFrameWork::SendMHRepairReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  mhRepairObjWin *v2; // eax@2
  PROTO_NC_ITEM_MH_FURNITURE_ENDURE_KIT_USE_REQ kProto; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkMHRepairWin )
  {
    v2 = this->m_pkMHRepairWin;
    kProto.nFurnitureHnd = v2->m_ID;
    kProto.nInvenSlot = v2->m_nInvenSlot;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x33u, &kProto, 3);
    MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_NORMAL);
    if ( v1->m_pkInventoryWin )
    {
      if ( v1->m_pkMHRepairWin )
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMHRepairWin->baseclass_0.baseclass_0.baseclass_0);
        mhRepairObjWin::RepairEnd(v1->m_pkMHRepairWin);
        InventoryWin::UnLockAllItem(v1->m_pkInventoryWin);
      }
    }
  }
}

//----- (00493570) --------------------------------------------------------
void __thiscall GameFrameWork::OnMapLogInError(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_USER_AVATAR_LIST_REQ kProto; // [sp+Bh] [bp-1h]@2

  v1 = this;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 6u, 0x1Cu, 0, 0);
  NetMgr::SendUserLogOutMsg2WorldMgrServerForCharSelect(&g_kNetMgr);
  v2 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
  v1->m_bBackCharSelect = 1;
  netcmd.protocol = 3103;
  if ( v2 )
  {
    PgNet::AddNetMsg(v2, &netcmd, 2);
    PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
  }
}

//----- (004935D0) --------------------------------------------------------
void __thiscall GameFrameWork::SendAutoPickItemReq(GameFrameWork *this, bool bAutoPickItem)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_CHAR_CLIENT_AUTO_PICK_REQ kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 4284;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.bEnable = bAutoPickItem;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (00493620) --------------------------------------------------------
void __thiscall GameFrameWork::CloseMinimonAutoUseWin(GameFrameWork *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this->m_pkMinimonAutoItemUseWin;
  if ( v1 )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(this->m_pkMinimonAutoItemUseWin) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
  }
}

//----- (00493650) --------------------------------------------------------
int __thiscall GameFrameWork::GetSoulCount(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  TargetWin *v2; // ecx@2
  int result; // eax@3

  v1 = this;
  switch ( Char::GetClass(g_pkMainChar) )
  {
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v2 = v1->m_pkTargetWin;
      if ( !v2 )
        goto $LN1_24;
      result = TargetWin::GetSouldCount(v2);
      break;
    default:
$LN1_24:
      result = 0;
      break;
  }
  return result;
}

//----- (004936B0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenEnchantGemToolTip(GameFrameWork *this, Item *pkItem)
{
  GameFrameWork *v2; // ebx@1
  EnchantGemToolTipWin *v3; // ecx@2
  __int16 v4; // si@2
  __int16 v5; // [sp+4h] [bp-68h]@2
  __int16 v6; // [sp+68h] [bp-4h]@2
  char v7; // [sp+6Ah] [bp-2h]@2

  v2 = this;
  EnchantGemToolTipWin::Clear(this->m_pkEnchantGemToolTipWin);
  if ( pkItem )
  {
    memcpy(&v5, &pkItem->m_kStruct, 0x64u);
    v3 = v2->m_pkEnchantGemToolTipWin;
    v6 = *(_WORD *)((char *)&pkItem->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v7 = BYTE3(pkItem->m_kStruct.itemattr.binditem.portal[9].y);
    v4 = v5;
    if ( v5 != v3->m_ItemID )
    {
      EnchantGemToolTipWin::SetEnchantGemDesc(v3, pkItem);
      v2->m_pkEnchantGemToolTipWin->m_ItemID = v4;
    }
  }
  ((void (__stdcall *)(signed int))v2->m_pkEnchantGemToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (00493720) --------------------------------------------------------
void __thiscall GameFrameWork::OpenPlayGuideWin(GameFrameWork *this, BasicInfoLinkType eType)
{
  GameFrameWork *v2; // esi@1
  PlayGuideWin *v3; // ecx@4

  v2 = this;
  if ( byte_B5BB4D
    && *(_DWORD *)(*(_DWORD *)&this->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * eType) < 0
    && this->m_bGuideViewList )
  {
    GameFrameWork::NcCharNewbieGuideViewSetCmd(this, eType);
    *(_DWORD *)(*(_DWORD *)&v2->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * eType) = eType;
    v3 = v2->m_pkPlayGuideWin;
    if ( v3 )
    {
      PlayGuideWin::SetInfo(v3, eType);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}
// B5BB4D: using guessed type char byte_B5BB4D;

//----- (00493780) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenCollectWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char v2; // al@2
  PgWin *v3; // esi@2
  bool v4; // al@2

  v1 = this;
  if ( this->m_pkCollectWin )
  {
    v2 = ((int (*)(void))this->m_pkCollectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
    v3 = (PgWin *)v1->m_pkCollectWin;
    v4 = v2 == 0;
    if ( v3 )
    {
      if ( v4 )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
      else
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
    }
  }
}

//----- (004937D0) --------------------------------------------------------
bool __thiscall GameFrameWork::GetOpenPlayGuideCheck(GameFrameWork *this, BasicInfoLinkType eType)
{
  return byte_B5BB4D
      && *(_DWORD *)(*(_DWORD *)&this->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * eType) < 0
      && this->m_bGuideViewList;
}
// B5BB4D: using guessed type char byte_B5BB4D;

//----- (00493800) --------------------------------------------------------
void __thiscall GameFrameWork::OnSoloModeKey(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@5
  char *v3; // eax@6
  char *v4; // eax@8
  char *v5; // eax@19
  char *v6; // eax@20

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( unk_AA2801 )
    {
      if ( unk_AA2800 && CNSTimer_Interval::IsRun_GetCount(&stru_AA2804, Timer::ms_fCurTime) )
      {
        CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
        unk_AA2801 = 0;
        v2 = TextData::Get(0x4241667Au);
        GameFrameWork::AddSysMsg(v1, v2);
        GameFrameWork::SendNetMsgZoneMgr(v1, 2u, 0x18u, 0, 0);
        return;
      }
      goto LABEL_6;
    }
    if ( unk_AA2800 )
    {
      if ( nowState
        || g_pkMainChar->m_pkMover && g_pkMainChar->m_uiMoverSlot
        || g_kParty.m_uiTotalMember
        || (unsigned __int8)((int (*)(void))this->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
        || (unsigned __int8)((int (*)(void))v1->m_pkUserTradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
        || PrivateStoreWin::ms_bPrivateStoreWin )
      {
        v6 = TextData::Get(0x304D8A79u);
        GameFrameWork::AddSysMsg(v1, v6);
      }
      else
      {
        if ( !v1->m_bPlayPuzzle )
        {
          if ( !unk_AA2800 || !CNSTimer_Interval::IsRun_GetCount(&stru_AA2804, Timer::ms_fCurTime) )
          {
LABEL_6:
            v3 = TextData::Get(0x533C1A49u);
            GameFrameWork::AddSysMsg(v1, v3);
            return;
          }
          CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
          CharMgr::RemoveAllWithoutMainCharAndNPC(&g_kCharMgr);
          unk_AA2801 = 1;
          v5 = TextData::Get(0xFFF32441u);
          GameFrameWork::AddSysMsg(v1, v5);
          GameFrameWork::SendNetMsgZoneMgr(v1, 2u, 0x17u, 0, 0);
          CMiniHouseMgr::RemoveAll((CMiniHouseMgr *)&g_kMiniHouseMgr, 1);
        }
      }
    }
    else
    {
      v4 = TextData2::Get(0x416E3648u);
      GameFrameWork::AddSysMsg(v1, v4);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (004939D0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenRestHouseKey(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@2
  char *v3; // eax@6
  unsigned int v4; // eax@9
  AbStateInfecteeVtbl *v5; // edx@9
  GameFrameWork::SkillCastState v6; // eax@10
  NiPoint3 *v7; // eax@13
  char *v8; // eax@18
  char v9; // al@20
  char *v10; // eax@22
  char *v11; // eax@24
  char *v12; // eax@27
  char *v13; // eax@31

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    v2 = TextData2::Get(0x3AB2967Cu);
    GameFrameWork::AddSysMsg(v1, v2);
    return;
  }
  if ( (Char::IsEnableSpectral(g_pkMainChar) || !((int (*)(void))g_pkMainChar->baseclass_0.vfptr->IsVisible)())
    && !AbStateInfectee::FindNomalAbstate(&g_pkMainChar->baseclass_0, STA_GTIHIDE) )
  {
    v3 = TextData2::Get(0x9FAA738Fu);
    GameFrameWork::AddSysMsg(v1, v3);
    return;
  }
  if ( !EditWin::ms_pkCurEditWin )
  {
    if ( dwPrevTimeWhenHouseChanged + 2000 < timeGetTime() )
    {
      v4 = timeGetTime();
      v5 = g_pkMainChar->baseclass_0.vfptr;
      dwPrevTimeWhenHouseChanged = v4;
      if ( (unsigned __int8)((int (*)(void))v5[1].Deaffect)() )
      {
        v6 = v1->m_kSkillCasting.eState;
        if ( v6 != 2 )
        {
          if ( v6 == 3 )
          {
            if ( Char::GetReserveSkillSmash(g_pkMainChar) )
              return;
            v7 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
            GameFrameWork::NcActStopReq(v1, v7);
            GameFrameWork::NcBatSkillbashCastabortReq(v1);
            Char::CancelSkillAction(g_pkMainChar, 1);
          }
          if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
            && !Char::IsActGathering(g_pkMainChar)
            && !Char::IsActProducing(g_pkMainChar) )
          {
            if ( JumpProcessor::IsJump(&g_pkMainChar->m_kJumpProcessor) )
            {
              v8 = TextData::Get(0xA6A1809Eu);
              GameFrameWork::AddSysMsg(v1, v8);
            }
            else
            {
              if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)()
                && (v9 = g_pkMainChar->m_byMode, v9 != 4)
                && v9 != 5 )
              {
                v10 = TextData::Get(0x9BAA7AA1u);
                GameFrameWork::AddSysMsg(v1, v10);
              }
              else
              {
                if ( (unsigned __int8)((int (*)(void))v1->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
                {
                  v11 = TextData::Get(0xAAA37ADEu);
                  GameFrameWork::AddSysMsg(v1, v11);
                }
                else
                {
                  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount <= 0 )
                  {
                    if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount <= 0
                      && !GameFrameWork::IsPlayCardOpen(v1) )
                    {
                      if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() )
                      {
                        v13 = TextData3::Get(0xBDDEF0E7u);
                        GameFrameWork::AddSysMsg(v1, v13);
                      }
                      else
                      {
                        if ( g_pkMainChar->m_byMode == 4 )
                        {
                          GameFrameWork::NcActFoldTentCmd(v1);
                        }
                        else
                        {
                          ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
                          Char::SetMode(g_pkMainChar, 4);
                          GameFrameWork::OpenPlayGuideWin(v1, BIL_MINIHOUSE_1);
                          GameFrameWork::NcActPitchtentCmd(v1);
                        }
                      }
                    }
                  }
                  else
                  {
                    v12 = TextData2::Get(0x786078BDu);
                    GameFrameWork::AddSysMsg(v1, v12);
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

//----- (00493C60) --------------------------------------------------------
void __thiscall GameFrameWork::SetOptionResolution(GameFrameWork *this, unsigned int uiParam)
{
  GameFrameWork *v2; // esi@1
  unsigned int v3; // eax@2
  unsigned int v4; // ecx@2

  v2 = this;
  GameFrameWork::ms_bWindowSizeChanged = 1;
  switch ( uiParam )
  {
    case 0u:
      v3 = 800;
      v4 = 600;
      break;
    case 2u:
      v3 = 1280;
      goto LABEL_21;
    case 3u:
      v3 = 1280;
      v4 = 960;
      break;
    case 4u:
      v3 = 1280;
      v4 = 1024;
      break;
    case 5u:
      v3 = 1400;
      v4 = 1050;
      break;
    case 6u:
      v3 = 1600;
      v4 = 1200;
      break;
    case 7u:
    case 0xCu:
      v3 = 1600;
      v4 = 900;
      break;
    case 8u:
      v3 = 1920;
      v4 = 1440;
      break;
    case 9u:
      v3 = 1920;
      v4 = 1200;
      break;
    case 0xAu:
      v3 = 1680;
      v4 = 1050;
      break;
    case 0xBu:
      v3 = 1280;
      v4 = 800;
      break;
    case 0xDu:
      v3 = 1440;
      v4 = 900;
      break;
    case 0xEu:
      v3 = 1920;
      v4 = 1080;
      break;
    case 0xFu:
      v3 = 2560;
      v4 = 1440;
      break;
    case 0x10u:
      v3 = 2560;
      v4 = 1600;
      break;
    case 0x11u:
      v3 = 3840;
      v4 = 2160;
      break;
    case 0x12u:
      v3 = 1366;
      goto LABEL_21;
    case 0x13u:
      v3 = 3440;
      v4 = 1440;
      break;
    default:
      v3 = 1024;
LABEL_21:
      v4 = 768;
      break;
  }
  GameFrameWork::ms_uiDisResWidth = v3;
  GameFrameWork::ms_uiDisResHeight = v4;
  dword_A826F2 = v3;
  dword_A826F6 = v4;
  OptionGraphicWin::SetResoulution(v2->m_pkOptionGraphicWin, v3, v4);
  GameFrameWork::RegistereWinPostion(v2);
}
// A826F2: using guessed type int dword_A826F2;
// A826F6: using guessed type int dword_A826F6;
// A987C5: using guessed type bool GameFrameWork__ms_bWindowSizeChanged;

//----- (00493DF0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenInventoryWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkInventoryWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    else
      GameFrameWork::OpenInventoryWin(v1);
  }
}

//----- (00493E30) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenActionWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PlayGuideWin *v2; // ecx@8

  v1 = this;
  if ( this->m_pkActionWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkActionWin->baseclass_0.baseclass_0.baseclass_0);
    if ( byte_B5BB4D
      && *(_DWORD *)(*(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] + 464) < 0
      && v1->m_bGuideViewList )
    {
      GameFrameWork::NcCharNewbieGuideViewSetCmd(v1, 116);
      *(_DWORD *)(*(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] + 464) = 116;
      v2 = v1->m_pkPlayGuideWin;
      if ( v2 )
      {
        PlayGuideWin::SetInfo(v2, BIL_EMOTION_1);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkPlayGuideWin->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}
// B5BB4D: using guessed type char byte_B5BB4D;

//----- (00493EE0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMHConfigRoomInfoWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    v2 = TextData2::Get(0xDCEC2C18u);
    GameFrameWork::AddSysMsg(v1, v2);
  }
  else
  {
    if ( !nowState )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMHJoinWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00493F30) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMHInputPassWordWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  mhInputPassWordWin *v2; // eax@1

  v1 = this;
  v2 = this->m_pkMHInputPassWordWin;
  if ( v2 )
  {
    ((void (*)(void))v2->m_spRoomPassWord.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
    if ( (unsigned __int8)((int (*)(void))v1->m_pkMHInputPassWordWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMHInputPassWordWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMHInputPassWordWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00493F90) --------------------------------------------------------
void __thiscall GameFrameWork::OnArrToInvMHItem(GameFrameWork *this)
{
  GameFrameWork *v1; // ebx@1
  mhEditRoomWin *v2; // eax@1
  ItemIcon *v3; // ecx@2
  Item *v4; // eax@3
  int v5; // esi@5
  mhObject *v6; // eax@6
  NiNode *v7; // eax@6
  char *v8; // eax@9
  unsigned __int16 v9; // [sp+18h] [bp-74h]@5
  unsigned __int16 v10; // [sp+1Bh] [bp-71h]@5
  float v11; // [sp+2Dh] [bp-5Fh]@5
  __int16 v12; // [sp+7Ch] [bp-10h]@5
  char v13; // [sp+7Eh] [bp-Eh]@5
  NiPoint3 Pos; // [sp+80h] [bp-Ch]@5

  v1 = this;
  v2 = this->m_pkMHEditRoomWin;
  if ( v2 )
  {
    v3 = (ItemIcon *)v2->m_pkWorkTargetWin;
    if ( v3 )
    {
      v4 = ItemIcon::GetItem(v3);
      if ( v4 )
      {
        if ( (signed int)nowState < 1 )
        {
          v8 = TextData2::Get(0x99C1A5FEu);
          GameFrameWork::AddSysMsg(v1, v8);
        }
        else
        {
          memcpy(&v9, &v4->m_kStruct, 0x64u);
          v12 = *(_WORD *)((char *)&v4->m_kStruct.itemattr.binditem.portal[9].y + 1);
          v13 = BYTE3(v4->m_kStruct.itemattr.binditem.portal[9].y);
          MiniHouseIndoor::CancelPickObj(&g_kWorld.m_MiniHouseIndoorMode);
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
          PgFrameWork::AddMsg(&v1->baseclass_0, 0xE0u, 1u, 0);
          Pos.x = -100.0;
          v5 = v10;
          Pos.y = -100.0;
          Pos.z = -100.0;
          if ( MiniHouseIndoor::AddObject(&g_kWorld.m_MiniHouseIndoorMode, v10, v9, &Pos, v11, 0, 1) == 1 )
          {
            v6 = mhObjectManager::GetObjectA(&stru_AA4FA8, v5);
            v7 = ResElement::GetNiNode(v6->m_pkResource);
            MiniHouseIndoor::SetPickedObj(
              &g_kWorld.m_MiniHouseIndoorMode,
              &v7->baseclass_0,
              MH_STATE_EDIT_OBJ_PICKED,
              1);
          }
          else
          {
            MiniHouseIndoor::CancelPickObj(&g_kWorld.m_MiniHouseIndoorMode);
            PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
          }
        }
      }
    }
  }
}

//----- (004940B0) --------------------------------------------------------
void __thiscall GameFrameWork::ReArrangeMHObj(GameFrameWork *this, mhObject *pkObj)
{
  GameFrameWork *v2; // esi@1
  ResElement *v3; // eax@2
  NiActorManager *v4; // ecx@3
  NiAVObject *v5; // eax@4

  v2 = this;
  if ( pkObj )
  {
    MiniHouseIndoor::CancelPickObj(&g_kWorld.m_MiniHouseIndoorMode);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
    v3 = pkObj->m_pkResource;
    if ( v3->m_bIsCanAnimation && (v4 = v3->m_pActorMgr.m_pObject) != 0 )
      v5 = v4->m_spNIFRoot.m_pObject;
    else
      v5 = (NiAVObject *)v3->m_pNiNode.m_pObject;
    MiniHouseIndoor::SetPickedObj(&g_kWorld.m_MiniHouseIndoorMode, v5, MH_STATE_EDIT_OBJ_PICKED, 0);
    PgFrameWork::AddMsg(&v2->baseclass_0, 0xE0u, 1u, 0);
  }
}

//----- (00494120) --------------------------------------------------------
void __thiscall GameFrameWork::SendDelMHObjReq(GameFrameWork *this, bool ClickInv)
{
  GameFrameWork *v2; // esi@1
  mhEditRoomWin *v3; // eax@1
  ItemIcon *v4; // ecx@4
  Item *v5; // eax@5
  char *v6; // eax@9
  char v7; // [sp+4h] [bp-68h]@6
  unsigned __int16 v8; // [sp+7h] [bp-65h]@6
  __int16 v9; // [sp+68h] [bp-4h]@6
  char v10; // [sp+6Ah] [bp-2h]@6

  v2 = this;
  v3 = this->m_pkMHEditRoomWin;
  if ( v3 )
  {
    if ( (signed int)nowState < 1 )
    {
      v6 = TextData2::Get(0x99C1A5FEu);
      GameFrameWork::AddSysMsg(v2, v6);
    }
    else
    {
      if ( ClickInv == 1 )
      {
        v4 = (ItemIcon *)v3->m_pkWorkTargetWin;
        if ( v4 )
        {
          v5 = ItemIcon::GetItem(v4);
          if ( v5 )
          {
            memcpy(&v7, &v5->m_kStruct, 0x64u);
            v9 = *(_WORD *)((char *)&v5->m_kStruct.itemattr.binditem.portal[9].y + 1);
            v10 = BYTE3(v5->m_kStruct.itemattr.binditem.portal[9].y);
            mhGameMainConnectMgr::SendDelObjReq(dword_AA4FE8, v8);
          }
        }
      }
      else
      {
        if ( pkObj )
          mhGameMainConnectMgr::SendDelObjReq(dword_AA4FE8, pkObj->m_iGUID);
      }
    }
  }
}

//----- (004941C0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMiniHouseMenuWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@5

  v1 = this;
  if ( this->m_pkMiniHouseMenuWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkMiniHouseMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMiniHouseMenuWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( (signed int)nowState <= 0 )
        v2 = TextData::Get(0xFAF63B39u);
      else
        v2 = TextData2::Get(0xFA4A423Fu);
      MiniHouseMenuWin::SetMHJoinText(v1->m_pkMiniHouseMenuWin, v2);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMiniHouseMenuWin->baseclass_0.baseclass_0.baseclass_0);
      GameFrameWork::OpenPlayGuideWin(v1, BIL_MINIHOUSE_1);
    }
  }
}

//----- (00494240) --------------------------------------------------------
void __thiscall GameFrameWork::OnGoBeautyShop(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  NiPoint3 *v2; // eax@5
  NiPoint3 *v3; // eax@6
  PgNet *v4; // ecx@6
  char *v5; // eax@8
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@7

  v1 = this;
  if ( AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) > 0 )
  {
    GameFrameWork::NcBatBashstopCmd(v1);
    AttackSequenceManager::HardStopAttack(&g_pkMainChar->baseclass_54);
  }
  if ( v1->m_kSkillCasting.eState == 3 && !Char::GetReserveSkillSmash(g_pkMainChar) )
  {
    v2 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v1, v2);
    GameFrameWork::NcBatSkillbashCastabortReq(v1);
    Char::CancelSkillAction(g_pkMainChar, 1);
  }
  ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  v3 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  GameFrameWork::NcActStopReq(v1, v3);
  v4 = (PgNet *)v1->m_spZoneNet.m_pObject;
  if ( v4 )
  {
    netcmd.protocol = 3122;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    NetMgr::SendUserLogOutMsg2WorldMgrServerForCharSelect(&g_kNetMgr);
    v1->m_bBackCharSelect = 1;
    Skill::ClearLearnSkill();
    Skill::ClearLearnPassiveSkill();
    GameFrameWork::OnSaveServerShortCutDataOption(v1);
    GameFrameWork::OnSaveServerShortCutSizeOption(v1);
    GameFrameWork::OnSaveServerWindowPosOption(v1);
    GameFrameWork::OnSaveServerKeyRemappingOption(v1);
    GameFrameWork::OnSaveServerGameOption(v1);
    AbStateInfectee::ClearAbState(&g_pkMainChar->baseclass_0, 0);
    PgFrameWork::PostFrameMsgChange(&v1->baseclass_0, CHairShopFrameWorkID, 0);
  }
  else
  {
    v5 = TextData::Get(0xCBCED23Au);
    GameFrameWork::AddSysMsg(v1, v5);
  }
}

//----- (00494390) --------------------------------------------------------
void __thiscall GameFrameWork::OnGoCharSelect(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  bool v5; // bl@6
  int v6; // edi@7
  char *v7; // eax@11
  NiPoint3 *v8; // eax@18
  NiPoint3 *v9; // eax@19
  int v10; // [sp+0h] [bp-14h]@6
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v12 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2);
  v12 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( v3 )
  {
    v5 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject->m_eDiceGameMode != 4;
    if ( v10 )
    {
      v6 = v10;
      if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    if ( v5 )
    {
      v7 = TextData2::Get(0x2D9F6D95u);
      GameFrameWork::AddSysMsg(v1, v7);
    }
  }
  else
  {
    if ( Char::IsActGathering(g_pkMainChar) )
      ITask::DirectDispatchAll(32, 0);
    StatusWin::SetStoneAlarmEnable(v1->m_pkStatusWin, 0);
    if ( AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) > 0 )
    {
      GameFrameWork::NcBatBashstopCmd(v1);
      AttackSequenceManager::HardStopAttack(&g_pkMainChar->baseclass_54);
    }
    if ( v1->m_kSkillCasting.eState == 3 && !Char::GetReserveSkillSmash(g_pkMainChar) )
    {
      v8 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      GameFrameWork::NcActStopReq(v1, v8);
      GameFrameWork::NcBatSkillbashCastabortReq(v1);
      Char::CancelSkillAction(g_pkMainChar, 1);
    }
    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v9 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v1, v9);
    WaitingForLogoutWin::SetLogoutType(v1->m_pkWaitingForLogoutWin, LT_CHARSELECT);
    WaitingForLogoutWin::SetKeyMap(v1->m_pkWaitingForLogoutWin, v1->m_spKeyMap.m_pObject);
    PgWinMgr::ShowWinAtAbsoluteNear(&Pgg_kWinMgr, &v1->m_pkWaitingForLogoutWin->baseclass_0);
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x71u, 0, 0);
  }
}

//----- (004945A0) --------------------------------------------------------
void __thiscall GameFrameWork::OnLogout(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  bool v5; // bl@6
  int v6; // edi@7
  char *v7; // eax@11
  NiPoint3 *v8; // eax@18
  NiPoint3 *v9; // eax@19
  int v10; // [sp+0h] [bp-14h]@6
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v12 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2);
  v12 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( v3 )
  {
    v5 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject->m_eDiceGameMode != 4;
    if ( v10 )
    {
      v6 = v10;
      if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    if ( v5 )
    {
      v7 = TextData2::Get(0x2D9F6D95u);
      GameFrameWork::AddSysMsg(v1, v7);
    }
  }
  else
  {
    if ( Char::IsActGathering(g_pkMainChar) )
      ITask::DirectDispatchAll(32, 0);
    StatusWin::SetStoneAlarmEnable(v1->m_pkStatusWin, 0);
    if ( AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) > 0 )
    {
      GameFrameWork::NcBatBashstopCmd(v1);
      AttackSequenceManager::HardStopAttack(&g_pkMainChar->baseclass_54);
    }
    if ( v1->m_kSkillCasting.eState == 3 && !Char::GetReserveSkillSmash(g_pkMainChar) )
    {
      v8 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      GameFrameWork::NcActStopReq(v1, v8);
      GameFrameWork::NcBatSkillbashCastabortReq(v1);
      Char::CancelSkillAction(g_pkMainChar, 1);
    }
    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v9 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v1, v9);
    WaitingForLogoutWin::SetLogoutType(v1->m_pkWaitingForLogoutWin, 0);
    WaitingForLogoutWin::SetKeyMap(v1->m_pkWaitingForLogoutWin, v1->m_spKeyMap.m_pObject);
    PgWinMgr::ShowWinAtAbsoluteNear(&Pgg_kWinMgr, &v1->m_pkWaitingForLogoutWin->baseclass_0);
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x71u, 0, 0);
    GameFrameWork::OnSaveServerShortCutDataOption(v1);
    GameFrameWork::OnSaveServerShortCutSizeOption(v1);
    GameFrameWork::OnSaveServerWindowPosOption(v1);
    GameFrameWork::OnSaveServerKeyRemappingOption(v1);
    GameFrameWork::OnSaveServerGameOption(v1);
    MachineOpt::SaveUserInfo();
  }
}

//----- (004947D0) --------------------------------------------------------
void __thiscall GameFrameWork::OnExit(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // edi@2
  bool v5; // bl@6
  int v6; // edi@7
  char *v7; // eax@11
  NiPoint3 *v8; // eax@18
  NiPoint3 *v9; // eax@19
  int v10; // [sp+0h] [bp-14h]@6
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v12 = 0;
  v3 = MHDiceGameTask::IsDicegamePlaying(v2);
  v12 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( v3 )
  {
    v5 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject->m_eDiceGameMode != 4;
    if ( v10 )
    {
      v6 = v10;
      if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    if ( v5 )
    {
      v7 = TextData2::Get(0x2D9F6D95u);
      GameFrameWork::AddSysMsg(v1, v7);
    }
  }
  else
  {
    if ( Char::IsActGathering(g_pkMainChar) )
      ITask::DirectDispatchAll(32, 0);
    StatusWin::SetStoneAlarmEnable(v1->m_pkStatusWin, 0);
    if ( AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) > 0 )
    {
      GameFrameWork::NcBatBashstopCmd(v1);
      AttackSequenceManager::HardStopAttack(&g_pkMainChar->baseclass_54);
    }
    if ( v1->m_kSkillCasting.eState == 3 && !Char::GetReserveSkillSmash(g_pkMainChar) )
    {
      v8 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      GameFrameWork::NcActStopReq(v1, v8);
      GameFrameWork::NcBatSkillbashCastabortReq(v1);
      Char::CancelSkillAction(g_pkMainChar, 1);
    }
    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v9 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v1, v9);
    WaitingForLogoutWin::SetLogoutType(v1->m_pkWaitingForLogoutWin, LT_EXIT);
    WaitingForLogoutWin::SetKeyMap(v1->m_pkWaitingForLogoutWin, v1->m_spKeyMap.m_pObject);
    PgWinMgr::ShowWinAtAbsoluteNear(&Pgg_kWinMgr, &v1->m_pkWaitingForLogoutWin->baseclass_0);
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x71u, 0, 0);
    GameFrameWork::OnSaveServerShortCutDataOption(v1);
    GameFrameWork::OnSaveServerShortCutSizeOption(v1);
    GameFrameWork::OnSaveServerWindowPosOption(v1);
    GameFrameWork::OnSaveServerKeyRemappingOption(v1);
    GameFrameWork::OnSaveServerGameOption(v1);
    MachineOpt::SaveUserInfo();
  }
}

//----- (00494A00) --------------------------------------------------------
bool __thiscall GameFrameWork::OnShortCutRClickItemUseMode(GameFrameWork *this, Item *pkItem, ShortCutItem *pkSenderShortCut, unsigned int uiUser)
{
  unsigned int v4; // edi@1
  GameFrameWork *v5; // esi@1
  unsigned int v7; // eax@4
  Item *v8; // ecx@5
  ActionEffectItem *v9; // eax@10
  InventoryWin *v10; // ecx@12
  char *v11; // eax@14

  v4 = 0;
  v5 = this;
  if ( !pkItem || !pkItem->m_pkInfo )
    return 0;
  v7 = 0;
  while ( 1 )
  {
    v8 = g_kInventory.m_aspEquip[v7].m_pObject;
    if ( v8 )
    {
      if ( pkItem->m_kStruct.itemid == v8->m_kStruct.itemid )
        break;
    }
    ++v7;
    if ( v7 >= 0x1E )
      goto LABEL_10;
  }
  v4 = v7;
LABEL_10:
  v9 = ActionEffectItemTab::GetByItemID(pkItem->m_kStruct.itemid);
  if ( v9 )
  {
    if ( Skill::IsSkillUsePossibleByItemActionID(v9->ItemActionID) )
    {
      v10 = v5->m_pkInventoryWin;
      if ( v10 )
      {
        InventoryWin::UseEquipedItem(v10, v4);
        return 1;
      }
    }
    else
    {
      v11 = TextData::Get(0x85F7D6D1u);
      GameFrameWork::AddSysMsg(v5, v11);
    }
  }
  return 1;
}

//----- (00494AA0) --------------------------------------------------------
void __thiscall GameFrameWork::OnShortCutRClickItemNormalMode(GameFrameWork *this, Item *pkItem, ShortCutItem *pkSenderShortCut, unsigned int uiUser)
{
  unsigned int v4; // eax@3
  Item *v5; // edx@4
  unsigned int v6; // eax@7
  Item *v7; // edx@8
  InventoryWin *v8; // ecx@13

  if ( pkItem && pkItem->m_pkInfo )
  {
    v4 = 0;
    do
    {
      v5 = g_kInventory.m_aspEquip[v4].m_pObject;
      if ( v5 && pkItem->m_kStruct.itemid == v5->m_kStruct.itemid )
      {
        InventoryWin::OnEquipRClick(this->m_pkInventoryWin, v4);
        return;
      }
      ++v4;
    }
    while ( v4 < 0x1E );
    v6 = 0;
    while ( 1 )
    {
      v7 = g_kInventory.m_aspInv[v6].m_pObject;
      if ( v7 )
      {
        if ( pkItem->m_kStruct.itemid == v7->m_kStruct.itemid )
          break;
      }
      ++v6;
      if ( v6 >= 0xC0 )
        return;
    }
    v8 = this->m_pkInventoryWin;
    if ( v8 )
      InventoryWin::OnInvRClick(v8, v6, uiUser);
  }
}

//----- (00494B30) --------------------------------------------------------
void __thiscall GameFrameWork::OnShortCutRClickItemNormalMode(GameFrameWork *this, Item *pkItem, ShortCutInvPosItem *pkSenderShortCut, unsigned int uiUser)
{
  unsigned int v4; // eax@1
  InventoryWin *v5; // ecx@3

  v4 = pkSenderShortCut->m_uiInvPos;
  if ( v4 < 0xC0 && g_kInventory.m_aspInv[v4].m_pObject )
  {
    v5 = this->m_pkInventoryWin;
    if ( v5 )
      InventoryWin::OnInvRClick(v5, v4, uiUser);
  }
}

//----- (00494B70) --------------------------------------------------------
void __thiscall GameFrameWork::ChangeMoveMode(GameFrameWork *this, int nMode)
{
  if ( nMode )
  {
    if ( nMode == 1 )
      GameFrameWork::ChangeWalk(this);
  }
  else
  {
    GameFrameWork::ChangeRun(this);
  }
}

//----- (00494BA0) --------------------------------------------------------
void __thiscall GameFrameWork::OnWalkOrRun_Key(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  Mover *v2; // ecx@15
  Char *v3; // ecx@20
  Mover *v4; // eax@20
  Char *v5; // ecx@27
  Mover *v6; // eax@27
  char *v7; // eax@33

  v1 = this;
  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)() > 0
    && !AttackSequenceManager::IsDuringAttackInServer(&g_pkMainChar->baseclass_54)
    && AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) <= 0
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)()
    && !Char::IsActGathering(g_pkMainChar)
    && !Char::IsActProducing(g_pkMainChar)
    && Char::IsMoverMovable(g_pkMainChar)
    && !EditWin::ms_pkCurEditWin
    && ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() != 4
    && g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount <= 0
    && g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount <= 0 )
  {
    if ( !((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].Affect)() )
    {
      if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() )
      {
        v2 = g_pkMainChar->m_pkMover;
        if ( v2 )
        {
          if ( !Mover::IsFeed(v2) || v1->m_pkFeedMoverWin->m_uiHungryPoint )
            goto LABEL_20;
LABEL_25:
          if ( User::Lv(&g_kUser) <= 0x14 )
            PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMoveBtnWin->baseclass_0.baseclass_0.baseclass_0);
          return;
        }
        if ( v1->m_pkRidePetWin->m_nHungryPoint <= 0 )
          goto LABEL_25;
      }
LABEL_20:
      ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(1);
      v3 = g_pkMainChar;
      v4 = g_pkMainChar->m_pkMover;
      if ( v4 && !g_pkMainChar->m_uiMoverSlot )
      {
        ((void (__thiscall *)(_DWORD, _DWORD))v4->baseclass_0.baseclass_0.vfptr[7].Deaffect)(g_pkMainChar->m_pkMover, 1);
        v3 = g_pkMainChar;
      }
      if ( !Char::CheckActState(v3, 100000) )
        GameFrameWork::UpdateMainCharOnRevActPickGround(v1, Timer::ms_fCurTime, 1);
      goto LABEL_25;
    }
    ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(0);
    v5 = g_pkMainChar;
    v6 = g_pkMainChar->m_pkMover;
    if ( v6 && !g_pkMainChar->m_uiMoverSlot )
    {
      ((void (__thiscall *)(_DWORD, _DWORD))v6->baseclass_0.baseclass_0.vfptr[7].Deaffect)(g_pkMainChar->m_pkMover, 0);
      v5 = g_pkMainChar;
    }
    if ( !Char::CheckActState(v5, 100000) )
      GameFrameWork::UpdateMainCharOnRevActPickGround(v1, Timer::ms_fCurTime, 1);
    if ( User::Lv(&g_kUser) <= 0x14 )
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMoveBtnWin->baseclass_0.baseclass_0.baseclass_0);
      v7 = TextData2::Get(0xACA48DFDu);
      GameFrameWork::AddSysMsg(v1, v7);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00494E10) --------------------------------------------------------
void __thiscall GameFrameWork::OnNearMobSelect(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  unsigned int v2; // esi@2
  int v3; // eax@6
  int v4; // edx@6
  int v5; // ecx@6
  Char *v6; // ecx@12
  int v7; // eax@15
  int v8; // edx@15
  int v9; // ecx@15
  int v10; // esi@15
  Char *v11; // ecx@19

  v1 = this;
  if ( this->m_spBlindEffect.m_pObject->m_IsRunBlindEffect )
    return;
  v2 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  if ( !v2
    || Char::GetClass((Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0])
    || Char::IsNPC((Char *)v2)
    || *(_BYTE *)(v2 + 2488) )
  {
    v3 = dword_AA5178;
    v4 = dword_AA5174;
  }
  else
  {
    v3 = dword_AA5178;
    v4 = dword_AA5174;
    v5 = s_nSelNum;
    if ( s_nSelNum < (dword_AA5178 - dword_AA5174) >> 2 && s_nSelNum < 5 )
      goto LABEL_11;
  }
  v5 = 0;
  s_nSelNum = 0;
LABEL_11:
  if ( v5 < (v3 - v4) >> 2 )
    v6 = *(Char **)(v4 + 4 * v5);
  else
    v6 = 0;
  if ( CharMgr::GetChar(&g_kCharMgr, v6) )
  {
    v7 = dword_AA5178;
    v8 = dword_AA5174;
    v9 = s_nSelNum;
    v10 = (dword_AA5178 - dword_AA5174) >> 2;
    if ( s_nSelNum < v10 )
    {
      while ( 1 )
      {
        v11 = (Char *)(v9 < (v7 - v8) >> 2 ? *(_DWORD *)(v8 + 4 * v9) : 0);
        if ( GameFrameWork::OnOnePickChar(v1, v11) == 1 )
          break;
        v9 = s_nSelNum + 1;
        s_nSelNum = v9;
        if ( v9 >= (unsigned int)v10 )
          return;
        v7 = dword_AA5178;
        v8 = dword_AA5174;
      }
      ++s_nSelNum;
    }
  }
}
// AA5174: using guessed type int dword_AA5174;
// AA5178: using guessed type int dword_AA5178;

//----- (00494F20) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenPrivateStoreWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@2
  char *v3; // eax@4
  char *v4; // eax@9
  MsgBox *v5; // eax@9
  PgMsg::Frame kBuyMsg; // [sp+4h] [bp-54h]@9
  PgMsg::Frame kCloseMsg; // [sp+18h] [bp-40h]@9
  PgMsg::Frame kSellMsg; // [sp+2Ch] [bp-2Ch]@9
  PgMsg::Frame kSearchMsg; // [sp+40h] [bp-18h]@9
  unsigned int v10; // [sp+54h] [bp-4h]@1
  int v11; // [sp+58h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v1 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    v2 = TextData2::Get(0x3AB2967Cu);
    GameFrameWork::AddSysMsg(v1, v2);
  }
  else
  {
    GameFrameWork::TargetCharReq(v1, g_pkMainChar);
    if ( unk_AA2801 )
    {
      v3 = TextData::Get(0x9B756275u);
      GameFrameWork::AddSysMsg(v1, v3);
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].Deaffect)() )
      {
        if ( (unsigned __int8)((int (*)(void))v1->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
        }
        else
        {
          if ( !PrivateStoreWin::ms_bPrivateStoreWin )
          {
            v4 = TextData::Get(0x42325082u);
            v5 = MsgBox::Modeless(MSGBOX_PRIVATESOTRE_BUY_SELL, v4);
            kBuyMsg.m_uiFrameMsg = 164;
            kSellMsg.m_uiFrameMsg = 165;
            kSearchMsg.m_uiFrameMsg = 166;
            kCloseMsg.m_uiFrameMsg = 167;
            MsgBox::SetFrameWorkMsgOnPrivateStore(v5, &v1->baseclass_0, &kBuyMsg, &kSellMsg, &kSearchMsg, &kCloseMsg);
            GameFrameWork::OpenPlayGuideWin(v1, BIL_MINIHOUSE_6);
            PrivateStoreWin::ms_bPrivateStoreWin = 1;
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (00495060) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenPrivateStoreWinBuy(GameFrameWork *this)
{
  int v1; // edi@0
  GameFrameWork *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@13
  int v4; // [sp+0h] [bp-4h]@0

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    PrivateStoreWin::ms_bPrivateStoreWin = 0;
  }
  else
  {
    if ( (unsigned __int8)((int (__stdcall *)(int))v2->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1) )
    {
      GameFrameWork::NcActEndOfTrade(v2);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0);
      InventoryWin::ms_uiMode = 0;
    }
    if ( (unsigned __int8)((int (*)(void))v2->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      GameFrameWork::NcActEndOfTrade(v2);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0);
      InventoryWin::ms_uiMode = 0;
    }
    if ( (unsigned __int8)((int (*)(void))v2->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      GameFrameWork::NcActEndOfTrade(v2);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
      InventoryWin::ms_uiMode = 0;
    }
    if ( (unsigned __int8)((int (*)(void))v2->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      GameFrameWork::CloseItemShopWin(v2);
    if ( !(unsigned __int8)((int (*)(void))v2->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      GameFrameWork::OpenInventoryWin(v2);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
    v3 = v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ((void (__stdcall *)(int))v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4);
    ((void (__thiscall *)(PrivateStoreWin *))v3[77].__vecDelDtor)(v2->m_pkPrivateStoreWin);
    PrivateStoreWin::ClearItems(v2->m_pkPrivateStoreWin);
    PrivateStoreWin::SetPrivateStoreMode(v2->m_pkPrivateStoreWin, 3u);
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (004951A0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenPrivateStoreWinSell(GameFrameWork *this)
{
  int v1; // edi@0
  GameFrameWork *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@13
  int v4; // [sp+0h] [bp-4h]@0

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
  {
    PrivateStoreWin::ms_bPrivateStoreWin = 0;
  }
  else
  {
    if ( (unsigned __int8)((int (__stdcall *)(int))v2->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1) )
    {
      GameFrameWork::NcActEndOfTrade(v2);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0);
      InventoryWin::ms_uiMode = 0;
    }
    if ( (unsigned __int8)((int (*)(void))v2->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      GameFrameWork::NcActEndOfTrade(v2);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0);
      InventoryWin::ms_uiMode = 0;
    }
    if ( (unsigned __int8)((int (*)(void))v2->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      GameFrameWork::NcActEndOfTrade(v2);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
      InventoryWin::ms_uiMode = 0;
    }
    if ( (unsigned __int8)((int (*)(void))v2->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      GameFrameWork::CloseItemShopWin(v2);
    if ( !(unsigned __int8)((int (*)(void))v2->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      GameFrameWork::OpenInventoryWin(v2);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
    v3 = v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ((void (__stdcall *)(int))v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4);
    ((void (__thiscall *)(PrivateStoreWin *))v3[77].__vecDelDtor)(v2->m_pkPrivateStoreWin);
    PrivateStoreWin::ClearItems(v2->m_pkPrivateStoreWin);
    PrivateStoreWin::SetPrivateStoreMode(v2->m_pkPrivateStoreWin, 1u);
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (004952E0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenPrivateStoreWinSearch(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@2
  char *v3; // eax@4
  char *v4; // eax@6

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkMarketSearchWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v2 = TextData3::Get(0xAFA677E0u);
    GameFrameWork::AddSysMsg(v1, v2);
  }
  else
  {
    if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)() > 0 )
    {
      if ( MarketSearchWin::DelayTimeCheck(v1->m_pkMarketSearchWin) )
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMarketSearchWin->baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        v4 = TextData3::Get(0xE40B203Cu);
        GameFrameWork::AddSysMsg(v1, v4);
      }
    }
    else
    {
      v3 = TextData3::Get(0xFEFFE637u);
      GameFrameWork::AddSysMsg(v1, v3);
    }
  }
}

//----- (00495370) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenInventoryWinKey(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( !EditWin::ms_pkCurEditWin && this->m_pkInventoryWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
    else
      GameFrameWork::OpenInventoryWin(v1);
  }
}

//----- (004953C0) --------------------------------------------------------
void __thiscall GameFrameWork::OnPauseEmotion(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  unsigned int v2; // eax@5
  char *v3; // eax@6
  unsigned int v4; // eax@8
  char *v5; // eax@9

  v1 = this;
  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() != 4 && !EditWin::ms_pkCurEditWin )
  {
    if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[14].AddAbStateByAbstateIndex)(
                            0,
                            -1.0) )
    {
      ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[14].Deaffect)();
      if ( (float)-1.0 >= 0.0 )
      {
        v2 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[14].Affect)();
        if ( (v2 & 0x80000000u) == 0 )
        {
          v3 = (char *)ActionViewTable::GetByEventCode(v2);
          if ( v3 )
            GameFrameWork::NcActEmoticonStopCmd(v1, *v3, (signed __int64)((float)-1.0 * 1000.0));
        }
      }
    }
    else
    {
      v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[14].Affect)();
      if ( (v4 & 0x80000000u) == 0 )
      {
        v5 = (char *)ActionViewTable::GetByEventCode(v4);
        if ( v5 )
          GameFrameWork::NcActEmoticon_Cmd(v1, *v5);
      }
    }
  }
}

//----- (004954C0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenActionWinKey(GameFrameWork *this)
{
  if ( !EditWin::ms_pkCurEditWin )
    GameFrameWork::OnOpenActionWin(this);
}

//----- (004954D0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCommunityWin(GameFrameWork *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab)
{
  GameFrameWork *v2; // edi@1
  PgWin *v3; // esi@2
  CClientGuild *v4; // eax@3
  CClientGuild *v5; // eax@5
  CClientGuildAcademy *v6; // eax@9
  FriendWin *v7; // ecx@12
  NiRefObjectVtbl *v8; // ebx@12
  int v9; // eax@12
  NiRefObjectVtbl *v10; // ebx@12
  int v11; // eax@12

  v2 = this;
  this->m_iCommunityValue = eTab;
  switch ( eTab )
  {
    case 0:
      v3 = (PgWin *)this->m_pkFriendWin;
      goto LABEL_11;
    case 1:
      v3 = (PgWin *)this->m_pkGuildWin;
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xBEu, 0, 0);
      v4 = GuildTask::GetGuild();
      if ( CClientGuild::AmIGuildMember(v4) )
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xC3u, 0, 0);
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 7u, 0, 0);
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x18u, 0, 0);
      v5 = GuildTask::GetGuild();
      CClientGuild::ReqHistoryList(v5);
      goto LABEL_11;
    case 2:
      v3 = (PgWin *)this->m_pkPMWin;
      goto LABEL_11;
    case 3:
      v3 = (PgWin *)this->m_pkWeddingInfoWin;
      goto LABEL_11;
    case 4:
      v3 = (PgWin *)this->m_pkHolyPromiseWin;
      goto LABEL_11;
    case 5:
      v6 = GuildAcademyTask::GetGuildAcademy();
      CClientGuildAcademy::ReqHistoryList(v6);
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 7u, 0, 0);
      v3 = (PgWin *)v2->m_pkGuildAcademyWin;
      if ( v3 )
      {
        GuildAcademyWin::InvalidateAcademy(v2->m_pkGuildAcademyWin);
LABEL_11:
        if ( v3 )
        {
          v7 = v2->m_pkFriendWin;
          v2->m_pkCurrentCommunityWin = v3;
          v8 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v9 = ((int (*)(void))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
          v8[43].__vecDelDtor((NiRefObject *)v3, v9);
          v10 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = ((int (*)(void))v2->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
          v10[44].__vecDelDtor((NiRefObject *)v3, v11);
          PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
          switch ( eTab )
          {
            case 1:
              GameFrameWork::OpenPlayGuideWin(v2, BIL_GUILD_1);
              break;
            case 3:
              GameFrameWork::OpenPlayGuideWin(v2, BIL_WEDDING_1);
              break;
            case 4:
              GameFrameWork::OpenPlayGuideWin(v2, BIL_HOLYPROMISE_1);
              break;
            case 5:
              GameFrameWork::OpenPlayGuideWin(v2, BIL_GUILD_3);
              break;
            default:
              return;
          }
        }
      }
      return;
    default:
      return;
  }
}

//----- (00495690) --------------------------------------------------------
void __thiscall GameFrameWork::OpenRidePetWin(GameFrameWork *this, unsigned int uiPetID)
{
  GameFrameWork *v2; // esi@1
  RidePetWin *v3; // ecx@1
  RidePetWin *v4; // edi@3
  int v5; // eax@3
  NiTListItem<PgWin *> *v6; // ecx@3

  v2 = this;
  v3 = this->m_pkRidePetWin;
  if ( v3 )
    RidePetWin::SetPetID(v3, uiPetID);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkRidePetWin->baseclass_0.baseclass_0.baseclass_0);
  v4 = v2->m_pkRidePetWin;
  v5 = (int)v2->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&v2->m_kCanHideWinList);
  *(_DWORD *)(v5 + 8) = v4;
  *(_DWORD *)v5 = 0;
  *(_DWORD *)(v5 + 4) = v2->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
  v6 = v2->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail;
  if ( v6 )
  {
    v6->m_pkNext = (NiTListItem<PgWin *> *)v5;
    ++*(_DWORD *)&v2->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v2->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v5;
  }
  else
  {
    ++*(_DWORD *)&v2->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v2->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWin *> *)v5;
    v2->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWin *> *)v5;
  }
}

//----- (00495720) --------------------------------------------------------
void __thiscall GameFrameWork::CloseItemUpgradeWin(GameFrameWork *this, bool bSendEndofTrade)
{
  GameFrameWork *v2; // esi@1
  char *v3; // eax@2

  v2 = this;
  if ( ItemUpgradeWin::IsUpgradingitem(this->m_pkItemUpgradeWin) == 1 )
  {
    v3 = TextData::Get(0xC7E4E718u);
    GameFrameWork::AddSysMsg(v2, v3);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    InventoryWin::ms_uiMode = 0;
    if ( bSendEndofTrade )
      GameFrameWork::NcActEndOfTrade(v2);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkItemUpgradeMsgWin->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00495790) --------------------------------------------------------
void __thiscall GameFrameWork::CloseMoverUpgradeWin(GameFrameWork *this, bool bSendEndofTrade)
{
  GameFrameWork *v2; // esi@1
  MoverUpgradeWin *v3; // ecx@1
  char *v4; // eax@3

  v2 = this;
  v3 = this->m_pkMoverUpgradeWin;
  if ( v3 && MoverUpgradeWin::IsUpgrading(v3) )
  {
    v4 = TextData3::Get(0x1D6C8675u);
    GameFrameWork::AddSysMsg(v2, v4);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    InventoryWin::ms_uiMode = 0;
    if ( bSendEndofTrade )
      GameFrameWork::NcActEndOfTrade(v2);
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004957F0) --------------------------------------------------------
void __thiscall GameFrameWork::OnFriendDelete(GameFrameWork *this, Name5 kCharID)
{
  PgFrameWork *v2; // esi@1
  char *v3; // eax@1
  MsgBox *v4; // edi@1
  void *v5; // eax@1
  PgMsg::Frame kOkMsg; // [sp+Ch] [bp-130h]@4
  char szMessage[256]; // [sp+20h] [bp-11Ch]@1
  char acName[21]; // [sp+120h] [bp-1Ch]@1
  unsigned int v9; // [sp+138h] [bp-4h]@1
  int v10; // [sp+13Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = (PgFrameWork *)this;
  *(_DWORD *)acName = *(_DWORD *)&kCharID;
  *(_QWORD *)&acName[4] = *(_QWORD *)&kCharID.n5_name[4];
  *(_QWORD *)&acName[12] = *(_QWORD *)&kCharID.n5_name[12];
  acName[20] = 0;
  v3 = TextData::Get(0x947EDDBCu);
  sprintf(szMessage, v3);
  v4 = MsgBox::Modeless(MSGBOX_OKCANCEL, szMessage);
  v5 = operator new(0x14u);
  if ( v5 )
  {
    *((_DWORD *)v5 + 4) = 0;
    *((_DWORD *)v5 + 3) = 0;
    *((_DWORD *)v5 + 2) = 0;
    *((_DWORD *)v5 + 1) = 0;
    *(_DWORD *)v5 = 0;
  }
  else
  {
    v5 = 0;
  }
  *(_QWORD *)v5 = *(_QWORD *)&kCharID;
  *((_QWORD *)v5 + 1) = *(_QWORD *)&kCharID.n5_name[8];
  *((_DWORD *)v5 + 4) = *(_DWORD *)&kCharID.n5_name[16];
  kOkMsg.m_uiFramelParam = (unsigned int)v5;
  kOkMsg.m_uiFrameMsg = 120;
  MsgBox::SetFrameWorkMsgOnClose(v4, v2, &kOkMsg, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (004958D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcScenarioAreaEntryAck(GameFrameWork *this, const char *szAreaName)
{
  GameFrameWork *v2; // esi@1
  PROTO_NC_SCENARIO_AREAENTRY_ACK kAck; // [sp+4h] [bp-44h]@1
  Name8 areaindex; // [sp+24h] [bp-24h]@1
  unsigned int v5; // [sp+44h] [bp-4h]@1
  int v6; // [sp+48h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&areaindex.n8_name[24] = 0i64;
  *(_QWORD *)&areaindex.n8_name[16] = 0i64;
  *(_QWORD *)&areaindex.n8_name[8] = 0i64;
  *(_QWORD *)&areaindex.n8_name[0] = 0i64;
  strncpy(areaindex.n8_name, (char *)szAreaName, 0x20u);
  *(_DWORD *)&kAck.areaindex.n8_name[0] = *(_DWORD *)&areaindex;
  *(_QWORD *)&kAck.areaindex.n8_name[4] = *(_QWORD *)&areaindex.n8_name[4];
  *(_DWORD *)&kAck.areaindex.n8_name[12] = *(_DWORD *)&areaindex.n8_name[12];
  *(_QWORD *)&kAck.areaindex.n8_name[16] = *(_QWORD *)&areaindex.n8_name[16];
  *(_QWORD *)&kAck.areaindex.n8_name[24] = *(_QWORD *)&areaindex.n8_name[24];
  GameFrameWork::SendNetMsgZoneMgr(v2, 0x1Bu, 6u, &kAck, 32);
}
// A85C00: using guessed type int __security_cookie;

//----- (00495980) --------------------------------------------------------
void __thiscall GameFrameWork::NcScenarioAreaLeaveAck(GameFrameWork *this, const char *szAreaName)
{
  GameFrameWork *v2; // esi@1
  PROTO_NC_SCENARIO_AREALEAVE_ACK kAck; // [sp+4h] [bp-44h]@1
  Name8 areaindex; // [sp+24h] [bp-24h]@1
  unsigned int v5; // [sp+44h] [bp-4h]@1
  int v6; // [sp+48h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&areaindex.n8_name[24] = 0i64;
  *(_QWORD *)&areaindex.n8_name[16] = 0i64;
  *(_QWORD *)&areaindex.n8_name[8] = 0i64;
  *(_QWORD *)&areaindex.n8_name[0] = 0i64;
  strncpy(areaindex.n8_name, (char *)szAreaName, 0x20u);
  *(_DWORD *)&kAck.areaindex.n8_name[0] = *(_DWORD *)&areaindex;
  *(_QWORD *)&kAck.areaindex.n8_name[4] = *(_QWORD *)&areaindex.n8_name[4];
  *(_DWORD *)&kAck.areaindex.n8_name[12] = *(_DWORD *)&areaindex.n8_name[12];
  *(_QWORD *)&kAck.areaindex.n8_name[16] = *(_QWORD *)&areaindex.n8_name[16];
  *(_QWORD *)&kAck.areaindex.n8_name[24] = *(_QWORD *)&areaindex.n8_name[24];
  GameFrameWork::SendNetMsgZoneMgr(v2, 0x1Bu, 8u, &kAck, 32);
}
// A85C00: using guessed type int __security_cookie;

//----- (00495A30) --------------------------------------------------------
void __thiscall GameFrameWork::OnF1(GameFrameWork *this)
{
  if ( (signed int)nowState < 1 )
    GameFrameWork::TargetCharReq(this, g_pkMainChar);
}

//----- (00495A50) --------------------------------------------------------
void __thiscall GameFrameWork::OnF2(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PartyMemberInfo *v2; // eax@1
  _BYTE v3[20]; // ST00_20@2
  Char *v4; // eax@2

  v1 = this;
  v2 = Party::GetMemberInfo(&g_kParty, 0);
  if ( v2 )
  {
    *(_DWORD *)v3 = *(_DWORD *)&v2->m_kCharID.n5_name[0];
    *(_QWORD *)&v3[4] = *(_QWORD *)&v2->m_kCharID.n5_name[4];
    *(_QWORD *)&v3[12] = *(_QWORD *)&v2->m_kCharID.n5_name[12];
    v4 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v3);
    if ( v4 )
      GameFrameWork::TargetCharReq(v1, v4);
  }
}

//----- (00495AA0) --------------------------------------------------------
void __thiscall GameFrameWork::OnF3(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PartyMemberInfo *v2; // eax@1
  _BYTE v3[20]; // ST00_20@2
  Char *v4; // eax@2

  v1 = this;
  v2 = Party::GetMemberInfo(&g_kParty, 1u);
  if ( v2 )
  {
    *(_DWORD *)v3 = *(_DWORD *)&v2->m_kCharID.n5_name[0];
    *(_QWORD *)&v3[4] = *(_QWORD *)&v2->m_kCharID.n5_name[4];
    *(_QWORD *)&v3[12] = *(_QWORD *)&v2->m_kCharID.n5_name[12];
    v4 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v3);
    if ( v4 )
      GameFrameWork::TargetCharReq(v1, v4);
  }
}

//----- (00495AF0) --------------------------------------------------------
void __thiscall GameFrameWork::OnF4(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PartyMemberInfo *v2; // eax@1
  _BYTE v3[20]; // ST00_20@2
  Char *v4; // eax@2

  v1 = this;
  v2 = Party::GetMemberInfo(&g_kParty, 2u);
  if ( v2 )
  {
    *(_DWORD *)v3 = *(_DWORD *)&v2->m_kCharID.n5_name[0];
    *(_QWORD *)&v3[4] = *(_QWORD *)&v2->m_kCharID.n5_name[4];
    *(_QWORD *)&v3[12] = *(_QWORD *)&v2->m_kCharID.n5_name[12];
    v4 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v3);
    if ( v4 )
      GameFrameWork::TargetCharReq(v1, v4);
  }
}

//----- (00495B40) --------------------------------------------------------
void __thiscall GameFrameWork::OnF5(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PartyMemberInfo *v2; // eax@1
  _BYTE v3[20]; // ST00_20@2
  Char *v4; // eax@2

  v1 = this;
  v2 = Party::GetMemberInfo(&g_kParty, 3u);
  if ( v2 )
  {
    *(_DWORD *)v3 = *(_DWORD *)&v2->m_kCharID.n5_name[0];
    *(_QWORD *)&v3[4] = *(_QWORD *)&v2->m_kCharID.n5_name[4];
    *(_QWORD *)&v3[12] = *(_QWORD *)&v2->m_kCharID.n5_name[12];
    v4 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v3);
    if ( v4 )
      GameFrameWork::TargetCharReq(v1, v4);
  }
}

//----- (00495B90) --------------------------------------------------------
void __thiscall GameFrameWork::OnF6(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PartyMemberInfo *v2; // eax@1
  _BYTE v3[20]; // ST00_20@2
  Char *v4; // eax@2

  v1 = this;
  v2 = Party::GetMemberInfo(&g_kParty, 4u);
  if ( v2 )
  {
    *(_DWORD *)v3 = *(_DWORD *)&v2->m_kCharID.n5_name[0];
    *(_QWORD *)&v3[4] = *(_QWORD *)&v2->m_kCharID.n5_name[4];
    *(_QWORD *)&v3[12] = *(_QWORD *)&v2->m_kCharID.n5_name[12];
    v4 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v3);
    if ( v4 )
      GameFrameWork::TargetCharReq(v1, v4);
  }
}

//----- (00495BE0) --------------------------------------------------------
void __thiscall GameFrameWork::OnEquipChangeMiniMon(GameFrameWork *this, Item *pkItem)
{
  GameFrameWork *v2; // esi@1
  int v3; // ebx@1
  Char *v4; // edi@2
  int v5; // eax@6
  int v6; // esi@7
  int v7; // ebx@7
  int v8; // edx@11
  int v9; // esi@16
  int v10; // edi@16
  int v11; // eax@20
  MinimonInfo *v12; // eax@27
  int v13; // eax@28
  MinimonInfo *v14; // eax@33
  int v15; // eax@34
  char v16; // bl@36
  char *v17; // eax@42
  int pkRightInfo; // [sp+8h] [bp-Ch]@6
  GameFrameWork *v19; // [sp+Ch] [bp-8h]@1
  char bAutoUse; // [sp+13h] [bp-1h]@6
  char bAutoPick_3; // [sp+1Fh] [bp+Bh]@6

  v2 = this;
  v3 = 0;
  v19 = this;
  if ( this->m_pkInventoryWin )
  {
    v4 = g_pkMainChar;
    if ( !pkItem
      && g_pkMainChar->m_kCharShape.m_kEquip.Equ_Minimon == -1
      && g_pkMainChar->m_kCharShape.m_kEquip.Equ_MiniMon_R == -1 )
    {
      this->m_pkInventoryWin->m_bAutoPickEnable = 0;
      InventoryWin::OnAutoPickShow(this->m_pkInventoryWin);
      v2->m_pkInventoryWin->m_bAutoUseEnable = 0;
      InventoryWin::OnAutoUseShow(v2->m_pkInventoryWin);
      return;
    }
    v5 = g_pkMainChar->m_kCharShape.m_kEquip.Equ_Minimon;
    bAutoPick_3 = 0;
    bAutoUse = 0;
    pkRightInfo = 0;
    if ( (_WORD)v5 != -1 )
    {
      v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v7 = g_pkMainChar->m_kCharShape.m_kEquip.Equ_Minimon;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v5) )
      {
        if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) )
        {
          v8 = *(_DWORD *)(v6 + 196);
          if ( *(_DWORD *)(v8 + 4 * v7) )
            v3 = *(_DWORD *)(v8 + 4 * v7);
          else
            v3 = 0;
        }
        else
        {
          v3 = 0;
        }
      }
      else
      {
        v3 = 0;
      }
      v2 = v19;
    }
    if ( v4->m_kCharShape.m_kEquip.Equ_MiniMon_R != -1 )
    {
      v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v10 = v4->m_kCharShape.m_kEquip.Equ_MiniMon_R;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v10) )
      {
        if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) )
        {
          v11 = *(_DWORD *)(v9 + 196) + 4 * v10;
          if ( *(_DWORD *)v11 )
            pkRightInfo = *(_DWORD *)v11;
          else
            pkRightInfo = 0;
        }
        else
        {
          pkRightInfo = 0;
        }
      }
      else
      {
        pkRightInfo = 0;
      }
      v2 = v19;
    }
    if ( v3 )
    {
      v12 = MinimonInfoTable::GetMinimonInfoByIDX((char *)(v3 + 2));
      if ( v12 )
      {
        v13 = v12->MinimonRole - 1;
        if ( v13 )
        {
          if ( v13 == 1 )
            bAutoUse = 1;
        }
        else
        {
          bAutoPick_3 = 1;
        }
      }
      if ( !pkRightInfo )
        goto LABEL_38;
    }
    else
    {
      if ( !pkRightInfo )
        return;
    }
    v14 = MinimonInfoTable::GetMinimonInfoByIDX((char *)(pkRightInfo + 2));
    if ( v14 )
    {
      v15 = v14->MinimonRole - 1;
      if ( !v15 )
      {
        v16 = bAutoUse;
        bAutoPick_3 = 1;
        goto LABEL_40;
      }
      if ( v15 == 1 )
      {
        v16 = 1;
        goto LABEL_39;
      }
    }
LABEL_38:
    v16 = bAutoUse;
LABEL_39:
    if ( !bAutoPick_3 )
    {
      if ( !v16 )
      {
        v17 = TextData2::Get(0xCCF8D9CCu);
        GameFrameWork::AddSysMsg(v2, v17);
      }
      goto LABEL_43;
    }
LABEL_40:
    PgFrameWork::AddMsg(&v2->baseclass_0, 0xFDu, 1u, 0);
LABEL_43:
    v2->m_pkInventoryWin->m_bAutoPickEnable = bAutoPick_3;
    InventoryWin::OnAutoPickShow(v2->m_pkInventoryWin);
    v2->m_pkInventoryWin->m_bAutoUseEnable = v16;
    InventoryWin::OnAutoUseShow(v2->m_pkInventoryWin);
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00495DF0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCollectCardWin(GameFrameWork *this, bool bOpen, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, bool bBlind)
{
  GameFrameWork *v6; // ebx@1
  unsigned int v7; // edi@3
  int v8; // ebx@3
  CollectCardWin *v9; // esi@4
  char *v10; // eax@14
  CollectCardWin *v11; // esi@15
  CollectCardWin **v12; // edi@17
  signed int v13; // ebx@17
  CollectCardWin *v14; // esi@18
  unsigned int v15; // [sp+4h] [bp-1Ch]@12
  unsigned int uiOpenIndex; // [sp+14h] [bp-Ch]@3
  GameFrameWork *v17; // [sp+18h] [bp-8h]@1
  unsigned int uiOpenCount; // [sp+1Ch] [bp-4h]@3
  char bChange; // [sp+2Bh] [bp+Bh]@3

  v6 = this;
  v17 = this;
  if ( bOpen )
  {
    if ( !GameFrameWork::IsPlayCardOpen(this) )
    {
      v7 = 0;
      uiOpenIndex = 0;
      uiOpenCount = 0;
      bChange = 0;
      v8 = (int)v6->m_pkCollectCardWin;
      do
      {
        v9 = *(CollectCardWin **)v8;
        if ( *(_DWORD *)v8 )
        {
          if ( CollectCardWin::IsSameCard(v9, uiCardID, uiSerial) )
          {
            v15 = -1270667234;
            goto LABEL_14;
          }
          if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v9) )
          {
            ++uiOpenCount;
          }
          else
          {
            if ( !bChange )
            {
              uiOpenIndex = v7;
              bChange = 1;
            }
          }
        }
        ++v7;
        v8 += 4;
      }
      while ( v7 < 4 );
      if ( uiOpenCount >= 4 )
      {
        v15 = -957161531;
LABEL_14:
        v10 = TextData2::Get(v15);
        GameFrameWork::AddSysMsg(v17, v10);
        return;
      }
      v11 = v17->m_pkCollectCardWin[uiOpenIndex];
      if ( v11 )
      {
        CollectCardWin::SetInfo(v11, uiCardID, uiStar, uiSerial, bBlind);
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          v11,
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.5,
          0.5);
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v11->baseclass_0.baseclass_0.baseclass_0);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v11->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
  else
  {
    v12 = this->m_pkCollectCardWin;
    v13 = 4;
    do
    {
      v14 = *v12;
      if ( *v12 )
      {
        CollectCardWin::Reset(*v12);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v14->baseclass_0.baseclass_0.baseclass_0);
      }
      ++v12;
      --v13;
    }
    while ( v13 );
  }
}

//----- (00495F40) --------------------------------------------------------
void __thiscall GameFrameWork::OpenFeedMoverWin(GameFrameWork *this, unsigned __int16 kMoverHandle, unsigned int uiLevel)
{
  GameFrameWork *v3; // esi@1
  Char *v4; // eax@3

  v3 = this;
  if ( this->m_pkFeedMoverWin
    && (unsigned __int8)((int (*)(void))this->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() != 1 )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, kMoverHandle);
    if ( v4 )
    {
      v3->m_pkFeedMoverWin->m_kMoverID = (unsigned int)v4[1].baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_pkTail;
      v3->m_pkFeedMoverWin->m_uiMoverLevel = uiLevel;
      FeedMoverWin::UpdateMover(v3->m_pkFeedMoverWin);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0);
      *(_DWORD *)&kMoverHandle = v3->m_pkFeedMoverWin;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kCanHideWinList,
        (NiD3DXEffectParameter *const *)&kMoverHandle);
    }
  }
}

//----- (00495FD0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMiniHouseWinKey(GameFrameWork *this)
{
  if ( !EditWin::ms_pkCurEditWin )
    GameFrameWork::OnOpenMiniHouseMenuWin(this);
}

//----- (00495FE0) --------------------------------------------------------
void __thiscall GameFrameWork::SendmhObjActReq(GameFrameWork *this)
{
  mhObject *v1; // esi@1
  unsigned __int16 *v2; // eax@1

  v1 = mhObjectManager::GetObjectA(&stru_AA4FA8, (unsigned __int16)dword_AA5112);
  v2 = (unsigned __int16 *)MiniHouseObjAniInfoTab::GetObjInfobyhnd(HIWORD(dword_AA5112));
  if ( v1 )
  {
    if ( v2 )
      mhGameMainConnectMgr::SendObjActReq(dword_AA4FE8, *v2, LOWORD(v1->m_iGUID));
  }
}
// AA5112: using guessed type int dword_AA5112;

//----- (00496030) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMHPopUpMenuInvObjWin(GameFrameWork *this, bool bArranged, int SelItemID)
{
  int v3; // ebx@0
  int v4; // edi@0
  GameFrameWork *v5; // esi@1
  mhEditRoomWin *v6; // eax@2
  int v7; // ST18_4@3
  int v8; // ST14_4@3
  Item *v9; // eax@3
  int v10; // ebx@3
  int v11; // edi@3
  int v12; // eax@4
  int v13; // ecx@7
  MiniHouseFurniture *v14; // eax@10
  GameType v15; // edi@10
  char *v16; // eax@12
  PopupMenu *v17; // eax@12
  char *v18; // eax@14
  PopupMenu *v19; // eax@14
  PopupMenu *v20; // eax@16
  PopupMenu *v21; // eax@18
  ItemIcon *v22; // ecx@19
  Item *v23; // ebx@20
  int v24; // eax@21
  int v25; // edi@21
  PopupMenu *v26; // eax@21
  PopupMenu *v27; // eax@24
  PopupMenu *v28; // eax@28
  signed int v29; // [sp-4h] [bp-8h]@23

  v5 = this;
  PopupMenuWin::Clear(this->m_pkPopupMenuWin);
  if ( v5->m_pkPopupMenuWin )
  {
    v6 = v5->m_pkMHEditRoomWin;
    if ( v6 )
    {
      v7 = v3;
      v8 = v4;
      v9 = ItemIcon::GetItem(&v6->m_pkWorkTargetWin->baseclass_0.baseclass_0);
      v10 = v9->m_kStruct.itemid;
      v11 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                         + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v9->m_kStruct.itemid,
                              v8,
                              v7) )
      {
        if ( (unsigned __int16)v10 <= *(_WORD *)(v11 + 200) )
        {
          v13 = *(_DWORD *)(v11 + 196);
          if ( *(_DWORD *)(v13 + 4 * v10) )
            v12 = *(_DWORD *)(v13 + 4 * v10);
          else
            v12 = 0;
        }
        else
        {
          v12 = 0;
        }
      }
      else
      {
        v12 = 0;
      }
      v14 = MiniHouseFuritureInfoTab::GetObjByName((char *)(v12 + 2));
      v15 = v14->GameType;
      if ( v15 || strcmp("MINIGAME", v14->InvenType) )
      {
        if ( v15 == 1 )
        {
          v18 = TextData2::Get(0x30807D88u);
          v19 = (PopupMenu *)PopupMenuText::CreateWin(v18, 0xE7u, 0, 0, 0, 0, 0);
          PopupMenuWin::AddMenu(v5->m_pkPopupMenuWin, v19);
          if ( bArranged == 1 )
          {
            v17 = PopupMenuTemplate::GetmhUI_ReturnToInvMHItem(1);
          }
          else
          {
            v20 = PopupMenuTemplate::GetmhUI_ArrToInvMHItem();
            PopupMenuWin::AddMenu(v5->m_pkPopupMenuWin, v20);
            v17 = PopupMenuTemplate::GetmhUI_DeleteMHItem();
          }
        }
        else
        {
          if ( bArranged == 1 )
          {
            v21 = PopupMenuTemplate::GetmhUI_ReturnToInvMHItem(1);
          }
          else
          {
            v27 = PopupMenuTemplate::GetmhUI_ArrToInvMHItem();
            PopupMenuWin::AddMenu(v5->m_pkPopupMenuWin, v27);
            v21 = PopupMenuTemplate::GetmhUI_DeleteMHItem();
          }
          PopupMenuWin::AddMenu(v5->m_pkPopupMenuWin, v21);
          v22 = (ItemIcon *)v5->m_pkMHEditRoomWin->m_pkWorkTargetWin;
          if ( !v22 || (v23 = ItemIcon::GetItem(v22)) == 0 )
            goto LABEL_28;
          v24 = MiniHouseIndoor::GetEndureStep(&g_kWorld.m_MiniHouseIndoorMode, v23, v5->m_pkMHRepairWin->m_tServerTime);
          v25 = v24;
          v26 = PopupMenuTemplate::GetmhUI_Endure(v24);
          PopupMenuWin::AddMenu(v5->m_pkPopupMenuWin, v26);
          if ( v25 == 100000 || v25 == 200000 )
            v29 = 100;
          else
            v29 = MiniHouseIndoor::GetEndurePercentage(
                    &g_kWorld.m_MiniHouseIndoorMode,
                    v23,
                    v5->m_pkMHRepairWin->m_tServerTime);
          v17 = PopupMenuTemplate::GetmhUI_EndurePercentage(v29);
        }
      }
      else
      {
        v16 = TextData2::Get(0x8E78C7CDu);
        v17 = (PopupMenu *)PopupMenuText::CreateWin(v16, 0xE6u, 0, 0, 0, 0, 0);
      }
      PopupMenuWin::AddMenu(v5->m_pkPopupMenuWin, v17);
LABEL_28:
      v28 = PopupMenuTemplate::GetCancelMenu();
      PopupMenuWin::AddMenu(v5->m_pkPopupMenuWin, v28);
      PopupMenuWin::FinishMenu(v5->m_pkPopupMenuWin, 0);
      ((void (__cdecl *)(int, int))v5->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        PgWin::ms_iMsX.x,
        PgWin::ms_iMsY);
      PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v5->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      if ( dword_AA5084 != SelItemID )
        dword_AA5084 = SelItemID;
      return;
    }
  }
}
// 496030: could not find valid save-restore pair for ebx
// 496030: could not find valid save-restore pair for edi
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// AA5084: using guessed type int dword_AA5084;

//----- (004962B0) --------------------------------------------------------
void __thiscall GameFrameWork::OpenMHInfoWin(GameFrameWork *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab)
{
  GameFrameWork *v2; // esi@1
  void *v3; // edi@2
  mhInfoWin *v4; // eax@7
  int v5; // ebx@9
  int v6; // eax@12
  mhInfoWin *v7; // ecx@12
  int v8; // eax@13
  bool v9; // zf@13
  int v10; // ebx@13
  char *v11; // eax@14
  MHDiceGameTask *v12; // ecx@15
  bool v13; // bl@15
  char *v14; // eax@18
  MsgBox *v15; // eax@18
  PgWin *v16; // ecx@21
  int v17; // ebx@21
  int v18; // eax@22
  void *v19; // ecx@22
  int v20; // eax@23
  int v21; // ebx@24
  ColumnBut *v22; // eax@24
  char *v23; // [sp-20h] [bp-4Ch]@12
  int v24; // [sp-1Ch] [bp-48h]@12
  bool v25; // [sp-18h] [bp-44h]@12
  char *v26; // [sp-14h] [bp-40h]@12
  unsigned int v27; // [sp-14h] [bp-40h]@16
  unsigned int v28; // [sp-10h] [bp-3Ch]@1
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-2Ch]@15
  bool bItemView[4]; // [sp+4h] [bp-28h]@12
  PgMsg::Frame kOkMsg; // [sp+8h] [bp-24h]@18
  unsigned int v32; // [sp+1Ch] [bp-10h]@1
  int v33; // [sp+28h] [bp-4h]@15
  int v34; // [sp+2Ch] [bp+0h]@1

  v32 = (unsigned int)&v34 ^ __security_cookie;
  v28 = (unsigned int)&v34 ^ __security_cookie;
  v2 = this;
  switch ( eTab )
  {
    case 0:
      v3 = this->m_pkMHInfoWin;
      this->m_pkCurrentTab = (ColumnBut *)**((_DWORD **)v3 + 117);
      goto LABEL_20;
    case 1:
      v3 = this->m_pkMHGuestBookWin;
      GameFrameWork::NcMiscWebKeyReq(this);
      goto LABEL_20;
    case 2:
      v3 = this->m_pkMHEditRoomWin;
      this->m_pkCurrentTab = *(ColumnBut **)(*((_DWORD *)v3 + 919) + 8);
      if ( dword_AA501C == 2 )
        goto LABEL_20;
      return;
    case 3:
      v3 = this->m_pkMHPortalListWin;
      this->m_pkCurrentTab = *(ColumnBut **)(*((_DWORD *)v3 + 96) + 12);
      goto LABEL_20;
    case 4:
      v3 = this->m_pkMHSettingWin;
      v4 = this->m_pkMHInfoWin;
      this->m_pkCurrentTab = *(ColumnBut **)(*((_DWORD *)v3 + 94) + 16);
      if ( dword_AA501C == 2 )
      {
        if ( v4->m_PassWord.baseclass_0._Mysize )
        {
          v5 = (int)&v4->m_PassWord;
          if ( v4->m_PassWord.baseclass_0._Myres >= 0x10 )
            v5 = *(_DWORD *)v5;
        }
        else
        {
          v5 = 0;
        }
        v6 = ((int (__cdecl *)(unsigned int))v4->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v28);
        v7 = v2->m_pkMHInfoWin;
        v26 = (char *)v6;
        bItemView[0] = v7->m_bItemView;
        v25 = bItemView[0];
        v24 = v7->m_MaxPersonCount;
        v23 = (char *)v5;
      }
      else
      {
        v8 = ((int (__cdecl *)(unsigned int))v4->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v28);
        v7 = v2->m_pkMHInfoWin;
        v9 = v7->m_PassWord.baseclass_0._Mysize == 0;
        v10 = v7->m_MaxPersonCount;
        bItemView[0] = v7->m_bItemView;
        v26 = (char *)v8;
        v25 = bItemView[0];
        v24 = v10;
        v23 = (char *)((unsigned __int8)(v9 - 1) != 0 ? (int)"........" : 0);
      }
      v11 = mhInfoWin::GetTitle(v7);
      mhSettingWin::Refresh(v2->m_pkMHSettingWin, v11, v23, v24, v25, v26);
      goto LABEL_20;
    case 5:
      v12 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
      v33 = 0;
      v13 = MHDiceGameTask::IsDicegamePlaying(v12);
      v33 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
      if ( v13 )
        v27 = -856420867;
      else
        v27 = -554110486;
      v14 = TextData2::Get(v27);
      v15 = MsgBox::Modeless(MSGBOX_OKCANCEL, v14);
      kOkMsg.m_uiFrameMsg = 206;
      kOkMsg.m_uiFramelParam = 0;
      MsgBox::SetFrameWorkMsgOnClose(v15, &v2->baseclass_0, &kOkMsg, 0);
      v2->m_pkCurrentTab->m_bCheck = 1;
      break;
    default:
      v3 = this->m_pkMHInfoWin;
LABEL_20:
      if ( v3 )
      {
        v16 = v2->m_pkMHCurrentWin;
        v17 = *(_DWORD *)v3;
        if ( v16 )
        {
          v18 = ((int (__stdcall *)(unsigned int))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v28);
          (*(void (__thiscall **)(void *, int))(v17 + 172))(v3, v18);
          v19 = v2->m_pkMHCurrentWin;
        }
        else
        {
          v20 = ((int (__stdcall *)(unsigned int))v2->m_pkMHInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v28);
          (*(void (__thiscall **)(void *, int))(v17 + 172))(v3, v20);
          v19 = v2->m_pkMHInfoWin;
        }
        v21 = *(_DWORD *)v3;
        (*(void (**)(void))(*(_DWORD *)v19 + 168))();
        (*(void (__thiscall **)(void *))(v21 + 176))(v3);
        v22 = v2->m_pkCurrentTab;
        if ( v22 )
          v22->m_bCheck = 1;
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v2->m_pkMHCurrentWin);
        v2->m_pkMHCurrentWin = (PgWin *)v3;
        PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v3);
      }
      break;
  }
}
// A85C00: using guessed type int __security_cookie;
// AA501C: using guessed type int dword_AA501C;

//----- (00496570) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenFriendWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1
  FriendWin *v3; // ecx@6
  PgWin *v4; // edi@6
  NiRefObjectVtbl *v5; // ebx@7
  int v6; // eax@7
  NiRefObjectVtbl *v7; // ebx@7
  int v8; // eax@7

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( v2 )
  {
    if ( (unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      && !v1->m_iCommunityValue )
    {
      GameFrameWork::CloseCommunityWin(v1);
      v1->m_iCommunityValue = -1;
      return;
    }
    GameFrameWork::CloseCommunityWin(v1);
  }
  v3 = v1->m_pkFriendWin;
  v4 = (PgWin *)v1->m_pkFriendWin;
  v1->m_iCommunityValue = 0;
  if ( v4 )
  {
    v1->m_pkCurrentCommunityWin = v4;
    v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = ((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v5[43].__vecDelDtor((NiRefObject *)v4, v6);
    v7 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = ((int (*)(void))v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    v7[44].__vecDelDtor((NiRefObject *)v4, v8);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
  }
}

//----- (00496610) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenGuildWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( v2 )
  {
    if ( (unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      && v1->m_iCommunityValue == 1 )
    {
      GameFrameWork::CloseCommunityWin(v1);
      v1->m_iCommunityValue = -1;
      return;
    }
    GameFrameWork::CloseCommunityWin(v1);
  }
  GameFrameWork::OpenCommunityWin(v1, TE_GUILD);
}

//----- (00496660) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenHolyPromise(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1
  PgWin *v3; // edi@8
  FriendWin *v4; // ecx@9
  NiRefObjectVtbl *v5; // ebx@9
  int v6; // eax@9
  NiRefObjectVtbl *v7; // ebx@9
  int v8; // eax@9

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( !v2 )
    goto LABEL_7;
  if ( !(unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    GameFrameWork::CloseCommunityWin(v1);
LABEL_7:
    v1->m_iCommunityValue = 4;
    goto LABEL_8;
  }
  if ( v1->m_iCommunityValue == 4 )
  {
    GameFrameWork::CloseCommunityWin(v1);
    v1->m_iCommunityValue = -1;
    return;
  }
  GameFrameWork::CloseCommunityWin(v1);
  v1->m_iCommunityValue = 4;
LABEL_8:
  v3 = (PgWin *)v1->m_pkHolyPromiseWin;
  if ( v3 )
  {
    v4 = v1->m_pkFriendWin;
    v1->m_pkCurrentCommunityWin = v3;
    v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v5[43].__vecDelDtor((NiRefObject *)v3, v6);
    v7 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = ((int (*)(void))v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    v7[44].__vecDelDtor((NiRefObject *)v3, v8);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
    GameFrameWork::OpenPlayGuideWin(v1, BIL_HOLYPROMISE_1);
  }
}

//----- (00496720) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenGuildAcademy(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1
  CClientGuildAcademy *v3; // eax@8
  PgWin *v4; // edi@8
  FriendWin *v5; // ecx@10
  NiRefObjectVtbl *v6; // ebx@10
  int v7; // eax@10
  NiRefObjectVtbl *v8; // ebx@10
  int v9; // eax@10

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( !v2 )
    goto LABEL_7;
  if ( !(unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    GameFrameWork::CloseCommunityWin(v1);
LABEL_7:
    v1->m_iCommunityValue = 5;
    goto LABEL_8;
  }
  if ( v1->m_iCommunityValue == 5 )
  {
    GameFrameWork::CloseCommunityWin(v1);
    v1->m_iCommunityValue = -1;
    return;
  }
  GameFrameWork::CloseCommunityWin(v1);
  v1->m_iCommunityValue = 5;
LABEL_8:
  v3 = GuildAcademyTask::GetGuildAcademy();
  CClientGuildAcademy::ReqHistoryList(v3);
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 7u, 0, 0);
  v4 = (PgWin *)v1->m_pkGuildAcademyWin;
  if ( v4 )
  {
    GuildAcademyWin::InvalidateAcademy(v1->m_pkGuildAcademyWin);
    if ( v4 )
    {
      v5 = v1->m_pkFriendWin;
      v1->m_pkCurrentCommunityWin = v4;
      v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
      v6[43].__vecDelDtor((NiRefObject *)v4, v7);
      v8 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v9 = ((int (*)(void))v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      v8[44].__vecDelDtor((NiRefObject *)v4, v9);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
      GameFrameWork::OpenPlayGuideWin(v1, BIL_GUILD_3);
    }
  }
}

//----- (00496810) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenPartyMatching(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1
  PgWin *v3; // edi@8
  FriendWin *v4; // ecx@9
  NiRefObjectVtbl *v5; // ebx@9
  int v6; // eax@9
  NiRefObjectVtbl *v7; // ebx@9
  int v8; // eax@9

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( !v2 )
    goto LABEL_7;
  if ( !(unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    GameFrameWork::CloseCommunityWin(v1);
LABEL_7:
    v1->m_iCommunityValue = 2;
    goto LABEL_8;
  }
  if ( v1->m_iCommunityValue == 2 )
  {
    GameFrameWork::CloseCommunityWin(v1);
    v1->m_iCommunityValue = -1;
    return;
  }
  GameFrameWork::CloseCommunityWin(v1);
  v1->m_iCommunityValue = 2;
LABEL_8:
  v3 = (PgWin *)v1->m_pkPMWin;
  if ( v3 )
  {
    v4 = v1->m_pkFriendWin;
    v1->m_pkCurrentCommunityWin = v3;
    v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v5[43].__vecDelDtor((NiRefObject *)v3, v6);
    v7 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = ((int (*)(void))v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    v7[44].__vecDelDtor((NiRefObject *)v3, v8);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
  }
}

//----- (004968D0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenWedding(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // ecx@1
  PgWin *v3; // edi@8
  FriendWin *v4; // ecx@9
  NiRefObjectVtbl *v5; // ebx@9
  int v6; // eax@9
  NiRefObjectVtbl *v7; // ebx@9
  int v8; // eax@9

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( !v2 )
    goto LABEL_7;
  if ( !(unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    GameFrameWork::CloseCommunityWin(v1);
LABEL_7:
    v1->m_iCommunityValue = 3;
    goto LABEL_8;
  }
  if ( v1->m_iCommunityValue == 3 )
  {
    GameFrameWork::CloseCommunityWin(v1);
    v1->m_iCommunityValue = -1;
    return;
  }
  GameFrameWork::CloseCommunityWin(v1);
  v1->m_iCommunityValue = 3;
LABEL_8:
  v3 = (PgWin *)v1->m_pkWeddingInfoWin;
  if ( v3 )
  {
    v4 = v1->m_pkFriendWin;
    v1->m_pkCurrentCommunityWin = v3;
    v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v5[43].__vecDelDtor((NiRefObject *)v3, v6);
    v7 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = ((int (*)(void))v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    v7[44].__vecDelDtor((NiRefObject *)v3, v8);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
    GameFrameWork::OpenPlayGuideWin(v1, BIL_WEDDING_1);
  }
}

//----- (00496990) --------------------------------------------------------
void __thiscall GameFrameWork::OnShortCutSkillUse(GameFrameWork *this, unsigned int iIndex, unsigned int uiUser)
{
  GameFrameWork *v3; // ebx@1
  int v4; // esi@2
  __int16 v5; // si@4
  Char *v6; // eax@6
  ActionViewInfo *v7; // eax@8
  ActionType v8; // eax@9
  int v9; // eax@10
  unsigned __int16 v10; // ax@16
  Item *v11; // edi@17
  signed int v12; // eax@18
  bool v13; // cf@18
  Item *v14; // ecx@20
  ActionEffectItem *v15; // eax@25
  ItemActionEffectDesc *v16; // eax@26
  unsigned int v17; // eax@30
  Item *v18; // eax@31

  v3 = this;
  if ( iIndex < 0x64 )
  {
    v4 = (int)*(&unk_A9E21C + iIndex);
    if ( v4 )
    {
      if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v4 + 4))(v4) == 1 )
      {
        v5 = *(_WORD *)(v4 + 8);
        if ( v5 != -1 )
        {
          if ( !v3->m_kSkillCasting.eState )
          {
            MainChar::SetReserveAct((MainChar *)g_pkMainChar, RESERVEACT_SKILL);
            v6 = g_pkMainChar;
            LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0]) = v5;
            v6[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[1] = 1;
          }
        }
      }
      else
      {
        if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v4 + 4))(v4) == 2 )
        {
          v7 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(*(_DWORD *)(v4 + 8), 1);
          if ( v7 )
          {
            v8 = v7->eActionType;
            if ( v8 )
            {
              v9 = v8 - 1;
              if ( v9 )
              {
                if ( v9 == 1 )
                  PremiumActionWin::OnEmotionAction(v3->m_pkActionWin->m_pkPremiumActionWin, *(_DWORD *)(v4 + 16));
              }
              else
              {
                ActionWin::OnEmotionAction(v3->m_pkActionWin, *(_DWORD *)(v4 + 16));
              }
            }
            else
            {
              ActionWin::OnDefaultAction(v3->m_pkActionWin, *(_DWORD *)(v4 + 16));
            }
          }
        }
        else
        {
          if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == 4 )
          {
            v10 = *(_WORD *)(v4 + 12);
            if ( v10 != -1 )
            {
              v11 = Inventory::GetItemByID(&g_kInventory, v10);
              if ( v11 )
              {
                v12 = 0;
                v13 = 1;
                while ( 1 )
                {
                  if ( v13 )
                  {
                    v14 = g_kInventory.m_aspEquip[v12].m_pObject;
                    if ( v14 )
                    {
                      if ( v11->m_kStruct.itemid == v14->m_kStruct.itemid )
                        break;
                    }
                  }
                  ++v12;
                  v13 = (unsigned int)v12 < 0x1E;
                  if ( v12 >= 30 )
                  {
                    GameFrameWork::OnShortCutRClickItemNormalMode(v3, v11, (ShortCutItem *)v4, uiUser);
                    return;
                  }
                }
                v15 = ActionEffectItemTab::GetByItemID(v11->m_kStruct.itemid);
                if ( v15 )
                {
                  v16 = ItemActionEffectDescTab::GetByItemActionID(v15->ItemActionID);
                  if ( v16 )
                  {
                    if ( v16->UseItem )
                      GameFrameWork::OnShortCutRClickItemUseMode(v3, v11, (ShortCutItem *)v4, uiUser);
                  }
                }
              }
            }
          }
          else
          {
            if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == 5 )
            {
              v17 = *(_DWORD *)(v4 + 8);
              if ( v17 < 0xC0 )
              {
                v18 = g_kInventory.m_aspInv[v17].m_pObject;
                if ( v18 )
                {
                  if ( v18->m_kStruct.itemid != -1 )
                    GameFrameWork::OnShortCutRClickItemNormalMode(v3, v18, (ShortCutInvPosItem *)v4, uiUser);
                }
              }
            }
          }
        }
      }
    }
  }
}

//----- (00496B70) --------------------------------------------------------
void __thiscall GameFrameWork::OpenShopMenu(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@2
  MoverUpgradeWin *v3; // ecx@4
  char *v4; // eax@6

  v1 = this;
  if ( ItemUpgradeWin::IsUpgradingitem(this->m_pkItemUpgradeWin) == 1 )
  {
    v2 = TextData::Get(0xC7E4E718u);
    GameFrameWork::AddSysMsg(v1, v2);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    InventoryWin::ms_uiMode = 0;
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemUpgradeMsgWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v3 = v1->m_pkMoverUpgradeWin;
  if ( v3 && MoverUpgradeWin::IsUpgrading(v3) )
  {
    v4 = TextData3::Get(0x1D6C8675u);
    GameFrameWork::AddSysMsg(v1, v4);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    InventoryWin::ms_uiMode = 0;
  }
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
  if ( !(unsigned __int8)((int (*)(void))v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OpenInventoryWin(v1);
  InventoryWin::ms_uiMode = 1;
  if ( !(unsigned __int8)((int (*)(void))v1->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
  ItemShopWin::ResetPage(v1->m_pkItemShopWin);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00496C80) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenFriendWinKey(GameFrameWork *this)
{
  if ( !EditWin::ms_pkCurEditWin )
    GameFrameWork::OnOpenFriendWin(this);
}

//----- (00496C90) --------------------------------------------------------
void __thiscall GameFrameWork::ActivateCommunityWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgWin *v2; // eax@1
  PgWin *v3; // edi@5
  FriendWin *v4; // ecx@6
  NiRefObjectVtbl *v5; // ebx@6
  int v6; // eax@6
  NiRefObjectVtbl *v7; // ebx@6
  int v8; // eax@6

  v1 = this;
  v2 = this->m_pkCurrentCommunityWin;
  if ( v2 )
  {
    if ( (CPartyMatchWin *)v2 == this->m_pkPMWin )
    {
      GameFrameWork::CloseCommunityWin(this);
      return;
    }
    GameFrameWork::CloseCommunityWin(this);
  }
  v3 = (PgWin *)v1->m_pkPMWin;
  v1->m_iCommunityValue = 2;
  if ( v3 )
  {
    v4 = v1->m_pkFriendWin;
    v1->m_pkCurrentCommunityWin = v3;
    v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v5[43].__vecDelDtor((NiRefObject *)v3, v6);
    v7 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = ((int (*)(void))v1->m_pkFriendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    v7[44].__vecDelDtor((NiRefObject *)v3, v8);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
  }
}

//----- (00496D20) --------------------------------------------------------
void __thiscall GameFrameWork::CloseRidePetWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  void *v2; // eax@3
  RidePetWin *v3; // edi@3
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v4; // ecx@3
  int v5; // edx@4
  void *v6; // esi@4
  void *kPos; // [sp+8h] [bp-4h]@7

  v1 = this;
  if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkRidePetWin->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead;
  v3 = v1->m_pkRidePetWin;
  v4 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v1->m_kCanHideWinList;
  if ( v2 )
  {
    while ( 1 )
    {
      v5 = (int)((char *)v2 + 8);
      v6 = v2;
      v2 = *(void **)v2;
      if ( v3 == *(RidePetWin **)v5 )
        break;
      if ( !v2 )
        goto LABEL_6;
    }
  }
  else
  {
LABEL_6:
    v6 = 0;
  }
  kPos = v6;
  if ( v6 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v4, &kPos);
}

//----- (00496D90) --------------------------------------------------------
void __thiscall GameFrameWork::MHWinInfoToSettingSync(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  mhInfoWin *v2; // eax@1
  int v3; // eax@2
  char *v4; // eax@5
  mhSettingWin *v5; // edi@7
  int v6; // eax@7
  char buf; // [sp+8h] [bp-4h]@7

  v1 = this;
  v2 = this->m_pkMHInfoWin;
  if ( v2->m_FullTitleName.baseclass_0._Mysize )
  {
    v3 = (int)&v2->m_FullTitleName;
    if ( *(_DWORD *)(v3 + 20) >= 0x10u )
      v3 = *(_DWORD *)v3;
  }
  else
  {
    v3 = ((int (__thiscall *)(_DWORD))v2->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v2->m_pkTextFieldWin[1]);
  }
  ((void (__stdcall *)(_DWORD))v1->m_pkMHSettingWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v3);
  v4 = (char *)&v1->m_pkMHInfoWin->m_PassWord;
  if ( v1->m_pkMHInfoWin->m_PassWord.baseclass_0._Myres >= 0x10 )
    v4 = *(char **)v4;
  mhSettingWin::SetPassWord(v1->m_pkMHSettingWin, v4);
  v1->m_pkMHSettingWin->m_spCheckBox[1]->m_bCheck = v1->m_pkMHInfoWin->m_bItemView;
  v5 = v1->m_pkMHSettingWin;
  _itoa(v1->m_pkMHInfoWin->m_MaxPersonCount, &buf, 10);
  ((void (__stdcall *)(_DWORD))v5->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&buf);
  v6 = ((int (*)(void))v1->m_pkMHInfoWin->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  ((void (__stdcall *)(_DWORD))v1->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v6);
}

//----- (00496E90) --------------------------------------------------------
void __thiscall GameFrameWork::CloseFeedMoverWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  NiLight *element; // [sp+4h] [bp-4h]@3

  v1 = this;
  if ( this->m_pkFeedMoverWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0);
      element = (NiLight *)v1->m_pkFeedMoverWin;
      NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v1->m_kCanHideWinList,
        &element);
      ((void (__stdcall *)(_DWORD))v1->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
  }
}

//----- (00496F00) --------------------------------------------------------
void __thiscall GameFrameWork::OnGameStart(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  StatusBuffWin *v2; // ecx@1
  FriendWin *v3; // ecx@3
  PartyWinInterface *v4; // ecx@7
  char *v5; // eax@10
  MoverUpgradeWin *v6; // ecx@12
  char *v7; // eax@14
  EnchantGemToolTipWin *v8; // ecx@21
  Item *v9; // eax@43
  ItemInfo *v10; // eax@45
  MinimonInfo *v11; // eax@46
  MinimonInfo *v12; // edi@46
  char *v13; // eax@50
  Name3 *v14; // eax@51
  MapViewInfo *v15; // edi@51
  NiSourceTexture *v16; // ebx@51
  TargetWin *v17; // ecx@53
  LuaScriptMgr *v18; // ecx@55
  void *v19; // eax@56
  float v20; // eax@57
  LuaScriptMgr *v21; // ecx@61
  void *v22; // eax@62
  float v23; // eax@63
  LuaScriptMgr *v24; // eax@67
  CClientGuildAcademy *v25; // eax@68
  unsigned int *v26; // [sp-Ch] [bp-54h]@37
  char *v27; // [sp-8h] [bp-50h]@37
  Char *v28; // [sp-4h] [bp-4Ch]@37
  Name3 result; // [sp+28h] [bp-20h]@51
  void *v30; // [sp+34h] [bp-14h]@56
  int dwDummy; // [sp+38h] [bp-10h]@37
  int v32; // [sp+44h] [bp-4h]@56

  v1 = this;
  MachineOpt::LoadUserInfo();
  PgWin::InitPosLeftTop(
    &v1->m_pkStatusBuffWin->baseclass_0.baseclass_0.baseclass_0,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    MachineOpt::ms_kUserLoginOption.BufXPos,
    MachineOpt::ms_kUserLoginOption.BufYPos);
  StatusBuffWin::SetFrameBoxSize(
    v1->m_pkStatusBuffWin,
    MachineOpt::ms_kUserLoginOption.BufWidth,
    MachineOpt::ms_kUserLoginOption.BufHeight);
  StatusBuffWin::AlignBuf(
    v1->m_pkStatusBuffWin,
    MachineOpt::ms_kUserLoginOption.BufWidth / 20,
    MachineOpt::ms_kUserLoginOption.BufHeight / 20);
  PgWin::InitPosLeftTop(
    &v1->m_pkStatusDBuffWin->baseclass_0.baseclass_0.baseclass_0,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    MachineOpt::ms_kUserLoginOption.DBufXPos,
    MachineOpt::ms_kUserLoginOption.DBufYPos);
  StatusBuffWin::SetFrameBoxSize(
    v1->m_pkStatusDBuffWin,
    MachineOpt::ms_kUserLoginOption.DBufWidth,
    MachineOpt::ms_kUserLoginOption.DBufHeight);
  StatusBuffWin::AlignBuf(
    v1->m_pkStatusDBuffWin,
    MachineOpt::ms_kUserLoginOption.DBufWidth / 20,
    MachineOpt::ms_kUserLoginOption.DBufHeight / 20);
  v2 = v1->m_pkStatusChargedBuffWin;
  if ( v2 )
  {
    StatusBuffWin::RemoveAllMsgItemFromMap(v2);
    StatusBuffWin::SetFrameBoxSize(
      v1->m_pkStatusChargedBuffWin,
      MachineOpt::ms_kUserLoginOption.ChargedBufWidth,
      MachineOpt::ms_kUserLoginOption.ChargedBufHeight);
    StatusBuffWin::AlignBuf(
      v1->m_pkStatusChargedBuffWin,
      MachineOpt::ms_kUserLoginOption.ChargedBufWidth / 20,
      MachineOpt::ms_kUserLoginOption.ChargedBufHeight / 20);
    PgWin::InitPosLeftTop(
      &v1->m_pkStatusChargedBuffWin->baseclass_0.baseclass_0.baseclass_0,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      MachineOpt::ms_kUserLoginOption.ChargedBufXPos,
      MachineOpt::ms_kUserLoginOption.ChargedBufYPos);
  }
  FullMapWin::SetInvisibleWinAlpha(v1->m_pkMiniMapWin->m_pkFullMapWin, MachineOpt::ms_kUserLoginOption.FullMapAlpha);
  v3 = v1->m_pkFriendWin;
  if ( v3->m_bAllow != MachineOpt::ms_kUserLoginOption.bFriendAddAllow )
    FriendWin::OnClickRejectBtn(v3);
  GameFrameWork::SendNetMsgWorldMgr(v1, 0x16u, 0x1Bu, 0, 0);
  GameFrameWork::NcMapLoginCompleteCmd(v1);
  v1->m_bEnableAdmin = 0;
  GameFrameWork::NcActChatReq(v1, "&adminlevel");
  if ( g_kParty.m_uiTotalMember )
    GameFrameWork::NcPartyMemberinforeqCmd(v1);
  v4 = v1->m_pkPartyWinInterface;
  if ( v4 )
    PartyWinInterface::Update(v4);
  KeyboardMoveProcess::Clear(&v1->m_kCharMover);
  GameFrameWork::CloseRidePetWin(v1);
  if ( ItemUpgradeWin::IsUpgradingitem(v1->m_pkItemUpgradeWin) == 1 )
  {
    v5 = TextData::Get(0xC7E4E718u);
    GameFrameWork::AddSysMsg(v1, v5);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    InventoryWin::ms_uiMode = 0;
    GameFrameWork::NcActEndOfTrade(v1);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemUpgradeMsgWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v6 = v1->m_pkMoverUpgradeWin;
  if ( v6 && MoverUpgradeWin::IsUpgrading(v6) )
  {
    v7 = TextData3::Get(0x1D6C8675u);
    GameFrameWork::AddSysMsg(v1, v7);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0);
    InventoryWin::ms_uiMode = 0;
    GameFrameWork::NcActEndOfTrade(v1);
  }
  if ( v1->m_pkKingDomQuest )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkKingDomQuest->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
  InventoryWin::ms_uiMode = 0;
  GameFrameWork::NcActEndOfTrade(v1);
  if ( g_pkItemInfoWin
    && (unsigned __int8)((int (*)(void))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    ((void (__stdcall *)(_DWORD))g_pkItemInfoWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v8 = v1->m_pkEnchantGemToolTipWin;
  if ( v8
    && (unsigned __int8)((int (*)(void))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OnCloseEnchantGemToolTip(v1);
  ItemUseTask::InitCastingProgress();
  QuestPigeonEffect::ms_bGameStart = 1;
  GameFrameWork::ms_bGameFrameStart = 1;
  if ( !LOBYTE(g_pkMainChar[1].m_uiSkillActStep)
    && (Char::GetClass(g_pkMainChar) == 4
     || Char::GetClass(g_pkMainChar) == 5
     || Char::GetClass(g_pkMainChar) == 9
     || Char::GetClass(g_pkMainChar) == 10
     || Char::GetClass(g_pkMainChar) == 14
     || Char::GetClass(g_pkMainChar) == 15
     || Char::GetClass(g_pkMainChar) == 19
     || Char::GetClass(g_pkMainChar) == 20
     || Char::GetClass(g_pkMainChar) == 24
     || Char::GetClass(g_pkMainChar) == 25
     || Char::GetClass(g_pkMainChar) == 27) )
  {
    if ( User::Lv(&g_kUser) < 0x78 )
    {
      v28 = g_pkMainChar;
      v27 = "Aura100";
      v26 = (unsigned int *)&dwDummy;
    }
    else
    {
      v28 = g_pkMainChar;
      v27 = "Aura120";
      v26 = (unsigned int *)&dwDummy;
    }
    EffectMgr::CreateAttachEffect(&g_kEffectMgr, v26, v27, v28, None, Timer::ms_fCurTime, 1, 1, 0, 1);
    LOBYTE(g_pkMainChar[1].m_uiSkillActStep) = 1;
  }
  if ( v1->m_pkServerTimeWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkServerTimeWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkInventoryWin )
  {
    v9 = g_kInventory.m_aspEquip[25].m_pObject;
    if ( g_kInventory.m_aspEquip[25].m_pObject || (v9 = g_kInventory.m_aspEquip[28].m_pObject) != 0 )
    {
      v10 = v9->m_pkInfo;
      if ( v10 )
      {
        v11 = MinimonInfoTable::GetMinimonInfoByIDX(v10->InxName);
        v12 = v11;
        if ( v11 )
        {
          v1->m_pkInventoryWin->m_bAutoPickEnable = v11->MinimonRole == 1;
          InventoryWin::SetAutoPickMinimon(v1->m_pkInventoryWin, v11->MinimonRole == 1);
          InventoryWin::OnAutoPickShow(v1->m_pkInventoryWin);
          v1->m_pkInventoryWin->m_bAutoUseEnable = v12->MinimonRole == 2;
          InventoryWin::OnAutoUseShow(v1->m_pkInventoryWin);
        }
      }
    }
  }
  if ( v1->m_bWelcomeMsg && v1->m_pkWelcomeMsgWin )
  {
    v13 = TextData2::Get(0xB8E6E207u);
    AnnounceWin::AddText(v1->m_pkWelcomeMsgWin, v13, &Color::m_kDxGreenColor, 1, 10.0);
    v1->m_bWelcomeMsg = 0;
  }
  v14 = World::GetMapName(&g_kWorld, &result);
  v15 = MapViewInfoTab::GetByMapName(v14);
  World::PlayBGM(&g_kWorld);
  v16 = World::GetMiniMapTexture(&g_kWorld);
  if ( v15 )
  {
    MiniMapWin::SetMapScale(v1->m_pkMiniMapWin, v15->MiniMapScale);
    MiniMapWin::SetMapViewRect(v1->m_pkMiniMapWin, v15->StartX, v15->StartY, v15->EndX, v15->EndY);
    MiniMapWin::SetMapZoomFlag(v1->m_pkMiniMapWin, v15->Enlargement != 0);
  }
  MiniMapWin::SetMapTexture(v1->m_pkMiniMapWin, v16);
  v17 = v1->m_pkTargetWin;
  if ( v17 )
    TargetWin::ReSetTOT(v17, MachineOpt::ms_kUserLoginOption.bTargetOfTerget);
  v18 = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
  if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    v19 = operator new(0x14u);
    v30 = v19;
    v32 = 0;
    if ( v19 )
      LuaScriptMgr::LuaScriptMgr((LuaScriptMgr *)v19);
    else
      LODWORD(v20) = 0;
    v18 = (LuaScriptMgr *)LODWORD(v20);
    v32 = -1;
    Singleton<LuaScriptMgr>::m_pInstance = v20;
  }
  if ( !LuaScriptMgr::GetLuaScript(v18, LUA_SCRIPT_TYPE_NEWBIE_IMPROVE) )
  {
    v21 = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
    if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
    {
      v22 = operator new(0x14u);
      v30 = v22;
      v32 = 1;
      if ( v22 )
        LuaScriptMgr::LuaScriptMgr((LuaScriptMgr *)v22);
      else
        LODWORD(v23) = 0;
      v21 = (LuaScriptMgr *)LODWORD(v23);
      v32 = -1;
      Singleton<LuaScriptMgr>::m_pInstance = v23;
    }
    if ( LuaScriptMgr::CreateLuaScript(v21, LUA_SCRIPT_TYPE_NEWBIE_IMPROVE) )
    {
      v24 = Singleton<LuaScriptMgr>::getInstance();
      LuaScriptMgr::GetLuaScript(v24, LUA_SCRIPT_TYPE_NEWBIE_IMPROVE);
    }
  }
  v25 = GuildAcademyTask::GetGuildAcademy();
  if ( CClientGuildAcademy::AmIGuildAcademyMaster(v25) )
    GuildAcademyTask::CreateGuildacademyMasterEffect(g_pkMainChar);
  InventoryWin::SetEnableAutoArrange(v1->m_pkInventoryWin, byte_B5BB4E);
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A987C7: using guessed type bool GameFrameWork__ms_bGameFrameStart;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A9A760: using guessed type bool QuestPigeonEffect__ms_bGameStart;
// B5BB4E: using guessed type char byte_B5BB4E;

//----- (00497610) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseMHConfigRoomInfoWin(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  mhJoinWin *v2; // esi@1
  char buf; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = this->m_pkMHJoinWin;
  ((void (__stdcall *)(_DWORD))v2->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_98BCEF);
  ((void (__stdcall *)(_DWORD))v2->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_98BCDA);
  v2->m_spCheckBox[1]->m_bCheck = 0;
  mhJoinWin::SetPassWord(v2, &pcPassWord);
  _itoa(2, &buf, 10);
  ((void (__stdcall *)(_DWORD))v2->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&buf);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMHJoinWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004976A0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenMHItemInvenWin(GameFrameWork *this)
{
  GameFrameWork::OpenMHInfoWin(this, TE_EDIT_ROOM);
}

//----- (004976B0) --------------------------------------------------------
void __thiscall GameFrameWork::OnCloseMHItemInvenWin(GameFrameWork *this)
{
  GameFrameWork::OpenMHInfoWin(this, 0);
}

//----- (004976C0) --------------------------------------------------------
void __thiscall GameFrameWork::SetPlayGuideSkipList(GameFrameWork *this)
{
  GameFrameWork *v1; // ebx@1
  NiTListItem<unsigned int> *v2; // edi@1
  NiTListItem<unsigned int> *v3; // esi@1
  unsigned int v4; // edi@2
  NiTListItem<unsigned int> *v5; // ST00_4@8
  PgTList<unsigned int> kSkipList; // [sp+0h] [bp-1Ch]@1
  int v7; // [sp+18h] [bp-4h]@1

  v1 = this;
  v2 = 0;
  *(_DWORD *)&kSkipList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  kSkipList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  kSkipList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  kSkipList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&PgTList<unsigned_int>::_vftable_;
  v7 = 0;
  BasicInfoLinkTab::GetSkipList(&kSkipList);
  v3 = kSkipList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( kSkipList.baseclass_0.baseclass_0.baseclass_0.m_pkHead )
  {
    do
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      if ( *(_DWORD *)(*(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4) < 0
        && v1->m_bGuideViewList )
      {
        GameFrameWork::NcCharNewbieGuideViewSetCmd(v1, v4);
        *(_DWORD *)(*(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4) = v4;
      }
    }
    while ( v3 );
    v3 = kSkipList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v2 = 0;
  }
  kSkipList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&PgTList<unsigned_int>::_vftable_;
  v7 = 1;
  while ( v3 != v2 )
  {
    v5 = v3;
    v3 = v3->m_pkNext;
    kSkipList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *)&kSkipList,
      v5);
  }
}
// 98BF84: using guessed type int (__thiscall *PgTList_unsigned int____vftable_)(void *p, char);

//----- (004977A0) --------------------------------------------------------
void __thiscall GameFrameWork::OnEscape(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  GameFrameWork::SkillCastState v2; // eax@9
  NiPoint3 *v3; // eax@11
  int v4; // esi@18
  int v5; // edi@19
  const char *v6; // eax@19
  int v7; // edi@24
  void *v8; // eax@25
  PgWin *v9; // edi@30
  NpcDialogWin *v10; // ecx@31
  MoverUpgradeWin *v11; // eax@47
  ItemMixWin *v12; // eax@49
  PgWin *v13; // ecx@51
  HelpWin *v14; // ecx@57
  GuildNpcMenuWin *v15; // eax@60
  ServerMenuWin *v16; // ecx@68
  PgWin *v17; // eax@71
  PgWin *v18; // eax@71
  RandomOptionWin *v19; // ecx@78
  PgWin *v20; // [sp-14h] [bp-38h]@54
  int v21; // [sp-10h] [bp-34h]@0
  int v22; // [sp-Ch] [bp-30h]@0
  int v23; // [sp-8h] [bp-2Ch]@0
  int v24; // [sp-4h] [bp-28h]@0
  NiTList<PgWin *> kTempShowList; // [sp+0h] [bp-24h]@11
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > result; // [sp+10h] [bp-14h]@11
  void *pkSrcWin; // [sp+14h] [bp-10h]@25
  int v28; // [sp+20h] [bp-4h]@24

  v1 = this;
  if ( InventoryWin::ms_uiMode == 8 )
  {
    PgFrameWork::AddMsg(&this->baseclass_0, 0x10Au, 0, 0);
    v1->m_bPickCancel = 0;
    return;
  }
  if ( dword_B30F24 == 2 )
  {
    ItemRepairWin::CancelItemRepair(this->m_pkItemRepairWin);
    return;
  }
  if ( dword_B30F28 == 2 )
  {
    InventoryWin::OnCreateNewSocket(this->m_pkInventoryWin, 0);
    return;
  }
  if ( dword_B30F2C == 2 )
  {
    InventoryWin::OnResetRecoverCountState(this->m_pkInventoryWin);
    return;
  }
  v2 = this->m_kSkillCasting.eState;
  if ( v2 == 3 )
  {
    if ( !Char::GetReserveSkillSmash(g_pkMainChar) )
    {
      v3 = (NiPoint3 *)((int (__stdcall *)(int, int, int, int, NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *, NiTListItem<PgWin *> *, NiTListItem<PgWin *> *, _DWORD, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > >))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)(
                         v21,
                         v22,
                         v23,
                         v24,
                         kTempShowList.baseclass_0.baseclass_0.vfptr,
                         kTempShowList.baseclass_0.baseclass_0.m_pkHead,
                         kTempShowList.baseclass_0.baseclass_0.m_pkTail,
                         *(_DWORD *)&kTempShowList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0],
                         result);
      GameFrameWork::NcActStopReq(v1, v3);
      GameFrameWork::NcBatSkillbashCastabortReq(v1);
      Char::CancelSkillAction(g_pkMainChar, 1);
    }
    return;
  }
  if ( v2 == 1 )
  {
    this->m_kSkillCasting.eState = 0;
    return;
  }
  if ( dword_AA502C || pkObj )
  {
    GameFrameWork::MHObjFocusCancel(this);
    return;
  }
  if ( nowState == 2 && this->m_pkMHRepairWin )
  {
    GameFrameWork::OpenMHRepairWin(this, 0, 0);
    v4 = unk_B703F0;
    while ( v4 )
    {
      v5 = *(_DWORD *)(v4 + 8);
      v6 = *(const char **)(v5 + 8);
      v4 = *(_DWORD *)v4;
      if ( v6 && !strncmp(v6, "MsgBox", 6u) )
        MsgBox::CloseWithCancel((MsgBox *)v5);
    }
    return;
  }
  *(_DWORD *)&kTempShowList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  kTempShowList.baseclass_0.baseclass_0.m_pkHead = 0;
  kTempShowList.baseclass_0.baseclass_0.m_pkTail = 0;
  kTempShowList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTList<PgWin__>::_vftable_;
  v7 = unk_B703F0;
  v28 = 0;
  if ( unk_B703F0 )
  {
    do
    {
      v8 = *(void **)(v7 + 8);
      v7 = *(_DWORD *)v7;
      pkSrcWin = v8;
      if ( *(std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node **)&std::_Tree<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::find(&v1->m_setEscapeHide.baseclass_0, &result, (PgWin *const *)&pkSrcWin)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead )
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&kTempShowList,
          (NiD3DXEffectParameter *const *)&pkSrcWin);
    }
    while ( v7 );
    if ( *(_DWORD *)&kTempShowList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] > 0u )
    {
      if ( v1->m_bEscapeKeyPriority )
      {
        v9 = kTempShowList.baseclass_0.baseclass_0.m_pkTail->m_element;
        if ( v9 )
        {
          v10 = v1->m_pkNpcDlgWin;
          if ( (NpcDialogWin *)v9 == v10 )
          {
            NpcDialogWin::CloseDialog(v10);
            v28 = -1;
            NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
            return;
          }
          if ( (ItemShopWin *)v9 == v1->m_pkItemShopWin )
          {
            GameFrameWork::NcActEndOfTrade(v1);
            PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0);
            InventoryWin::ms_uiMode = 0;
            v28 = -1;
            NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
            return;
          }
          if ( (NPCItemWin *)v9 == v1->m_pkItemShopWin2 )
          {
            GameFrameWork::CloseItemShopWin(v1);
            v28 = -1;
            NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
            return;
          }
          if ( (KingdomQuestWin *)v9 == v1->m_pkKingDomQuest )
          {
            GameFrameWork::CloseKDQuestWin(v1);
            v28 = -1;
            NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
            return;
          }
          if ( (NPCSkillWin *)v9 == v1->m_pkNPCSkillWin )
          {
            GameFrameWork::CloseSkillShopMenu(v1);
            v28 = -1;
            NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
            return;
          }
          if ( (ExpeditionWin *)v9 != v1->m_pkExpeditionWin && (PartyLootSetupWin *)v9 != v1->m_pkPartyLootSetupWin )
          {
            if ( (NPCSoulWin *)v9 == v1->m_pkNPCSoulWin )
            {
              GameFrameWork::CloseSoulStoneShopMenu(v1);
              v28 = -1;
              NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
              return;
            }
            if ( (ItemUpgradeWin *)v9 == v1->m_pkItemUpgradeWin )
            {
              GameFrameWork::CloseItemUpgradeWin(v1, 1);
              v28 = -1;
              NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
              return;
            }
            v11 = v1->m_pkMoverUpgradeWin;
            if ( (MoverUpgradeWin *)v9 == v11 )
            {
              v11->m_pkMsgBox = 0;
              GameFrameWork::CloseMoverUpgradeWin(v1, 1);
              v28 = -1;
              NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
              return;
            }
            v12 = v1->m_pkItemMixWin;
            if ( (ItemMixWin *)v9 == v12 )
            {
              v12->m_pkMsgBox = 0;
              PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0);
              InventoryWin::ms_uiMode = 0;
              GameFrameWork::NcActEndOfTrade(v1);
              v28 = -1;
              NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
              return;
            }
            v13 = (PgWin *)v1->m_pkItemLinkInfoWin;
            if ( v9 == v13 )
            {
              if ( !v13
                || (unsigned __int8)((int (*)(void))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() != 1 )
                goto LABEL_84;
              v20 = (PgWin *)v1->m_pkItemLinkInfoWin;
              goto LABEL_83;
            }
            if ( (StorageWin *)v9 == v1->m_pkStorageWin )
            {
              GameFrameWork::CloseStorageMenu(v1);
              v28 = -1;
              NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
              return;
            }
            v14 = v1->m_pkHelpWin;
            if ( (HelpWin *)v9 == v14 )
            {
              HelpWin::OnWinClose(v14);
              v28 = -1;
              NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
              return;
            }
            if ( (GuildNpcMenuWin *)v9 == GuildTask::GetGuildNpcMenuWin() )
            {
              v15 = GuildTask::GetGuildNpcMenuWin();
              GuildNpcMenuWin::Close(v15);
              v20 = (PgWin *)GuildTask::GetGuildNpcMenuWin();
LABEL_83:
              PgWinMgr::CloseWin(&Pgg_kWinMgr, v20);
              goto LABEL_84;
            }
            if ( (WingStoneWin *)v9 == v1->m_pkWingStoneWin )
            {
              GameFrameWork::CloseWingStoneWin(v1);
              v28 = -1;
              NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
              return;
            }
            if ( (WingStoneMapWin *)v9 != v1->m_pkWingStoneMapWin )
            {
              if ( (ShopWin *)v9 == v1->m_pkShopWin )
              {
                GameFrameWork::OnOpenItemShopWin(v1);
                v28 = -1;
                NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
                return;
              }
              if ( (ForumWin *)v9 == v1->m_pkForumWin )
              {
                GameFrameWork::OnOpenForumWin(v1);
                v28 = -1;
                NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
                return;
              }
              v16 = v1->m_pkServerMenuWin;
              if ( (ServerMenuWin *)v9 == v16 )
              {
                ServerMenuWin::OnBut2(v16);
                v28 = -1;
                NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
                return;
              }
              if ( (GTTSkillWin *)v9 == GuildTask::GetGTTSkillWin() )
              {
                v17 = (PgWin *)GuildTask::GetGTTSkillWin();
                PgWinMgr::CloseWin(&Pgg_kWinMgr, v17);
                v18 = (PgWin *)GuildTask::GetGTTMiniSkillWin();
                PgWinMgr::ShowWin(&Pgg_kWinMgr, v18);
                v28 = -1;
                NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
                return;
              }
              if ( (mhJoinWin *)v9 == v1->m_pkMHJoinWin )
              {
                GameFrameWork::OnCloseMHConfigRoomInfoWin(v1);
                v28 = -1;
                NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
                return;
              }
              if ( (CollectCardWin *)v9 == v1->m_pkCollectCardWin[0]
                || (CollectCardWin *)v9 == v1->m_pkCollectCardWin[1]
                || (CollectCardWin *)v9 == v1->m_pkCollectCardWin[2]
                || (CollectCardWin *)v9 == v1->m_pkCollectCardWin[3] )
              {
                if ( GameFrameWork::IsPlayCardOpen(v1) )
                {
LABEL_84:
                  v28 = -1;
                  NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
                  return;
                }
                CollectCardWin::Reset((CollectCardWin *)v9);
              }
              else
              {
                v19 = v1->m_pkRandomOptionWin;
                if ( (RandomOptionWin *)v9 == v19 )
                {
                  RandomOptionWin::OnCancel(v19);
                  v28 = -1;
                  NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
                  return;
                }
              }
            }
          }
          v20 = v9;
          goto LABEL_83;
        }
      }
    }
  }
  if ( !GameFrameWork::CancelCharSelect(v1) && v1->m_bEscapeKeyPriority )
    GameFrameWork::OnOpenSystemWin(v1);
  v28 = -1;
  NiTList<PgWin__>::_NiTList<PgWin__>(&kTempShowList);
}
// 98BF94: using guessed type int (__thiscall *NiTList_PgWin _____vftable_)(void *p, char);
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// AA502C: using guessed type int dword_AA502C;
// B30F24: using guessed type int dword_B30F24;
// B30F28: using guessed type int dword_B30F28;
// B30F2C: using guessed type int dword_B30F2C;

//----- (00497EE0) --------------------------------------------------------
bool __thiscall GameFrameWork::OpenPetDialog(GameFrameWork *this, unsigned __int16 kPetHandle, Name4 kPetName)
{
  GameFrameWork *v3; // esi@1
  Char *v4; // eax@1
  void *v5; // edi@4
  void *v6; // eax@5
  NiExtraData *v7; // eax@6
  void *v8; // eax@8
  void *v9; // esi@8
  char *v10; // eax@11
  void *v11; // edi@13
  void *v12; // eax@14
  NiExtraData *v13; // eax@15
  void *v14; // eax@17
  void *v15; // esi@17
  char *v16; // eax@20
  NpcDialogWin *v17; // ecx@22
  char *v18; // eax@22
  bool result; // al@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v20; // [sp-3Ch] [bp-84h]@11
  int v21; // [sp-20h] [bp-68h]@11
  NiExtraData *v22; // [sp-1Ch] [bp-64h]@11
  NiExtraData *v23; // [sp-18h] [bp-60h]@11
  NiExtraData *v24; // [sp-14h] [bp-5Ch]@11
  unsigned int v25; // [sp-10h] [bp-58h]@1
  PupMain *pkPetMain; // [sp+0h] [bp-48h]@2
  NiTList<ScriptBtn *> kScriptBtnList; // [sp+4h] [bp-44h]@4
  void *v28; // [sp+14h] [bp-34h]@8
  void *v29; // [sp+18h] [bp-30h]@4
  GameFrameWork *v30; // [sp+1Ch] [bp-2Ch]@1
  NiExtraData *element; // [sp+20h] [bp-28h]@5
  char acName[17]; // [sp+24h] [bp-24h]@22
  unsigned int v33; // [sp+38h] [bp-10h]@1
  int v34; // [sp+44h] [bp-4h]@4
  int v35; // [sp+48h] [bp+0h]@1

  v33 = (unsigned int)&v35 ^ __security_cookie;
  v25 = (unsigned int)&v35 ^ __security_cookie;
  v3 = this;
  v30 = this;
  v4 = CharMgr::GetChar(&g_kCharMgr, kPetHandle);
  if ( v4 && (pkPetMain = PetMainTab::GetByPetID((unsigned int)v4[1].baseclass_0.vfptr)) != 0 && v3->m_pkNpcDlgWin )
  {
    *(_DWORD *)&kScriptBtnList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
    kScriptBtnList.baseclass_0.baseclass_0.m_pkHead = 0;
    kScriptBtnList.baseclass_0.baseclass_0.m_pkTail = 0;
    kScriptBtnList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *>Vtbl *)&NiTList<ScriptBtn__>::_vftable_;
    v34 = 0;
    v5 = operator new(0x2Cu);
    v29 = v5;
    LOBYTE(v34) = 1;
    if ( v5 )
    {
      v6 = operator new(0x10u);
      element = (NiExtraData *)v6;
      LOBYTE(v34) = 2;
      if ( v6 )
      {
        NiStringExtraData::NiStringExtraData((NiStringExtraData *)v6, "PetSetName");
        element = v7;
      }
      else
      {
        element = 0;
      }
      v8 = operator new(0x10u);
      v9 = v8;
      v28 = v8;
      LOBYTE(v34) = 3;
      if ( v8 )
      {
        NiExtraData::NiExtraData((NiExtraData *)v8);
        *(_DWORD *)v9 = &NiIntegerExtraData::_vftable_;
        *((_DWORD *)v9 + 3) = 0;
      }
      else
      {
        v9 = 0;
      }
      v24 = 0;
      v23 = element;
      v22 = (NiExtraData *)v9;
      v21 = 0;
      LOBYTE(v34) = 1;
      v10 = TextData3::Get(0x6EEAF3F3u);
      v28 = &v20;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &v20,
        v10);
      ScriptBtn::ScriptBtn((ScriptBtn *)v5, v20, v21, v22, v23, v24);
      v3 = v30;
    }
    else
    {
      v10 = 0;
    }
    LOBYTE(v34) = 0;
    element = (NiExtraData *)v10;
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&kScriptBtnList,
      (NiD3DXEffectParameter *const *)&element);
    v11 = operator new(0x2Cu);
    v28 = v11;
    LOBYTE(v34) = 4;
    if ( v11 )
    {
      v12 = operator new(0x10u);
      v29 = v12;
      LOBYTE(v34) = 5;
      if ( v12 )
      {
        NiStringExtraData::NiStringExtraData((NiStringExtraData *)v12, "PetSetNameCancel");
        element = v13;
      }
      else
      {
        element = 0;
      }
      LOBYTE(v34) = 4;
      v14 = operator new(0x10u);
      v15 = v14;
      v29 = v14;
      LOBYTE(v34) = 6;
      if ( v14 )
      {
        NiExtraData::NiExtraData((NiExtraData *)v14);
        *(_DWORD *)v15 = &NiIntegerExtraData::_vftable_;
        *((_DWORD *)v15 + 3) = 0;
      }
      else
      {
        v15 = 0;
      }
      v24 = 0;
      v23 = element;
      v22 = (NiExtraData *)v15;
      v21 = 0;
      LOBYTE(v34) = 4;
      v16 = TextData3::Get(0xBC2C2C36u);
      v29 = &v20;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &v20,
        v16);
      ScriptBtn::ScriptBtn((ScriptBtn *)v11, v20, v21, v22, v23, v24);
      v3 = v30;
    }
    else
    {
      v16 = 0;
    }
    v30 = (GameFrameWork *)v16;
    LOBYTE(v34) = 0;
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&kScriptBtnList,
      (NiD3DXEffectParameter *const *)&v30);
    *(_QWORD *)acName = *(_QWORD *)&kPetName;
    v17 = v3->m_pkNpcDlgWin;
    *(_QWORD *)&acName[8] = *(_QWORD *)&kPetName.n4_name[8];
    acName[16] = 0;
    NpcDialogWin::CloseDialog(v17);
    v24 = (NiExtraData *)&kScriptBtnList;
    v23 = (NiExtraData *)acName;
    v18 = TextData3::Get(0x837B6C8Eu);
    v23 = (NiExtraData *)fs(v18);
    v22 = (NiExtraData *)pkPetMain->PupIDX;
    NpcDialogWin::OpenNpcScriptDialog(v3->m_pkNpcDlgWin, pkPetMain->PupIDX, (char *)v23, (NiTList<ScriptBtn *> *)v24);
    v24 = (NiExtraData *)v3->m_pkNpcDlgWin;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v24);
    v34 = -1;
    NiTList<ScriptBtn__>::_NiTList<ScriptBtn__>(&kScriptBtnList);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);
// 98BFA4: using guessed type int (__thiscall *NiTList_ScriptBtn _____vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00498170) --------------------------------------------------------
void __thiscall GameFrameWork::SendMHBuildingOrFixReq(GameFrameWork *this, unsigned int uiwParam)
{
  GameFrameWork *v2; // ebx@1
  char *v3; // eax@2
  char *v4; // esi@2
  char *v5; // eax@3
  char *v6; // eax@4
  char *v7; // esi@4
  const char *v8; // eax@5
  char v9; // al@5
  mhJoinWin *v10; // ecx@5
  int v11; // eax@5
  int v12; // edx@5
  char v13; // cl@6
  int v14; // eax@7
  NiRefObjectVtbl *v15; // edx@7
  char *v16; // eax@7
  int v17; // eax@7
  int v18; // esi@7
  char v19; // cl@8
  NiRefObjectVtbl *v20; // edx@9
  char *v21; // eax@9
  int v22; // eax@9
  int v23; // edx@9
  char v24; // cl@10
  int v25; // eax@11
  NiRefObjectVtbl *v26; // edx@11
  char *v27; // eax@11
  char *v28; // eax@11
  char v29; // cl@12
  char *v30; // eax@14
  char *v31; // edx@14
  char v32; // cl@15
  const char *v33; // eax@18
  PgNet *v34; // ecx@19
  char *v35; // eax@21
  void *(__thiscall *v36)(NiRefObject *, unsigned int); // eax@23
  const char *v37; // eax@23
  int v38; // eax@23
  int v39; // esi@23
  char v40; // cl@24
  NiRefObjectVtbl *v41; // edx@25
  char *v42; // eax@25
  int v43; // eax@25
  int v44; // esi@25
  char v45; // cl@26
  NiRefObjectVtbl *v46; // edx@27
  char *v47; // eax@27
  char *v48; // eax@27
  char *v49; // esi@27
  PROTO_NC_MINIHOUSE_MODIFY_TITLE_REQ *v50; // eax@28
  char v51; // cl@29
  char *v52; // eax@31
  char *v53; // edx@31
  char v54; // cl@32
  mhInfoWin *v55; // eax@33
  int v56; // eax@34
  const char *v57; // esi@38
  const char *v58; // esi@40
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v59; // eax@40
  int v60; // ecx@40
  PgNet *v61; // ecx@45
  int v62; // eax@48
  const char *v63; // esi@53
  mhInfoWin *v64; // eax@53
  int v65; // eax@57
  int v66; // edx@57
  char v67; // cl@58
  bool v68; // zf@59
  const char *v69; // esi@61
  char *v70; // eax@63
  char *v71; // esi@63
  int v72; // eax@64
  char v73; // dl@64
  char v74; // cl@65
  int v75; // eax@66
  int v76; // esi@66
  char v77; // cl@67
  NiRefObjectVtbl *v78; // edx@68
  char *v79; // eax@68
  PgNet *v80; // ecx@68
  int v81; // eax@68
  int v82; // edx@68
  char v83; // cl@69
  ColumnBut *v84; // edx@71
  char v85; // al@72
  PgNet *v86; // ecx@72
  PROTO_NC_MINIHOUSE_BUILDING_REQ v87; // [sp-9Eh] [bp-17Ch]@19
  NETCOMMAND *v88; // [sp-1Eh] [bp-FCh]@19
  unsigned int v89; // [sp-1Ah] [bp-F8h]@7
  unsigned int v90; // [sp-16h] [bp-F4h]@1
  PROTO_NC_MINIHOUSE_MODIFY_ITEM_INFO_OPEN_REQ pkProto; // [sp+0h] [bp-DEh]@42
  PROTO_NC_MINIHOUSE_MODIFY_MAXENTERNUM_REQ kProtoMaxNum; // [sp+1h] [bp-DDh]@23
  NETCOMMAND netcmd; // [sp+2h] [bp-DCh]@1
  char temp[128]; // [sp+6h] [bp-D8h]@2
  char v95; // [sp+8Ah] [bp-54h]@19
  PROTO_NC_MINIHOUSE_MODIFY_TITLE_REQ kProtoTitle; // [sp+8Eh] [bp-50h]@23
  PROTO_NC_MINIHOUSE_MODIFY_PASSWORD_REQ kProtoPassWord; // [sp+A6h] [bp-38h]@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+B2h] [bp-2Ch]@40
  unsigned int v99; // [sp+CEh] [bp-10h]@1
  int v100; // [sp+DAh] [bp-4h]@40
  int v101; // [sp+DEh] [bp+0h]@1

  v99 = (unsigned int)&v101 ^ __security_cookie;
  v90 = (unsigned int)&v101 ^ __security_cookie;
  netcmd.protocol = netcmd.protocol & 0x3FF | 0x8C00;
  v2 = this;
  if ( nowState )
  {
    if ( (signed int)nowState < 0 )
      return;
    memcpy(temp, &byte_AA508C, 0x84u);
    *(_DWORD *)&kProtoTitle.title[0] = 0;
    *(_DWORD *)&kProtoTitle.title[4] = 0;
    *(_DWORD *)&kProtoTitle.title[8] = 0;
    *(_DWORD *)&kProtoTitle.title[12] = 0;
    *(_DWORD *)&kProtoTitle.title[16] = 0;
    kProtoTitle.title[20] = 0;
    *(_DWORD *)&kProtoPassWord.password[0] = 0;
    *(_DWORD *)&kProtoPassWord.password[4] = 0;
    kProtoPassWord.password[8] = 0;
    v36 = this->m_pkMHSettingWin->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor;
    v95 = *(&byte_AA508C + 132);
    v37 = (const char *)((int (__cdecl *)(unsigned int))v36)(v90);
    kProtoMaxNum.maxvisiter = atoi(v37);
    v38 = ((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v39 = v38 + 1;
    do
      v40 = *(_BYTE *)v38++;
    while ( v40 );
    v41 = v2->m_pkMHSettingWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v89 = v38 - v39;
    v42 = (char *)((int (*)(void))v41[113].__vecDelDtor)();
    strncpy(kProtoTitle.title, v42, v89);
    v43 = ((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v44 = v43 + 1;
    do
      v45 = *(_BYTE *)v43++;
    while ( v45 );
    v46 = v2->m_pkMHSettingWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v89 = v43 - v44;
    v47 = (char *)((int (*)(void))v46[113].__vecDelDtor)();
    strncpy(kProtoPassWord.password, v47, v89);
    v48 = (char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v49 = TextFilterTable::FilterSlander(v48);
    if ( strcmp(
           (const char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
           v49) )
      goto LABEL_3;
    v50 = &kProtoTitle;
    do
    {
      v51 = v50->title[0];
      v50 = (PROTO_NC_MINIHOUSE_MODIFY_TITLE_REQ *)((char *)v50 + 1);
    }
    while ( v51 );
    if ( (char *)v50 == &kProtoTitle.title[1] )
    {
      v52 = TextData::Get(0xE539443Fu);
      v53 = (char *)((char *)&kProtoTitle - v52);
      do
      {
        v54 = *v52;
        v53[(_DWORD)v52] = *v52;
        ++v52;
      }
      while ( v54 );
    }
    v55 = v2->m_pkMHInfoWin;
    netcmd.protocol = netcmd.protocol & 0xFC2E | 0x2E;
    if ( v55->m_FullTitleName.baseclass_0._Mysize )
    {
      v56 = (int)&v55->m_FullTitleName;
      if ( *(_DWORD *)(v56 + 20) >= 0x10u )
        v56 = *(_DWORD *)v56;
    }
    else
    {
      v56 = ((int (__thiscall *)(PgWinText *))v55->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v55->m_pkTextFieldWin[1]);
    }
    if ( !v56
      || (v57 = (const char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
          strcmp(mhInfoWin::GetTitle(v2->m_pkMHInfoWin), v57)) )
    {
      PgNet::AddNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &netcmd, 2);
      PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &kProtoTitle, 21);
      Sleep(2u);
    }
    v58 = (const char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v58, strlen(v58));
    v59 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
    v60 = (int)&v2->m_pkMHInfoWin->m_PassWord;
    v100 = 0;
    if ( thisa.baseclass_0._Myres < 0x10 )
      v59 = &thisa;
    pkProto.bItemInfoClose = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                               (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v60,
                               0,
                               *(_DWORD *)(v60 + 16),
                               v59->baseclass_0.___u0.baseclass_0.dummy,
                               thisa.baseclass_0._Mysize) != 0;
    v100 = -1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    if ( pkProto.bItemInfoClose )
    {
      v61 = (PgNet *)v2->m_spZoneNet.m_pObject;
      netcmd.protocol = netcmd.protocol & 0xFC2B | 0x2B;
      PgNet::AddNetMsg(v61, &netcmd, 2);
      PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &kProtoPassWord, 9);
      Sleep(2u);
    }
    if ( kProtoMaxNum.maxvisiter == temp[0] )
    {
LABEL_53:
      v63 = (const char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v63, strlen(v63));
      v64 = v2->m_pkMHInfoWin;
      v100 = 1;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v64->m_PassWord,
        &thisa,
        0,
        0xFFFFFFFFu);
      v100 = -1;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      if ( ((int (*)(void))v2->m_pkMHInfoWin->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)() )
      {
        if ( !((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)() )
          goto LABEL_63;
        v69 = (const char *)((int (*)(void))v2->m_pkMHInfoWin->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
        v68 = strcmp(
                (const char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
                v69) == 0;
      }
      else
      {
        if ( !((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)() )
          goto LABEL_71;
        v65 = ((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v66 = v65 + 1;
        do
          v67 = *(_BYTE *)v65++;
        while ( v67 );
        v68 = v65 == v66;
      }
      if ( v68 )
        goto LABEL_71;
LABEL_63:
      v70 = (char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      v71 = TextFilterTable::FilterSlander(v70);
      if ( !strcmp(
              (const char *)((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
              v71) )
      {
        memset(&temp[4], 0, 0x80u);
        v72 = ((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v73 = v72 + 1;
        do
          v74 = *(_BYTE *)v72++;
        while ( v74 );
        temp[4] = v72 - v73;
        v75 = ((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v76 = v75 + 1;
        do
          v77 = *(_BYTE *)v75++;
        while ( v77 );
        v78 = v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v89 = v75 - v76;
        v79 = (char *)((int (*)(void))v78[113].__vecDelDtor)();
        strncpy(&temp[5], v79, v89);
        v80 = (PgNet *)v2->m_spZoneNet.m_pObject;
        netcmd.protocol = netcmd.protocol & 0xFC48 | 0x48;
        PgNet::AddNetMsg(v80, &netcmd, 2);
        v81 = ((int (*)(void))v2->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v82 = v81 + 1;
        do
          v83 = *(_BYTE *)v81++;
        while ( v83 );
        PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &temp[4], v81 - v82 + 1);
        Sleep(2u);
LABEL_71:
        v84 = v2->m_pkMHSettingWin->m_spCheckBox[1];
        if ( v2->m_pkMHInfoWin->m_bItemView != v84->m_bCheck )
        {
          v85 = v84->m_bCheck;
          v89 = 2;
          netcmd.protocol = netcmd.protocol & 0xFC43 | 0x43;
          v86 = (PgNet *)v2->m_spZoneNet.m_pObject;
          pkProto.bItemInfoClose = v85;
          PgNet::AddNetMsg(v86, &netcmd, 2);
          PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &pkProto, 1);
          Sleep(2u);
        }
        return;
      }
LABEL_3:
      v5 = TextData::Get(0x24663F86u);
      GameFrameWork::AddSysMsg(v2, v5);
      return;
    }
    netcmd.protocol = netcmd.protocol & 0xFC32 | 0x32;
    if ( (unsigned __int8)kProtoMaxNum.maxvisiter <= 0xFu )
    {
      if ( (unsigned __int8)kProtoMaxNum.maxvisiter >= 2u )
      {
LABEL_52:
        PgNet::AddNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &netcmd, 2);
        PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &kProtoMaxNum, 1);
        Sleep(2u);
        goto LABEL_53;
      }
      v62 = v2->m_pkMHInfoWin->m_MaxPersonCount;
    }
    else
    {
      v62 = v2->m_pkMHInfoWin->m_MaxPersonCount;
    }
    kProtoMaxNum.maxvisiter = v62;
    goto LABEL_52;
  }
  netcmd.protocol = netcmd.protocol & 0xFC03 | 3;
  PgNet::AddNetMsg(&this->m_spZoneNet.m_pObject->baseclass_0, &netcmd, 2);
  *(_DWORD *)&temp[10] = 0;
  *(_DWORD *)&temp[14] = 0;
  *(_DWORD *)&temp[18] = 0;
  *(_DWORD *)&temp[22] = 0;
  *(_DWORD *)&temp[26] = 0;
  temp[30] = 0;
  *(_DWORD *)&temp[1] = 0;
  *(_DWORD *)&temp[5] = 0;
  temp[9] = 0;
  memset(&temp[32], 0, 0x65u);
  v3 = (char *)((int (__cdecl *)(unsigned int))v2->m_pkMHJoinWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v90);
  v4 = TextFilterTable::FilterSlander(v3);
  if ( strcmp(
         (const char *)((int (*)(void))v2->m_pkMHJoinWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
         v4)
    || (v6 = (char *)((int (*)(void))v2->m_pkMHJoinWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
        v7 = TextFilterTable::FilterSlander(v6),
        strcmp(
          (const char *)((int (*)(void))v2->m_pkMHJoinWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
          v7)) )
    goto LABEL_3;
  v8 = (const char *)((int (*)(void))v2->m_pkMHJoinWin->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v9 = atoi(v8);
  v10 = v2->m_pkMHJoinWin;
  temp[0] = v9;
  v11 = ((int (*)(void))v10->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v12 = v11 + 1;
  do
    v13 = *(_BYTE *)v11++;
  while ( v13 );
  v14 = v11 - v12;
  v15 = v2->m_pkMHJoinWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v89 = v14;
  v16 = (char *)((int (*)(void))v15[113].__vecDelDtor)();
  strncpy(&temp[10], v16, v89);
  v17 = ((int (*)(void))v2->m_pkMHJoinWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v18 = v17 + 1;
  do
    v19 = *(_BYTE *)v17++;
  while ( v19 );
  v20 = v2->m_pkMHJoinWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v89 = v17 - v18;
  v21 = (char *)((int (*)(void))v20[113].__vecDelDtor)();
  strncpy(&temp[1], v21, v89);
  v22 = ((int (*)(void))v2->m_pkMHJoinWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v23 = v22 + 1;
  do
    v24 = *(_BYTE *)v22++;
  while ( v24 );
  v25 = v22 - v23;
  v26 = v2->m_pkMHJoinWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v89 = v25;
  v27 = (char *)((int (*)(void))v26[113].__vecDelDtor)();
  strncpy(&temp[32], v27, v89);
  v28 = &temp[10];
  do
    v29 = *v28++;
  while ( v29 );
  if ( v28 == &temp[11] )
  {
    v30 = TextData::Get(0xE539443Fu);
    v31 = (char *)(&temp[10] - v30);
    do
    {
      v32 = *v30;
      v31[(_DWORD)v30] = *v30;
      ++v30;
    }
    while ( v32 );
    ((void (__stdcall *)(char *))v2->m_pkMHJoinWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&temp[10]);
  }
  if ( !temp[0] )
  {
    mhJoinWin::SetMaxPerson(v2->m_pkMHJoinWin, 2);
    v33 = (const char *)((int (*)(void))v2->m_pkMHJoinWin->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    temp[0] = atoi(v33);
LABEL_19:
    temp[31] = v2->m_pkMHJoinWin->m_spCheckBox[1]->m_bCheck;
    memcpy(&v87, temp, 0x84u);
    LOBYTE(v89) = v95;
    MiniHouseIndoor::SetBuildingRoomInfo(&g_kWorld.m_MiniHouseIndoorMode, v87);
    v89 = 133;
    v88 = (NETCOMMAND *)temp;
    PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, temp, 133);
    byte_AA5170 = 1;
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkMHJoinWin->baseclass_0.baseclass_0.baseclass_0);
    v89 = 2;
    v88 = &netcmd;
    v34 = (PgNet *)v2->m_spZoneNet.m_pObject;
    netcmd.protocol = netcmd.protocol & 0xFC03 | 3;
    PgNet::AddNetMsg(v34, &netcmd, 2);
    return;
  }
  if ( temp[0] <= 0xFu )
    goto LABEL_19;
  mhJoinWin::SetMaxPerson(v2->m_pkMHJoinWin, 15);
  temp[0] = mhJoinWin::GetMaxPerson(v2->m_pkMHJoinWin);
  v35 = TextData2::Get(0x5A8C7393u);
  GameFrameWork::AddSysMsg(v2, v35);
}
// A85C00: using guessed type int __security_cookie;
// AA508C: using guessed type char byte_AA508C;
// AA5170: using guessed type char byte_AA5170;

//----- (00498C80) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCollectPopupWin(GameFrameWork *this, unsigned int uiCardID)
{
  GameFrameWork *v2; // ebx@1
  CollectWin *v3; // ecx@2
  unsigned int v4; // esi@2
  unsigned int v5; // edi@2
  unsigned int v6; // ebx@2
  std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > *v7; // ST10_4@2
  int v8; // ecx@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ebx@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // esi@6
  char *v11; // eax@6
  bool v12; // zf@7
  int v13; // eax@8
  unsigned int v14; // edi@9
  unsigned int v15; // esi@11
  void *v16; // eax@12
  int v17; // ebx@15
  signed int v18; // esi@17
  int v19; // edi@20
  CollectPopupWin *v20; // esi@22
  const char *v21; // eax@24
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // edi@26
  char *v23; // esi@26
  std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > kRewardInfos; // [sp+0h] [bp-80h]@2
  int v25; // [sp+10h] [bp-70h]@3
  SoundIndex rkIndex; // [sp+14h] [bp-6Ch]@3
  GameFrameWork *v27; // [sp+1Ch] [bp-64h]@1
  int uiTextCount; // [sp+20h] [bp-60h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText[2]; // [sp+24h] [bp-5Ch]@2
  int uiRegistCount[5]; // [sp+5Ch] [bp-24h]@2
  unsigned int v31; // [sp+70h] [bp-10h]@1
  int v32; // [sp+7Ch] [bp-4h]@2
  int v33; // [sp+80h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v2 = this;
  v27 = this;
  if ( this->m_pkCollectWin )
  {
    _eh_vector_constructor_iterator_(
      kText,
      0x1Cu,
      2,
      (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v3 = v2->m_pkCollectWin;
    v32 = 0;
    uiTextCount = 0;
    v4 = CollectWin::GetRegistCountByGrade(v3, 0);
    v5 = CollectWin::GetRegistCountByGrade(v2->m_pkCollectWin, 1u);
    v6 = CollectWin::GetRegistCountByGrade(v2->m_pkCollectWin, 2u);
    uiRegistCount[4] = CollectWin::GetRegistCountByGrade(v27->m_pkCollectWin, 3u);
    v7 = &v27->m_pkCollectWin->m_kRewardInfos;
    uiRegistCount[0] = 4 * v4;
    uiRegistCount[1] = v4;
    uiRegistCount[2] = v5;
    uiRegistCount[3] = v6;
    std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>(
      &kRewardInfos,
      v7);
    v8 = *(_DWORD *)&kRewardInfos;
    LOBYTE(v32) = 1;
    if ( (signed int)((char *)kRewardInfos.baseclass_0._Mylast - *(_DWORD *)&kRewardInfos) >> 4 )
    {
      v9 = kText;
      v25 = *(_DWORD *)&kRewardInfos;
      rkIndex.m_acFilename = (char *)((signed int)((char *)kRewardInfos.baseclass_0._Mylast - *(_DWORD *)&kRewardInfos) >> 4);
      do
      {
        if ( *(_DWORD *)v8 < 5u && uiRegistCount[*(_DWORD *)v8] == *(_DWORD *)(v8 + 8) )
        {
          ++uiTextCount;
          v10 = v9;
          ++v9;
          v11 = TextData2::Get(0xCB311722u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v10, v11, strlen(v11));
          v8 = v25;
        }
        v8 += 16;
        v12 = rkIndex.m_acFilename-- == (char *)1;
        v25 = v8;
      }
      while ( !v12 );
    }
    v13 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
    if ( v13 )
      v14 = *(_DWORD *)(v13 + 40);
    else
      v14 = 0;
    v15 = 0;
    if ( !v14 )
      goto LABEL_15;
    while ( 1 )
    {
      v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v15);
      if ( v16 )
      {
        if ( *(_WORD *)v16 == (_WORD)uiCardID )
          break;
      }
      ++v15;
      if ( v15 >= v14 )
        goto LABEL_15;
    }
    if ( CollectCardTitleTab::GetByItemInx((const char *)v16 + 2) )
    {
      v22 = &kText[uiTextCount];
      v17 = uiTextCount + 1;
      v23 = TextData2::Get(0xCB311722u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v22, v23, strlen(v23));
    }
    else
    {
LABEL_15:
      v17 = uiTextCount;
    }
    if ( v17 )
    {
      v18 = 105;
      do
      {
        PgWinMgr::CloseWin(
          &Pgg_kWinMgr,
          (PgWin *)(&v27->m_pkCollectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v18]);
        ++v18;
      }
      while ( (unsigned int)(v18 * 4) < 0x1AC );
      if ( v17 )
      {
        v19 = (int)kText;
        uiTextCount = 420;
        do
        {
          if ( *(_DWORD *)(v19 + 16) )
          {
            v20 = *(CollectPopupWin **)((char *)&v27->m_pkCollectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                                      + uiTextCount);
            if ( v20 )
            {
              if ( *(_DWORD *)(v19 + 20) < 0x10u )
                v21 = (const char *)v19;
              else
                v21 = *(const char **)v19;
              CollectPopupWin::SetText(v20, v21);
              PgWinMgr::ShowWin(&Pgg_kWinMgr, &v20->baseclass_0.baseclass_0.baseclass_0);
              uiTextCount += 4;
            }
          }
          v19 += 28;
          --v17;
        }
        while ( v17 );
      }
      rkIndex.m_dwIndex = 49;
      rkIndex.m_acFilename = 0;
      SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
    }
    if ( *(_DWORD *)&kRewardInfos )
      operator delete(*(void **)&kRewardInfos);
    v32 = -1;
    _eh_vector_destructor_iterator_(
      kText,
      0x1Cu,
      2,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  }
}
// A85C00: using guessed type int __security_cookie;
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (00498F40) --------------------------------------------------------
void __thiscall GameFrameWork::ProcessMsg(GameFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  GameFrameWork *v4; // esi@1
  ChargedItemListWin *v5; // ecx@46
  signed int v6; // ecx@146
  signed int v7; // eax@146
  signed int v8; // eax@151
  signed int v9; // ecx@152
  signed int v10; // eax@155
  signed int v11; // edx@155
  MainCharHPBarWin *v12; // ecx@175
  bool v13; // al@175
  MiniMapWin *v14; // ecx@176
  MiniMapWin *v15; // ecx@178
  mhInfoWin *v16; // eax@197
  int v17; // eax@198
  char *v18; // eax@203
  InventoryWin *v19; // ecx@221
  InventoryWin *v20; // ecx@224
  _BYTE v21[12]; // ST0C_12@228
  _BYTE v22[12]; // ST00_12@228
  char v23; // al@228
  mhInputPassWordWin *v24; // ecx@229
  stMINIHOUSEINFO *v25; // eax@229
  unsigned int v26; // edx@243
  __int64 v27; // kr00_8@243
  char *v28; // eax@243
  char *v29; // ST1C_4@243
  char *v30; // eax@243
  _BYTE v31[20]; // ST00_20@243
  _BYTE v32[20]; // ST0C_20@247
  CursorState *v33; // eax@253
  CollectCardWin **v34; // edi@257
  signed int v35; // ebx@257
  CollectCardWin *v36; // esi@258
  CollectCardWin **v37; // edi@262
  signed int v38; // ebx@262
  CollectCardWin *v39; // esi@263
  unsigned int v40; // [sp-8h] [bp-4Ch]@148
  unsigned int v41; // [sp-4h] [bp-48h]@147
  Name5 thisa; // [sp+Ch] [bp-38h]@228
  ITEM_INVEN kInven; // [sp+24h] [bp-20h]@229
  char acstr[21]; // [sp+28h] [bp-1Ch]@243
  unsigned int v45; // [sp+40h] [bp-4h]@1
  int v46; // [sp+44h] [bp+0h]@1

  v45 = (unsigned int)&v46 ^ __security_cookie;
  v4 = this;
  switch ( uiMsg )
  {
    case 9u:
      if ( !GameFrameWork::ms_uiFirstCreateDevice )
        GameFrameWork::ms_uiFirstCreateDevice = 1;
      GameFrameWork::OnGameStart(this);
      GameFrameWork::SetInventoryNewMark(v4);
      return;
    case 0xAu:
      if ( !GameFrameWork::ms_uiFirstCreateDevice )
        GameFrameWork::ms_uiFirstCreateDevice = 1;
      GameFrameWork::OnGameStart(this);
      return;
    case 0x10Fu:
      MakeKarisWin::StartEffectt(this->m_pkMakeKarisWin);
      return;
    case 0xBu:
      GameFrameWork::OnOpenChatEditWin(this, 0);
      return;
    case 0xF4u:
      GameFrameWork::OnOpenSlashStartChat(this, "/");
      return;
    case 0xCu:
      GameFrameWork::OnOpenCharInfoWin(this);
      return;
    case 0xDu:
      GameFrameWork::OnOpenInventoryWin(this);
      return;
    case 0xB8u:
      GameFrameWork::OnOpenMiniHouseInventoryWin(this);
      return;
    case 0x86u:
      GameFrameWork::OnOpenShortCutSubWin(this);
      return;
    case 0x87u:
      GameFrameWork::OnOpenShortCutPanelTurn(this, this->m_pkShortCutWinV, this->m_pkShortCutWin);
      return;
    case 0x88u:
      GameFrameWork::OnOpenShortCutPanelTurn(this, this->m_pkShortCutWin, this->m_pkShortCutWinV);
      return;
    case 0x89u:
      GameFrameWork::OnOpenShortCutSubPanelTurn(
        this,
        this->m_pkShortCutSubWinV[uiwParam],
        this->m_pkShortCutSubWin[uiwParam]);
      return;
    case 0x8Au:
      GameFrameWork::OnOpenShortCutSubPanelTurn(
        this,
        this->m_pkShortCutSubWin[uiwParam],
        this->m_pkShortCutSubWinV[uiwParam]);
      return;
    case 0x8Bu:
      GameFrameWork::OnReflashShortCutWin(this);
      return;
    case 0x10u:
      GameFrameWork::OnOpenQuestWin(this);
      return;
    case 0x11u:
      GameFrameWork::OnOpenHelpWin(this);
      return;
    case 0xF5u:
      GameFrameWork::OnOpenGuildWin(this);
      return;
    case 0xF6u:
      GameFrameWork::OnOpenHolyPromise(this);
      return;
    case 0xF7u:
      GameFrameWork::OnOpenGuildAcademy(this);
      return;
    case 0xF8u:
      GameFrameWork::OnOpenPartyMatching(this);
      return;
    case 0xF9u:
      GameFrameWork::OnOpenWedding(this);
      return;
    case 0x14u:
      GameFrameWork::OnOpenItemMallWin(this);
      return;
    case 0x15u:
      GameFrameWork::OnOpenForumWin(this);
      return;
    case 0x16u:
      GameFrameWork::OnOpenSystemWin(this);
      return;
    case 0x18u:
      GameFrameWork::OnLogout(this);
      return;
    case 0x19u:
      GameFrameWork::OnGoCharSelect(this);
      return;
    case 0x1Au:
      GameFrameWork::OnExit(this);
      return;
    case 0x1Du:
      GameFrameWork::OnEscape(this);
      return;
    case 0x1Eu:
      GameFrameWork::OnF1(this);
      return;
    case 0x1Fu:
      GameFrameWork::OnF2(this);
      return;
    case 0x20u:
      GameFrameWork::OnF3(this);
      return;
    case 0x21u:
      GameFrameWork::OnF4(this);
      return;
    case 0x22u:
      GameFrameWork::OnF5(this);
      return;
    case 0x23u:
      GameFrameWork::OnF6(this);
      return;
    case 0x24u:
      GameFrameWork::OnF7(this);
      return;
    case 0x25u:
      GameFrameWork::OnF8(this);
      return;
    case 0x26u:
      GameFrameWork::OnF9(this);
      return;
    case 0x27u:
      GameFrameWork::OnF10(this);
      return;
    case 0x28u:
      GameFrameWork::OnF11(this);
      return;
    case 0x29u:
      GameFrameWork::OnF12(this);
      return;
    case 0x2Au:
      v5 = this->m_pkChargedItemListWin;
      if ( v5 )
      {
        if ( (unsigned __int8)((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkChargedItemListWin->baseclass_0.baseclass_0.baseclass_0);
        else
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkChargedItemListWin->baseclass_0.baseclass_0.baseclass_0);
      }
      return;
    case 0x2Bu:
      GameFrameWork::OnSpace(this);
      return;
    case 0x2Cu:
      GameFrameWork::OnNearMobSelect(this);
      return;
    case 0x2Du:
      GameFrameWork::OnShortCutSkillUse(this, 0, 1u);
      return;
    case 0x2Eu:
      GameFrameWork::OnShortCutSkillUse(this, 1u, 1u);
      return;
    case 0x2Fu:
      GameFrameWork::OnShortCutSkillUse(this, 2u, 1u);
      return;
    case 0x30u:
      GameFrameWork::OnShortCutSkillUse(this, 3u, 1u);
      return;
    case 0x31u:
      GameFrameWork::OnShortCutSkillUse(this, 4u, 1u);
      return;
    case 0x32u:
      GameFrameWork::OnShortCutSkillUse(this, 5u, 1u);
      return;
    case 0x33u:
      GameFrameWork::OnShortCutSkillUse(this, 6u, 1u);
      return;
    case 0x34u:
      GameFrameWork::OnShortCutSkillUse(this, 7u, 1u);
      return;
    case 0x35u:
      GameFrameWork::OnShortCutSkillUse(this, 8u, 1u);
      return;
    case 0x36u:
      GameFrameWork::OnShortCutSkillUse(this, 9u, 1u);
      return;
    case 0x37u:
      GameFrameWork::OnShortCutSkillUse(this, 0xAu, 1u);
      return;
    case 0x38u:
      GameFrameWork::OnShortCutSkillUse(this, 0xBu, 1u);
      return;
    case 0x39u:
      GameFrameWork::OnShortCutSkillUse(this, 0x12u, 1u);
      return;
    case 0x3Au:
      GameFrameWork::OnShortCutSkillUse(this, 0x13u, 1u);
      return;
    case 0x3Bu:
      GameFrameWork::OnShortCutSkillUse(this, 0x14u, 1u);
      return;
    case 0x3Cu:
      GameFrameWork::OnShortCutSkillUse(this, 0x15u, 1u);
      return;
    case 0x3Du:
      GameFrameWork::OnShortCutSkillUse(this, 0x16u, 1u);
      return;
    case 0x3Eu:
      GameFrameWork::OnShortCutSkillUse(this, 0x17u, 1u);
      return;
    case 0x3Fu:
      GameFrameWork::OnShortCutSkillUse(this, 0x18u, 1u);
      return;
    case 0x40u:
      GameFrameWork::OnShortCutSkillUse(this, 0x19u, 1u);
      return;
    case 0x41u:
      GameFrameWork::OnShortCutSkillUse(this, 0x1Au, 1u);
      return;
    case 0x42u:
      GameFrameWork::OnShortCutSkillUse(this, 0x1Bu, 1u);
      return;
    case 0x43u:
      GameFrameWork::OnShortCutSkillUse(this, 0x1Cu, 1u);
      return;
    case 0x44u:
      GameFrameWork::OnShortCutSkillUse(this, 0x1Du, 1u);
      return;
    case 0x45u:
      GameFrameWork::OnShortCutSkillUse(this, 0x24u, 1u);
      return;
    case 0x46u:
      GameFrameWork::OnShortCutSkillUse(this, 0x25u, 1u);
      return;
    case 0x47u:
      GameFrameWork::OnShortCutSkillUse(this, 0x26u, 1u);
      return;
    case 0x48u:
      GameFrameWork::OnShortCutSkillUse(this, 0x27u, 1u);
      return;
    case 0x49u:
      GameFrameWork::OnShortCutSkillUse(this, 0x28u, 1u);
      return;
    case 0x4Au:
      GameFrameWork::OnShortCutSkillUse(this, 0x29u, 1u);
      return;
    case 0x4Bu:
      GameFrameWork::OnShortCutSkillUse(this, 0x2Au, 1u);
      return;
    case 0x4Cu:
      GameFrameWork::OnShortCutSkillUse(this, 0x2Bu, 1u);
      return;
    case 0x4Du:
      GameFrameWork::OnShortCutSkillUse(this, 0x2Cu, 1u);
      return;
    case 0x4Eu:
      GameFrameWork::OnShortCutSkillUse(this, 0x2Du, 1u);
      return;
    case 0x4Fu:
      GameFrameWork::OnShortCutSkillUse(this, 0x2Eu, 1u);
      return;
    case 0x50u:
      GameFrameWork::OnShortCutSkillUse(this, 0x2Fu, 1u);
      return;
    case 0x51u:
      GameFrameWork::OnShortCutSkillUse(this, 0x36u, 1u);
      return;
    case 0x52u:
      GameFrameWork::OnShortCutSkillUse(this, 0x37u, 1u);
      return;
    case 0x53u:
      GameFrameWork::OnShortCutSkillUse(this, 0x38u, 1u);
      return;
    case 0x54u:
      GameFrameWork::OnShortCutSkillUse(this, 0x39u, 1u);
      return;
    case 0x55u:
      GameFrameWork::OnShortCutSkillUse(this, 0x3Au, 1u);
      return;
    case 0x56u:
      GameFrameWork::OnShortCutSkillUse(this, 0x3Bu, 1u);
      return;
    case 0x57u:
      GameFrameWork::OnShortCutSkillUse(this, 0x3Cu, 1u);
      return;
    case 0x58u:
      GameFrameWork::OnShortCutSkillUse(this, 0x3Du, 1u);
      return;
    case 0x59u:
      GameFrameWork::OnShortCutSkillUse(this, 0x3Eu, 1u);
      return;
    case 0x5Au:
      GameFrameWork::OnShortCutSkillUse(this, 0x3Fu, 1u);
      return;
    case 0x5Bu:
      GameFrameWork::OnShortCutSkillUse(this, 0x40u, 1u);
      return;
    case 0x5Cu:
      GameFrameWork::OnShortCutSkillUse(this, 0x41u, 1u);
      return;
    case 0x5Du:
      GameFrameWork::OnShortCutSkillUse(this, uiwParam, uilParam);
      return;
    case 0x61u:
      GameFrameWork::OnTab_Key(this);
      return;
    case 0x62u:
      GameFrameWork::OnKeyDownMoveFront(this);
      return;
    case 0x63u:
      GameFrameWork::OnKeyDownMoveBack(this);
      return;
    case 0x64u:
      GameFrameWork::OnKeyDownMoveLeft(this);
      return;
    case 0x65u:
      GameFrameWork::OnKeyDownMoveRight(this);
      return;
    case 0x66u:
      GameFrameWork::OnKeyDownJump(this);
      return;
    case 0x67u:
      GameFrameWork::OnWalkOrRun_Key(this);
      return;
    case 0x68u:
      GameFrameWork::OnHPSoulStoneUse_Key(this);
      return;
    case 0x69u:
      GameFrameWork::OnSPSoulStoneUse_Key(this);
      return;
    case 0x1Bu:
      GameFrameWork::OnErrorGotoAccount(this);
      return;
    case 0x1Cu:
      GameFrameWork::OnErrorGotoExit(this);
      return;
    case 0x6Au:
      GameFrameWork::OnOpenCharInfoWinKey(this);
      return;
    case 0x6Bu:
      GameFrameWork::OnOpenInventoryWinKey(this);
      return;
    case 0x6Cu:
      if ( !EditWin::ms_pkCurEditWin )
        goto $LN247;
      return;
    case 0xEu:
$LN247:
      GameFrameWork::OnOpenSkillWin(this);
      return;
    case 0x6Du:
      if ( !EditWin::ms_pkCurEditWin )
        goto $LN240_0;
      return;
    case 0xFu:
$LN240_0:
      GameFrameWork::OnOpenActionWin(this);
      return;
    case 0x6Eu:
      if ( !EditWin::ms_pkCurEditWin )
        goto $LN237_0;
      return;
    case 0x12u:
$LN237_0:
      GameFrameWork::OnOpenFriendWin(this);
      return;
    case 0x6Fu:
      GameFrameWork::OnOpenMiniPartyWinKey(this);
      return;
    case 0x70u:
      GameFrameWork::OnPauseEmotion(this);
      return;
    case 0xA2u:
      if ( !EditWin::ms_pkCurEditWin )
        goto $LN231_0;
      return;
    case 0x13u:
$LN231_0:
      GameFrameWork::OnOpenMiniHouseMenuWin(this);
      return;
    case 0xA3u:
      GameFrameWork::OnOpenPrivateStoreWin(this);
      return;
    case 0xACu:
      GameFrameWork::OnOpenPrivateStoreWinKey(this);
      return;
    case 0xA4u:
      GameFrameWork::OnOpenPrivateStoreWinBuy(this);
      return;
    case 0xA5u:
      GameFrameWork::OnOpenPrivateStoreWinSell(this);
      return;
    case 0xA6u:
      GameFrameWork::OnOpenPrivateStoreWinSearch(this);
      return;
    case 0xA7u:
      PrivateStoreWin::ms_bPrivateStoreWin = 0;
      return;
    case 0xADu:
      GameFrameWork::OnOpenRestHouseKey(this);
      return;
    case 0x71u:
      GameFrameWork::OnPartyJoinProposeAccept(this);
      return;
    case 0x72u:
      GameFrameWork::OnPartyJoinProposeReject(this);
      return;
    case 0x73u:
      GameFrameWork::OnTradeProposeAskAccept(this);
      return;
    case 0x74u:
      GameFrameWork::OnTradeProposeAskReject(this);
      return;
    case 0x75u:
      GameFrameWork::NcTradeProposeCancelCmd(this);
      return;
    case 0x80u:
      GameFrameWork::OpenCharPopupMenu(this, (char *)uiwParam);
      return;
    case 0x81u:
      GameFrameWork::OpenRaidMemberPopupMenu(this, (char *)uiwParam);
      return;
    case 0x82u:
      GameFrameWork::OpenKQTeamPopupMenu(this, (char *)uiwParam);
      return;
    case 0x76u:
      GameFrameWork::OnFriendConfirmReqYes(this, uilParam);
      return;
    case 0x77u:
      GameFrameWork::OnFriendConfirmReqNo(this, uilParam);
      return;
    case 0x78u:
      GameFrameWork::OnFriendDeleteYse(this, uilParam);
      return;
    case 0x84u:
      GameFrameWork::OnTimerTradeReject(this);
      return;
    case 0x8Cu:
      if ( !EditWin::ms_pkCurEditWin )
      {
        GameFrameWork::ms_bWindowSizeChanged = 1;
        GameFrameWork::RegistereWinPostion(this);
      }
      return;
    case 0x8Du:
      GameFrameWork::OpenResolutionPopup(this);
      return;
    case 0x8Eu:
      v6 = 800;
      v7 = 600;
      goto LABEL_147;
    case 0x8Fu:
      v41 = 768;
      GameFrameWork::ms_uiDisResWidth = 1024;
      GameFrameWork::ms_uiDisResHeight = 768;
      dword_A826F2 = 1024;
      dword_A826F6 = 768;
      v40 = 1024;
      goto LABEL_149;
    case 0x90u:
      v8 = 1280;
      goto LABEL_152;
    case 0x91u:
      v8 = 1280;
      v9 = 960;
      goto LABEL_153;
    case 0x92u:
      v10 = 1280;
      v11 = 1024;
      goto LABEL_156;
    case 0x93u:
      v6 = 1400;
      v7 = 1050;
      goto LABEL_147;
    case 0x94u:
      v10 = 1600;
      v11 = 1200;
LABEL_156:
      v41 = v11;
      GameFrameWork::ms_uiDisResHeight = v11;
      dword_A826F6 = v11;
      GameFrameWork::ms_uiDisResWidth = v10;
      dword_A826F2 = v10;
      v40 = v10;
      goto LABEL_149;
    case 0x95u:
    case 0x9Au:
      v8 = 1600;
      v9 = 900;
      goto LABEL_153;
    case 0x96u:
      v6 = 1920;
      v7 = 1440;
      goto LABEL_147;
    case 0x97u:
      v6 = 1920;
      GameFrameWork::ms_uiDisResHeight = 1200;
      dword_A826F6 = 1200;
      v41 = 1200;
      goto LABEL_148;
    case 0x98u:
      v6 = 1680;
      v7 = 1050;
      goto LABEL_147;
    case 0x99u:
      v8 = 1280;
      v9 = 800;
      goto LABEL_153;
    case 0x9Bu:
      v8 = 1440;
      v9 = 900;
      goto LABEL_153;
    case 0x9Cu:
      v6 = 1920;
      v7 = 1080;
      goto LABEL_147;
    case 0x9Du:
      v6 = 2560;
      v7 = 1440;
      goto LABEL_147;
    case 0x9Eu:
      v6 = 2560;
      v7 = 1600;
      goto LABEL_147;
    case 0x9Fu:
      v6 = 3840;
      v7 = 2160;
      goto LABEL_147;
    case 0xA0u:
      v8 = 1366;
LABEL_152:
      v9 = 768;
LABEL_153:
      v41 = v9;
      GameFrameWork::ms_uiDisResHeight = v9;
      dword_A826F6 = v9;
      GameFrameWork::ms_uiDisResWidth = v8;
      dword_A826F2 = v8;
      v40 = v8;
      goto LABEL_149;
    case 0xA1u:
      v6 = 3440;
      v7 = 1440;
LABEL_147:
      GameFrameWork::ms_uiDisResHeight = v7;
      dword_A826F6 = v7;
      v41 = v7;
LABEL_148:
      GameFrameWork::ms_uiDisResWidth = v6;
      dword_A826F2 = v6;
      v40 = v6;
LABEL_149:
      GameFrameWork::ms_bWindowSizeChanged = 1;
      OptionGraphicWin::SetResoulution(v4->m_pkOptionGraphicWin, v40, v41);
      GameFrameWork::RegistereWinPostion(v4);
      break;
    case 0xAFu:
      this->m_bDrawWinMgr = this->m_bDrawWinMgr == 0;
      break;
    case 0xB0u:
      this->m_bScrnBDMgr = this->m_bScrnBDMgr == 0;
      break;
    case 0xB1u:
      this->m_bTextEffMgr = this->m_bTextEffMgr == 0;
      break;
    case 0xB2u:
      this->m_bWorld = this->m_bWorld == 0;
      break;
    case 0xB3u:
      v12 = this->m_pkTargetCharHPBarWin;
      v13 = v4->m_bTargetHPBar == 0;
      v4->m_bTargetHPBar = v13;
      v12->m_bDrawTargetCharOption = v13;
      break;
    case 0xB5u:
      v14 = this->m_pkMiniMapWin;
      if ( v14 )
        MiniMapWin::OpenAllMap(v14);
      break;
    case 0xB6u:
      v15 = this->m_pkMiniMapWin;
      if ( v15 )
        MiniMapWin::OpenFullWorldMap(v15);
      break;
    case 0xB7u:
      GameFrameWork::OnSoloModeKey(this);
      break;
    case 0xECu:
      GameFrameWork::OpenWingStonePlacePopup(this);
      break;
    case 0xEDu:
      WingStoneWin::ChoiceList(this->m_pkWingStoneWin, 0);
      break;
    case 0xEEu:
      WingStoneWin::ChoiceList(this->m_pkWingStoneWin, 1u);
      break;
    case 0xEFu:
      WingStoneWin::ChoiceList(this->m_pkWingStoneWin, 2u);
      break;
    case 0xF0u:
      WingStoneWin::ChoiceList(this->m_pkWingStoneWin, 3u);
      break;
    case 0xF1u:
      WingStoneWin::ChoiceList(this->m_pkWingStoneWin, 4u);
      break;
    case 0xB9u:
    case 0xBFu:
      GameFrameWork::OnOpenChargedItemListWin(this);
      break;
    case 0xBBu:
      ChatDisplayWin2::OnNormalHotKeyTab(this->m_pkChatDisplayWin);
      break;
    case 0xBCu:
      ChatDisplayWin2::OnGuildHotKeyTab(this->m_pkChatDisplayWin);
      break;
    case 0xBDu:
      ChatDisplayWin2::OnPartyHotKeyTab(this->m_pkChatDisplayWin);
      break;
    case 0xBEu:
      ChatDisplayWin2::OnWhisperHotKeyTab(this->m_pkChatDisplayWin);
      break;
    case 0xC8u:
      GameFrameWork::OnOpenMHPopupMenuWin(this);
      break;
    case 0xC0u:
    case 0xD6u:
      GameFrameWork::OnOpenMHConfigRoomInfoWin(this);
      break;
    case 0xE4u:
      GameFrameWork::SendDelMHObjReq(this, 0);
      break;
    case 0xE0u:
      GameFrameWork::MinimizeMHWins(this, uiwParam);
      break;
    case 0xE1u:
      GameFrameWork::NormalizeMHWins(this, uiwParam);
      break;
    case 0xDFu:
      v16 = this->m_pkMHInfoWin;
      if ( v16->m_PassWord.baseclass_0._Mysize )
      {
        v17 = (int)&v16->m_PassWord;
        if ( *(_DWORD *)(v17 + 20) >= 0x10u )
          v17 = *(_DWORD *)v17;
        mhSettingWin::SetPassWord(this->m_pkMHSettingWin, (char *)v17);
      }
      break;
    case 0xC4u:
      MiniHouseIndoor::ArrangeModeReq(&g_kWorld.m_MiniHouseIndoorMode);
      break;
    case 0xC9u:
      GameFrameWork::SendMHBuildingOrFixReq(this, uiwParam);
      break;
    case 0xCDu:
      v18 = (char *)((int (*)(void))this->m_pkMHInputPassWordWin->m_spRoomPassWord.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      GameFrameWork::SendMHVisitReq(v4, v4->m_pkMHInputPassWordWin->mh_hnd, v18);
      break;
    case 0xC3u:
      GameFrameWork::SendKickReq(this, this->m_pkMHInfoWin->m_ClickedChar);
      break;
    case 0xDEu:
      GameFrameWork::ReArrangeMHObj(this, pkObj);
      break;
    case 0xE2u:
      GameFrameWork::MHObjFocusCancel(this);
      break;
    case 0xE3u:
      GameFrameWork::MHObjUsePortal(this);
      break;
    case 0xD7u:
      GameFrameWork::OnCloseMHConfigRoomInfoWin(this);
      break;
    case 0xD8u:
      GameFrameWork::OnOpenMHInputPassWordWin(this);
      break;
    case 0xD9u:
      GameFrameWork::OnCloseMHInputPassWordWin(this);
      break;
    case 0xCEu:
      GameFrameWork::MiniHouseIndoorModeOut(this);
      break;
    case 0xDBu:
      GameFrameWork::OpenMHInfoWin(this, TE_EDIT_ROOM);
      break;
    case 0xC5u:
      GameFrameWork::SendDelMHObjReq(this, 1);
      break;
    case 0xC6u:
      GameFrameWork::OnArrToInvMHItem(this);
      break;
    case 0xC7u:
      GameFrameWork::OnDeleteMHItem(this);
      break;
    case 0xE5u:
      GameFrameWork::JoinDiceGameReq(this);
      break;
    case 0xE6u:
      GameFrameWork::OnOpenDiceRewardWin(this);
      break;
    case 0xE7u:
      GameFrameWork::OnOpenDiceExpectWin(this);
      break;
    case 0xDCu:
      GameFrameWork::SendmhObjActReq(this);
      break;
    case 0xEBu:
      GameFrameWork::SendMHRepairReq(this);
      break;
    case 0xE9u:
      v19 = this->m_pkInventoryWin;
      if ( v19 )
        InventoryWin::LockAllItem(v19);
      OutputDebugStringA("PGFM_CHARINV_LOCK\n");
      break;
    case 0xEAu:
      v20 = this->m_pkInventoryWin;
      if ( v20 )
        InventoryWin::UnLockAllItem(v20);
      OutputDebugStringA("PGFM_CHARINV_UNLOCK\n");
      break;
    case 0xDDu:
      if ( pkObj )
      {
        *(_DWORD *)v21 = LODWORD(this->m_kCameraRayDir.x);
        *(_QWORD *)&v21[4] = *(_QWORD *)&this->m_kCameraRayDir.y;
        *(_DWORD *)v22 = LODWORD(this->m_kCameraRayOrigin.x);
        *(_QWORD *)&v22[4] = *(_QWORD *)&this->m_kCameraRayOrigin.y;
        World::GetAdvGroundPos(&g_kWorld, *(NiPoint3 *)v22, *(NiPoint3 *)v21, (NiPoint3 *)&thisa.n5_name[8], 0);
        v23 = MiniHouseIndoor::FindNearestActPos(&g_kWorld.m_MiniHouseIndoorMode, pkObj, (NiPoint3 *)&thisa.n5_name[8]);
        MiniHouseIndoor::StartMHCharEmotion(
          &g_kWorld.m_MiniHouseIndoorMode,
          (NiPoint3 *)&thisa.n5_name[8],
          (unsigned __int8)v23,
          uiwParam);
      }
      break;
    case 0xF2u:
      v24 = this->m_pkMHInputPassWordWin;
      kInven.Inven = uiwParam;
      v24->mh_hnd = uiwParam;
      v25 = CGuildMonster::GetGuildEumFromMob((CMiniHouseMgr *)&g_kMiniHouseMgr, uiwParam);
      if ( v25 )
        mhInfoWin::SetTitle(v4->m_pkMHInfoWin, v25->title, 0);
      GameFrameWork::SendNetMsgZoneMgr(v4, 0x23u, 0xEu, &kInven, 2);
      break;
    case 0xE8u:
      MiniHouseIndoor::SendObjEffReq(&g_kWorld.m_MiniHouseIndoorMode);
      break;
    case 0xFBu:
      GameFrameWork::OnMapLogInError(this);
      break;
    case 0xFAu:
      ChatDisplayWin2::OnGuildAcademyHotKeyTab(this->m_pkChatDisplayWin);
      break;
    case 0xFCu:
      if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)()
        || !Char::IsMoverMovable(g_pkMainChar) )
      {
        KeyboardMoveProcess::SetAutoRun(&v4->m_kCharMover, v4->m_kCharMover.m_bAutoRun == 0);
        GameFrameWork::Stick(v4, 0, 0);
      }
      break;
    case 0xFEu:
      GameFrameWork::ActivateRaidWin(this);
      break;
    case 0xFDu:
      GameFrameWork::SendAutoPickItemReq(this, uiwParam == 1);
      break;
    case 0xFFu:
      if ( Inventory::FindEnchantSoketAdd(&g_kInventory, &kInven) )
      {
        kInven.Inven ^= (kInven.Inven ^ uiwParam) & 0x3FF;
        GameFrameWork::NcItemEnchantAddNewSocketReq(v4, kInven, (ITEM_INVEN)(uilParam & 0x3FF | uilParam & 0xFC00));
      }
      break;
    case 0x100u:
      if ( uilParam )
      {
        v26 = *(_DWORD *)uilParam;
        v27 = *(_QWORD *)(uilParam + 4);
        *(_DWORD *)&thisa.n5_name[8] = *(_QWORD *)(uilParam + 4) >> 32;
        *(_QWORD *)&thisa.n5_name[0] = __PAIR__(v27, v26);
        *(_QWORD *)&thisa.n5_name[12] = *(_QWORD *)(uilParam + 12);
        Name5::n_string(&thisa, acstr);
        acstr[20] = 0;
        ((void (__cdecl *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(acstr);
        v28 = TextData2::Get(0x9BB6A8F5u);
        v29 = fs(v28);
        v30 = TextData2::Get(0x98A3EBF9u);
        *(_DWORD *)v31 = *(_DWORD *)uilParam;
        *(_QWORD *)&v31[4] = *(_QWORD *)(uilParam + 4);
        *(_QWORD *)&v31[12] = *(_QWORD *)(uilParam + 12);
        GameFrameWork::NcPrisonAddGMReq(v4, *(Name5 *)v31, 0x7530u, v30, v29);
        operator delete((void *)uilParam);
      }
      break;
    case 0x101u:
    case 0x103u:
      if ( uilParam )
        operator delete((void *)uilParam);
      break;
    case 0x102u:
      if ( uilParam )
      {
        *(_DWORD *)v32 = *(_DWORD *)uilParam;
        *(_QWORD *)&v32[4] = *(_QWORD *)(uilParam + 4);
        *(_QWORD *)&v32[12] = *(_QWORD *)(uilParam + 12);
        GameFrameWork::NcMiscSpammerChatBanReq(this, *(Name5 *)v32);
        operator delete((void *)uilParam);
      }
      break;
    case 0x104u:
      GameFrameWork::NcQuestGiveUpReq(this, uilParam);
      break;
    case 0x105u:
      GameFrameWork::NcQuestStartReq(this, uilParam);
      break;
    case 0x107u:
      GameFrameWork::NcItemEquipBelongedCancelUseReq(this, uilParam);
      break;
    case 0x108u:
      if ( this->m_pkInventoryWin )
        InventoryWin::ms_uiMode = uilParam;
      break;
    case 0x10Au:
      v33 = Singleton<CursorState>::getInstance();
      CursorState::CancelState(v33, PUT_ON_BELONG_CLEAR);
      if ( v4->m_pkInventoryWin )
        InventoryWin::ms_uiMode = 0;
      v4->m_bPickCancel = 0;
      break;
    case 0x10Bu:
      GameFrameWork::RefreshHotKey(this);
      break;
    case 0x10Cu:
      GameFrameWork::NcCollectCardregistReq(this, uiwParam);
      v34 = v4->m_pkCollectCardWin;
      v35 = 4;
      do
      {
        v36 = *v34;
        if ( *v34 )
        {
          CollectCardWin::Reset(*v34);
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v36->baseclass_0.baseclass_0.baseclass_0);
        }
        ++v34;
        --v35;
      }
      while ( v35 );
      break;
    case 0x10Du:
      v37 = this->m_pkCollectCardWin;
      v38 = 4;
      do
      {
        v39 = *v37;
        if ( *v37 )
        {
          CollectCardWin::Reset(*v37);
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v39->baseclass_0.baseclass_0.baseclass_0);
        }
        ++v37;
        --v38;
      }
      while ( v38 );
      break;
    case 0x10Eu:
      GameFrameWork::NcCharChargedbuffEraseReq(this, uiwParam);
      break;
    default:
      return;
  }
}
// A826F2: using guessed type int dword_A826F2;
// A826F6: using guessed type int dword_A826F6;
// A85C00: using guessed type int __security_cookie;
// A987C5: using guessed type bool GameFrameWork__ms_bWindowSizeChanged;
// A987C8: using guessed type unsigned int GameFrameWork__ms_uiFirstCreateDevice;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (0049ADC0) --------------------------------------------------------
void __thiscall GameFrameWork::OnNpcDialogCommand(GameFrameWork *this, DirectUserMsgBody_NpcDialogResponse *pkBody)
{
  char *v2; // ebx@1
  char v3; // al@1
  unsigned int v4; // esi@1
  signed int v5; // ecx@1
  char *v6; // edx@2
  const char v7; // al@6
  unsigned __int8 v8; // bl@21
  unsigned int v9; // eax@21
  CQuest *v10; // eax@22
  int v11; // eax@58
  unsigned int v12; // [sp-4h] [bp-48h]@37
  PROTO_NC_QUEST_REWARD_SELECT_ITEM_INDEX_CMD kCmd; // [sp+Ch] [bp-38h]@22
  PROTO_NC_HOLY_PROMISE_GET_CEN_REWARD_REQ kProto; // [sp+17h] [bp-2Dh]@17
  int mobId; // [sp+18h] [bp-2Ch]@19
  unsigned int ScpNum; // [sp+1Ch] [bp-28h]@1
  char acCmd[32]; // [sp+20h] [bp-24h]@2
  unsigned int v18; // [sp+40h] [bp-4h]@1
  int v19; // [sp+44h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v2 = pkBody->acAction;
  v3 = *pkBody->acAction;
  v4 = (unsigned int)this;
  v5 = 0;
  ScpNum = v4;
  if ( v3 )
  {
    v6 = (char *)(acCmd - v2);
    do
    {
      if ( v3 == 32 )
        break;
      if ( v5 >= 31 )
        break;
      v2[(_DWORD)v6] = v3;
      v3 = (v2++)[1];
      ++v5;
    }
    while ( v3 );
  }
  v7 = *v2;
  for ( acCmd[v5] = 0; v7; v7 = (v2++)[1] )
  {
    if ( v7 != 32 && v7 != 9 )
      break;
  }
  if ( !strcmp(acCmd, "server_ack") )
  {
    LOBYTE(ScpNum) = atoi(v2);
    GameFrameWork::NcActNpcmenuopenAck((GameFrameWork *)v4, ScpNum);
    return;
  }
  if ( !strcmp(acCmd, "opendlg") )
  {
    if ( !(unsigned __int8)(*(int (**)(void))(**(_DWORD **)(v4 + 712) + 260))() )
      GameFrameWork::OpenInventoryWin((GameFrameWork *)v4);
    InventoryWin::ms_uiMode = 0;
    GameFrameWork::OpenItemUpgradeWin((GameFrameWork *)v4);
    return;
  }
  if ( !strcmp(acCmd, "HolyReward_Req") )
  {
    GameFrameWork::SendNetMsgZoneMgr((GameFrameWork *)v4, 0x25u, 0x3Cu, &kProto, 1);
    NpcDialogWin::CloseDialog(*(NpcDialogWin **)(v4 + 968));
    return;
  }
  if ( !strcmp(acCmd, "linkto") )
  {
    sscanf(v2, "%d %d");
    NpcDialogWin::CloseDialog(*(NpcDialogWin **)(v4 + 968));
    NpcDialogWin::OpenNpcNormalDialog(*(NpcDialogWin **)(v4 + 968), mobId, ScpNum);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, *(PgWin **)(v4 + 968));
    return;
  }
  if ( !strcmp(acCmd, "quest_ack") )
  {
    v8 = atoi(v2);
    v9 = pkBody->dwItemSelIndex;
    if ( v9 != -1 )
    {
      kCmd.nQuestID = LOWORD(pkBody->dwQuestID);
      kCmd.nSelectedItemIndex = v9;
      v10 = QuestDataMgr::GetQuest();
      if ( v10 )
      {
        mobId = kCmd.nQuestID;
        *std::map<int_mhObject___std::less<int>_std::allocator<std::pair<int_const_mhObject__>>>::operator__(
           (std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *)&v10[1],
           &mobId) = kCmd.nSelectedItemIndex;
        v4 = ScpNum;
      }
      GameFrameWork::SendNetMsgZoneMgr((GameFrameWork *)v4, 0x11u, 0x11u, &kCmd, 6);
    }
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)v4, LOWORD(pkBody->dwQuestID), pkBody->byScriptCmd, v8);
    return;
  }
  if ( !strcmp(acCmd, "logout") )
  {
    if ( !strcmp(v2, "beautyshop") )
      GameFrameWork::OnGoBeautyShop((GameFrameWork *)v4);
    return;
  }
  if ( !strcmp(acCmd, "getin") )
  {
    if ( !strcmp(v2, "weddinghall") )
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x56u, 0, 0);
    return;
  }
  if ( !strcmp(acCmd, "Gladiator") )
  {
    if ( pkBody->dwQuestID != -1 )
      GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)v4, LOWORD(pkBody->dwQuestID), pkBody->byScriptCmd, 4u);
    return;
  }
  if ( !strcmp(acCmd, "Knight") )
  {
    if ( pkBody->dwQuestID == -1 )
      return;
    v12 = 5;
LABEL_56:
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)v4, LOWORD(pkBody->dwQuestID), pkBody->byScriptCmd, v12);
    return;
  }
  if ( strcmp(acCmd, "HolyKnight") )
  {
    if ( strcmp(acCmd, "Guardian") )
    {
      if ( !strcmp(acCmd, "SharpShooter") )
      {
        if ( pkBody->dwQuestID == -1 )
          return;
        v12 = 14;
        goto LABEL_56;
      }
      if ( strcmp(acCmd, "Ranger") )
      {
        if ( strcmp(acCmd, "Warrock") )
        {
          if ( !strcmp(acCmd, "Wizard") )
          {
            if ( pkBody->dwQuestID == -1 )
              return;
            v12 = 20;
            goto LABEL_56;
          }
          if ( !strcmp(acCmd, "NpcAct") )
          {
            v11 = atoi(v2);
            GameFrameWork::NcActNpcMenuCmd((GameFrameWork *)v4, v11);
          }
        }
        else
        {
          if ( pkBody->dwQuestID != -1 )
            GameFrameWork::NcQuestScriptCmdAck(
              (GameFrameWork *)v4,
              LOWORD(pkBody->dwQuestID),
              pkBody->byScriptCmd,
              0x13u);
        }
      }
      else
      {
        if ( pkBody->dwQuestID != -1 )
          GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)v4, LOWORD(pkBody->dwQuestID), pkBody->byScriptCmd, 0xFu);
      }
    }
    else
    {
      if ( pkBody->dwQuestID != -1 )
        GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)v4, LOWORD(pkBody->dwQuestID), pkBody->byScriptCmd, 0xAu);
    }
  }
  else
  {
    if ( pkBody->dwQuestID != -1 )
      GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)v4, LOWORD(pkBody->dwQuestID), pkBody->byScriptCmd, 9u);
  }
}
// A85C00: using guessed type int __security_cookie;
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (0049B860) --------------------------------------------------------
void __thiscall GameFrameWork::DirectMessage(GameFrameWork *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GameFrameWork *v4; // esi@1
  AnnounceWin *v5; // ecx@2
  PgWin *v6; // esi@6
  PgWin *v7; // ecx@13
  DirectUserMsgBody_MHInfoTabChanged::TabEnum v8; // eax@22
  char *v9; // edi@29
  char *v10; // edi@32
  char *v11; // edi@36
  int v12; // edi@40
  GuildJoinReqTask *v13; // eax@45
  Char *v14; // edi@47
  char *v15; // edi@50
  Char *v16; // eax@51
  const char *v17; // edi@53
  const char *v18; // edi@55
  const char *v19; // edi@58
  const char *v20; // edi@60
  const char *v21; // edi@62
  const char *v22; // edi@64
  char *v23; // eax@67
  Name5 *v24; // eax@77
  int v25; // eax@78
  int v26; // edx@78
  int v27; // eax@78
  const char *v28; // edi@79
  Char *v29; // eax@79
  Char *v30; // edi@79
  char *v31; // eax@80
  Mover *v32; // edi@82
  const char *v33; // edi@85
  Name5 *v34; // eax@85
  VoteWin *v35; // ecx@85
  unsigned int v36; // edi@93
  unsigned int v37; // edi@94
  PgNet *v38; // ecx@95
  TargetWin *v39; // ecx@97
  MsgBox *v40; // edi@105
  ItemRepairWin *v41; // ecx@112
  D3DXCOLOR *v42; // eax@113
  float v43; // edx@113
  float v44; // edx@113
  float v45; // eax@113
  const char *v46; // eax@114
  unsigned __int16 v47; // ax@114
  const char *v48; // eax@115
  unsigned __int16 v49; // ax@115
  unsigned __int16 v50; // ax@116
  ChargedItemEffect *v51; // eax@118
  ItemInfo *v52; // eax@119
  char *v53; // eax@120
  char *v54; // eax@120
  MsgBox *v55; // eax@120
  unsigned int v56; // edx@121
  float v57; // [sp-14h] [bp-A4h]@113
  Name5 v58; // [sp-10h] [bp-A0h]@54
  float v59; // [sp-Ch] [bp-9Ch]@78
  float v60; // [sp-8h] [bp-98h]@78
  int v61; // [sp-4h] [bp-94h]@78
  int v62; // [sp+0h] [bp-90h]@47
  unsigned int v63; // [sp+4h] [bp-8Ch]@1
  D3DXCOLOR result; // [sp+10h] [bp-80h]@113
  PROTO_NC_USER_AVATAR_LIST_REQ kProto; // [sp+23h] [bp-6Dh]@96
  int netcmd; // [sp+24h] [bp-6Ch]@67
  unsigned int kFrom; // [sp+28h] [bp-68h]@54
  Name5 thisa; // [sp+2Ch] [bp-64h]@77
  char v69; // [sp+40h] [bp-50h]@78
  PgMsg::Frame kOkMsg; // [sp+54h] [bp-3Ch]@121
  char acMainCharID[21]; // [sp+68h] [bp-28h]@85
  unsigned int v72; // [sp+80h] [bp-10h]@1
  int v73; // [sp+8Ch] [bp-4h]@114
  int v74; // [sp+90h] [bp+0h]@1

  v72 = (unsigned int)&v74 ^ __security_cookie;
  v63 = (unsigned int)&v74 ^ __security_cookie;
  v4 = this;
  switch ( iMsgTag )
  {
    case 57:
      v5 = this->m_pkMHAnnounceWin;
      if ( v5 )
        AnnounceWin::KillNoticing(v5);
      return;
    case 58:
      GameFrameWork::OnCloseMHConfigRoomInfoWin(this);
      return;
    case 60:
      GameFrameWork::OpenMHInfoWin(this, 0);
      return;
    case 66:
      v6 = (PgWin *)this->m_pkMHEmotionWin;
LABEL_7:
      if ( v6 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v6);
      return;
    case 61:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      mhInfoWin::ClearInfo(v4->m_pkMHInfoWin);
      mhPortalListWin::Clear(v4->m_pkMHPortalListWin);
      return;
    case 62:
      GameFrameWork::OpenMHInfoWin(this, *(DirectUserMsgBody_MHInfoTabChanged::TabEnum *)pvBody);
      return;
    case 63:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
      return;
    case 64:
      PgFrameWork::AddMsg(&this->baseclass_0, 0xE1u, 1u, 0);
      return;
    case 65:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkMHMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
      v7 = v4->m_pkMHCurrentWin;
      if ( v7 )
      {
        if ( !(unsigned __int8)((int (__cdecl *)(unsigned int))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v63) )
          ((void (__stdcall *)(signed int))v4->m_pkMHCurrentWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v4->m_pkMHCurrentWin);
      }
      return;
    case 23:
      GameFrameWork::NcUserPacketToZone(this, (DirectUserMsgBody_SendPacket *)pvBody);
      return;
    case 24:
      GameFrameWork::NcUserPacketToWorld(this, (DirectUserMsgBody_SendPacket *)pvBody);
      return;
    case 25:
      GameFrameWork::AddSysMsg(this, (const char *)pvBody);
      return;
    case 26:
      GameFrameWork::AddBattleMsg(this, (char *)pvBody);
      return;
    case 37:
      GameFrameWork::OnNpcDialogCommand(this, (DirectUserMsgBody_NpcDialogResponse *)pvBody);
      return;
    case 15:
      v8 = *(_DWORD *)pvBody;
      if ( *(_DWORD *)pvBody > 1005 )
      {
        switch ( v8 )
        {
          case 1020:
            v15 = (char *)*((_DWORD *)pvBody + 2);
            if ( v15 )
            {
              v16 = CharMgr::GetChar(&g_kCharMgr, v15);
              if ( v16 )
                GameFrameWork::TargetCharReq(v4, v16);
            }
            break;
          case 1021:
            v17 = (const char *)*((_DWORD *)pvBody + 2);
            if ( v17 )
            {
              kFrom = (unsigned int)&v58;
              Name5::Name5(&v58, v17);
              GameFrameWork::NcRaidInvitationReq(v4, v58);
            }
            break;
          case 1022:
            v18 = (const char *)*((_DWORD *)pvBody + 2);
            if ( v18 )
            {
              kFrom = (unsigned int)&v58;
              Name5::Name5(&v58, v18);
              GameFrameWork::NcRaidVanishReq(v4, v58);
            }
            break;
          case 1023:
            GameFrameWork::NcRaidLeaveReq(this);
            break;
          case 1024:
            v19 = (const char *)*((_DWORD *)pvBody + 2);
            if ( v19 )
            {
              kFrom = (unsigned int)&v58;
              Name5::Name5(&v58, v19);
              GameFrameWork::NcRaidSetLeaderReq(v4, v58);
            }
            break;
          case 1025:
            v20 = (const char *)*((_DWORD *)pvBody + 2);
            if ( v20 )
            {
              kFrom = (unsigned int)&v58;
              Name5::Name5(&v58, v20);
              GameFrameWork::NcRaidSetLooterReq(v4, v58);
            }
            break;
          case 1026:
            v21 = (const char *)*((_DWORD *)pvBody + 2);
            if ( v21 )
            {
              kFrom = (unsigned int)&v58;
              Name5::Name5(&v58, v21);
              GameFrameWork::NcRaidSetSubLeaderReq(v4, v58);
            }
            break;
          case 1027:
            v22 = (const char *)*((_DWORD *)pvBody + 2);
            if ( v22 )
            {
              kFrom = (unsigned int)&v58;
              Name5::Name5(&v58, v22);
              GameFrameWork::NcRaidDelSubLeaderReq(v4, v58);
            }
            break;
          case 1014:
            if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
            {
              v23 = (char *)*((_DWORD *)pvBody + 2);
              netcmd = 4;
              RaidInfo::FindIndexByName(&g_kRaidinfo, v23, (unsigned int *)&netcmd, &kFrom);
              if ( netcmd != 4 )
              {
                ExpeditionPartyWin::OpenPopupWin(v4->m_pkExpeditionPartyWin[netcmd], kFrom);
                if ( !(unsigned __int8)((int (__cdecl *)(unsigned int))v4->m_pkExpeditionPartyWin[netcmd]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v63) )
                {
                  if ( g_kParty.m_uiTotalMember )
                    PartyWinInterface::OpenPopMenuParty(v4->m_pkPartyWinInterface, *((char **)pvBody + 2));
                }
              }
            }
            else
            {
              if ( g_kParty.m_uiTotalMember )
                PartyWinInterface::OpenPopMenuParty(v4->m_pkPartyWinInterface, *((char **)pvBody + 2));
            }
            break;
          case 1031:
            if ( this->m_pkPopupMenuWin )
              PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
            if ( v4->m_pkPartyLootSetupWin )
            {
              GameFrameWork::OpenPlayGuideWin(v4, BIL_PARTY_5);
              PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkPartyLootSetupWin->baseclass_0.baseclass_0.baseclass_0);
            }
            break;
          case 1034:
            Name5::Name5(&thisa, *((const char **)pvBody + 2));
            GameFrameWork::NcCollectPeepingReq(v4, v24);
            break;
          case 1035:
            Name5::Name5((Name5 *)&v69, *((const char **)pvBody + 2));
            *(_DWORD *)&v58.n5_name[0] = *(_DWORD *)v25;
            LODWORD(v59) = *(_DWORD *)(v25 + 4);
            LODWORD(v60) = *(_DWORD *)(v25 + 8);
            v26 = *(_DWORD *)(v25 + 12);
            v27 = *(_DWORD *)(v25 + 16);
            v61 = v26;
            v62 = v27;
            GameFrameWork::NcFriendSetReq(v4, v58);
            break;
          case 1036:
            v28 = (const char *)*((_DWORD *)pvBody + 2);
            kFrom = (unsigned int)&v58;
            Name5::Name5(&v58, v28);
            v29 = CharMgr::GetUserChar(&g_kCharMgr, v58);
            v30 = v29;
            if ( v29 )
            {
              if ( (unsigned __int8)((int (__thiscall *)(Char *))v29->baseclass_0.vfptr[15].SetAbStateProperty)(v29) )
              {
                v32 = v30->m_pkMover;
                if ( v32 )
                {
                  if ( Mover::GetNextSlot(v32, &kFrom) )
                    GameFrameWork::NcMoverRideOnReq(v4, v32->baseclass_0.m_kHandle, kFrom);
                }
              }
            }
            else
            {
              v31 = TextData3::Get(0x64868AD3u);
              GameFrameWork::AddSysMsg(v4, v31);
            }
            break;
          case 1037:
            v33 = (const char *)*((_DWORD *)pvBody + 2);
            v34 = User::GetMainCharID(&g_kUser);
            Name5::n_string(v34, acMainCharID);
            v35 = v4->m_pkVoteWin;
            acMainCharID[20] = 0;
            VoteWin::SetProposerText(v35, acMainCharID);
            VoteWin::SetTargetText(v4->m_pkVoteWin, v33);
            GameFrameWork::NcKqVoteStartCheckReq(v4);
            break;
          default:
            return;
        }
      }
      else
      {
        if ( *(_DWORD *)pvBody == 1005 )
        {
          HolyPromiseAddWin::SetTargetName(this->m_pkHolyPromiseAddWin, *((const char **)pvBody + 2));
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkHolyPromiseAddWin->baseclass_0.baseclass_0.baseclass_0);
        }
        else
        {
          switch ( v8 )
          {
            case 9:
              v6 = (PgWin *)this->m_pkPopupMenuWin;
              goto LABEL_7;
            case 5:
              if ( this->m_pkPopupMenuWin )
                PgWinMgr::CloseWin(
                  &Pgg_kWinMgr,
                  &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              GameFrameWork::NcPartyLeaveReq(v4);
              return;
            case 4:
              v9 = (char *)*((_DWORD *)pvBody + 2);
              if ( v9 )
                GameFrameWork::NcPartyChangeMasterReq(this, v9);
              v6 = (PgWin *)v4->m_pkPopupMenuWin;
              goto LABEL_7;
            case 3:
              v10 = (char *)*((_DWORD *)pvBody + 2);
              if ( this->m_pkPopupMenuWin )
                PgWinMgr::CloseWin(
                  &Pgg_kWinMgr,
                  &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              if ( v10 )
                GameFrameWork::NcPartyKickOffReq(v4, v10);
              break;
            case 2:
              v11 = (char *)*((_DWORD *)pvBody + 2);
              if ( this->m_pkPopupMenuWin )
                PgWinMgr::CloseWin(
                  &Pgg_kWinMgr,
                  &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              if ( v11 )
                GameFrameWork::NcPartyJoinReq(v4, v11);
              break;
            case 1:
              v12 = *((_DWORD *)pvBody + 2);
              if ( this->m_pkPopupMenuWin )
                PgWinMgr::CloseWin(
                  &Pgg_kWinMgr,
                  &this->m_pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              if ( v12 )
                GameFrameWork::NcTradeProposeReq(v4, *(_WORD *)(v12 + 548));
              break;
            case 8:
              NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0xB0u, 0, 0);
              break;
            case 10:
              v13 = ISingletonTask<GuildJoinReqTask>::Run();
              GuildJoinReqTask::SetTargetID(v13, *((char **)pvBody + 2));
              break;
            case 7:
              ChatDisplayWin2::OnWhisperTabToTarget(this->m_pkChatDisplayWin, *((char **)pvBody + 2));
              break;
            case 6:
              v14 = CharMgr::GetChar(&g_kCharMgr, *((char **)pvBody + 2));
              CNSTimer_Interval::ReSet(&v4->m_kStickTimer, Timer::ms_fCurTime);
              v62 = 1;
              v4->m_kStickTimer.m_fCheckTime = 1.0;
              GameFrameWork::Stick(v4, v14, v62);
              break;
            default:
              return;
          }
        }
      }
      return;
    case 40:
      GameFrameWork::CloseCommunityWin(this);
      GameFrameWork::OpenCommunityWin(v4, *(DirectUserMsgBody_CommunityTabChanged::TabEnum *)pvBody);
      return;
    case 41:
      GuildWin::InvalidateGuildList(this->m_pkGuildWin);
      return;
    case 50:
      GuildWarStateWin::InvalidateGuildWarList(this->m_pkGuildWarStateWin);
      return;
    case 51:
      GuildWarStateWin::InvalidateGuildWarableList(this->m_pkGuildWarStateWin);
      return;
    case 45:
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkGuildWarStateWin->baseclass_0.baseclass_0.baseclass_0);
      return;
    case 46:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkGuildWarInformWin->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkGuildWarInformWin->baseclass_0.baseclass_0.baseclass_0);
      GuildWarInformWin::SetText(v4->m_pkGuildWarInformWin, (char *)pvBody);
      return;
    case 71:
      GuildAcademyWin::InvalidateAcademy(this->m_pkGuildAcademyWin);
      return;
    case 52:
      v36 = *(_DWORD *)pvBody;
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkRoarWin->baseclass_0.baseclass_0.baseclass_0);
      RoarWin::SetLockInvPos(v4->m_pkRoarWin, v36);
      return;
    case 53:
      v37 = *(_DWORD *)pvBody;
      WingStoneWin::InitInformation(this->m_pkWingStoneWin);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkWingStoneWin->baseclass_0.baseclass_0.baseclass_0);
      WingStoneWin::SetLockInvPos(v4->m_pkWingStoneWin, v37);
      return;
    case 54:
      NetMgr::SendUserLogOutMsg2WorldMgrServerForCharSelect(&g_kNetMgr);
      v38 = (PgNet *)v4->m_spWorldMgrNet.m_pObject;
      v4->m_bBackCharSelect = 1;
      LOWORD(netcmd) = 3103;
      if ( v38 )
      {
        PgNet::AddNetMsg(v38, &netcmd, 2);
        PgNet::SendNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
      }
      return;
    case 76:
      v39 = this->m_pkTargetWin;
      if ( v39 )
        TargetWin::SetSoulCount(v39, 0, *(_BYTE *)pvBody, 0);
      return;
    case 27:
      if ( !this->m_pkRaidReplyWin.m_pObject )
        return;
      if ( *(_DWORD *)pvBody )
      {
        if ( *(_DWORD *)pvBody != 1 )
          goto LABEL_105;
        *(float *)&v62 = 0.0;
      }
      else
      {
        v62 = 1;
      }
      GameFrameWork::NcRaidInvitationAnswerReq(this, v62);
LABEL_105:
      v40 = v4->m_pkRaidReplyWin.m_pObject;
      if ( v40 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v40 )
          v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v40,
            1u);
        v4->m_pkRaidReplyWin.m_pObject = 0;
      }
      return;
    case 55:
      SkillWin::OpenProduceSkillSelectWin(this->m_pkSkillWin);
      return;
    case 67:
      SkillWin::OpenProduceSkillInitWin(this->m_pkSkillWin, *(_BYTE *)pvBody);
      return;
    case 72:
      v41 = this->m_pkItemRepairWin;
      LOWORD(kFrom) = *(_WORD *)pvBody;
      ItemRepairWin::SetRepairItemSlot(v41, (ITEM_INVEN)kFrom);
      PgWinMgr::DoModal(&Pgg_kWinMgr, &v4->m_pkItemRepairWin->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
      return;
    case 73:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkGuildWarInformWin->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkGTInformWin->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkGTInformWin->baseclass_0.baseclass_0.baseclass_0);
      v42 = ColorInfoTable::GetDxColor(&result, Chat_Announcement);
      v43 = v42->r;
      *(float *)&v62 = 0.0;
      v61 = 0;
      v57 = v43;
      *(_DWORD *)&v58.n5_name[0] = LODWORD(v42->g);
      v44 = v42->b;
      v45 = v42->a;
      v59 = v44;
      v60 = v45;
      GTInformWin::AddText(v4->m_pkGTInformWin, (char *)pvBody, *(D3DXCOLOR *)&v57, 0, 0.0);
      return;
    case 79:
      v46 = PetNameEditWin::GetName(this->m_pkPetNameEditWin);
      kFrom = (unsigned int)&v59;
      Name4::Name4((Name4 *)&v59, v46);
      v47 = PetNameEditWin::GetPetHandle(v4->m_pkPetNameEditWin);
      v73 = -1;
      GameFrameWork::OpenPetDialog(v4, v47, *(Name4 *)&v59);
      return;
    case 80:
      v48 = PetNameEditWin::GetName(this->m_pkPetNameEditWin);
      kFrom = (unsigned int)&v59;
      Name4::Name4((Name4 *)&v59, v48);
      v49 = PetNameEditWin::GetPetHandle(v4->m_pkPetNameEditWin);
      v73 = -1;
      GameFrameWork::NcPetSetNameReq(v4, v49, *(Name4 *)&v59);
      return;
    case 81:
      v50 = PetNameEditWin::GetPetHandle(this->m_pkPetNameEditWin);
      GameFrameWork::NcPetSetNameCancelReq(v4, v50);
      return;
    case 82:
      if ( pvBody )
      {
        v51 = ChargedEffectTable::GetByHandle(*((_WORD *)pvBody + 2));
        if ( v51 )
        {
          v52 = ItemInfoTab::GetByInxName(v51->ItemID);
          if ( v52 )
          {
            v62 = (int)v52->Name;
            v53 = TextData3::Get(0x6C788FA9u);
            v54 = fs(v53);
            v55 = MsgBox::Modal(MSGBOX_OKCANCEL, v54);
            if ( v55 )
            {
              v56 = *(_DWORD *)pvBody;
              kOkMsg.m_uiFrameMsg = 270;
              kOkMsg.m_uiFrameWParam = v56;
              MsgBox::SetFrameWorkMsgOnClose(v55, &v4->baseclass_0, &kOkMsg, 0);
            }
          }
        }
      }
      return;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0049C3B0) --------------------------------------------------------
NiRTTI *__thiscall NiIntegerExtraData::GetRTTI(NiIntegerExtraData *this)
{
  return &NiIntegerExtraData::m_RTTI;
}

//----- (0049C3C0) --------------------------------------------------------
MobViewInfo *__cdecl IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  MobViewInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(MobViewInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (0049C410) --------------------------------------------------------
ActionViewInfo *__cdecl IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  ActionViewInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(ActionViewInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0049C460) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>(NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *> *this)
{
  this->vfptr = (NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *>Vtbl *)&NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_;
}
// 98BF34: using guessed type int (__thiscall *NiTListBase_DFALL_ScriptBtn ___ScriptBtn _____vftable_)(void *p, char);

//----- (0049C470) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vector_deleting_destructor_(NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *>Vtbl *)&NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 98BF34: using guessed type int (__thiscall *NiTListBase_DFALL_ScriptBtn ___ScriptBtn _____vftable_)(void *p, char);

//----- (0049C4A0) --------------------------------------------------------
void __thiscall Name4::Name4(Name4 *this, const char *str)
{
  *(_QWORD *)&this->n4_name[8] = 0i64;
  *(_QWORD *)&this->n4_name[0] = 0i64;
  strncpy(this->n4_name, (char *)str, 0x10u);
}

//----- (0049C4D0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetBuildingRoomInfo(MiniHouseIndoor *this, PROTO_NC_MINIHOUSE_BUILDING_REQ k)
{
  MiniHouseIndoor *v2; // ebx@1
  char v3; // [sp+Ch] [bp-8Ch]@1
  char v4; // [sp+Dh] [bp-8Bh]@1
  char source; // [sp+16h] [bp-82h]@1
  char v6; // [sp+90h] [bp-8h]@1
  unsigned int v7; // [sp+94h] [bp-4h]@1
  int v8; // [sp+98h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  memcpy(&v3, &k, 0x84u);
  v6 = k.sNotify[100];
  strncpy(this->m_BuildingInfo.title, &source, 0x14u);
  strncpy(v2->m_BuildingInfo.password, &v4, 8u);
  v2->m_BuildingInfo.maxvisiter = v3;
}
// A85C00: using guessed type int __security_cookie;

//----- (0049C550) --------------------------------------------------------
void __thiscall KeyboardMoveProcess::Clear(KeyboardMoveProcess *this)
{
  *(_DWORD *)&this->m_bDownFront = 0;
  *(_DWORD *)&this->m_bOldDown = 0;
  *(_WORD *)&this->m_bOldDownBack = 0;
  this->m_bOlddownLeft = 0;
  LODWORD(this->m_pos3LastPos.x) = (_DWORD)NiPoint3::ZERO.x;
  this->m_pos3LastPos.y = NiPoint3::ZERO.y;
  this->m_pos3LastPos.z = NiPoint3::ZERO.z;
  LODWORD(this->m_pos3CurPos.x) = (_DWORD)NiPoint3::ZERO.x;
  this->m_pos3CurPos.y = NiPoint3::ZERO.y;
  this->m_pos3CurPos.z = NiPoint3::ZERO.z;
  LODWORD(this->m_pos3CameraDir.x) = (_DWORD)NiPoint3::ZERO.x;
  this->m_pos3CameraDir.y = NiPoint3::ZERO.y;
  this->m_pos3CameraDir.z = NiPoint3::ZERO.z;
  LODWORD(this->m_pos3MoveDir.x) = (_DWORD)NiPoint3::ZERO.x;
  this->m_pos3MoveDir.y = NiPoint3::ZERO.y;
  this->m_pos3MoveDir.z = NiPoint3::ZERO.z;
  LODWORD(this->m_pos3TargetPos.x) = (_DWORD)NiPoint3::ZERO.x;
  this->m_pos3TargetPos.y = NiPoint3::ZERO.y;
  this->m_pos3TargetPos.z = NiPoint3::ZERO.z;
}

//----- (0049C5F0) --------------------------------------------------------
Name5 *__thiscall Party::GetJoinProposeCharID(Party *this, Name5 *result)
{
  Name5 *v2; // eax@1

  v2 = result;
  *(_QWORD *)&result->n5_name[0] = *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[0];
  *(_DWORD *)&result->n5_name[8] = *(_DWORD *)&this->m_kJoinProposeCharID.n5_name[8];
  *(_QWORD *)&result->n5_name[12] = *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[12];
  return v2;
}

//----- (0049C620) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
}
// 98BF14: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);

//----- (0049C630) --------------------------------------------------------
void __thiscall NiTPointerList<unsigned_int>::_NiTPointerList<unsigned_int>(NiTPointerList<unsigned int> *this)
{
  NiTPointerList<unsigned int> *v1; // edi@1
  NiTListItem<unsigned int> *v2; // esi@1
  NiTListItem<unsigned int> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
}
// 98BF14: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);
// 98BF44: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);

//----- (0049C6B0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<PgWin__>_PgWin__>::_NiTListBase<DFALL<PgWin__>_PgWin__>(NiTListBase<DFALL<PgWin *>,PgWin *> *this)
{
  this->vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
}
// 98BF24: using guessed type int (__thiscall *NiTListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);

//----- (0049C6C0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 98BF14: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);

//----- (0049C6F0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vector_deleting_destructor_(NiTPointerList<unsigned int> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<unsigned int> *v3; // esi@1
  NiTListItem<unsigned int> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98BF14: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);
// 98BF44: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);

//----- (0049C780) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<PgWin__>_PgWin__>::_vector_deleting_destructor_(NiTListBase<DFALL<PgWin *>,PgWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 98BF24: using guessed type int (__thiscall *NiTListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);

//----- (0049C7B0) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::SetAmout(MHDiceRewardMoneyWin *this, unsigned __int64 money)
{
  MHDiceRewardMoneyWin *v2; // esi@1
  char acStr[128]; // [sp+Ch] [bp-84h]@1
  unsigned int v4; // [sp+8Ch] [bp-4h]@1
  int v5; // [sp+90h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  User::GetGem(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  User::GetGold(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  User::GetSilver(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  User::GetCopper(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (0049C8C0) --------------------------------------------------------
void __thiscall AnnounceWin::KillNoticing(AnnounceWin *this)
{
  AnnounceWin *v1; // ebx@1
  PgFadeTextGeometry **v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  v2 = (PgFadeTextGeometry **)this->m_aspTextGeom;
  v3 = 3;
  do
  {
    ((void (__stdcall *)(_DWORD))(*v2)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(&byte_9788EB);
    PgFadeTextGeometry::SetLifeTime(*v2, -1.0);
    ++v2;
    --v3;
  }
  while ( v3 );
  v1->m_bNotice = 0;
}

//----- (0049C910) --------------------------------------------------------
void __thiscall NiTPointerListBase<DFALL<PgWin__>_PgWin__>::NiTPointerListBase<DFALL<PgWin__>_PgWin__>(NiTPointerListBase<DFALL<PgWin *>,PgWin *> *this)
{
  *(_DWORD *)&this->baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0.m_pkHead = 0;
  this->baseclass_0.m_pkTail = 0;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
}
// 98BF5C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);

//----- (0049C930) --------------------------------------------------------
void *__thiscall NiIntegerExtraData::_scalar_deleting_destructor_(NiIntegerExtraData *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiIntegerExtraData::_vftable_;
  NiExtraData::_NiExtraData(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);

//----- (0049C960) --------------------------------------------------------
unsigned int __cdecl ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E5C: using guessed type int ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab___ms_pkTable;

//----- (0049C980) --------------------------------------------------------
unsigned int __cdecl ITableBase<ActionEffectItem_ActionEffectItemTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E64: using guessed type int ITableBase_ActionEffectItem_ActionEffectItemTab___ms_pkTable;

//----- (0049C9A0) --------------------------------------------------------
NiNode *__thiscall ResElement::GetNiNode(ResElement *this)
{
  NiActorManager *v1; // eax@2
  NiNode *result; // eax@3

  if ( this->m_bIsCanAnimation && (v1 = this->m_pActorMgr.m_pObject) != 0 )
    result = (NiNode *)v1->m_spNIFRoot.m_pObject;
  else
    result = this->m_pNiNode.m_pObject;
  return result;
}

//----- (0049C9C0) --------------------------------------------------------
void __thiscall mhSettingWin::SetPassWord(mhSettingWin *this, char *pcPassWord)
{
  mhSettingWin *v2; // esi@1
  int v3; // [sp+0h] [bp-8h]@0
  signed int v4; // [sp+0h] [bp-8h]@3

  v2 = this;
  ((void (__stdcall *)(char *))this->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pcPassWord);
  ((void (*)(void))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( pcPassWord && pcPassWord != &byte_9788EB )
  {
    v2->m_spCheckBox[0]->m_bCheck = 1;
    ((void (__stdcall *)(signed int, int))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      1,
      v3);
    v4 = 1;
  }
  else
  {
    v2->m_spCheckBox[0]->m_bCheck = 0;
    ((void (__stdcall *)(signed int, int))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(
      1,
      v3);
    ((void (__stdcall *)(_DWORD))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v4 = 0;
  }
  ((void (__cdecl *)(signed int))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4);
}

//----- (0049CA70) --------------------------------------------------------
int __thiscall mhJoinWin::GetMaxPerson(mhJoinWin *this)
{
  const char *v1; // eax@1

  v1 = (const char *)((int (*)(void))this->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  return atoi(v1);
}

//----- (0049CA90) --------------------------------------------------------
void __thiscall mhJoinWin::SetMaxPerson(mhJoinWin *this, int PersonCount)
{
  mhJoinWin *v2; // esi@1

  v2 = this;
  _itoa(PersonCount, (char *)&PersonCount, 10);
  ((void (__stdcall *)(_DWORD))v2->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&PersonCount);
}

//----- (0049CAD0) --------------------------------------------------------
void __thiscall mhJoinWin::CheckEnable(mhJoinWin *this, mhJoinWin::CheckBoxIndex eIndex, bool b)
{
  mhJoinWin *v3; // esi@1

  v3 = this;
  this->m_spCheckBox[eIndex]->m_bCheck = b;
  if ( !eIndex )
  {
    if ( !b )
      ((void (__stdcall *)(_DWORD))this->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v3->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
    ((void (__stdcall *)(_DWORD))v3->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  }
}

//----- (0049CB30) --------------------------------------------------------
void __thiscall PgTList<unsigned_int>::_PgTList<unsigned_int>(PgTList<unsigned int> *this)
{
  PgTList<unsigned int> *v1; // edi@1
  NiTListItem<unsigned int> *v2; // esi@1
  NiTListItem<unsigned int> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&PgTList<unsigned_int>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
}
// 98BF14: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);
// 98BF84: using guessed type int (__thiscall *PgTList_unsigned int____vftable_)(void *p, char);

//----- (0049CBB0) --------------------------------------------------------
void *__thiscall PgTList<unsigned_int>::_vector_deleting_destructor_(PgTList<unsigned int> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<unsigned int> *v3; // esi@1
  NiTListItem<unsigned int> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&PgTList<unsigned_int>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98BF14: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);
// 98BF84: using guessed type int (__thiscall *PgTList_unsigned int____vftable_)(void *p, char);

//----- (0049CC40) --------------------------------------------------------
ActionViewInfo *__cdecl ActionViewTable::GetByEventCode(unsigned int nEventCode)
{
  unsigned int v1; // esi@1
  ActionViewInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
  {
    while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                                  v1)
                      + 105) != nEventCode )
    {
      ++v1;
      if ( v1 >= ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
        goto LABEL_4;
    }
    result = (ActionViewInfo *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                                 v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0049CC90) --------------------------------------------------------
ItemActionEffectDesc *__cdecl ItemActionEffectDescTab::GetByItemActionID(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  ItemActionEffectDesc *result; // eax@4

  v1 = 0;
  if ( ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::GetTotal() )
  {
    while ( *(_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable + 4),
                        v1) != uiIndex )
    {
      ++v1;
      if ( v1 >= ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (ItemActionEffectDesc *)CDataReader::GetRecord(
                                       (CDataReader *)(ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable
                                                     + 4),
                                       v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97E5C: using guessed type int ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab___ms_pkTable;

//----- (0049CCE0) --------------------------------------------------------
ActionEffectItem *__cdecl ActionEffectItemTab::GetByItemID(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  void *v2; // eax@2
  ActionEffectItem *result; // eax@5

  v1 = 0;
  if ( ITableBase<ActionEffectItem_ActionEffectItemTab>::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 4), v1);
      if ( v2 )
      {
        if ( *(_WORD *)v2 == uiIndex )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<ActionEffectItem_ActionEffectItemTab>::GetTotal() )
        goto LABEL_5;
    }
    result = (ActionEffectItem *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 4),
                                   v1);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A97E64: using guessed type int ITableBase_ActionEffectItem_ActionEffectItemTab___ms_pkTable;

//----- (0049CD30) --------------------------------------------------------
void __cdecl BasicInfoLinkTab::GetSkipList(PgTList<unsigned int> *pkSkipList)
{
  PgTList<unsigned int> *v1; // esi@1
  unsigned int v2; // ebx@1
  int v3; // eax@2
  void *v4; // eax@6
  int v5; // edi@8
  int v6; // eax@8
  NiTListItem<unsigned int> *v7; // ecx@8
  unsigned int pkSkipLista; // [sp+10h] [bp+8h]@3

  v1 = pkSkipList;
  v2 = 0;
  if ( pkSkipList )
  {
    v3 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
    pkSkipLista = v3 ? *(_DWORD *)(v3 + 40) : 0;
    if ( pkSkipLista > 0 )
    {
      do
      {
        v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4), v2);
        if ( v4 && *((_BYTE *)v4 + 76) )
        {
          v5 = *((_DWORD *)v4 + 1);
          v6 = (int)v1->baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *)v1);
          *(_DWORD *)(v6 + 8) = v5;
          *(_DWORD *)v6 = 0;
          *(_DWORD *)(v6 + 4) = v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail;
          v7 = v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail;
          if ( v7 )
            v7->m_pkNext = (NiTListItem<unsigned int> *)v6;
          else
            v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<unsigned int> *)v6;
          ++*(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
          v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<unsigned int> *)v6;
        }
        ++v2;
      }
      while ( v2 < pkSkipLista );
    }
  }
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (0049CDC0) --------------------------------------------------------
CollectCard *__cdecl CollectCardTab::GetByCardID(unsigned int uiCardID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  CollectCard *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (CollectCard *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4),
                                v3);
      if ( result )
      {
        if ( result->CC_CardID == (_WORD)uiCardID )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (0049CE10) --------------------------------------------------------
CollectCardTitle *__cdecl CollectCardTitleTab::GetByItemInx(const char *pcItemInx)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  void *v3; // eax@5
  void *v4; // ebx@5
  int v5; // eax@6
  char v6; // cl@7
  unsigned int v7; // eax@8
  unsigned int i; // [sp+Ch] [bp-8h]@4
  unsigned int v10; // [sp+10h] [bp-4h]@2

  v1 = *(_DWORD *)(ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v10 = *(_DWORD *)(v1 + 40);
  else
    v10 = 0;
  i = 0;
  if ( v10 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCardTitle_CollectCardTitleTab>::ms_pkTable + 4), v2);
    v4 = v3;
    if ( v3 )
      break;
LABEL_11:
    ++v2;
    i = v2;
    if ( v2 >= v10 )
      return 0;
  }
  v5 = (int)((char *)v3 + 4);
  do
    v6 = *(_BYTE *)v5++;
  while ( v6 );
  v7 = v5 - (_DWORD)((char *)v4 + 5);
  if ( v7 != strlen(pcItemInx) || strncmp((const char *)v4 + 4, pcItemInx, v7) )
  {
    v2 = i;
    goto LABEL_11;
  }
  return (CollectCardTitle *)v4;
}
// A97EDC: using guessed type int ITableBase_CollectCardTitle_CollectCardTitleTab___ms_pkTable;

//----- (0049CEB0) --------------------------------------------------------
MinimonInfo *__cdecl MinimonInfoTable::GetMinimonInfoByIDX(char *pcItemIDX)
{
  char *v1; // ebx@1
  int v2; // eax@3
  unsigned int v3; // edi@4
  unsigned int v4; // esi@6
  MinimonInfo *result; // eax@7

  v1 = pcItemIDX;
  if ( pcItemIDX && *pcItemIDX )
  {
    v2 = *(_DWORD *)(ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable + 56);
    if ( v2 )
      v3 = *(_DWORD *)(v2 + 40);
    else
      v3 = 0;
    v4 = 0;
    if ( v3 )
    {
      do
      {
        result = (MinimonInfo *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<MinimonInfo_MinimonInfoTable>::ms_pkTable + 4),
                                  v4);
        if ( result )
        {
          if ( !strcmp(result->ItemIDX, v1) )
            return result;
          v1 = pcItemIDX;
        }
        ++v4;
      }
      while ( v4 < v3 );
    }
    result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F1C: using guessed type int ITableBase_MinimonInfo_MinimonInfoTable___ms_pkTable;

//----- (0049CF40) --------------------------------------------------------
void __thiscall NiTList<PgWin__>::_NiTList<PgWin__>(NiTList<PgWin *> *this)
{
  NiTList<PgWin *> *v1; // edi@1
  NiTListItem<PgWin *> *v2; // esi@1
  NiTListItem<PgWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
}
// 98BF24: using guessed type int (__thiscall *NiTListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);
// 98BF5C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);

//----- (0049CFC0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vector_deleting_destructor_(NiTList<PgWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PgWin *> *v3; // esi@1
  NiTListItem<PgWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98BF24: using guessed type int (__thiscall *NiTListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);
// 98BF5C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);

//----- (0049D050) --------------------------------------------------------
void __thiscall NiTList<ScriptBtn__>::_NiTList<ScriptBtn__>(NiTList<ScriptBtn *> *this)
{
  NiTList<ScriptBtn *> *v1; // edi@1
  NiTListItem<ScriptBtn *> *v2; // esi@1
  NiTListItem<ScriptBtn *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *>Vtbl *)&NiTPointerListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *>Vtbl *)&NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_;
}
// 98BF34: using guessed type int (__thiscall *NiTListBase_DFALL_ScriptBtn ___ScriptBtn _____vftable_)(void *p, char);
// 98BF74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_ScriptBtn ___ScriptBtn _____vftable_)(void *p, char);

//----- (0049D0D0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<ScriptBtn *>,ScriptBtn *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<ScriptBtn *> *v3; // esi@1
  NiTListItem<ScriptBtn *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<ScriptBtn *>,ScriptBtn *>Vtbl *)&NiTPointerListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<ScriptBtn__>_ScriptBtn__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98BF34: using guessed type int (__thiscall *NiTListBase_DFALL_ScriptBtn ___ScriptBtn _____vftable_)(void *p, char);
// 98BF74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_ScriptBtn ___ScriptBtn _____vftable_)(void *p, char);

//----- (0049D160) --------------------------------------------------------
D3DXCOLOR *__cdecl ColorInfoTable::GetDxColor(D3DXCOLOR *result, ColorID eColorID)
{
  void *v3; // eax@4
  char v4; // [sp-4h] [bp-8h]@2

  if ( !*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
  {
    v4 = -1;
LABEL_3:
    Color::GetDxColor(result, -1, 0, -1, v4);
    return result;
  }
  v3 = CDataReader::GetRecord(
         (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
         eColorID);
  v4 = -1;
  if ( !v3 )
    goto LABEL_3;
  Color::GetDxColor(result, *((_BYTE *)v3 + 4), *((_BYTE *)v3 + 5), *((_BYTE *)v3 + 6), -1);
  return result;
}

//----- (0049D1D0) --------------------------------------------------------
MiniHouseObjAni *__cdecl MiniHouseObjAniInfoTab::GetObjInfobyhnd(unsigned __int16 handle)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  MiniHouseObjAni *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( handle != *(_WORD *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 4),
                                  v3) )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (MiniHouseObjAni *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<MiniHouseObjAni_MiniHouseObjAniInfoTab>::ms_pkTable + 4),
                                  v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97E0C: using guessed type int ITableBase_MiniHouseObjAni_MiniHouseObjAniInfoTab___ms_pkTable;

//----- (0049D230) --------------------------------------------------------
char *__thiscall mhInfoWin::GetTitle(mhInfoWin *this)
{
  char *result; // eax@2

  if ( this->m_FullTitleName.baseclass_0._Mysize )
  {
    result = (char *)&this->m_FullTitleName;
    if ( this->m_FullTitleName.baseclass_0._Myres >= 0x10 )
      result = *(char **)result;
  }
  else
  {
    result = (char *)((int (*)(void))this->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  }
  return result;
}

//----- (0049D260) --------------------------------------------------------
void __thiscall mhSettingWin::Refresh(mhSettingWin *this, char *pcTitle, char *pcPassWord, int PersonCount, bool bItemView, char *pcNotice)
{
  mhSettingWin *v6; // esi@1

  v6 = this;
  ((void (__stdcall *)(_DWORD))this->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pcTitle);
  ((void (__stdcall *)(_DWORD))v6->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pcNotice);
  v6->m_spCheckBox[1]->m_bCheck = bItemView;
  mhSettingWin::SetPassWord(v6, pcPassWord);
  _itoa(PersonCount, (char *)&bItemView, 10);
  ((void (__stdcall *)(_DWORD))v6->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&bItemView);
}

//----- (0049D2E0) --------------------------------------------------------
void __thiscall mhJoinWin::SetPassWord(mhJoinWin *this, char *pcPassWord)
{
  mhJoinWin *v2; // esi@1
  int v3; // eax@1
  int v4; // edx@1
  char v5; // cl@2
  ColumnBut *v6; // ecx@3
  int v7; // [sp+0h] [bp-4h]@0
  signed int v8; // [sp+0h] [bp-4h]@4

  v2 = this;
  ((void (__stdcall *)(char *))this->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pcPassWord);
  v3 = ((int (*)(void))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v4 = v3 + 1;
  do
    v5 = *(_BYTE *)v3++;
  while ( v5 );
  v6 = v2->m_spCheckBox[0];
  if ( v3 == v4 )
  {
    v6->m_bCheck = 0;
    ((void (__stdcall *)(signed int, int))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(
      1,
      v7);
    ((void (__stdcall *)(_DWORD))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v8 = 0;
  }
  else
  {
    v6->m_bCheck = 1;
    ((void (__stdcall *)(signed int, int))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      1,
      v7);
    v8 = 1;
  }
  ((void (__cdecl *)(signed int))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
}

//----- (0049D380) --------------------------------------------------------
ChargedItemEffect *__cdecl ChargedEffectTable::GetByHandle(unsigned __int16 wHandle)
{
  unsigned int v1; // esi@1
  ChargedItemEffect *result; // eax@2

  v1 = 0;
  if ( ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
  {
    while ( 1 )
    {
      result = (ChargedItemEffect *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                                      v1);
      if ( result )
      {
        if ( result->Handle == wHandle )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (0049D3C0) --------------------------------------------------------
void __thiscall mhInfoWin::ClearInfo(mhInfoWin *this)
{
  char *v1; // eax@1
  bool v2; // cf@1

  v1 = (char *)&this->m_PassWord;
  v2 = this->m_PassWord.baseclass_0._Myres < 0x10;
  this->m_PassWord.baseclass_0._Mysize = 0;
  if ( !v2 )
    v1 = *(char **)v1;
  *v1 = 0;
  this->m_bItemView = 0;
  this->m_MaxPersonCount = 0;
  this->m_NowPersonCount = 0;
  *(_DWORD *)&this->m_ClickedChar = -1;
}

//----- (0049D400) --------------------------------------------------------
bool __thiscall ITask::OnProcessNetMsg(ITask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  return 0;
}

//----- (0049D410) --------------------------------------------------------
bool __cdecl std::operator__<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@1

  v2 = _Right;
  if ( _Right->baseclass_0._Myres >= 0x10 )
    v2 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           _Left,
           0,
           _Left->baseclass_0._Mysize,
           v2->baseclass_0.___u0.baseclass_0.dummy,
           _Right->baseclass_0._Mysize) != 0;
}

//----- (0049D440) --------------------------------------------------------
void *__thiscall GuildJoinReqTask::_vector_deleting_destructor_(GuildJoinReqTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildJoinReqTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildJoinReqTask>::_vftable_;
  ISingletonTask<GuildJoinReqTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98BFC4: using guessed type int (__stdcall *ISingletonTask_GuildJoinReqTask____vftable_)(int uiFlags);
// 98BFE0: using guessed type int (__thiscall *ISingletonTask_GuildJoinReqTask____vftable_)(void *p, char);
// A98748: using guessed type int ISingletonTask_GuildJoinReqTask___ms_pkSingletonTask;

//----- (0049D480) --------------------------------------------------------
CollectWin::sRewardInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>>_CollectWin::sRewardInfo___std::allocator<CollectWin::sRewardInfo>>(std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > _Last, CollectWin::sRewardInfo *_Dest, std::allocator<CollectWin::sRewardInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > v5; // ecx@1
  CollectWin::sRewardInfo *result; // eax@1

  v5 = _First;
  for ( result = _Dest; v5 != _Last; ++result )
  {
    if ( result )
    {
      result->m_uiRewardGrade = **(_DWORD **)&v5;
      result->m_uiRewardID = *(_DWORD *)(*(_DWORD *)&v5 + 4);
      result->m_uiCount = *(_DWORD *)(*(_DWORD *)&v5 + 8);
      *(_DWORD *)&result->m_bCompleted = *(_DWORD *)(*(_DWORD *)&v5 + 12);
    }
    *(_DWORD *)&v5 += 16;
  }
  return result;
}

//----- (0049D4C0) --------------------------------------------------------
void __thiscall mhPortalListWin::Clear(mhPortalListWin *this)
{
  mhPortalListWin *v1; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v2; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  if ( v2 != this->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    do
      v2 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(&v1->m_mapPortalInfo.baseclass_0, &result, (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v2)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( v2 != v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
}

//----- (0049D500) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > _Where, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Node)
{
  std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
      this,
      result,
      1,
      v5,
      _Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < *(_DWORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        this,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        this,
        result,
        0,
        v8,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= *(_DWORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 21) )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        v4,
        result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        v4,
        result,
        1,
        _Node,
        v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        v4,
        result,
        0,
        _Node,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        v4,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (0049D660) --------------------------------------------------------
void __thiscall GuildJoinReqTask::DirectMessage(GuildJoinReqTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  int v4; // esi@3
  char *v5; // edi@3
  char v6; // dl@4
  PROTO_NC_GUILD_MEMBER_INVITE_REQ kProto; // [sp+0h] [bp-18h]@3
  unsigned int v8; // [sp+14h] [bp-4h]@1
  int v9; // [sp+18h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  if ( iMsgTag == 28 )
  {
    if ( *(_DWORD *)pvBody )
    {
      this->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
    }
    else
    {
      *(_DWORD *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
      this->m_pkInputBox = 0;
      *(_DWORD *)&this->m_acTargetID[0] = 0;
      *(_DWORD *)&this->m_acTargetID[4] = 0;
      v4 = *((_DWORD *)pvBody + 1);
      *(_QWORD *)&kProto.ToCharID.n5_name[12] = 0i64;
      *(_QWORD *)&kProto.ToCharID.n5_name[4] = 0i64;
      *(_DWORD *)&kProto.ToCharID.n5_name[0] = 0;
      v5 = (char *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator;
      do
      {
        v6 = *(_BYTE *)v4;
        *v5++ = *(_BYTE *)v4++;
      }
      while ( v6 );
      *(_QWORD *)&kProto.ToCharID.n5_name[12] = 0i64;
      *(_QWORD *)&kProto.ToCharID.n5_name[4] = 0i64;
      *(_DWORD *)&kProto.ToCharID.n5_name[0] = 0;
      strncpy(
        kProto.ToCharID.n5_name,
        this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy,
        0x14u);
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 9u, &kProto, 20);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0049D720) --------------------------------------------------------
void __thiscall GuildJoinReqTask::OnStart(GuildJoinReqTask *this)
{
  GuildJoinReqTask *v1; // esi@1
  char *v2; // eax@3
  PROTO_NC_GUILD_MEMBER_INVITE_REQ kProto; // [sp+10h] [bp-18h]@2
  unsigned int v4; // [sp+24h] [bp-4h]@1
  int v5; // [sp+28h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v1 = this;
  if ( this->m_acTargetID[0] )
  {
    *(_QWORD *)&kProto.ToCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.ToCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.ToCharID.n5_name[0] = 0;
    strncpy(kProto.ToCharID.n5_name, this->m_acTargetID, 0x14u);
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 9u, &kProto, 20);
  }
  else
  {
    this->m_pkInputBox = InputBox::CreateWin();
    v2 = TextData::Get(0x159C5589u);
    InputBox::SetText(v1->m_pkInputBox, v2);
    v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v1->baseclass_0.baseclass_0.baseclass_8);
    ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0049D800) --------------------------------------------------------
bool __thiscall GuildJoinReqTask::OnProcessNetMsg(GuildJoinReqTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildJoinReqTask *v5; // edi@1
  bool result; // al@3
  signed int v7; // eax@4
  char *v8; // eax@8
  char *v9; // eax@10
  char *v10; // eax@11
  char *v11; // eax@17
  char *v12; // eax@18
  PgFrameWork *v13; // eax@19
  GameFrameWork *v14; // esi@22
  char *v15; // eax@22
  MHDiceGameTask **v16; // eax@23
  bool v17; // bl@23
  int v18; // esi@24
  PgFrameWork *v19; // esi@28
  char *v20; // eax@28
  unsigned int v21; // [sp-18h] [bp-24h]@9
  unsigned int v22; // [sp-14h] [bp-20h]@7
  unsigned int v23; // [sp-14h] [bp-20h]@19

  v5 = this;
  if ( iDepart == 29 && iCommand == 10 )
  {
    v7 = *((_WORD *)pvData + 10);
    if ( v7 > 6352 )
    {
      switch ( v7 )
      {
        case 7112:
          v11 = TextData2::Get(0xF68B4770u);
          MsgBox::Modeless(MSGBOX_OK, v11);
          break;
        case 7120:
          v12 = TextData2::Get(0x55F0B0D4u);
          MsgBox::Modeless(MSGBOX_OK, v12);
          break;
        case 7257:
          v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          v23 = 2145890036;
          goto LABEL_22;
        case 7258:
          v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          v23 = -746040772;
          goto LABEL_22;
        case 7122:
          v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          v23 = 140082800;
LABEL_22:
          v14 = (GameFrameWork *)v13;
          v15 = TextData2::Get(v23);
          GameFrameWork::AddSysMsg(v14, v15);
          break;
        default:
          break;
      }
    }
    else
    {
      if ( v7 == 6352 )
      {
        v9 = TextData2::Get(0x6ECEA7F9u);
LABEL_11:
        v10 = fs(v9);
        MsgBox::Modeless(MSGBOX_OK, v10);
      }
      else
      {
        switch ( v7 )
        {
          case 3280:
          case 3281:
          case 3283:
            v22 = 2111682039;
            goto LABEL_8;
          case 3282:
            v21 = 705954356;
            goto LABEL_10;
          case 3284:
            v22 = -993400289;
LABEL_8:
            v8 = TextData::Get(v22);
            MsgBox::Modeless(MSGBOX_OK, v8);
            break;
          case 3285:
            v21 = -1111769578;
LABEL_10:
            v9 = TextData::Get(v21);
            goto LABEL_11;
          case 3286:
            v9 = TextData::Get(0xB1DBBE52u);
            goto LABEL_11;
          default:
            break;
        }
      }
    }
    v16 = (MHDiceGameTask **)MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&iDepart);
    v17 = MHDiceGameTask::IsDicegamePlaying(*v16);
    if ( iDepart )
    {
      v18 = iDepart;
      if ( !InterlockedDecrement((volatile LONG *)(iDepart + 4)) )
      {
        if ( v18 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
      }
    }
    if ( v17 )
    {
      v19 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v20 = TextData::Get(0xB1DBBE52u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v19, v20);
      result = iRevBytes != 0;
    }
    else
    {
      v5->baseclass_0.baseclass_0.m_eTaskState = 2;
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0049DB00) --------------------------------------------------------
GuildJoinReqTask *__cdecl ISingletonTask<GuildJoinReqTask>::Run()
{
  GuildJoinReqTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildJoinReqTask *)ISingletonTask<GuildJoinReqTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildJoinReqTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x58u);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildJoinReqTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildJoinReqTask::_vftable_;
      *(_BYTE *)(v2 + 68) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildJoinReqTask *)v2;
    ISingletonTask<GuildJoinReqTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 98BFF8: using guessed type int (__stdcall *GuildJoinReqTask___vftable_)(int uiFlags);
// 98C014: using guessed type int (__thiscall *GuildJoinReqTask___vftable_)(void *p, char);
// A98748: using guessed type int ISingletonTask_GuildJoinReqTask___ms_pkSingletonTask;

//----- (0049DB80) --------------------------------------------------------
void __thiscall ScriptBtn::ScriptBtn(ScriptBtn *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText, bool bAutoScale, NiExtraData *pkType, NiExtraData *pkAction, NiExtraData *pkNextAction)
{
  ScriptBtn *v6; // esi@1
  bool v7; // cf@1
  NiExtraData *v8; // edx@1
  NiExtraData *v9; // eax@1
  NiExtraData *v10; // ecx@1

  v6 = this;
  this->m_kText.baseclass_0._Mysize = 0;
  this->m_kText.baseclass_0._Myres = 15;
  this->m_kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this->m_kText, &kText, 0, 0xFFFFFFFFu);
  v7 = kText.baseclass_0._Myres < 0x10;
  v8 = pkType;
  v9 = pkAction;
  v6->m_bAutoScale = bAutoScale;
  v10 = pkNextAction;
  v6->m_pkType = v8;
  v6->m_pkAction = v9;
  v6->m_pkNextAction = v10;
  if ( !v7 )
    operator delete(*(void **)&kText);
}

//----- (0049DC00) --------------------------------------------------------
void __thiscall std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>(std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > *this, std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > *_Right)
{
  std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > *v2; // edi@1
  signed int v3; // esi@1
  unsigned int v4; // esi@1
  NiColorA *v5; // eax@4
  std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > v6; // ecx@4
  std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > v7; // ST00_4@4
  int v8; // [sp-10h] [bp-24h]@1
  std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *thisa; // [sp+0h] [bp-14h]@1
  int *v10; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@4

  v10 = &v8;
  v2 = this;
  thisa = (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)this;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  v3 = (signed int)((char *)_Right->baseclass_0._Mylast - *(_DWORD *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = v3 >> 4;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  if ( v4 )
  {
    if ( v4 > 0xFFFFFFF )
      std::_Xlength_error("vector<T> too long");
    v5 = std::allocator<NiColorA>::allocate((std::allocator<NiColorA> *)&this->baseclass_0._Alval, v4);
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v5;
    v2->baseclass_0._Mylast = (CollectWin::sRewardInfo *)v5;
    v2->baseclass_0._Myend = (CollectWin::sRewardInfo *)&v5[v4];
    v6 = (std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > >)_Right->baseclass_0._Mylast;
    v7 = *(std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > > *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
    v11 = 0;
    v2->baseclass_0._Mylast = std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>>_CollectWin::sRewardInfo___std::allocator<CollectWin::sRewardInfo>>(
                                v7,
                                v6,
                                (CollectWin::sRewardInfo *)v5,
                                &v2->baseclass_0._Alval,
                                (std::_Nonscalar_ptr_iterator_tag)_Right);
  }
}

//----- (0049DCD0) --------------------------------------------------------
int *__thiscall std::map<int_mhObject___std::less<int>_std::allocator<std::pair<int_const_mhObject__>>>::operator__(std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *this, const int *_Keyval)
{
  std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > v5; // edi@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v6; // eax@8
  int *result; // eax@8
  std::pair<int const ,int> _Val; // [sp+8h] [bp-8h]@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= *(_DWORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (int *)(*(_DWORD *)&v5 + 16);
  }
  else
  {
    _Val.baseclass_0.first = *_Keyval;
    _Val.baseclass_0.second = 0;
    v6 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           &v2->baseclass_0.baseclass_0,
           &_Val);
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Keyval,
      v5,
      v6);
    result = _Keyval + 4;
  }
  return result;
}

//----- (0049DD50) --------------------------------------------------------
void __thiscall mhInfoWin::SetTitle(mhInfoWin *this, char *pcStr, bool bPageUpdate)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  bool v4; // cf@1
  char *v5; // eax@2
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@6
  unsigned int v7; // [sp-10h] [bp-40h]@1
  mhInfoWin *v8; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4h] [bp-2Ch]@4
  unsigned int v10; // [sp+20h] [bp-10h]@1
  int v11; // [sp+2Ch] [bp-4h]@4
  int v12; // [sp+30h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v7 = (unsigned int)&v12 ^ __security_cookie;
  v3 = &this->m_FullTitleName;
  v4 = this->m_FullTitleName.baseclass_0._Myres < 0x10;
  v8 = this;
  this->m_FullTitleName.baseclass_0._Mysize = 0;
  if ( v4 )
    v5 = (char *)&this->m_FullTitleName;
  else
    v5 = *(char **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
  *v5 = 0;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcStr, strlen(pcStr));
  v11 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v3, &thisa);
  v11 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v6 = v8->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  ((void (__stdcall *)(char *, unsigned int))v6)(pcStr, v7);
  if ( bPageUpdate )
    mhInfoWin::RefreshInfoPage(v8);
}
// A85C00: using guessed type int __security_cookie;

//----- (0049DE70) --------------------------------------------------------
int __usercall mktime_0<eax>(tm *_Tm<eax>)
{
  return _mktime32(_Tm);
}

//----- (0049DE80) --------------------------------------------------------
void __thiscall GameFrameWork::RemoveItemFromString(GameFrameWork *this, char *s, const char *toRemove)
{
  char *v3; // eax@1
  char *v4; // esi@1
  unsigned int v5; // kr00_4@2
  int v6; // eax@2
  char v7; // cl@3
  int v8; // edx@4
  const char *v9; // eax@4
  char v10; // cl@5
  char *v11; // eax@6

  strstr(s, (char *)toRemove);
  v4 = v3;
  if ( v3 )
  {
    do
    {
      v5 = strlen(toRemove);
      v6 = (int)&v4[v5];
      do
        v7 = *(_BYTE *)v6++;
      while ( v7 );
      v8 = v6 - (_DWORD)&v4[v5 + 1];
      v9 = toRemove;
      do
        v10 = *v9++;
      while ( v10 );
      memmove(v4, &v4[v9 - (toRemove + 1)], v8 + 1);
      strstr(v4, (char *)toRemove);
      v4 = v11;
    }
    while ( v11 );
  }
}

//----- (0049DEF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_BUYREFRESH_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@2

  if ( *(_WORD *)((char *)pvData + 1) )
  {
    PrivateStoreInvWin::SetLotText(
      this->m_pkPrivateStoreWin->m_apkInvWin[*(_BYTE *)pvData],
      *(_WORD *)((char *)pvData + 1));
    result = iRevBytes;
  }
  else
  {
    ItemIcon::SetItem(&this->m_pkPrivateStoreWin->m_apkInvWin[*(_BYTE *)pvData]->baseclass_0, 0, 1);
    result = iRevBytes;
  }
  return result;
}

//----- (0049DF40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_INTERIORSTART_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PrivateStoreWin::SetPrivateStoreOpen(this->m_pkPrivateStoreWin, 0);
  return iRevBytes;
}

//----- (0049DF60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_CLOSE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  if ( *(_WORD *)pvData == 2625 )
  {
    PrivateStoreWin::SetPrivateStoreOpen(this->m_pkPrivateStoreWin, 0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::ChangeCampMode(v3, 0, 4);
    KingdomQuestWin::CheckButtonEnableSetting(v3->m_pkKingDomQuest);
  }
  return iRevBytes;
}

//----- (0049DFB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CT_SET_SOMEONECHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  const char *v5; // eax@6
  char v7; // [sp-8h] [bp-10h]@3
  char v8; // [sp-4h] [bp-Ch]@3

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 )
  {
    v3->m_uiCurrCharTitleType = *((_BYTE *)pvData + 2);
    if ( !*((_BYTE *)pvData + 2) )
    {
      Char::SetCharTitleUse(v3, 0);
      v8 = 0;
      v7 = *((_BYTE *)pvData + 2);
LABEL_6:
      v5 = CCharacterTitleData::GetTitleString(&g_characterTitleData, v7, v8);
      Char::SetCharTitleName(v4, v5);
      return iRevBytes;
    }
    if ( *((_BYTE *)pvData + 2) != 10 )
    {
      Char::SetCharTitleUse(v3, 1);
      v8 = *((_BYTE *)pvData + 3);
      v7 = *((_BYTE *)pvData + 2);
      goto LABEL_6;
    }
  }
  return iRevBytes;
}

//----- (0049E030) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_PINGTEST_CLIENT_ZONE_DB(GameFrameWork *this, int iRevBytes, void *pvData)
{
  *((_DWORD *)pvData + 2) = timeGetTime();
  return iRevBytes;
}

//----- (0049E050) --------------------------------------------------------
int __thiscall GameFrameWork::On_MISC_RESTMINUTE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KQuestTimeWin *v3; // ecx@2

  if ( *(_BYTE *)pvData == 1 )
  {
    v3 = this->m_pkKQuestTimeWin;
    if ( v3 )
      KQuestTimeWin::ResetTime(v3, *(_WORD *)((char *)pvData + 1));
  }
  return iRevBytes;
}

//----- (0049E080) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CENCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  User::SetMoney(&g_kUser, *(_QWORD *)pvData);
  return iRevBytes;
}

//----- (0049E0A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_BASEPARAMCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  User::ChangeParam(&g_kUser, (PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *)pvData);
  return iRevBytes;
}

//----- (0049E0C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CHANGEPARAMCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  StatusWin *v4; // ecx@1

  v3 = this;
  User::ChangeChangeParam(&g_kUser, (PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *)pvData);
  v4 = v3->m_pkStatusWin;
  if ( v4 )
    StatusWin::UpdateBars(v4);
  return iRevBytes;
}

//----- (0049E0F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  signed int v4; // esi@1
  PROTO_CHARGEDBUFF_INFO *v5; // edi@2
  GameFrameWork *v7; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v7 = this;
  ChargedItemList::Clear();
  v4 = 0;
  if ( *(_WORD *)pvData > 0u )
  {
    v5 = (PROTO_CHARGEDBUFF_INFO *)((char *)pvData + 2);
    do
    {
      ChargedItemList::AddUsingItem(v5);
      ++v4;
      ++v5;
    }
    while ( v4 < *(_WORD *)pvData );
    v3 = v7;
  }
  ChargedItemListWin::Refresh(v3->m_pkChargedItemListWin);
  v3->m_pkStatusChargedBuffWin->m_fLastUpdatedTime = 0.0;
  return iRevBytes;
}

//----- (0049E150) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_FAMECHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  User::GetMainCharBaseData(&g_kUser)->fame = *(_DWORD *)pvData;
  return iRevBytes;
}

//----- (0049E170) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_ITEMONFIELD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // esi@1
  PROTO_NC_BRIEFINFO_DROPEDITEM_CMD *v4; // edi@2

  v3 = 0;
  if ( *(_BYTE *)pvData )
  {
    v4 = (PROTO_NC_BRIEFINFO_DROPEDITEM_CMD *)((char *)pvData + 1);
    do
    {
      DropItemMgr::Add(&g_kDropItemMgr, v4);
      ++v3;
      ++v4;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (0049E1B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_DROPEDITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1
  void *v4; // eax@1
  Char *v5; // eax@3

  v3 = (PgFrameWork *)this;
  v4 = operator new(0x20u);
  if ( v4 )
    CharDeadEvent_DropItem::CharDeadEvent_DropItem(
      (CharDeadEvent_DropItem *)v4,
      v3,
      (PROTO_NC_BRIEFINFO_DROPEDITEM_CMD *)pvData);
  v5 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 6));
  if ( v5 && (unsigned __int8)((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[1].Affect)(v5) )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v3, BIL_ITEM_1);
  return iRevBytes;
}

//----- (0049E250) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_BUILDING_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CMiniHouseMgr::AddInfo(
    (CMiniHouseMgr *)&g_kMiniHouseMgr,
    (PROTO_NC_BRIEFINFO_MINIHOUSEBUILD_CMD *)((char *)pvData + 2));
  return iRevBytes;
}

//----- (0049E270) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MINIHOUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int8 v3; // bl@1

  v3 = 0;
  if ( *(_BYTE *)pvData )
  {
    do
      CMiniHouseMgr::AddInfo(
        (CMiniHouseMgr *)&g_kMiniHouseMgr,
        (PROTO_NC_BRIEFINFO_MINIHOUSEBUILD_CMD *)((char *)pvData + 64 * v3++ + 1));
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (0049E2B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MINIHOUSEBUILD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CMiniHouseMgr::AddInfo((CMiniHouseMgr *)&g_kMiniHouseMgr, (PROTO_NC_BRIEFINFO_MINIHOUSEBUILD_CMD *)pvData);
  return iRevBytes;
}

//----- (0049E2D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EFFECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  __int16 v4; // ax@1
  char *v5; // eax@5

  v3 = this;
  v4 = *((_WORD *)pvData + 1);
  if ( v4 != 5824 )
  {
    if ( v4 != 5831 && v4 != 5832 && v4 != 5839 )
    {
      v5 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 1));
      GameFrameWork::AddSysMsg(v3, v5);
      return iRevBytes;
    }
    MiniHouseIndoor::ObjEffErrMsg(&g_kWorld.m_MiniHouseIndoorMode, *(_WORD *)pvData, *((_WORD *)pvData + 1));
  }
  return iRevBytes;
}

//----- (0049E340) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MAGICFIELDINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // esi@1
  PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *v4; // edi@2

  v3 = 0;
  if ( *(_BYTE *)pvData )
  {
    v4 = (PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *)((char *)pvData + 1);
    do
    {
      MagicField::AddMagicField(v4, &NiPoint3::UNIT_Y, 0);
      ++v3;
      ++v4;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (0049E390) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEWALK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049E3A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONERUN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049E3B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_MOVEFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  float v3; // ST08_4@1
  float v4; // ST04_4@1
  float v5; // ST04_4@2
  float v6; // ST00_4@2

  v4 = (double)*(unsigned int *)pvData;
  v3 = (double)*((unsigned int *)pvData + 1);
  if ( !MainChar::PositionSinkTest((MainChar *)g_pkMainChar, v4, v3) )
  {
    v6 = (double)*(unsigned int *)pvData;
    v5 = (double)*((unsigned int *)pvData + 1);
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[7].IsVisible)(
      LODWORD(v6),
      LODWORD(v5),
      0);
  }
  return iRevBytes;
}

//----- (0049E430) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONESTOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  float v5; // ST04_4@5
  float v6; // ST00_4@5

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 8, 19);
  v4 = v3;
  if ( v3 )
  {
    if ( (unsigned int)((int)v3->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v3) - 1) <= 2 )
      ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v4);
    if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[10].Affect)(v4) )
    {
      v6 = (double)*(unsigned int *)((char *)pvData + 2);
      v5 = (double)*(unsigned int *)((char *)pvData + 6);
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[7].IsVisible)(
        v4,
        LODWORD(v6),
        LODWORD(v5),
        0);
    }
  }
  return iRevBytes;
}

//----- (0049E4C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_CREATECASTBAR(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  KeyboardMoveProcess::SetAutoRun(&this->m_kCharMover, 0);
  GameFrameWork::Stick(v3, 0, 0);
  CastingProgressWin::StartCasting(v3->m_pkCastingProgressBar, *(_WORD *)pvData, 1);
  return iRevBytes;
}

//----- (0049E500) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_CANCELCASTBAR(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CastingProgressWin::CastingFail(this->m_pkCastingProgressBar);
  return iRevBytes;
}

//----- (0049E520) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_WHISPERSUCCESS_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // ebx@3
  SHINE_ITEM_STRUCT *v4; // edi@4
  int v5; // eax@6
  int v6; // edx@6
  _BYTE v7[20]; // ST00_20@6
  GameFrameWork *thisa; // [sp+Ch] [bp-8Ch]@1
  char acStr[129]; // [sp+10h] [bp-88h]@6
  unsigned int v11; // [sp+94h] [bp-4h]@1
  int v12; // [sp+98h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  thisa = this;
  if ( *((_BYTE *)pvData + 21) > 0x80u )
    *((_BYTE *)pvData + 21) = -128;
  v3 = *(_BYTE *)pvData;
  if ( v3 > 0 )
  {
    v4 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 21) + 22);
    do
    {
      GameFrameWork::AddSChatItemLink(thisa, 8, v4);
      ++v4;
      --v3;
    }
    while ( v3 );
  }
  strncpy(acStr, (char *)pvData + 22, *((_BYTE *)pvData + 21));
  v5 = *(_DWORD *)((char *)pvData + 17);
  v6 = *(_DWORD *)((char *)pvData + 1);
  acStr[*((_BYTE *)pvData + 21)] = 0;
  *(_DWORD *)v7 = v6;
  *(_DWORD *)&v7[4] = *(_DWORD *)((char *)pvData + 5);
  *(_QWORD *)&v7[8] = *(_QWORD *)((char *)pvData + 9);
  *(_DWORD *)&v7[16] = v5;
  GameFrameWork::AddWhisperChat_To(thisa, *(Name5 *)v7, acStr);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0049E5F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEEONEJUMP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
    ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].Deaffect)(v3);
  return iRevBytes;
}

//----- (0049E620) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONESPEEDCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049E630) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEFOLDTENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 )
  {
    v3->baseclass_0.vfptr[2].Affect((AbStateInfectee *)v3, 0, (bool)((char *)pvData + 2));
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[1].SetAbStateProperty)(v4, 0, 4);
  }
  return iRevBytes;
}

//----- (0049E680) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEPITCHTENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  void (__thiscall *v5)(AbStateInfectee *, ABSTATEINDEX, bool, int); // eax@2

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 )
  {
    ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(v3, 1);
    v5 = v4->baseclass_0.vfptr[1].SetAbStateProperty;
    v4->m_byMiniHouseSkinID = *((_WORD *)pvData + 1);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v5)(v4, 1, 4);
  }
  return iRevBytes;
}

//----- (0049E6D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_FOLDTENT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_WORD *)pvData == 2689 )
    GameFrameWork::ChangeCampMode(this, 0, 4);
  return iRevBytes;
}

//----- (0049E6F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_FOLDTENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork::ChangeCampMode(this, 0, 4);
  return iRevBytes;
}

//----- (0049E710) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_MOVESPEED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  float v3; // ST04_4@1
  float v4; // ST04_4@1

  v3 = (double)*(_WORD *)pvData;
  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[8].Deaffect)(LODWORD(v3));
  v4 = (double)*((_WORD *)pvData + 1);
  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[8].SetAbStateProperty)(LODWORD(v4));
  return iRevBytes;
}

//----- (0049E760) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_RIDE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049E790) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_STOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  float v3; // ST14_4@1
  float v4; // ST10_4@1
  char *v5; // eax@1

  v4 = (double)*(unsigned int *)pvData;
  v3 = (double)*((unsigned int *)pvData + 1);
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[7].IsVisible)(
    LODWORD(v4),
    LODWORD(v3),
    0);
  v5 = fs("g_PKMAINCHAR_On_NC_ACT_REINFORCE_STOP_CMD : %f,  %f\n");
  OutputDebugStringA(v5);
  return iRevBytes;
}

//----- (0049E820) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_EXPGAIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1
  void *v4; // eax@1

  v3 = (PgFrameWork *)this;
  v4 = operator new(0x18u);
  if ( v4 )
    CharDeadEvent_ExpGain::CharDeadEvent_ExpGain((CharDeadEvent_ExpGain *)v4, v3, (PROTO_NC_BAT_EXPGAIN_CMD *)pvData);
  return iRevBytes;
}

//----- (0049E880) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_HPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // esi@1
  int v5; // eax@1
  StatusWin *v6; // ecx@4

  v3 = this;
  v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)();
  Char::HpUpdate(g_pkMainChar, *((_WORD *)pvData + 2), *(_DWORD *)pvData);
  v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)();
  User::SetHP(&g_kUser, v5);
  if ( !((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)() && v4 )
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[20].Deaffect)();
  v6 = v3->m_pkStatusWin;
  if ( v6 )
    StatusWin::UpdateBars(v6);
  return iRevBytes;
}

//----- (0049E910) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  StatusWin *v4; // ecx@1

  v3 = this;
  User::SetSP(&g_kUser, *(_DWORD *)pvData);
  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[4].IsVisible)(*(_DWORD *)pvData);
  v4 = v3->m_pkStatusWin;
  if ( v4 )
    StatusWin::UpdateBars(v4);
  return iRevBytes;
}

//----- (0049E960) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_APCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  User::SetAP(&g_kUser, *(_DWORD *)pvData);
  return iRevBytes;
}

//----- (0049E980) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_ASSIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  Char *v4; // eax@1

  v3 = this;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v4 )
    GameFrameWork::OnOnePickChar(v3, v4);
  return iRevBytes;
}

//----- (0049E9B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_TARGETCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@2
  Char *v5; // eax@3

  v3 = this;
  if ( -1 == *(_WORD *)pvData )
  {
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
    result = iRevBytes;
  }
  else
  {
    v5 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
    if ( v5 )
      GameFrameWork::OnPickChar(v3, v5);
    result = iRevBytes;
  }
  return result;
}

//----- (0049EA00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_CAST_SUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  this->m_kSkillCasting.eState = 3;
  return iRevBytes;
}

//----- (0049EA20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_CAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Char *v4; // esi@1
  Char *v5; // eax@1

  v3 = this;
  v4 = GameFrameWork::GetCharByHandle(this, *((_WORD *)pvData + 1), 9, 54);
  v5 = GameFrameWork::GetCharByHandle(v3, *((_WORD *)pvData + 2), 9, 54);
  if ( v4 && v4 != g_pkMainChar )
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[9].GetAbstateColor)(
      v4,
      v5,
      1,
      *(_WORD *)pvData);
    ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[16].__vecDelDtor)(v4);
  }
  return iRevBytes;
}

//----- (0049EA80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_CASTCUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  Char *v4; // eax@1
  Char *v5; // edi@1
  GameFrameWork::SkillCastState v6; // eax@5
  CastingProgressWin *v7; // ecx@7

  v3 = this;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v5 = v4;
  if ( v4 )
  {
    if ( Char::IsDuringSkillCasting(v4) )
      Char::CancelSkillAction(v5, 1);
    if ( v5 == g_pkMainChar )
    {
      v6 = v3->m_kSkillCasting.eState;
      if ( v6 == 2 || v6 == 3 )
      {
        v7 = v3->m_pkCastingProgressBar;
        v3->m_kSkillCasting.eState = 0;
        CastingProgressWin::CastingFail(v7);
        AttackSequenceManager::ApplicateSkillSeqImmediately(&g_pkMainChar->baseclass_54, g_pkMainChar, 1, 0);
        Char::CancelSkillAction(g_pkMainChar, 0);
        ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
        OutputDebugStringA("On_NC_BAT_SOMEONESKILLBASH_CASTCUT_CMD\n");
      }
    }
  }
  return iRevBytes;
}

//----- (0049EB30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_OBJ_CAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Char *v4; // esi@1
  Char *v5; // eax@1

  v3 = this;
  v4 = GameFrameWork::GetCharByHandle(this, *((_WORD *)pvData + 1), 9, 66);
  v5 = GameFrameWork::GetCharByHandle(v3, *((_WORD *)pvData + 2), 9, 66);
  if ( v4 && v4 != g_pkMainChar && v5 )
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[9].GetAbstateColor)(
      v4,
      v5,
      1,
      *(_WORD *)pvData);
    ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[16].__vecDelDtor)(v4);
  }
  return iRevBytes;
}

//----- (0049EBA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_FLD_CAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1

  v3 = GameFrameWork::GetCharByHandle(this, *((_WORD *)pvData + 1), 9, 67);
  v4 = v3;
  if ( v3 && v3 != g_pkMainChar )
  {
    Char::SetSkillTargetGroundPoint(v3, *((_DWORD *)pvData + 1), *((_DWORD *)pvData + 2), 1);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[9].DeleteAbStateByAbstateIndex)(
      v4,
      *((_DWORD *)pvData + 1),
      *((_DWORD *)pvData + 2),
      1,
      *(_WORD *)pvData);
    ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[16].__vecDelDtor)(v4);
  }
  return iRevBytes;
}

//----- (0049EC10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_CASTABORT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  this->m_kSkillCasting.bWaitingForServerCancel = 0;
  OutputDebugStringA("On_NC_BAT_SKILLBASH_CASTABORT_ACK\n");
  AttackSequenceManager::ApplicateSkillSeqImmediately(&g_pkMainChar->baseclass_54, g_pkMainChar, 1, 0);
  Char::CancelSkillAction(g_pkMainChar, 0);
  return iRevBytes;
}

//----- (0049EC50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_FAMEGAIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PROTO_NC_CHAR_BASE_CMD *v3; // eax@2

  if ( User::GetMainCharBaseData(&g_kUser) )
  {
    v3 = User::GetMainCharBaseData(&g_kUser);
    v3->fame += *(_DWORD *)pvData;
  }
  return iRevBytes;
}

//----- (0049EC80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_PICKOTHER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  g_kInventory.m_bWaitingItemDropAck = 0;
  return iRevBytes;
}

//----- (0049ECA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  ItemUpgradeWin *v3; // ecx@1

  v3 = this->m_pkItemUpgradeWin;
  if ( v3 )
    ItemUpgradeWin::UpGradeResult(v3, *(_WORD *)pvData);
  return iRevBytes;
}

//----- (0049ECC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_LOGININFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Party::MemberLogin(&g_kParty, (PROTO_NC_PARTY_LOGININFO_CMD *)pvData);
  return iRevBytes;
}

//----- (0049ECE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_LOGOUTINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Party::MemberLogout(&g_kParty, (PROTO_NC_PARTY_LOGOUTINFO_CMD *)pvData);
  return iRevBytes;
}

//----- (0049ED00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERCLASS_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // edi@1
  GameFrameWork *v4; // ebx@1
  char *v5; // esi@2
  _BYTE v6[20]; // ST00_20@3
  PartyMemberInfo *v7; // eax@3
  PartyWinInterface *v8; // ecx@4

  v3 = 0;
  v4 = this;
  if ( *(_BYTE *)pvData )
  {
    v5 = (char *)pvData + 22;
    do
    {
      *(_DWORD *)v6 = *(_DWORD *)(v5 - 21);
      *(_DWORD *)&v6[4] = *(_DWORD *)(v5 - 17);
      *(_DWORD *)&v6[8] = *(_DWORD *)(v5 - 13);
      *(_DWORD *)&v6[12] = *(_DWORD *)(v5 - 9);
      *(_DWORD *)&v6[16] = *(_DWORD *)(v5 - 5);
      v7 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v6);
      if ( v7 )
      {
        v7->m_iLv = (unsigned __int8)*v5;
        v7->m_iMaxHP = *(_DWORD *)(v5 + 1);
        v7->m_iMaxSP = *(_DWORD *)(v5 + 5);
        v7->m_byInform = v5[13];
        v7->m_byChrClass = *(v5 - 1);
        v7->m_bShow = 1;
        v7->m_iMaxLP = *(_DWORD *)(v5 + 9);
        v8 = v4->m_pkPartyWinInterface;
        if ( v8 )
          PartyWinInterface::Update(v8);
      }
      ++v3;
      v5 += 35;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (0049EDA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERLOCATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // edi@1
  char *v4; // esi@2
  _BYTE v5[20]; // ST00_20@3
  PartyMemberInfo *v6; // eax@3

  v3 = 0;
  if ( *(_BYTE *)pvData )
  {
    v4 = (char *)pvData + 21;
    do
    {
      *(_DWORD *)v5 = *((_DWORD *)v4 - 5);
      *(_DWORD *)&v5[4] = *((_DWORD *)v4 - 4);
      *(_DWORD *)&v5[8] = *((_DWORD *)v4 - 3);
      *(_DWORD *)&v5[12] = *((_DWORD *)v4 - 2);
      *(_DWORD *)&v5[16] = *((_DWORD *)v4 - 1);
      v6 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v5);
      if ( v6 )
      {
        v6->m_fX = (double)*(unsigned int *)v4;
        v6->m_fY = (double)*((unsigned int *)v4 + 1);
        v6->m_bShow = 1;
      }
      ++v3;
      v4 += 28;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (0049EE20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERMAPOUT(GameFrameWork *this, int iRevBytes, void *pvData)
{
  _BYTE v3[20]; // ST00_20@1
  PartyMemberInfo *v4; // eax@1

  *(_DWORD *)v3 = *(_DWORD *)pvData;
  *(_QWORD *)&v3[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v3[12] = *(_QWORD *)((char *)pvData + 12);
  v4 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v3);
  if ( v4 )
    v4->m_bShow = 0;
  return iRevBytes;
}

//----- (0049EE60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_LIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  int v4; // edi@3
  int result; // eax@5

  v3 = this;
  if ( PgWin::IsVisible(&this->m_pkPMWin->baseclass_0.baseclass_0.baseclass_0) )
  {
    CPartyMatchWin::ClearList(v3->m_pkPMWin);
    if ( CPartyMatchWin::SetListBriefInfo(
           v3->m_pkPMWin,
           *(_WORD *)pvData,
           *((_WORD *)pvData + 2),
           *((_BYTE *)pvData + 3) != 0) )
    {
      v4 = 0;
      if ( *((_WORD *)pvData + 3) > 0u )
      {
        do
          CPartyMatchWin::AddPartyInfo(
            v3->m_pkPMWin,
            (PROTO_NC_PARTY_FINDER_INFO *)((char *)pvData + 154 * (unsigned __int16)v4++ + 8));
        while ( (unsigned __int16)v4 < *((_WORD *)pvData + 3) );
      }
      CPartyMatchWin::UpdateList(v3->m_pkPMWin);
      result = iRevBytes;
    }
    else
    {
      result = iRevBytes;
    }
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}

//----- (0049EF10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_DELETE_YOUR_MSG_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049EF20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENWEAPON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  Market::SetWeapon((PROTO_NC_MENU_SHOPOPEN_CMD *)pvData);
  GameFrameWork::OpenShopMenu(v3);
  return iRevBytes;
}

//----- (0049EF50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENSKILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  Market::SetSkill((PROTO_NC_MENU_SHOPOPEN_CMD *)pvData);
  GameFrameWork::OpenSkillShopMenu(v3);
  return iRevBytes;
}

//----- (0049EF80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENTABLE_WEAPON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  Market::SetWeapon((PROTO_NC_MENU_SHOPOPENTABLE_CMD *)pvData);
  GameFrameWork::OpenShopMenu(v3);
  return iRevBytes;
}

//----- (0049EFB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENTABLE_SKILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  Market::SetSkill((PROTO_NC_MENU_SHOPOPENTABLE_CMD *)pvData);
  GameFrameWork::OpenSkillShopMenu(v3);
  return iRevBytes;
}

//----- (0049EFE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENSOULSTONE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  Market::SetSoulStone((PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD *)pvData);
  GameFrameWork::OpenSoulStoneShopMenu(v3);
  return iRevBytes;
}

//----- (0049F010) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F020) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SERVERMENU_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  ServerMenuWin::SetServerMenu(this->m_pkServerMenuWin, (PROTO_NC_MENU_SERVERMENU_REQ *)pvData);
  ServerMenuWin::SetPriority(v3->m_pkServerMenuWin, *((_BYTE *)pvData + 128));
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkServerMenuWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}

//----- (0049F070) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_OPENSTORAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  this->m_eOpenType = *((_BYTE *)pvData + 10);
  if ( Bank::SetContents((PROTO_NC_MENU_OPENSTORAGE_CMD *)pvData) == 1 )
    GameFrameWork::OpenStorageMenu(v3, *((_BYTE *)pvData + 9));
  return iRevBytes;
}

//----- (0049F0B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_COOLTIME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  float v3; // ST04_4@1

  v3 = (double)*(unsigned int *)((char *)pvData + 2);
  Skill::SetLastCoolTime(*(_WORD *)pvData, v3);
  return iRevBytes;
}

//----- (0049F0E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITUPBOARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  Item *v4; // eax@1

  v3 = pvData;
  v4 = Item::Create((char *)pvData + 1, (unsigned int *)&pvData);
  if ( v4 )
    UserTrade::AddOpp(v4, *(_BYTE *)v3);
  return iRevBytes;
}

//----- (0049F110) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITDOWNBOARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  UserTrade::RemoveOpp(*(_BYTE *)pvData);
  return iRevBytes;
}

//----- (0049F130) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_CENBOARDING_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F140) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITCENBOARDING_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  UserTradeWin::SetOtherMoney(this->m_pkUserTradeWin, *(_QWORD *)pvData);
  return iRevBytes;
}

//----- (0049F160) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_BOARDLOCK_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  UserTrade::LockMy(1);
  return iRevBytes;
}

//----- (0049F180) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITBOARDLOCK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  UserTrade::LockOpp(1);
  return iRevBytes;
}

//----- (0049F1A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_DECIDE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F1B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITDECIDE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  UserTrade::AgreeOpp(1);
  return iRevBytes;
}

//----- (0049F1D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_BOARDUNLOCK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  UserTrade::LockMy(0);
  UserTradeWin::UnlockMyLock(v3->m_pkUserTradeWin);
  return iRevBytes;
}

//----- (0049F200) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_OPPOSITBOARDUNLOCK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  UserTrade::LockOpp(0);
  return iRevBytes;
}

//----- (0049F220) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // ebx@1
  GameFrameWork *v4; // edi@1
  PROTO_FRIEND_INFO *v5; // esi@1

  v3 = *(_BYTE *)pvData;
  v4 = this;
  v5 = (PROTO_FRIEND_INFO *)((char *)pvData + 1);
  FriendWin::ClearFriendList(this->m_pkFriendWin);
  FriendCallWin::ClearFriendList(v4->m_pkFriendCallWin);
  if ( v3 > 0 )
  {
    do
    {
      FriendWin::AddFriend(v4->m_pkFriendWin, v5, 1);
      FriendCallWin::AddFriend(v4->m_pkFriendCallWin, v5, 1);
      ++v5;
      --v3;
    }
    while ( v3 );
  }
  return iRevBytes;
}

//----- (0049F280) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_ADD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  FriendWin::AddFriend(this->m_pkFriendWin, (PROTO_FRIEND_INFO *)pvData, 0);
  FriendCallWin::AddFriend(v3->m_pkFriendCallWin, (PROTO_FRIEND_INFO *)pvData, 0);
  return iRevBytes;
}

//----- (0049F2B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_MAP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[12]; // ST14_12@1
  _BYTE v5[20]; // ST00_20@1
  _BYTE v6[12]; // ST14_12@1
  _BYTE v7[20]; // ST00_20@1

  v3 = this;
  *(_DWORD *)v4 = *((_DWORD *)pvData + 5);
  *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 3);
  *(_DWORD *)v5 = *(_DWORD *)pvData;
  *(_QWORD *)&v5[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v5[12] = *(_QWORD *)((char *)pvData + 12);
  FriendWin::ChangeMapFriend(this->m_pkFriendWin, *(Name5 *)v5, *(Name3 *)v4);
  *(_DWORD *)v6 = *((_DWORD *)pvData + 5);
  *(_QWORD *)&v6[4] = *((_QWORD *)pvData + 3);
  *(_DWORD *)v7 = *(_DWORD *)pvData;
  *(_QWORD *)&v7[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v7[12] = *(_QWORD *)((char *)pvData + 12);
  FriendCallWin::ChangeMapFriend(v3->m_pkFriendCallWin, *(Name5 *)v7, *(Name3 *)v6);
  return iRevBytes;
}

//----- (0049F350) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_PARTY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  _BYTE v5[20]; // ST00_20@1

  v3 = this;
  *(_DWORD *)v4 = *(_DWORD *)pvData;
  *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 12);
  FriendWin::PartyFriend(this->m_pkFriendWin, *(Name5 *)v4, *((_BYTE *)pvData + 20) != 0);
  *(_DWORD *)v5 = *(_DWORD *)pvData;
  *(_QWORD *)&v5[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v5[12] = *(_QWORD *)((char *)pvData + 12);
  FriendCallWin::PartyFriend(v3->m_pkFriendCallWin, *(Name5 *)v5, *((_BYTE *)pvData + 20) != 0);
  return iRevBytes;
}

//----- (0049F3E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_LEVEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  _BYTE v5[20]; // ST00_20@1

  v3 = this;
  *(_DWORD *)v4 = *(_DWORD *)pvData;
  *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 12);
  FriendWin::LevelChange(this->m_pkFriendWin, *(Name5 *)v4, *((_BYTE *)pvData + 20));
  *(_DWORD *)v5 = *(_DWORD *)pvData;
  *(_QWORD *)&v5[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v5[12] = *(_QWORD *)((char *)pvData + 12);
  FriendCallWin::LevelChange(v3->m_pkFriendCallWin, *(Name5 *)v5, *((_BYTE *)pvData + 20));
  return iRevBytes;
}

//----- (0049F460) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_POINT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  FriendWin *v3; // ecx@1

  v3 = this->m_pkFriendWin;
  if ( v3 )
    FriendWin::SetFriendPoint(v3, *(_WORD *)pvData);
  return iRevBytes;
}

//----- (0049F480) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_STATUS_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KingdomQuestWin::SetKQuestStatus(this->m_pkKingDomQuest, (PROTO_NC_KQ_STATUS_ACK *)pvData);
  return iRevBytes;
}

//----- (0049F4A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_LIST_TIME_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  KingdomQuestWin *v4; // ecx@1

  v3 = this;
  v4 = this->m_pkKingDomQuest;
  if ( v4 )
    KingdomQuestWin::SetServerTime(v4, (int *)pvData);
  mhRepairObjWin::SetServerTime(v3->m_pkMHRepairWin, (int *)pvData);
  return iRevBytes;
}

//----- (0049F4D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_LIST_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KingdomQuestWin *v3; // ecx@1

  v3 = this->m_pkKingDomQuest;
  if ( v3 )
    KingdomQuestWin::AddKQuest(v3, (PROTO_NC_KQ_LIST_ADD_ACK *)pvData);
  return iRevBytes;
}

//----- (0049F4F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_LIST_DELETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@1
  GameFrameWork *v4; // ebx@1

  v3 = 0;
  v4 = this;
  if ( *(_WORD *)pvData > 0u )
  {
    do
      KingdomQuestWin::DeleteKQuestInfo(
        v4->m_pkKingDomQuest,
        *(_DWORD *)((char *)pvData + 4 * (unsigned __int16)v3++ + 2));
    while ( (unsigned __int16)v3 < *(_WORD *)pvData );
  }
  KingdomQuestWin::UpdateAllList(v4->m_pkKingDomQuest);
  return iRevBytes;
}

//----- (0049F540) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_LIST_UPDATE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KingdomQuestWin *v3; // ecx@1

  v3 = this->m_pkKingDomQuest;
  if ( v3 )
    KingdomQuestWin::UpdateListState(v3, (PROTO_NC_KQ_LIST_UPDATE_ACK *)pvData);
  return iRevBytes;
}

//----- (0049F560) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_SCHEDULE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F570) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_NOTIFY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  KingdomQuestPlayerList *v4; // ecx@2
  KingdomQuestTeamList *v5; // ecx@4

  v3 = this;
  *((_BYTE *)pvData + *(_BYTE *)pvData + 1) = 0;
  if ( *(_BYTE *)pvData > 1u )
  {
    GameFrameWork::VaAddSysMsg(this, (char *)pvData + 1);
    v3->m_pkKingDomQuest->m_SelectedKQHandle = -1;
    v4 = v3->m_pkKQPlayerList;
    if ( v4 )
      KingdomQuestPlayerList::ReSetList(v4);
    v5 = v3->m_pkKQTeamList;
    if ( v5 )
      KingdomQuestTeamList::ReSetList(v5);
  }
  return iRevBytes;
}

//----- (0049F5D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F5E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_RESTDEADNUM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KQuestTimeWin *v3; // ecx@1

  v3 = this->m_pkKQuestTimeWin;
  if ( v3 )
    KQuestTimeWin::SetRestLife(v3, *(_BYTE *)pvData);
  return iRevBytes;
}

//----- (0049F600) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_ENTRYRESPONCE_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F610) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_WT_MOBINC_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Inventory::UpdateWeaponTitleWhenMobDead(&g_kInventory, *(_WORD *)pvData);
  return iRevBytes;
}

//----- (0049F630) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_ANIMATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F640) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_MESSAGENPC_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F650) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_LIGHT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int8 v3; // cl@1
  unsigned __int8 v4; // cl@3
  unsigned __int8 v5; // al@5
  NiColor kColor; // [sp+0h] [bp-18h]@7
  float fB; // [sp+Ch] [bp-Ch]@1
  float fG; // [sp+10h] [bp-8h]@1
  float fR; // [sp+14h] [bp-4h]@1

  v3 = *(_BYTE *)pvData;
  fR = 0.0;
  fG = 0.0;
  fB = 0.0;
  if ( v3 )
    fR = (double)v3 / 255.0;
  v4 = *((_BYTE *)pvData + 1);
  if ( v4 )
    fG = (double)v4 / 255.0;
  v5 = *((_BYTE *)pvData + 2);
  if ( v5 )
    fB = (double)v5 / 255.0;
  World::ClearLightFog(&g_kWorld);
  kColor.r = fR;
  kColor.g = fG;
  kColor.b = fB;
  World::SetAmbientLightAmbientColor(&g_kWorld, &kColor);
  return iRevBytes;
}

//----- (0049F6E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_PLAYERLIKEMOB_ANIMATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CharMgr::UpdateNpcActionEvent(&g_kCharMgr, (PROTO_NC_SCENARIO_PLAYERLIKEMOB_ANIMATE_CMD *)pvData);
  return iRevBytes;
}

//----- (0049F700) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_CHATWIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // ebx@1
  unsigned __int16 v5; // ST0C_2@1
  NpcDialogWin *v6; // ecx@1
  char acTemp[2048]; // [sp+Ch] [bp-804h]@1
  unsigned int v9; // [sp+80Ch] [bp-4h]@1
  int v10; // [sp+810h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  memset(acTemp, 0, 0x800u);
  v4 = *((_BYTE *)pvData + 2);
  memcpy(acTemp, (char *)pvData + 3, *((_BYTE *)pvData + 2));
  v5 = *(_WORD *)pvData;
  v6 = v3->m_pkNpcDlgWin;
  acTemp[v4] = 0;
  NpcDialogWin::OpenNpcScriptDialog(v6, v5, acTemp, 1);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (0049F790) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_CLIENT_SCENARIO_DONE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_QUEST_CLIENT_SCENARIO_DONE_ACK(v3, (PROTO_NC_QUEST_CLIENT_SCENARIO_DONE_ACK *)pvData);
  return iRevBytes;
}

//----- (0049F7B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_NOTIFY_MOB_KILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  CQuest *v4; // eax@1
  QuestFinishWin *v5; // ecx@1

  v3 = this;
  v4 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_QUEST_NOTIFY_MOB_KILL_CMD(v4, (PROTO_NC_QUEST_NOTIFY_MOB_KILL_CMD *)pvData);
  v5 = v3->m_pkQuestFinishWin;
  if ( v5 )
    QuestFinishWin::UpdateQuest(v5);
  return iRevBytes;
}

//----- (0049F7E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_SELECT_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F7F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PRISON_END_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  int v4; // eax@2
  PrisonTimeWin *v5; // ecx@4
  PrisonTimeWin *v7; // ecx@6

  v3 = *(_WORD *)pvData;
  if ( (_WORD)v3 == 3496 )
    goto LABEL_11;
  v4 = v3 - 3497;
  if ( !v4 )
  {
    v7 = this->m_pkPrisonTimeWin;
    if ( v7 )
      PrisonTimeWin::ResetTime(v7, *(_DWORD *)((char *)pvData + 2));
    return iRevBytes;
  }
  if ( v4 == 1 )
  {
LABEL_11:
    v5 = this->m_pkPrisonTimeWin;
    if ( v5 )
    {
      PrisonTimeWin::ResetTime(v5, 0);
      return iRevBytes;
    }
  }
  return iRevBytes;
}
// 49F7F0: could not find valid save-restore pair for esi

//----- (0049F860) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_INITMSG_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F890) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_REQUEST_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F8A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_REQUESTED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F8B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_NPCVIEW_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F8C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_EVENT_FRIEND_REWARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F8E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_EVENT_WORLDCUP_ENTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F8F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_ACTIV_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F900) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_BUFFTERMINATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  ChargedItemList::DelUsingItem(*(_DWORD *)pvData);
  ChargedItemListWin::Refresh(v3->m_pkChargedItemListWin);
  v3->m_pkStatusChargedBuffWin->m_fLastUpdatedTime = 0.0;
  return iRevBytes;
}

//----- (0049F940) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_DELETEWEAPONTITLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  WeaponTitleDeleteWin::SetClearItemInven(this->m_pkWeaponTitleDeleteWin, (ITEM_INVEN *)pvData);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkWeaponTitleDeleteWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}

//----- (0049F970) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_SKILLEMPOW_INITIALIZE_SUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Skill::ClearLearnActSkillInfo();
  Skill::SetRestEmpowerPoint(*(_BYTE *)pvData);
  SkillIcon::RefreshSkillInfoAll();
  return iRevBytes;
}

//----- (0049F9A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_STAT_INITIALIZE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F9B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_SKILLEMPOW_INITIALIZE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049F9C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_BOOTHSLOTSIZE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_BYTE *)pvData <= 0x14u )
    PrivateStoreWin::SetBoothSize(this->m_pkPrivateStoreWin, *(_BYTE *)pvData);
  return iRevBytes;
}

//----- (0049F9E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_ROAR_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 1792 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FA10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_REARRANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4545 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FA40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_REARRANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  NiPoint3 NewPos; // [sp+4h] [bp-Ch]@1

  v3 = *(_WORD *)((char *)pvData + 1);
  NewPos.x = *(float *)((char *)pvData + 3);
  NewPos.y = *(float *)((char *)pvData + 7);
  NewPos.z = *(float *)((char *)pvData + 11);
  MiniHouseIndoor::SetObjPos(&g_kWorld.m_MiniHouseIndoorMode, v3, &NewPos, *(float *)((char *)pvData + 15));
  return iRevBytes;
}

//----- (0049FA80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CREATE_FURNITURE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // edi@1
  char *v4; // esi@2
  char v5; // al@3
  int v6; // edx@3
  NiPoint3 ObjPos; // [sp+18h] [bp-Ch]@3

  MiniHouseIndoor::CancelPickObj(&g_kWorld.m_MiniHouseIndoorMode);
  v3 = 0;
  if ( *(_BYTE *)pvData )
  {
    v4 = (char *)pvData + 9;
    do
    {
      v5 = v4[12];
      v6 = *((_WORD *)v4 - 3);
      ObjPos.x = *((float *)v4 - 1);
      ObjPos.y = *(float *)v4;
      ObjPos.z = *((float *)v4 + 1);
      MiniHouseIndoor::AddObject(
        &g_kWorld.m_MiniHouseIndoorMode,
        *((_WORD *)v4 - 4),
        v6,
        &ObjPos,
        *((float *)v4 + 2),
        v5,
        1);
      ++v3;
      v4 += 21;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (0049FAF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_DELETE_FURNITURE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4545 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FB20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FUNITUREINFOCOMPLETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4545 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FB50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FUNICHERINVEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // ebx@1
  int v4; // eax@1
  char *v5; // edi@2
  char *v6; // esi@3
  Item *v7; // eax@3
  char v8; // dl@5
  char v9; // ST10_1@5
  int v10; // edx@5
  NiPoint3 Pos; // [sp+18h] [bp-18h]@5
  int v13; // [sp+24h] [bp-Ch]@2
  int uiBufSize; // [sp+28h] [bp-8h]@1
  ITEM_INVEN kInven; // [sp+2Ch] [bp-4h]@3

  v3 = pvData;
  v4 = *(_BYTE *)pvData;
  uiBufSize = 0;
  if ( v4 )
  {
    v5 = (char *)pvData + 3;
    v13 = v4;
    do
    {
      v6 = v5;
      v7 = Item::Create(v5, &kInven, (unsigned int *)&uiBufSize);
      v5 += uiBufSize;
      if ( v7 && v6[5] & 1 )
      {
        v8 = v6[32];
        Pos.x = *((float *)v6 + 3);
        v9 = v8;
        v10 = *((_WORD *)v6 + 3);
        Pos.y = *((float *)v6 + 4);
        Pos.z = *((float *)v6 + 5);
        MiniHouseIndoor::AddObject(
          &g_kWorld.m_MiniHouseIndoorMode,
          v10,
          *(_WORD *)(v6 + 3),
          &Pos,
          *((float *)v6 + 6),
          v9,
          1);
      }
      --v13;
    }
    while ( v13 );
    Inventory::InitData(&g_kInventory, (PROTO_NC_CHAR_CLIENT_ITEM_CMD *)v3, (char *)v3);
    BYTE3(pvData) = 1;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x1Du, (char *)&pvData + 3, 1);
  }
  return iRevBytes;
}

//----- (0049FC10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_VISIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4481 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FC40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_COMPULSIONMOVETO_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4560 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FC70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_PASSWORD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4481 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FCA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_TITLE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4481 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FCD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_MAXENTERNUM_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4481 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FD00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_OWNERBLOG_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3

  v3 = this;
  if ( *(_WORD *)pvData != 4481 )
  {
    GameFrameWork::SendOwnerBlogAddrReq(this);
    if ( *(_WORD *)pvData != 4481 )
    {
      v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v3, v4);
    }
  }
  return iRevBytes;
}

//----- (0049FD40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_OWNERBLOG_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_DWORD *)pvData != 4481 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_DWORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FD70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CHAR_ACTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 5312 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FDA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CHAR_ACTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  MiniHouseIndoor::ObjDoAction(
    &g_kWorld.m_MiniHouseIndoorMode,
    *((_WORD *)pvData + 2),
    *((_WORD *)pvData + 3),
    *(_WORD *)pvData,
    *((_WORD *)pvData + 1),
    *((_BYTE *)pvData + 8),
    *((_BYTE *)pvData + 9));
  return iRevBytes;
}

//----- (0049FDE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_NOTIFY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4481 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (0049FE10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // edi@1
  char *v4; // esi@2
  _BYTE v5[6]; // ST00_6@3
  GameFrameWork *v7; // [sp+Ch] [bp-4h]@1

  v3 = 0;
  v7 = this;
  if ( *(_WORD *)pvData > 0u )
  {
    v4 = (char *)pvData + 2;
    do
    {
      *(_DWORD *)v5 = *(_DWORD *)v4;
      *(_WORD *)&v5[4] = *((_WORD *)v4 + 2);
      mhPortalListWin::Add(v7->m_pkMHPortalListWin, *(PORTAL_INFO *)v5);
      ++v3;
      v4 += 6;
    }
    while ( v3 < *(_WORD *)pvData );
  }
  return iRevBytes;
}

//----- (0049FE70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_ADD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  _BYTE v3[6]; // ST00_6@1

  *(_DWORD *)v3 = *(_DWORD *)pvData;
  *(_WORD *)&v3[4] = *((_WORD *)pvData + 2);
  mhPortalListWin::Add(this->m_pkMHPortalListWin, *(PORTAL_INFO *)v3);
  return iRevBytes;
}

//----- (0049FEA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_DEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049FEB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_DEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  mhPortalListWin::Delete(this->m_pkMHPortalListWin, *(_WORD *)pvData);
  return iRevBytes;
}

//----- (0049FED0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049FEE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_OPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049FEF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_CLOSE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049FF00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_CLOSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049FF10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_EFFECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049FF20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_PORTAL_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0049FF30) --------------------------------------------------------
void __thiscall GameFrameWork::SendMHPortalDelReq(GameFrameWork *this, unsigned __int16 ID)
{
  if ( ID != -1 )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x4Du, &ID, 2);
}

//----- (0049FF60) --------------------------------------------------------
void __thiscall GameFrameWork::SendMHPortalCloseReq(GameFrameWork *this)
{
  PROTO_NC_MINIHOUSE_PORTAL_CLOSE_REQ kProto; // [sp+1h] [bp-1h]@1

  kProto.dummy[0] = 0;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x53u, &kProto, 1);
}

//----- (0049FF80) --------------------------------------------------------
void __thiscall GameFrameWork::SendMHPortalUseReq(GameFrameWork *this)
{
  PROTO_NC_MINIHOUSE_PORTAL_EFFECT_REQ kProto; // [sp+1h] [bp-1h]@1

  kProto.dummy[0] = 0;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x56u, &kProto, 1);
}

//----- (0049FFA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_ENDURE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int8 v3; // bl@1

  v3 = 0;
  if ( *(_BYTE *)pvData )
  {
    do
    {
      MiniHouseIndoor::ChangeEndure(
        &g_kWorld.m_MiniHouseIndoorMode,
        (MHE_STEP)*((_BYTE *)pvData + 4 * v3 + 3),
        *(_WORD *)((char *)pvData + 4 * v3 + 1));
      ++v3;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (0049FFE0) --------------------------------------------------------
void __thiscall GameFrameWork::OnSendNCItemDisMantleReq(GameFrameWork *this, char byItemPos)
{
  *(&byItemPos + 3) = byItemPos;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x2Au, &byItemPos + 3, 1);
}

//----- (004A0010) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LEVEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( pvData )
    HolyPromiseWin::SetLevelChange(this->m_pkHolyPromiseWin, (Name5 *)pvData, *((_BYTE *)pvData + 20));
  return iRevBytes;
}

//----- (004A0040) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  HolyPromiseWin::AddHolyPromiseList(this->m_pkHolyPromiseWin, (PROTO_NC_HOLY_PROMISE_LIST_CMD *)pvData);
  return iRevBytes;
}

//----- (004A0060) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_REWARDINVENOPENFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A0090) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_TOWNPORTAL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 6593 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A00C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcGuildRetypeReq(GameFrameWork *this, int nType, int nCharInvenItem)
{
  BYTE1(nCharInvenItem) = 0;
  if ( nType != 2 )
    BYTE1(nCharInvenItem) = 1;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xB4u, &nCharInvenItem, 2);
}

//----- (004A0100) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_DEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  if ( *(_WORD *)pvData == 7184 )
  {
    CChatRestrict::Del(&this->m_pkChatBlockListWin->m_RestrictList, (Name5 *)((char *)pvData + 2));
    GameFrameWork::UpdateChatBlockListWin(v3);
  }
  return iRevBytes;
}

//----- (004A0140) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_ACTIONBYITEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 7208 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A0170) --------------------------------------------------------
int __thiscall GameFrameWork::ON_NC_KQ_MOBKILLNUMBER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KQuestTimeWin *v3; // ecx@2
  int v4; // eax@2

  if ( pvData )
  {
    v3 = this->m_pkKQuestTimeWin;
    v4 = *((_WORD *)pvData + 1) - *(_WORD *)pvData;
    if ( v4 > 0 )
    {
      KQuestTimeWin::SetRequiredKillMobNums(v3, v4);
      return iRevBytes;
    }
    KQuestTimeWin::SetRequiredKillMobNums(v3, 0);
  }
  return iRevBytes;
}

//----- (004A01B0) --------------------------------------------------------
int __thiscall GameFrameWork::ON_NC_KQ_JOINING_ALARM_END_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  KingdomQuestWin *v4; // ecx@1
  bool v5; // bl@1
  MiniMapWin *v6; // ecx@3
  MiniMapWin *v7; // eax@5
  MiniMapWin *v8; // esi@6
  bool bStarted; // [sp+Fh] [bp-1h]@1

  v3 = this;
  v4 = this->m_pkKingDomQuest;
  v5 = 0;
  bStarted = 0;
  if ( v4 )
  {
    v5 = v4->m_JoinHandle == *(_DWORD *)pvData;
    bStarted = KingdomQuestWin::IsStarted(v4);
  }
  v6 = v3->m_pkMiniMapWin;
  if ( v6 )
  {
    MiniMapWin::RemoveKQAlarmInfo(v6, *(_DWORD *)pvData);
    if ( v5 )
    {
      v7 = v3->m_pkMiniMapWin;
      v7->m_bKQJoined = 0;
      v7->m_bKQListChanged = 1;
    }
    v8 = v3->m_pkMiniMapWin;
    v8->m_bKQStarted = bStarted;
    v8->m_bKQListChanged = 1;
  }
  return iRevBytes;
}

//----- (004A0230) --------------------------------------------------------
int __thiscall GameFrameWork::ON_NC_KQ_JOINING_ALARM_LIST(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  KingdomQuestWin *v4; // ecx@1
  MiniMapWin *v5; // ecx@3
  char *v6; // edi@5
  void *v7; // eax@6
  void *v8; // esi@7
  bool v9; // al@11
  MiniMapWin *v10; // eax@14
  bool bStarted; // [sp+7h] [bp-1h]@1
  int pvDataa; // [sp+14h] [bp+Ch]@5

  v3 = this;
  v4 = this->m_pkKingDomQuest;
  bStarted = 0;
  if ( v4 )
    bStarted = KingdomQuestWin::IsStarted(v4);
  v5 = v3->m_pkMiniMapWin;
  if ( v5 )
  {
    MiniMapWin::ResetKQAlarm(v5);
    if ( *(_WORD *)pvData )
    {
      v6 = (char *)pvData + 6;
      pvDataa = *(_WORD *)pvData;
      do
      {
        v7 = operator new(8u);
        if ( v7 )
        {
          *(_DWORD *)v7 = -1;
          *((_WORD *)v7 + 2) = -1;
          *((_BYTE *)v7 + 6) = 1;
          v8 = v7;
        }
        else
        {
          v8 = 0;
        }
        *(_DWORD *)v8 = *((_DWORD *)v6 - 1);
        *((_WORD *)v8 + 2) = *(_WORD *)v6;
        v9 = User::Lv(&g_kUser) >= (unsigned __int8)v6[2] && User::Lv(&g_kUser) <= (unsigned __int8)v6[3];
        *((_BYTE *)v8 + 6) = v9;
        MiniMapWin::AddKQAlarmInfo(v3->m_pkMiniMapWin, (MiniMapWin::sKQAlarmInfo *)v8);
        v6 += 8;
        --pvDataa;
      }
      while ( pvDataa );
    }
    v10 = v3->m_pkMiniMapWin;
    v10->m_bKQStarted = bStarted;
    v10->m_bKQListChanged = 1;
  }
  return iRevBytes;
}

//----- (004A0310) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SUMEONESKILLCUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 && (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)(v3) )
  {
    Char::CancelSkillAction(v4, 0);
    AttackSequenceManager::ApplicateSkillSeqImmediately(&v4->baseclass_54, v4, 1, 0);
  }
  return iRevBytes;
}

//----- (004A0360) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SETITEMHEALEFFECT(GameFrameWork *this, int iRevBytes, void *pvData)
{
  TextEffMgr::AddNumTextEff(
    &g_kTextEffMgr,
    *(_WORD *)pvData,
    *(_WORD *)((char *)pvData + 3),
    (TextEffMgr::TextEffColor)(4 * (*((_BYTE *)pvData + 2) & 1) | 1),
    0);
  return iRevBytes;
}

//----- (004A03A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_AUTO_PICK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 4, 190);
  if ( v3 )
    Char::SetItemAutoPickState(v3, *((_BYTE *)pvData + 2) != 0);
  return iRevBytes;
}

//----- (004A03E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_ERR(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004A0410) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_LOGININFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  _BYTE v5[20]; // ST0C_20@1
  RaidMemberInfo *v6; // eax@1
  _BYTE v7[20]; // ST0C_20@4
  PartyMemberInfo *v8; // eax@4

  v3 = this;
  *(_DWORD *)v4 = *((_DWORD *)pvData + 1);
  *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 1);
  *(_QWORD *)&v4[12] = *((_QWORD *)pvData + 2);
  RaidInfo::MemberLoginInfo(&g_kRaidinfo, *(Name5 *)v4, *((_BYTE *)pvData + 2), *((_BYTE *)pvData + 3), 1);
  *(_DWORD *)v5 = *((_DWORD *)pvData + 1);
  *(_QWORD *)&v5[4] = *((_QWORD *)pvData + 1);
  *(_QWORD *)&v5[12] = *((_QWORD *)pvData + 2);
  v6 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v5);
  if ( v6 )
    MiniMapWin::AddRaidMember(v3->m_pkMiniMapWin, v6);
  if ( *((_BYTE *)pvData + 2) == g_kRaidinfo.m_uiMePartyIdx )
  {
    *(_DWORD *)v7 = *((_DWORD *)pvData + 1);
    *(_QWORD *)&v7[4] = *((_QWORD *)pvData + 1);
    *(_QWORD *)&v7[12] = *((_QWORD *)pvData + 2);
    v8 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v7);
    if ( v8 )
      v8->m_ucStatus = 1;
  }
  return iRevBytes;
}

//----- (004A04E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_LOGOUTINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST0C_20@1
  RaidMemberInfo *v5; // eax@1
  _BYTE v6[20]; // ST00_20@3
  _BYTE v7[20]; // ST0C_20@4
  PartyMemberInfo *v8; // eax@4

  v3 = this;
  *(_DWORD *)v4 = *((_DWORD *)pvData + 1);
  *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 1);
  *(_QWORD *)&v4[12] = *((_QWORD *)pvData + 2);
  v5 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v4);
  if ( v5 )
    MiniMapWin::RemoveRaidMember(v3->m_pkMiniMapWin, v5);
  *(_DWORD *)v6 = *((_DWORD *)pvData + 1);
  *(_QWORD *)&v6[4] = *((_QWORD *)pvData + 1);
  *(_QWORD *)&v6[12] = *((_QWORD *)pvData + 2);
  RaidInfo::MemberLoginInfo(&g_kRaidinfo, *(Name5 *)v6, *((_BYTE *)pvData + 2), *((_BYTE *)pvData + 3), 0);
  if ( *((_BYTE *)pvData + 2) == g_kRaidinfo.m_uiMePartyIdx )
  {
    *(_DWORD *)v7 = *((_DWORD *)pvData + 1);
    *(_QWORD *)&v7[4] = *((_QWORD *)pvData + 1);
    *(_QWORD *)&v7[12] = *((_QWORD *)pvData + 2);
    v8 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v7);
    if ( v8 )
    {
      v8->m_ucStatus = 0;
      v8->m_bShow = 0;
    }
  }
  return iRevBytes;
}

//----- (004A05B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_LOOTING_TYPE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A05E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_ANSWER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A0610) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_MAPOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  RaidMemberInfo *v5; // eax@1
  _BYTE v6[20]; // ST00_20@3
  PartyMemberInfo *v7; // eax@3

  v3 = this;
  *(_DWORD *)v4 = *(_DWORD *)pvData;
  *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 12);
  v5 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v4);
  if ( v5 )
  {
    v5->m_bShow = 0;
    MiniMapWin::RemoveRaidMember(v3->m_pkMiniMapWin, v5);
  }
  *(_DWORD *)v6 = *(_DWORD *)pvData;
  *(_QWORD *)&v6[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v6[12] = *(_QWORD *)((char *)pvData + 12);
  v7 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v6);
  if ( v7 )
    v7->m_bShow = 0;
  return iRevBytes;
}

//----- (004A06A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_LEAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A06D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_VANISH_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A0700) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_MEMBERINFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  RaidMemberInfo *v4; // eax@1
  RaidMemberInfo *v5; // esi@1
  _BYTE v6[20]; // ST00_20@5
  PartyMemberInfo *v7; // eax@5

  v3 = this;
  RaidInfo::MemberInfomUpdate(&g_kRaidinfo, (PROTO_NC_RAID_MEMBERINFORM_CMD *)pvData);
  v4 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, *((_BYTE *)pvData + 3) + 5 * *((_BYTE *)pvData + 2));
  v5 = v4;
  if ( v4 )
    MiniMapWin::AddRaidMember(v3->m_pkMiniMapWin, v4);
  if ( *((_BYTE *)pvData + 2) == g_kRaidinfo.m_uiMePartyIdx )
  {
    if ( v5 )
    {
      *(_DWORD *)v6 = *(_DWORD *)&v5->m_kCharID.n5_name[0];
      *(_QWORD *)&v6[4] = *(_QWORD *)&v5->m_kCharID.n5_name[4];
      *(_QWORD *)&v6[12] = *(_QWORD *)&v5->m_kCharID.n5_name[12];
      v7 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v6);
      if ( v7 )
      {
        v7->m_iHP = *((_DWORD *)pvData + 1);
        v7->m_iHP = *((_DWORD *)pvData + 1);
        v7->m_bShow = 1;
      }
    }
  }
  return iRevBytes;
}

//----- (004A07A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_LOCATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  char *v3; // edi@2
  unsigned int v4; // ebx@3
  RaidMemberInfo *v5; // eax@3
  RaidMemberInfo *v6; // esi@3
  _BYTE v7[20]; // ST00_20@5
  PartyMemberInfo *v8; // eax@5
  double v9; // st7@6
  PartyWinInterface *v10; // ecx@8
  int kInfo; // [sp+Ch] [bp-18h]@3
  unsigned int kInfo_8; // [sp+14h] [bp-10h]@3
  GameFrameWork *v14; // [sp+1Ch] [bp-8h]@1
  unsigned int i; // [sp+20h] [bp-4h]@1

  v14 = this;
  i = 0;
  if ( *(_BYTE *)pvData )
  {
    v3 = (char *)pvData + 1;
    do
    {
      v4 = *((_DWORD *)v3 + 1);
      kInfo_8 = *((_DWORD *)v3 + 2);
      kInfo = *(_DWORD *)v3;
      v5 = RaidInfo::GetRaidMemberInfoByIndex(
             &g_kRaidinfo,
             (*(_DWORD *)v3 >> 24) + 5 * (unsigned __int8)(*(_DWORD *)v3 >> 16));
      v6 = v5;
      if ( v5 )
      {
        v5->m_fX = (double)v4;
        v5->m_fY = (double)kInfo_8;
        v5->m_ucStatus = 1;
        v5->m_bShow = 1;
        MiniMapWin::AddRaidMember(v14->m_pkMiniMapWin, v5);
        if ( BYTE2(kInfo) == g_kRaidinfo.m_uiMePartyIdx )
        {
          *(_DWORD *)v7 = *(_DWORD *)&v6->m_kCharID.n5_name[0];
          *(_QWORD *)&v7[4] = *(_QWORD *)&v6->m_kCharID.n5_name[4];
          *(_QWORD *)&v7[12] = *(_QWORD *)&v6->m_kCharID.n5_name[12];
          v8 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v7);
          if ( v8 )
          {
            v8->m_fX = v6->m_fX;
            v9 = v6->m_fY;
            v8->m_ucStatus = 1;
            v8->m_fY = v9;
            v8->m_bShow = 1;
          }
        }
      }
      v3 += 12;
      ++i;
    }
    while ( i < *(_BYTE *)pvData );
  }
  v10 = v14->m_pkPartyWinInterface;
  if ( v10 )
    PartyWinInterface::Update(v10);
  return iRevBytes;
}

//----- (004A08C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SLOT_MOVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A08F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_LEADER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A0920) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_LEADER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PartyWinInterface *v3; // ecx@1

  v3 = this->m_pkPartyWinInterface;
  if ( v3 )
    PartyWinInterface::Update(v3);
  return iRevBytes;
}

//----- (004A0940) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_SUB_LEADER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A0970) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_SUB_LEADER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PartyWinInterface *v3; // ecx@1

  v3 = this->m_pkPartyWinInterface;
  if ( v3 )
    PartyWinInterface::Update(v3);
  return iRevBytes;
}

//----- (004A0990) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A09C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_LOOTER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 7808 )
  {
    v4 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A09F0) --------------------------------------------------------
void __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_REQ(GameFrameWork *this, unsigned __int16 FurnitureID, char ActPos, char ActNum)
{
  *((_BYTE *)&FurnitureID + 2) = ActPos;
  *((_BYTE *)&FurnitureID + 3) = ActNum;
  GameFrameWork::SetCharEmotionUIState(this, 1);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x62u, &FurnitureID, 4);
}

//----- (004A0A30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  AbStateInfecteeVtbl *v4; // esi@4
  int v5; // eax@4
  AbStateInfecteeVtbl *v6; // esi@4
  NiPoint3 *v7; // eax@4
  NiPoint3 kCharPos; // [sp+2Ch] [bp-Ch]@5

  v3 = this;
  if ( *(_WORD *)pvData == 5912 )
  {
    if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
      ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
    v4 = g_pkMainChar->baseclass_0.vfptr;
    v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
    ((void (__thiscall *)(Char *, int))v4[6].Affect)(g_pkMainChar, v5);
    GameFrameWork::SetCharEmotionUIState(v3, 0);
    v6 = g_pkMainChar->baseclass_0.vfptr;
    v7 = MainChar::GetRevserveMovePos((MainChar *)g_pkMainChar);
    ((void (__thiscall *)(Char *, NiPoint3 *, _DWORD, NiColor *, signed int))v6[7].SetAbStateProperty)(
      g_pkMainChar,
      v7,
      0,
      &Char::INVALIDPOINT3,
      1);
    if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() )
    {
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kCharPos);
      World::GetAdvGroundPos(&g_kWorld, kCharPos.x, kCharPos.y, &kCharPos);
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[5].__vecDelDtor)(&kCharPos);
    }
  }
  return iRevBytes;
}

//----- (004A0B30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_REVIVEITEMUSEFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (004A0B40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_SOMEONEREVAVALTOME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  ReviveMenuWin::EnableBtns(this->m_pkReviveMenuWin, BTN_INDEX_REVIVE_FROM_CLERIC, 1);
  return iRevBytes;
}

//----- (004A0B60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_REPLYREVIVEFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (004A0B70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  RollingDiceWin *v4; // ecx@2

  v3 = this;
  if ( pvData )
  {
    v4 = this->m_pkRollingDiceWin;
    if ( v4 )
    {
      RollingDiceWin::SetDiceInfo(v4, *(_WORD *)pvData, *(_DWORD *)((char *)pvData + 2));
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkRollingDiceWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  return iRevBytes;
}

//----- (004A0BB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@2
  char *v5; // eax@3

  v3 = this;
  if ( pvData )
  {
    v4 = *(_WORD *)pvData;
    if ( (_WORD)v4 != 8192 )
    {
      v5 = ErrMsgTable::GetErrMsg(v4);
      GameFrameWork::AddSysMsg(v3, v5);
    }
  }
  return iRevBytes;
}

//----- (004A0BF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_MULTY_LINK_SELECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkGateChannelWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}

//----- (004A0C10) --------------------------------------------------------
void __thiscall GameFrameWork::NcMistSetChatBlockSpamFilterCmd(GameFrameWork *this, char bySpamMsgShow, char bySpamBlockOn, unsigned __int16 wSpamFilterRate)
{
  *(&bySpamMsgShow + 1) = bySpamBlockOn;
  *(&bySpamMsgShow + 2) = wSpamFilterRate;
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 2u, 0x46u, &bySpamMsgShow, 3);
}

//----- (004A0C40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_ITEMACTIONCOOLTIME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // edi@1
  char *v4; // esi@2
  float v5; // ST04_4@3

  v3 = 0;
  if ( *(_WORD *)pvData > 0u )
  {
    v4 = (char *)pvData + 2;
    do
    {
      v5 = (double)(*((_DWORD *)v4 + 1) / 0x3E8u);
      Skill::SetLastCoolTimeByItemActionID(*(_WORD *)v4, v5);
      ++v3;
      v4 += 8;
    }
    while ( v3 < *(_WORD *)pvData );
  }
  return iRevBytes;
}

//----- (004A0CA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST14_20@2
  _BYTE v5[20]; // ST00_20@2
  int result; // eax@2
  _BYTE v7[20]; // ST14_20@3
  _BYTE v8[20]; // ST14_20@3
  _BYTE v9[20]; // ST14_20@3
  _BYTE v10[20]; // ST14_20@3
  _BYTE v11[20]; // ST14_20@3
  _BYTE v12[20]; // ST14_20@3

  v3 = this;
  if ( *(_BYTE *)pvData )
  {
    *(_DWORD *)v7 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v7[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v7[12] = *(_QWORD *)((char *)pvData + 13);
    FriendWin::DelFriend(this->m_pkFriendWin, *(Name5 *)v7);
    *(_DWORD *)v8 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v8[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v8[12] = *(_QWORD *)((char *)pvData + 13);
    FriendCallWin::DelFriend(v3->m_pkFriendCallWin, *(Name5 *)v8);
    *(_DWORD *)v9 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v9[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v9[12] = *(_QWORD *)((char *)pvData + 13);
    HolyPromiseWin::DelHolyPromise(v3->m_pkHolyPromiseWin, *(Name5 *)v9);
    *(_DWORD *)v10 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v10[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v10[12] = *(_QWORD *)((char *)pvData + 13);
    Party::DeleteMember(&g_kParty, *(Name5 *)v10);
    *(_DWORD *)v11 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v11[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v11[12] = *(_QWORD *)((char *)pvData + 13);
    RaidInfo::DeleteMember(&g_kRaidinfo, *(Name5 *)v11);
    WeddingInfoWin::DeleteWedInfo(v3->m_pkWeddingInfoWin, (Name5 *)((char *)pvData + 1));
    GuildWin::DeleteUser(v3->m_pkGuildWin, (Name5 *)((char *)pvData + 1));
    *(_DWORD *)v12 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v12[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v12[12] = *(_QWORD *)((char *)pvData + 13);
    GuildAcademyWin::DeleteUser(v3->m_pkGuildAcademyWin, *(Name5 *)v12);
    CChatRestrict::Del(&v3->m_pkChatBlockListWin->m_RestrictList, (Name5 *)((char *)pvData + 1));
    GameFrameWork::UpdateChatBlockListWin(v3);
    result = iRevBytes;
  }
  else
  {
    FriendWin::ChangeUserName(this->m_pkFriendWin, (Name5 *)((char *)pvData + 1), (Name5 *)((char *)pvData + 21));
    GuildWin::ChangeUserName(v3->m_pkGuildWin, (Name5 *)((char *)pvData + 1), (Name5 *)((char *)pvData + 21));
    *(_DWORD *)v4 = *(_DWORD *)((char *)pvData + 21);
    *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 25);
    *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 33);
    *(_DWORD *)v5 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v5[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v5[12] = *(_QWORD *)((char *)pvData + 13);
    GuildAcademyWin::ChangeUserName(v3->m_pkGuildAcademyWin, *(Name5 *)v5, *(Name5 *)v4);
    FriendCallWin::ChangeUserName(v3->m_pkFriendCallWin, (Name5 *)((char *)pvData + 1), (Name5 *)((char *)pvData + 21));
    HolyPromiseWin::ChangeUserName(
      v3->m_pkHolyPromiseWin,
      (Name5 *)((char *)pvData + 1),
      (Name5 *)((char *)pvData + 21));
    WeddingInfoWin::ChangeUserName(
      v3->m_pkWeddingInfoWin,
      (Name5 *)((char *)pvData + 1),
      (Name5 *)((char *)pvData + 21));
    RaidInfo::ChangeUserName(&g_kRaidinfo, (Name5 *)((char *)pvData + 1), (Name5 *)((char *)pvData + 21));
    Party::ChangeUserName(&g_kParty, (Name5 *)((char *)pvData + 1), (Name5 *)((char *)pvData + 21));
    ChatBlockListWin::ChangeUserName(
      v3->m_pkChatBlockListWin,
      (Name5 *)((char *)pvData + 1),
      (Name5 *)((char *)pvData + 21));
    GameFrameWork::UpdateChatBlockListWin(v3);
    result = iRevBytes;
  }
  return result;
}

//----- (004A0ED0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  CQuestWin2 *v4; // edx@3

  v3 = this;
  if ( *(_WORD *)pvData == 2896 )
  {
    if ( this->m_pkQuestWin )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkQuestWin->baseclass_0.baseclass_0.baseclass_0);
      v4 = v3->m_pkQuestWin;
      if ( v4->m_pkEpicQuestWin )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkEpicQuestWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  return iRevBytes;
}

//----- (004A0F20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_READ_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  char *v3; // eax@1

  v3 = fs("%d ??? Read OK\n");
  OutputDebugStringA(v3);
  return iRevBytes;
}

//----- (004A0F50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_QUEST_READ_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_READ_CMD *)pvData);
  return iRevBytes;
}

//----- (004A0F70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_QUEST_REPEAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_REPEAT_CMD *)pvData);
  return iRevBytes;
}

//----- (004A0F90) --------------------------------------------------------
void __thiscall GameFrameWork::SaveAllKeyOpt(GameFrameWork *this)
{
  signed int v1; // eax@1
  char *v2; // ecx@1
  char v3; // dl@2
  char DummyMem[1024]; // [sp+0h] [bp-404h]@1
  unsigned int v5; // [sp+400h] [bp-4h]@1
  int v6; // [sp+404h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  memset(&DummyMem[1], 0, 0x3FFu);
  strcpy(DummyMem, "_");
  v1 = 0;
  v2 = &DummyMem[5];
  do
  {
    *v2 = HIBYTE(word_B5B172[4 * v1]);
    v3 = LOBYTE(word_B5B172[4 * v1]);
    *(_WORD *)(v2 - 3) = v1;
    *(v2 - 1) = v3;
    ++v1;
    v2 += 4;
  }
  while ( v1 < 95 );
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Cu, 0x39u, DummyMem, 4 * *(unsigned __int16 *)DummyMem + 2);
}
// A85C00: using guessed type int __security_cookie;
// B5B172: using guessed type __int16 word_B5B172[];

//----- (004A1030) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_SET_GAMEOPTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (004A1040) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_INIT_KEYMAP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KeyRemappingWin *v3; // edx@2
  signed int v4; // esi@3
  char *v5; // eax@4

  if ( *(_WORD *)pvData == 8464 )
  {
    v3 = this->m_pkKeyRemappingWin;
    if ( v3 )
    {
      v4 = 0;
      if ( *((_WORD *)pvData + 1) > 0u )
      {
        v5 = (char *)pvData + 4;
        do
        {
          v3->m_keyMapping[*(_WORD *)v5].keyValue = v5[3];
          v3->m_keyMapping[*(_WORD *)v5].modifier = v5[2];
          ++v4;
          v5 += 4;
        }
        while ( v4 < *((_WORD *)pvData + 1) );
      }
      KeyRemappingWin::ReflashContents(this->m_pkKeyRemappingWin);
    }
  }
  return iRevBytes;
}

//----- (004A10C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_SET_KEYMAP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 8456 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A10F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_SET_SHORTCUTDATA_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 8448 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A1120) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARSAVE_UI_STATE_SAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (004A1130) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_ADMIN_LEVEL_INFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1

  this->m_bIsGM = *(_BYTE *)pvData != 0;
  v3 = *(_BYTE *)pvData;
  this->m_iAdminLevel = v3;
  this->m_bEnableAdmin = v3 > 0;
  return iRevBytes;
}

//----- (004A1160) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_SPAMMER_REPORT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 8544 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A1190) --------------------------------------------------------
void __thiscall GameFrameWork::NcActAutoWayFindingUseGateReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PROTO_NC_ACT_AUTO_WAY_FINDING_USE_GATE_REQ kProto; // [sp+7h] [bp-1h]@1

  v1 = this;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x70u, &kProto, 1);
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[7].DeleteAbStateByAbstateIndex)();
  v1->m_bMoveRunCtrl = 0;
}

//----- (004A11D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharNewbieGuideViewSetCmd(GameFrameWork *this, const char nGuideView)
{
  *(&nGuideView + 3) = nGuideView;
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 4u, 0xDAu, (void *)(&nGuideView + 3), 1);
}

//----- (004A1200) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  unsigned int v4; // edi@2
  char *v5; // esi@3
  int result; // eax@5

  v3 = this;
  if ( this->m_pkCollectWin )
  {
    v4 = 0;
    if ( *((_WORD *)pvData + 2) > 0u )
    {
      v5 = (char *)pvData + 14;
      do
      {
        CollectWin::SetCard(
          v3->m_pkCollectWin,
          *(_WORD *)v5,
          (unsigned __int8)v5[2],
          *((_DWORD *)v5 - 1),
          *((_DWORD *)v5 - 2));
        CollectWin::SetNewest(v3->m_pkCollectWin, *((_DWORD *)v5 - 2), *(_WORD *)v5);
        ++v4;
        v5 += 11;
      }
      while ( v4 < *((_WORD *)pvData + 2) );
    }
    result = iRevBytes;
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}

//----- (004A1280) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_BOOKMARK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // edi@2
  char *v4; // esi@3
  int result; // eax@6
  GameFrameWork *v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( this->m_pkCollectWin )
  {
    v3 = 0;
    if ( *((_WORD *)pvData + 2) <= 0u )
    {
      result = iRevBytes;
    }
    else
    {
      v4 = (char *)pvData + 6;
      while ( 1 )
      {
        CollectWin::SetBookmark(this->m_pkCollectWin, *(_WORD *)v4, *((_WORD *)v4 + 1));
        ++v3;
        v4 += 4;
        if ( v3 >= *((_WORD *)pvData + 2) )
          break;
        this = v6;
      }
      result = iRevBytes;
    }
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}

//----- (004A12F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_REWARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // esi@2
  unsigned int *v4; // edi@3
  int result; // eax@6
  GameFrameWork *v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( this->m_pkCollectWin )
  {
    v3 = 0;
    if ( *((_WORD *)pvData + 2) <= 0u )
    {
      result = iRevBytes;
    }
    else
    {
      v4 = (unsigned int *)((char *)pvData + 6);
      while ( 1 )
      {
        CollectWin::SetReward(this->m_pkCollectWin, *(_WORD *)v4, 1);
        ++v3;
        v4 = (unsigned int *)((char *)v4 + 2);
        if ( v3 >= *((_WORD *)pvData + 2) )
          break;
        this = v6;
      }
      result = iRevBytes;
    }
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}

//----- (004A1360) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_COLLECT_PEEPING_COLLECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  CollectWin *v4; // ecx@2
  unsigned int v5; // ebx@3
  char *v6; // esi@4
  char *v8; // eax@7

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 11200 )
  {
    v8 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v8);
    return iRevBytes;
  }
  v4 = this->m_pkCollectPeepingWin;
  if ( !v4 )
    return iRevBytes;
  CollectWin::InitInfo(v4);
  v5 = 0;
  if ( *((_WORD *)pvData + 13) > 0u )
  {
    v6 = (char *)pvData + 36;
    do
    {
      CollectWin::SetCard(
        v3->m_pkCollectPeepingWin,
        *(_WORD *)v6,
        (unsigned __int8)v6[2],
        *((_DWORD *)v6 - 1),
        *((_DWORD *)v6 - 2));
      CollectWin::SetNewest(v3->m_pkCollectPeepingWin, *((_DWORD *)v6 - 2), *(_WORD *)v6);
      ++v5;
      v6 += 11;
    }
    while ( v5 < *((_WORD *)pvData + 13) );
  }
  CollectWin::Update(v3->m_pkCollectPeepingWin, 0);
  GameFrameWork::OpenCollectPeepingWin(v3, 1);
  return iRevBytes;
}

//----- (004A1420) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_COLLECT_PEEPING_COLLECT_BOOKMARK_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  unsigned int v4; // edi@3
  char *v5; // esi@4
  char *v7; // eax@7

  v3 = this;
  if ( *((_WORD *)pvData + 10) != 11200 )
  {
    v7 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v7);
    return iRevBytes;
  }
  if ( !this->m_pkCollectPeepingWin )
    return iRevBytes;
  v4 = 0;
  if ( *((_WORD *)pvData + 13) > 0u )
  {
    v5 = (char *)pvData + 28;
    do
    {
      CollectWin::SetBookmark(v3->m_pkCollectPeepingWin, *(_WORD *)v5, *((_WORD *)v5 + 1));
      ++v4;
      v5 += 4;
    }
    while ( v4 < *((_WORD *)pvData + 13) );
  }
  CollectWin::Update(v3->m_pkCollectPeepingWin, 0);
  GameFrameWork::OpenCollectPeepingWin(v3, 1);
  return iRevBytes;
}

//----- (004A14B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_TOGGLESKILL_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  ShortCutWin **v4; // esi@1
  signed int v5; // ebx@1

  v3 = this;
  ShortCutWin::OnToggleKey(this->m_pkShortCutWin, *(_WORD *)pvData);
  ShortCutWin::OnToggleKey(v3->m_pkShortCutWinV, *(_WORD *)pvData);
  v4 = v3->m_pkShortCutSubWinV;
  v5 = 4;
  do
  {
    ShortCutWin::OnToggleKey(*(v4 - 5), *(_WORD *)pvData);
    ShortCutWin::OnToggleKey(*v4, *(_WORD *)pvData);
    ++v4;
    --v5;
  }
  while ( v5 );
  return iRevBytes;
}

//----- (004A1510) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CHANGEBYCONDITION_PARAM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  void *v4; // ebx@1
  unsigned __int16 v5; // ax@1
  int v6; // esi@3
  _BYTE v7[6]; // ST00_6@4
  signed int i; // [sp+18h] [bp+Ch]@2

  v3 = this;
  CharInfoWin::EnableChangeCondition(this->m_pkCharInfoWin, 1);
  v4 = pvData;
  CharInfoWin::EnablePassiveSkillID(v3->m_pkCharInfoWin, *(_WORD *)pvData);
  CharInfoWin::SetConditionDataNum(v3->m_pkCharInfoWin, *((_WORD *)pvData + 2));
  CharInfoWin::SetSectionRate(v3->m_pkCharInfoWin, *((_WORD *)pvData + 1));
  v5 = *((_WORD *)pvData + 2);
  if ( v5 )
  {
    i = 0;
    if ( v5 > 0u )
    {
      v6 = (int)((char *)v4 + 6);
      do
      {
        *(_DWORD *)v7 = *(_DWORD *)v6;
        *(_WORD *)&v7[4] = *(_WORD *)(v6 + 4);
        CharInfoWin::SetConditionInfo(v3->m_pkCharInfoWin, *(CHAR_CHANGEBYCONDITION_PARAM *)v7);
        v6 += 6;
        ++i;
      }
      while ( i < *((_WORD *)v4 + 2) );
    }
  }
  return iRevBytes;
}

//----- (004A15B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_JUMP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // edi@1
  int v4; // edx@2
  double v5; // st7@2
  int v6; // eax@4
  double v7; // st7@4
  int v8; // ecx@6
  double v9; // st7@6
  void (__thiscall *v10)(AbStateInfectee *, AbStateInst *, bool); // edx@8
  NiPoint3 nfrom; // [sp+8h] [bp-24h]@2
  NiPoint3 nTo; // [sp+14h] [bp-18h]@6
  float v14; // [sp+20h] [bp-Ch]@8
  float v15; // [sp+24h] [bp-8h]@8
  float v16; // [sp+28h] [bp-4h]@8

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v4 = *(_DWORD *)((char *)pvData + 6);
    nfrom.x = (double)*(unsigned int *)((char *)pvData + 2);
    v5 = (double)*(signed int *)((char *)pvData + 6);
    if ( v4 < 0 )
      v5 = v5 + 4294967300.0;
    v6 = *(_DWORD *)((char *)pvData + 10);
    nfrom.y = v5;
    v7 = (double)*(signed int *)((char *)pvData + 10);
    if ( v6 < 0 )
      v7 = v7 + 4294967300.0;
    v8 = *(_DWORD *)((char *)pvData + 14);
    nTo.x = v7;
    v9 = (double)*(signed int *)((char *)pvData + 14);
    if ( v8 < 0 )
      v9 = v9 + 4294967300.0;
    nTo.y = v9;
    v14 = nTo.x - nfrom.x;
    nfrom.x = v14;
    v10 = v3->baseclass_0.vfptr[6].Affect;
    v15 = nTo.y - nfrom.y;
    nfrom.y = v15;
    v16 = 0.0;
    nfrom.z = 0.0;
    ((void (__thiscall *)(Char *, NiPoint3 *))v10)(v3, &nfrom);
    ((void (__thiscall *)(Char *, _DWORD, _DWORD, _DWORD))v3->baseclass_0.vfptr[9].__vecDelDtor)(
      v3,
      *(_DWORD *)((char *)pvData + 10),
      *(_DWORD *)((char *)pvData + 14),
      *(_WORD *)((char *)pvData + 19));
  }
  return iRevBytes;
}

//----- (004A1680) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_LIST_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  AttendIconWin *v4; // eax@1

  v3 = this;
  AttendCheckWin::SetEvtState(
    this->m_pkAttendCheckWin,
    (tm *)pvData,
    *((_BYTE *)pvData + 36),
    (const char *)pvData + 37,
    (const char *)pvData + 66,
    *((_BYTE *)pvData + 65));
  v4 = v3->m_pkAttendIconWin;
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  v4->m_bEvtState = 1;
  return iRevBytes;
}

//----- (004A16D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_CHANGE_DAY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  AttendCheckWin::ChangeDay(this->m_pkAttendCheckWin, *(_BYTE *)pvData);
  return iRevBytes;
}

//----- (004A16F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHER_EVENT_ATTENDANCE_CHANGE_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  AttendIconWin *v4; // eax@1

  v3 = this;
  AttendCheckWin::InitEvtState(this->m_pkAttendCheckWin);
  AttendCheckWin::SetEvtState(v3->m_pkAttendCheckWin, (tm *)pvData, 0, 0, 0, 0);
  v4 = v3->m_pkAttendIconWin;
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  v4->m_bEvtState = 1;
  AttendIconWin::SetActive(v3->m_pkAttendIconWin, 0);
  return iRevBytes;
}

//----- (004A1750) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_TIMER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  IDTimeWin *v3; // ecx@1

  v3 = this->m_pkIDTimeWin;
  if ( v3 )
    IDTimeWin::ResetTime(v3, *(_WORD *)pvData);
  return iRevBytes;
}

//----- (004A1770) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_ANIMATION_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
    Char::ActAction(v3, (char *)pvData + 2, 0);
  return iRevBytes;
}

//----- (004A17A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_ANIMATION_STOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // edi@1
  ActionInfo *v5; // eax@2

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 )
  {
    v5 = Char::GetCurPlayActInfo(v3);
    if ( v5 )
    {
      if ( !strcmp(v5->InxName, (const char *)pvData + 2) )
        ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v4);
    }
  }
  return iRevBytes;
}

//----- (004A1810) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_MAPMARK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  MiniMapWin *v3; // ecx@1

  v3 = this->m_pkMiniMapWin;
  if ( v3 )
    MiniMapWin::AddMapMark(v3, (PROTO_NC_SCENARIO_MAPMARK_CMD *)pvData);
  return iRevBytes;
}

//----- (004A1830) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_REGENMOVER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CharMgr::AddMover(&g_kCharMgr, (PROTO_NC_BRIEFINFO_REGENMOVER_CMD *)pvData);
  return iRevBytes;
}

//----- (004A1850) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MOVER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CharMgr::AddMover(&g_kCharMgr, (PROTO_NC_BRIEFINFO_MOVER_CMD *)pvData);
  return iRevBytes;
}

//----- (004A1870) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_ON_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 12392 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A18A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_OFF_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 12416 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A18D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_FEEDING_ERROR_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 12432 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A1900) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_MOVESPEED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // esi@1
  float v4; // ST04_4@2
  float v5; // ST04_4@2

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v4 = (double)*((_WORD *)pvData + 1);
    ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[8].Deaffect)(v3, LODWORD(v4));
    v5 = (double)*((_WORD *)pvData + 2);
    ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[8].SetAbStateProperty)(v3, LODWORD(v5));
  }
  return iRevBytes;
}

//----- (004A1960) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_REGENPET_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CharMgr::AddPet(&g_kCharMgr, (PROTO_NC_BRIEFINFO_REGENPET_CMD *)pvData);
  return iRevBytes;
}

//----- (004A1980) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_PET_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CharMgr::AddPet(&g_kCharMgr, (PROTO_NC_BRIEFINFO_PET_CMD *)pvData);
  return iRevBytes;
}

//----- (004A19A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PET_USE_ITEM_FAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3

  v3 = this;
  if ( *(_WORD *)pvData != 13376 && *(_WORD *)pvData != 13440 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A19E0) --------------------------------------------------------
void __thiscall GameFrameWork::NcPetAskNewNameAck(GameFrameWork *this, unsigned __int16 kError, unsigned __int16 kPetHandle)
{
  *(&kError + 1) = kPetHandle;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x35u, 6u, &kError, 4);
}

//----- (004A1A10) --------------------------------------------------------
void __thiscall GameFrameWork::NcPetSetNameCancelReq(GameFrameWork *this, unsigned __int16 kPetHandle)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x35u, 9u, &kPetHandle, 2);
}

//----- (004A1A40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_RANKING_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // eax@1
  bool v4; // zf@1
  void *v5; // ebx@2
  EventRankWin *v6; // ecx@4
  char *v7; // ebx@6
  EventRankWin *v8; // ecx@8
  SCENARIO_RANKING_INFO v10; // [sp-1Ch] [bp-30h]@4
  char v11; // [sp-4h] [bp-18h]@4
  int v12; // [sp+Ch] [bp-8h]@2
  GameFrameWork *v13; // [sp+10h] [bp-4h]@1
  signed int pvDataa; // [sp+20h] [bp+Ch]@6

  v3 = this;
  v4 = this->m_pkEventRankWin == 0;
  v13 = this;
  if ( !v4 )
  {
    v5 = pvData;
    v12 = 20;
    do
    {
      if ( *(_BYTE *)v5 )
      {
        memcpy(&v10, v5, 0x18u);
        v6 = v3->m_pkEventRankWin;
        v11 = *((_BYTE *)v5 + 24);
        EventRankWin::AddPrevRank(v6, v10);
        v3 = v13;
      }
      v5 = (char *)v5 + 25;
      --v12;
    }
    while ( v12 );
    v7 = (char *)pvData + 500;
    pvDataa = 20;
    do
    {
      if ( *v7 )
      {
        memcpy(&v10, v7, 0x18u);
        v8 = v13->m_pkEventRankWin;
        v11 = v7[24];
        EventRankWin::AddCurRank(v8, v10);
      }
      v7 += 25;
      --pvDataa;
    }
    while ( pvDataa );
    *(_DWORD *)&v11 = v13->m_pkEventRankWin;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, *(PgWin **)&v11);
  }
  return iRevBytes;
}

//----- (004A1AF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_TIMER_END_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  EventTimeWin *v3; // ecx@1
  float v4; // ST00_4@2

  v3 = this->m_pkEventTimeWin;
  if ( v3 )
  {
    v4 = (double)*(unsigned int *)pvData;
    EventTimeWin::Stop(v3, v4);
  }
  return iRevBytes;
}

//----- (004A1B20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_OBJECT_SOUND_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  NiPoint3 *v4; // eax@2

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v4 = (NiPoint3 *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[6].Deaffect)(v3);
    SoundMgr::CreateSound(&g_kSoundMgr, (char *)pvData + 2, v4);
  }
  return iRevBytes;
}

//----- (004A1B60) --------------------------------------------------------
void __thiscall GameFrameWork::NcMiscItemShopUrlReq(GameFrameWork *this)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 2u, 0x6Eu, 0, 0);
}

//----- (004A1B80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_JOIN_LIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  KingdomQuestPlayerList *v4; // ecx@1
  KingdomQuestWin *v6; // eax@4
  void *v7; // esi@5
  unsigned int v8; // ebx@8
  KingdomQuestPlayerList *v9; // ecx@11
  KingdomQuestTeamList *v10; // ecx@17
  KQ_JOIN_CHAR_INFO *pvDataa; // [sp+10h] [bp+Ch]@10
  KQ_JOIN_CHAR_INFO *pvDatab; // [sp+10h] [bp+Ch]@16

  v3 = this;
  v4 = this->m_pkKQPlayerList;
  if ( !v4 || !v3->m_pkKQTeamList || (v6 = v3->m_pkKingDomQuest) == 0 )
    return 0;
  v7 = pvData;
  if ( *(_WORD *)pvData != 12568 )
  {
    if ( *(_WORD *)pvData == 12569 )
    {
      KingdomQuestPlayerList::ReSetList(v4);
      return iRevBytes;
    }
    return iRevBytes;
  }
  KingdomQuestWin::SetTimer(v6, 0);
  KingdomQuestPlayerList::SetTimer(v3->m_pkKQPlayerList, 0);
  KingdomQuestTeamList::SetTimer(v3->m_pkKQTeamList, 0);
  KingdomQuestPlayerList::ReSetList(v3->m_pkKQPlayerList);
  KingdomQuestTeamList::ReSetList(v3->m_pkKQTeamList);
  v8 = 0;
  if ( *((_BYTE *)pvData + 25) != 2 )
  {
    if ( *((_BYTE *)pvData + 2) > 0u )
    {
      pvDatab = (KQ_JOIN_CHAR_INFO *)((char *)pvData + 3);
      do
      {
        v10 = v3->m_pkKQTeamList;
        if ( v10 )
          KingdomQuestTeamList::AddElement(v10, pvDatab);
        ++pvDatab;
        ++v8;
      }
      while ( v8 < *((_BYTE *)v7 + 2) );
    }
    KingdomQuestTeamList::UpdateList(v3->m_pkKQTeamList);
    return iRevBytes;
  }
  if ( *((_BYTE *)pvData + 2) > 0u )
  {
    pvDataa = (KQ_JOIN_CHAR_INFO *)((char *)pvData + 3);
    do
    {
      v9 = v3->m_pkKQPlayerList;
      if ( v9 )
        KingdomQuestPlayerList::AddElement(v9, pvDataa);
      ++pvDataa;
      ++v8;
    }
    while ( v8 < *((_BYTE *)v7 + 2) );
  }
  KingdomQuestPlayerList::UpdateList(v3->m_pkKQPlayerList);
  return iRevBytes;
}

//----- (004A1CA0) --------------------------------------------------------
void __thiscall GameFrameWork::SetJoinHandle(GameFrameWork *this, unsigned int kHandle)
{
  KingdomQuestPlayerList *v2; // eax@1
  KingdomQuestTeamList *v3; // eax@2

  v2 = this->m_pkKQPlayerList;
  if ( v2 )
  {
    v2->m_kQuestHandle = kHandle;
    v3 = this->m_pkKQTeamList;
    if ( v3 )
      v3->m_kQuestHandle = kHandle;
  }
}

//----- (004A1CD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_FIELD_ATTRIBUTE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = iRevBytes;
  this->m_eFieldMapType = *(_DWORD *)pvData;
  return result;
}

//----- (004A1CF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_DIALOG_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char acTemp[2048]; // [sp+8h] [bp-804h]@1
  unsigned int v6; // [sp+808h] [bp-4h]@1
  int v7; // [sp+80Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v3 = this;
  memset(acTemp, 0, 0x800u);
  memcpy(acTemp, (char *)pvData + 34, *((_BYTE *)pvData + 33));
  NpcDialogWin::OpenNpcScriptDialog(v3->m_pkNpcDlgWin, (char *)pvData, acTemp, 1);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A1D70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_MOVER_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  MoverUpgradeWin *v4; // ecx@1
  int v5; // eax@2
  char *v6; // eax@3

  v3 = this;
  v4 = this->m_pkMoverUpgradeWin;
  if ( v4 )
  {
    v5 = *(_WORD *)pvData;
    if ( (_WORD)v5 != 12840 )
    {
      v6 = ErrMsgTable::GetErrMsg(v5);
      GameFrameWork::AddSysMsg(v3, v6);
      return iRevBytes;
    }
    MoverUpgradeWin::ResetSubSlot(v4);
    MoverUpgradeWin::ShowUpgradeResult(
      v3->m_pkMoverUpgradeWin,
      *((_BYTE *)pvData + 4),
      *((_BYTE *)pvData + 2) != 0,
      *((_BYTE *)pvData + 3) != 0);
  }
  return iRevBytes;
}

//----- (004A1DE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_LEVEL_SELECT_MENU_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int8 v3; // dl@1
  GameFrameWork *v4; // esi@1
  IndunLevelMsgWin *v5; // ecx@2
  _BYTE v6[12]; // ST08_12@3
  IndunLevelSelectWin *v8; // ecx@4
  _BYTE v9[12]; // ST04_12@5

  v3 = *((_BYTE *)pvData + 14);
  v4 = this;
  if ( v3 == 1 )
  {
    v5 = this->m_pkIndunLevelMsgWin;
    if ( v5 )
    {
      *(_QWORD *)v6 = *(_QWORD *)((char *)pvData + 2);
      *(_DWORD *)&v6[8] = *(_DWORD *)((char *)pvData + 10);
      IndunLevelMsgWin::SetInfo(v5, *(_WORD *)pvData, *(Name3 *)v6, *(ID_LEVEL_TYPE *)((char *)pvData + 15));
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkIndunLevelMsgWin->baseclass_0.baseclass_0.baseclass_0);
      return iRevBytes;
    }
  }
  else
  {
    v8 = this->m_pkIndunLevelSelectWin;
    if ( v8 )
    {
      *(_QWORD *)v9 = *(_QWORD *)((char *)pvData + 2);
      *(_DWORD *)&v9[8] = *(_DWORD *)((char *)pvData + 10);
      IndunLevelSelectWin::SetInfo(v8, *(_WORD *)pvData, *(Name3 *)v9, v3, (ID_LEVEL_TYPE *)((char *)pvData + 15));
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkIndunLevelSelectWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  return iRevBytes;
}

//----- (004A1E90) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_LPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  StatusWin *v4; // ecx@1

  v3 = this;
  User::SetLP(&g_kUser, *(_DWORD *)pvData);
  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[4].__vecDelDtor)(*(_DWORD *)pvData);
  v4 = v3->m_pkStatusWin;
  if ( v4 )
    StatusWin::UpdateBars(v4);
  return iRevBytes;
}

//----- (004A1EE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_EFFECT_MESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  EffectMsg *v3; // ecx@1

  v3 = this->m_pkEffectMsg;
  if ( v3 )
    EffectMsg::Play(v3, *(EFFECT_MESSAGE_TYPE *)pvData);
  return iRevBytes;
}

//----- (004A1F00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_SCORE_INFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  unsigned int v4; // esi@2

  v3 = this;
  if ( this->m_pkKQScoreWin )
  {
    GameFrameWork::OpenKQScoreWin(this, 1);
    v4 = 0;
    do
    {
      KQScoreWin::SetScore(v3->m_pkKQScoreWin, v4, *((_DWORD *)pvData + v4));
      ++v4;
    }
    while ( v4 < 2 );
  }
  return iRevBytes;
}

//----- (004A1F40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_EFFECT_TIMER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  PgWin *v4; // ecx@1

  v3 = this;
  v4 = (PgWin *)this->m_pkPuzzleTimeWin;
  if ( v4 )
  {
    if ( *(_BYTE *)pvData )
    {
      if ( *(_BYTE *)pvData == 1 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
    }
    else
    {
      PuzzleTimeWin::ResetTime((PuzzleTimeWin *)v4, *(_WORD *)((char *)pvData + 1));
      if ( v3->m_bPlayPuzzle )
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkPuzzleTimeWin->baseclass_0.baseclass_0.baseclass_0);
        return iRevBytes;
      }
    }
  }
  return iRevBytes;
}

//----- (004A1FA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_TEAM_SELECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  KingdomQuestTeamList *v3; // esi@1

  v3 = this->m_pkKingDomQuest->m_pkKingdomQuestTeamList;
  if ( v3 )
  {
    KingdomQuestTeamList::SetElement(v3, (PROTO_NC_KQ_TEAM_SELECT_CMD *)pvData);
    KingdomQuestTeamList::UpdateList(v3);
  }
  return iRevBytes;
}

//----- (004A1FD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_DEL_DIRECTIONAL_ARROW_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  EffectMgr::RemoveClientEff(&g_kEffectMgr, 1u);
  return iRevBytes;
}

//----- (004A1FF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_CAN_USE_REVIVEITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  ReviveMenuWin *v3; // ecx@1

  v3 = this->m_pkReviveMenuWin;
  if ( v3 )
    ReviveMenuWin::SetCanReviveItem(v3, *(_BYTE *)pvData);
  return iRevBytes;
}

//----- (004A2010) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_INDUN_LEVEL_VIEW_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  MiniMapWin::ViewInDunLevelFlag(this->m_pkMiniMapWin, *(ID_LEVEL_TYPE *)pvData);
  return iRevBytes;
}

//----- (004A2030) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_RANDOMOPTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( this->m_pkRandomOptionWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkRandomOptionWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}

//----- (004A2050) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_RANDOMOPTION_CHANGE_ACCEPT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_WORD *)pvData == 12872 )
    RandomOptionWin::SetChangeOption(this->m_pkRandomOptionWin);
  return iRevBytes;
}

//----- (004A2080) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_CHAT_COLOR_CHANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@3
  ChatColorSpinWin *v7; // ecx@4

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( v3 == 13824 )
  {
    v7 = this->m_pkChatColorSpinWin;
    if ( v7 )
      ChatColorSpinWin::SetChatColorID(v7, *((_BYTE *)pvData + 2));
  }
  else
  {
    if ( (unsigned int)(v3 - 13825) <= 6 )
    {
      v5 = fs("Error ChatColorSystem[ %d ]");
      GameFrameWork::AddSysMsg(v4, v5);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004A20E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_TERMEXTEND_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  TermExtendWin *v4; // ecx@1
  int v5; // eax@2
  char *v6; // eax@3

  v3 = this;
  v4 = this->m_pkTermExtendWin;
  if ( v4 )
  {
    v5 = *(_WORD *)pvData;
    if ( (_WORD)v5 != 13848 )
    {
      v6 = ErrMsgTable::GetErrMsg(v5);
      GameFrameWork::AddSysMsg(v3, v6);
      return iRevBytes;
    }
    TermExtendWin::ShowUpgradeResult(v4);
  }
  return iRevBytes;
}

//----- (004A2130) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_INFO_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  MinimonAutoItemUseWin *v3; // ecx@1
  USEITEM_MINIMON_INFO UseItemInfo; // [sp+8h] [bp-38h]@1
  unsigned int v6; // [sp+3Ch] [bp-4h]@1
  int v7; // [sp+40h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  memcpy(&UseItemInfo, pvData, 0x30u);
  v3 = this->m_pkMinimonAutoItemUseWin;
  UseItemInfo.ChargedItemList[11] = *((_WORD *)pvData + 24);
  MinimonAutoItemUseWin::SetAutoUseItemInfo(v3, &UseItemInfo);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A2180) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NORMAL_ITEM_OFF_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  MinimonAutoItemUseWin::SetAutoUseBuffItem(this->m_pkMinimonAutoItemUseWin, 0);
  return iRevBytes;
}

//----- (004A21A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_CHARGED_ITEM_OFF_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  MinimonAutoItemUseWin::SetAutoUseChargedItem(this->m_pkMinimonAutoItemUseWin, 0);
  return iRevBytes;
}

//----- (004A21C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_USE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 4, 190);
  if ( v3 )
    Char::SetItemAutoUseState(v3, *((_BYTE *)pvData + 2) != 0);
  return iRevBytes;
}

//----- (004A2200) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NOTICE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_WORD *)pvData == 13896 )
    MinimonAutoItemUseWin::AutoUseItemExhausted(this->m_pkMinimonAutoItemUseWin, *((_WORD *)pvData + 1));
  return iRevBytes;
}

//----- (004A2230) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ITEM_INSERT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@3

  v3 = this;
  if ( this->m_pkItemShopWin
    && (unsigned __int8)((int (*)(void))this->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
  {
    ItemShopWin::AddRepurchaseInv(v3->m_pkItemShopWin, (PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *)pvData);
    result = iRevBytes;
  }
  else
  {
    if ( v3->m_pkItemShopWin2 )
    {
      if ( (unsigned __int8)((int (*)(void))v3->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        NPCItemWin::AddRepurchaseInv(v3->m_pkItemShopWin2, (PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *)pvData);
    }
    result = iRevBytes;
  }
  return result;
}

//----- (004A22A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ITEM_DELETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@3

  v3 = this;
  if ( this->m_pkItemShopWin
    && (unsigned __int8)((int (*)(void))this->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
  {
    ItemShopWin::DeleteRepurchaseInv(v3->m_pkItemShopWin, *(_WORD *)pvData);
    result = iRevBytes;
  }
  else
  {
    if ( v3->m_pkItemShopWin2 )
    {
      if ( (unsigned __int8)((int (*)(void))v3->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        NPCItemWin::DeleteRepurchaseInv(v3->m_pkItemShopWin2, *(_WORD *)pvData);
    }
    result = iRevBytes;
  }
  return result;
}

//----- (004A2320) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_OPENCLASSCHANGEMENU_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  ClassChangeWin *v4; // ecx@1

  v3 = this;
  v4 = this->m_pkClassChangeWin;
  if ( v4 )
  {
    ClassChangeWin::SetChangeClassID(v4, *(_BYTE *)pvData);
    ClassChangeWin::SetMoney(v3->m_pkClassChangeWin, *(_QWORD *)((char *)pvData + 1));
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkClassChangeWin->baseclass_0.baseclass_0.baseclass_0);
  }
  return iRevBytes;
}

//----- (004A2370) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SERVERMENU_CLOSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkServerMenuWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}

//----- (004A2390) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_MAPLINK_SCROLL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PgWin *v3; // esi@1
  unsigned __int16 v4; // ax@2

  v3 = (PgWin *)MiniMapWin::GetWorldMap(this->m_pkMiniMapWin);
  if ( v3 )
  {
    v4 = *(_WORD *)pvData;
    if ( *(_WORD *)pvData == 14152 )
    {
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
        return iRevBytes;
      }
    }
    else
    {
      if ( v4 )
        WorldMapWin::WorldMapLinkFail((WorldMapWin *)v3, v4, *((_BYTE *)pvData + 2));
    }
  }
  return iRevBytes;
}

//----- (004A2400) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_MIX_ITEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  bool bSuccess; // [sp+4h] [bp-4h]@1

  v3 = this;
  bSuccess = 1;
  if ( this->m_pkItemMixWin )
  {
    if ( *(_WORD *)pvData != 14272 )
    {
      v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v3, v4);
      bSuccess = 0;
    }
    ItemMixWin::ShowMixResult(v3->m_pkItemMixWin, bSuccess);
  }
  return iRevBytes;
}

//----- (004A2460) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_NEW_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  ItemUpgradeWin *v3; // ecx@1

  v3 = this->m_pkItemUpgradeWin;
  if ( v3 )
    ItemUpgradeWin::UpGradeResult(v3, *(_WORD *)pvData);
  return iRevBytes;
}

//----- (004A2480) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_BRACELET_UPGRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  ItemUpgradeWin *v3; // ecx@1

  v3 = this->m_pkItemUpgradeWin;
  if ( v3 )
    ItemUpgradeWin::UpGradeResult(v3, *(_WORD *)pvData);
  return iRevBytes;
}

//----- (004A24A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_INDUNRANK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork::IDRankingShowWin(this, 1);
  return iRevBytes;
}

//----- (004A24C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_RESULT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  PartyScoreWin *v4; // ecx@1

  v3 = this;
  v4 = this->m_pkPartyScoreWin;
  if ( v4 )
    PartyScoreWin::SetPartyScore(
      v4,
      (SHINE_INDUN_RANK_CLIENT *)((char *)pvData + 5),
      (const unsigned __int16 *)((char *)pvData + 3),
      (const char *)pvData,
      (const char *)pvData + 1,
      (const char *)pvData + 2);
  GameFrameWork::PartyScoreShowWin(v3, 1);
  return iRevBytes;
}

//----- (004A2500) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_LIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  IDRankingWin *v3; // ecx@1

  v3 = this->m_pkIDRankingWin;
  if ( v3 )
    IDRankingWin::SetIDList(v3, (const unsigned __int16 *)pvData, (SHINE_INDUN_INFO *)((char *)pvData + 2));
  return iRevBytes;
}

//----- (004A2530) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_ANI_FILE_CHECK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Name8 v4; // [sp-40h] [bp-84h]@1
  Name8 v5; // [sp-20h] [bp-64h]@1
  Name60Byte v6; // [sp+0h] [bp-44h]@1

  memcpy(&v6, (char *)pvData + 64, sizeof(v6));
  memcpy(&v5, (char *)pvData + 32, sizeof(v5));
  memcpy(&v4, pvData, sizeof(v4));
  AnimationMD5Checksum::CheckAniFileMD5(v4, v5, v6);
  return iRevBytes;
}

//----- (004A2580) --------------------------------------------------------
void __thiscall GameFrameWork::AddNetMsgToWorldMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command)
{
  PgNet *v3; // ecx@1

  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  command = (department << 10) | command & 0x3FF;
  PgNet::AddNetMsg(v3, &command, 2);
}

//----- (004A25B0) --------------------------------------------------------
void __thiscall GameFrameWork::SendNetMsgWorldMgr(GameFrameWork *this, void *pProto, int nDataLength)
{
  PgNet::SendNetMsg(&this->m_spWorldMgrNet.m_pObject->baseclass_0, pProto, nDataLength);
}

//----- (004A25C0) --------------------------------------------------------
void __thiscall GameFrameWork::SendNetMsgWorldMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength)
{
  GameFrameWork *v5; // esi@1
  PgNet *v6; // ecx@1

  v5 = this;
  v6 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  command = (department << 10) | command & 0x3FF;
  PgNet::AddNetMsg(v6, &command, 2);
  PgNet::SendNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, pProto, nDataLength);
}

//----- (004A2610) --------------------------------------------------------
void __thiscall GameFrameWork::AddNetMsgToZoneMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command)
{
  PgNet *v3; // ecx@1

  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  command = (department << 10) | command & 0x3FF;
  PgNet::AddNetMsg(v3, &command, 2);
}

//----- (004A2640) --------------------------------------------------------
void __thiscall GameFrameWork::SendNetMsgZoneMgr(GameFrameWork *this, void *pProto, int nDataLength)
{
  PgNet::SendNetMsg(&this->m_spZoneNet.m_pObject->baseclass_0, pProto, nDataLength);
}

//----- (004A2650) --------------------------------------------------------
void __thiscall GameFrameWork::SendNetMsgZoneMgr(GameFrameWork *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength)
{
  GameFrameWork *v5; // esi@1
  PgNet *v6; // ecx@1

  v5 = this;
  v6 = (PgNet *)this->m_spZoneNet.m_pObject;
  command = (department << 10) | command & 0x3FF;
  PgNet::AddNetMsg(v6, &command, 2);
  PgNet::SendNetMsg(&v5->m_spZoneNet.m_pObject->baseclass_0, pProto, nDataLength);
}

//----- (004A26A0) --------------------------------------------------------
void __thiscall GameFrameWork::Send_NC_MISC_PINGTEST_CLIENT_ZONE_DB(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-84h]@1
  char v4; // [sp+8h] [bp-80h]@1
  DWORD v5; // [sp+Ch] [bp-7Ch]@1
  unsigned int v6; // [sp+84h] [bp-4h]@1
  int v7; // [sp+88h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v5 = timeGetTime();
  v2 = (PgNet *)v1->m_spZoneNet.m_pObject;
  pdata = 2066;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &v4, 124);
}
// A85C00: using guessed type int __security_cookie;

//----- (004A2700) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharReviveCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 4174;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A2730) --------------------------------------------------------
void __thiscall GameFrameWork::NcActWalkReq(GameFrameWork *this, NiPoint3 *kFrom, NiPoint3 *kTo)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-24h]@1
  __int64 v7; // [sp+10h] [bp-20h]@1
  PROTO_NC_ACT_WALK_REQ kProto; // [sp+1Ch] [bp-14h]@1
  unsigned int v9; // [sp+2Ch] [bp-4h]@1
  int v10; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8215;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v7 = (signed __int64)kFrom->x;
  kProto.from.x = v7;
  v7 = (signed __int64)kFrom->y;
  kProto.from.y = v7;
  v7 = (signed __int64)kTo->x;
  kProto.to.x = v7;
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  v7 = (signed __int64)kTo->y;
  kProto.to.y = v7;
  PgNet::SendNetMsg(v5, &kProto, 16);
}
// A85C00: using guessed type int __security_cookie;

//----- (004A2810) --------------------------------------------------------
void __thiscall GameFrameWork::NcActRunReq(GameFrameWork *this, NiPoint3 *kFrom, NiPoint3 *kTo)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@2
  PgNet *v5; // ecx@2
  NETCOMMAND netcmd; // [sp+Ch] [bp-24h]@2
  __int64 v7; // [sp+10h] [bp-20h]@2
  PROTO_NC_ACT_WALK_REQ kProto; // [sp+1Ch] [bp-14h]@2
  unsigned int v9; // [sp+2Ch] [bp-4h]@1
  int v10; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  if ( this->m_bMoveRunCtrl )
  {
    v4 = (PgNet *)this->m_spZoneNet.m_pObject;
    netcmd.protocol = 8217;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    v7 = (signed __int64)kFrom->x;
    kProto.from.x = v7;
    v7 = (signed __int64)kFrom->y;
    kProto.from.y = v7;
    v7 = (signed __int64)kTo->x;
    kProto.to.x = v7;
    v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
    v7 = (signed __int64)kTo->y;
    kProto.to.y = v7;
    PgNet::SendNetMsg(v5, &kProto, 16);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004A2900) --------------------------------------------------------
void __thiscall GameFrameWork::NcActChangeModeReq(GameFrameWork *this, char byMode)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ACT_CHANGEMODE_REQ kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8200;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.mode = byMode;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004A2950) --------------------------------------------------------
void __thiscall GameFrameWork::NcActNPCClickCmd(GameFrameWork *this, unsigned __int16 kHandle)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_ACT_NPCCLICK_CMD kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8202;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.npchandle = kHandle;
  PgNet::SendNetMsg(v4, &kProto, 2);
}

//----- (004A29A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcActEndOfTrade(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 8203;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A29D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcActStopReq(GameFrameWork *this, NiPoint3 *kPos)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_ACT_STOP_REQ kProto; // [sp+4h] [bp-14h]@1
  __int64 v6; // [sp+Ch] [bp-Ch]@1
  NETCOMMAND netcmd; // [sp+14h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8210;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v6 = (signed __int64)kPos->x;
  kProto.loc.x = v6;
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  v6 = (signed __int64)kPos->y;
  kProto.loc.y = v6;
  PgNet::SendNetMsg(v4, &kProto, 8);
}

//----- (004A2A50) --------------------------------------------------------
void __thiscall GameFrameWork::NcActNoticeCmd(GameFrameWork *this, char *pcText)
{
  char *v2; // edi@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@3
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@3

  v2 = pcText;
  v3 = this;
  if ( pcText && *pcText )
  {
    v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    netcmd.protocol = 8208;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    BYTE1(pcText) = strlen(v2);
    if ( BYTE1(pcText) > 0x80u )
      BYTE1(pcText) = -128;
    PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &pcText, 2);
    PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v2, BYTE1(pcText));
    PgNet::Flush(&v3->m_spWorldMgrNet.m_pObject->baseclass_0);
  }
}

//----- (004A2AD0) --------------------------------------------------------
void __thiscall GameFrameWork::NcActJumpCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 8228;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A2B00) --------------------------------------------------------
void __thiscall GameFrameWork::NcActNpcmenuopenAck(GameFrameWork *this, char bySelect)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ACT_NPCMENUOPEN_ACK kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8221;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.ack = bySelect;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004A2B50) --------------------------------------------------------
void __thiscall GameFrameWork::NcActFoldTentCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 8234;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A2B80) --------------------------------------------------------
void __thiscall GameFrameWork::NcActPitchtentCmd(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  NiPoint3 *v2; // eax@1
  PgNet *v3; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  GameFrameWork::NcActStopReq(v1, v2);
  v3 = (PgNet *)v1->m_spZoneNet.m_pObject;
  netcmd.protocol = 8231;
  PgNet::SendNetMsg(v3, &netcmd, 2);
}

//----- (004A2BC0) --------------------------------------------------------
void __thiscall GameFrameWork::NcActEmoticon_Cmd(GameFrameWork *this, char kID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@2
  PgNet *v4; // ecx@2
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@2
  PROTO_NC_ACT_EMOTICON_CMD kProto; // [sp+Bh] [bp-1h]@2

  v2 = this;
  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() != 4 )
  {
    v3 = (PgNet *)v2->m_spZoneNet.m_pObject;
    netcmd.protocol = 8224;
    PgNet::AddNetMsg(v3, &netcmd, 2);
    v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
    kProto.emoticonid = kID;
    PgNet::SendNetMsg(v4, &kProto, 1);
  }
}

//----- (004A2C20) --------------------------------------------------------
void __thiscall GameFrameWork::NcActEmoticonStopCmd(GameFrameWork *this, char kID, unsigned int uiFrame)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  STOPEMOTICON_DESCRIPT kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8226;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.emoticonid = kID;
  kProto.emoticonframe = uiFrame;
  PgNet::SendNetMsg(v5, &kProto, 3);
}

//----- (004A2C70) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharPromoteReq(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 4181;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A2CA0) --------------------------------------------------------
void __thiscall GameFrameWork::NcBatTargettingReq(GameFrameWork *this, unsigned __int16 kHandle)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_BAT_TARGET_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 9217;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.target = kHandle;
  PgNet::SendNetMsg(v4, &kProto, 2);
}

//----- (004A2CF0) --------------------------------------------------------
void __thiscall GameFrameWork::NcBatBashstartCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 9259;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A2D20) --------------------------------------------------------
void __thiscall GameFrameWork::NcBatBashstopCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 9266;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A2D50) --------------------------------------------------------
void __thiscall GameFrameWork::NcBatSkillbashCastabortReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  CastingProgressWin *v3; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 9284;
  PgNet::SendNetMsg(v2, &netcmd, 2);
  v3 = v1->m_pkCastingProgressBar;
  v1->m_kSkillCasting.eState = 0;
  CastingProgressWin::CastingFail(v3);
  v1->m_kSkillCasting.bWaitingForServerCancel = 1;
}

//----- (004A2DB0) --------------------------------------------------------
void __thiscall GameFrameWork::NcBriefInfoCmd(GameFrameWork *this, unsigned __int16 kHandle, int iDepart, int iCommand)
{
  PROTO_NC_BRIEFINFO_INFORM_CMD kProto; // [sp+Ch] [bp-8h]@1

  kProto.ReceiveNetCommand.protocol = ((_WORD)iDepart << 10) | iCommand & 0x3FF;
  kProto.nMyHnd = g_pkMainChar->m_kHandle;
  kProto.hnd = kHandle;
  if ( GameFrameWork::AddAskServerInform(this, Timer::ms_fCurTime, kHandle, &kProto.ReceiveNetCommand) )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 7u, 1u, &kProto, 6);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A2E30) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemBuyReq(GameFrameWork *this, unsigned __int16 kItemID, unsigned int dwLot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  PROTO_NC_ITEM_BUY_REQ kProto; // [sp+4h] [bp-Ch]@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12291;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.itemid = kItemID;
  kProto.lot = dwLot;
  PgNet::SendNetMsg(v5, &kProto, 6);
}

//----- (004A2E80) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemSellReq(GameFrameWork *this, char bySlot, unsigned int dwLot)
{
  GameFrameWork *v3; // esi@1
  Tutorial *v4; // eax@1
  void *v5; // eax@2
  PgNet *v6; // ecx@7
  PgNet *v7; // ecx@7
  PROTO_NC_ITEM_SELL_REQ kProto; // [sp+0h] [bp-1Ch]@7
  void *v9; // [sp+8h] [bp-14h]@2
  NETCOMMAND netcmd; // [sp+Ch] [bp-10h]@7
  int v11; // [sp+18h] [bp-4h]@2

  v3 = this;
  v4 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v5 = operator new(0xB4u);
    v9 = v5;
    v11 = 0;
    if ( v5 )
      Tutorial::Tutorial(v4);
    else
      v4 = 0;
    v11 = -1;
    Singleton<Tutorial>::m_pInstance = v4;
  }
  if ( !v4->m_bLockItemSell )
  {
    v6 = (PgNet *)v3->m_spZoneNet.m_pObject;
    netcmd.protocol = 12294;
    PgNet::AddNetMsg(v6, &netcmd, 2);
    v7 = (PgNet *)v3->m_spZoneNet.m_pObject;
    kProto.slot = bySlot;
    kProto.lot = dwLot;
    PgNet::SendNetMsg(v7, &kProto, 5);
  }
}

//----- (004A2F40) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemRelocReq(GameFrameWork *this, ITEM_INVEN *kFrom, ITEM_INVEN *kTo)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  unsigned __int16 v5; // dx@1
  PgNet *v6; // ecx@1
  PROTO_NC_ITEM_RELOC_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12299;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = kTo->Inven;
  v6 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.from.Inven = kFrom->Inven;
  kProto.to.Inven = v5;
  PgNet::SendNetMsg(v6, &kProto, 4);
}

//----- (004A2F90) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemDropReq(GameFrameWork *this, ITEM_INVEN *kFrom, unsigned int dwLot, float fXPos, float fYPos)
{
  GameFrameWork *v5; // esi@1
  PgNet *v6; // ecx@1
  unsigned __int16 v7; // dx@1
  PgNet *v8; // ecx@1
  NETCOMMAND netcmd; // [sp+10h] [bp-1Ch]@1
  PROTO_NC_ITEM_DROP_REQ kProto; // [sp+18h] [bp-14h]@1
  unsigned int v11; // [sp+28h] [bp-4h]@1
  int v12; // [sp+2Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v5 = this;
  v6 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12295;
  PgNet::AddNetMsg(v6, &netcmd, 2);
  v7 = kFrom->Inven;
  kProto.lot = dwLot;
  kProto.slot.Inven = v7;
  v8 = (PgNet *)v5->m_spZoneNet.m_pObject;
  kProto.loc.x = (signed __int64)fXPos;
  kProto.loc.y = (signed __int64)fXPos;
  PgNet::SendNetMsg(v8, &kProto, 14);
  InventoryWin::ms_bGetDropItemActionReady = 0;
}
// A7C517: using guessed type bool InventoryWin__ms_bGetDropItemActionReady;
// A85C00: using guessed type int __security_cookie;

//----- (004A3020) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemPickReq(GameFrameWork *this, unsigned __int16 kItemHandle)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@2
  PgNet *v4; // ecx@2
  PROTO_NC_ITEM_PICK_REQ kProto; // [sp+4h] [bp-8h]@2
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@2

  v2 = this;
  if ( !g_kInventory.m_bWaitingItemDropAck )
  {
    v3 = (PgNet *)this->m_spZoneNet.m_pObject;
    netcmd.protocol = 12297;
    PgNet::AddNetMsg(v3, &netcmd, 2);
    v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
    kProto.itemhandle = kItemHandle;
    PgNet::SendNetMsg(v4, &kProto, 2);
    g_kInventory.m_bWaitingItemDropAck = 1;
  }
}

//----- (004A3080) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemRingEquipReq(GameFrameWork *this, const char bySlot, const char byEquipSlot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_RINGEQUIP_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12304;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.slot = bySlot;
  kProto.equip = byEquipSlot;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004A30D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemMiniMonEquipReq(GameFrameWork *this, const char bySlot, const char byEquipSlot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_MINIMON_EQUIP_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12368;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nSlotNo = bySlot;
  kProto.nEquipSlot = byEquipSlot;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004A3120) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemUseReq(GameFrameWork *this, const char bySlot)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_USE_REQ kProto; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12309;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.invenslot = bySlot;
  kProto.invenType = 9;
  PgNet::SendNetMsg(v4, &kProto, 2);
}

//----- (004A3170) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemUpgradeReq(GameFrameWork *this, char equipSlot, char rawSlot, char raw_left, char raw_right, char raw_middle, unsigned int gift_money)
{
  GameFrameWork *v7; // esi@1
  PgNet *v8; // ecx@1
  PgNet *v9; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-14h]@1
  PROTO_NC_ITEM_UPGRADE_REQ kProto; // [sp+8h] [bp-10h]@1
  unsigned int v12; // [sp+14h] [bp-4h]@1
  int v13; // [sp+18h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v7 = this;
  v8 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12311;
  PgNet::AddNetMsg(v8, &netcmd, 2);
  kProto.equip = equipSlot;
  kProto.raw_left = raw_left;
  kProto.raw_right = raw_right;
  kProto.raw = rawSlot;
  kProto.gift_money = gift_money;
  v9 = (PgNet *)v7->m_spZoneNet.m_pObject;
  kProto.raw_middle = raw_middle;
  PgNet::SendNetMsg(v9, &kProto, 9);
}
// A85C00: using guessed type int __security_cookie;

//----- (004A31F0) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemOpenStoragePageReq(GameFrameWork *this, char byTargePage)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_OPENSTORAGEPAGE_REQ kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12328;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.page = byTargePage;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004A3240) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyJoinProposeRejectAck(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_PARTY_JOINPROPOSE_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v7; // [sp+1Ch] [bp-4h]@1
  int v8; // [sp+20h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 14341;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  *(_DWORD *)&kProto.mastername.n5_name[0] = *(_DWORD *)&kCharID;
  *(_QWORD *)&kProto.mastername.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  *(_QWORD *)&kProto.mastername.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
  PgNet::SendNetMsg(v4, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004A32B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyJoinProposeTimeOutAck(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_PARTY_JOINPROPOSE_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v7; // [sp+1Ch] [bp-4h]@1
  int v8; // [sp+20h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 14342;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  *(_DWORD *)&kProto.mastername.n5_name[0] = *(_DWORD *)&kCharID;
  *(_QWORD *)&kProto.mastername.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  *(_QWORD *)&kProto.mastername.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
  PgNet::SendNetMsg(v4, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004A3320) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyMemberinforeqCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 14408;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A3350) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyItemLootingSet(GameFrameWork *this, LOOTING_TYPE eType, char eLootType)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_PARTY_ITEM_LOOTING_SET kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 14411;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  kProto.nItemGrade = eLootType;
  kProto.lootingtype = eType;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004A33A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyFinderListReq(GameFrameWork *this, unsigned __int16 wPageNum, unsigned __int16 wMaxItemPerPage)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  PROTO_NC_PARTY_FINDER_LIST_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 14420;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  kProto.nPageNo = wPageNum;
  kProto.nCountOfOnePage = wMaxItemPerPage;
  PgNet::SendNetMsg(v5, &kProto, 3);
}

//----- (004A33F0) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyFinderAddCommentReq(GameFrameWork *this, char *pchText)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 14416;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, pchText, 128);
}

//----- (004A3430) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyFinderDelCommentReq(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  LOWORD(netcmd) = 14418;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A3460) --------------------------------------------------------
void __thiscall GameFrameWork::NcMenuServerMenuAck(GameFrameWork *this, const char ucReply)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_MENU_SERVERMENU_ACK kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 15362;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.reply = ucReply;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004A34B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeProposeAskNoAck(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 19459;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A34E0) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeProposeyesAck(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 19462;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A3510) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeProposeCancelCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 19463;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A3540) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeUpboardReq(GameFrameWork *this, const char bySlot)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_TRADE_UPBOARD_REQ kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 19469;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.slotinven = bySlot;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004A3590) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeDownboardReq(GameFrameWork *this, const char bySlot)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_TRADE_DOWNBOARD_REQ kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 19473;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.slotboard = bySlot;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004A35E0) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeCenboardingReq(GameFrameWork *this, const unsigned __int64 qwCen)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_TRADE_CENBOARDING_REQ kProto; // [sp+4h] [bp-Ch]@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 19477;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.cen = qwCen;
  PgNet::SendNetMsg(v4, &kProto, 8);
}

//----- (004A3630) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeBoardlockReq(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 19481;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A3660) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeDecideReq(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 19487;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A3690) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeCancelReq(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 19466;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A36C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcSoulStoneHPBuyReq(GameFrameWork *this, unsigned __int16 wNumber)
{
  unsigned __int16 v2; // di@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@2
  PgNet *v5; // ecx@2
  PROTO_NC_SOULSTONE_HP_BUY_REQ kProto; // [sp+8h] [bp-4h]@2

  v2 = wNumber;
  v3 = this;
  if ( wNumber )
  {
    v4 = (PgNet *)this->m_spZoneNet.m_pObject;
    wNumber = 20481;
    PgNet::AddNetMsg(v4, &wNumber, 2);
    v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
    kProto.number = v2;
    PgNet::SendNetMsg(v5, &kProto, 2);
  }
}

//----- (004A3710) --------------------------------------------------------
void __thiscall GameFrameWork::NcSoulStoneSPBuyReq(GameFrameWork *this, unsigned __int16 wNumber)
{
  unsigned __int16 v2; // di@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@2
  PgNet *v5; // ecx@2
  PROTO_NC_SOULSTONE_SP_BUY_REQ kProto; // [sp+8h] [bp-4h]@2

  v2 = wNumber;
  v3 = this;
  if ( wNumber )
  {
    v4 = (PgNet *)this->m_spZoneNet.m_pObject;
    wNumber = 20482;
    PgNet::AddNetMsg(v4, &wNumber, 2);
    v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
    kProto.number = v2;
    PgNet::SendNetMsg(v5, &kProto, 2);
  }
}

//----- (004A3760) --------------------------------------------------------
void __thiscall GameFrameWork::NcSoulStoneHPUseReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@2
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( !Char::CheckActState(g_pkMainChar, 500000) )
  {
    v2 = (PgNet *)v1->m_spZoneNet.m_pObject;
    netcmd.protocol = 20487;
    PgNet::SendNetMsg(v2, &netcmd, 2);
  }
}

//----- (004A37A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcSoulStoneSPUseReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@2
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( !Char::CheckActState(g_pkMainChar, 500000) )
  {
    v2 = (PgNet *)v1->m_spZoneNet.m_pObject;
    netcmd.protocol = 20489;
    PgNet::SendNetMsg(v2, &netcmd, 2);
  }
}

//----- (004A37E0) --------------------------------------------------------
void __cdecl EmpowerAlloc(unsigned __int16 kID, Skill::EmpowerInfo kEmpowerInfo)
{
  unsigned __int16 v2; // ax@1
  int v3; // edi@1
  char v4; // dl@3
  char v5; // cl@3
  __int16 v6; // ax@3
  char v7; // bl@3
  Skill::EmpowerInfo *v8; // eax@13
  char v9; // dl@13
  char v10; // bl@13
  char v11; // cl@13
  char v12; // al@13
  char v13; // al@26
  char v14; // al@31
  PROTO_NC_SKILL_EMPOWALLOC_REQ kReqPart; // [sp+4h] [bp-1Ch]@2
  Skill::EmpowerInfo result; // [sp+Ch] [bp-14h]@13
  int iMaxLevel; // [sp+10h] [bp-10h]@1
  int iCurrLevel; // [sp+14h] [bp-Ch]@1
  Skill::EmpowerInfo kCurrSkillEmpowerInfo; // [sp+18h] [bp-8h]@13
  Skill::EmpowerInfo kInfoPart; // [sp+1Ch] [bp-4h]@35
  int kIDa; // [sp+28h] [bp+8h]@1

  iCurrLevel = 1;
  v2 = Skill::GetBaseSkillID(kID, &iMaxLevel);
  v3 = v2;
  kIDa = v2;
  if ( v2 != -1 )
  {
    *(_DWORD *)&kReqPart.skill = 0;
    kReqPart.minus._bf0 = 0;
    if ( kEmpowerInfo )
    {
      v4 = kEmpowerInfo.cSmallSp;
      v5 = kEmpowerInfo.cDamageUp;
      v6 = kReqPart.plus._bf0;
      v7 = kEmpowerInfo.cLongKeepTime;
      do
      {
        if ( iCurrLevel > iMaxLevel )
          break;
        if ( v5 > 0 )
        {
          kReqPart.plus._bf0 = v6 & 0xFFF0 | v5 & 0xF;
          v6 = v6 & 0xFFF0 | v5 & 0xF;
          kEmpowerInfo.cDamageUp = 0;
        }
        if ( v4 > 0 )
        {
          kReqPart.plus._bf0 = v6 & 0xFF0F | 16 * (v4 & 0xF);
          v6 = v6 & 0xFF0F | 16 * (v4 & 0xF);
          kEmpowerInfo.cSmallSp = 0;
        }
        if ( v7 > 0 )
        {
          kReqPart.plus._bf0 = v6 & 0xF0FF | ((v7 & 0xF) << 8);
          v6 = v6 & 0xF0FF | ((v7 & 0xF) << 8);
          kEmpowerInfo.cLongKeepTime = 0;
        }
        if ( kEmpowerInfo.cShortCoolTime > 0 )
        {
          kReqPart.plus._bf0 = v6 & 0xFFF | ((signed __int16)kEmpowerInfo.cShortCoolTime << 12);
          kEmpowerInfo.cShortCoolTime = 0;
        }
        v8 = Skill::GetEmpowerInfo(&result, v3);
        v9 = v8->cShortCoolTime;
        v10 = v8->cLongKeepTime;
        v11 = v8->cDamageUp;
        v12 = v8->cSmallSp;
        kCurrSkillEmpowerInfo.cShortCoolTime = v9;
        kCurrSkillEmpowerInfo.cLongKeepTime = v10;
        if ( kEmpowerInfo.cDamageUp < 0 )
        {
          if ( v11 >= -kEmpowerInfo.cDamageUp )
            v11 = -kEmpowerInfo.cDamageUp;
          if ( v11 > 0 )
          {
            v10 = kCurrSkillEmpowerInfo.cLongKeepTime;
            kReqPart.minus._bf0 = kReqPart.minus._bf0 & 0xFFF0 | v11 & 0xF;
            kEmpowerInfo.cDamageUp += v11;
          }
          v3 = kIDa;
        }
        if ( kEmpowerInfo.cSmallSp < 0 )
        {
          if ( v12 >= -kEmpowerInfo.cSmallSp )
            v12 = -kEmpowerInfo.cSmallSp;
          if ( v12 > 0 )
          {
            kReqPart.minus._bf0 = kReqPart.minus._bf0 & 0xFF0F | 16 * (v12 & 0xF);
            kEmpowerInfo.cSmallSp += v12;
          }
        }
        if ( kEmpowerInfo.cLongKeepTime < 0 )
        {
          v13 = v10 >= -kEmpowerInfo.cLongKeepTime ? -kEmpowerInfo.cLongKeepTime : v10;
          if ( v13 > 0 )
          {
            kReqPart.minus._bf0 = kReqPart.minus._bf0 & 0xF0FF | ((v13 & 0xF) << 8);
            kEmpowerInfo.cLongKeepTime += v13;
          }
        }
        if ( kEmpowerInfo.cShortCoolTime < 0 )
        {
          v14 = kCurrSkillEmpowerInfo.cShortCoolTime;
          if ( kCurrSkillEmpowerInfo.cShortCoolTime >= -kEmpowerInfo.cShortCoolTime )
            v14 = -kEmpowerInfo.cShortCoolTime;
          if ( v14 > 0 )
          {
            kReqPart.minus._bf0 = kReqPart.minus._bf0 & 0xFFF | ((signed __int16)v14 << 12);
            kEmpowerInfo.cShortCoolTime += v14;
          }
        }
        kInfoPart.cDamageUp = (kReqPart.plus._bf0 & 0xF) - (kReqPart.minus._bf0 & 0xF);
        kInfoPart.cSmallSp = (LOBYTE(kReqPart.plus._bf0) >> 4) - (LOBYTE(kReqPart.minus._bf0) >> 4);
        v6 = kReqPart.plus._bf0;
        kInfoPart.cLongKeepTime = (HIBYTE(kReqPart.plus._bf0) & 0xF) - (HIBYTE(kReqPart.minus._bf0) & 0xF);
        kInfoPart.cShortCoolTime = ((*(_DWORD *)&kReqPart.plus._bf0 >> 12) & 0xF)
                                 - ((*(_DWORD *)&kReqPart.minus._bf0 >> 12) & 0xF);
        if ( kInfoPart )
        {
          SkillEmpowerRequest::Register(v3, kInfoPart);
          kReqPart.skill = v3;
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x12u, 0x11u, &kReqPart, 6);
          v6 = kReqPart.plus._bf0;
        }
        ++iCurrLevel;
        v7 = kEmpowerInfo.cLongKeepTime;
        v4 = kEmpowerInfo.cSmallSp;
        v5 = kEmpowerInfo.cDamageUp;
        ++v3;
        kIDa = v3;
      }
      while ( kEmpowerInfo );
    }
  }
}

//----- (004A3A80) --------------------------------------------------------
void __thiscall GameFrameWork::NcSkillEmpowallocReq(GameFrameWork *this, PROTO_NC_SKILL_EMPOWALLOC_REQ *rkReq)
{
  PROTO_NC_SKILL_EMPOWALLOC_REQ *v2; // eax@1
  __int16 v3; // dx@1
  unsigned int v4; // ecx@1
  Skill::EmpowerInfo kInfo; // [sp+10h] [bp+8h]@1

  v2 = rkReq;
  v3 = rkReq->plus._bf0;
  kInfo.cDamageUp = (rkReq->plus._bf0 & 0xF) - (rkReq->minus._bf0 & 0xF);
  v4 = v2->minus._bf0;
  kInfo.cSmallSp = ((unsigned __int8)v3 >> 4) - (((unsigned __int8)v2->minus._bf0 >> 4) & 0xF);
  kInfo.cLongKeepTime = (((unsigned __int16)v2->plus._bf0 >> 8) & 0xF) - (BYTE1(v4) & 0xF);
  kInfo.cShortCoolTime = (((unsigned int)v2->plus._bf0 >> 12) & 0xF) - ((v4 >> 12) & 0xF);
  EmpowerAlloc(v2->skill, kInfo);
}

//----- (004A3B00) --------------------------------------------------------
void __thiscall GameFrameWork::NcSkillEmpowResetReq(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 18442;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A3B30) --------------------------------------------------------
void __thiscall GameFrameWork::NcFriendFindReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = 21535;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004A3B70) --------------------------------------------------------
void __thiscall GameFrameWork::NcFriendPointReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = 21533;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004A3BB0) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemSplitReq(GameFrameWork *this, ITEM_INVEN *kFrom, ITEM_INVEN *kTo, unsigned int uiVal)
{
  GameFrameWork *v4; // esi@1
  PgNet *v5; // ecx@1
  unsigned __int16 v6; // dx@1
  PgNet *v7; // ecx@1
  PROTO_NC_ITEM_SPLIT_REQ kProto; // [sp+4h] [bp-Ch]@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-4h]@1

  v4 = this;
  v5 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12301;
  PgNet::AddNetMsg(v5, &netcmd, 2);
  v6 = kTo->Inven;
  kProto.from.Inven = kFrom->Inven;
  v7 = (PgNet *)v4->m_spZoneNet.m_pObject;
  kProto.to.Inven = v6;
  kProto.lot = uiVal;
  PgNet::AddNetMsg(v7, &kProto, 8);
  PgNet::SendNetMsg(&v4->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004A3C20) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothCloseReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  pdata = 26628;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004A3C60) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothInterioStartReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  pdata = 26640;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004A3CA0) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothEntryReq(GameFrameWork *this, unsigned __int16 sHandle)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@3
  PROTO_NC_BOOTH_ENTRY_REQ kProto; // [sp+4h] [bp-8h]@3
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@3

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
  netcmd.protocol = 26631;
  PgNet::AddNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &netcmd, 2);
  v3 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.booth = sHandle;
  PgNet::AddNetMsg(v3, &kProto, 2);
  PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004A3D20) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothItemTradeReq(GameFrameWork *this, unsigned __int16 booth, char boothslot, unsigned __int16 itemnum)
{
  GameFrameWork *v4; // esi@1
  PgNet *v5; // ecx@1
  PgNet *v6; // ecx@1
  PROTO_NC_BOOTH_ITEMTRADE_REQ kProto; // [sp+4h] [bp-Ch]@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-4h]@1

  v4 = this;
  InventoryWin::ms_bBuyPrivateStoreActionReady = 0;
  v5 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 26637;
  PgNet::AddNetMsg(v5, &netcmd, 2);
  kProto.booth = booth;
  kProto.itemnum = itemnum;
  v6 = (PgNet *)v4->m_spZoneNet.m_pObject;
  kProto.slot = boothslot;
  PgNet::AddNetMsg(v6, &kProto, 5);
  PgNet::SendNetMsg(&v4->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
}
// A7C518: using guessed type bool InventoryWin__ms_bBuyPrivateStoreActionReady;

//----- (004A3D90) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_SOMEONEOPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // ebx@2
  PrivateStoreBD *v4; // eax@3
  unsigned __int16 v5; // cx@5
  void (__thiscall *v6)(AbStateInfectee *, ABSTATEINDEX, bool, int); // eax@5
  STREETBOOTH_SIGNBOARD v8; // [sp-24h] [bp-30h]@5
  __int16 v9; // [sp-8h] [bp-14h]@5
  signed int v10; // [sp-4h] [bp-10h]@5

  if ( g_pkMainChar->m_kHandle != *(_WORD *)pvData )
  {
    v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 26, 3);
    if ( v3 )
    {
      v4 = ScreenBDMgr::GetPrivateStoreBD(&g_kScrnBDMgr, *(_WORD *)pvData);
      if ( v4 )
        ScreenBDMgr::RemovePrivateStoreBD(&g_kScrnBDMgr, v4);
      v5 = *((_WORD *)pvData + 1);
      v6 = v3->baseclass_0.vfptr[1].SetAbStateProperty;
      v10 = 5;
      v3->m_byMiniHouseSkinID = v5;
      ((void (__thiscall *)(Char *, signed int, signed int))v6)(v3, 1, v10);
      v10 = *((_BYTE *)pvData + 14) != 0;
      memcpy(&v8, (char *)pvData + 15, 0x1Cu);
      v9 = *(_WORD *)((char *)pvData + 43);
      Char::SetCampSignBoard(v3, v8, v10);
    }
  }
  return iRevBytes;
}

//----- (004A3E20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_SOMEONECLOSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@0
  GameFrameWork *v4; // edi@1
  Char *v5; // eax@2
  Char *v6; // esi@2
  int v8; // [sp-4h] [bp-Ch]@2

  v4 = this;
  if ( g_pkMainChar->m_kHandle != *(_WORD *)pvData )
  {
    v8 = v3;
    v5 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 26, 6);
    v6 = v5;
    if ( v5 )
    {
      if ( !(unsigned __int8)((int (__thiscall *)(Char *, int))v5->baseclass_0.vfptr[20].SetAbStateProperty)(v5, v8) )
        v6->baseclass_0.vfptr[2].Affect((AbStateInfectee *)v6, 0, (bool)((char *)pvData + 2));
      ((void (__thiscall *)(Char *, _DWORD))v6->baseclass_0.vfptr[1].SetAbStateProperty)(v6, 0);
    }
    if ( v4->m_pkPrivateStoreWin )
    {
      if ( PrivateStoreWin::ms_uiPrivateStoreMode )
      {
        if ( PrivateStoreWin::ms_uiPrivateStoreMode == 2
          && PrivateStoreWin::ms_BoothHandle == *(_WORD *)pvData
          && (unsigned __int8)((int (*)(void))v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        if ( PrivateStoreWin::ms_BoothHandle == *(_WORD *)pvData
          && (unsigned __int8)((int (*)(void))v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
          return iRevBytes;
        }
      }
    }
  }
  return iRevBytes;
}
// 4A3E20: could not find valid save-restore pair for esi
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (004A3F10) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothReflashReq(GameFrameWork *this, unsigned __int16 booth)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@2
  PROTO_NC_BOOTH_REFRESH_REQ kProto; // [sp+4h] [bp-8h]@2
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@2

  v2 = this;
  if ( dwLastSendTime + 5000 <= timeGetTime() )
  {
    InventoryWin::ms_bBuyPrivateStoreActionReady = 0;
    v3 = (PgNet *)v2->m_spZoneNet.m_pObject;
    netcmd.protocol = 26634;
    PgNet::AddNetMsg(v3, &netcmd, 2);
    kProto.booth = booth;
    PgNet::AddNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &kProto, 2);
    PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
  }
}
// A7C518: using guessed type bool InventoryWin__ms_bBuyPrivateStoreActionReady;

//----- (004A3F80) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothSearchItemListCategorized(GameFrameWork *this, unsigned int kCategoryType, bool bOnlyMyClass, bool bFirst)
{
  GameFrameWork *v4; // esi@1
  PgNet *v5; // ecx@1
  PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_REQ kProto; // [sp+4h] [bp-8h]@1

  v4 = this;
  kProto.bReqOnlyMyClass = bOnlyMyClass;
  kProto.Category = kCategoryType;
  v5 = (PgNet *)this->m_spZoneNet.m_pObject;
  kProto.bIsOpeningReq = bFirst;
  *(_WORD *)&bOnlyMyClass = 26643;
  PgNet::AddNetMsg(v5, &bOnlyMyClass, 2);
  PgNet::SendNetMsg(&v4->m_spZoneNet.m_pObject->baseclass_0, &kProto, 6);
}

//----- (004A3FD0) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothSearchBoothPosition(GameFrameWork *this, unsigned int BoothItemHandle, unsigned __int16 TargetCharHandle)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@3
  PROTO_NC_BOOTH_SEARCH_BOOTH_POSITION_REQ kProto; // [sp+4h] [bp-8h]@3

  v3 = this;
  if ( BoothItemHandle != -1 )
  {
    if ( TargetCharHandle != -1 )
    {
      kProto.nTargetBoothOwnerHandle = TargetCharHandle;
      kProto.nBoothItemHandle = BoothItemHandle;
      v4 = (PgNet *)this->m_spZoneNet.m_pObject;
      TargetCharHandle = 26645;
      PgNet::AddNetMsg(v4, &TargetCharHandle, 2);
      PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &kProto, 6);
    }
  }
}

//----- (004A4030) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharTitleSetReq(GameFrameWork *this, unsigned int dwData)
{
  GameFrameWork *v2; // esi@1
  CharInfoWin *v3; // eax@1
  CharTitleWin *v4; // ecx@2
  PgNet *v5; // ecx@5
  PROTO_NC_CT_SET_CURRENT_REQ kProto; // [sp+4h] [bp-4h]@3

  v2 = this;
  v3 = this->m_pkCharInfoWin;
  if ( v3 )
  {
    v4 = v3->m_pkCharTitleWin;
    if ( v4 )
    {
      kProto.Type = v4->ms_ctWinListInfo[dwData].Type;
      if ( kProto.Type != 10 )
      {
        kProto.ElementNo = v3->m_pkCharTitleWin->ms_ctWinListInfo[dwData]._bf1 & 0x3F;
        kProto.MobID = 0;
      }
      v5 = (PgNet *)v2->m_spZoneNet.m_pObject;
      LOWORD(dwData) = 24577;
      PgNet::AddNetMsg(v5, &dwData, 2);
      PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &kProto, 4);
    }
  }
}

//----- (004A40B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqStatusReq(GameFrameWork *this, unsigned int Handle)
{
  unsigned int v2; // eax@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PROTO_NC_KQ_STATUS_REQ kProto; // [sp+4h] [bp-4h]@1

  v2 = Handle;
  v3 = this;
  LOWORD(Handle) = 22531;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  kProto.Handle = v2;
  PgNet::AddNetMsg(v4, &Handle, 2);
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 4);
}

//----- (004A40F0) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqListRefreshReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-8h]@1
  PROTO_NC_KQ_LIST_REFRESH_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = 22555;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004A4130) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqJoinReq(GameFrameWork *this, unsigned int Handle)
{
  unsigned int v2; // eax@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PROTO_NC_KQ_JOIN_REQ kProto; // [sp+4h] [bp-4h]@1

  v2 = Handle;
  v3 = this;
  LOWORD(Handle) = 22533;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  kProto.Handle = v2;
  PgNet::AddNetMsg(v4, &Handle, 2);
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 4);
}

//----- (004A4170) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqJoinCancelReq(GameFrameWork *this, unsigned int Handle)
{
  unsigned int v2; // eax@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PROTO_NC_KQ_JOIN_CANCEL_REQ kProto; // [sp+4h] [bp-4h]@1

  v2 = Handle;
  v3 = this;
  LOWORD(Handle) = 22535;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  kProto.Handle = v2;
  PgNet::AddNetMsg(v4, &Handle, 2);
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 4);
}

//----- (004A41B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcUserPacketToWorld(GameFrameWork *this, DirectUserMsgBody_SendPacket *pkPacketBody)
{
  void *v2; // edi@1
  GameFrameWork *v3; // esi@1
  int v4; // ebx@2
  PgNet *v5; // ecx@3

  v2 = pkPacketBody->pvPacket;
  v3 = this;
  if ( v2 )
  {
    v4 = pkPacketBody->uiPacketSize;
    LOWORD(pkPacketBody) = (pkPacketBody->wDepartment << 10) | pkPacketBody->wCommand & 0x3FF;
    PgNet::AddNetMsg(&this->m_spWorldMgrNet.m_pObject->baseclass_0, &pkPacketBody, 2);
    PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v2, v4);
  }
  else
  {
    v5 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    LOWORD(pkPacketBody) = (pkPacketBody->wDepartment << 10) | pkPacketBody->wCommand & 0x3FF;
    PgNet::SendNetMsg(v5, &pkPacketBody, 2);
  }
}

//----- (004A4240) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_PINGTEST_TOOL_WM_CLIENT_ZONE_DB(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  GameFrameWork *v4; // esi@1
  PgNet *v5; // ecx@2
  int result; // eax@2
  PgNet *v7; // ecx@3

  v3 = pvData;
  v4 = this;
  if ( *((_DWORD *)pvData + 11) )
  {
    *((_DWORD *)pvData + 12) = timeGetTime();
    v5 = (PgNet *)v4->m_spWorldMgrNet.m_pObject;
    LOWORD(pvData) = 2067;
    PgNet::AddNetMsg(v5, &pvData, 2);
    PgNet::SendNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, v3, 164);
    result = iRevBytes;
  }
  else
  {
    *((_DWORD *)pvData + 11) = timeGetTime();
    v7 = (PgNet *)v4->m_spZoneNet.m_pObject;
    LOWORD(pvData) = 2067;
    PgNet::AddNetMsg(v7, &pvData, 2);
    PgNet::SendNetMsg(&v4->m_spZoneNet.m_pObject->baseclass_0, v3, 164);
    result = iRevBytes;
  }
  return result;
}

//----- (004A42D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcMiscWebKeyReq(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  LOWORD(netcmd) = 2075;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A4300) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_WEB_KEY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  PgWin *v4; // eax@3
  PgWin *v5; // ecx@5
  PgWin *v7; // edi@8
  ShopWin *v8; // ecx@11

  v3 = this;
  if ( *(_WORD *)pvData != 4368 )
  {
    GameFrameWork::AddSysMsg(this, "Item Mall Web Key DB Error!");
    return iRevBytes;
  }
  if ( !nowState || (v4 = this->m_pkMHCurrentWin) == 0 )
    goto LABEL_17;
  if ( !_mbscmp("mhGuestBookWin", v4->baseclass_0.baseclass_0.baseclass_0.m_pcName) )
  {
    v5 = v3->m_pkMHCurrentWin;
    if ( !LOBYTE(v5[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][0]) )
    {
      mhGuestBookWin::ShowWeb((mhGuestBookWin *)v5, (char *)pvData + 2, &v3->m_pkMHEditRoomWin->m_Tkey);
      return iRevBytes;
    }
    return iRevBytes;
  }
  if ( _mbscmp("mhEditRoomWin", v3->m_pkMHCurrentWin->baseclass_0.baseclass_0.baseclass_0.m_pcName) )
  {
LABEL_17:
    v8 = v3->m_pkShopWin;
    if ( v8 )
    {
      ShopWin::ClearWebKeyParameter(v8);
      ShopWin::SetWebKeyParameter(v3->m_pkShopWin, (char *)pvData + 2, 0);
      GameFrameWork::OnOpenItemShopWin(v3);
      return iRevBytes;
    }
    return iRevBytes;
  }
  v7 = v3->m_pkMHCurrentWin;
  mhEditRoomWin::ShowComponent(v3->m_pkMHEditRoomWin, 1);
  if ( !LOBYTE(v7[12].baseclass_0.m_kEffectList.baseclass_0.baseclass_0.vfptr) )
    mhEditRoomWin::ShowWeb((mhEditRoomWin *)v7, (char *)pvData + 2);
  return iRevBytes;
}

//----- (004A4410) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_USER_CONNECTCUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@4

  v3 = this;
  if ( !nowState && PgWin::IsVisible(&this->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0) == 1 )
    ShopWin::OnWinClose(v3->m_pkShopWin);
  result = iRevBytes;
  if ( *(_WORD *)pvData == 1667 )
    g_kServer.m_bDoubleConnected = 1;
  return result;
}

//----- (004A4460) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_USER_LOGINWORLD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  g_kServer.m_kWorldMgrHandle = *(_WORD *)pvData;
  User::SetAvatarInfo(&g_kUser, (PROTO_AVATARINFORMATION *)((char *)pvData + 3), *((_BYTE *)pvData + 2));
  Net::NcMiscGameTimeReq(v3->m_spWorldMgrNet.m_pObject);
  GameFrameWork::OnCharSelect(v3);
  return iRevBytes;
}

//----- (004A44A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_STAT_REMAINPOINT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = iRevBytes;
  n = *(_BYTE *)pvData;
  return result;
}

//----- (004A44C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_SOMEONEGUILDCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v3->m_dwGuildRegNum = *(_DWORD *)((char *)pvData + 2);
    v3->m_GuildAcademyMemberFlag = 0;
  }
  return iRevBytes;
}

//----- (004A4500) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_SOMEONEGUILDACADEMYCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GuildAcademySelectWin *v3; // eax@1
  Char *v4; // eax@3

  v3 = GuildAcademySelectTask::GetGuildAcademySelectWin();
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v4 )
  {
    v4->m_dwGuildRegNum = *(_DWORD *)((char *)pvData + 2);
    v4->m_GuildAcademyMemberFlag = 1;
  }
  return iRevBytes;
}

//----- (004A4560) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_LINKSAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  void *v4; // ecx@1
  PrivateStoreWin *v5; // ecx@1
  MHDiceGameTask *v6; // ecx@9
  bool v7; // bl@9
  MHDiceGameTask *v8; // edi@10
  MHDiceGameTask *v9; // ecx@14
  int v10; // edi@15
  GTTDiceWin *v11; // eax@19
  PgWin *v12; // eax@20
  GuildTournamentScheduleWin *v13; // eax@21
  PgWin *v14; // eax@22
  GuildNpcMenuWin *v15; // eax@23
  PgWin *v16; // eax@24
  GuildTournamentBaseWin *v17; // eax@25
  PgWin *v18; // eax@26
  GTStatusWin *v19; // eax@27
  PgWin *v20; // eax@28
  GTStatusMiniWin *v21; // eax@29
  PgWin *v22; // eax@30
  AnnounceWin *v23; // ecx@31
  CameraEffect *v24; // ecx@35
  MarketSearchWin *v25; // ecx@37
  MiniMapWin *v26; // ecx@39
  int v28; // [sp+20h] [bp-14h]@14
  NiPointer<MHDiceGameTask> result; // [sp+24h] [bp-10h]@9
  int v30; // [sp+30h] [bp-4h]@9

  v3 = this;
  v4 = pvData;
  v3->m_kNextFrameWorkID = LinkFrameWorkID;
  *(_DWORD *)&v3->m_kProtoNcMapLinkSameCmd.mapid = *(_DWORD *)v4;
  *(unsigned int *)((char *)&v3->m_kProtoNcMapLinkSameCmd.location.x + 2) = *((_DWORD *)v4 + 1);
  HIWORD(v3->m_kProtoNcMapLinkSameCmd.location.y) = *((_WORD *)v4 + 4);
  v3->m_bLinkSameServer = 1;
  v3->m_kNextFrameWorkMsg.m_uiFramelParam = (unsigned int)&v3->m_kProtoNcMapLinkSameCmd;
  v3->m_kNextFrameWorkMsg.m_uiFrameWParam = 1;
  PgFrameWork::PostFrameMsgPop(&v3->baseclass_0, LinkFrameWorkID, &v3->m_kNextFrameWorkMsg);
  v5 = v3->m_pkPrivateStoreWin;
  if ( v5
    && (unsigned __int8)((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
  MiniMapWin::ClearWithOutMainChar(v3->m_pkMiniMapWin);
  MiniMapWin::ClearParty(v3->m_pkMiniMapWin);
  MiniMapWin::RemoveAllMapMark(v3->m_pkMiniMapWin);
  MiniMapWin::RemoveAllKQTeamMark(v3->m_pkMiniMapWin);
  CastingProgressWin::CastingFail(v3->m_pkCastingProgressBar);
  v3->m_kSkillCasting.eState = 0;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
    Char::Shape_UnMetamorphosis(g_pkMainChar, 0);
  PkRealTiemRankWin::Close(v3->m_pkKQPKRealTimeRankWin, 0);
  PkKqRankingWin::Clear(v3->m_pkPkKqRankingWin);
  ((void (__stdcall *)(_DWORD))v3->m_pkPkKqRankingWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GameFrameWork::CloseMapLinkGateWin(v3);
  if ( v3->m_kCharMover.m_bAutoRun )
    KeyboardMoveProcess::SetAutoRun(&v3->m_kCharMover, 0);
  GameFrameWork::Stick(v3, 0, 0);
  if ( nowState )
  {
    v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    v30 = 0;
    v7 = MHDiceGameTask::IsDicegamePlaying(v6);
    v30 = -1;
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    if ( v7 )
    {
      LOWORD(pvData) = 7312;
      v9 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v28)->m_pObject;
      v30 = 1;
      MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_ACK(v9, (PROTO_NC_DICE_TAISAI_GAME_LEAVE_ACK *)&pvData);
      v30 = -1;
      if ( v28 )
      {
        v10 = v28;
        if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) )
        {
          if ( v10 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        }
      }
    }
    GameFrameWork::CloseMHInfoWin(v3, 1);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v11 = GuildTask::GetGTTDiceWin();
  if ( (unsigned __int8)((int (__thiscall *)(GTTDiceWin *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v11) )
  {
    v12 = (PgWin *)GuildTask::GetGTTDiceWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v12);
  }
  v13 = GuildTask::GetGuildTournamentScheduleWin();
  if ( (unsigned __int8)((int (__thiscall *)(GuildTournamentScheduleWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v13) )
  {
    v14 = (PgWin *)GuildTask::GetGuildTournamentScheduleWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v14);
  }
  v15 = GuildTask::GetGuildNpcMenuWin();
  if ( (unsigned __int8)((int (__thiscall *)(GuildNpcMenuWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v15) )
  {
    v16 = (PgWin *)GuildTask::GetGuildNpcMenuWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v16);
  }
  v17 = GuildTask::GetGuildTournamnetBaseWin();
  if ( (unsigned __int8)((int (__thiscall *)(GuildTournamentBaseWin *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v17) )
  {
    v18 = (PgWin *)GuildTask::GetGuildTournamnetBaseWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v18);
  }
  MiniMapWin::ShowGTQuit(v3->m_pkMiniMapWin, 0);
  v19 = GuildTask::GetGTStatusWin();
  if ( (unsigned __int8)((int (__thiscall *)(GTStatusWin *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v19) )
  {
    v20 = (PgWin *)GuildTask::GetGTStatusWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v20);
  }
  v21 = GuildTask::GetGTStatusMiniWin();
  if ( (unsigned __int8)((int (__thiscall *)(GTStatusMiniWin *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v21) )
  {
    v22 = (PgWin *)GuildTask::GetGTStatusMiniWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v22);
  }
  MachineOpt::SaveUserInfo();
  v23 = v3->m_pkRemainAnnounceWin;
  if ( v23 )
    AnnounceWin::KillNoticing(v23);
  if ( v3->m_pkIDTimeWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkIDTimeWin->baseclass_0.baseclass_0.baseclass_0);
  v24 = v3->m_spCamEffect.m_pObject;
  if ( v24 )
    CameraEffect::ClearMove(v24);
  CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
  unk_AA2801 = 0;
  EffectMgr::RemoveAllClientEff(&g_kEffectMgr);
  v25 = v3->m_pkMarketSearchWin;
  if ( v25 )
  {
    MarketSearchWin::CloseSearchingMsgBox(v25);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkMarketSearchWin->baseclass_0.baseclass_0.baseclass_0);
  }
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEventTimeWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEventRankWin->baseclass_0.baseclass_0.baseclass_0);
  v26 = v3->m_pkMiniMapWin;
  if ( v26 )
    MiniMapWin::NotViewInDunLevelFlag(v26);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A4920) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_FREEPKZONE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) &= 0xFDu;
  return iRevBytes;
}

//----- (004A4940) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_PARTYBATTLEZONE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) &= 0xFEu;
  return iRevBytes;
}

//----- (004A4960) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_KQTEAMBATTLEZONE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) |= 4u;
  return iRevBytes;
}

//----- (004A4980) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_KQTEAMBATTLEZONE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) &= 0xFBu;
  return iRevBytes;
}

//----- (004A49A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_LOGINCHARACTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  Char *v4; // esi@5
  NiPoint3 *v5; // eax@6
  int v6; // eax@7
  _BYTE v7[12]; // ST10_12@7
  _BYTE v8[12]; // ST04_12@7
  unsigned __int16 v9; // ST20_2@19
  Effect *v10; // eax@19
  _BYTE v11[20]; // ST10_20@25
  CClientGuildAcademy *v12; // eax@25
  unsigned int *v14; // [sp-10h] [bp-38h]@22
  char *v15; // [sp-Ch] [bp-34h]@22
  int dwDummy; // [sp+20h] [bp-8h]@22
  unsigned int v17; // [sp+24h] [bp-4h]@1
  int v18; // [sp+28h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = this;
  if ( !unk_AA2801 && *((_BYTE *)pvData + 32) )
  {
    if ( g_pkMainChar->m_kHandle != *(_WORD *)pvData )
      CharMgr::AddChar(&g_kCharMgr, (PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *)pvData, 0);
    v4 = GameFrameWork::GetCharByHandle(v3, *(_WORD *)pvData, 7, 6);
    if ( v4 )
    {
      v5 = (NiPoint3 *)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
      if ( MainChar::IsView((MainChar *)g_pkMainChar, v5) )
      {
        v6 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
        *(_DWORD *)v7 = (_DWORD)NiPoint3::UNIT_Y.x;
        *(_QWORD *)&v7[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
        *(_DWORD *)v8 = *(_DWORD *)v6;
        *(_QWORD *)&v8[4] = *(_QWORD *)(v6 + 4);
        EffectMgr::CreateEffect(&g_kEffectMgr, "Regen", *(NiPoint3 *)v8, *(NiPoint3 *)v7, Timer::ms_fCurTime, 1.0);
      }
      v4->m_kCharShape.m_bAutoPickItem = *((_BYTE *)pvData + 199) != 0;
      if ( Char::GetClass(v4) == 4
        || Char::GetClass(v4) == 5
        || Char::GetClass(v4) == 9
        || Char::GetClass(v4) == 10
        || Char::GetClass(v4) == 14
        || Char::GetClass(v4) == 15
        || Char::GetClass(v4) == 19
        || Char::GetClass(v4) == 20
        || Char::GetClass(v4) == 24
        || Char::GetClass(v4) == 25
        || Char::GetClass(v4) == 27 )
      {
        v9 = v4->m_kHandle;
        v4->m_iCharLevel = *((_BYTE *)pvData + 200);
        v10 = EffectMgr::FindAuraEffect(&g_kEffectMgr, v9);
        if ( v10 )
          EffectMgr::RemoveEffect(&g_kEffectMgr, v10);
        if ( *((_BYTE *)pvData + 200) < 0x78u )
        {
          v15 = "Aura100";
          v14 = (unsigned int *)&dwDummy;
        }
        else
        {
          v15 = "Aura120";
          v14 = (unsigned int *)&dwDummy;
        }
        EffectMgr::CreateAttachEffect(&g_kEffectMgr, v14, v15, v4, None, Timer::ms_fCurTime, 1, 1, 0, 1);
      }
      *(_QWORD *)v11 = *(_QWORD *)((char *)pvData + 2);
      *(_QWORD *)&v11[8] = *(_QWORD *)((char *)pvData + 10);
      *(_DWORD *)&v11[16] = *(_DWORD *)((char *)pvData + 18);
      v12 = GuildAcademyTask::GetGuildAcademy();
      if ( CClientGuildAcademy::IsGuildAcademyMaster(v12, *(Name5 *)v11) && g_pkMainChar != v4 )
        GuildAcademyTask::CreateGuildacademyMasterEffect(v4);
    }
    if ( *((_BYTE *)pvData + 236) != 2 )
      MiniMapWin::AddKQTeamMark(v3->m_pkMiniMapWin, *(_WORD *)pvData);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A4BF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHARACTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // ebx@2
  char *v4; // edi@3
  Char *v5; // eax@4
  Char *v6; // esi@4
  unsigned __int16 v7; // ax@16
  Effect *v8; // eax@16
  _BYTE v9[20]; // ST10_20@22
  CClientGuildAcademy *v10; // eax@22
  unsigned int *v12; // [sp-10h] [bp-38h]@19
  char *v13; // [sp-Ch] [bp-34h]@19
  GameFrameWork *v14; // [sp+20h] [bp-8h]@1
  int dwDummy; // [sp+24h] [bp-4h]@19

  v14 = this;
  if ( !unk_AA2801 )
  {
    CharMgr::AddChar(&g_kCharMgr, (PROTO_NC_BRIEFINFO_CHARACTER_CMD *)pvData);
    v3 = 0;
    if ( *(_BYTE *)pvData )
    {
      v4 = (char *)pvData + 201;
      do
      {
        v5 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v4 - 100));
        v6 = v5;
        if ( v5 )
        {
          if ( Char::GetClass(v5) == 4
            || Char::GetClass(v6) == 5
            || Char::GetClass(v6) == 9
            || Char::GetClass(v6) == 10
            || Char::GetClass(v6) == 14
            || Char::GetClass(v6) == 15
            || Char::GetClass(v6) == 19
            || Char::GetClass(v6) == 20
            || Char::GetClass(v6) == 24
            || Char::GetClass(v6) == 25
            || Char::GetClass(v6) == 27 )
          {
            v7 = v6->m_kHandle;
            v6->m_iCharLevel = (unsigned __int8)*v4;
            v8 = EffectMgr::FindAuraEffect(&g_kEffectMgr, v7);
            if ( v8 )
              EffectMgr::RemoveEffect(&g_kEffectMgr, v8);
            if ( (unsigned __int8)*v4 < 0x78u )
            {
              v13 = "Aura100";
              v12 = (unsigned int *)&dwDummy;
            }
            else
            {
              v13 = "Aura120";
              v12 = (unsigned int *)&dwDummy;
            }
            EffectMgr::CreateAttachEffect(&g_kEffectMgr, v12, v13, v6, None, Timer::ms_fCurTime, 1, 1, 0, 1);
          }
          *(_DWORD *)v9 = *(_DWORD *)(v4 - 198);
          *(_DWORD *)&v9[4] = *(_DWORD *)(v4 - 194);
          *(_DWORD *)&v9[8] = *(_DWORD *)(v4 - 190);
          *(_DWORD *)&v9[12] = *(_DWORD *)(v4 - 186);
          *(_DWORD *)&v9[16] = *(_DWORD *)(v4 - 182);
          v10 = GuildAcademyTask::GetGuildAcademy();
          if ( CClientGuildAcademy::IsGuildAcademyMaster(v10, *(Name5 *)v9) && g_pkMainChar != v6 )
            GuildAcademyTask::CreateGuildacademyMasterEffect(v6);
          if ( v6->m_byKQTeamType != 2 )
            MiniMapWin::AddKQTeamMark(v14->m_pkMiniMapWin, v6->m_kHandle);
        }
        ++v3;
        v4 += 238;
      }
      while ( v3 < *(_BYTE *)pvData );
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A4DC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHANGEDECORATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  Effect *v5; // eax@3

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 7, 2);
  v4 = v3;
  if ( v3 )
  {
    v3->m_kCharShape.m_uiEquipPos = *((_BYTE *)pvData + 4);
    Char::Equip(v3, *((_WORD *)pvData + 1));
    if ( *((_BYTE *)pvData + 4) == 17 )
    {
      v5 = EffectMgr::FindAuraEffect(&g_kEffectMgr, v4->m_kHandle);
      if ( v5 )
        v5->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v5, 0);
    }
  }
  return iRevBytes;
}

//----- (004A4E30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHANGEUPGRADE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // edi@1

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 7, 3);
  v4 = v3;
  if ( v3 )
  {
    v3->m_kCharShape.m_uiEquipPos = *((_BYTE *)pvData + 5);
    CharShape::Equip(&v3->m_kCharShape, *((_WORD *)pvData + 1), *((_BYTE *)pvData + 4));
    Char::Equip(v4, *((_WORD *)pvData + 1), *((_BYTE *)pvData + 4));
  }
  return iRevBytes;
}

//----- (004A4E90) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_CHANGEWEAPON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // ebx@1
  Char *v4; // eax@1
  Char *v5; // esi@1
  int v6; // edi@3
  int v7; // edx@3
  int v8; // eax@5
  int v9; // eax@6
  unsigned __int16 v10; // ax@8
  char *v11; // eax@9
  CharInfoWin *v13; // ecx@12
  GameFrameWork *v14; // [sp+Ch] [bp-4h]@1

  v3 = pvData;
  v14 = this;
  v4 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 7, 5);
  v5 = v4;
  if ( v4 )
  {
    Char::Equip(v4, *((_WORD *)v3 + 1), *((_BYTE *)v3 + 4));
    if ( v5->m_uiCurrCharTitleType == 10 )
    {
      v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v7 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      pvData = (void *)*((_WORD *)v3 + 1);
      if ( (unsigned __int8)(*(int (__thiscall **)(int, void *))(v7 + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              pvData) )
      {
        if ( (unsigned __int16)pvData <= *(_WORD *)(v6 + 200) )
        {
          v8 = *(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)pvData;
          if ( *(_DWORD *)v8 )
          {
            v9 = *(_DWORD *)v8;
            if ( v9 )
            {
              if ( *(_DWORD *)(v9 + 102) == 5 )
              {
                v10 = *((_WORD *)v3 + 3);
                if ( v10 == -1 )
                {
                  if ( v5->m_uiCurrCharTitleType == 10 )
                  {
                    Char::SetCharTitleUse(v5, 0);
                    v13 = v14->m_pkCharInfoWin;
                    if ( v13 )
                    {
                      LOWORD(pvData) = 0;
                      CharInfoWin::SetCharTitleCurrentInfo(v13, (CHARTITLE_BRIEFINFO *)&pvData);
                    }
                  }
                }
                else
                {
                  v11 = WeaponTitleTab::GetWeaponTitleStringByLevel(v10, *((_BYTE *)v3 + 8));
                  if ( v11 )
                  {
                    Char::SetCharTitleName(v5, v11);
                    Char::SetCharTitleUse(v5, 1);
                    return iRevBytes;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return iRevBytes;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004A4FA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_UNEQUIP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // ebx@1
  GameFrameWork *v4; // edi@1
  Char *v5; // eax@1
  Char *v6; // esi@1
  const char *v7; // eax@4
  CharInfoWin *v8; // ecx@5
  Effect *v9; // eax@9

  v3 = pvData;
  v4 = this;
  v5 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 7, 4);
  v6 = v5;
  if ( v5 )
  {
    Char::UnEquip(v5, *((_BYTE *)v3 + 2));
    if ( v6->m_uiCurrCharTitleType == 10 )
    {
      if ( *((_BYTE *)v3 + 2) == 12 )
      {
        v7 = CCharacterTitleData::GetTitleString(&g_characterTitleData, 0, 0);
        Char::SetCharTitleName(v6, v7);
        Char::SetCharTitleUse(v6, 0);
      }
      v8 = v4->m_pkCharInfoWin;
      if ( v8 )
      {
        LOWORD(pvData) = 0;
        CharInfoWin::SetCharTitleCurrentInfo(v8, (CHARTITLE_BRIEFINFO *)&pvData);
      }
    }
  }
  if ( *((_BYTE *)v3 + 2) == 17 )
  {
    if ( ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)(v6) >= 100 )
    {
      v9 = EffectMgr::FindAuraEffect(&g_kEffectMgr, v6->m_kHandle);
      if ( v9 )
        v9->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v9, 1u);
    }
  }
  return iRevBytes;
}

//----- (004A5060) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@1
  int v4; // edi@1
  int v5; // esi@2
  int v6; // eax@5
  Char *v7; // eax@8
  NiPoint3 *v8; // eax@11
  int result; // eax@11

  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v4 = *((_WORD *)pvData + 2);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          *((_WORD *)pvData + 2)) )
  {
    if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
    {
      v6 = *(_DWORD *)(v3 + 196) + 4 * v4;
      if ( *(_DWORD *)v6 )
        v5 = *(_DWORD *)v6;
      else
        v5 = 0;
    }
    else
    {
      v5 = 0;
    }
  }
  else
  {
    v5 = 0;
  }
  v7 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
  if ( v5 && v7 && *(_DWORD *)(v5 + 531) == 65 )
  {
    v8 = (NiPoint3 *)((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)(v7);
    MagicField::AddMagicField((PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *)pvData, v8, 1);
    result = iRevBytes;
  }
  else
  {
    MagicField::AddMagicField((PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *)pvData, &NiPoint3::UNIT_Y, 0);
    result = iRevBytes;
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004A5110) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_BUILDDOOR_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@3
  int v4; // ecx@3
  int v5; // eax@3
  int v6; // edx@3
  char v7; // al@3
  int v8; // ecx@3
  int v9; // edx@3
  const char *v11; // [sp-4h] [bp-30h]@5
  bool v12; // [sp+0h] [bp-2Ch]@5
  char szBlockName[33]; // [sp+4h] [bp-28h]@3
  unsigned int v14; // [sp+28h] [bp-4h]@1
  int v15; // [sp+2Ch] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  if ( g_pkMainChar->m_kHandle != *(_WORD *)pvData )
    CharMgr::AddMob(&g_kCharMgr, (PROTO_NC_BRIEFINFO_BUILDDOOR_CMD *)pvData);
  v3 = *(_DWORD *)((char *)pvData + 14);
  v4 = *(_DWORD *)((char *)pvData + 22);
  *(_DWORD *)&szBlockName[4] = *(_DWORD *)((char *)pvData + 18);
  *(_DWORD *)&szBlockName[16] = *(_DWORD *)((char *)pvData + 30);
  v5 = *(_DWORD *)((char *)pvData + 42);
  *(_DWORD *)szBlockName = v3;
  v6 = *(_DWORD *)((char *)pvData + 26);
  *(_DWORD *)&szBlockName[28] = v5;
  v7 = *((_BYTE *)pvData + 13);
  *(_DWORD *)&szBlockName[8] = v4;
  v8 = *(_DWORD *)((char *)pvData + 34);
  *(_DWORD *)&szBlockName[12] = v6;
  v9 = *(_DWORD *)((char *)pvData + 38);
  *(_DWORD *)&szBlockName[20] = v8;
  *(_DWORD *)&szBlockName[24] = v9;
  szBlockName[32] = 0;
  if ( !v7 )
  {
    v12 = 1;
    v11 = szBlockName;
    goto LABEL_7;
  }
  if ( (unsigned __int8)(v7 - 1) <= 1u )
  {
    v12 = 0;
    v11 = szBlockName;
LABEL_7:
    World::SetSubBlockData(&g_kWorld, v11, v12);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A51B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_DOOR_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // edi@1
  char *v4; // esi@2
  int v5; // ecx@3
  int v6; // edx@3
  int v7; // eax@3
  int v8; // ecx@3
  int v9; // edx@3
  char v10; // al@3
  int v11; // ecx@3
  int v12; // edx@3
  const char *v14; // [sp-Ch] [bp-3Ch]@5
  bool v15; // [sp-8h] [bp-38h]@5
  char szBlockName[33]; // [sp+8h] [bp-28h]@3
  unsigned int v17; // [sp+2Ch] [bp-4h]@1
  int v18; // [sp+30h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = 0;
  if ( *(_BYTE *)pvData )
  {
    v4 = (char *)pvData + 23;
    while ( 1 )
    {
      CharMgr::AddMob(&g_kCharMgr, (PROTO_NC_BRIEFINFO_BUILDDOOR_CMD *)(v4 - 22));
      v5 = *((_DWORD *)v4 - 2);
      v6 = *((_DWORD *)v4 - 1);
      *(_DWORD *)&szBlockName[8] = *(_DWORD *)v4;
      v7 = *((_DWORD *)v4 + 3);
      *(_DWORD *)szBlockName = v5;
      v8 = *((_DWORD *)v4 + 1);
      *(_DWORD *)&szBlockName[4] = v6;
      v9 = *((_DWORD *)v4 + 2);
      *(_DWORD *)&szBlockName[20] = v7;
      v10 = *(v4 - 9);
      *(_DWORD *)&szBlockName[12] = v8;
      v11 = *((_DWORD *)v4 + 4);
      *(_DWORD *)&szBlockName[16] = v9;
      v12 = *((_DWORD *)v4 + 5);
      *(_DWORD *)&szBlockName[24] = v11;
      *(_DWORD *)&szBlockName[28] = v12;
      szBlockName[32] = 0;
      if ( !v10 )
        break;
      if ( (unsigned __int8)(v10 - 1) <= 1u )
      {
        v15 = 0;
        v14 = szBlockName;
LABEL_7:
        World::SetSubBlockData(&g_kWorld, v14, v15);
      }
      ++v3;
      v4 += 48;
      if ( v3 >= *(_BYTE *)pvData )
        return iRevBytes;
    }
    v15 = 1;
    v14 = szBlockName;
    goto LABEL_7;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A5260) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONECHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Char *v4; // eax@1
  Char *v5; // ebx@1
  char *v6; // eax@2
  ChatBlockListWin *v7; // eax@2
  ChatBlockListWin *v8; // eax@3
  PROTO_CHAT_RESTRICT_INFO *v9; // eax@3
  SHINE_ITEM_STRUCT *v10; // ebx@6
  unsigned __int8 v11; // al@9
  char v12; // al@14
  __int16 v13; // cx@15
  char *v15; // [sp-10h] [bp-2D4h]@12
  unsigned __int16 v16; // [sp-10h] [bp-2D4h]@23
  const char *v17; // [sp-Ch] [bp-2D0h]@12
  char *v18; // [sp-Ch] [bp-2D0h]@23
  char v19; // [sp-8h] [bp-2CCh]@23
  char v20; // [sp-4h] [bp-2C8h]@23
  int nitemDataCnt; // [sp+Ch] [bp-2B8h]@5
  Char *pkChar; // [sp+10h] [bp-2B4h]@1
  Name5 pCharID; // [sp+14h] [bp-2B0h]@2
  int v24; // [sp+28h] [bp-29Ch]@6
  Name5 kCharID; // [sp+2Ch] [bp-298h]@2
  char chRemoveColorText[256]; // [sp+40h] [bp-284h]@23
  char acText[256]; // [sp+140h] [bp-184h]@11
  char acStr[128]; // [sp+240h] [bp-84h]@11
  unsigned int v29; // [sp+2C0h] [bp-4h]@1
  int v30; // [sp+2C4h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = this;
  v4 = GameFrameWork::GetCharByHandle(this, *(_WORD *)((char *)pvData + 1), 8, 2);
  v5 = v4;
  pkChar = v4;
  if ( v4 )
  {
    v6 = (char *)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
    *(_QWORD *)&kCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kCharID.n5_name[4] = 0i64;
    *(_QWORD *)&kCharID.n5_name[0] = 0i64;
    strncpy(kCharID.n5_name, v6, 0x14u);
    *(_DWORD *)&pCharID.n5_name[8] = *(_DWORD *)&kCharID.n5_name[8];
    v7 = v3->m_pkChatBlockListWin;
    *(_QWORD *)&pCharID.n5_name[0] = *(_QWORD *)&kCharID;
    *(_QWORD *)&pCharID.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
    if ( !CChatRestrict::Get(&v7->m_RestrictList, &pCharID)
      || (*(_DWORD *)&pCharID.n5_name[8] = *(_DWORD *)&kCharID.n5_name[8],
          v8 = v3->m_pkChatBlockListWin,
          *(_QWORD *)&pCharID.n5_name[0] = *(_QWORD *)&kCharID,
          *(_QWORD *)&pCharID.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12],
          (v9 = CChatRestrict::Get(&v8->m_RestrictList, &pCharID)) != 0)
      && v9->bIsGM == 1 )
    {
      nitemDataCnt = *(_BYTE *)pvData;
      if ( nitemDataCnt > 0 )
      {
        v10 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 3) + 7);
        v24 = *(_BYTE *)pvData;
        do
        {
          GameFrameWork::AddSChatItemLink(v3, 1, v10);
          ++v10;
          --v24;
        }
        while ( v24 );
        v5 = pkChar;
      }
      v11 = *((_BYTE *)pvData + 3);
      if ( v11 && v11 <= 0x80u )
      {
        memset(acStr, 0, 0x80u);
        strncpy(acStr, (char *)pvData + 7, *((_BYTE *)pvData + 3));
        acStr[*((_BYTE *)pvData + 3)] = 0;
        memset(acText, 0, 0x100u);
        if ( v5 == g_pkMainChar )
        {
          ((void (__thiscall *)(Char *))v5->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v5);
          v17 = "[%s] : %s";
          v15 = acText;
        }
        else
        {
          ((void (__thiscall *)(Char *))v5->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v5);
          v17 = "{color,#FFFF00,[%s]} : %s";
          v15 = acText;
        }
        sprintf(v15, v17);
        v12 = *((_BYTE *)pvData + 4);
        if ( v12 & 2 )
        {
          v13 = *(_WORD *)((char *)pvData + 1);
          if ( v12 & 1 )
          {
            if ( v13 == g_pkMainChar->m_kHandle )
              GameFrameWork::AddGMUserChat(v3, acText);
            else
              GameFrameWork::AddGMOtherUserChat(v3, acText);
          }
          else
          {
            if ( v13 == g_pkMainChar->m_kHandle )
              GameFrameWork::AddUserChat(v3, acText, *((_BYTE *)pvData + 5));
            else
              GameFrameWork::AddOtherUserChat(v3, acText, *((_BYTE *)pvData + 5));
          }
        }
        if ( nitemDataCnt )
        {
          memset(chRemoveColorText, 0, 0x100u);
          GameFrameWork::RemoveColorText(v3, acStr, chRemoveColorText, 0);
          v20 = *((_BYTE *)pvData + 6);
          v19 = *((_BYTE *)pvData + 5);
          v18 = chRemoveColorText;
          v16 = v5->m_kHandle;
        }
        else
        {
          v20 = *((_BYTE *)pvData + 6);
          v19 = *((_BYTE *)pvData + 5);
          v18 = acStr;
          v16 = v5->m_kHandle;
        }
        ScreenBDMgr::AddSpeechBD(&g_kScrnBDMgr, v16, v18, v19, v20);
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A5570) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONESHOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // eax@1
  SHINE_ITEM_STRUCT *v5; // ebx@2
  unsigned __int8 v6; // cl@5
  int v7; // ebx@8
  int v8; // edx@8
  int v9; // eax@10
  int v10; // ebx@11
  char *v11; // eax@12
  char *v12; // eax@12
  Char *v13; // eax@12
  ChatBlockListWin *v14; // eax@14
  ChatBlockListWin *v15; // eax@15
  PROTO_CHAT_RESTRICT_INFO *v16; // eax@15
  Char *v17; // eax@20
  Char *v18; // esi@20
  _BYTE v20[20]; // [sp-18h] [bp-2F0h]@17
  unsigned __int16 v21; // [sp-8h] [bp-2E0h]@13
  char *v22; // [sp-4h] [bp-2DCh]@13
  int nitemDataCnt; // [sp+Ch] [bp-2CCh]@1
  Name5 pCharID; // [sp+10h] [bp-2C8h]@14
  int v25; // [sp+24h] [bp-2B4h]@2
  Name5 talker; // [sp+28h] [bp-2B0h]@14
  char string; // [sp+3Ch] [bp-29Ch]@17
  char chRemoveColorText[256]; // [sp+13Ch] [bp-19Ch]@12
  char acStr[128]; // [sp+23Ch] [bp-9Ch]@12
  char acName[21]; // [sp+2BCh] [bp-1Ch]@14
  unsigned int v31; // [sp+2D4h] [bp-4h]@1
  int v32; // [sp+2D8h] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v3 = this;
  v4 = 0;
  nitemDataCnt = *(_BYTE *)pvData;
  if ( nitemDataCnt > 0 )
  {
    v5 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 22) + 23);
    v25 = *(_BYTE *)pvData;
    do
    {
      GameFrameWork::AddSChatItemLink(v3, 2, v5);
      ++v5;
      --v25;
    }
    while ( v25 );
    v4 = 0;
  }
  v6 = *((_BYTE *)pvData + 22);
  if ( v6 && v6 <= 0x80u )
  {
    if ( *((_BYTE *)pvData + 21) & 2 )
    {
      v7 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
      v8 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
      v25 = *(_WORD *)((char *)pvData + 1);
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v8 + 16))(ITableBase<MobInfo_MobInfoTab>::ms_pkTable, v25) )
      {
        if ( (unsigned __int16)v25 <= *(_WORD *)(v7 + 200) )
        {
          v9 = *(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v25;
          if ( *(_DWORD *)v9 )
          {
            v10 = *(_DWORD *)v9;
            if ( *(_DWORD *)v9 )
            {
              memset(acStr, 0, 0x80u);
              strncpy(acStr, (char *)pvData + 23, *((_BYTE *)pvData + 22));
              acStr[*((_BYTE *)pvData + 22)] = 0;
              memset(chRemoveColorText, 0, 0x100u);
              sprintf(chRemoveColorText, "[%s] : %s");
              v11 = fs("%s");
              ChatDisplayWin2::AddShoutChat(v3->m_pkChatDisplayWin, v11);
              v12 = fs("%s");
              ChatDisplayWin::AddShoutChat(&v3->m_pkSysMsgDisplayWin->baseclass_0, v12);
              v13 = CharMgr::GetChar(&g_kCharMgr, (char *)(v10 + 34));
              if ( v13 )
              {
                v22 = acStr;
                v21 = v13->m_kHandle;
LABEL_24:
                ScreenBDMgr::AddSpeechBD(&g_kScrnBDMgr, v21, v22);
                return iRevBytes;
              }
            }
          }
        }
      }
    }
    else
    {
      *(_DWORD *)&talker.n5_name[16] = v4;
      *(_DWORD *)&talker.n5_name[12] = v4;
      *(_DWORD *)&talker.n5_name[8] = v4;
      *(_DWORD *)&talker.n5_name[4] = v4;
      *(_DWORD *)&talker.n5_name[0] = v4;
      strncpy(talker.n5_name, (char *)pvData + 1, 0x14u);
      *(_QWORD *)acName = *(_QWORD *)&talker;
      *(_QWORD *)&pCharID.n5_name[0] = *(_QWORD *)&talker;
      v14 = v3->m_pkChatBlockListWin;
      *(_QWORD *)&acName[8] = *(_QWORD *)&talker.n5_name[8];
      *(_DWORD *)&pCharID.n5_name[8] = *(_DWORD *)&talker.n5_name[8];
      *(_DWORD *)&acName[16] = *(_DWORD *)&talker.n5_name[16];
      acName[20] = 0;
      *(_QWORD *)&pCharID.n5_name[12] = *(_QWORD *)&talker.n5_name[12];
      if ( !CChatRestrict::Get(&v14->m_RestrictList, &pCharID)
        || (*(_DWORD *)&pCharID.n5_name[8] = *(_DWORD *)&talker.n5_name[8],
            v15 = v3->m_pkChatBlockListWin,
            *(_QWORD *)&pCharID.n5_name[0] = *(_QWORD *)&talker,
            *(_QWORD *)&pCharID.n5_name[12] = *(_QWORD *)&talker.n5_name[12],
            (v16 = CChatRestrict::Get(&v15->m_RestrictList, &pCharID)) != 0)
        && v16->bIsGM == 1 )
      {
        memset(acStr, 0, 0x80u);
        strncpy(acStr, (char *)pvData + 23, *((_BYTE *)pvData + 22));
        acStr[*((_BYTE *)pvData + 22)] = 0;
        memset(&string, 0, 0x100u);
        sprintf(&string, "[%s] : %s");
        *(_QWORD *)v20 = *(_QWORD *)&talker;
        *(_QWORD *)&v20[8] = *(_QWORD *)&talker.n5_name[8];
        *(_DWORD *)&v20[16] = *(_DWORD *)&talker.n5_name[16];
        if ( *((_BYTE *)pvData + 21) & 1 )
          GameFrameWork::AddGMShoutChat(v3, *(Name5 *)v20, acStr);
        else
          GameFrameWork::AddShoutChat(v3, *(Name5 *)v20, acStr);
        v17 = CharMgr::GetChar(&g_kCharMgr, acName);
        v18 = v17;
        if ( v17 )
        {
          if ( nitemDataCnt )
          {
            memset(chRemoveColorText, 0, 0x100u);
            GameFrameWork::RemoveColorText(v3, acStr, chRemoveColorText, 0);
            v22 = chRemoveColorText;
            v21 = v18->m_kHandle;
          }
          else
          {
            v22 = acStr;
            v21 = v17->m_kHandle;
          }
          goto LABEL_24;
        }
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (004A5950) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEMOVEWALK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@0
  void *v4; // edi@1
  int v5; // ST14_4@2
  Char *v6; // eax@2
  Char *v7; // esi@2
  int v8; // eax@4
  double v9; // st7@4
  float v10; // ecx@4
  float v11; // edx@4
  float v12; // eax@4
  char *v13; // ebx@4
  int v14; // ecx@4
  int v15; // edx@6
  double v16; // st7@6
  int v17; // eax@8
  double v18; // st7@8
  int v19; // ecx@10
  double v20; // st7@10
  AbStateInfecteeVtbl *v21; // edi@16
  float v22; // ST14_4@16
  float v23; // ST0C_4@17
  float v24; // ST08_4@17
  NiPoint3 kPos; // [sp+1Ch] [bp-44h]@17
  NiPoint3 pos3From; // [sp+28h] [bp-38h]@10
  NiPoint3 pos3To; // [sp+34h] [bp-2Ch]@6
  float v29; // [sp+40h] [bp-20h]@12
  float v30; // [sp+44h] [bp-1Ch]@12
  float v31; // [sp+48h] [bp-18h]@12
  NiPoint3 pos3Cur; // [sp+4Ch] [bp-14h]@4
  char *v33; // [sp+58h] [bp-8h]@6
  float fGapLength; // [sp+5Ch] [bp-4h]@12
  float fMoveLengtha; // [sp+6Ch] [bp+Ch]@12
  float fMoveLengthb; // [sp+6Ch] [bp+Ch]@12
  float fMoveLengthc; // [sp+6Ch] [bp+Ch]@12
  float fMoveLength; // [sp+6Ch] [bp+Ch]@12

  v4 = pvData;
  if ( g_pkMainChar->m_kHandle != *(_WORD *)pvData )
  {
    v5 = v3;
    v6 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 8, 24);
    v7 = v6;
    if ( v6 )
    {
      Char::ClearTraceMove(v6);
      if ( !(unsigned __int8)((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[10].Affect)(v7) )
      {
        v8 = ((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[6].Deaffect)(v7);
        v9 = (double)*(signed int *)((char *)pvData + 10);
        LODWORD(v10) = *(_DWORD *)v8;
        LODWORD(v11) = *(_DWORD *)(v8 + 4);
        LODWORD(v12) = *(_DWORD *)(v8 + 8);
        v13 = (char *)pvData + 10;
        pos3Cur.x = v10;
        v14 = *(_DWORD *)((char *)pvData + 10);
        pos3Cur.y = v11;
        pos3Cur.z = v12;
        if ( v14 < 0 )
          v9 = v9 + 4294967300.0;
        v15 = *(_DWORD *)((char *)pvData + 14);
        pos3To.x = v9;
        v16 = (double)*(signed int *)((char *)pvData + 14);
        v33 = (char *)pvData + 14;
        if ( v15 < 0 )
          v16 = v16 + 4294967300.0;
        v17 = *(_DWORD *)((char *)pvData + 2);
        pos3To.y = v16;
        v18 = (double)*(signed int *)((char *)pvData + 2);
        if ( v17 < 0 )
          v18 = v18 + 4294967300.0;
        v19 = *(_DWORD *)((char *)pvData + 6);
        pos3From.x = v18;
        v20 = (double)*(signed int *)((char *)pvData + 6);
        if ( v19 < 0 )
          v20 = v20 + 4294967300.0;
        pos3From.y = v20;
        v29 = pos3Cur.x - pos3To.x;
        v30 = pos3Cur.y - pos3To.y;
        v31 = pos3Cur.z - pos3Cur.z;
        fMoveLengtha = v30 * v30 + v29 * v29 + v31 * v31;
        fMoveLengthb = sqrt(fMoveLengtha);
        fGapLength = fMoveLengthb;
        v29 = pos3From.x - pos3To.x;
        v30 = pos3From.y - pos3To.y;
        v31 = pos3Cur.z - pos3Cur.z;
        fMoveLengthc = v30 * v30 + v29 * v29 + v31 * v31;
        fMoveLength = sqrt(fMoveLengthc);
        if ( 0.0 != fGapLength && fMoveLength != 0.0 && *((_WORD *)v4 + 9) )
        {
          ((void (__thiscall *)(Char *))v7->baseclass_0.vfptr[8].Deaffect)(v7);
        }
        else
        {
          v21 = v7->baseclass_0.vfptr;
          v22 = Char::GetDefWalkSpeed();
          ((void (__thiscall *)(Char *))v21[8].Deaffect)(v7);
        }
        v24 = (double)*(unsigned int *)v13;
        v23 = (double)*(unsigned int *)v33;
        World::GetAdvGroundPos(&g_kWorld, v24, v23, &kPos);
        if ( !((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[7].Affect)(v7) )
        {
          v7->baseclass_0.vfptr[7].SetAbStateProperty(
            (AbStateInfectee *)v7,
            (ABSTATEINDEX)&kPos,
            0,
            (int)&Char::INVALIDPOINT3);
          return iRevBytes;
        }
        ((void (__thiscall *)(Char *))v7->baseclass_0.vfptr[7].Deaffect)(v7);
        ((void (__thiscall *)(Char *, NiPoint3 *, signed int, NiColor *, signed int))v7->baseclass_0.vfptr[7].SetAbStateProperty)(
          v7,
          &kPos,
          1,
          &Char::INVALIDPOINT3,
          1);
      }
    }
  }
  return iRevBytes;
}
// 4A5950: could not find valid save-restore pair for esi

//----- (004A5BB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEMOVERUN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@0
  void *v4; // edi@1
  int v5; // ST20_4@2
  Char *v6; // eax@2
  Char *v7; // esi@2
  int v8; // eax@4
  float v9; // ecx@4
  double v10; // st7@4
  float v11; // edx@4
  float v12; // eax@4
  int v13; // edx@4
  double v14; // st7@4
  int v15; // eax@6
  double v16; // st7@6
  int v17; // ecx@8
  double v18; // st7@8
  signed int v19; // eax@12
  void (__thiscall *v20)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@13
  double v21; // st7@13
  float v22; // ST20_4@15
  float v23; // ST1C_4@15
  float v24; // ST18_4@15
  void (__thiscall *v26)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@17
  NiPoint3 kPos; // [sp+28h] [bp-4Ch]@15
  NiPoint3 pos3From; // [sp+34h] [bp-40h]@8
  NiPoint3 pos3To; // [sp+40h] [bp-34h]@4
  float v30; // [sp+4Ch] [bp-28h]@10
  float v31; // [sp+50h] [bp-24h]@10
  float v32; // [sp+54h] [bp-20h]@10
  NiPoint3 pos3Cur; // [sp+58h] [bp-1Ch]@4
  char *v34; // [sp+64h] [bp-10h]@4
  float fGapLength; // [sp+68h] [bp-Ch]@10
  float fMoveLength; // [sp+6Ch] [bp-8h]@10
  float v37; // [sp+70h] [bp-4h]@4
  float pvDataa; // [sp+80h] [bp+Ch]@6
  float pvDatab; // [sp+80h] [bp+Ch]@13

  v4 = pvData;
  if ( g_pkMainChar->m_kHandle != *(_WORD *)pvData )
  {
    v5 = v3;
    v6 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 8, 26);
    v7 = v6;
    if ( v6 )
    {
      Char::ClearTraceMove(v6);
      if ( !(unsigned __int8)((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[10].Affect)(v7) )
      {
        IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(v7->m_kCharShape.m_kMobID, 1);
        v8 = ((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[6].Deaffect)(v7);
        LODWORD(v9) = *(_DWORD *)v8;
        v10 = (double)*(unsigned int *)((char *)pvData + 10);
        LODWORD(v11) = *(_DWORD *)(v8 + 4);
        LODWORD(v12) = *(_DWORD *)(v8 + 8);
        pos3Cur.x = v9;
        pos3Cur.y = v11;
        pos3Cur.z = v12;
        v13 = *(_DWORD *)((char *)pvData + 14);
        v37 = v10;
        pos3To.x = v37;
        v34 = (char *)pvData + 14;
        v14 = (double)*(signed int *)((char *)pvData + 14);
        if ( v13 < 0 )
          v14 = v14 + 4294967300.0;
        v15 = *(_DWORD *)((char *)pvData + 2);
        pvDataa = v14;
        pos3To.y = pvDataa;
        v16 = (double)*(signed int *)((char *)v4 + 2);
        if ( v15 < 0 )
          v16 = v16 + 4294967300.0;
        v17 = *(_DWORD *)((char *)v4 + 6);
        pos3From.x = v16;
        v18 = (double)*(signed int *)((char *)v4 + 6);
        if ( v17 < 0 )
          v18 = v18 + 4294967300.0;
        pos3From.y = v18;
        v30 = pos3Cur.x - pos3To.x;
        v31 = pos3Cur.y - pos3To.y;
        v32 = pos3Cur.z - pos3Cur.z;
        fMoveLength = v31 * v31 + v30 * v30 + v32 * v32;
        fMoveLength = sqrt(fMoveLength);
        fGapLength = fMoveLength;
        v30 = pos3From.x - pos3To.x;
        v31 = pos3From.y - pos3To.y;
        v32 = pos3Cur.z - pos3Cur.z;
        fMoveLength = v31 * v31 + v30 * v30 + v32 * v32;
        fMoveLength = sqrt(fMoveLength);
        if ( 0.0 != fGapLength && fMoveLength != 0.0 && (v19 = *((_WORD *)v4 + 9), (_WORD)v19) )
        {
          v20 = v7->baseclass_0.vfptr[8].SetAbStateProperty;
          pvDatab = fGapLength * (double)v19 / fMoveLength;
          v21 = pvDatab;
        }
        else
        {
          ((void (__thiscall *)(Char *, _DWORD, _DWORD, _DWORD))v7->baseclass_0.vfptr[7].IsVisible)(
            v7,
            LODWORD(v37),
            LODWORD(pvDataa),
            0);
          v20 = v7->baseclass_0.vfptr[8].SetAbStateProperty;
          v21 = (double)*((_WORD *)v4 + 9);
        }
        v22 = v21;
        ((void (__thiscall *)(Char *, _DWORD))v20)(v7, LODWORD(v22));
        v24 = (double)*(unsigned int *)((char *)v4 + 10);
        v23 = (double)*(unsigned int *)v34;
        World::GetAdvGroundPos(&g_kWorld, v24, v23, &kPos);
        if ( ((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[7].Affect)(v7) == 1 )
        {
          ((void (__thiscall *)(Char *, NiPoint3 *, _DWORD))v7->baseclass_0.vfptr[7].SetAbStateProperty)(v7, &kPos, 0);
          return iRevBytes;
        }
        ((void (__thiscall *)(Char *, signed int, _DWORD, _DWORD))v7->baseclass_0.vfptr[7].Deaffect)(
          v7,
          1,
          (_DWORD)kPos.x,
          LODWORD(kPos.y));
        v26 = v7->baseclass_0.vfptr[7].SetAbStateProperty;
        LODWORD(kPos.y) = 1;
        LODWORD(kPos.x) = &Char::INVALIDPOINT3;
        ((void (__thiscall *)(Char *))v26)(v7);
      }
    }
  }
  return iRevBytes;
}
// 4A5BB0: could not find valid save-restore pair for ebx
// 4A5BB0: could not find valid save-restore pair for esi

//----- (004A5E50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONECHANGEMODE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 8, 9);
  if ( v3 && v3->m_byMode != *((_BYTE *)pvData + 2) )
    Char::SetMode(v3, *((_BYTE *)pvData + 2));
  return iRevBytes;
}

//----- (004A5E90) --------------------------------------------------------
void __thiscall GameFrameWork::AddWhisperList(GameFrameWork *this, Name5 shinCharID)
{
  GameFrameWork *v2; // esi@1
  char v3; // cl@1
  int v4; // eax@25
  signed int v5; // ebx@25
  int v6; // edi@25
  char dest[4]; // [sp+Ch] [bp-18h]@26
  int v8; // [sp+10h] [bp-14h]@26
  int v9; // [sp+14h] [bp-10h]@26
  int v10; // [sp+18h] [bp-Ch]@26
  int v11; // [sp+1Ch] [bp-8h]@26
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  v3 = 0;
  if ( *(_QWORD *)&v2->m_CharList[0].n5_name[0] == *(_QWORD *)&shinCharID
    && *(_QWORD *)&v2->m_CharList[0].n5_name[8] == *(_QWORD *)&shinCharID.n5_name[8]
    && *(_DWORD *)&v2->m_CharList[0].n5_name[16] == *(_DWORD *)&shinCharID.n5_name[16] )
    v3 = 1;
  if ( *(_QWORD *)&v2->m_CharList[1].n5_name[0] == *(_QWORD *)&shinCharID
    && *(_QWORD *)&v2->m_CharList[1].n5_name[8] == *(_QWORD *)&shinCharID.n5_name[8]
    && *(_DWORD *)&v2->m_CharList[1].n5_name[16] == *(_DWORD *)&shinCharID.n5_name[16] )
    v3 = 1;
  if ( *(_QWORD *)&v2->m_CharList[2].n5_name[0] == *(_QWORD *)&shinCharID
    && *(_QWORD *)&v2->m_CharList[2].n5_name[8] == *(_QWORD *)&shinCharID.n5_name[8]
    && *(_DWORD *)&v2->m_CharList[2].n5_name[16] == *(_DWORD *)&shinCharID.n5_name[16] )
    v3 = 1;
  if ( *(_QWORD *)&v2->m_CharList[3].n5_name[0] == *(_QWORD *)&shinCharID
    && *(_QWORD *)&v2->m_CharList[3].n5_name[8] == *(_QWORD *)&shinCharID.n5_name[8]
    && *(_DWORD *)&v2->m_CharList[3].n5_name[16] == *(_DWORD *)&shinCharID.n5_name[16] )
    v3 = 1;
  if ( *(_QWORD *)&v2->m_CharList[4].n5_name[0] == *(_QWORD *)&shinCharID
    && *(_QWORD *)&v2->m_CharList[4].n5_name[8] == *(_QWORD *)&shinCharID.n5_name[8]
    && *(_DWORD *)&v2->m_CharList[4].n5_name[16] == *(_DWORD *)&shinCharID.n5_name[16] )
    v3 = 1;
  if ( (*(_QWORD *)&v2->m_CharList[5].n5_name[0] != *(_QWORD *)&shinCharID
     || *(_QWORD *)&v2->m_CharList[5].n5_name[8] != *(_QWORD *)&shinCharID.n5_name[8]
     || *(_DWORD *)&v2->m_CharList[5].n5_name[16] != *(_DWORD *)&shinCharID.n5_name[16])
    && !v3 )
  {
    v4 = 0;
    v5 = 0;
    v6 = (int)&v2->m_CharList[0].n5_name[8];
    while ( 1 )
    {
      v11 = v4;
      v10 = v4;
      v9 = v4;
      v8 = v4;
      *(_DWORD *)dest = v4;
      strncpy(dest, byte_98C03E, 0x14u);
      if ( *(_DWORD *)(v6 - 8) == *(_DWORD *)dest
        && *(_DWORD *)(v6 - 4) == v8
        && *(_DWORD *)v6 == v9
        && *(_DWORD *)(v6 + 4) == v10
        && *(_DWORD *)(v6 + 8) == v11 )
      {
        *(_QWORD *)&v2->m_CharList[v5].n5_name[0] = *(_QWORD *)&shinCharID;
        *(_QWORD *)&v2->m_CharList[v5].n5_name[8] = *(_QWORD *)&shinCharID.n5_name[8];
        *(_DWORD *)&v2->m_CharList[v5].n5_name[16] = *(_DWORD *)&shinCharID.n5_name[16];
        return;
      }
      ++v5;
      v6 += 20;
      if ( v5 >= 6 )
        break;
      v4 = 0;
    }
    *(_DWORD *)&v2->m_CharList[0].n5_name[0] = *(_DWORD *)&v2->m_CharList[1].n5_name[0];
    *(_DWORD *)&v2->m_CharList[0].n5_name[4] = *(_DWORD *)&v2->m_CharList[1].n5_name[4];
    *(_DWORD *)&v2->m_CharList[0].n5_name[8] = *(_DWORD *)&v2->m_CharList[1].n5_name[8];
    *(_DWORD *)&v2->m_CharList[0].n5_name[12] = *(_DWORD *)&v2->m_CharList[1].n5_name[12];
    *(_DWORD *)&v2->m_CharList[0].n5_name[16] = *(_DWORD *)&v2->m_CharList[1].n5_name[16];
    *(_DWORD *)&v2->m_CharList[1].n5_name[0] = *(_DWORD *)&v2->m_CharList[2].n5_name[0];
    *(_DWORD *)&v2->m_CharList[1].n5_name[4] = *(_DWORD *)&v2->m_CharList[2].n5_name[4];
    *(_DWORD *)&v2->m_CharList[1].n5_name[8] = *(_DWORD *)&v2->m_CharList[2].n5_name[8];
    *(_DWORD *)&v2->m_CharList[1].n5_name[12] = *(_DWORD *)&v2->m_CharList[2].n5_name[12];
    *(_DWORD *)&v2->m_CharList[1].n5_name[16] = *(_DWORD *)&v2->m_CharList[2].n5_name[16];
    *(_DWORD *)&v2->m_CharList[2].n5_name[0] = *(_DWORD *)&v2->m_CharList[3].n5_name[0];
    *(_DWORD *)&v2->m_CharList[2].n5_name[4] = *(_DWORD *)&v2->m_CharList[3].n5_name[4];
    *(_DWORD *)&v2->m_CharList[2].n5_name[8] = *(_DWORD *)&v2->m_CharList[3].n5_name[8];
    *(_DWORD *)&v2->m_CharList[2].n5_name[12] = *(_DWORD *)&v2->m_CharList[3].n5_name[12];
    *(_DWORD *)&v2->m_CharList[2].n5_name[16] = *(_DWORD *)&v2->m_CharList[3].n5_name[16];
    *(_DWORD *)&v2->m_CharList[3].n5_name[0] = *(_DWORD *)&v2->m_CharList[4].n5_name[0];
    *(_DWORD *)&v2->m_CharList[3].n5_name[4] = *(_DWORD *)&v2->m_CharList[4].n5_name[4];
    *(_DWORD *)&v2->m_CharList[3].n5_name[8] = *(_DWORD *)&v2->m_CharList[4].n5_name[8];
    *(_DWORD *)&v2->m_CharList[3].n5_name[12] = *(_DWORD *)&v2->m_CharList[4].n5_name[12];
    *(_DWORD *)&v2->m_CharList[3].n5_name[16] = *(_DWORD *)&v2->m_CharList[4].n5_name[16];
    *(_DWORD *)&v2->m_CharList[4].n5_name[0] = *(_DWORD *)&v2->m_CharList[5].n5_name[0];
    *(_DWORD *)&v2->m_CharList[4].n5_name[4] = *(_DWORD *)&v2->m_CharList[5].n5_name[4];
    *(_DWORD *)&v2->m_CharList[4].n5_name[8] = *(_DWORD *)&v2->m_CharList[5].n5_name[8];
    *(_DWORD *)&v2->m_CharList[4].n5_name[12] = *(_DWORD *)&v2->m_CharList[5].n5_name[12];
    *(_DWORD *)&v2->m_CharList[4].n5_name[16] = *(_DWORD *)&v2->m_CharList[5].n5_name[16];
    *(_QWORD *)&v2->m_CharList[5].n5_name[0] = *(_QWORD *)&shinCharID;
    *(_QWORD *)&v2->m_CharList[5].n5_name[8] = *(_QWORD *)&shinCharID.n5_name[8];
    *(_DWORD *)&v2->m_CharList[5].n5_name[16] = *(_DWORD *)&shinCharID.n5_name[16];
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004A61E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_PARTYCHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  SHINE_ITEM_STRUCT *v4; // edi@4
  int v5; // ebx@4
  int v6; // edx@7
  int v7; // ecx@7
  int v8; // eax@7
  int v9; // ecx@7
  unsigned int v10; // eax@7
  int v11; // edx@7
  int v12; // eax@7
  int v13; // edx@7
  ChatBlockListWin *v14; // eax@7
  int v15; // edx@7
  int v16; // ecx@8
  int v17; // edx@8
  int v18; // eax@8
  ChatBlockListWin *v19; // eax@8
  PROTO_CHAT_RESTRICT_INFO *v20; // eax@8
  _BYTE v21[20]; // ST00_20@11
  _BYTE v22[20]; // ST00_20@12
  Name5 pCharID; // [sp+Ch] [bp-B8h]@7
  GameFrameWork *thisa; // [sp+20h] [bp-A4h]@1
  char acStr[129]; // [sp+24h] [bp-A0h]@7
  char acName[21]; // [sp+A8h] [bp-1Ch]@7
  unsigned int v28; // [sp+C0h] [bp-4h]@1
  int v29; // [sp+C4h] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  v3 = this;
  thisa = this;
  if ( *((_BYTE *)pvData + 21) > 0x80u )
    *((_BYTE *)pvData + 21) = -128;
  if ( (signed int)*((_BYTE *)pvData + 20) > 0 )
  {
    v4 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 21) + 22);
    v5 = *((_BYTE *)pvData + 20);
    do
    {
      GameFrameWork::AddSChatItemLink(thisa, 16, v4);
      ++v4;
      --v5;
    }
    while ( v5 );
    v3 = thisa;
  }
  strncpy(acStr, (char *)pvData + 22, *((_BYTE *)pvData + 21));
  v6 = *((_BYTE *)pvData + 21);
  v7 = *((_DWORD *)pvData + 1);
  *(_DWORD *)acName = *(_DWORD *)pvData;
  v8 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[4] = v7;
  v9 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[12] = v8;
  v10 = *((_DWORD *)pvData + 1);
  acStr[v6] = 0;
  v11 = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acName[16] = v9;
  *(_QWORD *)&pCharID.n5_name[4] = __PAIR__(*((_DWORD *)pvData + 2), v10);
  v12 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[8] = v11;
  v13 = *(_DWORD *)pvData;
  *(_DWORD *)&pCharID.n5_name[16] = v12;
  v14 = v3->m_pkChatBlockListWin;
  *(_DWORD *)&pCharID.n5_name[0] = v13;
  v15 = *((_DWORD *)pvData + 3);
  acName[20] = 0;
  *(_DWORD *)&pCharID.n5_name[12] = v15;
  if ( !CChatRestrict::Get(&v14->m_RestrictList, &pCharID)
    || (v16 = *((_DWORD *)pvData + 2),
        v17 = *(_DWORD *)pvData,
        *(_DWORD *)&pCharID.n5_name[4] = *((_DWORD *)pvData + 1),
        v18 = *((_DWORD *)pvData + 4),
        *(_DWORD *)&pCharID.n5_name[8] = v16,
        *(_DWORD *)&pCharID.n5_name[16] = v18,
        v19 = v3->m_pkChatBlockListWin,
        *(_DWORD *)&pCharID.n5_name[0] = v17,
        *(_DWORD *)&pCharID.n5_name[12] = *((_DWORD *)pvData + 3),
        (v20 = CChatRestrict::Get(&v19->m_RestrictList, &pCharID)) != 0)
    && v20->bIsGM == 1 )
  {
    if ( strcmp(acName, (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)()) )
    {
      *(_DWORD *)v22 = *(_DWORD *)pvData;
      *(_QWORD *)&v22[4] = *(_QWORD *)((char *)pvData + 4);
      *(_QWORD *)&v22[12] = *(_QWORD *)((char *)pvData + 12);
      GameFrameWork::AddOtherPartyChat(v3, *(Name5 *)v22, acStr);
    }
    else
    {
      *(_DWORD *)v21 = *(_DWORD *)pvData;
      *(_QWORD *)&v21[4] = *(_QWORD *)((char *)pvData + 4);
      *(_QWORD *)&v21[12] = *(_QWORD *)((char *)pvData + 12);
      GameFrameWork::AddPartyChat(v3, *(Name5 *)v21, acStr);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A63D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_GUILD_CHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  SHINE_ITEM_STRUCT *v4; // edi@5
  int v5; // ebx@5
  int v6; // ecx@8
  int v7; // edx@8
  int v8; // eax@8
  int v9; // ecx@8
  int v10; // edx@9
  int v11; // eax@9
  ChatBlockListWin *v12; // ecx@9
  PROTO_CHAT_RESTRICT_INFO *v13; // eax@9
  _BYTE v14[20]; // ST00_20@12
  _BYTE v15[20]; // ST00_20@13
  char pCharID[4]; // [sp+Ch] [bp-B8h]@8
  int v18; // [sp+10h] [bp-B4h]@8
  int v19; // [sp+14h] [bp-B0h]@8
  int v20; // [sp+18h] [bp-ACh]@8
  int v21; // [sp+1Ch] [bp-A8h]@8
  GameFrameWork *thisa; // [sp+20h] [bp-A4h]@1
  char acStr[129]; // [sp+24h] [bp-A0h]@8
  char acName[21]; // [sp+A8h] [bp-1Ch]@8
  unsigned int v25; // [sp+C0h] [bp-4h]@1
  int v26; // [sp+C4h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v3 = this;
  thisa = this;
  if ( *((_BYTE *)pvData + 25) > 0x80u )
    *((_BYTE *)pvData + 25) = -128;
  if ( *(_DWORD *)pvData == g_pkMainChar->m_dwGuildRegNum )
  {
    if ( (signed int)*((_BYTE *)pvData + 24) > 0 )
    {
      v4 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 25) + 26);
      v5 = *((_BYTE *)pvData + 24);
      do
      {
        GameFrameWork::AddSChatItemLink(thisa, 32, v4);
        ++v4;
        --v5;
      }
      while ( v5 );
      v3 = thisa;
    }
    strncpy(acStr, (char *)pvData + 26, *((_BYTE *)pvData + 25));
    v6 = *((_DWORD *)pvData + 1);
    v7 = *((_DWORD *)pvData + 2);
    acStr[*((_BYTE *)pvData + 25)] = 0;
    v8 = *((_DWORD *)pvData + 3);
    *(_DWORD *)acName = v6;
    v9 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[8] = v8;
    *(_DWORD *)&acName[12] = v9;
    *(_DWORD *)&acName[4] = v7;
    *(_DWORD *)&acName[16] = *((_DWORD *)pvData + 5);
    acName[20] = 0;
    v21 = 0;
    v20 = 0;
    v19 = 0;
    v18 = 0;
    *(_DWORD *)pCharID = 0;
    strncpy(pCharID, acName, 0x14u);
    if ( !CChatRestrict::Get(&v3->m_pkChatBlockListWin->m_RestrictList, (Name5 *)pCharID)
      || (v10 = *((_DWORD *)pvData + 3),
          v11 = *((_DWORD *)pvData + 1),
          v18 = *((_DWORD *)pvData + 2),
          v21 = *((_DWORD *)pvData + 5),
          v12 = v3->m_pkChatBlockListWin,
          v19 = v10,
          *(_DWORD *)pCharID = v11,
          v20 = *((_DWORD *)pvData + 4),
          (v13 = CChatRestrict::Get(&v12->m_RestrictList, (Name5 *)pCharID)) != 0)
      && v13->bIsGM == 1 )
    {
      if ( strcmp(
             acName,
             (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)()) )
      {
        *(_DWORD *)v15 = *((_DWORD *)pvData + 1);
        *(_QWORD *)&v15[4] = *((_QWORD *)pvData + 1);
        *(_QWORD *)&v15[12] = *((_QWORD *)pvData + 2);
        GameFrameWork::AddOtherGuildChat(v3, *(Name5 *)v15, acStr);
      }
      else
      {
        *(_DWORD *)v14 = *((_DWORD *)pvData + 1);
        *(_QWORD *)&v14[4] = *((_QWORD *)pvData + 1);
        *(_QWORD *)&v14[12] = *((_QWORD *)pvData + 2);
        GameFrameWork::AddGuildChat(v3, *(Name5 *)v14, acStr);
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A65E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_GUILD_ACADEMY_CHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  SHINE_ITEM_STRUCT *v4; // edi@2
  int v5; // ebx@2
  int v6; // edx@7
  int v7; // eax@7
  int v8; // ecx@7
  int v9; // edx@7
  GameFrameWork *v10; // edi@7
  int v11; // ecx@8
  int v12; // edx@8
  int v13; // eax@8
  ChatBlockListWin *v14; // eax@8
  PROTO_CHAT_RESTRICT_INFO *v15; // eax@8
  _BYTE v16[20]; // ST00_20@11
  _BYTE v17[20]; // ST00_20@12
  char pCharID[4]; // [sp+Ch] [bp-B8h]@7
  int v20; // [sp+10h] [bp-B4h]@7
  int v21; // [sp+14h] [bp-B0h]@7
  int v22; // [sp+18h] [bp-ACh]@7
  int v23; // [sp+1Ch] [bp-A8h]@7
  GameFrameWork *thisa; // [sp+20h] [bp-A4h]@1
  char acStr[129]; // [sp+24h] [bp-A0h]@7
  char acName[21]; // [sp+A8h] [bp-1Ch]@7
  unsigned int v27; // [sp+C0h] [bp-4h]@1
  int v28; // [sp+C4h] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v3 = *((_BYTE *)pvData + 24);
  thisa = this;
  if ( v3 > 0 )
  {
    v4 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 25) + 26);
    v5 = v3;
    do
    {
      GameFrameWork::AddSChatItemLink(thisa, 4096, v4);
      ++v4;
      --v5;
    }
    while ( v5 );
  }
  if ( *((_BYTE *)pvData + 25) > 0x80u )
    *((_BYTE *)pvData + 25) = -128;
  if ( *(_DWORD *)pvData == g_pkMainChar->m_dwGuildRegNum )
  {
    strncpy(acStr, (char *)pvData + 26, *((_BYTE *)pvData + 25));
    v6 = *((_DWORD *)pvData + 1);
    v7 = *((_DWORD *)pvData + 2);
    acStr[*((_BYTE *)pvData + 25)] = 0;
    v8 = *((_DWORD *)pvData + 3);
    *(_DWORD *)acName = v6;
    v9 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[8] = v8;
    *(_DWORD *)&acName[12] = v9;
    *(_DWORD *)&acName[4] = v7;
    *(_DWORD *)&acName[16] = *((_DWORD *)pvData + 5);
    acName[20] = 0;
    v23 = 0;
    v22 = 0;
    v21 = 0;
    v20 = 0;
    *(_DWORD *)pCharID = 0;
    strncpy(pCharID, acName, 0x14u);
    v10 = thisa;
    if ( !CChatRestrict::Get(&thisa->m_pkChatBlockListWin->m_RestrictList, (Name5 *)pCharID)
      || (v11 = *((_DWORD *)pvData + 3),
          v12 = *((_DWORD *)pvData + 1),
          v20 = *((_DWORD *)pvData + 2),
          v13 = *((_DWORD *)pvData + 5),
          v21 = v11,
          v23 = v13,
          v14 = v10->m_pkChatBlockListWin,
          *(_DWORD *)pCharID = v12,
          v22 = *((_DWORD *)pvData + 4),
          (v15 = CChatRestrict::Get(&v14->m_RestrictList, (Name5 *)pCharID)) != 0)
      && v15->bIsGM == 1 )
    {
      if ( strcmp(
             acName,
             (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)()) )
      {
        *(_DWORD *)v17 = *((_DWORD *)pvData + 1);
        *(_QWORD *)&v17[4] = *((_QWORD *)pvData + 1);
        *(_QWORD *)&v17[12] = *((_QWORD *)pvData + 2);
        GameFrameWork::AddOtherGuildAcademyChat(v10, *(Name5 *)v17, acStr);
      }
      else
      {
        *(_DWORD *)v16 = *((_DWORD *)pvData + 1);
        *(_QWORD *)&v16[4] = *((_QWORD *)pvData + 1);
        *(_QWORD *)&v16[12] = *((_QWORD *)pvData + 2);
        GameFrameWork::AddGuildAcademyChat(v10, *(Name5 *)v16, acStr);
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A67F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_NPCMENUOPEN_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  int v4; // edi@1
  int v5; // esi@1
  int v6; // edx@3
  int v7; // eax@4
  int result; // eax@6

  v3 = this;
  (*(void (__stdcall **)(int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(*(_WORD *)pvData);
  v4 = *(_WORD *)pvData;
  v5 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                        + 16))(
                          ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                          v4)
    && (unsigned __int16)v4 <= *(_WORD *)(v5 + 200)
    && (v6 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v6 + 4 * v4))
    && (v7 = *(_DWORD *)(v6 + 4 * v4)) != 0
    && *(_DWORD *)(v7 + 170) == 23 )
  {
    GameFrameWork::OpenMapLinkGateWin(v3);
    result = iRevBytes;
  }
  else
  {
    if ( (unsigned __int8)((int (*)(void))v3->m_pkItemShopWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v3->m_pkItemShopWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v3->m_pkStorageWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v3->m_pkNPCSkillWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v3->m_pkNPCSoulWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      OutputDebugStringA("\ni don't open the dialog since shop is open\n");
      result = iRevBytes;
    }
    else
    {
      NpcDialogWin::OpenNpcNormalDialog(v3->m_pkNpcDlgWin, *(_WORD *)pvData, 0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
      result = iRevBytes;
    }
  }
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (004A6910) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEEMOTICON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // ebx@1
  int v4; // edi@2
  int v5; // esi@2
  int v6; // edx@4
  int v7; // eax@5

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v4 = *((_BYTE *)pvData + 2);
    v5 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                          + 16))(
                            ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                            v4) )
    {
      if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196);
        if ( *(_DWORD *)(v6 + 4 * v4) )
        {
          v7 = *(_DWORD *)(v6 + 4 * v4);
          if ( v7 )
            ((void (__thiscall *)(Char *, _DWORD))v3->baseclass_0.vfptr[14].SetAbStateProperty)(v3, *(_BYTE *)v7);
        }
      }
    }
  }
  return iRevBytes;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (004A6980) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEEMOTICONSTOP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // ebx@1
  char v5; // kr00_1@3
  float pvDataa; // [sp+24h] [bp+Ch]@3

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 && v3 != g_pkMainChar )
  {
    v5 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 16))(
           ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
           *((_BYTE *)pvData + 2));
    ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[14].SetAbStateProperty)(v4);
    pvDataa = (double)*(_WORD *)((char *)pvData + 3) / 1000.0;
    ((void (__thiscall *)(Char *, signed int, _DWORD))v4->baseclass_0.vfptr[14].AddAbStateByAbstateIndex)(
      v4,
      1,
      LODWORD(pvDataa));
  }
  return iRevBytes;
}
// 4A6980: could not find valid save-restore pair for edi
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (004A6A30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONERIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  int v5; // eax@2
  _BYTE v6[12]; // ST10_12@2
  _BYTE v7[12]; // ST04_12@2

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 8, 64);
  v4 = v3;
  if ( v3 )
  {
    Char::RidePet(v3, *((_WORD *)pvData + 1));
    Char::SetMode(v4, 6);
    v5 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
    *(_DWORD *)v6 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v6[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v7 = *(_DWORD *)v5;
    *(_QWORD *)&v7[4] = *(_QWORD *)(v5 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_St01", *(NiPoint3 *)v7, *(NiPoint3 *)v6, Timer::ms_fCurTime, 1.0);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A6AD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_RIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@2
  _BYTE v5[12]; // ST10_12@2
  _BYTE v6[12]; // ST04_12@2

  v3 = this;
  if ( g_pkMainChar )
  {
    Char::GetoutOfPet(g_pkMainChar);
    Char::SetMode(g_pkMainChar, 1);
    v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    *(_DWORD *)v5 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v5[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v6 = *(_DWORD *)v4;
    *(_QWORD *)&v6[4] = *(_QWORD *)(v4 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_Fi01", *(NiPoint3 *)v6, *(NiPoint3 *)v5, Timer::ms_fCurTime, 1.0);
  }
  GameFrameWork::CloseRidePetWin(v3);
  GameFrameWork::ChangeRun(v3);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A6B70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONERIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  int v5; // eax@2
  _BYTE v6[12]; // ST10_12@2
  _BYTE v7[12]; // ST04_12@2

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 8, 67);
  v4 = v3;
  if ( v3 )
  {
    Char::GetoutOfPet(v3);
    Char::SetMode(v4, 1);
    v5 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
    *(_DWORD *)v6 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v6[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v7 = *(_DWORD *)v5;
    *(_QWORD *)&v7[4] = *(_QWORD *)(v5 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_Fi01", *(NiPoint3 *)v7, *(NiPoint3 *)v6, Timer::ms_fCurTime, 1.0);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A6C10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_TARGETINFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  Char *v4; // eax@1
  Char *v5; // esi@1
  TargetWin *v7; // eax@6
  const char *v8; // eax@10

  v3 = this;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)((char *)pvData + 1));
  v5 = v4;
  if ( *(_WORD *)((char *)pvData + 1) == -1 )
  {
    if ( (*(_BYTE *)pvData & 0xF) == 1 )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkTOTWin->baseclass_0.baseclass_0.baseclass_0);
      MainChar::SetTOTChar((MainChar *)g_pkMainChar, 0xFFFFu);
      return iRevBytes;
    }
  }
  else
  {
    if ( v4 )
    {
      if ( !(*(_BYTE *)pvData & 0xF) )
      {
        Char::HpUpdate(v4, *((_WORD *)pvData + 14), *(_DWORD *)((char *)pvData + 3));
        ((void (__thiscall *)(_DWORD, _DWORD))v5->baseclass_0.vfptr[4].SetAbStateProperty)(
          v5,
          *(_DWORD *)((char *)pvData + 7));
        ((void (__thiscall *)(_DWORD, _DWORD))v5->baseclass_0.vfptr[4].IsVisible)(v5, *(_DWORD *)((char *)pvData + 11));
        ((void (__thiscall *)(_DWORD, _DWORD))v5->baseclass_0.vfptr[4].AddAbStateByAbstateIndex)(
          v5,
          *(_DWORD *)((char *)pvData + 15));
        MainChar::SetTOTChar((MainChar *)g_pkMainChar, 0xFFFFu);
        MainChar::SetTargetChar((MainChar *)g_pkMainChar, v5);
        v5->baseclass_0.vfptr[4].__vecDelDtor((AbStateInfectee *)v5, *(_DWORD *)((char *)pvData + 19));
        ((void (__thiscall *)(_DWORD, _DWORD))v5->baseclass_0.vfptr[5].Affect)(v5, *(_DWORD *)((char *)pvData + 23));
        v7 = v3->m_pkTargetWin;
        if ( v7 )
          v7->m_kTempLV = *((_BYTE *)pvData + 27);
        LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) = (*(_BYTE *)pvData & 0x10) == 16;
        if ( !(*(_BYTE *)pvData & 0xF) )
        {
          if ( v3->m_pkGMPrisonWin )
          {
            v8 = (const char *)((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v5);
            GMPrisonWin::SetCharName(v3->m_pkGMPrisonWin, v8);
          }
        }
      }
      if ( (*(_BYTE *)pvData & 0xF) == 1 )
      {
        Char::TOTHpUpdate(v5, *((_WORD *)pvData + 14), *(_DWORD *)((char *)pvData + 3));
        v5->baseclass_0.vfptr[5].DeleteAbStateByAbstateIndex(
          (AbStateInfectee *)v5,
          *(ABSTATEINDEX *)((char *)pvData + 7));
        MainChar::SetTOTChar((MainChar *)g_pkMainChar, *(_WORD *)((char *)pvData + 1));
        TargetOfTheTargetWin::SetTargetLv(v3->m_pkTOTWin, *((_BYTE *)pvData + 27));
        if ( !v3->m_pkTargetWin->m_bEnableTOT )
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkTOTWin->baseclass_0.baseclass_0.baseclass_0);
          return iRevBytes;
        }
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkTOTWin->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
  return iRevBytes;
}

//----- (004A6DE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONELEVELUP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1
  void *v4; // eax@1
  unsigned __int16 v5; // ST20_2@3
  Char *v6; // eax@3
  Char *v7; // esi@3
  int dwDummy; // [sp+20h] [bp-14h]@16
  void *v10; // [sp+24h] [bp-10h]@1
  int v11; // [sp+30h] [bp-4h]@1

  v3 = (PgFrameWork *)this;
  v4 = operator new(0x14u);
  v10 = v4;
  v11 = 0;
  if ( v4 )
    CharDeadEvent_SomeoneLevelUp::CharDeadEvent_SomeoneLevelUp(
      (CharDeadEvent_SomeoneLevelUp *)v4,
      v3,
      (PROTO_NC_BAT_SUMEONELEVELUP_CMD *)pvData);
  v5 = *(_WORD *)pvData;
  v11 = -1;
  v6 = CharMgr::GetChar(&g_kCharMgr, v5);
  v7 = v6;
  if ( v6
    && ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)(v6) == 120
    && (Char::GetClass(v7) == 4
     || Char::GetClass(v7) == 5
     || Char::GetClass(v7) == 9
     || Char::GetClass(v7) == 10
     || Char::GetClass(v7) == 14
     || Char::GetClass(v7) == 15
     || Char::GetClass(v7) == 19
     || Char::GetClass(v7) == 20
     || Char::GetClass(v7) == 24
     || Char::GetClass(v7) == 25
     || Char::GetClass(g_pkMainChar) == 27) )
    EffectMgr::CreateAttachEffect(
      &g_kEffectMgr,
      (unsigned int *)&dwDummy,
      "Aura120",
      v7,
      None,
      Timer::ms_fCurTime,
      1,
      1,
      0,
      1);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A6F20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_BLAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  Char *v4; // eax@1
  Char *v5; // esi@1
  signed int v6; // esi@5
  unsigned __int16 v7; // di@5
  int v8; // eax@8
  char v9; // cl@9
  ShortCutWin **v10; // ebx@14
  ShortCutWin **v11; // esi@18
  signed int v12; // ebx@18
  GameFrameWork *v14; // [sp+18h] [bp-20Ch]@1
  ShortCutWin **v15; // [sp+1Ch] [bp-208h]@14
  char acConversionData1[256]; // [sp+20h] [bp-204h]@7
  char acSkillName[256]; // [sp+120h] [bp-104h]@7
  unsigned int v18; // [sp+220h] [bp-4h]@1
  int v19; // [sp+224h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  v14 = this;
  v4 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
  v5 = v4;
  if ( v4 )
  {
    AttackSequenceManager::GetSkillDmgInfoSetbyIndex(&v4->baseclass_54, *(_WORD *)pvData);
    if ( v5->m_kHandle == g_pkMainChar->m_kHandle )
    {
      CastingProgressWin::CastingSuccess(v3->m_pkCastingProgressBar);
      Char::SetReserveSkillSmash(g_pkMainChar, 1);
      v6 = 0;
      v3->m_kSkillCasting.eState = 0;
      v7 = *((_WORD *)pvData + 2);
      if ( !AbStateInfectee::FindAbstateInstBySubAbstateType(&g_pkMainChar->baseclass_0, SUBAB_COOLTIMEREMOVE)
        && v7 != -1 )
      {
        acSkillName[0] = 0;
        memset(&acSkillName[1], 0, 0xFFu);
        acConversionData1[0] = 0;
        memset(&acConversionData1[1], 0, 0xFFu);
        if ( IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v7, 1) )
        {
          sprintf(acSkillName, "%s");
          v8 = (int)acSkillName;
          do
            v9 = *(_BYTE *)v8++;
          while ( v9 );
          strncpy(acConversionData1, acSkillName, v8 - (_DWORD)&acSkillName[1] - 2);
          if ( !strcmp(acConversionData1, "GroundStrike") )
            MainChar::EnableAirBorne((MainChar *)g_pkMainChar, 1, v7);
        }
        if ( !ShortCutWin::IsToggleOn(v3->m_pkShortCutWin, v7) && !ShortCutWin::IsToggleOn(v3->m_pkShortCutWinV, v7) )
        {
          v10 = v3->m_pkShortCutSubWinV;
          v15 = v10;
          while ( !ShortCutWin::IsToggleOn(*(v10 - 5), v7) && !ShortCutWin::IsToggleOn(*v10, v7) )
          {
            ++v6;
            ++v10;
            if ( v6 >= 4 )
            {
              Skill::RecordSkillUse(v7, Timer::ms_fCurTime, 0.0, 0.0);
              ShortCutWin::StartSkill(v14->m_pkShortCutWin, v7, Timer::ms_fCurTime);
              ShortCutWin::StartSkill(v14->m_pkShortCutWinV, v7, Timer::ms_fCurTime);
              v11 = v15;
              v12 = 4;
              do
              {
                ShortCutWin::StartSkill(*(v11 - 5), v7, Timer::ms_fCurTime);
                ShortCutWin::StartSkill(*v11, v7, Timer::ms_fCurTime);
                ++v11;
                --v12;
              }
              while ( v12 );
              return iRevBytes;
            }
          }
        }
      }
    }
    else
    {
      Char::SetReserveSkillSmash(v5, 1);
    }
  }
  else
  {
    OutputDebugStringA("haven't char\n");
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A71B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_CEASE_FIRE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 && (v3->m_kHandle != g_pkMainChar->m_kHandle || !Char::IsActGathering(g_pkMainChar)) )
  {
    v4->baseclass_0.vfptr[11].GetAbstateColor((AbStateInfectee *)v4);
    AttackSequenceManager::HardStopAttack(&v4->baseclass_54);
    if ( v4->m_bUserCharacter )
      Char::UpdateWeaponEquipState(v4);
    if ( Char::CheckActState(v4, 300000) )
    {
      ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v4);
      return iRevBytes;
    }
    if ( v4->baseclass_0.m_kAbStateProperty.iUnAttackableCount && !Char::IsAbStateAction(v4) )
    {
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)(v4) )
      {
        Char::CancelSkillAction(v4, 1);
        AttackSequenceManager::ApplicateSkillSeqImmediately(&v4->baseclass_54, v4, 1, 0);
        AttackSequenceManager::ApplicateAttackSeqImmediately(&v4->baseclass_54, 1);
      }
    }
  }
  return iRevBytes;
}

//----- (004A7290) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SWING_DAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  int v4; // edx@4
  char v5; // cl@8
  int v6; // esi@8
  Char *v7; // eax@17
  GameFrameWork *v8; // ebx@21
  unsigned int v9; // eax@21
  Char *v10; // eax@26
  unsigned __int16 v11; // ax@30
  unsigned __int16 v12; // ax@30
  ShortCutWin **v13; // esi@30
  signed int v14; // edi@30
  unsigned __int16 v15; // ax@31
  unsigned __int16 v16; // ax@31
  GameFrameWork *thisa; // [sp+4h] [bp-4h]@1
  Char *pkAttacker; // [sp+14h] [bp+Ch]@3

  v3 = pvData;
  thisa = this;
  if ( g_pkMainChar->m_kHandle == *((_WORD *)pvData + 1) )
    WaitingForLogoutWin::Cancel(this->m_pkWaitingForLogoutWin);
  pkAttacker = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( pkAttacker )
  {
    v4 = *((_WORD *)v3 + 3);
    if ( v4 < 0 )
      v4 = 0;
    if ( v4 & 0xFFFF0000 )
      v4 = (unsigned __int16)v4;
    v5 = *((_BYTE *)v3 + 4);
    v6 = v4 | (*((_DWORD *)v3 + 2) != 0 ? 0 : -2147483648) | (((unsigned __int8)(v5 & 0x80) | ((v5 & 0x48 | 2 * (v5 & 2 | 16 * (v5 & 4 | 8 * (v5 & 1)))) << 9)) << 13);
    if ( v5 & 0x10 && pkAttacker == g_pkMainChar && Inventory::GetEquipedWeaponAcc(&g_kInventory) )
      Inventory::DecreaeWeaponAccCharged(&g_kInventory);
    if ( *((_BYTE *)v3 + 5) & 1 && pkAttacker == g_pkMainChar && Inventory::GetEquipedShieldAcc(&g_kInventory) )
      Inventory::DecreaeShieldAccCharged(&g_kInventory);
    AttackSequenceManager::AddAttMultiDmg(
      &pkAttacker->baseclass_54,
      *((_BYTE *)v3 + 15),
      *((_BYTE *)v3 + 14),
      v6,
      *((_WORD *)v3 + 1),
      *((_WORD *)v3 + 6),
      *((_DWORD *)v3 + 2),
      1);
    if ( !*((_DWORD *)v3 + 2) )
    {
      v7 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v3 + 1));
      if ( v7 )
        v7->m_bWillDead = 1;
    }
    if ( pkAttacker != g_pkMainChar || *((_DWORD *)v3 + 2) )
    {
      v8 = thisa;
    }
    else
    {
      v8 = thisa;
      v9 = thisa->m_uiGuideViewKillCount;
      if ( v9 < 3 )
        thisa->m_uiGuideViewKillCount = v9 + 1;
      if ( thisa->m_uiGuideViewKillCount == 3 )
      {
        GameFrameWork::OpenPlayGuideWin(thisa, BIL_MONSTER_1);
        ++thisa->m_uiGuideViewKillCount;
      }
    }
    v10 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v3 + 1));
    if ( v10 && v10 == g_pkMainChar && MainChar::IsAirBorneState((MainChar *)g_pkMainChar) && v6 )
    {
      v11 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      ShortCutWin::IsStartCollTime(v8->m_pkShortCutWin, v11);
      v12 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      ShortCutWin::IsStartCollTime(v8->m_pkShortCutWinV, v12);
      v13 = v8->m_pkShortCutSubWinV;
      v14 = 4;
      do
      {
        v15 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*(v13 - 5), v15);
        v16 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*v13, v16);
        ++v13;
        --v14;
      }
      while ( v14 );
    }
  }
  return iRevBytes;
}

//----- (004A74C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESWING_DAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // eax@3

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    AttackSequenceManager::AddAttMultiDmg(
      &v3->baseclass_54,
      *((_BYTE *)pvData + 12),
      *((_BYTE *)pvData + 11),
      (*(_DWORD *)((char *)pvData + 5) != 0 ? 0 : -2147483648) | ((*((_BYTE *)pvData + 4) & 2 | ((*((_BYTE *)pvData + 4) & 1) << 9)) << 20),
      *((_WORD *)pvData + 1),
      *(_WORD *)((char *)pvData + 9),
      *(_DWORD *)((char *)pvData + 5),
      0);
    if ( !*(_DWORD *)((char *)pvData + 5) )
    {
      v4 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
      if ( v4 )
        v4->m_bWillDead = 1;
    }
  }
  return iRevBytes;
}

//----- (004A7550) --------------------------------------------------------
int __thiscall GameFrameWork::ON_NC_BAT_REALLYKILL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int16 v3; // bx@1
  Char *v4; // esi@1
  Char *v5; // edi@2
  Tutorial *v6; // eax@9

  v3 = *(_WORD *)pvData;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v4 )
  {
    v5 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
    if ( v5 )
    {
      if ( !v4->m_bWillDead || !Char::CheckActState(v4, 500000) )
      {
        if ( Char::ModifyExistDyingSeq(v5, v3) )
          ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[20].Deaffect)(v4);
      }
      if ( MainChar::GetTargetType((MainChar *)g_pkMainChar, v4) == 3 && v5->m_kHandle == g_pkMainChar->m_kHandle )
      {
        v6 = Singleton<Tutorial>::getInstance();
        Tutorial::AddMobKillCount(v6);
        return iRevBytes;
      }
    }
    else
    {
      ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[20].Deaffect)(v4);
    }
  }
  return iRevBytes;
}

//----- (004A7610) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_PKINPKFIELD_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_WORD *)pvData == g_pkMainChar->m_kHandle )
    User::SetPKCount(&g_kUser, (unsigned int *)pvData + 1);
  return iRevBytes;
}

//----- (004A7640) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_JOINPROPOSE_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  MHDiceGameTask *v4; // ecx@5
  bool v5; // bl@5
  PartyJoinProposeWin *v6; // esi@6
  _BYTE v7[20]; // ST00_20@7
  NiPointer<MHDiceGameTask> result; // [sp+10h] [bp-10h]@5
  int v10; // [sp+1Ch] [bp-4h]@5

  v3 = this;
  if ( g_kParty.m_bDuringJoinPropose != 1 && !g_kParty.m_uiTotalMember )
  {
    if ( byte_B5BB2A
      || unk_AA2801
      || (v4 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject,
          v10 = 0,
          v5 = MHDiceGameTask::IsDicegamePlaying(v4),
          v10 = -1,
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result),
          v5) )
    {
      *(_DWORD *)v7 = *(_DWORD *)pvData;
      *(_QWORD *)&v7[4] = *(_QWORD *)((char *)pvData + 4);
      *(_QWORD *)&v7[12] = *(_QWORD *)((char *)pvData + 12);
      GameFrameWork::NcPartyJoinProposeRejectAck(v3, *(Name5 *)v7);
    }
    else
    {
      Party::SetJoinProposeData(&g_kParty, (PROTO_NC_PARTY_JOINPROPOSE_REQ *)pvData);
      v6 = PartyJoinProposeWin::CreateWin(&v3->baseclass_0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v6->baseclass_0.baseclass_0.baseclass_0);
      ITimer::SetTimer(&v6->baseclass_158, 15.0);
    }
  }
  return iRevBytes;
}
// B5BB2A: using guessed type char byte_B5BB2A;

//----- (004A7740) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_MEMBER_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  PartyWinInterface *v4; // ecx@1
  unsigned int v5; // esi@3
  PartyMemberInfo *v6; // eax@4

  v3 = this;
  Party::SetMemberList(&g_kParty, (PROTO_NC_PARTY_MEMBER_LIST_CMD *)pvData);
  v4 = v3->m_pkPartyWinInterface;
  if ( v4 )
    PartyWinInterface::Update(v4);
  v5 = 0;
  if ( g_kParty.m_uiTotalMember )
  {
    do
    {
      v6 = Party::GetMemberInfo(&g_kParty, v5);
      if ( v6 )
        MiniMapWin::AddParty(v3->m_pkMiniMapWin, v6);
      ++v5;
    }
    while ( v5 < g_kParty.m_uiTotalMember );
  }
  LOWORD(pvData) = 14408;
  PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &pvData, 2);
  return iRevBytes;
}

//----- (004A77C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_MEMBERINFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // edi@1
  char *v4; // esi@2
  _BYTE v5[20]; // ST00_20@3
  PartyMemberInfo *v6; // eax@3
  PartyWinInterface *v7; // ecx@4
  GameFrameWork *v9; // [sp+Ch] [bp-8h]@1

  v3 = 0;
  v9 = this;
  if ( *(_BYTE *)pvData )
  {
    v4 = (char *)pvData + 21;
    do
    {
      *(_DWORD *)v5 = *((_DWORD *)v4 - 5);
      *(_DWORD *)&v5[4] = *((_DWORD *)v4 - 4);
      *(_DWORD *)&v5[8] = *((_DWORD *)v4 - 3);
      *(_DWORD *)&v5[12] = *((_DWORD *)v4 - 2);
      *(_DWORD *)&v5[16] = *((_DWORD *)v4 - 1);
      v6 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v5);
      if ( v6 )
      {
        v6->m_iHP = *(_DWORD *)v4;
        v6->m_iSP = *((_DWORD *)v4 + 1);
        v6->m_bShow = 1;
        v6->m_iLP = *((_DWORD *)v4 + 2);
        v7 = v9->m_pkPartyWinInterface;
        if ( v7 )
          PartyWinInterface::Update(v7);
      }
      ++v3;
      v4 += 32;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}

//----- (004A7860) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // edi@2
  PgNet *v5; // ecx@2
  __int16 v7; // [sp+4h] [bp-8h]@2
  char v8; // [sp+6h] [bp-6h]@2
  __int16 pdata; // [sp+8h] [bp-4h]@2

  v3 = this;
  if ( PgWin::IsVisible(&this->m_pkPMWin->baseclass_0.baseclass_0.baseclass_0) )
  {
    v4 = v3->m_pkPMWin->m_nPageNum;
    pdata = 14420;
    PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &pdata, 2);
    v5 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
    v7 = v4;
    v8 = 20;
    PgNet::SendNetMsg(v5, &v7, 3);
  }
  return iRevBytes;
}

//----- (004A78D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_FINDER_DELETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  Name5 *v4; // eax@2
  CPartyMatchWin *v5; // ecx@2
  int v6; // edi@3
  PgNet *v7; // ecx@3
  PgNet *v8; // ecx@3
  __int16 pdata; // [sp+4h] [bp-20h]@3
  __int16 v11; // [sp+8h] [bp-1Ch]@3
  char v12; // [sp+Ah] [bp-1Ah]@3
  Name5 id; // [sp+Ch] [bp-18h]@2
  unsigned int v14; // [sp+20h] [bp-4h]@1
  int v15; // [sp+24h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  if ( *(_WORD *)pvData == 1365 )
  {
    v4 = User::GetMainCharID(&g_kUser);
    *(_QWORD *)&id.n5_name[0] = *(_QWORD *)&v4->n5_name[0];
    *(_QWORD *)&id.n5_name[8] = *(_QWORD *)&v4->n5_name[8];
    v5 = v3->m_pkPMWin;
    *(_DWORD *)&id.n5_name[16] = *(_DWORD *)&v4->n5_name[16];
    CPartyMatchWin::DelPartyInfo(v5, &id);
    if ( PgWin::IsVisible(&v3->m_pkPMWin->baseclass_0.baseclass_0.baseclass_0) )
    {
      v6 = v3->m_pkPMWin->m_nPageNum;
      v7 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
      pdata = 14420;
      PgNet::AddNetMsg(v7, &pdata, 2);
      v8 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
      v11 = v6;
      v12 = 20;
      PgNet::SendNetMsg(v8, &v11, 3);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A7990) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_SHOPOPENTABLE_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@1
  int v4; // edi@1
  int v5; // ecx@3
  int v6; // eax@4
  int v7; // eax@5
  GameFrameWork *v9; // [sp+Ch] [bp-4h]@1

  v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v4 = *(_WORD *)((char *)pvData + 5);
  v9 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          *(_WORD *)((char *)pvData + 5)) )
  {
    if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
    {
      v5 = *(_DWORD *)(v3 + 196);
      if ( *(_DWORD *)(v5 + 4 * v4) )
      {
        v6 = *(_DWORD *)(v5 + 4 * v4);
        if ( v6 )
        {
          v7 = *(_DWORD *)(v6 + 102);
          if ( v7 == 35 || v7 == 16 )
            Market::SetItemEnchant((PROTO_NC_MENU_SHOPOPENTABLE_CMD *)pvData);
          else
            ItemMarket::SetItem((PROTO_NC_MENU_SHOPOPENTABLE_CMD *)pvData);
          GameFrameWork::OpenItemShopWin(v9, *((_WORD *)pvData + 1));
        }
      }
    }
  }
  return iRevBytes;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004A7A10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_REVIVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  Char *v4; // esi@1
  char v5; // bl@1
  bool (__thiscall *v6)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@1
  int v7; // eax@3
  _BYTE v8[12]; // ST10_12@3
  _BYTE v9[12]; // ST04_12@3

  v3 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkReviveMenuWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkRebirthMenuWin->baseclass_0.baseclass_0.baseclass_0);
  v4 = g_pkMainChar;
  v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)();
  v6 = v4->baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
  v4->m_byMode = 1;
  v4->m_eStandMode = 0;
  if ( v5 != (unsigned __int8)((int (__thiscall *)(Char *))v6)(v4) )
    v4->m_bIsChangeCampMode = 1;
  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[4].Affect)(*(_DWORD *)pvData);
  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[4].IsVisible)(*((_DWORD *)pvData + 1));
  g_pkMainChar->m_bWillDead = 0;
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
  User::SetHP(&g_kUser, *(_DWORD *)pvData);
  User::SetSP(&g_kUser, *((_DWORD *)pvData + 1));
  v7 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  *(_DWORD *)v8 = (_DWORD)NiPoint3::UNIT_Y.x;
  *(_QWORD *)&v8[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
  *(_DWORD *)v9 = *(_DWORD *)v7;
  *(_QWORD *)&v9[4] = *(_QWORD *)(v7 + 4);
  EffectMgr::CreateEffect(&g_kEffectMgr, "RevivalTarget", *(NiPoint3 *)v9, *(NiPoint3 *)v8, Timer::ms_fCurTime, 1.0);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A7B40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_SOMEONEREVIVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  void (__thiscall *v5)(AbStateInfectee *, AbStateInst *, bool); // edx@2
  int v6; // eax@2
  _BYTE v7[12]; // ST10_12@2
  _BYTE v8[12]; // ST04_12@2

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 )
  {
    Char::SetMode(v3, 1);
    v5 = v4->baseclass_0.vfptr[4].Affect;
    v4->m_bWillDead = 0;
    v4->m_bIsRevived = 0;
    ((void (__thiscall *)(Char *, _DWORD))v5)(v4, *(_DWORD *)((char *)pvData + 2));
    ((void (__thiscall *)(Char *, _DWORD))v4->baseclass_0.vfptr[4].IsVisible)(v4, *(_DWORD *)((char *)pvData + 6));
    ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v4);
    v6 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
    *(_DWORD *)v7 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v7[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v8 = *(_DWORD *)v6;
    *(_QWORD *)&v8[4] = *(_QWORD *)(v6 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "RevivalTarget", *(NiPoint3 *)v8, *(NiPoint3 *)v7, Timer::ms_fCurTime, 1.0);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A7C10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_DOWNBOARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  unsigned int v4; // eax@1
  InvWin *v5; // ecx@2

  v3 = this;
  v4 = UserTrade::RemoveMy(*(_BYTE *)pvData);
  if ( v4 < 0xC0 )
  {
    v5 = v3->m_pkInventoryWin->m_apkInvWin[v4];
    if ( v5 )
      InvWin::SetLock(v5, 0);
  }
  return iRevBytes;
}

//----- (004A7C50) --------------------------------------------------------
void __thiscall GameFrameWork::CleanUpTrade(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  unsigned int v2; // esi@1
  unsigned int v3; // eax@3
  InvWin *v4; // ecx@4

  v1 = this;
  v2 = 0;
  do
  {
    if ( UserTrade::GetMy(v2) )
    {
      v3 = UserTrade::GetMyInvIndex(v2);
      if ( v3 < 0xC0 )
      {
        v4 = v1->m_pkInventoryWin->m_apkInvWin[v3];
        if ( v4 )
          InvWin::SetLock(v4, 0);
      }
    }
    ++v2;
  }
  while ( v2 < 0xC );
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkUserTradeWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0);
  UserTrade::SetTrading(0);
  UserTrade::Clear();
}

//----- (004A7CD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_HP_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Tutorial *v3; // eax@1
  void *v4; // eax@2
  SoundIndex rkIndex; // [sp+0h] [bp-14h]@1
  int v7; // [sp+10h] [bp-4h]@2

  User::SetHPStone(&g_kUser, *(_WORD *)pvData);
  rkIndex.m_dwIndex = 16;
  rkIndex.m_acFilename = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    v7 = 0;
    if ( v4 )
      Tutorial::Tutorial(v3);
    else
      v3 = 0;
    Singleton<Tutorial>::m_pInstance = v3;
  }
  v3->m_bBuyStone = 1;
  return iRevBytes;
}

//----- (004A7D80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_SP_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  SoundIndex rkIndex; // [sp+0h] [bp-8h]@1

  User::SetSPStone(&g_kUser, *(_WORD *)pvData);
  rkIndex.m_dwIndex = 16;
  rkIndex.m_acFilename = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  return iRevBytes;
}

//----- (004A7DD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_Nc_Kq_Complete_Cmd(GameFrameWork *this, int iRevBytes, void *pvData)
{
  NiNode *v3; // eax@1
  SoundIndex rkIndex; // [sp+Ch] [bp-8h]@2

  v3 = this->m_pEffect1.m_pObject;
  if ( v3 )
  {
    v3->baseclass_0.m_kLocal.m_Translate.x = 500.0;
    *(float *)&rkIndex.m_dwIndex = -500.0;
    v3->baseclass_0.m_kLocal.m_Translate.y = -500.0;
    *(float *)&rkIndex.m_acFilename = 0.0;
    v3->baseclass_0.m_kLocal.m_Translate.z = 0.0;
    PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &this->m_pEffect1.m_pObject->baseclass_0);
    rkIndex.m_dwIndex = 0;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A7E50) --------------------------------------------------------
int __thiscall GameFrameWork::On_Nc_Kq_Fail_Cmd(GameFrameWork *this, int iRevBytes, void *pvData)
{
  NiNode *v3; // eax@1
  SoundIndex rkIndex; // [sp+Ch] [bp-8h]@2

  v3 = this->m_pEffect2.m_pObject;
  if ( v3 )
  {
    v3->baseclass_0.m_kLocal.m_Translate.x = 500.0;
    *(float *)&rkIndex.m_dwIndex = -500.0;
    v3->baseclass_0.m_kLocal.m_Translate.y = -500.0;
    *(float *)&rkIndex.m_acFilename = 0.0;
    v3->baseclass_0.m_kLocal.m_Translate.z = 0.0;
    PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &this->m_pEffect2.m_pObject->baseclass_0);
    rkIndex.m_dwIndex = 1;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A7ED0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_SCORE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  signed int v4; // edi@1
  char *v5; // esi@2
  int v6; // edx@3
  int v7; // eax@3
  int v8; // ecx@3
  int v9; // edx@3
  unsigned int v10; // ST1C_4@3
  char v11; // ST18_1@3
  unsigned int v12; // ST0C_4@3
  unsigned int v13; // ST08_4@3
  unsigned int v14; // ST04_4@3
  PkKqRankingWin *v15; // ecx@3
  GameFrameWork *v17; // [sp+Ch] [bp-20h]@1
  char acName[21]; // [sp+10h] [bp-1Ch]@3
  unsigned int v19; // [sp+28h] [bp-4h]@1
  int v20; // [sp+2Ch] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v3 = this;
  v17 = this;
  PkKqRankingWin::Clear(this->m_pkPkKqRankingWin);
  PkKqRankingWin::SetBaseScore(v3->m_pkPkKqRankingWin, *(_DWORD *)((char *)pvData + 1));
  v4 = 0;
  if ( *(_BYTE *)pvData )
  {
    v5 = (char *)pvData + 13;
    do
    {
      v6 = *((_DWORD *)v5 - 1);
      v7 = *(_DWORD *)v5;
      *(_DWORD *)acName = *((_DWORD *)v5 - 2);
      v8 = *((_DWORD *)v5 + 1);
      *(_DWORD *)&acName[4] = v6;
      v9 = *((_DWORD *)v5 + 2);
      *(_DWORD *)&acName[12] = v8;
      v10 = *(_DWORD *)(v5 + 26);
      *(_DWORD *)&acName[8] = v7;
      LOBYTE(v7) = v5[12];
      *(_DWORD *)&acName[16] = v9;
      v11 = v5[13];
      v12 = *(_DWORD *)(v5 + 22);
      v13 = *(_DWORD *)(v5 + 18);
      v14 = *(_DWORD *)(v5 + 14);
      v15 = v17->m_pkPkKqRankingWin;
      acName[20] = 0;
      PkKqRankingWin::AddRanking(v15, acName, v14, v13, v12, v7 & 0x7F, (unsigned __int8)v7 >> 7, v11, v10);
      ++v4;
      v5 += 38;
    }
    while ( v4 < *(_BYTE *)pvData );
    v3 = v17;
  }
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkPkKqRankingWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A7FA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_SCORE_SIMPLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // edi@1
  char *v4; // esi@2
  int v5; // edx@3
  int v6; // ecx@3
  int v7; // eax@3
  int v8; // ecx@3
  unsigned int v9; // ST0C_4@3
  unsigned int v10; // eax@3
  unsigned int v11; // ST04_4@3
  PkRealTiemRankWin *v12; // ecx@3
  GameFrameWork *v14; // [sp+8h] [bp-20h]@1
  char acname[21]; // [sp+Ch] [bp-1Ch]@3
  unsigned int v16; // [sp+24h] [bp-4h]@1
  int v17; // [sp+28h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = 0;
  v14 = this;
  if ( *(_BYTE *)pvData )
  {
    v4 = (char *)pvData + 26;
    do
    {
      v5 = *(_DWORD *)v4;
      v6 = *((_DWORD *)v4 - 1);
      *(_DWORD *)acname = *((_DWORD *)v4 - 2);
      v7 = *((_DWORD *)v4 + 1);
      *(_DWORD *)&acname[4] = v6;
      v8 = *((_DWORD *)v4 + 2);
      *(_DWORD *)&acname[8] = v5;
      v9 = *((_DWORD *)v4 + 3);
      *(_DWORD *)&acname[12] = v7;
      v10 = *((_DWORD *)v4 + 4);
      *(_DWORD *)&acname[16] = v8;
      v11 = *((_DWORD *)v4 + 5);
      v12 = v14->m_pkKQPKRealTimeRankWin;
      acname[20] = 0;
      PkRealTiemRankWin::SetRankInfo(v12, acname, v11, v10, v9);
      ++v3;
      v4 += 32;
    }
    while ( v3 < *(_BYTE *)pvData );
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A8030) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_RUNEFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // ecx@1
  int v4; // edx@1
  int v5; // eax@1
  __int64 v6; // ST30_8@1
  int v7; // eax@1
  float v8; // ST1C_4@1
  _BYTE v9[12]; // ST10_12@1
  _BYTE v10[12]; // ST04_12@1
  char acName[17]; // [sp+1Ch] [bp-18h]@1
  unsigned int v13; // [sp+30h] [bp-4h]@1
  int v14; // [sp+34h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = *((_DWORD *)pvData + 2);
  *(_DWORD *)acName = *(_DWORD *)pvData;
  v5 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[4] = v3;
  *(_DWORD *)&acName[12] = v5;
  *(_DWORD *)&acName[8] = v4;
  acName[16] = 0;
  v7 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  v8 = (double)*((unsigned int *)pvData + 4);
  *(float *)v9 = 0.0;
  *((float *)&v6 + 1) = 0.0;
  *(float *)&v6 = 1.0;
  *(_QWORD *)&v9[4] = v6;
  *(_DWORD *)v10 = *(_DWORD *)v7;
  *(_QWORD *)&v10[4] = *(_QWORD *)(v7 + 4);
  EffectMgr::CreateEffect(&g_kEffectMgr, acName, *(NiPoint3 *)v10, *(NiPoint3 *)v9, v8, 1.0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A80F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_DOORSTATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // esi@1
  char v4; // al@2
  bool v6; // [sp+4h] [bp-Ch]@4

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 27, 9);
  if ( v3 )
  {
    v4 = *((_BYTE *)pvData + 2);
    if ( !v4 )
    {
      Char::SetDoorAnimation(v3, Timer::ms_fCurTime, DOOR_CLOSE);
      v6 = 1;
      goto LABEL_6;
    }
    if ( (unsigned __int8)(v4 - 1) <= 1u )
    {
      Char::SetDoorAnimation(v3, Timer::ms_fCurTime, 0);
      v6 = 0;
LABEL_6:
      World::SetSubBlockData(&g_kWorld, v3->m_szBlockName, v6);
      return iRevBytes;
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A8160) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_OBJTYPECHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 27, 11);
  if ( v3 )
    v3->m_byType = *((_BYTE *)pvData + 2);
  return iRevBytes;
}

//----- (004A8190) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_FOG_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int8 v3; // al@1
  int result; // eax@3
  float fFog; // [sp+10h] [bp+Ch]@1

  flt_B30B8C = (double)*(_WORD *)((char *)pvData + 1);
  v3 = *(_BYTE *)pvData;
  fFog = 0.0;
  if ( v3 )
    fFog = (double)v3 / 100.0;
  World::SetFogDepth(&g_kWorld, fFog);
  result = iRevBytes;
  byte_AA5149 = 1;
  return result;
}
// AA5149: using guessed type char byte_AA5149;
// B30B8C: using guessed type float flt_B30B8C;

//----- (004A81F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_ANIMATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // edi@1
  int v4; // edx@2
  int v5; // eax@2
  int v6; // ecx@2
  int v7; // edx@2
  int v8; // eax@2
  int v9; // ecx@2
  int v10; // edx@2
  AttackSequenceManagerVtbl *v11; // eax@2
  NiActorManager *(__thiscall *v12)(AttackSequenceManager *); // edx@2
  NiActorManager *v13; // eax@3
  char acActCode[33]; // [sp+8h] [bp-28h]@2
  unsigned int v16; // [sp+2Ch] [bp-4h]@1
  int v17; // [sp+30h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v4 = *(_DWORD *)((char *)pvData + 6);
    v5 = *(_DWORD *)((char *)pvData + 10);
    *(_DWORD *)acActCode = *(_DWORD *)((char *)pvData + 2);
    v6 = *(_DWORD *)((char *)pvData + 14);
    *(_DWORD *)&acActCode[4] = v4;
    v7 = *(_DWORD *)((char *)pvData + 18);
    *(_DWORD *)&acActCode[8] = v5;
    v8 = *(_DWORD *)((char *)pvData + 22);
    *(_DWORD *)&acActCode[12] = v6;
    v9 = *(_DWORD *)((char *)pvData + 26);
    *(_DWORD *)&acActCode[16] = v7;
    v10 = *(_DWORD *)((char *)pvData + 30);
    *(_DWORD *)&acActCode[20] = v8;
    v11 = v3->baseclass_54.vfptr;
    *(_DWORD *)&acActCode[24] = v9;
    *(_DWORD *)&acActCode[28] = v10;
    v12 = v11->GetActor;
    acActCode[32] = 0;
    if ( v12(&v3->baseclass_54) )
    {
      v13 = (NiActorManager *)v3->baseclass_54.vfptr->GetActor(&v3->baseclass_54);
      NiActorManager::Reset(v13);
    }
    Char::ActAction(v3, acActCode, 0);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A8290) --------------------------------------------------------
void __thiscall GameFrameWork::NcReportGetReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-8h]@1
  PROTO_NC_REPORT_GET_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -32763;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004A82D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcReportCancelReq(GameFrameWork *this, int iRegNum)
{
  GameFrameWork *v2; // esi@1
  int v3; // eax@2
  PgNet *v4; // ecx@2
  PROTO_NC_REPORT_CANCEL_REQ kProto; // [sp+4h] [bp-4h]@2

  v2 = this;
  if ( this->m_pkReportWin )
  {
    v3 = iRegNum;
    LOWORD(iRegNum) = -32765;
    v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    kProto.nRegNumber = v3;
    PgNet::AddNetMsg(v4, &iRegNum, 2);
    PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 4);
  }
}

//----- (004A8320) --------------------------------------------------------
void __thiscall GameFrameWork::NcPrisonEndReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-8h]@1
  PROTO_NC_PRISON_END_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = 31748;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004A8360) --------------------------------------------------------
void __thiscall GameFrameWork::NcMiniHouseActivReq(GameFrameWork *this, const char bySlot)
{
  GameFrameWork *v2; // esi@1
  unsigned int v3; // eax@2
  PgNet *v4; // ecx@2
  NETCOMMAND netcmd; // [sp+8h] [bp-8h]@2
  PROTO_NC_MINIHOUSE_ACTIV_REQ kProto; // [sp+Fh] [bp-1h]@2

  v2 = this;
  if ( dwPrevTimeWhenHouseChanged_0 + 2000 < timeGetTime() )
  {
    v3 = timeGetTime();
    v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
    dwPrevTimeWhenHouseChanged_0 = v3;
    netcmd.protocol = -29695;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    kProto.slot = bySlot;
    PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &kProto, 1);
  }
}

//----- (004A83D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_STAT_INITIALIZE_SUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  User::ClearDistributeStatPoint(&g_kUser);
  result = iRevBytes;
  n = *(_BYTE *)pvData;
  return result;
}

//----- (004A83F0) --------------------------------------------------------
void __thiscall GameFrameWork::On_NC_ACT_ROAR_REQ(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@2
  RoarWin *v3; // eax@2
  int v4; // eax@2
  void *v5; // edi@2
  int v6; // edx@2
  char v7; // cl@3
  int v8; // eax@4
  int v9; // ebx@4
  PgNet *v10; // ecx@4
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@2
  PROTO_NC_ACT_ROAR_REQ kProto; // [sp+8h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkRoarWin )
  {
    v2 = (PgNet *)this->m_spZoneNet.m_pObject;
    netcmd.protocol = 8267;
    PgNet::AddNetMsg(v2, &netcmd, 2);
    v3 = v1->m_pkRoarWin;
    kProto.slot = LOBYTE(v3->m_uiLockInvPos);
    v4 = ((int (__thiscall *)(EditWin *))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v3->m_spEdit.m_pObject);
    v5 = (void *)v4;
    v6 = v4 + 1;
    do
      v7 = *(_BYTE *)v4++;
    while ( v7 );
    v8 = v4 - v6;
    v9 = v8 + 1;
    v10 = (PgNet *)v1->m_spZoneNet.m_pObject;
    kProto.len = v8 + 1;
    PgNet::AddNetMsg(v10, &kProto, 2);
    PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, v5, v9);
  }
}

//----- (004A8480) --------------------------------------------------------
void __thiscall GameFrameWork::On_NC_MAP_WING_SAVE_REQ(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  PgNet *v3; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_MAP_WING_SAVE_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 6164;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  v3 = (PgNet *)v1->m_spZoneNet.m_pObject;
  kProto.where = LOBYTE(v1->m_pkWingStoneWin->m_uiMemorySlot);
  PgNet::AddNetMsg(v3, &kProto, 1);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kProto, 0);
}

//----- (004A84E0) --------------------------------------------------------
void __thiscall GameFrameWork::On_NC_MAP_WING_FLY_REQ(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  PgNet *v3; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_MAP_WING_FLY_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 6166;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  v3 = (PgNet *)v1->m_spZoneNet.m_pObject;
  kProto.where = LOBYTE(v1->m_pkWingStoneWin->m_uiMemorySlot);
  PgNet::AddNetMsg(v3, &kProto, 1);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kProto, 0);
}

//----- (004A8540) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_EXIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  MHDiceGameTask *v5; // ecx@3
  bool v6; // bl@3
  MHDiceGameTask *v7; // esi@4
  MHDiceGameTask *v8; // ecx@8
  int v9; // esi@9
  GameFrameWork *v11; // [sp+0h] [bp-18h]@1
  int v12; // [sp+4h] [bp-14h]@8
  NiPointer<MHDiceGameTask> result; // [sp+8h] [bp-10h]@3
  int v14; // [sp+14h] [bp-4h]@3

  v3 = this;
  v11 = this;
  if ( *(_WORD *)pvData == 4481 )
  {
    v5 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    v14 = 0;
    v6 = MHDiceGameTask::IsDicegamePlaying(v5);
    v14 = -1;
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    if ( v6 )
    {
      LOWORD(pvData) = 7312;
      v8 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v12)->m_pObject;
      v14 = 1;
      MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_ACK(v8, (PROTO_NC_DICE_TAISAI_GAME_LEAVE_ACK *)&pvData);
      v14 = -1;
      if ( v12 )
      {
        v9 = v12;
        if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
    }
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v11->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004A8660) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_CREATE_FURNITURE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 4545 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
    byte_AA507E = 1;
  }
  return iRevBytes;
}
// AA507E: using guessed type char byte_AA507E;

//----- (004A86A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_DELETE_FURNITURE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  mhObject *v4; // eax@1

  v3 = this;
  v4 = mhObjectManager::GetObjectA(&stru_AA4FA8, this->m_pkMHEmotionWin->m_ObjID);
  if ( v4 && (void *)v4->m_iGUID == (char *)pvData + 1 )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkMHEmotionWin->baseclass_0.baseclass_0.baseclass_0);
  MiniHouseIndoor::DelObject(&g_kWorld.m_MiniHouseIndoorMode, *(_WORD *)((char *)pvData + 1), 1);
  return iRevBytes;
}

//----- (004A8700) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_LOGOUTCOMPLETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  mhInfoWin *v4; // esi@4

  v3 = this;
  MiniHouseIndoor::DelJoinCharInfo(&g_kWorld.m_MiniHouseIndoorMode, *(_WORD *)pvData);
  if ( nowState == 5 && dword_AA501C == 2 )
  {
    MiniHouseIndoor::CancelPickObj(&g_kWorld.m_MiniHouseIndoorMode);
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
  }
  v4 = v3->m_pkMHInfoWin;
  if ( v4 )
  {
    mhInfoWin::RefreshGuestPage(v4);
    mhInfoWin::RefreshInfoPage(v4);
  }
  return iRevBytes;
}
// AA501C: using guessed type int dword_AA501C;

//----- (004A8760) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_LOGINCOMPLETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  mhInfoWin *v4; // esi@1

  v3 = this;
  MiniHouseIndoor::AddJoinCharInfo(&g_kWorld.m_MiniHouseIndoorMode, *(_WORD *)((char *)pvData + 1), *(_BYTE *)pvData);
  v4 = v3->m_pkMHInfoWin;
  if ( v4 )
  {
    mhInfoWin::RefreshGuestPage(v4);
    mhInfoWin::RefreshInfoPage(v4);
  }
  return iRevBytes;
}

//----- (004A87A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_VISITREADY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@4
  char *v5; // eax@6

  v3 = this;
  if ( *(_DWORD *)pvData != 4481 )
  {
    v5 = ErrMsgTable::GetErrMsg(*(_DWORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v5);
    return iRevBytes;
  }
  if ( nowState )
    return iRevBytes;
  if ( *((_BYTE *)pvData + 4) )
  {
    PgFrameWork::AddMsg(&this->baseclass_0, 0xCDu, 0, 0);
    result = iRevBytes;
  }
  else
  {
    PgFrameWork::AddMsg(&this->baseclass_0, 0xD8u, 0, 0);
    result = iRevBytes;
  }
  return result;
}

//----- (004A8810) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_COMPULSIONMOVETO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  float v5; // ST2C_4@2
  float v6; // ST30_4@2
  int v7; // eax@2
  _BYTE v8[12]; // ST10_12@2
  _BYTE v9[12]; // ST04_12@2

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 35, 42);
  v4 = v3;
  if ( v3 )
  {
    v6 = (double)*(unsigned int *)((char *)pvData + 6);
    v5 = (double)*(unsigned int *)((char *)pvData + 2);
    ((void (__thiscall *)(Char *, _DWORD, _DWORD, signed int))v3->baseclass_0.vfptr[7].IsVisible)(
      v3,
      LODWORD(v5),
      LODWORD(v6),
      1);
    v7 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
    *(_DWORD *)v8 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v8[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v9 = *(_DWORD *)v7;
    *(_QWORD *)&v9[4] = *(_QWORD *)(v7 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "RevivalTarget", *(NiPoint3 *)v9, *(NiPoint3 *)v8, Timer::ms_fCurTime, 1.0);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A88E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_ITEM_INFO_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_WORD *)pvData != 4481 )
    this->m_pkMHSettingWin->m_spCheckBox[1]->m_bCheck = this->m_pkMHSettingWin->m_spCheckBox[1]->m_bCheck == 0;
  return iRevBytes;
}

//----- (004A8920) --------------------------------------------------------
void __thiscall GameFrameWork::SendMHPortalOpenReq(GameFrameWork *this, unsigned __int16 ID)
{
  if ( ID != -1 )
  {
    if ( !mhObjectManager::GetObjectA(&stru_AA4FA8, 60000) )
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x50u, &ID, 2);
  }
}

//----- (004A8960) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ONGAMENET_OX_EVENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  SoundIndex *v6; // [sp-8h] [bp-18h]@3
  bool v7; // [sp-4h] [bp-14h]@3
  bool v8; // [sp+0h] [bp-10h]@3
  SoundIndex rkIndex; // [sp+8h] [bp-8h]@3

  v3 = this;
  CNSTimer_Interval::ReSet(&this->m_kTimerIntervalOXDelay, Timer::ms_fCurTime);
  v3->m_kTimerIntervalOXDelay.m_fCheckTime = 4.0;
  if ( *(_BYTE *)pvData == 1 )
  {
    v4 = 0;
    if ( v3->m_pOXEffectO.m_pObject )
    {
      v8 = 0;
      v3->m_bOXEventEnable = 1;
      v3->m_bOEnable = 1;
      v7 = 0;
      v6 = &rkIndex;
LABEL_7:
      rkIndex.m_dwIndex = 30;
      rkIndex.m_acFilename = v4;
      SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, v6, v7, v8);
      return iRevBytes;
    }
  }
  else
  {
    if ( *(_BYTE *)pvData == 2 )
    {
      v4 = 0;
      if ( v3->m_pOXEffectX.m_pObject )
      {
        v8 = 0;
        v7 = 0;
        v3->m_bOXEventEnable = 1;
        v3->m_bOEnable = 0;
        v6 = &rkIndex;
        goto LABEL_7;
      }
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004A8A00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LOGOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  if ( pvData )
    HolyPromiseWin::SetLogOut(this->m_pkHolyPromiseWin, (Name5 *)pvData);
  return iRevBytes;
}

//----- (004A8A40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_WARP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  int v4; // ebx@2
  int v5; // esi@2
  int v6; // edx@4
  int v7; // eax@5
  Char *pTargetChar; // [sp+10h] [bp+Ch]@1

  v3 = pvData;
  pTargetChar = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( pTargetChar )
  {
    v4 = *((_WORD *)v3 + 9);
    v5 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            *((_WORD *)v3 + 9)) )
    {
      if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196);
        if ( *(_DWORD *)(v6 + 4 * v4) )
        {
          v7 = *(_DWORD *)(v6 + 4 * v4);
          if ( v7 )
          {
            if ( *(_DWORD *)(v7 + 539) == 67 )
            {
              pTargetChar->m_kTo.x = *(_DWORD *)((char *)v3 + 10);
              pTargetChar->m_kTo.y = *(_DWORD *)((char *)v3 + 14);
              pTargetChar->m_kSkillID = *((_WORD *)v3 + 9);
              return iRevBytes;
            }
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))pTargetChar->baseclass_0.vfptr[9].__vecDelDtor)(
              *(_DWORD *)((char *)v3 + 10),
              *(_DWORD *)((char *)v3 + 14),
              *((_WORD *)v3 + 9));
          }
        }
      }
    }
  }
  return iRevBytes;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004A8B00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  ChatBlockListWin *v4; // esi@1
  signed int v5; // esi@1
  PROTO_CHAT_RESTRICT_INFO *v6; // edi@2

  v3 = this;
  v4 = this->m_pkChatBlockListWin;
  NiPointer<PgWinLRBut>::_default_constructor_closure_((NiPointer<NiD3DTextureStage> *)&v4->m_RestrictList);
  SlideBar::SetCurPos(v4->m_pkSlideBarEx, 0);
  v4->m_pBlockList->m_nViewStartPos = 0;
  v5 = 0;
  if ( *(_WORD *)pvData > 0u )
  {
    v6 = (PROTO_CHAT_RESTRICT_INFO *)((char *)pvData + 2);
    do
    {
      CChatRestrict::Add(&v3->m_pkChatBlockListWin->m_RestrictList, v6);
      ++v5;
      ++v6;
    }
    while ( v5 < *(_WORD *)pvData );
  }
  GameFrameWork::UpdateChatBlockListWin(v3);
  return iRevBytes;
}

//----- (004A8B90) --------------------------------------------------------
void __thiscall GameFrameWork::NcChatRestrictDelAll(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -22517;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004A8BD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_DEL_ALL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  ChatBlockListWin *v4; // esi@2

  v3 = this;
  if ( *(_WORD *)pvData == 7200 )
  {
    v4 = this->m_pkChatBlockListWin;
    NiPointer<PgWinLRBut>::_default_constructor_closure_((NiPointer<NiD3DTextureStage> *)&v4->m_RestrictList);
    SlideBar::SetCurPos(v4->m_pkSlideBarEx, 0);
    v4->m_pBlockList->m_nViewStartPos = 0;
    GameFrameWork::UpdateChatBlockListWin(v3);
  }
  return iRevBytes;
}

//----- (004A8C30) --------------------------------------------------------
void __thiscall GameFrameWork::NcHolyPromiseWithDrawCenRewardReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-8h]@1
  PROTO_NC_HOLY_PROMISE_WITHDRAW_CEN_REWARD_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  pdata = -27584;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004A8C70) --------------------------------------------------------
void __thiscall GameFrameWork::NcBatAbastateEraseReq(GameFrameWork *this, unsigned __int16 id)
{
  unsigned __int16 v2; // ax@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PROTO_NC_BAT_ABSTATE_ERASE_REQ kProto; // [sp+4h] [bp-4h]@1

  v2 = id;
  v3 = this;
  id = 9300;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  kProto.abstateIndex = v2;
  PgNet::AddNetMsg(v4, &id, 2);
  PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &kProto, 2);
}

//----- (004A8CC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOULCOLLECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Char *v4; // eax@1
  TargetWin *v5; // ecx@1

  v3 = this;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v5 = v3->m_pkTargetWin;
  if ( v5
    && (*(_WORD *)pvData == -1
     || (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] == v4) )
    TargetWin::SetSoulCount(v5, *((_BYTE *)pvData + 2), 1, 1);
  return iRevBytes;
}

//----- (004A8D20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_REINFORCERELOC_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // esi@1
  float v5; // ST10_4@2
  float v6; // ST10_4@2
  float v7; // ST0C_4@2
  float v8; // ST08_4@2
  float v9; // ST0C_4@2
  float v10; // ST08_4@2
  NiPoint3 kFromPos; // [sp+1Ch] [bp-18h]@2
  NiPoint3 kPos; // [sp+28h] [bp-Ch]@2

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  if ( v3 )
  {
    Char::ClearTraceMove(v3);
    v5 = (double)*((_WORD *)pvData + 9);
    ((void (__thiscall *)(Char *, _DWORD))v4->baseclass_0.vfptr[8].Deaffect)(v4, LODWORD(v5));
    v6 = (double)*((_WORD *)pvData + 9);
    ((void (__thiscall *)(Char *, _DWORD))v4->baseclass_0.vfptr[8].SetAbStateProperty)(v4, LODWORD(v6));
    v8 = (double)*(unsigned int *)((char *)pvData + 10);
    v7 = (double)*(unsigned int *)((char *)pvData + 14);
    World::GetAdvGroundPos(&g_kWorld, v8, v7, &kPos);
    v10 = (double)*(unsigned int *)((char *)pvData + 10);
    v9 = (double)*(unsigned int *)((char *)pvData + 14);
    World::GetAdvGroundPos(&g_kWorld, v10, v9, &kFromPos);
    if ( v4->m_kHandle == g_pkMainChar->m_kHandle )
      MainChar::EndPathFind((MainChar *)g_pkMainChar, &kPos);
    if ( *((_BYTE *)pvData + 20) & 1 )
    {
      ((void (__thiscall *)(Char *, NiPoint3 *, _DWORD, NiPoint3 *, _DWORD))v4->baseclass_0.vfptr[7].SetAbStateProperty)(
        v4,
        &kPos,
        0,
        &kFromPos,
        0);
      return iRevBytes;
    }
    ((void (__thiscall *)(Char *, NiPoint3 *, _DWORD, NiColor *, _DWORD))v4->baseclass_0.vfptr[7].SetAbStateProperty)(
      v4,
      &kPos,
      0,
      &Char::INVALIDPOINT3,
      0);
  }
  return iRevBytes;
}

//----- (004A8E60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_REINFORCEMOVEBYPATH_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  Char *v4; // eax@1
  Char *v5; // ebx@1
  signed int v6; // esi@2
  float v7; // ST04_4@3
  float v8; // ST00_4@3
  float v9; // ST08_4@11
  float v10; // ST08_4@11
  int v12; // [sp+8h] [bp-34h]@7
  NiPoint3 pkDir; // [sp+18h] [bp-24h]@6
  NiPoint3 pos3To; // [sp+24h] [bp-18h]@4
  NiPoint3 kPos; // [sp+30h] [bp-Ch]@3
  float pvDataa; // [sp+48h] [bp+Ch]@6

  v3 = pvData;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v5 = v4;
  if ( v4 )
  {
    Char::ClearTraceMove(v4);
    v6 = 0;
    if ( *((_BYTE *)pvData + 5) )
    {
      while ( 1 )
      {
        v8 = (double)*(unsigned int *)((char *)v3 + 8 * v6 + 6);
        v7 = (double)*(unsigned int *)((char *)v3 + 8 * v6 + 10);
        if ( !World::GetAdvGroundPos(&g_kWorld, v8, v7, &kPos) )
          break;
        ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
        pos3To.x = kPos.x;
        pos3To.y = kPos.y;
        pos3To.z = kPos.z;
        if ( !v6 && v5->m_kHandle == g_pkMainChar->m_kHandle )
        {
          Char::GetDirToPosition(v5, &pkDir, &pos3To);
          pvDataa = atan2(pkDir.x, pkDir.y);
          if ( pvDataa <= 0.0 )
            v12 = -540;
          else
            v12 = 540;
          CameraCtrl::AddTraceRotate(&::this, v12);
        }
        Char::AddTraceMove(v5, &kPos);
        ++v6;
        if ( v6 >= *((_BYTE *)v3 + 5) )
          goto LABEL_11;
      }
    }
    else
    {
LABEL_11:
      v9 = (double)*((_WORD *)v3 + 1);
      ((void (__thiscall *)(Char *, _DWORD))v5->baseclass_0.vfptr[8].SetAbStateProperty)(v5, LODWORD(v9));
      v10 = (double)*((_WORD *)v3 + 1);
      ((void (__thiscall *)(Char *, _DWORD))v5->baseclass_0.vfptr[8].Deaffect)(v5, LODWORD(v10));
    }
  }
  return iRevBytes;
}

//----- (004A8FC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_SERVER_TIME_NOTIFY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  char v3; // al@1

  v3 = *((_BYTE *)pvData + 36);
  memcpy(&Timer::ms_dLastServerTime, pvData, 0x24u);
  Timer::ms_fLastRecordServerTime = Timer::ms_fCurTime;
  Timer::ms_cTimeZone = v3;
  QueryPerformanceCounter(&Timer::ms_StartQPC);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97648: using guessed type float Timer__ms_fLastRecordServerTime;
// A9764C: using guessed type char Timer__ms_cTimeZone;

//----- (004A9000) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_USER_WILL_WORLD_SELECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  PgFrameWork *v4; // eax@2
  int v5; // edx@3
  int v6; // ecx@3
  int v7; // edx@3
  int v8; // ecx@3
  int v9; // edx@3
  int v10; // ecx@3
  int v11; // edx@3
  int v13; // [sp+8h] [bp-20h]@3
  int v14; // [sp+Ch] [bp-1Ch]@3
  int v15; // [sp+10h] [bp-18h]@3
  int v16; // [sp+14h] [bp-14h]@3
  int v17; // [sp+18h] [bp-10h]@3
  int v18; // [sp+1Ch] [bp-Ch]@3
  int v19; // [sp+20h] [bp-8h]@3
  int v20; // [sp+24h] [bp-4h]@3

  v3 = this;
  if ( *(_WORD *)pvData == 7768 )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, AccountFrameWorkID);
    if ( v4 )
    {
      memcpy(&v13, (char *)pvData + 2, 0x20u);
      v5 = v13;
      *(_DWORD *)&v4[2].m_bInit = v14;
      v6 = v16;
      v4[2].m_BackFrameID = (void *)v5;
      v7 = v15;
      v4[3].baseclass_0.m_pkMsgHooker = (IDirectMessenger *)v6;
      v8 = v18;
      v4[3].baseclass_0.vfptr = (IDirectMessengerVtbl *)v7;
      v9 = v17;
      v4[3].m_kMsgQ.m_pBase = (PgMsg::Frame *)v8;
      v10 = v20;
      v4[3].baseclass_0.m_uiMessageNum = v9;
      v11 = v19;
      v4[3].m_kMsgQ.m_uiHead = v10;
      v4[3].m_kMsgQ.m_uiAlloced = v11;
      v3->m_bServerSelect = 1;
      NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
      PgFrameWork::PostFrameMsgChange(&v3->baseclass_0, AccountFrameWorkID, 0);
      return iRevBytes;
    }
  }
  else
  {
    this->m_bServerSelect = 0;
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    PgFrameWork::PostFrameMsgChange(&v3->baseclass_0, AccountFrameWorkID, 0);
  }
  return iRevBytes;
}

//----- (004A90D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidMakeReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-8h]@1
  PROTO_NC_RAID_MAKE_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -20479;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004A9110) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_MEMBER_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  _BYTE v4[20]; // ST04_20@3
  _BYTE v5[20]; // ST04_20@3
  char *v6; // esi@3
  signed int v7; // ebx@3
  _BYTE v8[20]; // ST00_20@9
  unsigned int v9; // esi@13
  RaidMemberInfo *v10; // eax@14
  unsigned int v11; // esi@18
  unsigned int v12; // edi@18
  RaidMemberInfo *v13; // esi@19
  Name5 *v14; // eax@20
  _BYTE v15[20]; // ST04_20@25
  PartyMemberInfo *v16; // eax@25
  ExpeditionWin *pkWin; // [sp+Ch] [bp-20h]@3
  GameFrameWork *v19; // [sp+10h] [bp-1Ch]@1
  char dest[4]; // [sp+14h] [bp-18h]@4
  int v21; // [sp+18h] [bp-14h]@4
  int v22; // [sp+1Ch] [bp-10h]@4
  int v23; // [sp+20h] [bp-Ch]@4
  int v24; // [sp+24h] [bp-8h]@4
  unsigned int v25; // [sp+28h] [bp-4h]@1
  int v26; // [sp+2Ch] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v3 = this;
  v19 = this;
  if ( !RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
    MiniMapWin::ClearRaidMember(v3->m_pkMiniMapWin);
  *(_DWORD *)v4 = *(_DWORD *)pvData;
  *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 12);
  RaidInfo::ChangeRaidLeader(&g_kRaidinfo, *(Name5 *)v4);
  *(_DWORD *)v5 = *((_DWORD *)pvData + 25);
  *(_QWORD *)&v5[4] = *((_QWORD *)pvData + 13);
  *(_QWORD *)&v5[12] = *((_QWORD *)pvData + 14);
  RaidInfo::ChangeRaidLooter(&g_kRaidinfo, *(Name5 *)v5);
  pkWin = v3->m_pkExpeditionWin;
  v6 = (char *)pvData + 28;
  v7 = 4;
  do
  {
    v24 = 0;
    v23 = 0;
    v22 = 0;
    v21 = 0;
    *(_DWORD *)dest = 0;
    strncpy(dest, &byte_98C0C3, 0x14u);
    if ( *((_DWORD *)v6 - 2) != *(_DWORD *)dest
      || *((_DWORD *)v6 - 1) != v21
      || *(_DWORD *)v6 != v22
      || *((_DWORD *)v6 + 1) != v23
      || *((_DWORD *)v6 + 2) != v24 )
    {
      *(_DWORD *)v8 = *((_DWORD *)v6 - 2);
      *(_DWORD *)&v8[4] = *((_DWORD *)v6 - 1);
      *(_DWORD *)&v8[8] = *(_DWORD *)v6;
      *(_QWORD *)&v8[12] = *(_QWORD *)(v6 + 4);
      RaidInfo::SetRaidSubLeader(&g_kRaidinfo, *(Name5 *)v8, 1);
    }
    v6 += 20;
    --v7;
  }
  while ( v7 );
  RaidInfo::SetItemLootingType(&g_kRaidinfo, *((_BYTE *)pvData + 120), *((_BYTE *)pvData + 121));
  if ( pkWin )
  {
    ExpeditionWin::SetLootingType(pkWin, *((_BYTE *)pvData + 121));
    ExpeditionWin::SetItemGrade(pkWin, *((_BYTE *)pvData + 120));
  }
  RaidInfo::SetMember(&g_kRaidinfo, (PROTO_NC_RAID_MEMBER_LIST_CMD *)pvData);
  MiniMapWin::ClearParty(v19->m_pkMiniMapWin);
  v9 = 0;
  do
  {
    v10 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, v9);
    if ( v10 && v10->m_bShow )
      MiniMapWin::AddRaidMember(v19->m_pkMiniMapWin, v10);
    ++v9;
  }
  while ( v9 < 0x14 );
  v11 = g_kRaidinfo.m_uiMePartyIdx;
  v12 = 0;
  if ( (signed int)((char *)g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0._Mylast
                  - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0.___u0.baseclass_0.dummy[0])
     / 68 )
  {
    do
    {
      v13 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, v11 + v12 + 4 * v11);
      if ( v13 )
      {
        v14 = User::GetMainCharID(&g_kUser);
        if ( *(_DWORD *)&v13->m_kCharID.n5_name[0] != *(_DWORD *)&v14->n5_name[0]
          || *(_DWORD *)&v13->m_kCharID.n5_name[4] != *(_DWORD *)&v14->n5_name[4]
          || *(_DWORD *)&v13->m_kCharID.n5_name[8] != *(_DWORD *)&v14->n5_name[8]
          || *(_DWORD *)&v13->m_kCharID.n5_name[12] != *(_DWORD *)&v14->n5_name[12]
          || *(_DWORD *)&v13->m_kCharID.n5_name[16] != *(_DWORD *)&v14->n5_name[16] )
        {
          *(_DWORD *)v15 = *(_DWORD *)&v13->m_kCharID.n5_name[0];
          *(_QWORD *)&v15[4] = *(_QWORD *)&v13->m_kCharID.n5_name[4];
          *(_QWORD *)&v15[12] = *(_QWORD *)&v13->m_kCharID.n5_name[12];
          v16 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v15);
          if ( v16 )
          {
            v16->m_ucStatus = v13->m_ucStatus;
            if ( !v13->m_ucStatus )
              v16->m_bShow = 0;
          }
        }
      }
      v11 = g_kRaidinfo.m_uiMePartyIdx;
      ++v12;
    }
    while ( v12 < (signed int)((char *)g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0._Mylast
                             - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0.___u0.baseclass_0.dummy[0])
                / 68 );
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A93A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidLootingTypeReq(GameFrameWork *this, char nItemGrade, char nLootingType)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1

  v3 = this;
  *(&nItemGrade + 1) = nLootingType;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  *(_WORD *)&nLootingType = -20472;
  PgNet::AddNetMsg(v4, &nLootingType, 2);
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &nItemGrade, 2);
}

//----- (004A93F0) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidLeaveReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@2
  __int16 pdata; // [sp+4h] [bp-8h]@2
  PROTO_NC_RAID_LEAVE_REQ kProto; // [sp+Bh] [bp-1h]@2

  v1 = this;
  if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
  {
    v2 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
    pdata = -20460;
    PgNet::AddNetMsg(v2, &pdata, 2);
    PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
  }
}

//----- (004A9440) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_MEMBERCLASS_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  Name5 *v4; // eax@3
  _BYTE v5[20]; // ST00_20@3
  Name5 *v6; // eax@3
  _BYTE v7[20]; // ST00_20@3
  unsigned int v8; // esi@4
  RaidMemberInfo *v9; // eax@5
  unsigned int v10; // esi@9
  signed int v11; // edx@10
  unsigned int v12; // edi@10
  RaidMemberInfo *v13; // esi@11
  Name5 *v14; // eax@12
  _BYTE v15[20]; // ST00_20@17
  PartyMemberInfo *v16; // eax@17
  int v17; // ecx@19
  unsigned int v18; // edx@19
  unsigned int v19; // eax@19
  unsigned int v20; // ecx@19
  PartyMemberInfo *v21; // eax@19
  PartyWinInterface *v22; // ecx@22
  PROTO_NC_PARTY_JOIN_ACK kProto; // [sp+Ch] [bp-1Ch]@3
  unsigned int v25; // [sp+24h] [bp-4h]@1
  int v26; // [sp+28h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v3 = this;
  if ( g_kParty.m_uiTotalMember && !RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
  {
    v4 = Party::GetPartyMasterID(&g_kParty, &kProto.memberid);
    *(_DWORD *)v5 = *(_DWORD *)&v4->n5_name[0];
    *(_QWORD *)&v5[4] = *(_QWORD *)&v4->n5_name[4];
    *(_QWORD *)&v5[12] = *(_QWORD *)&v4->n5_name[12];
    RaidInfo::ChangeRaidLeader(&g_kRaidinfo, *(Name5 *)v5);
    v6 = Party::GetPartyMasterID(&g_kParty, &kProto.memberid);
    *(_DWORD *)v7 = *(_DWORD *)&v6->n5_name[0];
    *(_QWORD *)&v7[4] = *(_QWORD *)&v6->n5_name[4];
    *(_QWORD *)&v7[12] = *(_QWORD *)&v6->n5_name[12];
    RaidInfo::ChangeRaidLooter(&g_kRaidinfo, *(Name5 *)v7);
  }
  RaidInfo::MemberInfoDetailInfo(&g_kRaidinfo, (PROTO_NC_RAID_MEMBERCLASS_CMD *)pvData);
  MiniMapWin::ClearRaidMember(v3->m_pkMiniMapWin);
  v8 = 0;
  do
  {
    v9 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, v8);
    if ( v9 && v9->m_bShow )
      MiniMapWin::AddRaidMember(v3->m_pkMiniMapWin, v9);
    ++v8;
  }
  while ( v8 < 0x14 );
  v10 = g_kRaidinfo.m_uiMePartyIdx;
  if ( g_kRaidinfo.m_uiMePartyIdx < 4 )
  {
    v11 = (signed int)((unsigned __int64)(2021161081i64
                                        * (unsigned int)((char *)g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0._Mylast
                                                       - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 5;
    v12 = 0;
    if ( v11 + ((unsigned int)v11 >> 31) )
    {
      do
      {
        v13 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, v10 + v12 + 4 * v10);
        if ( v13 )
        {
          v14 = User::GetMainCharID(&g_kUser);
          if ( *(_DWORD *)&v13->m_kCharID.n5_name[0] != *(_DWORD *)&v14->n5_name[0]
            || *(_DWORD *)&v13->m_kCharID.n5_name[4] != *(_DWORD *)&v14->n5_name[4]
            || *(_DWORD *)&v13->m_kCharID.n5_name[8] != *(_DWORD *)&v14->n5_name[8]
            || *(_DWORD *)&v13->m_kCharID.n5_name[12] != *(_DWORD *)&v14->n5_name[12]
            || *(_DWORD *)&v13->m_kCharID.n5_name[16] != *(_DWORD *)&v14->n5_name[16] )
          {
            *(_DWORD *)v15 = *(_DWORD *)&v13->m_kCharID.n5_name[0];
            *(_QWORD *)&v15[4] = *(_QWORD *)&v13->m_kCharID.n5_name[4];
            *(_QWORD *)&v15[12] = *(_QWORD *)&v13->m_kCharID.n5_name[12];
            v16 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v15);
            if ( v16 )
            {
              v16->m_iHP = v13->m_iHP;
              v16->m_iSP = v13->m_iSP;
              v16->m_iMaxHP = v13->m_iMaxHP;
              v16->m_iMaxSP = v13->m_iMaxSP;
              v16->m_bShow = v13->m_bShow;
              v16->m_byChrClass = v13->m_byChrClass;
              v16->m_ucStatus = v13->m_ucStatus;
              v16->m_iLv = v13->m_iLv;
              v16->m_iLP = v13->m_iLP;
              v16->m_iMaxLP = v13->m_iMaxLP;
            }
            else
            {
              v17 = *(_DWORD *)&v13->m_kCharID.n5_name[0];
              v18 = *(_DWORD *)&v13->m_kCharID.n5_name[4];
              kProto.charclass = v13->m_byChrClass;
              v19 = *(_DWORD *)&v13->m_kCharID.n5_name[8];
              *(_DWORD *)&kProto.memberid.n5_name[0] = v17;
              v20 = *(_DWORD *)&v13->m_kCharID.n5_name[12];
              *(_QWORD *)&kProto.memberid.n5_name[4] = __PAIR__(v19, v18);
              *(_QWORD *)&kProto.memberid.n5_name[12] = __PAIR__(*(_DWORD *)&v13->m_kCharID.n5_name[16], v20);
              v21 = Party::AddMember(&g_kParty, &kProto);
              if ( v21 )
              {
                v21->m_iHP = v13->m_iHP;
                v21->m_iSP = v13->m_iSP;
                v21->m_iMaxHP = v13->m_iMaxHP;
                v21->m_iMaxSP = v13->m_iMaxSP;
                v21->m_bShow = v13->m_bShow;
                v21->m_ucStatus = v13->m_ucStatus;
                v21->m_iLv = v13->m_iLv;
                v21->m_iLP = v13->m_iLP;
                v21->m_iMaxLP = v13->m_iMaxLP;
              }
            }
          }
        }
        v10 = g_kRaidinfo.m_uiMePartyIdx;
        ++v12;
      }
      while ( v12 < (signed int)((char *)g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0._Mylast
                               - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0.___u0.baseclass_0.dummy[0])
                  / 68 );
    }
  }
  v22 = v3->m_pkPartyWinInterface;
  if ( v22 )
    PartyWinInterface::Update(v22);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A96E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SLOT_MOVE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // eax@1
  GameFrameWork *v4; // ebx@1
  ExpeditionPartyWin *v5; // edi@2
  unsigned int v6; // eax@4
  ExpeditionPartyWin *v7; // ecx@5
  unsigned int v8; // eax@9
  unsigned int v9; // ebx@9
  unsigned int v10; // ecx@10
  char *v11; // eax@10
  PgWin *v12; // edi@12
  unsigned int v13; // ecx@16
  char *v14; // eax@16
  PgWin *v15; // edi@18
  unsigned int v16; // esi@25
  unsigned int v17; // edi@25
  RaidMemberInfo *v18; // esi@26
  Name5 *v19; // eax@27
  _BYTE v20[20]; // ST00_20@32
  PartyMemberInfo *v21; // eax@32
  char v22; // dl@33
  unsigned int v23; // ecx@34
  int v24; // eax@34
  unsigned int v25; // ecx@34
  unsigned int v26; // esi@38
  RaidMemberInfo *v27; // eax@39
  PartyWinInterface *v28; // ecx@43
  GameFrameWork *v30; // [sp+Ch] [bp-24h]@1
  unsigned int uiPreMyPartyIdx; // [sp+10h] [bp-20h]@1
  PROTO_NC_PARTY_JOIN_ACK kProto; // [sp+14h] [bp-1Ch]@34
  unsigned int v33; // [sp+2Ch] [bp-4h]@1
  int v34; // [sp+30h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  uiPreMyPartyIdx = g_kRaidinfo.m_uiMePartyIdx;
  v3 = *((_BYTE *)pvData + 22);
  v4 = this;
  v30 = this;
  if ( v3 >= 4 )
    v5 = 0;
  else
    v5 = this->m_pkExpeditionPartyWin[v3];
  v6 = *((_BYTE *)pvData + 26);
  if ( v6 >= 4 )
    v7 = 0;
  else
    v7 = this->m_pkExpeditionPartyWin[v6];
  if ( v5 && v7 )
  {
    v8 = *((_BYTE *)pvData + 27);
    v9 = v7->m_uiBuffViewOption[v8];
    ExpeditionPartyWin::SetOption(v7, v8, v5->m_uiBuffViewOption[*((_BYTE *)pvData + 23)]);
    ExpeditionPartyWin::SetOption(v5, *((_BYTE *)pvData + 23), v9);
    v4 = v30;
  }
  RaidInfo::Replace(&g_kRaidinfo, (PROTO_NC_RAID_SLOT_MOVE_BROAD_CMD *)pvData);
  v10 = *((_BYTE *)pvData + 22);
  v11 = (char *)&g_kRaidinfo.m_MemberInfo[*((_BYTE *)pvData + 22)];
  if ( *(_DWORD *)v11 == *((_DWORD *)v11 + 1) )
  {
    v12 = (PgWin *)(v10 >= 4 ? 0 : v4->m_pkExpeditionPartyWin[v10]);
    if ( (unsigned __int8)((int (__thiscall *)(PgWin *))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v12) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v12);
  }
  v13 = *((_BYTE *)pvData + 26);
  v14 = (char *)&g_kRaidinfo.m_MemberInfo[*((_BYTE *)pvData + 26)];
  if ( *(_DWORD *)v14 == *((_DWORD *)v14 + 1) )
  {
    v15 = (PgWin *)(v13 >= 4 ? 0 : v4->m_pkExpeditionPartyWin[v13]);
    if ( (unsigned __int8)((int (__thiscall *)(PgWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v15) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v15);
  }
  if ( uiPreMyPartyIdx != g_kRaidinfo.m_uiMePartyIdx
    || g_kRaidinfo.m_uiMePartyIdx == *((_BYTE *)pvData + 22)
    || g_kRaidinfo.m_uiMePartyIdx == *((_BYTE *)pvData + 26) )
  {
    Party::Clear(&g_kParty);
    v16 = g_kRaidinfo.m_uiMePartyIdx;
    v17 = 0;
    if ( (signed int)((char *)g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0._Mylast
                    - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0.___u0.baseclass_0.dummy[0])
       / 68 )
    {
      while ( 1 )
      {
        v18 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, v16 + v17 + 4 * v16);
        if ( !v18
          || (v19 = User::GetMainCharID(&g_kUser), *(_DWORD *)&v18->m_kCharID.n5_name[0] == *(_DWORD *)&v19->n5_name[0])
          && *(_DWORD *)&v18->m_kCharID.n5_name[4] == *(_DWORD *)&v19->n5_name[4]
          && *(_DWORD *)&v18->m_kCharID.n5_name[8] == *(_DWORD *)&v19->n5_name[8]
          && *(_DWORD *)&v18->m_kCharID.n5_name[12] == *(_DWORD *)&v19->n5_name[12]
          && *(_DWORD *)&v18->m_kCharID.n5_name[16] == *(_DWORD *)&v19->n5_name[16] )
          goto LABEL_37;
        *(_DWORD *)v20 = *(_DWORD *)&v18->m_kCharID.n5_name[0];
        *(_QWORD *)&v20[4] = *(_QWORD *)&v18->m_kCharID.n5_name[4];
        *(_QWORD *)&v20[12] = *(_QWORD *)&v18->m_kCharID.n5_name[12];
        v21 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v20);
        if ( v21 )
          break;
        v23 = *(_DWORD *)&v18->m_kCharID.n5_name[4];
        v24 = *(_DWORD *)&v18->m_kCharID.n5_name[0];
        kProto.charclass = v18->m_byChrClass;
        *(_QWORD *)&kProto.memberid.n5_name[4] = __PAIR__(*(_DWORD *)&v18->m_kCharID.n5_name[8], v23);
        v25 = *(_DWORD *)&v18->m_kCharID.n5_name[16];
        *(_DWORD *)&kProto.memberid.n5_name[0] = v24;
        *(_QWORD *)&kProto.memberid.n5_name[12] = __PAIR__(v25, *(_DWORD *)&v18->m_kCharID.n5_name[12]);
        v21 = Party::AddMember(&g_kParty, &kProto);
        if ( v21 )
        {
          v21->m_iHP = v18->m_iHP;
          v21->m_iSP = v18->m_iSP;
          v21->m_iMaxHP = v18->m_iMaxHP;
          v21->m_iMaxSP = v18->m_iMaxSP;
          v21->m_bShow = v18->m_bShow;
          v22 = v18->m_ucStatus;
          goto LABEL_36;
        }
LABEL_37:
        v16 = g_kRaidinfo.m_uiMePartyIdx;
        ++v17;
        if ( v17 >= (signed int)((char *)g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0._Mylast
                               - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[g_kRaidinfo.m_uiMePartyIdx].baseclass_0.___u0.baseclass_0.dummy[0])
                  / 68 )
          goto LABEL_38;
      }
      v21->m_iHP = v18->m_iHP;
      v21->m_iSP = v18->m_iSP;
      v21->m_iMaxHP = v18->m_iMaxHP;
      v21->m_iMaxSP = v18->m_iMaxSP;
      v21->m_bShow = v18->m_bShow;
      v21->m_byChrClass = v18->m_byChrClass;
      v22 = v18->m_ucStatus;
LABEL_36:
      v21->m_ucStatus = v22;
      v21->m_iLv = v18->m_iLv;
      goto LABEL_37;
    }
  }
LABEL_38:
  MiniMapWin::ClearRaidMember(v4->m_pkMiniMapWin);
  v26 = 0;
  do
  {
    v27 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, v26);
    if ( v27 && v27->m_bShow )
      MiniMapWin::AddRaidMember(v4->m_pkMiniMapWin, v27);
    ++v26;
  }
  while ( v26 < 0x14 );
  v28 = v4->m_pkPartyWinInterface;
  if ( v28 )
    PartyWinInterface::Update(v28);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A99D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (004A9A00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_LOOTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (004A9A30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_CHAT_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // ebx@1
  SHINE_ITEM_STRUCT *v5; // edi@2
  int v6; // ebx@2
  int v7; // edx@7
  int v8; // ecx@7
  int v9; // eax@7
  int v10; // ecx@7
  unsigned int v11; // eax@7
  int v12; // edx@7
  int v13; // eax@7
  int v14; // edx@7
  ChatBlockListWin *v15; // eax@7
  int v16; // edx@7
  int v17; // ecx@8
  int v18; // edx@8
  int v19; // eax@8
  ChatBlockListWin *v20; // eax@8
  PROTO_CHAT_RESTRICT_INFO *v21; // eax@8
  _BYTE v22[20]; // ST00_20@11
  _BYTE v23[20]; // ST00_20@12
  Name5 pCharID; // [sp+Ch] [bp-B8h]@7
  GameFrameWork *thisa; // [sp+20h] [bp-A4h]@1
  char acStr[129]; // [sp+24h] [bp-A0h]@7
  char acName[21]; // [sp+A8h] [bp-1Ch]@7
  unsigned int v29; // [sp+C0h] [bp-4h]@1
  int v30; // [sp+C4h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = *(_BYTE *)pvData;
  v4 = this;
  thisa = this;
  if ( v3 > 0 )
  {
    v5 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 21) + 22);
    v6 = v3;
    do
    {
      GameFrameWork::AddSChatItemLink(thisa, 8192, v5);
      ++v5;
      --v6;
    }
    while ( v6 );
    v4 = thisa;
  }
  if ( *((_BYTE *)pvData + 21) > 0x80u )
    *((_BYTE *)pvData + 21) = -128;
  strncpy(acStr, (char *)pvData + 22, *((_BYTE *)pvData + 21));
  v7 = *((_BYTE *)pvData + 21);
  v8 = *(_DWORD *)((char *)pvData + 5);
  *(_DWORD *)acName = *(_DWORD *)((char *)pvData + 1);
  v9 = *(_DWORD *)((char *)pvData + 13);
  *(_DWORD *)&acName[4] = v8;
  v10 = *(_DWORD *)((char *)pvData + 17);
  *(_DWORD *)&acName[12] = v9;
  v11 = *(_DWORD *)((char *)pvData + 5);
  acStr[v7] = 0;
  v12 = *(_DWORD *)((char *)pvData + 9);
  *(_DWORD *)&acName[16] = v10;
  *(_QWORD *)&pCharID.n5_name[4] = __PAIR__(*(_DWORD *)((char *)pvData + 9), v11);
  v13 = *(_DWORD *)((char *)pvData + 17);
  *(_DWORD *)&acName[8] = v12;
  v14 = *(_DWORD *)((char *)pvData + 1);
  *(_DWORD *)&pCharID.n5_name[16] = v13;
  v15 = v4->m_pkChatBlockListWin;
  *(_DWORD *)&pCharID.n5_name[0] = v14;
  v16 = *(_DWORD *)((char *)pvData + 13);
  acName[20] = 0;
  *(_DWORD *)&pCharID.n5_name[12] = v16;
  if ( !CChatRestrict::Get(&v15->m_RestrictList, &pCharID)
    || (v17 = *(_DWORD *)((char *)pvData + 9),
        v18 = *(_DWORD *)((char *)pvData + 1),
        *(_DWORD *)&pCharID.n5_name[4] = *(_DWORD *)((char *)pvData + 5),
        v19 = *(_DWORD *)((char *)pvData + 17),
        *(_DWORD *)&pCharID.n5_name[8] = v17,
        *(_DWORD *)&pCharID.n5_name[16] = v19,
        v20 = v4->m_pkChatBlockListWin,
        *(_DWORD *)&pCharID.n5_name[0] = v18,
        *(_DWORD *)&pCharID.n5_name[12] = *(_DWORD *)((char *)pvData + 13),
        (v21 = CChatRestrict::Get(&v20->m_RestrictList, &pCharID)) != 0)
    && v21->bIsGM == 1 )
  {
    if ( strcmp(acName, (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)()) )
    {
      *(_DWORD *)v23 = *(_DWORD *)((char *)pvData + 1);
      *(_QWORD *)&v23[4] = *(_QWORD *)((char *)pvData + 5);
      *(_QWORD *)&v23[12] = *(_QWORD *)((char *)pvData + 13);
      GameFrameWork::AddOtherRaidChat(v4, *(Name5 *)v23, acStr);
    }
    else
    {
      *(_DWORD *)v22 = *(_DWORD *)((char *)pvData + 1);
      *(_QWORD *)&v22[4] = *(_QWORD *)((char *)pvData + 5);
      *(_QWORD *)&v22[12] = *(_QWORD *)((char *)pvData + 13);
      GameFrameWork::AddRaidChat(v4, *(Name5 *)v22, acStr);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004A9C30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // eax@2
  AbStateInfecteeVtbl *v5; // esi@4
  int v6; // eax@4
  NiPoint3 kCharPos; // [sp+1Ch] [bp-Ch]@5

  v3 = this;
  if ( *((_WORD *)pvData + 2) != 5896 )
  {
    v4 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 2));
    GameFrameWork::AddSysMsg(v3, v4);
    if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
      ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
    v5 = g_pkMainChar->baseclass_0.vfptr;
    v6 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    ((void (__thiscall *)(Char *, int))v5[6].Affect)(g_pkMainChar, v6);
    GameFrameWork::SetCharEmotionUIState(v3, 0);
    if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() )
    {
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kCharPos);
      World::GetAdvGroundPos(&g_kWorld, kCharPos.x, kCharPos.y, &kCharPos);
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[5].__vecDelDtor)(&kCharPos);
    }
  }
  return iRevBytes;
}

//----- (004A9D20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // edi@2
  char *v4; // esi@3
  Char *v5; // eax@4
  int result; // eax@7

  if ( nowState )
  {
    v3 = 0;
    if ( *(_WORD *)pvData <= 0u )
    {
      result = iRevBytes;
    }
    else
    {
      v4 = (char *)pvData + 2;
      do
      {
        v5 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)v4);
        if ( v5 )
        {
          CharMgr::ImmediatelyLoadQueueingChar(&g_kCharMgr, v5);
          MiniHouseIndoor::ActMHEmotion(&g_kWorld.m_MiniHouseIndoorMode, (FURNITURE_EMOTION_INFO *)v4);
          MiniHouseIndoor::AddObjSeatInfo(&g_kWorld.m_MiniHouseIndoorMode, v4[4], *(_WORD *)v4, *((_WORD *)v4 + 1));
        }
        ++v3;
        v4 += 6;
      }
      while ( v3 < *(_WORD *)pvData );
      result = iRevBytes;
    }
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}

//----- (004A9DB0) --------------------------------------------------------
void __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_REQ(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = -29595;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004A9DE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  NiPoint3 *v3; // ebx@0
  signed int v4; // edi@0
  int v5; // esi@0
  void *v6; // edi@2
  unsigned __int16 *v7; // ebx@3
  Char *v8; // eax@4
  Char *v9; // esi@4
  void (__thiscall *v10)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@7
  AbStateInfecteeVtbl *v11; // edi@7
  int v12; // eax@7
  AbStateInfecteeVtbl *v13; // esi@12
  NiPoint3 *v14; // eax@12
  AbStateInfecteeVtbl *v15; // esi@13
  int v16; // ecx@14
  int result; // eax@15
  int v18; // [sp+28h] [bp-2Ch]@3
  NiPoint3 *v19; // [sp+2Ch] [bp-28h]@3
  signed int v20; // [sp+30h] [bp-24h]@2
  NiPoint3 kTargetPos; // [sp+34h] [bp-20h]@11
  NiPoint3 kCharPos; // [sp+40h] [bp-14h]@7
  GameFrameWork *thisa; // [sp+4Ch] [bp-8h]@1
  int i; // [sp+50h] [bp-4h]@2

  thisa = this;
  if ( nowState )
  {
    v20 = v4;
    v6 = pvData;
    i = 0;
    if ( *(_WORD *)pvData <= 0u )
    {
      result = iRevBytes;
    }
    else
    {
      v19 = v3;
      v18 = v5;
      v7 = (unsigned __int16 *)((char *)pvData + 2);
      do
      {
        v8 = CharMgr::GetChar(&g_kCharMgr, *v7);
        v9 = v8;
        if ( v8 )
        {
          if ( v8 != g_pkMainChar && !(unsigned __int8)v8->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v8) )
          {
            ((void (__thiscall *)(Char *, NiPoint3 *))v9->baseclass_0.vfptr[6].SetAbStateProperty)(v9, &kCharPos);
            World::GetAdvGroundPos(&g_kWorld, kCharPos.x, kCharPos.y, &kCharPos);
            v10 = v9->baseclass_0.vfptr[7].SetAbStateProperty;
            kCharPos.x = kCharPos.x + 1.0;
            ((void (__thiscall *)(Char *, NiPoint3 *, _DWORD, NiColor *, signed int))v10)(
              v9,
              &kCharPos,
              0,
              &Char::INVALIDPOINT3,
              1);
            v11 = v9->baseclass_0.vfptr;
            v12 = ((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)(v9);
            ((void (__thiscall *)(Char *, int))v11[6].Affect)(v9, v12);
            v6 = pvData;
          }
          MiniHouseIndoor::DelObjSeatInfo(&g_kWorld.m_MiniHouseIndoorMode, *v7);
          if ( v9 == g_pkMainChar && ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
          {
            MainChar::CancelMHEmotion((MainChar *)g_pkMainChar);
            GameFrameWork::SetCharEmotionUIState(thisa, 0);
            if ( (unsigned __int8)((int (__stdcall *)(int, NiPoint3 *, signed int))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)(
                                    v18,
                                    v19,
                                    v20) )
            {
              v13 = g_pkMainChar->baseclass_0.vfptr;
              v20 = 1;
              v19 = (NiPoint3 *)&Char::INVALIDPOINT3;
              v14 = MainChar::GetRevserveMovePos((MainChar *)g_pkMainChar);
              ((void (__thiscall *)(Char *, NiPoint3 *, _DWORD))v13[7].SetAbStateProperty)(g_pkMainChar, v14, 0);
            }
            else
            {
              ((void (__stdcall *)(NiPoint3 *, _DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(
                &kTargetPos,
                (_DWORD)kTargetPos.x,
                LODWORD(kTargetPos.y));
              kTargetPos.x = kTargetPos.y;
              World::GetAdvGroundPos(&g_kWorld, kTargetPos.x, kTargetPos.x, &kTargetPos);
              LODWORD(kTargetPos.y) = 1;
              v20 = 0;
              kTargetPos.x = kTargetPos.x + 1.0;
              v19 = &kTargetPos;
              ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[7].SetAbStateProperty)();
            }
            v15 = g_pkMainChar->baseclass_0.vfptr;
            v18 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
            ((void (__thiscall *)(Char *))v15[6].Affect)(g_pkMainChar);
          }
        }
        v16 = *(_WORD *)v6;
        ++v7;
        ++i;
      }
      while ( i < v16 );
      result = iRevBytes;
    }
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}
// 4A9DE0: could not find valid save-restore pair for ebx
// 4A9DE0: could not find valid save-restore pair for edi

//----- (004A9FE0) --------------------------------------------------------
void __thiscall GameFrameWork::On_NC_ITEM_REVIVEITEMUSE_CMD(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 12345;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004AA010) --------------------------------------------------------
void __thiscall GameFrameWork::On_NC_SKILL_REPLYREVIVE_CMD(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 18474;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004AA040) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_ABSTATE_CHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // ebx@1
  Char *v4; // eax@1
  AbStateInfectee *v5; // esi@1
  NiTListItem<AbStateInst *> *v6; // edi@3
  AbStateInst *v7; // eax@4
  int v8; // ebx@5
  GameFrameWork *v9; // esi@5
  int v10; // eax@7
  int v11; // eax@8
  AbStateInst *pkState; // [sp+8h] [bp-8h]@4
  Char *pkChar; // [sp+Ch] [bp-4h]@1

  v3 = pvData;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v5 = (AbStateInfectee *)v4;
  pkChar = v4;
  if ( v4 )
  {
    if ( AbStateInfectee::IsInList(&v4->baseclass_0, *(ABSTATEINDEX *)((char *)pvData + 2)) )
    {
      v6 = AbStateInfectee::GetAbStateList(v5)->baseclass_0.baseclass_0.m_pkHead;
      if ( v6 )
      {
        do
        {
          AbStateInfectee::GetAbStateList(v5);
          v7 = v6->m_element;
          v6 = v6->m_pkNext;
          pkState = v7;
          if ( v7 )
          {
            v8 = v7->kID;
            v9 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
            if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, int))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                                    ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                                    v8) )
            {
              if ( (unsigned __int16)v8 <= LOWORD(v9->m_ResList[2].m_eAspect) )
              {
                v10 = *(_DWORD *)&v9->m_ResList[2].m_bCheckAdd + 4 * v8;
                if ( *(_DWORD *)v10 )
                {
                  v11 = *(_DWORD *)v10;
                  if ( v11 )
                  {
                    if ( *(_DWORD *)(v11 + 34) == *(_DWORD *)((char *)pvData + 2) )
                      pkState->uiSubStateStr = *(_DWORD *)((char *)pvData + 10);
                  }
                }
              }
            }
            v5 = (AbStateInfectee *)pkChar;
          }
        }
        while ( v6 );
        v3 = pvData;
      }
    }
  }
  EffectMgr::SetAbstateInform(&g_kEffectMgr, (ABSTATE_INFORMATION *)((char *)v3 + 2), *(_WORD *)v3);
  return iRevBytes;
}

//----- (004AA110) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_ABSTATE_CHANGE_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // ebx@1
  Char *v4; // esi@2
  ABSTATE_INFORMATION *v5; // edi@3
  NiTListItem<AbStateInst *> *v6; // edi@6
  AbStateInst *v7; // eax@7
  int v8; // ebx@8
  GameFrameWork *v9; // esi@8
  int v10; // eax@10
  int v11; // eax@11
  int result; // eax@18
  AbStateInst *pkState; // [sp+4h] [bp-10h]@7
  signed int i; // [sp+8h] [bp-Ch]@2
  Char *pkChar; // [sp+Ch] [bp-8h]@2
  char *v16; // [sp+10h] [bp-4h]@3

  v3 = pvData;
  if ( pvData )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
    pkChar = v4;
    i = 0;
    if ( *((_BYTE *)pvData + 2) )
    {
      v5 = (ABSTATE_INFORMATION *)((char *)pvData + 3);
      v16 = (char *)pvData + 3;
      do
      {
        EffectMgr::SetAbstateInform(&g_kEffectMgr, v5, *(_WORD *)v3);
        if ( v4 )
        {
          if ( AbStateInfectee::IsInList(&v4->baseclass_0, v5->abstateID) )
          {
            v6 = AbStateInfectee::GetAbStateList(&v4->baseclass_0)->baseclass_0.baseclass_0.m_pkHead;
            if ( v6 )
            {
              do
              {
                AbStateInfectee::GetAbStateList(&v4->baseclass_0);
                v7 = v6->m_element;
                v6 = v6->m_pkNext;
                pkState = v7;
                if ( v7 )
                {
                  v8 = v7->kID;
                  v9 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
                  if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                                          ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                                          v7->kID) )
                  {
                    if ( (unsigned __int16)v8 <= LOWORD(v9->m_ResList[2].m_eAspect) )
                    {
                      v10 = *(_DWORD *)&v9->m_ResList[2].m_bCheckAdd + 4 * v8;
                      if ( *(_DWORD *)v10 )
                      {
                        v11 = *(_DWORD *)v10;
                        if ( v11 )
                        {
                          if ( *(_DWORD *)(v11 + 34) == *(_DWORD *)v16 )
                            pkState->uiSubStateStr = *((_DWORD *)v16 + 2);
                        }
                      }
                    }
                  }
                  v4 = pkChar;
                }
              }
              while ( v6 );
              v3 = pvData;
            }
          }
        }
        v5 = (ABSTATE_INFORMATION *)(v16 + 12);
        ++i;
        v16 += 12;
      }
      while ( i < *((_BYTE *)v3 + 2) );
      result = iRevBytes;
    }
    else
    {
      result = iRevBytes;
    }
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}

//----- (004AA230) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_SET_LOOTER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@3
  int v5; // edx@3
  int v6; // eax@3
  int v7; // ecx@3
  int v8; // eax@3
  PartyLootSetupWin *v9; // ecx@3
  char *v10; // eax@4
  char acName[21]; // [sp+8h] [bp-1Ch]@3
  unsigned int v13; // [sp+20h] [bp-4h]@1
  int v14; // [sp+24h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  if ( *((_WORD *)pvData + 10) == 1368 )
  {
    if ( this->m_pkPartyLootSetupWin )
    {
      *(_DWORD *)v4 = *(_DWORD *)pvData;
      *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 4);
      *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 12);
      Party::SetLooterID(&g_kParty, *(Name5 *)v4);
      v5 = *((_DWORD *)pvData + 2);
      v6 = *(_DWORD *)pvData;
      *(_DWORD *)&acName[4] = *((_DWORD *)pvData + 1);
      v7 = *((_DWORD *)pvData + 4);
      *(_DWORD *)&acName[8] = v5;
      *(_DWORD *)acName = v6;
      v8 = *((_DWORD *)pvData + 3);
      *(_DWORD *)&acName[16] = v7;
      v9 = v3->m_pkPartyLootSetupWin;
      *(_DWORD *)&acName[12] = v8;
      acName[20] = 0;
      PartyLootSetupWin::SetLooterName(v9, acName);
    }
  }
  else
  {
    v10 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v10);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004AA2F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_ITEM_JOIN_LOOTING_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  PartyLootSetupWin *v5; // ecx@1
  int v6; // edx@2
  int v7; // eax@2
  int v8; // edx@2
  char acstr[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v11; // [sp+20h] [bp-4h]@1
  int v12; // [sp+24h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  PartyLootSetupWin::SetItemGrade(this->m_pkPartyLootSetupWin, *(_BYTE *)pvData);
  PartyLootSetupWin::SetLootingType(v3->m_pkPartyLootSetupWin, *((_BYTE *)pvData + 1));
  Party::SetLootType(&g_kParty, *(_BYTE *)pvData, *((_BYTE *)pvData + 1));
  *(_DWORD *)v4 = *(_DWORD *)((char *)pvData + 2);
  *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 6);
  *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 14);
  Party::SetLooterID(&g_kParty, *(Name5 *)v4);
  v5 = v3->m_pkPartyLootSetupWin;
  if ( v5 )
  {
    v6 = *(_DWORD *)((char *)pvData + 2);
    *(_DWORD *)&acstr[4] = *(_DWORD *)((char *)pvData + 6);
    v7 = *(_DWORD *)((char *)pvData + 14);
    *(_DWORD *)acstr = v6;
    v8 = *(_DWORD *)((char *)pvData + 10);
    *(_DWORD *)&acstr[12] = v7;
    *(_DWORD *)&acstr[8] = v8;
    *(_DWORD *)&acstr[16] = *(_DWORD *)((char *)pvData + 18);
    acstr[20] = 0;
    PartyLootSetupWin::SetLooterName(v5, acstr);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004AA3B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_MULTY_LINK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GateChannelWin *v3; // ecx@1

  v3 = this->m_pkGateChannelWin;
  if ( v3 )
    GateChannelWin::OpenWindow(v3, (PROTO_NC_MAP_MULTY_LINK_CMD *)pvData);
  return iRevBytes;
}

//----- (004AA3D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_GET_CHAT_BLOCK_SPAM_FILTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  ChatDisplayWin2 *v4; // ecx@2
  bool v5; // al@2
  float v6; // ST00_4@2

  v3 = this;
  if ( this->m_pkChatDisplayWin )
  {
    v4 = this->m_pkChatDisplayWin;
    v5 = *((_BYTE *)pvData + 1) != 0;
    v4->m_aspChatBD[0].m_pObject->m_Filter = v5;
    v4->m_pkSpamFilterOnOff->m_bCheck = v5;
    v6 = (double)*((_BYTE *)pvData + 2);
    ChatDisplayWin2::SetSpamBlockRate(v3->m_pkChatDisplayWin, v6);
    ChatDisplayWin2::SetSpamFilteredTextShow(v3->m_pkChatDisplayWin, *(_BYTE *)pvData != 0);
  }
  return iRevBytes;
}

//----- (004AA440) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemEnchantAddNewSocketReq(GameFrameWork *this, ITEM_INVEN kDrill, ITEM_INVEN kWeapon)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PROTO_NC_ITEM_ENCHANT_ADD_NEW_SOCKET_REQ kProto; // [sp+4h] [bp-8h]@1
  __int16 pdata; // [sp+8h] [bp-4h]@1

  v3 = this;
  kProto.drill.Inven = kDrill.Inven;
  kProto.equipment.Inven = kWeapon.Inven;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  pdata = 12356;
  PgNet::AddNetMsg(v4, &pdata, 2);
  PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &kProto, 4);
}

//----- (004AA490) --------------------------------------------------------
void __thiscall GameFrameWork::NcQuestStartReq(GameFrameWork *this, unsigned __int16 nQuestID)
{
  unsigned __int16 v2; // ax@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PROTO_NC_QUEST_START_REQ kReq; // [sp+4h] [bp-4h]@1

  v2 = nQuestID;
  v3 = this;
  nQuestID = 17428;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  kReq.nQuestID = v2;
  PgNet::AddNetMsg(v4, &nQuestID, 2);
  PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &kReq, 2);
}

//----- (004AA4E0) --------------------------------------------------------
void __thiscall GameFrameWork::NcQuestReadReq(GameFrameWork *this, unsigned __int16 nQuestID)
{
  unsigned __int16 v2; // ax@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PROTO_NC_QUEST_READ_REQ kReq; // [sp+4h] [bp-4h]@1

  v2 = nQuestID;
  v3 = this;
  nQuestID = 17430;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  kReq.nQuestID = v2;
  PgNet::AddNetMsg(v4, &nQuestID, 2);
  PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &kReq, 2);
}

//----- (004AA530) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_INIT_GAMEOPTION_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  OptionSystemWin *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData == 8480 )
  {
    MachineOpt::SetGameOpt((PROTO_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD *)pvData + 1);
    v4 = v3->m_pkOptionSystemWin;
    memcpy(&v4->m_kOpenGameOption, &MachineOpt::ms_kGameOption, sizeof(v4->m_kOpenGameOption));
    OptionSystemWin::SetInfo(v4, &v4->m_kOpenGameOption);
  }
  return iRevBytes;
}

//----- (004AA580) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharSaveUIStateSaveReq(GameFrameWork *this, bool bOn)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v2 = this;
  pdata = 16421;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  *(&bOn + 3) = bOn;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &bOn + 3, 1);
}

//----- (004AA5C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_NPC_ACTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // ecx@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)((char *)pvData + 1));
  if ( v3 )
    Char::ActAction(
      v3,
      (AniEventCode::Code1)(10000 * *(_DWORD *)((char *)pvData + 3) / 0x2710u),
      (AniEventCode::Code2)(100
                          * (*(_DWORD *)((char *)pvData + 3) / 0x64u - 100 * *(_DWORD *)((char *)pvData + 3) / 0x2710u)));
  return iRevBytes;
}

//----- (004AA620) --------------------------------------------------------
void __thiscall GameFrameWork::NcCollectCardregistReq(GameFrameWork *this, unsigned int uiSlot)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@2
  PgNet *v4; // ecx@2
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@2
  PROTO_NC_COLLECT_CARDREGIST_REQ kProto; // [sp+Bh] [bp-1h]@2

  v2 = this;
  if ( !GameFrameWork::IsPlayCardOpen(this) )
  {
    v3 = (PgNet *)v2->m_spZoneNet.m_pObject;
    netcmd.protocol = -15352;
    PgNet::AddNetMsg(v3, &netcmd, 2);
    v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
    kProto.invenslot = uiSlot;
    PgNet::SendNetMsg(v4, &kProto, 1);
  }
}

//----- (004AA670) --------------------------------------------------------
void __thiscall GameFrameWork::NcCollectBookmarkRegistReq(GameFrameWork *this, unsigned int uiSlot, unsigned int uiCardID)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  unsigned __int16 v5; // ax@1
  PgNet *v6; // ecx@3
  PROTO_NC_COLLECT_BOOKMARK_REGIST_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = -15348;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = uiCardID;
  kProto.BookMarkSlot = uiSlot;
  if ( !uiCardID )
    v5 = -1;
  v6 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.CardID = v5;
  PgNet::SendNetMsg(v6, &kProto, 4);
}

//----- (004AA6D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcCollectRewardReq(GameFrameWork *this, unsigned int uiRewardID, unsigned __int16 kItemID)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  PROTO_NC_COLLECT_REWARD_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = -15344;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.RewardID = uiRewardID;
  kProto.RewardItem = kItemID;
  PgNet::SendNetMsg(v5, &kProto, 4);
}

//----- (004AA720) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_TOGGLESKILL_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  ShortCutWin **v4; // esi@1
  signed int v5; // ebx@1

  v3 = this;
  ShortCutWin::OffToggleKey(this->m_pkShortCutWin, *(_WORD *)pvData);
  ShortCutWin::OffToggleKey(v3->m_pkShortCutWinV, *(_WORD *)pvData);
  v4 = v3->m_pkShortCutSubWinV;
  v5 = 4;
  do
  {
    ShortCutWin::OffToggleKey(*(v4 - 5), *(_WORD *)pvData);
    ShortCutWin::OffToggleKey(*v4, *(_WORD *)pvData);
    ++v4;
    --v5;
  }
  while ( v5 );
  Skill::RecordSkillUse(*(_WORD *)pvData, Timer::ms_fCurTime, 0.0, 0.0);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AA7A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBLAST_LIGHTNINGWAVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // ebx@2
  int v4; // esi@2
  int v5; // esi@3
  int v6; // edx@6
  Char *v7; // ebx@9
  Char *v8; // eax@9
  float v9; // ST14_4@12
  int result; // eax@13
  GameFrameWork *v11; // [sp+28h] [bp-4h]@1

  v11 = this;
  if ( AttackSequenceManager::GetSkillDmgInfoSetbyIndex(&g_pkMainChar->baseclass_54, *(_WORD *)pvData) )
  {
    result = iRevBytes;
  }
  else
  {
    v3 = *((_WORD *)pvData + 1);
    v4 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                            *((_WORD *)pvData + 1)) )
    {
      if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) )
      {
        v6 = *(_DWORD *)(v4 + 196);
        if ( *(_DWORD *)(v6 + 4 * v3) )
          v5 = *(_DWORD *)(v6 + 4 * v3);
        else
          v5 = 0;
      }
      else
      {
        v5 = 0;
      }
    }
    else
    {
      v5 = 0;
    }
    v7 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 2));
    v8 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 3));
    if ( v5 && v7 )
    {
      if ( v8 )
      {
        v9 = (double)*(unsigned int *)(v5 + 191);
        EffectMgr::CreateLightningShootEff(
          &g_kEffectMgr,
          (char *)(v5 + 195),
          (char *)(v5 + 291),
          v7,
          v8,
          Timer::ms_fCurTime,
          v9,
          0,
          *(LastEffPos *)(v5 + 323),
          *((_WORD *)pvData + 1) != 0,
          0xFFFFu);
        v11->m_LightningWaveInfo.bAddLightningWave = 1;
        v11->m_LightningWaveInfo.kSkillID = *((_WORD *)pvData + 1);
      }
    }
    result = iRevBytes;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (004AA8C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharEventAttendRewardReq(GameFrameWork *this, int iWeekIndex, int iIndex)
{
  int v3; // esi@1
  unsigned __int16 v4; // di@1
  GameFrameWork *v5; // ebx@1
  int v6; // eax@3
  int v7; // esi@4
  PgNet *v8; // ecx@5
  PgNet *v9; // ecx@5
  NETCOMMAND netcmd; // [sp+Ch] [bp-4h]@5

  v3 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
  v4 = iWeekIndex;
  v5 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable
                                                        + 16))(
                          ITableBase<AttendReward_AttendRewardTab>::ms_pkTable,
                          iWeekIndex) )
  {
    if ( v4 <= *(_WORD *)(v3 + 200) )
    {
      v6 = *(_DWORD *)(v3 + 196) + 4 * v4;
      if ( *(_DWORD *)v6 )
      {
        v7 = *(_DWORD *)v6;
        if ( *(_DWORD *)v6 )
        {
          v8 = (PgNet *)v5->m_spWorldMgrNet.m_pObject;
          netcmd.protocol = 4337;
          PgNet::AddNetMsg(v8, &netcmd, 2);
          LOBYTE(iWeekIndex) = iIndex;
          v9 = (PgNet *)v5->m_spWorldMgrNet.m_pObject;
          BYTE1(iWeekIndex) = *(_BYTE *)v7;
          PgNet::SendNetMsg(v9, &iWeekIndex, 2);
        }
      }
    }
  }
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004AA940) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharRebirthCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 4354;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004AA970) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharRebirthRejectCmd(GameFrameWork *this)
{
  PgNet *v1; // ecx@1
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  LOWORD(netcmd) = 4355;
  PgNet::SendNetMsg(v1, &netcmd, 2);
}

//----- (004AA9A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_CAMERA_MOVE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  float v4; // ST0C_4@5
  float v5; // ST08_4@5
  CameraEffect *v6; // eax@5
  float v7; // edx@5
  double v8; // st7@5
  float v9; // ST10_4@5
  float v10; // ST0C_4@5
  unsigned int v12; // [sp+Ch] [bp-34h]@3
  unsigned int v13; // [sp+10h] [bp-30h]@3
  NiPoint3 CameraLookAt; // [sp+1Ch] [bp-24h]@3
  NiPoint3 DestPos; // [sp+28h] [bp-18h]@5
  float v16; // [sp+34h] [bp-Ch]@5
  float v17; // [sp+38h] [bp-8h]@5
  float v18; // [sp+3Ch] [bp-4h]@5

  v3 = this;
  if ( this->m_spCamEffect.m_pObject )
  {
    if ( !*(_BYTE *)pvData )
    {
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[21].Deaffect)(&CameraLookAt);
      v13 = 1;
      v12 = 4;
LABEL_6:
      CameraEffect::Start(v3->m_spCamEffect.m_pObject, Timer::ms_fCurTime, 0.5, v12, v13);
      return iRevBytes;
    }
    if ( *(_BYTE *)pvData == 1 )
    {
      v5 = (double)*(unsigned int *)((char *)pvData + 1);
      v4 = (double)*(unsigned int *)((char *)pvData + 5);
      World::GetAdvGroundPos(&g_kWorld, v5, v4, &DestPos);
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[21].Deaffect)(&CameraLookAt);
      v6 = v3->m_spCamEffect.m_pObject;
      v16 = DestPos.x - CameraLookAt.x;
      v17 = DestPos.y - CameraLookAt.y;
      v7 = v17;
      v8 = DestPos.z - CameraLookAt.z;
      v6->m_MovePos.x = v16;
      v6->m_MovePos.y = v7;
      v18 = v8;
      v6->m_MovePos.z = v18;
      v9 = (double)*(_WORD *)((char *)pvData + 11);
      v10 = (double)*(_WORD *)((char *)pvData + 9);
      CameraEffect::SetAngle(v3->m_spCamEffect.m_pObject, v10, v9);
      v13 = 1;
      v12 = 3;
      v3->m_spCamEffect.m_pObject->m_fDist = (double)*(_WORD *)((char *)pvData + 13);
      goto LABEL_6;
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AAAD0) --------------------------------------------------------
void __thiscall GameFrameWork::NcActNpcMenuCmd(GameFrameWork *this, int iIndex)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ACT_NPC_MENU_CMD kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8307;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.Ack = iIndex;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004AAB20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_SOMEONE_RIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  void *v4; // esi@1
  Char *v5; // edi@1
  Char *v6; // eax@2
  void *v7; // eax@2
  _BYTE v8[12]; // ST10_12@3
  _BYTE v9[12]; // ST04_12@3
  void *v10; // esi@5

  v3 = this;
  v4 = pvData;
  v5 = GameFrameWork::GetCharByHandle(this, *((_WORD *)pvData + 1), 51, 4);
  if ( v5 )
  {
    v6 = GameFrameWork::GetCharByHandle(v3, *(_WORD *)v4, 51, 4);
    Mover::RideOn((Mover *)v5, v6, *((_BYTE *)v4 + 4));
    Mover::GetSlotNode((Mover *)v5, (NiPointer<NiNode> *)&pvData, *((_BYTE *)v4 + 4));
    v7 = pvData;
    if ( pvData )
    {
      *(_DWORD *)v8 = (_DWORD)NiPoint3::UNIT_Y.x;
      *(_QWORD *)&v8[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
      *(_DWORD *)v9 = *((_DWORD *)pvData + 35);
      *(_QWORD *)&v9[4] = *((_QWORD *)pvData + 18);
      EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_St01", *(NiPoint3 *)v9, *(NiPoint3 *)v8, Timer::ms_fCurTime, 1.0);
      v7 = pvData;
    }
    if ( v7 )
    {
      v10 = v7;
      if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      {
        if ( v10 )
          (**(void (__thiscall ***)(void *, signed int))v10)(v10, 1);
      }
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AAC40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_SOMEONE_RIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // edi@1
  Mover *v5; // esi@2
  _BYTE v6[12]; // ST10_12@4
  _BYTE v7[12]; // ST04_12@4
  void *v8; // esi@6

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 51, 8);
  v4 = v3;
  if ( v3 )
  {
    v5 = v3->m_pkMover;
    if ( v5 )
    {
      Mover::GetSlotNode(v5, (NiPointer<NiNode> *)&pvData, v3->m_uiMoverSlot);
      if ( pvData )
      {
        *(_DWORD *)v6 = (_DWORD)NiPoint3::UNIT_Y.x;
        *(_QWORD *)&v6[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
        *(_DWORD *)v7 = *((_DWORD *)pvData + 35);
        *(_QWORD *)&v7[4] = *((_QWORD *)pvData + 18);
        EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_Fi01", *(NiPoint3 *)v7, *(NiPoint3 *)v6, Timer::ms_fCurTime, 1.0);
      }
      Mover::SetMoverEffect(v5, 0, 0, 0);
      Mover::RideOff(v5, v4->m_uiMoverSlot);
      if ( pvData )
      {
        v8 = pvData;
        if ( !InterlockedDecrement((volatile LONG *)pvData + 1) )
        {
          if ( v8 )
            (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
        }
      }
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AAD70) --------------------------------------------------------
void __thiscall GameFrameWork::NcMoverRideOnReq(GameFrameWork *this, unsigned __int16 kHandle, unsigned int uiSlot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  PROTO_NC_MOVER_RIDE_ON_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = -13311;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nMoverHandle = kHandle;
  kProto.nSlot = uiSlot;
  PgNet::SendNetMsg(v5, &kProto, 3);
}

//----- (004AADC0) --------------------------------------------------------
void __thiscall GameFrameWork::NcMoverRideOffReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_MOVER_RIDE_OFF_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = -13307;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004AAE00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PET_SET_NAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  int v4; // edx@2
  int v5; // ecx@2
  int v6; // edx@2
  AbStateInfectee::AbstateColor (__thiscall *v7)(AbStateInfectee *); // edx@2
  char acName[17]; // [sp+4h] [bp-18h]@2
  unsigned int v10; // [sp+18h] [bp-4h]@1
  int v11; // [sp+1Ch] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v4 = *(_DWORD *)((char *)pvData + 6);
    *(_DWORD *)acName = *(_DWORD *)((char *)pvData + 2);
    v5 = *(_DWORD *)((char *)pvData + 10);
    *(_DWORD *)&acName[4] = v4;
    v6 = *(_DWORD *)((char *)pvData + 14);
    *(_DWORD *)&acName[8] = v5;
    *(_DWORD *)&acName[12] = v6;
    v7 = v3->baseclass_0.vfptr[2].GetAbstateColor;
    acName[16] = 0;
    ((void (__thiscall *)(Char *, _DWORD))v7)(v3, acName);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004AAE70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_TIMER_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  EventTimeWin *v4; // ecx@1

  v3 = this;
  v4 = this->m_pkEventTimeWin;
  if ( v4 )
  {
    EventTimeWin::Start(v4, Timer::ms_fCurTime);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkEventTimeWin->baseclass_0.baseclass_0.baseclass_0);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AAEB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_EVENT_CODE_ACTION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // ecx@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
    Char::ActAction(
      v3,
      (AniEventCode::Code1)(10000 * *(_DWORD *)((char *)pvData + 2) / 0x2710u),
      (AniEventCode::Code2)(100
                          * (*(_DWORD *)((char *)pvData + 2) / 0x64u - 100 * *(_DWORD *)((char *)pvData + 2) / 0x2710u)));
  return iRevBytes;
}

//----- (004AAF10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_RESET_TIME_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  if ( v3 )
  {
    CClientQuest::SetQuestResetTime((CClientQuest *)v3, (PROTO_NC_QUEST_RESET_TIME_CMD *)pvData);
    QuestDataMgr::m_bUpdate = 1;
  }
  return iRevBytes;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (004AAF40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_VOTING_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // ebx@1
  int v5; // ecx@1
  int v6; // eax@1
  int v7; // ecx@1
  int v8; // eax@2
  char v9; // cl@3
  int v10; // edx@4
  int v11; // ecx@4
  int v12; // eax@4
  int v13; // edx@4
  int v14; // eax@5
  char v15; // cl@6
  unsigned int v16; // eax@7
  char v18; // [sp+Ch] [bp-158h]@10
  char acStr[256]; // [sp+30h] [bp-134h]@9
  char acStarter[21]; // [sp+130h] [bp-34h]@1
  char acTarget[21]; // [sp+148h] [bp-1Ch]@4
  unsigned int v22; // [sp+160h] [bp-4h]@1
  int v23; // [sp+164h] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 2);
  v4 = this;
  v5 = *((_DWORD *)pvData + 1);
  *(_DWORD *)acStarter = *(_DWORD *)pvData;
  v6 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acStarter[4] = v5;
  v7 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acStarter[12] = v6;
  *(_DWORD *)&acStarter[16] = v7;
  *(_DWORD *)&acStarter[8] = v3;
  acStarter[20] = 0;
  if ( strcmp(acStarter, (const char *)&unk_98C0D3) )
  {
    v8 = (int)acStarter;
    do
    {
      v9 = *(_BYTE *)v8;
      *(_BYTE *)(v4->m_acStarter - acStarter + v8) = *(_BYTE *)v8;
      ++v8;
    }
    while ( v9 );
  }
  v10 = *((_DWORD *)pvData + 5);
  v11 = *((_DWORD *)pvData + 7);
  *(_DWORD *)&acTarget[4] = *((_DWORD *)pvData + 6);
  v12 = *((_DWORD *)pvData + 9);
  *(_DWORD *)acTarget = v10;
  v13 = *((_DWORD *)pvData + 8);
  *(_DWORD *)&acTarget[8] = v11;
  *(_DWORD *)&acTarget[16] = v12;
  *(_DWORD *)&acTarget[12] = v13;
  acTarget[20] = 0;
  if ( strcmp(acTarget, (const char *)&unk_98C109) )
  {
    v14 = (int)acTarget;
    do
    {
      v15 = *(_BYTE *)v14;
      *(_BYTE *)(v4->m_acTarget - acTarget + v14) = *(_BYTE *)v14;
      ++v14;
    }
    while ( v15 );
  }
  _mktime32((tm *)((char *)pvData + 41));
  VoteWin::SetProposerText(v4->m_pkVoteWin, acStarter);
  VoteWin::SetTargetText(v4->m_pkVoteWin, acTarget);
  VoteWin::SetReasonType(v4->m_pkVoteWin, *((_BYTE *)pvData + 40));
  LOBYTE(v16) = *((_BYTE *)pvData + 77);
  if ( (_BYTE)v16 )
  {
    v16 = (unsigned __int8)v16;
    if ( (signed int)(unsigned __int8)v16 < 256 )
    {
      strncpy(acStr, (char *)pvData + 78, v16);
      acStr[*((_BYTE *)pvData + 77)] = 0;
      VoteWin::SetReasonEditText(v4->m_pkVoteWin, acStr);
    }
  }
  memcpy(&v18, (char *)pvData + 41, 0x24u);
  memcpy(&v4->m_pkVoteWin->m_tEndTime, &v18, sizeof(v4->m_pkVoteWin->m_tEndTime));
  VoteWin::SetVoteWinType(v4->m_pkVoteWin, 0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkVoteWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004AB120) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqVoteVotingReq(GameFrameWork *this, KQ_VOTING_TYPE eVoteType)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_KQ_VOTE_VOTING_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 22570;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.eVoteType = eVoteType;
  PgNet::SendNetMsg(v4, &kProto, 4);
}

//----- (004AB170) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqJoinListReq(GameFrameWork *this, unsigned int kHandle)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_KQ_JOIN_LIST_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 22577;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.nHandle = kHandle;
  PgNet::SendNetMsg(v4, &kProto, 4);
}

//----- (004AB1C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqVoteStartCheckReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_KQ_VOTE_START_CHECK_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 22580;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004AB200) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_MAP_OBJECT_CONTROL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  void *v4; // eax@1
  int v5; // ecx@2
  FadeObjectMgr *v6; // eax@6
  void *v7; // esi@12
  NiPointer<NiAVObject> v9; // [sp-10h] [bp-20h]@4
  int v10; // [sp-Ch] [bp-1Ch]@4
  NiPointer<NiAVObject> *v11; // [sp+0h] [bp-10h]@4
  int v12; // [sp+Ch] [bp-4h]@1

  v3 = pvData;
  World::GetGroundObject(&g_kWorld, (NiPointer<NiAVObject> *)&pvData, (const char *)pvData);
  v4 = pvData;
  v12 = 0;
  if ( pvData )
  {
    v5 = *(_DWORD *)((char *)v3 + 33);
    if ( !v5 )
    {
      if ( *((_BYTE *)v3 + 32) )
        *((_WORD *)pvData + 14) &= 0xFFFEu;
      else
        *((_WORD *)pvData + 14) |= 1u;
LABEL_10:
      v4 = pvData;
      goto LABEL_11;
    }
    if ( v5 == 1 )
    {
      v10 = *((_BYTE *)v3 + 32) != 0;
      v9.m_pObject = (NiAVObject *)pvData;
      v11 = &v9;
      if ( pvData )
        InterlockedIncrement((volatile LONG *)pvData + 1);
      LOBYTE(v12) = 1;
      v6 = Singleton<FadeObjectMgr>::getInstance();
      LOBYTE(v12) = 0;
      FadeObjectMgr::AddObject(v6, v9, v10);
      goto LABEL_10;
    }
  }
LABEL_11:
  v12 = -1;
  if ( v4 )
  {
    v7 = v4;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
    {
      if ( v7 )
        (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    }
  }
  return iRevBytes;
}

//----- (004AB2F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_ANIMATION_LEVEL_CHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = GameFrameWork::GetCharByHandle(this, *(_WORD *)pvData, 8, 118);
  if ( v3 )
    v3->m_uiConditionAniLevel = *((_BYTE *)pvData + 2);
  return iRevBytes;
}

//----- (004AB320) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_USE_ACTIVESKILL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  CastingProgressWin *v5; // ecx@3
  Char *v6; // eax@5

  v3 = this;
  if ( *(_WORD *)pvData != 12584 )
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
    if ( *(_WORD *)pvData == 12593 )
    {
      v5 = v3->m_pkCastingProgressBar;
      v3->m_kSkillCasting.eState = 0;
      CastingProgressWin::CastingFail(v5);
      if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)() )
        Char::CancelSkillAction(g_pkMainChar, 0);
    }
  }
  v6 = g_pkMainChar;
  g_pkMainChar[1].m_bGroundSkillTargetPointSetted = 0;
  *(_DWORD *)&v6[1].m_szBlockName[1] = 0;
  return iRevBytes;
}

//----- (004AB3B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemUseActiveskillReq(GameFrameWork *this, unsigned int uiInvenSlot, unsigned __int16 kTargetHandle)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-14h]@1
  PROTO_NC_ITEM_USE_ACTIVESKILL_REQ kProto; // [sp+8h] [bp-10h]@1
  unsigned int v8; // [sp+14h] [bp-4h]@1
  int v9; // [sp+18h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12366;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  kProto.nTargetHnd = kTargetHandle;
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nInvenSlot = uiInvenSlot;
  kProto.TargetLoc.x = 0;
  kProto.TargetLoc.y = 0;
  PgNet::SendNetMsg(v5, &kProto, 11);
}
// A85C00: using guessed type int __security_cookie;

//----- (004AB420) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemUseActiveskillReq(GameFrameWork *this, unsigned int uiInvenSlot, unsigned int x, unsigned int y)
{
  GameFrameWork *v4; // esi@1
  PgNet *v5; // ecx@1
  PgNet *v6; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-14h]@1
  PROTO_NC_ITEM_USE_ACTIVESKILL_REQ kProto; // [sp+8h] [bp-10h]@1
  unsigned int v9; // [sp+14h] [bp-4h]@1
  int v10; // [sp+18h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v4 = this;
  v5 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12366;
  PgNet::AddNetMsg(v5, &netcmd, 2);
  kProto.nTargetHnd = -1;
  kProto.nInvenSlot = uiInvenSlot;
  kProto.TargetLoc.x = x;
  v6 = (PgNet *)v4->m_spZoneNet.m_pObject;
  kProto.TargetLoc.y = y;
  PgNet::SendNetMsg(v6, &kProto, 11);
}
// A85C00: using guessed type int __security_cookie;

//----- (004AB490) --------------------------------------------------------
void __thiscall GameFrameWork::NcMoverUpgradeReq(GameFrameWork *this, unsigned int uiMainInvenSlot, unsigned int uiSubInvenSlot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_MOVER_UPGRADE_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12369;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nMainSlotNo = uiMainInvenSlot;
  kProto.nSubSlotNo = uiSubInvenSlot;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004AB4E0) --------------------------------------------------------
void __thiscall GameFrameWork::NcInstanceDungeonLevelSelectMenuAck(GameFrameWork *this, unsigned __int16 kNPCHandle, ID_LEVEL_TYPE eLevelType)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  PROTO_NC_INSTANCE_DUNGEON_LEVEL_SELECT_MENU_ACK kProto; // [sp+4h] [bp-Ch]@1
  NETCOMMAND netcmd; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = -23539;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nNPCHandle = kNPCHandle;
  kProto.eLevelType = eLevelType;
  PgNet::SendNetMsg(v5, &kProto, 6);
}

//----- (004AB530) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_END_CINEMATIC(GameFrameWork *this, int iRevBytes, void *pvData)
{
  TextScreenEffect *v3; // ecx@1
  void *v4; // eax@2
  TextScreenEffect *v5; // eax@3
  TextScreenEffect *v6; // ecx@6
  void *v7; // eax@7
  TextScreenEffect *v8; // eax@8
  unsigned int v9; // eax@11
  MachineOpt::GameOption gameOption; // [sp+0h] [bp-48h]@11
  void *v12; // [sp+38h] [bp-10h]@2
  int v13; // [sp+44h] [bp-4h]@2

  v3 = Singleton<TextScreenEffect>::m_pInstance;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v4 = operator new(0x28u);
    v12 = v4;
    v13 = 0;
    if ( v4 )
      TextScreenEffect::TextScreenEffect((TextScreenEffect *)v4);
    else
      v5 = 0;
    v3 = v5;
    v13 = -1;
    Singleton<TextScreenEffect>::m_pInstance = v5;
  }
  TextScreenEffect::AddSchedule(v3, 4);
  v6 = Singleton<TextScreenEffect>::m_pInstance;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v7 = operator new(0x28u);
    v12 = v7;
    v13 = 1;
    if ( v7 )
      TextScreenEffect::TextScreenEffect((TextScreenEffect *)v7);
    else
      v8 = 0;
    v6 = v8;
    v13 = -1;
    Singleton<TextScreenEffect>::m_pInstance = v8;
  }
  TextScreenEffect::Stop(v6);
  memcpy(&gameOption, &MachineOpt::ms_kGameOption, 0x34u);
  *(_WORD *)&gameOption.bBasicInfoTipCheck = *((_WORD *)&MachineOpt::ms_kGameOption + 26);
  gameOption.bAutoStack = *((_BYTE *)&MachineOpt::ms_kGameOption + 54);
  v9 = *(_DWORD *)&gameOption.m_kVersion.hour;
  gameOption.bInterfaceCheck = 1;
  memcpy(&MachineOpt::ms_kGameOption, &gameOption, 0x34u);
  *((_WORD *)&MachineOpt::ms_kGameOption + 26) = *(_WORD *)&gameOption.bBasicInfoTipCheck;
  *((_BYTE *)&MachineOpt::ms_kGameOption + 54) = gameOption.bAutoStack;
  byte_B5BB1E = v9 >> 16;
  return iRevBytes;
}
// B5BB1E: using guessed type char byte_B5BB1E;

//----- (004AB620) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_TUTORIAL_STEP_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  LuaScriptMgr *v3; // ecx@1
  void *v4; // eax@2
  float v5; // eax@3
  LuaScript *v6; // esi@6
  LuaScriptMgr *v7; // ecx@7
  void *v8; // eax@8
  float v9; // eax@9
  LuaScriptMgr *v10; // eax@13
  Tutorial *v11; // eax@14
  void *v12; // eax@15

  v3 = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
  if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    v4 = operator new(0x14u);
    if ( v4 )
      LuaScriptMgr::LuaScriptMgr((LuaScriptMgr *)v4);
    else
      LODWORD(v5) = 0;
    v3 = (LuaScriptMgr *)LODWORD(v5);
    Singleton<LuaScriptMgr>::m_pInstance = v5;
  }
  v6 = LuaScriptMgr::GetLuaScript(v3, 0);
  if ( v6 )
    goto LABEL_24;
  v7 = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
  if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    v8 = operator new(0x14u);
    if ( v8 )
      LuaScriptMgr::LuaScriptMgr((LuaScriptMgr *)v8);
    else
      LODWORD(v9) = 0;
    v7 = (LuaScriptMgr *)LODWORD(v9);
    Singleton<LuaScriptMgr>::m_pInstance = v9;
  }
  if ( LuaScriptMgr::CreateLuaScript(v7, 0) )
  {
    v10 = Singleton<LuaScriptMgr>::getInstance();
    v6 = LuaScriptMgr::GetLuaScript(v10, 0);
  }
  v11 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v12 = operator new(0xB4u);
    if ( v12 )
      Tutorial::Tutorial(v11);
    else
      v11 = 0;
    Singleton<Tutorial>::m_pInstance = v11;
  }
  v11->m_bEnable = 1;
  if ( v6 )
LABEL_24:
    LuaScriptTutorial::UpdateStep((LuaScriptTutorial *)v6, *(_BYTE *)pvData);
  return iRevBytes;
}

//----- (004AB750) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharTutorialStepAck(GameFrameWork *this, unsigned int uiTutorialStep)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_CHAR_TUTORIAL_STEP_ACK kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 4375;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.nTutorialStep = uiTutorialStep;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004AB7A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_TOPVIEW_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@3
  float v5; // ST0C_4@5
  float v6; // ST08_4@5
  CameraEffect *v7; // eax@5
  float v8; // edx@5
  double v9; // st7@5
  float v10; // ST0C_4@5
  NiPoint3 CameraLookAt; // [sp+1Ch] [bp-24h]@3
  NiPoint3 DestPos; // [sp+28h] [bp-18h]@5
  float v13; // [sp+34h] [bp-Ch]@5
  float v14; // [sp+38h] [bp-8h]@5
  float v15; // [sp+3Ch] [bp-4h]@5

  v3 = this;
  if ( this->m_spCamEffect.m_pObject )
  {
    if ( !*(_BYTE *)pvData )
    {
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[21].Deaffect)(&CameraLookAt);
      CameraEffect::Start(v3->m_spCamEffect.m_pObject, Timer::ms_fCurTime, 0.5, 4u, 1u);
      result = iRevBytes;
      v3->m_bPlayPuzzle = 0;
      return result;
    }
    if ( *(_BYTE *)pvData == 1 )
    {
      v6 = (double)*(unsigned int *)((char *)pvData + 1);
      v5 = (double)*(unsigned int *)((char *)pvData + 5);
      World::GetAdvGroundPos(&g_kWorld, v6, v5, &DestPos);
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[21].Deaffect)(&CameraLookAt);
      v7 = v3->m_spCamEffect.m_pObject;
      v13 = DestPos.x - CameraLookAt.x;
      v14 = DestPos.y - CameraLookAt.y;
      v8 = v14;
      v9 = DestPos.z - CameraLookAt.z;
      v7->m_MovePos.x = v13;
      v7->m_MovePos.y = v8;
      v15 = v9;
      v7->m_MovePos.z = v15;
      v10 = (double)*(_WORD *)((char *)pvData + 11);
      CameraEffect::SetAngle(v3->m_spCamEffect.m_pObject, v10, 89.0);
      v3->m_spCamEffect.m_pObject->m_fDist = (double)*(_WORD *)((char *)pvData + 9);
      CameraEffect::Start(v3->m_spCamEffect.m_pObject, Timer::ms_fCurTime, 0.5, 3u, 1u);
      v3->m_bPlayPuzzle = 1;
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AB910) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_HIDE_OTHER_PLAYER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@4

  v3 = this;
  if ( *(_BYTE *)pvData )
  {
    if ( unk_AA2800 && CNSTimer_Interval::IsRun_GetCount(&stru_AA2804, Timer::ms_fCurTime) )
    {
      CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
      CharMgr::RemoveAllWithoutMainCharAndNPC(&g_kCharMgr);
      result = iRevBytes;
      unk_AA2801 = 1;
      return result;
    }
  }
  else
  {
    if ( unk_AA2800 && CNSTimer_Interval::IsRun_GetCount(&stru_AA2804, Timer::ms_fCurTime) )
    {
      CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
      unk_AA2801 = 0;
      GameFrameWork::NcMiscHideExceptMeCmd(v3, 0);
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AB9C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqTeamSelectReq(GameFrameWork *this, char nTeamType)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_KQ_TEAM_SELECT_REQ kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 22583;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.nTeamType = nTeamType;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004ABA10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_TEAM_TYPE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = iRevBytes;
  g_pkMainChar->m_byKQTeamType = *(_BYTE *)pvData;
  return result;
}

//----- (004ABA30) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemRandomOptionChangeReq(GameFrameWork *this, int kItemSlotNo, int kStuffSlotNo)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_RANDOMOPTION_CHANGE_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12371;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nItemSlotNo = kItemSlotNo;
  kProto.nStuffSlotNo = kStuffSlotNo;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004ABA80) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemChatColorChangeReq(GameFrameWork *this, int iColorSlot)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_CHAT_COLOR_CHANGE_REQ kProto; // [sp+Bh] [bp-1h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12373;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.nSlotNo = iColorSlot;
  PgNet::SendNetMsg(v4, &kProto, 1);
}

//----- (004ABAD0) --------------------------------------------------------
void __thiscall GameFrameWork::NcTermExtendReq(GameFrameWork *this, unsigned int uiExtebdItemSlot, unsigned int uiTermItemSlot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_TERMEXTEND_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12375;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nExtendItemSlot = uiExtebdItemSlot;
  kProto.nTermItemSlot = uiTermItemSlot;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004ABB20) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharBuffItemAutoUseOnReq(GameFrameWork *this, unsigned __int16 *pkItemID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  int v4; // edx@1
  int v5; // ecx@1
  int v6; // edx@1
  int v7; // eax@1
  PgNet *v8; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-20h]@1
  PROTO_NC_CHAR_USEITEM_MINIMON_NORMAL_ITEM_ON_REQ kProto; // [sp+8h] [bp-1Ch]@1
  unsigned int v11; // [sp+20h] [bp-4h]@1
  int v12; // [sp+24h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 4388;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = *(_DWORD *)pkItemID;
  *(_DWORD *)&kProto.NormalItemList[2] = *((_DWORD *)pkItemID + 1);
  v5 = *((_DWORD *)pkItemID + 3);
  *(_DWORD *)&kProto.NormalItemList[0] = v4;
  v6 = *((_DWORD *)pkItemID + 2);
  *(_DWORD *)&kProto.NormalItemList[6] = v5;
  *(_DWORD *)&kProto.NormalItemList[4] = v6;
  v7 = *((_DWORD *)pkItemID + 5);
  v8 = (PgNet *)v2->m_spZoneNet.m_pObject;
  *(_DWORD *)&kProto.NormalItemList[8] = *((_DWORD *)pkItemID + 4);
  *(_DWORD *)&kProto.NormalItemList[10] = v7;
  PgNet::SendNetMsg(v8, &kProto, 24);
}
// A85C00: using guessed type int __security_cookie;

//----- (004ABBA0) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharBuffItemAutoUseOffReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_CHAR_USEITEM_MINIMON_NORMAL_ITEM_OFF_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 4390;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004ABBE0) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharChargedItemAutoUseOnReq(GameFrameWork *this, unsigned __int16 *pkItemID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  int v4; // edx@1
  int v5; // ecx@1
  int v6; // edx@1
  int v7; // eax@1
  PgNet *v8; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-20h]@1
  PROTO_NC_CHAR_USEITEM_MINIMON_CHARGED_ITEM_ON_REQ kProto; // [sp+8h] [bp-1Ch]@1
  unsigned int v11; // [sp+20h] [bp-4h]@1
  int v12; // [sp+24h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 4392;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = *(_DWORD *)pkItemID;
  *(_DWORD *)&kProto.ChargedItemList[2] = *((_DWORD *)pkItemID + 1);
  v5 = *((_DWORD *)pkItemID + 3);
  *(_DWORD *)&kProto.ChargedItemList[0] = v4;
  v6 = *((_DWORD *)pkItemID + 2);
  *(_DWORD *)&kProto.ChargedItemList[6] = v5;
  *(_DWORD *)&kProto.ChargedItemList[4] = v6;
  v7 = *((_DWORD *)pkItemID + 5);
  v8 = (PgNet *)v2->m_spZoneNet.m_pObject;
  *(_DWORD *)&kProto.ChargedItemList[8] = *((_DWORD *)pkItemID + 4);
  *(_DWORD *)&kProto.ChargedItemList[10] = v7;
  PgNet::SendNetMsg(v8, &kProto, 24);
}
// A85C00: using guessed type int __security_cookie;

//----- (004ABC60) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharChargedItemAutoUseOffReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_CHAR_USEITEM_MINIMON_CHARGED_ITEM_OFF_REQ kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 4394;
  PgNet::AddNetMsg(v2, &netcmd, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, &kProto, 1);
}

//----- (004ABCA0) --------------------------------------------------------
void __thiscall GameFrameWork::NcCharChargedbuffEraseReq(GameFrameWork *this, unsigned int nChargedBuffKey)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_CHAR_CHARGEDBUFF_ERASE_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 4398;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.nChargedBuffKey = nChargedBuffKey;
  PgNet::SendNetMsg(v4, &kProto, 4);
}

//----- (004ABCF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CHARGEDBUFF_ERASE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  NiNode *v4; // eax@4
  char *v6; // eax@6

  v3 = this;
  if ( *(_WORD *)pvData == 13912 )
  {
    if ( g_pkMainChar )
    {
      if ( g_pkMainChar != (Char *)-776 )
      {
        v4 = g_pkMainChar->m_kCharShape.m_apkLinkNode[1];
        if ( v4 )
        {
          EffectMgr::CreateAttachEffect(&g_kEffectMgr, (unsigned int *)&pvData, "ChargedOff", v4, Timer::ms_fCurTime, 0);
          return iRevBytes;
        }
      }
    }
  }
  else
  {
    v6 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v6);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004ABD60) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemRepurchaseReq(GameFrameWork *this, unsigned __int16 nHaldle)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_ITEM_REPURCHASE_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12377;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.nHaldle = nHaldle;
  PgNet::SendNetMsg(v4, &kProto, 2);
}

//----- (004ABDB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ITEM_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@1
  int v4; // edi@1

  v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v4 = *((_WORD *)pvData + 2);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          *((_WORD *)pvData + 2))
    && (unsigned __int16)v4 <= *(_WORD *)(v3 + 200)
    && *(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * v4) )
    Market::SetRepurchaseItem((PROTO_NC_ITEM_SELL_ITEM_LIST_CMD *)pvData, (char *)pvData);
  return iRevBytes;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004ABE00) --------------------------------------------------------
void __thiscall GameFrameWork::NcGuildEmblemSaveReq(GameFrameWork *this, GUILD_EMBLEM_INFO pEmblemInfo)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  GUILD_EMBLEM_INFO kProto; // [sp+4h] [bp-8h]@1
  __int16 pdata; // [sp+8h] [bp-4h]@1

  v2 = this;
  pdata = 29957;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  kProto = pEmblemInfo;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 2);
}

//----- (004ABE50) --------------------------------------------------------
void __thiscall GameFrameWork::NcGuildEmblemCheckAvailabilityReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = 29953;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004ABE90) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemMaplinkScrollReq(GameFrameWork *this, WM_Link targetMap)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  PROTO_NC_ITEM_MAPLINK_SCROLL_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12391;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
  kProto.targetMap = targetMap;
  PgNet::SendNetMsg(v4, &kProto, 4);
}

//----- (004ABEE0) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemMixItemReq(GameFrameWork *this, unsigned int uiLefeItemInvSlot, unsigned int uiRightItemInvSlot, unsigned int uiAddItemInvSlot)
{
  GameFrameWork *v4; // esi@1
  PgNet *v5; // ecx@1
  PgNet *v6; // ecx@1
  PROTO_NC_ITEM_MIX_ITEM_REQ kProto; // [sp+4h] [bp-8h]@1
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@1

  v4 = this;
  v5 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12393;
  PgNet::AddNetMsg(v5, &netcmd, 2);
  kProto.nRawLeft = uiLefeItemInvSlot;
  kProto.nSubRaw = uiAddItemInvSlot;
  v6 = (PgNet *)v4->m_spZoneNet.m_pObject;
  kProto.nRawRight = uiRightItemInvSlot;
  PgNet::SendNetMsg(v6, &kProto, 3);
}

//----- (004ABF30) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemRandomOptRecoverCountLimitReq(GameFrameWork *this, int _kItemSlotIdx, unsigned int _uiRecoverCnt)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_RANDOMOPTION_RECOVER_COUNT_LIMIT_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12395;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.nItemSlotNo = _kItemSlotIdx;
  kProto.nStuffUseLot = _uiRecoverCnt;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004ABF80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_RANDOMOPTION_RECOVER_COUNT_LIMIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@2
  char *v5; // eax@3
  RandomOptCountRecoverWin *v6; // ecx@4
  bool bSuccess; // [sp+4h] [bp-4h]@1

  v3 = this;
  bSuccess = 1;
  if ( this->m_pkInventoryWin->m_pkRandomOptCountRecoverWin )
  {
    v4 = *(_WORD *)pvData;
    if ( (_WORD)v4 != 12881 )
    {
      v5 = ErrMsgTable::GetErrMsg(v4);
      GameFrameWork::AddSysMsg(v3, v5);
      bSuccess = 0;
    }
    v6 = v3->m_pkInventoryWin->m_pkRandomOptCountRecoverWin;
    if ( v6 )
      RandomOptCountRecoverWin::ShowRecoverCountResult(v6, bSuccess);
    InventoryWin::OnResetRecoverCountState(v3->m_pkInventoryWin);
  }
  return iRevBytes;
}

//----- (004ABFF0) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemNewUpGradeReq(GameFrameWork *this, char equipSlot, char rawSlot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_NEW_UPGRADE_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12397;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.equip = equipSlot;
  kProto.raw = rawSlot;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004AC040) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemBraceletUpgradeReq(GameFrameWork *this, char equipSlot, char rawSlot)
{
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@1
  PgNet *v5; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_ITEM_BRACELET_UPGRADE_REQ kProto; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 12399;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
  kProto.equip = equipSlot;
  kProto.raw = rawSlot;
  PgNet::SendNetMsg(v5, &kProto, 2);
}

//----- (004AC090) --------------------------------------------------------
void __thiscall GameFrameWork::NcInstanceDungeonRankListReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  __int16 pdata; // [sp+4h] [bp-4h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  pdata = -23529;
  PgNet::AddNetMsg(v2, &pdata, 2);
  PgNet::SendNetMsg(&v1->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
}

//----- (004AC0D0) --------------------------------------------------------
void __thiscall GameFrameWork::NcMapLoginCompleteCmd(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  MapNavigator *v3; // edi@6
  MapNavigator *v4; // ebx@7
  GTInformWin *v5; // edi@15
  D3DXCOLOR *v6; // eax@16
  D3DXCOLOR v7; // ST04_16@16
  char *v8; // eax@16
  QuestNewsWin *v9; // eax@21
  char v10; // al@23
  PkRealTiemRankWin *v11; // ecx@25
  Name3 *v12; // eax@28
  MiniMapWin *v13; // eax@29
  PgWin *v14; // eax@30
  CameraEffect *v15; // ecx@35
  MiniMapWin *v16; // ecx@42
  Name3 *v17; // eax@44
  float v18; // ecx@44
  float v19; // edx@44
  float v20; // eax@44
  BasicInfoLinkType v21; // eax@44
  bool v22; // [sp+14h] [bp-B8h]@19
  NiPoint3 kPos; // [sp+24h] [bp-A8h]@17
  NiPointer<MapNavigator> result; // [sp+30h] [bp-9Ch]@6
  NETCOMMAND netcmd; // [sp+34h] [bp-98h]@2
  char MapName[128]; // [sp+38h] [bp-94h]@28
  D3DXCOLOR acstr; // [sp+B8h] [bp-14h]@16
  unsigned int v28; // [sp+C8h] [bp-4h]@1
  int v29; // [sp+CCh] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  v1 = this;
  v2 = (PgNet *)this->m_spZoneNet.m_pObject;
  if ( v2 )
  {
    netcmd.protocol = 6147;
    PgNet::SendNetMsg(v2, &netcmd, 2);
    if ( nowState )
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0xAu, 0, 0);
    if ( AbStateInfectee::FindNomalAbstate(&g_pkMainChar->baseclass_0, STA_OBSERVERHIDEMODE) )
      MiniMapWin::ShowGTQuit(v1->m_pkMiniMapWin, 1);
    v1->m_bIsGM = 0;
    v3 = MapNavigator::GetMapNavigator(&result)->m_pObject;
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    if ( v3 )
    {
      if ( v3->m_eDotState == 2 )
      {
        if ( v3->m_bIsWorking )
          v3->m_eDotState = 3;
      }
      else
      {
        if ( v3->m_bIsWorking )
        {
          v3->m_bIsWorking = 0;
          v5 = v1->m_pkAutoRunMsgWin;
          if ( v5 )
          {
            GTInformWin::Clear(v1->m_pkAutoRunMsgWin);
            v6 = Color::GetDxColor(&acstr, -1, -112, 0, -1);
            *(_QWORD *)&v7.r = *(_QWORD *)&v6->r;
            *(_QWORD *)&v7.b = *(_QWORD *)&v6->b;
            v8 = TextData2::Get(0x3C517589u);
            GTInformWin::AddText(v5, v8, COERCE_D3DXCOLOR(v7.r), 0, 3.0);
          }
          ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
          ((void (__stdcall *)(_DWORD, _DWORD, signed int))g_pkMainChar->baseclass_0.vfptr[7].IsVisible)(
            (_DWORD)kPos.x,
            LODWORD(kPos.y),
            1);
        }
      }
    }
    v22 = byte_B30C4C != 7;
    GameFrameWork::OnOpenGambleHouseWin(v1, v22);
    v9 = v1->m_pkQuestNewsWin;
    if ( v9 )
    {
      if ( v9->m_ePigeonState == 1 )
      {
        v10 = User::Lv(&g_kUser);
        if ( QuestNewsWin::CheckNewQuest(v1->m_pkQuestNewsWin, v10) )
          GameFrameWork::OpenQuestNewsWin(v1);
      }
    }
    v11 = v1->m_pkKQPKRealTimeRankWin;
    if ( v11 )
      PkRealTiemRankWin::Open(v11);
    DecalMgr::RemoveAllDecal(&stru_B31F08);
    if ( v1->m_pkMiniMapWin )
    {
      v12 = World::GetMapName(&g_kWorld, (Name3 *)&kPos);
      *(_DWORD *)MapName = *(_DWORD *)&v12->n3_name[0];
      *(_DWORD *)&MapName[4] = *(_DWORD *)&v12->n3_name[4];
      *(_DWORD *)&MapName[8] = *(_DWORD *)&v12->n3_name[8];
      MapName[12] = 0;
      if ( !strncmp(MapName, "KDMine", 6u) )
      {
        v13 = v1->m_pkMiniMapWin;
        if ( v13 )
        {
          v14 = (PgWin *)v13->m_pkFullMapWin;
          if ( v14 )
            PgWinMgr::ShowWin(&Pgg_kWinMgr, v14);
        }
      }
    }
    if ( v1->m_pkNpcDlgWin )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    if ( v1->m_bPlayPuzzle )
    {
      v15 = v1->m_spCamEffect.m_pObject;
      v1->m_bPlayPuzzle = 0;
      if ( v15 )
        CameraEffect::ClearMove(v15);
      if ( unk_AA2800 && CNSTimer_Interval::IsRun_GetCount(&stru_AA2804, Timer::ms_fCurTime) )
      {
        CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
        unk_AA2801 = 0;
        GameFrameWork::NcMiscHideExceptMeCmd(v1, 0);
      }
    }
    if ( v1->m_pkPuzzleTimeWin )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkPuzzleTimeWin->baseclass_0.baseclass_0.baseclass_0);
    v16 = v1->m_pkMiniMapWin;
    if ( v16 )
      MiniMapWin::NotViewInDunLevelFlag(v16);
    v1->m_bMoveRunCtrl = 1;
    v17 = World::GetMapName(&g_kWorld, (Name3 *)&kPos);
    LODWORD(v18) = *(_DWORD *)&v17->n3_name[0];
    LODWORD(v19) = *(_DWORD *)&v17->n3_name[4];
    LODWORD(v20) = *(_DWORD *)&v17->n3_name[8];
    acstr.r = v18;
    acstr.g = v19;
    acstr.b = v20;
    LOBYTE(acstr.a) = 0;
    v21 = BasicInfoLinkTab::GetbyCType(BIL_C_LINKIN_MAP, (char *)&acstr);
    if ( v21 )
      GameFrameWork::OpenPlayGuideWin(v1, v21);
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// B30C4C: using guessed type char byte_B30C4C;

//----- (004AC440) --------------------------------------------------------
void __thiscall GameFrameWork::NcBatSkillbashObjCastReq(GameFrameWork *this, unsigned __int16 kSkillID, unsigned __int16 kHandle)
{
  GameFrameWork *v3; // ebx@1
  int v4; // eax@3
  int v5; // esi@3
  int v6; // eax@5
  int v7; // esi@6
  int v8; // edi@7
  char *v9; // eax@10
  char *v10; // eax@12
  PgNet *v11; // ecx@15
  PgNet *v12; // ecx@15
  int iSP; // [sp+4h] [bp-10h]@3
  Skill::EmpowerInfo kEmpowerInfo; // [sp+8h] [bp-Ch]@7
  PROTO_NC_BAT_SKILLBASH_OBJ_CAST_REQ kProto; // [sp+Ch] [bp-8h]@15
  NETCOMMAND netcmd; // [sp+10h] [bp-4h]@15

  v3 = this;
  if ( !this->m_kSkillCasting.eState )
  {
    if ( !this->m_kSkillCasting.bWaitingForServerCancel )
    {
      v4 = User::SP(&g_kUser);
      v5 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
      iSP = v4;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                              kSkillID) )
      {
        if ( kSkillID <= *(_WORD *)(v5 + 200) )
        {
          v6 = *(_DWORD *)(v5 + 196) + 4 * kSkillID;
          if ( *(_DWORD *)v6 )
          {
            v7 = *(_DWORD *)v6;
            if ( *(_DWORD *)v6 )
            {
              v8 = *(_DWORD *)(v7 + 160);
              Skill::GetAccumulatedEmpowerInfo(&kEmpowerInfo, kSkillID);
              if ( kEmpowerInfo.cSmallSp )
                v8 -= *(_DWORD *)(v7 + 4 * kEmpowerInfo.cSmallSp + 463);
              if ( iSP >= v8 )
              {
                if ( User::LP(&g_kUser) >= *(_DWORD *)(v7 + 176) )
                {
                  if ( g_pkMainChar->m_byMode == 1 )
                  {
                    Char::SetMode(g_pkMainChar, 2);
                    GameFrameWork::NcActChangeModeReq(v3, 2);
                  }
                  v11 = (PgNet *)v3->m_spZoneNet.m_pObject;
                  netcmd.protocol = 9280;
                  PgNet::AddNetMsg(v11, &netcmd, 2);
                  kProto.skill = kSkillID;
                  v12 = (PgNet *)v3->m_spZoneNet.m_pObject;
                  kProto.target = kHandle;
                  PgNet::SendNetMsg(v12, &kProto, 4);
                  v3->m_kSkillCasting.eState = 2;
                  v3->m_kSkillCasting.eTargetType = 0;
                }
                else
                {
                  v10 = TextData3::Get(0x40601363u);
                  GameFrameWork::AddSysMsg(v3, v10);
                }
              }
              else
              {
                v9 = TextData::Get(0x2A664B39u);
                GameFrameWork::AddSysMsg(v3, v9);
              }
            }
          }
        }
      }
    }
  }
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004AC5B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcBatSkillbashFldCastReq(GameFrameWork *this, unsigned __int16 kSkillID, unsigned int x, unsigned int y)
{
  bool v4; // zf@1
  int v5; // eax@3
  int v6; // esi@3
  int v7; // eax@5
  int v8; // esi@6
  int v9; // edi@7
  char *v10; // eax@10
  char *v11; // eax@12
  GameFrameWork *v12; // esi@14
  PgNet *v13; // ecx@16
  int iSP; // [sp+4h] [bp-20h]@3
  Skill::EmpowerInfo kEmpowerInfo; // [sp+8h] [bp-1Ch]@7
  NETCOMMAND netcmd; // [sp+Ch] [bp-18h]@16
  GameFrameWork *thisa; // [sp+10h] [bp-14h]@1
  PROTO_NC_BAT_SKILLBASH_FLD_CAST_REQ kProto; // [sp+14h] [bp-10h]@16
  unsigned int v19; // [sp+20h] [bp-4h]@1
  int v20; // [sp+24h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v4 = this->m_kSkillCasting.eState == 1;
  thisa = this;
  if ( v4 )
  {
    if ( !this->m_kSkillCasting.bWaitingForServerCancel )
    {
      v5 = User::SP(&g_kUser);
      v6 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
      iSP = v5;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                              kSkillID) )
      {
        if ( kSkillID <= *(_WORD *)(v6 + 200) )
        {
          v7 = *(_DWORD *)(v6 + 196) + 4 * kSkillID;
          if ( *(_DWORD *)v7 )
          {
            v8 = *(_DWORD *)v7;
            if ( *(_DWORD *)v7 )
            {
              v9 = *(_DWORD *)(v8 + 160);
              Skill::GetAccumulatedEmpowerInfo(&kEmpowerInfo, kSkillID);
              if ( kEmpowerInfo.cSmallSp )
                v9 -= *(_DWORD *)(v8 + 4 * kEmpowerInfo.cSmallSp + 463);
              if ( iSP >= v9 )
              {
                if ( User::LP(&g_kUser) >= *(_DWORD *)(v8 + 176) )
                {
                  if ( g_pkMainChar->m_byMode == 1 )
                  {
                    Char::SetMode(g_pkMainChar, 2);
                    v12 = thisa;
                    GameFrameWork::NcActChangeModeReq(thisa, 2);
                  }
                  else
                  {
                    v12 = thisa;
                  }
                  netcmd.protocol = 9281;
                  PgNet::AddNetMsg(&v12->m_spZoneNet.m_pObject->baseclass_0, &netcmd, 2);
                  kProto.locate.y = y;
                  v13 = (PgNet *)v12->m_spZoneNet.m_pObject;
                  kProto.skill = kSkillID;
                  kProto.locate.x = x;
                  PgNet::SendNetMsg(v13, &kProto, 10);
                  v12->m_kSkillCasting.eState = 2;
                }
                else
                {
                  v11 = TextData3::Get(0x40601363u);
                  GameFrameWork::AddSysMsg(thisa, v11);
                }
              }
              else
              {
                v10 = TextData::Get(0x2A664B39u);
                GameFrameWork::AddSysMsg(thisa, v10);
              }
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004AC740) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemEquipReq(GameFrameWork *this, const char bySlot)
{
  GameFrameWork *v2; // esi@1
  char *v3; // eax@2
  PgNet *v4; // ecx@3
  PgNet *v5; // ecx@3
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@3
  PROTO_NC_ITEM_EQUIP_REQ kProto; // [sp+Bh] [bp-1h]@3

  v2 = this;
  if ( CharShape::IsSpactralGlowEnable(&g_pkMainChar->m_kCharShape) )
  {
    v3 = TextData2::Get(0xC0FDEAD1u);
    GameFrameWork::AddSysMsg(v2, v3);
  }
  else
  {
    v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
    netcmd.protocol = 12303;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    v5 = (PgNet *)v2->m_spZoneNet.m_pObject;
    kProto.slot = bySlot;
    PgNet::SendNetMsg(v5, &kProto, 1);
  }
}

//----- (004AC7C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemUnequipReq(GameFrameWork *this, const char bySlotequip, const char bySlotinven)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  PgNet *v5; // ecx@3
  PgNet *v6; // ecx@3
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@3
  PROTO_NC_ITEM_UNEQUIP_REQ kProto; // [sp+8h] [bp-4h]@3

  v3 = this;
  if ( CharShape::IsSpactralGlowEnable(&g_pkMainChar->m_kCharShape) )
  {
    v4 = TextData2::Get(0xBEF92618u);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  else
  {
    v5 = (PgNet *)v3->m_spZoneNet.m_pObject;
    netcmd.protocol = 12306;
    PgNet::AddNetMsg(v5, &netcmd, 2);
    v6 = (PgNet *)v3->m_spZoneNet.m_pObject;
    kProto.slotequip = bySlotequip;
    kProto.slotinven = bySlotinven;
    PgNet::SendNetMsg(v6, &kProto, 2);
  }
}

//----- (004AC840) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyJoinReq(GameFrameWork *this, char *pcCharName)
{
  GameFrameWork *v2; // esi@1
  char *v3; // eax@2
  PgNet *v4; // ecx@3
  NETCOMMAND netcmd; // [sp+Ch] [bp-1Ch]@3
  PROTO_NC_PARTY_JOIN_REQ kProto; // [sp+10h] [bp-18h]@3
  unsigned int v7; // [sp+24h] [bp-4h]@1
  int v8; // [sp+28h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  if ( unk_AA2801 )
  {
    v3 = TextData::Get(0x1E7AE39u);
    GameFrameWork::AddSysMsg(v2, v3);
  }
  else
  {
    v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    netcmd.protocol = 14338;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    *(_QWORD *)&kProto.target.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.target.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.target.n5_name[0] = 0;
    strncpy(kProto.target.n5_name, pcCharName, 0x14u);
    PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004AC8F0) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyJoinProposeAllowAck(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  PgNet *v4; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_PARTY_JOINPROPOSE_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v7; // [sp+1Ch] [bp-4h]@1
  int v8; // [sp+20h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 14340;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  *(_DWORD *)&kProto.mastername.n5_name[0] = *(_DWORD *)&kCharID;
  *(_QWORD *)&kProto.mastername.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  *(_QWORD *)&kProto.mastername.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
  PgNet::SendNetMsg(v4, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004AC960) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyLeaveReq(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@2
  PgNet *v3; // ecx@3
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@3

  v1 = this;
  if ( g_kParty.m_uiTotalMember )
  {
    v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    netcmd.protocol = 14346;
    PgNet::SendNetMsg(v3, &netcmd, 2);
  }
  else
  {
    v2 = TextData::Get(0x7D9CEEE9u);
    GameFrameWork::AddSysMsg(v1, v2);
  }
}

//----- (004AC9B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyKickOffReq(GameFrameWork *this, char *pcCharName)
{
  GameFrameWork *v2; // esi@1
  _BYTE v3[20]; // ST00_20@3
  PgNet *v4; // ecx@4
  char *v5; // eax@5
  NETCOMMAND netcmd; // [sp+4h] [bp-30h]@4
  Name5 kCharID; // [sp+8h] [bp-2Ch]@3
  PROTO_NC_PARTY_JOINPROPOSE_REQ kProto; // [sp+1Ch] [bp-18h]@4
  unsigned int v9; // [sp+30h] [bp-4h]@1
  int v10; // [sp+34h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  if ( pcCharName
    && *pcCharName
    && (*(_QWORD *)&kCharID.n5_name[12] = 0i64,
        *(_QWORD *)&kCharID.n5_name[4] = 0i64,
        *(_QWORD *)&kCharID.n5_name[0] = 0i64,
        strncpy(kCharID.n5_name, pcCharName, 0x14u),
        *(_QWORD *)v3 = *(_QWORD *)&kCharID,
        *(_QWORD *)&v3[8] = *(_QWORD *)&kCharID.n5_name[8],
        *(_DWORD *)&v3[16] = *(_DWORD *)&kCharID.n5_name[16],
        Party::GetMemberInfo(&g_kParty, *(Name5 *)v3)) )
  {
    v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
    netcmd.protocol = 14356;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    *(_DWORD *)&kProto.mastername.n5_name[0] = *(_DWORD *)&kCharID;
    *(_QWORD *)&kProto.mastername.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
    *(_QWORD *)&kProto.mastername.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
    PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
  }
  else
  {
    v5 = TextData::Get(0x1622809Du);
    GameFrameWork::AddSysMsg(v2, v5);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004ACAB0) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartyChangeMasterReq(GameFrameWork *this, char *pcCharName)
{
  GameFrameWork *v2; // esi@1
  _BYTE v3[20]; // ST00_20@5
  PgNet *v4; // ecx@6
  char *v5; // eax@8
  unsigned int v6; // [sp-4h] [bp-38h]@2
  NETCOMMAND netcmd; // [sp+4h] [bp-30h]@6
  Name5 kCharID; // [sp+8h] [bp-2Ch]@5
  PROTO_NC_PARTY_JOINPROPOSE_REQ kProto; // [sp+1Ch] [bp-18h]@6
  unsigned int v10; // [sp+30h] [bp-4h]@1
  int v11; // [sp+34h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  if ( g_kParty.m_uiTotalMember )
  {
    if ( pcCharName )
    {
      if ( *pcCharName )
      {
        *(_QWORD *)&kCharID.n5_name[12] = 0i64;
        *(_QWORD *)&kCharID.n5_name[4] = 0i64;
        *(_QWORD *)&kCharID.n5_name[0] = 0i64;
        strncpy(kCharID.n5_name, pcCharName, 0x14u);
        *(_QWORD *)v3 = *(_QWORD *)&kCharID;
        *(_QWORD *)&v3[8] = *(_QWORD *)&kCharID.n5_name[8];
        *(_DWORD *)&v3[16] = *(_DWORD *)&kCharID.n5_name[16];
        if ( Party::GetMemberInfo(&g_kParty, *(Name5 *)v3) )
        {
          v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
          netcmd.protocol = 14376;
          PgNet::AddNetMsg(v4, &netcmd, 2);
          *(_DWORD *)&kProto.mastername.n5_name[0] = *(_DWORD *)&kCharID;
          *(_QWORD *)&kProto.mastername.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
          *(_QWORD *)&kProto.mastername.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
          PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
          return;
        }
      }
    }
    v6 = 1194130603;
  }
  else
  {
    v6 = 2107436777;
  }
  v5 = TextData::Get(v6);
  GameFrameWork::AddSysMsg(v2, v5);
}
// A85C00: using guessed type int __security_cookie;

//----- (004ACBC0) --------------------------------------------------------
void __thiscall GameFrameWork::NcTradeProposeReq(GameFrameWork *this, unsigned __int16 kHandle)
{
  GameFrameWork *v2; // esi@1
  MsgBox *v3; // ecx@3
  PgNet *v4; // ecx@5
  PgNet *v5; // ecx@5
  char *v6; // eax@6
  unsigned int v7; // [sp-4h] [bp-10h]@2
  PROTO_NC_TRADE_PROPOSE_REQ kProto; // [sp+4h] [bp-8h]@5
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@5

  v2 = this;
  if ( unk_AA2801 )
  {
    v7 = -237584599;
LABEL_6:
    v6 = TextData::Get(v7);
    GameFrameWork::AddSysMsg(v2, v6);
    return;
  }
  v3 = this->m_spUserTradeMsgBox.m_pObject;
  if ( !v3
    || !(unsigned __int8)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v4 = (PgNet *)v2->m_spZoneNet.m_pObject;
    netcmd.protocol = 19457;
    PgNet::AddNetMsg(v4, &netcmd, 2);
    v5 = (PgNet *)v2->m_spZoneNet.m_pObject;
    kProto.proposee = kHandle;
    PgNet::SendNetMsg(v5, &kProto, 2);
    v7 = -1847339783;
    goto LABEL_6;
  }
}

//----- (004ACC40) --------------------------------------------------------
void __thiscall GameFrameWork::NcFriendSetReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  Name5 *v3; // eax@1
  int v4; // eax@1
  PgNet *v5; // ecx@1
  char *v6; // eax@1
  __int16 pdata; // [sp+8h] [bp-48h]@1
  PROTO_NC_FRIEND_SET_REQ kProto; // [sp+Ch] [bp-44h]@1
  char acname[21]; // [sp+34h] [bp-1Ch]@1
  unsigned int v10; // [sp+4Ch] [bp-4h]@1
  int v11; // [sp+50h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.charid.n5_name[12] = 0i64;
  *(_QWORD *)&kProto.charid.n5_name[4] = 0i64;
  *(_DWORD *)&kProto.charid.n5_name[0] = 0;
  *(_QWORD *)&kProto.friendid.n5_name[12] = 0i64;
  *(_QWORD *)&kProto.friendid.n5_name[4] = 0i64;
  *(_DWORD *)&kProto.friendid.n5_name[0] = 0;
  v3 = User::GetMainCharID(&g_kUser);
  *(_QWORD *)&kProto.charid.n5_name[0] = *(_QWORD *)&v3->n5_name[0];
  *(_QWORD *)&kProto.charid.n5_name[8] = *(_QWORD *)&v3->n5_name[8];
  v4 = *(_DWORD *)&v3->n5_name[16];
  *(_QWORD *)&kProto.friendid.n5_name[0] = *(_QWORD *)&kCharID;
  *(_DWORD *)&kProto.charid.n5_name[16] = v4;
  *(_QWORD *)&kProto.friendid.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  v5 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  *(_DWORD *)&kProto.friendid.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  pdata = 21505;
  PgNet::AddNetMsg(v5, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 40);
  *(_DWORD *)acname = *(_DWORD *)&kCharID;
  *(_QWORD *)&acname[4] = *(_QWORD *)&kCharID.n5_name[4];
  *(_QWORD *)&acname[12] = *(_QWORD *)&kCharID.n5_name[12];
  acname[20] = 0;
  v6 = TextData3::Get(0x2B444487u);
  GameFrameWork::VaAddSysMsg(v2, v6);
}
// A85C00: using guessed type int __security_cookie;

//----- (004ACD40) --------------------------------------------------------
void __thiscall GameFrameWork::NcFriendSetConfirmAck(GameFrameWork *this, Name5 charid, bool bAccept_Friend)
{
  GameFrameWork *v3; // esi@1
  Name5 *v4; // eax@1
  int v5; // eax@1
  PgNet *v6; // ecx@1
  __int16 pdata; // [sp+4h] [bp-34h]@1
  PROTO_NC_FRIEND_SET_CONFIRM_ACK kProto; // [sp+8h] [bp-30h]@1
  unsigned int v9; // [sp+34h] [bp-4h]@1
  int v10; // [sp+38h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  *(_QWORD *)&kProto.charid.n5_name[12] = 0i64;
  *(_QWORD *)&kProto.charid.n5_name[4] = 0i64;
  *(_DWORD *)&kProto.charid.n5_name[0] = 0;
  *(_QWORD *)&kProto.friendid.n5_name[12] = 0i64;
  *(_QWORD *)&kProto.friendid.n5_name[4] = 0i64;
  *(_DWORD *)&kProto.friendid.n5_name[0] = 0;
  v4 = User::GetMainCharID(&g_kUser);
  *(_QWORD *)&kProto.charid.n5_name[0] = *(_QWORD *)&v4->n5_name[0];
  *(_QWORD *)&kProto.charid.n5_name[8] = *(_QWORD *)&v4->n5_name[8];
  v5 = *(_DWORD *)&v4->n5_name[16];
  *(_QWORD *)&kProto.friendid.n5_name[0] = *(_QWORD *)&charid;
  *(_DWORD *)&kProto.charid.n5_name[16] = v5;
  *(_DWORD *)&kProto.friendid.n5_name[16] = *(_DWORD *)&charid.n5_name[16];
  *(_QWORD *)&kProto.friendid.n5_name[8] = *(_QWORD *)&charid.n5_name[8];
  pdata = 21508;
  v6 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  kProto.accept_friend = bAccept_Friend;
  PgNet::AddNetMsg(v6, &pdata, 2);
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 41);
}
// A85C00: using guessed type int __security_cookie;

//----- (004ACE00) --------------------------------------------------------
void __thiscall GameFrameWork::NcFriendDelReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  Name5 *v3; // eax@1
  int v4; // eax@1
  PgNet *v5; // ecx@1
  __int16 pdata; // [sp+4h] [bp-30h]@1
  PROTO_NC_FRIEND_DEL_REQ kProto; // [sp+8h] [bp-2Ch]@1
  unsigned int v8; // [sp+30h] [bp-4h]@1
  int v9; // [sp+34h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.charid.n5_name[12] = 0i64;
  *(_QWORD *)&kProto.charid.n5_name[4] = 0i64;
  *(_DWORD *)&kProto.charid.n5_name[0] = 0;
  *(_QWORD *)&kProto.friendid.n5_name[12] = 0i64;
  *(_QWORD *)&kProto.friendid.n5_name[4] = 0i64;
  *(_DWORD *)&kProto.friendid.n5_name[0] = 0;
  v3 = User::GetMainCharID(&g_kUser);
  *(_QWORD *)&kProto.charid.n5_name[0] = *(_QWORD *)&v3->n5_name[0];
  *(_QWORD *)&kProto.charid.n5_name[8] = *(_QWORD *)&v3->n5_name[8];
  v4 = *(_DWORD *)&v3->n5_name[16];
  *(_QWORD *)&kProto.friendid.n5_name[0] = *(_QWORD *)&kCharID;
  *(_DWORD *)&kProto.charid.n5_name[16] = v4;
  *(_QWORD *)&kProto.friendid.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  v5 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  *(_DWORD *)&kProto.friendid.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  pdata = 21509;
  PgNet::AddNetMsg(v5, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 40);
}
// A85C00: using guessed type int __security_cookie;

//----- (004ACEC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_SPLIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  __int16 v4; // cx@1
  DivideWin *v5; // eax@1
  char *v6; // eax@5

  v3 = this;
  v4 = *(_WORD *)pvData;
  v5 = v3->m_pkDivideWin;
  if ( v5 )
    v5->m_uiResultValue = 0;
  if ( v4 != 1089 && v4 == 1095 )
  {
    v6 = TextData2::Get(0x16306F77u);
    GameFrameWork::AddSysMsg(v3, v6);
  }
  return iRevBytes;
}

//----- (004ACF20) --------------------------------------------------------
void __thiscall GameFrameWork::NcBoothOpenReq(GameFrameWork *this, bool bIsSell)
{
  GameFrameWork *v2; // ebx@1
  char *v3; // eax@7
  char v4; // al@10
  char v5; // dl@13
  KingdomQuestWin *v6; // eax@15
  PgNet *v7; // ecx@22
  char v8; // al@22
  unsigned int v9; // esi@22
  signed int v10; // edi@23
  int v11; // esi@28
  PgNet *v12; // ecx@28
  signed int v13; // esi@29
  PrivateStoreWin *v14; // eax@31
  NiPoint3 *v15; // eax@36
  unsigned int v16; // [sp-4h] [bp-44h]@6
  NETCOMMAND netcmd; // [sp+4h] [bp-3Ch]@22
  unsigned int i; // [sp+8h] [bp-38h]@28
  char itemnum; // [sp+Fh] [bp-31h]@22
  char pdata; // [sp+10h] [bp-30h]@28
  __int16 v21; // [sp+2Ch] [bp-14h]@28
  char v22; // [sp+2Eh] [bp-12h]@28
  PROTO_NC_BOOTH_OPEN_REQ::BoothItem pkItem; // [sp+30h] [bp-10h]@31
  unsigned int v24; // [sp+3Ch] [bp-4h]@1
  int v25; // [sp+40h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v2 = this;
  if ( this->m_kCharMover.m_bAutoRun )
  {
    KeyboardMoveProcess::SetAutoRun(&this->m_kCharMover, 0);
    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
  }
  if ( v2->m_pkStickChar )
  {
    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    GameFrameWork::Stick(v2, 0, 0);
  }
  if ( JumpProcessor::IsJump(&g_pkMainChar->m_kJumpProcessor) )
  {
    v16 = -1851355186;
LABEL_7:
    v3 = TextData::Get(v16);
LABEL_8:
    GameFrameWork::AddSysMsg(v2, v3);
    return;
  }
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() )
  {
    v4 = g_pkMainChar->m_byMode;
    if ( v4 != 4 )
    {
      if ( v4 != 5 )
      {
        v16 = -1700752701;
        goto LABEL_7;
      }
    }
  }
  v5 = g_pkMainChar->m_byMode;
  if ( v5 == 4 )
  {
    v16 = -1751738414;
    goto LABEL_7;
  }
  v6 = v2->m_pkKingDomQuest;
  if ( v6 && v6->m_bSendJoinMsg )
  {
    v3 = TextData3::Get(0x86F90AD2u);
    goto LABEL_8;
  }
  if ( v5 != 5 && !Char::CheckActState(g_pkMainChar, 100000) )
  {
    v16 = -638309845;
    goto LABEL_7;
  }
  if ( v2->m_pkPrivateStoreWin )
  {
    v7 = (PgNet *)v2->m_spZoneNet.m_pObject;
    netcmd.protocol = 26625;
    PgNet::AddNetMsg(v7, &netcmd, 2);
    v8 = 0;
    v9 = 0;
    itemnum = 0;
    if ( PrivateStoreWin::ms_byBoothSize )
    {
      v10 = 126;
      do
      {
        if ( ItemIcon::GetItem((ItemIcon *)(&v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v10]) )
          ++itemnum;
        ++v9;
        ++v10;
      }
      while ( v9 < PrivateStoreWin::ms_byBoothSize );
      v8 = itemnum;
    }
    v11 = (int)&v2->m_pkPrivateStoreWin->signboard;
    memcpy(&pdata, (const void *)v11, 0x1Cu);
    v12 = (PgNet *)v2->m_spZoneNet.m_pObject;
    v21 = *(_WORD *)(v11 + 28);
    v22 = bIsSell & 1 | 2 * v8;
    PgNet::AddNetMsg(v12, &pdata, 31);
    i = 0;
    if ( PrivateStoreWin::ms_byBoothSize )
    {
      v13 = 126;
      do
      {
        if ( ItemIcon::GetItem((ItemIcon *)(&v2->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v13]) )
        {
          v14 = v2->m_pkPrivateStoreWin;
          pkItem.invenslot = LOBYTE((&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v13][114].__vecDelDtor);
          if ( (unsigned __int8)pkItem.invenslot > 0xC0u )
            return;
          pkItem.boardslot = i;
          pkItem.unitcost = *(_QWORD *)&(&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v13][116].__vecDelDtor;
          if ( !bIsSell )
            pkItem.totallot = LOWORD((&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v13][118].__vecDelDtor);
          PgNet::AddNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, &pkItem, 12);
        }
        ++v13;
        ++i;
      }
      while ( i < PrivateStoreWin::ms_byBoothSize );
    }
    PgNet::SendNetMsg(&v2->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
    v15 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v2, v15);
  }
}
// A7CF04: using guessed type unsigned __int8 PrivateStoreWin__ms_byBoothSize;
// A85C00: using guessed type int __security_cookie;

//----- (004AD1B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_ITEMTRADE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@2
  char *v7; // eax@27
  char *v8; // eax@29
  unsigned int v9; // [sp-4h] [bp-8h]@5

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 == 2625 )
  {
    v5 = TextData::Get(0x82A9E4E5u);
    GameFrameWork::AddSysMsg(v4, v5);
    if ( v4->m_pkPrivateStoreWin )
    {
      GameFrameWork::NcBoothReflashReq(v4, PrivateStoreWin::ms_BoothHandle);
      return iRevBytes;
    }
  }
  else
  {
    switch ( v3 )
    {
      case 2626:
        v9 = -1360146718;
        goto LABEL_29;
      case 2627:
        v9 = -990587926;
        goto LABEL_29;
      case 2628:
        v9 = -1225862178;
        goto LABEL_29;
      case 2629:
        v9 = -1174683327;
        goto LABEL_29;
      case 2630:
        v9 = 692132976;
        goto LABEL_29;
      case 2631:
        v9 = 1874234520;
        goto LABEL_29;
      case 2632:
        v9 = -1140860070;
        goto LABEL_29;
      case 2633:
        v9 = -906353097;
        goto LABEL_29;
      case 2634:
        v9 = 373625774;
        goto LABEL_29;
      case 2649:
        v9 = 1536324270;
        goto LABEL_29;
      case 2650:
        v9 = 1843836924;
        goto LABEL_29;
      case 2635:
        v9 = -1443504921;
        goto LABEL_29;
      case 2636:
        v9 = -29023195;
        goto LABEL_29;
      case 2637:
        v9 = 1638094719;
        goto LABEL_29;
      case 2638:
        v9 = 1618240491;
        goto LABEL_29;
      case 2639:
        v9 = -954000831;
        goto LABEL_29;
      case 2640:
        v9 = -924913905;
        goto LABEL_29;
      case 2641:
        v9 = 1837598645;
        goto LABEL_29;
      case 2642:
        v9 = 1552853712;
        goto LABEL_29;
      case 2643:
        v9 = 1894110192;
        goto LABEL_29;
      case 2644:
        v9 = -1275054031;
        goto LABEL_29;
      case 2645:
        v9 = -1494079410;
        goto LABEL_29;
      case 2660:
        v7 = TextData2::Get(0x1F4C7A90u);
        GameFrameWork::AddSysMsg(v4, v7);
        return iRevBytes;
      default:
        v9 = 1303411583;
LABEL_29:
        v8 = TextData::Get(v9);
        GameFrameWork::AddSysMsg(v4, v8);
        break;
    }
  }
  return iRevBytes;
}
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (004AD390) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  int v4; // eax@1
  PrivateStoreBD *v5; // eax@2
  int v6; // esi@4
  char *v7; // eax@7
  int result; // eax@7
  char *v9; // eax@27
  STREETBOOTH_SIGNBOARD v10; // [sp-24h] [bp-30h]@7
  __int16 v11; // [sp-8h] [bp-14h]@7
  signed int v12; // [sp-4h] [bp-10h]@5

  v3 = this;
  g_pkMainChar->m_byMiniHouseSkinID = Inventory::GetMiniHouseSkin(&g_kInventory);
  v4 = *(_WORD *)pvData;
  if ( (_WORD)v4 == 2625 )
  {
    v5 = ScreenBDMgr::GetPrivateStoreBD(&g_kScrnBDMgr, g_pkMainChar->m_kHandle);
    if ( v5 )
      ScreenBDMgr::RemovePrivateStoreBD(&g_kScrnBDMgr, v5);
    PrivateStoreWin::SetPrivateStoreOpen(v3->m_pkPrivateStoreWin, 1);
    GameFrameWork::ChangeCampMode(v3, 1, 5);
    v6 = (int)&v3->m_pkPrivateStoreWin->signboard;
    v12 = PrivateStoreWin::ms_uiPrivateStoreMode == 1;
    memcpy(&v10, (const void *)v6, 0x1Cu);
    v11 = *(_WORD *)(v6 + 28);
    Char::SetCampSignBoard(g_pkMainChar, v10, v12);
    v7 = TextData::Get(0xC603DBDFu);
    GameFrameWork::AddSysMsg(v3, v7);
    KingdomQuestWin::CheckButtonEnableSetting(v3->m_pkKingDomQuest);
    result = iRevBytes;
  }
  else
  {
    switch ( v4 )
    {
      case 2635:
        v12 = -2014592036;
        break;
      case 2643:
        v12 = -331677142;
        break;
      case 2626:
        v12 = -402666947;
        break;
      case 2627:
        v12 = -1398831983;
        break;
      case 2628:
        v12 = -486416046;
        break;
      case 2629:
        v12 = 1971516096;
        break;
      case 2634:
        v12 = 700027015;
        break;
      case 2636:
        v12 = -1816557376;
        break;
      case 2637:
        v12 = -623122149;
        break;
      case 2638:
        v12 = -1057755603;
        break;
      case 2639:
        v12 = -2106740905;
        break;
      case 2640:
        v12 = 1428501545;
        break;
      case 2642:
        v12 = -551473119;
        break;
      case 2641:
        v12 = -288375884;
        break;
      case 2630:
        v12 = 894462606;
        break;
      case 2645:
        v12 = 1637078780;
        break;
      case 2649:
        v12 = 861087124;
        break;
      default:
        v12 = -1482197565;
        break;
    }
    v9 = TextData::Get(v12);
    GameFrameWork::AddSysMsg(v3, v9);
    result = iRevBytes;
  }
  return result;
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;

//----- (004AD570) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_SOMEONEINTERIORSTART_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // ebx@1
  Char *v4; // esi@1
  PrivateStoreBD *v5; // eax@2
  GameFrameWork *v6; // esi@5
  char *v7; // eax@10
  STREETBOOTH_SIGNBOARD v9; // [sp-24h] [bp-54h]@4
  int v10; // [sp-Ch] [bp-3Ch]@1
  signed int v11; // [sp-8h] [bp-38h]@1
  PgWin *v12; // [sp-4h] [bp-34h]@1
  STREETBOOTH_SIGNBOARD signboard; // [sp+Ch] [bp-24h]@1
  GameFrameWork *v14; // [sp+2Ch] [bp-4h]@1

  v3 = *(_WORD *)pvData;
  memcpy(&signboard, (char *)pvData + 2, 0x1Cu);
  v12 = (PgWin *)18;
  v11 = 26;
  v10 = v3;
  v14 = this;
  *(_WORD *)&signboard.signboard[28] = *((_WORD *)pvData + 15);
  v4 = GameFrameWork::GetCharByHandle(this, v3, 26, 18);
  if ( v4 )
  {
    v5 = ScreenBDMgr::GetPrivateStoreBD(&g_kScrnBDMgr, v3);
    if ( v5 )
      ScreenBDMgr::RemovePrivateStoreBD(&g_kScrnBDMgr, v5);
    v12 = (PgWin *)v4->m_bIsSell;
    memcpy(&v9, &signboard, 0x1Cu);
    LOWORD(v11) = *(_WORD *)&signboard.signboard[28];
    Char::SetCampSignBoard(v4, v9, (bool)v12);
    if ( g_pkMainChar->m_kHandle != (_WORD)v3 )
    {
      v6 = v14;
      if ( v14->m_pkPrivateStoreWin )
      {
        if ( !PrivateStoreWin::ms_uiPrivateStoreMode || PrivateStoreWin::ms_uiPrivateStoreMode == 2 )
        {
          if ( PrivateStoreWin::ms_BoothHandle == (_WORD)v3
            && (unsigned __int8)((int (*)(void))v14->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          {
            v12 = (PgWin *)v6->m_pkPrivateStoreWin;
            PgWinMgr::CloseWin(&Pgg_kWinMgr, v12);
            v7 = TextData2::Get(0x3D836EA9u);
            MsgBox::Modeless(MSGBOX_OK, v7);
          }
        }
      }
    }
  }
  return iRevBytes;
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (004AD660) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_ENTRY_SELL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // ebx@1
  Char *v5; // esi@2
  int v6; // esi@7
  PrivateStoreWin *v7; // eax@8
  int v8; // esi@8
  int v9; // esi@9
  unsigned __int8 v10; // al@10
  unsigned int v11; // edx@10
  Item *v12; // edi@10
  ItemIcon *v13; // ecx@11
  int v14; // edx@14
  void *v15; // edi@15
  PgNet *v16; // ecx@16
  PgNet *v17; // ecx@16
  MarketSearchWin *v18; // ebx@17
  char *v19; // eax@27
  STREETBOOTH_SIGNBOARD v21; // [sp-24h] [bp-6Ch]@7
  __int16 v22; // [sp-8h] [bp-50h]@7
  signed int v23; // [sp-4h] [bp-4Ch]@3
  unsigned __int64 unitcost; // [sp+Ch] [bp-3Ch]@10
  int i; // [sp+14h] [bp-34h]@9
  void *v26; // [sp+18h] [bp-30h]@1
  Char *boothslot; // [sp+1Ch] [bp-2Ch]@2
  unsigned __int8 datasize; // [sp+23h] [bp-25h]@10
  char pkPrivateStoreName[30]; // [sp+24h] [bp-24h]@8
  unsigned int v30; // [sp+44h] [bp-4h]@1
  int v31; // [sp+48h] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  InventoryWin::ms_bBuyPrivateStoreActionReady = 1;
  v3 = *(_WORD *)pvData;
  v4 = this;
  v26 = pvData;
  if ( (_WORD)v3 != 2625 )
  {
    switch ( v3 )
    {
      case 2631:
        v23 = 710359622;
        break;
      case 2632:
        v23 = 1990232328;
        break;
      case 2633:
        v23 = -2070162203;
        break;
      case 2640:
        v23 = 1738108077;
        break;
      case 2644:
        v23 = 1872881375;
        break;
      case 2645:
        v23 = 1637078780;
        break;
      default:
        v23 = -1223961910;
        break;
    }
    goto LABEL_27;
  }
  v5 = GameFrameWork::GetCharByHandle(this, *((_WORD *)pvData + 1), 26, 8);
  boothslot = v5;
  if ( !v5 )
  {
    v23 = -302243239;
LABEL_27:
    v19 = TextData::Get(v23);
    GameFrameWork::AddSysMsg(v4, v19);
    return iRevBytes;
  }
  PrivateStoreWin::ms_BoothHandle = *((_WORD *)pvData + 1);
  if ( !(unsigned __int8)((int (*)(void))v4->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OpenInventoryWin(v4);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
  if ( !v5->m_bIsSell )
  {
    Char::RemovePrivateStoreBD(v5);
    v23 = v5->m_bIsSell == 0;
    v6 = (int)&v5->m_stSignboard;
    memcpy(&v21, (const void *)v6, 0x1Cu);
    v22 = *(_WORD *)(v6 + 28);
    v5 = boothslot;
    Char::SetCampSignBoard(boothslot, v21, v23);
    Char::AddPrivateStoreBD(v5);
  }
  PrivateStoreWin::SetPrivateStoreMode(v4->m_pkPrivateStoreWin, 0);
  *(_DWORD *)pkPrivateStoreName = 0;
  *(_DWORD *)&pkPrivateStoreName[4] = 0;
  *(_DWORD *)&pkPrivateStoreName[8] = 0;
  *(_DWORD *)&pkPrivateStoreName[12] = 0;
  *(_DWORD *)&pkPrivateStoreName[16] = 0;
  *(_DWORD *)&pkPrivateStoreName[20] = 0;
  *(_DWORD *)&pkPrivateStoreName[24] = 0;
  *(_WORD *)&pkPrivateStoreName[28] = 0;
  InventoryWin::ms_uiMode = 0;
  v7 = v4->m_pkPrivateStoreWin;
  v8 = (int)&v5->m_stSignboard;
  memcpy(pkPrivateStoreName, (const void *)v8, 0x1Cu);
  *(_WORD *)&pkPrivateStoreName[28] = *(_WORD *)(v8 + 28);
  ((void (__stdcall *)(_DWORD))v7->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pkPrivateStoreName);
  PrivateStoreWin::ClearItems(v4->m_pkPrivateStoreWin);
  if ( *((_BYTE *)v26 + 4) )
  {
    v9 = (int)((char *)v26 + 5);
    i = 0;
    do
    {
      v10 = *(_BYTE *)v9;
      v11 = *(_DWORD *)(v9 + 2);
      BYTE3(boothslot) = *(_BYTE *)(v9 + 1);
      datasize = v10;
      unitcost = __PAIR__(*(_DWORD *)(v9 + 6), v11);
      v12 = Item::Create((SHINE_ITEM_STRUCT *)(v9 + 10));
      if ( !v12 )
        break;
      v13 = (ItemIcon *)v4->m_pkPrivateStoreWin->m_apkInvWin[BYTE3(boothslot)];
      boothslot = (Char *)(4 * BYTE3(boothslot) + 504);
      ItemIcon::SetItem(v13, v12, 1);
      *(_QWORD *)&(*(AbStateInfecteeVtbl **)((char *)&boothslot->baseclass_0.vfptr
                                           + (unsigned int)v4->m_pkPrivateStoreWin))[14].AddAbStateByAbstateIndex = unitcost;
      if ( (unsigned int)((int (__thiscall *)(Item *))v12->baseclass_0.vfptr[4].__vecDelDtor)(v12) > 1
        && !((int (__thiscall *)(Item *))v12->baseclass_0.vfptr[3].__vecDelDtor)(v12) )
        ItemIcon::SetItem(&v4->m_pkPrivateStoreWin->m_apkInvWin[*(_BYTE *)(v9 + 1)]->baseclass_0, 0, 1);
      v14 = *((_BYTE *)v26 + 4);
      v9 += datasize + 1;
      ++i;
    }
    while ( i < v14 );
    v15 = v26;
    if ( g_pkMainChar->m_byMode == 2 )
    {
      Char::SetMode(g_pkMainChar, 1);
      v23 = 2;
      *(_DWORD *)&v22 = &boothslot;
      v16 = (PgNet *)v4->m_spZoneNet.m_pObject;
      LOWORD(boothslot) = 8200;
      PgNet::AddNetMsg(v16, &boothslot, 2);
      v17 = (PgNet *)v4->m_spZoneNet.m_pObject;
      datasize = 1;
      PgNet::SendNetMsg(v17, &datasize, 1);
    }
    v18 = v4->m_pkMarketSearchWin;
    if ( v18 )
    {
      v23 = *((_WORD *)v15 + 1);
      MarketSearchWin::OnSomeoneBoothOpen(v18, v23);
    }
  }
  return iRevBytes;
}
// A7C518: using guessed type bool InventoryWin__ms_bBuyPrivateStoreActionReady;
// A85C00: using guessed type int __security_cookie;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (004AD970) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_ENTRY_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // ebx@1
  Char *v5; // esi@2
  int v6; // esi@7
  PrivateStoreWin *v7; // eax@8
  int v8; // esi@8
  int v9; // eax@9
  unsigned int v10; // edx@11
  int v11; // edx@11
  Item *v12; // eax@11
  Item *v13; // edi@11
  PrivateStoreWin *v14; // ecx@12
  int v15; // esi@12
  int v16; // eax@12
  int v17; // edx@12
  int v18; // ecx@12
  int v19; // ecx@15
  PgNet *v20; // ecx@17
  PgNet *v21; // ecx@17
  MarketSearchWin *v22; // ebx@18
  char *v23; // eax@28
  STREETBOOTH_SIGNBOARD v25; // [sp-24h] [bp-70h]@7
  __int16 v26; // [sp-8h] [bp-54h]@7
  signed int v27; // [sp-4h] [bp-50h]@3
  unsigned __int64 unitcost; // [sp+Ch] [bp-40h]@11
  int i; // [sp+14h] [bp-38h]@9
  int restquantity; // [sp+18h] [bp-34h]@11
  void *v31; // [sp+1Ch] [bp-30h]@1
  int pkChar; // [sp+20h] [bp-2Ch]@2
  unsigned __int8 boothslot; // [sp+27h] [bp-25h]@11
  _WORD pkPrivateStoreName[16]; // [sp+28h] [bp-24h]@8
  unsigned int v35; // [sp+48h] [bp-4h]@1
  int v36; // [sp+4Ch] [bp+0h]@1

  v35 = (unsigned int)&v36 ^ __security_cookie;
  InventoryWin::ms_bBuyPrivateStoreActionReady = 1;
  v3 = *(_WORD *)pvData;
  v4 = this;
  v31 = pvData;
  if ( (_WORD)v3 != 2625 )
  {
    switch ( v3 )
    {
      case 2631:
        v27 = 710359622;
        break;
      case 2632:
        v27 = 1990232328;
        break;
      case 2633:
        v27 = -2070162203;
        break;
      case 2640:
        v27 = 1738108077;
        break;
      case 2644:
        v27 = 1872881375;
        break;
      case 2645:
        v27 = 1637078780;
        break;
      default:
        v27 = -1223961910;
        break;
    }
    goto LABEL_28;
  }
  v5 = GameFrameWork::GetCharByHandle(this, *((_WORD *)pvData + 1), 26, 9);
  pkChar = (int)v5;
  if ( !v5 )
  {
    v27 = -302243239;
LABEL_28:
    v23 = TextData::Get(v27);
    GameFrameWork::AddSysMsg(v4, v23);
    return iRevBytes;
  }
  PrivateStoreWin::ms_BoothHandle = *((_WORD *)pvData + 1);
  if ( !(unsigned __int8)((int (*)(void))v4->m_pkInventoryWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    GameFrameWork::OpenInventoryWin(v4);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v5->m_bIsSell )
  {
    Char::RemovePrivateStoreBD(v5);
    v27 = v5->m_bIsSell == 0;
    v6 = (int)&v5->m_stSignboard;
    memcpy(&v25, (const void *)v6, 0x1Cu);
    v26 = *(_WORD *)(v6 + 28);
    v5 = (Char *)pkChar;
    Char::SetCampSignBoard((Char *)pkChar, v25, v27);
    Char::AddPrivateStoreBD(v5);
  }
  PrivateStoreWin::SetPrivateStoreMode(v4->m_pkPrivateStoreWin, 2u);
  InventoryWin::ms_uiMode = 3;
  v7 = v4->m_pkPrivateStoreWin;
  v8 = (int)&v5->m_stSignboard;
  memcpy(pkPrivateStoreName, (const void *)v8, 0x1Cu);
  pkPrivateStoreName[14] = *(_WORD *)(v8 + 28);
  ((void (__stdcall *)(_DWORD))v7->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pkPrivateStoreName);
  PrivateStoreWin::ClearItems(v4->m_pkPrivateStoreWin);
  if ( *((_BYTE *)v31 + 4) )
  {
    v9 = (int)((char *)v31 + 8);
    i = 0;
    for ( pkChar = (int)((char *)v31 + 8); ; v9 = pkChar )
    {
      v10 = *(_DWORD *)v9;
      boothslot = *(_BYTE *)(v9 - 3);
      unitcost = __PAIR__(*(_DWORD *)(v9 + 4), v10);
      v11 = *(_WORD *)(v9 + 8);
      v27 = *(_WORD *)(v9 - 2);
      restquantity = v11;
      v12 = Item::Create(v27);
      v13 = v12;
      if ( v12 )
      {
        v14 = v4->m_pkPrivateStoreWin;
        v27 = 1;
        v15 = 4 * boothslot + 504;
        ItemIcon::SetItem(
          *(ItemIcon **)((char *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                       + v15),
          v12,
          1);
        v16 = *(int *)((char *)&v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                     + v15);
        v17 = HIDWORD(unitcost);
        *(_DWORD *)(v16 + 464) = unitcost;
        *(_DWORD *)(v16 + 468) = v17;
        v18 = *(int *)((char *)&v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                     + v15);
        v27 = (unsigned __int16)restquantity;
        *(_WORD *)(v18 + 472) = restquantity;
        PrivateStoreInvWin::SetLotText((PrivateStoreInvWin *)v18, v27);
        if ( (unsigned int)((int (__thiscall *)(Item *))v13->baseclass_0.vfptr[4].__vecDelDtor)(v13) > 1
          && !(_WORD)restquantity )
          ItemIcon::SetItem(
            *(ItemIcon **)((char *)&v4->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                         + v15),
            0,
            1);
        v19 = *((_BYTE *)v31 + 4);
        pkChar += 13;
        ++i;
        if ( i < v19 )
          continue;
      }
      break;
    }
    if ( g_pkMainChar->m_byMode == 2 )
    {
      Char::SetMode(g_pkMainChar, 1);
      v20 = (PgNet *)v4->m_spZoneNet.m_pObject;
      LOWORD(pkChar) = 8200;
      PgNet::AddNetMsg(v20, &pkChar, 2);
      v27 = 1;
      *(_DWORD *)&v26 = &boothslot;
      v21 = (PgNet *)v4->m_spZoneNet.m_pObject;
      boothslot = 1;
      PgNet::SendNetMsg(v21, &boothslot, 1);
    }
    v22 = v4->m_pkMarketSearchWin;
    if ( v22 )
    {
      v27 = *((_WORD *)v31 + 1);
      MarketSearchWin::OnSomeoneBoothOpen(v22, v27);
    }
  }
  return iRevBytes;
}
// A7C518: using guessed type bool InventoryWin__ms_bBuyPrivateStoreActionReady;
// A85C00: using guessed type int __security_cookie;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (004ADC70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_REFRESH_SELL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  char *v4; // eax@6
  Char *v5; // edi@9
  char *v6; // eax@10
  PrivateStoreWin *v7; // eax@11
  char v8; // al@11
  char *v9; // esi@12
  unsigned __int8 v10; // al@13
  int v11; // edx@13
  Item *v12; // eax@13
  int v13; // edi@14
  int v14; // edi@14
  int v15; // eax@14
  PgNet *v16; // ecx@16
  PgNet *v17; // ecx@16
  int unitcost; // [sp+8h] [bp-3Ch]@13
  int unitcost_4; // [sp+Ch] [bp-38h]@13
  signed int i; // [sp+14h] [bp-30h]@12
  __int16 pdata; // [sp+18h] [bp-2Ch]@13
  unsigned __int8 datasize; // [sp+1Fh] [bp-25h]@13
  _WORD pkPrivateStoreName[16]; // [sp+20h] [bp-24h]@11
  unsigned int v25; // [sp+40h] [bp-4h]@1
  int v26; // [sp+44h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v3 = this;
  InventoryWin::ms_bBuyPrivateStoreActionReady = 1;
  if ( (unsigned __int8)((int (*)(void))this->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    if ( *(_WORD *)pvData == 2625 )
    {
      v5 = GameFrameWork::GetCharByHandle(v3, *((_WORD *)pvData + 1), 26, 11);
      if ( v5 )
      {
        PrivateStoreWin::ms_BoothHandle = *((_WORD *)pvData + 1);
        PrivateStoreWin::SetPrivateStoreMode(v3->m_pkPrivateStoreWin, 0);
        v7 = v3->m_pkPrivateStoreWin;
        memcpy(pkPrivateStoreName, &v5->m_stSignboard, 0x1Cu);
        pkPrivateStoreName[14] = *(_WORD *)&v5->m_stSignboard.signboard[28];
        ((void (__stdcall *)(_WORD *))v7->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pkPrivateStoreName);
        PrivateStoreWin::ClearItems(v3->m_pkPrivateStoreWin);
        v8 = *((_BYTE *)pvData + 4);
        if ( v8 )
        {
          v9 = (char *)pvData + 5;
          i = 0;
          if ( v8 )
          {
            do
            {
              v10 = *v9;
              v11 = *(_DWORD *)(v9 + 2);
              HIBYTE(pdata) = v9[1];
              datasize = v10;
              unitcost = v11;
              unitcost_4 = *(_DWORD *)(v9 + 6);
              v12 = Item::Create((SHINE_ITEM_STRUCT *)(v9 + 10));
              if ( !v12 )
                break;
              v13 = 4 * HIBYTE(pdata) + 504;
              ItemIcon::SetItem(
                *(ItemIcon **)((char *)&v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                             + v13),
                v12,
                1);
              v14 = *(int *)((char *)&v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                           + v13);
              v15 = datasize;
              *(_DWORD *)(v14 + 464) = unitcost;
              v9 += v15 + 1;
              *(_DWORD *)(v14 + 468) = unitcost_4;
              ++i;
            }
            while ( i < *((_BYTE *)pvData + 4) );
          }
          if ( g_pkMainChar->m_byMode == 2 )
          {
            Char::SetMode(g_pkMainChar, 1);
            v16 = (PgNet *)v3->m_spZoneNet.m_pObject;
            pdata = 8200;
            PgNet::AddNetMsg(v16, &pdata, 2);
            v17 = (PgNet *)v3->m_spZoneNet.m_pObject;
            datasize = 1;
            PgNet::SendNetMsg(v17, &datasize, 1);
          }
        }
      }
      else
      {
        v6 = TextData::Get(0xEDFC2259u);
        GameFrameWork::AddSysMsg(v3, v6);
      }
    }
  }
  else
  {
    if ( !(_S3_2 & 1) )
    {
      _S3_2 |= 1u;
      unCheckTimer = Timer::ms_fCurTime;
    }
    if ( unCheckTimer + 1000.0 < Timer::ms_fCurTime )
    {
      unCheckTimer = Timer::ms_fCurTime;
      if ( 2651 == *(_WORD *)pvData )
      {
        v4 = TextData2::Get(0x3D836EA9u);
        GameFrameWork::AddSysMsg(v3, v4);
      }
    }
  }
  return iRevBytes;
}
// A7C518: using guessed type bool InventoryWin__ms_bBuyPrivateStoreActionReady;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (004ADE90) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_REFRESH_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  int (*v4)(void); // edx@1
  char *v5; // eax@6
  Char *v6; // esi@9
  char *v7; // eax@10
  PrivateStoreWin *v8; // eax@11
  int v9; // esi@11
  void *v10; // esi@11
  int v11; // edi@12
  unsigned __int8 v12; // al@13
  int v13; // edx@13
  unsigned __int16 v14; // cx@13
  Item *v15; // eax@15
  int v16; // esi@16
  int v17; // eax@16
  int v18; // ecx@16
  PgNet *v19; // ecx@19
  PgNet *v20; // ecx@19
  unsigned __int16 restquantity; // [sp+8h] [bp-3Ch]@13
  int unitcost; // [sp+Ch] [bp-38h]@13
  int unitcost_4; // [sp+10h] [bp-34h]@13
  signed int i; // [sp+14h] [bp-30h]@12
  void *pdata; // [sp+18h] [bp-2Ch]@1
  unsigned __int8 boothslot; // [sp+1Fh] [bp-25h]@13
  _WORD pkPrivateStoreName[16]; // [sp+20h] [bp-24h]@11
  unsigned int v29; // [sp+40h] [bp-4h]@1
  int v30; // [sp+44h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = this;
  InventoryWin::ms_bBuyPrivateStoreActionReady = 1;
  v4 = (int (*)(void))this->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor;
  pdata = pvData;
  if ( (unsigned __int8)v4() )
  {
    if ( *(_WORD *)pvData == 2625 )
    {
      v6 = GameFrameWork::GetCharByHandle(v3, *((_WORD *)pvData + 1), 26, 12);
      if ( v6 )
      {
        PrivateStoreWin::ms_BoothHandle = *((_WORD *)pvData + 1);
        PrivateStoreWin::SetPrivateStoreMode(v3->m_pkPrivateStoreWin, 2u);
        v8 = v3->m_pkPrivateStoreWin;
        v9 = (int)&v6->m_stSignboard;
        memcpy(pkPrivateStoreName, (const void *)v9, 0x1Cu);
        pkPrivateStoreName[14] = *(_WORD *)(v9 + 28);
        ((void (__stdcall *)(_DWORD))v8->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pkPrivateStoreName);
        PrivateStoreWin::ClearItems(v3->m_pkPrivateStoreWin);
        v10 = pdata;
        if ( *((_BYTE *)pdata + 4) )
        {
          i = 0;
          v11 = (int)((char *)pdata + 8);
          do
          {
            v12 = *(_BYTE *)(v11 - 3);
            v13 = *(_DWORD *)(v11 + 4);
            unitcost = *(_DWORD *)v11;
            v14 = *(_WORD *)(v11 + 8);
            boothslot = *(_BYTE *)(v11 - 3);
            unitcost_4 = v13;
            restquantity = v14;
            if ( v14 )
            {
              v15 = Item::Create(*(_WORD *)(v11 - 2));
              if ( !v15 )
                break;
              v16 = 4 * boothslot + 504;
              ItemIcon::SetItem(
                *(ItemIcon **)((char *)&v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                             + v16),
                v15,
                1);
              v17 = *(int *)((char *)&v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                           + v16);
              *(_DWORD *)(v17 + 464) = unitcost;
              *(_DWORD *)(v17 + 468) = unitcost_4;
              v18 = *(int *)((char *)&v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr
                           + v16);
              *(_WORD *)(v18 + 472) = restquantity;
              PrivateStoreInvWin::SetLotText((PrivateStoreInvWin *)v18, restquantity);
              v10 = pdata;
            }
            else
            {
              ItemIcon::SetItem(&v3->m_pkPrivateStoreWin->m_apkInvWin[v12]->baseclass_0, 0, 1);
            }
            v11 += 13;
            ++i;
          }
          while ( i < *((_BYTE *)v10 + 4) );
          if ( g_pkMainChar->m_byMode == 2 )
          {
            Char::SetMode(g_pkMainChar, 1);
            v19 = (PgNet *)v3->m_spZoneNet.m_pObject;
            LOWORD(pdata) = 8200;
            PgNet::AddNetMsg(v19, &pdata, 2);
            v20 = (PgNet *)v3->m_spZoneNet.m_pObject;
            boothslot = 1;
            PgNet::SendNetMsg(v20, &boothslot, 1);
          }
        }
      }
      else
      {
        v7 = TextData::Get(0xEDFC2259u);
        GameFrameWork::AddSysMsg(v3, v7);
      }
    }
  }
  else
  {
    if ( !(_S4_0 & 1) )
    {
      _S4_0 |= 1u;
      unCheckTimer_0 = Timer::ms_fCurTime;
    }
    if ( unCheckTimer_0 + 1000.0 < Timer::ms_fCurTime )
    {
      unCheckTimer_0 = Timer::ms_fCurTime;
      if ( 2651 == *(_WORD *)pvData )
      {
        v5 = TextData2::Get(0x3D836EA9u);
        GameFrameWork::AddSysMsg(v3, v5);
      }
    }
  }
  return iRevBytes;
}
// A7C518: using guessed type bool InventoryWin__ms_bBuyPrivateStoreActionReady;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (004AE0E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  int result; // eax@2
  MarketSearchWin *v6; // ecx@3

  v3 = this;
  CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 4));
  if ( *(_WORD *)pvData == 12744 )
  {
    v6 = v3->m_pkMarketSearchWin;
    if ( v6 )
      MarketSearchWin::SetListItems(v6, (PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *)pvData);
    result = iRevBytes;
  }
  else
  {
    v4 = TextData3::Get(0xE40B203Cu);
    GameFrameWork::AddSysMsg(v3, v4);
    result = iRevBytes;
  }
  return result;
}

//----- (004AE140) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_SEARCH_BOOTH_CLOSED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  MarketSearchWin *v4; // ecx@1
  char *v5; // eax@3

  v3 = this;
  v4 = this->m_pkMarketSearchWin;
  if ( v4 && MarketSearchWin::IsFindBooth(v4, *(_WORD *)pvData) )
  {
    MarketSearchWin::CloseSearchingMsgBox(v3->m_pkMarketSearchWin);
    v5 = TextData3::Get(0x4A9A67AFu);
    GameFrameWork::AddSysMsg(v3, v5);
  }
  return iRevBytes;
}

//----- (004AE190) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CT_SET_CURRENT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // edi@1
  Char *v5; // eax@2
  NiGeometry *v6; // ecx@2
  unsigned int v7; // edx@6
  int v8; // ecx@7
  CharInfoWin *v9; // ecx@11
  __int16 v10; // ax@12
  char v11; // dl@12
  void *v12; // eax@14
  char v13; // dl@14
  const char *v14; // ebx@14
  NiGeometry *v15; // esi@16
  unsigned int v16; // eax@16
  char *v17; // ecx@17
  CharInfoWin *v18; // eax@26
  CharInfoWin *v19; // eax@28
  CharTitleWin *v20; // eax@29
  char v22; // bl@31
  char *v23; // eax@36
  char *v24; // eax@38
  unsigned int v25; // [sp-4h] [bp-1Ch]@33
  char v26; // [sp+Ch] [bp-Ch]@14
  GameFrameWork *v27; // [sp+10h] [bp-8h]@1
  const char *m_name; // [sp+14h] [bp-4h]@12

  v3 = *((_WORD *)pvData + 2);
  v4 = this;
  v27 = this;
  if ( v3 != 2561 )
  {
    v22 = 0;
    if ( v3 != 2563 )
      goto LABEL_37;
    if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() )
    {
      v25 = 895035253;
    }
    else
    {
      if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() )
        goto LABEL_37;
      v25 = 1078991129;
    }
    v22 = 1;
    v23 = TextData::Get(v25);
    GameFrameWork::AddSysMsg(v4, v23);
LABEL_37:
    if ( *((_WORD *)pvData + 2) == 2564 )
    {
      v24 = TextData2::Get(0xBD31174Eu);
    }
    else
    {
      if ( v22 )
        return iRevBytes;
      v24 = TextData::Get(0xE60FBF0Fu);
    }
    GameFrameWork::AddSysMsg(v4, v24);
    return iRevBytes;
  }
  v5 = g_pkMainChar;
  v6 = 0;
  if ( g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6] )
  {
    do
    {
      if ( (*((_BYTE *)&v5[1].baseclass_0.vfptr + 2 * (_DWORD)v6 + 1) & 0xC0) == -64 )
      {
        *((_BYTE *)&v5[1].baseclass_0.vfptr + 2 * (_DWORD)v6 + 1) = *((_BYTE *)&v5[1].baseclass_0.vfptr
                                                                    + 2 * (_DWORD)v6
                                                                    + 1) & 0x3F | 0x80;
        v5 = g_pkMainChar;
      }
      v6 = (NiGeometry *)((char *)v6 + 1);
    }
    while ( v6 < v5[1].m_kCharShape.m_apkLodGeom[6] );
  }
  v7 = 0;
  if ( v5[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[0].dwEffectIndex[1] )
  {
    v8 = 0;
    do
    {
      if ( *((_BYTE *)&v5[1].m_kCharShape.m_apkLodGeom[8] + v8) == 3 )
      {
        *((_BYTE *)&v5[1].m_kCharShape.m_apkLodGeom[8] + v8) = 2;
        v5 = g_pkMainChar;
      }
      ++v7;
      v8 += 6;
    }
    while ( v7 < v5[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[0].dwEffectIndex[1] );
  }
  v5->m_uiCurrCharTitleType = *(_BYTE *)pvData;
  v9 = v4->m_pkCharInfoWin;
  if ( v9 )
  {
    v10 = *((_WORD *)pvData + 1);
    BYTE1(m_name) = *((_BYTE *)pvData + 1);
    v11 = *(_BYTE *)pvData;
    HIWORD(m_name) = v10;
    LOBYTE(m_name) = v11;
    CharInfoWin::SetCharTitleCurrentInfo(v9, (CHARTITLE_BRIEFINFO *)&m_name);
  }
  if ( *(_BYTE *)pvData != 10 )
  {
    v12 = (void *)CCharacterTitleData::GetTitleString(&g_characterTitleData, *(_BYTE *)pvData, *((_BYTE *)pvData + 1));
    v13 = *(_BYTE *)pvData;
    v14 = (const char *)v12;
    m_name = (const char *)v12;
    v26 = v13;
    if ( !v13 )
    {
      BYTE1(g_pkMainChar[1].baseclass_0.vfptr) |= 0xC0u;
      Char::SetCharTitleUse(g_pkMainChar, 0);
      Char::SetCharTitleName(g_pkMainChar, &cName);
      goto LABEL_25;
    }
    v15 = g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6];
    v16 = 0;
    if ( !v15 )
      goto LABEL_24;
    v17 = (char *)&g_pkMainChar[1].baseclass_0.vfptr + 1;
    while ( 1 )
    {
      if ( *(v17 - 1) == v13 )
      {
        if ( (*v17 & 0x3F) == *((_BYTE *)pvData + 1) )
        {
          *((_BYTE *)&g_pkMainChar[1].baseclass_0.vfptr + 2 * v16 + 1) |= 0xC0u;
          v14 = m_name;
          Char::SetCharTitleName(g_pkMainChar, m_name);
          Char::SetCharTitleUse(g_pkMainChar, 1);
LABEL_24:
          v4 = v27;
LABEL_25:
          if ( v14 )
          {
            v18 = v4->m_pkCharInfoWin;
            if ( v18 )
              ((void (__stdcall *)(const char *))v18->m_pkSubNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v14);
            break;
          }
          return iRevBytes;
        }
        v13 = v26;
      }
      ++v16;
      v17 += 2;
      if ( v16 >= (unsigned int)v15 )
      {
        v14 = m_name;
        goto LABEL_24;
      }
    }
  }
  v19 = v4->m_pkCharInfoWin;
  if ( !v19 || (v20 = v19->m_pkCharTitleWin) == 0 )
    return iRevBytes;
  CharTitleWin::UpdateViewList(v20);
  return iRevBytes;
}

//----- (004AE3F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CT_SET_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // ecx@1
  char *v5; // ecx@1
  char *v6; // eax@1
  CharInfoWin *v7; // esi@1
  CharTitleWin *v8; // ecx@2

  v3 = this;
  *((_BYTE *)&g_pkMainChar[1].baseclass_0.vfptr + 2 * (unsigned int)g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6]) = *(_BYTE *)pvData;
  v4 = (char *)&g_pkMainChar[1].baseclass_0.vfptr + 2 * (unsigned int)g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6] + 1;
  *v4 ^= (*v4 ^ *((_BYTE *)pvData + 1)) & 0x3F;
  v5 = (char *)&g_pkMainChar[1].baseclass_0.vfptr + 2 * (unsigned int)g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6] + 1;
  *v5 = *((_BYTE *)pvData + 1) ^ (*v5 ^ *((_BYTE *)pvData + 1)) & 0x3F;
  CCharacterTitleData::GetTitleString(&g_characterTitleData, *(_BYTE *)pvData, *((_BYTE *)pvData + 1) & 0x3F);
  v6 = TextData::Get(0x3564277Au);
  GameFrameWork::VaAddSysMsg(v3, v6);
  GameFrameWork::OpenPlayGuideWin(v3, BIL_NICKNAME_1);
  ++g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6];
  v7 = v3->m_pkCharInfoWin;
  if ( v7 )
  {
    v8 = v7->m_pkCharTitleWin;
    if ( v8 )
      CharTitleWin::UpdateViewList(v8);
  }
  return iRevBytes;
}

//----- (004AE4C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcUserPacketToZone(GameFrameWork *this, DirectUserMsgBody_SendPacket *pkPacketBody)
{
  GameFrameWork *v2; // edi@1
  char *v3; // eax@2
  DirectUserMsgBody_SendPacket *v4; // esi@3
  PgNet *v5; // ecx@3
  bool v6; // zf@3
  void *v7; // [sp-Ch] [bp-10h]@3
  int v8; // [sp-8h] [bp-Ch]@3

  v2 = this;
  if ( nowState )
  {
    v3 = TextData::Get(0x82F4CCD8u);
    GameFrameWork::AddSysMsg(v2, v3);
  }
  else
  {
    v4 = pkPacketBody;
    v5 = (PgNet *)this->m_spZoneNet.m_pObject;
    v6 = pkPacketBody->pvPacket == 0;
    LOWORD(pkPacketBody) = (pkPacketBody->wDepartment << 10) | pkPacketBody->wCommand & 0x3FF;
    v8 = 2;
    v7 = &pkPacketBody;
    if ( !v6 )
    {
      PgNet::AddNetMsg(v5, &pkPacketBody, 2);
      v8 = v4->uiPacketSize;
      v5 = (PgNet *)v2->m_spZoneNet.m_pObject;
      v7 = v4->pvPacket;
    }
    PgNet::SendNetMsg(v5, v7, v8);
  }
}

//----- (004AE540) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_DEADMENU_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  unsigned int v4; // eax@1
  char *v5; // eax@5

  v3 = this;
  OutputDebugStringA("CHAR_DEAD_MENU_OPEN!!!!\n");
  ReviveMenuWin::SetAutoRevieTimeSec(v3->m_pkReviveMenuWin, *(_BYTE *)pvData);
  ReviveMenuWin::SetDeadTime(v3->m_pkReviveMenuWin, Timer::ms_fCurTime);
  RebirthMenuWin::SetAutoRevieTime(v3->m_pkRebirthMenuWin, *(_DWORD *)pvData / 0x3Cu);
  RebirthMenuWin::SetDeadTime(v3->m_pkRebirthMenuWin, Timer::ms_fCurTime);
  ReviveMenuWin::SetPriority(v3->m_pkReviveMenuWin, *((_BYTE *)pvData + 4));
  AbStateInfectee::ClearAbState(&g_pkMainChar->baseclass_0, 0);
  ReviveMenuWin::EnableBtns(v3->m_pkReviveMenuWin, 0, 1);
  v4 = InventoryWin::GetFuncItemCount(v3->m_pkInventoryWin, ITEMFUNC_JUSTREVIVAL, 1);
  ReviveMenuWin::SetReviveBtn(v3->m_pkReviveMenuWin, v4);
  InventoryWin::LockAllItem(v3->m_pkInventoryWin);
  InventoryWin::LockAllEquipItem(v3->m_pkInventoryWin);
  if ( *(_DWORD *)((char *)pvData + 5) == 1 )
    GameFrameWork::OnOpenRebirthMenuWin(v3, 1);
  else
    GameFrameWork::OnOpenReviveMenuWin(v3, 1);
  v3->m_kSkillCasting.eState = 0;
  GameFrameWork::OpenPlayGuideWin(v3, BIL_REVIVAL_1);
  if ( User::Lv(&g_kUser) <= 9 )
  {
    v5 = TextData2::Get(0xD5562A42u);
    GameFrameWork::AddSysMsg(v3, v5);
  }
  if ( GameFrameWork::IsPlayCardOpen(v3) == 1 )
    GameFrameWork::OpenCollectCardWin(v3, 0, 0, 0, 0, 0);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AE680) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_REVIVESAME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return GameFrameWork::On_NC_MAP_LINKSAME_CMD(this, iRevBytes, pvData);
}

//----- (004AE690) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_REGENMOB_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Name3 *v4; // eax@1
  int v5; // edi@3
  int v6; // ebx@3
  int v7; // eax@5
  int v8; // eax@6
  Char *v9; // edi@8
  NiPoint3 *v10; // eax@9
  int v11; // eax@10
  _BYTE v12[12]; // ST10_12@10
  _BYTE v13[12]; // ST04_12@10
  Char *v14; // eax@13
  NiAVObject *v15; // eax@14
  GameFrameWork *thisa; // [sp+18h] [bp-4h]@1

  v3 = this;
  thisa = this;
  CharMgr::AddMob(&g_kCharMgr, (PROTO_NC_BRIEFINFO_REGENMOB_CMD *)pvData);
  MiniMapWin::AddNPC(v3->m_pkMiniMapWin, (PROTO_NC_BRIEFINFO_REGENMOB_CMD *)pvData);
  v4 = User::GetMainCharLoginMapName(&g_kUser);
  if ( MapInfoTab::GetByMapName(v4)->KingdomMap == 1 )
    MiniMapWin::Add_KQ_MOB(v3->m_pkMiniMapWin, (PROTO_NC_BRIEFINFO_REGENMOB_CMD *)pvData);
  v5 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v6 = *(_WORD *)((char *)pvData + 3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          *(_WORD *)((char *)pvData + 3)) )
  {
    if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) )
    {
      v7 = *(_DWORD *)(v5 + 196) + 4 * v6;
      if ( *(_DWORD *)v7 )
      {
        v8 = *(_DWORD *)v7;
        if ( v8 )
        {
          if ( !*(_BYTE *)(v8 + 82) )
          {
            v9 = GameFrameWork::GetCharByHandle(thisa, *(_WORD *)pvData, 7, 8);
            if ( v9 )
            {
              v10 = (NiPoint3 *)((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[6].Deaffect)(v9);
              if ( MainChar::IsView((MainChar *)g_pkMainChar, v10) )
              {
                v11 = ((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[6].Deaffect)(v9);
                *(_DWORD *)v12 = (_DWORD)NiPoint3::UNIT_Y.x;
                *(_QWORD *)&v12[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
                *(_DWORD *)v13 = *(_DWORD *)v11;
                *(_QWORD *)&v13[4] = *(_QWORD *)(v11 + 4);
                EffectMgr::CreateEffect(
                  &g_kEffectMgr,
                  "Regen",
                  *(NiPoint3 *)v13,
                  *(NiPoint3 *)v12,
                  Timer::ms_fCurTime,
                  1.0);
              }
            }
          }
        }
      }
    }
  }
  if ( *((_BYTE *)pvData + 150) != 2 )
    MiniMapWin::AddKQTeamMark(thisa->m_pkMiniMapWin, *(_WORD *)pvData);
  v14 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v14 )
  {
    v15 = (NiAVObject *)v14->m_spScene.m_pObject;
    if ( v15 )
      NiAVObject::Update(v15, 0.0, 1);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (004AE810) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_MOB_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  unsigned __int16 *v4; // esi@2
  int v5; // edi@2
  Char *v6; // eax@3
  NiAVObject *v7; // eax@4

  v3 = this;
  CharMgr::AddMob(&g_kCharMgr, (PROTO_NC_BRIEFINFO_MOB_CMD *)pvData);
  MiniMapWin::AddNPC(v3->m_pkMiniMapWin, (PROTO_NC_BRIEFINFO_MOB_CMD *)pvData);
  if ( *(_BYTE *)pvData )
  {
    v4 = (unsigned __int16 *)((char *)pvData + 1);
    v5 = *(_BYTE *)pvData;
    do
    {
      v6 = CharMgr::GetChar(&g_kCharMgr, *v4);
      if ( v6 )
      {
        v7 = (NiAVObject *)v6->m_spScene.m_pObject;
        if ( v7 )
          NiAVObject::Update(v7, 0.0, 1);
      }
      v4 += 76;
      --v5;
    }
    while ( v5 );
  }
  return iRevBytes;
}

//----- (004AE880) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SOMEONEWHISPER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  SHINE_ITEM_STRUCT *v4; // ebx@2
  int v5; // ecx@4
  int v6; // edx@4
  int v7; // eax@4
  ChatBlockListWin *v8; // eax@4
  int v9; // ecx@5
  int v10; // edx@5
  int v11; // eax@5
  ChatBlockListWin *v12; // eax@5
  PROTO_CHAT_RESTRICT_INFO *v13; // eax@5
  int v14; // ecx@9
  bool v15; // zf@9
  _BYTE v16[20]; // ST00_20@10
  _BYTE v17[20]; // ST00_20@11
  _BYTE v18[20]; // ST04_20@12
  int v19; // edx@13
  int v20; // eax@13
  int v21; // ecx@13
  int v22; // eax@13
  ChatDisplayWin2 *v23; // ecx@13
  signed int v25; // [sp+Ch] [bp-BCh]@2
  char acStr[129]; // [sp+10h] [bp-B8h]@9
  char acReceiveName[21]; // [sp+94h] [bp-34h]@12
  char acName[21]; // [sp+ACh] [bp-1Ch]@4
  unsigned int v29; // [sp+C4h] [bp-4h]@1
  int v30; // [sp+C8h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = this;
  if ( (signed int)*(_BYTE *)pvData > 0 )
  {
    v4 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 22) + 23);
    v25 = *(_BYTE *)pvData;
    do
    {
      GameFrameWork::AddSChatItemLink(v3, 8, v4);
      ++v4;
      --v25;
    }
    while ( v25 );
  }
  v5 = *(_DWORD *)((char *)pvData + 9);
  v6 = *(_DWORD *)((char *)pvData + 1);
  *(_DWORD *)&acName[4] = *(_DWORD *)((char *)pvData + 5);
  v7 = *(_DWORD *)((char *)pvData + 17);
  *(_DWORD *)&acName[8] = v5;
  *(_DWORD *)&acName[16] = v7;
  v8 = v3->m_pkChatBlockListWin;
  *(_DWORD *)acName = v6;
  *(_DWORD *)&acName[12] = *(_DWORD *)((char *)pvData + 13);
  if ( !CChatRestrict::Get(&v8->m_RestrictList, (Name5 *)acName)
    || (v9 = *(_DWORD *)((char *)pvData + 9),
        v10 = *(_DWORD *)((char *)pvData + 1),
        *(_DWORD *)&acName[4] = *(_DWORD *)((char *)pvData + 5),
        v11 = *(_DWORD *)((char *)pvData + 17),
        *(_DWORD *)&acName[8] = v9,
        *(_DWORD *)&acName[16] = v11,
        v12 = v3->m_pkChatBlockListWin,
        *(_DWORD *)acName = v10,
        *(_DWORD *)&acName[12] = *(_DWORD *)((char *)pvData + 13),
        (v13 = CChatRestrict::Get(&v12->m_RestrictList, (Name5 *)acName)) != 0)
    && v13->bIsGM == 1 )
  {
    if ( *((_BYTE *)pvData + 22) > 0x80u )
      *((_BYTE *)pvData + 22) = -128;
    strncpy(acStr, (char *)pvData + 23, *((_BYTE *)pvData + 22));
    v14 = *(_DWORD *)((char *)pvData + 1);
    v15 = (*((_BYTE *)pvData + 21) & 1) == 0;
    acStr[*((_BYTE *)pvData + 22)] = 0;
    if ( v15 )
    {
      *(_DWORD *)v17 = v14;
      *(_QWORD *)&v17[4] = *(_QWORD *)((char *)pvData + 5);
      *(_QWORD *)&v17[12] = *(_QWORD *)((char *)pvData + 13);
      GameFrameWork::AddWhisperChat(v3, *(Name5 *)v17, acStr);
    }
    else
    {
      *(_DWORD *)v16 = v14;
      *(_QWORD *)&v16[4] = *(_QWORD *)((char *)pvData + 5);
      *(_QWORD *)&v16[12] = *(_QWORD *)((char *)pvData + 13);
      GameFrameWork::AddGMWhisperChat(v3, *(Name5 *)v16, acStr);
    }
    *(_DWORD *)v18 = *(_DWORD *)((char *)pvData + 1);
    *(_QWORD *)&v18[4] = *(_QWORD *)((char *)pvData + 5);
    *(_QWORD *)&v18[12] = *(_QWORD *)((char *)pvData + 13);
    GameFrameWork::AddWhisperList(v3, *(Name5 *)v18);
    *(_DWORD *)&acReceiveName[8] = *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8];
    *(_QWORD *)acReceiveName = *(_QWORD *)&GameFrameWork::m_kWhisperCharID;
    *(_QWORD *)&acReceiveName[12] = *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[12];
    acReceiveName[20] = 0;
    GameFrameWork::SmartWhisper::MarkAsRecentlyUsed(&v3->m_kSmartWhisper, acReceiveName);
    if ( !ChatDisplayWin2::IsChatStart(v3->m_pkChatDisplayWin) )
    {
      v19 = *(_DWORD *)((char *)pvData + 9);
      v20 = *(_DWORD *)((char *)pvData + 1);
      *(_DWORD *)&acName[4] = *(_DWORD *)((char *)pvData + 5);
      v21 = *(_DWORD *)((char *)pvData + 17);
      *(_DWORD *)&acName[8] = v19;
      *(_DWORD *)acName = v20;
      v22 = *(_DWORD *)((char *)pvData + 13);
      *(_DWORD *)&acName[16] = v21;
      v23 = v3->m_pkChatDisplayWin;
      *(_DWORD *)&acName[12] = v22;
      acName[20] = 0;
      ChatDisplayWin2::SetChatNameEditText(v23, acName);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004AEAA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_WHISPERFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@4
  char *v6; // eax@7
  unsigned int v7; // [sp-4h] [bp-8h]@5

  v3 = this;
  if ( *(_WORD *)pvData == 3945 )
  {
    v7 = 1287158389;
    goto LABEL_7;
  }
  if ( *(_WORD *)pvData == 3946 )
  {
    v7 = -1950122029;
LABEL_7:
    v6 = TextData::Get(v7);
    GameFrameWork::AddSysMsg(v3, v6);
    return iRevBytes;
  }
  if ( *(_WORD *)pvData == 3948 )
  {
    v4 = TextData2::Get(0xC10ADD20u);
    GameFrameWork::AddSysMsg(v3, v4);
    return iRevBytes;
  }
  return iRevBytes;
}

//----- (004AEB00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_PARTYCHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@5
  unsigned int v6; // [sp-4h] [bp-8h]@3

  v3 = this;
  if ( *(_WORD *)pvData != 1984 )
  {
    if ( *(_WORD *)pvData == 1985 )
      v6 = -1560227629;
    else
      v6 = -2002217335;
    v4 = TextData::Get(v6);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004AEB50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_GUILD_CHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@5
  unsigned int v6; // [sp-4h] [bp-8h]@3

  v3 = this;
  if ( *(_WORD *)pvData != 3371 )
  {
    if ( *(_WORD *)pvData == 3372 )
      v6 = 1988193177;
    else
      v6 = -757129437;
    v4 = TextData::Get(v6);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004AEBA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_GUILD_ACADEMY_CHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@6
  unsigned int v7; // [sp-4h] [bp-8h]@3

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 != 6136 )
  {
    switch ( v3 )
    {
      case 6137:
      case 6138:
        v7 = -1293162460;
        goto LABEL_6;
      case 6139:
        v7 = -822552364;
        goto LABEL_6;
      case 6140:
        v7 = 946227955;
LABEL_6:
        v5 = TextData::Get(v7);
        GameFrameWork::AddSysMsg(v4, v5);
        break;
      default:
        return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004AEC10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_PITCHTENT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@4
  char *v5; // eax@5
  char *v6; // eax@6

  v3 = this;
  switch ( *(_WORD *)pvData )
  {
    case 0xA81:
      if ( this->m_kCharMover.m_bAutoRun )
        KeyboardMoveProcess::SetAutoRun(&this->m_kCharMover, 0);
      GameFrameWork::Stick(v3, 0, 0);
      g_pkMainChar->m_byMiniHouseSkinID = Inventory::GetMiniHouseSkin(&g_kInventory);
      GameFrameWork::ChangeCampMode(v3, 1, 4);
      result = iRevBytes;
      break;
    case 0xA83:
      Char::SetMode(g_pkMainChar, 1);
      v5 = TextData::Get(0x3B582498u);
      GameFrameWork::AddSysMsg(v3, v5);
      result = iRevBytes;
      break;
    case 0xA86:
      Char::SetMode(g_pkMainChar, 1);
      v6 = TextData2::Get(0x786078BDu);
      GameFrameWork::AddSysMsg(v3, v6);
      result = iRevBytes;
      break;
    default:
      Char::SetMode(g_pkMainChar, 1);
      result = iRevBytes;
      break;
  }
  return result;
}

//----- (004AED00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_RIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // eax@2
  _BYTE v5[12]; // ST10_12@2
  _BYTE v6[12]; // ST04_12@2
  char *v7; // eax@3

  v3 = this;
  if ( g_pkMainChar )
  {
    Char::RidePet(g_pkMainChar, *(_WORD *)pvData);
    Char::SetMode(g_pkMainChar, 6);
    v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    *(_DWORD *)v5 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v5[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v6 = *(_DWORD *)v4;
    *(_QWORD *)&v6[4] = *(_QWORD *)(v4 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_St01", *(NiPoint3 *)v6, *(NiPoint3 *)v5, Timer::ms_fCurTime, 1.0);
  }
  GameFrameWork::ChangeRun(v3);
  GameFrameWork::OpenRidePetWin(v3, *(_WORD *)pvData);
  v7 = TextData::Get(0x43482579u);
  GameFrameWork::AddSysMsg(v3, v7);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AEDC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_RIDE_HUNGRY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  RidePetWin *v4; // ecx@1
  char *v5; // eax@4

  v3 = this;
  v4 = this->m_pkRidePetWin;
  if ( v4 )
    RidePetWin::SetHungryPoint(v4, *(_WORD *)pvData);
  if ( !*(_WORD *)pvData )
  {
    GameFrameWork::ChangeWalk(v3);
    v5 = TextData::Get(0x81A4DDE2u);
    GameFrameWork::AddSysMsg(v3, v5);
  }
  return iRevBytes;
}

//----- (004AEE10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_RUN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@0
  int result; // eax@1
  int v5; // edx@2
  float v6; // ST04_4@7
  float v7; // ST00_4@7
  float v8; // ST08_4@8
  float v9; // ST04_4@8
  NiPoint3 kPos; // [sp+10h] [bp-Ch]@7

  result = iRevBytes;
  if ( iRevBytes == 8 )
  {
    v5 = g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount;
    if ( v5 > 0 )
      goto LABEL_15;
    if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount <= 0 )
      return result;
    if ( v5 > 0 )
    {
LABEL_15:
      if ( Char::IsActGathering(g_pkMainChar) )
        ITask::DirectDispatchAll(32, 0);
    }
    v7 = (double)*(unsigned int *)pvData;
    v6 = (double)*((unsigned int *)pvData + 1);
    if ( World::GetAdvGroundPos(&g_kWorld, v7, v6, &kPos) )
    {
      v9 = (double)*(unsigned int *)pvData;
      v8 = (double)*((unsigned int *)pvData + 1);
      if ( !World::IsBlock(&g_kWorld, v9, v8) )
      {
        if ( ((int (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[7].Affect)(v3) != 1 )
          ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(1);
        dword_B30C38->m_uFlags |= 1u;
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[7].DeleteAbStateByAbstateIndex)(
          (_DWORD)kPos.x,
          LODWORD(kPos.y),
          LODWORD(kPos.z));
        ((void (__cdecl *)(NiPoint3 *, _DWORD, NiColor *, signed int))g_pkMainChar->baseclass_0.vfptr[7].SetAbStateProperty)(
          &kPos,
          0,
          &Char::INVALIDPOINT3,
          1);
      }
    }
    result = 8;
  }
  return result;
}
// 4AEE10: could not find valid save-restore pair for esi

//----- (004AEF40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_REINFORCE_WALK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  float v3; // ST08_4@3
  float v4; // ST04_4@3
  NiPoint3 kPos; // [sp+10h] [bp-Ch]@3

  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].Affect)() )
    ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].Deaffect)(0);
  v4 = (double)*(unsigned int *)pvData;
  v3 = (double)*((unsigned int *)pvData + 1);
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  dword_B30C38->m_uFlags |= 1u;
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[7].DeleteAbStateByAbstateIndex)();
  ((void (__stdcall *)(NiPoint3 *, _DWORD, NiColor *, signed int))g_pkMainChar->baseclass_0.vfptr[7].SetAbStateProperty)(
    &kPos,
    0,
    &Char::INVALIDPOINT3,
    1);
  return iRevBytes;
}

//----- (004AEFF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_LEVELUP_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  void *v4; // eax@1
  void *v5; // ebx@1
  bool v6; // zf@3
  Effect *v7; // eax@15
  Effect *v8; // eax@18
  int v9; // eax@22
  Item *v10; // eax@23
  ItemInfo *v11; // esi@24
  unsigned int v12; // ST20_4@27
  unsigned int v13; // eax@27
  PgNet *v14; // ecx@27
  CQuest *v15; // eax@28
  QuestNewsWin *v16; // ecx@30
  MapNavigator *v17; // esi@35
  int v18; // ebx@36
  GTInformWin *v19; // esi@42
  D3DXCOLOR *v20; // eax@43
  D3DXCOLOR v21; // ST0C_16@43
  char *v22; // eax@43
  CQuestWin2 *v23; // ecx@44
  char *v24; // eax@48
  BasicInfoLinkType v25; // eax@49
  D3DXCOLOR result; // [sp+24h] [bp-30h]@43
  int dwDummy; // [sp+34h] [bp-20h]@17
  char acLv[4]; // [sp+38h] [bp-1Ch]@49
  ITEM_INVEN kInv; // [sp+3Ch] [bp-18h]@21
  int pdata; // [sp+40h] [bp-14h]@1
  char v32; // [sp+47h] [bp-Dh]@27
  int v33; // [sp+50h] [bp-4h]@1

  v3 = this;
  v4 = operator new(0xFCu);
  pdata = (int)v4;
  v5 = pvData;
  v33 = 0;
  if ( v4 )
    CharDeadEvent_LevelUp::CharDeadEvent_LevelUp(
      (CharDeadEvent_LevelUp *)v4,
      &v3->baseclass_0,
      (PROTO_NC_BAT_LEVELUP_CMD *)pvData);
  v6 = *(_BYTE *)pvData == 120;
  v33 = -1;
  if ( v6
    && (Char::GetClass(g_pkMainChar) == 4
     || Char::GetClass(g_pkMainChar) == 5
     || Char::GetClass(g_pkMainChar) == 9
     || Char::GetClass(g_pkMainChar) == 10
     || Char::GetClass(g_pkMainChar) == 14
     || Char::GetClass(g_pkMainChar) == 15
     || Char::GetClass(g_pkMainChar) == 19
     || Char::GetClass(g_pkMainChar) == 20
     || Char::GetClass(g_pkMainChar) == 24
     || Char::GetClass(g_pkMainChar) == 25
     || Char::GetClass(g_pkMainChar) == 27) )
  {
    v7 = EffectMgr::FindAuraEffect(&g_kEffectMgr, g_pkMainChar->m_kHandle);
    if ( v7 )
      EffectMgr::RemoveEffect(&g_kEffectMgr, v7);
    if ( EffectMgr::CreateAttachEffect(
           &g_kEffectMgr,
           (unsigned int *)&dwDummy,
           "Aura120",
           g_pkMainChar,
           None,
           Timer::ms_fCurTime,
           1,
           1,
           0,
           1) == 1 )
    {
      v8 = EffectMgr::FindAuraEffect(&g_kEffectMgr, g_pkMainChar->m_kHandle);
      if ( v8 )
      {
        if ( g_pkMainChar->m_kCharShape.m_kEquip.Equ_CosEff != -1 )
          v8->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v8, 0);
      }
    }
  }
  User::SetLv(&g_kUser, *(_BYTE *)pvData);
  if ( Inventory::FindMysteryVault(&g_kInventory, &kInv) )
  {
    v9 = kInv.Inven & 0x3FF;
    if ( (unsigned int)v9 < 0xC0 )
    {
      v10 = g_kInventory.m_aspInv[v9].m_pObject;
      if ( v10 )
      {
        v11 = v10->m_pkInfo;
        if ( v11 )
        {
          if ( (unsigned __int8)((int (*)(void))v3->m_pkMysteryVaultWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
            GameFrameWork::CloseMysteryVaultWin(v3);
          v12 = v11->DemandLv;
          v13 = User::Lv(&g_kUser);
          MysteryVaultWin::OnReachTheLevel(v3->m_pkMysteryVaultWin, v13, v12);
          GameFrameWork::OpenMysteryVaultWin(v3);
          LOWORD(pdata) = 16421;
          v14 = (PgNet *)v3->m_spZoneNet.m_pObject;
          v32 = 1;
          PgNet::AddNetMsg(v14, &pdata, 2);
          PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &v32, 1);
        }
      }
    }
  }
  v15 = QuestDataMgr::GetQuest();
  if ( !v15->vfptr->QuestPlayer_LevelChange(v15, *(_BYTE *)pvData) )
    QuestDataMgr::m_bUpdate = 1;
  v16 = v3->m_pkQuestNewsWin;
  if ( v16 && QuestNewsWin::QuestPlayer_LevelChange(v16, *(_BYTE *)pvData) )
  {
    EffectMgr::CreatePigeonEffect(&g_kEffectMgr, g_pkMainChar, Timer::ms_fCurTime);
    v3->m_pkQuestNewsWin->m_ePigeonState = 1;
  }
  if ( !ChargedItemList::IsEffecting(EE_AUTOPATHFIND) && User::Lv(&g_kUser) == 61 )
  {
    v17 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&pdata)->m_pObject;
    if ( pdata )
    {
      v18 = pdata;
      if ( !InterlockedDecrement((volatile LONG *)(pdata + 4)) && v18 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
      v5 = pvData;
    }
    if ( v17 )
    {
      if ( v17->m_bIsWorking )
      {
        v17->m_bIsWorking = 0;
        v19 = v3->m_pkAutoRunMsgWin;
        if ( v19 )
        {
          GTInformWin::Clear(v3->m_pkAutoRunMsgWin);
          v20 = Color::GetDxColor(&result, -1, -112, 0, -1);
          *(_QWORD *)&v21.r = *(_QWORD *)&v20->r;
          *(_QWORD *)&v21.b = *(_QWORD *)&v20->b;
          v22 = TextData2::Get(0x3C517589u);
          GTInformWin::AddText(v19, v22, COERCE_D3DXCOLOR(v21.r), 0, 3.0);
        }
      }
    }
  }
  v23 = v3->m_pkQuestWin;
  if ( v23 )
    CQuestWin2::LevelChange(v23, *(_BYTE *)v5);
  if ( v3->m_pkGuildWarInformWin && *(_BYTE *)v5 == 20 )
  {
    v24 = TextData::Get(0x6BABCEC5u);
    GuildWarInformWin::SetText(v3->m_pkGuildWarInformWin, v24);
  }
  _itoa(*(_BYTE *)v5, acLv, 10);
  v25 = BasicInfoLinkTab::GetbyCType(BIL_C_LV_UP, acLv);
  if ( v25 )
    GameFrameWork::OpenPlayGuideWin(v3, v25);
  return iRevBytes;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004AF3F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_EXPLOST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // eax@1
  char acStr[256]; // [sp+8h] [bp-104h]@1
  unsigned int v7; // [sp+108h] [bp-4h]@1
  int v8; // [sp+10Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  v4 = TextData::Get(0xAB03F4E8u);
  sprintf(acStr, v4);
  GameFrameWork::AddSysMsg(v3, acStr);
  User::SubCurExp(&g_kUser, *(_DWORD *)pvData);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004AF460) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_CAST_FAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  CastingProgressWin *v4; // ecx@1
  char *v5; // eax@18
  int result; // eax@25
  unsigned int v7; // [sp-4h] [bp-Ch]@4

  v3 = this;
  v4 = this->m_pkCastingProgressBar;
  v3->m_kSkillCasting.eState = 0;
  CastingProgressWin::CastingFail(v4);
  OutputDebugStringA("On_NC_BAT_SKILLBASH_CAST_FAIL_ACK\n");
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)() )
    Char::CancelSkillAction(g_pkMainChar, 0);
  switch ( *(_WORD *)pvData )
  {
    case 0xFC0:
      v7 = 389548321;
      goto LABEL_24;
    case 0xFC1:
      v7 = 630474109;
      goto LABEL_24;
    case 0xFC2:
      v7 = 629886075;
      goto LABEL_24;
    case 0xFC3:
      v7 = 591201640;
      goto LABEL_24;
    case 0xFC4:
      v7 = -850589155;
      goto LABEL_24;
    case 0xFC5:
      v7 = 474745207;
      goto LABEL_24;
    case 0xFC6:
      v7 = 507315571;
      goto LABEL_24;
    case 0xFC7:
      v7 = -907426088;
      goto LABEL_24;
    case 0xFC8:
      v7 = -722093020;
      goto LABEL_24;
    case 0xFC9:
      v7 = -2064074280;
      goto LABEL_24;
    case 0xFCA:
      v7 = -850853584;
      goto LABEL_24;
    case 0xFCB:
      v7 = 662462590;
      goto LABEL_24;
    case 0xFCC:
      v7 = 2130554840;
      goto LABEL_24;
    case 0xFCD:
      v7 = -705035220;
      goto LABEL_24;
    case 0xFD0:
      v5 = TextData2::Get(0xCF4DF136u);
      break;
    case 0xFCE:
      v7 = -789381623;
      goto LABEL_24;
    case 0xFCF:
      v7 = -2102609221;
      goto LABEL_24;
    case 0xFD4:
      v5 = TextData2::Get(0xB4B3476u);
      break;
    case 0xFD8:
      v5 = TextData2::Get(0xE561B81u);
      break;
    default:
      v7 = -396479446;
LABEL_24:
      v5 = TextData::Get(v7);
      break;
  }
  GameFrameWork::AddSysMsg(v3, v5);
  result = iRevBytes;
  if ( *(_WORD *)pvData == 4048 )
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) = 1;
  return result;
}

//----- (004AF600) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_CELLCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  GameFrameWork *v4; // edi@1
  Item *v5; // eax@1
  int v6; // ebx@1
  __int16 v7; // ax@1
  int v8; // ebx@2
  Item *v9; // ebx@3
  CQuest *v10; // eax@4
  void *v11; // ecx@4
  CQuestVtbl *v12; // ebx@4
  unsigned int v13; // eax@4
  unsigned __int16 v14; // dx@5
  int v15; // eax@5
  int v16; // ecx@8
  Item *v17; // ebx@9
  GameFrameWork::CellChangeInvPosMode v18; // eax@12
  char v19; // al@18
  signed __int16 v20; // dx@18
  unsigned int v21; // eax@26
  Item *v22; // ebx@26
  unsigned __int16 v23; // ax@29
  CQuest *v24; // eax@32
  CQuestVtbl *v25; // ebx@32
  unsigned __int16 v26; // ST08_2@32
  unsigned int v27; // eax@32
  unsigned int v28; // eax@35
  ItemInfo *v29; // ebx@37
  StorageWin *v30; // ecx@49
  GuildTournamentStorageWin *v31; // eax@55
  GuildAcademyStorageWin *v32; // eax@58
  GuildAcademyItemRewardWin *v33; // eax@60
  GameFrameWork::CellChangeInvPosMode v34; // eax@68
  Item *v35; // ebx@69
  char v36; // al@74
  signed __int16 v37; // cx@74
  GameFrameWork::CellChangeInvPosMode v38; // eax@84
  Item *v39; // ebx@85
  char v40; // al@90
  signed __int16 v41; // dx@90
  Item *v42; // ebx@98
  ShortCutWin *v43; // ecx@98
  ShortCutWin *v44; // ecx@100
  int v45; // ecx@103
  unsigned int v46; // eax@109
  int v48; // [sp-8h] [bp-24h]@110
  Item *v49; // [sp-4h] [bp-20h]@110
  int uiSize; // [sp+Ch] [bp-10h]@1
  Item *v51; // [sp+10h] [bp-Ch]@66
  char *pExchangeItem; // [sp+14h] [bp-8h]@4
  Item *pLocationItem; // [sp+18h] [bp-4h]@4
  Item *pkItem; // [sp+28h] [bp+Ch]@1
  ShortCutWin **pkItema; // [sp+28h] [bp+Ch]@102

  v3 = pvData;
  v4 = this;
  v5 = Item::Create((char *)pvData + 4, (unsigned int *)&uiSize);
  v6 = *((_WORD *)pvData + 1);
  pkItem = v5;
  v7 = (unsigned __int16)v6 >> 10;
  if ( (unsigned __int16)v6 >> 10 == 9 )
  {
    v8 = v6 & 0x3FF;
    if ( (unsigned int)v8 < 0xC0 )
    {
      v9 = g_kInventory.m_aspInv[v8].m_pObject;
      if ( v9 )
      {
        v10 = QuestDataMgr::GetQuest();
        v11 = (void *)v9->m_kStruct.itemid;
        v12 = v10->vfptr;
        pExchangeItem = (char *)v11;
        pLocationItem = (Item *)v10;
        v13 = Inventory::GetItemCnt(&g_kInventory, (unsigned __int16)v11);
        v12->QuestPlayer_DestroyItem((CQuest *)pLocationItem, (unsigned __int16)pExchangeItem, v13);
      }
    }
    v14 = *((_WORD *)v3 + 1);
    v15 = *((_WORD *)v3 + 1) & 0x3FF;
    if ( (unsigned int)v15 < 0xC0 )
      pLocationItem = g_kInventory.m_aspInv[v15].m_pObject;
    else
      pLocationItem = 0;
    v16 = *(_WORD *)v3 & 0x3FF;
    if ( (unsigned int)v16 < 0xC0 )
      v17 = g_kInventory.m_aspInv[v16].m_pObject;
    else
      v17 = 0;
    if ( !((v14 ^ *(_WORD *)v3) & 0x3FF) )
      goto LABEL_116;
    v18 = v4->m_CellChangeInvPosMode;
    if ( !v18 )
    {
      if ( pLocationItem )
      {
        if ( v17 )
        {
          if ( (unsigned __int8)((int (*)(void))pLocationItem->baseclass_0.vfptr[1].__vecDelDtor)() == 24
            && (unsigned __int8)((int (__thiscall *)(Item *))v17->baseclass_0.vfptr[1].__vecDelDtor)(v17) == 24 )
          {
            v4->m_CellChangeInvPosMode = 1;
            ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, *(_WORD *)v3 & 0x3FF, *((_WORD *)v3 + 1) & 0x3FF, 0);
            goto LABEL_26;
          }
          v19 = ((int (*)(void))pLocationItem->baseclass_0.vfptr[1].__vecDelDtor)();
          v20 = 1023;
          if ( v19 != 24 )
          {
            v4->m_CellChangeInvPosMode = 3;
            GameFrameWork::LockShortCutWinInvPosItem(v4, *(_WORD *)v3 & 0x3FF);
            goto LABEL_26;
          }
        }
        else
        {
          v20 = 1023;
        }
        v4->m_CellChangeInvPosMode = 2;
        ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, v20 & *(_WORD *)v3, v20 & *((_WORD *)v3 + 1), 1);
        GameFrameWork::LockShortCutWinInvPosItem(v4, *(_WORD *)v3 & 0x3FF);
      }
LABEL_26:
      v21 = *((_WORD *)v3 + 1);
      v22 = pkItem;
      if ( v4->m_pkWingStoneWin->m_bCheckPossibility )
        v4->m_bItemInfoChange = InventoryWin::Change(v4->m_pkInventoryWin, v21 >> 10, pkItem, v21 & 0x3FF);
      else
        InventoryWin::Change(v4->m_pkInventoryWin, v21 >> 10, pkItem, v21 & 0x3FF);
      Inventory::Add(&g_kInventory, (unsigned int)*((_WORD *)v3 + 1) >> 10, pkItem, *((_WORD *)v3 + 1) & 0x3FF);
      v23 = *((_WORD *)v3 + 1);
      if ( !((v23 ^ *(_WORD *)v3) & 0x3FF) && v23 == *(_WORD *)v3 && pkItem )
      {
        v24 = QuestDataMgr::GetQuest();
        v25 = v24->vfptr;
        v26 = pkItem->m_kStruct.itemid;
        pExchangeItem = (char *)pkItem->m_kStruct.itemid;
        pLocationItem = (Item *)v24;
        v27 = Inventory::GetItemCnt(&g_kInventory, v26);
        v25->QuestPlayer_TakeItem((CQuest *)pLocationItem, (unsigned __int16)pExchangeItem, v27);
        v22 = pkItem;
      }
      if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].Deaffect)()
        && PgWin::IsVisible(&v4->m_pkReviveMenuWin->baseclass_0.baseclass_0.baseclass_0) )
      {
        v28 = InventoryWin::GetFuncItemCount(v4->m_pkInventoryWin, ITEMFUNC_JUSTREVIVAL, 1);
        ReviveMenuWin::SetReviveBtn(v4->m_pkReviveMenuWin, v28);
      }
      v4->m_pkStatusChargedBuffWin->m_fLastUpdatedTime = 0.0;
      ChargedItemListWin::Refresh(v4->m_pkChargedItemListWin);
      ProductionWin::RefreshProductItemState(ProductTask::ms_pkProductionWin);
      if ( v22 )
      {
        v29 = v22->m_pkInfo;
        if ( v29 )
        {
          if ( !((*((_WORD *)v3 + 1) ^ *(_WORD *)v3) & 0x3FF) )
          {
            switch ( v29->Class )
            {
              case 0x12:
                GameFrameWork::OpenPlayGuideWin(v4, BIL_MINIHOUSE_2);
                break;
              case 4:
              case 5:
              case 6:
              case 7:
              case 8:
                GameFrameWork::OpenPlayGuideWin(v4, BIL_ITEM_3);
                break;
              case 0xA:
                if ( v29->Equip != 25 )
                  GameFrameWork::OpenPlayGuideWin(v4, BIL_ITEM_4);
                break;
              case 0xE:
                GameFrameWork::OpenPlayGuideWin(v4, BIL_SMELTING_1);
                break;
              case 0x23:
                GameFrameWork::OpenPlayGuideWin(v4, BIL_ENCHANT_1);
                break;
              case 0x17:
                GameFrameWork::OpenPlayGuideWin(v4, BIL_MOVER_1);
                break;
              case 0x10:
                GameFrameWork::OpenPlayGuideWin(v4, BIL_WEAPONTITLE_1);
                break;
              default:
                goto LABEL_113;
            }
          }
        }
      }
      goto LABEL_113;
    }
    if ( v18 == 3 )
    {
      v4->m_CellChangeInvPosMode = 0;
      ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, *(_WORD *)v3 & 0x3FF, *((_WORD *)v3 + 1) & 0x3FF, 1);
    }
    else
    {
LABEL_116:
      v4->m_CellChangeInvPosMode = 0;
    }
    GameFrameWork::UnLockShortCutWinInvPosItem(v4);
    goto LABEL_26;
  }
  if ( v7 == 6 )
  {
    Bank::Add(pkItem, v6 & 0x3FF);
    v30 = v4->m_pkStorageWin;
    if ( v30 )
      StorageWin::ResetContents(v30);
    goto LABEL_113;
  }
  if ( v7 == 12 )
  {
    MiniHouseInventoryWin::Change(
      v4->m_pkMiniHouseInventoryWin,
      (unsigned int)*((_WORD *)v3 + 1) >> 10,
      pkItem,
      *((_WORD *)v3 + 1) & 0x3FF);
    Inventory::Add(&g_kInventory, (unsigned int)*((_WORD *)v3 + 1) >> 10, pkItem, *((_WORD *)v3 + 1) & 0x3FF);
    ChargedItemListWin::Refresh(v4->m_pkChargedItemListWin);
    goto LABEL_113;
  }
  if ( v7 == 4 )
  {
    GuildTournamentStorage::Add(pkItem, v6 & 0x3FF);
    if ( GuildTask::GetGuildTournamentStorageWin() )
    {
      v31 = GuildTask::GetGuildTournamentStorageWin();
      GuildTournamentStorageWin::ResetContents(v31);
    }
    goto LABEL_113;
  }
  if ( !v7 )
  {
    GuildAcademyStorage::Add(pkItem, v6 & 0x3FF);
    if ( GuildAcademyTask::GetGuildAcademyStorageWin() )
    {
      v32 = GuildAcademyTask::GetGuildAcademyStorageWin();
      GuildAcademyStorageWin::ResetContents(v32);
    }
    if ( GuildAcademyTask::GetGuildAcademyItemRewardWin() )
    {
      v33 = GuildAcademyTask::GetGuildAcademyItemRewardWin();
      GuildAcademyItemRewardWin::On_GuildAcademyStorage_Cell_Changed(v33);
    }
    goto LABEL_113;
  }
  if ( v7 == 13 || v7 == 3 || v7 == 14 || v7 == 16 )
  {
    v46 = *((_WORD *)v3 + 1);
    if ( pkItem )
    {
      Inventory::GetMHItemInv(&g_kInventory, v46 >> 10, v46 & 0x3FF);
      v46 = *((_WORD *)v3 + 1);
      v49 = pkItem;
      v48 = *((_WORD *)v3 + 1) & 0x3FF;
    }
    else
    {
      v49 = 0;
      v48 = v46 & 0x3FF;
    }
    Inventory::AddMHItemInv(&g_kInventory, v46 >> 10, v48, v49);
    goto LABEL_113;
  }
  if ( v7 == 2 )
  {
    v51 = Inventory::GetRewardInv(&g_kInventory, v6 & 0x3FF);
    pLocationItem = (Item *)*(_WORD *)v3;
    pExchangeItem = (char *)Inventory::GetRewardInv(&g_kInventory, (unsigned __int16)pLocationItem & 0x3FF);
    if ( !((v6 ^ (unsigned int)pLocationItem) & 0x3FF) )
    {
      v4->m_CellChangeInvPosMode = 0;
LABEL_80:
      GameFrameWork::UnLockShortCutWinInvPosItem(v4);
      goto LABEL_81;
    }
    v34 = v4->m_CellChangeInvPosMode;
    if ( v34 )
    {
      v4->m_CellChangeInvPosMode = 0;
      if ( v34 == 3 )
        ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, *(_WORD *)v3 & 0x3FF, *((_WORD *)v3 + 1) & 0x3FF, 1);
      goto LABEL_80;
    }
    v35 = v51;
    if ( v51 )
    {
      if ( pExchangeItem )
      {
        if ( (unsigned __int8)((int (__thiscall *)(Item *))v51->baseclass_0.vfptr[1].__vecDelDtor)(v51) == 24
          && (unsigned __int8)(*(int (**)(void))(*(_DWORD *)pExchangeItem + 4))() == 24 )
        {
          v4->m_CellChangeInvPosMode = 1;
          ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, *(_WORD *)v3 & 0x3FF, *((_WORD *)v3 + 1) & 0x3FF, 0);
          goto LABEL_81;
        }
        v36 = ((int (__thiscall *)(Item *))v35->baseclass_0.vfptr[1].__vecDelDtor)(v35);
        v37 = 1023;
        if ( v36 != 24 )
        {
          v4->m_CellChangeInvPosMode = 3;
          GameFrameWork::LockShortCutWinInvPosItem(v4, *(_WORD *)v3 & 0x3FF);
          goto LABEL_81;
        }
      }
      else
      {
        v37 = 1023;
      }
      v4->m_CellChangeInvPosMode = 2;
      ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, v37 & *(_WORD *)v3, v37 & *((_WORD *)v3 + 1), 1);
      GameFrameWork::LockShortCutWinInvPosItem(v4, *(_WORD *)v3 & 0x3FF);
    }
LABEL_81:
    InventoryWin::Change(
      v4->m_pkInventoryWin,
      (unsigned int)*((_WORD *)v3 + 1) >> 10,
      pkItem,
      *((_WORD *)v3 + 1) & 0x3FF);
    Inventory::Add(&g_kInventory, (unsigned int)*((_WORD *)v3 + 1) >> 10, pkItem, *((_WORD *)v3 + 1) & 0x3FF);
    goto LABEL_113;
  }
  if ( v7 != 15 )
    goto LABEL_113;
  v51 = Inventory::GetRewardInv(&g_kInventory, v6 & 0x3FF);
  pLocationItem = (Item *)*(_WORD *)v3;
  pExchangeItem = (char *)Inventory::GetRewardInv(&g_kInventory, (unsigned __int16)pLocationItem & 0x3FF);
  if ( !((v6 ^ (unsigned int)pLocationItem) & 0x3FF) )
    goto LABEL_96;
  v38 = v4->m_CellChangeInvPosMode;
  if ( v38 )
  {
    if ( v38 == 3 )
    {
      v4->m_CellChangeInvPosMode = 0;
      ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, *(_WORD *)v3 & 0x3FF, *((_WORD *)v3 + 1) & 0x3FF, 1);
LABEL_97:
      GameFrameWork::UnLockShortCutWinInvPosItem(v4);
      goto LABEL_98;
    }
LABEL_96:
    v4->m_CellChangeInvPosMode = 0;
    goto LABEL_97;
  }
  v39 = v51;
  if ( v51 )
  {
    if ( pExchangeItem )
    {
      if ( (unsigned __int8)((int (__thiscall *)(Item *))v51->baseclass_0.vfptr[1].__vecDelDtor)(v51) == 24
        && (unsigned __int8)(*(int (**)(void))(*(_DWORD *)pExchangeItem + 4))() == 24 )
      {
        v4->m_CellChangeInvPosMode = 1;
        ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, *(_WORD *)v3 & 0x3FF, *((_WORD *)v3 + 1) & 0x3FF, 0);
        goto LABEL_98;
      }
      v40 = ((int (__thiscall *)(Item *))v39->baseclass_0.vfptr[1].__vecDelDtor)(v39);
      v41 = 1023;
      if ( v40 != 24 )
      {
        v4->m_CellChangeInvPosMode = 3;
        GameFrameWork::LockShortCutWinInvPosItem(v4, *(_WORD *)v3 & 0x3FF);
        goto LABEL_98;
      }
    }
    else
    {
      v41 = 1023;
    }
    v4->m_CellChangeInvPosMode = 2;
    ShortCutMgr::SetInvPosItem(&g_kShortCutMgr, v41 & *(_WORD *)v3, v41 & *((_WORD *)v3 + 1), 1);
    GameFrameWork::LockShortCutWinInvPosItem(v4, *(_WORD *)v3 & 0x3FF);
  }
LABEL_98:
  v42 = pkItem;
  ActionWin::Change(v4->m_pkActionWin, (unsigned int)*((_WORD *)v3 + 1) >> 10, pkItem, *((_WORD *)v3 + 1) & 0x3FF);
  Inventory::Add(&g_kInventory, (unsigned int)*((_WORD *)v3 + 1) >> 10, pkItem, *((_WORD *)v3 + 1) & 0x3FF);
  v43 = v4->m_pkShortCutWin;
  if ( v43->m_bPremiumActive )
    ShortCutWin::SetPremiumItemInfo(v43, *((_WORD *)v3 + 1) & 0x3FF, pkItem);
  v44 = v4->m_pkShortCutWinV;
  if ( v44->m_bPremiumActive )
    ShortCutWin::SetPremiumItemInfo(v44, *((_WORD *)v3 + 1) & 0x3FF, pkItem);
  pkItema = v4->m_pkShortCutSubWinV;
  pExchangeItem = (char *)4;
  do
  {
    v45 = (int)*(pkItema - 5);
    if ( *(_BYTE *)(v45 + 1095) )
      ShortCutWin::SetPremiumItemInfo((ShortCutWin *)v45, *((_WORD *)v3 + 1) & 0x3FF, v42);
    if ( (*pkItema)->m_bPremiumActive )
      ShortCutWin::SetPremiumItemInfo(*pkItema, *((_WORD *)v3 + 1) & 0x3FF, v42);
    ++pkItema;
    --pExchangeItem;
  }
  while ( pExchangeItem );
LABEL_113:
  GameFrameWork::OnReflashShortCutWin(v4);
  v4->m_pkStatusChargedBuffWin->m_fLastUpdatedTime = 0.0;
  return iRevBytes;
}

//----- (004AFFC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_EQUIPCHANGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  void *v4; // eax@1
  void *v5; // edi@1
  unsigned int v6; // eax@1
  Item *v7; // eax@2
  int v8; // edi@9
  Item *v9; // esi@9
  Item *v10; // eax@9
  char *v11; // edi@9
  GameFrameWork *v12; // esi@17
  char v13; // al@21
  int v14; // edi@24
  int v15; // esi@24
  int v16; // eax@26
  ItemInfo *v17; // eax@27
  MinimonInfo *v18; // eax@31
  Item *v19; // eax@34
  Item *v20; // esi@34
  int v21; // esi@36
  CharInfoWin *v22; // eax@47
  CharTitleWin *v23; // ecx@48
  char v24; // al@50
  Effect *v25; // eax@54
  unsigned __int16 v27; // [sp-4h] [bp-90h]@5
  int v28; // [sp+8h] [bp-84h]@56
  int uiSize; // [sp+Ch] [bp-80h]@1
  char *v30; // [sp+10h] [bp-7Ch]@1
  GameFrameWork *thisa; // [sp+14h] [bp-78h]@1
  int pkMobID; // [sp+18h] [bp-74h]@17
  Item *pkItem; // [sp+1Ch] [bp-70h]@1
  char v34; // [sp+20h] [bp-6Ch]@36
  __int16 v35; // [sp+29h] [bp-63h]@36
  __int16 v36; // [sp+2Fh] [bp-5Dh]@39
  __int16 v37; // [sp+35h] [bp-57h]@42
  unsigned __int16 v38; // [sp+3Bh] [bp-51h]@37
  __int16 v39; // [sp+84h] [bp-8h]@36
  char v40; // [sp+86h] [bp-6h]@36
  unsigned int v41; // [sp+88h] [bp-4h]@1
  int v42; // [sp+8Ch] [bp+0h]@1

  v41 = (unsigned int)&v42 ^ __security_cookie;
  v3 = this;
  thisa = this;
  v30 = (char *)pvData + 3;
  v4 = Item::Create((char *)pvData + 3, (unsigned int *)&uiSize);
  v5 = v4;
  pkItem = (Item *)v4;
  GameFrameWork::OnReflashShortCutWin(v3);
  v6 = *((_BYTE *)pvData + 2);
  if ( v6 < 0x1E )
    v7 = g_kInventory.m_aspEquip[v6].m_pObject;
  else
    v7 = 0;
  if ( v5 )
  {
    v27 = *((_WORD *)v5 + 4);
  }
  else
  {
    if ( !v7 )
      goto LABEL_9;
    v27 = v7->m_kStruct.itemid;
  }
  SoundMgr::PlayItemEquipSound(&g_kSoundMgr, v27);
LABEL_9:
  InventoryWin::Change(v3->m_pkInventoryWin, 8u, (Item *)v5, *((_BYTE *)pvData + 2));
  v8 = *((_BYTE *)pvData + 2);
  v9 = g_kInventory.m_aspEquip[v8].m_pObject;
  v10 = pkItem;
  v11 = (char *)&g_kInventory.m_aspEquip[v8];
  if ( v9 != pkItem )
  {
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount) && v9 )
        v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v10 = pkItem;
    }
    *(_DWORD *)v11 = v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)&v10->baseclass_0.m_uiRefCount);
  }
  v12 = thisa;
  ChargedItemListWin::Refresh(thisa->m_pkChargedItemListWin);
  pkMobID = 65535;
  if ( !pkItem )
  {
    Char::UnEquip(g_pkMainChar, *((_BYTE *)pvData + 2));
    goto LABEL_47;
  }
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::On_NC_ITEM_EQUIP_ACK(&kTutorialMgr);
  v13 = *((_BYTE *)pvData + 2);
  if ( v13 == 25 || v13 == 28 )
  {
    g_pkMainChar->m_kCharShape.m_uiEquipPos = *((_BYTE *)pvData + 2);
    if ( *((_BYTE *)pvData + 2) == 25 )
    {
      v14 = g_pkMainChar->m_kCharShape.m_kEquip.Equ_Minimon;
      v15 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              g_pkMainChar->m_kCharShape.m_kEquip.Equ_Minimon) )
      {
        if ( (unsigned __int16)v14 <= *(_WORD *)(v15 + 200) )
        {
          v16 = *(_DWORD *)(v15 + 196) + 4 * v14;
          if ( *(_DWORD *)v16 )
          {
            v17 = *(ItemInfo **)v16;
LABEL_30:
            if ( v17 )
            {
              v18 = MinimonInfoTable::GetMinimonInfoByIDX(v17->InxName);
              if ( v18 )
              {
                if ( v18->MinimonRole == 2 )
                  GameFrameWork::CloseMinimonAutoUseWin(thisa);
              }
            }
            goto LABEL_34;
          }
        }
      }
    }
    else
    {
      if ( *((_BYTE *)pvData + 2) == 28 )
      {
        v17 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(g_pkMainChar->m_kCharShape.m_kEquip.Equ_MiniMon_R);
        goto LABEL_30;
      }
    }
  }
LABEL_34:
  Char::Equip(g_pkMainChar, pkItem);
  v19 = Inventory::GetEquipedWeapon(&g_kInventory);
  v20 = v19;
  if ( v19 && (unsigned __int8)((int (__thiscall *)(Item *))v19->baseclass_0.vfptr[1].__vecDelDtor)(v19) == 5 )
  {
    v21 = (int)&v20->m_kStruct;
    memcpy(&v34, (const void *)v21, 0x64u);
    v21 += 100;
    v39 = *(_WORD *)v21;
    v40 = *(_BYTE *)(v21 + 2);
    if ( v35 != -1 && v38 == v35 )
      pkMobID = v38;
    if ( v36 != -1 && v38 == v36 )
      pkMobID = v38;
    if ( v37 != -1 && v38 == v37 )
      pkMobID = v38;
  }
  MainChar::InitCharactorWeaponTitle((MainChar *)g_pkMainChar, LOBYTE(g_pkMainChar->m_uiCurrCharTitleType), pkMobID);
  v12 = thisa;
LABEL_47:
  v22 = v12->m_pkCharInfoWin;
  if ( v22 )
  {
    ((void (__stdcall *)(char *))v22->m_pkSubNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(g_pkMainChar->m_CharTitleName);
    v23 = v12->m_pkCharInfoWin->m_pkCharTitleWin;
    if ( v23 )
      CharTitleWin::UpdateViewList(v23);
  }
  v24 = *((_BYTE *)pvData + 2);
  if ( v24 == 25 || v24 == 28 )
    GameFrameWork::OnEquipChangeMiniMon(v12, pkItem);
  if ( *((_BYTE *)pvData + 2) == 17 )
  {
    v25 = EffectMgr::FindAuraEffect(&g_kEffectMgr, g_pkMainChar->m_kHandle);
    if ( v25 )
    {
      v28 = *(_WORD *)v30 == -1;
      ((void (__stdcall *)(int))v25->baseclass_0.vfptr[21].__vecDelDtor)(v28);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A98300: using guessed type int _local static guard_;

//----- (004B02D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_ITEMBREAK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // eax@2
  Item *v5; // esi@3
  char *v6; // eax@6

  v3 = this;
  if ( (*(_WORD *)pvData & 0xFC00) == 8192 )
  {
    v4 = *(_WORD *)pvData & 0x3FF;
    if ( (unsigned int)v4 < 0x1E )
      v5 = g_kInventory.m_aspEquip[v4].m_pObject;
    else
      v5 = 0;
    if ( v5 == Inventory::GetEquipedWeaponAcc(&g_kInventory) )
    {
      v6 = TextData2::Get(0xF3D5672u);
      GameFrameWork::AddSysMsg(v3, v6);
    }
  }
  return iRevBytes;
}

//----- (004B0330) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_BUY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@7
  CQuest *v6; // eax@12
  CQuest *v7; // edi@12
  CQuestVtbl *v8; // esi@12
  int v9; // eax@12
  bool v10; // zf@12
  int result; // eax@12
  unsigned int v12; // [sp-4h] [bp-Ch]@3

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 == 513 )
  {
    v12 = -1778126862;
LABEL_10:
    v5 = TextData::Get(v12);
LABEL_11:
    GameFrameWork::AddSysMsg(v4, v5);
  }
  else
  {
    switch ( v3 )
    {
      case 517:
      case 519:
      case 523:
        v12 = 698305403;
        goto LABEL_10;
      case 522:
        v12 = 543232885;
        goto LABEL_10;
      case 524:
        v12 = 457132922;
        goto LABEL_10;
      case 525:
        v12 = 480666965;
        goto LABEL_10;
      case 527:
        v5 = TextData3::Get(0x5083C8E4u);
        goto LABEL_11;
      case 529:
        v5 = TextData3::Get(0x46DDC2A9u);
        goto LABEL_11;
      default:
        break;
    }
  }
  v6 = QuestDataMgr::GetQuest();
  v7 = v6;
  v8 = v6->vfptr;
  v9 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)();
  v10 = v8->QuestPlayer_LevelChange(v7, v9) == 0;
  result = iRevBytes;
  if ( v10 )
    QuestDataMgr::m_bUpdate = 1;
  return result;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (004B0410) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_SELL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@4
  char *v6; // eax@5
  CQuest *v7; // eax@7
  CQuest *v8; // edi@7
  CQuestVtbl *v9; // esi@7
  int v10; // eax@7
  bool v11; // zf@7
  int result; // eax@7
  SoundIndex rkIndex; // [sp+8h] [bp-8h]@6

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( *(_WORD *)pvData == 897 )
  {
    rkIndex.m_dwIndex = 16;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  }
  else
  {
    if ( v3 == 912 || v3 == 911 )
    {
      v6 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v4, v6);
    }
    else
    {
      v5 = TextData::Get(0xA4948173u);
      GameFrameWork::AddSysMsg(v4, v5);
    }
  }
  v7 = QuestDataMgr::GetQuest();
  v8 = v7;
  v9 = v7->vfptr;
  v10 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)();
  v11 = v9->QuestPlayer_LevelChange(v8, v10) == 0;
  result = iRevBytes;
  if ( v11 )
    QuestDataMgr::m_bUpdate = 1;
  return result;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (004B04C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_RELOC_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@6
  unsigned int v7; // [sp-4h] [bp-8h]@3

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 != 577 )
  {
    switch ( v3 )
    {
      case 586:
        v7 = -857857511;
        goto LABEL_6;
      case 588:
        v7 = 237968494;
        goto LABEL_6;
      default:
        v7 = -2019655305;
LABEL_6:
        v5 = TextData::Get(v7);
        GameFrameWork::AddSysMsg(v4, v5);
        break;
      case 578:
      case 579:
      case 580:
      case 581:
      case 582:
      case 583:
      case 584:
      case 585:
        return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B0540) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_DROP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // eax@1
  GameFrameWork *v4; // esi@1
  int v5; // eax@4
  char *v6; // eax@12
  CQuest *v7; // eax@13
  CQuest *v8; // edi@13
  CQuestVtbl *v9; // esi@13
  int v10; // eax@13
  bool v11; // zf@13
  int result; // eax@13
  unsigned int v13; // [sp-4h] [bp-Ch]@6

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 == 769 )
    goto LABEL_13;
  if ( v3 <= 903 )
  {
    if ( v3 != 903 )
    {
      v5 = v3 - 781;
      if ( v5 )
      {
        if ( v5 != 1 )
          goto LABEL_13;
        v13 = -2097885992;
      }
      else
      {
        v13 = -673766128;
      }
      goto LABEL_12;
    }
    goto LABEL_11;
  }
  if ( v3 == 907 )
  {
LABEL_11:
    v13 = -2045716265;
    goto LABEL_12;
  }
  if ( v3 != 5057 )
    goto LABEL_13;
  v13 = -723786798;
LABEL_12:
  v6 = TextData::Get(v13);
  GameFrameWork::AddSysMsg(v4, v6);
LABEL_13:
  InventoryWin::ms_bGetDropItemActionReady = 1;
  v7 = QuestDataMgr::GetQuest();
  v8 = v7;
  v9 = v7->vfptr;
  v10 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)();
  v11 = v9->QuestPlayer_LevelChange(v8, v10) == 0;
  result = iRevBytes;
  if ( v11 )
    QuestDataMgr::m_bUpdate = 1;
  return result;
}
// A7C517: using guessed type bool InventoryWin__ms_bGetDropItemActionReady;
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (004B05E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_PICK_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // ebx@1
  char *v5; // eax@30
  char *v6; // eax@32
  int v7; // edi@33
  int v8; // esi@33
  int v9; // eax@35
  int v10; // esi@36
  char *v11; // eax@38
  char *v12; // eax@39
  QuestFinishWin *v13; // ecx@40
  CQuest *v14; // eax@44
  CQuest *v15; // edi@44
  CQuestVtbl *v16; // esi@44
  int v17; // eax@44
  bool v18; // zf@44
  int result; // eax@44
  unsigned int v20; // [sp-4h] [bp-10h]@3
  unsigned int v21; // [sp-4h] [bp-10h]@11

  g_kInventory.m_bWaitingItemDropAck = 0;
  v3 = *((_WORD *)pvData + 3);
  v4 = this;
  if ( v3 != 833 )
  {
    if ( v3 == 836 )
    {
      v20 = -479580360;
    }
    else
    {
      if ( v3 == 837 )
      {
        v20 = -2045716265;
      }
      else
      {
        if ( v3 != 838 )
        {
          if ( v3 == 843 )
          {
            DropItemMgr::Remove(&g_kDropItemMgr, *((_WORD *)pvData + 4));
            goto LABEL_44;
          }
          switch ( v3 )
          {
            case 8193:
              v21 = 1928714430;
              break;
            case 8194:
              v21 = -129922485;
              break;
            case 8195:
              v21 = -11891623;
              break;
            case 8196:
              v21 = -1057409271;
              break;
            case 8201:
              v21 = 89423199;
              break;
            case 844:
              v21 = -1057409271;
              break;
            case 845:
              v21 = 1569354170;
              break;
            case 8197:
              v21 = 1739641539;
              break;
            case 846:
              v21 = 19531596;
              break;
            default:
              if ( v3 != 834 )
              {
                v20 = 901151362;
                goto LABEL_32;
              }
              v21 = 388566327;
              break;
          }
          v5 = TextData2::Get(v21);
          GameFrameWork::AddSysMsg(v4, v5);
          goto LABEL_44;
        }
        v20 = -184949776;
      }
    }
LABEL_32:
    v6 = TextData::Get(v20);
    GameFrameWork::AddSysMsg(v4, v6);
    goto LABEL_44;
  }
  SoundMgr::PlayItemPutSound(&g_kSoundMgr, *(_WORD *)pvData);
  v7 = *(_WORD *)pvData;
  v8 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          v7) )
  {
    if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) )
    {
      v9 = *(_DWORD *)(v8 + 196) + 4 * v7;
      if ( *(_DWORD *)v9 )
      {
        v10 = *(_DWORD *)v9;
        if ( *(_DWORD *)v9 )
        {
          if ( *(_DWORD *)((char *)pvData + 2) )
          {
            v12 = TextData::Get(0xC20BE2EDu);
            GameFrameWork::VaAddSysMsg(v4, v12);
          }
          else
          {
            v11 = TextData::Get(0xC10BE2EDu);
            GameFrameWork::VaAddSysMsg(v4, v11);
          }
          v13 = v4->m_pkQuestFinishWin;
          if ( v13 )
            QuestFinishWin::UpdateQuest(v13);
          if ( *(_DWORD *)(v10 + 102) == 30 )
            GameFrameWork::OpenPlayGuideWin(v4, BIL_CARDCOLLECT_1);
        }
      }
    }
  }
LABEL_44:
  v14 = QuestDataMgr::GetQuest();
  v15 = v14;
  v16 = v14->vfptr;
  v17 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)();
  v18 = v16->QuestPlayer_LevelChange(v15, v17) == 0;
  result = iRevBytes;
  if ( v18 )
    QuestDataMgr::m_bUpdate = 1;
  return result;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B0820) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_SOMEONEPICK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  _BYTE v3[20]; // ST00_20@2
  int v4; // edx@3
  int v5; // ecx@3
  int v6; // edi@3
  int v7; // ebx@3
  int v8; // eax@3
  int v9; // edx@3
  int v10; // edx@5
  int v11; // eax@6
  char *v12; // eax@8
  GameFrameWork *thisa; // [sp+Ch] [bp-20h]@1
  char acName[21]; // [sp+10h] [bp-1Ch]@3
  unsigned int v16; // [sp+28h] [bp-4h]@1
  int v17; // [sp+2Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  thisa = this;
  if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
  {
    *(_DWORD *)v3 = *(_DWORD *)pvData;
    *(_QWORD *)&v3[4] = *(_QWORD *)((char *)pvData + 4);
    *(_QWORD *)&v3[12] = *(_QWORD *)((char *)pvData + 12);
    if ( RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v3) )
    {
      v4 = *(_DWORD *)pvData;
      v5 = *((_DWORD *)pvData + 2);
      v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v7 = *((_WORD *)pvData + 10);
      *(_DWORD *)&acName[4] = *((_DWORD *)pvData + 1);
      v8 = *((_DWORD *)pvData + 4);
      *(_DWORD *)acName = v4;
      v9 = *((_DWORD *)pvData + 3);
      *(_DWORD *)&acName[8] = v5;
      *(_DWORD *)&acName[16] = v8;
      *(_DWORD *)&acName[12] = v9;
      acName[20] = 0;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v7) )
      {
        if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) )
        {
          v10 = *(_DWORD *)(v6 + 196);
          if ( *(_DWORD *)(v10 + 4 * v7) )
          {
            v11 = *(_DWORD *)(v10 + 4 * v7);
            if ( v11 )
            {
              if ( *(_DWORD *)(v11 + 102) != 32 )
              {
                v12 = TextData2::Get(0x397E6F6Bu);
                GameFrameWork::VaAddSysMsg(thisa, v12);
              }
            }
          }
        }
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B0920) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_EQUIP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  char *v6; // eax@4

  v3 = this;
  if ( *(_WORD *)pvData != 641 )
  {
    if ( *(_WORD *)pvData == 659 )
    {
      v4 = TextData2::Get(0x3C504783u);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
    v6 = TextData::Get(0x87988A83u);
    GameFrameWork::AddSysMsg(v3, v6);
  }
  return iRevBytes;
}

//----- (004B0980) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_UNEQUIP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData != 705 )
  {
    v4 = TextData::Get(0x92AD77C0u);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004B09B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  __int16 v4; // ax@1
  char *v5; // eax@3
  int result; // eax@3
  char *v7; // eax@5
  char *v8; // eax@7
  char *v9; // eax@9
  char *v10; // eax@11
  char *v11; // eax@23
  char *v12; // eax@27
  char *v13; // eax@31
  char *v14; // eax@40
  char *v15; // eax@41
  int v16; // ebx@42
  int v17; // esi@42
  int v18; // eax@44
  int v19; // esi@45
  RIDING *v20; // eax@47
  RidePetWin *v21; // ecx@50
  FeedMoverWin *v22; // ecx@52
  Effect *v23; // eax@60
  char *v24; // [sp-Ch] [bp-14h]@56
  unsigned int v25; // [sp-4h] [bp-Ch]@17

  v3 = this;
  v4 = *(_WORD *)pvData;
  if ( *(_WORD *)pvData == 1792 )
  {
    v16 = *((_WORD *)pvData + 1);
    v17 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            *((_WORD *)pvData + 1)) )
    {
      if ( (unsigned __int16)v16 <= *(_WORD *)(v17 + 200) )
      {
        v18 = *(_DWORD *)(v17 + 196) + 4 * v16;
        if ( *(_DWORD *)v18 )
        {
          v19 = *(_DWORD *)v18;
          if ( *(_DWORD *)v18 )
          {
            if ( *(_DWORD *)(v19 + 102) == 23 )
            {
              v20 = RidePetTable::GetByInxName((char *)(v19 + 2));
              if ( v20 )
                RidePetWin::SetMoverSpeed(v3->m_pkRidePetWin, (signed int)((double)v20->RunSpeed * 0.1));
            }
            if ( *(_DWORD *)(v19 + 102) == 22 )
            {
              v21 = v3->m_pkRidePetWin;
              if ( v21 )
                RidePetWin::EnablePetFaceAni(v21);
              v22 = v3->m_pkFeedMoverWin;
              if ( v22 )
                FeedMoverWin::EnableMoverFaceAni(v22);
            }
            if ( *((_WORD *)pvData + 1) == 30072 )
            {
              if ( TextData::Get(0x8AA39ED1u) )
                v24 = TextData::Get(0x8AA39ED1u);
              else
                v24 = "Unknown Text";
              GameFrameWork::AddSysMsg(v3, v24);
            }
            if ( *(_DWORD *)(v19 + 110) == 17 )
            {
              v23 = EffectMgr::FindAuraEffect(&g_kEffectMgr, g_pkMainChar->m_kHandle);
              if ( v23 )
                v23->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v23, 0);
            }
          }
        }
      }
    }
    return iRevBytes;
  }
  if ( v4 == 4290 )
  {
    v5 = TextData::Get(0x85F7D6D1u);
    GameFrameWork::AddSysMsg(v3, v5);
    return iRevBytes;
  }
  if ( v4 == 4296 )
  {
    v7 = TextData::Get(0x69A17256u);
    GameFrameWork::AddSysMsg(v3, v7);
    return iRevBytes;
  }
  if ( v4 == 4298 )
  {
    v8 = TextData::Get(0x62ABC4A2u);
    GameFrameWork::AddSysMsg(v3, v8);
    return iRevBytes;
  }
  if ( v4 == 4297 )
  {
    v9 = TextData::Get(0x83B16E5Fu);
    GameFrameWork::AddSysMsg(v3, v9);
    return iRevBytes;
  }
  if ( v4 == 4295 )
  {
    v10 = TextData::Get(0xBBEEADEDu);
    GameFrameWork::AddSysMsg(v3, v10);
    return iRevBytes;
  }
  if ( v4 == 1802 || v4 == 1806 || v4 == 4292 || v4 == 1807 )
    return iRevBytes;
  if ( v4 == 1818 )
  {
    v25 = 1668910691;
LABEL_40:
    v14 = TextData2::Get(v25);
    GameFrameWork::AddSysMsg(v3, v14);
    return iRevBytes;
  }
  if ( v4 == 1819 )
  {
    v25 = 1720809315;
    goto LABEL_40;
  }
  if ( v4 == 1820 )
  {
    v25 = 709925228;
    goto LABEL_40;
  }
  if ( v4 == 1812 )
  {
    v11 = TextData::Get(0x37276777u);
    GameFrameWork::AddSysMsg(v3, v11);
    return iRevBytes;
  }
  if ( v4 == 1816 )
  {
    if ( *TextData::Get(0xF835350Bu) )
    {
      v12 = TextData::Get(0xF835350Bu);
      GameFrameWork::AddSysMsg(v3, v12);
      result = iRevBytes;
    }
    else
    {
      GameFrameWork::AddSysMsg(v3, "Unknown Text");
      result = iRevBytes;
    }
  }
  else
  {
    if ( v4 == 1817 )
    {
      if ( *TextData::Get(0x4B539891u) )
      {
        v13 = TextData::Get(0x4B539891u);
        GameFrameWork::AddSysMsg(v3, v13);
        result = iRevBytes;
      }
      else
      {
        GameFrameWork::AddSysMsg(v3, "Unknown text");
        result = iRevBytes;
      }
    }
    else
    {
      if ( v4 == 1827 )
      {
        v25 = 1366584935;
        goto LABEL_40;
      }
      if ( v4 == 1828 )
      {
        v25 = -522534179;
        goto LABEL_40;
      }
      if ( v4 == 1829 )
      {
        v25 = 2047470041;
        goto LABEL_40;
      }
      if ( v4 == 1830 )
      {
        v25 = -2000297776;
        goto LABEL_40;
      }
      v15 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v3, v15);
      result = iRevBytes;
    }
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B0D70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_DEPOSIT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  CQuest *v5; // eax@5
  CQuest *v6; // edi@5
  CQuestVtbl *v7; // esi@5
  int v8; // eax@5
  bool v9; // zf@5
  int result; // eax@5

  v3 = this;
  if ( *((_WORD *)pvData + 4) == 3968 )
  {
    Bank::SetMoney(*(_QWORD *)pvData);
  }
  else
  {
    if ( *((_WORD *)pvData + 4) == 3971 )
    {
      v4 = TextData::Get(0xDD291C2Du);
      GameFrameWork::AddSysMsg(v3, v4);
    }
  }
  v5 = QuestDataMgr::GetQuest();
  v6 = v5;
  v7 = v5->vfptr;
  v8 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)();
  v9 = v7->QuestPlayer_LevelChange(v6, v8) == 0;
  result = iRevBytes;
  if ( v9 )
    QuestDataMgr::m_bUpdate = 1;
  return result;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (004B0DF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_WITHDRAW_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  CQuest *v5; // eax@5
  CQuest *v6; // edi@5
  CQuestVtbl *v7; // esi@5
  int v8; // eax@5
  bool v9; // zf@5
  int result; // eax@5

  v3 = this;
  if ( *((_WORD *)pvData + 4) == 3968 )
  {
    Bank::SetMoney(*(_QWORD *)pvData);
  }
  else
  {
    if ( *((_WORD *)pvData + 4) == 3971 )
    {
      v4 = TextData::Get(0x2D1A2931u);
      GameFrameWork::AddSysMsg(v3, v4);
    }
  }
  v5 = QuestDataMgr::GetQuest();
  v6 = v5;
  v7 = v5->vfptr;
  v8 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].AddAbStateByAbstateIndex)();
  v9 = v7->QuestPlayer_LevelChange(v6, v8) == 0;
  result = iRevBytes;
  if ( v9 )
    QuestDataMgr::m_bUpdate = 1;
  return result;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (004B0E70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_CHARGEDINVENOPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  InventoryWin *v4; // ecx@2
  ChargedItemInvenWin *v5; // ecx@3
  unsigned int v6; // eax@3
  bool v8; // al@5
  MainMenuWin *v9; // ecx@5
  signed int v10; // esi@9
  PROTO_CHARGED_ITEM_INFO *v11; // edi@10
  char *v12; // eax@14
  GameFrameWork *v13; // [sp+8h] [bp-4h]@1

  v3 = this;
  v13 = this;
  if ( *(_WORD *)pvData != 4161 )
  {
    v12 = TextData::Get(0xC2E7260Du);
    GameFrameWork::AddSysMsg(v3, v12);
    return iRevBytes;
  }
  v4 = this->m_pkInventoryWin;
  if ( !*(_WORD *)((char *)pvData + 3) )
  {
    v5 = v4->m_pkChargedItemInvenWin;
    v6 = v5->m_uiCurrPage;
    if ( v6 )
    {
      v5->m_uiCurrPage = v6 - 1;
      return iRevBytes;
    }
    return iRevBytes;
  }
  InventoryWin::ShowChargedNewMark(v4, 1);
  v8 = InventoryWin::GetIsViewNewMark(v3->m_pkInventoryWin);
  v9 = v3->m_pkMainMenuWin;
  if ( v9 )
    MainMenuWin::ShowNewMark(v9, v8);
  if ( *((_BYTE *)pvData + 2) & 1 )
    CChargedItem::Clear(&g_kChargedItem);
  v10 = 0;
  if ( *(_WORD *)((char *)pvData + 3) > 0u )
  {
    v11 = (PROTO_CHARGED_ITEM_INFO *)((char *)pvData + 5);
    do
    {
      CChargedItem::Add(&g_kChargedItem, v11);
      ++v10;
      ++v11;
    }
    while ( v10 < *(_WORD *)((char *)pvData + 3) );
    v3 = v13;
  }
  InventoryWin::RefreshChargedItemInven(v3->m_pkInventoryWin);
  return iRevBytes;
}

//----- (004B0F60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_JOIN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // edi@1
  PartyMemberInfo *v5; // eax@2
  int v6; // edx@4
  int v7; // eax@4
  int v8; // edx@4
  int v9; // eax@4
  char *v10; // eax@4
  PgNet *v11; // ecx@4
  PartyWinInterface *v12; // ecx@4
  int v13; // ecx@6
  int v14; // edx@6
  int v15; // ecx@6
  char *v16; // eax@6
  char *v17; // eax@7
  __int16 pdata; // [sp+8h] [bp-20h]@4
  char acName[21]; // [sp+Ch] [bp-1Ch]@4
  unsigned int v21; // [sp+24h] [bp-4h]@1
  int v22; // [sp+28h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v3 = *(_WORD *)((char *)pvData + 21);
  v4 = this;
  if ( (_WORD)v3 == 1217 )
  {
    v5 = Party::AddMember(&g_kParty, (PROTO_NC_PARTY_JOIN_ACK *)pvData);
    if ( v5 )
      MiniMapWin::AddParty(v4->m_pkMiniMapWin, v5);
    v6 = *(_DWORD *)pvData;
    v7 = *((_DWORD *)pvData + 1);
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
    *(_DWORD *)acName = v6;
    v8 = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acName[4] = v7;
    v9 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[12] = v8;
    *(_DWORD *)&acName[16] = v9;
    acName[20] = 0;
    v10 = TextData::Get(0x9FA36BE3u);
    GameFrameWork::VaAddSysMsg(v4, v10);
    v11 = (PgNet *)v4->m_spZoneNet.m_pObject;
    pdata = 14408;
    PgNet::SendNetMsg(v11, &pdata, 2);
    v12 = v4->m_pkPartyWinInterface;
    if ( v12 )
      PartyWinInterface::Update(v12);
  }
  else
  {
    v13 = *(_DWORD *)pvData;
    *(_DWORD *)&acName[4] = *((_DWORD *)pvData + 1);
    v14 = *((_DWORD *)pvData + 3);
    *(_DWORD *)acName = v13;
    v15 = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acName[12] = v14;
    *(_DWORD *)&acName[8] = v15;
    *(_DWORD *)&acName[16] = *((_DWORD *)pvData + 4);
    acName[20] = 0;
    v16 = ErrMsgTable::GetErrMsg(v3);
    GameFrameWork::VaAddSysMsg(v4, v16);
    if ( *(_WORD *)((char *)pvData + 21) == 1242 )
    {
      v17 = ErrMsgTable::GetErrMsg(1242);
      GameFrameWork::AddSysMsg(v4, v17);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B1080) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_LEAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Name5 *v4; // eax@1
  int v5; // ecx@1
  char *v6; // eax@6
  int v7; // edx@15
  int v8; // ecx@15
  int v9; // edx@15
  char *v10; // eax@15
  _BYTE v11[20]; // ST00_20@15
  PartyMemberInfo *v12; // eax@15
  _BYTE v13[20]; // ST00_20@17
  PartyWinInterface *v14; // ecx@18
  char acName[21]; // [sp+8h] [bp-1Ch]@15
  unsigned int v17; // [sp+20h] [bp-4h]@1
  int v18; // [sp+24h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = this;
  v4 = User::GetMainCharID(&g_kUser);
  v5 = *(_DWORD *)pvData;
  if ( *(_DWORD *)pvData != *(_DWORD *)&v4->n5_name[0]
    || *((_DWORD *)pvData + 1) != *(_DWORD *)&v4->n5_name[4]
    || *((_DWORD *)pvData + 2) != *(_DWORD *)&v4->n5_name[8]
    || *((_DWORD *)pvData + 3) != *(_DWORD *)&v4->n5_name[12]
    || *((_DWORD *)pvData + 4) != *(_DWORD *)&v4->n5_name[16] )
  {
    v7 = *((_DWORD *)pvData + 1);
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
    *(_DWORD *)acName = v5;
    v8 = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acName[4] = v7;
    v9 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[12] = v8;
    *(_DWORD *)&acName[16] = v9;
    acName[20] = 0;
    v10 = TextData::Get(0x859AC5E9u);
    GameFrameWork::VaAddSysMsg(v3, v10);
    *(_DWORD *)v11 = *(_DWORD *)pvData;
    *(_QWORD *)&v11[4] = *(_QWORD *)((char *)pvData + 4);
    *(_QWORD *)&v11[12] = *(_QWORD *)((char *)pvData + 12);
    v12 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v11);
    if ( v12 )
      MiniMapWin::RemoveParty(v3->m_pkMiniMapWin, v12);
    *(_DWORD *)v13 = *(_DWORD *)pvData;
    *(_QWORD *)&v13[4] = *(_QWORD *)((char *)pvData + 4);
    *(_QWORD *)&v13[12] = *(_QWORD *)((char *)pvData + 12);
    Party::DeleteMember(&g_kParty, *(Name5 *)v13);
  }
  else
  {
    v6 = TextData::Get(0xE35A3D30u);
    GameFrameWork::AddSysMsg(v3, v6);
    Party::ClearMemberInfo(&g_kParty);
    MiniMapWin::ClearParty(v3->m_pkMiniMapWin);
    if ( v3->m_pkPartyLootSetupWin
      && (unsigned __int8)((int (*)(void))v3->m_pkPartyLootSetupWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkPartyLootSetupWin->baseclass_0.baseclass_0.baseclass_0);
    if ( v3->m_pkRollingDiceWin
      && (unsigned __int8)((int (*)(void))v3->m_pkRollingDiceWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkRollingDiceWin->baseclass_0.baseclass_0.baseclass_0);
    if ( v3->m_pkRollingDiceMsgWin
      && (unsigned __int8)((int (*)(void))v3->m_pkRollingDiceMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkRollingDiceMsgWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v14 = v3->m_pkPartyWinInterface;
  if ( v14 )
    PartyWinInterface::Update(v14);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B1260) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_KICKOFF_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // edi@1
  Name5 *v5; // eax@2
  char *v6; // eax@7
  int v7; // eax@8
  int v8; // edx@8
  int v9; // eax@8
  char *v10; // eax@8
  _BYTE v11[20]; // ST00_20@8
  PartyMemberInfo *v12; // eax@8
  _BYTE v13[20]; // ST00_20@10
  int v14; // eax@11
  int v15; // eax@12
  char *v16; // eax@17
  PartyWinInterface *v17; // ecx@18
  unsigned int v19; // [sp-4h] [bp-28h]@14
  char acName[21]; // [sp+8h] [bp-1Ch]@8
  unsigned int v21; // [sp+20h] [bp-4h]@1
  int v22; // [sp+24h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v3 = *((_WORD *)pvData + 10);
  v4 = this;
  if ( (_WORD)v3 == 1345 )
  {
    v5 = User::GetMainCharID(&g_kUser);
    if ( *(_DWORD *)pvData != *(_DWORD *)&v5->n5_name[0]
      || *((_DWORD *)pvData + 1) != *(_DWORD *)&v5->n5_name[4]
      || *((_DWORD *)pvData + 2) != *(_DWORD *)&v5->n5_name[8]
      || *((_DWORD *)pvData + 3) != *(_DWORD *)&v5->n5_name[12]
      || *((_DWORD *)pvData + 4) != *(_DWORD *)&v5->n5_name[16] )
    {
      v7 = *((_DWORD *)pvData + 1);
      v8 = *((_DWORD *)pvData + 3);
      *(_DWORD *)acName = *(_DWORD *)pvData;
      *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
      *(_DWORD *)&acName[4] = v7;
      v9 = *((_DWORD *)pvData + 4);
      *(_DWORD *)&acName[12] = v8;
      *(_DWORD *)&acName[16] = v9;
      acName[20] = 0;
      v10 = TextData::Get(0x859AC5E9u);
      GameFrameWork::VaAddSysMsg(v4, v10);
      *(_DWORD *)v11 = *(_DWORD *)pvData;
      *(_QWORD *)&v11[4] = *(_QWORD *)((char *)pvData + 4);
      *(_QWORD *)&v11[12] = *(_QWORD *)((char *)pvData + 12);
      v12 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v11);
      if ( v12 )
        MiniMapWin::RemoveParty(v4->m_pkMiniMapWin, v12);
      *(_DWORD *)v13 = *(_DWORD *)pvData;
      *(_QWORD *)&v13[4] = *(_QWORD *)((char *)pvData + 4);
      *(_QWORD *)&v13[12] = *(_QWORD *)((char *)pvData + 12);
      Party::DeleteMember(&g_kParty, *(Name5 *)v13);
    }
    else
    {
      v6 = TextData::Get(0xDFF6E9E5u);
      GameFrameWork::AddSysMsg(v4, v6);
      Party::Clear(&g_kParty);
      MiniMapWin::ClearParty(v4->m_pkMiniMapWin);
    }
  }
  else
  {
    v14 = v3 - 1346;
    if ( v14 )
    {
      v15 = v14 - 1;
      if ( v15 )
      {
        if ( v15 != 3 )
          goto LABEL_18;
        v19 = 511928227;
      }
      else
      {
        v19 = 1063604170;
      }
    }
    else
    {
      v19 = 1826203867;
    }
    v16 = TextData2::Get(v19);
    GameFrameWork::AddSysMsg(v4, v16);
  }
LABEL_18:
  v17 = v4->m_pkPartyWinInterface;
  if ( v17 )
    PartyWinInterface::Update(v17);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B13E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_DISMISS_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1
  PartyWinInterface *v5; // ecx@10

  v3 = this;
  Party::Clear(&g_kParty);
  MiniMapWin::ClearParty(v3->m_pkMiniMapWin);
  v4 = TextData::Get(0x404224AEu);
  GameFrameWork::AddSysMsg(v3, v4);
  if ( v3->m_pkPartyLootSetupWin
    && (unsigned __int8)((int (*)(void))v3->m_pkPartyLootSetupWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkPartyLootSetupWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v3->m_pkRollingDiceWin
    && (unsigned __int8)((int (*)(void))v3->m_pkRollingDiceWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkRollingDiceWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v3->m_pkRollingDiceMsgWin
    && (unsigned __int8)((int (*)(void))v3->m_pkRollingDiceMsgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkRollingDiceMsgWin->baseclass_0.baseclass_0.baseclass_0);
  v5 = v3->m_pkPartyWinInterface;
  if ( v5 )
    PartyWinInterface::Update(v5);
  return iRevBytes;
}

//----- (004B14C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_CHANGEMASTER_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // edi@1
  Name5 *v5; // eax@2
  char *v6; // eax@7
  int v7; // edx@8
  int v8; // eax@8
  int v9; // ecx@8
  int v10; // ecx@8
  _BYTE v11[20]; // ST00_20@9
  PartyWinInterface *v12; // ecx@9
  int v13; // eax@12
  int v14; // eax@13
  char *v15; // eax@16
  unsigned int v17; // [sp-4h] [bp-28h]@15
  char acName[21]; // [sp+8h] [bp-1Ch]@8
  unsigned int v19; // [sp+20h] [bp-4h]@1
  int v20; // [sp+24h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v3 = *((_WORD *)pvData + 10);
  v4 = this;
  if ( (_WORD)v3 != 1352 )
  {
    v13 = v3 - 1346;
    if ( v13 )
    {
      v14 = v13 - 1;
      if ( !v14 )
      {
        v17 = -1546396466;
        goto LABEL_16;
      }
      if ( v14 != 6 )
        return iRevBytes;
    }
    v17 = -116124644;
LABEL_16:
    v15 = TextData2::Get(v17);
    GameFrameWork::AddSysMsg(v4, v15);
    return iRevBytes;
  }
  v5 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)&v5->n5_name[0] != *(_DWORD *)pvData
    || *(_DWORD *)&v5->n5_name[4] != *((_DWORD *)pvData + 1)
    || *(_DWORD *)&v5->n5_name[8] != *((_DWORD *)pvData + 2)
    || *(_DWORD *)&v5->n5_name[12] != *((_DWORD *)pvData + 3)
    || *(_DWORD *)&v5->n5_name[16] != *((_DWORD *)pvData + 4) )
  {
    v7 = *((_DWORD *)pvData + 2);
    v8 = *((_DWORD *)pvData + 3);
    *(_DWORD *)acName = *(_DWORD *)pvData;
    v9 = *((_DWORD *)pvData + 1);
    *(_DWORD *)&acName[8] = v7;
    *(_DWORD *)&acName[4] = v9;
    v10 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[12] = v8;
    *(_DWORD *)&acName[16] = v10;
    acName[20] = 0;
    v6 = TextData::Get(0x254E645Fu);
  }
  else
  {
    v6 = TextData::Get(0xDC092711u);
  }
  GameFrameWork::VaAddSysMsg(v4, v6);
  *(_DWORD *)v11 = *(_DWORD *)pvData;
  *(_QWORD *)&v11[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v11[12] = *(_QWORD *)((char *)pvData + 12);
  Party::ChangePartyMaster(&g_kParty, *(Name5 *)v11);
  v12 = v4->m_pkPartyWinInterface;
  if ( v12 )
    PartyWinInterface::Update(v12);
  GameFrameWork::OpenPlayGuideWin(v4, BIL_PARTY_5);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B15F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_ITEM_LOOTING_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  PartyLootSetupWin *v4; // ecx@1
  char *v5; // eax@4
  char *v6; // edx@4
  char v7; // cl@5
  char *v8; // eax@7
  char *v9; // edx@7
  char v10; // cl@8
  char *v11; // eax@10
  char *v12; // edx@10
  char v13; // cl@11
  char *v14; // eax@13
  char *v15; // edx@13
  char v16; // cl@14
  char *v17; // eax@21
  char *v19; // [sp-Ch] [bp-218h]@17
  unsigned int v20; // [sp-4h] [bp-210h]@16
  char acstr[512]; // [sp+8h] [bp-204h]@3
  unsigned int v22; // [sp+208h] [bp-4h]@1
  int v23; // [sp+20Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = this;
  Party::SetLootType(&g_kParty, *((_BYTE *)pvData + 1), *(_BYTE *)pvData);
  v4 = v3->m_pkPartyLootSetupWin;
  if ( v4 )
  {
    PartyLootSetupWin::SetItemGrade(v4, *((_BYTE *)pvData + 1));
    PartyLootSetupWin::SetLootingType(v3->m_pkPartyLootSetupWin, *(_BYTE *)pvData);
  }
  acstr[0] = 0;
  memset(&acstr[1], 0, 0x1FFu);
  switch ( *(_BYTE *)pvData )
  {
    case 0:
      v5 = TextData2::Get(0xA17ED0D6u);
      v6 = (char *)(acstr - v5);
      do
      {
        v7 = *v5;
        v5[(_DWORD)v6] = *v5;
        ++v5;
      }
      while ( v7 );
      break;
    case 1:
      v8 = TextData2::Get(0x2E192136u);
      v9 = (char *)(acstr - v8);
      do
      {
        v10 = *v8;
        v8[(_DWORD)v9] = *v8;
        ++v8;
      }
      while ( v10 );
      break;
    case 2:
      v11 = TextData2::Get(0x32182919u);
      v12 = (char *)(acstr - v11);
      do
      {
        v13 = *v11;
        v11[(_DWORD)v12] = *v11;
        ++v11;
      }
      while ( v13 );
      break;
    case 3:
      v14 = TextData2::Get(0xAAE9C321u);
      v15 = (char *)(acstr - v14);
      do
      {
        v16 = *v14;
        v14[(_DWORD)v15] = *v14;
        ++v14;
      }
      while ( v16 );
      break;
    default:
      break;
  }
  switch ( *((_BYTE *)pvData + 1) )
  {
    case 0:
      v20 = 225928826;
      goto LABEL_20;
    case 1:
      TextData3::Get(0xD78667Au);
      v19 = acstr;
      goto LABEL_21;
    case 2:
      TextData3::Get(0xD79667Au);
      v19 = acstr;
      goto LABEL_21;
    case 3:
      v20 = 226125434;
LABEL_20:
      TextData3::Get(v20);
      v19 = acstr;
LABEL_21:
      v17 = fs(v19);
      GameFrameWork::AddSysMsg(v3, v17);
      break;
    default:
      return iRevBytes;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B1790) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MENU_OPENSTORAGE_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x2E6F7494u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B17C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_SKILL_LEARNSUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  PassiveSkillInfo *v4; // edi@2
  int v5; // eax@3
  NiPoint3 *v6; // ecx@3
  ProductionWin *v7; // ebx@5
  int v8; // ebx@8
  int v9; // edi@8
  int v10; // eax@10
  float v11; // edx@13
  float v12; // eax@13
  char *v13; // eax@13
  char *v15; // [sp-18h] [bp-38h]@3
  NiPoint3 v16; // [sp-14h] [bp-34h]@3
  int v17; // [sp-8h] [bp-28h]@3
  float v18; // [sp-4h] [bp-24h]@3
  float v19; // [sp+0h] [bp-20h]@3
  float v20; // [sp+4h] [bp-1Ch]@3
  float v21; // [sp+8h] [bp-18h]@3
  SoundIndex rkIndex; // [sp+18h] [bp-8h]@17

  v3 = this;
  if ( *((_BYTE *)pvData + 2) )
  {
    Skill::LearnPassiveSkill(*(_WORD *)pvData);
    v4 = PasSkillInfoTab::GetByID(*(_WORD *)pvData);
    if ( !v4 )
      goto LABEL_14;
    v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v21 = 1.0;
    v20 = Timer::ms_fCurTime;
    v17 = (signed int)NiPoint3::UNIT_Y.x;
    v18 = NiPoint3::UNIT_Y.y;
    v19 = NiPoint3::UNIT_Y.z;
    v6 = &v16;
    v15 = "SkillLevelUp";
    goto LABEL_13;
  }
  Skill::LearnSkill(*(_WORD *)pvData, 0, 0);
  if ( Skill::IsProduceSkill(*(_WORD *)pvData) )
  {
    v7 = ProductTask::ms_pkProductionWin;
    if ( ProductTask::ms_pkProductionWin )
    {
      if ( PgWin::IsVisible(&ProductTask::ms_pkProductionWin->baseclass_0.baseclass_0.baseclass_0) )
        ProductionWin::RefreshProductSkillList(v7);
    }
  }
  v8 = *(_WORD *)pvData;
  v9 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                        + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          v8) )
  {
    if ( (unsigned __int16)v8 <= *(_WORD *)(v9 + 200) )
    {
      v10 = *(_DWORD *)(v9 + 196) + 4 * v8;
      if ( *(_DWORD *)v10 )
      {
        v4 = *(PassiveSkillInfo **)v10;
        if ( *(_DWORD *)v10 )
        {
          v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
          v21 = 1.0;
          v20 = Timer::ms_fCurTime;
          v17 = (signed int)NiPoint3::UNIT_Y.x;
          v18 = NiPoint3::UNIT_Y.y;
          v19 = NiPoint3::UNIT_Y.z;
          v6 = &v16;
          v15 = "SkillLevelUp";
LABEL_13:
          LODWORD(v6->x) = *(_DWORD *)v5;
          LODWORD(v11) = *(_DWORD *)(v5 + 4);
          LODWORD(v12) = *(_DWORD *)(v5 + 8);
          v6->y = v11;
          v6->z = v12;
          EffectMgr::CreateEffect(&g_kEffectMgr, v15, COERCE_NIPOINT3(v16.x), *(NiPoint3 *)&v17, v20, v21);
          LODWORD(v21) = (char *)v4 + 34;
          v13 = TextData::Get(0xE3FC2944u);
          GameFrameWork::VaAddSysMsg(v3, v13);
          SkillWin::ResetContents(v3->m_pkSkillWin);
          goto LABEL_14;
        }
      }
    }
  }
LABEL_14:
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::On_NC_SKILL_SKILL_LEARNSUC_CMD(&kTutorialMgr);
  rkIndex.m_dwIndex = 15;
  rkIndex.m_acFilename = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98300: using guessed type int _local static guard_;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004B19B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_SKILL_LEARNFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x88A7C1D9u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B19E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_UNLEARN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // ebx@1
  int v5; // edi@2
  int v6; // esi@2
  int v7; // eax@4
  char *v8; // eax@7
  char *v9; // eax@7
  int result; // eax@9
  char *v11; // eax@10
  PgWin *v12; // esi@10
  char *v13; // eax@16
  char *v14; // eax@16
  char *v15; // eax@18

  v3 = *((_WORD *)pvData + 1);
  v4 = this;
  if ( v3 == 5377 )
  {
    v5 = *(_WORD *)pvData;
    v6 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            *(_WORD *)pvData) )
    {
      if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) )
      {
        v7 = *(_DWORD *)(v6 + 196) + 4 * v5;
        if ( *(_DWORD *)v7 )
        {
          if ( *(_DWORD *)v7 )
          {
            if ( strcmp((const char *)(*(_DWORD *)v7 + 2), "SummonMate01") )
            {
              v11 = TextData::Get(0x7DA3CAF4u);
              MsgBox::Modeless(MSGBOX_OK, v11);
              v12 = (PgWin *)ProductTask::ms_pkProductionWin;
              if ( ProductTask::ms_pkProductionWin )
              {
                if ( PgWin::IsVisible(&ProductTask::ms_pkProductionWin->baseclass_0.baseclass_0.baseclass_0) )
                  PgWinMgr::CloseWin(&Pgg_kWinMgr, v12);
              }
              SkillWin::CloseProduceSkillSelectWin(v4->m_pkSkillWin);
              Skill::UnLearnSkill(*(_WORD *)pvData);
            }
            else
            {
              Skill::UnLearnActiveSkill(*(_WORD *)pvData);
              v8 = TextData::Get(0x86AE677Du);
              v9 = fs(v8);
              GameFrameWork::AddSysMsg(v4, v9);
            }
            SkillWin::ResetContents(v4->m_pkSkillWin);
          }
        }
      }
    }
    result = iRevBytes;
  }
  else
  {
    if ( v3 == 5381 )
    {
      if ( PasSkillInfoTab::GetByID(*(_WORD *)pvData) )
      {
        v13 = TextData::Get(0x86AE677Du);
        v14 = fs(v13);
        GameFrameWork::AddSysMsg(v4, v14);
      }
      Skill::UnLearnPassiveSkill(*(_WORD *)pvData);
      SkillWin::ResetContents(v4->m_pkSkillWin);
      result = iRevBytes;
    }
    else
    {
      v15 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 1));
      GameFrameWork::AddSysMsg(v4, v15);
      result = iRevBytes;
    }
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004B1B80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_EMPOW_RESET_SUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  Skill::SetEmpowerResetable(0);
  Skill::ClearLearnActSkillInfo();
  Skill::SetRestEmpowerPoint(*(_BYTE *)pvData);
  SkillIcon::RefreshSkillInfoAll();
  v4 = TextData::Get(0x939C8493u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B1BC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_EMPOWALLOC_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  int result; // eax@2
  char *v6; // eax@3

  v3 = this;
  if ( *((_WORD *)pvData + 1) == 2177 )
  {
    SkillEmpowerRequest::Applicate(*(_WORD *)pvData);
    SkillIcon::RefreshSkillInfoAll();
    v4 = TextData::Get(0xC9403836u);
    GameFrameWork::AddSysMsg(v3, v4);
    SkillWin::SetSkillPowerSuccess(v3->m_pkSkillWin, 1);
    result = iRevBytes;
  }
  else
  {
    SkillEmpowerRequest::Cancel(*(_WORD *)pvData);
    TextData::Get(0xE404CCC6u);
    v6 = fs("%s errcode:%d");
    GameFrameWork::AddSysMsg(v3, v6);
    result = iRevBytes;
  }
  return result;
}

//----- (004B1C50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_EMPOW_RESET_FAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x3448756Bu);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B1C80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_EMPOWPOINT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_BYTE *)pvData > Skill::GetRestEmpowerPoint() )
  {
    v4 = TextData::Get(0xD1EB2A3Fu);
    GameFrameWork::VaAddSysMsg(v3, v4);
  }
  Skill::SetRestEmpowerPoint(*(_BYTE *)pvData);
  return iRevBytes;
}

//----- (004B1CD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SKILL_PRODUCTFIELD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@3

  v3 = *((_WORD *)pvData + 1);
  v4 = this;
  if ( v3 != 2817 && v3 == 2820 )
  {
    v5 = TextData::Get(0x4969746Bu);
    GameFrameWork::VaAddSysMsg(v4, v5);
  }
  return iRevBytes;
}

//----- (004B1D10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_PROPOSE_ASK_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  MHDiceGameTask *v4; // ecx@3
  bool v5; // bl@3
  MHDiceGameTask *v6; // esi@4
  char *v7; // eax@9
  MsgBox *v8; // eax@9
  MsgBox *v9; // esi@9
  MsgBox *v10; // ebx@9
  MsgBox *v11; // ecx@16
  void *v12; // eax@16
  NiPointer<MHDiceGameTask> result; // [sp+24h] [bp-3Ch]@3
  PgMsg::Frame kOkMsg; // [sp+28h] [bp-38h]@16
  PgMsg::Frame kCancelMsg; // [sp+3Ch] [bp-24h]@16
  unsigned int v17; // [sp+50h] [bp-10h]@1
  int v18; // [sp+5Ch] [bp-4h]@3
  int v19; // [sp+60h] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  if ( byte_B5BB29 )
  {
    PgFrameWork::AddMsg(&this->baseclass_0, 0x74u, 0, 0);
  }
  else
  {
    v4 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    v18 = 0;
    v5 = MHDiceGameTask::IsDicegamePlaying(v4);
    v18 = -1;
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    if ( v5 )
    {
      PgFrameWork::AddMsg(&v3->baseclass_0, 0x74u, 0, 0);
    }
    else
    {
      v7 = TextData::Get(0x6B9BE5DEu);
      v8 = MsgBox::Modeless(MSGBOX_OKCANCEL, v7);
      v9 = v3->m_spUserTradeMsgBox.m_pObject;
      v10 = v8;
      if ( v9 != v8 )
      {
        if ( v9
          && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v9,
            1u);
        v3->m_spUserTradeMsgBox.m_pObject = v10;
        if ( v10 )
          InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      v11 = v3->m_spUserTradeMsgBox.m_pObject;
      kOkMsg.m_uiFrameMsg = 115;
      kCancelMsg.m_uiFrameMsg = 116;
      MsgBox::SetFrameWorkMsgOnClose(v11, &v3->baseclass_0, &kOkMsg, &kCancelMsg);
      v12 = operator new(0x10u);
      result.m_pObject = (MHDiceGameTask *)v12;
      v18 = 1;
      if ( v12 )
        FrameWorkTimer::FrameWorkTimer((FrameWorkTimer *)v12, 15.0, 0x84u, &v3->baseclass_0);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// B5BB29: using guessed type char byte_B5BB29;

//----- (004B1E80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_PROPOSENO_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  PgWin *v4; // eax@1
  MsgBox *v5; // esi@2
  char *v6; // eax@7

  v3 = this;
  v4 = (PgWin *)this->m_spUserTradeMsgBox.m_pObject;
  if ( v4 )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
    v5 = v3->m_spUserTradeMsgBox.m_pObject;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v5,
          1u);
      v3->m_spUserTradeMsgBox.m_pObject = 0;
    }
  }
  v6 = TextData::Get(0x89E1C8CBu);
  GameFrameWork::AddSysMsg(v3, v6);
  return iRevBytes;
}

//----- (004B1EF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_PROPOSE_CANCELED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  PgWin *v4; // eax@1
  MsgBox *v5; // esi@2
  char *v6; // eax@7

  v3 = this;
  v4 = (PgWin *)this->m_spUserTradeMsgBox.m_pObject;
  if ( v4 )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
    v5 = v3->m_spUserTradeMsgBox.m_pObject;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v5,
          1u);
      v3->m_spUserTradeMsgBox.m_pObject = 0;
    }
  }
  v6 = TextData::Get(0xE8320D1Du);
  GameFrameWork::AddSysMsg(v3, v6);
  return iRevBytes;
}

//----- (004B1F60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  MsgBox *v4; // edi@2
  Name5 *v5; // eax@7
  unsigned __int16 v6; // cx@7
  Char *v7; // eax@7
  char *v8; // edi@8
  char acName[21]; // [sp+Ch] [bp-1Ch]@7
  unsigned int v11; // [sp+24h] [bp-4h]@1
  int v12; // [sp+28h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  if ( this->m_spUserTradeMsgBox.m_pObject )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_spUserTradeMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    v4 = v3->m_spUserTradeMsgBox.m_pObject;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v4,
          1u);
      v3->m_spUserTradeMsgBox.m_pObject = 0;
    }
  }
  GameFrameWork::CleanUpTrade(v3);
  v5 = User::GetMainCharID(&g_kUser);
  *(_DWORD *)acName = *(_DWORD *)&v5->n5_name[0];
  *(_DWORD *)&acName[4] = *(_DWORD *)&v5->n5_name[4];
  *(_DWORD *)&acName[8] = *(_DWORD *)&v5->n5_name[8];
  v6 = *(_WORD *)pvData;
  *(_DWORD *)&acName[12] = *(_DWORD *)&v5->n5_name[12];
  *(_DWORD *)&acName[16] = *(_DWORD *)&v5->n5_name[16];
  acName[20] = 0;
  v7 = GameFrameWork::GetCharByHandle(v3, v6, 19, 9);
  if ( v7 )
    v8 = (char *)((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v7);
  else
    v8 = "unknown";
  UserTradeWin::SetMyName(v3->m_pkUserTradeWin, acName);
  UserTradeWin::SetOtherName(v3->m_pkUserTradeWin, v8);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkUserTradeWin->baseclass_0.baseclass_0.baseclass_0);
  UserTrade::SetTrading(1);
  GameFrameWork::OpenInventoryWin(v3);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B2070) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x2B272E7Au);
  GameFrameWork::AddSysMsg(v3, v4);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkUserTradeWin->baseclass_0.baseclass_0.baseclass_0);
  GameFrameWork::CleanUpTrade(v3);
  return iRevBytes;
}

//----- (004B20B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_CANCEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x7CDFCCBFu);
  GameFrameWork::AddSysMsg(v3, v4);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkUserTradeWin->baseclass_0.baseclass_0.baseclass_0);
  GameFrameWork::CleanUpTrade(v3);
  return iRevBytes;
}

//----- (004B20F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_UPBOARDFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x4AB3818Eu);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B2120) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_UPBOARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // eax@1
  GameFrameWork *v4; // edi@1
  Item *v5; // ecx@2
  unsigned int v6; // eax@3
  InvWin *v7; // eax@4

  v3 = *(_BYTE *)pvData;
  v4 = this;
  if ( v3 < 0xC0 )
  {
    v5 = g_kInventory.m_aspInv[v3].m_pObject;
    if ( v5 )
    {
      UserTrade::AddMy(v5, *((_BYTE *)pvData + 1), *(_BYTE *)pvData);
      v6 = *(_BYTE *)pvData;
      if ( v6 < 0xC0 )
      {
        v7 = v4->m_pkInventoryWin->m_apkInvWin[v6];
        if ( v7 )
        {
          InvWin::SetLock(v7, 1);
          GameFrameWork::OnReflashShortCutWin(v4);
        }
      }
    }
  }
  return iRevBytes;
}

//----- (004B2190) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_DOWNBOARDFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x94B284D5u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B21C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_CENBOARDINGFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x990FD9DCu);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B21F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_BOARDLOCKFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x949676D1u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B2220) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_DECIDEFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x88E8C7C1u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B2250) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_TRADECOMPLETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x32353C81u);
  GameFrameWork::AddSysMsg(v3, v4);
  GameFrameWork::CleanUpTrade(v3);
  return iRevBytes;
}

//----- (004B2280) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_TRADE_TRADEFAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x3E4E223Bu);
  GameFrameWork::AddSysMsg(v3, v4);
  GameFrameWork::CleanUpTrade(v3);
  return iRevBytes;
}

//----- (004B22B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_BUYFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0xD2FCD5E1u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B22E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_HP_USESUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@1
  ShortCutWin **v5; // edi@3
  signed int v6; // ebx@3
  ShortCutWin **v7; // edi@5
  signed int v8; // ebx@5
  Tutorial *v9; // eax@7
  void *v10; // eax@8
  int dwDummy; // [sp+1Ch] [bp-10h]@3
  int v13; // [sp+28h] [bp-4h]@8

  v3 = this;
  v4 = User::HPStone(&g_kUser) - 1;
  if ( v4 >= 0 )
    User::SetHPStone(&g_kUser, v4);
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_SoulStone);
  StatusWin::HPSoulStoneCoolTimeStart(v3->m_pkStatusWin);
  EffectMgr::CreateAttachEffect(
    &g_kEffectMgr,
    (unsigned int *)&dwDummy,
    "HPSoulStone",
    g_pkMainChar->m_spScene.m_pObject,
    Timer::ms_fCurTime,
    0);
  ShortCutWin::StartHpStonCoolTime(v3->m_pkShortCutWin);
  v5 = v3->m_pkShortCutSubWin;
  v6 = 4;
  do
  {
    ShortCutWin::StartHpStonCoolTime(*v5);
    ++v5;
    --v6;
  }
  while ( v6 );
  ShortCutWin::StartHpStonCoolTime(v3->m_pkShortCutWinV);
  v7 = v3->m_pkShortCutSubWinV;
  v8 = 4;
  do
  {
    ShortCutWin::StartHpStonCoolTime(*v7);
    ++v7;
    --v8;
  }
  while ( v8 );
  ActionWin::StartHpStonCoolTime(v3->m_pkActionWin);
  v9 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v10 = operator new(0xB4u);
    v13 = 0;
    if ( v10 )
      Tutorial::Tutorial(v9);
    else
      v9 = 0;
    Singleton<Tutorial>::m_pInstance = v9;
  }
  v9->m_bUseStone = 1;
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B2410) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_SP_USESUC_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // eax@1
  ShortCutWin **v5; // esi@3
  signed int v6; // ebx@3
  ShortCutWin **v7; // esi@5
  signed int v8; // ebx@5
  int dwDummy; // [sp+14h] [bp-4h]@3

  v3 = this;
  v4 = User::SPStone(&g_kUser) - 1;
  if ( v4 >= 0 )
    User::SetSPStone(&g_kUser, v4);
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_SoulStone);
  StatusWin::SPSoulStoneCoolTimeStart(v3->m_pkStatusWin);
  EffectMgr::CreateAttachEffect(
    &g_kEffectMgr,
    (unsigned int *)&dwDummy,
    "SPSoulStone",
    g_pkMainChar->m_spScene.m_pObject,
    Timer::ms_fCurTime,
    0);
  ShortCutWin::StartSpStonCoolTime(v3->m_pkShortCutWin);
  v5 = v3->m_pkShortCutSubWin;
  v6 = 4;
  do
  {
    ShortCutWin::StartSpStonCoolTime(*v5);
    ++v5;
    --v6;
  }
  while ( v6 );
  ShortCutWin::StartSpStonCoolTime(v3->m_pkShortCutWinV);
  v7 = v3->m_pkShortCutSubWinV;
  v8 = 4;
  do
  {
    ShortCutWin::StartSpStonCoolTime(*v7);
    ++v7;
    --v8;
  }
  while ( v8 );
  ActionWin::StartSpStonCoolTime(v3->m_pkActionWin);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B24E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_USEFAIL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0xE5FCC1DFu);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B2510) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_HP_SOMEONEUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
    EffectMgr::CreateAttachEffect(
      &g_kEffectMgr,
      (unsigned int *)&pvData,
      "HPSoulStone",
      v3->m_spScene.m_pObject,
      Timer::ms_fCurTime,
      0);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B2560) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SOULSTONE_SP_SOMEONEUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
    EffectMgr::CreateAttachEffect(
      &g_kEffectMgr,
      (unsigned int *)&pvData,
      "SPSoulStone",
      v3->m_spScene.m_pObject,
      Timer::ms_fCurTime,
      0);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B25B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_SET_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  Name5 *v4; // eax@1
  int v5; // edx@6
  int v6; // eax@6
  char *v7; // eax@7
  char *v9; // [sp-8h] [bp-28h]@13
  char acName[21]; // [sp+4h] [bp-1Ch]@6
  unsigned int v11; // [sp+1Ch] [bp-4h]@1
  int v12; // [sp+20h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  v4 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)pvData == *(_DWORD *)&v4->n5_name[0]
    && *((_DWORD *)pvData + 1) == *(_DWORD *)&v4->n5_name[4]
    && *((_DWORD *)pvData + 2) == *(_DWORD *)&v4->n5_name[8]
    && *((_DWORD *)pvData + 3) == *(_DWORD *)&v4->n5_name[12]
    && *((_DWORD *)pvData + 4) == *(_DWORD *)&v4->n5_name[16] )
  {
    v5 = *((_DWORD *)pvData + 6);
    *(_DWORD *)acName = *((_DWORD *)pvData + 5);
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 7);
    *(_DWORD *)&acName[16] = *((_DWORD *)pvData + 9);
    v6 = *((_WORD *)pvData + 20);
    *(_DWORD *)&acName[4] = v5;
    *(_DWORD *)&acName[12] = *((_DWORD *)pvData + 8);
    acName[20] = 0;
    switch ( v6 )
    {
      case 2370:
        v7 = TextData::Get(0x67D7C9C6u);
        goto LABEL_18;
      case 2371:
        v7 = TextData::Get(0xDCE7181Du);
        goto LABEL_18;
      case 2373:
        v7 = TextData::Get(0x6D7D63B6u);
        goto LABEL_18;
      case 2374:
        v7 = TextData::Get(0x789E827Fu);
        goto LABEL_18;
      case 2375:
        v7 = TextData::Get(0x3193516Au);
        goto LABEL_18;
      case 2376:
        v7 = TextData::Get(0x62A2B6B6u);
        goto LABEL_18;
      case 2377:
        v9 = "DB Error";
        goto LABEL_19;
      case 2380:
        v7 = TextData2::Get(0xD9103335u);
        goto LABEL_18;
      case 2381:
        v7 = TextData2::Get(0x2164D4D9u);
        goto LABEL_18;
      case 2382:
        v7 = TextData2::Get(0x98CAEA27u);
        goto LABEL_18;
      default:
        v7 = TextData::Get(0x70F1D7EEu);
LABEL_18:
        v9 = v7;
LABEL_19:
        GameFrameWork::VaAddSysMsg(v3, v9);
        break;
      case 2369:
      case 2378:
      case 2379:
        return iRevBytes;
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B2750) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_SET_CONFIRM_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@2
  int v5; // ecx@3
  int v6; // edx@3
  int v7; // ecx@3
  int v8; // edx@3
  char *v9; // eax@3
  void *v10; // eax@3
  MsgBox *pkMsgBox; // [sp+Ch] [bp-148h]@3
  PgMsg::Frame kCancelMsg; // [sp+10h] [bp-144h]@6
  PgMsg::Frame kOkMsg; // [sp+24h] [bp-130h]@6
  char szMessage[256]; // [sp+38h] [bp-11Ch]@3
  char acName[21]; // [sp+138h] [bp-1Ch]@3
  unsigned int v17; // [sp+150h] [bp-4h]@1
  int v18; // [sp+154h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = (PgFrameWork *)this;
  if ( this->m_pkFriendWin->m_bAllow )
  {
    v5 = *((_DWORD *)pvData + 5);
    v6 = *((_DWORD *)pvData + 6);
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 7);
    *(_DWORD *)acName = v5;
    v7 = *((_DWORD *)pvData + 8);
    *(_DWORD *)&acName[4] = v6;
    v8 = *((_DWORD *)pvData + 9);
    *(_DWORD *)&acName[12] = v7;
    *(_DWORD *)&acName[16] = v8;
    acName[20] = 0;
    v9 = TextData::Get(0xD2302531u);
    sprintf(szMessage, v9);
    pkMsgBox = MsgBox::Modeless(MSGBOX_OKCANCEL, szMessage);
    v10 = operator new(0x14u);
    if ( v10 )
    {
      *((_DWORD *)v10 + 4) = 0;
      *((_DWORD *)v10 + 3) = 0;
      *((_DWORD *)v10 + 2) = 0;
      *((_DWORD *)v10 + 1) = 0;
      *(_DWORD *)v10 = 0;
    }
    else
    {
      v10 = 0;
    }
    *(_DWORD *)v10 = *((_DWORD *)pvData + 5);
    *((_DWORD *)v10 + 1) = *((_DWORD *)pvData + 6);
    *((_DWORD *)v10 + 2) = *((_DWORD *)pvData + 7);
    *((_DWORD *)v10 + 3) = *((_DWORD *)pvData + 8);
    *((_DWORD *)v10 + 4) = *((_DWORD *)pvData + 9);
    kOkMsg.m_uiFramelParam = (unsigned int)v10;
    kCancelMsg.m_uiFramelParam = (unsigned int)v10;
    kOkMsg.m_uiFrameMsg = 118;
    kCancelMsg.m_uiFrameMsg = 119;
    MsgBox::SetFrameWorkMsgOnClose(pkMsgBox, v3, &kOkMsg, &kCancelMsg);
  }
  else
  {
    *(_DWORD *)v4 = *((_DWORD *)pvData + 5);
    *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 3);
    *(_QWORD *)&v4[12] = *((_QWORD *)pvData + 4);
    GameFrameWork::NcFriendSetConfirmAck(this, *(Name5 *)v4, 0);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B2890) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_DEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  int v4; // eax@1
  GameFrameWork *v5; // edi@1
  int v6; // ecx@1
  _BYTE v7[20]; // ST00_20@2
  _BYTE v8[20]; // ST00_20@2
  char *v9; // eax@2
  char *v11; // [sp-8h] [bp-2Ch]@3
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v13; // [sp+20h] [bp-4h]@1
  int v14; // [sp+24h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 7);
  *(_DWORD *)acName = *((_DWORD *)pvData + 5);
  *(_DWORD *)&acName[12] = *((_DWORD *)pvData + 8);
  v4 = *((_WORD *)pvData + 20);
  v5 = this;
  *(_DWORD *)&acName[4] = *((_DWORD *)pvData + 6);
  v6 = *((_DWORD *)pvData + 9);
  *(_DWORD *)&acName[8] = v3;
  *(_DWORD *)&acName[16] = v6;
  acName[20] = 0;
  switch ( v4 )
  {
    case 2385:
      *(_DWORD *)v7 = *((_DWORD *)pvData + 5);
      *(_QWORD *)&v7[4] = *((_QWORD *)pvData + 3);
      *(_QWORD *)&v7[12] = *((_QWORD *)pvData + 4);
      FriendWin::DelFriend(v5->m_pkFriendWin, *(Name5 *)v7);
      *(_DWORD *)v8 = *((_DWORD *)pvData + 5);
      *(_QWORD *)&v8[4] = *((_QWORD *)pvData + 3);
      *(_QWORD *)&v8[12] = *((_QWORD *)pvData + 4);
      FriendCallWin::DelFriend(v5->m_pkFriendCallWin, *(Name5 *)v8);
      v9 = TextData::Get(0x7D93A5B4u);
      goto LABEL_6;
    case 2386:
      v11 = " DB Error";
      goto LABEL_7;
    case 2387:
      v9 = TextData::Get(0x789E827Fu);
      goto LABEL_6;
    case 2388:
      return iRevBytes;
    default:
      v9 = TextData::Get(0x8A91E3C9u);
LABEL_6:
      v11 = v9;
LABEL_7:
      GameFrameWork::VaAddSysMsg(v5, v11);
      break;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B29B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_LOGIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  _BYTE v5[20]; // ST00_20@1
  int v6; // eax@1
  int v7; // ecx@1
  int v8; // eax@1
  int v9; // ecx@1
  char *v10; // eax@1
  PgNet *v11; // ecx@1
  __int16 pdata; // [sp+1Ch] [bp-20h]@1
  char acName[21]; // [sp+20h] [bp-1Ch]@1
  unsigned int v15; // [sp+38h] [bp-4h]@1
  int v16; // [sp+3Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = this;
  *(_DWORD *)v4 = *(_DWORD *)pvData;
  *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 12);
  FriendWin::LoginFriend(this->m_pkFriendWin, *(Name5 *)v4);
  *(_DWORD *)v5 = *(_DWORD *)pvData;
  *(_QWORD *)&v5[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v5[12] = *(_QWORD *)((char *)pvData + 12);
  FriendCallWin::LoginFriend(v3->m_pkFriendCallWin, *(Name5 *)v5);
  v6 = *(_DWORD *)pvData;
  v7 = *((_DWORD *)pvData + 1);
  *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
  *(_DWORD *)acName = v6;
  v8 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[4] = v7;
  v9 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[12] = v8;
  *(_DWORD *)&acName[16] = v9;
  acName[20] = 0;
  v10 = TextData::Get(0x3C4C2240u);
  GameFrameWork::VaAddSysMsg(v3, v10);
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPGOOD);
  v11 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  pdata = 21533;
  PgNet::AddNetMsg(v11, &pdata, 2);
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, 0, 0);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B2AB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_LOGOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  _BYTE v5[20]; // ST00_20@1
  int v6; // eax@1
  int v7; // ecx@1
  int v8; // eax@1
  int v9; // ecx@1
  char *v10; // eax@1
  char acName[21]; // [sp+1Ch] [bp-1Ch]@1
  unsigned int v13; // [sp+34h] [bp-4h]@1
  int v14; // [sp+38h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  *(_DWORD *)v4 = *(_DWORD *)pvData;
  *(_QWORD *)&v4[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v4[12] = *(_QWORD *)((char *)pvData + 12);
  FriendWin::LogoutFriend(this->m_pkFriendWin, *(Name5 *)v4);
  *(_DWORD *)v5 = *(_DWORD *)pvData;
  *(_QWORD *)&v5[4] = *(_QWORD *)((char *)pvData + 4);
  *(_QWORD *)&v5[12] = *(_QWORD *)((char *)pvData + 12);
  FriendCallWin::LogoutFriend(v3->m_pkFriendCallWin, *(Name5 *)v5);
  v6 = *(_DWORD *)pvData;
  v7 = *((_DWORD *)pvData + 1);
  *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
  *(_DWORD *)acName = v6;
  v8 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[4] = v7;
  v9 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[12] = v8;
  *(_DWORD *)&acName[16] = v9;
  acName[20] = 0;
  v10 = TextData::Get(0x43522294u);
  GameFrameWork::VaAddSysMsg(v3, v10);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B2B70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_REFUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // esi@1
  int v5; // eax@1
  char *v6; // eax@1
  char acName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = this;
  *(_DWORD *)acName = *(_DWORD *)pvData;
  *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acName[4] = v3;
  v5 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[12] = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[16] = v5;
  acName[20] = 0;
  v6 = TextData::Get(0x1E211B32u);
  GameFrameWork::VaAddSysMsg(v4, v6);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B2BE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_DEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // edi@1
  int v5; // ecx@1
  int v6; // eax@1
  int v7; // ecx@1
  char *v8; // eax@1
  Name5 *v9; // eax@1
  _BYTE v10[20]; // ST00_20@6
  _BYTE v11[20]; // ST00_20@6
  char acName[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v14; // [sp+20h] [bp-4h]@1
  int v15; // [sp+24h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = *(_DWORD *)pvData;
  v4 = this;
  v5 = *((_DWORD *)pvData + 1);
  *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
  *(_DWORD *)acName = v3;
  v6 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[4] = v5;
  v7 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[12] = v6;
  *(_DWORD *)&acName[16] = v7;
  acName[20] = 0;
  v8 = TextData::Get(0x7F957CB5u);
  GameFrameWork::VaAddSysMsg(v4, v8);
  v9 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)pvData != *(_DWORD *)&v9->n5_name[0]
    || *((_DWORD *)pvData + 1) != *(_DWORD *)&v9->n5_name[4]
    || *((_DWORD *)pvData + 2) != *(_DWORD *)&v9->n5_name[8]
    || *((_DWORD *)pvData + 3) != *(_DWORD *)&v9->n5_name[12]
    || *((_DWORD *)pvData + 4) != *(_DWORD *)&v9->n5_name[16] )
  {
    *(_DWORD *)v10 = *(_DWORD *)pvData;
    *(_QWORD *)&v10[4] = *(_QWORD *)((char *)pvData + 4);
    *(_QWORD *)&v10[12] = *(_QWORD *)((char *)pvData + 12);
    FriendWin::DelFriend(v4->m_pkFriendWin, *(Name5 *)v10);
    *(_DWORD *)v11 = *(_DWORD *)pvData;
    *(_QWORD *)&v11[4] = *(_QWORD *)((char *)pvData + 4);
    *(_QWORD *)&v11[12] = *(_QWORD *)((char *)pvData + 12);
    FriendCallWin::DelFriend(v4->m_pkFriendCallWin, *(Name5 *)v11);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B2CD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_FIND_FRIENDS_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edi@1
  GameFrameWork *v4; // ebx@1
  int v5; // eax@1
  int v6; // eax@2
  char *v7; // eax@4
  char *v9; // eax@5
  FriendWin *v10; // ecx@6
  int v11; // esi@7
  PROTO_FRIEND_INFO *v12; // edi@8
  int nFriendCnt; // [sp+8h] [bp-4h]@1
  char *pkFriendInfo; // [sp+18h] [bp+Ch]@1

  v3 = *((_WORD *)pvData + 1);
  v4 = this;
  v5 = *(_WORD *)pvData - 14016;
  nFriendCnt = *((_WORD *)pvData + 1);
  pkFriendInfo = (char *)pvData + 4;
  if ( v5 )
  {
    v6 = v5 - 1;
    if ( !v6 )
    {
      v9 = TextData3::Get(0x7543564u);
      GameFrameWork::AddSysMsg(v4, v9);
      return iRevBytes;
    }
    if ( v6 == 4 )
    {
      v7 = TextData::Get(0x533C1A49u);
      GameFrameWork::AddSysMsg(v4, v7);
      return iRevBytes;
    }
  }
  else
  {
    v10 = this->m_pkFriendWin;
    if ( v10 )
    {
      FriendWin::FriendFindClear(v10);
      FriendWin::ShowFindList(v4->m_pkFriendWin);
      v11 = 0;
      if ( v3 > 0 )
      {
        v12 = (PROTO_FRIEND_INFO *)pkFriendInfo;
        do
        {
          FriendWin::AddFindFriend(v4->m_pkFriendWin, v12, v11++);
          ++v12;
        }
        while ( v11 < nFriendCnt );
      }
    }
  }
  return iRevBytes;
}

//----- (004B2D90) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_UES_FRIEND_POINT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  FriendWin *v4; // ecx@2
  char *v5; // ST08_4@3
  char *v6; // eax@3
  char *v8; // eax@4
  unsigned int v9; // [sp-4h] [bp-10h]@5

  v3 = this;
  switch ( *(_WORD *)pvData )
  {
    case 0x36C0:
      v4 = this->m_pkFriendWin;
      if ( !v4 )
        return iRevBytes;
      FriendWin::SetFriendPoint(v4, *((_WORD *)pvData + 1));
      v5 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*((_WORD *)pvData + 2))->Name;
      v6 = TextData3::Get(0xD8521327u);
      GameFrameWork::VaAddSysMsg(v3, v6);
      return iRevBytes;
    case 0x36C4:
      v8 = TextData::Get(0x20611375u);
      goto LABEL_9;
    case 0x36C1:
      v9 = 122959204;
      goto LABEL_8;
    case 0x36C3:
      v9 = 104673576;
      goto LABEL_8;
    case 0x36C2:
      v9 = 307638574;
LABEL_8:
      v8 = TextData3::Get(v9);
LABEL_9:
      GameFrameWork::AddSysMsg(v3, v8);
      break;
    default:
      return iRevBytes;
  }
  return iRevBytes;
}

//----- (004B2E50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_GET_DIFF_FRIEND_POINT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData3::Get(0x77B1DDD6u);
  GameFrameWork::VaAddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B2E80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_JOIN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@10
  unsigned int v7; // [sp-4h] [bp-10h]@3
  bool bResult; // [sp+8h] [bp-4h]@1

  v3 = this;
  bResult = 0;
  switch ( *((_WORD *)pvData + 2) )
  {
    case 0x991:
      v4 = TextData::Get(0x31480F32u);
      GameFrameWork::VaAddSysMsg(v3, v4);
      bResult = 1;
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, CharCreateClr);
      *(_WORD *)&v3->m_pkMiniMapWin->m_bKQJoined = 257;
      break;
    case 0x992:
      v7 = 2040516820;
      goto LABEL_12;
    case 0x993:
      v7 = -505889715;
      goto LABEL_12;
    case 0x994:
      v7 = -918680015;
      goto LABEL_12;
    case 0x995:
      v7 = 1736795256;
      goto LABEL_12;
    case 0x996:
      v7 = 1854108259;
      goto LABEL_12;
    case 0x997:
      v7 = 1667330002;
      goto LABEL_12;
    case 0x998:
      v7 = -371338450;
      goto LABEL_12;
    case 0x99A:
      v5 = TextData2::Get(0xCF4300E9u);
      goto LABEL_13;
    case 0x999:
      break;
    default:
      v7 = -653932567;
LABEL_12:
      v5 = TextData::Get(v7);
LABEL_13:
      GameFrameWork::VaAddSysMsg(v3, v5);
      break;
  }
  KingdomQuestWin::JoinResult(v3->m_pkKingDomQuest, *(_DWORD *)pvData, bResult);
  return iRevBytes;
}

//----- (004B2F70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_JOIN_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  char *v6; // eax@4

  v3 = this;
  if ( *((_WORD *)pvData + 2) == 2465 )
  {
    v6 = TextData::Get(0xC8D2CB46u);
    GameFrameWork::VaAddSysMsg(v3, v6);
    *(_WORD *)&v3->m_pkMiniMapWin->m_bKQJoined = 256;
  }
  else
  {
    if ( *((_WORD *)pvData + 2) == 2466 )
    {
      v4 = TextData::Get(0x7697DCC5u);
      GameFrameWork::VaAddSysMsg(v3, v4);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B2FD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_SCORE_BOARD_INFO_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v5; // eax@6
  unsigned int v6; // [sp-8h] [bp-Ch]@4

  v3 = this;
  if ( this->m_pkKDTeamScoreWin )
  {
    GameFrameWork::OpenKDTeamScoreWin(this, 1);
    KDTeamScoreWin::SetUseRound(v3->m_pkKDTeamScoreWin, *(_BYTE *)pvData != 0);
    KDTeamScoreWin::SetScore(v3->m_pkKDTeamScoreWin, 0, *(_DWORD *)((char *)pvData + 6));
    KDTeamScoreWin::SetWinFlag(v3->m_pkKDTeamScoreWin, 0, *(_DWORD *)((char *)pvData + 2));
    KDTeamScoreWin::SetScore(v3->m_pkKDTeamScoreWin, KQTT_BLUE, *(_DWORD *)((char *)pvData + 14));
    KDTeamScoreWin::SetWinFlag(v3->m_pkKDTeamScoreWin, 1u, *(_DWORD *)((char *)pvData + 10));
    switch ( *((_WORD *)pvData + 9) )
    {
      case 0x23:
      case 0x26:
        KDTeamScoreWin::SetRound(v3->m_pkKDTeamScoreWin, *((_BYTE *)pvData + 1));
        return iRevBytes;
      case 0x24:
        v6 = -131998703;
        break;
      case 0x2A:
        v6 = -436753625;
        break;
      default:
        return iRevBytes;
    }
    v5 = TextData3::Get(v6);
    KDTeamScoreWin::SetTitleText(v3->m_pkKDTeamScoreWin, v5);
  }
  return iRevBytes;
}

//----- (004B30C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_WINTER_EVENT_2014_SCORE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( this->m_pkKDTeamScoreWin )
  {
    GameFrameWork::OpenKDTeamScoreWin(this, 1);
    KDTeamScoreWin::SetUseRound(v3->m_pkKDTeamScoreWin, 0);
    KDTeamScoreWin::SetScore(v3->m_pkKDTeamScoreWin, 0, *((_DWORD *)pvData + 1));
    KDTeamScoreWin::SetWinFlag(v3->m_pkKDTeamScoreWin, 0, *(_DWORD *)pvData);
    KDTeamScoreWin::SetScore(v3->m_pkKDTeamScoreWin, KQTT_BLUE, *((_DWORD *)pvData + 3));
    KDTeamScoreWin::SetWinFlag(v3->m_pkKDTeamScoreWin, 1u, *((_DWORD *)pvData + 2));
    v4 = TextData3::Get(0xF821DC11u);
    KDTeamScoreWin::SetTitleText(v3->m_pkKDTeamScoreWin, v4);
  }
  return iRevBytes;
}

//----- (004B3150) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_WT_LICENSE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // eax@5
  WeaponTitleWin *v6; // ecx@8
  __int16 v7; // ax@10
  __int16 v8; // dx@10
  int v9; // eax@11
  Item *v10; // eax@12
  int v11; // eax@14
  char *v12; // eax@21
  unsigned int v13; // [sp-4h] [bp-14h]@4
  SoundIndex rkIndex; // [sp+8h] [bp-8h]@21

  v3 = this;
  if ( *(_WORD *)((char *)pvData + 5) != 2489 )
  {
    if ( *(_WORD *)((char *)pvData + 5) == 2491 )
    {
      v13 = -264367844;
      goto LABEL_5;
    }
    if ( *(_WORD *)((char *)pvData + 5) != 2529 )
    {
      v13 = -385076149;
LABEL_5:
      v4 = TextData::Get(v13);
      GameFrameWork::AddSysMsg(v3, v4);
      WeaponTitleWin::SignTitleFailed(v3->m_pkWeaponTitleWin, (ITEM_INVEN *)pvData);
      return iRevBytes;
    }
  }
  if ( *((_BYTE *)pvData + 4) )
    v6 = this->m_pkWeaponTitleWin;
  else
    v6 = (WeaponTitleWin *)this->m_pkWeaponTitleDeleteWin;
  v7 = *((_WORD *)pvData + 1);
  v8 = *((_WORD *)pvData + 1) >> 10;
  if ( v8 == 9 )
  {
    v9 = v7 & 0x3FF;
    if ( (unsigned int)v9 < 0xC0 )
    {
      v10 = g_kInventory.m_aspInv[v9].m_pObject;
      goto LABEL_16;
    }
  }
  else
  {
    if ( v8 == 8 )
    {
      v11 = v7 & 0x3FF;
      if ( (unsigned int)v11 < 0x1E )
      {
        v10 = g_kInventory.m_aspEquip[v11].m_pObject;
LABEL_16:
        if ( v10 )
          WeaponTitleWin::SignTitleSuccess(v6, (ITEM_INVEN *)pvData, v10);
        goto LABEL_18;
      }
    }
  }
LABEL_18:
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::On_NC_WT_LICENSE_ACK(&kTutorialMgr);
  v12 = TextData::Get(0x746C6EE7u);
  GameFrameWork::AddSysMsg(v3, v12);
  rkIndex.m_dwIndex = 3;
  rkIndex.m_acFilename = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  return iRevBytes;
}
// A98300: using guessed type int _local static guard_;

//----- (004B3280) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_WT_GRADE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x85F9C1CFu);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B32B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_MESSAGENOTICE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@3
  char *v5; // eax@11
  unsigned int v7; // [sp-4h] [bp-8h]@4

  v3 = this;
  if ( this->m_pkGuildWarInformWin )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkGuildWarInformWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkGuildWarInformWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v4 = *(_DWORD *)pvData;
  if ( *(_DWORD *)pvData == 8224 )
  {
    v7 = -2002760365;
LABEL_11:
    v5 = TextData2::Get(v7);
    GuildWarInformWin::SetText(v3->m_pkGuildWarInformWin, v5);
    return iRevBytes;
  }
  if ( v4 == 8227 )
  {
    v7 = -568456976;
    goto LABEL_11;
  }
  if ( v4 == 8225 )
  {
    v7 = 237306620;
    goto LABEL_11;
  }
  if ( v4 == 8226 )
  {
    v7 = -1125472595;
    goto LABEL_11;
  }
  return iRevBytes;
}

//----- (004B3340) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_REWARD_NEED_SELECT_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData::Get(0x90FCD9C7u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B3370) --------------------------------------------------------
void __thiscall GameFrameWork::NcReportAddReq(GameFrameWork *this, Name5 sHarmer, char *cReportType, char *cReason)
{
  char *v4; // ebx@1
  GameFrameWork *v5; // esi@1
  char *v6; // eax@1
  char *v7; // edi@1
  __int16 v8; // dx@1
  char v9; // cl@2
  signed int v10; // eax@3
  char *v11; // eax@5
  PgNet *v12; // ecx@7
  unsigned int v13; // eax@7
  unsigned int v14; // eax@9
  NETCOMMAND netcmd; // [sp+Ch] [bp-11Ch]@7
  int nChatLogSize; // [sp+10h] [bp-118h]@4
  char reason[256]; // [sp+14h] [bp-114h]@9
  char reportType[16]; // [sp+114h] [bp-14h]@7
  unsigned int v19; // [sp+124h] [bp-4h]@1
  int v20; // [sp+128h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v4 = cReason;
  v5 = this;
  v6 = this->m_chatLog;
  v7 = cReportType;
  v8 = (_WORD)this + 2649;
  do
    v9 = *v6++;
  while ( v9 );
  v10 = (unsigned __int16)((_WORD)v6 - v8);
  if ( v10 >= 2048 )
  {
    nChatLogSize = 2048;
  }
  else
  {
    nChatLogSize = v10;
    if ( !(_WORD)v10 )
    {
      v11 = TextData::Get(0xDE3C2B23u);
      MsgBox::Modeless(MSGBOX_OK, v11);
      return;
    }
  }
  v12 = (PgNet *)v5->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = -32767;
  PgNet::AddNetMsg(v12, &netcmd, 2);
  PgNet::AddNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, &sHarmer, 20);
  *(_DWORD *)reportType = 0;
  *(_DWORD *)&reportType[4] = 0;
  *(_DWORD *)&reportType[8] = 0;
  *(_DWORD *)&reportType[12] = 0;
  v13 = strlen(v7);
  if ( (signed int)v13 >= 16 )
    v13 = 16;
  memcpy(reportType, v7, v13);
  PgNet::AddNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, reportType, 16);
  memset(reason, 0, 0x100u);
  v14 = strlen(v4);
  if ( (signed int)v14 >= 256 )
    v14 = 256;
  memcpy(reason, v4, v14);
  PgNet::AddNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, reason, 256);
  PgNet::AddNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, &nChatLogSize, 2);
  PgNet::AddNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, v5->m_chatLog, (unsigned __int16)nChatLogSize);
  PgNet::SendNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, 0, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B3510) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_REPORT_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  GameFrameWork *v4; // edi@1
  ReportWin *v5; // ecx@1
  char *v6; // eax@14
  unsigned int v8; // [sp-4h] [bp-10h]@7
  __int16 pdata; // [sp+8h] [bp-4h]@15

  v3 = pvData;
  v4 = this;
  v5 = this->m_pkReportWin;
  if ( *((_WORD *)pvData + 12) == 3904 )
  {
    if ( v5 )
      ReportWin::SetReportAdd(v5, *((_DWORD *)pvData + 5));
  }
  else
  {
    if ( v5 )
      ReportWin::SetReportAddErr(v5);
    switch ( *((_WORD *)v3 + 12) )
    {
      case 0xF41:
        v8 = -316401549;
        goto LABEL_14;
      case 0xF42:
        v8 = 236885669;
        goto LABEL_14;
      case 0xF58:
        v8 = -723960768;
        goto LABEL_14;
      case 0xF43:
        v8 = 1751116755;
        goto LABEL_14;
      case 0xF44:
        v8 = 1735648986;
        goto LABEL_14;
      case 0xF45:
        v8 = -1294866470;
        goto LABEL_14;
      case 0xF46:
        v8 = -1228937183;
LABEL_14:
        v6 = TextData::Get(v8);
        MsgBox::Modeless(MSGBOX_OK, v6);
        break;
      default:
        break;
    }
  }
  pdata = -32763;
  PgNet::AddNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, &pdata, 2);
  PgNet::SendNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, (char *)&pvData + 3, 1);
  return iRevBytes;
}

//----- (004B3610) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_REPORT_GET_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  __int16 v4; // ax@1
  ReportWin *v5; // ecx@2
  char *v6; // eax@3
  char *v7; // eax@6
  char *v8; // eax@7
  char *v9; // eax@8
  char *v10; // eax@8
  ReportWin *v11; // ecx@12
  char *v12; // eax@15
  char *v13; // eax@15
  char *v14; // eax@17
  char temp[128]; // [sp+8h] [bp-84h]@9
  unsigned int v17; // [sp+88h] [bp-4h]@1
  int v18; // [sp+8Ch] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = this;
  ReportWin::ShowOKButton(this->m_pkReportWin, 1);
  v4 = *(_WORD *)pvData;
  if ( *(_WORD *)pvData == 3904 )
  {
    v5 = v3->m_pkReportWin;
    if ( v5 )
    {
      ReportWin::SetMode(v5, REPORT_PROCESS);
      ReportWin::SetRegID(v3->m_pkReportWin, *(_DWORD *)((char *)pvData + 2));
      v6 = TextData::Get(0xE9444134u);
      ((void (__stdcall *)(char *))v3->m_pkReportWin->m_pkCharRegIDNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v6);
      if ( *((_BYTE *)pvData + 6) )
      {
        if ( *((_BYTE *)pvData + 6) == 1 )
        {
          ReportWin::ShowOKButton(v3->m_pkReportWin, 0);
          v8 = TextData::Get(0x343D8D8Eu);
          ReportWin::SetProcessText(v3->m_pkReportWin, v8);
        }
        else
        {
          if ( *((_BYTE *)pvData + 6) == 2 )
          {
            ReportWin::ShowOKButton(v3->m_pkReportWin, 0);
            v7 = TextData::Get(0xE9F94832u);
            ReportWin::SetProcessText(v3->m_pkReportWin, v7);
          }
        }
      }
      else
      {
        v9 = TextData::Get(0x2E525785u);
        ReportWin::SetProcessText(v3->m_pkReportWin, v9);
        v10 = TextData::Get(0x31363B3Bu);
        ReportWin::SetOKButText(v3->m_pkReportWin, v10);
      }
      memcpy(temp, (char *)pvData + 7, sizeof(temp));
      ReportWin::SetReportInfoInput(v3->m_pkReportWin, temp);
      ((void (__stdcall *)(_DWORD))v3->m_pkReportWin->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      if ( !(unsigned __int8)((int (*)(void))v3->m_pkReportWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkReportWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  else
  {
    if ( v4 == 3936 )
    {
      v11 = v3->m_pkReportWin;
      if ( v11 )
      {
        ReportWin::SetMode(v11, 0);
        if ( !(unsigned __int8)((int (*)(void))v3->m_pkReportWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkReportWin->baseclass_0.baseclass_0.baseclass_0);
        v12 = TextData::Get(0xE9013C3Bu);
        ReportWin::SetOKButText(v3->m_pkReportWin, v12);
        ((void (__stdcall *)(signed int))v3->m_pkReportWin->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        v13 = TextData::Get(0xECF14A2Eu);
        ((void (__stdcall *)(char *))v3->m_pkReportWin->m_pkCharRegIDNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v13);
      }
    }
    else
    {
      if ( v4 == 3928 )
      {
        v14 = TextData::Get(0x38443D4Cu);
        MsgBox::Modeless(MSGBOX_OK, v14);
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B3870) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_REPORT_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  GameFrameWork *v4; // esi@1
  ReportWin *v5; // ecx@2
  char *v6; // eax@4
  PgNet *v7; // ecx@4
  int result; // eax@4
  char *v9; // eax@5
  __int16 pdata; // [sp+8h] [bp-4h]@4

  v3 = pvData;
  v4 = this;
  if ( *((_WORD *)pvData + 2) == 3904 )
  {
    v5 = this->m_pkReportWin;
    if ( v5 )
    {
      ReportWin::SetMode(v5, REPORT_PROCESS);
      ReportWin::SetRegID(v4->m_pkReportWin, *(_DWORD *)v3);
    }
    v6 = TextData::Get(0x23C3216u);
    MsgBox::Modeless(MSGBOX_OK, v6);
    v7 = (PgNet *)v4->m_spWorldMgrNet.m_pObject;
    pdata = -32763;
    PgNet::AddNetMsg(v7, &pdata, 2);
    PgNet::SendNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, (char *)&pvData + 3, 1);
    result = iRevBytes;
  }
  else
  {
    v9 = TextData::Get(0xC3E8E91Au);
    MsgBox::Modeless(MSGBOX_OK, v9);
    result = iRevBytes;
  }
  return result;
}

//----- (004B3910) --------------------------------------------------------
void __thiscall GameFrameWork::NcPrisonAddGMReq(GameFrameWork *this, Name5 sImprison, unsigned __int16 nMinute, char *sReason, char *sRemark)
{
  GameFrameWork *v5; // esi@1
  PgNet *v6; // ecx@1
  __int16 pdata; // [sp+8h] [bp-70h]@1
  PROTO_NC_PRISON_ADD_GM_REQ kProto; // [sp+Ch] [bp-6Ch]@1
  unsigned int v9; // [sp+74h] [bp-4h]@1
  int v10; // [sp+78h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v5 = this;
  *(_QWORD *)&kProto.sImprison.n5_name[0] = *(_QWORD *)&sImprison;
  *(_QWORD *)&kProto.sImprison.n5_name[8] = *(_QWORD *)&sImprison.n5_name[8];
  *(_DWORD *)&kProto.sImprison.n5_name[16] = *(_DWORD *)&sImprison.n5_name[16];
  kProto.nMinute = nMinute;
  sprintf(kProto.sReason, "%s");
  sprintf(kProto.sRemark, "%s");
  v6 = (PgNet *)v5->m_spWorldMgrNet.m_pObject;
  pdata = 31745;
  PgNet::AddNetMsg(v6, &pdata, 2);
  PgNet::SendNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 102);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B39B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PRISON_ADD_GM_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  char *v4; // eax@11
  unsigned int v6; // [sp-4h] [bp-8h]@3

  v3 = *((_WORD *)pvData + 10);
  if ( (_WORD)v3 != 3456 )
  {
    switch ( v3 )
    {
      case 3457:
        v6 = -2139448214;
        goto LABEL_11;
      case 3458:
        v6 = 1546358;
        goto LABEL_11;
      case 3459:
        v6 = 1300797298;
        goto LABEL_11;
      case 3460:
        v6 = 1384682853;
        goto LABEL_11;
      case 3461:
        v6 = -991493666;
        goto LABEL_11;
      case 3462:
        v6 = -1068421346;
        goto LABEL_11;
      case 3463:
        v6 = 1793651919;
        goto LABEL_11;
      case 3464:
        v6 = 2056757980;
LABEL_11:
        v4 = TextData::Get(v6);
        MsgBox::Modeless(MSGBOX_OK, v4);
        break;
      default:
        return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B3A60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PRISON_OK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // eax@1
  PrisonTimeWin *v5; // ecx@1
  char *v6; // eax@5
  PgNet *v7; // ecx@6
  __int16 pdata; // [sp+8h] [bp-108h]@6
  char msg[256]; // [sp+Ch] [bp-104h]@1
  unsigned int v11; // [sp+10Ch] [bp-4h]@1
  int v12; // [sp+110h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  msg[0] = 0;
  memset(&msg[1], 0, 0xFFu);
  v4 = TextData::Get(0x3A5A878Du);
  sprintf(msg, v4);
  MsgBox::Modeless(MSGBOX_OK, msg);
  v5 = v3->m_pkPrisonTimeWin;
  if ( v5 )
    PrisonTimeWin::ResetTime(v5, 60 * *(_WORD *)pvData);
  if ( *(_WORD *)pvData )
  {
    if ( g_kParty.m_uiTotalMember )
    {
      v7 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
      pdata = 14346;
      PgNet::SendNetMsg(v7, &pdata, 2);
    }
    else
    {
      v6 = TextData::Get(0x7D9CEEE9u);
      GameFrameWork::AddSysMsg(v3, v6);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B3B50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PRISON_UNDOING_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  char *v3; // eax@1

  v3 = TextData::Get(0x88939FC3u);
  MsgBox::Modeless(MSGBOX_OK, v3);
  return iRevBytes;
}

//----- (004B3B70) --------------------------------------------------------
void __thiscall GameFrameWork::NcPrisonAlterGMReq(GameFrameWork *this, Name5 sImprison, unsigned __int16 nMinute, char *sReason, char *sRemark)
{
  GameFrameWork *v5; // esi@1
  PgNet *v6; // ecx@1
  __int16 pdata; // [sp+8h] [bp-70h]@1
  PROTO_NC_PRISON_ALTER_GM_REQ kProto; // [sp+Ch] [bp-6Ch]@1
  unsigned int v9; // [sp+74h] [bp-4h]@1
  int v10; // [sp+78h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v5 = this;
  *(_QWORD *)&kProto.sImprison.n5_name[0] = *(_QWORD *)&sImprison;
  *(_QWORD *)&kProto.sImprison.n5_name[8] = *(_QWORD *)&sImprison.n5_name[8];
  *(_DWORD *)&kProto.sImprison.n5_name[16] = *(_DWORD *)&sImprison.n5_name[16];
  kProto.nMin = nMinute;
  sprintf(kProto.sReason, "%s");
  sprintf(kProto.sRemark, "%s");
  v6 = (PgNet *)v5->m_spWorldMgrNet.m_pObject;
  pdata = 31753;
  PgNet::AddNetMsg(v6, &pdata, 2);
  PgNet::SendNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 102);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B3C10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PRISON_ALTER_GM_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  char *v4; // eax@10
  unsigned int v6; // [sp-4h] [bp-8h]@3

  v3 = *((_WORD *)pvData + 10);
  if ( (_WORD)v3 != 3488 )
  {
    switch ( v3 )
    {
      case 3489:
        v6 = -1987780414;
        goto LABEL_10;
      case 3490:
        v6 = -454774867;
        goto LABEL_10;
      case 3491:
        v6 = -2071155248;
        goto LABEL_10;
      case 3492:
        v6 = -2105560368;
        goto LABEL_10;
      case 3493:
        v6 = -285727697;
        goto LABEL_10;
      case 3494:
        v6 = -1068421346;
        goto LABEL_10;
      case 3463:
        v6 = 1793651919;
LABEL_10:
        v4 = TextData::Get(v6);
        MsgBox::Modeless(MSGBOX_OK, v4);
        break;
      default:
        return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B3CE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_WING_SAVE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // esi@1
  char *v6; // eax@6
  unsigned int v7; // [sp-4h] [bp-8h]@5
  char *v8; // [sp-4h] [bp-8h]@16

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( *(_WORD *)pvData == 4417 )
  {
    if ( *TextData::Get(0x4C44427Du) )
      v8 = TextData::Get(0x4C44427Du);
    else
      v8 = "Unknown text";
    GameFrameWork::AddSysMsg(v4, v8);
    v4->m_pkWingStoneWin->m_bCheckPossibility = 1;
    return iRevBytes;
  }
  if ( v3 == 4419 )
  {
    if ( !*TextData::Get(0x68A78683u) )
    {
      GameFrameWork::AddSysMsg(v4, "Unknown Text");
      return iRevBytes;
    }
    v7 = 1755809411;
    goto LABEL_6;
  }
  if ( v3 == 4420 )
  {
    if ( !*TextData::Get(0x3E4F2E49u) )
    {
      GameFrameWork::AddSysMsg(v4, "Unknown Text");
      return iRevBytes;
    }
    v7 = 1045376585;
LABEL_6:
    v6 = TextData::Get(v7);
    GameFrameWork::AddSysMsg(v4, v6);
    return iRevBytes;
  }
  if ( v3 != 4422 )
    return iRevBytes;
  if ( *TextData::Get(0x85BA8AEDu) )
  {
    v7 = -2051372307;
    goto LABEL_6;
  }
  GameFrameWork::AddSysMsg(v4, "Unknown Text");
  return iRevBytes;
}

//----- (004B3E00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_WING_FLY_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // esi@1
  char *v6; // eax@21
  unsigned int v7; // [sp-4h] [bp-8h]@5

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( *(_WORD *)pvData == 4417 )
  {
    WingStoneWin::SetFirstGoddessWingUse(this->m_pkWingStoneWin, 1);
    v4->m_pkWingStoneWin->m_uiDescript = v4->m_pkWingStoneWin->m_uiMemorySlot;
    if ( !*TextData::Get(0xA39E7DA5u) )
    {
      GameFrameWork::AddSysMsg(v4, "Unknown Text");
      return iRevBytes;
    }
    v7 = -1549894235;
    goto LABEL_21;
  }
  if ( v3 == 4420 )
  {
    if ( !*TextData::Get(0x3E4F2E49u) )
    {
      GameFrameWork::AddSysMsg(v4, "Unknown Text");
      return iRevBytes;
    }
    v7 = 1045376585;
LABEL_21:
    v6 = TextData::Get(v7);
    GameFrameWork::AddSysMsg(v4, v6);
    return iRevBytes;
  }
  if ( v3 == 4422 )
  {
    if ( !*TextData::Get(0x85BA8AEDu) )
    {
      GameFrameWork::AddSysMsg(v4, "Unknown Text");
      return iRevBytes;
    }
    v7 = -2051372307;
    goto LABEL_21;
  }
  if ( v3 == 4421 )
  {
    if ( !*TextData::Get(0x988C9578u) )
    {
      GameFrameWork::AddSysMsg(v4, "Unknown");
      return iRevBytes;
    }
    v7 = -1735617160;
    goto LABEL_21;
  }
  if ( v3 == 4419 )
  {
    if ( !*TextData::Get(0x7AAFCF08u) )
    {
      GameFrameWork::AddSysMsg(v4, "Unknown Text");
      return iRevBytes;
    }
    v7 = 2058342152;
    goto LABEL_21;
  }
  return iRevBytes;
}

//----- (004B3F70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FUNICHER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  bool v4; // zf@1
  char *v5; // ebx@2
  char v6; // al@3
  int v7; // edx@3
  char v8; // ST10_1@3
  int v9; // eax@3
  int v10; // eax@4
  unsigned int v11; // eax@5
  void *v12; // eax@7
  void *v13; // edi@7
  const char *v14; // eax@8
  int v15; // ecx@15
  int key; // [sp+18h] [bp-28h]@4
  char *v18; // [sp+1Ch] [bp-24h]@4
  char *v19; // [sp+20h] [bp-20h]@4
  char *v20; // [sp+24h] [bp-1Ch]@4
  NiPoint3 ObjPos; // [sp+28h] [bp-18h]@3
  GameFrameWork *thisa; // [sp+34h] [bp-Ch]@1
  float Angle; // [sp+38h] [bp-8h]@3
  int i; // [sp+3Ch] [bp-4h]@1

  v3 = pvData;
  v4 = *(_BYTE *)pvData == 0;
  thisa = this;
  i = 0;
  if ( !v4 )
  {
    v5 = (char *)pvData + 10;
    do
    {
      v6 = v5[12];
      v7 = *((_WORD *)v5 - 3);
      ObjPos.x = *((float *)v5 - 1);
      ObjPos.y = *(float *)v5;
      ObjPos.z = *((float *)v5 + 1);
      v8 = v6;
      v9 = *((_WORD *)v5 - 4);
      Angle = *((float *)v5 + 2);
      if ( MiniHouseIndoor::AddObject(&g_kWorld.m_MiniHouseIndoorMode, v9, v7, &ObjPos, Angle, v8, 1) != 1 )
      {
        v18 = &byte_9788EB;
        v19 = &byte_9788EB;
        v20 = &byte_9788EB;
        key = -1243729871;
        v10 = *(_DWORD *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 56);
        if ( v10 )
          v11 = *(_DWORD *)(v10 + 40);
        else
          v11 = 0;
        v12 = bsearch(&key, TextData2::ms_apkNode, v11, 0x10u, TextDataNodeComp);
        v13 = v12;
        if ( v12 )
        {
          if ( strcmp(*((const char **)v12 + 2), "None") )
            SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v13 + 2));
          if ( strcmp(*((const char **)v13 + 3), "None") )
            SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v13 + 3));
          v14 = (const char *)*((_DWORD *)v13 + 1);
        }
        else
        {
          v14 = &byte_9788EB;
        }
        GameFrameWork::AddSysMsg(thisa, v14);
        v3 = pvData;
      }
      v15 = *(_BYTE *)v3;
      v5 += 21;
      ++i;
    }
    while ( i < v15 );
  }
  if ( *((_BYTE *)v3 + 1) == -1 )
  {
    BYTE3(pvData) = 1;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x1Du, (char *)&pvData + 3, 1);
  }
  return iRevBytes;
}
// A94344: using guessed type int ITableBase_TextDataType2_TextData2___ms_pkTable;

//----- (004B4100) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_ARRANGEMODE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  char *v3; // eax@3
  PgWin *v5; // esi@5

  if ( *(_BYTE *)pvData == 1 )
  {
    MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_NORMAL);
    if ( nowState == 1 )
    {
      v3 = TextData2::Get(0x728986AAu);
      MiniHouseIndoor::SetMsgBox(&g_kWorld.m_MiniHouseIndoorMode, v3);
      return iRevBytes;
    }
  }
  else
  {
    if ( nowState == 1 )
    {
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, pkWin);
      v5 = pkWin;
      if ( pkWin )
      {
        if ( !InterlockedDecrement((volatile LONG *)&pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v5 )
            v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
        }
        pkWin = 0;
      }
    }
    MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_NORMAL);
  }
  return iRevBytes;
}

//----- (004B41A0) --------------------------------------------------------
void __thiscall GameFrameWork::SendMHVisitReq(GameFrameWork *this, unsigned __int16 mh_hnd, char *PassWord)
{
  char *v3; // eax@1
  GameFrameWork *v4; // esi@1
  char v5; // cl@2
  char *v6; // eax@6
  PROTO_NC_MINIHOUSE_VISIT_REQ kProto; // [sp+8h] [bp-10h]@1
  unsigned int v8; // [sp+14h] [bp-4h]@1
  int v9; // [sp+18h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  kProto.mh_hnd = mh_hnd;
  *(_DWORD *)&kProto.password[0] = 0;
  *(_DWORD *)&kProto.password[4] = 0;
  kProto.password[8] = 0;
  v3 = PassWord;
  v4 = this;
  do
  {
    v5 = *v3;
    v3[kProto.password - PassWord] = *v3;
    ++v3;
  }
  while ( v5 );
  if ( unk_AA2801 && unk_AA2800 && CNSTimer_Interval::IsRun_GetCount(&stru_AA2804, Timer::ms_fCurTime) )
  {
    CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
    unk_AA2801 = 0;
    v6 = TextData::Get(0x4241667Au);
    GameFrameWork::AddSysMsg(v4, v6);
    GameFrameWork::NcMiscHideExceptMeCmd(v4, 0);
  }
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x10u, &kProto, 11);
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B4260) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_MAXENTERNUM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@1
  GameFrameWork *v4; // esi@1
  mhSettingWin *v5; // edi@1
  char *v6; // eax@1

  v3 = pvData;
  v4 = this;
  byte_AA508C = *(_BYTE *)pvData;
  this->m_pkMHInfoWin->m_MaxPersonCount = *(_BYTE *)pvData;
  v5 = this->m_pkMHSettingWin;
  _itoa(*(_BYTE *)v3, (char *)&pvData, 10);
  ((void (__stdcall *)(_DWORD))v5->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&pvData);
  mhInfoWin::RefreshInfoPage(v4->m_pkMHInfoWin);
  v6 = TextData2::Get(0x1F3C4B8Eu);
  GameFrameWork::AddSysMsg(v4, v6);
  return iRevBytes;
}
// AA508C: using guessed type char byte_AA508C;

//----- (004B42E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_NOTIFY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMHInfoWin->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)pvData + 1);
  ((void (__stdcall *)(_DWORD))v3->m_pkMHSettingWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)((char *)pvData + 1);
  v4 = TextData2::Get(0x6B858CD0u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B4340) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_ITEM_INFO_OPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@4
  unsigned int v6; // [sp-4h] [bp-Ch]@2

  v3 = this;
  if ( *(_BYTE *)pvData )
    v6 = 658849686;
  else
    v6 = -487893969;
  v4 = TextData2::Get(v6);
  GameFrameWork::AddSysMsg(v3, v4);
  v3->m_pkMHSettingWin->m_spCheckBox[1]->m_bCheck = *(_BYTE *)pvData != 0;
  v3->m_pkMHInfoWin->m_bItemView = *(_BYTE *)pvData != 0;
  return iRevBytes;
}

//----- (004B43A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_MH_FURNITURE_ENDURE_KIT_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Item *v4; // eax@2
  mhObject *v5; // eax@3
  ResElement *v6; // ecx@4
  NiActorManager *v7; // edx@6
  NiNode *v8; // ebx@7
  NiPoint3 *v9; // esi@9
  float v10; // ST20_4@9
  _BYTE v11[12]; // ST10_12@9
  _BYTE v12[12]; // ST04_12@9
  char *v13; // eax@10
  mhRepairObjWin *v14; // ecx@13
  NiPoint3 result; // [sp+14h] [bp-Ch]@9
  float pvDataa; // [sp+2Ch] [bp+Ch]@9

  v3 = this;
  if ( *((_WORD *)pvData + 2) == 6768 )
  {
    v4 = mhEditRoomWin::GetItemByObjID(this->m_pkMHEditRoomWin, this->m_pkMHRepairWin->m_ID);
    if ( !v4 )
      goto LABEL_13;
    *(_DWORD *)((char *)&v4->m_kStruct.itemattr.amulet.UpgradeOption.optionlist[3].itemoption_value + 1) = *(_DWORD *)pvData;
    v5 = mhObjectManager::GetObjectA(&stru_AA4FA8, v3->m_pkMHRepairWin->m_ID);
    if ( v5 )
    {
      v6 = v5->m_pkResource;
      if ( v6 )
      {
        if ( v6->m_bIsCanAnimation && (v7 = v6->m_pActorMgr.m_pObject) != 0 )
          v8 = (NiNode *)v7->m_spNIFRoot.m_pObject;
        else
          v8 = v6->m_pNiNode.m_pObject;
        pvDataa = Timer::ms_fCurTime;
        v9 = mhObject::GetPos(v5, &result);
        v10 = EffectMgr::CalculateEffScaleRatio(&g_kEffectMgr, "InMyHome_Repair01", v8);
        *(_DWORD *)v11 = (_DWORD)NiPoint3::UNIT_Y.x;
        *(_QWORD *)&v11[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
        *(_DWORD *)v12 = LODWORD(v9->x);
        *(_QWORD *)&v12[4] = *(_QWORD *)&v9->y;
        EffectMgr::CreateEffect(&g_kEffectMgr, "InMyHome_Repair01", *(NiPoint3 *)v12, *(NiPoint3 *)v11, pvDataa, v10);
      }
    }
    v13 = TextData2::Get(0x2F2F8D8Cu);
  }
  else
  {
    v13 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 2));
  }
  GameFrameWork::AddSysMsg(v3, v13);
LABEL_13:
  mhRepairObjWin::RepairEnd(v3->m_pkMHRepairWin);
  MiniHouseIndoor::SetRepairObjID(&g_kWorld.m_MiniHouseIndoorMode, 0xFFFFu);
  v14 = v3->m_pkMHRepairWin;
  if ( v14 )
    mhRepairObjWin::SetRepairObjID(v14, 0xFFFFu);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B4500) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_GUILD_STORAGEOPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  CClientGuild *v4; // eax@3
  CClientGuild *v5; // esi@3
  unsigned __int64 v6; // ST00_8@6
  GuildTournamentStorageWin *v7; // eax@6
  char *v9; // eax@9

  v3 = this;
  if ( *(_WORD *)pvData != 4672 )
  {
    if ( *(_WORD *)pvData == 4674 )
    {
      v9 = TextData::Get(0x76816B99u);
      GameFrameWork::AddSysMsg(v3, v9);
    }
    return iRevBytes;
  }
  if ( GuildTournamentStorage::SetContents((PROTO_NC_GUILD_STORAGEOPEN_ACK *)pvData) != 1 )
    return iRevBytes;
  v4 = GuildTask::GetGuild();
  v5 = v4;
  if ( v4 )
  {
    LODWORD(v4->m_iGuildToken) = *(_DWORD *)((char *)pvData + 10);
    HIDWORD(v4->m_iGuildToken) = *(_DWORD *)((char *)pvData + 14);
  }
  if ( GuildTask::GetGuildTournamentStorageWin() )
  {
    v6 = v5->m_iGuildToken;
    v7 = GuildTask::GetGuildTournamentStorageWin();
    GuildTournamentStorageWin::SetToken(v7, v6);
  }
  GameFrameWork::OnOpenGuildTournamentStorage(v3);
  return iRevBytes;
}

//----- (004B45A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_EVENT_L20_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@4
  int result; // eax@4
  char *v6; // eax@6
  char *v7; // eax@9
  unsigned int v8; // [sp-4h] [bp-8h]@5

  v3 = this;
  if ( *(_WORD *)((char *)pvData + 1) == 4744 )
  {
    if ( this->m_pkGuildWarInformWin )
    {
      v7 = TextData::Get(0x1AA78782u);
      GuildWarInformWin::SetText(v3->m_pkGuildWarInformWin, v7);
    }
    result = iRevBytes;
  }
  else
  {
    if ( *(_WORD *)((char *)pvData + 1) == 4745 )
    {
      v8 = -1225524766;
    }
    else
    {
      if ( *(_WORD *)((char *)pvData + 1) != 4746 )
      {
        v4 = fs("Error : %d\n");
        GameFrameWork::AddSysMsg(v3, v4);
        return iRevBytes;
      }
      v8 = -1528811717;
    }
    v6 = TextData::Get(v8);
    GameFrameWork::AddSysMsg(v3, v6);
    result = iRevBytes;
  }
  return result;
}

//----- (004B4630) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_SOMEONEUSE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  int v4; // edi@1
  int v5; // esi@1
  Char *v6; // ebx@1
  int v7; // esi@2
  int v8; // edx@5
  int v9; // eax@10
  _BYTE v10[12]; // ST10_12@10
  _BYTE v11[12]; // ST04_12@10

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = *((_WORD *)pvData + 5);
  v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v6 = v3;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          v4) )
  {
    if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
    {
      v8 = *(_DWORD *)(v5 + 196);
      if ( *(_DWORD *)(v8 + 4 * v4) )
        v7 = *(_DWORD *)(v8 + 4 * v4);
      else
        v7 = 0;
    }
    else
    {
      v7 = 0;
    }
  }
  else
  {
    v7 = 0;
  }
  if ( v6 && v7 )
  {
    v9 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[6].Deaffect)(v6);
    *(_DWORD *)v10 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v10[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v11 = *(_DWORD *)v9;
    *(_QWORD *)&v11[4] = *(_QWORD *)(v9 + 4);
    EffectMgr::CreateEffect(
      &g_kEffectMgr,
      (char *)(v7 + 2),
      *(NiPoint3 *)v11,
      *(NiPoint3 *)v10,
      Timer::ms_fCurTime,
      1.0);
  }
  return 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B4700) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_DISMANTLE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  MakeKarisWin *v4; // edi@2
  char *v5; // eax@2
  int result; // eax@2
  char *v7; // eax@3

  v3 = this;
  if ( *(_WORD *)pvData == 5760 )
  {
    v4 = this->m_pkMakeKarisWin;
    MakeKarisWin::ClearSlot(this->m_pkMakeKarisWin);
    v4->m_eState = 0;
    v5 = TextData::Get(0x2E988872u);
    GameFrameWork::AddSysMsg(v3, v5);
    result = iRevBytes;
  }
  else
  {
    v7 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v7);
    result = iRevBytes;
    v3->m_pkMakeKarisWin->m_eState = 0;
  }
  return result;
}

//----- (004B4780) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  __int16 v4; // cx@1
  char *v5; // eax@4
  char *v6; // eax@4
  char *v7; // eax@4
  int result; // eax@4
  char *v9; // eax@5
  int v10; // eax@6
  int v11; // ecx@6
  int v12; // eax@6
  int v13; // ecx@6
  char *v14; // eax@6
  char *v15; // eax@6
  char acTime[64]; // [sp+4h] [bp-5Ch]@4
  char acName[21]; // [sp+44h] [bp-1Ch]@6
  unsigned int v18; // [sp+5Ch] [bp-4h]@1
  int v19; // [sp+60h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  v4 = *(_WORD *)pvData;
  if ( *(_WORD *)pvData == 5952 || v4 == 5969 )
  {
    HolyPromiseWin::SetHignHolyPromise(v3->m_pkHolyPromiseWin, (PROTO_HOLY_PROMISE_INFO *)((char *)pvData + 2));
    v10 = *(_DWORD *)((char *)pvData + 2);
    v11 = *(_DWORD *)((char *)pvData + 6);
    *(_DWORD *)&acName[8] = *(_DWORD *)((char *)pvData + 10);
    *(_DWORD *)acName = v10;
    v12 = *(_DWORD *)((char *)pvData + 14);
    *(_DWORD *)&acName[4] = v11;
    v13 = *(_DWORD *)((char *)pvData + 18);
    *(_DWORD *)&acName[12] = v12;
    *(_DWORD *)&acName[16] = v13;
    acName[20] = 0;
    v14 = TextData::Get(0x7BCDBCD7u);
    v15 = fs(v14);
    GameFrameWork::AddSysMsg(v3, v15);
    result = iRevBytes;
  }
  else
  {
    if ( v4 == 5962 )
    {
      v5 = TextData2::Get(0xD8DB2709u);
      strftime(acTime, 0x1Fu, v5, (tm *)((char *)pvData + 32));
      v6 = TextData::Get(0x62F2AFB0u);
      v7 = fs(v6);
      GameFrameWork::AddSysMsg(v3, v7);
      result = iRevBytes;
    }
    else
    {
      v9 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v3, v9);
      result = iRevBytes;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B48B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_DEL_DOWN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // edx@2
  int v5; // eax@2
  int v6; // edx@2
  int v7; // eax@2
  char *v8; // eax@2
  char *v9; // eax@2
  _BYTE v10[20]; // ST00_20@2
  char *v11; // eax@3
  char acName[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v14; // [sp+20h] [bp-4h]@1
  int v15; // [sp+24h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  if ( *((_WORD *)pvData + 10) == 5952 )
  {
    v4 = *(_DWORD *)pvData;
    v5 = *((_DWORD *)pvData + 1);
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
    *(_DWORD *)acName = v4;
    v6 = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acName[4] = v5;
    v7 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[12] = v6;
    *(_DWORD *)&acName[16] = v7;
    acName[20] = 0;
    v8 = TextData::Get(0xDC481E32u);
    v9 = fs(v8);
    GameFrameWork::AddSysMsg(v3, v9);
    *(_DWORD *)v10 = *(_DWORD *)pvData;
    *(_QWORD *)&v10[4] = *(_QWORD *)((char *)pvData + 4);
    *(_QWORD *)&v10[12] = *(_QWORD *)((char *)pvData + 12);
    HolyPromiseWin::DelHolyPromise(v3->m_pkHolyPromiseWin, *(Name5 *)v10);
  }
  else
  {
    v11 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
    GameFrameWork::AddSysMsg(v3, v11);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B4970) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_DEL_UP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char v4; // al@2
  Name5 *v5; // ecx@5
  char *v6; // eax@6
  char *v7; // eax@6
  char *v9; // eax@12
  unsigned int v10; // [sp-4h] [bp-24h]@3
  char acName[21]; // [sp+4h] [bp-1Ch]@6
  unsigned int v12; // [sp+1Ch] [bp-4h]@1
  int v13; // [sp+20h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = this;
  if ( *(_WORD *)((char *)pvData + 1) == 5952 )
  {
    v4 = *(_BYTE *)pvData;
    if ( !*(_BYTE *)pvData )
    {
      v10 = -201539279;
LABEL_9:
      v7 = TextData::Get(v10);
      goto LABEL_10;
    }
    if ( v4 == 1 )
    {
      v5 = (Name5 *)&this->m_pkHolyPromiseWin->m_kCHolyPromise;
      if ( v3->m_pkHolyPromiseWin != (HolyPromiseWin *)-376 )
      {
        Name5::n_string(v5, acName);
        acName[20] = 0;
        v6 = TextData::Get(0x4E3E375Cu);
        v7 = fs(v6);
LABEL_10:
        GameFrameWork::AddSysMsg(v3, v7);
        goto LABEL_11;
      }
    }
    else
    {
      if ( v4 == 2 )
      {
        v10 = 422647597;
        goto LABEL_9;
      }
    }
LABEL_11:
    HolyPromiseWin::DelUpHolyPromise(v3->m_pkHolyPromiseWin);
    return iRevBytes;
  }
  v9 = ErrMsgTable::GetErrMsg(*(_WORD *)((char *)pvData + 1));
  GameFrameWork::AddSysMsg(v3, v9);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B4A40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_CONFIRM_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  MHDiceGameTask *v4; // ecx@1
  MHDiceGameTask *v5; // ebx@2
  _BYTE v6[20]; // ST14_20@6
  _BYTE v7[20]; // ST00_20@6
  int v8; // eax@6
  int v9; // ecx@6
  int v10; // eax@6
  int v11; // ecx@6
  char *v12; // eax@6
  char *v13; // eax@6
  MsgBox *v14; // eax@6
  HolyPromiseWin *v15; // ecx@6
  int v16; // ecx@7
  int v17; // esi@9
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-30h]@1
  bool v20; // [sp+7h] [bp-29h]@1
  char acName[21]; // [sp+8h] [bp-28h]@6
  unsigned int v22; // [sp+20h] [bp-10h]@1
  int v23; // [sp+2Ch] [bp-4h]@1
  int v24; // [sp+30h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v3 = this;
  v4 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v23 = 0;
  v20 = MHDiceGameTask::IsDicegamePlaying(v4);
  v23 = -1;
  if ( result.m_pObject )
  {
    v5 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
  if ( !v20 )
  {
    *(_DWORD *)v6 = *((_DWORD *)pvData + 5);
    *(_QWORD *)&v6[4] = *((_QWORD *)pvData + 3);
    *(_QWORD *)&v6[12] = *((_QWORD *)pvData + 4);
    *(_DWORD *)v7 = *(_DWORD *)pvData;
    *(_QWORD *)&v7[4] = *(_QWORD *)((char *)pvData + 4);
    *(_QWORD *)&v7[12] = *(_QWORD *)((char *)pvData + 12);
    HolyPromiseWin::SetID(v3->m_pkHolyPromiseWin, *(Name5 *)v7, *(Name5 *)v6);
    v8 = *(_DWORD *)pvData;
    v9 = *((_DWORD *)pvData + 1);
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
    *(_DWORD *)acName = v8;
    v10 = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acName[4] = v9;
    v11 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[12] = v10;
    *(_DWORD *)&acName[16] = v11;
    acName[20] = 0;
    v12 = TextData::Get(0x37490F2Eu);
    v13 = fs(v12);
    v14 = MsgBox::Modeless(MSGBOX_AGREEREFUSAL, v13);
    v15 = v3->m_pkHolyPromiseWin;
    if ( v15 )
      v16 = (int)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    else
      v16 = 0;
    v17 = (int)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v14->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      v16);
    (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v17 + 8))(v17, v3->m_uiInsertNum++);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B4BB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_DEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // ecx@2
  int v5; // edx@2
  char v6; // al@2
  int v7; // ecx@2
  char *v8; // eax@8
  char *v9; // eax@10
  _BYTE v10[20]; // ST00_20@12
  unsigned int v12; // [sp-8h] [bp-2Ch]@3
  char acName[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v14; // [sp+20h] [bp-4h]@1
  int v15; // [sp+24h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  if ( pvData )
  {
    v4 = *((_DWORD *)pvData + 1);
    v5 = *((_DWORD *)pvData + 2);
    *(_DWORD *)acName = *(_DWORD *)pvData;
    *(_DWORD *)&acName[12] = *((_DWORD *)pvData + 3);
    v6 = *((_BYTE *)pvData + 20);
    *(_DWORD *)&acName[4] = v4;
    v7 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[8] = v5;
    *(_DWORD *)&acName[16] = v7;
    acName[20] = 0;
    if ( v6 == 1 )
    {
      v12 = -1935176752;
    }
    else
    {
      if ( v6 == 2 )
      {
        v12 = -1529493553;
      }
      else
      {
        if ( v6 )
        {
LABEL_12:
          *(_DWORD *)v10 = *(_DWORD *)pvData;
          *(_QWORD *)&v10[4] = *(_QWORD *)((char *)pvData + 4);
          *(_QWORD *)&v10[12] = *(_QWORD *)((char *)pvData + 12);
          HolyPromiseWin::DelHolyPromise(v3->m_pkHolyPromiseWin, *(Name5 *)v10);
          return iRevBytes;
        }
        if ( Name5::operator__((Name5 *)pvData, &v3->m_pkHolyPromiseWin->m_kCHolyPromise.m_HolyPromisesUp.PromiseCharID) )
        {
          v8 = TextData::Get(0xF3FCC131u);
LABEL_11:
          GameFrameWork::AddSysMsg(v3, v8);
          goto LABEL_12;
        }
        v12 = -599253454;
      }
    }
    v9 = TextData::Get(v12);
    v8 = fs(v9);
    goto LABEL_11;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B4CA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_ADD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // eax@4
  int v6; // ecx@5
  int v7; // edx@5
  int v8; // ecx@5
  int v9; // edx@5
  char *v10; // eax@5
  char *v11; // eax@5
  char acName[21]; // [sp+4h] [bp-1Ch]@5
  unsigned int v13; // [sp+1Ch] [bp-4h]@1
  int v14; // [sp+20h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  if ( pvData )
  {
    if ( *(_WORD *)pvData != 5952 && *(_WORD *)pvData != 5969 )
    {
      v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
    HolyPromiseWin::AddPromise(this->m_pkHolyPromiseWin, (PROTO_HOLY_PROMISE_INFO *)((char *)pvData + 2));
    v6 = *(_DWORD *)((char *)pvData + 2);
    v7 = *(_DWORD *)((char *)pvData + 6);
    *(_DWORD *)&acName[8] = *(_DWORD *)((char *)pvData + 10);
    *(_DWORD *)acName = v6;
    v8 = *(_DWORD *)((char *)pvData + 14);
    *(_DWORD *)&acName[4] = v7;
    v9 = *(_DWORD *)((char *)pvData + 18);
    *(_DWORD *)&acName[12] = v8;
    *(_DWORD *)&acName[16] = v9;
    acName[20] = 0;
    v10 = TextData::Get(0x48497076u);
    v11 = fs(v10);
    GameFrameWork::AddSysMsg(v3, v11);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B4D70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_LOGIN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // eax@1
  int v4; // ecx@2
  int v5; // edx@2
  HolyPromiseWin *v6; // eax@2
  int v7; // ebx@2
  int v8; // edi@2
  char *v9; // eax@9
  char *v10; // eax@9
  unsigned int v12; // [sp-10h] [bp-34h]@7
  GameFrameWork *thisa; // [sp+4h] [bp-20h]@1
  char acName[21]; // [sp+8h] [bp-1Ch]@2
  unsigned int v15; // [sp+20h] [bp-4h]@1
  int v16; // [sp+24h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = this;
  thisa = this;
  if ( pvData )
  {
    v4 = *(_DWORD *)pvData;
    v5 = *((_DWORD *)pvData + 1);
    v6 = v3->m_pkHolyPromiseWin;
    *(_DWORD *)&acName[12] = *((_DWORD *)pvData + 3);
    v7 = *((_DWORD *)pvData + 4);
    v8 = *((_DWORD *)pvData + 2);
    *(_DWORD *)acName = v4;
    *(_DWORD *)&acName[4] = v5;
    *(_DWORD *)&acName[8] = v8;
    *(_DWORD *)&acName[16] = v7;
    acName[20] = 0;
    if ( *(_DWORD *)&v6->m_kCHolyPromise.m_HolyPromisesUp.PromiseCharID.n5_name[0] != v4
      || *(_DWORD *)&v6->m_kCHolyPromise.m_HolyPromisesUp.PromiseCharID.n5_name[4] != v5
      || *(_DWORD *)&v6->m_kCHolyPromise.m_HolyPromisesUp.PromiseCharID.n5_name[8] != v8
      || *(_DWORD *)&v6->m_kCHolyPromise.m_HolyPromisesUp.PromiseCharID.n5_name[12] != *((_DWORD *)pvData + 3)
      || *(_DWORD *)&v6->m_kCHolyPromise.m_HolyPromisesUp.PromiseCharID.n5_name[16] != v7 )
      v12 = -2020674347;
    else
      v12 = 2096680140;
    v9 = TextData::Get(v12);
    v10 = fs(v9);
    GameFrameWork::AddSysMsg(thisa, v10);
    HolyPromiseWin::SetLogin(thisa->m_pkHolyPromiseWin, (Name5 *)pvData);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B4E40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_REWARD_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  char *v3; // ebx@3
  int v4; // esi@4
  int v5; // edi@4
  int v6; // ecx@6
  char *v7; // eax@9
  char *v8; // eax@9
  char *v9; // eax@10
  signed int i; // [sp+4h] [bp-8h]@2
  GameFrameWork *thisa; // [sp+8h] [bp-4h]@1

  thisa = this;
  if ( pvData )
  {
    i = 0;
    if ( *(_BYTE *)pvData )
    {
      v3 = (char *)pvData + 3;
      do
      {
        v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        v5 = *((_WORD *)v3 - 1);
        if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                 + 16))(
                                ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                *((_WORD *)v3 - 1)) )
        {
          if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
          {
            v6 = *(_DWORD *)(v4 + 196);
            if ( *(_DWORD *)(v6 + 4 * v5) )
            {
              if ( *(_DWORD *)(v6 + 4 * v5) )
              {
                if ( *(_WORD *)v3 )
                {
                  v7 = TextData::Get(0x900FB2E7u);
                  v8 = fs(v7);
                }
                else
                {
                  v9 = TextData::Get(0x31BB639Bu);
                  v8 = fs(v9);
                }
                GameFrameWork::AddSysMsg(thisa, v8);
              }
            }
          }
        }
        v3 += 4;
        ++i;
      }
      while ( i < *(_BYTE *)pvData );
    }
  }
  return iRevBytes;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B4F20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_REWARD_MONEY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@2
  unsigned int v4; // ecx@2
  unsigned int v5; // eax@2
  unsigned int v6; // ebx@2
  unsigned int v7; // esi@2
  int v8; // eax@4
  char v9; // cl@5
  char *v10; // eax@6
  const void *v11; // edx@6
  char v12; // cl@7
  unsigned int v13; // eax@8
  void *v14; // edi@8
  char v15; // cl@9
  char *v16; // edi@10
  char v17; // al@11
  unsigned int v18; // eax@14
  void *v19; // edi@14
  char v20; // cl@15
  char *v21; // eax@16
  char *v22; // ecx@16
  char v23; // dl@17
  unsigned int v24; // eax@18
  const void *v25; // esi@18
  void *v26; // edi@18
  char v27; // cl@19
  char *v28; // edi@20
  char v29; // al@21
  unsigned int v30; // eax@24
  void *v31; // edi@24
  char v32; // cl@25
  char *v33; // eax@26
  char *v34; // ecx@26
  char v35; // dl@27
  unsigned int v36; // eax@28
  const void *v37; // esi@28
  void *v38; // edi@28
  char v39; // cl@29
  char *v40; // edi@30
  char v41; // al@31
  unsigned int v42; // eax@34
  void *v43; // edi@34
  char v44; // cl@35
  char *v45; // eax@36
  char *v46; // ecx@36
  char v47; // dl@37
  unsigned int v48; // eax@38
  const void *v49; // esi@38
  void *v50; // edi@38
  char v51; // cl@39
  char *v52; // edi@40
  char v53; // al@41
  char *v54; // eax@43
  char *v55; // eax@43
  int result; // eax@43
  unsigned int Money_4; // [sp+4h] [bp-224h]@2
  GameFrameWork *v58; // [sp+8h] [bp-220h]@1
  char acStr1[256]; // [sp+Ch] [bp-21Ch]@3
  char acStr2[256]; // [sp+10Ch] [bp-11Ch]@3
  char acName[21]; // [sp+20Ch] [bp-1Ch]@2
  unsigned int v62; // [sp+224h] [bp-4h]@1
  int v63; // [sp+228h] [bp+0h]@1

  v62 = (unsigned int)&v63 ^ __security_cookie;
  v58 = this;
  if ( pvData )
  {
    v3 = *((_DWORD *)pvData + 1);
    *(_DWORD *)acName = *(_DWORD *)pvData;
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acName[16] = *((_DWORD *)pvData + 4);
    v4 = *((_DWORD *)pvData + 5);
    *(_DWORD *)&acName[4] = v3;
    v5 = *((_DWORD *)pvData + 6);
    v6 = v4;
    v7 = *((_DWORD *)pvData + 6);
    *(_DWORD *)&acName[12] = *((_DWORD *)pvData + 3);
    acName[20] = 0;
    Money_4 = v5;
    if ( v5 | v4 )
    {
      memset(acStr1, 0, 0x100u);
      memset(acStr2, 0, 0x100u);
      if ( User::GetGem(__PAIR__(v7, v6)) )
      {
        User::GetGem(__PAIR__(v7, v6));
        sprintf(acStr1, "%I64d");
        v8 = 0;
        do
        {
          v9 = acStr1[v8];
          acStr2[v8++] = v9;
        }
        while ( v9 );
        v10 = TextData::Get(0x475F9699u);
        v11 = v10;
        do
          v12 = *v10++;
        while ( v12 );
        v13 = v10 - v11;
        v14 = &acStr1[255];
        do
        {
          v15 = *((_BYTE *)v14 + 1);
          v14 = (char *)v14 + 1;
        }
        while ( v15 );
        memcpy(v14, v11, v13);
        v16 = &acStr1[255];
        do
          v17 = (v16++)[1];
        while ( v17 );
        v7 = Money_4;
        *v16 = byte_98C554;
      }
      if ( User::GetGold(__PAIR__(v7, v6)) )
      {
        User::GetGold(__PAIR__(v7, v6));
        sprintf(acStr1, "%I64d");
        v18 = strlen(acStr1) + 1;
        v19 = &acStr1[255];
        do
        {
          v20 = *((_BYTE *)v19 + 1);
          v19 = (char *)v19 + 1;
        }
        while ( v20 );
        memcpy(v19, acStr1, v18);
        v21 = TextData::Get(0x47A395A3u);
        v22 = v21;
        do
          v23 = *v21++;
        while ( v23 );
        v24 = v21 - v22;
        v25 = v22;
        v26 = &acStr1[255];
        do
        {
          v27 = *((_BYTE *)v26 + 1);
          v26 = (char *)v26 + 1;
        }
        while ( v27 );
        memcpy(v26, v25, v24);
        v28 = &acStr1[255];
        do
          v29 = (v28++)[1];
        while ( v29 );
        v7 = Money_4;
        *v28 = byte_98C560;
      }
      if ( User::GetSilver(__PAIR__(v7, v6)) )
      {
        User::GetSilver(__PAIR__(v7, v6));
        sprintf(acStr1, "%I64d");
        v30 = strlen(acStr1) + 1;
        v31 = &acStr1[255];
        do
        {
          v32 = *((_BYTE *)v31 + 1);
          v31 = (char *)v31 + 1;
        }
        while ( v32 );
        memcpy(v31, acStr1, v30);
        v33 = TextData::Get(0x98B595EFu);
        v34 = v33;
        do
          v35 = *v33++;
        while ( v35 );
        v36 = v33 - v34;
        v37 = v34;
        v38 = &acStr1[255];
        do
        {
          v39 = *((_BYTE *)v38 + 1);
          v38 = (char *)v38 + 1;
        }
        while ( v39 );
        memcpy(v38, v37, v36);
        v40 = &acStr1[255];
        do
          v41 = (v40++)[1];
        while ( v41 );
        v7 = Money_4;
        *v40 = byte_98C56C;
      }
      if ( User::GetCopper(__PAIR__(v7, v6)) )
      {
        User::GetCopper(__PAIR__(v7, v6));
        sprintf(acStr1, "%I64d");
        v42 = strlen(acStr1) + 1;
        v43 = &acStr1[255];
        do
        {
          v44 = *((_BYTE *)v43 + 1);
          v43 = (char *)v43 + 1;
        }
        while ( v44 );
        memcpy(v43, acStr1, v42);
        v45 = TextData::Get(0x88AF99F5u);
        v46 = v45;
        do
          v47 = *v45++;
        while ( v47 );
        v48 = v45 - v46;
        v49 = v46;
        v50 = &acStr1[255];
        do
        {
          v51 = *((_BYTE *)v50 + 1);
          v50 = (char *)v50 + 1;
        }
        while ( v51 );
        memcpy(v50, v49, v48);
        v52 = &acStr1[255];
        do
          v53 = (v52++)[1];
        while ( v53 );
        *v52 = byte_98C578;
      }
      v54 = TextData::Get(0x8EB36C96u);
      v55 = fs(v54);
      GameFrameWork::AddSysMsg(v58, v55);
      result = iRevBytes;
    }
    else
    {
      result = iRevBytes;
    }
  }
  else
  {
    result = iRevBytes;
  }
  return result;
}
// 98C554: using guessed type char byte_98C554;
// 98C560: using guessed type char byte_98C560;
// 98C56C: using guessed type char byte_98C56C;
// 98C578: using guessed type char byte_98C578;
// A85C00: using guessed type int __security_cookie;

//----- (004B52F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_CONFIRM_ING(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // edx@2
  int v5; // eax@2
  char *v6; // eax@2
  char *v7; // eax@2
  char acName[21]; // [sp+4h] [bp-1Ch]@2
  unsigned int v10; // [sp+1Ch] [bp-4h]@1
  int v11; // [sp+20h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = this;
  if ( pvData )
  {
    v4 = *((_DWORD *)pvData + 1);
    *(_DWORD *)acName = *(_DWORD *)pvData;
    *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acName[4] = v4;
    v5 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acName[12] = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acName[16] = v5;
    acName[20] = 0;
    v6 = TextData::Get(0xEAF2BFE1u);
    v7 = fs(v6);
    GameFrameWork::AddSysMsg(v3, v7);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B5370) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_REWARDINVENOPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edi@1
  GameFrameWork *v4; // ebx@1
  char *v5; // esi@1
  CompensationInvWin *v6; // ecx@2
  unsigned int v7; // eax@2
  bool v8; // al@4
  MainMenuWin *v9; // ecx@4
  Item *v10; // eax@8
  Item *v11; // edi@8
  char *v12; // ebx@9
  int v13; // esi@9
  GameFrameWork *v15; // [sp+Ch] [bp-10h]@1
  char *pbyBuff; // [sp+10h] [bp-Ch]@9
  ITEM_INVEN kInven; // [sp+14h] [bp-8h]@8
  int bShow; // [sp+18h] [bp-4h]@4

  v3 = *(_BYTE *)pvData;
  v4 = this;
  v15 = this;
  v5 = (char *)pvData + 1;
  pvData = 0;
  if ( v3 )
  {
    Inventory::ClearRewardInv(&g_kInventory);
    InventoryWin::ShowRewardNewMark(v4->m_pkInventoryWin, 1);
    v8 = InventoryWin::GetIsViewNewMark(v4->m_pkInventoryWin);
    v9 = v4->m_pkMainMenuWin;
    LOBYTE(bShow) = v8;
    if ( v9 )
      MainMenuWin::ShowNewMark(v9, bShow);
    if ( v3 )
    {
      bShow = v3;
      do
      {
        v10 = Item::Create(v5, &kInven, (unsigned int *)&pvData);
        v5 = &v5[(_DWORD)pvData];
        v11 = v10;
        if ( v10 )
        {
          v12 = (char *)&g_kInventory.m_aspRewardInv[kInven.Inven & 0x3FF];
          pbyBuff = v5;
          v13 = *(_DWORD *)v12;
          if ( *(Item **)v12 != v10 )
          {
            if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
            *(_DWORD *)v12 = v11;
            InterlockedIncrement((volatile LONG *)&v11->baseclass_0.m_uiRefCount);
          }
          ++g_kInventory.m_uiRewardCount;
          v5 = pbyBuff;
          v4 = v15;
        }
        --bShow;
      }
      while ( bShow );
    }
  }
  else
  {
    v6 = this->m_pkInventoryWin->m_pkCompensationInvenWin;
    v7 = v6->m_uiCurrPage;
    if ( v7 )
      v6->m_uiCurrPage = v7 - 1;
  }
  InventoryWin::RefreshCompensationInv(v4->m_pkInventoryWin);
  return iRevBytes;
}

//----- (004B5480) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PROMOTION_REWARD_ITEM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  char *v3; // ebx@3
  int v4; // esi@4
  int v5; // edi@4
  int v6; // ecx@6
  char *v7; // eax@9
  char *v8; // eax@9
  char *v9; // eax@10
  signed int i; // [sp+4h] [bp-8h]@2
  GameFrameWork *thisa; // [sp+8h] [bp-4h]@1

  thisa = this;
  if ( pvData )
  {
    i = 0;
    if ( *(_BYTE *)pvData )
    {
      v3 = (char *)pvData + 3;
      do
      {
        v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        v5 = *((_WORD *)v3 - 1);
        if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                 + 16))(
                                ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                *((_WORD *)v3 - 1)) )
        {
          if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
          {
            v6 = *(_DWORD *)(v4 + 196);
            if ( *(_DWORD *)(v6 + 4 * v5) )
            {
              if ( *(_DWORD *)(v6 + 4 * v5) )
              {
                if ( *(_WORD *)v3 )
                {
                  v7 = TextData::Get(0x819B89FAu);
                  v8 = fs(v7);
                }
                else
                {
                  v9 = TextData::Get(0x324F2AA6u);
                  v8 = fs(v9);
                }
                GameFrameWork::AddSysMsg(thisa, v8);
              }
            }
          }
        }
        v3 += 4;
        ++i;
      }
      while ( i < *(_BYTE *)pvData );
    }
  }
  return iRevBytes;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B5560) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@1
  GuildAcademyItemRewardWin *v5; // eax@3
  int result; // eax@4
  int v7; // eax@8
  char *v8; // eax@12
  unsigned int v9; // [sp-4h] [bp-8h]@10

  v3 = this;
  v4 = *(_WORD *)pvData;
  if ( (_WORD)v4 != 6104 )
  {
    v7 = v4 - 6105;
    if ( v7 )
    {
      if ( v7 != 1 )
        return iRevBytes;
      v9 = 1922102688;
    }
    else
    {
      v9 = 1436046487;
    }
    v8 = TextData::Get(v9);
    GameFrameWork::AddSysMsg(v3, v8);
    return iRevBytes;
  }
  if ( GuildAcademyStorage::SetContents((PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_ACK *)pvData) != 1 )
    return iRevBytes;
  v5 = GuildAcademyTask::GetGuildAcademyItemRewardWin();
  GuildAcademyItemRewardWin::On_GuildAcademyStorage_Cell_Changed(v5);
  if ( GuildAcademyTask::GetGuildAcademyItemRewardWin()->m_bFromReq )
  {
    GuildAcademyTask::GetGuildAcademyItemRewardWin()->m_bFromReq = 0;
    result = iRevBytes;
  }
  else
  {
    if ( GuildAcademyTask::GetGuildAcademyMoneyRewardWin()->m_bFromReq )
    {
      GuildAcademyTask::GetGuildAcademyMoneyRewardWin()->m_bFromReq = 0;
      result = iRevBytes;
    }
    else
    {
      GameFrameWork::OnOpenGuildAcademyStorage(v3);
      result = iRevBytes;
    }
  }
  return result;
}

//----- (004B5620) --------------------------------------------------------
void __thiscall GameFrameWork::NcChatRestrictAddReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  ChatBlockListWin *v3; // ecx@1
  PgNet *v4; // ecx@2
  Name5 pCharID; // [sp+4h] [bp-30h]@1
  __int16 pdata; // [sp+18h] [bp-1Ch]@2
  PROTO_NC_CHAT_RESTRICT_ADD_REQ kProto; // [sp+1Ch] [bp-18h]@2
  unsigned int v8; // [sp+30h] [bp-4h]@1
  int v9; // [sp+34h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pkChatBlockListWin;
  *(_DWORD *)&pCharID.n5_name[8] = *(_DWORD *)&kCharID.n5_name[8];
  *(_QWORD *)&pCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&pCharID.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
  if ( !CChatRestrict::Get(&v3->m_RestrictList, &pCharID) )
  {
    *(_QWORD *)&kProto.sChatRestrictCharID.n5_name[0] = *(_QWORD *)&kCharID;
    *(_QWORD *)&kProto.sChatRestrictCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&kProto.sChatRestrictCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
    v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
    pdata = -22525;
    PgNet::AddNetMsg(v4, &pdata, 2);
    PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004B56D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAT_RESTRICT_ADD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  __int16 v4; // ax@1
  char *v5; // eax@6
  char *v7; // eax@7
  char acName[21]; // [sp+4h] [bp-1Ch]@6
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  v4 = *(_WORD *)pvData;
  if ( *(_WORD *)pvData == 7171 || v4 == 7176 || v4 == 7172 || v4 == 7175 )
  {
    v7 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v7);
  }
  else
  {
    if ( v4 == 7168 )
    {
      Name5::n_string((Name5 *)((char *)pvData + 2), acName);
      acName[20] = 0;
      v5 = TextData::Get(0x3E738588u);
      GameFrameWork::VaAddSysMsg(v3, v5);
      CChatRestrict::Add(&v3->m_pkChatBlockListWin->m_RestrictList, (PROTO_CHAT_RESTRICT_INFO *)((char *)pvData + 2));
      GameFrameWork::UpdateChatBlockListWin(v3);
      return iRevBytes;
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B57A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcChatRestrictBlockDelReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_CHAT_RESTRICT_DEL_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sChatRestrictCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sChatRestrictCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&kProto.sChatRestrictCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -22521;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B5810) --------------------------------------------------------
int __thiscall GameFrameWork::ON_NC_KQ_NOREWARD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData == 4356 )
  {
    v4 = TextData2::Get(0x6415E9Cu);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004B5840) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_GET_CEN_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@2
  char *v5; // ST0C_4@3
  char *v6; // eax@3

  v3 = this;
  if ( *(_WORD *)pvData == 7264 )
  {
    v5 = TextData2::Get(0xD60A0715u);
    v6 = TextData2::Get(0x598881B7u);
    GameFrameWork::OnOpenHolyRewardMoneyWin(v3, 0, 1u, v6, v5);
    HolyRewardMoneyWin::SetAmout(v3->m_pkHolyRewardMoneyWin, *(_QWORD *)((char *)pvData + 2));
    result = iRevBytes;
  }
  else
  {
    NpcDialogWin::OpenNpcNormalDialog(this->m_pkNpcDlgWin, 0x59u, 1u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    result = iRevBytes;
    v3->m_pkNpcDlgWin->m_bHold = 0;
  }
  return result;
}

//----- (004B58D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_WITHDRAW_CEN_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData == 7272 )
  {
    v4 = TextData2::Get(0x163D3E3Cu);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004B5900) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_HOLY_PROMISE_CLIENT_GET_REMAIN_MONEY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // ebx@1
  unsigned int v4; // esi@1
  GameFrameWork *v5; // edi@1
  char *v6; // eax@4
  char *v7; // eax@4
  int v8; // eax@5
  char v9; // cl@6
  char *v10; // eax@7
  const void *v11; // edx@7
  char v12; // cl@8
  unsigned int v13; // eax@9
  void *v14; // edi@9
  char v15; // cl@10
  char *v16; // edi@11
  char v17; // al@12
  unsigned int v18; // eax@15
  void *v19; // edi@15
  char v20; // cl@16
  char *v21; // eax@17
  char *v22; // ecx@17
  char v23; // dl@18
  unsigned int v24; // eax@19
  const void *v25; // esi@19
  void *v26; // edi@19
  char v27; // cl@20
  char *v28; // edi@21
  char v29; // al@22
  unsigned int v30; // eax@25
  void *v31; // edi@25
  char v32; // cl@26
  char *v33; // eax@27
  char *v34; // ecx@27
  char v35; // dl@28
  unsigned int v36; // eax@29
  const void *v37; // esi@29
  void *v38; // edi@29
  char v39; // cl@30
  char *v40; // edi@31
  char v41; // al@32
  unsigned int v42; // eax@35
  void *v43; // edi@35
  char v44; // cl@36
  char *v45; // eax@37
  char *v46; // ecx@37
  char v47; // dl@38
  unsigned int v48; // eax@39
  const void *v49; // esi@39
  void *v50; // edi@39
  char v51; // cl@40
  char *v52; // edi@41
  char v53; // al@42
  char *v54; // eax@44
  char *v55; // eax@44
  char *v56; // eax@44
  GameFrameWork *thisa; // [sp+Ch] [bp-210h]@1
  unsigned int Money; // [sp+10h] [bp-20Ch]@1
  char acStr1[256]; // [sp+18h] [bp-204h]@4
  char acStr2[256]; // [sp+118h] [bp-104h]@4
  unsigned int v62; // [sp+218h] [bp-4h]@1
  int v63; // [sp+21Ch] [bp+0h]@1

  v62 = (unsigned int)&v63 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = *(_DWORD *)pvData;
  v5 = this;
  thisa = this;
  Money = *(_DWORD *)pvData;
  if ( (v3 & 0x80000000u) == 0 && ((signed int)v3 > 0 || v4) )
  {
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    v6 = TextData2::Get(0xA5E72706u);
    v7 = fs(v6);
    GameFrameWork::AddSysMsg(v5, v7);
    memset(acStr1, 0, 0x100u);
    memset(acStr2, 0, 0x100u);
    if ( User::GetGem(__PAIR__(v3, v4)) )
    {
      User::GetGem(__PAIR__(v3, v4));
      sprintf(acStr1, "%I64d");
      v8 = 0;
      do
      {
        v9 = acStr1[v8];
        acStr2[v8++] = v9;
      }
      while ( v9 );
      v10 = TextData::Get(0x475F9699u);
      v11 = v10;
      do
        v12 = *v10++;
      while ( v12 );
      v13 = v10 - v11;
      v14 = &acStr1[255];
      do
      {
        v15 = *((_BYTE *)v14 + 1);
        v14 = (char *)v14 + 1;
      }
      while ( v15 );
      memcpy(v14, v11, v13);
      v16 = &acStr1[255];
      do
        v17 = (v16++)[1];
      while ( v17 );
      v4 = Money;
      *v16 = byte_98C584;
    }
    if ( User::GetGold(__PAIR__(v3, v4)) )
    {
      User::GetGold(__PAIR__(v3, v4));
      sprintf(acStr1, "%I64d");
      v18 = strlen(acStr1) + 1;
      v19 = &acStr1[255];
      do
      {
        v20 = *((_BYTE *)v19 + 1);
        v19 = (char *)v19 + 1;
      }
      while ( v20 );
      memcpy(v19, acStr1, v18);
      v21 = TextData::Get(0x47A395A3u);
      v22 = v21;
      do
        v23 = *v21++;
      while ( v23 );
      v24 = v21 - v22;
      v25 = v22;
      v26 = &acStr1[255];
      do
      {
        v27 = *((_BYTE *)v26 + 1);
        v26 = (char *)v26 + 1;
      }
      while ( v27 );
      memcpy(v26, v25, v24);
      v28 = &acStr1[255];
      do
        v29 = (v28++)[1];
      while ( v29 );
      v4 = Money;
      *v28 = byte_98C590;
    }
    if ( User::GetSilver(__PAIR__(v3, v4)) )
    {
      User::GetSilver(__PAIR__(v3, v4));
      sprintf(acStr1, "%I64d");
      v30 = strlen(acStr1) + 1;
      v31 = &acStr1[255];
      do
      {
        v32 = *((_BYTE *)v31 + 1);
        v31 = (char *)v31 + 1;
      }
      while ( v32 );
      memcpy(v31, acStr1, v30);
      v33 = TextData::Get(0x98B595EFu);
      v34 = v33;
      do
        v35 = *v33++;
      while ( v35 );
      v36 = v33 - v34;
      v37 = v34;
      v38 = &acStr1[255];
      do
      {
        v39 = *((_BYTE *)v38 + 1);
        v38 = (char *)v38 + 1;
      }
      while ( v39 );
      memcpy(v38, v37, v36);
      v40 = &acStr1[255];
      do
        v41 = (v40++)[1];
      while ( v41 );
      v4 = Money;
      *v40 = byte_98C59C;
    }
    if ( User::GetCopper(__PAIR__(v3, v4)) )
    {
      User::GetCopper(__PAIR__(v3, v4));
      sprintf(acStr1, "%I64d");
      v42 = strlen(acStr1) + 1;
      v43 = &acStr1[255];
      do
      {
        v44 = *((_BYTE *)v43 + 1);
        v43 = (char *)v43 + 1;
      }
      while ( v44 );
      memcpy(v43, acStr1, v42);
      v45 = TextData::Get(0x88AF99F5u);
      v46 = v45;
      do
        v47 = *v45++;
      while ( v47 );
      v48 = v45 - v46;
      v49 = v46;
      v50 = &acStr1[255];
      do
      {
        v51 = *((_BYTE *)v50 + 1);
        v50 = (char *)v50 + 1;
      }
      while ( v51 );
      memcpy(v50, v49, v48);
      v52 = &acStr1[255];
      do
        v53 = (v52++)[1];
      while ( v53 );
      *v52 = byte_98C5A8;
    }
    v54 = TextData2::Get(0x6E819FB1u);
    v55 = fs(v54);
    GameFrameWork::AddSysMsg(thisa, v55);
    v56 = TextData2::Get(0x850799A6u);
    GameFrameWork::AddSysMsg(thisa, v56);
  }
  return iRevBytes;
}
// 98C584: using guessed type char byte_98C584;
// 98C590: using guessed type char byte_98C590;
// 98C59C: using guessed type char byte_98C59C;
// 98C5A8: using guessed type char byte_98C5A8;
// A85C00: using guessed type int __security_cookie;

//----- (004B5CC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_ABSTATE_ERASE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@6
  unsigned int v7; // [sp-4h] [bp-8h]@3

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( *(_WORD *)pvData != 7280 )
  {
    if ( v3 == 7281 )
    {
      v7 = -416657028;
LABEL_6:
      v5 = TextData2::Get(v7);
      GameFrameWork::AddSysMsg(v4, v5);
      return iRevBytes;
    }
    if ( v3 == 7282 )
    {
      v7 = -1611809086;
      goto LABEL_6;
    }
  }
  return iRevBytes;
}

//----- (004B5D10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_AUTO_PICK_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char v4; // bl@2
  char *v5; // eax@4
  InventoryWin *v6; // ecx@5
  InventoryWin *v7; // ecx@6
  bool v8; // al@8
  int result; // eax@11
  char *v10; // eax@14

  v3 = this;
  if ( *(_WORD *)pvData == 7680 )
  {
    Char::SetItemAutoPickState(g_pkMainChar, *((_BYTE *)pvData + 2) != 0);
    v4 = 0;
    if ( !*((_BYTE *)pvData + 2) && g_pkMainChar->m_bWaitingAckWhenInvenFull )
    {
      g_pkMainChar->m_bWaitingAckWhenInvenFull = 0;
      v5 = TextData2::Get(0xAFF3D4F6u);
      GameFrameWork::AddSysMsg(v3, v5);
      v4 = 1;
    }
    v6 = v3->m_pkInventoryWin;
    if ( !v6 )
      return iRevBytes;
    InventoryWin::OnAutoPickShow(v6);
    InventoryWin::SetAutoPickMinimon(v3->m_pkInventoryWin, 1);
    v7 = v3->m_pkInventoryWin;
    if ( v7->m_bAutoPickEnable )
    {
      if ( v4 )
        v8 = 0;
      else
        v8 = Inventory::IsFull(&g_kInventory) == 0;
      InventoryWin::SetAutoPickCheck(v3->m_pkInventoryWin, *((_BYTE *)pvData + 2) != 0, v8);
      return iRevBytes;
    }
    InventoryWin::SetAutoPickCheck(v7, *((_BYTE *)pvData + 2) != 0, 1);
    result = iRevBytes;
  }
  else
  {
    if ( *(_WORD *)pvData != 7681 )
      return iRevBytes;
    v10 = TextData2::Get(0x275D786Cu);
    GameFrameWork::AddSysMsg(v3, v10);
    result = iRevBytes;
  }
  return result;
}

//----- (004B5E20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_MISCERROR_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData == 4052 )
  {
    v4 = TextData2::Get(0xB4B3476u);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004B5E50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_LINK_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( (unsigned int)*(_WORD *)pvData - 7745 <= 1 )
  {
    v4 = TextData2::Get(0x35AC8487u);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004B5E90) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_MAKE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  int result; // eax@2
  char *v7; // eax@3

  v3 = this;
  if ( *((_WORD *)pvData + 1) == 7808 )
  {
    v4 = TextData2::Get(0x4580777Eu);
    GameFrameWork::AddSysMsg(v3, v4);
    v5 = TextData2::Get(0x95C5C4E0u);
    GameFrameWork::AddSysMsg(v3, v5);
    result = iRevBytes;
  }
  else
  {
    v7 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 1));
    GameFrameWork::AddSysMsg(v3, v7);
    result = iRevBytes;
  }
  return result;
}

//----- (004B5F00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_MAKE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Name5 *v4; // eax@1
  char *v5; // eax@1
  char *v6; // eax@1
  char *v7; // eax@1
  Name5 *v8; // eax@4
  _BYTE v9[20]; // ST00_20@4
  Name5 *v10; // eax@4
  _BYTE v11[20]; // ST00_20@4
  signed int v12; // edx@5
  unsigned int v13; // esi@5
  RaidMemberInfo *v14; // eax@6
  Name5 result; // [sp+8h] [bp-30h]@1
  char acPartyMaster[21]; // [sp+1Ch] [bp-1Ch]@1
  unsigned int v18; // [sp+34h] [bp-4h]@1
  int v19; // [sp+38h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  v4 = Party::GetPartyMasterID(&g_kParty, &result);
  *(_DWORD *)acPartyMaster = *(_DWORD *)&v4->n5_name[0];
  *(_DWORD *)&acPartyMaster[4] = *(_DWORD *)&v4->n5_name[4];
  *(_DWORD *)&acPartyMaster[8] = *(_DWORD *)&v4->n5_name[8];
  *(_DWORD *)&acPartyMaster[12] = *(_DWORD *)&v4->n5_name[12];
  *(_DWORD *)&acPartyMaster[16] = *(_DWORD *)&v4->n5_name[16];
  acPartyMaster[20] = 0;
  v5 = TextData2::Get(0x41766A8Bu);
  GameFrameWork::AddSysMsg(v3, v5);
  v6 = TextData2::Get(0x460A1735u);
  v7 = fs(v6);
  GameFrameWork::AddSysMsg(v3, v7);
  if ( !RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
    MiniMapWin::ClearRaidMember(v3->m_pkMiniMapWin);
  if ( g_kParty.m_uiTotalMember )
  {
    v8 = Party::GetPartyMasterID(&g_kParty, &result);
    *(_DWORD *)v9 = *(_DWORD *)&v8->n5_name[0];
    *(_QWORD *)&v9[4] = *(_QWORD *)&v8->n5_name[4];
    *(_QWORD *)&v9[12] = *(_QWORD *)&v8->n5_name[12];
    RaidInfo::ChangeRaidLeader(&g_kRaidinfo, *(Name5 *)v9);
    v10 = Party::GetPartyMasterID(&g_kParty, &result);
    *(_DWORD *)v11 = *(_DWORD *)&v10->n5_name[0];
    *(_QWORD *)&v11[4] = *(_QWORD *)&v10->n5_name[4];
    *(_QWORD *)&v11[12] = *(_QWORD *)&v10->n5_name[12];
    RaidInfo::ChangeRaidLooter(&g_kRaidinfo, *(Name5 *)v11);
  }
  RaidInfo::ConvertPartyToRaid(&g_kRaidinfo, (PROTO_NC_RAID_MAKE_BROAD_CMD *)pvData);
  MiniMapWin::ClearParty(v3->m_pkMiniMapWin);
  v12 = (signed int)((unsigned __int64)(2021161081i64
                                      * (unsigned int)((char *)g_kRaidinfo.m_MemberInfo[0].baseclass_0._Mylast
                                                     - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[0].baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 5;
  v13 = 0;
  if ( v12 + ((unsigned int)v12 >> 31) )
  {
    do
    {
      v14 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, v13);
      if ( v14 )
        MiniMapWin::AddRaidMember(v3->m_pkMiniMapWin, v14);
      ++v13;
    }
    while ( v13 < (signed int)((char *)g_kRaidinfo.m_MemberInfo[0].baseclass_0._Mylast
                             - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[0].baseclass_0.___u0.baseclass_0.dummy[0])
                / 68 );
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B60B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_DISMISS_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1
  unsigned int v5; // ebx@1
  int v6; // eax@1
  ExpeditionPartyWin *v7; // edi@2
  unsigned int v8; // esi@3
  ExpeditionWin *v9; // ecx@7
  int v10; // ebx@9
  unsigned int v11; // esi@9
  PgWin *v12; // edi@10
  int v14; // [sp+Ch] [bp-Ch]@1
  GameFrameWork *v15; // [sp+10h] [bp-8h]@1
  int v16; // [sp+14h] [bp-4h]@1

  v3 = this;
  v15 = this;
  Party::Clear(&g_kParty);
  MiniMapWin::ClearRaidMember(v3->m_pkMiniMapWin);
  v4 = TextData2::Get(0x9780657Fu);
  GameFrameWork::AddSysMsg(v3, v4);
  v5 = 0;
  v6 = (int)v3->m_pkExpeditionPartyWin;
  v14 = (int)v3->m_pkExpeditionPartyWin;
  v16 = (int)v3->m_pkExpeditionPartyWin;
  do
  {
    v7 = *(ExpeditionPartyWin **)v6;
    if ( *(_DWORD *)v6 )
    {
      v8 = 0;
      do
        ExpeditionPartyWin::SetOption(v7, v8++, 0);
      while ( v8 < 5 );
      v3 = v15;
    }
    ++v5;
    v6 = v16 + 4;
    v16 += 4;
  }
  while ( v5 < 4 );
  v9 = v3->m_pkExpeditionWin;
  if ( v9 )
  {
    ExpeditionWin::SetLootingType(v9, 0);
    ExpeditionWin::SetItemGrade(v3->m_pkExpeditionWin, 0);
  }
  v10 = v14;
  v11 = 0;
  do
  {
    v12 = *(PgWin **)v10;
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v12) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v12);
    ++v11;
    v10 += 4;
  }
  while ( v11 < 4 );
  RaidInfo::ClearRaidInfo(&g_kRaidinfo);
  return iRevBytes;
}

//----- (004B6190) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_LOOTING_TYPE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  ExpeditionWin *v4; // ecx@1
  char *v5; // eax@4
  char *v6; // edx@4
  char v7; // cl@5
  char *v8; // eax@7
  char *v9; // edx@7
  char v10; // cl@8
  char *v11; // eax@10
  char *v12; // edx@10
  char v13; // cl@11
  char *v14; // eax@13
  char *v15; // edx@13
  char v16; // cl@14
  char *v17; // eax@21
  char *v19; // [sp-Ch] [bp-218h]@17
  unsigned int v20; // [sp-4h] [bp-210h]@16
  char acstr[512]; // [sp+8h] [bp-204h]@3
  unsigned int v22; // [sp+208h] [bp-4h]@1
  int v23; // [sp+20Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = this;
  RaidInfo::SetItemLootingType(&g_kRaidinfo, *(_BYTE *)pvData, *((_BYTE *)pvData + 1));
  v4 = v3->m_pkExpeditionWin;
  if ( v4 )
  {
    ExpeditionWin::SetLootingType(v4, *((_BYTE *)pvData + 1));
    ExpeditionWin::SetItemGrade(v3->m_pkExpeditionWin, *(_BYTE *)pvData);
  }
  acstr[0] = 0;
  memset(&acstr[1], 0, 0x1FFu);
  switch ( *((_BYTE *)pvData + 1) )
  {
    case 0:
      v5 = TextData2::Get(0xA17ED0D6u);
      v6 = (char *)(acstr - v5);
      do
      {
        v7 = *v5;
        v5[(_DWORD)v6] = *v5;
        ++v5;
      }
      while ( v7 );
      break;
    case 1:
      v8 = TextData2::Get(0x2E192136u);
      v9 = (char *)(acstr - v8);
      do
      {
        v10 = *v8;
        v8[(_DWORD)v9] = *v8;
        ++v8;
      }
      while ( v10 );
      break;
    case 2:
      v11 = TextData2::Get(0x32182919u);
      v12 = (char *)(acstr - v11);
      do
      {
        v13 = *v11;
        v11[(_DWORD)v12] = *v11;
        ++v11;
      }
      while ( v13 );
      break;
    case 3:
      v14 = TextData2::Get(0xAAE9C321u);
      v15 = (char *)(acstr - v14);
      do
      {
        v16 = *v14;
        v14[(_DWORD)v15] = *v14;
        ++v14;
      }
      while ( v16 );
      break;
    default:
      break;
  }
  switch ( *(_BYTE *)pvData )
  {
    case 0:
      v20 = 225928826;
      goto LABEL_20;
    case 1:
      TextData3::Get(0xD78667Au);
      v19 = acstr;
      goto LABEL_21;
    case 2:
      TextData3::Get(0xD79667Au);
      v19 = acstr;
      goto LABEL_21;
    case 3:
      v20 = 226125434;
LABEL_20:
      TextData3::Get(v20);
      v19 = acstr;
LABEL_21:
      v17 = fs(v19);
      GameFrameWork::AddSysMsg(v3, v17);
      break;
    default:
      return iRevBytes;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6330) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidInvitationReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_RAID_INVITATION_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sInvitationCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sInvitationCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&kProto.sInvitationCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -20468;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B63A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  __int16 v4; // cx@1
  int v5; // edx@3
  int v6; // ecx@3
  int v7; // edx@3
  int v8; // ecx@3
  int v9; // edx@3
  _BYTE v10[20]; // ST00_20@3
  char *v11; // eax@4
  char *v12; // eax@6
  int v13; // edx@8
  int v14; // eax@8
  unsigned int v16; // [sp-8h] [bp-28h]@5
  char acstr[21]; // [sp+4h] [bp-1Ch]@3
  unsigned int v18; // [sp+1Ch] [bp-4h]@1
  int v19; // [sp+20h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  v4 = *((_WORD *)pvData + 10);
  if ( v4 != 7808 )
  {
    if ( v4 == 7880 )
    {
      v5 = *((_DWORD *)pvData + 1);
      *(_DWORD *)acstr = *(_DWORD *)pvData;
      v6 = *((_DWORD *)pvData + 2);
      *(_DWORD *)&acstr[4] = v5;
      v7 = *((_DWORD *)pvData + 3);
      *(_DWORD *)&acstr[8] = v6;
      v8 = *((_DWORD *)pvData + 4);
      *(_DWORD *)&acstr[12] = v7;
      v9 = *(_DWORD *)pvData;
      *(_DWORD *)&acstr[16] = v8;
      *(_DWORD *)v10 = v9;
      *(_QWORD *)&v10[4] = *(_QWORD *)((char *)pvData + 4);
      *(_QWORD *)&v10[12] = *(_QWORD *)((char *)pvData + 12);
      acstr[20] = 0;
      if ( RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v10) )
      {
        v11 = TextData2::Get(0x314410EFu);
LABEL_12:
        GameFrameWork::AddSysMsg(v3, v11);
        return iRevBytes;
      }
      v16 = 2096360410;
    }
    else
    {
      if ( v4 != 7879 )
      {
        if ( v4 == 7892 )
          v11 = TextData3::Get(0xE5F2E201u);
        else
          v11 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 10));
        goto LABEL_12;
      }
      v13 = *((_DWORD *)pvData + 1);
      *(_DWORD *)acstr = *(_DWORD *)pvData;
      *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 2);
      *(_DWORD *)&acstr[4] = v13;
      v14 = *((_DWORD *)pvData + 4);
      *(_DWORD *)&acstr[12] = *((_DWORD *)pvData + 3);
      *(_DWORD *)&acstr[16] = v14;
      acstr[20] = 0;
      v16 = -1040440812;
    }
    v12 = TextData2::Get(v16);
    v11 = fs(v12);
    goto LABEL_12;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B64C0) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidInvitationAnswerReq(GameFrameWork *this, char bIsAllow)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-20h]@1
  PROTO_NC_RAID_INVITATION_ANSWER_REQ kProto; // [sp+8h] [bp-1Ch]@1
  unsigned int v6; // [sp+20h] [bp-4h]@1
  int v7; // [sp+24h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sMasterCharID.n5_name[0] = *(_QWORD *)&g_kRaidinfo.m_kJoinProposeCharID.n5_name[0];
  kProto.bIsAllow = bIsAllow;
  *(_QWORD *)&kProto.sMasterCharID.n5_name[8] = *(_QWORD *)&g_kRaidinfo.m_kJoinProposeCharID.n5_name[8];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  *(_DWORD *)&kProto.sMasterCharID.n5_name[16] = *(_DWORD *)&g_kRaidinfo.m_kJoinProposeCharID.n5_name[16];
  pdata = -20465;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 21);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6550) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_ANSWER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  bool v3; // zf@1
  int v4; // edx@1
  GameFrameWork *v5; // esi@1
  int v6; // ecx@1
  int v7; // edx@1
  int v8; // ecx@1
  char *v9; // eax@2
  char *v10; // eax@2
  char acstr[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v13; // [sp+1Ch] [bp-4h]@1
  int v14; // [sp+20h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = *((_BYTE *)pvData + 20) == 0;
  v4 = *((_DWORD *)pvData + 1);
  v5 = this;
  *(_DWORD *)acstr = *(_DWORD *)pvData;
  v6 = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acstr[4] = v4;
  v7 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acstr[8] = v6;
  v8 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acstr[12] = v7;
  *(_DWORD *)&acstr[16] = v8;
  acstr[20] = 0;
  if ( v3 )
  {
    v9 = TextData2::Get(0x756D5FCFu);
    v10 = fs(v9);
    GameFrameWork::AddSysMsg(v5, v10);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B65D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_MEMBER_JOIN_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  Name5 *v4; // eax@1
  int v5; // edx@6
  int v6; // eax@6
  int v7; // edx@6
  int v8; // eax@6
  char *v9; // eax@6
  char *v10; // eax@6
  unsigned int v11; // eax@6
  ExpeditionPartyWin *v12; // eax@7
  _BYTE v13[20]; // ST00_20@9
  RaidMemberInfo *v14; // eax@9
  Name5 *v15; // eax@12
  _BYTE v16[20]; // ST00_20@14
  unsigned int v17; // ecx@15
  unsigned int v18; // edx@15
  int v19; // eax@15
  unsigned int v20; // ecx@15
  PartyWinInterface *v21; // ecx@16
  PROTO_NC_PARTY_JOIN_ACK kProto; // [sp+Ch] [bp-34h]@13
  char acstr[21]; // [sp+24h] [bp-1Ch]@6
  unsigned int v25; // [sp+3Ch] [bp-4h]@1
  int v26; // [sp+40h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v3 = this;
  v4 = User::GetMainCharID(&g_kUser);
  if ( *((_DWORD *)pvData + 1) != *(_DWORD *)&v4->n5_name[0]
    || *((_DWORD *)pvData + 2) != *(_DWORD *)&v4->n5_name[4]
    || *((_DWORD *)pvData + 3) != *(_DWORD *)&v4->n5_name[8]
    || *((_DWORD *)pvData + 4) != *(_DWORD *)&v4->n5_name[12]
    || *((_DWORD *)pvData + 5) != *(_DWORD *)&v4->n5_name[16] )
  {
    v5 = *((_DWORD *)pvData + 1);
    v6 = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 3);
    *(_DWORD *)acstr = v5;
    v7 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acstr[4] = v6;
    v8 = *((_DWORD *)pvData + 5);
    *(_DWORD *)&acstr[12] = v7;
    *(_DWORD *)&acstr[16] = v8;
    acstr[20] = 0;
    v9 = TextData2::Get(0xEADA1719u);
    v10 = fs(v9);
    GameFrameWork::AddSysMsg(v3, v10);
    v11 = *((_BYTE *)pvData + 2);
    if ( v11 < 4 )
    {
      v12 = v3->m_pkExpeditionPartyWin[v11];
      if ( v12 )
        ExpeditionPartyWin::SetOption(v12, *((_BYTE *)pvData + 3), 0);
    }
    RaidInfo::AddMember(&g_kRaidinfo, (PROTO_NC_RAID_MEMBER_JOIN_BROAD_CMD *)pvData);
    *(_DWORD *)v13 = *((_DWORD *)pvData + 1);
    *(_QWORD *)&v13[4] = *((_QWORD *)pvData + 1);
    *(_QWORD *)&v13[12] = *((_QWORD *)pvData + 2);
    v14 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v13);
    if ( v14 )
      MiniMapWin::AddRaidMember(v3->m_pkMiniMapWin, v14);
    if ( *((_BYTE *)pvData + 2) == g_kRaidinfo.m_uiMePartyIdx )
    {
      v15 = User::GetMainCharID(&g_kUser);
      if ( Name5::operator__((Name5 *)((char *)pvData + 4), v15) )
      {
        *(_QWORD *)&kProto.memberid.n5_name[12] = 0i64;
        *(_QWORD *)&kProto.memberid.n5_name[4] = 0i64;
        *(_DWORD *)&kProto.memberid.n5_name[0] = 0;
        strncpy(kProto.memberid.n5_name, &byte_98C0D2, 0x14u);
        if ( Name5::operator__((Name5 *)((char *)pvData + 4), &kProto.memberid) )
        {
          *(_DWORD *)v16 = *((_DWORD *)pvData + 1);
          *(_QWORD *)&v16[4] = *((_QWORD *)pvData + 1);
          *(_QWORD *)&v16[12] = *((_QWORD *)pvData + 2);
          if ( !Party::GetMemberInfo(&g_kParty, *(Name5 *)v16) )
          {
            v17 = *((_DWORD *)pvData + 2);
            v18 = *((_DWORD *)pvData + 3);
            kProto.charclass = 0;
            v19 = *((_DWORD *)pvData + 1);
            *(_QWORD *)&kProto.memberid.n5_name[4] = __PAIR__(v18, v17);
            v20 = *((_DWORD *)pvData + 5);
            *(_DWORD *)&kProto.memberid.n5_name[0] = v19;
            *(_QWORD *)&kProto.memberid.n5_name[12] = __PAIR__(v20, *((_DWORD *)pvData + 4));
            Party::AddMember(&g_kParty, &kProto);
          }
        }
      }
    }
  }
  v21 = v3->m_pkPartyWinInterface;
  if ( v21 )
    PartyWinInterface::Update(v21);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B67B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_LEAVE_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Name5 *v4; // eax@1
  int v5; // edi@6
  unsigned int v6; // ebx@6
  ExpeditionPartyWin *v7; // edi@7
  unsigned int v8; // esi@8
  PgWin **v9; // ebx@11
  unsigned int v10; // esi@11
  PgWin *v11; // edi@12
  ExpeditionWin *v12; // ecx@15
  char *v13; // eax@17
  _BYTE v14[20]; // ST08_20@18
  RaidMemberInfo *v15; // eax@18
  _BYTE v16[20]; // ST00_20@20
  unsigned int v17; // ecx@20
  char *v18; // eax@20
  PgWin *v19; // ebx@22
  _BYTE v20[20]; // ST08_20@27
  int v21; // edx@28
  int v22; // eax@28
  int v23; // edx@28
  int v24; // eax@28
  char *v25; // eax@28
  char *v26; // eax@28
  PartyWinInterface *v27; // ecx@29
  int v29; // [sp+Ch] [bp-28h]@6
  int v30; // [sp+10h] [bp-24h]@6
  GameFrameWork *thisa; // [sp+14h] [bp-20h]@1
  char acstr[21]; // [sp+18h] [bp-1Ch]@28
  unsigned int v33; // [sp+30h] [bp-4h]@1
  int v34; // [sp+34h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v3 = this;
  thisa = this;
  v4 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)&v4->n5_name[0] != *((_DWORD *)pvData + 1)
    || *(_DWORD *)&v4->n5_name[4] != *((_DWORD *)pvData + 2)
    || *(_DWORD *)&v4->n5_name[8] != *((_DWORD *)pvData + 3)
    || *(_DWORD *)&v4->n5_name[12] != *((_DWORD *)pvData + 4)
    || *(_DWORD *)&v4->n5_name[16] != *((_DWORD *)pvData + 5) )
  {
    *(_DWORD *)v14 = *((_DWORD *)pvData + 1);
    *(_QWORD *)&v14[4] = *((_QWORD *)pvData + 1);
    *(_QWORD *)&v14[12] = *((_QWORD *)pvData + 2);
    v15 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v14);
    if ( v15 )
      MiniMapWin::RemoveRaidMember(v3->m_pkMiniMapWin, v15);
    *(_DWORD *)v16 = *((_DWORD *)pvData + 1);
    *(_QWORD *)&v16[4] = *((_QWORD *)pvData + 1);
    *(_QWORD *)&v16[12] = *((_QWORD *)pvData + 2);
    RaidInfo::DeleteMember(&g_kRaidinfo, *(Name5 *)v16, *((_BYTE *)pvData + 2), *((_BYTE *)pvData + 3));
    v17 = *((_BYTE *)pvData + 2);
    v18 = (char *)&g_kRaidinfo.m_MemberInfo[*((_BYTE *)pvData + 2)];
    if ( *(_DWORD *)v18 == *((_DWORD *)v18 + 1) )
    {
      v19 = (PgWin *)(v17 >= 4 ? 0 : v3->m_pkExpeditionPartyWin[v17]);
      if ( (unsigned __int8)((int (__thiscall *)(PgWin *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v19) )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v19);
    }
    if ( *((_BYTE *)pvData + 2) == g_kRaidinfo.m_uiMePartyIdx )
    {
      *(_DWORD *)v20 = *((_DWORD *)pvData + 1);
      *(_QWORD *)&v20[4] = *((_QWORD *)pvData + 1);
      *(_QWORD *)&v20[12] = *((_QWORD *)pvData + 2);
      Party::DeleteMember(&g_kParty, *(Name5 *)v20);
    }
    v21 = *((_DWORD *)pvData + 1);
    v22 = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 3);
    *(_DWORD *)acstr = v21;
    v23 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acstr[4] = v22;
    v24 = *((_DWORD *)pvData + 5);
    *(_DWORD *)&acstr[12] = v23;
    *(_DWORD *)&acstr[16] = v24;
    acstr[20] = 0;
    v25 = TextData2::Get(0x9F98DABDu);
    v26 = fs(v25);
    GameFrameWork::AddSysMsg(v3, v26);
  }
  else
  {
    Party::Clear(&g_kParty);
    MiniMapWin::ClearRaidMember(v3->m_pkMiniMapWin);
    v5 = (int)v3->m_pkExpeditionPartyWin;
    v6 = 0;
    v29 = v5;
    v30 = v5;
    do
    {
      v7 = *(ExpeditionPartyWin **)v5;
      if ( v7 )
      {
        v8 = 0;
        do
          ExpeditionPartyWin::SetOption(v7, v8++, 0);
        while ( v8 < 5 );
      }
      ++v6;
      v5 = v30 + 4;
      v30 += 4;
    }
    while ( v6 < 4 );
    v9 = (PgWin **)v29;
    v10 = 0;
    do
    {
      v11 = *v9;
      if ( (unsigned __int8)((int (__thiscall *)(PgWin *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v11) )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v11);
      ++v10;
      ++v9;
    }
    while ( v10 < 4 );
    v12 = thisa->m_pkExpeditionWin;
    if ( v12 )
    {
      ExpeditionWin::SetLootingType(v12, 0);
      ExpeditionWin::SetItemGrade(thisa->m_pkExpeditionWin, 0);
    }
    RaidInfo::ClearRaidInfo(&g_kRaidinfo);
    v13 = TextData2::Get(0x412E7193u);
    GameFrameWork::AddSysMsg(thisa, v13);
    v3 = thisa;
  }
  v27 = v3->m_pkPartyWinInterface;
  if ( v27 )
    PartyWinInterface::Update(v27);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6A30) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidVanishReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_RAID_VANISH_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sVanishCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sVanishCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&kProto.sVanishCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -20456;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6AA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_VANISH_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // esi@1
  int v5; // eax@1
  char *v6; // eax@1
  char *v7; // eax@1
  char acstr[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v10; // [sp+1Ch] [bp-4h]@1
  int v11; // [sp+20h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = this;
  *(_DWORD *)acstr = *(_DWORD *)pvData;
  *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acstr[4] = v3;
  v5 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acstr[12] = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acstr[16] = v5;
  acstr[20] = 0;
  v6 = TextData2::Get(0x4E727586u);
  v7 = fs(v6);
  GameFrameWork::AddSysMsg(v4, v7);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6B10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_VANISH_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  Name5 *v4; // eax@1
  unsigned int v5; // edi@6
  int v6; // ebx@6
  PgWin *v7; // esi@7
  ExpeditionWin *v8; // ecx@10
  _BYTE v9[20]; // ST08_20@13
  RaidMemberInfo *v10; // eax@13
  _BYTE v11[20]; // ST00_20@15
  unsigned int v12; // ecx@15
  char *v13; // eax@15
  PgWin *v14; // edi@17
  _BYTE v15[20]; // ST08_20@22
  int v16; // edx@23
  int v17; // eax@23
  int v18; // edx@23
  int v19; // eax@23
  char *v20; // eax@23
  char *v21; // eax@23
  PartyWinInterface *v22; // ecx@24
  GameFrameWork *v24; // [sp+Ch] [bp-20h]@1
  char acstr[21]; // [sp+10h] [bp-1Ch]@23
  unsigned int v26; // [sp+28h] [bp-4h]@1
  int v27; // [sp+2Ch] [bp+0h]@1

  v26 = (unsigned int)&v27 ^ __security_cookie;
  v3 = this;
  v24 = this;
  v4 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)&v4->n5_name[0] != *((_DWORD *)pvData + 6)
    || *(_DWORD *)&v4->n5_name[4] != *((_DWORD *)pvData + 7)
    || *(_DWORD *)&v4->n5_name[8] != *((_DWORD *)pvData + 8)
    || *(_DWORD *)&v4->n5_name[12] != *((_DWORD *)pvData + 9)
    || *(_DWORD *)&v4->n5_name[16] != *((_DWORD *)pvData + 10) )
  {
    *(_DWORD *)v9 = *((_DWORD *)pvData + 6);
    *(_QWORD *)&v9[4] = *(_QWORD *)((char *)pvData + 28);
    *(_QWORD *)&v9[12] = *(_QWORD *)((char *)pvData + 36);
    v10 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)v9);
    if ( v10 )
      MiniMapWin::RemoveRaidMember(v3->m_pkMiniMapWin, v10);
    *(_DWORD *)v11 = *((_DWORD *)pvData + 6);
    *(_QWORD *)&v11[4] = *(_QWORD *)((char *)pvData + 28);
    *(_QWORD *)&v11[12] = *(_QWORD *)((char *)pvData + 36);
    RaidInfo::DeleteMember(&g_kRaidinfo, *(Name5 *)v11, *((_BYTE *)pvData + 2), *((_BYTE *)pvData + 3));
    v12 = *((_BYTE *)pvData + 2);
    v13 = (char *)&g_kRaidinfo.m_MemberInfo[*((_BYTE *)pvData + 2)];
    if ( *(_DWORD *)v13 == *((_DWORD *)v13 + 1) )
    {
      v14 = (PgWin *)(v12 >= 4 ? 0 : v3->m_pkExpeditionPartyWin[v12]);
      if ( (unsigned __int8)((int (__thiscall *)(PgWin *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v14) )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v14);
    }
    if ( *((_BYTE *)pvData + 2) == g_kRaidinfo.m_uiMePartyIdx )
    {
      *(_DWORD *)v15 = *((_DWORD *)pvData + 6);
      *(_QWORD *)&v15[4] = *(_QWORD *)((char *)pvData + 28);
      *(_QWORD *)&v15[12] = *(_QWORD *)((char *)pvData + 36);
      Party::DeleteMember(&g_kParty, *(Name5 *)v15);
    }
    v16 = *((_DWORD *)pvData + 6);
    v17 = *((_DWORD *)pvData + 7);
    *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 8);
    *(_DWORD *)acstr = v16;
    v18 = *((_DWORD *)pvData + 9);
    *(_DWORD *)&acstr[4] = v17;
    v19 = *((_DWORD *)pvData + 10);
    *(_DWORD *)&acstr[12] = v18;
    *(_DWORD *)&acstr[16] = v19;
    acstr[20] = 0;
    v20 = TextData2::Get(0xFFB7C8DBu);
    v21 = fs(v20);
    GameFrameWork::AddSysMsg(v3, v21);
  }
  else
  {
    Party::Clear(&g_kParty);
    MiniMapWin::ClearRaidMember(v3->m_pkMiniMapWin);
    v5 = 0;
    v6 = (int)v3->m_pkExpeditionPartyWin;
    do
    {
      v7 = *(PgWin **)v6;
      if ( (unsigned __int8)((int (__thiscall *)(PgWin *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v7) )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v7);
      ++v5;
      v6 += 4;
    }
    while ( v5 < 4 );
    v8 = v24->m_pkExpeditionWin;
    if ( v8 )
    {
      ExpeditionWin::SetLootingType(v8, 0);
      ExpeditionWin::SetItemGrade(v24->m_pkExpeditionWin, 0);
    }
    RaidInfo::ClearRaidInfo(&g_kRaidinfo);
    v3 = v24;
  }
  v22 = v3->m_pkPartyWinInterface;
  if ( v22 )
    PartyWinInterface::Update(v22);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6D40) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidSlotMoveReq(GameFrameWork *this, int PreIndex, int PostIndex)
{
  GameFrameWork *v3; // edi@1
  int v4; // ecx@1
  unsigned __int16 v5; // si@1
  char *v6; // ecx@1
  int v7; // eax@2
  int v8; // ecx@2
  char *v9; // esi@2
  signed int v10; // ecx@2
  unsigned int v11; // ebx@2
  int v12; // eax@3
  __int16 pdata; // [sp+Ch] [bp-38h]@4
  unsigned __int16 v14; // [sp+10h] [bp-34h]@1
  char v15; // [sp+12h] [bp-32h]@1
  unsigned __int8 v16; // [sp+13h] [bp-31h]@1
  unsigned __int16 v17; // [sp+14h] [bp-30h]@2
  char v18; // [sp+16h] [bp-2Eh]@2
  char v19; // [sp+17h] [bp-2Dh]@2
  int v20; // [sp+18h] [bp-2Ch]@1
  int v21; // [sp+1Ch] [bp-28h]@1
  int v22; // [sp+20h] [bp-24h]@1
  int v23; // [sp+24h] [bp-20h]@1
  int v24; // [sp+28h] [bp-1Ch]@1
  int v25; // [sp+2Ch] [bp-18h]@1
  int v26; // [sp+30h] [bp-14h]@1
  int v27; // [sp+34h] [bp-10h]@1
  int v28; // [sp+38h] [bp-Ch]@1
  int v29; // [sp+3Ch] [bp-8h]@1
  unsigned int v30; // [sp+40h] [bp-4h]@1
  int v31; // [sp+44h] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  v24 = 0;
  v23 = 0;
  v22 = 0;
  v21 = 0;
  v20 = 0;
  v29 = 0;
  v28 = 0;
  v27 = 0;
  v26 = 0;
  v25 = 0;
  v3 = this;
  v15 = PreIndex / 5;
  v4 = (unsigned __int8)(PreIndex / 5);
  v5 = g_kRaidinfo.m_PartyInfo[v4].nPartyNo;
  v16 = PreIndex % 5;
  v6 = (char *)&g_kRaidinfo.m_MemberInfo[v4];
  v14 = v5;
  if ( (*((_DWORD *)v6 + 1) - *(_DWORD *)v6) / 68 > (unsigned int)v16 )
  {
    v7 = *(_DWORD *)v6 + 68 * v16;
    v20 = *(_DWORD *)(*(_DWORD *)v6 + 68 * v16);
    v21 = *(_DWORD *)(v7 + 4);
    v22 = *(_DWORD *)(v7 + 8);
    v23 = *(_DWORD *)(v7 + 12);
    v24 = *(_DWORD *)(v7 + 16);
    v18 = ((signed int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 1)
        + ((unsigned int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 31);
    v8 = (unsigned __int8)(((signed int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 1)
                         + ((unsigned int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 31));
    v17 = g_kRaidinfo.m_PartyInfo[v8].nPartyNo;
    v9 = (char *)&g_kRaidinfo.m_MemberInfo[v8];
    v10 = *((_DWORD *)v9 + 1) - *(_DWORD *)v9;
    v11 = (unsigned __int8)((_BYTE)PostIndex
                          - 5
                          * (((signed int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 1)
                           + ((unsigned int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 31)));
    v19 = PostIndex
        - 5
        * (((signed int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 1)
         + ((unsigned int)((unsigned __int64)(1717986919i64 * PostIndex) >> 32) >> 31));
    if ( v10 / 68 > v11 )
    {
      v12 = *(_DWORD *)v9 + 68 * v11;
      v25 = *(_DWORD *)v12;
      v26 = *(_DWORD *)(v12 + 4);
      v27 = *(_DWORD *)(v12 + 8);
      v28 = *(_DWORD *)(v12 + 12);
      v29 = *(_DWORD *)(v12 + 16);
    }
    pdata = -20441;
    PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &pdata, 2);
    PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, &v14, 48);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6EC0) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidSetLeaderReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_RAID_SET_LEADER_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sNewLeaderCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sNewLeaderCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&kProto.sNewLeaderCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -20437;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B6F30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_LEADER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST04_20@1
  _BYTE v5[20]; // ST04_20@1
  _BYTE v6[20]; // ST00_20@2
  int v7; // edx@3
  int v8; // eax@3
  int v9; // edx@3
  int v10; // eax@3
  char *v11; // eax@3
  char *v12; // eax@3
  PartyWinInterface *v13; // ecx@3
  char acstr[21]; // [sp+1Ch] [bp-1Ch]@3
  unsigned int v16; // [sp+34h] [bp-4h]@1
  int v17; // [sp+38h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = this;
  *(_DWORD *)v4 = *((_DWORD *)pvData + 5);
  *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 3);
  *(_QWORD *)&v4[12] = *((_QWORD *)pvData + 4);
  RaidInfo::ChangeRaidLeader(&g_kRaidinfo, *(Name5 *)v4);
  *(_DWORD *)v5 = *((_DWORD *)pvData + 5);
  *(_QWORD *)&v5[4] = *((_QWORD *)pvData + 3);
  *(_QWORD *)&v5[12] = *((_QWORD *)pvData + 4);
  if ( RaidInfo::IsSubLeader(&g_kRaidinfo, *(Name5 *)v5) )
  {
    *(_DWORD *)v6 = *((_DWORD *)pvData + 5);
    *(_QWORD *)&v6[4] = *((_QWORD *)pvData + 3);
    *(_QWORD *)&v6[12] = *((_QWORD *)pvData + 4);
    RaidInfo::SetRaidSubLeader(&g_kRaidinfo, *(Name5 *)v6, 0);
  }
  v7 = *((_DWORD *)pvData + 5);
  v8 = *((_DWORD *)pvData + 6);
  *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 7);
  *(_DWORD *)acstr = v7;
  v9 = *((_DWORD *)pvData + 8);
  *(_DWORD *)&acstr[4] = v8;
  v10 = *((_DWORD *)pvData + 9);
  *(_DWORD *)&acstr[12] = v9;
  *(_DWORD *)&acstr[16] = v10;
  acstr[20] = 0;
  v11 = TextData2::Get(0x460A1735u);
  v12 = fs(v11);
  GameFrameWork::AddSysMsg(v3, v12);
  v13 = v3->m_pkPartyWinInterface;
  if ( v13 )
    PartyWinInterface::Update(v13);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B7040) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidSetSubLeaderReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_RAID_SET_SUB_LEADER_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sNewSubLeaderCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sNewSubLeaderCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&kProto.sNewSubLeaderCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -20432;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B70B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_SUB_LEADER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  int v5; // edx@1
  int v6; // eax@1
  int v7; // edx@1
  int v8; // eax@1
  char *v9; // eax@1
  char *v10; // eax@1
  PartyWinInterface *v11; // ecx@1
  char acstr[21]; // [sp+8h] [bp-1Ch]@1
  unsigned int v14; // [sp+20h] [bp-4h]@1
  int v15; // [sp+24h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  *(_DWORD *)v4 = *((_DWORD *)pvData + 5);
  *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 3);
  *(_QWORD *)&v4[12] = *((_QWORD *)pvData + 4);
  RaidInfo::SetRaidSubLeader(&g_kRaidinfo, *(Name5 *)v4, 1);
  v5 = *((_DWORD *)pvData + 5);
  v6 = *((_DWORD *)pvData + 6);
  *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 7);
  *(_DWORD *)acstr = v5;
  v7 = *((_DWORD *)pvData + 8);
  *(_DWORD *)&acstr[4] = v6;
  v8 = *((_DWORD *)pvData + 9);
  *(_DWORD *)&acstr[12] = v7;
  *(_DWORD *)&acstr[16] = v8;
  acstr[20] = 0;
  v9 = TextData2::Get(0x2F756280u);
  v10 = fs(v9);
  GameFrameWork::AddSysMsg(v3, v10);
  v11 = v3->m_pkPartyWinInterface;
  if ( v11 )
    PartyWinInterface::Update(v11);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B7160) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidDelSubLeaderReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_RAID_DEL_SUB_LEADER_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sDelSubLeaderCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sDelSubLeaderCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&kProto.sDelSubLeaderCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = -20427;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B71D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  int v5; // ecx@1
  int v6; // edx@1
  int v7; // eax@1
  int v8; // ecx@1
  int v9; // eax@1
  int v10; // edx@1
  int v11; // ecx@1
  int v12; // edx@1
  int v13; // edx@1
  char *v14; // eax@1
  char *v15; // eax@1
  char acstrCommmander[21]; // [sp+8h] [bp-34h]@1
  char acstrDegrader[21]; // [sp+20h] [bp-1Ch]@1
  unsigned int v19; // [sp+38h] [bp-4h]@1
  int v20; // [sp+3Ch] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v3 = this;
  *(_DWORD *)v4 = *((_DWORD *)pvData + 5);
  *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 3);
  *(_QWORD *)&v4[12] = *((_QWORD *)pvData + 4);
  RaidInfo::SetRaidSubLeader(&g_kRaidinfo, *(Name5 *)v4, 0);
  v5 = *((_DWORD *)pvData + 2);
  v6 = *(_DWORD *)pvData;
  *(_DWORD *)&acstrCommmander[4] = *((_DWORD *)pvData + 1);
  v7 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acstrCommmander[8] = v5;
  v8 = *((_DWORD *)pvData + 5);
  *(_DWORD *)&acstrCommmander[16] = v7;
  v9 = *((_DWORD *)pvData + 7);
  *(_DWORD *)acstrCommmander = v6;
  v10 = *((_DWORD *)pvData + 3);
  *(_DWORD *)acstrDegrader = v8;
  v11 = *((_DWORD *)pvData + 8);
  *(_DWORD *)&acstrDegrader[8] = v9;
  *(_DWORD *)&acstrCommmander[12] = v10;
  v12 = *((_DWORD *)pvData + 6);
  *(_DWORD *)&acstrDegrader[12] = v11;
  *(_DWORD *)&acstrDegrader[4] = v12;
  v13 = *((_DWORD *)pvData + 9);
  acstrCommmander[20] = 0;
  *(_DWORD *)&acstrDegrader[16] = v13;
  acstrDegrader[20] = 0;
  v14 = TextData2::Get(0x8C72658Fu);
  v15 = fs(v14);
  GameFrameWork::AddSysMsg(v3, v15);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B72A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidSetLooterReq(GameFrameWork *this, Name5 kCharID)
{
  _BYTE v2[20]; // ST00_20@1
  char *v3; // eax@2
  PgNet *v4; // ecx@3
  GameFrameWork *v5; // [sp+20h] [bp-20h]@1
  __int16 pdata; // [sp+24h] [bp-1Ch]@3
  PROTO_NC_RAID_SET_LOOTER_REQ kProto; // [sp+28h] [bp-18h]@1
  unsigned int v8; // [sp+3Ch] [bp-4h]@1
  int v9; // [sp+40h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v5 = this;
  *(_QWORD *)v2 = *(_QWORD *)&kCharID;
  *(_QWORD *)&v2[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_QWORD *)&kProto.sNewLooterCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sNewLooterCharID.n5_name[8] = *(_QWORD *)&kCharID.n5_name[8];
  *(_DWORD *)&kProto.sNewLooterCharID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
  *(_DWORD *)&v2[16] = *(_DWORD *)&kCharID.n5_name[16];
  if ( RaidInfo::IsLooter(&g_kRaidinfo, *(Name5 *)v2) )
  {
    v3 = TextData2::Get(0x92A35DB9u);
    GameFrameWork::AddSysMsg(v5, v3);
  }
  else
  {
    v4 = (PgNet *)v5->m_spWorldMgrNet.m_pObject;
    pdata = -20422;
    PgNet::AddNetMsg(v4, &pdata, 2);
    PgNet::SendNetMsg(&v5->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004B7360) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_SET_LOOTER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  _BYTE v4[20]; // ST00_20@1
  int v5; // edx@1
  int v6; // eax@1
  int v7; // edx@1
  int v8; // eax@1
  char *v9; // eax@1
  char *v10; // eax@1
  char acstr[21]; // [sp+1Ch] [bp-1Ch]@1
  unsigned int v13; // [sp+34h] [bp-4h]@1
  int v14; // [sp+38h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  *(_DWORD *)v4 = *((_DWORD *)pvData + 5);
  *(_QWORD *)&v4[4] = *((_QWORD *)pvData + 3);
  *(_QWORD *)&v4[12] = *((_QWORD *)pvData + 4);
  RaidInfo::ChangeRaidLooter(&g_kRaidinfo, *(Name5 *)v4);
  v5 = *((_DWORD *)pvData + 5);
  v6 = *((_DWORD *)pvData + 6);
  *(_DWORD *)&acstr[8] = *((_DWORD *)pvData + 7);
  *(_DWORD *)acstr = v5;
  v7 = *((_DWORD *)pvData + 8);
  *(_DWORD *)&acstr[4] = v6;
  v8 = *((_DWORD *)pvData + 9);
  *(_DWORD *)&acstr[12] = v7;
  *(_DWORD *)&acstr[16] = v8;
  acstr[20] = 0;
  v9 = TextData2::Get(0x21113334u);
  v10 = fs(v9);
  GameFrameWork::AddSysMsg(v3, v10);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B7400) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_CHAT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData == 8130 )
  {
    v4 = TextData2::Get(0xCBE2CB31u);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004B7430) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_WARNING_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  char *v6; // eax@4

  v3 = this;
  if ( *(_WORD *)pvData != 7808 )
  {
    if ( *(_WORD *)pvData == 8067 )
    {
      v4 = TextData2::Get(0xCBE2CB31u);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
    v6 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v6);
  }
  return iRevBytes;
}

//----- (004B7490) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_WARNING_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  SHINE_ITEM_STRUCT *v3; // esi@3
  signed int v4; // ebx@3
  int v5; // ebx@7
  BYTE *v6; // esi@7
  char *v7; // eax@18
  D3DXCOLOR v8; // ST08_16@19
  char *v9; // eax@20
  char *v11; // [sp-8h] [bp-130h]@16
  signed int nTextCnt; // [sp+10h] [bp-118h]@7
  unsigned int uiRemainderText; // [sp+14h] [bp-114h]@7
  GameFrameWork *thisa; // [sp+18h] [bp-110h]@1
  char acStrText[129]; // [sp+1Ch] [bp-10Ch]@15
  char acStr[129]; // [sp+A0h] [bp-88h]@7
  unsigned int v17; // [sp+124h] [bp-4h]@1
  int v18; // [sp+128h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  thisa = this;
  if ( g_kRaidinfo.m_bIsDisplayNotice )
  {
    if ( (signed int)*(_BYTE *)pvData > 0 )
    {
      v3 = (SHINE_ITEM_STRUCT *)((char *)pvData + *((_BYTE *)pvData + 21) + 22);
      v4 = *(_BYTE *)pvData;
      do
      {
        GameFrameWork::AddSChatItemLink(thisa, 8192, v3);
        ++v3;
        --v4;
      }
      while ( v4 );
    }
    if ( *((_BYTE *)pvData + 21) > 0x80u )
      *((_BYTE *)pvData + 21) = -128;
    strncpy(acStr, (char *)pvData + 22, *((_BYTE *)pvData + 21));
    v5 = 0;
    acStr[*((_BYTE *)pvData + 21)] = 0;
    nTextCnt = 0;
    uiRemainderText = 0;
    v6 = acStr;
    if ( acStr[0] )
    {
      while ( 1 )
      {
        if ( IsDBCSLeadByte(*v6) )
        {
          v6 += 2;
          v5 += 2;
        }
        else
        {
          ++v6;
          ++v5;
        }
        ++nTextCnt;
        if ( nTextCnt >= 50 )
          break;
        if ( !*v6 )
          goto LABEL_15;
      }
      uiRemainderText = strlen(v6);
    }
LABEL_15:
    *((_BYTE *)pvData + 21) = v5;
    strncpy(acStrText, (char *)pvData + 22, (unsigned __int8)v5);
    acStrText[*((_BYTE *)pvData + 21)] = 0;
    if ( uiRemainderText )
    {
      TextData::Get(0xFAF72626u);
      v11 = "%s : %s...";
    }
    else
    {
      TextData::Get(0xFAF72626u);
      v11 = "%s : %s";
    }
    v7 = fs(v11);
    if ( g_kRaidinfo.m_bIsDisplayNotice )
    {
      *(_QWORD *)&v8.r = *(_QWORD *)&Color::m_kDxYellowColor;
      *(_QWORD *)&v8.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
      GTInformWin::AddText(thisa->m_pkExpeditionWarnigMsgWin, 3u, v7, COERCE_D3DXCOLOR(v8.r), 3.0);
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Dice_CoinClick);
      if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount <= 0 )
      {
        TextData::Get(0xFAF72626u);
        v9 = fs("%s : %s");
        ChatDisplayWin2::AddRaidNoticeChat(thisa->m_pkChatDisplayWin, v9);
      }
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B76A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Char *v4; // eax@2
  int v5; // esi@3
  void (*v6)(void); // eax@3
  char *v7; // eax@4
  char *v8; // eax@4
  char *v10; // eax@5
  char *v11; // eax@5

  v3 = this;
  if ( pvData )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
    if ( v4 )
    {
      v5 = *(_DWORD *)((char *)pvData + 2);
      v6 = (void (*)(void))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex;
      if ( v5 == 65534 )
      {
        v6();
        v7 = TextData2::Get(0x7F96DFC1u);
        v8 = fs(v7);
        GameFrameWork::AddSysMsg(v3, v8);
        return iRevBytes;
      }
      ((void (__cdecl *)(int))v6)(v5);
      v10 = TextData2::Get(0x77A68CBCu);
      v11 = fs(v10);
      GameFrameWork::AddSysMsg(v3, v11);
    }
  }
  return iRevBytes;
}

//----- (004B7730) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_DICE_GAME_RESULT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  int v4; // edx@3
  int v5; // ecx@3
  int v6; // edi@3
  int v7; // eax@3
  int v8; // edx@3
  int v9; // ebx@3
  int v10; // edx@5
  char *v11; // eax@7
  char *v12; // eax@7
  char *v14; // eax@9
  GameFrameWork *v15; // [sp+8h] [bp-20h]@1
  char acName[21]; // [sp+Ch] [bp-1Ch]@3
  unsigned int v17; // [sp+24h] [bp-4h]@1
  int v18; // [sp+28h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = this;
  v15 = this;
  if ( pvData )
  {
    if ( *(_WORD *)pvData == 8200 )
    {
      v4 = *(_DWORD *)((char *)pvData + 2);
      v5 = *(_DWORD *)((char *)pvData + 10);
      v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      *(_DWORD *)&acName[4] = *(_DWORD *)((char *)pvData + 6);
      v7 = *(_DWORD *)((char *)pvData + 18);
      *(_DWORD *)acName = v4;
      v8 = *(_DWORD *)((char *)pvData + 14);
      v9 = *((_WORD *)pvData + 13);
      *(_DWORD *)&acName[8] = v5;
      *(_DWORD *)&acName[16] = v7;
      *(_DWORD *)&acName[12] = v8;
      acName[20] = 0;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v9) )
      {
        if ( (unsigned __int16)v9 <= *(_WORD *)(v6 + 200) )
        {
          v10 = *(_DWORD *)(v6 + 196);
          if ( *(_DWORD *)(v10 + 4 * v9) )
          {
            if ( *(_DWORD *)(v10 + 4 * v9) )
            {
              v11 = TextData2::Get(0xD5EDCDC3u);
              v12 = fs(v11);
              GameFrameWork::AddSysMsg(v15, v12);
            }
          }
        }
      }
    }
    else
    {
      v14 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v3, v14);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B7820) --------------------------------------------------------
void __thiscall GameFrameWork::NcPartySetLooterReq(GameFrameWork *this, Name5 kCharID)
{
  GameFrameWork *v2; // esi@1
  Name5 *v3; // eax@1
  char *v4; // eax@4
  __int16 pdata; // [sp+4h] [bp-30h]@5
  Name5 result; // [sp+8h] [bp-2Ch]@1
  PROTO_NC_PARTY_SET_LOOTER_REQ kProto; // [sp+1Ch] [bp-18h]@1
  unsigned int v8; // [sp+30h] [bp-4h]@1
  int v9; // [sp+34h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  *(_DWORD *)&kProto.sNewLooterCharID.n5_name[8] = *(_DWORD *)&kCharID.n5_name[8];
  *(_QWORD *)&kProto.sNewLooterCharID.n5_name[0] = *(_QWORD *)&kCharID;
  *(_QWORD *)&kProto.sNewLooterCharID.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
  v3 = Party::GetLooterID(&g_kParty, &result);
  if ( *(_QWORD *)&v3->n5_name[0] != *(_QWORD *)&kCharID
    || *(_QWORD *)&v3->n5_name[8] != *(_QWORD *)&kCharID.n5_name[8]
    || *(_DWORD *)&v3->n5_name[16] != *(_DWORD *)&kCharID.n5_name[16] )
  {
    pdata = 14426;
    PgNet::AddNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &pdata, 2);
    PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
  }
  else
  {
    v4 = TextData2::Get(0x92A35DB9u);
    GameFrameWork::AddSysMsg(v2, v4);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004B78F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_SET_LOOTER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // esi@1
  int v5; // eax@1
  char *v6; // eax@1
  char *v7; // eax@1
  char *v8; // eax@2
  _BYTE v9[20]; // ST00_20@2
  const char *v10; // eax@2
  char dest[4]; // [sp+8h] [bp-30h]@2
  __int64 v13; // [sp+Ch] [bp-2Ch]@2
  __int64 v14; // [sp+14h] [bp-24h]@2
  char acStr[21]; // [sp+1Ch] [bp-1Ch]@1
  unsigned int v16; // [sp+34h] [bp-4h]@1
  int v17; // [sp+38h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = this;
  *(_DWORD *)acStr = *(_DWORD *)pvData;
  *(_DWORD *)&acStr[8] = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acStr[4] = v3;
  v5 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acStr[12] = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acStr[16] = v5;
  acStr[20] = 0;
  v6 = TextData2::Get(0x5F8E8EB2u);
  v7 = fs(v6);
  GameFrameWork::AddSysMsg(v4, v7);
  if ( v4->m_pkPartyLootSetupWin )
  {
    v8 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    v14 = 0i64;
    v13 = 0i64;
    *(_DWORD *)dest = 0;
    strncpy(dest, v8, 0x14u);
    *(_DWORD *)v9 = *(_DWORD *)dest;
    *(_QWORD *)&v9[4] = v13;
    *(_QWORD *)&v9[12] = v14;
    Party::SetLooterID(&g_kParty, *(Name5 *)v9);
    v10 = (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    PartyLootSetupWin::SetLooterName(v4->m_pkPartyLootSetupWin, v10);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B79E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PARTY_SET_LOOTER_BROAD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  int v4; // eax@1
  GameFrameWork *v5; // edi@1
  int v6; // ecx@1
  int v7; // edx@1
  int v8; // ecx@1
  int v9; // eax@1
  int v10; // edx@1
  int v11; // eax@1
  int v12; // eax@1
  char *v13; // eax@1
  char *v14; // eax@1
  _BYTE v15[20]; // ST00_20@2
  char acName[21]; // [sp+8h] [bp-34h]@1
  char acName2[21]; // [sp+20h] [bp-1Ch]@1
  unsigned int v19; // [sp+38h] [bp-4h]@1
  int v20; // [sp+3Ch] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 2);
  v4 = *(_DWORD *)pvData;
  v5 = this;
  *(_DWORD *)&acName[4] = *((_DWORD *)pvData + 1);
  v6 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[8] = v3;
  v7 = *((_DWORD *)pvData + 5);
  *(_DWORD *)&acName[16] = v6;
  v8 = *((_DWORD *)pvData + 7);
  *(_DWORD *)acName = v4;
  v9 = *((_DWORD *)pvData + 3);
  *(_DWORD *)acName2 = v7;
  v10 = *((_DWORD *)pvData + 8);
  *(_DWORD *)&acName2[8] = v8;
  *(_DWORD *)&acName[12] = v9;
  v11 = *((_DWORD *)pvData + 6);
  *(_DWORD *)&acName2[12] = v10;
  *(_DWORD *)&acName2[4] = v11;
  v12 = *((_DWORD *)pvData + 9);
  acName[20] = 0;
  *(_DWORD *)&acName2[16] = v12;
  acName2[20] = 0;
  v13 = TextData2::Get(0x16322929u);
  v14 = fs(v13);
  GameFrameWork::AddSysMsg(v5, v14);
  if ( v5->m_pkPartyLootSetupWin )
  {
    *(_DWORD *)v15 = *((_DWORD *)pvData + 5);
    *(_QWORD *)&v15[4] = *((_QWORD *)pvData + 3);
    *(_QWORD *)&v15[12] = *((_QWORD *)pvData + 4);
    Party::SetLooterID(&g_kParty, *(Name5 *)v15);
    PartyLootSetupWin::SetLooterName(v5->m_pkPartyLootSetupWin, acName2);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B7AC0) --------------------------------------------------------
void __thiscall GameFrameWork::SendMapMultyLink(GameFrameWork *this, Name3 mapName)
{
  PROTO_NC_MAP_MULTY_LINK_SELECT_REQ pkProto; // [sp+0h] [bp-10h]@1
  unsigned int v3; // [sp+Ch] [bp-4h]@1
  int v4; // [sp+10h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  *(_QWORD *)&pkProto.LinkMapName.n3_name[4] = 0i64;
  *(_DWORD *)&pkProto.LinkMapName.n3_name[0] = 0;
  if ( MapInfoTab::GetByMapName(&mapName) )
  {
    *(_QWORD *)&pkProto.LinkMapName.n3_name[0] = *(_QWORD *)&mapName;
    *(_DWORD *)&pkProto.LinkMapName.n3_name[8] = *(_DWORD *)&mapName.n3_name[8];
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 6u, 0x1Fu, &pkProto, 12);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004B7B30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_CHAT_BLOCK_SPAMER_BLOCKTIME_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@2
  int result; // eax@2
  char *v7; // eax@3
  char *v8; // eax@3

  v3 = this;
  if ( (signed int)(*(_DWORD *)pvData / 0x3Cu) <= 0 )
  {
    v7 = TextData2::Get(0x1A5A5597u);
    v8 = fs(v7);
    GameFrameWork::AddSysMsg(v3, v8);
    result = iRevBytes;
  }
  else
  {
    v4 = TextData2::Get(0x255F559Du);
    v5 = fs(v4);
    GameFrameWork::AddSysMsg(v3, v5);
    result = iRevBytes;
  }
  return result;
}

//----- (004B7BA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_ITEM_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@2
  PROTO_AVATARINFORMATION *v6; // eax@2
  int v7; // ebx@2
  int v8; // edi@2
  PROTO_AVATARINFORMATION *v9; // esi@2
  PROTO_AVATARINFORMATION *v10; // ebx@3
  int v11; // edi@3
  int v12; // eax@6
  char *v13; // eax@9
  int result; // eax@16
  int v15; // eax@21
  char *v16; // eax@23
  char *v17; // eax@25
  unsigned int v18; // [sp-4h] [bp-50h]@24
  Name5 MainCharName; // [sp+8h] [bp-44h]@9
  Name5 AvatarName; // [sp+1Ch] [bp-30h]@9
  char acName[21]; // [sp+30h] [bp-1Ch]@9
  unsigned int v22; // [sp+48h] [bp-4h]@1
  int v23; // [sp+4Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 == 8368 )
  {
    v5 = TextData2::Get(0x2E90813Du);
    MsgBox::Modal(MSGBOX_OK, v5);
    v6 = User::GetSelectedAvatarInfo(&g_kUser);
    v7 = *((_WORD *)pvData + 1);
    v8 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v9 = v6;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v7) )
    {
      if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) )
      {
        v12 = *(_DWORD *)(v8 + 196) + 4 * v7;
        v10 = 0;
        if ( *(_DWORD *)v12 )
          v11 = *(_DWORD *)v12;
        else
          v11 = 0;
      }
      else
      {
        v10 = 0;
        v11 = 0;
      }
    }
    else
    {
      v10 = 0;
      v11 = 0;
    }
    *(_DWORD *)&AvatarName.n5_name[16] = v10;
    *(_DWORD *)&AvatarName.n5_name[12] = v10;
    *(_DWORD *)&AvatarName.n5_name[8] = v10;
    *(_DWORD *)&AvatarName.n5_name[4] = v10;
    *(_DWORD *)&AvatarName.n5_name[0] = v10;
    v13 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    *(_DWORD *)&MainCharName.n5_name[16] = v10;
    *(_DWORD *)&MainCharName.n5_name[12] = v10;
    *(_DWORD *)&MainCharName.n5_name[8] = v10;
    *(_DWORD *)&MainCharName.n5_name[4] = v10;
    *(_DWORD *)&MainCharName.n5_name[0] = v10;
    strncpy(MainCharName.n5_name, v13, 0x14u);
    *(_DWORD *)acName = *(_DWORD *)&v9->name.n5_name[0];
    *(_DWORD *)&acName[4] = *(_DWORD *)&v9->name.n5_name[4];
    *(_DWORD *)&acName[8] = *(_DWORD *)&v9->name.n5_name[8];
    *(_DWORD *)&acName[12] = *(_DWORD *)&v9->name.n5_name[12];
    *(_DWORD *)&acName[16] = *(_DWORD *)&v9->name.n5_name[16];
    acName[20] = (char)v10;
    *(_DWORD *)&AvatarName.n5_name[16] = v10;
    *(_DWORD *)&AvatarName.n5_name[12] = v10;
    *(_DWORD *)&AvatarName.n5_name[8] = v10;
    *(_DWORD *)&AvatarName.n5_name[4] = v10;
    *(_DWORD *)&AvatarName.n5_name[0] = v10;
    strncpy(AvatarName.n5_name, acName, 0x14u);
    if ( *(_QWORD *)&AvatarName != *(_QWORD *)&MainCharName
      || *(_QWORD *)&AvatarName.n5_name[8] != *(_QWORD *)&MainCharName.n5_name[8]
      || *(_DWORD *)&AvatarName.n5_name[16] != *(_DWORD *)&MainCharName.n5_name[16] )
      v9 = User::GetAvatarInfo(&g_kUser, &MainCharName);
    if ( v9 != v10 && (PROTO_AVATARINFORMATION *)v11 != v10 )
    {
      if ( *(_DWORD *)(v11 + 374) != 4 )
      {
        result = iRevBytes;
        if ( *(_DWORD *)(v11 + 374) == 5 )
          *(_WORD *)&v9->CharIDChangeData.bNeedChangeID = 257;
        return result;
      }
      v9->CharIDChangeData.bNeedChangeID = 1;
    }
    return iRevBytes;
  }
  v15 = v3 - 8377;
  if ( v15 )
  {
    if ( v15 != 1 )
    {
      v16 = TextData::Get(0x226625A6u);
      GameFrameWork::AddSysMsg(v4, v16);
      return iRevBytes;
    }
    v18 = 170205213;
  }
  else
  {
    v18 = -1964077166;
  }
  v17 = TextData2::Get(v18);
  GameFrameWork::AddSysMsg(v4, v17);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004B7D90) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_ADD_GEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edx@1
  char *v4; // eax@1
  unsigned __int16 v5; // ax@1
  void *v6; // edi@1
  EnchantGemWin *v7; // esi@1
  Item *v8; // ebx@1
  int v9; // eax@2
  int v10; // eax@5
  int v11; // eax@9
  int v12; // eax@11
  char *v13; // eax@13
  int v14; // eax@17
  char *v15; // eax@19
  int result; // eax@22
  EnchantGemToolTipWin *v17; // ecx@26
  char *v18; // eax@31
  char v19; // [sp+Ch] [bp-70h]@9
  unsigned __int8 v20; // [sp+47h] [bp-35h]@9
  char v21; // [sp+48h] [bp-34h]@9
  __int16 v22; // [sp+70h] [bp-Ch]@9
  char v23; // [sp+72h] [bp-Ah]@9
  SoundIndex rkIndex; // [sp+74h] [bp-8h]@1
  ITEM_INVEN *pvDataa; // [sp+88h] [bp+Ch]@1

  v3 = pvData;
  v4 = (char *)pvData + 2;
  pvDataa = (ITEM_INVEN *)v4;
  v5 = *(_WORD *)v4;
  v6 = this;
  v7 = 0;
  v8 = 0;
  rkIndex.m_acFilename = (char *)this;
  if ( v5 >> 10 == 9 )
  {
    v9 = v5 & 0x3FF;
    if ( (unsigned int)v9 >= 0xC0 )
      goto LABEL_17;
    v8 = g_kInventory.m_aspInv[v9].m_pObject;
  }
  else
  {
    if ( v5 >> 10 != 8 )
      goto LABEL_17;
    v10 = v5 & 0x3FF;
    if ( (unsigned int)v10 >= 0x1E )
    {
      v8 = 0;
      goto LABEL_17;
    }
    v8 = g_kInventory.m_aspEquip[v10].m_pObject;
  }
  if ( v8 )
  {
    memcpy(&v19, &v8->m_kStruct, 0x64u);
    v22 = *(_WORD *)((char *)&v8->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v23 = BYTE3(v8->m_kStruct.itemattr.binditem.portal[9].y);
    v11 = v20;
    if ( !v21 )
      v11 = v20 + 1;
    v12 = v11 - 1;
    if ( v12 )
    {
      if ( v12 == 1 )
      {
        v7 = (EnchantGemWin *)*((_DWORD *)rkIndex.m_acFilename + 244);
        v6 = rkIndex.m_acFilename;
        goto LABEL_17;
      }
      v13 = rkIndex.m_acFilename;
      v7 = (EnchantGemWin *)*((_DWORD *)rkIndex.m_acFilename + 245);
    }
    else
    {
      v13 = rkIndex.m_acFilename;
      v7 = (EnchantGemWin *)*((_DWORD *)rkIndex.m_acFilename + 243);
    }
    v6 = v13;
  }
LABEL_17:
  v14 = *(_WORD *)v3;
  if ( v14 == 8320 )
  {
    if ( (unsigned __int8)((int (__thiscall *)(EnchantGemWin *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v7) )
      EnchantGemWin::SignGemSuccess(v7, pvDataa, v8);
    v17 = (EnchantGemToolTipWin *)*((_DWORD *)v6 + 249);
    if ( v17 )
      EnchantGemToolTipWin::SetEnchantGemDesc(v17, v8);
    if ( !(_local_static_guard_ & 1) )
    {
      _local_static_guard_ |= 1u;
      TutorialMgr::TutorialMgr(&kTutorialMgr);
      atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
    }
    TutorialMgr::On_NC_WT_LICENSE_ACK(&kTutorialMgr);
    v18 = TextData3::Get(0x71A8C9F1u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v18);
    rkIndex.m_dwIndex = 3;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
    result = iRevBytes;
  }
  else
  {
    if ( (unsigned int)(v14 - 8321) > 7 )
      v15 = TextData::Get(0xE90C344Bu);
    else
      v15 = ErrMsgTable::GetErrMsg(*(_WORD *)v3);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v15);
    if ( v7 )
      EnchantGemWin::SignGemFailed(v7, pvDataa);
    result = iRevBytes;
  }
  return result;
}
// A98300: using guessed type int _local static guard_;

//----- (004B7F20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_REMOVE_GEM_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edx@1
  char *v4; // eax@1
  unsigned __int16 v5; // ax@1
  void *v6; // edi@1
  EnchantGemWin *v7; // esi@1
  Item *v8; // ebx@1
  int v9; // eax@2
  int v10; // eax@5
  int v11; // eax@9
  int v12; // eax@11
  char *v13; // eax@13
  int v14; // eax@17
  char *v15; // eax@19
  int result; // eax@22
  EnchantGemToolTipWin *v17; // ecx@26
  char *v18; // eax@28
  char v19; // [sp+Ch] [bp-70h]@9
  unsigned __int8 v20; // [sp+47h] [bp-35h]@9
  char v21; // [sp+48h] [bp-34h]@9
  __int16 v22; // [sp+70h] [bp-Ch]@9
  char v23; // [sp+72h] [bp-Ah]@9
  SoundIndex rkIndex; // [sp+74h] [bp-8h]@1
  ITEM_INVEN *pvDataa; // [sp+88h] [bp+Ch]@1

  v3 = pvData;
  v4 = (char *)pvData + 2;
  pvDataa = (ITEM_INVEN *)v4;
  v5 = *(_WORD *)v4;
  v6 = this;
  v7 = 0;
  v8 = 0;
  rkIndex.m_acFilename = (char *)this;
  if ( v5 >> 10 == 9 )
  {
    v9 = v5 & 0x3FF;
    if ( (unsigned int)v9 >= 0xC0 )
      goto LABEL_17;
    v8 = g_kInventory.m_aspInv[v9].m_pObject;
  }
  else
  {
    if ( v5 >> 10 != 8 )
      goto LABEL_17;
    v10 = v5 & 0x3FF;
    if ( (unsigned int)v10 >= 0x1E )
    {
      v8 = 0;
      goto LABEL_17;
    }
    v8 = g_kInventory.m_aspEquip[v10].m_pObject;
  }
  if ( v8 )
  {
    memcpy(&v19, &v8->m_kStruct, 0x64u);
    v22 = *(_WORD *)((char *)&v8->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v23 = BYTE3(v8->m_kStruct.itemattr.binditem.portal[9].y);
    v11 = v20;
    if ( !v21 )
      v11 = v20 + 1;
    v12 = v11 - 1;
    if ( v12 )
    {
      if ( v12 == 1 )
      {
        v7 = (EnchantGemWin *)*((_DWORD *)rkIndex.m_acFilename + 247);
        v6 = rkIndex.m_acFilename;
        goto LABEL_17;
      }
      v13 = rkIndex.m_acFilename;
      v7 = (EnchantGemWin *)*((_DWORD *)rkIndex.m_acFilename + 248);
    }
    else
    {
      v13 = rkIndex.m_acFilename;
      v7 = (EnchantGemWin *)*((_DWORD *)rkIndex.m_acFilename + 246);
    }
    v6 = v13;
  }
LABEL_17:
  v14 = *(_WORD *)v3;
  if ( v14 == 8336 )
  {
    if ( (unsigned __int8)((int (__thiscall *)(EnchantGemWin *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v7) )
      EnchantGemWin::SignGemSuccess(v7, pvDataa, v8);
    v17 = (EnchantGemToolTipWin *)*((_DWORD *)v6 + 249);
    if ( v17 )
      EnchantGemToolTipWin::SetEnchantGemDesc(v17, v8);
    rkIndex.m_dwIndex = 3;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
    v18 = TextData3::Get(0x81B4C4D3u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v18);
    result = iRevBytes;
  }
  else
  {
    if ( (unsigned int)(v14 - 8337) > 4 )
      v15 = TextData::Get(0xE90C344Bu);
    else
      v15 = ErrMsgTable::GetErrMsg(*(_WORD *)v3);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v15);
    if ( v7 )
      EnchantGemWin::SignGemFailed(v7, pvDataa);
    result = iRevBytes;
  }
  return result;
}

//----- (004B8080) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_ADD_NEW_SOCKET_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // ebx@1
  __int16 v5; // cx@1
  int v6; // eax@2
  int v7; // eax@6
  int v8; // eax@10
  int v9; // eax@12
  void *v10; // ecx@15
  int v11; // eax@27
  char *v12; // eax@29
  InventoryWin *v13; // ebx@31
  EnchantGemWin *v15; // esi@35
  EnchantGemToolTipWin *v16; // ecx@38
  InventoryWin *v17; // ebx@40
  char v18; // [sp+8h] [bp-78h]@10
  unsigned __int8 v19; // [sp+43h] [bp-3Dh]@10
  char v20; // [sp+44h] [bp-3Ch]@10
  __int16 v21; // [sp+6Ch] [bp-14h]@10
  char v22; // [sp+6Eh] [bp-12h]@10
  SoundIndex rkIndex; // [sp+70h] [bp-10h]@1
  EnchantGemWin *pkWin; // [sp+78h] [bp-8h]@1
  Item *pkWeapon; // [sp+7Ch] [bp-4h]@1

  rkIndex.m_acFilename = (char *)pvData + 2;
  v3 = *((_WORD *)pvData + 1);
  v4 = this;
  v5 = *((_WORD *)pvData + 1) >> 10;
  pkWin = 0;
  pkWeapon = 0;
  if ( v5 == 9 )
  {
    v6 = v3 & 0x3FF;
    if ( (unsigned int)v6 >= 0xC0 )
    {
      pkWeapon = 0;
      goto LABEL_27;
    }
    pkWeapon = g_kInventory.m_aspInv[v6].m_pObject;
  }
  else
  {
    if ( v5 != 8 )
      goto LABEL_27;
    v7 = v3 & 0x3FF;
    if ( (unsigned int)v7 >= 0x1E )
    {
      pkWeapon = 0;
      goto LABEL_27;
    }
    pkWeapon = g_kInventory.m_aspEquip[v7].m_pObject;
  }
  if ( pkWeapon )
  {
    memcpy(&v18, &pkWeapon->m_kStruct, 0x64u);
    v21 = *(_WORD *)((char *)&pkWeapon->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v22 = BYTE3(pkWeapon->m_kStruct.itemattr.binditem.portal[9].y);
    v8 = v19;
    if ( !v20 )
      v8 = v19 + 1;
    v9 = v8 - 1;
    if ( v9 )
    {
      if ( v9 == 1 )
      {
        if ( (unsigned __int8)((int (*)(void))v4->m_pkEnchantGemDeleteWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          v10 = v4->m_pkEnchantGemDeleteWin2;
        }
        else
        {
          if ( !(unsigned __int8)((int (*)(void))v4->m_pkEnchantGemWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
            goto LABEL_27;
          v10 = v4->m_pkEnchantGemWin2;
        }
      }
      else
      {
        if ( (unsigned __int8)((int (*)(void))v4->m_pkEnchantGemDeleteWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          v10 = v4->m_pkEnchantGemDeleteWin3;
        }
        else
        {
          if ( !(unsigned __int8)((int (*)(void))v4->m_pkEnchantGemWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
            goto LABEL_27;
          v10 = v4->m_pkEnchantGemWin3;
        }
      }
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v4->m_pkEnchantGemDeleteWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        v10 = v4->m_pkEnchantGemDeleteWin1;
      }
      else
      {
        if ( !(unsigned __int8)((int (*)(void))v4->m_pkEnchantGemWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          goto LABEL_27;
        v10 = v4->m_pkEnchantGemWin1;
      }
    }
    pkWin = (EnchantGemWin *)v10;
  }
LABEL_27:
  v11 = *(_WORD *)pvData;
  if ( v11 != 8352 )
  {
    if ( (unsigned int)(v11 - 8353) > 4 )
      v12 = TextData::Get(0xE90C344Bu);
    else
      v12 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v4, v12);
    if ( pkWin )
    {
      EnchantGemWin::SignGemFailed(pkWin, (ITEM_INVEN *)rkIndex.m_acFilename);
      v13 = v4->m_pkInventoryWin;
      if ( v13 )
        InventoryWin::OnCreateNewSocket(v13, 0);
    }
    return iRevBytes;
  }
  v15 = pkWin;
  if ( pkWin
    && (unsigned __int8)((int (__thiscall *)(EnchantGemWin *))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(pkWin) )
    EnchantGemWin::SignGemSuccess(v15, (ITEM_INVEN *)rkIndex.m_acFilename, pkWeapon);
  v16 = v4->m_pkEnchantGemToolTipWin;
  if ( v16 )
    EnchantGemToolTipWin::SetEnchantGemDesc(v16, pkWeapon);
  rkIndex.m_dwIndex = 3;
  rkIndex.m_acFilename = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  v17 = v4->m_pkInventoryWin;
  if ( !v17 )
    return iRevBytes;
  InventoryWin::OnCreateNewSocket(v17, 1);
  return iRevBytes;
}

//----- (004B82B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_ENCHANT_SET_GEM_LOT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int16 v3; // ax@1
  int v4; // eax@2
  Item *v5; // ebx@3
  int v6; // eax@5
  int v7; // esi@8
  EnchantGemWin *v8; // esi@12
  EnchantGemToolTipWin *v9; // ecx@17
  char v11; // [sp+4h] [bp-6Ch]@8
  unsigned __int8 v12; // [sp+3Fh] [bp-31h]@8
  char v13; // [sp+40h] [bp-30h]@8
  __int16 v14; // [sp+68h] [bp-8h]@8
  char v15; // [sp+6Ah] [bp-6h]@8
  GameFrameWork *v16; // [sp+6Ch] [bp-4h]@1

  v3 = *(_WORD *)pvData;
  v16 = this;
  if ( v3 >> 10 == 9 )
  {
    v4 = v3 & 0x3FF;
    if ( (unsigned int)v4 >= 0xC0 )
      return iRevBytes;
    v5 = g_kInventory.m_aspInv[v4].m_pObject;
  }
  else
  {
    if ( v3 >> 10 != 8 || (v6 = v3 & 0x3FF, (unsigned int)v6 >= 0x1E) )
      return iRevBytes;
    v5 = g_kInventory.m_aspEquip[v6].m_pObject;
  }
  if ( v5 )
  {
    memcpy(&v11, &v5->m_kStruct, 0x64u);
    v14 = *(_WORD *)((char *)&v5->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v15 = BYTE3(v5->m_kStruct.itemattr.binditem.portal[9].y);
    v7 = v12;
    if ( !v13 )
      v7 = v12 + 1;
    ((void (__thiscall *)(Item *, _DWORD, _DWORD))v5->baseclass_0.vfptr[20].__vecDelDtor)(
      v5,
      *((_BYTE *)pvData + 2),
      *((_BYTE *)pvData + 3));
    if ( v7 == 1 )
    {
      v8 = v16->m_pkEnchantGemWin1;
    }
    else
    {
      if ( v7 == 2 )
        v8 = v16->m_pkEnchantGemWin2;
      else
        v8 = v16->m_pkEnchantGemWin3;
    }
    if ( (unsigned __int8)((int (__thiscall *)(EnchantGemWin *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v8) )
      EnchantGemWin::SignGemSuccess(v8, (ITEM_INVEN *)pvData, v5);
    v9 = v16->m_pkEnchantGemToolTipWin;
    if ( v9 )
      EnchantGemToolTipWin::SetEnchantGemDesc(v9, v5);
  }
  return iRevBytes;
}

//----- (004B83A0) --------------------------------------------------------
void __thiscall GameFrameWork::SendDefaultGameOpt(GameFrameWork *this)
{
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  LOWORD(netcmd) = 28741;
  PgNet::SendNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &netcmd, 2);
}

//----- (004B83D0) --------------------------------------------------------
void __thiscall GameFrameWork::SendDefaultKeyRemappingReq(GameFrameWork *this)
{
  GameFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  LOWORD(netcmd) = 28739;
  PgNet::SendNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &netcmd, 2);
}

//----- (004B8400) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_MYSTERYVAULT_UI_STATE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@4
  Item *v5; // eax@5
  ItemInfo *v6; // edi@6
  unsigned int v7; // ST04_4@9
  unsigned int v8; // eax@9

  v3 = this;
  if ( User::Lv(&g_kUser) > 1 )
  {
    if ( *(_BYTE *)pvData == 1 )
    {
      if ( Inventory::FindMysteryVault(&g_kInventory, (ITEM_INVEN *)&pvData) )
      {
        v4 = (unsigned __int16)pvData & 0x3FF;
        if ( (unsigned int)v4 < 0xC0 )
        {
          v5 = g_kInventory.m_aspInv[v4].m_pObject;
          if ( v5 )
          {
            v6 = v5->m_pkInfo;
            if ( v6 )
            {
              if ( (unsigned __int8)((int (*)(void))v3->m_pkMysteryVaultWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
                GameFrameWork::CloseMysteryVaultWin(v3);
              v7 = v6->DemandLv;
              v8 = User::Lv(&g_kUser);
              MysteryVaultWin::OnReachTheLevel(v3->m_pkMysteryVaultWin, v8, v7);
              GameFrameWork::OpenMysteryVaultWin(v3);
            }
          }
        }
      }
    }
  }
  return iRevBytes;
}

//----- (004B84A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcMiscSpammerReportReq(GameFrameWork *this, Name5 kID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_MISC_SPAMMER_REPORT_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sSpammerName.n5_name[0] = *(_QWORD *)&kID;
  *(_QWORD *)&kProto.sSpammerName.n5_name[8] = *(_QWORD *)&kID.n5_name[8];
  *(_DWORD *)&kProto.sSpammerName.n5_name[16] = *(_DWORD *)&kID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = 2143;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B8510) --------------------------------------------------------
void __thiscall GameFrameWork::NcMiscSpammerChatBanReq(GameFrameWork *this, Name5 kID)
{
  GameFrameWork *v2; // esi@1
  PgNet *v3; // ecx@1
  __int16 pdata; // [sp+4h] [bp-1Ch]@1
  PROTO_NC_MISC_SPAMMER_CHAT_BAN_REQ kProto; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&kProto.sSpammerName.n5_name[0] = *(_QWORD *)&kID;
  *(_QWORD *)&kProto.sSpammerName.n5_name[8] = *(_QWORD *)&kID.n5_name[8];
  *(_DWORD *)&kProto.sSpammerName.n5_name[16] = *(_DWORD *)&kID.n5_name[16];
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  pdata = 2145;
  PgNet::AddNetMsg(v3, &pdata, 2);
  PgNet::SendNetMsg(&v2->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B8580) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_SPAMMER_CHAT_BAN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // esi@1
  int v5; // ecx@1
  int v6; // edx@1
  int v7; // ecx@1
  int v8; // eax@1
  char *v9; // eax@2
  char *v10; // eax@2
  char acName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v13; // [sp+1Ch] [bp-4h]@1
  int v14; // [sp+20h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = this;
  *(_DWORD *)acName = *(_DWORD *)pvData;
  v5 = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acName[4] = v3;
  v6 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[8] = v5;
  v7 = *((_DWORD *)pvData + 4);
  v8 = *((_WORD *)pvData + 10);
  *(_DWORD *)&acName[12] = v6;
  *(_DWORD *)&acName[16] = v7;
  acName[20] = 0;
  if ( (_WORD)v8 == 8552 )
  {
    v9 = TextData2::Get(0x21A39D6Du);
    v10 = fs(v9);
  }
  else
  {
    v10 = ErrMsgTable::GetErrMsg(v8);
  }
  GameFrameWork::AddSysMsg(v4, v10);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B8610) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_SPAMMER_RELEASE_CHAT_BAN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  int result; // eax@2
  char *v6; // eax@3

  v3 = this;
  if ( *(_WORD *)pvData == 8560 )
  {
    v4 = TextData2::Get(0x72A18F74u);
    GameFrameWork::AddSysMsg(v3, v4);
    result = iRevBytes;
  }
  else
  {
    v6 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v6);
    result = iRevBytes;
  }
  return result;
}

//----- (004B8660) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_AUTO_WAY_FINDING_USE_GATE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  MapNavigator *v4; // esi@2
  void *v5; // edi@3
  GTInformWin *v6; // esi@8
  D3DXCOLOR *v7; // eax@9
  D3DXCOLOR v8; // ST04_16@9
  char *v9; // eax@9
  D3DXCOLOR result; // [sp+14h] [bp-10h]@9

  v3 = this;
  if ( *(_WORD *)pvData != 9216 )
  {
    v4 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&pvData)->m_pObject;
    if ( pvData )
    {
      v5 = pvData;
      if ( !InterlockedDecrement((volatile LONG *)pvData + 1) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      }
    }
    if ( v4 )
    {
      if ( v4->m_bIsWorking )
      {
        v4->m_bIsWorking = 0;
        v6 = v3->m_pkAutoRunMsgWin;
        if ( v6 )
        {
          GTInformWin::Clear(v3->m_pkAutoRunMsgWin);
          v7 = Color::GetDxColor(&result, -1, -112, 0, -1);
          *(_QWORD *)&v8.r = *(_QWORD *)&v7->r;
          *(_QWORD *)&v8.b = *(_QWORD *)&v7->b;
          v9 = TextData2::Get(0x3C517589u);
          GTInformWin::AddText(v6, v9, COERCE_D3DXCOLOR(v8.r), 0, 3.0);
        }
      }
    }
  }
  return iRevBytes;
}

//----- (004B8740) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_COLLECT_CARDOPEN_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  unsigned int v4; // eax@2
  Item *v5; // esi@3
  unsigned int v6; // ebx@4
  int v7; // eax@4
  ItemInfo *v8; // esi@4
  CollectCard *v9; // eax@5
  char *v11; // eax@8
  unsigned int uiStar; // [sp+8h] [bp-4h]@4
  unsigned int uiSerial; // [sp+18h] [bp+Ch]@4

  v3 = this;
  if ( *(_WORD *)pvData != 11136 )
  {
    CollectCardWin::ResetEffect(this->m_pkCollectCardWin[0]);
    GameFrameWork::OpenCollectCardWin(v3, 0, 0, 0, 0, 0);
    v11 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v11);
    return iRevBytes;
  }
  v4 = *((_BYTE *)pvData + 2);
  if ( v4 >= 0xC0 || (v5 = g_kInventory.m_aspInv[v4].m_pObject) == 0 )
    return iRevBytes;
  v6 = 0;
  uiSerial = ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[14].__vecDelDtor)(v5);
  v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[16].__vecDelDtor)(v5);
  v8 = v5->m_pkInfo;
  uiStar = v7;
  if ( v8 )
  {
    v9 = CollectCardTab::GetByItemInx(v8->InxName);
    if ( v9 )
      v6 = v9->CC_CardID;
  }
  CollectCardWin::SetInfo(v3->m_pkCollectCardWin[0], v6, uiStar, uiSerial, 0);
  CollectCardWin::OpenCard(v3->m_pkCollectCardWin[0]);
  return iRevBytes;
}

//----- (004B8820) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_COLLECT_BOOKMARK_REGIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@5
  CollectWin *v5; // ecx@5
  char *v7; // eax@7
  unsigned int v8; // [sp-4h] [bp-Ch]@3

  v3 = this;
  if ( *((_WORD *)pvData + 2) == 11168 )
  {
    if ( *((_WORD *)pvData + 1) == -1 )
      v8 = -1243488801;
    else
      v8 = 1283428236;
    v4 = TextData2::Get(v8);
    GameFrameWork::AddSysMsg(v3, v4);
    v5 = v3->m_pkCollectWin;
    if ( v5 )
    {
      CollectWin::SetBookmark(v5, *(_WORD *)pvData, *((_WORD *)pvData + 1));
      CollectWin::Update(v3->m_pkCollectWin, 0);
      return iRevBytes;
    }
  }
  else
  {
    v7 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 2));
    GameFrameWork::AddSysMsg(v3, v7);
  }
  return iRevBytes;
}

//----- (004B88B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_COLLECT_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  CollectWin *v4; // ecx@2
  char *v5; // eax@4
  int result; // eax@4
  char *v7; // eax@5

  v3 = this;
  if ( *((_WORD *)pvData + 1) == 11176 )
  {
    v4 = this->m_pkCollectWin;
    if ( v4 )
    {
      CollectWin::SetReward(v4, *(_WORD *)pvData, 1);
      CollectWin::Update(v3->m_pkCollectWin, 0);
    }
    v5 = TextData2::Get(0xACFBB5B0u);
    GameFrameWork::AddSysMsg(v3, v5);
    result = iRevBytes;
  }
  else
  {
    v7 = ErrMsgTable::GetErrMsg(*((_WORD *)pvData + 1));
    GameFrameWork::AddSysMsg(v3, v7);
    result = iRevBytes;
  }
  return result;
}

//----- (004B8920) --------------------------------------------------------
void __thiscall GameFrameWork::NcCollectPeepingReq(GameFrameWork *this, Name5 *kCharID)
{
  GameFrameWork *v2; // edi@1
  PgNet *v3; // ecx@1
  unsigned int v4; // edx@1
  __int64 v5; // kr00_8@1
  PgNet *v6; // ecx@1
  NETCOMMAND netcmd; // [sp+8h] [bp-1Ch]@1
  PROTO_NC_COLLECT_PEEPING_REQ kProto; // [sp+Ch] [bp-18h]@1
  unsigned int v9; // [sp+20h] [bp-4h]@1
  int v10; // [sp+24h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = -15359;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = *(_DWORD *)&kCharID->n5_name[0];
  v5 = *(_QWORD *)&kCharID->n5_name[4];
  *(_DWORD *)&kProto.charname.n5_name[8] = *(_QWORD *)&kCharID->n5_name[4] >> 32;
  *(_QWORD *)&kProto.charname.n5_name[0] = __PAIR__(v5, v4);
  v6 = (PgNet *)v2->m_spZoneNet.m_pObject;
  *(_QWORD *)&kProto.charname.n5_name[12] = *(_QWORD *)&kCharID->n5_name[12];
  PgNet::SendNetMsg(v6, &kProto, 20);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B89A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_EQUIP_BELONGED_CANCEL_USE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  InventoryWin *v4; // eax@1
  unsigned int v5; // ecx@1
  ItemIcon *v6; // ecx@2
  Item *v7; // eax@3
  char *v8; // eax@6
  int result; // eax@6
  char *v10; // eax@9
  char *v11; // eax@9

  v3 = this;
  InventoryWin::ms_uiMode = 0;
  v4 = this->m_pkInventoryWin;
  v5 = v4->m_uiReceiverInvPos;
  if ( v5 < 0xC0 && (v6 = (ItemIcon *)v4->m_apkInvWin[v5]) != 0 )
    v7 = ItemIcon::GetItem(v6);
  else
    v7 = 0;
  if ( *(_WORD *)pvData == 10368 )
  {
    if ( v7 )
    {
      if ( v7->m_pkInfo )
      {
        v10 = TextData2::Get(0x6DF3BFF1u);
        v11 = fs(v10);
        GameFrameWork::AddSysMsg(v3, v11);
      }
    }
    InventoryWin::StartSuccessEffect(v3->m_pkInventoryWin);
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, PutOnClear);
    result = iRevBytes;
  }
  else
  {
    v8 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v8);
    result = iRevBytes;
  }
  return result;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004B8A50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_CHECK_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  char *v5; // eax@3
  int v6; // eax@4

  v3 = this;
  if ( this->m_pkWelcomeMsgWin )
  {
    v4 = TextData2::Get(0xD7323F31u);
    AnnounceWin::AddText(v3->m_pkWelcomeMsgWin, v4, &Color::m_kDxGreenColor, 1, 10.0);
  }
  v5 = TextData2::Get(0x79C8E7C9u);
  GameFrameWork::AddAuthorMsg(v3, v5);
  AttendCheckWin::CheckIt(v3->m_pkAttendCheckWin);
  if ( (unsigned __int8)((int (*)(void))v3->m_pkAttendCheckWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v6 = AttendCheckWin::GetMonthRewardIndex(v3->m_pkAttendCheckWin);
    if ( v6 != -1 )
    {
      GameFrameWork::NcCharEventAttendRewardReq(v3, v6, 27);
      return iRevBytes;
    }
  }
  else
  {
    AttendIconWin::SetActive(v3->m_pkAttendIconWin, 1);
  }
  return iRevBytes;
}

//----- (004B8B00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  void *v4; // esi@1
  Char *v5; // eax@1
  Mover *v6; // edi@1
  void *v7; // ecx@2
  _BYTE v8[12]; // ST10_12@3
  _BYTE v9[12]; // ST04_12@3
  char *v10; // eax@5
  void *v11; // esi@7

  v3 = this;
  v4 = pvData;
  v5 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v6 = (Mover *)v5;
  if ( v5 )
  {
    Mover::RideOn((Mover *)v5, g_pkMainChar, *((_BYTE *)v4 + 2));
    Mover::GetSlotNode(v6, (NiPointer<NiNode> *)&pvData, *((_BYTE *)v4 + 2));
    v7 = pvData;
    if ( pvData )
    {
      *(_DWORD *)v8 = (_DWORD)NiPoint3::UNIT_Y.x;
      *(_QWORD *)&v8[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
      *(_DWORD *)v9 = *((_DWORD *)pvData + 35);
      *(_QWORD *)&v9[4] = *((_QWORD *)pvData + 18);
      EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_St01", *(NiPoint3 *)v9, *(NiPoint3 *)v8, Timer::ms_fCurTime, 1.0);
      v7 = pvData;
    }
    if ( !*((_BYTE *)v4 + 2) )
    {
      v10 = TextData::Get(0x43482579u);
      GameFrameWork::AddSysMsg(v3, v10);
      GameFrameWork::OpenFeedMoverWin(v3, *(_WORD *)v4, *((_BYTE *)v4 + 3));
      v7 = pvData;
    }
    if ( v7 )
    {
      v11 = v7;
      if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      {
        if ( v11 )
          (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
      }
    }
  }
  else
  {
    GameFrameWork::NcBriefInfoCmd(v3, *(_WORD *)v4, 51, 2);
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B8C60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_RIDE_OFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  Mover *v4; // esi@2
  _BYTE v5[12]; // ST10_12@4
  _BYTE v6[12]; // ST04_12@4
  NiNode *v7; // esi@7
  NiPointer<NiNode> spSlotNode; // [sp+18h] [bp-10h]@3
  int v10; // [sp+24h] [bp-4h]@3

  v3 = this;
  if ( g_pkMainChar )
  {
    v4 = g_pkMainChar->m_pkMover;
    if ( v4 )
    {
      Mover::GetSlotNode(v4, &spSlotNode, g_pkMainChar->m_uiMoverSlot);
      v10 = 0;
      if ( spSlotNode.m_pObject )
      {
        *(_DWORD *)v5 = (_DWORD)NiPoint3::UNIT_Y.x;
        *(_QWORD *)&v5[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
        *(_DWORD *)v6 = LODWORD(spSlotNode.m_pObject->baseclass_0.m_kWorld.m_Translate.x);
        *(_QWORD *)&v6[4] = *(_QWORD *)&spSlotNode.m_pObject->baseclass_0.m_kWorld.m_Translate.y;
        EffectMgr::CreateEffect(&g_kEffectMgr, "Pet_Fi01", *(NiPoint3 *)v6, *(NiPoint3 *)v5, Timer::ms_fCurTime, 1.0);
      }
      Mover::SetMoverEffect(v4, 0, 0, 0);
      Mover::RideOff(v4, g_pkMainChar->m_uiMoverSlot);
      if ( GameFrameWork::sRideOffValue::IsMove(&v3->m_kRideOffValue) )
      {
        GameFrameWork::OnPickGround(v3, &v3->m_kRideOffValue.m_kGroundPos, v3->m_kRideOffValue.m_bViewPoint);
        v3->m_kRideOffValue.m_kSkillID = -1;
        v3->m_kRideOffValue.m_pkTarget = 0;
        v3->m_kRideOffValue.m_kPoint.x = 0;
        v3->m_kRideOffValue.m_kPoint.y = 0;
        LODWORD(v3->m_kRideOffValue.m_kGroundPos.x) = (_DWORD)NiPoint3::ZERO.x;
        v3->m_kRideOffValue.m_kGroundPos.y = NiPoint3::ZERO.y;
        v3->m_kRideOffValue.m_kGroundPos.z = NiPoint3::ZERO.z;
        v3->m_kRideOffValue.m_bViewPoint = 0;
      }
      v7 = spSlotNode.m_pObject;
      v10 = -1;
      if ( spSlotNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spSlotNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
  }
  GameFrameWork::CloseFeedMoverWin(v3);
  GameFrameWork::ChangeRun(v3);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004B8E00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MOVER_HUNGRY_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  FeedMoverWin *v4; // eax@1
  char *v5; // eax@7

  v3 = this;
  v4 = this->m_pkFeedMoverWin;
  if ( v4 )
  {
    if ( !v4->m_uiHungryPoint && *(_WORD *)pvData )
      GameFrameWork::ChangeRun(this);
    v3->m_pkFeedMoverWin->m_uiHungryPoint = *(_WORD *)pvData;
    FeedMoverWin::UpdateHungryPoint(v3->m_pkFeedMoverWin);
  }
  if ( !*(_WORD *)pvData )
  {
    GameFrameWork::ChangeWalk(v3);
    v5 = TextData::Get(0x81A4DDE2u);
    GameFrameWork::AddSysMsg(v3, v5);
  }
  return iRevBytes;
}

//----- (004B8E70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PET_SET_NAME_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@1
  PupMain *v5; // edi@2
  NpcDialogWin *v6; // ebx@3
  char *v7; // eax@3
  int result; // eax@4
  char *v9; // eax@5

  v3 = this;
  v4 = *(_WORD *)pvData;
  if ( (_WORD)v4 == 13520 )
  {
    v5 = PetMainTab::GetByPetID(*(_DWORD *)((char *)pvData + 2));
    if ( v5 )
    {
      NpcDialogWin::CloseDialog(v3->m_pkNpcDlgWin);
      v6 = v3->m_pkNpcDlgWin;
      v7 = TextData3::Get(0x847B6C8Eu);
      NpcDialogWin::OpenNpcScriptDialog(v6, v5->PupIDX, v7, 1);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    }
    result = iRevBytes;
  }
  else
  {
    v9 = ErrMsgTable::GetErrMsg(v4);
    GameFrameWork::AddSysMsg(v3, v9);
    result = iRevBytes;
  }
  return result;
}

//----- (004B8F00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PET_SET_NAME_CANCEL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@1
  PupMain *v5; // edi@2
  NpcDialogWin *v6; // ebx@3
  char *v7; // eax@3
  int result; // eax@4
  char *v9; // eax@5

  v3 = this;
  v4 = *(_WORD *)pvData;
  if ( (_WORD)v4 == 13520 )
  {
    v5 = PetMainTab::GetByPetID(*(_DWORD *)((char *)pvData + 2));
    if ( v5 )
    {
      NpcDialogWin::CloseDialog(v3->m_pkNpcDlgWin);
      v6 = v3->m_pkNpcDlgWin;
      v7 = TextData3::Get(0x857B6C8Eu);
      NpcDialogWin::OpenNpcScriptDialog(v6, v5->PupIDX, v7, 1);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    }
    result = iRevBytes;
  }
  else
  {
    v9 = ErrMsgTable::GetErrMsg(v4);
    GameFrameWork::AddSysMsg(v3, v9);
    result = iRevBytes;
  }
  return result;
}

//----- (004B8F90) --------------------------------------------------------
void __thiscall GameFrameWork::NcPetSetNameReq(GameFrameWork *this, unsigned __int16 kPetHandle, Name4 kPetName)
{
  PROTO_NC_PET_SET_NAME_REQ kProto; // [sp+0h] [bp-18h]@1
  unsigned int v4; // [sp+14h] [bp-4h]@1
  int v5; // [sp+18h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  *(_QWORD *)&kProto.sPetName.n4_name[0] = *(_QWORD *)&kPetName;
  kProto.nPetHandle = kPetHandle;
  *(_QWORD *)&kProto.sPetName.n4_name[8] = *(_QWORD *)&kPetName.n4_name[8];
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x35u, 7u, &kProto, 18);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B8FF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_AUTO_ARRANGE_INVEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  InventoryWin *v4; // eax@2
  NiPointer<NiNode> *v5; // eax@3
  SpEffect *v6; // ecx@3
  NiNode *v7; // ST00_4@3
  NiNode *v8; // edi@4
  NiNode *v9; // eax@7
  NiPointer<NiNode> *v10; // eax@7
  SpEffect *v11; // ecx@7
  NiNode *v12; // ST00_4@7
  int v13; // edi@8
  char *v14; // eax@12
  int v16; // [sp+0h] [bp-14h]@7
  NiPointer<NiNode> result; // [sp+4h] [bp-10h]@3
  int v18; // [sp+10h] [bp-4h]@3

  v3 = this;
  if ( *(_WORD *)pvData == 12456 )
  {
    v4 = this->m_pkInventoryWin;
    if ( v4 )
    {
      v4->m_apkArrangeButEff->m_spEffect.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
      v5 = InventoryWin::GetRunArrangeButEff(this->m_pkInventoryWin, &result);
      v6 = v3->m_pkInventoryWin->m_apkArrangeButEff;
      v7 = v5->m_pObject;
      v18 = 0;
      SpEffect::Start(v6, v7);
      v18 = -1;
      if ( result.m_pObject )
      {
        v8 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v8 )
            v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
        }
      }
      v9 = v3->m_pkInventoryWin->m_apkArrangeInvenEff->m_spEffect.m_pObject;
      v9->baseclass_0.m_uFlags &= 0xFFFEu;
      v10 = InventoryWin::GetRunArrangeInvenEff(v3->m_pkInventoryWin, (NiPointer<NiNode> *)&v16);
      v11 = v3->m_pkInventoryWin->m_apkArrangeInvenEff;
      v12 = v10->m_pObject;
      v18 = 1;
      SpEffect::Start(v11, v12);
      v18 = -1;
      if ( v16 )
      {
        v13 = v16;
        if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) )
        {
          if ( v13 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
        }
      }
    }
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_ItemSort);
  }
  v14 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
  GameFrameWork::AddSysMsg(v3, v14);
  return iRevBytes;
}

//----- (004B9150) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_ITEMSHOP_URL_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  __int16 v3; // ax@1
  GameFrameWork *v4; // esi@1
  ShopWin *v5; // ecx@5
  char *v7; // eax@7

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( *(_WORD *)pvData == 12353 || v3 == 12354 || v3 == 12355 )
  {
    v7 = TextData2::Get(0x265A978Fu);
    GameFrameWork::AddSysMsg(v4, v7);
  }
  else
  {
    if ( v3 == 12352 )
    {
      v5 = this->m_pkShopWin;
      if ( v5 )
      {
        ShopWin::SetItemShopUrl(v5, (char *)pvData + 4, *((_WORD *)pvData + 1));
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0);
        return iRevBytes;
      }
    }
  }
  return iRevBytes;
}

//----- (004B91E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_START_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@4
  char *v6; // eax@7
  unsigned int v7; // [sp-4h] [bp-8h]@5

  v3 = this;
  if ( *(_WORD *)pvData == 12547 )
  {
    v7 = -1073467108;
    goto LABEL_7;
  }
  if ( *(_WORD *)pvData == 12552 )
  {
    v7 = 627352709;
LABEL_7:
    v6 = TextData2::Get(v7);
    GameFrameWork::AddSysMsg(v3, v6);
    return iRevBytes;
  }
  if ( *(_WORD *)pvData == 12553 )
  {
    v4 = TextData3::Get(0x51B58EBFu);
    GameFrameWork::AddSysMsg(v3, v4);
    return iRevBytes;
  }
  return iRevBytes;
}

//----- (004B9240) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_VOTING_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  VoteWin *v4; // eax@1
  KQ_VOTING_TYPE v5; // eax@3
  int v6; // eax@4
  char *v7; // eax@7
  char *v8; // eax@7
  char *v10; // eax@9
  unsigned int v11; // [sp-8h] [bp-Ch]@6

  v3 = this;
  v4 = this->m_pkVoteWin;
  if ( v4 && *(_WORD *)pvData == 12560 )
  {
    v5 = v4->m_eVoteType;
    if ( v5 )
    {
      v6 = v5 - 1;
      if ( !v6 )
      {
        v11 = 965973653;
        goto LABEL_7;
      }
      if ( v6 == 1 )
      {
        v11 = -1919363109;
LABEL_7:
        v7 = TextData2::Get(v11);
        v8 = fs(v7);
        GameFrameWork::AddSysMsg(v3, v8);
        return iRevBytes;
      }
    }
    else
    {
      v10 = TextData2::Get(0x91B0E8D5u);
      GameFrameWork::AddSysMsg(v3, v10);
    }
  }
  return iRevBytes;
}

//----- (004B92D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_CANCEL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // edx@2
  int v5; // eax@2
  char *v6; // eax@2
  char *v7; // eax@2
  char acTarget[21]; // [sp+4h] [bp-1Ch]@2
  unsigned int v10; // [sp+1Ch] [bp-4h]@1
  int v11; // [sp+20h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = this;
  if ( this->m_pkVoteWin )
  {
    v4 = *((_DWORD *)pvData + 1);
    *(_DWORD *)acTarget = *(_DWORD *)pvData;
    *(_DWORD *)&acTarget[8] = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acTarget[4] = v4;
    v5 = *((_DWORD *)pvData + 4);
    *(_DWORD *)&acTarget[12] = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acTarget[16] = v5;
    acTarget[20] = 0;
    v6 = TextData2::Get(0x7FFDEBD5u);
    v7 = fs(v6);
    GameFrameWork::AddSysMsg(v3, v7);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkVoteWin->baseclass_0.baseclass_0.baseclass_0);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B9360) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_BAN_MSG_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  unsigned int v4; // edi@2
  unsigned int v5; // esi@4
  void *v6; // eax@5
  char *v8; // eax@10
  char *v9; // eax@10
  GameFrameWork *thisa; // [sp+8h] [bp-4h]@1

  v3 = *(_DWORD *)(ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 56);
  thisa = this;
  if ( v3 )
    v4 = *(_DWORD *)(v3 + 40);
  else
    v4 = 0;
  v5 = 0;
  if ( v4 )
  {
    while ( 1 )
    {
      v6 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 4),
             v5);
      if ( !v6 )
        break;
      if ( *(_BYTE *)pvData == *(_BYTE *)v6 )
      {
        if ( v5 )
        {
          v9 = TextData2::Get(0x19484A1Du);
        }
        else
        {
          v8 = TextData2::Get(0x90A79CDAu);
          v9 = fs(v8);
        }
        GameFrameWork::AddSysMsg(thisa, v9);
        return iRevBytes;
      }
      ++v5;
      if ( v5 >= v4 )
        return iRevBytes;
    }
  }
  return iRevBytes;
}
// A97EFC: using guessed type int ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable___ms_pkTable;

//----- (004B9400) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_BAN_MSG_LOGOFF_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = TextData2::Get(0x25394A21u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004B9430) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_START_CHECK_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  VoteWin *v4; // ecx@1
  char *v5; // eax@4

  v3 = this;
  v4 = this->m_pkVoteWin;
  if ( v4 )
  {
    if ( *(_WORD *)pvData == 12576 )
    {
      VoteWin::SetVoteWinType(v4, 1);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkVoteWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( *(_WORD *)pvData == 12578 )
      {
        v5 = TextData3::Get(0xBC43381Du);
        GameFrameWork::AddSysMsg(v3, v5);
        return iRevBytes;
      }
    }
  }
  return iRevBytes;
}

//----- (004B9490) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_JOBDUNGEON_LINK_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2

  v3 = this;
  if ( *(_WORD *)pvData == 12482 )
  {
    v4 = TextData::Get(0x7AAFCF08u);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}

//----- (004B94C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_TEAM_SELECT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@2
  char v6; // dl@2
  KingdomQuestWin *v7; // eax@2
  KingdomQuestTeamList *v8; // esi@2
  char v9; // al@3
  char *v10; // eax@4
  GameFrameWork *v11; // ecx@4
  unsigned int v13; // [sp-4h] [bp-44h]@8
  GameFrameWork *v14; // [sp+Ch] [bp-34h]@1
  Name5 kName; // [sp+10h] [bp-30h]@2
  PROTO_NC_KQ_TEAM_SELECT_CMD kTeamSelectInfo; // [sp+24h] [bp-1Ch]@2
  unsigned int v17; // [sp+3Ch] [bp-4h]@1
  int v18; // [sp+40h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = *(_WORD *)pvData;
  v4 = this;
  v14 = this;
  if ( (_WORD)v3 == 12784 )
  {
    *(_QWORD *)&kTeamSelectInfo.sCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kTeamSelectInfo.sCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kTeamSelectInfo.sCharID.n5_name[0] = 0;
    *(_QWORD *)&kName.n5_name[12] = 0i64;
    *(_QWORD *)&kName.n5_name[4] = 0i64;
    *(_QWORD *)&kName.n5_name[0] = 0i64;
    v5 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    STRING_TO_NAME(v5, &kName);
    *(_QWORD *)&kTeamSelectInfo.sCharID.n5_name[0] = *(_QWORD *)&kName;
    *(_QWORD *)&kTeamSelectInfo.sCharID.n5_name[8] = *(_QWORD *)&kName.n5_name[8];
    v6 = *((_BYTE *)pvData + 2);
    v7 = v4->m_pkKingDomQuest;
    *(_DWORD *)&kTeamSelectInfo.sCharID.n5_name[16] = *(_DWORD *)&kName.n5_name[16];
    kTeamSelectInfo.nTeamType = v6;
    v8 = v7->m_pkKingdomQuestTeamList;
    if ( v8 )
    {
      KingdomQuestTeamList::SetElement(v8, &kTeamSelectInfo);
      KingdomQuestTeamList::UpdateList(v8);
      KingdomQuestTeamList::SetSelectedTeam(v8, *((_BYTE *)pvData + 2));
      v9 = *((_BYTE *)pvData + 2);
      if ( !v9 )
      {
        v10 = TextData3::Get(0x3533043Bu);
        v11 = v14;
LABEL_11:
        GameFrameWork::AddSysMsg(v11, v10);
        return iRevBytes;
      }
      if ( v9 == 1 )
      {
        v10 = TextData3::Get(0x3A3E0379u);
        v11 = v14;
        goto LABEL_11;
      }
    }
  }
  else
  {
    switch ( v3 )
    {
      case 12785:
      case 12786:
      case 12787:
      case 12789:
      case 12790:
      case 12791:
        v13 = 447169094;
        goto LABEL_10;
      case 12788:
        v13 = 1503014957;
LABEL_10:
        v10 = TextData3::Get(v13);
        v11 = v4;
        goto LABEL_11;
      default:
        return iRevBytes;
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B9600) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_RANDOMOPTION_CHANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int v4; // eax@1
  char *v5; // eax@3

  v3 = this;
  v4 = *(_WORD *)pvData;
  if ( v4 == 12872 )
  {
    this->m_pkRandomOptionWin->m_bSuccess = 1;
    RandomOptionWin::SetChangeAbleOption(this->m_pkRandomOptionWin, (ItemOptionStorage *)((char *)pvData + 2));
  }
  else
  {
    if ( (unsigned int)(v4 - 12873) <= 7 )
    {
      v5 = TextData3::Get(0xE5E9C8C3u);
      GameFrameWork::AddSysMsg(v3, v5);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B9660) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NORMAL_ITEM_ON_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3

  v3 = this;
  if ( *(_WORD *)pvData == 13864 )
  {
    MinimonAutoItemUseWin::SetAutoUseBuffItem(this->m_pkMinimonAutoItemUseWin, 1);
  }
  else
  {
    if ( *(_WORD *)pvData == 13867 )
    {
      v4 = TextData3::Get(0xB282A8Au);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B96B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_CHARGED_ITEM_ON_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3

  v3 = this;
  if ( *(_WORD *)pvData == 13880 )
  {
    MinimonAutoItemUseWin::SetAutoUseChargedItem(this->m_pkMinimonAutoItemUseWin, 1);
  }
  else
  {
    if ( *(_WORD *)pvData == 13883 )
    {
      v4 = TextData3::Get(0xB282A8Au);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B9700) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_REPURCHASE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@5
  char *v6; // eax@7
  unsigned int v7; // [sp-4h] [bp-8h]@4

  v3 = this;
  if ( *(_WORD *)pvData == 13931 )
  {
    v6 = TextData3::Get(0x46DDC2A9u);
    GameFrameWork::AddSysMsg(v3, v6);
  }
  else
  {
    if ( *(_WORD *)pvData == 13932 )
    {
      v7 = 698305403;
      goto LABEL_5;
    }
    if ( *(_WORD *)pvData == 13933 )
    {
      v7 = 543232885;
LABEL_5:
      v4 = TextData::Get(v7);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B9760) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ITEM_CLASS_CHANGE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  int result; // eax@2
  char *v5; // eax@3
  char *v6; // eax@4
  char *v7; // eax@5
  char *v8; // eax@6

  v3 = this;
  switch ( *(_WORD *)pvData )
  {
    case 0x3680:
      ClassChangeWin::GoCharSelectFrameWork(this->m_pkClassChangeWin);
      result = iRevBytes;
      break;
    case 0x3682:
      v5 = TextData3::Get(0x54A4445Fu);
      GameFrameWork::AddSysMsg(v3, v5);
      result = iRevBytes;
      break;
    case 0x3685:
      v6 = TextData3::Get(0x539A5864u);
      GameFrameWork::AddSysMsg(v3, v6);
      result = iRevBytes;
      break;
    case 0x3684:
      v7 = TextData3::Get(0x79E4867u);
      GameFrameWork::AddSysMsg(v3, v7);
      result = iRevBytes;
      break;
    default:
      v8 = fs("Error Class Change[ %d ]");
      GameFrameWork::AddSysMsg(v3, v8);
      result = iRevBytes;
      break;
  }
  return result;
}

//----- (004B9820) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGEDEALT_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@3
  IDRankingWin *v7; // ecx@4

  v3 = pvData;
  v4 = this;
  if ( *((_WORD *)pvData + 6) == 14848 )
  {
    v7 = this->m_pkIDRankingWin;
    if ( v7 )
    {
      pvData = (void *)*((_BYTE *)pvData + 18);
      IDRankingWin::SetRankInfo(
        v7,
        (const unsigned int *)((char *)v3 + 14),
        (const int *)&pvData,
        (SHINE_INDUN_RANK_CLIENT_VALUE *)((char *)v3 + 19),
        (PROTO_AVATAR_SHAPE_INFO *)v3,
        (PROTO_AVATAR_SHAPE_INFO *)v3 + 1,
        (PROTO_AVATAR_SHAPE_INFO *)v3 + 2);
    }
  }
  else
  {
    if ( *((_WORD *)pvData + 6) == 14849 )
    {
      v5 = TextData3::Get(0x938F63DAu);
      GameFrameWork::AddSysMsg(v4, v5);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B9890) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGETAKEN_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@3
  IDRankingWin *v7; // ecx@4

  v3 = pvData;
  v4 = this;
  if ( *((_WORD *)pvData + 6) == 14848 )
  {
    v7 = this->m_pkIDRankingWin;
    if ( v7 )
    {
      pvData = (void *)*((_BYTE *)pvData + 18);
      IDRankingWin::SetRankInfo(
        v7,
        (const unsigned int *)((char *)v3 + 14),
        (const int *)&pvData,
        (SHINE_INDUN_RANK_CLIENT_VALUE *)((char *)v3 + 19),
        (PROTO_AVATAR_SHAPE_INFO *)v3,
        (PROTO_AVATAR_SHAPE_INFO *)v3 + 1,
        (PROTO_AVATAR_SHAPE_INFO *)v3 + 2);
    }
  }
  else
  {
    if ( *((_WORD *)pvData + 6) == 14849 )
    {
      v5 = TextData3::Get(0x938F63DAu);
      GameFrameWork::AddSysMsg(v4, v5);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B9900) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_HEALINGDONE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@3
  IDRankingWin *v7; // ecx@4

  v3 = pvData;
  v4 = this;
  if ( *((_WORD *)pvData + 6) == 14848 )
  {
    v7 = this->m_pkIDRankingWin;
    if ( v7 )
    {
      pvData = (void *)*((_BYTE *)pvData + 18);
      IDRankingWin::SetRankInfo(
        v7,
        (const unsigned int *)((char *)v3 + 14),
        (const int *)&pvData,
        (SHINE_INDUN_RANK_CLIENT_VALUE *)((char *)v3 + 19),
        (PROTO_AVATAR_SHAPE_INFO *)v3,
        (PROTO_AVATAR_SHAPE_INFO *)v3 + 1,
        (PROTO_AVATAR_SHAPE_INFO *)v3 + 2);
    }
  }
  else
  {
    if ( *((_WORD *)pvData + 6) == 14849 )
    {
      v5 = TextData3::Get(0x938F63DAu);
      GameFrameWork::AddSysMsg(v4, v5);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B9970) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_MYRANK_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  IDRankingWin *v6; // ecx@4

  v3 = this;
  if ( *(_WORD *)pvData == 14848 )
  {
    v6 = this->m_pkIDRankingWin;
    if ( v6 )
      IDRankingWin::SetMyRecord(v6, (PROTO_NC_INSTANCE_DUNGEON_RANK_TAB_MYRANK_ACK *)pvData);
  }
  else
  {
    if ( *(_WORD *)pvData == 14849 )
    {
      v4 = TextData3::Get(0x938F63DAu);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004B99C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_NEW_RANK_MSG(GameFrameWork *this, int iRevBytes, void *pvData)
{
  MapInfo *v3; // eax@1
  char *v4; // eax@2
  char *v6; // [sp-8h] [bp-110h]@6
  char *v7; // [sp-4h] [bp-10Ch]@6
  unsigned int v8; // [sp+0h] [bp-108h]@6
  char chID[128]; // [sp+4h] [bp-104h]@1
  char chRankType[128]; // [sp+84h] [bp-84h]@6
  unsigned int v11; // [sp+104h] [bp-4h]@1
  int v12; // [sp+108h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = MapInfoTab::GetByMapName((Name3 *)((char *)pvData + 20));
  strncpy(chID, v3->Name, 0x20u);
  if ( *((_BYTE *)pvData + 32) == 2 )
  {
    v4 = TextData3::Get(0x4026F785u);
    strncat(chID, v4, 0x80u);
  }
  if ( !*((_BYTE *)pvData + 33) )
  {
    v8 = 128;
    v7 = TextData3::Get(0x9390A4C8u);
    v6 = chRankType;
    goto LABEL_9;
  }
  if ( *((_BYTE *)pvData + 33) == 1 )
  {
    v8 = 128;
    v7 = TextData3::Get(0x2E342C63u);
    v6 = chRankType;
    goto LABEL_9;
  }
  if ( *((_BYTE *)pvData + 33) == 2 )
  {
    v8 = 128;
    v7 = TextData3::Get(0x9E846385u);
    v6 = chRankType;
LABEL_9:
    strncpy(v6, v7, v8);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004B9AA0) --------------------------------------------------------
void __thiscall GameFrameWork::NcInstanceDungeonRankTabDamagetakenReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo)
{
  GameFrameWork *v2; // edi@1
  PgNet *v3; // ecx@1
  int v4; // edx@1
  int v5; // ecx@1
  PgNet *v6; // ecx@1
  NETCOMMAND netcmd; // [sp+8h] [bp-18h]@1
  PROTO_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGETAKEN_REQ kProto; // [sp+Ch] [bp-14h]@1
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = -23524;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = *(_DWORD *)&rInfo->MapIDClient.n3_name[0];
  v5 = *(_DWORD *)&rInfo->MapIDClient.n3_name[8];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[4] = *(_DWORD *)&rInfo->MapIDClient.n3_name[4];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[0] = v4;
  LOBYTE(v4) = rInfo->ModeIDLv;
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[8] = v5;
  v6 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.sIndunInfo.ModeIDLv = v4;
  PgNet::SendNetMsg(v6, &kProto, 13);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B9B10) --------------------------------------------------------
void __thiscall GameFrameWork::NcInstanceDungeonRankTabHealingdoneReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo)
{
  GameFrameWork *v2; // edi@1
  PgNet *v3; // ecx@1
  int v4; // edx@1
  int v5; // ecx@1
  PgNet *v6; // ecx@1
  NETCOMMAND netcmd; // [sp+8h] [bp-18h]@1
  PROTO_NC_INSTANCE_DUNGEON_RANK_TAB_HEALINGDONE_REQ kProto; // [sp+Ch] [bp-14h]@1
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = -23523;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = *(_DWORD *)&rInfo->MapIDClient.n3_name[0];
  v5 = *(_DWORD *)&rInfo->MapIDClient.n3_name[8];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[4] = *(_DWORD *)&rInfo->MapIDClient.n3_name[4];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[0] = v4;
  LOBYTE(v4) = rInfo->ModeIDLv;
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[8] = v5;
  v6 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.sIndunInfo.ModeIDLv = v4;
  PgNet::SendNetMsg(v6, &kProto, 13);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B9B80) --------------------------------------------------------
void __thiscall GameFrameWork::NcInstanceDungeonRankTabMyRankReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo)
{
  GameFrameWork *v2; // edi@1
  PgNet *v3; // ecx@1
  int v4; // edx@1
  int v5; // ecx@1
  PgNet *v6; // ecx@1
  NETCOMMAND netcmd; // [sp+8h] [bp-18h]@1
  PROTO_NC_INSTANCE_DUNGEON_RANK_TAB_MYRANK_REQ kProto; // [sp+Ch] [bp-14h]@1
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = -23522;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = *(_DWORD *)&rInfo->MapIDClient.n3_name[0];
  v5 = *(_DWORD *)&rInfo->MapIDClient.n3_name[8];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[4] = *(_DWORD *)&rInfo->MapIDClient.n3_name[4];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[0] = v4;
  LOBYTE(v4) = rInfo->ModeIDLv;
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[8] = v5;
  v6 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.sIndunInfo.ModeIDLv = v4;
  PgNet::SendNetMsg(v6, &kProto, 13);
}
// A85C00: using guessed type int __security_cookie;

//----- (004B9BF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_LINKOTHER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  void *v4; // ecx@1
  PrivateStoreWin *v5; // ecx@1
  MHDiceGameTask *v6; // ecx@4
  bool v7; // bl@4
  MHDiceGameTask *v8; // edi@5
  MHDiceGameTask *v9; // ecx@9
  int v10; // ebx@10
  GTTDiceWin *v11; // eax@17
  PgWin *v12; // eax@18
  GuildTournamentScheduleWin *v13; // eax@19
  PgWin *v14; // eax@20
  GuildNpcMenuWin *v15; // eax@21
  PgWin *v16; // eax@22
  GuildTournamentBaseWin *v17; // eax@23
  PgWin *v18; // eax@24
  GTStatusWin *v19; // eax@25
  PgWin *v20; // eax@26
  GTStatusMiniWin *v21; // eax@27
  PgWin *v22; // eax@28
  AnnounceWin *v23; // ecx@29
  CameraEffect *v24; // ecx@33
  MarketSearchWin *v25; // ecx@37
  int v27; // [sp+24h] [bp-14h]@9
  NiPointer<MHDiceGameTask> result; // [sp+28h] [bp-10h]@4
  int v29; // [sp+34h] [bp-4h]@4

  v3 = this;
  PgNet::SetSendPacketMode(&this->m_spZoneNet.m_pObject->baseclass_0, 0);
  v4 = pvData;
  v3->m_kNextFrameWorkID = LinkFrameWorkID;
  *(_DWORD *)&v3->m_kProtoNcMapLinkOtherCmd.link.mapid = *(_DWORD *)v4;
  *(unsigned int *)((char *)&v3->m_kProtoNcMapLinkOtherCmd.link.location.x + 2) = *((_DWORD *)v4 + 1);
  HIWORD(v3->m_kProtoNcMapLinkOtherCmd.link.location.y) = *((_WORD *)v4 + 4);
  *(_DWORD *)&v3->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[0] = *(_DWORD *)((char *)v4 + 10);
  *(_DWORD *)&v3->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[4] = *(_DWORD *)((char *)v4 + 14);
  *(_DWORD *)&v3->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[8] = *(_DWORD *)((char *)v4 + 18);
  *(_DWORD *)&v3->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[12] = *(_DWORD *)((char *)v4 + 22);
  v3->m_kProtoNcMapLinkOtherCmd.sock.zoneport = *((_WORD *)v4 + 13);
  v3->m_kProtoNcMapLinkOtherCmd.wldmanhandle = *((_WORD *)v4 + 14);
  v5 = v3->m_pkPrivateStoreWin;
  v3->m_bLinkSameServer = 0;
  v3->m_kNextFrameWorkMsg.m_uiFramelParam = (unsigned int)&v3->m_kProtoNcMapLinkOtherCmd;
  v3->m_kNextFrameWorkMsg.m_uiFrameWParam = 0;
  if ( v5
    && (unsigned __int8)((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkPrivateStoreWin->baseclass_0.baseclass_0.baseclass_0);
  PgNet::Close(&v3->m_spZoneNet.m_pObject->baseclass_0);
  MiniMapWin::ClearWithOutMainChar(v3->m_pkMiniMapWin);
  MiniMapWin::ClearParty(v3->m_pkMiniMapWin);
  MiniMapWin::RemoveAllMapMark(v3->m_pkMiniMapWin);
  MiniMapWin::RemoveAllKQTeamMark(v3->m_pkMiniMapWin);
  PkRealTiemRankWin::Close(v3->m_pkKQPKRealTimeRankWin, 1);
  PkKqRankingWin::Clear(v3->m_pkPkKqRankingWin);
  ((void (__stdcall *)(_DWORD))v3->m_pkPkKqRankingWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  CastingProgressWin::CastingFail(v3->m_pkCastingProgressBar);
  v3->m_kSkillCasting.eState = 0;
  v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v29 = 0;
  v7 = MHDiceGameTask::IsDicegamePlaying(v6);
  v29 = -1;
  if ( result.m_pObject )
  {
    v8 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
  }
  if ( v7 )
  {
    LOWORD(pvData) = 7312;
    v9 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v27)->m_pObject;
    v29 = 1;
    MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_ACK(v9, (PROTO_NC_DICE_TAISAI_GAME_LEAVE_ACK *)&pvData);
    v29 = -1;
    if ( v27 )
    {
      v10 = v27;
      if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) )
      {
        if ( v10 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
      }
    }
  }
  GameFrameWork::CloseMHInfoWin(v3, 1);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkMHMouseControlWin->baseclass_0.baseclass_0.baseclass_0);
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
    Char::Shape_UnMetamorphosis(g_pkMainChar, 0);
  PkRealTiemRankWin::Close(v3->m_pkKQPKRealTimeRankWin, 1);
  PkKqRankingWin::Clear(v3->m_pkPkKqRankingWin);
  ((void (__stdcall *)(_DWORD))v3->m_pkPkKqRankingWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GameFrameWork::CloseMapLinkGateWin(v3);
  if ( v3->m_kCharMover.m_bAutoRun )
    KeyboardMoveProcess::SetAutoRun(&v3->m_kCharMover, 0);
  GameFrameWork::Stick(v3, 0, 0);
  v11 = GuildTask::GetGTTDiceWin();
  if ( (unsigned __int8)((int (__thiscall *)(GTTDiceWin *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v11) )
  {
    v12 = (PgWin *)GuildTask::GetGTTDiceWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v12);
  }
  v13 = GuildTask::GetGuildTournamentScheduleWin();
  if ( (unsigned __int8)((int (__thiscall *)(GuildTournamentScheduleWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v13) )
  {
    v14 = (PgWin *)GuildTask::GetGuildTournamentScheduleWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v14);
  }
  v15 = GuildTask::GetGuildNpcMenuWin();
  if ( (unsigned __int8)((int (__thiscall *)(GuildNpcMenuWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v15) )
  {
    v16 = (PgWin *)GuildTask::GetGuildNpcMenuWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v16);
  }
  v17 = GuildTask::GetGuildTournamnetBaseWin();
  if ( (unsigned __int8)((int (__thiscall *)(GuildTournamentBaseWin *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v17) )
  {
    v18 = (PgWin *)GuildTask::GetGuildTournamnetBaseWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v18);
  }
  MiniMapWin::ShowGTQuit(v3->m_pkMiniMapWin, 0);
  v19 = GuildTask::GetGTStatusWin();
  if ( (unsigned __int8)((int (__thiscall *)(GTStatusWin *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v19) )
  {
    v20 = (PgWin *)GuildTask::GetGTStatusWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v20);
  }
  v21 = GuildTask::GetGTStatusMiniWin();
  if ( (unsigned __int8)((int (__thiscall *)(GTStatusMiniWin *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v21) )
  {
    v22 = (PgWin *)GuildTask::GetGTStatusMiniWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v22);
  }
  MachineOpt::SaveUserInfo();
  v23 = v3->m_pkRemainAnnounceWin;
  if ( v23 )
    AnnounceWin::KillNoticing(v23);
  if ( v3->m_pkIDTimeWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkIDTimeWin->baseclass_0.baseclass_0.baseclass_0);
  v24 = v3->m_spCamEffect.m_pObject;
  if ( v24 )
    CameraEffect::ClearMove(v24);
  PgFrameWork::PostFrameMsgPop(&v3->baseclass_0, LinkFrameWorkID, &v3->m_kNextFrameWorkMsg);
  CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
  unk_AA2801 = 0;
  if ( v3->m_pkVoteWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkVoteWin->baseclass_0.baseclass_0.baseclass_0);
  EffectMgr::RemoveAllClientEff(&g_kEffectMgr);
  v25 = v3->m_pkMarketSearchWin;
  if ( v25 )
  {
    MarketSearchWin::CloseSearchingMsgBox(v25);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkMarketSearchWin->baseclass_0.baseclass_0.baseclass_0);
  }
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEventTimeWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkEventRankWin->baseclass_0.baseclass_0.baseclass_0);
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BA020) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_FREEPKZONE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  void *v4; // eax@3
  D3DXCOLOR v5; // ST04_16@7
  char *v6; // eax@7
  D3DXCOLOR *v8; // [sp-14h] [bp-28h]@4
  char v9; // [sp-10h] [bp-24h]@2
  char v10; // [sp-Ch] [bp-20h]@2
  char v11; // [sp-8h] [bp-1Ch]@2
  char v12; // [sp-4h] [bp-18h]@2
  D3DXCOLOR result; // [sp+4h] [bp-10h]@4

  v3 = this;
  this->m_pkAnnounceWin->m_bNotice = 1;
  if ( !*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
  {
    v12 = -1;
    v11 = -1;
    v10 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
    v9 = -1;
LABEL_6:
    v8 = &result;
    goto LABEL_7;
  }
  v4 = CDataReader::GetRecord(
         (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
         0x32u);
  v12 = -1;
  if ( v4 )
  {
    v11 = *((_BYTE *)v4 + 6);
    v10 = *((_BYTE *)v4 + 5);
    v9 = *((_BYTE *)v4 + 4);
    goto LABEL_6;
  }
  v11 = -1;
  v10 = 0;
  v9 = -1;
  v8 = &result;
LABEL_7:
  Color::GetDxColor(v8, v9, v10, v11, v12);
  *(_QWORD *)&v5.r = *(_QWORD *)&result;
  *(_QWORD *)&v5.b = *(_QWORD *)&result.b;
  v6 = TextData2::Get(0x8AF6DEFCu);
  GameFrameWork::AddAnnounceMsg(v3, v6, COERCE_D3DXCOLOR(v5.r));
  LODWORD(result.b) = 2;
  LODWORD(result.a) = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, (SoundIndex *)&result.b, 0, 0);
  BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) |= 2u;
  return iRevBytes;
}

//----- (004BA100) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_PARTYBATTLEZONE_ON_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  void *v4; // eax@3
  D3DXCOLOR v5; // ST04_16@7
  char *v6; // eax@7
  D3DXCOLOR *v8; // [sp-14h] [bp-28h]@4
  char v9; // [sp-10h] [bp-24h]@2
  char v10; // [sp-Ch] [bp-20h]@2
  char v11; // [sp-8h] [bp-1Ch]@2
  char v12; // [sp-4h] [bp-18h]@2
  D3DXCOLOR result; // [sp+4h] [bp-10h]@4

  v3 = this;
  this->m_pkAnnounceWin->m_bNotice = 1;
  if ( !*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
  {
    v12 = -1;
    v11 = -1;
    v10 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
    v9 = -1;
LABEL_6:
    v8 = &result;
    goto LABEL_7;
  }
  v4 = CDataReader::GetRecord(
         (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
         0x32u);
  v12 = -1;
  if ( v4 )
  {
    v11 = *((_BYTE *)v4 + 6);
    v10 = *((_BYTE *)v4 + 5);
    v9 = *((_BYTE *)v4 + 4);
    goto LABEL_6;
  }
  v11 = -1;
  v10 = 0;
  v9 = -1;
  v8 = &result;
LABEL_7:
  Color::GetDxColor(v8, v9, v10, v11, v12);
  *(_QWORD *)&v5.r = *(_QWORD *)&result;
  *(_QWORD *)&v5.b = *(_QWORD *)&result.b;
  v6 = TextData2::Get(0x8AF6DEFCu);
  GameFrameWork::AddAnnounceMsg(v3, v6, COERCE_D3DXCOLOR(v5.r));
  LODWORD(result.b) = 2;
  LODWORD(result.a) = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, (SoundIndex *)&result.b, 0, 0);
  BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) |= 1u;
  return iRevBytes;
}

//----- (004BA1E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  void *v4; // edi@1
  int v5; // ebx@2
  Char *v6; // eax@5
  Char *v7; // esi@5
  char *v8; // edi@6
  int v9; // eax@7
  _BYTE v10[12]; // ST10_12@7
  _BYTE v11[12]; // ST04_12@7
  NiPoint3 *v12; // eax@10
  void *pkInfo; // [sp+14h] [bp-4h]@1

  v3 = pvData;
  v4 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 4),
         *(_WORD *)pvData);
  pkInfo = v4;
  if ( v4 )
  {
    v5 = 0;
    if ( *((_WORD *)pvData + 1) > 0u )
    {
      while ( 1 )
      {
        v6 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v3 + (unsigned __int16)v5 + 2));
        v7 = v6;
        if ( v6 )
        {
          v8 = (char *)v4 + 146;
          if ( *v8 != 45 )
          {
            v9 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[6].Deaffect)(v6);
            *(_DWORD *)v10 = (_DWORD)NiPoint3::UNIT_Y.x;
            *(_QWORD *)&v10[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
            *(_DWORD *)v11 = *(_DWORD *)v9;
            *(_QWORD *)&v11[4] = *(_QWORD *)(v9 + 4);
            EffectMgr::CreateEffect(&g_kEffectMgr, v8, *(NiPoint3 *)v11, *(NiPoint3 *)v10, Timer::ms_fCurTime, 1.0);
          }
          if ( *((_BYTE *)pkInfo + 178) != 45 && v7->baseclass_0.vfptr->IsVisible((AbStateInfectee *)v7) == 1 )
          {
            v12 = (NiPoint3 *)((int (__thiscall *)(Char *))v7->baseclass_0.vfptr[6].Deaffect)(v7);
            SoundMgr::CreateSound(&g_kSoundMgr, (char *)pkInfo + 178, v12);
          }
        }
        v3 = pvData;
        ++v5;
        if ( (unsigned __int16)v5 >= *((_WORD *)pvData + 1) )
          break;
        v4 = pkInfo;
      }
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97E08: using guessed type int ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab___ms_pkTable;

//----- (004BA300) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_NOTICE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int8 v3; // bl@1
  GameFrameWork *v4; // esi@1
  char *v5; // eax@2
  AnnounceWin *v6; // edx@2
  D3DXCOLOR *v7; // eax@2
  D3DXCOLOR v8; // ST14_16@2
  D3DXCOLOR result; // [sp+Ch] [bp-198h]@2
  char acText[256]; // [sp+1Ch] [bp-188h]@2
  char v12; // [sp+11Ch] [bp-88h]@2
  char acStr[128]; // [sp+120h] [bp-84h]@2
  unsigned int v14; // [sp+1A0h] [bp-4h]@1
  int v15; // [sp+1A4h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = *((_BYTE *)pvData + 1);
  v4 = this;
  if ( v3 )
  {
    memset(acStr, 0, 0x80u);
    strncpy(acStr, (char *)pvData + 2, v3);
    acStr[*((_BYTE *)pvData + 1)] = 0;
    memset(acText, 0, 0x100u);
    v5 = TextData::Get(0x3830508Au);
    sprintf(acText, v5);
    v6 = v4->m_pkAnnounceWin;
    v12 = 0;
    v6->m_bNotice = 1;
    v7 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    *(_QWORD *)&v8.r = *(_QWORD *)&v7->r;
    *(_QWORD *)&v8.b = *(_QWORD *)&v7->b;
    GameFrameWork::AddAnnounceMsg(v4, acText, COERCE_D3DXCOLOR(v8.r));
    GameFrameWork::AddAuthorMsg(v4, acText);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004BA400) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_ABSTATEINFORM_NOEFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  void *v4; // ebx@2
  unsigned int v5; // eax@2
  double v6; // st7@3
  AbnormalStateInfo *v7; // eax@5
  AbnormalStateInfo *v8; // esi@5
  int v9; // edi@6
  int v10; // esi@6
  int v11; // edx@8
  int v12; // eax@9
  char v13; // al@12
  char *v14; // eax@24
  char *v15; // eax@26
  unsigned int v17; // [sp+8h] [bp-18h]@21
  GameFrameWork *thisa; // [sp+18h] [bp-8h]@1
  float fTime; // [sp+1Ch] [bp-4h]@5
  AbnormalStateInfo *pkInfo; // [sp+2Ch] [bp+Ch]@5

  v3 = this;
  thisa = this;
  if ( g_pkMainChar )
  {
    v4 = pvData;
    v5 = *((_DWORD *)pvData + 1);
    if ( v5 == -1 )
      v6 = -3.0;
    else
      v6 = (double)v5 / 1000.0;
    fTime = v6;
    v7 = AbnormalStateInfoTab::GetByAbstateIndex(*(_WORD *)pvData);
    v8 = v7;
    pkInfo = v7;
    if ( v7 )
    {
      v9 = v7->ID;
      v10 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                              v9) )
      {
        if ( (unsigned __int16)v9 <= *(_WORD *)(v10 + 200) )
        {
          v11 = *(_DWORD *)(v10 + 196);
          if ( *(_DWORD *)(v11 + 4 * v9) )
          {
            v12 = *(_DWORD *)(v11 + 4 * v9);
            if ( v12 )
            {
              if ( *(_BYTE *)(v12 + 398) != 45 && pkInfo->AbStateSaveType )
              {
                v13 = ((int (__stdcall *)(_DWORD, _DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr->AddAbStateByAbstateIndex)(
                        *(_DWORD *)v4,
                        LODWORD(fTime),
                        0);
                v3 = thisa;
                v8 = pkInfo;
              }
              else
              {
                v13 = ((int (__stdcall *)(_DWORD, _DWORD, signed int))g_pkMainChar->baseclass_0.vfptr->AddAbStateByAbstateIndex)(
                        *(_DWORD *)v4,
                        LODWORD(fTime),
                        1);
                v3 = thisa;
                v8 = pkInfo;
              }
LABEL_16:
              if ( !v13 || !v8 )
                return iRevBytes;
              if ( v8->DispelIndex == 3 )
              {
                v17 = 1325059531;
              }
              else
              {
                if ( v8->DispelIndex == 4 )
                {
                  v17 = 1745404876;
                }
                else
                {
                  if ( v8->DispelIndex != 5 )
                    goto LABEL_25;
                  v17 = 174404483;
                }
              }
              v14 = TextData::Get(v17);
              GameFrameWork::AddSysMsg(v3, v14);
LABEL_25:
              if ( v8->AbStataIndex == 337 )
              {
                v15 = TextData2::Get(0x4F19C4B8u);
                GameFrameWork::AddSysMsg(v3, v15);
              }
              return iRevBytes;
            }
          }
        }
      }
      v3 = thisa;
      v8 = pkInfo;
    }
    v13 = BYTE3(iRevBytes);
    goto LABEL_16;
  }
  return iRevBytes;
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (004BA570) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_DOTDAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // ebx@1
  GameFrameWork *v4; // esi@1
  Char *v5; // eax@1
  Char *v6; // edi@1
  int v7; // edx@3
  unsigned __int16 v8; // ax@6
  unsigned __int16 v9; // ax@6
  ShortCutWin **v10; // esi@6
  unsigned __int16 v11; // ax@7
  unsigned __int16 v12; // ax@7
  int v13; // eax@9
  int v14; // esi@21
  unsigned __int16 *v15; // eax@39
  AbnormalStateViewInfo *v16; // eax@40
  int iDamage; // [sp+28h] [bp-8h]@3
  char bDotHeal; // [sp+2Fh] [bp-1h]@21

  v3 = pvData;
  v4 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v6 = v5;
  if ( !*(_DWORD *)((char *)v3 + 2) || !v5 )
    return iRevBytes;
  v7 = *((_WORD *)v3 + 3);
  iDamage = *((_WORD *)v3 + 3);
  if ( v5 == g_pkMainChar && v7 > 0 )
  {
    if ( MainChar::IsAirBorneState((MainChar *)g_pkMainChar) )
    {
      v8 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      ShortCutWin::IsStartCollTime(v4->m_pkShortCutWin, v8);
      v9 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      ShortCutWin::IsStartCollTime(v4->m_pkShortCutWinV, v9);
      v10 = v4->m_pkShortCutSubWinV;
      pvData = (void *)4;
      do
      {
        v11 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*(v10 - 5), v11);
        v12 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*v10, v12);
        ++v10;
        pvData = (char *)pvData - 1;
      }
      while ( pvData );
    }
    v7 = iDamage;
  }
  v13 = *((_WORD *)v3 + 4);
  BYTE3(pvData) = 1;
  if ( v13 == 14 || (_WORD)v13 == 339 )
    BYTE3(pvData) = 0;
  if ( (_WORD)v13 == 812 )
    BYTE3(pvData) = 0;
  if ( v7 > 0 && BYTE3(pvData) )
    ((void (__thiscall *)(Char *, int, signed int))v6->baseclass_0.vfptr[12].__vecDelDtor)(v6, v7, 1);
  if ( !*(_DWORD *)((char *)v3 + 2) )
  {
    if ( Char::IsResource(v6) )
      Char::ActResourceDisappearing(v6);
    else
      ((void (__thiscall *)(Char *))v6->baseclass_0.vfptr[20].Deaffect)(v6);
  }
  v14 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[2].__vecDelDtor)(v6);
  bDotHeal = 0;
  if ( !(unsigned __int8)((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[1].Affect)(v6) && !iDamage )
  {
    if ( v14 == 1 )
    {
      if ( *(_DWORD *)((char *)v3 + 2) <= 1u )
        goto LABEL_28;
    }
    else
    {
      if ( *(_DWORD *)((char *)v3 + 2) < (unsigned int)v14 )
        goto LABEL_28;
    }
    bDotHeal = 1;
  }
LABEL_28:
  if ( ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[2].__vecDelDtor)(v6) > 0 )
  {
    Char::HpUpdate(v6, *((_WORD *)v3 + 5), *(_DWORD *)((char *)v3 + 2));
    if ( v6->m_kHandle == HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) )
      Char::TOTHpUpdate(v6, *((_WORD *)v3 + 5), *(_DWORD *)((char *)v3 + 2));
  }
  if ( !bDotHeal && BYTE3(pvData) )
    TextEffMgr::AddDamage(&g_kTextEffMgr, *(_WORD *)v3, iDamage);
  if ( !iDamage && BYTE3(pvData) && *((_BYTE *)v3 + 12) == 1 )
    TextEffMgr::AddMissTextEff(&g_kTextEffMgr, *(_WORD *)v3);
  if ( *((_WORD *)v3 + 4) != -1 )
  {
    v15 = (unsigned __int16 *)AbnormalStateInfoTab::GetByAbstateIndex(*((_WORD *)v3 + 4));
    if ( v15 )
    {
      v16 = IIDTableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned_short>::GetByID(*v15, 1);
      if ( v16 )
      {
        if ( v16->DOTEffect[0] != 45 )
          EffectMgr::CreateAttachEffect(
            &g_kEffectMgr,
            (unsigned int *)&pvData,
            v16->DOTEffect,
            v6,
            v16->DOTEffectPos,
            Timer::ms_fCurTime,
            0,
            0,
            0,
            1);
      }
    }
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BA7E0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_CLIENT_MOB_KILL_ANNOUNCE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  D3DXCOLOR *v4; // eax@2
  D3DXCOLOR v5; // ST08_16@2
  char *v6; // eax@2
  D3DXCOLOR result; // [sp+8h] [bp-10h]@2

  v3 = this;
  if ( MobKillAnnounceTextTab::GetByType(*(MobKillAnnounceType *)pvData) )
  {
    v4 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    *(_QWORD *)&v5.r = *(_QWORD *)&v4->r;
    *(_QWORD *)&v5.b = *(_QWORD *)&v4->b;
    v6 = fs("%s");
    GameFrameWork::AddAnnounceMsg(v3, v6, COERCE_D3DXCOLOR(v5.r));
  }
  return iRevBytes;
}

//----- (004BA850) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_FRIEND_SOMEONE_GET_SPECIALITEM_WORLD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // esi@1
  int v5; // ecx@1
  int v6; // edx@1
  void *v7; // eax@3
  D3DXCOLOR v8; // ST08_16@7
  char *v9; // eax@7
  char *v10; // eax@7
  D3DXCOLOR *v12; // [sp-14h] [bp-44h]@4
  char v13; // [sp-10h] [bp-40h]@2
  char v14; // [sp-Ch] [bp-3Ch]@2
  char v15; // [sp-8h] [bp-38h]@2
  char v16; // [sp-4h] [bp-34h]@2
  D3DXCOLOR result; // [sp+4h] [bp-2Ch]@4
  char acname[21]; // [sp+14h] [bp-1Ch]@1
  unsigned int v19; // [sp+2Ch] [bp-4h]@1
  int v20; // [sp+30h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = this;
  *(_DWORD *)acname = *(_DWORD *)pvData;
  v5 = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acname[4] = v3;
  v6 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acname[16] = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acname[8] = v5;
  *(_DWORD *)&acname[12] = v6;
  acname[20] = 0;
  if ( !*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
  {
    v16 = -1;
    v15 = -1;
    v14 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
    v13 = -1;
LABEL_6:
    v12 = &result;
    goto LABEL_7;
  }
  v7 = CDataReader::GetRecord(
         (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
         0x32u);
  v16 = -1;
  if ( v7 )
  {
    v15 = *((_BYTE *)v7 + 6);
    v14 = *((_BYTE *)v7 + 5);
    v13 = *((_BYTE *)v7 + 4);
    goto LABEL_6;
  }
  v15 = -1;
  v14 = 0;
  v13 = -1;
  v12 = &result;
LABEL_7:
  Color::GetDxColor(v12, v13, v14, v15, v16);
  *(_QWORD *)&v8.r = *(_QWORD *)&result;
  *(_QWORD *)&v8.b = *(_QWORD *)&result.b;
  v9 = TextData3::Get(0xB6E5B116u);
  v10 = fs(v9);
  GameFrameWork::AddAnnounceMsg(v4, v10, COERCE_D3DXCOLOR(v8.r));
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004BA940) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_PROMOTE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // eax@2
  int v5; // eax@3
  _BYTE v6[12]; // ST10_12@3
  _BYTE v7[12]; // ST04_12@3
  char *v8; // eax@3
  int dwDummy; // [sp+20h] [bp-88h]@14
  char szResult[128]; // [sp+24h] [bp-84h]@3
  unsigned int v12; // [sp+A4h] [bp-4h]@1
  int v13; // [sp+A8h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = this;
  CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), *(_BYTE *)pvData);
  if ( *(_BYTE *)pvData )
  {
    v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    *(_DWORD *)v6 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v6[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v7 = *(_DWORD *)v5;
    *(_QWORD *)&v7[4] = *(_QWORD *)(v5 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "SkillLevelUp", *(NiPoint3 *)v7, *(NiPoint3 *)v6, Timer::ms_fCurTime, 1.0);
    v8 = TextData::Get(0xD6433C22u);
    sprintf(szResult, v8);
    GameFrameWork::AddSysMsg(v3, szResult);
    User::SetMainCharClass(&g_kUser, *(_BYTE *)pvData);
    g_pkMainChar->m_kCharShape.m_kClassID = *(_BYTE *)pvData;
    CharInfoWin::SetClass(v3->m_pkCharInfoWin, *(_BYTE *)pvData);
    if ( Char::GetClass(g_pkMainChar) == 4
      || Char::GetClass(g_pkMainChar) == 5
      || Char::GetClass(g_pkMainChar) == 9
      || Char::GetClass(g_pkMainChar) == 10
      || Char::GetClass(g_pkMainChar) == 14
      || Char::GetClass(g_pkMainChar) == 15
      || Char::GetClass(g_pkMainChar) == 19
      || Char::GetClass(g_pkMainChar) == 20
      || Char::GetClass(g_pkMainChar) == 24
      || Char::GetClass(g_pkMainChar) == 25
      || Char::GetClass(g_pkMainChar) == 27 )
      EffectMgr::CreateAttachEffect(
        &g_kEffectMgr,
        (unsigned int *)&dwDummy,
        "Aura100",
        g_pkMainChar,
        None,
        Timer::ms_fCurTime,
        1,
        1,
        0,
        1);
  }
  else
  {
    v4 = TextData::Get(0xDAEBBECAu);
    GameFrameWork::AddSysMsg(v3, v4);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BAB50) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_SOMEONEPROMOTE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  Char *v4; // esi@3
  void *v5; // eax@4
  int v6; // eax@7
  _BYTE v7[12]; // ST10_12@7
  _BYTE v8[12]; // ST04_12@7
  char *v9; // eax@7
  int dwDummy; // [sp+20h] [bp-8Ch]@18
  char *szdata; // [sp+24h] [bp-88h]@5
  char szResult[128]; // [sp+28h] [bp-84h]@7
  unsigned int v14; // [sp+A8h] [bp-4h]@1
  int v15; // [sp+ACh] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  if ( *(_WORD *)pvData == g_pkMainChar->m_kHandle )
    User::SetMainCharClass(&g_kUser, *((_BYTE *)pvData + 2));
  v4 = GameFrameWork::GetCharByHandle(v3, *(_WORD *)pvData, 4, 90);
  if ( v4 )
  {
    v5 = CDataReader::GetRecord(
           (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
           *((_BYTE *)pvData + 2));
    if ( v5 )
      szdata = (char *)v5 + 21;
    else
      szdata = &byte_9788EB;
    v6 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
    *(_DWORD *)v7 = (_DWORD)NiPoint3::UNIT_Y.x;
    *(_QWORD *)&v7[4] = *(_QWORD *)&NiPoint3::UNIT_Y.y;
    *(_DWORD *)v8 = *(_DWORD *)v6;
    *(_QWORD *)&v8[4] = *(_QWORD *)(v6 + 4);
    EffectMgr::CreateEffect(&g_kEffectMgr, "SkillLevelUp", *(NiPoint3 *)v8, *(NiPoint3 *)v7, Timer::ms_fCurTime, 1.0);
    ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
    v9 = TextData::Get(0x78E7CEBFu);
    sprintf(szResult, v9);
    GameFrameWork::AddSysMsg(v3, szResult);
    v4->m_kCharShape.m_kClassID = *((_BYTE *)pvData + 2);
    if ( Char::GetClass(v4) == 4
      || Char::GetClass(v4) == 5
      || Char::GetClass(v4) == 9
      || Char::GetClass(v4) == 10
      || Char::GetClass(v4) == 14
      || Char::GetClass(v4) == 15
      || Char::GetClass(v4) == 19
      || Char::GetClass(v4) == 20
      || Char::GetClass(v4) == 24
      || Char::GetClass(v4) == 25
      || Char::GetClass(v4) == 27 )
      EffectMgr::CreateAttachEffect(
        &g_kEffectMgr,
        (unsigned int *)&dwDummy,
        "Aura100",
        v4,
        None,
        Timer::ms_fCurTime,
        1,
        1,
        0,
        1);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BAD30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHARGED_BUFFSTART_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  PgWin *v4; // ST00_4@1
  ChargedItemEffect *v5; // eax@1
  char *v6; // eax@3

  v3 = this;
  ChargedItemList::AddUsingItem((PROTO_CHARGEDBUFF_INFO *)pvData);
  ChargedItemListWin::Refresh(v3->m_pkChargedItemListWin);
  v4 = (PgWin *)v3->m_pkChargedItemListWin;
  v3->m_pkStatusChargedBuffWin->m_fLastUpdatedTime = 0.0;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
  v5 = ChargedEffectTable::GetByHandle(*((_WORD *)pvData + 2));
  if ( v5 && v5->EffectEnum == 33 )
  {
    v6 = TextData2::Get(0x214C2F82u);
    GameFrameWork::AddSysMsg(v3, v6);
  }
  return iRevBytes;
}

//----- (004BADB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_ARRANGEMODE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  AnnounceWin *v6; // ecx@4
  D3DXCOLOR *v7; // ST04_4@8
  char *v8; // eax@8
  D3DXCOLOR result; // [sp+8h] [bp-10h]@8

  v3 = this;
  if ( *(_WORD *)pvData == 4546 )
  {
    MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_NORMAL);
    if ( nowState )
    {
      if ( v3->m_pkMHAnnounceWin )
      {
        v7 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
        v8 = TextData2::Get(0x728986AAu);
        AnnounceWin::AddText(v3->m_pkMHAnnounceWin, v8, v7, 1, 1000000.0);
      }
    }
  }
  else
  {
    if ( *(_WORD *)pvData != 4547 )
    {
      v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
      GameFrameWork::AddSysMsg(v3, v4);
      return iRevBytes;
    }
    MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_NORMAL);
    v6 = v3->m_pkMHAnnounceWin;
    if ( v6 )
    {
      AnnounceWin::KillNoticing(v6);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004BAE70) --------------------------------------------------------
int __thiscall GameFrameWork::ON_NC_KQ_JOINING_ALARM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  MiniMapWin *v4; // ecx@1
  void *v5; // esi@2
  AnnounceWin *v6; // eax@6
  D3DXCOLOR *v7; // eax@8
  D3DXCOLOR v8; // ST04_16@8
  KingdomQuestWin *v9; // ecx@9
  bool v10; // bl@9
  void *v11; // eax@11
  MiniMapWin *v12; // edi@15
  D3DXCOLOR result; // [sp+Ch] [bp-10h]@8
  char bJoinable_3; // [sp+2Bh] [bp+Fh]@5

  v3 = this;
  v4 = this->m_pkMiniMapWin;
  if ( v4 )
  {
    v5 = pvData;
    if ( MiniMapWin::ConfirmKQAlarmInfo(v4, *(_DWORD *)pvData) )
    {
      *((_BYTE *)pvData + *((_BYTE *)pvData + 8) + 9) = 0;
      if ( User::Lv(&g_kUser) < *((_BYTE *)pvData + 6) || User::Lv(&g_kUser) > *((_BYTE *)pvData + 7) )
      {
        bJoinable_3 = 0;
      }
      else
      {
        bJoinable_3 = 1;
        GameFrameWork::OpenPlayGuideWin(v3, BIL_KIGNDOMQUEST_1);
      }
      v6 = v3->m_pkAnnounceWin;
      if ( v6 && bJoinable_3 )
      {
        v6->m_bNotice = 1;
        v7 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
        *(_QWORD *)&v8.r = *(_QWORD *)&v7->r;
        *(_QWORD *)&v8.b = *(_QWORD *)&v7->b;
        GameFrameWork::AddAnnounceMsg(v3, (char *)v5 + 9, COERCE_D3DXCOLOR(v8.r));
      }
      v9 = v3->m_pkKingDomQuest;
      v10 = 0;
      if ( v9 )
        v10 = KingdomQuestWin::IsStarted(v9);
      v11 = operator new(8u);
      if ( v11 )
      {
        *(_DWORD *)v11 = -1;
        *((_WORD *)v11 + 2) = -1;
        *((_BYTE *)v11 + 6) = 1;
      }
      else
      {
        v11 = 0;
      }
      *(_DWORD *)v11 = *(_DWORD *)v5;
      *((_WORD *)v11 + 2) = *((_WORD *)v5 + 2);
      *((_BYTE *)v11 + 6) = bJoinable_3;
      MiniMapWin::AddKQAlarmInfo(v3->m_pkMiniMapWin, (MiniMapWin::sKQAlarmInfo *)v11);
      v12 = v3->m_pkMiniMapWin;
      v12->m_bKQStarted = v10;
      v12->m_bKQListChanged = 1;
    }
  }
  return iRevBytes;
}

//----- (004BAFB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_RAID_INVITATION_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  MHDiceGameTask *v4; // ecx@1
  MHDiceGameTask *v5; // edi@2
  int v6; // ecx@8
  int v7; // edx@8
  int v8; // ecx@8
  int v9; // edx@8
  char *v10; // eax@8
  char *v11; // eax@8
  MsgBox *v12; // eax@8
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-30h]@1
  bool v15; // [sp+7h] [bp-29h]@1
  char acName[21]; // [sp+8h] [bp-28h]@8
  unsigned int v17; // [sp+20h] [bp-10h]@1
  int v18; // [sp+2Ch] [bp-4h]@1
  int v19; // [sp+30h] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  v4 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v18 = 0;
  v15 = MHDiceGameTask::IsDicegamePlaying(v4);
  v18 = -1;
  if ( result.m_pObject )
  {
    v5 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
  if ( !v15 )
  {
    if ( v3->m_pkRaidReplyWin.m_pObject || RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
    {
      GameFrameWork::NcRaidInvitationAnswerReq(v3, 0);
    }
    else
    {
      v6 = *(_DWORD *)pvData;
      v7 = *((_DWORD *)pvData + 1);
      *(_DWORD *)&acName[8] = *((_DWORD *)pvData + 2);
      *(_DWORD *)acName = v6;
      v8 = *((_DWORD *)pvData + 3);
      *(_DWORD *)&acName[4] = v7;
      v9 = *((_DWORD *)pvData + 4);
      *(_DWORD *)&acName[12] = v8;
      *(_DWORD *)&acName[16] = v9;
      acName[20] = 0;
      v10 = TextData2::Get(0x240B0E23u);
      v11 = fs(v10);
      v12 = MsgBox::Modeless(MSGBOX_OKCANCEL, v11);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v3->m_pkRaidReplyWin,
        (NiD3DDefaultShader *)v12);
      v3->m_pkRaidReplyWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
        &v3->m_pkRaidReplyWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        v3);
      *(_QWORD *)&g_kRaidinfo.m_kJoinProposeCharID.n5_name[0] = *(_QWORD *)pvData;
      *(_QWORD *)&g_kRaidinfo.m_kJoinProposeCharID.n5_name[8] = *((_QWORD *)pvData + 1);
      *(_DWORD *)&g_kRaidinfo.m_kJoinProposeCharID.n5_name[16] = *((_DWORD *)pvData + 4);
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004BB110) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_AREADOTDAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  unsigned __int16 v4; // ax@1
  AbnormalStateInfo *v5; // eax@3
  DamageEffect *v6; // eax@4
  ActionEffectInfo *v7; // eax@5
  ActionEffectInfo *v8; // edi@5
  AbnormalStateViewInfo::EffPosEnum v9; // ebx@6
  char *v10; // edi@14
  int result; // eax@16
  AbnormalStateInfo *v12; // eax@19
  DamageEffect *v13; // eax@20
  ActionEffectInfo *v14; // edi@21
  AbnormalStateViewInfo::EffPosEnum v15; // eax@22
  bool v16; // zf@31
  int v17; // esi@32
  void *v18; // eax@33
  int v19; // edi@34
  unsigned __int16 v20; // ax@37
  GameFrameWork *v21; // esi@37
  unsigned __int16 v22; // ax@37
  ShortCutWin **v23; // esi@37
  signed int v24; // ebx@37
  unsigned __int16 v25; // ax@38
  unsigned __int16 v26; // ax@38
  int v27; // eax@39
  Char *v28; // esi@46
  int v29; // esi@52
  char v30; // bl@52
  int v31; // eax@59
  Char *v32; // esi@59
  AbnormalStateInfo *v33; // eax@66
  DamageEffect *v34; // eax@67
  ActionEffectInfo *v35; // eax@68
  AbnormalStateViewInfo::EffPosEnum v36; // edi@69
  int v37; // edx@78
  unsigned int dwEffHandle_; // [sp+20h] [bp-18h]@77
  GameFrameWork *v39; // [sp+24h] [bp-14h]@1
  int i; // [sp+28h] [bp-10h]@30
  Char *pkChar; // [sp+2Ch] [bp-Ch]@1
  Char *pkDamageChar; // [sp+30h] [bp-8h]@33
  char bDamegeApplication; // [sp+37h] [bp-1h]@39

  v3 = pvData;
  v4 = *((_WORD *)pvData + 1);
  v39 = this;
  pkChar = CharMgr::GetChar(&g_kCharMgr, v4);
  if ( !pkChar )
    return iRevBytes;
  if ( *((_BYTE *)v3 + 4) )
  {
    v12 = AbnormalStateInfoTab::GetByAbstateIndex(*(_WORD *)v3);
    if ( v12 )
    {
      v13 = DamageEffectTab::GetByIndexName(v12->InxName, 0);
      if ( v13 )
      {
        v14 = ActionEffectInfoTab::GetByID(v13->EffectID);
        if ( v14 )
        {
          v15 = 0;
          if ( !strcmp(v14->GEffectPos, "None") )
            v15 = 0;
          if ( !strcmp(v14->GEffectPos, "Ground") )
            v15 = 1;
          if ( !strcmp(v14->GEffectPos, "HairLink") )
            v15 = 3;
          if ( !strcmp(v14->GEffectPos, "Chest") )
            v15 = 2;
          EffectMgr::CreateAttachEffect(
            &g_kEffectMgr,
            (unsigned int *)&i,
            v14->GrapicFile,
            pkChar,
            v15,
            Timer::ms_fCurTime,
            0,
            0,
            0,
            1);
        }
      }
    }
    v16 = *((_BYTE *)v3 + 4) == 0;
    i = 0;
    if ( v16 )
      return iRevBytes;
    v17 = (int)((char *)v3 + 7);
    pkChar = (Char *)v17;
    while ( 1 )
    {
      v18 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)(v17 - 2));
      pkDamageChar = (Char *)v18;
      if ( v18 )
        break;
LABEL_78:
      v37 = *((_BYTE *)pvData + 4);
      v17 = (int)&pkChar->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
      ++i;
      pkChar = (Char *)((char *)pkChar + 12);
      if ( i >= v37 )
        return iRevBytes;
    }
    v19 = *(_DWORD *)(v17 + 4);
    if ( v18 == g_pkMainChar && MainChar::IsAirBorneState((MainChar *)g_pkMainChar) && v19 > 0 )
    {
      v20 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      v21 = v39;
      ShortCutWin::IsStartCollTime(v39->m_pkShortCutWin, v20);
      v22 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      ShortCutWin::IsStartCollTime(v21->m_pkShortCutWinV, v22);
      v23 = v21->m_pkShortCutSubWinV;
      v24 = 4;
      do
      {
        v25 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*(v23 - 5), v25);
        v26 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*v23, v26);
        ++v23;
        --v24;
      }
      while ( v24 );
    }
    v27 = *(_WORD *)pvData;
    bDamegeApplication = 1;
    if ( v27 == 14 || (_WORD)v27 == 339 )
      bDamegeApplication = 0;
    if ( (_WORD)v27 == 812 )
      bDamegeApplication = 0;
    if ( v19 > 0 && bDamegeApplication )
    {
      v28 = pkDamageChar;
      ((void (__thiscall *)(Char *, int, signed int))pkDamageChar->baseclass_0.vfptr[12].__vecDelDtor)(
        pkDamageChar,
        v19,
        1);
    }
    else
    {
      v28 = pkDamageChar;
    }
    if ( !pkChar->baseclass_0.vfptr )
    {
      if ( Char::IsResource(v28) )
        Char::ActResourceDisappearing(v28);
      else
        ((void (__thiscall *)(Char *))v28->baseclass_0.vfptr[20].Deaffect)(v28);
    }
    v29 = ((int (*)(void))pkDamageChar->baseclass_0.vfptr[2].__vecDelDtor)();
    v30 = 0;
    if ( !(unsigned __int8)((int (*)(void))pkDamageChar->baseclass_0.vfptr[1].Affect)() && !v19 )
    {
      if ( v29 == 1 )
      {
        if ( pkChar->baseclass_0.vfptr <= (AbStateInfecteeVtbl *)1 )
          goto LABEL_59;
      }
      else
      {
        if ( pkChar->baseclass_0.vfptr < (AbStateInfecteeVtbl *)v29 )
          goto LABEL_59;
      }
      v30 = 1;
    }
LABEL_59:
    v31 = ((int (*)(void))pkDamageChar->baseclass_0.vfptr[2].__vecDelDtor)();
    v32 = pkChar;
    if ( v31 > 0 )
    {
      Char::HpUpdate(
        pkDamageChar,
        LOWORD(pkChar->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.vfptr),
        (unsigned int)pkChar->baseclass_0.vfptr);
      if ( pkDamageChar->m_kHandle == HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) )
        Char::TOTHpUpdate(
          pkDamageChar,
          LOWORD(v32->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.vfptr),
          (unsigned int)v32->baseclass_0.vfptr);
    }
    if ( !v30 && bDamegeApplication )
      TextEffMgr::AddDamage(&g_kTextEffMgr, *((_WORD *)v32 - 1), v19);
    if ( *(_WORD *)pvData != -1 )
    {
      v33 = AbnormalStateInfoTab::GetByAbstateIndex(*(_WORD *)pvData);
      if ( v33 )
      {
        v34 = DamageEffectTab::GetByIndexName(v33->InxName, 1u);
        if ( v34 )
        {
          v35 = ActionEffectInfoTab::GetByID(v34->EffectID);
          if ( v35 )
          {
            v36 = 0;
            if ( !strcmp(v35->GEffectPos, "None") )
              v36 = 0;
            if ( !strcmp(v35->GEffectPos, "Ground") )
              v36 = 1;
            if ( !strcmp(v35->GEffectPos, "HairLink") )
              v36 = 3;
            if ( !strcmp(v35->GEffectPos, "Chest") )
              v36 = 2;
            EffectMgr::CreateAttachEffect(
              &g_kEffectMgr,
              &dwEffHandle_,
              v35->GrapicFile,
              pkDamageChar,
              v36,
              Timer::ms_fCurTime,
              0,
              0,
              0,
              1);
          }
        }
      }
    }
    goto LABEL_78;
  }
  v5 = AbnormalStateInfoTab::GetByAbstateIndex(*(_WORD *)v3);
  if ( !v5
    || (v6 = DamageEffectTab::GetByIndexName(v5->InxName, 0)) == 0
    || (v7 = ActionEffectInfoTab::GetByID(v6->EffectID), (v8 = v7) == 0) )
    return iRevBytes;
  v9 = 0;
  if ( !strcmp(v7->GEffectPos, "None") )
    v9 = 0;
  if ( !strcmp(v8->GEffectPos, "Ground") )
    v9 = 1;
  if ( !strcmp(v8->GEffectPos, "HairLink") )
    v9 = 3;
  if ( !strcmp(v8->GEffectPos, "Chest") )
    v9 = 2;
  v10 = v8->GrapicFile;
  if ( AbStateInfectee::FindNomalAbstate(&pkChar->baseclass_0, STA_GTIHIDE) )
  {
    if ( pkChar == g_pkMainChar )
    {
      EffectMgr::CreateAttachEffect(
        &g_kEffectMgr,
        (unsigned int *)&pvData,
        v10,
        pkChar,
        v9,
        Timer::ms_fCurTime,
        0,
        0,
        0,
        1);
      result = iRevBytes;
    }
    else
    {
      EffectMgr::CreateAttachEffect(
        &g_kEffectMgr,
        (unsigned int *)&pvData,
        v10,
        pkChar,
        v9,
        Timer::ms_fCurTime,
        0,
        0,
        0,
        0);
      result = iRevBytes;
    }
  }
  else
  {
    EffectMgr::CreateAttachEffect(
      &g_kEffectMgr,
      (unsigned int *)&pvData,
      v10,
      pkChar,
      v9,
      Timer::ms_fCurTime,
      0,
      0,
      0,
      1);
    result = iRevBytes;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BB7A0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_REFLECTIONDAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  AbnormalStateInfo *v3; // eax@2
  DamageEffect *v4; // eax@3
  ActionEffectInfo *v5; // eax@4
  ActionEffectInfo *v6; // ebx@4
  AbnormalStateViewInfo::EffPosEnum v7; // edi@5
  Char *v8; // eax@14
  Char *v9; // edi@14
  Char *v10; // esi@15
  unsigned __int16 v11; // ax@18
  unsigned __int16 v12; // ax@18
  ShortCutWin **v13; // esi@18
  signed int v14; // ebx@18
  unsigned __int16 v15; // ax@19
  unsigned __int16 v16; // ax@19
  int v17; // eax@21
  int v18; // esi@33
  char v19; // bl@33
  GameFrameWork *v21; // [sp+20h] [bp-Ch]@1
  Char *iDamage; // [sp+24h] [bp-8h]@1
  char bDamegeApplication; // [sp+2Bh] [bp-1h]@21

  v21 = this;
  iDamage = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
  if ( iDamage )
  {
    v3 = AbnormalStateInfoTab::GetByAbstateIndex(*(_WORD *)pvData);
    if ( v3 )
    {
      v4 = DamageEffectTab::GetByIndexName(v3->InxName, 0);
      if ( v4 )
      {
        v5 = ActionEffectInfoTab::GetByID(v4->EffectID);
        v6 = v5;
        if ( v5 )
        {
          v7 = 0;
          if ( !strcmp(v5->GEffectPos, "None") )
            v7 = 0;
          if ( !strcmp(v6->GEffectPos, "Ground") )
            v7 = 1;
          if ( !strcmp(v6->GEffectPos, "HairLink") )
            v7 = 3;
          if ( !strcmp(v6->GEffectPos, "Chest") )
            v7 = 2;
          EffectMgr::CreateAttachEffect(
            &g_kEffectMgr,
            (unsigned int *)&iDamage,
            v6->GrapicFile,
            iDamage,
            v7,
            Timer::ms_fCurTime,
            0,
            0,
            0,
            1);
        }
      }
    }
  }
  v8 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 2));
  v9 = v8;
  if ( v8 )
  {
    v10 = (Char *)*((_WORD *)pvData + 5);
    iDamage = (Char *)*((_WORD *)pvData + 5);
    if ( v8 == g_pkMainChar && MainChar::IsAirBorneState((MainChar *)g_pkMainChar) && (signed int)v10 > 0 )
    {
      v11 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      ShortCutWin::IsStartCollTime(v21->m_pkShortCutWin, v11);
      v12 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
      ShortCutWin::IsStartCollTime(v21->m_pkShortCutWinV, v12);
      v13 = v21->m_pkShortCutSubWinV;
      v14 = 4;
      do
      {
        v15 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*(v13 - 5), v15);
        v16 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(*v13, v16);
        ++v13;
        --v14;
      }
      while ( v14 );
      v10 = iDamage;
    }
    v17 = *(_WORD *)pvData;
    bDamegeApplication = 1;
    if ( v17 == 14 || (_WORD)v17 == 339 )
      bDamegeApplication = 0;
    if ( (_WORD)v17 == 812 )
      bDamegeApplication = 0;
    if ( (signed int)v10 > 0 && bDamegeApplication )
      ((void (__thiscall *)(Char *, Char *, signed int))v9->baseclass_0.vfptr[12].__vecDelDtor)(v9, v10, 1);
    if ( !*(_DWORD *)((char *)pvData + 6) )
    {
      if ( Char::IsResource(v9) )
        Char::ActResourceDisappearing(v9);
      else
        ((void (__thiscall *)(Char *))v9->baseclass_0.vfptr[20].Deaffect)(v9);
    }
    v18 = ((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[2].__vecDelDtor)(v9);
    v19 = 0;
    if ( (unsigned __int8)((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[1].Affect)(v9) || iDamage )
      goto LABEL_40;
    if ( v18 == 1 )
    {
      if ( *(_DWORD *)((char *)pvData + 6) <= 1u )
        goto LABEL_40;
    }
    else
    {
      if ( *(_DWORD *)((char *)pvData + 6) < (unsigned int)v18 )
      {
LABEL_40:
        if ( ((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[2].__vecDelDtor)(v9) > 0 )
        {
          Char::HpUpdate(v9, *((_WORD *)pvData + 6), *(_DWORD *)((char *)pvData + 6));
          if ( v9->m_kHandle == HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) )
            Char::TOTHpUpdate(v9, *((_WORD *)pvData + 6), *(_DWORD *)((char *)pvData + 6));
        }
        if ( !v19 && bDamegeApplication )
          TextEffMgr::AddDamage(&g_kTextEffMgr, *((_WORD *)pvData + 2), (int)iDamage);
        return iRevBytes;
      }
    }
    v19 = 1;
    goto LABEL_40;
  }
  return iRevBytes;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BBAE0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_EVENTNPC_STANDSTART_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // ebx@1
  int v5; // ecx@1
  int v6; // edx@1
  int v7; // ecx@1
  int v8; // edx@1
  int v9; // ecx@1
  int v10; // edx@1
  unsigned int v11; // esi@1
  void *v12; // edi@2
  void *v13; // eax@7
  D3DXCOLOR v14; // ST08_16@10
  char *v15; // eax@10
  char *v16; // eax@10
  D3DXCOLOR *v18; // [sp-14h] [bp-58h]@6
  char v19; // [sp-10h] [bp-54h]@6
  char v20; // [sp-Ch] [bp-50h]@6
  char v21; // [sp-8h] [bp-4Ch]@6
  char v22; // [sp-4h] [bp-48h]@6
  D3DXCOLOR result; // [sp+Ch] [bp-38h]@6
  char acName[33]; // [sp+1Ch] [bp-28h]@1
  unsigned int v25; // [sp+40h] [bp-4h]@1
  int v26; // [sp+44h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = this;
  *(_DWORD *)acName = *(_DWORD *)pvData;
  v5 = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acName[4] = v3;
  v6 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[8] = v5;
  v7 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[12] = v6;
  v8 = *((_DWORD *)pvData + 5);
  *(_DWORD *)&acName[16] = v7;
  v9 = *((_DWORD *)pvData + 6);
  *(_DWORD *)&acName[20] = v8;
  v10 = *((_DWORD *)pvData + 7);
  *(_DWORD *)&acName[24] = v9;
  *(_DWORD *)&acName[28] = v10;
  acName[32] = 0;
  v11 = 0;
  if ( (signed int)ITableBase<MobInfo_MobInfoTab>::GetTotal() > 0 )
  {
    while ( 1 )
    {
      v12 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 4), v11);
      if ( !strncmp((const char *)v12 + 2, acName, 0x20u) )
        break;
      ++v11;
      if ( (signed int)v11 >= (signed int)ITableBase<MobInfo_MobInfoTab>::GetTotal() )
        return iRevBytes;
    }
    if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
    {
      v13 = CDataReader::GetRecord(
              (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
              0x32u);
      v22 = -1;
      if ( v13 )
      {
        v21 = *((_BYTE *)v13 + 6);
        v20 = *((_BYTE *)v13 + 5);
        v19 = *((_BYTE *)v13 + 4);
        v18 = &result;
      }
      else
      {
        v21 = -1;
        v20 = 0;
        v19 = -1;
        v18 = &result;
      }
    }
    else
    {
      v22 = -1;
      v21 = -1;
      v20 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
      v19 = -1;
      v18 = &result;
    }
    Color::GetDxColor(v18, v19, v20, v21, v22);
    *(_QWORD *)&v14.r = *(_QWORD *)&result;
    *(_QWORD *)&v14.b = *(_QWORD *)&result.b;
    v15 = TextData2::Get(0x335F5E77u);
    v16 = fs(v15);
    GameFrameWork::AddAnnounceMsg(v4, v16, COERCE_D3DXCOLOR(v14.r));
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (004BBC30) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MISC_EVENTNPC_STANDEND_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edx@1
  GameFrameWork *v4; // ebx@1
  int v5; // ecx@1
  int v6; // edx@1
  int v7; // ecx@1
  int v8; // edx@1
  int v9; // ecx@1
  int v10; // edx@1
  unsigned int v11; // esi@1
  void *v12; // edi@2
  void *v13; // eax@7
  D3DXCOLOR v14; // ST08_16@10
  char *v15; // eax@10
  char *v16; // eax@10
  D3DXCOLOR *v18; // [sp-14h] [bp-58h]@6
  char v19; // [sp-10h] [bp-54h]@6
  char v20; // [sp-Ch] [bp-50h]@6
  char v21; // [sp-8h] [bp-4Ch]@6
  char v22; // [sp-4h] [bp-48h]@6
  D3DXCOLOR result; // [sp+Ch] [bp-38h]@6
  char acName[33]; // [sp+1Ch] [bp-28h]@1
  unsigned int v25; // [sp+40h] [bp-4h]@1
  int v26; // [sp+44h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v3 = *((_DWORD *)pvData + 1);
  v4 = this;
  *(_DWORD *)acName = *(_DWORD *)pvData;
  v5 = *((_DWORD *)pvData + 2);
  *(_DWORD *)&acName[4] = v3;
  v6 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acName[8] = v5;
  v7 = *((_DWORD *)pvData + 4);
  *(_DWORD *)&acName[12] = v6;
  v8 = *((_DWORD *)pvData + 5);
  *(_DWORD *)&acName[16] = v7;
  v9 = *((_DWORD *)pvData + 6);
  *(_DWORD *)&acName[20] = v8;
  v10 = *((_DWORD *)pvData + 7);
  *(_DWORD *)&acName[24] = v9;
  *(_DWORD *)&acName[28] = v10;
  acName[32] = 0;
  v11 = 0;
  if ( (signed int)ITableBase<MobInfo_MobInfoTab>::GetTotal() > 0 )
  {
    while ( 1 )
    {
      v12 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 4), v11);
      if ( !strncmp((const char *)v12 + 2, acName, 0x20u) )
        break;
      ++v11;
      if ( (signed int)v11 >= (signed int)ITableBase<MobInfo_MobInfoTab>::GetTotal() )
        return iRevBytes;
    }
    if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
    {
      v13 = CDataReader::GetRecord(
              (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
              0x32u);
      v22 = -1;
      if ( v13 )
      {
        v21 = *((_BYTE *)v13 + 6);
        v20 = *((_BYTE *)v13 + 5);
        v19 = *((_BYTE *)v13 + 4);
        v18 = &result;
      }
      else
      {
        v21 = -1;
        v20 = 0;
        v19 = -1;
        v18 = &result;
      }
    }
    else
    {
      v22 = -1;
      v21 = -1;
      v20 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
      v19 = -1;
      v18 = &result;
    }
    Color::GetDxColor(v18, v19, v20, v21, v22);
    *(_QWORD *)&v14.r = *(_QWORD *)&result;
    *(_QWORD *)&v14.b = *(_QWORD *)&result.b;
    v15 = TextData2::Get(0x335FA46Fu);
    v16 = fs(v15);
    GameFrameWork::AddAnnounceMsg(v4, v16, COERCE_D3DXCOLOR(v14.r));
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (004BBD80) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_MESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  ScriptMsg *v3; // eax@1

  OutputDebugStringA("RCV :On_NC_SCENARIO_MESSAGE_CMD\n");
  v3 = ScriptMsgTab::GetScriptMsgInfo((const char *)pvData);
  if ( v3 )
    ScriptMsgCtrl::AddMsg(v3, 0, 0xFFFFu);
  return iRevBytes;
}

//----- (004BBDC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_OBJECT_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // esi@1
  ActionEffectInfo *v4; // eax@2

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( v3 )
  {
    v4 = ActionEffectInfoTab::GetByID(*((_WORD *)pvData + 1));
    if ( v4 )
      EffectMgr::CreateActionEffect(&g_kEffectMgr, v4, 0, 0.0, v3, 0, 0, 0xFFFFu, 0);
  }
  return iRevBytes;
}

//----- (004BBE20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_RESULT_SUC_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  int v4; // edx@1
  GameFrameWork *v5; // ebx@1
  int v6; // ecx@1
  int v7; // eax@1
  Name5 *v8; // eax@1
  int v9; // ecx@1
  int v10; // edx@1
  int v11; // ecx@1
  int v12; // edx@1
  unsigned int v13; // edi@1
  int v14; // eax@2
  void *v15; // eax@6
  D3DXCOLOR *v16; // eax@10
  char *v17; // eax@11
  char *v18; // eax@11
  char *v19; // eax@11
  char *v20; // eax@11
  char *v21; // eax@12
  char *v22; // eax@12
  D3DXCOLOR *v23; // eax@12
  D3DXCOLOR v24; // ST14_16@12
  char *v25; // eax@12
  char *v26; // eax@12
  char *v27; // eax@12
  char *v28; // eax@12
  char *v29; // eax@12
  D3DXCOLOR v31; // [sp-10h] [bp-54h]@10
  unsigned int v32; // [sp+Ch] [bp-38h]@3
  char acMainCharID[21]; // [sp+10h] [bp-34h]@1
  char acTarget[21]; // [sp+28h] [bp-1Ch]@1
  unsigned int v35; // [sp+40h] [bp-4h]@1
  int v36; // [sp+44h] [bp+0h]@1

  v35 = (unsigned int)&v36 ^ __security_cookie;
  v3 = *(_DWORD *)pvData;
  v4 = *((_DWORD *)pvData + 2);
  v5 = this;
  *(_DWORD *)&acTarget[4] = *((_DWORD *)pvData + 1);
  v6 = *((_DWORD *)pvData + 4);
  *(_DWORD *)acTarget = v3;
  v7 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acTarget[16] = v6;
  *(_DWORD *)&acTarget[8] = v4;
  *(_DWORD *)&acTarget[12] = v7;
  acTarget[20] = 0;
  v8 = User::GetMainCharID(&g_kUser);
  v9 = *(_DWORD *)&v8->n5_name[4];
  *(_DWORD *)acMainCharID = *(_DWORD *)&v8->n5_name[0];
  v10 = *(_DWORD *)&v8->n5_name[8];
  *(_DWORD *)&acMainCharID[4] = v9;
  v11 = *(_DWORD *)&v8->n5_name[12];
  *(_DWORD *)&acMainCharID[8] = v10;
  v12 = *(_DWORD *)&v8->n5_name[16];
  *(_DWORD *)&acMainCharID[12] = v11;
  *(_DWORD *)&acMainCharID[16] = v12;
  acMainCharID[20] = 0;
  v13 = 0;
  if ( strcmp(acMainCharID, acTarget) )
  {
    v14 = *(_DWORD *)(ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 56);
    v32 = v14 ? *(_DWORD *)(v14 + 40) : 0;
    if ( v32 > 0 )
    {
      do
      {
        v15 = CDataReader::GetRecord(
                (CDataReader *)(ITableBase<KQVoteMajorityRate_KQVoteMajorityRateTable>::ms_pkTable + 4),
                v13);
        if ( !v15 )
          break;
        if ( *((_BYTE *)pvData + 20) == *(_BYTE *)v15 )
        {
          v16 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&acMainCharID[4], Center_Announcement);
          *(_QWORD *)&v31.r = *(_QWORD *)&v16->r;
          *(_QWORD *)&v31.b = *(_QWORD *)&v16->b;
          if ( v13 )
          {
            v21 = TextData3::Get(0x2119557Bu);
            v22 = fs(v21);
            GameFrameWork::AddAnnounceMsg(v5, v22, COERCE_D3DXCOLOR(v31.r));
            v23 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&acMainCharID[4], Center_Announcement);
            *(_QWORD *)&v24.r = *(_QWORD *)&v23->r;
            *(_QWORD *)&v24.b = *(_QWORD *)&v23->b;
            v25 = TextData3::Get(0x26195F84u);
            v26 = fs(v25);
            GameFrameWork::AddAnnounceMsg(v5, v26, COERCE_D3DXCOLOR(v24.r));
            v27 = TextData3::Get(0x2119557Bu);
            v28 = fs(v27);
            GameFrameWork::AddSysMsg(v5, v28);
            v29 = TextData3::Get(0x26195F84u);
            v20 = fs(v29);
          }
          else
          {
            v17 = TextData3::Get(0x2477878Cu);
            v18 = fs(v17);
            GameFrameWork::AddAnnounceMsg(v5, v18, COERCE_D3DXCOLOR(v31.r));
            v19 = TextData3::Get(0x2477878Cu);
            v20 = fs(v19);
          }
          GameFrameWork::AddSysMsg(v5, v20);
          return iRevBytes;
        }
        ++v13;
      }
      while ( v13 < v32 );
    }
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A97EFC: using guessed type int ITableBase_KQVoteMajorityRate_KQVoteMajorityRateTable___ms_pkTable;

//----- (004BC070) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_KQ_VOTE_RESULT_FAIL_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  int v4; // edx@1
  GameFrameWork *v5; // edi@1
  int v6; // ecx@1
  int v7; // eax@1
  Name5 *v8; // eax@1
  int v9; // ecx@1
  int v10; // edx@1
  int v11; // ecx@1
  int v12; // edx@1
  D3DXCOLOR *v13; // eax@2
  D3DXCOLOR v14; // ST14_16@2
  char *v15; // eax@2
  char *v16; // eax@2
  char *v17; // eax@3
  char *v18; // eax@3
  char acMainCharID[21]; // [sp+8h] [bp-34h]@1
  char acTarget[21]; // [sp+20h] [bp-1Ch]@1
  unsigned int v22; // [sp+38h] [bp-4h]@1
  int v23; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = *(_DWORD *)pvData;
  v4 = *((_DWORD *)pvData + 2);
  v5 = this;
  *(_DWORD *)&acTarget[4] = *((_DWORD *)pvData + 1);
  v6 = *((_DWORD *)pvData + 4);
  *(_DWORD *)acTarget = v3;
  v7 = *((_DWORD *)pvData + 3);
  *(_DWORD *)&acTarget[16] = v6;
  *(_DWORD *)&acTarget[8] = v4;
  *(_DWORD *)&acTarget[12] = v7;
  acTarget[20] = 0;
  v8 = User::GetMainCharID(&g_kUser);
  v9 = *(_DWORD *)&v8->n5_name[4];
  *(_DWORD *)acMainCharID = *(_DWORD *)&v8->n5_name[0];
  v10 = *(_DWORD *)&v8->n5_name[8];
  *(_DWORD *)&acMainCharID[4] = v9;
  v11 = *(_DWORD *)&v8->n5_name[12];
  *(_DWORD *)&acMainCharID[8] = v10;
  v12 = *(_DWORD *)&v8->n5_name[16];
  *(_DWORD *)&acMainCharID[12] = v11;
  *(_DWORD *)&acMainCharID[16] = v12;
  acMainCharID[20] = 0;
  if ( strcmp(acMainCharID, acTarget) )
  {
    v13 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&acMainCharID[4], Center_Announcement);
    *(_QWORD *)&v14.r = *(_QWORD *)&v13->r;
    *(_QWORD *)&v14.b = *(_QWORD *)&v13->b;
    v15 = TextData3::Get(0x25292A38u);
    v16 = fs(v15);
    GameFrameWork::AddAnnounceMsg(v5, v16, COERCE_D3DXCOLOR(v14.r));
  }
  v17 = TextData3::Get(0x25292A38u);
  v18 = fs(v17);
  GameFrameWork::AddSysMsg(v5, v18);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004BC1B0) --------------------------------------------------------
void __thiscall GameFrameWork::NcKqVoteStartReq(GameFrameWork *this, Name5 kTargetID, unsigned int uiVoteType, std::basic_string<char,std::char_traits<char>,std::allocator<char> > kContents)
{
  PgNet *v4; // ecx@1
  int v5; // ebx@1
  unsigned int v6; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@4
  unsigned int v8; // eax@6
  int v9; // esi@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // ecx@7
  PgNet *v11; // ecx@10
  GameFrameWork *v12; // [sp+0h] [bp-B0h]@1
  NETCOMMAND netcmd; // [sp+4h] [bp-ACh]@1
  PROTO_NC_KQ_VOTE_START_REQ kProto; // [sp+8h] [bp-A8h]@1
  char acStr[128]; // [sp+20h] [bp-90h]@3
  unsigned int v16; // [sp+A0h] [bp-10h]@1
  int v17; // [sp+ACh] [bp-4h]@1
  int v18; // [sp+B0h] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v12 = this;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  v5 = 0;
  v17 = 0;
  netcmd.protocol = 22567;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  *(_QWORD *)&kProto.sTarget.n5_name[0] = *(_QWORD *)&kTargetID;
  *(_QWORD *)&kProto.sTarget.n5_name[8] = *(_QWORD *)&kTargetID.n5_name[8];
  *(_DWORD *)&kProto.sTarget.n5_name[16] = *(_DWORD *)&kTargetID.n5_name[16];
  kProto.nVoteType = uiVoteType;
  v6 = kContents.baseclass_0._Mysize;
  if ( (signed int)kContents.baseclass_0._Mysize > 127 )
    v6 = 127;
  *(_DWORD *)acStr = 0;
  while ( 1 )
  {
    v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&kContents;
    if ( kContents.baseclass_0._Myres < 0x10 )
      v7 = &kContents;
    v8 = (IsDBCSLeadByte(v7->baseclass_0.___u0.baseclass_0.dummy[v5]) != 0) + 1;
    v9 = v8 + v5;
    if ( (signed int)(v8 + v5) > (signed int)v6 )
      break;
    v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&kContents;
    if ( kContents.baseclass_0._Myres < 0x10 )
      v10 = &kContents;
    memcpy(&acStr[v5], (char *)v10 + v5, v8);
    v5 = v9;
  }
  v11 = (PgNet *)v12->m_spWorldMgrNet.m_pObject;
  acStr[v5] = 0;
  kProto.nLen = v5;
  PgNet::AddNetMsg(v11, &kProto, 22);
  PgNet::SendNetMsg(&v12->m_spWorldMgrNet.m_pObject->baseclass_0, acStr, (unsigned __int8)kProto.nLen);
  if ( kContents.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kContents);
}
// A85C00: using guessed type int __security_cookie;

//----- (004BC310) --------------------------------------------------------
void __thiscall GameFrameWork::NcInstanceDungeonRankTabDamagedealtReq(GameFrameWork *this, SHINE_INDUN_INFO *rInfo)
{
  GameFrameWork *v2; // edi@1
  PgNet *v3; // ecx@1
  int v4; // edx@1
  int v5; // ecx@1
  PgNet *v6; // ecx@1
  NETCOMMAND netcmd; // [sp+8h] [bp-18h]@1
  PROTO_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGEDEALT_REQ kProto; // [sp+Ch] [bp-14h]@1
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = -23525;
  PgNet::AddNetMsg(v3, &netcmd, 2);
  v4 = *(_DWORD *)&rInfo->MapIDClient.n3_name[0];
  v5 = *(_DWORD *)&rInfo->MapIDClient.n3_name[8];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[4] = *(_DWORD *)&rInfo->MapIDClient.n3_name[4];
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[0] = v4;
  LOBYTE(v4) = rInfo->ModeIDLv;
  *(_DWORD *)&kProto.sIndunInfo.MapIDClient.n3_name[8] = v5;
  v6 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  kProto.sIndunInfo.ModeIDLv = v4;
  PgNet::SendNetMsg(v6, &kProto, 13);
}
// A85C00: using guessed type int __security_cookie;

//----- (004BC380) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_REVIVEOTHER_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  return GameFrameWork::On_NC_MAP_LINKOTHER_CMD(this, iRevBytes, pvData);
}

//----- (004BC390) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_OBJ_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  GameFrameWork *v4; // ebx@1
  Char *v5; // edi@2
  Char *v6; // eax@2
  void *v7; // eax@6
  Char *pkAttChar; // [sp+14h] [bp+Ch]@1

  v3 = pvData;
  v4 = this;
  pkAttChar = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( pkAttChar )
  {
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 16))(*((_WORD *)v3 + 1));
    v5 = GameFrameWork::GetCharByHandle(v4, *(_WORD *)v3, 9, 79);
    v6 = GameFrameWork::GetCharByHandle(v4, *((_WORD *)v3 + 2), 9, 79);
    if ( v5 && v5 != g_pkMainChar && v6 )
    {
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v5->baseclass_0.vfptr[9].GetAbstateColor)(
        v5,
        v6,
        1,
        *((_WORD *)v3 + 1));
      ((void (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[16].__vecDelDtor)(v5);
    }
    v7 = operator new(0x18u);
    if ( v7 )
    {
      *((_DWORD *)v7 + 4) = 0;
      *((_DWORD *)v7 + 2) = 0;
      *((_DWORD *)v7 + 3) = 0;
      *((_DWORD *)v7 + 1) = &NiTList<DamageInfo__>::_vftable_;
    }
    else
    {
      v7 = 0;
    }
    *(_WORD *)v7 = *((_WORD *)v3 + 1);
    *((_WORD *)v7 + 10) = *((_WORD *)v3 + 3);
    AttackSequenceManager::AddSkillSeq(&pkAttChar->baseclass_54, (SkillSequence *)v7);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004BC460) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_FLD_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // edi@1
  int v4; // ebx@1
  void *v5; // eax@4
  __int16 v6; // dx@7
  GameFrameWork *v8; // [sp+Ch] [bp-4h]@1

  v8 = this;
  CharMgr::GetChar(&g_kCharMgr, this->m_kSkillCasting.kTargetHandle);
  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v4 = *(_WORD *)pvData;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                        + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          *(_WORD *)pvData)
    && (unsigned __int16)v4 <= *(_WORD *)(v3 + 200)
    && *(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * v4) )
  {
    v8->m_kSkillCasting.kGroundTypeDetail.x = *(_DWORD *)((char *)pvData + 2);
    v8->m_kSkillCasting.kGroundTypeDetail.y = *(_DWORD *)((char *)pvData + 6);
    Char::SetSkillTargetGroundPoint(g_pkMainChar, *(_DWORD *)((char *)pvData + 2), *(_DWORD *)((char *)pvData + 6), 1);
    v5 = operator new(0x18u);
    if ( v5 )
    {
      *((_DWORD *)v5 + 4) = 0;
      *((_DWORD *)v5 + 2) = 0;
      *((_DWORD *)v5 + 3) = 0;
      *((_DWORD *)v5 + 1) = &NiTList<DamageInfo__>::_vftable_;
    }
    else
    {
      v5 = 0;
    }
    v6 = *(_WORD *)pvData;
    *((_WORD *)v5 + 10) = *((_WORD *)pvData + 5);
    *(_WORD *)v5 = v6;
    AttackSequenceManager::AddSkillSeq(&g_pkMainChar->baseclass_54, (SkillSequence *)v5);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004BC530) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_FLD_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  int v4; // edi@2
  int v5; // ebx@2
  Char *v6; // eax@5
  Char *v7; // edi@5
  void *v8; // eax@8
  GameFrameWork *thisa; // [sp+Ch] [bp-4h]@1
  Char *pkAttChar; // [sp+1Ch] [bp+Ch]@1

  v3 = pvData;
  thisa = this;
  pkAttChar = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( pkAttChar )
  {
    v4 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    v5 = *((_WORD *)v3 + 1);
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            *((_WORD *)v3 + 1)) )
    {
      if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) && *(_DWORD *)(*(_DWORD *)(v4 + 196) + 4 * v5) )
      {
        v6 = GameFrameWork::GetCharByHandle(thisa, *(_WORD *)v3, 9, 81);
        v7 = v6;
        if ( v6 && v6 != g_pkMainChar )
        {
          ((void (__thiscall *)(Char *, _DWORD, _DWORD, signed int, _DWORD))v6->baseclass_0.vfptr[9].DeleteAbStateByAbstateIndex)(
            v6,
            *((_DWORD *)v3 + 1),
            *((_DWORD *)v3 + 2),
            1,
            *((_WORD *)v3 + 1));
          ((void (__thiscall *)(Char *))v7->baseclass_0.vfptr[16].__vecDelDtor)(v7);
        }
        Char::SetSkillTargetGroundPoint(pkAttChar, *((_DWORD *)v3 + 1), *((_DWORD *)v3 + 2), 1);
        v8 = operator new(0x18u);
        if ( v8 )
        {
          *((_DWORD *)v8 + 4) = 0;
          *((_DWORD *)v8 + 2) = 0;
          *((_DWORD *)v8 + 3) = 0;
          *((_DWORD *)v8 + 1) = &NiTList<DamageInfo__>::_vftable_;
        }
        else
        {
          v8 = 0;
        }
        *(_WORD *)v8 = *((_WORD *)v3 + 1);
        *((_WORD *)v8 + 10) = *((_WORD *)v3 + 6);
        AttackSequenceManager::AddSkillSeq(&pkAttChar->baseclass_54, (SkillSequence *)v8);
      }
    }
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004BC640) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_DAMAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  unsigned __int16 v4; // ax@3
  bool v5; // zf@6
  char *v6; // edi@7
  int v7; // edx@8
  char v8; // al@12
  char v9; // cl@12
  char v10; // si@12
  char v11; // bl@12
  int v12; // esi@13
  Item *v13; // ebx@13
  unsigned __int16 v14; // ax@15
  GameFrameWork *v15; // ebx@15
  unsigned __int16 v16; // ax@15
  ShortCutWin **v17; // ebx@15
  unsigned __int16 v18; // ax@16
  unsigned __int16 v19; // ax@16
  Char *v20; // eax@32
  unsigned __int16 v21; // dx@35
  unsigned __int16 v22; // ax@37
  NiTListItem<DamageInfo *> *v23; // esi@47
  NiTListItem<DamageInfo *> *v24; // ST18_4@48
  unsigned int v25; // edx@50
  unsigned __int16 v27; // [sp-28h] [bp-5Ch]@42
  unsigned int v28; // [sp-24h] [bp-58h]@42
  unsigned int v29; // [sp-20h] [bp-54h]@42
  bool v30; // [sp-1Ch] [bp-50h]@38
  bool v31; // [sp-1Ch] [bp-50h]@42
  bool v32; // [sp-18h] [bp-4Ch]@38
  __int16 v33; // [sp-14h] [bp-48h]@38
  DamageInfoSet pkDmgDummyInfoSet; // [sp+0h] [bp-34h]@41
  DamageInfoSet *pkDmgInfoSet; // [sp+10h] [bp-24h]@3
  GameFrameWork *v36; // [sp+14h] [bp-20h]@1
  unsigned int i; // [sp+18h] [bp-1Ch]@6
  int v38; // [sp+1Ch] [bp-18h]@15
  Char *pkChar; // [sp+20h] [bp-14h]@1
  char bShieldCosDecreaseCharged; // [sp+26h] [bp-Eh]@3
  char bDecreaseCharged; // [sp+27h] [bp-Dh]@3
  int v42; // [sp+30h] [bp-4h]@41

  v36 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)pvData + 1));
  pkChar = v3;
  if ( !v3 )
  {
    OutputDebugStringA("haven't char\n");
    return iRevBytes;
  }
  pkDmgInfoSet = AttackSequenceManager::GetSkillDmgInfoSetbyIndex(&v3->baseclass_54, *(_WORD *)pvData);
  v4 = *(_WORD *)((char *)pvData + 7);
  bDecreaseCharged = 0;
  bShieldCosDecreaseCharged = 0;
  if ( v4 != -1 && *(_WORD *)((char *)pvData + 5) == 1620 )
    CharMgr::GetChar(&g_kCharMgr, v4)->m_bIsRevived = 1;
  v5 = *((_BYTE *)pvData + 4) == 0;
  i = 0;
  if ( !v5 )
  {
    v6 = (char *)pvData + 11;
    do
    {
      v7 = *(_DWORD *)(v6 + 2);
      if ( v7 < 0 )
        v7 = 0;
      if ( v7 & 0xFFFF0000 )
        v7 = (unsigned __int16)v7;
      v8 = *v6;
      v9 = *v6;
      v10 = *v6;
      v11 = *v6;
      if ( *((_WORD *)v6 - 1) == g_pkMainChar->m_kHandle )
      {
        v12 = v7 | (*(_DWORD *)(v6 + 6) != 0 ? 0 : -2147483648) | (((v8 & 0x10) != 16) - 1) & 0x10000000 | (((v8 & 0x20) != 32) - 1) & 0x8000000 | ((v9 & 0x40 | 2 * (v6[1] & 2 | 8 * (v9 & 8 | 16 * (~v8 & 1 | 2 * (v11 & 4 | 4 * (v10 & 2))) | 2))) << 18);
        v13 = 0;
        if ( !MainChar::IsAirBorneState((MainChar *)g_pkMainChar) || (unsigned int)v12 <= 0 )
          goto LABEL_20;
        v14 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        v15 = v36;
        ShortCutWin::IsStartCollTime(v36->m_pkShortCutWin, v14);
        v16 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
        ShortCutWin::IsStartCollTime(v15->m_pkShortCutWinV, v16);
        v17 = v15->m_pkShortCutSubWinV;
        v38 = 4;
        do
        {
          v18 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
          ShortCutWin::IsStartCollTime(*(v17 - 5), v18);
          v19 = MainChar::GetAirBorneID((MainChar *)g_pkMainChar);
          ShortCutWin::IsStartCollTime(*v17, v19);
          ++v17;
          --v38;
        }
        while ( v38 );
      }
      else
      {
        v12 = v7 | (*(_DWORD *)(v6 + 6) != 0 ? 0 : -2147483648) | (((v8 & 0x10) != 16) - 1) & 0x10000000 | (((v8 & 0x20) != 32) - 1) & 0x8000000 | ((v9 & 0x40 | 2 * (v6[1] & 2 | 8 * (v9 & 8 | 16 * (~v8 & 1 | 2 * (v11 & 4 | 4 * (v10 & 2))) | 3))) << 18);
      }
      v13 = 0;
LABEL_20:
      if ( !bDecreaseCharged
        && *v6 & 0x80
        && pkChar == g_pkMainChar
        && Inventory::GetEquipedWeaponAcc(&g_kInventory) != v13 )
      {
        Inventory::DecreaeWeaponAccCharged(&g_kInventory);
        bDecreaseCharged = 1;
      }
      if ( !bShieldCosDecreaseCharged
        && v6[1] & 4
        && pkChar == g_pkMainChar
        && Inventory::GetEquipedShieldAcc(&g_kInventory) != v13 )
      {
        Inventory::DecreaeShieldAccCharged(&g_kInventory);
        bShieldCosDecreaseCharged = 1;
      }
      if ( *(Item **)(v6 + 6) == v13 || v6[1] & 1 )
      {
        v20 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v6 - 1));
        if ( (Item *)v20 != v13 )
          v20->m_bWillDead = 1;
      }
      if ( (Item *)pkDmgInfoSet == v13 )
      {
        *(_DWORD *)&pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = v13;
        pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<DamageInfo *> *)v13;
        pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<DamageInfo *> *)v13;
        pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTList<DamageInfo__>::_vftable_;
        v42 = (int)v13;
        DamageInfoSet::Clear(&pkDmgDummyInfoSet);
        if ( pkChar->m_kHandle == g_pkMainChar->m_kHandle )
        {
          v31 = 1;
          v29 = *(_DWORD *)(v6 + 6);
          v28 = *((_WORD *)v6 + 5);
          v27 = *((_WORD *)v6 - 1);
        }
        else
        {
          if ( *((_WORD *)v6 - 1) == g_pkMainChar->m_kHandle )
            v31 = 1;
          else
            v31 = (char)v13;
          v29 = *(_DWORD *)(v6 + 6);
          v28 = *((_WORD *)v6 + 5);
          v27 = *((_WORD *)v6 - 1);
        }
        DamageInfoSet::AddDamage(&pkDmgDummyInfoSet, v12, v27, v28, v29, v31, (bool)v13, -1);
        DamageInfoSet::Applicate(&pkDmgDummyInfoSet, pkChar, (bool)v13);
        v42 = 1;
        DamageInfoSet::Clear(&pkDmgDummyInfoSet);
        pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
        v23 = pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead;
        v42 = 2;
        while ( (Item *)v23 != v13 )
        {
          v24 = v23;
          v23 = v23->m_pkNext;
          pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr->DeleteItem(
            (NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *)&pkDmgDummyInfoSet,
            v24);
        }
        *(_DWORD *)&pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = v13;
        pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<DamageInfo *> *)v13;
        pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<DamageInfo *> *)v13;
        v42 = -1;
        pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
      }
      else
      {
        v21 = g_pkMainChar->m_kHandle;
        if ( pkChar->m_kHandle == v21 )
        {
          DamageInfoSet::AddDamage(
            pkDmgInfoSet,
            v12,
            *((_WORD *)v6 - 1),
            *((_WORD *)v6 + 5),
            *(_DWORD *)(v6 + 6),
            1,
            (bool)v13,
            1);
        }
        else
        {
          v22 = *((_WORD *)v6 - 1);
          if ( v22 == v21 )
          {
            v33 = *(_WORD *)pvData;
            v32 = (char)v13;
            v30 = 1;
          }
          else
          {
            v33 = -1;
            v32 = (char)v13;
            v30 = (char)v13;
          }
          DamageInfoSet::AddDamage(pkDmgInfoSet, v12, v22, *((_WORD *)v6 + 5), *(_DWORD *)(v6 + 6), v30, v32, v33);
        }
      }
      v25 = *((_BYTE *)pvData + 4);
      v6 += 14;
      ++i;
    }
    while ( i < v25 );
  }
  return iRevBytes;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);

//----- (004BCAB0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_ABSTATESET_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // edi@1
  unsigned int v4; // esi@2
  std::_Container_base12 *v5; // edx@4
  std::_Container_proxy *v6; // ecx@6
  int v7; // eax@6
  std::_Container_base12 *v8; // edx@10
  std::_Container_proxy *v9; // ecx@12
  int v10; // eax@12
  char v11; // al@16
  int v12; // edi@16
  char v13; // bl@16
  unsigned int v14; // esi@16
  void *v15; // esi@19
  std::_Container_base12 *v16; // edx@28
  std::_Container_proxy *v17; // edi@30
  int v18; // eax@32
  char *v20; // eax@36
  char *v21; // eax@38
  unsigned int v22; // [sp+4h] [bp-30h]@26
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iterEnd; // [sp+14h] [bp-20h]@2
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iter; // [sp+20h] [bp-14h]@2
  Char *pkChar; // [sp+2Ch] [bp-8h]@1
  GameFrameWork *v26; // [sp+30h] [bp-4h]@1

  v26 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  pkChar = v3;
  if ( !v3 )
    return iRevBytes;
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(&g_kCharMgr.m_kLoadDataList, &iter);
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(&g_kCharMgr.m_kLoadDataList, &iterEnd);
  v4 = iter.baseclass_0._Myoff;
  if ( iter.baseclass_0._Myoff == iterEnd.baseclass_0._Myoff )
  {
LABEL_16:
    v11 = ((int (__thiscall *)(Char *, _DWORD, _DWORD, _DWORD))v3->baseclass_0.vfptr->AddAbStateByAbstateIndex)(
            v3,
            *(_DWORD *)((char *)pvData + 2),
            -3.0,
            0);
    v12 = *((_WORD *)pvData + 1);
    v13 = v11;
    v14 = 0;
    if ( ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal() )
    {
      while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                    (CDataReader *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.m_pkMsgHooker,
                                    v14)
                        + 34) != v12 )
      {
        ++v14;
        if ( v14 >= ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal() )
          goto LABEL_19;
      }
      v15 = CDataReader::GetRecord(
              (CDataReader *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.m_pkMsgHooker,
              v14);
    }
    else
    {
LABEL_19:
      v15 = 0;
    }
    if ( pkChar != g_pkMainChar || !v13 || !v15 )
      return iRevBytes;
    if ( *((_DWORD *)v15 + 61) == 3 )
    {
      v22 = 1325059531;
    }
    else
    {
      if ( *((_DWORD *)v15 + 61) == 4 )
      {
        v22 = 1745404876;
      }
      else
      {
        if ( *((_DWORD *)v15 + 61) != 5 )
          goto LABEL_37;
        v22 = 174404483;
      }
    }
    v20 = TextData::Get(v22);
    GameFrameWork::AddSysMsg(v26, v20);
LABEL_37:
    if ( *(_DWORD *)((char *)v15 + 34) == 337 )
    {
      v21 = TextData2::Get(0x4F19C4B8u);
      GameFrameWork::AddSysMsg(v26, v21);
    }
    return iRevBytes;
  }
  while ( 1 )
  {
    if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
      v5 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
    else
      v5 = 0;
    v6 = v5[2]._Myproxy;
    v7 = v4;
    if ( (unsigned int)v6 <= v4 )
      v7 = v4 - (_DWORD)v6;
    if ( (&v5[1]._Myproxy->_Mycont)[v7][60]._Myproxy )
    {
      if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
        v8 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
      else
        v8 = 0;
      v9 = v8[2]._Myproxy;
      v10 = v4;
      if ( (unsigned int)v9 <= v4 )
        v10 = v4 - (_DWORD)v9;
      if ( LOWORD((&v8[1]._Myproxy->_Mycont)[v10][60]._Myproxy[68]._Myfirstiter) == v3->m_kHandle )
        break;
    }
    ++v4;
    if ( v4 == iterEnd.baseclass_0._Myoff )
      goto LABEL_16;
  }
  if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
    v16 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
  else
    v16 = 0;
  v17 = v16[2]._Myproxy;
  if ( (unsigned int)v17 <= v4 )
    v4 -= (unsigned int)v17;
  v18 = (int)((char *)&(&v16[1]._Myproxy->_Mycont)[v4][22]._Myproxy + *(_DWORD *)((char *)pvData + 2) / 8 + 3);
  *(_BYTE *)v18 |= 1 << *(_DWORD *)((char *)pvData + 2) % 8;
  return iRevBytes;
}

//----- (004BCCA0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_ABSTATEINFORM_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  void *v4; // esi@2
  unsigned int v5; // eax@2
  double v6; // st7@3
  unsigned __int16 v7; // ax@5
  AbnormalStateInfo *v8; // eax@5
  bool (__thiscall *v9)(AbStateInfectee *, ABSTATEINDEX, float, bool); // edx@5
  void *v10; // ebx@5
  int v11; // eax@5
  unsigned int v12; // esi@7
  std::_Container_base12 *v13; // edx@10
  std::_Container_proxy *v14; // ecx@12
  int v15; // eax@12
  AbnormalStateInfo *v16; // ebx@17
  std::_Container_base12 *v17; // edx@19
  std::_Container_proxy *v18; // edi@21
  int v19; // eax@23
  char *v21; // eax@27
  MapNavigator *v22; // esi@30
  GTInformWin *v23; // esi@32
  D3DXCOLOR *v24; // eax@33
  D3DXCOLOR v25; // ST04_16@33
  char *v26; // eax@33
  MapNavigator *v27; // esi@37
  MapNavigator *v28; // edi@38
  GTInformWin *v29; // esi@44
  D3DXCOLOR *v30; // eax@45
  D3DXCOLOR v31; // ST04_16@45
  char *v32; // eax@45
  char *v33; // eax@47
  int v34; // eax@54
  SubAbStateInfo *v35; // eax@58
  CBlindEffect *v36; // ecx@60
  double v37; // st7@60
  float v38; // ST14_4@60
  AbStateMsg *v39; // eax@62
  unsigned int v40; // [sp+14h] [bp-3Ch]@24
  char v41; // [sp+24h] [bp-2Ch]@33
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iterEnd; // [sp+28h] [bp-28h]@7
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iter; // [sp+34h] [bp-1Ch]@7
  NiPointer<MapNavigator> result; // [sp+40h] [bp-10h]@4
  void *pkInfo; // [sp+44h] [bp-Ch]@5
  AbnormalStateInfo *fTime; // [sp+48h] [bp-8h]@5
  GameFrameWork *v47; // [sp+4Ch] [bp-4h]@1

  v3 = this;
  v47 = this;
  if ( !g_pkMainChar )
    return iRevBytes;
  v4 = pvData;
  v5 = *((_DWORD *)pvData + 1);
  if ( v5 == -1 )
  {
    v6 = -3.0;
  }
  else
  {
    result.m_pObject = (MapNavigator *)*((_DWORD *)pvData + 1);
    v6 = (double)v5 / 1000.0;
  }
  v7 = *(_WORD *)pvData;
  *(float *)&fTime = v6;
  v8 = AbnormalStateInfoTab::GetByAbstateIndex(v7);
  v9 = g_pkMainChar->baseclass_0.vfptr->AddAbStateByAbstateIndex;
  v10 = v8;
  v11 = *(_DWORD *)v4;
  pkInfo = v10;
  if ( !(unsigned __int8)((int (__stdcall *)(int, AbnormalStateInfo *, _DWORD))v9)(v11, fTime, 0)
    || (fTime = AbnormalStateInfoTab::GetByAbstateIndex(*(_WORD *)v4), *(float *)&fTime == 0.0) )
  {
LABEL_49:
    if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount
      || g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount > 0 )
    {
      if ( v3->m_kCharMover.m_bAutoRun )
        KeyboardMoveProcess::SetAutoRun(&v3->m_kCharMover, 0);
      GameFrameWork::Stick(v3, 0, 0);
    }
    v34 = *(_DWORD *)v4;
    if ( *(_DWORD *)v4 == 76 || v34 == 368 || v34 == 412 )
    {
      *(float *)&pvData = 0.0099999998;
      if ( v10 )
      {
        v35 = SubAbStateInfoTab::GetByInxName((char *)v10 + 212);
        if ( v35 )
          *(float *)&pvData = (double)v35->KeepTime;
      }
      v36 = v3->m_spBlindEffect.m_pObject;
      *(float *)&pvData = *(float *)&pvData / 1000.0;
      v37 = *(float *)&pvData;
      *(float *)&pvData = 0.25 * *(float *)&pvData * 3.0;
      v38 = v37;
      CBlindEffect::Start(v36, v38, *(float *)&pvData);
      MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
      if ( AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) > 0 )
      {
        LOWORD(pvData) = 9266;
        PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &pvData, 2);
        AttackSequenceManager::HardStopAttack(&g_pkMainChar->baseclass_54);
      }
    }
    v39 = AbStateMsgTable::GetAbStateMsgByIDX((char *)v10 + 2, 0);
    if ( v39 )
      ScriptMsgCtrl::AddAbStateMsg(v39);
    return iRevBytes;
  }
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(&g_kCharMgr.m_kLoadDataList, &iter);
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(&g_kCharMgr.m_kLoadDataList, &iterEnd);
  v12 = iter.baseclass_0._Myoff;
  if ( iter.baseclass_0._Myoff == iterEnd.baseclass_0._Myoff )
  {
LABEL_17:
    v16 = fTime;
    switch ( fTime->DispelIndex )
    {
      case 4:
        v40 = 1745404876;
        goto LABEL_27;
      case 5:
        v40 = 174404483;
        goto LABEL_27;
      case 3:
        v40 = 1325059531;
LABEL_27:
        v21 = TextData::Get(v40);
        GameFrameWork::AddSysMsg(v3, v21);
        break;
      case 6:
      case 7:
        if ( v3->m_kCharMover.m_bAutoRun )
          KeyboardMoveProcess::SetAutoRun(&v3->m_kCharMover, 0);
        GameFrameWork::Stick(v3, 0, 0);
        v22 = MapNavigator::GetMapNavigator(&result)->m_pObject;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
        if ( v22 )
        {
          if ( v22->m_bIsWorking )
          {
            v22->m_bIsWorking = 0;
            v23 = v3->m_pkAutoRunMsgWin;
            if ( v23 )
            {
              GTInformWin::Clear(v3->m_pkAutoRunMsgWin);
              v24 = Color::GetDxColor((D3DXCOLOR *)&v41, -1, -112, 0, -1);
              *(_QWORD *)&v25.r = *(_QWORD *)&v24->r;
              *(_QWORD *)&v25.b = *(_QWORD *)&v24->b;
              v26 = TextData2::Get(0x3C517589u);
              GTInformWin::AddText(v23, v26, COERCE_D3DXCOLOR(v25.r), 0, 3.0);
            }
          }
        }
        break;
      default:
        break;
    }
    if ( v16->SubDispelIndex == 8 )
    {
      if ( v3->m_kCharMover.m_bAutoRun )
        KeyboardMoveProcess::SetAutoRun(&v3->m_kCharMover, 0);
      GameFrameWork::Stick(v3, 0, 0);
      v27 = MapNavigator::GetMapNavigator(&result)->m_pObject;
      if ( result.m_pObject )
      {
        v28 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) && v28 )
          v28->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
        v3 = v47;
      }
      if ( v27 )
      {
        if ( v27->m_bIsWorking )
        {
          v27->m_bIsWorking = 0;
          v29 = v3->m_pkAutoRunMsgWin;
          if ( v29 )
          {
            GTInformWin::Clear(v3->m_pkAutoRunMsgWin);
            v30 = Color::GetDxColor((D3DXCOLOR *)&v41, -1, -112, 0, -1);
            *(_QWORD *)&v31.r = *(_QWORD *)&v30->r;
            *(_QWORD *)&v31.b = *(_QWORD *)&v30->b;
            v32 = TextData2::Get(0x3C517589u);
            GTInformWin::AddText(v29, v32, COERCE_D3DXCOLOR(v31.r), 0, 3.0);
          }
        }
      }
    }
    if ( v16->AbStataIndex == 337 )
    {
      v33 = TextData2::Get(0x4F19C4B8u);
      GameFrameWork::AddSysMsg(v3, v33);
    }
    v10 = pkInfo;
    v4 = pvData;
    goto LABEL_49;
  }
  result.m_pObject = (MapNavigator *)g_pkMainChar->m_kHandle;
  while ( 1 )
  {
    if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
      v13 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
    else
      v13 = 0;
    v14 = v13[2]._Myproxy;
    v15 = v12;
    if ( (unsigned int)v14 <= v12 )
      v15 = v12 - (_DWORD)v14;
    if ( LOWORD((&v13[1]._Myproxy->_Mycont)[v15][60]._Myproxy[68]._Myfirstiter) == (_WORD)result.m_pObject )
      break;
    ++v12;
    if ( v12 == iterEnd.baseclass_0._Myoff )
    {
      v3 = v47;
      goto LABEL_17;
    }
  }
  if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
    v17 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
  else
    v17 = 0;
  v18 = v17[2]._Myproxy;
  if ( (unsigned int)v18 <= v12 )
    v12 -= (unsigned int)v18;
  v19 = (int)((char *)&(&v17[1]._Myproxy->_Mycont)[v12][22]._Myproxy + *(_DWORD *)pvData / 8 + 3);
  *(_BYTE *)v19 |= 1 << *(_DWORD *)pvData % 8;
  return iRevBytes;
}

//----- (004BD110) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_ABSTATERESET_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  unsigned __int16 v4; // ax@1
  Char *v5; // ebx@1
  unsigned int v6; // esi@2
  unsigned __int16 v7; // di@3
  void *v8; // ebx@4
  std::_Container_base12 *v9; // edx@5
  std::_Container_proxy *v10; // ecx@7
  int v11; // eax@7
  int v12; // edi@12
  unsigned int v13; // esi@12
  void *v14; // esi@15
  int v15; // eax@21
  int v16; // edi@21
  unsigned int v17; // ecx@23
  int v18; // edx@23
  std::_Container_base12 *v19; // edx@28
  std::_Container_proxy *v20; // ecx@30
  int v21; // eax@32
  char *v23; // eax@35
  int v24; // eax@36
  AbStateMsg *v25; // eax@40
  unsigned int v26; // [sp-4h] [bp-30h]@20
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iterEnd; // [sp+Ch] [bp-20h]@2
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iter; // [sp+18h] [bp-14h]@2
  Char *pkChar; // [sp+24h] [bp-8h]@1
  GameFrameWork *v30; // [sp+28h] [bp-4h]@1

  v3 = pvData;
  v4 = *(_WORD *)pvData;
  v30 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, v4);
  pkChar = v5;
  if ( !v5 )
    return iRevBytes;
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(&g_kCharMgr.m_kLoadDataList, &iter);
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(&g_kCharMgr.m_kLoadDataList, &iterEnd);
  v6 = iter.baseclass_0._Myoff;
  if ( iter.baseclass_0._Myoff == iterEnd.baseclass_0._Myoff )
  {
LABEL_12:
    v5->baseclass_0.vfptr->DeleteAbStateByAbstateIndex((AbStateInfectee *)v5, *(ABSTATEINDEX *)((char *)v3 + 2));
    v12 = *((_WORD *)v3 + 1);
    v13 = 0;
    if ( ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal() )
    {
      while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                    (CDataReader *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.m_pkMsgHooker,
                                    v13)
                        + 34) != v12 )
      {
        ++v13;
        if ( v13 >= ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal() )
          goto LABEL_15;
      }
      v14 = CDataReader::GetRecord(
              (CDataReader *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.m_pkMsgHooker,
              v13);
    }
    else
    {
LABEL_15:
      v14 = 0;
    }
    if ( v5 != g_pkMainChar )
      return iRevBytes;
    if ( !v14 )
      goto LABEL_36;
    if ( *((_DWORD *)v14 + 61) == 1 )
    {
      v26 = -448188345;
    }
    else
    {
      if ( *((_DWORD *)v14 + 61) != 2 )
        goto LABEL_36;
      v26 = 760753277;
    }
    v23 = TextData::Get(v26);
    GameFrameWork::AddSysMsg(v30, v23);
LABEL_36:
    v24 = *(_DWORD *)((char *)pvData + 2);
    if ( v24 == 76 || v24 == 368 || v24 == 412 )
      CBlindEffect::FastEnd(v30->m_spBlindEffect.m_pObject);
    v25 = AbStateMsgTable::GetAbStateMsgByIDX((char *)v14 + 2, AMT_END);
    if ( v25 )
      ScriptMsgCtrl::AddAbStateMsg(v25);
    return iRevBytes;
  }
  v7 = v5->m_kHandle;
  while ( 1 )
  {
    v8 = iter.baseclass_0.baseclass_0._Myproxy;
    if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
      v9 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
    else
      v9 = 0;
    v10 = v9[2]._Myproxy;
    v11 = v6;
    if ( (unsigned int)v10 <= v6 )
      v11 = v6 - (_DWORD)v10;
    if ( LOWORD((&v9[1]._Myproxy->_Mycont)[v11][60]._Myproxy[68]._Myfirstiter) == v7 )
      break;
    ++v6;
    if ( v6 == iterEnd.baseclass_0._Myoff )
    {
      v5 = pkChar;
      v3 = pvData;
      goto LABEL_12;
    }
  }
  v15 = *(_DWORD *)((char *)pvData + 2) / 8;
  v16 = *(_DWORD *)((char *)pvData + 2) % 8;
  if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
    v8 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
  v17 = *((_DWORD *)v8 + 2);
  v18 = v6;
  if ( v17 <= v6 )
    v18 = v6 - v17;
  if ( !*(_BYTE *)(*(_DWORD *)(*((_DWORD *)v8 + 1) + 4 * v18) + v15 + 91) || !(1 << v16) )
    return iRevBytes;
  if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
    v19 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
  else
    v19 = 0;
  v20 = v19[2]._Myproxy;
  if ( (unsigned int)v20 <= v6 )
    v6 -= (unsigned int)v20;
  v21 = (int)((char *)&(&v19[1]._Myproxy->_Mycont)[v6][22]._Myproxy + v15 + 3);
  *(_BYTE *)v21 ^= 1 << v16;
  return iRevBytes;
}

//----- (004BD320) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  ShortCutWin **v4; // esi@2
  int v5; // esi@4
  int v6; // ebx@4
  int v7; // eax@8
  int v8; // eax@10
  void *v9; // eax@13
  char *v10; // edi@17
  int v11; // eax@18
  char v12; // al@22
  unsigned int *v13; // ebx@22
  int v14; // esi@22
  Char *v15; // eax@32
  int result; // eax@38
  unsigned int i; // [sp+18h] [bp-1Ch]@16
  bool bDisPlay; // [sp+1Ch] [bp-18h]@34
  GameFrameWork *thisa; // [sp+20h] [bp-14h]@1
  signed int iHpChange; // [sp+24h] [bp-10h]@2
  int iHpChangea; // [sp+24h] [bp-10h]@18
  void *pkSeq; // [sp+28h] [bp-Ch]@14
  int pkInfo; // [sp+2Ch] [bp-8h]@5
  char bShieldCosDecreaseCharged; // [sp+32h] [bp-2h]@4
  char bDecreaseCharged; // [sp+33h] [bp-1h]@4

  v3 = this;
  thisa = this;
  CastingProgressWin::CastingSuccess(this->m_pkCastingProgressBar);
  if ( !AbStateInfectee::FindAbstateInstBySubAbstateType(&g_pkMainChar->baseclass_0, SUBAB_COOLTIMEREMOVE) )
  {
    Skill::RecordSkillUse(*(_WORD *)pvData, Timer::ms_fCurTime, 0.0, 0.0);
    ShortCutWin::StartSkill(v3->m_pkShortCutWin, *(_WORD *)pvData, Timer::ms_fCurTime);
    ShortCutWin::StartSkill(v3->m_pkShortCutWinV, *(_WORD *)pvData, Timer::ms_fCurTime);
    v4 = v3->m_pkShortCutSubWinV;
    iHpChange = 4;
    do
    {
      ShortCutWin::StartSkill(*(v4 - 5), *(_WORD *)pvData, Timer::ms_fCurTime);
      ShortCutWin::StartSkill(*v4, *(_WORD *)pvData, Timer::ms_fCurTime);
      ++v4;
      --iHpChange;
    }
    while ( iHpChange );
  }
  bDecreaseCharged = 0;
  bShieldCosDecreaseCharged = 0;
  CharMgr::GetChar(&g_kCharMgr, v3->m_kSkillCasting.kTargetHandle);
  v5 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v6 = *(_WORD *)pvData;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          *(_WORD *)pvData) )
  {
    if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) )
    {
      v7 = *(_DWORD *)(v5 + 196) + 4 * v6;
      if ( *(_DWORD *)v7 )
      {
        v8 = *(_DWORD *)v7;
        pkInfo = v8;
        if ( v8 && *(_DWORD *)(v8 + 259) )
        {
          thisa->m_kSkillCasting.kGroundTypeDetail.x = *(_DWORD *)((char *)pvData + 3);
          thisa->m_kSkillCasting.kGroundTypeDetail.y = *(_DWORD *)((char *)pvData + 7);
          Char::SetSkillTargetGroundPoint(
            g_pkMainChar,
            *(_DWORD *)((char *)pvData + 3),
            *(_DWORD *)((char *)pvData + 7),
            1);
        }
      }
      else
      {
        pkInfo = 0;
      }
    }
    else
    {
      pkInfo = 0;
    }
  }
  else
  {
    pkInfo = 0;
  }
  Char::SetReserveSkillSmash(g_pkMainChar, 1);
  v9 = operator new(0x18u);
  if ( v9 )
  {
    *((_DWORD *)v9 + 4) = 0;
    *((_DWORD *)v9 + 2) = 0;
    *((_DWORD *)v9 + 3) = 0;
    *((_DWORD *)v9 + 1) = &NiTList<DamageInfo__>::_vftable_;
    pkSeq = v9;
  }
  else
  {
    pkSeq = 0;
  }
  *(_WORD *)pkSeq = *(_WORD *)pvData;
  i = 0;
  if ( *((_BYTE *)pvData + 2) > 0u )
  {
    v10 = (char *)pvData + 13;
    do
    {
      v11 = *(_DWORD *)(v10 + 2);
      iHpChangea = v11;
      if ( v11 < 0 )
      {
        v11 = 0;
        iHpChangea = 0;
      }
      if ( v11 & 0xFFFF0000 )
        iHpChangea = (unsigned __int16)v11;
      v12 = *v10;
      v13 = (unsigned int *)(v10 + 6);
      v14 = iHpChangea | (*(_DWORD *)(v10 + 6) != 0 ? 0 : -2147483648) | (((v12 & 0x20) != 32) - 1) & 0x8000000 | (((v12 & 0x10) != 16) - 1) & 0x10000000 | ((v12 & 0x40 | 16 * (v12 & 8 | 16 * (~*v10 & 1 | 2 * (*v10 & 4 | 4 * (*v10 & 2))) | 2)) << 18);
      if ( GameFrameWork::AdjustRestHP(thisa, *((_WORD *)v10 - 1), (unsigned int *)(v10 + 6)) )
      {
        if ( !bDecreaseCharged && *v10 & 0x80 && Inventory::GetEquipedWeaponAcc(&g_kInventory) )
        {
          Inventory::DecreaeWeaponAccCharged(&g_kInventory);
          bDecreaseCharged = 1;
        }
        if ( !bShieldCosDecreaseCharged && v10[1] & 2 && Inventory::GetEquipedShieldAcc(&g_kInventory) )
        {
          Inventory::DecreaeShieldAccCharged(&g_kInventory);
          bShieldCosDecreaseCharged = 1;
        }
        if ( !*v13 )
        {
          v15 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v10 - 1));
          if ( v15 )
            v15->m_bWillDead = 1;
        }
        bDisPlay = 1;
        if ( !strcmp((const char *)(pkInfo + 2), "Revival01") )
          bDisPlay = 0;
        DamageInfoSet::AddDamage(
          (DamageInfoSet *)((char *)pkSeq + 4),
          v14,
          *((_WORD *)v10 - 1),
          *((_WORD *)v10 + 5),
          *v13,
          bDisPlay,
          0,
          -1);
      }
      v10 += 14;
      ++i;
    }
    while ( i < *((_BYTE *)pvData + 2) );
  }
  AttackSequenceManager::AddSkillSeq(&g_pkMainChar->baseclass_54, (SkillSequence *)pkSeq);
  result = iRevBytes;
  thisa->m_kSkillCasting.eState = 0;
  return result;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004BD6A0) --------------------------------------------------------
void __thiscall GameFrameWork::SendKeyRemappingReq(GameFrameWork *this, std::list<int,std::allocator<int> > *lstChanged)
{
  unsigned int v2; // esi@1
  GameFrameWork *v3; // edi@1
  KeyRemappingWin *v4; // esi@2
  int v5; // edi@3
  int v6; // eax@3
  char *v7; // ecx@4
  char DummyMem[1024]; // [sp+Ch] [bp-404h]@2
  unsigned int v9; // [sp+40Ch] [bp-4h]@1
  int v10; // [sp+410h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = lstChanged->baseclass_0.baseclass_0._Mysize;
  v3 = this;
  if ( v2 )
  {
    memset(&DummyMem[1], 0, 0x3FFu);
    *(_WORD *)DummyMem = v2;
    v4 = v3->m_pkKeyRemappingWin;
    if ( v4 )
    {
      v5 = *(_DWORD *)&lstChanged->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v6 = **(_DWORD **)&lstChanged->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v6 != *(_DWORD *)&lstChanged->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
      {
        v7 = &DummyMem[5];
        do
        {
          *(_WORD *)(v7 - 3) = *(_WORD *)(v6 + 8);
          *v7 = v4->m_keyMapping[*(_DWORD *)(v6 + 8)].keyValue;
          *(v7 - 1) = v4->m_keyMapping[*(_DWORD *)(v6 + 8)].modifier;
          v6 = *(_DWORD *)v6;
          v7 += 4;
        }
        while ( v6 != v5 );
      }
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Cu, 0x39u, DummyMem, 4 * *(unsigned __int16 *)DummyMem + 2);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004BD770) --------------------------------------------------------
void __thiscall GameFrameWork::AttackedMsg::UpdateAttackedMsg(GameFrameWork::AttackedMsg *this)
{
  GameFrameWork::AttackedMsg *v1; // esi@1
  int v2; // eax@1
  int v3; // ecx@1
  int v4; // edi@3

  v1 = this;
  v2 = *(_DWORD *)&this->m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = **(_DWORD **)&this->m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    do
    {
      if ( Timer::ms_fCurTime - *(float *)(v3 + 12) > 30.0 )
      {
        v4 = *(_DWORD *)v3;
        if ( v3 != *(_DWORD *)&v1->m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
        {
          **(_DWORD **)(v3 + 4) = v4;
          *(_DWORD *)(*(_DWORD *)v3 + 4) = *(_DWORD *)(v3 + 4);
          operator delete((void *)v3);
          --v1->m_kAttackedList.baseclass_0.baseclass_0._Mysize;
        }
        v3 = v4;
      }
      v3 = *(_DWORD *)v3;
    }
    while ( v3 != *(_DWORD *)&v1->m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BD7C0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_POLYMORPH_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@1
  Char *v4; // ebx@1
  std::_Container_proxy *v5; // edi@1
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v7; // eax@10
  std::_Container_proxy **v8; // ecx@11
  unsigned int v9; // esi@13
  std::_Container_base12 *v10; // edx@17
  unsigned int v11; // ecx@19
  int v12; // eax@19
  std::_Container_base12 *v13; // ecx@23
  unsigned int v14; // eax@25
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v15; // eax@28
  char v16; // [sp+Ch] [bp-24h]@28
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > result; // [sp+18h] [bp-18h]@10
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > itor; // [sp+24h] [bp-Ch]@10

  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  v5 = 0;
  if ( v3 )
  {
    if ( -1 == *((_WORD *)pvData + 1) )
    {
      Char::EnablePolymorph(v3, 0);
      if ( *((_DWORD *)pvData + 1) == 812 )
        Char::UnMetamorphosis(v4);
      else
        Char::Shape_UnMetamorphosis(v4, 0);
      if ( v4->m_kCharShape.m_bAutoPickItem )
        CharShape::SetMiniMonEffect(&v4->m_kCharShape, 1);
      if ( v4->m_kCharShape.m_bAutoUseItem )
      {
        CharShape::SetMinimonAutoUseEff(&v4->m_kCharShape, 1);
        return iRevBytes;
      }
    }
    else
    {
      itor.baseclass_0.baseclass_0._Myproxy = 0;
      itor.baseclass_0.baseclass_0._Mynextiter = 0;
      v7 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(&g_kCharMgr.m_kLoadDataList, &result);
      if ( v7->baseclass_0.baseclass_0._Myproxy )
      {
        v8 = (std::_Container_proxy **)v7->baseclass_0.baseclass_0._Myproxy->_Mycont;
        if ( v8 )
        {
          v5 = *v8;
          itor.baseclass_0.baseclass_0._Myproxy = *v8;
        }
      }
      itor.baseclass_0._Myoff = v7->baseclass_0._Myoff;
      v9 = itor.baseclass_0._Myoff;
      if ( itor.baseclass_0._Myoff != std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(
                                        &g_kCharMgr.m_kLoadDataList,
                                        &result)->baseclass_0._Myoff )
      {
        while ( 1 )
        {
          if ( v5 )
            v10 = v5->_Mycont;
          else
            v10 = 0;
          v11 = (unsigned int)v10[2]._Myproxy;
          v12 = v9;
          if ( v11 <= v9 )
            v12 = v9 - v11;
          if ( (Char *)(&v10[1]._Myproxy->_Mycont)[v12][60]._Myproxy == v4 )
          {
            if ( v5 )
              v13 = v5->_Mycont;
            else
              v13 = 0;
            v14 = (unsigned int)v13[2]._Myproxy;
            if ( v14 <= v9 )
              v9 -= v14;
            HIWORD((&v13[1]._Myproxy->_Mycont)[v9][20]._Myproxy) = *((_WORD *)pvData + 1);
          }
          std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::operator__(
            &itor,
            (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v16,
            0);
          v15 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(
                  &g_kCharMgr.m_kLoadDataList,
                  &result);
          v9 = itor.baseclass_0._Myoff;
          if ( itor.baseclass_0._Myoff == v15->baseclass_0._Myoff )
            break;
          v5 = itor.baseclass_0.baseclass_0._Myproxy;
        }
      }
      Char::EnablePolymorph(v4, 1);
      if ( *((_DWORD *)pvData + 1) == 812 )
        Char::Metamorphosis(v4, *((_WORD *)pvData + 1));
      else
        Char::ImmediatelyMetamorphosis(v4, *((_WORD *)pvData + 1));
      ((void (__thiscall *)(Char *, signed int))v4->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(v4, 1);
      if ( MainChar::GetMetamorphosisType((MainChar *)g_pkMainChar) == 17
        && (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] == v4 )
        MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
    }
  }
  return iRevBytes;
}

//----- (004BD970) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HIT_OBJ_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@1
  int v4; // edi@1
  void *v5; // eax@4
  __int16 v6; // dx@7

  CharMgr::GetChar(&g_kCharMgr, this->m_kSkillCasting.kTargetHandle);
  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v4 = *(_WORD *)pvData;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                        + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          *(_WORD *)pvData)
    && (unsigned __int16)v4 <= *(_WORD *)(v3 + 200)
    && *(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * v4) )
  {
    v5 = operator new(0x18u);
    if ( v5 )
    {
      *((_DWORD *)v5 + 4) = 0;
      *((_DWORD *)v5 + 2) = 0;
      *((_DWORD *)v5 + 3) = 0;
      *((_DWORD *)v5 + 1) = &NiTList<DamageInfo__>::_vftable_;
    }
    else
    {
      v5 = 0;
    }
    v6 = *(_WORD *)pvData;
    *((_WORD *)v5 + 10) = *((_WORD *)pvData + 2);
    *(_WORD *)v5 = v6;
    AttackSequenceManager::AddSkillSeq(&g_pkMainChar->baseclass_54, (SkillSequence *)v5);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004BDA10) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_BASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@1
  void *v4; // edi@2
  char v5; // al@4
  __int16 v6; // cx@10
  unsigned int v7; // edx@6
  Char *v8; // eax@11

  v3 = operator new(0x28u);
  if ( v3 )
  {
    *((_DWORD *)v3 + 7) = 0;
    *((_DWORD *)v3 + 5) = 0;
    *((_DWORD *)v3 + 6) = 0;
    *((_DWORD *)v3 + 4) = &NiTList<DamageInfo__>::_vftable_;
    *((_WORD *)v3 + 6) = 0;
    *((_BYTE *)v3 + 14) = 0;
    *((_DWORD *)v3 + 8) = -1;
    *((_BYTE *)v3 + 36) = 0;
    *((_WORD *)v3 + 19) = -1;
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  *(_BYTE *)v4 = Char::GetAttackActionCode(g_pkMainChar, *((_BYTE *)pvData + 4) & 0xF);
  v5 = Char::GetClass(g_pkMainChar);
  if ( CharClass::IsKindOf(v5, 11) )
    *(_BYTE *)v4 = 1;
  *((float *)v4 + 2) = (double)*(_WORD *)((char *)pvData + 9) / 1000.0;
  *((float *)v4 + 1) = Timer::ms_fCurTime;
  v7 = (unsigned int)*((_WORD *)pvData + 1) >> 1;
  if ( (v7 & 0x80000000u) != 0 )
    v7 = 0;
  if ( v7 & 0xFFFF0000 )
    v7 = (unsigned __int16)v7;
  v6 = *((_WORD *)pvData + 1);
  DamageInfoSet::AddDamage(
    (DamageInfoSet *)v4 + 1,
    v7 | (*(_DWORD *)((char *)pvData + 5) != 0 ? 0 : -2147483648) | ((((v6 & 1) << 10) | *((_BYTE *)pvData + 4) & 0x10) << 20),
    *(_WORD *)pvData,
    *(_WORD *)((char *)pvData + 11),
    *(_DWORD *)((char *)pvData + 5),
    1,
    0,
    -1);
  if ( !*(_DWORD *)((char *)pvData + 5) )
  {
    v8 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
    if ( v8 )
      v8->m_bWillDead = 1;
  }
  AttackSequenceManager::AddAttSeq(&g_pkMainChar->baseclass_54, (AttackSequence *)v4);
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BDB40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_BASH_MISS_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@1
  void *v4; // esi@2

  v3 = operator new(0x28u);
  if ( v3 )
  {
    *((_DWORD *)v3 + 7) = 0;
    *((_DWORD *)v3 + 5) = 0;
    *((_DWORD *)v3 + 6) = 0;
    *((_DWORD *)v3 + 4) = &NiTList<DamageInfo__>::_vftable_;
    *((_WORD *)v3 + 6) = 0;
    *((_BYTE *)v3 + 14) = 0;
    *((_DWORD *)v3 + 8) = -1;
    *((_BYTE *)v3 + 36) = 0;
    *((_WORD *)v3 + 19) = -1;
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  *(_BYTE *)v4 = Char::GetAttackActionCode(g_pkMainChar, *((_BYTE *)pvData + 2) & 0xF);
  *((float *)v4 + 2) = (double)*(_WORD *)((char *)pvData + 3) / 1000.0;
  *((float *)v4 + 1) = Timer::ms_fCurTime;
  DamageInfoSet::AddDamage(
    (DamageInfoSet *)v4 + 1,
    (*((_BYTE *)pvData + 2) & 0x20 | 32 * (*((_BYTE *)pvData + 2) & 0x10)) << 20,
    *(_WORD *)pvData,
    0xFFFE0000u,
    0,
    1,
    0,
    -1);
  AttackSequenceManager::AddAttSeq(&g_pkMainChar->baseclass_54, (AttackSequence *)v4);
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BDC00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONEBASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  Char *v4; // esi@1
  void *v5; // ebx@1
  void *v6; // eax@2
  unsigned int v7; // esi@4
  bool v8; // al@4
  Char *v9; // eax@4
  Char *pkAttacker; // [sp+1Ch] [bp+Ch]@1

  v3 = pvData;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v5 = 0;
  pkAttacker = v4;
  if ( v4 )
  {
    v6 = operator new(0x28u);
    if ( v6 )
    {
      *((_DWORD *)v6 + 7) = 0;
      *((_DWORD *)v6 + 5) = 0;
      *((_DWORD *)v6 + 6) = 0;
      *((_DWORD *)v6 + 4) = &NiTList<DamageInfo__>::_vftable_;
      *((_WORD *)v6 + 6) = 0;
      *((_BYTE *)v6 + 14) = 0;
      *((_BYTE *)v6 + 36) = 0;
      *((_DWORD *)v6 + 8) = -1;
      *((_WORD *)v6 + 19) = -1;
      v5 = v6;
    }
    *(_BYTE *)v5 = Char::GetAttackActionCode(v4, *((_BYTE *)v3 + 4));
    *((float *)v5 + 2) = (double)*(_WORD *)((char *)v3 + 9) / 1000.0;
    *((float *)v5 + 1) = Timer::ms_fCurTime;
    v7 = *(_DWORD *)((char *)v3 + 5) != 0 ? 0 : -2147483648;
    v8 = Char::IsRangeAttChar(pkAttacker);
    DamageInfoSet::AddDamage(
      (DamageInfoSet *)v5 + 1,
      v7,
      *((_WORD *)v3 + 1),
      *(_WORD *)((char *)v3 + 11),
      *(_DWORD *)((char *)v3 + 5),
      0,
      v8,
      -1);
    v9 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v3 + 1));
    if ( v9 && !*(_DWORD *)((char *)v3 + 5) )
      v9->m_bWillDead = 1;
    AttackSequenceManager::AddAttSeq(&pkAttacker->baseclass_54, (AttackSequence *)v5);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BDD00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_BASH_MISSED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // ebx@1
  void *v4; // edi@1
  void *v5; // eax@2
  unsigned int v6; // esi@4
  bool v7; // al@4
  int pvDataa; // [sp+18h] [bp+Ch]@4

  WaitingForLogoutWin::Cancel(this->m_pkWaitingForLogoutWin);
  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = 0;
  if ( v3 )
  {
    v5 = operator new(0x28u);
    if ( v5 )
    {
      *((_DWORD *)v5 + 7) = 0;
      *((_DWORD *)v5 + 5) = 0;
      *((_DWORD *)v5 + 6) = 0;
      *((_DWORD *)v5 + 4) = &NiTList<DamageInfo__>::_vftable_;
      *((_WORD *)v5 + 6) = 0;
      *((_BYTE *)v5 + 14) = 0;
      *((_DWORD *)v5 + 8) = -1;
      *((_BYTE *)v5 + 36) = 0;
      *((_WORD *)v5 + 19) = -1;
      v4 = v5;
    }
    *(_BYTE *)v4 = *((_BYTE *)pvData + 2) & 0xF;
    *((float *)v4 + 2) = (double)*(_WORD *)((char *)pvData + 3) / 1000.0;
    *((float *)v4 + 1) = Timer::ms_fCurTime;
    v6 = (*((_BYTE *)pvData + 2) & 0x40 | 4 * (*((_BYTE *)pvData + 2) & 0x20 | 32 * (*((_BYTE *)pvData + 2) & 0x10))) << 18;
    pvDataa = g_pkMainChar->m_kHandle;
    v7 = Char::IsRangeAttChar(v3);
    DamageInfoSet::AddDamage((DamageInfoSet *)v4 + 1, v6, pvDataa, 0xFFFE0000u, 0, 1, v7, -1);
    AttackSequenceManager::AddAttSeq(&v3->baseclass_54, (AttackSequence *)v4);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BDE00) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONEBASH_MISS_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // eax@2
  void *v4; // esi@3
  Char *pkAttacker; // [sp+8h] [bp-4h]@1

  pkAttacker = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( pkAttacker )
  {
    v3 = operator new(0x28u);
    if ( v3 )
    {
      *((_DWORD *)v3 + 7) = 0;
      *((_DWORD *)v3 + 5) = 0;
      *((_DWORD *)v3 + 6) = 0;
      *((_DWORD *)v3 + 4) = &NiTList<DamageInfo__>::_vftable_;
      *((_WORD *)v3 + 6) = 0;
      *((_BYTE *)v3 + 14) = 0;
      *((_DWORD *)v3 + 8) = -1;
      *((_BYTE *)v3 + 36) = 0;
      *((_WORD *)v3 + 19) = -1;
      v4 = v3;
    }
    else
    {
      v4 = 0;
    }
    *(_BYTE *)v4 = *((_BYTE *)pvData + 4);
    *((float *)v4 + 2) = (double)*(_WORD *)((char *)pvData + 5) / 1000.0;
    *((float *)v4 + 1) = Timer::ms_fCurTime;
    DamageInfoSet::AddDamage((DamageInfoSet *)v4 + 1, 0x20000000u, *((_WORD *)pvData + 1), 0xFFFE0000u, 0, 0, 0, -1);
    AttackSequenceManager::AddAttSeq(&pkAttacker->baseclass_54, (AttackSequence *)v4);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BDEC0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SWING_START_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  Char *v3; // eax@3
  Char *v4; // ebx@3
  void *v5; // edi@3
  AttackSequence *v6; // eax@5
  AttackSequence *v7; // edi@5
  __int16 v8; // ST18_2@7
  bool v9; // al@7
  void *v11; // eax@9
  char v12; // al@11
  __int16 v13; // ST18_2@13
  bool v14; // al@13
  GameFrameWork *thisa; // [sp+Ch] [bp-4h]@1

  thisa = this;
  if ( g_pkMainChar->m_kHandle == *((_WORD *)pvData + 1) )
    WaitingForLogoutWin::Cancel(this->m_pkWaitingForLogoutWin);
  v3 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v4 = v3;
  v5 = 0;
  if ( v3 )
  {
    if ( v3 == g_pkMainChar )
    {
      v6 = AttackSequenceManager::GetInvalidSeq(&v3->baseclass_54);
      v7 = v6;
      if ( v6 && v6->m_SeqNum == -1 )
      {
        v6->m_SeqNum = *((_BYTE *)pvData + 8);
        v6->fCoolTime = (double)*(_WORD *)((char *)pvData + 5) / 1000.0;
        v6->fRecvTime = Timer::ms_fCurTime;
        v8 = *((_BYTE *)pvData + 7);
        v9 = Char::IsRangeAttChar(v4);
        DamageInfoSet::AddDamage(&v7->kDamageInfoSet, 0x20000000u, *((_WORD *)pvData + 1), 0xFFFE0000u, 0, 0, v9, v8);
        return iRevBytes;
      }
      v5 = 0;
    }
    v11 = operator new(0x28u);
    if ( v11 != v5 )
    {
      *((_DWORD *)v11 + 7) = v5;
      *((_DWORD *)v11 + 5) = v5;
      *((_DWORD *)v11 + 6) = v5;
      *((_DWORD *)v11 + 4) = &NiTList<DamageInfo__>::_vftable_;
      *((_WORD *)v11 + 6) = 0;
      *((_BYTE *)v11 + 14) = 0;
      *((_DWORD *)v11 + 8) = -1;
      *((_BYTE *)v11 + 36) = 0;
      *((_WORD *)v11 + 19) = -1;
      v5 = v11;
    }
    *(_BYTE *)v5 = Char::GetAttackActionCode(v4, *((_BYTE *)pvData + 4));
    v12 = Char::GetClass(v4);
    if ( CharClass::IsKindOf(v12, 11) )
      *(_BYTE *)v5 = 1;
    *((float *)v5 + 2) = (double)*(_WORD *)((char *)pvData + 5) / 1000.0;
    *((float *)v5 + 1) = Timer::ms_fCurTime;
    *((_WORD *)v5 + 19) = *((_BYTE *)pvData + 8);
    v13 = *((_BYTE *)pvData + 7);
    v14 = Char::IsRangeAttChar(v4);
    DamageInfoSet::AddDamage((DamageInfoSet *)v5 + 1, 0x20000000u, *((_WORD *)pvData + 1), 0xFFFE0000u, 0, 0, v14, v13);
    AttackSequenceManager::AddAttSeq(&v4->baseclass_54, (AttackSequence *)v5);
    if ( v4 == g_pkMainChar )
      GameFrameWork::OpenPlayGuideWin(thisa, BIL_BATTLE_2);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BE060) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_OUTSIDE_TITLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  int v4; // ebx@2
  int v5; // ecx@3
  char v6; // dl@4
  CharScreenBoardBase *v7; // eax@5
  CharScreenBoardBase *v8; // edi@5
  CharScreenBoardBaseVtbl *v9; // esi@6
  ScreenBoardTexture *v10; // eax@6
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > result; // [sp+8h] [bp-4h]@1

  v3 = pvData;
  pvData = (void *)*(_WORD *)pvData;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    &g_kMiniHouseMgr,
    &result,
    (const unsigned __int16 *)&pvData);
  if ( result != stru_B67CF0 )
  {
    v4 = *(_DWORD *)(*(_DWORD *)&result + 16);
    if ( v4 )
    {
      *(_DWORD *)(v4 + 40) = 0;
      *(_DWORD *)(v4 + 44) = 0;
      *(_DWORD *)(v4 + 48) = 0;
      *(_DWORD *)(v4 + 52) = 0;
      *(_DWORD *)(v4 + 56) = 0;
      v5 = (int)((char *)v3 + 2);
      do
      {
        v6 = *(_BYTE *)v5;
        *(_BYTE *)(v4 + 40 - (_DWORD)((char *)v3 + 2) + v5) = *(_BYTE *)v5;
        ++v5;
      }
      while ( v6 );
      v7 = ScreenBDMgr::GetCharBD(&g_kScrnBDMgr, *(_WORD *)v4);
      v8 = v7;
      if ( v7 )
      {
        v9 = v7->vfptr;
        v10 = ScreenBDMgr::GetScreenNameData(&g_kScrnBDMgr);
        v9->Init(v8, *(_WORD *)v4, v10);
      }
    }
  }
  return iRevBytes;
}

//----- (004BE100) --------------------------------------------------------
void __thiscall GameFrameWork::AddAttacked(GameFrameWork *this, unsigned __int16 kHandle)
{
  char *v2; // esi@1
  int v3; // ecx@1
  int v4; // eax@1
  int v5; // edi@4
  std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *v6; // ST04_4@4
  std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *v7; // eax@4
  int v8; // ecx@4
  Char *v9; // eax@6
  char *v10; // eax@7
  char *v11; // eax@7
  GameFrameWork::AttackedMsg::AttackedFrom kAttacked; // [sp+8h] [bp-Ch]@4
  GameFrameWork *v13; // [sp+10h] [bp-4h]@1

  v2 = (char *)&this->m_kAttackedMsg;
  v13 = this;
  v3 = *(_DWORD *)&this->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *(_DWORD *)v3;
  if ( *(_DWORD *)v3 == v3 )
  {
LABEL_4:
    v5 = v3;
    kAttacked.m_fAttackedTime = Timer::ms_fCurTime;
    v6 = *(std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node **)(v3 + 4);
    kAttacked.m_kAttacker = kHandle;
    v7 = std::_List_val<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::_Buynode(
           (std::_List_val<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> > *)v2,
           (std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *)v3,
           v6,
           &kAttacked);
    v8 = *((_DWORD *)v2 + 1);
    if ( (unsigned int)(536870910 - v8) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v2 + 1) = v8 + 1;
    *(_DWORD *)(v5 + 4) = v7;
    v7->_Prev->_Next = v7;
    v9 = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( v9 )
    {
      ((void (__thiscall *)(Char *))v9->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v9);
      v10 = TextData::Get(0xE3E43B35u);
      v11 = fs(v10);
      GameFrameWork::AddBattleMsg(v13, v11);
    }
  }
  else
  {
    while ( *(_WORD *)(v4 + 8) != kHandle )
    {
      v4 = *(_DWORD *)v4;
      if ( v4 == v3 )
        goto LABEL_4;
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BE1C0) --------------------------------------------------------
bool __thiscall GameFrameWork::ItemNameIsCorrect(GameFrameWork *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem, char *pcChatMsg)
{
  char *v3; // eax@1
  char *v4; // edx@1
  char v5; // cl@2
  int i; // esi@5
  unsigned int v7; // eax@6
  int v8; // ebx@6
  void **v9; // eax@8
  int v10; // esi@9
  int v11; // edi@9
  int v12; // eax@10
  int v13; // edx@13
  int v14; // esi@17
  int v15; // esi@18
  int v16; // edi@18
  int v17; // eax@19
  int v18; // ecx@22
  int v19; // esi@27
  int v20; // edi@27
  int v21; // eax@28
  int v22; // edx@31
  int v23; // esi@36
  int v24; // edi@36
  int v25; // eax@37
  int v26; // ecx@40
  int v27; // esi@45
  int v28; // edi@45
  int v29; // eax@46
  int v30; // edx@49
  int v31; // esi@54
  int v32; // edi@54
  int v33; // eax@55
  int v34; // ecx@58
  char v35; // kr00_1@70
  char v36; // kr01_1@71
  int v37; // eax@72
  void *v38; // ecx@74
  void *v39; // eax@74
  void *v40; // esi@75
  void *v42; // eax@78
  void *v43; // ecx@78
  void *v44; // esi@79
  unsigned int v45; // [sp-10h] [bp-1ACh]@1
  GameFrameWork *thisa; // [sp+4h] [bp-198h]@1
  int iter; // [sp+8h] [bp-194h]@3
  int itera; // [sp+8h] [bp-194h]@8
  char buff[256]; // [sp+Ch] [bp-190h]@9
  char tmpStr[128]; // [sp+10Ch] [bp-90h]@1
  unsigned int v51; // [sp+18Ch] [bp-10h]@1
  int v52; // [sp+198h] [bp-4h]@1
  int v53; // [sp+19Ch] [bp+0h]@1

  v51 = (unsigned int)&v53 ^ __security_cookie;
  v45 = (unsigned int)&v53 ^ __security_cookie;
  thisa = this;
  v52 = 0;
  memset(tmpStr, 0, 0x80u);
  v3 = pcChatMsg;
  v4 = pcChatMsg + 1;
  do
    v5 = *v3++;
  while ( v5 );
  iter = v3 - v4;
  if ( (signed int)(v3 - v4) > 127 )
    iter = 127;
  for ( i = 0; ; i = v8 )
  {
    v7 = (IsDBCSLeadByte(tmpStr[i]) != 0) + 1;
    v8 = v7 + i;
    if ( (signed int)(v7 + i) > iter )
      break;
    memcpy(&tmpStr[i], &pcChatMsg[i], v7);
  }
  v9 = *(void ***)&listLinkItem;
  tmpStr[i] = 0;
  itera = **(_DWORD **)&listLinkItem;
  if ( **(_DWORD **)&listLinkItem == *(_DWORD *)&listLinkItem )
  {
LABEL_74:
    v38 = *v9;
    *v9 = v9;
    *(_DWORD *)(*(_DWORD *)&listLinkItem + 4) = *(_DWORD *)&listLinkItem;
    v39 = *(void **)&listLinkItem;
    if ( v38 != *(void **)&listLinkItem )
    {
      do
      {
        v40 = *(void **)v38;
        operator delete(v38);
        v39 = *(void **)&listLinkItem;
        v38 = v40;
      }
      while ( v40 != *(void **)&listLinkItem );
    }
    operator delete(v39);
    return 1;
  }
  while ( 1 )
  {
    buff[0] = 0;
    memset(&buff[1], 0, 0xFFu);
    v10 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v11 = *(_WORD *)(itera + 8);
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, unsigned int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                           + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            *(_WORD *)(itera + 8),
                            v45) )
    {
      if ( (unsigned __int16)v11 <= *(_WORD *)(v10 + 200) )
      {
        v13 = *(_DWORD *)(v10 + 196);
        v12 = *(_DWORD *)(v13 + 4 * v11) ? *(_DWORD *)(v13 + 4 * v11) : 0;
      }
      else
      {
        v12 = 0;
      }
    }
    else
    {
      v12 = 0;
    }
    if ( *(_DWORD *)(v12 + 110) == 10 )
    {
      v14 = *(_BYTE *)(itera + 10);
    }
    else
    {
      v15 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v16 = *(_WORD *)(itera + 8);
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(itera + 8)) )
      {
        if ( (unsigned __int16)v16 <= *(_WORD *)(v15 + 200) )
        {
          v18 = *(_DWORD *)(v15 + 196);
          v17 = *(_DWORD *)(v18 + 4 * v16) ? *(_DWORD *)(v18 + 4 * v16) : 0;
        }
        else
        {
          v17 = 0;
        }
      }
      else
      {
        v17 = 0;
      }
      if ( *(_DWORD *)(v17 + 110) == 12 )
      {
        v14 = *(_BYTE *)(itera + 10);
      }
      else
      {
        v19 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        v20 = *(_WORD *)(itera + 8);
        if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                 + 16))(
                                ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                *(_WORD *)(itera + 8)) )
        {
          if ( (unsigned __int16)v20 <= *(_WORD *)(v19 + 200) )
          {
            v22 = *(_DWORD *)(v19 + 196);
            v21 = *(_DWORD *)(v22 + 4 * v20) ? *(_DWORD *)(v22 + 4 * v20) : 0;
          }
          else
          {
            v21 = 0;
          }
        }
        else
        {
          v21 = 0;
        }
        if ( *(_DWORD *)(v21 + 110) == 7 )
        {
          v14 = *(_BYTE *)(itera + 10);
        }
        else
        {
          v23 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
          v24 = *(_WORD *)(itera + 8);
          if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                      + 16))(
                                  ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                  *(_WORD *)(itera + 8)) )
          {
            if ( (unsigned __int16)v24 <= *(_WORD *)(v23 + 200) )
            {
              v26 = *(_DWORD *)(v23 + 196);
              v25 = *(_DWORD *)(v26 + 4 * v24) ? *(_DWORD *)(v26 + 4 * v24) : 0;
            }
            else
            {
              v25 = 0;
            }
          }
          else
          {
            v25 = 0;
          }
          if ( *(_DWORD *)(v25 + 110) == 21 )
          {
            v14 = *(_BYTE *)(itera + 10);
          }
          else
          {
            v27 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
            v28 = *(_WORD *)(itera + 8);
            if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                        + 16))(
                                    ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                    *(_WORD *)(itera + 8)) )
            {
              if ( (unsigned __int16)v28 <= *(_WORD *)(v27 + 200) )
              {
                v30 = *(_DWORD *)(v27 + 196);
                v29 = *(_DWORD *)(v30 + 4 * v28) ? *(_DWORD *)(v30 + 4 * v28) : 0;
              }
              else
              {
                v29 = 0;
              }
            }
            else
            {
              v29 = 0;
            }
            if ( *(_DWORD *)(v29 + 110) == 1 )
            {
              v14 = *(_BYTE *)(itera + 10);
            }
            else
            {
              v31 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
              v32 = *(_WORD *)(itera + 8);
              if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                          + 16))(
                                      ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                      *(_WORD *)(itera + 8)) )
              {
                if ( (unsigned __int16)v32 <= *(_WORD *)(v31 + 200) )
                {
                  v34 = *(_DWORD *)(v31 + 196);
                  v33 = *(_DWORD *)(v34 + 4 * v32) ? *(_DWORD *)(v34 + 4 * v32) : 0;
                }
                else
                {
                  v33 = 0;
                }
              }
              else
              {
                v33 = 0;
              }
              if ( *(_DWORD *)(v33 + 110) == 19 )
              {
                v14 = *(_BYTE *)(itera + 10);
              }
              else
              {
                if ( IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*(_WORD *)(itera + 8))->Equip != 6
                  && IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*(_WORD *)(itera + 8))->Equip != 23
                  && IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*(_WORD *)(itera + 8))->Equip != 15
                  && IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*(_WORD *)(itera + 8))->Equip != 16
                  && IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*(_WORD *)(itera + 8))->Equip != 14 )
                  goto LABEL_71;
                v14 = *(_BYTE *)(itera + 18);
              }
            }
          }
        }
      }
    }
    if ( v14 )
    {
      v45 = *(_WORD *)(itera + 8);
      v35 = (*(int (__thiscall **)(int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable);
      sprintf(buff, "<\t%s [+%d]\t>");
      goto LABEL_72;
    }
LABEL_71:
    v45 = *(_WORD *)(itera + 8);
    v36 = (*(int (__thiscall **)(int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable);
    sprintf(buff, "<\t%s\t>");
LABEL_72:
    strstr(tmpStr, buff);
    if ( !v37 )
      break;
    GameFrameWork::RemoveItemFromString(thisa, tmpStr, buff);
    v9 = *(void ***)&listLinkItem;
    itera = *(_DWORD *)itera;
    if ( itera == *(_DWORD *)&listLinkItem )
      goto LABEL_74;
  }
  v42 = (void *)**(_DWORD **)&listLinkItem;
  **(_DWORD **)&listLinkItem = *(_DWORD *)&listLinkItem;
  *(_DWORD *)(*(_DWORD *)&listLinkItem + 4) = *(_DWORD *)&listLinkItem;
  v43 = *(void **)&listLinkItem;
  if ( v42 != *(void **)&listLinkItem )
  {
    do
    {
      v44 = *(void **)v42;
      operator delete(v42);
      v43 = *(void **)&listLinkItem;
      v42 = v44;
    }
    while ( v44 != *(void **)&listLinkItem );
  }
  operator delete(v43);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004BE6B0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_BRIEFINFODELETE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // edi@1
  GameFrameWork *v4; // ebx@1
  Char *v5; // eax@1
  Char *v6; // esi@1
  Effect *v7; // eax@9
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v8; // eax@12
  Mover *v9; // ecx@14
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> result; // [sp+Ch] [bp-8h]@12

  v3 = pvData;
  v4 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v6 = v5;
  if ( nowState )
  {
    if ( !v5 )
      goto LABEL_16;
    MiniHouseIndoor::DelCharColiNode(&g_kWorld.m_MiniHouseIndoorMode, v5->m_spScene.m_pObject);
  }
  if ( v6 )
  {
    if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[1].Affect)(v6) )
    {
      if ( !Char::IsNPC(v6) )
      {
        if ( !Char::IsResource(v6) )
        {
          if ( Char::IsLinkGate(v6) )
          {
            v7 = EffectMgr::FindAuraEffect(&g_kEffectMgr, *(_WORD *)v3);
            if ( v7 )
              EffectMgr::RemoveEffect(&g_kEffectMgr, v7);
          }
        }
      }
    }
    if ( !v6->m_bIsDoor )
    {
      pvData = (void *)*(_WORD *)v3;
      v8 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
             &stru_AA27D0,
             (unsigned __int16 *)&pvData);
      std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
        (std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *)&stru_AA27D0,
        &result,
        v8,
        0);
    }
    if ( v6->m_byMode == 6 )
    {
      v9 = v6->m_pkMover;
      if ( v9 )
        Mover::SetMoverEffect(v9, 0, 0, 0);
    }
  }
LABEL_16:
  MiniMapWin::RemoveNPC(v4->m_pkMiniMapWin, *(_WORD *)v3);
  DecalMgr::RemoveCharDecal(&stru_B31F08, *(_WORD *)v3);
  MiniMapWin::RemoveKQTeamMark(v4->m_pkMiniMapWin, *(_WORD *)v3);
  return iRevBytes;
}

//----- (004BE7D0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_BASH_HITTED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  Char *v4; // edi@1
  void *v5; // ebx@1
  void *v6; // eax@2
  __int16 v7; // cx@4
  unsigned int v8; // edi@4
  void *v9; // eax@10
  GameFrameWork *thisa; // [sp+4h] [bp-10h]@1
  Char *pkAttacker; // [sp+20h] [bp+Ch]@1

  thisa = this;
  WaitingForLogoutWin::Cancel(this->m_pkWaitingForLogoutWin);
  v3 = pvData;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v5 = 0;
  pkAttacker = v4;
  if ( v4 )
  {
    v6 = operator new(0x28u);
    if ( v6 )
    {
      *((_DWORD *)v6 + 7) = 0;
      *((_DWORD *)v6 + 5) = 0;
      *((_DWORD *)v6 + 6) = 0;
      *((_DWORD *)v6 + 4) = &NiTList<DamageInfo__>::_vftable_;
      *((_WORD *)v6 + 6) = 0;
      *((_BYTE *)v6 + 14) = 0;
      *((_BYTE *)v6 + 36) = 0;
      *((_DWORD *)v6 + 8) = -1;
      *((_WORD *)v6 + 19) = -1;
      v5 = v6;
    }
    *(_BYTE *)v5 = Char::GetAttackActionCode(v4, *((_BYTE *)v3 + 4) & 0xF);
    *((float *)v5 + 2) = (double)*(_WORD *)((char *)v3 + 9) / 1000.0;
    *((float *)v5 + 1) = Timer::ms_fCurTime;
    v7 = *((_WORD *)v3 + 1);
    v8 = (unsigned int)*((_WORD *)v3 + 1) >> 1;
    if ( (v8 & 0x80000000u) != 0 )
      v8 = 0;
    if ( v8 & 0xFFFF0000 )
      v8 = (unsigned __int16)v8;
    DamageInfoSet::AddDamage(
      (DamageInfoSet *)v5 + 1,
      v8 | (*(_DWORD *)((char *)v3 + 5) != 0 ? 0 : -2147483648) | ((((v7 & 1) << 10) | *((_BYTE *)v3 + 4) & 0x10 | 4) << 20),
      g_pkMainChar->m_kHandle,
      *(_WORD *)((char *)v3 + 11),
      *(_DWORD *)((char *)v3 + 5),
      1,
      0,
      -1);
    if ( *(_DWORD *)((char *)v3 + 5) )
    {
      if ( !(unsigned __int8)((int (*)(void))pkAttacker->baseclass_0.vfptr[1].Affect)() )
        GameFrameWork::AddAttacked(thisa, *(_WORD *)v3);
    }
    else
    {
      g_pkMainChar->m_bWillDead = 1;
      if ( !(unsigned __int8)((int (*)(void))pkAttacker->baseclass_0.vfptr[1].Affect)() )
      {
        v9 = operator new(0x30u);
        if ( v9 )
          CharDeadEvent_InformWhoKilledMe::CharDeadEvent_InformWhoKilledMe(
            (CharDeadEvent_InformWhoKilledMe *)v9,
            &thisa->baseclass_0,
            g_pkMainChar->m_kHandle,
            *(_WORD *)v3);
      }
    }
    AttackSequenceManager::AddAttSeq(&pkAttacker->baseclass_54, (AttackSequence *)v5);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004BE990) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SKILLBASH_HITTED_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // ebx@1
  Char *v4; // eax@1
  int v5; // esi@1
  int v6; // edi@1
  void *v7; // esi@2
  int v8; // eax@5
  char *v9; // eax@10
  void *v10; // eax@13
  void *v11; // eax@16
  char v12; // al@20
  unsigned int *v13; // edi@20
  int v14; // esi@20
  void *v15; // eax@27
  Char *v16; // eax@31
  char *v17; // eax@32
  char *v18; // eax@32
  unsigned __int16 kMainCharTarget; // [sp+0h] [bp-24h]@16
  bool bDisPlay; // [sp+4h] [bp-20h]@20
  Char *pkAttChar; // [sp+8h] [bp-1Ch]@1
  void *pkSeq; // [sp+Ch] [bp-18h]@14
  int pActiveSkill; // [sp+10h] [bp-14h]@2
  const char *pActiveSkilla; // [sp+10h] [bp-14h]@20
  GameFrameWork *pkFrameWork; // [sp+14h] [bp-10h]@1
  void *iHpChange; // [sp+30h] [bp+Ch]@16

  pkFrameWork = this;
  v3 = pvData;
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  v5 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v6 = *((_WORD *)pvData + 1);
  pkAttChar = v4;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          *((_WORD *)pvData + 1)) )
  {
    if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) )
    {
      v8 = *(_DWORD *)(v5 + 196) + 4 * v6;
      if ( *(_DWORD *)v8 )
        pActiveSkill = *(_DWORD *)v8;
      else
        pActiveSkill = 0;
    }
    else
    {
      pActiveSkill = 0;
    }
    v7 = 0;
  }
  else
  {
    v7 = 0;
    pActiveSkill = 0;
  }
  if ( *((_WORD *)pvData + 1) == 4520 )
  {
    v9 = TextData2::Get(0x90A492AEu);
    GameFrameWork::AddBattleMsg(pkFrameWork, v9);
  }
  if ( pkAttChar != v7 && pkAttChar != g_pkMainChar )
  {
    Char::SetReserveSkillSmash(pkAttChar, 1);
    v10 = operator new(0x18u);
    if ( v10 == v7 )
    {
      pkSeq = v7;
    }
    else
    {
      *((_DWORD *)v10 + 4) = v7;
      *((_DWORD *)v10 + 2) = v7;
      *((_DWORD *)v10 + 3) = v7;
      *((_DWORD *)v10 + 1) = &NiTList<DamageInfo__>::_vftable_;
      pkSeq = v10;
    }
    *(_WORD *)pkSeq = *((_WORD *)pvData + 1);
    v11 = *(void **)((char *)pvData + 14);
    kMainCharTarget = g_pkMainChar->m_kHandle;
    iHpChange = v11;
    if ( (signed int)v11 < (signed int)v7 )
    {
      iHpChange = v7;
      v11 = v7;
    }
    if ( (unsigned int)v11 & 0xFFFF0000 )
      iHpChange = (void *)(unsigned __int16)v11;
    v12 = *((_BYTE *)v3 + 12);
    v13 = (unsigned int *)((char *)v3 + 18);
    v14 = (unsigned int)iHpChange | (*(_DWORD *)((char *)v3 + 18) != 0 ? 0 : -2147483648) | (((v12 & 0x20) != 32) - 1) & 0x8000000 | (((v12 & 0x10) != 16) - 1) & 0x10000000 | ((v12 & 0x40 | 16 * (v12 & 8 | 16 * (~*((_BYTE *)v3 + 12) & 1 | 2 * (*((_BYTE *)v3 + 12) & 4 | 4 * (*((_BYTE *)v3 + 12) & 2))) | 3)) << 18);
    GameFrameWork::AdjustRestHP(pkFrameWork, kMainCharTarget, (unsigned int *)((char *)v3 + 18));
    bDisPlay = 1;
    pActiveSkilla = (const char *)(pActiveSkill + 2);
    if ( !strcmp(pActiveSkilla, "Revival01") )
      bDisPlay = 0;
    DamageInfoSet::AddDamage(
      (DamageInfoSet *)((char *)pkSeq + 4),
      v14,
      kMainCharTarget,
      *((_WORD *)v3 + 11),
      *v13,
      bDisPlay,
      0,
      -1);
    if ( *v13 )
    {
      if ( *((_BYTE *)v3 + 12) & 1 && !(unsigned __int8)((int (*)(void))pkAttChar->baseclass_0.vfptr[1].Affect)() )
        GameFrameWork::AddAttacked(pkFrameWork, *(_WORD *)v3);
    }
    else
    {
      if ( *((_BYTE *)v3 + 12) & 1 )
      {
        if ( (signed int)iHpChange > 0 )
        {
          if ( !g_pkMainChar->m_bWillDead )
          {
            if ( !(unsigned __int8)((int (*)(void))pkAttChar->baseclass_0.vfptr[1].Affect)() )
            {
              v15 = operator new(0x30u);
              if ( v15 )
                CharDeadEvent_InformWhoKilledMe::CharDeadEvent_InformWhoKilledMe(
                  (CharDeadEvent_InformWhoKilledMe *)v15,
                  &pkFrameWork->baseclass_0,
                  g_pkMainChar->m_kHandle,
                  *(_WORD *)v3);
            }
          }
        }
      }
      g_pkMainChar->m_bWillDead = 1;
      if ( g_pkMainChar->m_byMode == 3 )
      {
        if ( v14 >= 0 )
        {
          v16 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)v3);
          if ( v16 )
          {
            ((void (__thiscall *)(Char *))v16->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v16);
            v17 = TextData2::Get(0x47A65AA6u);
            v18 = fs(v17);
            GameFrameWork::AddBattleMsg(pkFrameWork, v18);
          }
        }
      }
    }
    if ( strcmp(pActiveSkilla, "Revival01") )
      AttackSequenceManager::AddSkillSeq(&pkAttChar->baseclass_54, (SkillSequence *)pkSeq);
  }
  return iRevBytes;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004BECF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // esi@0
  void *v4; // edi@1
  int v5; // ebx@2
  int v6; // ST1C_4@2
  int v7; // esi@2
  int v8; // eax@4
  void *v9; // esi@4
  int v10; // eax@5
  void *v11; // eax@9
  int v12; // esi@12
  int v13; // ebx@12
  int v14; // eax@16
  char *v15; // esi@20
  unsigned int *v16; // edi@22
  unsigned int v17; // ebx@22
  Char *v18; // eax@28
  GameFrameWork *thisa; // [sp+4h] [bp-18h]@1
  unsigned int i; // [sp+8h] [bp-14h]@19
  Char *pkAttChar; // [sp+Ch] [bp-10h]@1
  bool bDisPlay; // [sp+10h] [bp-Ch]@22
  void *pkSeq; // [sp+14h] [bp-8h]@10
  int pActiveSkill; // [sp+18h] [bp-4h]@13

  v4 = pvData;
  thisa = this;
  pkAttChar = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
  if ( pkAttChar )
  {
    v5 = *((_WORD *)pvData + 1);
    v6 = v3;
    v7 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                                  + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            *((_WORD *)pvData + 1),
                            v6)
      && (unsigned __int16)v5 <= *(_WORD *)(v7 + 200) )
    {
      v8 = *(_DWORD *)(v7 + 196) + 4 * v5;
      v9 = 0;
      if ( *(_DWORD *)v8 )
      {
        v10 = *(_DWORD *)v8;
        if ( v10 )
        {
          if ( *(_DWORD *)(v10 + 259) > 0u )
            Char::SetSkillTargetGroundPoint(pkAttChar, *((_DWORD *)pvData + 1), *((_DWORD *)pvData + 2), 1);
        }
      }
    }
    else
    {
      v9 = 0;
    }
    Char::SetReserveSkillSmash(pkAttChar, 1);
    v11 = operator new(0x18u);
    if ( v11 == v9 )
    {
      pkSeq = v9;
    }
    else
    {
      *((_DWORD *)v11 + 4) = v9;
      *((_DWORD *)v11 + 2) = v9;
      *((_DWORD *)v11 + 3) = v9;
      *((_DWORD *)v11 + 1) = &NiTList<DamageInfo__>::_vftable_;
      pkSeq = v11;
    }
    *(_WORD *)pkSeq = *((_WORD *)pvData + 1);
    v12 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    v13 = *((_WORD *)pvData + 1);
    if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                     + 16))(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable) )
    {
      if ( (unsigned __int16)v13 <= *(_WORD *)(v12 + 200) )
      {
        v14 = *(_DWORD *)(v12 + 196) + 4 * v13;
        if ( *(_DWORD *)v14 )
          pActiveSkill = *(_DWORD *)v14;
        else
          pActiveSkill = 0;
      }
      else
      {
        pActiveSkill = 0;
      }
    }
    else
    {
      pActiveSkill = 0;
    }
    i = 0;
    if ( *((_BYTE *)pvData + 12) )
    {
      v15 = (char *)pvData + 23;
      do
      {
        if ( *((_WORD *)v15 - 5) != g_pkMainChar->m_kHandle )
        {
          v16 = (unsigned int *)(v15 - 8);
          bDisPlay = ((unsigned __int8)*v15 >> 4) & 1;
          v17 = (unsigned int)((char *)loc_7FFFFF + 1) | (*((_DWORD *)v15 - 2) != 0 ? 0 : -2147483648) | (((*v15 & 8) != 8) - 1) & 0x8000000 | (((*v15 & 4) != 4) - 1) & 0x10000000 | (((*v15 & 2) != 2) - 1) & 0x20000000 | ((~*v15 & 1) << 26);
          if ( !strcmp((const char *)(pActiveSkill + 2), "Revival01") )
            bDisPlay = 0;
          if ( GameFrameWork::AdjustRestHP(thisa, *((_WORD *)v15 - 5), (unsigned int *)v15 - 2) )
          {
            if ( bDisPlay )
            {
              CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v15 - 5));
              v17 |= *((_DWORD *)v15 - 1);
            }
            DamageInfoSet::AddDamage(
              (DamageInfoSet *)((char *)pkSeq + 4),
              v17,
              *((_WORD *)v15 - 5),
              *(_WORD *)(v15 + 1),
              *v16,
              bDisPlay,
              0,
              -1);
            if ( !*v16 )
            {
              v18 = CharMgr::GetChar(&g_kCharMgr, *((_WORD *)v15 - 5));
              if ( v18 )
                v18->m_bWillDead = 1;
            }
          }
          v4 = pvData;
        }
        v15 += 13;
        ++i;
      }
      while ( i < *((_BYTE *)v4 + 12) );
    }
    if ( !*((_DWORD *)pkSeq + 4) )
    {
      DamageInfoSet::_DamageInfoSet((DamageInfoSet *)((char *)pkSeq + 4));
      operator delete(pkSeq);
      return iRevBytes;
    }
    if ( strcmp((const char *)(pActiveSkill + 2), "Revival01") )
      AttackSequenceManager::AddSkillSeq(&pkAttChar->baseclass_54, (SkillSequence *)pkSeq);
  }
  return iRevBytes;
}
// 4BECF0: could not find valid save-restore pair for esi
// 7FFFFF: using guessed type int loc_7FFFFF();
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004BEFD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_CLIENT_NEWBIE_GUIDE_VIEW_LIST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // esi@1
  unsigned int v5; // eax@1
  signed int v6; // ecx@3
  signed int v7; // eax@4
  Tutorial *v8; // eax@7
  void *v9; // eax@8
  BasicInfoLinkType v10; // esi@14
  Name3 *v11; // eax@14
  MapInfo *v12; // eax@14
  int v13; // eax@15
  int v14; // eax@16
  Name3 result; // [sp+0h] [bp-1Ch]@14
  GameFrameWork *v17; // [sp+Ch] [bp-10h]@1
  int v18; // [sp+18h] [bp-4h]@8

  v3 = this;
  v17 = this;
  v4 = (char *)&this->m_kGuideViewList;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&this->m_kGuideViewList,
    0xC5u);
  v5 = 0;
  do
  {
    *(_DWORD *)(v5 + *(_DWORD *)v4) = -1;
    v5 += 4;
  }
  while ( v5 < 0x314 );
  v6 = 0;
  if ( *(_BYTE *)pvData )
  {
    do
    {
      v7 = *((_BYTE *)pvData + v6 + 1);
      if ( v7 < 197 )
      {
        *(_DWORD *)(*(_DWORD *)v4 + 4 * v7) = v7;
        v3 = v17;
      }
      ++v6;
    }
    while ( v6 < *(_BYTE *)pvData );
  }
  v3->m_bGuideViewList = 1;
  v8 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v9 = operator new(0xB4u);
    v18 = 0;
    if ( v9 )
      Tutorial::Tutorial(v8);
    else
      v8 = 0;
    v18 = -1;
    Singleton<Tutorial>::m_pInstance = v8;
  }
  if ( v8->m_bEnable == 1 )
    GameFrameWork::SetPlayGuideSkipList(v3);
  v10 = 1;
  v11 = World::GetMapName(&g_kWorld, &result);
  v12 = MapInfoTab::GetByMapName(v11);
  if ( v12 )
  {
    v13 = v12->KingdomMap;
    if ( v13 )
    {
      v14 = v13 - 3;
      if ( v14 )
      {
        if ( v14 == 1 )
          v10 = 192;
      }
      else
      {
        v10 = 190;
      }
    }
    else
    {
      v10 = 188;
    }
  }
  GameFrameWork::OpenPlayGuideWin(v3, v10);
  return iRevBytes;
}

//----- (004BF100) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SHOW_CINEMATIC(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // ST0C_4@1
  unsigned int v4; // edx@2
  bool v5; // cf@2
  const char *v6; // esi@2
  TextScreenEffect *v7; // ecx@4
  void *v8; // eax@5
  TextScreenEffect *v9; // eax@6
  TextScreenEffect *v10; // ecx@9
  void *v11; // eax@10
  TextScreenEffect *v12; // eax@11
  MachineOpt::GameOption gameOption; // [sp+1Ch] [bp-6Ch]@2
  float v15; // [sp+54h] [bp-34h]@2
  void *v16; // [sp+58h] [bp-30h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > sText; // [sp+5Ch] [bp-2Ch]@1
  unsigned int v18; // [sp+78h] [bp-10h]@1
  int v19; // [sp+84h] [bp-4h]@1
  int v20; // [sp+88h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  sText.baseclass_0._Myres = 15;
  sText.baseclass_0._Mysize = 0;
  sText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = *(_WORD *)pvData;
  v19 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&sText, (const char *)pvData + 2, v3);
  if ( sText.baseclass_0._Mysize > 0 )
  {
    v15 = Timer::ms_fCurTime;
    memcpy(&gameOption, &MachineOpt::ms_kGameOption, 0x34u);
    *(_WORD *)&gameOption.bBasicInfoTipCheck = *((_WORD *)&MachineOpt::ms_kGameOption + 26);
    gameOption.bAutoStack = *((_BYTE *)&MachineOpt::ms_kGameOption + 54);
    v4 = *(_DWORD *)&gameOption.m_kVersion.hour;
    gameOption.bInterfaceCheck = 0;
    memcpy(&MachineOpt::ms_kGameOption, &gameOption, 0x34u);
    *((_WORD *)&MachineOpt::ms_kGameOption + 26) = *(_WORD *)&gameOption.bBasicInfoTipCheck;
    v5 = sText.baseclass_0._Myres < 0x10;
    *((_BYTE *)&MachineOpt::ms_kGameOption + 54) = gameOption.bAutoStack;
    v6 = *(const char **)&sText;
    byte_B5BB1E = v4 >> 16;
    if ( v5 )
      v6 = (const char *)&sText;
    v7 = Singleton<TextScreenEffect>::m_pInstance;
    if ( !Singleton<TextScreenEffect>::m_pInstance )
    {
      v8 = operator new(0x28u);
      v16 = v8;
      LOBYTE(v19) = 1;
      if ( v8 )
        TextScreenEffect::TextScreenEffect((TextScreenEffect *)v8);
      else
        v9 = 0;
      v7 = v9;
      LOBYTE(v19) = 0;
      Singleton<TextScreenEffect>::m_pInstance = v9;
    }
    TextScreenEffect::Start(v7, v6, v15, 0.5, 1);
    v10 = Singleton<TextScreenEffect>::m_pInstance;
    if ( !Singleton<TextScreenEffect>::m_pInstance )
    {
      v11 = operator new(0x28u);
      v16 = v11;
      LOBYTE(v19) = 2;
      if ( v11 )
        TextScreenEffect::TextScreenEffect((TextScreenEffect *)v11);
      else
        v12 = 0;
      v10 = v12;
      LOBYTE(v19) = 0;
      Singleton<TextScreenEffect>::m_pInstance = v12;
    }
    TextScreenEffect::AddSchedule(v10, 2);
  }
  if ( sText.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&sText);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// B5BB1E: using guessed type char byte_B5BB1E;

//----- (004BF260) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_PLAY_SOUND_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // ST04_4@1
  char *v4; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > filename; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  filename.baseclass_0._Myres = 15;
  filename.baseclass_0._Mysize = 0;
  filename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = *(_WORD *)pvData;
  v8 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&filename, (const char *)pvData + 2, v3);
  if ( filename.baseclass_0._Mysize )
  {
    v4 = *(char **)&filename;
    if ( filename.baseclass_0._Myres < 0x10 )
      v4 = (char *)&filename;
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v4);
  }
  if ( filename.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&filename);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004BF310) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_SYSTEM_MESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  unsigned int v4; // ST04_4@1
  const char *v5; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ErrorMessage; // [sp+0h] [bp-2Ch]@1
  unsigned int v8; // [sp+1Ch] [bp-10h]@1
  int v9; // [sp+28h] [bp-4h]@1
  int v10; // [sp+2Ch] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  ErrorMessage.baseclass_0._Myres = 15;
  ErrorMessage.baseclass_0._Mysize = 0;
  ErrorMessage.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = *(_BYTE *)pvData;
  v9 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
    &ErrorMessage,
    (const char *)pvData + 1,
    v4);
  if ( ErrorMessage.baseclass_0._Mysize )
  {
    v5 = *(const char **)&ErrorMessage;
    if ( ErrorMessage.baseclass_0._Myres < 0x10 )
      v5 = (const char *)&ErrorMessage;
    GameFrameWork::AddSysMsg(v3, v5);
  }
  if ( ErrorMessage.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ErrorMessage);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004BF3B0) --------------------------------------------------------
int __thiscall GameFrameWork::ON_NC_GUILD_MOBGUILD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  const unsigned __int16 v3; // bx@1
  unsigned int v4; // edi@1
  CGuildMonster *v5; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v6; // eax@3
  std::pair<unsigned short const ,unsigned long> _Val; // [sp+Ch] [bp-8h]@1

  v3 = *(_WORD *)pvData;
  v4 = *(_DWORD *)((char *)pvData + 2);
  pvData = (void *)*(_WORD *)pvData;
  v5 = CGuildMonster::GetInstance();
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *)v5,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&_Val.baseclass_0.second,
    (const unsigned __int16 *)&pvData);
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)_Val.baseclass_0.second != v5->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead )
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v5,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&pvData,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)_Val.baseclass_0.second);
  _Val.baseclass_0.first = v3;
  _Val.baseclass_0.second = v4;
  v6 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
         &v5->m_mapGuildMob.baseclass_0.baseclass_0,
         &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
    &v5->m_mapGuildMob.baseclass_0,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
    v6,
    0);
  return iRevBytes;
}

//----- (004BF420) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_GIVE_UP_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1
  CQuest *v4; // edi@1
  const char *v5; // eax@1
  int v6; // eax@1
  char *v7; // eax@2
  char *v8; // eax@3
  QuestHelperMgr *v9; // eax@3
  GameFrameWork *thisa; // [sp+0h] [bp-150h]@1
  PLAYER_QUEST_INFO questInfo; // [sp+4h] [bp-14Ch]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strQuestName; // [sp+24h] [bp-12Ch]@1
  char szText[256]; // [sp+40h] [bp-110h]@2
  unsigned int v15; // [sp+140h] [bp-10h]@1
  int v16; // [sp+14Ch] [bp-4h]@1
  int v17; // [sp+150h] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  thisa = this;
  v3 = QuestDataMgr::GetQuest();
  v4 = v3;
  v5 = CQuestData::GetQuestName(v3->m_pQuestData, *(_WORD *)pvData);
  strQuestName.baseclass_0._Mysize = 0;
  strQuestName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  strQuestName.baseclass_0._Myres = 15;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strQuestName, v5, strlen(v5));
  v6 = *((_WORD *)pvData + 1) - 2881;
  v16 = 0;
  if ( v6 )
  {
    v7 = TextData::Get(0x96F4E9C7u);
    sprintf(szText, v7);
    GameFrameWork::AddSysMsg(thisa, szText);
  }
  else
  {
    CQuest::Recv_NC_QUEST_GIVE_UP_ACK(v4, (PROTO_NC_QUEST_GIVE_UP_ACK *)pvData);
    v8 = TextData::Get(0xCAF22853u);
    sprintf(szText, v8);
    GameFrameWork::AddSysMsg(thisa, szText);
    QuestDataMgr::m_bUpdate = 1;
    v9 = QuestHelperMgr::GetInstance();
    QuestHelperMgr::RemoveProgressQuest(v9, *(_WORD *)pvData);
    GameFrameWork::SearchQuestStartItem(thisa, *(_WORD *)pvData, 1);
    questInfo.ID = *(_WORD *)pvData;
    questInfo.Status = 20;
    CQuest::AddQuestInfo(v4, &questInfo);
  }
  if ( strQuestName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strQuestName);
  return iRevBytes;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A85C00: using guessed type int __security_cookie;

//----- (004BF670) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_QUEST_SCRIPT_CMD_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // ebx@1
  char *v4; // eax@3
  char *v5; // eax@17
  char *v6; // edi@18
  CQuest *v7; // eax@19
  const char *v8; // eax@19
  int v10; // eax@22
  CQuest *v11; // eax@26
  CQuest *v12; // eax@27
  QuestHelperMgr *v13; // eax@27
  CQuest *v14; // eax@28
  QuestFinishWin *v15; // ecx@29
  CQuest *v16; // eax@31
  QuestHelperMgr *v17; // eax@31
  CQuest *v18; // eax@32
  CQuest *v19; // eax@33
  CQuest *v20; // eax@34
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strQuestName; // [sp+0h] [bp-2Ch]@19
  unsigned int v22; // [sp+1Ch] [bp-10h]@1
  int v23; // [sp+28h] [bp-4h]@19
  int v24; // [sp+2Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v3 = this;
  switch ( *(_DWORD *)((char *)pvData + 2) )
  {
    case 0:
      switch ( *(_WORD *)((char *)pvData + 15) )
      {
        case 0xC00:
          v4 = TextData::Get(0xB8F4EE4Cu);
          goto LABEL_18;
        case 0xC01:
          v4 = TextData::Get(0x6C7C4F96u);
          goto LABEL_18;
        case 0xC03:
          v4 = TextData::Get(0x62E697FEu);
          goto LABEL_18;
        case 0xC04:
          v4 = TextData::Get(0xCCDCD245u);
          goto LABEL_18;
        case 0xC05:
          v4 = TextData::Get(0x52F0753u);
          goto LABEL_18;
        case 0xC06:
          v4 = TextData::Get(0xC7D4DC47u);
          goto LABEL_18;
        case 0xC07:
          v4 = TextData::Get(0xB1E7A9FEu);
          goto LABEL_18;
        case 0xC08:
          v4 = TextData::Get(0x10783C95u);
          goto LABEL_18;
        case 0xC09:
          v4 = TextData::Get(0xB7F09B4Fu);
          goto LABEL_18;
        case 0xC0A:
          v4 = TextData::Get(0x171EF247u);
          goto LABEL_18;
        case 0xC0B:
          v4 = TextData::Get(0x102BF143u);
          goto LABEL_18;
        case 0xC0C:
          v4 = TextData::Get(0xB6E1B20Cu);
          goto LABEL_18;
        case 0xC0D:
          v4 = TextData::Get(0xB4EBA14Au);
          goto LABEL_18;
        case 0xC0E:
          v4 = TextData::Get(0xD2DA9C55u);
          goto LABEL_18;
        case 0xC0F:
          v5 = TextData::Get(0x13832E9Au);
          v4 = fs(v5);
LABEL_18:
          v6 = v4;
          if ( v4 )
          {
            v7 = QuestDataMgr::GetQuest();
            v8 = CQuestData::GetQuestName(v7->m_pQuestData, *(_WORD *)pvData);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
              &strQuestName,
              v8);
            v23 = 0;
            GameFrameWork::VaAddSysMsg(v3, v6);
            v23 = -1;
            std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strQuestName);
          }
          break;
        default:
          goto $LN2_61;
      }
      goto $LN2_61;
    case 1:
$LN2_61:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
      return iRevBytes;
    default:
      return iRevBytes;
    case 2:
      v10 = *(_DWORD *)((char *)pvData + 11);
      if ( v10 )
      {
        if ( v10 == 1 )
        {
          NpcDialogWin::OpenUserQuestDialog(
            this->m_pkNpcDlgWin,
            *(_DWORD *)((char *)pvData + 7),
            *(_WORD *)pvData,
            *((_BYTE *)pvData + 2));
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
        }
      }
      else
      {
        NpcDialogWin::OpenNpcQuestDialog(
          this->m_pkNpcDlgWin,
          *(_WORD *)((char *)pvData + 15),
          *(_DWORD *)((char *)pvData + 7),
          *(_WORD *)pvData,
          *((_BYTE *)pvData + 2),
          *((_BYTE *)pvData + 6) == 0);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
      }
      return iRevBytes;
    case 5:
      v11 = QuestDataMgr::GetQuest();
      CQuest::SetQuestClear(v11, *(_WORD *)((char *)pvData + 7));
      QuestDataMgr::m_bUpdate = 1;
      return iRevBytes;
    case 6:
      v12 = QuestDataMgr::GetQuest();
      CQuest::SetQuestAccept(v12, *(_WORD *)((char *)pvData + 7));
      QuestDataMgr::m_bUpdate = 1;
      v13 = QuestHelperMgr::GetInstance();
      QuestHelperMgr::AddProgressQuest(v13, *(_WORD *)pvData);
      GameFrameWork::SearchQuestStartItem(v3, *(_WORD *)pvData, 0);
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_STARTQUEST);
      return iRevBytes;
    case 7:
      v14 = QuestDataMgr::GetQuest();
      CQuest::SetQuestCancel(v14, *(_WORD *)((char *)pvData + 7));
      QuestDataMgr::m_bUpdate = 1;
      goto LABEL_29;
    case 0xA:
      v16 = QuestDataMgr::GetQuest();
      CQuest::SetQuestDone(v16, *(_WORD *)((char *)pvData + 7));
      QuestDataMgr::m_bUpdate = 1;
      v17 = QuestHelperMgr::GetInstance();
      QuestHelperMgr::RemoveProgressQuest(v17, *(_WORD *)pvData);
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_ENDQUEST);
LABEL_29:
      v15 = v3->m_pkQuestFinishWin;
      if ( v15 )
        QuestFinishWin::UpdateQuest(v15);
      break;
    case 8:
      v18 = QuestDataMgr::GetQuest();
      CQuest::SetQuestProgress(v18, *(_WORD *)((char *)pvData + 7), *((_BYTE *)pvData + 9));
      QuestDataMgr::m_bUpdate = 1;
      break;
    case 9:
      v19 = QuestDataMgr::GetQuest();
      CQuest::SetQuestFailed(v19, *(_WORD *)((char *)pvData + 7));
      QuestDataMgr::m_bUpdate = 1;
      break;
    case 0xC:
      v20 = QuestDataMgr::GetQuest();
      CQuest::SetQuestAbort(v20, *(_WORD *)((char *)pvData + 7));
      QuestDataMgr::m_bUpdate = 1;
      break;
  }
  return iRevBytes;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A85C00: using guessed type int __security_cookie;

//----- (004BFA60) --------------------------------------------------------
void __thiscall GameFrameWork::NcGuildRenameReq(GameFrameWork *this, const char *pkName, int nCharInvenItem)
{
  char *v3; // eax@2
  void *v4; // [sp-14h] [bp-58h]@3
  GameFrameWork *v5; // [sp+0h] [bp-44h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+4h] [bp-40h]@1
  PROTO_NC_GUILD_RENAME_REQ kProto; // [sp+20h] [bp-24h]@7
  unsigned int v8; // [sp+34h] [bp-10h]@1
  int v9; // [sp+40h] [bp-4h]@1
  int v10; // [sp+44h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v5 = this;
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, pkName, strlen(pkName));
  v9 = 0;
  if ( strName.baseclass_0._Mysize <= 0x10 )
  {
    if ( TextFilterTable::IsForbiddenGuildName((char *)pkName) )
    {
      if ( strName.baseclass_0._Myres < 0x10 )
        return;
      v4 = *(void **)&strName;
    }
    else
    {
      *(_QWORD *)&kProto.sGuildName.n4_name[8] = 0i64;
      *(_QWORD *)&kProto.sGuildName.n4_name[0] = 0i64;
      strncpy(kProto.sGuildName.n4_name, (char *)pkName, 0x10u);
      kProto.nItemSlot = nCharInvenItem;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xACu, &kProto, 17);
      if ( strName.baseclass_0._Myres < 0x10 )
        return;
      v4 = *(void **)&strName;
    }
  }
  else
  {
    v3 = TextData::Get(0x89B5F6C7u);
    GameFrameWork::AddSysMsg(v5, v3);
    if ( strName.baseclass_0._Myres < 0x10 )
      return;
    v4 = *(void **)&strName;
  }
  operator delete(v4);
}
// A85C00: using guessed type int __security_cookie;

//----- (004BFB70) --------------------------------------------------------
void __thiscall GameFrameWork::NcItemEquipBelongedCancelUseReq(GameFrameWork *this, unsigned int TargetItemInvPos)
{
  GameFrameWork *v2; // edi@1
  CursorState *v3; // ecx@1
  void *v4; // eax@2
  int v5; // eax@3
  unsigned int v6; // ebx@6
  ItemIcon *v7; // ecx@7
  Item *v8; // esi@8
  void *v9; // eax@10
  int v10; // esi@10
  InventoryWin *v11; // eax@15
  unsigned int v12; // ecx@15
  ItemIcon *v13; // ecx@16
  Item *v14; // eax@17
  ItemInfo *v15; // eax@18
  InventoryWin *v16; // eax@22
  char *v17; // eax@24
  unsigned int v18; // [sp-14h] [bp-24h]@20

  v2 = this;
  v3 = (CursorState *)Singleton<CursorState>::m_pInstance;
  InventoryWin::ms_uiMode = 0;
  if ( !Singleton<CursorState>::m_pInstance )
  {
    v4 = operator new(8u);
    if ( v4 )
      CursorState::CursorState((CursorState *)v4);
    else
      v5 = 0;
    v3 = (CursorState *)v5;
    Singleton<CursorState>::m_pInstance = v5;
  }
  CursorState::CancelState(v3, PUT_ON_BELONG_CLEAR);
  v6 = TargetItemInvPos;
  if ( TargetItemInvPos < 0xC0 )
  {
    v7 = (ItemIcon *)v2->m_pkInventoryWin->m_apkInvWin[TargetItemInvPos];
    if ( v7 )
    {
      v8 = ItemIcon::GetItem(v7);
      TargetItemInvPos = (unsigned int)v8;
      if ( v8 )
      {
        if ( !ISingletonTask<ItemUseTask>::ms_pkSingletonTask )
        {
          v9 = operator new(0x5Cu);
          v10 = (int)v9;
          if ( v9 )
          {
            ITask::ITask((ITask *)v9, 0);
            *(_DWORD *)v10 = &ItemUseTask::_vftable_;
            *(_DWORD *)(v10 + 8) = &ItemUseTask::_vftable_;
          }
          else
          {
            v10 = 0;
          }
          ISingletonTask<ItemUseTask>::ms_pkSingletonTask = v10;
          if ( !v10 )
            return;
          v8 = (Item *)TargetItemInvPos;
        }
        v11 = v2->m_pkInventoryWin;
        v12 = v11->m_uiSenderInvPos;
        if ( v12 < 0xC0 )
        {
          v13 = (ItemIcon *)v11->m_apkInvWin[v12];
          if ( v13 )
          {
            v14 = ItemIcon::GetItem(v13);
            if ( v14 )
            {
              v15 = v14->m_pkInfo;
              if ( v15 )
              {
                if ( v15->ItemFunc == 6 )
                {
                  if ( Item::GetPutOnBelongState(v8) == 1 )
                  {
                    v16 = v2->m_pkInventoryWin;
                    BYTE1(TargetItemInvPos) = v6;
                    LOBYTE(TargetItemInvPos) = LOBYTE(v16->m_uiSenderInvPos);
                    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x48u, &TargetItemInvPos, 2);
                    InventoryWin::SetReceiverInvPos(v2->m_pkInventoryWin, v6);
                    InventoryWin::ms_uiMode = 8;
                    return;
                  }
                  v18 = -666297026;
                }
                else
                {
                  v18 = 61231997;
                }
                v17 = TextData2::Get(v18);
                GameFrameWork::AddSysMsg(v2, v17);
              }
            }
          }
        }
      }
    }
  }
}
// 98C834: using guessed type int (__stdcall *ItemUseTask___vftable_)(int uiFlags);
// 98C850: using guessed type int (__thiscall *ItemUseTask___vftable_)(void *p, char);
// A977A8: using guessed type int Singleton_CursorState___m_pInstance;
// A98788: using guessed type int ISingletonTask_ItemUseTask___ms_pkSingletonTask;
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (004BFD40) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_NPCCHAT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  ScriptMsg *v3; // eax@1
  Char *v4; // edi@1
  char *v5; // eax@3
  char *v6; // eax@3
  GameFrameWork *thisa; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText; // [sp+4h] [bp-2Ch]@3
  unsigned int v10; // [sp+20h] [bp-10h]@1
  int v11; // [sp+2Ch] [bp-4h]@3
  int v12; // [sp+30h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  thisa = this;
  OutputDebugStringA("RCV :On_NC_SCENARIO_NPCCHAT_CMD\n");
  v3 = ScriptMsgTab::GetScriptMsgInfo((const char *)pvData);
  ScriptMsgCtrl::AddMsg(v3, 0, *(_WORD *)((char *)pvData + 33));
  v4 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)((char *)pvData + 33));
  if ( v4 )
  {
    if ( ScriptMsgTab::GetScriptMsg((const char *)pvData) )
    {
      ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
      kText.baseclass_0._Myres = 15;
      kText.baseclass_0._Mysize = 0;
      kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v5 = fs("[%s] : %s");
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kText, v5, strlen(v5));
      v6 = *(char **)&kText;
      v11 = 0;
      if ( kText.baseclass_0._Myres < 0x10 )
        v6 = (char *)&kText;
      GameFrameWork::AddOtherUserChat(thisa, v6);
      if ( kText.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&kText);
    }
  }
  else
  {
    OutputDebugStringA("SCENARIO_NPCCHAT_CMD Error. There's no NpcHandle\n");
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004BFE70) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_PET_ASK_NEW_NAME_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  unsigned int v4; // ebx@2
  unsigned int v5; // esi@4
  void *v6; // eax@5
  void *v7; // edi@5
  bool v9; // zf@10
  char *v10; // eax@11
  char *v11; // ecx@11
  int v12; // esi@11
  char v13; // dl@12
  char v14; // dl@15
  NpcDialogWin *v15; // ecx@16
  char *v16; // eax@17
  PetNameEditWin *v17; // ecx@20
  GameFrameWork *v18; // [sp+0h] [bp-3Ch]@1
  int v19; // [sp+4h] [bp-38h]@1
  int kError; // [sp+Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kScript; // [sp+10h] [bp-2Ch]@10
  unsigned int v22; // [sp+2Ch] [bp-10h]@1
  int v23; // [sp+38h] [bp-4h]@10
  int v24; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v18 = this;
  v19 = *(_DWORD *)((char *)pvData + 2);
  v3 = *(_DWORD *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 56);
  kError = 13504;
  if ( v3 )
    v4 = *(_DWORD *)(v3 + 40);
  else
    v4 = 0;
  v5 = 0;
  if ( v4 )
  {
    while ( 1 )
    {
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 4), v5);
      v7 = v6;
      if ( v6 )
      {
        if ( *(_DWORD *)v6 == v19 )
          break;
      }
      ++v5;
      if ( v5 >= v4 )
        goto LABEL_8;
    }
    kScript.baseclass_0._Myres = 15;
    kScript.baseclass_0._Mysize = 0;
    kScript.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v9 = *((_BYTE *)pvData + 6) == 0;
    v23 = 0;
    if ( v9 )
    {
      v10 = TextData3::Get(0x827B6C8Eu);
      v11 = v10;
      v12 = (int)(v10 + 1);
      do
        v14 = *v11++;
      while ( v14 );
    }
    else
    {
      v10 = TextData3::Get(0x817B6C8Eu);
      v11 = v10;
      v12 = (int)(v10 + 1);
      do
        v13 = *v11++;
      while ( v13 );
    }
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kScript, v10, (unsigned int)&v11[-v12]);
    v15 = v18->m_pkNpcDlgWin;
    if ( v15 )
    {
      NpcDialogWin::CloseDialog(v15);
      v16 = *(char **)&kScript;
      if ( kScript.baseclass_0._Myres < 0x10 )
        v16 = (char *)&kScript;
      NpcDialogWin::OpenNpcScriptDialog(v18->m_pkNpcDlgWin, (char *)v7 + 4, v16, 0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v18->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    }
    v17 = v18->m_pkPetNameEditWin;
    if ( v17 )
    {
      PetNameEditWin::SetPetHandle(v17, *(_WORD *)pvData);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v18->m_pkPetNameEditWin->baseclass_0.baseclass_0.baseclass_0);
    }
    v23 = -1;
    if ( kScript.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kScript);
  }
  else
  {
LABEL_8:
    kError = 13505;
  }
  HIWORD(kError) = *(_WORD *)pvData;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x35u, 6u, &kError, 4);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A959F0: using guessed type int ITableBase_PupMain_PetMainTab___ms_pkTable;

//----- (004C0030) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_LINKEND_CLIENT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned __int16 v3; // si@1
  unsigned __int16 v4; // ax@2
  unsigned __int16 v5; // ax@2
  Char *v6; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v8; // [sp+0h] [bp-28h]@1
  int v9; // [sp+10h] [bp-18h]@1
  signed int v10; // [sp+14h] [bp-14h]@1
  int v11; // [sp+18h] [bp-10h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // [sp+20h] [bp-8h]@1
  GameFrameWork *thisa; // [sp+24h] [bp-4h]@1

  thisa = this;
  v12 = &v8;
  v10 = 15;
  v9 = 0;
  v8.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v8,
    "PopUpDialogNPC_Raemi_LimitLv",
    0x1Cu);
  v3 = CSingleDataMap::GetValue(&g_kSingleDataMap, v8);
  if ( User::Lv(&g_kUser) <= v3 )
  {
    v12 = &v8;
    v10 = 15;
    v9 = 0;
    v8.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v8, "PopUpDialogNPC_Raemi", 0x14u);
    v4 = CSingleDataMap::GetValue(&g_kSingleDataMap, v8);
    v5 = CharMgr::FindFirstCharHandleByMobID(&g_kCharMgr, v4);
    if ( v5 != -1 )
    {
      v6 = CharMgr::GetChar(&g_kCharMgr, v5);
      if ( v6 )
      {
        v11 = v6->m_kHandle;
        GameFrameWork::NcActNPCClickCmd(thisa, v11);
      }
    }
  }
  return iRevBytes;
}

//----- (004C00F0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BOOTH_SEARCH_BOOTH_POSITION_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  char *v4; // eax@2
  int v5; // eax@2
  float v6; // ST0C_4@3
  float v7; // ST08_4@3
  unsigned __int16 v8; // si@3
  ClientEffect *v9; // ebx@3
  ClientEffect *v10; // edi@3
  ClientEffect *v11; // eax@3
  _BYTE v12[12]; // ST04_12@7
  LookAtEffect *v13; // edi@7
  _BYTE v14[12]; // ST04_12@7
  LookAtEffect *v15; // esi@7
  _BYTE v16[12]; // ST04_12@7
  LookAtEffect *v17; // eax@7
  GameFrameWork *v18; // edi@11
  char *v19; // eax@11
  MsgBox *v20; // esi@11
  MarketSearchWin *v21; // eax@11
  int v22; // eax@12
  NiPoint3 kBoothPos; // [sp+18h] [bp-20h]@3
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> result; // [sp+24h] [bp-14h]@4
  std::pair<unsigned int,Effect *> pkElement; // [sp+2Ch] [bp-Ch]@4
  GameFrameWork *v26; // [sp+34h] [bp-4h]@1

  v3 = this;
  v26 = this;
  if ( *(_WORD *)pvData == 12744 )
  {
    v7 = (double)*((unsigned int *)pvData + 1);
    v6 = (double)*((unsigned int *)pvData + 2);
    World::GetAdvGroundPos(&g_kWorld, v7, v6, &kBoothPos);
    v8 = *((_WORD *)pvData + 1);
    v9 = EffectMgr::JustCreateClientEffect(&g_kEffectMgr, "MarketSearchTarget1", v8);
    v10 = EffectMgr::JustCreateClientEffect(&g_kEffectMgr, "MarketSearchTarget2", v8);
    v11 = EffectMgr::JustCreateClientEffect(&g_kEffectMgr, "MarketSearchTarget3", v8);
    if ( v10 )
    {
      v10->baseclass_0.m_bLoop = 1;
      v10->baseclass_0.m_pkChainEffect = (Effect *)v11;
      pkElement.baseclass_0.first = 0;
      pkElement.baseclass_0.second = (Effect *)v10;
      std::_Tree<std::_Tmap_traits<unsigned_long_ProduceInfo___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_ProduceInfo__>>_1>>::insert<std::pair<unsigned_long_const_ProduceInfo__>>(
        &stru_B5ADBC,
        &result,
        &pkElement);
    }
    if ( v9 )
    {
      v9->baseclass_0.m_pkChainEffect = (Effect *)v10;
      EffectMgr::PlayEffect(&g_kEffectMgr, &v9->baseclass_0);
    }
    *(_DWORD *)v12 = (_DWORD)kBoothPos.x;
    *(_QWORD *)&v12[4] = *(_QWORD *)&kBoothPos.y;
    v13 = EffectMgr::JustCreateLookAtEffect(&g_kEffectMgr, "MarketSearchMe1", *(NiPoint3 *)v12, g_pkMainChar);
    *(_DWORD *)v14 = (_DWORD)kBoothPos.x;
    *(_QWORD *)&v14[4] = *(_QWORD *)&kBoothPos.y;
    v15 = EffectMgr::JustCreateLookAtEffect(&g_kEffectMgr, "MarketSearchMe2", *(NiPoint3 *)v14, g_pkMainChar);
    *(_DWORD *)v16 = (_DWORD)kBoothPos.x;
    *(_QWORD *)&v16[4] = *(_QWORD *)&kBoothPos.y;
    v17 = EffectMgr::JustCreateLookAtEffect(&g_kEffectMgr, "MarketSearchMe3", *(NiPoint3 *)v16, g_pkMainChar);
    if ( v15 )
    {
      v15->baseclass_0.baseclass_0.m_pkChainEffect = (Effect *)v17;
      v15->baseclass_0.baseclass_0.m_bLoop = 1;
      pkElement.baseclass_0.first = 0;
      pkElement.baseclass_0.second = (Effect *)v15;
      std::_Tree<std::_Tmap_traits<unsigned_long_ProduceInfo___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_ProduceInfo__>>_1>>::insert<std::pair<unsigned_long_const_ProduceInfo__>>(
        &stru_B5ADBC,
        &result,
        &pkElement);
    }
    if ( v13 )
    {
      v13->baseclass_0.baseclass_0.m_pkChainEffect = (Effect *)v15;
      EffectMgr::PlayEffect(&g_kEffectMgr, &v13->baseclass_0.baseclass_0);
    }
    v18 = v26;
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v26->m_pkMarketSearchWin->baseclass_0.baseclass_0.baseclass_0);
    v19 = TextData3::Get(0x81AEA7C5u);
    v20 = MsgBox::Modeless(MSGBOX_BOOTH_SEARCHING, v19);
    v21 = v18->m_pkMarketSearchWin;
    if ( v21 )
      v22 = (int)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    else
      v22 = 0;
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v20->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      v22);
    ((void (__thiscall *)(MsgBox *, unsigned int, unsigned int, _DWORD, _DWORD))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v20,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.64999998);
    MarketSearchWin::SetSearchingMsgBox(v18->m_pkMarketSearchWin, v20);
    v5 = iRevBytes;
  }
  else
  {
    v4 = TextData3::Get(0x96D5ACFAu);
    GameFrameWork::AddSysMsg(v3, v4);
    MarketSearchWin::SetSearchBooth(v3->m_pkMarketSearchWin, 0xFFFFu);
    v5 = iRevBytes;
  }
  return v5;
}

//----- (004C0350) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ANNOUNCE_W2C_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  bool v3; // zf@1
  GameFrameWork *v4; // edi@1
  D3DXCOLOR *v5; // eax@2
  D3DXCOLOR v6; // ST04_16@2
  char *v7; // eax@3
  char v8; // cl@4
  unsigned int v9; // esi@5
  unsigned int v10; // esi@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@11
  char *v13; // eax@13
  ChatBlockListWin *v14; // ecx@15
  _BYTE v15[20]; // ST00_20@16
  char *v16; // ecx@18
  char *v17; // eax@20
  D3DXCOLOR result; // [sp+0h] [bp-ACh]@2
  GameFrameWork *thisa; // [sp+10h] [bp-9Ch]@1
  char _Ptr; // [sp+14h] [bp-98h]@5
  void *p; // [sp+18h] [bp-94h]@9
  Name5 pCharID; // [sp+20h] [bp-8Ch]@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMsg; // [sp+34h] [bp-78h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strRoarMsg; // [sp+50h] [bp-5Ch]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strTalker; // [sp+6Ch] [bp-40h]@8
  Name5 kCharID; // [sp+88h] [bp-24h]@15
  unsigned int v28; // [sp+9Ch] [bp-10h]@1
  int v29; // [sp+A8h] [bp-4h]@5
  int v30; // [sp+ACh] [bp+0h]@1

  v28 = (unsigned int)&v30 ^ __security_cookie;
  v3 = *(_BYTE *)pvData == 11;
  v4 = this;
  thisa = this;
  if ( v3 )
  {
    v7 = (char *)pvData + 2;
    strRoarMsg.baseclass_0._Myres = 15;
    strRoarMsg.baseclass_0._Mysize = 0;
    strRoarMsg.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v8 = *v7++;
    while ( v8 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &strRoarMsg,
      (const char *)pvData + 2,
      v7 - ((char *)pvData + 3));
    v29 = 0;
    _Ptr = 37;
    v9 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strRoarMsg, &_Ptr, 0, 1u);
    if ( v9 != -1 )
    {
      _Ptr = 37;
      do
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(&strRoarMsg, v9, 1u, 2u, 37);
        v9 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strRoarMsg, &_Ptr, v9 + 2, 1u);
      }
      while ( v9 != -1 );
    }
    _Ptr = 58;
    v10 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strRoarMsg, &_Ptr, 0, 1u);
    strTalker.baseclass_0._Myres = 15;
    strTalker.baseclass_0._Mysize = 0;
    strTalker.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    strMsg.baseclass_0._Myres = 15;
    strMsg.baseclass_0._Mysize = 0;
    strMsg.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v29) = 2;
    if ( v10 != -1 )
    {
      v11 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
              &strRoarMsg,
              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
              0,
              v10);
      LOBYTE(v29) = 3;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strTalker, v11);
      LOBYTE(v29) = 2;
      if ( *(_DWORD *)&pCharID.n5_name[12] >= 0x10u )
        operator delete(p);
      v12 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
              &strRoarMsg,
              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
              v10 + 1,
              0xFFFFFFFFu);
      LOBYTE(v29) = 4;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strMsg, v12);
      LOBYTE(v29) = 2;
      if ( *(_DWORD *)&pCharID.n5_name[12] >= 0x10u )
        operator delete(p);
      v13 = *(char **)&strTalker;
      if ( strTalker.baseclass_0._Myres < 0x10 )
        v13 = (char *)&strTalker;
      *(_QWORD *)&kCharID.n5_name[12] = 0i64;
      *(_QWORD *)&kCharID.n5_name[4] = 0i64;
      *(_QWORD *)&kCharID.n5_name[0] = 0i64;
      strncpy(kCharID.n5_name, v13, 0x14u);
      v14 = thisa->m_pkChatBlockListWin;
      *(_DWORD *)&pCharID.n5_name[8] = *(_DWORD *)&kCharID.n5_name[8];
      *(_QWORD *)&pCharID.n5_name[0] = *(_QWORD *)&kCharID;
      *(_QWORD *)&pCharID.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
      if ( CChatRestrict::Get(&v14->m_RestrictList, &pCharID) )
      {
        *(_QWORD *)v15 = *(_QWORD *)&kCharID;
        *(_QWORD *)&v15[8] = *(_QWORD *)&kCharID.n5_name[8];
        *(_DWORD *)&v15[16] = *(_DWORD *)&kCharID.n5_name[16];
        if ( !ChatBlockListWin::IsGM(thisa->m_pkChatBlockListWin, *(Name5 *)v15) )
        {
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strMsg);
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strTalker);
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strRoarMsg);
          return iRevBytes;
        }
      }
      v16 = *(char **)&strMsg;
      if ( strMsg.baseclass_0._Myres < 0x10 )
        v16 = (char *)&strMsg;
      v17 = *(char **)&strTalker;
      if ( strTalker.baseclass_0._Myres < 0x10 )
        v17 = (char *)&strTalker;
      GameFrameWork::AddRoarChat(thisa, v17, v16);
      if ( strMsg.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strMsg);
    }
    strMsg.baseclass_0._Myres = 15;
    strMsg.baseclass_0._Mysize = 0;
    strMsg.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strTalker.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strTalker);
    strTalker.baseclass_0._Myres = 15;
    strTalker.baseclass_0._Mysize = 0;
    strTalker.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strRoarMsg.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strRoarMsg);
  }
  else
  {
    v5 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    *(_QWORD *)&v6.r = *(_QWORD *)&v5->r;
    *(_QWORD *)&v6.b = *(_QWORD *)&v5->b;
    GameFrameWork::AddAnnounceMsg(v4, (char *)pvData + 2, COERCE_D3DXCOLOR(v6.r));
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004C0650) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_PASSWORD_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  mhSettingWin *v4; // ecx@2
  char v5; // bl@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // [sp-1Ch] [bp-68h]@6
  unsigned int v8; // [sp-18h] [bp-64h]@6
  char *v9; // [sp-14h] [bp-60h]@3
  unsigned int v10; // [sp-14h] [bp-60h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4h] [bp-48h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Right; // [sp+20h] [bp-2Ch]@7
  unsigned int v13; // [sp+3Ch] [bp-10h]@1
  int v14; // [sp+48h] [bp-4h]@6
  int v15; // [sp+4Ch] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  if ( dword_AA501C != 2 )
  {
    v4 = this->m_pkMHSettingWin;
    if ( *(_BYTE *)pvData )
      v9 = 0;
    else
      v9 = "........";
    mhSettingWin::SetPassWord(v4, v9);
    if ( *(_BYTE *)pvData )
    {
      _Right.baseclass_0._Myres = 15;
      _Right.baseclass_0._Mysize = 0;
      _Right.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Right, &byte_98C047, 0);
      v10 = -1;
      v8 = 0;
      v14 = 1;
      v5 = 2;
      v7 = &_Right;
    }
    else
    {
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "........", 8u);
      v10 = -1;
      v8 = 0;
      v14 = 0;
      v5 = 1;
      v7 = &thisa;
    }
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v3->m_pkMHInfoWin->m_PassWord,
      v7,
      v8,
      v10);
    if ( v5 & 2 )
    {
      v5 &= 0xFDu;
      if ( _Right.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Right);
      _Right.baseclass_0._Myres = 15;
      _Right.baseclass_0._Mysize = 0;
      _Right.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    if ( v5 & 1 && thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// AA501C: using guessed type int dword_AA501C;

//----- (004C0790) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_COLLECT_CARDREGIST_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GameFrameWork *v4; // esi@1
  CollectWin *v5; // eax@2
  unsigned int v6; // ecx@3
  int v7; // edx@4
  int v8; // esi@10
  GameFrameWork *v9; // edi@10
  int v10; // esi@10
  int v11; // eax@14
  __int16 v12; // di@14
  unsigned int v13; // ebx@15
  unsigned int v14; // esi@17
  void *v15; // eax@18
  char *v16; // eax@22
  char *v17; // eax@22
  GameFrameWork *v18; // ecx@22
  std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > kCardInfos; // [sp+0h] [bp-50h]@3
  float v21; // [sp+10h] [bp-40h]@10
  GameFrameWork *thisa; // [sp+14h] [bp-3Ch]@1
  char bPopup; // [sp+1Bh] [bp-35h]@3
  tm tb; // [sp+1Ch] [bp-34h]@10
  unsigned int v25; // [sp+40h] [bp-10h]@1
  int v26; // [sp+4Ch] [bp-4h]@3
  int v27; // [sp+50h] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v3 = *((_WORD *)pvData + 4);
  v4 = this;
  thisa = this;
  if ( (_WORD)v3 != 11152 )
  {
    v17 = ErrMsgTable::GetErrMsg(v3);
    v18 = v4;
LABEL_24:
    GameFrameWork::AddSysMsg(v18, v17);
    return iRevBytes;
  }
  v5 = this->m_pkCollectWin;
  if ( v5 )
  {
    bPopup = 0;
    std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>(
      &kCardInfos,
      &v5->m_kCardInfos);
    v26 = 0;
    v6 = 0;
    if ( (signed int)((char *)kCardInfos.baseclass_0._Mylast - *(_DWORD *)&kCardInfos) / 20 )
    {
      v7 = *(_DWORD *)&kCardInfos + 16;
      while ( *(_DWORD *)(v7 - 12) != *(_WORD *)((char *)pvData + 1) || *(_DWORD *)v7 )
      {
        ++v6;
        v7 += 20;
        if ( v6 >= (signed int)((char *)kCardInfos.baseclass_0._Mylast - *(_DWORD *)&kCardInfos) / 20 )
          goto LABEL_10;
      }
      bPopup = 1;
    }
LABEL_10:
    memcpy(&tb, &Timer::ms_dLastServerTime, sizeof(tb));
    v8 = _mktime32(&tb);
    v21 = Timer::ms_fCurTime - Timer::ms_fLastRecordServerTime;
    v9 = thisa;
    v10 = (signed int)v21 + v8;
    CollectWin::SetCard(
      thisa->m_pkCollectWin,
      *(_WORD *)((char *)pvData + 1),
      *((_BYTE *)pvData + 3),
      *((_DWORD *)pvData + 1),
      v10);
    CollectWin::SetNewest(v9->m_pkCollectWin, v10, *(_WORD *)((char *)pvData + 1));
    CollectWin::SetRegistPage(v9->m_pkCollectWin, *(_WORD *)((char *)pvData + 1));
    if ( bPopup )
      GameFrameWork::OpenCollectPopupWin(v9, *(_WORD *)((char *)pvData + 1));
    v26 = -1;
    if ( *(_DWORD *)&kCardInfos )
      operator delete(*(void **)&kCardInfos);
  }
  v11 = *(_DWORD *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 56);
  v12 = *(_WORD *)((char *)pvData + 1);
  if ( v11 )
    v13 = *(_DWORD *)(v11 + 40);
  else
    v13 = 0;
  v14 = 0;
  if ( v13 )
  {
    while ( 1 )
    {
      v15 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 4), v14);
      if ( v15 )
      {
        if ( *(_WORD *)v15 == v12 )
          break;
      }
      ++v14;
      if ( v14 >= v13 )
        return iRevBytes;
    }
    v16 = TextData2::Get(0x78E5D9D9u);
    v17 = fs(v16);
    v18 = thisa;
    goto LABEL_24;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97648: using guessed type float Timer__ms_fLastRecordServerTime;
// A97ED0: using guessed type int ITableBase_CollectCardView_CollectCardViewTab___ms_pkTable;

//----- (004C0970) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_REWARD_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // ebx@1
  int v4; // esi@1
  GameFrameWork *v5; // edi@1
  int v6; // eax@3
  int v7; // esi@4
  unsigned __int16 *v8; // eax@5
  Item *v9; // eax@6
  char *v10; // eax@10
  char *v11; // eax@10
  unsigned int v13; // [sp-8h] [bp-14h]@8

  v3 = *((_BYTE *)pvData + 1);
  v4 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
  v5 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<AttendReward_AttendRewardTab>::ms_pkTable,
                          *((_BYTE *)pvData + 1)) )
  {
    if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) )
    {
      v6 = *(_DWORD *)(v4 + 196) + 4 * v3;
      if ( *(_DWORD *)v6 )
      {
        v7 = *(_DWORD *)v6;
        if ( *(_DWORD *)v6 )
        {
          v8 = (unsigned __int16 *)ItemInfoTab::GetByInxName((char *)(v7 + 6));
          if ( v8 )
          {
            v9 = Item::Create(*v8);
            if ( v9 )
            {
              AttendRewardWin::SetItemInfo(v5->m_pkAttendRewardWin, *((_BYTE *)pvData + 1), v9);
              AttendCheckWin::SetReward(v5->m_pkAttendCheckWin, *((_BYTE *)pvData + 1));
              if ( *(_DWORD *)(v7 + 1) )
              {
                AttendCheckWin::OnRewardEffect(v5->m_pkAttendCheckWin);
                v13 = -1245442766;
              }
              else
              {
                GameFrameWork::OnOpenAttendRewardWin(v5);
                v13 = -1341377258;
              }
              v10 = TextData2::Get(v13);
              v11 = fs(v10);
              GameFrameWork::AddAuthorMsg(v5, v11);
            }
          }
        }
      }
    }
  }
  return iRevBytes;
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004C0A60) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_SCRIPTMESSAGE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  unsigned int v3; // ebx@1
  char *v4; // eax@1
  char v5; // dl@2
  unsigned int *v6; // ebx@4
  int v7; // esi@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // edi@5
  unsigned int v9; // edi@15
  char *v10; // eax@15
  const char *v11; // eax@17
  signed int v13; // [sp+0h] [bp-FCh]@4
  ScriptMsg *pkScriptMsg; // [sp+4h] [bp-F8h]@1
  unsigned int iPos; // [sp+8h] [bp-F4h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+Ch] [bp-F0h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kStr; // [sp+28h] [bp-D4h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kContent; // [sp+44h] [bp-B8h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kArg[5]; // [sp+60h] [bp-9Ch]@4
  unsigned int v20; // [sp+ECh] [bp-10h]@1
  int v21; // [sp+F8h] [bp-4h]@1
  int v22; // [sp+FCh] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  pkScriptMsg = ScriptMsgTab::GetScriptMsgInfo((const char *)pvData);
  v3 = 0;
  kStr.baseclass_0._Myres = 15;
  kStr.baseclass_0._Mysize = 0;
  kStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kContent.baseclass_0._Myres = 15;
  v4 = (char *)pvData + 37;
  v21 = 0;
  kContent.baseclass_0._Mysize = 0;
  kContent.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  do
    v5 = *v4++;
  while ( v5 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kContent,
    (const char *)pvData + 37,
    v4 - ((char *)pvData + 38));
  LOBYTE(v21) = 1;
  if ( kContent.baseclass_0._Mysize <= 0 )
  {
    v9 = 16;
  }
  else
  {
    _eh_vector_constructor_iterator_(
      kArg,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    iPos = 0;
    v6 = (unsigned int *)((char *)pvData + 32);
    LOBYTE(v21) = 2;
    v7 = (int)kArg;
    v13 = 5;
    do
    {
      v8 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
             &kContent,
             &result,
             iPos,
             *(_BYTE *)v6);
      if ( (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v7 != v8 )
      {
        if ( *(_DWORD *)(v7 + 20) >= 0x10u )
          operator delete(*(void **)v7);
        *(_DWORD *)(v7 + 20) = 15;
        *(_DWORD *)(v7 + 16) = 0;
        *(_BYTE *)v7 = 0;
        if ( v8->baseclass_0._Myres >= 0x10 )
        {
          *(_DWORD *)v7 = *(_DWORD *)&v8->baseclass_0.___u0.baseclass_0.dummy[0];
          *(_DWORD *)&v8->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        else
        {
          memmove((char *)v7, v8->baseclass_0.___u0.baseclass_0.dummy, v8->baseclass_0._Mysize + 1);
        }
        *(_DWORD *)(v7 + 16) = v8->baseclass_0._Mysize;
        *(_DWORD *)(v7 + 20) = v8->baseclass_0._Myres;
        v8->baseclass_0._Myres = 15;
        v8->baseclass_0._Mysize = 0;
        v8->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
      LOBYTE(v21) = 2;
      if ( result.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&result);
      iPos += *(_BYTE *)v6;
      v7 += 28;
      v6 = (unsigned int *)((char *)v6 + 1);
      --v13;
    }
    while ( v13 );
    v9 = 16;
    v10 = fs(pkScriptMsg->SM_Msg);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kStr, v10, strlen(v10));
    LOBYTE(v21) = 1;
    _eh_vector_destructor_iterator_(
      kArg,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v3 = 0;
  }
  v11 = *(const char **)&kStr;
  if ( kStr.baseclass_0._Myres < v9 )
    v11 = (const char *)&kStr;
  ScriptMsgCtrl::AddMsg(pkScriptMsg, v11, 0xFFFFu);
  if ( kContent.baseclass_0._Myres >= v9 )
    operator delete(*(void **)&kContent);
  kContent.baseclass_0._Myres = 15;
  kContent.baseclass_0._Mysize = v3;
  kContent.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( kStr.baseclass_0._Myres >= v9 )
    operator delete(*(void **)&kStr);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004C0D20) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_ACT_SCRIPT_MSG_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  void *v3; // esi@1
  unsigned int v4; // ebx@1
  char *v5; // eax@2
  char v6; // dl@3
  unsigned int *v7; // ebx@5
  int v8; // esi@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // edi@6
  char *v10; // eax@16
  const char *v11; // eax@17
  ScriptMsg *pkScriptMsg; // [sp+4h] [bp-FCh]@1
  signed int v14; // [sp+8h] [bp-F8h]@5
  unsigned int iPos; // [sp+Ch] [bp-F4h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+10h] [bp-F0h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kStr; // [sp+2Ch] [bp-D4h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kContent; // [sp+48h] [bp-B8h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kArg[5]; // [sp+64h] [bp-9Ch]@5
  unsigned int v20; // [sp+F0h] [bp-10h]@1
  int v21; // [sp+FCh] [bp-4h]@2
  int v22; // [sp+100h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v3 = pvData;
  v4 = 0;
  pkScriptMsg = ScriptMsgTab::GetScriptMsgInfo((const char *)pvData + 2);
  if ( pkScriptMsg )
  {
    kStr.baseclass_0._Myres = 15;
    kStr.baseclass_0._Mysize = 0;
    kStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kContent.baseclass_0._Myres = 15;
    v5 = (char *)pvData + 39;
    v21 = 0;
    kContent.baseclass_0._Mysize = 0;
    kContent.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v6 = *v5++;
    while ( v6 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kContent,
      (const char *)pvData + 39,
      v5 - ((char *)pvData + 40));
    LOBYTE(v21) = 1;
    if ( kContent.baseclass_0._Mysize > 0 )
    {
      _eh_vector_constructor_iterator_(
        kArg,
        0x1Cu,
        5,
        (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
        (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
      iPos = 0;
      v7 = (unsigned int *)((char *)pvData + 34);
      LOBYTE(v21) = 2;
      v8 = (int)kArg;
      v14 = 5;
      do
      {
        v9 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
               &kContent,
               &result,
               iPos,
               *(_BYTE *)v7);
        if ( (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v8 != v9 )
        {
          if ( *(_DWORD *)(v8 + 20) >= 0x10u )
            operator delete(*(void **)v8);
          *(_DWORD *)(v8 + 20) = 15;
          *(_DWORD *)(v8 + 16) = 0;
          *(_BYTE *)v8 = 0;
          if ( v9->baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)v8 = *(_DWORD *)&v9->baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v9->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove((char *)v8, v9->baseclass_0.___u0.baseclass_0.dummy, v9->baseclass_0._Mysize + 1);
          }
          *(_DWORD *)(v8 + 16) = v9->baseclass_0._Mysize;
          *(_DWORD *)(v8 + 20) = v9->baseclass_0._Myres;
          v9->baseclass_0._Myres = 15;
          v9->baseclass_0._Mysize = 0;
          v9->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        LOBYTE(v21) = 2;
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        iPos += *(_BYTE *)v7;
        v8 += 28;
        v7 = (unsigned int *)((char *)v7 + 1);
        --v14;
      }
      while ( v14 );
      v10 = fs(pkScriptMsg->SM_Msg);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kStr, v10, strlen(v10));
      LOBYTE(v21) = 1;
      _eh_vector_destructor_iterator_(
        kArg,
        0x1Cu,
        5,
        (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
      v3 = pvData;
      v4 = 0;
    }
    v11 = *(const char **)&kStr;
    if ( kStr.baseclass_0._Myres < 0x10 )
      v11 = (const char *)&kStr;
    ScriptMsgCtrl::AddMsg(pkScriptMsg, v11, *(_WORD *)v3);
    if ( kContent.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kContent);
    kContent.baseclass_0._Myres = 15;
    kContent.baseclass_0._Mysize = v4;
    kContent.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( kStr.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kStr);
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;

//----- (004C0FF0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_DIRECTIONAL_ARROW_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  float v3; // ST0C_4@1
  float v4; // ST08_4@1
  int v5; // eax@1
  int v6; // eax@2
  _BYTE v8[12]; // ST04_12@4
  LookAtEffect *v9; // edi@4
  _BYTE v10[12]; // ST04_12@4
  LookAtEffect *v11; // esi@4
  _BYTE v12[12]; // ST04_12@4
  LookAtEffect *v13; // eax@4
  NiPoint3 kPos; // [sp+14h] [bp-1Ch]@1
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> result; // [sp+20h] [bp-10h]@5
  std::pair<unsigned int,Effect *> pkElement; // [sp+28h] [bp-8h]@1

  v4 = (double)*(unsigned int *)pvData;
  v3 = (double)*((unsigned int *)pvData + 1);
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  pvData = (void *)1;
  v5 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                     (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&stru_B5ADBC,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&pkElement.baseclass_0.second,
                     (const unsigned int *)&pvData)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *)v5 == stru_B5ADBC.baseclass_0.baseclass_0._Myhead )
  {
    *(_DWORD *)v8 = (_DWORD)kPos.x;
    *(_QWORD *)&v8[4] = *(_QWORD *)&kPos.y;
    v9 = EffectMgr::JustCreateLookAtEffect(&g_kEffectMgr, "MarketSearchMe1", *(NiPoint3 *)v8, g_pkMainChar);
    *(_DWORD *)v10 = (_DWORD)kPos.x;
    *(_QWORD *)&v10[4] = *(_QWORD *)&kPos.y;
    v11 = EffectMgr::JustCreateLookAtEffect(&g_kEffectMgr, "MarketSearchMe2", *(NiPoint3 *)v10, g_pkMainChar);
    *(_DWORD *)v12 = (_DWORD)kPos.x;
    *(_QWORD *)&v12[4] = *(_QWORD *)&kPos.y;
    v13 = EffectMgr::JustCreateLookAtEffect(&g_kEffectMgr, "MarketSearchMe3", *(NiPoint3 *)v12, g_pkMainChar);
    if ( v11 )
    {
      v11->baseclass_0.baseclass_0.m_pkChainEffect = (Effect *)v13;
      v11->baseclass_0.baseclass_0.m_bLoop = 1;
      pkElement.baseclass_0.first = 1;
      pkElement.baseclass_0.second = (Effect *)v11;
      std::_Tree<std::_Tmap_traits<unsigned_long_ProduceInfo___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_ProduceInfo__>>_1>>::insert<std::pair<unsigned_long_const_ProduceInfo__>>(
        &stru_B5ADBC,
        &result,
        &pkElement);
    }
    if ( v9 )
    {
      v9->baseclass_0.baseclass_0.m_pkChainEffect = (Effect *)v11;
      EffectMgr::PlayEffect(&g_kEffectMgr, &v9->baseclass_0.baseclass_0);
    }
  }
  else
  {
    v6 = *(_DWORD *)(v5 + 16);
    if ( v6 )
    {
      *(_DWORD *)(v6 + 552) = (_DWORD)kPos.x;
      *(_DWORD *)(v6 + 556) = LODWORD(kPos.y);
      *(_DWORD *)(v6 + 560) = LODWORD(kPos.z);
      return iRevBytes;
    }
  }
  return iRevBytes;
}

//----- (004C1160) --------------------------------------------------------
void __thiscall GameFrameWork::NcActChatReq(GameFrameWork *this, char *pcText)
{
  char *v2; // esi@1
  char v3; // al@1
  PgNet *v4; // ecx@3
  char *v5; // eax@3
  char *v6; // edx@3
  char v7; // cl@4
  int i; // ebx@7
  BYTE v9; // cl@8
  char *v10; // esi@8
  unsigned int v11; // eax@8
  int v12; // edi@8
  void *v13; // eax@10
  void *v14; // edi@11
  GameFrameWork *v15; // esi@11
  ChatDisplayWin2 *v16; // ecx@11
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v17; // eax@12
  PgNet *v18; // ecx@14
  int v19; // eax@18
  char *v20; // edx@19
  PgNet *v21; // ecx@22
  int v22; // edi@22
  void *v23; // ebx@23
  void *v24; // eax@26
  void *v25; // esi@27
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v26; // [sp-20h] [bp-4F4h]@15
  PROTO_NC_ACT_CHAT_REQ *v27; // [sp-18h] [bp-4ECh]@14
  unsigned int v28; // [sp-14h] [bp-4E8h]@10
  unsigned int v29; // [sp-10h] [bp-4E4h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-4D4h]@12
  int (__thiscall **pExceptionObject)(void *, char); // [sp+Ch] [bp-4C8h]@29
  char *_What; // [sp+18h] [bp-4BCh]@29
  GameFrameWork *thisa; // [sp+1Ch] [bp-4B8h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+20h] [bp-4B4h]@10
  NETCOMMAND netcmd; // [sp+2Ch] [bp-4A8h]@3
  char *pcChatMsg; // [sp+30h] [bp-4A4h]@1
  unsigned int nCnt; // [sp+34h] [bp-4A0h]@5
  PROTO_NC_ACT_CHAT_REQ kProto; // [sp+38h] [bp-49Ch]@14
  char pdata; // [sp+3Ch] [bp-498h]@15
  char acStr[128]; // [sp+444h] [bp-90h]@7
  unsigned int v41; // [sp+4C4h] [bp-10h]@1
  int v42; // [sp+4D0h] [bp-4h]@11
  int v43; // [sp+4D4h] [bp+0h]@1

  v41 = (unsigned int)&v43 ^ __security_cookie;
  v29 = (unsigned int)&v43 ^ __security_cookie;
  v2 = pcText;
  v3 = *pcText;
  thisa = this;
  pcChatMsg = pcText;
  if ( v3 == 36 || !v3 )
    return;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8193;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = pcText;
  v6 = pcText + 1;
  do
    v7 = *v5++;
  while ( v7 );
  nCnt = v5 - v6;
  if ( (signed int)(v5 - v6) > 127 )
    nCnt = 127;
  memset(acStr, 0, 0x80u);
  for ( i = 0; ; i = v12 )
  {
    v9 = v2[i];
    v10 = &v2[i];
    v11 = (IsDBCSLeadByte(v9) != 0) + 1;
    v12 = v11 + i;
    if ( (signed int)(v11 + i) > (signed int)nCnt )
      break;
    memcpy(&acStr[i], v10, v11);
    v2 = pcChatMsg;
  }
  v28 = 112;
  acStr[i] = 0;
  listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
  v13 = operator new(v28);
  if ( !v13 )
  {
    _What = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v14 = v13;
  *(_DWORD *)v13 = v13;
  *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v13;
  *((_DWORD *)v13 + 1) = v13;
  v42 = 0;
  v15 = thisa;
  v16 = thisa->m_pkChatDisplayWin;
  if ( v16 )
  {
    v17 = ChatDisplayWin2::GetLinkItemList(v16, &result);
    LOBYTE(v42) = 1;
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v17);
    LOBYTE(v42) = 0;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
    if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
    {
      memset(&pdata, 0, 0x406u);
      v28 = (unsigned int)pcChatMsg;
      pcChatMsg = (char *)&v26;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &v26,
        &listLinkItem);
      if ( !GameFrameWork::ItemNameIsCorrect(v15, v26, (char *)v28) )
      {
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
        return;
      }
      v19 = **(_DWORD **)&listLinkItem;
      nCnt = 0;
      if ( v19 != *(_DWORD *)&listLinkItem )
      {
        v20 = &pdata;
        do
        {
          ++nCnt;
          memcpy(v20 + 2, (const void *)(v19 + 10), 0x65u);
          *(_WORD *)v20 = *(_WORD *)(v19 + 8);
          v19 = *(_DWORD *)v19;
          v20 += 103;
        }
        while ( v19 != *(_DWORD *)&listLinkItem );
        v15 = thisa;
      }
      v21 = (PgNet *)v15->m_spZoneNet.m_pObject;
      kProto.itemLinkDataCount = nCnt;
      kProto.len = i;
      PgNet::AddNetMsg(v21, &kProto, 2);
      v28 = (unsigned __int8)kProto.len;
      PgNet::AddNetMsg(&v15->m_spZoneNet.m_pObject->baseclass_0, acStr, (unsigned __int8)kProto.len);
      v22 = nCnt;
      if ( (signed int)nCnt > 0 )
      {
        v23 = &pdata;
        do
        {
          PgNet::AddNetMsg(&v15->m_spZoneNet.m_pObject->baseclass_0, v23, 103);
          v23 = (char *)v23 + 103;
          --v22;
        }
        while ( v22 );
      }
      PgNet::SendNetMsg(&v15->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
      v14 = *(void **)&listLinkItem;
      goto LABEL_26;
    }
    v14 = *(void **)&listLinkItem;
  }
  v28 = 2;
  v27 = &kProto;
  v18 = (PgNet *)v15->m_spZoneNet.m_pObject;
  kProto.itemLinkDataCount = 0;
  kProto.len = i;
  PgNet::AddNetMsg(v18, &kProto, 2);
  PgNet::SendNetMsg(&v15->m_spZoneNet.m_pObject->baseclass_0, acStr, (unsigned __int8)kProto.len);
LABEL_26:
  v24 = *(void **)v14;
  *(_DWORD *)v14 = v14;
  *((_DWORD *)v14 + 1) = v14;
  if ( v24 != v14 )
  {
    do
    {
      v25 = *(void **)v24;
      operator delete(v24);
      v24 = v25;
    }
    while ( v25 != v14 );
  }
  operator delete(v14);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C14A0) --------------------------------------------------------
void __thiscall GameFrameWork::NcActShoutCmd(GameFrameWork *this, char *pcText)
{
  char *v2; // edi@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@3
  void *v5; // eax@3
  void *v6; // ebx@4
  ChatDisplayWin2 *v7; // ecx@4
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v8; // eax@5
  char *v9; // eax@7
  char v10; // dl@7
  char v11; // cl@8
  int v12; // eax@15
  int v13; // ebx@15
  char *v14; // edx@16
  void *v15; // edi@22
  void *v16; // eax@25
  void *v17; // esi@26
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v18; // [sp-20h] [bp-474h]@12
  char *v19; // [sp-14h] [bp-468h]@12
  unsigned int v20; // [sp-10h] [bp-464h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-454h]@5
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v22; // [sp+Ch] [bp-448h]@12
  std::exception thisa; // [sp+10h] [bp-444h]@28
  char *v24; // [sp+1Ch] [bp-438h]@1
  GameFrameWork *v25; // [sp+20h] [bp-434h]@1
  char *_What; // [sp+24h] [bp-430h]@28
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+28h] [bp-42Ch]@3
  NETCOMMAND netcmd; // [sp+34h] [bp-420h]@3
  PROTO_NC_ACT_SHOUT_CMD kProto; // [sp+38h] [bp-41Ch]@7
  char pdata; // [sp+3Ch] [bp-418h]@12
  unsigned int v31; // [sp+444h] [bp-10h]@1
  int v32; // [sp+450h] [bp-4h]@4
  int v33; // [sp+454h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v20 = (unsigned int)&v33 ^ __security_cookie;
  v2 = pcText;
  v3 = this;
  v25 = this;
  v24 = pcText;
  if ( !pcText || !*pcText )
    return;
  v4 = (PgNet *)this->m_spZoneNet.m_pObject;
  netcmd.protocol = 8222;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x70u);
  if ( !v5 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v6 = v5;
  *(_DWORD *)v5 = v5;
  *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
  *((_DWORD *)v5 + 1) = v5;
  v7 = v3->m_pkChatDisplayWin;
  v32 = 0;
  if ( v7 )
  {
    v8 = ChatDisplayWin2::GetLinkItemList(v7, &result);
    LOBYTE(v32) = 1;
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v8);
    LOBYTE(v32) = 0;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
    if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
    {
      memset(&pdata, 0, 0x406u);
      v19 = pcText;
      v22 = &v18;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &v18,
        &listLinkItem);
      if ( !GameFrameWork::ItemNameIsCorrect(v3, v18, v19) )
      {
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
        return;
      }
      v12 = **(_DWORD **)&listLinkItem;
      v13 = 0;
      if ( **(_DWORD **)&listLinkItem != *(_DWORD *)&listLinkItem )
      {
        v14 = &pdata;
        do
        {
          memcpy(v14 + 2, (const void *)(v12 + 10), 0x65u);
          *(_WORD *)v14 = *(_WORD *)(v12 + 8);
          v12 = *(_DWORD *)v12;
          ++v13;
          v14 += 103;
        }
        while ( v12 != *(_DWORD *)&listLinkItem );
        v3 = v25;
        v2 = v24;
      }
      kProto.itemLinkDataCount = v13;
      kProto.len = strlen(v2);
      if ( kProto.len > 0x80u )
        kProto.len = -128;
      PgNet::AddNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &kProto, 2);
      PgNet::AddNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, v2, (unsigned __int8)kProto.len);
      if ( v13 > 0 )
      {
        v15 = &pdata;
        do
        {
          PgNet::AddNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, v15, 103);
          v15 = (char *)v15 + 103;
          --v13;
        }
        while ( v13 );
      }
      PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, 0, 0);
      v6 = *(void **)&listLinkItem;
      goto LABEL_25;
    }
    v6 = *(void **)&listLinkItem;
  }
  v9 = pcText;
  kProto.itemLinkDataCount = 0;
  v10 = (_BYTE)pcText + 1;
  do
    v11 = *v9++;
  while ( v11 );
  kProto.len = (_BYTE)v9 - v10;
  if ( (unsigned __int8)((_BYTE)v9 - v10) > 0x80u )
    kProto.len = -128;
  PgNet::AddNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, &kProto, 2);
  PgNet::SendNetMsg(&v3->m_spZoneNet.m_pObject->baseclass_0, pcText, (unsigned __int8)kProto.len);
LABEL_25:
  v16 = *(void **)v6;
  *(_DWORD *)v6 = v6;
  *((_DWORD *)v6 + 1) = v6;
  if ( v16 != v6 )
  {
    do
    {
      v17 = *(void **)v16;
      operator delete(v16);
      v16 = v17;
    }
    while ( v17 != v6 );
  }
  operator delete(v6);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C1770) --------------------------------------------------------
void __thiscall GameFrameWork::NcActWhisperReq(GameFrameWork *this, Name5 kToChar, char *pcChat)
{
  void *v3; // edi@1
  GameFrameWork *v4; // esi@1
  PgNet *v5; // ecx@3
  char *v6; // eax@3
  char *v7; // edx@3
  char v8; // cl@4
  void *v9; // eax@7
  void *v10; // ebx@8
  ChatDisplayWin2 *v11; // ecx@8
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v12; // eax@9
  PgNet *v13; // ecx@11
  int v14; // eax@15
  char *v15; // edx@16
  PgNet *v16; // ecx@19
  void *v17; // edi@20
  void *v18; // eax@23
  void *v19; // esi@24
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v20; // [sp-20h] [bp-48Ch]@12
  void *v21; // [sp-18h] [bp-484h]@11
  int v22; // [sp-14h] [bp-480h]@11
  unsigned int v23; // [sp-10h] [bp-47Ch]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-46Ch]@9
  std::exception thisa; // [sp+Ch] [bp-460h]@26
  char *v26; // [sp+18h] [bp-454h]@1
  GameFrameWork *v27; // [sp+1Ch] [bp-450h]@1
  char *_What; // [sp+20h] [bp-44Ch]@26
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+24h] [bp-448h]@7
  NETCOMMAND netcmd; // [sp+30h] [bp-43Ch]@3
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *nCnt; // [sp+34h] [bp-438h]@12
  unsigned int i; // [sp+38h] [bp-434h]@5
  PROTO_NC_ACT_WHISPER_REQ kProto; // [sp+3Ch] [bp-430h]@3
  char pdata; // [sp+54h] [bp-418h]@12
  unsigned int v35; // [sp+45Ch] [bp-10h]@1
  int v36; // [sp+468h] [bp-4h]@8
  int v37; // [sp+46Ch] [bp+0h]@1

  v35 = (unsigned int)&v37 ^ __security_cookie;
  v23 = (unsigned int)&v37 ^ __security_cookie;
  v3 = pcChat;
  v4 = this;
  v27 = this;
  v26 = pcChat;
  if ( !pcChat || !*pcChat )
    return;
  v5 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 8204;
  PgNet::AddNetMsg(v5, &netcmd, 2);
  *(_QWORD *)&kProto.receiver.n5_name[0] = *(_QWORD *)&kToChar;
  v6 = pcChat;
  *(_QWORD *)&kProto.receiver.n5_name[8] = *(_QWORD *)&kToChar.n5_name[8];
  *(_DWORD *)&kProto.receiver.n5_name[16] = *(_DWORD *)&kToChar.n5_name[16];
  v7 = pcChat + 1;
  do
    v8 = *v6++;
  while ( v8 );
  i = v6 - v7;
  if ( (signed int)(v6 - v7) > 128 )
    i = 128;
  listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
  v9 = operator new(0x70u);
  if ( !v9 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v10 = v9;
  *(_DWORD *)v9 = v9;
  *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v9;
  *((_DWORD *)v9 + 1) = v9;
  v11 = v4->m_pkChatDisplayWin;
  v36 = 0;
  if ( v11 )
  {
    v12 = ChatDisplayWin2::GetLinkItemList(v11, &result);
    LOBYTE(v36) = 1;
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v12);
    LOBYTE(v36) = 0;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
    if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
    {
      memset(&pdata, 0, 0x406u);
      v22 = (int)pcChat;
      nCnt = &v20;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &v20,
        &listLinkItem);
      if ( !GameFrameWork::ItemNameIsCorrect(v4, v20, (char *)v22) )
      {
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
        return;
      }
      v10 = *(void **)&listLinkItem;
      v14 = **(_DWORD **)&listLinkItem;
      nCnt = 0;
      if ( v14 != *(_DWORD *)&listLinkItem )
      {
        v15 = &pdata;
        do
        {
          nCnt = (std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)((char *)nCnt + 1);
          memcpy(v15 + 2, (const void *)(v14 + 10), 0x65u);
          *(_WORD *)v15 = *(_WORD *)(v14 + 8);
          v14 = *(_DWORD *)v14;
          v15 += 103;
        }
        while ( (void *)v14 != v10 );
        v4 = v27;
        v3 = v26;
      }
      v22 = 22;
      v21 = &kProto;
      v16 = (PgNet *)v4->m_spWorldMgrNet.m_pObject;
      kProto.itemLinkDataCount = (char)nCnt;
      kProto.len = i;
      PgNet::AddNetMsg(v16, &kProto, 22);
      PgNet::AddNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, v3, (unsigned __int8)kProto.len);
      if ( (signed int)nCnt > 0 )
      {
        v17 = &pdata;
        i = (unsigned int)nCnt;
        do
        {
          PgNet::AddNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, v17, 103);
          v17 = (char *)v17 + 103;
          --i;
        }
        while ( i );
      }
      v22 = 0;
      v21 = 0;
      goto LABEL_23;
    }
    v10 = *(void **)&listLinkItem;
  }
  v22 = 22;
  v21 = &kProto;
  v13 = (PgNet *)v4->m_spWorldMgrNet.m_pObject;
  kProto.itemLinkDataCount = 0;
  kProto.len = i;
  PgNet::AddNetMsg(v13, &kProto, 22);
  v22 = (unsigned __int8)kProto.len;
  v21 = pcChat;
LABEL_23:
  PgNet::SendNetMsg(&v4->m_spWorldMgrNet.m_pObject->baseclass_0, v21, v22);
  v18 = *(void **)v10;
  *(_DWORD *)v10 = v10;
  *((_DWORD *)v10 + 1) = v10;
  if ( v18 != v10 )
  {
    do
    {
      v19 = *(void **)v18;
      operator delete(v18);
      v18 = v19;
    }
    while ( v19 != v10 );
  }
  operator delete(v10);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C1A80) --------------------------------------------------------
void __thiscall GameFrameWork::NcActPartyChatReq(GameFrameWork *this, char *pcChat)
{
  void *v2; // edi@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@3
  char *v5; // eax@3
  char *v6; // edx@3
  char v7; // cl@4
  void *v8; // eax@7
  void *v9; // ebx@8
  ChatDisplayWin2 *v10; // ecx@8
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v11; // eax@9
  PgNet *v12; // ecx@11
  int v13; // eax@15
  char *v14; // edx@16
  PgNet *v15; // ecx@19
  void *v16; // edi@20
  void *v17; // eax@23
  void *v18; // esi@24
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v19; // [sp-20h] [bp-478h]@12
  void *v20; // [sp-18h] [bp-470h]@11
  int v21; // [sp-14h] [bp-46Ch]@11
  unsigned int v22; // [sp-10h] [bp-468h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-458h]@9
  std::exception thisa; // [sp+Ch] [bp-44Ch]@26
  GameFrameWork *v25; // [sp+18h] [bp-440h]@1
  char *_What; // [sp+1Ch] [bp-43Ch]@26
  char *v27; // [sp+20h] [bp-438h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+24h] [bp-434h]@7
  NETCOMMAND netcmd; // [sp+30h] [bp-428h]@3
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *nCnt; // [sp+34h] [bp-424h]@12
  unsigned int i; // [sp+38h] [bp-420h]@5
  PROTO_NC_ACT_PARTYCHAT_REQ kProto; // [sp+3Ch] [bp-41Ch]@11
  char pdata; // [sp+40h] [bp-418h]@12
  unsigned int v34; // [sp+448h] [bp-10h]@1
  int v35; // [sp+454h] [bp-4h]@8
  int v36; // [sp+458h] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v22 = (unsigned int)&v36 ^ __security_cookie;
  v2 = pcChat;
  v3 = this;
  v25 = this;
  v27 = pcChat;
  if ( !pcChat || !*pcChat )
    return;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 8212;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = pcChat;
  v6 = pcChat + 1;
  do
    v7 = *v5++;
  while ( v7 );
  i = v5 - v6;
  if ( (signed int)(v5 - v6) > 128 )
    i = 128;
  listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
  v8 = operator new(0x70u);
  if ( !v8 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v9 = v8;
  *(_DWORD *)v8 = v8;
  *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  *((_DWORD *)v8 + 1) = v8;
  v10 = v3->m_pkChatDisplayWin;
  v35 = 0;
  if ( v10 )
  {
    v11 = ChatDisplayWin2::GetLinkItemList(v10, &result);
    LOBYTE(v35) = 1;
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v11);
    LOBYTE(v35) = 0;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
    if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
    {
      memset(&pdata, 0, 0x406u);
      v21 = (int)pcChat;
      nCnt = &v19;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &v19,
        &listLinkItem);
      if ( !GameFrameWork::ItemNameIsCorrect(v3, v19, (char *)v21) )
      {
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
        return;
      }
      v9 = *(void **)&listLinkItem;
      v13 = **(_DWORD **)&listLinkItem;
      nCnt = 0;
      if ( v13 != *(_DWORD *)&listLinkItem )
      {
        v14 = &pdata;
        do
        {
          nCnt = (std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)((char *)nCnt + 1);
          memcpy(v14 + 2, (const void *)(v13 + 10), 0x65u);
          *(_WORD *)v14 = *(_WORD *)(v13 + 8);
          v13 = *(_DWORD *)v13;
          v14 += 103;
        }
        while ( (void *)v13 != v9 );
        v3 = v25;
        v2 = v27;
      }
      v21 = 2;
      v20 = &kProto;
      v15 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
      kProto.itemLinkDataCount = (char)nCnt;
      kProto.len = i;
      PgNet::AddNetMsg(v15, &kProto, 2);
      PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v2, (unsigned __int8)kProto.len);
      if ( (signed int)nCnt > 0 )
      {
        v16 = &pdata;
        i = (unsigned int)nCnt;
        do
        {
          PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v16, 103);
          v16 = (char *)v16 + 103;
          --i;
        }
        while ( i );
      }
      v21 = 0;
      v20 = 0;
      goto LABEL_23;
    }
    v9 = *(void **)&listLinkItem;
  }
  v21 = 2;
  kProto.len = i;
  v12 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  kProto.itemLinkDataCount = 0;
  PgNet::AddNetMsg(v12, &kProto, 2);
  v21 = (unsigned __int8)kProto.len;
  v20 = pcChat;
LABEL_23:
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v20, v21);
  v17 = *(void **)v9;
  *(_DWORD *)v9 = v9;
  *((_DWORD *)v9 + 1) = v9;
  if ( v17 != v9 )
  {
    do
    {
      v18 = *(void **)v17;
      operator delete(v17);
      v17 = v18;
    }
    while ( v18 != v9 );
  }
  operator delete(v9);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C1D60) --------------------------------------------------------
void __thiscall GameFrameWork::NcGuildChatReq(GameFrameWork *this, char *pcChat)
{
  void *v2; // edi@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@3
  char *v5; // eax@3
  char *v6; // edx@3
  char v7; // cl@4
  void *v8; // eax@7
  void *v9; // ebx@8
  ChatDisplayWin2 *v10; // ecx@8
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v11; // eax@9
  PgNet *v12; // ecx@11
  int v13; // eax@15
  char *v14; // edx@16
  PgNet *v15; // ecx@19
  void *v16; // edi@20
  void *v17; // eax@23
  void *v18; // esi@24
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v19; // [sp-20h] [bp-478h]@12
  void *v20; // [sp-18h] [bp-470h]@11
  int v21; // [sp-14h] [bp-46Ch]@11
  unsigned int v22; // [sp-10h] [bp-468h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-458h]@9
  std::exception thisa; // [sp+Ch] [bp-44Ch]@26
  GameFrameWork *v25; // [sp+18h] [bp-440h]@1
  char *_What; // [sp+1Ch] [bp-43Ch]@26
  char *v27; // [sp+20h] [bp-438h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+24h] [bp-434h]@7
  NETCOMMAND netcmd; // [sp+30h] [bp-428h]@3
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *nCnt; // [sp+34h] [bp-424h]@12
  unsigned int i; // [sp+38h] [bp-420h]@5
  PROTO_NC_GUILD_CHAT_REQ kProto; // [sp+3Ch] [bp-41Ch]@11
  char pdata; // [sp+40h] [bp-418h]@12
  unsigned int v34; // [sp+448h] [bp-10h]@1
  int v35; // [sp+454h] [bp-4h]@8
  int v36; // [sp+458h] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v22 = (unsigned int)&v36 ^ __security_cookie;
  v2 = pcChat;
  v3 = this;
  v25 = this;
  v27 = pcChat;
  if ( !pcChat || !*pcChat )
    return;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = 29811;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = pcChat;
  v6 = pcChat + 1;
  do
    v7 = *v5++;
  while ( v7 );
  i = v5 - v6;
  if ( (signed int)(v5 - v6) > 128 )
    i = 128;
  listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
  v8 = operator new(0x70u);
  if ( !v8 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v9 = v8;
  *(_DWORD *)v8 = v8;
  *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  *((_DWORD *)v8 + 1) = v8;
  v10 = v3->m_pkChatDisplayWin;
  v35 = 0;
  if ( v10 )
  {
    v11 = ChatDisplayWin2::GetLinkItemList(v10, &result);
    LOBYTE(v35) = 1;
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v11);
    LOBYTE(v35) = 0;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
    if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
    {
      memset(&pdata, 0, 0x406u);
      v21 = (int)pcChat;
      nCnt = &v19;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &v19,
        &listLinkItem);
      if ( !GameFrameWork::ItemNameIsCorrect(v3, v19, (char *)v21) )
      {
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
        return;
      }
      v9 = *(void **)&listLinkItem;
      v13 = **(_DWORD **)&listLinkItem;
      nCnt = 0;
      if ( v13 != *(_DWORD *)&listLinkItem )
      {
        v14 = &pdata;
        do
        {
          nCnt = (std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)((char *)nCnt + 1);
          memcpy(v14 + 2, (const void *)(v13 + 10), 0x65u);
          *(_WORD *)v14 = *(_WORD *)(v13 + 8);
          v13 = *(_DWORD *)v13;
          v14 += 103;
        }
        while ( (void *)v13 != v9 );
        v3 = v25;
        v2 = v27;
      }
      v21 = 2;
      v20 = &kProto;
      v15 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
      kProto.itemLinkDataCount = (char)nCnt;
      kProto.len = i;
      PgNet::AddNetMsg(v15, &kProto, 2);
      PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v2, (unsigned __int8)kProto.len);
      if ( (signed int)nCnt > 0 )
      {
        v16 = &pdata;
        i = (unsigned int)nCnt;
        do
        {
          PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v16, 103);
          v16 = (char *)v16 + 103;
          --i;
        }
        while ( i );
      }
      v21 = 0;
      v20 = 0;
      goto LABEL_23;
    }
    v9 = *(void **)&listLinkItem;
  }
  v21 = 2;
  kProto.len = i;
  v12 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  kProto.itemLinkDataCount = 0;
  PgNet::AddNetMsg(v12, &kProto, 2);
  v21 = (unsigned __int8)kProto.len;
  v20 = pcChat;
LABEL_23:
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v20, v21);
  v17 = *(void **)v9;
  *(_DWORD *)v9 = v9;
  *((_DWORD *)v9 + 1) = v9;
  if ( v17 != v9 )
  {
    do
    {
      v18 = *(void **)v17;
      operator delete(v17);
      v17 = v18;
    }
    while ( v18 != v9 );
  }
  operator delete(v9);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C2040) --------------------------------------------------------
void __thiscall GameFrameWork::NcGuildAcademyChatReq(GameFrameWork *this, char *pcChat)
{
  void *v2; // edi@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@3
  char *v5; // eax@3
  char *v6; // edx@3
  char v7; // cl@4
  void *v8; // eax@7
  void *v9; // ebx@8
  ChatDisplayWin2 *v10; // ecx@8
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v11; // eax@9
  PgNet *v12; // ecx@11
  int v13; // eax@15
  char *v14; // edx@16
  PgNet *v15; // ecx@19
  void *v16; // edi@20
  void *v17; // eax@23
  void *v18; // esi@24
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v19; // [sp-20h] [bp-478h]@12
  void *v20; // [sp-18h] [bp-470h]@11
  int v21; // [sp-14h] [bp-46Ch]@11
  unsigned int v22; // [sp-10h] [bp-468h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-458h]@9
  std::exception thisa; // [sp+Ch] [bp-44Ch]@26
  GameFrameWork *v25; // [sp+18h] [bp-440h]@1
  char *_What; // [sp+1Ch] [bp-43Ch]@26
  char *v27; // [sp+20h] [bp-438h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+24h] [bp-434h]@7
  NETCOMMAND netcmd; // [sp+30h] [bp-428h]@3
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *nCnt; // [sp+34h] [bp-424h]@12
  unsigned int i; // [sp+38h] [bp-420h]@5
  PROTO_NC_GUILD_ACADEMY_CHAT_REQ kProto; // [sp+3Ch] [bp-41Ch]@11
  char pdata; // [sp+40h] [bp-418h]@12
  unsigned int v34; // [sp+448h] [bp-10h]@1
  int v35; // [sp+454h] [bp-4h]@8
  int v36; // [sp+458h] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v22 = (unsigned int)&v36 ^ __security_cookie;
  v2 = pcChat;
  v3 = this;
  v25 = this;
  v27 = pcChat;
  if ( !pcChat || !*pcChat )
    return;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = -26520;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = pcChat;
  v6 = pcChat + 1;
  do
    v7 = *v5++;
  while ( v7 );
  i = v5 - v6;
  if ( (signed int)(v5 - v6) > 128 )
    i = 128;
  listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
  v8 = operator new(0x70u);
  if ( !v8 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v9 = v8;
  *(_DWORD *)v8 = v8;
  *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  *((_DWORD *)v8 + 1) = v8;
  v10 = v3->m_pkChatDisplayWin;
  v35 = 0;
  if ( v10 )
  {
    v11 = ChatDisplayWin2::GetLinkItemList(v10, &result);
    LOBYTE(v35) = 1;
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v11);
    LOBYTE(v35) = 0;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
    if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
    {
      memset(&pdata, 0, 0x406u);
      v21 = (int)pcChat;
      nCnt = &v19;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &v19,
        &listLinkItem);
      if ( !GameFrameWork::ItemNameIsCorrect(v3, v19, (char *)v21) )
      {
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
        return;
      }
      v9 = *(void **)&listLinkItem;
      v13 = **(_DWORD **)&listLinkItem;
      nCnt = 0;
      if ( v13 != *(_DWORD *)&listLinkItem )
      {
        v14 = &pdata;
        do
        {
          nCnt = (std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)((char *)nCnt + 1);
          memcpy(v14 + 2, (const void *)(v13 + 10), 0x65u);
          *(_WORD *)v14 = *(_WORD *)(v13 + 8);
          v13 = *(_DWORD *)v13;
          v14 += 103;
        }
        while ( (void *)v13 != v9 );
        v3 = v25;
        v2 = v27;
      }
      v21 = 2;
      v20 = &kProto;
      v15 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
      kProto.itemLinkDataCount = (char)nCnt;
      kProto.len = i;
      PgNet::AddNetMsg(v15, &kProto, 2);
      PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v2, (unsigned __int8)kProto.len);
      if ( (signed int)nCnt > 0 )
      {
        v16 = &pdata;
        i = (unsigned int)nCnt;
        do
        {
          PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v16, 103);
          v16 = (char *)v16 + 103;
          --i;
        }
        while ( i );
      }
      v21 = 0;
      v20 = 0;
      goto LABEL_23;
    }
    v9 = *(void **)&listLinkItem;
  }
  v21 = 2;
  kProto.len = i;
  v12 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  kProto.itemLinkDataCount = 0;
  PgNet::AddNetMsg(v12, &kProto, 2);
  v21 = (unsigned __int8)kProto.len;
  v20 = pcChat;
LABEL_23:
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v20, v21);
  v17 = *(void **)v9;
  *(_DWORD *)v9 = v9;
  *((_DWORD *)v9 + 1) = v9;
  if ( v17 != v9 )
  {
    do
    {
      v18 = *(void **)v17;
      operator delete(v17);
      v17 = v18;
    }
    while ( v18 != v9 );
  }
  operator delete(v9);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C2320) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MAP_LOGOUT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // edi@1
  unsigned __int16 v4; // ax@1
  Char *v5; // eax@5
  Char *v6; // esi@5
  Effect *v7; // eax@10
  MobViewInfo *v8; // eax@12
  mhInfoWin *v9; // edi@22
  MobViewInfo *v10; // eax@27
  EffectObjectMgr *v11; // eax@33
  __int16 kHandleNumDummy; // [sp+0h] [bp-14h]@1
  ShineObjectHandleUnion shineOBhandle; // [sp+4h] [bp-10h]@1
  int v15; // [sp+10h] [bp-4h]@1

  v3 = this;
  NiStepBoolKey::NiStepBoolKey((NiDX9SourceTextureData *)&shineOBhandle);
  v4 = *(_WORD *)pvData;
  v15 = 0;
  shineOBhandle.sohu_Handle = v4;
  switch ( ShineObjectHandleUnion::sohu_HandleSplit(&shineOBhandle, (unsigned __int16 *)&kHandleNumDummy) )
  {
    case 1:
      if ( !DropItemMgr::Remove(&g_kDropItemMgr, *(_WORD *)pvData) )
        ICharDeadEvent::CheckEventExistOnQueue(DEventType_DropItem, *(_WORD *)pvData, 1);
      goto LABEL_35;
    case 3:
      CMiniHouseMgr::Remove((CMiniHouseMgr *)&g_kMiniHouseMgr, *(_WORD *)pvData);
      goto LABEL_35;
    case 2:
    case 4:
    case 5:
    case 8:
    case 0xA:
    case 0xB:
    case 0xC:
      v5 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)pvData);
      v6 = v5;
      if ( v5 )
      {
        if ( !(unsigned __int8)((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[1].Affect)(v5) )
        {
          if ( !Char::IsNPC(v6) )
          {
            if ( !Char::IsResource(v6) )
            {
              if ( Char::IsLinkGate(v6) )
              {
                v7 = EffectMgr::FindAuraEffect(&g_kEffectMgr, *(_WORD *)pvData);
                if ( v7 )
                  EffectMgr::RemoveEffect(&g_kEffectMgr, v7);
              }
            }
          }
        }
        v8 = IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(v6->m_kCharShape.m_kMobID, 1);
        if ( v8 && !strcmp(v8->InxName, "KQ_G_Boss") )
          MiniMapWin::Remove_KQ_MOB(v3->m_pkMiniMapWin, 1);
        if ( Char::IsNPC(v6) )
          MiniMapWin::RemoveNPC(v3->m_pkMiniMapWin, v6->m_kHandle);
        DecalMgr::RemoveCharDecal(&stru_B31F08, v6->m_kHandle);
        MiniMapWin::RemoveKQTeamMark(v3->m_pkMiniMapWin, v6->m_kHandle);
      }
      if ( nowState )
      {
        MiniHouseIndoor::DelObjSeatInfo(&g_kWorld.m_MiniHouseIndoorMode, *(_WORD *)pvData);
        MiniHouseIndoor::DelJoinCharInfo(&g_kWorld.m_MiniHouseIndoorMode, *(_WORD *)pvData);
        if ( nowState == 5 && dword_AA501C == 2 )
        {
          MiniHouseIndoor::CancelPickObj(&g_kWorld.m_MiniHouseIndoorMode);
          MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
        }
        v9 = v3->m_pkMHInfoWin;
        if ( v9 )
        {
          mhInfoWin::RefreshGuestPage(v9);
          mhInfoWin::RefreshInfoPage(v9);
        }
      }
      if ( !v6 )
        goto LABEL_29;
      if ( !(unsigned __int8)((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[1].Affect)(v6) || Char::IsNPC(v6) )
      {
        if ( !(unsigned __int8)v6->baseclass_0.vfptr[20].GetAbstateColor((AbStateInfectee *)v6) )
        {
LABEL_29:
          CharMgr::DeleteChar(&g_kCharMgr, (PROTO_NC_MAP_LOGOUT_CMD *)pvData);
          goto LABEL_35;
        }
      }
      else
      {
        v10 = IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(v6->m_kCharShape.m_kMobID, 1);
        if ( !v10 || MobNoFadeInTab::IsNoFadeIn(v10->InxName) )
          goto LABEL_29;
      }
      CharMgr::AddFadeOutDeleteChar(&g_kCharMgr, v6);
LABEL_35:
      v15 = -1;
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&shineOBhandle);
      return iRevBytes;
    case 6:
      MagicField::DeleteMagicField(*(_WORD *)pvData);
      goto LABEL_35;
    case 9:
      v11 = EffectObjectMgr::GetMgr();
      if ( v11 )
        EffectObjectMgr::RemoveAllEffectObject(v11);
      goto LABEL_35;
    default:
      goto LABEL_35;
  }
}
// AA501C: using guessed type int dword_AA501C;

//----- (004C2610) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_EFFECTBLAST_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  EffectObjectMgr *v3; // eax@1

  v3 = EffectObjectMgr::GetMgr();
  if ( v3 )
    EffectObjectMgr::AddEffectObject(v3, (PROTO_NC_BRIEFINFO_EFFECTBLAST_CMD *)pvData);
  return iRevBytes;
}

//----- (004C2630) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_BRIEFINFO_EFFECT_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  EffectObjectMgr *v3; // eax@1
  signed int v4; // esi@2
  EffectObjectMgr *pEffectObjectMgr; // [sp+0h] [bp-4h]@1

  v3 = EffectObjectMgr::GetMgr();
  pEffectObjectMgr = v3;
  if ( v3 )
  {
    v4 = 0;
    if ( *(_BYTE *)pvData )
    {
      while ( 1 )
      {
        EffectObjectMgr::AddEffectObject(v3, (PROTO_NC_BRIEFINFO_EFFECTBLAST_CMD *)((char *)pvData + 1));
        ++v4;
        if ( v4 >= *(_BYTE *)pvData )
          break;
        v3 = pEffectObjectMgr;
      }
    }
  }
  return iRevBytes;
}

//----- (004C2680) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_BUILDING_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@2
  const char *v5; // eax@3
  char *v6; // eax@3
  int v7; // eax@3
  const char *v8; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@3
  char *v10; // eax@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+18h] [bp-2Ch]@3
  unsigned int v13; // [sp+34h] [bp-10h]@1
  int v14; // [sp+40h] [bp-4h]@3
  int v15; // [sp+44h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  if ( *(_WORD *)pvData == 4481 )
  {
    v5 = (const char *)((int (__cdecl *)(unsigned int))this->m_pkMHJoinWin->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)((unsigned int)&v15 ^ __security_cookie);
    v3->m_pkMHInfoWin->m_MaxPersonCount = atoi(v5);
    v6 = (char *)((int (*)(void))v3->m_pkMHJoinWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    mhInfoWin::SetTitle(v3->m_pkMHInfoWin, v6, 0);
    v7 = ((int (*)(void))v3->m_pkMHJoinWin->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    ((void (__stdcall *)(int))v3->m_pkMHInfoWin->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v7);
    v8 = (const char *)((int (*)(void))v3->m_pkMHJoinWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v8, strlen(v8));
    v9 = &v3->m_pkMHInfoWin->m_PassWord;
    v14 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v9, &thisa, 0, 0xFFFFFFFFu);
    v14 = -1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    GameFrameWork::OnCloseJoinWin(v3);
    if ( unk_AA2801 && unk_AA2800 && CNSTimer_Interval::IsRun_GetCount(&stru_AA2804, Timer::ms_fCurTime) )
    {
      CNSTimer_Interval::ReSet(&stru_AA2804, Timer::ms_fCurTime);
      unk_AA2801 = 0;
      v10 = TextData::Get(0x4241667Au);
      GameFrameWork::AddSysMsg(v3, v10);
      GameFrameWork::NcMiscHideExceptMeCmd(v3, 0);
    }
  }
  else
  {
    v4 = ErrMsgTable::GetErrMsg(*(_WORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v4);
    byte_AA5170 = 0;
  }
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// AA5170: using guessed type char byte_AA5170;

//----- (004C2860) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_LOGINCOMPLETE_ACK(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  mhEditRoomWin *v4; // ebx@2
  char *v5; // eax@2
  char v6; // dl@3
  unsigned int v7; // ebx@4
  char *v8; // eax@7
  int v9; // ST00_4@8
  char *v10; // eax@8
  char *v11; // eax@11
  char *v12; // eax@13
  DirectUserMsgBody_MHInfoTabChanged::TabEnum v13; // ebx@13
  const char *v14; // eax@13
  mhInfoWin *v15; // eax@13
  unsigned int v17; // [sp-10h] [bp-44h]@1
  Char *RoomMaster; // [sp+0h] [bp-34h]@6
  char *Lev; // [sp+4h] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+8h] [bp-2Ch]@13
  unsigned int v21; // [sp+24h] [bp-10h]@1
  int v22; // [sp+30h] [bp-4h]@13
  int v23; // [sp+34h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v17 = (unsigned int)&v23 ^ __security_cookie;
  v3 = this;
  if ( *(_DWORD *)pvData == 4481 )
  {
    v4 = this->m_pkMHEditRoomWin;
    v5 = (char *)pvData + 107;
    Lev = (char *)pvData + 108;
    do
      v6 = *v5++;
    while ( v6 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v4->m_Tkey,
      (const char *)pvData + 107,
      v5 - Lev);
    v7 = 0;
    if ( unk_AA27FC )
    {
      do
      {
        MiniHouseIndoor::AddJoinCharInfo(
          &g_kWorld.m_MiniHouseIndoorMode,
          *(_WORD *)((char *)pvData + 2 * v7 + v7 + 141),
          *((_BYTE *)pvData + 2 * v7 + v7 + 140));
        if ( !v7 )
        {
          RoomMaster = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)((char *)pvData + 141));
          if ( RoomMaster )
          {
            v9 = *((_BYTE *)pvData + 140);
            LOWORD(Lev) = 12336;
            _itoa(v9, (char *)&Lev, 10);
            v10 = (char *)((int (__cdecl *)(unsigned int))RoomMaster->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v17);
            mhInfoWin::SetRoomMakerName(v3->m_pkMHInfoWin, v10);
          }
          else
          {
            v8 = TextData2::Get(0x21292B8Cu);
            GameFrameWork::AddSysMsg(v3, v8);
          }
        }
        ++v7;
      }
      while ( v7 < unk_AA27FC );
    }
  }
  else
  {
    v11 = ErrMsgTable::GetErrMsg(*(_DWORD *)pvData);
    GameFrameWork::AddSysMsg(v3, v11);
  }
  ((void (__stdcall *)(char *, unsigned int))v3->m_pkMHInfoWin->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
    (char *)pvData + 6,
    v17);
  v3->m_pkMHInfoWin->m_NowPersonCount = *((_BYTE *)pvData + 139);
  v3->m_pkMHInfoWin->m_bItemView = *((_BYTE *)pvData + 5) != 0;
  v3->m_pkMHInfoWin->m_MaxPersonCount = *((_BYTE *)pvData + 4);
  if ( dword_AA501C == 2 )
  {
    v12 = (char *)((int (*)(void))v3->m_pkMHJoinWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v13 = 0;
    mhInfoWin::SetTitle(v3->m_pkMHInfoWin, v12, 0);
    v14 = (const char *)((int (*)(void))v3->m_pkMHJoinWin->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v14, strlen(v14));
    v15 = v3->m_pkMHInfoWin;
    v22 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v15->m_PassWord,
      &thisa,
      0,
      0xFFFFFFFFu);
    v22 = -1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    GameFrameWork::OnCloseJoinWin(v3);
  }
  else
  {
    v13 = 0;
  }
  GameFrameWork::OpenMHInfoWin(v3, v13);
  GameFrameWork::OpenPlayGuideWin(v3, BIL_MINIHOME_1);
  return iRevBytes;
}
// A85C00: using guessed type int __security_cookie;
// AA501C: using guessed type int dword_AA501C;

//----- (004C2AD0) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_MINIHOUSE_MODIFY_TITLE_CMD(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  strncpy(dest, (char *)pvData, 0x14u);
  mhInfoWin::SetTitle(v3->m_pkMHInfoWin, (char *)pvData, 0);
  ((void (__stdcall *)(_DWORD))v3->m_pkMHSettingWin->m_spEdit[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pvData);
  mhInfoWin::RefreshInfoPage(v3->m_pkMHInfoWin);
  v4 = TextData2::Get(0x2E328F88u);
  GameFrameWork::AddSysMsg(v3, v4);
  return iRevBytes;
}

//----- (004C2B40) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidChatReq(GameFrameWork *this, char *pcChat)
{
  void *v2; // edi@1
  GameFrameWork *v3; // esi@1
  PgNet *v4; // ecx@3
  char *v5; // eax@3
  char *v6; // edx@3
  char v7; // cl@4
  void *v8; // eax@7
  void *v9; // ebx@8
  ChatDisplayWin2 *v10; // ecx@8
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v11; // eax@9
  PgNet *v12; // ecx@11
  int v13; // eax@15
  char *v14; // edx@16
  PgNet *v15; // ecx@19
  void *v16; // edi@20
  void *v17; // eax@23
  void *v18; // esi@24
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v19; // [sp-20h] [bp-478h]@12
  void *v20; // [sp-18h] [bp-470h]@11
  int v21; // [sp-14h] [bp-46Ch]@11
  unsigned int v22; // [sp-10h] [bp-468h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-458h]@9
  std::exception thisa; // [sp+Ch] [bp-44Ch]@26
  GameFrameWork *v25; // [sp+18h] [bp-440h]@1
  char *_What; // [sp+1Ch] [bp-43Ch]@26
  char *v27; // [sp+20h] [bp-438h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+24h] [bp-434h]@7
  NETCOMMAND netcmd; // [sp+30h] [bp-428h]@3
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *nCnt; // [sp+34h] [bp-424h]@12
  unsigned int i; // [sp+38h] [bp-420h]@5
  PROTO_NC_RAID_CHAT_REQ kProto; // [sp+3Ch] [bp-41Ch]@11
  char pdata; // [sp+40h] [bp-418h]@12
  unsigned int v34; // [sp+448h] [bp-10h]@1
  int v35; // [sp+454h] [bp-4h]@8
  int v36; // [sp+458h] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v22 = (unsigned int)&v36 ^ __security_cookie;
  v2 = pcChat;
  v3 = this;
  v25 = this;
  v27 = pcChat;
  if ( !pcChat || !*pcChat )
    return;
  v4 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  netcmd.protocol = -20417;
  PgNet::AddNetMsg(v4, &netcmd, 2);
  v5 = pcChat;
  v6 = pcChat + 1;
  do
    v7 = *v5++;
  while ( v7 );
  i = v5 - v6;
  if ( (signed int)(v5 - v6) > 128 )
    i = 128;
  listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
  v8 = operator new(0x70u);
  if ( !v8 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v9 = v8;
  *(_DWORD *)v8 = v8;
  *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  *((_DWORD *)v8 + 1) = v8;
  v10 = v3->m_pkChatDisplayWin;
  v35 = 0;
  if ( v10 )
  {
    v11 = ChatDisplayWin2::GetLinkItemList(v10, &result);
    LOBYTE(v35) = 1;
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v11);
    LOBYTE(v35) = 0;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
    if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
    {
      memset(&pdata, 0, 0x406u);
      v21 = (int)pcChat;
      nCnt = &v19;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &v19,
        &listLinkItem);
      if ( !GameFrameWork::ItemNameIsCorrect(v3, v19, (char *)v21) )
      {
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
        return;
      }
      v9 = *(void **)&listLinkItem;
      v13 = **(_DWORD **)&listLinkItem;
      nCnt = 0;
      if ( v13 != *(_DWORD *)&listLinkItem )
      {
        v14 = &pdata;
        do
        {
          nCnt = (std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)((char *)nCnt + 1);
          memcpy(v14 + 2, (const void *)(v13 + 10), 0x65u);
          *(_WORD *)v14 = *(_WORD *)(v13 + 8);
          v13 = *(_DWORD *)v13;
          v14 += 103;
        }
        while ( (void *)v13 != v9 );
        v3 = v25;
        v2 = v27;
      }
      v21 = 2;
      v20 = &kProto;
      v15 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
      kProto.itemLinkDataCount = (char)nCnt;
      kProto.nChatLen = i;
      PgNet::AddNetMsg(v15, &kProto, 2);
      PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v2, (unsigned __int8)kProto.nChatLen);
      if ( (signed int)nCnt > 0 )
      {
        v16 = &pdata;
        i = (unsigned int)nCnt;
        do
        {
          PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v16, 103);
          v16 = (char *)v16 + 103;
          --i;
        }
        while ( i );
      }
      v21 = 0;
      v20 = 0;
      goto LABEL_23;
    }
    v9 = *(void **)&listLinkItem;
  }
  v21 = 2;
  kProto.nChatLen = i;
  v12 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
  kProto.itemLinkDataCount = 0;
  PgNet::AddNetMsg(v12, &kProto, 2);
  v21 = (unsigned __int8)kProto.nChatLen;
  v20 = pcChat;
LABEL_23:
  PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v20, v21);
  v17 = *(void **)v9;
  *(_DWORD *)v9 = v9;
  *((_DWORD *)v9 + 1) = v9;
  if ( v17 != v9 )
  {
    do
    {
      v18 = *(void **)v17;
      operator delete(v17);
      v17 = v18;
    }
    while ( v18 != v9 );
  }
  operator delete(v9);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C2E20) --------------------------------------------------------
void __thiscall GameFrameWork::NcRaidWarningReq(GameFrameWork *this, char *pcChat)
{
  void *v2; // edi@1
  GameFrameWork *v3; // esi@1
  char *v4; // eax@3
  PgNet *v5; // ecx@7
  char *v6; // eax@7
  char *v7; // edx@7
  char v8; // cl@8
  void *v9; // eax@11
  void *v10; // ebx@12
  ChatDisplayWin2 *v11; // ecx@12
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v12; // eax@13
  PgNet *v13; // ecx@15
  int v14; // eax@18
  char *v15; // edx@19
  PgNet *v16; // ecx@22
  void *v17; // edi@23
  void *v18; // eax@26
  void *v19; // esi@27
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > v20; // [sp-20h] [bp-478h]@16
  void *v21; // [sp-18h] [bp-470h]@15
  int v22; // [sp-14h] [bp-46Ch]@15
  unsigned int v23; // [sp-10h] [bp-468h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > result; // [sp+0h] [bp-458h]@13
  std::exception thisa; // [sp+Ch] [bp-44Ch]@29
  GameFrameWork *v26; // [sp+18h] [bp-440h]@1
  char *_What; // [sp+1Ch] [bp-43Ch]@29
  char *v28; // [sp+20h] [bp-438h]@1
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > listLinkItem; // [sp+24h] [bp-434h]@11
  NETCOMMAND netcmd; // [sp+30h] [bp-428h]@7
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *nCnt; // [sp+34h] [bp-424h]@16
  unsigned int i; // [sp+38h] [bp-420h]@9
  PROTO_NC_RAID_CHAT_REQ kProto; // [sp+3Ch] [bp-41Ch]@15
  char pdata; // [sp+40h] [bp-418h]@16
  unsigned int v35; // [sp+448h] [bp-10h]@1
  int v36; // [sp+454h] [bp-4h]@12
  int v37; // [sp+458h] [bp+0h]@1

  v35 = (unsigned int)&v37 ^ __security_cookie;
  v23 = (unsigned int)&v37 ^ __security_cookie;
  v2 = pcChat;
  v3 = this;
  v26 = this;
  v28 = pcChat;
  if ( !g_kRaidinfo.m_bIsMeRaidLeader && !g_kRaidinfo.m_bIsMeRaidSubLeader )
  {
    v4 = TextData2::Get(0x1E9E7454u);
    GameFrameWork::AddSysMsg(v3, v4);
    return;
  }
  if ( pcChat && *pcChat )
  {
    v5 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    netcmd.protocol = -20414;
    PgNet::AddNetMsg(v5, &netcmd, 2);
    v6 = pcChat;
    v7 = pcChat + 1;
    do
      v8 = *v6++;
    while ( v8 );
    i = v6 - v7;
    if ( (signed int)(v6 - v7) > 128 )
      i = 128;
    listLinkItem.baseclass_0.baseclass_0._Mysize = 0;
    v9 = operator new(0x70u);
    if ( !v9 )
    {
      _What = 0;
      std::exception::exception(&thisa, (const char *const *)&_What);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
    v10 = v9;
    *(_DWORD *)v9 = v9;
    *(_DWORD *)&listLinkItem.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v9;
    *((_DWORD *)v9 + 1) = v9;
    v11 = v3->m_pkChatDisplayWin;
    v36 = 0;
    if ( v11 )
    {
      v12 = ChatDisplayWin2::GetLinkItemList(v11, &result);
      LOBYTE(v36) = 1;
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(&listLinkItem, v12);
      LOBYTE(v36) = 0;
      std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
      if ( listLinkItem.baseclass_0.baseclass_0._Mysize )
      {
        memset(&pdata, 0, 0x406u);
        v22 = (int)pcChat;
        nCnt = &v20;
        std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
          &v20,
          &listLinkItem);
        if ( !GameFrameWork::ItemNameIsCorrect(v3, v20, (char *)v22) )
        {
          std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listLinkItem);
          return;
        }
        v10 = *(void **)&listLinkItem;
        v14 = **(_DWORD **)&listLinkItem;
        nCnt = 0;
        if ( v14 != *(_DWORD *)&listLinkItem )
        {
          v15 = &pdata;
          do
          {
            nCnt = (std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)((char *)nCnt + 1);
            memcpy(v15 + 2, (const void *)(v14 + 10), 0x65u);
            *(_WORD *)v15 = *(_WORD *)(v14 + 8);
            v14 = *(_DWORD *)v14;
            v15 += 103;
          }
          while ( (void *)v14 != v10 );
          v3 = v26;
          v2 = v28;
        }
        v22 = 2;
        v21 = &kProto;
        v16 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
        kProto.itemLinkDataCount = (char)nCnt;
        kProto.nChatLen = i;
        PgNet::AddNetMsg(v16, &kProto, 2);
        PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v2, (unsigned __int8)kProto.nChatLen);
        if ( (signed int)nCnt > 0 )
        {
          v17 = &pdata;
          i = (unsigned int)nCnt;
          do
          {
            PgNet::AddNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v17, 103);
            v17 = (char *)v17 + 103;
            --i;
          }
          while ( i );
        }
        v22 = 0;
        v21 = 0;
        goto LABEL_26;
      }
      v10 = *(void **)&listLinkItem;
    }
    v22 = 2;
    kProto.nChatLen = i;
    v13 = (PgNet *)v3->m_spWorldMgrNet.m_pObject;
    kProto.itemLinkDataCount = 0;
    PgNet::AddNetMsg(v13, &kProto, 2);
    v22 = (unsigned __int8)kProto.nChatLen;
    v21 = pcChat;
LABEL_26:
    PgNet::SendNetMsg(&v3->m_spWorldMgrNet.m_pObject->baseclass_0, v21, v22);
    v18 = *(void **)v10;
    *(_DWORD *)v10 = v10;
    *((_DWORD *)v10 + 1) = v10;
    if ( v18 != v10 )
    {
      do
      {
        v19 = *(void **)v18;
        operator delete(v18);
        v18 = v19;
      }
      while ( v19 != v10 );
    }
    operator delete(v10);
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004C3120) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_AREAENTRY_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  AreaInfoMgr *v4; // eax@1
  Name8 v6; // [sp-28h] [bp-30h]@1
  int v7; // [sp-8h] [bp-10h]@1
  int v8; // [sp-4h] [bp-Ch]@1

  v3 = this;
  v4 = AreaInfoMgr::GetInstance();
  v8 = -1;
  v7 = 1;
  v4->m_pkFrameWork = (PgFrameWork *)v3;
  memcpy(&v6, pvData, sizeof(v6));
  AreaInfoMgr::AddRequestAreaTest(v4, v6, v7, v8);
  return iRevBytes;
}

//----- (004C3160) --------------------------------------------------------
int __thiscall GameFrameWork::On_NC_SCENARIO_AREALEAVE_REQ(GameFrameWork *this, int iRevBytes, void *pvData)
{
  GameFrameWork *v3; // esi@1
  AreaInfoMgr *v4; // eax@1
  Name8 v6; // [sp-28h] [bp-30h]@1
  int v7; // [sp-8h] [bp-10h]@1
  int v8; // [sp-4h] [bp-Ch]@1

  v3 = this;
  v4 = AreaInfoMgr::GetInstance();
  v8 = -1;
  v7 = 2;
  v4->m_pkFrameWork = (PgFrameWork *)v3;
  memcpy(&v6, pvData, sizeof(v6));
  AreaInfoMgr::AddRequestAreaTest(v4, v6, v7, v8);
  return iRevBytes;
}

//----- (004C31A0) --------------------------------------------------------
int __thiscall GameFrameWork::ProcessNetMsg(GameFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GameFrameWork *v5; // ebx@1
  int v6; // edi@1
  int v7; // eax@5
  CQuest *v8; // eax@52
  CQuest *v9; // eax@53
  char *v10; // eax@331
  char *v11; // eax@434
  CQuest *v12; // eax@454
  PartyWinInterface *v13; // ecx@612
  unsigned int v15; // [sp-4h] [bp-18h]@330

  v5 = this;
  v6 = 0;
  if ( ITask::ProcessNetMsgAll(iDepart, iCommand, iRevBytes, pvData) )
    v6 = iRevBytes;
  switch ( iDepart )
  {
    case 2:
      switch ( iCommand )
      {
        case 69:
          v7 = GameFrameWork::On_NC_MISC_GET_CHAT_BLOCK_SPAM_FILTER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 72:
          v7 = GameFrameWork::On_NC_MISC_CHAT_BLOCK_SPAMER_BLOCKTIME_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 16:
          v7 = GameFrameWork::On_MISC_RESTMINUTE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          *((_DWORD *)pvData + 2) = timeGetTime();
          return iRevBytes;
        case 19:
          v7 = GameFrameWork::On_NC_MISC_PINGTEST_TOOL_WM_CLIENT_ZONE_DB(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 28:
          v7 = GameFrameWork::On_NC_MISC_WEB_KEY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 66:
          v7 = GameFrameWork::On_NC_MISC_MISCERROR_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 73:
          v7 = GameFrameWork::On_NC_MISC_SERVER_TIME_NOTIFY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 96:
          v7 = GameFrameWork::On_NC_MISC_SPAMMER_REPORT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 98:
          v7 = GameFrameWork::On_NC_MISC_SPAMMER_CHAT_BAN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 103:
          v7 = GameFrameWork::On_NC_MISC_SPAMMER_RELEASE_CHAT_BAN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 108:
          v7 = GameFrameWork::On_NC_MISC_EVENTNPC_STANDSTART_CLIENT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 109:
          v7 = GameFrameWork::On_NC_MISC_EVENTNPC_STANDEND_CLIENT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 111:
          v7 = GameFrameWork::On_NC_MISC_ITEMSHOP_URL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 45:
      if ( iCommand == 13 )
      {
        v7 = GameFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_CMD(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 19 )
      {
        v7 = GameFrameWork::On_NC_USER_CONNECTION_CHANGE_CHAR_ID_ITEM_USE_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      break;
    case 3:
      switch ( iCommand )
      {
        case 23:
          v7 = GameFrameWork::On_NC_USER_CONNECTCUT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 20:
          v7 = GameFrameWork::On_NC_USER_LOGINWORLD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 21:
          v5->m_bBackCharSelect = 0;
          return v6;
        case 52:
          v7 = GameFrameWork::On_NC_USER_WILL_WORLD_SELECT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 28:
      if ( iCommand == 60 )
      {
$LN766:
        v6 = iRevBytes;
      }
      else
      {
        if ( iCommand == 68 )
        {
          v7 = GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_INIT_KEYMAP_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        }
        if ( iCommand == 70 )
        {
          v7 = GameFrameWork::On_NC_CHAR_OPTION_IMPROVE_INIT_GAMEOPTION_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        }
      }
      break;
    case 4:
      if ( iCommand <= 323 )
      {
        if ( iCommand == 323 )
        {
          v7 = GameFrameWork::On_NC_CHAR_ANI_FILE_CHECK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        }
        switch ( iCommand )
        {
          case 51:
            v7 = GameFrameWork::On_NC_CHAR_CENCHANGE_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 52:
            User::ChangeParam(&g_kUser, (PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *)pvData);
            return iRevBytes;
          case 53:
            v7 = GameFrameWork::On_NC_CHAR_CHANGEPARAMCHANGE_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 77:
            v7 = GameFrameWork::On_NC_CHAR_DEADMENU_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 79:
            v7 = GameFrameWork::On_NC_MAP_LINKSAME_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 80:
            v7 = GameFrameWork::On_NC_MAP_LINKOTHER_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 89:
            v7 = GameFrameWork::On_NC_CHAR_PROMOTE_ACK(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 90:
            v7 = GameFrameWork::On_NC_CHAR_SOMEONEPROMOTE_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 91:
            n = *(_BYTE *)pvData;
            return iRevBytes;
          case 110:
            v7 = GameFrameWork::On_NC_CHAR_SOMEONEGUILDCHANGE_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 150:
            v7 = GameFrameWork::On_NC_CHAR_SOMEONEGUILDACADEMYCHANGE_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 74:
            v7 = GameFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 111:
            User::GetMainCharBaseData(&g_kUser)->fame = *(_DWORD *)pvData;
            return iRevBytes;
          case 175:
            v7 = GameFrameWork::On_NC_CHAR_POLYMORPH_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 190:
            v7 = GameFrameWork::On_NC_CHAR_CLIENT_AUTO_PICK_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 189:
            v7 = GameFrameWork::On_NC_CHAR_CLIENT_AUTO_PICK_ACK(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 206:
            v8 = QuestDataMgr::GetQuest();
            CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(v8, (PROTO_NC_CHAR_QUEST_READ_CMD *)pvData);
            return iRevBytes;
          case 215:
            v9 = QuestDataMgr::GetQuest();
            CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(v9, (PROTO_NC_CHAR_QUEST_REPEAT_CMD *)pvData);
            return iRevBytes;
          case 212:
            v7 = GameFrameWork::On_NC_CHAR_MYSTERYVAULT_UI_STATE_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 198:
            v7 = GameFrameWork::On_NC_CHAR_ADMIN_LEVEL_INFORM_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 217:
            v7 = GameFrameWork::On_NC_CHAR_CLIENT_NEWBIE_GUIDE_VIEW_LIST_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 223:
            v7 = GameFrameWork::On_NC_CHAR_CHANGEBYCONDITION_PARAM_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 228:
            v7 = GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 231:
            v7 = GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_BOOKMARK_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 234:
            v7 = GameFrameWork::On_NC_CHAR_CLIENT_CARDCOLLECT_REWARD_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 237:
            v7 = GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_LIST_CLIENT_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 240:
            v7 = GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_CHECK_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 245:
            v7 = GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_CHANGE_DAY_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 246:
            v7 = GameFrameWork::On_NC_CHER_EVENT_ATTENDANCE_CHANGE_START_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 242:
            v7 = GameFrameWork::On_NC_CHAR_EVENT_ATTENDANCE_REWARD_ACK(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 278:
            v7 = GameFrameWork::On_NC_CHAR_TUTORIAL_STEP_REQ(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 291:
            v7 = GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_INFO_CLIENT_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 293:
            v7 = GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NORMAL_ITEM_ON_ACK(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 295:
            MinimonAutoItemUseWin::SetAutoUseBuffItem(v5->m_pkMinimonAutoItemUseWin, 0);
            return iRevBytes;
          case 297:
            v7 = GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_CHARGED_ITEM_ON_ACK(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 299:
            MinimonAutoItemUseWin::SetAutoUseChargedItem(v5->m_pkMinimonAutoItemUseWin, 0);
            return iRevBytes;
          case 300:
            v7 = GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_USE_BROAD_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 301:
            v7 = GameFrameWork::On_NC_CHAR_USEITEM_MINIMON_NOTICE_CMD(v5, iRevBytes, pvData);
            goto LABEL_659;
          case 303:
            v7 = GameFrameWork::On_NC_CHAR_CHARGEDBUFF_ERASE_ACK(v5, iRevBytes, pvData);
            goto LABEL_659;
          default:
            return v6;
        }
      }
      return v6;
    case 42:
      switch ( iCommand )
      {
        case 2:
          v7 = GameFrameWork::On_NC_CHAT_RESTRICT_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v7 = GameFrameWork::On_NC_CHAT_RESTRICT_ADD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_CHAT_RESTRICT_DEL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_CHAT_RESTRICT_DEL_ALL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 24:
      if ( iCommand == 2 )
      {
        v7 = GameFrameWork::On_NC_CT_SET_CURRENT_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 3 )
      {
        v7 = GameFrameWork::On_NC_CT_SET_SOMEONECHANGE_CMD(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 4 )
      {
        v7 = GameFrameWork::On_NC_CT_SET_CMD(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      break;
    case 26:
      switch ( iCommand )
      {
        case 2:
          v7 = GameFrameWork::On_NC_BOOTH_OPEN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v7 = GameFrameWork::On_NC_BOOTH_CLOSE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 17:
          PrivateStoreWin::SetPrivateStoreOpen(v5->m_pkPrivateStoreWin, 0);
          return iRevBytes;
        case 18:
          v7 = GameFrameWork::On_NC_BOOTH_SOMEONEINTERIORSTART_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 3:
          v7 = GameFrameWork::On_NC_BOOTH_SOMEONEOPEN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v7 = GameFrameWork::On_NC_BOOTH_SOMEONECLOSE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_BOOTH_ENTRY_SELL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_BOOTH_ENTRY_BUY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_BOOTH_ITEMTRADE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_BOOTH_REFRESH_SELL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_BOOTH_REFRESH_BUY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          v7 = GameFrameWork::On_NC_BOOTH_BUYREFRESH_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 20:
          v7 = GameFrameWork::On_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 22:
          v7 = GameFrameWork::On_NC_BOOTH_SEARCH_BOOTH_POSITION_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 23:
          v7 = GameFrameWork::On_NC_BOOTH_SEARCH_BOOTH_CLOSED_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 6:
      switch ( iCommand )
      {
        case 31:
          v7 = GameFrameWork::On_NC_MAP_MULTY_LINK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 32:
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v5->m_pkGateChannelWin->baseclass_0.baseclass_0.baseclass_0);
          return iRevBytes;
        case 21:
          v7 = GameFrameWork::On_NC_MAP_WING_SAVE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 23:
          v7 = GameFrameWork::On_NC_MAP_WING_FLY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v7 = GameFrameWork::On_NC_MAP_LOGOUT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_MAP_LINKSAME_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_MAP_LINKOTHER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v7 = GameFrameWork::On_NC_MAP_FREEPKZONE_ON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 19:
          BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) &= 0xFDu;
          return iRevBytes;
        case 24:
          v7 = GameFrameWork::On_NC_MAP_PARTYBATTLEZONE_ON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 25:
          BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) &= 0xFEu;
          return iRevBytes;
        case 40:
          BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) |= 4u;
          return iRevBytes;
        case 41:
          BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) &= 0xFBu;
          return iRevBytes;
        case 27:
          v7 = GameFrameWork::On_NC_MAP_TOWNPORTAL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 29:
          v7 = GameFrameWork::On_NC_MAP_LINK_FAIL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 39:
          v5->m_eFieldMapType = *(_DWORD *)pvData;
          break;
        case 42:
          GameFrameWork::On_NC_MAP_LINKEND_CLIENT_CMD(v5, iRevBytes, pvData);
          break;
        case 43:
          GameFrameWork::On_NC_MAP_CAN_USE_REVIVEITEM_CMD(v5, iRevBytes, pvData);
          break;
        case 44:
          MiniMapWin::ViewInDunLevelFlag(v5->m_pkMiniMapWin, *(ID_LEVEL_TYPE *)pvData);
          break;
        default:
          return v6;
      }
      return v6;
    case 7:
      switch ( iCommand )
      {
        case 6:
          v7 = GameFrameWork::On_NC_BRIEFINFO_LOGINCHARACTER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 7:
          v7 = GameFrameWork::On_NC_BRIEFINFO_CHARACTER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_BRIEFINFO_MOB_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_BRIEFINFO_REGENMOB_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 2:
          v7 = GameFrameWork::On_NC_BRIEFINFO_CHANGEDECORATE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 3:
          v7 = GameFrameWork::On_NC_BRIEFINFO_CHANGEUPGRADE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_BRIEFINFO_UNEQUIP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_BRIEFINFO_ITEMONFIELD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_BRIEFINFO_DROPEDITEM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_BRIEFINFO_MAGICFIELDINFO_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v7 = GameFrameWork::On_NC_BRIEFINFO_CHANGEWEAPON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_BRIEFINFO_BRIEFINFODELETE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          v7 = GameFrameWork::On_NC_BRIEFINFO_BUILDDOOR_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 16:
          v7 = GameFrameWork::On_NC_BRIEFINFO_DOOR_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 17:
          v7 = GameFrameWork::On_NC_BRIEFINFO_EFFECTBLAST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v7 = GameFrameWork::On_NC_BRIEFINFO_EFFECT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 19:
          CMiniHouseMgr::AddInfo((CMiniHouseMgr *)&g_kMiniHouseMgr, (PROTO_NC_BRIEFINFO_MINIHOUSEBUILD_CMD *)pvData);
          return iRevBytes;
        case 20:
          v7 = GameFrameWork::On_NC_BRIEFINFO_MINIHOUSE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 24:
          v7 = GameFrameWork::On_NC_BRIEFINFO_ABSTATE_CHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 25:
          v7 = GameFrameWork::On_NC_BRIEFINFO_ABSTATE_CHANGE_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 26:
          CharMgr::AddMover(&g_kCharMgr, (PROTO_NC_BRIEFINFO_REGENMOVER_CMD *)pvData);
          return iRevBytes;
        case 27:
          CharMgr::AddMover(&g_kCharMgr, (PROTO_NC_BRIEFINFO_MOVER_CMD *)pvData);
          return iRevBytes;
        case 28:
          CharMgr::AddPet(&g_kCharMgr, (PROTO_NC_BRIEFINFO_REGENPET_CMD *)pvData);
          return iRevBytes;
        case 29:
          CharMgr::AddPet(&g_kCharMgr, (PROTO_NC_BRIEFINFO_PET_CMD *)pvData);
          goto $LN766;
        default:
          return v6;
      }
    case 8:
      switch ( iCommand )
      {
        case 4:
        case 6:
        case 38:
          goto $LN766;
        case 2:
          v7 = GameFrameWork::On_NC_ACT_SOMEONECHAT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 24:
          v7 = GameFrameWork::On_NC_ACT_SOMEONEMOVEWALK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 26:
          v7 = GameFrameWork::On_NC_ACT_SOMEONEMOVERUN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 27:
          v7 = GameFrameWork::On_NC_ACT_MOVEFAIL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_ACT_SOMEONECHANGEMODE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 19:
          v7 = GameFrameWork::On_NC_ACT_SOMEONESTOP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 17:
          v7 = GameFrameWork::On_NC_ACT_NOTICE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 31:
          v7 = GameFrameWork::On_NC_ACT_SOMEONESHOUT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_ACT_SOMEONEWHISPER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_ACT_WHISPERFAIL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          v7 = GameFrameWork::On_NC_ACT_WHISPERSUCCESS_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 21:
          v7 = GameFrameWork::On_NC_ACT_PARTYCHAT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 22:
          v7 = GameFrameWork::On_NC_ACT_PARTYCHAT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 28:
          v7 = GameFrameWork::On_NC_ACT_NPCMENUOPEN_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 37:
          v7 = GameFrameWork::On_NC_ACT_SOMEEONEJUMP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_ACT_SOMEONEEMOTICON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 35:
          v7 = GameFrameWork::On_NC_ACT_SOMEONEEMOTICONSTOP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 41:
          v7 = GameFrameWork::On_NC_ACT_SOMEONEPITCHTENT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 44:
          v7 = GameFrameWork::On_NC_ACT_SOMEONEFOLDTENT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 40:
          v7 = GameFrameWork::On_NC_ACT_PITCHTENT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 43:
          v7 = GameFrameWork::On_NC_ACT_FOLDTENT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 61:
          GameFrameWork::ChangeCampMode(v5, 0, 4);
          return iRevBytes;
        case 62:
          v7 = GameFrameWork::On_NC_ACT_MOVESPEED_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 63:
          v7 = GameFrameWork::On_NC_ACT_RIDE_ON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 64:
          v7 = GameFrameWork::On_NC_ACT_SOMEONERIDE_ON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 66:
          v7 = GameFrameWork::On_NC_ACT_RIDE_OFF_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 67:
          v7 = GameFrameWork::On_NC_ACT_SOMEONERIDE_OFF_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 65:
          v7 = GameFrameWork::On_NC_ACT_RIDE_FAIL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 70:
          v7 = GameFrameWork::On_NC_ACT_RIDE_HUNGRY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 71:
          v7 = GameFrameWork::On_NC_ACT_CREATECASTBAR(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 72:
          CastingProgressWin::CastingFail(v5->m_pkCastingProgressBar);
          return iRevBytes;
        case 73:
          v7 = GameFrameWork::On_NC_ACT_REINFORCE_RUN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 74:
          v7 = GameFrameWork::On_NC_ACT_REINFORCE_STOP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 77:
          v7 = GameFrameWork::On_NC_ACT_REINFORCE_WALK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 76:
          v7 = GameFrameWork::On_NC_ACT_ROAR_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 104:
          v7 = GameFrameWork::On_NC_ACT_ACTIONBYITEM_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 105:
          v7 = GameFrameWork::On_NC_ACT_REINFORCERELOC_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 106:
          v7 = GameFrameWork::On_NC_ACT_REINFORCEMOVEBYPATH_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 111:
          v7 = GameFrameWork::On_NC_ACT_SETITEMHEALEFFECT(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 113:
          v7 = GameFrameWork::On_NC_ACT_AUTO_WAY_FINDING_USE_GATE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 114:
          v7 = GameFrameWork::On_NC_ACT_NPC_ACTION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 116:
          v7 = GameFrameWork::On_NC_ACT_ANIMATION_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 117:
          v7 = GameFrameWork::On_NC_ACT_ANIMATION_STOP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 118:
          v7 = GameFrameWork::On_NC_ACT_ANIMATION_LEVEL_CHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 130:
          v7 = GameFrameWork::On_NC_ACT_SHOW_CINEMATIC(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 131:
          v7 = GameFrameWork::On_NC_ACT_END_CINEMATIC(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 120:
          v7 = GameFrameWork::On_NC_ACT_PLAY_SOUND_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 119:
          v7 = GameFrameWork::On_NC_ACT_EFFECT_MESSAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 121:
          v7 = GameFrameWork::On_NC_ACT_SCRIPT_MSG_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 122:
          v7 = GameFrameWork::On_NC_ACT_OBJECT_SOUND_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 123:
          v7 = GameFrameWork::On_NC_ACT_OBJECT_EFFECT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 124:
          v7 = GameFrameWork::On_NC_ACT_EVENT_CODE_ACTION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 9:
      switch ( iCommand )
      {
        case 86:
          v7 = GameFrameWork::On_NC_BAT_SUMEONESKILLCUT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 83:
          v7 = GameFrameWork::On_NC_BAT_SOULCOLLECT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 78:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_HIT_OBJ_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 79:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_OBJ_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 80:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_HIT_FLD_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 81:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_FLD_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 82:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_HIT_DAMAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 87:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_HIT_BLAST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 2:
          v7 = GameFrameWork::On_NC_BAT_TARGETINFO_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 52:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_CAST_FAIL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 53:
          v5->m_kSkillCasting.eState = 3;
          return iRevBytes;
        case 54:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_CAST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 56:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_CASTCUT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 57:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_HIT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 58:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_HITTED_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 59:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_HIT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 61:
          v7 = GameFrameWork::On_NC_BAT_CEASE_FIRE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 60:
          v7 = GameFrameWork::On_NC_BAT_DOTDAMAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 66:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_OBJ_CAST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 67:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESKILLBASH_FLD_CAST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_BAT_EXPGAIN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_BAT_LEVELUP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_BAT_SOMEONELEVELUP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_BAT_HPCHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          v7 = GameFrameWork::On_NC_BAT_SPCHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 16:
          User::SetAP(&g_kUser, *(_DWORD *)pvData);
          return iRevBytes;
        case 17:
          v7 = GameFrameWork::On_NC_BAT_EXPLOST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 39:
          v7 = GameFrameWork::On_NC_BAT_ABSTATESET_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 41:
          v7 = GameFrameWork::On_NC_BAT_ABSTATEINFORM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 40:
          v7 = GameFrameWork::On_NC_BAT_ABSTATERESET_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 42:
          v7 = GameFrameWork::On_NC_BAT_ABSTATEINFORM_NOEFFECT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 63:
          v7 = GameFrameWork::On_NC_BAT_ASSIST_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 69:
          v7 = GameFrameWork::On_NC_BAT_SKILLBASH_CASTABORT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 70:
          v7 = GameFrameWork::On_NC_BAT_FAMEGAIN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 71:
          v7 = GameFrameWork::On_NC_BAT_SWING_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 72:
          v7 = GameFrameWork::On_NC_BAT_SWING_DAMAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 73:
          v7 = GameFrameWork::On_NC_BAT_SOMEONESWING_DAMAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 74:
          v7 = GameFrameWork::ON_NC_BAT_REALLYKILL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 85:
          GameFrameWork::On_NC_BAT_ABSTATE_ERASE_ACK(v5, iRevBytes, pvData);
          return v6;
        case 75:
          v7 = GameFrameWork::On_NC_BAT_PKINPKFIELD_CLIENT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 77:
          v7 = GameFrameWork::On_NC_BAT_TARGETCHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 89:
          v7 = GameFrameWork::On_NC_BAT_CLIENT_MOB_KILL_ANNOUNCE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 90:
          v7 = GameFrameWork::On_NC_BAT_AREADOTDAMAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 91:
          v7 = GameFrameWork::On_NC_BAT_REFLECTIONDAMAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 92:
          v7 = GameFrameWork::On_NC_BAT_TOGGLESKILL_ON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 93:
          v7 = GameFrameWork::On_NC_BAT_TOGGLESKILL_OFF_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 94:
          v7 = GameFrameWork::On_NC_BAT_SKILLBLAST_LIGHTNINGWAVE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 95:
          v7 = GameFrameWork::On_NC_BAT_LPCHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 12:
      switch ( iCommand )
      {
        case 58:
          goto $LN766;
        case 73:
          v7 = GameFrameWork::On_NC_ITEM_EQUIP_BELONGED_CANCEL_USE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 52:
          v7 = GameFrameWork::On_NC_ITEM_MH_FURNITURE_ENDURE_KIT_USE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 56:
          v7 = GameFrameWork::On_NC_ITEM_ITEMBREAK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 1:
          v7 = GameFrameWork::On_NC_ITEM_CELLCHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 2:
          v7 = GameFrameWork::On_NC_ITEM_EQUIPCHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_ITEM_BUY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v7 = GameFrameWork::On_NC_ITEM_SELL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_ITEM_RELOC_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_ITEM_DROP_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_ITEM_PICK_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 27:
          g_kInventory.m_bWaitingItemDropAck = 0;
          return iRevBytes;
        case 17:
          v7 = GameFrameWork::On_NC_ITEM_EQUIP_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 19:
          v7 = GameFrameWork::On_NC_ITEM_UNEQUIP_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 22:
          v7 = GameFrameWork::On_NC_ITEM_USE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 24:
          v7 = GameFrameWork::On_NC_ITEM_UPGRADE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 20:
          v7 = GameFrameWork::On_NC_ITEM_SOMEONEPICK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_ITEM_SPLIT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 29:
          v7 = GameFrameWork::On_NC_ITEM_DEPOSIT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 31:
          v7 = GameFrameWork::On_NC_ITEM_WITHDRAW_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_ITEM_CHARGEDINVENOPEN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 41:
          v7 = GameFrameWork::On_NC_ITEM_SOMEONEUSE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 43:
          v7 = GameFrameWork::On_NC_ITEM_DISMANTLE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 45:
          v7 = GameFrameWork::On_NC_ITEM_REWARDINVENOPEN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 46:
          v7 = GameFrameWork::On_NC_ITEM_REWARDINVENOPENFAIL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 59:
          v7 = GameFrameWork::On_NC_ITEM_DICE_GAME_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 61:
          v7 = GameFrameWork::On_NC_ITEM_DICE_GAME_START_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 62:
          v7 = GameFrameWork::On_NC_ITEM_DICE_GAME_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 63:
          v7 = GameFrameWork::On_NC_ITEM_DICE_GAME_RESULT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 65:
          v7 = GameFrameWork::On_NC_ITEM_ENCHANT_ADD_GEM_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 67:
          v7 = GameFrameWork::On_NC_ITEM_ENCHANT_REMOVE_GEM_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 69:
          v7 = GameFrameWork::On_NC_ITEM_ENCHANT_ADD_NEW_SOCKET_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 70:
          v7 = GameFrameWork::On_NC_ITEM_ENCHANT_SET_GEM_LOT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 75:
          v7 = GameFrameWork::On_NC_ITEM_AUTO_ARRANGE_INVEN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 79:
          v7 = GameFrameWork::On_NC_ITEM_USE_ACTIVESKILL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 82:
          v7 = GameFrameWork::On_NC_ITEM_MOVER_UPGRADE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 84:
          v7 = GameFrameWork::On_NC_ITEM_RANDOMOPTION_CHANGE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 98:
          v7 = GameFrameWork::On_NC_ITEM_RANDOMOPTION_CHANGE_ACCEPT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 86:
          v7 = GameFrameWork::On_NC_ITEM_CHAT_COLOR_CHANGE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 88:
          v7 = GameFrameWork::On_NC_ITEM_TERMEXTEND_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 90:
          v7 = GameFrameWork::On_NC_ITEM_REPURCHASE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 91:
          v7 = GameFrameWork::On_NC_ITEM_SELL_ITEM_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 92:
          v7 = GameFrameWork::On_NC_ITEM_SELL_ITEM_INSERT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 93:
          v7 = GameFrameWork::On_NC_ITEM_SELL_ITEM_DELETE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 95:
          v7 = GameFrameWork::On_NC_ITEM_CLASS_CHANGE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 96:
          v7 = GameFrameWork::On_NC_ITEM_OPENCLASSCHANGEMENU_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 104:
          v7 = GameFrameWork::On_NC_ITEM_MAPLINK_SCROLL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 106:
          v7 = GameFrameWork::On_NC_ITEM_MIX_ITEM_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 108:
          v7 = GameFrameWork::On_NC_ITEM_RANDOMOPTION_RECOVER_COUNT_LIMIT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 110:
          v7 = GameFrameWork::On_NC_ITEM_NEW_UPGRADE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 112:
          v7 = GameFrameWork::On_NC_ITEM_BRACELET_UPGRADE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 14:
      switch ( iCommand )
      {
        case 86:
          goto $LN766;
        case 3:
          v7 = GameFrameWork::On_NC_PARTY_JOINPROPOSE_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 7:
          v7 = GameFrameWork::On_NC_PARTY_JOIN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_PARTY_LEAVE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 21:
          v7 = GameFrameWork::On_NC_PARTY_KICKOFF_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          v7 = GameFrameWork::On_NC_PARTY_DISMISS_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 41:
          v7 = GameFrameWork::On_NC_PARTY_CHANGEMASTER_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_PARTY_MEMBER_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 61:
          Party::MemberLogin(&g_kParty, (PROTO_NC_PARTY_LOGININFO_CMD *)pvData);
          return iRevBytes;
        case 71:
          Party::MemberLogout(&g_kParty, (PROTO_NC_PARTY_LOGOUTINFO_CMD *)pvData);
          return iRevBytes;
        case 50:
          v7 = GameFrameWork::On_NC_PARTY_MEMBERINFORM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 51:
          v7 = GameFrameWork::On_NC_PARTY_MEMBERCLASS_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 73:
          v7 = GameFrameWork::On_NC_PARTY_MEMBERLOCATION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 74:
          v7 = GameFrameWork::On_NC_PARTY_MEMBERMAPOUT(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 76:
          v7 = GameFrameWork::On_NC_PARTY_ITEM_LOOTING_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 85:
          v7 = GameFrameWork::On_NC_PARTY_FINDER_LIST_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 81:
          v7 = GameFrameWork::On_NC_PARTY_FINDER_ADD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 83:
          v7 = GameFrameWork::On_NC_PARTY_FINDER_DELETE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 91:
          v7 = GameFrameWork::On_NC_PARTY_SET_LOOTER_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 92:
          v7 = GameFrameWork::On_NC_PARTY_SET_LOOTER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 93:
          v7 = GameFrameWork::On_NC_PARTY_SET_LOOTER_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 95:
          v7 = GameFrameWork::On_NC_PARTY_ITEM_JOIN_LOOTING_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 15:
      switch ( iCommand )
      {
        case 6:
          goto $LN766;
        case 3:
          Market::SetWeapon((PROTO_NC_MENU_SHOPOPEN_CMD *)pvData);
          GameFrameWork::OpenShopMenu(v5);
          return iRevBytes;
        case 4:
          Market::SetSkill((PROTO_NC_MENU_SHOPOPEN_CMD *)pvData);
          GameFrameWork::OpenSkillShopMenu(v5);
          return iRevBytes;
        case 1:
          v7 = GameFrameWork::On_NC_MENU_SERVERMENU_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          Market::SetSoulStone((PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD *)pvData);
          GameFrameWork::OpenSoulStoneShopMenu(v5);
          return iRevBytes;
        case 7:
          v15 = 779056276;
          goto LABEL_331;
        case 8:
          v7 = GameFrameWork::On_NC_MENU_OPENSTORAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          Market::SetWeapon((PROTO_NC_MENU_SHOPOPENTABLE_CMD *)pvData);
          GameFrameWork::OpenShopMenu(v5);
          return iRevBytes;
        case 10:
          Market::SetSkill((PROTO_NC_MENU_SHOPOPENTABLE_CMD *)pvData);
          GameFrameWork::OpenSkillShopMenu(v5);
          return iRevBytes;
        case 11:
          v7 = GameFrameWork::On_NC_MENU_SHOPOPENTABLE_ITEM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_MENU_RANDOMOPTION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v5->m_pkServerMenuWin->baseclass_0.baseclass_0.baseclass_0);
          v6 = iRevBytes;
          break;
        case 16:
          GameFrameWork::IDRankingShowWin(v5, 1);
          v6 = iRevBytes;
          break;
        default:
          return v6;
      }
      return v6;
    case 18:
      switch ( iCommand )
      {
        case 43:
          goto $LN766;
        case 41:
          ReviveMenuWin::EnableBtns(v5->m_pkReviveMenuWin, BTN_INDEX_REVIVE_FROM_CLERIC, 1);
          return iRevBytes;
        case 4:
          v7 = GameFrameWork::On_NC_SKILL_SKILL_LEARNSUC_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v15 = -2002271783;
          goto LABEL_331;
        case 15:
          v7 = GameFrameWork::On_NC_SKILL_EMPOW_RESET_SUC_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v15 = 877163883;
          goto LABEL_331;
        case 20:
          v7 = GameFrameWork::On_NC_SKILL_EMPOWALLOC_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 16:
          v7 = GameFrameWork::On_NC_SKILL_EMPOWPOINT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          v7 = GameFrameWork::On_NC_SKILL_REVIVE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 31:
          v7 = GameFrameWork::On_NC_SKILL_SOMEONEREVIVE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_SKILL_COOLTIME_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 35:
          v7 = GameFrameWork::On_NC_SKILL_PRODUCTFIELD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 39:
          v7 = GameFrameWork::On_NC_SKILL_UNLEARN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 40:
          v7 = GameFrameWork::On_NC_SKILL_WARP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 44:
          v7 = GameFrameWork::On_NC_SKILL_ITEMACTIONCOOLTIME_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 45:
          v7 = GameFrameWork::On_NC_SKILL_JUMP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 19:
      switch ( iCommand )
      {
        case 23:
        case 33:
          goto $LN766;
        case 2:
          v7 = GameFrameWork::On_NC_TRADE_PROPOSE_ASK_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_TRADE_PROPOSENO_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_TRADE_PROPOSE_CANCELED_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_TRADE_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_TRADE_CANCEL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_TRADE_CANCEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v15 = 1253278094;
          goto LABEL_331;
        case 15:
          v7 = GameFrameWork::On_NC_TRADE_UPBOARD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 16:
          v7 = GameFrameWork::On_NC_TRADE_OPPOSITUPBOARD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v15 = -1800239915;
          goto LABEL_331;
        case 19:
          v7 = GameFrameWork::On_NC_TRADE_DOWNBOARD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 20:
          UserTrade::RemoveOpp(*(_BYTE *)pvData);
          return iRevBytes;
        case 22:
          v15 = -1727014436;
          goto LABEL_331;
        case 24:
          v7 = GameFrameWork::On_NC_TRADE_OPPOSITCENBOARDING_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 26:
          v15 = -1802078511;
          goto LABEL_331;
        case 27:
          UserTrade::LockMy(1);
          return iRevBytes;
        case 28:
          UserTrade::LockOpp(1);
          return iRevBytes;
        case 32:
          v15 = -1998010431;
          goto LABEL_331;
        case 34:
          UserTrade::AgreeOpp(1);
          return iRevBytes;
        case 36:
          v7 = GameFrameWork::On_NC_TRADE_TRADECOMPLETE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 35:
          v7 = GameFrameWork::On_NC_TRADE_TRADEFAIL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 29:
          v7 = GameFrameWork::On_NC_TRADE_BOARDUNLOCK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          UserTrade::LockOpp(0);
          v6 = iRevBytes;
          break;
        default:
          return v6;
      }
      return v6;
    case 20:
      switch ( iCommand )
      {
        case 3:
          v7 = GameFrameWork::On_NC_SOULSTONE_HP_BUY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_SOULSTONE_SP_BUY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v15 = -755182111;
          goto LABEL_331;
        case 8:
          v7 = GameFrameWork::On_NC_SOULSTONE_HP_USESUC_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_SOULSTONE_SP_USESUC_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v15 = -436420129;
          goto LABEL_331;
        case 11:
          v7 = GameFrameWork::On_NC_SOULSTONE_HP_SOMEONEUSE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_SOULSTONE_SP_SOMEONEUSE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 21:
      switch ( iCommand )
      {
        case 2:
          v7 = GameFrameWork::On_NC_FRIEND_SET_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 3:
          v7 = GameFrameWork::On_NC_FRIEND_SET_CONFIRM_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v7 = GameFrameWork::On_NC_FRIEND_DEL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 7:
          v7 = GameFrameWork::On_NC_FRIEND_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_FRIEND_LOGIN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_FRIEND_LOGOUT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_FRIEND_ADD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_FRIEND_REFUSE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_FRIEND_DEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_FRIEND_MAP_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_FRIEND_PARTY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          v7 = GameFrameWork::On_NC_FRIEND_LEVEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          v7 = GameFrameWork::On_NC_FRIEND_POINT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 32:
          v7 = GameFrameWork::On_NC_FRIEND_FIND_FRIENDS_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 34:
          v7 = GameFrameWork::On_NC_FRIEND_UES_FRIEND_POINT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 36:
          v7 = GameFrameWork::On_NC_FRIEND_SOMEONE_GET_SPECIALITEM_WORLD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 37:
          v7 = GameFrameWork::On_NC_FRIEND_GET_DIFF_FRIEND_POINT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 22:
      switch ( iCommand )
      {
        case 10:
        case 12:
        case 25:
          goto $LN766;
        case 4:
          KingdomQuestWin::SetKQuestStatus(v5->m_pkKingDomQuest, (PROTO_NC_KQ_STATUS_ACK *)pvData);
          return iRevBytes;
        case 28:
          v7 = GameFrameWork::On_NC_KQ_LIST_TIME_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 31:
          v7 = GameFrameWork::On_NC_KQ_LIST_UPDATE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 29:
          v7 = GameFrameWork::On_NC_KQ_LIST_ADD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          v7 = GameFrameWork::On_NC_KQ_LIST_DELETE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v7 = GameFrameWork::On_NC_KQ_JOIN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_KQ_JOIN_CANCEL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_KQ_NOTIFY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v7 = GameFrameWork::On_Nc_Kq_Complete_Cmd(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 19:
          v7 = GameFrameWork::On_Nc_Kq_Fail_Cmd(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 20:
          v7 = GameFrameWork::On_NC_KQ_SCORE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 24:
          v7 = GameFrameWork::On_NC_KQ_RESTDEADNUM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_KQ_SCORE_SIMPLE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 60:
          v7 = GameFrameWork::On_NC_KQ_SCORE_BOARD_INFO_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 35:
          v7 = GameFrameWork::ON_NC_KQ_NOREWARD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 34:
          v7 = GameFrameWork::ON_NC_KQ_MOBKILLNUMBER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 36:
          v7 = GameFrameWork::ON_NC_KQ_JOINING_ALARM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 37:
          v7 = GameFrameWork::ON_NC_KQ_JOINING_ALARM_END_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 38:
          v7 = GameFrameWork::ON_NC_KQ_JOINING_ALARM_LIST(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 40:
          v7 = GameFrameWork::On_NC_KQ_VOTE_START_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 41:
          v7 = GameFrameWork::On_NC_KQ_VOTE_VOTING_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 43:
          v7 = GameFrameWork::On_NC_KQ_VOTE_VOTING_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 44:
          v7 = GameFrameWork::On_NC_KQ_VOTE_RESULT_SUC_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 45:
          v7 = GameFrameWork::On_NC_KQ_VOTE_RESULT_FAIL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 46:
          v7 = GameFrameWork::On_NC_KQ_VOTE_CANCEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 47:
          v7 = GameFrameWork::On_NC_KQ_VOTE_BAN_MSG_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 48:
          v11 = TextData2::Get(0x25394A21u);
          GameFrameWork::AddSysMsg(v5, v11);
          return iRevBytes;
        case 50:
          v7 = GameFrameWork::On_NC_KQ_JOIN_LIST_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 53:
          v7 = GameFrameWork::On_NC_KQ_VOTE_START_CHECK_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 54:
          v7 = GameFrameWork::On_NC_KQ_SCORE_INFO_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 56:
          v7 = GameFrameWork::On_NC_KQ_TEAM_SELECT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 57:
          v7 = GameFrameWork::On_NC_KQ_TEAM_SELECT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 58:
          g_pkMainChar->m_byKQTeamType = *(_BYTE *)pvData;
          return iRevBytes;
        case 61:
          v7 = GameFrameWork::On_NC_KQ_WINTER_EVENT_2014_SCORE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 23:
      if ( iCommand == 2 )
      {
        v7 = GameFrameWork::On_NC_WT_LICENSE_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 3 )
      {
        v15 = -2047229489;
LABEL_331:
        v10 = TextData::Get(v15);
        GameFrameWork::AddSysMsg(v5, v10);
LABEL_332:
        v6 = iRevBytes;
      }
      else
      {
        if ( iCommand == 13 )
        {
          Inventory::UpdateWeaponTitleWhenMobDead(&g_kInventory, *(_WORD *)pvData);
          v6 = iRevBytes;
        }
      }
      break;
    case 25:
      if ( iCommand == 2 )
      {
        v7 = GameFrameWork::On_NC_ANNOUNCE_W2C_CMD(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      break;
    case 17:
      switch ( iCommand )
      {
        case 16:
          goto $LN766;
        case 19:
          v7 = GameFrameWork::On_NC_QUEST_ERR(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 1:
          v7 = GameFrameWork::On_NC_QUEST_SCRIPT_CMD_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_QUEST_GIVE_UP_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v12 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_QUEST_CLIENT_SCENARIO_DONE_ACK(v12, (PROTO_NC_QUEST_CLIENT_SCENARIO_DONE_ACK *)pvData);
          return iRevBytes;
        case 13:
          v7 = GameFrameWork::On_NC_QUEST_NOTIFY_MOB_KILL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v15 = -1862477369;
          goto LABEL_331;
        case 30:
          v7 = GameFrameWork::On_NC_QUEST_RESET_TIME_CLIENT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 21:
          v7 = GameFrameWork::On_NC_QUEST_START_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 23:
          v7 = GameFrameWork::On_NC_QUEST_READ_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 32:
          v7 = GameFrameWork::On_NC_QUEST_JOBDUNGEON_LINK_FAIL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 27:
      switch ( iCommand )
      {
        case 2:
        case 3:
          goto $LN766;
        case 17:
          v7 = GameFrameWork::On_NC_SCENARIO_NPCCHAT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v7 = GameFrameWork::On_NC_SCENARIO_MESSAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 1:
          v7 = GameFrameWork::On_NC_SCENARIO_RUNEFFECT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_SCENARIO_MESSAGENOTICE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_SCENARIO_DOORSTATE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_SCENARIO_OBJTYPECHANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v7 = GameFrameWork::On_NC_SCENARIO_AREAENTRY_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 7:
          v7 = GameFrameWork::On_NC_SCENARIO_AREALEAVE_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_SCENARIO_LIGHT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_SCENARIO_CHATWIN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_SCENARIO_ANIMATE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_SCENARIO_FOG_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          CharMgr::UpdateNpcActionEvent(&g_kCharMgr, (PROTO_NC_SCENARIO_PLAYERLIKEMOB_ANIMATE_CMD *)pvData);
          return iRevBytes;
        case 16:
          v7 = GameFrameWork::On_NC_ONGAMENET_OX_EVENT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 20:
          v7 = GameFrameWork::On_NC_SCENARIO_CAMERA_MOVE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 21:
          v7 = GameFrameWork::On_NC_SCENARIO_SCRIPTMESSAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 22:
          v7 = GameFrameWork::On_NC_SCENARIO_TIMER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 23:
          v7 = GameFrameWork::On_NC_SCENARIO_MAPMARK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 24:
          v7 = GameFrameWork::On_NC_SCENARIO_MAP_OBJECT_CONTROL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 25:
          v7 = GameFrameWork::On_NC_SCENARIO_DIALOG_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 26:
          v7 = GameFrameWork::On_NC_SCENARIO_TOPVIEW_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 27:
          v7 = GameFrameWork::On_NC_SCENARIO_SYSTEM_MESSAGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 28:
          v7 = GameFrameWork::On_NC_SCENARIO_HIDE_OTHER_PLAYER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 29:
          v7 = GameFrameWork::On_NC_SCENARIO_EFFECT_TIMER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          v7 = GameFrameWork::On_NC_SCENARIO_DIRECTIONAL_ARROW_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 31:
          EffectMgr::RemoveClientEff(&g_kEffectMgr, 1u);
          return iRevBytes;
        case 32:
          v7 = GameFrameWork::On_NC_SCENARIO_RANKING_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_SCENARIO_TIMER_START_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 34:
          v7 = GameFrameWork::On_NC_SCENARIO_TIMER_END_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 32:
      if ( iCommand == 2 )
      {
        v7 = GameFrameWork::On_NC_REPORT_ADD_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 4 )
      {
        v7 = GameFrameWork::On_NC_REPORT_CANCEL_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 6 )
      {
        v7 = GameFrameWork::On_NC_REPORT_GET_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      break;
    case 31:
      switch ( iCommand )
      {
        case 2:
          v7 = GameFrameWork::On_NC_PRISON_ADD_GM_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 3:
          v7 = GameFrameWork::On_NC_PRISON_OK_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v7 = GameFrameWork::On_NC_PRISON_END_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_PRISON_UNDOING_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_PRISON_ALTER_GM_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 29:
      switch ( iCommand )
      {
        case 117:
          v7 = GameFrameWork::On_NC_GUILD_CHAT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 116:
          v7 = GameFrameWork::On_NC_GUILD_CHAT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 146:
          v7 = GameFrameWork::On_NC_GUILD_STORAGEOPEN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 141:
          v7 = GameFrameWork::ON_NC_GUILD_MOBGUILD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 38:
      if ( iCommand == 105 )
      {
        v7 = GameFrameWork::On_NC_GUILD_ACADEMY_CHAT_CMD(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 106 )
      {
        v7 = GameFrameWork::On_NC_GUILD_ACADEMY_CHAT_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      if ( iCommand == 110 )
      {
        v7 = GameFrameWork::On_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_ACK(v5, iRevBytes, pvData);
        goto LABEL_659;
      }
      break;
    case 35:
      switch ( iCommand )
      {
        case 2:
        case 78:
        case 81:
        case 84:
        case 87:
        case 88:
          goto $LN766;
        case 5:
          CMiniHouseMgr::AddInfo(
            (CMiniHouseMgr *)&g_kMiniHouseMgr,
            (PROTO_NC_BRIEFINFO_MINIHOUSEBUILD_CMD *)((char *)pvData + 2));
          return iRevBytes;
        case 4:
          v7 = GameFrameWork::On_NC_MINIHOUSE_BUILDING_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 35:
          v7 = GameFrameWork::On_NC_MINIHOUSE_CREATE_FURNITURE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FUNICHER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 32:
          v7 = GameFrameWork::On_NC_MINIHOUSE_REARRANGE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_MINIHOUSE_REARRANGE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 25:
          v7 = GameFrameWork::On_NC_MINIHOUSE_EXIT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 36:
          v7 = GameFrameWork::On_NC_MINIHOUSE_CREATE_FURNITURE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 38:
          v7 = GameFrameWork::On_NC_MINIHOUSE_DELETE_FURNITURE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 39:
          v7 = GameFrameWork::On_NC_MINIHOUSE_DELETE_FURNITURE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FUNITUREINFOCOMPLETE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 28:
          v7 = GameFrameWork::On_NC_MINIHOUSE_ARRANGEMODE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 27:
          v7 = GameFrameWork::On_NC_MINIHOUSE_ARRANGEMODE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FUNICHERINVEN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_MINIHOUSE_LOGINCOMPLETE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_MINIHOUSE_LOGINCOMPLETE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_MINIHOUSE_LOGOUTCOMPLETE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 17:
          v7 = GameFrameWork::On_NC_MINIHOUSE_VISIT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          v7 = GameFrameWork::On_NC_MINIHOUSE_VISITREADY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 41:
          v7 = GameFrameWork::On_NC_MINIHOUSE_COMPULSIONMOVETO_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 42:
          v7 = GameFrameWork::On_NC_MINIHOUSE_COMPULSIONMOVETO_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 44:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_PASSWORD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 45:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_PASSWORD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 47:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_TITLE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 48:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_TITLE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 49:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_OUTSIDE_TITLE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 51:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_MAXENTERNUM_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 52:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_MAXENTERNUM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 56:
          v7 = GameFrameWork::On_NC_MINIHOUSE_OWNERBLOG_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 54:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_OWNERBLOG_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 62:
          v7 = GameFrameWork::On_NC_MINIHOUSE_CHAR_ACTION_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 63:
          v7 = GameFrameWork::On_NC_MINIHOUSE_CHAR_ACTION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 65:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EFFECT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 66:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EFFECT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 73:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_NOTIFY_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 74:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_NOTIFY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 68:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_ITEM_INFO_OPEN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 69:
          v7 = GameFrameWork::On_NC_MINIHOUSE_MODIFY_ITEM_INFO_OPEN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 75:
          v7 = GameFrameWork::On_NC_MINIHOUSE_PORTAL_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 76:
          v7 = GameFrameWork::On_NC_MINIHOUSE_PORTAL_ADD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 79:
          v7 = GameFrameWork::On_NC_MINIHOUSE_PORTAL_DEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 97:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FURNITURE_ENDURE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 99:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 100:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 102:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 103:
          v7 = GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 36:
      switch ( iCommand )
      {
        case 14:
        case 15:
          goto $LN766;
        case 3:
          v7 = GameFrameWork::On_NC_CHARGED_BUFFSTART_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_CHARGED_BUFFTERMINATE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_CHARGED_DELETEWEAPONTITLE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 12:
          v7 = GameFrameWork::On_NC_CHARGED_STAT_INITIALIZE_SUC_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_CHARGED_SKILLEMPOW_INITIALIZE_SUC_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 16:
          v7 = GameFrameWork::On_NC_CHARGED_BOOTHSLOTSIZE_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 37:
      switch ( iCommand )
      {
        case 2:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_DEL_DOWN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 7:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_DEL_UP_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_CONFIRM_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 24:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_DEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 21:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_ADD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 22:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_LOGIN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 25:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_LEVEL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 23:
          if ( !pvData )
            goto LABEL_332;
          HolyPromiseWin::SetLogOut(v5->m_pkHolyPromiseWin, (Name5 *)pvData);
          return iRevBytes;
        case 20:
          HolyPromiseWin::AddHolyPromiseList(v5->m_pkHolyPromiseWin, (PROTO_NC_HOLY_PROMISE_LIST_CMD *)pvData);
          return iRevBytes;
        case 26:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_REWARD_ITEM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 27:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_REWARD_MONEY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 3:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_SET_UP_CONFIRM_ING(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 61:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_GET_CEN_REWARD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 65:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_WITHDRAW_CEN_REWARD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 69:
          v7 = GameFrameWork::On_NC_HOLY_PROMISE_CLIENT_GET_REMAIN_MONEY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 44:
      switch ( iCommand )
      {
        case 55:
        case 60:
          goto $LN766;
        case 2:
          v7 = GameFrameWork::On_NC_RAID_MAKE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 3:
          v7 = GameFrameWork::On_NC_RAID_MAKE_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v7 = GameFrameWork::On_NC_RAID_DISMISS_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 5:
          v7 = GameFrameWork::On_NC_RAID_MEMBER_LIST_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 30:
          v7 = GameFrameWork::On_NC_RAID_LOGININFO_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 32:
          v7 = GameFrameWork::On_NC_RAID_LOGOUTINFO_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_RAID_MAPOUT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_RAID_LOOTING_TYPE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_RAID_LOOTING_TYPE_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_RAID_INVITATION_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 14:
          v7 = GameFrameWork::On_NC_RAID_INVITATION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 16:
          v7 = GameFrameWork::On_NC_RAID_INVITATION_ANSWER_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 17:
          v7 = GameFrameWork::On_NC_RAID_INVITATION_ANSWER_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v7 = GameFrameWork::On_NC_RAID_MEMBER_JOIN_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 21:
          v7 = GameFrameWork::On_NC_RAID_LEAVE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 22:
          v7 = GameFrameWork::On_NC_RAID_LEAVE_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 25:
          v7 = GameFrameWork::On_NC_RAID_VANISH_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 26:
          v7 = GameFrameWork::On_NC_RAID_VANISH_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 27:
          v7 = GameFrameWork::On_NC_RAID_VANISH_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 34:
          v7 = GameFrameWork::On_NC_RAID_MEMBERINFORM_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 35:
          v7 = GameFrameWork::On_NC_RAID_MEMBERCLASS_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 38:
          v7 = GameFrameWork::On_NC_RAID_LOCATION_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 40:
          v7 = GameFrameWork::On_NC_RAID_SLOT_MOVE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 41:
          v7 = GameFrameWork::On_NC_RAID_SLOT_MOVE_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 44:
          v7 = GameFrameWork::On_NC_RAID_SET_LEADER_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 45:
        case 50:
          v13 = v5->m_pkPartyWinInterface;
          if ( !v13 )
            goto LABEL_332;
          PartyWinInterface::Update(v13);
          return iRevBytes;
        case 46:
          v7 = GameFrameWork::On_NC_RAID_SET_LEADER_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 49:
          v7 = GameFrameWork::On_NC_RAID_SET_SUB_LEADER_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 51:
          v7 = GameFrameWork::On_NC_RAID_SET_SUB_LEADER_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 54:
          v7 = GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 56:
          v7 = GameFrameWork::On_NC_RAID_DEL_SUB_LEADER_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 59:
          v7 = GameFrameWork::On_NC_RAID_SET_LOOTER_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 61:
          v7 = GameFrameWork::On_NC_RAID_SET_LOOTER_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 64:
          v7 = GameFrameWork::On_NC_RAID_CHAT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 65:
          v7 = GameFrameWork::On_NC_RAID_CHAT_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 67:
          v7 = GameFrameWork::On_NC_RAID_WARNING_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 68:
          v7 = GameFrameWork::On_NC_RAID_WARNING_BROAD_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 41:
      switch ( iCommand )
      {
        case 12:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_LEVEL_SELECT_MENU_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 18:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_RESULT_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 24:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_LIST_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 33:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGEDEALT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 34:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_DAMAGETAKEN_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 35:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_HEALINGDONE_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 36:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_TAB_MYRANK_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 37:
          v7 = GameFrameWork::On_NC_INSTANCE_DUNGEON_RANK_NEW_RANK_MSG(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 40:
      if ( iCommand == 6 )
      {
        v7 = GameFrameWork::On_NC_PROMOTION_REWARD_ITEM_CMD(v5, iRevBytes, pvData);
LABEL_659:
        v6 = v7;
      }
      break;
    case 49:
      switch ( iCommand )
      {
        case 5:
          v7 = GameFrameWork::On_NC_COLLECT_PEEPING_COLLECT_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v7 = GameFrameWork::On_NC_COLLECT_PEEPING_COLLECT_BOOKMARK_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 7:
          v7 = GameFrameWork::On_NC_COLLECT_CARDOPEN_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 11:
          v7 = GameFrameWork::On_NC_COLLECT_CARDREGIST_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 15:
          v7 = GameFrameWork::On_NC_COLLECT_BOOKMARK_REGIST_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 19:
          v7 = GameFrameWork::On_NC_COLLECT_REWARD_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 51:
      switch ( iCommand )
      {
        case 2:
          v7 = GameFrameWork::On_NC_MOVER_RIDE_ON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 3:
          v7 = GameFrameWork::On_NC_MOVER_RIDE_ON_FAIL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 4:
          v7 = GameFrameWork::On_NC_MOVER_SOMEONE_RIDE_ON_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 6:
          v7 = GameFrameWork::On_NC_MOVER_RIDE_OFF_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 7:
          v7 = GameFrameWork::On_NC_MOVER_RIDE_OFF_FAIL_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_MOVER_SOMEONE_RIDE_OFF_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 9:
          v7 = GameFrameWork::On_NC_MOVER_FEEDING_ERROR_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_MOVER_HUNGRY_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 13:
          v7 = GameFrameWork::On_NC_MOVER_MOVESPEED_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    case 53:
      switch ( iCommand )
      {
        case 5:
          v7 = GameFrameWork::On_NC_PET_ASK_NEW_NAME_REQ(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 8:
          v7 = GameFrameWork::On_NC_PET_SET_NAME_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 19:
          v7 = GameFrameWork::On_NC_PET_SET_NAME_CMD(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 10:
          v7 = GameFrameWork::On_NC_PET_SET_NAME_CANCEL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        case 17:
          v7 = GameFrameWork::On_NC_PET_USE_ITEM_FAIL_ACK(v5, iRevBytes, pvData);
          goto LABEL_659;
        default:
          return v6;
      }
    default:
      return v6;
  }
  return v6;
}

//----- (004C6E90) --------------------------------------------------------
FadeObjectMgr *__cdecl Singleton<FadeObjectMgr>::getInstance()
{
  FadeObjectMgr *result; // eax@1
  void *v1; // eax@2

  result = (FadeObjectMgr *)LODWORD(Singleton<FadeObjectMgr>::m_pInstance);
  if ( !LODWORD(Singleton<FadeObjectMgr>::m_pInstance) )
  {
    v1 = operator new(0x1Cu);
    if ( v1 )
    {
      FadeObjectMgr::FadeObjectMgr(result);
      LODWORD(Singleton<FadeObjectMgr>::m_pInstance) = result;
    }
    else
    {
      result = 0;
      LODWORD(Singleton<FadeObjectMgr>::m_pInstance) = 0;
    }
  }
  return result;
}

//----- (004C6F10) --------------------------------------------------------
AbnormalStateInfo *__cdecl IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  GameFrameWork *v2; // esi@1
  AbnormalStateInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                          ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= LOWORD(v2->m_ResList[2].m_eAspect)
    && (v4 = *(_DWORD *)&v2->m_ResList[2].m_bCheckAdd, *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(AbnormalStateInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}

//----- (004C6F60) --------------------------------------------------------
AbnormalStateViewInfo *__cdecl IIDTableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  AbnormalStateViewInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(AbnormalStateViewInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (004C6FB0) --------------------------------------------------------
ActiveSkillViewInfo *__cdecl IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  ActiveSkillViewInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(ActiveSkillViewInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (004C7000) --------------------------------------------------------
int __thiscall Name5::operator__(Name5 *this, Name5 *nm)
{
  return *(_DWORD *)&this->n5_name[0] != *(_DWORD *)&nm->n5_name[0]
      || *(_DWORD *)&this->n5_name[4] != *(_DWORD *)&nm->n5_name[4]
      || *(_DWORD *)&this->n5_name[8] != *(_DWORD *)&nm->n5_name[8]
      || *(_DWORD *)&this->n5_name[12] != *(_DWORD *)&nm->n5_name[12]
      || *(_DWORD *)&this->n5_name[16] != *(_DWORD *)&nm->n5_name[16];
}

//----- (004C7040) --------------------------------------------------------
void __cdecl STRING_TO_NAME(char *pcString, Name5 *kName5)
{
  char *v2; // eax@1
  char v3; // cl@3
  char acTemp[20]; // [sp+Ch] [bp-18h]@2
  unsigned int v5; // [sp+20h] [bp-4h]@1
  int v6; // [sp+24h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = pcString;
  if ( strlen(pcString) < 0x13 )
  {
    *(_DWORD *)acTemp = 0;
    *(_DWORD *)&acTemp[4] = 0;
    *(_DWORD *)&acTemp[8] = 0;
    *(_DWORD *)&acTemp[12] = 0;
    *(_DWORD *)&acTemp[16] = 0;
    do
    {
      v3 = *v2;
      v2[acTemp - pcString] = *v2;
      ++v2;
    }
    while ( v3 );
    *(_QWORD *)&kName5->n5_name[12] = 0i64;
    *(_QWORD *)&kName5->n5_name[4] = 0i64;
    *(_DWORD *)&kName5->n5_name[0] = 0;
    strncpy(kName5->n5_name, acTemp, 0x14u);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004C70C0) --------------------------------------------------------
bool __cdecl CharClass::IsKindOf(char kClassID, char kBaseClassID)
{
  bool result; // al@1

  result = kClassID;
  if ( kClassID )
  {
    switch ( kClassID )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        result = 1 == kBaseClassID;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        result = 6 == kBaseClassID;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        result = 11 == kBaseClassID;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        result = 16 == kBaseClassID;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        result = 21 == kBaseClassID;
        break;
      case 0x1A:
      case 0x1B:
        result = 26 == kBaseClassID;
        break;
      default:
        result = kBaseClassID == 0;
        break;
    }
  }
  return result;
}

//----- (004C71A0) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetDirToPosition(Char *this, NiPoint3 *result, NiPoint3 *rkPos)
{
  Char *v3; // esi@1
  NiPoint3 *v4; // eax@1
  float v5; // edx@2
  float v6; // ecx@2
  float v7; // ecx@3
  float v8; // edx@3
  NiPoint3 kMyDir; // [sp+4h] [bp-24h]@1
  NiPoint3 kMyPos; // [sp+10h] [bp-18h]@1
  float v11; // [sp+1Ch] [bp-Ch]@1
  float v12; // [sp+20h] [bp-8h]@1
  float v13; // [sp+24h] [bp-4h]@1
  float rkPosa; // [sp+34h] [bp+Ch]@1
  float rkPosb; // [sp+34h] [bp+Ch]@1

  v3 = this;
  ((void (__cdecl *)(NiPoint3 *))this->baseclass_0.vfptr[6].__vecDelDtor)(&kMyDir);
  ((void (__thiscall *)(Char *, NiPoint3 *))v3->baseclass_0.vfptr[6].SetAbStateProperty)(v3, &kMyPos);
  v11 = rkPos->x - kMyPos.x;
  v12 = rkPos->y - kMyPos.y;
  v13 = rkPos->z - kMyPos.z;
  rkPosa = v12 * v12 + v11 * v11 + v13 * v13;
  rkPosb = sqrt(rkPosa);
  v4 = result;
  if ( rkPosb >= 1.0 )
  {
    v7 = v12;
    result->x = v11;
    v8 = v13;
    result->y = v7;
    result->z = v8;
  }
  else
  {
    v5 = kMyDir.y;
    LODWORD(result->x) = (_DWORD)kMyDir.x;
    v6 = kMyDir.z;
    result->y = v5;
    result->z = v6;
  }
  return v4;
}

//----- (004C7250) --------------------------------------------------------
ExpeditionPartyWin *__thiscall GameFrameWork::GetRaidPartyWin(GameFrameWork *this, unsigned int index)
{
  ExpeditionPartyWin *result; // eax@2

  if ( index >= 4 )
    result = 0;
  else
    result = this->m_pkExpeditionPartyWin[index];
  return result;
}

//----- (004C7270) --------------------------------------------------------
void __thiscall NiPointer<NiNode>::NiPointer<NiNode>(NiPointer<NiNode> *this, NiPointer<NiNode> *ptr)
{
  NiNode *v2; // eax@1

  v2 = ptr->m_pObject;
  this->m_pObject = ptr->m_pObject;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
}

//----- (004C72A0) --------------------------------------------------------
unsigned int __cdecl ITableBase<ActionEffectInfo_ActionEffectInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E04: using guessed type int ITableBase_ActionEffectInfo_ActionEffectInfoTab___ms_pkTable;

//----- (004C72C0) --------------------------------------------------------
unsigned int __cdecl ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal()
{
  float v0; // eax@1
  unsigned int result; // eax@2

  v0 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->m_kCharMover.m_pos3LastPos.z;
  if ( LODWORD(v0) )
    result = *(_DWORD *)(LODWORD(v0) + 40);
  else
    result = 0;
  return result;
}

//----- (004C72E0) --------------------------------------------------------
unsigned int __cdecl ITableBase<SubAbStateInfo_SubAbStateInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F6C: using guessed type int ITableBase_SubAbStateInfo_SubAbStateInfoTab___ms_pkTable;

//----- (004C7300) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Max(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (004C7320) --------------------------------------------------------
char *__cdecl WeaponTitleTab::GetWeaponTitleStringByLevel(unsigned __int16 MobID, unsigned int level)
{
  int v2; // esi@1
  int v3; // ecx@3
  WEAPON_TITLE_DATA *v4; // eax@5
  char *result; // eax@7

  v2 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          MobID)
    && MobID <= *(_WORD *)(v2 + 200)
    && (v3 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v3 + 4 * MobID))
    && *(_DWORD *)(v3 + 4 * MobID)
    && (v4 = CWeaponTitle::GetData(&WeaponTitleTab::ms_kTab, MobID, level)) != 0 )
  {
    if ( v4->Prefix[0] )
      result = fs("%s %s %s");
    else
      result = fs("%s %s");
  }
  else
  {
    result = &byte_9788EB;
  }
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (004C73B0) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::SetAmout(HolyRewardMoneyWin *this, unsigned __int64 money)
{
  HolyRewardMoneyWin *v2; // edi@1
  signed int v3; // [sp-4h] [bp-94h]@2
  char acStr[128]; // [sp+Ch] [bp-84h]@1
  unsigned int v5; // [sp+8Ch] [bp-4h]@1
  int v6; // [sp+90h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  User::GetGem(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  User::GetGold(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  User::GetSilver(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  User::GetCopper(money);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  if ( money )
    v3 = 1;
  else
    v3 = 0;
  ((void (__stdcall *)(signed int))v2->m_pkOkBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v3);
}
// A85C00: using guessed type int __security_cookie;

//----- (004C74D0) --------------------------------------------------------
bool __thiscall ChatBlockListWin::IsGM(ChatBlockListWin *this, Name5 kCharID)
{
  PROTO_CHAT_RESTRICT_INFO *v2; // eax@1
  bool result; // al@2

  v2 = CChatRestrict::Get(&this->m_RestrictList, &kCharID);
  if ( v2 )
    result = v2->bIsGM == 1;
  else
    result = 0;
  return result;
}

//----- (004C7500) --------------------------------------------------------
void __thiscall NiActorManager::Reset(NiActorManager *this)
{
  NiActorManager *v1; // esi@1
  NiControllerManager *v2; // ebx@1
  unsigned int v3; // eax@1
  unsigned int v4; // edi@2
  NiControllerSequence *v5; // ecx@3
  NiTListItem<unsigned int> *v6; // edi@6
  NiTListItem<unsigned int> *v7; // ST04_4@7
  NiTListItem<float> *v8; // edi@9
  NiTListItem<float> *v9; // ST04_4@10

  v1 = this;
  v2 = this->m_spManager.m_pObject;
  v3 = 0;
  if ( v2 )
  {
    v4 = 0;
    if ( v2->m_kSequenceArray.m_uiSize > 0 )
    {
      do
      {
        v5 = v2->m_kSequenceArray.m_pBase[v4].m_pObject;
        if ( v5 != (NiControllerSequence *)v3 )
        {
          NiControllerSequence::Deactivate(v5, 0.0, v3);
          v3 = 0;
        }
        ++v4;
      }
      while ( v4 < v2->m_kSequenceArray.m_uiSize );
    }
  }
  v1->m_eTargetID = NiActorManager::INVALID_SEQUENCE_ID;
  v1->m_fTime = -3.4028235e38;
  v1->m_bBuildTimeline = 0;
  v1->m_eTransitionState = v3;
  v1->m_fTimelineRefreshTime = 3.4028235e38;
  v1->m_bStartTransition = 0;
  v1->m_fTransStartTime = 3.4028235e38;
  v1->m_fTransEndTime = -3.4028235e38;
  v1->m_pcTargetKey = (const char *)v3;
  v1->m_fTransStartFrameTime = -3.4028235e38;
  v1->m_eCurID = NiActorManager::INVALID_SEQUENCE_ID;
  v1->m_pkCurSequence = (NiControllerSequence *)v3;
  v1->m_eNextID = NiActorManager::INVALID_SEQUENCE_ID;
  v1->m_pkNextSequence = (NiControllerSequence *)v3;
  v1->m_bChainActive = 0;
  v1->m_fNextChainTime = -3.4028235e38;
  v6 = v1->m_kChainIDs.baseclass_0.baseclass_0.m_pkHead;
  if ( v6 != (NiTListItem<unsigned int> *)v3 )
  {
    do
    {
      v7 = v6;
      v6 = v6->m_pkNext;
      v1->m_kChainIDs.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int> *)&v1->m_kChainIDs,
        v7);
    }
    while ( v6 );
    v3 = 0;
  }
  *(_DWORD *)&v1->m_kChainIDs.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  v1->m_kChainIDs.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<unsigned int> *)v3;
  v1->m_kChainIDs.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<unsigned int> *)v3;
  v8 = v1->m_kChainDurations.baseclass_0.baseclass_0.m_pkHead;
  if ( v8 != (NiTListItem<float> *)v3 )
  {
    do
    {
      v9 = v8;
      v8 = v8->m_pkNext;
      v1->m_kChainDurations.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,float> *)&v1->m_kChainDurations,
        v9);
    }
    while ( v8 );
    v3 = 0;
  }
  *(_DWORD *)&v1->m_kChainDurations.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  v1->m_kChainDurations.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<float> *)v3;
  v1->m_kChainDurations.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<float> *)v3;
  v1->m_kExtraSequences.m_uiUsed = v3;
}
// 9EEF00: using guessed type const unsigned int NiActorManager__INVALID_SEQUENCE_ID;

//----- (004C7600) --------------------------------------------------------
unsigned int __cdecl ITableBase<MobInfo_MobInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (004C7620) --------------------------------------------------------
unsigned int __cdecl ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A98774: using guessed type int ITableBase_PassiveSkillInfo_PasSkillInfoTab___ms_pkTable;

//----- (004C7640) --------------------------------------------------------
unsigned int __cdecl ITableBase<RIDING_RidePetTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F38: using guessed type int ITableBase_RIDING_RidePetTable___ms_pkTable;

//----- (004C7660) --------------------------------------------------------
unsigned int __cdecl ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F40: using guessed type int ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab___ms_pkTable;

//----- (004C7680) --------------------------------------------------------
unsigned int __cdecl ITableBase<DamageEffect_DamageEffectTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E98: using guessed type int ITableBase_DamageEffect_DamageEffectTab___ms_pkTable;

//----- (004C76A0) --------------------------------------------------------
NiPoint3 *__thiscall mhObject::GetPos(mhObject *this, NiPoint3 *result)
{
  ResElement *v2; // eax@1
  NiActorManager *v3; // ecx@2
  NiNode *v4; // eax@3
  float v5; // edx@5
  float v6; // eax@5

  v2 = this->m_pkResource;
  if ( v2->m_bIsCanAnimation && (v3 = v2->m_pActorMgr.m_pObject) != 0 )
    v4 = (NiNode *)v3->m_spNIFRoot.m_pObject;
  else
    v4 = v2->m_pNiNode.m_pObject;
  result->x = v4->baseclass_0.m_kLocal.m_Translate.x;
  v5 = v4->baseclass_0.m_kLocal.m_Translate.y;
  v6 = v4->baseclass_0.m_kLocal.m_Translate.z;
  result->y = v5;
  result->z = v6;
  return result;
}

//----- (004C76E0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetMsgBox(MiniHouseIndoor *this, char *msg)
{
  MiniHouseIndoor *v2; // ebx@1
  MsgBox *v3; // eax@1
  MsgBox *v4; // esi@1
  MsgBox *v5; // edi@1

  v2 = this;
  v3 = MsgBox::Modeless(0, msg);
  v4 = v2->m_spMsgBox.m_pObject;
  v5 = v3;
  if ( v4 != v3 )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v2->m_spMsgBox.m_pObject = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (004C7740) --------------------------------------------------------
bool __thiscall GameFrameWork::sRideOffValue::IsMove(GameFrameWork::sRideOffValue *this)
{
  return NiPoint3::ZERO.x != this->m_kGroundPos.x
      || NiPoint3::ZERO.y != this->m_kGroundPos.y
      || NiPoint3::ZERO.z != this->m_kGroundPos.z;
}

//----- (004C7790) --------------------------------------------------------
Item *__thiscall Inventory::GetMHItemInv(Inventory *this, unsigned int uiInvType, unsigned int uiIndex)
{
  Item *result; // eax@3

  switch ( uiInvType )
  {
    case 0xDu:
      if ( uiIndex > 0x62 )
        goto LABEL_10;
      result = this->m_aspMiniHouseAccessoryItemInv[uiIndex].m_pObject;
      break;
    case 3u:
      if ( uiIndex > 0x62 )
        goto LABEL_10;
      result = this->m_aspMiniHouseFurnitureItemInv[uiIndex].m_pObject;
      break;
    case 0xEu:
      if ( uiIndex > 0x62 )
        goto LABEL_10;
      result = this->m_aspMiniHouseTileAllItemInv[uiIndex].m_pObject;
      break;
    case 0x10u:
      if ( uiIndex > 0x62 )
        goto LABEL_10;
      result = this->m_aspMiniHouseMinigameAllItemInv[uiIndex].m_pObject;
      break;
    default:
LABEL_10:
      result = 0;
      break;
  }
  return result;
}

//----- (004C7830) --------------------------------------------------------
void __thiscall Inventory::AddEquip(Inventory *this, Item *pkItem, unsigned int uiIndex)
{
  Inventory *v3; // ebx@1
  Item *v4; // esi@1

  v3 = this;
  v4 = this->m_aspEquip[uiIndex].m_pObject;
  if ( v4 != pkItem )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3->m_aspEquip[uiIndex].m_pObject = pkItem;
    if ( pkItem )
      InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
}

//----- (004C7890) --------------------------------------------------------
void __thiscall Inventory::AddRewardInv(Inventory *this, Item *pkItem, unsigned int uiIndex)
{
  Inventory *v3; // edi@1
  Item *v4; // esi@1

  v3 = this;
  v4 = this->m_aspRewardInv[uiIndex].m_pObject;
  if ( v4 != pkItem )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    v3->m_aspRewardInv[uiIndex].m_pObject = pkItem;
    if ( !pkItem )
      goto LABEL_10;
    InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
  if ( pkItem )
  {
    ++v3->m_uiRewardCount;
    return;
  }
LABEL_10:
  --v3->m_uiRewardCount;
}

//----- (004C7900) --------------------------------------------------------
Item *__thiscall Inventory::GetRewardInv(Inventory *this, unsigned int uiIndex)
{
  Item *result; // eax@2

  if ( uiIndex < 0xC0 )
    result = this->m_aspRewardInv[uiIndex].m_pObject;
  else
    result = 0;
  return result;
}

//----- (004C7920) --------------------------------------------------------
NiPointer<NiNode> *__thiscall InventoryWin::GetRunArrangeButEff(InventoryWin *this, NiPointer<NiNode> *result)
{
  NiNode *v2; // eax@1

  v2 = this->m_pRunArrangeButEff.m_pObject;
  result->m_pObject = v2;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  return result;
}

//----- (004C7950) --------------------------------------------------------
NiPointer<NiNode> *__thiscall InventoryWin::GetRunArrangeInvenEff(InventoryWin *this, NiPointer<NiNode> *result)
{
  NiNode *v2; // eax@1

  v2 = this->m_pRunArrangeInvenEff.m_pObject;
  result->m_pObject = v2;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  return result;
}

//----- (004C7980) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Lrotate(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (004C79E0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Rrotate(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (004C7A40) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 15) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 15) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 15) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 15) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 15) )
    goto LABEL_11;
  return result;
}

//----- (004C7AA0) --------------------------------------------------------
PassiveSkillInfo *__cdecl PasSkillInfoTab::GetByID(unsigned __int16 kID)
{
  unsigned int v1; // esi@1
  PassiveSkillInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
  {
    while ( *(_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                        v1) != kID )
    {
      ++v1;
      if ( v1 >= ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (PassiveSkillInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                                   v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A98774: using guessed type int ITableBase_PassiveSkillInfo_PasSkillInfoTab___ms_pkTable;

//----- (004C7AF0) --------------------------------------------------------
void __thiscall RidePetWin::SetMoverSpeed(RidePetWin *this, int nSpeed)
{
  RidePetWin *v2; // esi@1
  PgWinText *v3; // ecx@1
  NiRefObjectVtbl *v4; // edi@1
  char *v5; // eax@1
  char *v6; // eax@1

  v2 = this;
  v3 = this->m_pkMoverSpeed;
  v2->m_nMoverSpeed = nSpeed;
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = TextData2::Get(0xE4F43647u);
  v6 = fs(v5);
  v4[118].__vecDelDtor((NiRefObject *)v2->m_pkMoverSpeed, (unsigned int)v6);
}

//----- (004C7B40) --------------------------------------------------------
RIDING *__cdecl RidePetTable::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  RIDING *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<RIDING_RidePetTable>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4),
                                v1)
              + 2,
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<RIDING_RidePetTable>::GetTotal() )
          goto LABEL_6;
      }
      result = (RIDING *)CDataReader::GetRecord((CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4), v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F38: using guessed type int ITableBase_RIDING_RidePetTable___ms_pkTable;

//----- (004C7BD0) --------------------------------------------------------
MobKillAnnounceText *__cdecl MobKillAnnounceTextTab::GetByType(MobKillAnnounceType eType)
{
  unsigned int v1; // esi@1
  MobKillAnnounceText *result; // eax@4

  v1 = 0;
  if ( ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::GetTotal() )
  {
    while ( *(_DWORD *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable + 4),
                         v1) != eType )
    {
      ++v1;
      if ( v1 >= ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (MobKillAnnounceText *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<MobKillAnnounceText_MobKillAnnounceTextTab>::ms_pkTable
                                                    + 4),
                                      v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97F40: using guessed type int ITableBase_MobKillAnnounceText_MobKillAnnounceTextTab___ms_pkTable;

//----- (004C7C20) --------------------------------------------------------
DamageEffect *__cdecl DamageEffectTab::GetByIndexName(char *pkInxName, unsigned int uiTarget)
{
  unsigned int v2; // edi@3
  DamageEffect *result; // eax@7

  if ( pkInxName && *pkInxName )
  {
    v2 = 0;
    if ( ITableBase<DamageEffect_DamageEffectTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 4),
                                v2)
              + 6,
                pkInxName)
           || *((_BYTE *)CDataReader::GetRecord(
                           (CDataReader *)(ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 4),
                           v2)
              + 38) != uiTarget )
      {
        ++v2;
        if ( v2 >= ITableBase<DamageEffect_DamageEffectTab>::GetTotal() )
          goto LABEL_7;
      }
      result = (DamageEffect *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<DamageEffect_DamageEffectTab>::ms_pkTable + 4),
                                 v2);
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E98: using guessed type int ITableBase_DamageEffect_DamageEffectTab___ms_pkTable;

//----- (004C7CD0) --------------------------------------------------------
CollectCard *__cdecl CollectCardTab::GetByItemInx(const char *pcItemInx)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  void *v3; // eax@5
  void *v4; // ebx@5
  int v5; // eax@6
  char v6; // cl@7
  unsigned int v7; // eax@8
  unsigned int i; // [sp+Ch] [bp-8h]@4
  unsigned int v10; // [sp+10h] [bp-4h]@2

  v1 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v10 = *(_DWORD *)(v1 + 40);
  else
    v10 = 0;
  i = 0;
  if ( v10 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v2);
    v4 = v3;
    if ( v3 )
      break;
LABEL_11:
    ++v2;
    i = v2;
    if ( v2 >= v10 )
      return 0;
  }
  v5 = (int)((char *)v3 + 2);
  do
    v6 = *(_BYTE *)v5++;
  while ( v6 );
  v7 = v5 - (_DWORD)((char *)v4 + 3);
  if ( v7 != strlen(pcItemInx) || strncmp((const char *)v4 + 2, pcItemInx, v7) )
  {
    v2 = i;
    goto LABEL_11;
  }
  return (CollectCard *)v4;
}
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004C7D70) --------------------------------------------------------
CollectCardView *__cdecl CollectCardViewTab::GetByCardID(unsigned int uiCardID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  CollectCardView *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (CollectCardView *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 4),
                                    v3);
      if ( result )
      {
        if ( result->CC_CardID == (_WORD)uiCardID )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A97ED0: using guessed type int ITableBase_CollectCardView_CollectCardViewTab___ms_pkTable;

//----- (004C7DC0) --------------------------------------------------------
AbStateMsg *__cdecl AbStateMsgTable::GetAbStateMsgByIDX(char *pcAbStateIDX, AbStateMsgTimeEnum AMT)
{
  char *v2; // ebx@1
  int v3; // eax@3
  unsigned int v4; // edi@4
  unsigned int v5; // esi@6
  AbStateMsg *result; // eax@7

  v2 = pcAbStateIDX;
  if ( pcAbStateIDX && *pcAbStateIDX )
  {
    v3 = *(_DWORD *)(ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable + 56);
    if ( v3 )
      v4 = *(_DWORD *)(v3 + 40);
    else
      v4 = 0;
    v5 = 0;
    if ( v4 )
    {
      do
      {
        result = (AbStateMsg *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<AbStateMsg_AbStateMsgTable>::ms_pkTable + 4),
                                 v5);
        if ( result && result->AbStateMsgTime == AMT )
        {
          if ( !strcmp(result->AbStateIDX, v2) )
            return result;
          v2 = pcAbStateIDX;
        }
        ++v5;
      }
      while ( v5 < v4 );
    }
    result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F18: using guessed type int ITableBase_AbStateMsg_AbStateMsgTable___ms_pkTable;

//----- (004C7E50) --------------------------------------------------------
ActionEffectInfo *__cdecl ActionEffectInfoTab::GetByID(unsigned __int16 ID)
{
  unsigned int v1; // esi@1
  ActionEffectInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<ActionEffectInfo_ActionEffectInfoTab>::GetTotal() )
  {
    while ( *(_DWORD *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable + 4),
                         v1) != ID )
    {
      ++v1;
      if ( v1 >= ITableBase<ActionEffectInfo_ActionEffectInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (ActionEffectInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<ActionEffectInfo_ActionEffectInfoTab>::ms_pkTable + 4),
                                   v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97E04: using guessed type int ITableBase_ActionEffectInfo_ActionEffectInfoTab___ms_pkTable;

//----- (004C7EA0) --------------------------------------------------------
AbnormalStateInfo *__cdecl AbnormalStateInfoTab::GetByAbstateIndex(unsigned __int16 dwAbstateIndex)
{
  unsigned int v1; // esi@1
  AbnormalStateInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal() )
  {
    while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                  (CDataReader *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.m_pkMsgHooker,
                                  v1)
                      + 34) != dwAbstateIndex )
    {
      ++v1;
      if ( v1 >= ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (AbnormalStateInfo *)CDataReader::GetRecord(
                                    (CDataReader *)&ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.m_pkMsgHooker,
                                    v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (004C7EF0) --------------------------------------------------------
SubAbStateInfo *__cdecl SubAbStateInfoTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  SubAbStateInfo *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<SubAbStateInfo_SubAbStateInfoTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 4),
                                v1)
              + 2,
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<SubAbStateInfo_SubAbStateInfoTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (SubAbStateInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 4),
                                   v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F6C: using guessed type int ITableBase_SubAbStateInfo_SubAbStateInfoTab___ms_pkTable;

//----- (004C7F80) --------------------------------------------------------
char *__cdecl ScriptMsgTab::GetScriptMsg(const char *kIndex)
{
  char *result; // eax@2
  unsigned int v2; // esi@3
  void *v3; // eax@4

  if ( kIndex )
  {
    v2 = 0;
    if ( ITableBase<ScriptMsg_ScriptMsgTab>::GetTotal() )
    {
      while ( 1 )
      {
        v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ScriptMsg_ScriptMsgTab>::ms_pkTable + 4), v2);
        if ( v3 )
        {
          if ( v3 != (void *)-2 && !strcmp(kIndex, (const char *)v3 + 2) )
            break;
        }
        ++v2;
        if ( v2 >= ITableBase<ScriptMsg_ScriptMsgTab>::GetTotal() )
          goto LABEL_8;
      }
      result = (char *)v3 + 34;
    }
    else
    {
LABEL_8:
      result = 0;
    }
  }
  else
  {
    result = &byte_9788EB;
  }
  return result;
}
// A95950: using guessed type int ITableBase_ScriptMsg_ScriptMsgTab___ms_pkTable;

//----- (004C8010) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Insert(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v29; // ecx@52
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0x7FFFFFFE )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (004C8240) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result)
{
  unsigned int v2; // edx@1
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v3; // eax@1
  std::_Container_proxy *v4; // ecx@1

  v2 = this->baseclass_0._Myoff;
  v3 = result;
  v4 = this->baseclass_0.baseclass_0._Myproxy;
  result->baseclass_0.baseclass_0._Mynextiter = 0;
  result->baseclass_0.baseclass_0._Myproxy = v4;
  result->baseclass_0._Myoff = v2;
  return v3;
}

//----- (004C8260) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result)
{
  unsigned int v2; // edx@1
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v3; // eax@1
  std::_Container_proxy *v4; // ecx@1

  v2 = this->baseclass_0._Myoff + this->baseclass_0._Mysize;
  v3 = result;
  v4 = this->baseclass_0.baseclass_0._Myproxy;
  result->baseclass_0.baseclass_0._Mynextiter = 0;
  result->baseclass_0.baseclass_0._Myproxy = v4;
  result->baseclass_0._Myoff = v2;
  return v3;
}

//----- (004C8280) --------------------------------------------------------
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Splice_same(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Where, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _First, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Last, unsigned int _Count)
{
  unsigned int v6; // edx@2
  int v7; // ecx@5

  if ( this != _Right )
  {
    v6 = this->baseclass_0.baseclass_0._Mysize;
    if ( 41698710 - v6 < _Count )
      std::_Xlength_error("list<T> too long");
    this->baseclass_0.baseclass_0._Mysize = _Count + v6;
    _Right->baseclass_0.baseclass_0._Mysize -= _Count;
  }
  **(_DWORD **)(*(_DWORD *)&_First + 4) = _Last;
  **(_DWORD **)(*(_DWORD *)&_Last + 4) = _Where;
  **(_DWORD **)(*(_DWORD *)&_Where + 4) = _First;
  v7 = *(_DWORD *)(*(_DWORD *)&_Where + 4);
  *(_DWORD *)(*(_DWORD *)&_Where + 4) = *(_DWORD *)(*(_DWORD *)&_Last + 4);
  *(_DWORD *)(*(_DWORD *)&_Last + 4) = *(_DWORD *)(*(_DWORD *)&_First + 4);
  *(_DWORD *)(*(_DWORD *)&_First + 4) = v7;
}

//----- (004C8300) --------------------------------------------------------
std::_List_iterator<std::_List_val<float,std::allocator<float> > > *__thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::erase(std::list<float,std::allocator<float> > *this, std::_List_iterator<std::_List_val<float,std::allocator<float> > > *result, std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > _Where)
{
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > v3; // eax@1
  std::list<float,std::allocator<float> > *v4; // esi@1
  int v5; // ecx@1
  std::_List_iterator<std::_List_val<float,std::allocator<float> > > *v6; // eax@3
  int _Wherea; // [sp+10h] [bp+Ch]@1

  v3 = _Where;
  v4 = this;
  v5 = **(_DWORD **)&_Where;
  _Wherea = **(_DWORD **)&_Where;
  if ( v3 != *(_DWORD *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    **(_DWORD **)(*(_DWORD *)&v3 + 4) = **(_DWORD **)&v3;
    *(_DWORD *)(**(_DWORD **)&v3 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    operator delete(*(void **)&v3);
    v5 = _Wherea;
    --v4->baseclass_0.baseclass_0._Mysize;
  }
  v6 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  return v6;
}

//----- (004C8340) --------------------------------------------------------
std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *__thiscall std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Buynode<SHINE_ITEM_STRUCT__>(std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *_Next, std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *_Prev, SHINE_ITEM_STRUCT *_Val)
{
  std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *result; // eax@1
  std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *v5; // edx@2
  SHINE_ITEM_STRUCT *v6; // esi@3
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *)operator new(0x70u);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *)-8 )
  {
    v6 = _Val;
    memcpy(&result->_Myval, _Val, 0x64u);
    v6 = (SHINE_ITEM_STRUCT *)((char *)v6 + 100);
    *(_WORD *)((char *)&result->_Myval.itemattr.binditem.portal[9].y + 1) = v6->itemid;
    BYTE3(result->_Myval.itemattr.binditem.portal[9].y) = v6->itemattr.blot.lot;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004C83B0) --------------------------------------------------------
CollectWin::sCardInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>>_CollectWin::sCardInfo___std::allocator<CollectWin::sCardInfo>>(std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > _Last, CollectWin::sCardInfo *_Dest, std::allocator<CollectWin::sCardInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > v5; // ecx@1
  CollectWin::sCardInfo *result; // eax@1

  v5 = _First;
  for ( result = _Dest; v5 != _Last; ++result )
  {
    if ( result )
    {
      result->m_uiGrade = **(_DWORD **)&v5;
      result->m_uiCardID = *(_DWORD *)(*(_DWORD *)&v5 + 4);
      result->m_uiStar = *(_DWORD *)(*(_DWORD *)&v5 + 8);
      result->m_uiSerial = *(_DWORD *)(*(_DWORD *)&v5 + 12);
      result->m_tRegistTime = *(_DWORD *)(*(_DWORD *)&v5 + 16);
    }
    *(_DWORD *)&v5 += 20;
  }
  return result;
}

//----- (004C8400) --------------------------------------------------------
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *result, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  unsigned __int16 v10; // di@2
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval >= v10;
      else
        v9 = v10 < v7->_Myval;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Insert(
                          v5,
                          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval >= v4->_Myval )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Insert(
                        v5,
                        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (004C84E0) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, unsigned __int16 *_Val)
{
  std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *result; // eax@1
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)operator new(0x10u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)-12 )
    result->_Myval = *_Val;
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004C8550) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, unsigned int _Count, char _Ch)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // esi@1
  unsigned int v6; // ecx@1
  unsigned int v7; // ebx@3
  unsigned int v8; // eax@3
  unsigned int v9; // ecx@7
  unsigned int v10; // edx@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // edx@12
  unsigned int v13; // edi@17
  unsigned int v14; // edx@19
  unsigned int v15; // edx@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@26
  bool v18; // cf@33
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v19; // [sp+Ch] [bp-4h]@30
  unsigned int _Nm; // [sp+1Ch] [bp+Ch]@7

  v5 = this;
  v6 = this->baseclass_0._Mysize;
  if ( v6 < _Off )
    std::_Xout_of_range("invalid string position");
  v7 = _N0;
  v8 = v6 - _Off;
  if ( v6 - _Off < _N0 )
    v7 = v6 - _Off;
  if ( -1 - _Count <= v6 - v7 )
    std::_Xlength_error("string too long");
  v9 = _Count;
  _Nm = v8 - v7;
  if ( _Count < v7 )
  {
    v10 = v5->baseclass_0._Myres;
    if ( v10 < 0x10 )
      v11 = v5;
    else
      v11 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v10 < 0x10 )
      v12 = v5;
    else
      v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
    memmove((char *)v12 + _Off + _Count, (char *)v11 + _Off + v7, _Nm);
    v9 = _Count;
  }
  if ( !v9 && !v7 )
    return v5;
  v13 = v9 + v5->baseclass_0._Mysize - v7;
  if ( v13 > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v14 = v5->baseclass_0._Myres;
  if ( v14 < v13 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v5, v13, v5->baseclass_0._Mysize);
    v9 = _Count;
    if ( v13 )
    {
LABEL_21:
      if ( v7 < v9 )
      {
        v15 = v5->baseclass_0._Myres;
        if ( v15 < 0x10 )
          v16 = v5;
        else
          v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v15 < 0x10 )
          v19 = v5;
        else
          v19 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
        memmove((char *)v19 + _Off + v9, (char *)v16 + _Off + v7, _Nm);
        v9 = _Count;
      }
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Chassign(v5, _Off, v9, _Ch);
      v18 = v5->baseclass_0._Myres < 0x10;
      v5->baseclass_0._Mysize = v13;
      if ( !v18 )
      {
        *(_BYTE *)(*(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0] + v13) = 0;
        return v5;
      }
      v5->baseclass_0.___u0.baseclass_0.dummy[v13] = 0;
    }
    return v5;
  }
  if ( v13 )
    goto LABEL_21;
  v5->baseclass_0._Mysize = 0;
  if ( v14 < 0x10 )
  {
    result = v5;
    v5->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v5->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v5;
  }
  return result;
}

//----- (004C86C0) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::operator__(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, int __formal)
{
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v3; // eax@1
  std::_Container_proxy *v4; // edx@1
  std::_Container_proxy **v5; // edx@2
  unsigned int v6; // edx@4

  v3 = result;
  v4 = this->baseclass_0.baseclass_0._Myproxy;
  result->baseclass_0.baseclass_0._Myproxy = 0;
  result->baseclass_0.baseclass_0._Mynextiter = 0;
  if ( v4 )
  {
    v5 = (std::_Container_proxy **)v4->_Mycont;
    if ( v5 )
      result->baseclass_0.baseclass_0._Myproxy = *v5;
  }
  v6 = this->baseclass_0._Myoff;
  result->baseclass_0._Myoff = v6;
  this->baseclass_0._Myoff = v6 + 1;
  return v3;
}

//----- (004C8700) --------------------------------------------------------
void *__thiscall ISingletonTask<ItemUseTask>::_vector_deleting_destructor_(ItemUseTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<ItemUseTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<ItemUseTask>::_vftable_;
  ISingletonTask<ItemUseTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98C7F8: using guessed type int (__stdcall *ISingletonTask_ItemUseTask____vftable_)(int uiFlags);
// 98C814: using guessed type int (__thiscall *ISingletonTask_ItemUseTask____vftable_)(void *p, char);
// A98788: using guessed type int ISingletonTask_ItemUseTask___ms_pkSingletonTask;

//----- (004C8740) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const unsigned __int16 v10; // di@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                          (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( LOWORD(v11->_Myval.baseclass_0.first) >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (004C8820) --------------------------------------------------------
void __thiscall AttackSequence::AttackSequence(AttackSequence *this)
{
  *(_DWORD *)&this->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead = 0;
  this->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail = 0;
  this->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTList<DamageInfo__>::_vftable_;
  *(_WORD *)&this->bStarted = 0;
  this->bLastSequence = 0;
  this->bDamageRecved = 0;
  this->iAttSeqCode = -1;
  this->m_SeqNum = -1;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);

//----- (004C8850) --------------------------------------------------------
bool __thiscall EffectObjectMgr::RemoveAllEffectObject(EffectObjectMgr *this)
{
  EffectObjectMgr *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v2; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v3; // esi@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v4; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *j; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *i; // eax@8
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v7; // ecx@13
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v8; // ebx@13
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v9; // esi@13

  v1 = this;
  if ( this->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    v2 = this->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v3 = v2->_Left;
    if ( v2->_Left != v2 )
    {
      do
      {
        EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v3->_Myval.baseclass_0.second);
        if ( !v3->_Isnil )
        {
          v4 = v3->_Right;
          if ( v4->_Isnil )
          {
            for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
            {
              if ( v3 != i->_Right )
                break;
              v3 = i;
            }
            v3 = i;
          }
          else
          {
            v3 = v3->_Right;
            for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
              v3 = j;
          }
        }
      }
      while ( v3 != v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    v7 = v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v8 = v7->_Parent;
    v9 = v7->_Parent;
    if ( !v8->_Isnil )
    {
      do
      {
        std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
          &v1->m_mapEffectObject.baseclass_0,
          v9->_Right);
        v9 = v9->_Left;
        operator delete(v8);
        v8 = v9;
      }
      while ( !v9->_Isnil );
    }
    v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v1->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  }
  return 1;
}

//----- (004C8920) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *this, std::pair<unsigned short const ,unsigned long> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *result; // eax@1
  std::pair<unsigned short const ,unsigned long> *v4; // edx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)operator new(0x18u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004C8990) --------------------------------------------------------
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Insert<std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Where, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _First, std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Last)
{
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v4; // edi@1
  std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > v5; // eax@1
  std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *v6; // eax@3
  unsigned int v7; // ecx@3
  int v8; // [sp-10h] [bp-28h]@1
  std::list<float,std::allocator<float> > *result; // [sp+0h] [bp-18h]@1
  std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Next; // [sp+4h] [bp-14h]@1
  int *v11; // [sp+8h] [bp-10h]@1
  int v12; // [sp+14h] [bp-4h]@1

  v11 = &v8;
  v4 = this;
  result = (std::list<float,std::allocator<float> > *)this;
  v5 = _First;
  _Next = _First;
  v12 = 0;
  while ( v5 != _Last )
  {
    v6 = std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Buynode<SHINE_ITEM_STRUCT__>(
           &v4->baseclass_0,
           *(std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node **)&_Where,
           *(std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node **)(*(_DWORD *)&_Where + 4),
           (SHINE_ITEM_STRUCT *)(*(_DWORD *)&v5 + 8));
    v7 = v4->baseclass_0.baseclass_0._Mysize;
    if ( 41698710 - v7 < 1 )
      std::_Xlength_error("list<T> too long");
    v4->baseclass_0.baseclass_0._Mysize = v7 + 1;
    *(_DWORD *)(*(_DWORD *)&_Where + 4) = v6;
    v6->_Prev->_Next = v6;
    v5 = (std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > >)**(_DWORD **)&_First;
    _First = (std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > >)**(_DWORD **)&_First;
  }
}

//----- (004C8A60) --------------------------------------------------------
void __thiscall CharMgr::AddFadeOutDeleteChar(CharMgr *this, Char *pkChar)
{
  Char *v2; // edi@1
  CharMgr *v3; // esi@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v4; // eax@1
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> result; // [sp+8h] [bp-8h]@1

  v2 = pkChar;
  v3 = this;
  Char::StartFadeOut(pkChar);
  pkChar = (Char *)v2->m_kHandle;
  v4 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
         &v3->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0,
         (unsigned __int16 *)&pkChar);
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
    &v3->m_kmapFadeOutDeletedChar.baseclass_0,
    &result,
    v4,
    0);
}

//----- (004C8AB0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, unsigned int _Off, unsigned int _Count)
{
  result->baseclass_0._Mysize = 0;
  result->baseclass_0._Myres = 15;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, this, _Off, _Count);
  return result;
}

//----- (004C8AF0) --------------------------------------------------------
ItemUseTask *__cdecl ISingletonTask<ItemUseTask>::Run()
{
  ItemUseTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (ItemUseTask *)ISingletonTask<ItemUseTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<ItemUseTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &ItemUseTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &ItemUseTask::_vftable_;
    }
    else
    {
      v2 = 0;
    }
    result = (ItemUseTask *)v2;
    ISingletonTask<ItemUseTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 98C834: using guessed type int (__stdcall *ItemUseTask___vftable_)(int uiFlags);
// 98C850: using guessed type int (__thiscall *ItemUseTask___vftable_)(void *p, char);
// A98788: using guessed type int ISingletonTask_ItemUseTask___ms_pkSingletonTask;

//----- (004C8B70) --------------------------------------------------------
bool __cdecl MobNoFadeInTab::IsNoFadeIn(const char *pcMobInx)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  void *v3; // eax@5
  unsigned int v4; // eax@6
  unsigned int v5; // ebx@6
  unsigned int v6; // esi@6
  unsigned int v7; // ecx@6
  unsigned int v8; // edi@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@8
  int v10; // eax@10
  bool v11; // zf@10
  signed int v12; // eax@12
  bool v13; // bl@15
  unsigned int i; // [sp+0h] [bp-38h]@4
  unsigned int v16; // [sp+8h] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+Ch] [bp-2Ch]@6
  unsigned int v18; // [sp+28h] [bp-10h]@1
  int v19; // [sp+34h] [bp-4h]@15
  int v20; // [sp+38h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v16 = *(_DWORD *)(v1 + 40);
  else
    v16 = 0;
  i = 0;
  if ( v16 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobNoFadeIn_MobNoFadeInTab>::ms_pkTable + 4), v2);
    if ( v3 )
      break;
LABEL_19:
    ++v2;
    i = v2;
    if ( v2 >= v16 )
      return 0;
  }
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this,
    (const char *)v3,
    strlen((const char *)v3));
  v4 = strlen(pcMobInx);
  v5 = this.baseclass_0._Mysize;
  v6 = v4;
  v7 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v4 )
    v7 = v4;
  v8 = this.baseclass_0._Myres;
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v9 = &this;
  v10 = std::char_traits<char>::compare(v9->baseclass_0.___u0.baseclass_0.dummy, pcMobInx, v7);
  v11 = v10 == 0;
  if ( !v10 )
  {
    if ( v5 >= v6 )
      v12 = v5 != v6;
    else
      v12 = -1;
    v11 = v12 == 0;
  }
  v13 = v11;
  v19 = -1;
  if ( v8 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v13 )
  {
    v2 = i;
    goto LABEL_19;
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A97F0C: using guessed type int ITableBase_MobNoFadeIn_MobNoFadeInTab___ms_pkTable;

//----- (004C8CC0) --------------------------------------------------------
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right)
{
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v2; // esi@1
  void *v3; // eax@1
  std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > v4; // ecx@2
  std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > v5; // eax@2
  std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > v6; // edx@2
  int v7; // [sp-10h] [bp-34h]@1
  std::exception thisa; // [sp+0h] [bp-24h]@3
  char *_What; // [sp+Ch] [bp-18h]@3
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v10; // [sp+10h] [bp-14h]@1
  int *v11; // [sp+14h] [bp-10h]@1
  int v12; // [sp+20h] [bp-4h]@2

  v11 = &v7;
  v2 = this;
  v10 = this;
  this->baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x70u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = (std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > >)**(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = *(std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = (std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > >)**(_DWORD **)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = 0;
  LOBYTE(v12) = 1;
  std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Insert<std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>(
    v2,
    v4,
    v6,
    v5);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004C8D80) --------------------------------------------------------
void __thiscall std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>(std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *this, std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *_Right)
{
  std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *v2; // esi@1
  int v3; // edi@1
  CollectWin::sCardInfo *v4; // eax@4
  std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > v5; // ecx@4
  std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > v6; // ST00_4@4
  int v7; // [sp-10h] [bp-24h]@1
  std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *thisa; // [sp+0h] [bp-14h]@1
  int *v9; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@4

  v9 = &v7;
  v2 = this;
  thisa = (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)this;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  v3 = (signed int)((char *)_Right->baseclass_0._Mylast - *(_DWORD *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0])
     / 20;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  if ( v3 )
  {
    if ( (unsigned int)v3 > 0xCCCCCCC )
      std::_Xlength_error("vector<T> too long");
    v4 = std::allocator<CollectWin::sCardInfo>::allocate(&this->baseclass_0._Alval, v3);
    v2->baseclass_0._Myend = &v4[v3];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v4;
    v2->baseclass_0._Mylast = v4;
    v5 = (std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > >)_Right->baseclass_0._Mylast;
    v6 = *(std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > > *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
    v10 = 0;
    v2->baseclass_0._Mylast = std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>>_CollectWin::sCardInfo___std::allocator<CollectWin::sCardInfo>>(
                                v6,
                                v5,
                                v4,
                                &v2->baseclass_0._Alval,
                                (std::_Nonscalar_ptr_iterator_tag)_Right);
  }
}

//----- (004C8E60) --------------------------------------------------------
void __thiscall std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Assign_rv(std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right)
{
  std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v2; // esi@1
  void *v3; // eax@2
  void *v4; // edi@3

  v2 = this;
  if ( this != _Right )
  {
    v3 = (void *)**(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    *(_DWORD *)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    this->baseclass_0.baseclass_0._Mysize = 0;
    if ( v3 != *(void **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      do
      {
        v4 = *(void **)v3;
        operator delete(v3);
        v3 = v4;
      }
      while ( v4 != *(void **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
    }
    if ( _Right->baseclass_0.baseclass_0._Mysize )
      std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Splice_same(
        v2,
        (std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > >)**(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
        _Right,
        (std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > >)**(_DWORD **)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
        *(std::_List_const_iterator<std::_List_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
        _Right->baseclass_0.baseclass_0._Mysize);
  }
}

//----- (004C8EC0) --------------------------------------------------------
bool __thiscall EffectObjectMgr::AddEffectObject(EffectObjectMgr *this, PROTO_NC_BRIEFINFO_EFFECTBLAST_CMD *kProto)
{
  double v2; // st7@1
  EffectObjectMgr *v3; // ebx@1
  float v4; // ST18_4@1
  float v5; // ST14_4@1
  int v6; // ecx@1
  int v7; // eax@1
  int v8; // edx@1
  int v9; // ecx@1
  int v10; // edx@1
  int v11; // eax@1
  unsigned __int16 v12; // cx@1
  _BYTE v13[12]; // ST10_12@2
  _BYTE v14[12]; // ST04_12@2
  Effect *v15; // edi@2
  _BYTE v16[12]; // ST14_12@3
  Effect *v17; // eax@3
  NiNode *v19; // eax@7
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v20; // ebx@9
  unsigned int v21; // eax@9
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+1Ch] [bp-CCh]@9
  NiPoint3 kDir; // [sp+20h] [bp-C8h]@1
  NiPoint3 pos3Pos; // [sp+2Ch] [bp-BCh]@1
  unsigned int _Keyval; // [sp+38h] [bp-B0h]@1
  unsigned int _Where; // [sp+3Ch] [bp-ACh]@1
  NiMatrix3 thisa; // [sp+40h] [bp-A8h]@1
  char szName[128]; // [sp+64h] [bp-84h]@1
  unsigned int v29; // [sp+E4h] [bp-4h]@1
  int v30; // [sp+E8h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v2 = (double)kProto->coord.xy.y;
  v3 = this;
  pos3Pos.y = NiPoint3::ZERO.y;
  LODWORD(pos3Pos.x) = (_DWORD)NiPoint3::ZERO.x;
  _Keyval = (unsigned int)this;
  pos3Pos.z = NiPoint3::ZERO.z;
  v5 = (double)kProto->coord.xy.x;
  v4 = v2;
  World::GetGroundPos(&g_kWorld, v5, v4, &pos3Pos, 0);
  _Where = kProto->coord.dir;
  *(float *)&_Where = (NI_PI + NI_PI) * (double)(signed int)_Where / 180.0;
  NiMatrix3::MakeZRotation(&thisa, *(float *)&_Where);
  NiMatrix3::operator_(&thisa, &kDir, &World::ms_kNorthDir);
  v6 = *(_DWORD *)&kProto->effectname.n8_name[8];
  v7 = *(_DWORD *)&kProto->effectname.n8_name[4];
  *(_DWORD *)szName = *(_DWORD *)&kProto->effectname.n8_name[0];
  v8 = *(_DWORD *)&kProto->effectname.n8_name[12];
  *(_DWORD *)&szName[8] = v6;
  v9 = *(_DWORD *)&kProto->effectname.n8_name[20];
  *(_DWORD *)&szName[12] = v8;
  v10 = *(_DWORD *)&kProto->effectname.n8_name[24];
  *(_DWORD *)&szName[4] = v7;
  v11 = *(_DWORD *)&kProto->effectname.n8_name[16];
  *(_DWORD *)&szName[20] = v9;
  v12 = kProto->detach;
  *(_DWORD *)&szName[24] = v10;
  *(_DWORD *)&szName[16] = v11;
  *(_DWORD *)&szName[28] = *(_DWORD *)&kProto->effectname.n8_name[28];
  szName[32] = 0;
  if ( v12 == -1 )
  {
    *(_DWORD *)v13 = (_DWORD)kDir.x;
    *(_QWORD *)&v13[4] = *(_QWORD *)&kDir.y;
    *(_DWORD *)v14 = (_DWORD)pos3Pos.x;
    *(_QWORD *)&v14[4] = *(_QWORD *)&pos3Pos.y;
    v15 = EffectMgr::JustCreateEffect(&g_kEffectMgr, szName, *(NiPoint3 *)v14, *(NiPoint3 *)v13, Timer::ms_fCurTime, 1);
  }
  else
  {
    *(_DWORD *)v16 = (_DWORD)kDir.x;
    *(_QWORD *)&v16[4] = *(_QWORD *)&kDir.y;
    v17 = EffectMgr::JustCreateAttachEffect(&g_kEffectMgr, szName, v12, *(NiPoint3 *)v16, Timer::ms_fCurTime);
    v15 = v17;
    if ( !v17 )
      return 0;
    LOBYTE(v17[1].baseclass_0.vfptr) = 0;
  }
  if ( !v15 )
    return 0;
  v19 = v15->m_spDefaultEffect.m_pObject;
  if ( v19 )
  {
    _Where = kProto->scale;
    *(float *)&_Where = (double)(signed int)_Where / 1000.0;
    *(float *)&_Where = fabs(*(float *)&_Where);
    v19->baseclass_0.m_kLocal.m_fScale = *(float *)&_Where;
  }
  v15->m_bLoop = kProto->flag._bf0 & 1;
  EffectMgr::PlayEffect(&g_kEffectMgr, v15);
  v20 = (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v3->m_mapEffectObject;
  _Where = kProto->handle;
  v21 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                      v20,
                      &result,
                      &_Where)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  _Where = v21;
  if ( *(_DWORD *)(_Keyval + 8) != v21 )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, *(Effect **)(v21 + 16));
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v20,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&result,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)_Where);
  }
  _Keyval = kProto->handle;
  *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
     (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)v20,
     &_Keyval) = (unsigned int)v15;
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// B6DE8C: using guessed type const float NI_PI;

//----- (004C9170) --------------------------------------------------------
void *__thiscall EffectObjectMgr::_scalar_deleting_destructor_(EffectObjectMgr *this, unsigned int a2)
{
  void *v2; // edi@1
  char *v3; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v5; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *v8; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = (char *)&this->m_mapEffectObject;
  this->vfptr = (EffectObjectMgrVtbl *)&EffectObjectMgr::_vftable_;
  v8 = &this->m_mapEffectObject;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)this->m_mapEffectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&v4;
  v9 = 0;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    &this->m_mapEffectObject.baseclass_0,
    &result,
    v5,
    v4);
  operator delete(*((void **)v3 + 1));
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98C868: using guessed type int (__thiscall *EffectObjectMgr___vftable_)(void *p, char);

//----- (004C91F0) --------------------------------------------------------
void __thiscall mhInfoWin::SetRoomMakerName(mhInfoWin *this, char *pcStr)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // esi@1
  bool v3; // cf@1
  char *v4; // eax@2
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@6
  mhInfoWin *v6; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4h] [bp-2Ch]@4
  unsigned int v8; // [sp+20h] [bp-10h]@1
  int v9; // [sp+2Ch] [bp-4h]@4
  int v10; // [sp+30h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v2 = &this->m_FullRoomMakerName;
  v3 = this->m_FullRoomMakerName.baseclass_0._Myres < 0x10;
  v6 = this;
  this->m_FullRoomMakerName.baseclass_0._Mysize = 0;
  if ( v3 )
    v4 = (char *)&this->m_FullRoomMakerName;
  else
    v4 = *(char **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
  *v4 = 0;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcStr, strlen(pcStr));
  v9 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v2, &thisa);
  v9 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v5 = v6->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  ((void (__cdecl *)(char *))v5)(pcStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (004C92D0) --------------------------------------------------------
EffectObjectMgr *__cdecl EffectObjectMgr::GetMgr()
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v0; // eax@2
  std::exception this; // [sp+0h] [bp-1Ch]@5
  char *_What; // [sp+Ch] [bp-10h]@5
  int v4; // [sp+18h] [bp-4h]@2

  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    v4 = 0;
    kEffectObjectMgr.vfptr = (EffectObjectMgrVtbl *)&EffectObjectMgr::_vftable_;
    dword_A98798 = 0;
    v0 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)operator new(0x18u);
    if ( v0 )
    {
      stru_A98794 = v0;
      **(_DWORD **)&v0 = v0;
      *(_DWORD *)(*(_DWORD *)&stru_A98794 + 4) = stru_A98794;
      *(_DWORD *)(*(_DWORD *)&stru_A98794 + 8) = stru_A98794;
      *(_BYTE *)(*(_DWORD *)&stru_A98794 + 20) = 1;
      *(_BYTE *)(*(_DWORD *)&stru_A98794 + 21) = 1;
      atexit(_dynamic_atexit_destuctor_for__kEffectObjectMgr__);
    }
    _What = 0;
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
  }
  return &kEffectObjectMgr;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 98C868: using guessed type int (__thiscall *EffectObjectMgr___vftable_)(void *p, char);
// A98798: using guessed type int dword_A98798;
// A987A0: using guessed type int _local static guard_;

//----- (004C93B0) --------------------------------------------------------
void __thiscall AreaInfoMgr::_AreaInfoMgr(AreaInfoMgr *this)
{
  AreaInfoMgr *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2

  v1 = this;
  this->vfptr = (AreaInfoMgrVtbl *)&AreaInfoMgr::_vftable_;
  v2 = *(void ***)&this->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_listRequest.baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
}
// 98C870: using guessed type int (__thiscall *AreaInfoMgr___vftable_)(void *p, char);

//----- (004C9400) --------------------------------------------------------
void *__thiscall AreaInfoMgr::_vector_deleting_destructor_(AreaInfoMgr *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AreaInfoMgr::_AreaInfoMgr(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004C9430) --------------------------------------------------------
AreaInfoMgr *__cdecl AreaInfoMgr::GetInstance()
{
  void *v0; // eax@2
  std::exception this; // [sp+0h] [bp-1Ch]@5
  char *_What; // [sp+Ch] [bp-10h]@5
  int v4; // [sp+18h] [bp-4h]@2

  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    v4 = 0;
    kMgr.vfptr = (AreaInfoMgrVtbl *)&AreaInfoMgr::_vftable_;
    kMgr.m_listRequest.baseclass_0.baseclass_0._Mysize = 0;
    v0 = operator new(0x30u);
    if ( v0 )
    {
      *(_DWORD *)&kMgr.m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v0;
      *(_DWORD *)v0 = v0;
      *(_DWORD *)(*(_DWORD *)&kMgr.m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&kMgr.m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      kMgr.m_pkFrameWork = 0;
      atexit(_dynamic_atexit_destuctor_for__kMgr__);
    }
    _What = 0;
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
  }
  return &kMgr;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 98C870: using guessed type int (__thiscall *AreaInfoMgr___vftable_)(void *p, char);
// A987B8: using guessed type int _local static guard_;

//----- (004C94F0) --------------------------------------------------------
float __thiscall NiPoint3::SqrLength(NiPoint3 *this)
{
  float v1; // ST00_4@1
  double v2; // st7@1
  float result; // st7@2

  v1 = this->y * this->y + this->x * this->x + this->z * this->z;
  v2 = v1;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (004C9520) --------------------------------------------------------
void __thiscall GameFrameWork::ChangeCampMode(GameFrameWork *this, bool bCamp, char byMode)
{
  char *v3; // eax@2

  ((void (__stdcall *)(_DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[1].SetAbStateProperty)(bCamp, byMode);
  if ( bCamp )
  {
    v3 = Inventory::GetPlayMiniHouseSound(&g_kInventory);
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v3);
  }
}

//----- (004C9560) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainCharOnRevActNone(GameFrameWork *this, float fCurTime)
{
  GameFrameWork *v2; // ebx@1
  Char *v3; // esi@1
  MainChar::TargetType v4; // edi@1
  int v5; // edi@8
  int v6; // eax@8
  double v7; // st7@8
  void (__thiscall *v8)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@8
  double v9; // st7@8
  NiPoint3 thisa; // [sp+Ch] [bp-14h]@8
  double v11; // [sp+18h] [bp-8h]@8
  float fAttackableDist; // [sp+1Ch] [bp-4h]@8

  v2 = this;
  v3 = (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  v4 = MainChar::GetTargetType(
         (MainChar *)g_pkMainChar,
         (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0]);
  if ( v3
    && (unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[1].Deaffect)(v3)
    && !Char::IsNPC(v3)
    && ((unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[1].Affect)(v3) || v4 == 3) )
  {
    if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)()
      || !AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54)
      || (v5 = ((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[6].Deaffect)(v3),
          v6 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)(),
          thisa.x = *(float *)v5 - *(float *)v6,
          thisa.y = *(float *)(v5 + 4) - *(float *)(v6 + 4),
          v7 = *(float *)(v5 + 8) - *(float *)(v6 + 8),
          v8 = g_pkMainChar->baseclass_0.vfptr[9].SetAbStateProperty,
          thisa.z = v7,
          ((void (__stdcall *)(Char *))v8)(v3),
          fAttackableDist = v7,
          v11 = g_fAttackableDist + fAttackableDist,
          v9 = NiPoint3::SqrLength(&thisa),
          v11 * v11 >= v9) )
    {
      if ( g_pkMainChar == v3 )
      {
        g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
        LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
      }
    }
    else
    {
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
      GameFrameWork::OnDoublePickChar(v2, v3);
    }
  }
  else
  {
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
  }
}
// A7B16C: using guessed type float g_fAttackableDist;

//----- (004C96E0) --------------------------------------------------------
void __thiscall GameFrameWork::ActJump(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  NiPoint3 *v2; // eax@13

  v1 = this;
  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)() > 0
    && !AttackSequenceManager::IsDuringAttackInServer(&g_pkMainChar->baseclass_54)
    && AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) <= 0
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)()
    && !Char::IsActGathering(g_pkMainChar)
    && !Char::IsActProducing(g_pkMainChar)
    && Char::IsMoverMovable(g_pkMainChar)
    && !v1->m_kSkillCasting.eState )
  {
    ITask::DirectDispatchAll(32, 0);
    if ( Char::IsActProducing(g_pkMainChar) )
      ITask::DirectDispatchAll(35, 0);
    if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[11].Deaffect)() )
    {
      GameFrameWork::NcActJumpCmd(v1);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
      v2 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      GameFrameWork::NcActStopReq(v1, v2);
    }
  }
}

//----- (004C9800) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainCharOnRevActPickItem(GameFrameWork *this, float fCurTime)
{
  g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
}

//----- (004C9820) --------------------------------------------------------
bool __thiscall GameFrameWork::UpdateMainCharMove(GameFrameWork *this, float fCurTime)
{
  GameFrameWork *v2; // esi@1
  NiPoint3 *v3; // eax@2
  Mover *v4; // ecx@2
  bool result; // al@4

  v2 = this;
  if ( MainChar::TryMove8((MainChar *)g_pkMainChar, fCurTime) )
  {
    result = 1;
  }
  else
  {
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    v3 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v2, v3);
    v4 = g_pkMainChar->m_pkMover;
    if ( v4 )
      ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    result = 0;
  }
  return result;
}

//----- (004C98B0) --------------------------------------------------------
void __thiscall GameFrameWork::StopMove(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  NiPoint3 *v2; // eax@2
  Mover *v3; // ecx@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() )
  {
    ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v2 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v1, v2);
    v3 = g_pkMainChar->m_pkMover;
    if ( v3 )
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
  }
}

//----- (004C9920) --------------------------------------------------------
void __thiscall GameFrameWork::Assist(GameFrameWork *this, Char *pkChar)
{
  GameFrameWork *v2; // edi@1
  unsigned __int16 v3; // ax@4
  Char *v4; // eax@4

  v2 = this;
  if ( pkChar && pkChar->m_bUserCharacter && pkChar != g_pkMainChar )
  {
    v3 = AttackSequenceManager::GetLastTargetHandle(&pkChar->baseclass_54);
    v4 = CharMgr::GetChar(&g_kCharMgr, v3);
    if ( v4 )
      GameFrameWork::OnOnePickChar(v2, v4);
    else
      GameFrameWork::NcBatAssistReq(v2, pkChar);
  }
}

//----- (004C9980) --------------------------------------------------------
void __thiscall GameFrameWork::Stick(GameFrameWork *this, Char *pkChar, bool bStart)
{
  GameFrameWork *v3; // edi@1
  Char *v4; // eax@4
  Char *v5; // ebx@4
  Mover *v6; // esi@6
  int v7; // esi@11
  int v8; // edi@11
  void (__thiscall *v9)(AbStateInfectee *, ABSTATEINDEX, bool, int); // eax@11
  float v10; // ST20_4@12
  float v11; // ST24_4@12
  float v12; // ST28_4@12
  int v13; // eax@12
  float v14; // eax@12
  float v15; // ST14_4@12
  float v16; // ST18_4@12
  float v17; // ST1C_4@12
  NiPoint3 pos3Pos; // [sp+28h] [bp-10h]@11
  GameFrameWork *thisa; // [sp+34h] [bp-4h]@1
  float bStarta; // [sp+44h] [bp+Ch]@11

  v3 = this;
  thisa = this;
  this->m_pkStickChar = 0;
  if ( pkChar && pkChar != g_pkMainChar && !AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, pkChar);
    v5 = v4;
    if ( v4 )
    {
      v3->m_pkStickChar = v4;
      if ( (unsigned __int8)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[15].SetAbStateProperty)(v4) != 1
        || (v6 = v3->m_pkStickChar->m_pkMover) == 0 )
        v6 = (Mover *)v5;
      if ( CNSTimer_Interval::IsRun_GetCount(&v3->m_kStickTimer, Timer::ms_fCurTime)
        && (unsigned __int8)v6->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v6)
        || bStart )
      {
        v7 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[6].Deaffect)(v5);
        v8 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
        v9 = g_pkMainChar->baseclass_0.vfptr[9].SetAbStateProperty;
        pos3Pos.x = *(float *)v7 - *(float *)v8;
        pos3Pos.y = *(float *)(v7 + 4) - *(float *)(v8 + 4);
        pos3Pos.z = *(float *)(v7 + 8) - *(float *)(v8 + 8);
        ((void (__stdcall *)(Char *))v9)(v5);
        bStarta = pos3Pos.x * pos3Pos.x + pos3Pos.y * pos3Pos.y + pos3Pos.z * pos3Pos.z;
        if ( bStarta > 2500.0 )
        {
          pos3Pos.x = *(float *)v8 - *(float *)v7;
          pos3Pos.y = *(float *)(v8 + 4) - *(float *)(v7 + 4);
          pos3Pos.z = *(float *)(v8 + 8) - *(float *)(v7 + 8);
          NiPoint3::Unitize(&pos3Pos);
          v10 = pos3Pos.x * 50.0;
          v11 = pos3Pos.y * 50.0;
          v12 = 50.0 * pos3Pos.z;
          v13 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[6].Deaffect)(v5);
          LODWORD(pos3Pos.x) = *(_DWORD *)v13;
          LODWORD(pos3Pos.y) = *(_DWORD *)(v13 + 4);
          LODWORD(v14) = *(_DWORD *)(v13 + 8);
          v15 = v10 + pos3Pos.x;
          pos3Pos.x = v15;
          v16 = pos3Pos.y + v11;
          pos3Pos.y = v16;
          v17 = v14 + v12;
          pos3Pos.z = v17;
          GameFrameWork::OnPickGround(thisa, &pos3Pos, 0);
        }
      }
    }
    else
    {
      ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004C9B60) --------------------------------------------------------
bool __thiscall GameFrameWork::CheckCancelingMoveUpdate(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  GameFrameWork::SkillCastState v3; // eax@5
  NiPoint3 *v4; // eax@8

  v1 = this;
  if ( g_pkMainChar->m_bWillDead || g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount )
    return 1;
  if ( Char::HaveCurrentSkillMoveAttrib(g_pkMainChar) )
    goto LABEL_11;
  v3 = v1->m_kSkillCasting.eState;
  if ( v3 == 2 )
    return 1;
  if ( v3 == 3 )
  {
    if ( !Char::GetReserveSkillSmash(g_pkMainChar) )
    {
      v4 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      GameFrameWork::NcActStopReq(v1, v4);
      GameFrameWork::NcBatSkillbashCastabortReq(v1);
      Char::CancelSkillAction(g_pkMainChar, 1);
      goto LABEL_9;
    }
    return 1;
  }
LABEL_9:
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
    && !Char::CancelSkillActionWhenHitTimePassed(g_pkMainChar) )
    return 1;
LABEL_11:
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount > 0
    || g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount )
    return 1;
  return g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount > 0;
}

//----- (004C9C20) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainCharOnRevActPickGround(GameFrameWork *this, float fCurTime, bool bMoveModeChange)
{
  GameFrameWork *v3; // edi@1
  NiPoint3 *v4; // eax@9
  Mover *v5; // esi@11
  NiPoint3 *v6; // [sp-Ch] [bp-28h]@15
  NiPoint3 *v7; // [sp-8h] [bp-24h]@15
  NiPoint3 kFrom; // [sp+4h] [bp-18h]@13
  NiPoint3 kRevPos; // [sp+10h] [bp-Ch]@9

  v3 = this;
  if ( GameFrameWork::CheckCancelingMoveUpdate(this) == 1 )
  {
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    return;
  }
  if ( AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) > 0 )
  {
    GameFrameWork::NcBatBashstopCmd(v3);
    AttackSequenceManager::HardStopAttack(&g_pkMainChar->baseclass_54);
  }
  if ( Char::IsActGathering(g_pkMainChar) )
    ITask::DirectDispatchAll(32, 0);
  if ( Char::IsActProducing(g_pkMainChar) )
    ITask::DirectDispatchAll(35, 0);
  v4 = MainChar::GetRevserveMovePos((MainChar *)g_pkMainChar);
  kRevPos.x = v4->x;
  kRevPos.y = v4->y;
  kRevPos.z = v4->z;
  if ( !AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, STA_PARALYSIS)
    && !AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, SAA_STOPANI) )
  {
    v5 = g_pkMainChar->m_pkMover;
    if ( !v5 || g_pkMainChar->m_uiMoverSlot )
    {
      ((void (__stdcall *)(NiPoint3 *, _DWORD, NiColor *, signed int))g_pkMainChar->baseclass_0.vfptr[7].SetAbStateProperty)(
        &kRevPos,
        bMoveModeChange,
        &Char::INVALIDPOINT3,
        1);
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kFrom);
      if ( !((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].Affect)() )
      {
        GameFrameWork::NcActWalkReq(v3, &kFrom, &kRevPos);
        goto LABEL_20;
      }
      v7 = &kRevPos;
      v6 = &kFrom;
    }
    else
    {
      ((void (__thiscall *)(Mover *, NiPoint3 *, _DWORD, NiColor *, signed int))v5->baseclass_0.baseclass_0.vfptr[7].SetAbStateProperty)(
        v5,
        &kRevPos,
        bMoveModeChange,
        &Char::INVALIDPOINT3,
        1);
      MoveToTarget::Copy(&v5->baseclass_0.m_kMoveToTarget, &g_pkMainChar->m_kMoveToTarget);
      ((void (__thiscall *)(Mover *, NiPoint3 *))v5->baseclass_0.baseclass_0.vfptr[6].SetAbStateProperty)(v5, &kFrom);
      if ( !((int (__thiscall *)(Mover *))v5->baseclass_0.baseclass_0.vfptr[7].Affect)(v5) )
      {
        GameFrameWork::NcActWalkReq(v3, &kFrom, &kRevPos);
LABEL_20:
        g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
        LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
        return;
      }
      v7 = &kRevPos;
      v6 = &kFrom;
    }
    GameFrameWork::NcActRunReq(v3, v6, v7);
    goto LABEL_20;
  }
}

//----- (004C9E00) --------------------------------------------------------
void __thiscall GameFrameWork::MainCharMoveToChar(GameFrameWork *this, Char *pkTargetChar, float fDistance, int eNextAct)
{
  GameFrameWork *v4; // ebx@1
  void (__thiscall *v5)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@2
  signed int v6; // edi@3
  signed int v7; // esi@4
  float v8; // ST20_4@5
  char *v9; // eax@8
  NiAVObject *v10; // eax@11
  int v11; // [sp+1Ch] [bp-3Ch]@14
  NiPoint3 kFrom; // [sp+2Ch] [bp-2Ch]@12
  NiPoint3 kDirToMainChar; // [sp+38h] [bp-20h]@2
  NiPoint3 kGroundPos; // [sp+44h] [bp-14h]@2
  float v15; // [sp+50h] [bp-8h]@4
  float v16; // [sp+54h] [bp-4h]@5
  signed int i; // [sp+60h] [bp+8h]@3
  signed int j; // [sp+64h] [bp+Ch]@4

  v4 = this;
  if ( !g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount )
  {
    Char::GetDirToChar(pkTargetChar, &kDirToMainChar, g_pkMainChar);
    NiPoint3::Unitize(&kDirToMainChar);
    v5 = pkTargetChar->baseclass_0.vfptr[6].SetAbStateProperty;
    kDirToMainChar.x = kDirToMainChar.x * fDistance;
    kDirToMainChar.y = kDirToMainChar.y * fDistance;
    kDirToMainChar.z = fDistance * kDirToMainChar.z;
    ((void (__thiscall *)(Char *, NiPoint3 *))v5)(pkTargetChar, &kGroundPos);
    kGroundPos.x = kDirToMainChar.x + kGroundPos.x;
    kGroundPos.y = kDirToMainChar.y + kGroundPos.y;
    kGroundPos.z = kGroundPos.z + kDirToMainChar.z;
    if ( World::IsBlock8(&g_kWorld, kGroundPos.x, kGroundPos.y) == 1 )
    {
      v6 = -20;
      i = -20;
      while ( 2 )
      {
        v7 = -20;
        j = -20;
        v15 = (double)i;
        do
        {
          v16 = (double)j + kGroundPos.y;
          v8 = v16;
          v16 = v15 + kGroundPos.x;
          if ( !World::IsBlock8(&g_kWorld, v16, v8) )
          {
            kGroundPos.x = (double)i + kGroundPos.x;
            kGroundPos.y = (double)j + kGroundPos.y;
            goto LABEL_10;
          }
          ++v7;
          j = v7;
        }
        while ( v7 < 20 );
        ++v6;
        i = v6;
        if ( v6 < 20 )
          continue;
        break;
      }
      v9 = TextData::Get(0x2D517FA1u);
      GameFrameWork::AddSysMsg(v4, v9);
      ((void (__cdecl *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    }
    else
    {
LABEL_10:
      ((void (__stdcall *)(NiPoint3 *, _DWORD, NiColor *, signed int))g_pkMainChar->baseclass_0.vfptr[7].SetAbStateProperty)(
        &kGroundPos,
        0,
        &Char::INVALIDPOINT3,
        1);
      LODWORD(kDirToMainChar.x) = (_DWORD)kGroundPos.x;
      kDirToMainChar.y = kGroundPos.y;
      kDirToMainChar.z = kGroundPos.z;
      if ( dword_B30C38 )
      {
        World::GetAdvGroundPos(&g_kWorld, kGroundPos.x, kGroundPos.y, &kDirToMainChar);
        v10 = dword_B30C38;
        LODWORD(dword_B30C38->m_kLocal.m_Translate.x) = (_DWORD)kDirToMainChar.x;
        v10->m_kLocal.m_Translate.y = kDirToMainChar.y;
        v10->m_kLocal.m_Translate.z = kDirToMainChar.z;
        NiAVObject::Update(dword_B30C38, 0.0, 1);
      }
      ((void (__cdecl *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kFrom);
      if ( eNextAct )
      {
        v11 = eNextAct;
      }
      else
      {
        if ( LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) )
          v11 = 3;
        else
          v11 = 0;
      }
      MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, (MainChar::ReserveAct)v11);
      MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, &kGroundPos);
    }
  }
}
// 4C9E00: could not find valid save-restore pair for edi

//----- (004CA010) --------------------------------------------------------
void __thiscall GameFrameWork::MainCharMoveToChar(GameFrameWork *this, NiPoint3 *rkPos, float fDistance, int eNextAct)
{
  GameFrameWork *v4; // edi@1
  NiPoint3 *v5; // eax@2
  float v6; // edx@2
  _BYTE v7[12]; // ST04_12@4
  int v8; // [sp-4h] [bp-3Ch]@6
  NiPoint3 kFrom; // [sp+8h] [bp-30h]@4
  NiPoint3 result; // [sp+14h] [bp-24h]@2
  NiPoint3 kDirToMainChar; // [sp+20h] [bp-18h]@2
  NiPoint3 kGroundPos; // [sp+2Ch] [bp-Ch]@2

  v4 = this;
  if ( !g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount )
  {
    v5 = Char::GetDirToPosition(g_pkMainChar, &result, rkPos);
    kDirToMainChar.x = -v5->x;
    kDirToMainChar.y = -v5->y;
    kDirToMainChar.z = -v5->z;
    NiPoint3::Unitize(&kDirToMainChar);
    v6 = rkPos->y;
    kGroundPos.x = rkPos->x;
    kDirToMainChar.x = kDirToMainChar.x * fDistance;
    kDirToMainChar.y = fDistance * kDirToMainChar.y;
    kGroundPos.x = kGroundPos.x + kDirToMainChar.x;
    kGroundPos.y = v6 + kDirToMainChar.y;
    kGroundPos.z = 0.0;
    if ( !GameFrameWork::CheckCancelingMoveUpdate(v4) )
      ((void (__stdcall *)(NiPoint3 *, _DWORD, NiColor *, signed int))g_pkMainChar->baseclass_0.vfptr[7].SetAbStateProperty)(
        &kGroundPos,
        0,
        &Char::INVALIDPOINT3,
        1);
    *(_DWORD *)v7 = (_DWORD)kGroundPos.x;
    *(_QWORD *)&v7[4] = *(_QWORD *)&kGroundPos.y;
    World::SetMoveTargetPointPos(&g_kWorld, *(NiPoint3 *)v7);
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kFrom);
    if ( eNextAct )
    {
      v8 = eNextAct;
    }
    else
    {
      if ( LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) )
        v8 = 3;
      else
        v8 = 0;
    }
    MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, (MainChar::ReserveAct)v8);
    MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, &kGroundPos);
  }
}

//----- (004CA130) --------------------------------------------------------
void __thiscall GameFrameWork::CurTargetAssist(GameFrameWork *this)
{
  unsigned int v1; // esi@1
  GameFrameWork *v2; // edi@1
  unsigned __int16 v3; // ax@4
  Char *v4; // eax@4

  v1 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  v2 = this;
  if ( v1 && *(_BYTE *)(v1 + 2672) && (Char *)v1 != g_pkMainChar )
  {
    v3 = AttackSequenceManager::GetLastTargetHandle((AttackSequenceManager *)(v1 + 84));
    v4 = CharMgr::GetChar(&g_kCharMgr, v3);
    if ( v4 )
      GameFrameWork::OnOnePickChar(v2, v4);
    else
      GameFrameWork::NcBatAssistReq(v2, (Char *)v1);
  }
}

//----- (004CA180) --------------------------------------------------------
void __thiscall GameFrameWork::AutoRun(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].__vecDelDtor)() > 0
    && !AttackSequenceManager::IsDuringAttackInServer(&g_pkMainChar->baseclass_54)
    && AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) <= 0
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)()
    && !Char::IsActGathering(g_pkMainChar)
    && !Char::IsActProducing(g_pkMainChar)
    && Char::IsMoverMovable(g_pkMainChar)
    && g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount <= 0
    && g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount <= 0
    && !v1->m_kSkillCasting.eState )
  {
    KeyboardMoveProcess::SetAutoRun(&v1->m_kCharMover, v1->m_kCharMover.m_bAutoRun == 0);
    if ( !v1->m_kCharMover.m_bAutoRun )
      GameFrameWork::StopMove(v1);
  }
}

//----- (004CA260) --------------------------------------------------------
bool __thiscall GameFrameWork::CheckUsableDirection(GameFrameWork *this, unsigned __int16 kSkillID, NiPoint3 TargetPos)
{
  return 1;
}

//----- (004CA270) --------------------------------------------------------
bool __thiscall GameFrameWork::CheckWeaponCostumeWhenAttackTry(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  Item *v2; // esi@1
  Item *v3; // ebx@1
  Item *v4; // eax@1
  char *v5; // eax@4
  char *v6; // eax@7

  v1 = this;
  v2 = Inventory::GetEquipedWeaponAcc(&g_kInventory);
  v3 = Inventory::GetEquipedWeapon(&g_kInventory);
  v4 = Inventory::GetShieldAccEquip(&g_kInventory);
  if ( v2 )
  {
    if ( !((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[19].__vecDelDtor)(v2) )
    {
      v5 = TextData2::Get(0xF3D5672u);
      goto LABEL_7;
    }
  }
  else
  {
    if ( !v4 )
      return 1;
  }
  if ( !v3 )
  {
    v5 = TextData2::Get(0x43B5B3C5u);
LABEL_7:
    v6 = fs(v5);
    GameFrameWork::AddSysMsg(v1, v6);
    return 0;
  }
  return 1;
}

//----- (004CA2F0) --------------------------------------------------------
void __thiscall GameFrameWork::MainCharTryUseSkill(GameFrameWork *this, unsigned __int16 kSkillID, float fCurTime, Char *pkTarget)
{
  GameFrameWork *v4; // esi@1
  int v5; // ebx@4
  int v6; // edi@4
  ActiveSkillInfo *v7; // eax@11
  ActiveSkillInfo *v8; // ebx@11
  Name3 *v9; // eax@13
  MapInfo *v10; // eax@13
  char *v11; // eax@16
  NiPoint3 *v12; // eax@33
  unsigned int v13; // eax@40
  Char *v14; // eax@46
  char *v15; // eax@48
  unsigned int v16; // [sp-Ch] [bp-1Ch]@8
  Name3 result; // [sp+4h] [bp-Ch]@13
  ActiveSkillInfo *pkInfo; // [sp+18h] [bp+8h]@11
  ActiveSkillInfo *pkInfoa; // [sp+18h] [bp+8h]@39

  v4 = this;
  if ( !g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnAttackableCount )
  {
    if ( g_pkMainChar->m_byMode == 1 )
    {
      Char::SetMode(g_pkMainChar, 2);
      GameFrameWork::NcActChangeModeReq(v4, 2);
    }
    v5 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    v6 = kSkillID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            kSkillID) )
    {
      if ( kSkillID <= *(_WORD *)(v5 + 200) && *(_DWORD *)(*(_DWORD *)(v5 + 196) + 4 * kSkillID) )
      {
        if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnAttackableCount )
        {
          v16 = 608581482;
LABEL_16:
          v11 = TextData2::Get(v16);
          GameFrameWork::AddSysMsg(v4, v11);
          return;
        }
        if ( !Char::CheckActState(g_pkMainChar, 500000)
          && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
        {
          ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
          v7 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(kSkillID, 1);
          v8 = v7;
          pkInfo = v7;
          if ( v7 )
          {
            if ( v7->CannotInside == 1 )
            {
              v9 = World::GetMapName(&g_kWorld, &result);
              v10 = MapInfoTab::GetByMapName(v9);
              if ( !v10 )
              {
                if ( v4->m_kSkillCasting.eState )
                  GameFrameWork::CancelSkillCasting(v4);
                goto LABEL_19;
              }
              if ( v10->InSide == 1 )
              {
                v16 = 2022678145;
                goto LABEL_16;
              }
            }
            if ( g_pkMainChar->m_bWillDead )
              return;
            if ( v8->DemandType == 6 || GameFrameWork::CheckWeaponCostumeWhenAttackTry(v4) )
            {
              if ( (_WORD)v6 != 1620 || !pkTarget->m_bIsRevived )
              {
                if ( Skill::IsSkillUsePossible(v6) && !Char::IsDuringSkillActionAndHitTimeNotPassed(g_pkMainChar) )
                {
                  ((void (__thiscall *)(Char *))pkTarget->baseclass_0.vfptr[6].Deaffect)(pkTarget);
                  MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
                  g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
                  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() == 1
                    && ((unsigned __int8)((int (__thiscall *)(Char *))pkTarget->baseclass_0.vfptr[1].Affect)(pkTarget)
                     && pkInfo->Range < 0x33
                     || !Skill::IsMovingSkill(v6)) )
                  {
                    if ( v4->m_kCharMover.m_bAutoRun )
                      KeyboardMoveProcess::SetAutoRun(&v4->m_kCharMover, 0);
                    v4->m_pkStickChar = 0;
                    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
                    v12 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
                    GameFrameWork::NcActStopReq(v4, v12);
                  }
                  ITask::DirectDispatchAll(32, 0);
                  if ( Char::IsActProducing(g_pkMainChar) )
                    ITask::DirectDispatchAll(35, 0);
                  if ( v4->m_kSkillCasting.eState == 1 )
                    v4->m_kSkillCasting.eState = 0;
                  AttackSequenceManager::HardStopAttack(&g_pkMainChar->baseclass_54);
                  if ( IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::GetByID(v6, 1) )
                  {
                    pkInfoa = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v6, 1);
                    ((void (__stdcall *)(Char *, signed int, int))g_pkMainChar->baseclass_0.vfptr[9].GetAbstateColor)(
                      pkTarget,
                      1,
                      v6);
                    if ( pkInfoa )
                    {
                      v13 = pkInfoa->CastTime;
                      if ( v13 )
                        CastingProgressWin::StartCasting(v4->m_pkCastingProgressBar, v13, 0);
                      else
                        Char::SetReserveSkillSmash(g_pkMainChar, 1);
                    }
                    v4->m_kSkillCasting.kTargetHandle = pkTarget->m_kHandle;
                    v4->m_kSkillCasting.kSkillID = v6;
                    if ( g_pkMainChar[1].m_bGroundSkillTargetPointSetted )
                      GameFrameWork::NcItemUseActiveskillReq(
                        v4,
                        *(_DWORD *)&g_pkMainChar[1].m_szBlockName[1],
                        pkTarget->m_kHandle);
                    else
                      GameFrameWork::NcBatSkillbashObjCastReq(v4, v6, pkTarget->m_kHandle);
                    v14 = g_pkMainChar;
                    g_pkMainChar[1].m_bGroundSkillTargetPointSetted = 0;
                    *(_DWORD *)&v14[1].m_szBlockName[1] = 0;
                  }
                  LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 1;
                  return;
                }
                v15 = TextData::Get(0xF6EB252Eu);
                GameFrameWork::AddSysMsg(v4, v15);
              }
              MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
              g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
              return;
            }
LABEL_19:
            MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
            g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
            LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
            return;
          }
          if ( v4->m_kSkillCasting.eState )
            GameFrameWork::CancelSkillCasting(v4);
          MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
          LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
        }
      }
    }
  }
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004CA700) --------------------------------------------------------
bool __thiscall GameFrameWork::MainCharTryUseSkill(GameFrameWork *this, unsigned __int16 kSkillID, float fTime, unsigned int x, unsigned int y)
{
  GameFrameWork *v5; // esi@1
  Char *v6; // ecx@1
  char *v7; // eax@5
  Item *v9; // edi@8
  Item *v10; // ebx@8
  Item *v11; // eax@8
  char *v12; // eax@11
  char *v13; // eax@11
  char *v14; // eax@15
  char *v15; // eax@15
  NiPoint3 *v16; // eax@24
  ActiveSkillInfo *v17; // edi@27
  unsigned int v18; // eax@31
  ActiveSkillViewInfo *v19; // eax@32
  Char *v20; // eax@39
  char *v21; // eax@40

  v5 = this;
  v6 = g_pkMainChar;
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnAttackableCount )
    return 0;
  if ( g_pkMainChar->m_byMode == 1 )
  {
    Char::SetMode(g_pkMainChar, 2);
    GameFrameWork::NcActChangeModeReq(v5, 2);
    v6 = g_pkMainChar;
  }
  if ( v6->baseclass_0.m_kAbStateProperty.iUnAttackableCount )
  {
    v7 = TextData2::Get(0x2446376Au);
    GameFrameWork::AddSysMsg(v5, v7);
    return 0;
  }
  if ( Char::CheckActState(v6, 500000) )
    return 0;
  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
  v9 = Inventory::GetEquipedWeaponAcc(&g_kInventory);
  v10 = Inventory::GetEquipedWeapon(&g_kInventory);
  v11 = Inventory::GetShieldAccEquip(&g_kInventory);
  if ( v9 )
  {
    if ( !((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[19].__vecDelDtor)(v9) )
    {
      v14 = TextData2::Get(0xF3D5672u);
      v15 = fs(v14);
      GameFrameWork::AddSysMsg(v5, v15);
      MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
      return 0;
    }
  }
  else
  {
    if ( !v11 )
      goto LABEL_16;
  }
  if ( !v10 )
  {
    v12 = TextData2::Get(0x43B5B3C5u);
    v13 = fs(v12);
    GameFrameWork::AddSysMsg(v5, v13);
    if ( v5->m_kSkillCasting.eState )
      GameFrameWork::CancelSkillCasting(v5);
    MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
    return 0;
  }
LABEL_16:
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)()
    || g_pkMainChar->m_bWillDead )
    return 0;
  if ( !Skill::IsSkillUsePossible(kSkillID) || Char::IsDuringSkillActionAndHitTimeNotPassed(g_pkMainChar) )
  {
    v21 = TextData::Get(0xF6EB252Eu);
    GameFrameWork::AddSysMsg(v5, v21);
    return 1;
  }
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
  MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() == 1
    && !Skill::IsMovingSkill(kSkillID) )
  {
    if ( v5->m_kCharMover.m_bAutoRun )
      KeyboardMoveProcess::SetAutoRun(&v5->m_kCharMover, 0);
    v5->m_pkStickChar = 0;
    ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    v16 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v5, v16);
  }
  ITask::DirectDispatchAll(32, 0);
  if ( Char::IsActProducing(g_pkMainChar) )
    ITask::DirectDispatchAll(35, 0);
  v17 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(kSkillID, 1);
  if ( v17->DemandType != 6 && !GameFrameWork::CheckWeaponCostumeWhenAttackTry(v5) )
  {
    MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
    return 0;
  }
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[9].DeleteAbStateByAbstateIndex)(
    x,
    y,
    1,
    kSkillID);
  v18 = v17->CastTime;
  if ( v18 )
  {
    CastingProgressWin::StartCasting(v5->m_pkCastingProgressBar, v18, 0);
  }
  else
  {
    v19 = IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::GetByID(v17->ID, 1);
    if ( !v19 || v19->CastingType != 1 )
    {
      Char::SetSkillTargetGroundPoint(g_pkMainChar, x, y, 0);
      Char::SetReserveSkillSmash(g_pkMainChar, 1);
    }
  }
  v5->m_kSkillCasting.kTargetHandle = -1;
  v5->m_kSkillCasting.kSkillID = kSkillID;
  if ( g_pkMainChar[1].m_bGroundSkillTargetPointSetted )
    GameFrameWork::NcItemUseActiveskillReq(v5, *(_DWORD *)&g_pkMainChar[1].m_szBlockName[1], x, y);
  else
    GameFrameWork::NcBatSkillbashFldCastReq(v5, kSkillID, x, y);
  v20 = g_pkMainChar;
  g_pkMainChar[1].m_bGroundSkillTargetPointSetted = 0;
  *(_DWORD *)&v20[1].m_szBlockName[1] = 0;
  LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 1;
  return 1;
}

//----- (004CAAB0) --------------------------------------------------------
bool __thiscall GameFrameWork::CheckGroundSkillEnabled(GameFrameWork *this, bool bForcetoMove)
{
  GameFrameWork *v2; // esi@1
  bool result; // al@2
  _BYTE v4[12]; // ST0C_12@3
  _BYTE v5[12]; // ST00_12@3
  double v6; // st7@4
  int v7; // ebx@4
  int v8; // edi@4
  int v9; // edi@5
  int v10; // ecx@8
  int v11; // eax@11
  double v12; // st7@11
  double v13; // st6@11
  int v14; // eax@11
  float v15; // ST18_4@18
  NiPoint3 kGroundPos; // [sp+1Ch] [bp-1Ch]@3
  NiPoint3 kDistVector; // [sp+28h] [bp-10h]@4
  bool bApplied; // [sp+37h] [bp-1h]@4

  v2 = this;
  if ( this->m_kSkillCasting.eState != 1
    || (*(_DWORD *)v4 = LODWORD(this->m_kCameraRayDir.x),
        *(_QWORD *)&v4[4] = *(_QWORD *)&this->m_kCameraRayDir.y,
        *(_DWORD *)v5 = LODWORD(this->m_kCameraRayOrigin.x),
        *(_QWORD *)&v5[4] = *(_QWORD *)&this->m_kCameraRayOrigin.y,
        !World::GetAdvGroundPos(&g_kWorld, *(NiPoint3 *)v5, *(NiPoint3 *)v4, &kGroundPos, 0)) )
    return 0;
  v6 = kGroundPos.x;
  v2->m_kSkillCasting.eTargetType = 1;
  bApplied = 0;
  v2->m_kSkillCasting.kGroundTypeDetail.x = (signed __int64)v6;
  *(_QWORD *)&kDistVector.y = (signed __int64)kGroundPos.y;
  v2->m_kSkillCasting.kGroundTypeDetail.y = (signed __int64)kGroundPos.y;
  v7 = LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0]);
  v8 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0])) )
  {
    if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) )
    {
      v10 = *(_DWORD *)(v8 + 196);
      if ( *(_DWORD *)(v10 + 4 * v7) )
        v9 = *(_DWORD *)(v10 + 4 * v7);
      else
        v9 = 0;
    }
    else
    {
      v9 = 0;
    }
  }
  else
  {
    v9 = 0;
  }
  v11 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  v12 = kGroundPos.x;
  kDistVector.x = *(float *)v11 - kGroundPos.x;
  v13 = *(float *)(v11 + 4);
  v14 = *(_DWORD *)(v9 + 180) * *(_DWORD *)(v9 + 180);
  kDistVector.y = v13 - kGroundPos.y;
  kDistVector.z = kDistVector.y * kDistVector.y + kDistVector.x * kDistVector.x;
  if ( kDistVector.z >= (double)(unsigned int)v14 )
  {
    if ( v2->m_kCharMover.m_bAutoRun || v2->m_pkStickChar )
    {
      KeyboardMoveProcess::SetAutoRun(&v2->m_kCharMover, 0);
      v2->m_pkStickChar = 0;
    }
    if ( !bForcetoMove )
      return bApplied;
    v15 = (double)*(unsigned int *)(v9 + 180);
    GameFrameWork::MainCharMoveToChar(v2, &kGroundPos, v15, 6);
  }
  else
  {
    *(_QWORD *)&kDistVector.y = (signed __int64)v12;
    if ( GameFrameWork::MainCharTryUseSkill(
           v2,
           v7,
           Timer::ms_fCurTime,
           (signed __int64)v12,
           (signed __int64)kGroundPos.y) )
    {
      bApplied = 1;
      result = 1;
      v2->m_kSkillCasting.eState = 2;
      return result;
    }
  }
  return 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (004CACF0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateKeyboardMove(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  NiPointer<MHDiceGameTask> *v2; // eax@9
  MHDiceGameTask *v3; // edi@9
  MHDiceGameTask *v4; // ebx@9
  int v5; // ebx@18
  float v6; // edx@24
  float v7; // eax@24
  World::PickEnum v8; // eax@26
  mhState v9; // edi@39
  World::PickEnum v10; // eax@39
  mhRepairObjWin *v11; // ecx@45
  NiPoint3 *v12; // eax@66
  Mover *v13; // ecx@66
  NiPoint3 kGroundPos; // [sp+4h] [bp-20h]@2
  Char *pkChar; // [sp+10h] [bp-14h]@2
  DropItem *pkDropItem; // [sp+14h] [bp-10h]@2
  Char *v17; // [sp+18h] [bp-Ch]@26
  NiPointer<MHDiceGameTask> result; // [sp+1Ch] [bp-8h]@9
  _BYTE hMiniHouse[4]; // [sp+20h] [bp-4h]@2

  v1 = this;
  if ( dword_B70350 < 1
    || World::Pick(
         &g_kWorld,
         &this->m_kCameraRayOrigin,
         &this->m_kCameraRayDir,
         (Char **)&pkDropItem,
         &kGroundPos,
         (DropItem **)&pkChar,
         (unsigned __int16 *)hMiniHouse) != 2 )
    goto LABEL_75;
  if ( dword_B30F24 )
  {
    ItemRepairWin::CancelItemRepair(v1->m_pkItemRepairWin);
    return;
  }
  if ( dword_B30F28 )
  {
    InventoryWin::OnCreateNewSocket(v1->m_pkInventoryWin, 0);
    return;
  }
  if ( InventoryWin::ms_uiMode != 8 )
  {
LABEL_75:
    v2 = MHDiceGameTask::GetDiceGameTask(&result);
    v3 = result.m_pObject;
    v4 = v2->m_pObject;
    if ( result.m_pObject
      && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    if ( !v4 || !MHDiceGameTask::IsGambleMode(v4) )
    {
      hMiniHouse[1] = 0;
      if ( dword_B70350 >= 1 )
      {
        hMiniHouse[1] = v1->m_kCharMover.m_bAutoRun;
        if ( hMiniHouse[1] )
          v1->m_kCharMover.m_bAutoRun = 0;
      }
      result.m_pObject = (MHDiceGameTask *)&v1->m_kCharMover;
      v5 = KeyboardMoveProcess::Update(&v1->m_kCharMover);
      if ( hMiniHouse[1] && !v1->m_kCharMover.m_bAutoRun )
      {
        v5 = 0;
        v1->m_kCharMover.m_bAutoRun = 1;
      }
      if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount )
        v5 = 0;
      switch ( v5 )
      {
        case 2:
          v6 = v1->m_kCharMover.m_pos3TargetPos.y;
          v7 = v1->m_kCharMover.m_pos3TargetPos.z;
          kGroundPos.x = v1->m_kCharMover.m_pos3TargetPos.x;
          v1->m_pkStickChar = 0;
          kGroundPos.y = v6;
          kGroundPos.z = v7;
          GameFrameWork::OnPickGround(v1, &kGroundPos, 0);
          goto LABEL_68;
        case 1:
          if ( dword_B70350 < 1 )
            goto LABEL_68;
          v8 = World::Pick(
                 &g_kWorld,
                 &v1->m_kCameraRayOrigin,
                 &v1->m_kCameraRayDir,
                 &v17,
                 &kGroundPos,
                 &pkDropItem,
                 (unsigned __int16 *)&pkChar);
          if ( InventoryWin::ms_uiMode == 8 && v8 )
          {
            PgFrameWork::AddMsg(&v1->baseclass_0, 0x10Au, 0, 0);
            v1->m_bPickCancel = 0;
            return;
          }
          switch ( v8 )
          {
            case 1:
              if ( !GameFrameWork::CheckGroundSkillEnabled(v1, 0) )
              {
                GameFrameWork::OnPickChar(v1, v17);
                goto LABEL_34;
              }
              break;
            case 2:
              GameFrameWork::CheckGroundSkillEnabled(v1, 0);
              break;
            case 3:
              GameFrameWork::GetDropItemByPicking(v1, pkDropItem);
              goto LABEL_34;
            case 4:
              GameFrameWork::OnPickMiniHouse(v1, (unsigned __int16)pkChar);
LABEL_34:
              if ( dword_B7035C )
                --dword_B7035C;
              break;
            default:
              break;
          }
LABEL_68:
          if ( !hMiniHouse[1] )
            goto LABEL_71;
          if ( v5 )
          {
            KeyboardMoveProcess::SetAutoRun((KeyboardMoveProcess *)result.m_pObject, 0);
LABEL_71:
            if ( v5 )
              ITask::DirectDispatchAll(32, 0);
          }
          break;
        case 0:
          if ( dword_B70350 >= 1 && !GameFrameWork::CheckGroundSkillEnabled(v1, 1) )
          {
            v9 = nowState;
            v10 = World::Pick(
                    &g_kWorld,
                    &v1->m_kCameraRayOrigin,
                    &v1->m_kCameraRayDir,
                    &pkChar,
                    &kGroundPos,
                    (DropItem **)&v17,
                    (unsigned __int16 *)&pkDropItem);
            switch ( v10 )
            {
              case 1:
                GameFrameWork::OnPickChar(v1, pkChar);
                goto LABEL_41;
              case 4:
                GameFrameWork::OnPickMiniHouse(v1, (unsigned __int16)pkDropItem);
                goto LABEL_41;
              case 5:
              case 10:
                if ( nowState != 2 )
                  goto LABEL_68;
                v11 = v1->m_pkMHRepairWin;
                if ( v10 == 5 )
                {
                  if ( !(unsigned __int8)((int (*)(void))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
                    && word_AA5134 != -1 )
                  {
                    mhRepairObjWin::SetRepairObjID(v1->m_pkMHRepairWin, word_AA5134);
                    GameFrameWork::OpenMHRepairWin(v1, 1, 1);
                  }
                }
                else
                {
                  if ( !(unsigned __int8)((int (*)(void))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
                    && v1->m_pkMHRepairWin )
                    GameFrameWork::OpenMHRepairWin(v1, 0, 0);
                }
                return;
              case 2:
                v1->m_pkStickChar = 0;
                if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount > 0 )
                  goto LABEL_68;
                if ( v9 != 3 )
                {
                  if ( v9 == 4 )
                    MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_NORMAL);
                  else
                    GameFrameWork::OnPickGround(v1, &kGroundPos, 1);
                }
                if ( dword_B7035C )
                  --dword_B7035C;
                if ( !hMiniHouse[1] )
                  return;
                KeyboardMoveProcess::SetAutoRun((KeyboardMoveProcess *)result.m_pObject, 0);
                break;
              case 8:
                if ( !dword_AA5124 )
                  GameFrameWork::OnPickGround(v1, &kGroundPos, 1);
                goto LABEL_68;
              case 3:
                GameFrameWork::GetDropItemByPicking(v1, (DropItem *)v17);
LABEL_41:
                if ( dword_B7035C )
                  --dword_B7035C;
                break;
              default:
                goto LABEL_68;
            }
          }
          goto LABEL_68;
        case 3:
          if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() )
          {
            if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[10].Affect)() )
            {
              ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
              ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
              v12 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
              GameFrameWork::NcActStopReq(v1, v12);
              v13 = g_pkMainChar->m_pkMover;
              if ( v13 )
                ((void (__stdcall *)(signed int))v13->baseclass_0.baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
            }
          }
          goto LABEL_68;
        default:
          goto LABEL_68;
      }
    }
  }
  else
  {
    PgFrameWork::AddMsg(&v1->baseclass_0, 0x10Au, 0, 0);
    v1->m_bPickCancel = 0;
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// AA5124: using guessed type int dword_AA5124;
// AA5134: using guessed type __int16 word_AA5134;
// B30F24: using guessed type int dword_B30F24;
// B30F28: using guessed type int dword_B30F28;
// B70350: using guessed type int dword_B70350;
// B7035C: using guessed type int dword_B7035C;

//----- (004CB1C0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainCharOnRevActSkill(GameFrameWork *this, float fCurTime)
{
  GameFrameWork *v2; // ebx@1
  MapNavigator *v3; // esi@6
  MainChar::TargetType v4; // edi@7
  GTInformWin *v5; // esi@12
  D3DXCOLOR *v6; // eax@13
  D3DXCOLOR v7; // ST04_16@13
  char *v8; // eax@13
  bool v9; // al@14
  Char *v10; // ecx@14
  int v11; // ebx@16
  ActiveSkillInfo *v12; // edi@16
  int v13; // eax@23
  unsigned int v14; // esi@23
  char *v15; // eax@26
  char *v16; // eax@28
  char *v17; // eax@31
  char *v18; // eax@33
  TargetType v19; // eax@34
  unsigned int v20; // eax@36
  char *v21; // eax@39
  GameFrameWork *v22; // ecx@39
  bool v23; // al@41
  GameFrameWork *v24; // esi@41
  int v25; // eax@42
  unsigned int v26; // esi@47
  bool v27; // bl@50
  char v28; // bl@54
  bool v29; // zf@56
  ActiveSkillViewInfo *v30; // eax@62
  ActiveSkillViewInfo *v31; // eax@66
  char *v32; // eax@82
  TargetType v33; // eax@84
  char *v34; // eax@91
  double v35; // st7@92
  unsigned __int16 v36; // bx@92
  GameFrameWork *v37; // edi@97
  char *v38; // eax@102
  float v39; // ST18_4@105
  char *v40; // eax@106
  unsigned int v41; // [sp+18h] [bp-38h]@80
  D3DXCOLOR result; // [sp+28h] [bp-28h]@13
  int kSkillID; // [sp+38h] [bp-18h]@16
  ActiveSkillViewInfo *fDistToChar; // [sp+3Ch] [bp-14h]@62
  Skill::EmpowerInfo kEmpowerInfo; // [sp+40h] [bp-10h]@23
  MainChar::TargetType fSkillableDist; // [sp+44h] [bp-Ch]@6
  GameFrameWork *thisa; // [sp+48h] [bp-8h]@1
  unsigned __int8 v48; // [sp+4Fh] [bp-1h]@42

  v2 = this;
  thisa = this;
  if ( !Char::IsDuringSkillActionAndHitTimeNotPassed(g_pkMainChar) )
  {
    if ( Char::IsActGathering(g_pkMainChar) )
      ITask::DirectDispatchAll(32, 0);
    if ( Char::IsActProducing(g_pkMainChar) )
      ITask::DirectDispatchAll(35, 0);
    v3 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&fSkillableDist)->m_pObject;
    if ( *(float *)&fSkillableDist != 0.0 )
    {
      v4 = fSkillableDist;
      if ( !InterlockedDecrement((volatile LONG *)(fSkillableDist + 4)) )
      {
        if ( v4 )
          (**(void (__thiscall ***)(MainChar::TargetType, signed int))v4)(v4, 1);
      }
    }
    if ( v3 )
    {
      if ( v3->m_bIsWorking )
      {
        v3->m_bIsWorking = 0;
        v5 = v2->m_pkAutoRunMsgWin;
        if ( v5 )
        {
          GTInformWin::Clear(v2->m_pkAutoRunMsgWin);
          v6 = Color::GetDxColor(&result, -1, -112, 0, -1);
          *(_QWORD *)&v7.r = *(_QWORD *)&v6->r;
          *(_QWORD *)&v7.b = *(_QWORD *)&v6->b;
          v8 = TextData2::Get(0x3C517589u);
          GTInformWin::AddText(v5, v8, COERCE_D3DXCOLOR(v7.r), 0, 3.0);
        }
      }
    }
    v9 = MainChar::IsAvailableStateReserveSkill((MainChar *)g_pkMainChar);
    v10 = g_pkMainChar;
    if ( !v9 )
      goto LABEL_29;
    if ( JumpProcessor::IsJump(&g_pkMainChar->m_kJumpProcessor) )
      return;
    v11 = LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0]);
    kSkillID = v11;
    v12 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v11, 1);
    if ( !v12 )
    {
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      return;
    }
    if ( !MainChar::IsSkillUsableState((MainChar *)g_pkMainChar) )
    {
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
      return;
    }
    if ( Skill::IsProduceBaseSkill(v11) )
    {
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      if ( Skill::IsLearnProdSkill(v11) == 1 )
      {
        LOWORD(fCurTime) = v11;
        ITask::DirectDispatchAll(33, &fCurTime);
      }
      return;
    }
    v13 = User::SP(&g_kUser);
    v14 = v12->SP;
    fSkillableDist = v13;
    Skill::GetAccumulatedEmpowerInfo(&kEmpowerInfo, v11);
    if ( kEmpowerInfo.cSmallSp )
      v14 -= v12->nT0[kEmpowerInfo.cSmallSp + 4];
    if ( fSkillableDist < (signed int)v14 )
    {
      v15 = TextData::Get(0x2A664B39u);
      GameFrameWork::AddSysMsg(thisa, v15);
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      return;
    }
    if ( User::LP(&g_kUser) < (signed int)v12->LP )
    {
      v16 = TextData3::Get(0x40601363u);
      GameFrameWork::AddSysMsg(thisa, v16);
      v10 = g_pkMainChar;
LABEL_29:
      v10[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      return;
    }
    Char::GetEquipWeaponType(g_pkMainChar);
    if ( !Inventory::IsDemandType(&g_kInventory, v12->DemandType) )
    {
      v17 = TextData::Get(0xE9E1202Bu);
      GameFrameWork::AddSysMsg(thisa, v17);
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
      return;
    }
    if ( AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, STA_REVERSEORDER) )
    {
      v18 = TextData::Get(0xC9E9C6D8u);
      GameFrameWork::AddSysMsg(thisa, v18);
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
      return;
    }
    v19 = v12->First;
    if ( v19 == 3 || v19 == 8 )
    {
      v20 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
      if ( v20 )
      {
        if ( g_pkMainChar->m_dwGuildRegNum != *(_DWORD *)(v20 + 676)
          && LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) )
        {
          v21 = TextData2::Get(0x8095A781u);
          v22 = thisa;
LABEL_40:
          GameFrameWork::AddSysMsg(v22, v21);
          MainChar::ResetReserveSkill((MainChar *)g_pkMainChar);
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
          LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
          return;
        }
      }
    }
    v23 = AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, STA_SOULFREE);
    v24 = thisa;
    if ( !v23 )
    {
      v48 = v12->DemandSoul;
      v25 = GameFrameWork::GetSoulCount(thisa);
      if ( v25 < v48 )
      {
        if ( v48 )
        {
          v21 = TextData2::Get(0x7E9997EFu);
          v22 = v24;
          goto LABEL_40;
        }
      }
    }
    switch ( v12->First )
    {
      case 1:
      case 2:
        GameFrameWork::MainCharTryUseSkill(v24, v11, fCurTime, g_pkMainChar);
        goto LABEL_107;
      case 0:
      case 3:
      case 5:
      case 7:
      case 8:
        v26 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
        v27 = v26
           && (!(unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v26 + 36))(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0])
            || *(_BYTE *)(v26 + 2488));
        if ( v26 && Char::IsResource((Char *)v26) )
        {
          v28 = 0;
        }
        else
        {
          if ( v27 )
            v29 = v12->SkillTargetState == 1;
          else
            v29 = v12->SkillTargetState == 0;
          v28 = v29;
        }
        fSkillableDist = MainChar::GetTargetType((MainChar *)g_pkMainChar, (Char *)v26);
        if ( v12->First == 3 )
        {
          v31 = IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::GetByID(v12->ID, 1);
        }
        else
        {
          if ( v12->First == 7 )
          {
            if ( v26 && !*(_BYTE *)(v26 + 2672) )
            {
              v28 = 0;
              goto LABEL_79;
            }
            goto LABEL_78;
          }
          if ( v12->First != 8 )
            goto LABEL_79;
          v30 = IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::GetByID(v12->ID, 1);
          v29 = v12->EffectType == 5;
          fDistToChar = v30;
          if ( v29 && v26 && Char::GetMobInfo((Char *)v26) && Char::GetMobInfo((Char *)v26)->Type == 16 )
          {
LABEL_78:
            v28 = 1;
            goto LABEL_79;
          }
          v31 = fDistToChar;
        }
        if ( !v31 || !v31->TargetChange || v26 && v28 && fSkillableDist != 3 && fSkillableDist != 1 )
        {
LABEL_79:
          if ( v26 )
          {
            if ( fSkillableDist == 1 )
            {
              v32 = TextData::Get(0x31667969u);
              GameFrameWork::AddSysMsg(thisa, v32);
              LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
LABEL_107:
              g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
              return;
            }
            if ( v28 )
            {
              v33 = v12->First;
              if ( v33 || fSkillableDist == 3 )
              {
                if ( v33 != 3 || fSkillableDist != 3 )
                {
                  if ( v33 != 8 || v12->EffectType != 5 || *(_DWORD *)(v26 + 52) <= 0 )
                  {
                    v35 = Char::GetDistanceToChar(g_pkMainChar, (Char *)v26);
                    *(float *)&fDistToChar = v35;
                    v36 = kSkillID;
                    ((void (__stdcall *)(unsigned int, int))g_pkMainChar->baseclass_0.vfptr[9].AddAbStateByAbstateIndex)(
                      v26,
                      kSkillID);
                    *(float *)&fSkillableDist = v35;
                    ((void (__stdcall *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[9].IsVisible)(v26);
                    if ( *(float *)&fSkillableDist + 50.0 <= *(float *)&fDistToChar )
                    {
                      v37 = thisa;
                      if ( thisa->m_kCharMover.m_bAutoRun || thisa->m_pkStickChar )
                      {
                        KeyboardMoveProcess::SetAutoRun(&thisa->m_kCharMover, 0);
                        v37->m_pkStickChar = 0;
                      }
                      fCurTime = *(float *)&fSkillableDist - 1.0;
                      LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 1;
                      GameFrameWork::MainCharMoveToChar(v37, (Char *)v26, fCurTime, 4);
                    }
                    else
                    {
                      if ( v12->IsMovingSkill
                        && LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) )
                      {
                        ((void (__stdcall *)(float *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&result.g);
                        GameFrameWork::NcActStopReq(thisa, (NiPoint3 *)&result.g);
                      }
                      GameFrameWork::MainCharTryUseSkill(thisa, v36, fCurTime, (Char *)v26);
                    }
                  }
                  else
                  {
                    v34 = TextData2::Get(0xD05E2A2Cu);
                    GameFrameWork::AddSysMsg(thisa, v34);
                    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
                  }
                  goto LABEL_107;
                }
              }
            }
            v41 = -264097460;
          }
          else
          {
            v41 = -1968863276;
          }
          v38 = TextData::Get(v41);
          GameFrameWork::AddSysMsg(thisa, v38);
          LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
          goto LABEL_107;
        }
        v26 = (unsigned int)g_pkMainChar;
        *(float *)&fSkillableDist = 0.0;
        goto LABEL_78;
      case 4:
        if ( !Skill::IsSkillUsePossible(v11)
          || (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)() )
        {
          v40 = TextData::Get(0xF6EB252Eu);
          GameFrameWork::AddSysMsg(v24, v40);
        }
        else
        {
          v39 = (double)IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v11, 1)->Area;
          World::SetMagicCircleRadius(&g_kWorld, v39);
          v24->m_kSkillCasting.eState = 1;
        }
        goto LABEL_107;
      default:
        goto LABEL_107;
    }
  }
}

//----- (004CB930) --------------------------------------------------------
void __thiscall GameFrameWork::MainCharTryToAttack(GameFrameWork *this, Char *pkTargetChar)
{
  Char *v2; // esi@1
  GameFrameWork *v3; // edi@1
  double v4; // st7@1
  MainChar *v5; // ecx@1
  bool v6; // bl@4
  NiPoint3 *v7; // eax@13
  void *v8; // eax@16
  int v9; // eax@17
  int v10; // esi@17
  Item *v11; // eax@19
  double v12; // st7@20
  unsigned int v13; // eax@22
  unsigned __int16 v14; // di@22
  bool v15; // al@24
  double v16; // st7@25
  float v17; // ST14_4@25
  NiPoint3 result; // [sp+18h] [bp-10h]@1
  float fAttackableDist; // [sp+24h] [bp-4h]@1

  v2 = pkTargetChar;
  v3 = this;
  Char::GetDirToChar(g_pkMainChar, &result, pkTargetChar);
  *(float *)&pkTargetChar = result.y * result.y + result.x * result.x + result.z * result.z;
  *(float *)&pkTargetChar = sqrt(*(float *)&pkTargetChar);
  v4 = *(float *)&pkTargetChar;
  ((void (__stdcall *)(Char *))g_pkMainChar->baseclass_0.vfptr[9].SetAbStateProperty)(v2);
  fAttackableDist = v4;
  v5 = (MainChar *)g_pkMainChar;
  if ( g_pkMainChar->m_byMode == 1 )
  {
    Char::SetMode(g_pkMainChar, 2);
    GameFrameWork::NcActChangeModeReq(v3, 2);
    v5 = (MainChar *)g_pkMainChar;
  }
  if ( (Char *)v5 != v2 )
  {
    v6 = MainChar::GetTargetType(v5, v2) != 1;
    if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)() )
    {
      ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[6].Deaffect)(v2);
      if ( Char::IsActGathering(g_pkMainChar) )
        ITask::DirectDispatchAll(32, 0);
      if ( g_fAttackableDist + fAttackableDist - 10.0 > *(float *)&pkTargetChar && v6 )
      {
        if ( !g_pkMainChar->m_bWillDead
          && !g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnAttackableCount
          && !v2->m_bWillDead
          && !AttackSequenceManager::GetAttSeqCount(&g_pkMainChar->baseclass_54) )
        {
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
          v7 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
          GameFrameWork::NcActStopReq(v3, v7);
          ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
          if ( Char::IsResource(v2) )
          {
            pkTargetChar = v2;
            ITask::DirectDispatchAll(30, &pkTargetChar);
          }
          else
          {
            if ( GameFrameWork::CheckWeaponCostumeWhenAttackTry(v3) )
            {
              v8 = operator new(0x28u);
              if ( v8 )
              {
                AttackSequence::AttackSequence((AttackSequence *)v8);
                v10 = v9;
              }
              else
              {
                v10 = 0;
              }
              *(_BYTE *)v10 = 0;
              *(float *)(v10 + 4) = Timer::ms_fCurTime;
              *(_BYTE *)(v10 + 13) = 1;
              LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 1;
              GameFrameWork::NcBatBashstartCmd(v3);
              v11 = Inventory::GetEquipedWeapon(&g_kInventory);
              if ( v11 )
                v12 = (double)IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v11->m_kStruct.itemid)->AtkSpeed
                    / 1000.0;
              else
                v12 = 1.0;
              *(float *)(v10 + 8) = v12;
              v13 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
              v14 = -1;
              if ( v13 )
                v14 = *(_WORD *)(v13 + 548);
              v15 = Char::IsRangeAttChar(g_pkMainChar);
              DamageInfoSet::AddDamage((DamageInfoSet *)(v10 + 16), 0x20000000u, v14, 0xFFFE0000u, 0, 0, v15, -1);
              AttackSequenceManager::AddAttSeq(&g_pkMainChar->baseclass_54, (AttackSequence *)v10);
            }
          }
        }
      }
      else
      {
        *(float *)&pkTargetChar = fAttackableDist - 1.0;
        v16 = *(float *)&pkTargetChar;
        LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 1;
        v17 = v16;
        GameFrameWork::MainCharMoveToChar(v3, v2, v17, 0);
      }
    }
  }
}
// A7B16C: using guessed type float g_fAttackableDist;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004CBBE0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainCharOnRevActPickChar(GameFrameWork *this, float fCurTime)
{
  GameFrameWork *v2; // edi@1
  Char *v3; // eax@4
  unsigned int v4; // esi@4
  Char *v5; // eax@10
  unsigned int v6; // ebx@12
  unsigned int v7; // esi@14
  NiPoint3 *v8; // eax@15
  double v9; // st7@17
  MobInfo *v10; // eax@19
  MobType v11; // eax@20
  MHDiceGameTask *v12; // ebx@22
  MobInfo *v13; // eax@26
  NiPoint3 *v14; // eax@33
  NiPoint3 *v15; // eax@39
  NiPoint3 *v16; // eax@45
  NiPoint3 kDirToMainChar; // [sp+1Ch] [bp-14h]@17
  float fJustSideDist; // [sp+28h] [bp-8h]@17
  float fDistToChar; // [sp+2Ch] [bp-4h]@17

  v2 = this;
  if ( Char::IsActGathering(g_pkMainChar)
    && g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] == g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] )
    return;
  if ( GameFrameWork::CheckCancelingMoveUpdate(v2) == 1 )
  {
    v3 = g_pkMainChar;
    v4 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
    if ( v4 )
    {
      if ( Char::IsNPC((Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0]) )
      {
        GameFrameWork::NcActNPCClickCmd(v2, *(_WORD *)(v4 + 548));
        g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      }
      v3 = g_pkMainChar;
    }
    if ( v3->m_byMode == 2 && v3->baseclass_0.m_kAbStateProperty.iUnMovableCount )
    {
      v5 = (Char *)v3[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
      if ( v5 )
        GameFrameWork::MainCharTryToAttack(v2, v5);
    }
    return;
  }
  v6 = 0;
  if ( Char::IsActProducing(g_pkMainChar) )
    ITask::DirectDispatchAll(35, 0);
  v7 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  if ( !v7 )
  {
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
    ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
    v8 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    GameFrameWork::NcActStopReq(v2, v8);
    return;
  }
  if ( !JumpProcessor::IsJump(&g_pkMainChar->m_kJumpProcessor) )
  {
    Char::GetDirToChar((Char *)v7, &kDirToMainChar, g_pkMainChar);
    fJustSideDist = kDirToMainChar.y * kDirToMainChar.y
                  + kDirToMainChar.x * kDirToMainChar.x
                  + kDirToMainChar.z * kDirToMainChar.z;
    fJustSideDist = sqrt(fJustSideDist);
    v9 = fJustSideDist;
    fDistToChar = fJustSideDist;
    if ( Char::IsNPC((Char *)v7) )
    {
      if ( fDistToChar < 150.0 )
      {
        v10 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(*(_WORD *)(v7 + 942), 1);
        if ( v10 && ((v11 = v10->Type, v11 == 23) || v11 == 26) )
        {
          v12 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&fJustSideDist)->m_pObject;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&fJustSideDist);
          if ( v12 && !MHDiceGameTask::IsDicegamePlaying(v12) )
            MHDiceGameTask::NcGambleTypeAndWhereStandReq(v12, *(_WORD *)(v7 + 548));
          v6 = 0;
        }
        else
        {
          GameFrameWork::NcActNPCClickCmd(v2, *(_WORD *)(v7 + 548));
        }
        SoundMgr::PlayNPCVoice(&g_kSoundMgr, *(_WORD *)(v7 + 942));
        v13 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(*(_WORD *)(v7 + 942), 1);
        if ( v13 == (MobInfo *)v6 || v13->Type == 15 )
          goto LABEL_35;
        goto LABEL_33;
      }
    }
    else
    {
      if ( *(_BYTE *)(v7 + 1916) != 5 )
      {
        ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[9].SetAbStateProperty)();
        ((void (__cdecl *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[9].IsVisible)(v7);
        fJustSideDist = v9;
        if ( (unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v7 + 36))(v7) )
        {
          if ( g_pkMainChar->m_byMode == 2 )
          {
            GameFrameWork::MainCharTryToAttack(v2, (Char *)v7);
          }
          else
          {
            if ( fJustSideDist + 50.0 >= fDistToChar )
            {
              ((void (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
              v16 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
              GameFrameWork::NcActStopReq(v2, v16);
            }
            else
            {
              fJustSideDist = fJustSideDist - 1.0;
              GameFrameWork::MainCharMoveToChar(v2, (Char *)v7, fJustSideDist, 0);
            }
          }
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
        }
        else
        {
          if ( fJustSideDist + 50.0 >= fDistToChar )
          {
            ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
            v15 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
            GameFrameWork::NcActStopReq(v2, v15);
          }
          else
          {
            fJustSideDist = fJustSideDist - 1.0;
            GameFrameWork::MainCharMoveToChar(v2, (Char *)v7, fJustSideDist, 0);
          }
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
          LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
        }
        return;
      }
      if ( fDistToChar < 150.0 )
      {
        GameFrameWork::NcBoothEntryReq(v2, *(_WORD *)(v7 + 548));
LABEL_33:
        ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(1);
        v14 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
        GameFrameWork::NcActStopReq(v2, v14);
LABEL_35:
        g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = v6;
        LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
        return;
      }
    }
    GameFrameWork::MainCharMoveToChar(v2, (Char *)v7, 99.0, 0);
    goto LABEL_35;
  }
}
// 4CBBE0: could not find valid save-restore pair for esi

//----- (004CBFE0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainCharOnRevActAttack(GameFrameWork *this, float fCurTime)
{
  GameFrameWork *v2; // ebx@1
  int (*v3)(void); // edx@1
  MapNavigator *v4; // esi@6
  float v5; // edi@7
  GTInformWin *v6; // esi@12
  D3DXCOLOR *v7; // eax@13
  D3DXCOLOR v8; // ST04_16@13
  char *v9; // eax@13
  Char *v10; // ecx@15
  Char *v11; // esi@15
  double v12; // st7@20
  D3DXCOLOR result; // [sp+20h] [bp-1Ch]@13
  float fJustSideDist; // [sp+30h] [bp-Ch]@20
  float fDistToChar; // [sp+34h] [bp-8h]@6
  GameFrameWork *thisa; // [sp+38h] [bp-4h]@1

  v2 = this;
  v3 = (int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex;
  thisa = this;
  if ( !(unsigned __int8)v3() && !Char::CheckActState(g_pkMainChar, 500000) && !g_pkMainChar->m_bWillDead )
  {
    ITask::DirectDispatchAll(32, 0);
    if ( Char::IsActProducing(g_pkMainChar) )
      ITask::DirectDispatchAll(35, 0);
    v4 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&fDistToChar)->m_pObject;
    if ( fDistToChar != 0.0 )
    {
      v5 = fDistToChar;
      if ( !InterlockedDecrement((volatile LONG *)(LODWORD(fDistToChar) + 4)) )
      {
        if ( LODWORD(v5) )
          (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v5))(LODWORD(v5), 1);
      }
    }
    if ( v4 )
    {
      if ( v4->m_bIsWorking )
      {
        v4->m_bIsWorking = 0;
        v6 = v2->m_pkAutoRunMsgWin;
        if ( v6 )
        {
          GTInformWin::Clear(v2->m_pkAutoRunMsgWin);
          v7 = Color::GetDxColor(&result, -1, -112, 0, -1);
          *(_QWORD *)&v8.r = *(_QWORD *)&v7->r;
          *(_QWORD *)&v8.b = *(_QWORD *)&v7->b;
          v9 = TextData2::Get(0x3C517589u);
          GTInformWin::AddText(v6, v9, COERCE_D3DXCOLOR(v8.r), 0, 3.0);
        }
      }
    }
    if ( !JumpProcessor::IsJump(&g_pkMainChar->m_kJumpProcessor) )
    {
      v10 = g_pkMainChar;
      v11 = (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
      if ( v11 )
      {
        if ( !(unsigned __int8)((int (__thiscall *)(unsigned int))v11->baseclass_0.vfptr[1].Deaffect)(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0])
          || Char::IsNPC(v11) )
        {
          v10 = g_pkMainChar;
        }
        else
        {
          v10 = g_pkMainChar;
          if ( LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0])
            && g_pkMainChar->m_byMode == 2 )
          {
            v12 = Char::GetDistanceToChar(g_pkMainChar, v11);
            fDistToChar = v12;
            ((void (__stdcall *)(Char *))g_pkMainChar->baseclass_0.vfptr[9].SetAbStateProperty)(v11);
            ((void (__stdcall *)(Char *))g_pkMainChar->baseclass_0.vfptr[9].IsVisible)(v11);
            fJustSideDist = v12;
            ((void (__thiscall *)(Char *))v11->baseclass_0.vfptr[1].Affect)(v11);
            if ( g_pkMainChar->m_byMode == 2 )
            {
              GameFrameWork::MainCharTryToAttack(thisa, v11);
              g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
            }
            else
            {
              if ( fJustSideDist + 50.0 < fDistToChar )
              {
                fJustSideDist = fJustSideDist - 1.0;
                GameFrameWork::MainCharMoveToChar(thisa, v11, fJustSideDist, 0);
              }
              LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
              g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
            }
            return;
          }
        }
      }
      v10[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
      return;
    }
  }
}

//----- (004CC260) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainCharOnRevActMHCharEmotion(GameFrameWork *this, float fCurTime)
{
  unsigned __int16 v2; // di@5
  char v3; // bl@5
  mhObject *v4; // eax@5
  mhObject *v5; // esi@5
  ItemInfo *v6; // eax@7
  char v7; // bl@10
  char *v8; // eax@11
  NiNode *v9; // eax@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // ecx@13
  int v11; // eax@15
  int v12; // eax@23
  NiColor *v13; // eax@23
  MHEmotion *v14; // ebx@28
  unsigned int v15; // [sp+10h] [bp-68h]@1
  float GetCharPos; // [sp+20h] [bp-58h]@23
  float GetCharPos_4; // [sp+24h] [bp-54h]@23
  GameFrameWork *thisa; // [sp+2Ch] [bp-4Ch]@1
  NiPoint3 TargetPos; // [sp+30h] [bp-48h]@17
  NiPoint2 LengthXY; // [sp+3Ch] [bp-3Ch]@5
  MHEmotion *pkEmotionInfo; // [sp+44h] [bp-34h]@5
  float pkFur; // [sp+48h] [bp-30h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ActPos; // [sp+4Ch] [bp-2Ch]@13
  unsigned int v24; // [sp+68h] [bp-10h]@1
  int v25; // [sp+74h] [bp-4h]@13
  int v26; // [sp+78h] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  v15 = (unsigned int)&v26 ^ __security_cookie;
  thisa = this;
  if ( !nowState )
  {
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    return;
  }
  if ( JumpProcessor::IsJump(&g_pkMainChar->m_kJumpProcessor) == 1 )
  {
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    return;
  }
  v2 = mhObj;
  v3 = WantedActPos[0];
  LODWORD(LengthXY.x) = *(_DWORD *)&mhObj;
  LODWORD(LengthXY.y) = *(_DWORD *)WantedActPos;
  pkEmotionInfo = (MHEmotion *)dword_AA5140;
  v4 = mhObjectManager::GetObjectA(&stru_AA4FA8, mhObj);
  v5 = v4;
  if ( !v4 )
  {
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = (unsigned int)v4;
    return;
  }
  v6 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v4->m_iResGUID);
  if ( !v6 )
    goto LABEL_12;
  LODWORD(pkFur) = MiniHouseFuritureInfoTab::GetObjByName(v6->InxName);
  if ( pkFur == 0.0 )
  {
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    return;
  }
  v7 = MiniHouseIndoor::GetEmptyOfObjSeat(&g_kWorld.m_MiniHouseIndoorMode, v2, g_pkMainChar->m_kHandle, v3);
  LOBYTE(LengthXY.y) = v7;
  if ( v7 == -1 )
  {
    v8 = TextData2::Get(0x5A935C05u);
    GameFrameWork::AddSysMsg(thisa, v8);
LABEL_12:
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    return;
  }
  MiniHouseIndoor::SetCharEmotion(&g_kWorld.m_MiniHouseIndoorMode, v2, SLOBYTE(LengthXY.y), pkEmotionInfo);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    &ActPos,
    "ActPos");
  v25 = 0;
  mhMiscUtil::MakeNodeNameNum(&ActPos, (unsigned __int8)v7, 2);
  v9 = ResElement::GetNiNode(v5->m_pkResource);
  v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&ActPos;
  if ( ActPos.baseclass_0._Myres < 0x10 )
    v10 = &ActPos;
  v11 = (int)v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
               (NiRefObject *)v9,
               (unsigned int)v10);
  if ( v11 )
  {
    LODWORD(TargetPos.x) = *(_DWORD *)(v11 + 140);
    LODWORD(TargetPos.y) = *(_DWORD *)(v11 + 144);
    LODWORD(TargetPos.z) = *(_DWORD *)(v11 + 148);
    if ( *(_BYTE *)(LODWORD(pkFur) + 135) )
      World::GetAdvGroundPos(&g_kWorld, TargetPos.x, TargetPos.y, &TargetPos);
    if ( (((int (__cdecl *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)(v15) == 4
       || ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)())
      && (v7 != BYTE1(LengthXY.y) || HIWORD(LengthXY.x) != (_WORD)LengthXY.x) )
    {
      ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
    }
    else
    {
      v12 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      LODWORD(GetCharPos) = *(_DWORD *)v12;
      LODWORD(GetCharPos_4) = *(_DWORD *)(v12 + 4);
      v13 = (NiColor *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      if ( NiColor::operator__(v13, (NiColor *)&TargetPos) )
      {
        pkFur = GetCharPos - TargetPos.x;
        pkFur = fabs(pkFur);
        LengthXY.y = pkFur;
        pkFur = GetCharPos_4 - TargetPos.y;
        pkFur = fabs(pkFur);
        *(float *)&pkEmotionInfo = pkFur;
        if ( NiPoint2::Length((NiPoint2 *)((char *)&LengthXY + 4)) > 1.5 )
        {
          World::GetAdvGroundPos(&g_kWorld, TargetPos.x, TargetPos.y, &TargetPos);
          GameFrameWork::MainCharMoveToChar(thisa, &TargetPos, 0.0, 7);
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
        }
        else
        {
          ((void (__stdcall *)(NiPoint3 *, NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[5].GetAbstateColor)(
            &TargetPos,
            &TargetPos);
        }
      }
      else
      {
        if ( (_WORD)LengthXY.x != -1 )
        {
          v14 = pkEmotionInfo;
          if ( *(float *)&pkEmotionInfo != 0.0 )
          {
            ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].Deaffect)();
            GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_REQ(thisa, v2, SLOBYTE(LengthXY.y), v14->ActionIndex);
          }
        }
        g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      }
    }
  }
  else
  {
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
  }
  std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&ActPos);
}
// A85C00: using guessed type int __security_cookie;
// AA5140: using guessed type int dword_AA5140;

//----- (004CC5E0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateMainChar(GameFrameWork *this, float fCurTime)
{
  Char *v2; // eax@1
  GameFrameWork *v3; // esi@1
  unsigned __int16 v4; // cx@7
  GameFrameWork::SkillCastState v5; // eax@15

  v2 = g_pkMainChar;
  v3 = this;
  switch ( g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] )
  {
    case 0u:
      GameFrameWork::UpdateMainCharOnRevActNone(this, fCurTime);
      break;
    case 1u:
      GameFrameWork::UpdateMainCharOnRevActPickGround(this, fCurTime, 0);
      break;
    case 2u:
      GameFrameWork::UpdateMainCharOnRevActPickChar(this, fCurTime);
      break;
    case 3u:
      GameFrameWork::UpdateMainCharOnRevActAttack(this, fCurTime);
      break;
    case 4u:
      GameFrameWork::UpdateMainCharOnRevActSkill(this, fCurTime);
      break;
    case 6u:
      v4 = LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0]);
      if ( v4 != -1 )
      {
        if ( GameFrameWork::MainCharTryUseSkill(
               v3,
               v4,
               Timer::ms_fCurTime,
               v3->m_kSkillCasting.kGroundTypeDetail.x,
               v3->m_kSkillCasting.kGroundTypeDetail.y) )
          v3->m_kSkillCasting.eState = 2;
        v2 = g_pkMainChar;
      }
      goto $LN6_48;
    case 5u:
$LN6_48:
      v2[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
      break;
    case 7u:
      GameFrameWork::UpdateMainCharOnRevActMHCharEmotion(this, fCurTime);
      break;
    default:
      break;
  }
  GameFrameWork::UpdateKeyboardMove(v3);
  if ( !(_S3_3 & 1) )
  {
    _S3_3 |= 1u;
    dwSinceSkillActive = timeGetTime();
  }
  v5 = v3->m_kSkillCasting.eState;
  if ( v5 && v5 != 1 )
  {
    if ( timeGetTime() > dwSinceSkillActive + 6000 )
    {
      GameFrameWork::NcBatSkillbashCastabortReq(v3);
      Char::CancelSkillAction(g_pkMainChar, 1);
    }
  }
  else
  {
    dwSinceSkillActive = timeGetTime();
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004CC750) --------------------------------------------------------
float __thiscall NiPoint2::Length(NiPoint2 *this)
{
  float v1; // ST00_4@1
  float v2; // ST00_4@1
  double v3; // st7@1
  float result; // st7@2

  v1 = this->y * this->y + this->x * this->x;
  v2 = sqrt(v1);
  v3 = v2;
  LODWORD(result) = LODWORD(v3);
  return result;
}

//----- (004CC780) --------------------------------------------------------
float __thiscall Char::GetDistanceToChar(Char *this, Char *pkChar)
{
  double v2; // st7@1
  float result; // st7@2
  NiPoint3 kDir; // [sp+0h] [bp-Ch]@1
  float pkChara; // [sp+14h] [bp+8h]@1
  float pkCharb; // [sp+14h] [bp+8h]@1

  Char::GetDirToChar(this, &kDir, pkChar);
  pkChara = kDir.y * kDir.y + kDir.x * kDir.x + kDir.z * kDir.z;
  pkCharb = sqrt(pkChara);
  v2 = pkCharb;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (004CC7D0) --------------------------------------------------------
void __thiscall MainChar::ResetReserveSkill(MainChar *this)
{
  this->m_eReserveSkillType = 0;
  this->m_kReserveSkillID = -1;
  MainChar::SetStartReserveAct(this, 0);
}

//----- (004CC7F0) --------------------------------------------------------
WeaponAttrib *__cdecl WeaponAttribTab::GetWeaponAttrib(WeaponTypeEnum eWeaponEnum)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  WeaponAttrib *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (WeaponAttrib *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<WeaponAttrib_WeaponAttribTab>::ms_pkTable + 4),
                                 v3);
      if ( result->WeaponType == eWeaponEnum )
        break;
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97E48: using guessed type int ITableBase_WeaponAttrib_WeaponAttribTab___ms_pkTable;

//----- (004CC870) --------------------------------------------------------
void __thiscall GameFrameWork::SetResList(GameFrameWork *this)
{
  this->m_ResList[1].m_uiResHeight = 768;
  this->m_ResList[2].m_uiResHeight = 768;
  this->m_ResList[6].m_uiResHeight = 1200;
  this->m_ResList[9].m_uiResHeight = 1200;
  this->m_ResList[1].m_uiResWidth = 1024;
  this->m_ResList[2].m_uiResWidth = 1280;
  this->m_ResList[3].m_uiResWidth = 1280;
  this->m_ResList[4].m_uiResWidth = 1280;
  this->m_ResList[4].m_uiResHeight = 1024;
  this->m_ResList[9].m_eAspect = 3;
  this->m_ResList[10].m_eAspect = 3;
  this->m_ResList[11].m_uiResWidth = 1280;
  this->m_ResList[11].m_eAspect = 3;
  this->m_ResList[13].m_eAspect = 3;
  this->m_ResList[0].m_uiResWidth = 800;
  this->m_ResList[0].m_uiResHeight = 600;
  this->m_ResList[0].m_bCheckAdd = 0;
  this->m_ResList[0].m_eAspect = 0;
  this->m_ResList[1].m_bCheckAdd = 0;
  this->m_ResList[1].m_eAspect = 0;
  this->m_ResList[2].m_bCheckAdd = 0;
  this->m_ResList[2].m_eAspect = 1;
  this->m_ResList[3].m_uiResHeight = 960;
  this->m_ResList[3].m_bCheckAdd = 0;
  this->m_ResList[3].m_eAspect = 0;
  this->m_ResList[4].m_bCheckAdd = 0;
  this->m_ResList[4].m_eAspect = 2;
  this->m_ResList[5].m_uiResWidth = 1400;
  this->m_ResList[5].m_uiResHeight = 1050;
  this->m_ResList[5].m_bCheckAdd = 0;
  this->m_ResList[5].m_eAspect = 0;
  this->m_ResList[6].m_uiResWidth = 1600;
  this->m_ResList[6].m_bCheckAdd = 0;
  this->m_ResList[6].m_eAspect = 0;
  this->m_ResList[7].m_uiResWidth = 1600;
  this->m_ResList[7].m_uiResHeight = 900;
  this->m_ResList[7].m_bCheckAdd = 0;
  this->m_ResList[7].m_eAspect = 4;
  this->m_ResList[8].m_uiResWidth = 1920;
  this->m_ResList[8].m_uiResHeight = 1400;
  this->m_ResList[8].m_bCheckAdd = 0;
  this->m_ResList[8].m_eAspect = 4;
  this->m_ResList[9].m_uiResWidth = 1920;
  this->m_ResList[9].m_bCheckAdd = 0;
  this->m_ResList[10].m_uiResWidth = 1680;
  this->m_ResList[10].m_uiResHeight = 1050;
  this->m_ResList[10].m_bCheckAdd = 0;
  this->m_ResList[11].m_uiResHeight = 800;
  this->m_ResList[11].m_bCheckAdd = 0;
  this->m_ResList[12].m_uiResWidth = 1600;
  this->m_ResList[12].m_uiResHeight = 900;
  this->m_ResList[12].m_bCheckAdd = 0;
  this->m_ResList[12].m_eAspect = 4;
  this->m_ResList[13].m_uiResWidth = 1440;
  this->m_ResList[13].m_uiResHeight = 900;
  this->m_ResList[13].m_bCheckAdd = 0;
  this->m_ResList[14].m_uiResWidth = 1920;
  this->m_ResList[14].m_uiResHeight = 1080;
  this->m_ResList[14].m_bCheckAdd = 0;
  this->m_ResList[14].m_eAspect = 4;
  this->m_ResList[15].m_uiResWidth = 2560;
  this->m_ResList[15].m_uiResHeight = 1440;
  this->m_ResList[15].m_bCheckAdd = 0;
  this->m_ResList[15].m_eAspect = 4;
  this->m_ResList[16].m_uiResWidth = 2560;
  this->m_ResList[16].m_uiResHeight = 1600;
  this->m_ResList[16].m_bCheckAdd = 0;
  this->m_ResList[16].m_eAspect = 0;
  this->m_ResList[19].m_uiResHeight = 1440;
  this->m_ResList[17].m_uiResWidth = 3840;
  this->m_ResList[17].m_uiResHeight = 2160;
  this->m_ResList[17].m_bCheckAdd = 0;
  this->m_ResList[17].m_eAspect = 4;
  this->m_ResList[18].m_uiResWidth = 1366;
  this->m_ResList[18].m_uiResHeight = 768;
  this->m_ResList[18].m_bCheckAdd = 0;
  this->m_ResList[18].m_eAspect = 4;
  this->m_ResList[19].m_uiResWidth = 3440;
  this->m_ResList[19].m_bCheckAdd = 0;
  this->m_ResList[19].m_eAspect = 4;
}

//----- (004CCAF0) --------------------------------------------------------
DropItem *__thiscall GameFrameWork::GetDropItemByHandle(GameFrameWork *this, unsigned __int16 kHandle, int iDepart, int iCommand)
{
  GameFrameWork *v4; // esi@1
  DropItem *result; // eax@1

  v4 = this;
  result = DropItemMgr::GetByHandle(&g_kDropItemMgr, kHandle);
  if ( !result )
  {
    GameFrameWork::NcBriefInfoCmd(v4, kHandle, iDepart, iCommand);
    result = 0;
  }
  return result;
}

//----- (004CCB30) --------------------------------------------------------
void __thiscall GameFrameWork::CloseAutoCloseWin(GameFrameWork *this, PgWin *pkWin)
{
  GameFrameWork *v2; // esi@1
  PgWin *v3; // eax@25
  PgWin *v4; // eax@27
  PgWin *v5; // eax@29
  GuildTournamentStorageWin *v6; // eax@31
  PgWin *v7; // eax@31
  PgWin *v8; // eax@35
  PgWin *v9; // eax@39
  PgWin *v10; // eax@41
  PgWin *v11; // eax@43
  PgWin *v12; // eax@45
  PgWin *v13; // eax@47
  RandomOptionWin *v14; // ecx@49

  v2 = this;
  if ( (ItemUpgradeWin *)pkWin == this->m_pkItemUpgradeWin )
  {
    GameFrameWork::CloseItemUpgradeWin(this, 1);
    return;
  }
  if ( (ItemShopWin *)pkWin == this->m_pkItemShopWin )
  {
    GameFrameWork::CloseShopMenu(this, 1);
    return;
  }
  if ( (NPCSkillWin *)pkWin == this->m_pkNPCSkillWin )
  {
    GameFrameWork::CloseSkillShopMenu(this);
    return;
  }
  if ( (MoverUpgradeWin *)pkWin == this->m_pkMoverUpgradeWin )
  {
    GameFrameWork::CloseMoverUpgradeWin(this, 1);
    return;
  }
  if ( (ItemMixWin *)pkWin == this->m_pkItemMixWin )
  {
    GameFrameWork::OnCloseItemMixWin(this, 1);
    return;
  }
  if ( (NPCSoulWin *)pkWin == this->m_pkNPCSoulWin )
  {
    GameFrameWork::CloseSoulStoneShopMenu(this);
    return;
  }
  if ( (StorageWin *)pkWin == this->m_pkStorageWin )
  {
    if ( !this->m_eOpenType )
      GameFrameWork::CloseStorageMenu(this);
    return;
  }
  if ( (NPCItemWin *)pkWin == this->m_pkItemShopWin2 )
  {
    GameFrameWork::CloseItemShopWin(this);
    return;
  }
  if ( (ClassChangeWin *)pkWin == this->m_pkClassChangeWin )
  {
    GameFrameWork::CloseClassChangeWin(this);
    return;
  }
  if ( (WeaponTitleWin *)pkWin == this->m_pkWeaponTitleWin )
  {
    GameFrameWork::CloseWeapontitleWin(this);
    return;
  }
  if ( (MapLinkGateWin *)pkWin == this->m_pkMapLinkGateWin )
  {
    GameFrameWork::CloseMapLinkGateWin(this);
    return;
  }
  if ( (GuildNpcMenuWin *)pkWin == GuildTask::GetGuildNpcMenuWin() )
  {
    v3 = (PgWin *)GuildTask::GetGuildNpcMenuWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
    return;
  }
  if ( (GuildTournamentBaseWin *)pkWin == GuildTask::GetGuildTournamnetBaseWin() )
  {
    v4 = (PgWin *)GuildTask::GetGuildTournamnetBaseWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
    return;
  }
  if ( (GuildTournamentScheduleWin *)pkWin == GuildTask::GetGuildTournamentScheduleWin() )
  {
    v5 = (PgWin *)GuildTask::GetGuildTournamentScheduleWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v5);
    return;
  }
  if ( (GuildTournamentStorageWin *)pkWin == GuildTask::GetGuildTournamentStorageWin() )
  {
    v6 = GuildTask::GetGuildTournamentStorageWin();
    GuildTournamentStorageWin::On_NC_ITEMDB_CLOSE_GUILD_STORAGE_CMD(v6);
    v7 = (PgWin *)GuildTask::GetGuildTournamentStorageWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v7);
    return;
  }
  if ( (MakeKarisWin *)pkWin == v2->m_pkMakeKarisWin )
  {
    GameFrameWork::OnShowMakeKarisWin(v2, 0);
    return;
  }
  if ( (GuildAcademyMenuWin *)pkWin == GuildAcademyTask::GetGuildAcademyMenuWin() )
  {
    v8 = (PgWin *)GuildAcademyTask::GetGuildAcademyMenuWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v8);
    return;
  }
  if ( (GuildAcademyStorageWin *)pkWin == GuildAcademyTask::GetGuildAcademyStorageWin() )
  {
    GameFrameWork::OnCloseGuildAcademyStorage(v2);
    return;
  }
  if ( (GuildAcademyMoneyRewardWin *)pkWin == GuildAcademyTask::GetGuildAcademyMoneyRewardWin() )
  {
    v9 = (PgWin *)GuildAcademyTask::GetGuildAcademyMoneyRewardWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v9);
    return;
  }
  if ( (GuildAcademyItemRewardWin *)pkWin == GuildAcademyTask::GetGuildAcademyItemRewardWin() )
  {
    v10 = (PgWin *)GuildAcademyTask::GetGuildAcademyItemRewardWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v10);
    return;
  }
  if ( (GuildAcademyHallOfFameWin *)pkWin == GuildAcademyTask::GetGuildAcademyHallOfFameWin() )
  {
    v11 = (PgWin *)GuildAcademyTask::GetGuildAcademyHallOfFameWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v11);
    return;
  }
  if ( (GuildAcademyRankingWin *)pkWin == GuildAcademyTask::GetGuildAcademyRankingWin() )
  {
    v12 = (PgWin *)GuildAcademyTask::GetGuildAcademyRankingWin();
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v12);
    return;
  }
  if ( (GuildAcademySelectWin *)pkWin == GuildAcademySelectTask::GetGuildAcademySelectWin() )
  {
    v13 = (PgWin *)GuildAcademySelectTask::GetGuildAcademySelectWin();
    goto LABEL_48;
  }
  v14 = v2->m_pkRandomOptionWin;
  if ( (RandomOptionWin *)pkWin == v14 )
  {
    RandomOptionWin::OnCancel(v14);
    return;
  }
  if ( (IDRankingWin *)pkWin == v2->m_pkIDRankingWin )
  {
    GameFrameWork::IDRankingShowWin(v2, 0);
    return;
  }
  v13 = (PgWin *)v2->m_pkEventRankWin;
  if ( pkWin == v13 )
  {
LABEL_48:
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v13);
    return;
  }
  if ( (NpcDialogWin *)pkWin == v2->m_pkNpcDlgWin )
    GameFrameWork::CloseNpcDlgWin(v2);
}

//----- (004CCDE0) --------------------------------------------------------
void __thiscall GameFrameWork::LockShortCutWinInvPosItem(GameFrameWork *this, unsigned __int16 invPos)
{
  GameFrameWork *v2; // esi@1
  ShortCutWin **v3; // esi@1
  signed int v4; // ebx@1

  v2 = this;
  ShortCutWin::SetShortCutInvPosWinLock(this->m_pkShortCutWin, invPos);
  ShortCutWin::SetShortCutInvPosWinLock(v2->m_pkShortCutWinV, invPos);
  v3 = v2->m_pkShortCutSubWinV;
  v4 = 4;
  do
  {
    ShortCutWin::SetShortCutInvPosWinLock(*(v3 - 5), invPos);
    ShortCutWin::SetShortCutInvPosWinLock(*v3, invPos);
    ++v3;
    --v4;
  }
  while ( v4 );
}

//----- (004CCE30) --------------------------------------------------------
void __thiscall GameFrameWork::UnLockShortCutWinInvPosItem(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  ShortCutWin **v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  ShortCutWin::SetShortCutInvPosWinUnLock(this->m_pkShortCutWin);
  ShortCutWin::SetShortCutInvPosWinUnLock(v1->m_pkShortCutWinV);
  v2 = v1->m_pkShortCutSubWinV;
  v3 = 4;
  do
  {
    ShortCutWin::SetShortCutInvPosWinUnLock(*(v2 - 5));
    ShortCutWin::SetShortCutInvPosWinUnLock(*v2);
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (004CCE70) --------------------------------------------------------
void __thiscall GameFrameWork::AddRoarChat(GameFrameWork *this, char *CharName, char *pcText)
{
  GameFrameWork *v3; // esi@1
  char *v4; // eax@1

  v3 = this;
  v4 = fs("[%s] : %s");
  ChatDisplayWin2::AddRoarChat(v3->m_pkChatDisplayWin, v4);
}

//----- (004CCEA0) --------------------------------------------------------
void __thiscall GameFrameWork::CancelSkillCasting(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  GameFrameWork::SkillCastState v2; // eax@1
  NiPoint3 *v3; // eax@3

  v1 = this;
  v2 = this->m_kSkillCasting.eState;
  if ( v2 == 3 )
  {
    if ( !Char::GetReserveSkillSmash(g_pkMainChar) )
    {
      v3 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      GameFrameWork::NcActStopReq(v1, v3);
      GameFrameWork::NcBatSkillbashCastabortReq(v1);
      Char::CancelSkillAction(g_pkMainChar, 1);
    }
  }
  else
  {
    if ( v2 == 1 )
      this->m_kSkillCasting.eState = 0;
  }
}

//----- (004CCF00) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenGambleHouseWin(GameFrameWork *this, bool bAllClosed)
{
  GameFrameWork *v2; // esi@1

  v2 = this;
  if ( bAllClosed )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkGambleWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkGambleMiniWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkGambleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkGambleWin->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGambleMiniWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkGambleMiniWin->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGambleWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004CCFA0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenExchangeCoinWin(GameFrameWork *this)
{
  if ( this->m_pkCoinExchangeWin )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkCoinExchangeWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004CCFC0) --------------------------------------------------------
void __thiscall GameFrameWork::OnOpenVipCardWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( this->m_pkGambleHouseCardWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkGambleHouseCardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkGambleHouseCardWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkGambleHouseCardWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (004CD010) --------------------------------------------------------
void __thiscall GameFrameWork::SetEnchantGemWinPos(GameFrameWork *this, int XPos, int YPos, unsigned int UI_Type)
{
  GameFrameWork *v4; // esi@1

  v4 = this;
  if ( UI_Type )
  {
    if ( this->m_pkEnchantGemDeleteWin1 )
      ((void (__stdcall *)(_DWORD, _DWORD))this->m_pkEnchantGemDeleteWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        XPos,
        YPos);
    if ( v4->m_pkEnchantGemDeleteWin2 )
      ((void (__stdcall *)(_DWORD, _DWORD))v4->m_pkEnchantGemDeleteWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        XPos,
        YPos);
    if ( v4->m_pkEnchantGemDeleteWin3 )
      ((void (__stdcall *)(_DWORD, _DWORD))v4->m_pkEnchantGemDeleteWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        XPos,
        YPos);
  }
  else
  {
    if ( this->m_pkEnchantGemWin1 )
      ((void (__stdcall *)(_DWORD, _DWORD))this->m_pkEnchantGemWin1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        XPos,
        YPos);
    if ( v4->m_pkEnchantGemWin2 )
      ((void (__stdcall *)(_DWORD, _DWORD))v4->m_pkEnchantGemWin2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        XPos,
        YPos);
    if ( v4->m_pkEnchantGemWin3 )
      ((void (__stdcall *)(_DWORD, _DWORD))v4->m_pkEnchantGemWin3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        XPos,
        YPos);
  }
}

//----- (004CD0E0) --------------------------------------------------------
void __thiscall GameFrameWork::SearchQuestStartItem(GameFrameWork *this, unsigned __int16 qID, bool bGiveup)
{
  InventoryWin::SearchQuestStartItem(this->m_pkInventoryWin, qID, bGiveup);
}

//----- (004CD0F0) --------------------------------------------------------
void __thiscall GameFrameWork::AdjustFocus(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  ChatDisplayWin2 *v2; // ecx@1

  v1 = this;
  SetFocus(g_hMainWnd);
  v2 = v1->m_pkChatDisplayWin;
  if ( v2 )
  {
    if ( ChatDisplayWin2::IsDuringEdit(v2) )
      ChatDisplayWin2::SetEditFocus(v1->m_pkChatDisplayWin, 1);
  }
}

//----- (004CD130) --------------------------------------------------------
bool __thiscall GameFrameWork::IsDuringEdit(GameFrameWork *this)
{
  ChatDisplayWin2 *v1; // ecx@1

  v1 = this->m_pkChatDisplayWin;
  return v1 && ChatDisplayWin2::IsDuringEdit(v1);
}

//----- (004CD150) --------------------------------------------------------
bool __thiscall GameFrameWork::IsFriend(GameFrameWork *this, Name5 *CharID)
{
  FriendWin *v2; // ecx@1
  bool result; // al@2

  v2 = this->m_pkFriendWin;
  if ( v2 )
    result = FriendWin::GetFriendInfo(v2, CharID) != 0;
  else
    result = 0;
  return result;
}

//----- (004CD180) --------------------------------------------------------
unsigned int __thiscall GameFrameWork::GetDisplyAspect(GameFrameWork *this, unsigned int uiWidht, unsigned int uiHeight)
{
  signed int v3; // eax@1
  char *v4; // edx@1

  v3 = 0;
  v4 = (char *)&this->m_ResList[0].m_uiResHeight;
  while ( *((_DWORD *)v4 - 1) != uiWidht || *(_DWORD *)v4 != uiHeight )
  {
    ++v3;
    v4 += 16;
    if ( v3 >= 21 )
      return 0;
  }
  return this->m_ResList[v3].m_eAspect;
}

//----- (004CD1C0) --------------------------------------------------------
void __thiscall GameFrameWork::ConvertCommaNumberWork(GameFrameWork *this, __int64 i64Val, char *pNumberString)
{
  char *v3; // esi@1
  char *v4; // eax@1
  char v5; // dl@2
  int v6; // eax@3
  char v7; // dl@4
  char v8; // dl@4
  char v9; // dl@4
  char v10; // al@4
  char v11; // dl@6
  char v12; // dl@6
  char v13; // al@6
  char v14; // dl@8
  char v15; // al@8
  char comma2[4]; // [sp+Ch] [bp-4h]@4

  v3 = pNumberString;
  sprintf(pNumberString, "%I64d");
  v4 = v3;
  pNumberString = v3 + 1;
  do
    v5 = *v4++;
  while ( v5 );
  v6 = v4 - pNumberString;
  if ( v6 <= 9 )
  {
    if ( v6 <= 6 )
    {
      if ( v6 > 3 )
      {
        *(_WORD *)((char *)&pNumberString + 1) = 0;
        HIDWORD(i64Val) = 0;
        LOWORD(pNumberString) = (unsigned __int8)v3[v6 - 3];
        v14 = v3[v6 - 2];
        v15 = v3[v6 - 1];
        BYTE1(pNumberString) = v14;
        HIWORD(pNumberString) = (unsigned __int8)v15;
        BYTE3(pNumberString) = 0;
        sprintf(v3, "%I64d.%s");
      }
    }
    else
    {
      LOBYTE(pNumberString) = v3[v6 - 3];
      v11 = v3[v6 - 2];
      *(_WORD *)((char *)&pNumberString + 1) = 0;
      BYTE1(pNumberString) = v11;
      HIWORD(pNumberString) = (unsigned __int8)v3[v6 - 1];
      BYTE4(i64Val) = v3[v6 - 6];
      v12 = v3[v6 - 5];
      v13 = v3[v6 - 4];
      BYTE5(i64Val) = v12;
      BYTE6(i64Val) = v13;
      BYTE7(i64Val) = 0;
      sprintf(v3, "%I64d.%s.%s");
    }
  }
  else
  {
    LOBYTE(pNumberString) = v3[v6 - 3];
    v7 = v3[v6 - 2];
    *(_WORD *)((char *)&pNumberString + 1) = 0;
    BYTE1(pNumberString) = v7;
    HIWORD(pNumberString) = (unsigned __int8)v3[v6 - 1];
    BYTE4(i64Val) = v3[v6 - 6];
    v8 = v3[v6 - 5];
    *(_WORD *)((char *)&i64Val + 5) = 0;
    BYTE5(i64Val) = v8;
    BYTE6(i64Val) = v3[v6 - 4];
    comma2[0] = v3[v6 - 9];
    v9 = v3[v6 - 8];
    v10 = v3[v6 - 7];
    comma2[1] = v9;
    comma2[2] = v10;
    BYTE7(i64Val) = 0;
    comma2[3] = 0;
    sprintf(v3, "%I64d.%s.%s.%s");
  }
}

//----- (004CD370) --------------------------------------------------------
void __thiscall GameFrameWork::RemoveColorText(GameFrameWork *this, char *pText, char *pRemoveColorText, int nLimitTextCnt)
{
  char *v4; // esi@1
  int v5; // edi@2
  char i; // bl@3
  int v7; // eax@7
  int v8; // eax@19
  char v9; // cl@20
  int v10; // [sp+8h] [bp-10Ch]@3
  char chSaveText[256]; // [sp+10h] [bp-104h]@2
  unsigned int v12; // [sp+110h] [bp-4h]@1
  int v13; // [sp+114h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v4 = pText;
  if ( pText )
  {
    v5 = 0;
    memset(chSaveText, 0, 0x100u);
    if ( *pText )
    {
      i = 0;
      v10 = (int)chSaveText;
      while ( 1 )
      {
        if ( nLimitTextCnt && nLimitTextCnt == v5 )
          goto LABEL_19;
        if ( !strncmp(v4, "{color,", 7u) )
          break;
        if ( !i || strncmp(v4, "}", 1u) )
        {
          if ( !IsDBCSLeadByte(*v4) )
          {
            *(_BYTE *)v10++ = *v4;
LABEL_17:
            ++v4;
            ++v5;
            goto LABEL_18;
          }
          strncat(chSaveText, v4, 2u);
          v10 += 2;
          v4 += 2;
          v5 += 2;
        }
        else
        {
          ++v4;
          ++v5;
          i = 0;
        }
LABEL_18:
        if ( !*v4 )
          goto LABEL_19;
      }
      v7 = (unsigned __int8)v4[7];
      v4 += 7;
      v5 += 7;
      for ( i = 1; (_BYTE)v7; ++v5 )
      {
        if ( (_BYTE)v7 == 44 )
          break;
        LOBYTE(v7) = (v4++)[1];
      }
      goto LABEL_17;
    }
LABEL_19:
    v8 = (int)chSaveText;
    do
      v9 = *(_BYTE *)v8++;
    while ( v9 );
    strncpy(pRemoveColorText, chSaveText, v8 - (_DWORD)&chSaveText[1]);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004CD4C0) --------------------------------------------------------
void __thiscall KeyboardMoveProcess::KeyboardMoveProcess(KeyboardMoveProcess *this)
{
  KeyboardMoveProcess::Clear(this);
}

//----- (004CD4D0) --------------------------------------------------------
int __thiscall KeyboardMoveProcess::Update(KeyboardMoveProcess *this)
{
  KeyboardMoveProcess *v1; // esi@1
  bool v2; // al@1
  bool v3; // zf@3
  bool v4; // bl@7
  float v5; // edx@11
  float v6; // ecx@11
  bool v7; // al@11
  signed int v8; // edi@11
  float v9; // eax@18
  float v10; // ecx@18
  int v11; // eax@21
  float v12; // ecx@21
  float v13; // edx@21
  float v14; // eax@21
  float v15; // edx@31
  float v16; // eax@31
  float v17; // edx@32
  float v18; // eax@32
  double v19; // st6@32
  float v20; // ecx@32
  double v21; // st6@32
  float v22; // ecx@34
  float v23; // edx@34
  float v24; // eax@34
  float v25; // ecx@37
  float v26; // edx@37
  float v27; // eax@37
  float v28; // edx@38
  float v29; // eax@38
  float v30; // ecx@38
  float v31; // edx@38
  float v32; // eax@38
  bool v33; // dl@39
  bool v34; // al@39
  bool v35; // cl@39
  int result; // eax@40
  NiPoint3 pos3Left; // [sp+14h] [bp-44h]@15
  NiPoint3 pos3Right; // [sp+20h] [bp-38h]@20
  NiPoint3 pos3BackDir; // [sp+2Ch] [bp-2Ch]@20
  NiPoint3 pos3IsBlock; // [sp+38h] [bp-20h]@11
  NiPoint3 pos3ResultDir; // [sp+44h] [bp-14h]@20
  float i; // [sp+50h] [bp-8h]@33
  int eResult; // [sp+54h] [bp-4h]@1

  v1 = this;
  v2 = this->m_bAutoRun;
  eResult = 0;
  if ( v2 )
  {
    if ( !(*(_BYTE *)(g_pkKeyboard + 38) & 4) )
    {
      v3 = this->m_bDownBack == 0;
      this->m_bKeyDown = 1;
      if ( v3 )
      {
        if ( !this->m_bdownLeft && !this->m_bDownRight )
          this->m_bDownFront = 1;
      }
    }
  }
  v4 = this->m_bKeyDown;
  if ( v4 || v2 )
  {
    v5 = this->m_pos3CameraDir.x;
    v6 = this->m_pos3CameraDir.z;
    pos3IsBlock.y = v1->m_pos3CameraDir.y;
    v7 = v1->m_bDownFront;
    v8 = 1;
    eResult = 1;
    v1->m_bOldDown = 1;
    pos3IsBlock.x = v5;
    pos3IsBlock.z = v6;
    if ( v1->m_bOldDownFront != v7
      || v1->m_bOldDownBack != v1->m_bDownBack
      || v1->m_bOldDownRight != v1->m_bDownRight
      || v1->m_bOlddownLeft != v1->m_bdownLeft )
    {
      eResult = 2;
    }
    else
    {
      pos3Left.x = v1->m_pos3LastPos.x - v1->m_pos3CurPos.x;
      pos3Left.y = v1->m_pos3LastPos.y - v1->m_pos3CurPos.y;
      pos3Left.z = v1->m_pos3LastPos.z - v1->m_pos3CurPos.z;
      if ( NiPoint3::Length(&pos3Left) <= 50.0 )
      {
LABEL_39:
        v33 = v1->m_bDownBack;
        v34 = v1->m_bDownRight;
        v1->m_bOldDownFront = v1->m_bDownFront;
        v35 = v1->m_bdownLeft;
        v1->m_bOldDownBack = v33;
        v1->m_bOldDownRight = v34;
        v1->m_bOlddownLeft = v35;
        goto LABEL_40;
      }
      eResult = 2;
      if ( !v4 && v1->m_bAutoRun )
      {
        v9 = v1->m_pos3MoveDir.y;
        v10 = v1->m_pos3MoveDir.z;
        pos3IsBlock.x = v1->m_pos3MoveDir.x;
        pos3IsBlock.y = v9;
        pos3IsBlock.z = v10;
      }
    }
    pos3IsBlock.z = 0.0;
    NiPoint3::Unitize(&pos3IsBlock);
    pos3BackDir.x = -pos3IsBlock.x;
    pos3BackDir.y = -pos3IsBlock.y;
    pos3BackDir.z = -pos3IsBlock.z;
    NiPoint3::UnitCross(&pos3IsBlock, &pos3Right, &NiPoint3::UNIT_Z);
    NiPoint3::UnitCross(&NiPoint3::UNIT_Z, &pos3Left, &pos3IsBlock);
    LODWORD(pos3ResultDir.x) = (_DWORD)NiPoint3::ZERO.x;
    pos3ResultDir.y = NiPoint3::ZERO.y;
    pos3ResultDir.z = NiPoint3::ZERO.z;
    if ( byte_B30BDC == 1 )
    {
      v11 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
      LODWORD(v12) = *(_DWORD *)v11;
      LODWORD(v13) = *(_DWORD *)(v11 + 4);
      LODWORD(v14) = *(_DWORD *)(v11 + 8);
      pos3IsBlock.x = v12;
      pos3IsBlock.y = v13;
      pos3IsBlock.z = v14;
    }
    if ( v1->m_bDownFront )
    {
      pos3ResultDir.x = pos3ResultDir.x + pos3IsBlock.x;
      pos3ResultDir.y = pos3ResultDir.y + pos3IsBlock.y;
      pos3ResultDir.z = pos3ResultDir.z + pos3IsBlock.z;
    }
    NiPoint3::Unitize(&pos3ResultDir);
    if ( v1->m_bDownBack )
    {
      pos3ResultDir.x = pos3ResultDir.x + pos3BackDir.x;
      pos3ResultDir.y = pos3ResultDir.y + pos3BackDir.y;
      pos3ResultDir.z = pos3ResultDir.z + pos3BackDir.z;
    }
    NiPoint3::Unitize(&pos3ResultDir);
    if ( v1->m_bDownRight )
    {
      pos3ResultDir.x = pos3Right.x + pos3ResultDir.x;
      pos3ResultDir.y = pos3Right.y + pos3ResultDir.y;
      pos3ResultDir.z = pos3Right.z + pos3ResultDir.z;
    }
    NiPoint3::Unitize(&pos3ResultDir);
    if ( v1->m_bdownLeft )
    {
      pos3ResultDir.x = pos3Left.x + pos3ResultDir.x;
      pos3ResultDir.y = pos3Left.y + pos3ResultDir.y;
      pos3ResultDir.z = pos3Left.z + pos3ResultDir.z;
    }
    NiPoint3::Unitize(&pos3ResultDir);
    if ( !v1->m_bKeyDown )
    {
      v15 = v1->m_pos3MoveDir.y;
      v16 = v1->m_pos3MoveDir.z;
      pos3ResultDir.x = v1->m_pos3MoveDir.x;
      pos3ResultDir.y = v15;
      pos3ResultDir.z = v16;
    }
    v17 = pos3ResultDir.y;
    v18 = pos3ResultDir.z;
    v19 = pos3ResultDir.x * 100.0;
    LODWORD(v1->m_pos3MoveDir.x) = (_DWORD)pos3ResultDir.x;
    v20 = v1->m_pos3CurPos.x;
    pos3Left.x = v19;
    pos3BackDir.x = v20;
    v21 = pos3ResultDir.y;
    v1->m_pos3MoveDir.y = v17;
    pos3BackDir.y = v1->m_pos3CurPos.y;
    v1->m_pos3MoveDir.z = v18;
    pos3Left.y = v21 * 100.0;
    pos3BackDir.z = v1->m_pos3CurPos.z;
    pos3Left.z = 100.0 * pos3ResultDir.z;
    pos3BackDir.x = pos3Left.x + pos3BackDir.x;
    pos3BackDir.y = pos3Left.y + pos3BackDir.y;
    pos3BackDir.z = pos3BackDir.z + pos3Left.z;
    if ( World::IsBlock(&g_kWorld, pos3BackDir.x, pos3BackDir.y) )
    {
      LODWORD(i) = 1;
      while ( 1 )
      {
        v22 = v1->m_pos3CurPos.x;
        v23 = v1->m_pos3CurPos.y;
        v24 = v1->m_pos3CurPos.z;
        i = (double)SLODWORD(i);
        pos3IsBlock.z = v24;
        pos3Left.x = pos3ResultDir.x * i;
        pos3Left.y = i * pos3ResultDir.y;
        pos3IsBlock.x = pos3Left.x + v22;
        pos3IsBlock.y = pos3Left.y + v23;
        if ( World::IsBlock(&g_kWorld, pos3IsBlock.x, pos3IsBlock.y) )
          break;
        ++v8;
        LODWORD(i) = v8;
        if ( v8 >= 100 )
          goto LABEL_38;
      }
      v25 = v1->m_pos3CurPos.x;
      LODWORD(i) = v8 - 1;
      v26 = v1->m_pos3CurPos.y;
      v27 = v1->m_pos3CurPos.z;
      i = (double)(v8 - 1);
      pos3Left.x = pos3ResultDir.x * i;
      pos3Left.y = pos3ResultDir.y * i;
      pos3Left.z = i * pos3ResultDir.z;
      pos3IsBlock.x = pos3Left.x + v25;
      LODWORD(pos3BackDir.x) = (_DWORD)pos3IsBlock.x;
      pos3IsBlock.y = pos3Left.y + v26;
      pos3BackDir.y = pos3IsBlock.y;
      pos3IsBlock.z = pos3Left.z + v27;
      pos3BackDir.z = pos3IsBlock.z;
    }
LABEL_38:
    v28 = pos3BackDir.y;
    v29 = pos3BackDir.z;
    LODWORD(v1->m_pos3TargetPos.x) = (_DWORD)pos3BackDir.x;
    v30 = v1->m_pos3CurPos.x;
    v1->m_pos3TargetPos.y = v28;
    v31 = v1->m_pos3CurPos.y;
    v1->m_pos3TargetPos.z = v29;
    v32 = v1->m_pos3CurPos.z;
    v1->m_pos3LastPos.x = v30;
    v1->m_pos3LastPos.y = v31;
    v1->m_pos3LastPos.z = v32;
    goto LABEL_39;
  }
  if ( this->m_bOldDown )
  {
    *(_DWORD *)&this->m_bOldDownFront = 0;
    eResult = 3;
  }
LABEL_40:
  result = eResult;
  v1->m_bOldDown = v1->m_bKeyDown;
  v1->m_bKeyDown = 0;
  *(_DWORD *)&v1->m_bDownFront = 0;
  return result;
}
// A9816C: using guessed type int g_pkKeyboard;
// B30BDC: using guessed type char byte_B30BDC;

//----- (004CD8D0) --------------------------------------------------------
Char *__thiscall GameFrameWork::GetCharByHandle(GameFrameWork *this, unsigned __int16 kHandle, int iDepart, int iCommand)
{
  GameFrameWork *v4; // edi@1
  Char *result; // eax@2

  v4 = this;
  if ( unk_AA2801 == 1 )
  {
    result = 0;
  }
  else
  {
    result = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( result )
    {
      result->m_bConnectServer = 1;
    }
    else
    {
      GameFrameWork::NcBriefInfoCmd(v4, kHandle, iDepart, iCommand);
      result = 0;
    }
  }
  return result;
}

//----- (004CD920) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateAutoCloseWin(GameFrameWork *this)
{
  GameFrameWork *v1; // ebx@1
  NiTListItem<PgWin *> *v2; // esi@4
  PgWin *v3; // edi@5
  NiPoint3 kDir; // [sp+4h] [bp-10h]@2
  float v5; // [sp+10h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkAutoCloseWin )
  {
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kDir);
    kDir.x = kDir.x - v1->m_kAutoCloseWinOpenPosition.x;
    kDir.y = kDir.y - v1->m_kAutoCloseWinOpenPosition.y;
    kDir.z = kDir.z - v1->m_kAutoCloseWinOpenPosition.z;
    v5 = kDir.z * kDir.z + kDir.x * kDir.x + kDir.y * kDir.y;
    if ( v5 > 28900.0 )
    {
      GameFrameWork::CloseAutoCloseWin(v1, v1->m_pkAutoCloseWin);
      v1->m_pkAutoCloseWin = 0;
    }
  }
  else
  {
    v2 = this->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead;
    if ( v2 )
    {
      while ( 1 )
      {
        v3 = v2->m_element;
        v2 = v2->m_pkNext;
        if ( v3 )
        {
          if ( (unsigned __int8)((int (__thiscall *)(PgWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
            break;
        }
        if ( !v2 )
          return;
      }
      v1->m_pkAutoCloseWin = v3;
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&v1->m_kAutoCloseWinOpenPosition);
    }
  }
}

//----- (004CDA10) --------------------------------------------------------
bool __thiscall GameFrameWork::AdjustRestHP(GameFrameWork *this, unsigned __int16 CharHandle, unsigned int *restHP)
{
  int v3; // eax@2
  Char *v4; // eax@3
  unsigned int *v6; // edx@7
  bool v7; // sf@7
  unsigned __int8 v8; // of@7
  void *v9; // eax@7

  if ( CharHandle == g_pkMainChar->m_kHandle )
  {
    v3 = User::MaxHP(&g_kUser);
  }
  else
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, CharHandle);
    if ( !v4 )
      return 0;
    v3 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].Deaffect)(v4);
  }
  *(_DWORD *)&CharHandle = v3;
  if ( !v3 )
    return 0;
  v6 = restHP;
  v8 = __OFSUB__(v3, *restHP);
  v7 = ((v3 - *restHP) & 0x80000000u) != 0;
  restHP = (unsigned int *)*restHP;
  v9 = &CharHandle;
  if ( !(v7 ^ v8) )
    v9 = &restHP;
  *v6 = *(_DWORD *)v9;
  return 1;
}

//----- (004CDA80) --------------------------------------------------------
void __thiscall GameFrameWork::OpenDiceGameWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // ebx@1
  MHDiceGameTask *v3; // edi@2
  PgWin *v4; // eax@9
  NiPointer<MHDiceGameTask> result; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  if ( v2 )
  {
    if ( MHDiceGameTask::IsGambleMode(v2) )
    {
      if ( !(unsigned __int8)((int (*)(void))v1->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkDiceGameMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0);
        return;
      }
      v4 = (PgWin *)v1->m_pkGambleDiceGameWin;
    }
    else
    {
      if ( !(unsigned __int8)((int (*)(void))v1->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkDiceGameMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0);
        return;
      }
      v4 = (PgWin *)v1->m_pkDiceGameWin;
    }
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkDiceGameMinimizeWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (004CDB80) --------------------------------------------------------
void __thiscall GameFrameWork::OpenSlotMachineWin(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  MHDiceGameTask *v2; // edi@1
  MHDiceGameTask *v3; // ebx@2
  NiPointer<MHDiceGameTask> result; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  if ( v2 && MHDiceGameTask::IsGambleMode(v2) && v2->m_eDiceGameMode == 4 )
  {
    if ( (unsigned __int8)((int (*)(void))v1->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkMiniSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMiniSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004CDC40) --------------------------------------------------------
void __thiscall GameFrameWork::SetCharEmotionUIState(GameFrameWork *this, bool bMHEmotionStart)
{
  GameFrameWork *v2; // esi@1
  ShortCutWin **v3; // esi@1
  signed int v4; // ebx@1
  ShortCutWin *v5; // ecx@2

  v2 = this;
  ActionWin::SetMHActionState(this->m_pkActionWin, bMHEmotionStart);
  ShortCutWin::SetMHActionState(v2->m_pkShortCutWin, bMHEmotionStart);
  ShortCutWin::SetMHActionState(v2->m_pkShortCutWinV, bMHEmotionStart);
  v3 = v2->m_pkShortCutSubWinV;
  v4 = 4;
  do
  {
    v5 = *(v3 - 5);
    if ( v5 )
      ShortCutWin::SetMHActionState(v5, bMHEmotionStart);
    if ( *v3 )
      ShortCutWin::SetMHActionState(*v3, bMHEmotionStart);
    ++v3;
    --v4;
  }
  while ( v4 );
}

//----- (004CDCB0) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateUIScroll(GameFrameWork *this, SlideListWin *pkList, CClientGuild *pkGuild)
{
  if ( (PgWin *)pkList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent == PgWinMgr::GetTopWin(&Pgg_kWinMgr)
    && (unsigned __int8)((int (__thiscall *)(_DWORD, _DWORD, _DWORD))pkList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          pkList,
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) )
  {
    unk_B7044D = 1;
    if ( PgWin::ms_iMsDeltaZ <= 0 )
    {
      if ( PgWin::ms_iMsDeltaZ < 0 )
        CClientGuild::ReqNextPage(pkGuild);
    }
    else
    {
      CClientGuild::ReqPrevPage(pkGuild);
    }
  }
}

//----- (004CDD20) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateUIScroll(GameFrameWork *this, FrameBoxWin *pkBox, ChatBoardFlex *pkBoard)
{
  GameFrameWork *v3; // esi@1

  v3 = this;
  if ( unk_B7044D
    && (PgWin *)pkBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent != PgWinMgr::GetTopWin(&Pgg_kWinMgr) )
  {
LABEL_9:
    v3->m_bUIScroll = 0;
    return;
  }
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD, _DWORD, _DWORD))pkBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                           pkBox,
                           PgWin::ms_iMsX.x,
                           PgWin::ms_iMsY) )
  {
    if ( PgWin::ms_iMsDeltaZ )
      return;
    goto LABEL_9;
  }
  v3->m_bUIScroll = 1;
  if ( PgWin::ms_iMsDeltaZ <= 0 )
  {
    if ( PgWin::ms_iMsDeltaZ < 0 )
      ChatBoardFlex::ViewLineDown(pkBoard);
  }
  else
  {
    ChatBoardFlex::ViewLineUp(pkBoard);
  }
}

//----- (004CDDB0) --------------------------------------------------------
void __thiscall GameFrameWork::OnShowWinInterfaceList(GameFrameWork *this, bool bShow)
{
  GameFrameWork *v2; // edi@1
  NiTListItem<PgWin *> *v3; // eax@1
  PgWin *v4; // esi@4
  AttendIconWin *v5; // eax@5
  Char *v6; // ebx@14
  MobInfo *pkMobInfo; // [sp+4h] [bp-8h]@16
  NiTListItem<PgWin *> *iter; // [sp+8h] [bp-4h]@4

  v2 = this;
  v3 = this->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      iter = v3->m_pkNext;
      if ( v4 )
      {
        v5 = v2->m_pkAttendIconWin;
        if ( (AttendIconWin *)v4 == v5 )
        {
          if ( bShow && v5->m_bEvtState )
            v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
          else
            v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
        }
        else
        {
          if ( bShow )
            v4->baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
          else
            v4->baseclass_0.baseclass_0.m_uFlags |= 1u;
          if ( (TargetWin *)v4 == v2->m_pkTargetWin )
          {
            v6 = (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
            if ( bShow == 1 )
            {
              if ( !v6
                || (pkMobInfo = Char::GetMobInfo((Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0]),
                    Char::IsLinkGate(v6))
                || pkMobInfo && pkMobInfo->Type == 29 )
              {
                v2->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              }
              else
              {
                v2->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
                PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkTargetWin->baseclass_0.baseclass_0.baseclass_0);
              }
            }
          }
          if ( g_kParty.m_uiTotalMember )
            PartyWinInterface::SetWindowCull(v2->m_pkPartyWinInterface, bShow == 0);
          if ( bShow && g_pkMainChar->m_byMode == 6 )
          {
            if ( (FeedMoverWin *)v4 == v2->m_pkFeedMoverWin )
              PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0);
            if ( (RidePetWin *)v4 == v2->m_pkRidePetWin )
              PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkRidePetWin->baseclass_0.baseclass_0.baseclass_0);
          }
          else
          {
            if ( (FeedMoverWin *)v4 == v2->m_pkFeedMoverWin )
              PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkFeedMoverWin->baseclass_0.baseclass_0.baseclass_0);
            if ( (RidePetWin *)v4 == v2->m_pkRidePetWin )
              PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkRidePetWin->baseclass_0.baseclass_0.baseclass_0);
          }
        }
      }
      if ( !iter )
        break;
      v3 = iter;
    }
  }
}

//----- (004CDF40) --------------------------------------------------------
void __thiscall GameFrameWork::AddScenarioMsg(GameFrameWork *this, ScriptMsg *pkMsgInfo, char *pkStr)
{
  AnnounceWin *v3; // edx@1
  AnnounceWin *v4; // ecx@2
  PgFrameWork *v5; // eax@7
  GTInformWin *v6; // edi@8
  char *v7; // ecx@9
  signed int v8; // edx@10
  D3DXCOLOR v9; // ST04_16@10
  signed int v10; // edx@11
  D3DXCOLOR v11; // ST04_16@11
  char *v12; // eax@12
  signed int v13; // edx@13
  signed int v14; // eax@14
  char *v15; // eax@15
  signed int v16; // ecx@16
  signed int v17; // eax@17
  float v18; // [sp+Ch] [bp-50h]@17
  float v19; // [sp+10h] [bp-4Ch]@17
  float v20; // [sp+14h] [bp-48h]@17
  float v21; // [sp+18h] [bp-44h]@17
  float v22; // [sp+1Ch] [bp-40h]@16
  float v23; // [sp+20h] [bp-3Ch]@16
  float v24; // [sp+24h] [bp-38h]@16
  float v25; // [sp+28h] [bp-34h]@16
  float v26; // [sp+2Ch] [bp-30h]@14
  float v27; // [sp+30h] [bp-2Ch]@14
  float v28; // [sp+34h] [bp-28h]@14
  float v29; // [sp+38h] [bp-24h]@14
  D3DXCOLOR TextColor; // [sp+3Ch] [bp-20h]@13
  float v31; // [sp+4Ch] [bp-10h]@10
  __int64 v32; // [sp+50h] [bp-Ch]@10
  float v33; // [sp+58h] [bp-4h]@10
  signed int pkStra; // [sp+68h] [bp+Ch]@10
  signed int pkStrb; // [sp+68h] [bp+Ch]@11
  signed int pkStrc; // [sp+68h] [bp+Ch]@13
  signed int pkStrd; // [sp+68h] [bp+Ch]@14
  signed int pkStre; // [sp+68h] [bp+Ch]@16
  signed int pkStrf; // [sp+68h] [bp+Ch]@17

  v3 = this->m_pkAnnounceWin;
  if ( v3 )
  {
    v4 = this->m_pkRemainAnnounceWin;
    if ( v4 )
    {
      if ( pkMsgInfo )
      {
        switch ( pkMsgInfo->SM_Pos )
        {
          case 1:
            v15 = pkStr;
            if ( pkStr )
            {
              pkStre = pkMsgInfo->G;
              v16 = pkMsgInfo->B;
              v22 = (double)pkMsgInfo->R / 255.0;
              v23 = (double)pkStre / 255.0;
              v24 = (double)v16 / 255.0;
              v25 = 1.0;
              AnnounceWin::AddText(v3, v15, (D3DXCOLOR *)&v22, 0, 0.0);
            }
            else
            {
              pkStrf = pkMsgInfo->G;
              v17 = pkMsgInfo->B;
              v18 = (double)pkMsgInfo->R / 255.0;
              v19 = (double)pkStrf / 255.0;
              v20 = (double)v17 / 255.0;
              v21 = 1.0;
              AnnounceWin::AddText(v3, pkMsgInfo->SM_Msg, (D3DXCOLOR *)&v18, 0, 0.0);
            }
            break;
          case 2:
            v12 = pkStr;
            if ( pkStr )
            {
              pkStrc = pkMsgInfo->G;
              v13 = pkMsgInfo->B;
              TextColor.r = (double)pkMsgInfo->R / 255.0;
              TextColor.g = (double)pkStrc / 255.0;
              TextColor.b = (double)v13 / 255.0;
              TextColor.a = 1.0;
              AnnounceWin::AddText(v4, v12, &TextColor, 1, 1000000.0);
            }
            else
            {
              pkStrd = pkMsgInfo->G;
              v14 = pkMsgInfo->B;
              v26 = (double)pkMsgInfo->R / 255.0;
              v27 = (double)pkStrd / 255.0;
              v28 = (double)v14 / 255.0;
              v29 = 1.0;
              AnnounceWin::AddText(v4, pkMsgInfo->SM_Msg, (D3DXCOLOR *)&v26, 1, 1000000.0);
            }
            break;
          case 3:
            v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
            if ( v5 )
            {
              v6 = (GTInformWin *)v5[33].m_kMsgQ.m_uiHead;
              if ( v6 )
              {
                GTInformWin::Clear((GTInformWin *)v5[33].m_kMsgQ.m_uiHead);
                v7 = pkStr;
                if ( pkStr )
                {
                  pkStra = pkMsgInfo->G;
                  v8 = pkMsgInfo->B;
                  v31 = (double)pkMsgInfo->R / 255.0;
                  *(float *)&v32 = (double)pkStra / 255.0;
                  *((float *)&v32 + 1) = (double)v8 / 255.0;
                  v33 = 1.0;
                  v9.r = v31;
                  *(_QWORD *)&v9.g = v32;
                  v9.a = 1.0;
                  GTInformWin::AddText(v6, v7, COERCE_D3DXCOLOR(v9.r), 0, 0.0);
                }
                else
                {
                  pkStrb = pkMsgInfo->G;
                  v10 = pkMsgInfo->B;
                  v31 = (double)pkMsgInfo->R / 255.0;
                  *(float *)&v32 = (double)pkStrb / 255.0;
                  *((float *)&v32 + 1) = (double)v10 / 255.0;
                  v33 = 1.0;
                  v11.r = v31;
                  *(_QWORD *)&v11.g = v32;
                  v11.a = 1.0;
                  GTInformWin::AddText(v6, pkMsgInfo->SM_Msg, COERCE_D3DXCOLOR(v11.r), 0, 0.0);
                }
              }
            }
            break;
        }
      }
    }
  }
}

//----- (004CE240) --------------------------------------------------------
bool __thiscall GameFrameWork::UseActiveSkillItem(GameFrameWork *this, unsigned int uiInvenSlot, unsigned __int16 kSkillID)
{
  Char *v3; // ecx@2
  bool result; // al@2
  Char *v5; // ecx@2

  if ( this->m_kSkillCasting.eState )
  {
    result = 1;
  }
  else
  {
    MainChar::SetReserveAct((MainChar *)g_pkMainChar, RESERVEACT_SKILL);
    v3 = g_pkMainChar;
    result = 1;
    LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0]) = kSkillID;
    v3[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[1] = 1;
    v5 = g_pkMainChar;
    g_pkMainChar[1].m_bGroundSkillTargetPointSetted = 1;
    *(_DWORD *)&v5[1].m_szBlockName[1] = uiInvenSlot;
  }
  return result;
}

//----- (004CE2A0) --------------------------------------------------------
void __thiscall KeyboardMoveProcess::SetAutoRun(KeyboardMoveProcess *this, bool bAutoRun)
{
  KeyboardMoveProcess *v2; // esi@1
  float v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  PgFrameWork *v6; // edi@3
  char *v7; // eax@8
  unsigned int v8; // [sp-4h] [bp-10h]@5

  v2 = this;
  if ( bAutoRun )
  {
    v3 = this->m_pos3CameraDir.x;
    v4 = this->m_pos3CameraDir.y;
    v5 = v2->m_pos3CameraDir.z;
    v2->m_pos3MoveDir.x = v3;
    v2->m_pos3MoveDir.y = v4;
    v2->m_bKeyDown = 1;
    v2->m_bDownFront = 1;
    v2->m_pos3MoveDir.z = v5;
  }
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( bAutoRun )
  {
    if ( !v2->m_bAutoRun )
    {
      v8 = 1062370716;
LABEL_8:
      v7 = TextData2::Get(v8);
      GameFrameWork::AddSysMsg((GameFrameWork *)v6, v7);
      goto LABEL_9;
    }
  }
  else
  {
    if ( v2->m_bAutoRun )
    {
      v8 = 1519156613;
      goto LABEL_8;
    }
  }
LABEL_9:
  v2->m_bAutoRun = bAutoRun;
}

//----- (004CE310) --------------------------------------------------------
void __thiscall GameFrameWork::Draw(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  CPostProcessEffectManager *v2; // eax@1
  CPostProcessEffectManager *v3; // eax@7
  MainApp *v4; // eax@11
  NiRenderer *v5; // ST00_4@12
  NiRenderer *v6; // edi@13
  HelpWin *v7; // ecx@16
  HWND__ *v8; // eax@16
  CBlindEffect *v9; // ecx@18
  CameraEffect *v10; // ecx@20
  TextScreenEffect *v11; // ecx@22
  NiRenderer *v12; // edi@22
  void *v13; // eax@23
  TextScreenEffect *v14; // eax@24
  HelpWin *v15; // esi@28
  HWND__ *v16; // esi@29
  NiPointer<NiRenderer> result; // [sp+4h] [bp-118h]@12
  char acFileName[260]; // [sp+8h] [bp-114h]@12
  unsigned int v19; // [sp+10Ch] [bp-10h]@1
  int v20; // [sp+118h] [bp-4h]@12
  int v21; // [sp+11Ch] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v1 = this;
  v2 = CPostProcessEffectManager::GetInstance();
  CPostProcessEffectManager::OnRenderSceneStart(v2);
  if ( v1->m_bWorld )
    World::Draw(&g_kWorld);
  if ( v1->m_bScrnBDMgr )
    ScreenBDMgr::Draw(&g_kScrnBDMgr);
  if ( v1->m_bTextEffMgr )
    TextEffMgr::Draw(&g_kTextEffMgr);
  v3 = CPostProcessEffectManager::GetInstance();
  CPostProcessEffectManager::OnRenderSceneEnd(v3);
  if ( v1->m_bDrawInterface )
  {
    if ( v1->m_bDrawWinMgr )
      PgWinMgr::Draw(&Pgg_kWinMgr, NiRenderer::ms_pkRenderer);
  }
  else
  {
    if ( v1->m_bScreenShot )
    {
      v4 = MainApp::GetMainAppInstance();
      if ( v4 )
      {
        v5 = MainApp::GetRender(v4, &result)->m_pObject;
        v20 = 0;
        ScreenShot(v5, g_hMainWnd, acFileName, 260);
        v20 = -1;
        if ( result.m_pObject )
        {
          v6 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v6 )
              v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
          }
        }
        v7 = v1->m_pkHelpWin;
        *(_WORD *)&v1->m_bScreenShot = 256;
        v8 = v7->m_hWebWindow;
        if ( v8 )
          ShowWindow(v8, 5);
      }
    }
  }
  v9 = v1->m_spBlindEffect.m_pObject;
  if ( v9 )
    CBlindEffect::Draw(v9, NiRenderer::ms_pkRenderer);
  v10 = v1->m_spCamEffect.m_pObject;
  if ( v10 )
    CameraEffect::Draw(v10, NiRenderer::ms_pkRenderer);
  v11 = Singleton<TextScreenEffect>::m_pInstance;
  v12 = NiRenderer::ms_pkRenderer;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v13 = operator new(0x28u);
    v20 = 1;
    if ( v13 )
      TextScreenEffect::TextScreenEffect((TextScreenEffect *)v13);
    else
      v14 = 0;
    v11 = v14;
    v20 = -1;
    Singleton<TextScreenEffect>::m_pInstance = v14;
  }
  TextScreenEffect::Draw(v11, v12);
  if ( !v1->m_bDrawInterface )
  {
    v1->m_bScreenShot = 1;
    v15 = v1->m_pkHelpWin;
    if ( v15 )
    {
      v16 = v15->m_hWebWindow;
      if ( v16 )
        ShowWindow(v16, 0);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004CE520) --------------------------------------------------------
void __thiscall GameFrameWork::GetDropItemByPicking(GameFrameWork *this, DropItem *pkDropItem)
{
  GameFrameWork *v2; // ebx@1
  NiNode *v3; // esi@6
  int v4; // eax@6
  char *v5; // eax@9
  NiNode *v6; // edi@10
  NiPoint3 thisa; // [sp+14h] [bp-Ch]@7

  v2 = this;
  if ( pkDropItem
    && !Char::CheckActState(g_pkMainChar, 500000)
    && !g_pkMainChar->m_bWillDead
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)()
    && Char::IsMoverMovable(g_pkMainChar) )
  {
    v3 = pkDropItem->m_spNode.m_pObject;
    v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    if ( pkDropItem->m_bPickable )
    {
      thisa.x = *(float *)v4 - v3->baseclass_0.m_kLocal.m_Translate.x;
      thisa.y = *(float *)(v4 + 4) - v3->baseclass_0.m_kLocal.m_Translate.y;
      thisa.z = *(float *)(v4 + 8) - v3->baseclass_0.m_kLocal.m_Translate.z;
      if ( NiPoint3::Length(&thisa) <= 125.0 )
      {
        GameFrameWork::OnPickDropItem(v2, pkDropItem);
        return;
      }
    }
    else
    {
      v5 = TextData::Get(0x8610D8D7u);
      GameFrameWork::AddSysMsg(v2, v5);
    }
    v6 = pkDropItem->m_spNode.m_pObject;
    thisa.x = v6->baseclass_0.m_kLocal.m_Translate.x;
    thisa.y = v6->baseclass_0.m_kLocal.m_Translate.y;
    thisa.z = v6->baseclass_0.m_kLocal.m_Translate.z;
    GameFrameWork::MainCharMoveToChar(v2, &thisa, 70.0, 5);
  }
}

//----- (004CE630) --------------------------------------------------------
void __thiscall GameFrameWork::SetAutoCloseWin(GameFrameWork *this, PgWin *pkWin)
{
  char *v2; // esi@1
  NiTListItem<PgWin *> *v3; // eax@1
  int v4; // ecx@1

  v2 = (char *)&this->m_kAutoCloseWinList;
  v3 = this->m_kAutoCloseWinList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<PgWin *>,PgWin *> *)&this->m_kAutoCloseWinList);
  v3->m_element = pkWin;
  v3->m_pkNext = 0;
  v3->m_pkPrev = (NiTListItem<PgWin *> *)*((_DWORD *)v2 + 2);
  v4 = *((_DWORD *)v2 + 2);
  if ( v4 )
  {
    *(_DWORD *)v4 = v3;
    ++*((_DWORD *)v2 + 3);
    *((_DWORD *)v2 + 2) = v3;
  }
  else
  {
    ++*((_DWORD *)v2 + 3);
    *((_DWORD *)v2 + 1) = v3;
    *((_DWORD *)v2 + 2) = v3;
  }
}

//----- (004CE680) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateUIScroll(GameFrameWork *this, SlideListWin *pkList, SlideBar *pkBar)
{
  int v3; // ecx@3
  int v4; // eax@4

  if ( (PgWin *)pkList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent == PgWinMgr::GetTopWin(&Pgg_kWinMgr) )
    goto LABEL_18;
  if ( PgWinMgr::GetTopWin(&Pgg_kWinMgr) == g_pkToolTipWin )
  {
    v3 = unk_B703F8 - 2;
    if ( (unsigned int)(unk_B703F8 - 2) < unk_B703F8 )
    {
      v4 = unk_B703F0;
      if ( unk_B703F8 != 2 )
      {
        do
        {
          if ( v4 )
            v4 = *(_DWORD *)v4;
          else
            v4 = 0;
          --v3;
        }
        while ( v3 );
      }
      if ( v4 && *(NiNode **)(v4 + 8) == pkList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent )
      {
LABEL_18:
        if ( (unsigned __int8)((int (__thiscall *)(SlideListWin *, int, int))pkList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                                pkList,
                                PgWin::ms_iMsX.x,
                                PgWin::ms_iMsY) )
        {
          unk_B7044D = 1;
          if ( PgWin::ms_iMsDeltaZ <= 0 )
          {
            if ( PgWin::ms_iMsDeltaZ < 0 )
              SlideBar::OnClick2(pkBar);
          }
          else
          {
            SlideBar::OnClick1(pkBar);
          }
        }
      }
    }
  }
}

//----- (004CE730) --------------------------------------------------------
bool __thiscall GameFrameWork::IsPlayCardOpen(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  CollectCardWin *v2; // esi@1
  char *v3; // eax@4
  bool result; // al@4

  v1 = this;
  v2 = this->m_pkCollectCardWin[0];
  if ( v2 && (CollectCardWin::IsPlay(this->m_pkCollectCardWin[0]) || CollectCardWin::IsOpen(v2)) )
  {
    v3 = TextData2::Get(0xC2C6B60Fu);
    GameFrameWork::AddSysMsg(v1, v3);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004CE780) --------------------------------------------------------
bool __thiscall GameFrameWork::IsVotePossible(GameFrameWork *this, unsigned int kHandle)
{
  PROTO_KQ_INFO_CLIENT *v2; // eax@2
  KQIsVote *v3; // eax@2
  bool result; // al@3

  if ( kHandle != -1
    && (v2 = KingdomQuestWin::GetQuestInfo(this->m_pkKingDomQuest, kHandle), (v3 = KQIsVoteTable::GetByID(v2->ID)) != 0) )
    result = v3->IsVote != 0;
  else
    result = 0;
  return result;
}

//----- (004CE7C0) --------------------------------------------------------
bool __thiscall GameFrameWork::IsAvailableArrange(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  CollectCardWin *v2; // edi@1
  char *v3; // eax@4
  char *v5; // eax@8
  int v6; // [sp-4h] [bp-Ch]@7

  v1 = this;
  v2 = this->m_pkCollectCardWin[0];
  if ( v2 && (CollectCardWin::IsPlay(this->m_pkCollectCardWin[0]) || CollectCardWin::IsOpen(v2)) )
  {
    v3 = TextData2::Get(0xC2C6B60Fu);
    GameFrameWork::AddSysMsg(v1, v3);
    return 0;
  }
  if ( v1->m_pkItemUpgradeWin
    && (unsigned __int8)((int (*)(void))v1->m_pkItemUpgradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || v1->m_pkMoverUpgradeWin
    && (unsigned __int8)((int (*)(void))v1->m_pkMoverUpgradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    goto LABEL_23;
  if ( v1->m_pkRandomOptionWin
    && (unsigned __int8)((int (*)(void))v1->m_pkRandomOptionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v6 = 12458;
    goto LABEL_8;
  }
  if ( v1->m_pkTermExtendWin
    && (unsigned __int8)((int (*)(void))v1->m_pkTermExtendWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || v1->m_pkMinimonAutoItemUseWin
    && (unsigned __int8)((int (*)(void))v1->m_pkMinimonAutoItemUseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || v1->m_pkItemMixWin
    && (unsigned __int8)((int (*)(void))v1->m_pkItemMixWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
LABEL_23:
    v6 = 12460;
LABEL_8:
    v5 = ErrMsgTable::GetErrMsg(v6);
    GameFrameWork::AddSysMsg(v1, v5);
    return 0;
  }
  return 1;
}

//----- (004CE8E0) --------------------------------------------------------
void __thiscall GameFrameWork::OnAutoPickByMiniMon(GameFrameWork *this, std::_Vector_iterator<std::_Vector_val<DropItem *,std::allocator<DropItem *> > > iterBegin, std::_Vector_iterator<std::_Vector_val<DropItem *,std::allocator<DropItem *> > > iterEnd)
{
  DropItem *v3; // ebx@4
  int v4; // esi@4
  int v5; // edi@4
  int v6; // edx@6
  int v7; // eax@7
  bool v8; // zf@13
  GameFrameWork *thisa; // [sp+0h] [bp-8h]@1
  std::_Vector_iterator<std::_Vector_val<DropItem *,std::allocator<DropItem *> > > iter; // [sp+4h] [bp-4h]@3

  thisa = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].Deaffect)() )
  {
    if ( g_pkMainChar->m_kCharShape.m_bAutoPickItem )
    {
      iter = iterBegin;
      if ( iterBegin != iterEnd )
      {
        while ( 1 )
        {
          v3 = (DropItem *)**(_DWORD **)&iter;
          v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
          v5 = *(_WORD *)(**(_DWORD **)&iter + 4);
          if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                   + 16))(
                                  ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                  *(_WORD *)(**(_DWORD **)&iter + 4)) )
          {
            if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
            {
              v6 = *(_DWORD *)(v4 + 196);
              if ( *(_DWORD *)(v6 + 4 * v5) )
              {
                v7 = *(_DWORD *)(v6 + 4 * v5);
                if ( v7 )
                {
                  if ( ItemAuthority::IsAllFalse((ItemAuthority *)&g_kItemAuthority, *(E_BelongType *)(v7 + 274)) )
                    break;
                }
              }
            }
          }
          *(_DWORD *)&iter += 4;
          if ( iter == iterEnd )
            return;
        }
        if ( !g_kParty.m_uiTotalMember
          || (!g_kRaidinfo.m_uiTotalMemberOnRaid ? (v8 = LOBYTE(g_kParty.m_eLootType) == 0) : (v8 = g_kRaidinfo.m_eLootType == 0),
              v8) )
          GameFrameWork::OnPickDropItem(thisa, v3);
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004CE9D0) --------------------------------------------------------
bool __thiscall GameFrameWork::PlayCardEffect(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  char *v2; // eax@2
  bool result; // al@2
  CollectCardWin *v4; // edi@3
  char *v5; // eax@6
  CollectCardWin *v6; // ecx@7
  SoundIndex rkIndex; // [sp+4h] [bp-8h]@8

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() )
  {
    v2 = TextData2::Get(0x5BAE6CCCu);
    GameFrameWork::AddSysMsg(v1, v2);
    result = 0;
  }
  else
  {
    v4 = v1->m_pkCollectCardWin[0];
    if ( v4 && (CollectCardWin::IsPlay(v1->m_pkCollectCardWin[0]) || CollectCardWin::IsOpen(v4)) )
    {
      v5 = TextData2::Get(0xC2C6B60Fu);
      GameFrameWork::AddSysMsg(v1, v5);
      result = 0;
    }
    else
    {
      GameFrameWork::OpenCollectCardWin(v1, 0, 0, 0, 0, 0);
      GameFrameWork::OpenCollectCardWin(v1, 1, 1u, 0, 0, 0);
      v6 = v1->m_pkCollectCardWin[0];
      if ( v6 )
      {
        CollectCardWin::PlayCardEffect(v6);
        rkIndex.m_dwIndex = 48;
        rkIndex.m_acFilename = 0;
        SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
      }
      result = 1;
    }
  }
  return result;
}

//----- (004CEAA0) --------------------------------------------------------
void __thiscall GameFrameWork::HideEscapeWin(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *v4; // eax@3
  std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *j; // eax@4
  std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *i; // eax@7

  v1 = this;
  v2 = this->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v3->_Myval);
      if ( !v3->_Isnil )
      {
        v4 = v3->_Right;
        if ( v4->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
}

//----- (004CEB10) --------------------------------------------------------
void __thiscall GameFrameWork::CheckWebFocus(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  NiTListItem<PgWin *> *v2; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> >,0> >::_Node *v3; // eax@3
  std::_Tree_nod<std::_Tmap_traits<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> >,0> >::_Node *v4; // esi@3
  NiTListItem<PgWin *> *v5; // eax@5
  std::_Tree_nod<std::_Tmap_traits<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> >,0> >::_Node *v6; // eax@10
  std::_Tree_nod<std::_Tmap_traits<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> >,0> >::_Node *j; // eax@11
  std::_Tree_nod<std::_Tmap_traits<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> >,0> >::_Node *i; // eax@14
  NiTListItem<PgWin *> *v9; // esi@19
  PgWin *v10; // eax@20
  NiTListItem<PgWin *> *v11; // esi@24
  NiTListItem<PgWin *> *v12; // ST00_4@25
  PgTList<PgWin *> kCloseList; // [sp+0h] [bp-1Ch]@3
  int v14; // [sp+18h] [bp-4h]@3

  v1 = this;
  if ( GameFrameWork::ms_bSpawnApps == 1 && !GetFocus() )
  {
    v2 = 0;
    *(_DWORD *)&kCloseList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
    kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
    kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
    kCloseList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *>Vtbl *)&PgTList<PgWin__>::_vftable_;
    v3 = v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v4 = v3->_Left;
    v14 = 0;
    if ( v4 != v3 )
    {
      do
      {
        if ( v4->_Myval.baseclass_0.second )
        {
          v5 = kCloseList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *)&kCloseList);
          v5->m_element = v4->_Myval.baseclass_0.second;
          v5->m_pkNext = 0;
          v5->m_pkPrev = kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
          if ( kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkTail )
          {
            kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v5;
            v2 = kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          }
          else
          {
            v2 = v5;
            kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v5;
          }
          ++*(_DWORD *)&kCloseList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
          kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v5;
        }
        if ( !v4->_Isnil )
        {
          v6 = v4->_Right;
          if ( v6->_Isnil )
          {
            for ( i = v4->_Parent; !i->_Isnil; i = i->_Parent )
            {
              if ( v4 != i->_Right )
                break;
              v4 = i;
            }
            v4 = i;
          }
          else
          {
            v4 = v4->_Right;
            for ( j = v6->_Left; !j->_Isnil; j = j->_Left )
              v4 = j;
          }
        }
      }
      while ( v4 != v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    v9 = v2;
    if ( v2 )
    {
      do
      {
        v10 = v9->m_element;
        v9 = v9->m_pkNext;
        if ( v10 )
          PgWinMgr::CloseWin(&Pgg_kWinMgr, v10);
      }
      while ( v9 );
      v2 = kCloseList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    }
    v11 = v2;
    while ( v11 )
    {
      v12 = v11;
      v11 = v11->m_pkNext;
      kCloseList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,PgWin *> *)&kCloseList,
        v12);
    }
  }
}
// 989480: using guessed type int (__thiscall *PgTList_PgWin _____vftable_)(void *p, char);
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (004CEC60) --------------------------------------------------------
void __thiscall GameFrameWork::DelWebList(GameFrameWork *this, HWND__ *hHandle)
{
  GameFrameWork *v2; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > itResult; // [sp+4h] [bp-4h]@2

  v2 = this;
  if ( GameFrameWork::ms_bSpawnApps == 1 )
  {
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_WebCtrlList,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&itResult,
      (const unsigned int *)&hHandle);
    if ( (std::_Tree_nod<std::_Tmap_traits<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> >,0> >::_Node *)itResult != v2->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead )
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v2->m_WebCtrlList,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&hHandle,
        itResult);
  }
}
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (004CECB0) --------------------------------------------------------
void __thiscall GameFrameWork::NowLoadingText(GameFrameWork *this, int LoadingRate)
{
  Name3 *v2; // eax@1
  int v3; // edi@1
  _iobuf *v4; // eax@4
  _iobuf *v5; // eax@9
  char v6; // kr04_1@10
  char *v7; // eax@19
  void *v8; // esi@19
  void *v9; // eax@20
  NiScreenElementsData *v10; // eax@21
  int v11; // eax@23
  void *v12; // esi@24
  void *v13; // eax@25
  NiScreenElementsData *v14; // eax@26
  int v15; // eax@26
  int v16; // esi@26
  int v17; // eax@27
  NiScreenElementsData *v18; // ecx@29
  NiTexturingProperty *v19; // ebx@29
  float v20; // ST38_4@29
  void *v21; // eax@29
  NiTexturingProperty *v22; // eax@30
  void *v23; // eax@32
  const char *v24; // ecx@33
  NiTexturingProperty *v25; // eax@35
  void *v26; // eax@36
  void *v27; // ebx@36
  void *v28; // eax@39
  void *v29; // ebx@39
  NiRenderer *v30; // ebx@42
  bool v31; // zf@44
  signed int v32; // eax@44
  NiRenderTargetGroup *v33; // eax@50
  NiTexturingProperty *pkProperty; // [sp+24h] [bp-130h]@30
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ProgressBarName; // [sp+28h] [bp-12Ch]@19
  char BGName[256]; // [sp+44h] [bp-110h]@4
  unsigned int v37; // [sp+144h] [bp-10h]@1
  int v38; // [sp+150h] [bp-4h]@19
  int v39; // [sp+154h] [bp+0h]@1

  v37 = (unsigned int)&v39 ^ __security_cookie;
  v2 = User::GetMainCharLoginMapName(&g_kUser);
  v3 = 0;
  if ( MapViewInfoTab::GetByMapName(v2) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(BGName, "%sLoading\\%s.png");
    v4 = fopen(BGName, "r");
    if ( v4 )
    {
      fclose(v4);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      sprintf(BGName, "%sLoading\\%s.tga");
    }
    v5 = fopen(BGName, "r");
    if ( v5 )
      goto LABEL_67;
    v6 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 16))(
           ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
           0);
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(BGName, "%sLoading\\%s.png");
    v5 = fopen(BGName, "r");
    if ( v5 )
    {
LABEL_67:
      fclose(v5);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      sprintf(BGName, "%sLoading\\%s.tga");
    }
    if ( !Folder::m_bInit )
      Folder::Init();
    ProgressBarName.baseclass_0._Myres = 15;
    ProgressBarName.baseclass_0._Mysize = 0;
    ProgressBarName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v7 = Folder::Merge(&Folder::m_acMenu, "loading\\NowLoadingTextColor.tga");
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ProgressBarName, v7, strlen(v7));
    v38 = 0;
    v8 = operator new(0xC4u);
    LOBYTE(v38) = 1;
    if ( v8 )
    {
      v9 = operator new(0x70u);
      LOBYTE(v38) = 2;
      if ( v9 )
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v9, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
      else
        v10 = 0;
      LOBYTE(v38) = 1;
      NiScreenElements::NiScreenElements((NiScreenElements *)v8, v10);
      v3 = v11;
    }
    LOBYTE(v38) = 0;
    v12 = operator new(0xC4u);
    LOBYTE(v38) = 3;
    if ( v12 )
    {
      v13 = operator new(0x70u);
      LOBYTE(v38) = 4;
      if ( v13 )
      {
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v13, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
        LOBYTE(v38) = 3;
        NiScreenElements::NiScreenElements((NiScreenElements *)v12, v14);
        v16 = v15;
      }
      else
      {
        LOBYTE(v38) = 3;
        NiScreenElements::NiScreenElements((NiScreenElements *)v12, 0);
        v16 = v17;
      }
    }
    else
    {
      v16 = 0;
    }
    v18 = *(NiScreenElementsData **)(v3 + 184);
    LOBYTE(v38) = 0;
    NiScreenElementsData::Insert(v18, 4u, 0, 0);
    v19 = 0;
    NiScreenElementsData::Insert(*(NiScreenElementsData **)(v16 + 184), 4u, 0, 0);
    NiScreenElementsData::SetRectangle(*(NiScreenElementsData **)(v3 + 184), 0, 0.0, 0.0, 1.0, 1.0);
    v20 = (double)LoadingRate / 100.0 * 0.5 + 0.5;
    NiScreenElementsData::SetRectangle(*(NiScreenElementsData **)(v16 + 184), 0, 0.0, 0.87900001, v20, 0.121);
    NiScreenElementsData::UpdateBound(*(NiScreenElementsData **)(v3 + 184));
    NiScreenElementsData::UpdateBound(*(NiScreenElementsData **)(v16 + 184));
    NiScreenElementsData::SetColors(*(NiScreenElementsData **)(v3 + 184), 0, &NiColorA::WHITE);
    NiScreenElementsData::SetColors(*(NiScreenElementsData **)(v16 + 184), 0, &NiColorA::WHITE);
    NiScreenElementsData::SetTextures(*(NiScreenElementsData **)(v3 + 184), 0, 0, 0.0, 0.0, 1.0, 1.0);
    NiScreenElementsData::SetTextures(*(NiScreenElementsData **)(v16 + 184), 0, 0, 0.0, 0.0, v20, 1.0);
    v21 = operator new(0x44u);
    LOBYTE(v38) = 5;
    if ( v21 )
    {
      NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v21, BGName);
      pkProperty = v22;
    }
    else
    {
      pkProperty = 0;
    }
    LOBYTE(v38) = 0;
    NiTexturingProperty::SetBaseClampMode(pkProperty, 0);
    v23 = operator new(0x44u);
    LOBYTE(v38) = 6;
    if ( v23 )
    {
      v24 = *(const char **)&ProgressBarName;
      if ( ProgressBarName.baseclass_0._Myres < 0x10 )
        v24 = (const char *)&ProgressBarName;
      NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v23, v24);
      v19 = v25;
    }
    LOBYTE(v38) = 0;
    NiTexturingProperty::SetBaseClampMode(v19, 0);
    NiAVObject::AttachProperty((NiAVObject *)v3, &pkProperty->baseclass_0);
    NiAVObject::AttachProperty((NiAVObject *)v16, &v19->baseclass_0);
    v26 = operator new(0x28u);
    v27 = v26;
    LOBYTE(v38) = 7;
    if ( v26 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v26);
      *(_DWORD *)v27 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v27 + 14) = 0;
      *((_DWORD *)v27 + 8) = 0;
      *((_DWORD *)v27 + 9) = 1;
    }
    else
    {
      v27 = 0;
    }
    LOBYTE(v38) = 0;
    *((_DWORD *)v27 + 8) = 1;
    *((_DWORD *)v27 + 9) = 0;
    NiAVObject::AttachProperty((NiAVObject *)v3, (NiProperty *)v27);
    NiAVObject::AttachProperty((NiAVObject *)v16, (NiProperty *)v27);
    v28 = operator new(0x20u);
    v29 = v28;
    LOBYTE(v38) = 8;
    if ( v28 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v28);
      *(_DWORD *)v29 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v29 + 14) = 236;
      *((_BYTE *)v29 + 30) = 0;
    }
    else
    {
      v29 = 0;
    }
    *((_WORD *)v29 + 14) &= 0xFFFEu;
    LOBYTE(v38) = 0;
    NiAVObject::AttachProperty((NiAVObject *)v3, (NiProperty *)v29);
    NiAVObject::AttachProperty((NiAVObject *)v16, (NiProperty *)v29);
    NiAVObject::UpdateProperties((NiAVObject *)v3);
    NiAVObject::Update((NiAVObject *)v3, 0.0, 1);
    NiAVObject::UpdateProperties((NiAVObject *)v16);
    NiAVObject::Update((NiAVObject *)v16, 0.0, 1);
    v30 = NiRenderer::ms_pkRenderer;
    if ( NiRenderer::ms_pkRenderer->m_eFrameState || NiRenderer::ms_pkRenderer->m_eOffScreenFrameState )
    {
      v32 = 1;
    }
    else
    {
      v31 = ((int (__thiscall *)(NiRenderer *))NiRenderer::ms_pkRenderer->baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)(NiRenderer::ms_pkRenderer) == 0;
      v32 = 1;
      if ( !v31 )
        v30->m_eFrameState = 1;
    }
    if ( (v30->m_eFrameState == v32 || v30->m_eOffScreenFrameState == v32) && !v30->m_bRenderTargetGroupActive )
    {
      v33 = (NiRenderTargetGroup *)((int (__thiscall *)(NiRenderer *))v30->baseclass_0.baseclass_0.vfptr[26].__vecDelDtor)(v30);
      NiRenderer::BeginUsingRenderTargetGroup(v30, v33, 7u);
      v32 = 1;
    }
    if ( (v30->m_eFrameState == v32 || v30->m_eOffScreenFrameState == v32) && v30->m_bRenderTargetGroupActive == 1 )
      v30->baseclass_0.baseclass_0.vfptr[71].__vecDelDtor((NiRefObject *)v30, 0);
    NiScreenElements::Draw((NiScreenElements *)v3, v30);
    NiScreenElements::Draw((NiScreenElements *)v16, v30);
    NiRenderer::EndUsingRenderTargetGroup(v30);
    if ( v30->m_eFrameState == 1
      && !v30->m_eOffScreenFrameState
      && (unsigned __int8)((int (__thiscall *)(NiRenderer *))v30->baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)(v30) )
      v30->m_eFrameState = 2;
    if ( v30->m_eFrameState == 2
      && !v30->m_eOffScreenFrameState
      && (unsigned __int8)((int (__thiscall *)(NiRenderer *))v30->baseclass_0.baseclass_0.vfptr[68].__vecDelDtor)(v30) )
    {
      ++v30->m_uiFrameID;
      v30->m_eFrameState = 0;
    }
    (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    (**(void (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
    if ( ProgressBarName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&ProgressBarName);
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (004CF320) --------------------------------------------------------
void __thiscall GameFrameWork::UpdateAskServerInform(GameFrameWork *this, float fTime)
{
  GameFrameWork::AskInform *v2; // eax@1
  GameFrameWork::AskInform *v3; // edi@2
  GameFrameWork::AskInform *v4; // esi@4
  int v5; // eax@4
  GameFrameWork::AskInform *v6; // edx@5

  v2 = *(GameFrameWork::AskInform **)&this->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 != this->m_vecSentPacket.baseclass_0._Mylast )
  {
    v3 = *(GameFrameWork::AskInform **)&this->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v2 != this->m_vecSentPacket.baseclass_0._Mylast )
    {
      do
      {
        if ( v3->m_fTime + 1.0 >= fTime )
        {
          ++v3;
        }
        else
        {
          v4 = this->m_vecSentPacket.baseclass_0._Mylast;
          v5 = (int)&v3[1];
          if ( &v3[1] != v4 )
          {
            v6 = v3;
            do
            {
              LODWORD(v6->m_fTime) = *(_DWORD *)v5;
              *(_DWORD *)&v6->m_CharhWnd = *(_DWORD *)(v5 + 4);
              v5 += 8;
              ++v6;
            }
            while ( (GameFrameWork::AskInform *)v5 != v4 );
          }
          --this->m_vecSentPacket.baseclass_0._Mylast;
        }
      }
      while ( v3 != this->m_vecSentPacket.baseclass_0._Mylast );
    }
  }
}

//----- (004CF3A0) --------------------------------------------------------
void __thiscall GameFrameWork::ResetAskServerInform(GameFrameWork *this)
{
  GameFrameWork::AskInform *v1; // eax@1
  GameFrameWork::AskInform *v2; // edi@2
  GameFrameWork::AskInform *v3; // esi@3
  int v4; // eax@3
  GameFrameWork::AskInform *v5; // edx@4

  v1 = *(GameFrameWork::AskInform **)&this->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v1 != this->m_vecSentPacket.baseclass_0._Mylast )
  {
    v2 = *(GameFrameWork::AskInform **)&this->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v1 != this->m_vecSentPacket.baseclass_0._Mylast )
    {
      do
      {
        v3 = this->m_vecSentPacket.baseclass_0._Mylast;
        v4 = (int)&v2[1];
        if ( &v2[1] != v3 )
        {
          v5 = v2;
          do
          {
            LODWORD(v5->m_fTime) = *(_DWORD *)v4;
            *(_DWORD *)&v5->m_CharhWnd = *(_DWORD *)(v4 + 4);
            v4 += 8;
            ++v5;
          }
          while ( (GameFrameWork::AskInform *)v4 != v3 );
        }
        --this->m_vecSentPacket.baseclass_0._Mylast;
      }
      while ( v2 != this->m_vecSentPacket.baseclass_0._Mylast );
    }
  }
}

//----- (004CF400) --------------------------------------------------------
void __thiscall GameFrameWork::OpenCard(GameFrameWork *this)
{
  GameFrameWork *v1; // edi@1
  InventoryWin *v2; // eax@2
  unsigned int v3; // esi@2
  ItemIcon *v4; // eax@3
  Item *v5; // eax@4
  ItemUseTask *v6; // ebx@7
  InvWin *v7; // esi@10

  v1 = this;
  if ( this->m_pkInventoryWin )
  {
    v2 = this->m_pkInventoryWin;
    v3 = v2->m_uiCloseCardInvIndex;
    if ( v3 < 0xC0 && (v4 = (ItemIcon *)v2->m_apkInvWin[v3]) != 0 )
      v5 = ItemIcon::GetItem(v4);
    else
      v5 = 0;
    if ( v5 == v1->m_pkInventoryWin->m_pkCloseCardItem )
    {
      v6 = ISingletonTask<ItemUseTask>::Run();
      ItemUseTask::SetInventoryIndex(v6, v3);
      v6->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(&v6->baseclass_0.baseclass_0.baseclass_8, v1);
    }
    else
    {
      CollectCardWin::ResetEffect(v1->m_pkCollectCardWin[0]);
      GameFrameWork::OpenCollectCardWin(v1, 0, 0, 0, 0, 0);
    }
    if ( v3 < 0xC0 )
    {
      v7 = v1->m_pkInventoryWin->m_apkInvWin[v3];
      if ( v7 )
        InvWin::SetLock(v7, 0);
    }
  }
}

//----- (004CF4B0) --------------------------------------------------------
void __thiscall GameFrameWork::AddWebList(GameFrameWork *this, std::pair<HWND__ *,PgWin *> kElement)
{
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v2; // esi@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v3; // eax@2
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> result; // [sp+0h] [bp-8h]@2

  if ( GameFrameWork::ms_bSpawnApps == 1 )
  {
    v2 = (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_WebCtrlList;
    v3 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&this->m_WebCtrlList,
           (std::pair<int const ,int> *)&kElement);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      v2,
      &result,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v3,
      0);
  }
}
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (004CF4F0) --------------------------------------------------------
bool __thiscall GameFrameWork::AddAskServerInform(GameFrameWork *this, float fTime, unsigned __int16 hnd, NETCOMMAND *netCmd)
{
  int v4; // edx@1
  char *v5; // esi@1
  GameFrameWork::AskInform *v6; // edi@1
  unsigned __int16 v7; // cx@3
  unsigned __int16 v8; // ax@7
  unsigned int v9; // eax@7
  int v10; // edx@8
  int v11; // ecx@9
  signed int v12; // edi@9
  int v13; // eax@10
  bool result; // al@12
  int v15; // eax@13
  int v16; // ecx@13
  unsigned int v17; // ecx@15
  int v18; // eax@20
  int v19; // ecx@21
  int v20; // ecx@22
  int v21; // eax@23
  int v22; // eax@25
  int v23; // ecx@25
  unsigned int v24; // ecx@27
  int v25; // eax@32
  int v26; // ecx@33
  GameFrameWork::AskInform AddElement; // [sp+0h] [bp-8h]@7

  v4 = *(_DWORD *)&this->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (char *)&this->m_vecSentPacket;
  v6 = this->m_vecSentPacket.baseclass_0._Mylast;
  if ( (GameFrameWork::AskInform *)v4 == v6 )
  {
LABEL_7:
    AddElement.m_fTime = fTime;
    v8 = netCmd->protocol;
    AddElement.m_CharhWnd = hnd;
    AddElement.m_Packet.protocol = v8;
    v9 = *((_DWORD *)v5 + 1);
    if ( (unsigned int)&AddElement >= v9 || (v10 = *(_DWORD *)v5, *(_DWORD *)v5 > (unsigned int)&AddElement) )
    {
      v20 = *((_DWORD *)v5 + 2);
      if ( v9 == v20 )
      {
        v21 = (signed int)(v9 - *(_DWORD *)v5) >> 3;
        if ( (unsigned int)v21 > 0x1FFFFFFE )
          std::_Xlength_error("vector<T> too long");
        v22 = v21 + 1;
        v23 = (v20 - *(_DWORD *)v5) >> 3;
        if ( v22 > (unsigned int)v23 )
        {
          if ( 536870911 - ((unsigned int)v23 >> 1) >= v23 )
            v24 = ((unsigned int)v23 >> 1) + v23;
          else
            v24 = 0;
          if ( v24 < v22 )
            v24 = v22;
          std::vector<NiPoint2_std::allocator<NiPoint2>>::reserve(
            (std::vector<NiPoint2,std::allocator<NiPoint2> > *)v5,
            v24);
        }
      }
      v25 = *((_DWORD *)v5 + 1);
      if ( v25 )
      {
        v26 = *(_DWORD *)&AddElement.m_CharhWnd;
        *(_DWORD *)v25 = (_DWORD)AddElement.m_fTime;
        *(_DWORD *)(v25 + 4) = v26;
      }
    }
    else
    {
      v11 = *((_DWORD *)v5 + 2);
      v12 = (signed int)((char *)&AddElement - v10) >> 3;
      if ( v9 == v11 )
      {
        v13 = (signed int)(v9 - v10) >> 3;
        if ( (unsigned int)v13 > 0x1FFFFFFE )
          std::_Xlength_error("vector<T> too long");
        v15 = v13 + 1;
        v16 = (v11 - v10) >> 3;
        if ( v15 > (unsigned int)v16 )
        {
          if ( 536870911 - ((unsigned int)v16 >> 1) >= v16 )
            v17 = ((unsigned int)v16 >> 1) + v16;
          else
            v17 = 0;
          if ( v17 < v15 )
            v17 = v15;
          std::vector<NiPoint2_std::allocator<NiPoint2>>::reserve(
            (std::vector<NiPoint2,std::allocator<NiPoint2> > *)v5,
            v17);
        }
      }
      v18 = *((_DWORD *)v5 + 1);
      if ( v18 )
      {
        v19 = *(_DWORD *)v5;
        *(_DWORD *)v18 = *(_DWORD *)(*(_DWORD *)v5 + 8 * v12);
        *(_DWORD *)(v18 + 4) = *(_DWORD *)(v19 + 8 * v12 + 4);
        *((_DWORD *)v5 + 1) += 8;
        return 1;
      }
    }
    *((_DWORD *)v5 + 1) += 8;
    result = 1;
  }
  else
  {
    while ( 1 )
    {
      if ( hnd == *(_WORD *)(v4 + 4) )
      {
        v7 = *(_WORD *)(v4 + 6);
        if ( !((v7 ^ netCmd->protocol) & 0xFC00) )
        {
          if ( !((v7 ^ netCmd->protocol) & 0x3FF) && *(float *)v4 + 1.0 > fTime )
            break;
        }
      }
      v4 += 8;
      if ( (GameFrameWork::AskInform *)v4 == v6 )
        goto LABEL_7;
    }
    result = 0;
  }
  return result;
}

//----- (004CF680) --------------------------------------------------------
void __thiscall GameFrameWork::RegisterCard(GameFrameWork *this, unsigned int uiSlot, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial)
{
  GameFrameWork *v5; // edi@1
  CollectCardWin *v6; // esi@1
  char *v7; // eax@4
  bool v8; // cf@4
  CollectCardWin *v9; // esi@5
  int v10; // ST28_4@6
  CollectWin *v11; // eax@7
  unsigned int v12; // ecx@8
  unsigned int v13; // edx@9
  char *v14; // eax@12
  char *v15; // ecx@12
  int v16; // esi@12
  char v17; // dl@13
  char *v18; // eax@16
  MsgBox *v19; // esi@18
  unsigned int v20; // eax@24
  char v21; // dl@27
  char v22; // dl@31
  char v23; // dl@34
  GameFrameWork *pkFrameWork; // [sp+0h] [bp-5Ch]@1
  int iYPos; // [sp+4h] [bp-58h]@1
  PgMsg::Frame kCancelMsg; // [sp+8h] [bp-54h]@19
  PgMsg::Frame pkFrameMsg; // [sp+1Ch] [bp-40h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kMsgText; // [sp+30h] [bp-2Ch]@1
  unsigned int v29; // [sp+4Ch] [bp-10h]@1
  int v30; // [sp+58h] [bp-4h]@1
  int v31; // [sp+5Ch] [bp+0h]@1

  v29 = (unsigned int)&v31 ^ __security_cookie;
  v5 = this;
  pkFrameWork = this;
  iYPos = 0;
  kMsgText.baseclass_0._Myres = 15;
  kMsgText.baseclass_0._Mysize = 0;
  kMsgText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = this->m_pkCollectCardWin[0];
  v30 = 0;
  if ( v6 && (CollectCardWin::IsPlay(v6) || CollectCardWin::IsOpen(v6)) )
  {
    v7 = TextData2::Get(0xC2C6B60Fu);
    GameFrameWork::AddSysMsg(v5, v7);
    v8 = kMsgText.baseclass_0._Myres < 0x10;
  }
  else
  {
    GameFrameWork::OpenCollectCardWin(v5, 0, 0, 0, 0, 0);
    GameFrameWork::OpenCollectCardWin(pkFrameWork, 1, uiCardID, uiStar, uiSerial, 0);
    v9 = pkFrameWork->m_pkCollectCardWin[0];
    if ( v9 )
    {
      v10 = ((int (__thiscall *)(CollectCardWin *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v9);
      iYPos = ((int (__thiscall *)(CollectCardWin *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v9)
            + v10;
    }
    v11 = pkFrameWork->m_pkCollectWin;
    if ( v11 )
    {
      std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>(
        (std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *)&pkFrameMsg.m_uiDumy[1],
        &v11->m_kCardInfos);
      LOBYTE(v30) = 1;
      v12 = 0;
      if ( !((signed int)(pkFrameMsg.m_uiFrameMsg - pkFrameMsg.m_uiDumy[1]) / 20) )
        goto LABEL_12;
      v13 = pkFrameMsg.m_uiDumy[1] + 4;
      while ( *(_DWORD *)v13 != uiCardID )
      {
        ++v12;
        v13 += 20;
        if ( v12 >= (signed int)(pkFrameMsg.m_uiFrameMsg - pkFrameMsg.m_uiDumy[1]) / 20 )
          goto LABEL_12;
      }
      v20 = *(_DWORD *)(pkFrameMsg.m_uiDumy[1] + 20 * v12 + 8);
      if ( *(_DWORD *)(pkFrameMsg.m_uiDumy[1] + 20 * v12 + 16) > 0 )
      {
        if ( v20 <= uiStar )
        {
          if ( v20 == uiStar )
          {
            v14 = TextData2::Get((unsigned int)((char *)loc_51686F + 1));
            v15 = v14;
            v16 = (int)(v14 + 1);
            do
              v22 = *v15++;
            while ( v22 );
          }
          else
          {
            v14 = TextData2::Get(0x182F3381u);
            v15 = v14;
            v16 = (int)(v14 + 1);
            do
              v23 = *v15++;
            while ( v23 );
          }
        }
        else
        {
          v14 = TextData2::Get((unsigned int)loc_4B7C71);
          v15 = v14;
          v16 = (int)(v14 + 1);
          do
            v21 = *v15++;
          while ( v21 );
        }
      }
      else
      {
LABEL_12:
        v14 = TextData2::Get(0xC644301Eu);
        v15 = v14;
        v16 = (int)(v14 + 1);
        do
          v17 = *v15++;
        while ( v17 );
      }
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &kMsgText,
        v14,
        (unsigned int)&v15[-v16]);
      LOBYTE(v30) = 0;
      if ( pkFrameMsg.m_uiDumy[1] )
        operator delete((void *)pkFrameMsg.m_uiDumy[1]);
    }
    v18 = *(char **)&kMsgText;
    if ( kMsgText.baseclass_0._Myres < 0x10 )
      v18 = (char *)&kMsgText;
    v19 = MsgBox::Modal(MSGBOX_OKCANCEL, v18);
    if ( v19 )
    {
      pkFrameMsg.m_uiFrameWParam = uiSlot;
      pkFrameMsg.m_uiFrameMsg = 268;
      kCancelMsg.m_uiFrameMsg = 269;
      MsgBox::SetFrameWorkMsgOnClose(v19, &pkFrameWork->baseclass_0, &pkFrameMsg, &kCancelMsg);
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
        (NiRefObject *)v19,
        iYPos);
    }
    v8 = kMsgText.baseclass_0._Myres < 0x10;
  }
  if ( !v8 )
    operator delete(*(void **)&kMsgText);
}
// 4B7C71: using guessed type int __thiscall loc_4B7C71(GameFrameWork *this, int iRevBytes, int pvData);
// 51686F: using guessed type int();
// A85C00: using guessed type int __security_cookie;

//----- (004CF8F0) --------------------------------------------------------
void __thiscall GameFrameWork::_GameFrameWork(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  void *v2; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // ST0C_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // ST08_4@3
  CameraEffect *v5; // edi@5
  CBlindEffect *v6; // edi@9
  void **v7; // ecx@13
  void *v8; // eax@13
  void *v9; // edi@14
  NiNode *v10; // edi@17
  NiNode *v11; // edi@21
  NiNode *v12; // edi@25
  NiNode *v13; // edi@29
  Net *v14; // edi@33
  Net *v15; // edi@37
  MsgBox *v16; // edi@41
  int v17; // edi@45
  NiTListItem<PgWin *> *v18; // ebx@45
  NiTListItem<PgWin *> *v19; // eax@45
  NiTListItem<PgWin *> *v20; // ST0C_4@46
  int v21; // edi@48
  NiTListItem<PgWin *> *v22; // ebx@48
  NiTListItem<PgWin *> *v23; // eax@48
  NiTListItem<PgWin *> *v24; // ST0C_4@49
  MsgBox *v25; // edi@51
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v26; // ST0C_4@55
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v27; // ST08_4@55
  KeyMap *v28; // edi@55
  void *v29; // ST0C_4@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@3
  std::map<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> > > *v31; // [sp+4h] [bp-14h]@3
  GameFrameWork *v32; // [sp+8h] [bp-10h]@1
  int v33; // [sp+14h] [bp-4h]@1

  v1 = this;
  v32 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&GameFrameWork::_vftable_;
  v33 = 21;
  MachineOpt::RemoveAll();
  v2 = v1->m_pkPartyWinInterface;
  if ( v2 )
  {
    PartyWinInterface::_PartyWinInterface(v1->m_pkPartyWinInterface);
    operator delete(v2);
  }
  v31 = &v1->m_WebCtrlList;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v33) = 22;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_WebCtrlList,
    &result,
    v4,
    v3);
  operator delete(v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead);
  if ( *(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kGuideViewList.baseclass_0._Mylast = 0;
  v1->m_kGuideViewList.baseclass_0._Myend = 0;
  v5 = v1->m_spCamEffect.m_pObject;
  LOBYTE(v33) = 18;
  if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
    v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spBlindEffect.m_pObject;
  LOBYTE(v33) = 17;
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
    v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  LOBYTE(v33) = 16;
  _eh_vector_destructor_iterator_(
    v1->m_CharList,
    0x14u,
    6,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v7 = *(void ***)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *v7;
  *v7 = v7;
  *(_DWORD *)(*(_DWORD *)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0._Mysize = 0;
  if ( v8 != *(void **)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v9 = *(void **)v8;
      operator delete(v8);
      v8 = v9;
    }
    while ( v9 != *(void **)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::clear(&v1->m_kSmartWhisper.m_kRecentWhisperList);
  operator delete(*(void **)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  LOBYTE(v33) = 13;
  ChatCommandList::_ChatCommandList(&v1->m_kChatComList);
  if ( *(_DWORD *)&v1->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSentPacket.baseclass_0._Mylast = 0;
  v1->m_vecSentPacket.baseclass_0._Myend = 0;
  v10 = v1->m_pOXEffectX.m_pObject;
  LOBYTE(v33) = 11;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_pOXEffectO.m_pObject;
  LOBYTE(v33) = 10;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v12 = v1->m_pEffect2.m_pObject;
  LOBYTE(v33) = 9;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  v13 = v1->m_pEffect1.m_pObject;
  LOBYTE(v33) = 8;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
  v14 = v1->m_spWorldMgrNet.m_pObject;
  LOBYTE(v33) = 7;
  if ( v14 && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.m_uiRefCount) && v14 )
    v14->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
  v15 = v1->m_spZoneNet.m_pObject;
  LOBYTE(v33) = 6;
  if ( v15 && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.m_uiRefCount) && v15 )
    v15->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
  v16 = v1->m_pkRaidReplyWin.m_pObject;
  LOBYTE(v33) = 5;
  if ( v16
    && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v16 )
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v16,
      1u);
  v17 = (int)&v1->m_kCanHideWinList;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_kCanHideWinList;
  v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  v18 = v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead;
  v19 = 0;
  LOBYTE(v33) = 23;
  if ( v18 )
  {
    do
    {
      v20 = v18;
      v18 = v18->m_pkNext;
      (*(void (__thiscall **)(NiTList<PgWin *> *, NiTListItem<PgWin *> *))(*(_DWORD *)v17 + 8))(
        &v1->m_kCanHideWinList,
        v20);
    }
    while ( v18 );
    v19 = 0;
  }
  *(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = v19;
  v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = v19;
  v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = v19;
  *(_DWORD *)v17 = &NiTListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  v21 = (int)&v1->m_kAutoCloseWinList;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_kAutoCloseWinList;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTPointerListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  v22 = v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead;
  v23 = 0;
  LOBYTE(v33) = 24;
  if ( v22 )
  {
    do
    {
      v24 = v22;
      v22 = v22->m_pkNext;
      (*(void (__thiscall **)(NiTList<PgWin *> *, NiTListItem<PgWin *> *))(*(_DWORD *)v21 + 8))(
        &v1->m_kAutoCloseWinList,
        v24);
    }
    while ( v22 );
    v23 = 0;
  }
  *(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = v23;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = v23;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = v23;
  *(_DWORD *)v21 = &NiTListBase<DFALL<PgWin__>_PgWin__>::_vftable_;
  v25 = v1->m_spUserTradeMsgBox.m_pObject;
  LOBYTE(v33) = 2;
  if ( (NiTListItem<PgWin *> *)v25 != v23
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v25,
      1u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_setEscapeHide;
  v26 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v27 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v33) = 25;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_setEscapeHide,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v31,
    v27,
    v26);
  operator delete(v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v28 = v1->m_spKeyMap.m_pObject;
  LOBYTE(v33) = 0;
  if ( v28 && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.m_uiRefCount) && v28 )
    v28->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
  v29 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v29);
}
// 6A6820: using guessed type int MachineOpt__RemoveAll(void);
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 98BF24: using guessed type int (__thiscall *NiTListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);
// 98BF5C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PgWin ___PgWin _____vftable_)(void *p, char);
// 98C9CC: using guessed type int (__stdcall *GameFrameWork___vftable_)(int uiFlags);

//----- (004CFCF0) --------------------------------------------------------
void __thiscall GameFrameWork::GetDropItemByArea(GameFrameWork *this, GameFrameWork::AutoPickType eType)
{
  unsigned int v2; // ebx@1
  std::_Vector_iterator<std::_Vector_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > > v3; // esi@1
  int v4; // edi@1
  int v5; // eax@2
  int v6; // eax@8
  NiPointer<NiAVObject> *v7; // esi@8
  DropItem *v8; // eax@9
  NiPointer<NiAVObject> *v9; // esi@11
  unsigned int v10; // ebx@17
  NiAVObject *v11; // esi@18
  int v12; // edi@18
  DropItem *v13; // eax@18
  DropItem **v14; // edx@21
  signed int v15; // esi@23
  signed int v16; // eax@24
  int v17; // eax@25
  signed int v18; // ecx@25
  unsigned int v19; // ecx@27
  signed int v20; // eax@35
  int v21; // eax@36
  signed int v22; // ecx@36
  unsigned int v23; // ecx@38
  DropItem **v24; // edx@48
  signed int v25; // eax@48
  signed int v26; // ecx@48
  int v27; // eax@51
  AbStateInfecteeVtbl *v28; // edx@51
  NiPoint3 *v29; // eax@51
  const void *v30; // eax@51
  NiPointer<NiAVObject> *v31; // eax@61
  NiPointer<NiAVObject> *v32; // edi@61
  NiPointer<NiAVObject> v33; // esi@62
  NiPointer<NiAVObject> *v34; // edi@72
  NiPointer<NiAVObject> v35; // esi@73
  DropItemSorter v36; // [sp-54h] [bp-DCh]@51
  NiPoint3 *v37; // [sp-14h] [bp-9Ch]@51
  DropItemSorter thisa; // [sp+0h] [bp-88h]@51
  std::vector<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > m_setDropItem; // [sp+40h] [bp-48h]@1
  std::vector<DropItem *,std::allocator<DropItem *> > m_vecNearDropItem; // [sp+50h] [bp-38h]@17
  DropItem **_Mid; // [sp+60h] [bp-28h]@20
  float v42; // [sp+64h] [bp-24h]@20
  float v43; // [sp+68h] [bp-20h]@20
  GameFrameWork *v44; // [sp+6Ch] [bp-1Ch]@1
  NiPointer<NiAVObject> *iterCur; // [sp+70h] [bp-18h]@11
  unsigned int pkItem; // [sp+74h] [bp-14h]@6
  char bNearHaveItem; // [sp+7Bh] [bp-Dh]@17
  int v48; // [sp+84h] [bp-4h]@1
  NiPointer<NiAVObject> *eTypea; // [sp+90h] [bp+8h]@61

  v44 = this;
  v2 = 0;
  v3 = 0;
  *(_DWORD *)&m_setDropItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  m_setDropItem.baseclass_0._Mylast = 0;
  m_setDropItem.baseclass_0._Myend = 0;
  v4 = dword_AA51A4;
  v48 = 0;
  if ( dword_AA51A4 )
  {
    v5 = (*(int (__thiscall **)(int))(*(_DWORD *)dword_AA51A4 + 4))(dword_AA51A4);
    if ( v5 )
    {
      while ( (NiRTTI *)v5 != &NiNode::m_RTTI )
      {
        v5 = *(_DWORD *)(v5 + 4);
        if ( !v5 )
          goto LABEL_17;
      }
      pkItem = *(_DWORD *)(v4 + 188);
      if ( pkItem )
      {
        do
        {
          if ( *(_DWORD *)(v4 + 188) > v2 )
          {
            v6 = *(_DWORD *)(v4 + 180);
            v7 = *(NiPointer<NiAVObject> **)(v6 + 4 * v2);
            if ( v7 )
            {
              v8 = DropItemMgr::GetDropItemByNodePtr(&g_kDropItemMgr, *(NiNode **)(v6 + 4 * v2));
              if ( v8 )
              {
                if ( v8->m_bPickable )
                {
                  iterCur = v7;
                  InterlockedIncrement((volatile LONG *)&v7[1]);
                  LOBYTE(v48) = 1;
                  std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
                    (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)&m_setDropItem,
                    (NiPointer<PgSprData> *)&iterCur);
                  v9 = iterCur;
                  LOBYTE(v48) = 0;
                  if ( iterCur )
                  {
                    if ( !InterlockedDecrement((volatile LONG *)&iterCur[1]) )
                      ((void (__thiscall *)(NiPointer<NiAVObject> *, signed int))v9->m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr)(
                        v9,
                        1);
                  }
                }
              }
            }
          }
          ++v2;
        }
        while ( v2 < pkItem );
        v3 = *(std::_Vector_iterator<std::_Vector_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > > *)&m_setDropItem;
      }
      v2 = 0;
    }
  }
LABEL_17:
  iterCur = (NiPointer<NiAVObject> *)v3;
  *(_DWORD *)&m_vecNearDropItem.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  m_vecNearDropItem.baseclass_0._Mylast = (DropItem **)v2;
  m_vecNearDropItem.baseclass_0._Myend = (DropItem **)v2;
  LOBYTE(v48) = 2;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&m_vecNearDropItem,
    v2);
  v10 = *(_DWORD *)&m_vecNearDropItem;
  bNearHaveItem = 0;
  if ( (NiPointer<NiAVObject> *)v3 != m_setDropItem.baseclass_0._Mylast )
  {
    do
    {
      v11 = iterCur->m_pObject;
      v12 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      v13 = DropItemMgr::GetDropItemByNodePtr(&g_kDropItemMgr, (NiNode *)v11);
      pkItem = (unsigned int)v13;
      if ( v13 )
      {
        if ( v13->m_bPickable )
        {
          v43 = *(float *)v12 - v11->m_kLocal.m_Translate.x;
          v42 = *(float *)(v12 + 4) - v11->m_kLocal.m_Translate.y;
          *(float *)&_Mid = *(float *)(v12 + 8) - v11->m_kLocal.m_Translate.z;
          *(float *)&_Mid = v43 * v43 + v42 * v42 + *(float *)&_Mid * *(float *)&_Mid;
          *(float *)&_Mid = sqrt(*(float *)&_Mid);
          if ( *(float *)&_Mid <= 100.0 )
          {
            v14 = m_vecNearDropItem.baseclass_0._Mylast;
            bNearHaveItem = 1;
            if ( (DropItem **)&pkItem >= m_vecNearDropItem.baseclass_0._Mylast || v10 > (unsigned int)&pkItem )
            {
              if ( m_vecNearDropItem.baseclass_0._Mylast == m_vecNearDropItem.baseclass_0._Myend )
              {
                v20 = (signed int)((char *)m_vecNearDropItem.baseclass_0._Mylast - v10) >> 2;
                if ( (unsigned int)v20 > 0x3FFFFFFE )
LABEL_55:
                  std::_Xlength_error("vector<T> too long");
                v21 = v20 + 1;
                v22 = (signed int)((char *)m_vecNearDropItem.baseclass_0._Myend - v10) >> 2;
                if ( v21 > (unsigned int)v22 )
                {
                  if ( 1073741823 - ((unsigned int)v22 >> 1) >= v22 )
                    v23 = ((unsigned int)v22 >> 1) + v22;
                  else
                    v23 = 0;
                  if ( v23 < v21 )
                    v23 = v21;
                  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_vecNearDropItem,
                    v23);
                  v10 = *(_DWORD *)&m_vecNearDropItem;
                  v14 = m_vecNearDropItem.baseclass_0._Mylast;
                }
              }
              if ( v14 )
                *v14 = (DropItem *)pkItem;
            }
            else
            {
              v15 = (signed int)((char *)&pkItem - v10) >> 2;
              if ( m_vecNearDropItem.baseclass_0._Mylast == m_vecNearDropItem.baseclass_0._Myend )
              {
                v16 = (signed int)((char *)m_vecNearDropItem.baseclass_0._Mylast - v10) >> 2;
                if ( (unsigned int)v16 > 0x3FFFFFFE )
                  goto LABEL_55;
                v17 = v16 + 1;
                v18 = (signed int)((char *)m_vecNearDropItem.baseclass_0._Myend - v10) >> 2;
                if ( v17 > (unsigned int)v18 )
                {
                  if ( 1073741823 - ((unsigned int)v18 >> 1) >= v18 )
                    v19 = ((unsigned int)v18 >> 1) + v18;
                  else
                    v19 = 0;
                  if ( v19 < v17 )
                    v19 = v17;
                  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_vecNearDropItem,
                    v19);
                  v10 = *(_DWORD *)&m_vecNearDropItem;
                  v14 = m_vecNearDropItem.baseclass_0._Mylast;
                }
              }
              if ( v14 )
                *v14 = *(DropItem **)(v10 + 4 * v15);
            }
            m_vecNearDropItem.baseclass_0._Mylast = v14 + 1;
          }
        }
      }
      ++iterCur;
    }
    while ( iterCur != m_setDropItem.baseclass_0._Mylast );
    v3 = *(std::_Vector_iterator<std::_Vector_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > > *)&m_setDropItem;
  }
  v24 = m_vecNearDropItem.baseclass_0._Mylast;
  v25 = (signed int)((char *)m_vecNearDropItem.baseclass_0._Mylast - v10) >> 2;
  v26 = 1;
  iterCur = (NiPointer<NiAVObject> *)v25;
  if ( v25 )
  {
    if ( v25 < 1 )
      v26 = (signed int)((char *)m_vecNearDropItem.baseclass_0._Mylast - v10) >> 2;
    _Mid = (DropItem **)(v10 + 4 * v26);
    v27 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
    v28 = g_pkMainChar->baseclass_0.vfptr;
    v37 = (NiPoint3 *)v27;
    v29 = (NiPoint3 *)((int (*)(void))v28[6].Deaffect)();
    DropItemSorter::DropItemSorter(&thisa, v29, v37);
    memcpy(&v36, v30, sizeof(v36));
    std::_Partial_sort<DropItem_____DropItem___DropItemSorter>(
      (DropItem **)v10,
      _Mid,
      m_vecNearDropItem.baseclass_0._Mylast,
      COERCE_DROPITEMSORTER(v36.m_pos3Dir.x),
      0);
    if ( bNearHaveItem )
    {
      if ( eType )
      {
        if ( eType == 1 )
          GameFrameWork::OnAutoPickByMiniMon(
            v44,
            (std::_Vector_iterator<std::_Vector_val<DropItem *,std::allocator<DropItem *> > >)v10,
            (std::_Vector_iterator<std::_Vector_val<DropItem *,std::allocator<DropItem *> > >)m_vecNearDropItem.baseclass_0._Mylast);
      }
      else
      {
        GameFrameWork::OnPickDropItem(v44, *(DropItem **)v10);
      }
    }
    v24 = m_vecNearDropItem.baseclass_0._Mylast;
    v3 = *(std::_Vector_iterator<std::_Vector_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > > *)&m_setDropItem;
  }
  if ( (DropItem **)v10 != v24 )
  {
    memmove((char *)v10, (char *)v24, 0);
    m_vecNearDropItem.baseclass_0._Mylast = (DropItem **)v10;
  }
  if ( (NiPointer<NiAVObject> *)v3 != m_setDropItem.baseclass_0._Mylast )
  {
    v31 = std::_Move<NiPointer<NiAVObject>___NiPointer<NiAVObject>__>(
            m_setDropItem.baseclass_0._Mylast,
            m_setDropItem.baseclass_0._Mylast,
            *(NiPointer<NiAVObject> **)&v3,
            (std::_Nonscalar_ptr_iterator_tag)eType);
    eTypea = v31;
    v32 = v31;
    if ( v31 != m_setDropItem.baseclass_0._Mylast )
    {
      do
      {
        v33.m_pObject = v32->m_pObject;
        if ( v32->m_pObject
          && !InterlockedDecrement((volatile LONG *)&v33.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v33.m_pObject )
          v33.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33.m_pObject, 1u);
        ++v32;
      }
      while ( v32 != m_setDropItem.baseclass_0._Mylast );
      v3 = *(std::_Vector_iterator<std::_Vector_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > > *)&m_setDropItem;
      v31 = eTypea;
    }
    m_setDropItem.baseclass_0._Mylast = v31;
  }
  if ( v10 )
    operator delete((void *)v10);
  v48 = -1;
  if ( v3 )
  {
    v34 = (NiPointer<NiAVObject> *)v3;
    if ( (NiPointer<NiAVObject> *)v3 != m_setDropItem.baseclass_0._Mylast )
    {
      do
      {
        v35.m_pObject = v34->m_pObject;
        if ( v34->m_pObject
          && !InterlockedDecrement((volatile LONG *)&v35.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v35.m_pObject )
            v35.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35.m_pObject, 1u);
        }
        ++v34;
      }
      while ( v34 != m_setDropItem.baseclass_0._Mylast );
      v3 = *(std::_Vector_iterator<std::_Vector_val<NiPointer<NiAVObject>,std::allocator<NiPointer<NiAVObject> > > > *)&m_setDropItem;
    }
    operator delete(*(void **)&v3);
  }
}
// AA51A4: using guessed type int dword_AA51A4;

//----- (004D0100) --------------------------------------------------------
void __thiscall GameFrameWork::AutoPickDropItem(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1

  v1 = this;
  if ( Inventory::IsFull(&g_kInventory) )
  {
    GameFrameWork::SendAutoPickItemReq(v1, 0);
    g_pkMainChar->m_bWaitingAckWhenInvenFull = 1;
  }
  else
  {
    GameFrameWork::GetDropItemByArea(v1, APIT_MINIMON);
  }
}

//----- (004D0140) --------------------------------------------------------
void __thiscall GameFrameWork::GameFrameWork(GameFrameWork *this)
{
  GameFrameWork *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  void *v4; // eax@3
  void *v5; // eax@4
  MsgBox *v6; // edi@5
  void *v7; // eax@10
  PartyWinInterface *v8; // eax@11
  int v9; // edi@13
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@20
  std::exception thisa; // [sp+Ch] [bp-24h]@16
  GameFrameWork *v12; // [sp+18h] [bp-18h]@1
  char *_What; // [sp+1Ch] [bp-14h]@16
  void *v14; // [sp+20h] [bp-10h]@10
  int v15; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  v12 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v15 = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&GameFrameWork::_vftable_;
  KeyboardMoveProcess::Clear(&v1->m_kCharMover);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kStickTimer);
  v1->m_spKeyMap.m_pObject = 0;
  LOBYTE(v15) = 1;
  v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x14u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_setEscapeHide.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_spUserTradeMsgBox.m_pObject = 0;
  *(_DWORD *)&v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kAutoCloseWinList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTList<PgWin__>::_vftable_;
  *(_DWORD *)&v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kCanHideWinList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kCanHideWinList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PgWin *>,PgWin *>Vtbl *)&NiTList<PgWin__>::_vftable_;
  v1->m_pkRaidReplyWin.m_pObject = 0;
  v1->m_spZoneNet.m_pObject = 0;
  v1->m_spWorldMgrNet.m_pObject = 0;
  v1->m_kCollRecord.m_uiIntersectCount = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[12] = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[8] = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[4] = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[0] = 0;
  v1->m_pEffect1.m_pObject = 0;
  v1->m_pEffect2.m_pObject = 0;
  v1->m_pOXEffectO.m_pObject = 0;
  v1->m_pOXEffectX.m_pObject = 0;
  *(_DWORD *)&v1->m_vecSentPacket.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSentPacket.baseclass_0._Mylast = 0;
  v1->m_vecSentPacket.baseclass_0._Myend = 0;
  ChatCommandList::ChatCommandList(&v1->m_kChatComList);
  LOBYTE(v15) = 14;
  v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x24u);
  if ( !v3 )
  {
    v14 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v14);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kSmartWhisper.m_kRecentWhisperList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  LOBYTE(v15) = 15;
  v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x10u);
  if ( !v4 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v4;
  *(_DWORD *)v4 = v4;
  *(_DWORD *)(*(_DWORD *)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kAttackedMsg.m_kAttackedList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerIntervalOXDelay);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  _eh_vector_constructor_iterator_(
    v1->m_CharList,
    0x14u,
    6,
    (void (__thiscall *)(void *))Name5::Name5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_spBlindEffect.m_pObject = 0;
  v1->m_spCamEffect.m_pObject = 0;
  *(_DWORD *)&v1->m_kGuideViewList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kGuideViewList.baseclass_0._Mylast = 0;
  v1->m_kGuideViewList.baseclass_0._Myend = 0;
  LOBYTE(v15) = 20;
  v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x18u);
  if ( !v5 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> >,0> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_WebCtrlList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v15) = 21;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kPartyUpdateTime);
  v1->m_bEnableAdmin = 0;
  GameFrameWork::SetResList(v1);
  v1->m_pkRewardWin = 0;
  v1->m_pkMainCharHPBarWin = 0;
  v1->m_pkTargetCharHPBarWin = 0;
  v1->m_pkStatusWin = 0;
  v1->m_pkTargetWin = 0;
  v1->m_pkItemUpgradeWin = 0;
  v1->m_pkRidePetWin = 0;
  v1->m_pkGuildWarStateWin = 0;
  v1->m_pkMiniMapWin = 0;
  v1->m_pkMainMenuWin = 0;
  v1->m_pkWingStoneWin = 0;
  v1->m_pkShortCutWin = 0;
  v1->m_pkShortCutWinV = 0;
  v1->m_pkShortCutSubWin[0] = 0;
  v1->m_pkShortCutSubWinV[0] = 0;
  v1->m_pkShortCutSubWin[1] = 0;
  v1->m_pkShortCutSubWinV[1] = 0;
  v1->m_pkShortCutSubWin[2] = 0;
  v1->m_pkShortCutSubWinV[2] = 0;
  v1->m_pkShortCutSubWin[3] = 0;
  v1->m_pkShortCutSubWinV[3] = 0;
  v1->m_pkChatDisplayWin = 0;
  v1->m_pkSysMsgDisplayWin = 0;
  v1->m_pkCharInfoWin = 0;
  v1->m_pkInventoryWin = 0;
  v1->m_pkMiniHouseInventoryWin = 0;
  v1->m_pkSkillWin = 0;
  v1->m_pkSystemWin = 0;
  v1->m_pkMiniHouseMenuWin = 0;
  v1->m_pkPrivateStoreWin = 0;
  v1->m_pkDivideWin = 0;
  v1->m_kRideOffValue.m_pkTarget = 0;
  v1->m_kRideOffValue.m_kPoint.x = 0;
  v1->m_kRideOffValue.m_kPoint.y = 0;
  v1->m_kRideOffValue.m_kSkillID = -1;
  LODWORD(v1->m_kRideOffValue.m_kGroundPos.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_kRideOffValue.m_kGroundPos.y = NiPoint3::ZERO.y;
  v1->m_kRideOffValue.m_kGroundPos.z = NiPoint3::ZERO.z;
  v1->m_kRideOffValue.m_bViewPoint = 0;
  v1->m_pkInputTextWin = 0;
  v1->m_pkMoneyWin = 0;
  v1->m_pkHolyRewardMoneyWin = 0;
  v1->m_pkStatusBuffWin = 0;
  v1->m_pkStatusDBuffWin = 0;
  v1->m_pkMainCharSpeechBubbleWin = 0;
  v1->m_pkPartyWinInterface = 0;
  v1->m_pkActionWin = 0;
  v1->m_pkKingDomQuest = 0;
  v1->m_pkQuestWin = 0;
  v1->m_pkFriendWin = 0;
  v1->m_pkOptionWin = 0;
  v1->m_pkOptionGraphicWin = 0;
  v1->m_pkFriendAddWin = 0;
  v1->m_pkGuildWin = 0;
  v1->m_pkCalculatorWin = 0;
  v1->m_pkItemShopWin = 0;
  v1->m_pkUserTradeWin = 0;
  v6 = v1->m_spUserTradeMsgBox.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v1->m_spUserTradeMsgBox.m_pObject = 0;
  }
  v1->m_pkDesktopWin = 0;
  v1->m_pkNPCSkillWin = 0;
  v1->m_pkNPCSoulWin = 0;
  v1->m_pkNpcDlgWin = 0;
  v1->m_pkServerMenuWin = 0;
  v1->m_pkKeyRemappingWin = 0;
  v1->m_pkFriendCallWin = 0;
  v1->m_kNextFrameWorkID = 0;
  v1->m_bLinkSameServer = 1;
  v1->m_kSkillCasting.eState = 0;
  v1->m_kSkillCasting.bWaitingForServerCancel = 0;
  v7 = operator new(0x24u);
  v14 = v7;
  LOBYTE(v15) = 22;
  if ( v7 )
    PartyWinInterface::PartyWinInterface((PartyWinInterface *)v7);
  else
    v8 = 0;
  LOBYTE(v15) = 21;
  v1->m_pkPartyWinInterface = v8;
  *(_DWORD *)&v1->m_bDrawWinMgr = 16843009;
  v1->m_bTargetHPBar = 0;
  *(_WORD *)&v1->m_bOXEventEnable = 0;
  v1->m_bItemInfoChange = 0;
  v1->m_bDisplayApplyCheck = 0;
  v1->m_pkHelpWin = 0;
  v1->m_pkShopWin = 0;
  v1->m_kSmartWhisper.m_eState = 0;
  v1->m_pkForumWin = 0;
  v1->m_pkKQuestTimeWin = 0;
  v1->m_pkIDTimeWin = 0;
  v1->m_pkKQPKRealTimeRankWin = 0;
  memset(v1->m_chatLog, 0, 0x800u);
  v1->m_pkQuestFinishWin = 0;
  v1->m_pkQuestNewsWin = 0;
  v1->m_pkReportWin = 0;
  v1->m_pkPrisonTimeWin = 0;
  v1->m_pkShortCutWin = 0;
  v1->m_pkGMCommandWin = 0;
  v1->m_pkGMPrisonWin = 0;
  v1->m_pkCurrentCommunityWin = 0;
  v1->m_pkEventFriendWin = 0;
  v1->m_pkAutoCloseWin = 0;
  v1->m_pkChargedItemListWin = 0;
  v1->m_pkItemMallMenuWin = 0;
  v1->m_pkMakeKarisWin = 0;
  v1->m_pkStickChar = 0;
  v9 = (int)&v1->m_CharList[0].n5_name[12];
  v14 = (void *)6;
  do
  {
    *(_DWORD *)(v9 + 4) = 0;
    *(_DWORD *)v9 = 0;
    *(_DWORD *)(v9 - 4) = 0;
    *(_DWORD *)(v9 - 8) = 0;
    *(_DWORD *)(v9 - 12) = 0;
    strncpy((char *)(v9 - 12), byte_98C89C, 0x14u);
    v9 += 20;
    v14 = (char *)v14 - 1;
  }
  while ( v14 );
  v1->m_CellChangeInvPosMode = 0;
  v1->m_pkWeddingInfoWin = 0;
  v1->m_pkHolyPromiseWin = 0;
  v1->m_pkHolyPromiseAddWin = 0;
  v1->m_uiInsertNum = 0;
  v1->m_pkGuildAcademyWin = 0;
  memset(v1->m_acMessage, 0, 0x400u);
  v1->m_bWhisper = 0;
  v1->m_bUIScroll = 0;
  v1->m_iCommunityValue = -1;
  v1->m_pkItemRepairWin = 0;
  v1->m_pkMHRepairWin = 0;
  v1->m_pkChatBlockListWin = 0;
  v1->m_pkExpeditionPartyWin[0] = 0;
  v1->m_pkExpeditionPartyWin[1] = 0;
  v1->m_pkExpeditionPartyWin[2] = 0;
  v1->m_pkExpeditionPartyWin[3] = 0;
  v1->m_pkExpeditionWin = 0;
  v1->m_pkExpeditionMemberAddWin = 0;
  v1->m_pkExpeditionWarnigMsgWin = 0;
  v1->m_bServerSelect = 0;
  std::vector<NiPoint2_std::allocator<NiPoint2>>::reserve(
    (std::vector<NiPoint2,std::allocator<NiPoint2> > *)&v1->m_vecSentPacket,
    0x64u);
  v1->m_pkEnchantGemWin1 = 0;
  v1->m_pkEnchantGemWin2 = 0;
  v1->m_pkEnchantGemWin3 = 0;
  v1->m_pkEnchantGemDeleteWin1 = 0;
  v1->m_pkEnchantGemDeleteWin2 = 0;
  v1->m_pkEnchantGemDeleteWin3 = 0;
  v1->m_pkEnchantGemToolTipWin = 0;
  v1->m_pkMysteryVaultWin = 0;
  v1->m_pkMapLinkGateWin = 0;
  v1->m_bIsGM = 0;
  v1->m_pkAutoRunMsgWin = 0;
  v1->m_pkDiceRewardMoneyWin = 0;
  v1->m_pkDiceExpectMoneyWin = 0;
  v1->m_pkDiceGameWin = 0;
  v1->m_pkDiceGameMinimizeWin = 0;
  v1->m_pkDiceGameHelpWin = 0;
  v1->m_pkDiceGameRankWin = 0;
  v1->m_pkDiceGameRateSheetWin = 0;
  v1->m_pkDiceGameNpcDlgWin = 0;
  v1->m_pkGambleMiniWin = 0;
  v1->m_pkGambleWin = 0;
  v1->m_pkCoinExchangeWin = 0;
  v1->m_pkGambleHouseCardWin = 0;
  v1->m_pkGambleDiceGameWin = 0;
  v1->m_pkSlotMachineWin = 0;
  v1->m_pkGBSlotHelpWin = 0;
  v1->m_pkGBSlotRankWin = 0;
  v1->m_pkMiniSlotMachineWin = 0;
  v1->m_pkCollectWin = 0;
  v1->m_pkCollectPeepingWin = 0;
  v1->m_pkCollectCardWin[0] = 0;
  v1->m_pkCollectCardWin[1] = 0;
  v1->m_pkCollectCardWin[2] = 0;
  v1->m_pkCollectCardWin[3] = 0;
  v1->m_bWelcomeMsg = 1;
  v1->m_pkWelcomeMsgWin = 0;
  v1->m_LightningWaveInfo.bAddLightningWave = 0;
  v1->m_LightningWaveInfo.kSkillID = -1;
  v1->m_pkAttendIconWin = 0;
  v1->m_pkAttendRewardWin = 0;
  v1->m_pkAttendCheckWin = 0;
  v1->m_pkCurrentTab = 0;
  v1->m_pkFeedMoverWin = 0;
  v1->m_pkPetNameEditWin = 0;
  v1->m_pkEventRankWin = 0;
  v1->m_pkEventTimeWin = 0;
  v1->m_eOpenType = 0;
  v1->m_pkVoteWin = 0;
  v1->m_pkKQPlayerList = 0;
  v1->m_acStarter[0] = 0;
  v1->m_acTarget[0] = 0;
  v1->m_pkKQScoreWin = 0;
  v1->m_pkEffectMsg = 0;
  v1->m_bMoveRunCtrl = 1;
  v1->m_pkMarketSearchWin = 0;
  v1->m_pkPuzzleTimeWin = 0;
  v1->m_bPlayPuzzle = 0;
  v1->m_pkMoverUpgradeWin = 0;
  v1->m_pkRandomOptionWin = 0;
  v1->m_pkItemUpgradeMsgWin = 0;
  v1->m_pkChatColorSpinWin = 0;
  *(_WORD *)&v1->m_bScreenShot = 256;
  v1->m_pkTermExtendWin = 0;
  v1->m_pkMinimonAutoItemUseWin = 0;
  v1->m_pkClassChangeWin = 0;
  v1->m_pkKDTeamScoreWin = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 98BF94: using guessed type int (__thiscall *NiTList_PgWin _____vftable_)(void *p, char);
// 98C9CC: using guessed type int (__stdcall *GameFrameWork___vftable_)(int uiFlags);

//----- (004D09B0) --------------------------------------------------------
void __thiscall GameFrameWork::Update(GameFrameWork *this, float fCurTime)
{
  GameFrameWork *v2; // esi@1
  mhRepairObjWin *v3; // ebx@1
  unsigned int v4; // eax@2
  bool v5; // zf@5
  NiNode *v6; // eax@6
  unsigned int v7; // edx@6
  unsigned int v8; // ecx@6
  NiAVObject *v9; // eax@6
  NiNode *v10; // eax@7
  unsigned int v11; // ecx@7
  unsigned int v12; // edx@7
  BasicInfoTipWin *v13; // ecx@10
  Net *v14; // ecx@16
  Net *v15; // ecx@18
  _DWORD *v16; // edi@21
  int v17; // eax@22
  MapNavigator *v18; // ebx@29
  MapNavigator *v19; // edi@30
  char v20; // al@41
  char v21; // al@46
  AreaInfoMgr *v22; // eax@53
  ScenarioMgr *v23; // eax@59
  MainCharHPBarWin *v24; // ecx@59
  MainCharHPBarWin *v25; // ecx@61
  PgNet *v26; // ecx@63
  PgNet *v27; // ecx@65
  char *v28; // eax@73
  MsgBox *v29; // eax@73
  char *v30; // eax@74
  char *v31; // eax@80
  char *v32; // eax@81
  SpeechBubbleWin *v33; // ecx@84
  KQuestTimeWin *v34; // ecx@86
  IDTimeWin *v35; // ecx@93
  PrisonTimeWin *v36; // ecx@100
  Char *v37; // eax@110
  CBlindEffect *v38; // ecx@112
  CameraEffect *v39; // ecx@114
  BasicInfoTipWin *v40; // ecx@116
  AttendCheckWin *v41; // ecx@118
  AttendCheckWin *v42; // ecx@122
  AttendIconWin *v43; // eax@124
  FadeObjectMgr *v44; // ecx@125
  void *v45; // eax@126
  float v46; // eax@127
  LuaScriptMgr *v47; // ecx@130
  void *v48; // eax@131
  float v49; // eax@132
  Tutorial *v50; // ecx@135
  void *v51; // eax@136
  Tutorial *v52; // eax@137
  TextScreenEffect *v53; // ecx@140
  void *v54; // eax@141
  TextScreenEffect *v55; // eax@142
  int v56; // ebx@145
  int v57; // edi@146
  char *v58; // ecx@147
  int v59; // eax@148
  char v60; // dl@149
  BasicInfoFindUI *v61; // eax@150
  PgMsg::Frame *v62; // [sp+1Ch] [bp-7Ch]@73
  PgMsg::Frame *v63; // [sp+20h] [bp-78h]@73
  bool v64; // [sp+20h] [bp-78h]@108
  NiPointer<MapNavigator> result; // [sp+30h] [bp-68h]@29
  PgMsg::Frame kMsg; // [sp+34h] [bp-64h]@5
  char buf[64]; // [sp+48h] [bp-50h]@147
  unsigned int v68; // [sp+88h] [bp-10h]@1
  int v69; // [sp+94h] [bp-4h]@126
  int v70; // [sp+98h] [bp+0h]@1

  v68 = (unsigned int)&v70 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pkMHRepairWin;
  if ( v3 )
  {
    v4 = timeGetTime();
    mhRepairObjWin::UpdateTime(v3, v4);
  }
  if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kTimerIntervalOXDelay, fCurTime) && v2->m_bOXEventEnable )
  {
    v5 = v2->m_bOEnable == 0;
    *(float *)&kMsg.m_uiFrameMsg = 500.0;
    *(float *)&kMsg.m_uiFrameWParam = -500.0;
    *(float *)&kMsg.m_uiFramelParam = 0.0;
    if ( v5 )
    {
      v10 = v2->m_pOXEffectX.m_pObject;
      v11 = kMsg.m_uiFrameWParam;
      LODWORD(v10->baseclass_0.m_kLocal.m_Translate.x) = kMsg.m_uiFrameMsg;
      v12 = kMsg.m_uiFramelParam;
      LODWORD(v10->baseclass_0.m_kLocal.m_Translate.y) = v11;
      LODWORD(v10->baseclass_0.m_kLocal.m_Translate.z) = v12;
      v9 = (NiAVObject *)v2->m_pOXEffectX.m_pObject;
    }
    else
    {
      v6 = v2->m_pOXEffectO.m_pObject;
      v7 = kMsg.m_uiFrameWParam;
      LODWORD(v6->baseclass_0.m_kLocal.m_Translate.x) = kMsg.m_uiFrameMsg;
      v8 = kMsg.m_uiFramelParam;
      LODWORD(v6->baseclass_0.m_kLocal.m_Translate.y) = v7;
      LODWORD(v6->baseclass_0.m_kLocal.m_Translate.z) = v8;
      v9 = (NiAVObject *)v2->m_pOXEffectO.m_pObject;
    }
    PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, v9);
    v2->m_bOXEventEnable = 0;
  }
  if ( GameFrameWork::ms_bRendererRecreated )
  {
    GameFrameWork::SetOptionResolution(v2, GameFrameWork::ms_uiDisResWidth, GameFrameWork::ms_uiDisResHeight);
    GameFrameWork::SetWindowsPosOption(v2);
    GameFrameWork::ms_bRecreatingDisplay = 1;
    GameFrameWork::ms_bRendererRecreated = 0;
    v13 = v2->m_pkBasicInfoTipWin;
    if ( v13 )
      BasicInfoTipWin::SetResoulution(v13, GameFrameWork::ms_uiDisResWidth, GameFrameWork::ms_uiDisResHeight);
  }
  if ( v2->m_bDisplayApplyCheck )
  {
    if ( GameFrameWork::ms_bRecreatingDisplay )
    {
      GameFrameWork::ChangeWinDefaultPos(v2);
      v2->m_bDisplayApplyCheck = 0;
      GameFrameWork::ms_bRecreatingDisplay = 0;
    }
    v2->m_bDisplayApplyCheck = 0;
  }
  ITask::UpdateTaskAll(Timer::ms_fCurTime);
  v14 = v2->m_spZoneNet.m_pObject;
  v2->m_eProcessNetState = 0;
  if ( v14 )
    ((void (__stdcall *)(GameFrameWork *, signed int))v14->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  v15 = v2->m_spWorldMgrNet.m_pObject;
  v2->m_eProcessNetState = 1;
  if ( v15 )
    ((void (__stdcall *)(GameFrameWork *, signed int))v15->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  ICharDeadEvent::UpdateAll();
  PgWinMgr::ProcessInput(&Pgg_kWinMgr, 1);
  if ( dword_B30F24 )
  {
    v16 = dword_B70444;
    if ( dword_B70444 )
    {
      v17 = (*(int (__thiscall **)(_DWORD *))(*dword_B70444 + 4))(dword_B70444);
      if ( v17 )
      {
        while ( (NiRTTI *)v17 != &InvWin::m_RTTI )
        {
          v17 = *(_DWORD *)(v17 + 4);
          if ( !v17 )
            goto LABEL_27;
        }
        (*(void (__thiscall **)(_DWORD *))(*v16 + 616))(v16);
      }
    }
  }
LABEL_27:
  PgWinMgr::DispatchMessageA(&Pgg_kWinMgr);
  PgWinMgr::UpdateWin(&Pgg_kWinMgr, fCurTime);
  if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kPartyUpdateTime, fCurTime) )
    PartyWinInterface::Update(v2->m_pkPartyWinInterface);
  GameFrameWork::UpdateAutoCloseWin(v2);
  GameFrameWork::AttackedMsg::UpdateAttackedMsg(&v2->m_kAttackedMsg);
  Skill::Update(fCurTime);
  v18 = MapNavigator::GetMapNavigator(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v19 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v19 )
        v19->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    }
  }
  if ( v18 )
    MapNavigator::OnIdle(v18, fCurTime);
  GameFrameWork::ProcessInput(v2);
  PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
  if ( !v2->m_bEscapeKeyPriority && !(*(_BYTE *)(g_pkKeyboard + 33) & 2) && *(_BYTE *)(g_pkKeyboard + 65) & 2 )
    v2->m_bEscapeKeyPriority = 1;
  if ( QuestDataMgr::m_bUpdate )
  {
    if ( v2->m_pkQuestNewsWin )
    {
      v20 = User::Lv(&g_kUser);
      if ( QuestNewsWin::QuestPlayer_LevelChange(v2->m_pkQuestNewsWin, v20) )
      {
        if ( QuestPigeonEffect::ms_bGameStart )
        {
          EffectMgr::CreatePigeonEffect(&g_kEffectMgr, g_pkMainChar, Timer::ms_fCurTime);
          v2->m_pkQuestNewsWin->m_ePigeonState = 1;
        }
        else
        {
          GameFrameWork::OpenQuestNewsWin(v2);
        }
      }
    }
  }
  else
  {
    if ( !QuestPigeonEffect::ms_bGameStart )
    {
      v21 = User::Lv(&g_kUser);
      if ( QuestNewsWin::QuestPlayer_LevelChange(v2->m_pkQuestNewsWin, v21) )
      {
        GameFrameWork::OpenQuestNewsWin(v2);
        QuestPigeonEffect::ms_bGameStart = 1;
      }
    }
  }
  GameFrameWork::UpdateMainChar(v2, fCurTime);
  CharMgr::Update(&g_kCharMgr, fCurTime);
  DropItemMgr::Update(&g_kDropItemMgr, fCurTime);
  if ( g_pkMainChar->m_kCharShape.m_bAutoPickItem
    && !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() )
  {
    if ( Inventory::IsFull(&g_kInventory) )
    {
      GameFrameWork::SendAutoPickItemReq(v2, 0);
      g_pkMainChar->m_bWaitingAckWhenInvenFull = 1;
    }
    else
    {
      GameFrameWork::GetDropItemByArea(v2, APIT_MINIMON);
    }
  }
  CMiniHouseMgr::Update((CMiniHouseMgr *)&g_kMiniHouseMgr, fCurTime);
  v22 = AreaInfoMgr::GetInstance();
  AreaInfoMgr::Update(v22);
  if ( PopupMenuWin::IsMenuIDShow(v2->m_pkPopupMenuWin, PID_MHINV_RETURNTOINV) )
  {
    if ( nowState )
      MiniHouseIndoor::SetPopUpMHItemInvState(&g_kWorld.m_MiniHouseIndoorMode, 1);
  }
  else
  {
    if ( nowState )
    {
      MiniHouseIndoor::SetPopUpMHItemInvState(&g_kWorld.m_MiniHouseIndoorMode, 0);
      if ( dword_AA5084 != -1 )
        dword_AA5084 = -1;
    }
  }
  World::Update(&g_kWorld, fCurTime);
  v23 = ScenarioMgr::GetScenarioMgr();
  ScenarioMgr::Update(v23, fCurTime);
  EffectObjectMgr::GetMgr();
  SoundMgr::Update(&g_kSoundMgr, fCurTime, pkCamera);
  ScreenBDMgr::Update(&g_kScrnBDMgr, fCurTime, pkCamera);
  TextEffMgr::Update(&g_kTextEffMgr, fCurTime, pkCamera);
  v24 = v2->m_pkMainCharHPBarWin;
  if ( v24 )
    MainCharHPBarWin::UpdatePosition(v24);
  v25 = v2->m_pkTargetCharHPBarWin;
  if ( v25 )
    MainCharHPBarWin::UpdatePosition(v25);
  v26 = (PgNet *)v2->m_spZoneNet.m_pObject;
  if ( v26 )
    PgNet::Flush(v26);
  v27 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  if ( v27 )
    PgNet::Flush(v27);
  if ( !v2->m_spZoneNet.m_pObject->baseclass_0.m_bCut || v2->m_bBackCharSelect )
  {
    if ( !v2->m_spWorldMgrNet.m_pObject->baseclass_0.m_bCut )
      goto LABEL_84;
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    if ( !nowState && PgWin::IsVisible(&v2->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0) == 1 )
      ShopWin::OnWinClose(v2->m_pkShopWin);
    if ( g_kServer.m_bDoubleConnected == 1 )
    {
      v31 = TextData::Get(0x16526A50u);
      v29 = MsgBox::Modal(MSGBOX_OK, v31);
      g_kServer.m_bDoubleConnected = 0;
    }
    else
    {
      v32 = TextData::Get(0xCFCE1341u);
      v29 = MsgBox::Modal(MSGBOX_OK, v32);
    }
    v63 = 0;
    v62 = &kMsg;
  }
  else
  {
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    if ( !nowState && PgWin::IsVisible(&v2->m_pkShopWin->baseclass_0.baseclass_0.baseclass_0) == 1 )
      ShopWin::OnWinClose(v2->m_pkShopWin);
    if ( g_kServer.m_bDoubleConnected == 1 )
    {
      v28 = TextData::Get(0x16526A50u);
      v29 = MsgBox::Modal(MSGBOX_OK, v28);
      v63 = 0;
      g_kServer.m_bDoubleConnected = 0;
      v62 = &kMsg;
    }
    else
    {
      v30 = TextData::Get(0xCBCED23Au);
      v29 = MsgBox::Modal(MSGBOX_OK, v30);
      v63 = 0;
      v62 = &kMsg;
    }
  }
  kMsg.m_uiFrameMsg = 27;
  MsgBox::SetFrameWorkMsgOnClose(v29, &v2->baseclass_0, v62, v63);
LABEL_84:
  v33 = v2->m_pkMainCharSpeechBubbleWin;
  if ( v33 )
    SpeechBubbleWin::Update(v33, fCurTime, pkCamera, (PgWinCamera *)unk_B703D8);
  v34 = v2->m_pkKQuestTimeWin;
  if ( KQuestTimeWin::m_second )
  {
    if ( v34
      && !(unsigned __int8)((int (*)(void))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkKQuestTimeWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    if ( v34
      && (unsigned __int8)((int (*)(void))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkKQuestTimeWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v35 = v2->m_pkIDTimeWin;
  if ( IDTimeWin::m_second )
  {
    if ( v35
      && !(unsigned __int8)((int (*)(void))v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkIDTimeWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    if ( v35
      && (unsigned __int8)((int (*)(void))v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkIDTimeWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v36 = v2->m_pkPrisonTimeWin;
  if ( PrisonTimeWin::m_second )
  {
    if ( v36
      && !(unsigned __int8)((int (*)(void))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkPrisonTimeWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    if ( v36
      && (unsigned __int8)((int (*)(void))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkPrisonTimeWin->baseclass_0.baseclass_0.baseclass_0);
      GameFrameWork::NcPrisonEndReq(v2);
    }
  }
  if ( v2->m_bPlayPuzzle )
    v64 = 0;
  else
    v64 = byte_B5BB25;
  GameFrameWork::OnShowWinInterfaceList(v2, v64);
  v37 = v2->m_pkStickChar;
  if ( v37 )
    GameFrameWork::Stick(v2, v37, 0);
  v38 = v2->m_spBlindEffect.m_pObject;
  if ( v38 )
    CBlindEffect::Update(v38, fCurTime);
  v39 = v2->m_spCamEffect.m_pObject;
  if ( v39 )
    CameraEffect::Update(v39, fCurTime);
  ITimer::Update(fCurTime);
  GameFrameWork::UpdateAskServerInform(v2, fCurTime);
  ShortCutMgr::Update(&g_kShortCutMgr, fCurTime);
  v40 = v2->m_pkBasicInfoTipWin;
  if ( v40 )
    BasicInfoTipWin::Update(v40, fCurTime);
  v41 = v2->m_pkAttendCheckWin;
  if ( v41 && v2->m_pkAttendIconWin )
  {
    if ( AttendCheckWin::IsRewardOn(v41) )
      AttendIconWin::SetActive(v2->m_pkAttendIconWin, 1);
    v42 = v2->m_pkAttendCheckWin;
    if ( v42->m_iEvtIndex == 28 && AttendCheckWin::IsRewardAll(v42) )
    {
      v43 = v2->m_pkAttendIconWin;
      v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      v43->m_bEvtState = 0;
    }
  }
  GameFrameWork::CheckWebFocus(v2);
  v44 = (FadeObjectMgr *)LODWORD(Singleton<FadeObjectMgr>::m_pInstance);
  if ( !LODWORD(Singleton<FadeObjectMgr>::m_pInstance) )
  {
    v45 = operator new(0x1Cu);
    result.m_pObject = (MapNavigator *)v45;
    v69 = 0;
    if ( v45 )
      FadeObjectMgr::FadeObjectMgr((FadeObjectMgr *)v45);
    else
      LODWORD(v46) = 0;
    v44 = (FadeObjectMgr *)LODWORD(v46);
    v69 = -1;
    Singleton<FadeObjectMgr>::m_pInstance = v46;
  }
  FadeObjectMgr::Update(v44, fCurTime);
  v47 = (LuaScriptMgr *)LODWORD(Singleton<LuaScriptMgr>::m_pInstance);
  if ( !LODWORD(Singleton<LuaScriptMgr>::m_pInstance) )
  {
    v48 = operator new(0x14u);
    result.m_pObject = (MapNavigator *)v48;
    v69 = 1;
    if ( v48 )
      LuaScriptMgr::LuaScriptMgr((LuaScriptMgr *)v48);
    else
      LODWORD(v49) = 0;
    v47 = (LuaScriptMgr *)LODWORD(v49);
    v69 = -1;
    Singleton<LuaScriptMgr>::m_pInstance = v49;
  }
  LuaScriptMgr::Update(v47, fCurTime);
  v50 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v51 = operator new(0xB4u);
    result.m_pObject = (MapNavigator *)v51;
    v69 = 2;
    if ( v51 )
      Tutorial::Tutorial((Tutorial *)v51);
    else
      v52 = 0;
    v50 = v52;
    v69 = -1;
    Singleton<Tutorial>::m_pInstance = v52;
  }
  Tutorial::Update(v50, fCurTime);
  v53 = Singleton<TextScreenEffect>::m_pInstance;
  if ( !Singleton<TextScreenEffect>::m_pInstance )
  {
    v54 = operator new(0x28u);
    result.m_pObject = (MapNavigator *)v54;
    v69 = 3;
    if ( v54 )
      TextScreenEffect::TextScreenEffect((TextScreenEffect *)v54);
    else
      v55 = 0;
    v53 = v55;
    v69 = -1;
    Singleton<TextScreenEffect>::m_pInstance = v55;
  }
  TextScreenEffect::Update(v53, fCurTime);
  v56 = unk_B703F0;
  while ( v56 )
  {
    v57 = *(_DWORD *)(v56 + 8);
    v56 = *(_DWORD *)v56;
    if ( v57 )
    {
      buf[0] = 0;
      memset(&buf[1], 0, 0x3Fu);
      v58 = *(char **)(v57 + 8);
      if ( v58 )
      {
        v59 = *(_DWORD *)(v57 + 8);
        do
          v60 = *(_BYTE *)v59++;
        while ( v60 );
        strncpy(buf, v58, v59 - (_DWORD)(v58 + 1) - 3);
        v61 = BasicInfoFindUITab::GetByUIFile(buf);
        if ( v61 )
          GameFrameWork::OpenPlayGuideWin(v2, v61->BIL_GuideType);
      }
    }
  }
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A9816C: using guessed type int g_pkKeyboard;
// A987C4: using guessed type bool GameFrameWork__ms_bRendererRecreated;
// A987C6: using guessed type char GameFrameWork__ms_bRecreatingDisplay;
// A988C4: using guessed type unsigned int IDTimeWin__m_second;
// A9915C: using guessed type unsigned int PrisonTimeWin__m_second;
// A99E94: using guessed type unsigned int KQuestTimeWin__m_second;
// A9A760: using guessed type bool QuestPigeonEffect__ms_bGameStart;
// AA5084: using guessed type int dword_AA5084;
// B30F24: using guessed type int dword_B30F24;
// B5BB25: using guessed type char byte_B5BB25;

//----- (004D1390) --------------------------------------------------------
MapViewInfo *__cdecl IIDTableBase<MapViewInfo_MapViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  MapViewInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(MapViewInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (004D13E0) --------------------------------------------------------
void __cdecl std::_Push_heap<DropItem_____int_DropItem___DropItemSorter>(DropItem **_First, int _Hole, int _Top, DropItem **_Val, DropItemSorter _Pred)
{
  int v5; // edi@1
  int v6; // esi@1

  v5 = _Hole;
  v6 = (_Hole - 1) / 2;
  if ( _Top >= _Hole )
  {
    _First[_Hole] = *_Val;
  }
  else
  {
    while ( DropItemSorter::operator__(&_Pred, _First[v6], *_Val) )
    {
      _First[v5] = _First[v6];
      v5 = v6;
      v6 = (v6 - 1) / 2;
      if ( _Top >= v5 )
      {
        _First[v5] = *_Val;
        return;
      }
    }
    _First[v5] = *_Val;
  }
}

//----- (004D1460) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_NiTListBase<DFALL<IOptionBase__>_IOptionBase__>(NiTListBase<DFALL<IOptionBase *>,IOptionBase *> *this)
{
  this->vfptr = (NiTListBase<DFALL<IOptionBase *>,IOptionBase *>Vtbl *)&NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_vftable_;
}
// 98C968: using guessed type int (__thiscall *NiTListBase_DFALL_IOptionBase ___IOptionBase _____vftable_)(void *p, char);

//----- (004D1470) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_scalar_deleting_destructor_(NiTListBase<DFALL<IOptionBase *>,IOptionBase *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<IOptionBase *>,IOptionBase *>Vtbl *)&NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 98C968: using guessed type int (__thiscall *NiTListBase_DFALL_IOptionBase ___IOptionBase _____vftable_)(void *p, char);

//----- (004D14A0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<DropItem_____int_DropItem___DropItemSorter>(DropItem **_First, int _Hole, int _Bottom, DropItem **_Val, DropItemSorter _Pred)
{
  int v5; // eax@1
  int v6; // esi@1
  bool v7; // zf@1
  int v8; // eax@4
  DropItem *v9; // edx@4
  int v10; // edi@8
  int v11; // esi@8
  DropItemSorter this; // [sp+Ch] [bp-44h]@8
  int _Top; // [sp+4Ch] [bp-4h]@1

  v5 = _Hole;
  v6 = 2 * _Hole + 2;
  _Top = _Hole;
  v7 = v6 == _Bottom;
  if ( v6 < _Bottom )
  {
    do
    {
      if ( DropItemSorter::operator__(&_Pred, _First[v6], _First[v6 - 1]) )
        --v6;
      v8 = _Hole;
      v9 = _First[v6];
      _Hole = v6;
      v6 = 2 * v6 + 2;
      _First[v8] = v9;
      v7 = v6 == _Bottom;
    }
    while ( v6 < _Bottom );
    v5 = _Hole;
  }
  if ( v7 )
  {
    _First[v5] = _First[_Bottom - 1];
    _Hole = _Bottom - 1;
  }
  memcpy(&this, &_Pred, sizeof(this));
  v10 = _Hole;
  v11 = (_Hole - 1) / 2;
  if ( _Top >= _Hole )
  {
    _First[_Hole] = *_Val;
  }
  else
  {
    while ( DropItemSorter::operator__(&this, _First[v11], *_Val) )
    {
      _First[v10] = _First[v11];
      v10 = v11;
      v11 = (v11 - 1) / 2;
      if ( _Top >= v10 )
      {
        _First[v10] = *_Val;
        return;
      }
    }
    _First[v10] = *_Val;
  }
}

//----- (004D1580) --------------------------------------------------------
NiTMapItem<char const *,NiD3DGlobalConstantEntry *> *__thiscall NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::NewItem(NiTMap<char const *,NiD3DGlobalConstantEntry *> *this)
{
  NiTMapItem<char const *,NiD3DGlobalConstantEntry *> *result; // eax@1

  result = (NiTMapItem<char const *,NiD3DGlobalConstantEntry *> *)operator new(0xCu);
  result->m_val = 0;
  return result;
}

//----- (004D15A0) --------------------------------------------------------
void *__thiscall NiTList<IOptionBase__>::_scalar_deleting_destructor_(NiTList<IOptionBase *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<IOptionBase *> *v3; // esi@1
  NiTListItem<IOptionBase *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IOptionBase *>,IOptionBase *>Vtbl *)&NiTPointerListBase<DFALL<IOptionBase__>_IOptionBase__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<IOptionBase__>_IOptionBase__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98C968: using guessed type int (__thiscall *NiTListBase_DFALL_IOptionBase ___IOptionBase _____vftable_)(void *p, char);
// 98C978: using guessed type int (__thiscall *NiTPointerListBase_DFALL_IOptionBase ___IOptionBase _____vftable_)(void *p, char);

//----- (004D1630) --------------------------------------------------------
KQIsVote *__cdecl KQIsVoteTable::GetByID(const int iID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  KQIsVote *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( *(_WORD *)CDataReader::GetRecord((CDataReader *)(ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable + 4), v3) != iID )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (KQIsVote *)CDataReader::GetRecord((CDataReader *)(ITableBase<KQIsVote_KQIsVoteTable>::ms_pkTable + 4), v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97F00: using guessed type int ITableBase_KQIsVote_KQIsVoteTable___ms_pkTable;

//----- (004D1690) --------------------------------------------------------
BasicInfoFindUI *__cdecl BasicInfoFindUITab::GetByUIFile(char *FileName)
{
  BasicInfoFindUI *result; // eax@2
  int v2; // eax@3
  unsigned int v3; // edi@4
  unsigned int v4; // esi@6

  if ( FileName )
  {
    v2 = *(_DWORD *)(ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable + 56);
    if ( v2 )
      v3 = *(_DWORD *)(v2 + 40);
    else
      v3 = 0;
    v4 = 0;
    if ( v3 )
    {
      while ( 1 )
      {
        result = (BasicInfoFindUI *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<BasicInfoFindUI_BasicInfoFindUITab>::ms_pkTable + 4),
                                      v4);
        if ( result )
        {
          if ( !strcmp(result->UI_File, FileName) )
            break;
        }
        ++v4;
        if ( v4 >= v3 )
          goto LABEL_10;
      }
    }
    else
    {
LABEL_10:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97EC4: using guessed type int ITableBase_BasicInfoFindUI_BasicInfoFindUITab___ms_pkTable;

//----- (004D1710) --------------------------------------------------------
void __cdecl std::_Make_heap<DropItem_____int_DropItem___DropItemSorter>(DropItem **_First, DropItem **_Last, DropItemSorter _Pred, int *__formal, DropItem **a5)
{
  DropItem **v5; // ebx@1
  int v6; // eax@1
  int i; // edx@2
  void *v8; // ecx@4
  int v9; // eax@4
  int v10; // edi@4
  int v11; // esi@4
  DropItem *v12; // eax@5
  int v13; // edx@7
  DropItem *v14; // ecx@7
  DropItemSorter v15; // [sp-40h] [bp-98h]@11
  DropItem *v16; // [sp-4h] [bp-5Ch]@5
  DropItemSorter this; // [sp+Ch] [bp-4Ch]@4
  void *_Val; // [sp+4Ch] [bp-Ch]@4
  int _Bottom; // [sp+50h] [bp-8h]@1
  int v20; // [sp+54h] [bp-4h]@3
  int _Hole; // [sp+60h] [bp+8h]@4
  int _Lasta; // [sp+64h] [bp+Ch]@4

  v5 = _First;
  _Bottom = _Last - _First;
  v6 = _Bottom / 2;
  if ( _Bottom / 2 > 0 )
  {
    for ( i = 2 * v6 + 2; ; i = v20 )
    {
      v8 = v5[v6 - 1];
      v9 = v6 - 1;
      _Val = v8;
      memcpy(&this, &_Pred, sizeof(this));
      v10 = _Bottom;
      _Hole = v9;
      v20 = i - 2;
      _Lasta = v9;
      v11 = i - 2;
      if ( i - 2 < _Bottom )
      {
        do
        {
          v12 = v5[v11];
          v16 = v5[v11 - 1];
          if ( DropItemSorter::operator__(&this, v12, v16) )
            --v11;
          v13 = _Lasta;
          v14 = v5[v11];
          _Lasta = v11;
          v11 = 2 * v11 + 2;
          v5[v13] = v14;
        }
        while ( v11 < v10 );
        v9 = _Hole;
      }
      if ( v11 == v10 )
      {
        v5[_Lasta] = v5[v10 - 1];
        _Lasta = v10 - 1;
      }
      memcpy(&v15, &this, sizeof(v15));
      std::_Push_heap<DropItem_____int_DropItem___DropItemSorter>(
        v5,
        _Lasta,
        v9,
        (DropItem **)&_Val,
        COERCE_DROPITEMSORTER(v15.m_pos3Dir.x));
      if ( _Hole <= 0 )
        break;
      v6 = _Hole;
    }
  }
}

//----- (004D17F0) --------------------------------------------------------
void __cdecl std::_Sort_heap<DropItem_____DropItemSorter>(DropItem **_First, DropItem **_Last, DropItemSorter _Pred)
{
  DropItem **v3; // ebx@1
  unsigned int v4; // eax@1
  DropItem **v5; // edx@2
  DropItemSorter v6; // [sp-40h] [bp-4Ch]@2
  int _Firsta; // [sp+14h] [bp+8h]@2

  v3 = _First;
  v4 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v5 = *(DropItem ***)((char *)v3 + v4 - 4);
      *(DropItem **)((char *)v3 + v4 - 4) = *v3;
      _Last = v5;
      _Firsta = v4 - 4;
      memcpy(&v6, &_Pred, sizeof(v6));
      std::_Adjust_heap<DropItem_____int_DropItem___DropItemSorter>(
        v3,
        0,
        (signed int)(v4 - 4) >> 2,
        (DropItem **)&_Last,
        COERCE_DROPITEMSORTER(v6.m_pos3Dir.x));
      v4 = _Firsta;
    }
    while ( (_Firsta & 0xFFFFFFFC) > 4 );
  }
}

//----- (004D1860) --------------------------------------------------------
void __cdecl std::_Partial_sort<DropItem_____DropItem___DropItemSorter>(DropItem **_First, DropItem **_Mid, DropItem **_Last, DropItemSorter _Pred, DropItem **__formal)
{
  DropItem **v5; // ebx@1
  DropItem *v6; // edx@4
  void *v7; // eax@5
  DropItemSorter v8; // [sp-48h] [bp-5Ch]@2
  DropItemSorter v9; // [sp-40h] [bp-54h]@5
  DropItem *v10; // [sp-4h] [bp-18h]@4
  int _Bottom; // [sp+Ch] [bp-8h]@1
  void *_Val; // [sp+10h] [bp-4h]@5

  v5 = _Mid;
  _Bottom = _Mid - _First;
  if ( _Bottom > 1 )
  {
    memcpy(&v8, &_Pred, sizeof(v8));
    std::_Make_heap<DropItem_____int_DropItem___DropItemSorter>(
      _First,
      _Mid,
      COERCE_DROPITEMSORTER(v8.m_pos3Dir.x),
      0,
      0);
  }
  if ( _Mid < _Last )
  {
    do
    {
      v6 = *v5;
      v10 = *_First;
      if ( DropItemSorter::operator__(&_Pred, v6, v10) )
      {
        v7 = *v5;
        *v5 = *_First;
        _Val = v7;
        memcpy(&v9, &_Pred, sizeof(v9));
        std::_Adjust_heap<DropItem_____int_DropItem___DropItemSorter>(
          _First,
          0,
          _Bottom,
          (DropItem **)&_Val,
          COERCE_DROPITEMSORTER(v9.m_pos3Dir.x));
      }
      ++v5;
    }
    while ( v5 < _Last );
  }
  memcpy(&v9, &_Pred, sizeof(v9));
  std::_Sort_heap<DropItem_____DropItemSorter>(_First, _Mid, COERCE_DROPITEMSORTER(v9.m_pos3Dir.x));
}

//----- (004D1920) --------------------------------------------------------
void __thiscall std::vector<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::reserve(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this, unsigned int _Count)
{
  std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *v2; // esi@1
  void *v3; // eax@4
  void *v4; // ebx@4
  NiPointer<PgSprData> *v5; // ST04_4@4
  NiPointer<PgSprData> *v6; // ST00_4@4
  NiPointer<PgSprData> *v7; // ecx@4
  NiPointer<PgSprData> *v8; // eax@4
  int v9; // edi@4
  int v10; // [sp-10h] [bp-24h]@1
  void *_Ptr; // [sp+0h] [bp-14h]@4
  int *v12; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@4

  v12 = &v10;
  v2 = this;
  if ( _Count > 0x3FFFFFFF )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 < _Count )
  {
    v3 = std::allocator<QUEST_DATA__>::allocate((std::allocator<CBaseObject *> *)&this->baseclass_0._Alval, _Count);
    v4 = v3;
    v5 = v2->baseclass_0._Mylast;
    v6 = *(NiPointer<PgSprData> **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = v3;
    v13 = 0;
    std::_Uninit_move<NiPointer<ScreenBoardTexture::DescInfo>___NiPointer<ScreenBoardTexture::DescInfo>___std::allocator<NiPointer<ScreenBoardTexture::DescInfo>>_NiPointer<ScreenBoardTexture::DescInfo>>(
      v6,
      v5,
      (NiPointer<PgSprData> *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v7 = v2->baseclass_0._Mylast;
    v8 = *(NiPointer<PgSprData> **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    v9 = (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    v13 = -1;
    if ( v8 )
    {
      std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
        v8,
        v7,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Count);
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v2->baseclass_0._Myend = (NiPointer<PgSprData> *)((char *)v4 + 4 * _Count);
    v2->baseclass_0._Mylast = (NiPointer<PgSprData> *)((char *)v4 + 4 * v9);
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v4;
  }
}

//----- (004D1A10) --------------------------------------------------------
void __thiscall std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::_Reserve(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this, unsigned int _Count)
{
  signed int v2; // eax@1
  unsigned int v3; // eax@3
  signed int v4; // edx@3
  unsigned int v5; // edx@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( 1073741823 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v3 > v4 )
  {
    if ( 1073741823 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<NiPointer<NiAVObject>_std::allocator<NiPointer<NiAVObject>>>::reserve(this, v5);
  }
}

//----- (004D1A70) --------------------------------------------------------
void __thiscall GameFrameWork::SmartWhisper::_SmartWhisper(GameFrameWork::SmartWhisper *this)
{
  void **v1; // esi@1

  v1 = (void **)&this->m_kRecentWhisperList;
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::clear(&this->m_kRecentWhisperList);
  operator delete(*v1);
}

//----- (004D1A90) --------------------------------------------------------
NiRTTI *__thiscall GameFrameWork::GetRTTI(GameFrameWork *this)
{
  return &GameFrameWork::m_RTTI;
}

//----- (004D1AA0) --------------------------------------------------------
const char *__thiscall GameFrameWork::GetFrameWorkName(GameFrameWork *this)
{
  return GameFrameWork::m_RTTI.m_pcName;
}

//----- (004D1AB0) --------------------------------------------------------
void *__thiscall GameFrameWork::_vector_deleting_destructor_(GameFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GameFrameWork::_GameFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004D1AE0) --------------------------------------------------------
int __thiscall ActionIconWin::GetActionViewInfoID(ActionIconWin *this)
{
  int *v1; // eax@1
  int result; // eax@2

  v1 = (int *)this->m_pkActionViewInfo;
  if ( v1 )
    result = *(_BYTE *)v1;
  else
    result = -1;
  return result;
}

//----- (004D1B00) --------------------------------------------------------
bool __thiscall ActionIconWin::Create(ActionIconWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  ActionIconWin *v6; // esi@1
  bool result; // al@1

  v6 = this;
  this->m_pkFrameWork = pkFrameWork;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    v6->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (004D1B50) --------------------------------------------------------
bool __thiscall ActionIconWin::EatDropInstance(ActionIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  return 0;
}

//----- (004D1B60) --------------------------------------------------------
void __thiscall ActionIconWin::OnFirstHitWin(ActionIconWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  PgWin::SetToolTipWinText(
    &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    this->m_pkActionViewInfo->ActionName);
  PgWin::OnFirstHitWin(v1);
}

//----- (004D1B80) --------------------------------------------------------
void __thiscall PremiumActionIcon::PremiumActionIcon(PremiumActionIcon *this)
{
  PremiumActionIcon *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PremiumActionIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PremiumActionIcon::_vftable_;
  v1->m_uiInvIndex = -1;
}
// 98CCC0: using guessed type int (__stdcall *PremiumActionIcon___vftable_)(int uiFlags);
// 98CCDC: using guessed type int (__thiscall *PremiumActionIcon___vftable_)(void *p, char);

//----- (004D1BB0) --------------------------------------------------------
void __thiscall PremiumActionIcon::_PremiumActionIcon(PremiumActionIcon *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PremiumActionIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PremiumActionIcon::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 98CCC0: using guessed type int (__stdcall *PremiumActionIcon___vftable_)(int uiFlags);
// 98CCDC: using guessed type int (__thiscall *PremiumActionIcon___vftable_)(void *p, char);

//----- (004D1BD0) --------------------------------------------------------
bool __thiscall PremiumActionIcon::Create(PremiumActionIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent) != 0;
}

//----- (004D1C00) --------------------------------------------------------
void __thiscall PremiumActionWin::OnHelpLink(PremiumActionWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ActionWin_Premium");
}

//----- (004D1C30) --------------------------------------------------------
void __thiscall ActionInvTabButWin::ActionInvTabButWin(ActionInvTabButWin *this)
{
  ActionInvTabButWin *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionInvTabButWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionInvTabButWin::_vftable_;
}
// 98CF48: using guessed type int (__stdcall *ActionInvTabButWin___vftable_)(int uiFlags);
// 98CF64: using guessed type int (__thiscall *ActionInvTabButWin___vftable_)(void *p, char);

//----- (004D1C50) --------------------------------------------------------
void __thiscall ActionInvTabButWin::_ActionInvTabButWin(ActionInvTabButWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionInvTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionInvTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 98CF48: using guessed type int (__stdcall *ActionInvTabButWin___vftable_)(int uiFlags);
// 98CF64: using guessed type int (__thiscall *ActionInvTabButWin___vftable_)(void *p, char);

//----- (004D1C70) --------------------------------------------------------
bool __thiscall ActionInvTabButWin::Create(ActionInvTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  return PgWinBut::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, uiCmdMsg, 0, 0) != 0;
}

//----- (004D1CA0) --------------------------------------------------------
void __thiscall ActionWin::OnHelpLink(ActionWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ActionWin");
}

//----- (004D1CD0) --------------------------------------------------------
void __thiscall ActionIconWin::_ActionIconWin(ActionIconWin *this)
{
  ActionIconWin *v1; // esi@1
  NiScreenElements *v2; // edi@1
  NiScreenElements *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionIconWin::_vftable_;
  v2 = this->m_spTopPlane.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_spBackPlane.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  IconWin::_IconWin(&v1->baseclass_0);
}
// 98D19C: using guessed type int (__stdcall *ActionIconWin___vftable_)(int uiFlags);
// 98D1BC: using guessed type int (__thiscall *ActionIconWin___vftable_)(void *p, char);

//----- (004D1D90) --------------------------------------------------------
void __thiscall ActionWin::ActionWin(ActionWin *this)
{
  ActionWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkContents = 0;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  *(_DWORD *)&v1->m_kDropContents.m_kItemID = 65535;
  memset((char *)v1->m_apkIconDefaultAction, 0, 0x48u);
  memset((char *)v1->m_apkIconEmotion, 0, 0x48u);
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 98D424: using guessed type int (__stdcall *ActionWin___vftable_)(int uiFlags);
// 98D444: using guessed type int (__thiscall *ActionWin___vftable_)(void *p, char);

//----- (004D1E20) --------------------------------------------------------
void __thiscall ActionWin::_ActionWin(ActionWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 98D424: using guessed type int (__stdcall *ActionWin___vftable_)(int uiFlags);
// 98D444: using guessed type int (__thiscall *ActionWin___vftable_)(void *p, char);

//----- (004D1E50) --------------------------------------------------------
void __thiscall ActionWin::OnWinClose(ActionWin *this)
{
  GameFrameWork::CloseActionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (004D1E60) --------------------------------------------------------
void __thiscall ActionWin::OnDefaultSlot_LClick(ActionWin *this, unsigned int lParam)
{
  this->m_kDropContents.m_eSenderType = 9;
  this->m_kDropContents.m_eType = 3;
  this->m_kDropContents.m_apvParam[0] = (void *)lParam;
  this->m_kDropContents.m_uiSenderIndex = 0;
  this->m_kDropContents.nTableIndexNum = this->m_apkIconDefaultAction[lParam]->m_pkActionViewInfo->nIndex;
  this->m_kDrop.m_pkSender = (PgWin *)this;
  PgCursor::ms_pkDrop = (int)&this->m_kDrop;
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (004D1EC0) --------------------------------------------------------
void __thiscall ActionWin::OnEmotionSlot_LClick(ActionWin *this, unsigned int lParam)
{
  this->m_kDropContents.m_eSenderType = 9;
  this->m_kDropContents.m_eType = 3;
  this->m_kDropContents.m_apvParam[0] = (void *)lParam;
  this->m_kDropContents.m_uiSenderIndex = 1;
  this->m_kDropContents.nTableIndexNum = this->m_apkIconEmotion[lParam]->m_pkActionViewInfo->nIndex;
  this->m_kDrop.m_pkSender = (PgWin *)this;
  PgCursor::ms_pkDrop = (int)&this->m_kDrop;
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (004D1F20) --------------------------------------------------------
void __thiscall ActionWin::StartHpStonCoolTime(ActionWin *this)
{
  ActionIconWin *v1; // ecx@1

  v1 = this->m_apkIconDefaultAction[8];
  if ( v1->m_pkActionViewInfo )
    IconWin::StartCoolTime(&v1->baseclass_0, Timer::ms_fCurTime, 7.0, 0.0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004D1F60) --------------------------------------------------------
void __thiscall ActionWin::StartSpStonCoolTime(ActionWin *this)
{
  ActionIconWin *v1; // ecx@1

  v1 = this->m_apkIconDefaultAction[9];
  if ( v1->m_pkActionViewInfo )
    IconWin::StartCoolTime(&v1->baseclass_0, Timer::ms_fCurTime, 7.0, 0.0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004D1FA0) --------------------------------------------------------
void __thiscall PremiumActionWin::PremiumActionWin(PremiumActionWin *this)
{
  PremiumActionWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PremiumActionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PremiumActionWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 98D66C: using guessed type int (__stdcall *PremiumActionWin___vftable_)(int uiFlags);
// 98D68C: using guessed type int (__thiscall *PremiumActionWin___vftable_)(void *p, char);

//----- (004D1FF0) --------------------------------------------------------
void __thiscall PremiumActionWin::_PremiumActionWin(PremiumActionWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PremiumActionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PremiumActionWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 98D66C: using guessed type int (__stdcall *PremiumActionWin___vftable_)(int uiFlags);
// 98D68C: using guessed type int (__thiscall *PremiumActionWin___vftable_)(void *p, char);

//----- (004D2020) --------------------------------------------------------
void __thiscall PremiumActionWin::OnShowActionWin(PremiumActionWin *this)
{
  PremiumActionWin *v1; // esi@1
  PgFrameWork *v2; // edi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@2
  int XPos; // [sp+8h] [bp-8h]@2
  int YPos; // [sp+Ch] [bp-4h]@2

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor;
    XPos = 0;
    YPos = 0;
    ((void (__thiscall *)(PremiumActionWin *, int *, int *))v3)(v1, &XPos, &YPos);
    (*(void (__stdcall **)(int, int))(v2[21].m_kMsgQ.m_pBase->m_uiDumy[0] + 308))(XPos, YPos);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v2[21].m_kMsgQ.m_pBase);
  }
}

//----- (004D20A0) --------------------------------------------------------
void __thiscall PremiumActionWin::OnEmotionAction(PremiumActionWin *this, unsigned int lParam)
{
  char v2; // al@3
  PremiumActionWin *v3; // [sp-2h] [bp-4h]@1

  v3 = this;
  if ( !Char::CheckActState(g_pkMainChar, 500000) )
  {
    if ( !g_pkMainChar->m_bWillDead )
    {
      v2 = g_pkMainChar->m_byMode;
      if ( v2 != 4 )
      {
        if ( v2 != 5
          && (((int (__cdecl *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)(v3) != 4
           || g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0]) )
        {
          BYTE3(v3) = lParam;
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x67u, (char *)&v3 + 3, 1);
        }
      }
    }
  }
}

//----- (004D2120) --------------------------------------------------------
bool __thiscall ActionInvTabButWin::EatDropInstance(ActionInvTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PgCursor::ms_bKeepDrop = 1;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)();
  return 1;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (004D2140) --------------------------------------------------------
void __thiscall ActionIconWin::DoAction(ActionIconWin *this)
{
  ActionIconWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (004D2170) --------------------------------------------------------
void __thiscall ActionIconWin::DoRAction(ActionIconWin *this)
{
  ActionIconWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (004D21A0) --------------------------------------------------------
void __thiscall ActionIconWin::SetTopPlaneColor(ActionIconWin *this, float rad, float green, float blue, float alpha)
{
  ActionIconWin *v5; // esi@1
  NiScreenElements *v6; // eax@1
  NiColorA kCommonValue; // [sp+Ch] [bp-10h]@2

  v5 = this;
  v6 = this->m_spTopPlane.m_pObject;
  if ( v6 )
  {
    kCommonValue.r = rad / 255.0;
    kCommonValue.g = green / 255.0;
    kCommonValue.b = blue / 255.0;
    kCommonValue.a = alpha / 255.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  }
}

//----- (004D2220) --------------------------------------------------------
void __thiscall ActionWin::UpdateMeWin(ActionWin *this, float fCurTime)
{
  ActionWin *v2; // esi@1
  double v3; // st7@3
  float v4; // ST08_4@5
  float v5; // ST04_4@5
  float v6; // ST00_4@5
  int v7; // eax@8
  ActionIconWin *v8; // ecx@8
  float v9; // [sp+Ch] [bp-8h]@3

  v2 = this;
  if ( this->m_apkIconDefaultAction[8] )
  {
    if ( User::HPStone(&g_kUser) )
    {
      v3 = 0.0;
      v9 = 0.0;
    }
    else
    {
      v9 = 128.0;
      v3 = 0.0;
    }
    v4 = v3;
    v5 = v3;
    v6 = v3;
    ActionIconWin::SetTopPlaneColor(v2->m_apkIconDefaultAction[8], v6, v5, v4, v9);
  }
  switch ( User::GetMainCharClass(&g_kUser) )
  {
    default:
      if ( v2->m_apkIconDefaultAction[9] )
      {
        v7 = User::SPStone(&g_kUser);
        v8 = v2->m_apkIconDefaultAction[9];
        if ( v7 )
          ActionIconWin::SetTopPlaneColor(v8, 0.0, 0.0, 0.0, 0.0);
        else
          ActionIconWin::SetTopPlaneColor(v8, 0.0, 0.0, 0.0, 128.0);
      }
      break;
    case 0x1A:
    case 0x1B:
      return;
  }
}

//----- (004D2310) --------------------------------------------------------
void __thiscall PremiumActionIcon::OnFirstHitWin(PremiumActionIcon *this)
{
  PremiumActionIcon *v1; // esi@1
  Item *v2; // edi@1
  ItemInfoWin *v3; // ecx@3

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
  v2 = ItemIcon::GetItem(&v1->baseclass_0);
  if ( v2 && PgWin::GetParentWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0) )
  {
    v3 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v3 )
    {
      ItemInfoWin::SetItemInfo(v3, v2);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004D2360) --------------------------------------------------------
void __thiscall PremiumActionIcon::DoAction(PremiumActionIcon *this)
{
  PremiumActionIcon *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (004D2390) --------------------------------------------------------
void __thiscall PremiumActionIcon::DoRAction(PremiumActionIcon *this)
{
  PremiumActionIcon *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (004D23C0) --------------------------------------------------------
void __thiscall PremiumActionWin::Refresh(PremiumActionWin *this)
{
  PremiumActionWin *v1; // eax@1
  signed int v2; // ebx@1
  unsigned int v3; // ecx@1
  ItemIcon **v4; // edi@1
  int v5; // esi@4
  ActionViewInfo *v6; // esi@5
  NiImageConverter *v7; // eax@8
  NiPixelData *v8; // eax@8
  NiTexture::FormatPrefs kPrefs; // [sp+Ch] [bp-118h]@9
  unsigned int i; // [sp+18h] [bp-10Ch]@1
  char acFileName[260]; // [sp+1Ch] [bp-108h]@8
  unsigned int v12; // [sp+120h] [bp-4h]@1
  int v13; // [sp+124h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  v3 = (char *)&g_kInventory.m_aspRewardInv[107] - (char *)this;
  v4 = (ItemIcon **)v1->m_apkPremiumActionIcon;
  for ( i = v3; ; v3 = i )
  {
    if ( (unsigned int)v2 < 0x2A )
    {
      v5 = *(int *)((char *)v4 + v3);
      if ( v5 )
      {
        ItemIcon::SetItem(*v4, (Item *)v5, 1);
        v6 = ActionViewTable::GetByInxName((char *)(*(_DWORD *)(v5 + 112) + 2));
        if ( v6 )
        {
          if ( !Folder::m_bInit )
            Folder::Init();
          sprintf(acFileName, "%s\\Icon\\%s.dds");
          v7 = NiImageConverter::GetImageConverter();
          v8 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v7->baseclass_0.vfptr[2].__vecDelDtor)(
                                v7,
                                acFileName,
                                0);
          if ( v8 )
          {
            kPrefs.m_ePixelLayout = 6;
            kPrefs.m_eAlphaFmt = 3;
            kPrefs.m_eMipMapped = 0;
            v8 = (NiPixelData *)NiSourceTexture::Create(v8, &kPrefs);
          }
          ((void (__stdcall *)(NiPixelData *, _DWORD, signed int, signed int))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
            v8,
            v6->nIconNum,
            32,
            32);
        }
      }
    }
    ++v2;
    ++v4;
    if ( v2 >= 42 )
      break;
  }
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D24E0) --------------------------------------------------------
void __thiscall PremiumActionWin::OnInvLClick(PremiumActionWin *this, unsigned int uiInvIndex)
{
  PremiumActionWin *v2; // esi@1
  Item *v3; // eax@1
  Item *v4; // edi@1
  ActionViewInfo *v5; // eax@2

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkPremiumActionIcon[uiInvIndex]->baseclass_0);
  v4 = v3;
  if ( v3 )
  {
    v2->m_kDropContents.m_eSenderType = 21;
    v2->m_kDropContents.m_eType = 0;
    v2->m_kDropContents.m_apvParam[2] = (void *)uiInvIndex;
    v2->m_kDropContents.m_uiSenderIndex = 2;
    v5 = ActionViewTable::GetByInxName(v3->m_pkInfo->InxName);
    if ( v5 )
      v2->m_kDropContents.nTableIndexNum = v5->nIndex;
    v2->m_kDropContents.m_apvParam[0] = v4;
    v2->m_kDropContents.m_apvParam[1] = 0;
    v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
    v2->m_kDrop.m_pkSender = (PgWin *)v2;
    PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
    SoundMgr::PlayItemPutSound(&g_kSoundMgr, v4->m_kStruct.itemid);
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (004D2590) --------------------------------------------------------
void __thiscall PremiumActionWin::OnInvRClick(PremiumActionWin *this, unsigned int uiInvIndex)
{
  PremiumActionWin::OnEmotionAction(this, uiInvIndex);
}

//----- (004D25A0) --------------------------------------------------------
bool __thiscall PremiumActionWin::Change(PremiumActionWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex)
{
  PremiumActionWin *v4; // ebx@1
  ActionViewInfo *v5; // esi@4
  NiSourceTexture *v6; // eax@7
  bool result; // al@8
  char acFileName[260]; // [sp+Ch] [bp-108h]@7
  unsigned int v9; // [sp+110h] [bp-4h]@1
  int v10; // [sp+114h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v4 = this;
  if ( uiInvType != 15 || uiInvIndex >= 0x2A )
  {
    result = 0;
  }
  else
  {
    ItemIcon::SetItem(&this->m_apkPremiumActionIcon[uiInvIndex]->baseclass_0, pkItem, 1);
    if ( pkItem )
    {
      v5 = ActionViewTable::GetByInxName(pkItem->m_pkInfo->InxName);
      if ( v5 )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        sprintf(acFileName, "%s\\Icon\\%s.dds");
        v6 = PgUtil::LoadSourceTexture(acFileName);
        ((void (__stdcall *)(NiSourceTexture *, _DWORD, signed int, signed int))v4->m_apkPremiumActionIcon[uiInvIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
          v6,
          v5->nIconNum,
          32,
          32);
      }
    }
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D2680) --------------------------------------------------------
int __thiscall PremiumActionWin::GetIconPosIndex(PremiumActionWin *this, int ActionViewInfoID)
{
  char *v2; // ecx@1
  Item *v3; // eax@4
  const char *v4; // ebx@5
  unsigned int v5; // edi@7
  void *v6; // eax@11
  char *v8; // [sp+Ch] [bp-Ch]@1
  int i; // [sp+10h] [bp-8h]@1
  ItemIcon **v10; // [sp+14h] [bp-4h]@1

  v2 = (char *)this->m_apkPremiumActionIcon;
  i = 0;
  v8 = v2;
  v10 = (ItemIcon **)v2;
  while ( 1 )
  {
    if ( v2 )
    {
      v3 = ItemIcon::GetItem(*v10);
      if ( v3 )
      {
        v4 = v3->m_pkInfo->InxName;
        if ( v3->m_pkInfo != (ItemInfo *)-2 )
        {
          if ( *v4 )
          {
            v5 = 0;
            if ( ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
            {
              while ( strcmp(
                        (const char *)CDataReader::GetRecord(
                                        (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                                        v5)
                      + 1,
                        v4) )
              {
                ++v5;
                if ( v5 >= ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
                  goto LABEL_13;
              }
              v6 = CDataReader::GetRecord(
                     (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                     v5);
              if ( v6 )
              {
                if ( *(_BYTE *)v6 == (_BYTE)ActionViewInfoID )
                  return i;
              }
            }
          }
        }
      }
    }
LABEL_13:
    ++v10;
    ++i;
    if ( i >= 42 )
      return -1;
    v2 = v8;
  }
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (004D2760) --------------------------------------------------------
int __thiscall ActionWin::GetIconPosIndex(ActionWin *this, int ActionViewInfoID)
{
  int result; // eax@1
  char *v3; // esi@1
  int v4; // edx@2
  int v5; // edx@3
  int v6; // edx@4
  int v7; // edx@8
  int v8; // edx@9

  result = 0;
  v3 = (char *)this->m_apkIconEmotion;
  while ( 1 )
  {
    v4 = *((_DWORD *)v3 - 18);
    if ( v4 )
    {
      v5 = *(_DWORD *)(v4 + 392);
      v6 = v5 ? *(_BYTE *)v5 : -1;
      if ( ActionViewInfoID == v6 )
        break;
    }
    if ( *(_DWORD *)v3 )
    {
      v7 = *(_DWORD *)(*(_DWORD *)v3 + 392);
      v8 = v7 ? *(_BYTE *)v7 : -1;
      if ( ActionViewInfoID == v8 )
        break;
    }
    ++result;
    v3 += 4;
    if ( result >= 18 )
      return PremiumActionWin::GetIconPosIndex(this->m_pkPremiumActionWin, ActionViewInfoID);
  }
  return result;
}

//----- (004D27D0) --------------------------------------------------------
void __thiscall ActionWin::OnEmotionAction(ActionWin *this, unsigned int lParam)
{
  ActionWin *v2; // esi@1
  char v3; // al@3
  ActionIconWin *v4; // eax@5
  char *v5; // esi@5
  char *v6; // edi@5
  char v7; // bl@6
  unsigned __int16 v8; // di@8
  unsigned __int16 *v9; // ebx@8
  GameFrameWork *v10; // ecx@8
  MHEmotion *v11; // eax@8
  AbStateInfecteeVtbl *v12; // esi@11
  int v13; // eax@11
  NiPoint3 kGroundPos; // [sp+4h] [bp-1Ch]@8
  mhCharEmotionInfo Info; // [sp+10h] [bp-10h]@8
  ActionWin *v16; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  v16 = this;
  if ( !Char::CheckActState(g_pkMainChar, 500000) )
  {
    if ( !g_pkMainChar->m_bWillDead )
    {
      v3 = g_pkMainChar->m_byMode;
      if ( v3 != 4 )
      {
        if ( v3 != 5 )
        {
          v4 = v2->m_apkIconEmotion[lParam];
          v5 = (char *)v4->m_pkActionViewInfo;
          v6 = (char *)v4->m_pkLinkedAction;
          if ( v5 )
          {
            v7 = *v5;
            if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
            {
              if ( (unsigned __int8)((int (*)(void))v16->m_apkIconEmotion[lParam]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
              {
                v8 = mhObj;
                v9 = (unsigned __int16 *)dword_AA5140;
                v10 = (GameFrameWork *)v16->baseclass_0.m_pkFrameWork;
                *(_DWORD *)&Info.ActPos = *(_DWORD *)WantedActPos;
                GameFrameWork::GetGroundPosCam(v10, &kGroundPos);
                v11 = MiniHouseEmotionTab::GetNonMenuEmotion(*v9, *v5);
                if ( v8 != -1 && v11 )
                {
                  MiniHouseIndoor::StartMHCharEmotion(
                    &g_kWorld.m_MiniHouseIndoorMode,
                    &kGroundPos,
                    (unsigned __int8)Info.ActPos,
                    v11->ActionIndex);
                }
                else
                {
                  ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
                  v12 = g_pkMainChar->baseclass_0.vfptr;
                  v13 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
                  ((void (__thiscall *)(Char *, int))v12[6].Affect)(g_pkMainChar, v13);
                }
              }
            }
            else
            {
              if ( v6 )
                v7 = *v6;
              GameFrameWork::NcActEmoticon_Cmd((GameFrameWork *)v16->baseclass_0.m_pkFrameWork, v7);
            }
          }
        }
      }
    }
  }
}
// AA5140: using guessed type int dword_AA5140;

//----- (004D2930) --------------------------------------------------------
void __thiscall ActionWin::OnPremiumAction(ActionWin *this)
{
  ActionWin *v1; // esi@1
  int XPos; // [sp+4h] [bp-8h]@2
  int YPos; // [sp+8h] [bp-4h]@2

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  if ( v1->m_pkPremiumActionWin )
  {
    XPos = 0;
    YPos = 0;
    ((void (__thiscall *)(ActionWin *, int *, int *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
      v1,
      &XPos,
      &YPos);
    ((void (__stdcall *)(int, int))v1->m_pkPremiumActionWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      XPos,
      YPos);
    PremiumActionWin::Refresh(v1->m_pkPremiumActionWin);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkPremiumActionWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (004D29B0) --------------------------------------------------------
bool __thiscall ActionWin::Change(ActionWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex)
{
  bool result; // al@3

  if ( uiInvType != 15 || uiInvIndex >= 0x2A )
  {
    result = 0;
  }
  else
  {
    PremiumActionWin::Change(this->m_pkPremiumActionWin, 0xFu, pkItem, uiInvIndex);
    result = 1;
  }
  return result;
}

//----- (004D29E0) --------------------------------------------------------
void __thiscall PremiumActionWin::OnCommand(PremiumActionWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@5

  switch ( wParam )
  {
    case 6u:
      PremiumActionWin::OnInvLClick(this, lParam);
      break;
    case 5u:
      PremiumActionWin::OnEmotionAction(this, lParam);
      break;
    case 3u:
      PremiumActionWin::OnShowActionWin(this);
      break;
    case 7u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "ActionWin_Premium");
      break;
    default:
      return;
  }
}

//----- (004D2A50) --------------------------------------------------------
void __thiscall PremiumActionWin::SetMHActionState(PremiumActionWin *this, bool bMHEmotionStart)
{
  unsigned __int16 *v2; // ebx@3
  MHEmotion *v3; // edi@3
  ItemIcon **v4; // esi@3
  Item *v5; // eax@5
  char *v6; // eax@6
  double v7; // st7@11
  float v8; // ST08_4@13
  float v9; // ST04_4@13
  float v10; // ST00_4@13
  int bEnable; // [sp+24h] [bp-4h]@0
  signed int bMHEmotionStarta; // [sp+30h] [bp+8h]@3

  LOBYTE(bEnable) = 0;
  if ( !bMHEmotionStart )
    LOBYTE(bEnable) = 1;
  v2 = (unsigned __int16 *)dword_AA5140;
  v3 = 0;
  v4 = (ItemIcon **)this->m_apkPremiumActionIcon;
  bMHEmotionStarta = 42;
  do
  {
    if ( *v4 )
    {
      v5 = ItemIcon::GetItem(*v4);
      if ( v5 )
      {
        v6 = (char *)ActionViewTable::GetByInxName(v5->m_pkInfo->InxName);
        if ( v6 )
        {
          if ( v2 )
            v3 = MiniHouseEmotionTab::GetNonMenuEmotion(*v2, *v6);
          if ( !v3 )
          {
            if ( (_BYTE)bEnable )
              v7 = 1.0;
            else
              v7 = 0.44999999;
            v8 = v7;
            v9 = v7;
            v10 = v7;
            IconWin::IconDisable(&(*v4)->baseclass_0, v10, v9, v8);
            ((void (__stdcall *)(int))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
          }
        }
      }
    }
    ++v4;
    --bMHEmotionStarta;
  }
  while ( bMHEmotionStarta );
}
// AA5140: using guessed type int dword_AA5140;

//----- (004D2B20) --------------------------------------------------------
void __thiscall ActionIconWin::ActionIconWin(ActionIconWin *this)
{
  ActionIconWin *v1; // esi@1
  NiAVObject *v2; // ecx@1
  NiProperty *v3; // eax@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  NiAVObject *v6; // eax@4
  NiProperty *v7; // eax@4
  void *v8; // eax@6
  void *v9; // edi@6
  NiAVObject *v10; // ecx@11
  void *v11; // edi@13
  void *v12; // eax@14
  float v13; // eax@15
  NiScreenElements *v14; // edi@18
  NiScreenElements *v15; // eax@26
  void *v16; // eax@26
  void *v17; // edi@26
  NiAVObject *v18; // ecx@29
  void *v19; // eax@29
  void *v20; // edi@29
  void *v21; // eax@30
  NiAVObject *v22; // ecx@32
  NiNode *v23; // edi@33
  NiColorA kCommonValue; // [sp+2Ch] [bp-3Ch]@26
  void *v25; // [sp+3Ch] [bp-2Ch]@14
  ActionIconWin *v26; // [sp+40h] [bp-28h]@1
  NiPointer<NiAlphaProperty> spAlphaProp; // [sp+44h] [bp-24h]@6
  float blue; // [sp+48h] [bp-20h]@13
  float green; // [sp+4Ch] [bp-1Ch]@13
  float rad; // [sp+50h] [bp-18h]@13
  NiPointer<NiNode> spNode; // [sp+54h] [bp-14h]@1
  float v32; // [sp+58h] [bp-10h]@13
  int v33; // [sp+64h] [bp-4h]@1

  v1 = this;
  v26 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionIconWin::_vftable_;
  v33 = 0;
  v1->m_spBackPlane.m_pObject = 0;
  v1->m_spTopPlane.m_pObject = 0;
  LOBYTE(v33) = 2;
  IconWin::CreateGeometry(&v1->baseclass_0, 0x20u, 0x20u);
  v2 = (NiAVObject *)v1->baseclass_0.m_spGeom.m_pObject;
  v1->m_pkFrameWork = 0;
  v1->m_pkActionViewInfo = 0;
  v1->m_pkLinkedAction = 0;
  v3 = NiAVObject::GetProperty(v2, 0);
  NiAVObject::DetachProperty(&v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v3);
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  LOBYTE(v33) = 3;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\IconMaterial.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( spNode.m_pObject )
  {
    v6 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Plane01");
    v7 = NiAVObject::GetProperty(v6, 0);
    if ( v7 )
    {
      NiAVObject::AttachProperty(
        &v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v7);
    }
    else
    {
      v8 = operator new(0x20u);
      v9 = v8;
      spAlphaProp.m_pObject = (NiAlphaProperty *)v8;
      LOBYTE(v33) = 4;
      if ( v8 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v8);
        *(_DWORD *)v9 = &NiAlphaProperty::_vftable_;
        *((_WORD *)v9 + 14) = 236;
        *((_BYTE *)v9 + 30) = 0;
      }
      else
      {
        v9 = 0;
      }
      spAlphaProp.m_pObject = (NiAlphaProperty *)v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)v9 + 1);
      *((_WORD *)v9 + 14) |= 1u;
      v10 = (NiAVObject *)v1->baseclass_0.m_spGeom.m_pObject;
      LOBYTE(v33) = 5;
      NiAVObject::AttachProperty(v10, (NiProperty *)v9);
      LOBYTE(v33) = 3;
      if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    }
    v32 = 0.0 / 255.0;
    rad = v32;
    green = v32;
    blue = v32;
    *(float *)&spAlphaProp.m_pObject = v32;
    v11 = operator new(0xC4u);
    LODWORD(v32) = v11;
    LOBYTE(v33) = 6;
    if ( v11 )
    {
      v12 = operator new(0x70u);
      v25 = v12;
      LOBYTE(v33) = 7;
      if ( v12 )
      {
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v12, 0, 1, 0, 1, 1, 4, 1, 2, 1);
        LOBYTE(v33) = 6;
        NiScreenElements::NiScreenElements((NiScreenElements *)v11, LODWORD(v13));
        v32 = v13;
      }
      else
      {
        LOBYTE(v33) = 6;
        NiScreenElements::NiScreenElements((NiScreenElements *)v11, 0);
        v32 = v13;
      }
    }
    else
    {
      v32 = 0.0;
      LODWORD(v13) = 0;
    }
    v14 = v1->m_spTopPlane.m_pObject;
    LOBYTE(v33) = 3;
    if ( v14 != LODWORD(v13) )
    {
      if ( v14 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v14 )
          v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v14,
            1u);
        v13 = v32;
      }
      v1->m_spTopPlane.m_pObject = (NiScreenElements *)LODWORD(v13);
      if ( LODWORD(v13) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v13) + 4));
    }
    NiScreenElementsData::Insert(
      (NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      4u,
      0,
      0);
    NiScreenElementsData::SetRectangle(
      (NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      0.0,
      0.0,
      32.0,
      32.0);
    v15 = v1->m_spTopPlane.m_pObject;
    kCommonValue.r = rad;
    kCommonValue.g = green;
    kCommonValue.b = blue;
    kCommonValue.a = *(float *)&spAlphaProp.m_pObject;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v15->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    v16 = operator new(0x20u);
    v17 = v16;
    v25 = v16;
    LOBYTE(v33) = 8;
    if ( v16 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v16);
      *(_DWORD *)v17 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v17 + 14) = 236;
      *((_BYTE *)v17 + 30) = 0;
    }
    else
    {
      v17 = 0;
    }
    *((_WORD *)v17 + 14) |= 1u;
    v18 = (NiAVObject *)v1->m_spTopPlane.m_pObject;
    LOBYTE(v33) = 3;
    NiAVObject::AttachProperty(v18, (NiProperty *)v17);
    v19 = operator new(0x28u);
    v20 = v19;
    v25 = v19;
    LOBYTE(v33) = 9;
    if ( v19 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v19);
      *((_WORD *)v20 + 14) = 0;
      *(_DWORD *)v20 = &NiVertexColorProperty::_vftable_;
      *((_DWORD *)v20 + 8) = 0;
      *((_DWORD *)v20 + 9) = 1;
      v21 = v20;
    }
    else
    {
      v21 = 0;
    }
    *((_DWORD *)v21 + 8) = 1;
    *((_DWORD *)v21 + 9) = 0;
    v22 = (NiAVObject *)v1->m_spTopPlane.m_pObject;
    LOBYTE(v33) = 3;
    NiAVObject::AttachProperty(v22, (NiProperty *)v21);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    NiNode::AttachChild(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    LOBYTE(v33) = 2;
    if ( spNode.m_pObject )
    {
      v23 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v23 )
          v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
      }
    }
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 98D19C: using guessed type int (__stdcall *ActionIconWin___vftable_)(int uiFlags);
// 98D1BC: using guessed type int (__thiscall *ActionIconWin___vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D2F00) --------------------------------------------------------
void __thiscall ActionWin::OnEmotionSlot_RClick(ActionWin *this, unsigned int lParam)
{
  ActionWin::OnEmotionAction(this, lParam);
}

//----- (004D2F10) --------------------------------------------------------
void __thiscall ActionWin::SetMHActionState(ActionWin *this, bool bMHEmotionStart)
{
  double v2; // st7@3
  double v3; // st6@3
  unsigned __int16 *v4; // ebx@3
  MHEmotion *v5; // edi@3
  IconWin **v6; // esi@3
  char *v7; // eax@5
  float v8; // ST08_4@11
  float v9; // ST04_4@11
  float v10; // ST00_4@11
  ActionWin *v11; // [sp+24h] [bp-Ch]@1
  signed int v12; // [sp+28h] [bp-8h]@3
  int bEnable; // [sp+2Ch] [bp-4h]@0

  v11 = this;
  LOBYTE(bEnable) = 0;
  if ( !bMHEmotionStart )
    LOBYTE(bEnable) = 1;
  v2 = 0.44999999;
  v3 = 1.0;
  v4 = (unsigned __int16 *)dword_AA5140;
  v5 = 0;
  v6 = (IconWin **)this->m_apkIconEmotion;
  v12 = 18;
  do
  {
    if ( *v6 )
    {
      v7 = (char *)(*v6)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spControllers.m_pObject;
      if ( v7 )
      {
        if ( v4 )
        {
          v2 = 0.44999999;
          v5 = MiniHouseEmotionTab::GetNonMenuEmotion(*v4, *v7);
          v3 = 1.0;
        }
        if ( !v5 )
        {
          if ( (_BYTE)bEnable )
            v2 = v3;
          v8 = v2;
          v9 = v2;
          v10 = v2;
          IconWin::IconDisable(*v6, v10, v9, v8);
          ((void (__stdcall *)(int))(*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
          v2 = 0.44999999;
          v3 = 1.0;
        }
      }
    }
    ++v6;
    --v12;
  }
  while ( v12 );
  PremiumActionWin::SetMHActionState(v11->m_pkPremiumActionWin, bMHEmotionStart);
}
// AA5140: using guessed type int dword_AA5140;

//----- (004D2FF0) --------------------------------------------------------
ActionIconWin *__cdecl ActionIconWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  ActionIconWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x198u);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    ActionIconWin::ActionIconWin((ActionIconWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *, PgFrameWork *))(*(_DWORD *)v7 + 608))(
                          v7,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (ActionIconWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (004D3130) --------------------------------------------------------
ActionWin *__cdecl ActionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ActionWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x250u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ActionWin::ActionWin((ActionWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ActionWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004D3260) --------------------------------------------------------
PremiumActionIcon *__cdecl PremiumActionIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  PremiumActionIcon *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1C4u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v3);
    *(_DWORD *)v4 = &PremiumActionIcon::_vftable_;
    *((_DWORD *)v4 + 58) = &PremiumActionIcon::_vftable_;
    *((_DWORD *)v4 + 112) = -1;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 612))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (PremiumActionIcon *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 98CCC0: using guessed type int (__stdcall *PremiumActionIcon___vftable_)(int uiFlags);
// 98CCDC: using guessed type int (__thiscall *PremiumActionIcon___vftable_)(void *p, char);

//----- (004D33B0) --------------------------------------------------------
PremiumActionWin *__cdecl PremiumActionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PremiumActionWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x260u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &PremiumActionWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PremiumActionWin::_vftable_;
    *((_DWORD *)v2 + 130) = &PgWinDrop::_vftable_;
    *((_DWORD *)v2 + 132) = 0;
    *((_DWORD *)v2 + 134) = &DropContents::_vftable_;
    *((_WORD *)v2 + 298) = -1;
    *((_DWORD *)v2 + 150) = 0;
    *((_DWORD *)v2 + 131) = (char *)v2 + 536;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PremiumActionWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 98D66C: using guessed type int (__stdcall *PremiumActionWin___vftable_)(int uiFlags);
// 98D68C: using guessed type int (__thiscall *PremiumActionWin___vftable_)(void *p, char);

//----- (004D3520) --------------------------------------------------------
bool __thiscall PremiumActionWin::Create(PremiumActionWin *this, PgFrameWork *pkFrameWork)
{
  PremiumActionWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  void *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  PgSprData *v8; // eax@10
  int v9; // edi@11
  int v10; // ebx@11
  NiSourceTexture *v11; // eax@11
  PgSprData *v12; // eax@14
  PgSprData *v13; // eax@14
  PgFont *v14; // eax@16
  PgWinText *v15; // eax@16
  NiRefObjectVtbl *v16; // edx@16
  char *v17; // eax@16
  PgSprData *v18; // eax@16
  PgWinSpr *v19; // eax@16
  PgSprData *v20; // eax@16
  PgWinSpr *v21; // eax@16
  NiSourceTexture *v22; // eax@16
  PgSprData *v23; // eax@17
  char *v24; // eax@17
  PgSprData *v25; // eax@17
  PgWinSpr *v26; // eax@17
  PgSprData *v27; // eax@17
  PgSprData *v28; // eax@17
  PgWinSpr *v29; // eax@17
  char *v30; // eax@17
  PgSprData *v31; // eax@17
  PgSprData *v32; // eax@19
  PgWinSpr *v33; // eax@19
  NiRefObjectVtbl *v34; // edx@19
  PgFont *v35; // ST34_4@19
  unsigned int v36; // ST30_4@19
  unsigned int v37; // eax@19
  PgWinText *v38; // eax@19
  NiRefObjectVtbl *v39; // edx@19
  char *v40; // eax@19
  PgSprData *v41; // eax@20
  ItemIcon *v42; // eax@20
  IconWin **v43; // ecx@20
  NiSourceTexture *v44; // ecx@20
  NiNode *v45; // esi@21
  const char *v46; // [sp-20h] [bp-90h]@12
  int *v47; // [sp-1Ch] [bp-8Ch]@12
  int *v48; // [sp-18h] [bp-88h]@12
  NiSourceTexture *v49; // [sp-14h] [bp-84h]@12
  unsigned int v50; // [sp-10h] [bp-80h]@1
  unsigned int uiHeight; // [sp+0h] [bp-70h]@14
  unsigned int uiWidth; // [sp+4h] [bp-6Ch]@14
  NiRefObjectVtbl *pkBut; // [sp+8h] [bp-68h]@16
  NiSourceTexture *pkSprWin; // [sp+Ch] [bp-64h]@4
  PgSprData *i; // [sp+10h] [bp-60h]@16
  NiPointer<NiNode> spNode; // [sp+14h] [bp-5Ch]@1
  int uiTop; // [sp+18h] [bp-58h]@10
  int uiLeft; // [sp+1Ch] [bp-54h]@10
  char acShapeName[64]; // [sp+20h] [bp-50h]@20
  unsigned int v60; // [sp+60h] [bp-10h]@1
  int v61; // [sp+6Ch] [bp-4h]@1
  int v62; // [sp+70h] [bp+0h]@1

  v60 = (unsigned int)&v62 ^ __security_cookie;
  v50 = (unsigned int)&v62 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v61 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ActionWin_Premium.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = MenuTexMgr::GetTexture(4u);
  pkSprWin = (NiSourceTexture *)v5;
  if ( !v5
    || (v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v5),
        !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "PremiumActionWin", 0)) )
  {
    v6 = spNode.m_pObject;
    v61 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v9 = uiLeft;
  v10 = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v49 = v11;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  else
  {
    v49 = 0;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v46, v47, v48, v49);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkSprWin);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    && (v14 = Font::Get(MAIN_MENU),
        v15 = PgWinText::CreateWin(
                uiLeft - v9,
                uiTop - v10,
                uiWidth,
                uiHeight,
                v14,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        i = (PgSprData *)v15,
        v16[122].__vecDelDtor((NiRefObject *)v15, 1u),
        ((void (__stdcall *)(__int64 *))i->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        pkBut = i->baseclass_0.vfptr + 118,
        v17 = TextData::Get(0x90A89DE5u),
        pkBut->__vecDelDtor(i, v17),
        ((void (__stdcall *)(_DWORD))i->baseclass_0.vfptr[60].__vecDelDtor)(0),
        v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkSprWin),
        v19 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v19,
          0),
        v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkSprWin),
        v21 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v21,
          0),
        v22 = MenuTexMgr::GetTexture(0x12u),
        (i = (PgSprData *)v22) != 0) )
  {
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab00Off", &uiLeft, &uiTop, v22);
    pkBut = (NiRefObjectVtbl *)PgWinBut::CreateWin(
                                 uiLeft - v9,
                                 uiTop - v10,
                                 v23,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 3u,
                                 0,
                                 0);
    pkBut[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkToolTipWin;
    v24 = TextData2::Get(0x27538081u);
    PgWin::SetToolTipWinText((PgWin *)pkBut, v24);
    v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab00On", &uiLeft, &uiTop, (NiSourceTexture *)i);
    v26 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkActionInvTab = v26;
    ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      v26,
      0,
      v50);
    ((void (__stdcall *)(_DWORD))v2->m_pkActionInvTab->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01Off", &uiLeft, &uiTop, pkSprWin);
    PgWinBut::CreateWin(uiLeft - v9, uiTop - v10, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01On", &uiLeft, &uiTop, pkSprWin);
    v29 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPremiumActionInvTab = v29;
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v29,
      1u);
    ((void (__stdcall *)(signed int))v2->m_pkPremiumActionInvTab->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v2->m_pkPremiumActionInvTab->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v30 = TextData2::Get(0x275F7897u);
    PgWin::SetToolTipWinText(&v2->m_pkPremiumActionInvTab->baseclass_0, v30);
    v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num01", &uiLeft, &uiTop, pkSprWin);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v31, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkSprWin);
    PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - v10, i, &v2->baseclass_0.baseclass_0.baseclass_0);
    pkBut = (NiRefObjectVtbl *)MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)pkBut);
      PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v9, uiTop - v10, i, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
    }
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01", &uiLeft, &uiTop, pkSprWin);
    v33 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v34 = v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkSprWin = (NiSourceTexture *)v33;
    ((void (__thiscall *)(PgWinSpr *))v34[60].__vecDelDtor)(v33);
    v35 = Font::Get(MAIN_MENU);
    v36 = ((int (*)(void))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v37 = ((int (*)(void))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v38 = PgWinText::CreateWin(uiLeft - v9, uiTop - v10, v37, v36, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v39 = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (PgSprData *)v38;
    v39[122].__vecDelDtor((NiRefObject *)v38, 5u);
    ((void (__stdcall *)(__int64 *))i->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    pkBut = i->baseclass_0.vfptr + 118;
    v40 = TextData2::Get(0x7B12D0DCu);
    pkBut->__vecDelDtor(i, v40);
    ((void (__stdcall *)(_DWORD))i->baseclass_0.vfptr[60].__vecDelDtor)(0);
    i = 0;
    pkSprWin = (NiSourceTexture *)v2->m_apkPremiumActionIcon;
    do
    {
      pkBut = (NiRefObjectVtbl *)((char *)&i->baseclass_0.vfptr + 1);
      sprintf(acShapeName, "IconSlot%03d");
      v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, 0);
      PgWinSpr::CreateWin(uiLeft - v9, uiTop - v10, v41, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v42 = (ItemIcon *)PremiumActionIcon::CreateWin(
                          uiLeft - v9 + 1,
                          uiTop - v10 + 1,
                          &v2->baseclass_0.baseclass_0.baseclass_0);
      pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)v42;
      ItemIcon::SetItem(v42, 0, 1);
      (*((void (__stdcall **)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor + 129))(6);
      (*((void (__stdcall **)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor + 140))(5);
      v43 = (IconWin **)pkSprWin;
      pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkItemInfoWin;
      IconWin::ShowFocus(*v43, 1);
      v44 = pkSprWin;
      pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[112].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))i;
      i = (PgSprData *)pkBut;
      pkSprWin = (NiSourceTexture *)((char *)v44 + 4);
    }
    while ( (signed int)pkBut < 42 );
    v45 = spNode.m_pObject;
    v61 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v45 )
      v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
    result = 1;
  }
  else
  {
    v61 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D3C60) --------------------------------------------------------
ActionInvTabButWin *__cdecl ActionInvTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  ActionInvTabButWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x144u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v5);
    *(_DWORD *)v6 = &ActionInvTabButWin::_vftable_;
    *((_DWORD *)v6 + 58) = &ActionInvTabButWin::_vftable_;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int))(*(_DWORD *)v6 + 560))(
                          v6,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (ActionInvTabButWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 98CF48: using guessed type int (__stdcall *ActionInvTabButWin___vftable_)(int uiFlags);
// 98CF64: using guessed type int (__thiscall *ActionInvTabButWin___vftable_)(void *p, char);

//----- (004D3DB0) --------------------------------------------------------
bool __thiscall ActionWin::Create(ActionWin *this, PgFrameWork *pkFrameWork)
{
  ActionWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  void *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@10
  PgSprData *v8; // eax@11
  int v9; // edi@12
  int v10; // ebx@12
  NiSourceTexture *v11; // eax@12
  PgSprData *v12; // eax@15
  PgSprData *v13; // eax@15
  PgFont *v14; // eax@17
  PgWinText *v15; // eax@17
  NiRefObjectVtbl *v16; // edx@17
  char *v17; // eax@17
  PgSprData *v18; // eax@17
  PgWinSpr *v19; // eax@17
  PgSprData *v20; // eax@17
  PgWinSpr *v21; // eax@17
  NiSourceTexture *v22; // eax@17
  PgSprData *v23; // eax@18
  PgWinBut *v24; // eax@18
  NiSourceTexture *v25; // ST30_4@18
  PgSprData *v26; // eax@18
  PgWinSpr *v27; // eax@18
  char *v28; // eax@18
  PgSprData *v29; // eax@18
  char *v30; // eax@18
  PgSprData *v31; // eax@18
  PgWinSpr *v32; // eax@18
  PgSprData *v33; // eax@18
  void *v34; // eax@18
  NiRefObjectVtbl *v35; // edx@18
  PgSprData *v36; // eax@20
  PgWinSpr *v37; // eax@20
  NiRefObjectVtbl *v38; // edx@20
  PgFont *v39; // ST54_4@20
  unsigned int v40; // ST50_4@20
  unsigned int v41; // eax@20
  PgWinText *v42; // eax@20
  NiRefObjectVtbl *v43; // edx@20
  char *v44; // eax@20
  PgSprData *v45; // eax@20
  PgWinSpr *v46; // eax@20
  NiRefObjectVtbl *v47; // edx@20
  PgFont *v48; // ST54_4@20
  unsigned int v49; // ST50_4@20
  unsigned int v50; // eax@20
  PgWinText *v51; // eax@20
  NiRefObjectVtbl *v52; // edx@20
  char *v53; // eax@20
  unsigned int v54; // eax@20
  PgSprData *v55; // eax@21
  unsigned int v56; // ecx@21
  int v57; // edx@21
  PgSprData *v58; // eax@23
  unsigned int v59; // eax@23
  int v60; // edx@23
  int v61; // ecx@23
  int v62; // eax@24
  int v63; // edi@28
  void *v64; // eax@29
  __int16 v65; // dx@30
  int v66; // eax@31
  ActionIconWin *v67; // eax@34
  int *v68; // ecx@34
  int v69; // edx@34
  ActionIconWin *v70; // eax@37
  void *v71; // ecx@37
  PgSprData *v72; // edx@37
  void *v73; // eax@37
  int *v74; // ecx@37
  int v75; // edx@37
  signed int v76; // ecx@39
  ActionViewInfo *v77; // eax@42
  PremiumActionWin *v78; // eax@48
  PremiumActionWin *v79; // edi@48
  int v80; // eax@49
  NiNode *v81; // esi@56
  const char *v82; // [sp+54h] [bp-3DCh]@13
  int *v83; // [sp+58h] [bp-3D8h]@13
  int *v84; // [sp+5Ch] [bp-3D4h]@13
  volatile LONG *v85; // [sp+60h] [bp-3D0h]@6
  NiSourceTexture *v86; // [sp+60h] [bp-3D0h]@13
  unsigned int v87; // [sp+64h] [bp-3CCh]@1
  unsigned int uiHeight; // [sp+74h] [bp-3BCh]@15
  unsigned int uiWidth; // [sp+78h] [bp-3B8h]@15
  int iOffY; // [sp+7Ch] [bp-3B4h]@12
  PgFrameWork *v91; // [sp+80h] [bp-3B0h]@1
  int v92; // [sp+84h] [bp-3ACh]@28
  ActionIconWin **v93; // [sp+88h] [bp-3A8h]@40
  int v94; // [sp+8Ch] [bp-3A4h]@28
  unsigned int RecordNo; // [sp+90h] [bp-3A0h]@21
  unsigned int i; // [sp+94h] [bp-39Ch]@22
  unsigned int v97; // [sp+98h] [bp-398h]@20
  NiSourceTexture *pkBut; // [sp+9Ch] [bp-394h]@17
  PgSprData *pkInfo; // [sp+A0h] [bp-390h]@18
  void *pkTexture; // [sp+A4h] [bp-38Ch]@4
  char *pkTextWin; // [sp+A8h] [bp-388h]@17
  NiPointer<NiNode> spNode; // [sp+ACh] [bp-384h]@1
  int uiTop; // [sp+B0h] [bp-380h]@11
  int uiLeft; // [sp+B4h] [bp-37Ch]@11
  tagRECT rectEmotion[18]; // [sp+B8h] [bp-378h]@22
  tagRECT rectDefault[18]; // [sp+1D8h] [bp-258h]@20
  char acFileName[260]; // [sp+2F8h] [bp-138h]@20
  char acShapeName[33]; // [sp+3FCh] [bp-34h]@21
  unsigned int v109; // [sp+420h] [bp-10h]@1
  int v110; // [sp+42Ch] [bp-4h]@1
  int v111; // [sp+430h] [bp+0h]@1

  v109 = (unsigned int)&v111 ^ __security_cookie;
  v87 = (unsigned int)&v111 ^ __security_cookie;
  v2 = this;
  v91 = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v110 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ActionWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = MenuTexMgr::GetTexture(4u);
  pkTexture = v5;
  if ( !v5
    || (v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v5),
        !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "ActionWin", 0)) )
  {
LABEL_5:
    v6 = spNode.m_pObject;
    v110 = -1;
    if ( spNode.m_pObject )
    {
      v85 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_7:
      if ( !InterlockedDecrement(v85) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v9 = uiTop;
  v10 = uiLeft;
  iOffY = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v86 = v11;
    v84 = &uiTop;
    v83 = &uiLeft;
    v82 = "Theme";
  }
  else
  {
    v86 = 0;
    v84 = &uiTop;
    v83 = &uiLeft;
    v82 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v82, v83, v84, v86);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    && (v14 = Font::Get(MAIN_MENU),
        v15 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v9,
                uiWidth,
                uiHeight,
                v14,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        pkTextWin = (char *)v15,
        v16[122].__vecDelDtor((NiRefObject *)v15, 1u),
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor),
        pkBut = (NiSourceTexture *)(*(_DWORD *)pkTextWin + 472),
        v17 = TextData::Get(0x90A89DE5u),
        ((void (__thiscall *)(_DWORD, _DWORD))pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
          pkTextWin,
          v17),
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
        v18 = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "Panel01",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)pkTexture),
        v19 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v19,
          0),
        v20 = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "Panel02",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)pkTexture),
        v21 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v21,
          0),
        v22 = MenuTexMgr::GetTexture(0x12u),
        (pkBut = v22) != 0) )
  {
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab00Off", &uiLeft, &uiTop, v22);
    v24 = PgWinBut::CreateWin(uiLeft - v10, uiTop - v9, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v25 = pkBut;
    v24->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab00On", &uiLeft, &uiTop, v25);
    v27 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkActionInvTab = v27;
    ((void (__thiscall *)(PgWinSpr *, signed int, unsigned int))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      v27,
      1,
      v87);
    ((void (__stdcall *)(signed int))v2->m_pkActionInvTab->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v2->m_pkActionInvTab->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v28 = TextData2::Get(0x27538081u);
    PgWin::SetToolTipWinText(&v2->m_pkActionInvTab->baseclass_0, v28);
    v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01Off", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
    pkBut = (NiSourceTexture *)PgWinBut::CreateWin(
                                 uiLeft - v10,
                                 uiTop - v9,
                                 v29,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 6u,
                                 0,
                                 0);
    pkBut[4].baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)g_pkToolTipWin;
    v30 = TextData2::Get(0x275F7897u);
    PgWin::SetToolTipWinText((PgWin *)pkBut, v30);
    v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01On", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
    v32 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v31, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkPremiumActionInvTab = v32;
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v32,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_pkPremiumActionInvTab->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num01", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
    PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkInfo = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
    PgSprData::Add(pkInfo, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkInfo, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - v9, pkInfo, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v34 = MenuTexMgr::GetTexture(4u);
    v35 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkBut = (NiSourceTexture *)v34;
    if ( ((int (__stdcall *)(_DWORD))v35[18].__vecDelDtor)("HelpLinkNor") )
    {
      pkInfo = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkBut);
      PgSprData::Add(pkInfo, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pkInfo, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v10, uiTop - v9, pkInfo, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
    }
    v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
    v37 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v38 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkInfo = (PgSprData *)v37;
    ((void (__thiscall *)(PgWinSpr *))v38[60].__vecDelDtor)(v37);
    v39 = Font::Get(MAIN_MENU);
    v40 = ((int (*)(void))pkInfo->baseclass_0.vfptr[37].__vecDelDtor)();
    v41 = ((int (*)(void))pkInfo->baseclass_0.vfptr[36].__vecDelDtor)();
    v42 = PgWinText::CreateWin(uiLeft - v10, uiTop - v9, v41, v40, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (char *)v42;
    v43[122].__vecDelDtor((NiRefObject *)v42, 5u);
    (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
    pkBut = (NiSourceTexture *)(*(_DWORD *)pkTextWin + 472);
    v44 = TextData::Get(0xD9392C3Du);
    ((void (__thiscall *)(char *, char *))pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(pkTextWin, v44);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
    v46 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v45, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkInfo = (PgSprData *)v46;
    v47[60].__vecDelDtor((NiRefObject *)v46, 0);
    v48 = Font::Get(MAIN_MENU);
    v49 = ((int (*)(void))pkInfo->baseclass_0.vfptr[37].__vecDelDtor)();
    v50 = ((int (*)(void))pkInfo->baseclass_0.vfptr[36].__vecDelDtor)();
    v51 = PgWinText::CreateWin(uiLeft - v10, uiTop - v9, v50, v49, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v52 = v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (char *)v51;
    v52[122].__vecDelDtor((NiRefObject *)v51, 5u);
    (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
    pkBut = (NiSourceTexture *)(*(_DWORD *)pkTextWin + 472);
    v53 = TextData::Get(0x8EB3E6F0u);
    ((void (__thiscall *)(char *, char *))pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(pkTextWin, v53);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    Folder::Menu();
    sprintf(acFileName, "%s\\Icon\\Action000.dds");
    pkBut = PgUtil::LoadSourceTexture(acFileName);
    v54 = 0;
    v97 = (unsigned int)&rectDefault[0].top;
    do
    {
      RecordNo = v54 + 1;
      sprintf(acShapeName, "IconSlot%03d");
      v55 = PgSprData::Create(
              &spNode.m_pObject->baseclass_0,
              acShapeName,
              &uiLeft,
              &uiTop,
              (NiSourceTexture *)pkTexture);
      PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v55, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v56 = v97;
      v57 = uiLeft;
      *(_DWORD *)v97 = uiTop;
      v54 = RecordNo;
      *(_DWORD *)(v56 - 4) = v57;
      v97 = v56 + 16;
    }
    while ( (signed int)v54 < 18 );
    i = 0;
    v97 = (unsigned int)&rectEmotion[0].top;
    do
    {
      sprintf(acShapeName, "IconSlot%03d");
      v58 = PgSprData::Create(
              &spNode.m_pObject->baseclass_0,
              acShapeName,
              &uiLeft,
              &uiTop,
              (NiSourceTexture *)pkTexture);
      PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v58, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v59 = v97;
      v60 = uiLeft;
      *(_DWORD *)v97 = uiTop;
      v61 = i + 1;
      *(_DWORD *)(v59 - 4) = v60;
      i = v61;
      v97 = v59 + 16;
    }
    while ( v61 < 18 );
    v62 = *(_DWORD *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 56);
    if ( v62 )
      v97 = *(_DWORD *)(v62 + 40);
    else
      v97 = 0;
    i = 0;
    pkTextWin = 0;
    RecordNo = 0;
    if ( v97 > 0 )
    {
      v92 = (int)rectEmotion;
      v94 = (int)rectDefault;
      pkTexture = v2->m_apkIconEmotion;
      v63 = (int)v2->m_apkIconDefaultAction;
      do
      {
        v64 = CDataReader::GetRecord(
                (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                RecordNo);
        pkInfo = (PgSprData *)v64;
        if ( !v64 )
          break;
        v65 = *(_WORD *)((char *)v64 + 65);
        if ( v65 == -1 )
        {
          v66 = *(_DWORD *)((char *)v64 + 101);
          if ( v66 )
          {
            if ( v66 == 1 )
            {
              v70 = ActionIconWin::CreateWin(
                      *(_DWORD *)v92 - v10 + 1,
                      *(_DWORD *)(v92 + 4) - iOffY + 1,
                      (unsigned int)pkTextWin,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      v91);
              v71 = pkTexture;
              v72 = pkInfo;
              *(_DWORD *)pkTexture = v70;
              v70->m_uiInvType = 1;
              (*(void (__stdcall **)(NiSourceTexture *, _DWORD, signed int, signed int))(**(_DWORD **)v71 + 584))(
                pkBut,
                *(_WORD *)((char *)&v72[1].m_akGeomData.m_pBase + 3),
                32,
                32);
              (*(void (__stdcall **)(signed int))(**(_DWORD **)pkTexture + 516))(4);
              (*(void (__stdcall **)(signed int))(**(_DWORD **)pkTexture + 560))(5);
              v73 = pkTexture;
              *(_DWORD *)(*(_DWORD *)pkTexture + 304) = 1;
              *(_DWORD *)(*(_DWORD *)v73 + 272) = g_pkToolTipWin;
              (*(void (__stdcall **)(signed int))(**(_DWORD **)v73 + 240))(1);
              (*(void (__stdcall **)(signed int))(**(_DWORD **)pkTexture + 256))(1);
              v74 = (int *)pkInfo;
              v75 = (int)pkTextWin;
              *(_DWORD *)(*(_DWORD *)pkTexture + 392) = pkInfo;
              if ( !ShortCutMgr::SyncShortCutAndActionWinKey(&g_kShortCutMgr, *(_BYTE *)v74, v75) )
                goto LABEL_5;
              ++pkTextWin;
              pkTexture = (char *)pkTexture + 4;
              v92 += 16;
            }
          }
          else
          {
            switch ( User::GetMainCharClass(&g_kUser) )
            {
              case 0x1A:
              case 0x1B:
                if ( !strcmp((const char *)&pkInfo->baseclass_0.vfptr + 1, "SPSton") )
                  goto LABEL_47;
                break;
              default:
                break;
            }
            v67 = ActionIconWin::CreateWin(
                    *(_DWORD *)v94 - v10 + 1,
                    *(_DWORD *)(v94 + 4) - iOffY + 1,
                    i,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    v91);
            *(_DWORD *)v63 = v67;
            v67->m_uiInvType = 0;
            (*(void (__stdcall **)(NiSourceTexture *, _DWORD, signed int, signed int))(**(_DWORD **)v63 + 584))(
              pkBut,
              *(_WORD *)((char *)&pkInfo[1].m_akGeomData.m_pBase + 3),
              32,
              32);
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v63 + 516))(2);
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v63 + 560))(3);
            *(_DWORD *)(*(_DWORD *)v63 + 304) = 1;
            *(_DWORD *)(*(_DWORD *)v63 + 272) = g_pkToolTipWin;
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v63 + 240))(1);
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v63 + 256))(1);
            v68 = (int *)pkInfo;
            v69 = i;
            *(_DWORD *)(*(_DWORD *)v63 + 392) = pkInfo;
            if ( !ShortCutMgr::SyncShortCutAndActionWinKey(&g_kShortCutMgr, *(_BYTE *)v68, v69) )
            {
              v6 = spNode.m_pObject;
              v110 = -1;
              if ( !spNode.m_pObject )
                return 0;
              v85 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
              goto LABEL_7;
            }
            ++i;
            v63 += 4;
            v94 += 16;
          }
        }
        else
        {
          v76 = 0;
          if ( (signed int)pkTextWin > 0 )
          {
            v93 = v2->m_apkIconEmotion;
            do
            {
              if ( !*v93 )
                break;
              v77 = (*v93)->m_pkActionViewInfo;
              if ( !v77 )
                break;
              if ( v65 == v77->nIndex )
              {
                v2->m_apkIconEmotion[v76]->m_pkLinkedAction = (ActionViewInfo *)pkInfo;
                break;
              }
              ++v93;
              ++v76;
            }
            while ( v76 < (signed int)pkTextWin );
          }
        }
LABEL_47:
        ++RecordNo;
      }
      while ( RecordNo < v97 );
    }
    v78 = PremiumActionWin::CreateWin(v91);
    v79 = v78;
    v2->m_pkPremiumActionWin = v78;
    if ( v78 )
    {
      v80 = ((int (__thiscall *)(PremiumActionWin *))v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v78);
      if ( v80 )
      {
        while ( (NiRTTI *)v80 != &PgWin::m_RTTI )
        {
          v80 = *(_DWORD *)(v80 + 4);
          if ( !v80 )
            goto LABEL_56;
        }
        ((void (__thiscall *)(ActionWin *, PremiumActionWin *, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v2,
          v79,
          0);
        NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
      }
    }
LABEL_56:
    ((void (__thiscall *)(ActionWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.0,
      0.5);
    v81 = spNode.m_pObject;
    v110 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v81 )
      v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v81, 1u);
    result = 1;
  }
  else
  {
    v110 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (004D4C70) --------------------------------------------------------
void __thiscall ActionWin::OnDefaultAction(ActionWin *this, unsigned int lParam)
{
  ActionWin *v2; // edi@1
  ActionIconWin *v3; // eax@3
  ActionViewInfo *v4; // edi@4
  unsigned int v5; // esi@5
  const char *v6; // eax@7
  ActionWin *v7; // [sp+0h] [bp-130h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strTargetName; // [sp+4h] [bp-12Ch]@5
  char szCommand[256]; // [sp+20h] [bp-110h]@10
  unsigned int v10; // [sp+120h] [bp-10h]@1
  int v11; // [sp+12Ch] [bp-4h]@5
  int v12; // [sp+130h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  v7 = this;
  if ( !Char::CheckActState(g_pkMainChar, 500000) )
  {
    if ( !g_pkMainChar->m_bWillDead )
    {
      v3 = v2->m_apkIconDefaultAction[lParam];
      if ( v3 )
      {
        v4 = v3->m_pkActionViewInfo;
        if ( v4 )
        {
          v5 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
          strTargetName.baseclass_0._Myres = 15;
          strTargetName.baseclass_0._Mysize = 0;
          strTargetName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          v11 = 0;
          if ( v5 )
          {
            if ( (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v5 + 84))(v5) )
            {
              v6 = (const char *)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v5 + 84))(v5);
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(&strTargetName, v6);
            }
            if ( !strcmp(v4->InxName, "attack") )
            {
              GameFrameWork::Stick((GameFrameWork *)v7->baseclass_0.m_pkFrameWork, 0, 0);
              KeyboardMoveProcess::SetAutoRun((KeyboardMoveProcess *)&v7->baseclass_0.m_pkFrameWork[1], 0);
            }
          }
          sprintf(szCommand, "/%s %s");
          GameFrameWork::DecodingChat((GameFrameWork *)v7->baseclass_0.m_pkFrameWork, szCommand, 0, 0);
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strTargetName);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004D4E10) --------------------------------------------------------
void __thiscall PremiumActionWin::DropOnLClickInv(PremiumActionWin *this, unsigned int uiInvIndex)
{
  PremiumActionWin *v2; // ebx@1
  PgFrameWork *v3; // eax@2
  ItemIcon *v4; // ecx@3
  Item *v5; // eax@4
  ItemInfo *v6; // esi@5
  ItemUseTask *v7; // esi@7

  v2 = this;
  if ( uiInvIndex < 0xC0 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
    {
      v4 = (ItemIcon *)*((_DWORD *)v3[19].m_BackFrameID + uiInvIndex + 87);
      if ( v4 )
      {
        v5 = ItemIcon::GetItem(v4);
        if ( v5 )
        {
          v6 = v5->m_pkInfo;
          if ( v6 )
          {
            SoundMgr::PlayItemPutSound(&g_kSoundMgr, v6->ID);
            if ( v6->Type == 1 )
            {
              v7 = ISingletonTask<ItemUseTask>::Run();
              ItemUseTask::SetInventoryIndex(v7, uiInvIndex);
              v7->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
                &v7->baseclass_0.baseclass_0.baseclass_8,
                v2->baseclass_0.m_pkFrameWork);
            }
          }
        }
      }
    }
  }
}

//----- (004D4EA0) --------------------------------------------------------
void __thiscall ActionWin::OnDefaultSlot_RClick(ActionWin *this, unsigned int lParam)
{
  ActionWin::OnDefaultAction(this, lParam);
}

//----- (004D4EB0) --------------------------------------------------------
bool __thiscall PremiumActionWin::DropOnInv(PremiumActionWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents *v3; // esi@1
  PremiumActionWin *v4; // edi@1
  void *v5; // eax@3
  unsigned int v6; // eax@5
  GameFrameWork *v7; // ecx@6

  v3 = pkContents;
  v4 = this;
  if ( pkContents->m_eSenderType == 21 )
  {
    if ( !pkContents->m_eType )
    {
      v5 = pkContents->m_apvParam[0];
      if ( v5 )
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, *((_WORD *)v5 + 4));
    }
    v6 = v3->m_uiSenderIndex;
    if ( v6 != uiReceiverInvIndex )
    {
      LOWORD(pkContents) = uiReceiverInvIndex & 0x3FF | 0x3C00;
      v7 = (GameFrameWork *)v4->baseclass_0.m_pkFrameWork;
      LOWORD(uiReceiverInvIndex) = v6 & 0x3FF | 0x3C00;
      GameFrameWork::NcItemRelocReq(v7, (ITEM_INVEN *)&uiReceiverInvIndex, (ITEM_INVEN *)&pkContents);
    }
  }
  return 0;
}

//----- (004D4F20) --------------------------------------------------------
void __thiscall ActionWin::OnCommand(ActionWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 1u:
      GameFrameWork::CloseActionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 2u:
      ActionWin::OnDefaultSlot_LClick(this, lParam);
      break;
    case 3u:
      ActionWin::OnDefaultAction(this, lParam);
      break;
    case 4u:
      ActionWin::OnEmotionSlot_LClick(this, lParam);
      break;
    case 5u:
      ActionWin::OnEmotionAction(this, lParam);
      break;
    case 6u:
      ActionWin::OnPremiumAction(this);
      break;
    case 7u:
      ActionWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (004D4FB0) --------------------------------------------------------
bool __thiscall PremiumActionIcon::EatDropInstance(PremiumActionIcon *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PremiumActionIcon *v4; // ebx@1
  bool result; // al@2
  void *v6; // esi@3
  int v7; // edi@5
  PgWin *v8; // eax@5

  v4 = this;
  if ( *pkDrop )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( v6 )
    {
      v7 = *((_DWORD *)v6 + 2);
      v8 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      if ( v7 && v7 != 21 )
        result = 0;
      else
        result = PremiumActionWin::DropOnInv((PremiumActionWin *)v8, (DropContents *)v6, v4->m_uiInvIndex);
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004D5010) --------------------------------------------------------
void __thiscall GameFrameWork::GetGroundPosCam(GameFrameWork *this, NiPoint3 *kGroundPos)
{
  _BYTE v2[12]; // ST0C_12@1
  _BYTE v3[12]; // ST00_12@1

  *(_DWORD *)v2 = LODWORD(this->m_kCameraRayDir.x);
  *(_QWORD *)&v2[4] = *(_QWORD *)&this->m_kCameraRayDir.y;
  *(_DWORD *)v3 = LODWORD(this->m_kCameraRayOrigin.x);
  *(_QWORD *)&v3[4] = *(_QWORD *)&this->m_kCameraRayOrigin.y;
  World::GetAdvGroundPos(&g_kWorld, *(NiPoint3 *)v3, *(NiPoint3 *)v2, kGroundPos, 0);
}

//----- (004D5070) --------------------------------------------------------
unsigned int __cdecl ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E18: using guessed type int ITableBase_MHEmotion_MiniHouseEmotionTab___ms_pkTable;

//----- (004D5090) --------------------------------------------------------
void *__thiscall PremiumActionIcon::_vector_deleting_destructor_(PremiumActionIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PremiumActionIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PremiumActionIcon::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98CCC0: using guessed type int (__stdcall *PremiumActionIcon___vftable_)(int uiFlags);
// 98CCDC: using guessed type int (__thiscall *PremiumActionIcon___vftable_)(void *p, char);

//----- (004D50D0) --------------------------------------------------------
void *__thiscall ActionInvTabButWin::_scalar_deleting_destructor_(ActionInvTabButWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionInvTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionInvTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98CF48: using guessed type int (__stdcall *ActionInvTabButWin___vftable_)(int uiFlags);
// 98CF64: using guessed type int (__thiscall *ActionInvTabButWin___vftable_)(void *p, char);

//----- (004D5110) --------------------------------------------------------
void __thiscall PgWinBut::DoAction(PgWinBut *this)
{
  PgWinBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0, v2, v1->m_uiCmdMsg, v1->m_uiCmdMsgParam);
}

//----- (004D5140) --------------------------------------------------------
void *__thiscall ActionIconWin::_scalar_deleting_destructor_(ActionIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ActionIconWin::_ActionIconWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004D5170) --------------------------------------------------------
void *__thiscall ActionWin::_scalar_deleting_destructor_(ActionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 98D424: using guessed type int (__stdcall *ActionWin___vftable_)(int uiFlags);
// 98D444: using guessed type int (__thiscall *ActionWin___vftable_)(void *p, char);

//----- (004D51C0) --------------------------------------------------------
void *__thiscall PremiumActionWin::_scalar_deleting_destructor_(PremiumActionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PremiumActionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PremiumActionWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 98D66C: using guessed type int (__stdcall *PremiumActionWin___vftable_)(int uiFlags);
// 98D68C: using guessed type int (__thiscall *PremiumActionWin___vftable_)(void *p, char);

//----- (004D5210) --------------------------------------------------------
MHEmotion *__cdecl MiniHouseEmotionTab::GetNonMenuEmotion(unsigned __int16 MHEmotionID, char byActionViewID)
{
  unsigned int v2; // esi@1
  MHEmotion *result; // eax@2

  v2 = 0;
  if ( ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() )
  {
    while ( 1 )
    {
      result = (MHEmotion *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 4),
                              v2);
      if ( result->MHEmotionID == MHEmotionID )
      {
        if ( result->ActionViewInfo == byActionViewID )
          break;
      }
      ++v2;
      if ( v2 >= ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A97E18: using guessed type int ITableBase_MHEmotion_MiniHouseEmotionTab___ms_pkTable;

//----- (004D5260) --------------------------------------------------------
void __thiscall NiAVObject::DetachProperty(NiAVObject *this, NiProperty *pkProperty)
{
  NiAVObject *v2; // esi@1
  NiProperty *v3; // edi@1
  PgWin *v4; // esi@4
  NiPointer<PgWin> result; // [sp+0h] [bp-10h]@3
  int v6; // [sp+Ch] [bp-4h]@3

  v2 = this;
  v3 = pkProperty;
  if ( pkProperty )
    InterlockedIncrement((volatile LONG *)&pkProperty->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v6 = 0;
  NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v2->m_kPropertyList,
    &result,
    (NiPointer<PgWin> *)&pkProperty);
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  v6 = -1;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (004D5310) --------------------------------------------------------
void __thiscall PgFadeTextGeometry::SetLifeTime(PgFadeTextGeometry *this, float fLifeTime)
{
  this->m_fLifeTime = fLifeTime;
  this->m_fAlphaBlendValue = 1.0;
  SpScreenText::SetAlpha(&this->baseclass_0.baseclass_0, 1.0);
}

//----- (004D5340) --------------------------------------------------------
void __thiscall PgFadeTextGeometry::UpdateDownwardPass(PgFadeTextGeometry *this, float fTime, bool bUpdateControllers)
{
  SpScreenText *v3; // esi@1
  float v4; // ST0C_4@5

  v3 = (SpScreenText *)this;
  if ( this->m_fLifeTime < 1000000.0 )
  {
    if ( this->m_fLifeTime <= 0.0 )
    {
      if ( this->m_fAlphaBlendValue > 0.0 )
      {
        v4 = this->m_fAlphaBlendValue - (Timer::ms_fDeltaTime + Timer::ms_fDeltaTime);
        this->m_fAlphaBlendValue = v4;
        if ( v4 <= 0.0 )
          this->m_fAlphaBlendValue = 0.0;
        if ( this->m_fAlphaBlendValue > 0.0 )
          JUMPOUT(*(int *)loc_4D53E1);
        SpScreenText::SetAlpha(&this->baseclass_0.baseclass_0, 0.0);
      }
    }
    else
    {
      this->m_fLifeTime = this->m_fLifeTime - Timer::ms_fDeltaTime;
    }
  }
  SpScreenText::UpdateDownwardPass(v3, fTime, bUpdateControllers);
}
// 4D53E1: using guessed type int __thiscall(SpScreenText *this, float fTime, int bUpdateControllers);
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (004D5420) --------------------------------------------------------
void __thiscall PgFadeTextGeometry::CopyFrom(PgFadeTextGeometry *this, PgFadeTextGeometry *pkSrc)
{
  PgFadeTextGeometry *v2; // esi@1
  NiRefObjectVtbl *v3; // ebx@2
  int v4; // eax@2
  NiRefObjectVtbl *v5; // edx@2
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@2
  D3DXCOLOR Color; // [sp+18h] [bp-1Ch]@2
  NiColor kColor; // [sp+28h] [bp-Ch]@2

  v2 = this;
  if ( pkSrc )
  {
    v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    this->m_fLifeTime = pkSrc->m_fLifeTime;
    this->m_fAlphaBlendValue = pkSrc->m_fAlphaBlendValue;
    v4 = ((int (__thiscall *)(PgFadeTextGeometry *))pkSrc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)(pkSrc);
    v3[37].__vecDelDtor((NiRefObject *)v2, v4);
    SpScreenText::GetColor(&pkSrc->baseclass_0.baseclass_0, &kColor);
    v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    Color.r = kColor.r;
    v6 = v5[44].__vecDelDtor;
    Color.g = kColor.g;
    Color.b = kColor.b;
    v6(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)&Color);
    SpScreenText::SetAlpha(&v2->baseclass_0.baseclass_0, v2->m_fAlphaBlendValue);
  }
}

//----- (004D54B0) --------------------------------------------------------
void __thiscall AnnounceWin::UpdateMeWin(AnnounceWin *this, float fCurTime)
{
  if ( 1000000.0 != this->m_kTimerInterval.m_fCheckTime
    && !(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1) )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime) )
      AnnounceWin::m_bNoticing = 0;
  }
}
// A987EC: using guessed type char AnnounceWin__m_bNoticing;

//----- (004D54F0) --------------------------------------------------------
void __thiscall AnnounceWin::SetFont(AnnounceWin *this, PgFont *pkFont)
{
  char *v2; // esi@1
  signed int v3; // edi@1

  v2 = (char *)this->m_aspTextGeom;
  v3 = 3;
  do
  {
    if ( *(_DWORD *)v2 )
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 144))(pkFont);
    v2 += 4;
    --v3;
  }
  while ( v3 );
}

//----- (004D5530) --------------------------------------------------------
void __thiscall PgFadeTextGeometry::PgFadeTextGeometry(PgFadeTextGeometry *this, PgFont *pkFont)
{
  PgFadeTextGeometry *v2; // esi@1
  NiMaterialProperty *v3; // edi@1

  v2 = this;
  PgTextGeometry::PgTextGeometry(&this->baseclass_0, pkFont);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PgFadeTextGeometry::_vftable_;
  v2->m_spMaterialProp.m_pObject = 0;
  v2->m_fLifeTime = 1000000.0;
  v2->m_fAlphaBlendValue = 1.0;
  v3 = v2->m_spMaterialProp.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    v2->m_spMaterialProp.m_pObject = 0;
  }
}
// 98D8DC: using guessed type int (__thiscall *PgFadeTextGeometry___vftable_)(void *p, char);

//----- (004D55E0) --------------------------------------------------------
void __thiscall AnnounceWin::_AnnounceWin(AnnounceWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AnnounceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AnnounceWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_aspTextGeom,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 98D994: using guessed type int (__stdcall *AnnounceWin___vftable_)(int uiFlags);
// 98D9B4: using guessed type int (__thiscall *AnnounceWin___vftable_)(void *p, char);

//----- (004D5660) --------------------------------------------------------
void __thiscall AnnounceWin::AnnounceWin(AnnounceWin *this)
{
  AnnounceWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AnnounceWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AnnounceWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  _eh_vector_constructor_iterator_(
    v1->m_aspTextGeom,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  *(_WORD *)&v1->m_bNotice = 0;
}
// 98D994: using guessed type int (__stdcall *AnnounceWin___vftable_)(int uiFlags);
// 98D9B4: using guessed type int (__thiscall *AnnounceWin___vftable_)(void *p, char);

//----- (004D56F0) --------------------------------------------------------
bool __thiscall AnnounceWin::Create(AnnounceWin *this, PgFrameWork *pkFrameWork)
{
  NiAVObject *v2; // edi@1
  PgFont *v4; // eax@3
  PgFont *v5; // ebx@3
  SpScreenText **v6; // esi@4
  void *v7; // eax@6
  int v8; // eax@7
  SpScreenText *v9; // ebx@9
  SpScreenText *v10; // eax@17
  SpScreenText *v11; // ebx@19
  void *v12; // eax@21
  SpScreenText *v13; // eax@25
  float v14; // ST38_4@25
  float v15; // edx@25
  SpScreenText *v16; // eax@25
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // edx@25
  D3DXCOLOR *v18; // [sp+14h] [bp-74h]@22
  char v19; // [sp+18h] [bp-70h]@20
  char v20; // [sp+1Ch] [bp-6Ch]@20
  char v21; // [sp+20h] [bp-68h]@20
  unsigned int v22; // [sp+24h] [bp-64h]@1
  char v23; // [sp+24h] [bp-64h]@20
  D3DXCOLOR result; // [sp+40h] [bp-48h]@22
  tagSIZE kSize; // [sp+50h] [bp-38h]@4
  PgFont *pkFont; // [sp+58h] [bp-30h]@3
  int v27; // [sp+5Ch] [bp-2Ch]@4
  int iLineYPos; // [sp+60h] [bp-28h]@4
  void *v29; // [sp+64h] [bp-24h]@6
  tagRECT kDrawRect; // [sp+68h] [bp-20h]@4
  unsigned int v31; // [sp+78h] [bp-10h]@1
  int v32; // [sp+84h] [bp-4h]@6
  int v33; // [sp+88h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v22 = (unsigned int)&v33 ^ __security_cookie;
  v2 = (NiAVObject *)this;
  if ( !PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFrameWork, "AnnounceWin", 0)
    || (v4 = Font::Get(MENU), v5 = v4, (pkFont = v4) == 0) )
    return 0;
  SelectObject(v4->baseclass_0.m_kFontRenderStuff.hDC, v4->baseclass_0.m_hFont);
  PgFont::GetTextSize(v5, "W", 1, &kSize);
  iLineYPos = -2;
  SetRect(&kDrawRect, 0, 0, 500, kSize.cy);
  v6 = (SpScreenText **)&v2[2].baseclass_0.m_uiMaxSize;
  v27 = 3;
  while ( 1 )
  {
    v7 = operator new(0x158u);
    v29 = v7;
    v32 = 0;
    if ( v7 )
    {
      PgFadeTextGeometry::PgFadeTextGeometry((PgFadeTextGeometry *)v7, v5);
      v29 = (void *)v8;
    }
    else
    {
      v29 = 0;
      v8 = 0;
    }
    v9 = *v6;
    v32 = -1;
    if ( v9 != (SpScreenText *)v8 )
    {
      if ( v9 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
        v8 = (int)v29;
      }
      *v6 = (SpScreenText *)v8;
      if ( v8 )
        InterlockedIncrement((volatile LONG *)(v8 + 4));
    }
    SpScreenText::SetShadowOffset(*v6, 1u);
    ((void (__stdcall *)(tagRECT *, unsigned int))(*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(
      &kDrawRect,
      v22);
    v10 = *v6;
    (*v6)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)1;
    if ( v10->m_iAlignOption != 18 )
    {
      v10->m_iAlignOption = 18;
      v10->m_bInvalidate = 1;
    }
    v11 = *v6;
    if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
    {
      v12 = CDataReader::GetRecord(
              (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
              0x32u);
      v23 = -1;
      if ( !v12 )
      {
        v21 = -1;
        v20 = 0;
        v19 = -1;
        v18 = &result;
        goto LABEL_25;
      }
      v21 = *((_BYTE *)v12 + 6);
      v20 = *((_BYTE *)v12 + 5);
      v19 = *((_BYTE *)v12 + 4);
    }
    else
    {
      v23 = -1;
      v21 = -1;
      v20 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
      v19 = -1;
    }
    v18 = &result;
LABEL_25:
    Color::GetDxColor(v18, v19, v20, v21, v23);
    v22 = (unsigned int)&result;
    ((void (__thiscall *)(SpScreenText *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v11);
    v13 = *v6;
    v14 = (double)iLineYPos;
    v15 = (*v6)->baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    (*v6)->baseclass_0.baseclass_0.m_kLocal.m_Translate.x = (*v6)->baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v13->baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v14;
    v13->baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v15;
    v16 = *v6;
    v17 = v2->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
    iLineYPos += kSize.cy + 2;
    ((void (__thiscall *)(NiAVObject *, SpScreenText *, _DWORD))v17)(v2, v16, 0);
    ++v6;
    --v27;
    if ( !v27 )
      break;
    v5 = pkFont;
  }
  NiAVObject::UpdateProperties(v2);
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor((NiRefObject *)v2, 500u);
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor((NiRefObject *)v2, 45u);
  ((void (__thiscall *)(NiAVObject *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v2, 0);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004D59A0) --------------------------------------------------------
void __thiscall AnnounceWin::AddText(AnnounceWin *this, char *pcText, D3DXCOLOR *TextColor, bool bSingleLine, float fLifeTime)
{
  int v5; // edi@0
  int v6; // esi@0
  AnnounceWin *v7; // esi@1
  char *v8; // edi@3
  signed int v9; // ebx@4
  signed int v10; // ebx@7
  int v11; // ecx@8
  PgFadeTextGeometry *v12; // ecx@10
  PgFadeTextGeometry *v13; // edi@12
  void *v14; // eax@14
  NiRefObjectVtbl *v15; // edx@15
  D3DXCOLOR *v16; // eax@15
  PgFadeTextGeometry *v17; // ecx@15
  PgFadeTextGeometry *v18; // ecx@19
  char v19; // [sp+0h] [bp-28h]@13
  char v20; // [sp+4h] [bp-24h]@13
  char v21; // [sp+8h] [bp-20h]@13
  char v22; // [sp+Ch] [bp-1Ch]@13
  int v23; // [sp+10h] [bp-18h]@1
  int v24; // [sp+14h] [bp-14h]@1
  D3DXCOLOR result; // [sp+18h] [bp-10h]@10

  v24 = v6;
  v23 = v5;
  v7 = this;
  if ( 0.0 == fLifeTime )
    fLifeTime = 15.0;
  v8 = (char *)this->m_aspTextGeom;
  if ( bSingleLine )
  {
    v10 = 3;
    do
    {
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v8 + 148))(&unk_98D8CE);
      v11 = *(_DWORD *)v8;
      *(float *)(*(_DWORD *)v8 + 332) = -1.0;
      *(float *)(v11 + 336) = 1.0;
      SpScreenText::SetAlpha((SpScreenText *)v11, 1.0);
      v8 += 4;
      --v10;
    }
    while ( v10 );
  }
  else
  {
    v9 = 2;
    do
    {
      PgFadeTextGeometry::CopyFrom(*(PgFadeTextGeometry **)v8, *((PgFadeTextGeometry **)v8 + 1));
      v8 += 4;
      --v9;
    }
    while ( v9 );
  }
  if ( v7->m_bNotice )
  {
    ((void (__stdcall *)(D3DXCOLOR *, int, int, _DWORD, _DWORD))v7->m_aspTextGeom[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(
      TextColor,
      v23,
      v24,
      (_DWORD)result.r,
      LODWORD(result.g));
    ((void (__stdcall *)(char *))v7->m_aspTextGeom[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
    v12 = v7->m_aspTextGeom[2].m_pObject;
    v12->m_fLifeTime = fLifeTime;
    v12->m_fAlphaBlendValue = 1.0;
    SpScreenText::SetAlpha(&v12->baseclass_0.baseclass_0, 1.0);
    CNSTimer_Interval::ReSet(&v7->m_kTimerInterval, Timer::ms_fCurTime);
    v7->m_kTimerInterval.m_fCheckTime = 30.0;
    AnnounceWin::m_bNoticing = 1;
    *(_WORD *)&v7->m_bNotice = 0;
    return;
  }
  if ( !v7->m_bRoar )
  {
    v17 = v7->m_aspTextGeom[2].m_pObject;
    v15 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = TextColor;
    goto LABEL_19;
  }
  v13 = v7->m_aspTextGeom[2].m_pObject;
  if ( !*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
  {
    v22 = -1;
    v21 = -1;
    v20 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
    v19 = -1;
LABEL_17:
    Color::GetDxColor(&result, v19, v20, v21, v22);
    v15 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = &result;
    v17 = v13;
    goto LABEL_19;
  }
  v14 = CDataReader::GetRecord((CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4), 7u);
  v22 = -1;
  if ( v14 )
  {
    v21 = *((_BYTE *)v14 + 6);
    v20 = *((_BYTE *)v14 + 5);
    v19 = *((_BYTE *)v14 + 4);
    goto LABEL_17;
  }
  Color::GetDxColor(&result, -1, 0, -1, -1);
  v15 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v16 = &result;
  v17 = v13;
LABEL_19:
  ((void (__thiscall *)(PgFadeTextGeometry *, D3DXCOLOR *, int, int, _DWORD, _DWORD))v15[44].__vecDelDtor)(
    v17,
    v16,
    v23,
    v24,
    (_DWORD)result.r,
    LODWORD(result.g));
  ((void (__stdcall *)(char *))v7->m_aspTextGeom[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  v18 = v7->m_aspTextGeom[2].m_pObject;
  v18->m_fLifeTime = fLifeTime;
  v18->m_fAlphaBlendValue = 1.0;
  SpScreenText::SetAlpha(&v18->baseclass_0.baseclass_0, 1.0);
  *(_WORD *)&v7->m_bNotice = 0;
}
// 4D59A0: could not find valid save-restore pair for edi
// 4D59A0: could not find valid save-restore pair for esi
// A9763C: using guessed type float Timer__ms_fCurTime;
// A987EC: using guessed type char AnnounceWin__m_bNoticing;

//----- (004D5B90) --------------------------------------------------------
AnnounceWin *__cdecl AnnounceWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  AnnounceWin *v5; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x184u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    AnnounceWin::AnnounceWin((AnnounceWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( AnnounceWin::Create((AnnounceWin *)v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (AnnounceWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    }
    v5 = 0;
  }
  return v5;
}

//----- (004D5CC0) --------------------------------------------------------
NiRTTI *__thiscall NiNode::GetRTTI(NiNode *this)
{
  return &NiNode::m_RTTI;
}

//----- (004D5CD0) --------------------------------------------------------
char *__thiscall PgTextGeometry::GetText(PgTextGeometry *this)
{
  char *result; // eax@1

  result = this->baseclass_0.m_kString.m_pcStr;
  if ( !result || !*result )
    result = 0;
  return result;
}

//----- (004D5CF0) --------------------------------------------------------
unsigned int __thiscall PgTextGeometry::GetTextWidth(PgTextGeometry *this)
{
  return this->m_uiTextWidth;
}

//----- (004D5D00) --------------------------------------------------------
unsigned int __thiscall PgTextGeometry::GetTextHeight(PgTextGeometry *this)
{
  return this->m_uiTextHeight;
}

//----- (004D5D10) --------------------------------------------------------
void __thiscall PgTextGeometry::SetTextRect(PgTextGeometry *this, tagRECT *kRect)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(kRect);
}

//----- (004D5D20) --------------------------------------------------------
void __thiscall PgTextGeometry::SetColor(PgTextGeometry *this, D3DXCOLOR *kColor)
{
  SpScreenText *v2; // edi@1
  NiColor kNiColor; // [sp+Ch] [bp-Ch]@1

  kNiColor.r = kColor->r;
  kNiColor.g = kColor->g;
  v2 = (SpScreenText *)this;
  kNiColor.b = kColor->b;
  SpScreenText::SetColor(&this->baseclass_0, &kNiColor);
  SpScreenText::SetAlpha(v2, kColor->a);
}

//----- (004D5D60) --------------------------------------------------------
void __thiscall PgTextGeometry::SetResetTextAfterDraw(PgTextGeometry *this, bool b)
{
  this->m_bResetTextAfterDraw = b;
}

//----- (004D5D70) --------------------------------------------------------
bool __thiscall PgTextGeometry::GetResetTextAfterDraw(PgTextGeometry *this)
{
  return this->m_bResetTextAfterDraw;
}

//----- (004D5D80) --------------------------------------------------------
void __thiscall PgTextGeometry::SetFont(PgTextGeometry *this, PgFont *pkFont)
{
  PgTextGeometry *v2; // ebx@1
  PgFont *v3; // esi@1

  v2 = this;
  SpScreenText::Init(&this->baseclass_0, &pkFont->baseclass_0);
  v3 = v2->m_spPgFont.m_pObject;
  if ( v3 != pkFont )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spPgFont.m_pObject = pkFont;
    if ( pkFont )
      InterlockedIncrement((volatile LONG *)&pkFont->baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (004D5DE0) --------------------------------------------------------
void *__thiscall PgFadeTextGeometry::_scalar_deleting_destructor_(PgFadeTextGeometry *this, unsigned int a2)
{
  PgTextGeometry *v2; // edi@1
  NiMaterialProperty *v3; // esi@1

  v2 = (PgTextGeometry *)this;
  v3 = this->m_spMaterialProp.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  PgTextGeometry::_PgTextGeometry(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004D5E70) --------------------------------------------------------
void *__thiscall AnnounceWin::_vector_deleting_destructor_(AnnounceWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AnnounceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AnnounceWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_aspTextGeom,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98D994: using guessed type int (__stdcall *AnnounceWin___vftable_)(int uiFlags);
// 98D9B4: using guessed type int (__thiscall *AnnounceWin___vftable_)(void *p, char);

//----- (004D5F00) --------------------------------------------------------
void __stdcall ATL::AtlThrowImpl(HRESULT hr)
{
  _CxxThrowException(&hr, &_TI1_AVCAtlException_ATL__);
}

//----- (004D5F20) --------------------------------------------------------
void __thiscall ATL::CTime::CTime(ATL::CTime *this, int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST)
{
  ATL::CTime *v8; // esi@1
  __int64 v9; // qax@13
  tm atm; // [sp+4h] [bp-28h]@13
  unsigned int v11; // [sp+28h] [bp-4h]@1
  int v12; // [sp+2Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v8 = this;
  if ( nYear < 1900 )
    ATL::AtlThrowImpl(-2147467259);
  if ( (unsigned int)(nMonth - 1) > 0xB )
    ATL::AtlThrowImpl(-2147467259);
  if ( (unsigned int)(nDay - 1) > 0x1E )
    ATL::AtlThrowImpl(-2147467259);
  if ( (unsigned int)nHour > 0x17 )
    ATL::AtlThrowImpl(-2147467259);
  if ( (unsigned int)nMin > 0x3B )
    ATL::AtlThrowImpl(-2147467259);
  if ( (unsigned int)nSec > 0x3B )
    ATL::AtlThrowImpl(-2147467259);
  atm.tm_sec = nSec;
  atm.tm_year = nYear - 1900;
  atm.tm_min = nMin;
  atm.tm_hour = nHour;
  atm.tm_mday = nDay;
  atm.tm_mon = nMonth - 1;
  atm.tm_isdst = nDST;
  v9 = _mktime64(&atm);
  v8->m_time = v9;
  if ( (HIDWORD(v9) & (unsigned int)v9) == -1 )
    ATL::AtlThrowImpl(-2147024809);
}
// A85C00: using guessed type int __security_cookie;

//----- (004D6010) --------------------------------------------------------
void __thiscall AttendCheckBut::AttendCheckBut(AttendCheckBut *this)
{
  this->vfptr = (AttendCheckButVtbl *)&AttendCheckBut::_vftable_;
  this->m_pkSpr = 0;
  this->m_pkBut = 0;
  this->m_pkTextMonth = 0;
  this->m_pkTextSlash = 0;
  this->m_pkTextDay = 0;
  this->m_eType = 0;
  this->m_apkBlinkEff = 0;
}
// 98DF48: using guessed type int (__thiscall *AttendCheckBut___vftable_)(void *p, char);

//----- (004D6030) --------------------------------------------------------
void __thiscall AttendCheckBut::SetTextColor(AttendCheckBut *this, D3DXCOLOR *kColor)
{
  AttendCheckBut *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkTextMonth->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(kColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSlash->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(kColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextDay->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(kColor);
}

//----- (004D6070) --------------------------------------------------------
PgFont *__thiscall AttendCheckWin::CreateFontA(AttendCheckWin *this, Font::FontDefine *kFontDefine)
{
  void *v2; // eax@1
  CSpFont *v3; // eax@2
  CSpFont *v4; // esi@2

  v2 = operator new(0x184u);
  if ( v2 )
  {
    PgFont::PgFont((PgFont *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    CSpFont::Create(
      v4,
      (char *)kFontDefine->pFacename,
      kFontDefine->Height,
      kFontDefine->Width,
      kFontDefine->Weight,
      kFontDefine->Italic,
      kFontDefine->CharSet,
      kFontDefine->OutputPrecision,
      kFontDefine->Quality,
      kFontDefine->PitchAndFamily,
      kFontDefine->dwOutline,
      0x200u,
      5u);
  return (PgFont *)v4;
}

//----- (004D6120) --------------------------------------------------------
void __thiscall AttendCheckWin::OnCloseWin(AttendCheckWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004D6130) --------------------------------------------------------
void __thiscall AttendCheckWin::SetDate(AttendCheckWin *this, tm *T, const int Cnt)
{
  AttendCheckWin *v3; // ebx@1
  int v4; // edx@1
  unsigned int v5; // ecx@1
  int v6; // eax@1
  int v7; // esi@9
  int v8; // edi@10
  char *v9; // eax@10
  int v10; // edi@10
  char *v11; // eax@10
  signed int v12; // [sp+Ch] [bp-58h]@9
  ATL::CTime tmpTime; // [sp+10h] [bp-54h]@7
  tm ptm; // [sp+18h] [bp-4Ch]@10
  tm tb; // [sp+3Ch] [bp-28h]@7
  unsigned int v16; // [sp+60h] [bp-4h]@1
  int v17; // [sp+64h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = this;
  memcpy(&this->m_tEvtStartDay, T, sizeof(this->m_tEvtStartDay));
  v4 = this->m_tEvtStartDay.tm_mday;
  v5 = this->m_tEvtStartDay.tm_mon;
  v3->m_iEvtIndex = Cnt;
  v6 = v3->m_tEvtStartDay.tm_year + 1900;
  if ( v6 < 1900 )
    ATL::AtlThrowImpl(-2147467259);
  if ( v5 > 0xB )
    ATL::AtlThrowImpl(-2147467259);
  if ( (unsigned int)(v4 - 1) > 0x1E )
    ATL::AtlThrowImpl(-2147467259);
  tb.tm_mon = v5;
  tb.tm_sec = 0;
  tb.tm_min = 0;
  tb.tm_hour = 0;
  tb.tm_mday = v4;
  tb.tm_year = v6 - 1900;
  tb.tm_isdst = -1;
  tmpTime.m_time = _mktime64(&tb);
  if ( (HIDWORD(tmpTime.m_time) & (unsigned int)tmpTime.m_time) == -1 )
    ATL::AtlThrowImpl(-2147024809);
  v7 = (int)&v3->m_DayBut[0].m_pkTextDay;
  v12 = 28;
  do
  {
    _localtime64_s(&tb, &tmpTime.m_time);
    _localtime64_s(&ptm, &tmpTime.m_time);
    v8 = **(_DWORD **)(v7 - 8);
    v9 = fs("%d");
    (*(void (__thiscall **)(_DWORD, char *))(v8 + 472))(*(_DWORD *)(v7 - 8), v9);
    v10 = **(_DWORD **)v7;
    v11 = fs("%d");
    (*(void (__thiscall **)(_DWORD, char *))(v10 + 472))(*(_DWORD *)v7, v11);
    tmpTime.m_time += 86400i64;
    v7 += 32;
    --v12;
  }
  while ( v12 );
}
// A85C00: using guessed type int __security_cookie;

//----- (004D6290) --------------------------------------------------------
void __thiscall AttendCheckWin::OnClick(AttendCheckWin *this, const unsigned int uiBtnIndex)
{
  PgFrameWork *v2; // ebx@1
  int v3; // esi@2
  int v4; // edx@4
  int v5; // eax@5
  int v6; // ecx@6

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, const unsigned int))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable
                                                                         + 16))(
                            ITableBase<AttendReward_AttendRewardTab>::ms_pkTable,
                            uiBtnIndex) )
    {
      if ( (unsigned __int16)uiBtnIndex <= *(_WORD *)(v3 + 200) )
      {
        v4 = *(_DWORD *)(v3 + 196);
        if ( *(_DWORD *)(v4 + 4 * (unsigned __int16)uiBtnIndex) )
        {
          v5 = *(_DWORD *)(v4 + 4 * (unsigned __int16)uiBtnIndex);
          if ( v5 )
          {
            v6 = *(_BYTE *)(v5 + 5);
            if ( (unsigned int)(7 * v6 - 1) <= 0x1B )
              GameFrameWork::NcCharEventAttendRewardReq((GameFrameWork *)v2, uiBtnIndex, 7 * v6 - 1);
          }
        }
      }
    }
  }
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D6310) --------------------------------------------------------
void __thiscall AttendCheckWin::OnRewardEffect(AttendCheckWin *this)
{
  AttendCheckWin *v1; // esi@1

  v1 = this;
  if ( this->m_apkEffect )
  {
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Dice_fanfare);
    SpEffect::Start(v1->m_apkEffect, v1->m_pRunEffect.m_pObject);
  }
}

//----- (004D6340) --------------------------------------------------------
void __thiscall AttendCheckBut::Create(AttendCheckBut *this, int iOffX, int iOffY, PgWin *pkParent, NiSourceTexture *pkTexture)
{
  AttendCheckBut *v5; // esi@1
  NiTexturePalette *v6; // ebx@1
  char *v7; // eax@3
  NiNode *v8; // eax@3
  NiNode *v9; // esi@7
  bool v10; // zf@8
  PgSprData *v11; // ebx@9
  PgWin *v12; // edi@11
  PgSprData *v13; // ST1C_4@11
  int v14; // ebx@11
  NiPointer<PgSprData::PgHitTester> *v15; // ecx@11
  PgWin *v16; // ST20_4@11
  PgFont *v17; // eax@11
  PgWinText *v18; // eax@11
  PgSprData::PgHitTester *v19; // eax@11
  PgFont *v20; // eax@11
  PgWinText *v21; // eax@11
  PgSprData::PgHitTester *v22; // eax@11
  PgFont *v23; // eax@11
  PgWinText *v24; // eax@11
  int iLeft; // [sp+0h] [bp-18h]@9
  int iTop; // [sp+4h] [bp-14h]@9
  NiPointer<NiNode> spNode; // [sp+8h] [bp-10h]@1
  int v28; // [sp+14h] [bp-4h]@1
  unsigned int iOffYa; // [sp+24h] [bp+Ch]@11
  unsigned int iOffYb; // [sp+24h] [bp+Ch]@11
  unsigned int pkParenta; // [sp+28h] [bp+10h]@11
  unsigned int pkParentb; // [sp+28h] [bp+10h]@11
  unsigned int pkParentc; // [sp+28h] [bp+10h]@11
  unsigned int pkTexturea; // [sp+2Ch] [bp+14h]@11

  v5 = this;
  spNode.m_pObject = 0;
  v6 = dword_B70448;
  v28 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\AttendStamp.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, v6);
  v8 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BaseStamp", &iLeft, &iTop, pkTexture);
    if ( PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "SuccessStamp") != 1 )
      PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "SuccessStamp00");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "FailStamp");
    v12 = pkParent;
    v13 = v11;
    v14 = iOffY;
    v5->m_pkSpr = PgWinSpr::CreateWin(iOffX, iOffY, v13, pkParent, 0, 0);
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Month", &iLeft, &iTop, pkTexture)->m_akHitTester.m_pBase;
    v16 = pkParent;
    pkParenta = v15->m_pObject->m_uiHeight;
    iOffYa = v15->m_pObject->m_uiWidth;
    v17 = Font::Get(BOLD);
    v18 = PgWinText::CreateWin(iOffX + iLeft, v14 + iTop, iOffYa, pkParenta, v17, v16, 0, 0);
    v5->m_pkTextMonth = v18;
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v18,
      (unsigned int)&Color::m_kDxWhiteColor);
    ((void (__stdcall *)(signed int))v5->m_pkTextMonth->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Slash", &iLeft, &iTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    pkParentb = v19->m_uiHeight;
    iOffYb = v19->m_uiWidth;
    v20 = Font::Get(BOLD);
    v21 = PgWinText::CreateWin(iOffX + iLeft, v14 + iTop, iOffYb, pkParentb, v20, v12, 0, 0);
    v5->m_pkTextSlash = v21;
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v21,
      (unsigned int)&Color::m_kDxWhiteColor);
    ((void (__stdcall *)(_DWORD))v5->m_pkTextSlash->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/");
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Day", &iLeft, &iTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    pkTexturea = v22->m_uiHeight;
    pkParentc = v22->m_uiWidth;
    v23 = Font::Get(BOLD);
    v24 = PgWinText::CreateWin(iOffX + iLeft, v14 + iTop, pkParentc, pkTexturea, v23, v12, 0, 0);
    v5->m_pkTextDay = v24;
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v24,
      (unsigned int)&Color::m_kDxWhiteColor);
    v5->m_pkTextDay->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v5->m_pkTextDay,
      1u);
    v28 = -1;
    if ( spNode.m_pObject )
    {
      v9 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        v10 = v9 == 0;
LABEL_14:
        if ( !v10 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
        return;
      }
    }
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\AttendStamp.nif load fail", "LoadFail", 0);
      v8 = spNode.m_pObject;
    }
    v28 = -1;
    if ( v8 )
    {
      v9 = v8;
      if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        v10 = v9 == 0;
        goto LABEL_14;
      }
    }
  }
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D6620) --------------------------------------------------------
void __thiscall AttendCheckBut::Create(AttendCheckBut *this, int iOffX, int iOffY, const unsigned int eButMessage, const unsigned int uiIndex, PgWin *pkParent, NiSourceTexture *pkTexture)
{
  AttendCheckBut *v7; // esi@1
  NiTexturePalette *v8; // ebx@1
  char *v9; // eax@3
  NiNode *v10; // eax@3
  NiNode *v11; // esi@7
  bool v12; // zf@8
  PgSprData *v13; // ebx@9
  PgWin *v14; // edi@11
  PgSprData *v15; // ST1C_4@11
  int v16; // ebx@11
  PgWinSpr *v17; // eax@11
  NiNode *v18; // ecx@11
  PgWinBut *v19; // eax@13
  PgSprData::PgHitTester *v20; // eax@13
  PgFont *v21; // eax@13
  PgWinText *v22; // eax@13
  PgSprData::PgHitTester *v23; // eax@13
  PgFont *v24; // eax@13
  PgWinText *v25; // eax@13
  PgSprData::PgHitTester *v26; // eax@13
  PgFont *v27; // eax@13
  PgWinText *v28; // eax@13
  NiTexturePalette *v29; // edi@13
  char *v30; // eax@15
  NiNode *v31; // esi@16
  void *v32; // edi@20
  NiObject *v33; // eax@21
  SpEffect *v34; // ecx@23
  NiNode *v35; // esi@24
  NiPointer<NiNode> pkNiNodePtr; // [sp+0h] [bp-1Ch]@13
  int iLeft; // [sp+4h] [bp-18h]@9
  int iTop; // [sp+8h] [bp-14h]@9
  NiPointer<NiNode> spNode; // [sp+Ch] [bp-10h]@1
  int v40; // [sp+18h] [bp-4h]@1
  unsigned int iOffYa; // [sp+28h] [bp+Ch]@13
  unsigned int iOffYb; // [sp+28h] [bp+Ch]@13
  NiNode *pkAttechEffect; // [sp+2Ch] [bp+10h]@13
  PgSprData *pkSprData; // [sp+34h] [bp+18h]@11
  unsigned int pkSprDataa; // [sp+34h] [bp+18h]@13
  unsigned int pkSprDatab; // [sp+34h] [bp+18h]@13
  unsigned int pkSprDatac; // [sp+34h] [bp+18h]@13
  unsigned int pkTexturea; // [sp+38h] [bp+1Ch]@13

  v7 = this;
  spNode.m_pObject = 0;
  v8 = dword_B70448;
  v40 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v9 = Folder::Merge(&Folder::m_acMenu, "Game\\AttendStamp.nif");
  PgUtil::LoadNodeNifFile(v9, &spNode, v8);
  v10 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BaseStamp", &iLeft, &iTop, pkTexture);
    if ( PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "SuccessStamp") != 1 )
      PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "SuccessStamp00");
    PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "FailStamp");
    PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "GiftDisableBtn");
    v14 = pkParent;
    v15 = v13;
    v16 = iOffY;
    v17 = PgWinSpr::CreateWin(iOffX, iOffY, v15, pkParent, 0, 0);
    v18 = spNode.m_pObject;
    v7->m_pkSpr = v17;
    pkSprData = PgSprData::Create(&v18->baseclass_0, "GiftBtnNor", &iLeft, &iTop, pkTexture);
    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "GiftBtnClick");
    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "GiftBtnNor");
    if ( PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "MissonComplete") != 1 )
      PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "MissonComplete00");
    v19 = PgWinBut::CreateWin(iOffX + iLeft, iOffY + iTop, pkSprData, v14, eButMessage, 0, 0);
    v7->m_pkBut = v19;
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v19,
      uiIndex);
    v7->m_pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    pkAttechEffect = (NiNode *)v7->m_pkBut;
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Month", &iLeft, &iTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    pkSprDataa = v20->m_uiHeight;
    iOffYa = v20->m_uiWidth;
    v21 = Font::Get(BOLD);
    v22 = PgWinText::CreateWin(iOffX + iLeft, v16 + iTop, iOffYa, pkSprDataa, v21, v14, 0, 0);
    v7->m_pkTextMonth = v22;
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v22,
      1u);
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Slash", &iLeft, &iTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    pkSprDatab = v23->m_uiHeight;
    iOffYb = v23->m_uiWidth;
    v24 = Font::Get(BOLD);
    v25 = PgWinText::CreateWin(iOffX + iLeft, v16 + iTop, iOffYb, pkSprDatab, v24, v14, 0, 0);
    v7->m_pkTextSlash = v25;
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      1u);
    ((void (__stdcall *)(_DWORD))v7->m_pkTextSlash->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/");
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Day", &iLeft, &iTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    pkTexturea = v26->m_uiHeight;
    pkSprDatac = v26->m_uiWidth;
    v27 = Font::Get(BOLD);
    v28 = PgWinText::CreateWin(iOffX + iLeft, v16 + iTop, pkSprDatac, pkTexturea, v27, v14, 0, 0);
    v7->m_pkTextDay = v28;
    v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v28,
      1u);
    pkNiNodePtr.m_pObject = 0;
    v29 = dword_B70448;
    LOBYTE(v40) = 1;
    if ( !Folder::m_bInit )
      Folder::Init();
    v30 = Folder::Merge(&Folder::m_acEffect, "AttendReward.nif");
    PgUtil::LoadNodeNifFile(v30, &pkNiNodePtr, v29);
    if ( pkNiNodePtr.m_pObject )
    {
      v32 = operator new(0x44u);
      LOBYTE(v40) = 2;
      if ( v32 )
      {
        v33 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
        SpEffect::SpEffect((SpEffect *)v32, (NiNode *)v33);
      }
      else
      {
        v33 = 0;
      }
      v7->m_apkBlinkEff = (SpEffect *)v33;
      BYTE1(v33[8].baseclass_0.vfptr) = 1;
      v34 = v7->m_apkBlinkEff;
      LOBYTE(v40) = 1;
      SpEffect::Start(v34, pkAttechEffect);
      LOBYTE(v40) = 0;
      if ( pkNiNodePtr.m_pObject )
      {
        v35 = pkNiNodePtr.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v35 )
            v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
        }
      }
      v11 = spNode.m_pObject;
      v40 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        v12 = v11 == 0;
LABEL_30:
        if ( !v12 )
          v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
        return;
      }
    }
    else
    {
      v31 = spNode.m_pObject;
      v40 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v31 )
        ((void (__cdecl *)(signed int))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
    }
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\AttendStamp.nif load fail", "LoadFail", 0);
      v10 = spNode.m_pObject;
    }
    v40 = -1;
    if ( v10 )
    {
      v11 = v10;
      if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        v12 = v11 == 0;
        goto LABEL_30;
      }
    }
  }
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D6A90) --------------------------------------------------------
void __thiscall AttendCheckBut::SetType(AttendCheckBut *this, unsigned int eType)
{
  AttendCheckBut *v2; // esi@1
  PgWinSpr *v3; // ecx@1
  PgWinBut *v4; // esi@12

  v2 = this;
  v3 = this->m_pkSpr;
  if ( v3 )
  {
    v2->m_eType = eType;
    if ( eType )
    {
      if ( eType == 4 )
      {
        if ( v2->m_pkBut && v2->m_apkBlinkEff )
        {
          v3->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
          v2->m_pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
          ((void (__stdcall *)(_DWORD))v2->m_pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          v2->m_apkBlinkEff->m_spEffect.m_pObject->baseclass_0.m_uFlags |= 1u;
        }
      }
      else
      {
        if ( eType == 5 )
        {
          if ( v2->m_pkBut )
          {
            if ( v2->m_apkBlinkEff )
            {
              v3->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              v2->m_pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
              ((void (__stdcall *)(_DWORD))v2->m_pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              v2->m_apkBlinkEff->m_spEffect.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
            }
          }
        }
        else
        {
          ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(eType);
        }
      }
    }
    else
    {
      v3->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      ((void (__stdcall *)(_DWORD))v2->m_pkSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
      v4 = v2->m_pkBut;
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
  }
}

//----- (004D6B80) --------------------------------------------------------
bool __thiscall AttendCheckWin::Create(AttendCheckWin *this, PgFrameWork *pkFrameWork)
{
  AttendCheckWin *v2; // ebx@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  NiNode *v5; // ecx@3
  NiNode *v6; // esi@7
  bool v7; // zf@8
  bool result; // al@11
  NiAVObject *v9; // eax@12
  NiProperty *v10; // eax@12
  NiProperty *v11; // esi@12
  NiRefObjectVtbl *v12; // eax@14
  void *v13; // eax@15
  NiNode *v14; // esi@18
  PgSprData *v15; // eax@22
  NiNode *v16; // esi@25
  int v17; // esi@29
  int v18; // edi@29
  PgSprData *v19; // eax@29
  PgFont *v20; // eax@31
  PgWinText *v21; // esi@31
  NiRefObjectVtbl *v22; // edi@31
  char *v23; // eax@31
  PgFont *v24; // eax@31
  PgFont *v25; // eax@31
  PgWinText *v26; // eax@31
  NiRefObjectVtbl *v27; // esi@31
  char *v28; // eax@31
  NiSourceTexture *v29; // esi@31
  PgSprData *v30; // eax@31
  PgWinText *v31; // eax@31
  PgSprData *v32; // eax@31
  PgSprData::PgHitTester *v33; // ecx@31
  int v34; // eax@31
  int v35; // edi@31
  int v36; // edx@32
  int v37; // eax@34
  bool v38; // sf@34
  unsigned __int8 v39; // of@34
  int v40; // edx@34
  NiTexturingProperty *v41; // esi@40
  NiTexturingProperty *v42; // esi@45
  PgFont *v43; // eax@50
  PgWinText *v44; // esi@50
  char *v45; // eax@52
  NiTexturingProperty *v46; // esi@53
  void *v47; // esi@58
  NiObject *v48; // eax@59
  NiRefObjectVtbl *v49; // eax@62
  NiNode *v50; // esi@64
  NiTexturingProperty *v51; // esi@67
  NiNode *v52; // esi@69
  Font::FontDefine kFontDefine; // [sp+50h] [bp-84h]@31
  float v54; // [sp+84h] [bp-50h]@62
  float v55; // [sp+88h] [bp-4Ch]@62
  float v56; // [sp+8Ch] [bp-48h]@62
  int uiYPos; // [sp+90h] [bp-44h]@31
  int uiXPos; // [sp+94h] [bp-40h]@31
  AttendCheckBut *v59; // [sp+98h] [bp-3Ch]@31
  int v60; // [sp+9Ch] [bp-38h]@31
  int v61; // [sp+A0h] [bp-34h]@32
  int j; // [sp+A4h] [bp-30h]@32
  NiSourceTexture *pkTexture; // [sp+A8h] [bp-2Ch]@15
  NiPointer<NiNode> pkNiNodePtr; // [sp+ACh] [bp-28h]@50
  NiPointer<NiTexturingProperty> spTexProp; // [sp+B0h] [bp-24h]@12
  unsigned int uiWidth; // [sp+B4h] [bp-20h]@29
  unsigned int uiHeight; // [sp+B8h] [bp-1Ch]@29
  int iLeft; // [sp+BCh] [bp-18h]@22
  int iTop; // [sp+C0h] [bp-14h]@22
  NiPointer<NiNode> spNode; // [sp+C4h] [bp-10h]@1
  int v71; // [sp+D0h] [bp-4h]@1
  PgSprData *ia; // [sp+DCh] [bp+8h]@29
  PgSprData *ib; // [sp+DCh] [bp+8h]@31
  int i; // [sp+DCh] [bp+8h]@31

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v71 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\AttendWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\AttendWin.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v71 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        v7 = v6 == 0;
LABEL_9:
        if ( !v7 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v9 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v10 = NiAVObject::GetProperty(v9, 8);
  v11 = v10;
  spTexProp.m_pObject = (NiTexturingProperty *)v10;
  if ( v10 )
    InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v12 = v11[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v71) = 1;
  if ( !v12 || (v13 = v12[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v13) == 0) )
  {
    LOBYTE(v71) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v14 = spNode.m_pObject;
    v71 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v14 )
    {
      ((void (__thiscall *)(NiNode *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v14);
      return 0;
    }
    return 0;
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, (NiSourceTexture *)v13);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v15, 0, pkFrameWork, "AttendCheckWin", 0) )
  {
    v17 = iLeft;
    v18 = iTop;
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ia = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CloseBtnNor", &iLeft, &iTop, pkTexture);
    PgSprData::Add(ia, &spNode.m_pObject->baseclass_0, "CloseBtnClick");
    PgSprData::Add(ia, &spNode.m_pObject->baseclass_0, "CloseBtnOver");
    PgWinBut::CreateWin(iLeft, iTop, ia, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v20 = Font::Get(MAIN_MENU);
      v21 = PgWinText::CreateWin(
              iLeft - v17,
              iTop - v18,
              uiWidth,
              uiHeight,
              v20,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v21,
        5u);
      v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v23 = TextData2::Get(0xE53D4A31u);
      v22[118].__vecDelDtor((NiRefObject *)v21, (unsigned int)v23);
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v21,
        0);
      ib = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &iLeft, &iTop, 0);
      memcpy(&kFontDefine, Font::GetFontDefine(TITLEBOLD), sizeof(kFontDefine));
      kFontDefine.Weight = 700;
      kFontDefine.Height = 14;
      kFontDefine.dwOutline = 1;
      v24 = AttendCheckWin::CreateFontA(v2, &kFontDefine);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spFont, (NiD3DDefaultShader *)v24);
      kFontDefine.Height = 16;
      v25 = AttendCheckWin::CreateFontA(v2, &kFontDefine);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spFont[1], (NiD3DDefaultShader *)v25);
      v26 = PgWinText::CreateWin(
              iLeft,
              iTop,
              ib->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
              ib->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
              v2->m_spFont[1].m_pObject,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkTextCon = v26;
      v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v26,
        5u);
      v27 = v2->m_pkTextCon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v28 = TextData2::Get(0x327E8F83u);
      v27[118].__vecDelDtor((NiRefObject *)v2->m_pkTextCon, (unsigned int)v28);
      v29 = pkTexture;
      v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, pkTexture);
      v31 = PgWinText::CreateWin(
              iLeft,
              iTop,
              v30->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
              v30->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
              v2->m_spFont[0].m_pObject,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkText = v31;
      v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v31,
        5u);
      v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Start", &iLeft, &iTop, v29);
      uiXPos = iLeft;
      v33 = v32->m_akHitTester.m_pBase->m_pObject;
      uiYPos = iTop;
      uiWidth = v33->m_uiWidth;
      uiHeight = v32->m_akHitTester.m_pBase->m_pObject->m_uiHeight;
      v34 = 0;
      v35 = (int)v2->m_DayBut;
      i = 0;
      v60 = 0;
      v59 = v2->m_DayBut;
      while ( 2 )
      {
        v36 = 0;
        j = 0;
        v61 = v34;
        do
        {
          if ( (unsigned int)v34 > 0x1B )
          {
            v42 = spTexProp.m_pObject;
            LOBYTE(v71) = 0;
            if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
              v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v42, 1u);
            v6 = spNode.m_pObject;
            v71 = -1;
            if ( spNode.m_pObject
              && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            {
              v7 = v6 == 0;
              goto LABEL_9;
            }
            return 0;
          }
          v37 = uiXPos + v36 * (uiWidth + 2);
          v39 = __OFSUB__(v36, 6);
          v38 = v36 - 6 < 0;
          v40 = *(_DWORD *)v35;
          if ( v38 ^ v39 )
          {
            (*(void (__thiscall **)(int, int, unsigned int, AttendCheckWin *, NiSourceTexture *))(v40 + 8))(
              v35,
              v37,
              uiYPos + i * (uiHeight + 2),
              v2,
              v29);
          }
          else
          {
            (*(void (__thiscall **)(int, int, unsigned int, signed int, int, AttendCheckWin *, NiSourceTexture *))(v40 + 4))(
              v35,
              v37,
              uiYPos + i * (uiHeight + 2),
              1,
              i,
              v2,
              v29);
            v29 = pkTexture;
          }
          v36 = j + 1;
          v34 = v61 + 1;
          v35 += 32;
          j = v36;
          ++v61;
        }
        while ( v36 < 7 );
        ++i;
        v34 = v60 + 7;
        v35 = (int)&v59[7];
        v60 = v34;
        v59 += 7;
        if ( v34 < 28 )
          continue;
        break;
      }
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, &uiWidth, &uiHeight) )
      {
        v43 = Font::Get(BOLD);
        v44 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v43, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v44,
          0);
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&v2->m_pRunEffect,
          (NiD3DDefaultShader *)v44);
        pkNiNodePtr.m_pObject = 0;
        LOBYTE(v71) = 2;
        if ( !Folder::m_bInit )
          Folder::Init();
        v45 = Folder::Merge(&Folder::m_acEffect, "AttendRewardFull.nif");
        PgUtil::LoadNodeNifFile(v45, &pkNiNodePtr, 0);
        if ( pkNiNodePtr.m_pObject )
        {
          v47 = operator new(0x44u);
          LOBYTE(v71) = 3;
          if ( v47 )
          {
            v48 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
            SpEffect::SpEffect((SpEffect *)v47, (NiNode *)v48);
          }
          else
          {
            v48 = 0;
          }
          LOBYTE(v71) = 2;
          v2->m_apkEffect = (SpEffect *)v48;
          if ( v48 )
          {
            v49 = v48->baseclass_0.vfptr;
            v54 = 0.0;
            v55 = 0.0;
            *(float *)&v49[22].__vecDelDtor = 0.0;
            v56 = 1000.0;
            *(float *)&v49[23].__vecDelDtor = 0.0;
            *(float *)&v49[24].__vecDelDtor = 1000.0;
            ((void (__thiscall *)(AttendCheckWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
              v2,
              PgWin::ms_uiScreenWidth,
              PgWin::ms_uiScreenHeight,
              0.5,
              0.5);
          }
          LOBYTE(v71) = 1;
          if ( pkNiNodePtr.m_pObject )
          {
            v50 = pkNiNodePtr.m_pObject;
            if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v50 )
                v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v50, 1u);
            }
          }
          v51 = spTexProp.m_pObject;
          LOBYTE(v71) = 0;
          if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v51, 1u);
          v52 = spNode.m_pObject;
          v71 = -1;
          if ( spNode.m_pObject
            && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v52 )
            v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
          return 1;
        }
        v46 = spTexProp.m_pObject;
        LOBYTE(v71) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
        v6 = spNode.m_pObject;
        v71 = -1;
        if ( spNode.m_pObject
          && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          v7 = v6 == 0;
          goto LABEL_9;
        }
      }
      else
      {
        v41 = spTexProp.m_pObject;
        LOBYTE(v71) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v41, 1u);
        v6 = spNode.m_pObject;
        v71 = -1;
        if ( spNode.m_pObject
          && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          v7 = v6 == 0;
          goto LABEL_9;
        }
      }
      return 0;
    }
    LOBYTE(v71) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v71 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  else
  {
    LOBYTE(v71) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v16 = spNode.m_pObject;
    v71 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v16 )
      return 0;
    ((void (__thiscall *)(NiNode *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v16);
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D7370) --------------------------------------------------------
void __thiscall AttendCheckWin::OnCommand(AttendCheckWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      AttendCheckWin::OnClick(this, lParam);
  }
  else
  {
    ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)();
  }
}

//----- (004D73A0) --------------------------------------------------------
void __thiscall AttendCheckWin::UpdateMeWin(AttendCheckWin *this, float fCurTime)
{
  AttendCheckWin *v2; // esi@1
  SpEffect *v3; // ecx@1
  PgFrameWork *v4; // eax@5
  NiRefObjectVtbl *v5; // edi@7
  char *v6; // eax@7
  char *v7; // eax@7

  v2 = this;
  v3 = this->m_apkEffect;
  if ( v3->m_bLive )
  {
    EffStart = 1;
    SpEffect::Update(v3, fCurTime);
  }
  if ( EffStart == 1 && !v2->m_apkEffect->m_bLive )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( !v4 )
      return;
    GameFrameWork::OnOpenAttendRewardWin((GameFrameWork *)v4);
    EffStart = 0;
  }
  v5 = v2->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = TextData2::Get(0xDE3B4A41u);
  v7 = fs(v6);
  v5[118].__vecDelDtor((NiRefObject *)v2->m_pkText, (unsigned int)v7);
}

//----- (004D7440) --------------------------------------------------------
void __thiscall AttendCheckWin::InitEvtState(AttendCheckWin *this)
{
  AttendCheckWin *v1; // esi@1
  int v2; // esi@1
  signed int v3; // edi@1
  int v4; // eax@2
  int v5; // eax@3

  v1 = this;
  this->m_uiRBtnNum = AttendRewardTab::GetNumOfType(0);
  v1->m_iEvtIndex = 0;
  v1->m_iCheckCnt = 0;
  v1->m_bRMonthState = 0;
  v2 = (int)&v1->m_DayBut[0].m_pkSpr;
  v3 = 28;
  do
  {
    v4 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      *(_DWORD *)(v2 + 20) = 0;
      *(_WORD *)(v4 + 28) &= 0xFFFEu;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 492))(0);
      v5 = *(_DWORD *)(v2 + 4);
      if ( v5 )
        *(_WORD *)(v5 + 28) |= 1u;
    }
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)(v2 + 8) + 468))(&Color::m_kDxWhiteColor);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)(v2 + 12) + 468))(&Color::m_kDxWhiteColor);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)(v2 + 16) + 468))(&Color::m_kDxWhiteColor);
    v2 += 32;
    --v3;
  }
  while ( v3 );
}

//----- (004D74E0) --------------------------------------------------------
void __thiscall AttendCheckWin::SetCheckState(AttendCheckWin *this, const char *uiCheckState)
{
  AttendCheckWin *v2; // edi@1
  unsigned int v3; // ebx@2
  char *v4; // esi@2
  int v5; // ecx@4
  int v6; // ecx@9

  v2 = this;
  if ( uiCheckState )
  {
    v3 = 0;
    v4 = (char *)&this->m_DayBut[0].m_pkSpr;
    do
    {
      if ( uiCheckState[v3] == 1 )
      {
        v5 = *(_DWORD *)v4;
        if ( *(_DWORD *)v4 )
        {
          *((_DWORD *)v4 + 5) = 1;
          (*(void (__stdcall **)(signed int))(*(_DWORD *)v5 + 492))(1);
        }
        (*(void (__stdcall **)(D3DXCOLOR *))(**((_DWORD **)v4 + 2) + 468))(&Color::m_kDxBlackColor);
        (*(void (__stdcall **)(D3DXCOLOR *))(**((_DWORD **)v4 + 3) + 468))(&Color::m_kDxBlackColor);
        (*(void (__stdcall **)(D3DXCOLOR *))(**((_DWORD **)v4 + 4) + 468))(&Color::m_kDxBlackColor);
        ++v2->m_iCheckCnt;
      }
      if ( v3 < v2->m_iEvtIndex )
      {
        if ( !*((_DWORD *)v4 + 5) )
        {
          v6 = *(_DWORD *)v4;
          if ( *(_DWORD *)v4 )
          {
            *((_DWORD *)v4 + 5) = 2;
            (*(void (__stdcall **)(signed int))(*(_DWORD *)v6 + 492))(2);
          }
        }
        (*(void (__stdcall **)(D3DXCOLOR *))(**((_DWORD **)v4 + 2) + 468))(&Color::m_kDxBlackColor);
        (*(void (__stdcall **)(D3DXCOLOR *))(**((_DWORD **)v4 + 3) + 468))(&Color::m_kDxBlackColor);
        (*(void (__stdcall **)(D3DXCOLOR *))(**((_DWORD **)v4 + 4) + 468))(&Color::m_kDxBlackColor);
      }
      ++v3;
      v4 += 32;
    }
    while ( v3 < 0x1C );
  }
}

//----- (004D75D0) --------------------------------------------------------
void __thiscall AttendCheckWin::SetButState(AttendCheckWin *this, const char *uiRewardState, const int iRewardCnt)
{
  const int v3; // ebx@1
  int v4; // edi@2
  int v5; // esi@2
  int v6; // edx@4
  int v7; // eax@5
  int v8; // eax@8
  int v9; // esi@9
  PgWinSpr *v10; // eax@9
  bool v11; // zf@10
  int v12; // esi@15
  int v13; // edx@17
  int v14; // eax@18
  int v15; // ecx@19
  int v16; // eax@19
  unsigned int v17; // esi@20
  int v18; // edx@20
  int v19; // ecx@21
  AttendCheckWin *v20; // [sp+Ch] [bp-4h]@1
  unsigned int i; // [sp+1Ch] [bp+Ch]@14

  v3 = 0;
  v20 = this;
  if ( iRewardCnt <= 0 )
  {
LABEL_14:
    i = 0;
    if ( v20->m_uiRBtnNum )
    {
      do
      {
        v12 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
        if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable
                                                                  + 16))(
                                 ITableBase<AttendReward_AttendRewardTab>::ms_pkTable,
                                 (unsigned __int16)i) )
          break;
        if ( (unsigned __int16)i > *(_WORD *)(v12 + 200) )
          break;
        v13 = *(_DWORD *)(v12 + 196);
        if ( !*(_DWORD *)(v13 + 4 * (unsigned __int16)i) )
          break;
        v14 = *(_DWORD *)(v13 + 4 * (unsigned __int16)i);
        if ( !v14 )
          break;
        v15 = *(_BYTE *)(v14 + 5);
        v16 = 7 * v15 - 1;
        if ( (unsigned int)v16 >= 0x1C )
          break;
        v17 = v20->m_DayBut[v16].m_eType;
        v18 = (int)&v20->m_DayBut[v16].m_eType;
        if ( v16 > v20->m_iEvtIndex )
        {
          v17 = 3;
        }
        else
        {
          v19 = 7 * v15 - 1;
          if ( v16 >= 0 )
          {
            do
            {
              if ( v19 != v16 && *(_DWORD *)(v18 - 16) )
                break;
              if ( *(_DWORD *)v18 != 1 )
                goto LABEL_28;
              v18 -= 32;
              --v19;
            }
            while ( v19 >= 0 );
          }
          v17 = 5;
        }
LABEL_28:
        AttendCheckBut::SetType(&v20->m_DayBut[v16], v17);
        ++i;
      }
      while ( i < v20->m_uiRBtnNum );
    }
  }
  else
  {
    while ( 1 )
    {
      v4 = (unsigned __int8)uiRewardState[v3];
      v5 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
      if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable
                                                                + 16))(
                               ITableBase<AttendReward_AttendRewardTab>::ms_pkTable,
                               (unsigned __int8)uiRewardState[v3]) )
        break;
      if ( (unsigned __int16)v4 > *(_WORD *)(v5 + 200) )
        break;
      v6 = *(_DWORD *)(v5 + 196);
      if ( !*(_DWORD *)(v6 + 4 * v4) )
        break;
      v7 = *(_DWORD *)(v6 + 4 * v4);
      if ( !v7 )
        break;
      if ( *(_DWORD *)(v7 + 1) == 1 )
      {
        v20->m_bRMonthState = 1;
      }
      else
      {
        v8 = 7 * *(_BYTE *)(v7 + 5) - 1;
        if ( (unsigned int)v8 > 0x1B )
          return;
        v9 = (int)&v20->m_DayBut[v8];
        v10 = v20->m_DayBut[v8].m_pkSpr;
        if ( v10 )
        {
          v11 = *(_DWORD *)(v9 + 8) == 0;
          *(_DWORD *)(v9 + 24) = 4;
          if ( !v11 )
          {
            if ( *(_DWORD *)(v9 + 28) )
            {
              v10->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              *(_WORD *)(*(_DWORD *)(v9 + 8) + 28) &= 0xFFFEu;
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 8) + 240))(0);
              *(_WORD *)(**(_DWORD **)(v9 + 28) + 28) |= 1u;
            }
          }
        }
      }
      ++v3;
      if ( v3 >= iRewardCnt )
        goto LABEL_14;
    }
  }
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D77B0) --------------------------------------------------------
void __thiscall AttendCheckWin::CheckIt(AttendCheckWin *this)
{
  AttendCheckWin *v1; // edi@1
  unsigned int v2; // eax@1
  int v3; // edx@2
  int v4; // eax@3
  char *v5; // ecx@4
  unsigned int v6; // eax@8
  int v7; // edx@10
  int v8; // esi@10

  v1 = this;
  v2 = this->m_iEvtIndex;
  if ( v2 < 0x1C )
  {
    v3 = v2;
    if ( this->m_DayBut[v2].m_pkBut )
    {
      v4 = v2 - 1;
      if ( v4 >= 0 )
      {
        v5 = (char *)&this->m_DayBut[v4].m_eType;
        do
        {
          if ( *((_DWORD *)v5 - 4) )
            break;
          if ( *(_DWORD *)v5 != 1 )
            goto LABEL_9;
          v5 -= 32;
          --v4;
        }
        while ( v4 >= 0 );
      }
      v6 = 5;
    }
    else
    {
LABEL_9:
      v6 = 1;
    }
    AttendCheckBut::SetType(&v1->m_DayBut[v3], v6);
    v7 = v1->m_iEvtIndex;
    v8 = (int)&v1->m_DayBut[v7];
    ((void (__stdcall *)(_DWORD))v1->m_DayBut[v7].m_pkTextMonth->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxBlackColor);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 16) + 468))(&Color::m_kDxBlackColor);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 20) + 468))(&Color::m_kDxBlackColor);
    if ( v1->m_iEvtIndex == 27 )
      v1->m_iEvtIndex = 28;
    ++v1->m_iCheckCnt;
  }
}

//----- (004D7880) --------------------------------------------------------
void __thiscall AttendCheckWin::SetReward(AttendCheckWin *this, const unsigned int uiRewardID)
{
  int v2; // esi@1
  AttendCheckWin *v3; // ebx@1
  int v4; // ecx@3
  int v5; // eax@4
  int v6; // eax@7
  int v7; // eax@8

  v2 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
  v3 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, const unsigned int))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable
                                                                       + 16))(
                          ITableBase<AttendReward_AttendRewardTab>::ms_pkTable,
                          uiRewardID) )
  {
    if ( (unsigned __int16)uiRewardID <= *(_WORD *)(v2 + 200) )
    {
      v4 = *(_DWORD *)(v2 + 196);
      if ( *(_DWORD *)(v4 + 4 * (unsigned __int16)uiRewardID) )
      {
        v5 = *(_DWORD *)(v4 + 4 * (unsigned __int16)uiRewardID);
        if ( v5 )
        {
          if ( *(_DWORD *)(v5 + 1) == 1 )
          {
            v3->m_bRMonthState = 1;
          }
          else
          {
            v6 = 7 * *(_BYTE *)(v5 + 5) - 1;
            if ( (unsigned int)v6 < 0x1C )
            {
              v7 = v6;
              if ( v3->m_DayBut[v7].m_pkBut )
                AttendCheckBut::SetType(&v3->m_DayBut[v7], 4u);
            }
          }
        }
      }
    }
  }
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D7910) --------------------------------------------------------
void __thiscall AttendCheckWin::ChangeDay(AttendCheckWin *this, const int EvtIndex)
{
  AttendCheckWin *v2; // esi@1
  unsigned int v3; // eax@2
  unsigned int v4; // eax@3
  unsigned int v5; // ecx@3
  PgWinSpr *v6; // ecx@5
  AttendReward *v7; // eax@9

  v2 = this;
  if ( (unsigned int)EvtIndex <= 0x1C )
  {
    v3 = this->m_iEvtIndex;
    if ( v3 < 0x1C )
    {
      v4 = v3;
      v5 = this->m_DayBut[v4].m_eType;
      if ( !v5 || v5 == 3 )
      {
        v6 = v2->m_DayBut[v4].m_pkSpr;
        if ( v6 )
        {
          v2->m_DayBut[v4].m_eType = 2;
          ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(2);
        }
        AttendCheckBut::SetTextColor(&v2->m_DayBut[v2->m_iEvtIndex], &Color::m_kDxBlackColor);
      }
      v2->m_iEvtIndex = EvtIndex;
      if ( EvtIndex == 28 )
      {
        v7 = AttendRewardTab::GetByType(1u);
        if ( v7 )
        {
          if ( v2->m_iCheckCnt < v7->AR_Count )
            v2->m_bRMonthState = 1;
        }
      }
    }
  }
}

//----- (004D79B0) --------------------------------------------------------
int __thiscall AttendCheckWin::GetMonthRewardIndex(AttendCheckWin *this)
{
  AttendCheckWin *v1; // ebx@1
  int result; // eax@2
  int v3; // edi@4
  AttendReward *v4; // eax@5
  unsigned int i; // [sp+4h] [bp-4h]@4

  v1 = this;
  if ( this->m_iEvtIndex < 0x1C || this->m_bRMonthState )
  {
    result = -1;
  }
  else
  {
    v3 = -1;
    i = 0;
    if ( ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
    {
      do
      {
        v4 = AttendRewardTab::GetByType(1u, &i);
        if ( v4 )
        {
          if ( v1->m_iCheckCnt >= v4->AR_Count )
            v3 = v4->AR_ID;
        }
        ++i;
      }
      while ( i < ITableBase<AttendReward_AttendRewardTab>::GetTotal() );
    }
    result = v3;
  }
  return result;
}

//----- (004D7A20) --------------------------------------------------------
bool __thiscall AttendCheckWin::IsRewardOn(AttendCheckWin *this)
{
  AttendCheckWin *v1; // esi@1
  bool result; // al@2
  bool v3; // zf@3
  AttendReward *v4; // eax@4
  int v5; // eax@5
  unsigned int v6; // eax@7
  unsigned int i; // [sp+4h] [bp-4h]@3

  v1 = this;
  if ( AttendCheckWin::GetMonthRewardIndex(this) == -1 )
  {
    v3 = v1->m_uiRBtnNum == 0;
    i = 0;
    if ( !v3 )
    {
      do
      {
        v4 = AttendRewardTab::GetByType(0, &i);
        if ( !v4 )
          break;
        v5 = 7 * v4->AR_Count - 1;
        if ( v5 < 0 )
          break;
        if ( v5 >= 28 )
          break;
        v6 = v1->m_DayBut[v5].m_eType;
        if ( v6 == 5 )
          goto LABEL_2;
        if ( v6 == 3 )
          break;
        ++i;
      }
      while ( i < v1->m_uiRBtnNum );
    }
    result = 0;
  }
  else
  {
LABEL_2:
    result = 1;
  }
  return result;
}

//----- (004D7AA0) --------------------------------------------------------
bool __thiscall AttendCheckWin::IsRewardAll(AttendCheckWin *this)
{
  AttendCheckWin *v1; // edi@1
  unsigned int v2; // esi@2
  bool result; // al@6
  void *v4; // eax@7
  int v5; // eax@8
  unsigned int v6; // eax@10

  v1 = this;
  if ( this->m_bRMonthState )
  {
    v2 = 0;
    if ( this->m_uiRBtnNum )
    {
      while ( v2 < ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
      {
        while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4),
                                      v2)
                          + 1) )
        {
          ++v2;
          if ( v2 >= ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
            goto LABEL_6;
        }
        v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4), v2);
        if ( !v4 )
          break;
        v5 = 7 * *((_BYTE *)v4 + 5) - 1;
        if ( v5 < 0 )
          break;
        if ( v5 >= 28 )
          break;
        v6 = v1->m_DayBut[v5].m_eType;
        if ( v6 == 5 )
          break;
        if ( v6 == 3 )
          break;
        ++v2;
        if ( v2 >= v1->m_uiRBtnNum )
          goto LABEL_13;
      }
LABEL_6:
      result = 0;
    }
    else
    {
LABEL_13:
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D7B50) --------------------------------------------------------
void __thiscall AttendCheckBut::_AttendCheckBut(AttendCheckBut *this)
{
  AttendCheckBut *v1; // ebx@1
  SpEffect *v2; // esi@1
  NiNode *v3; // edi@2

  v1 = this;
  v2 = this->m_apkBlinkEff;
  this->vfptr = (AttendCheckButVtbl *)&AttendCheckBut::_vftable_;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    operator delete(v2);
    v1->m_apkBlinkEff = 0;
  }
}
// 98DF48: using guessed type int (__thiscall *AttendCheckBut___vftable_)(void *p, char);

//----- (004D7BF0) --------------------------------------------------------
void __thiscall AttendCheckWin::AttendCheckWin(AttendCheckWin *this)
{
  AttendCheckWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttendCheckWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AttendCheckWin::_vftable_;
  v1->m_uiRBtnNum = 0;
  _eh_vector_constructor_iterator_(
    v1->m_DayBut,
    0x20u,
    28,
    (void (__thiscall *)(void *))AttendCheckBut::AttendCheckBut,
    (void (__thiscall *)(void *))AttendCheckBut::_AttendCheckBut);
  v1->m_pkTextCon = 0;
  v1->m_pkText = 0;
  v1->m_iEvtIndex = 0;
  v1->m_iCheckCnt = 0;
  v1->m_bRMonthState = 0;
  v1->m_apkEffect = 0;
  v1->m_pRunEffect.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spFont,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 98DF58: using guessed type int (__stdcall *AttendCheckWin___vftable_)(int uiFlags);
// 98DF74: using guessed type int (__thiscall *AttendCheckWin___vftable_)(void *p, char);

//----- (004D7CB0) --------------------------------------------------------
void __thiscall AttendCheckWin::_AttendCheckWin(AttendCheckWin *this)
{
  AttendCheckWin *v1; // esi@1
  SpEffect *v2; // edi@1
  NiNode *v3; // ebx@2
  PgFont *v4; // edi@7
  PgFont *v5; // edi@12
  NiNode *v6; // edi@17

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttendCheckWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AttendCheckWin::_vftable_;
  v2 = this->m_apkEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
    v1->m_apkEffect = 0;
  }
  v4 = v1->m_spFont[0].m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spFont[0].m_pObject = 0;
  }
  v5 = v1->m_spFont[1].m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spFont[1].m_pObject = 0;
  }
  _eh_vector_destructor_iterator_(
    v1->m_spFont,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v6 = v1->m_pRunEffect.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  _eh_vector_destructor_iterator_(v1->m_DayBut, 0x20u, 28, (void (__thiscall *)(void *))AttendCheckBut::_AttendCheckBut);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 98DF58: using guessed type int (__stdcall *AttendCheckWin___vftable_)(int uiFlags);
// 98DF74: using guessed type int (__thiscall *AttendCheckWin___vftable_)(void *p, char);

//----- (004D7E30) --------------------------------------------------------
void __thiscall AttendCheckWin::SetEvtState(AttendCheckWin *this, tm *T, const int Cnt, const char *iCheckState, const char *iRewardState, const int iRewardCnt)
{
  AttendCheckWin *v6; // esi@1

  v6 = this;
  this->m_uiRBtnNum = AttendRewardTab::GetNumOfType(0);
  AttendCheckWin::SetDate(v6, T, Cnt);
  AttendCheckWin::SetCheckState(v6, iCheckState);
  AttendCheckWin::SetButState(v6, iRewardState, iRewardCnt);
  if ( v6->m_iEvtIndex == 28 )
  {
    if ( AttendCheckWin::GetMonthRewardIndex(v6) == -1 )
      v6->m_bRMonthState = 1;
  }
}

//----- (004D7E90) --------------------------------------------------------
AttendCheckWin *__cdecl AttendCheckWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  AttendCheckWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x524u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    AttendCheckWin::AttendCheckWin((AttendCheckWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 544))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (AttendCheckWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004D7FC0) --------------------------------------------------------
unsigned int __cdecl ITableBase<AttendReward_AttendRewardTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D7FE0) --------------------------------------------------------
AttendReward *__cdecl AttendRewardTab::GetByType(const unsigned int uiType)
{
  unsigned int v1; // esi@1
  AttendReward *result; // eax@4

  v1 = 0;
  if ( ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
  {
    while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4),
                                  v1)
                      + 1) != uiType )
    {
      ++v1;
      if ( v1 >= ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (AttendReward *)CDataReader::GetRecord(
                               (CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4),
                               v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D8030) --------------------------------------------------------
AttendReward *__cdecl AttendRewardTab::GetByType(const unsigned int uiType, unsigned int *uiIndex)
{
  unsigned int v2; // esi@1
  AttendReward *result; // eax@4

  v2 = *uiIndex;
  if ( *uiIndex >= ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
  {
LABEL_4:
    *uiIndex = v2;
    result = 0;
  }
  else
  {
    while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4),
                                  v2)
                      + 1) != uiType )
    {
      ++v2;
      if ( v2 >= ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
        goto LABEL_4;
    }
    *uiIndex = v2;
    result = (AttendReward *)CDataReader::GetRecord(
                               (CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4),
                               v2);
  }
  return result;
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D8090) --------------------------------------------------------
unsigned int __cdecl AttendRewardTab::GetNumOfType(unsigned int uiType)
{
  unsigned int v1; // ebx@1
  unsigned int v2; // esi@1

  v1 = 0;
  v2 = 0;
  if ( ITableBase<AttendReward_AttendRewardTab>::GetTotal() )
  {
    do
    {
      if ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<AttendReward_AttendRewardTab>::ms_pkTable + 4),
                                 v2)
                     + 1) == uiType )
        ++v1;
      ++v2;
    }
    while ( v2 < ITableBase<AttendReward_AttendRewardTab>::GetTotal() );
  }
  return v1;
}
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D80D0) --------------------------------------------------------
void *__thiscall AttendCheckBut::_vector_deleting_destructor_(AttendCheckBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AttendCheckBut::_AttendCheckBut(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004D8100) --------------------------------------------------------
void *__thiscall AttendCheckWin::_scalar_deleting_destructor_(AttendCheckWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AttendCheckWin::_AttendCheckWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004D8130) --------------------------------------------------------
void __thiscall AttendIconWin::AttendIconWin(AttendIconWin *this)
{
  AttendIconWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkButInert = 0;
  v1->m_pkButAct = 0;
  v1->m_apkBlinkEff = 0;
  v1->m_bEvtState = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttendIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AttendIconWin::_vftable_;
}
// 98E260: using guessed type int (__stdcall *AttendIconWin___vftable_)(int uiFlags);
// 98E27C: using guessed type int (__thiscall *AttendIconWin___vftable_)(void *p, char);

//----- (004D8170) --------------------------------------------------------
void __thiscall AttendIconWin::SetActive(AttendIconWin *this, bool bActive)
{
  PgWinBut *v2; // eax@1
  PgWinBut *v3; // eax@5

  v2 = this->m_pkButAct;
  if ( v2 )
  {
    if ( bActive )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v3 = this->m_pkButInert;
  if ( v3 )
  {
    if ( bActive )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    else
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
}

//----- (004D81C0) --------------------------------------------------------
void __thiscall AttendIconWin::OnLClick(AttendIconWin *this)
{
  AttendIconWin *v1; // esi@1
  PgFrameWork *v2; // eax@1
  PgWinBut *v3; // eax@2
  PgWinBut *v4; // esi@4

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    GameFrameWork::OnOpenAttendCheckWin((GameFrameWork *)v2);
    v3 = v1->m_pkButAct;
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v4 = v1->m_pkButInert;
    if ( v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
}

//----- (004D8210) --------------------------------------------------------
bool __thiscall AttendIconWin::Create(AttendIconWin *this, PgFrameWork *pkFrameWork)
{
  AttendIconWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@7
  bool result; // al@11
  PgSprData *v8; // edi@12
  PgSprData *v9; // edi@15
  PgSprData *v10; // eax@16
  PgWinBut *v11; // eax@18
  NiNode *v12; // edi@18
  NiTexturePalette *v13; // ebx@18
  char *v14; // eax@20
  NiNode *v15; // esi@21
  void *v16; // ebx@26
  NiObject *v17; // eax@27
  NiNode *v18; // esi@30
  NiNode *v19; // esi@33
  NiNode *v20; // [sp+4h] [bp-34h]@13
  NiNode *v21; // [sp+4h] [bp-34h]@16
  const char *v22; // [sp+8h] [bp-30h]@13
  const char *v23; // [sp+8h] [bp-30h]@16
  NiPointer<NiNode> pkNiNodePtr; // [sp+1Ch] [bp-1Ch]@18
  int iLeft; // [sp+20h] [bp-18h]@4
  int iTop; // [sp+24h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+28h] [bp-10h]@1
  int v28; // [sp+34h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v28 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\AttendButton.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InertNor", &iLeft, &iTop, 0);
  if ( !v5 )
    v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inert00_Nor", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "AttendButton", 0) )
  {
    v6 = spNode.m_pObject;
    v28 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InertNor", &iLeft, &iTop, 0);
  if ( v8 )
  {
    v22 = "InertClick";
    v20 = spNode.m_pObject;
  }
  else
  {
    v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inert00_Nor", &iLeft, &iTop, 0);
    v22 = "Inert00_Click";
    v20 = spNode.m_pObject;
  }
  PgSprData::Add(v8, &v20->baseclass_0, v22);
  v2->m_pkButInert = PgWinBut::CreateWin(iLeft, iTop, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ActiveNor", &iLeft, &iTop, 0);
  if ( v9 )
  {
    v23 = "AcctiveClick";
    v21 = spNode.m_pObject;
  }
  else
  {
    v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Active00_Nor", &iLeft, &iTop, 0);
    v23 = "Acctive00_Click";
    v9 = v10;
    v21 = spNode.m_pObject;
  }
  PgSprData::Add(v9, &v21->baseclass_0, v23);
  v11 = PgWinBut::CreateWin(iLeft, iTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkButAct = v11;
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v12 = (NiNode *)v2->m_pkButAct;
  pkNiNodePtr.m_pObject = 0;
  v13 = dword_B70448;
  LOBYTE(v28) = 1;
  if ( !Folder::m_bInit )
    Folder::Init();
  v14 = Folder::Merge(&Folder::m_acEffect, "AttendButtonEff.nif");
  PgUtil::LoadNodeNifFile(v14, &pkNiNodePtr, v13);
  if ( pkNiNodePtr.m_pObject )
  {
    v16 = operator new(0x44u);
    LOBYTE(v28) = 2;
    if ( v16 )
    {
      v17 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      SpEffect::SpEffect((SpEffect *)v16, (NiNode *)v17);
    }
    else
    {
      v17 = 0;
    }
    LOBYTE(v28) = 1;
    v2->m_apkBlinkEff = (SpEffect *)v17;
    SpEffect::Start((SpEffect *)v17, v12);
    v2->m_apkBlinkEff->m_bLoop = 1;
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    ((void (__thiscall *)(AttendIconWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.050000001,
      0.2);
    LOBYTE(v28) = 0;
    if ( pkNiNodePtr.m_pObject )
    {
      v18 = pkNiNodePtr.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v18 )
          v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
      }
    }
    v19 = spNode.m_pObject;
    v28 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v19 )
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    result = 1;
  }
  else
  {
    v15 = spNode.m_pObject;
    v28 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v15 )
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D8570) --------------------------------------------------------
void __thiscall AttendIconWin::OnCommand(AttendIconWin *this, unsigned int wParam, int lParam)
{
  AttendIconWin *v3; // esi@1
  PgFrameWork *v4; // eax@2
  PgWinBut *v5; // eax@3
  PgWinBut *v6; // eax@5

  v3 = this;
  if ( !wParam )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      GameFrameWork::OnOpenAttendCheckWin((GameFrameWork *)v4);
      v5 = v3->m_pkButAct;
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      v6 = v3->m_pkButInert;
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    }
  }
}

//----- (004D85C0) --------------------------------------------------------
void __thiscall AttendIconWin::_AttendIconWin(AttendIconWin *this)
{
  AttendIconWin *v1; // ebx@1
  SpEffect *v2; // esi@1
  NiNode *v3; // edi@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttendIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AttendIconWin::_vftable_;
  v2 = this->m_apkBlinkEff;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
    v1->m_apkBlinkEff = 0;
  }
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 98E260: using guessed type int (__stdcall *AttendIconWin___vftable_)(int uiFlags);
// 98E27C: using guessed type int (__thiscall *AttendIconWin___vftable_)(void *p, char);

//----- (004D8690) --------------------------------------------------------
AttendIconWin *__cdecl AttendIconWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  AttendIconWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &AttendIconWin::_vftable_;
    *((_DWORD *)v2 + 58) = &AttendIconWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_BYTE *)v2 + 356) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (AttendIconWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98E260: using guessed type int (__stdcall *AttendIconWin___vftable_)(int uiFlags);
// 98E27C: using guessed type int (__thiscall *AttendIconWin___vftable_)(void *p, char);

//----- (004D87F0) --------------------------------------------------------
void *__thiscall AttendIconWin::_scalar_deleting_destructor_(AttendIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AttendIconWin::_AttendIconWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004D8820) --------------------------------------------------------
void __thiscall AttendRewardWin::AttendRewardWin(AttendRewardWin *this)
{
  AttendRewardWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkTitleText = 0;
  v1->m_pkInfoText = 0;
  v1->m_pkItemIcon = 0;
  v1->m_pkItemText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttendRewardWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AttendRewardWin::_vftable_;
}
// 98E584: using guessed type int (__stdcall *AttendRewardWin___vftable_)(int uiFlags);
// 98E5A4: using guessed type int (__thiscall *AttendRewardWin___vftable_)(void *p, char);

//----- (004D8860) --------------------------------------------------------
void __thiscall AttendRewardWin::_AttendRewardWin(AttendRewardWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttendRewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AttendRewardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98E584: using guessed type int (__stdcall *AttendRewardWin___vftable_)(int uiFlags);
// 98E5A4: using guessed type int (__thiscall *AttendRewardWin___vftable_)(void *p, char);

//----- (004D8880) --------------------------------------------------------
void __thiscall AttendRewardWin::OnCloseWin(AttendRewardWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004D8890) --------------------------------------------------------
void __thiscall AttendRewardWin::OnCommand(AttendRewardWin *this, unsigned int wParam, int lParam)
{
  AttendRewardWin *v3; // esi@1
  SoundIndex rkIndex; // [sp+4h] [bp-8h]@2

  v3 = this;
  if ( !wParam )
  {
    rkIndex.m_dwIndex = 49;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
    ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(v3);
  }
}

//----- (004D88E0) --------------------------------------------------------
bool __thiscall AttendRewardWin::Create(AttendRewardWin *this, PgFrameWork *pkFrameWork)
{
  AttendRewardWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // ecx@3
  NiNode *v6; // esi@7
  bool v7; // zf@8
  NiAVObject *v9; // eax@12
  NiProperty *v10; // eax@12
  NiProperty *v11; // edi@12
  NiRefObjectVtbl *v12; // eax@14
  NiSourceTexture *v13; // ebx@15
  PgSprData *v14; // eax@21
  PgSprData *v15; // edi@27
  PgFont *v16; // eax@29
  PgWinText *v17; // eax@29
  PgSprData *v18; // eax@29
  PgSprData::PgHitTester *v19; // eax@29
  unsigned int v20; // edi@29
  PgFont *v21; // eax@29
  PgWinText *v22; // eax@29
  PgSprData *v23; // eax@29
  PgSprData *v24; // eax@29
  PgWinSpr *v25; // edi@29
  int v26; // ST38_4@29
  int v27; // eax@29
  NiPointer<PgSprData::PgHitTester> *v28; // ecx@29
  unsigned int v29; // edi@29
  PgFont *v30; // eax@29
  PgWinText *v31; // eax@29
  PgSprData *v32; // edi@29
  PgWin *v33; // edi@29
  D3DXCOLOR v34; // ST2C_16@29
  char *v35; // eax@29
  PgWinText *v36; // eax@29
  PgWinText *v37; // edi@29
  NiRefObjectVtbl *v38; // ebx@29
  PgFont *v39; // eax@29
  UIUtil ui; // [sp+38h] [bp-38h]@27
  unsigned int uiWidth; // [sp+4Ch] [bp-24h]@27
  unsigned int uiHeight; // [sp+50h] [bp-20h]@27
  NiPointer<NiTexturingProperty> spTexProp; // [sp+54h] [bp-1Ch]@12
  int iLeft; // [sp+58h] [bp-18h]@21
  int iTop; // [sp+5Ch] [bp-14h]@21
  NiPointer<NiNode> spNode; // [sp+60h] [bp-10h]@1
  int v47; // [sp+6Ch] [bp-4h]@1
  unsigned int pkFrameWorka; // [sp+78h] [bp+8h]@29
  unsigned int pkFrameWorkb; // [sp+78h] [bp+8h]@29

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v47 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\AttendMsg.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\AttendMsg.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v47 = -1;
    if ( !v5
      || (v6 = v5,
          InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_9;
  }
  v9 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v10 = NiAVObject::GetProperty(v9, 8);
  v11 = v10;
  spTexProp.m_pObject = (NiTexturingProperty *)v10;
  if ( v10 )
    InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v12 = v11[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v47) = 1;
  if ( !v12 || (v13 = (NiSourceTexture *)v12[1].__vecDelDtor) == 0 )
  {
    LOBYTE(v47) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v6 = spNode.m_pObject;
    v47 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_9;
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, v13);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v14, 0, pkFrameWork, "AttendRewardWin", 0) )
  {
    LOBYTE(v47) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v6 = spNode.m_pObject;
    v47 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
LABEL_9:
    if ( !v7 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v47) = 2;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CloseBtnNor", &iLeft, &iTop, v13);
  PgSprData::Add(v15, &spNode.m_pObject->baseclass_0, "CloseBtnClick");
  PgSprData::Add(v15, &spNode.m_pObject->baseclass_0, "CloseBtnOver");
  PgWinCloseBut::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Title", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    LOBYTE(v47) = 1;
    UIUtil::_UIUtil(&ui);
    LOBYTE(v47) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v47 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v16 = Font::Get(MAIN_MENU);
  v17 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTitleText = v17;
  ((void (__thiscall *)(PgWinText *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v17);
  ((void (__cdecl *)(_DWORD, signed int))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    0,
    5);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, v13);
  PgWinSpr::CreateWin(iLeft, iTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v20 = v19->m_uiHeight;
  pkFrameWorka = v19->m_uiWidth;
  v21 = Font::Get(MENU);
  v22 = PgWinText::CreateWin(iLeft, iTop, pkFrameWorka, v20, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkInfoText = v22;
  ((void (__thiscall *)(PgWinText *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v22);
  ((void (__cdecl *)(signed int, D3DXCOLOR *))v2->m_pkInfoText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    5,
    &Color::m_kDxBlackColor);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &iLeft, &iTop, v13);
  PgWinSpr::CreateWin(iLeft, iTop, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Image", &iLeft, &iTop, 0);
  v25 = PgWinSpr::CreateWin(iLeft, iTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v26 = ((int (__thiscall *)(PgWinSpr *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v25);
  v27 = ((int (__thiscall *)(PgWinSpr *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v25);
  v2->m_pkItemIcon = ItemIcon::CreateWin(v27, v26, &v2->baseclass_0.baseclass_0.baseclass_0);
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &iLeft, &iTop, v13)->m_akHitTester.m_pBase;
  v29 = v28->m_pObject->m_uiHeight;
  pkFrameWorkb = v28->m_pObject->m_uiWidth;
  v30 = Font::Get(MENU);
  v31 = PgWinText::CreateWin(iLeft, iTop, pkFrameWorkb, v29, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkItemText = v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v31,
    (unsigned int)&Color::m_kDxBlackColor);
  ((void (__stdcall *)(signed int))v2->m_pkItemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(4);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkBtnNor", &iLeft, &iTop, v13);
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "OkBtnClick");
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "OkBtnOver");
  v33 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v35 = TextData::Get(0x4F5F499Fu);
  v36 = UIUtil::CreateAttachedText(&ui, v33, v35, COERCE_D3DXCOLOR(v34.r), 5u);
  v37 = v36;
  v38 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v39 = Font::Get(MENU);
  v38[113].__vecDelDtor((NiRefObject *)v37, (unsigned int)v39);
  ((void (__thiscall *)(AttendRewardWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v47) = 1;
  UIUtil::_UIUtil(&ui);
  LOBYTE(v47) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
  v47 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004D8E70) --------------------------------------------------------
void __thiscall AttendRewardWin::SetItemInfo(AttendRewardWin *this, const unsigned int uiRewardID, Item *const pkItem)
{
  int v3; // edi@0
  AttendRewardWin *v4; // esi@1
  int v5; // edi@2
  int v6; // ecx@4
  int v7; // eax@5
  NiRefObjectVtbl *v8; // edi@7
  char *v9; // eax@7
  NiRefObjectVtbl *v10; // edi@7
  NiRefObjectVtbl *v11; // edi@8
  char *v12; // eax@9
  char *v13; // eax@10
  int v14; // [sp-8h] [bp-Ch]@2
  unsigned int v15; // [sp-4h] [bp-8h]@7

  v4 = this;
  if ( pkItem )
  {
    v14 = v3;
    v5 = ITableBase<AttendReward_AttendRewardTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, const unsigned int))(*(_DWORD *)ITableBase<AttendReward_AttendRewardTab>::ms_pkTable
                                                                         + 16))(
                            ITableBase<AttendReward_AttendRewardTab>::ms_pkTable,
                            uiRewardID) )
    {
      if ( (unsigned __int16)uiRewardID <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196);
        if ( *(_DWORD *)(v6 + 4 * (unsigned __int16)uiRewardID) )
        {
          v7 = *(_DWORD *)(v6 + 4 * (unsigned __int16)uiRewardID);
          if ( v7 )
          {
            if ( *(_DWORD *)(v7 + 1) )
            {
              v11 = v4->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              if ( *(_BYTE *)(v7 + 5) == 28 )
              {
                v12 = TextData2::Get(0x80CFF8D2u);
                ((void (__thiscall *)(PgWinText *, char *, int))v11[118].__vecDelDtor)(v4->m_pkTitleText, v12, v14);
                v15 = -2071488123;
              }
              else
              {
                v13 = TextData2::Get(0xD414371Bu);
                ((void (__thiscall *)(PgWinText *, char *, int))v11[118].__vecDelDtor)(v4->m_pkTitleText, v13, v14);
                v15 = -1865223985;
              }
              v10 = v4->m_pkInfoText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            }
            else
            {
              v8 = v4->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v9 = TextData2::Get(0x6C9DDED9u);
              ((void (__thiscall *)(PgWinText *, char *, int))v8[118].__vecDelDtor)(v4->m_pkTitleText, v9, v14);
              v10 = v4->m_pkInfoText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v15 = 1773003217;
            }
            TextData2::Get(v15);
            ((void (__thiscall *)(PgWinText *))v10[118].__vecDelDtor)(v4->m_pkInfoText);
            ItemIcon::SetItem(v4->m_pkItemIcon, pkItem, 1);
            ((void (__cdecl *)(char *))v4->m_pkItemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkItem->m_pkInfo->Name);
          }
        }
      }
    }
  }
}
// 4D8E70: could not find valid save-restore pair for ebx
// 4D8E70: could not find valid save-restore pair for edi
// A97F4C: using guessed type int ITableBase_AttendReward_AttendRewardTab___ms_pkTable;

//----- (004D8FB0) --------------------------------------------------------
AttendRewardWin *__cdecl AttendRewardWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  AttendRewardWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &AttendRewardWin::_vftable_;
    *((_DWORD *)v2 + 58) = &AttendRewardWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 544))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (AttendRewardWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98E584: using guessed type int (__stdcall *AttendRewardWin___vftable_)(int uiFlags);
// 98E5A4: using guessed type int (__thiscall *AttendRewardWin___vftable_)(void *p, char);

//----- (004D9110) --------------------------------------------------------
void *__thiscall AttendRewardWin::_vector_deleting_destructor_(AttendRewardWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttendRewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AttendRewardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98E584: using guessed type int (__stdcall *AttendRewardWin___vftable_)(int uiFlags);
// 98E5A4: using guessed type int (__thiscall *AttendRewardWin___vftable_)(void *p, char);

//----- (004D9150) --------------------------------------------------------
void __thiscall BasicInfoTipWin::_BasicInfoTipWin(BasicInfoTipWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BasicInfoTipWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BasicInfoTipWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98E7E0: using guessed type int (__stdcall *BasicInfoTipWin___vftable_)(int uiFlags);
// 98E7FC: using guessed type int (__thiscall *BasicInfoTipWin___vftable_)(void *p, char);

//----- (004D9170) --------------------------------------------------------
void __thiscall BasicInfoTipWin::AddText(BasicInfoTipWin *this, const char *pcText)
{
  BasicInfoTipWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  ((void (__stdcall *)(_DWORD))v2->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(&v2->m_sBasicInfoTextColor);
  PgFadeTextGeometry::SetLifeTime(v2->m_pTextGeom, v2->m_fBasicInfoLifeTime);
}

//----- (004D91C0) --------------------------------------------------------
void __thiscall BasicInfoTipWin::AddText(BasicInfoTipWin *this, const char *pcText, D3DXCOLOR sTextColor)
{
  BasicInfoTipWin *v3; // esi@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  ((void (__stdcall *)(_DWORD))v3->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(&sTextColor);
  PgFadeTextGeometry::SetLifeTime(v3->m_pTextGeom, v3->m_fBasicInfoLifeTime);
}

//----- (004D9210) --------------------------------------------------------
void __thiscall BasicInfoTipWin::AddText(BasicInfoTipWin *this, const char *pcText, D3DXCOLOR sTextColor, const float fLifeTime)
{
  BasicInfoTipWin *v4; // esi@1

  v4 = this;
  ((void (__stdcall *)(_DWORD))this->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  ((void (__stdcall *)(_DWORD))v4->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(&sTextColor);
  PgFadeTextGeometry::SetLifeTime(v4->m_pTextGeom, fLifeTime);
}

//----- (004D9260) --------------------------------------------------------
void __thiscall BasicInfoTipWin::Clear(BasicInfoTipWin *this)
{
  BasicInfoTipWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(&unk_98E7D8);
  PgFadeTextGeometry::SetLifeTime(v1->m_pTextGeom, -1.0);
}

//----- (004D9290) --------------------------------------------------------
bool __thiscall BasicInfoTipWin::ConfirmLevel(BasicInfoTipWin *this, const unsigned int uiMinLevel, const unsigned int uiMaxLevel)
{
  return User::Lv(&g_kUser) >= uiMinLevel && User::Lv(&g_kUser) <= uiMaxLevel;
}

//----- (004D92C0) --------------------------------------------------------
bool __thiscall BasicInfoTipWin::Create(BasicInfoTipWin *this, PgFrameWork *pkFrameWork)
{
  BasicInfoTipWin *v2; // esi@1
  bool result; // al@2
  PgFont *v4; // eax@3
  PgFont *v5; // edi@3
  unsigned int v6; // eax@4
  int v7; // ebx@4
  unsigned int v8; // ST1C_4@4
  unsigned int v9; // ST18_4@4
  NiSourceTexture *v10; // eax@4
  PgWinSpr *v11; // eax@4
  void *v12; // eax@4
  SpScreenText *v13; // eax@5
  PgFadeTextGeometry *v14; // eax@7
  unsigned int v15; // [sp+20h] [bp-34h]@1
  tagRECT kDrawRect; // [sp+34h] [bp-20h]@4
  unsigned int v17; // [sp+44h] [bp-10h]@1
  int v18; // [sp+50h] [bp-4h]@4
  int v19; // [sp+54h] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  v15 = (unsigned int)&v19 ^ __security_cookie;
  v2 = this;
  if ( PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFrameWork, "BasicInfoTipWin", 0)
    && (v4 = Font::Get(GTFONT), (v5 = v4) != 0) )
  {
    v6 = v4->m_uiDefHeight;
    v7 = 4 * v6;
    v8 = 4 * v6;
    v9 = PgWin::ms_uiScreenWidth;
    v10 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
    v11 = PgWinSpr::CreateWin(v10, 0, 0, v9, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkSprWin = v11;
    ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      v11,
      0,
      v15);
    ((void (__stdcall *)(_DWORD))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fSprWinAlphaValue);
    SelectObject(v5->baseclass_0.m_kFontRenderStuff.hDC, v5->baseclass_0.m_hFont);
    SetRect(&kDrawRect, 0, 0, PgWin::ms_uiScreenWidth, v7);
    v12 = operator new(0x158u);
    v18 = 0;
    if ( v12 )
      PgFadeTextGeometry::PgFadeTextGeometry((PgFadeTextGeometry *)v12, v5);
    else
      v13 = 0;
    v18 = -1;
    v2->m_pTextGeom = (PgFadeTextGeometry *)v13;
    SpScreenText::SetShadowOffset(v13, 0);
    ((void (__stdcall *)(tagRECT *))v2->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(&kDrawRect);
    v14 = v2->m_pTextGeom;
    v14->baseclass_0.m_uiDrawFormat = 5;
    if ( v14->baseclass_0.baseclass_0.m_iAlignOption != 34 )
    {
      v14->baseclass_0.baseclass_0.m_iAlignOption = 34;
      v14->baseclass_0.baseclass_0.m_bInvalidate = 1;
    }
    ((void (__cdecl *)(D3DXCOLOR *))v2->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(&v2->m_sBasicInfoTextColor);
    NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
      (NiRefObject *)v2,
      v7);
    ((void (__thiscall *)(BasicInfoTipWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.67000002);
    ((void (__stdcall *)(PgFadeTextGeometry *, _DWORD))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_pTextGeom,
      0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      1u);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (004D94F0) --------------------------------------------------------
void __thiscall BasicInfoTipWin::SetResoulution(BasicInfoTipWin *this, unsigned int uiWidth, unsigned int uiHeight)
{
  BasicInfoTipWin *v3; // esi@1
  int v4; // eax@4
  PgFadeTextGeometry *v5; // esi@4
  tagRECT kDrawRect; // [sp+14h] [bp-14h]@4
  unsigned int v7; // [sp+24h] [bp-4h]@1
  int v8; // [sp+28h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  if ( this->m_pkSprWin )
    ((void (__stdcall *)(unsigned int))this->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(uiWidth);
  ((void (__thiscall *)(BasicInfoTipWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    uiWidth,
    uiHeight,
    0.5,
    0.67000002);
  if ( v3->m_pTextGeom )
  {
    v4 = ((int (*)(void))v3->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[51].__vecDelDtor)();
    SetRect(&kDrawRect, 0, 0, uiWidth, v4);
    ((void (__stdcall *)(tagRECT *))v3->m_pTextGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(&kDrawRect);
    v5 = v3->m_pTextGeom;
    v5->baseclass_0.m_uiDrawFormat = 5;
    if ( v5->baseclass_0.baseclass_0.m_iAlignOption != 34 )
    {
      v5->baseclass_0.baseclass_0.m_iAlignOption = 34;
      v5->baseclass_0.baseclass_0.m_bInvalidate = 1;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004D95D0) --------------------------------------------------------
void __thiscall BasicInfoTipWin::Update(BasicInfoTipWin *this, float fCurTime)
{
  BasicInfoTipWin *v2; // esi@1
  PgWin *v3; // ecx@1
  PgFadeTextGeometry *v4; // ecx@5
  double v5; // st7@7
  int v6; // eax@8
  unsigned int v7; // eax@9
  void *v8; // eax@13
  void *v9; // edi@13
  NiRefObjectVtbl *v10; // eax@15
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@15
  double v12; // st7@20
  PgFadeTextGeometry *v13; // eax@23
  PgWinSpr *v14; // ecx@23
  float fAlphab; // [sp+1Ch] [bp+8h]@20
  float fAlpha; // [sp+1Ch] [bp+8h]@20
  float fAlphaa; // [sp+1Ch] [bp+8h]@23

  v2 = this;
  v3 = (PgWin *)this->m_pkSprWin;
  if ( v3 && v2->m_pTextGeom )
  {
    if ( !byte_B5BB4C )
    {
      v2->m_fBasicInfoTipTime = fCurTime;
      if ( !PgWin::IsVisible(v3) )
        return;
      v4 = v2->m_pTextGeom;
      if ( 1.0 == v4->m_fAlphaBlendValue )
        PgFadeTextGeometry::SetLifeTime(v4, 0.0);
    }
    v5 = fCurTime - v2->m_fBasicInfoTipTime;
    if ( v2->m_fBasicInfoTipCycle < v5 )
    {
      v6 = *(_DWORD *)(ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable + 56);
      if ( v6 )
        v7 = *(_DWORD *)(v6 + 40);
      else
        v7 = 0;
      if ( v2->m_uiBasicInfoTipIndex >= v7 )
        v2->m_uiBasicInfoTipIndex = 0;
      v8 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<BasicInfoTip_BasicInfoTipTab>::ms_pkTable + 4),
             v2->m_uiBasicInfoTipIndex);
      v9 = v8;
      if ( v8 && BasicInfoTipWin::ConfirmLevel(v2, *((_BYTE *)v8 + 288), *((_BYTE *)v8 + 289)) )
      {
        BasicInfoTipWin::Clear(v2);
        BasicInfoTipWin::AddText(v2, (const char *)v9 + 32);
        ((void (__stdcall *)(signed int))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v5 = fCurTime;
        v10 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v2->m_fBasicInfoTipTime = fCurTime;
        v11 = v10[67].__vecDelDtor;
        v2->m_bBasicInfoTipAlphaValue = 1;
        ((void (__thiscall *)(BasicInfoTipWin *))v11)(v2);
      }
      ++v2->m_uiBasicInfoTipIndex;
    }
    if ( PgWin::IsVisible(&v2->m_pkSprWin->baseclass_0) )
    {
      if ( v2->m_bBasicInfoTipAlphaValue
        && (((void (*)(void))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)(),
            v2->m_fSprWinAlphaValue > v5) )
      {
        v12 = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime;
        fAlphab = v12;
        ((void (*)(void))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
        fAlpha = v12 + fAlphab;
        if ( v2->m_fSprWinAlphaValue < (double)fAlpha )
          fAlpha = v2->m_fSprWinAlphaValue;
        ((void (__stdcall *)(_DWORD))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(fAlpha));
      }
      else
      {
        v13 = v2->m_pTextGeom;
        v14 = v2->m_pkSprWin;
        v2->m_bBasicInfoTipAlphaValue = 0;
        fAlphaa = v13->m_fAlphaBlendValue;
        ((void (*)(void))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
        if ( fAlphaa >= (double)fAlphaa )
          ((void (__stdcall *)(_DWORD))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(fAlphaa));
        if ( 0.0 == fAlphaa )
          ((void (__stdcall *)(_DWORD))v2->m_pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
    }
  }
}
// A97640: using guessed type float Timer__ms_fDeltaTime;
// A97EB8: using guessed type int ITableBase_BasicInfoTip_BasicInfoTipTab___ms_pkTable;
// B5BB4C: using guessed type char byte_B5BB4C;

//----- (004D9800) --------------------------------------------------------
void __thiscall BasicInfoTipWin::BasicInfoTipWin(BasicInfoTipWin *this, const float fCycle)
{
  BasicInfoTipWin *v2; // esi@1

  v2 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v2->m_fBasicInfoTipTime = 0.0;
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BasicInfoTipWin::_vftable_;
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BasicInfoTipWin::_vftable_;
  v2->m_uiBasicInfoTipIndex = 0;
  ColorInfoTable::GetDxColor(&v2->m_sBasicInfoTextColor, yellow);
  v2->m_fBasicInfoLifeTime = 10.0;
  v2->m_bBasicInfoTipAlphaValue = 0;
  v2->m_fBasicInfoTipCycle = fCycle;
  v2->m_pTextGeom = 0;
  v2->m_fSprWinAlphaValue = 0.30000001;
}
// 98E7E0: using guessed type int (__stdcall *BasicInfoTipWin___vftable_)(int uiFlags);
// 98E7FC: using guessed type int (__thiscall *BasicInfoTipWin___vftable_)(void *p, char);

//----- (004D98B0) --------------------------------------------------------
BasicInfoTipWin *__cdecl BasicInfoTipWin::CreateWin(PgFrameWork *pkFrameWork, const float fCycle)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  BasicInfoTipWin *v6; // eax@14
  NiPointer<PgWin> result; // [sp+18h] [bp-10h]@1
  int v8; // [sp+24h] [bp-4h]@1

  v2 = operator new(0x188u);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    BasicInfoTipWin::BasicInfoTipWin((BasicInfoTipWin *)v2, fCycle);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( BasicInfoTipWin::Create((BasicInfoTipWin *)v4, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (BasicInfoTipWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    }
    v6 = 0;
  }
  return v6;
}

//----- (004D99F0) --------------------------------------------------------
void *__thiscall BasicInfoTipWin::_scalar_deleting_destructor_(BasicInfoTipWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BasicInfoTipWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BasicInfoTipWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98E7E0: using guessed type int (__stdcall *BasicInfoTipWin___vftable_)(int uiFlags);
// 98E7FC: using guessed type int (__thiscall *BasicInfoTipWin___vftable_)(void *p, char);

//----- (004D9A30) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 45) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 45) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 45); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (004D9A80) --------------------------------------------------------
__int64 __thiscall ShineDateTime::toTime_t(ShineDateTime *this)
{
  int v1; // eax@1
  unsigned int v2; // edx@1
  int v3; // ecx@1
  tm Time1; // [sp+0h] [bp-28h]@1
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this->_bf0;
  v2 = (unsigned int)this->_bf0 >> 19;
  v3 = (unsigned int)this->_bf0 >> 25;
  Time1.tm_hour = v2 & 0x3F;
  Time1.tm_min = v3;
  Time1.tm_year = (unsigned __int8)v1 + 100;
  Time1.tm_sec = 0;
  Time1.tm_mday = ((unsigned int)v1 >> 13) & 0x3F;
  Time1.tm_mon = (((unsigned int)v1 >> 8) & 0x1F) - 1;
  Time1.tm_isdst = -1;
  return _mktime64(&Time1);
}
// A85C00: using guessed type int __security_cookie;

//----- (004D9AF0) --------------------------------------------------------
void __thiscall StatusBuffWin::ResetIcons(StatusBuffWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_apkAbstateBuf;
  v2 = 40;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 248))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 40) + 256))(0);
    AbstateIcon::ClearDuplicateText(*((AbstateIcon **)v1 + 40));
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (004D9B50) --------------------------------------------------------
void __thiscall StatusBuffWin::SetFrameBoxSize(StatusBuffWin *this, unsigned int uiWidth, unsigned int uiHeight)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    uiWidth,
    uiHeight);
}

//----- (004D9B70) --------------------------------------------------------
void __thiscall StatusBuffWin::AlignBuf(StatusBuffWin *this, int row, int column)
{
  int v3; // edx@1
  signed int v4; // eax@1
  int v5; // ebx@4
  signed int v6; // edi@5
  int v7; // esi@5
  StatusBuffWin *v8; // [sp+0h] [bp-10h]@1
  int i; // [sp+4h] [bp-Ch]@1
  int v10; // [sp+8h] [bp-8h]@2
  signed int nCount; // [sp+Ch] [bp-4h]@1

  v3 = column;
  v4 = 0;
  v8 = this;
  nCount = 0;
  i = 0;
  if ( column > 0 )
  {
    v10 = 0;
    do
    {
      if ( v4 >= 40 )
        break;
      v5 = 0;
      if ( row > 0 )
      {
        v6 = 22;
        v7 = (int)&v8->m_apkAbstateBufIcon[v4];
        do
        {
          if ( v4 >= 40 )
            break;
          (*(void (__stdcall **)(int))(**(_DWORD **)(v7 - 160) + 172))(v6 - 2);
          (*(void (__stdcall **)(int))(**(_DWORD **)(v7 - 160) + 176))(v10);
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v7 + 172))(v6);
          (*(void (__stdcall **)(int))(**(_DWORD **)v7 + 176))(v10 + 2);
          ++nCount;
          v4 = nCount;
          ++v5;
          v7 += 4;
          v6 += 20;
        }
        while ( v5 < row );
      }
      v3 = column;
      v10 += 20;
      ++i;
    }
    while ( i < column );
  }
  v8->m_uiVisiableNums = v3 * row;
}

//----- (004D9C40) --------------------------------------------------------
char __thiscall StatusBuffWin::GetCursorStateOnPanel(StatusBuffWin *this)
{
  char v2; // bl@3
  FrameBoxWin *v3; // ecx@5

  if ( !this->IsShowBuf )
    return 0;
  v2 = 0;
  if ( this->m_kAlphaControl.fAlphaValue < 1.0 )
    return 0;
  v3 = this->m_pkFrameBox.m_pObject;
  if ( v3 )
  {
    if ( v3->m_bIsDuringSizeDrag )
      return 2;
    if ( FrameBoxWin::SizeDragHitTest(v3) )
      v2 = 1;
  }
  return v2;
}

//----- (004D9C90) --------------------------------------------------------
void __thiscall StatusBuffWin::SetBuffUI(StatusBuffWin *this, Char *pkMember, StateType type, int *AbstateNums)
{
  StatusBuffWin *v4; // esi@1
  NiTListItem<AbStateInst *> *v5; // eax@1
  unsigned int v6; // ecx@1
  int v7; // edi@2
  AbstateIcon **v8; // esi@2
  int v9; // ebx@5
  int v10; // eax@9
  AbStateInst *v11; // ebx@16
  signed int v12; // eax@16
  char *v13; // eax@20
  AbstateIcon *v14; // ST14_4@20
  char *v15; // eax@20
  char *v16; // eax@20
  AbstateIcon *v17; // ecx@20
  int v18; // eax@25
  bool v19; // zf@25
  int v20; // eax@25
  int v21; // eax@26
  unsigned int v22; // [sp-8h] [bp-1Ch]@18
  AbStateInst *pkAbState; // [sp+4h] [bp-10h]@5
  unsigned __int16 pkAbStatea; // [sp+4h] [bp-10h]@23
  StatusBuffWin *v25; // [sp+8h] [bp-Ch]@1
  NiTListItem<AbStateInst *> *kIter; // [sp+Ch] [bp-8h]@5
  unsigned __int16 pkInfo; // [sp+10h] [bp-4h]@5
  int pkInfoa; // [sp+10h] [bp-4h]@6
  GameFrameWork *pkInfob; // [sp+10h] [bp-4h]@23
  unsigned int i; // [sp+1Ch] [bp+8h]@1

  v4 = this;
  v25 = this;
  v5 = AbStateInfectee::GetAbStateList(&pkMember->baseclass_0)->baseclass_0.baseclass_0.m_pkHead;
  v6 = *AbstateNums;
  i = *AbstateNums;
  if ( !v5 )
  {
    *AbstateNums = v6;
    return;
  }
  v7 = (int)&v4->m_apkAbstateBuf[v6];
  v8 = (AbstateIcon **)&v4->m_apkAbstateBufIcon[v6];
  while ( v6 < 0x28 )
  {
    v9 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
    kIter = v5->m_pkNext;
    pkAbState = v5->m_element;
    pkInfo = pkAbState->kID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                            pkAbState->kID) )
    {
      if ( pkInfo <= *(_WORD *)(v9 + 200) )
      {
        v10 = *(_DWORD *)(v9 + 196) + 4 * pkInfo;
        if ( *(_DWORD *)v10 )
          pkInfoa = *(_DWORD *)v10;
        else
          pkInfoa = 0;
      }
      else
      {
        pkInfoa = 0;
      }
    }
    else
    {
      pkInfoa = 0;
    }
    if ( *(_BYTE *)(pkInfoa + 526) )
    {
      if ( v25->m_uiVisiableNums - 1 < i )
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0);
        ((void (__stdcall *)(_DWORD))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
LABEL_29:
        ++i;
        ++v8;
        v7 += 4;
        goto LABEL_30;
      }
      if ( *(_DWORD *)(pkInfoa + 522) == type )
      {
        v11 = pkAbState;
        AbstateIcon::SetAbstate(*v8, pkAbState->kID);
        v12 = (signed int)pkAbState->fLifeTime;
        if ( (unsigned int)v12 > 0x927C0 )
        {
          v17 = *v8;
          v16 = (char *)(pkInfoa + 70);
        }
        else
        {
          v22 = v12 < 60 ? -1733121819 : -1666406160;
          v13 = TextData::Get(v22);
          fs(v13);
          v14 = *v8;
          v15 = TextData::Get(0xEC4E4530u);
          v16 = fs(v15);
          v17 = v14;
        }
        PgWin::SetToolTipWinText(&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v16);
        (*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
        ((void (__cdecl *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__cdecl *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
        (*(void (__stdcall **)(signed int))(**(_DWORD **)v7 + 256))(1);
        ++i;
        ++v8;
        v7 += 4;
        if ( v11->uiSubStateStr )
        {
          pkAbStatea = v11->kID;
          pkInfob = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
          if ( (unsigned __int8)((int (__stdcall *)(_DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(v11->kID) )
          {
            if ( pkAbStatea <= LOWORD(pkInfob->m_ResList[2].m_eAspect) )
            {
              v18 = *(_DWORD *)&pkInfob->m_ResList[2].m_bCheckAdd;
              v19 = *(_DWORD *)(v18 + 4 * pkAbStatea) == 0;
              v20 = v18 + 4 * pkAbStatea;
              if ( !v19 )
              {
                v21 = *(_DWORD *)v20;
                if ( v21 )
                {
                  if ( *(_BYTE *)(v21 + 288) )
                  {
                    AbstateIcon::SetDuplicate(*v8, v11->uiSubStateStr);
                    ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                    ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                    ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
                    (*(void (__stdcall **)(signed int))(**(_DWORD **)v7 + 256))(1);
                    goto LABEL_29;
                  }
                }
              }
            }
          }
        }
      }
    }
LABEL_30:
    v6 = i;
    if ( !kIter )
    {
      *AbstateNums = i;
      return;
    }
    v5 = kIter;
  }
  *AbstateNums = v6;
}
// 4D9C90: could not find valid save-restore pair for ebx
// 4D9C90: could not find valid save-restore pair for edi
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (004D9F60) --------------------------------------------------------
void __thiscall StatusBuffWin::ProcessMeInput(StatusBuffWin *this, bool *bHit)
{
  StatusBuffWin *v2; // esi@1
  unsigned int v3; // ebx@3
  unsigned int v4; // ecx@3
  unsigned int v5; // edi@3
  unsigned int v6; // edx@3
  FrameBoxWin *v7; // edi@8
  int v8; // ST04_4@8
  unsigned int v9; // eax@8
  StatusBuffWin::EBUFF_TYPE v10; // eax@8
  int v11; // eax@9

  v2 = this;
  PgWinFrame::ProcessMeInput(&this->baseclass_0, bHit);
  if ( dword_B7035C >= 1 && v2->IsFrameDraging )
  {
    v3 = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v4 = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v5 = v3 / 0x14;
    v6 = v4 / 0x14;
    if ( v3 % 0x14 > 0xA )
      ++v5;
    if ( v4 % 0x14 > 0xA )
      ++v6;
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
      20 * v5,
      20 * v6);
    v2->IsFrameDraging = 0;
  }
  v7 = v2->m_pkFrameBox.m_pObject;
  v8 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2->m_pkFrameBox.m_pObject)
     / 0x14u;
  v9 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7);
  StatusBuffWin::AlignBuf(v2, v9 / 0x14, v8);
  v10 = v2->m_eBuffType;
  if ( v10 )
  {
    v11 = v10 - 1;
    if ( v11 )
    {
      if ( v11 == 1 )
      {
        MachineOpt::ms_kUserLoginOption.ChargedBufWidth = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
        MachineOpt::ms_kUserLoginOption.ChargedBufHeight = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      }
    }
    else
    {
      MachineOpt::ms_kUserLoginOption.DBufWidth = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      MachineOpt::ms_kUserLoginOption.DBufHeight = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    }
  }
  else
  {
    MachineOpt::ms_kUserLoginOption.BufWidth = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    MachineOpt::ms_kUserLoginOption.BufHeight = ((int (*)(void))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  }
}
// B7035C: using guessed type int dword_B7035C;

//----- (004DA100) --------------------------------------------------------
void __thiscall StatusBuffWin::GetDayStr(StatusBuffWin *this, char *MsgBuffer, int MsgBufSize, int Day)
{
  char *v4; // eax@1
  char *v5; // eax@1

  v4 = TextData2::Get(0x2E43F526u);
  v5 = fs(v4);
  strncpy(MsgBuffer, v5, MsgBufSize);
}

//----- (004DA130) --------------------------------------------------------
void __thiscall StatusBuffWin::GetHourStr(StatusBuffWin *this, char *MsgBuffer, int MsgBufSize, int Hour)
{
  char *v4; // eax@1
  char *v5; // eax@1

  v4 = TextData2::Get(0x2A51F978u);
  v5 = fs(v4);
  strncpy(MsgBuffer, v5, MsgBufSize);
}

//----- (004DA160) --------------------------------------------------------
void __thiscall StatusBuffWin::GetMinStr(StatusBuffWin *this, char *MsgBuffer, int MsgBufSize, int Min)
{
  char *v4; // eax@1
  char *v5; // eax@1

  v4 = TextData2::Get(0x234BFE26u);
  v5 = fs(v4);
  strncpy(MsgBuffer, v5, MsgBufSize);
}

//----- (004DA190) --------------------------------------------------------
char *__thiscall StatusBuffWin::GetRemainTime(StatusBuffWin *this, char *MsgBuffer, PROTO_CHARGEDBUFF_INFO *pkInfo)
{
  __int64 v3; // ST24_8@3
  __int64 v4; // qax@3
  int v5; // edi@3
  int v6; // esi@3
  char *v7; // eax@5
  char *v8; // eax@5
  char *v9; // eax@5
  char *v10; // eax@5
  char *result; // eax@5
  char *v12; // eax@6
  char *v13; // eax@6
  char *v14; // eax@6
  char *v15; // eax@6
  char *v16; // eax@6
  char *v17; // eax@6
  char *v18; // eax@8
  char *v19; // eax@8
  char *v20; // eax@8
  char *v21; // eax@8
  int v22; // esi@9
  long double RemainTime; // [sp+14h] [bp-F8h]@3
  StatusBuffWin *thisa; // [sp+1Ch] [bp-F0h]@1
  tm tb; // [sp+24h] [bp-E8h]@3
  char DayStr[64]; // [sp+48h] [bp-C4h]@3
  char HourStr[64]; // [sp+88h] [bp-84h]@3
  char MinStr[64]; // [sp+C8h] [bp-44h]@3
  unsigned int v29; // [sp+108h] [bp-4h]@1
  int v30; // [sp+10Ch] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  thisa = this;
  if ( pkInfo && MsgBuffer )
  {
    memcpy(&tb, &Timer::ms_dLastServerTime, sizeof(tb));
    v3 = _mktime64(&tb);
    v4 = ShineDateTime::toTime_t(&pkInfo->EndTime);
    RemainTime = _difftime64(v4, v3);
    Timer::GetDay(RemainTime);
    v5 = Timer::GetHour(RemainTime);
    v6 = Timer::GetMin(RemainTime);
    DayStr[0] = 0;
    memset(&DayStr[1], 0, 0x3Fu);
    HourStr[0] = 0;
    memset(&HourStr[1], 0, 0x3Fu);
    MinStr[0] = 0;
    memset(&MinStr[1], 0, 0x3Fu);
    if ( RemainTime < 86400.0 )
    {
      if ( RemainTime < 3600.0 )
      {
        v22 = v6 % 60;
        if ( v22 )
        {
          StatusBuffWin::GetMinStr(thisa, MinStr, 64, v22);
          sprintf(MsgBuffer, "%s");
          result = MsgBuffer;
        }
        else
        {
          StatusBuffWin::GetMinStr(thisa, MinStr, 64, 1);
          sprintf(MsgBuffer, "%s");
          result = MsgBuffer;
        }
      }
      else
      {
        v18 = TextData2::Get(0x2A51F978u);
        v19 = fs(v18);
        strncpy(HourStr, v19, 0x40u);
        v20 = TextData2::Get(0x234BFE26u);
        v21 = fs(v20);
        strncpy(MinStr, v21, 0x40u);
        sprintf(MsgBuffer, "%s %s");
        result = MsgBuffer;
      }
    }
    else
    {
      if ( v5 )
      {
        v12 = TextData2::Get(0x2E43F526u);
        v13 = fs(v12);
        strncpy(DayStr, v13, 0x40u);
        v14 = TextData2::Get(0x2A51F978u);
        v15 = fs(v14);
        strncpy(HourStr, v15, 0x40u);
        v16 = TextData2::Get(0x234BFE26u);
        v17 = fs(v16);
        strncpy(MinStr, v17, 0x40u);
        sprintf(MsgBuffer, "%s %s %s");
        result = MsgBuffer;
      }
      else
      {
        v7 = TextData2::Get(0x2E43F526u);
        v8 = fs(v7);
        strncpy(DayStr, v8, 0x40u);
        v9 = TextData2::Get(0x234BFE26u);
        v10 = fs(v9);
        strncpy(MinStr, v10, 0x40u);
        sprintf(MsgBuffer, "%s %s");
        result = MsgBuffer;
      }
    }
  }
  else
  {
    result = "-";
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (004DA590) --------------------------------------------------------
bool __thiscall StatusBuffWin::Create(StatusBuffWin *this, PgFrameWork *pkFrameWork, StatusBuffWin::EBUFF_TYPE type)
{
  StatusBuffWin *v3; // esi@1
  NiSourceTexture *v4; // ebx@1
  NiNode *v5; // esi@2
  bool v6; // zf@4
  char *v8; // eax@10
  const char *v9; // ecx@11
  PgSprData *v10; // ebx@17
  NiNode *v11; // esi@18
  char *v12; // eax@29
  void *v13; // eax@31
  NiScreenElementsData *v14; // eax@32
  PgSprData::PgHitTester *v15; // eax@35
  unsigned int v16; // edx@35
  unsigned int v17; // eax@35
  NiScreenElementsData *v18; // ecx@35
  float v19; // ST3C_4@35
  float v20; // ST38_4@35
  NiScreenElements *v21; // eax@35
  void *v22; // eax@35
  NiD3DDefaultShader *v23; // eax@36
  NiMaterialProperty *v24; // eax@38
  float v25; // edx@38
  NiMaterialProperty *v26; // eax@38
  float v27; // edx@38
  float v28; // edx@38
  NiMaterialProperty *v29; // eax@38
  float v30; // edx@38
  NiMaterialProperty *v31; // ebx@38
  void *v32; // eax@38
  NiD3DDefaultShader *v33; // eax@39
  NiMaterialProperty *v34; // eax@41
  NiMaterialProperty *v35; // eax@41
  float v36; // edx@41
  float v37; // edx@41
  NiMaterialProperty *v38; // eax@41
  float v39; // edx@41
  NiMaterialProperty *v40; // ebx@41
  void *v41; // eax@41
  void *v42; // ebx@41
  NiAVObject *v43; // ecx@44
  void *v44; // eax@44
  int v45; // eax@45
  int v46; // ebx@45
  int v47; // edx@47
  int v48; // ebx@47
  PgSprData *v49; // eax@47
  FrameBoxWin *v50; // eax@47
  FrameBoxWin *v51; // eax@47
  FrameBoxWin *v52; // eax@47
  NiSourceTexture *v53; // eax@47
  PopupMenuWin *v54; // eax@47
  char *v55; // eax@47
  PopupMenuText *v56; // eax@47
  char *v57; // eax@47
  PopupMenuText *v58; // eax@47
  NiPointer<NiD3DDefaultShader> *v59; // edi@47
  NiTexturePalette *v60; // eax@58
  float v61; // ecx@58
  NiTexturePalette *v62; // eax@63
  AbstateIcon *v63; // eax@68
  AbstateIcon *v64; // eax@71
  double v65; // st7@76
  float v66; // ST3C_4@82
  void *(__thiscall *v67)(NiRefObject *, unsigned int); // edx@83
  NiNode *v68; // esi@84
  int v69; // [sp+28h] [bp-78h]@69
  NiNode *v70; // [sp+2Ch] [bp-74h]@52
  int v71; // [sp+2Ch] [bp-74h]@69
  const char *v72; // [sp+30h] [bp-70h]@52
  int v73; // [sp+30h] [bp-70h]@69
  int *v74; // [sp+34h] [bp-6Ch]@52
  int v75; // [sp+34h] [bp-6Ch]@69
  int *v76; // [sp+38h] [bp-68h]@52
  PgWin *v77; // [sp+38h] [bp-68h]@69
  unsigned int v78; // [sp+3Ch] [bp-64h]@26
  NiSourceTexture *v79; // [sp+3Ch] [bp-64h]@52
  bool v80; // [sp+3Ch] [bp-64h]@69
  NiColorA kCommonValue; // [sp+50h] [bp-50h]@35
  NiTexturePalette *thisa; // [sp+60h] [bp-40h]@8
  float v83; // [sp+64h] [bp-3Ch]@31
  int uiOrgY; // [sp+68h] [bp-38h]@1
  int uiOrgX; // [sp+6Ch] [bp-34h]@1
  NiTexture *iPosX; // [sp+70h] [bp-30h]@1
  int iOffY; // [sp+74h] [bp-2Ch]@35
  int iPosY; // [sp+78h] [bp-28h]@51
  PgSprData *pkSprData; // [sp+7Ch] [bp-24h]@47
  int uiHeight; // [sp+80h] [bp-20h]@1
  int uiLeft; // [sp+84h] [bp-1Ch]@1
  int uiTop; // [sp+88h] [bp-18h]@1
  int uiWidth; // [sp+8Ch] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+90h] [bp-10h]@1
  int v95; // [sp+9Ch] [bp-4h]@1
  signed int pkFrameWorka; // [sp+A8h] [bp+8h]@47

  v3 = this;
  spNode.m_pObject = 0;
  v95 = 0;
  uiHeight = 0;
  uiWidth = 0;
  uiOrgY = 0;
  uiOrgX = 0;
  uiLeft = 0;
  uiTop = 0;
  v4 = MenuTexMgr::GetTexture(4u);
  iPosX = (NiTexture *)v4;
  if ( !v4 )
  {
    v5 = spNode.m_pObject;
    v95 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      v6 = spNode.m_pObject == 0;
LABEL_5:
      if ( !v6 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  thisa = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\BuffDeBuffWin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, thisa);
  if ( !spNode.m_pObject )
    return 0;
  v9 = 0;
  if ( type )
  {
    if ( type == 1 )
    {
      v9 = "DeBuffBox";
    }
    else
    {
      if ( type == 2 )
        v9 = "ChargedBuff";
    }
  }
  else
  {
    v9 = "BuffBox";
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v9, &uiOrgX, &uiOrgY, v4);
  uiOrgY = 0;
  uiOrgX = 0;
  if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v10, 0, pkFrameWork, "StatusbuffWin", 0) )
  {
    v11 = spNode.m_pObject;
    v95 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    return 0;
  }
  if ( !type )
  {
    v78 = -1765875726;
    goto LABEL_29;
  }
  if ( type == 1 )
  {
    v78 = -569123870;
    goto LABEL_29;
  }
  if ( type == 2 )
  {
    v78 = -770659305;
LABEL_29:
    v12 = TextData2::Get(v78);
    PgWin::SetToolTipWinText(&v3->baseclass_0.baseclass_0.baseclass_0, v12);
  }
  thisa = (NiTexturePalette *)operator new(0xC4u);
  LOBYTE(v95) = 1;
  if ( *(float *)&thisa == 0.0 )
  {
    v14 = 0;
  }
  else
  {
    v13 = operator new(0x70u);
    LODWORD(v83) = v13;
    LOBYTE(v95) = 2;
    if ( v13 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v13, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      LOBYTE(v95) = 1;
      NiScreenElements::NiScreenElements((NiScreenElements *)thisa, v14);
    }
    else
    {
      LOBYTE(v95) = 1;
      NiScreenElements::NiScreenElements((NiScreenElements *)thisa, 0);
    }
  }
  LOBYTE(v95) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spBackPlane, (NiD3DDefaultShader *)v14);
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  v15 = v10->m_akHitTester.m_pBase->m_pObject;
  v16 = v15->m_uiHeight;
  v17 = v15->m_uiWidth;
  v18 = (NiScreenElementsData *)v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
  v83 = (double)(uiOrgX + 1);
  *(float *)&thisa = (double)(uiOrgY + 1);
  iOffY = v17 - 2;
  v20 = (double)(v17 - 2);
  v19 = (double)(v16 - 2);
  NiScreenElementsData::SetRectangle(v18, 0, v83, *(float *)&thisa, v20, v19);
  v21 = v3->m_spBackPlane.m_pObject;
  kCommonValue.r = 0.0;
  kCommonValue.g = 0.0;
  kCommonValue.b = 0.0;
  kCommonValue.a = 0.0;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v21->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v22 = operator new(0x60u);
  thisa = (NiTexturePalette *)v22;
  LOBYTE(v95) = 3;
  if ( v22 )
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v22);
  else
    v23 = 0;
  LOBYTE(v95) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spMtrlProp, v23);
  v24 = v3->m_spMtrlProp.m_pObject;
  v24->m_amb.r = 255.0;
  v24->m_amb.g = 0.0;
  kCommonValue.g = 255.0;
  v24->m_amb.b = 0.0;
  v25 = kCommonValue.g;
  kCommonValue.b = 0.0;
  kCommonValue.a = 0.0;
  ++v24->m_uiRevID;
  v26 = v3->m_spMtrlProp.m_pObject;
  kCommonValue.g = 255.0;
  ++v26->m_uiRevID;
  v26->m_diff.r = v25;
  v27 = kCommonValue.b;
  kCommonValue.b = 0.0;
  v26->m_diff.g = v27;
  v28 = kCommonValue.a;
  kCommonValue.a = 0.0;
  v26->m_diff.b = v28;
  v29 = v3->m_spMtrlProp.m_pObject;
  v30 = kCommonValue.g;
  ++v29->m_uiRevID;
  v29->m_emit.r = v30;
  v29->m_emit.g = kCommonValue.b;
  v29->m_emit.b = kCommonValue.a;
  v31 = v3->m_spMtrlProp.m_pObject;
  ++v31->m_uiRevID;
  v31->m_fAlpha = 0.5;
  v32 = operator new(0x60u);
  thisa = (NiTexturePalette *)v32;
  LOBYTE(v95) = 4;
  if ( v32 )
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v32);
  else
    v33 = 0;
  LOBYTE(v95) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spFixedMtrlProp, v33);
  v34 = v3->m_spFixedMtrlProp.m_pObject;
  v34->m_amb.r = 255.0;
  v34->m_amb.g = 0.0;
  kCommonValue.g = 255.0;
  v34->m_amb.b = 0.0;
  kCommonValue.b = 0.0;
  kCommonValue.a = 0.0;
  ++v34->m_uiRevID;
  v35 = v3->m_spFixedMtrlProp.m_pObject;
  kCommonValue.g = 255.0;
  ++v35->m_uiRevID;
  v35->m_diff.r = 255.0;
  v36 = kCommonValue.b;
  kCommonValue.b = 0.0;
  v35->m_diff.g = v36;
  v37 = kCommonValue.a;
  kCommonValue.a = 0.0;
  v35->m_diff.b = v37;
  v38 = v3->m_spFixedMtrlProp.m_pObject;
  v39 = kCommonValue.g;
  ++v38->m_uiRevID;
  v38->m_emit.r = v39;
  v38->m_emit.g = kCommonValue.b;
  v38->m_emit.b = kCommonValue.a;
  v40 = v3->m_spFixedMtrlProp.m_pObject;
  ++v40->m_uiRevID;
  v40->m_fAlpha = 0.0;
  NiAVObject::AttachProperty(
    &v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v3->m_spMtrlProp.m_pObject->baseclass_0);
  v41 = operator new(0x20u);
  v42 = v41;
  thisa = (NiTexturePalette *)v41;
  LOBYTE(v95) = 5;
  if ( v41 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v41);
    *(_DWORD *)v42 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v42 + 14) = 236;
    *((_BYTE *)v42 + 30) = 0;
  }
  else
  {
    v42 = 0;
  }
  *((_WORD *)v42 + 14) |= 1u;
  v43 = (NiAVObject *)v3->m_spBackPlane.m_pObject;
  LOBYTE(v95) = 0;
  NiAVObject::AttachProperty(v43, (NiProperty *)v42);
  v44 = operator new(0x44u);
  thisa = (NiTexturePalette *)v44;
  LOBYTE(v95) = 6;
  if ( v44 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v44);
    v46 = v45;
  }
  else
  {
    v46 = 0;
  }
  LOBYTE(v95) = 0;
  NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v46, iPosX);
  NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v46, 0);
  *(_DWORD *)(v46 + 28) = 2;
  NiAVObject::AttachProperty(
    &v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    (NiProperty *)v46);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiAVObject::UpdateProperties(&v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  ((void (__thiscall *)(StatusBuffWin *, NiScreenElements *, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v3,
    v3->m_spBackPlane.m_pObject,
    0);
  v47 = uiOrgY;
  v48 = uiOrgX;
  v3->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  iOffY = v47;
  v49 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ReSizeBox", &uiLeft, &uiTop, 0);
  pkSprData = v49;
  v50 = FrameBoxWin::CreateWin(
          v49->m_spTexture.m_pObject,
          7u,
          7u,
          uiLeft - v48,
          uiTop - iOffY,
          &v3->baseclass_0.baseclass_0.baseclass_0,
          pkFrameWork);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkFrameBox, (NiD3DDefaultShader *)v50);
  ((void (__stdcall *)(_DWORD))v3->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(unsigned int, unsigned int))v3->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
    pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiHeight);
  ((void (__stdcall *)(_DWORD))v3->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
  v3->m_pkFrameBox.m_pObject->m_bSizeDraggable = 1;
  v51 = v3->m_pkFrameBox.m_pObject;
  v51->m_iSizeDragMaxWidth = 600;
  v51->m_iSizeDragMinWidth = 20;
  v52 = v3->m_pkFrameBox.m_pObject;
  v52->m_iSizeDragMinHeight = 20;
  v52->m_iSizeDragMaxHeight = 400;
  v3->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v3->m_pkFrameBox.m_pObject,
    0);
  v53 = MenuTexMgr::GetTexture(1u);
  v54 = PopupMenuWin::CreateWin(v53, 4u, 4u, 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spPopupMenu, (NiD3DDefaultShader *)v54);
  v3->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v3->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  PopupMenuWin::Clear(v3->m_spPopupMenu.m_pObject);
  v55 = TextData2::Get(0x8A03D3F2u);
  v56 = PopupMenuText::CreateWin(v55, 0, 0, 0, 0, 0, 0);
  v56->baseclass_0.m_ePopupMenuID = 1014;
  PopupMenuWin::AddMenu(v3->m_spPopupMenu.m_pObject, &v56->baseclass_0);
  v57 = TextData2::Get(0x9515DEF1u);
  v58 = PopupMenuText::CreateWin(v57, 0, 0, 0, 0, 0, 0);
  v58->baseclass_0.m_ePopupMenuID = 1013;
  PopupMenuWin::AddMenu(v3->m_spPopupMenu.m_pObject, &v58->baseclass_0);
  PopupMenuWin::FinishMenu(v3->m_spPopupMenu.m_pObject, 0);
  v3->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v3->m_spPopupMenu.m_pObject,
    0);
  pkFrameWorka = 1;
  v59 = (NiPointer<NiD3DDefaultShader> *)v3->m_apkAbstateBufIcon;
  while ( type )
  {
    if ( type == 1 )
    {
      if ( !PgUtil::GetTriShapeRect(
              &spNode.m_pObject->baseclass_0,
              "CharDeBuffBox00",
              (int *)&iPosX,
              &iPosY,
              (unsigned int *)&uiWidth,
              (unsigned int *)&uiHeight) )
        goto LABEL_77;
      v79 = 0;
      v76 = &uiTop;
      v74 = &uiLeft;
      v72 = "CharDeBuffBox00";
      v70 = spNode.m_pObject;
    }
    else
    {
      if ( type != 2 )
        goto LABEL_58;
      if ( !PgUtil::GetTriShapeRect(
              &spNode.m_pObject->baseclass_0,
              "ChargedBuffBox",
              (int *)&iPosX,
              &iPosY,
              (unsigned int *)&uiWidth,
              (unsigned int *)&uiHeight) )
        goto LABEL_77;
      v79 = 0;
      v76 = &uiTop;
      v74 = &uiLeft;
      v72 = "ChargedBuffBox";
      v70 = spNode.m_pObject;
    }
LABEL_57:
    pkSprData = PgSprData::Create(&v70->baseclass_0, v72, v74, v76, v79);
LABEL_58:
    v60 = (NiTexturePalette *)PgWinSpr::CreateWin(
                                uiLeft + uiWidth * pkFrameWorka - v48,
                                uiTop - iOffY,
                                pkSprData,
                                &v3->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0);
    LODWORD(v61) = v59[-40].m_pObject;
    thisa = v60;
    v83 = v61;
    if ( LODWORD(v61) != v60 )
    {
      if ( LODWORD(v61) && !InterlockedDecrement((volatile LONG *)(LODWORD(v61) + 4)) && v83 != 0.0 )
        (*(void (__stdcall **)(signed int))*LODWORD(v83))(1);
      v62 = thisa;
      v59[-40].m_pObject = (NiD3DDefaultShader *)thisa;
      if ( v62 )
        InterlockedIncrement((volatile LONG *)&v62->baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v59[-40].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v59[-40].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    if ( type )
    {
      if ( type != 1 )
      {
        if ( type == 2 )
        {
          v63 = AbstateIcon::CreateWin(
                  (int)((char *)&iPosX->baseclass_0.baseclass_0.baseclass_0.vfptr + uiWidth * pkFrameWorka - v48 + 2),
                  iPosY - iOffY + 2,
                  uiWidth - 4,
                  uiHeight - 4,
                  &v3->baseclass_0.baseclass_0.baseclass_0,
                  0);
          NiPointer<PopupMenuWin>::operator_(v59, (NiD3DDefaultShader *)v63);
          LOBYTE(v59->m_pObject[1].m_kClippedProjectedShadows.vfptr) = 1;
        }
        goto LABEL_72;
      }
      v80 = 0;
      v77 = (PgWin *)v3;
      v75 = uiHeight - 4;
      v73 = uiWidth - 4;
      v71 = iPosY - iOffY + 2;
      v69 = (int)((char *)&iPosX->baseclass_0.baseclass_0.baseclass_0.vfptr + uiWidth * pkFrameWorka - v48 + 2);
    }
    else
    {
      v80 = 1;
      v77 = (PgWin *)v3;
      v75 = uiHeight - 4;
      v73 = uiWidth - 4;
      v71 = iPosY - iOffY + 2;
      v69 = (int)((char *)&iPosX->baseclass_0.baseclass_0.baseclass_0.vfptr + uiWidth * pkFrameWorka - v48 + 2);
    }
    v64 = AbstateIcon::CreateWin(v69, v71, v73, v75, v77, v80);
    NiPointer<PopupMenuWin>::operator_(v59, (NiD3DDefaultShader *)v64);
LABEL_72:
    ((void (__stdcall *)(_DWORD))v59->m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v59->m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ++pkFrameWorka;
    ++v59;
    if ( pkFrameWorka - 1 >= 40 )
    {
      StatusBuffWin::AlignBuf(v3, 20, 1);
      v3->m_eBuffType = type;
      if ( type )
      {
        if ( type == 1 )
        {
          ((void (__thiscall *)(StatusBuffWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
            v3,
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            0.1,
            0.25999999);
        }
        else
        {
          if ( type == 2 )
          {
            v65 = 0.28799999;
            goto LABEL_82;
          }
        }
      }
      else
      {
        v65 = 0.22;
LABEL_82:
        v66 = v65;
        ((void (__thiscall *)(StatusBuffWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          v3,
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.1,
          LODWORD(v66));
      }
      v67 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor;
      v3->m_fLastUpdatedTime = 0.0;
      v67(&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 1u);
      v95 = -1;
      if ( spNode.m_pObject )
      {
        v68 = spNode.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v68 )
            v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v68, 1u);
        }
      }
      return 1;
    }
  }
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "CharBuffBox00",
         (int *)&iPosX,
         &iPosY,
         (unsigned int *)&uiWidth,
         (unsigned int *)&uiHeight) )
  {
    v79 = 0;
    v76 = &uiTop;
    v74 = &uiLeft;
    v72 = "CharBuffBox00";
    v70 = spNode.m_pObject;
    goto LABEL_57;
  }
LABEL_77:
  v5 = spNode.m_pObject;
  v95 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    v6 = v5 == 0;
    goto LABEL_5;
  }
  return 0;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;

//----- (004DB010) --------------------------------------------------------
bool __thiscall StatusBuffWin::RefreshChargedBuffIcon(StatusBuffWin *this, ChargedIconItem *pkInfo, PROTO_CHARGEDBUFF_INFO *pkBuffInfo, int BufNum)
{
  StatusBuffWin *v4; // edi@1
  bool result; // al@2
  PgWin *v6; // ST30_4@3
  char *v7; // eax@3
  int v8; // eax@3
  void *v9; // eax@7
  const char *v10; // esi@7
  int v11; // edx@7
  char v12; // cl@8
  char *v13; // eax@9
  char v14; // cl@10
  unsigned int v15; // ecx@11
  unsigned int v16; // eax@11
  unsigned int v17; // esi@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // eax@13
  int v19; // eax@15
  bool v20; // zf@15
  signed int v21; // eax@17
  void *v22; // eax@24
  void *v23; // [sp+0h] [bp-C4h]@7
  unsigned int RecordNo; // [sp+8h] [bp-BCh]@6
  unsigned int v25; // [sp+Ch] [bp-B8h]@4
  bool v26; // [sp+17h] [bp-ADh]@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+18h] [bp-ACh]@7
  char acToolTipMsg[128]; // [sp+34h] [bp-90h]@3
  unsigned int v29; // [sp+B4h] [bp-10h]@1
  int v30; // [sp+C0h] [bp-4h]@20
  int v31; // [sp+C4h] [bp+0h]@1

  v29 = (unsigned int)&v31 ^ __security_cookie;
  v4 = this;
  if ( pkInfo )
  {
    acToolTipMsg[0] = 0;
    memset(&acToolTipMsg[1], 0, 0x7Fu);
    v6 = (PgWin *)v4->m_apkAbstateBufIcon[BufNum].m_pObject;
    StatusBuffWin::GetRemainTime(v4, acToolTipMsg, pkBuffInfo);
    TextData::Get(0xEC4E4539u);
    v7 = fs("%s\n\n%s: %s");
    PgWin::SetToolTipWinText(v6, v7);
    v4->m_apkAbstateBufIcon[BufNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    AbstateIcon::SetIconFile(v4->m_apkAbstateBufIcon[BufNum].m_pObject, pkInfo->IconFile, pkInfo->IconIndex);
    ((void (__stdcall *)(signed int))v4->m_apkAbstateBufIcon[BufNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v4->m_apkAbstateBufIcon[BufNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v4->m_apkAbstateBufIcon[BufNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v4->m_apkAbstateBuf[BufNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v8 = *(_DWORD *)(ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable + 56);
    if ( v8 )
      v25 = *(_DWORD *)(v8 + 40);
    else
      v25 = 0;
    RecordNo = 0;
    if ( v25 <= 0 )
    {
LABEL_24:
      v22 = 0;
    }
    else
    {
      while ( 1 )
      {
        v9 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<ChargedDeletableBuff_ChargedDeletableBuffTab>::ms_pkTable + 4),
               RecordNo);
        v10 = (const char *)v9;
        v23 = v9;
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v11 = (int)((char *)v9 + 1);
        do
        {
          v12 = *(_BYTE *)v9;
          v9 = (char *)v9 + 1;
        }
        while ( v12 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &thisa,
          v10,
          (unsigned int)((char *)v9 - v11));
        v13 = pkInfo->CI_Inx;
        do
          v14 = *v13++;
        while ( v14 );
        v15 = thisa.baseclass_0._Mysize;
        v16 = v13 - &pkInfo->CI_Inx[1];
        v17 = v16;
        if ( thisa.baseclass_0._Mysize >= v16 )
          v15 = v16;
        v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
        if ( thisa.baseclass_0._Myres < 0x10 )
          v18 = &thisa;
        v19 = std::char_traits<char>::compare(v18->baseclass_0.___u0.baseclass_0.dummy, pkInfo->CI_Inx, v15);
        v20 = v19 == 0;
        if ( !v19 )
        {
          if ( thisa.baseclass_0._Mysize >= v17 )
            v21 = thisa.baseclass_0._Mysize != v17;
          else
            v21 = -1;
          v20 = v21 == 0;
        }
        v26 = v20;
        v30 = -1;
        if ( thisa.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&thisa);
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( v26 )
          break;
        ++RecordNo;
        if ( RecordNo >= v25 )
          goto LABEL_24;
      }
      v22 = v23;
    }
    v4->m_apkAbstateBufIcon[BufNum].m_pObject->m_bEraseEnable = v22 != 0;
    v4->m_apkAbstateBufIcon[BufNum].m_pObject->m_pkChargedBuffInfo = pkBuffInfo;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97EAC: using guessed type int ITableBase_ChargedDeletableBuff_ChargedDeletableBuffTab___ms_pkTable;

//----- (004DB2E0) --------------------------------------------------------
void __thiscall StatusBuffWin::RemoveMsgItemToMap(StatusBuffWin *this, char *pcKeyName)
{
  StatusBuffWin *v2; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v3; // edi@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa result; // [sp+0h] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4h] [bp-2Ch]@2
  unsigned int v6; // [sp+20h] [bp-10h]@1
  int v7; // [sp+2Ch] [bp-4h]@2
  int v8; // [sp+30h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  if ( pcKeyName )
  {
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcKeyName, strlen(pcKeyName));
    v7 = 0;
    v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::find((std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)&v2->m_ChargedMsgNotice, &result, &thisa)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v7 = -1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    if ( v3 != *((_DWORD *)&v2->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) )
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty___std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_CAbstractProperty__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *)&v2->m_ChargedMsgNotice,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st *)&result,
        v3);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004DB3B0) --------------------------------------------------------
void __thiscall StatusBuffWin::RemoveAllMsgItemFromMap(StatusBuffWin *this)
{
  StatusBuffWin *v1; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v3; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v4; // ecx@2
  int v5; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba j; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba i; // eax@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st result; // [sp+8h] [bp-4h]@11

  v1 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)*((_DWORD *)&this->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1);
  v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&v2->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba **)&v2->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v2 )
  {
    do
    {
      v4 = v3;
      if ( !*(_BYTE *)(*(_DWORD *)&v3 + 45) )
      {
        v5 = *(_DWORD *)(*(_DWORD *)&v3 + 8);
        if ( *(_BYTE *)(v5 + 45) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v3 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 45);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&i + 4) )
          {
            if ( v3 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v3 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)v5;
                !*(_BYTE *)(*(_DWORD *)&j + 45);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)**(_DWORD **)&j )
            v3 = j;
        }
      }
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty___std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_CAbstractProperty__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *)&v1->m_ChargedMsgNotice,
        &result,
        v4);
    }
    while ( v3 != *((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) );
  }
}

//----- (004DB430) --------------------------------------------------------
void __thiscall StatusBuffWin::AddMsgItemToMap(StatusBuffWin *this, char *pcKeyName)
{
  StatusBuffWin *v2; // edi@1
  int v3; // edi@2
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *v4; // esi@7
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v5; // eax@7
  char v6; // [sp+0h] [bp-5Ch]@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa result; // [sp+4h] [bp-58h]@2
  StatusBuffWin *v8; // [sp+8h] [bp-54h]@1
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *v9; // [sp+Ch] [bp-50h]@2
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool> NewElement; // [sp+10h] [bp-4Ch]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+30h] [bp-2Ch]@2
  unsigned int v12; // [sp+4Ch] [bp-10h]@1
  int v13; // [sp+58h] [bp-4h]@2
  int v14; // [sp+5Ch] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v2 = this;
  v8 = this;
  if ( pcKeyName )
  {
    NewElement.baseclass_0.first.baseclass_0._Myres = 15;
    NewElement.baseclass_0.first.baseclass_0._Mysize = 0;
    NewElement.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    NewElement.baseclass_0.second = 0;
    thisa.baseclass_0._Myres = 15;
    v13 = 0;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcKeyName, strlen(pcKeyName));
    LOBYTE(v13) = 1;
    v9 = (std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *)&v2->m_ChargedMsgNotice;
    v3 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::find(
                       (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)&v2->m_ChargedMsgNotice,
                       &result,
                       &thisa)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    LOBYTE(v13) = 0;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    if ( v3 == *((_DWORD *)&v8->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) )
    {
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcKeyName, strlen(pcKeyName));
      LOBYTE(v13) = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NewElement.baseclass_0.first, &thisa);
      LOBYTE(v13) = 0;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      v4 = (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v9;
      NewElement.baseclass_0.second = 0;
      v5 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool>__>(v9, &NewElement);
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Linsert(
        v4,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pai *)&v6,
        v5,
        0);
    }
    else
    {
      *(_BYTE *)(v3 + 40) = 0;
    }
    if ( NewElement.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NewElement);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004DB580) --------------------------------------------------------
void __thiscall StatusBuffWin::RefreshChargedBuffMsg(StatusBuffWin *this, ChargedMessageItem *pkInfo, PROTO_CHARGEDBUFF_INFO *pkBuffInfo)
{
  StatusBuffWin *v3; // ebx@1
  __int64 v4; // ST08_8@3
  __int64 v5; // qax@3
  long double v6; // st7@3
  char *v7; // esi@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // eax@5
  int v9; // edi@5
  GameFrameWork *v10; // edi@8
  char *v11; // eax@8
  char *v12; // eax@8
  GameFrameWork *v13; // ebx@18
  char *v14; // eax@18
  char *v15; // eax@18
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa result; // [sp+0h] [bp-44h]@5
  long double pkItem; // [sp+4h] [bp-40h]@1
  ChargedMessageItem *Min; // [sp+Ch] [bp-38h]@1
  tm tb; // [sp+10h] [bp-34h]@3
  unsigned int v20; // [sp+34h] [bp-10h]@1
  int v21; // [sp+40h] [bp-4h]@5
  int v22; // [sp+44h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v3 = this;
  Min = pkInfo;
  HIDWORD(pkItem) = pkBuffInfo;
  if ( pkInfo )
  {
    if ( pkBuffInfo )
    {
      memcpy(&tb, &Timer::ms_dLastServerTime, sizeof(tb));
      v4 = _mktime64(&tb);
      v5 = ShineDateTime::toTime_t((ShineDateTime *)(HIDWORD(pkItem) + 10));
      v6 = _difftime64(v5, v4);
      pkItem = v6;
      if ( v6 <= 3600.0 )
      {
        if ( v6 > 2.0 )
        {
          v7 = Min->CI_Inx;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&tb.tm_hour,
            Min->CI_Inx);
          v21 = 0;
          v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::find(
                             (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)&v3->m_ChargedMsgNotice,
                             &result,
                             v8)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          v21 = -1;
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&tb.tm_hour);
          Min = (ChargedMessageItem *)(signed int)(pkItem / 60.0);
          HIDWORD(pkItem) = ItemInfoTab::GetByInxName(v7);
          if ( HIDWORD(pkItem) )
          {
            if ( Min == (ChargedMessageItem *)5 )
            {
              if ( v9 != *((_DWORD *)&v3->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) )
              {
                v10 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
                v11 = TextData2::Get(0x163FFB3Cu);
                v12 = fs(v11);
                GameFrameWork::AddSysMsg(v10, v12);
                StatusBuffWin::RemoveMsgItemToMap(v3, v7);
              }
              return;
            }
            if ( Min == (ChargedMessageItem *)60 )
            {
              if ( v9 == *((_DWORD *)&v3->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) )
                StatusBuffWin::AddMsgItemToMap(v3, v7);
              if ( !*(_BYTE *)(v9 + 40) )
              {
LABEL_18:
                *(_BYTE *)(v9 + 40) = 1;
                v13 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
                v14 = TextData2::Get(0x163FFB3Cu);
                v15 = fs(v14);
                GameFrameWork::AddSysMsg(v13, v15);
                return;
              }
            }
            else
            {
              if ( Min == (ChargedMessageItem *)30 )
              {
                if ( v9 == *((_DWORD *)&v3->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) )
                  StatusBuffWin::AddMsgItemToMap(v3, v7);
                if ( !*(_BYTE *)(v9 + 40) )
                  goto LABEL_18;
              }
              else
              {
                if ( v9 == *((_DWORD *)&v3->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) )
                  StatusBuffWin::AddMsgItemToMap(v3, v7);
                else
                  *(_BYTE *)(v9 + 40) = 0;
              }
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004DB770) --------------------------------------------------------
void __thiscall StatusBuffWin::RefreshChargedItems(StatusBuffWin *this, int *BufNum)
{
  NiTListItem<PROTO_CHARGEDBUFF_INFO *> *v2; // eax@1
  int *v3; // edi@2
  PROTO_CHARGEDBUFF_INFO *v4; // eax@5
  unsigned __int16 v5; // bx@6
  unsigned int v6; // esi@6
  void *v7; // eax@7
  const char *v8; // esi@11
  ChargedIconItem *v9; // ebx@11
  ChargedMessageItem *pkMsgItem; // [sp+0h] [bp-Ch]@11
  NiTListItem<PROTO_CHARGEDBUFF_INFO *> *iter; // [sp+4h] [bp-8h]@5
  StatusBuffWin *thisa; // [sp+8h] [bp-4h]@1
  PROTO_CHARGEDBUFF_INFO *pkInfo; // [sp+14h] [bp+8h]@5

  thisa = this;
  v2 = ChargedItemList::GetList()->baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    v3 = BufNum;
    while ( *v3 < 40 )
    {
      iter = v2->m_pkNext;
      v4 = v2->m_element;
      pkInfo = v4;
      if ( v4 )
      {
        v5 = v4->ChargedBuffID;
        v6 = 0;
        if ( ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
        {
          while ( 1 )
          {
            v7 = CDataReader::GetRecord(
                   (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                   v6);
            if ( v7 )
            {
              if ( *(_WORD *)v7 == v5 )
                break;
            }
            ++v6;
            if ( v6 >= ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
              goto LABEL_18;
          }
          v8 = (char *)v7 + 2;
          v9 = ChargedIconItemTab::GetByItemName((const char *)v7 + 2);
          pkMsgItem = ChargedMsgItemTab::GetByItemName(v8);
          if ( thisa->m_uiVisiableNums - 1 >= *v3 )
          {
            if ( v9 && StatusBuffWin::RefreshChargedBuffIcon(thisa, v9, pkInfo, *v3) == 1 )
              ++*v3;
            if ( pkMsgItem )
              StatusBuffWin::RefreshChargedBuffMsg(thisa, pkMsgItem, pkInfo);
          }
          else
          {
            thisa->m_apkAbstateBuf[*v3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)thisa->m_apkAbstateBuf[*v3].m_pObject,
              0);
            ((void (__stdcall *)(_DWORD))thisa->m_apkAbstateBufIcon[(*v3)++].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          }
        }
      }
LABEL_18:
      if ( !iter )
        break;
      v2 = iter;
    }
  }
}
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (004DB880) --------------------------------------------------------
void __thiscall StatusBuffWin::_StatusBuffWin(StatusBuffWin *this)
{
  StatusBuffWin *v1; // esi@1
  PgWin *v2; // ST0C_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v3; // ST0C_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v4; // ST08_4@1
  NiMaterialProperty *v5; // edi@1
  NiMaterialProperty *v6; // edi@5
  NiScreenElements *v7; // edi@9
  FrameBoxWin *v8; // edi@13
  PopupMenuWin *v9; // edi@17
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st result; // [sp+0h] [bp-18h]@1
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> *v11; // [sp+4h] [bp-14h]@1
  StatusBuffWin *v12; // [sp+8h] [bp-10h]@1
  int v13; // [sp+14h] [bp-4h]@1

  v1 = this;
  v12 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatusBuffWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatusBuffWin::_vftable_;
  v2 = (PgWin *)this->m_spPopupMenu.m_pObject;
  v13 = 9;
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, v2);
  v11 = &v1->m_ChargedMsgNotice;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)*((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1);
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)**((_DWORD **)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1);
  LOBYTE(v13) = 10;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *)&v1->m_ChargedMsgNotice,
    &result,
    v4,
    v3);
  operator delete(*((void **)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1));
  LOBYTE(v13) = 7;
  NiObjectNET::_NiObjectNET(&v1->m_spAlphaProp.baseclass_0.baseclass_0);
  v5 = v1->m_spFixedMtrlProp.m_pObject;
  LOBYTE(v13) = 6;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spMtrlProp.m_pObject;
  LOBYTE(v13) = 5;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spBackPlane.m_pObject;
  LOBYTE(v13) = 4;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  LOBYTE(v13) = 3;
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBufIcon,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  LOBYTE(v13) = 2;
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBuf,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v8 = v1->m_pkFrameBox.m_pObject;
  LOBYTE(v13) = 1;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  v9 = v1->m_spPopupMenu.m_pObject;
  LOBYTE(v13) = 0;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  v13 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 98EB1C: using guessed type int (__stdcall *StatusBuffWin___vftable_)(int uiFlags);
// 98EB3C: using guessed type int (__thiscall *StatusBuffWin___vftable_)(void *p, char);

//----- (004DBA30) --------------------------------------------------------
void __thiscall StatusBuffWin::UpdateMeWin(StatusBuffWin *this, float fCurTime)
{
  StatusBuffWin *v2; // esi@1
  StatusBuffWin::EBUFF_TYPE v3; // eax@1
  int v4; // eax@2
  double v5; // st7@12
  double v6; // st6@13
  FrameBoxWin *v7; // ecx@17
  double v8; // st6@19
  NiMaterialProperty *v9; // eax@23
  NiMaterialProperty *v10; // eax@24
  bool v11; // zf@25
  Char *v12; // [sp+4h] [bp-18h]@29
  StateType v13; // [sp+8h] [bp-14h]@29
  int *v14; // [sp+Ch] [bp-10h]@29
  float BufNum; // [sp+18h] [bp-4h]@4

  v2 = this;
  v3 = this->m_eBuffType;
  if ( v3 )
  {
    v4 = v3 - 1;
    if ( v4 )
    {
      if ( v4 == 1 )
      {
        LODWORD(BufNum) = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
        MachineOpt::ms_kUserLoginOption.ChargedBufXPos = (double)SLODWORD(BufNum) / (double)PgWin::ms_uiScreenWidth;
        LODWORD(BufNum) = ((int (__thiscall *)(StatusBuffWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
        MachineOpt::ms_kUserLoginOption.ChargedBufYPos = (double)SLODWORD(BufNum) / (double)PgWin::ms_uiScreenHeight;
      }
    }
    else
    {
      LODWORD(BufNum) = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
      MachineOpt::ms_kUserLoginOption.DBufXPos = (double)SLODWORD(BufNum) / (double)PgWin::ms_uiScreenWidth;
      LODWORD(BufNum) = ((int (__thiscall *)(StatusBuffWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
      MachineOpt::ms_kUserLoginOption.DBufYPos = (double)SLODWORD(BufNum) / (double)PgWin::ms_uiScreenHeight;
    }
  }
  else
  {
    LODWORD(BufNum) = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    MachineOpt::ms_kUserLoginOption.BufXPos = (double)SLODWORD(BufNum) / (double)PgWin::ms_uiScreenWidth;
    LODWORD(BufNum) = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
    MachineOpt::ms_kUserLoginOption.BufYPos = (double)SLODWORD(BufNum) / (double)PgWin::ms_uiScreenHeight;
  }
  if ( !v2->IsShowBuf )
    goto LABEL_34;
  if ( (unsigned __int8)((int (__stdcall *)(int, int))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) )
  {
    if ( v2->m_kAlphaControl.fTimeLeftToAppear > 0.0 )
      v2->m_kAlphaControl.fTimeLeftToAppear = v2->m_kAlphaControl.fTimeLeftToAppear - Timer::ms_fDeltaTime * 10.0;
    if ( v2->m_kAlphaControl.fTimeLeftToAppear <= 0.0 )
    {
      ((void (__stdcall *)(signed int))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v5 = 1.0;
      if ( v2->m_kAlphaControl.fAlphaValue < 1.0 )
      {
        BufNum = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime + v2->m_kAlphaControl.fAlphaValue;
        v6 = BufNum;
        v2->m_kAlphaControl.fAlphaValue = BufNum;
        if ( v6 > 1.0 )
          v2->m_kAlphaControl.fAlphaValue = 1.0;
        if ( v2->m_kAlphaControl.fAlphaValue < 1.0 )
        {
          BufNum = NI_HALF_PI * v2->m_kAlphaControl.fAlphaValue;
          JUMPOUT(*(int *)loc_4DBC5A);
        }
LABEL_23:
        v9 = v2->m_spFixedMtrlProp.m_pObject;
        BufNum = v5;
        v9->m_fAlpha = BufNum;
        ++v9->m_uiRevID;
        goto LABEL_25;
      }
    }
  }
  else
  {
    v7 = v2->m_pkFrameBox.m_pObject;
    if ( v7->m_bIsDuringSizeDrag )
      goto LABEL_25;
    v5 = 0.0;
    if ( v2->m_kAlphaControl.fAlphaValue > 0.0 )
    {
      BufNum = v2->m_kAlphaControl.fAlphaValue - (Timer::ms_fDeltaTime + Timer::ms_fDeltaTime);
      v8 = BufNum;
      v2->m_kAlphaControl.fAlphaValue = BufNum;
      if ( v8 <= 0.0 )
      {
        v2->m_kAlphaControl.fAlphaValue = 0.0;
        v2->m_kAlphaControl.fTimeLeftToAppear = 1.0;
        ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v5 = 0.0;
      }
      if ( v5 < v2->m_kAlphaControl.fAlphaValue )
      {
        BufNum = NI_HALF_PI * v2->m_kAlphaControl.fAlphaValue;
        JUMPOUT(*(int *)loc_4DBCF2);
      }
      goto LABEL_23;
    }
    ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v10 = v2->m_spFixedMtrlProp.m_pObject;
    v10->m_fAlpha = 0.0;
    ++v10->m_uiRevID;
  }
LABEL_25:
  ((void (__stdcall *)(_DWORD))v2->m_pkFrameBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_spFixedMtrlProp.m_pObject->m_fAlpha);
  v11 = v2->m_eBuffType == 2;
  BufNum = 0.0;
  if ( v11 )
  {
    if ( fCurTime > v2->m_fLastUpdatedTime + 10.0 )
    {
      StatusBuffWin::ResetIcons(v2);
      StatusBuffWin::RefreshChargedItems(v2, (int *)&BufNum);
      v2->m_fLastUpdatedTime = fCurTime;
    }
  }
  else
  {
    StatusBuffWin::ResetIcons(v2);
    AbStateInfectee::GetAbStateList(&g_pkMainChar->baseclass_0);
    if ( v2->m_eBuffType )
    {
      v14 = (int *)&BufNum;
      v13 = 4;
      v12 = g_pkMainChar;
    }
    else
    {
      StatusBuffWin::SetBuffUI(v2, g_pkMainChar, Skill, (int *)&BufNum);
      StatusBuffWin::SetBuffUI(v2, g_pkMainChar, Scroll, (int *)&BufNum);
      StatusBuffWin::SetBuffUI(v2, g_pkMainChar, Potion, (int *)&BufNum);
      v14 = (int *)&BufNum;
      v13 = 0;
      v12 = g_pkMainChar;
    }
    StatusBuffWin::SetBuffUI(v2, v12, v13, v14);
  }
  if ( v2->m_uiVisiableNums < LODWORD(BufNum) )
  {
    v2->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    return;
  }
LABEL_34:
  v2->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}
// 4DBC5A: using guessed type int __thiscall(StatusBuffWin *this, float fCurTime);
// 4DBCF2: using guessed type int __thiscall(StatusBuffWin *this, float fCurTime);
// A97640: using guessed type float Timer__ms_fDeltaTime;
// B6DE90: using guessed type const float NI_HALF_PI;

//----- (004DBE40) --------------------------------------------------------
void __thiscall StatusBuffWin::DirectMessage(StatusBuffWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  StatusBuffWin *v4; // edi@1
  float v5; // eax@2
  IDirectMessenger *v6; // eax@3
  void *v7; // esi@6
  int (__thiscall *v8)(_DWORD); // edx@8
  int v9; // eax@8
  int v10; // ebx@11
  int v11; // eax@11
  char *v12; // esi@21
  signed int v13; // ebx@21
  bool v14; // zf@23
  char *v15; // esi@26
  signed int v16; // ebx@26

  v4 = this;
  switch ( iMsgTag )
  {
    case 14:
      v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
      if ( LODWORD(v5) )
        v6 = (IDirectMessenger *)(LODWORD(v5) + 232);
      else
        v6 = 0;
      if ( pkFrom == v6 )
      {
        v7 = pvBody;
        BYTE1(this->m_apkAbstateBuf[23].m_pObject) = 1;
        if ( *((_DWORD *)v7 + 2) && *(_DWORD *)v7 )
        {
          v8 = *(int (__thiscall **)(_DWORD))(*((_DWORD *)this - 58) + 164);
          pvBody = (void *)*((_DWORD *)this - 58);
          v9 = v8((char *)this - 232);
          (*(void (__thiscall **)(char *, int))((void (__thiscall **)(_DWORD, _DWORD))pvBody + 43))(
            (char *)v4 - 232,
            *(_DWORD *)v7 + v9);
        }
        if ( *((_DWORD *)v7 + 3) )
        {
          if ( *((_DWORD *)v7 + 1) )
          {
            v10 = *((_DWORD *)v4 - 58);
            v11 = (*(int (__thiscall **)(char *))(v10 + 168))((char *)v4 - 232);
            (*(void (__thiscall **)(char *, int))(v10 + 176))((char *)v4 - 232, *((_DWORD *)v7 + 1) + v11);
          }
        }
      }
      break;
    case 5:
      if ( PgWinSpr::HitTest((PgWinSpr *)((char *)this - 232), PgWin::ms_iMsX.x, PgWin::ms_iMsY) )
        LOBYTE(v4->m_apkAbstateBuf[23].m_pObject) = 1;
      break;
    case 6:
      if ( PgWinSpr::HitTest((PgWinSpr *)((char *)this - 232), PgWin::ms_iMsX.x, PgWin::ms_iMsY) )
      {
        if ( LOBYTE(v4->m_apkAbstateBuf[23].m_pObject) )
        {
          (*(void (__stdcall **)(int, int))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2])
                                          + 308))(
            PgWin::ms_iMsX.x,
            PgWin::ms_iMsY);
          PgWinMgr::OpenPopupWin(
            &Pgg_kWinMgr,
            0,
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]));
        }
        LOBYTE(v4->m_apkAbstateBuf[23].m_pObject) = 0;
      }
      break;
    case 15:
      if ( *(_DWORD *)pvBody == 1013 )
      {
        if ( !BYTE2(this->m_apkAbstateBuf[23].m_pObject) )
        {
          v15 = (char *)&this->baseclass_0.baseclass_0.m_spSpr;
          v16 = 40;
          do
          {
            (*(void (__stdcall **)(signed int))(**((_DWORD **)v15 - 40) + 256))(1);
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v15 + 256))(1);
            v15 += 4;
            --v16;
          }
          while ( v16 );
          (*(void (__stdcall **)(signed int))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2])
                                            + 256))(1);
          v14 = v4->m_apkAbstateBuf[22].m_pObject == (PgWinSpr *)2;
          BYTE2(v4->m_apkAbstateBuf[23].m_pObject) = 1;
          if ( v14 )
          {
            StatusBuffWin::ResetIcons((StatusBuffWin *)((char *)v4 - 232));
            pvBody = 0;
            StatusBuffWin::RefreshChargedItems((StatusBuffWin *)((char *)v4 - 232), (int *)&pvBody);
          }
        }
      }
      else
      {
        if ( *(_DWORD *)pvBody == 1014 )
        {
          if ( BYTE2(this->m_apkAbstateBuf[23].m_pObject) )
          {
            v12 = (char *)&this->baseclass_0.baseclass_0.m_spSpr;
            v13 = 40;
            do
            {
              (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v12 - 40) + 256))(0);
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 256))(0);
              v12 += 4;
              --v13;
            }
            while ( v13 );
            (*(void (__stdcall **)(_DWORD))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2])
                                          + 256))(0);
            v14 = v4->m_apkAbstateBuf[22].m_pObject == (PgWinSpr *)2;
            BYTE2(v4->m_apkAbstateBuf[23].m_pObject) = 0;
            if ( v14 )
              StatusBuffWin::ResetIcons((StatusBuffWin *)((char *)v4 - 232));
          }
        }
      }
      break;
    default:
      return;
  }
}

//----- (004DC0C0) --------------------------------------------------------
void __thiscall StatusBuffWin::StatusBuffWin(StatusBuffWin *this)
{
  StatusBuffWin *v1; // esi@1
  void *v2; // eax@1
  int v3; // ebx@2
  int v4; // edi@3
  int v5; // edi@8
  PopupMenuWin *v6; // edi@14
  FrameBoxWin *v7; // edi@19
  std::exception thisa; // [sp+0h] [bp-24h]@25
  StatusBuffWin *v9; // [sp+Ch] [bp-18h]@1
  char *_What; // [sp+10h] [bp-14h]@25
  int v11; // [sp+14h] [bp-10h]@2
  int v12; // [sp+20h] [bp-4h]@1

  v1 = this;
  v9 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatusBuffWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatusBuffWin::_vftable_;
  v12 = 0;
  v1->m_spPopupMenu.m_pObject = 0;
  v1->m_pkFrameBox.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBuf,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBufIcon,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spBackPlane.m_pObject = 0;
  v1->m_spMtrlProp.m_pObject = 0;
  v1->m_spFixedMtrlProp.m_pObject = 0;
  NiObjectNET::NiObjectNET(&v1->m_spAlphaProp.baseclass_0.baseclass_0);
  v1->m_spAlphaProp.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiAlphaProperty::_vftable_;
  v1->m_spAlphaProp.m_uFlags = 236;
  v1->m_spAlphaProp.m_ucAlphaTestRef = 0;
  LOBYTE(v12) = 8;
  *((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 2) = 0;
  v2 = operator new(0x30u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0
                                                                                      + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0
                                                                                      + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_ChargedMsgNotice.baseclass_0.baseclass_0 + 1) + 45) = 1;
  v1->m_kAlphaControl.fTimeLeftToAppear = 1.0;
  LOBYTE(v12) = 9;
  v3 = (int)v1->m_apkAbstateBufIcon;
  v1->m_kAlphaControl.fAlphaValue = 0.0;
  v11 = 40;
  do
  {
    v4 = *(_DWORD *)(v3 - 160);
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)(v3 - 160) = 0;
    }
    v5 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      *(_DWORD *)v3 = 0;
    }
    v3 += 4;
    --v11;
  }
  while ( v11 );
  v6 = v1->m_spPopupMenu.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v1->m_spPopupMenu.m_pObject = 0;
  }
  v7 = v1->m_pkFrameBox.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v1->m_pkFrameBox.m_pObject = 0;
  }
  *(_WORD *)&v1->IsFrameDraging = 256;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 98EB1C: using guessed type int (__stdcall *StatusBuffWin___vftable_)(int uiFlags);
// 98EB3C: using guessed type int (__thiscall *StatusBuffWin___vftable_)(void *p, char);

//----- (004DC310) --------------------------------------------------------
StatusBuffWin *__cdecl StatusBuffWin::CreateWin(PgFrameWork *pkFrameWork, StatusBuffWin::EBUFF_TYPE type)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  StatusBuffWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x2FCu);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    StatusBuffWin::StatusBuffWin((StatusBuffWin *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *, StatusBuffWin::EBUFF_TYPE))(*(_DWORD *)v4 + 540))(
                          v4,
                          pkFrameWork,
                          type) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (StatusBuffWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}

//----- (004DC440) --------------------------------------------------------
unsigned int __cdecl ITableBase<ChargedMessageItem_ChargedMsgItemTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F48: using guessed type int ITableBase_ChargedMessageItem_ChargedMsgItemTab___ms_pkTable;

//----- (004DC460) --------------------------------------------------------
unsigned int __cdecl ITableBase<ChargedIconItem_ChargedIconItemTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F44: using guessed type int ITableBase_ChargedIconItem_ChargedIconItemTab___ms_pkTable;

//----- (004DC480) --------------------------------------------------------
ChargedMessageItem *__cdecl ChargedMsgItemTab::GetByItemName(const char *ItemName)
{
  ChargedMessageItem *result; // eax@2
  unsigned int v2; // edi@3
  unsigned int v3; // esi@3
  const char *v4; // eax@4

  if ( ItemName )
  {
    v2 = strlen(ItemName);
    v3 = 0;
    if ( ITableBase<ChargedMessageItem_ChargedMsgItemTab>::GetTotal() )
    {
      while ( 1 )
      {
        v4 = (char *)CDataReader::GetRecord(
                       (CDataReader *)(ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable + 4),
                       v3)
           + 2;
        if ( v4 )
        {
          if ( !strncmp(v4, ItemName, v2) )
            break;
        }
        ++v3;
        if ( v3 >= ITableBase<ChargedMessageItem_ChargedMsgItemTab>::GetTotal() )
          goto LABEL_7;
      }
      result = (ChargedMessageItem *)CDataReader::GetRecord(
                                       (CDataReader *)(ITableBase<ChargedMessageItem_ChargedMsgItemTab>::ms_pkTable + 4),
                                       v3);
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F48: using guessed type int ITableBase_ChargedMessageItem_ChargedMsgItemTab___ms_pkTable;

//----- (004DC500) --------------------------------------------------------
ChargedIconItem *__cdecl ChargedIconItemTab::GetByItemName(const char *ItemName)
{
  ChargedIconItem *result; // eax@2
  unsigned int v2; // edi@3
  unsigned int v3; // esi@3
  const char *v4; // eax@4

  if ( ItemName )
  {
    v2 = strlen(ItemName);
    v3 = 0;
    if ( ITableBase<ChargedIconItem_ChargedIconItemTab>::GetTotal() )
    {
      while ( 1 )
      {
        v4 = (char *)CDataReader::GetRecord(
                       (CDataReader *)(ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable + 4),
                       v3)
           + 2;
        if ( v4 )
        {
          if ( !strncmp(v4, ItemName, v2) )
            break;
        }
        ++v3;
        if ( v3 >= ITableBase<ChargedIconItem_ChargedIconItemTab>::GetTotal() )
          goto LABEL_7;
      }
      result = (ChargedIconItem *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<ChargedIconItem_ChargedIconItemTab>::ms_pkTable + 4),
                                    v3);
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F44: using guessed type int ITableBase_ChargedIconItem_ChargedIconItemTab___ms_pkTable;

//----- (004DC580) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Linsert(...)
{
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *v4; // edx@1
  int v5; // eax@1
  int v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v7; // edi@1
  void **v8; // ebx@1
  bool v9; // al@1
  int v10; // eax@4
  const char *v11; // edx@6
  unsigned int v12; // esi@8
  unsigned int v13; // edi@8
  unsigned int v14; // ecx@8
  int v15; // eax@12
  bool v16; // sf@12
  unsigned int v17; // edi@17
  unsigned int v18; // esi@19
  unsigned int v19; // edx@19
  const char *v20; // ecx@22
  int v21; // eax@24
  bool v22; // sf@24
  signed int v23; // eax@26
  int v24; // edx@31
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v25; // esi@35
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *v26; // ecx@37
  int v27; // ecx@38
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pai *v28; // eax@38
  const char *v29; // eax@41
  bool *v30; // [sp-10h] [bp-2Ch]@37
  bool v31; // [sp-Ch] [bp-28h]@37
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v32; // [sp-8h] [bp-24h]@37
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v33; // [sp-4h] [bp-20h]@37
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *_Wherenode; // [sp+Ch] [bp-10h]@4
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *v35; // [sp+10h] [bp-Ch]@1
  char _Addleft; // [sp+14h] [bp-8h]@1
  int _Trynode; // [sp+18h] [bp-4h]@1

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = *(_DWORD *)(v5 + 4);
  v7 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v5;
  v8 = (void **)&_Node->_Myval;
  v9 = 1;
  v35 = v4;
  _Trynode = v6;
  _Addleft = 1;
  if ( !*(_BYTE *)(v6 + 45) )
  {
    while ( 1 )
    {
      _Wherenode = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v6;
      v10 = v6 + 12;
      if ( _Leftish )
      {
        if ( _Node->_Myval.baseclass_0.first.baseclass_0._Myres < 0x10 )
          v11 = (const char *)&_Node->_Myval;
        else
          v11 = (const char *)*v8;
        v12 = *(_DWORD *)(v6 + 28);
        v13 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
        v14 = v12;
        if ( v12 >= v13 )
          v14 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
        if ( *(_DWORD *)(v10 + 20) >= 0x10u )
          v10 = *(_DWORD *)v10;
        v15 = std::char_traits<char>::compare((const char *)v10, v11, v14);
        v16 = v15 < 0;
        if ( !v15 )
        {
          if ( v12 < v13 )
          {
            v9 = 0;
            goto LABEL_30;
          }
          v16 = (v12 != v13) < 0;
        }
        v9 = !v16;
      }
      else
      {
        v17 = *(_DWORD *)(v6 + 28);
        if ( *(_DWORD *)(v6 + 32) >= 0x10u )
          v10 = *(_DWORD *)v10;
        v18 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
        v19 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
        if ( v18 >= v17 )
          v19 = *(_DWORD *)(v6 + 28);
        if ( _Node->_Myval.baseclass_0.first.baseclass_0._Myres < 0x10 )
          v20 = (const char *)&_Node->_Myval;
        else
          v20 = (const char *)*v8;
        v21 = std::char_traits<char>::compare(v20, (const char *)v10, v19);
        v22 = v21 < 0;
        if ( !v21 )
        {
          if ( v18 >= v17 )
            v23 = v18 != v17;
          else
            v23 = -1;
          v22 = v23 < 0;
        }
        v9 = v22;
      }
LABEL_30:
      _Addleft = v9;
      if ( v9 )
        v24 = *(_DWORD *)_Trynode;
      else
        v24 = *(_DWORD *)(_Trynode + 8);
      _Trynode = v24;
      if ( *(_BYTE *)(v24 + 45) )
      {
        v7 = _Wherenode;
        v4 = v35;
        break;
      }
      v6 = v24;
    }
  }
  v25 = v7;
  *(_DWORD *)&_Leftish = v7;
  if ( v9 )
  {
    if ( v7 == **((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: ***)&v4->baseclass_0
                + 1) )
    {
      v33 = _Node;
      v32 = v7;
      v31 = 1;
      v30 = &_Leftish;
      v26 = v4;
LABEL_38:
      v27 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
                          v26,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)v30,
                          v31,
                          v32,
                          v33)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v28 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v27;
      result->baseclass_0.second = 1;
      return v28;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *)&_Leftish);
    v25 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)_Leftish;
  }
  if ( _Node->_Myval.baseclass_0.first.baseclass_0._Myres < 0x10 )
    v29 = (const char *)&_Node->_Myval;
  else
    v29 = (const char *)*v8;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         &v25->_Myval.baseclass_0.first,
         0,
         v25->_Myval.baseclass_0.first.baseclass_0._Mysize,
         v29,
         _Node->_Myval.baseclass_0.first.baseclass_0._Mysize) < 0 )
  {
    v33 = _Node;
    v32 = v7;
    v31 = _Addleft;
    v26 = v35;
    v30 = &_Leftish;
    goto LABEL_38;
  }
  if ( _Node->_Myval.baseclass_0.first.baseclass_0._Myres >= 0x10 )
    operator delete(*v8);
  _Node->_Myval.baseclass_0.first.baseclass_0._Myres = 15;
  _Node->_Myval.baseclass_0.first.baseclass_0._Mysize = 0;
  *(_BYTE *)v8 = 0;
  operator delete(_Node);
  v28 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v25;
  result->baseclass_0.second = 0;
  return v28;
}

//----- (004DC740) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *__thiscall std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool>__>(std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *this, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *v2; // esi@1
  void *v3; // edi@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool> *v4; // ebx@3
  int v6; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v8; // [sp+Ch] [bp-1Ch]@2
  char *v9; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v11; // [sp+18h] [bp-10h]@1
  int v12; // [sp+24h] [bp-4h]@2

  v11 = &v6;
  v2 = this;
  v3 = operator new(0x30u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v3 + 22) = 0;
  v12 = 0;
  v9 = (char *)v3 + 12;
  v8 = (char *)v3 + 12;
  LOBYTE(v12) = 1;
  if ( v3 != (void *)-12 )
  {
    v4 = _Val;
    *((_DWORD *)v3 + 8) = 15;
    *((_DWORD *)v3 + 7) = 0;
    *((_BYTE *)v3 + 12) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 12),
      &v4->baseclass_0.first,
      0,
      0xFFFFFFFFu);
    *((_BYTE *)v3 + 40) = v4->baseclass_0.second;
  }
  return (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<cha *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004DC820) --------------------------------------------------------
void *__thiscall StatusBuffWin::_vector_deleting_destructor_(StatusBuffWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  StatusBuffWin::_StatusBuffWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004DC850) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdOk(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2 = v1->m_pkRevWin;
  if ( v2 )
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, 5u, v1->m_uiOkMsg, v1->m_uiResultValue);
}

//----- (004DC890) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdCancel(CalculatorWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (004DC8A0) --------------------------------------------------------
void __thiscall CalculatorWin::GetValueFromEdit(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1

  v1 = this;
  v2 = this->m_spEdit.m_pObject;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 )
  {
    if ( *v3 )
      v1->m_uiResultValue = atoi(v3);
  }
}

//----- (004DC8E0) --------------------------------------------------------
void __thiscall CalculatorWin::SetValueToEdit(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  char acStr[32]; // [sp+4h] [bp-24h]@1
  unsigned int v3; // [sp+24h] [bp-4h]@1
  int v4; // [sp+28h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  sprintf(acStr, "%u");
  ((void (__stdcall *)(_DWORD))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (004DC930) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdNum(CalculatorWin *this, unsigned int uiVal)
{
  CalculatorWin *v2; // esi@1
  EditWin *v3; // ecx@1
  const char *v4; // eax@1
  unsigned int v5; // eax@4
  unsigned int v6; // ecx@4
  char string; // [sp+4h] [bp-24h]@6
  unsigned int v8; // [sp+24h] [bp-4h]@1
  int v9; // [sp+28h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spEdit.m_pObject;
  v2->m_uiResultValue = 0;
  v4 = (const char *)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v4 && *v4 )
    v2->m_uiResultValue = atoi(v4);
  v5 = uiVal + 10 * v2->m_uiResultValue;
  v6 = v2->m_uiMax;
  v2->m_uiResultValue = v5;
  if ( v5 > v6 )
    v2->m_uiResultValue = v6;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (004DC9E0) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdNum00(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1
  unsigned int v4; // ecx@4
  int v5; // eax@4
  char string; // [sp+4h] [bp-24h]@6
  unsigned int v7; // [sp+24h] [bp-4h]@1
  int v8; // [sp+28h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_spEdit.m_pObject;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 && *v3 )
    v1->m_uiResultValue = atoi(v3);
  v4 = v1->m_uiMax;
  v5 = 100 * v1->m_uiResultValue;
  v1->m_uiResultValue = v5;
  if ( v5 > v4 )
    v1->m_uiResultValue = v4;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (004DCA80) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdMax(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  char string; // [sp+4h] [bp-24h]@1
  unsigned int v3; // [sp+24h] [bp-4h]@1
  int v4; // [sp+28h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  this->m_uiResultValue = this->m_uiMax;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (004DCAE0) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdClear(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  char string; // [sp+4h] [bp-24h]@1
  unsigned int v3; // [sp+24h] [bp-4h]@1
  int v4; // [sp+28h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  this->m_uiResultValue = 0;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (004DCB40) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdPlus(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1
  unsigned int v4; // eax@4
  char string; // [sp+4h] [bp-24h]@6
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v2 = this->m_spEdit.m_pObject;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 && *v3 )
    v1->m_uiResultValue = atoi(v3);
  v4 = v1->m_uiMax;
  ++v1->m_uiResultValue;
  if ( v1->m_uiResultValue > v4 )
    v1->m_uiResultValue = v4;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (004DCBE0) --------------------------------------------------------
void __thiscall CalculatorWin::OnCmdMinus(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1
  unsigned int v4; // eax@4
  char string; // [sp+4h] [bp-24h]@6
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v2 = this->m_spEdit.m_pObject;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 && *v3 )
    v1->m_uiResultValue = atoi(v3);
  v4 = v1->m_uiResultValue;
  if ( v4 )
    v1->m_uiResultValue = v4 - 1;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (004DCC80) --------------------------------------------------------
void __thiscall CalculatorWin::Open(CalculatorWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiMax, char *pcText)
{
  CalculatorWin *v5; // esi@1
  PgWinText *v6; // ecx@1

  v5 = this;
  this->m_uiOkMsg = uiOkMsg;
  v6 = this->m_apkMsgText[0];
  v5->m_uiMax = uiMax;
  v5->m_pkRevWin = pkRevWin;
  ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98ED86);
  ((void (__stdcall *)(_DWORD))v5->m_apkMsgText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98ED87);
  PgWinText::SetArrayText(v5->m_apkMsgText, 2u, pcText);
  ((void (__stdcall *)(_DWORD))v5->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_98ED9E);
  PgWinMgr::DoModal(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
}

//----- (004DCD10) --------------------------------------------------------
void __thiscall CalculatorWin::CalculatorWin(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CalculatorWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CalculatorWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
}
// 98EE70: using guessed type int (__stdcall *CalculatorWin___vftable_)(int uiFlags);
// 98EE8C: using guessed type int (__thiscall *CalculatorWin___vftable_)(void *p, char);

//----- (004DCD40) --------------------------------------------------------
void __thiscall CalculatorWin::_CalculatorWin(CalculatorWin *this)
{
  CalculatorWin *v1; // esi@1
  EditWin *v2; // edi@1
  EditWin *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CalculatorWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CalculatorWin::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spEdit.m_pObject = 0;
  }
  v3 = v1->m_spEdit.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 98EE70: using guessed type int (__stdcall *CalculatorWin___vftable_)(int uiFlags);
// 98EE8C: using guessed type int (__thiscall *CalculatorWin___vftable_)(void *p, char);

//----- (004DCE00) --------------------------------------------------------
bool __thiscall CalculatorWin::Create(CalculatorWin *this, PgFrameWork *pkFrameWork)
{
  CalculatorWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  PgSprData *v8; // eax@11
  PgSprData *v9; // eax@11
  PgSprData *v10; // edi@11
  PgWin *v11; // edi@11
  PgFont *v12; // ST64_4@11
  unsigned int v13; // ST60_4@11
  unsigned int v14; // eax@11
  PgWinText *v15; // edi@11
  char *v16; // eax@11
  PgSprData *v17; // edi@11
  PgWin *v18; // edi@11
  PgFont *v19; // ST68_4@11
  unsigned int v20; // ST64_4@11
  unsigned int v21; // eax@11
  PgWinText *v22; // edi@11
  char *v23; // eax@11
  int v24; // edi@11
  PgSprData *v25; // eax@13
  PgWin *v26; // ST6C_4@13
  PgFont *v27; // ST68_4@13
  unsigned int v28; // ST64_4@13
  unsigned int v29; // eax@13
  PgWinText *v30; // edi@13
  PgSprData *v31; // eax@14
  PgWin *v32; // ST6C_4@14
  PgFont *v33; // ST68_4@14
  unsigned int v34; // ST64_4@14
  unsigned int v35; // eax@14
  PgWinText *v36; // edi@14
  PgSprData *v37; // eax@14
  PgWin *v38; // ST68_4@14
  PgFont *v39; // ST64_4@14
  unsigned int v40; // ST60_4@14
  unsigned int v41; // eax@14
  PgWinText *v42; // edi@14
  PgSprData *v43; // eax@14
  PgWin *v44; // ST68_4@14
  PgFont *v45; // ST64_4@14
  unsigned int v46; // ST60_4@14
  unsigned int v47; // eax@14
  PgWinText *v48; // edi@14
  PgFont *v49; // edi@15
  PgWinText *v50; // eax@15
  PgWinText *v51; // eax@15
  EditWin *v52; // eax@16
  PgSprData *v53; // edi@16
  PgSprData *v54; // edi@16
  NiNode *v55; // esi@17
  unsigned int v56; // [sp+74h] [bp-5Ch]@1
  unsigned int uiHeight; // [sp+84h] [bp-4Ch]@14
  unsigned int uiWidth; // [sp+88h] [bp-48h]@14
  int i; // [sp+8Ch] [bp-44h]@7
  int uiLeft; // [sp+90h] [bp-40h]@10
  int uiTop; // [sp+94h] [bp-3Ch]@10
  NiPointer<NiNode> spNode; // [sp+98h] [bp-38h]@1
  char acShapeName[33]; // [sp+9Ch] [bp-34h]@13
  unsigned int v64; // [sp+C0h] [bp-10h]@1
  int v65; // [sp+CCh] [bp-4h]@1
  int v66; // [sp+D0h] [bp+0h]@1

  v64 = (unsigned int)&v66 ^ __security_cookie;
  v56 = (unsigned int)&v66 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v65 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
    goto LABEL_23;
  i = (int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\Calculator.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, (NiTexturePalette *)i);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "CalculatorWin", 0) )
    goto LABEL_23;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "OkClick");
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "OkOver");
  v11 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v12 = Font::Get(0);
  v13 = ((int (__thiscall *)(PgWin *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v11);
  v14 = ((int (__thiscall *)(PgWin *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v11);
  v15 = PgWinText::CreateWin(0, 1, v14, v13, v12, v11, 0, 0);
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v15,
    5,
    v56);
  i = (int)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v16 = TextData::Get(0x4F5F499Fu);
  (*(void (__thiscall **)(PgWinText *, char *))i)(v15, v16);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "CancelClick");
  PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "CancelOver");
  v18 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v19 = Font::Get(0);
  v20 = ((int (__thiscall *)(PgWin *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v18);
  v21 = ((int (__thiscall *)(PgWin *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v18);
  v22 = PgWinText::CreateWin(0, 1, v21, v20, v19, v18, 0, 0);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v22,
    5u);
  i = (int)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v23 = TextData::Get(0x88A297E1u);
  (*(void (__thiscall **)(PgWinText *, char *))i)(v22, v23);
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  v24 = 0;
  for ( i = 0; ; v24 = i )
  {
    sprintf(acShapeName, "CalNum%02d");
    v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, v3);
    v26 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, v24 + 2, 0, 0);
    v27 = Font::Get(SMALL);
    v28 = ((int (__thiscall *)(PgWin *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v26);
    v29 = ((int (__thiscall *)(PgWin *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v26);
    v30 = PgWinText::CreateWin(0, 1, v29, v28, v27, v26, 0, 0);
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v30,
      5u);
    sprintf(acShapeName, "%d");
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v30,
      (unsigned int)acShapeName);
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v30,
      0);
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v30,
      (unsigned int)&Color::m_kDxBlackColor);
    ++i;
    if ( i >= 10 )
      break;
  }
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CalNum000", &uiLeft, &uiTop, v3);
  v32 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v31, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
  v33 = Font::Get(0);
  v34 = ((int (__thiscall *)(PgWin *))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v32);
  v35 = ((int (__thiscall *)(PgWin *))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v32);
  v36 = PgWinText::CreateWin(0, 1, v35, v34, v33, v32, 0, 0);
  ((void (__thiscall *)(PgWinText *))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v36);
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v36,
    (unsigned int)"00");
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v36,
    0);
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v36,
    (unsigned int)&Color::m_kDxBlackColor);
  v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CalMax", &uiLeft, &uiTop, v3);
  v38 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
  v39 = Font::Get(0);
  v40 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v38);
  v41 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v38);
  v42 = PgWinText::CreateWin(0, 1, v41, v40, v39, v38, 0, 0);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v42,
    5u);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v42,
    (unsigned int)"M");
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v42,
    0);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v42,
    (unsigned int)&Color::m_kDxBlackColor);
  v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CalClear", &uiLeft, &uiTop, v3);
  v44 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v43, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
  v45 = Font::Get(0);
  v46 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v44);
  v47 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v44);
  v48 = PgWinText::CreateWin(0, 1, v47, v46, v45, v44, 0, 0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v48,
    5u);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v48,
    (unsigned int)"C");
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v48,
    0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v48,
    (unsigned int)&Color::m_kDxBlackColor);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CalTex", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v49 = Font::Get(0),
        uiHeight = v49->m_uiDefHeight + 2,
        v50 = PgWinText::CreateWin(
                uiLeft,
                uiTop + 2,
                uiWidth,
                uiHeight,
                v49,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_apkMsgText[0] = v50,
        v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v50,
          (unsigned int)&unk_98ED76),
        ((void (__stdcall *)(_DWORD))v2->m_apkMsgText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        ((void (__stdcall *)(signed int))v2->m_apkMsgText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1),
        v51 = PgWinText::CreateWin(
                uiLeft,
                uiHeight + uiTop + 2,
                uiWidth,
                uiHeight,
                v49,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_apkMsgText[1] = v51,
        v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v51,
          (unsigned int)&unk_98ED77),
        ((void (__stdcall *)(_DWORD))v2->m_apkMsgText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CalNumInput", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_23:
    v4 = spNode.m_pObject;
    v65 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v52 = EditWin::CreateWin(
          uiLeft + 4,
          uiTop + 1,
          uiWidth - 8,
          uiHeight - 1,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          NUMBER,
          0xAu,
          1u,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v52);
  v53 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PlusNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v53, &spNode.m_pObject->baseclass_0, "PlusClick");
  PgSprData::Add(v53, &spNode.m_pObject->baseclass_0, "PlusOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v53, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MinusNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v54, &spNode.m_pObject->baseclass_0, "MinusClick");
  PgSprData::Add(v54, &spNode.m_pObject->baseclass_0, "MinusOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
  ((void (__thiscall *)(CalculatorWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v65 = -1;
  if ( spNode.m_pObject )
  {
    v55 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v55 )
        v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004DD620) --------------------------------------------------------
void __thiscall CalculatorWin::OnCommand(CalculatorWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      CalculatorWin::OnCmdOk(this);
      break;
    case 1u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 2u:
      CalculatorWin::OnCmdNum(this, 0);
      break;
    case 3u:
      CalculatorWin::OnCmdNum(this, 1u);
      break;
    case 4u:
      CalculatorWin::OnCmdNum(this, 2u);
      break;
    case 5u:
      CalculatorWin::OnCmdNum(this, 3u);
      break;
    case 6u:
      CalculatorWin::OnCmdNum(this, 4u);
      break;
    case 7u:
      CalculatorWin::OnCmdNum(this, 5u);
      break;
    case 8u:
      CalculatorWin::OnCmdNum(this, 6u);
      break;
    case 9u:
      CalculatorWin::OnCmdNum(this, 7u);
      break;
    case 0xAu:
      CalculatorWin::OnCmdNum(this, 8u);
      break;
    case 0xBu:
      CalculatorWin::OnCmdNum(this, 9u);
      break;
    case 0xCu:
      CalculatorWin::OnCmdNum00(this);
      break;
    case 0xDu:
      CalculatorWin::OnCmdMax(this);
      break;
    case 0xEu:
      CalculatorWin::OnCmdClear(this);
      break;
    case 0xFu:
      CalculatorWin::OnCmdPlus(this);
      break;
    case 0x10u:
      CalculatorWin::OnCmdMinus(this);
      break;
    default:
      return;
  }
}

//----- (004DD730) --------------------------------------------------------
CalculatorWin *__cdecl CalculatorWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CalculatorWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x178u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CalculatorWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CalculatorWin::_vftable_;
    *((_DWORD *)v2 + 93) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CalculatorWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 98EE70: using guessed type int (__stdcall *CalculatorWin___vftable_)(int uiFlags);
// 98EE8C: using guessed type int (__thiscall *CalculatorWin___vftable_)(void *p, char);

//----- (004DD870) --------------------------------------------------------
void *__thiscall CalculatorWin::_vector_deleting_destructor_(CalculatorWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CalculatorWin::_CalculatorWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004DD8A0) --------------------------------------------------------
void __thiscall CastingProgressWin::CastingProgressWin(CastingProgressWin *this)
{
  CastingProgressWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CastingProgressWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CastingProgressWin::_vftable_;
  v1->m_fTimeWhenCasted = 3.4028235e38;
  v1->m_pkCastingProgress = 0;
  *(_WORD *)&v1->m_bCloseWhenFinished = 0;
  v1->m_fCastingTime = 0.0;
}
// 98F120: using guessed type int (__stdcall *CastingProgressWin___vftable_)(int uiFlags);
// 98F13C: using guessed type int (__thiscall *CastingProgressWin___vftable_)(void *p, char);

//----- (004DD8E0) --------------------------------------------------------
void __thiscall CastingProgressWin::_CastingProgressWin(CastingProgressWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CastingProgressWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CastingProgressWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 98F120: using guessed type int (__stdcall *CastingProgressWin___vftable_)(int uiFlags);
// 98F13C: using guessed type int (__thiscall *CastingProgressWin___vftable_)(void *p, char);

//----- (004DD900) --------------------------------------------------------
void __thiscall CastingProgressWin::Stop(CastingProgressWin *this)
{
  this->m_fCastingTime = 0.0;
  this->m_fAlphaBlendValue = 1.0;
}

//----- (004DD920) --------------------------------------------------------
void __thiscall CastingProgressWin::CastingFail(CastingProgressWin *this)
{
  this->m_fCastingTime = 0.0;
  this->m_fAlphaBlendValue = 1.0;
}

//----- (004DD940) --------------------------------------------------------
bool __thiscall CastingProgressWin::IsDoingCast(CastingProgressWin *this)
{
  return this->m_fCastingTime > 0.0;
}

//----- (004DD960) --------------------------------------------------------
bool __thiscall CastingProgressWin::Create(CastingProgressWin *this, PgFrameWork *pkFrameWork, bool bProductCasting)
{
  CastingProgressWin *v3; // esi@1
  char *v4; // ebx@1
  NiTexturePalette *v5; // edi@3
  char *v6; // eax@5
  PgSprData *v7; // eax@6
  NiNode *v8; // esi@7
  int v10; // edi@12
  int v11; // ebx@12
  PgSprData *v12; // eax@12
  PgSprData *v13; // eax@12
  PgWinBar *v14; // eax@12
  PgSprData *v15; // eax@12
  PgWinBar *v16; // eax@12
  PgSprData *v17; // eax@12
  PgWinBar *v18; // eax@12
  NiNode *v19; // esi@13
  NiPointer<NiNode> spNode; // [sp+2Ch] [bp-14h]@1
  int uiLeft; // [sp+30h] [bp-10h]@6
  int v22; // [sp+3Ch] [bp-4h]@1

  v3 = this;
  spNode.m_pObject = 0;
  v22 = 0;
  v4 = "Game\\ProductBar.nif";
  if ( !bProductCasting )
    v4 = "Game\\CastingBar.nif";
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, v4);
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, (int *)&bProductCasting, 0);
  if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v7, 0, pkFrameWork, "CastingProgressWin", 0) )
  {
    v8 = spNode.m_pObject;
    v22 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  v10 = uiLeft;
  v11 = bProductCasting;
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, (int *)&bProductCasting, 0);
  PgWinSpr::CreateWin(uiLeft - v10, bProductCasting - v11, v12, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, (int *)&bProductCasting, 0);
  v14 = PgWinBar::CreateWin(
          uiLeft - v10,
          bProductCasting - v11,
          v13,
          &v3->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v3->m_pkCastingProgress = v14;
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v14,
    0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_Start", &uiLeft, (int *)&bProductCasting, 0);
  v16 = PgWinBar::CreateWin(
          uiLeft - v10,
          bProductCasting - v11,
          v15,
          &v3->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v3->m_pkCastingBarStart = (PgWinSpr *)v16;
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_End", &uiLeft, (int *)&bProductCasting, 0);
  v18 = PgWinBar::CreateWin(
          uiLeft - v10,
          bProductCasting - v11,
          v17,
          &v3->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v3->m_pkCastingBarEnd = (PgWinSpr *)v18;
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v18,
    0);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v3,
    0);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v3,
    0);
  PgWin::EnableOpenCloseSound(&v3->baseclass_0.baseclass_0.baseclass_0, 0);
  ((void (__thiscall *)(CastingProgressWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.80000001);
  v22 = -1;
  if ( spNode.m_pObject )
  {
    v19 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v19 )
        v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004DDBF0) --------------------------------------------------------
void __thiscall CastingProgressWin::StartCasting(CastingProgressWin *this, unsigned int uiCastingTime, bool bCloseWhenFinished)
{
  CastingProgressWin *v3; // esi@1
  PgWinBar *v4; // ecx@1
  double v5; // st7@3

  v3 = this;
  this->m_fTimeWhenCasted = Timer::ms_fCurTime;
  v4 = this->m_pkCastingProgress;
  v3->m_fCastingTime = (double)uiCastingTime / 1000.0;
  v3->m_fAlphaBlendValue = 1.0;
  if ( 1.0 != v4->m_fMaxValue || 0.0 != v4->m_fCurValue )
  {
    v5 = 0.0;
    v4->m_fMaxValue = 1.0;
    v4->m_fCurValue = v5;
    PgWinBar::OnChangeValue(v4);
  }
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v3,
    1u);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v3,
    COERCE_UNSIGNED_INT(1.0));
  ((void (__stdcall *)(_DWORD))v3->m_pkCastingBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v3->m_pkCastingBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3->m_bCloseWhenFinished = bCloseWhenFinished;
  v3->m_bFadeStart = 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004DDCD0) --------------------------------------------------------
void __thiscall CastingProgressWin::CastingSuccess(CastingProgressWin *this)
{
  CastingProgressWin *v1; // esi@1
  PgWinSpr *v2; // ecx@1
  PgWinBar *v3; // ecx@1

  v1 = this;
  this->m_fCastingTime = 0.0;
  v2 = this->m_pkCastingBarStart;
  v1->m_fAlphaBlendValue = 1.0;
  ((void (__cdecl *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__cdecl *)(_DWORD))v1->m_pkCastingBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v3 = v1->m_pkCastingProgress;
  if ( 1.0 != v3->m_fMaxValue || 1.0 != v3->m_fCurValue )
  {
    v3->m_fMaxValue = 1.0;
    v3->m_fCurValue = 1.0;
    PgWinBar::OnChangeValue(v3);
  }
}

//----- (004DDD50) --------------------------------------------------------
void __thiscall CastingProgressWin::UpdateMeWin(CastingProgressWin *this, float fCurTime)
{
  double v2; // st7@1
  double v3; // st6@1
  CastingProgressWin *v4; // esi@1
  double v5; // qt0@6
  double v6; // st6@6
  double v7; // st7@6
  float v8; // ST04_4@14
  float v9; // ST00_4@14
  float fSin; // [sp+14h] [bp+8h]@7
  float fSina; // [sp+14h] [bp+8h]@16
  float fSinb; // [sp+14h] [bp+8h]@20

  v2 = 0.0;
  v3 = 1.0;
  v4 = this;
  if ( !this->m_bFadeStart )
  {
    if ( Char::CheckActState(g_pkMainChar, 500000) || g_pkMainChar->m_bWillDead )
    {
      v2 = 0.0;
      v4->m_bFadeStart = 1;
      v4->m_fCastingTime = 0.0;
      v3 = 1.0;
      v4->m_fAlphaBlendValue = 1.0;
    }
    else
    {
      v2 = 0.0;
      v3 = 1.0;
    }
  }
  v5 = v3;
  v6 = v2;
  v7 = v5;
  if ( v6 >= v4->m_fCastingTime )
  {
    if ( v6 >= v4->m_fAlphaBlendValue )
    {
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v4,
        0);
    }
    else
    {
      fSina = v4->m_fAlphaBlendValue - (Timer::ms_fDeltaTime + Timer::ms_fDeltaTime);
      v4->m_fAlphaBlendValue = fSina;
      if ( fSina <= v6 )
        v4->m_fAlphaBlendValue = v6;
      if ( v6 < v4->m_fAlphaBlendValue )
        JUMPOUT(*(int *)loc_4DDEFB);
      fSinb = v6;
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
        (NiRefObject *)v4,
        LODWORD(fSinb));
    }
  }
  else
  {
    fSin = (fCurTime - v4->m_fTimeWhenCasted) / v4->m_fCastingTime;
    if ( fSin > v7 )
    {
      if ( v4->m_bCloseWhenFinished )
      {
        v4->m_fCastingTime = v6;
        v4->m_fAlphaBlendValue = v7;
      }
      else
      {
        v8 = v7;
        v9 = v7;
        PgWinBar::SetValue(v4->m_pkCastingProgress, v9, v8);
        ((void (__stdcall *)(signed int))v4->m_pkCastingBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(signed int))v4->m_pkCastingBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
    }
    else
    {
      PgWinBar::SetValue(v4->m_pkCastingProgress, 0.94999999, fSin);
      if ( fSin >= 0.0 )
        ((void (__stdcall *)(signed int))v4->m_pkCastingBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      if ( fSin >= 0.949999988079071 )
        ((void (__stdcall *)(signed int))v4->m_pkCastingBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
  }
}
// 4DDEFB: using guessed type int __stdcall(float fSin);
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (004DDF40) --------------------------------------------------------
CastingProgressWin *__cdecl CastingProgressWin::CreateWin(PgFrameWork *pkFrameWork, bool bProductCasting)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@8
  CastingProgressWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x174u);
  v3 = v2;
  result.m_pObject = (PgWin *)v2;
  v7 = 0;
  if ( v2 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v2);
    *(_DWORD *)v3 = &CastingProgressWin::_vftable_;
    *((_DWORD *)v3 + 58) = &CastingProgressWin::_vftable_;
    *((float *)v3 + 86) = 3.4028235e38;
    *((_DWORD *)v3 + 89) = 0;
    *((_WORD *)v3 + 184) = 0;
    *((float *)v3 + 87) = 0.0;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *, _DWORD))(*(_DWORD *)v3 + 540))(
                          v3,
                          pkFrameWork,
                          bProductCasting) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = (CastingProgressWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}
// 98F120: using guessed type int (__stdcall *CastingProgressWin___vftable_)(int uiFlags);
// 98F13C: using guessed type int (__thiscall *CastingProgressWin___vftable_)(void *p, char);

//----- (004DE0A0) --------------------------------------------------------
void *__thiscall CastingProgressWin::_scalar_deleting_destructor_(CastingProgressWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CastingProgressWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CastingProgressWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98F120: using guessed type int (__stdcall *CastingProgressWin___vftable_)(int uiFlags);
// 98F13C: using guessed type int (__thiscall *CastingProgressWin___vftable_)(void *p, char);

//----- (004DE0E0) --------------------------------------------------------
void __thiscall PgWinBar::SetValue(PgWinBar *this, float fMaxVal, float fCurVal)
{
  double v3; // st7@3

  if ( fMaxVal != this->m_fMaxValue || fCurVal != this->m_fCurValue )
  {
    v3 = fCurVal;
    this->m_fMaxValue = fMaxVal;
    this->m_fCurValue = v3;
    PgWinBar::OnChangeValue(this);
  }
}

//----- (004DE130) --------------------------------------------------------
void __cdecl GetShineDateStr(ShineDateTime kDate, char *pcStr, int iMaxStr, bool bDisplayHour)
{
  if ( iMaxStr >= 17 )
  {
    if ( (unsigned __int8)kDate._bf0 == 255 )
      sprintf(pcStr, &byte_98F381);
    else
      sprintf(pcStr, "%04d-%02d-%02d %02d:%02d");
  }
}

//----- (004DE1A0) --------------------------------------------------------
void __thiscall ChargedItemListWin::ChargedItemInfo::ChargedItemInfo(ChargedItemListWin::ChargedItemInfo *this)
{
  this->pkIcon = 0;
  this->pkItemDescription = 0;
  this->pkItemAvailableTerm = 0;
}

//----- (004DE1B0) --------------------------------------------------------
void __thiscall ChargedItemListWin::ChargedItemInfo::Reset(ChargedItemListWin::ChargedItemInfo *this)
{
  ChargedItemListWin::ChargedItemInfo *v1; // esi@1

  v1 = this;
  ItemIcon::SetItemAsID(this->pkIcon, 0xFFFFu);
  ((void (__stdcall *)(_DWORD))v1->pkItemDescription->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98F391);
  ((void (__stdcall *)(_DWORD))v1->pkItemAvailableTerm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98F392);
}

//----- (004DE1F0) --------------------------------------------------------
Item *__thiscall ChargedItemListWin::GetTimeLimitItem(ChargedItemListWin *this, unsigned int uiIndex)
{
  unsigned int v2; // eax@1
  Item *result; // eax@2

  v2 = ChargedItemList::GetTimeLimitCharItemCount();
  if ( uiIndex >= v2 )
    result = ChargedItemList::GetTimeLimitMiniHouseItem(uiIndex - v2);
  else
    result = ChargedItemList::GetTimeLimitCharItem(uiIndex);
  return result;
}

//----- (004DE220) --------------------------------------------------------
void __thiscall ChargedItemListWin::OnHelpLink(ChargedItemListWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ComItemWin");
}

//----- (004DE250) --------------------------------------------------------
void __thiscall ChargedItemListWin::ChargedItemInfo::SetItem(ChargedItemListWin::ChargedItemInfo *this, Item *pkItem)
{
  int v2; // ebx@0
  ChargedItemListWin::ChargedItemInfo *v3; // esi@1
  ItemIcon *v4; // ecx@1
  unsigned __int16 *v5; // ebx@3
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@4
  ShineDateTime *v7; // eax@4
  NiRefObjectVtbl *v8; // edi@6
  PgWinText *v9; // ecx@6
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // edx@6
  int v11; // [sp-4h] [bp-24h]@3
  char acDeleteDate[20]; // [sp+8h] [bp-18h]@4
  unsigned int v13; // [sp+1Ch] [bp-4h]@1
  int v14; // [sp+20h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  v4 = this->pkIcon;
  if ( pkItem )
  {
    v11 = v2;
    v5 = (unsigned __int16 *)pkItem->m_pkViewInfo;
    if ( v5 )
    {
      ItemIcon::SetItemAsID(v4, *v5);
      ((void (__stdcall *)(unsigned __int16 *, int))v3->pkItemDescription->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
        v5 + 190,
        v11);
      v6 = pkItem->baseclass_0.vfptr[11].__vecDelDtor;
      acDeleteDate[0] = 0;
      v7 = (ShineDateTime *)((int (__thiscall *)(Item *))v6)(pkItem);
      if ( v7 )
        GetShineDateStr((ShineDateTime)v7->_bf0, acDeleteDate, 18, 0);
      v8 = v3->pkItemAvailableTerm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      fs("~ %s");
      v9 = v3->pkItemAvailableTerm;
      v10 = v8[118].__vecDelDtor;
    }
    else
    {
      ItemIcon::SetItemAsID(v4, 0xFFFFu);
      ((void (__stdcall *)(_UNKNOWN *, int))v3->pkItemDescription->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
        &unk_98F391,
        v11);
      v9 = v3->pkItemAvailableTerm;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    }
    ((void (__thiscall *)(PgWinText *))v10)(v9);
  }
  else
  {
    ItemIcon::SetItem(v4, 0, 1);
    ((void (__stdcall *)(_UNKNOWN *))v3->pkItemDescription->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98F38A);
    v3->pkItemAvailableTerm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v3->pkItemAvailableTerm,
      (unsigned int)&unk_98F38B);
  }
}
// 4DE250: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (004DE360) --------------------------------------------------------
bool __cdecl IsActiveChargedTimeLimitItem(Item *pkItem)
{
  bool result; // al@2

  if ( pkItem
    && pkItem->m_pkInfo->ItemGradeType == 4
    && ((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[11].__vecDelDtor)(pkItem)
    && *(_BYTE *)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[11].__vecDelDtor)(pkItem) )
    result = *(_BYTE *)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[11].__vecDelDtor)(pkItem) != -1;
  else
    result = 0;
  return result;
}

//----- (004DE3B0) --------------------------------------------------------
unsigned int __thiscall ChargedItemListWin::GetMaxPageNum(ChargedItemListWin *this)
{
  unsigned int v1; // eax@1
  unsigned int result; // eax@2

  v1 = ((signed int)((char *)this->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast
                   - *(_DWORD *)&this->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
     + ChargedItemList::GetTimeLimitItemCount();
  if ( v1 )
    result = ((v1 - 1) >> 2) + 1;
  else
    result = 1;
  return result;
}

//----- (004DE3E0) --------------------------------------------------------
bool __thiscall ChargedItemListWin::Create(ChargedItemListWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // edi@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // esi@10
  D3DXCOLOR v9; // ST10_16@12
  char *v10; // eax@12
  NiSourceTexture *v11; // eax@12
  PgSprData *v12; // eax@15
  signed int v13; // esi@15
  int v14; // edi@15
  signed int v15; // ebx@15
  char *v16; // eax@16
  PgWin *v17; // eax@16
  ItemIcon *v18; // eax@16
  D3DXCOLOR v19; // ST10_16@16
  char *v20; // eax@16
  PgWinText *v21; // eax@16
  D3DXCOLOR v22; // ST10_16@16
  char *v23; // eax@16
  NiSourceTexture *v24; // esi@17
  PgWinBut *v25; // edi@17
  char *v26; // eax@17
  PgWinBut *v27; // esi@17
  char *v28; // eax@17
  D3DXCOLOR v29; // ST18_16@17
  PgWinText *v30; // eax@17
  ChargedItemListWin *v31; // ecx@17
  NiNode *v32; // esi@18
  const char *v33; // [sp-4h] [bp-58h]@13
  int *v34; // [sp+0h] [bp-54h]@13
  int *v35; // [sp+4h] [bp-50h]@13
  NiSourceTexture *v36; // [sp+8h] [bp-4Ch]@13
  UIUtil ui; // [sp+1Ch] [bp-38h]@10
  ChargedItemListWin *v38; // [sp+30h] [bp-24h]@1
  int iXOff; // [sp+34h] [bp-20h]@4
  int iLeft; // [sp+38h] [bp-1Ch]@13
  int iYOff; // [sp+3Ch] [bp-18h]@4
  int iTop; // [sp+40h] [bp-14h]@13
  NiPointer<NiNode> spNode; // [sp+44h] [bp-10h]@1
  int v44; // [sp+50h] [bp-4h]@1

  v2 = (PgWinFrame *)this;
  v38 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v44 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ComItemWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v5, 0, pkFrameWork, "ChargedItemWin", 0) )
  {
    v6 = spNode.m_pObject;
    v44 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v44) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateBtn(&ui, 0xAu, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  v8 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    UIUtil::CreateBtn(&ui, 0xDu, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v8);
  *(_QWORD *)&v9.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v9.b = qword_A746E8;
  v10 = TextData::Get(0x3D88677Bu);
  UIUtil::CreateTextNoSprEx(&ui, "WinTitle", v10, COERCE_D3DXCOLOR(v9.r), 5u, 0, 3u);
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v36 = v11;
    v35 = &iTop;
    v34 = &iLeft;
    v33 = "Theme";
  }
  else
  {
    v36 = 0;
    v35 = &iTop;
    v34 = &iLeft;
    v33 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v33, v34, v35, v36);
  PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v12, &v2->baseclass_0.baseclass_0, 0, 0);
  v13 = 1;
  v14 = (int)&v2[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiExtraDataSize;
  v15 = 4;
  do
  {
    v16 = fs("Slot%02d");
    v17 = (PgWin *)UIUtil::CreateSpr(&ui, v16, 0);
    v18 = ItemIcon::CreateWin(3, 3, v17);
    *(_DWORD *)(v14 - 4) = v18;
    ItemIcon::SetItem(v18, 0, 1);
    *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v20 = fs("ItemTxt%02d");
    v21 = UIUtil::CreateText(&ui, v20, &byte_98F393, 0, COERCE_D3DXCOLOR(v19.r), 4u, 0, 0);
    *(_DWORD *)v14 = v21;
    v21->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
    *(_QWORD *)&v22.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v22.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v23 = fs("ItemUseTerm%02d");
    *(_DWORD *)(v14 + 4) = UIUtil::CreateText(&ui, v23, &byte_98F3BF, 0, COERCE_D3DXCOLOR(v22.r), 5u, 0, 0);
    ++v13;
    v14 += 12;
    --v15;
  }
  while ( v15 );
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  v24 = MenuTexMgr::GetTexture(0x1Cu);
  v25 = UIUtil::CreateBtn(&ui, 0xBu, "PrePageNor", "PrePageClick", "PrePageOver", 0, v24);
  v25->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v26 = TextData3::Get(0x6A8A9870u);
  PgWin::SetToolTipWinText(&v25->baseclass_0.baseclass_0, v26);
  v27 = UIUtil::CreateBtn(&ui, 0xCu, "NextPageNor", "NextPageClick", "NextPageOver", 0, v24);
  v27->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v28 = TextData3::Get(0x25449D82u);
  PgWin::SetToolTipWinText(&v27->baseclass_0.baseclass_0, v28);
  UIUtil::CreateSpr(&ui, "Number", 0);
  *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v30 = UIUtil::CreateTextNoSpr(&ui, "Number01", byte_98F3D1, COERCE_D3DXCOLOR(v29.r), 5u);
  v31 = v38;
  v38->m_pkPageText = v30;
  ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  LOBYTE(v44) = 0;
  UIUtil::_UIUtil(&ui);
  v44 = -1;
  if ( spNode.m_pObject )
  {
    v32 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v32 )
        v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004DE840) --------------------------------------------------------
void __thiscall ChargedItemListWin::UpdatePageInfo(ChargedItemListWin *this)
{
  ChargedItemListWin *v1; // esi@1
  unsigned int v2; // kr00_4@2
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v2 = ((signed int)((char *)v1->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast
                     - *(_DWORD *)&v1->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
       + ChargedItemList::GetTimeLimitItemCount();
    v3 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = fs("%d / %d");
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v4);
  }
}

//----- (004DE8B0) --------------------------------------------------------
void __thiscall ChargedItemListWin::ChargedItemInfo::SetItem(ChargedItemListWin::ChargedItemInfo *this, PROTO_CHARGEDBUFF_INFO *pkChargedBuffInfo)
{
  int v2; // ebx@0
  ChargedItemListWin::ChargedItemInfo *v3; // esi@1
  ChargedItemEffect *v4; // eax@3
  unsigned __int16 *v5; // eax@4
  unsigned __int16 *v6; // ebx@4
  NiRefObjectVtbl *v7; // edi@5
  char *v8; // eax@5
  PgWinText *v9; // ecx@5
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // edx@5
  int v11; // [sp-4h] [bp-38h]@3
  int v12; // [sp+0h] [bp-34h]@0
  char *v13; // [sp+0h] [bp-34h]@5
  char acUseDate[20]; // [sp+8h] [bp-2Ch]@5
  char acEndDate[20]; // [sp+1Ch] [bp-18h]@5
  unsigned int v16; // [sp+30h] [bp-4h]@1
  int v17; // [sp+34h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = this;
  if ( pkChargedBuffInfo )
  {
    v11 = v2;
    v4 = ChargedEffectTable::GetByHandle(pkChargedBuffInfo->ChargedBuffID);
    if ( v4 && (v5 = (unsigned __int16 *)ItemViewInfoTab::GetByInxName(v4->ItemID), (v6 = v5) != 0) )
    {
      ItemIcon::SetItemAsID(v3->pkIcon, *v5);
      ((void (__stdcall *)(unsigned __int16 *, int, int))v3->pkItemDescription->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
        v6 + 190,
        v11,
        v12);
      GetShineDateStr(pkChargedBuffInfo->UseTime, acUseDate, 20, 1);
      GetShineDateStr(pkChargedBuffInfo->EndTime, acEndDate, 20, 1);
      v7 = v3->pkItemAvailableTerm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = fs("%s~%s");
      v9 = v3->pkItemAvailableTerm;
      v10 = v7[118].__vecDelDtor;
      v13 = v8;
    }
    else
    {
      ItemIcon::SetItemAsID(v3->pkIcon, 0xFFFFu);
      ((void (__stdcall *)(_UNKNOWN *, int, int))v3->pkItemDescription->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
        &unk_98F391,
        v11,
        v12);
      v9 = v3->pkItemAvailableTerm;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
      v13 = (char *)&unk_98F392;
    }
    v10(&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)v13);
  }
  else
  {
    ItemIcon::SetItem(this->pkIcon, 0, 1);
    ((void (__stdcall *)(_UNKNOWN *))v3->pkItemDescription->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_98F382);
    v3->pkItemAvailableTerm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v3->pkItemAvailableTerm,
      (unsigned int)&unk_98F383);
  }
}
// 4DE8B0: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (004DE9E0) --------------------------------------------------------
void __thiscall ChargedItemListWin::ChargedItemListWin(ChargedItemListWin *this)
{
  ChargedItemListWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemListWin::_vftable_;
  *(_DWORD *)&v1->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast = 0;
  v1->m_vecTimeLimitedChargedBuff.baseclass_0._Myend = 0;
  v1->m_akItemInfoList[0].pkIcon = 0;
  v1->m_akItemInfoList[0].pkItemDescription = 0;
  v1->m_akItemInfoList[0].pkItemAvailableTerm = 0;
  v1->m_akItemInfoList[1].pkIcon = 0;
  v1->m_akItemInfoList[1].pkItemDescription = 0;
  v1->m_akItemInfoList[1].pkItemAvailableTerm = 0;
  v1->m_akItemInfoList[2].pkIcon = 0;
  v1->m_akItemInfoList[2].pkItemDescription = 0;
  v1->m_akItemInfoList[2].pkItemAvailableTerm = 0;
  v1->m_akItemInfoList[3].pkIcon = 0;
  v1->m_akItemInfoList[3].pkItemDescription = 0;
  v1->m_akItemInfoList[3].pkItemAvailableTerm = 0;
  v1->m_uiCurrPage = 0;
  v1->m_pkPageText = 0;
}
// 98F4E8: using guessed type int (__stdcall *ChargedItemListWin___vftable_)(int uiFlags);
// 98F504: using guessed type int (__thiscall *ChargedItemListWin___vftable_)(void *p, char);

//----- (004DEA70) --------------------------------------------------------
void __thiscall ChargedItemListWin::_ChargedItemListWin(ChargedItemListWin *this)
{
  ChargedItemListWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemListWin::_vftable_;
  if ( *(_DWORD *)&this->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast = 0;
  v1->m_vecTimeLimitedChargedBuff.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 98F4E8: using guessed type int (__stdcall *ChargedItemListWin___vftable_)(int uiFlags);
// 98F504: using guessed type int (__thiscall *ChargedItemListWin___vftable_)(void *p, char);

//----- (004DEAC0) --------------------------------------------------------
ChargedItemListWin *__cdecl ChargedItemListWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ChargedItemListWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A4u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ChargedItemListWin::ChargedItemListWin((ChargedItemListWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ChargedItemListWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004DEBF0) --------------------------------------------------------
void __thiscall ChargedItemListWin::SetTimeLimittedChargedBuff(ChargedItemListWin *this)
{
  ChargedItemListWin *v1; // esi@1
  NiTList<PROTO_CHARGEDBUFF_INFO *> *v2; // edi@1
  int v3; // esi@2
  NiTListItem<PROTO_CHARGEDBUFF_INFO *> *v4; // ebx@2
  PROTO_CHARGEDBUFF_INFO *v5; // edi@3
  unsigned int v6; // eax@5
  signed int v7; // edi@7
  int v8; // eax@9
  int v9; // eax@13
  PROTO_CHARGEDBUFF_INFO *pkInfo; // [sp+8h] [bp-4h]@3

  v1 = this;
  v2 = ChargedItemList::GetList();
  if ( *(_DWORD *)&v2->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v3 = (int)&v1->m_vecTimeLimitedChargedBuff;
    std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
      (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)v3,
      0);
    v4 = v2->baseclass_0.baseclass_0.m_pkHead;
    while ( v4 )
    {
      v5 = v4->m_element;
      v4 = v4->m_pkNext;
      pkInfo = v5;
      if ( v5 && LOBYTE(v5->EndTime._bf0) != -1 )
      {
        v6 = *(_DWORD *)(v3 + 4);
        if ( (unsigned int)&pkInfo >= v6 || *(_DWORD *)v3 > (unsigned int)&pkInfo )
        {
          if ( v6 == *(_DWORD *)(v3 + 8) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v3,
              1u);
          v9 = *(_DWORD *)(v3 + 4);
          if ( v9 )
            *(_DWORD *)v9 = v5;
        }
        else
        {
          v7 = (signed int)((char *)&pkInfo - *(_DWORD *)v3) >> 2;
          if ( v6 == *(_DWORD *)(v3 + 8) )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v3,
              1u);
          v8 = *(_DWORD *)(v3 + 4);
          if ( v8 )
            *(_DWORD *)v8 = *(_DWORD *)(*(_DWORD *)v3 + 4 * v7);
        }
        *(_DWORD *)(v3 + 4) += 4;
      }
    }
  }
}

//----- (004DECA0) --------------------------------------------------------
void __thiscall ChargedItemListWin::Refresh(ChargedItemListWin *this)
{
  ChargedItemListWin *v1; // edi@1
  unsigned int v2; // ebx@1
  unsigned int v3; // esi@1
  PROTO_CHARGEDBUFF_INFO **v4; // ecx@3
  PROTO_CHARGEDBUFF_INFO **v5; // eax@3
  int v6; // eax@6
  unsigned int v7; // ebx@8
  unsigned int v8; // eax@10
  Item *v9; // eax@11
  bool v10; // zf@13
  unsigned int v11; // kr00_4@15
  NiRefObjectVtbl *v12; // esi@15
  char *v13; // eax@15
  unsigned int uiHead; // [sp+Ch] [bp-Ch]@1
  signed int v15; // [sp+10h] [bp-8h]@1
  ChargedItemListWin::ChargedItemInfo *v16; // [sp+10h] [bp-8h]@5
  ChargedItemListWin::ChargedItemInfo *v17; // [sp+10h] [bp-8h]@9
  ChargedItemListWin::ChargedItemInfo *thisa; // [sp+14h] [bp-4h]@1
  int thisb; // [sp+14h] [bp-4h]@5
  int thisc; // [sp+14h] [bp-4h]@9

  v1 = this;
  v2 = 4 * this->m_uiCurrPage;
  uiHead = 4 * this->m_uiCurrPage;
  v3 = 0;
  ChargedItemListWin::SetTimeLimittedChargedBuff(this);
  thisa = v1->m_akItemInfoList;
  v15 = 4;
  do
  {
    ChargedItemListWin::ChargedItemInfo::SetItem(thisa, 0);
    ++thisa;
    --v15;
  }
  while ( v15 );
  v4 = *(PROTO_CHARGEDBUFF_INFO ***)&v1->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = v1->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast;
  if ( v4 != v5 && v2 < v5 - v4 )
  {
    thisb = 4 * v2;
    v3 = 0;
    v16 = v1->m_akItemInfoList;
    do
    {
      v6 = *(_DWORD *)&v1->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v3 + v2 >= (signed int)((char *)v1->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast - v6) >> 2 )
        break;
      ChargedItemListWin::ChargedItemInfo::SetItem(v16, *(PROTO_CHARGEDBUFF_INFO **)(thisb + v6));
      thisb += 4;
      ++v16;
      ++v3;
    }
    while ( v3 < 4 );
  }
  v7 = uiHead
     + v3
     - ((signed int)((char *)v1->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast
                   - *(_DWORD *)&v1->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
  if ( v3 < 4 )
  {
    v17 = (ChargedItemListWin::ChargedItemInfo *)((char *)v1 + 4 * (3 * v3 + 90));
    thisc = 4 - v3;
    do
    {
      v8 = ChargedItemList::GetTimeLimitCharItemCount();
      if ( v7 >= v8 )
        v9 = ChargedItemList::GetTimeLimitMiniHouseItem(v7 - v8);
      else
        v9 = ChargedItemList::GetTimeLimitCharItem(v7);
      ChargedItemListWin::ChargedItemInfo::SetItem(v17, v9);
      ++v7;
      v10 = thisc-- == 1;
      ++v17;
    }
    while ( !v10 );
  }
  if ( (unsigned __int8)((int (__thiscall *)(ChargedItemListWin *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1) )
  {
    v11 = ((signed int)((char *)v1->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast
                      - *(_DWORD *)&v1->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
        + ChargedItemList::GetTimeLimitItemCount();
    v12 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = fs("%d / %d");
    v12[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v13);
  }
}

//----- (004DEE20) --------------------------------------------------------
void __thiscall ChargedItemListWin::OnShowWin(ChargedItemListWin *this)
{
  ChargedItemListWin *v1; // esi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  v1->m_uiListCount = 0;
  ChargedItemListWin::Refresh(v1);
}

//----- (004DEE40) --------------------------------------------------------
void __thiscall ChargedItemListWin::OnNext(ChargedItemListWin *this)
{
  ChargedItemListWin *v1; // edi@1
  unsigned int v2; // ebx@1

  v1 = this;
  v2 = this->m_uiCurrPage;
  if ( 4 * v2 + 4 < ((signed int)((char *)this->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast
                                - *(_DWORD *)&this->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
                  + ChargedItemList::GetTimeLimitItemCount() )
  {
    v1->m_uiCurrPage = v2 + 1;
    ChargedItemListWin::Refresh(v1);
  }
}

//----- (004DEE90) --------------------------------------------------------
void __thiscall ChargedItemListWin::OnPrev(ChargedItemListWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_uiCurrPage;
  if ( v1 )
    this->m_uiCurrPage = v1 - 1;
  ChargedItemListWin::Refresh(this);
}

//----- (004DEEB0) --------------------------------------------------------
void __thiscall ChargedItemListWin::OnCommand(ChargedItemListWin *this, unsigned int wParam, int lParam)
{
  unsigned int v3; // eax@2
  PgFrameWork *v4; // eax@7

  switch ( wParam )
  {
    case 0xBu:
      v3 = this->m_uiCurrPage;
      if ( v3 )
        this->m_uiCurrPage = v3 - 1;
      ChargedItemListWin::Refresh(this);
      break;
    case 0xCu:
      ChargedItemListWin::OnNext(this);
      break;
    case 0xAu:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xDu:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "ComItemWin");
      break;
    default:
      return;
  }
}

//----- (004DEF30) --------------------------------------------------------
unsigned int __cdecl ITableBase<ItemViewInfo_ItemViewInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (004DEF50) --------------------------------------------------------
ItemViewInfo *__cdecl ItemViewInfoTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  ItemViewInfo *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<ItemViewInfo_ItemViewInfoTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 4),
                                v1)
              + 2,
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<ItemViewInfo_ItemViewInfoTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (ItemViewInfo *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 4),
                                 v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (004DEFE0) --------------------------------------------------------
void *__thiscall ChargedItemListWin::_vector_deleting_destructor_(ChargedItemListWin *this, unsigned int a2)
{
  ChargedItemListWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemListWin::_vftable_;
  if ( *(_DWORD *)&this->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v2->m_vecTimeLimitedChargedBuff.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_vecTimeLimitedChargedBuff.baseclass_0._Mylast = 0;
  v2->m_vecTimeLimitedChargedBuff.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98F4E8: using guessed type int (__stdcall *ChargedItemListWin___vftable_)(int uiFlags);
// 98F504: using guessed type int (__thiscall *ChargedItemListWin___vftable_)(void *p, char);

//----- (004DF050) --------------------------------------------------------
void __thiscall CharInfoWin::ConvertCommaNumber(CharInfoWin *this, __int64 i64Val, char *pNumberString)
{
  char *v3; // esi@1
  char *v4; // eax@1
  char v5; // dl@2
  int v6; // eax@3
  char v7; // dl@4
  char v8; // dl@4
  char v9; // dl@4
  char v10; // al@4
  char v11; // dl@6
  char v12; // dl@6
  char v13; // al@6
  char v14; // dl@8
  char v15; // al@8
  char comma2[4]; // [sp+Ch] [bp-4h]@4

  v3 = pNumberString;
  sprintf(pNumberString, "%I64d");
  v4 = v3;
  pNumberString = v3 + 1;
  do
    v5 = *v4++;
  while ( v5 );
  v6 = v4 - pNumberString;
  if ( v6 <= 9 )
  {
    if ( v6 <= 6 )
    {
      if ( v6 > 3 )
      {
        *(_WORD *)((char *)&pNumberString + 1) = 0;
        HIDWORD(i64Val) = 0;
        LOWORD(pNumberString) = (unsigned __int8)v3[v6 - 3];
        v14 = v3[v6 - 2];
        v15 = v3[v6 - 1];
        BYTE1(pNumberString) = v14;
        HIWORD(pNumberString) = (unsigned __int8)v15;
        BYTE3(pNumberString) = 0;
        sprintf(v3, "%I64d.%s");
      }
    }
    else
    {
      LOBYTE(pNumberString) = v3[v6 - 3];
      v11 = v3[v6 - 2];
      *(_WORD *)((char *)&pNumberString + 1) = 0;
      BYTE1(pNumberString) = v11;
      HIWORD(pNumberString) = (unsigned __int8)v3[v6 - 1];
      BYTE4(i64Val) = v3[v6 - 6];
      v12 = v3[v6 - 5];
      v13 = v3[v6 - 4];
      BYTE5(i64Val) = v12;
      BYTE6(i64Val) = v13;
      BYTE7(i64Val) = 0;
      sprintf(v3, "%I64d.%s.%s");
    }
  }
  else
  {
    LOBYTE(pNumberString) = v3[v6 - 3];
    v7 = v3[v6 - 2];
    *(_WORD *)((char *)&pNumberString + 1) = 0;
    BYTE1(pNumberString) = v7;
    HIWORD(pNumberString) = (unsigned __int8)v3[v6 - 1];
    BYTE4(i64Val) = v3[v6 - 6];
    v8 = v3[v6 - 5];
    *(_WORD *)((char *)&i64Val + 5) = 0;
    BYTE5(i64Val) = v8;
    BYTE6(i64Val) = v3[v6 - 4];
    comma2[0] = v3[v6 - 9];
    v9 = v3[v6 - 8];
    v10 = v3[v6 - 7];
    comma2[1] = v9;
    comma2[2] = v10;
    BYTE7(i64Val) = 0;
    comma2[3] = 0;
    sprintf(v3, "%I64d.%s.%s.%s");
  }
}

//----- (004DF200) --------------------------------------------------------
void __thiscall CharInfoWin::OpenStatTitleWin(CharInfoWin *this)
{
  CharInfoWin *v1; // esi@1

  v1 = this;
  if ( !this->m_pkStatTitleWin )
    this->m_pkStatTitleWin = StatTitleWin::CreateWin(this->baseclass_0.m_pkFrameWork);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkStatTitleWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004DF240) --------------------------------------------------------
void __thiscall CharInfoWin::OpenCharacterTitleWin(CharInfoWin *this)
{
  CharInfoWin *v1; // esi@1

  v1 = this;
  if ( !this->m_pkCharTitleWin )
    this->m_pkCharTitleWin = CharTitleWin::CreateWin(this->baseclass_0.m_pkFrameWork);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkCharTitleWin->baseclass_0.baseclass_0.baseclass_0);
  CharTitleWin::UpdateViewList(v1->m_pkCharTitleWin);
  CharTitleWin::SetCurTitleInfo(v1->m_pkCharTitleWin, &v1->m_kCurrentTitle);
}

//----- (004DF2A0) --------------------------------------------------------
void __thiscall CharInfoWin::OnClose(CharInfoWin *this)
{
  CharInfoWin *v1; // esi@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkCharTitleWin->baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkFreeStatView->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  PgWin::OnClose(&v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004DF2D0) --------------------------------------------------------
FreeStatView *__thiscall CharInfoWin::GetFreeStatView(CharInfoWin *this)
{
  return this->m_pkFreeStatView;
}

//----- (004DF2E0) --------------------------------------------------------
void __thiscall CharInfoWin::SetCharTitleCurrentInfo(CharInfoWin *this, CHARTITLE_BRIEFINFO *pTitleInfo)
{
  CharTitleWin::CTWIN_LIST_INFO *v2; // edx@2
  CharTitleWin *v3; // ecx@2

  if ( pTitleInfo )
  {
    this->m_kCurrentTitle._bf1 ^= (this->m_kCurrentTitle._bf1 ^ pTitleInfo->ElementNo) & 0x3F;
    this->m_kCurrentTitle.MobID = pTitleInfo->MobID;
    v2 = &this->m_kCurrentTitle;
    v3 = this->m_pkCharTitleWin;
    v2->Type = pTitleInfo->Type;
    if ( v3 )
      CharTitleWin::SetCurTitleInfo(v3, v2);
  }
}

//----- (004DF330) --------------------------------------------------------
void __thiscall CharInfoWin::OnHelpLink(CharInfoWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ChrStatus");
}

//----- (004DF360) --------------------------------------------------------
void __thiscall CharInfoWin::OnOpenCollection(CharInfoWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenCollectWin((GameFrameWork *)v1, 1);
}

//----- (004DF380) --------------------------------------------------------
void __thiscall CharInfoWin::EnableChangeCondition(CharInfoWin *this, bool bEnable)
{
  this->m_bChangeCondition = bEnable;
}

//----- (004DF390) --------------------------------------------------------
void __thiscall CharInfoWin::SetChangeCondition(CharInfoWin *this, CHAR_CHANGEBYCONDITION_PARAM kCondition, char bFlag, char bIndex)
{
  char *v4; // eax@2
  char *v5; // eax@3
  char *v6; // eax@4
  char *v7; // eax@5
  char *v8; // eax@6
  char *v9; // eax@7
  char *v10; // eax@8

  switch ( bFlag )
  {
    case 0x1C:
      v4 = (char *)this + 2 * (3 * (unsigned __int8)bIndex + 324);
      *(_DWORD *)v4 = *(_DWORD *)&kCondition;
      *((_WORD *)v4 + 2) = HIWORD(kCondition.nValue);
      break;
    case 0x1D:
      v5 = (char *)this + 2 * (3 * (unsigned __int8)bIndex + 354);
      *(_DWORD *)v5 = *(_DWORD *)&kCondition;
      *((_WORD *)v5 + 2) = HIWORD(kCondition.nValue);
      break;
    case 0x1E:
      v6 = (char *)this + 2 * (3 * (unsigned __int8)bIndex + 474);
      *(_DWORD *)v6 = *(_DWORD *)&kCondition;
      *((_WORD *)v6 + 2) = HIWORD(kCondition.nValue);
      break;
    case 0x1F:
      v7 = (char *)this + 2 * (3 * (unsigned __int8)bIndex + 504);
      *(_DWORD *)v7 = *(_DWORD *)&kCondition;
      *((_WORD *)v7 + 2) = HIWORD(kCondition.nValue);
      break;
    case 0x20:
      v8 = (char *)this + 2 * (3 * (unsigned __int8)bIndex + 384);
      *(_DWORD *)v8 = *(_DWORD *)&kCondition;
      *((_WORD *)v8 + 2) = HIWORD(kCondition.nValue);
      break;
    case 0x21:
      v9 = (char *)this + 2 * (3 * (unsigned __int8)bIndex + 534);
      *(_DWORD *)v9 = *(_DWORD *)&kCondition;
      *((_WORD *)v9 + 2) = HIWORD(kCondition.nValue);
      break;
    case 0x23:
      v10 = (char *)this + 2 * (3 * (unsigned __int8)bIndex + 444);
      *(_DWORD *)v10 = *(_DWORD *)&kCondition;
      *((_WORD *)v10 + 2) = HIWORD(kCondition.nValue);
      break;
    default:
      return;
  }
}

//----- (004DF4B0) --------------------------------------------------------
void __thiscall CharInfoWin::SetConditionDataNum(CharInfoWin *this, unsigned int uiNum)
{
  this->m_uiConditionCount = uiNum;
}

//----- (004DF4C0) --------------------------------------------------------
void __thiscall CharInfoWin::SetSectionRate(CharInfoWin *this, unsigned int uiRate)
{
  this->m_uiSectionRate = uiRate / 0xA;
}

//----- (004DF4E0) --------------------------------------------------------
void __thiscall CharInfoWin::SetMinMaxParamTextWin(CharInfoWin *this, PgWinText *pkWin, int iMinBaseVal, int iMinChangeVal, int iMaxBaseVal, int iMaxChangeVal, float fDisplayAlpha)
{
  signed int v7; // edi@1
  signed int v8; // ebx@1

  v7 = (signed int)((double)iMinChangeVal * fDisplayAlpha);
  v8 = (signed int)(fDisplayAlpha * (double)iMaxChangeVal);
  ((void (__thiscall *)(_DWORD))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(pkWin);
  if ( v7 == v8 )
    ((void (*)(_DWORD, const char *, ...))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      pkWin,
      "%d",
      v7);
  else
    ((void (*)(_DWORD, const char *, ...))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      pkWin,
      "%d ~ %d",
      v7,
      v8);
}
// 4DF4E0: could not find valid save-restore pair for edi

//----- (004DF580) --------------------------------------------------------
void __thiscall CharInfoWin::SetParamTextWin(CharInfoWin *this, PgWinText *pkWin, int BaseVal, int ChangeVal, int iBonusVal, float fDisplayAlpha)
{
  signed int v6; // edi@1

  v6 = (signed int)(fDisplayAlpha * (double)ChangeVal);
  ((void (__thiscall *)(_DWORD))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(pkWin);
  if ( iBonusVal )
    ((void (*)(_DWORD, const char *, ...))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      pkWin,
      "%d (+%d)",
      v6,
      iBonusVal);
  else
    ((void (*)(_DWORD, const char *, ...))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      pkWin,
      "%d",
      v6);
}
// 4DF580: could not find valid save-restore pair for edi

//----- (004DF610) --------------------------------------------------------
void __thiscall CharInfoWin::SetParamTextWin(CharInfoWin *this, PgWinText *pkWin, float BaseVal, float ChangeVal, float fBonusVal)
{
  D3DXCOLOR *v5; // [sp-Ch] [bp-Ch]@2

  if ( ChangeVal == BaseVal )
  {
    v5 = &Color::m_kDxWhiteColor;
  }
  else
  {
    if ( ChangeVal >= (double)BaseVal )
      v5 = &Color::m_kDxGreenColor;
    else
      v5 = &Color::m_kDxRedColor;
  }
  pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)pkWin,
    (unsigned int)v5);
  ((void (*)(_DWORD, const char *, ...))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
    pkWin,
    "%d",
    (signed int)(ChangeVal + 0.5));
}

//----- (004DF690) --------------------------------------------------------
void __thiscall CharInfoWin::OnCommand(CharInfoWin *this, unsigned int wParam, int lParam)
{
  CharInfoWin *v3; // esi@1

  v3 = this;
  switch ( wParam )
  {
    case 9u:
      CharInfoWin::OpenStatTitleWin(this);
      break;
    case 0x14u:
      CharInfoWin::OpenCharacterTitleWin(this);
      break;
    case 0xAu:
      StatPointReqTask::ReqIncPoint(this->m_spStatPointReqTask.m_pObject, 0);
      break;
    case 0xBu:
      StatPointReqTask::ReqIncPoint(this->m_spStatPointReqTask.m_pObject, SD_DEX);
      break;
    case 0xCu:
      StatPointReqTask::ReqIncPoint(this->m_spStatPointReqTask.m_pObject, SD_CON);
      break;
    case 0xDu:
      StatPointReqTask::ReqIncPoint(this->m_spStatPointReqTask.m_pObject, SD_INT);
      break;
    case 0xEu:
      StatPointReqTask::ReqIncPoint(this->m_spStatPointReqTask.m_pObject, SD_MEN);
      break;
    case 0xFu:
      StatPointReqTask::ReqDecPoint(this->m_spStatPointReqTask.m_pObject, 0);
      break;
    case 0x10u:
      StatPointReqTask::ReqDecPoint(this->m_spStatPointReqTask.m_pObject, SD_DEX);
      break;
    case 0x11u:
      StatPointReqTask::ReqDecPoint(this->m_spStatPointReqTask.m_pObject, SD_CON);
      break;
    case 0x12u:
      StatPointReqTask::ReqDecPoint(this->m_spStatPointReqTask.m_pObject, SD_INT);
      break;
    case 0x13u:
      StatPointReqTask::ReqDecPoint(this->m_spStatPointReqTask.m_pObject, SD_MEN);
      break;
    case 0x15u:
      if ( (unsigned __int8)((int (*)(void))this->m_pkFreeStatView->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkFreeStatView->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v3->m_pkFreeStatView->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.5,
          0.5);
        FreeStatView::SetFreeStatPoint(v3->m_pkFreeStatView, &rkPoint);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkFreeStatView->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
      break;
    case 0x16u:
      CharInfoWin::OnHelpLink(this);
      break;
    case 0x17u:
      CharInfoWin::OnOpenCollection(this);
      break;
    default:
      return;
  }
}

//----- (004DF840) --------------------------------------------------------
void __thiscall CharInfoWin::RefreshStatTitle(CharInfoWin *this)
{
  CharInfoWin *v1; // ebx@1
  NiTList<int> *v2; // eax@2
  NiTListItem<int> *v3; // edi@3
  int v4; // eax@4
  IconWin *v5; // esi@4
  NiSourceTexture *pkTexture; // [sp+4h] [bp-4h]@1

  v1 = this;
  pkTexture = MenuTexMgr::GetTexture(8u);
  if ( pkTexture )
  {
    v2 = User::GetStatTitleList(&g_kUser);
    if ( v2 )
    {
      v3 = v2->baseclass_0.baseclass_0.m_pkHead;
      while ( v3 )
      {
        v4 = v1->m_aiStatTitleCount[0];
        v5 = v1->m_apkStatTitleIcon[0][v4];
        v3 = v3->m_pkNext;
        v1->m_aiStatTitleCount[0] = v4 + 1;
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
          v5,
          pkTexture,
          0,
          32,
          32);
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v5,
          1u);
      }
    }
  }
}

//----- (004DF8C0) --------------------------------------------------------
bool __thiscall CharInfoWin::Create(CharInfoWin *this, PgFrameWork *pkFrameWork)
{
  CharInfoWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  int v11; // ebx@15
  NiSourceTexture *v12; // eax@15
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@20
  PgWinSpr *v15; // eax@20
  PgSprData *v16; // eax@20
  PgFont *v17; // eax@22
  char *v18; // eax@22
  PgFont *v19; // ST19C_4@22
  unsigned int v20; // ST198_4@22
  unsigned int v21; // eax@22
  char *v22; // eax@22
  PgWinBut *v23; // eax@22
  char *v24; // eax@22
  PgWinBut *v25; // eax@22
  PgWinBut *v26; // eax@22
  char *v27; // eax@22
  PgWinBut *v28; // eax@22
  PgWinBut *v29; // eax@22
  char *v30; // eax@22
  PgWinBut *v31; // eax@22
  PgWinBut *v32; // eax@22
  char *v33; // eax@22
  PgWinBut *v34; // eax@22
  PgWinBut *v35; // eax@22
  char *v36; // eax@22
  PgWinBut *v37; // eax@22
  PgSprData *v38; // eax@22
  PgFont *v39; // eax@23
  char *v40; // eax@23
  PgFont *v41; // eax@24
  PgWinText *v42; // eax@24
  Char *v43; // ecx@24
  NiGeometry *v44; // eax@24
  PgFont *v45; // eax@30
  char *v46; // eax@30
  PgFont *v47; // eax@31
  PgWinText *v48; // eax@31
  PgFont *v49; // eax@32
  char *v50; // eax@32
  PgFont *v51; // eax@33
  PgWinText *v52; // eax@33
  PgFont *v53; // eax@34
  char *v54; // eax@34
  PgFont *v55; // eax@35
  PgWinText *v56; // eax@35
  PgFont *v57; // eax@36
  char *v58; // eax@36
  PgFont *v59; // eax@37
  PgWin *v60; // eax@37
  PgFont *v61; // eax@38
  char *v62; // eax@38
  PgFont *v63; // eax@39
  PgWinText *v64; // eax@39
  PgFont *v65; // eax@40
  char *v66; // eax@40
  char *v67; // eax@40
  PgFont *v68; // eax@41
  char *v69; // eax@41
  char *v70; // eax@41
  PgFont *v71; // eax@42
  char *v72; // eax@42
  char *v73; // eax@42
  PgFont *v74; // eax@43
  char *v75; // eax@43
  char *v76; // eax@43
  PgFont *v77; // eax@44
  char *v78; // eax@44
  char *v79; // eax@44
  PgFont *v80; // eax@45
  PgWinText *v81; // eax@45
  PgFont *v82; // eax@46
  PgWinText *v83; // eax@46
  PgFont *v84; // eax@47
  PgWinText *v85; // eax@47
  PgFont *v86; // eax@48
  PgWinText *v87; // eax@48
  PgFont *v88; // eax@49
  char *v89; // eax@49
  char *v90; // eax@49
  PgFont *v91; // eax@50
  PgWinText *v92; // eax@50
  PgFont *v93; // eax@51
  PgWinText *v94; // eax@51
  char *v95; // eax@51
  char *v96; // eax@51
  PgFont *v97; // eax@51
  PgWinText *v98; // eax@51
  char *v99; // eax@51
  PgFont *v100; // eax@52
  PgWinText *v101; // eax@52
  PgFont *v102; // eax@52
  PgWinText *v103; // eax@52
  PgFont *v104; // eax@53
  char *v105; // eax@53
  char *v106; // eax@53
  PgFont *v107; // eax@54
  PgWinText *v108; // eax@54
  PgFont *v109; // eax@55
  char *v110; // eax@55
  char *v111; // eax@55
  PgFont *v112; // eax@57
  PgWinText *v113; // eax@57
  PgFont *v114; // eax@59
  char *v115; // eax@59
  PgFont *v116; // eax@60
  PgWinText *v117; // eax@60
  PgFont *v118; // eax@61
  PgWinText *v119; // eax@61
  PgFont *v120; // eax@62
  char *v121; // eax@62
  PgFont *v122; // eax@63
  PgWinText *v123; // eax@63
  PgFont *v124; // eax@64
  char *v125; // eax@64
  PgFont *v126; // eax@65
  PgWinText *v127; // eax@65
  PgFont *v128; // eax@66
  char *v129; // eax@66
  PgFont *v130; // eax@67
  PgWinText *v131; // eax@67
  PgFont *v132; // eax@68
  char *v133; // eax@68
  PgFont *v134; // eax@69
  PgWinText *v135; // eax@69
  PgFont *v136; // eax@70
  char *v137; // eax@70
  PgFont *v138; // eax@71
  PgWinText *v139; // eax@71
  PgFont *v140; // eax@72
  char *v141; // eax@72
  PgFont *v142; // eax@73
  PgWinText *v143; // eax@73
  PgWinBut *v144; // eax@73
  char *v145; // eax@73
  PgFont *v146; // ST194_4@73
  unsigned int v147; // ST190_4@73
  unsigned int v148; // eax@73
  PgWinBut *v149; // eax@73
  PgWin *v150; // ST190_4@73
  PgFont *v151; // ST18C_4@73
  unsigned int v152; // ST188_4@73
  unsigned int v153; // eax@73
  char *v154; // eax@73
  NiSourceTexture *v155; // eax@73
  const char *v156; // [sp+19Ch] [bp-5Ch]@16
  int *v157; // [sp+1A0h] [bp-58h]@16
  int *v158; // [sp+1A4h] [bp-54h]@16
  NiSourceTexture *v159; // [sp+1A8h] [bp-50h]@16
  UIUtil ui; // [sp+1BCh] [bp-3Ch]@73
  NiRefObjectVtbl *v161; // [sp+1D0h] [bp-28h]@22
  NiSourceTexture *pkTexture; // [sp+1D4h] [bp-24h]@1
  unsigned int uiWidth; // [sp+1D8h] [bp-20h]@20
  unsigned int uiHeight; // [sp+1DCh] [bp-1Ch]@20
  int uiLeft; // [sp+1E0h] [bp-18h]@11
  int uiTop; // [sp+1E4h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+1E8h] [bp-10h]@1
  int v168; // [sp+1F4h] [bp-4h]@1
  PgSprData *pkTextWina; // [sp+200h] [bp+8h]@18
  NiSourceTexture *pkTextWin; // [sp+200h] [bp+8h]@18
  PgSprData *pkTextWinb; // [sp+200h] [bp+8h]@19
  PgWinText *pkTextWinc; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWind; // [sp+200h] [bp+8h]@22
  PgWin *pkTextWine; // [sp+200h] [bp+8h]@22
  PgWinText *pkTextWinf; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWing; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWinh; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWini; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWinj; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWink; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWinl; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWinm; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWinn; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWino; // [sp+200h] [bp+8h]@22
  PgSprData *pkTextWinp; // [sp+200h] [bp+8h]@22
  PgWinText *pkTextWinq; // [sp+200h] [bp+8h]@23
  PgWinText *pkTextWinr; // [sp+200h] [bp+8h]@30
  PgWinText *pkTextWins; // [sp+200h] [bp+8h]@32
  PgWinText *pkTextWint; // [sp+200h] [bp+8h]@34
  PgWinText *pkTextWinu; // [sp+200h] [bp+8h]@36
  PgWinText *pkTextWinv; // [sp+200h] [bp+8h]@38
  PgWinText *pkTextWinw; // [sp+200h] [bp+8h]@40
  PgWinText *pkTextWinx; // [sp+200h] [bp+8h]@41
  PgWinText *pkTextWiny; // [sp+200h] [bp+8h]@42
  PgWinText *pkTextWinz; // [sp+200h] [bp+8h]@43
  PgWinText *pkTextWinba; // [sp+200h] [bp+8h]@44
  PgWinText *pkTextWinbb; // [sp+200h] [bp+8h]@49
  int pkTextWinbc; // [sp+200h] [bp+8h]@51
  PgWinText *pkTextWinbd; // [sp+200h] [bp+8h]@53
  PgWinText *pkTextWinbe; // [sp+200h] [bp+8h]@55
  PgWinText *pkTextWinbf; // [sp+200h] [bp+8h]@59
  PgWinText *pkTextWinbg; // [sp+200h] [bp+8h]@62
  PgWinText *pkTextWinbh; // [sp+200h] [bp+8h]@64
  PgWinText *pkTextWinbi; // [sp+200h] [bp+8h]@66
  PgWinText *pkTextWinbj; // [sp+200h] [bp+8h]@68
  PgWinText *pkTextWinbk; // [sp+200h] [bp+8h]@70
  PgWinText *pkTextWinbl; // [sp+200h] [bp+8h]@72
  PgSprData *pkTextWinbm; // [sp+200h] [bp+8h]@73
  PgWin *pkTextWinbn; // [sp+200h] [bp+8h]@73
  PgWinText *pkTextWinbo; // [sp+200h] [bp+8h]@73
  PgSprData *pkTextWinbp; // [sp+200h] [bp+8h]@73
  PgWinBut *pkTextWinbq; // [sp+200h] [bp+8h]@73
  PgWinText *pkTextWinbr; // [sp+200h] [bp+8h]@73
  char pkTextWin_3; // [sp+203h] [bp+Bh]@24

  v2 = this;
  spNode.m_pObject = 0;
  v168 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v168 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\ChrStatus.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "CharInfoWin", 0) )
  {
    v4 = spNode.m_pObject;
    v168 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  v11 = uiTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v159 = v12;
    v158 = &uiTop;
    v157 = &uiLeft;
    v156 = "Theme";
  }
  else
  {
    v159 = 0;
    v158 = &uiTop;
    v157 = &uiLeft;
    v156 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v156, v157, v158, v159);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWina = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWina, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWina, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWina, &v2->baseclass_0.baseclass_0.baseclass_0);
  pkTextWin = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWinb = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTextWin);
    PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWinb, &v2->baseclass_0.baseclass_0.baseclass_0, 0x16u, 0, 0);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v15 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v17 = Font::Get(MAIN_MENU),
        pkTextWinc = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v17,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinc,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v161 = pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v18 = TextData::Get(0xD6F6DEDFu),
        v161->__vecDelDtor(pkTextWinc, v18),
        ((void (__stdcall *)(_DWORD))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        pkTextWind = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubNameBtnNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "SubNameBtnClick"),
        PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "SubNameBtnOver"),
        pkTextWine = (PgWin *)PgWinBut::CreateWin(
                                uiLeft - v10,
                                uiTop - v11,
                                pkTextWind,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0x14u,
                                0,
                                0),
        v19 = Font::Get(MAIN_MENU),
        v20 = ((int (*)(void))pkTextWine->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(),
        v21 = ((int (*)(void))pkTextWine->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(),
        pkTextWinf = PgWinText::CreateWin(0, 1, v21, v20, v19, pkTextWine, 0, 0),
        pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinf,
          5u),
        v161 = pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v22 = TextData::Get(0x1C3E377Au),
        v161->__vecDelDtor(pkTextWinf, v22),
        ((void (__stdcall *)(_DWORD))pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        pkTextWing = PgSprData::Create(&spNode.m_pObject->baseclass_0, "StrUpNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWing, &spNode.m_pObject->baseclass_0, "StrUpClick"),
        PgSprData::Add(pkTextWing, &spNode.m_pObject->baseclass_0, "StrUpOver"),
        v23 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWing,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xAu,
                0,
                0),
        v2->m_pkStrUpBtn = v23,
        v23->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        v24 = TextData2::Get(0xC580798Bu),
        PgWin::SetToolTipWinText(&v2->m_pkStrUpBtn->baseclass_0.baseclass_0, v24),
        pkTextWinh = PgSprData::Create(&spNode.m_pObject->baseclass_0, "StrDnNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWinh, &spNode.m_pObject->baseclass_0, "StrDnClick"),
        PgSprData::Add(pkTextWinh, &spNode.m_pObject->baseclass_0, "StrDnOver"),
        v25 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWinh,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xFu,
                0,
                0),
        v2->m_pkStrDnBtn = v25,
        v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v25,
          0),
        pkTextWini = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DexUpNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWini, &spNode.m_pObject->baseclass_0, "DexUpClick"),
        PgSprData::Add(pkTextWini, &spNode.m_pObject->baseclass_0, "DexUpOver"),
        v26 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWini,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xBu,
                0,
                0),
        v2->m_pkDexUpBtn = v26,
        v26->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        v27 = TextData2::Get(0xC580798Bu),
        PgWin::SetToolTipWinText(&v2->m_pkDexUpBtn->baseclass_0.baseclass_0, v27),
        pkTextWinj = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DexDnNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWinj, &spNode.m_pObject->baseclass_0, "DexDnClick"),
        PgSprData::Add(pkTextWinj, &spNode.m_pObject->baseclass_0, "DexDnOver"),
        v28 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWinj,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x10u,
                0,
                0),
        v2->m_pkDexDnBtn = v28,
        v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v28,
          0),
        pkTextWink = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ConUpNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWink, &spNode.m_pObject->baseclass_0, "ConUpClick"),
        PgSprData::Add(pkTextWink, &spNode.m_pObject->baseclass_0, "ConUpOver"),
        v29 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWink,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xCu,
                0,
                0),
        v2->m_pkConUpBtn = v29,
        v29->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        v30 = TextData2::Get(0xC580798Bu),
        PgWin::SetToolTipWinText(&v2->m_pkConUpBtn->baseclass_0.baseclass_0, v30),
        pkTextWinl = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ConDnNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWinl, &spNode.m_pObject->baseclass_0, "ConDnClick"),
        PgSprData::Add(pkTextWinl, &spNode.m_pObject->baseclass_0, "ConDnOver"),
        v31 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWinl,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x11u,
                0,
                0),
        v2->m_pkConDnBtn = v31,
        v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v31,
          0),
        pkTextWinm = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IntUpNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWinm, &spNode.m_pObject->baseclass_0, "IntUpClick"),
        PgSprData::Add(pkTextWinm, &spNode.m_pObject->baseclass_0, "IntUpOver"),
        v32 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWinm,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xDu,
                0,
                0),
        v2->m_pkIntUpBtn = v32,
        v32->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        v33 = TextData2::Get(0xC580798Bu),
        PgWin::SetToolTipWinText(&v2->m_pkIntUpBtn->baseclass_0.baseclass_0, v33),
        pkTextWinn = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IntDnNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWinn, &spNode.m_pObject->baseclass_0, "IntDnClick"),
        PgSprData::Add(pkTextWinn, &spNode.m_pObject->baseclass_0, "IntDnOver"),
        v34 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWinn,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x12u,
                0,
                0),
        v2->m_pkIntDnBtn = v34,
        v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v34,
          0),
        pkTextWino = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MenUpNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWino, &spNode.m_pObject->baseclass_0, "MenUpClick"),
        PgSprData::Add(pkTextWino, &spNode.m_pObject->baseclass_0, "MenUpOver"),
        v35 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWino,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xEu,
                0,
                0),
        v2->m_pkMenUpBtn = v35,
        v35->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        v36 = TextData2::Get(0xC580798Bu),
        PgWin::SetToolTipWinText(&v2->m_pkMenUpBtn->baseclass_0.baseclass_0, v36),
        pkTextWinp = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MenDnNor", &uiLeft, &uiTop, pkTexture),
        PgSprData::Add(pkTextWinp, &spNode.m_pObject->baseclass_0, "MenDnClick"),
        PgSprData::Add(pkTextWinp, &spNode.m_pObject->baseclass_0, "MenDnOver"),
        v37 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                pkTextWinp,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x13u,
                0,
                0),
        v2->m_pkMenDnBtn = v37,
        v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v37,
          0),
        v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture),
        PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "SubName", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v39 = Font::Get(MAIN_MENU),
        pkTextWinq = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v39,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWinq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v40 = TextData::Get(0xDFF0F646u),
        v161->__vecDelDtor(pkTextWinq, v40),
        ((void (__stdcall *)(_DWORD))pkTextWinq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "SubNameTxt", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
    goto LABEL_76;
  v41 = Font::Get(MAIN_MENU);
  v42 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          uiWidth,
          uiHeight,
          v41,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkSubNameTextWin = v42;
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v42,
    (unsigned int)"-");
  ((void (__stdcall *)(char *))v2->m_pkSubNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(g_pkMainChar->m_CharTitleName);
  ((void (__stdcall *)(_DWORD))v2->m_pkSubNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v2->m_kCurrentTitle.Type = 0;
  v43 = g_pkMainChar;
  v44 = 0;
  pkTextWin_3 = 0;
  if ( g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6] )
  {
    do
    {
      if ( pkTextWin_3 )
        break;
      if ( (*((_BYTE *)&v43[1].baseclass_0.vfptr + 2 * (_DWORD)v44 + 1) & 0xC0) == -64 )
      {
        v2->m_kCurrentTitle.Type = *((_BYTE *)&v43[1].baseclass_0.vfptr + 2 * (_DWORD)v44);
        pkTextWin_3 = 1;
        v2->m_kCurrentTitle._bf1 ^= (v2->m_kCurrentTitle._bf1 ^ *((_BYTE *)&g_pkMainChar[1].baseclass_0.vfptr
                                                                + 2 * (_DWORD)v44
                                                                + 1)) & 0x3F;
        v43 = g_pkMainChar;
      }
      v44 = (NiGeometry *)((char *)v44 + 1);
    }
    while ( v44 < v43[1].m_kCharShape.m_apkLodGeom[6] );
  }
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "sID", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v45 = Font::Get(MAIN_MENU),
        pkTextWinr = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v45,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v46 = TextData::Get(0x80A49695u),
        v161->__vecDelDtor(pkTextWinr, v46),
        ((void (__stdcall *)(_DWORD))pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "sIDTxt", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v47 = Font::Get(MAIN_MENU),
        v48 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v47,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkCharNameTextWin = v48,
        v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v48,
          (unsigned int)"-"),
        ((void (__stdcall *)(_DWORD))v2->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Job", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v49 = Font::Get(MAIN_MENU),
        pkTextWins = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v49,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWins->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v50 = TextData::Get(0x4A5F8BA3u),
        v161->__vecDelDtor(pkTextWins, v50),
        ((void (__stdcall *)(_DWORD))pkTextWins->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "JobTxt", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v51 = Font::Get(MAIN_MENU),
        v52 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v51,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkJobTextWin = v52,
        v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v52,
          (unsigned int)"-"),
        ((void (__stdcall *)(_DWORD))v2->m_pkJobTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Guild", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v53 = Font::Get(MAIN_MENU),
        pkTextWint = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v53,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v54 = TextData::Get(0x8BAB92A9u),
        v161->__vecDelDtor(pkTextWint, v54),
        ((void (__stdcall *)(_DWORD))pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GuildTxt", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v55 = Font::Get(MAIN_MENU),
        v56 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v55,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkGuildTextWin = v56,
        v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v56,
          (unsigned int)"-"),
        ((void (__stdcall *)(_DWORD))v2->m_pkGuildTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "nExp", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v57 = Font::Get(MAIN_MENU),
        pkTextWinu = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v57,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)pkTextWinu,
          0),
        v161 = pkTextWinu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v58 = TextData::Get(0x455F99ACu),
        v161->__vecDelDtor(pkTextWinu, v58),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "nExpVal", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v59 = Font::Get(MAIN_MENU),
        v60 = (PgWin *)PgWinText::CreateWin(
                         uiLeft - v10,
                         uiTop - v11,
                         uiWidth,
                         uiHeight,
                         v59,
                         &v2->baseclass_0.baseclass_0.baseclass_0,
                         0,
                         0),
        v2->m_pkExpTextWin = (PgWinText *)v60,
        PgWin::SetToolTipWinText(v60, &byte_98F737),
        v2->m_pkExpTextWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "honor", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v61 = Font::Get(MAIN_MENU),
        pkTextWinv = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v61,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)pkTextWinv,
          0),
        v161 = pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v62 = TextData::Get(0x9BAE96E8u),
        v161->__vecDelDtor(pkTextWinv, v62),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "honorVal", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v63 = Font::Get(MAIN_MENU),
        v64 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v63,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkFamousTextWin = v64,
        v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v64,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Strength", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v65 = Font::Get(MAIN_MENU),
        pkTextWinw = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v65,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWinw->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v66 = TextData::Get(0x535F9BA8u),
        v161->__vecDelDtor(pkTextWinw, v66),
        v67 = TextData::Get(0xFB0A3A40u),
        PgWin::SetToolTipWinText(&pkTextWinw->baseclass_0, v67),
        pkTextWinw->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Dexterity", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v68 = Font::Get(MAIN_MENU),
        pkTextWinx = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v68,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWinx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v69 = TextData::Get(0x445FA199u),
        v161->__vecDelDtor(pkTextWinx, v69),
        v70 = TextData::Get(0xEC0A4031u),
        PgWin::SetToolTipWinText(&pkTextWinx->baseclass_0, v70),
        pkTextWinx->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Constitution", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v71 = Font::Get(MAIN_MENU),
        pkTextWiny = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v71,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v72 = TextData::Get(0x9CAB8AE1u),
        v161->__vecDelDtor(pkTextWiny, v72),
        v73 = TextData::Get(0x34533580u),
        PgWin::SetToolTipWinText(&pkTextWiny->baseclass_0, v73),
        pkTextWiny->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Intelligence", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v74 = Font::Get(MAIN_MENU),
        pkTextWinz = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       uiWidth,
                       uiHeight,
                       v74,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v161 = pkTextWinz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v75 = TextData::Get(0x495F9DA2u),
        v161->__vecDelDtor(pkTextWinz, v75),
        v76 = TextData::Get(0xF10A3C3Au),
        PgWin::SetToolTipWinText(&pkTextWinz->baseclass_0, v76),
        pkTextWinz->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MentalPower", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v77 = Font::Get(MAIN_MENU),
        pkTextWinba = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v77,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinba->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v78 = TextData::Get(0x575F9C9Du),
        v161->__vecDelDtor(pkTextWinba, v78),
        v79 = TextData::Get(0xFF0A3B35u),
        PgWin::SetToolTipWinText(&pkTextWinba->baseclass_0, v79),
        pkTextWinba->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "StrNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v80 = Font::Get(MAIN_MENU),
        v81 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v80,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkStrTextWin = v81,
        v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v81,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "DexNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v82 = Font::Get(MAIN_MENU),
        v83 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v82,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkDexTextWin = v83,
        v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v83,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ConNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v84 = Font::Get(MAIN_MENU),
        v85 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v84,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkConTextWin = v85,
        v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v85,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "IntNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v86 = Font::Get(MAIN_MENU),
        v87 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v86,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkIntTextWin = v87,
        v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v87,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "HP", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v88 = Font::Get(MAIN_MENU),
        pkTextWinbb = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v88,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v89 = TextData::Get(0x485F49A4u),
        v161->__vecDelDtor(pkTextWinbb, v89),
        v90 = TextData::Get(0xE007F443u),
        PgWin::SetToolTipWinText(&pkTextWinbb->baseclass_0, v90),
        pkTextWinbb->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "HPNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v91 = Font::Get(MAIN_MENU),
        v92 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v91,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkHPNumTextWin = v92,
        v92->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v92,
          2u),
        ((void (__stdcall *)(_DWORD))v2->m_pkHPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-"),
        ((void (__stdcall *)(_DWORD))v2->m_pkHPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "SP", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v93 = Font::Get(MAIN_MENU),
        v94 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v93,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkSPTextWin = v94,
        pkTextWinbc = (int)&v94->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118],
        v95 = TextData::Get(0x535F49A4u),
        (*(void (__thiscall **)(PgWinText *, char *))pkTextWinbc)(v2->m_pkSPTextWin, v95),
        ((void (__stdcall *)(_DWORD))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        ((void (__stdcall *)(_DWORD))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
        v96 = TextData::Get(0xEB07F443u),
        PgWin::SetToolTipWinText(&v2->m_pkSPTextWin->baseclass_0, v96),
        v2->m_pkSPTextWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        v97 = Font::Get(MAIN_MENU),
        v98 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v97,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkLPTextWin = v98,
        v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v98,
          (unsigned int)"LP"),
        ((void (__stdcall *)(_DWORD))v2->m_pkLPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        ((void (__stdcall *)(_DWORD))v2->m_pkLPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
        v99 = TextData3::Get(0x9BB29B7Du),
        PgWin::SetToolTipWinText(&v2->m_pkLPTextWin->baseclass_0, v99),
        v2->m_pkLPTextWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "SPNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v100 = Font::Get(MAIN_MENU),
        v101 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v100,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkSPNumTextWin = v101,
        v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v101,
          2u),
        ((void (__stdcall *)(_DWORD))v2->m_pkSPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-"),
        ((void (__stdcall *)(_DWORD))v2->m_pkSPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        ((void (__stdcall *)(_DWORD))v2->m_pkSPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
        v102 = Font::Get(MAIN_MENU),
        v103 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v102,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkLPNumTextWin = v103,
        v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v103,
          2u),
        ((void (__stdcall *)(_DWORD))v2->m_pkLPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-"),
        ((void (__stdcall *)(_DWORD))v2->m_pkLPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        ((void (__stdcall *)(_DWORD))v2->m_pkLPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Point", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v104 = Font::Get(MAIN_MENU),
        pkTextWinbd = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v104,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v105 = TextData::Get(0xA4AD92A3u),
        v161->__vecDelDtor(pkTextWinbd, v105),
        v106 = TextData::Get(0x43453A4Eu),
        PgWin::SetToolTipWinText(&pkTextWinbd->baseclass_0, v106),
        pkTextWinbd->baseclass_0.m_pkToolTipWin = g_pkToolTipWin,
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "PointNum", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
    goto LABEL_76;
  v107 = Font::Get(MAIN_MENU);
  v108 = PgWinText::CreateWin(
           uiLeft - v10,
           uiTop - v11,
           uiWidth,
           uiHeight,
           v107,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkPointNumTextWin = v108;
  v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v108,
    2u);
  ((void (__stdcall *)(_DWORD))v2->m_pkPointNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
  ((void (__stdcall *)(_DWORD))v2->m_pkPointNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "KillPoint", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v109 = Font::Get(MAIN_MENU);
    pkTextWinbe = PgWinText::CreateWin(
                    uiLeft - v10,
                    uiTop - v11,
                    uiWidth,
                    uiHeight,
                    v109,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
    v161 = pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118;
    v110 = TextData::Get(0xF8F4E441u);
    v161->__vecDelDtor(pkTextWinbe, v110);
    v111 = TextData::Get(0x909C8FE0u);
    PgWin::SetToolTipWinText(&pkTextWinbe->baseclass_0, v111);
    pkTextWinbe->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "KillPointVal", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v112 = Font::Get(MAIN_MENU);
    v113 = PgWinText::CreateWin(
             uiLeft - v10,
             uiTop - v11,
             uiWidth,
             uiHeight,
             v112,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkPkKillCountTextWin = v113;
    v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v113,
      1u);
    ((void (__stdcall *)(_DWORD))v2->m_pkPkKillCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
    ((void (__stdcall *)(_DWORD))v2->m_pkPkKillCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Point01", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v114 = Font::Get(MAIN_MENU),
        pkTextWinbf = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v114,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v115 = TextData::Get(0x36602732u),
        v161->__vecDelDtor(pkTextWinbf, v115),
        ((void (__stdcall *)(_DWORD))pkTextWinbf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "PointNum01", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v116 = Font::Get(MAIN_MENU),
        v117 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v116,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkRedistributePointText = v117,
        v117->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v117,
          2u),
        ((void (__stdcall *)(_DWORD))v2->m_pkRedistributePointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-"),
        ((void (__stdcall *)(_DWORD))v2->m_pkRedistributePointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MenNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v118 = Font::Get(MAIN_MENU),
        v119 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v118,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkMenTextWin = v119,
        v119->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v119,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WeaponClass", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v120 = Font::Get(MAIN_MENU),
        pkTextWinbg = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v120,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v121 = TextData::Get(0xD342414Au),
        v161->__vecDelDtor(pkTextWinbg, v121),
        ((void (__stdcall *)(_DWORD))pkTextWinbg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WPNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v122 = Font::Get(MAIN_MENU),
        v123 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v122,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkWCTextWin = v123,
        v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v123,
          0),
        ((void (__stdcall *)(signed int))v2->m_pkWCTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(2),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ArmorClass", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v124 = Font::Get(MAIN_MENU),
        pkTextWinbh = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v124,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v125 = TextData::Get(0x34482B2Bu),
        v161->__vecDelDtor(pkTextWinbh, v125),
        ((void (__stdcall *)(_DWORD))pkTextWinbh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ACNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v126 = Font::Get(MAIN_MENU),
        v127 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v126,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkACTextWin = v127,
        v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v127,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ToHit", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v128 = Font::Get(MAIN_MENU),
        pkTextWinbi = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v128,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbi->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v129 = TextData::Get(0x9A03F1DEu),
        v161->__vecDelDtor(pkTextWinbi, v129),
        ((void (__stdcall *)(_DWORD))pkTextWinbi->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "THNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v130 = Font::Get(MAIN_MENU),
        v131 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v130,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkTHTextWin = v131,
        v131->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v131,
          0),
        ((void (__stdcall *)(signed int))v2->m_pkTHTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(2),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ToBlock", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v132 = Font::Get(MAIN_MENU),
        pkTextWinbj = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v132,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v133 = TextData::Get(0xD9E9EA4Eu),
        v161->__vecDelDtor(pkTextWinbj, v133),
        ((void (__stdcall *)(_DWORD))pkTextWinbj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "TBNum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v134 = Font::Get(MAIN_MENU),
        v135 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v134,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkTBTextWin = v135,
        v135->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v135,
          0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MagicAtt", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v136 = Font::Get(MAIN_MENU),
        pkTextWinbk = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v136,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v137 = TextData::Get(0x3B4B7398u),
        v161->__vecDelDtor(pkTextWinbk, v137),
        ((void (__stdcall *)(_DWORD))pkTextWinbk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MANum", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v138 = Font::Get(MAIN_MENU),
        v139 = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 uiWidth,
                 uiHeight,
                 v138,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
        v2->m_pkMATextWin = v139,
        v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v139,
          0),
        ((void (__stdcall *)(signed int))v2->m_pkMATextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(2),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MagicRes", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v140 = Font::Get(MAIN_MENU),
        pkTextWinbl = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v140,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v161 = pkTextWinbl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118,
        v141 = TextData::Get(0x2D3C7698u),
        v161->__vecDelDtor(pkTextWinbl, v141),
        ((void (__stdcall *)(_DWORD))pkTextWinbl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MRNum", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_76:
    v168 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v142 = Font::Get(MAIN_MENU);
  v143 = PgWinText::CreateWin(
           uiLeft - v10,
           uiTop - v11,
           uiWidth,
           uiHeight,
           v142,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkMRTextWin = v143;
  ((void (__thiscall *)(PgWinText *))v143->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v143);
  ((void (__cdecl *)(signed int, _DWORD))v2->m_pkMRTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    2,
    0);
  pkTextWinbm = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWinbm, &spNode.m_pObject->baseclass_0, "Btn04Click");
  PgSprData::Add(pkTextWinbm, &spNode.m_pObject->baseclass_0, "Btn04Over");
  PgSprData::Add(pkTextWinbm, &spNode.m_pObject->baseclass_0, "Btn04Disable");
  v144 = PgWinBut::CreateWin(
           uiLeft - v10,
           uiTop - v11,
           pkTextWinbm,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x17u,
           0,
           0);
  pkTextWinbn = (PgWin *)v144;
  v144->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v145 = TextData2::Get(0xFF286B7Bu);
  PgWin::SetToolTipWinText(pkTextWinbn, v145);
  v146 = Font::Get(MAIN_MENU);
  v147 = ((int (*)(void))pkTextWinbn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v148 = ((int (*)(void))pkTextWinbn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  pkTextWinbo = PgWinText::CreateWin(0, 0, v148, v147, v146, pkTextWinbn, 0, 0);
  ((void (__thiscall *)(PgWinText *))pkTextWinbo->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(pkTextWinbo);
  v161 = pkTextWinbo->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118;
  TextData2::Get(0x80AC7BC0u);
  ((void (__thiscall *)(PgWinText *))v161->__vecDelDtor)(pkTextWinbo);
  ((void (__stdcall *)(_DWORD))pkTextWinbo->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWinbp = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FreeStatNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWinbp, &spNode.m_pObject->baseclass_0, "FreeStatClick");
  PgSprData::Add(pkTextWinbp, &spNode.m_pObject->baseclass_0, "FreeStatOver");
  v149 = PgWinBut::CreateWin(
           uiLeft - v10,
           uiTop - v11,
           pkTextWinbp,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x15u,
           0,
           0);
  pkTextWinbq = v149;
  v150 = (PgWin *)v149;
  v151 = Font::Get(MAIN_MENU);
  v152 = ((int (*)(void))pkTextWinbq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v153 = ((int (*)(void))pkTextWinbq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  pkTextWinbr = PgWinText::CreateWin(0, 1, v153, v152, v151, v150, 0, 0);
  pkTextWinbr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWinbr,
    5u);
  v161 = pkTextWinbr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118;
  v154 = TextData::Get(0xE9F84123u);
  v161->__vecDelDtor(pkTextWinbr, v154);
  ((void (__stdcall *)(_DWORD))pkTextWinbr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v168) = 1;
  UIUtil::SetOffset(&ui, v10, v11);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  ((void (__thiscall *)(CharInfoWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  v155 = MenuTexMgr::GetTexture(1u);
  v2->m_pkFreeStatView = FreeStatView::CreateWin(v155, 7u, 7u);
  LOBYTE(v168) = 0;
  UIUtil::_UIUtil(&ui);
  v168 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004E1D60) --------------------------------------------------------
CHAR_CHANGEBYCONDITION_PARAM *__thiscall CharInfoWin::FindConditionParam(CHAR_CHANGEBYCONDITION_PARAM *this, CharInfoWin *index, int nFlag, char retstr)
{
  int v4; // edi@1
  CHAR_CHANGEBYCONDITION_PARAM *result; // eax@1
  unsigned int v6; // esi@1
  int v7; // ecx@1
  int v8; // edx@2

  v4 = *(_DWORD *)&this[104].nFlag;
  result = (CHAR_CHANGEBYCONDITION_PARAM *)index;
  v6 = 0;
  v7 = (signed int)(*(unsigned int *)((char *)&this[104].nValue + 2) - v4) / 6;
  if ( v7 )
  {
    v8 = v4;
    if ( (unsigned int)v7 <= 0 )
      std::_Xout_of_range("invalid vector<T> subscript");
    do
    {
      index->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = *(NiRefObjectVtbl **)v8;
      LOWORD(index->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) = *(_WORD *)(v8 + 4);
      if ( LOBYTE(index->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr) == retstr
        && BYTE1(index->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr) == nFlag )
        break;
      ++v6;
      v8 += 6;
    }
    while ( v7 > v6 );
  }
  return result;
}
// 4E1D60: inconsistent function type and number of purged bytes

//----- (004E1DD0) --------------------------------------------------------
void __thiscall CharInfoWin::SetClass(CharInfoWin *this, char kClassID)
{
  CharInfoWin *v2; // esi@1
  void *v3; // eax@1
  int v4; // eax@2

  v2 = this;
  v3 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
         (unsigned __int8)kClassID);
  if ( v3 )
    v4 = (int)((char *)v3 + 21);
  else
    v4 = (int)&byte_9788EB;
  ((void (__stdcall *)(_DWORD))v2->m_pkJobTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v4);
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004E1E10) --------------------------------------------------------
void __thiscall CharInfoWin::SetChangeConParamInfo(CharInfoWin *this, PassiveSkillInfo *pkInfo)
{
  CharInfoWin *v2; // esi@1
  int v3; // eax@2
  char v4; // cl@3
  int v5; // ST20_4@6
  int v6; // ST1C_4@6
  int v7; // ST18_4@6
  int v8; // eax@6
  int v9; // ST1C_4@6
  int v10; // eax@6
  int v11; // ST1C_4@6
  int v12; // eax@6
  int v13; // ST18_4@6
  int v14; // eax@6
  int v15; // ST1C_4@6
  int v16; // ST18_4@6
  int v17; // ST14_4@6
  int v18; // eax@6
  int v19; // ST20_4@7
  int v20; // ST1C_4@7
  int v21; // ST18_4@7
  int v22; // eax@7
  int v23; // ST1C_4@7
  int v24; // eax@7
  int v25; // ST1C_4@7
  int v26; // eax@7
  int v27; // ST1C_4@7
  int v28; // eax@7
  int v29; // ST20_4@7
  int v30; // ST1C_4@7
  int v31; // ST18_4@7
  int v32; // eax@7
  unsigned int v33; // eax@9
  double v34; // st6@9
  int v35; // edi@11
  unsigned __int64 v36; // ST0C_8@11
  int v37; // ST08_4@11
  int v38; // eax@11
  int v39; // ST10_4@11
  int v40; // ST0C_4@11
  int v41; // ST08_4@11
  int v42; // eax@11
  int v43; // ST0C_4@11
  int v44; // eax@11
  int v45; // ST0C_4@11
  int v46; // eax@11
  int v47; // ST0C_4@11
  int v48; // eax@11
  int v49; // ST0C_4@12
  int v50; // eax@12
  unsigned int v51; // eax@14
  double v52; // st6@14
  int v53; // edi@16
  int v54; // ST14_4@16
  int v55; // eax@16
  int v56; // ST14_4@16
  int v57; // eax@16
  int v58; // ST18_4@16
  int v59; // ST14_4@16
  int v60; // ST10_4@16
  int v61; // eax@16
  int v62; // ST14_4@16
  int v63; // eax@16
  int v64; // ST14_4@16
  int v65; // eax@16
  int v66; // ST18_4@16
  int v67; // ST14_4@16
  int v68; // ST10_4@16
  int v69; // eax@16
  float v70; // [sp+10h] [bp-230h]@5
  CHAR_CHANGEBYCONDITION_PARAM pkParamWCLow; // [sp+1Ch] [bp-224h]@11
  CHAR_CHANGEBYCONDITION_PARAM pkParamMR; // [sp+24h] [bp-21Ch]@11
  double pkParamAC; // [sp+2Ch] [bp-214h]@9
  int HPRate; // [sp+34h] [bp-20Ch]@6
  char acPassiveInxName[256]; // [sp+3Ch] [bp-204h]@2
  char acConversionData[256]; // [sp+13Ch] [bp-104h]@2
  unsigned int v77; // [sp+23Ch] [bp-4h]@1
  int v78; // [sp+240h] [bp+0h]@1

  v77 = (unsigned int)&v78 ^ __security_cookie;
  v2 = this;
  if ( pkInfo )
  {
    acPassiveInxName[0] = 0;
    memset(&acPassiveInxName[1], 0, 0xFFu);
    acConversionData[0] = 0;
    memset(&acConversionData[1], 0, 0xFFu);
    sprintf(acPassiveInxName, "%s");
    v3 = (int)acPassiveInxName;
    do
      v4 = *(_BYTE *)v3++;
    while ( v4 );
    strncpy(acConversionData, acPassiveInxName, v3 - (_DWORD)&acPassiveInxName[1] - 2);
    if ( !strcmp(acConversionData, "MoveEvasion") )
    {
      v70 = 1.0;
      if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() )
      {
        v5 = User::ChangeWChigh(&g_kUser);
        v6 = User::BaseWChigh(&g_kUser);
        v7 = User::ChangeWClow(&g_kUser);
        v8 = User::BaseWClow(&g_kUser);
        CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkWCTextWin, v8, v7, v6, v5, v70);
        v9 = User::ChangeAC(&g_kUser);
        v10 = User::BaseAC(&g_kUser);
        CharInfoWin::SetParamTextWin(v2, v2->m_pkACTextWin, v10, v9, 0, 1.0);
        v11 = User::ChangeTH(&g_kUser);
        v12 = User::BaseTH(&g_kUser);
        CharInfoWin::SetParamTextWin(v2, v2->m_pkTHTextWin, v12, v11, 0, 1.0);
        CharInfoWin::FindConditionParam((CHAR_CHANGEBYCONDITION_PARAM *)v2, (CharInfoWin *)&HPRate, 0, 35);
        v13 = *(int *)((char *)&HPRate + 2);
        v14 = User::BaseTB(&g_kUser);
        CharInfoWin::SetParamTextWin(v2, v2->m_pkTBTextWin, v14, v13, 0, 1.0);
        v15 = User::ChangeMAhigh(&g_kUser);
        v16 = User::BaseMAhigh(&g_kUser);
        v17 = User::ChangeMAlow(&g_kUser);
        v18 = User::BaseMAlow(&g_kUser);
        CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkMATextWin, v18, v17, v16, v15, 1.0);
      }
      else
      {
        v19 = User::ChangeWChigh(&g_kUser);
        v20 = User::BaseWChigh(&g_kUser);
        v21 = User::ChangeWClow(&g_kUser);
        v22 = User::BaseWClow(&g_kUser);
        CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkWCTextWin, v22, v21, v20, v19, v70);
        v23 = User::ChangeAC(&g_kUser);
        v24 = User::BaseAC(&g_kUser);
        CharInfoWin::SetParamTextWin(v2, v2->m_pkACTextWin, v24, v23, 0, 1.0);
        v25 = User::ChangeTH(&g_kUser);
        v26 = User::BaseTH(&g_kUser);
        CharInfoWin::SetParamTextWin(v2, v2->m_pkTHTextWin, v26, v25, 0, 1.0);
        v27 = User::ChangeTB(&g_kUser);
        v28 = User::BaseTB(&g_kUser);
        CharInfoWin::SetParamTextWin(v2, v2->m_pkTBTextWin, v28, v27, 0, 1.0);
        v29 = User::ChangeMAhigh(&g_kUser);
        v30 = User::BaseMAhigh(&g_kUser);
        v31 = User::ChangeMAlow(&g_kUser);
        v32 = User::BaseMAlow(&g_kUser);
        CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkMATextWin, v32, v31, v30, v29, 1.0);
      }
LABEL_12:
      v49 = User::ChangeMR(&g_kUser);
      v50 = User::BaseMR(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkMRTextWin, v50, v49, 0, 1.0);
      return;
    }
    if ( !strcmp(acConversionData, "StrongFury") )
    {
      pkParamAC = (double)User::MaxHP(&g_kUser);
      pkParamAC = pkParamAC - (double)User::HP(&g_kUser);
      HPRate = User::MaxHP(&g_kUser);
      v33 = v2->m_uiSectionRate;
      *(float *)&HPRate = pkParamAC / (double)HPRate * 100.0;
      v34 = (double)(signed int)v2->m_uiSectionRate;
      if ( (v33 & 0x80000000u) != 0 )
        v34 = v34 + 4294967300.0;
      v35 = (signed int)(*(float *)&HPRate / v34);
      CharInfoWin::FindConditionParam((CHAR_CHANGEBYCONDITION_PARAM *)v2, (CharInfoWin *)&pkParamWCLow, v35, 28);
      CharInfoWin::FindConditionParam((CHAR_CHANGEBYCONDITION_PARAM *)v2, (CharInfoWin *)&HPRate, v35, 29);
      CharInfoWin::FindConditionParam((CHAR_CHANGEBYCONDITION_PARAM *)v2, (CharInfoWin *)&pkParamAC, v35, 30);
      CharInfoWin::FindConditionParam((CHAR_CHANGEBYCONDITION_PARAM *)v2, (CharInfoWin *)&pkParamMR, v35, 31);
      v36 = __PAIR__(*(int *)((char *)&HPRate + 2), User::BaseWChigh(&g_kUser));
      v37 = pkParamWCLow.nValue;
      v38 = User::BaseWClow(&g_kUser);
      CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkWCTextWin, v38, v37, v36, SHIDWORD(v36), 1.0);
      v39 = pkParamMR.nValue;
      v40 = User::BaseMAhigh(&g_kUser);
      v41 = *(_DWORD *)((char *)&pkParamAC + 2);
      v42 = User::BaseMAlow(&g_kUser);
      CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkMATextWin, v42, v41, v40, v39, 1.0);
      v43 = User::ChangeAC(&g_kUser);
      v44 = User::BaseAC(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkACTextWin, v44, v43, 0, 1.0);
      v45 = User::ChangeTH(&g_kUser);
      v46 = User::BaseTH(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkTHTextWin, v46, v45, 0, 1.0);
      v47 = User::ChangeTB(&g_kUser);
      v48 = User::BaseTB(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkTBTextWin, v48, v47, 0, 1.0);
      goto LABEL_12;
    }
    if ( !strcmp(acConversionData, "StrongEndure") )
    {
      pkParamAC = (double)User::MaxHP(&g_kUser);
      pkParamAC = pkParamAC - (double)User::HP(&g_kUser);
      HPRate = User::MaxHP(&g_kUser);
      v51 = v2->m_uiSectionRate;
      *(float *)&HPRate = pkParamAC / (double)HPRate * 100.0;
      v52 = (double)(signed int)v2->m_uiSectionRate;
      if ( (v51 & 0x80000000u) != 0 )
        v52 = v52 + 4294967300.0;
      v53 = (signed int)(*(float *)&HPRate / v52);
      CharInfoWin::FindConditionParam((CHAR_CHANGEBYCONDITION_PARAM *)v2, (CharInfoWin *)&pkParamAC, v53, 32);
      CharInfoWin::FindConditionParam((CHAR_CHANGEBYCONDITION_PARAM *)v2, (CharInfoWin *)&pkParamMR, v53, 33);
      v54 = *(_DWORD *)((char *)&pkParamAC + 2);
      v55 = User::BaseAC(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkACTextWin, v55, v54, 0, 1.0);
      v56 = pkParamMR.nValue;
      v57 = User::BaseMR(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkMRTextWin, v57, v56, 0, 1.0);
      v58 = User::ChangeWChigh(&g_kUser);
      v59 = User::BaseWChigh(&g_kUser);
      v60 = User::ChangeWClow(&g_kUser);
      v61 = User::BaseWClow(&g_kUser);
      CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkWCTextWin, v61, v60, v59, v58, 1.0);
      v62 = User::ChangeTH(&g_kUser);
      v63 = User::BaseTH(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkTHTextWin, v63, v62, 0, 1.0);
      v64 = User::ChangeTB(&g_kUser);
      v65 = User::BaseTB(&g_kUser);
      CharInfoWin::SetParamTextWin(v2, v2->m_pkTBTextWin, v65, v64, 0, 1.0);
      v66 = User::ChangeMAhigh(&g_kUser);
      v67 = User::BaseMAhigh(&g_kUser);
      v68 = User::ChangeMAlow(&g_kUser);
      v69 = User::BaseMAlow(&g_kUser);
      CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkMATextWin, v69, v68, v67, v66, 1.0);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004E2580) --------------------------------------------------------
void __thiscall CharInfoWin::EnablePassiveSkillID(CharInfoWin *this, unsigned __int16 kID)
{
  int v2; // edx@1
  char *v3; // esi@1
  signed int v4; // eax@1
  unsigned __int16 v5; // di@1
  unsigned int v6; // ecx@1
  unsigned int v7; // eax@5
  int v8; // edx@6
  int v9; // ecx@7
  signed int v10; // edi@7
  int v11; // eax@8
  int v12; // eax@11
  int v13; // ecx@11
  unsigned int v14; // ecx@13
  int v15; // eax@18
  int v16; // ecx@20
  int v17; // eax@21
  int v18; // eax@23
  int v19; // ecx@23
  unsigned int v20; // ecx@25
  int v21; // eax@30

  v2 = *(_DWORD *)&this->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (char *)&this->m_kChar_ChangeCondition._vecUsingPassiveSkill;
  v4 = (signed int)((char *)this->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast - v2) >> 1;
  v5 = kID;
  v6 = 0;
  if ( v4 )
  {
    if ( (unsigned int)v4 <= 0 )
      std::_Xout_of_range("invalid vector<T> subscript");
    while ( *(_WORD *)v2 != kID )
    {
      ++v6;
      v2 += 2;
      if ( v4 <= v6 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    v7 = *((_DWORD *)v3 + 1);
    if ( (unsigned int)&kID >= v7 || (v8 = *(_DWORD *)v3, *(_DWORD *)v3 > (unsigned int)&kID) )
    {
      v16 = *((_DWORD *)v3 + 2);
      if ( v7 == v16 )
      {
        v17 = (signed int)(v7 - *(_DWORD *)v3) >> 1;
        if ( (unsigned int)v17 > 0x7FFFFFFE )
          std::_Xlength_error("vector<T> too long");
        v18 = v17 + 1;
        v19 = (v16 - *(_DWORD *)v3) >> 1;
        if ( v18 > (unsigned int)v19 )
        {
          if ( 2147483647 - ((unsigned int)v19 >> 1) >= v19 )
            v20 = ((unsigned int)v19 >> 1) + v19;
          else
            v20 = 0;
          if ( v20 < v18 )
            v20 = v18;
          std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(
            (std::vector<unsigned short,std::allocator<unsigned short> > *)v3,
            v20);
        }
      }
      v21 = *((_DWORD *)v3 + 1);
      if ( v21 )
        *(_WORD *)v21 = v5;
    }
    else
    {
      v9 = *((_DWORD *)v3 + 2);
      v10 = (signed int)((char *)&kID - v8) >> 1;
      if ( v7 == v9 )
      {
        v11 = (signed int)(v7 - v8) >> 1;
        if ( (unsigned int)v11 > 0x7FFFFFFE )
          std::_Xlength_error("vector<T> too long");
        v12 = v11 + 1;
        v13 = (v9 - v8) >> 1;
        if ( v12 > (unsigned int)v13 )
        {
          if ( 2147483647 - ((unsigned int)v13 >> 1) >= v13 )
            v14 = ((unsigned int)v13 >> 1) + v13;
          else
            v14 = 0;
          if ( v14 < v12 )
            v14 = v12;
          std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(
            (std::vector<unsigned short,std::allocator<unsigned short> > *)v3,
            v14);
        }
      }
      v15 = *((_DWORD *)v3 + 1);
      if ( v15 )
      {
        *(_WORD *)v15 = *(_WORD *)(*(_DWORD *)v3 + 2 * v10);
        *((_DWORD *)v3 + 1) += 2;
        return;
      }
    }
    *((_DWORD *)v3 + 1) += 2;
  }
}

//----- (004E26A0) --------------------------------------------------------
void __thiscall CharInfoWin::CharInfoWin(CharInfoWin *this)
{
  CharInfoWin *v1; // esi@1
  void *v2; // eax@1
  void *v3; // edi@1
  void *v4; // eax@2
  StatPointReqTask *v5; // edi@4
  char *v6; // edi@12
  char *v7; // eax@12
  char *v8; // edi@15
  char *v9; // ecx@15
  CHAR_CHANGEBYCONDITION_PARAM *v10; // ecx@18
  void *v13; // [sp+4h] [bp-10h]@2

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharInfoWin::_vftable_;
  v1->m_spStatPointReqTask.m_pObject = 0;
  *(_DWORD *)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecConditionParam.baseclass_0._Mylast = 0;
  v1->m_vecConditionParam.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast = 0;
  v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Myend = 0;
  v1->m_pkCharNameTextWin = 0;
  v1->m_pkLevelTextWin = 0;
  v1->m_pkRaceTextWin = 0;
  v1->m_pkExpTextWin = 0;
  v1->m_pkNextExpTextWin = 0;
  v1->m_pkStrTextWin = 0;
  v1->m_pkDexTextWin = 0;
  v1->m_pkConTextWin = 0;
  v1->m_pkIntTextWin = 0;
  v1->m_pkMenTextWin = 0;
  v1->m_pkWCTextWin = 0;
  v1->m_pkACTextWin = 0;
  v1->m_pkTHTextWin = 0;
  v1->m_pkTBTextWin = 0;
  v1->m_pkMATextWin = 0;
  v1->m_pkMRTextWin = 0;
  v1->m_pkStatTitleText = 0;
  v1->m_pkCharmPointText = 0;
  v1->m_pkRecvCharmPointText = 0;
  v1->m_pkStatTitlePointText = 0;
  v1->m_pkStatTitleWin = 0;
  v1->m_pkCharTitleWin = 0;
  v1->m_pkSubNameTextWin = 0;
  v1->m_pkJobTextWin = 0;
  v1->m_pkGuildTextWin = 0;
  v1->m_pkHPNumTextWin = 0;
  v1->m_pkSPNumTextWin = 0;
  v1->m_pkPointNumTextWin = 0;
  v1->m_pkPkKillCountTextWin = 0;
  v2 = operator new(0x44u);
  v3 = v2;
  if ( v2 )
  {
    ITask::ITask((ITask *)v2, 0);
    v4 = v3;
    *(_DWORD *)v3 = &StatPointReqTask::_vftable_;
    *((_DWORD *)v3 + 2) = &StatPointReqTask::_vftable_;
    v13 = v3;
  }
  else
  {
    v13 = 0;
    v4 = 0;
  }
  v5 = v1->m_spStatPointReqTask.m_pObject;
  if ( v5 != v4 )
  {
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v4 = v13;
    }
    v1->m_spStatPointReqTask.m_pObject = (StatPointReqTask *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)v4 + 1);
  }
  v1->m_spStatPointReqTask.m_pObject->baseclass_0.baseclass_8.vfptr->SetMsgHooker(
    &v1->m_spStatPointReqTask.m_pObject->baseclass_0.baseclass_8,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  v1->m_pkStrDnBtn = 0;
  v1->m_pkDexDnBtn = 0;
  v1->m_pkConDnBtn = 0;
  v1->m_pkIntDnBtn = 0;
  v1->m_pkMenDnBtn = 0;
  v1->m_pkRedistributePointText = 0;
  v1->m_bChangeCondition = 0;
  v1->m_uiConditionCount = 0;
  v1->m_uiSectionRate = 0;
  v6 = *(char **)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = (char *)v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast;
  if ( v6 != v7 )
  {
    memmove(v6, v7, 0);
    v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast = (unsigned __int16 *)v6;
  }
  if ( (unsigned int)((char *)v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast
                    - *(_DWORD *)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFE )
  {
    v8 = *(char **)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0];
    v9 = (char *)v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast;
    if ( v8 != v9 )
    {
      memmove(v8, v9, 0);
      v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast = (unsigned __int16 *)v8;
    }
  }
  if ( (signed int)((char *)v1->m_vecConditionParam.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0])
     / 6 )
  {
    v10 = *(CHAR_CHANGEBYCONDITION_PARAM **)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v10 != v1->m_vecConditionParam.baseclass_0._Mylast )
      v1->m_vecConditionParam.baseclass_0._Mylast = v10;
  }
  v1->m_pkSPTextWin = 0;
  v1->m_pkLPTextWin = 0;
  v1->m_pkLPNumTextWin = 0;
}
// 98FCB8: using guessed type int (__stdcall *StatPointReqTask___vftable_)(int uiFlags);
// 98FCD4: using guessed type int (__thiscall *StatPointReqTask___vftable_)(void *p, char);
// 98FCEC: using guessed type int (__stdcall *CharInfoWin___vftable_)(int uiFlags);
// 98FD0C: using guessed type int (__thiscall *CharInfoWin___vftable_)(void *p, char);

//----- (004E2980) --------------------------------------------------------
void __thiscall CharInfoWin::_CharInfoWin(CharInfoWin *this)
{
  CharInfoWin *v1; // esi@1
  StatPointReqTask *v2; // eax@1
  unsigned __int16 *v3; // ebx@1
  StatPointReqTask *v4; // edi@3
  CHAR_CHANGEBYCONDITION_PARAM *v5; // ecx@9
  char *v8; // ecx@14
  char *v9; // edi@14
  StatPointReqTask *v10; // edi@20

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharInfoWin::_vftable_;
  v2 = this->m_spStatPointReqTask.m_pObject;
  v3 = 0;
  if ( v2 )
    v2->baseclass_0.m_eTaskState = 2;
  v4 = this->m_spStatPointReqTask.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spStatPointReqTask.m_pObject = 0;
  }
  if ( (signed int)((char *)v1->m_vecConditionParam.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0])
     / 6 )
  {
    v5 = *(CHAR_CHANGEBYCONDITION_PARAM **)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v5 != v1->m_vecConditionParam.baseclass_0._Mylast )
      v1->m_vecConditionParam.baseclass_0._Mylast = v5;
  }
  if ( (unsigned int)((char *)v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast
                    - *(_DWORD *)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFE )
  {
    v8 = (char *)v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast;
    v9 = *(char **)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v9 != v8 )
    {
      memmove(v9, v8, 0);
      v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast = (unsigned __int16 *)v9;
      v3 = 0;
    }
  }
  v1->m_uiConditionCount = (unsigned int)v3;
  v1->m_uiSectionRate = (unsigned int)v3;
  v1->m_bChangeCondition = 0;
  if ( *(unsigned __int16 **)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0] != v3 )
    operator delete(*(void **)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast = v3;
  v1->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Myend = v3;
  if ( *(unsigned __int16 **)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0] != v3 )
    operator delete(*(void **)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecConditionParam.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  v1->m_vecConditionParam.baseclass_0._Mylast = (CHAR_CHANGEBYCONDITION_PARAM *)v3;
  v1->m_vecConditionParam.baseclass_0._Myend = (CHAR_CHANGEBYCONDITION_PARAM *)v3;
  v10 = v1->m_spStatPointReqTask.m_pObject;
  if ( (unsigned __int16 *)v10 != v3
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned __int16 *)v10 != v3 )
    v10->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 98FCEC: using guessed type int (__stdcall *CharInfoWin___vftable_)(int uiFlags);
// 98FD0C: using guessed type int (__thiscall *CharInfoWin___vftable_)(void *p, char);

//----- (004E2B40) --------------------------------------------------------
CharInfoWin *__cdecl CharInfoWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CharInfoWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x488u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CharInfoWin::CharInfoWin((CharInfoWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CharInfoWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004E2C70) --------------------------------------------------------
void __cdecl ConvertCommaNums(int x, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strNums)
{
  signed int v2; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  signed int v4; // ebx@1
  int v5; // eax@3
  char v6; // cl@4
  signed int v7; // edi@5
  double v8; // st7@7
  unsigned int v9; // eax@8
  double v10; // st5@10
  double v11; // st7@15
  int v12; // eax@17
  char v13; // cl@18
  double v14; // st7@19
  unsigned int v15; // edx@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // ecx@21
  unsigned int v17; // eax@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // ecx@24
  int v19; // eax@31
  char v20; // cl@32
  unsigned int v21; // ecx@34
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // edx@35
  unsigned int v23; // eax@37
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v24; // ecx@38
  unsigned int v25; // eax@43
  unsigned int v26; // edi@45
  unsigned int v27; // ecx@47
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v28; // eax@50
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v29; // eax@57
  int v30; // eax@60
  char v31; // cl@61
  unsigned int v32; // eax@62
  unsigned int v33; // edi@64
  unsigned int v34; // ecx@66
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v35; // eax@69
  double v36; // [sp+0h] [bp-ACh]@17
  int v37; // [sp+10h] [bp-9Ch]@7
  signed int val; // [sp+14h] [bp-98h]@1
  int iResult; // [sp+18h] [bp-94h]@1
  int iResulta; // [sp+18h] [bp-94h]@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNumber; // [sp+1Ch] [bp-90h]@3
  char str[64]; // [sp+38h] [bp-74h]@6
  char s[34]; // [sp+78h] [bp-34h]@3
  unsigned int v44; // [sp+9Ch] [bp-10h]@1
  int v45; // [sp+A8h] [bp-4h]@3
  int v46; // [sp+ACh] [bp+0h]@1

  v44 = (unsigned int)&v46 ^ __security_cookie;
  v2 = abs(x);
  v3 = strNums;
  v4 = v2 / 100;
  val = v2 % 100;
  iResult = v2 / 100;
  if ( x < 0 )
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(strNums, 1u, 45);
  strNumber.baseclass_0._Myres = 15;
  strNumber.baseclass_0._Mysize = 0;
  strNumber.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v45 = 0;
  _itoa(v4, s, 10);
  v5 = (int)s;
  do
    v6 = *(_BYTE *)v5++;
  while ( v6 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strNumber, s, v5 - (_DWORD)&s[1]);
  v7 = strNumber.baseclass_0._Mysize;
  if ( (signed int)strNumber.baseclass_0._Mysize > 0 )
  {
    while ( 1 )
    {
      str[0] = 0;
      memset(&str[1], 0, 0x3Fu);
      if ( v7 == 1 )
        break;
      v8 = 10.0;
      v37 = v7 - 1;
      if ( v7 - 1 < 0 )
        v9 = 1 - v7;
      else
        v9 = v7 - 1;
      v10 = 1.0;
      while ( 1 )
      {
        if ( v9 & 1 )
          v10 = v10 * v8;
        v9 >>= 1;
        if ( !v9 )
          break;
        v8 = v8 * v8;
      }
      v11 = v10;
      if ( v7 - 1 < 0 )
        v11 = 1.0 / v10;
      v36 = (double)iResult;
      iResulta = (signed int)(v36 / v11);
      _itoa(iResulta, str, 10);
      v12 = (int)str;
      do
        v13 = *(_BYTE *)v12++;
      while ( v13 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(strNums, str, v12 - (_DWORD)&str[1]);
      v14 = v36 - (double)iResulta * v11;
      v4 = (signed int)v14;
      iResult = (signed int)v14;
      if ( v7 % 3 == 1 )
      {
        v15 = strNums->baseclass_0._Myres;
        if ( v15 < 0x10 )
          v16 = strNums;
        else
          v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
        v17 = (unsigned int)((char *)v16 + strNums->baseclass_0._Mysize);
        if ( v15 < 0x10 )
          v18 = strNums;
        else
          v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v17 )
          v17 -= (unsigned int)v18;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(strNums, v17, 1u, 44);
      }
      --v7;
      if ( v37 <= 0 )
        goto LABEL_34;
    }
    _itoa(v4, str, 10);
    v19 = (int)str;
    do
      v20 = *(_BYTE *)v19++;
    while ( v20 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(strNums, str, v19 - (_DWORD)&str[1]);
  }
LABEL_34:
  v21 = strNums->baseclass_0._Myres;
  *(_DWORD *)s = 0;
  *(_DWORD *)&s[4] = 0;
  *(_DWORD *)&s[8] = 0;
  *(_DWORD *)&s[12] = 0;
  *(_DWORD *)&s[16] = 0;
  *(_DWORD *)&s[20] = 0;
  *(_DWORD *)&s[24] = 0;
  *(_DWORD *)&s[28] = 0;
  *(_WORD *)&s[32] = 0;
  if ( v21 < 0x10 )
    v22 = strNums;
  else
    v22 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
  v23 = (unsigned int)((char *)v22 + strNums->baseclass_0._Mysize);
  if ( v21 < 0x10 )
    v24 = strNums;
  else
    v24 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v23 )
    v23 -= (unsigned int)v24;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(strNums, v23, 1u, 46);
  if ( val < 10 )
  {
    v25 = strNums->baseclass_0._Mysize;
    if ( -1 - v25 <= 1 )
      std::_Xlength_error("string too long");
    v26 = v25 + 1;
    if ( v25 + 1 > 0xFFFFFFFE )
      std::_Xlength_error("string too long");
    v27 = strNums->baseclass_0._Myres;
    if ( v27 >= v26 )
    {
      if ( v25 == -1 )
      {
        strNums->baseclass_0._Mysize = 0;
        if ( v27 < 0x10 )
          strNums->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        else
          **(_BYTE **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        goto LABEL_60;
      }
    }
    else
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(
        strNums,
        v25 + 1,
        strNums->baseclass_0._Mysize);
      if ( !v26 )
        goto LABEL_60;
    }
    if ( strNums->baseclass_0._Myres < 0x10 )
      v28 = strNums;
    else
      v28 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
    v28->baseclass_0.___u0.baseclass_0.dummy[strNums->baseclass_0._Mysize] = 48;
    strNums->baseclass_0._Mysize = v26;
    if ( strNums->baseclass_0._Myres < 0x10 )
      v29 = strNums;
    else
      v29 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
    v29->baseclass_0.___u0.baseclass_0.dummy[v26] = 0;
  }
LABEL_60:
  _itoa(val, s, 10);
  v30 = (int)s;
  do
    v31 = *(_BYTE *)v30++;
  while ( v31 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(strNums, s, v30 - (_DWORD)&s[1]);
  v32 = strNums->baseclass_0._Mysize;
  if ( -1 - v32 <= 1 )
    std::_Xlength_error("string too long");
  v33 = v32 + 1;
  if ( v32 + 1 > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v34 = strNums->baseclass_0._Myres;
  if ( v34 < v33 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(
      strNums,
      v32 + 1,
      strNums->baseclass_0._Mysize);
    if ( !v33 )
      goto LABEL_78;
    goto LABEL_68;
  }
  if ( v32 != -1 )
  {
LABEL_68:
    if ( strNums->baseclass_0._Myres < 0x10 )
      v35 = strNums;
    else
      v35 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
    v35->baseclass_0.___u0.baseclass_0.dummy[strNums->baseclass_0._Mysize] = 77;
    strNums->baseclass_0._Mysize = v33;
    if ( strNums->baseclass_0._Myres >= 0x10 )
      v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
    v3->baseclass_0.___u0.baseclass_0.dummy[v33] = 0;
    goto LABEL_78;
  }
  strNums->baseclass_0._Mysize = 0;
  if ( v34 >= 0x10 )
    v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strNums->baseclass_0.___u0.baseclass_0.dummy[0];
  v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
LABEL_78:
  if ( strNumber.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strNumber);
}
// A85C00: using guessed type int __security_cookie;

//----- (004E3020) --------------------------------------------------------
void __thiscall CharInfoWin::UpdateMeWin(CharInfoWin *this, float fCurTime)
{
  CharInfoWin *v2; // esi@1
  Name5 *v3; // eax@1
  int v4; // ecx@1
  int v5; // edx@1
  int v6; // edi@1
  int v7; // ebx@1
  int v8; // eax@1
  PgWinText *v9; // eax@1
  char v10; // al@1
  NiRefObjectVtbl *v11; // edi@1
  char *v12; // eax@1
  __int64 v13; // qax@1
  __int64 v14; // qax@1
  __int64 v15; // kr10_8@1
  double v16; // st7@2
  CClientGuild *v17; // eax@13
  CClientGuild *v18; // eax@14
  PgWinText *v19; // ecx@14
  void *(__thiscall *v20)(NiRefObject *, unsigned int); // eax@14
  NiRefObjectVtbl *v21; // edi@17
  char *v22; // eax@17
  PROTO_NC_CHAR_BASE_CMD *v23; // edi@18
  int v24; // ST28_4@18
  int v25; // ST24_4@18
  int v26; // eax@18
  int v27; // ST28_4@18
  int v28; // ST24_4@18
  int v29; // eax@18
  int v30; // ST28_4@18
  int v31; // ST24_4@18
  int v32; // eax@18
  int v33; // ST28_4@18
  int v34; // ST24_4@18
  int v35; // eax@18
  int v36; // ST28_4@18
  int v37; // ST24_4@18
  int v38; // eax@18
  int v39; // ecx@19
  int v40; // eax@19
  unsigned int v41; // edi@20
  PassiveSkillInfo *v42; // eax@22
  int v43; // ST28_4@27
  int v44; // ST24_4@27
  int v45; // ST20_4@27
  int v46; // eax@27
  int v47; // ST48_4@27
  int v48; // eax@27
  PgWinText *v49; // edi@27
  signed int v50; // ebx@27
  int v51; // ST48_4@32
  int v52; // eax@32
  PgWinText *v53; // edi@32
  signed int v54; // ebx@32
  int v55; // ST48_4@37
  int v56; // eax@37
  PgWinText *v57; // edi@37
  signed int v58; // ebx@37
  int v59; // ST28_4@42
  int v60; // ST24_4@42
  int v61; // ST20_4@42
  int v62; // eax@42
  int v63; // ST4C_4@42
  int v64; // eax@42
  PgWinText *v65; // edi@42
  double v66; // st7@42
  signed int v67; // ebx@42
  NiRefObjectVtbl *v68; // edi@48
  int v69; // ST2C_4@48
  int v70; // eax@48
  NiRefObjectVtbl *v71; // edi@49
  int v72; // ST2C_4@49
  int v73; // eax@49
  PgWinText *v74; // ecx@49
  NiRefObjectVtbl *v75; // edi@50
  int v76; // ST2C_4@50
  int v77; // eax@50
  NiRefObjectVtbl *v78; // edi@51
  char *v79; // eax@51
  NiRefObjectVtbl *v80; // edi@52
  char *v81; // eax@52
  unsigned int v82; // eax@53
  PgWinBut *v83; // ecx@53
  NiRefObjectVtbl *v84; // edi@54
  PgWinText *v85; // ecx@54
  void *(__thiscall *v86)(NiRefObject *, unsigned int); // edx@54
  PgWinText *v87; // esi@55
  int v88; // [sp+2Ch] [bp-2D8h]@14
  D3DXCOLOR *v89; // [sp+2Ch] [bp-2D8h]@28
  D3DXCOLOR *v90; // [sp+2Ch] [bp-2D8h]@33
  D3DXCOLOR *v91; // [sp+2Ch] [bp-2D8h]@38
  D3DXCOLOR *v92; // [sp+2Ch] [bp-2D8h]@43
  int v93; // [sp+30h] [bp-2D4h]@0
  signed __int64 v94; // [sp+3Ch] [bp-2C8h]@0
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v95; // [sp+40h] [bp-2C4h]@6
  __int64 i64TotalExp; // [sp+44h] [bp-2C0h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *i64TotalExp_4; // [sp+48h] [bp-2BCh]@9
  float fExpRate; // [sp+4Ch] [bp-2B8h]@4
  signed int fExpRatea; // [sp+4Ch] [bp-2B8h]@27
  signed int fExpRateb; // [sp+4Ch] [bp-2B8h]@32
  signed int fExpRatec; // [sp+4Ch] [bp-2B8h]@37
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strCurExp; // [sp+50h] [bp-2B4h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strTotalExp; // [sp+6Ch] [bp-298h]@4
  char pNumberString[256]; // [sp+88h] [bp-27Ch]@4
  char pFullString[256]; // [sp+188h] [bp-17Ch]@5
  char acName[21]; // [sp+288h] [bp-7Ch]@1
  char acGuildName[17]; // [sp+2A0h] [bp-64h]@14
  char pCurExp[32]; // [sp+2B4h] [bp-50h]@4
  char pTotalExp[32]; // [sp+2D4h] [bp-30h]@4
  unsigned int v110; // [sp+2F4h] [bp-10h]@1
  int v111; // [sp+300h] [bp-4h]@4
  int v112; // [sp+304h] [bp+0h]@1

  v110 = (unsigned int)&v112 ^ __security_cookie;
  v2 = this;
  v3 = User::GetMainCharID(&g_kUser);
  v4 = *(_DWORD *)&v3->n5_name[0];
  v5 = *(_DWORD *)&v3->n5_name[4];
  v6 = *(_DWORD *)&v3->n5_name[8];
  v7 = *(_DWORD *)&v3->n5_name[12];
  v8 = *(_DWORD *)&v3->n5_name[16];
  *(_DWORD *)&acName[4] = v5;
  *(_DWORD *)&acName[16] = v8;
  v9 = v2->m_pkCharNameTextWin;
  *(_DWORD *)acName = v4;
  *(_DWORD *)&acName[8] = v6;
  *(_DWORD *)&acName[12] = v7;
  acName[20] = 0;
  ((void (*)(PgWinText *, const char *, ...))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
    v9,
    "%s",
    acName);
  v10 = User::GetMainCharClass(&g_kUser);
  CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v10);
  v11 = v2->m_pkJobTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::Lv(&g_kUser);
  v12 = fs("%s (Lv %d)");
  v11[118].__vecDelDtor((NiRefObject *)v2->m_pkJobTextWin, (unsigned int)v12);
  v13 = User::NextExp(&g_kUser);
  i64TotalExp = v13 - User::PrevExp(&g_kUser);
  v14 = User::CurExp(&g_kUser);
  v15 = v14 - User::PrevExp(&g_kUser);
  if ( i64TotalExp )
  {
    v94 = 100 * v15 / i64TotalExp;
    v16 = (double)v94;
  }
  else
  {
    v16 = 0.0;
  }
  fExpRate = v16;
  *(_DWORD *)&pTotalExp[1] = 0;
  *(_DWORD *)&pTotalExp[5] = 0;
  *(_DWORD *)&pTotalExp[9] = 0;
  *(_DWORD *)&pTotalExp[13] = 0;
  *(_DWORD *)&pTotalExp[17] = 0;
  *(_DWORD *)&pTotalExp[21] = 0;
  *(_DWORD *)&pTotalExp[25] = 0;
  *(_WORD *)&pTotalExp[29] = 0;
  pTotalExp[31] = 0;
  pCurExp[0] = 0;
  *(_DWORD *)&pCurExp[1] = 0;
  *(_DWORD *)&pCurExp[5] = 0;
  *(_DWORD *)&pCurExp[9] = 0;
  *(_DWORD *)&pCurExp[13] = 0;
  *(_DWORD *)&pCurExp[17] = 0;
  *(_DWORD *)&pCurExp[21] = 0;
  *(_DWORD *)&pCurExp[25] = 0;
  *(_WORD *)&pCurExp[29] = 0;
  pCurExp[31] = 0;
  pTotalExp[0] = 0;
  CharInfoWin::ConvertCommaNumber(v2, i64TotalExp, pNumberString);
  sprintf(pTotalExp, "%s");
  CharInfoWin::ConvertCommaNumber(v2, v15, pNumberString);
  sprintf(pCurExp, "%s");
  strCurExp.baseclass_0._Myres = 15;
  strCurExp.baseclass_0._Mysize = 0;
  strCurExp.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v111 = 0;
  strTotalExp.baseclass_0._Myres = 15;
  strTotalExp.baseclass_0._Mysize = 0;
  strTotalExp.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v111) = 1;
  if ( abs(v15 / 1000000) <= 0 )
  {
    ((void (*)(PgWinText *, const char *, ...))v2->m_pkExpTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      v2->m_pkExpTextWin,
      "%s/%s   %d%%",
      pCurExp,
      pTotalExp,
      (signed int)fExpRate);
    v2->m_pkExpTextWin->baseclass_0.m_pkToolTipWin = 0;
  }
  else
  {
    pFullString[0] = 0;
    memset(&pFullString[1], 0, 0);
    sprintf(pFullString, "%s/%s");
    ConvertCommaNums(i64TotalExp / 10000, (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v94);
    ConvertCommaNums(v15 / 10000, (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v15);
    PgWin::SetToolTipWinText(&v2->m_pkExpTextWin->baseclass_0, pFullString);
    v2->m_pkExpTextWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    if ( strTotalExp.baseclass_0._Myres < 0x10 )
      v95 = &strTotalExp;
    else
      v95 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strTotalExp;
    if ( strCurExp.baseclass_0._Myres < 0x10 )
      i64TotalExp_4 = &strCurExp;
    else
      i64TotalExp_4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strCurExp;
    ((void (*)(PgWinText *, const char *, ...))v2->m_pkExpTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      v2->m_pkExpTextWin,
      "%s/%s   %d%%",
      i64TotalExp_4,
      v95,
      (signed int)fExpRate,
      HIDWORD(v15),
      10000,
      0,
      &strCurExp);
  }
  v17 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v17) )
  {
    v18 = GuildTask::GetGuild();
    *(_DWORD *)acGuildName = *(_DWORD *)&v18->baseclass_0.m_Guild.sName.n4_name[0];
    *(_DWORD *)&acGuildName[4] = *(_DWORD *)&v18->baseclass_0.m_Guild.sName.n4_name[4];
    *(_DWORD *)&acGuildName[8] = *(_DWORD *)&v18->baseclass_0.m_Guild.sName.n4_name[8];
    v19 = v2->m_pkGuildTextWin;
    *(_DWORD *)&acGuildName[12] = *(_DWORD *)&v18->baseclass_0.m_Guild.sName.n4_name[12];
    acGuildName[16] = 0;
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v88 = (int)acGuildName;
  }
  else
  {
    v20 = v2->m_pkGuildTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v88 = (int)"-";
  }
  ((void (__stdcall *)(int))v20)(v88);
  if ( User::GetMainCharBaseData(&g_kUser) )
  {
    v21 = v2->m_pkFamousTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::GetMainCharBaseData(&g_kUser);
    v22 = fs("%d");
    v21[118].__vecDelDtor((NiRefObject *)v2->m_pkFamousTextWin, (unsigned int)v22);
  }
  v23 = User::GetMainCharBaseData(&g_kUser);
  v24 = v23->statdistribute.Strength;
  v25 = User::ChangeStr(&g_kUser);
  v26 = User::BaseStr(&g_kUser);
  CharInfoWin::SetParamTextWin(v2, v2->m_pkStrTextWin, v26, v25, v24, 1.0);
  v27 = v23->statdistribute.Dexterity;
  v28 = User::ChangeDex(&g_kUser);
  v29 = User::BaseDex(&g_kUser);
  CharInfoWin::SetParamTextWin(v2, v2->m_pkDexTextWin, v29, v28, v27, 1.0);
  v30 = v23->statdistribute.Constitute;
  v31 = User::ChangeCon(&g_kUser);
  v32 = User::BaseCon(&g_kUser);
  CharInfoWin::SetParamTextWin(v2, v2->m_pkConTextWin, v32, v31, v30, 1.0);
  v33 = v23->statdistribute.Intelligence;
  v34 = User::ChangeInt(&g_kUser);
  v35 = User::BaseInt(&g_kUser);
  CharInfoWin::SetParamTextWin(v2, v2->m_pkIntTextWin, v35, v34, v33, 1.0);
  v36 = v23->statdistribute.MentalPower;
  v37 = User::ChangeMen(&g_kUser);
  v38 = User::BaseMen(&g_kUser);
  CharInfoWin::SetParamTextWin(v2, v2->m_pkMenTextWin, v38, v37, v36, 1.0);
  if ( v2->m_bChangeCondition )
  {
    v39 = *(_DWORD *)&v2->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0];
    v40 = (signed int)((char *)v2->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast - v39) >> 1;
    if ( v40 )
    {
      v41 = 0;
      if ( v40 )
      {
        if ( (unsigned int)v40 <= 0 )
          std::_Xout_of_range("invalid vector<T> subscript");
        do
        {
          v42 = PasSkillInfoTab::GetByID(*(_WORD *)(v39 + 2 * v41));
          if ( v42 )
            CharInfoWin::SetChangeConParamInfo(v2, v42);
          v39 = *(_DWORD *)&v2->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0];
          ++v41;
        }
        while ( (signed int)((char *)v2->m_kChar_ChangeCondition._vecUsingPassiveSkill.baseclass_0._Mylast - v39) >> 1 > v41 );
      }
    }
  }
  else
  {
    v43 = User::ChangeWChigh(&g_kUser);
    v44 = User::BaseWChigh(&g_kUser);
    v45 = User::ChangeWClow(&g_kUser);
    v46 = User::BaseWClow(&g_kUser);
    CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkWCTextWin, v46, v45, v44, v43, 1.0);
    v47 = User::ChangeAC(&g_kUser);
    v48 = User::BaseAC(&g_kUser);
    v49 = v2->m_pkACTextWin;
    fExpRatea = (signed int)(double)v48;
    v50 = (signed int)(double)v47;
    if ( fExpRatea == v50 )
    {
      v89 = &Color::m_kDxWhiteColor;
    }
    else
    {
      if ( fExpRatea <= v50 )
        v89 = &Color::m_kDxGreenColor;
      else
        v89 = &Color::m_kDxRedColor;
    }
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v49,
      (unsigned int)v89);
    ((void (*)(PgWinText *, const char *, ...))v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      v49,
      "%d",
      v50);
    v51 = User::ChangeTH(&g_kUser);
    v52 = User::BaseTH(&g_kUser);
    v53 = v2->m_pkTHTextWin;
    fExpRateb = (signed int)(double)v52;
    v54 = (signed int)(double)v51;
    if ( fExpRateb == v54 )
    {
      v90 = &Color::m_kDxWhiteColor;
    }
    else
    {
      if ( fExpRateb <= v54 )
        v90 = &Color::m_kDxGreenColor;
      else
        v90 = &Color::m_kDxRedColor;
    }
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v53,
      (unsigned int)v90);
    ((void (*)(PgWinText *, const char *, ...))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      v53,
      "%d",
      v54);
    v55 = User::ChangeTB(&g_kUser);
    v56 = User::BaseTB(&g_kUser);
    v57 = v2->m_pkTBTextWin;
    fExpRatec = (signed int)(double)v56;
    v58 = (signed int)(double)v55;
    if ( fExpRatec == v58 )
    {
      v91 = &Color::m_kDxWhiteColor;
    }
    else
    {
      if ( fExpRatec <= v58 )
        v91 = &Color::m_kDxGreenColor;
      else
        v91 = &Color::m_kDxRedColor;
    }
    v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v57,
      (unsigned int)v91);
    ((void (*)(PgWinText *, const char *, ...))v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      v57,
      "%d",
      v58);
    v59 = User::ChangeMAhigh(&g_kUser);
    v60 = User::BaseMAhigh(&g_kUser);
    v61 = User::ChangeMAlow(&g_kUser);
    v62 = User::BaseMAlow(&g_kUser);
    CharInfoWin::SetMinMaxParamTextWin(v2, v2->m_pkMATextWin, v62, v61, v60, v59, 1.0);
    v63 = User::ChangeMR(&g_kUser);
    v64 = User::BaseMR(&g_kUser);
    v65 = v2->m_pkMRTextWin;
    v66 = (double)v63;
    v67 = (signed int)(double)v64;
    if ( v67 == (signed int)v66 )
    {
      v92 = &Color::m_kDxWhiteColor;
    }
    else
    {
      if ( v67 <= (signed int)v66 )
        v92 = &Color::m_kDxGreenColor;
      else
        v92 = &Color::m_kDxRedColor;
    }
    v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v65,
      (unsigned int)v92);
    ((void (*)(PgWinText *, const char *, ...))v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(
      v65,
      "%d",
      (signed int)v66);
  }
  v68 = v2->m_pkHPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v69 = User::MaxHP(&g_kUser);
  v70 = User::HP(&g_kUser);
  ((void (*)(PgWinText *, const char *, ...))v68[119].__vecDelDtor)(v2->m_pkHPNumTextWin, "%d/%d", v70, v69);
  switch ( Char::GetClass(g_pkMainChar) )
  {
    case 0x1A:
    case 0x1B:
      ((void (__stdcall *)(signed int))v2->m_pkLPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_pkLPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v71 = v2->m_pkLPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v72 = User::MaxLP(&g_kUser);
      v73 = User::LP(&g_kUser);
      ((void (*)(PgWinText *, const char *, ...))v71[119].__vecDelDtor)(v2->m_pkLPNumTextWin, "%d/%d", v73, v72);
      ((void (__stdcall *)(signed int))v2->m_pkLPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v74 = v2->m_pkSPNumTextWin;
      break;
    default:
      ((void (__stdcall *)(signed int))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_pkSPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v75 = v2->m_pkSPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v76 = User::MaxSP(&g_kUser);
      v77 = User::SP(&g_kUser);
      ((void (*)(PgWinText *, const char *, ...))v75[119].__vecDelDtor)(v2->m_pkSPNumTextWin, "%d/%d", v77, v76);
      ((void (__stdcall *)(signed int))v2->m_pkSPNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkLPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkLPTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v74 = v2->m_pkLPNumTextWin;
      break;
  }
  ((void (__stdcall *)(_DWORD))v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v78 = v2->m_pkPointNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v79 = fs("%d");
  v78[118].__vecDelDtor((NiRefObject *)v2->m_pkPointNumTextWin, (unsigned int)v79);
  if ( v2->m_pkPkKillCountTextWin )
  {
    v80 = v2->m_pkPkKillCountTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::GetMainCharBaseData(&g_kUser);
    v81 = fs("%d Point");
    v80[118].__vecDelDtor((NiRefObject *)v2->m_pkPkKillCountTextWin, (unsigned int)v81);
  }
  v82 = Inventory::GetStatInitialPoint(&g_kInventory);
  v83 = v2->m_pkStrDnBtn;
  if ( v82 )
  {
    ((void (__stdcall *)(signed int, int))v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      1,
      v93);
    ((void (__stdcall *)(signed int))v2->m_pkDexDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v2->m_pkConDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v2->m_pkIntDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v2->m_pkMenDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v84 = v2->m_pkRedistributePointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    Inventory::GetStatInitialPoint(&g_kInventory);
    fs("%2d");
    v85 = v2->m_pkRedistributePointText;
    v86 = v84[118].__vecDelDtor;
  }
  else
  {
    ((void (__stdcall *)(_DWORD, int))v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      0,
      v93);
    ((void (__stdcall *)(_DWORD))v2->m_pkDexDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkConDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkIntDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkMenDnBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v87 = v2->m_pkRedistributePointText;
    v86 = v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v85 = v87;
  }
  ((void (__thiscall *)(PgWinText *))v86)(v85);
  if ( strTotalExp.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strTotalExp);
  strTotalExp.baseclass_0._Myres = 15;
  strTotalExp.baseclass_0._Mysize = 0;
  strTotalExp.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( strCurExp.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strCurExp);
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004E3BE0) --------------------------------------------------------
void __thiscall CharInfoWin::SetConditionInfo(CharInfoWin *this, CHAR_CHANGEBYCONDITION_PARAM kConditionParam)
{
  CHAR_CHANGEBYCONDITION_PARAM *v2; // edx@1
  std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *v3; // ecx@1
  int v4; // edi@1
  unsigned int v5; // edx@1
  int v6; // eax@1
  unsigned int v7; // esi@3
  int v8; // edx@5
  int v9; // eax@10

  v2 = this->m_vecConditionParam.baseclass_0._Mylast;
  v3 = &this->m_vecConditionParam;
  v4 = *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (unsigned __int64)(715827883i64
                        * (signed int)((char *)v2 - *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32;
  v6 = v5 + (v5 >> 31);
  if ( v5 + (v5 >> 31) )
  {
    v7 = 0;
    if ( v6 )
    {
      if ( (unsigned int)v6 <= 0 )
        goto LABEL_13;
      while ( 1 )
      {
        v8 = *(_DWORD *)v4;
        if ( __PAIR__(BYTE1(v8), (unsigned __int8)*(_DWORD *)v4) == *(_WORD *)&kConditionParam )
          break;
        ++v7;
        v4 += 6;
        if ( v6 <= v7 )
          goto LABEL_7;
      }
      if ( v6 <= v7 )
LABEL_13:
        std::_Xout_of_range("invalid vector<T> subscript");
      v9 = *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + 6 * v7;
      *(_DWORD *)v9 = *(_DWORD *)&kConditionParam;
      *(_WORD *)(v9 + 4) = HIWORD(kConditionParam.nValue);
    }
    else
    {
LABEL_7:
      std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::push_back(
        v3,
        &kConditionParam);
    }
  }
  else
  {
    std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::push_back(
      v3,
      &kConditionParam);
  }
}

//----- (004E3C90) --------------------------------------------------------
CHAR_CHANGEBYCONDITION_PARAM *__thiscall std::allocator<CHAR_CHANGEBYCONDITION_PARAM>::allocate(std::allocator<CHAR_CHANGEBYCONDITION_PARAM> *this, unsigned int _Count)
{
  CHAR_CHANGEBYCONDITION_PARAM *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x2AAAAAAA || (result = (CHAR_CHANGEBYCONDITION_PARAM *)operator new(6 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004E3CF0) --------------------------------------------------------
std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::end(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *result)
{
  std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@2

  if ( this->baseclass_0._Myres < 0x10 )
  {
    v2 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = (char *)this + this->baseclass_0._Mysize;
  }
  else
  {
    v2 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]
                                                                           + this->baseclass_0._Mysize;
  }
  return v2;
}

//----- (004E3D20) --------------------------------------------------------
void __thiscall std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(std::vector<unsigned short,std::allocator<unsigned short> > *this, unsigned int _Count)
{
  std::vector<unsigned short,std::allocator<unsigned short> > *v2; // esi@1
  unsigned __int16 *v3; // ebx@4
  int v4; // edi@4

  v2 = this;
  if ( _Count > 0x7FFFFFFF )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 1 < _Count )
  {
    v3 = std::allocator<unsigned_short>::allocate(&this->baseclass_0._Alval, _Count);
    memmove(
      (char *)v3,
      *(char **)&v2->baseclass_0.___u0.baseclass_0.dummy[0],
      2 * ((signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 1));
    v4 = (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 1;
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v3;
    v2->baseclass_0._Myend = &v3[_Count];
    v2->baseclass_0._Mylast = &v3[v4];
  }
}

//----- (004E3DA0) --------------------------------------------------------
CHAR_CHANGEBYCONDITION_PARAM *__cdecl std::_Uninit_move<CHAR_CHANGEBYCONDITION_PARAM___CHAR_CHANGEBYCONDITION_PARAM___std::allocator<CHAR_CHANGEBYCONDITION_PARAM>_CHAR_CHANGEBYCONDITION_PARAM>(CHAR_CHANGEBYCONDITION_PARAM *_First, CHAR_CHANGEBYCONDITION_PARAM *_Last, CHAR_CHANGEBYCONDITION_PARAM *_Dest, std::allocator<CHAR_CHANGEBYCONDITION_PARAM> *_Al, CHAR_CHANGEBYCONDITION_PARAM *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  CHAR_CHANGEBYCONDITION_PARAM *v6; // ecx@1
  CHAR_CHANGEBYCONDITION_PARAM *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
    {
      *(_DWORD *)&result->nFlag = *(_DWORD *)&v6->nFlag;
      HIWORD(result->nValue) = HIWORD(v6->nValue);
    }
    ++v6;
  }
  return result;
}

//----- (004E3DD0) --------------------------------------------------------
void __thiscall std::vector<unsigned_short_std::allocator<unsigned_short>>::_Reserve(std::vector<unsigned short,std::allocator<unsigned short> > *this, unsigned int _Count)
{
  signed int v2; // eax@1
  unsigned int v3; // eax@3
  signed int v4; // edx@3
  unsigned int v5; // edx@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 1;
  if ( 2147483647 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 1;
  if ( v3 > v4 )
  {
    if ( 2147483647 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(this, v5);
  }
}

//----- (004E3E30) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _Count, char _Ch)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // esi@1
  unsigned int v5; // eax@1
  unsigned int v6; // edi@6
  unsigned int v7; // ecx@8
  unsigned int v8; // eax@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@18
  bool v12; // cf@20

  v4 = this;
  v5 = this->baseclass_0._Mysize;
  if ( v5 < _Off )
    std::_Xout_of_range("invalid string position");
  if ( -1 - v5 <= _Count )
    std::_Xlength_error("string too long");
  if ( !_Count )
    return v4;
  v6 = v5 + _Count;
  if ( v5 + _Count > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v7 = this->baseclass_0._Myres;
  if ( v7 < v6 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v4, v6, v5);
    if ( v6 )
    {
LABEL_10:
      v8 = v4->baseclass_0._Myres;
      if ( v8 < 0x10 )
        v9 = v4;
      else
        v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v8 < 0x10 )
        v11 = v4;
      else
        v11 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
      memmove((char *)v11 + _Off + _Count, (char *)v9 + _Off, v4->baseclass_0._Mysize - _Off);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Chassign(v4, _Off, _Count, _Ch);
      v12 = v4->baseclass_0._Myres < 0x10;
      v4->baseclass_0._Mysize = v6;
      if ( !v12 )
      {
        *(_BYTE *)(*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] + v6) = 0;
        return v4;
      }
      v4->baseclass_0.___u0.baseclass_0.dummy[v6] = 0;
    }
    return v4;
  }
  if ( v6 )
    goto LABEL_10;
  v4->baseclass_0._Mysize = 0;
  if ( v7 < 0x10 )
  {
    result = v4;
    v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v4;
  }
  return result;
}

//----- (004E3F30) --------------------------------------------------------
void __thiscall Char_ChangeCondition::_Char_ChangeCondition(Char_ChangeCondition *this)
{
  Char_ChangeCondition *v1; // esi@1

  v1 = this;
  if ( *(_DWORD *)&this->_vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->_vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->_vecUsingPassiveSkill.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->_vecUsingPassiveSkill.baseclass_0._Mylast = 0;
  v1->_vecUsingPassiveSkill.baseclass_0._Myend = 0;
}

//----- (004E3F70) --------------------------------------------------------
void __thiscall std::vector<unsigned_short_std::allocator<unsigned_short>>::push_back(std::vector<unsigned short,std::allocator<unsigned short> > *this, const unsigned __int16 *_Val)
{
  std::vector<unsigned short,std::allocator<unsigned short> > *v2; // esi@1
  unsigned __int16 *v3; // eax@1
  signed int v4; // edi@3
  unsigned __int16 *v5; // eax@5
  unsigned __int16 *v6; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == this->baseclass_0._Myend )
      std::vector<unsigned_short_std::allocator<unsigned_short>>::_Reserve(this, 1u);
    v6 = v2->baseclass_0._Mylast;
    if ( v6 )
      *v6 = *_Val;
  }
  else
  {
    v4 = (signed int)((char *)_Val - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 1;
    if ( v3 == this->baseclass_0._Myend )
      std::vector<unsigned_short_std::allocator<unsigned_short>>::_Reserve(this, 1u);
    v5 = v2->baseclass_0._Mylast;
    if ( v5 )
    {
      *v5 = *(_WORD *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 2 * v4);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (004E3FE0) --------------------------------------------------------
void __thiscall std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::reserve(std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *this, unsigned int _Count)
{
  std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *v2; // esi@1
  void *v3; // eax@4
  CHAR_CHANGEBYCONDITION_PARAM *v4; // ST04_4@4
  CHAR_CHANGEBYCONDITION_PARAM *v5; // ST00_4@4
  int v6; // edi@4
  char *v7; // eax@6
  int v8; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v10; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@4

  v10 = &v8;
  v2 = this;
  if ( _Count > 0x2AAAAAAA )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 6 < _Count )
  {
    v3 = std::allocator<CHAR_CHANGEBYCONDITION_PARAM>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(CHAR_CHANGEBYCONDITION_PARAM **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v11 = 0;
    std::_Uninit_move<CHAR_CHANGEBYCONDITION_PARAM___CHAR_CHANGEBYCONDITION_PARAM___std::allocator<CHAR_CHANGEBYCONDITION_PARAM>_CHAR_CHANGEBYCONDITION_PARAM>(
      v5,
      v4,
      (CHAR_CHANGEBYCONDITION_PARAM *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) / 6;
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    v7 = _Ptr;
    v2->baseclass_0._Myend = (CHAR_CHANGEBYCONDITION_PARAM *)&_Ptr[6 * _Count];
    v2->baseclass_0._Mylast = (CHAR_CHANGEBYCONDITION_PARAM *)&v7[6 * v6];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v7;
  }
}

//----- (004E40D0) --------------------------------------------------------
void __thiscall std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::_Reserve(std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 6;
  if ( 715827882 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 6;
  if ( v3 > v4 )
  {
    if ( 715827882 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::reserve(this, v5);
  }
}

//----- (004E4150) --------------------------------------------------------
void __thiscall std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::push_back(std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *this, CHAR_CHANGEBYCONDITION_PARAM *_Val)
{
  std::vector<CHAR_CHANGEBYCONDITION_PARAM,std::allocator<CHAR_CHANGEBYCONDITION_PARAM> > *v2; // edi@1
  CHAR_CHANGEBYCONDITION_PARAM *v3; // ecx@1
  int v4; // esi@3
  int v5; // ecx@5
  CHAR_CHANGEBYCONDITION_PARAM *v6; // eax@5
  CHAR_CHANGEBYCONDITION_PARAM *v7; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::_Reserve(v2, 1u);
    v7 = v2->baseclass_0._Mylast;
    if ( v7 )
    {
      *(_DWORD *)&v7->nFlag = *(_DWORD *)&_Val->nFlag;
      HIWORD(v7->nValue) = HIWORD(_Val->nValue);
    }
  }
  else
  {
    v4 = (signed int)((char *)_Val - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) / 6;
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<CHAR_CHANGEBYCONDITION_PARAM_std::allocator<CHAR_CHANGEBYCONDITION_PARAM>>::_Reserve(v2, 1u);
    v5 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 6 * v4;
    v6 = v2->baseclass_0._Mylast;
    if ( v6 )
    {
      *(_DWORD *)&v6->nFlag = *(_DWORD *)v5;
      HIWORD(v6->nValue) = *(_WORD *)(v5 + 4);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (004E41E0) --------------------------------------------------------
void *__thiscall CharInfoWin::_vector_deleting_destructor_(CharInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharInfoWin::_CharInfoWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004E4210) --------------------------------------------------------
void __thiscall CharTitleWin::_CharTitleWin(CharTitleWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharTitleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharTitleWin::_vftable_;
  CDataReader::_CDataReader(&this->pCharTitleData.m_CharacterTitleData);
  PgWinFrame::_PgWinFrame(v1);
}
// 9901E8: using guessed type int (__stdcall *CharTitleWin___vftable_)(int uiFlags);
// 990204: using guessed type int (__thiscall *CharTitleWin___vftable_)(void *p, char);

//----- (004E4280) --------------------------------------------------------
void __thiscall CharTitleWin::OnPrevPage(CharTitleWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_uiCurPage;
  if ( v1 )
    this->m_uiCurPage = v1 - 1;
}

//----- (004E42A0) --------------------------------------------------------
void __thiscall CharTitleWin::OnNextPage(CharTitleWin *this)
{
  ++this->m_uiCurPage;
}

//----- (004E42B0) --------------------------------------------------------
void __thiscall CharTitleWin::OnClose(CharTitleWin *this)
{
  PgWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1

  v1 = (PgWin *)this;
  v2 = (char *)this->m_apkChoiceNickTextWin;
  v3 = 7;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 472))(&unk_98FF56);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  PgWin::OnClose(v1);
}

//----- (004E4300) --------------------------------------------------------
void __thiscall CharTitleWin::AddListItem(CharTitleWin *this, unsigned int uiIndex, unsigned int uiType, unsigned int uiElementNum, unsigned int uiElementValue, unsigned int uiMobID)
{
  CharTitleWin *v6; // edi@1
  SlideListWin *v7; // ecx@1
  int v8; // esi@3
  const char *v9; // eax@7
  int v10; // eax@7
  const char *v11; // eax@8
  const char *v12; // eax@9
  unsigned int v13; // [sp-1Ch] [bp-20h]@6
  unsigned int v14; // [sp-18h] [bp-1Ch]@6
  int v15; // [sp-14h] [bp-18h]@6
  int v16; // [sp-10h] [bp-14h]@6
  int v17; // [sp-Ch] [bp-10h]@6

  v6 = this;
  v7 = this->m_pListWin;
  if ( v7 && uiElementValue )
  {
    v8 = 0;
    if ( uiElementValue == 1 )
    {
      v12 = CCharacterTitleData::GetTitleString(&g_characterTitleData, uiType, uiElementNum);
      v10 = SlideListWin::AddText(v6->m_pListWin, v12);
      v17 = 0;
      v16 = 0;
      v15 = 0;
    }
    else
    {
      if ( uiElementValue == 2 )
      {
        v11 = CCharacterTitleData::GetTitleString(&g_characterTitleData, uiType, uiElementNum);
        v10 = SlideListWin::AddText(v6->m_pListWin, v11);
        v17 = 255;
        v16 = 255;
        v15 = 255;
      }
      else
      {
        if ( uiElementValue != 3 )
        {
          v17 = 255;
          v16 = 255;
          v15 = 0;
          v14 = 0;
          v13 = 0;
LABEL_11:
          SlideListWin::SetFontColor(v7, v13, v14, v15, v16, v17);
          v6->ms_ctWinListInfo[v8].Type = uiType;
          v6->ms_ctWinListInfo[v8]._bf1 = ((_BYTE)uiElementValue << 6) | uiElementNum & 0x3F;
          v6->ms_ctWinListInfo[v8].MobID = uiMobID;
          return;
        }
        v9 = CCharacterTitleData::GetTitleString(&g_characterTitleData, uiType, uiElementNum);
        v10 = SlideListWin::AddText(v6->m_pListWin, v9);
        v17 = 255;
        v16 = 0;
        v15 = 255;
      }
    }
    v7 = v6->m_pListWin;
    v14 = 0;
    v8 = v10;
    v13 = v10;
    goto LABEL_11;
  }
}

//----- (004E4400) --------------------------------------------------------
void __thiscall CharTitleWin::OnHelpLink(CharTitleWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "CharTitle");
}

//----- (004E4430) --------------------------------------------------------
void __thiscall CharTitleWin::CharTitleSort(CharTitleWin *this)
{
  Char *v1; // eax@1
  NiGeometry *v2; // edx@1
  signed int v3; // ebx@2
  signed int v4; // esi@2
  int v5; // ecx@4
  __int16 v6; // dx@6
  __int16 v7; // dx@7
  bool v8; // zf@10
  NiGeometry *uiTotalCharTitle; // [sp+0h] [bp-10h]@1
  int v10; // [sp+4h] [bp-Ch]@2
  signed int v11; // [sp+8h] [bp-8h]@2
  int v12; // [sp+Ch] [bp-4h]@4

  v1 = g_pkMainChar;
  v2 = g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6];
  uiTotalCharTitle = g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6];
  if ( v2 != (NiGeometry *)1 )
  {
    v3 = 1;
    v11 = 1;
    v4 = 2948;
    v10 = (int)((char *)v2 - 1);
    do
    {
      if ( v3 < (unsigned int)v2 )
      {
        v5 = v4 + 2;
        v12 = (int)((char *)v2 - v3);
        do
        {
          if ( *((_BYTE *)&v1->baseclass_0.vfptr + v4) == *((_BYTE *)&v1->baseclass_0.vfptr + v5) )
          {
            v6 = *(_WORD *)((char *)&v1->baseclass_0.vfptr + v4 + 2);
            *(_WORD *)((char *)&v1->baseclass_0.vfptr + v4 + 2) = *(_WORD *)((char *)&v1->baseclass_0.vfptr + v5);
            *(_WORD *)((char *)&g_pkMainChar->baseclass_0.vfptr + v5) = v6;
            v1 = g_pkMainChar;
            if ( (unsigned __int8)(*((_BYTE *)&g_pkMainChar->baseclass_0.vfptr + v4 + 1) & 0x3F) > (unsigned __int8)(*((_BYTE *)&g_pkMainChar->baseclass_0.vfptr + v4 + 3) & 0x3F) )
            {
              v7 = *(_WORD *)((char *)&g_pkMainChar->baseclass_0.vfptr + v4);
              *(_WORD *)((char *)&g_pkMainChar->baseclass_0.vfptr + v4) = *(_WORD *)((char *)&g_pkMainChar->baseclass_0.vfptr
                                                                                   + v4
                                                                                   + 2);
              *(_WORD *)((char *)&g_pkMainChar->baseclass_0.vfptr + v4 + 2) = v7;
              v1 = g_pkMainChar;
            }
          }
          v5 += 2;
          --v12;
        }
        while ( v12 );
        v2 = uiTotalCharTitle;
        v3 = v11;
      }
      ++v3;
      v4 += 2;
      v8 = v10-- == 1;
      v11 = v3;
    }
    while ( !v8 );
  }
}

//----- (004E44F0) --------------------------------------------------------
void __thiscall CharTitleWin::CharTitleWin(CharTitleWin *this)
{
  CharTitleWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharTitleWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharTitleWin::_vftable_;
  CDataReader::CDataReader(&v1->pCharTitleData.m_CharacterTitleData);
  v1->m_uiCurPage = 0;
  v1->m_pSlideBarEx = 0;
}
// 9901E8: using guessed type int (__stdcall *CharTitleWin___vftable_)(int uiFlags);
// 990204: using guessed type int (__thiscall *CharTitleWin___vftable_)(void *p, char);

//----- (004E4570) --------------------------------------------------------
void __thiscall CharTitleWin::UpdateMeWin(CharTitleWin *this, float fCurTime)
{
  CharTitleWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWin, v2->m_pSlideBarEx);
}

//----- (004E45A0) --------------------------------------------------------
void __thiscall CharTitleWin::OnOK(CharTitleWin *this)
{
  CharTitleWin *v1; // esi@1
  int v2; // eax@1
  int v3; // esi@2
  signed int v4; // edi@2

  v1 = this;
  v2 = SlideListWin::GetCurSelIndex(this->m_pListWin);
  if ( (unsigned int)v1->ms_ctWinListInfo[v2]._bf1 >> 6 == 2 )
  {
    GameFrameWork::NcCharTitleSetReq((GameFrameWork *)v1->m_pkFrameWork, v2);
    v3 = (int)v1->m_apkChoiceNickTextWin;
    v4 = 7;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 472))(&unk_98FF57);
      v3 += 4;
      --v4;
    }
    while ( v4 );
  }
}

//----- (004E45F0) --------------------------------------------------------
void __thiscall CharTitleWin::OnSlideBarContent(CharTitleWin *this)
{
  this->m_pListWin->m_nViewStartPos = this->m_pSlideBarEx->m_nCurPos;
  SlideListWin::UpdateViewList(this->m_pListWin);
}

//----- (004E4620) --------------------------------------------------------
void __thiscall CharTitleWin::ProcessMeInput(CharTitleWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (004E46A0) --------------------------------------------------------
void __thiscall CharTitleWin::UpdateViewList(CharTitleWin *this)
{
  CharTitleWin *v1; // edi@1
  Char *v2; // ecx@2
  NiGeometry *v3; // esi@2

  v1 = this;
  if ( this->m_pListWin )
  {
    CharTitleWin::CharTitleSort(this);
    SlideListWin::RemoveAllList(v1->m_pListWin);
    v2 = g_pkMainChar;
    v3 = 0;
    if ( g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6] )
    {
      do
      {
        CharTitleWin::AddListItem(
          v1,
          (unsigned int)v3,
          *((_BYTE *)&v2[1].baseclass_0.vfptr + 2 * (_DWORD)v3),
          *((_BYTE *)&v2[1].baseclass_0.vfptr + 2 * (_DWORD)v3 + 1) & 0x3F,
          (unsigned int)*((_BYTE *)&v2[1].baseclass_0.vfptr + 2 * (_DWORD)v3 + 1) >> 6,
          0);
        v2 = g_pkMainChar;
        v3 = (NiGeometry *)((char *)v3 + 1);
      }
      while ( v3 < g_pkMainChar[1].m_kCharShape.m_apkLodGeom[6] );
    }
    SlideListWin::UpdateViewList(v1->m_pListWin);
    SlideBar::SetSplitCnt(v1->m_pSlideBarEx, v1->m_pListWin->m_nSlideSplitCnt);
  }
}

//----- (004E4730) --------------------------------------------------------
CharTitleWin *__cdecl CharTitleWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CharTitleWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0xA30u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &CharTitleWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CharTitleWin::_vftable_;
    CDataReader::CDataReader((CDataReader *)((char *)v2 + 2480));
    *((_DWORD *)v2 + 619) = 0;
    *((_DWORD *)v2 + 618) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CharTitleWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9901E8: using guessed type int (__stdcall *CharTitleWin___vftable_)(int uiFlags);
// 990204: using guessed type int (__thiscall *CharTitleWin___vftable_)(void *p, char);

//----- (004E4890) --------------------------------------------------------
void __thiscall CharTitleWin::OnListClick(CharTitleWin *this, int nIndex)
{
  CharTitleWin *v2; // ebx@1
  int v3; // esi@1
  signed int v4; // edi@1
  void *v5; // eax@4
  NiRefObjectVtbl *v6; // esi@5
  char *v7; // eax@5
  char *v8; // eax@5
  unsigned int v9; // edi@7
  int v10; // edx@8
  int v11; // esi@8
  std::vector<CharacterTitleStateView *,std::allocator<CharacterTitleStateView *> > ViewList; // [sp+0h] [bp-1Ch]@1
  int v13; // [sp+18h] [bp-4h]@1

  v2 = this;
  CharacterTitleStateViewTab::GetByTypeAndLevel(
    &ViewList,
    this->ms_ctWinListInfo[nIndex].Type,
    this->ms_ctWinListInfo[nIndex]._bf1 & 0x3F);
  v13 = 0;
  v3 = (int)v2->m_apkChoiceNickTextWin;
  v4 = 7;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v3 + 472))(&unk_98FF5E);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( strcmp(
         g_pkMainChar->m_CharTitleName,
         CCharacterTitleData::GetTitleString(
           &g_characterTitleData,
           v2->ms_ctWinListInfo[nIndex].Type,
           v2->ms_ctWinListInfo[nIndex]._bf1 & 0x3F)) )
  {
    v6 = v2->m_apkChoiceNickTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = TextData2::Get(0xDAD4E331u);
    v8 = fs(v7);
    v6[118].__vecDelDtor((NiRefObject *)v2->m_apkChoiceNickTextWin[0], (unsigned int)v8);
    v5 = *(void **)&ViewList;
    if ( v2->ms_ctWinListInfo[nIndex].Type != 10 )
    {
      if ( *(CharacterTitleStateView ***)&ViewList != ViewList.baseclass_0._Mylast )
      {
        v9 = 0;
        if ( (signed int)((char *)ViewList.baseclass_0._Mylast - *(_DWORD *)&ViewList) >> 2 )
        {
          v10 = -2580 - (_DWORD)v2;
          v11 = (int)&v2->m_apkChoiceNickTextWin[1];
          while ( 1 )
          {
            (*(void (__stdcall **)(int))(**(_DWORD **)v11 + 472))(*(_DWORD *)((char *)v5 + v11 + v10) + 5);
            v5 = *(void **)&ViewList;
            ++v9;
            v11 += 4;
            if ( v9 >= (signed int)((char *)ViewList.baseclass_0._Mylast - *(_DWORD *)&ViewList) >> 2 )
              break;
            v10 = -2580 - (_DWORD)v2;
          }
        }
      }
    }
  }
  else
  {
    v5 = *(void **)&ViewList;
  }
  if ( v5 )
    operator delete(v5);
}

//----- (004E4A20) --------------------------------------------------------
void __thiscall CharTitleWin::SetCurTitleInfo(CharTitleWin *this, CharTitleWin::CTWIN_LIST_INFO *pInfo)
{
  char *v2; // esi@2
  signed int v3; // ebx@2
  char v4; // al@4
  char v5; // ST08_1@4
  CharTitleWin *v6; // ebx@5
  NiRefObjectVtbl *v7; // esi@5
  char *v8; // eax@5
  char *v9; // eax@5
  void *v10; // eax@7
  unsigned int v11; // edi@7
  int v12; // edx@8
  int v13; // esi@8
  std::vector<CharacterTitleStateView *,std::allocator<CharacterTitleStateView *> > ViewList; // [sp+0h] [bp-20h]@4
  CharTitleWin *v15; // [sp+10h] [bp-10h]@1
  int v16; // [sp+1Ch] [bp-4h]@4

  v15 = this;
  if ( pInfo )
  {
    v2 = (char *)this->m_apkCurrentNickTextWin;
    v3 = 7;
    do
    {
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v2 + 472))(&unk_98FF5F);
      v2 += 4;
      --v3;
    }
    while ( v3 );
    CharacterTitleStateViewTab::GetByTypeAndLevel(&ViewList, pInfo->Type, pInfo->_bf1 & 0x3F);
    v4 = pInfo->Type;
    v5 = pInfo->_bf1 & 0x3F;
    v16 = 0;
    if ( CCharacterTitleData::GetTitleString(&g_characterTitleData, v4, v5)
      && (v6 = v15,
          v7 = v15->m_apkCurrentNickTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
          v8 = TextData2::Get(0xE1DB2D44u),
          v9 = fs(v8),
          v7[118].__vecDelDtor((NiRefObject *)v6->m_apkCurrentNickTextWin[0], (unsigned int)v9),
          pInfo->Type)
      && pInfo->Type != 10 )
    {
      v10 = *(void **)&ViewList;
      v11 = 0;
      if ( (signed int)((char *)ViewList.baseclass_0._Mylast - *(_DWORD *)&ViewList) >> 2 )
      {
        v12 = -2552 - (_DWORD)v6;
        v13 = (int)&v6->m_apkCurrentNickTextWin[1];
        while ( 1 )
        {
          (*(void (__stdcall **)(int))(**(_DWORD **)v13 + 472))(*(_DWORD *)((char *)v10 + v13 + v12) + 5);
          v10 = *(void **)&ViewList;
          ++v11;
          v13 += 4;
          if ( v11 >= (signed int)((char *)ViewList.baseclass_0._Mylast - *(_DWORD *)&ViewList) >> 2 )
            break;
          v12 = -2552 - (_DWORD)v6;
        }
      }
    }
    else
    {
      v10 = *(void **)&ViewList;
    }
    if ( v10 )
      operator delete(v10);
  }
}

//----- (004E4B70) --------------------------------------------------------
void __thiscall CharTitleWin::OnCommand(CharTitleWin *this, unsigned int wParam, int lParam)
{
  unsigned int v3; // eax@5

  switch ( wParam )
  {
    case 0xAu:
      CharTitleWin::OnOK(this);
      break;
    case 0xBu:
      CharTitleWin::OnSlideBarContent(this);
      break;
    case 0xCu:
      CharTitleWin::OnListClick(this, lParam);
      break;
    case 0xDu:
      v3 = this->m_uiCurPage;
      if ( v3 )
        this->m_uiCurPage = v3 - 1;
      break;
    case 0xEu:
      ++this->m_uiCurPage;
      break;
    case 0xFu:
      CharTitleWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (004E4BF0) --------------------------------------------------------
bool __thiscall CharTitleWin::Create(CharTitleWin *this, PgFrameWork *pkFrameWork)
{
  CharTitleWin *v2; // esi@1
  NiNode *v3; // esi@2
  bool v4; // zf@4
  bool result; // al@7
  NiTexturePalette *v6; // ebx@8
  char *v7; // eax@10
  PgSprData *v8; // eax@11
  NiNode *v9; // esi@12
  int v10; // edi@17
  int v11; // ebx@17
  NiSourceTexture *v12; // eax@17
  PgSprData *v13; // eax@20
  PgSprData *v14; // eax@22
  PgWinSpr *v15; // eax@22
  PgSprData *v16; // eax@22
  PgSprData *v17; // eax@22
  PgFont *v18; // eax@22
  void *v19; // eax@24
  PgSprData *v20; // ecx@24
  NiRefObjectVtbl *v21; // edx@24
  int v22; // eax@24
  NiRefObjectVtbl *v23; // edx@24
  PgWinText *v24; // eax@25
  PgSprData *v25; // eax@26
  PgWinSpr *v26; // eax@26
  NiRefObjectVtbl *v27; // edx@26
  int v28; // eax@26
  NiRefObjectVtbl *v29; // edx@26
  PgWinText *v30; // eax@27
  PgFont *v31; // eax@32
  PgWinText *v32; // eax@32
  NiRefObjectVtbl *v33; // edx@32
  char *v34; // eax@32
  PgFont *v35; // eax@33
  PgWinText *v36; // eax@33
  NiRefObjectVtbl *v37; // edx@33
  char *v38; // eax@33
  SLWCreateInfo::Item *v39; // eax@33
  PgSprData *v40; // eax@41
  SlideListWin *v41; // eax@41
  void *v42; // eax@41
  NiRefObjectVtbl *v43; // edx@41
  NiObjectNET *v44; // eax@41
  NiObjectNET *v45; // eax@41
  NiObjectNET *v46; // eax@41
  NiObjectNET *v47; // eax@41
  NiObjectNET *v48; // eax@41
  NiObjectNET *v49; // eax@41
  SlideBar *v50; // eax@41
  NiRefObjectVtbl *v51; // eax@41
  void *v52; // ecx@41
  int (*v53)(void); // eax@41
  int v54; // eax@41
  int v55; // eax@41
  NiNode *v56; // esi@43
  const char *v57; // [sp+64h] [bp-98h]@18
  int *v58; // [sp+68h] [bp-94h]@18
  int *v59; // [sp+6Ch] [bp-90h]@18
  NiSourceTexture *v60; // [sp+70h] [bp-8Ch]@18
  unsigned int v61; // [sp+74h] [bp-88h]@1
  int v62; // [sp+74h] [bp-88h]@28
  SLWCreateInfo kCreateInfo; // [sp+84h] [bp-78h]@33
  unsigned int uiWidth; // [sp+A0h] [bp-5Ch]@28
  unsigned int uiHeight; // [sp+A4h] [bp-58h]@28
  unsigned int uiEdgeWidth; // [sp+A8h] [bp-54h]@24
  PgFont *pkFont; // [sp+ACh] [bp-50h]@22
  int i; // [sp+B0h] [bp-4Ch]@24
  NiSourceTexture *pkTexture; // [sp+B4h] [bp-48h]@1
  int pkTexture8; // [sp+B8h] [bp-44h]@20
  SLWCreateInfo::Item *pCIItem; // [sp+BCh] [bp-40h]@24
  int uiTop; // [sp+C0h] [bp-3Ch]@11
  int uiLeft; // [sp+C4h] [bp-38h]@11
  PgSprData *pkTextWin; // [sp+C8h] [bp-34h]@20
  NiPointer<NiNode> spNode; // [sp+CCh] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+D0h] [bp-2Ch]@33
  unsigned int v77; // [sp+ECh] [bp-10h]@1
  int v78; // [sp+F8h] [bp-4h]@1
  int v79; // [sp+FCh] [bp+0h]@1

  v77 = (unsigned int)&v79 ^ __security_cookie;
  v61 = (unsigned int)&v79 ^ __security_cookie;
  v2 = this;
  this->m_pkFrameWork = pkFrameWork;
  spNode.m_pObject = 0;
  v78 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v3 = spNode.m_pObject;
    v78 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v4 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v4 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    return 0;
  }
  v6 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\CharTitle.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, v6);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "CharTitleWin", 0) )
  {
    v10 = uiLeft;
    v11 = uiTop;
    v12 = MenuTexMgr::GetTexture(0x13u);
    if ( v12 )
    {
      v60 = v12;
      v59 = &uiTop;
      v58 = &uiLeft;
      v57 = "Theme";
    }
    else
    {
      v60 = 0;
      v59 = &uiTop;
      v58 = &uiLeft;
      v57 = "Theme";
    }
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v57, v58, v59, v60);
    PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0);
    pkTexture8 = (int)MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "HelpLinkNor",
           v61) )
    {
      pkTextWin = PgSprData::Create(
                    &spNode.m_pObject->baseclass_0,
                    "HelpLinkNor",
                    &uiLeft,
                    &uiTop,
                    (NiSourceTexture *)pkTexture8);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
    }
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v15 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinSpr *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v15);
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, pkTexture);
    pkTextWin = (PgSprData *)PgWinSpr::CreateWin(
                               uiLeft - v10,
                               uiTop - v11,
                               v17,
                               &v2->baseclass_0.baseclass_0.baseclass_0,
                               0,
                               0);
    v18 = Font::Get(0);
    pkFont = v18;
    if ( v18 )
    {
      v19 = (void *)v18->m_uiDefHeight;
      v20 = pkTextWin;
      v2->m_uiFontHeight = (unsigned int)v19;
      v21 = v20->baseclass_0.vfptr;
      pkTexture8 = (int)v19;
      v22 = ((int (__stdcall *)(_DWORD))v21[36].__vecDelDtor)(0);
      v23 = pkTextWin->baseclass_0.vfptr;
      uiEdgeWidth = v22;
      ((void (*)(void))v23[37].__vecDelDtor)();
      i = 0;
      pkTexture8 *= 2;
      pCIItem = (SLWCreateInfo::Item *)v2->m_apkCurrentNickTextWin;
      do
      {
        v24 = PgWinText::CreateWin(
                pkTexture8,
                i * (v2->m_uiFontHeight + 8) + 5,
                uiEdgeWidth,
                v2->m_uiFontHeight + 8,
                pkFont,
                (PgWin *)pkTextWin,
                0,
                0);
        pCIItem->nItemType = (int)v24;
        v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v24,
          4u);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pCIItem->nItemType + 240))(0);
        (*(void (__stdcall **)(_UNKNOWN *))(*(_DWORD *)pCIItem->nItemType + 472))(&unk_98FF3F);
        pCIItem = (SLWCreateInfo::Item *)((char *)pCIItem + 4);
        ++i;
      }
      while ( i < 7 );
      ((void (__stdcall *)(D3DXCOLOR *))v2->m_apkCurrentNickTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
      ((void (__stdcall *)(char *))v2->m_apkCurrentNickTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(g_pkMainChar->m_CharTitleName);
      v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &uiLeft, &uiTop, pkTexture);
      v26 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v27 = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v26;
      v28 = ((int (__thiscall *)(PgWinSpr *))v27[36].__vecDelDtor)(v26);
      v29 = pkTextWin->baseclass_0.vfptr;
      uiEdgeWidth = v28;
      ((void (*)(void))v29[37].__vecDelDtor)();
      i = 0;
      pCIItem = (SLWCreateInfo::Item *)v2->m_apkChoiceNickTextWin;
      do
      {
        v30 = PgWinText::CreateWin(
                pkTexture8,
                i * (v2->m_uiFontHeight + 8) + 5,
                uiEdgeWidth,
                v2->m_uiFontHeight + 8,
                pkFont,
                (PgWin *)pkTextWin,
                0,
                0);
        pCIItem->nItemType = (int)v30;
        v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v30,
          4u);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pCIItem->nItemType + 240))(0);
        (*(void (__stdcall **)(_UNKNOWN *))(*(_DWORD *)pCIItem->nItemType + 472))(&unk_98FF55);
        pCIItem = (SLWCreateInfo::Item *)((char *)pCIItem + 4);
        ++i;
      }
      while ( i < 7 );
      ((void (__cdecl *)(D3DXCOLOR *))v2->m_apkChoiceNickTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
      if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
        || (v31 = Font::Get(MAIN_MENU),
            v32 = PgWinText::CreateWin(
                    uiLeft - v10,
                    uiTop - v11,
                    uiWidth,
                    uiHeight,
                    v31,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0),
            v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
            pkTextWin = (PgSprData *)v32,
            v33[122].__vecDelDtor((NiRefObject *)v32, 5u),
            ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
            pkTexture8 = (int)&pkTextWin->baseclass_0.vfptr[118],
            v34 = TextData::Get(0x68A182C6u),
            (*(void (__thiscall **)(PgSprData *, char *))pkTexture8)(pkTextWin, v34),
            ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0),
            !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
      {
        v3 = spNode.m_pObject;
        v78 = -1;
        if ( !spNode.m_pObject
          || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          return 0;
        v4 = v3 == 0;
        goto LABEL_5;
      }
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "OkClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "OkOver");
      PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
      v35 = Font::Get(MAIN_MENU);
      v36 = PgWinText::CreateWin(
              uiLeft - v10,
              uiTop - v11,
              uiWidth,
              uiHeight,
              v35,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v37 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v36;
      ((void (__thiscall *)(PgWinText *, signed int, int))v37[122].__vecDelDtor)(v36, 5, v62);
      ((void (__stdcall *)(D3DXCOLOR *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
      pkTexture8 = (int)&pkTextWin->baseclass_0.vfptr[118];
      v38 = TextData::Get(0xA5FAD5EDu);
      (*(void (__thiscall **)(PgSprData *, char *))pkTexture8)(pkTextWin, v38);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v78) = 1;
      v39 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v39->nItemType = 1;
      v39->pNode = spNode.m_pObject;
      pCIItem = v39;
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
      LOBYTE(v78) = 2;
      pkTexture8 = (int)&pCIItem->vecNodeName;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &pCIItem->vecNodeName,
        &thisa);
      LOBYTE(v78) = 1;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
      LOBYTE(v78) = 3;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTexture8,
        &thisa);
      LOBYTE(v78) = 1;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
      LOBYTE(v78) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTexture8,
        &thisa);
      LOBYTE(v78) = 1;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pCIItem->nItemType = 2;
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
      LOBYTE(v78) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &pCIItem->vecNodeName,
        &thisa);
      LOBYTE(v78) = 1;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      pCIItem->pNode = spNode.m_pObject;
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ColumnBox", &uiLeft, &uiTop, pkTexture);
      v41 = SlideListWin::CreateWin(
              uiLeft - v10,
              uiTop - v11,
              v40,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              0);
      v2->m_pListWin = v41;
      v41->m_uiLClickMsg = 12;
      SlideListWin::UpdateViewList(v2->m_pListWin);
      v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
      v43 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v42;
      v44 = (NiObjectNET *)((int (__cdecl *)(_DWORD))v43[18].__vecDelDtor)("SlideBar_DnBtnNor");
      NiObjectNET::SetName(v44, "SlideBar_DnBtnNor");
      v45 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick");
      NiObjectNET::SetName(v45, "SlideBar_DnBtnClick");
      v46 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver");
      NiObjectNET::SetName(v46, "SlideBar_DnBtnOver");
      v47 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor");
      NiObjectNET::SetName(v47, "SlideBar_UpBtnNor");
      v48 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick");
      NiObjectNET::SetName(v48, "SlideBar_UpBtnClick");
      v49 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver");
      NiObjectNET::SetName(v49, "SlideBar_UpBtnOver");
      v50 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              pkTextWin,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pSlideBarEx = v50;
      v50->m_uiClickMsg = 11;
      v2->m_pSlideBarEx->m_eType = 1;
      v51 = v2->m_pSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v52 = v2->m_pSlideBarEx;
      pkFont = (PgFont *)v51;
      v53 = (int (*)(void))v51[42].__vecDelDtor;
      pkTexture8 = (int)v52;
      v54 = v53();
      v55 = (*(int (__stdcall **)(int))(*(_DWORD *)pkTexture8 + 164))(v54 - 10);
      (*(void (__thiscall **)(SlideBar *, int))&pkFont->baseclass_0.m_acColorToken[52])(v2->m_pSlideBarEx, v55 - 6);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageOver");
      PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextPageNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageOver");
      PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
      ((void (__thiscall *)(CharTitleWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.5);
      CharTitleWin::UpdateViewList(v2);
      LOBYTE(v78) = 0;
      if ( *(_DWORD *)&kCreateInfo )
      {
        std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
          *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
          kCreateInfo.m_arrItem.baseclass_0._Mylast,
          &kCreateInfo.m_arrItem.baseclass_0._Alval,
          (std::_Nonscalar_ptr_iterator_tag)pkTexture8);
        operator delete(*(void **)&kCreateInfo);
      }
      v56 = spNode.m_pObject;
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      v78 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v56 )
        v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v56, 1u);
      result = 1;
    }
    else
    {
      v78 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v9 = spNode.m_pObject;
    v78 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004E5760) --------------------------------------------------------
void *__thiscall CharTitleWin::_scalar_deleting_destructor_(CharTitleWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CharTitleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CharTitleWin::_vftable_;
  CDataReader::_CDataReader(&this->pCharTitleData.m_CharacterTitleData);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9901E8: using guessed type int (__stdcall *CharTitleWin___vftable_)(int uiFlags);
// 990204: using guessed type int (__thiscall *CharTitleWin___vftable_)(void *p, char);

//----- (004E57E0) --------------------------------------------------------
unsigned int __cdecl ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E90: using guessed type int ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab___ms_pkTable;

//----- (004E5800) --------------------------------------------------------
void __thiscall std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *this, unsigned int _Count)
{
  signed int v2; // eax@1
  unsigned int v3; // eax@3
  signed int v4; // edx@3
  unsigned int v5; // edx@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( 1073741823 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v3 > v4 )
  {
    if ( 1073741823 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
      (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)this,
      v5);
  }
}

//----- (004E5860) --------------------------------------------------------
std::vector<CharacterTitleStateView *,std::allocator<CharacterTitleStateView *> > *__cdecl CharacterTitleStateViewTab::GetByTypeAndLevel(std::vector<CharacterTitleStateView *,std::allocator<CharacterTitleStateView *> > *result, unsigned int uiType, char Level)
{
  unsigned int v3; // ebx@1
  void *v4; // edi@2
  CharacterTitleStateView **v5; // eax@4
  signed int v6; // edi@6
  CharacterTitleStateView **v7; // eax@8
  CharacterTitleStateView **v8; // eax@12
  void *pkTSView; // [sp+4h] [bp-10h]@2
  int v11; // [sp+10h] [bp-4h]@1

  v3 = 0;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  result->baseclass_0._Mylast = 0;
  result->baseclass_0._Myend = 0;
  v11 = 0;
  if ( ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::GetTotal() )
  {
    do
    {
      v4 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::ms_pkTable + 4),
             v3);
      pkTSView = v4;
      if ( *(_DWORD *)v4 == uiType && *((_BYTE *)v4 + 4) == Level )
      {
        v5 = result->baseclass_0._Mylast;
        if ( (unsigned int)&pkTSView >= (unsigned int)v5
          || *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)&pkTSView )
        {
          if ( v5 == result->baseclass_0._Myend )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)result,
              1u);
          v8 = result->baseclass_0._Mylast;
          if ( v8 )
            *v8 = (CharacterTitleStateView *)v4;
        }
        else
        {
          v6 = (signed int)((char *)&pkTSView - *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
          if ( v5 == result->baseclass_0._Myend )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)result,
              1u);
          v7 = result->baseclass_0._Mylast;
          if ( v7 )
            *v7 = *(CharacterTitleStateView **)(*(_DWORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v6);
        }
        ++result->baseclass_0._Mylast;
      }
      ++v3;
    }
    while ( v3 < ITableBase<CharacterTitleStateView_CharacterTitleStateViewTab>::GetTotal() );
  }
  return result;
}
// A97E90: using guessed type int ITableBase_CharacterTitleStateView_CharacterTitleStateViewTab___ms_pkTable;

//----- (004E5950) --------------------------------------------------------
void __thiscall ChatBlockListWin::ChatBlockListWin(ChatBlockListWin *this)
{
  ChatBlockListWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatBlockListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatBlockListWin::_vftable_;
  CChatRestrict::CChatRestrict(&v1->m_RestrictList);
  v1->m_pkSlideBarEx = 0;
  v1->m_pBlockList = 0;
  v1->m_bAllDelete = 0;
}
// 990598: using guessed type int (__stdcall *ChatBlockListWin___vftable_)(int uiFlags);
// 9905B4: using guessed type int (__thiscall *ChatBlockListWin___vftable_)(void *p, char);

//----- (004E59D0) --------------------------------------------------------
void __thiscall ChatBlockListWin::_ChatBlockListWin(ChatBlockListWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatBlockListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatBlockListWin::_vftable_;
  CChatRestrict::_CChatRestrict(&this->m_RestrictList);
  PgWinFrame::_PgWinFrame(v1);
}
// 990598: using guessed type int (__stdcall *ChatBlockListWin___vftable_)(int uiFlags);
// 9905B4: using guessed type int (__thiscall *ChatBlockListWin___vftable_)(void *p, char);

//----- (004E5A40) --------------------------------------------------------
void __thiscall ChatBlockListWin::CloseWin(ChatBlockListWin *this)
{
  ChatBlockListWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  GameFrameWork::CloseChatBlockListWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (004E5A60) --------------------------------------------------------
void __thiscall ChatBlockListWin::OpenWin(ChatBlockListWin *this)
{
  ChatBlockListWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  GameFrameWork::OpenChatBlockListWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (004E5A80) --------------------------------------------------------
void __thiscall ChatBlockListWin::UpdateMeWin(ChatBlockListWin *this, float fCurTime)
{
  ChatBlockListWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pBlockList, v2->m_pkSlideBarEx);
}

//----- (004E5AB0) --------------------------------------------------------
void __thiscall ChatBlockListWin::ChangeUserName(ChatBlockListWin *this, Name5 *OldName, Name5 *NewName)
{
  PROTO_CHAT_RESTRICT_INFO *v3; // eax@1

  v3 = CChatRestrict::Get(&this->m_RestrictList, OldName);
  if ( v3 )
  {
    *(_QWORD *)&v3->sCharID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v3->sCharID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v3->sCharID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
  }
}

//----- (004E5AF0) --------------------------------------------------------
void __thiscall ChatBlockListWin::OnAllDeleteBtn(ChatBlockListWin *this)
{
  ChatBlockListWin *v1; // esi@1
  char *v2; // eax@2
  MsgBox *v3; // eax@2

  v1 = this;
  if ( this->m_RestrictList.m_NumOfChatRestrict )
  {
    v2 = TextData2::Get(0x2E100D5Fu);
    v3 = MsgBox::Modal(MSGBOX_OKCANCEL, v2);
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v1->m_bAllDelete = 1;
  }
}

//----- (004E5B30) --------------------------------------------------------
ChatBlockListWin *__cdecl ChatBlockListWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ChatBlockListWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0xA04u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &ChatBlockListWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ChatBlockListWin::_vftable_;
    CChatRestrict::CChatRestrict((CChatRestrict *)((char *)v2 + 360));
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_BYTE *)v2 + 356) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ChatBlockListWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 990598: using guessed type int (__stdcall *ChatBlockListWin___vftable_)(int uiFlags);
// 9905B4: using guessed type int (__thiscall *ChatBlockListWin___vftable_)(void *p, char);

//----- (004E5C90) --------------------------------------------------------
void __thiscall ChatBlockListWin::UpdateList(ChatBlockListWin *this)
{
  unsigned int v1; // edi@1
  ChatBlockListWin *v2; // ebx@1
  char *v3; // esi@2
  int v4; // ecx@3
  int v5; // edx@3
  int v6; // eax@3
  int v7; // ecx@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // eax@3
  int v9; // eax@5
  char v10; // cl@6
  char *v11; // eax@8
  const char *v12; // eax@8
  const char *v13; // eax@11
  unsigned int i; // [sp+0h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+4h] [bp-44h]@1
  char acname[21]; // [sp+20h] [bp-28h]@3
  unsigned int v17; // [sp+38h] [bp-10h]@1
  int v18; // [sp+44h] [bp-4h]@1
  int v19; // [sp+48h] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  v1 = 0;
  v2 = this;
  strText.baseclass_0._Myres = 15;
  strText.baseclass_0._Mysize = 0;
  strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v18 = 0;
  i = 0;
  if ( this->m_RestrictList.m_NumOfChatRestrict > 0 )
  {
    v3 = &this->m_RestrictList.m_ChatRestrict[0].sCharID.n5_name[8];
    do
    {
      v4 = *((_DWORD *)v3 - 1);
      v5 = *(_DWORD *)v3;
      *(_DWORD *)acname = *((_DWORD *)v3 - 2);
      v6 = *((_DWORD *)v3 + 1);
      *(_DWORD *)&acname[4] = v4;
      v7 = *((_DWORD *)v3 + 2);
      *(_DWORD *)&acname[12] = v6;
      v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strText;
      *(_DWORD *)&acname[8] = v5;
      *(_DWORD *)&acname[16] = v7;
      acname[20] = 0;
      strText.baseclass_0._Mysize = v1;
      if ( strText.baseclass_0._Myres < 0x10 )
        v8 = &strText;
      v8->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v9 = (int)acname;
      do
        v10 = *(_BYTE *)v9++;
      while ( v10 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
        &strText,
        acname,
        v9 - (_DWORD)&acname[1]);
      if ( v3[13] == 1 )
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, 1u, 32);
        v11 = TextData2::Get(0xE24476Cu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, v11, strlen(v11));
        v12 = *(const char **)&strText;
        if ( strText.baseclass_0._Myres < 0x10 )
          v12 = (const char *)&strText;
        SlideListWin::AddText(v2->m_pBlockList, v12);
        SlideListWin::SetFontColor(v2->m_pBlockList, i, 0, 128, 128, 128);
        v1 = 0;
      }
      else
      {
        v13 = *(const char **)&strText;
        if ( strText.baseclass_0._Myres < 0x10 )
          v13 = (const char *)&strText;
        SlideListWin::AddText(v2->m_pBlockList, v13);
      }
      v3 += 22;
      ++i;
    }
    while ( (signed int)i < v2->m_RestrictList.m_NumOfChatRestrict );
  }
  SlideListWin::Sort(v2->m_pBlockList, v1, v1, v1);
  SlideListWin::UpdateViewList(v2->m_pBlockList);
  if ( strText.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strText);
}
// A85C00: using guessed type int __security_cookie;

//----- (004E5E30) --------------------------------------------------------
void __thiscall ChatBlockListWin::OnSelectDeleteBtn(ChatBlockListWin *this)
{
  ChatBlockListWin *v1; // esi@1
  int v2; // eax@1
  const char *v3; // esi@2
  unsigned int v4; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@4
  char *v6; // eax@6
  _BYTE v7[20]; // ST00_20@8
  ChatBlockListWin *v8; // [sp+0h] [bp-80h]@1
  char _Ptr; // [sp+4h] [bp-7Ch]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+8h] [bp-78h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+24h] [bp-5Ch]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strID; // [sp+40h] [bp-40h]@2
  Name5 kCharID; // [sp+5Ch] [bp-24h]@8
  unsigned int v14; // [sp+70h] [bp-10h]@1
  int v15; // [sp+7Ch] [bp-4h]@2
  int v16; // [sp+80h] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  v8 = this;
  v2 = SlideListWin::GetCurSelIndex(this->m_pBlockList);
  if ( v2 >= 0 )
  {
    v3 = SlideListWin::GetText(v1->m_pBlockList, v2, 0);
    strText.baseclass_0._Myres = 15;
    strText.baseclass_0._Mysize = 0;
    strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strText, v3, strlen(v3));
    v15 = 0;
    strID.baseclass_0._Myres = 15;
    LOBYTE(v15) = 1;
    strID.baseclass_0._Mysize = 0;
    strID.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    _Ptr = 40;
    v4 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strText, &_Ptr, 0, 1u);
    if ( v4 == -1 )
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strID, &strText, 0, 0xFFFFFFFFu);
    }
    else
    {
      v5 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(&strText, &result, 0, v4 - 1);
      LOBYTE(v15) = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strID, v5);
      LOBYTE(v15) = 1;
      if ( result.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&result);
    }
    v6 = *(char **)&strID;
    if ( strID.baseclass_0._Myres < 0x10 )
      v6 = (char *)&strID;
    *(_QWORD *)&kCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kCharID.n5_name[4] = 0i64;
    *(_QWORD *)&kCharID.n5_name[0] = 0i64;
    strncpy(kCharID.n5_name, v6, 0x14u);
    *(_QWORD *)v7 = *(_QWORD *)&kCharID;
    *(_QWORD *)&v7[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&v7[16] = *(_DWORD *)&kCharID.n5_name[16];
    GameFrameWork::NcChatRestrictBlockDelReq((GameFrameWork *)v8->baseclass_0.m_pkFrameWork, *(Name5 *)v7);
    if ( strID.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strID);
    strID.baseclass_0._Myres = 15;
    strID.baseclass_0._Mysize = 0;
    strID.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strText.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strText);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004E5FC0) --------------------------------------------------------
void __thiscall ChatBlockListWin::UpdateViewList(ChatBlockListWin *this)
{
  ChatBlockListWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pBlockList;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    ChatBlockListWin::UpdateList(v1);
    SlideBar::SetSplitCnt(v1->m_pkSlideBarEx, v1->m_pBlockList->m_nSlideSplitCnt);
  }
}

//----- (004E6000) --------------------------------------------------------
void __thiscall ChatBlockListWin::DirectMessage(ChatBlockListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ChatBlockListWin *v4; // esi@1

  v4 = this;
  if ( LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) )
  {
    if ( iMsgTag == 27 && pvBody )
    {
      if ( !*(_DWORD *)pvBody
        && LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) )
      {
        GameFrameWork::NcChatRestrictDelAll(LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]));
        ChatBlockListWin::UpdateViewList((ChatBlockListWin *)((char *)v4 - 232));
        LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) = 0;
      }
      if ( *(_DWORD *)pvBody == 1 )
        LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) = 0;
    }
    LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][1]) = SlideListWin::GetCurSelIndex(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]));
  }
}

//----- (004E6060) --------------------------------------------------------
bool __thiscall ChatBlockListWin::Create(ChatBlockListWin *this, PgFrameWork *pkFrameWork)
{
  ChatBlockListWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  PgFont *v18; // eax@27
  PgWinText *v19; // eax@27
  NiRefObjectVtbl *v20; // edx@27
  char *v21; // eax@27
  PgSprData *v22; // eax@29
  SLWCreateInfo::Item *v23; // eax@29
  void *v24; // eax@29
  PgSprData *v25; // eax@29
  SlideListWin *v26; // eax@29
  PgSprData *v27; // eax@29
  SlideBar *v28; // eax@29
  void *v29; // ecx@29
  int (*v30)(void); // edx@29
  int v31; // eax@29
  int v32; // eax@29
  PgWin *v33; // edi@29
  D3DXCOLOR v34; // ST1C_16@29
  char *v35; // eax@29
  PgWin *v36; // edi@29
  D3DXCOLOR v37; // ST1C_16@29
  char *v38; // eax@29
  const char *v39; // [sp+14h] [bp-A0h]@23
  int *v40; // [sp+18h] [bp-9Ch]@23
  int *v41; // [sp+1Ch] [bp-98h]@23
  NiSourceTexture *v42; // [sp+20h] [bp-94h]@23
  unsigned int v43; // [sp+24h] [bp-90h]@1
  UIUtil ui; // [sp+34h] [bp-80h]@29
  SLWCreateInfo kCreateInfo; // [sp+48h] [bp-6Ch]@29
  unsigned int uiWidth; // [sp+64h] [bp-50h]@25
  unsigned int uiHeight; // [sp+68h] [bp-4Ch]@25
  NiPointer<NiTexturingProperty> spTexProp; // [sp+6Ch] [bp-48h]@4
  NiSourceTexture *pkTexture; // [sp+70h] [bp-44h]@7
  NiSourceTexture *pkTexture8; // [sp+74h] [bp-40h]@27
  PgSprData *pkTextWin; // [sp+78h] [bp-3Ch]@27
  int uiLeft; // [sp+7Ch] [bp-38h]@15
  int uiTop; // [sp+80h] [bp-34h]@15
  NiPointer<NiNode> spNode; // [sp+84h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+88h] [bp-2Ch]@29
  unsigned int v56; // [sp+A4h] [bp-10h]@1
  int v57; // [sp+B0h] [bp-4h]@1
  int v58; // [sp+B4h] [bp+0h]@1

  v56 = (unsigned int)&v58 ^ __security_cookie;
  v43 = (unsigned int)&v58 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v57 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ChatBlockList.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v57) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v57) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v57 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "BlockListWin", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v42 = v16;
      v41 = &uiTop;
      v40 = &uiLeft;
      v39 = "Theme";
    }
    else
    {
      v42 = 0;
      v41 = &uiTop;
      v40 = &uiLeft;
      v39 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v39, v40, v41, v42);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v18 = Font::Get(MAIN_MENU);
      v19 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              uiWidth,
              uiHeight,
              v18,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v19;
      ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v20[122].__vecDelDtor)(v19, 1, v43);
      pkTexture8 = (NiSourceTexture *)pkTextWin->baseclass_0.vfptr;
      v21 = TextData2::Get(0x353E7A97u);
      (*(void (__thiscall **)(PgSprData *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v21);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
      pkTexture8 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0, 0);
      }
      v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v57) = 2;
      v23 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v23->nItemType = 1;
      v23->pNode = spNode.m_pObject;
      pkTextWin = (PgSprData *)v23;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      LOBYTE(v57) = 3;
      pkTexture8 = (NiSourceTexture *)&pkTextWin->m_akAlphaPropertyData.m_uiSize;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)&pkTextWin->m_akAlphaPropertyData.m_uiSize,
        &thisa);
      LOBYTE(v57) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v57) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTexture8,
        &thisa);
      LOBYTE(v57) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v24 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = (PgSprData *)v24;
      *(_DWORD *)v24 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column01");
      LOBYTE(v57) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)&pkTextWin->m_akAlphaPropertyData.m_uiSize,
        &thisa);
      LOBYTE(v57) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      pkTextWin->baseclass_0.m_uiRefCount = (unsigned int)spNode.m_pObject;
      kCreateInfo.m_nOffX = 3;
      kCreateInfo.m_nOffY = 0;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, pkTexture);
      v26 = SlideListWin::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              v25,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              0);
      v2->m_pBlockList = v26;
      v26->m_uiLClickMsg = 8;
      SlideListWin::AlignText(v2->m_pBlockList, 0);
      SlideListWin::UpdateViewList(v2->m_pBlockList);
      v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
      v28 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v27,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkSlideBarEx = v28;
      v28->m_uiClickMsg = 4;
      v2->m_pkSlideBarEx->m_eType = 1;
      v29 = v2->m_pkSlideBarEx;
      v30 = (int (*)(void))v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
      pkTexture = (NiSourceTexture *)v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTexture8 = (NiSourceTexture *)v29;
      v31 = v30();
      v32 = ((int (__cdecl *)(int))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v31);
      ((void (__thiscall *)(SlideBar *, int))pkTexture[4].baseclass_0.m_kFormatPrefs.m_eMipMapped)(
        v2->m_pkSlideBarEx,
        v32);
      SlideBar::SetSplitCnt(v2->m_pkSlideBarEx, v2->m_pBlockList->m_nSlideSplitCnt);
      UIUtil::UIUtil(&ui);
      LOBYTE(v57) = 6;
      UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, v14, v15);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      v33 = (PgWin *)UIUtil::CreateBtn(&ui, 1u, "Btn01Nor", "Btn01Click", "Btn01Over", 0, 0);
      *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v35 = TextData2::Get(0xD1CB1226u);
      UIUtil::CreateAttachedText(&ui, v33, v35, COERCE_D3DXCOLOR(v34.r), 5u);
      v36 = (PgWin *)UIUtil::CreateBtn(&ui, 2u, "Btn02Nor", "Btn02Click", "Btn02Over", 0, 0);
      *(_QWORD *)&v37.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v37.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v38 = TextData2::Get(0x8CCBC5D1u);
      UIUtil::CreateAttachedText(&ui, v36, v38, COERCE_D3DXCOLOR(v37.r), 5u);
      ((void (__thiscall *)(ChatBlockListWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.40000001,
        0.5);
      LOBYTE(v57) = 2;
      UIUtil::_UIUtil(&ui);
      LOBYTE(v57) = 1;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      LOBYTE(v57) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v57 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v57) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v57 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v57) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004E6760) --------------------------------------------------------
void __thiscall ChatBlockListWin::OnSlideBar(ChatBlockListWin *this)
{
  ChatBlockListWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pBlockList;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarEx;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
      v1->m_pBlockList->m_nViewStartPos = v1->m_pkSlideBarEx->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pBlockList);
    }
  }
}

//----- (004E67B0) --------------------------------------------------------
void __thiscall mhDiceRankWin::ProcessMeInput(ChatBlockListWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (004E6830) --------------------------------------------------------
void *__thiscall ChatBlockListWin::_scalar_deleting_destructor_(ChatBlockListWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatBlockListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatBlockListWin::_vftable_;
  CChatRestrict::_CChatRestrict(&this->m_RestrictList);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 990598: using guessed type int (__stdcall *ChatBlockListWin___vftable_)(int uiFlags);
// 9905B4: using guessed type int (__thiscall *ChatBlockListWin___vftable_)(void *p, char);

//----- (004E68B0) --------------------------------------------------------
void __thiscall ChatBlockListWin::OnCommand(ChatBlockListWin *this, unsigned int wParam, int lParam)
{
  ChatBlockListWin *v3; // esi@1
  PgFrameWork *v4; // eax@6

  v3 = this;
  switch ( wParam )
  {
    case 7u:
      ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      GameFrameWork::CloseChatBlockListWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      break;
    case 1u:
      ChatBlockListWin::OnSelectDeleteBtn(this);
      break;
    case 2u:
      ChatBlockListWin::OnAllDeleteBtn(this);
      break;
    case 4u:
      ChatBlockListWin::OnSlideBar(this);
      break;
    case 9u:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "ChatBlockList");
      break;
    default:
      return;
  }
}

//----- (004E6950) --------------------------------------------------------
void __thiscall ChatEditWin::ChatStart(ChatEditWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  ((void (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v1);
}

//----- (004E6970) --------------------------------------------------------
void __thiscall ChatEditWin::OnEditEnd(ChatEditWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // edi@2
  char *v5; // eax@2

  v3 = (PgWin *)this;
  if ( wParam == 1 )
  {
    v4 = this->baseclass_0.m_pkFrameWork;
    v5 = (char *)((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
    GameFrameWork::DecodingChat((GameFrameWork *)v4, v5, 0, 0);
  }
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
}

//----- (004E69B0) --------------------------------------------------------
void __thiscall ChatEditWin::ChatEditWin(ChatEditWin *this)
{
  ChatEditWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatEditWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatEditWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
}
// 990820: using guessed type int (__stdcall *ChatEditWin___vftable_)(int uiFlags);
// 99083C: using guessed type int (__thiscall *ChatEditWin___vftable_)(void *p, char);

//----- (004E69E0) --------------------------------------------------------
void __thiscall ChatEditWin::_ChatEditWin(ChatEditWin *this)
{
  ChatEditWin *v1; // esi@1
  EditWin *v2; // edi@1
  EditWin *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatEditWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatEditWin::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spEdit.m_pObject = 0;
  }
  v3 = v1->m_spEdit.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 990820: using guessed type int (__stdcall *ChatEditWin___vftable_)(int uiFlags);
// 99083C: using guessed type int (__thiscall *ChatEditWin___vftable_)(void *p, char);

//----- (004E6AA0) --------------------------------------------------------
bool __thiscall ChatEditWin::Create(ChatEditWin *this, NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork)
{
  ChatEditWin *v3; // edi@1
  NiTexturePalette *v4; // esi@1
  char *v5; // eax@3
  PgSprData *v6; // eax@4
  NiNode *v7; // esi@5
  PgSprData *v9; // eax@10
  PgWinSpr *v10; // esi@10
  unsigned int v11; // ST0C_4@10
  unsigned int v12; // ST08_4@10
  int v13; // ST04_4@10
  int v14; // eax@10
  EditWin *v15; // eax@10
  EditWin *v16; // esi@10
  EditWin *v17; // ebx@10
  NiNode *v18; // esi@17
  int uiLeft; // [sp+1Ch] [bp-18h]@4
  int uiTop; // [sp+20h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+24h] [bp-10h]@1
  int v22; // [sp+30h] [bp-4h]@1

  v3 = this;
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v22 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "ChatInputWin.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "frame", &uiLeft, &uiTop, pkTexture);
  if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v6, 0, pkFrameWork, "CharEditWin", 0) )
  {
    v7 = spNode.m_pObject;
    v22 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "chat input", &uiLeft, &uiTop, pkTexture);
  v10 = PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11 = ((int (__thiscall *)(PgWinSpr *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v10)
      - 1;
  v12 = ((int (__thiscall *)(PgWinSpr *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v10)
      - 1;
  v13 = ((int (__thiscall *)(PgWinSpr *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v10)
      + 3;
  v14 = ((int (__thiscall *)(PgWinSpr *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v10);
  v15 = EditWin::CreateWin(v14 + 2, v13, v12, v11, &v3->baseclass_0.baseclass_0.baseclass_0, NORMAL, 0x80u, 5u, 1, 0, 1);
  v16 = v3->m_spEdit.m_pObject;
  v17 = v15;
  if ( v16 != v15 )
  {
    if ( v16
      && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v16 )
      v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v16,
        1u);
    v3->m_spEdit.m_pObject = v17;
    if ( v17 )
      InterlockedIncrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__thiscall *)(ChatEditWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    1.0);
  v18 = spNode.m_pObject;
  v22 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v18 )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004E6CB0) --------------------------------------------------------
ChatEditWin *__cdecl ChatEditWin::CreateWin(NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@8
  ChatEditWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x160u);
  v3 = v2;
  result.m_pObject = (PgWin *)v2;
  v7 = 0;
  if ( v2 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v2);
    *(_DWORD *)v3 = &ChatEditWin::_vftable_;
    *((_DWORD *)v3 + 58) = &ChatEditWin::_vftable_;
    *((_DWORD *)v3 + 86) = 0;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiSourceTexture *, PgFrameWork *))(*(_DWORD *)v3 + 540))(
                          v3,
                          pkTexture,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = (ChatEditWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}
// 990820: using guessed type int (__stdcall *ChatEditWin___vftable_)(int uiFlags);
// 99083C: using guessed type int (__thiscall *ChatEditWin___vftable_)(void *p, char);

//----- (004E6E00) --------------------------------------------------------
void *__thiscall ChatEditWin::_scalar_deleting_destructor_(ChatEditWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ChatEditWin::_ChatEditWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004E6E40) --------------------------------------------------------
void __thiscall ClockShadowWin::CoolTimeDecrease(ClockShadowWin *this, unsigned __int16 kID)
{
  double v2; // st7@1

  v2 = this->m_fRotateTime;
  this->m_kSkillID = kID;
  if ( 0.0 != v2 )
    this->m_fRotateTime = this->m_fRotateTime - 1.0;
  if ( this->m_fRotateTime == 0.0 )
    Skill::DecreaseRecordTime(kID);
}

//----- (004E6E90) --------------------------------------------------------
void __thiscall ClockShadowWin::StopClockShadow(ClockShadowWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  this->m_bStart = 0;
}

//----- (004E6EA0) --------------------------------------------------------
void __thiscall ClockShadowWin::ClockShadowWin(ClockShadowWin *this)
{
  ClockShadowWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClockShadowWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ClockShadowWin::_vftable_;
  v1->m_spTriShape.m_pObject = 0;
  v1->m_bStart = 0;
  v1->m_kSkillID = -1;
  v1->b_show = 1;
}
// 990A60: using guessed type int (__stdcall *ClockShadowWin___vftable_)(int uiFlags);
// 990A7C: using guessed type int (__thiscall *ClockShadowWin___vftable_)(void *p, char);

//----- (004E6EE0) --------------------------------------------------------
void __thiscall ClockShadowWin::_ClockShadowWin(ClockShadowWin *this)
{
  ClockShadowWin *v1; // esi@1
  NiTriShape *v2; // edi@1
  NiTriShape *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClockShadowWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ClockShadowWin::_vftable_;
  v2 = this->m_spTriShape.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spTriShape.m_pObject = 0;
  }
  v3 = v1->m_spTriShape.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWin::_PgWin(&v1->baseclass_0);
}
// 990A60: using guessed type int (__stdcall *ClockShadowWin___vftable_)(int uiFlags);
// 990A7C: using guessed type int (__thiscall *ClockShadowWin___vftable_)(void *p, char);

//----- (004E6FA0) --------------------------------------------------------
void __thiscall ClockShadowWin::ResetVertex(ClockShadowWin *this)
{
  NiPoint3 *v1; // eax@3
  char *v2; // ecx@3
  signed int v3; // edx@3

  if ( !(_S3_4 & 1) )
  {
    _S3_4 |= 1u;
    aVerTex[0].x = 16.0;
    aVerTex[0].y = 0.0;
    aVerTex[0].z = 0.0;
    aVerTex[1].z = 0.0;
    aVerTex[1].x = 16.0;
    aVerTex[1].y = 16.0;
    aVerTex[2].x = 32.0;
    aVerTex[3].x = 32.0;
    aVerTex[5].x = 32.0;
    aVerTex[5].y = 32.0;
    aVerTex[6].x = 32.0;
    aVerTex[6].y = 32.0;
    aVerTex[8].y = 32.0;
    aVerTex[9].y = 32.0;
    aVerTex[2].y = 0.0;
    aVerTex[2].z = 0.0;
    aVerTex[3].y = 0.0;
    aVerTex[3].z = 0.0;
    aVerTex[4].z = 0.0;
    aVerTex[5].z = 0.0;
    aVerTex[6].z = 0.0;
    aVerTex[7].z = 0.0;
    aVerTex[8].x = 0.0;
    aVerTex[8].z = 0.0;
    aVerTex[9].x = 0.0;
    aVerTex[9].z = 0.0;
    aVerTex[10].z = 0.0;
    aVerTex[11].x = 0.0;
    aVerTex[11].y = 0.0;
    aVerTex[11].z = 0.0;
    aVerTex[12].x = 0.0;
    aVerTex[12].y = 0.0;
    aVerTex[12].z = 0.0;
    aVerTex[13].z = 0.0;
    aVerTex[14].y = 0.0;
    aVerTex[14].z = 0.0;
    aVerTex[4].x = 16.0;
    aVerTex[4].y = 16.0;
    aVerTex[7].x = 16.0;
    aVerTex[7].y = 16.0;
    aVerTex[10].x = 16.0;
    aVerTex[10].y = 16.0;
    aVerTex[13].x = 16.0;
    aVerTex[13].y = 16.0;
    aVerTex[14].x = 16.0;
  }
  v1 = this->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
  v2 = (char *)((char *)aVerTex - (char *)v1);
  v3 = 15;
  do
  {
    LODWORD(v1->x) = *(_DWORD *)((char *)&v1->x + (_DWORD)v2);
    LODWORD(v1->y) = *(_DWORD *)((char *)&v1->y + (_DWORD)v2);
    LODWORD(v1->z) = *(_DWORD *)((char *)&v1->z + (_DWORD)v2);
    ++v1;
    --v3;
  }
  while ( v3 );
}

//----- (004E7110) --------------------------------------------------------
void __thiscall ClockShadowWin::Start(ClockShadowWin *this, float fCurTime, float fRoateTime, float fStartTime)
{
  this->m_bStart = 1;
  this->m_fStartTime = fCurTime - fStartTime;
  this->m_fRotateTime = fRoateTime;
  ClockShadowWin::ResetVertex(this);
}

//----- (004E7140) --------------------------------------------------------
void __thiscall ClockShadowWin::HideTri(ClockShadowWin *this, unsigned int uiTriPart)
{
  NiPoint3 *v2; // eax@1
  float v3; // ecx@1
  unsigned int v4; // eax@1
  int v5; // edx@1
  int v6; // ecx@1

  v2 = this->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
  v3 = v2[3 * uiTriPart + 2].x;
  v4 = (unsigned int)&v2[3 * uiTriPart];
  v5 = *(_DWORD *)(v4 + 28);
  *(_DWORD *)v4 = LODWORD(v3);
  v6 = *(_DWORD *)(v4 + 32);
  *(_DWORD *)(v4 + 4) = v5;
  *(_DWORD *)(v4 + 8) = v6;
}

//----- (004E7180) --------------------------------------------------------
void __thiscall ClockShadowWin::ChangeTriVertex(ClockShadowWin *this, unsigned int uiTriPart, float fX, float fY)
{
  NiPoint3 *v4; // edx@1

  v4 = this->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
  v4[3 * uiTriPart].x = fX;
  v4[3 * uiTriPart].y = fY;
  this->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_usDirtyFlags |= 1u;
}

//----- (004E71C0) --------------------------------------------------------
void __thiscall ClockShadowWin::UpdateMeWin(ClockShadowWin *this, float fCurTime)
{
  ClockShadowWin *v2; // esi@1
  signed int v3; // edi@3
  double v4; // st7@3
  NiPoint3 *v5; // eax@4
  float v6; // ecx@4
  float v7; // edx@4
  NiPoint3 *v8; // eax@6
  float v9; // ecx@6
  float v10; // edx@6
  NiPoint3 *v11; // eax@8
  float v12; // ecx@8
  float v13; // edx@8
  NiPoint3 *v14; // eax@10
  float v15; // ecx@10
  float v16; // edx@10
  double v17; // st6@17
  double v18; // st7@17
  double v19; // st7@19
  double v20; // st6@19
  double v21; // st7@19
  double v22; // st7@22
  double v23; // st6@22
  double v24; // st7@22
  double v25; // st7@25
  double v26; // st6@25
  double v27; // st7@25
  NiPoint3 *v28; // eax@29
  unsigned __int16 v29; // ax@30
  float fX; // [sp+0h] [bp-4h]@1
  float fPastTime; // [sp+Ch] [bp+8h]@1
  float fPastTimeb; // [sp+Ch] [bp+8h]@3
  float fPastTimea; // [sp+Ch] [bp+8h]@17
  float fPastTimec; // [sp+Ch] [bp+8h]@19
  float fPastTimed; // [sp+Ch] [bp+8h]@19
  float fPastTimee; // [sp+Ch] [bp+8h]@22
  float fPastTimef; // [sp+Ch] [bp+8h]@22
  float fPastTimeg; // [sp+Ch] [bp+8h]@25
  float fPastTimeh; // [sp+Ch] [bp+8h]@25

  LODWORD(fX) = this;
  v2 = this;
  fPastTime = fCurTime - this->m_fStartTime;
  if ( this->m_bStart && this->m_fRotateTime > (double)fPastTime )
  {
    v3 = 0;
    fPastTimeb = fPastTime / this->m_fRotateTime;
    v4 = fPastTimeb;
    if ( fPastTimeb > 0.125 )
    {
      v5 = this->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
      v6 = v5[2].y;
      v5->x = v5[2].x;
      v7 = v5[2].z;
      v5->y = v6;
      v5->z = v7;
      v3 = 1;
    }
    if ( v4 > 0.375 )
    {
      v8 = v2->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
      v9 = v8[5].y;
      v8[3].x = v8[5].x;
      v10 = v8[5].z;
      v8[3].y = v9;
      v8[3].z = v10;
      v3 = 2;
    }
    if ( v4 > 0.625 )
    {
      v11 = v2->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
      v12 = v11[8].y;
      v11[6].x = v11[8].x;
      v13 = v11[8].z;
      v11[6].y = v12;
      v11[6].z = v13;
      v3 = 3;
    }
    if ( v4 >= 0.875 )
    {
      v14 = v2->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
      v15 = v14[11].y;
      v14[9].x = v14[11].x;
      v16 = v14[11].z;
      v14[9].y = v15;
      v14[9].z = v16;
      v3 = 4;
    }
    if ( v4 < 1.0 )
    {
      if ( v2->b_show )
        v2->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      else
        v2->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      v17 = v4 * (NI_PI + NI_PI);
      v18 = NI_PI;
      fPastTimea = v17;
      switch ( v3 )
      {
        case 0:
          JUMPOUT(*(int *)loc_4E733F);
          return;
        case 1:
          v19 = v18 * 0.25;
          fPastTimec = fPastTimea - v19;
          v20 = v19;
          v21 = fPastTimec;
          fPastTimed = v20;
          if ( fPastTimed >= v21 )
            JUMPOUT(*(int *)loc_4E7391);
          JUMPOUT(*(int *)loc_4E73B0);
          return;
        case 2:
          v22 = v18 * 0.25;
          fPastTimee = fPastTimea - v22 * 3.0;
          v23 = v22;
          v24 = fPastTimee;
          fPastTimef = v23;
          if ( fPastTimef >= v24 )
            JUMPOUT(*(int *)loc_4E7414);
          JUMPOUT(*(int *)loc_4E7433);
          return;
        case 3:
          v25 = v18 * 0.25;
          fPastTimeg = fPastTimea - v25 * 5.0;
          v26 = v25;
          v27 = fPastTimeg;
          fPastTimeh = v26;
          if ( fPastTimeh >= v27 )
            JUMPOUT(*(int *)loc_4E7497);
          JUMPOUT(*(int *)loc_4E74B6);
          return;
        case 4:
          JUMPOUT(*(int *)loc_4E7500);
          return;
        default:
          v28 = v2->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkVertex;
          v28[3 * v3].x = fX;
          v28[3 * v3].y = fPastTimea;
          v2->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_usDirtyFlags |= 1u;
          break;
      }
    }
    else
    {
      v2->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
  }
  else
  {
    v29 = this->m_kSkillID;
    this->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    this->m_bStart = 0;
    if ( v29 != -1 )
    {
      this->m_fRotateTime = 0.0;
      Skill::DecreaseRecordTime(v29);
      v2->m_kSkillID = -1;
    }
  }
}
// 4E733F: using guessed type int __stdcall(float fPastTime);
// 4E7391: using guessed type int __stdcall(float fPastTime);
// 4E73B0: using guessed type int __stdcall(float fPastTime);
// 4E7414: using guessed type int __stdcall(float fPastTime);
// 4E7433: using guessed type int __stdcall(float fPastTime);
// 4E7497: using guessed type int __stdcall(float fPastTime);
// 4E74B6: using guessed type int __stdcall(float fPastTime);
// 4E7500: using guessed type int __stdcall(float fPastTime);
// B6DE8C: using guessed type const float NI_PI;

//----- (004E75C0) --------------------------------------------------------
void __thiscall ClockShadowWin::CreateGeometry(ClockShadowWin *this)
{
  ClockShadowWin *v1; // edi@1
  void *v2; // eax@1
  NiPoint3 *v3; // ebx@1
  void *v4; // esi@1
  unsigned int v5; // eax@1
  void *v6; // eax@3
  int v7; // eax@4
  int v8; // ebx@4
  NiTriShape *v9; // esi@6
  NiGeometryData *v10; // eax@13
  void *v11; // eax@13
  void *v12; // esi@13
  void *v13; // ebx@14
  void *v14; // eax@16
  void *v15; // esi@16
  int v16; // eax@16
  void *v17; // eax@19
  NiPoint3 *v18; // eax@20
  NiPoint3 *v19; // esi@20
  NiRoom *v20; // eax@24
  volatile LONG *v21; // ebx@24
  NiBound kBound; // [sp+1Ch] [bp-34h]@13
  float v23; // [sp+2Ch] [bp-24h]@22
  float v24; // [sp+30h] [bp-20h]@22
  float v25; // [sp+34h] [bp-1Ch]@22
  NiPoint3 *v26; // [sp+38h] [bp-18h]@3
  NiPointer<NiRoom> element; // [sp+3Ch] [bp-14h]@22
  NiPoint3 *pkData; // [sp+40h] [bp-10h]@1
  int v29; // [sp+4Ch] [bp-4h]@3

  v1 = this;
  v2 = operator new__(0xB4u);
  v3 = (NiPoint3 *)v2;
  pkData = (NiPoint3 *)v2;
  v4 = operator new__(0x1Eu);
  v5 = 0;
  do
  {
    *((_WORD *)v4 + v5) = v5;
    ++v5;
  }
  while ( v5 < 0xF );
  v6 = operator new(0xC4u);
  v26 = (NiPoint3 *)v6;
  v29 = 0;
  if ( v6 )
  {
    NiTriShape::NiTriShape((NiTriShape *)v6, 0xFu, v3, 0, 0, 0, 0, 0, 5u, (unsigned __int16 *)v4);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  v9 = v1->m_spTriShape.m_pObject;
  v29 = -1;
  if ( v9 != (NiTriShape *)v8 )
  {
    if ( v9
      && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v9,
        1u);
    v1->m_spTriShape.m_pObject = (NiTriShape *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)(v8 + 4));
  }
  ClockShadowWin::ResetVertex(v1);
  NiBound::ComputeFromData(&kBound, 15, pkData);
  v10 = v1->m_spTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject;
  LODWORD(v10->m_kBound.m_kCenter.x) = (_DWORD)kBound.m_kCenter.x;
  v10->m_kBound.m_kCenter.y = kBound.m_kCenter.y;
  v10->m_kBound.m_kCenter.z = kBound.m_kCenter.z;
  v10->m_kBound.m_fRadius = kBound.m_fRadius;
  NiAVObject::Update(&v1->m_spTriShape.m_pObject->baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  v11 = operator new(0x20u);
  v12 = v11;
  v26 = (NiPoint3 *)v11;
  v29 = 1;
  if ( v11 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v11);
    *(_DWORD *)v12 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v12 + 14) = 236;
    *((_BYTE *)v12 + 30) = 0;
    v13 = v12;
  }
  else
  {
    v13 = 0;
  }
  *((_WORD *)v13 + 14) |= 1u;
  v29 = -1;
  v14 = operator new(0x28u);
  v15 = v14;
  v26 = (NiPoint3 *)v14;
  v16 = 0;
  v29 = 2;
  if ( v26 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v15);
    v16 = 0;
    *(_DWORD *)v15 = &NiVertexColorProperty::_vftable_;
    *((_WORD *)v15 + 14) = 0;
    *((_DWORD *)v15 + 8) = 0;
    *((_DWORD *)v15 + 9) = 1;
    pkData = (NiPoint3 *)v15;
  }
  else
  {
    pkData = 0;
    v15 = 0;
  }
  v29 = -1;
  *((_DWORD *)v15 + 8) = v16;
  *((_DWORD *)v15 + 9) = v16;
  v17 = operator new(0x60u);
  v26 = (NiPoint3 *)v17;
  v29 = 3;
  if ( v17 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v17);
    v19 = v18;
  }
  else
  {
    v19 = 0;
  }
  LODWORD(v19[7].y) += 2;
  v23 = 0.0;
  element.m_pObject = (NiRoom *)v13;
  v24 = 0.0;
  v25 = 0.0;
  v19[5].z = 0.0;
  v19[7].x = 0.75;
  v19[6].x = 0.0;
  v19[6].y = 0.0;
  v26 = (NiPoint3 *)v1->m_spTriShape.m_pObject;
  InterlockedIncrement((volatile LONG *)v13 + 1);
  v29 = 4;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v26[13],
    &element);
  v29 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v13 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v13)(v13, 1);
  v20 = (NiRoom *)v1->m_spTriShape.m_pObject;
  v26 = pkData;
  v21 = (volatile LONG *)&pkData->y;
  element.m_pObject = v20;
  InterlockedIncrement((volatile LONG *)&pkData->y);
  v29 = 5;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&element.m_pObject->baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v26);
  v29 = -1;
  if ( !InterlockedDecrement(v21) )
    (*LODWORD(pkData->x))(1);
  element.m_pObject = (NiRoom *)v1->m_spTriShape.m_pObject;
  v26 = v19;
  InterlockedIncrement((volatile LONG *)&v19->y);
  v29 = 6;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&element.m_pObject->baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v26);
  v29 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v19->y) )
    (*(void (__thiscall **)(NiPoint3 *, signed int))LODWORD(v19->x))(v19, 1);
  ((void (__cdecl *)(NiTriShape *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v1->m_spTriShape.m_pObject);
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (004E78D0) --------------------------------------------------------
bool __thiscall ClockShadowWin::Create(ClockShadowWin *this, int iXPos, int iYPos, PgWin *pkParent)
{
  ClockShadowWin *v4; // esi@1
  bool result; // al@1

  v4 = this;
  result = PgWin::Create(&this->baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    ClockShadowWin::CreateGeometry(v4);
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v4,
      0);
    result = 1;
  }
  return result;
}

//----- (004E7920) --------------------------------------------------------
ClockShadowWin *__cdecl ClockShadowWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  ClockShadowWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x134u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    PgWin::PgWin((PgWin *)v3);
    *(_DWORD *)v4 = &ClockShadowWin::_vftable_;
    *((_DWORD *)v4 + 58) = &ClockShadowWin::_vftable_;
    *((_DWORD *)v4 + 72) = 0;
    *((_BYTE *)v4 + 292) = 0;
    *((_BYTE *)v4 + 304) = 1;
    *((_WORD *)v4 + 153) = -1;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 452))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (ClockShadowWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 990A60: using guessed type int (__stdcall *ClockShadowWin___vftable_)(int uiFlags);
// 990A7C: using guessed type int (__thiscall *ClockShadowWin___vftable_)(void *p, char);

//----- (004E7A90) --------------------------------------------------------
void __thiscall NiGeometry::SetModelBound(NiGeometry *this, NiBound *kBound)
{
  NiGeometryData *v2; // eax@1

  v2 = this->m_spModelData.m_pObject;
  v2->m_kBound.m_kCenter.x = kBound->m_kCenter.x;
  v2->m_kBound.m_kCenter.y = kBound->m_kCenter.y;
  v2->m_kBound.m_kCenter.z = kBound->m_kCenter.z;
  v2->m_kBound.m_fRadius = kBound->m_fRadius;
}

//----- (004E7AC0) --------------------------------------------------------
void *__thiscall ClockShadowWin::_scalar_deleting_destructor_(ClockShadowWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ClockShadowWin::_ClockShadowWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004E7AF0) --------------------------------------------------------
void __thiscall CollectCardWin::OnShowWin(CollectCardWin *this)
{
  double v1; // st7@0
  CollectCardWin *v2; // esi@1

  v2 = this;
  if ( this->m_pkWhiteBlindSpr )
  {
    ((void (*)(void))this->m_pkWhiteBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
    if ( 0.0 != v1 )
    {
      if ( !v2->m_bPlay )
      {
        if ( !v2->m_bOpenCard )
          ((void (__stdcall *)(_DWORD))v2->m_pkWhiteBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.0);
      }
    }
  }
}

//----- (004E7B50) --------------------------------------------------------
void __thiscall CollectCardWin::SetUnidentified(CollectCardWin *this, bool bUnidentified)
{
  if ( this->m_pkUnidentifiedSpr )
    ((void (__stdcall *)(_DWORD))this->m_pkUnidentifiedSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUnidentified);
}

//----- (004E7B80) --------------------------------------------------------
void __thiscall CollectCardWin::SetName(CollectCardWin *this, const char *pcName)
{
  if ( this->m_pkNameText )
    ((void (__stdcall *)(_DWORD))this->m_pkNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcName);
}

//----- (004E7BB0) --------------------------------------------------------
bool __thiscall CollectCardWin::IsSameCard(CollectCardWin *this, unsigned int uiCardID, unsigned int uiSerial)
{
  CollectCardWin *v3; // esi@1
  bool result; // al@1

  v3 = this;
  result = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  if ( result )
    result = v3->m_uiCardID == uiCardID && v3->m_uiSerial == uiSerial;
  return result;
}

//----- (004E7BF0) --------------------------------------------------------
bool __thiscall CollectCardWin::IsPlay(CollectCardWin *this)
{
  CollectCardWin *v1; // esi@1

  v1 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v1->m_bPlay = 0;
  return v1->m_bPlay;
}

//----- (004E7C10) --------------------------------------------------------
bool __thiscall CollectCardWin::IsOpen(CollectCardWin *this)
{
  double v1; // st7@0
  CollectCardWin *v2; // esi@1
  PgWinSpr *v3; // ecx@3
  bool v4; // al@3

  v2 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2->m_bOpenCard = 0;
  v3 = v2->m_pkWhiteBlindSpr;
  v4 = 0;
  if ( v3 )
  {
    ((void (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
    v4 = v1 > 0.0;
  }
  return v2->m_bOpenCard || v4;
}

//----- (004E7C70) --------------------------------------------------------
void __thiscall CollectCardWin::OpenCard(CollectCardWin *this)
{
  this->m_bOpenCard = 1;
}

//----- (004E7C80) --------------------------------------------------------
void __thiscall CollectCardWin::ProcessMeInput(CollectCardWin *this, bool *bHit)
{
  CollectCardWin *v2; // esi@1

  v2 = this;
  if ( !this->m_bPlay )
  {
    if ( dword_B70350 >= 1 && !this->baseclass_0.m_bIsDuringMove )
    {
      this->m_uiOldXPos = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
      v2->m_uiOldYPos = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
      PgWinFrame::ProcessMeInput(&v2->baseclass_0, bHit);
      return;
    }
    if ( dword_B7035C >= 1
      && this->baseclass_0.m_bIsDuringMove == 1
      && this->m_uiOldXPos == ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)() )
    {
      if ( v2->m_uiOldYPos == ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2) )
      {
        v2->m_uiSerial = 0;
        v2->m_uiCardID = 0;
        v2->m_uiOldXPos = 0;
        v2->m_uiOldYPos = 0;
        PgWin::PostMsg(&v2->baseclass_0.baseclass_0.baseclass_0, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      }
    }
  }
  PgWinFrame::ProcessMeInput(&v2->baseclass_0, bHit);
}
// B70350: using guessed type int dword_B70350;
// B7035C: using guessed type int dword_B7035C;

//----- (004E7D50) --------------------------------------------------------
void __thiscall CollectCardWin::UpdateOpen(CollectCardWin *this, float fCurTime)
{
  CollectCardWin *v2; // esi@1
  float v3; // ST08_4@2
  double v4; // st7@2
  PgWinSpr *v5; // ecx@4
  NiRefObjectVtbl *v6; // eax@7
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // edx@7

  v2 = this;
  if ( this->m_bOpenCard )
  {
    v3 = this->m_fAlphaBlendValue - Timer::ms_fDeltaTime;
    this->m_fAlphaBlendValue = v3;
    v4 = 0.0;
    if ( v3 < 0.0 )
      this->m_fAlphaBlendValue = 0.0;
    v5 = this->m_pkWhiteBlindSpr;
    if ( v5 )
    {
      ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlphaBlendValue);
      v4 = 0.0;
    }
    if ( v4 == v2->m_fAlphaBlendValue )
    {
      v6 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v2->m_fPlayTime = v4;
      v7 = v6[130].__vecDelDtor;
      v2->m_fPlayStartTime = v4;
      v2->m_bOpenCard = 0;
      v2->m_uiPlayCardID = 0;
      v7(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 1u);
    }
  }
}
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (004E7E00) --------------------------------------------------------
NiSourceTexture *__thiscall CollectCardWin::LoadImageFile(CollectCardWin *this, const char *pcFileName)
{
  NiImageConverter *v2; // eax@1
  NiSourceTexture *result; // eax@1
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-Ch]@2

  v2 = NiImageConverter::GetImageConverter();
  result = (NiSourceTexture *)((int (__thiscall *)(NiImageConverter *, const char *, _DWORD))v2->baseclass_0.vfptr[2].__vecDelDtor)(
                                v2,
                                pcFileName,
                                0);
  if ( result )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 2;
    kPrefs.m_eMipMapped = 0;
    result = NiSourceTexture::Create((NiPixelData *)result, &kPrefs);
  }
  return result;
}

//----- (004E7E50) --------------------------------------------------------
void __thiscall CollectCardWin::SetBoard(CollectCardWin *this, unsigned int uiGrade)
{
  int v2; // ecx@1

  v2 = *(_DWORD *)(*(_DWORD *)&this->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiGrade);
  if ( v2 )
    (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 256))(1);
}

//----- (004E7E80) --------------------------------------------------------
void __thiscall CollectCardWin::SetStar(CollectCardWin *this, unsigned int uiStar)
{
  CollectCardWin *v2; // ebx@1
  unsigned int v3; // edi@2
  unsigned int v4; // esi@4
  int v5; // ecx@5

  v2 = this;
  if ( !this->m_bPlay )
  {
    v3 = uiStar;
    if ( uiStar > 9 )
      v3 = 9;
    v4 = 0;
    if ( v3 )
    {
      do
      {
        v5 = *(_DWORD *)(*(_DWORD *)&v2->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4);
        if ( v5 )
          (*(void (__stdcall **)(signed int))(*(_DWORD *)v5 + 256))(1);
        ++v4;
      }
      while ( v4 < v3 );
    }
  }
}

//----- (004E7ED0) --------------------------------------------------------
void __thiscall CollectCardWin::Reset(CollectCardWin *this)
{
  CollectCardWin *v1; // edi@1
  unsigned int v2; // esi@5
  int v3; // ecx@6
  unsigned int v4; // esi@9
  int v5; // ecx@10
  unsigned int v6; // esi@13
  int v7; // ecx@14
  unsigned int v8; // esi@17
  int v9; // ecx@18

  v1 = this;
  if ( this->m_pkSerialText )
    ((void (__stdcall *)(_UNKNOWN *))this->m_pkSerialText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_990CC6);
  if ( v1->m_pkNameText )
    ((void (__stdcall *)(_UNKNOWN *))v1->m_pkNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_990CC7);
  v2 = 0;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0);
    v2 += 4;
  }
  while ( v2 < 0x10 );
  v4 = 0;
  do
  {
    v5 = *(_DWORD *)(v4 + *(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v5 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 256))(0);
    v4 += 4;
  }
  while ( v4 < 0x24 );
  v6 = 0;
  do
  {
    v7 = *(_DWORD *)(v6 + *(_DWORD *)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v7 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 256))(0);
    v6 += 4;
  }
  while ( v6 < 0x14 );
  v8 = 0;
  do
  {
    v9 = *(_DWORD *)(v8 + *(_DWORD *)&v1->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v9 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v9 + 256))(0);
    v8 += 4;
  }
  while ( v8 < 0x18 );
}

//----- (004E7FB0) --------------------------------------------------------
void __thiscall CollectCardWin::ResetEffect(CollectCardWin *this)
{
  CollectCardWin *v1; // esi@1
  PgWinSpr *v2; // ecx@1

  v1 = this;
  CollectCardWin::Reset(this);
  v2 = v1->m_pkWhiteBlindSpr;
  v1->m_fPlayTime = 0.0;
  v1->m_fPlayStartTime = 0.0;
  *(_WORD *)&v1->m_bPlay = 0;
  v1->m_uiPlayCardID = 0;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v1,
    1u);
}

//----- (004E8000) --------------------------------------------------------
void __thiscall CollectCardWin::SetType(CollectCardWin *this, const char *pcMobInx)
{
  int v2; // eax@1
  unsigned int v3; // eax@4
  void *v4; // eax@5
  void *v5; // edi@5
  int v6; // eax@6
  char v7; // cl@7
  unsigned int v8; // eax@8
  signed int v9; // eax@13
  int v10; // ecx@14
  signed int v11; // eax@16
  int v12; // ecx@17
  CollectCardWin *v13; // [sp+0h] [bp-Ch]@1
  unsigned int i; // [sp+4h] [bp-8h]@4
  unsigned int v15; // [sp+8h] [bp-4h]@2

  v2 = *(_DWORD *)(ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 56);
  v13 = this;
  if ( v2 )
    v15 = *(_DWORD *)(v2 + 40);
  else
    v15 = 0;
  v3 = 0;
  i = 0;
  if ( v15 )
  {
    do
    {
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 4), v3);
      v5 = v4;
      if ( v4 )
      {
        v6 = (int)((char *)v4 + 2);
        do
          v7 = *(_BYTE *)v6++;
        while ( v7 );
        v8 = v6 - (_DWORD)((char *)v5 + 3);
        if ( v8 == strlen(pcMobInx) )
        {
          if ( !strncmp((const char *)v5 + 2, pcMobInx, v8) )
            break;
          v5 = 0;
        }
      }
      v3 = i + 1;
      i = v3;
    }
    while ( v3 < v15 );
    if ( v5 )
    {
      v9 = *(_DWORD *)((char *)v5 + 95);
      if ( v9 < 5 )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v13->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v9);
        if ( v10 )
          (*(void (__stdcall **)(signed int))(*(_DWORD *)v10 + 256))(1);
      }
      v11 = *(_DWORD *)((char *)v5 + 99);
      if ( v11 < 6 )
      {
        v12 = *(_DWORD *)(*(_DWORD *)&v13->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v11);
        if ( v12 )
          (*(void (__stdcall **)(signed int))(*(_DWORD *)v12 + 256))(1);
      }
    }
  }
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (004E80F0) --------------------------------------------------------
void __thiscall CollectCardWin::PlayCardEffect(CollectCardWin *this)
{
  CollectCardWin *v1; // esi@1
  int v2; // eax@1
  int v3; // ecx@1
  unsigned int v4; // ecx@2

  v1 = this;
  this->m_fPlayTime = 0.0;
  *(_WORD *)&this->m_bPlay = 1;
  this->m_fPlayStartTime = Timer::ms_fCurTime;
  this->m_fAlphaBlendValue = 0.0;
  v2 = rand();
  v3 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
  if ( v3 )
    v4 = *(_DWORD *)(v3 + 40);
  else
    v4 = 0;
  v1->m_uiPlayCardID = v2 % v4 + 1;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v1,
    0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004E8150) --------------------------------------------------------
void __thiscall CollectCardWin::_CollectCardWin(CollectCardWin *this)
{
  CollectCardWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectCardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectCardWin::_vftable_;
  if ( *(_DWORD *)&this->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkMobTypeSprs.baseclass_0._Mylast = 0;
  v1->m_pkMobTypeSprs.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast = 0;
  v1->m_pkMobGradeTypeSprs.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kStarSprs.baseclass_0._Mylast = 0;
  v1->m_kStarSprs.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBorderSprs.baseclass_0._Mylast = 0;
  v1->m_kBorderSprs.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 990DC4: using guessed type int (__stdcall *CollectCardWin___vftable_)(int uiFlags);
// 990DE4: using guessed type int (__thiscall *CollectCardWin___vftable_)(void *p, char);

//----- (004E8210) --------------------------------------------------------
void __thiscall CollectCardWin::CollectCardWin(CollectCardWin *this)
{
  CollectCardWin *v1; // esi@1
  int v2; // edi@1
  char *v3; // ecx@1
  int v4; // edx@1
  int v5; // eax@1
  char *v6; // edx@2
  int v7; // ecx@7
  unsigned int v8; // ecx@9
  int v9; // eax@14
  char *v10; // ecx@17
  int v11; // edx@17
  int v12; // ebx@17
  int v13; // eax@17
  char *v14; // edx@18
  int v15; // ecx@23
  unsigned int v16; // ecx@25
  int v17; // eax@30
  int v18; // edx@33
  int v19; // ebx@33
  char *v20; // ecx@33
  int v21; // edx@33
  int v22; // eax@33
  char *v23; // edx@34
  int v24; // eax@35
  int v25; // ecx@39
  unsigned int v26; // ecx@41
  int v27; // eax@46
  PgWinSpr **v28; // [sp+8h] [bp-14h]@2
  PgWinSpr **v29; // [sp+8h] [bp-14h]@18
  int v30; // [sp+8h] [bp-14h]@34
  int v31; // [sp+Ch] [bp-10h]@21
  int v32; // [sp+Ch] [bp-10h]@23
  int v33; // [sp+Ch] [bp-10h]@37
  int v34; // [sp+Ch] [bp-10h]@39

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v2 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectCardWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectCardWin::_vftable_;
  v1->m_pkSerialText = 0;
  v1->m_pkNameText = 0;
  v1->m_pkRankText = 0;
  v1->m_pkDescText = 0;
  v1->m_pkUnidentifiedSpr = 0;
  *(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBorderSprs.baseclass_0._Mylast = 0;
  v1->m_kBorderSprs.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kStarSprs.baseclass_0._Mylast = 0;
  v1->m_kStarSprs.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast = 0;
  v1->m_pkMobGradeTypeSprs.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkMobTypeSprs.baseclass_0._Mylast = 0;
  v1->m_pkMobTypeSprs.baseclass_0._Myend = 0;
  v1->m_fPlayTime = 0.0;
  v1->m_fPlayStartTime = 0.0;
  v1->m_fAlphaBlendValue = 0.0;
  v1->m_uiOldXPos = 0;
  v1->m_uiOldYPos = 0;
  v1->m_uiCardID = 0;
  v1->m_uiSerial = 0;
  v1->m_pkWhiteBlindSpr = 0;
  *(_WORD *)&v1->m_bPlay = 0;
  v1->m_uiPlayCardID = 0;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kBorderSprs,
    4u);
  **(_DWORD **)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
  v3 = (char *)v1->m_kStarSprs.baseclass_0._Mylast;
  v4 = *(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (signed int)((char *)v1->m_kStarSprs.baseclass_0._Mylast - v4) >> 2;
  if ( (unsigned int)v5 <= 9 )
  {
    if ( (unsigned int)v5 < 9 )
    {
      if ( 1073741823 - (9 - v5) < (unsigned int)v5 )
        std::_Xlength_error("vector<T> too long");
      v7 = (signed int)((char *)v1->m_kStarSprs.baseclass_0._Myend - v4) >> 2;
      if ( (unsigned int)v7 < 9 )
      {
        if ( 1073741823 - ((unsigned int)v7 >> 1) >= v7 )
          v8 = ((unsigned int)v7 >> 1) + v7;
        else
          v8 = 0;
        if ( v8 < 9 )
          v8 = 9;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_kStarSprs,
          v8);
      }
      v9 = (signed int)((char *)v1->m_kStarSprs.baseclass_0._Mylast
                      - *(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 9 != v9 )
      {
        memset(v1->m_kStarSprs.baseclass_0._Mylast, 0, 4 * (9 - v9));
        v2 = 0;
      }
      v1->m_kStarSprs.baseclass_0._Mylast += 9
                                           - ((signed int)((char *)v1->m_kStarSprs.baseclass_0._Mylast
                                                         - *(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    }
  }
  else
  {
    v6 = (char *)(v4 + 36);
    v28 = (PgWinSpr **)v6;
    if ( v6 != v3 )
    {
      memmove(v6, v3, 0);
      v1->m_kStarSprs.baseclass_0._Mylast = v28;
    }
  }
  **(_DWORD **)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 20) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 24) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 28) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 32) = v2;
  v10 = (char *)v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast;
  v11 = *(_DWORD *)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = (int)&v1->m_pkMobGradeTypeSprs;
  v13 = (signed int)((char *)v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast - v11) >> 2;
  if ( (unsigned int)v13 <= 5 )
  {
    if ( (unsigned int)v13 < 5 )
    {
      v31 = (signed int)((char *)v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast - v11) >> 2;
      if ( 1073741823 - (5 - v13) < (unsigned int)v31 )
        std::_Xlength_error("vector<T> too long");
      v15 = (signed int)((char *)v1->m_pkMobGradeTypeSprs.baseclass_0._Myend - v11) >> 2;
      v32 = 5 - v13 + v31;
      if ( v32 > (unsigned int)v15 )
      {
        if ( 1073741823 - ((unsigned int)v15 >> 1) >= v15 )
          v16 = ((unsigned int)v15 >> 1) + v15;
        else
          v16 = 0;
        if ( v16 < v32 )
          v16 = v32;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_pkMobGradeTypeSprs,
          v16);
      }
      v17 = (signed int)((char *)v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast
                       - *(_DWORD *)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 5 != v17 )
      {
        memset(v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast, 0, 4 * (5 - v17));
        v2 = 0;
      }
      v12 = (int)&v1->m_pkMobGradeTypeSprs;
      v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast += 5
                                                    - ((signed int)((char *)v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast
                                                                  - *(_DWORD *)&v1->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    }
  }
  else
  {
    v14 = (char *)(v11 + 20);
    v29 = (PgWinSpr **)v14;
    if ( v14 != v10 )
    {
      memmove(v14, v10, 0);
      v1->m_pkMobGradeTypeSprs.baseclass_0._Mylast = v29;
    }
  }
  **(_DWORD **)v12 = v2;
  *(_DWORD *)(*(_DWORD *)v12 + 4) = v2;
  *(_DWORD *)(*(_DWORD *)v12 + 8) = v2;
  *(_DWORD *)(*(_DWORD *)v12 + 12) = v2;
  v18 = *(_DWORD *)v12;
  v19 = (int)&v1->m_pkMobTypeSprs;
  *(_DWORD *)(v18 + 16) = v2;
  v20 = (char *)v1->m_pkMobTypeSprs.baseclass_0._Mylast;
  v21 = *(_DWORD *)&v1->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0];
  v22 = (signed int)((char *)v1->m_pkMobTypeSprs.baseclass_0._Mylast - v21) >> 2;
  if ( (unsigned int)v22 <= 6 )
  {
    if ( (unsigned int)v22 < 6 )
    {
      v33 = (signed int)((char *)v1->m_pkMobTypeSprs.baseclass_0._Mylast - v21) >> 2;
      if ( 1073741823 - (6 - v22) < (unsigned int)v33 )
        std::_Xlength_error("vector<T> too long");
      v25 = (signed int)((char *)v1->m_pkMobTypeSprs.baseclass_0._Myend - v21) >> 2;
      v34 = 6 - v22 + v33;
      if ( v34 > (unsigned int)v25 )
      {
        if ( 1073741823 - ((unsigned int)v25 >> 1) >= v25 )
          v26 = ((unsigned int)v25 >> 1) + v25;
        else
          v26 = 0;
        if ( v26 < v34 )
          v26 = v34;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_pkMobTypeSprs,
          v26);
      }
      v27 = (signed int)((char *)v1->m_pkMobTypeSprs.baseclass_0._Mylast
                       - *(_DWORD *)&v1->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 6 != v27 )
      {
        memset(v1->m_pkMobTypeSprs.baseclass_0._Mylast, 0, 4 * (6 - v27));
        v2 = 0;
      }
      v19 = (int)&v1->m_pkMobTypeSprs;
      v24 = (int)&v1->m_pkMobTypeSprs.baseclass_0._Mylast[6
                                                        - ((signed int)((char *)v1->m_pkMobTypeSprs.baseclass_0._Mylast
                                                                      - *(_DWORD *)&v1->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)];
      goto LABEL_49;
    }
  }
  else
  {
    v23 = (char *)(v21 + 24);
    v30 = (int)v23;
    if ( v23 != v20 )
    {
      memmove(v23, v20, 0);
      v24 = v30;
LABEL_49:
      *(_DWORD *)(v19 + 4) = v24;
      goto LABEL_50;
    }
  }
LABEL_50:
  **(_DWORD **)v19 = v2;
  *(_DWORD *)(*(_DWORD *)v19 + 4) = v2;
  *(_DWORD *)(*(_DWORD *)v19 + 8) = v2;
  *(_DWORD *)(*(_DWORD *)v19 + 12) = v2;
  *(_DWORD *)(*(_DWORD *)v19 + 16) = v2;
  *(_DWORD *)(*(_DWORD *)v19 + 20) = v2;
}
// 990DC4: using guessed type int (__stdcall *CollectCardWin___vftable_)(int uiFlags);
// 990DE4: using guessed type int (__thiscall *CollectCardWin___vftable_)(void *p, char);

//----- (004E8690) --------------------------------------------------------
CollectCardWin *__cdecl CollectCardWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CollectCardWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1DCu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CollectCardWin::CollectCardWin((CollectCardWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CollectCardWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004E87C0) --------------------------------------------------------
bool __thiscall CollectCardWin::Create(CollectCardWin *this, PgFrameWork *pkFrameWork)
{
  CollectCardWin *v2; // esi@1
  char *v3; // edi@3
  NiImageConverter *v4; // eax@3
  NiPixelData *v5; // eax@3
  NiSourceTexture *v6; // eax@4
  NiNode *v7; // esi@7
  bool result; // al@11
  int v9; // eax@12
  NiSourceTexture *v10; // ecx@12
  int v11; // eax@12
  NiTexturePalette *v12; // edi@12
  char *v13; // eax@14
  PgSprData *v14; // eax@16
  PgSprData *v15; // eax@18
  PgWinSpr *v16; // eax@18
  unsigned int v17; // edi@18
  char *v18; // eax@19
  PgSprData *v19; // eax@19
  char *v20; // eax@19
  PgSprData *v21; // eax@19
  PgWin *v22; // ST50_4@19
  PgSprData *v23; // ST4C_4@19
  int (*v24)(void); // edx@19
  int v25; // ST48_4@19
  int v26; // eax@19
  PgWinSpr *v27; // eax@19
  int v28; // edi@20
  char *v29; // eax@21
  PgSprData *v30; // eax@21
  NiAVObject *v31; // ecx@21
  int v32; // edi@21
  PgFont *v33; // eax@23
  PgWinText *v34; // eax@23
  char *v35; // eax@24
  char *v36; // ecx@24
  char v37; // dl@25
  char *v38; // eax@26
  char *v39; // ecx@26
  char v40; // dl@27
  char *v41; // eax@28
  char *v42; // ecx@28
  char v43; // dl@29
  char *v44; // eax@30
  char *v45; // ecx@30
  char v46; // dl@31
  char *v47; // eax@32
  const char *v48; // eax@34
  PgSprData *v49; // eax@36
  int v50; // edi@36
  PgWinSpr *v51; // eax@36
  int v52; // ecx@36
  char *v53; // eax@37
  int v54; // edi@39
  bool v55; // zf@39
  char *v56; // eax@40
  char *v57; // ecx@40
  char v58; // dl@41
  char *v59; // eax@42
  char *v60; // ecx@42
  char v61; // dl@43
  char *v62; // eax@44
  char *v63; // ecx@44
  char v64; // dl@45
  char *v65; // eax@46
  char *v66; // ecx@46
  char v67; // dl@47
  char *v68; // eax@48
  char *v69; // ecx@48
  char v70; // dl@49
  char *v71; // eax@50
  const char *v72; // eax@52
  PgSprData *v73; // eax@54
  int v74; // edi@54
  PgWinSpr *v75; // eax@54
  int v76; // ecx@54
  char *v77; // eax@55
  int v78; // edi@57
  PgSprData *v79; // eax@58
  PgWinSpr *v80; // eax@58
  int v81; // eax@58
  unsigned int v82; // ST4C_4@58
  NiSourceTexture *v83; // eax@58
  PgWinSpr *v84; // eax@58
  PgFont *v85; // eax@59
  PgWinText *v86; // eax@59
  PgFont *v87; // eax@61
  PgWinText *v88; // eax@61
  NiNode *v89; // esi@63
  unsigned int v90; // [sp+58h] [bp-324h]@1
  unsigned int v91; // [sp+5Ch] [bp-320h]@0
  NiTexture::FormatPrefs kPrefs; // [sp+68h] [bp-314h]@5
  unsigned int uiHeight; // [sp+74h] [bp-308h]@1
  unsigned int uiWidth; // [sp+78h] [bp-304h]@1
  int v95; // [sp+7Ch] [bp-300h]@21
  NiPointer<NiNode> spNode; // [sp+80h] [bp-2FCh]@1
  int v97; // [sp+84h] [bp-2F8h]@18
  int iLeft; // [sp+88h] [bp-2F4h]@1
  int iTop; // [sp+8Ch] [bp-2F0h]@1
  NiAVObject *pkObject; // [sp+90h] [bp-2ECh]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kRankNodeName[4]; // [sp+94h] [bp-2E8h]@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kMTNodeName[6]; // [sp+104h] [bp-278h]@40
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kMTToolTip[6]; // [sp+1ACh] [bp-1D0h]@40
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kMGTNodeName[5]; // [sp+254h] [bp-128h]@24
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kMGTToolTip[5]; // [sp+2E0h] [bp-9Ch]@24
  unsigned int v106; // [sp+36Ch] [bp-10h]@1
  int v107; // [sp+378h] [bp-4h]@1
  int v108; // [sp+37Ch] [bp+0h]@1

  v106 = (unsigned int)&v108 ^ __security_cookie;
  v90 = (unsigned int)&v108 ^ __security_cookie;
  v2 = this;
  pkObject = (NiAVObject *)pkFrameWork;
  spNode.m_pObject = 0;
  v107 = 0;
  uiWidth = 0;
  uiHeight = 0;
  iLeft = 0;
  iTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Collect\\Max\\AncientStonie01.png");
  v4 = NiImageConverter::GetImageConverter();
  v5 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, char *, _DWORD, unsigned int))v4->baseclass_0.vfptr[2].__vecDelDtor)(
                        v4,
                        v3,
                        0,
                        v90);
  if ( v5 )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 2;
    kPrefs.m_eMipMapped = 0;
    v6 = NiSourceTexture::Create(v5, &kPrefs);
  }
  else
  {
    v6 = 0;
  }
  v2->m_pkBaseTexture = v6;
  if ( !v6 )
    goto LABEL_69;
  v9 = ((int (__thiscall *)(NiSourceTexture *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v6);
  v10 = v2->m_pkBaseTexture;
  uiWidth = v9;
  v11 = ((int (*)(void))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)();
  v12 = dword_B70448;
  uiHeight = v11;
  if ( !Folder::m_bInit )
    Folder::Init();
  v13 = Folder::Merge(&Folder::m_acMenu, "Game\\Collect_BCard.nif");
  PgUtil::LoadNodeNifFile(v13, &spNode, v12);
  if ( !spNode.m_pObject )
    return 0;
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
LABEL_69:
    v7 = spNode.m_pObject;
    v107 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v14 = PgSprData::Create(v2->m_pkBaseTexture, 1, iLeft, iTop, uiWidth, uiHeight);
  if ( PgWinFrame::Create(&v2->baseclass_0, iLeft, iTop, v14, 0, (PgFrameWork *)pkObject, "CollectCardWin", 0) )
  {
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
    v16 = PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v16,
      0);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      kRankNodeName,
      "S");
    LOBYTE(v107) = 1;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &kRankNodeName[1],
      "A");
    LOBYTE(v107) = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &kRankNodeName[2],
      "B");
    LOBYTE(v107) = 3;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &kRankNodeName[3],
      "C");
    LOBYTE(v107) = 4;
    v17 = 0;
    v97 = (int)kRankNodeName;
    do
    {
      pkObject = (NiAVObject *)spNode.m_pObject;
      v18 = fs("%sCardBack");
      v19 = PgSprData::Create(pkObject, v18, &iLeft, &iTop, 0);
      pkObject = (NiAVObject *)(v17 + *(_DWORD *)&v2->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
      pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)PgWinSpr::CreateWin(
                                                                                 iLeft,
                                                                                 iTop,
                                                                                 v19,
                                                                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                                                                 0,
                                                                                 0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v17
                                                  + *(_DWORD *)&v2->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0])
                                    + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v17
                                                  + *(_DWORD *)&v2->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0])
                                    + 240))(0);
      pkObject = (NiAVObject *)spNode.m_pObject;
      v20 = fs("%sCard");
      v21 = PgSprData::Create(pkObject, v20, &iLeft, &iTop, 0);
      v22 = *(PgWin **)(*(_DWORD *)&v2->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + v17);
      v23 = v21;
      v24 = (int (*)(void))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
      pkObject = *(NiAVObject **)(*(_DWORD *)&v2->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + v17);
      v25 = iTop - v24();
      v26 = ((int (*)(void))pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
      v27 = PgWinSpr::CreateWin(iLeft - v26, v25, v23, v22, 0, 0);
      v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v27,
        0);
      v97 += 28;
      v17 += 4;
    }
    while ( v17 < 0x10 );
    v28 = 0;
    do
    {
      pkObject = (NiAVObject *)spNode.m_pObject;
      v95 = v28 + 1;
      v29 = fs("Star%02d");
      v30 = PgSprData::Create(pkObject, v29, &iLeft, &iTop, 0);
      v31 = (NiAVObject *)(4 * v28);
      v32 = *(_DWORD *)&v2->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0];
      pkObject = v31;
      *(NiRefObjectVtbl **)((char *)&v31->baseclass_0.baseclass_0.baseclass_0.vfptr + v32) = (NiRefObjectVtbl *)PgWinSpr::CreateWin(iLeft, iTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)((char *)&pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr
                                                  + *(_DWORD *)&v2->m_kStarSprs.baseclass_0.___u0.baseclass_0.dummy[0])
                                    + 240))(0);
      v28 = v95;
    }
    while ( (unsigned int)v95 < 9 );
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "SerialNumber", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v33 = Font::Get(0);
      v34 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v2->m_pkSerialText = v34;
      v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v34,
        4u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkSerialText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_990CA3);
      ((void (__stdcall *)(_DWORD))v2->m_pkSerialText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    }
    kMGTNodeName[0].baseclass_0._Myres = 15;
    kMGTNodeName[0].baseclass_0._Mysize = 0;
    kMGTNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kMGTNodeName, "AT_Normal", 9u);
    LOBYTE(v107) = 5;
    kMGTNodeName[1].baseclass_0._Myres = 15;
    kMGTNodeName[1].baseclass_0._Mysize = 0;
    kMGTNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMGTNodeName[1], "AT_Chief", 8u);
    LOBYTE(v107) = 6;
    kMGTNodeName[2].baseclass_0._Myres = 15;
    kMGTNodeName[2].baseclass_0._Mysize = 0;
    kMGTNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMGTNodeName[2], "AT_Boss", 7u);
    LOBYTE(v107) = 7;
    kMGTNodeName[3].baseclass_0._Myres = 15;
    kMGTNodeName[3].baseclass_0._Mysize = 0;
    kMGTNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMGTNodeName[3], "AT_Hero", 7u);
    LOBYTE(v107) = 8;
    kMGTNodeName[4].baseclass_0._Myres = 15;
    kMGTNodeName[4].baseclass_0._Mysize = 0;
    kMGTNodeName[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMGTNodeName[4], "AT_Elite", 8u);
    LOBYTE(v107) = 9;
    v35 = TextData::Get(0x23B3846u);
    v36 = v35;
    kMGTToolTip[0].baseclass_0._Myres = 15;
    kMGTToolTip[0].baseclass_0._Mysize = 0;
    kMGTToolTip[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v35 + 1);
    do
      v37 = *v36++;
    while ( v37 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      kMGTToolTip,
      v35,
      v36 - (char *)pkObject);
    LOBYTE(v107) = 10;
    v38 = TextData::Get(0xFB2A3C41u);
    v39 = v38;
    kMGTToolTip[1].baseclass_0._Myres = 15;
    kMGTToolTip[1].baseclass_0._Mysize = 0;
    kMGTToolTip[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v38 + 1);
    do
      v40 = *v39++;
    while ( v40 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMGTToolTip[1],
      v38,
      v39 - (char *)pkObject);
    LOBYTE(v107) = 11;
    v41 = TextData::Get(0xF0003D4Du);
    v42 = v41;
    kMGTToolTip[2].baseclass_0._Myres = 15;
    kMGTToolTip[2].baseclass_0._Mysize = 0;
    kMGTToolTip[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v41 + 1);
    do
      v43 = *v42++;
    while ( v43 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMGTToolTip[2],
      v41,
      v42 - (char *)pkObject);
    LOBYTE(v107) = 12;
    v44 = TextData::Get(0xE606394Cu);
    v45 = v44;
    kMGTToolTip[3].baseclass_0._Myres = 15;
    kMGTToolTip[3].baseclass_0._Mysize = 0;
    kMGTToolTip[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v44 + 1);
    do
      v46 = *v45++;
    while ( v46 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMGTToolTip[3],
      v44,
      v45 - (char *)pkObject);
    LOBYTE(v107) = 13;
    v47 = TextData::Get(0xFF2B4B41u);
    kMGTToolTip[4].baseclass_0._Myres = 15;
    kMGTToolTip[4].baseclass_0._Mysize = 0;
    kMGTToolTip[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMGTToolTip[4], v47, strlen(v47));
    LOBYTE(v107) = 14;
    v95 = 0;
    v97 = 0;
    pkObject = (NiAVObject *)5;
    do
    {
      if ( *(unsigned int *)((char *)&kMGTNodeName[0].baseclass_0._Myres + v97) < 0x10 )
        v48 = (char *)kMGTNodeName + v97;
      else
        v48 = *(const char **)&kMGTNodeName[0].baseclass_0.___u0.baseclass_0.dummy[v97];
      v49 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v48, &iLeft, &iTop, 0);
      v50 = v95 + *(_DWORD *)&v2->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0];
      v51 = PgWinSpr::CreateWin(iLeft, iTop, v49, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v52 = v95;
      *(_DWORD *)v50 = v51;
      *(_DWORD *)(*(_DWORD *)(v52 + *(_DWORD *)&v2->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]) + 272) = g_pkToolTipWin;
      if ( *(unsigned int *)((char *)&kMGTToolTip[0].baseclass_0._Myres + v97) < 0x10 )
        v53 = (char *)kMGTToolTip + v97;
      else
        v53 = *(char **)&kMGTToolTip[0].baseclass_0.___u0.baseclass_0.dummy[v97];
      v54 = v95;
      PgWin::SetToolTipWinText(
        *(PgWin **)(*(_DWORD *)&v2->m_pkMobGradeTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] + v95),
        v53);
      v97 += 28;
      v55 = pkObject == (NiAVObject *)1;
      pkObject = (NiAVObject *)((char *)pkObject - 1);
      v95 = v54 + 4;
    }
    while ( !v55 );
    kMTNodeName[0].baseclass_0._Myres = 15;
    kMTNodeName[0].baseclass_0._Mysize = 0;
    kMTNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kMTNodeName, "MT_Human", 8u);
    LOBYTE(v107) = 15;
    kMTNodeName[1].baseclass_0._Myres = 15;
    kMTNodeName[1].baseclass_0._Mysize = 0;
    kMTNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMTNodeName[1], "MT_Magiclife", 0xCu);
    LOBYTE(v107) = 16;
    kMTNodeName[2].baseclass_0._Myres = 15;
    kMTNodeName[2].baseclass_0._Mysize = 0;
    kMTNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMTNodeName[2], "MT_Spirit", 9u);
    LOBYTE(v107) = 17;
    kMTNodeName[3].baseclass_0._Myres = 15;
    kMTNodeName[3].baseclass_0._Mysize = 0;
    kMTNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMTNodeName[3], "MT_Beast", 8u);
    LOBYTE(v107) = 18;
    kMTNodeName[4].baseclass_0._Myres = 15;
    kMTNodeName[4].baseclass_0._Mysize = 0;
    kMTNodeName[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMTNodeName[4], "MT_Elemental", 0xCu);
    LOBYTE(v107) = 19;
    kMTNodeName[5].baseclass_0._Myres = 15;
    kMTNodeName[5].baseclass_0._Mysize = 0;
    kMTNodeName[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMTNodeName[5], "MT_Undead", 9u);
    LOBYTE(v107) = 20;
    v56 = TextData::Get(0xA9F5E9F8u);
    v57 = v56;
    kMTToolTip[0].baseclass_0._Myres = 15;
    kMTToolTip[0].baseclass_0._Mysize = 0;
    kMTToolTip[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v56 + 1);
    do
      v58 = *v57++;
    while ( v58 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kMTToolTip, v56, v57 - (char *)pkObject);
    LOBYTE(v107) = 21;
    v59 = TextData::Get(0xE134373Bu);
    v60 = v59;
    kMTToolTip[1].baseclass_0._Myres = 15;
    kMTToolTip[1].baseclass_0._Mysize = 0;
    kMTToolTip[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v59 + 1);
    do
      v61 = *v60++;
    while ( v61 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMTToolTip[1],
      v59,
      v60 - (char *)pkObject);
    LOBYTE(v107) = 22;
    v62 = TextData::Get(0xF8FBFAF4u);
    v63 = v62;
    kMTToolTip[2].baseclass_0._Myres = 15;
    kMTToolTip[2].baseclass_0._Mysize = 0;
    kMTToolTip[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v62 + 1);
    do
      v64 = *v63++;
    while ( v64 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMTToolTip[2],
      v62,
      v63 - (char *)pkObject);
    LOBYTE(v107) = 23;
    v65 = TextData::Get(0x99F5FBECu);
    v66 = v65;
    kMTToolTip[3].baseclass_0._Myres = 15;
    kMTToolTip[3].baseclass_0._Mysize = 0;
    kMTToolTip[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v65 + 1);
    do
      v67 = *v66++;
    while ( v67 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMTToolTip[3],
      v65,
      v66 - (char *)pkObject);
    LOBYTE(v107) = 24;
    v68 = TextData::Get(0xEE353644u);
    v69 = v68;
    kMTToolTip[4].baseclass_0._Myres = 15;
    kMTToolTip[4].baseclass_0._Mysize = 0;
    kMTToolTip[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    pkObject = (NiAVObject *)(v68 + 1);
    do
      v70 = *v69++;
    while ( v70 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMTToolTip[4],
      v68,
      v69 - (char *)pkObject);
    LOBYTE(v107) = 25;
    v71 = TextData::Get(0xE6F5EDEFu);
    kMTToolTip[5].baseclass_0._Myres = 15;
    kMTToolTip[5].baseclass_0._Mysize = 0;
    kMTToolTip[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kMTToolTip[5], v71, strlen(v71));
    LOBYTE(v107) = 26;
    v95 = 0;
    v97 = 0;
    pkObject = (NiAVObject *)6;
    do
    {
      if ( *(unsigned int *)((char *)&kMTNodeName[0].baseclass_0._Myres + v97) < 0x10 )
        v72 = (char *)kMTNodeName + v97;
      else
        v72 = *(const char **)&kMTNodeName[0].baseclass_0.___u0.baseclass_0.dummy[v97];
      v73 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v72, &iLeft, &iTop, 0);
      v74 = v95 + *(_DWORD *)&v2->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0];
      v75 = PgWinSpr::CreateWin(iLeft, iTop, v73, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v76 = v95;
      *(_DWORD *)v74 = v75;
      *(_DWORD *)(*(_DWORD *)(v76 + *(_DWORD *)&v2->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0]) + 272) = g_pkToolTipWin;
      if ( *(unsigned int *)((char *)&kMTToolTip[0].baseclass_0._Myres + v97) < 0x10 )
        v77 = (char *)kMTToolTip + v97;
      else
        v77 = *(char **)&kMTToolTip[0].baseclass_0.___u0.baseclass_0.dummy[v97];
      v78 = v95;
      PgWin::SetToolTipWinText(
        *(PgWin **)(*(_DWORD *)&v2->m_pkMobTypeSprs.baseclass_0.___u0.baseclass_0.dummy[0] + v95),
        v77);
      v97 += 28;
      v55 = pkObject == (NiAVObject *)1;
      pkObject = (NiAVObject *)((char *)pkObject - 1);
      v95 = v78 + 4;
    }
    while ( !v55 );
    v79 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Unidentified", &iLeft, &iTop, 0);
    v80 = PgWinSpr::CreateWin(iLeft, iTop, v79, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkUnidentifiedSpr = v80;
    v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v80,
      0);
    v81 = ((int (__thiscall *)(CollectCardWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2);
    v82 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                 (NiRefObject *)v2,
                 v81);
    v83 = PgUtil::Create1PixelSourceTexture(-1, -1, -1, -1);
    v84 = PgWinSpr::CreateWin(v83, 0, 0, v82, (unsigned int)v2, 0, 0, v91);
    v2->m_pkWhiteBlindSpr = v84;
    ((void (__thiscall *)(PgWinSpr *))v84->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v84);
    ((void (__stdcall *)(signed int))v2->m_pkWhiteBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkWhiteBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Title", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v85 = Font::Get(0);
      v86 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v85, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v2->m_pkNameText = v86;
      v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v86,
        5u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_990CAA);
      ((void (__stdcall *)(_DWORD))v2->m_pkNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    }
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v87 = Font::Get(0);
      v88 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v87, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v2->m_pkDescText = v88;
      v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v88,
        5u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkDescText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_990CAB);
      ((void (__stdcall *)(_DWORD))v2->m_pkDescText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    }
    ((void (__thiscall *)(CollectCardWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v107) = 20;
    _eh_vector_destructor_iterator_(
      kMTToolTip,
      0x1Cu,
      6,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 14;
    _eh_vector_destructor_iterator_(
      kMTNodeName,
      0x1Cu,
      6,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 9;
    _eh_vector_destructor_iterator_(
      kMGTToolTip,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 4;
    _eh_vector_destructor_iterator_(
      kMGTNodeName,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 0;
    _eh_vector_destructor_iterator_(
      kRankNodeName,
      0x1Cu,
      4,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v107 = -1;
    if ( spNode.m_pObject )
    {
      v89 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v89 )
          v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v89, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v107 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004E9690) --------------------------------------------------------
void __thiscall CollectCardWin::SetSerial(CollectCardWin *this, unsigned int uiSerial, unsigned int uiSeason, unsigned int uiGrade)
{
  char *v4; // esi@4
  char *v5; // esi@4
  char *v6; // esi@4
  char *v7; // esi@4
  NiRefObjectVtbl *v8; // edi@4
  char *v9; // eax@4
  CollectCardWin *v10; // [sp+8h] [bp-84h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kGrade[4]; // [sp+Ch] [bp-80h]@4
  unsigned int v12; // [sp+7Ch] [bp-10h]@1
  int v13; // [sp+88h] [bp-4h]@4
  int v14; // [sp+8Ch] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v10 = this;
  if ( !this->m_bPlay && uiGrade < 4 )
  {
    if ( this->m_pkSerialText )
    {
      ((void (__stdcall *)(signed int, unsigned int))this->m_pkSerialText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        1,
        (unsigned int)&v14 ^ __security_cookie);
      kGrade[0].baseclass_0._Myres = 15;
      kGrade[0].baseclass_0._Mysize = 0;
      kGrade[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v4 = TextData2::Get(0xFF43606Cu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kGrade, v4, strlen(v4));
      v13 = 0;
      v5 = TextData2::Get(0xFF434E6Cu);
      kGrade[1].baseclass_0._Myres = 15;
      kGrade[1].baseclass_0._Mysize = 0;
      kGrade[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGrade[1], v5, strlen(v5));
      LOBYTE(v13) = 1;
      v6 = TextData2::Get(0xFF434F6Cu);
      kGrade[2].baseclass_0._Myres = 15;
      kGrade[2].baseclass_0._Mysize = 0;
      kGrade[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGrade[2], v6, strlen(v6));
      LOBYTE(v13) = 2;
      v7 = TextData2::Get(0xFF43506Cu);
      kGrade[3].baseclass_0._Myres = 15;
      kGrade[3].baseclass_0._Mysize = 0;
      kGrade[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGrade[3], v7, strlen(v7));
      v13 = 3;
      v8 = v10->m_pkSerialText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v9 = TextData2::Get(0x73A0CCBBu);
      fs(v9);
      ((void (__thiscall *)(PgWinText *))v8[118].__vecDelDtor)(v10->m_pkSerialText);
      v13 = -1;
      _eh_vector_destructor_iterator_(
        kGrade,
        0x1Cu,
        4,
        (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004E98D0) --------------------------------------------------------
void __thiscall CollectCardWin::SetDesc(CollectCardWin *this, char *pcDesc)
{
  char *v2; // edi@1
  CollectCardWin *v3; // esi@1
  char *v4; // eax@2
  PgWinText *v5; // ecx@2
  char *v6; // eax@2
  char v7; // cl@3
  char *v8; // ebx@5
  char *v9; // eax@5
  char v10; // cl@6
  const char *v11; // edx@7
  char *v12; // eax@9
  char v13; // cl@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // eax@13
  unsigned int v15; // [sp-10h] [bp-50h]@1
  int iPixelSize; // [sp+0h] [bp-40h]@2
  CSpFont *pkFont; // [sp+4h] [bp-3Ch]@2
  CollectCardWin *v18; // [sp+8h] [bp-38h]@1
  char *pcText; // [sp+Ch] [bp-34h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kDescText; // [sp+14h] [bp-2Ch]@2
  unsigned int v21; // [sp+30h] [bp-10h]@1
  int v22; // [sp+3Ch] [bp-4h]@2
  int v23; // [sp+40h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v15 = (unsigned int)&v23 ^ __security_cookie;
  v2 = pcDesc;
  v3 = this;
  v18 = this;
  if ( this->m_pkDescText )
  {
    kDescText.baseclass_0._Myres = 15;
    kDescText.baseclass_0._Mysize = 0;
    kDescText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v22 = 0;
    fs(0);
    v4 = fs(0);
    v5 = v3->m_pkDescText;
    pcText = v4;
    pkFont = (CSpFont *)v5->m_spTextGeom.m_pObject->m_spPgFont.m_pObject;
    iPixelSize = ((int (__stdcall *)(unsigned int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v15);
    v6 = pcDesc;
    do
      v7 = *v6++;
    while ( v7 );
    if ( v6 != pcDesc + 1 )
    {
      do
      {
        v8 = CSpFont::SplitStrByPixelSize(pkFont, v2, iPixelSize, 0);
        strncpy(pcText, v2, v8 - v2);
        pcText[v8 - v2] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&kDescText, pcText, strlen(pcText));
        v9 = v8;
        do
          v10 = *v9++;
        while ( v10 );
        v11 = "\n";
        if ( v9 == v8 + 1 )
          v11 = (const char *)&unk_990CBB;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&kDescText, v11, strlen(v11));
        v12 = v8;
        v2 = v8;
        do
          v13 = *v12++;
        while ( v13 );
      }
      while ( v12 != v8 + 1 );
      v3 = v18;
    }
    v14 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&kDescText;
    if ( kDescText.baseclass_0._Myres < 0x10 )
      v14 = &kDescText;
    ((void (__cdecl *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))v3->m_pkDescText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v14);
    if ( kDescText.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kDescText);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004E9A60) --------------------------------------------------------
void __thiscall CollectCardWin::SetInfo(CollectCardWin *this, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, bool bUnidentified)
{
  CollectCardWin *v5; // esi@1
  int v6; // eax@8
  unsigned int v7; // edi@8
  void *v8; // ebx@12
  CollectCardView *v9; // edi@16
  PgWinText *v10; // ecx@17
  PgWinSpr *v11; // ecx@19
  char *v12; // eax@23
  char *v13; // eax@23
  char *v14; // eax@26
  char *v15; // eax@26
  NiSourceTexture *v16; // eax@26
  int v17; // ecx@28
  unsigned int v18; // [sp+4h] [bp-4h]@9

  v5 = this;
  if ( this->m_bPlay
    || this->m_bOpenCard
    || !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || v5->m_uiCardID != uiCardID
    || v5->m_uiSerial != uiSerial )
  {
    CollectCardWin::Reset(v5);
    if ( !v5->m_bPlay )
    {
      v5->m_uiCardID = uiCardID;
      v5->m_uiSerial = uiSerial;
      v5->m_uiStar = uiStar;
    }
    v6 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
    v7 = 0;
    v18 = v6 ? *(_DWORD *)(v6 + 40) : 0;
    if ( v18 > 0 )
    {
      while ( 1 )
      {
        v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v7);
        if ( v8 )
        {
          if ( *(_WORD *)v8 == (_WORD)uiCardID )
            break;
        }
        ++v7;
        if ( v7 >= v18 )
          return;
      }
      v9 = CollectCardViewTab::GetByCardID(uiCardID);
      if ( v9 )
      {
        v10 = v5->m_pkNameText;
        if ( v10 )
          ((void (__stdcall *)(char *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v9->CC_CardName);
        v11 = v5->m_pkUnidentifiedSpr;
        if ( v11 )
          ((void (__stdcall *)(_DWORD))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUnidentified);
        if ( bUnidentified )
        {
          if ( CollectCardGroupDescTab::GetByCardMobGroup(*(CardMobGroupIndex *)((char *)v8 + 38)) )
          {
            v12 = TextData2::Get(0xFEAD796Cu);
            v13 = fs(v12);
            CollectCardWin::SetDesc(v5, v13);
          }
        }
        else
        {
          if ( !Folder::m_bInit )
            Folder::Init();
          v14 = Folder::Merge(&Folder::m_acMenu, "Collect\\Max\\%s.png");
          v15 = fs(v14);
          v16 = CollectCardWin::LoadImageFile(v5, v15);
          if ( v16 )
            v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor(
              (NiRefObject *)v5,
              (unsigned int)v16);
          v17 = *(_DWORD *)(*(_DWORD *)&v5->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]
                          + 4 * *(_DWORD *)((char *)v8 + 34));
          if ( v17 )
            (*(void (__stdcall **)(signed int))(*(_DWORD *)v17 + 256))(1);
          CollectCardWin::SetType(v5, v9->CC_MobInx);
          CollectCardWin::SetSerial(v5, uiSerial, v9->CC_CardSeason, *(_DWORD *)((char *)v8 + 34));
          CollectCardWin::SetStar(v5, uiStar);
          CollectCardWin::SetDesc(v5, v9->CC_CardDesc);
        }
      }
    }
  }
}
// A9541C: using guessed type char Folder__m_bInit;
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004E9C50) --------------------------------------------------------
void __thiscall CollectCardWin::UpdatePlay(CollectCardWin *this, float fCurTime)
{
  CollectCardWin *v2; // esi@1
  float v3; // ST14_4@2
  float v4; // ST14_4@3
  PgFrameWork *v5; // eax@6
  double v6; // st7@8
  unsigned int v7; // ecx@9
  int v8; // eax@9
  int v9; // ecx@9
  unsigned int v10; // ecx@10
  int v11; // edx@12
  unsigned int v12; // eax@12
  int v13; // edx@12
  float fCurTimea; // [sp+14h] [bp+8h]@8

  v2 = this;
  if ( this->m_bPlay )
  {
    v3 = Timer::ms_fDeltaTime + this->m_fPlayTime;
    this->m_fPlayTime = v3;
    if ( v3 <= 4.0 )
      goto LABEL_17;
    v4 = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime + this->m_fAlphaBlendValue;
    this->m_fAlphaBlendValue = v4;
    if ( v4 > 1.0 )
      this->m_fAlphaBlendValue = 1.0;
    ((void (__stdcall *)(_DWORD))this->m_pkWhiteBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(this->m_fAlphaBlendValue);
    if ( 1.0 != v2->m_fAlphaBlendValue )
    {
LABEL_17:
      v6 = fCurTime;
      fCurTimea = fCurTime - v2->m_fPlayStartTime;
      if ( fCurTimea > 0.035 )
      {
        v7 = v2->m_uiPlayCardID;
        v2->m_fPlayStartTime = v6;
        CollectCardWin::SetInfo(v2, v7, 0, 0, 0);
        v8 = rand();
        v9 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
        if ( v9 )
          v10 = *(_DWORD *)(v9 + 40);
        else
          v10 = 0;
        v11 = v8 % v10;
        v12 = v2->m_uiPlayCardID;
        v13 = v11 + 1;
        if ( v13 == v12 )
          v13 = v12 + 1;
        v2->m_uiPlayCardID = v13;
      }
    }
    else
    {
      v2->m_bPlay = 0;
      v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v5 )
        GameFrameWork::OpenCard((GameFrameWork *)v5);
    }
  }
}
// A97640: using guessed type float Timer__ms_fDeltaTime;
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004E9D90) --------------------------------------------------------
void __thiscall CollectCardWin::UpdateMeWin(CollectCardWin *this, float fCurTime)
{
  CollectCardWin *v2; // esi@1

  v2 = this;
  CollectCardWin::UpdatePlay(this, fCurTime);
  CollectCardWin::UpdateOpen(v2, fCurTime);
}

//----- (004E9DC0) --------------------------------------------------------
CollectCardGroupDesc *__cdecl CollectCardGroupDescTab::GetByCardMobGroup(CardMobGroupIndex Type)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  CollectCardGroupDesc *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (CollectCardGroupDesc *)CDataReader::GetRecord(
                                         (CDataReader *)(ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable
                                                       + 4),
                                         v3);
      if ( result )
      {
        if ( result->CC_CardMobGroup == Type )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A97ED4: using guessed type int ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab___ms_pkTable;

//----- (004E9E10) --------------------------------------------------------
void *__thiscall CollectCardWin::_vector_deleting_destructor_(CollectCardWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CollectCardWin::_CollectCardWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004E9E40) --------------------------------------------------------
void __thiscall CardSlotWin::Select(CardSlotWin *this, bool bSelect)
{
  if ( this->m_pkBlindSpr )
    ((void (__stdcall *)(_DWORD))this->m_pkBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bSelect == 0);
}

//----- (004E9E70) --------------------------------------------------------
void __thiscall CollectRwItemWin::CollectRwItemWin(CollectRwItemWin *this)
{
  CollectRwItemWin *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->m_pkDisableSpr = 0;
  v1->m_pkEffectSpr = 0;
  v1->m_eRewardStateType = 0;
  v1->m_uiRewardID = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwItemWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwItemWin::_vftable_;
}
// 9912F8: using guessed type int (__stdcall *CollectRwItemWin___vftable_)(int uiFlags);
// 991314: using guessed type int (__thiscall *CollectRwItemWin___vftable_)(void *p, char);

//----- (004E9EB0) --------------------------------------------------------
void __thiscall CollectRwItemWin::_CollectRwItemWin(CollectRwItemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwItemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwItemWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9912F8: using guessed type int (__stdcall *CollectRwItemWin___vftable_)(int uiFlags);
// 991314: using guessed type int (__thiscall *CollectRwItemWin___vftable_)(void *p, char);

//----- (004E9ED0) --------------------------------------------------------
CollectRwItemWin::eRewardStateType __thiscall CollectRwItemWin::GetState(CollectRwItemWin *this)
{
  return this->m_eRewardStateType;
}

//----- (004E9EE0) --------------------------------------------------------
void __thiscall CollectRwItemWin::Reset(CollectRwItemWin *this)
{
  CollectRwItemWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkDisableSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkEffectSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (004E9F10) --------------------------------------------------------
void __thiscall CollectRwChoiceInv::CollectRwChoiceInv(CollectRwChoiceInv *this)
{
  CollectRwChoiceInv *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwChoiceInv::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwChoiceInv::_vftable_;
  v1->m_bSelect = 0;
}
// 99154C: using guessed type int (__stdcall *CollectRwChoiceInv___vftable_)(int uiFlags);
// 99156C: using guessed type int (__thiscall *CollectRwChoiceInv___vftable_)(void *p, char);

//----- (004E9F40) --------------------------------------------------------
void __thiscall CollectRwChoiceInv::_CollectRwChoiceInv(CollectRwChoiceInv *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwChoiceInv::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwChoiceInv::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 99154C: using guessed type int (__stdcall *CollectRwChoiceInv___vftable_)(int uiFlags);
// 99156C: using guessed type int (__thiscall *CollectRwChoiceInv___vftable_)(void *p, char);

//----- (004E9F70) --------------------------------------------------------
void __thiscall CollectRwChoiceInv::Select(CollectRwChoiceInv *this, bool bSelect)
{
  this->m_bSelect = bSelect;
}

//----- (004E9F80) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::OnCancel(CollectRwChoiceWin *this)
{
  this->m_bSelect = 0;
  this->m_uiSelectIndex = 0;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (004E9FA0) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::OnCancel(CollectCardChoiceWin *this)
{
  this->m_bSelect = 0;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004E9FC0) --------------------------------------------------------
void __thiscall CollectPopupWin::CollectPopupWin(CollectPopupWin *this)
{
  CollectPopupWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_fStartTime = 0.0;
  v1->m_pkLeftSpr = 0;
  v1->m_pkMiddleSpr = 0;
  v1->m_pkRightSpr = 0;
  v1->m_pkText = 0;
  v1->m_iMiddleXPos = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectPopupWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectPopupWin::_vftable_;
}
// 9917D8: using guessed type int (__stdcall *CollectPopupWin___vftable_)(int uiFlags);
// 9917F4: using guessed type int (__thiscall *CollectPopupWin___vftable_)(void *p, char);

//----- (004EA010) --------------------------------------------------------
void __thiscall CollectPopupWin::_CollectPopupWin(CollectPopupWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectPopupWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectPopupWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9917D8: using guessed type int (__stdcall *CollectPopupWin___vftable_)(int uiFlags);
// 9917F4: using guessed type int (__thiscall *CollectPopupWin___vftable_)(void *p, char);

//----- (004EA030) --------------------------------------------------------
void __thiscall CollectPopupWin::OnCommand(CollectPopupWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (004EA050) --------------------------------------------------------
void __thiscall CollectPopupWin::UpdateMeWin(CollectPopupWin *this, float fCurTime)
{
  if ( fCurTime - this->m_fStartTime > 3.0 )
    PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (004EA080) --------------------------------------------------------
void __thiscall CollectPopupWin::SetText(CollectPopupWin *this, const char *pcText)
{
  int v2; // ebx@0
  int v3; // edi@0
  CollectPopupWin *v4; // esi@1
  int v5; // edi@2
  PgWinSpr *v6; // ecx@4
  NiRefObjectVtbl *v7; // ebx@4
  PgWinSpr *v8; // edi@4
  int v9; // eax@4
  NiRefObjectVtbl *v10; // ebx@4
  PgWinSpr *v11; // edi@4
  int v12; // eax@4
  tagSIZE kSize; // [sp+4h] [bp-8h]@2
  int pcTexta; // [sp+14h] [bp+8h]@4
  int pcTextb; // [sp+14h] [bp+8h]@4

  v4 = this;
  if ( this->m_pkText )
  {
    ((void (__stdcall *)(const char *, int, int))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
      pcText,
      v3,
      v2);
    ((void (__stdcall *)(tagSIZE *))v4->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(&kSize);
    v5 = kSize.cx;
    if ( kSize.cx <= 0 )
      v5 = 1;
    ((void (__cdecl *)(int))v4->m_pkMiddleSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v5);
    ((void (__cdecl *)(unsigned int))v4->m_pkMiddleSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v4->m_iMiddleXPos - ((unsigned int)v5 >> 1));
    v6 = v4->m_pkLeftSpr;
    v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = v4->m_pkMiddleSpr;
    pcTexta = ((int (*)(void))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v9 = ((int (__thiscall *)(PgWinSpr *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v8);
    v7[43].__vecDelDtor((NiRefObject *)v4->m_pkLeftSpr, v9 - pcTexta);
    v10 = v4->m_pkRightSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v11 = v4->m_pkMiddleSpr;
    pcTextb = ((int (*)(void))v4->m_pkMiddleSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v12 = ((int (__thiscall *)(PgWinSpr *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v11);
    v10[43].__vecDelDtor((NiRefObject *)v4->m_pkRightSpr, v12 + pcTextb);
  }
}

//----- (004EA180) --------------------------------------------------------
NiSourceTexture *__thiscall CardSlotWin::LoadImageFile(CardSlotWin *this, const char *pcFileName)
{
  NiImageConverter *v2; // eax@1
  NiSourceTexture *result; // eax@1
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-Ch]@2

  v2 = NiImageConverter::GetImageConverter();
  result = (NiSourceTexture *)((int (__thiscall *)(NiImageConverter *, const char *, _DWORD))v2->baseclass_0.vfptr[2].__vecDelDtor)(
                                v2,
                                pcFileName,
                                0);
  if ( result )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 2;
    kPrefs.m_eMipMapped = 0;
    result = NiSourceTexture::Create((NiPixelData *)result, &kPrefs);
  }
  return result;
}

//----- (004EA1D0) --------------------------------------------------------
void __thiscall CardSlotWin::Reset(CardSlotWin *this)
{
  CardSlotWin *v1; // edi@1
  unsigned int v2; // esi@1
  int v3; // ecx@2

  v1 = this;
  this->m_uiCardID = 0;
  v2 = 0;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0);
    v2 += 4;
  }
  while ( v2 < 0x10 );
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v1,
    0);
}

//----- (004EA220) --------------------------------------------------------
bool __thiscall CollectRwItemWin::Create(CollectRwItemWin *this, NiNode *pkNode, const char *pcAbleName, const char *pcDisableName, const char *pcEffectName, PgWin *pkParent, int iCommandMsg)
{
  CollectRwItemWin *v7; // esi@1
  NiNode *v8; // edi@1
  PgWin *v9; // ebx@4
  PgSprData *v10; // eax@6
  int v12; // ebx@10
  NiNode *v13; // ST44_4@10
  PgSprData *v14; // eax@10
  PgWinSpr *v15; // eax@10
  PgSprData *v16; // eax@10
  PgWinSpr *v17; // eax@10
  int iOffX; // [sp+4h] [bp-18h]@4
  int iOffY; // [sp+8h] [bp-14h]@4
  int iLeft; // [sp+Ch] [bp-10h]@4
  int v21; // [sp+18h] [bp-4h]@3

  v7 = this;
  v8 = pkNode;
  if ( pkNode )
    InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v21 = 0;
  if ( !v8 )
    return 0;
  iLeft = 0;
  pkNode = 0;
  iOffX = 0;
  iOffY = 0;
  v9 = pkParent;
  if ( pkParent )
  {
    iOffX = ((int (__thiscall *)(PgWin *))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(pkParent);
    iOffY = ((int (__thiscall *)(PgWin *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v9);
  }
  v10 = PgSprData::Create(&v8->baseclass_0, pcAbleName, &iLeft, (int *)&pkNode, 0);
  if ( !PgWinBut::Create(&v7->baseclass_0, iLeft - iOffX, (int)((char *)pkNode - iOffY), v10, v9, iCommandMsg, 0, 0) )
  {
    v21 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    return 0;
  }
  v12 = iLeft;
  v13 = pkNode;
  v14 = PgSprData::Create(&v8->baseclass_0, pcDisableName, &iLeft, (int *)&pkNode, 0);
  v15 = PgWinSpr::CreateWin(
          iLeft - v12,
          (char *)pkNode - (char *)v13,
          v14,
          &v7->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v7->m_pkDisableSpr = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v16 = PgSprData::Create(&v8->baseclass_0, pcEffectName, &iLeft, (int *)&pkNode, 0);
  v17 = PgWinSpr::CreateWin(
          iLeft - v12,
          (char *)pkNode - (char *)v13,
          v16,
          &v7->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v7->m_pkEffectSpr = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v7->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v21 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  return 1;
}

//----- (004EA3E0) --------------------------------------------------------
void __thiscall CollectRwItemWin::SetState(CollectRwItemWin *this, CollectRwItemWin::eRewardStateType eType)
{
  CollectRwItemWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkDisableSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkEffectSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v2->m_eRewardStateType = eType;
  if ( eType )
  {
    if ( eType == 1 )
      ((void (__stdcall *)(_DWORD))v2->m_pkEffectSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkDisableSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
}

//----- (004EA450) --------------------------------------------------------
void __thiscall CollectPageWin::ResetPageNum(CollectPageWin *this)
{
  CollectPageWin *v1; // edi@1
  unsigned int v2; // ebx@1
  int v3; // esi@2
  int v4; // edi@3
  PgFont *v5; // eax@3
  int v6; // ecx@4
  CollectPageWin *v7; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v7 = this;
  v2 = 0;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
    {
      (*(void (__thiscall **)(int, _UNKNOWN *))(*(_DWORD *)v3 + 472))(v3, &unk_99101F);
      v4 = *(_DWORD *)v3;
      v5 = Font::Get(0);
      (*(void (__thiscall **)(int, PgFont *))(v4 + 452))(v3, v5);
      (*(void (__thiscall **)(int, D3DXCOLOR *))(*(_DWORD *)v3 + 468))(v3, &Color::m_kDxWhiteColor);
      v1 = v7;
    }
    v6 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v6 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 256))(0);
    v2 += 4;
  }
  while ( v2 < 0x14 );
}

//----- (004EA4E0) --------------------------------------------------------
void __thiscall CollectPageWin::Update(CollectPageWin *this)
{
  CollectPageWin *v1; // ebx@1
  unsigned int v2; // ecx@1
  unsigned int v3; // esi@1
  int v4; // eax@4
  unsigned int v5; // edi@4
  int v6; // esi@6
  int v7; // ST14_4@7
  char *v8; // eax@7
  int v9; // esi@8
  int v10; // esi@11
  int v11; // edi@12
  PgFont *v12; // eax@12
  int uiInterval; // [sp+10h] [bp-14h]@4
  int iXPos; // [sp+14h] [bp-10h]@6
  int v15; // [sp+18h] [bp-Ch]@5
  unsigned int v16; // [sp+1Ch] [bp-8h]@5
  unsigned int uiViewSize; // [sp+20h] [bp-4h]@2

  v1 = this;
  CollectPageWin::ResetPageNum(this);
  v2 = v1->m_uiLastPage + 1;
  v3 = v1->m_uiPage / 5;
  if ( v3 >= v2 / 5 )
    uiViewSize = v2 % 5;
  else
    uiViewSize = 5;
  v4 = v1->m_uiPageNumInterval
     + (*(int (**)(void))(***(_DWORD ***)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 144))();
  v5 = 0;
  uiInterval = v4;
  if ( uiViewSize )
  {
    v16 = v4 * (5 - uiViewSize) >> 1;
    v15 = 5 * v3;
    do
    {
      v6 = *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
      iXPos = v16 + v1->m_iPageNumFirstPos;
      if ( v6 )
      {
        v7 = *(_DWORD *)v6 + 472;
        v8 = fs("%d");
        (*(void (__thiscall **)(int, char *))v7)(v6, v8);
        (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 172))(v6, iXPos);
        v4 = uiInterval;
      }
      v9 = *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
      if ( v9 )
      {
        (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v9 + 520))(v9, v5 + v15);
        (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 172))(v9, iXPos);
        (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 256))(v9, 1);
        v4 = uiInterval;
      }
      v16 += v4;
      ++v5;
    }
    while ( v5 < uiViewSize );
  }
  v10 = *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v1->m_uiPage % 5);
  if ( v10 )
  {
    v11 = *(_DWORD *)v10;
    v12 = Font::Get(LARGEBOLD);
    (*(void (__thiscall **)(int, PgFont *))(v11 + 452))(v10, v12);
    (*(void (__thiscall **)(int, D3DXCOLOR *))(*(_DWORD *)v10 + 468))(v10, &Color::m_kDxYellowColor);
  }
}

//----- (004EA660) --------------------------------------------------------
bool __thiscall CollectRwChoiceInv::Create(CollectRwChoiceInv *this, int iXPos, int iYPos, PgWin *pkParent)
{
  CollectRwChoiceInv *v4; // esi@1
  bool result; // al@1

  v4 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v4->m_bSelect = 0;
    result = 1;
  }
  return result;
}

//----- (004EA690) --------------------------------------------------------
void __thiscall CollectRwChoiceInv::UpdateMeWin(CollectRwChoiceInv *this, float fCurTime)
{
  NiAVObject *v2; // eax@2

  if ( this->m_bSelect )
  {
    v2 = this->baseclass_0.baseclass_0.m_spClickGeom.m_pObject;
    if ( this->baseclass_0.m_spItem.m_pObject )
    {
      v2->m_uFlags &= 0xFFFEu;
      IconWin::UpdateMeWin(&this->baseclass_0.baseclass_0, fCurTime);
      return;
    }
    v2->m_uFlags |= 1u;
  }
  IconWin::UpdateMeWin(&this->baseclass_0.baseclass_0, fCurTime);
}

//----- (004EA6E0) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::OnOK(CollectRwChoiceWin *this)
{
  CollectRwChoiceWin *v1; // esi@1
  PgFrameWork *v2; // edi@2
  ItemIcon *v3; // ecx@3
  Item *v4; // eax@4

  v1 = this;
  if ( this->m_uiSelectIndex < 5 )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
    {
      v3 = *(ItemIcon **)(*(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 4
                                                                                                * v1->m_uiSelectIndex);
      if ( v3 )
      {
        v4 = ItemIcon::GetItem(v3);
        if ( v4 )
          GameFrameWork::NcCollectRewardReq((GameFrameWork *)v2, v1->m_uiRewardID, v4->m_kStruct.itemid);
        PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      }
    }
  }
}

//----- (004EA750) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::OnSelectItem(CollectRwChoiceWin *this, unsigned int uiIndex)
{
  int v2; // eax@3
  int v3; // eax@5

  if ( uiIndex < 5 )
  {
    v2 = *(_DWORD *)(*(_DWORD *)&this->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * this->m_uiSelectIndex);
    if ( v2 )
      *(_BYTE *)(v2 + 448) = 0;
    v3 = *(_DWORD *)(*(_DWORD *)&this->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex);
    if ( v3 )
      *(_BYTE *)(v3 + 448) = 1;
    this->m_bSelect = 1;
    this->m_uiSelectIndex = uiIndex;
  }
  else
  {
    this->m_bSelect = 0;
  }
}

//----- (004EA7B0) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::ResetItem(CollectRwChoiceWin *this)
{
  CollectRwChoiceWin *v1; // ebx@1
  unsigned int v2; // edi@1
  int v3; // esi@2
  void (__thiscall *v4)(_DWORD, _DWORD); // eax@3

  v1 = this;
  v2 = 0;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
    {
      ItemIcon::SetItem((ItemIcon *)v3, 0, 1);
      IconWin::ShowFocus((IconWin *)v3, 0);
      v4 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 256);
      *(_BYTE *)(v3 + 448) = 0;
      v4(v3, 0);
    }
    v2 += 4;
  }
  while ( v2 < 0x14 );
}

//----- (004EA810) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::Reset(CollectCardChoiceWin *this)
{
  CollectCardChoiceWin *v1; // edi@1
  unsigned int v2; // esi@1
  int v3; // eax@2

  v1 = this;
  this->m_bSelect = 0;
  this->m_uiSelectSlot = 0;
  v2 = 0;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
    {
      if ( *(_DWORD *)(v3 + 356) )
        (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v3 + 356) + 256))(*(_DWORD *)(v3 + 356), 1);
    }
    v2 += 4;
  }
  while ( v2 < 0x10 );
}

//----- (004EA870) --------------------------------------------------------
CollectCardChoiceWin::sRegistCardInfo *__thiscall CollectCardChoiceWin::GetRegistCardInfoByGrade(CollectCardChoiceWin *this, unsigned int uiGrade, unsigned int uiIndex)
{
  int v3; // edi@1
  unsigned int v4; // edx@1
  int v5; // esi@2

  v3 = 0;
  v4 = 0;
  if ( !((signed int)((char *)this->m_kRegistCardInfos.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
       / 20) )
    return 0;
  v5 = *(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  while ( *(_DWORD *)v5 != uiGrade )
  {
LABEL_6:
    ++v4;
    v5 += 20;
    if ( v4 >= (signed int)((char *)this->m_kRegistCardInfos.baseclass_0._Mylast
                          - *(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
             / 20 )
      return 0;
  }
  if ( v3 != uiIndex )
  {
    ++v3;
    goto LABEL_6;
  }
  return (CollectCardChoiceWin::sRegistCardInfo *)(*(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0]
                                                 + 20 * v4);
}

//----- (004EA8E0) --------------------------------------------------------
unsigned int __thiscall CollectCardChoiceWin::GetRegistCardInfoCountByGrade(CollectCardChoiceWin *this, unsigned int uiGrade)
{
  unsigned int v2; // esi@1
  int v3; // eax@1
  int v4; // ecx@2

  v2 = 0;
  v3 = (signed int)((char *)this->m_kRegistCardInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
     / 20;
  if ( v3 )
  {
    v4 = *(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    do
    {
      if ( *(_DWORD *)v4 == uiGrade )
        ++v2;
      v4 += 20;
      --v3;
    }
    while ( v3 );
  }
  return v2;
}

//----- (004EA930) --------------------------------------------------------
void __thiscall CollectPopupWin::OnShowWin(CollectPopupWin *this)
{
  this->m_fStartTime = Timer::ms_fCurTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004EA940) --------------------------------------------------------
void __thiscall CollectPageWin::OnPageNum(CollectPageWin *this, unsigned int uiPage)
{
  CollectPageWin *v2; // esi@1
  int v3; // ST0C_4@2
  unsigned int v4; // ST08_4@2
  PgWin *v5; // eax@2

  v2 = this;
  if ( this->m_uiPage != uiPage )
  {
    this->m_uiPage = uiPage;
    CollectPageWin::Update(this);
    v3 = v2->m_uiUpdateMsgParam;
    v4 = v2->m_uiUpdateMsg;
    v5 = PgWin::GetParentWin(&v2->baseclass_0);
    PgWin::PostMsg(&v2->baseclass_0, v5, 5u, v4, v3);
  }
}

//----- (004EA980) --------------------------------------------------------
void __thiscall CollectPageWin::OnPageArrow(CollectPageWin *this, CollectPageWin::ePageArrowType eType)
{
  CollectPageWin *v2; // esi@1
  unsigned int v3; // eax@3
  int v4; // eax@4
  unsigned int v5; // eax@6
  unsigned int v6; // ecx@6
  int v7; // ST0C_4@11
  unsigned int v8; // ST08_4@11
  PgWin *v9; // eax@11

  v2 = this;
  switch ( eType )
  {
    case 0:
      this->m_uiPage = 0;
      break;
    case 1:
      v3 = this->m_uiPage;
      if ( v3 )
        v4 = v3 - 1;
      else
        v4 = 0;
      goto LABEL_10;
    case 2:
      v5 = this->m_uiPage;
      v6 = this->m_uiLastPage;
      if ( v5 < v6 )
        v6 = v5 + 1;
      v2->m_uiPage = v6;
      break;
    case 3:
      v4 = this->m_uiLastPage;
LABEL_10:
      this->m_uiPage = v4;
      break;
    default:
      break;
  }
  CollectPageWin::Update(v2);
  v7 = v2->m_uiUpdateMsgParam;
  v8 = v2->m_uiUpdateMsg;
  v9 = PgWin::GetParentWin(&v2->baseclass_0);
  PgWin::PostMsg(&v2->baseclass_0, v9, 5u, v8, v7);
}

//----- (004EAA20) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::OnCommand(CollectRwChoiceWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      this->m_bSelect = 0;
      this->m_uiSelectIndex = 0;
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    }
    else
    {
      if ( wParam == 2 )
        CollectRwChoiceWin::OnSelectItem(this, lParam);
    }
  }
  else
  {
    CollectRwChoiceWin::OnOK(this);
  }
}

//----- (004EAA70) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::OnOK(CollectCardChoiceWin *this)
{
  CollectCardChoiceWin *v1; // esi@1
  PgFrameWork *v2; // edi@1
  char *v3; // eax@3
  int v4; // eax@4

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v1->m_bSelect )
    {
      v4 = *(_DWORD *)(*(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v1->m_uiSelectSlot);
      if ( v4 )
        GameFrameWork::NcCollectBookmarkRegistReq((GameFrameWork *)v2, v1->m_uiBookmarkSlot, *(_DWORD *)(v4 + 360));
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    }
    else
    {
      v3 = TextData2::Get(0x58826C81u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v2, v3);
    }
  }
}

//----- (004EAAF0) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::OnSelectSlot(CollectCardChoiceWin *this, unsigned int uiSlot)
{
  CollectCardChoiceWin *v2; // esi@1
  int v3; // eax@2

  v2 = this;
  if ( uiSlot < 4 )
  {
    CollectCardChoiceWin::Reset(this);
    v3 = *(_DWORD *)(*(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot);
    if ( v3 )
    {
      if ( *(_DWORD *)(v3 + 356) )
        (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 356) + 256))(*(_DWORD *)(v3 + 356), 0);
    }
    v2->m_bSelect = 1;
    v2->m_uiSelectSlot = uiSlot;
  }
}

//----- (004EAB50) --------------------------------------------------------
bool __thiscall CollectPopupWin::Create(CollectPopupWin *this, PgFrameWork *pkFrameWork)
{
  CollectPopupWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@10
  int v9; // ebx@10
  PgSprData *v10; // eax@10
  PgWinSpr *v11; // eax@10
  PgSprData *v12; // eax@10
  PgWinSpr *v13; // eax@10
  PgSprData *v14; // eax@10
  PgWinSpr *v15; // eax@10
  NiPointer<PgSprData::PgHitTester> *v16; // ecx@10
  unsigned int v17; // ST58_4@10
  PgFont *v18; // eax@10
  PgWinText *v19; // eax@10
  unsigned int v20; // eax@10
  NiNode *v21; // esi@11
  NiPointer<NiNode> spNode; // [sp+2Ch] [bp-18h]@1
  int iLeft; // [sp+30h] [bp-14h]@1
  int iTop; // [sp+34h] [bp-10h]@1
  int v25; // [sp+40h] [bp-4h]@1
  PgSprData *pkSprData; // [sp+4Ch] [bp+8h]@10
  unsigned int pkSprDataa; // [sp+4Ch] [bp+8h]@10

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v25 = 0;
  iLeft = 0;
  iTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\Collect_GetPopup.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "CollectCardChoiceWin", 0) )
  {
    v6 = spNode.m_pObject;
    v25 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = iLeft;
  v9 = iTop;
  pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(iLeft, iTop, pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnMiddle", &iLeft, &iTop, 0);
  v11 = PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMiddleSpr = v11;
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  v2->m_iMiddleXPos = ((int (*)(void))v2->m_pkMiddleSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Left", &iLeft, &iTop, 0);
  v13 = PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkLeftSpr = v13;
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnRight", &iLeft, &iTop, 0);
  v15 = PgWinSpr::CreateWin(iLeft - v8, iTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkRightSpr = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  pkSprDataa = v16->m_pObject->m_uiHeight;
  v17 = v16->m_pObject->m_uiWidth;
  v18 = Font::Get(0);
  v19 = PgWinText::CreateWin(
          iLeft - v8,
          iTop - v9,
          v17,
          pkSprDataa,
          v18,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkText = v19;
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v19,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v20 = ((int (__thiscall *)(CollectPopupWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  ((void (__thiscall *)(CollectPopupWin *, unsigned int, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[58].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    (PgWin::ms_uiScreenWidth >> 1) - (v20 >> 1),
    0.2);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v25 = -1;
  if ( spNode.m_pObject )
  {
    v21 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v21 )
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004EAE80) --------------------------------------------------------
void __thiscall CollectPageWin::OnCommand(CollectPageWin *this, unsigned int wParam, int lParam)
{
  CollectPageWin *v3; // esi@1
  int v4; // ST0C_4@5
  unsigned int v5; // ST08_4@5
  PgWin *v6; // eax@5

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
      CollectPageWin::OnPageArrow(this, (CollectPageWin::ePageArrowType)lParam);
  }
  else
  {
    if ( this->m_uiPage != lParam )
    {
      this->m_uiPage = lParam;
      CollectPageWin::Update(this);
      v4 = v3->m_uiUpdateMsgParam;
      v5 = v3->m_uiUpdateMsg;
      v6 = PgWin::GetParentWin(&v3->baseclass_0);
      PgWin::PostMsg(&v3->baseclass_0, v6, 5u, v5, v4);
    }
  }
}

//----- (004EAEE0) --------------------------------------------------------
void __thiscall CardSlotWin::_CardSlotWin(CardSlotWin *this)
{
  CardSlotWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CardSlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CardSlotWin::_vftable_;
  if ( *(_DWORD *)&this->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBorderSprs.baseclass_0._Mylast = 0;
  v1->m_kBorderSprs.baseclass_0._Myend = 0;
  PgWinLRBut::_PgWinLRBut(&v1->baseclass_0);
}
// 991A18: using guessed type int (__stdcall *CardSlotWin___vftable_)(int uiFlags);
// 991A34: using guessed type int (__thiscall *CardSlotWin___vftable_)(void *p, char);

//----- (004EAF30) --------------------------------------------------------
CollectRwItemWin *__cdecl CollectRwItemWin::CreateWin(NiNode *pkNode, const char *pcAbleName, const char *pcDisableName, const char *pcEffectName, PgWin *pkParent, int iCommandMsg)
{
  void *v6; // eax@1
  void *v7; // esi@1
  PgWin *v8; // edi@8
  CollectRwItemWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x154u);
  v7 = v6;
  result.m_pObject = (PgWin *)v6;
  v11 = 0;
  if ( v6 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v6);
    *(_DWORD *)v7 = &CollectRwItemWin::_vftable_;
    *((_DWORD *)v7 + 58) = &CollectRwItemWin::_vftable_;
    *((_DWORD *)v7 + 81) = 0;
    *((_DWORD *)v7 + 82) = 0;
    *((_DWORD *)v7 + 83) = 0;
    *((_DWORD *)v7 + 84) = 0;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)v7 + 1);
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiNode *, const char *, const char *, const char *, PgWin *, int))(*(_DWORD *)v7 + 560))(
                          v7,
                          pkNode,
                          pcAbleName,
                          pcDisableName,
                          pcEffectName,
                          pkParent,
                          iCommandMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = (CollectRwItemWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}
// 9912F8: using guessed type int (__stdcall *CollectRwItemWin___vftable_)(int uiFlags);
// 991314: using guessed type int (__thiscall *CollectRwItemWin___vftable_)(void *p, char);

//----- (004EB0A0) --------------------------------------------------------
void __thiscall CollectPageWin::_CollectPageWin(CollectPageWin *this)
{
  CollectPageWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectPageWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectPageWin::_vftable_;
  if ( *(_DWORD *)&this->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kPageArrowBtns.baseclass_0._Mylast = 0;
  v1->m_kPageArrowBtns.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kPageNumBtns.baseclass_0._Mylast = 0;
  v1->m_kPageNumBtns.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kPageNumTexts.baseclass_0._Mylast = 0;
  v1->m_kPageNumTexts.baseclass_0._Myend = 0;
  PgWin::_PgWin(&v1->baseclass_0);
}
// 991C84: using guessed type int (__stdcall *CollectPageWin___vftable_)(int uiFlags);
// 991CA4: using guessed type int (__thiscall *CollectPageWin___vftable_)(void *p, char);

//----- (004EB130) --------------------------------------------------------
CollectRwChoiceInv *__cdecl CollectRwChoiceInv::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  CollectRwChoiceInv *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1C4u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v3);
    *(_DWORD *)v4 = &CollectRwChoiceInv::_vftable_;
    *((_DWORD *)v4 + 58) = &CollectRwChoiceInv::_vftable_;
    *((_BYTE *)v4 + 448) = 0;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 612))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (CollectRwChoiceInv *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 99154C: using guessed type int (__stdcall *CollectRwChoiceInv___vftable_)(int uiFlags);
// 99156C: using guessed type int (__thiscall *CollectRwChoiceInv___vftable_)(void *p, char);

//----- (004EB280) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::_CollectRwChoiceWin(CollectRwChoiceWin *this)
{
  CollectRwChoiceWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwChoiceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwChoiceWin::_vftable_;
  if ( *(_DWORD *)&this->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRewardItems.baseclass_0._Mylast = 0;
  v1->m_kRewardItems.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 991E70: using guessed type int (__stdcall *CollectRwChoiceWin___vftable_)(int uiFlags);
// 991E8C: using guessed type int (__thiscall *CollectRwChoiceWin___vftable_)(void *p, char);

//----- (004EB2D0) --------------------------------------------------------
bool __thiscall CollectRwChoiceWin::Create(CollectRwChoiceWin *this, PgFrameWork *pkFrameWork)
{
  CollectRwChoiceWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  PgFont *v8; // eax@11
  PgWinText *v9; // ebx@11
  NiRefObjectVtbl *v10; // edi@11
  char *v11; // eax@11
  unsigned int v12; // edi@11
  NiNode *v13; // ebx@12
  char *v14; // eax@12
  int v15; // ebx@12
  int v16; // eax@13
  int v17; // ebx@13
  int v18; // edi@13
  int v19; // eax@13
  NiNode *v20; // ST20_4@13
  PgSprData *v21; // edi@13
  PgWin *v22; // ST28_4@13
  PgWin *v23; // edi@13
  PgFont *v24; // ST24_4@13
  unsigned int v25; // ST20_4@13
  unsigned int v26; // eax@13
  PgWinText *v27; // edi@13
  NiRefObjectVtbl *v28; // ebx@13
  char *v29; // eax@13
  PgSprData *v30; // edi@13
  PgWin *v31; // ST28_4@13
  PgFont *v32; // ST24_4@13
  unsigned int v33; // ST20_4@13
  unsigned int v34; // eax@13
  PgWinText *v35; // edi@13
  NiRefObjectVtbl *v36; // ebx@13
  char *v37; // eax@13
  NiNode *v38; // esi@14
  unsigned int uiWidth; // [sp+48h] [bp-20h]@1
  unsigned int uiHeight; // [sp+4Ch] [bp-1Ch]@1
  int iLeft; // [sp+50h] [bp-18h]@1
  int iTop; // [sp+54h] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+58h] [bp-10h]@1
  int v44; // [sp+64h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v44 = 0;
  uiWidth = 0;
  uiHeight = 0;
  iLeft = 0;
  iTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\Collect_RwChoice.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "CollectRwChoiceWin", 0)
    || !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "TextWin", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v44 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = Font::Get(0);
  v9 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v9,
    5u);
  v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = TextData2::Get(0xC42803Fu);
  v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v11);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v12 = 0;
  do
  {
    v13 = spNode.m_pObject;
    v14 = fs("Reward%02d");
    PgSprData::Create(&v13->baseclass_0, v14, &iLeft, &iTop, 0);
    v15 = 4 * v12;
    *(_DWORD *)(4 * v12 + *(_DWORD *)&v2->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0]) = CollectRwChoiceInv::CreateWin(
                                                                                                     iLeft,
                                                                                                     iTop,
                                                                                                     &v2->baseclass_0.baseclass_0.baseclass_0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)(4 * v12
                                                    + *(_DWORD *)&v2->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0])
                                      + 516))(2);
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)(4 * v12
                                                      + *(_DWORD *)&v2->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0])
                                        + 520))(v12);
    ++v12;
    *(_DWORD *)(*(_DWORD *)(v15 + *(_DWORD *)&v2->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0]) + 272) = g_pkItemInfoWin;
  }
  while ( v12 < 5 );
  v2->m_iItemFirstPos = (*(int (**)(void))(***(_DWORD ***)&v2->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0]
                                         + 164))();
  v16 = *(_DWORD *)&v2->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0];
  v17 = *(_DWORD *)v16;
  v18 = (*(int (**)(void))(**(_DWORD **)(v16 + 4) + 164))() - v2->m_iItemFirstPos;
  v19 = (*(int (__thiscall **)(int))(*(_DWORD *)v17 + 144))(v17);
  v20 = spNode.m_pObject;
  v2->m_uiItemInterval = v18 - v19;
  v21 = PgSprData::Create(&v20->baseclass_0, "OkBtnNor", &iLeft, &iTop, 0);
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "OkBtnClick");
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "OkBtnOver");
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "OkBtnDisable");
  v22 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkOKBtn = (PgWinBut *)v22;
  v23 = v22;
  v24 = Font::Get(MAIN_MENU);
  v25 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v23);
  v26 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v23);
  v27 = PgWinText::CreateWin(0, 0, v26, v25, v24, v22, 0, 0);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    5u);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v27,
    0);
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData2::Get(0xBAEAE224u);
  v28[118].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelBtnNor", &iLeft, &iTop, 0);
  PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "CancelBtnClick");
  PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "CancelBtnOver");
  v31 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v32 = Font::Get(MAIN_MENU);
  v33 = ((int (__thiscall *)(PgWin *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v31);
  v34 = ((int (__thiscall *)(PgWin *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v31);
  v35 = PgWinText::CreateWin(0, 0, v34, v33, v32, v31, 0, 0);
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v35,
    5u);
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v35,
    0);
  v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v37 = TextData2::Get(0xA6E6DFD7u);
  v36[118].__vecDelDtor((NiRefObject *)v35, (unsigned int)v37);
  ((void (__thiscall *)(CollectRwChoiceWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v44 = -1;
  if ( spNode.m_pObject )
  {
    v38 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v38 )
        v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004EB730) --------------------------------------------------------
CollectPopupWin *__cdecl CollectPopupWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CollectPopupWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *((float *)v2 + 91) = 0.0;
    *(_DWORD *)v2 = &CollectPopupWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CollectPopupWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CollectPopupWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9917D8: using guessed type int (__stdcall *CollectPopupWin___vftable_)(int uiFlags);
// 9917F4: using guessed type int (__thiscall *CollectPopupWin___vftable_)(void *p, char);

//----- (004EB8A0) --------------------------------------------------------
void __thiscall CardSlotWin::CardSlotWin(CardSlotWin *this)
{
  CardSlotWin *v1; // esi@1

  v1 = this;
  PgWinLRBut::PgWinLRBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CardSlotWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CardSlotWin::_vftable_;
  *(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBorderSprs.baseclass_0._Mylast = 0;
  v1->m_kBorderSprs.baseclass_0._Myend = 0;
  v1->m_pkAddBtn = 0;
  v1->m_pkUnidentifiedSpr = 0;
  v1->m_pkBlindSpr = 0;
  v1->m_uiCardID = 0;
  v1->m_uiStar = 0;
  v1->m_uiSerial = 0;
  v1->m_tRegistTime = 0;
  v1->m_uiIndex = 0;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kBorderSprs,
    4u);
  **(_DWORD **)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
}
// 991A18: using guessed type int (__stdcall *CardSlotWin___vftable_)(int uiFlags);
// 991A34: using guessed type int (__thiscall *CardSlotWin___vftable_)(void *p, char);

//----- (004EB970) --------------------------------------------------------
CardSlotWin *__cdecl CardSlotWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent, unsigned int uiIndex, unsigned int uiCommandMsg, unsigned int uiRCommandMsg)
{
  void *v6; // eax@1
  int v7; // eax@2
  int v8; // esi@2
  PgWin *v9; // edi@8
  CardSlotWin *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x17Cu);
  result.m_pObject = (PgWin *)v6;
  v12 = 0;
  if ( v6 )
  {
    CardSlotWin::CardSlotWin((CardSlotWin *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, PgWin *, unsigned int, unsigned int, unsigned int))(*(_DWORD *)v8 + 584))(
                          v8,
                          iXPos,
                          iYPos,
                          pkParent,
                          uiIndex,
                          uiCommandMsg,
                          uiRCommandMsg) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = (CardSlotWin *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}

//----- (004EBAB0) --------------------------------------------------------
void __thiscall CollectPageWin::CollectPageWin(CollectPageWin *this)
{
  CollectPageWin *v1; // esi@1
  int v2; // edx@1
  char *v3; // ecx@1
  int v4; // edi@1
  int v5; // eax@1
  char *v6; // edi@2
  int v7; // ecx@7
  unsigned int v8; // ecx@9
  int v9; // eax@14
  int v10; // [sp+4h] [bp-10h]@5
  int v11; // [sp+4h] [bp-10h]@7

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectPageWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectPageWin::_vftable_;
  *(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kPageNumTexts.baseclass_0._Mylast = 0;
  v1->m_kPageNumTexts.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kPageNumBtns.baseclass_0._Mylast = 0;
  v1->m_kPageNumBtns.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kPageArrowBtns.baseclass_0._Mylast = 0;
  v1->m_kPageArrowBtns.baseclass_0._Myend = 0;
  v1->m_iPageNumFirstPos = 0;
  v1->m_uiPageNumInterval = 0;
  v1->m_uiPage = 0;
  v1->m_uiLastPage = 0;
  v1->m_uiUpdateMsg = 0;
  v1->m_uiUpdateMsgParam = 0;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kPageNumTexts,
    5u);
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kPageNumBtns,
    5u);
  v2 = 0;
  **(_DWORD **)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  **(_DWORD **)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = 0;
  v3 = (char *)v1->m_kPageArrowBtns.baseclass_0._Mylast;
  v4 = *(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (signed int)((char *)v1->m_kPageArrowBtns.baseclass_0._Mylast - v4) >> 2;
  if ( (unsigned int)v5 <= 4 )
  {
    if ( (unsigned int)v5 < 4 )
    {
      v10 = (signed int)((char *)v1->m_kPageArrowBtns.baseclass_0._Mylast - v4) >> 2;
      if ( 1073741823 - (4 - v5) < (unsigned int)v10 )
        std::_Xlength_error("vector<T> too long");
      v7 = (signed int)((char *)v1->m_kPageArrowBtns.baseclass_0._Myend - v4) >> 2;
      v11 = 4 - v5 + v10;
      if ( v11 > (unsigned int)v7 )
      {
        if ( 1073741823 - ((unsigned int)v7 >> 1) >= v7 )
          v8 = ((unsigned int)v7 >> 1) + v7;
        else
          v8 = 0;
        if ( v8 < v11 )
          v8 = v11;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_kPageArrowBtns,
          v8);
        v2 = 0;
      }
      v9 = (signed int)((char *)v1->m_kPageArrowBtns.baseclass_0._Mylast
                      - *(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 4 != v9 )
        memset(v1->m_kPageArrowBtns.baseclass_0._Mylast, 0, 4 * (4 - v9));
      v1->m_kPageArrowBtns.baseclass_0._Mylast += 4
                                                - ((signed int)((char *)v1->m_kPageArrowBtns.baseclass_0._Mylast
                                                              - *(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    }
  }
  else
  {
    v6 = (char *)(v4 + 16);
    if ( v6 != v3 )
    {
      memmove(v6, v3, 0);
      v1->m_kPageArrowBtns.baseclass_0._Mylast = (PgWinBut **)v6;
      v2 = 0;
    }
  }
  **(_DWORD **)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = v2;
}
// 991C84: using guessed type int (__stdcall *CollectPageWin___vftable_)(int uiFlags);
// 991CA4: using guessed type int (__thiscall *CollectPageWin___vftable_)(void *p, char);

//----- (004EBD00) --------------------------------------------------------
CollectPageWin *__cdecl CollectPageWin::CreateWin(NiNode *pkNode, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent)
{
  void *v6; // eax@1
  int v7; // eax@2
  int v8; // esi@2
  PgWin *v9; // edi@8
  CollectPageWin *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x168u);
  result.m_pObject = (PgWin *)v6;
  v12 = 0;
  if ( v6 )
  {
    CollectPageWin::CollectPageWin((CollectPageWin *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiNode *, int, int, unsigned int, unsigned int, PgWin *))(*(_DWORD *)v8 + 452))(
                          v8,
                          pkNode,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = (CollectPageWin *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}

//----- (004EBE40) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::CollectRwChoiceWin(CollectRwChoiceWin *this)
{
  CollectRwChoiceWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwChoiceWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwChoiceWin::_vftable_;
  v1->m_pkOKBtn = 0;
  *(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRewardItems.baseclass_0._Mylast = 0;
  v1->m_kRewardItems.baseclass_0._Myend = 0;
  v1->m_bSelect = 0;
  v1->m_uiRewardID = 0;
  v1->m_uiSelectIndex = 0;
  v1->m_iItemFirstPos = 0;
  v1->m_uiItemInterval = 0;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kRewardItems,
    5u);
  **(_DWORD **)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = 0;
}
// 991E70: using guessed type int (__stdcall *CollectRwChoiceWin___vftable_)(int uiFlags);
// 991E8C: using guessed type int (__thiscall *CollectRwChoiceWin___vftable_)(void *p, char);

//----- (004EBF10) --------------------------------------------------------
CollectRwChoiceWin *__cdecl CollectRwChoiceWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CollectRwChoiceWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x180u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CollectRwChoiceWin::CollectRwChoiceWin((CollectRwChoiceWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CollectRwChoiceWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004EC040) --------------------------------------------------------
bool __thiscall CardSlotWin::Create(CardSlotWin *this, int iXPos, int iYPos, PgWin *pkParent, unsigned int uiIndex, unsigned int uiCommandMsg, unsigned int uiRCommandMsg)
{
  unsigned int v7; // edi@1
  CardSlotWin *v8; // esi@1
  char *v9; // eax@3
  PgSprData *v10; // eax@4
  NiNode *v11; // esi@5
  NiSourceTexture *v13; // eax@10
  NiNode *v14; // ebx@13
  char *v15; // eax@13
  PgSprData *v16; // eax@13
  NiNode *v17; // ebx@13
  char *v18; // eax@13
  PgSprData *v19; // eax@13
  PgWin *v20; // ST24_4@13
  PgSprData *v21; // ST20_4@13
  int v22; // eax@13
  int v23; // ST1C_4@13
  int v24; // eax@13
  PgWinSpr *v25; // eax@13
  PgSprData *v26; // eax@14
  PgWinSpr *v27; // eax@14
  int v28; // eax@14
  unsigned int v29; // ST1C_4@14
  NiSourceTexture *v30; // eax@14
  PgWinSpr *v31; // eax@14
  NiNode *v32; // esi@15
  unsigned int v33; // [sp+18h] [bp-A0h]@1
  NiTexturePalette *pTexturePalette; // [sp+28h] [bp-90h]@1
  int pTexturePalettea; // [sp+28h] [bp-90h]@12
  int iTop; // [sp+2Ch] [bp-8Ch]@1
  int iLeft; // [sp+30h] [bp-88h]@1
  NiPointer<NiNode> spNode; // [sp+34h] [bp-84h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kRankNodeName[4]; // [sp+38h] [bp-80h]@12
  unsigned int v40; // [sp+A8h] [bp-10h]@1
  int v41; // [sp+B4h] [bp-4h]@1
  int v42; // [sp+B8h] [bp+0h]@1

  v40 = (unsigned int)&v42 ^ __security_cookie;
  v33 = (unsigned int)&v42 ^ __security_cookie;
  v7 = 0;
  v8 = this;
  spNode.m_pObject = 0;
  v41 = 0;
  iLeft = 0;
  iTop = 0;
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v9 = Folder::Merge(&Folder::m_acMenu, "Game\\Collect_SCard.nif");
  PgUtil::LoadNodeNifFile(v9, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SmallImage", &iLeft, &iTop, 0);
  if ( !PgWinLRBut::Create(&v8->baseclass_0, iXPos, iYPos, v10, pkParent, uiCommandMsg, uiRCommandMsg) )
  {
    v11 = spNode.m_pObject;
    v41 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    return 0;
  }
  v13 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
  if ( v13 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor(
      (NiRefObject *)v8,
      (unsigned int)v13);
  v8->m_uiIndex = uiIndex;
  kRankNodeName[0].baseclass_0._Myres = 15;
  kRankNodeName[0].baseclass_0._Mysize = 0;
  kRankNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kRankNodeName, "S", 1u);
  LOBYTE(v41) = 1;
  kRankNodeName[1].baseclass_0._Myres = 15;
  kRankNodeName[1].baseclass_0._Mysize = 0;
  kRankNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kRankNodeName[1], "A", 1u);
  LOBYTE(v41) = 2;
  kRankNodeName[2].baseclass_0._Myres = 15;
  kRankNodeName[2].baseclass_0._Mysize = 0;
  kRankNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kRankNodeName[2], "B", 1u);
  LOBYTE(v41) = 3;
  kRankNodeName[3].baseclass_0._Myres = 15;
  kRankNodeName[3].baseclass_0._Mysize = 0;
  kRankNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kRankNodeName[3], "C", 1u);
  LOBYTE(v41) = 4;
  pTexturePalettea = (int)kRankNodeName;
  do
  {
    v14 = spNode.m_pObject;
    v15 = fs("%sCardBack");
    v16 = PgSprData::Create(&v14->baseclass_0, v15, &iLeft, &iTop, 0);
    *(_DWORD *)(*(_DWORD *)&v8->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + v7) = PgWinSpr::CreateWin(
                                                                                               iLeft,
                                                                                               iTop,
                                                                                               v16,
                                                                                               &v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                                                                                               0,
                                                                                               0);
    (*(void (__stdcall **)(_DWORD, unsigned int))(**(_DWORD **)(v7
                                                              + *(_DWORD *)&v8->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0])
                                                + 256))(
      0,
      v33);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7
                                                + *(_DWORD *)&v8->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0])
                                  + 240))(0);
    v17 = spNode.m_pObject;
    v18 = fs("%sCard");
    v19 = PgSprData::Create(&v17->baseclass_0, v18, &iLeft, &iTop, 0);
    v20 = *(PgWin **)(*(_DWORD *)&v8->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + v7);
    v21 = v19;
    v22 = ((int (__thiscall *)(_DWORD))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(*(_DWORD *)(*(_DWORD *)&v8->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] + v7));
    v23 = iTop - v22;
    v24 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v20);
    v25 = PgWinSpr::CreateWin(iLeft - v24, v23, v21, v20, 0, 0);
    v33 = 0;
    ((void (__thiscall *)(PgWinSpr *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v25);
    pTexturePalettea += 28;
    v7 += 4;
  }
  while ( v7 < 0x10 );
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Unidentified", &iLeft, &iTop, 0);
  v27 = PgWinSpr::CreateWin(iLeft, iTop, v26, &v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v8->m_pkUnidentifiedSpr = v27;
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v27,
    0);
  v28 = ((int (__thiscall *)(CardSlotWin *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v8);
  v29 = (int)v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
               (NiRefObject *)v8,
               v28);
  v30 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
  v31 = PgWinSpr::CreateWin(v30, 0, 0, v29, (unsigned int)v8, 0, 0, 0);
  v8->m_pkBlindSpr = v31;
  ((void (__thiscall *)(PgWinSpr *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v31);
  ((void (__stdcall *)(_DWORD))v8->m_pkBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v8->m_pkBlindSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  LOBYTE(v41) = 0;
  _eh_vector_destructor_iterator_(
    kRankNodeName,
    0x1Cu,
    4,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  v41 = -1;
  if ( spNode.m_pObject )
  {
    v32 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v32 )
        v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004EC460) --------------------------------------------------------
void __thiscall CardSlotWin::SetInfo(CardSlotWin *this, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime)
{
  CardSlotWin *v5; // ebx@1
  PgWinSpr *v6; // ecx@1
  int v7; // eax@3
  void *v8; // eax@7
  char *v9; // eax@15
  char *v10; // eax@15
  NiSourceTexture *v11; // eax@15
  int v12; // ecx@17
  char *v13; // esi@19
  char *v14; // eax@19
  const char *v15; // esi@19
  char *v16; // ecx@19
  int v17; // eax@19
  char v18; // dl@20
  char *v19; // eax@21
  const char *v20; // esi@21
  char *v21; // ecx@21
  int v22; // eax@21
  char v23; // dl@22
  char *v24; // eax@23
  char *v25; // eax@23
  char *v26; // eax@23
  char *v27; // eax@23
  char *v28; // eax@24
  char *v29; // eax@24
  unsigned int v30; // [sp+8h] [bp-8Ch]@3
  unsigned int RecordNo; // [sp+Ch] [bp-88h]@6
  unsigned int pkCollectCard; // [sp+10h] [bp-84h]@4
  CollectCard *pkCollectCarda; // [sp+10h] [bp-84h]@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kGrade[4]; // [sp+14h] [bp-80h]@19
  unsigned int v35; // [sp+84h] [bp-10h]@1
  int v36; // [sp+90h] [bp-4h]@19
  int v37; // [sp+94h] [bp+0h]@1

  v35 = (unsigned int)&v37 ^ __security_cookie;
  v5 = this;
  CardSlotWin::Reset(this);
  v6 = v5->m_pkUnidentifiedSpr;
  v5->m_uiStar = uiStar;
  v5->m_uiCardID = uiCardID;
  v5->m_uiSerial = uiSerial;
  v5->m_tRegistTime = tRegistTime;
  if ( v6 )
    ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(tRegistTime == 0);
  v30 = v5->m_uiCardID;
  v7 = *(_DWORD *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 56);
  if ( v7 )
    pkCollectCard = *(_DWORD *)(v7 + 40);
  else
    pkCollectCard = 0;
  RecordNo = 0;
  if ( pkCollectCard > 0 )
  {
    while ( 1 )
    {
      v8 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<CollectCardView_CollectCardViewTab>::ms_pkTable + 4),
             RecordNo);
      if ( v8 )
      {
        if ( *(_WORD *)v8 == (_WORD)v30 )
          break;
      }
      ++RecordNo;
      if ( RecordNo >= pkCollectCard )
        return;
    }
    if ( tRegistTime <= 0 )
    {
      v28 = TextData2::Get(0x305A715Cu);
      v29 = fs(v28);
      PgWin::SetToolTipWinText(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v29);
    }
    else
    {
      pkCollectCarda = CollectCardTab::GetByCardID(v5->m_uiCardID);
      if ( !pkCollectCarda )
        return;
      if ( !Folder::m_bInit )
        Folder::Init();
      v9 = Folder::Merge(&Folder::m_acMenu, "Collect\\Min\\%s.png");
      v10 = fs(v9);
      v11 = CardSlotWin::LoadImageFile(v5, v10);
      if ( v11 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor(
          (NiRefObject *)v5,
          (unsigned int)v11);
      v12 = *(_DWORD *)(*(_DWORD *)&v5->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]
                      + 4 * pkCollectCarda->CC_CardGradeType);
      if ( v12 )
        (*(void (__stdcall **)(signed int))(*(_DWORD *)v12 + 256))(1);
      kGrade[0].baseclass_0._Myres = 15;
      kGrade[0].baseclass_0._Mysize = 0;
      kGrade[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v13 = TextData2::Get(0xFF43606Cu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kGrade, v13, strlen(v13));
      v36 = 0;
      v14 = TextData2::Get(0xFF434E6Cu);
      v15 = v14;
      v16 = v14;
      kGrade[1].baseclass_0._Myres = 15;
      kGrade[1].baseclass_0._Mysize = 0;
      kGrade[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v17 = (int)(v14 + 1);
      do
        v18 = *v16++;
      while ( v18 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &kGrade[1],
        v15,
        (unsigned int)&v16[-v17]);
      LOBYTE(v36) = 1;
      v19 = TextData2::Get(0xFF434F6Cu);
      v20 = v19;
      v21 = v19;
      kGrade[2].baseclass_0._Myres = 15;
      kGrade[2].baseclass_0._Mysize = 0;
      kGrade[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v22 = (int)(v19 + 1);
      do
        v23 = *v21++;
      while ( v23 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &kGrade[2],
        v20,
        (unsigned int)&v21[-v22]);
      LOBYTE(v36) = 2;
      v24 = TextData2::Get(0xFF43506Cu);
      kGrade[3].baseclass_0._Myres = 15;
      kGrade[3].baseclass_0._Mysize = 0;
      kGrade[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGrade[3], v24, strlen(v24));
      v36 = 3;
      v25 = TextData2::Get(0x73A0CCBBu);
      fs(v25);
      v26 = TextData2::Get(0x1F34296Cu);
      v27 = fs(v26);
      PgWin::SetToolTipWinText(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v27);
      v36 = -1;
      _eh_vector_destructor_iterator_(
        kGrade,
        0x1Cu,
        4,
        (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    }
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  }
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97ED0: using guessed type int ITableBase_CollectCardView_CollectCardViewTab___ms_pkTable;

//----- (004EC800) --------------------------------------------------------
bool __thiscall CollectPageWin::Create(CollectPageWin *this, NiNode *pkNode, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent)
{
  NiAVObject *v7; // ebx@1
  CollectPageWin *v8; // esi@1
  int v9; // eax@3
  unsigned int v10; // ecx@4
  int v11; // eax@5
  NiRefObjectVtbl *v12; // edx@5
  int v14; // edi@10
  int v15; // ST44_4@12
  char *v16; // eax@12
  void *v17; // eax@12
  int v18; // ebx@12
  int v19; // edi@12
  PgSprData::PgHitTester *v20; // eax@12
  void *v21; // edx@12
  int v22; // ebx@12
  PgFont *v23; // eax@12
  int v24; // eax@13
  int v25; // ebx@13
  int v26; // edi@13
  unsigned int v27; // ebx@13
  char *v28; // eax@14
  char *v29; // eax@14
  char *v30; // eax@14
  NiAVObject *v31; // esi@15
  unsigned int v32; // [sp+4h] [bp-ACh]@1
  int iLeft; // [sp+1Ch] [bp-94h]@4
  int iTop; // [sp+20h] [bp-90h]@4
  NiAVObject *pkObject; // [sp+24h] [bp-8Ch]@1
  unsigned int iOffX; // [sp+28h] [bp-88h]@5
  PgSprData *pkSprData; // [sp+2Ch] [bp-84h]@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > akPageNodeName[4]; // [sp+30h] [bp-80h]@13
  unsigned int v39; // [sp+A0h] [bp-10h]@1
  int v40; // [sp+ACh] [bp-4h]@3
  int v41; // [sp+B0h] [bp+0h]@1

  v39 = (unsigned int)&v41 ^ __security_cookie;
  v32 = (unsigned int)&v41 ^ __security_cookie;
  v7 = (NiAVObject *)pkNode;
  v8 = this;
  pkObject = (NiAVObject *)pkNode;
  if ( pkNode )
    InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v9 = 0;
  v40 = 0;
  if ( !pkNode )
    return 0;
  v10 = 0;
  iLeft = 0;
  iTop = 0;
  if ( pkParent )
  {
    v11 = ((int (__thiscall *)(PgWin *))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(pkParent);
    v12 = pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    iOffX = v11;
    v9 = ((int (__thiscall *)(PgWin *))v12[42].__vecDelDtor)(pkParent);
    v10 = iOffX;
  }
  if ( !PgWin::Create(&v8->baseclass_0, iXPos - v10, iYPos - v9, uiWidth, uiHeight, pkParent, 0, 0) )
  {
    v40 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)pkNode, 1u);
    return 0;
  }
  v14 = 0;
  while ( 1 )
  {
    v15 = v14 + 1;
    v16 = fs("PageBtn%02d");
    v17 = PgSprData::Create(v7, v16, &iLeft, &iTop, 0);
    v18 = *(_DWORD *)&v8->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0];
    pkSprData = (PgSprData *)v17;
    v19 = 4 * v14;
    *(_DWORD *)(v18 + v19) = PgWinBut::CreateWin(
                               iLeft - iXPos,
                               iTop - iYPos,
                               (PgSprData *)v17,
                               &v8->baseclass_0,
                               0,
                               0,
                               0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v19
                                                + *(_DWORD *)&v8->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0])
                                  + 276))(0.0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v19
                                                + *(_DWORD *)&v8->m_kPageNumBtns.baseclass_0.___u0.baseclass_0.dummy[0])
                                  + 256))(0);
    v20 = pkSprData->m_akHitTester.m_pBase->m_pObject;
    v21 = (void *)v20->m_uiWidth;
    v22 = *(_DWORD *)&v8->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0];
    iOffX = v20->m_uiHeight;
    pkSprData = (PgSprData *)v21;
    v23 = Font::Get(0);
    *(_DWORD *)(v22 + v19) = PgWinText::CreateWin(
                               iLeft - iXPos,
                               iTop - iYPos,
                               (unsigned int)pkSprData,
                               iOffX,
                               v23,
                               &v8->baseclass_0,
                               0,
                               0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)(v19
                                                    + *(_DWORD *)&v8->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0])
                                      + 488))(9);
    (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v19
                                                         + *(_DWORD *)&v8->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0])
                                           + 240))(
      *(_DWORD *)(v19 + *(_DWORD *)&v8->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0]),
      0);
    v14 = v15;
    if ( (unsigned int)v15 >= 5 )
      break;
    v7 = pkObject;
  }
  v8->m_iPageNumFirstPos = (*(int (__cdecl **)(unsigned int))(***(_DWORD ***)&v8->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                            + 164))(v32);
  v24 = *(_DWORD *)&v8->m_kPageNumTexts.baseclass_0.___u0.baseclass_0.dummy[0];
  v25 = *(_DWORD *)v24;
  v26 = (*(int (**)(void))(**(_DWORD **)(v24 + 4) + 164))() - v8->m_iPageNumFirstPos;
  v8->m_uiPageNumInterval = v26 - (*(int (__thiscall **)(int))(*(_DWORD *)v25 + 144))(v25);
  v27 = 0;
  akPageNodeName[0].baseclass_0._Myres = 15;
  akPageNodeName[0].baseclass_0._Mysize = 0;
  akPageNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(akPageNodeName, "First", 5u);
  LOBYTE(v40) = 1;
  akPageNodeName[1].baseclass_0._Myres = 15;
  akPageNodeName[1].baseclass_0._Mysize = 0;
  akPageNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akPageNodeName[1], "Front", 5u);
  LOBYTE(v40) = 2;
  akPageNodeName[2].baseclass_0._Myres = 15;
  akPageNodeName[2].baseclass_0._Mysize = 0;
  akPageNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akPageNodeName[2], "Next", 4u);
  LOBYTE(v40) = 3;
  akPageNodeName[3].baseclass_0._Myres = 15;
  akPageNodeName[3].baseclass_0._Mysize = 0;
  akPageNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akPageNodeName[3], "Last", 4u);
  LOBYTE(v40) = 4;
  iOffX = (unsigned int)akPageNodeName;
  do
  {
    v28 = fs("%sPageNor");
    pkSprData = PgSprData::Create(pkObject, v28, &iLeft, &iTop, 0);
    v29 = fs("%sPageClick");
    PgSprData::Add(pkSprData, pkObject, v29);
    v30 = fs("%sPageOver");
    PgSprData::Add(pkSprData, pkObject, v30);
    *(_DWORD *)(4 * v27 + *(_DWORD *)&v8->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0]) = PgWinBut::CreateWin(iLeft - iXPos, iTop - iYPos, pkSprData, &v8->baseclass_0, 1u, 0, 0);
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)(*(_DWORD *)&v8->m_kPageArrowBtns.baseclass_0.___u0.baseclass_0.dummy[0]
                                                      + 4 * v27)
                                        + 520))(v27);
    iOffX += 28;
    ++v27;
  }
  while ( v27 < 4 );
  LOBYTE(v40) = 0;
  _eh_vector_destructor_iterator_(
    akPageNodeName,
    0x1Cu,
    4,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  v31 = pkObject;
  v40 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&pkObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v31->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (004ECC40) --------------------------------------------------------
bool __thiscall CollectCardChoiceWin::Create(CollectCardChoiceWin *this, PgFrameWork *pkFrameWork)
{
  CollectCardChoiceWin *v2; // esi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  bool v6; // zf@7
  PgSprData *v8; // eax@11
  PgWinSpr *v9; // eax@11
  int v10; // ebx@11
  NiNode *v11; // edi@12
  char *v12; // eax@12
  PgSprData *v13; // edi@12
  char *v14; // eax@12
  char *v15; // eax@12
  PgWinBut *v16; // eax@12
  unsigned int v17; // ebx@13
  NiNode *v18; // edi@14
  int v19; // ST54_4@14
  char *v20; // eax@14
  PgSprData *v21; // eax@14
  int v22; // edi@14
  int v23; // ebx@14
  NiAVObject *v24; // eax@14
  int (__thiscall *v25)(_DWORD); // edx@14
  unsigned int v26; // ecx@14
  int v27; // eax@14
  int v28; // ebx@14
  NiAVObject *v29; // eax@14
  int (__thiscall *v30)(_DWORD); // edx@14
  unsigned int v31; // ecx@14
  int v32; // eax@14
  int v33; // edi@20
  CollectPageWin *v34; // eax@23
  PgSprData *v35; // edi@23
  PgWin *v36; // ST38_4@23
  PgFont *v37; // ST34_4@23
  unsigned int v38; // ST30_4@23
  unsigned int v39; // eax@23
  PgWinText *v40; // edi@23
  NiRefObjectVtbl *v41; // ebx@23
  char *v42; // eax@23
  PgSprData *v43; // edi@23
  PgWin *v44; // ST38_4@23
  PgFont *v45; // ST34_4@23
  unsigned int v46; // ST30_4@23
  unsigned int v47; // eax@23
  PgWinText *v48; // edi@23
  NiRefObjectVtbl *v49; // ebx@23
  char *v50; // eax@23
  NiNode *v51; // esi@24
  volatile LONG *v52; // [sp+34h] [bp-B4h]@17
  unsigned int v53; // [sp+38h] [bp-B0h]@1
  unsigned int uiHeight; // [sp+4Ch] [bp-9Ch]@1
  unsigned int uiWidth; // [sp+50h] [bp-98h]@1
  NiTexturePalette *i; // [sp+54h] [bp-94h]@1
  NiAVObject *pkObject; // [sp+58h] [bp-90h]@12
  int iTop; // [sp+5Ch] [bp-8Ch]@1
  int iLeft; // [sp+60h] [bp-88h]@1
  NiPointer<NiNode> spNode; // [sp+64h] [bp-84h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > akGradeNodeName[4]; // [sp+68h] [bp-80h]@11
  unsigned int v62; // [sp+D8h] [bp-10h]@1
  int v63; // [sp+E4h] [bp-4h]@1
  int v64; // [sp+E8h] [bp+0h]@1

  v62 = (unsigned int)&v64 ^ __security_cookie;
  v53 = (unsigned int)&v64 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v63 = 0;
  uiWidth = 0;
  uiHeight = 0;
  iLeft = 0;
  iTop = 0;
  i = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\Collect_CardChoice.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, i);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v4, 0, pkFrameWork, "CollectCardChoiceWin", 0) )
  {
    v5 = spNode.m_pObject;
    v63 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v6 = v5 == 0;
    goto LABEL_8;
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  v9 = PgWinSpr::CreateWin(iLeft, iTop, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  akGradeNodeName[0].baseclass_0._Myres = 15;
  akGradeNodeName[0].baseclass_0._Mysize = 0;
  akGradeNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(akGradeNodeName, "S", 1u);
  LOBYTE(v63) = 1;
  akGradeNodeName[1].baseclass_0._Myres = 15;
  akGradeNodeName[1].baseclass_0._Mysize = 0;
  akGradeNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGradeNodeName[1], "A", 1u);
  LOBYTE(v63) = 2;
  akGradeNodeName[2].baseclass_0._Myres = 15;
  akGradeNodeName[2].baseclass_0._Mysize = 0;
  akGradeNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGradeNodeName[2], "B", 1u);
  LOBYTE(v63) = 3;
  akGradeNodeName[3].baseclass_0._Myres = 15;
  akGradeNodeName[3].baseclass_0._Mysize = 0;
  akGradeNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGradeNodeName[3], "C", 1u);
  LOBYTE(v63) = 4;
  i = 0;
  v10 = (int)akGradeNodeName;
  do
  {
    v11 = spNode.m_pObject;
    v12 = fs("%sRankNor");
    v13 = PgSprData::Create(&v11->baseclass_0, v12, &iLeft, &iTop, 0);
    pkObject = (NiAVObject *)spNode.m_pObject;
    v14 = fs("%sRankClick");
    PgSprData::Add(v13, pkObject, v14);
    pkObject = (NiAVObject *)spNode.m_pObject;
    v15 = fs("%sRankOver");
    PgSprData::Add(v13, pkObject, v15);
    v16 = PgWinBut::CreateWin(iLeft, iTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v16,
      (unsigned int)i);
    v10 += 28;
    i = (NiTexturePalette *)((char *)i + 1);
  }
  while ( (unsigned int)i < 4 );
  v17 = 0;
  do
  {
    v18 = spNode.m_pObject;
    v19 = v17 + 1;
    v20 = fs("SelectCard%02d");
    v21 = PgSprData::Create(&v18->baseclass_0, v20, &iLeft, &iTop, 0);
    i = (NiTexturePalette *)PgWinSpr::CreateWin(iLeft, iTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v22 = 4 * v17;
    pkObject = (NiAVObject *)(4 * v17 + *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
    pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)CardSlotWin::CreateWin(
                                                                               iLeft,
                                                                               iTop,
                                                                               &v2->baseclass_0.baseclass_0.baseclass_0,
                                                                               v17,
                                                                               3u,
                                                                               3u);
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)(4 * v17
                                                      + *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0])
                                        + 520))(v17);
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)(4 * v17
                                                      + *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0])
                                        + 564))(v17);
    v23 = *(_DWORD *)(4 * v17 + *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
    v24 = (NiAVObject *)((int (__cdecl *)(unsigned int))i->baseclass_0.vfptr[36].__vecDelDtor)(v53);
    v25 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v23 + 144);
    pkObject = v24;
    v26 = (unsigned int)((char *)v24 - v25(v23));
    v27 = *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0];
    iLeft += v26 >> 1;
    v28 = *(_DWORD *)(v22 + v27);
    v29 = (NiAVObject *)((int (*)(void))i->baseclass_0.vfptr[37].__vecDelDtor)();
    v30 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v28 + 148);
    pkObject = v29;
    v31 = (unsigned int)((char *)v29 - v30(v28));
    v32 = *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0];
    iTop += v31 >> 1;
    (*(void (__stdcall **)(int))(**(_DWORD **)(v22 + v32) + 172))(iLeft);
    (*(void (__thiscall **)(_DWORD, int))(**(_DWORD **)(v22
                                                      + *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0])
                                        + 176))(
      *(_DWORD *)(v22 + *(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]),
      iTop);
    v17 = v19;
  }
  while ( (unsigned int)v19 < 4 );
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "FirstPageNor", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    LOBYTE(v63) = 0;
    _eh_vector_destructor_iterator_(
      akGradeNodeName,
      0x1Cu,
      4,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v5 = spNode.m_pObject;
    v63 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v52 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_18:
    if ( !InterlockedDecrement(v52) )
    {
      v6 = v5 == 0;
LABEL_8:
      if ( !v6 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  v33 = iLeft;
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "LastPageNor", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    LOBYTE(v63) = 0;
    _eh_vector_destructor_iterator_(
      akGradeNodeName,
      0x1Cu,
      4,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v5 = spNode.m_pObject;
    v63 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v52 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_18;
  }
  uiWidth += iLeft - v33;
  v34 = CollectPageWin::CreateWin(
          spNode.m_pObject,
          iLeft,
          iTop,
          uiWidth,
          uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkPageWin = v34;
  v34->m_uiUpdateMsg = 4;
  v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkBtnNor", &iLeft, &iTop, 0);
  PgSprData::Add(v35, &spNode.m_pObject->baseclass_0, "OkBtnClick");
  PgSprData::Add(v35, &spNode.m_pObject->baseclass_0, "OkBtnOver");
  v36 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v37 = Font::Get(MAIN_MENU);
  v38 = ((int (__thiscall *)(PgWin *))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v36);
  v39 = ((int (__thiscall *)(PgWin *))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v36);
  v40 = PgWinText::CreateWin(0, 0, v39, v38, v37, v36, 0, 0);
  v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v40,
    5u);
  v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v40,
    0);
  v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v42 = TextData2::Get(0xBAEAE224u);
  v41[118].__vecDelDtor((NiRefObject *)v40, (unsigned int)v42);
  v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelBtnNor", &iLeft, &iTop, 0);
  PgSprData::Add(v43, &spNode.m_pObject->baseclass_0, "CancelBtnClick");
  PgSprData::Add(v43, &spNode.m_pObject->baseclass_0, "CancelBtnOver");
  v44 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v43, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v45 = Font::Get(MAIN_MENU);
  v46 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v44);
  v47 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v44);
  v48 = PgWinText::CreateWin(0, 0, v47, v46, v45, v44, 0, 0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v48,
    5u);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v48,
    0);
  v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v50 = TextData2::Get(0xA6E6DFD7u);
  v49[118].__vecDelDtor((NiRefObject *)v48, (unsigned int)v50);
  ((void (__thiscall *)(CollectCardChoiceWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v63) = 0;
  _eh_vector_destructor_iterator_(
    akGradeNodeName,
    0x1Cu,
    4,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  v63 = -1;
  if ( spNode.m_pObject )
  {
    v51 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v51 )
        v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v51, 1u);
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004ED3E0) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::UpdateGrade(CollectCardChoiceWin *this, unsigned int uiGrade)
{
  CollectCardChoiceWin *v2; // ebx@1
  CollectPageWin *v3; // eax@1
  int v4; // ecx@2
  int v5; // eax@2
  int v6; // esi@4
  unsigned int v7; // eax@5
  CollectCardChoiceWin::sRegistCardInfo *v8; // edi@6
  void (__thiscall *v9)(_DWORD, _DWORD); // eax@6
  int v10; // ecx@6
  signed int v11; // [sp-Ch] [bp-1Ch]@8
  unsigned int uiPage; // [sp+4h] [bp-Ch]@2
  int uiSize; // [sp+8h] [bp-8h]@2
  int i; // [sp+Ch] [bp-4h]@2

  v2 = this;
  CollectCardChoiceWin::Reset(this);
  v3 = v2->m_pkPageWin;
  if ( v3 )
  {
    uiPage = v3->m_uiPage;
    v4 = (signed int)((char *)v2->m_kRegistCardInfos.baseclass_0._Mylast
                    - *(_DWORD *)&v2->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
       / 20;
    v5 = 0;
    uiSize = (signed int)((char *)v2->m_kRegistCardInfos.baseclass_0._Mylast
                        - *(_DWORD *)&v2->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
           / 20;
    i = 0;
    while ( 1 )
    {
      v6 = *(_DWORD *)(*(_DWORD *)&v2->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
      if ( !v6 )
        goto LABEL_13;
      v7 = v5 + 4 * uiPage;
      if ( v7 >= v4 )
        break;
      v8 = CollectCardChoiceWin::GetRegistCardInfoByGrade(v2, uiGrade, v7);
      v9 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 256);
      v10 = v6;
      if ( v8 )
      {
        v9(v6, 1);
        CardSlotWin::SetInfo((CardSlotWin *)v6, v8->m_uiCardID, v8->m_uiStar, v8->m_uiSerial, v8->m_tRegistTime);
        if ( !*(_DWORD *)(v6 + 356) )
          goto LABEL_13;
        v6 = *(_DWORD *)(v6 + 356);
        v11 = 1;
        goto LABEL_11;
      }
      v11 = 0;
LABEL_12:
      v9(v10, v11);
LABEL_13:
      v5 = i + 1;
      i = v5;
      if ( (unsigned int)v5 >= 4 )
        return;
      v4 = uiSize;
    }
    v11 = 0;
LABEL_11:
    v9 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 256);
    v10 = v6;
    goto LABEL_12;
  }
}

//----- (004ED4C0) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::Update(CollectRwChoiceWin *this)
{
  CollectRwChoiceWin *v1; // esi@1
  unsigned int v2; // edi@1
  int v3; // eax@4
  unsigned int v4; // esi@5
  void *v5; // eax@8
  unsigned __int16 *v6; // eax@14
  Item *v7; // eax@15
  int v8; // edi@16
  unsigned int v9; // esi@17
  char *v10; // eax@17
  unsigned int uiItemCount; // [sp+8h] [bp-20h]@1
  unsigned int v12; // [sp+10h] [bp-18h]@4
  int uiInterval; // [sp+14h] [bp-14h]@1
  int v14; // [sp+18h] [bp-10h]@2
  CollectRwChoiceWin *v15; // [sp+1Ch] [bp-Ch]@1
  unsigned int v16; // [sp+20h] [bp-8h]@4
  unsigned int i; // [sp+24h] [bp-4h]@1

  v1 = this;
  v15 = this;
  CollectRwChoiceWin::ResetItem(this);
  uiInterval = v1->m_uiItemInterval
             + (*(int (**)(void))(***(_DWORD ***)&v1->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 144))();
  v2 = 0;
  uiItemCount = CollectCardRewardTab::GetCountByRewardID(v1->m_uiRewardID);
  i = 0;
  if ( uiItemCount )
  {
    v14 = 0;
    while ( 1 )
    {
      v3 = *(_DWORD *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 56);
      v12 = v1->m_uiRewardID;
      v16 = v2;
      if ( v3 == v2 )
        v4 = 0;
      else
        v4 = *(_DWORD *)(v3 + 40);
      for ( ; v2 < v4; ++v2 )
      {
        v5 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 4),
               v2);
        if ( v5 && *(_WORD *)v5 == (_WORD)v12 )
        {
          if ( v16 == i )
          {
            v6 = (unsigned __int16 *)ItemInfoTab::GetByInxName((char *)v5 + 8);
            if ( v6 )
            {
              v7 = Item::Create(*v6);
              if ( v7 )
              {
                v8 = *(_DWORD *)(*(_DWORD *)&v15->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * i);
                if ( v8 )
                {
                  v9 = v14 + v15->m_iItemFirstPos + (uiInterval * (5 - uiItemCount) >> 1);
                  ItemIcon::SetItem((ItemIcon *)v8, v7, 1);
                  v10 = fs("%d");
                  (*(void (__stdcall **)(char *))(**(_DWORD **)(v8 + 380) + 472))(v10);
                  (*(void (__stdcall **)(signed int))(**(_DWORD **)(v8 + 380) + 256))(1);
                  (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v8 + 172))(v8, v9);
                  IconWin::ShowFocus((IconWin *)v8, 1);
                  (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v8 + 256))(v8, 1);
                }
              }
            }
            break;
          }
          ++v16;
        }
      }
      v14 += uiInterval;
      ++i;
      if ( i >= uiItemCount )
        break;
      v1 = v15;
      v2 = 0;
    }
  }
}
// A97ED8: using guessed type int ITableBase_CollectCardReward_CollectCardRewardTab___ms_pkTable;

//----- (004ED660) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::CollectCardChoiceWin(CollectCardChoiceWin *this)
{
  CollectCardChoiceWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectCardChoiceWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectCardChoiceWin::_vftable_;
  *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardSlots.baseclass_0._Mylast = 0;
  v1->m_kCardSlots.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRegistCardInfos.baseclass_0._Mylast = 0;
  v1->m_kRegistCardInfos.baseclass_0._Myend = 0;
  v1->m_bSelect = 0;
  v1->m_uiSelectSlot = 0;
  v1->m_uiBookmarkSlot = 0;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kCardSlots,
    4u);
  **(_DWORD **)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
}
// 9920B0: using guessed type int (__stdcall *CollectCardChoiceWin___vftable_)(int uiFlags);
// 9920CC: using guessed type int (__thiscall *CollectCardChoiceWin___vftable_)(void *p, char);

//----- (004ED730) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::_CollectCardChoiceWin(CollectCardChoiceWin *this)
{
  CollectCardChoiceWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectCardChoiceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectCardChoiceWin::_vftable_;
  if ( *(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRegistCardInfos.baseclass_0._Mylast = 0;
  v1->m_kRegistCardInfos.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardSlots.baseclass_0._Mylast = 0;
  v1->m_kCardSlots.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9920B0: using guessed type int (__stdcall *CollectCardChoiceWin___vftable_)(int uiFlags);
// 9920CC: using guessed type int (__thiscall *CollectCardChoiceWin___vftable_)(void *p, char);

//----- (004ED7A0) --------------------------------------------------------
CollectCardChoiceWin *__cdecl CollectCardChoiceWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CollectCardChoiceWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CollectCardChoiceWin::CollectCardChoiceWin((CollectCardChoiceWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CollectCardChoiceWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004ED8D0) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::OnSelectGrade(CollectCardChoiceWin *this, unsigned int uiGrade)
{
  CollectCardChoiceWin *v2; // esi@1
  int v3; // edi@2
  int v4; // ebx@2
  int i; // eax@2
  unsigned int v6; // eax@7

  v2 = this;
  if ( this->m_pkPageWin )
  {
    v3 = *(_DWORD *)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    v4 = 0;
    for ( i = (signed int)((char *)this->m_kRegistCardInfos.baseclass_0._Mylast - v3) / 20; i; --i )
    {
      if ( *(_DWORD *)v3 == uiGrade )
        ++v4;
      v3 += 20;
    }
    this->m_pkPageWin->m_uiPage = 0;
    if ( v4 )
      v6 = (unsigned int)(v4 - 1) >> 2;
    else
      v6 = 0;
    this->m_pkPageWin->m_uiLastPage = v6;
    this->m_pkPageWin->m_uiUpdateMsgParam = uiGrade;
    CollectPageWin::Update(this->m_pkPageWin);
  }
  CollectCardChoiceWin::UpdateGrade(v2, uiGrade);
}

//----- (004ED970) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::ClearInfo(CollectCardChoiceWin *this)
{
  CollectCardChoiceWin *v1; // esi@1
  CollectCardChoiceWin::sRegistCardInfo *v2; // eax@1
  CollectCardChoiceWin::sRegistCardInfo *v3; // ecx@1

  v1 = this;
  v2 = this->m_kRegistCardInfos.baseclass_0._Mylast;
  v3 = *(CollectCardChoiceWin::sRegistCardInfo **)&this->m_kRegistCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
    v1->m_kRegistCardInfos.baseclass_0._Mylast = std::_Move<CollectWin::sCardInfo___CollectWin::sCardInfo__>(v2, v2, v3);
}

//----- (004ED9A0) --------------------------------------------------------
void __thiscall CollectRwChoiceWin::SetReward(CollectRwChoiceWin *this, unsigned int uiRewardID, bool bEnable)
{
  CollectRwChoiceWin *v3; // esi@1
  PgWinBut *v4; // ecx@1

  v3 = this;
  v4 = this->m_pkOKBtn;
  v3->m_uiRewardID = uiRewardID;
  if ( v4 )
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
  CollectRwChoiceWin::Update(v3);
}

//----- (004ED9E0) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::OnShowWin(CollectCardChoiceWin *this)
{
  CollectCardChoiceWin::OnSelectGrade(this, 0);
}

//----- (004ED9F0) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::OnCommand(CollectCardChoiceWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      CollectCardChoiceWin::OnOK(this);
      break;
    case 1u:
      this->m_bSelect = 0;
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 2u:
      CollectCardChoiceWin::OnSelectGrade(this, lParam);
      break;
    case 3u:
      CollectCardChoiceWin::OnSelectSlot(this, lParam);
      break;
    case 4u:
      CollectCardChoiceWin::UpdateGrade(this, lParam);
      break;
    default:
      return;
  }
}

//----- (004EDA60) --------------------------------------------------------
void __thiscall CollectCardChoiceWin::InsertInfo(CollectCardChoiceWin *this, unsigned int uiGrade, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime)
{
  CollectCardChoiceWin::sRegistCardInfo kInfo; // [sp+0h] [bp-18h]@1
  unsigned int v7; // [sp+14h] [bp-4h]@1
  int v8; // [sp+18h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  kInfo.m_uiCardID = uiCardID;
  kInfo.m_uiGrade = uiGrade;
  kInfo.m_uiSerial = uiSerial;
  kInfo.m_uiStar = uiStar;
  kInfo.m_tRegistTime = tRegistTime;
  std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::push_back(
    &this->m_kRegistCardInfos,
    &kInfo);
}
// A85C00: using guessed type int __security_cookie;

//----- (004EDAB0) --------------------------------------------------------
void *__thiscall CollectRwItemWin::_vector_deleting_destructor_(CollectRwItemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwItemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwItemWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9912F8: using guessed type int (__stdcall *CollectRwItemWin___vftable_)(int uiFlags);
// 991314: using guessed type int (__thiscall *CollectRwItemWin___vftable_)(void *p, char);

//----- (004EDAF0) --------------------------------------------------------
void *__thiscall CollectRwChoiceInv::_scalar_deleting_destructor_(CollectRwChoiceInv *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwChoiceInv::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwChoiceInv::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99154C: using guessed type int (__stdcall *CollectRwChoiceInv___vftable_)(int uiFlags);
// 99156C: using guessed type int (__thiscall *CollectRwChoiceInv___vftable_)(void *p, char);

//----- (004EDB30) --------------------------------------------------------
void *__thiscall CollectPopupWin::_scalar_deleting_destructor_(CollectPopupWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectPopupWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectPopupWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9917D8: using guessed type int (__stdcall *CollectPopupWin___vftable_)(int uiFlags);
// 9917F4: using guessed type int (__thiscall *CollectPopupWin___vftable_)(void *p, char);

//----- (004EDB70) --------------------------------------------------------
unsigned int __cdecl CollectCardRewardTab::GetCountByRewardID(unsigned int uiRewardID)
{
  int v1; // eax@1
  unsigned int v2; // ebx@1
  unsigned int v3; // edi@2
  unsigned int v4; // esi@4
  void *v5; // eax@5

  v1 = *(_DWORD *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v3 = *(_DWORD *)(v1 + 40);
  else
    v3 = 0;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 4),
             v4);
      if ( v5 && *(_WORD *)v5 == uiRewardID )
        ++v2;
      ++v4;
    }
    while ( v4 < v3 );
  }
  return v2;
}
// A97ED8: using guessed type int ITableBase_CollectCardReward_CollectCardRewardTab___ms_pkTable;

//----- (004EDBC0) --------------------------------------------------------
CollectWin::sCardInfo *__thiscall std::allocator<CollectWin::sCardInfo>::allocate(std::allocator<CollectWin::sCardInfo> *this, unsigned int _Count)
{
  CollectWin::sCardInfo *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0xCCCCCCC || (result = (CollectWin::sCardInfo *)operator new(20 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004EDC20) --------------------------------------------------------
void *__thiscall CardSlotWin::_vector_deleting_destructor_(CardSlotWin *this, unsigned int a2)
{
  CardSlotWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CardSlotWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CardSlotWin::_vftable_;
  if ( *(_DWORD *)&this->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v2->m_kBorderSprs.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_kBorderSprs.baseclass_0._Mylast = 0;
  v2->m_kBorderSprs.baseclass_0._Myend = 0;
  PgWinLRBut::_PgWinLRBut(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 991A18: using guessed type int (__stdcall *CardSlotWin___vftable_)(int uiFlags);
// 991A34: using guessed type int (__thiscall *CardSlotWin___vftable_)(void *p, char);

//----- (004EDC90) --------------------------------------------------------
void *__thiscall CollectPageWin::_scalar_deleting_destructor_(CollectPageWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CollectPageWin::_CollectPageWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004EDCC0) --------------------------------------------------------
void *__thiscall CollectRwChoiceWin::_vector_deleting_destructor_(CollectRwChoiceWin *this, unsigned int a2)
{
  CollectRwChoiceWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectRwChoiceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectRwChoiceWin::_vftable_;
  if ( *(_DWORD *)&this->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v2->m_kRewardItems.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_kRewardItems.baseclass_0._Mylast = 0;
  v2->m_kRewardItems.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 991E70: using guessed type int (__stdcall *CollectRwChoiceWin___vftable_)(int uiFlags);
// 991E8C: using guessed type int (__thiscall *CollectRwChoiceWin___vftable_)(void *p, char);

//----- (004EDD30) --------------------------------------------------------
void __thiscall std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::reserve(std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *this, unsigned int _Count)
{
  std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *v2; // esi@1
  void *v3; // eax@4
  CollectCardChoiceWin::sRegistCardInfo *v4; // ST04_4@4
  CollectCardChoiceWin::sRegistCardInfo *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // eax@6
  int v9; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@4

  v11 = &v9;
  v2 = this;
  if ( _Count > 0xCCCCCCC )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 20 < _Count )
  {
    v3 = std::allocator<CollectWin::sCardInfo>::allocate(
           (std::allocator<CollectWin::sCardInfo> *)&this->baseclass_0._Alval,
           _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(CollectCardChoiceWin::sRegistCardInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v12 = 0;
    std::_Uninit_move<CollectCardChoiceWin::sRegistCardInfo___CollectCardChoiceWin::sRegistCardInfo___std::allocator<CollectCardChoiceWin::sRegistCardInfo>_CollectCardChoiceWin::sRegistCardInfo>(
      v5,
      v4,
      (CollectCardChoiceWin::sRegistCardInfo *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((unsigned __int64)(1717986919i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    v8 = _Ptr;
    v2->baseclass_0._Myend = (CollectCardChoiceWin::sRegistCardInfo *)&_Ptr[20 * _Count];
    v2->baseclass_0._Mylast = (CollectCardChoiceWin::sRegistCardInfo *)&v8[20 * v7];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (004EDE30) --------------------------------------------------------
void __thiscall std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::_Reserve(std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 20;
  if ( 214748364 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 20;
  if ( v3 > v4 )
  {
    if ( 214748364 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::reserve(
      this,
      v5);
  }
}

//----- (004EDEB0) --------------------------------------------------------
void __thiscall std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::push_back(std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *this, CollectCardChoiceWin::sRegistCardInfo *_Val)
{
  std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *v2; // edi@1
  CollectCardChoiceWin::sRegistCardInfo *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  int v6; // ecx@5
  CollectCardChoiceWin::sRegistCardInfo *v7; // eax@5
  CollectCardChoiceWin::sRegistCardInfo *v8; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::_Reserve(
        v2,
        1u);
    v8 = v2->baseclass_0._Mylast;
    if ( v8 )
    {
      v8->m_uiGrade = _Val->m_uiGrade;
      v8->m_uiCardID = _Val->m_uiCardID;
      v8->m_uiStar = _Val->m_uiStar;
      v8->m_uiSerial = _Val->m_uiSerial;
      v8->m_tRegistTime = _Val->m_tRegistTime;
    }
  }
  else
  {
    v4 = (signed int)((unsigned __int64)(1717986919i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::_Reserve(
        v2,
        1u);
    v6 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 20 * v5;
    v7 = v2->baseclass_0._Mylast;
    if ( v7 )
    {
      v7->m_uiGrade = *(_DWORD *)v6;
      v7->m_uiCardID = *(_DWORD *)(v6 + 4);
      v7->m_uiStar = *(_DWORD *)(v6 + 8);
      v7->m_uiSerial = *(_DWORD *)(v6 + 12);
      v7->m_tRegistTime = *(_DWORD *)(v6 + 16);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (004EDF60) --------------------------------------------------------
void *__thiscall CollectCardChoiceWin::_scalar_deleting_destructor_(CollectCardChoiceWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CollectCardChoiceWin::_CollectCardChoiceWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004EDF90) --------------------------------------------------------
bool __cdecl CollectWin::sNewestInfo::SortRegistTime(CollectWin::sNewestInfo *lhw, CollectWin::sNewestInfo *rhw)
{
  return lhw->m_tRegistTime > rhw->m_tRegistTime;
}

//----- (004EDFB0) --------------------------------------------------------
void __thiscall CollectCardListWin::OnPopupCardMenu(CollectCardListWin *this, unsigned int uiSlot)
{
  CollectCardListWin *v2; // esi@1
  PopupMenuWin *v3; // ecx@2

  v2 = this;
  if ( this->m_eCardListType != 1 )
  {
    v3 = this->m_pkPopupCardMenu;
    if ( v3 )
    {
      v2->m_uiSelectBookmarkSlot = uiSlot;
      ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        PgWin::ms_iMsX.x,
        PgWin::ms_iMsY);
      ((void (__stdcall *)(_DWORD))v2->m_pkPopupCardMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_pkPopupCardMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004EE020) --------------------------------------------------------
void __thiscall CollectCardListWin::OnRemoveBookmark(CollectCardListWin *this)
{
  CollectCardListWin *v1; // edi@1
  PgFrameWork *v2; // eax@1
  CollectPageWin *v3; // edx@2
  unsigned int v4; // esi@2

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = v1->m_pkPageWin;
    v4 = 0;
    if ( v3 )
      v4 = v1->m_uiSelectBookmarkSlot + 12 * v3->m_uiPage;
    GameFrameWork::NcCollectBookmarkRegistReq((GameFrameWork *)v2, v4, 0);
  }
}

//----- (004EE070) --------------------------------------------------------
void __thiscall CollectCardListWin::SetPage(CollectCardListWin *this, unsigned int uiPage, unsigned int uiLastPage, unsigned int uiUpdateMsg, unsigned int uiUpdateMsgParam)
{
  if ( this->m_pkPageWin )
  {
    this->m_pkPageWin->m_uiPage = uiPage;
    this->m_pkPageWin->m_uiLastPage = uiLastPage;
    this->m_pkPageWin->m_uiUpdateMsg = uiUpdateMsg;
    this->m_pkPageWin->m_uiUpdateMsgParam = uiUpdateMsgParam;
    CollectPageWin::Update(this->m_pkPageWin);
  }
}

//----- (004EE0D0) --------------------------------------------------------
void __thiscall CollectCardListWin::SetPage(CollectCardListWin *this, unsigned int uiPage)
{
  if ( this->m_pkPageWin )
  {
    this->m_pkPageWin->m_uiPage = uiPage;
    CollectPageWin::Update(this->m_pkPageWin);
  }
}

//----- (004EE100) --------------------------------------------------------
unsigned int __thiscall CollectCardListWin::GetPage(CollectCardListWin *this)
{
  CollectPageWin *v1; // eax@1
  unsigned int result; // eax@2

  v1 = this->m_pkPageWin;
  if ( v1 )
    result = v1->m_uiPage;
  else
    result = 0;
  return result;
}

//----- (004EE120) --------------------------------------------------------
void __thiscall CollectWin::OnHelpLink(CollectWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "Collect_Main");
}

//----- (004EE150) --------------------------------------------------------
unsigned int __thiscall CollectWin::ConvertRewardGrade(CollectWin *this, unsigned int uiGrade)
{
  unsigned int result; // eax@1

  result = 0;
  switch ( uiGrade )
  {
    case 0u:
      result = 1;
      break;
    case 1u:
      result = 2;
      break;
    case 2u:
      result = 3;
      break;
    case 3u:
      result = 4;
      break;
    default:
      return result;
  }
  return result;
}

//----- (004EE1A0) --------------------------------------------------------
void __thiscall CollectMainWin::OnSelectCard(CollectMainWin *this, unsigned int uiSlot)
{
  int v2; // eax@1
  unsigned int v3; // esi@1
  unsigned int v4; // edi@1
  unsigned int v5; // ebx@1
  PgFrameWork *v6; // eax@3

  v2 = *(_DWORD *)(*(_DWORD *)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot);
  v3 = 0;
  v4 = 0;
  v5 = 0;
  if ( v2 )
  {
    v3 = *(_DWORD *)(v2 + 360);
    v4 = *(_DWORD *)(v2 + 364);
    v5 = *(_DWORD *)(v2 + 368);
  }
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v6 )
    GameFrameWork::OpenCollectCardWin((GameFrameWork *)v6, 1, v3, v4, v5, 0);
}

//----- (004EE200) --------------------------------------------------------
void __thiscall CollectMainWin::ResetCard(CollectMainWin *this)
{
  CollectMainWin *v1; // edi@1
  unsigned int v2; // esi@1
  CardSlotWin *v3; // ecx@2

  v1 = this;
  v2 = 0;
  do
  {
    v3 = *(CardSlotWin **)(v2 + *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
      CardSlotWin::Reset(v3);
    v2 += 4;
  }
  while ( v2 < 0x10 );
}

//----- (004EE230) --------------------------------------------------------
void __thiscall CollectMainWin::SetNewest(CollectMainWin *this, unsigned int uiSlot, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime)
{
  CardSlotWin *v6; // esi@1

  v6 = *(CardSlotWin **)(*(_DWORD *)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot);
  if ( v6 )
  {
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v6,
      uiCardID != 0);
    CardSlotWin::SetInfo(v6, uiCardID, uiStar, uiSerial, tRegistTime);
  }
}

//----- (004EE280) --------------------------------------------------------
void __thiscall CollectCardListWin::SetCard(CollectCardListWin *this, unsigned int uiSlot, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime)
{
  CollectCardListWin *v6; // edi@1
  CardSlotWin *v7; // esi@1
  int v8; // ecx@3
  int v9; // eax@4

  v6 = this;
  v7 = *(CardSlotWin **)(*(_DWORD *)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot);
  if ( v7 )
  {
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v7,
      uiCardID != 0);
    CardSlotWin::SetInfo(v7, uiCardID, uiStar, uiSerial, tRegistTime);
  }
  v8 = *(_DWORD *)(*(_DWORD *)&v6->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot);
  if ( v8 )
  {
    v9 = 0;
    if ( !v6->m_eCardListType )
      LOBYTE(v9) = uiCardID == 0;
    (*(void (__stdcall **)(int))(*(_DWORD *)v8 + 256))(v9);
  }
}

//----- (004EE300) --------------------------------------------------------
void __thiscall CollectCardListWin::ResetReward(CollectCardListWin *this)
{
  CollectCardListWin *v1; // edi@1
  unsigned int v2; // esi@3
  int v3; // ecx@4

  v1 = this;
  if ( this->m_pkRewardItem )
    ((void (__stdcall *)(_DWORD))this->m_pkRewardItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v2 = 0;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0);
    v2 += 4;
  }
  while ( v2 < 0x10 );
}

//----- (004EE350) --------------------------------------------------------
void __thiscall CollectCardListWin::ResetCard(CollectCardListWin *this)
{
  CollectCardListWin *v1; // edi@1
  unsigned int v2; // esi@1
  int v3; // ecx@2
  unsigned int v4; // esi@5
  int v5; // ecx@6

  v1 = this;
  v2 = 0;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0);
    v2 += 4;
  }
  while ( v2 < 0x30 );
  v4 = 0;
  do
  {
    v5 = *(_DWORD *)(v4 + *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v5 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 256))(0);
    v4 += 4;
  }
  while ( v4 < 0x30 );
}

//----- (004EE3B0) --------------------------------------------------------
void __thiscall CollectWin::SetBookmark(CollectWin *this, unsigned int uiSlot, unsigned int uiCardID)
{
  if ( ((unsigned int)((char *)this->m_kBookmarkInfos.baseclass_0._Mylast
                     - *(_DWORD *)&this->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFC) == 240 )
    *(_DWORD *)(*(_DWORD *)&this->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot) = uiCardID;
}

//----- (004EE3E0) --------------------------------------------------------
void __thiscall CollectWin::SetReward(CollectWin *this, unsigned int uiRewardID, bool bCompleted)
{
  unsigned int v3; // edx@1
  signed int v4; // eax@1
  int v5; // esi@2
  int v6; // ecx@2

  v3 = 0;
  v4 = (signed int)((char *)this->m_kRewardInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0]) >> 4;
  if ( v4 )
  {
    v5 = *(_DWORD *)&this->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    v6 = v5 + 4;
    while ( *(_DWORD *)v6 != uiRewardID )
    {
      ++v3;
      v6 += 16;
      if ( v3 >= v4 )
        return;
    }
    *(_BYTE *)(v5 + 16 * v3 + 12) = bCompleted;
  }
}

//----- (004EE430) --------------------------------------------------------
void __thiscall CollectWin::SetCard(CollectWin *this, unsigned int uiCardID, unsigned int uiStar, unsigned int uiSerial, int tRegistTime)
{
  unsigned int v5; // eax@1
  int v6; // edx@2
  int v7; // eax@6

  v5 = 0;
  if ( (signed int)((char *)this->m_kCardInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
     / 20 )
  {
    v6 = *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] + 4;
    while ( *(_DWORD *)v6 != uiCardID )
    {
      ++v5;
      v6 += 20;
      if ( v5 >= (signed int)((char *)this->m_kCardInfos.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
               / 20 )
        return;
    }
    v7 = 20 * v5;
    *(_DWORD *)(v7 + *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = uiStar;
    *(_DWORD *)(v7 + *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = uiSerial;
    *(_DWORD *)(v7 + *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = tRegistTime;
  }
}

//----- (004EE4B0) --------------------------------------------------------
CollectWin::sRewardInfo *__thiscall CollectWin::GetRewardInfoByGrade(CollectWin *this, unsigned int uiRewardGrade)
{
  signed int v2; // edx@1
  unsigned int v3; // eax@1
  int v4; // esi@2
  int v5; // ecx@2
  CollectWin::sRewardInfo *result; // eax@6

  v2 = (signed int)((char *)this->m_kRewardInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0]) >> 4;
  v3 = 0;
  if ( v2 )
  {
    v4 = *(_DWORD *)&this->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = *(_DWORD *)&this->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    while ( *(_DWORD *)v5 != uiRewardGrade || *(_BYTE *)(v5 + 12) )
    {
      ++v3;
      v5 += 16;
      if ( v3 >= v2 )
        goto LABEL_6;
    }
    result = (CollectWin::sRewardInfo *)(v4 + 16 * v3);
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}

//----- (004EE500) --------------------------------------------------------
CollectWin::sCardInfo *__thiscall CollectWin::GetCardInfoByCardID(CollectWin *this, unsigned int uiCardID)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // ecx@2
  int v5; // esi@2
  CollectWin::sCardInfo *result; // eax@5

  v2 = (signed int)((char *)this->m_kCardInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
     / 20;
  v3 = 0;
  if ( (signed int)((char *)this->m_kCardInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
     / 20 )
  {
    v4 = *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = v4 + 4;
    while ( *(_DWORD *)v5 != uiCardID )
    {
      ++v3;
      v5 += 20;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    result = (CollectWin::sCardInfo *)(v4 + 20 * v3);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (004EE560) --------------------------------------------------------
unsigned int __thiscall CollectWin::GetRegistCountByGrade(CollectWin *this, unsigned int uiGrade)
{
  unsigned int v2; // esi@1
  int v3; // eax@1
  int v4; // ecx@2

  v2 = 0;
  v3 = (signed int)((char *)this->m_kCardInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
     / 20;
  if ( v3 )
  {
    v4 = *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    do
    {
      if ( *(_DWORD *)v4 == uiGrade && *(_DWORD *)(v4 + 16) > 0 )
        ++v2;
      v4 += 20;
      --v3;
    }
    while ( v3 );
  }
  return v2;
}

//----- (004EE5B0) --------------------------------------------------------
void __thiscall CollectMainWin::OnCheckRewardGrade(CollectMainWin *this, unsigned int uiRewardGrade)
{
  PgWin *v2; // esi@1
  PgWin *v3; // eax@2

  v2 = (PgWin *)this;
  if ( uiRewardGrade < 5 )
  {
    v3 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
    PgWin::PostMsg(v2, v3, 5u, 2u, uiRewardGrade);
  }
}

//----- (004EE5E0) --------------------------------------------------------
void __thiscall CollectMainWin::OnSelectRewardItem(CollectMainWin *this)
{
  CollectMainWin *v1; // esi@1
  PgWin *v2; // ebx@1
  unsigned int v3; // edi@2
  CollectRwItemWin *v4; // ecx@3
  CollectRwChoiceWin *v5; // esi@4
  bool bEnable; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
  if ( v2 )
  {
    v3 = 0;
    bEnable = 0;
    if ( v1->m_pkRewardItem )
    {
      v4 = v1->m_pkRewardItem;
      v3 = v4->m_uiRewardID;
      bEnable = CollectRwItemWin::GetState(v4) == 1;
    }
    v5 = (CollectRwChoiceWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]);
    if ( v5 )
    {
      CollectRwChoiceWin::SetReward(v5, v3, bEnable);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004EE650) --------------------------------------------------------
void __thiscall CollectMainWin::OnSelectRewardArrow(CollectMainWin *this, CollectMainWin::eRewardArrowType eType)
{
  CollectMainWin *v2; // esi@1
  unsigned int v3; // eax@3
  unsigned int v4; // ecx@3
  unsigned int v5; // eax@6
  unsigned int v6; // eax@7
  int v7; // ST0C_4@10
  PgWin *v8; // eax@10

  v2 = this;
  if ( eType )
  {
    if ( eType == 1 )
    {
      v3 = this->m_uiRewardPage;
      v4 = this->m_uiLastRewardPage;
      if ( v3 < v4 )
        v4 = v3 + 1;
      v2->m_uiRewardPage = v4;
    }
  }
  else
  {
    v5 = this->m_uiRewardPage;
    if ( v5 )
      v6 = v5 - 1;
    else
      v6 = 0;
    this->m_uiRewardPage = v6;
  }
  v7 = v2->m_uiRewardGrade;
  v8 = PgWin::GetParentWin(&v2->baseclass_0.baseclass_0);
  PgWin::PostMsg(&v2->baseclass_0.baseclass_0, v8, 5u, 2u, v7);
}

//----- (004EE6B0) --------------------------------------------------------
void __thiscall CollectMainWin::Reset(CollectMainWin *this)
{
  CollectMainWin *v1; // edi@1
  unsigned int v2; // esi@1
  CardSlotWin *v3; // ecx@2

  v1 = this;
  v2 = 0;
  do
  {
    v3 = *(CardSlotWin **)(v2 + *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 )
      CardSlotWin::Reset(v3);
    v2 += 4;
  }
  while ( v2 < 0x10 );
}

//----- (004EE6E0) --------------------------------------------------------
void __thiscall CollectMainWin::SetReward(CollectMainWin *this, unsigned int uiRewardID, unsigned int uiCount, unsigned int uiPrevCount, unsigned int uiRegistCount, bool bCompleted)
{
  CollectMainWin *v6; // esi@1
  CollectRwItemWin *v7; // ecx@1
  char *v8; // eax@5
  char *v9; // eax@8

  v6 = this;
  v7 = this->m_pkRewardItem;
  if ( v7 )
  {
    if ( uiRewardID )
    {
      if ( bCompleted )
      {
        CollectRwItemWin::SetState(v7, RST_COMPLETE);
        v8 = TextData2::Get(0x14398459u);
      }
      else
      {
        CollectRwItemWin::SetState(v7, (CollectRwItemWin::eRewardStateType)(uiRegistCount >= uiCount));
        if ( uiRegistCount < uiCount )
        {
          v9 = TextData2::Get(0x1FAC8854u);
          v8 = fs(v9);
        }
        else
        {
          v8 = TextData2::Get(0x80AA90B8u);
        }
      }
      PgWin::SetToolTipWinText(&v6->m_pkRewardItem->baseclass_0.baseclass_0.baseclass_0, v8);
      ((void (__stdcall *)(_DWORD))v6->m_pkRewardItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v6->m_pkRewardItem->m_uiRewardID = uiRewardID;
      v6->m_fRewardMaxVal = (double)uiCount;
      v6->m_fPrevRewardMaxVal = (double)uiPrevCount;
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
  }
}

//----- (004EE7D0) --------------------------------------------------------
void __thiscall CollectMainWin::SetRewardGrade(CollectMainWin *this, unsigned int uiRewardGrade)
{
  CollectMainWin *v2; // esi@1
  unsigned int v3; // eax@3

  v2 = this;
  if ( this->m_uiRewardGrade != uiRewardGrade )
    this->m_uiRewardPage = 0;
  v3 = CollectCardRewardTab::GetCountByRewardGrade(uiRewardGrade);
  v2->m_uiRewardGrade = uiRewardGrade;
  v2->m_uiLastRewardPage = v3 - 1;
}

//----- (004EE810) --------------------------------------------------------
bool __thiscall CollectCardListWin::Create(CollectCardListWin *this, NiNode *pkNode, PgWin *pkParent, bool bPeeping)
{
  CollectCardListWin *v4; // esi@1
  NiNode *v5; // edi@1
  PgSprData *v6; // eax@4
  NiNode *v8; // ebx@8
  PgSprData *v9; // eax@8
  PgSprData *v10; // eax@8
  int v11; // ST58_4@9
  char *v12; // eax@9
  PgSprData *v13; // eax@9
  int v14; // ST5C_4@9
  PgSprData *v15; // eax@12
  PgWinSpr *v16; // eax@12
  PgSprData::PgHitTester *v17; // eax@12
  unsigned int v18; // ST58_4@12
  unsigned int v19; // ST5C_4@12
  PgFont *v20; // eax@12
  int v21; // ST58_4@12
  int v22; // ST5C_4@12
  char *v23; // eax@12
  PgSprData::PgHitTester *v24; // eax@12
  unsigned int v25; // ST58_4@12
  unsigned int v26; // ST5C_4@12
  PgFont *v27; // eax@12
  PgSprData::PgHitTester *v28; // eax@13
  unsigned int v29; // ecx@13
  unsigned int v30; // edx@13
  int v31; // eax@13
  unsigned int v32; // ST58_4@13
  int v33; // ST5C_4@13
  PgFont *v34; // eax@13
  int v35; // ST58_4@13
  char *v36; // eax@13
  PgSprData::PgHitTester *v37; // eax@13
  unsigned int v38; // ecx@13
  unsigned int v39; // edx@13
  int v40; // eax@13
  unsigned int v41; // ST58_4@13
  int v42; // ST5C_4@13
  PgFont *v43; // eax@13
  CollectRwItemWin *v44; // eax@13
  char *v45; // eax@14
  int v46; // eax@15
  unsigned int v47; // ecx@15
  char *v48; // eax@15
  NiSourceTexture *v49; // eax@16
  PopupMenuWin *v50; // eax@16
  char *v51; // eax@16
  PopupMenu *v52; // ebx@16
  char *v53; // eax@16
  PopupMenu *v54; // ebx@16
  int iXPos; // [sp+4h] [bp-28h]@11
  int iYPos; // [sp+8h] [bp-24h]@11
  int iYPosa; // [sp+8h] [bp-24h]@14
  unsigned int uiHeight; // [sp+Ch] [bp-20h]@4
  char *pkSprData; // [sp+10h] [bp-1Ch]@9
  unsigned int uiWidth; // [sp+14h] [bp-18h]@4
  unsigned int i; // [sp+18h] [bp-14h]@8
  int iTop; // [sp+1Ch] [bp-10h]@4
  int v63; // [sp+28h] [bp-4h]@3

  v4 = this;
  v5 = pkNode;
  if ( pkNode )
    InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v63 = 0;
  if ( !v5 )
    return 0;
  uiWidth = 0;
  uiHeight = 0;
  pkNode = 0;
  iTop = 0;
  v6 = PgSprData::Create(&v5->baseclass_0, "Panel04", (int *)&pkNode, &iTop, 0);
  if ( !PgWinSpr::Create(&v4->baseclass_0, (int)pkNode, iTop, v6, pkParent, 0, 0) )
    goto LABEL_5;
  v8 = pkNode;
  pkParent = (PgWin *)iTop;
  v9 = PgSprData::Create(&v5->baseclass_0, "Panel05", (int *)&pkNode, &iTop, 0);
  PgWinSpr::CreateWin((char *)pkNode - (char *)v8, iTop - (_DWORD)pkParent, v9, &v4->baseclass_0.baseclass_0, 0, 0);
  v10 = PgSprData::Create(&v5->baseclass_0, "Panel06", (int *)&pkNode, &iTop, 0);
  PgWinSpr::CreateWin((char *)pkNode - (char *)v8, iTop - (_DWORD)pkParent, v10, &v4->baseclass_0.baseclass_0, 0, 0);
  i = 0;
  do
  {
    v11 = i + 1;
    v12 = fs("Card%02d");
    v13 = PgSprData::Create(&v5->baseclass_0, v12, (int *)&pkNode, &iTop, 0);
    PgWinSpr::CreateWin((char *)pkNode - (char *)v8, iTop - (_DWORD)pkParent, v13, &v4->baseclass_0.baseclass_0, 0, 0);
    v14 = 4 * i + *(_DWORD *)&v4->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0];
    pkSprData = (char *)(4 * i);
    *(_DWORD *)v14 = CardSlotWin::CreateWin(
                       (char *)pkNode - (char *)v8,
                       iTop - (_DWORD)pkParent,
                       &v4->baseclass_0.baseclass_0,
                       i,
                       2u,
                       5u);
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)&pkSprData[*(_DWORD *)&v4->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]]
                                        + 520))(i);
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)&pkSprData[*(_DWORD *)&v4->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]]
                                        + 564))(i);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)&pkSprData[*(_DWORD *)&v4->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]]
                                  + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)&pkSprData[*(_DWORD *)&v4->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]]
                                  + 256))(0);
    i = v11;
  }
  while ( (unsigned int)v11 < 0xC );
  if ( !PgUtil::GetTriShapeRect(&v5->baseclass_0, "FirstPageNor", (int *)&pkNode, &iTop, &uiWidth, &uiHeight)
    || (iXPos = (int)pkNode,
        iYPos = iTop,
        !PgUtil::GetTriShapeRect(&v5->baseclass_0, "LastPageNor", (int *)&pkNode, &iTop, &uiWidth, &uiHeight)) )
  {
LABEL_5:
    v63 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    return 0;
  }
  uiWidth += (unsigned int)((char *)pkNode - iXPos);
  v4->m_pkPageWin = CollectPageWin::CreateWin(v5, iXPos, iYPos, uiWidth, uiHeight, &v4->baseclass_0.baseclass_0);
  v15 = PgSprData::Create(&v5->baseclass_0, "Panel08", (int *)&pkNode, &iTop, 0);
  v16 = PgWinSpr::CreateWin(
          (char *)pkNode - (char *)v8,
          iTop - (_DWORD)pkParent,
          v15,
          &v4->baseclass_0.baseclass_0,
          0,
          0);
  v4->m_pkRewardPanel = v16;
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  ((void (__stdcall *)(_DWORD))v4->m_pkRewardPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v17 = PgSprData::Create(&v5->baseclass_0, "Text05", (int *)&pkNode, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v18 = v17->m_uiHeight;
  v19 = v17->m_uiWidth;
  pkSprData = (char *)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4);
  v20 = Font::Get(0);
  *(_DWORD *)pkSprData = PgWinText::CreateWin(
                           (char *)pkNode - (char *)v8,
                           iTop - (_DWORD)pkParent,
                           v19,
                           v18,
                           v20,
                           &v4->baseclass_0.baseclass_0,
                           0,
                           0);
  (*(void (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 4)
                                    + 488))(5);
  v21 = *(_DWORD *)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4);
  v22 = *(_DWORD *)v21 + 472;
  v23 = TextData2::Get(0xFC3B2029u);
  (*(void (__thiscall **)(int, char *))v22)(v21, v23);
  (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4)
                                + 256))(0);
  v24 = PgSprData::Create(&v5->baseclass_0, "Text07", (int *)&pkNode, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v25 = v24->m_uiHeight;
  v26 = v24->m_uiWidth;
  pkSprData = (char *)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 12);
  v27 = Font::Get(0);
  *(_DWORD *)pkSprData = PgWinText::CreateWin(
                           (char *)pkNode - (char *)v8,
                           iTop - (_DWORD)pkParent,
                           v26,
                           v25,
                           v27,
                           &v4->baseclass_0.baseclass_0,
                           0,
                           0);
  (*(void (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 12)
                                    + 488))(4);
  (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 12)
                                    + 472))(&unk_992316);
  (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                              + 12)
                                + 256))(0);
  if ( !bPeeping )
  {
    v28 = PgSprData::Create(&v5->baseclass_0, "Text04", (int *)&pkNode, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v29 = v28->m_uiHeight;
    v30 = v28->m_uiWidth;
    v31 = *(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0];
    *(_DWORD *)&bPeeping = v29;
    v32 = v30;
    v33 = v31;
    v34 = Font::Get(0);
    *(_DWORD *)v33 = PgWinText::CreateWin(
                       (char *)pkNode - (char *)v8,
                       iTop - (_DWORD)pkParent,
                       v32,
                       bPeeping,
                       v34,
                       &v4->baseclass_0.baseclass_0,
                       0,
                       0);
    (*(void (__stdcall **)(signed int))(***(_DWORD ***)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 488))(5);
    *(_DWORD *)&bPeeping = **(_DWORD **)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0];
    v35 = *(_DWORD *)bPeeping + 472;
    v36 = TextData2::Get(0xAFC80C0Eu);
    (*(void (__thiscall **)(_DWORD, char *))v35)(bPeeping, v36);
    (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 256))(0);
    v37 = PgSprData::Create(&v5->baseclass_0, "Text06", (int *)&pkNode, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v38 = v37->m_uiHeight;
    v39 = v37->m_uiWidth;
    v40 = *(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0];
    *(_DWORD *)&bPeeping = v38;
    v41 = v39;
    v42 = v40 + 8;
    v43 = Font::Get(0);
    *(_DWORD *)v42 = PgWinText::CreateWin(
                       (char *)pkNode - (char *)v8,
                       iTop - (_DWORD)pkParent,
                       v41,
                       bPeeping,
                       v43,
                       &v4->baseclass_0.baseclass_0,
                       0,
                       0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                    + 8)
                                      + 488))(4);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                    + 8)
                                      + 472))(&unk_992317);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                + 8)
                                  + 256))(0);
    v44 = CollectRwItemWin::CreateWin(
            v5,
            "Reward02Able01",
            "Reward02Disable01",
            "Reward02Effect01",
            &v4->baseclass_0.baseclass_0,
            3);
    v4->m_pkRewardItem = v44;
    v44->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    PgWin::SetToolTipWinText(&v4->m_pkRewardItem->baseclass_0.baseclass_0.baseclass_0, &byte_99231E);
    ((void (__stdcall *)(_DWORD))v4->m_pkRewardItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    pkSprData = (char *)PgSprData::Create(&v5->baseclass_0, "CardBtnNor", (int *)&pkNode, &iTop, 0);
    PgSprData::Add((PgSprData *)pkSprData, &v5->baseclass_0, "CardBtnClick");
    PgSprData::Add((PgSprData *)pkSprData, &v5->baseclass_0, "CardBtnOver");
    *(_DWORD *)&bPeeping = 0;
    while ( 1 )
    {
      iYPosa = bPeeping + 1;
      v45 = fs("CardBtn%02d");
      if ( !PgUtil::GetTriShapeRect(&v5->baseclass_0, v45, (int *)&pkNode, &iTop, &uiWidth, &uiHeight) )
        goto LABEL_5;
      v46 = *(_DWORD *)&v4->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0];
      i = 4 * bPeeping;
      *(_DWORD *)(4 * bPeeping + v46) = PgWinBut::CreateWin(
                                          (char *)pkNode - (char *)v8,
                                          iTop - (_DWORD)pkParent,
                                          (PgSprData *)pkSprData,
                                          &v4->baseclass_0.baseclass_0,
                                          4u,
                                          0,
                                          0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(i
                                                  + *(_DWORD *)&v4->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0])
                                    + 520))(bPeeping);
      v47 = i;
      *(_DWORD *)(*(_DWORD *)(i + *(_DWORD *)&v4->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0]) + 272) = g_pkToolTipWin;
      *(_DWORD *)&bPeeping = v47 + *(_DWORD *)&v4->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0];
      v48 = TextData2::Get(0xF9331D62u);
      PgWin::SetToolTipWinText(*(PgWin **)bPeeping, v48);
      *(_DWORD *)&bPeeping = iYPosa;
      if ( (unsigned int)iYPosa >= 0xC )
      {
        v49 = MenuTexMgr::GetTexture(1u);
        v50 = PopupMenuWin::CreateWin(v49, 4u, 4u, 0);
        v4->m_pkPopupCardMenu = v50;
        ((void (__stdcall *)(IDirectMessenger *))v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v4->baseclass_0.baseclass_0.baseclass_e8);
        PopupMenuWin::Clear(v4->m_pkPopupCardMenu);
        v51 = TextData2::Get(0x94ACCDC3u);
        v52 = (PopupMenu *)PopupMenuText::CreateWin(v51, 0, 0, 0, 0, 0, 0);
        PopupMenu::SetClickEvent(v52, 77, 0);
        PopupMenuWin::AddMenu(v4->m_pkPopupCardMenu, v52);
        v53 = TextData2::Get(0xA0C6C4D8u);
        v54 = (PopupMenu *)PopupMenuText::CreateWin(v53, 0, 0, 0, 0, 0, 0);
        PopupMenu::SetClickEvent(v54, 78, 0);
        PopupMenuWin::AddMenu(v4->m_pkPopupCardMenu, v54);
        PopupMenuWin::FinishMenu(v4->m_pkPopupCardMenu, 0);
        v4->m_pkPopupCardMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v4->m_pkPopupCardMenu,
          0);
        break;
      }
    }
  }
  v63 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  return 1;
}

//----- (004EF040) --------------------------------------------------------
void __thiscall CollectCardListWin::OnSelectRewardItem(CollectCardListWin *this)
{
  CollectCardListWin *v1; // esi@1
  PgWin *v2; // ebx@1
  unsigned int v3; // edi@2
  CollectRwItemWin *v4; // ecx@3
  CollectRwChoiceWin *v5; // esi@4
  bool bEnable; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
  if ( v2 )
  {
    v3 = 0;
    bEnable = 0;
    if ( v1->m_pkRewardItem )
    {
      v4 = v1->m_pkRewardItem;
      v3 = v4->m_uiRewardID;
      bEnable = CollectRwItemWin::GetState(v4) == 1;
    }
    v5 = (CollectRwChoiceWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]);
    if ( v5 )
    {
      CollectRwChoiceWin::SetReward(v5, v3, bEnable);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (004EF0B0) --------------------------------------------------------
void __thiscall CollectCardListWin::SetType(CollectCardListWin *this, CollectCardListWin::eCardListType eType, unsigned int uiGrade)
{
  CollectCardListWin *v3; // esi@1
  unsigned int v4; // eax@3
  CollectPageWin *v5; // eax@4
  PgWinSpr *v6; // ecx@6

  v3 = this;
  this->m_eCardListType = eType;
  if ( eType )
  {
    if ( eType == 1 )
    {
      v4 = CollectCardTab::GetCountByGrade(uiGrade);
      CollectCardListWin::SetPage(v3, 0, (v4 - 1) / 0xC, 1u, uiGrade);
    }
  }
  else
  {
    CollectCardListWin::ResetReward(this);
    v5 = v3->m_pkPageWin;
    if ( v5 )
    {
      v5->m_uiPage = 0;
      v3->m_pkPageWin->m_uiLastPage = 4;
      v3->m_pkPageWin->m_uiUpdateMsg = 0;
      v3->m_pkPageWin->m_uiUpdateMsgParam = 0;
      CollectPageWin::Update(v3->m_pkPageWin);
    }
  }
  v6 = v3->m_pkRewardPanel;
  if ( v6 )
    ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3->m_eCardListType == 1);
}

//----- (004EF170) --------------------------------------------------------
void __thiscall CollectWin::UpdateBookmark(CollectWin *this)
{
  CollectWin *v1; // esi@1
  CollectCardListWin *v2; // eax@1
  CollectPageWin *v3; // eax@2
  unsigned int v4; // eax@3
  signed int v5; // ecx@5
  unsigned int v6; // ebx@5
  int v7; // eax@5
  int v8; // edi@8
  unsigned int v9; // ecx@8
  int v10; // edx@9
  CollectCardListWin *v11; // edi@13
  CardSlotWin *v12; // ecx@13
  int v13; // ecx@15
  int v14; // eax@19
  signed int uiSize; // [sp+4h] [bp-Ch]@5
  int v16; // [sp+8h] [bp-8h]@5
  unsigned int i; // [sp+Ch] [bp-4h]@5
  CardSlotWin *ia; // [sp+Ch] [bp-4h]@13

  v1 = this;
  v2 = this->m_pkCardListWin;
  if ( v2 )
  {
    v3 = v2->m_pkPageWin;
    if ( v3 )
      v4 = v3->m_uiPage;
    else
      v4 = 0;
    v5 = (signed int)((char *)this->m_kBookmarkInfos.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    v6 = 0;
    v7 = 12 * v4;
    uiSize = v5;
    i = 0;
    v16 = v7;
    while ( 1 )
    {
      if ( v7 < (unsigned int)v5 )
      {
        v8 = *(_DWORD *)&v1->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
        v9 = 0;
        if ( (signed int)((char *)v1->m_kCardInfos.baseclass_0._Mylast - v8) / 20 )
        {
          v10 = v8 + 4;
          while ( *(_DWORD *)v10 != *(_DWORD *)(*(_DWORD *)&v1->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0]
                                              + 4 * v16) )
          {
            ++v9;
            v10 += 20;
            if ( v9 >= (signed int)((char *)v1->m_kCardInfos.baseclass_0._Mylast - v8) / 20 )
              goto LABEL_12;
          }
          v14 = v8 + 20 * v9;
          if ( !v14 || *(_DWORD *)(v14 + 16) <= 0 )
          {
LABEL_12:
            v6 = i;
            goto LABEL_13;
          }
          v6 = i;
          CollectCardListWin::SetCard(
            v1->m_pkCardListWin,
            i,
            *(_DWORD *)(*(_DWORD *)&v1->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v16),
            *(_DWORD *)(v14 + 8),
            *(_DWORD *)(v14 + 12),
            *(_DWORD *)(v14 + 16));
        }
        else
        {
LABEL_13:
          v11 = v1->m_pkCardListWin;
          v12 = *(CardSlotWin **)(*(_DWORD *)&v11->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v6);
          ia = v12;
          if ( v12 )
          {
            ((void (__stdcall *)(_DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            CardSlotWin::SetInfo(ia, 0, 0, 0, 0);
          }
          v13 = *(_DWORD *)(*(_DWORD *)&v11->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v6);
          if ( v13 )
            (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v13 + 256))(v11->m_eCardListType == 0);
        }
      }
      ++v6;
      v7 = v16 + 1;
      i = v6;
      ++v16;
      if ( v6 >= 0xC )
        break;
      v5 = uiSize;
    }
  }
}

//----- (004EF2B0) --------------------------------------------------------
void __thiscall CollectMainWin::OnCommand(CollectMainWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgWin *v4; // eax@6

  v3 = (PgWin *)this;
  switch ( wParam )
  {
    case 0u:
      CollectMainWin::OnSelectCard(this, lParam);
      break;
    case 1u:
      CollectMainWin::OnSelectRewardItem(this);
      break;
    case 2u:
      CollectMainWin::OnSelectRewardArrow(this, (CollectMainWin::eRewardArrowType)lParam);
      break;
    case 3u:
      if ( (unsigned int)lParam < 5 )
      {
        v4 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
        PgWin::PostMsg(v3, v4, 5u, 2u, lParam);
      }
      break;
    default:
      return;
  }
}

//----- (004EF320) --------------------------------------------------------
void __thiscall CollectMainWin::InitBar(CollectMainWin *this)
{
  double v1; // st7@1
  unsigned int v2; // ebx@1
  int v3; // eax@2
  unsigned int v4; // esi@2
  unsigned int v5; // edi@3
  void *v6; // eax@6
  double v7; // st6@11
  int v8; // ecx@12
  int v9; // ecx@14
  unsigned int v10; // esi@16
  int v11; // ecx@17
  CollectMainWin *v12; // [sp+4h] [bp-20h]@1
  float fMaxAll; // [sp+8h] [bp-1Ch]@1
  float v14; // [sp+Ch] [bp-18h]@2
  float fMaxVal[4]; // [sp+10h] [bp-14h]@1
  unsigned int v16; // [sp+20h] [bp-4h]@1
  int v17; // [sp+24h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v1 = 0.0;
  fMaxVal[0] = 0.0;
  fMaxVal[1] = 0.0;
  fMaxVal[2] = 0.0;
  v12 = this;
  fMaxVal[3] = 0.0;
  v2 = 0;
  fMaxAll = 0.0;
  do
  {
    v3 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
    v4 = 0;
    v14 = 0.0;
    if ( v3 )
      v5 = *(_DWORD *)(v3 + 40);
    else
      v5 = 0;
    if ( v5 > 0 )
    {
      do
      {
        v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v4);
        if ( v6 && *(_DWORD *)((char *)v6 + 34) == v2 )
          ++LODWORD(v14);
        ++v4;
      }
      while ( v4 < v5 );
      v1 = 0.0;
    }
    v14 = (double)LODWORD(v14);
    ++v2;
    v7 = v14;
    *(&v14 + v2) = v14;
    fMaxAll = v7 + fMaxAll;
  }
  while ( v2 < 4 );
  v8 = **(_DWORD **)&v12->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v8 )
  {
    *(float *)(v8 + 300) = v1;
    *(float *)(v8 + 304) = fMaxAll;
    PgWinBar::OnChangeValue((PgWinBar *)v8);
    v1 = 0.0;
  }
  v9 = *(_DWORD *)(*(_DWORD *)&v12->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 20);
  if ( v9 )
  {
    *(float *)(v9 + 300) = v1;
    *(float *)(v9 + 304) = fMaxAll;
    PgWinBar::OnChangeValue((PgWinBar *)v9);
    v1 = 0.0;
  }
  v10 = 0;
  do
  {
    v11 = *(_DWORD *)(*(_DWORD *)&v12->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + v10 * 4 + 4);
    if ( v11 )
    {
      *(float *)(v11 + 300) = v1;
      *(float *)(v11 + 304) = fMaxVal[v10];
      PgWinBar::OnChangeValue((PgWinBar *)v11);
      v1 = 0.0;
    }
    ++v10;
  }
  while ( v10 < 4 );
}
// A85C00: using guessed type int __security_cookie;
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004EF440) --------------------------------------------------------
void __thiscall CollectMainWin::SetBar(CollectMainWin *this, unsigned int uiGrade, float fValue)
{
  int v3; // ecx@1

  v3 = *(_DWORD *)(*(_DWORD *)&this->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiGrade + 4);
  if ( v3 )
  {
    if ( fValue != *(float *)(v3 + 300) )
    {
      *(float *)(v3 + 300) = fValue;
      PgWinBar::OnChangeValue((PgWinBar *)v3);
    }
  }
}

//----- (004EF480) --------------------------------------------------------
void __thiscall CollectMainWin::UpdateBar(CollectMainWin *this)
{
  CollectMainWin *v1; // edi@1
  signed int v2; // ecx@1
  int v3; // eax@2
  int v4; // ebx@2
  int v5; // esi@4
  char *v6; // eax@4
  PgWinBar **v7; // ecx@6
  PgWinBar *v8; // esi@6
  int v9; // ebx@6
  PgWinBar *v10; // ecx@9
  int v11; // esi@10
  char *v12; // eax@10
  int v13; // edx@11
  int v14; // ecx@11
  double v15; // st7@12
  bool v16; // c0@12
  bool v17; // c3@12
  double v18; // st7@12
  int v19; // ecx@15
  int v20; // ebx@15
  int v21; // esi@20
  char *v22; // eax@20
  signed int v23; // [sp+8h] [bp-10h]@1
  float fMaxVal; // [sp+Ch] [bp-Ch]@1
  float fAllVal; // [sp+10h] [bp-8h]@1
  float fCurVal; // [sp+14h] [bp-4h]@1

  fCurVal = 0.0;
  fMaxVal = 0.0;
  v1 = this;
  fAllVal = 0.0;
  v2 = 4;
  v23 = 4;
  do
  {
    v3 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0]);
    v4 = *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( v3 && v4 )
    {
      v5 = *(_DWORD *)v4;
      fCurVal = *(float *)(v3 + 300);
      fMaxVal = *(float *)(v3 + 304);
      fAllVal = fAllVal + fCurVal;
      v6 = fs("%d/%d");
      (*(void (__thiscall **)(int, char *))(v5 + 472))(v4, v6);
      v2 = v23;
    }
    v2 += 4;
    v23 = v2;
  }
  while ( (unsigned int)v2 < 0x14 );
  v7 = *(PgWinBar ***)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *v7;
  v9 = **(_DWORD **)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( *v7 && v9 )
  {
    if ( fAllVal != v8->m_fCurValue )
    {
      v10 = *v7;
      v8->m_fCurValue = fAllVal;
      PgWinBar::OnChangeValue(v10);
    }
    v11 = *(_DWORD *)v9;
    v12 = fs("%d/%d");
    (*(void (__thiscall **)(int, char *))(v11 + 472))(v9, v12);
  }
  v13 = *(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0];
  v14 = *(_DWORD *)(v13 + 4 * v1->m_uiRewardGrade);
  if ( v14 )
  {
    fMaxVal = v1->m_fRewardMaxVal - v1->m_fPrevRewardMaxVal;
    v15 = *(float *)(v14 + 300) - v1->m_fPrevRewardMaxVal;
    v16 = 0.0 < v15;
    v17 = 0.0 == v15;
    v18 = 0.0;
    if ( v16 | v17 )
      v18 = *(float *)(v14 + 300) - v1->m_fPrevRewardMaxVal;
    fCurVal = v18;
  }
  v19 = *(_DWORD *)(v13 + 20);
  v20 = *(_DWORD *)(*(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 20);
  if ( v19 && v20 )
  {
    if ( fMaxVal != *(float *)(v19 + 304) || fCurVal != *(float *)(v19 + 300) )
    {
      *(float *)(v19 + 304) = fMaxVal;
      *(float *)(v19 + 300) = fCurVal;
      PgWinBar::OnChangeValue((PgWinBar *)v19);
    }
    v21 = *(_DWORD *)v20;
    v22 = fs("%d");
    (*(void (__thiscall **)(int, char *))(v21 + 472))(v20, v22);
  }
}

//----- (004EF650) --------------------------------------------------------
void __thiscall CollectMainWin::_CollectMainWin(CollectMainWin *this)
{
  CollectMainWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectMainWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectMainWin::_vftable_;
  if ( *(_DWORD *)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardSlots.baseclass_0._Mylast = 0;
  v1->m_kCardSlots.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCheckGrades.baseclass_0._Mylast = 0;
  v1->m_kCheckGrades.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBarTexts.baseclass_0._Mylast = 0;
  v1->m_kBarTexts.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBars.baseclass_0._Mylast = 0;
  v1->m_kBars.baseclass_0._Myend = 0;
  PgWinSpr::_PgWinSpr(&v1->baseclass_0);
}
// 9925E0: using guessed type int (__stdcall *CollectMainWin___vftable_)(int uiFlags);
// 9925FC: using guessed type int (__thiscall *CollectMainWin___vftable_)(void *p, char);

//----- (004EF710) --------------------------------------------------------
void __thiscall CollectCardListWin::_CollectCardListWin(CollectCardListWin *this)
{
  CollectCardListWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectCardListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectCardListWin::_vftable_;
  if ( *(_DWORD *)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardSlots.baseclass_0._Mylast = 0;
  v1->m_kCardSlots.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBookmarkBtns.baseclass_0._Mylast = 0;
  v1->m_kBookmarkBtns.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRewardTexts.baseclass_0._Mylast = 0;
  v1->m_kRewardTexts.baseclass_0._Myend = 0;
  PgWinSpr::_PgWinSpr(&v1->baseclass_0);
}
// 992808: using guessed type int (__stdcall *CollectCardListWin___vftable_)(int uiFlags);
// 992824: using guessed type int (__thiscall *CollectCardListWin___vftable_)(void *p, char);

//----- (004EF7A0) --------------------------------------------------------
void __thiscall CollectMainWin::CollectMainWin(CollectMainWin *this)
{
  CollectMainWin *v1; // ebx@1
  int v2; // edx@1
  char *v3; // ecx@1
  int v4; // edi@1
  int v5; // eax@1
  char *v6; // edi@2
  int v7; // ecx@7
  unsigned int v8; // ecx@9
  int v9; // eax@14
  char *v10; // ecx@17
  int v11; // edi@17
  int v12; // eax@17
  char *v13; // edi@18
  int v14; // ecx@23
  unsigned int v15; // ecx@25
  int v16; // eax@30
  int v17; // [sp+Ch] [bp-10h]@21
  int v18; // [sp+Ch] [bp-10h]@23

  v1 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectMainWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectMainWin::_vftable_;
  *(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBars.baseclass_0._Mylast = 0;
  v1->m_kBars.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBarTexts.baseclass_0._Mylast = 0;
  v1->m_kBarTexts.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCheckGrades.baseclass_0._Mylast = 0;
  v1->m_kCheckGrades.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardSlots.baseclass_0._Mylast = 0;
  v1->m_kCardSlots.baseclass_0._Myend = 0;
  v1->m_fRewardMaxVal = 0.0;
  v1->m_pkRewardItem = 0;
  v1->m_pkSelectGradeText = 0;
  v1->m_uiRewardGrade = 0;
  v1->m_uiRewardPage = 0;
  v1->m_uiLastRewardPage = 0;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kBars,
    6u);
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kBarTexts,
    6u);
  v2 = 0;
  **(_DWORD **)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  **(_DWORD **)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 20) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 20) = 0;
  v3 = (char *)v1->m_kCheckGrades.baseclass_0._Mylast;
  v4 = *(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (signed int)((char *)v1->m_kCheckGrades.baseclass_0._Mylast - v4) >> 2;
  if ( (unsigned int)v5 <= 6 )
  {
    if ( (unsigned int)v5 < 6 )
    {
      if ( 1073741823 - (6 - v5) < (unsigned int)v5 )
        std::_Xlength_error("vector<T> too long");
      v7 = (signed int)((char *)v1->m_kCheckGrades.baseclass_0._Myend - v4) >> 2;
      if ( (unsigned int)v7 < 6 )
      {
        if ( 1073741823 - ((unsigned int)v7 >> 1) >= v7 )
          v8 = ((unsigned int)v7 >> 1) + v7;
        else
          v8 = 0;
        if ( v8 < 6 )
          v8 = 6;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_kCheckGrades,
          v8);
        v2 = 0;
      }
      v9 = (signed int)((char *)v1->m_kCheckGrades.baseclass_0._Mylast
                      - *(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 6 != v9 )
        memset(v1->m_kCheckGrades.baseclass_0._Mylast, 0, 4 * (6 - v9));
      v1->m_kCheckGrades.baseclass_0._Mylast += 6
                                              - ((signed int)((char *)v1->m_kCheckGrades.baseclass_0._Mylast
                                                            - *(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    }
  }
  else
  {
    v6 = (char *)(v4 + 24);
    if ( v6 != v3 )
    {
      memmove(v6, v3, 0);
      v1->m_kCheckGrades.baseclass_0._Mylast = (ColumnBut **)v6;
      v2 = 0;
    }
  }
  **(_DWORD **)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 16) = v2;
  v10 = (char *)v1->m_kCardSlots.baseclass_0._Mylast;
  v11 = *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = (signed int)((char *)v1->m_kCardSlots.baseclass_0._Mylast - v11) >> 2;
  if ( (unsigned int)v12 <= 4 )
  {
    if ( (unsigned int)v12 < 4 )
    {
      v17 = (signed int)((char *)v1->m_kCardSlots.baseclass_0._Mylast - v11) >> 2;
      if ( 1073741823 - (4 - v12) < (unsigned int)v17 )
        std::_Xlength_error("vector<T> too long");
      v14 = (signed int)((char *)v1->m_kCardSlots.baseclass_0._Myend - v11) >> 2;
      v18 = 4 - v12 + v17;
      if ( v18 > (unsigned int)v14 )
      {
        if ( 1073741823 - ((unsigned int)v14 >> 1) >= v14 )
          v15 = ((unsigned int)v14 >> 1) + v14;
        else
          v15 = 0;
        if ( v15 < v18 )
          v15 = v18;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_kCardSlots,
          v15);
        v2 = 0;
      }
      v16 = (signed int)((char *)v1->m_kCardSlots.baseclass_0._Mylast
                       - *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 4 != v16 )
        memset(v1->m_kCardSlots.baseclass_0._Mylast, 0, 4 * (4 - v16));
      v1->m_kCardSlots.baseclass_0._Mylast += 4
                                            - ((signed int)((char *)v1->m_kCardSlots.baseclass_0._Mylast
                                                          - *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    }
  }
  else
  {
    v13 = (char *)(v11 + 16);
    if ( v13 != v10 )
    {
      memmove(v13, v10, 0);
      v1->m_kCardSlots.baseclass_0._Mylast = (CardSlotWin **)v13;
      v2 = 0;
    }
  }
  **(_DWORD **)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = v2;
}
// 9925E0: using guessed type int (__stdcall *CollectMainWin___vftable_)(int uiFlags);
// 9925FC: using guessed type int (__thiscall *CollectMainWin___vftable_)(void *p, char);

//----- (004EFB30) --------------------------------------------------------
CollectMainWin *__cdecl CollectMainWin::CreateWin(NiNode *pkNode, PgWin *pkParent, bool bPeeping)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  CollectMainWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x184u);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    CollectMainWin::CollectMainWin((CollectMainWin *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiNode *, PgWin *, _DWORD))(*(_DWORD *)v5 + 516))(
                          v5,
                          pkNode,
                          pkParent,
                          bPeeping) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (CollectMainWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (004EFC70) --------------------------------------------------------
void __thiscall CollectCardListWin::CollectCardListWin(CollectCardListWin *this)
{
  CollectCardListWin *v1; // edi@1
  int v2; // ebx@1
  char *v3; // ecx@1
  int v4; // edx@1
  int v5; // eax@1
  int v6; // esi@2
  int v7; // eax@3
  int v8; // ecx@7
  unsigned int v9; // ecx@9
  int v10; // eax@14
  unsigned int v11; // eax@18
  char *v12; // ecx@20
  int v13; // edx@20
  int v14; // esi@20
  int v15; // eax@20
  int v16; // ebx@21
  int v17; // ecx@26
  unsigned int v18; // ecx@28
  int v19; // eax@33
  unsigned int v20; // eax@36
  CollectCardListWin *v21; // [sp+4h] [bp-10h]@1

  v1 = this;
  v21 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectCardListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectCardListWin::_vftable_;
  v1->m_pkRewardItem = 0;
  v1->m_pkPageWin = 0;
  v1->m_pkPopupCardMenu = 0;
  v1->m_pkRewardPanel = 0;
  *(_DWORD *)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRewardTexts.baseclass_0._Mylast = 0;
  v1->m_kRewardTexts.baseclass_0._Myend = 0;
  v2 = (int)&v1->m_kBookmarkBtns;
  *(_DWORD *)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBookmarkBtns.baseclass_0._Mylast = 0;
  v1->m_kBookmarkBtns.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardSlots.baseclass_0._Mylast = 0;
  v1->m_kCardSlots.baseclass_0._Myend = 0;
  v1->m_uiSelectBookmarkSlot = 0;
  v1->m_eCardListType = 0;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kRewardTexts,
    4u);
  **(_DWORD **)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 8) = 0;
  *(_DWORD *)(*(_DWORD *)&v1->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 12) = 0;
  v3 = (char *)v1->m_kBookmarkBtns.baseclass_0._Mylast;
  v4 = *(_DWORD *)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (signed int)((char *)v1->m_kBookmarkBtns.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( (unsigned int)v5 <= 0xC )
  {
    if ( (unsigned int)v5 < 0xC )
    {
      if ( 1073741823 - (12 - v5) < (unsigned int)v5 )
        std::_Xlength_error("vector<T> too long");
      v8 = (signed int)((char *)v1->m_kBookmarkBtns.baseclass_0._Myend - v4) >> 2;
      if ( (unsigned int)v8 < 0xC )
      {
        if ( 1073741823 - ((unsigned int)v8 >> 1) >= v8 )
          v9 = ((unsigned int)v8 >> 1) + v8;
        else
          v9 = 0;
        if ( v9 < 0xC )
          v9 = 12;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_kBookmarkBtns,
          v9);
      }
      v10 = (signed int)((char *)v1->m_kBookmarkBtns.baseclass_0._Mylast
                       - *(_DWORD *)&v1->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 12 != v10 )
      {
        memset(v1->m_kBookmarkBtns.baseclass_0._Mylast, 0, 4 * (12 - v10));
        v1 = v21;
      }
      v7 = *(_DWORD *)(v2 + 4) + 4 * (12 - ((*(_DWORD *)(v2 + 4) - *(_DWORD *)v2) >> 2));
      goto LABEL_17;
    }
  }
  else
  {
    v6 = v4 + 48;
    if ( (char *)(v4 + 48) != v3 )
    {
      memmove((char *)(v4 + 48), v3, 0);
      v7 = v6;
LABEL_17:
      *(_DWORD *)(v2 + 4) = v7;
      goto LABEL_18;
    }
  }
LABEL_18:
  v11 = 0;
  do
  {
    *(_DWORD *)(v11 + *(_DWORD *)v2) = 0;
    v11 += 4;
  }
  while ( v11 < 0x30 );
  v12 = (char *)v1->m_kCardSlots.baseclass_0._Mylast;
  v13 = *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0];
  v14 = (int)&v1->m_kCardSlots;
  v15 = (signed int)((char *)v1->m_kCardSlots.baseclass_0._Mylast - v13) >> 2;
  if ( (unsigned int)v15 <= 0xC )
  {
    if ( (unsigned int)v15 < 0xC )
    {
      if ( 1073741823 - (12 - v15) < (unsigned int)v15 )
        std::_Xlength_error("vector<T> too long");
      v17 = (signed int)((char *)v1->m_kCardSlots.baseclass_0._Myend - v13) >> 2;
      if ( (unsigned int)v17 < 0xC )
      {
        if ( 1073741823 - ((unsigned int)v17 >> 1) >= v17 )
          v18 = ((unsigned int)v17 >> 1) + v17;
        else
          v18 = 0;
        if ( v18 < 0xC )
          v18 = 12;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_kCardSlots,
          v18);
      }
      v19 = (signed int)((char *)v1->m_kCardSlots.baseclass_0._Mylast
                       - *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( 12 != v19 )
      {
        memset(v1->m_kCardSlots.baseclass_0._Mylast, 0, 4 * (12 - v19));
        v1 = v21;
      }
      v14 = (int)&v1->m_kCardSlots;
      v1->m_kCardSlots.baseclass_0._Mylast += 12
                                            - ((signed int)((char *)v1->m_kCardSlots.baseclass_0._Mylast
                                                          - *(_DWORD *)&v1->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    }
  }
  else
  {
    v16 = v13 + 48;
    if ( (char *)(v13 + 48) != v12 )
    {
      memmove((char *)(v13 + 48), v12, 0);
      v1->m_kCardSlots.baseclass_0._Mylast = (CardSlotWin **)v16;
    }
  }
  v20 = 0;
  do
  {
    *(_DWORD *)(v20 + *(_DWORD *)v14) = 0;
    v20 += 4;
  }
  while ( v20 < 0x30 );
}
// 992808: using guessed type int (__stdcall *CollectCardListWin___vftable_)(int uiFlags);
// 992824: using guessed type int (__thiscall *CollectCardListWin___vftable_)(void *p, char);

//----- (004EFF30) --------------------------------------------------------
CollectCardListWin *__cdecl CollectCardListWin::CreateWin(NiNode *pkNode, PgWin *pkParent, bool bPeeping)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  CollectCardListWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x170u);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    CollectCardListWin::CollectCardListWin((CollectCardListWin *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiNode *, PgWin *, _DWORD))(*(_DWORD *)v5 + 516))(
                          v5,
                          pkNode,
                          pkParent,
                          bPeeping) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (CollectCardListWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (004F0070) --------------------------------------------------------
void __thiscall CollectWin::InitBookmarkInfo(CollectWin *this)
{
  char *v1; // esi@1
  unsigned int v2; // eax@1

  v1 = (char *)&this->m_kBookmarkInfos;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&this->m_kBookmarkInfos,
    0x3Cu);
  v2 = 0;
  do
  {
    *(_DWORD *)(v2 + *(_DWORD *)v1) = 0;
    v2 += 4;
  }
  while ( v2 < 0xF0 );
}

//----- (004F00A0) --------------------------------------------------------
bool __thiscall CollectMainWin::Create(CollectMainWin *this, NiNode *pkNode, PgWin *pkParent, bool bPeeping)
{
  unsigned int v4; // edi@1
  CollectMainWin *v5; // esi@1
  PgSprData *v6; // eax@4
  bool result; // al@7
  PgSprData *v8; // eax@8
  PgSprData *v9; // eax@9
  char *v10; // eax@11
  PgSprData *v11; // eax@11
  int v12; // ebx@11
  PgWin *v13; // ST20_4@11
  PgFont *v14; // ST1C_4@11
  unsigned int v15; // ST18_4@11
  unsigned int v16; // eax@11
  char *v17; // eax@12
  char *v18; // ecx@12
  char v19; // dl@13
  char *v20; // eax@14
  char *v21; // ecx@14
  char v22; // dl@15
  char *v23; // eax@16
  char *v24; // ecx@16
  char v25; // dl@17
  char *v26; // eax@18
  char *v27; // ecx@18
  char v28; // dl@19
  char *v29; // eax@20
  char *v30; // ecx@20
  char v31; // dl@21
  char *v32; // eax@22
  char *v33; // ecx@22
  char v34; // dl@23
  char *v35; // eax@24
  char *v36; // ecx@24
  char v37; // dl@25
  char *v38; // eax@26
  char *v39; // ecx@26
  char v40; // dl@27
  char *v41; // eax@28
  char *v42; // ecx@28
  char v43; // dl@29
  char *v44; // eax@30
  char *v45; // eax@31
  PgSprData *v46; // ST44_4@31
  char *v47; // eax@31
  int v48; // ebx@31
  int v49; // edi@31
  ColumnBut *v50; // eax@31
  int v51; // ecx@31
  char *v52; // eax@32
  PgWin *v53; // edi@34
  PgFont *v54; // ST1C_4@34
  unsigned int v55; // ST18_4@34
  unsigned int v56; // eax@34
  PgWinText *v57; // edi@34
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v58; // eax@35
  bool v59; // zf@37
  NiAVObject *v60; // ebx@38
  PgFont *v61; // eax@41
  PgWinText *v62; // edi@41
  char *v63; // eax@41
  PgFont *v64; // eax@42
  PgWinText *v65; // edi@42
  char *v66; // eax@42
  NiAVObject *v67; // edi@42
  char *v68; // eax@43
  unsigned int v69; // edi@46
  PgFont *v70; // eax@53
  PgWinText *v71; // edi@53
  char *v72; // eax@53
  PgSprData *v73; // eax@53
  PgWin *v74; // edi@53
  PgFont *v75; // ST1C_4@53
  unsigned int v76; // ST18_4@53
  unsigned int v77; // eax@53
  PgWinText *v78; // eax@53
  char *v79; // eax@53
  NiAVObject **v80; // eax@53
  int v81; // eax@53
  void *(__thiscall *v82)(NiRefObject *, unsigned int); // edx@53
  int v83; // eax@53
  int v84; // edi@53
  char *v85; // eax@54
  PgSprData *v86; // ST44_4@54
  char *v87; // eax@54
  char *v88; // eax@54
  PgWinBut *v89; // eax@54
  unsigned int v90; // [sp-10h] [bp-2D4h]@1
  int v91; // [sp+4h] [bp-2C0h]@30
  unsigned int uiHeight; // [sp+Ch] [bp-2B8h]@4
  unsigned int uiWidth; // [sp+10h] [bp-2B4h]@4
  int i; // [sp+14h] [bp-2B0h]@10
  int iOffY; // [sp+18h] [bp-2ACh]@8
  int iOffX; // [sp+1Ch] [bp-2A8h]@8
  NiAVObject *pkObject; // [sp+20h] [bp-2A4h]@1
  int iLeft; // [sp+24h] [bp-2A0h]@4
  int iTop; // [sp+28h] [bp-29Ch]@4
  char *v100; // [sp+2Ch] [bp-298h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > akRwBtnNodeName[2]; // [sp+30h] [bp-294h]@53
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > akGaugeNodeName[6]; // [sp+68h] [bp-25Ch]@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > akCheckToolTip[5]; // [sp+110h] [bp-1B4h]@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > akCheckString[5]; // [sp+19Ch] [bp-128h]@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > akCheckNodeName[5]; // [sp+228h] [bp-9Ch]@12
  unsigned int v106; // [sp+2B4h] [bp-10h]@1
  int v107; // [sp+2C0h] [bp-4h]@3
  int v108; // [sp+2C4h] [bp+0h]@1

  v106 = (unsigned int)&v108 ^ __security_cookie;
  v90 = (unsigned int)&v108 ^ __security_cookie;
  v4 = 0;
  v5 = this;
  pkObject = (NiAVObject *)pkNode;
  v100 = (char *)pkParent;
  if ( pkNode )
    InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v107 = 0;
  if ( !pkNode )
    return 0;
  uiWidth = 0;
  uiHeight = 0;
  iLeft = 0;
  iTop = 0;
  v6 = PgSprData::Create(&pkNode->baseclass_0, "Panel03", &iLeft, &iTop, 0);
  if ( !PgWinSpr::Create(&v5->baseclass_0, iLeft, iTop, v6, (PgWin *)v100, 0, 0) )
  {
    v107 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)pkNode, 1u);
    return 0;
  }
  iOffX = iLeft;
  iOffY = iTop;
  v8 = PgSprData::Create(&pkNode->baseclass_0, "Panel07", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v8, &v5->baseclass_0.baseclass_0, 0, 0);
  if ( !bPeeping )
  {
    v9 = PgSprData::Create(&pkNode->baseclass_0, "RwGaugeBar", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v9, &v5->baseclass_0.baseclass_0, 0, 0);
  }
  akGaugeNodeName[0].baseclass_0._Myres = 15;
  akGaugeNodeName[0].baseclass_0._Mysize = 0;
  akGaugeNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(akGaugeNodeName, "AllRank", 7u);
  LOBYTE(v107) = 1;
  akGaugeNodeName[1].baseclass_0._Myres = 15;
  akGaugeNodeName[1].baseclass_0._Mysize = 0;
  akGaugeNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGaugeNodeName[1], "SRank", 5u);
  LOBYTE(v107) = 2;
  akGaugeNodeName[2].baseclass_0._Myres = 15;
  akGaugeNodeName[2].baseclass_0._Mysize = 0;
  akGaugeNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGaugeNodeName[2], "ARank", 5u);
  LOBYTE(v107) = 3;
  akGaugeNodeName[3].baseclass_0._Myres = 15;
  akGaugeNodeName[3].baseclass_0._Mysize = 0;
  akGaugeNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGaugeNodeName[3], "BRank", 5u);
  LOBYTE(v107) = 4;
  akGaugeNodeName[4].baseclass_0._Myres = 15;
  akGaugeNodeName[4].baseclass_0._Mysize = 0;
  akGaugeNodeName[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGaugeNodeName[4], "CRank", 5u);
  LOBYTE(v107) = 5;
  akGaugeNodeName[5].baseclass_0._Myres = 15;
  akGaugeNodeName[5].baseclass_0._Mysize = 0;
  akGaugeNodeName[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akGaugeNodeName[5], "Rw", 2u);
  LOBYTE(v107) = 6;
  i = (int)akGaugeNodeName;
  do
  {
    v10 = fs("%sGauge");
    v11 = PgSprData::Create(pkObject, v10, &iLeft, &iTop, 0);
    *(_DWORD *)(*(_DWORD *)&v5->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + v4) = PgWinBar::CreateWin(
                                                                                         iLeft - iOffX,
                                                                                         iTop - iOffY,
                                                                                         v11,
                                                                                         &v5->baseclass_0.baseclass_0,
                                                                                         BGT_RIGHT);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + *(_DWORD *)&v5->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0])
                                  + 240))(0);
    v12 = *(_DWORD *)(*(_DWORD *)&v5->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + v4);
    v13 = *(PgWin **)(*(_DWORD *)&v5->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + v4);
    v100 = (char *)(v4 + *(_DWORD *)&v5->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
    v14 = Font::Get(0);
    v15 = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 148))(v12);
    v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 144))(v12);
    *(_DWORD *)v100 = PgWinText::CreateWin(0, 0, v16, v15, v14, v13, 0, 0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4
                                                    + *(_DWORD *)&v5->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0])
                                      + 488))(6);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v4
                                                    + *(_DWORD *)&v5->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0])
                                      + 472))(&unk_992307);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + *(_DWORD *)&v5->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0])
                                  + 240))(0);
    i += 28;
    v4 += 4;
  }
  while ( v4 < 0x18 );
  akCheckNodeName[0].baseclass_0._Myres = 15;
  akCheckNodeName[0].baseclass_0._Mysize = 0;
  akCheckNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(akCheckNodeName, "All", 3u);
  LOBYTE(v107) = 7;
  akCheckNodeName[1].baseclass_0._Myres = 15;
  akCheckNodeName[1].baseclass_0._Mysize = 0;
  akCheckNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckNodeName[1], "S", 1u);
  LOBYTE(v107) = 8;
  akCheckNodeName[2].baseclass_0._Myres = 15;
  akCheckNodeName[2].baseclass_0._Mysize = 0;
  akCheckNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckNodeName[2], "A", 1u);
  LOBYTE(v107) = 9;
  akCheckNodeName[3].baseclass_0._Myres = 15;
  akCheckNodeName[3].baseclass_0._Mysize = 0;
  akCheckNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckNodeName[3], "B", 1u);
  LOBYTE(v107) = 10;
  akCheckNodeName[4].baseclass_0._Myres = 15;
  akCheckNodeName[4].baseclass_0._Mysize = 0;
  akCheckNodeName[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckNodeName[4], "C", 1u);
  LOBYTE(v107) = 11;
  v17 = TextData2::Get(0x284C2907u);
  v18 = v17;
  akCheckString[0].baseclass_0._Myres = 15;
  akCheckString[0].baseclass_0._Mysize = 0;
  akCheckString[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v17 + 1;
  do
    v19 = *v18++;
  while ( v19 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(akCheckString, v17, v18 - v100);
  LOBYTE(v107) = 12;
  v20 = TextData2::Get(0x2659160Au);
  v21 = v20;
  akCheckString[1].baseclass_0._Myres = 15;
  akCheckString[1].baseclass_0._Mysize = 0;
  akCheckString[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v20 + 1;
  do
    v22 = *v21++;
  while ( v22 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckString[1], v20, v21 - v100);
  LOBYTE(v107) = 13;
  v23 = TextData2::Get(0x1459160Au);
  v24 = v23;
  akCheckString[2].baseclass_0._Myres = 15;
  akCheckString[2].baseclass_0._Mysize = 0;
  akCheckString[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v23 + 1;
  do
    v25 = *v24++;
  while ( v25 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckString[2], v23, v24 - v100);
  LOBYTE(v107) = 14;
  v26 = TextData2::Get(0x1559160Au);
  v27 = v26;
  akCheckString[3].baseclass_0._Myres = 15;
  akCheckString[3].baseclass_0._Mysize = 0;
  akCheckString[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v26 + 1;
  do
    v28 = *v27++;
  while ( v28 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckString[3], v26, v27 - v100);
  LOBYTE(v107) = 15;
  v29 = TextData2::Get(0x1659160Au);
  v30 = v29;
  akCheckString[4].baseclass_0._Myres = 15;
  akCheckString[4].baseclass_0._Mysize = 0;
  akCheckString[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v29 + 1;
  do
    v31 = *v30++;
  while ( v31 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckString[4], v29, v30 - v100);
  LOBYTE(v107) = 16;
  v32 = TextData2::Get(0x61ACD297u);
  v33 = v32;
  akCheckToolTip[0].baseclass_0._Myres = 15;
  akCheckToolTip[0].baseclass_0._Mysize = 0;
  akCheckToolTip[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v32 + 1;
  do
    v34 = *v33++;
  while ( v34 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(akCheckToolTip, v32, v33 - v100);
  LOBYTE(v107) = 17;
  v35 = TextData2::Get(0x5DA17B46u);
  v36 = v35;
  akCheckToolTip[1].baseclass_0._Myres = 15;
  akCheckToolTip[1].baseclass_0._Mysize = 0;
  akCheckToolTip[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v35 + 1;
  do
    v37 = *v36++;
  while ( v37 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckToolTip[1], v35, v36 - v100);
  LOBYTE(v107) = 18;
  v38 = TextData2::Get(0x5D8F7B46u);
  v39 = v38;
  akCheckToolTip[2].baseclass_0._Myres = 15;
  akCheckToolTip[2].baseclass_0._Mysize = 0;
  akCheckToolTip[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v38 + 1;
  do
    v40 = *v39++;
  while ( v40 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckToolTip[2], v38, v39 - v100);
  LOBYTE(v107) = 19;
  v41 = TextData2::Get(0x5D907B46u);
  v42 = v41;
  akCheckToolTip[3].baseclass_0._Myres = 15;
  akCheckToolTip[3].baseclass_0._Mysize = 0;
  akCheckToolTip[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v100 = v41 + 1;
  do
    v43 = *v42++;
  while ( v43 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckToolTip[3], v41, v42 - v100);
  LOBYTE(v107) = 20;
  v44 = TextData2::Get(0x5D917B46u);
  akCheckToolTip[4].baseclass_0._Myres = 15;
  akCheckToolTip[4].baseclass_0._Mysize = 0;
  akCheckToolTip[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akCheckToolTip[4], v44, strlen(v44));
  LOBYTE(v107) = 21;
  i = 0;
  v91 = 0;
  v100 = (char *)5;
  do
  {
    v45 = fs("%sRankNonSelect");
    v46 = PgSprData::Create(pkObject, v45, &iLeft, &iTop, 0);
    v47 = fs("%sRankSelect");
    PgSprData::Add(v46, pkObject, v47);
    v48 = *(_DWORD *)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0];
    v49 = 4 * i;
    v50 = ColumnBut::CreateWin(iLeft - iOffX, iTop - iOffY, v46, &v5->baseclass_0.baseclass_0, 3u, 0);
    v51 = i;
    *(_DWORD *)(v48 + 4 * i) = v50;
    *(_DWORD *)(*(_DWORD *)(v49 + *(_DWORD *)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]) + 384) = v51;
    *(_DWORD *)(*(_DWORD *)(v49 + *(_DWORD *)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]) + 272) = g_pkToolTipWin;
    if ( akCheckToolTip[v91].baseclass_0._Myres < 0x10 )
      v52 = (char *)&akCheckToolTip[v91];
    else
      v52 = *(char **)&akCheckToolTip[v91].baseclass_0.___u0.baseclass_0.dummy[0];
    PgWin::SetToolTipWinText(
      *(PgWin **)(v49 + *(_DWORD *)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]),
      v52);
    v53 = *(PgWin **)(v49 + *(_DWORD *)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]);
    v54 = Font::Get(0);
    v55 = ((int (__thiscall *)(PgWin *))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v53);
    v56 = ((int (__thiscall *)(PgWin *))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v53);
    v57 = PgWinText::CreateWin(0, 0, v56, v55, v54, v53, 0, 0);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v57,
      5,
      v90);
    if ( akCheckString[v91].baseclass_0._Myres < 0x10 )
      v58 = &akCheckString[v91];
    else
      v58 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&akCheckString[v91].baseclass_0.___u0.baseclass_0.dummy[0];
    v90 = (unsigned int)v58;
    ((void (__thiscall *)(PgWinText *))v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v57);
    v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v57,
      0);
    ++i;
    v59 = v100-- == (char *)1;
    ++v91;
  }
  while ( !v59 );
  v60 = pkObject;
  if ( PgUtil::GetTriShapeRect(pkObject, "Text01", &iLeft, &iTop, &uiWidth, &uiHeight)
    && (v61 = Font::Get(0),
        v62 = PgWinText::CreateWin(
                iLeft - iOffX,
                iTop - iOffY,
                uiWidth,
                uiHeight,
                v61,
                &v5->baseclass_0.baseclass_0,
                0,
                0),
        v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v62,
          4u),
        v100 = (char *)&v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118],
        v63 = TextData2::Get(0x42B25CC8u),
        (*(void (__thiscall **)(_DWORD, _DWORD))v100)(v62, v63),
        v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v62,
          0),
        PgUtil::GetTriShapeRect(v60, "Text02", &iLeft, &iTop, &uiWidth, &uiHeight)) )
  {
    v64 = Font::Get(0);
    v65 = PgWinText::CreateWin(iLeft - iOffX, iTop - iOffY, uiWidth, uiHeight, v64, &v5->baseclass_0.baseclass_0, 0, 0);
    v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v65,
      4u);
    v100 = (char *)&v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v66 = TextData2::Get(0x153107Cu);
    (*(void (__thiscall **)(PgWinText *, char *))v100)(v65, v66);
    v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v65,
      0);
    v67 = 0;
    do
    {
      pkObject = (NiAVObject *)((char *)v67 + 1);
      v68 = fs("Card%02d");
      if ( !PgUtil::GetTriShapeRect(v60, v68, &iLeft, &iTop, &uiWidth, &uiHeight) )
      {
        LOBYTE(v107) = 16;
        _eh_vector_destructor_iterator_(
          akCheckToolTip,
          0x1Cu,
          5,
          (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
        LOBYTE(v107) = 11;
        _eh_vector_destructor_iterator_(
          akCheckString,
          0x1Cu,
          5,
          (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
        LOBYTE(v107) = 6;
        _eh_vector_destructor_iterator_(
          akCheckNodeName,
          0x1Cu,
          5,
          (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
        LOBYTE(v107) = 0;
        _eh_vector_destructor_iterator_(
          akGaugeNodeName,
          0x1Cu,
          6,
          (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
        v107 = -1;
        if ( !InterlockedDecrement((volatile LONG *)&v60->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v60->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v60, 1u);
        return 0;
      }
      v100 = (char *)(4 * (_DWORD)v67 + *(_DWORD *)&v5->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
      *(_DWORD *)v100 = CardSlotWin::CreateWin(
                          iLeft - iOffX,
                          iTop - iOffY,
                          &v5->baseclass_0.baseclass_0,
                          (unsigned int)v67,
                          0,
                          0);
      (*(void (__stdcall **)(NiAVObject *))(**(_DWORD **)(*(_DWORD *)&v5->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]
                                                        + 4 * (_DWORD)v67)
                                          + 520))(v67);
      (*(void (__stdcall **)(NiAVObject *))(**(_DWORD **)(*(_DWORD *)&v5->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]
                                                        + 4 * (_DWORD)v67)
                                          + 564))(v67);
      v67 = pkObject;
    }
    while ( (unsigned int)pkObject < 4 );
    if ( bPeeping )
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v5->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 20)
                                    + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v5->m_kBarTexts.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 20)
                                    + 256))(0);
      v69 = 0;
      do
      {
        *(_BYTE *)(*(_DWORD *)(v69 + *(_DWORD *)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0]) + 380) = 0;
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v69
                                                    + *(_DWORD *)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0])
                                      + 240))(0);
        v69 += 4;
      }
      while ( v69 < 0x14 );
    }
    else
    {
      *(_BYTE *)(**(_DWORD **)&v5->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 380) = 1;
      if ( !PgUtil::GetTriShapeRect(v60, "Text03", &iLeft, &iTop, &uiWidth, &uiHeight) )
        goto LABEL_39;
      v70 = Font::Get(0);
      v71 = PgWinText::CreateWin(
              iLeft - iOffX,
              iTop - iOffY,
              uiWidth,
              uiHeight,
              v70,
              &v5->baseclass_0.baseclass_0,
              0,
              0);
      v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v71,
        4u);
      v100 = (char *)&v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v72 = TextData2::Get(0xC9F6430Bu);
      (*(void (__thiscall **)(PgWinText *, char *))v100)(v71, v72);
      v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v71,
        0);
      v73 = PgSprData::Create(v60, "RwAll", &iLeft, &iTop, 0);
      v74 = (PgWin *)PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v73, &v5->baseclass_0.baseclass_0, 0, 0);
      v75 = Font::Get(0);
      v76 = ((int (__thiscall *)(PgWin *))v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v74);
      v77 = ((int (__thiscall *)(PgWin *))v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v74);
      v78 = PgWinText::CreateWin(0, 0, v77, v76, v75, v74, 0, 0);
      v5->m_pkSelectGradeText = v78;
      v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v78,
        5u);
      v100 = (char *)&v5->m_pkSelectGradeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v79 = TextData2::Get(0x284C2907u);
      (*(void (__thiscall **)(_DWORD, _DWORD))v100)(v5->m_pkSelectGradeText, v79);
      ((void (__stdcall *)(_DWORD))v5->m_pkSelectGradeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v80 = (NiAVObject **)CollectRwItemWin::CreateWin(
                             (NiNode *)v60,
                             "Reward02Able",
                             "Reward02Disable",
                             "Reward02Effect",
                             &v5->baseclass_0.baseclass_0,
                             1);
      v5->m_pkRewardItem = (CollectRwItemWin *)v80;
      pkObject = *v80;
      v81 = (*(int (__thiscall **)(NiAVObject **))&pkObject->m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0])(v80);
      v82 = v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
      v100 = (char *)v81;
      v83 = ((int (__thiscall *)(PgWin *))v82)(v74);
      ((void (__thiscall *)(CollectRwItemWin *, char *))pkObject[1].baseclass_0.baseclass_0.baseclass_0.vfptr)(
        v5->m_pkRewardItem,
        &v100[-v83]);
      akRwBtnNodeName[0].baseclass_0._Myres = 15;
      akRwBtnNodeName[0].baseclass_0._Mysize = 0;
      akRwBtnNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(akRwBtnNodeName, "Front", 5u);
      LOBYTE(v107) = 22;
      akRwBtnNodeName[1].baseclass_0._Myres = 15;
      akRwBtnNodeName[1].baseclass_0._Mysize = 0;
      akRwBtnNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&akRwBtnNodeName[1], "Next", 4u);
      pkObject = 0;
      LOBYTE(v107) = 23;
      v84 = (int)akRwBtnNodeName;
      do
      {
        v85 = fs("Rw%sNor");
        v86 = PgSprData::Create(v60, v85, &iLeft, &iTop, 0);
        v87 = fs("Rw%sClick");
        PgSprData::Add(v86, v60, v87);
        v88 = fs("Rw%sOver");
        PgSprData::Add(v86, v60, v88);
        v89 = PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v86, &v5->baseclass_0.baseclass_0, 2u, 0, 0);
        v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
          (NiRefObject *)v89,
          (unsigned int)pkObject);
        v84 += 28;
        pkObject = (NiAVObject *)((char *)pkObject + 1);
      }
      while ( (unsigned int)pkObject < 2 );
      LOBYTE(v107) = 21;
      _eh_vector_destructor_iterator_(
        akRwBtnNodeName,
        0x1Cu,
        2,
        (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    }
    CollectMainWin::InitBar(v5);
    LOBYTE(v107) = 16;
    _eh_vector_destructor_iterator_(
      akCheckToolTip,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 11;
    _eh_vector_destructor_iterator_(
      akCheckString,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 6;
    _eh_vector_destructor_iterator_(
      akCheckNodeName,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 0;
    _eh_vector_destructor_iterator_(
      akGaugeNodeName,
      0x1Cu,
      6,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v107 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v60->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v60->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v60, 1u);
    result = 1;
  }
  else
  {
LABEL_39:
    LOBYTE(v107) = 16;
    _eh_vector_destructor_iterator_(
      akCheckToolTip,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 11;
    _eh_vector_destructor_iterator_(
      akCheckString,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 6;
    _eh_vector_destructor_iterator_(
      akCheckNodeName,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    LOBYTE(v107) = 0;
    _eh_vector_destructor_iterator_(
      akGaugeNodeName,
      0x1Cu,
      6,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v107 = -1;
    if ( InterlockedDecrement((volatile LONG *)&v60->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v60->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v60, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (004F11C0) --------------------------------------------------------
void __thiscall CollectMainWin::UpdateCheckBox(CollectMainWin *this)
{
  CollectMainWin *v1; // edi@1
  int v2; // eax@1
  int v3; // eax@3
  int v4; // eax@5
  int v5; // eax@7
  int v6; // eax@9
  int v7; // eax@11
  unsigned int v8; // eax@14
  char *v9; // eax@15
  char *v10; // ecx@15
  int v11; // esi@15
  char v12; // dl@16
  char v13; // dl@19
  char v14; // dl@22
  char v15; // dl@25
  char v16; // dl@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@29
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kGradeString; // [sp+0h] [bp-2Ch]@14
  unsigned int v19; // [sp+1Ch] [bp-10h]@1
  int v20; // [sp+28h] [bp-4h]@14
  int v21; // [sp+2Ch] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v1 = this;
  v2 = **(_DWORD **)&this->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
    *(_BYTE *)(v2 + 380) = 0;
  v3 = *(_DWORD *)(*(_DWORD *)&this->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 4);
  if ( v3 )
    *(_BYTE *)(v3 + 380) = 0;
  v4 = *(_DWORD *)(*(_DWORD *)&this->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 8);
  if ( v4 )
    *(_BYTE *)(v4 + 380) = 0;
  v5 = *(_DWORD *)(*(_DWORD *)&this->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 12);
  if ( v5 )
    *(_BYTE *)(v5 + 380) = 0;
  v6 = *(_DWORD *)(*(_DWORD *)&this->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 16);
  if ( v6 )
    *(_BYTE *)(v6 + 380) = 0;
  v7 = *(_DWORD *)(*(_DWORD *)&this->m_kCheckGrades.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * this->m_uiRewardGrade);
  if ( v7 )
    *(_BYTE *)(v7 + 380) = 1;
  if ( this->m_pkSelectGradeText )
  {
    kGradeString.baseclass_0._Myres = 15;
    kGradeString.baseclass_0._Mysize = 0;
    kGradeString.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v8 = this->m_uiRewardGrade;
    v20 = 0;
    switch ( v8 )
    {
      case 0u:
        v9 = TextData2::Get(0x284C2907u);
        v10 = v9;
        v11 = (int)(v9 + 1);
        do
          v12 = *v10++;
        while ( v12 );
        goto LABEL_29;
      case 1u:
        v9 = TextData2::Get(0x2659160Au);
        v10 = v9;
        v11 = (int)(v9 + 1);
        do
          v13 = *v10++;
        while ( v13 );
        goto LABEL_29;
      case 2u:
        v9 = TextData2::Get(0x1459160Au);
        v10 = v9;
        v11 = (int)(v9 + 1);
        do
          v14 = *v10++;
        while ( v14 );
        goto LABEL_29;
      case 3u:
        v9 = TextData2::Get(0x1559160Au);
        v10 = v9;
        v11 = (int)(v9 + 1);
        do
          v15 = *v10++;
        while ( v15 );
        goto LABEL_29;
      case 4u:
        v9 = TextData2::Get(0x1659160Au);
        v10 = v9;
        v11 = (int)(v9 + 1);
        do
          v16 = *v10++;
        while ( v16 );
LABEL_29:
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &kGradeString,
          v9,
          (unsigned int)&v10[-v11]);
        v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&kGradeString;
        if ( kGradeString.baseclass_0._Myres < 0x10 )
          goto LABEL_30;
        break;
      default:
LABEL_30:
        v17 = &kGradeString;
        break;
    }
    ((void (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))v1->m_pkSelectGradeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v17);
    if ( kGradeString.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kGradeString);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004F13B0) --------------------------------------------------------
void __thiscall CollectWin::SetNewest(CollectWin *this, int tRegistTime, unsigned int uiCardID)
{
  char *v3; // esi@1
  int v4; // ecx@1
  int v5; // eax@1
  int v6; // edi@4
  std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *v7; // ST04_4@4
  std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *v8; // eax@4
  int v9; // ecx@4
  CollectWin::sNewestInfo kNewestInfo; // [sp+4h] [bp-8h]@4

  v3 = (char *)&this->m_kNewestInfos;
  v4 = *(_DWORD *)&this->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = *(_DWORD *)v4;
  if ( *(_DWORD *)v4 == v4 )
  {
LABEL_4:
    v6 = v4;
    kNewestInfo.m_uiCardID = uiCardID;
    v7 = *(std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node **)(v4 + 4);
    kNewestInfo.m_tRegistTime = tRegistTime;
    v8 = std::_List_val<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::_Buynode(
           (std::_List_val<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> > *)v3,
           (std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *)v4,
           v7,
           (GameFrameWork::AttackedMsg::AttackedFrom *)&kNewestInfo);
    v9 = *((_DWORD *)v3 + 1);
    if ( (unsigned int)(536870910 - v9) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v3 + 1) = v9 + 1;
    *(_DWORD *)(v6 + 4) = v8;
    v8->_Prev->_Next = v8;
  }
  else
  {
    while ( *(_DWORD *)(v5 + 12) != uiCardID )
    {
      v5 = *(_DWORD *)v5;
      if ( v5 == v4 )
        goto LABEL_4;
    }
    *(_DWORD *)(v5 + 8) = tRegistTime;
  }
}

//----- (004F1430) --------------------------------------------------------
void __thiscall CollectMainWin::Update(CollectMainWin *this)
{
  CollectMainWin *v1; // esi@1

  v1 = this;
  CollectMainWin::UpdateBar(this);
  CollectMainWin::UpdateCheckBox(v1);
}

//----- (004F1440) --------------------------------------------------------
void __thiscall CollectCardListWin::OnSelectCard(CollectCardListWin *this, unsigned int uiSlotIndex)
{
  int v2; // eax@1
  unsigned int v3; // edi@1
  unsigned int v4; // ebx@1
  unsigned int v5; // esi@1
  PgFrameWork *v6; // eax@3
  int v7; // eax@5
  unsigned int v8; // edi@6
  unsigned int v9; // esi@8
  void *v10; // eax@9
  int v11; // esi@13
  char *v12; // edi@14
  char *v13; // eax@16
  char *v14; // eax@17
  char *v15; // edi@18
  int v16; // edx@18
  char v17; // cl@19
  char *v18; // ebx@21
  char *v19; // eax@21
  char v20; // cl@22
  const char *v21; // edx@23
  char *v22; // eax@25
  char v23; // cl@26
  int v24; // edi@30
  char *v25; // eax@30
  unsigned int v26; // [sp-10h] [bp-50h]@1
  char *pcText; // [sp+0h] [bp-40h]@15
  CSpFont *pkFont; // [sp+8h] [bp-38h]@15
  CollectCardListWin *iPixelSize; // [sp+Ch] [bp-34h]@1
  int iPixelSizea; // [sp+Ch] [bp-34h]@15
  int tRegistTime; // [sp+10h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kSubNameValText; // [sp+14h] [bp-2Ch]@15
  unsigned int v33; // [sp+30h] [bp-10h]@1
  int v34; // [sp+3Ch] [bp-4h]@15
  int v35; // [sp+40h] [bp+0h]@1

  v33 = (unsigned int)&v35 ^ __security_cookie;
  v26 = (unsigned int)&v35 ^ __security_cookie;
  iPixelSize = this;
  v2 = *(_DWORD *)(*(_DWORD *)&this->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlotIndex);
  v3 = 0;
  v4 = 0;
  v5 = 0;
  tRegistTime = 0;
  if ( v2 )
  {
    v4 = *(_DWORD *)(v2 + 360);
    v5 = *(_DWORD *)(v2 + 364);
    v3 = *(_DWORD *)(v2 + 368);
    tRegistTime = *(_DWORD *)(v2 + 372);
  }
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v6 )
    GameFrameWork::OpenCollectCardWin((GameFrameWork *)v6, 1, v4, v5, v3, tRegistTime == 0);
  v7 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
  if ( v7 )
    v8 = *(_DWORD *)(v7 + 40);
  else
    v8 = 0;
  v9 = 0;
  if ( v8 )
  {
    while ( 1 )
    {
      v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v9);
      if ( v10 )
      {
        if ( *(_WORD *)v10 == (_WORD)v4 )
          break;
      }
      ++v9;
      if ( v9 >= v8 )
        return;
    }
    v11 = *(_DWORD *)(*(_DWORD *)&iPixelSize->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 12);
    if ( v11 )
    {
      v12 = (char *)CollectCardTitleTab::GetByItemInx((const char *)v10 + 2);
      if ( v12 )
      {
        kSubNameValText.baseclass_0._Myres = 15;
        kSubNameValText.baseclass_0._Mysize = 0;
        kSubNameValText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v34 = 0;
        fs(0);
        fs(0);
        pcText = fs(0);
        pkFont = *(CSpFont **)(*(_DWORD *)(v11 + 288) + 312);
        iPixelSizea = (signed int)((double)(unsigned int)(*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)v11 + 144))(
                                                           v11,
                                                           v26)
                                 / 1.049999952316284);
        if ( tRegistTime )
        {
          CCharacterTitleData::GetTitleString(&g_characterTitleData, *v12, 0);
          v14 = TextData2::Get(0x6C8A69A3u);
          v13 = fs(v14);
        }
        else
        {
          v13 = TextData2::Get(0x58935FB7u);
        }
        v15 = v13;
        v16 = (int)(v13 + 1);
        do
          v17 = *v13++;
        while ( v17 );
        if ( v13 != (char *)v16 )
        {
          do
          {
            v18 = CSpFont::SplitStrByPixelSize(pkFont, v15, iPixelSizea, 0);
            strncpy(pcText, v15, v18 - v15);
            pcText[v18 - v15] = 0;
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
              &kSubNameValText,
              pcText,
              strlen(pcText));
            v19 = v18;
            do
              v20 = *v19++;
            while ( v20 );
            v21 = "\n";
            if ( v19 == v18 + 1 )
              v21 = (const char *)&unk_99231F;
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
              &kSubNameValText,
              v21,
              strlen(v21));
            v22 = v18;
            v15 = v18;
            do
              v23 = *v22++;
            while ( v23 );
          }
          while ( v22 != v18 + 1 );
        }
        (*(void (__thiscall **)(int))(*(_DWORD *)v11 + 472))(v11);
        if ( kSubNameValText.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&kSubNameValText);
      }
      else
      {
        v24 = *(_DWORD *)v11;
        v25 = TextData2::Get(0xD6502307u);
        (*(void (__thiscall **)(int, char *))(v24 + 472))(v11, v25);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004F16F0) --------------------------------------------------------
void __thiscall CollectCardListWin::OnRegistBookmark(CollectCardListWin *this, unsigned int uiSlotIndex)
{
  PgWin *v2; // eax@1
  PgWin *v3; // ebx@1
  float v4; // edi@2
  CollectPageWin *v5; // eax@3
  unsigned int v6; // esi@3
  void *v7; // ebx@5
  int v8; // esi@6
  int v9; // ecx@7
  std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > kCardInfos; // [sp+0h] [bp-20h]@5
  CollectCardListWin *v11; // [sp+10h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-4h]@5
  int uiSlotIndexa; // [sp+28h] [bp+8h]@6

  v11 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
  v3 = v2;
  if ( v2 )
  {
    v4 = v2[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
    if ( LODWORD(v4) )
    {
      v5 = v11->m_pkPageWin;
      v6 = 0;
      if ( v5 )
        v6 = uiSlotIndex + 12 * v5->m_uiPage;
      CollectCardChoiceWin::ClearInfo(LODWORD(v3[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]));
      *(_DWORD *)(LODWORD(v4) + 384) = v6;
      std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>(
        &kCardInfos,
        (std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *)&v3[1].baseclass_0.baseclass_0.m_kLocal.m_fScale);
      v7 = *(void **)&kCardInfos;
      v12 = 0;
      if ( (signed int)((char *)kCardInfos.baseclass_0._Mylast - *(_DWORD *)&kCardInfos) / 20 )
      {
        v8 = *(_DWORD *)&kCardInfos + 16;
        uiSlotIndexa = (signed int)((char *)kCardInfos.baseclass_0._Mylast - *(_DWORD *)&kCardInfos) / 20;
        do
        {
          v9 = *(_DWORD *)v8;
          v11 = *(CollectCardListWin **)v8;
          if ( (double)(signed int)v11 > 0.0 )
            CollectCardChoiceWin::InsertInfo(
              LODWORD(v4),
              *(_DWORD *)(v8 - 16),
              *(_DWORD *)(v8 - 12),
              *(_DWORD *)(v8 - 8),
              *(_DWORD *)(v8 - 4),
              v9);
          v8 += 20;
          --uiSlotIndexa;
        }
        while ( uiSlotIndexa );
      }
      PgWinMgr::ShowWin(&Pgg_kWinMgr, LODWORD(v4));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, LODWORD(v4));
      if ( v7 )
        operator delete(v7);
    }
  }
}

//----- (004F1810) --------------------------------------------------------
void __thiscall CollectCardListWin::OnChangeBookmark(CollectCardListWin *this)
{
  CollectCardListWin::OnRegistBookmark(this, this->m_uiSelectBookmarkSlot);
}

//----- (004F1820) --------------------------------------------------------
void __thiscall CollectCardListWin::SetReward(CollectCardListWin *this, unsigned int uiRewardID, unsigned int uiCount, unsigned int uiRegistCount)
{
  CollectCardListWin *v4; // esi@1
  char *v5; // eax@6
  char *v6; // eax@6
  unsigned int v7; // edi@7
  int v8; // ecx@8
  int v9; // eax@11
  unsigned int v10; // ebx@11
  unsigned int v11; // edi@13
  void *v12; // eax@14
  int v13; // esi@20
  char *v14; // eax@21
  char *v15; // eax@21
  char *v16; // edi@21
  int v17; // edx@21
  char v18; // cl@22
  char *v19; // ebx@24
  char *v20; // eax@24
  char v21; // cl@25
  const char *v22; // edx@26
  char *v23; // eax@28
  char v24; // cl@29
  unsigned int v25; // [sp-1Ch] [bp-5Ch]@4
  unsigned int v26; // [sp-10h] [bp-50h]@1
  char *pcText; // [sp+0h] [bp-40h]@21
  CSpFont *pkFont; // [sp+8h] [bp-38h]@21
  int iPixelSize; // [sp+Ch] [bp-34h]@11
  int iPixelSizea; // [sp+Ch] [bp-34h]@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kConditionValText; // [sp+14h] [bp-2Ch]@21
  unsigned int v32; // [sp+30h] [bp-10h]@1
  int v33; // [sp+3Ch] [bp-4h]@21
  int v34; // [sp+40h] [bp+0h]@1

  v32 = (unsigned int)&v34 ^ __security_cookie;
  v26 = (unsigned int)&v34 ^ __security_cookie;
  v4 = this;
  CollectCardListWin::ResetReward(this);
  if ( uiRewardID )
  {
    if ( v4->m_pkRewardItem )
    {
      ((void (__stdcall *)(signed int))v4->m_pkRewardItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v4->m_pkRewardItem->m_uiRewardID = uiRewardID;
      CollectRwItemWin::SetState(v4->m_pkRewardItem, (CollectRwItemWin::eRewardStateType)(uiRegistCount >= uiCount));
      if ( uiRegistCount >= uiCount )
        v25 = -2136305480;
      else
        v25 = 531400788;
      v5 = TextData2::Get(v25);
      v6 = fs(v5);
      PgWin::SetToolTipWinText(&v4->m_pkRewardItem->baseclass_0.baseclass_0.baseclass_0, v6);
    }
    v7 = 0;
    do
    {
      v8 = *(_DWORD *)(v7 + *(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0]);
      if ( v8 )
        (*(void (__stdcall **)(signed int))(*(_DWORD *)v8 + 256))(1);
      v7 += 4;
    }
    while ( v7 < 0x10 );
    v9 = *(_DWORD *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 56);
    v10 = 0;
    iPixelSize = 0;
    if ( v9 )
      v10 = *(_DWORD *)(v9 + 40);
    v11 = 0;
    if ( v10 )
    {
      do
      {
        v12 = CDataReader::GetRecord(
                (CDataReader *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 4),
                v11);
        if ( v12 && *(_WORD *)v12 == (_WORD)uiRewardID )
        {
          if ( !iPixelSize )
          {
            v13 = *(_DWORD *)(*(_DWORD *)&v4->m_kRewardTexts.baseclass_0.___u0.baseclass_0.dummy[0] + 8);
            if ( v13 )
            {
              kConditionValText.baseclass_0._Myres = 15;
              kConditionValText.baseclass_0._Mysize = 0;
              kConditionValText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
              v33 = 0;
              fs(0);
              fs(0);
              pcText = fs(0);
              pkFont = *(CSpFont **)(*(_DWORD *)(v13 + 288) + 312);
              iPixelSizea = (signed int)((double)(unsigned int)(*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)v13 + 144))(
                                                                 v13,
                                                                 v26)
                                       / 1.049999952316284);
              v14 = TextData2::Get(0xCA4E0B0Bu);
              v15 = fs(v14);
              v16 = v15;
              v17 = (int)(v15 + 1);
              do
                v18 = *v15++;
              while ( v18 );
              if ( v15 != (char *)v17 )
              {
                do
                {
                  v19 = CSpFont::SplitStrByPixelSize(pkFont, v16, iPixelSizea, 0);
                  strncpy(pcText, v16, v19 - v16);
                  pcText[v19 - v16] = 0;
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                    &kConditionValText,
                    pcText,
                    strlen(pcText));
                  v20 = v19;
                  do
                    v21 = *v20++;
                  while ( v21 );
                  v22 = "\n";
                  if ( v20 == v19 + 1 )
                    v22 = (const char *)&unk_992326;
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                    &kConditionValText,
                    v22,
                    strlen(v22));
                  v23 = v19;
                  v16 = v19;
                  do
                    v24 = *v23++;
                  while ( v24 );
                }
                while ( v23 != v19 + 1 );
              }
              (*(void (__thiscall **)(int))(*(_DWORD *)v13 + 472))(v13);
              if ( kConditionValText.baseclass_0._Myres >= 0x10 )
                operator delete(*(void **)&kConditionValText);
            }
            return;
          }
          ++iPixelSize;
        }
        ++v11;
      }
      while ( v11 < v10 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97ED8: using guessed type int ITableBase_CollectCardReward_CollectCardRewardTab___ms_pkTable;

//----- (004F1AE0) --------------------------------------------------------
void __thiscall CollectWin::CollectWin(CollectWin *this)
{
  CollectWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  CollectWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectWin::_vftable_;
  v6 = 0;
  v1->m_kNewestInfos.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x10u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_DWORD *)&v1->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBookmarkInfos.baseclass_0._Mylast = 0;
  v1->m_kBookmarkInfos.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRewardInfos.baseclass_0._Mylast = 0;
  v1->m_kRewardInfos.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardInfos.baseclass_0._Mylast = 0;
  v1->m_kCardInfos.baseclass_0._Myend = 0;
  v1->m_pkMainWin = 0;
  v1->m_pkCardListWin = 0;
  v1->m_pkRwChoiceWin = 0;
  v1->m_pkCardChoiceWin = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 992A30: using guessed type int (__stdcall *CollectWin___vftable_)(int uiFlags);
// 992A4C: using guessed type int (__thiscall *CollectWin___vftable_)(void *p, char);

//----- (004F1BE0) --------------------------------------------------------
void __thiscall CollectWin::_CollectWin(CollectWin *this)
{
  CollectWin *v1; // esi@1
  void **v2; // ecx@7
  void *v3; // eax@7
  void *v4; // edi@8

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CollectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CollectWin::_vftable_;
  if ( *(_DWORD *)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kCardInfos.baseclass_0._Mylast = 0;
  v1->m_kCardInfos.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kRewardInfos.baseclass_0._Mylast = 0;
  v1->m_kRewardInfos.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kBookmarkInfos.baseclass_0._Mylast = 0;
  v1->m_kBookmarkInfos.baseclass_0._Myend = 0;
  v2 = *(void ***)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kNewestInfos.baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 992A30: using guessed type int (__stdcall *CollectWin___vftable_)(int uiFlags);
// 992A4C: using guessed type int (__thiscall *CollectWin___vftable_)(void *p, char);

//----- (004F1CC0) --------------------------------------------------------
CollectWin *__cdecl CollectWin::CreateWin(PgFrameWork *pkFrameWork, bool bPeeping)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  CollectWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x1ACu);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    CollectWin::CollectWin((CollectWin *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *, _DWORD))(*(_DWORD *)v4 + 540))(
                          v4,
                          pkFrameWork,
                          bPeeping) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (CollectWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}

//----- (004F1DF0) --------------------------------------------------------
void __thiscall CollectWin::InitNewestInfo(CollectWin *this)
{
  std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::resize(&this->m_kNewestInfos, 0);
}

//----- (004F1E00) --------------------------------------------------------
void __thiscall CollectCardListWin::OnCommand(CollectCardListWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgWin *v4; // eax@2
  PgWin *v5; // eax@3

  v3 = (PgWin *)this;
  switch ( wParam )
  {
    case 0u:
      v4 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
      PgWin::PostMsg(v3, v4, 5u, 3u, 0);
      break;
    case 1u:
      v5 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0);
      PgWin::PostMsg(v3, v5, 5u, 4u, lParam);
      break;
    case 2u:
      CollectCardListWin::OnSelectCard(this, lParam);
      break;
    case 3u:
      CollectCardListWin::OnSelectRewardItem(this);
      break;
    case 4u:
      CollectCardListWin::OnRegistBookmark(this, lParam);
      break;
    case 5u:
      CollectCardListWin::OnPopupCardMenu(this, lParam);
      break;
    default:
      return;
  }
}

//----- (004F1EA0) --------------------------------------------------------
void __thiscall CollectCardListWin::DirectMessage(CollectCardListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  CollectCardListWin *v4; // edi@1
  PgFrameWork *v5; // eax@3
  float v6; // edx@4
  unsigned int v7; // esi@4

  v4 = this;
  if ( iMsgTag == 77 )
  {
    CollectCardListWin::OnRegistBookmark(
      (CollectCardListWin *)((char *)this - 232),
      LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]));
  }
  else
  {
    if ( iMsgTag == 78 )
    {
      v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v5 )
      {
        v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][1];
        v7 = 0;
        if ( LODWORD(v6) )
          v7 = LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0])
             + 12 * *(_DWORD *)(LODWORD(v6) + 344);
        GameFrameWork::NcCollectBookmarkRegistReq((GameFrameWork *)v5, v7, 0);
      }
    }
  }
}

//----- (004F1F10) --------------------------------------------------------
void __thiscall CollectWin::InitRewardInfo(CollectWin *this)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  int v3; // edi@1
  void *v4; // eax@5
  void *v5; // ebx@5
  unsigned int v6; // edx@7
  unsigned int v7; // edi@7
  unsigned int v8; // eax@7
  unsigned int v9; // ecx@8
  char *v10; // edi@9
  CollectWin::sRewardInfo *v11; // eax@11
  int v12; // edi@11
  CollectWin::sRewardInfo *v13; // eax@15
  unsigned int v14; // ecx@16
  unsigned int v15; // edx@16
  int v16; // ecx@16
  CollectWin *v17; // [sp+8h] [bp-20h]@1
  unsigned int i; // [sp+Ch] [bp-1Ch]@4
  unsigned int v19; // [sp+10h] [bp-18h]@2
  CollectWin::sRewardInfo kRewardInfo; // [sp+14h] [bp-14h]@7
  unsigned int v21; // [sp+24h] [bp-4h]@1
  int v22; // [sp+28h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 56);
  v2 = 0;
  v3 = 0;
  v17 = this;
  if ( v1 )
    v19 = *(_DWORD *)(v1 + 40);
  else
    v19 = 0;
  i = 0;
  if ( v19 > 0 )
  {
    do
    {
      v4 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 4),
             v2);
      v5 = v4;
      if ( v4 && v3 != *(_WORD *)v4 )
      {
        v6 = *((_WORD *)v4 + 3);
        v7 = *(_DWORD *)((char *)v4 + 2);
        kRewardInfo.m_uiRewardID = *(_WORD *)v4;
        v8 = (unsigned int)v17->m_kRewardInfos.baseclass_0._Mylast;
        kRewardInfo.m_uiRewardGrade = v7;
        kRewardInfo.m_uiCount = v6;
        kRewardInfo.m_bCompleted = 0;
        if ( (unsigned int)&kRewardInfo >= v8
          || (v9 = *(_DWORD *)&v17->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0],
              v9 > (unsigned int)&kRewardInfo) )
        {
          if ( (CollectWin::sRewardInfo *)v8 == v17->m_kRewardInfos.baseclass_0._Myend )
            std::vector<NiColorA_std::allocator<NiColorA>>::_Reserve(
              (std::vector<NiColorA,std::allocator<NiColorA> > *)&v17->m_kRewardInfos,
              1u);
          v13 = v17->m_kRewardInfos.baseclass_0._Mylast;
          if ( v13 )
          {
            v14 = kRewardInfo.m_uiRewardID;
            v15 = kRewardInfo.m_uiCount;
            v13->m_uiRewardGrade = v7;
            v13->m_uiRewardID = v14;
            v16 = *(_DWORD *)&kRewardInfo.m_bCompleted;
            v13->m_uiCount = v15;
            *(_DWORD *)&v13->m_bCompleted = v16;
          }
        }
        else
        {
          v10 = (char *)&kRewardInfo - v9;
          if ( (CollectWin::sRewardInfo *)v8 == v17->m_kRewardInfos.baseclass_0._Myend )
            std::vector<NiColorA_std::allocator<NiColorA>>::_Reserve(
              (std::vector<NiColorA,std::allocator<NiColorA> > *)&v17->m_kRewardInfos,
              1u);
          v11 = v17->m_kRewardInfos.baseclass_0._Mylast;
          v12 = *(_DWORD *)&v17->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0]
              + ((unsigned int)v10 & 0xFFFFFFF0);
          if ( v11 )
          {
            v11->m_uiRewardGrade = *(_DWORD *)v12;
            v11->m_uiRewardID = *(_DWORD *)(v12 + 4);
            v11->m_uiCount = *(_DWORD *)(v12 + 8);
            *(_DWORD *)&v11->m_bCompleted = *(_DWORD *)(v12 + 12);
          }
        }
        ++v17->m_kRewardInfos.baseclass_0._Mylast;
        v3 = *(_WORD *)v5;
        v2 = i;
      }
      ++v2;
      i = v2;
    }
    while ( v2 < v19 );
  }
}
// A85C00: using guessed type int __security_cookie;
// A97ED8: using guessed type int ITableBase_CollectCardReward_CollectCardRewardTab___ms_pkTable;

//----- (004F2050) --------------------------------------------------------
void __thiscall CollectWin::InitCardInfo(CollectWin *this)
{
  int v1; // eax@1
  unsigned int v2; // ebx@1
  unsigned int v3; // esi@2
  char *v4; // edi@4
  int v5; // esi@5
  void *v6; // eax@6
  unsigned int v7; // [sp+Ch] [bp-4h]@2

  v1 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
  {
    v3 = *(_DWORD *)(v1 + 40);
    v7 = *(_DWORD *)(v1 + 40);
  }
  else
  {
    v7 = 0;
    v3 = 0;
  }
  v4 = (char *)&this->m_kCardInfos;
  std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::resize(&this->m_kCardInfos, v3);
  if ( v3 > 0 )
  {
    v5 = 0;
    do
    {
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v2);
      if ( v6 )
      {
        *(_DWORD *)(v5 + *(_DWORD *)v4) = *(_DWORD *)((char *)v6 + 34);
        *(_DWORD *)(v5 + *(_DWORD *)v4 + 4) = *(_WORD *)v6;
        *(_DWORD *)(v5 + *(_DWORD *)v4 + 8) = 0;
        *(_DWORD *)(v5 + *(_DWORD *)v4 + 12) = 0;
        *(_DWORD *)(v5 + *(_DWORD *)v4 + 16) = 0;
      }
      ++v2;
      v5 += 20;
    }
    while ( v2 < v7 );
  }
}
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004F20D0) --------------------------------------------------------
void __thiscall CollectWin::UpdateGrade(CollectWin *this, unsigned int uiGrade)
{
  CollectWin *v2; // esi@1
  CollectCardListWin *v3; // eax@1
  signed int v4; // ecx@2
  int v5; // ebx@7
  int v6; // eax@7
  unsigned int v7; // edx@7
  int v8; // edi@8
  CollectPageWin *v9; // eax@13
  int v10; // ebx@13
  unsigned int v11; // edi@14
  int v12; // ebx@15
  int v13; // edi@16
  unsigned int v14; // ecx@16
  int i; // eax@16
  CollectWin::sCardInfo *v16; // eax@23
  bool v17; // zf@23
  int v18; // ecx@23
  int v19; // edx@25
  unsigned int v20; // ebx@29
  int v21; // eax@29
  int v22; // ecx@29
  int v23; // edi@29
  unsigned int v24; // ecx@32
  unsigned int v25; // edx@32
  CardSlotWin *v26; // eax@32
  CardSlotWin *v27; // esi@32
  unsigned int v28; // edx@32
  unsigned int v29; // ecx@34
  int v30; // esi@34
  int v31; // edx@36
  int v32; // eax@36
  int v33; // ecx@36
  CollectCardListWin *v34; // esi@38
  CardSlotWin *v35; // ecx@38
  std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > kCardInfo; // [sp+0h] [bp-40h]@23
  unsigned int uiSerial; // [sp+10h] [bp-30h]@32
  int uiCardCount; // [sp+14h] [bp-2Ch]@29
  CollectWin *v39; // [sp+18h] [bp-28h]@1
  unsigned int uiStar; // [sp+1Ch] [bp-24h]@32
  int tRegistTime; // [sp+20h] [bp-20h]@32
  unsigned int v42; // [sp+24h] [bp-1Ch]@29
  CardSlotWin *thisa; // [sp+28h] [bp-18h]@32
  unsigned int uiCardID; // [sp+2Ch] [bp-14h]@24
  unsigned int v45; // [sp+30h] [bp-10h]@1
  int v46; // [sp+3Ch] [bp-4h]@23
  int v47; // [sp+40h] [bp+0h]@1

  v45 = (unsigned int)&v47 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pkCardListWin;
  v39 = this;
  if ( v3 )
  {
    v4 = 0;
    switch ( uiGrade )
    {
      case 0u:
        v4 = 1;
        break;
      case 1u:
        v4 = 2;
        break;
      case 2u:
        v4 = 3;
        break;
      case 3u:
        v4 = 4;
        break;
      default:
        break;
    }
    v5 = *(_DWORD *)&v2->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    v6 = (signed int)((char *)v2->m_kRewardInfos.baseclass_0._Mylast - v5) >> 4;
    v7 = 0;
    if ( !v6 )
      goto LABEL_12;
    v8 = *(_DWORD *)&v2->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    while ( *(_DWORD *)v8 != v4 || *(_BYTE *)(v8 + 12) )
    {
      ++v7;
      v8 += 16;
      if ( v7 >= v6 )
        goto LABEL_12;
    }
    v12 = 16 * v7 + v5;
    if ( v12 )
    {
      v13 = *(_DWORD *)&v2->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      v14 = 0;
      for ( i = (signed int)((char *)v2->m_kCardInfos.baseclass_0._Mylast - v13) / 20; i; --i )
      {
        if ( *(_DWORD *)v13 == uiGrade && *(_DWORD *)(v13 + 16) > 0 )
          ++v14;
        v13 += 20;
      }
      CollectCardListWin::SetReward(v2->m_pkCardListWin, *(_DWORD *)(v12 + 4), *(_DWORD *)(v12 + 8), v14);
    }
    else
    {
LABEL_12:
      CollectCardListWin::ResetReward(v2->m_pkCardListWin);
    }
    v9 = v2->m_pkCardListWin->m_pkPageWin;
    v10 = 0;
    if ( v9 )
      v11 = v9->m_uiPage;
    else
      v11 = 0;
    v16 = 0;
    v17 = (signed int)((char *)v2->m_kCardInfos.baseclass_0._Mylast
                     - *(_DWORD *)&v2->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
        / 20 == 0;
    v18 = (signed int)((char *)v2->m_kCardInfos.baseclass_0._Mylast
                     - *(_DWORD *)&v2->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0])
        / 20;
    *(_DWORD *)&kCardInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCardInfo.baseclass_0._Mylast = 0;
    kCardInfo.baseclass_0._Myend = 0;
    v46 = 1;
    if ( !v17 )
    {
      uiCardID = v18;
      do
      {
        v19 = *(_DWORD *)&v2->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
        if ( *(_DWORD *)(v10 + v19) == uiGrade )
          std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::push_back(
            (std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *)&kCardInfo,
            (CollectCardChoiceWin::sRegistCardInfo *)(v10 + v19));
        v10 += 20;
        --uiCardID;
      }
      while ( uiCardID );
      v16 = kCardInfo.baseclass_0._Mylast;
    }
    v20 = 0;
    v21 = (signed int)((char *)v16 - *(_DWORD *)&kCardInfo) / 20;
    v22 = 12 * v11;
    uiCardCount = v21;
    v42 = 12 * v11;
    v23 = 240 * v11 + *(_DWORD *)&kCardInfo + 12;
    while ( 1 )
    {
      if ( v22 >= (unsigned int)v21 )
      {
        v34 = v2->m_pkCardListWin;
        v35 = *(CardSlotWin **)(v20 + *(_DWORD *)&v34->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
        thisa = v35;
        if ( v35 )
        {
          ((void (__stdcall *)(_DWORD))v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          CardSlotWin::SetInfo(thisa, 0, 0, 0, 0);
        }
        v33 = *(_DWORD *)(v20 + *(_DWORD *)&v34->m_kBookmarkBtns.baseclass_0.___u0.baseclass_0.dummy[0]);
        if ( v33 )
        {
          v31 = *(_DWORD *)v33;
          v32 = v34->m_eCardListType == 0;
LABEL_42:
          (*(void (__thiscall **)(int, int))(v31 + 256))(v33, v32);
          goto LABEL_43;
        }
      }
      else
      {
        v24 = *(_DWORD *)v23;
        v25 = *(_DWORD *)(v23 - 4);
        tRegistTime = *(_DWORD *)(v23 + 4);
        v26 = (CardSlotWin *)v2->m_pkCardListWin;
        uiSerial = v24;
        v27 = *(CardSlotWin **)(v20 + *(_DWORD *)&v26->m_kBorderSprs.baseclass_0._Alval.baseclass_0.dummy[0]);
        uiStar = v25;
        v28 = *(_DWORD *)(v23 - 8);
        uiCardID = *(_DWORD *)(v23 - 8);
        thisa = v26;
        if ( v27 )
        {
          v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v27,
            v28 != 0);
          CardSlotWin::SetInfo(v27, uiCardID, uiStar, uiSerial, tRegistTime);
          v26 = thisa;
          v28 = uiCardID;
        }
        v29 = v26->baseclass_0.m_uiRCmdMsgParam;
        v30 = *(_DWORD *)(v20 + v29);
        if ( v30 )
        {
          if ( v26->m_uiStar )
          {
            v31 = *(_DWORD *)v30;
            v32 = 0;
            v33 = *(_DWORD *)(v20 + v29);
          }
          else
          {
            v17 = v28 == 0;
            v31 = *(_DWORD *)v30;
            v32 = v17;
            v33 = *(_DWORD *)(v20 + v29);
          }
          goto LABEL_42;
        }
      }
LABEL_43:
      v22 = v42 + 1;
      v20 += 4;
      v23 += 20;
      ++v42;
      if ( v20 >= 0x30 )
      {
        if ( *(_DWORD *)&kCardInfo )
          operator delete(*(void **)&kCardInfo);
        return;
      }
      v2 = v39;
      v21 = uiCardCount;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004F23C0) --------------------------------------------------------
void __thiscall CollectWin::InitInfo(CollectWin *this)
{
  CollectWin *v1; // edi@1
  unsigned int v2; // eax@1

  v1 = this;
  std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::resize(&this->m_kNewestInfos, 0);
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_kBookmarkInfos,
    0x3Cu);
  v2 = 0;
  do
  {
    *(_DWORD *)(v2 + *(_DWORD *)&v1->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0]) = 0;
    v2 += 4;
  }
  while ( v2 < 0xF0 );
  CollectWin::InitRewardInfo(v1);
  CollectWin::InitCardInfo(v1);
}

//----- (004F2410) --------------------------------------------------------
void __thiscall CollectWin::UpdateMain(CollectWin *this, unsigned int uiRewardGrade)
{
  CollectWin *v2; // edi@1
  bool v3; // zf@1
  std::_List_iterator<std::_List_val<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > > v4; // eax@2
  unsigned int v5; // ebx@2
  int v6; // esi@4
  unsigned int v7; // ecx@4
  int v8; // edx@5
  int v9; // eax@9
  unsigned int v10; // ecx@11
  unsigned int v11; // ebx@11
  unsigned int v12; // edi@11
  int v13; // eax@11
  CardSlotWin *v14; // esi@11
  CardSlotWin *v15; // esi@18
  unsigned int v16; // ebx@21
  int v17; // esi@22
  unsigned int v18; // edi@22
  int j; // eax@22
  int v20; // ecx@27
  CollectWin *v21; // edi@31
  CollectMainWin *v22; // esi@31
  unsigned int v23; // eax@33
  CollectWin::sRewardInfo *v24; // ebx@33
  int v25; // ecx@33
  void *v26; // esi@33
  CollectWin::sRewardInfo *v27; // eax@33
  int v28; // edi@35
  int v29; // edi@38
  int v30; // ecx@39
  int v31; // ecx@40
  int v32; // edx@40
  unsigned int v33; // edx@42
  int v34; // ecx@47
  int v35; // ecx@48
  int v36; // ecx@50
  int v37; // ecx@51
  int v38; // edx@51
  unsigned int v39; // edx@53
  unsigned int v40; // ecx@63
  unsigned int v41; // edx@71
  CollectMainWin *v42; // edi@74
  std::vector<CollectWin::sRewardInfo,std::allocator<CollectWin::sRewardInfo> > kRewardInfos; // [sp+0h] [bp-44h]@33
  unsigned int uiStar; // [sp+10h] [bp-34h]@11
  int uiRewardPage; // [sp+14h] [bp-30h]@10
  CollectWin *v46; // [sp+18h] [bp-2Ch]@1
  std::_List_iterator<std::_List_val<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > > iter; // [sp+1Ch] [bp-28h]@2
  int i; // [sp+20h] [bp-24h]@2
  int uiRegistCounts[4]; // [sp+24h] [bp-20h]@27
  unsigned int v50; // [sp+34h] [bp-10h]@1
  int v51; // [sp+40h] [bp-4h]@33
  int v52; // [sp+44h] [bp+0h]@1

  v50 = (unsigned int)&v52 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pkMainWin == 0;
  v46 = this;
  if ( !v3 )
  {
    std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::sort<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(
      &this->m_kNewestInfos,
      CollectWin::sNewestInfo::SortRegistTime);
    v4 = (std::_List_iterator<std::_List_val<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > >)**(_DWORD **)&v2->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = 0;
    i = 0;
    iter = v4;
    while ( iter != *(_DWORD *)&v2->m_kNewestInfos.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      v6 = *(_DWORD *)&v2->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      v7 = 0;
      if ( (signed int)((char *)v2->m_kCardInfos.baseclass_0._Mylast - v6) / 20 )
      {
        v8 = v6 + 4;
        while ( *(_DWORD *)v8 != *(_DWORD *)(*(_DWORD *)&iter + 12) )
        {
          ++v7;
          v8 += 20;
          if ( v7 >= (signed int)((char *)v2->m_kCardInfos.baseclass_0._Mylast - v6) / 20 )
            goto LABEL_14;
        }
        v9 = v6 + 20 * v7;
        if ( v9 )
        {
          uiRewardPage = *(_DWORD *)(v9 + 16);
          if ( uiRewardPage > 0 )
          {
            v10 = *(_DWORD *)(v9 + 8);
            v11 = *(_DWORD *)(v9 + 12);
            v12 = *(_DWORD *)(v9 + 4);
            v13 = *(_DWORD *)&v46->m_pkMainWin->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0];
            uiStar = v10;
            v14 = *(CardSlotWin **)(v13 + 4 * i);
            if ( v14 )
            {
              v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                (NiRefObject *)v14,
                v12 != 0);
              CardSlotWin::SetInfo(v14, v12, uiStar, v11, uiRewardPage);
            }
            ++i;
            v2 = v46;
          }
        }
LABEL_14:
        v5 = i;
      }
      iter = (std::_List_iterator<std::_List_val<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > >)**(_DWORD **)&iter;
      if ( v5 >= 4 )
        goto LABEL_21;
    }
    for ( ; v5 < 4; ++v5 )
    {
      v15 = *(CardSlotWin **)(*(_DWORD *)&v2->m_pkMainWin->m_kCardSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
      if ( v15 )
      {
        v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v15,
          0);
        CardSlotWin::SetInfo(v15, 0, 0, 0, 0);
      }
    }
LABEL_21:
    v16 = 0;
    do
    {
      v17 = *(_DWORD *)&v46->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      v18 = 0;
      for ( j = (signed int)((char *)v46->m_kCardInfos.baseclass_0._Mylast - v17) / 20; j; --j )
      {
        if ( *(_DWORD *)v17 == v16 && *(_DWORD *)(v17 + 16) > 0 )
          ++v18;
        v17 += 20;
      }
      uiRegistCounts[v16] = v18;
      *(float *)&uiRewardPage = (double)v18;
      v20 = *(_DWORD *)(*(_DWORD *)&v46->m_pkMainWin->m_kBars.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v16 + 4);
      if ( v20 && *(float *)&uiRewardPage != *(float *)(v20 + 300) )
      {
        *(float *)(v20 + 300) = *(float *)&uiRewardPage;
        PgWinBar::OnChangeValue((PgWinBar *)v20);
      }
      ++v16;
    }
    while ( v16 < 4 );
    v21 = v46;
    v22 = v46->m_pkMainWin;
    if ( v22->m_uiRewardGrade != uiRewardGrade )
      v22->m_uiRewardPage = 0;
    v23 = CollectCardRewardTab::GetCountByRewardGrade(uiRewardGrade);
    v22->m_uiRewardGrade = uiRewardGrade;
    v22->m_uiLastRewardPage = v23 - 1;
    uiRewardPage = v21->m_pkMainWin->m_uiRewardPage;
    v24 = 0;
    v25 = (signed int)((char *)v21->m_kRewardInfos.baseclass_0._Mylast
                     - *(_DWORD *)&v21->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0]) >> 4;
    v26 = 0;
    v27 = 0;
    i = v25;
    *(_DWORD *)&kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kRewardInfos.baseclass_0._Mylast = 0;
    kRewardInfos.baseclass_0._Myend = 0;
    v51 = 0;
    uiStar = 0;
    if ( v25 )
    {
      iter = 0;
      while ( 1 )
      {
        v28 = *(_DWORD *)&v21->m_kRewardInfos.baseclass_0.___u0.baseclass_0.dummy[0] + *(_DWORD *)&iter;
        if ( *(_DWORD *)v28 == uiRewardGrade )
          break;
LABEL_62:
        *(_DWORD *)&iter += 16;
        v21 = v46;
        ++uiStar;
        if ( uiStar >= v25 )
          goto LABEL_63;
      }
      if ( v28 >= (unsigned int)v27 || (unsigned int)v26 > v28 )
      {
        if ( v27 == v24 )
        {
          v36 = (signed int)((char *)v27 - v26) >> 4;
          if ( (unsigned int)v36 > 0xFFFFFFE )
LABEL_64:
            std::_Xlength_error("vector<T> too long");
          v37 = v36 + 1;
          v38 = (signed int)((char *)v24 - v26) >> 4;
          if ( v37 > (unsigned int)v38 )
          {
            if ( 268435455 - ((unsigned int)v38 >> 1) >= v38 )
              v39 = ((unsigned int)v38 >> 1) + v38;
            else
              v39 = 0;
            if ( v39 < v37 )
              v39 = v37;
            std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::reserve(
              (std::vector<NiColorA,std::allocator<NiColorA> > *)&kRewardInfos,
              v39);
            v24 = kRewardInfos.baseclass_0._Myend;
            v27 = kRewardInfos.baseclass_0._Mylast;
            v26 = *(void **)&kRewardInfos;
          }
        }
        if ( !v27 )
          goto LABEL_61;
        v27->m_uiRewardGrade = *(_DWORD *)v28;
        v27->m_uiRewardID = *(_DWORD *)(v28 + 4);
        v27->m_uiCount = *(_DWORD *)(v28 + 8);
        v35 = *(_DWORD *)(v28 + 12);
      }
      else
      {
        v29 = v28 - (_DWORD)v26;
        if ( v27 == v24 )
        {
          v30 = (signed int)((char *)v27 - v26) >> 4;
          if ( (unsigned int)v30 > 0xFFFFFFE )
            goto LABEL_64;
          v31 = v30 + 1;
          v32 = (signed int)((char *)v24 - v26) >> 4;
          if ( v31 > (unsigned int)v32 )
          {
            if ( 268435455 - ((unsigned int)v32 >> 1) >= v32 )
              v33 = ((unsigned int)v32 >> 1) + v32;
            else
              v33 = 0;
            if ( v33 < v31 )
              v33 = v31;
            std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::reserve(
              (std::vector<NiColorA,std::allocator<NiColorA> > *)&kRewardInfos,
              v33);
            v24 = kRewardInfos.baseclass_0._Myend;
            v27 = kRewardInfos.baseclass_0._Mylast;
            v26 = *(void **)&kRewardInfos;
          }
        }
        v34 = (int)((char *)v26 + (v29 & 0xFFFFFFF0));
        if ( !v27 )
          goto LABEL_61;
        v27->m_uiRewardGrade = *(_DWORD *)v34;
        v27->m_uiRewardID = *(_DWORD *)(v34 + 4);
        v27->m_uiCount = *(_DWORD *)(v34 + 8);
        v35 = *(_DWORD *)(v34 + 12);
      }
      *(_DWORD *)&v27->m_bCompleted = v35;
LABEL_61:
      v25 = i;
      ++v27;
      kRewardInfos.baseclass_0._Mylast = v27;
      goto LABEL_62;
    }
LABEL_63:
    v40 = 0;
    switch ( uiRewardGrade )
    {
      case 0u:
        v40 = uiRegistCounts[0] + uiRegistCounts[1] + uiRegistCounts[2] + uiRegistCounts[3];
        break;
      case 1u:
        v40 = uiRegistCounts[0];
        break;
      case 2u:
        v40 = uiRegistCounts[1];
        break;
      case 3u:
        v40 = uiRegistCounts[2];
        break;
      case 4u:
        v40 = uiRegistCounts[3];
        break;
      default:
        break;
    }
    if ( uiRewardPage < (unsigned int)((signed int)((char *)v27 - v26) >> 4) )
    {
      v41 = 0;
      if ( *(float *)&uiRewardPage != 0.0 )
        v41 = *((_DWORD *)v26 + 4 * uiRewardPage - 2);
      CollectMainWin::SetReward(
        v21->m_pkMainWin,
        *((_DWORD *)v26 + 4 * uiRewardPage + 1),
        *((_DWORD *)v26 + 4 * uiRewardPage + 2),
        v41,
        v40,
        *((_BYTE *)v26 + 16 * uiRewardPage + 12));
    }
    v42 = v21->m_pkMainWin;
    CollectMainWin::UpdateBar(v42);
    CollectMainWin::UpdateCheckBox(v42);
    if ( v26 )
      operator delete(v26);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004F2870) --------------------------------------------------------
void __thiscall CollectWin::OnSelectMenu(CollectWin *this, CollectWin::eMenuType eType)
{
  CollectWin *v2; // esi@1
  unsigned int v3; // ebx@1
  CollectCardListWin *v4; // edi@3
  CollectPageWin *v5; // eax@3
  PgWinSpr *v6; // ecx@5
  CollectCardListWin *v7; // edi@8
  unsigned int v8; // eax@8
  PgWinSpr *v9; // ecx@8

  v2 = this;
  v3 = eType - 2;
  switch ( eType )
  {
    case 0:
      ((void (__stdcall *)(_DWORD))this->m_pkMainWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkCardListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      CollectWin::UpdateMain(v2, 0);
      break;
    case 1:
      ((void (__stdcall *)(_DWORD))this->m_pkMainWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkCardListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v4 = v2->m_pkCardListWin;
      v4->m_eCardListType = 0;
      CollectCardListWin::ResetReward(v4);
      v5 = v4->m_pkPageWin;
      if ( v5 )
      {
        v5->m_uiPage = 0;
        v4->m_pkPageWin->m_uiLastPage = 4;
        v4->m_pkPageWin->m_uiUpdateMsg = 0;
        v4->m_pkPageWin->m_uiUpdateMsgParam = 0;
        CollectPageWin::Update(v4->m_pkPageWin);
      }
      v6 = v4->m_pkRewardPanel;
      if ( v6 )
        ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4->m_eCardListType == 1);
      CollectWin::UpdateBookmark(v2);
      break;
    case 2:
    case 3:
    case 4:
    case 5:
      ((void (__stdcall *)(_DWORD))this->m_pkMainWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkCardListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v7 = v2->m_pkCardListWin;
      v7->m_eCardListType = 1;
      v8 = CollectCardTab::GetCountByGrade(v3);
      CollectCardListWin::SetPage(v7, 0, (v8 - 1) / 0xC, 1u, v3);
      v9 = v7->m_pkRewardPanel;
      if ( v9 )
        ((void (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7->m_eCardListType == 1);
      CollectWin::UpdateGrade(v2, v3);
      break;
    default:
      return;
  }
}

//----- (004F2A10) --------------------------------------------------------
void __thiscall CollectWin::SetRegistPage(CollectWin *this, unsigned int uiCardID)
{
  int v2; // eax@1
  unsigned int v3; // ebx@2
  unsigned int v4; // esi@4
  void *v5; // eax@5
  void *v6; // edi@5
  int v7; // esi@9
  int v8; // eax@9
  unsigned int v9; // ecx@9
  CollectCardListWin *v10; // ecx@14
  CollectWin *thisa; // [sp+8h] [bp-8h]@1
  unsigned int uiCount; // [sp+Ch] [bp-4h]@9

  v2 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
  thisa = this;
  if ( v2 )
    v3 = *(_DWORD *)(v2 + 40);
  else
    v3 = 0;
  v4 = 0;
  if ( v3 )
  {
    while ( 1 )
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v4);
      v6 = v5;
      if ( v5 )
      {
        if ( *(_WORD *)v5 == (_WORD)uiCardID )
          break;
      }
      ++v4;
      if ( v4 >= v3 )
        return;
    }
    v7 = *(_DWORD *)&thisa->m_kCardInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    v8 = (signed int)((char *)thisa->m_kCardInfos.baseclass_0._Mylast - v7) / 20;
    uiCount = 0;
    v9 = 0;
    if ( (signed int)((char *)thisa->m_kCardInfos.baseclass_0._Mylast - v7) / 20 )
    {
      do
      {
        if ( *(_DWORD *)(v7 + 4) == uiCardID )
          break;
        if ( *(_DWORD *)v7 == *(_DWORD *)((char *)v6 + 34) )
          ++uiCount;
        ++v9;
        v7 += 20;
      }
      while ( v9 < v8 );
    }
    CollectWin::OnSelectMenu(thisa, (CollectWin::eMenuType)(*(_DWORD *)((char *)v6 + 34) + 2));
    v10 = thisa->m_pkCardListWin;
    if ( v10 )
    {
      if ( v10->m_pkPageWin )
      {
        v10->m_pkPageWin->m_uiPage = uiCount / 0xC;
        CollectPageWin::Update(v10->m_pkPageWin);
      }
    }
    CollectWin::UpdateGrade(thisa, *(_DWORD *)((char *)v6 + 34));
  }
}
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004F2B20) --------------------------------------------------------
void __thiscall CollectWin::Update(CollectWin *this, unsigned int uiGrade)
{
  CollectWin *v2; // esi@1
  CollectCardListWin::eCardListType v3; // eax@7

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    if ( v2->m_pkMainWin
      && (unsigned __int8)((int (*)(void))v2->m_pkMainWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      CollectWin::UpdateMain(v2, 0);
    }
    else
    {
      if ( v2->m_pkCardListWin
        && (unsigned __int8)((int (*)(void))v2->m_pkCardListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        v3 = v2->m_pkCardListWin->m_eCardListType;
        if ( v3 )
        {
          if ( v3 == 1 )
            CollectWin::UpdateGrade(v2, uiGrade);
        }
        else
        {
          CollectWin::UpdateBookmark(v2);
        }
      }
    }
  }
}

//----- (004F2BB0) --------------------------------------------------------
bool __thiscall CollectWin::Create(CollectWin *this, PgFrameWork *pkFrameWork, bool bPeeping)
{
  CollectWin *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  PgFont *v8; // eax@11
  PgWinText *v9; // edi@11
  char *v10; // eax@14
  PgSprData *v11; // eax@14
  PgSprData *v12; // edi@14
  PgSprData *v13; // edi@14
  PgSprData *v14; // eax@14
  PgSprData *v15; // eax@14
  char *v16; // eax@14
  char *v17; // ecx@14
  char v18; // dl@15
  char *v19; // eax@16
  char *v20; // ecx@16
  char v21; // dl@17
  char *v22; // eax@18
  char *v23; // ecx@18
  char v24; // dl@19
  char *v25; // eax@20
  char *v26; // ecx@20
  char v27; // dl@21
  char *v28; // eax@22
  char *v29; // ecx@22
  char v30; // dl@23
  char *v31; // eax@24
  unsigned int v32; // eax@24
  NiNode *v33; // edi@26
  char *v34; // eax@26
  PgSprData *v35; // edi@26
  char *v36; // eax@26
  char *v37; // eax@26
  PgWin *v38; // edi@26
  char *v39; // eax@27
  CollectMainWin *v40; // eax@30
  NiNode *v41; // ecx@30
  CollectCardListWin *v42; // eax@30
  PgFrameWork *v43; // edi@31
  int v44; // edi@31
  CollectPopupWin *v45; // edi@33
  NiRefObjectVtbl *v46; // edx@33
  NiAVObject *v47; // eax@33
  void *(__thiscall *v48)(NiRefObject *, unsigned int); // edx@33
  int v49; // eax@33
  unsigned int v50; // eax@34
  NiNode *v51; // esi@37
  unsigned int v52; // [sp+20h] [bp-1A0h]@1
  unsigned int v53; // [sp+20h] [bp-1A0h]@12
  unsigned int uiWidth; // [sp+30h] [bp-190h]@1
  unsigned int *v55; // [sp+34h] [bp-18Ch]@26
  unsigned int uiHeight; // [sp+38h] [bp-188h]@1
  unsigned int i; // [sp+3Ch] [bp-184h]@24
  PgFrameWork *v58; // [sp+40h] [bp-180h]@1
  unsigned int v59; // [sp+44h] [bp-17Ch]@24
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v60; // [sp+48h] [bp-178h]@26
  NiAVObject *pkObject; // [sp+4Ch] [bp-174h]@26
  int iTop; // [sp+50h] [bp-170h]@1
  int iLeft; // [sp+54h] [bp-16Ch]@1
  NiTexturePalette *pTexturePalette; // [sp+58h] [bp-168h]@1
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-164h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kGradeNodeName[6]; // [sp+60h] [bp-160h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kGradeToolTip[6]; // [sp+108h] [bp-B8h]@14
  unsigned int v68; // [sp+1B0h] [bp-10h]@1
  int v69; // [sp+1BCh] [bp-4h]@1
  int v70; // [sp+1C0h] [bp+0h]@1

  v68 = (unsigned int)&v70 ^ __security_cookie;
  v52 = (unsigned int)&v70 ^ __security_cookie;
  v3 = this;
  v58 = pkFrameWork;
  spNode.m_pObject = 0;
  v69 = 0;
  uiWidth = 0;
  uiHeight = 0;
  iLeft = 0;
  iTop = 0;
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\Collect_Main.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v5, 0, pkFrameWork, "CollectWin", 0)
    || !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v69 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = Font::Get(MAIN_MENU);
  v9 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v8, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v9,
    5,
    v52);
  if ( bPeeping )
    v53 = -2019657590;
  else
    v53 = -2136179776;
  v10 = TextData2::Get(v53);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)v10);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Theme", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v11, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(iLeft, iTop, v12, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, 0);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
  PgWinBut::CreateWin(iLeft, iTop, v13, &v3->baseclass_0.baseclass_0.baseclass_0, 8u, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v14, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v15, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  kGradeNodeName[0].baseclass_0._Myres = 15;
  kGradeNodeName[0].baseclass_0._Mysize = 0;
  kGradeNodeName[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kGradeNodeName, "Main", 4u);
  LOBYTE(v69) = 1;
  kGradeNodeName[1].baseclass_0._Myres = 15;
  kGradeNodeName[1].baseclass_0._Mysize = 0;
  kGradeNodeName[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGradeNodeName[1], "MyList", 6u);
  LOBYTE(v69) = 2;
  kGradeNodeName[2].baseclass_0._Myres = 15;
  kGradeNodeName[2].baseclass_0._Mysize = 0;
  kGradeNodeName[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGradeNodeName[2], "SRank", 5u);
  LOBYTE(v69) = 3;
  kGradeNodeName[3].baseclass_0._Myres = 15;
  kGradeNodeName[3].baseclass_0._Mysize = 0;
  kGradeNodeName[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGradeNodeName[3], "ARank", 5u);
  LOBYTE(v69) = 4;
  kGradeNodeName[4].baseclass_0._Myres = 15;
  kGradeNodeName[4].baseclass_0._Mysize = 0;
  kGradeNodeName[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGradeNodeName[4], "BRank", 5u);
  LOBYTE(v69) = 5;
  kGradeNodeName[5].baseclass_0._Myres = 15;
  kGradeNodeName[5].baseclass_0._Mysize = 0;
  kGradeNodeName[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGradeNodeName[5], "CRank", 5u);
  LOBYTE(v69) = 6;
  v16 = TextData2::Get(0x29B78270u);
  v17 = v16;
  kGradeToolTip[0].baseclass_0._Myres = 15;
  kGradeToolTip[0].baseclass_0._Mysize = 0;
  kGradeToolTip[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pTexturePalette = (NiTexturePalette *)(v16 + 1);
  do
    v18 = *v17++;
  while ( v18 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    kGradeToolTip,
    v16,
    v17 - (char *)pTexturePalette);
  LOBYTE(v69) = 7;
  v19 = TextData2::Get(0x9402D28u);
  v20 = v19;
  kGradeToolTip[1].baseclass_0._Myres = 15;
  kGradeToolTip[1].baseclass_0._Mysize = 0;
  kGradeToolTip[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pTexturePalette = (NiTexturePalette *)(v19 + 1);
  do
    v21 = *v20++;
  while ( v21 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kGradeToolTip[1],
    v19,
    v20 - (char *)pTexturePalette);
  LOBYTE(v69) = 8;
  v22 = TextData2::Get(0xCCF8BD24u);
  v23 = v22;
  kGradeToolTip[2].baseclass_0._Myres = 15;
  kGradeToolTip[2].baseclass_0._Mysize = 0;
  kGradeToolTip[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pTexturePalette = (NiTexturePalette *)(v22 + 1);
  do
    v24 = *v23++;
  while ( v24 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kGradeToolTip[2],
    v22,
    v23 - (char *)pTexturePalette);
  LOBYTE(v69) = 9;
  v25 = TextData2::Get(0xBAF8BD24u);
  v26 = v25;
  kGradeToolTip[3].baseclass_0._Myres = 15;
  kGradeToolTip[3].baseclass_0._Mysize = 0;
  kGradeToolTip[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pTexturePalette = (NiTexturePalette *)(v25 + 1);
  do
    v27 = *v26++;
  while ( v27 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kGradeToolTip[3],
    v25,
    v26 - (char *)pTexturePalette);
  LOBYTE(v69) = 10;
  v28 = TextData2::Get(0xBBF8BD24u);
  v29 = v28;
  kGradeToolTip[4].baseclass_0._Myres = 15;
  kGradeToolTip[4].baseclass_0._Mysize = 0;
  kGradeToolTip[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pTexturePalette = (NiTexturePalette *)(v28 + 1);
  do
    v30 = *v29++;
  while ( v30 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kGradeToolTip[4],
    v28,
    v29 - (char *)pTexturePalette);
  LOBYTE(v69) = 11;
  v31 = TextData2::Get(0xBCF8BD24u);
  kGradeToolTip[5].baseclass_0._Myres = 15;
  kGradeToolTip[5].baseclass_0._Mysize = 0;
  kGradeToolTip[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGradeToolTip[5], v31, strlen(v31));
  v32 = 0;
  LOBYTE(v69) = 12;
  i = 0;
  v59 = 0;
  pTexturePalette = (NiTexturePalette *)6;
  while ( 1 )
  {
    v55 = (unsigned int *)((char *)&kGradeNodeName[0].baseclass_0._Myres + v32);
    v60 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)kGradeNodeName + v32);
    v33 = spNode.m_pObject;
    v34 = fs("%sNor");
    v35 = PgSprData::Create(&v33->baseclass_0, v34, &iLeft, &iTop, 0);
    pkObject = (NiAVObject *)spNode.m_pObject;
    v36 = fs("%sClick");
    PgSprData::Add(v35, pkObject, v36);
    pkObject = (NiAVObject *)spNode.m_pObject;
    v37 = fs("%sOver");
    PgSprData::Add(v35, pkObject, v37);
    v38 = (PgWin *)PgWinBut::CreateWin(iLeft, iTop, v35, &v3->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor((NiRefObject *)v38, i);
    v38->m_pkToolTipWin = g_pkToolTipWin;
    v39 = (char *)(kGradeToolTip[v59 / 0x1C].baseclass_0._Myres < 0x10 ? &kGradeToolTip[v59 / 0x1C] : *(_DWORD *)&kGradeToolTip[v59 / 0x1C].baseclass_0.___u0.baseclass_0.dummy[0]);
    PgWin::SetToolTipWinText(v38, v39);
    v59 += 28;
    ++i;
    pTexturePalette = (NiTexturePalette *)((char *)pTexturePalette - 1);
    if ( !pTexturePalette )
      break;
    v32 = v59;
  }
  v40 = CollectMainWin::CreateWin(spNode.m_pObject, &v3->baseclass_0.baseclass_0.baseclass_0, bPeeping);
  v41 = spNode.m_pObject;
  v3->m_pkMainWin = v40;
  v42 = CollectCardListWin::CreateWin(v41, &v3->baseclass_0.baseclass_0.baseclass_0, bPeeping);
  v3->m_pkCardListWin = v42;
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v42,
    0);
  if ( !bPeeping )
  {
    v43 = v58;
    v3->m_pkRwChoiceWin = CollectRwChoiceWin::CreateWin(v58);
    v3->m_pkCardChoiceWin = CollectCardChoiceWin::CreateWin(v43);
    v44 = (int)v3->m_pkPopupWin;
    pTexturePalette = (NiTexturePalette *)2;
    do
    {
      *(_DWORD *)v44 = CollectPopupWin::CreateWin(v58);
      v44 += 4;
      pTexturePalette = (NiTexturePalette *)((char *)pTexturePalette - 1);
    }
    while ( pTexturePalette );
    v45 = v3->m_pkPopupWin[0];
    v46 = v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v58 = (PgFrameWork *)&v3->m_pkPopupWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44];
    v47 = (NiAVObject *)((int (__thiscall *)(CollectPopupWin *))v46[42].__vecDelDtor)(v45);
    v48 = v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    pkObject = v47;
    v49 = ((int (__thiscall *)(CollectPopupWin *))v48)(v45);
    ((void (__thiscall *)(CollectPopupWin *, char *))v58->baseclass_0.vfptr)(
      v3->m_pkPopupWin[1],
      (char *)pkObject + v49);
  }
  std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::resize(&v3->m_kNewestInfos, 0);
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v3->m_kBookmarkInfos,
    0x3Cu);
  v50 = 0;
  do
  {
    *(_DWORD *)(v50 + *(_DWORD *)&v3->m_kBookmarkInfos.baseclass_0.___u0.baseclass_0.dummy[0]) = 0;
    v50 += 4;
  }
  while ( v50 < 0xF0 );
  CollectWin::InitRewardInfo(v3);
  CollectWin::InitCardInfo(v3);
  ((void (__thiscall *)(CollectWin *, unsigned int, unsigned int, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5);
  CollectWin::Update(v3, 0);
  LOBYTE(v69) = 6;
  _eh_vector_destructor_iterator_(
    kGradeToolTip,
    0x1Cu,
    6,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  LOBYTE(v69) = 0;
  _eh_vector_destructor_iterator_(
    kGradeNodeName,
    0x1Cu,
    6,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  v69 = -1;
  if ( spNode.m_pObject )
  {
    v51 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v51 )
        v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v51, 1u);
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F34C0) --------------------------------------------------------
void __thiscall CollectWin::OnCommand(CollectWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 1u:
      CollectWin::OnSelectMenu(this, (CollectWin::eMenuType)lParam);
      break;
    case 2u:
      CollectWin::UpdateMain(this, lParam);
      break;
    case 3u:
      CollectWin::UpdateBookmark(this);
      break;
    case 4u:
      CollectWin::UpdateGrade(this, lParam);
      break;
    case 8u:
      CollectWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (004F3540) --------------------------------------------------------
void __thiscall CollectWin::OnShowWin(CollectWin *this)
{
  CollectWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMainWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkCardListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  CollectWin::UpdateMain(v1, 0);
}

//----- (004F3580) --------------------------------------------------------
unsigned int __cdecl CollectCardTab::GetCountByGrade(unsigned int uiGrade)
{
  int v1; // eax@1
  unsigned int v2; // ebx@1
  unsigned int v3; // edi@2
  unsigned int v4; // esi@4
  void *v5; // eax@5

  v1 = *(_DWORD *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v3 = *(_DWORD *)(v1 + 40);
  else
    v3 = 0;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<CollectCard_CollectCardTab>::ms_pkTable + 4), v4);
      if ( v5 && *(_DWORD *)((char *)v5 + 34) == uiGrade )
        ++v2;
      ++v4;
    }
    while ( v4 < v3 );
  }
  return v2;
}
// A97ECC: using guessed type int ITableBase_CollectCard_CollectCardTab___ms_pkTable;

//----- (004F35D0) --------------------------------------------------------
unsigned int __cdecl CollectCardRewardTab::GetCountByRewardGrade(unsigned int uiRewardGrade)
{
  int v1; // eax@1
  int v2; // edi@1
  unsigned int v3; // ebx@2
  unsigned int v4; // esi@4
  void *v5; // eax@5
  unsigned int result; // eax@10
  unsigned int uiCount; // [sp+Ch] [bp-4h]@1

  v1 = *(_DWORD *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 56);
  v2 = 0;
  uiCount = 0;
  if ( v1 )
    v3 = *(_DWORD *)(v1 + 40);
  else
    v3 = 0;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<CollectCardReward_CollectCardRewardTab>::ms_pkTable + 4),
             v4);
      if ( v5 && *(_WORD *)v5 != v2 )
      {
        if ( *(_DWORD *)((char *)v5 + 2) == uiRewardGrade )
        {
          ++uiCount;
          v2 = *(_WORD *)v5;
        }
      }
      ++v4;
    }
    while ( v4 < v3 );
    result = uiCount;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97ED8: using guessed type int ITableBase_CollectCardReward_CollectCardRewardTab___ms_pkTable;

//----- (004F3640) --------------------------------------------------------
CollectCardChoiceWin::sRegistCardInfo *__cdecl std::_Move<CollectWin::sCardInfo___CollectWin::sCardInfo__>(CollectCardChoiceWin::sRegistCardInfo *_First, CollectCardChoiceWin::sRegistCardInfo *_Last, CollectCardChoiceWin::sRegistCardInfo *_Dest)
{
  CollectCardChoiceWin::sRegistCardInfo *v3; // ecx@1
  CollectCardChoiceWin::sRegistCardInfo *result; // eax@1

  v3 = _First;
  for ( result = _Dest; v3 != _Last; ++result )
  {
    result->m_uiGrade = v3->m_uiGrade;
    result->m_uiCardID = v3->m_uiCardID;
    result->m_uiStar = v3->m_uiStar;
    result->m_uiSerial = v3->m_uiSerial;
    result->m_tRegistTime = v3->m_tRegistTime;
    ++v3;
  }
  return result;
}

//----- (004F3680) --------------------------------------------------------
CollectCardChoiceWin::sRegistCardInfo *__cdecl std::_Uninit_move<CollectCardChoiceWin::sRegistCardInfo___CollectCardChoiceWin::sRegistCardInfo___std::allocator<CollectCardChoiceWin::sRegistCardInfo>_CollectCardChoiceWin::sRegistCardInfo>(CollectCardChoiceWin::sRegistCardInfo *_First, CollectCardChoiceWin::sRegistCardInfo *_Last, CollectCardChoiceWin::sRegistCardInfo *_Dest, std::allocator<CollectCardChoiceWin::sRegistCardInfo> *_Al, CollectCardChoiceWin::sRegistCardInfo *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  CollectCardChoiceWin::sRegistCardInfo *v6; // ecx@1
  CollectCardChoiceWin::sRegistCardInfo *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
    {
      result->m_uiGrade = v6->m_uiGrade;
      result->m_uiCardID = v6->m_uiCardID;
      result->m_uiStar = v6->m_uiStar;
      result->m_uiSerial = v6->m_uiSerial;
      result->m_tRegistTime = v6->m_tRegistTime;
    }
    ++v6;
  }
  return result;
}

//----- (004F36C0) --------------------------------------------------------
void __cdecl std::_Uninit_def_fill_n<CollectWin::sCardInfo___unsigned_int_CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>_CollectWin::sCardInfo>(CollectWin::sCardInfo *_First, unsigned int _Count, CollectWin::sCardInfo *__formal, std::allocator<CollectWin::sCardInfo> *_Al, CollectWin::sCardInfo *a5, std::_Nonscalar_ptr_iterator_tag a6)
{
  unsigned int v6; // edx@1
  CollectWin::sCardInfo *v7; // eax@2

  v6 = _Count;
  if ( _Count )
  {
    v7 = _First;
    do
    {
      if ( v7 )
      {
        v7->m_uiGrade = 0;
        v7->m_uiCardID = 0;
        v7->m_uiStar = 0;
        v7->m_uiSerial = 0;
        v7->m_tRegistTime = 0;
      }
      ++v7;
      --v6;
    }
    while ( v6 );
  }
}

//----- (004F36F0) --------------------------------------------------------
void __cdecl std::_Uninit_def_fill_n<CollectWin::sNewestInfo___int_CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>_CollectWin::sNewestInfo>(CollectWin::sNewestInfo *_First, int _Count, CollectWin::sNewestInfo *__formal, std::allocator<CollectWin::sNewestInfo> *_Al, CollectWin::sNewestInfo *a5, std::_Nonscalar_ptr_iterator_tag a6)
{
  int v6; // ecx@1
  CollectWin::sNewestInfo *v7; // eax@2

  v6 = _Count;
  if ( _Count > 0 )
  {
    v7 = _First;
    do
    {
      if ( v7 )
      {
        v7->m_tRegistTime = 0;
        v7->m_uiCardID = 0;
      }
      --v6;
      ++v7;
    }
    while ( v6 > 0 );
  }
}

//----- (004F3720) --------------------------------------------------------
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this)
{
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+4h] [bp-10h]@3
  char *_What; // [sp+10h] [bp-4h]@3

  v1 = this;
  this->baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x10u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004F3780) --------------------------------------------------------
std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *__thiscall std::_List_val<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::_Buynode(std::_List_val<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> > *this, std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *_Next, std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *_Prev, GameFrameWork::AttackedMsg::AttackedFrom *_Val)
{
  std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *result; // eax@1
  std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *v5; // edx@2
  GameFrameWork::AttackedMsg::AttackedFrom *v6; // edx@3
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *)operator new(0x10u);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<GameFrameWork::AttackedMsg::AttackedFrom,std::allocator<GameFrameWork::AttackedMsg::AttackedFrom> >::_Node *)-8 )
  {
    v6 = _Val;
    *(_DWORD *)&result->_Myval.m_kAttacker = *(_DWORD *)&_Val->m_kAttacker;
    result->_Myval.m_fAttackedTime = v6->m_fAttackedTime;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004F37F0) --------------------------------------------------------
void __thiscall std::vector<PgWinText___std::allocator<PgWinText__>>::resize(std::vector<NiTimeController *,std::allocator<NiTimeController *> > *this, unsigned int _Newsize)
{
  std::vector<NiTimeController *,std::allocator<NiTimeController *> > *v2; // esi@1
  NiTimeController **v3; // ecx@1
  int v4; // eax@1
  char *v5; // edi@2
  int v6; // edx@5

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  v4 = (signed int)((char *)v3 - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v4 <= _Newsize )
  {
    if ( v4 < _Newsize )
    {
      std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
        (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v2,
        _Newsize - v4);
      v6 = (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( _Newsize != v6 )
        memset(v2->baseclass_0._Mylast, 0, 4 * (_Newsize - v6));
      v2->baseclass_0._Mylast += _Newsize
                               - ((signed int)((char *)v2->baseclass_0._Mylast
                                             - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    }
  }
  else
  {
    v5 = (char *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * _Newsize);
    if ( (NiTimeController **)v5 != v3 )
    {
      memmove(v5, (char *)v3, 0);
      v2->baseclass_0._Mylast = (NiTimeController **)v5;
    }
  }
}

//----- (004F3880) --------------------------------------------------------
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::pop_back(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this)
{
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v1; // esi@1
  int v2; // ecx@1
  void *v3; // eax@1

  v1 = this;
  v2 = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *(void **)(v2 + 4);
  if ( v3 != (void *)v2 )
  {
    **((_DWORD **)v3 + 1) = *(_DWORD *)v3;
    *(_DWORD *)(*(_DWORD *)v3 + 4) = *((_DWORD *)v3 + 1);
    operator delete(v3);
    --v1->baseclass_0.baseclass_0._Mysize;
  }
}

//----- (004F38B0) --------------------------------------------------------
std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *__thiscall std::_List_val<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::_Buynode(std::_List_val<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *_Next, std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *_Prev)
{
  std::_List_val<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v3; // edi@1
  void *v4; // eax@1
  std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *v5; // esi@1
  std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *v6; // ecx@2
  std::_Nonscalar_ptr_iterator_tag v7; // ST14_1@2
  int v9; // [sp-10h] [bp-30h]@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  void *p; // [sp+Ch] [bp-14h]@1
  int *v12; // [sp+10h] [bp-10h]@1
  int v13; // [sp+1Ch] [bp-4h]@2

  v12 = &v9;
  v3 = this;
  v4 = operator new(0x10u);
  v5 = (std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *)v4;
  p = v4;
  if ( !v4 )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v6 = _Prev;
  v7.dummy[0] = (char)_Next;
  *(_DWORD *)v4 = _Next;
  v13 = 0;
  *((_DWORD *)v4 + 1) = v6;
  std::_Uninit_def_fill_n<CollectWin::sNewestInfo___int_CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>_CollectWin::sNewestInfo>(
    (CollectWin::sNewestInfo *)v4 + 1,
    1,
    0,
    &v3->baseclass_0._Alval,
    0,
    v7);
  return v5;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (004F3970) --------------------------------------------------------
void *__thiscall CollectMainWin::_vector_deleting_destructor_(CollectMainWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CollectMainWin::_CollectMainWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004F39A0) --------------------------------------------------------
void *__thiscall CollectCardListWin::_vector_deleting_destructor_(CollectCardListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CollectCardListWin::_CollectCardListWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004F39D0) --------------------------------------------------------
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::merge<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *_Right, bool (__cdecl *_Pred)(CollectWin::sNewestInfo *, CollectWin::sNewestInfo *))
{
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v3; // edx@1
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v4; // eax@2
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v5; // esi@2
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v6; // edi@2
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v7; // ebx@2
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v8; // edi@5
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v9; // [sp+0h] [bp-Ch]@2
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *thisa; // [sp+4h] [bp-8h]@1
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v11; // [sp+8h] [bp-4h]@2

  v3 = _Right;
  thisa = this;
  if ( _Right != this )
  {
    v4 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v6 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v9 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v11 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v7 == *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
LABEL_9:
      if ( v5 != v4 )
        std::list<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Splice_same(
          (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)this,
          v6,
          (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)v3,
          v5,
          v4,
          v3->baseclass_0.baseclass_0._Mysize);
    }
    else
    {
      while ( v5 != v4 )
      {
        if ( _Pred((CollectWin::sNewestInfo *)(*(_DWORD *)&v5 + 8), (CollectWin::sNewestInfo *)(*(_DWORD *)&v7 + 8)) )
        {
          v8 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v5;
          std::list<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Splice_same(
            (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)thisa,
            v7,
            (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)_Right,
            v5,
            *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)v5,
            1u);
          v5 = v8;
          v6 = v9;
        }
        else
        {
          v7 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v7;
        }
        v4 = v11;
        if ( v7 == v6 )
        {
          v3 = _Right;
          this = thisa;
          goto LABEL_9;
        }
      }
    }
  }
}

//----- (004F3A50) --------------------------------------------------------
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::resize(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, unsigned int _Newsize)
{
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v2; // esi@1
  unsigned int v3; // eax@1
  unsigned int v4; // ebx@1
  int v5; // edi@4
  std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node *v6; // eax@4
  unsigned int v7; // ecx@4
  void *v8; // eax@8
  int v9; // [sp-10h] [bp-24h]@1
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *thisa; // [sp+0h] [bp-14h]@1
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@2
  int _Count; // [sp+1Ch] [bp+8h]@2

  v11 = &v9;
  v2 = this;
  thisa = this;
  v3 = this->baseclass_0.baseclass_0._Mysize;
  v4 = _Newsize;
  if ( _Newsize <= v3 )
  {
    if ( _Newsize < v3 )
    {
      do
      {
        v8 = *(void **)(*(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4);
        if ( v8 != *(void **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
        {
          **((_DWORD **)v8 + 1) = *(_DWORD *)v8;
          *(_DWORD *)(*(_DWORD *)v8 + 4) = *((_DWORD *)v8 + 1);
          operator delete(v8);
          --v2->baseclass_0.baseclass_0._Mysize;
        }
      }
      while ( _Newsize < v2->baseclass_0.baseclass_0._Mysize );
    }
  }
  else
  {
    _Count = 0;
    v12 = 0;
    while ( v2->baseclass_0.baseclass_0._Mysize < v4 )
    {
      v5 = *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v6 = std::_List_val<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::_Buynode(
             &v2->baseclass_0,
             *(std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
             *(std::_List_nod<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> >::_Node **)(*(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4));
      v7 = v2->baseclass_0.baseclass_0._Mysize;
      if ( 536870910 - v7 < 1 )
        std::_Xlength_error("list<T> too long");
      ++_Count;
      v2->baseclass_0.baseclass_0._Mysize = v7 + 1;
      *(_DWORD *)(v5 + 4) = v6;
      v6->_Prev->_Next = v6;
    }
  }
}

//----- (004F3B40) --------------------------------------------------------
void __thiscall std::vector<CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>>::resize(std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *this, unsigned int _Newsize)
{
  std::vector<CollectWin::sCardInfo,std::allocator<CollectWin::sCardInfo> > *v2; // esi@1
  CollectWin::sCardInfo *v3; // ebx@1
  signed int v4; // ecx@1

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  v4 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]);
  if ( v4 / 20 <= _Newsize )
  {
    if ( v4 / 20 < _Newsize )
    {
      std::vector<CollectCardChoiceWin::sRegistCardInfo_std::allocator<CollectCardChoiceWin::sRegistCardInfo>>::_Reserve(
        (std::vector<CollectCardChoiceWin::sRegistCardInfo,std::allocator<CollectCardChoiceWin::sRegistCardInfo> > *)v2,
        _Newsize - v4 / 20);
      std::_Uninit_def_fill_n<CollectWin::sCardInfo___unsigned_int_CollectWin::sCardInfo_std::allocator<CollectWin::sCardInfo>_CollectWin::sCardInfo>(
        v2->baseclass_0._Mylast,
        _Newsize
      - (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) / 20,
        0,
        &v2->baseclass_0._Alval,
        0,
        (std::_Nonscalar_ptr_iterator_tag)_Newsize);
      v2->baseclass_0._Mylast += _Newsize
                               - (signed int)((char *)v2->baseclass_0._Mylast
                                            - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])
                               / 20;
    }
  }
  else
  {
    if ( (CollectWin::sCardInfo *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 20 * _Newsize) != v3 )
      v2->baseclass_0._Mylast = (CollectWin::sCardInfo *)std::_Move<CollectWin::sCardInfo___CollectWin::sCardInfo__>(
                                                           (CollectCardChoiceWin::sRegistCardInfo *)v3,
                                                           (CollectCardChoiceWin::sRegistCardInfo *)v3,
                                                           (CollectCardChoiceWin::sRegistCardInfo *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 20 * _Newsize));
  }
}

//----- (004F3C00) --------------------------------------------------------
void *__thiscall CollectWin::_vector_deleting_destructor_(CollectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CollectWin::_CollectWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (004F3C30) --------------------------------------------------------
void __thiscall std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::sort<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *this, bool (__cdecl *_Pred)(CollectWin::sNewestInfo *, CollectWin::sNewestInfo *))
{
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v2; // esi@1
  bool v3; // cf@1
  void *v4; // eax@2
  void *v5; // ebx@3
  unsigned int v6; // eax@3
  int v7; // eax@4
  int v8; // ecx@4
  void *v9; // edx@4
  int v10; // edi@7
  unsigned int v11; // edi@7
  int v12; // esi@8
  unsigned int v13; // ecx@11
  unsigned int v14; // eax@11
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v15; // eax@16
  void *v16; // ecx@17
  unsigned int v17; // edx@17
  unsigned int v18; // ecx@17
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v19; // edi@23
  char *v20; // eax@26
  void *v21; // eax@29
  void *v22; // esi@30
  std::exception thisa; // [sp+0h] [bp-170h]@34
  char *_What; // [sp+Ch] [bp-164h]@34
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Where; // [sp+10h] [bp-160h]@1
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > _Templist; // [sp+14h] [bp-15Ch]@2
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *v27; // [sp+20h] [bp-150h]@1
  unsigned int _Maxbin; // [sp+24h] [bp-14Ch]@3
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > _Binlist[26]; // [sp+28h] [bp-148h]@3
  unsigned int v30; // [sp+160h] [bp-10h]@1
  int v31; // [sp+16Ch] [bp-4h]@3
  int v32; // [sp+170h] [bp+0h]@1

  v30 = (unsigned int)&v32 ^ __security_cookie;
  v2 = this;
  v3 = this->baseclass_0.baseclass_0._Mysize < 2;
  v27 = this;
  _Where = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)_Pred;
  if ( !v3 )
  {
    _Templist.baseclass_0.baseclass_0._Mysize = 0;
    v4 = operator new(0x10u);
    if ( !v4 )
    {
      _What = 0;
      std::exception::exception(&thisa, (const char *const *)&_What);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
    v5 = v4;
    *(_DWORD *)v4 = v4;
    *(_DWORD *)&_Templist.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v4;
    *((_DWORD *)v4 + 1) = v4;
    v31 = 0;
    _eh_vector_constructor_iterator_(
      _Binlist,
      0xCu,
      26,
      (void (__thiscall *)(void *))std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>,
      (void (__thiscall *)(void *))std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>);
    v6 = 0;
    LOBYTE(v31) = 1;
    _Maxbin = 0;
    if ( v2->baseclass_0.baseclass_0._Mysize )
    {
      do
      {
        v7 = ***(_DWORD ***)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        v8 = **(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        v9 = *(void **)v5;
        if ( &_Templist != v2 )
        {
          if ( 536870910 - _Templist.baseclass_0.baseclass_0._Mysize < 1 )
            std::_Xlength_error("list<T> too long");
          ++_Templist.baseclass_0.baseclass_0._Mysize;
          --v2->baseclass_0.baseclass_0._Mysize;
        }
        **(_DWORD **)(v8 + 4) = v7;
        **(_DWORD **)(v7 + 4) = v9;
        **((_DWORD **)v9 + 1) = v8;
        v10 = *((_DWORD *)v9 + 1);
        *((_DWORD *)v9 + 1) = *(_DWORD *)(v7 + 4);
        *(_DWORD *)(v7 + 4) = *(_DWORD *)(v8 + 4);
        *(_DWORD *)(v8 + 4) = v10;
        v11 = 0;
        if ( !_Maxbin )
          goto LABEL_38;
        v12 = (int)_Binlist;
        do
        {
          if ( !*(_DWORD *)(v12 + 4) )
            break;
          std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::merge<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(
            (std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *)v12,
            &_Templist,
            *(bool (__cdecl **)(CollectWin::sNewestInfo *, CollectWin::sNewestInfo *))&_Where);
          if ( (std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *)v12 == &_Templist )
          {
            v5 = *(void **)&_Templist;
          }
          else
          {
            v5 = *(void **)v12;
            v13 = _Templist.baseclass_0.baseclass_0._Mysize;
            *(_DWORD *)v12 = *(_DWORD *)&_Templist;
            v14 = *(_DWORD *)(v12 + 4);
            *(_DWORD *)&_Templist.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
            *(_DWORD *)(v12 + 4) = v13;
            _Templist.baseclass_0.baseclass_0._Mysize = v14;
          }
          ++v11;
          v12 += 12;
        }
        while ( v11 < _Maxbin );
        if ( v11 == 25 )
        {
          std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::merge<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(
            &_Binlist[24],
            &_Templist,
            *(bool (__cdecl **)(CollectWin::sNewestInfo *, CollectWin::sNewestInfo *))&_Where);
          v5 = *(void **)&_Templist;
          v2 = v27;
        }
        else
        {
LABEL_38:
          v2 = v27;
          v15 = &_Binlist[v11];
          if ( v15 != &_Templist )
          {
            v16 = *(void **)&v15->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
            v17 = _Templist.baseclass_0.baseclass_0._Mysize;
            *(_DWORD *)&v15->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
            v5 = v16;
            v18 = v15->baseclass_0.baseclass_0._Mysize;
            *(_DWORD *)&_Templist.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
            v15->baseclass_0.baseclass_0._Mysize = v17;
            _Templist.baseclass_0.baseclass_0._Mysize = v18;
          }
          if ( v11 == _Maxbin )
            ++_Maxbin;
        }
      }
      while ( v2->baseclass_0.baseclass_0._Mysize );
      v6 = _Maxbin;
    }
    if ( v6 > 1 )
    {
      v19 = &_Binlist[1];
      v27 = (std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *)(v6 - 1);
      do
      {
        std::list<CollectWin::sNewestInfo_std::allocator<CollectWin::sNewestInfo>>::merge<bool____cdecl____CollectWin::sNewestInfo_const___CollectWin::sNewestInfo_const___>(
          v19,
          v19 - 1,
          *(bool (__cdecl **)(CollectWin::sNewestInfo *, CollectWin::sNewestInfo *))&_Where);
        ++v19;
        v27 = (std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *)((char *)v27 - 1);
      }
      while ( v27 );
      v6 = _Maxbin;
    }
    v20 = (char *)(&_Templist.baseclass_0.baseclass_0._Alnod + 12 * v6);
    _Where = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( (char *)v2 != v20 && *((_DWORD *)v20 + 1) )
      std::list<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Splice_same(
        (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)v2,
        _Where,
        (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)v20,
        **(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)v20,
        *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)v20,
        *((_DWORD *)v20 + 1));
    LOBYTE(v31) = 0;
    _eh_vector_destructor_iterator_(
      _Binlist,
      0xCu,
      26,
      (void (__thiscall *)(void *))std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>);
    v21 = *(void **)v5;
    *(_DWORD *)v5 = v5;
    *((_DWORD *)v5 + 1) = v5;
    if ( v21 != v5 )
    {
      do
      {
        v22 = *(void **)v21;
        operator delete(v21);
        v21 = v22;
      }
      while ( v22 != v5 );
    }
    operator delete(v5);
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (004F3F20) --------------------------------------------------------
bool __thiscall DesktopWin::Create(DesktopWin *this, unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork)
{
  DesktopWin *v4; // esi@1
  bool result; // al@1

  v4 = this;
  result = PgWin::Create(&this->baseclass_0, 0, 0, dwScrWidth, dwScrHeight, 0, 0, 0);
  if ( result )
  {
    v4->m_pkFrameWork = pkFrameWork;
    result = 1;
  }
  return result;
}

//----- (004F3F60) --------------------------------------------------------
void __thiscall DesktopWin::DesktopWin(DesktopWin *this)
{
  DesktopWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DesktopWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DesktopWin::_vftable_;
  v1->m_pkFrameWork = 0;
  v1->baseclass_0.m_bDroppable = 1;
}
// 992C70: using guessed type int (__stdcall *DesktopWin___vftable_)(int uiFlags);
// 992C8C: using guessed type int (__thiscall *DesktopWin___vftable_)(void *p, char);

//----- (004F3F90) --------------------------------------------------------
void __thiscall DesktopWin::_DesktopWin(DesktopWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DesktopWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DesktopWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 992C70: using guessed type int (__stdcall *DesktopWin___vftable_)(int uiFlags);
// 992C8C: using guessed type int (__thiscall *DesktopWin___vftable_)(void *p, char);

//----- (004F3FB0) --------------------------------------------------------
void __thiscall ItemDropTask::DirectMessage(ItemDropTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 27 && pvBody && *(_DWORD *)pvBody )
  {
    if ( *(_DWORD *)pvBody == 1 )
      this->baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
  }
}

//----- (004F3FE0) --------------------------------------------------------
void __thiscall DesktopWin::ProcessMeInput(DesktopWin *this, bool *bHit)
{
  DesktopWin *v2; // esi@1

  v2 = this;
  if ( dword_B7035C >= 1
    && (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) == 1 )
  {
    if ( Singleton<CursorState>::getInstance()->m_eState == 1 )
      PgFrameWork::AddMsg(v2->m_pkFrameWork, 0x10Au, 0, 0);
  }
}
// B7035C: using guessed type int dword_B7035C;

//----- (004F4030) --------------------------------------------------------
void __thiscall ItemDropTask::OnStart(ItemDropTask *this)
{
  unsigned __int16 v1; // ax@1
  int v2; // eax@2
  Item *v3; // eax@3
  int v4; // eax@4
  int v5; // eax@6
  int v6; // eax@8
  int v7; // eax@10
  int v8; // eax@12
  char *v9; // esi@17
  bool v10; // zf@17
  DirectUserMsgBody_SendPacket kPacket; // [sp+4h] [bp-Ch]@17

  v1 = this->m_kItemDropPacket.slot.Inven;
  switch ( (unsigned int)this->m_kItemDropPacket.slot.Inven >> 10 )
  {
    case 9u:
      v2 = v1 & 0x3FF;
      if ( (unsigned int)v2 >= 0xC0 )
        goto LABEL_15;
      v3 = g_kInventory.m_aspInv[v2].m_pObject;
      goto LABEL_14;
    case 8u:
      v4 = v1 & 0x3FF;
      if ( (unsigned int)v4 >= 0x1E )
        goto LABEL_15;
      v3 = g_kInventory.m_aspEquip[v4].m_pObject;
      goto LABEL_14;
    case 3u:
      v5 = v1 & 0x3FF;
      if ( (unsigned int)v5 > 0x62 )
        goto LABEL_15;
      v3 = g_kInventory.m_aspMiniHouseFurnitureItemInv[v5].m_pObject;
      goto LABEL_14;
    case 0xDu:
      v6 = v1 & 0x3FF;
      if ( (unsigned int)v6 > 0x62 )
        goto LABEL_15;
      v3 = g_kInventory.m_aspMiniHouseAccessoryItemInv[v6].m_pObject;
      goto LABEL_14;
    case 0xEu:
      v7 = v1 & 0x3FF;
      if ( (unsigned int)v7 > 0x62 )
        goto LABEL_15;
      v3 = g_kInventory.m_aspMiniHouseTileAllItemInv[v7].m_pObject;
      goto LABEL_14;
    case 0x10u:
      v8 = v1 & 0x3FF;
      if ( (unsigned int)v8 > 0x62 )
        goto LABEL_15;
      v3 = g_kInventory.m_aspMiniHouseMinigameAllItemInv[v8].m_pObject;
LABEL_14:
      if ( !v3 )
        goto LABEL_15;
      if ( v3->m_pkInfo )
      {
        kPacket.pvPacket = &this->m_kItemDropPacket;
        v9 = (char *)&this->baseclass_0.baseclass_8;
        this->m_eState = 0;
        v10 = this->baseclass_0.baseclass_8.m_pkMsgHooker == 0;
        *(_DWORD *)&kPacket.wDepartment = 458764;
        kPacket.uiPacketSize = 14;
        if ( !v10 )
        {
          ((void (__stdcall *)(signed int, DirectUserMsgBody_SendPacket *, char *))this->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            23,
            &kPacket,
            v9);
          if ( *((_DWORD *)v9 + 1) )
            (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, char *))(**((_DWORD **)v9 + 1) + 20))(
              23,
              &kPacket,
              v9);
        }
        (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_SendPacket *, char *))(*(_DWORD *)v9 + 20))(
          v9,
          23,
          &kPacket,
          v9);
      }
      else
      {
LABEL_15:
        this->baseclass_0.m_eTaskState = 2;
      }
      break;
    default:
      return;
  }
}

//----- (004F4170) --------------------------------------------------------
bool __thiscall ItemDropTask::OnProcessNetMsg(ItemDropTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  bool result; // al@3
  unsigned __int16 v6; // ax@4
  int v7; // eax@5
  Item *v8; // esi@6
  int v9; // eax@7
  int v10; // eax@9
  int v11; // eax@11
  int v12; // eax@13
  int v13; // eax@15
  CQuest *v14; // edi@19
  int v15; // eax@19
  CQuestVtbl *v16; // esi@19
  int v17; // ebx@19
  unsigned int v18; // eax@19
  ItemDropTask *v19; // [sp+0h] [bp-4h]@1

  v19 = this;
  if ( iDepart == 12 && iCommand == 8 )
  {
    v6 = this->m_kItemDropPacket.slot.Inven;
    switch ( (unsigned int)this->m_kItemDropPacket.slot.Inven >> 10 )
    {
      case 0u:
        v7 = v6 & 0x3FF;
        if ( (unsigned int)v7 >= 0xC0 )
          goto LABEL_20;
        v8 = g_kInventory.m_aspInv[v7].m_pObject;
        goto LABEL_17;
      case 1u:
        v9 = v6 & 0x3FF;
        if ( (unsigned int)v9 >= 0x1E )
          goto LABEL_20;
        v8 = g_kInventory.m_aspEquip[v9].m_pObject;
        goto LABEL_17;
      case 0xEu:
        v10 = v6 & 0x3FF;
        if ( (unsigned int)v10 > 0x62 )
          goto LABEL_20;
        v8 = g_kInventory.m_aspMiniHouseFurnitureItemInv[v10].m_pObject;
        goto LABEL_17;
      case 0xFu:
        v11 = v6 & 0x3FF;
        if ( (unsigned int)v11 > 0x62 )
          goto LABEL_20;
        v8 = g_kInventory.m_aspMiniHouseAccessoryItemInv[v11].m_pObject;
        goto LABEL_17;
      case 0x10u:
        v12 = v6 & 0x3FF;
        if ( (unsigned int)v12 > 0x62 )
          goto LABEL_20;
        v8 = g_kInventory.m_aspMiniHouseTileAllItemInv[v12].m_pObject;
        goto LABEL_17;
      case 0x11u:
        v13 = v6 & 0x3FF;
        if ( (unsigned int)v13 <= 0x62 )
        {
          v8 = g_kInventory.m_aspMiniHouseMinigameAllItemInv[v13].m_pObject;
LABEL_17:
          if ( v8 )
          {
            if ( *(_WORD *)pvData == 769 )
            {
              v14 = QuestDataMgr::GetQuest();
              v15 = v8->m_kStruct.itemid;
              v16 = v14->vfptr;
              v17 = v15;
              v18 = Inventory::GetItemCnt(&g_kInventory, v15);
              v16->QuestPlayer_DestroyItem(v14, v17, v18);
              this = v19;
            }
          }
        }
LABEL_20:
        this->baseclass_0.m_eTaskState = 2;
        result = 1;
        break;
      default:
        result = 0;
        break;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004F42B0) --------------------------------------------------------
void __thiscall ItemDropTask::ItemDropTask(ItemDropTask *this, ITEM_INVEN *rkInven, unsigned int dwLot, unsigned int dwDropPosX, unsigned int dwDropPosY)
{
  ItemDropTask *v5; // esi@1

  v5 = this;
  ITask::ITask(&this->baseclass_0, 0);
  v5->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemDropTask::_vftable_;
  v5->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ItemDropTask::_vftable_;
  v5->m_kItemDropPacket.slot.Inven = rkInven->Inven;
  v5->m_kItemDropPacket.loc.x = dwDropPosX;
  v5->m_kItemDropPacket.lot = dwLot;
  v5->m_kItemDropPacket.loc.y = dwDropPosY;
}
// 992E58: using guessed type int (__stdcall *ItemDropTask___vftable_)(int uiFlags);
// 992E74: using guessed type int (__thiscall *ItemDropTask___vftable_)(void *p, char);

//----- (004F42F0) --------------------------------------------------------
bool __thiscall DesktopWin::EatDropInstance(DesktopWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  DesktopWin *v4; // edi@1
  void *v5; // esi@2
  unsigned int v6; // ST0C_4@7
  GuildAcademyItemRewardWin *v7; // eax@7
  int v9; // eax@9
  __int16 v10; // ax@10
  void *v11; // ecx@16
  int v12; // eax@17
  void (__cdecl *v13)(_DWORD); // eax@19
  PgFrameWork *v14; // ST0C_4@19
  float kPos; // [sp+0h] [bp-28h]@9
  float kPos_4; // [sp+4h] [bp-24h]@9
  ITEM_INVEN kInven; // [sp+18h] [bp-10h]@10
  int v18; // [sp+24h] [bp-4h]@16

  v4 = this;
  if ( !*pkDrop || (v5 = (*pkDrop)->m_pkContents) == 0 )
    return 0;
  if ( *((_DWORD *)v5 + 2) == 4 )
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, WEAPONTITLE);
  if ( *((_DWORD *)v5 + 4) )
    return 0;
  if ( *((_DWORD *)v5 + 2) == 20 )
  {
    v6 = *((_DWORD *)v5 + 3);
    v7 = GuildAcademyTask::GetGuildAcademyItemRewardWin();
    GuildAcademyItemRewardWin::resetInven(v7, v6);
    return 0;
  }
  v9 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  LODWORD(kPos) = *(_DWORD *)v9;
  LODWORD(kPos_4) = *(_DWORD *)(v9 + 4);
  switch ( *((_DWORD *)v5 + 2) )
  {
    default:
      return 0;
    case 0:
      v10 = kInven.Inven & 0x3FF | 0x2400;
      break;
    case 1:
      v10 = kInven.Inven & 0x3FF | 0x2000;
      break;
    case 0xE:
      v10 = kInven.Inven & 0x3FF | 0xC00;
      break;
    case 0xF:
      v10 = kInven.Inven & 0x3FF | 0x3400;
      break;
    case 0x10:
      v10 = kInven.Inven & 0x3FF | 0x3800;
      break;
    case 0x11:
      v10 = kInven.Inven & 0x3FF | 0x4000;
      break;
  }
  kInven.Inven = (v10 ^ *((_WORD *)v5 + 6)) & 0x3FF ^ v10;
  v11 = operator new(0x54u);
  v18 = 0;
  if ( v11 )
    ItemDropTask::ItemDropTask(
      (ItemDropTask *)v11,
      &kInven,
      *((_DWORD *)v5 + 16),
      (signed __int64)kPos,
      (signed __int64)kPos_4);
  else
    v12 = 0;
  v13 = (void (__cdecl *)(_DWORD))**(_DWORD **)(v12 + 8);
  v14 = v4->m_pkFrameWork;
  v18 = -1;
  v13(v14);
  return 1;
}

//----- (004F44E0) --------------------------------------------------------
DesktopWin *__cdecl DesktopWin::CreateWin(unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  DesktopWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x124u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    PgWin::PgWin((PgWin *)v3);
    *(_DWORD *)v4 = &DesktopWin::_vftable_;
    *((_DWORD *)v4 + 58) = &DesktopWin::_vftable_;
    *((_DWORD *)v4 + 72) = 0;
    *((_BYTE *)v4 + 254) = 1;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, unsigned int, unsigned int, PgFrameWork *))(*(_DWORD *)v4 + 452))(
                          v4,
                          dwScrWidth,
                          dwScrHeight,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (DesktopWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 992C70: using guessed type int (__stdcall *DesktopWin___vftable_)(int uiFlags);
// 992C8C: using guessed type int (__thiscall *DesktopWin___vftable_)(void *p, char);

//----- (004F4630) --------------------------------------------------------
void *__thiscall DesktopWin::_scalar_deleting_destructor_(DesktopWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DesktopWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DesktopWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 992C70: using guessed type int (__stdcall *DesktopWin___vftable_)(int uiFlags);
// 992C8C: using guessed type int (__thiscall *DesktopWin___vftable_)(void *p, char);

//----- (004F4670) --------------------------------------------------------
void __thiscall DivideWin::OnCmdCancel(DivideWin *this)
{
  DivideWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  this->m_uiResultValue = 0;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2 = v1->m_pkRevWin;
  if ( v2 )
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, 5u, v1->m_uiOkMsg, 0);
}

//----- (004F46B0) --------------------------------------------------------
void __thiscall DivideWin::GetValueFromEdit(DivideWin *this)
{
  DivideWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1

  v1 = this;
  v2 = this->m_pkLotInputEdit;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 )
  {
    if ( *v3 )
      v1->m_uiResultValue = atoi(v3);
  }
}

//----- (004F46F0) --------------------------------------------------------
void __thiscall DivideWin::SetValueToEdit(DivideWin *this)
{
  DivideWin *v1; // esi@1
  char acStr[32]; // [sp+4h] [bp-24h]@1
  unsigned int v3; // [sp+24h] [bp-4h]@1
  int v4; // [sp+28h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  sprintf(acStr, "%u");
  ((void (__stdcall *)(_DWORD))v1->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (004F4740) --------------------------------------------------------
void __thiscall DivideWin::SetValueToEdit(DivideWin *this, unsigned int num)
{
  DivideWin *v2; // esi@1
  char acStr[32]; // [sp+4h] [bp-24h]@1
  unsigned int v4; // [sp+24h] [bp-4h]@1
  int v5; // [sp+28h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  this->m_uiResultValue = num;
  sprintf(acStr, "%u");
  ((void (__stdcall *)(_DWORD))v2->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (004F47A0) --------------------------------------------------------
void __thiscall DivideWin::OnClose(DivideWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  ((void (__stdcall *)(_DWORD))this->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  PgWin::OnClose(v1);
}

//----- (004F47C0) --------------------------------------------------------
void __thiscall DivideWin::Open(DivideWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiMax, char *pcText)
{
  DivideWin *v5; // esi@1
  NiRefObjectVtbl *v6; // edi@1
  unsigned int v7; // eax@1
  NiRefObjectVtbl *v8; // edi@1
  unsigned int v9; // eax@1
  char string; // [sp+8h] [bp-24h]@1
  unsigned int v11; // [sp+28h] [bp-4h]@1
  int v12; // [sp+2Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v5 = this;
  ((void (__stdcall *)(char *))this->m_apkTextWin[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  v5->m_uiResultValue = uiMax;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v5->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
  ((void (*)(void))v5->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  EditWin::SelectAll(v5->m_pkLotInputEdit);
  v5->m_uiOkMsg = uiOkMsg;
  v5->m_pkRevWin = pkRevWin;
  v5->m_uiMax = uiMax;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
  v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = ((int (__thiscall *)(DivideWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
  v6[43].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsX.x - (v7 >> 1));
  v8 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (__thiscall *)(DivideWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5);
  v8[44].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsY - (v9 >> 1));
}
// A85C00: using guessed type int __security_cookie;

//----- (004F48B0) --------------------------------------------------------
void __thiscall DivideWin::_DivideWin(DivideWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DivideWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DivideWin::_vftable_;
  this->m_pkLotInputEdit = 0;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 992F30: using guessed type int (__stdcall *DivideWin___vftable_)(int uiFlags);
// 992F4C: using guessed type int (__thiscall *DivideWin___vftable_)(void *p, char);

//----- (004F4930) --------------------------------------------------------
bool __thiscall DivideWin::Create(DivideWin *this, PgFrameWork *pkFrameWork)
{
  DivideWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  PgSprData *v13; // eax@21
  PgSprData *v14; // edi@22
  PgWinBut *v15; // eax@22
  PgWinBut *v16; // edi@22
  PgWin *v17; // ST4C_4@22
  PgFont *v18; // ST48_4@22
  unsigned int v19; // ST44_4@22
  unsigned int v20; // eax@22
  PgWinText *v21; // edi@22
  NiRefObjectVtbl *v22; // ebx@22
  char *v23; // eax@22
  PgSprData *v24; // edi@22
  PgWinBut *v25; // eax@22
  PgWinBut *v26; // edi@22
  PgWin *v27; // ST4C_4@22
  PgFont *v28; // ST48_4@22
  unsigned int v29; // ST44_4@22
  unsigned int v30; // eax@22
  PgWinText *v31; // edi@22
  NiRefObjectVtbl *v32; // ebx@22
  char *v33; // eax@22
  PgFont *v34; // eax@22
  int v35; // ebx@22
  unsigned int v36; // edi@24
  PgFont *v37; // ST48_4@24
  unsigned int v38; // ST44_4@24
  int v39; // eax@24
  PgWinText *v40; // eax@24
  int v41; // edi@24
  PgWinText *v42; // ebx@33
  NiRefObjectVtbl *v43; // edi@33
  char *v44; // eax@33
  NiNode *v45; // esi@34
  const char *v46; // [sp+28h] [bp-48h]@16
  int *v47; // [sp+2Ch] [bp-44h]@16
  int *v48; // [sp+30h] [bp-40h]@16
  NiSourceTexture *v49; // [sp+34h] [bp-3Ch]@16
  PgFont *pkFont; // [sp+48h] [bp-28h]@22
  unsigned int uiWidth; // [sp+4Ch] [bp-24h]@20
  unsigned int uiHeight; // [sp+50h] [bp-20h]@20
  NiSourceTexture *pkTexture; // [sp+54h] [bp-1Ch]@1
  int uiLeft; // [sp+58h] [bp-18h]@11
  int uiTop; // [sp+5Ch] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+60h] [bp-10h]@1
  int v57; // [sp+6Ch] [bp-4h]@1
  signed int i; // [sp+78h] [bp+8h]@22

  v2 = this;
  spNode.m_pObject = 0;
  v57 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "CalculatorWin", 0) )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v49 = v10;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  else
  {
    v49 = 0;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v46, v47, v48, v49);
  v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, (NiSourceTexture *)v3);
    PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkLotInputEdit = EditWin::CreateWin(
                             uiLeft + 2,
                             uiTop + 4,
                             uiWidth,
                             uiHeight,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             NUMBER,
                             0xAu,
                             3u,
                             0,
                             0,
                             1);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v15 = PgWinBut::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v16 = v15;
  v17 = (PgWin *)v15;
  v18 = Font::Get(0);
  v19 = ((int (__thiscall *)(PgWinBut *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v16);
  v20 = ((int (__thiscall *)(PgWinBut *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v16);
  v21 = PgWinText::CreateWin(0, 1, v20, v19, v18, v17, 0, 0);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0x4F5F499Fu);
  v22[118].__vecDelDtor((NiRefObject *)v21, (unsigned int)v23);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor04", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnClick04");
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnOver04");
  v25 = PgWinBut::CreateWin(uiLeft, uiTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v26 = v25;
  v27 = (PgWin *)v25;
  v28 = Font::Get(0);
  v29 = ((int (__thiscall *)(PgWinBut *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v26);
  v30 = ((int (__thiscall *)(PgWinBut *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v26);
  v31 = PgWinText::CreateWin(0, 1, v30, v29, v28, v27, 0, 0);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v31,
    5u);
  v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v33 = TextData::Get(0x88A297E1u);
  v32[118].__vecDelDtor((NiRefObject *)v31, (unsigned int)v33);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  v34 = Font::Get(0);
  pkFont = v34;
  i = 0;
  v35 = (int)v2->m_apkTextWin;
  while ( 1 )
  {
    v36 = v34->m_uiDefHeight;
    v37 = v34;
    v38 = v34->m_uiDefHeight;
    v39 = ((int (__thiscall *)(DivideWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
    v40 = PgWinText::CreateWin(8, i * (v36 + 1) + 8, v39 - 16, v38, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v41 = *(_DWORD *)v35;
    pkTexture = (NiSourceTexture *)v40;
    if ( (PgWinText *)v41 != v40 )
    {
      if ( v41 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) && v41 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v41)(v41, 1);
        v40 = (PgWinText *)pkTexture;
      }
      *(_DWORD *)v35 = v40;
      if ( v40 )
        InterlockedIncrement((volatile LONG *)&v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v35 + 240))(0);
    v35 += 4;
    ++i;
    if ( i >= 2 )
      break;
    v34 = pkFont;
  }
  ((void (__stdcall *)(signed int))v2->m_apkTextWin[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  v42 = v2->m_apkTextWin[0].m_pObject;
  v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData::Get(0xEAF9353Bu);
  v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
  ((void (__stdcall *)(IDirectMessenger *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  ((void (__thiscall *)(DivideWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v57 = -1;
  if ( spNode.m_pObject )
  {
    v45 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v45 )
        v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F4E20) --------------------------------------------------------
void __thiscall DivideWin::OnCmdOk(DivideWin *this)
{
  DivideWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1
  unsigned int v4; // eax@5
  char *v5; // eax@8
  char temp[256]; // [sp+4h] [bp-104h]@8
  unsigned int v7; // [sp+104h] [bp-4h]@1
  int v8; // [sp+108h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkLotInputEdit;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 && *v3 )
    v1->m_uiResultValue = atoi(v3);
  if ( v1->m_pkRevWin )
  {
    v4 = v1->m_uiResultValue;
    if ( v4 && v4 <= v1->m_uiMax )
    {
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v1->m_pkRevWin, 5u, v1->m_uiOkMsg, v1->m_uiResultValue);
    }
    else
    {
      v5 = TextData::Get(0x97A69795u);
      sprintf(temp, v5);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, temp);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004F4F10) --------------------------------------------------------
void __thiscall DivideWin::OnEditEnd(DivideWin *this, unsigned int wParam, int lParam)
{
  DivideWin *v3; // esi@1

  v3 = this;
  DivideWin::OnCmdOk(this);
  ((void (*)(void))v3->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (004F4F30) --------------------------------------------------------
void __thiscall DivideWin::DivideWin(DivideWin *this)
{
  DivideWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DivideWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DivideWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_eMode = 0;
  v1->m_uiResultValue = 0;
}
// 992F30: using guessed type int (__stdcall *DivideWin___vftable_)(int uiFlags);
// 992F4C: using guessed type int (__thiscall *DivideWin___vftable_)(void *p, char);

//----- (004F4FC0) --------------------------------------------------------
void __thiscall DivideWin::OnCommand(DivideWin *this, unsigned int wParam, int lParam)
{
  DivideWin *v3; // esi@1
  PgWin *v4; // eax@3

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      this->m_uiResultValue = 0;
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      v4 = v3->m_pkRevWin;
      if ( v4 )
        PgWin::PostMsg(&v3->baseclass_0.baseclass_0.baseclass_0, v4, 5u, v3->m_uiOkMsg, 0);
    }
  }
  else
  {
    DivideWin::OnCmdOk(this);
  }
}

//----- (004F5010) --------------------------------------------------------
DivideWin *__cdecl DivideWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  DivideWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x17Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    DivideWin::DivideWin((DivideWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (DivideWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004F5140) --------------------------------------------------------
void *__thiscall DivideWin::_scalar_deleting_destructor_(DivideWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DivideWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DivideWin::_vftable_;
  this->m_pkLotInputEdit = 0;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 992F30: using guessed type int (__stdcall *DivideWin___vftable_)(int uiFlags);
// 992F4C: using guessed type int (__thiscall *DivideWin___vftable_)(void *p, char);

//----- (004F51D0) --------------------------------------------------------
void __thiscall EnchantGemToolTipWin::EnchantGemToolTipWin(EnchantGemToolTipWin *this)
{
  EnchantGemToolTipWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EnchantGemToolTipWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EnchantGemToolTipWin::_vftable_;
  v1->m_pkBackPanel[0] = 0;
  v1->m_pkBackPanel[1] = 0;
  v1->m_pkEnchantGemText = 0;
}
// 9934F0: using guessed type int (__stdcall *EnchantGemToolTipWin___vftable_)(int uiFlags);
// 99350C: using guessed type int (__thiscall *EnchantGemToolTipWin___vftable_)(void *p, char);

//----- (004F5200) --------------------------------------------------------
void __thiscall EnchantGemToolTipWin::_EnchantGemToolTipWin(EnchantGemToolTipWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EnchantGemToolTipWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EnchantGemToolTipWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9934F0: using guessed type int (__stdcall *EnchantGemToolTipWin___vftable_)(int uiFlags);
// 99350C: using guessed type int (__thiscall *EnchantGemToolTipWin___vftable_)(void *p, char);

//----- (004F5220) --------------------------------------------------------
void __thiscall EnchantGemToolTipWin::Clear(EnchantGemToolTipWin *this)
{
  EnchantGemToolTipWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1
  int v4; // esi@3
  signed int v5; // edi@3

  v1 = this;
  v2 = (char *)&this->m_pkWeaponIconWin[0].pkGemText;
  v3 = 3;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 472))(&unk_9931A3);
    IconSlotWin::Clear(*((IconSlotWin **)v2 - 1));
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 - 2) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 - 3) + 256))(0);
    v2 += 16;
    --v3;
  }
  while ( v3 );
  v4 = (int)v1->m_pkBackPanel;
  v5 = 2;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  v1->m_ItemID = -1;
}

//----- (004F52B0) --------------------------------------------------------
void __thiscall EnchantGemWin::EnchantGemWin(EnchantGemWin *this)
{
  EnchantGemWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EnchantGemWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EnchantGemWin::_vftable_;
}
// 993730: using guessed type int (__stdcall *EnchantGemWin___vftable_)(int uiFlags);
// 99374C: using guessed type int (__thiscall *EnchantGemWin___vftable_)(void *p, char);

//----- (004F52D0) --------------------------------------------------------
void __thiscall EnchantGemWin::_EnchantGemWin(EnchantGemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EnchantGemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EnchantGemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 993730: using guessed type int (__stdcall *EnchantGemWin___vftable_)(int uiFlags);
// 99374C: using guessed type int (__thiscall *EnchantGemWin___vftable_)(void *p, char);

//----- (004F52F0) --------------------------------------------------------
void __thiscall EnchantGemWin::OnQuit(EnchantGemWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (004F5300) --------------------------------------------------------
void __thiscall EnchantGemWin::SignGemFailed(EnchantGemWin *this, ITEM_INVEN *rkLicenseInven)
{
  EnchantGemWin *v2; // ebx@1
  unsigned int v3; // edi@1
  char *v4; // esi@2
  int v5; // ecx@3
  __int16 v6; // ax@3
  signed int v7; // eax@4

  v2 = this;
  v3 = 0;
  if ( this->m_uiSlotNums )
  {
    v4 = (char *)this->m_akEnchantGemFrame;
    do
    {
      v5 = *(_DWORD *)v4;
      v6 = rkLicenseInven->Inven >> 10;
      if ( v6 == 9 )
      {
        v7 = 0;
      }
      else
      {
        if ( v6 != 8 )
          return;
        v7 = 1;
      }
      if ( *(_DWORD *)(v5 + 308) == v7 )
      {
        if ( *(_DWORD *)(v5 + 304) == (rkLicenseInven->Inven & 0x3FF) )
          IconSlotWin::Clear((IconSlotWin *)v5);
      }
      ++v3;
      v4 += 16;
    }
    while ( v3 < v2->m_uiSlotNums );
  }
}

//----- (004F5370) --------------------------------------------------------
void __thiscall EnchantGemDeleteWin::SetClearItemInven(EnchantGemDeleteWin *this, ITEM_INVEN *rkInven)
{
  this->m_kClearInven.Inven = rkInven->Inven;
}

//----- (004F5390) --------------------------------------------------------
void __thiscall EnchantGemWin::OnSetEnchantGem(EnchantGemWin *this, SHINE_ITEM_STRUCT *kStruct, void *pvBody)
{
  EnchantGemWin *v3; // esi@1

  v3 = this;
  IconSlotWin::SetDropContents(this->m_pkWeaponIconWin, *(DropContents **)pvBody);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v3,
    &kStruct->itemattr,
    kStruct->itemid);
}

//----- (004F53D0) --------------------------------------------------------
void __thiscall EnchantGemWin::OnSend2EndOfTrade(EnchantGemWin *this)
{
  bool v1; // zf@2
  char *v2; // esi@2
  DirectUserMsgBody_SendPacket kPacket; // [sp+0h] [bp-Ch]@2

  if ( EnchantGemWin::ms_bSend2EndOfTrade )
  {
    v1 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
    v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    *(_DWORD *)&kPacket.wDepartment = 720904;
    kPacket.pvPacket = 0;
    if ( !v1 )
    {
      ((void (__stdcall *)(signed int, DirectUserMsgBody_SendPacket *, char *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        23,
        &kPacket,
        v2);
      if ( *((_DWORD *)v2 + 1) )
        (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, char *))(**((_DWORD **)v2 + 1) + 20))(
          23,
          &kPacket,
          v2);
    }
    (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_SendPacket *, char *))(*(_DWORD *)v2 + 20))(
      v2,
      23,
      &kPacket,
      v2);
    EnchantGemWin::ms_bSend2EndOfTrade = 0;
  }
}
// A988A8: using guessed type bool EnchantGemWin__ms_bSend2EndOfTrade;

//----- (004F5450) --------------------------------------------------------
void __thiscall EnchantGemWin::OnCommand(EnchantGemWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam <= 3 )
    {
      ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)(wParam - 1);
    }
    else
    {
      if ( wParam == 5 )
        PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    }
  }
}

//----- (004F54A0) --------------------------------------------------------
void __thiscall EnchantGemWin::ResetContents(EnchantGemWin *this)
{
  EnchantGemWin *v1; // ebx@1
  unsigned int v2; // edi@1
  int v3; // esi@4

  v1 = this;
  v2 = 0;
  if ( this->m_pkChargedSocket )
    ((void (__stdcall *)(_DWORD))this->m_pkChargedSocket->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  IconSlotWin::Clear(v1->m_pkWeaponIconWin);
  v1->m_pkWeaponIconWin->baseclass_0.m_pkToolTipWin = 0;
  if ( v1->m_uiSlotNums > 0 )
  {
    v3 = (int)&v1->m_akEnchantGemFrame[0].pkBtn;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 - 4) + 472))(&unk_9931BA);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(1);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 4) + 240))(0);
      IconSlotWin::Clear(*(IconSlotWin **)(v3 - 8));
      ++v2;
      v3 += 16;
    }
    while ( v2 < v1->m_uiSlotNums );
  }
}

//----- (004F5530) --------------------------------------------------------
void __thiscall EnchantGemWin::SignGemSuccess(EnchantGemWin *this, ITEM_INVEN *rkLicenseInven, Item *pkWeapon)
{
  EnchantGemWin *v3; // esi@1
  IconSlotWin *v4; // ecx@1

  v3 = this;
  v4 = this->m_pkWeaponIconWin;
  if ( !v4->m_eType )
  {
    if ( pkWeapon )
    {
      if ( v3->m_uiType == 1 )
        IconSlotWin::Clear(v4);
      IconSlotWin::SetItem(v3->m_pkWeaponIconWin, pkWeapon, 1, 1);
    }
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      v3,
      &pkWeapon->m_kStruct.itemattr,
      pkWeapon->m_kStruct.itemid);
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, WEAPONTITLE);
  }
}

//----- (004F55A0) --------------------------------------------------------
bool __thiscall EnchantGemToolTipWin::Create(EnchantGemToolTipWin *this, PgFrameWork *pkFrameWork)
{
  EnchantGemToolTipWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@3
  NiNode *v6; // esi@4
  bool result; // al@8
  char *v8; // eax@9
  PgWinSpr *v9; // eax@9
  char *v10; // eax@9
  PgWinSpr *v11; // eax@9
  signed int v12; // edi@9
  int v13; // esi@9
  signed int v14; // ebx@9
  D3DXCOLOR v15; // ST0C_16@10
  char *v16; // eax@10
  PgWinText *v17; // eax@10
  char *v18; // eax@10
  PgWinSpr *v19; // eax@10
  char *v20; // eax@10
  char *v21; // eax@10
  PgWinSpr *v22; // eax@10
  D3DXCOLOR v23; // ST0C_16@11
  PgWinText *v24; // eax@11
  EnchantGemToolTipWin *v25; // edi@11
  NiRefObjectVtbl *v26; // esi@11
  char *v27; // eax@11
  NiNode *v28; // esi@12
  UIUtil ui; // [sp+0h] [bp-30h]@9
  EnchantGemToolTipWin *v30; // [sp+14h] [bp-1Ch]@1
  int iXOff; // [sp+18h] [bp-18h]@3
  int iYOff; // [sp+1Ch] [bp-14h]@3
  NiPointer<NiNode> spNode; // [sp+20h] [bp-10h]@1
  int v34; // [sp+2Ch] [bp-4h]@1

  v2 = this;
  v30 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v34 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\EnchantToolTip.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "EnchantGemToolTipWin", 0) )
  {
    UIUtil::UIUtil(&ui);
    LOBYTE(v34) = 1;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, iXOff, iYOff);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    v8 = fs("Panel%02d");
    v9 = UIUtil::CreateSpr(&ui, v8, 0);
    v2->m_pkBackPanel[0] = v9;
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v9,
      0);
    v10 = fs("Panel%02d");
    v11 = UIUtil::CreateSpr(&ui, v10, 0);
    v2->m_pkBackPanel[1] = v11;
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v11,
      0);
    v12 = 1;
    v13 = (int)&v2->m_pkWeaponIconWin[0].pkGemText;
    v14 = 3;
    do
    {
      *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v16 = fs("TitleName%02d");
      v17 = UIUtil::CreateTextNoSpr(&ui, v16, &byte_9931A1, COERCE_D3DXCOLOR(v15.r), 5u);
      *(_DWORD *)v13 = v17;
      v17->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v13 + 240))(0);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v13 + 488))(4);
      v18 = fs("Slot%02d");
      v19 = UIUtil::CreateSpr(&ui, v18, 0);
      *(_DWORD *)(v13 - 8) = v19;
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v19,
        0);
      *(_DWORD *)(v13 - 4) = IconSlotWin::CreateWin(3, 3, *(PgWin **)(v13 - 8));
      v20 = TextData2::Get(0x6E866EC7u);
      PgWin::SetToolTipWinText(*(PgWin **)(v13 - 4), v20);
      *(_DWORD *)(*(_DWORD *)(v13 - 4) + 272) = g_pkToolTipWin;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v13 - 4) + 240))(0);
      v21 = fs("RegCancelBtnNor%02d");
      v22 = UIUtil::CreateSpr(&ui, v21, 0);
      *(_DWORD *)(v13 - 12) = v22;
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v22,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v13 - 12) + 240))(0);
      ++v12;
      v13 += 16;
      --v14;
    }
    while ( v14 );
    *(_QWORD *)&v23.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v23.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v24 = UIUtil::CreateTextNoSpr(&ui, "Text01", &byte_9931A2, COERCE_D3DXCOLOR(v23.r), 5u);
    v25 = v30;
    v30->m_pkEnchantGemText = v24;
    v26 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v27 = TextData3::Get(0x4634170Fu);
    v26[118].__vecDelDtor((NiRefObject *)v25->m_pkEnchantGemText, (unsigned int)v27);
    ((void (__stdcall *)(_DWORD))v25->m_pkEnchantGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    LOBYTE(v34) = 0;
    UIUtil::_UIUtil(&ui);
    v34 = -1;
    if ( spNode.m_pObject )
    {
      v28 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v28 )
          v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v6 = spNode.m_pObject;
    v34 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F5900) --------------------------------------------------------
bool __thiscall EnchantGemToolTipWin::SetEnchantGemDesc(EnchantGemToolTipWin *this, Item *pkWeaponItem)
{
  EnchantGemToolTipWin *v2; // ebx@1
  bool result; // al@2
  unsigned __int8 v4; // al@3
  int v5; // edi@3
  int v6; // esi@4
  int v7; // edi@8
  int v8; // ebx@8
  int v9; // eax@10
  unsigned int *v10; // edi@11
  ActionEffectItem *v11; // eax@12
  Item *v12; // edi@14
  char *v13; // eax@17
  char *v14; // eax@17
  char *v15; // eax@18
  ActionEffectItem *pkActionEffectItem; // [sp+8h] [bp-80h]@12
  EnchantGemToolTipWin *v17; // [sp+Ch] [bp-7Ch]@1
  int i; // [sp+10h] [bp-78h]@3
  int v19; // [sp+14h] [bp-74h]@4
  char *v20; // [sp+18h] [bp-70h]@4
  __int16 kStruct; // [sp+1Ch] [bp-6Ch]@3
  char v22; // [sp+4Eh] [bp-3Ah]@4
  unsigned __int8 v23; // [sp+57h] [bp-31h]@3
  char v24; // [sp+58h] [bp-30h]@23
  __int16 v25; // [sp+80h] [bp-8h]@3
  char v26; // [sp+82h] [bp-6h]@3
  unsigned int v27; // [sp+84h] [bp-4h]@1
  int v28; // [sp+88h] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v2 = this;
  v17 = this;
  if ( (unsigned __int8)((int (__thiscall *)(Item *))pkWeaponItem->baseclass_0.vfptr[1].__vecDelDtor)(pkWeaponItem) == 5 )
  {
    memcpy(&kStruct, &pkWeaponItem->m_kStruct, 0x64u);
    v25 = *(_WORD *)((char *)&pkWeaponItem->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v26 = BYTE3(pkWeaponItem->m_kStruct.itemattr.binditem.portal[9].y);
    v4 = v23;
    v5 = 0;
    i = 0;
    if ( v23 )
    {
      v20 = &v22;
      v19 = (int)&v2->m_pkWeaponIconWin[2].pkGemText;
      v6 = (int)&v2->m_pkWeaponIconWin[0].pkSlotSpr;
      do
      {
        if ( *(_WORD *)v20 == -1 )
        {
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v6 + 256))(1);
          if ( v5 > 0 )
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v19 + 256))(1);
        }
        else
        {
          v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
          v8 = *(_WORD *)v20;
          if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                + 16))(
                                  ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                  *(_WORD *)v20) )
          {
            if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) )
            {
              v9 = *(_DWORD *)(v7 + 196) + 4 * v8;
              if ( *(_DWORD *)v9 )
              {
                v10 = *(unsigned int **)v9;
                if ( *(_DWORD *)v9 )
                {
                  v11 = ActionEffectItemTab::GetByItemID(*(_WORD *)v10);
                  pkActionEffectItem = v11;
                  if ( v11 )
                  {
                    if ( ItemActionEffectDescTab::GetByItemActionID(v11->ItemActionID) )
                    {
                      kStruct = *(_WORD *)v10;
                      v12 = Item::Create((SHINE_ITEM_STRUCT *)&kStruct);
                      if ( v12 )
                      {
                        IconSlotWin::Clear(*(IconSlotWin **)(v6 + 4));
                        IconSlotWin::SetItem(*(IconSlotWin **)(v6 + 4), v12, 0, 0);
                      }
                      if ( pkActionEffectItem->EnchantMaxLot )
                      {
                        v15 = TextData2::Get(0xCAEBF956u);
                        v14 = fs(v15);
                      }
                      else
                      {
                        v13 = TextData2::Get(0xCAEBFA56u);
                        v14 = fs(v13);
                      }
                      (*(void (__stdcall **)(char *))(**(_DWORD **)(v6 + 8) + 472))(v14);
                      (*(void (__stdcall **)(signed int))(**(_DWORD **)v6 + 256))(1);
                      (*(void (__stdcall **)(signed int))(**(_DWORD **)(v6 + 4) + 256))(1);
                      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 - 4) + 256))(0);
                      if ( i > 0 )
                        (*(void (__stdcall **)(signed int))(**(_DWORD **)v19 + 256))(1);
                    }
                  }
                }
              }
            }
          }
          v2 = v17;
        }
        v4 = v23;
        v19 += 4;
        v20 += 3;
        v5 = i + 1;
        v6 += 16;
        i = v5;
      }
      while ( v5 < v23 );
    }
    if ( !v24 )
    {
      ((void (__stdcall *)(signed int))v2->m_pkWeaponIconWin[v4].pkDisableSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_pkWeaponIconWin[v23].pkSlotSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      if ( v23 )
        (*(void (__stdcall **)(signed int))(**((_DWORD **)&v2->m_pkWeaponIconWin[2].pkGemText + v23) + 256))(1);
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004F5B80) --------------------------------------------------------
bool __thiscall EnchantGemWin::Create(EnchantGemWin *this, PgFrameWork *pkFrameWork, unsigned int uiSlotNum)
{
  EnchantGemWin *v3; // ebx@1
  NiSourceTexture *v4; // edi@1
  unsigned int v5; // eax@1
  int v6; // eax@1
  NiTexturePalette *v7; // esi@1
  char *v8; // eax@12
  PgSprData *v9; // esi@13
  char *v10; // eax@13
  NiNode *v11; // esi@14
  NiSourceTexture *v13; // eax@19
  PgSprData *v14; // eax@22
  D3DXCOLOR v15; // ST1C_16@24
  char *v16; // eax@24
  D3DXCOLOR v17; // ST1C_16@24
  char *v18; // eax@24
  PgWin *v19; // esi@24
  D3DXCOLOR v20; // ST24_16@24
  char *v21; // eax@24
  D3DXCOLOR v22; // ST24_16@24
  char *v23; // eax@24
  PgSprData *v24; // eax@24
  PgWin *v25; // eax@24
  IconSlotWin *v26; // eax@24
  unsigned int v27; // edi@25
  int v28; // esi@25
  D3DXCOLOR v29; // ST1C_16@26
  char *v30; // eax@26
  PgWinText *v31; // eax@26
  char *v32; // ST30_4@26
  char *v33; // ST2C_4@26
  char *v34; // ST28_4@26
  char *v35; // eax@26
  char *v36; // eax@26
  PgWin *v37; // eax@26
  char *v38; // eax@26
  char *v39; // eax@26
  PgWin *v40; // ecx@26
  char *v41; // eax@26
  PgWinSpr *v42; // eax@26
  PgFrameWork *v43; // ST34_4@26
  int v44; // ecx@26
  char *v45; // eax@26
  char *v46; // eax@28
  PgWinSpr *v47; // eax@28
  NiNode *v48; // esi@29
  const char *v49; // [sp+28h] [bp-54h]@20
  char *v50; // [sp+2Ch] [bp-50h]@5
  int *v51; // [sp+2Ch] [bp-50h]@20
  NiPointer<NiNode> *v52; // [sp+30h] [bp-4Ch]@5
  int *v53; // [sp+30h] [bp-4Ch]@20
  NiTexturePalette *v54; // [sp+34h] [bp-48h]@5
  NiSourceTexture *v55; // [sp+34h] [bp-48h]@20
  UIUtil ui; // [sp+48h] [bp-34h]@19
  int iXPos; // [sp+5Ch] [bp-20h]@26
  int iXOff; // [sp+60h] [bp-1Ch]@13
  int iYOff; // [sp+64h] [bp-18h]@13
  int iLeft; // [sp+68h] [bp-14h]@20
  NiPointer<NiNode> spNode; // [sp+6Ch] [bp-10h]@1
  int v62; // [sp+78h] [bp-4h]@1

  v3 = this;
  v4 = 0;
  spNode.m_pObject = 0;
  v5 = uiSlotNum;
  this->m_uiSlotNums = uiSlotNum;
  v6 = v5 - 1;
  this->m_uiType = 0;
  v7 = dword_B70448;
  v62 = 0;
  if ( v6 )
  {
    if ( v6 == 1 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v54 = v7;
      v52 = &spNode;
      v50 = "Game\\EnchantWin02.nif";
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v54 = v7;
      v52 = &spNode;
      v50 = "Game\\EnchantWin03.nif";
    }
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v54 = v7;
    v52 = &spNode;
    v50 = "Game\\EnchantWin01.nif";
  }
  v8 = Folder::Merge(&Folder::m_acMenu, v50);
  PgUtil::LoadNodeNifFile(v8, v52, v54);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  v10 = fs("EnchantGemWin%2.d");
  if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v9, 0, pkFrameWork, v10, 0) )
  {
    v11 = spNode.m_pObject;
    v62 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v62) = 1;
  UIUtil::SetParent(&ui, &v3->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v13 = MenuTexMgr::GetTexture(0x13u);
  if ( v13 )
  {
    v55 = v13;
    v53 = (int *)&uiSlotNum;
    v51 = &iLeft;
    v49 = "Theme";
  }
  else
  {
    v55 = 0;
    v53 = (int *)&uiSlotNum;
    v51 = &iLeft;
    v49 = "Theme";
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v49, v51, v53, v55);
  PgWinSpr::CreateWin(iLeft - iXOff, uiSlotNum - iYOff, v14, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  if ( v3->m_uiSlotNums == 3 )
    UIUtil::CreateSpr(&ui, "Panel04", 0);
  *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v16 = TextData2::Get(0xCCE10B19u);
  UIUtil::CreateText(&ui, "NPCText", v16, 0, COERCE_D3DXCOLOR(v15.r), 5u, 0, 0);
  *(_QWORD *)&v17.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v17.b = qword_A746E8;
  v18 = TextData2::Get(0x2B4F2789u);
  UIUtil::CreateText(&ui, "ItemName", v18, 0, COERCE_D3DXCOLOR(v17.r), 4u, 0, 0);
  UIUtil::CreateBtn(&ui, 5u, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  v19 = (PgWin *)UIUtil::CreateBtn(&ui, 5u, "QuitBtnNor", "QuitBtnOver", "QuitBtnClick", 0, 0);
  *(_QWORD *)&v20.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v20.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v21 = TextData2::Get(0xCB06243Eu);
  UIUtil::CreateAttachedText(&ui, v19, v21, COERCE_D3DXCOLOR(v20.r), 5u);
  *(_QWORD *)&v22.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v22.b = qword_A746E8;
  v23 = TextData2::Get(0x1F523439u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v23, COERCE_D3DXCOLOR(v22.r), 5u);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TgetSlot", &iLeft, (int *)&uiSlotNum, 0);
  v25 = (PgWin *)PgWinSpr::CreateWin(
                   iLeft - iXOff,
                   uiSlotNum - iYOff,
                   v24,
                   &v3->baseclass_0.baseclass_0.baseclass_0,
                   0,
                   0);
  v26 = IconSlotWin::CreateWin(3, 3, v25);
  v3->m_pkWeaponIconWin = v26;
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    1u);
  if ( v3->m_uiSlotNums > 0 )
  {
    v27 = 1;
    v28 = (int)&v3->m_akEnchantGemFrame[0].pkBtn;
    do
    {
      *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v30 = fs("TitleName%02d");
      v31 = UIUtil::CreateText(&ui, v30, &byte_9931AE, 3u, COERCE_D3DXCOLOR(v29.r), 4u, 0, 0);
      *(_DWORD *)(v28 - 4) = v31;
      v31->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
      v32 = fs("RegBtnLock%02d");
      v33 = fs("RegBtnClick%02d");
      v34 = fs("RegBtnOver%02d");
      v35 = fs("RegBtnNor%02d");
      *(_DWORD *)v28 = UIUtil::CreateBtn(&ui, v27, v35, v34, v33, v32, 0);
      v36 = fs("Slot%02d");
      v37 = (PgWin *)UIUtil::CreateSpr(&ui, v36, 0);
      *(_DWORD *)(v28 - 8) = IconSlotWin::CreateWin(3, 3, v37);
      v38 = TextData2::Get(0x2E472839u);
      PgWin::SetToolTipWinText(*(PgWin **)(v28 - 8), v38);
      *(_DWORD *)(*(_DWORD *)(v28 - 8) + 272) = g_pkToolTipWin;
      (*(void (__stdcall **)(signed int))(**(_DWORD **)(v28 - 8) + 240))(1);
      *(_DWORD *)(*(_DWORD *)v28 + 272) = g_pkToolTipWin;
      v39 = TextData2::Get(0x5A927D7Du);
      PgWin::SetToolTipWinText(*(PgWin **)v28, v39);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v28 + 240))(1);
      v40 = *(PgWin **)v28;
      iXPos = 0;
      pkFrameWork = 0;
      ((void (__stdcall *)(int *, PgFrameWork **))v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
        &iXPos,
        &pkFrameWork);
      v41 = fs("RegBtnNor%02d");
      v42 = UIUtil::CreateSpr(&ui, v41, 0);
      v43 = pkFrameWork;
      v44 = iXPos;
      *(_DWORD *)(v28 + 4) = v42;
      ((void (__thiscall *)(PgWinSpr *, int, PgFrameWork *))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v42,
        v44,
        v43);
      *(_DWORD *)(*(_DWORD *)(v28 + 4) + 272) = g_pkToolTipWin;
      v45 = TextData2::Get(0x5A927D7Du);
      PgWin::SetToolTipWinText(*(PgWin **)(v28 + 4), v45);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v28 + 4) + 276))(0.0);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)(v28 + 4) + 256))(1);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v28 + 4) + 240))(0);
      ++v27;
      v28 += 16;
    }
    while ( v27 - 1 < v3->m_uiSlotNums );
    v4 = 0;
  }
  v46 = fs("RegCancelBtnNor%02d");
  v47 = UIUtil::CreateSpr(&ui, v46, v4);
  v3->m_pkChargedSocket = v47;
  v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v47,
    (unsigned int)v4);
  ((void (__stdcall *)(NiSourceTexture *))v3->m_pkChargedSocket->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v4);
  ((void (__thiscall *)(EnchantGemWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  LOBYTE(v62) = 0;
  UIUtil::_UIUtil(&ui);
  v62 = -1;
  if ( (NiSourceTexture *)spNode.m_pObject != v4 )
  {
    v48 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( (NiSourceTexture *)v48 != v4 )
        v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F61D0) --------------------------------------------------------
void __thiscall EnchantGemWin::DirectMessage(EnchantGemWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  IDirectMessenger *v4; // esi@1
  EnchantGemWin *v5; // ebx@1
  NiTListItem<NiPointer<NiProperty> > *v6; // eax@2
  IDirectMessenger *v7; // eax@3
  bool v8; // zf@5
  int v9; // eax@5
  int v10; // ecx@7
  int v11; // eax@10
  GameFrameWork *v12; // edi@11
  int (__thiscall *v13)(_DWORD); // eax@12
  int v14; // eax@12
  int v15; // edx@12
  int v16; // eax@12
  int v17; // edi@19
  int v18; // eax@20
  int v19; // eax@21
  Item *v20; // eax@26
  char *v21; // esi@28
  char *v22; // esi@36
  SHINE_ITEM_STRUCT v23; // [sp-70h] [bp-F4h]@12
  __int16 v24; // [sp-Ch] [bp-90h]@12
  char v25; // [sp-Ah] [bp-8Eh]@12
  int v26; // [sp-8h] [bp-8Ch]@12
  unsigned int v27; // [sp-4h] [bp-88h]@11
  IDirectMessenger *v28; // [sp+Ch] [bp-78h]@1
  void *v29; // [sp+10h] [bp-74h]@1
  GameFrameWork *i; // [sp+14h] [bp-70h]@11
  char v31; // [sp+18h] [bp-6Ch]@11
  __int16 v32; // [sp+7Ch] [bp-8h]@11
  char v33; // [sp+7Eh] [bp-6h]@11
  unsigned int v34; // [sp+80h] [bp-4h]@1
  int v35; // [sp+84h] [bp+0h]@1

  v34 = (unsigned int)&v35 ^ __security_cookie;
  v4 = pkFrom;
  v5 = this;
  v29 = pvBody;
  v28 = pkFrom;
  if ( iMsgTag != 22 )
    return;
  v6 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v6 )
    v7 = (IDirectMessenger *)&v6[19].m_pkPrev;
  else
    v7 = 0;
  v8 = pkFrom == v7;
  v9 = *(_DWORD *)pvBody;
  if ( v8 )
  {
    if ( *(_DWORD *)(v9 + 16) || (v10 = *(_DWORD *)(v9 + 8)) != 0 && v10 != 1 )
      return;
    if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v9 + 20) + 4))(*(_DWORD *)(v9 + 20)) == 5 )
    {
      v11 = *(_DWORD *)(*(_DWORD *)pvBody + 20);
      if ( !*(_DWORD *)(*(_DWORD *)(v11 + 112) + 98) )
      {
        memcpy(&v31, (const void *)(v11 + 8), 0x64u);
        v32 = *(_WORD *)(v11 + 108);
        v27 = (unsigned int)GameFrameWorkID;
        v33 = *(_BYTE *)(v11 + 110);
        v12 = (GameFrameWork *)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        i = v12;
        if ( v12 )
        {
          v13 = *(int (__thiscall **)(_DWORD))(*((_DWORD *)v5 - 58) + 168);
          v27 = *(_DWORD *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
          v14 = v13((char *)v5 - 232);
          v15 = *((_DWORD *)v5 - 58);
          v26 = v14;
          v16 = (*(int (__thiscall **)(char *))(v15 + 164))((char *)v5 - 232);
          GameFrameWork::SetEnchantGemWinPos(v12, v16, v26, v27);
          v27 = *(_DWORD *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
          memcpy(&v23, &v31, 0x64u);
          v24 = v32;
          v25 = v33;
          GameFrameWork::OnOpenEnchantGemWin(i, v23, v29, v27);
        }
        *((_BYTE *)v29 + 12) = 0;
        return;
      }
    }
    v27 = -1913391614;
    goto LABEL_36;
  }
  if ( *(_DWORD *)(v9 + 16) || *(_DWORD *)(v9 + 8) )
    return;
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v9 + 20) + 4))(*(_DWORD *)(v9 + 20)) != 35 )
  {
    v27 = -721622281;
LABEL_36:
    v22 = TextData2::Get(v27);
    if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
    {
      (*(void (__stdcall **)(signed int, char *, EnchantGemWin *))(*(_DWORD *)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                 + 4))(
        25,
        v22,
        v5);
      if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
        (*(void (__stdcall **)(signed int, char *, EnchantGemWin *))(*(_DWORD *)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                   + 20))(
          25,
          v22,
          v5);
    }
    ((void (__thiscall *)(EnchantGemWin *, signed int, char *, EnchantGemWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
      v5,
      25,
      v22,
      v5);
    return;
  }
  v8 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail == 0;
  i = 0;
  if ( !v8 )
  {
    v17 = (int)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][1];
    do
    {
      v18 = *(_DWORD *)(v17 - 8);
      if ( v18 )
        v19 = v18 + 232;
      else
        v19 = 0;
      if ( v4 == (IDirectMessenger *)v19 && (unsigned __int8)(*(int (**)(void))(**(_DWORD **)v17 + 244))() && v4 )
      {
        v20 = IconSlotWin::GetItem((IconSlotWin *)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead);
        if ( !v20 )
          return;
        if ( v20->m_pkInfo->Grade == *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)v29 + 20) + 112) + 131) )
        {
          (*(void (__thiscall **)(char *, signed int))(*((_DWORD *)&v4[-19] - 1) + 256))((char *)&v4[-19] - 4, 1);
          *((_BYTE *)v29 + 12) = 1;
        }
        else
        {
          v21 = TextData3::Get(0xE94B4980u);
          if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
          {
            (*(void (__stdcall **)(signed int, char *, EnchantGemWin *))(*(_DWORD *)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                       + 4))(
              25,
              v21,
              v5);
            if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
              (*(void (__stdcall **)(signed int, char *, EnchantGemWin *))(*(_DWORD *)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                         + 20))(
                25,
                v21,
                v5);
          }
          ((void (__thiscall *)(EnchantGemWin *, signed int, char *, EnchantGemWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
            v5,
            25,
            v21,
            v5);
          v4 = v28;
        }
      }
      v17 += 16;
      i = (GameFrameWork *)((char *)i + 1);
    }
    while ( (NiTListItem<NiPointer<NiProperty> > *)i < v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004F6490) --------------------------------------------------------
void __thiscall EnchantGemWin::SetEnchantGem(EnchantGemWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID)
{
  signed int v3; // ebx@0
  int v4; // esi@0
  ShineItemAttr_Weapon *v5; // eax@1
  EnchantGemWin *v6; // edi@1
  char *v7; // esi@3
  char *v8; // eax@4
  int v9; // edi@7
  signed int v10; // ebx@7
  int v11; // eax@9
  unsigned int *v12; // edi@10
  ActionEffectItem *v13; // eax@11
  Item *v14; // eax@13
  char *v15; // eax@16
  char *v16; // eax@16
  char *v17; // eax@17
  void (__stdcall *v18)(_DWORD); // eax@20
  PgWinSpr *v19; // ecx@25
  char *v20; // eax@26
  int v21; // esi@28
  int v22; // ST10_4@28
  signed int v23; // [sp-8h] [bp-90h]@3
  int v24; // [sp-4h] [bp-8Ch]@2
  ActionEffectItem *pkActionEffectItem; // [sp+4h] [bp-84h]@11
  signed int i; // [sp+Ch] [bp-7Ch]@2
  char *v27; // [sp+10h] [bp-78h]@3
  EnchantGemWin *v28; // [sp+14h] [bp-74h]@1
  char bDisableLastBtn; // [sp+1Bh] [bp-6Dh]@2
  __int16 kStruct; // [sp+1Ch] [bp-6Ch]@13
  unsigned int v31; // [sp+84h] [bp-4h]@1
  int v32; // [sp+88h] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v5 = pkWeapon;
  v6 = this;
  v28 = this;
  if ( pkWeapon )
  {
    v24 = v4;
    bDisableLastBtn = 0;
    i = 0;
    if ( pkWeapon->maxSocketCount )
    {
      v7 = (char *)&this->m_akEnchantGemFrame[0].pkBtn;
      v27 = (char *)pkWeapon->gemSockets;
      v23 = v3;
      do
      {
        (*(void (__stdcall **)(_UNKNOWN *, signed int))(**((_DWORD **)v7 - 1) + 472))(&unk_9931AF, v23);
        IconSlotWin::Clear(*((IconSlotWin **)v7 - 2));
        v8 = TextData2::Get(0x6E866EC7u);
        PgWin::SetToolTipWinText(*((PgWin **)v7 - 2), v8);
        *(_DWORD *)(*((_DWORD *)v7 - 2) + 272) = g_pkToolTipWin;
        if ( *(_WORD *)v27 != -1 || bDisableLastBtn )
        {
          v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
          v10 = *(_WORD *)v27;
          v23 = *(_WORD *)v27;
          if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable)
            && (unsigned __int16)v10 <= *(_WORD *)(v9 + 200)
            && (v11 = *(_DWORD *)(v9 + 196) + 4 * v10, *(_DWORD *)v11)
            && (v12 = *(unsigned int **)v11) != 0 )
          {
            v13 = ActionEffectItemTab::GetByItemID(*(_WORD *)v12);
            pkActionEffectItem = v13;
            if ( v13 )
            {
              if ( ItemActionEffectDescTab::GetByItemActionID(v13->ItemActionID) )
              {
                kStruct = *(_WORD *)v12;
                v14 = Item::Create((SHINE_ITEM_STRUCT *)&kStruct);
                if ( v14 )
                  IconSlotWin::SetItem(*((IconSlotWin **)v7 - 2), v14, 1, 1);
                if ( pkActionEffectItem->EnchantMaxLot )
                {
                  v17 = TextData2::Get(0xCAEBF956u);
                  v16 = fs(v17);
                }
                else
                {
                  v15 = TextData2::Get(0xCAEBFA56u);
                  v16 = fs(v15);
                }
                (*(void (__stdcall **)(char *))(**((_DWORD **)v7 - 1) + 472))(v16);
              }
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 240))(0);
            }
          }
          else
          {
            v18 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 240);
            if ( bDisableLastBtn )
            {
              v18(0);
            }
            else
            {
              v18(1);
              bDisableLastBtn = 1;
            }
          }
          v6 = v28;
        }
        else
        {
          v23 = 1;
          (*(void (**)(void))(**(_DWORD **)v7 + 240))();
        }
        v5 = pkWeapon;
        v27 += 3;
        v7 += 16;
        ++i;
      }
      while ( i < pkWeapon->maxSocketCount );
    }
    v19 = v6->m_pkChargedSocket;
    if ( v5->createdSocketCount )
    {
      ((void (__stdcall *)(_DWORD, int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        0,
        v24);
    }
    else
    {
      ((void (__stdcall *)(signed int, int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        1,
        v24);
      (*((void (__stdcall **)(_DWORD))(&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[4 * (v6->m_uiSlotNums + 21)]->__vecDelDtor
       + 60))(0);
      v20 = TextData2::Get(0x76A66687u);
      PgWin::SetToolTipWinText(*((PgWin **)&v6->baseclass_0.m_bLeftLike + 4 * v6->m_uiSlotNums), v20);
    }
    v21 = **((_DWORD **)&v6->baseclass_0.m_fInitYPos + 4 * v6->m_uiSlotNums);
    v22 = (unsigned __int8)(*((int (**)(void))(&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[4 * (v6->m_uiSlotNums + 21)]->__vecDelDtor
                            + 61))() == 0;
    (*(void (__thiscall **)(_DWORD))(v21 + 240))(*((_DWORD *)&v6->baseclass_0.m_fInitYPos + 4 * v6->m_uiSlotNums));
  }
}
// 4F6490: could not find valid save-restore pair for ebx
// 4F6490: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004F6740) --------------------------------------------------------
void __thiscall EnchantGemWin::OnRegBtn(EnchantGemWin *this, int iIndex)
{
  EnchantGemWin *v2; // esi@1
  IconSlotWin *v3; // ecx@1
  IconSlotWin *v4; // edx@2
  unsigned int v5; // eax@3
  __int16 v6; // ax@4
  int v7; // esi@9
  char *v8; // edi@9
  PROTO_NC_ITEM_ENCHANT_ADD_GEM_REQ kProto; // [sp+8h] [bp-8h]@4

  v2 = this;
  v3 = this->m_pkWeaponIconWin;
  if ( v3->m_eType || (v4 = v2->m_akEnchantGemFrame[iIndex].pkSlot, v4->m_eType) )
  {
    v7 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v8 = TextData2::Get(0xBD5A1741u);
    if ( *(_DWORD *)(v7 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 4))(25, v8, v7);
      if ( *(_DWORD *)(v7 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 20))(25, v8, v7);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
  }
  else
  {
    v5 = v3->m_kContentsDetail.kItem.uiSenderType;
    if ( v5 == 1 )
    {
      v6 = kProto.equipment.Inven & 0x3FF | 0x2000;
      kProto.equipment.Inven = kProto.equipment.Inven & 0x3FF | 0x2000;
    }
    else
    {
      if ( v5 )
      {
        v6 = kProto.equipment.Inven;
      }
      else
      {
        v6 = kProto.equipment.Inven & 0x3FF | 0x2400;
        kProto.equipment.Inven = kProto.equipment.Inven & 0x3FF | 0x2400;
      }
    }
    kProto.equipment.Inven = (v6 ^ LOWORD(v3->m_kContentsDetail.kItem.uiSenderIndex)) & 0x3FF ^ v6;
    kProto.gem.Inven = kProto.gem.Inven & 0x3FF | 0x2400;
    kProto.gem.Inven ^= (kProto.gem.Inven ^ LOWORD(v4->m_kContentsDetail.kItem.uiSenderIndex)) & 0x3FF;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x40u, &kProto, 4);
  }
}

//----- (004F6860) --------------------------------------------------------
void __thiscall EnchantGemWin::OnClose(EnchantGemWin *this)
{
  EnchantGemWin *v1; // esi@1
  PgFrameWork *v2; // edi@1
  unsigned int v3; // ST08_4@2
  int v4; // ST04_4@2
  int v5; // eax@2

  v1 = this;
  EnchantGemWin::ResetContents(this);
  EnchantGemWin::OnSend2EndOfTrade(v1);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = v1->m_uiType;
    v4 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1);
    v5 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v1);
    GameFrameWork::SetEnchantGemWinPos((GameFrameWork *)v2, v5, v4, v3);
  }
}

//----- (004F68C0) --------------------------------------------------------
bool __thiscall EnchantGemDeleteWin::Create(EnchantGemDeleteWin *this, PgFrameWork *pkFrameWork, unsigned int uiSlotNum)
{
  EnchantGemDeleteWin *v3; // ebx@1
  unsigned int v4; // eax@1
  int v5; // eax@1
  NiTexturePalette *v6; // esi@1
  char *v7; // eax@12
  PgSprData *v8; // eax@13
  NiNode *v9; // esi@14
  NiSourceTexture *v11; // eax@19
  PgSprData *v12; // eax@22
  D3DXCOLOR v13; // ST1C_16@24
  char *v14; // eax@24
  D3DXCOLOR v15; // ST1C_16@24
  char *v16; // eax@24
  PgWin *v17; // esi@24
  D3DXCOLOR v18; // ST24_16@24
  char *v19; // eax@24
  D3DXCOLOR v20; // ST24_16@24
  char *v21; // eax@24
  PgSprData *v22; // eax@24
  PgWin *v23; // eax@24
  IconSlotWin *v24; // eax@24
  unsigned int v25; // edi@25
  int v26; // esi@25
  D3DXCOLOR v27; // ST1C_16@26
  char *v28; // eax@26
  PgWinText *v29; // eax@26
  char *v30; // ST30_4@26
  char *v31; // ST2C_4@26
  char *v32; // ST28_4@26
  char *v33; // eax@26
  char *v34; // eax@26
  PgWin *v35; // eax@26
  char *v36; // eax@26
  char *v37; // eax@26
  PgWin *v38; // ecx@26
  char *v39; // eax@26
  PgWinSpr *v40; // eax@26
  PgFrameWork *v41; // ST34_4@26
  int v42; // ecx@26
  char *v43; // eax@26
  char *v44; // eax@27
  PgWinSpr *v45; // eax@27
  NiNode *v46; // esi@28
  const char *v47; // [sp+28h] [bp-54h]@20
  char *v48; // [sp+2Ch] [bp-50h]@5
  int *v49; // [sp+2Ch] [bp-50h]@20
  NiPointer<NiNode> *v50; // [sp+30h] [bp-4Ch]@5
  int *v51; // [sp+30h] [bp-4Ch]@20
  NiTexturePalette *v52; // [sp+34h] [bp-48h]@5
  NiSourceTexture *v53; // [sp+34h] [bp-48h]@20
  UIUtil ui; // [sp+48h] [bp-34h]@19
  int iXPos; // [sp+5Ch] [bp-20h]@26
  int iXOff; // [sp+60h] [bp-1Ch]@13
  int iYOff; // [sp+64h] [bp-18h]@13
  int iLeft; // [sp+68h] [bp-14h]@20
  NiPointer<NiNode> spNode; // [sp+6Ch] [bp-10h]@1
  int v60; // [sp+78h] [bp-4h]@1

  v3 = this;
  spNode.m_pObject = 0;
  v4 = uiSlotNum;
  this->baseclass_0.m_uiSlotNums = uiSlotNum;
  v5 = v4 - 1;
  this->baseclass_0.m_uiType = 1;
  v6 = dword_B70448;
  v60 = 0;
  if ( v5 )
  {
    if ( v5 == 1 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v52 = v6;
      v50 = &spNode;
      v48 = "Game\\EnchantWin02.nif";
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v52 = v6;
      v50 = &spNode;
      v48 = "Game\\EnchantWin03.nif";
    }
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v52 = v6;
    v50 = &spNode;
    v48 = "Game\\EnchantWin01.nif";
  }
  v7 = Folder::Merge(&Folder::m_acMenu, v48);
  PgUtil::LoadNodeNifFile(v7, v50, v52);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v3->baseclass_0.baseclass_0, 0, 0, v8, 0, pkFrameWork, "EnchantGemDeleteWin", 0) )
  {
    v9 = spNode.m_pObject;
    v60 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v60) = 1;
  UIUtil::SetParent(&ui, &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v53 = v11;
    v51 = (int *)&uiSlotNum;
    v49 = &iLeft;
    v47 = "Theme";
  }
  else
  {
    v53 = 0;
    v51 = (int *)&uiSlotNum;
    v49 = &iLeft;
    v47 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v47, v49, v51, v53);
  PgWinSpr::CreateWin(iLeft - iXOff, uiSlotNum - iYOff, v12, &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  if ( v3->baseclass_0.m_uiSlotNums == 3 )
    UIUtil::CreateSpr(&ui, "Panel04", 0);
  *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v14 = TextData2::Get(0xCCE10B19u);
  UIUtil::CreateText(&ui, "NPCText", v14, 0, COERCE_D3DXCOLOR(v13.r), 5u, 0, 0);
  *(_QWORD *)&v15.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v15.b = qword_A746E8;
  v16 = TextData2::Get(0x2B4F2789u);
  UIUtil::CreateText(&ui, "ItemName", v16, 0, COERCE_D3DXCOLOR(v15.r), 4u, 0, 0);
  UIUtil::CreateBtn(&ui, 5u, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  v17 = (PgWin *)UIUtil::CreateBtn(&ui, 5u, "QuitBtnNor", "QuitBtnOver", "QuitBtnClick", 0, 0);
  *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v19 = TextData2::Get(0xCB06243Eu);
  UIUtil::CreateAttachedText(&ui, v17, v19, COERCE_D3DXCOLOR(v18.r), 5u);
  *(_QWORD *)&v20.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v20.b = qword_A746E8;
  v21 = TextData2::Get(0x1E4B2C7Au);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v21, COERCE_D3DXCOLOR(v20.r), 5u);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TgetSlot", &iLeft, (int *)&uiSlotNum, 0);
  v23 = (PgWin *)PgWinSpr::CreateWin(
                   iLeft - iXOff,
                   uiSlotNum - iYOff,
                   v22,
                   &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                   0,
                   0);
  v24 = IconSlotWin::CreateWin(3, 3, v23);
  v3->baseclass_0.m_pkWeaponIconWin = v24;
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    1u);
  if ( v3->baseclass_0.m_uiSlotNums > 0 )
  {
    v25 = 1;
    v26 = (int)&v3->baseclass_0.m_akEnchantGemFrame[0].pkBtn;
    do
    {
      *(_QWORD *)&v27.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v27.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v28 = fs("TitleName%02d");
      v29 = UIUtil::CreateText(&ui, v28, &byte_9931BB, 0, COERCE_D3DXCOLOR(v27.r), 5u, 0, 0);
      *(_DWORD *)(v26 - 4) = v29;
      v29->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
      v30 = fs("RegBtnLock%02d");
      v31 = fs("RegBtnClick%02d");
      v32 = fs("RegBtnOver%02d");
      v33 = fs("RegBtnNor%02d");
      *(_DWORD *)v26 = UIUtil::CreateBtn(&ui, v25, v33, v32, v31, v30, 0);
      v34 = fs("Slot%02d");
      v35 = (PgWin *)UIUtil::CreateSpr(&ui, v34, 0);
      *(_DWORD *)(v26 - 8) = IconSlotWin::CreateWin(3, 3, v35);
      v36 = TextData2::Get(0x6E866EC7u);
      PgWin::SetToolTipWinText(*(PgWin **)(v26 - 8), v36);
      *(_DWORD *)(*(_DWORD *)(v26 - 8) + 272) = g_pkToolTipWin;
      (*(void (__stdcall **)(signed int))(**(_DWORD **)(v26 - 8) + 240))(1);
      *(_DWORD *)(*(_DWORD *)v26 + 272) = g_pkToolTipWin;
      v37 = TextData2::Get(0x5A927D7Du);
      PgWin::SetToolTipWinText(*(PgWin **)v26, v37);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v26 + 240))(1);
      v38 = *(PgWin **)v26;
      iXPos = 0;
      pkFrameWork = 0;
      ((void (__stdcall *)(int *, PgFrameWork **))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
        &iXPos,
        &pkFrameWork);
      v39 = fs("RegBtnNor%02d");
      v40 = UIUtil::CreateSpr(&ui, v39, 0);
      v41 = pkFrameWork;
      v42 = iXPos;
      *(_DWORD *)(v26 + 4) = v40;
      ((void (__thiscall *)(PgWinSpr *, int, PgFrameWork *))v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v40,
        v42,
        v41);
      *(_DWORD *)(*(_DWORD *)(v26 + 4) + 272) = g_pkToolTipWin;
      v43 = TextData2::Get(0x5A927D7Du);
      PgWin::SetToolTipWinText(*(PgWin **)(v26 + 4), v43);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v26 + 4) + 276))(0.0);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)(v26 + 4) + 256))(1);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v26 + 4) + 240))(0);
      ++v25;
      v26 += 16;
    }
    while ( v25 - 1 < v3->baseclass_0.m_uiSlotNums );
  }
  v44 = fs("RegCancelBtnNor%02d");
  v45 = UIUtil::CreateSpr(&ui, v44, 0);
  v3->baseclass_0.m_pkChargedSocket = v45;
  v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v45,
    0);
  ((void (__stdcall *)(_DWORD))v3->baseclass_0.m_pkChargedSocket->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(EnchantGemDeleteWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  LOBYTE(v60) = 0;
  UIUtil::_UIUtil(&ui);
  v60 = -1;
  if ( spNode.m_pObject )
  {
    v46 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v46 )
        v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F6F00) --------------------------------------------------------
void __thiscall EnchantGemDeleteWin::OnRegBtn(EnchantGemDeleteWin *this, int iIndex)
{
  EnchantGemDeleteWin *v2; // esi@1
  IconSlotWin *v3; // ecx@1
  int v4; // esi@2
  char *v5; // edi@2
  unsigned int v6; // eax@7
  __int16 v7; // ax@8
  __int16 v8; // cx@12
  int v9; // esi@14
  char *v10; // edi@14
  PROTO_NC_ITEM_ENCHANT_REMOVE_GEM_REQ kProto; // [sp+8h] [bp-8h]@8

  v2 = this;
  v3 = this->baseclass_0.m_pkWeaponIconWin;
  if ( v3->m_eType )
  {
    v4 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v5 = TextData2::Get(0xBD5A1741u);
    if ( *(_DWORD *)(v4 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
      if ( *(_DWORD *)(v4 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  }
  else
  {
    if ( v2->baseclass_0.m_akEnchantGemFrame[iIndex].pkSlot->m_eType )
    {
      v9 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v10 = TextData2::Get(0x1A543726u);
      if ( *(_DWORD *)(v9 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 4))(25, v10, v9);
        if ( *(_DWORD *)(v9 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 20))(25, v10, v9);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
    }
    else
    {
      v6 = v3->m_kContentsDetail.kItem.uiSenderType;
      if ( v6 == 1 )
      {
        v7 = kProto.equipment.Inven & 0x3FF | 0x2000;
        kProto.equipment.Inven = kProto.equipment.Inven & 0x3FF | 0x2000;
      }
      else
      {
        if ( v6 )
        {
          v7 = kProto.equipment.Inven;
        }
        else
        {
          v7 = kProto.equipment.Inven & 0x3FF | 0x2400;
          kProto.equipment.Inven = kProto.equipment.Inven & 0x3FF | 0x2400;
        }
      }
      v8 = (v7 ^ LOWORD(v3->m_kContentsDetail.kItem.uiSenderIndex)) & 0x3FF;
      kProto.gemSocketIndex = iIndex;
      kProto.equipment.Inven = v8 ^ v7;
      if ( Inventory::FindEnchantSoketReload(&g_kInventory, &kProto.remover) )
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x42u, &kProto, 5);
    }
  }
}

//----- (004F7060) --------------------------------------------------------
void __thiscall EnchantGemDeleteWin::SetEnchantGem(EnchantGemDeleteWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID)
{
  int v3; // esi@0
  ShineItemAttr_Weapon *v4; // ebx@1
  EnchantGemDeleteWin *v5; // edi@1
  bool v6; // al@2
  bool v7; // zf@2
  int v8; // esi@3
  int v9; // edi@5
  int v10; // ebx@5
  int v11; // eax@7
  unsigned int *v12; // edi@8
  ActionEffectItem *v13; // eax@9
  Item *v14; // eax@11
  char *v15; // eax@14
  char *v16; // eax@14
  char *v17; // eax@15
  void (__stdcall *v18)(_DWORD); // eax@17
  int v19; // ecx@23
  void *(__thiscall *v20)(NiRefObject *, unsigned int); // eax@24
  char *v21; // eax@25
  int v22; // esi@27
  int v23; // ST0C_4@27
  signed int v24; // [sp-8h] [bp-98h]@18
  int v25; // [sp-4h] [bp-94h]@2
  ITEM_INVEN kInven; // [sp+8h] [bp-88h]@2
  ShineItemAttr_Weapon *v27; // [sp+Ch] [bp-84h]@1
  ActionEffectItem *pkActionEffectItem; // [sp+10h] [bp-80h]@9
  int i; // [sp+14h] [bp-7Ch]@2
  EnchantGemDeleteWin *v30; // [sp+18h] [bp-78h]@1
  ShineItemAttr_Weapon::<unnamed-type-gemSockets> *v31; // [sp+1Ch] [bp-74h]@3
  bool bRemoveItemFound; // [sp+23h] [bp-6Dh]@2
  __int16 kStruct; // [sp+24h] [bp-6Ch]@11
  unsigned int v34; // [sp+8Ch] [bp-4h]@1
  int v35; // [sp+90h] [bp+0h]@1

  v34 = (unsigned int)&v35 ^ __security_cookie;
  v4 = pkWeapon;
  v5 = this;
  v30 = this;
  v27 = pkWeapon;
  if ( pkWeapon )
  {
    v25 = v3;
    v6 = Inventory::FindEnchantSoketReload(&g_kInventory, &kInven);
    v7 = pkWeapon->maxSocketCount == 0;
    bRemoveItemFound = v6;
    i = 0;
    if ( !v7 )
    {
      v8 = (int)&v5->baseclass_0.m_akEnchantGemFrame[0].pkBtn;
      v31 = pkWeapon->gemSockets;
      while ( 1 )
      {
        (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v8 - 4) + 472))(&unk_9931CA);
        IconSlotWin::Clear(*(IconSlotWin **)(v8 - 8));
        if ( v31->elementalGemID != -1 )
          break;
LABEL_23:
        v4 = v27;
        v19 = v27->maxSocketCount;
        ++v31;
        v8 += 16;
        ++i;
        if ( i >= v19 )
          goto LABEL_24;
      }
      v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v10 = v31->elementalGemID;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v31->elementalGemID)
        && (unsigned __int16)v10 <= *(_WORD *)(v9 + 200)
        && (v11 = *(_DWORD *)(v9 + 196) + 4 * v10, *(_DWORD *)v11)
        && (v12 = *(unsigned int **)v11) != 0 )
      {
        v13 = ActionEffectItemTab::GetByItemID(*(_WORD *)v12);
        pkActionEffectItem = v13;
        if ( !v13 )
        {
LABEL_22:
          v5 = v30;
          goto LABEL_23;
        }
        if ( ItemActionEffectDescTab::GetByItemActionID(v13->ItemActionID) )
        {
          kStruct = *(_WORD *)v12;
          v14 = Item::Create((SHINE_ITEM_STRUCT *)&kStruct);
          if ( v14 )
            IconSlotWin::SetItem(*(IconSlotWin **)(v8 - 8), v14, 1, 1);
          if ( pkActionEffectItem->EnchantMaxLot )
          {
            v17 = TextData2::Get(0xCAEBF956u);
            v16 = fs(v17);
          }
          else
          {
            v15 = TextData2::Get(0xCAEBFA56u);
            v16 = fs(v15);
          }
          (*(void (__stdcall **)(char *))(**(_DWORD **)(v8 - 4) + 472))(v16);
        }
        v18 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 240);
        if ( bRemoveItemFound )
        {
          v24 = 1;
LABEL_21:
          v18(v24);
          goto LABEL_22;
        }
      }
      else
      {
        v18 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 240);
      }
      v24 = 0;
      goto LABEL_21;
    }
LABEL_24:
    v20 = v5->baseclass_0.m_pkChargedSocket->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( v4->createdSocketCount )
    {
      ((void (__stdcall *)(_DWORD, int))v20)(0, v25);
    }
    else
    {
      ((void (__stdcall *)(signed int, int))v20)(1, v25);
      (*((void (__stdcall **)(_DWORD))(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[4 * (v5->baseclass_0.m_uiSlotNums + 21)]->__vecDelDtor
       + 60))(0);
      v21 = TextData2::Get(0x76A66687u);
      PgWin::SetToolTipWinText(
        *((PgWin **)&v5->baseclass_0.baseclass_0.m_bLeftLike + 4 * v5->baseclass_0.m_uiSlotNums),
        v21);
    }
    v22 = **((_DWORD **)&v5->baseclass_0.baseclass_0.m_fInitYPos + 4 * v5->baseclass_0.m_uiSlotNums);
    v23 = (unsigned __int8)(*((int (**)(void))(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[4 * (v5->baseclass_0.m_uiSlotNums + 21)]->__vecDelDtor
                            + 61))() == 0;
    (*(void (__thiscall **)(_DWORD))(v22 + 240))(*((_DWORD *)&v5->baseclass_0.baseclass_0.m_fInitYPos
                                                 + 4 * v5->baseclass_0.m_uiSlotNums));
  }
}
// 4F7060: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (004F72D0) --------------------------------------------------------
void __thiscall EnchantGemWin::OnShowWin(EnchantGemWin *this)
{
  EnchantGemWin *v1; // esi@1
  bool v2; // zf@1
  PgWin **v3; // ebx@2
  int v4; // eax@3
  unsigned int v5; // eax@4
  void *v6; // eax@6
  void *v7; // edi@6
  char *v8; // eax@7
  int key; // [sp+4h] [bp-18h]@3
  char *v10; // [sp+8h] [bp-14h]@3
  char *v11; // [sp+Ch] [bp-10h]@3
  char *v12; // [sp+10h] [bp-Ch]@3
  EnchantGemWin *v13; // [sp+14h] [bp-8h]@1
  unsigned int i; // [sp+18h] [bp-4h]@1

  v1 = this;
  v2 = this->m_uiSlotNums == 0;
  v13 = this;
  i = 0;
  if ( !v2 )
  {
    v3 = (PgWin **)this->m_akEnchantGemFrame;
    do
    {
      v10 = &byte_9788EB;
      v11 = &byte_9788EB;
      v12 = &byte_9788EB;
      key = 1854303943;
      v4 = *(_DWORD *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 56);
      if ( v4 )
        v5 = *(_DWORD *)(v4 + 40);
      else
        v5 = 0;
      v6 = bsearch(&key, TextData2::ms_apkNode, v5, 0x10u, TextDataNodeComp);
      v7 = v6;
      if ( v6 )
      {
        if ( strcmp(*((const char **)v6 + 2), "None") )
          SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v7 + 2));
        if ( strcmp(*((const char **)v7 + 3), "None") )
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v7 + 3));
        v8 = (char *)*((_DWORD *)v7 + 1);
        v1 = v13;
      }
      else
      {
        v8 = &byte_9788EB;
      }
      PgWin::SetToolTipWinText(*v3, v8);
      (*v3)->m_pkToolTipWin = g_pkToolTipWin;
      v3 += 4;
      ++i;
    }
    while ( i < v1->m_uiSlotNums );
  }
}
// A94344: using guessed type int ITableBase_TextDataType2_TextData2___ms_pkTable;

//----- (004F7410) --------------------------------------------------------
EnchantGemToolTipWin *__cdecl EnchantGemToolTipWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  EnchantGemToolTipWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x198u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &EnchantGemToolTipWin::_vftable_;
    *((_DWORD *)v2 + 58) = &EnchantGemToolTipWin::_vftable_;
    *((_DWORD *)v2 + 98) = 0;
    *((_DWORD *)v2 + 99) = 0;
    *((_DWORD *)v2 + 100) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (EnchantGemToolTipWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9934F0: using guessed type int (__stdcall *EnchantGemToolTipWin___vftable_)(int uiFlags);
// 99350C: using guessed type int (__thiscall *EnchantGemToolTipWin___vftable_)(void *p, char);

//----- (004F7560) --------------------------------------------------------
EnchantGemWin *__cdecl EnchantGemWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int uiSlotNum)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@8
  EnchantGemWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x198u);
  v3 = v2;
  result.m_pObject = (PgWin *)v2;
  v7 = 0;
  if ( v2 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v2);
    *(_DWORD *)v3 = &EnchantGemWin::_vftable_;
    *((_DWORD *)v3 + 58) = &EnchantGemWin::_vftable_;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *, unsigned int))(*(_DWORD *)v3 + 540))(
                          v3,
                          pkFrameWork,
                          uiSlotNum) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = (EnchantGemWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}
// 993730: using guessed type int (__stdcall *EnchantGemWin___vftable_)(int uiFlags);
// 99374C: using guessed type int (__thiscall *EnchantGemWin___vftable_)(void *p, char);

//----- (004F76A0) --------------------------------------------------------
EnchantGemDeleteWin *__cdecl EnchantGemDeleteWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int uiSlotNum)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@8
  EnchantGemDeleteWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x19Cu);
  v3 = v2;
  result.m_pObject = (PgWin *)v2;
  v7 = 0;
  if ( v2 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v2);
    *(_DWORD *)v3 = &EnchantGemDeleteWin::_vftable_;
    *((_DWORD *)v3 + 58) = &EnchantGemDeleteWin::_vftable_;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *, unsigned int))(*(_DWORD *)v3 + 540))(
                          v3,
                          pkFrameWork,
                          uiSlotNum) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = (EnchantGemDeleteWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}
// 993978: using guessed type int (__stdcall *EnchantGemDeleteWin___vftable_)(int uiFlags);
// 993994: using guessed type int (__thiscall *EnchantGemDeleteWin___vftable_)(void *p, char);

//----- (004F77E0) --------------------------------------------------------
void *__thiscall EnchantGemToolTipWin::_vector_deleting_destructor_(EnchantGemToolTipWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EnchantGemToolTipWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EnchantGemToolTipWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9934F0: using guessed type int (__stdcall *EnchantGemToolTipWin___vftable_)(int uiFlags);
// 99350C: using guessed type int (__thiscall *EnchantGemToolTipWin___vftable_)(void *p, char);

//----- (004F7820) --------------------------------------------------------
void *__thiscall EnchantGemWin::_vector_deleting_destructor_(EnchantGemDeleteWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EnchantGemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EnchantGemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 993730: using guessed type int (__stdcall *EnchantGemWin___vftable_)(int uiFlags);
// 99374C: using guessed type int (__thiscall *EnchantGemWin___vftable_)(void *p, char);

//----- (004F7860) --------------------------------------------------------
void __thiscall EventFriendWin::EventFriendWin(EventFriendWin *this)
{
  EventFriendWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkCharNameInputEdit = 0;
  v1->m_pkCheckTextBut = 0;
  v1->m_pkCheck = 0;
  v1->m_pkOk = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventFriendWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventFriendWin::_vftable_;
}
// 993C60: using guessed type int (__stdcall *EventFriendWin___vftable_)(int uiFlags);
// 993C7C: using guessed type int (__thiscall *EventFriendWin___vftable_)(void *p, char);

//----- (004F78A0) --------------------------------------------------------
void __thiscall EventFriendWin::_EventFriendWin(EventFriendWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventFriendWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventFriendWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 993C60: using guessed type int (__stdcall *EventFriendWin___vftable_)(int uiFlags);
// 993C7C: using guessed type int (__thiscall *EventFriendWin___vftable_)(void *p, char);

//----- (004F78C0) --------------------------------------------------------
void __thiscall EventFriendWin::OnCmdCancel(EventFriendWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (004F78E0) --------------------------------------------------------
void __thiscall EventFriendWin::SetEnableRequestButton(EventFriendWin *this, bool b)
{
  if ( this->m_pkOk )
    ((void (__stdcall *)(_DWORD))this->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
}

//----- (004F7910) --------------------------------------------------------
void __thiscall EventFriendWin::ShowCheck(EventFriendWin *this, bool b)
{
  EventFriendWin *v2; // esi@1

  v2 = this;
  if ( this->m_pkCheck )
    ((void (__stdcall *)(_DWORD))this->m_pkCheck->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  if ( v2->m_pkCheckTextBut )
    ((void (__stdcall *)(_DWORD))v2->m_pkCheckTextBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
}

//----- (004F7960) --------------------------------------------------------
void __thiscall EventFriendWin::OnClose(EventFriendWin *this)
{
  ColumnBut *v1; // eax@1

  v1 = this->m_pkCheck;
  if ( v1 )
    GameFrameWork::NcEventFriendHideMsgCmd((GameFrameWork *)this->baseclass_0.m_pkFrameWork, v1->m_bCheck);
}

//----- (004F7990) --------------------------------------------------------
bool __thiscall EventFriendWin::Create(EventFriendWin *this, PgFrameWork *pkFrameWork)
{
  EventFriendWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // ebx@15
  PgWinBut *v11; // eax@15
  ColumnBut *v12; // eax@17
  PgSprData *v13; // edi@18
  PgWinBut *v14; // eax@18
  int iOffY; // [sp+1Ch] [bp-1Ch]@15
  int uiLeft; // [sp+20h] [bp-18h]@11
  int uiTop; // [sp+24h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+28h] [bp-10h]@1
  int v19; // [sp+34h] [bp-4h]@1
  PgSprData *pkSprData; // [sp+40h] [bp+8h]@15
  PgSprData *pkSprDataa; // [sp+40h] [bp+8h]@15
  PgSprData *pkSprDatab; // [sp+40h] [bp+8h]@17

  v2 = this;
  spNode.m_pObject = 0;
  v19 = 0;
  v3 = MenuTexMgr::GetTexture(0xFu);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v19 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\Event01.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "EventFriendWin", 0) )
  {
    v4 = spNode.m_pObject;
    v19 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  iOffY = uiTop;
  pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - iOffY, pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
  pkSprDataa = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RegistNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(pkSprDataa, &spNode.m_pObject->baseclass_0, "RegistClick");
  PgSprData::Add(pkSprDataa, &spNode.m_pObject->baseclass_0, "RegistOver");
  v11 = PgWinBut::CreateWin(
          uiLeft - v10,
          uiTop - iOffY,
          pkSprDataa,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0xAu,
          0,
          0);
  v2->m_pkOk = v11;
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  if ( !v2->m_pkOk
    || (pkSprDatab = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CheckNor", &uiLeft, &uiTop, v3),
        PgSprData::Add(pkSprDatab, &spNode.m_pObject->baseclass_0, "CheckClick"),
        v12 = ColumnBut::CreateWin(
                uiLeft - v10,
                uiTop - iOffY,
                pkSprDatab,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xEu,
                0),
        (v2->m_pkCheck = v12) == 0)
    || (v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, v3),
        PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "Text01"),
        PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "Text01"),
        v14 = PgWinBut::CreateWin(
                uiLeft - v10,
                uiTop - iOffY,
                v13,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xEu,
                0,
                0),
        (v2->m_pkCheckTextBut = v14) == 0) )
  {
    v19 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  ((void (__thiscall *)(EventFriendWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
  v19 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F7CB0) --------------------------------------------------------
void __thiscall EventFriendWin::OnCmdOk(EventFriendWin *this)
{
  PgWin *v1; // esi@1
  PgFrameWork *v2; // edi@1
  char *v3; // eax@1

  v1 = (PgWin *)this;
  v2 = this->baseclass_0.m_pkFrameWork;
  v3 = TextData::Get(0x84A2B1EAu);
  GameFrameWork::OnOpenInputTextWin((GameFrameWork *)v2, v1, 0xDu, v3);
}

//----- (004F7CE0) --------------------------------------------------------
void __thiscall EventFriendWin::OnCommand(EventFriendWin *this, unsigned int wParam, int lParam)
{
  EventFriendWin *v3; // esi@1
  PgFrameWork *v4; // edi@2
  char *v5; // eax@2
  unsigned int v6; // eax@4
  const char *v7; // eax@5

  v3 = this;
  switch ( wParam )
  {
    case 0xAu:
      v4 = this->baseclass_0.m_pkFrameWork;
      v5 = TextData::Get(0x84A2B1EAu);
      GameFrameWork::OnOpenInputTextWin((GameFrameWork *)v4, &v3->baseclass_0.baseclass_0.baseclass_0, 0xDu, v5);
      break;
    case 0xBu:
    case 0xCu:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xDu:
      v6 = this->baseclass_0.m_pkFrameWork[20].m_kMsgQ.m_uiTail;
      if ( v6 )
      {
        v7 = (const char *)(*(int (**)(void))(**(_DWORD **)(v6 + 344) + 452))();
        if ( v7 )
          GameFrameWork::NcEventFriendRequestReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v7);
      }
      break;
    case 0xEu:
      if ( this->m_pkCheck )
        this->m_pkCheck->m_bCheck = this->m_pkCheck->m_bCheck == 0;
      break;
    default:
      return;
  }
}

//----- (004F7DA0) --------------------------------------------------------
EventFriendWin *__cdecl EventFriendWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  EventFriendWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x174u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &EventFriendWin::_vftable_;
    *((_DWORD *)v2 + 58) = &EventFriendWin::_vftable_;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 92) = 0;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (EventFriendWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 993C60: using guessed type int (__stdcall *EventFriendWin___vftable_)(int uiFlags);
// 993C7C: using guessed type int (__thiscall *EventFriendWin___vftable_)(void *p, char);

//----- (004F7F00) --------------------------------------------------------
void *__thiscall EventFriendWin::_vector_deleting_destructor_(EventFriendWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EventFriendWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EventFriendWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 993C60: using guessed type int (__stdcall *EventFriendWin___vftable_)(int uiFlags);
// 993C7C: using guessed type int (__thiscall *EventFriendWin___vftable_)(void *p, char);

//----- (004F7F40) --------------------------------------------------------
void __thiscall FeedMoverWin::DirectMessage(FeedMoverWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  char *v4; // esi@2
  void (__thiscall *v5)(_DWORD, _DWORD, _DWORD); // eax@2
  signed int v6; // eax@3
  FeedMoverWin *iSy; // [sp+0h] [bp-4h]@1

  iSy = this;
  if ( pkFrom )
  {
    v4 = (char *)this - 232;
    pkFrom = (IDirectMessenger *)PgWin::ms_iMsX.x;
    v5 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)this - 58) + 224);
    iSy = (FeedMoverWin *)PgWin::ms_iMsY;
    v5((char *)this - 232, &pkFrom, &iSy);
    if ( (signed int)pkFrom >= 0 )
    {
      v6 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 144))(v4);
      if ( (signed int)pkFrom < v6 )
      {
        if ( (signed int)iSy >= 0 )
          (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 148))(v4);
      }
    }
  }
}

//----- (004F7FB0) --------------------------------------------------------
void __thiscall FeedMoverWin::Normalize(FeedMoverWin *this, bool b)
{
  FeedMoverWin *v2; // esi@1
  PgWinText *v3; // ecx@1
  bool v4; // zf@1
  bool v5; // bl@1
  int v6; // eax@1
  int v7; // eax@5
  int v8; // eax@9
  int v9; // eax@13
  int v10; // eax@17

  v2 = this;
  v3 = this->m_pkNameTextWin;
  v4 = v2->m_pkMoverHG == 0;
  v2->m_bNormalize = b;
  v5 = !v4;
  v6 = ((int (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  LOBYTE(v6) = v2->m_bNormalize && v5;
  ((void (__stdcall *)(_DWORD))v2->m_pkNum_Hungry->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v6);
  v7 = ((int (__stdcall *)(_DWORD))v2->m_pkMoverSpeed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  LOBYTE(v7) = v2->m_bNormalize && v5;
  v8 = ((int (__stdcall *)(_DWORD))v2->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7);
  LOBYTE(v8) = v2->m_bNormalize && v5;
  v9 = ((int (__stdcall *)(_DWORD))v2->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
  LOBYTE(v9) = v2->m_bNormalize && v5;
  v10 = ((int (__stdcall *)(_DWORD))v2->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v9);
  LOBYTE(v10) = v2->m_bNormalize && v5;
  ((void (__stdcall *)(_DWORD))v2->m_pkPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v10);
  ((void (__stdcall *)(_DWORD))v2->m_pkPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
}

//----- (004F80D0) --------------------------------------------------------
void __thiscall FeedMoverWin::_FeedMoverWin(FeedMoverWin *this)
{
  FeedMoverWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FeedMoverWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FeedMoverWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_spMoverTexture,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 993FE8: using guessed type int (__stdcall *FeedMoverWin___vftable_)(int uiFlags);
// 994004: using guessed type int (__thiscall *FeedMoverWin___vftable_)(void *p, char);

//----- (004F8160) --------------------------------------------------------
void __thiscall FeedMoverWin::EnableMoverFaceAni(FeedMoverWin *this)
{
  FeedMoverWin *v1; // edi@1
  NiSourceTexture *v2; // esi@1
  PgWinSpr *v3; // ecx@4

  v1 = this;
  v2 = this->m_spMoverTexture[2].m_pObject;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( v2 )
  {
    v3 = v1->m_pkMoverFaceCutWin;
    if ( v3 )
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v2);
  }
  v1->m_kMarkCheck.m_fMarkTime = 2.0;
  CNSTimer_MarkCheck::ReSet(&v1->m_kMarkCheck, Timer::ms_fCurTime, OVER);
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004F8220) --------------------------------------------------------
void __thiscall FeedMoverWin::ProcessMeInput(FeedMoverWin *this, bool *bHit)
{
  FeedMoverWin *v2; // esi@1
  bool v3; // bl@1

  v2 = this;
  v3 = PgWin::ms_kbRbutReleased.m_iBool >= 1;
  if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->m_pkMoverFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    && v3 )
    FeedMoverWin::Normalize(v2, v2->m_bNormalize == 0);
  PgWinFrame::ProcessMeInput(&v2->baseclass_0, bHit);
}

//----- (004F8280) --------------------------------------------------------
void __thiscall FeedMoverWin::UpdateFaceCut(FeedMoverWin *this)
{
  char *v1; // eax@2

  if ( this->m_pkMoverFaceCutWin )
  {
    v1 = (char *)this->m_spMoverTexture;
    if ( !this->m_uiHungryPoint )
      v1 = (char *)&this->m_spMoverTexture[1];
    ((void (__stdcall *)(_DWORD))this->m_pkMoverFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(*(_DWORD *)v1);
  }
}

//----- (004F82C0) --------------------------------------------------------
void __thiscall FeedMoverWin::FeedMoverWin(FeedMoverWin *this)
{
  FeedMoverWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FeedMoverWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FeedMoverWin::_vftable_;
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kMarkCheck);
  v1->m_pkFrameWork = 0;
  v1->m_pkHPBarWin = 0;
  v1->m_pkHPBarStartWin = 0;
  v1->m_pkHPBarEndWin = 0;
  v1->m_pkMoverFaceCutWin = 0;
  v1->m_pkNameTextWin = 0;
  v1->m_pkNum_Hungry = 0;
  v1->m_pkMoverSpeed = 0;
  v1->m_pkMoverMain = 0;
  v1->m_pkMoverView = 0;
  v1->m_pkMoverHG = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spMoverTexture,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_uiMaxHP = 0;
  v1->m_uiHungryPoint = 0;
  v1->m_uiMoverSpeed = 0;
  v1->m_bNormalize = 1;
  v1->m_kMoverID = -1;
  v1->m_uiMoverLevel = 0;
  v1->m_pkPanel[0] = 0;
  v1->m_pkPanel[1] = 0;
}
// 993FE8: using guessed type int (__stdcall *FeedMoverWin___vftable_)(int uiFlags);
// 994004: using guessed type int (__thiscall *FeedMoverWin___vftable_)(void *p, char);

//----- (004F83C0) --------------------------------------------------------
bool __thiscall FeedMoverWin::Create(FeedMoverWin *this, PgFrameWork *pkFrameWork)
{
  FeedMoverWin *v2; // esi@1
  PgFrameWork *v3; // ebx@1
  void *v4; // edi@1
  NiNode *v5; // esi@2
  char *v7; // eax@9
  PgSprData *v8; // eax@10
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@11
  int v10; // edi@11
  PgFrameWork *v11; // ebx@11
  PgSprData *v12; // eax@11
  PgWinSpr *v13; // eax@11
  char *v14; // eax@13
  NiSourceTexture *v15; // eax@13
  char *v16; // eax@16
  PgSprData *v17; // eax@17
  PgWinSpr *v18; // eax@17
  PgSprData *v19; // eax@17
  PgWinSpr *v20; // eax@17
  PgSprData *v21; // eax@17
  PgWinSpr *v22; // eax@17
  PgSprData *v23; // eax@17
  PgWinBar *v24; // eax@17
  PgSprData *v25; // eax@17
  PgWinBar *v26; // eax@17
  PgSprData *v27; // eax@17
  PgWinBar *v28; // eax@17
  PgWin *v29; // ST4C_4@17
  PgFont *v30; // eax@17
  PgWinAbbreviateText *v31; // eax@17
  PgFont *v32; // eax@17
  PgWinText *v33; // eax@17
  PgFont *v34; // eax@17
  PgWinText *v35; // eax@17
  NiNode *v36; // esi@18
  NiTexturePalette *pkMoverTexture; // [sp+64h] [bp-24h]@7
  NiSourceTexture *pkMoverTexturea; // [sp+64h] [bp-24h]@13
  unsigned int uiWidth; // [sp+68h] [bp-20h]@17
  unsigned int uiHeight; // [sp+6Ch] [bp-1Ch]@17
  NiSourceTexture *pkTexture; // [sp+70h] [bp-18h]@1
  NiPointer<NiNode> spNode; // [sp+74h] [bp-14h]@1
  int iLeft; // [sp+78h] [bp-10h]@10
  int v44; // [sp+84h] [bp-4h]@1

  v2 = this;
  v3 = pkFrameWork;
  this->m_pkFrameWork = pkFrameWork;
  spNode.m_pObject = 0;
  v44 = 0;
  v4 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v4;
  if ( !v4 )
    goto LABEL_24;
  pkMoverTexture = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\PetFace.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, pkMoverTexture);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, (int *)&pkFrameWork, (NiSourceTexture *)v4);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, v3, "FeedMoverWin", 0) )
  {
LABEL_24:
    v5 = spNode.m_pObject;
    v44 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  v2->baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
  v9(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 1u);
  v10 = iLeft;
  v11 = pkFrameWork;
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &iLeft, (int *)&pkFrameWork, pkTexture);
  v13 = PgWinSpr::CreateWin(iLeft, (int)pkFrameWork, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkPanel[1] = v13;
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  if ( !Folder::m_bInit )
    Folder::Init();
  v14 = fs("%sgame\\MobPortrait\\%s.png");
  v15 = PgUtil::LoadSourceTexture(v14);
  pkMoverTexturea = v15;
  if ( !v15 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v16 = fs("%sgame\\MobPortrait\\%s.tga");
    v15 = PgUtil::LoadSourceTexture(v16);
    pkMoverTexturea = v15;
  }
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_Mon", &iLeft, (int *)&pkFrameWork, v15);
  v18 = PgWinSpr::CreateWin(
          iLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v17,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkMoverFaceCutWin = v18;
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v18,
    0);
  ((void (__stdcall *)(NiSourceTexture *))v2->m_pkMoverFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(pkMoverTexturea);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &iLeft, (int *)&pkFrameWork, pkTexture);
  v20 = PgWinSpr::CreateWin(iLeft, (int)pkFrameWork, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, (int *)&pkFrameWork, pkTexture);
  v22 = PgWinSpr::CreateWin(iLeft, (int)pkFrameWork, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkPanel[0] = v22;
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_Start", &iLeft, (int *)&pkFrameWork, pkTexture);
  v24 = PgWinBar::CreateWin(
          iLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v23,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v2->m_pkHPBarStartWin = (PgWinSpr *)v24;
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v24,
    1u);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_End", &iLeft, (int *)&pkFrameWork, pkTexture);
  v26 = PgWinBar::CreateWin(
          iLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v25,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v2->m_pkHPBarEndWin = (PgWinSpr *)v26;
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v26,
    1u);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP", &iLeft, (int *)&pkFrameWork, pkTexture);
  v28 = PgWinBar::CreateWin(
          iLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v27,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v2->m_pkHPBarWin = v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v28,
    0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CharName", &iLeft, (int *)&pkFrameWork, &uiWidth, &uiHeight);
  v29 = g_pkToolTipWin;
  v30 = Font::Get(0);
  v31 = PgWinAbbreviateText::CreateWin(
          iLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          uiWidth,
          uiHeight,
          v30,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          "2",
          0,
          0,
          1,
          v29,
          0x14u);
  v2->m_pkNameTextWin = (PgWinText *)v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("TestName");
  PgUtil::GetTriShapeRect(
    &spNode.m_pObject->baseclass_0,
    "Num_Hungry",
    &iLeft,
    (int *)&pkFrameWork,
    &uiWidth,
    &uiHeight);
  v32 = Font::Get(0);
  v33 = PgWinText::CreateWin(
          iLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          uiWidth,
          uiHeight,
          v32,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          "2",
          0);
  v2->m_pkNum_Hungry = v33;
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkNum_Hungry->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_993EAD);
  PgUtil::GetTriShapeRect(
    &spNode.m_pObject->baseclass_0,
    "Num_Velocity",
    &iLeft,
    (int *)&pkFrameWork,
    &uiWidth,
    &uiHeight);
  v34 = Font::Get(0);
  v35 = PgWinText::CreateWin(
          iLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          uiWidth,
          uiHeight,
          v34,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          "2",
          0);
  v2->m_pkMoverSpeed = v35;
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v35,
    2u);
  ((void (__stdcall *)(_DWORD))v2->m_pkMoverSpeed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMoverSpeed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
  PgWin::InitPos(&v2->baseclass_0.baseclass_0.baseclass_0, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 0.0, 0.25);
  v44 = -1;
  if ( spNode.m_pObject )
  {
    v36 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v36 )
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F8960) --------------------------------------------------------
void __thiscall FeedMoverWin::UpdateMeWin(FeedMoverWin *this, float fCurTime)
{
  FeedMoverWin *v2; // esi@1
  int v3; // eax@3

  v2 = this;
  if ( CNSTimer_MarkCheck::Update(&this->m_kMarkCheck, Timer::ms_fCurTime) == 1 && v2->m_pkMoverFaceCutWin )
  {
    v3 = (int)v2->m_spMoverTexture;
    if ( !v2->m_uiHungryPoint )
      v3 = (int)&v2->m_spMoverTexture[1];
    ((void (__stdcall *)(_DWORD))v2->m_pkMoverFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(*(_DWORD *)v3);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (004F89C0) --------------------------------------------------------
void __thiscall FeedMoverWin::UpdateMoverSpeed(FeedMoverWin *this)
{
  FeedMoverWin *v1; // ebx@1
  int v2; // eax@2
  signed int v3; // edx@3
  char *v4; // eax@4
  char *v5; // eax@4
  unsigned int v6; // eax@4
  void *v7; // edi@4
  char v8; // cl@5
  NiRefObjectVtbl *v9; // esi@7
  char *v10; // eax@7
  char *v11; // eax@7
  char UpText[128]; // [sp+4h] [bp-104h]@4
  char SpeedText[128]; // [sp+84h] [bp-84h]@4
  unsigned int v14; // [sp+104h] [bp-4h]@1
  int v15; // [sp+108h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  if ( this->m_pkMoverSpeed )
  {
    v2 = *(_WORD *)CDataReader::GetRecord(
                     (CDataReader *)(ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable + 4),
                     LOBYTE(this->m_uiMoverLevel));
    if ( (_WORD)v2
      && (v3 = (signed int)((unsigned __int64)(27487790700i64 * v2) >> 32) >> 6, v3 + ((unsigned int)v3 >> 31)) )
    {
      SpeedText[0] = 0;
      memset(&SpeedText[1], 0, 0x7Fu);
      UpText[0] = 0;
      memset(&UpText[1], 0, 0x7Fu);
      v4 = TextData2::Get(0xE4F43647u);
      v5 = fs(v4);
      sprintf(SpeedText, v5);
      sprintf(UpText, "(+%d)");
      v6 = strlen(UpText) + 1;
      v7 = &UpText[127];
      do
      {
        v8 = *((_BYTE *)v7 + 1);
        v7 = (char *)v7 + 1;
      }
      while ( v8 );
      memcpy(v7, UpText, v6);
      ((void (__stdcall *)(_DWORD))v1->m_pkMoverSpeed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(SpeedText);
    }
    else
    {
      v9 = v1->m_pkMoverSpeed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = TextData2::Get(0xE4F43647u);
      v11 = fs(v10);
      v9[118].__vecDelDtor((NiRefObject *)v1->m_pkMoverSpeed, (unsigned int)v11);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F14: using guessed type int ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab___ms_pkTable;

//----- (004F8B30) --------------------------------------------------------
void __thiscall FeedMoverWin::UpdateHungryPoint(FeedMoverWin *this)
{
  FeedMoverWin *v1; // esi@1
  PgWinBar *v2; // ecx@1
  float v3; // ST0C_4@2
  int v4; // eax@5

  v1 = this;
  v2 = this->m_pkHPBarWin;
  if ( v2 )
  {
    v3 = (double)v1->m_uiMaxHP;
    v2->m_fCurValue = (double)v1->m_uiHungryPoint;
    v2->m_fMaxValue = v3;
    PgWinBar::OnChangeValue(v2);
  }
  if ( v1->m_kMarkCheck.m_TimeStateCur != -1 && v1->m_pkMoverFaceCutWin )
  {
    v4 = (int)v1->m_spMoverTexture;
    if ( !v1->m_uiHungryPoint )
      v4 = (int)&v1->m_spMoverTexture[1];
    ((void (__stdcall *)(_DWORD))v1->m_pkMoverFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(*(_DWORD *)v4);
  }
}

//----- (004F8BD0) --------------------------------------------------------
FeedMoverWin *__cdecl FeedMoverWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  FeedMoverWin *v5; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    FeedMoverWin::FeedMoverWin((FeedMoverWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( FeedMoverWin::Create((FeedMoverWin *)v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (FeedMoverWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    }
    v5 = 0;
  }
  return v5;
}

//----- (004F8D00) --------------------------------------------------------
bool __thiscall FeedMoverWin::EatDropInstance(FeedMoverWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  FeedMoverWin *v4; // ebx@1
  int v6; // esi@6
  MoverMain *v7; // eax@10
  MoverHG *v8; // edi@12
  int v9; // eax@13
  const char *v10; // edx@14
  int v11; // eax@14
  int v12; // esi@14
  char v13; // cl@15
  ItemUseTask *v14; // esi@18
  GameFrameWork *v15; // esi@20
  char *v16; // eax@20
  unsigned int v17; // [sp-Ch] [bp-10h]@17
  void *pkContents; // [sp+Ch] [bp+8h]@2

  v4 = this;
  if ( !*pkDrop )
    return 0;
  pkContents = (*pkDrop)->m_pkContents;
  if ( *((_DWORD *)pkContents + 2) || *((_DWORD *)pkContents + 4) )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  v6 = *((_DWORD *)pkContents + 5);
  if ( !v6 )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 4))(v6) != 22 || (v7 = v4->m_pkMoverMain) == 0 )
    return 0;
  if ( v7->DurationHour || (v8 = v4->m_pkMoverHG) == 0 )
  {
    v17 = 1906944922;
LABEL_20:
    v15 = (GameFrameWork *)v4->m_pkFrameWork;
    v16 = TextData::Get(v17);
    GameFrameWork::AddSysMsg(v15, v16);
    return 0;
  }
  v9 = *(_DWORD *)(v6 + 112);
  if ( v9 )
  {
    v10 = (const char *)(v9 + 2);
    v11 = v9 + 2;
    v12 = v11 + 1;
    do
      v13 = *(_BYTE *)v11++;
    while ( v13 );
    if ( !strncmp(v10, v8->FeedType, v11 - v12) )
    {
      v14 = ISingletonTask<ItemUseTask>::Run();
      ItemUseTask::SetInventoryIndex(v14, *((_DWORD *)pkContents + 3));
      v14->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
        &v14->baseclass_0.baseclass_0.baseclass_8,
        v4->m_pkFrameWork);
      return 1;
    }
    v17 = -1141985811;
    goto LABEL_20;
  }
  return 0;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (004F8E00) --------------------------------------------------------
void __thiscall FeedMoverWin::UpdateMover(FeedMoverWin *this)
{
  int v1; // eax@1
  unsigned int v2; // ebx@1
  unsigned int v3; // edi@2
  unsigned int v4; // esi@4
  void *v5; // eax@5
  MoverView *v6; // eax@10
  FeedMoverWin *v7; // ebx@10
  MoverHG *v8; // eax@11
  MoverMain *v9; // ecx@13
  bool v10; // zf@13
  double v11; // st7@13
  ItemInfo *v12; // eax@14
  NiRefObjectVtbl *v13; // esi@16
  char *v14; // eax@16
  PgWinText *v15; // ecx@16
  void *(__thiscall *v16)(NiRefObject *, unsigned int); // eax@16
  const char *v17; // ecx@19
  int v18; // eax@19
  char v19; // dl@20
  const char *v20; // ecx@21
  const char *v21; // ecx@21
  int v22; // eax@21
  char v23; // dl@22
  char *v24; // esi@26
  NiSourceTexture *v25; // edi@26
  NiImageConverter *v26; // eax@27
  NiPixelData *v27; // eax@27
  NiSourceTexture *v28; // esi@29
  NiSourceTexture *v29; // edi@36
  char *v30; // esi@41
  NiImageConverter *v31; // eax@42
  NiPixelData *v32; // eax@42
  NiSourceTexture *v33; // eax@43
  PgWinSpr *v34; // ecx@49
  int v35; // [sp-14h] [bp-A4h]@15
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-90h]@28
  int v37; // [sp+Ch] [bp-84h]@43
  int v38; // [sp+10h] [bp-80h]@43
  int v39; // [sp+14h] [bp-7Ch]@43
  __int64 v40; // [sp+18h] [bp-78h]@13
  int v41; // [sp+20h] [bp-70h]@13
  FeedMoverWin *thisa; // [sp+24h] [bp-6Ch]@1
  int v43; // [sp+28h] [bp-68h]@23
  unsigned __int16 v44; // [sp+2Ah] [bp-66h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kImage[3]; // [sp+2Ch] [bp-64h]@19
  unsigned int v46; // [sp+80h] [bp-10h]@1
  int v47; // [sp+8Ch] [bp-4h]@21
  int v48; // [sp+90h] [bp+0h]@1

  v46 = (unsigned int)&v48 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 56);
  v2 = this->m_kMoverID;
  thisa = this;
  if ( v1 )
    v3 = *(_DWORD *)(v1 + 40);
  else
    v3 = 0;
  v4 = 0;
  if ( v3 )
  {
    while ( 1 )
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 4), v4);
      if ( v5 )
      {
        if ( *(_DWORD *)v5 == v2 )
          break;
      }
      ++v4;
      if ( v4 >= v3 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    v5 = 0;
  }
  thisa->m_pkMoverMain = (MoverMain *)v5;
  if ( v5 )
  {
    v6 = MoverViewTab::GetByMoverIdx((const char *)v5 + 4);
    v7 = thisa;
    thisa->m_pkMoverView = v6;
    if ( v6 )
    {
      v8 = MoverHGTab::GetByMoverIdx(v7->m_pkMoverMain->MoverIDX);
      v7->m_pkMoverHG = v8;
      if ( v8 )
        v7->m_uiMaxHP = v8->MaxHG;
      v9 = v7->m_pkMoverMain;
      v41 = v9->RunSpeed;
      v10 = v7->m_pkNameTextWin == 0;
      v11 = (double)v41;
      v41 = v44 | 0xC00;
      v40 = (signed __int64)(v11 * 0.1);
      v7->m_uiMoverSpeed = v40;
      if ( !v10 )
      {
        v12 = ItemInfoTab::GetByInxName(v9->MoverIDX);
        if ( v12 )
        {
          v35 = (int)v12->Name;
          if ( v7->m_uiMoverLevel )
          {
            v13 = v7->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v14 = fs("(+%d)%s");
            v15 = v7->m_pkNameTextWin;
            v35 = (int)v14;
            v16 = v13[118].__vecDelDtor;
          }
          else
          {
            v15 = v7->m_pkNameTextWin;
            v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
          }
          v16(&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v35);
        }
      }
      v17 = v7->m_pkMoverView->Normalmage;
      v18 = (int)v7->m_pkMoverView->Normalmage;
      kImage[0].baseclass_0._Myres = 15;
      kImage[0].baseclass_0._Mysize = 0;
      kImage[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      do
        v19 = *(_BYTE *)v18++;
      while ( v19 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kImage, v17, v18 - (_DWORD)(v17 + 1));
      v20 = v7->m_pkMoverView->HungryImage;
      v47 = 0;
      kImage[1].baseclass_0._Mysize = 0;
      kImage[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kImage[1].baseclass_0._Myres = 15;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kImage[1], v20, strlen(v20));
      v21 = v7->m_pkMoverView->EatImage;
      v22 = (int)v7->m_pkMoverView->EatImage;
      LOBYTE(v47) = 1;
      kImage[2].baseclass_0._Myres = 15;
      kImage[2].baseclass_0._Mysize = 0;
      kImage[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      do
        v23 = *(_BYTE *)v22++;
      while ( v23 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &kImage[2],
        v21,
        v22 - (_DWORD)(v21 + 1));
      v47 = 2;
      thisa = (FeedMoverWin *)kImage;
      v43 = (int)v7->m_spMoverTexture;
      v41 = 3;
      do
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v24 = fs("%sgame\\MobPortrait\\%s.png");
        v25 = 0;
        if ( v24 )
        {
          v26 = NiImageConverter::GetImageConverter();
          v27 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v26->baseclass_0.vfptr[2].__vecDelDtor)(
                                 v26,
                                 v24,
                                 0);
          if ( v27 )
          {
            kPrefs.m_ePixelLayout = 6;
            kPrefs.m_eAlphaFmt = 3;
            kPrefs.m_eMipMapped = 0;
            v25 = NiSourceTexture::Create(v27, &kPrefs);
          }
        }
        v28 = *(NiSourceTexture **)v43;
        if ( *(NiSourceTexture **)v43 != v25 )
        {
          if ( v28
            && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v28 )
            v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
          *(_DWORD *)v43 = v25;
          if ( v25 )
            InterlockedIncrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        v29 = *(NiSourceTexture **)v43;
        HIDWORD(v40) = v29;
        if ( v29 )
          InterlockedIncrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        LOBYTE(v47) = 3;
        if ( !v29 )
        {
          if ( !Folder::m_bInit )
            Folder::Init();
          v30 = fs("%sgame\\MobPortrait\\%s.tga");
          if ( v30 )
          {
            v31 = NiImageConverter::GetImageConverter();
            v32 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v31->baseclass_0.vfptr[2].__vecDelDtor)(
                                   v31,
                                   v30,
                                   0);
            if ( v32 )
            {
              v37 = 6;
              v38 = 3;
              v39 = 0;
              v33 = NiSourceTexture::Create(v32, (NiTexture::FormatPrefs *)&v37);
              if ( v33 )
              {
                v29 = v33;
                InterlockedIncrement((volatile LONG *)&v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
              }
            }
          }
        }
        LOBYTE(v47) = 2;
        if ( v29
          && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
        v43 += 4;
        thisa = (FeedMoverWin *)((char *)thisa + 28);
        --v41;
      }
      while ( v41 );
      v34 = v7->m_pkMoverFaceCutWin;
      v7->m_uiHungryPoint = 0;
      if ( v34 )
        ((void (__stdcall *)(NiSourceTexture *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v7->m_spMoverTexture[1].m_pObject);
      FeedMoverWin::UpdateMoverSpeed(v7);
      FeedMoverWin::Normalize(v7, 1);
      v47 = -1;
      _eh_vector_destructor_iterator_(
        kImage,
        0x1Cu,
        3,
        (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A959E4: using guessed type int ITableBase_MoverMain_MoverMainTab___ms_pkTable;

//----- (004F9200) --------------------------------------------------------
MoverMain *__cdecl MoverMainTab::GetByMoverID(unsigned int kMoverID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  MoverMain *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (MoverMain *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 4),
                              v3);
      if ( result )
      {
        if ( result->MoverID == kMoverID )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A959E4: using guessed type int ITableBase_MoverMain_MoverMainTab___ms_pkTable;

//----- (004F9250) --------------------------------------------------------
MoverUpgradeEffect *__cdecl MoverUpgradeEffectTab::GetByGrade(char nGrade)
{
  return (MoverUpgradeEffect *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable + 4),
                                 (unsigned __int8)nGrade);
}
// A97F14: using guessed type int ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab___ms_pkTable;

//----- (004F9270) --------------------------------------------------------
void *__thiscall FeedMoverWin::_scalar_deleting_destructor_(FeedMoverWin *this, unsigned int a2)
{
  FeedMoverWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FeedMoverWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FeedMoverWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_spMoverTexture,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 993FE8: using guessed type int (__stdcall *FeedMoverWin___vftable_)(int uiFlags);
// 994004: using guessed type int (__thiscall *FeedMoverWin___vftable_)(void *p, char);

//----- (004F9310) --------------------------------------------------------
MoverView *__cdecl MoverViewTab::GetByMoverIdx(const char *pcMoverIdx)
{
  int v1; // eax@1
  unsigned int v2; // edi@1
  void *v3; // eax@5
  const char *v4; // esi@5
  int v5; // edx@6
  char v6; // cl@7
  unsigned int v7; // eax@8
  unsigned int v8; // ebx@8
  unsigned int v9; // esi@8
  unsigned int v10; // ecx@8
  unsigned int v11; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@10
  int v13; // eax@12
  bool v14; // zf@12
  signed int v15; // eax@14
  bool v16; // bl@17
  MoverView *pkMoverView; // [sp+0h] [bp-3Ch]@5
  unsigned int i; // [sp+8h] [bp-34h]@4
  unsigned int v20; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v22; // [sp+2Ch] [bp-10h]@1
  int v23; // [sp+38h] [bp-4h]@17
  int v24; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MoverView_MoverViewTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v20 = *(_DWORD *)(v1 + 40);
  else
    v20 = 0;
  i = 0;
  if ( v20 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverView_MoverViewTab>::ms_pkTable + 4), v2);
    v4 = (const char *)v3;
    pkMoverView = (MoverView *)v3;
    if ( v3 )
      break;
LABEL_21:
    ++v2;
    i = v2;
    if ( v2 >= v20 )
      return 0;
  }
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v5 = (int)((char *)v3 + 1);
  do
  {
    v6 = *(_BYTE *)v3;
    v3 = (char *)v3 + 1;
  }
  while ( v6 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this,
    v4,
    (unsigned int)((char *)v3 - v5));
  v7 = strlen(pcMoverIdx);
  v8 = this.baseclass_0._Mysize;
  v9 = v7;
  v10 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v7 )
    v10 = v7;
  v11 = this.baseclass_0._Myres;
  v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v12 = &this;
  v13 = std::char_traits<char>::compare(v12->baseclass_0.___u0.baseclass_0.dummy, pcMoverIdx, v10);
  v14 = v13 == 0;
  if ( !v13 )
  {
    if ( v8 >= v9 )
      v15 = v8 != v9;
    else
      v15 = -1;
    v14 = v15 == 0;
  }
  v16 = v14;
  v23 = -1;
  if ( v11 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v16 )
  {
    v2 = i;
    goto LABEL_21;
  }
  return pkMoverView;
}
// A85C00: using guessed type int __security_cookie;
// A97EE4: using guessed type int ITableBase_MoverView_MoverViewTab___ms_pkTable;

//----- (004F9460) --------------------------------------------------------
void __thiscall FreeStatView::FreeStatView(FreeStatView *this)
{
  FreeStatView *v1; // esi@1

  v1 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FreeStatView::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FreeStatView::_vftable_;
}
// 9942D8: using guessed type int (__stdcall *FreeStatView___vftable_)(int uiFlags);
// 9942F4: using guessed type int (__thiscall *FreeStatView___vftable_)(void *p, char);

//----- (004F9480) --------------------------------------------------------
void __thiscall FreeStatView::_FreeStatView(FreeStatView *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FreeStatView::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FreeStatView::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
}
// 9942D8: using guessed type int (__stdcall *FreeStatView___vftable_)(int uiFlags);
// 9942F4: using guessed type int (__thiscall *FreeStatView___vftable_)(void *p, char);

//----- (004F94A0) --------------------------------------------------------
void __thiscall FreeStatView::ClearText(FreeStatView *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_apkTextWin;
  v2 = 20;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 472))(&unk_994241);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (004F94D0) --------------------------------------------------------
bool __thiscall FreeStatView::SetTipText(FreeStatView *this, int nLine, char *pcText, int r, int g, int b, Font::Type font)
{
  FreeStatView *v7; // esi@1
  bool result; // al@2
  NiRefObjectVtbl *v9; // ebx@3
  PgFont *v10; // eax@3

  v7 = this;
  if ( nLine < 20 )
  {
    v9 = this->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v10 = Font::Get(font);
    v9[113].__vecDelDtor((NiRefObject *)v7->m_apkTextWin[nLine], (unsigned int)v10);
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v7->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      r,
      g,
      b,
      255);
    ((void (__stdcall *)(_DWORD))v7->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004F9550) --------------------------------------------------------
void __thiscall FreeStatView::OnCommand(FreeStatView *this, unsigned int wParam, int lParam)
{
  unsigned int v3; // eax@1

  v3 = wParam - 1;
  if ( wParam == 1 )
    PgWin::PostMsg(
      &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u,
      v3,
      v3);
}

//----- (004F9570) --------------------------------------------------------
char *__cdecl GetIntSignedStr(int iValue)
{
  char *result; // eax@2

  if ( iValue <= 0 )
    result = fs("%d");
  else
    result = fs("+%d");
  return result;
}

//----- (004F95A0) --------------------------------------------------------
char *__cdecl GetFloatSignedStr(float fValue)
{
  char *result; // eax@2

  if ( fValue <= 0.0 )
    result = fs("%.1f%%");
  else
    result = fs("+%.1f%%");
  return result;
}

//----- (004F95E0) --------------------------------------------------------
bool __thiscall FreeStatView::SetText(FreeStatView *this, int nLine, char *pcText)
{
  bool result; // al@2

  if ( nLine < 20 )
  {
    ((void (__stdcall *)(_DWORD))this->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004F9610) --------------------------------------------------------
void __thiscall FreeStatView::AdjustSize(FreeStatView *this)
{
  FreeStatView *v1; // edi@1
  int v2; // esi@1
  int v3; // eax@1
  int v4; // ebx@2
  char *v5; // eax@3
  bool v6; // zf@7
  int v7; // esi@8
  int v8; // esi@8
  PgWinBut *v9; // eax@8
  NiRefObjectVtbl *v10; // edx@8
  NiRefObjectVtbl *v11; // esi@8
  unsigned int v12; // eax@8
  tagSIZE kSize; // [sp+8h] [bp-18h]@4
  PgFont *pkFont; // [sp+10h] [bp-10h]@1
  int v15; // [sp+14h] [bp-Ch]@2
  PgWinText **v16; // [sp+18h] [bp-8h]@2
  int uiCy; // [sp+1Ch] [bp-4h]@2

  v1 = this;
  v2 = (int)this->m_apkTextWin;
  v3 = ((int (*)(void))this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
  pkFont = (PgFont *)v3;
  if ( v3 )
  {
    SelectObject(*(HDC *)(v3 + 192), *(HGDIOBJ *)(v3 + 184));
    v4 = 0;
    uiCy = 0;
    v16 = v1->m_apkTextWin;
    v15 = 20;
    do
    {
      v5 = (char *)(*(int (**)(void))(**(_DWORD **)v2 + 484))();
      if ( v5 )
      {
        PgFont::GetTextSize(pkFont, v5, strlen(v5), &kSize);
        if ( (unsigned int)kSize.cx > v4 )
          v4 = kSize.cx;
        uiCy += kSize.cy + 3;
      }
      v2 = (int)(v16 + 1);
      v6 = v15-- == 1;
      ++v16;
    }
    while ( !v6 );
    v7 = uiCy;
    ((void (__stdcall *)(int))v1->m_pkOKBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(uiCy);
    v8 = ((int (*)(void))v1->m_pkOKBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
       + v7;
    v9 = v1->m_pkOKBut;
    v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    uiCy = v8;
    v11 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v12 = ((int (*)(void))v10[36].__vecDelDtor)();
    v11[43].__vecDelDtor((NiRefObject *)v1->m_pkOKBut, ((unsigned int)v4 >> 1) - (v12 >> 1) + 20);
    if ( v4 )
      ((void (__thiscall *)(FreeStatView *, unsigned int, unsigned int))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
        v1,
        v4 + 2 * v1->baseclass_0.m_uiEdgeWidth + 90,
        uiCy + 2 * v1->baseclass_0.m_uiEdgeHeight);
  }
}

//----- (004F9740) --------------------------------------------------------
bool __thiscall FreeStatView::Create(FreeStatView *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight)
{
  FreeStatView *v4; // esi@1
  bool result; // al@2
  signed int v6; // edi@3
  int v7; // ebx@3
  PgFont *v8; // eax@4
  PgWinText *v9; // eax@4
  NiTexturePalette *v10; // edi@5
  char *v11; // eax@7
  PgSprData *v12; // edi@8
  PgWin *v13; // ST14_4@8
  PgWin *v14; // esi@8
  PgFont *v15; // ST10_4@8
  unsigned int v16; // ST0C_4@8
  unsigned int v17; // eax@8
  PgWinText *v18; // esi@8
  NiRefObjectVtbl *v19; // edi@8
  char *v20; // eax@8
  unsigned int v21; // esi@9

  v4 = this;
  if ( !FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, 0, 0) )
    goto LABEL_15;
  v6 = 0;
  v7 = (int)v4->m_apkTextWin;
  do
  {
    v8 = Font::Get(0);
    v9 = PgWinText::CreateWin(
           v4->baseclass_0.m_uiEdgeWidth,
           v4->baseclass_0.m_uiEdgeHeight + v6 + 2,
           0x100u,
           0x10u,
           v8,
           &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
    *(_DWORD *)v7 = v9;
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v9,
      0);
    v6 += 14;
    v7 += 4;
  }
  while ( v6 < 280 );
  ((void (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor)(v4);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v4,
    2 * v4->baseclass_0.m_uiEdgeWidth + 128,
    2 * v4->baseclass_0.m_uiEdgeHeight + 12);
  uiEdgeHeight = 0;
  v10 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v11 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v11, (NiPointer<NiNode> *)&uiEdgeHeight, v10);
  if ( uiEdgeHeight )
  {
    v12 = PgSprData::Create((NiAVObject *)uiEdgeHeight, "BtnNor01", (int *)&pkTexture, (int *)&uiEdgeWidth, 0);
    PgSprData::Add(v12, (NiAVObject *)uiEdgeHeight, "BtnClick01");
    PgSprData::Add(v12, (NiAVObject *)uiEdgeHeight, "BtnOver01");
    v13 = (PgWin *)PgWinBut::CreateWin(
                     (int)pkTexture,
                     uiEdgeWidth,
                     v12,
                     &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                     1u,
                     0,
                     0);
    v4->m_pkOKBut = (PgWinBut *)v13;
    v14 = v13;
    v15 = Font::Get(0);
    v16 = ((int (__thiscall *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v14);
    v17 = ((int (__thiscall *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v14);
    v18 = PgWinText::CreateWin(0, 0, v17, v16, v15, v13, 0, 0);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v18,
      5u);
    v19 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData::Get(0x4F5F499Fu);
    v19[118].__vecDelDtor((NiRefObject *)v18, (unsigned int)v20);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
    if ( uiEdgeHeight )
    {
      v21 = uiEdgeHeight;
      if ( !InterlockedDecrement((volatile LONG *)(uiEdgeHeight + 4)) )
      {
        if ( v21 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
      }
    }
    result = 1;
  }
  else
  {
LABEL_15:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004F9970) --------------------------------------------------------
void __thiscall FreeStatView::SetFreeStatPoint(FreeStatView *this, User::FreeStatPoint *rkPoint)
{
  int v2; // ebx@0
  User::FreeStatPoint *v3; // edi@1
  FreeStatView *v4; // esi@1
  int v5; // ST40_4@4
  NiRefObjectVtbl *v6; // ebx@4
  char *v7; // eax@4
  NiRefObjectVtbl *v8; // ebx@7
  char *v9; // eax@7
  NiRefObjectVtbl *v10; // ebx@10
  char *v11; // eax@10
  NiRefObjectVtbl *v12; // ebx@13
  char *v13; // eax@13
  NiRefObjectVtbl *v14; // ebx@16
  char *v15; // eax@16
  NiRefObjectVtbl *v16; // ebx@19
  NiRefObjectVtbl *v17; // ebx@22
  char *v18; // eax@22
  NiRefObjectVtbl *v19; // ebx@25
  char *v20; // eax@25
  NiRefObjectVtbl *v21; // ebx@28
  NiRefObjectVtbl *v22; // edi@31
  char *v23; // [sp+38h] [bp-14h]@20
  char *v24; // [sp+38h] [bp-14h]@23
  char *v25; // [sp+3Ch] [bp-10h]@2
  char *v26; // [sp+40h] [bp-Ch]@5
  char *v27; // [sp+40h] [bp-Ch]@8
  char *v28; // [sp+40h] [bp-Ch]@11
  char *v29; // [sp+40h] [bp-Ch]@14
  char *v30; // [sp+40h] [bp-Ch]@17
  char *v31; // [sp+40h] [bp-Ch]@26
  char *v32; // [sp+40h] [bp-Ch]@29
  char *v33; // [sp+44h] [bp-8h]@19
  float rkPointa; // [sp+54h] [bp+8h]@19
  float rkPointb; // [sp+54h] [bp+8h]@22

  v3 = rkPoint;
  v4 = this;
  if ( (signed int)rkPoint->dwFreeWC <= 0 )
    v25 = "%d";
  else
    v25 = "+%d";
  fs(v25);
  v5 = v2;
  v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x16404892u);
  v7 = fs("%s : %s");
  ((void (__thiscall *)(FreeStatView *, signed int, char *, int))v6[139].__vecDelDtor)(v4, 2, v7, v5);
  if ( (signed int)rkPoint->dwFreeAC <= 0 )
    v26 = "%d";
  else
    v26 = "+%d";
  fs(v26);
  v8 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x16414C8Bu);
  v9 = fs("%s : %s");
  ((void (__thiscall *)(FreeStatView *, signed int, char *))v8[139].__vecDelDtor)(v4, 3, v9);
  if ( (signed int)rkPoint->dwFreeTH <= 0 )
    v27 = "%d";
  else
    v27 = "+%d";
  fs(v27);
  v10 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0xD0F94C4Fu);
  v11 = fs("%s : %s");
  ((void (__thiscall *)(FreeStatView *, signed int, char *))v10[139].__vecDelDtor)(v4, 4, v11);
  if ( (signed int)rkPoint->dwFreeTB <= 0 )
    v28 = "%d";
  else
    v28 = "+%d";
  fs(v28);
  v12 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x393C303Du);
  v13 = fs("%s : %s");
  ((void (__thiscall *)(FreeStatView *, signed int, char *))v12[139].__vecDelDtor)(v4, 5, v13);
  if ( (signed int)rkPoint->dwFreeMA <= 0 )
    v29 = "%d";
  else
    v29 = "+%d";
  fs(v29);
  v14 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x273C7779u);
  v15 = fs("%s : %s");
  ((void (__thiscall *)(FreeStatView *, signed int, char *))v14[139].__vecDelDtor)(v4, 6, v15);
  if ( (signed int)rkPoint->dwFreeMR <= 0 )
    v30 = "%d";
  else
    v30 = "+%d";
  fs(v30);
  v16 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x2F368A93u);
  v33 = fs("%s : %s");
  v16[139].__vecDelDtor((NiRefObject *)v4, 7u);
  rkPointa = (double)rkPoint->dwFreeCRITICAL / 10.0;
  if ( rkPointa <= 0.0 )
    v23 = "%.1f%%";
  else
    v23 = "+%.1f%%";
  fs(v23);
  v17 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x2D8F9C72u);
  v18 = fs("%s : %s");
  ((void (__thiscall *)(FreeStatView *, signed int, char *))v17[139].__vecDelDtor)(v4, 8, v18);
  rkPointb = (double)v3->dwFreeBLOCK / 10.0;
  if ( rkPointb <= 0.0 )
    v24 = "%.1f%%";
  else
    v24 = "+%.1f%%";
  fs(v24);
  v19 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x263F3F94u);
  v20 = fs("%s : %s");
  ((void (__thiscall *)(FreeStatView *, signed int, char *, char *))v19[139].__vecDelDtor)(v4, 9, v20, v33);
  if ( (signed int)v3->dwFreeMAXHP <= 0 )
    v31 = "%d";
  else
    v31 = "+%d";
  fs(v31);
  v21 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  fs("MaxHP : %s");
  v21[139].__vecDelDtor((NiRefObject *)v4, 10u);
  if ( (signed int)v3->dwFreeMAXSP <= 0 )
    v32 = "%d";
  else
    v32 = "+%d";
  fs(v32);
  v22 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  fs("MaxSP : %s");
  v22[139].__vecDelDtor((NiRefObject *)v4, 11u);
  FreeStatView::AdjustSize(v4);
}
// 4F9970: could not find valid save-restore pair for ebx

//----- (004F9C80) --------------------------------------------------------
void __thiscall FreeStatView::UpdateMeWin(FreeStatView *this, float fCurTime)
{
  FreeStatView::SetFreeStatPoint(this, &rkPoint);
}

//----- (004F9C90) --------------------------------------------------------
void __thiscall FreeStatView::InitAllTextWin(FreeStatView *this)
{
  FreeStatView *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1
  NiRefObjectVtbl *v4; // edi@1
  char *v5; // eax@1
  NiRefObjectVtbl *v6; // edi@1
  char *v7; // eax@1
  NiRefObjectVtbl *v8; // edi@1
  char *v9; // eax@1
  NiRefObjectVtbl *v10; // edi@1
  char *v11; // eax@1
  NiRefObjectVtbl *v12; // edi@1
  char *v13; // eax@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData::Get(0x354F417Bu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v2[137].__vecDelDtor)(
    v1,
    0,
    v3,
    255,
    255,
    255,
    1);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    1,
    " ",
    255,
    255,
    255,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    2,
    &unk_994242,
    251,
    225,
    49,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    3,
    &unk_994243,
    149,
    251,
    192,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    4,
    &unk_99424F,
    154,
    251,
    49,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    5,
    &unk_99425A,
    154,
    251,
    49,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    6,
    &unk_99425B,
    101,
    163,
    255,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    7,
    &unk_994263,
    191,
    135,
    225,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    8,
    &unk_994273,
    191,
    135,
    225,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    9,
    &unk_9942BF,
    49,
    251,
    192,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    10,
    &unk_9942CB,
    49,
    251,
    192,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    11,
    &unk_9942CE,
    191,
    135,
    225,
    0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    v1,
    12,
    " ",
    255,
    255,
    255,
    0);
  v4 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = TextData::Get(0x8BD4EBFAu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v4[137].__vecDelDtor)(
    v1,
    13,
    v5,
    251,
    225,
    49,
    0);
  v6 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = TextData::Get(0x8BD5EBFAu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v6[137].__vecDelDtor)(
    v1,
    14,
    v7,
    154,
    251,
    49,
    0);
  v8 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = TextData::Get(0x8BD6EBFAu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v8[137].__vecDelDtor)(
    v1,
    15,
    v9,
    49,
    251,
    192,
    0);
  v10 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = TextData::Get(0x8BD7EBFAu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v10[137].__vecDelDtor)(
    v1,
    16,
    v11,
    101,
    163,
    255,
    0);
  v12 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = TextData::Get(0x8BD8EBFAu);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12[137].__vecDelDtor)(
    v1,
    17,
    v13,
    191,
    135,
    225,
    0);
}

//----- (004F9F40) --------------------------------------------------------
FreeStatView *__cdecl FreeStatView::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  FreeStatView *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1F4u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    FrameBoxWin::FrameBoxWin((FrameBoxWin *)v3);
    *(_DWORD *)v4 = &FreeStatView::_vftable_;
    *((_DWORD *)v4 + 58) = &FreeStatView::_vftable_;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiSourceTexture *, unsigned int, unsigned int))(*(_DWORD *)v4 + 560))(
                          v4,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (FreeStatView *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9942D8: using guessed type int (__stdcall *FreeStatView___vftable_)(int uiFlags);
// 9942F4: using guessed type int (__thiscall *FreeStatView___vftable_)(void *p, char);

//----- (004FA090) --------------------------------------------------------
void *__thiscall FreeStatView::_scalar_deleting_destructor_(FreeStatView *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FreeStatView::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FreeStatView::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9942D8: using guessed type int (__stdcall *FreeStatView___vftable_)(int uiFlags);
// 9942F4: using guessed type int (__thiscall *FreeStatView___vftable_)(void *p, char);

//----- (004FA0D0) --------------------------------------------------------
void __thiscall FriendCallWin::FriendCallWin(FriendCallWin *this)
{
  FriendCallWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendCallWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendCallWin::_vftable_;
  CFriend::CFriend(&v1->m_kFriend);
  v1->m_pkSlideBarEx = 0;
  v1->m_pFriendListWin = 0;
}
// 9946C8: using guessed type int (__stdcall *FriendCallWin___vftable_)(int uiFlags);
// 9946E4: using guessed type int (__thiscall *FriendCallWin___vftable_)(void *p, char);

//----- (004FA150) --------------------------------------------------------
void __thiscall FriendCallWin::_FriendCallWin(FriendCallWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendCallWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendCallWin::_vftable_;
  CFriend::_CFriend(&this->m_kFriend);
  PgWinFrame::_PgWinFrame(v1);
}
// 9946C8: using guessed type int (__stdcall *FriendCallWin___vftable_)(int uiFlags);
// 9946E4: using guessed type int (__thiscall *FriendCallWin___vftable_)(void *p, char);

//----- (004FA1C0) --------------------------------------------------------
void __thiscall FriendCallWin::ClearFriendList(FriendCallWin *this)
{
  NiPointer<PgWinLRBut>::_default_constructor_closure_((NiPointer<NiD3DTextureStage> *)&this->m_kFriend);
}

//----- (004FA1D0) --------------------------------------------------------
void __thiscall FriendCallWin::OnHelpLink(FriendCallWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "CallFrnd");
}

//----- (004FA200) --------------------------------------------------------
void __thiscall FriendCallWin::OnSlideBar(FriendCallWin *this)
{
  if ( this->m_pFriendListWin )
  {
    this->m_pFriendListWin->m_nViewStartPos = this->m_pkSlideBarEx->m_nCurPos;
    SlideListWin::UpdateViewList(this->m_pFriendListWin);
  }
}

//----- (004FA230) --------------------------------------------------------
void __thiscall FriendCallWin::OnCommand(FriendCallWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4

  switch ( wParam )
  {
    case 1u:
      if ( this->m_pFriendListWin )
      {
        this->m_pFriendListWin->m_nViewStartPos = this->m_pkSlideBarEx->m_nCurPos;
        SlideListWin::UpdateViewList(this->m_pFriendListWin);
      }
      break;
    case 3u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 4u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "CallFrnd");
      break;
  }
}

//----- (004FA2B0) --------------------------------------------------------
void __thiscall FriendCallWin::AddListItem_DefInfo(FriendCallWin *this, PROTO_FRIEND_INFO *pdata)
{
  FriendCallWin *v2; // ebx@1
  SlideListWin *v3; // ecx@1
  int v4; // eax@2
  int v5; // edx@2
  int v6; // eax@2
  int v7; // edi@2
  void *v8; // eax@2
  const char *v9; // eax@3
  SlideListWin *v10; // ecx@5
  int v11; // [sp-10h] [bp-B4h]@6
  int v12; // [sp-Ch] [bp-B0h]@6
  int v13; // [sp-8h] [bp-ACh]@6
  char szdata[128]; // [sp+8h] [bp-9Ch]@5
  char acname[21]; // [sp+88h] [bp-1Ch]@2
  unsigned int v16; // [sp+A0h] [bp-4h]@1
  int v17; // [sp+A4h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pFriendListWin;
  if ( v3 )
  {
    v4 = *(_DWORD *)&pdata->charid.n5_name[0];
    *(_DWORD *)&acname[4] = *(_DWORD *)&pdata->charid.n5_name[4];
    v5 = *(_DWORD *)&pdata->charid.n5_name[12];
    *(_DWORD *)acname = v4;
    v6 = *(_DWORD *)&pdata->charid.n5_name[8];
    *(_DWORD *)&acname[12] = v5;
    *(_DWORD *)&acname[8] = v6;
    *(_DWORD *)&acname[16] = *(_DWORD *)&pdata->charid.n5_name[16];
    acname[20] = 0;
    v7 = SlideListWin::AddText(v3, acname);
    v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pdata->classid);
    if ( v8 )
      v9 = (char *)v8 + 21;
    else
      v9 = &byte_9788EB;
    SlideListWin::SetText(v2->m_pFriendListWin, v7, 1u, v9);
    sprintf(szdata, "%d");
    SlideListWin::SetText(v2->m_pFriendListWin, v7, 2u, szdata);
    szdata[0] = pdata->isparty != 0 ? 111 : 120;
    v10 = v2->m_pFriendListWin;
    szdata[1] = 0;
    SlideListWin::SetText(v10, v7, 3u, szdata);
    SlideListWin::SetData(v2->m_pFriendListWin, v7, (unsigned int)pdata);
    SlideListWin::SetFontSize(v2->m_pFriendListWin, v7, 1);
    if ( pdata->logininfo._bf0 & 1 )
    {
      v13 = 0;
      v12 = 255;
      v11 = 255;
    }
    else
    {
      v13 = 200;
      v12 = 200;
      v11 = 200;
    }
    SlideListWin::SetFontColor(v2->m_pFriendListWin, v7, v11, v12, v13);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004FA3F0) --------------------------------------------------------
void __thiscall FriendCallWin::UpdateViewList(FriendCallWin *this)
{
  FriendCallWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  int v3; // esi@3
  SlideListWin *v4; // ecx@4
  int v5; // eax@5
  int v6; // edx@5
  int v7; // eax@5
  int v8; // ebx@5
  void *v9; // eax@5
  const char *v10; // eax@6
  SlideListWin *v11; // ecx@8
  int v12; // [sp-14h] [bp-B8h]@9
  int v13; // [sp-10h] [bp-B4h]@9
  int v14; // [sp-Ch] [bp-B0h]@9
  int i; // [sp+4h] [bp-A0h]@2
  char string; // [sp+8h] [bp-9Ch]@8
  char v17; // [sp+9h] [bp-9Bh]@8
  char szText[4]; // [sp+88h] [bp-1Ch]@5
  int v19; // [sp+8Ch] [bp-18h]@5
  int v20; // [sp+90h] [bp-14h]@5
  int v21; // [sp+94h] [bp-10h]@5
  int v22; // [sp+98h] [bp-Ch]@5
  char v23; // [sp+9Ch] [bp-8h]@5
  unsigned int v24; // [sp+A0h] [bp-4h]@1
  int v25; // [sp+A4h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pFriendListWin;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    i = 0;
    if ( v1->m_kFriend.m_NumOfFriend > 0 )
    {
      v3 = (int)&v1->m_kFriend.m_Friends[0].charid.n5_name[8];
      do
      {
        v4 = v1->m_pFriendListWin;
        if ( v4 )
        {
          v5 = *(_DWORD *)(v3 - 8);
          v19 = *(_DWORD *)(v3 - 4);
          v6 = *(_DWORD *)(v3 + 4);
          *(_DWORD *)szText = v5;
          v7 = *(_DWORD *)v3;
          v21 = v6;
          v20 = v7;
          v22 = *(_DWORD *)(v3 + 8);
          v23 = 0;
          v8 = SlideListWin::AddText(v4, szText);
          v9 = CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
                 *(_BYTE *)(v3 + 12));
          if ( v9 )
            v10 = (char *)v9 + 21;
          else
            v10 = &byte_9788EB;
          SlideListWin::SetText(v1->m_pFriendListWin, v8, 1u, v10);
          sprintf(&string, "%d");
          SlideListWin::SetText(v1->m_pFriendListWin, v8, 2u, &string);
          string = *(_BYTE *)(v3 + 14) != 0 ? 111 : 120;
          v11 = v1->m_pFriendListWin;
          v17 = 0;
          SlideListWin::SetText(v11, v8, 3u, &string);
          SlideListWin::SetData(v1->m_pFriendListWin, v8, v3 - 12);
          SlideListWin::SetFontSize(v1->m_pFriendListWin, v8, 1);
          if ( *(_BYTE *)(v3 - 12) & 1 )
          {
            v14 = 0;
            v13 = 255;
            v12 = 255;
          }
          else
          {
            v14 = 200;
            v13 = 200;
            v12 = 200;
          }
          SlideListWin::SetFontColor(v1->m_pFriendListWin, v8, v12, v13, v14);
        }
        v3 += 72;
        ++i;
      }
      while ( i < v1->m_kFriend.m_NumOfFriend );
    }
    SlideListWin::UpdateViewList(v1->m_pFriendListWin);
    SlideBar::SetSplitCnt(v1->m_pkSlideBarEx, v1->m_pFriendListWin->m_nSlideSplitCnt);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004FA5B0) --------------------------------------------------------
void __thiscall FriendCallWin::ChangeUserName(FriendCallWin *this, Name5 *OldName, Name5 *NewName)
{
  FriendCallWin *v3; // esi@1
  PROTO_FRIEND_INFO *v4; // eax@1

  v3 = this;
  v4 = CFriend::Get(&this->m_kFriend, OldName);
  if ( v4 )
  {
    *(_QWORD *)&v4->charid.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v4->charid.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v4->charid.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
    FriendCallWin::UpdateViewList(v3);
  }
}

//----- (004FA600) --------------------------------------------------------
FriendCallWin *__cdecl FriendCallWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  FriendCallWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1D88u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &FriendCallWin::_vftable_;
    *((_DWORD *)v2 + 58) = &FriendCallWin::_vftable_;
    CFriend::CFriend((CFriend *)((char *)v2 + 352));
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (FriendCallWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9946C8: using guessed type int (__stdcall *FriendCallWin___vftable_)(int uiFlags);
// 9946E4: using guessed type int (__thiscall *FriendCallWin___vftable_)(void *p, char);

//----- (004FA760) --------------------------------------------------------
void __thiscall FriendCallWin::AddFriend(FriendCallWin *this, PROTO_FRIEND_INFO *pInfo, bool bListElem)
{
  FriendCallWin *v3; // esi@1

  v3 = this;
  CFriend::Add(&this->m_kFriend, pInfo);
  FriendCallWin::UpdateViewList(v3);
}

//----- (004FA790) --------------------------------------------------------
bool __thiscall FriendCallWin::DelFriend(FriendCallWin *this, Name5 charid)
{
  FriendCallWin *v2; // esi@1

  v2 = this;
  CFriend::Del(&this->m_kFriend, &charid);
  FriendCallWin::UpdateViewList(v2);
  return 1;
}

//----- (004FA7C0) --------------------------------------------------------
bool __thiscall FriendCallWin::LoginFriend(FriendCallWin *this, Name5 charid)
{
  FriendCallWin *v2; // esi@1

  v2 = this;
  CFriend::Login(&this->m_kFriend, &charid);
  FriendCallWin::UpdateViewList(v2);
  return 1;
}

//----- (004FA7F0) --------------------------------------------------------
bool __thiscall FriendCallWin::LogoutFriend(FriendCallWin *this, Name5 charid)
{
  FriendCallWin *v2; // esi@1

  v2 = this;
  CFriend::Logout(&this->m_kFriend, &charid);
  FriendCallWin::UpdateViewList(v2);
  return 1;
}

//----- (004FA820) --------------------------------------------------------
bool __thiscall FriendCallWin::ChangeMapFriend(FriendCallWin *this, Name5 charid, Name3 mapName)
{
  FriendCallWin *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1

  v3 = this;
  *(_QWORD *)v4 = *(_QWORD *)&charid;
  *(_QWORD *)&v4[8] = *(_QWORD *)&charid.n5_name[8];
  *(_DWORD *)&v4[16] = *(_DWORD *)&charid.n5_name[16];
  CFriend::MapChange(&this->m_kFriend, *(Name5 *)v4, &mapName);
  FriendCallWin::UpdateViewList(v3);
  return 1;
}

//----- (004FA870) --------------------------------------------------------
bool __thiscall FriendCallWin::PartyFriend(FriendCallWin *this, Name5 charid, bool bParty)
{
  FriendCallWin *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1

  v3 = this;
  *(_QWORD *)v4 = *(_QWORD *)&charid;
  *(_QWORD *)&v4[8] = *(_QWORD *)&charid.n5_name[8];
  *(_DWORD *)&v4[16] = *(_DWORD *)&charid.n5_name[16];
  CFriend::PartyChange(&this->m_kFriend, *(Name5 *)v4, bParty);
  FriendCallWin::UpdateViewList(v3);
  return 1;
}

//----- (004FA8C0) --------------------------------------------------------
bool __thiscall FriendCallWin::LevelChange(FriendCallWin *this, Name5 charid, char Level)
{
  FriendCallWin *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1

  v3 = this;
  *(_QWORD *)v4 = *(_QWORD *)&charid;
  *(_QWORD *)&v4[8] = *(_QWORD *)&charid.n5_name[8];
  *(_DWORD *)&v4[16] = *(_DWORD *)&charid.n5_name[16];
  CFriend::LevelChange(&this->m_kFriend, *(Name5 *)v4, Level);
  FriendCallWin::UpdateViewList(v3);
  return 1;
}

//----- (004FA910) --------------------------------------------------------
bool __thiscall FriendCallWin::Create(FriendCallWin *this, PgFrameWork *pkFrameWork)
{
  FriendCallWin *v2; // esi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  int v7; // edi@10
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  D3DXCOLOR v10; // ST18_16@13
  D3DXCOLOR v11; // ST18_16@13
  NiSourceTexture *v12; // edi@13
  PgWin *v13; // eax@15
  D3DXCOLOR v14; // ST1C_16@15
  SLWCreateInfo::Item *v15; // edi@15
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v16; // edi@15
  SLWCreateInfo::Item *v17; // edi@21
  PgSprData *v18; // eax@23
  SlideListWin *v19; // eax@23
  PgSprData *v20; // eax@23
  SlideBar *v21; // eax@23
  SlideBar *v22; // edi@23
  void *(__thiscall *v23)(NiRefObject *, unsigned int); // edx@23
  SlideBar *v24; // ecx@23
  int v25; // ST2C_4@23
  int v26; // eax@23
  NiNode *v27; // esi@25
  const char *v28; // [sp+4h] [bp-90h]@11
  int *v29; // [sp+8h] [bp-8Ch]@11
  int *v30; // [sp+Ch] [bp-88h]@11
  NiSourceTexture *v31; // [sp+10h] [bp-84h]@11
  unsigned int v32; // [sp+14h] [bp-80h]@1
  UIUtil ui; // [sp+24h] [bp-70h]@13
  SLWCreateInfo kCreateInfo; // [sp+38h] [bp-5Ch]@15
  NiRefObjectVtbl *iOffX; // [sp+54h] [bp-40h]@10
  int iOffY; // [sp+58h] [bp-3Ch]@1
  int uiLeft; // [sp+5Ch] [bp-38h]@4
  int uiTop; // [sp+60h] [bp-34h]@4
  NiPointer<NiNode> spNode; // [sp+64h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+68h] [bp-2Ch]@15
  unsigned int v41; // [sp+84h] [bp-10h]@1
  int v42; // [sp+90h] [bp-4h]@1
  int v43; // [sp+94h] [bp+0h]@1

  v41 = (unsigned int)&v43 ^ __security_cookie;
  v32 = (unsigned int)&v43 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v42 = 0;
  iOffY = (int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\CallFrnd.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, (NiTexturePalette *)iOffY);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v4, 0, pkFrameWork, "FriendCallWin", 0) )
  {
    v5 = spNode.m_pObject;
    v42 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  v7 = uiLeft;
  iOffX = (NiRefObjectVtbl *)uiLeft;
  iOffY = uiTop;
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v31 = v8;
    v30 = &uiTop;
    v29 = &uiLeft;
    v28 = "Theme";
  }
  else
  {
    v31 = 0;
    v30 = &uiTop;
    v29 = &uiLeft;
    v28 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v28, v29, v30, v31);
  PgWinSpr::CreateWin(uiLeft - v7, uiTop - iOffY, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v42) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v7, iOffY);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateBtn(&ui, 3u, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  *(_QWORD *)&v10.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v10.b = qword_A746E8;
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", "Ä£±¸ ¼ÒÈ¯", COERCE_D3DXCOLOR(v10.r), 5u);
  *(_QWORD *)&v11.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v11.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  UIUtil::CreateTextNoSpr(&ui, "ColumnBox", "Ä£±¸ ¼ÒÈ¯ÇÏ±â¿¡ ´ëÇÑ ¾È³»", COERCE_D3DXCOLOR(v11.r), 5u);
  v12 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v32) )
    UIUtil::CreateBtn(&ui, 4u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v12);
  v13 = (PgWin *)UIUtil::CreateBtn(&ui, 1u, "OkNor", "OkOver", "OkClick", 0, 0);
  LODWORD(v14.r) = (_DWORD)Color::m_kDxWhiteColor.r;
  *(_QWORD *)&v14.g = *(_QWORD *)&Color::m_kDxWhiteColor.g;
  v14.a = Color::m_kDxWhiteColor.a;
  UIUtil::CreateAttachedText(&ui, v13, "Ä£±¸ ºÎ¸£±â", COERCE_D3DXCOLOR(v14.r), 5u);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v42) = 2;
  v15 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v15->nItemType = 1;
  v15->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  v16 = &v15->vecNodeName;
  LOBYTE(v42) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v16,
    &thisa);
  LOBYTE(v42) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v42) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v16,
    &thisa);
  LOBYTE(v42) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v42) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v16,
    &thisa);
  LOBYTE(v42) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v17 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v17->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
  LOBYTE(v42) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v17->vecNodeName,
    &thisa);
  LOBYTE(v42) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v17->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_nOffX = 5;
  kCreateInfo.m_nOffY = 0;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ListBox", &uiLeft, &uiTop, 0);
  v19 = SlideListWin::CreateWin(
          uiLeft - (_DWORD)iOffX,
          uiTop - iOffY,
          v18,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pFriendListWin = v19;
  SlideListWin::UpdateViewList(v19);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  v21 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar",
          "SlideBar_UpBtn",
          "SlideBar_DnBtn",
          v20,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarEx = v21;
  v21->m_uiClickMsg = 2;
  v2->m_pkSlideBarEx->m_eType = 1;
  v22 = v2->m_pkSlideBarEx;
  v23 = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
  v24 = v2->m_pkSlideBarEx;
  iOffX = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = ((int (__thiscall *)(SlideBar *))v23)(v24) - 18;
  v26 = ((int (__thiscall *)(SlideBar *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v22);
  iOffX[77].__vecDelDtor((NiRefObject *)v2->m_pkSlideBarEx, v26);
  ((void (__thiscall *)(FriendCallWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.30000001,
    0.5);
  LOBYTE(v42) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)iOffX);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v42) = 0;
  UIUtil::_UIUtil(&ui);
  v27 = spNode.m_pObject;
  v42 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v27 )
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004FAEB0) --------------------------------------------------------
void *__thiscall FriendCallWin::_scalar_deleting_destructor_(FriendCallWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendCallWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendCallWin::_vftable_;
  CFriend::_CFriend(&this->m_kFriend);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9946C8: using guessed type int (__stdcall *FriendCallWin___vftable_)(int uiFlags);
// 9946E4: using guessed type int (__thiscall *FriendCallWin___vftable_)(void *p, char);

//----- (004FAF30) --------------------------------------------------------
void __thiscall FriendAddWin::FriendAddWin(FriendAddWin *this)
{
  FriendAddWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendAddWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendAddWin::_vftable_;
  v1->m_pkInputBox = 0;
}
// 995250: using guessed type int (__stdcall *FriendAddWin___vftable_)(int uiFlags);
// 99526C: using guessed type int (__thiscall *FriendAddWin___vftable_)(void *p, char);

//----- (004FAF60) --------------------------------------------------------
void __thiscall FriendAddWin::_FriendAddWin(FriendAddWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendAddWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendAddWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 995250: using guessed type int (__stdcall *FriendAddWin___vftable_)(int uiFlags);
// 99526C: using guessed type int (__thiscall *FriendAddWin___vftable_)(void *p, char);

//----- (004FAF80) --------------------------------------------------------
void __thiscall FriendAddWin::SetTargetName(FriendAddWin *this, const char *szName)
{
  if ( szName )
    ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(szName);
}

//----- (004FAFC0) --------------------------------------------------------
void __thiscall FriendAddWin::OnClose(FriendAddWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (004FAFE0) --------------------------------------------------------
void __thiscall FriendAddWin::OnShowWin(FriendAddWin *this)
{
  ((void (*)(void))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (004FB010) --------------------------------------------------------
void __thiscall FriendWin::OnSortByTitle01(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 )
  {
    v1->m_nSortColumn = 0;
    SlideListWin::Sort(v2, 0, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
  }
}

//----- (004FB040) --------------------------------------------------------
void __thiscall FriendWin::OnSortByTitle02(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 )
  {
    v1->m_nSortColumn = 1;
    SlideListWin::Sort(v2, 1, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
  }
}

//----- (004FB070) --------------------------------------------------------
void __thiscall FriendWin::OnSortByTitle03(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 )
  {
    v1->m_nSortColumn = 2;
    SlideListWin::Sort(v2, 2, 0, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
  }
}

//----- (004FB0A0) --------------------------------------------------------
void __thiscall FriendWin::OnSortByTitle04(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 )
  {
    v1->m_nSortColumn = 3;
    SlideListWin::Sort(v2, 3, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
  }
}

//----- (004FB100) --------------------------------------------------------
void __thiscall FriendWin::ClearFriendList(FriendWin *this)
{
  NiPointer<PgWinLRBut>::_default_constructor_closure_((NiPointer<NiD3DTextureStage> *)&this->m_kFriend);
}

//----- (004FB110) --------------------------------------------------------
int __thiscall FriendWin::GetReadNum(FriendWin *this, _iobuf *fp, int size)
{
  int result; // eax@2
  int v4; // edi@5

  if ( size )
  {
    if ( fp )
    {
      fseek(fp, 0, 2);
      v4 = ftell(fp);
      fseek(fp, 0, 0);
      result = v4 / size;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004FB160) --------------------------------------------------------
bool __thiscall FriendWin::WriteOptFile(FriendWin *this, _iobuf *fp, void *pData, unsigned int size)
{
  bool result; // al@4

  if ( fp && pData && size )
  {
    fwrite(pData, size, 1u, fp);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (004FB1A0) --------------------------------------------------------
bool __thiscall FriendWin::IsValidateFile(FriendWin *this, _iobuf *fp, int dataSize)
{
  int v3; // edi@1

  fseek(fp, 0, 2);
  v3 = ftell(fp);
  fseek(fp, 0, 0);
  return v3 % dataSize == 0;
}

//----- (004FB1E0) --------------------------------------------------------
void __thiscall FriendWin::OnHelpLink(FriendWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "FriendList");
}

//----- (004FB210) --------------------------------------------------------
PROTO_FRIEND_INFO *__thiscall FriendWin::GetFriendInfo(FriendWin *this, Name5 *CharID)
{
  return CFriend::Get(&this->m_kFriend, CharID);
}

//----- (004FB220) --------------------------------------------------------
void __thiscall FriendWin::FriendFindClear(FriendWin *this)
{
  NiPointer<PgWinLRBut>::_default_constructor_closure_((NiPointer<NiD3DTextureStage> *)&this->m_kFindFriend);
}

//----- (004FB230) --------------------------------------------------------
void __thiscall FriendWin::OnSortByTitle05(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 )
  {
    v1->m_nSortColumn = 4;
    SlideListWin::Sort(v2, 4, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
  }
}

//----- (004FB260) --------------------------------------------------------
void __thiscall FriendWin::OnSortByTitle06(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 )
  {
    v1->m_nSortColumn = 5;
    SlideListWin::Sort(v2, 5, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
  }
}

//----- (004FB290) --------------------------------------------------------
void __thiscall FriendWin::OnFriendPointUse(FriendWin *this)
{
  if ( this->m_uiFriendPoint >= this->m_uiFriendUsePoint )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x15u, 0x21u, 0, 0);
}

//----- (004FB2C0) --------------------------------------------------------
void __thiscall FriendWin::OnFriendPointHelp(FriendWin *this)
{
  FriendWin *v1; // esi@1

  v1 = this;
  if ( !(unsigned __int8)((int (*)(void))this->m_pkFriendPointTipMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v1->m_pkFriendPointTipMsg);
}

//----- (004FB2F0) --------------------------------------------------------
void __thiscall FriendWin::ResetAddBtn(FriendWin *this)
{
  FriendWin *v1; // ebx@1
  char *v2; // esi@2
  signed int v3; // edi@2

  v1 = this;
  if ( this->m_pkInviterBtn )
  {
    v2 = (char *)this->m_pkAddBtn;
    v3 = 27;
    do
    {
      if ( *(_DWORD *)v2 )
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 240))(0);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0);
      }
      v2 += 4;
      --v3;
    }
    while ( v3 );
    ((void (__stdcall *)(_DWORD))v1->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
}

//----- (004FB360) --------------------------------------------------------
void __thiscall FriendPointTipMsg::FriendPointTipMsg(FriendPointTipMsg *this)
{
  FriendPointTipMsg *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendPointTipMsg::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendPointTipMsg::_vftable_;
}
// 995490: using guessed type int (__stdcall *FriendPointTipMsg___vftable_)(int uiFlags);
// 9954AC: using guessed type int (__thiscall *FriendPointTipMsg___vftable_)(void *p, char);

//----- (004FB380) --------------------------------------------------------
void __thiscall FriendPointTipMsg::_FriendPointTipMsg(FriendPointTipMsg *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendPointTipMsg::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendPointTipMsg::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 995490: using guessed type int (__stdcall *FriendPointTipMsg___vftable_)(int uiFlags);
// 9954AC: using guessed type int (__thiscall *FriendPointTipMsg___vftable_)(void *p, char);

//----- (004FB3A0) --------------------------------------------------------
void __thiscall FriendPointTipMsg::OnCmdOK(FriendPointTipMsg *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (004FB3C0) --------------------------------------------------------
void __thiscall FriendAddWin::OnFriendAddOk(FriendAddWin *this)
{
  FriendAddWin *v1; // edi@1
  char *v2; // eax@1
  _BYTE v3[20]; // ST04_20@4
  Name5 kNullID; // [sp+Ch] [bp-2Ch]@1
  Name5 kCharID; // [sp+20h] [bp-18h]@1
  unsigned int v6; // [sp+34h] [bp-4h]@1
  int v7; // [sp+38h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v2 = (char *)((int (*)(void))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  *(_QWORD *)&kCharID.n5_name[12] = 0i64;
  *(_QWORD *)&kCharID.n5_name[4] = 0i64;
  *(_QWORD *)&kCharID.n5_name[0] = 0i64;
  strncpy(kCharID.n5_name, v2, 0x14u);
  *(_QWORD *)&kNullID.n5_name[12] = 0i64;
  *(_QWORD *)&kNullID.n5_name[4] = 0i64;
  *(_QWORD *)&kNullID.n5_name[0] = 0i64;
  strncpy(kNullID.n5_name, &byte_994931, 0x14u);
  if ( *(_QWORD *)&kCharID != *(_QWORD *)&kNullID
    || *(_QWORD *)&kCharID.n5_name[8] != *(_QWORD *)&kNullID.n5_name[8]
    || *(_DWORD *)&kCharID.n5_name[16] != *(_DWORD *)&kNullID.n5_name[16] )
  {
    *(_QWORD *)v3 = *(_QWORD *)&kCharID;
    *(_QWORD *)&v3[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&v3[16] = *(_DWORD *)&kCharID.n5_name[16];
    GameFrameWork::NcFriendSetReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, *(Name5 *)v3);
  }
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_994932);
  GameFrameWork::CloseFriendAddWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}
// A85C00: using guessed type int __security_cookie;

//----- (004FB4A0) --------------------------------------------------------
void __thiscall FriendAddWin::OnFriendAddCancel(FriendAddWin *this)
{
  FriendAddWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_994933);
  GameFrameWork::CloseFriendAddWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (004FB4D0) --------------------------------------------------------
void __thiscall FriendAddWin::OnCommand(FriendAddWin *this, unsigned int wParam, int lParam)
{
  FriendAddWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_994933);
      GameFrameWork::CloseFriendAddWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  else
  {
    FriendAddWin::OnFriendAddOk(this);
  }
}

//----- (004FB520) --------------------------------------------------------
void __thiscall FriendAddWin::OnEditEnd(FriendAddWin *this, unsigned int wParam, int lParam)
{
  FriendAddWin::OnFriendAddOk(this);
}

//----- (004FB530) --------------------------------------------------------
void __thiscall FriendWin::ProcessMeInput(FriendWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (004FB5B0) --------------------------------------------------------
void __thiscall FriendWin::UpdateMeWin(FriendWin *this, float fCurTime)
{
  FriendWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinTime, v2->m_pkSlideBarEx);
}

//----- (004FB5E0) --------------------------------------------------------
void __thiscall FriendWin::OnLClick(FriendWin *this, int nItemIndex)
{
  FriendWin *v2; // esi@1

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v2->m_bEnableInviter = 0;
}

//----- (004FB610) --------------------------------------------------------
void __thiscall FriendWin::OnRClick(FriendWin *this, int nItemIndex)
{
  FriendWin *v2; // esi@1
  int v3; // ecx@3
  PopupMenuWin *v4; // ecx@5

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = v2->m_iTabIndex;
  if ( !v3 )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v4 = v2->m_spPopupMenu;
    goto LABEL_7;
  }
  if ( v3 == 1 )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spFindPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_spFindPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v4 = v2->m_spFindPopupMenu;
LABEL_7:
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  }
  v2->m_bEnableInviter = 0;
}

//----- (004FB6C0) --------------------------------------------------------
void __thiscall FriendWin::OnAddFrnd(FriendWin *this)
{
  GameFrameWork::OpenFriendAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (004FB6D0) --------------------------------------------------------
void __thiscall FriendWin::OnWinClose(FriendWin *this)
{
  FriendWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GameFrameWork::CloseCommunityWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (004FB700) --------------------------------------------------------
void __thiscall FriendWin::OnSlideBar(FriendWin *this)
{
  if ( this->m_pListWinTime )
  {
    this->m_pListWinTime->m_nViewStartPos = this->m_pkSlideBarEx->m_nCurPos;
    SlideListWin::UpdateViewList(this->m_pListWinTime);
  }
}

//----- (004FB730) --------------------------------------------------------
void __thiscall FriendWin::OnChangeTab(FriendWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab)
{
  char *v2; // esi@1

  v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      40,
      &eTab,
      v2);
    if ( *((_DWORD *)v2 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(40, &eTab, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 40, &eTab, v2);
}

//----- (004FB790) --------------------------------------------------------
void __thiscall FriendWin::OnTopWin(FriendWin *this)
{
  GameFrameWork::SetTopFriendAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (004FB7A0) --------------------------------------------------------
void __thiscall FriendWin::MakeDefaultOptFile(FriendWin *this)
{
  FriendWin *v1; // edi@1
  char *v2; // eax@3
  _iobuf *v3; // esi@3
  char *v4; // eax@4
  FriendWin::FriendSaveOptData data; // [sp+8h] [bp-48h]@4
  unsigned int v6; // [sp+4Ch] [bp-4h]@1
  int v7; // [sp+50h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSystem, "FPLIST.ons");
  v3 = fopen(v2, "wb");
  if ( v3 )
  {
    memset(data.username, 0, 0x41u);
    v4 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    strncpy(data.username, v4, 0x40u);
    data.bAllow = v1->m_bAllow;
    fwrite(&data, 0x41u, 1u, v3);
    fclose(v3);
  }
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004FB850) --------------------------------------------------------
bool __thiscall FriendWin::SaveOptFile(FriendWin *this)
{
  FriendWin *v1; // ebx@1
  char *v2; // eax@3
  _iobuf *v3; // eax@3
  _iobuf *v4; // esi@3
  int v6; // edi@5
  int v7; // edi@5
  int v8; // ebx@6
  char *v9; // eax@7
  int i; // ebx@7
  char *v11; // eax@12
  FriendWin *v12; // ecx@14
  const void *v13; // [sp-14h] [bp-A8h]@13
  unsigned int v14; // [sp-10h] [bp-A4h]@13
  unsigned int v15; // [sp-Ch] [bp-A0h]@13
  _iobuf *v16; // [sp-8h] [bp-9Ch]@13
  FriendWin *v17; // [sp+8h] [bp-8Ch]@1
  FriendWin::FriendSaveOptData data; // [sp+Ch] [bp-88h]@8
  char userName[64]; // [sp+50h] [bp-44h]@7
  unsigned int v20; // [sp+90h] [bp-4h]@1
  int v21; // [sp+94h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v1 = this;
  v17 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSystem, "FPLIST.ons");
  v3 = fopen(v2, "rb+");
  v4 = v3;
  if ( !v3 )
  {
    FriendWin::MakeDefaultOptFile(v1);
    return 1;
  }
  fseek(v3, 0, 2);
  v6 = ftell(v4);
  fseek(v4, 0, 0);
  v7 = v6 / 65;
  if ( v7 > 100 )
    goto LABEL_20;
  fseek(v4, 0, 2);
  v8 = ftell(v4);
  fseek(v4, 0, 0);
  if ( v8 % 65 )
  {
    v1 = v17;
LABEL_20:
    fclose(v4);
    v12 = v1;
    goto LABEL_21;
  }
  userName[0] = 0;
  memset(&userName[1], 0, 0x3Fu);
  v9 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
  strncpy(userName, v9, 0x40u);
  for ( i = 0; i < v7; ++i )
  {
    memset(data.username, 0, 0x41u);
    if ( !fread(&data, 0x41u, 1u, v4) )
      goto LABEL_14;
    if ( !strncmp(userName, data.username, 0x40u) )
    {
      fseek(v4, -1, 1);
      if ( v17 == (FriendWin *)-7596 )
        goto LABEL_18;
      v16 = v4;
      v15 = 1;
      v14 = 1;
      v13 = &v17->m_bAllow;
      goto LABEL_17;
    }
  }
  if ( v7 == 100 )
  {
LABEL_14:
    fclose(v4);
    v12 = v17;
LABEL_21:
    FriendWin::MakeDefaultOptFile(v12);
    return 1;
  }
  memset(data.username, 0, 0x41u);
  v11 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
  strncpy(data.username, v11, 0x40u);
  data.bAllow = v17->m_bAllow;
  fseek(v4, 0, 2);
  if ( &data )
  {
    v16 = v4;
    v15 = 1;
    v14 = 65;
    v13 = &data;
LABEL_17:
    fwrite(v13, v14, v15, v16);
  }
LABEL_18:
  fclose(v4);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004FBA90) --------------------------------------------------------
void __thiscall FriendWin::OnInviterLClick(FriendWin *this, int nItemIndex)
{
  FriendWin *v2; // esi@1

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v2->m_bEnableInviter = 1;
}

//----- (004FBAC0) --------------------------------------------------------
void __thiscall FriendWin::OnInviterRClick(FriendWin *this, int nItemIndex)
{
  FriendWin *v2; // esi@1
  PopupMenuWin *v3; // ecx@3

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = v2->m_spFindPopupMenu;
  if ( v3 )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_spFindPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    ((void (__stdcall *)(_DWORD))v2->m_spFindPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v2->m_bEnableInviter = 1;
  }
}

//----- (004FBB30) --------------------------------------------------------
void __thiscall FriendWin::OnFindTab(FriendWin *this)
{
  FriendWin *v1; // esi@1

  v1 = this;
  GameFrameWork::NcFriendFindReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, BIL_FRIEND_1);
}

//----- (004FBB50) --------------------------------------------------------
void __thiscall FriendPointTipMsg::OnCommand(FriendPointTipMsg *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1

  v3 = (PgWin *)this;
  if ( !wParam )
  {
    if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  }
}

//----- (004FBB80) --------------------------------------------------------
bool __thiscall FriendAddWin::Create(FriendAddWin *this, PgFrameWork *pkFrameWork)
{
  FriendAddWin *v2; // esi@1
  PgFrameWork *v3; // edi@1
  NiTexturePalette *v4; // ebx@1
  char *v5; // eax@3
  PgSprData *v6; // eax@4
  NiNode *v7; // esi@5
  NiSourceTexture *v9; // eax@10
  PgSprData *v10; // eax@13
  PgWinSpr *v11; // eax@13
  PgFont *v12; // eax@16
  PgWinText *v13; // edi@16
  NiRefObjectVtbl *v14; // ebx@16
  char *v15; // eax@16
  PgSprData *v16; // edi@16
  NiPointer<PgSprData::PgHitTester> *v17; // ecx@16
  unsigned int v18; // edi@16
  unsigned int v19; // ebx@16
  PgFont *v20; // eax@16
  PgWinText *v21; // edi@16
  NiRefObjectVtbl *v22; // ebx@16
  char *v23; // eax@16
  PgSprData *v24; // edi@16
  NiPointer<PgSprData::PgHitTester> *v25; // ecx@16
  unsigned int v26; // edi@16
  unsigned int v27; // ebx@16
  PgFont *v28; // eax@16
  PgWinText *v29; // edi@16
  NiRefObjectVtbl *v30; // ebx@16
  char *v31; // eax@16
  EditWin *v32; // eax@16
  NiNode *v33; // esi@17
  const char *v34; // [sp+2Ch] [bp-50h]@11
  int *v35; // [sp+30h] [bp-4Ch]@11
  int *v36; // [sp+34h] [bp-48h]@11
  NiSourceTexture *v37; // [sp+38h] [bp-44h]@11
  UIUtil ui; // [sp+4Ch] [bp-30h]@16
  unsigned int uiWidth; // [sp+60h] [bp-1Ch]@15
  unsigned int uiHeight; // [sp+64h] [bp-18h]@15
  int uiLeft; // [sp+68h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+6Ch] [bp-10h]@1
  int v43; // [sp+78h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = pkFrameWork;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v4 = dword_B70448;
  v43 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\AddFriendList.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, (int *)&pkFrameWork, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, v3, "FriendAddWin", 0) )
    goto LABEL_23;
  v9 = MenuTexMgr::GetTexture(0x13u);
  if ( v9 )
  {
    v37 = v9;
    v36 = (int *)&pkFrameWork;
    v35 = &uiLeft;
    v34 = "Theme";
  }
  else
  {
    v37 = 0;
    v36 = (int *)&pkFrameWork;
    v35 = &uiLeft;
    v34 = "Theme";
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v34, v35, v36, v37);
  v11 = PgWinSpr::CreateWin(
          uiLeft + 2,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 2),
          v10,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  if ( v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v11,
      0);
  if ( !PgUtil::GetTriShapeRect(
          &spNode.m_pObject->baseclass_0,
          "TextBox",
          &uiLeft,
          (int *)&pkFrameWork,
          &uiWidth,
          &uiHeight) )
  {
LABEL_23:
    v7 = spNode.m_pObject;
    v43 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v12 = Font::Get(0);
  v13 = PgWinText::CreateWin(
          uiLeft,
          (int)pkFrameWork,
          uiWidth,
          uiHeight,
          v12,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v13,
    1u);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v13,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v15 = TextData::Get(0x1B15336Du);
  v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, (int *)&pkFrameWork, 0);
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "BtnOver02");
  PgWinBut::CreateWin(uiLeft, (int)pkFrameWork, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v17 = v16->m_akHitTester.m_pBase;
  v18 = v17->m_pObject->m_uiHeight;
  v19 = v17->m_pObject->m_uiWidth;
  v20 = Font::Get(0);
  v21 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v19,
          v18,
          v20,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0x8AA0A8EFu);
  v22[118].__vecDelDtor((NiRefObject *)v21, (unsigned int)v23);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, (int *)&pkFrameWork, 0);
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnOver03");
  PgWinBut::CreateWin(uiLeft, (int)pkFrameWork, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v25 = v24->m_akHitTester.m_pBase;
  v26 = v25->m_pObject->m_uiHeight;
  v27 = v25->m_pObject->m_uiWidth;
  v28 = Font::Get(0);
  v29 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v27,
          v26,
          v28,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v29,
    5u);
  v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = TextData::Get(0x88A297E1u);
  v30[118].__vecDelDtor((NiRefObject *)v29, (unsigned int)v31);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v43) = 1;
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v32 = UIUtil::CreateEdit(&ui, "InputBox", 16, NORMAL, 0, 1);
  v2->m_pkInputBox = v32;
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
    (NiRefObject *)v32,
    (unsigned int)&unk_99491B);
  ((void (__stdcall *)(_DWORD))v2->m_pkInputBox->m_spEditWin.m_pObject->baseclass_0.vfptr[15].__vecDelDtor)(0);
  ((void (__thiscall *)(FriendAddWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v43) = 0;
  UIUtil::_UIUtil(&ui);
  v43 = -1;
  if ( spNode.m_pObject )
  {
    v33 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v33 )
        v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004FBFC0) --------------------------------------------------------
void __thiscall FriendWin::AddListItem_ExtInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata)
{
  FriendWin *v2; // edi@1
  SlideListWin *v3; // ecx@2
  int v4; // eax@5
  int v5; // edx@5
  int v6; // eax@5
  int v7; // eax@5
  int v8; // ebx@5
  MapInfo *v9; // eax@5
  char *v10; // eax@13
  int v11; // [sp-10h] [bp-B4h]@15
  int v12; // [sp-Ch] [bp-B0h]@15
  const char *v13; // [sp-8h] [bp-ACh]@6
  unsigned int v14; // [sp-8h] [bp-ACh]@9
  int v15; // [sp-8h] [bp-ACh]@15
  char szdata[128]; // [sp+8h] [bp-9Ch]@5
  char acname[21]; // [sp+88h] [bp-1Ch]@5
  unsigned int v18; // [sp+A0h] [bp-4h]@1
  int v19; // [sp+A4h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v2 = this;
  if ( !pdata || (v3 = this->m_pListWinTime) == 0 || v2->m_bShowOnlineOnly && !(pdata->logininfo._bf0 & 1) )
    return;
  v4 = *(_DWORD *)&pdata->charid.n5_name[0];
  *(_DWORD *)&acname[4] = *(_DWORD *)&pdata->charid.n5_name[4];
  v5 = *(_DWORD *)&pdata->charid.n5_name[12];
  *(_DWORD *)acname = v4;
  v6 = *(_DWORD *)&pdata->charid.n5_name[8];
  *(_DWORD *)&acname[12] = v5;
  *(_DWORD *)&acname[8] = v6;
  v7 = *(_DWORD *)&pdata->charid.n5_name[16];
  szdata[0] = 0;
  *(_DWORD *)&acname[16] = v7;
  acname[20] = 0;
  v8 = SlideListWin::AddText(v3, acname);
  v9 = MapInfoTab::GetByMapName(&pdata->map);
  if ( v9 )
    v13 = v9->Name;
  else
    v13 = "...";
  SlideListWin::SetText(v2->m_pListWinTime, v8, 4u, v13);
  if ( pdata->logininfo._bf0 & 1 )
  {
    v14 = -1778781710;
LABEL_13:
    v10 = TextData::Get(v14);
    sprintf(szdata, v10);
    goto LABEL_14;
  }
  if ( !(pdata->logininfo._bf0 & 0xFFE) )
  {
    v14 = -637451970;
    goto LABEL_13;
  }
  sprintf(szdata, "%d-%d");
LABEL_14:
  SlideListWin::SetText(v2->m_pListWinTime, v8, 5u, szdata);
  SlideListWin::SetData(v2->m_pListWinTime, v8, (unsigned int)pdata);
  SlideListWin::SetFontSize(v2->m_pListWinTime, v8, 1);
  if ( pdata->logininfo._bf0 & 1 )
  {
    v15 = 0;
    v12 = 255;
    v11 = 255;
  }
  else
  {
    v15 = 200;
    v12 = 200;
    v11 = 200;
  }
  SlideListWin::SetFontColor(v2->m_pListWinTime, v8, v11, v12, v15);
}
// A85C00: using guessed type int __security_cookie;

//----- (004FC130) --------------------------------------------------------
void __thiscall FriendWin::OnClickRejectBtn(FriendWin *this)
{
  FriendWin *v1; // esi@1
  bool v2; // al@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@2
  char *v5; // eax@2
  char *v6; // eax@3
  char *v7; // eax@3
  GameFrameWork *v8; // esi@4
  char *v9; // eax@4
  unsigned int v10; // [sp-4h] [bp-Ch]@2

  v1 = this;
  v2 = this->m_bAllow == 0;
  this->m_bAllow = v2;
  MachineOpt::ms_kUserLoginOption.bFriendAddAllow = v2;
  v3 = this->m_pkRejectText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( this->m_bAllow )
  {
    v4 = TextData2::Get(0x2D524575u);
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkRejectText, (unsigned int)v4);
    v5 = TextData2::Get(0x7AB19781u);
    PgWin::SetToolTipWinText(&v1->m_pkRejectBtn->baseclass_0.baseclass_0, v5);
    v10 = 742466590;
  }
  else
  {
    v6 = TextData2::Get(0x3552452Fu);
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkRejectText, (unsigned int)v6);
    v7 = TextData2::Get(0x72B197C7u);
    PgWin::SetToolTipWinText(&v1->m_pkRejectBtn->baseclass_0.baseclass_0, v7);
    v10 = -890167274;
  }
  v8 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
  v9 = TextData2::Get(v10);
  GameFrameWork::AddSysMsg(v8, v9);
}

//----- (004FC1F0) --------------------------------------------------------
bool __thiscall FriendWin::LoadOptFile(FriendWin *this)
{
  int v1; // edi@0
  char *v2; // eax@3
  _iobuf *v3; // eax@3
  _iobuf *v4; // esi@3
  bool result; // al@4
  int v6; // edi@5
  int v7; // edi@5
  int v8; // ebx@6
  char *v9; // eax@7
  int v10; // ebx@7
  int v11; // [sp-Ch] [bp-98h]@5
  int v12; // [sp-8h] [bp-94h]@3
  unsigned int v13; // [sp-4h] [bp-90h]@0
  FriendWin *thisa; // [sp+0h] [bp-8Ch]@1
  FriendWin::FriendSaveOptData data; // [sp+4h] [bp-88h]@8
  char userName[64]; // [sp+48h] [bp-44h]@7
  unsigned int v17; // [sp+88h] [bp-4h]@1
  int v18; // [sp+8Ch] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  thisa = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSystem, "FPLIST.ons");
  v3 = fopen(v2, "rb");
  v4 = v3;
  if ( v3 )
  {
    v11 = v1;
    fseek(v3, 0, 2);
    v6 = ftell(v4);
    fseek(v4, 0, 0);
    v7 = v6 / 65;
    if ( v7 > 100 || (fseek(v4, 0, 2), v8 = ftell(v4), fseek(v4, 0, 0), v8 % 65) )
    {
      fclose(v4);
      FriendWin::MakeDefaultOptFile(thisa);
      result = 1;
    }
    else
    {
      userName[0] = 0;
      memset(&userName[1], 0, 0x3Fu);
      v9 = (char *)((int (__stdcall *)(signed int, int, int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(
                     64,
                     v11,
                     v12);
      strncpy(userName, v9, v13);
      v10 = 0;
      if ( v7 > 0 )
      {
        while ( 1 )
        {
          memset(data.username, 0, 0x41u);
          fread(&data, 0x41u, 1u, v4);
          if ( !&data )
          {
            fclose(v4);
            return 0;
          }
          if ( !strncmp(userName, data.username, 0x40u) )
            break;
          ++v10;
          if ( v10 >= v7 )
          {
            fclose(v4);
            return 1;
          }
        }
        if ( thisa->m_bAllow != data.bAllow )
          FriendWin::OnClickRejectBtn(thisa);
      }
      fclose(v4);
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (004FC3D0) --------------------------------------------------------
void __thiscall FriendWin::SetFriendPoint(FriendWin *this, int iFriendPoint)
{
  FriendWin *v2; // esi@1
  PgWinText *v3; // eax@3
  NiRefObjectVtbl *v4; // ebx@4
  char *v5; // eax@4
  char *v6; // eax@4
  PgWinBut *v7; // ecx@4
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // eax@4

  v2 = this;
  if ( iFriendPoint >= 0 )
  {
    if ( this->m_pFriendPointUseBut )
    {
      v3 = this->m_pkFriendPointText;
      if ( v3 )
      {
        v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v5 = TextData3::Get(0x9BE4C2CDu);
        v6 = fs(v5);
        v4[118].__vecDelDtor((NiRefObject *)v2->m_pkFriendPointText, (unsigned int)v6);
        v7 = v2->m_pFriendPointUseBut;
        v2->m_uiFriendPoint = iFriendPoint;
        v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
        if ( iFriendPoint < v2->m_uiFriendUsePoint )
          ((void (__stdcall *)(_DWORD))v8)(0);
        else
          ((void (__stdcall *)(_DWORD))v8)(1);
      }
    }
  }
}

//----- (004FC450) --------------------------------------------------------
void __thiscall FriendWin::OnFriendFindAdd(FriendWin *this, int CheckIndex)
{
  FriendWin *v2; // esi@1
  SlideListWin *v3; // ecx@2
  int v4; // edi@3
  char *v5; // eax@5
  MsgBox *v6; // eax@5
  SlideListWin *v7; // ecx@5
  MsgBox *v8; // ebx@5
  int dwData; // [sp+4h] [bp-20h]@4
  char acname[21]; // [sp+8h] [bp-1Ch]@5
  unsigned int v11; // [sp+20h] [bp-4h]@1
  int v12; // [sp+24h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  if ( CheckIndex >= 0 )
  {
    v3 = this->m_pListWinTime;
    if ( v3 )
    {
      v4 = CheckIndex + v2->m_pkSlideBarEx->m_nCurPos;
      if ( v4 >= 0 )
      {
        if ( SlideListWin::GetData(v3, v4, (unsigned int *)&dwData) )
        {
          *(_DWORD *)acname = *(_DWORD *)(dwData + 4);
          *(_DWORD *)&acname[4] = *(_DWORD *)(dwData + 8);
          *(_DWORD *)&acname[8] = *(_DWORD *)(dwData + 12);
          *(_DWORD *)&acname[12] = *(_DWORD *)(dwData + 16);
          *(_DWORD *)&acname[16] = *(_DWORD *)(dwData + 20);
          acname[20] = 0;
          v5 = TextData3::Get(0x60807D89u);
          v6 = MsgBox::Modal(MSGBOX_OKCANCEL, v5);
          v7 = v2->m_pListWinTime;
          v8 = v6;
          v2->m_bEnableInviter = 0;
          SlideListWin::SetCurSelIndex(v7, v4);
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
            &v8->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
            &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004FC520) --------------------------------------------------------
void __thiscall FriendWin::OnFriendInviterAdd(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  char *v3; // eax@3
  MsgBox *v4; // eax@3
  SlideListWin *v5; // ecx@3
  MsgBox *v6; // edi@3
  int dwData; // [sp+4h] [bp-20h]@2
  char acname[21]; // [sp+8h] [bp-1Ch]@3
  unsigned int v9; // [sp+20h] [bp-4h]@1
  int v10; // [sp+24h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkInviterWin;
  if ( v2 )
  {
    if ( SlideListWin::GetData(v2, 0, (unsigned int *)&dwData) )
    {
      *(_DWORD *)acname = *(_DWORD *)(dwData + 4);
      *(_DWORD *)&acname[4] = *(_DWORD *)(dwData + 8);
      *(_DWORD *)&acname[8] = *(_DWORD *)(dwData + 12);
      *(_DWORD *)&acname[12] = *(_DWORD *)(dwData + 16);
      *(_DWORD *)&acname[16] = *(_DWORD *)(dwData + 20);
      acname[20] = 0;
      v3 = TextData3::Get(0x60807D89u);
      v4 = MsgBox::Modal(MSGBOX_OKCANCEL, v3);
      v5 = v1->m_pkInviterWin;
      v6 = v4;
      v1->m_bEnableInviter = 1;
      SlideListWin::SetCurSelIndex(v5, 0);
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
        &v6->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004FC5D0) --------------------------------------------------------
bool __thiscall FriendPointTipMsg::Create(FriendPointTipMsg *this)
{
  PgWin *v1; // edi@1
  NiSourceTexture *v2; // esi@1
  bool result; // al@6
  NiTexturePalette *v4; // ebx@7
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  NiSourceTexture *v8; // eax@16
  PgSprData *v9; // eax@19
  PgWinSpr *v10; // eax@19
  PgSprData *v11; // esi@21
  PgWin *v12; // ST28_4@21
  PgFont *v13; // ST24_4@21
  unsigned int v14; // ST20_4@21
  unsigned int v15; // eax@21
  PgWinText *v16; // esi@21
  NiRefObjectVtbl *v17; // ebx@21
  char *v18; // eax@21
  PgFont *v19; // eax@21
  PgWinText *v20; // esi@21
  NiRefObjectVtbl *v21; // ebx@21
  char *v22; // eax@21
  PgFont *v23; // eax@21
  PgWinText *v24; // esi@21
  NiRefObjectVtbl *v25; // ebx@21
  char *v26; // eax@21
  NiSourceTexture *v27; // eax@21
  PgSprData *v28; // eax@21
  PgWinSpr *v29; // eax@21
  NiNode *v30; // esi@22
  const char *v31; // [sp+24h] [bp-40h]@17
  int *v32; // [sp+28h] [bp-3Ch]@17
  int *v33; // [sp+2Ch] [bp-38h]@17
  NiSourceTexture *v34; // [sp+30h] [bp-34h]@17
  unsigned int uiWidth; // [sp+44h] [bp-20h]@21
  unsigned int uiHeight; // [sp+48h] [bp-1Ch]@21
  int uiLeft; // [sp+4Ch] [bp-18h]@10
  int uiTop; // [sp+50h] [bp-14h]@10
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v40; // [sp+60h] [bp-4h]@1

  v1 = (PgWin *)this;
  spNode.m_pObject = 0;
  v40 = 0;
  v2 = MenuTexMgr::GetTexture(4u);
  if ( !v2 )
  {
    v40 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\FriendPointTip.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v2);
  if ( PgWinFrame::Create((PgWinFrame *)v1, 0, 0, v6, 0, 0, 0, 0) )
  {
    v8 = MenuTexMgr::GetTexture(0x13u);
    if ( v8 )
    {
      v34 = v8;
      v33 = &uiTop;
      v32 = &uiLeft;
      v31 = "Theme";
    }
    else
    {
      v34 = 0;
      v33 = &uiTop;
      v32 = &uiLeft;
      v31 = "Theme";
    }
    v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v31, v32, v33, v34);
    v10 = PgWinSpr::CreateWin(uiLeft, uiTop, v9, v1, 0, 0);
    if ( v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v10,
        0);
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor01", &uiLeft, &uiTop, v2);
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "BtnClick01");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "BtnOver01");
    v12 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v11, v1, 0, 0, 0);
    v13 = Font::Get(0);
    v14 = ((int (__thiscall *)(PgWin *))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v12);
    v15 = ((int (__thiscall *)(PgWin *))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v12);
    v16 = PgWinText::CreateWin(0, 0, v15, v14, v13, v12, 0, 0);
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v16,
      5u);
    v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v18 = TextData::Get(0x4F5F499Fu);
    v17[118].__vecDelDtor((NiRefObject *)v16, (unsigned int)v18);
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v16,
      0);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text00", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v19 = Font::Get(MAIN_MENU);
    v20 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v19, v1, 0, 0);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v20,
      4u);
    v21 = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v22 = TextData3::Get(0x9B9B73B0u);
    v21[118].__vecDelDtor((NiRefObject *)v20, (unsigned int)v22);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v23 = Font::Get(MAIN_MENU);
    v24 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v23, v1, 0, 0);
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v24,
      4u);
    v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData3::Get(0x9B9B73B1u);
    v25[118].__vecDelDtor((NiRefObject *)v24, (unsigned int)v26);
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v24,
      0);
    v27 = MenuTexMgr::GetTexture(0x1Du);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Table", &uiLeft, &uiTop, v27);
    v29 = PgWinSpr::CreateWin(uiLeft, uiTop, v28, v1, 0, 0);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    ((void (__thiscall *)(PgWin *, unsigned int, unsigned int, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v1,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v40 = -1;
    if ( spNode.m_pObject )
    {
      v30 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v30 )
          v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v7 = spNode.m_pObject;
    v40 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (004FC9D0) --------------------------------------------------------
void __thiscall FriendAddWin::UpdateMeWin(FriendAddWin *this, float fCurTime)
{
  FriendAddWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(this->baseclass_0.m_pkFrameWork[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (004FCA30) --------------------------------------------------------
void __thiscall FriendWin::AddListItem_DefInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata)
{
  FriendWin *v2; // edi@1
  SlideListWin *v3; // ecx@1
  int v4; // eax@4
  int v5; // edx@4
  int v6; // eax@4
  int v7; // ebx@4
  void *v8; // eax@4
  const char *v9; // eax@5
  SlideListWin *v10; // ecx@7
  int v11; // [sp-10h] [bp-B4h]@8
  int v12; // [sp-Ch] [bp-B0h]@8
  int v13; // [sp-8h] [bp-ACh]@8
  char szdata[128]; // [sp+8h] [bp-9Ch]@7
  char acname[21]; // [sp+88h] [bp-1Ch]@4
  unsigned int v16; // [sp+A0h] [bp-4h]@1
  int v17; // [sp+A4h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinTime;
  if ( v3 && (!v2->m_bShowOnlineOnly || pdata->logininfo._bf0 & 1) )
  {
    v4 = *(_DWORD *)&pdata->charid.n5_name[0];
    *(_DWORD *)&acname[4] = *(_DWORD *)&pdata->charid.n5_name[4];
    v5 = *(_DWORD *)&pdata->charid.n5_name[12];
    *(_DWORD *)acname = v4;
    v6 = *(_DWORD *)&pdata->charid.n5_name[8];
    *(_DWORD *)&acname[12] = v5;
    *(_DWORD *)&acname[8] = v6;
    *(_DWORD *)&acname[16] = *(_DWORD *)&pdata->charid.n5_name[16];
    acname[20] = 0;
    v7 = SlideListWin::AddText(v3, acname);
    v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pdata->classid);
    if ( v8 )
      v9 = (char *)v8 + 21;
    else
      v9 = &byte_9788EB;
    SlideListWin::SetText(v2->m_pListWinTime, v7, 1u, v9);
    sprintf(szdata, "%d");
    SlideListWin::SetText(v2->m_pListWinTime, v7, 2u, szdata);
    szdata[0] = pdata->isparty != 0 ? 111 : 120;
    v10 = v2->m_pListWinTime;
    szdata[1] = 0;
    SlideListWin::SetText(v10, v7, 3u, szdata);
    SlideListWin::SetData(v2->m_pListWinTime, v7, (unsigned int)pdata);
    SlideListWin::SetFontSize(v2->m_pListWinTime, v7, 1);
    if ( pdata->logininfo._bf0 & 1 )
    {
      v13 = 0;
      v12 = 255;
      v11 = 255;
    }
    else
    {
      v13 = 200;
      v12 = 200;
      v11 = 200;
    }
    SlideListWin::SetFontColor(v2->m_pListWinTime, v7, v11, v12, v13);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004FCB90) --------------------------------------------------------
void __thiscall FriendWin::ViewAllInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata)
{
  FriendWin *v2; // edi@1
  int v3; // ecx@2
  int v4; // edx@2
  int v5; // eax@2
  int v6; // ecx@2
  char *v7; // eax@2
  char *v8; // eax@6
  int v9; // eax@7
  char *v10; // eax@10
  char *v11; // eax@12
  char *v12; // [sp-Ch] [bp-B0h]@3
  char *v13; // [sp-8h] [bp-ACh]@3
  unsigned int v14; // [sp-4h] [bp-A8h]@8
  char szdata[128]; // [sp+8h] [bp-9Ch]@2
  char acname[21]; // [sp+88h] [bp-1Ch]@2
  unsigned int v17; // [sp+A0h] [bp-4h]@1
  int v18; // [sp+A4h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  if ( pdata )
  {
    ToolTipWin::ClearTipText((ToolTipWin *)g_pkToolTipWin);
    v3 = *(_DWORD *)&pdata->charid.n5_name[4];
    v4 = *(_DWORD *)&pdata->charid.n5_name[8];
    *(_DWORD *)acname = *(_DWORD *)&pdata->charid.n5_name[0];
    v5 = *(_DWORD *)&pdata->charid.n5_name[12];
    *(_DWORD *)&acname[4] = v3;
    v6 = *(_DWORD *)&pdata->charid.n5_name[16];
    *(_DWORD *)&acname[12] = v5;
    *(_DWORD *)&acname[16] = v6;
    *(_DWORD *)&acname[8] = v4;
    acname[20] = 0;
    ((void (__stdcall *)(_DWORD, _DWORD, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      0,
      acname,
      1,
      255,
      255,
      0);
    ((void (__stdcall *)(signed int, _UNKNOWN *, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      1,
      &unk_99493A,
      255,
      255,
      255,
      0);
    CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pdata->classid);
    v7 = TextData::Get(0x95A9DAEDu);
    sprintf(szdata, v7);
    ((void (__stdcall *)(signed int, _DWORD, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      2,
      szdata,
      255,
      255,
      255,
      0);
    sprintf(szdata, "LV : %d");
    ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      3,
      szdata,
      255,
      255,
      255,
      0);
    if ( pdata->isparty )
    {
      v13 = TextData::Get(0xEFE6FA48u);
      v12 = szdata;
    }
    else
    {
      v13 = TextData::Get(0xA0989BF4u);
      v12 = szdata;
    }
    sprintf(v12, v13);
    ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      4,
      szdata,
      255,
      255,
      255,
      0);
    if ( MapInfoTab::GetByMapName(&pdata->map) )
    {
      v8 = TextData::Get(0xDE353F4Du);
      sprintf(szdata, v8);
      ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
        5,
        szdata,
        255,
        255,
        255,
        0);
    }
    v9 = pdata->logininfo._bf0;
    if ( pdata->logininfo._bf0 & 1 )
    {
      v14 = -1886347311;
    }
    else
    {
      if ( v9 & 0xFFE )
      {
        v10 = TextData2::Get(0xF1ECBD28u);
        sprintf(szdata, v10);
LABEL_13:
        ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
          6,
          szdata,
          255,
          255,
          255,
          0);
        ((void (__stdcall *)(signed int, char *, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
          7,
          pdata->statustitle,
          255,
          255,
          255,
          0);
        ((void (__stdcall *)(FriendWin *))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[139].__vecDelDtor)(v2);
        ((void (__stdcall *)(int, int))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
          PgWin::ms_iMsX.x,
          PgWin::ms_iMsY);
        return;
      }
      v14 = -1797065253;
    }
    v11 = TextData::Get(v14);
    sprintf(szdata, v11);
    goto LABEL_13;
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004FCE80) --------------------------------------------------------
void __thiscall FriendWin::AddFindListItem(FriendWin *this, PROTO_FRIEND_INFO *pdata)
{
  FriendWin *v2; // edi@1
  int v3; // edx@3
  int v4; // eax@3
  int v5; // ecx@3
  int v6; // eax@3
  SlideListWin *v7; // ecx@3
  int v8; // ebx@3
  void *v9; // eax@3
  const char *v10; // eax@4
  char szdata[128]; // [sp+8h] [bp-9Ch]@6
  char acname[21]; // [sp+88h] [bp-1Ch]@3
  unsigned int v13; // [sp+A0h] [bp-4h]@1
  int v14; // [sp+A4h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v2 = this;
  if ( pdata && this->m_pkFindWin )
  {
    v3 = *(_DWORD *)&pdata->charid.n5_name[8];
    v4 = *(_DWORD *)&pdata->charid.n5_name[0];
    *(_DWORD *)&acname[4] = *(_DWORD *)&pdata->charid.n5_name[4];
    v5 = *(_DWORD *)&pdata->charid.n5_name[16];
    *(_DWORD *)&acname[8] = v3;
    *(_DWORD *)acname = v4;
    v6 = *(_DWORD *)&pdata->charid.n5_name[12];
    *(_DWORD *)&acname[16] = v5;
    v7 = v2->m_pListWinTime;
    *(_DWORD *)&acname[12] = v6;
    acname[20] = 0;
    v8 = SlideListWin::AddText(v7, acname);
    v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pdata->classid);
    if ( v9 )
      v10 = (char *)v9 + 21;
    else
      v10 = &byte_9788EB;
    SlideListWin::SetText(v2->m_pkFindWin, v8, 1u, v10);
    sprintf(szdata, "%d");
    SlideListWin::SetText(v2->m_pkFindWin, v8, 2u, szdata);
    SlideListWin::SetData(v2->m_pkFindWin, v8, (unsigned int)pdata);
    SlideListWin::SetFontSize(v2->m_pkFindWin, v8, 1);
    SlideListWin::SetFontColor(v2->m_pkFindWin, v8, 255, 255, 0);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004FCF90) --------------------------------------------------------
void __thiscall FriendWin::SetInviterInfo(FriendWin *this, PROTO_FRIEND_INFO *pdata)
{
  int v2; // ebx@0
  FriendWin *v3; // esi@1
  int v4; // edx@4
  int v5; // eax@4
  int v6; // ecx@4
  int v7; // eax@4
  SlideListWin *v8; // ecx@4
  int v9; // ebx@4
  void *v10; // eax@4
  const char *v11; // eax@5
  SlideListWin *v12; // ecx@7
  int v13; // [sp-4h] [bp-ACh]@4
  char szdata[128]; // [sp+Ch] [bp-9Ch]@7
  char acname[21]; // [sp+8Ch] [bp-1Ch]@4
  unsigned int v16; // [sp+A4h] [bp-4h]@1
  int v17; // [sp+A8h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = this;
  if ( this->m_pkInviterWin && this->m_pkToolTip && pdata )
  {
    v13 = v2;
    ((void (__stdcall *)(_DWORD))this->m_pkToolTip->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkToolTip->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    SlideListWin::RemoveAllList(v3->m_pkInviterWin);
    v4 = *(_DWORD *)&pdata->charid.n5_name[8];
    v5 = *(_DWORD *)&pdata->charid.n5_name[0];
    *(_DWORD *)&acname[4] = *(_DWORD *)&pdata->charid.n5_name[4];
    v6 = *(_DWORD *)&pdata->charid.n5_name[16];
    *(_DWORD *)&acname[8] = v4;
    *(_DWORD *)acname = v5;
    v7 = *(_DWORD *)&pdata->charid.n5_name[12];
    *(_DWORD *)&acname[16] = v6;
    v8 = v3->m_pkInviterWin;
    *(_DWORD *)&acname[12] = v7;
    acname[20] = 0;
    v9 = SlideListWin::AddText(v8, acname);
    SlideListWin::SetText(v3->m_pkInviterWin, v9, 0, acname);
    v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pdata->classid);
    if ( v10 )
      v11 = (char *)v10 + 21;
    else
      v11 = &byte_9788EB;
    SlideListWin::SetText(v3->m_pkInviterWin, v9, 1u, v11);
    sprintf(szdata, "%d");
    SlideListWin::SetText(v3->m_pkInviterWin, v9, 2u, szdata);
    SlideListWin::SetData(v3->m_pkInviterWin, v9, (unsigned int)pdata);
    SlideListWin::SetFontSize(v3->m_pkInviterWin, v9, 1);
    v12 = v3->m_pkInviterWin;
    if ( pdata->logininfo._bf0 & 1 )
    {
      SlideListWin::SetFontColor(v12, v9, 255, 255, 0);
      if ( CFriend::Get(&v3->m_kFriend, &pdata->charid) )
      {
LABEL_12:
        SlideListWin::UpdateViewList(v3->m_pkInviterWin);
        return;
      }
      ((void (__stdcall *)(signed int, int))v3->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        1,
        v13);
    }
    else
    {
      SlideListWin::SetFontColor(v12, v9, 200, 200, 200);
      ((void (__stdcall *)(_DWORD, int))v3->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        0,
        v13);
    }
    ((void (*)(void))v3->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)();
    goto LABEL_12;
  }
}
// 4FCF90: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (004FD180) --------------------------------------------------------
void __thiscall FriendWin::DirectMessage(FriendWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  FriendWin *v4; // esi@1
  SlideListWin *v5; // ecx@1
  int v6; // eax@2
  unsigned int *v7; // eax@7
  int v8; // ecx@8
  SlideListWin *v9; // ecx@11
  int v10; // eax@12
  bool v11; // al@13
  int v12; // eax@14
  GameFrameWork *v13; // ecx@21
  int v14; // ecx@22
  SlideListWin *v15; // ecx@25
  int v16; // eax@26
  bool v17; // al@27
  int v18; // eax@28
  int v19; // edi@35
  GameFrameWork *v20; // ecx@35
  SlideListWin *v21; // ecx@43
  int v22; // eax@44
  SlideListWin *v23; // ecx@45
  int v24; // [sp-14h] [bp-44h]@7
  int v25; // [sp-10h] [bp-40h]@7
  int v26; // [sp-Ch] [bp-3Ch]@7
  int v27; // [sp-8h] [bp-38h]@7
  unsigned int *v28; // [sp-4h] [bp-34h]@7
  int *v29; // [sp+8h] [bp-28h]@50
  bool bDataCheck; // [sp+Fh] [bp-21h]@18
  int dwData; // [sp+10h] [bp-20h]@5
  char acname[21]; // [sp+14h] [bp-1Ch]@21
  unsigned int v33; // [sp+2Ch] [bp-4h]@1
  int v34; // [sp+30h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v4 = this;
  v5 = *(SlideListWin **)&this->m_kFriend.m_Friends[96].statustitle[28];
  if ( v5 )
  {
    v6 = SlideListWin::GetCurSelIndex(v5);
    switch ( iMsgTag )
    {
      case 9:
      case 12:
        if ( (PgWin *)((char *)v4 - 232) == g_pkToolTipWin->m_pkToolTipParentWin )
          ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        return;
      case 18:
        if ( SlideListWin::GetData(
               *(SlideListWin **)&v4->m_kFriend.m_Friends[96].statustitle[28],
               v6,
               (unsigned int *)&dwData)
          && dwData )
        {
          v24 = *(_DWORD *)(dwData + 4);
          v25 = *(_DWORD *)(dwData + 8);
          v26 = *(_DWORD *)(dwData + 12);
          v7 = *(unsigned int **)(dwData + 20);
          v27 = *(_DWORD *)(dwData + 16);
          v28 = v7;
          GameFrameWork::OnFriendDelete(
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
            *(Name5 *)&v24);
        }
        return;
      case 20:
        v8 = *(_DWORD *)&v4->m_kFriend.m_Friends[97].statustitle[0];
        if ( v8 )
        {
          if ( v8 == 1 )
          {
            if ( v4->m_kFriend.m_Friends[97].map.n3_name[2] )
            {
              v9 = (SlideListWin *)v4->m_kFindFriend.m_Friends[99].logininfo._bf0;
              if ( !v9 || (v10 = SlideListWin::GetCurSelIndex(v9), v10 < 0) )
                return;
              v11 = SlideListWin::GetData(
                      (SlideListWin *)v4->m_kFindFriend.m_Friends[99].logininfo._bf0,
                      v10,
                      (unsigned int *)&dwData);
            }
            else
            {
              v12 = SlideListWin::GetCurSelIndex(*(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[28]);
              if ( v12 < 0 )
                return;
              v11 = SlideListWin::GetData(
                      *(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[28],
                      v12,
                      (unsigned int *)&dwData);
            }
          }
          else
          {
            v11 = bDataCheck;
          }
        }
        else
        {
          if ( v6 < 0 )
            return;
          v11 = SlideListWin::GetData(
                  *(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[24],
                  v6,
                  (unsigned int *)&dwData);
        }
        if ( v11 && dwData )
        {
          Name5::n_string((Name5 *)(dwData + 4), acname);
          v13 = (GameFrameWork *)LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]);
          acname[20] = 0;
          GameFrameWork::NcPartyJoinReq(v13, acname);
        }
        return;
      case 21:
        v14 = *(_DWORD *)&v4->m_kFriend.m_Friends[97].statustitle[0];
        if ( v14 )
        {
          if ( v14 == 1 )
          {
            if ( v4->m_kFriend.m_Friends[97].map.n3_name[2] )
            {
              v15 = (SlideListWin *)v4->m_kFindFriend.m_Friends[99].logininfo._bf0;
              if ( !v15 || (v16 = SlideListWin::GetCurSelIndex(v15), v16 < 0) )
                return;
              v17 = SlideListWin::GetData(
                      (SlideListWin *)v4->m_kFindFriend.m_Friends[99].logininfo._bf0,
                      v16,
                      (unsigned int *)&dwData);
            }
            else
            {
              v18 = SlideListWin::GetCurSelIndex(*(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[28]);
              if ( v18 < 0 )
                return;
              v17 = SlideListWin::GetData(
                      *(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[28],
                      v18,
                      (unsigned int *)&dwData);
            }
          }
          else
          {
            v17 = bDataCheck;
          }
        }
        else
        {
          if ( v6 < 0 )
            return;
          v17 = SlideListWin::GetData(
                  *(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[24],
                  v6,
                  (unsigned int *)&dwData);
        }
        if ( v17 && dwData )
        {
          v19 = dwData + 4;
          Name5::n_string((Name5 *)(dwData + 4), acname);
          *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)v19;
          *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)(v19 + 8);
          *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)(v19 + 16);
          v20 = (GameFrameWork *)LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]);
          acname[20] = 0;
          GameFrameWork::OnWhisperChatStart(v20, acname);
        }
        return;
      case 19:
        if ( v6 >= 0
          && SlideListWin::GetData(
               *(SlideListWin **)&v4->m_kFriend.m_Friends[96].statustitle[28],
               v6,
               (unsigned int *)&dwData)
          && dwData )
          FriendWin::ViewAllInfo((FriendWin *)((char *)v4 - 232), (PROTO_FRIEND_INFO *)dwData);
        return;
      case 27:
        if ( !pvBody || *(_DWORD *)pvBody )
          return;
        if ( v4->m_kFriend.m_Friends[97].map.n3_name[2] )
        {
          v21 = (SlideListWin *)v4->m_kFindFriend.m_Friends[99].logininfo._bf0;
          if ( !v21 || (v22 = SlideListWin::GetCurSelIndex(v21), v22 < 0) )
            return;
          v23 = (SlideListWin *)v4->m_kFindFriend.m_Friends[99].logininfo._bf0;
          v28 = (unsigned int *)&dwData;
        }
        else
        {
          v22 = SlideListWin::GetCurSelIndex(*(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[28]);
          if ( v22 < 0 )
            return;
          v28 = (unsigned int *)&dwData;
          v23 = *(SlideListWin **)&v4->m_kFindFriend.m_Friends[98].statustitle[28];
        }
        if ( SlideListWin::GetData(v23, v22, v28) && dwData )
        {
          Name5::n_string((Name5 *)(dwData + 4), acname);
          v29 = &v24;
          acname[20] = 0;
          Name5::Name5((Name5 *)&v24, acname);
          GameFrameWork::NcFriendSetReq(
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
            *(Name5 *)&v24);
        }
        break;
      default:
        return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004FD530) --------------------------------------------------------
void __thiscall FriendWin::UpdateViewList(FriendWin *this)
{
  FriendWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  int v3; // ebx@3
  PROTO_FRIEND_INFO *v4; // edi@4
  int v5; // eax@5

  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 && !v1->m_iTabIndex )
  {
    SlideListWin::RemoveAllList(v2);
    v3 = 0;
    if ( v1->m_kFriend.m_NumOfFriend > 0 )
    {
      v4 = v1->m_kFriend.m_Friends;
      do
      {
        v5 = v1->m_iDefaultView;
        if ( v5 )
        {
          if ( v5 == 1 )
            FriendWin::AddListItem_ExtInfo(v1, v4);
        }
        else
        {
          FriendWin::AddListItem_DefInfo(v1, v4);
        }
        ++v3;
        ++v4;
      }
      while ( v3 < v1->m_kFriend.m_NumOfFriend );
    }
    SlideListWin::Sort(v1->m_pListWinTime, v1->m_nSortColumn, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
    SlideBar::SetSplitCnt(v1->m_pkSlideBarEx, v1->m_pListWinTime->m_nSlideSplitCnt);
  }
}

//----- (004FD5D0) --------------------------------------------------------
void __thiscall FriendWin::ChangeUserName(FriendWin *this, Name5 *OldName, Name5 *NewName)
{
  FriendWin *v3; // esi@1
  PROTO_FRIEND_INFO *v4; // eax@1

  v3 = this;
  v4 = CFriend::Get(&this->m_kFriend, OldName);
  if ( v4 )
  {
    *(_QWORD *)&v4->charid.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v4->charid.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v4->charid.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
    FriendWin::UpdateViewList(v3);
  }
}

//----- (004FD620) --------------------------------------------------------
void __thiscall FriendWin::UpdateFindList(FriendWin *this, int nIndex)
{
  FriendWin *v2; // esi@1
  int v3; // edi@3
  int v4; // ebx@5
  int nPosX; // [sp+Ch] [bp+8h]@5

  v2 = this;
  if ( this->m_pkFindWin )
  {
    if ( this->m_pkFindBar )
    {
      v3 = nIndex;
      if ( nIndex >= 0 )
      {
        FriendWin::AddFindListItem(this, &this->m_kFindFriend.m_Friends[nIndex]);
        if ( nIndex < 27 )
        {
          nPosX = SlideListWin::GetColumPosX(v2->m_pkFindWin, nIndex, 3u);
          v4 = SlideListWin::GetColumPosY(v2->m_pkFindWin, v3, 3u) + 1;
          ((void (__stdcall *)(_DWORD))v2->m_pkAddBtn[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          ((void (__stdcall *)(_DWORD))v2->m_pkAddBtn[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          ((void (__stdcall *)(_DWORD))v2->m_pkAddBtn[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(nPosX + 33);
          v2->m_pkAddBtn[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
            (NiRefObject *)v2->m_pkAddBtn[v3],
            v4);
        }
        SlideListWin::UpdateViewList(v2->m_pkFindWin);
        SlideBar::SetSplitCnt(v2->m_pkFindBar, v2->m_pkFindWin->m_nSlideSplitCnt);
      }
    }
  }
}

//----- (004FD710) --------------------------------------------------------
void __thiscall FriendWin::ResetTitleType(FriendWin *this, int iCnt, int iCondition)
{
  int v3; // ebx@2
  char *v4; // edi@3
  int i; // esi@4
  signed int v6; // [sp-10h] [bp-10h]@7

  if ( iCnt >= 0 )
  {
    v3 = 0;
    if ( iCnt > 0 )
    {
      v4 = (char *)&this->m_vecTitleType[0].baseclass_0._Mylast;
      do
      {
        for ( i = *((_DWORD *)v4 - 1); i != *(_DWORD *)v4; i += 4 )
        {
          if ( !*(_DWORD *)i )
            break;
          v6 = v3 == iCondition ? 1 : 0;
          (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 256))(v6);
        }
        ++v3;
        v4 += 16;
      }
      while ( v3 < iCnt );
    }
  }
}

//----- (004FD770) --------------------------------------------------------
void __thiscall FriendWin::ResetTabType(FriendWin *this, int iCnt, int iCondition)
{
  int v3; // ebx@2
  char *v4; // edi@3
  int i; // esi@4
  signed int v6; // [sp-10h] [bp-10h]@7

  if ( iCnt >= 0 )
  {
    v3 = 0;
    if ( iCnt > 0 )
    {
      v4 = (char *)&this->m_vecTabType[0].baseclass_0._Mylast;
      do
      {
        for ( i = *((_DWORD *)v4 - 1); i != *(_DWORD *)v4; i += 4 )
        {
          if ( !*(_DWORD *)i )
            break;
          v6 = v3 == iCondition ? 1 : 0;
          (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 256))(v6);
        }
        ++v3;
        v4 += 16;
      }
      while ( v3 < iCnt );
    }
  }
}

//----- (004FD7D0) --------------------------------------------------------
void __thiscall FriendWin::ShowFindList(FriendWin *this)
{
  FriendWin *v1; // esi@1
  PgWinBut *v2; // ecx@3
  signed int v3; // ebx@3
  int v4; // edi@5
  int i; // esi@5
  signed int v6; // ebx@12
  int v7; // edi@13
  int j; // esi@13
  SlideBar *v9; // edx@20
  signed int v10; // [sp-Ch] [bp-14h]@8
  signed int v11; // [sp-Ch] [bp-14h]@16
  FriendWin *thisa; // [sp+4h] [bp-4h]@1

  v1 = this;
  thisa = this;
  if ( this->m_pkFindWin && this->m_pkFindBar )
  {
    v2 = this->m_pkListName;
    v1->m_iTabIndex = 1;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkListNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v3 = 0;
    while ( 1 )
    {
      v4 = (int)((char *)v1 + 16 * v3);
      for ( i = *(_DWORD *)(v4 + 14984); i != *(_DWORD *)(v4 + 14988); i += 4 )
      {
        if ( !*(_DWORD *)i )
          break;
        v10 = v3 == 2 ? 1 : 0;
        (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 256))(v10);
      }
      ++v3;
      if ( v3 >= 3 )
        break;
      v1 = thisa;
    }
    v6 = 0;
    do
    {
      v7 = (int)((char *)thisa + 16 * v6);
      for ( j = *(_DWORD *)(v7 + 15032); j != *(_DWORD *)(v7 + 15036); j += 4 )
      {
        if ( !*(_DWORD *)j )
          break;
        v11 = v6 == 1 ? 1 : 0;
        (*(void (__stdcall **)(signed int))(**(_DWORD **)j + 256))(v11);
      }
      ++v6;
    }
    while ( v6 < 2 );
    v9 = thisa->m_pkFindBar;
    thisa->m_pListWinTime = thisa->m_pkFindWin;
    thisa->m_pkSlideBarEx = v9;
    FriendWin::ResetAddBtn(thisa);
    SlideListWin::RemoveAllList(thisa->m_pListWinTime);
    SlideListWin::UpdateViewList(thisa->m_pListWinTime);
    thisa->m_pkListTab->m_bCheck = 0;
    thisa->m_pkFindTab->m_bCheck = 1;
  }
}

//----- (004FD910) --------------------------------------------------------
FriendAddWin *__cdecl FriendAddWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  FriendAddWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &FriendAddWin::_vftable_;
    *((_DWORD *)v2 + 58) = &FriendAddWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (FriendAddWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 995250: using guessed type int (__stdcall *FriendAddWin___vftable_)(int uiFlags);
// 99526C: using guessed type int (__thiscall *FriendAddWin___vftable_)(void *p, char);

//----- (004FDA50) --------------------------------------------------------
void __thiscall FriendWin::_FriendWin(FriendWin *this)
{
  FriendWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_vecTabType,
    0x10u,
    3,
    (void (__thiscall *)(void *))__1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a);
  _eh_vector_destructor_iterator_(
    v1->m_vecTitleType,
    0x10u,
    3,
    (void (__thiscall *)(void *))__1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a);
  CFriend::_CFriend(&v1->m_kFindFriend);
  CFriend::_CFriend(&v1->m_kFriend);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9956D0: using guessed type int (__stdcall *FriendWin___vftable_)(int uiFlags);
// 9956EC: using guessed type int (__thiscall *FriendWin___vftable_)(void *p, char);

//----- (004FDB00) --------------------------------------------------------
void __thiscall FriendWin::OnAddInfoBtn(FriendWin *this)
{
  FriendWin *v1; // edi@1
  int v2; // eax@1
  signed int v3; // ebx@1
  NiRefObjectVtbl *v4; // esi@5
  char *v5; // eax@5
  int v6; // edi@6
  int i; // esi@7
  unsigned int v8; // [sp-4h] [bp-18h]@3
  signed int v9; // [sp-4h] [bp-18h]@10
  FriendWin *thisa; // [sp+Ch] [bp-8h]@1
  int v11; // [sp+10h] [bp-4h]@6

  v1 = this;
  v2 = this->m_iDefaultView;
  v3 = 0;
  thisa = this;
  if ( !v2 )
  {
    this->m_iDefaultView = 1;
    v8 = -655796683;
    goto LABEL_5;
  }
  if ( v2 == 1 )
  {
    this->m_iDefaultView = 0;
    v8 = 891961159;
LABEL_5:
    v4 = this->m_pkInfoType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = TextData::Get(v8);
    v4[118].__vecDelDtor((NiRefObject *)v1->m_pkInfoType, (unsigned int)v5);
  }
  v11 = v1->m_iDefaultView;
  v6 = (int)&v1->m_vecTitleType[0].baseclass_0._Mylast;
  do
  {
    for ( i = *(_DWORD *)(v6 - 4); i != *(_DWORD *)v6; i += 4 )
    {
      if ( !*(_DWORD *)i )
        break;
      v9 = v3 == v11 ? 1 : 0;
      (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 256))(v9);
    }
    ++v3;
    v6 += 16;
  }
  while ( v3 < 3 );
  FriendWin::UpdateViewList(thisa);
}

//----- (004FDBB0) --------------------------------------------------------
void __thiscall FriendWin::OnShowAllFriend(FriendWin *this)
{
  FriendWin *v1; // esi@1
  PgWinText *v2; // eax@1
  bool v3; // cl@1
  NiRefObjectVtbl *v4; // edi@2
  char *v5; // eax@3
  char *v6; // eax@4

  v1 = this;
  v2 = this->m_pkShowOnlineOnly;
  v3 = this->m_bShowOnlineOnly == 0;
  v1->m_bShowOnlineOnly = v3;
  if ( v2 )
  {
    v4 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    if ( v3 )
    {
      v5 = TextData::Get(0x28344C40u);
      v4[118].__vecDelDtor((NiRefObject *)v1->m_pkShowOnlineOnly, (unsigned int)v5);
      FriendWin::UpdateViewList(v1);
    }
    else
    {
      v6 = TextData::Get(0x708D957Fu);
      v4[118].__vecDelDtor((NiRefObject *)v1->m_pkShowOnlineOnly, (unsigned int)v6);
      FriendWin::UpdateViewList(v1);
    }
  }
}

//----- (004FDC20) --------------------------------------------------------
void __thiscall FriendWin::AddFriend(FriendWin *this, PROTO_FRIEND_INFO *pInfo, bool bListElem)
{
  FriendWin *v3; // esi@1
  int v4; // eax@3
  int v5; // ecx@3
  GameFrameWork *v6; // ebx@3
  int v7; // eax@3
  int v8; // ecx@3
  char *v9; // eax@3
  int v10; // eax@4
  int i; // edi@7
  char acName[21]; // [sp+Ch] [bp-1Ch]@3
  unsigned int v13; // [sp+24h] [bp-4h]@1
  int v14; // [sp+28h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  if ( CFriend::Add(&this->m_kFriend, pInfo) == 1 && !bListElem )
  {
    v4 = *(_DWORD *)&pInfo->charid.n5_name[0];
    v5 = *(_DWORD *)&pInfo->charid.n5_name[4];
    v6 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
    *(_DWORD *)&acName[8] = *(_DWORD *)&pInfo->charid.n5_name[8];
    *(_DWORD *)acName = v4;
    v7 = *(_DWORD *)&pInfo->charid.n5_name[12];
    *(_DWORD *)&acName[4] = v5;
    v8 = *(_DWORD *)&pInfo->charid.n5_name[16];
    *(_DWORD *)&acName[12] = v7;
    *(_DWORD *)&acName[16] = v8;
    acName[20] = 0;
    v9 = TextData::Get(0xB5ECC6ACu);
    GameFrameWork::VaAddSysMsg(v6, v9);
  }
  v10 = v3->m_iTabIndex;
  if ( v10 )
  {
    if ( v10 == 1 )
    {
      if ( CFriend::Del(&v3->m_kFindFriend, &pInfo->charid) )
      {
        FriendWin::ResetAddBtn(v3);
        SlideListWin::RemoveAllList(v3->m_pkFindWin);
        for ( i = 0; i < v3->m_kFindFriend.m_NumOfFriend; ++i )
          FriendWin::UpdateFindList(v3, i);
      }
    }
  }
  else
  {
    FriendWin::UpdateViewList(v3);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (004FDD10) --------------------------------------------------------
bool __thiscall FriendWin::DelFriend(FriendWin *this, Name5 charid)
{
  FriendWin *v2; // esi@1

  v2 = this;
  CFriend::Del(&this->m_kFriend, &charid);
  FriendWin::UpdateViewList(v2);
  return 1;
}

//----- (004FDD40) --------------------------------------------------------
bool __thiscall FriendWin::LoginFriend(FriendWin *this, Name5 charid)
{
  FriendWin *v2; // esi@1

  v2 = this;
  CFriend::Login(&this->m_kFriend, &charid);
  FriendWin::UpdateViewList(v2);
  return 1;
}

//----- (004FDD70) --------------------------------------------------------
bool __thiscall FriendWin::LogoutFriend(FriendWin *this, Name5 charid)
{
  FriendWin *v2; // esi@1

  v2 = this;
  CFriend::Logout(&this->m_kFriend, &charid);
  FriendWin::UpdateViewList(v2);
  return 1;
}

//----- (004FDDA0) --------------------------------------------------------
bool __thiscall FriendWin::ChangeMapFriend(FriendWin *this, Name5 charid, Name3 mapName)
{
  FriendWin *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1

  v3 = this;
  *(_QWORD *)v4 = *(_QWORD *)&charid;
  *(_QWORD *)&v4[8] = *(_QWORD *)&charid.n5_name[8];
  *(_DWORD *)&v4[16] = *(_DWORD *)&charid.n5_name[16];
  CFriend::MapChange(&this->m_kFriend, *(Name5 *)v4, &mapName);
  FriendWin::UpdateViewList(v3);
  return 1;
}

//----- (004FDDF0) --------------------------------------------------------
bool __thiscall FriendWin::PartyFriend(FriendWin *this, Name5 charid, bool bParty)
{
  FriendWin *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1

  v3 = this;
  *(_QWORD *)v4 = *(_QWORD *)&charid;
  *(_QWORD *)&v4[8] = *(_QWORD *)&charid.n5_name[8];
  *(_DWORD *)&v4[16] = *(_DWORD *)&charid.n5_name[16];
  CFriend::PartyChange(&this->m_kFriend, *(Name5 *)v4, bParty);
  FriendWin::UpdateViewList(v3);
  return 1;
}

//----- (004FDE40) --------------------------------------------------------
bool __thiscall FriendWin::LevelChange(FriendWin *this, Name5 charid, char Level)
{
  FriendWin *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1

  v3 = this;
  *(_QWORD *)v4 = *(_QWORD *)&charid;
  *(_QWORD *)&v4[8] = *(_QWORD *)&charid.n5_name[8];
  *(_DWORD *)&v4[16] = *(_DWORD *)&charid.n5_name[16];
  CFriend::LevelChange(&this->m_kFriend, *(Name5 *)v4, Level);
  FriendWin::UpdateViewList(v3);
  return 1;
}

//----- (004FDE90) --------------------------------------------------------
void __thiscall FriendWin::AddFindFriend(FriendWin *this, PROTO_FRIEND_INFO *pInfo, int nIndex)
{
  FriendWin *v3; // esi@1

  v3 = this;
  if ( nIndex >= 0 )
  {
    if ( CFriend::Add(&this->m_kFindFriend, pInfo) )
      FriendWin::UpdateFindList(v3, nIndex);
  }
}

//----- (004FDEC0) --------------------------------------------------------
void __thiscall FriendWin::OnListTab(FriendWin *this)
{
  FriendWin *v1; // esi@1
  PgWinBut *v2; // ecx@1
  SlideBar *v3; // ecx@1
  int v4; // edx@1
  int v5; // ebx@1
  int i; // edi@2
  signed int v7; // eax@9
  int v8; // ebx@10
  PgWin **v9; // edi@10
  signed int v10; // [sp-4h] [bp-18h]@5
  signed int v11; // [sp-4h] [bp-18h]@13
  int v12; // [sp+Ch] [bp-8h]@1
  signed int v13; // [sp+10h] [bp-4h]@1
  signed int v14; // [sp+10h] [bp-4h]@9

  v1 = this;
  FriendWin::ResetAddBtn(this);
  GameFrameWork::NcFriendPointReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  v2 = v1->m_pkListName;
  v1->m_iTabIndex = 0;
  ((void (__stdcall *)(signed int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkListNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v3 = v1->m_pkListBar;
  v4 = v1->m_iDefaultView;
  v1->m_pListWinTime = v1->m_pkListWin;
  v1->m_pkSlideBarEx = v3;
  v12 = v4;
  v13 = 0;
  v5 = (int)&v1->m_vecTitleType[0].baseclass_0._Mylast;
  do
  {
    for ( i = *(_DWORD *)(v5 - 4); i != *(_DWORD *)v5; i += 4 )
    {
      if ( !*(_DWORD *)i )
        break;
      v10 = v13 == v12 ? 1 : 0;
      (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 256))(v10);
    }
    v5 += 16;
    ++v13;
  }
  while ( v13 < 3 );
  v7 = 0;
  v14 = 0;
  do
  {
    v8 = v7;
    v9 = *(PgWin ***)&v1->m_vecTabType[v7].baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v9 != v1->m_vecTabType[v7].baseclass_0._Mylast )
    {
      do
      {
        if ( !*v9 )
          break;
        v11 = v7 ? 0 : 1;
        ((void (__stdcall *)(signed int))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v11);
        v7 = v14;
        ++v9;
      }
      while ( v9 != v1->m_vecTabType[4 * v8 / 0x10u].baseclass_0._Mylast );
    }
    ++v7;
    v14 = v7;
  }
  while ( v7 < 2 );
  FriendWin::UpdateViewList(v1);
  v1->m_pkListTab->m_bCheck = 1;
  v1->m_pkFindTab->m_bCheck = 0;
}

//----- (004FDFE0) --------------------------------------------------------
FriendPointTipMsg *__cdecl FriendPointTipMsg::CreateWin()
{
  void *v0; // eax@1
  void *v1; // esi@1
  PgWin *v2; // edi@8
  FriendPointTipMsg *v3; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x158u);
  v1 = v0;
  result.m_pObject = (PgWin *)v0;
  v5 = 0;
  if ( v0 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v0);
    *(_DWORD *)v1 = &FriendPointTipMsg::_vftable_;
    *((_DWORD *)v1 + 58) = &FriendPointTipMsg::_vftable_;
  }
  else
  {
    v1 = 0;
  }
  if ( v1 )
    InterlockedIncrement((volatile LONG *)v1 + 1);
  v5 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v1);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 540))(v1) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v1 + 356))(v1);
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = (FriendPointTipMsg *)v1;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v1);
    if ( result.m_pObject )
    {
      v2 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v2 )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
    }
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = 0;
  }
  return v3;
}
// 995490: using guessed type int (__stdcall *FriendPointTipMsg___vftable_)(int uiFlags);
// 9954AC: using guessed type int (__thiscall *FriendPointTipMsg___vftable_)(void *p, char);

//----- (004FE120) --------------------------------------------------------
void __thiscall FriendWin::OnCommand(FriendWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      FriendWin::OnWinClose(this);
      break;
    case 0xCu:
      GameFrameWork::OpenFriendAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xDu:
      FriendWin::OnAddInfoBtn(this);
      break;
    case 0xEu:
      FriendWin::OnShowAllFriend(this);
      break;
    case 0x10u:
      FriendWin::OnSlideBar(this);
      break;
    case 0x13u:
      FriendWin::OnSortByTitle01(this);
      break;
    case 0x14u:
      FriendWin::OnSortByTitle02(this);
      break;
    case 0x15u:
      FriendWin::OnSortByTitle03(this);
      break;
    case 0x16u:
      FriendWin::OnSortByTitle04(this);
      break;
    case 0x18u:
      FriendWin::OnLClick(this, lParam);
      break;
    case 0x17u:
      FriendWin::OnRClick(this, lParam);
      break;
    case 0x1Eu:
      FriendWin::OnClickRejectBtn(this);
      break;
    case 0x19u:
      FriendWin::OnChangeTab(this, TE_GUILD);
      break;
    case 0x1Au:
      FriendWin::OnChangeTab(this, TE_PARTYMATCH);
      break;
    case 0x1Bu:
      FriendWin::OnChangeTab(this, TE_WEDDING);
      break;
    case 0x1Cu:
      FriendWin::OnChangeTab(this, TE_HOLYPROMISE);
      break;
    case 0x1Du:
      FriendWin::OnChangeTab(this, TE_GUILDACADEMY);
      break;
    case 0x1Fu:
      FriendWin::OnHelpLink(this);
      break;
    case 0x20u:
      FriendWin::OnListTab(this);
      break;
    case 0x21u:
      FriendWin::OnFindTab(this);
      break;
    case 0x22u:
      FriendWin::OnFriendPointUse(this);
      break;
    case 0x23u:
      FriendWin::OnFriendPointHelp(this);
      break;
    case 0x24u:
      FriendWin::OnFriendFindAdd(this, lParam);
      break;
    case 0x25u:
      FriendWin::OnFriendInviterAdd(this);
      break;
    case 0x26u:
      FriendWin::OnInviterLClick(this, lParam);
      break;
    case 0x27u:
      FriendWin::OnInviterRClick(this, lParam);
      break;
    case 0x28u:
      FriendWin::OnSortByTitle05(this);
      break;
    case 0x29u:
      FriendWin::OnSortByTitle06(this);
      break;
    default:
      return;
  }
}

//----- (004FE2F0) --------------------------------------------------------
void __thiscall FriendWin::FriendWin(FriendWin *this)
{
  FriendWin *v1; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v2; // [sp-28h] [bp-3Ch]@1
  int v3; // [sp-18h] [bp-2Ch]@1
  signed int v4; // [sp-14h] [bp-28h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // [sp+0h] [bp-14h]@1
  FriendWin *v6; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = this;
  v6 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v7 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendWin::_vftable_;
  CFriend::CFriend(&v1->m_kFriend);
  CFriend::CFriend(&v1->m_kFindFriend);
  _eh_vector_constructor_iterator_(
    v1->m_vecTitleType,
    0x10u,
    3,
    (void (__thiscall *)(void *))CPartyFinder::CPartyFinder,
    (void (__thiscall *)(void *))__1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a);
  _eh_vector_constructor_iterator_(
    v1->m_vecTabType,
    0x10u,
    3,
    (void (__thiscall *)(void *))CPartyFinder::CPartyFinder,
    (void (__thiscall *)(void *))__1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a);
  v5 = &v2;
  v1->m_bShowOnlineOnly = 0;
  v1->m_nSortColumn = 0;
  v1->m_pkSlideBarEx = 0;
  v1->m_pkSlideBar = 0;
  v1->m_pListWinTime = 0;
  v1->m_pkInfoType = 0;
  *(_WORD *)&v1->m_bInviter = 0;
  v1->m_uiFriendPoint = 0;
  v1->m_iTabIndex = 0;
  v1->m_pkListTab = 0;
  v1->m_pkFindTab = 0;
  v1->m_pkFindWin = 0;
  v1->m_pkFindBar = 0;
  v1->m_pkListBar = 0;
  v1->m_pkListWin = 0;
  v1->m_pkInviterWin = 0;
  v1->m_pkInviterBtn = 0;
  v1->m_pkToolTip = 0;
  v1->m_iDefaultView = 0;
  v1->m_spFindPopupMenu = 0;
  v4 = 15;
  v3 = 0;
  LOBYTE(v7) = 4;
  v2.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2, "FriendUsePoint", 0xEu);
  v1->m_uiFriendUsePoint = CSingleDataMap::GetValue(&g_kSingleDataMap, v2);
  v1->m_pkAddBtn[0] = 0;
  v1->m_pkAddBtn[1] = 0;
  v1->m_pkAddBtn[2] = 0;
  v1->m_pkAddBtn[3] = 0;
  v1->m_pkAddBtn[4] = 0;
  v1->m_pkAddBtn[5] = 0;
  v1->m_pkAddBtn[6] = 0;
  v1->m_pkAddBtn[7] = 0;
  v1->m_pkAddBtn[8] = 0;
  v1->m_pkAddBtn[9] = 0;
  v1->m_pkAddBtn[10] = 0;
  v1->m_pkAddBtn[11] = 0;
  v1->m_pkAddBtn[12] = 0;
  v1->m_pkAddBtn[13] = 0;
  v1->m_pkAddBtn[14] = 0;
  v1->m_pkAddBtn[15] = 0;
  v1->m_pkAddBtn[16] = 0;
  v1->m_pkAddBtn[17] = 0;
  v1->m_pkAddBtn[18] = 0;
  v1->m_pkAddBtn[19] = 0;
  v1->m_pkAddBtn[20] = 0;
  v1->m_pkAddBtn[21] = 0;
  v1->m_pkAddBtn[22] = 0;
  v1->m_pkAddBtn[23] = 0;
  v1->m_pkAddBtn[24] = 0;
  v1->m_pkAddBtn[25] = 0;
  v1->m_pkAddBtn[26] = 0;
  v1->m_pkFriendPointTipMsg = 0;
  v1->m_pkShowOnlineOnly = 0;
  v1->m_spPopupMenu = 0;
  v1->m_bAllow = 1;
}
// 9956D0: using guessed type int (__stdcall *FriendWin___vftable_)(int uiFlags);
// 9956EC: using guessed type int (__thiscall *FriendWin___vftable_)(void *p, char);

//----- (004FE510) --------------------------------------------------------
FriendWin *__cdecl FriendWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  FriendWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x3AECu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    FriendWin::FriendWin((FriendWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (FriendWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (004FE640) --------------------------------------------------------
bool __thiscall FriendWin::Create(FriendWin *this, PgFrameWork *pkFrameWork)
{
  FriendWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@14
  PgFont *v13; // eax@17
  PgWinText *v14; // eax@17
  NiRefObjectVtbl *v15; // edx@17
  char *v16; // eax@17
  PgSprData *v17; // eax@19
  PgWinSpr *v18; // eax@19
  PgFont *v19; // eax@21
  PgWinText *v20; // eax@21
  NiRefObjectVtbl *v21; // edx@21
  char *v22; // eax@21
  PgFont *v23; // eax@21
  PgWinText *v24; // eax@21
  NiRefObjectVtbl *v25; // edx@21
  char *v26; // eax@21
  SLWCreateInfo::Item *v27; // eax@21
  void *v28; // eax@21
  PgSprData *v29; // eax@21
  SlideListWin *v30; // eax@21
  unsigned int v31; // eax@21
  PgSprData *v32; // eax@21
  SlideBar *v33; // eax@21
  unsigned int v34; // eax@21
  PgWinBut *v35; // eax@21
  NiPointer<PgSprData::PgHitTester> *v36; // edx@21
  unsigned int v37; // ecx@21
  void *v38; // edx@21
  PgFont *v39; // eax@21
  PgWinText *v40; // eax@21
  NiRefObjectVtbl *v41; // edx@21
  char *v42; // eax@21
  void *v43; // edx@21
  NiPointer<PgSprData::PgHitTester> *v44; // ecx@21
  void *v45; // eax@21
  PgFont *v46; // eax@21
  PgWinText *v47; // eax@21
  NiRefObjectVtbl *v48; // edx@21
  char *v49; // eax@21
  PgWinBut *v50; // eax@21
  NiPointer<PgSprData::PgHitTester> *v51; // edx@21
  unsigned int v52; // ecx@21
  void *v53; // edx@21
  PgFont *v54; // eax@21
  PgWinText *v55; // eax@21
  NiRefObjectVtbl *v56; // edx@21
  char *v57; // eax@21
  PgWinBut *v58; // eax@21
  NiPointer<PgSprData::PgHitTester> *v59; // edx@21
  unsigned int v60; // ecx@21
  void *v61; // edx@21
  PgFont *v62; // eax@21
  PgWinText *v63; // eax@21
  NiRefObjectVtbl *v64; // edx@21
  char *v65; // eax@21
  char *v66; // eax@21
  PgSprData::PgHitTester *v67; // eax@21
  void *v68; // edx@21
  PgFont *v69; // eax@21
  PgWinText *v70; // eax@21
  NiRefObjectVtbl *v71; // edx@21
  char *v72; // eax@21
  char *v73; // eax@21
  PgSprData::PgHitTester *v74; // eax@21
  void *v75; // edx@21
  PgFont *v76; // eax@21
  PgWinText *v77; // eax@21
  char *v78; // eax@21
  PgWinBut *v79; // eax@21
  NiPointer<PgSprData::PgHitTester> *v80; // edx@21
  unsigned int v81; // ecx@21
  void *v82; // edx@21
  PgFont *v83; // eax@21
  PgWinText *v84; // eax@21
  char *v85; // eax@21
  PgWinBut *v86; // eax@21
  void *v87; // ecx@21
  int v88; // eax@21
  void *v89; // edx@21
  PgFont *v90; // eax@21
  PgWinText *v91; // eax@21
  char *v92; // eax@21
  char *v93; // eax@21
  PgSprData *v94; // eax@21
  char *v95; // eax@21
  char *v96; // eax@21
  char *v97; // eax@21
  char *v98; // eax@21
  char *v99; // eax@21
  char *v100; // eax@21
  PgSprData::PgHitTester *v101; // eax@21
  void *v102; // edx@21
  PgFont *v103; // eax@21
  PgWinText *v104; // eax@21
  NiRefObjectVtbl *v105; // edx@21
  char *v106; // eax@21
  NiPointer<PgSprData::PgHitTester> *v107; // ecx@21
  void *v108; // eax@21
  PgFont *v109; // eax@21
  PgWinText *v110; // eax@21
  NiRefObjectVtbl *v111; // edx@21
  char *v112; // eax@21
  NiPointer<PgSprData::PgHitTester> *v113; // ecx@21
  void *v114; // eax@21
  PgFont *v115; // eax@21
  PgWinText *v116; // eax@21
  NiRefObjectVtbl *v117; // edx@21
  char *v118; // eax@21
  NiPointer<PgSprData::PgHitTester> *v119; // ecx@21
  void *v120; // eax@21
  PgFont *v121; // eax@21
  PgWinText *v122; // eax@21
  NiRefObjectVtbl *v123; // edx@21
  char *v124; // eax@21
  NiPointer<PgSprData::PgHitTester> *v125; // ecx@21
  void *v126; // eax@21
  PgFont *v127; // eax@21
  PgWinText *v128; // eax@21
  NiRefObjectVtbl *v129; // edx@21
  char *v130; // eax@21
  NiPointer<PgSprData::PgHitTester> *v131; // ecx@21
  void *v132; // eax@21
  PgFont *v133; // eax@21
  PgWinText *v134; // eax@21
  NiRefObjectVtbl *v135; // edx@21
  char *v136; // eax@21
  ColumnBut *v137; // eax@21
  void *v138; // edx@21
  int v139; // eax@21
  void *v140; // edx@21
  PgFont *v141; // eax@21
  PgWinText *v142; // eax@21
  NiRefObjectVtbl *v143; // edx@21
  char *v144; // eax@21
  ColumnBut *v145; // eax@21
  void *v146; // edx@21
  int v147; // eax@21
  void *v148; // edx@21
  PgFont *v149; // eax@21
  PgWinText *v150; // eax@21
  NiRefObjectVtbl *v151; // edx@21
  char *v152; // eax@21
  PgWinBut *v153; // eax@21
  NiRefObjectVtbl *v154; // edx@21
  PgSprData::PgHitTester *v155; // eax@21
  void *v156; // edx@21
  PgFont *v157; // eax@21
  PgWinText *v158; // eax@21
  NiRefObjectVtbl *v159; // edx@21
  char *v160; // eax@21
  PgWinBut *v161; // eax@21
  NiRefObjectVtbl *v162; // edx@21
  PgSprData::PgHitTester *v163; // eax@21
  void *v164; // edx@21
  PgFont *v165; // eax@21
  PgWinText *v166; // eax@21
  NiRefObjectVtbl *v167; // edx@21
  char *v168; // eax@21
  PgWinBut *v169; // eax@21
  void *v170; // edx@21
  int v171; // eax@21
  void *v172; // edx@21
  PgFont *v173; // eax@21
  PgWinText *v174; // eax@21
  NiRefObjectVtbl *v175; // edx@21
  char *v176; // eax@21
  char *v177; // eax@21
  char *v178; // eax@21
  SLWCreateInfo::Item *v179; // eax@21
  void *v180; // eax@21
  void *v181; // eax@21
  void *v182; // eax@21
  void *v183; // eax@21
  PgSprData *v184; // eax@21
  SlideListWin *v185; // eax@21
  SLWCreateInfo::Item *v186; // eax@21
  void *v187; // eax@21
  void *v188; // eax@21
  void *v189; // eax@21
  void *v190; // eax@21
  PgSprData *v191; // eax@21
  SlideListWin *v192; // eax@21
  char *v193; // eax@21
  PgSprData *v194; // eax@21
  SlideBar *v195; // eax@21
  NiPointer<PgSprData::PgHitTester> *v196; // ecx@21
  void *v197; // eax@21
  PgFont *v198; // eax@21
  PgWinText *v199; // eax@21
  NiRefObjectVtbl *v200; // edx@21
  char *v201; // eax@21
  PgWinBut *v202; // eax@21
  NiPointer<PgSprData::PgHitTester> *v203; // edx@21
  unsigned int v204; // ecx@21
  void *v205; // edx@21
  PgFont *v206; // eax@21
  PgWinText *v207; // eax@21
  NiRefObjectVtbl *v208; // edx@21
  char *v209; // eax@21
  PgWinBut *v210; // eax@21
  NiPointer<PgSprData::PgHitTester> *v211; // edx@21
  unsigned int v212; // ecx@21
  void *v213; // edx@21
  PgFont *v214; // eax@21
  PgWinText *v215; // eax@21
  NiRefObjectVtbl *v216; // edx@21
  char *v217; // eax@21
  PgWinBut *v218; // eax@21
  NiRefObjectVtbl *v219; // edx@21
  PgFont *v220; // eax@21
  PgWinText *v221; // eax@21
  char *v222; // eax@21
  char *v223; // eax@21
  PgWinBut *v224; // eax@22
  PgWinBut *v225; // eax@23
  int v226; // eax@23
  SlideListWin *v227; // ecx@23
  int v228; // eax@23
  void *(__thiscall *v229)(NiRefObject *, unsigned int); // edx@23
  PgSprData *v230; // eax@23
  PgWinSpr *v231; // eax@23
  char *v232; // eax@23
  NiSourceTexture *v233; // eax@23
  PopupMenuWin *v234; // eax@23
  char *v235; // eax@23
  PopupMenu *v236; // ebx@23
  char *v237; // eax@23
  PopupMenu *v238; // ebx@23
  char *v239; // eax@23
  PopupMenu *v240; // ebx@23
  NiSourceTexture *v241; // eax@23
  PopupMenuWin *v242; // eax@23
  char *v243; // eax@23
  PopupMenu *v244; // edi@23
  char *v245; // eax@23
  PopupMenu *v246; // edi@23
  FriendPointTipMsg *v247; // eax@23
  NiNode *v248; // esi@25
  const char *v249; // [sp+1ACh] [bp-210h]@12
  int *v250; // [sp+1B0h] [bp-20Ch]@12
  int *v251; // [sp+1B4h] [bp-208h]@12
  volatile LONG *v252; // [sp+1B8h] [bp-204h]@6
  NiSourceTexture *v253; // [sp+1B8h] [bp-204h]@12
  unsigned int v254; // [sp+1BCh] [bp-200h]@1
  SLWCreateInfo kCreateInfo; // [sp+1CCh] [bp-1F0h]@21
  unsigned int uiWidth; // [sp+1E8h] [bp-1D4h]@14
  unsigned int uiHeight; // [sp+1ECh] [bp-1D0h]@14
  int uiLeft; // [sp+1F0h] [bp-1CCh]@4
  int uiTop; // [sp+1F4h] [bp-1C8h]@4
  NiPointer<NiNode> spNode; // [sp+1F8h] [bp-1C4h]@1
  void *nPosY; // [sp+1FCh] [bp-1C0h]@21
  unsigned int i; // [sp+200h] [bp-1BCh]@17
  PgSprData *pkTextWin; // [sp+204h] [bp-1B8h]@17
  char v264; // [sp+208h] [bp-1B4h]@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Val; // [sp+224h] [bp-198h]@21
  char v266; // [sp+240h] [bp-17Ch]@21
  char v267; // [sp+25Ch] [bp-160h]@21
  char v268; // [sp+278h] [bp-144h]@21
  char v269; // [sp+294h] [bp-128h]@21
  char v270; // [sp+2B0h] [bp-10Ch]@21
  char v271; // [sp+2CCh] [bp-F0h]@21
  char v272; // [sp+2E8h] [bp-D4h]@21
  char v273; // [sp+304h] [bp-B8h]@21
  char v274; // [sp+320h] [bp-9Ch]@21
  char v275; // [sp+33Ch] [bp-80h]@21
  char v276; // [sp+358h] [bp-64h]@21
  char v277; // [sp+374h] [bp-48h]@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+390h] [bp-2Ch]@21
  unsigned int v279; // [sp+3ACh] [bp-10h]@1
  int v280; // [sp+3B8h] [bp-4h]@1
  int v281; // [sp+3BCh] [bp+0h]@1

  v279 = (unsigned int)&v281 ^ __security_cookie;
  v254 = (unsigned int)&v281 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v280 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\FriendList.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "FriendWin", 0) )
  {
    v6 = spNode.m_pObject;
    v280 = -1;
    if ( spNode.m_pObject )
    {
      v252 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_7;
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v253 = v10;
    v251 = &uiTop;
    v250 = &uiLeft;
    v249 = "Theme";
  }
  else
  {
    v253 = 0;
    v251 = &uiTop;
    v250 = &uiLeft;
    v249 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v249, v250, v251, v253);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_15:
    v6 = spNode.m_pObject;
    v280 = -1;
    if ( spNode.m_pObject )
    {
      v252 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_7:
      if ( !InterlockedDecrement(v252) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v13 = Font::Get(MAIN_MENU);
  v14 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v13,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (PgSprData *)v14;
  v15[122].__vecDelDtor((NiRefObject *)v14, 1u);
  ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
  i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
  v16 = TextData::Get(0xE3504941u);
  (*(void (__thiscall **)(PgSprData *, char *))i)(pkTextWin, v16);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x1Fu, 0, 0);
  }
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  i = (unsigned int)PgWinSpr::CreateWin(
                      uiLeft - v8,
                      uiTop - v9,
                      pkTextWin,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
    &i);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FindPlane", &uiLeft, &uiTop, 0);
  v18 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  i = (unsigned int)v18;
  if ( v18 )
  {
    ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      v18,
      0,
      v254);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 256))(0);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTabType[1],
      &i);
    PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, 0);
    v19 = Font::Get(TITLEBOLD);
    v20 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            uiWidth,
            uiHeight,
            v19,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v21 = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v20;
    v21[122].__vecDelDtor((NiRefObject *)v20, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v22 = TextData::Get(0xDCF3EDF4u);
    (*(void (__thiscall **)(PgSprData *, char *))i)(pkTextWin, v22);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    PgSprData::Create(&spNode.m_pObject->baseclass_0, "Category", &uiLeft, &uiTop, 0);
    v23 = Font::Get(TITLEBOLD);
    v24 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            uiWidth,
            uiHeight,
            v23,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v24;
    v25[122].__vecDelDtor((NiRefObject *)v24, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v26 = TextData3::Get(0x2E4A1B0Bu);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v26);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v280) = 1;
    v27 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v27->nItemType = 1;
    v27->pNode = spNode.m_pObject;
    nPosY = v27;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "ColumnBarNor");
    LOBYTE(v280) = 2;
    nPosY = (char *)nPosY + 72;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "ColumnBarClick");
    LOBYTE(v280) = 3;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "ColumnBarOver");
    LOBYTE(v280) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "Column01");
    LOBYTE(v280) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    v28 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v28 + 88) = 1;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "Column02");
    LOBYTE(v280) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "Column03");
    LOBYTE(v280) = 7;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "Column04");
    LOBYTE(v280) = 8;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "MoreInfoTitleColumn01");
    LOBYTE(v280) = 9;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &thisa,
      "MoreInfoTitleColumn02");
    LOBYTE(v280) = 10;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      &thisa);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
    v30 = SlideListWin::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            v29,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pkListWin = v30;
    v30->m_uiRClickMsg = 23;
    v2->m_pkListWin->m_uiLClickMsg = 24;
    SlideListWin::UpdateViewList(v2->m_pkListWin);
    v31 = (unsigned int)v2->m_pkListWin;
    v2->m_pListWinTime = (SlideListWin *)v31;
    i = v31;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
    v33 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            v32,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkListBar = v33;
    v33->m_uiClickMsg = 16;
    v2->m_pkListBar->m_eType = 1;
    v34 = (unsigned int)v2->m_pkListBar;
    v2->m_pkSlideBarEx = (SlideBar *)v34;
    i = v34;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
    v35 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u, 0, 0);
    v36 = pkTextWin->m_akHitTester.m_pBase;
    nPosY = v35;
    v37 = v36->m_pObject->m_uiHeight;
    v38 = (void *)v36->m_pObject->m_uiWidth;
    i = v37;
    pkTextWin = (PgSprData *)v38;
    v39 = Font::Get(MAIN_MENU);
    v40 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            i,
            v39,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v40;
    v41[122].__vecDelDtor((NiRefObject *)v40, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v42 = TextData::Get(0x4EA49695u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v42);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v43 = pkTextWin;
    v2->m_pkListName = (PgWinBut *)nPosY;
    v2->m_pkListNameText = (PgWinText *)v43;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x14u,
              0,
              0);
    v44 = pkTextWin->m_akHitTester.m_pBase;
    v45 = (void *)v44->m_pObject->m_uiWidth;
    i = v44->m_pObject->m_uiHeight;
    pkTextWin = (PgSprData *)v45;
    v46 = Font::Get(MAIN_MENU);
    v47 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            i,
            v46,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v48 = v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v47;
    v48[122].__vecDelDtor((NiRefObject *)v47, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v49 = TextData::Get(0x4A5F8BA3u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v49);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTitleType,
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTitleType,
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
    v50 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x15u, 0, 0);
    v51 = pkTextWin->m_akHitTester.m_pBase;
    nPosY = v50;
    v52 = v51->m_pObject->m_uiHeight;
    v53 = (void *)v51->m_pObject->m_uiWidth;
    i = v52;
    pkTextWin = (PgSprData *)v53;
    v54 = Font::Get(MAIN_MENU);
    v55 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            i,
            v54,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v55;
    v56[122].__vecDelDtor((NiRefObject *)v55, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v57 = TextData::Get(0x8BF7ED01u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v57);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTitleType,
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTitleType,
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
    v58 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x16u, 0, 0);
    v59 = pkTextWin->m_akHitTester.m_pBase;
    nPosY = v58;
    v60 = v59->m_pObject->m_uiHeight;
    v61 = (void *)v59->m_pObject->m_uiWidth;
    i = v60;
    pkTextWin = (PgSprData *)v61;
    v62 = Font::Get(MAIN_MENU);
    v63 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            i,
            v62,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v64 = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v63;
    v64[122].__vecDelDtor((NiRefObject *)v63, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v65 = TextData::Get(0x34329AB0u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v65);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTitleType,
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTitleType,
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddFrndNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "AddFrndClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "AddFrndOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0xCu,
              0,
              0);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    v66 = TextData2::Get(0x42C080Du);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v66);
    v67 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v68 = (void *)v67->m_uiWidth;
    i = v67->m_uiHeight;
    pkTextWin = (PgSprData *)v68;
    v69 = Font::Get(MAIN_MENU);
    v70 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            i,
            v69,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v71 = v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v70;
    v71[122].__vecDelDtor((NiRefObject *)v70, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v72 = TextData::Get(0x1B50368Cu);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v72);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTabType[1],
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTabType[1],
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddInfoBtnNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "AddInfoBtnClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "AddInfoBtnOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0xDu,
              0,
              0);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    v73 = TextData2::Get(0x45322451u);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v73);
    v74 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v75 = (void *)v74->m_uiWidth;
    i = v74->m_uiHeight;
    pkTextWin = (PgSprData *)v75;
    v76 = Font::Get(MAIN_MENU);
    v77 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            i,
            v76,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkInfoType = v77;
    v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v77,
      5u);
    i = (unsigned int)&v2->m_pkInfoType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v78 = TextData::Get(0xD8E95635u);
    (*(void (__thiscall **)(PgWinText *, char *))i)(v2->m_pkInfoType, v78);
    ((void (__stdcall *)(_DWORD))v2->m_pkInfoType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    i = (unsigned int)v2->m_pkInfoType;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ShowAllFrndNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ShowAllFrndClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ShowAllFrndOver");
    v79 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
    v80 = pkTextWin->m_akHitTester.m_pBase;
    nPosY = v79;
    v81 = v80->m_pObject->m_uiHeight;
    v82 = (void *)v80->m_pObject->m_uiWidth;
    i = v81;
    pkTextWin = (PgSprData *)v82;
    v83 = Font::Get(MAIN_MENU);
    v84 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            i,
            v83,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkShowOnlineOnly = v84;
    v84->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v84,
      5u);
    i = (unsigned int)&v2->m_pkShowOnlineOnly->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v85 = TextData::Get(0x39428786u);
    (*(void (__thiscall **)(PgWinText *, _DWORD))i)(v2->m_pkShowOnlineOnly, v85);
    ((void (__stdcall *)(_DWORD))v2->m_pkShowOnlineOnly->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    i = (unsigned int)v2->m_pkShowOnlineOnly;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
    v86 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x1Eu, 0, 0);
    v87 = pkTextWin;
    v2->m_pkRejectBtn = v86;
    v88 = **((_DWORD **)v87 + 9);
    v89 = *(void **)(v88 + 20);
    i = *(_DWORD *)(v88 + 24);
    nPosY = v89;
    v90 = Font::Get(0);
    v91 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)nPosY,
            i,
            v90,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkRejectText = v91;
    v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v91,
      5u);
    i = (unsigned int)&v2->m_pkRejectText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v92 = TextData2::Get(0x2D524575u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(v2->m_pkRejectText, v92);
    ((void (__stdcall *)(_DWORD))v2->m_pkRejectText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v93 = TextData2::Get(0x7AB19781u);
    PgWin::SetToolTipWinText(&v2->m_pkRejectBtn->baseclass_0.baseclass_0, v93);
    v2->m_pkRejectBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    i = (unsigned int)v2->m_pkRejectBtn;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    i = (unsigned int)v2->m_pkRejectText;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)v2->m_vecTabType,
      &i);
    v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Base", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v94, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FriendNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FriendClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FriendOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0xAu,
              0,
              0);
    v95 = TextData::Get(0xDCF3EDF4u);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v95);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MasterNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MasterClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MasterOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x1Cu,
              0,
              0);
    v96 = TextData::Get(0xF44C3A3Cu);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v96);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x19u,
              0,
              0);
    v97 = TextData::Get(0x9BEAF4F4u);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v97);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WeddingNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x1Bu,
              0,
              0);
    v98 = TextData::Get(0xC8F53F44u);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v98);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatchNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x1Au,
              0,
              0);
    v99 = TextData::Get(0x1C4B503Eu);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v99);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademyNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyOver");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x1Du,
              0,
              0);
    v100 = TextData::Get(0x253B184Cu);
    PgWin::SetToolTipWinText((PgWin *)nPosY, v100);
    *((_DWORD *)nPosY + 68) = g_pkToolTipWin;
    v101 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Friend", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v102 = (void *)v101->m_uiWidth;
    i = v101->m_uiHeight;
    nPosY = v102;
    v103 = Font::Get(TITLEBOLD);
    v104 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v103,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v105 = v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v104;
    v105[122].__vecDelDtor((NiRefObject *)v104, 1u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v106 = TextData::Get(0xDCF3EDF4u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v106);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v107 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HolyPromise", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v108 = (void *)v107->m_pObject->m_uiWidth;
    i = v107->m_pObject->m_uiHeight;
    nPosY = v108;
    v109 = Font::Get(TITLEBOLD);
    v110 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v109,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v111 = v110->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v110;
    v111[122].__vecDelDtor((NiRefObject *)v110, 1u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v112 = TextData::Get(0xF44C3A3Cu);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v112);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v113 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v114 = (void *)v113->m_pObject->m_uiWidth;
    i = v113->m_pObject->m_uiHeight;
    nPosY = v114;
    v115 = Font::Get(TITLEBOLD);
    v116 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v115,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v117 = v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v116;
    v117[122].__vecDelDtor((NiRefObject *)v116, 1u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v118 = TextData::Get(0x9BEAF4F4u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v118);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v119 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Wedding", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v120 = (void *)v119->m_pObject->m_uiWidth;
    i = v119->m_pObject->m_uiHeight;
    nPosY = v120;
    v121 = Font::Get(TITLEBOLD);
    v122 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v121,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v123 = v122->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v122;
    v123[122].__vecDelDtor((NiRefObject *)v122, 1u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v124 = TextData::Get(0xC8F53F44u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v124);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v125 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademy", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v126 = (void *)v125->m_pObject->m_uiWidth;
    i = v125->m_pObject->m_uiHeight;
    nPosY = v126;
    v127 = Font::Get(TITLEBOLD);
    v128 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v127,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v129 = v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v128;
    v129[122].__vecDelDtor((NiRefObject *)v128, 1u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v130 = TextData::Get(0x253B184Cu);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v130);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v131 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatch", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v132 = (void *)v131->m_pObject->m_uiWidth;
    i = v131->m_pObject->m_uiHeight;
    nPosY = v132;
    v133 = Font::Get(TITLEBOLD);
    v134 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v133,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v135 = v134->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v134;
    v135[122].__vecDelDtor((NiRefObject *)v134, 1u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v136 = TextData::Get(0x1C4B503Eu);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v136);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "List_Tab_Off", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "List_Tab_On");
    v137 = ColumnBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x20u, 0);
    v138 = pkTextWin;
    v2->m_pkListTab = v137;
    v137->m_bCheck = 1;
    v139 = **((_DWORD **)v138 + 9);
    v140 = *(void **)(v139 + 20);
    i = *(_DWORD *)(v139 + 24);
    nPosY = v140;
    v141 = Font::Get(MAIN_MENU);
    v142 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v141,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v143 = v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v142;
    v143[122].__vecDelDtor((NiRefObject *)v142, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v144 = TextData3::Get(0x73938387u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v144);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Find_Tab_Off", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Find_Tab_On");
    v145 = ColumnBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x21u, 0);
    v146 = pkTextWin;
    v2->m_pkFindTab = v145;
    v145->m_bCheck = 0;
    v147 = **((_DWORD **)v146 + 9);
    v148 = *(void **)(v147 + 20);
    i = *(_DWORD *)(v147 + 24);
    nPosY = v148;
    v149 = Font::Get(MAIN_MENU);
    v150 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             (unsigned int)nPosY,
             i,
             v149,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v151 = v150->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v150;
    v151[122].__vecDelDtor((NiRefObject *)v150, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v152 = TextData3::Get(0x738D7382u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v152);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MoreInfoTitle01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MoreInfoTitle01Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MoreInfoTitle01Over");
    v153 = PgWinBut::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x28u,
             0,
             0);
    v154 = v153->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    nPosY = v153;
    v154[64].__vecDelDtor((NiRefObject *)v153, 0);
    v155 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v156 = (void *)v155->m_uiWidth;
    i = v155->m_uiHeight;
    pkTextWin = (PgSprData *)v156;
    v157 = Font::Get(MAIN_MENU);
    v158 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9 + 1,
             (unsigned int)pkTextWin,
             i,
             v157,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v159 = v158->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v158;
    v159[122].__vecDelDtor((NiRefObject *)v158, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v160 = TextData::Get(0xDE033F4Du);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v160);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[1],
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[1],
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MoreInfoTitle02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MoreInfoTitle02Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MoreInfoTitle02Over");
    v161 = PgWinBut::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x29u,
             0,
             0);
    v162 = v161->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    nPosY = v161;
    v162[64].__vecDelDtor((NiRefObject *)v161, 0);
    v163 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v164 = (void *)v163->m_uiWidth;
    i = v163->m_uiHeight;
    pkTextWin = (PgSprData *)v164;
    v165 = Font::Get(MAIN_MENU);
    v166 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9 + 1,
             (unsigned int)pkTextWin,
             i,
             v165,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v167 = v166->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v166;
    v167[122].__vecDelDtor((NiRefObject *)v166, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v168 = TextData::Get(0xE7495037u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v168);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[1],
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[1],
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "UseBtnNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "UseBtnClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "UseBtnOver");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "UseBtnDis");
    v169 = PgWinBut::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x22u,
             0,
             0);
    v170 = pkTextWin;
    v2->m_pFriendPointUseBut = v169;
    v171 = **((_DWORD **)v170 + 9);
    v172 = *(void **)(v171 + 20);
    i = *(_DWORD *)(v171 + 24);
    nPosY = v172;
    v173 = Font::Get(MAIN_MENU);
    v174 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9 + 1,
             (unsigned int)nPosY,
             i,
             v173,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v175 = v174->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v174;
    v175[122].__vecDelDtor((NiRefObject *)v174, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v176 = TextData3::Get(0xC8E5EF29u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v176);
    v2->m_pFriendPointUseBut->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v177 = TextData3::Get(0xDAFD1A23u);
    v178 = fs(v177);
    PgWin::SetToolTipWinText(&v2->m_pFriendPointUseBut->baseclass_0.baseclass_0, v178);
    ((void (__stdcall *)(_DWORD))v2->m_pFriendPointUseBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FriendHelpNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FriendHelpClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FriendHelpOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x23u, 0, 0);
    SLWCreateInfo::Clear(&kCreateInfo);
    v179 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v179->nItemType = 1;
    v179->pNode = spNode.m_pObject;
    nPosY = v179;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &_Val,
      "FindColumnBarNor");
    LOBYTE(v280) = 11;
    nPosY = (char *)nPosY + 72;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      &_Val);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Val);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v277,
      "FindColumnBarClick");
    LOBYTE(v280) = 12;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v277);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v277);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v276,
      "FindColumnBarOver");
    LOBYTE(v280) = 13;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v276);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v276);
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v275,
      "FindColumn00");
    LOBYTE(v280) = 14;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v275);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v275);
    v180 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v180 + 88) = 1;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v271,
      "FindColumn01");
    LOBYTE(v280) = 15;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v271);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v271);
    v181 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v181 + 88) = 1;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v267,
      "FindColumn02");
    LOBYTE(v280) = 16;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v267);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v267);
    v182 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v182 + 88) = 1;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v269,
      "FindColumn03");
    LOBYTE(v280) = 17;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v269);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v269);
    v183 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v183 + 88) = 1;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v184 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FindPlane01", &uiLeft, &uiTop, 0);
    v185 = SlideListWin::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             v184,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             &kCreateInfo,
             0,
             0);
    v2->m_pkFindWin = v185;
    v185->m_uiLClickMsg = 24;
    v2->m_pkFindWin->m_uiRClickMsg = 23;
    SlideListWin::UpdateViewList(v2->m_pkFindWin);
    ((void (__stdcall *)(_DWORD))v2->m_pkFindWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    i = (unsigned int)v2->m_pkFindWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTabType[1],
      &i);
    SLWCreateInfo::Clear(&kCreateInfo);
    v186 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v186->nItemType = 1;
    v186->pNode = spNode.m_pObject;
    nPosY = v186;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v274,
      "InviteColumnBarNor");
    LOBYTE(v280) = 18;
    nPosY = (char *)nPosY + 72;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v274);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v274);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v272,
      "InviteColumnBarClick");
    LOBYTE(v280) = 19;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v272);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v272);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v270,
      "InviteColumnBarOver");
    LOBYTE(v280) = 20;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)nPosY,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v270);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v270);
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v268,
      "InviteColumn00");
    LOBYTE(v280) = 21;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v268);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v268);
    v187 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v187 + 88) = 1;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v266,
      "InviteColumn01");
    LOBYTE(v280) = 22;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v266);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v266);
    v188 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v188 + 88) = 1;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v264,
      "InviteColumn02");
    LOBYTE(v280) = 23;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v264);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v264);
    v189 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v189 + 88) = 1;
    nPosY = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)nPosY = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v273,
      "InviteColumn03");
    LOBYTE(v280) = 24;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)nPosY + 72),
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v273);
    LOBYTE(v280) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v273);
    v190 = nPosY;
    *((_DWORD *)nPosY + 1) = spNode.m_pObject;
    *((_BYTE *)v190 + 88) = 1;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v191 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvitePlane", &uiLeft, &uiTop, 0);
    v192 = SlideListWin::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             v191,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             &kCreateInfo,
             0,
             0);
    v2->m_pkInviterWin = v192;
    v192->m_uiLClickMsg = 38;
    v2->m_pkInviterWin->m_uiRClickMsg = 39;
    SlideListWin::UpdateViewList(v2->m_pkInviterWin);
    ((void (__stdcall *)(_DWORD))v2->m_pkInviterWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    SlideListWin::SetToolTipWin(v2->m_pkInviterWin, g_pkToolTipWin);
    v193 = TextData3::Get(0x8D969DD1u);
    SlideListWin::SetToolTipWinText(v2->m_pkInviterWin, 0, v193);
    i = (unsigned int)v2->m_pkInviterWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTabType[1],
      &i);
    v194 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
    v195 = SlideBar::CreateWin(
             spNode.m_pObject,
             "FindSlideBar",
             "FindSlideBar_UpBtn",
             "FindSlideBar_DnBtn",
             v194,
             0,
             &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkFindBar = v195;
    v195->m_uiClickMsg = 16;
    v2->m_pkFindBar->m_eType = 1;
    ((void (__stdcall *)(_DWORD))v2->m_pkFindBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    i = (unsigned int)v2->m_pkFindBar;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTabType[1],
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FindTitle00Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle00Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle00Over");
    nPosY = PgWinBut::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x13u,
              0,
              0);
    v196 = pkTextWin->m_akHitTester.m_pBase;
    v197 = (void *)v196->m_pObject->m_uiWidth;
    i = v196->m_pObject->m_uiHeight;
    pkTextWin = (PgSprData *)v197;
    v198 = Font::Get(MAIN_MENU);
    v199 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9 + 1,
             (unsigned int)pkTextWin,
             i,
             v198,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v200 = v199->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v199;
    v200[122].__vecDelDtor((NiRefObject *)v199, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v201 = TextData::Get(0x4EA49695u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v201);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)nPosY + 256))(0);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FindTitle01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle01Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle01Over");
    v202 = PgWinBut::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x14u,
             0,
             0);
    v203 = pkTextWin->m_akHitTester.m_pBase;
    nPosY = v202;
    v204 = v203->m_pObject->m_uiHeight;
    v205 = (void *)v203->m_pObject->m_uiWidth;
    i = v204;
    pkTextWin = (PgSprData *)v205;
    v206 = Font::Get(MAIN_MENU);
    v207 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9 + 1,
             (unsigned int)pkTextWin,
             i,
             v206,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v208 = v207->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v207;
    v208[122].__vecDelDtor((NiRefObject *)v207, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v209 = TextData::Get(0x96B28AA0u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v209);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)nPosY + 256))(0);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FindTitle02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle02Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle02Over");
    v210 = PgWinBut::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x15u,
             0,
             0);
    v211 = pkTextWin->m_akHitTester.m_pBase;
    nPosY = v210;
    v212 = v211->m_pObject->m_uiHeight;
    v213 = (void *)v211->m_pObject->m_uiWidth;
    i = v212;
    pkTextWin = (PgSprData *)v213;
    v214 = Font::Get(MAIN_MENU);
    v215 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9 + 1,
             (unsigned int)pkTextWin,
             i,
             v214,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v216 = v215->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v215;
    v216[122].__vecDelDtor((NiRefObject *)v215, 5u);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v217 = TextData::Get(0x98A49F99u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(pkTextWin, v217);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)nPosY + 256))(0);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[64].__vecDelDtor)(0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    i = (unsigned int)pkTextWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FindTitle03Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle03Click");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FindTitle03Over");
    v218 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v219 = v218->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    nPosY = v218;
    v219[64].__vecDelDtor((NiRefObject *)v218, 0);
    i = (unsigned int)nPosY;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Frind_Point_Text", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v220 = Font::Get(MAIN_MENU);
    v221 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             uiWidth,
             uiHeight,
             v220,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkFriendPointText = v221;
    v221->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v221,
      5u);
    i = (unsigned int)&v2->m_pkFriendPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v222 = TextData3::Get(0x9BE4C2CDu);
    v223 = fs(v222);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(v2->m_pkFriendPointText, v223);
    ((void (__stdcall *)(_DWORD))v2->m_pkFriendPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FirendAddNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FirendAddOver");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FirendAddClick");
    i = 0;
    nPosY = v2->m_pkAddBtn;
    do
    {
      v224 = PgWinBut::CreateWin(
               uiLeft - v8,
               uiTop - v9,
               pkTextWin,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0x24u,
               0,
               0);
      *(_DWORD *)nPosY = v224;
      v224->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v224,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)nPosY + 256))(0);
      (*(void (__stdcall **)(unsigned int))(**(_DWORD **)nPosY + 520))(i);
      nPosY = (char *)nPosY + 4;
      ++i;
    }
    while ( (signed int)i < 27 );
    v225 = PgWinBut::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x25u,
             0,
             0);
    v2->m_pkInviterBtn = v225;
    ((void (__thiscall *)(PgWinBut *))v225->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v225);
    ((void (__stdcall *)(_DWORD))v2->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v226 = SlideListWin::GetColumPosX(v2->m_pkInviterWin, 0, 3u);
    v227 = v2->m_pkInviterWin;
    i = v226 + 33;
    v228 = SlideListWin::GetColumPosY(v227, 0, 3u);
    v229 = v2->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor;
    nPosY = (void *)(v228 + 1);
    ((void (__stdcall *)(unsigned int))v229)(i);
    ((void (__stdcall *)(void *))v2->m_pkInviterBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(nPosY);
    v230 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ToolTip", &uiLeft, &uiTop, 0);
    v231 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v230, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkToolTip = v231;
    v231->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v232 = TextData3::Get(0x94A1E2CDu);
    PgWin::SetToolTipWinText(&v2->m_pkToolTip->baseclass_0, v232);
    i = (unsigned int)v2->m_pkToolTip;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecTitleType[2],
      &i);
    v233 = MenuTexMgr::GetTexture(1u);
    v234 = PopupMenuWin::CreateWin(v233, 4u, 4u, 0);
    v2->m_spPopupMenu = v234;
    ((void (__stdcall *)(IDirectMessenger *))v234->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spPopupMenu);
    v235 = TextData::Get(0x2B3D9AB4u);
    v236 = (PopupMenu *)PopupMenuText::CreateWin(v235, 0, 0, 0, 0, 0, 0);
    PopupMenu::SetClickEvent(v236, 20, 0);
    PopupMenuWin::AddMenu(v2->m_spPopupMenu, v236);
    v237 = TextData::Get(0xBEEF0012u);
    v238 = (PopupMenu *)PopupMenuText::CreateWin(v237, 0, 0, 0, 0, 0, 0);
    PopupMenu::SetClickEvent(v238, 21, 0);
    PopupMenuWin::AddMenu(v2->m_spPopupMenu, v238);
    v239 = TextData::Get(0x98E9FBECu);
    v240 = (PopupMenu *)PopupMenuText::CreateWin(v239, 0, 0, 0, 0, 0, 0);
    PopupMenu::SetClickEvent(v240, 18, 0);
    PopupMenuWin::AddMenu(v2->m_spPopupMenu, v240);
    PopupMenuWin::FinishMenu(v2->m_spPopupMenu, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v241 = MenuTexMgr::GetTexture(1u);
    v242 = PopupMenuWin::CreateWin(v241, 4u, 4u, 0);
    v2->m_spFindPopupMenu = v242;
    ((void (__stdcall *)(IDirectMessenger *))v242->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spFindPopupMenu);
    v243 = TextData::Get(0x2B3D9AB4u);
    v244 = (PopupMenu *)PopupMenuText::CreateWin(v243, 0, 0, 0, 0, 0, 0);
    PopupMenu::SetClickEvent(v244, 20, 0);
    PopupMenuWin::AddMenu(v2->m_spFindPopupMenu, v244);
    v245 = TextData::Get(0xBEEF0012u);
    v246 = (PopupMenu *)PopupMenuText::CreateWin(v245, 0, 0, 0, 0, 0, 0);
    PopupMenu::SetClickEvent(v246, 21, 0);
    PopupMenuWin::AddMenu(v2->m_spFindPopupMenu, v246);
    PopupMenuWin::FinishMenu(v2->m_spFindPopupMenu, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spFindPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v247 = FriendPointTipMsg::CreateWin();
    v2->m_pkFriendPointTipMsg = (PgWin *)v247;
    if ( !v247 )
    {
      LOBYTE(v280) = 0;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      goto LABEL_15;
    }
    v247->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v247,
      0);
    ((void (__thiscall *)(FriendWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.40000001,
      0.5);
    LOBYTE(v280) = 0;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    v248 = spNode.m_pObject;
    v280 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v248 )
      v248->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v248, 1u);
    result = 1;
  }
  else
  {
    v280 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00501E00) --------------------------------------------------------
void __thiscall PgTQueue<PgWinMgr::PgWinMsg>::Realloc(PgTQueue<PgWinMgr::PgWinMsg> *this, unsigned int uiNewSize)
{
  PgTQueue<PgWinMgr::PgWinMsg> *v2; // esi@1
  void *v3; // eax@1
  int v4; // edi@1
  unsigned int v5; // edx@1
  int v6; // ebx@3
  void *v7; // ecx@3
  int v8; // eax@4
  int v9; // edi@6
  int v10; // ecx@7
  int v11; // eax@8
  int v12; // edi@10
  void *v13; // ecx@10
  int v14; // eax@11
  void *v15; // ST00_4@12
  void *pNewBase; // [sp+Ch] [bp-8h]@1
  int i; // [sp+10h] [bp-4h]@3
  unsigned int ia; // [sp+10h] [bp-4h]@6
  unsigned int ib; // [sp+10h] [bp-4h]@10

  v2 = this;
  v3 = operator new__(16 * uiNewSize);
  v4 = v2->m_uiHead;
  v5 = 0;
  pNewBase = v3;
  if ( v4 < v2->m_uiTail )
  {
    ib = v2->m_uiHead;
    v12 = v4;
    v13 = v3;
    do
    {
      v14 = (int)&v2->m_pBase[v12];
      *(_DWORD *)v13 = v2->m_pBase[v12].m_pkWin;
      *((_DWORD *)v13 + 1) = *(_DWORD *)(v14 + 4);
      *((_DWORD *)v13 + 2) = *(_DWORD *)(v14 + 8);
      *((_DWORD *)v13 + 3) = *(_DWORD *)(v14 + 12);
      ++v5;
      v13 = (char *)v13 + 16;
      ++v12;
      ++ib;
    }
    while ( ib < v2->m_uiTail );
  }
  else
  {
    if ( v4 < v2->m_uiAlloced )
    {
      v6 = 16 * v4;
      i = 16 * v4;
      v7 = v3;
      do
      {
        v8 = (int)((char *)v2->m_pBase + v6);
        *(_DWORD *)v7 = *(_DWORD *)v8;
        *((_DWORD *)v7 + 1) = *(_DWORD *)(v8 + 4);
        *((_DWORD *)v7 + 2) = *(_DWORD *)(v8 + 8);
        *((_DWORD *)v7 + 3) = *(_DWORD *)(v8 + 12);
        ++v4;
        v6 = i + 16;
        ++v5;
        v7 = (char *)v7 + 16;
        i += 16;
      }
      while ( v4 < v2->m_uiAlloced );
      v3 = pNewBase;
    }
    v9 = 0;
    ia = 0;
    if ( v2->m_uiTail )
    {
      v10 = (int)((char *)v3 + 16 * v5);
      do
      {
        v11 = (int)&v2->m_pBase[v9];
        *(_DWORD *)v10 = v2->m_pBase[v9].m_pkWin;
        *(_DWORD *)(v10 + 4) = *(_DWORD *)(v11 + 4);
        *(_DWORD *)(v10 + 8) = *(_DWORD *)(v11 + 8);
        *(_DWORD *)(v10 + 12) = *(_DWORD *)(v11 + 12);
        ++v5;
        v10 += 16;
        ++v9;
        ++ia;
      }
      while ( ia < v2->m_uiTail );
    }
  }
  v2->m_uiTail = v5;
  v15 = v2->m_pBase;
  v2->m_uiHead = 0;
  v2->m_uiAlloced = uiNewSize;
  operator delete__(v15);
  v2->m_pBase = (PgWinMgr::PgWinMsg *)pNewBase;
}

//----- (00501F20) --------------------------------------------------------
void *__thiscall FriendAddWin::_vector_deleting_destructor_(FriendAddWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendAddWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendAddWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 995250: using guessed type int (__stdcall *FriendAddWin___vftable_)(int uiFlags);
// 99526C: using guessed type int (__thiscall *FriendAddWin___vftable_)(void *p, char);

//----- (00501F60) --------------------------------------------------------
void *__thiscall FriendPointTipMsg::_scalar_deleting_destructor_(FriendPointTipMsg *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FriendPointTipMsg::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FriendPointTipMsg::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 995490: using guessed type int (__stdcall *FriendPointTipMsg___vftable_)(int uiFlags);
// 9954AC: using guessed type int (__thiscall *FriendPointTipMsg___vftable_)(void *p, char);

//----- (00501FA0) --------------------------------------------------------
int __thiscall SlideListWin::GetColumPosX(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn)
{
  SlideListWin *v3; // esi@1
  signed int v4; // eax@1
  int v5; // ecx@2
  int v6; // edi@3
  int result; // eax@4
  int v8; // ebx@7
  int v9; // edi@7

  v3 = this;
  v4 = (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( uiIndex < v4
    && (v5 = *(_DWORD *)(*(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex),
        uiColumn < (*(_DWORD *)(v5 + 336) - *(_DWORD *)(v5 + 332)) >> 2)
    && (v6 = *(_DWORD *)(*(_DWORD *)(v5 + 332) + 4 * uiColumn)) != 0
    && (signed int)uiIndex < v4
    && v5 )
  {
    v8 = (*(int (**)(void))(*(_DWORD *)v5 + 164))();
    v9 = v8 + (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 164))(v6);
    result = v9
           + ((int (__thiscall *)(SlideListWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00502030) --------------------------------------------------------
int __thiscall SlideListWin::GetColumPosY(SlideListWin *this, unsigned int uiIndex, unsigned int uiColumn)
{
  SlideListWin *v3; // esi@1
  signed int v4; // eax@1
  int v5; // ecx@2
  int v6; // edi@3
  int result; // eax@4
  int v8; // ebx@7
  int v9; // edi@7

  v3 = this;
  v4 = (signed int)((char *)this->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( uiIndex < v4
    && (v5 = *(_DWORD *)(*(_DWORD *)&this->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex),
        uiColumn < (*(_DWORD *)(v5 + 336) - *(_DWORD *)(v5 + 332)) >> 2)
    && (v6 = *(_DWORD *)(*(_DWORD *)(v5 + 332) + 4 * uiColumn)) != 0
    && (signed int)uiIndex < v4
    && v5 )
  {
    v8 = (*(int (**)(void))(*(_DWORD *)v5 + 168))();
    v9 = v8 + (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 168))(v6);
    result = v9
           + ((int (__thiscall *)(SlideListWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005020C0) --------------------------------------------------------
void __thiscall PgTQueue<PgWinMgr::PgWinMsg>::Add(PgTQueue<PgWinMgr::PgWinMsg> *this, PgWinMgr::PgWinMsg element)
{
  PgTQueue<PgWinMgr::PgWinMsg> *v2; // esi@1
  unsigned int v3; // eax@1
  PgWinMgr::PgWinMsg *v4; // eax@2
  int v5; // eax@5

  v2 = this;
  v3 = this->m_uiHead;
  if ( v3 == -1 )
  {
    v4 = this->m_pBase;
    this->m_uiHead = 0;
    v4->m_pkWin = element.m_pkWin;
    v4->m_Msg = element.m_Msg;
    v4->m_wParam = element.m_wParam;
    v4->m_lParam = element.m_lParam;
    this->m_uiTail = 1;
  }
  else
  {
    if ( v3 == this->m_uiTail )
      PgTQueue<PgWinMgr::PgWinMsg>::Realloc(this, 2 * this->m_uiAlloced);
    v5 = (int)&v2->m_pBase[v2->m_uiTail];
    *(_DWORD *)v5 = element.m_pkWin;
    *(_DWORD *)(v5 + 4) = element.m_Msg;
    *(_DWORD *)(v5 + 8) = element.m_wParam;
    *(_DWORD *)(v5 + 12) = element.m_lParam;
    ++v2->m_uiTail;
  }
  if ( v2->m_uiTail == v2->m_uiAlloced )
    v2->m_uiTail = 0;
}

//----- (00502140) --------------------------------------------------------
void *__thiscall FriendWin::_scalar_deleting_destructor_(FriendWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  FriendWin::_FriendWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00502170) --------------------------------------------------------
void __thiscall FullMapWin::OnShowGrid(FullMapWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_pkGridSprWin;
  v2 = 22;
  if ( (unsigned __int8)((int (*)(void))this->m_pkGridSprWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
      v1 += 4;
      --v2;
    }
    while ( v2 );
  }
  else
  {
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(1);
      v1 += 4;
      --v2;
    }
    while ( v2 );
  }
}

//----- (005021D0) --------------------------------------------------------
bool __thiscall FullMapWin::GetWinPos(FullMapWin *this, float fCharWorldX, float fCharWorldY, float *rfXPos, float *rfYPos)
{
  bool result; // al@1

  *rfXPos = (0.02 * fCharWorldX / this->m_fFullMapScale - this->m_fMapOffsetX) * this->m_fMapScaleX;
  result = 1;
  *rfYPos = (512.0 - 0.02 * fCharWorldY / this->m_fFullMapScale - this->m_fMapOffsetY) * this->m_fMapScaleY;
  return result;
}

//----- (00502220) --------------------------------------------------------
void __thiscall FullMapWin::OnDestroy(FullMapWin *this)
{
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_pkWorldMapWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00502240) --------------------------------------------------------
WorldMapWin *__thiscall FullMapWin::GetWorldMap(FullMapWin *this)
{
  return this->m_pkWorldMapWin;
}

//----- (00502250) --------------------------------------------------------
void __thiscall FullMapWin::CloseWorldMap(FullMapWin *this)
{
  FullMapWin *v1; // esi@1

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkWorldMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkWorldMapWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00502280) --------------------------------------------------------
void __thiscall FullMapWin::OnShowIndexList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  char v2; // al@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@1
  int v4; // esi@2
  signed int v5; // edi@2
  int v6; // esi@7
  signed int v7; // edi@7

  v1 = this;
  v2 = ((int (*)(void))this->m_pkIndexPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  v3 = v1->m_pkIndexPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( v2 )
  {
    ((void (__stdcall *)(_DWORD))v3)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkIndexPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(signed int))v1->m_pkIndexBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkIndexBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_pkIndexBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkIndexBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v6 = (int)v1->m_pkCategoryText;
    v7 = 20;
    do
    {
      if ( *(_DWORD *)v6 )
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0);
      v6 += 4;
      --v7;
    }
    while ( v7 );
  }
  else
  {
    ((void (__stdcall *)(signed int))v3)(1);
    ((void (__stdcall *)(signed int))v1->m_pkIndexPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_pkIndexBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkIndexBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(signed int))v1->m_pkIndexBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkIndexBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v4 = (int)v1->m_pkCategoryText;
    v5 = 20;
    do
    {
      if ( *(_DWORD *)v4 )
        (*(void (__stdcall **)(signed int))(**(_DWORD **)v4 + 256))(1);
      v4 += 4;
      --v5;
    }
    while ( v5 );
  }
}

//----- (005023C0) --------------------------------------------------------
void __thiscall FullMapWin::ResetQuestNum(FullMapWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_pkQuestListNum;
  v2 = 40;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 - 40) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 - 40) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (00502420) --------------------------------------------------------
void __thiscall FullMapWin::SetMapScale(FullMapWin *this, float fScale)
{
  this->m_fFullMapScale = fScale;
}

//----- (00502430) --------------------------------------------------------
void __thiscall FullMapWin::SetMapViewRect(FullMapWin *this, unsigned int dwLeft, unsigned int dwTop, unsigned int dwRight, unsigned int dwBottom)
{
  this->m_kMapViewRect.left = dwLeft;
  this->m_kMapViewRect.top = dwTop;
  this->m_kMapViewRect.right = dwRight;
  this->m_kMapViewRect.bottom = dwBottom;
}

//----- (00502460) --------------------------------------------------------
bool __thiscall FullMapWin::AbbreviateText(FullMapWin *this, char *pResult, const char *pTarget, int nAbbreviationSize)
{
  const char *v4; // edi@1
  int v5; // eax@1
  int v6; // ebx@3
  char *v7; // esi@3
  int v8; // esi@8
  char v9; // al@9
  bool result; // al@10
  const char *v11; // eax@11
  const char v12; // cl@12

  v4 = pTarget;
  v5 = strlen(pTarget);
  if ( v5 && v5 >= nAbbreviationSize )
  {
    v6 = 0;
    v7 = pResult;
    while ( v6 < nAbbreviationSize )
    {
      if ( IsDBCSLeadByte(*v4) )
      {
        *v7 = *v4;
        v6 += 2;
        v7[1] = v4[1];
        v4 += 2;
        v7 += 2;
      }
      else
      {
        ++v6;
        *v7++ = *v4++;
      }
    }
    v8 = (int)(v7 - 1);
    do
      v9 = *(_BYTE *)(v8++ + 1);
    while ( v9 );
    *(_DWORD *)v8 = dword_996010;
    result = 1;
  }
  else
  {
    v11 = pTarget;
    do
    {
      v12 = *v11;
      v11[pResult - pTarget] = *v11;
      ++v11;
    }
    while ( v12 );
    result = 0;
  }
  return result;
}
// 996010: using guessed type int dword_996010;

//----- (00502500) --------------------------------------------------------
void __thiscall FullMapWin::OnHelpLink(FullMapWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MinimapFull");
}

//----- (00502530) --------------------------------------------------------
bool __thiscall FullMapWin::SearchKQ_MOB(FullMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto)
{
  FullMapWin *v2; // ebx@1
  NiTListItem<NpcMarkWin *> *v3; // esi@1
  NpcMarkWin *v4; // eax@2
  bool result; // al@5

  v2 = this;
  v3 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      if ( v4 )
      {
        if ( CharMgr::GetChar(&g_kCharMgr, v4->m_kCharHandle)->m_kCharShape.m_kMobID == pkProto->mobid )
          break;
      }
      if ( !v3 )
        goto LABEL_5;
    }
    v2->m_bTeleport = 0;
    result = 0;
  }
  else
  {
LABEL_5:
    result = 1;
  }
  return result;
}

//----- (00502590) --------------------------------------------------------
void __thiscall FullMapWin::UpdateMainCharPos(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  int v2; // eax@1
  float v3; // ST18_4@1
  float v4; // ST14_4@1
  MainCharMarkWin *v5; // eax@1
  float v6; // ecx@1
  MainCharMarkWin *v7; // esi@1
  float v8; // eax@1

  v1 = this;
  v2 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  v3 = (0.02 * *(float *)v2 / v1->m_fFullMapScale - v1->m_fMapOffsetX) * v1->m_fMapScaleX;
  v4 = (512.0 - 0.02 * *(float *)(v2 + 4) / v1->m_fFullMapScale - v1->m_fMapOffsetY) * v1->m_fMapScaleY;
  ((void (__stdcall *)(_DWORD))v1->m_pkMainCharMarkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v5 = v1->m_pkMainCharMarkWin;
  v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v3;
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v4;
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v6;
  ((void (__stdcall *)(_DWORD))v1->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v7 = v1->m_pkMainCharMarkSecondWin;
  v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
  v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v3;
  v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v4;
  v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v8;
}

//----- (00502690) --------------------------------------------------------
void __thiscall FullMapWin::UpdateMainCharDir(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  Mover *v2; // eax@1
  NiPoint3 kDir; // [sp+4h] [bp-34h]@2
  NiMatrix3 kMat; // [sp+10h] [bp-28h]@1
  unsigned int v5; // [sp+34h] [bp-4h]@1
  int v6; // [sp+38h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = this;
  ((void (__stdcall *)(NiMatrix3 *))g_pkMainChar->baseclass_0.vfptr[6].GetAbstateColor)(&kMat);
  v2 = g_pkMainChar->m_pkMover;
  if ( v2 )
    v2->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v2, (unsigned int)&kDir);
  else
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].__vecDelDtor)(&kDir);
  kDir.y = -kDir.y;
  kDir.z = -kDir.z;
  NpNs_RotateModelZToVector(&kDir, &kMat);
  ((void (__stdcall *)(NiMatrix3 *))v1->m_pkMainCharMarkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[74].__vecDelDtor)(&kMat);
  ((void (__stdcall *)(NiMatrix3 *))v1->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[74].__vecDelDtor)(&kMat);
}
// A85C00: using guessed type int __security_cookie;

//----- (00502740) --------------------------------------------------------
bool __thiscall FullMapWin::IsInNPC(FullMapWin *this, unsigned __int16 kCharHandle)
{
  NiTListItem<NpcMarkWin *> *v2; // eax@1
  NpcMarkWin *v3; // ecx@2
  bool result; // al@5

  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3->m_kCharHandle == kCharHandle )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00502780) --------------------------------------------------------
bool __thiscall FullMapWin::IsInParty(FullMapWin *this, PartyMemberInfo *pkInfo)
{
  NiTListItem<PartyMarkWin *> *v2; // esi@1
  PartyMarkWin *v3; // ecx@2
  bool result; // al@5

  v2 = this->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( PartyMarkWin::GetParty(v3) == pkInfo )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (005027C0) --------------------------------------------------------
PgSprData *__thiscall FullMapWin::GetMapIconSprData(FullMapWin *this, unsigned int kIndex)
{
  PgSprData *result; // eax@2

  switch ( kIndex )
  {
    case 0u:
      result = this->m_spNPCFurnitureSprData.m_pObject;
      break;
    case 1u:
      result = this->m_spNPCGuildSprData.m_pObject;
      break;
    case 2u:
      result = this->m_spNPCHelpSprData.m_pObject;
      break;
    case 3u:
      result = this->m_spNPCItemSprData.m_pObject;
      break;
    case 4u:
      result = this->m_spNPCKingdomSprData.m_pObject;
      break;
    case 5u:
    case 0x18u:
      result = this->m_spLinkSprData.m_pObject;
      break;
    case 6u:
      result = this->m_spNPCMineSprData.m_pObject;
      break;
    case 7u:
      result = this->m_spNPCQuestSprData.m_pObject;
      break;
    case 8u:
      result = this->m_spNPCSkillSprData.m_pObject;
      break;
    case 9u:
      result = this->m_spNPCSmithSprData.m_pObject;
      break;
    case 0xAu:
      result = this->m_spNPCSoulStoneSprData.m_pObject;
      break;
    case 0xBu:
      result = this->m_spNPCStoreSprData.m_pObject;
      break;
    case 0xCu:
      result = this->m_spNPCTemplarSprData.m_pObject;
      break;
    case 0xEu:
      result = this->m_spNPCWTitleSprData.m_pObject;
      break;
    case 0xFu:
      result = this->m_spMiniHouseSprData.m_pObject;
      break;
    case 0x12u:
      result = this->m_spFlagNormal.m_pObject;
      break;
    case 0x10u:
      result = this->m_spFlagRed.m_pObject;
      break;
    case 0x11u:
      result = this->m_spFlagBlue.m_pObject;
      break;
    case 0x15u:
      result = this->m_spWarpGray.m_pObject;
      break;
    case 0x13u:
      result = this->m_spWarpBlue.m_pObject;
      break;
    case 0x14u:
      result = this->m_spWarpRed.m_pObject;
      break;
    case 0x16u:
      result = 0;
      break;
    case 0x17u:
      result = this->m_spLinkTownSprData.m_pObject;
      break;
    case 0x19u:
      result = this->m_spMobChiefSprData.m_pObject;
      break;
    case 0x1Au:
      result = this->m_spMobDmgSprData.m_pObject;
      break;
    case 0x1Bu:
      result = this->m_spMobNormalSprData.m_pObject;
      break;
    case 0x1Cu:
      result = this->m_spBlueWoodSprData.m_pObject;
      break;
    case 0x1Du:
      result = this->m_spRedWoodSprData.m_pObject;
      break;
    case 0x1Eu:
      result = this->m_spCaptureFlagSprData.m_pObject;
      break;
    default:
      result = this->m_spNPCNormalSprData.m_pObject;
      break;
  }
  return result;
}

//----- (00502980) --------------------------------------------------------
void __thiscall FullMapWin::Remove_KQ_MOB(FullMapWin *this, bool b)
{
  NiTListItem<NpcMarkWin *> *v2; // eax@1
  NpcMarkWin *v3; // ebx@4
  Char *v4; // esi@5
  int v5; // edi@6
  int v6; // esi@6
  int v7; // esi@7
  int v8; // ecx@10
  FullMapWin *v9; // [sp+0h] [bp-4h]@1
  NiTListItem<NpcMarkWin *> *kIter; // [sp+Ch] [bp+8h]@4

  this->m_bTeleport = b;
  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v9 = this;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      kIter = v2->m_pkNext;
      if ( v3 )
      {
        v4 = CharMgr::GetChar(&g_kCharMgr, v3->m_kCharHandle);
        if ( v4 )
        {
          ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
          v5 = v4->m_kCharShape.m_kMobID;
          v6 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
          if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                                + 16))(
                                  ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                                  v5) )
          {
            if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) )
            {
              v8 = *(_DWORD *)(v6 + 196);
              if ( *(_DWORD *)(v8 + 4 * v5) )
                v7 = *(_DWORD *)(v8 + 4 * v5);
              else
                v7 = 0;
            }
            else
            {
              v7 = 0;
            }
          }
          else
          {
            v7 = 0;
          }
          if ( (unsigned __int8)((int (__thiscall *)(NpcMarkWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3)
            && *(_DWORD *)(v7 + 170) == 13 )
          {
            if ( v9->m_bTeleport )
              v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                (NiRefObject *)v3,
                0);
          }
        }
      }
      if ( !kIter )
        break;
      v2 = kIter;
    }
  }
}
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (00502A70) --------------------------------------------------------
void __thiscall FullMapWin::UpdateArea(FullMapWin *this, unsigned int uiIndex)
{
  unsigned int v2; // esi@1
  signed int v3; // ebx@1
  FullMapWin *v4; // edi@1
  NiTListItem<QuestHelperMarkWin *> *v5; // esi@5
  QuestHelperMarkWin *v6; // edi@6
  NiTListItem<MobAreaMarkWin *> *v7; // edi@16
  MobAreaMarkWin *v8; // esi@17
  unsigned __int16 v9; // ax@18
  unsigned __int16 v10; // ax@19
  NiTListItem<QuestHelperMarkWin *> *v11; // edi@24
  QuestHelperMarkWin *v12; // esi@25
  unsigned __int16 v13; // ax@26
  unsigned __int16 v14; // ax@27
  unsigned int v15; // [sp-4h] [bp-24h]@20
  unsigned int v16; // [sp-4h] [bp-24h]@28
  FullMapWin *v17; // [sp+Ch] [bp-14h]@1
  unsigned int uiListCnt; // [sp+10h] [bp-10h]@1
  unsigned int uiCnt; // [sp+14h] [bp-Ch]@5
  int Mob_ID; // [sp+18h] [bp-8h]@1
  unsigned int Quest_ID; // [sp+1Ch] [bp-4h]@1

  v2 = 0;
  v3 = 65535;
  v4 = this;
  v17 = this;
  Quest_ID = 65535;
  Mob_ID = 65535;
  uiListCnt = 0;
  if ( uiIndex )
  {
    do
    {
      SlideListWin::GetData(v4->m_pkQuestSlideListWin, v2, &Quest_ID);
      if ( Quest_ID > 0xFFFF )
        ++uiListCnt;
      ++v2;
    }
    while ( v2 < uiIndex );
  }
  v5 = v4->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  uiCnt = 0;
  if ( !v5 )
    goto LABEL_15;
  while ( 1 )
  {
    v6 = v5->m_element;
    v5 = v5->m_pkNext;
    if ( v6 )
      break;
LABEL_11:
    if ( !v5 )
      goto LABEL_14;
  }
  if ( v3 != QuestHelperMarkWin::GetQuestID(v6) )
    ++uiCnt;
  if ( uiCnt <= uiListCnt )
  {
    v3 = QuestHelperMarkWin::GetQuestID(v6);
    goto LABEL_11;
  }
  Quest_ID = QuestHelperMarkWin::GetQuestID(v6);
LABEL_14:
  v4 = v17;
  v3 = 65535;
LABEL_15:
  SlideListWin::GetData(v4->m_pkQuestSlideListWin, uiIndex, (unsigned int *)&Mob_ID);
  if ( Mob_ID != v3 )
  {
    v7 = v4->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    while ( v7 )
    {
      v8 = v7->m_element;
      v7 = v7->m_pkNext;
      if ( v8 )
      {
        v9 = MobAreaMarkWin::GetMobID(v8);
        v15 = v9 == Mob_ID && (v10 = MobAreaMarkWin::GetQuestID(v8), v10 == Quest_ID);
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v8,
          v15);
      }
    }
    v11 = v17->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    while ( v11 )
    {
      v12 = v11->m_element;
      v11 = v11->m_pkNext;
      if ( v12 )
      {
        v13 = QuestHelperMarkWin::GetMobID(v12);
        v16 = v13 == Mob_ID && (v14 = QuestHelperMarkWin::GetQuestID(v12), v14 == Quest_ID);
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v12,
          v16);
      }
    }
    v17->m_pkQuestSlideListWin->m_bCheckEnable = 0;
  }
}

//----- (00502BE0) --------------------------------------------------------
void __thiscall FullMapWin::UpdateArea(FullMapWin *this, unsigned __int16 Quest_ID, unsigned __int16 Mob_ID)
{
  FullMapWin *v3; // ebx@1
  NiTListItem<MobAreaMarkWin *> *v4; // edi@1
  MobAreaMarkWin *v5; // esi@2
  NiTListItem<QuestHelperMarkWin *> *v6; // edi@7
  QuestHelperMarkWin *v7; // esi@8
  unsigned int v8; // [sp-4h] [bp-10h]@4
  unsigned int v9; // [sp-4h] [bp-10h]@11

  v3 = this;
  v4 = this->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4->m_element;
    v4 = v4->m_pkNext;
    v8 = MobAreaMarkWin::GetMobID(v5) == Mob_ID && MobAreaMarkWin::GetQuestID(v5) == Quest_ID;
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v5,
      v8);
  }
  v6 = v3->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v6 )
  {
    v7 = v6->m_element;
    v6 = v6->m_pkNext;
    if ( v7 )
    {
      v9 = QuestHelperMarkWin::GetMobID(v7) == Mob_ID && QuestHelperMarkWin::GetQuestID(v7) == Quest_ID;
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v7,
        v9);
    }
  }
}

//----- (00502C80) --------------------------------------------------------
void __thiscall FullMapWin::UpdateSlideBarMapList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkMapSlideBar;
  if ( v2 )
  {
    v3 = v1->m_pkMapSlideListWin;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pkMapSlideListWin->m_nViewStartPos = v1->m_pkMapSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pkMapSlideListWin);
    }
  }
}

//----- (00502CD0) --------------------------------------------------------
bool __thiscall FullMapWin::IsSameMapName(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  Name3 *v2; // eax@1
  int v3; // eax@4
  Name3 result; // [sp+4h] [bp-Ch]@1

  v1 = this;
  v2 = World::GetMapName(&g_kWorld, &result);
  if ( *(_DWORD *)&v1->m_kSelectedMapName.n3_name[0] != *(_DWORD *)&v2->n3_name[0]
    || *(_DWORD *)&v1->m_kSelectedMapName.n3_name[4] != *(_DWORD *)&v2->n3_name[4]
    || *(_DWORD *)&v1->m_kSelectedMapName.n3_name[8] != *(_DWORD *)&v2->n3_name[8] )
    v3 = 0;
  else
    LOBYTE(v3) = 1;
  return v3;
}

//----- (00502D30) --------------------------------------------------------
void __thiscall FullMapWin::UpdateRaidPos(FullMapWin *this)
{
  NiTListItem<RaidMarkWin *> *v1; // eax@1
  RaidMarkWin *v2; // esi@4
  RaidMemberInfo *v3; // eax@5
  RaidMemberInfo *v4; // edi@5
  _BYTE v5[20]; // ST00_20@7
  Char *v6; // eax@7
  Char *v7; // ebx@7
  double v8; // st7@9
  float v9; // eax@12
  float v10; // ecx@12
  NiPoint3 kPos; // [sp+Ch] [bp-28h]@9
  float v12; // [sp+18h] [bp-1Ch]@12
  float v13; // [sp+1Ch] [bp-18h]@12
  FullMapWin *thisa; // [sp+24h] [bp-10h]@1
  NiTListItem<RaidMarkWin *> *kIter; // [sp+28h] [bp-Ch]@3
  float y; // [sp+2Ch] [bp-8h]@11
  float x; // [sp+30h] [bp-4h]@9

  v1 = this->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->m_element;
      kIter = v1->m_pkNext;
      if ( v2 )
      {
        v3 = RaidMarkWin::GetRaidMember(v2);
        v4 = v3;
        if ( !v3 )
          return;
        if ( v3->m_bShow
          && ((*(_DWORD *)v5 = *(_DWORD *)&v3->m_kCharID.n5_name[0],
               *(_QWORD *)&v5[4] = *(_QWORD *)&v3->m_kCharID.n5_name[4],
               *(_QWORD *)&v5[12] = *(_QWORD *)&v3->m_kCharID.n5_name[12],
               v6 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v5),
               (v7 = v6) == 0)
           || !Char::IsUpdate(v6) ? (x = v4->m_fX, v8 = v4->m_fY) : (((void (__thiscall *)(Char *, NiPoint3 *))v7->baseclass_0.vfptr[6].SetAbStateProperty)(
                                                                       v7,
                                                                       &kPos),
                                                                     x = kPos.x,
                                                                     v8 = kPos.y),
              y = v8,
              x = (0.02 * x / thisa->m_fFullMapScale - thisa->m_fMapOffsetX) * thisa->m_fMapScaleX,
              y = (512.0 - 0.02 * y / thisa->m_fFullMapScale - thisa->m_fMapOffsetY) * thisa->m_fMapScaleY,
              FullMapWin::IsSameMapName(thisa)) )
        {
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v2,
            1u);
          v12 = x;
          v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
          v13 = y;
          v10 = y;
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = x;
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v10;
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v9;
        }
        else
        {
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v2,
            0);
        }
      }
      if ( !kIter )
        break;
      v1 = kIter;
    }
  }
}

//----- (00502E90) --------------------------------------------------------
bool __thiscall FullMapWin::IsInRaid(FullMapWin *this, RaidMemberInfo *pkInfo)
{
  NiTListItem<RaidMarkWin *> *v2; // esi@1
  RaidMarkWin *v3; // ecx@2
  RaidMemberInfo *v4; // eax@3
  bool result; // al@10

  v2 = this->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        v4 = RaidMarkWin::GetRaidMember(v3);
        if ( v4 )
        {
          if ( *(_DWORD *)&v4->m_kCharID.n5_name[0] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[0]
            && *(_DWORD *)&v4->m_kCharID.n5_name[4] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[4]
            && *(_DWORD *)&v4->m_kCharID.n5_name[8] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[8]
            && *(_DWORD *)&v4->m_kCharID.n5_name[12] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[12]
            && *(_DWORD *)&v4->m_kCharID.n5_name[16] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[16] )
            break;
        }
      }
      if ( !v2 )
        goto LABEL_10;
    }
    result = 1;
  }
  else
  {
LABEL_10:
    result = 0;
  }
  return result;
}

//----- (00502F00) --------------------------------------------------------
void __thiscall FullMapWin::UpdateGTEnemyPos(FullMapWin *this)
{
  FullMapWin *v1; // edi@1
  NiTListItem<GTIScanMarkWin *> *v2; // ebx@1
  GTIScanMarkWin *v3; // esi@2
  ScanMemberInfo *v4; // eax@3
  float v5; // ST20_4@4
  float v6; // ST1C_4@4
  float v7; // eax@4

  v1 = this;
  v2 = this->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element;
    v2 = v2->m_pkNext;
    if ( v3 )
    {
      v4 = GTIScanMarkWin::GetEnemyPos(v3);
      if ( !v4 )
        return;
      v5 = ((double)v4->loc.x * 0.02 / v1->m_fFullMapScale - v1->m_fMapOffsetX) * v1->m_fMapScaleX;
      v6 = (512.0 - 0.02 * (double)v4->loc.y / v1->m_fFullMapScale - v1->m_fMapOffsetY) * v1->m_fMapScaleY;
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v3,
        1u);
      v7 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v5;
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v6;
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v7;
    }
  }
}

//----- (00502FF0) --------------------------------------------------------
void __thiscall FullMapWin::OnMapTransparency(FullMapWin *this)
{
  int v1; // edi@0
  FullMapWin *v2; // esi@1
  SlideBar *v3; // ecx@1
  int v4; // ST08_4@1
  unsigned int v5; // ebx@1
  int v6; // edi@1
  int v7; // ecx@2
  double v8; // st7@3
  float v9; // ST18_4@5
  float nCurPos; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  v3 = this->m_pkSlides;
  v4 = v3->m_nCurPos;
  nCurPos = (double)v4 / 100.0;
  SlideBar::SetCurPos(v3, v4);
  ((void (__stdcall *)(_DWORD, int))v2->m_pkInvisibleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(
    LODWORD(nCurPos),
    v1);
  ((void (__thiscall *)(FullMapWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2);
  v5 = 0;
  v6 = (signed int)((char *)v2->m_kVisibleControls.baseclass_0._Mylast
                  - *(_DWORD *)&v2->m_kVisibleControls.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v6 )
  {
    do
    {
      v7 = *(_DWORD *)&v2->m_kVisibleControls.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5;
      if ( *(_DWORD *)v7 )
      {
        v8 = nCurPos;
        if ( nCurPos < 0.5 )
          v8 = 0.60000002;
        v9 = v8;
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 276))(LODWORD(v9));
      }
      ++v5;
    }
    while ( v5 < v6 );
  }
  MachineOpt::ms_kUserLoginOption.FullMapAlpha = nCurPos;
}
// 502FF0: could not find valid save-restore pair for edi

//----- (005030E0) --------------------------------------------------------
void __thiscall FullMapWin::SetInvisibleWinAlpha(FullMapWin *this, const float fAlpha)
{
  FullMapWin *v2; // esi@1

  v2 = this;
  SlideBar::SetCurPos(this->m_pkSlides, (signed int)(fAlpha * 100.0));
  FullMapWin::OnMapTransparency(v2);
}

//----- (00503110) --------------------------------------------------------
bool __thiscall InvisibleWin::HitTest(InvisibleWin *this, int iSx, int iSy)
{
  InvisibleWin *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@1
  int v5; // eax@2
  int v6; // eax@4
  double v7; // st7@5
  char v8; // bl@5
  bool result; // al@8
  int v10; // [sp+4h] [bp-4h]@1

  v3 = this;
  v4 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor;
  v10 = iSy;
  iSy = iSx;
  ((void (__stdcall *)(int *, int *))v4)(&iSy, &v10);
  if ( iSy < 0
    || (v5 = ((int (__thiscall *)(InvisibleWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3),
        iSy >= v5)
    || v10 < 0
    || (v6 = ((int (__thiscall *)(InvisibleWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3),
        v10 >= v6) )
    goto LABEL_12;
  v7 = v3->m_pkMaterialProp->m_fAlpha;
  v8 = 1;
  BYTE3(iSy) = 1;
  if ( v7 >= 0.8999999761581421 )
    v8 = 0;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v3,
    v8 == 0);
  if ( v8 )
LABEL_12:
    result = 0;
  else
    result = BYTE3(iSy);
  return result;
}

//----- (005031B0) --------------------------------------------------------
void __thiscall FullMapWin::InitPos(FullMapWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate)
{
  FullMapWin *v5; // esi@1
  unsigned int v6; // edi@1
  unsigned int v7; // edi@1
  int v8; // eax@1

  v5 = this;
  PgWin::InitPos(&this->baseclass_0.baseclass_0.baseclass_0, uiScreenWidth, uiScreenHeight, fXPosRate, fYPosRate);
  v6 = (unsigned int)((int (*)(void))v5->m_pkIndexPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)() >> 1;
  v7 = ((unsigned int)((int (*)(void))v5->m_pkQuestListPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)() >> 1)
     + v6;
  v8 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5);
  v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
    (NiRefObject *)v5,
    v7 + v8);
}

//----- (00503220) --------------------------------------------------------
void __thiscall FullMapWin::RemoveNPC(FullMapWin *this, unsigned __int16 handle)
{
  unsigned __int16 v2; // si@1
  FullMapWin *v3; // edi@1
  NiTListItem<NpcMarkWin *> *v4; // eax@2
  NpcMarkWin *v5; // ecx@3
  int v6; // esi@8
  NiTListItem<NpcMarkWin *> *kCurrIter; // [sp+8h] [bp-4h]@3

  v2 = handle;
  v3 = this;
  if ( CharMgr::GetChar(&g_kCharMgr, handle) )
  {
    v4 = v3->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v4 )
    {
      while ( 1 )
      {
        v5 = v4->m_element;
        kCurrIter = v4;
        v4 = v4->m_pkNext;
        if ( v5 )
        {
          if ( v5->m_kCharHandle == v2 )
            break;
        }
        if ( !v4 )
          return;
      }
      PgWin::DetachChildWin(v3->m_pkFullMapViewWin, (NiPointer<PgWin> *)&handle, &v5->baseclass_0.baseclass_0);
      if ( handle )
      {
        v6 = handle;
        if ( !InterlockedDecrement((volatile LONG *)(handle + 4)) )
        {
          if ( v6 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
        }
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kNpcList,
        (void **)&kCurrIter);
    }
  }
}

//----- (005032C0) --------------------------------------------------------
void __thiscall FullMapWin::Add_KQ_MOB(FullMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto)
{
  FullMapWin *v2; // ebx@1
  void *v3; // eax@1
  void *v4; // esi@1
  int v5; // edi@3
  int v6; // esi@3
  int v7; // edx@5
  int v8; // eax@6
  NpcMarkWin *v9; // esi@10
  MobInfo *v10; // edi@11
  PgWin *v11; // eax@14
  NpcMarkWin *pkWin; // [sp+8h] [bp-8h]@10
  void *pkChar; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, pkProto->handle);
  v4 = v3;
  pkChar = v3;
  if ( v3 )
  {
    if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 32))(v3) )
    {
      v5 = *((_WORD *)v4 + 471);
      v6 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                              v5) )
      {
        if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) )
        {
          v7 = *(_DWORD *)(v6 + 196);
          if ( *(_DWORD *)(v7 + 4 * v5) )
          {
            v8 = *(_DWORD *)(v7 + 4 * v5);
            if ( v8 )
            {
              if ( *(_DWORD *)(v8 + 170) == 13 && !strcmp((const char *)(v8 + 2), "KQ_G_Boss") )
              {
                if ( !FullMapWin::SearchKQ_MOB(v2, pkProto) )
                  return;
                PgWin::DetachChildWin(
                  v2->m_pkFullMapViewWin,
                  (NiPointer<PgWin> *)&pkWin,
                  &v2->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
                NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkWin);
                PgWin::DetachChildWin(
                  v2->m_pkFullMapViewWin,
                  (NiPointer<PgWin> *)&pkWin,
                  &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
                NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkWin);
                v9 = NpcMarkWin::CreateWin(
                       0,
                       0,
                       v2->m_spNPCKingdomSprData.m_pObject,
                       &v2->m_kQuestStateImg,
                       v2->m_pkFullMapViewWin,
                       0);
                pkWin = v9;
                if ( v9 )
                {
                  v10 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(*((_WORD *)pkChar + 471), 1);
                  if ( v10 && MiniMapMarkWin::GetMarkWin(&v9->baseclass_0) )
                  {
                    if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)pkChar + 32))() )
                    {
                      v11 = (PgWin *)MiniMapMarkWin::GetMarkWin(&v9->baseclass_0);
                      PgWin::SetToolTipWinText(v11, v10->Name);
                      MiniMapMarkWin::GetMarkWin(&v9->baseclass_0)->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                    }
                  }
                  v9->m_kCharHandle = pkProto->handle;
                  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
                    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kNpcList,
                    (NiD3DXEffectParameter *const *)&pkWin);
                }
              }
              PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
              PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
            }
          }
        }
      }
    }
  }
}
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (005034B0) --------------------------------------------------------
void __thiscall FullMapWin::AddParty(FullMapWin *this, PartyMemberInfo *pkParty)
{
  FullMapWin *v2; // ebx@1
  PgWin *v3; // edi@2
  PgWin *v4; // edi@5
  MiniMapMarkWin *v5; // edi@9
  int v6; // edx@10
  int v7; // eax@10
  int v8; // edx@10
  int v9; // eax@10
  PgWin *v10; // eax@10
  PgWinSpr *v11; // eax@10
  int v12; // eax@10
  NiTListItem<PartyMarkWin *> *v13; // ecx@10
  NiPointer<PgWin> result; // [sp+Ch] [bp-20h]@1
  char acName[21]; // [sp+10h] [bp-1Ch]@10
  unsigned int v16; // [sp+28h] [bp-4h]@1
  int v17; // [sp+2Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  PgWin::DetachChildWin(this->m_pkFullMapViewWin, &result, &this->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  PgWin::DetachChildWin(v2->m_pkFullMapViewWin, &result, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
  v4 = result.m_pObject;
  if ( result.m_pObject
    && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = (MiniMapMarkWin *)PartyMarkWin::CreateWin(0, 0, v2->m_spPartySprData.m_pObject, v2->m_pkFullMapViewWin);
  if ( v5 )
  {
    v6 = *(_DWORD *)&pkParty->m_kCharID.n5_name[0];
    v7 = *(_DWORD *)&pkParty->m_kCharID.n5_name[4];
    *(_DWORD *)&acName[8] = *(_DWORD *)&pkParty->m_kCharID.n5_name[8];
    *(_DWORD *)acName = v6;
    v8 = *(_DWORD *)&pkParty->m_kCharID.n5_name[12];
    *(_DWORD *)&acName[4] = v7;
    v9 = *(_DWORD *)&pkParty->m_kCharID.n5_name[16];
    *(_DWORD *)&acName[12] = v8;
    *(_DWORD *)&acName[16] = v9;
    acName[20] = 0;
    v10 = (PgWin *)MiniMapMarkWin::GetMarkWin(v5);
    PgWin::SetToolTipWinText(v10, acName);
    result.m_pObject = g_pkToolTipWin;
    v11 = MiniMapMarkWin::GetMarkWin(v5);
    v11->baseclass_0.m_pkToolTipWin = result.m_pObject;
    PartyMarkWin::SetParty((PartyMarkWin *)v5, pkParty);
    v12 = (int)v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *)&v2->m_kPartyList);
    *(_DWORD *)(v12 + 8) = v5;
    *(_DWORD *)v12 = 0;
    *(_DWORD *)(v12 + 4) = v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v13 = v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v13 )
      v13->m_pkNext = (NiTListItem<PartyMarkWin *> *)v12;
    else
      v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PartyMarkWin *> *)v12;
    ++*(_DWORD *)&v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PartyMarkWin *> *)v12;
  }
  PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
  PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00503630) --------------------------------------------------------
void __thiscall FullMapWin::RemoveParty(FullMapWin *this, PartyMemberInfo *pkParty)
{
  FullMapWin *v2; // ebx@1
  NiTListItem<PartyMarkWin *> *v3; // esi@1
  PartyMarkWin *v4; // edi@2
  PartyMemberInfo *v5; // eax@3
  PartyMemberInfo *v6; // esi@7
  NiTListItem<PartyMarkWin *> *kCurrIter; // [sp+8h] [bp-4h]@2

  v2 = this;
  v3 = this->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      kCurrIter = v3;
      v3 = v3->m_pkNext;
      if ( v4 )
      {
        v5 = PartyMarkWin::GetParty(v4);
        if ( v5 == pkParty )
          break;
      }
      if ( !v3 )
        return;
    }
    PgWin::DetachChildWin(v2->m_pkFullMapViewWin, (NiPointer<PgWin> *)&pkParty, &v4->baseclass_0.baseclass_0);
    if ( pkParty )
    {
      v6 = pkParty;
      if ( !InterlockedDecrement((volatile LONG *)&pkParty->m_kCharID.n5_name[4]) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))&v6->m_kCharID.n5_name[0])(v6, 1);
      }
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v2->m_kPartyList,
      (void **)&kCurrIter);
  }
}

//----- (005036C0) --------------------------------------------------------
void __thiscall FullMapWin::ClearParty(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  NiTListItem<PartyMarkWin *> *v2; // edx@1
  NiTListItem<PartyMarkWin *> *v3; // eax@4
  NiTListItem<PartyMarkWin *> *v4; // ecx@4
  PgWin *v5; // edi@7
  PgWin *v6; // edi@9
  NiPointer<PgWin> result; // [sp+4h] [bp-4h]@8

  v1 = this;
  v2 = 0;
  if ( *(_DWORD *)&this->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    while ( 1 )
    {
      v3 = v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v4 = v3->m_pkNext;
      v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
      if ( v4 == v2 )
        v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v2;
      else
        v4->m_pkPrev = v2;
      v5 = (PgWin *)v3->m_element;
      v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *)&v1->m_kPartyList,
        v3);
      --*(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v5 )
      {
        PgWin::DetachChildWin(v1->m_pkFullMapViewWin, &result, v5);
        if ( result.m_pObject )
        {
          v6 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v6 )
              v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
          }
        }
      }
      if ( !*(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
        break;
      v2 = 0;
    }
  }
}

//----- (00503770) --------------------------------------------------------
void __thiscall FullMapWin::ClearWithOutMainChar(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  NiTListItem<NpcMarkWin *> *v2; // esi@1
  PgWin *v3; // eax@2
  PgWin *v4; // edi@4
  NiTListItem<NpcMarkWin *> *v5; // esi@8
  NiTListItem<NpcMarkWin *> *v6; // ST04_4@9
  NiPointer<PgWin> result; // [sp+Ch] [bp-4h]@3

  v1 = this;
  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = (PgWin *)v2->m_element;
    v2 = v2->m_pkNext;
    if ( v3 )
    {
      PgWin::DetachChildWin(v1->m_pkFullMapViewWin, &result, v3);
      if ( result.m_pObject )
      {
        v4 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v4 )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
      }
    }
  }
  v5 = v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5;
    v5 = v5->m_pkNext;
    v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *)&v1->m_kNpcList,
      v6);
  }
  *(_DWORD *)&v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
}

//----- (00503810) --------------------------------------------------------
void __thiscall FullMapWin::UpdateNPCPos(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  NiTListItem<NpcMarkWin *> *v2; // eax@1
  NpcMarkWin *v3; // esi@4
  Char *v4; // eax@5
  Char *v5; // edi@5
  int v6; // eax@6
  float v7; // eax@7
  float v8; // ST1C_4@7
  double v9; // st7@7
  float v10; // ST20_4@7
  float kPos; // [sp+4h] [bp-1Ch]@6
  float kPos_4; // [sp+8h] [bp-18h]@6
  NiTListItem<NpcMarkWin *> *kIter; // [sp+1Ch] [bp-4h]@4

  v1 = this;
  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      kIter = v2->m_pkNext;
      if ( v3 )
      {
        v4 = CharMgr::GetChar(&g_kCharMgr, v3->m_kCharHandle);
        v5 = v4;
        if ( v4 )
        {
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 16))(v4->m_kCharShape.m_kMobID);
          v6 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[6].Deaffect)(v5);
          LODWORD(kPos) = *(_DWORD *)v6;
          LODWORD(kPos_4) = *(_DWORD *)(v6 + 4);
          if ( FullMapWin::IsSameMapName(v1) )
          {
            v7 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
            v8 = (0.02 * kPos / v1->m_fFullMapScale - v1->m_fMapOffsetX) * v1->m_fMapScaleX;
            v9 = (512.0 - 0.02 * kPos_4 / v1->m_fFullMapScale - v1->m_fMapOffsetY) * v1->m_fMapScaleY;
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v8;
            v10 = v9;
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v10;
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v7;
          }
          else
          {
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)v3,
              0);
          }
        }
      }
      if ( !kIter )
        break;
      v2 = kIter;
    }
  }
}
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (00503920) --------------------------------------------------------
void __thiscall FullMapWin::UpdatePartyPos(FullMapWin *this)
{
  NiTListItem<PartyMarkWin *> *v1; // eax@1
  PartyMarkWin *v2; // esi@4
  PartyMemberInfo *v3; // eax@5
  PartyMemberInfo *v4; // edi@5
  _BYTE v5[20]; // ST00_20@7
  Char *v6; // eax@7
  Char *v7; // ebx@7
  double v8; // st7@9
  float v9; // eax@12
  float v10; // ecx@12
  NiPoint3 kPos; // [sp+Ch] [bp-28h]@9
  float v12; // [sp+18h] [bp-1Ch]@12
  float v13; // [sp+1Ch] [bp-18h]@12
  FullMapWin *thisa; // [sp+24h] [bp-10h]@1
  NiTListItem<PartyMarkWin *> *kIter; // [sp+28h] [bp-Ch]@3
  float y; // [sp+2Ch] [bp-8h]@11
  float x; // [sp+30h] [bp-4h]@9

  v1 = this->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->m_element;
      kIter = v1->m_pkNext;
      if ( v2 )
      {
        v3 = PartyMarkWin::GetParty(v2);
        v4 = v3;
        if ( !v3 )
          return;
        if ( v3->m_bShow
          && ((*(_DWORD *)v5 = *(_DWORD *)&v3->m_kCharID.n5_name[0],
               *(_QWORD *)&v5[4] = *(_QWORD *)&v3->m_kCharID.n5_name[4],
               *(_QWORD *)&v5[12] = *(_QWORD *)&v3->m_kCharID.n5_name[12],
               v6 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v5),
               (v7 = v6) == 0)
           || !Char::IsUpdate(v6) ? (x = v4->m_fX, v8 = v4->m_fY) : (((void (__thiscall *)(Char *, NiPoint3 *))v7->baseclass_0.vfptr[6].SetAbStateProperty)(
                                                                       v7,
                                                                       &kPos),
                                                                     x = kPos.x,
                                                                     v8 = kPos.y),
              y = v8,
              x = (0.02 * x / thisa->m_fFullMapScale - thisa->m_fMapOffsetX) * thisa->m_fMapScaleX,
              y = (512.0 - 0.02 * y / thisa->m_fFullMapScale - thisa->m_fMapOffsetY) * thisa->m_fMapScaleY,
              FullMapWin::IsSameMapName(thisa)) )
        {
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v2,
            1u);
          v12 = x;
          v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
          v13 = y;
          v10 = y;
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = x;
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v10;
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v9;
        }
        else
        {
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v2,
            0);
        }
      }
      if ( !kIter )
        break;
      v1 = kIter;
    }
  }
}

//----- (00503A80) --------------------------------------------------------
void __thiscall FullMapWin::RemoveMapMark(FullMapWin *this, unsigned int nGroup)
{
  FullMapWin *v2; // esi@1
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v3; // ebx@1
  PgWin *v4; // edi@1
  void *v5; // esi@3
  void *pkWin; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMapMarkMap;
  pkWin = 0;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMapMarkMap,
    nGroup,
    (NiVBSet **)&pkWin);
  v4 = (PgWin *)pkWin;
  if ( pkWin )
  {
    PgWin::DetachChildWin(v2->m_pkFullMapViewWin, (NiPointer<PgWin> *)&pkWin, (PgWin *)pkWin);
    if ( pkWin )
    {
      v5 = pkWin;
      if ( !InterlockedDecrement((volatile LONG *)pkWin + 1) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v4);
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(v3, nGroup);
  }
}

//----- (00503B00) --------------------------------------------------------
void __thiscall FullMapWin::RemoveAllMapMark(FullMapWin *this)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v1; // ebx@1
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@1
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > **v4; // edx@2
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > *v5; // eax@5
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > *v6; // esi@6
  PgWin *v7; // edi@7
  int v8; // eax@10
  unsigned int v9; // edx@10
  int v10; // eax@10
  int v11; // ecx@11
  PgWin *v12; // edi@16
  PgWin *pkWin; // [sp+8h] [bp-Ch]@7
  NiPointer<PgWin> result; // [sp+Ch] [bp-8h]@15
  FullMapWin *v15; // [sp+10h] [bp-4h]@1

  v1 = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kMapMarkMap;
  v15 = this;
  v2 = this->m_kMapMarkMap.baseclass_0.m_uiHashSize;
  v3 = 0;
  if ( v2 )
  {
    v4 = v1->m_ppkHashTable;
    while ( !*v4 )
    {
      ++v3;
      ++v4;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    v5 = v1->m_ppkHashTable[v3];
  }
  else
  {
LABEL_5:
    v5 = 0;
  }
  v6 = v5;
  while ( v6 )
  {
    v7 = (PgWin *)v6->m_val.m_pObject;
    pkWin = (PgWin *)v6->m_val.m_pObject;
    if ( v6->m_pkNext )
    {
      v6 = v6->m_pkNext;
    }
    else
    {
      v8 = v1->vfptr->KeyToHashIndex(v1, v6->m_key);
      v9 = v1->m_uiHashSize;
      v10 = v8 + 1;
      if ( v10 >= v9 )
      {
LABEL_14:
        v6 = 0;
      }
      else
      {
        v11 = (int)&v1->m_ppkHashTable[v10];
        while ( 1 )
        {
          v6 = *(NiTMapItem<unsigned long,NiPointer<PgWinBut> > **)v11;
          if ( *(_DWORD *)v11 )
            break;
          ++v10;
          v11 += 4;
          if ( v10 >= v9 )
            goto LABEL_14;
        }
      }
    }
    PgWin::DetachChildWin(v15->m_pkFullMapViewWin, &result, v7);
    if ( result.m_pObject )
    {
      v12 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v12 )
          v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, pkWin);
  }
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(v1);
}

//----- (00503BE0) --------------------------------------------------------
void __thiscall FullMapWin::UpdateMapMark(FullMapWin *this)
{
  char *v1; // edi@1
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@1
  int v4; // edx@2
  int v5; // eax@5
  int v6; // esi@6
  MapMarkWin *v7; // eax@7
  unsigned int v8; // ebx@7
  int v9; // eax@8
  unsigned int v10; // edx@8
  int v11; // eax@8
  int v12; // ecx@9
  FullMapWin *thisa; // [sp+14h] [bp-8h]@1
  MapMarkWin *pkWin; // [sp+18h] [bp-4h]@7

  v1 = (char *)&this->m_kMapMarkMap;
  thisa = this;
  v2 = this->m_kMapMarkMap.baseclass_0.m_uiHashSize;
  v3 = 0;
  if ( v2 )
  {
    v4 = *((_DWORD *)v1 + 2);
    while ( !*(_DWORD *)v4 )
    {
      ++v3;
      v4 += 4;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    v5 = *(_DWORD *)(*((_DWORD *)v1 + 2) + 4 * v3);
  }
  else
  {
LABEL_5:
    v5 = 0;
  }
  v6 = v5;
  while ( v6 )
  {
    v7 = *(MapMarkWin **)(v6 + 8);
    v8 = *(_DWORD *)(v6 + 4);
    v6 = *(_DWORD *)v6;
    pkWin = v7;
    if ( !v6 )
    {
      v9 = (*(int (__thiscall **)(char *, unsigned int))(*(_DWORD *)v1 + 4))(v1, v8);
      v10 = *((_DWORD *)v1 + 1);
      v11 = v9 + 1;
      if ( v11 >= v10 )
      {
LABEL_12:
        v6 = 0;
      }
      else
      {
        v12 = *((_DWORD *)v1 + 2) + 4 * v11;
        while ( 1 )
        {
          v6 = *(_DWORD *)v12;
          if ( *(_DWORD *)v12 )
            break;
          ++v11;
          v12 += 4;
          if ( v11 >= v10 )
            goto LABEL_12;
        }
      }
    }
    if ( pkWin )
    {
      if ( MapMarkWin::IsPassLifeTime(pkWin, Timer::ms_fCurTime) )
        FullMapWin::RemoveMapMark(thisa, v8);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00503C90) --------------------------------------------------------
void __thiscall FullMapWin::UpdateKQTeamMark(FullMapWin *this)
{
  signed int v1; // edi@0
  char *v2; // ebx@1
  unsigned int v3; // ecx@1
  unsigned int v4; // eax@1
  int v5; // edx@2
  int v6; // eax@5
  int v7; // esi@6
  int v8; // eax@8
  int v9; // edi@8
  int v10; // eax@9
  unsigned int v11; // edx@9
  int v12; // eax@9
  int v13; // ecx@10
  Char *v14; // eax@15
  int v15; // eax@16
  int v16; // eax@17
  signed int v17; // [sp-4h] [bp-30h]@7
  float fYPos; // [sp+20h] [bp-Ch]@16
  FullMapWin *thisa; // [sp+24h] [bp-8h]@1
  unsigned __int16 fXPos; // [sp+28h] [bp-4h]@8
  float fXPosa; // [sp+28h] [bp-4h]@16

  v2 = (char *)&this->m_KQTeamMarkWinMap;
  thisa = this;
  v3 = this->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize;
  v4 = 0;
  if ( v3 )
  {
    v5 = *((_DWORD *)v2 + 2);
    while ( !*(_DWORD *)v5 )
    {
      ++v4;
      v5 += 4;
      if ( v4 >= v3 )
        goto LABEL_5;
    }
    v6 = *(_DWORD *)(*((_DWORD *)v2 + 2) + 4 * v4);
  }
  else
  {
LABEL_5:
    v6 = 0;
  }
  v7 = v6;
  if ( v6 )
  {
    v17 = v1;
    do
    {
      v8 = *(_WORD *)(v7 + 4);
      v9 = *(_DWORD *)(v7 + 8);
      v7 = *(_DWORD *)v7;
      fXPos = v8;
      if ( !v7 )
      {
        v10 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v2 + 4))(v2, v8);
        v11 = *((_DWORD *)v2 + 1);
        v12 = v10 + 1;
        if ( v12 >= v11 )
        {
LABEL_13:
          v7 = 0;
        }
        else
        {
          v13 = *((_DWORD *)v2 + 2) + 4 * v12;
          while ( 1 )
          {
            v7 = *(_DWORD *)v13;
            if ( *(_DWORD *)v13 )
              break;
            ++v12;
            v13 += 4;
            if ( v12 >= v11 )
              goto LABEL_13;
          }
        }
      }
      if ( v9 )
      {
        v14 = CharMgr::GetChar(&g_kCharMgr, fXPos);
        if ( v14 )
        {
          v15 = ((int (__thiscall *)(Char *, signed int))v14->baseclass_0.vfptr[6].Deaffect)(v14, v17);
          fXPosa = (0.02 * *(float *)v15 / thisa->m_fFullMapScale - thisa->m_fMapOffsetX) * thisa->m_fMapScaleX;
          fYPos = (512.0 - 0.02 * *(float *)(v15 + 4) / thisa->m_fFullMapScale - thisa->m_fMapOffsetY)
                * thisa->m_fMapScaleY;
          if ( FullMapWin::IsSameMapName(thisa) )
          {
            v17 = 1;
            (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 256))(v9);
            v16 = *(_DWORD *)(v9 + 96);
            *(_DWORD *)(v9 + 88) = LODWORD(fXPosa);
            *(_DWORD *)(v9 + 92) = LODWORD(fYPos);
            *(_DWORD *)(v9 + 96) = v16;
          }
          else
          {
            v17 = 0;
            (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 256))(v9);
          }
        }
      }
    }
    while ( v7 );
  }
}
// 503C90: could not find valid save-restore pair for edi

//----- (00503E00) --------------------------------------------------------
void __thiscall FullMapWin::RemoveKQTeamMark(FullMapWin *this, unsigned __int16 kCharHandle)
{
  FullMapWin *v2; // esi@1
  NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *v3; // ebx@1
  PgWin *v4; // edi@1
  void *v5; // esi@3
  void *pkWin; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *)&this->m_KQTeamMarkWinMap;
  pkWin = 0;
  NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::GetAt(
    &this->m_KQTeamMarkWinMap.baseclass_0,
    kCharHandle,
    (KQTeamMarkWin **)&pkWin);
  v4 = (PgWin *)pkWin;
  if ( pkWin )
  {
    PgWin::DetachChildWin(v2->m_pkFullMapViewWin, (NiPointer<PgWin> *)&pkWin, (PgWin *)pkWin);
    if ( pkWin )
    {
      v5 = pkWin;
      if ( !InterlockedDecrement((volatile LONG *)pkWin + 1) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v4);
    NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::RemoveAt(v3, kCharHandle);
  }
}

//----- (00503E80) --------------------------------------------------------
void __thiscall FullMapWin::RemoveAllKQTeamMark(FullMapWin *this)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v1; // ebx@1
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@1
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > **v4; // edx@2
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > *v5; // eax@5
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > *v6; // esi@6
  PgWin *v7; // edi@7
  int v8; // eax@10
  unsigned int v9; // edx@10
  int v10; // eax@10
  int v11; // ecx@11
  PgWin *v12; // edi@16
  PgWin *pkWin; // [sp+8h] [bp-Ch]@7
  NiPointer<PgWin> result; // [sp+Ch] [bp-8h]@15
  FullMapWin *v15; // [sp+10h] [bp-4h]@1

  v1 = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_KQTeamMarkWinMap;
  v15 = this;
  v2 = this->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize;
  v3 = 0;
  if ( v2 )
  {
    v4 = v1->m_ppkHashTable;
    while ( !*v4 )
    {
      ++v3;
      ++v4;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    v5 = v1->m_ppkHashTable[v3];
  }
  else
  {
LABEL_5:
    v5 = 0;
  }
  v6 = v5;
  while ( v6 )
  {
    v7 = (PgWin *)v6->m_val.m_pObject;
    pkWin = (PgWin *)v6->m_val.m_pObject;
    if ( v6->m_pkNext )
    {
      v6 = v6->m_pkNext;
    }
    else
    {
      v8 = v1->vfptr->KeyToHashIndex(v1, LOWORD(v6->m_key));
      v9 = v1->m_uiHashSize;
      v10 = v8 + 1;
      if ( v10 >= v9 )
      {
LABEL_14:
        v6 = 0;
      }
      else
      {
        v11 = (int)&v1->m_ppkHashTable[v10];
        while ( 1 )
        {
          v6 = *(NiTMapItem<unsigned long,NiPointer<PgWinBut> > **)v11;
          if ( *(_DWORD *)v11 )
            break;
          ++v10;
          v11 += 4;
          if ( v10 >= v9 )
            goto LABEL_14;
        }
      }
    }
    PgWin::DetachChildWin(v15->m_pkFullMapViewWin, &result, v7);
    if ( result.m_pObject )
    {
      v12 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v12 )
          v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, pkWin);
  }
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(v1);
}

//----- (00503F60) --------------------------------------------------------
void __thiscall FullMapWin::OpenWorldMap(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  Name3 *v2; // eax@1
  MapViewInfo *v3; // edi@1
  Name3 result; // [sp+10h] [bp-Ch]@1

  v1 = this;
  v2 = World::GetMapName(&g_kWorld, &result);
  v3 = MapViewInfoTab::GetByMapName(v2);
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_pkWorldMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  if ( v3->WorldMapView )
    PgWinMgr::ShowWinAtAbsoluteNear(&Pgg_kWinMgr, &v1->m_pkWorldMapWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00503FD0) --------------------------------------------------------
void __thiscall FullMapWin::ResetQuestHelper(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  NiTListItem<PgWinSpr *> *i; // edx@1
  NiTListItem<PgWinSpr *> *v3; // eax@2
  NiTListItem<PgWinSpr *> *v4; // ecx@2
  PgWin *v5; // edi@5
  PgWin *v6; // edi@7
  NiTListItem<QuestHelperMarkWin *> *v7; // eax@12
  NiTListItem<QuestHelperMarkWin *> *v8; // ecx@12
  PgWin *v9; // edi@15
  PgWin *v10; // edi@17
  NiTListItem<MobAreaMarkWin *> *v11; // eax@24
  NiTListItem<MobAreaMarkWin *> *v12; // ecx@24
  PgWin *v13; // edi@27
  PgWin *v14; // edi@29
  NiPointer<PgWin> result; // [sp+Ch] [bp-4h]@6

  v1 = this;
  for ( i = 0;
        *(_DWORD *)&v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        i = 0 )
  {
    v3 = v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v4 = v3->m_pkNext;
    v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
    if ( v4 == i )
      v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = i;
    else
      v4->m_pkPrev = i;
    v5 = (PgWin *)v3->m_element;
    v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *)&v1->m_kQuestNumList,
      v3);
    --*(_DWORD *)&v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( v5 )
    {
      PgWin::DetachChildWin(v1->m_pkFullMapViewWin, &result, v5);
      if ( result.m_pObject )
      {
        v6 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v6 )
            v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
      }
    }
  }
  if ( *(NiTListItem<PgWinSpr *> **)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] != i )
  {
    do
    {
      v7 = v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v8 = v7->m_pkNext;
      v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v7->m_pkNext;
      if ( (NiTListItem<PgWinSpr *> *)v8 == i )
        v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<QuestHelperMarkWin *> *)i;
      else
        v8->m_pkPrev = (NiTListItem<QuestHelperMarkWin *> *)i;
      v9 = (PgWin *)v7->m_element;
      v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *)&v1->m_kQuestBallList,
        v7);
      --*(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v9 )
      {
        PgWin::DetachChildWin(v1->m_pkFullMapViewWin, &result, v9);
        if ( result.m_pObject )
        {
          v10 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v10 )
              v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                (NiRefObject *)v10,
                1u);
          }
        }
      }
      i = 0;
    }
    while ( *(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] );
  }
  if ( *(NiTListItem<PgWinSpr *> **)&v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] != i )
  {
    while ( 1 )
    {
      v11 = v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v12 = v11->m_pkNext;
      v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v11->m_pkNext;
      if ( (NiTListItem<PgWinSpr *> *)v12 == i )
        v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<MobAreaMarkWin *> *)i;
      else
        v12->m_pkPrev = (NiTListItem<MobAreaMarkWin *> *)i;
      v13 = (PgWin *)v11->m_element;
      v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *)&v1->m_kMobAreaList,
        v11);
      --*(_DWORD *)&v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v13 )
      {
        PgWin::DetachChildWin(v1->m_pkFullMapViewWin, &result, v13);
        if ( result.m_pObject )
        {
          v14 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v14 )
              v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                (NiRefObject *)v14,
                1u);
          }
        }
      }
      if ( !*(_DWORD *)&v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
        break;
      i = 0;
    }
  }
}

//----- (005041A0) --------------------------------------------------------
void __thiscall FullMapWin::AddMapList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  unsigned int v2; // ebx@2
  unsigned int v3; // edi@4
  void *v4; // eax@5
  MapInfo *v5; // ebx@6
  int v6; // edi@6
  signed int v7; // [sp+4h] [bp-8h]@2
  unsigned int _i; // [sp+8h] [bp-4h]@4

  v1 = this;
  if ( ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal() )
  {
    v2 = 1;
    v7 = 1;
    do
    {
      if ( v2 > ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal() )
        break;
      v3 = 0;
      _i = 0;
      if ( ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal() )
      {
        do
        {
          v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 4), v3);
          if ( v2 == *((_BYTE *)v4 + 211) )
          {
            v5 = MapInfoTab::GetByMapName((Name3 *)((char *)v4 + 2));
            v6 = SlideListWin::AddText(v1->m_pkMapSlideListWin, v5->Name);
            SlideListWin::SetText(v1->m_pkMapSlideListWin, v6, 0, v5->Name);
            SlideListWin::SetFontColor(v1->m_pkMapSlideListWin, v6, 255, 255, 255);
            SlideListWin::SetData(v1->m_pkMapSlideListWin, v6, v5->ID);
            ++v1->m_uiMapListTotalCnt;
            v2 = v7;
            v3 = _i;
          }
          ++v3;
          _i = v3;
        }
        while ( v3 < ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal() );
      }
      ++v2;
      v7 = v2;
    }
    while ( v2 - 1 < ITableBase<MapViewInfo_MapViewInfoTab>::GetTotal() );
  }
}
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (00504290) --------------------------------------------------------
void __thiscall FullMapWin::OnSlideBarMapList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkMapSlideBar;
  if ( v2 )
  {
    v3 = v1->m_pkMapSlideListWin;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pkMapSlideListWin->m_nViewStartPos = v1->m_pkMapSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pkMapSlideListWin);
    }
  }
}

//----- (005042E0) --------------------------------------------------------
void __thiscall FullMapWin::UpdateQuestNum(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  SlideListWin *v2; // ecx@2
  int v3; // eax@2
  unsigned int v4; // edi@2
  int v5; // ebx@3
  int v6; // eax@3
  SlideListWin *v7; // ecx@3
  int v8; // edi@5
  int v9; // eax@7
  unsigned int dwNumCnt; // [sp+4h] [bp-Ch]@3
  unsigned int i; // [sp+8h] [bp-8h]@2
  int nPosY; // [sp+Ch] [bp-4h]@3

  v1 = this;
  FullMapWin::ResetQuestNum(this);
  if ( *(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v2 = v1->m_pkQuestSlideListWin;
    v3 = (int)((char *)v2->m_vecButList.baseclass_0._Mylast
             - *(_DWORD *)&v2->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]);
    v4 = 0;
    i = 0;
    if ( (v3 & 0xFFFFFFFC) > 0 )
    {
      do
      {
        v5 = SlideListWin::GetColumPosX(v2, v4, 0);
        v6 = SlideListWin::GetColumPosY(v1->m_pkQuestSlideListWin, v4, 0);
        v7 = v1->m_pkQuestSlideListWin;
        nPosY = v6;
        if ( SlideListWin::GetData(v7, v4 + v7->m_nViewStartPos, &dwNumCnt) && dwNumCnt >= 0xFFFF )
        {
          v8 = dwNumCnt - 65535;
          if ( dwNumCnt - 65535 >= *(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
            return;
          ((void (__stdcall *)(signed int))v1->m_pkQuestListNumBall[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          ((void (__stdcall *)(int))v1->m_pkQuestListNumBall[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
          ((void (__stdcall *)(int))v1->m_pkQuestListNumBall[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(nPosY - 5);
          ((void (__stdcall *)(signed int))v1->m_pkQuestListNum[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          ((void (__stdcall *)(int))v1->m_pkQuestListNum[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5 + 6);
          ((void (__stdcall *)(int))v1->m_pkQuestListNum[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(nPosY);
          v4 = i;
        }
        v2 = v1->m_pkQuestSlideListWin;
        ++v4;
        v9 = (signed int)((char *)v2->m_vecButList.baseclass_0._Mylast
                        - *(_DWORD *)&v2->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
        i = v4;
      }
      while ( (signed int)v4 < v9 );
    }
  }
}

//----- (00504420) --------------------------------------------------------
void __thiscall FullMapWin::CenterPlaceSelectedMap(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  unsigned int v2; // edi@1
  SlideListWin *v3; // ecx@2
  int v4; // [sp-4h] [bp-10h]@3
  int dwMapID; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = 0;
  if ( this->m_uiMapListTotalCnt )
  {
    do
    {
      SlideListWin::GetData(v1->m_pkMapSlideListWin, v2, (unsigned int *)&dwMapID);
      v3 = v1->m_pkMapSlideListWin;
      if ( dwMapID == v1->m_kSelectedMapID )
      {
        SlideBar::SetCurPos(
          v1->m_pkMapSlideBar,
          v2
        - ((signed int)((char *)v3->m_vecButList.baseclass_0._Mylast
                      - *(_DWORD *)&v3->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
        / 2);
        v3 = v1->m_pkMapSlideListWin;
        v4 = 0;
      }
      else
      {
        v4 = 255;
      }
      SlideListWin::SetFontColor(v3, v2++, 255, 255, v4);
    }
    while ( v2 < v1->m_uiMapListTotalCnt );
  }
}

//----- (005044B0) --------------------------------------------------------
void __thiscall FullMapWin::AddRaidMember(FullMapWin *this, RaidMemberInfo *pkRaid)
{
  FullMapWin *v2; // ebx@1
  PgWin *v3; // edi@3
  PgWin *v4; // edi@6
  MiniMapMarkWin *v5; // edi@10
  int v6; // edx@11
  int v7; // eax@11
  int v8; // edx@11
  int v9; // eax@11
  PgWin *v10; // eax@11
  PgWinSpr *v11; // eax@11
  int v12; // eax@11
  NiTListItem<RaidMarkWin *> *v13; // ecx@11
  NiPointer<PgWin> result; // [sp+8h] [bp-20h]@2
  char acName[21]; // [sp+Ch] [bp-1Ch]@11
  unsigned int v16; // [sp+24h] [bp-4h]@1
  int v17; // [sp+28h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  if ( !FullMapWin::IsInRaid(this, pkRaid) )
  {
    PgWin::DetachChildWin(v2->m_pkFullMapViewWin, &result, &v2->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    PgWin::DetachChildWin(v2->m_pkFullMapViewWin, &result, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
    v4 = result.m_pObject;
    if ( result.m_pObject
      && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v5 = (MiniMapMarkWin *)RaidMarkWin::CreateWin(0, 0, v2->m_spPartySprData.m_pObject, v2->m_pkFullMapViewWin);
    if ( v5 )
    {
      v6 = *(_DWORD *)&pkRaid->m_kCharID.n5_name[0];
      v7 = *(_DWORD *)&pkRaid->m_kCharID.n5_name[4];
      *(_DWORD *)&acName[8] = *(_DWORD *)&pkRaid->m_kCharID.n5_name[8];
      *(_DWORD *)acName = v6;
      v8 = *(_DWORD *)&pkRaid->m_kCharID.n5_name[12];
      *(_DWORD *)&acName[4] = v7;
      v9 = *(_DWORD *)&pkRaid->m_kCharID.n5_name[16];
      *(_DWORD *)&acName[12] = v8;
      *(_DWORD *)&acName[16] = v9;
      acName[20] = 0;
      v10 = (PgWin *)MiniMapMarkWin::GetMarkWin(v5);
      PgWin::SetToolTipWinText(v10, acName);
      result.m_pObject = g_pkToolTipWin;
      v11 = MiniMapMarkWin::GetMarkWin(v5);
      v11->baseclass_0.m_pkToolTipWin = result.m_pObject;
      RaidMarkWin::SetRaidMember((RaidMarkWin *)v5, pkRaid);
      v12 = (int)v2->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *)&v2->m_kRaidList);
      *(_DWORD *)(v12 + 8) = v5;
      *(_DWORD *)v12 = 0;
      *(_DWORD *)(v12 + 4) = v2->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      v13 = v2->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      if ( v13 )
        v13->m_pkNext = (NiTListItem<RaidMarkWin *> *)v12;
      else
        v2->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<RaidMarkWin *> *)v12;
      ++*(_DWORD *)&v2->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v2->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<RaidMarkWin *> *)v12;
    }
    PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
    PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00504640) --------------------------------------------------------
void __thiscall FullMapWin::RemoveRaidMember(FullMapWin *this, RaidMemberInfo *pkRaid)
{
  NiTListItem<RaidMarkWin *> *v2; // esi@1
  RaidMemberInfo *v3; // ebx@2
  RaidMarkWin *v4; // edi@3
  RaidMemberInfo *v5; // eax@4
  RaidMemberInfo *v6; // esi@13
  NiTListItem<RaidMarkWin *> *kCurrIter; // [sp+4h] [bp-8h]@3
  FullMapWin *v8; // [sp+8h] [bp-4h]@1

  v2 = this->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v8 = this;
  if ( v2 )
  {
    v3 = pkRaid;
    while ( 1 )
    {
      v4 = v2->m_element;
      kCurrIter = v2;
      v2 = v2->m_pkNext;
      if ( v4 )
      {
        v5 = RaidMarkWin::GetRaidMember(v4);
        if ( v5 )
        {
          if ( *(_DWORD *)&v5->m_kCharID.n5_name[0] == *(_DWORD *)&v3->m_kCharID.n5_name[0]
            && *(_DWORD *)&v5->m_kCharID.n5_name[4] == *(_DWORD *)&v3->m_kCharID.n5_name[4]
            && *(_DWORD *)&v5->m_kCharID.n5_name[8] == *(_DWORD *)&v3->m_kCharID.n5_name[8]
            && *(_DWORD *)&v5->m_kCharID.n5_name[12] == *(_DWORD *)&v3->m_kCharID.n5_name[12]
            && *(_DWORD *)&v5->m_kCharID.n5_name[16] == *(_DWORD *)&v3->m_kCharID.n5_name[16] )
            break;
        }
      }
      if ( !v2 )
        return;
    }
    PgWin::DetachChildWin(v8->m_pkFullMapViewWin, (NiPointer<PgWin> *)&pkRaid, &v4->baseclass_0.baseclass_0);
    if ( pkRaid )
    {
      v6 = pkRaid;
      if ( !InterlockedDecrement((volatile LONG *)&pkRaid->m_kCharID.n5_name[4]) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))&v6->m_kCharID.n5_name[0])(v6, 1);
      }
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v8->m_kRaidList,
      (void **)&kCurrIter);
  }
}

//----- (00504700) --------------------------------------------------------
void __thiscall FullMapWin::ClearRaidMember(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  NiTListItem<RaidMarkWin *> *v2; // edx@1
  NiTListItem<RaidMarkWin *> *v3; // eax@4
  NiTListItem<RaidMarkWin *> *v4; // ecx@4
  PgWin *v5; // edi@7
  PgWin *v6; // edi@9
  NiPointer<PgWin> result; // [sp+4h] [bp-4h]@8

  v1 = this;
  v2 = 0;
  if ( *(_DWORD *)&this->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    while ( 1 )
    {
      v3 = v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v4 = v3->m_pkNext;
      v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
      if ( v4 == v2 )
        v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v2;
      else
        v4->m_pkPrev = v2;
      v5 = (PgWin *)v3->m_element;
      v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *)&v1->m_kRaidList,
        v3);
      --*(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v5 )
      {
        PgWin::DetachChildWin(v1->m_pkFullMapViewWin, &result, v5);
        if ( result.m_pObject )
        {
          v6 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v6 )
              v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
          }
        }
      }
      if ( !*(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
        break;
      v2 = 0;
    }
  }
}

//----- (005047B0) --------------------------------------------------------
void __thiscall FullMapWin::ClearGTEnemyPos(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  NiTListItem<GTIScanMarkWin *> *v2; // esi@1
  PgWin *v3; // ST04_4@2
  PgWin *v4; // ecx@2
  PgWin *v5; // edi@3
  NiTListItem<GTIScanMarkWin *> *kCurrIter; // [sp+8h] [bp-8h]@2
  NiPointer<PgWin> result; // [sp+Ch] [bp-4h]@2

  v1 = this;
  v2 = this->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = (PgWin *)v2->m_element;
    v4 = v1->m_pkFullMapViewWin;
    kCurrIter = v2;
    v2 = v2->m_pkNext;
    PgWin::DetachChildWin(v4, &result, v3);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v1->m_kEnemyList,
      (void **)&kCurrIter);
  }
}

//----- (00504820) --------------------------------------------------------
void __thiscall FullMapWin::AddGTEnemyPos(FullMapWin *this, ScanMemberInfo *pkMemberInfo)
{
  FullMapWin *v2; // edi@1
  PgWin *v3; // esi@2
  PgWin *v4; // esi@5
  PgSprData *v5; // eax@10
  GTIScanMarkWin *v6; // ebx@13
  int v7; // eax@14
  NiTListItem<GTIScanMarkWin *> *v8; // ecx@14
  PgWin *v9; // [sp-4h] [bp-14h]@10
  NiPointer<PgWin> result; // [sp+Ch] [bp-4h]@1

  v2 = this;
  PgWin::DetachChildWin(this->m_pkFullMapViewWin, &result, &this->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  PgWin::DetachChildWin(v2->m_pkFullMapViewWin, &result, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
  v4 = result.m_pObject;
  if ( result.m_pObject
    && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  if ( GuildTask::GetGuildTournamentImprove()->m_BlueTeam == g_pkMainChar->m_dwGuildRegNum )
  {
    v5 = v2->m_spRedPos.m_pObject;
    v9 = v2->m_pkFullMapViewWin;
  }
  else
  {
    if ( GuildTask::GetGuildTournamentImprove()->m_RedTeam != g_pkMainChar->m_dwGuildRegNum )
      goto LABEL_18;
    v5 = v2->m_spBluePos.m_pObject;
    v9 = v2->m_pkFullMapViewWin;
  }
  v6 = GTIScanMarkWin::CreateWin(0, 0, v5, v9);
  if ( v6 )
  {
    GTIScanMarkWin::SetEnemyPos(v6, *pkMemberInfo);
    v7 = (int)v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *)&v2->m_kEnemyList);
    *(_DWORD *)(v7 + 8) = v6;
    *(_DWORD *)v7 = 0;
    *(_DWORD *)(v7 + 4) = v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v8 = v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v8 )
      v8->m_pkNext = (NiTListItem<GTIScanMarkWin *> *)v7;
    else
      v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<GTIScanMarkWin *> *)v7;
    ++*(_DWORD *)&v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<GTIScanMarkWin *> *)v7;
  }
LABEL_18:
  PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
  PgWin::AttachChildWin(v2->m_pkFullMapViewWin, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
}

//----- (00504980) --------------------------------------------------------
void __thiscall InvisibleWin::SetAlpha(InvisibleWin *this, float fAlpha)
{
  NiMaterialProperty *v2; // eax@1

  v2 = this->m_pkMaterialProp;
  ++v2->m_uiRevID;
  v2->m_fAlpha = fAlpha;
}

//----- (005049A0) --------------------------------------------------------
void __thiscall InvisibleWin::Init(InvisibleWin *this)
{
  InvisibleWin *v1; // esi@1
  void *v2; // eax@1
  int v3; // eax@2
  NiMaterialProperty *v4; // eax@4
  int v5; // edx@4
  NiMaterialProperty *v6; // eax@4
  int v7; // edx@4
  NiMaterialProperty *v8; // eax@4

  v1 = this;
  v2 = operator new(0x60u);
  if ( v2 )
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v2);
  else
    v3 = 0;
  v1->m_pkMaterialProp = (NiMaterialProperty *)v3;
  *(_DWORD *)(v3 + 32) = NiColor::WHITE;
  *(_DWORD *)(v3 + 36) = dword_A88D90;
  *(_DWORD *)(v3 + 40) = dword_A88D94;
  ++*(_DWORD *)(v3 + 88);
  v4 = v1->m_pkMaterialProp;
  LODWORD(v4->m_diff.r) = NiColor::WHITE;
  LODWORD(v4->m_diff.g) = dword_A88D90;
  v5 = dword_A88D94;
  ++v4->m_uiRevID;
  LODWORD(v4->m_diff.b) = v5;
  v6 = v1->m_pkMaterialProp;
  LODWORD(v6->m_emit.r) = NiColor::WHITE;
  LODWORD(v6->m_emit.g) = dword_A88D90;
  v7 = dword_A88D94;
  ++v6->m_uiRevID;
  LODWORD(v6->m_emit.b) = v7;
  v8 = v1->m_pkMaterialProp;
  ++v8->m_uiRevID;
  v8->m_fAlpha = 0.5;
  ((void (__cdecl *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
}
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;

//----- (00504AA0) --------------------------------------------------------
void __thiscall FullMapWin::UpdateMeWin(FullMapWin *this, float fCurTime)
{
  FullMapWin *v2; // esi@1
  char *v3; // eax@1
  MainCharMarkWin *v4; // eax@7
  Name3 *v5; // eax@10
  PgFrameWork *v6; // edi@14
  NiTListItem<NpcMarkWin *> *v7; // esi@16
  NpcMarkWin *v8; // ecx@17
  PgFrameWork *v9; // eax@19
  Name3 result; // [sp+14h] [bp-Ch]@10

  v2 = this;
  v3 = (char *)&this->m_kMapTitle;
  if ( this->m_kMapTitle.baseclass_0._Myres >= 0x10 )
    v3 = *(char **)v3;
  ((void (__stdcall *)(_DWORD))this->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v3);
  FullMapWin::UpdateMainCharDir(v2);
  FullMapWin::UpdateMainCharPos(v2);
  if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
    FullMapWin::UpdateRaidPos(v2);
  else
    FullMapWin::UpdatePartyPos(v2);
  FullMapWin::UpdateNPCPos(v2);
  FullMapWin::UpdateMapMark(v2);
  FullMapWin::UpdateKQTeamMark(v2);
  FullMapWin::UpdateGTEnemyPos(v2);
  if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kRandomTimer_Interval, fCurTime) )
  {
    v4 = v2->m_pkMainCharMarkWin;
    if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1 )
    {
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    }
  }
  v5 = World::GetMapName(&g_kWorld, &result);
  if ( *(_DWORD *)&v2->m_kSelectedMapName.n3_name[0] != *(_DWORD *)&v5->n3_name[0]
    || *(_DWORD *)&v2->m_kSelectedMapName.n3_name[4] != *(_DWORD *)&v5->n3_name[4]
    || *(_DWORD *)&v2->m_kSelectedMapName.n3_name[8] != *(_DWORD *)&v5->n3_name[8] )
  {
    v2->m_pkMainCharMarkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v6 )
  {
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v6, v2->m_pkMapSlideListWin, v2->m_pkMapSlideBar);
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v6, v2->m_pkQuestSlideListWin, v2->m_pkQuestSlideBar);
  }
  v7 = v2->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v7 )
  {
    v8 = v7->m_element;
    v7 = v7->m_pkNext;
    if ( v8
      && (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
    {
      v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v9 )
        GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v9, BIL_MAP_3);
    }
  }
}

//----- (00504C40) --------------------------------------------------------
void __thiscall FullMapWin::AddNPC(FullMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto)
{
  FullMapWin *v2; // esi@1
  Char *v3; // eax@1
  Char *v4; // ebx@1
  unsigned __int16 v5; // dx@2
  NiTListItem<NpcMarkWin *> *v6; // eax@2
  NpcMarkWin *v7; // ecx@3
  MobViewInfo *v8; // eax@7
  PgSprData *v9; // eax@8
  NpcMarkWin *v10; // edi@8
  char *v11; // eax@12
  char *v12; // ST14_4@14
  PgWin *v13; // eax@14
  int v14; // edi@17
  int v15; // ebx@17
  MobViewInfo *v16; // eax@21
  PgSprData *v17; // edi@23
  NiTListItem<NpcMarkWin *> *v18; // eax@29
  NpcMarkWin *v19; // ecx@30
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *v20; // ebx@34
  NpcMarkWin *v21; // esi@34
  MobInfo *v22; // edi@35
  PgWin *v23; // eax@40
  char *v24; // [sp-8h] [bp-1Ch]@38
  NpcMarkWin *pkfindWin; // [sp+8h] [bp-Ch]@30
  NpcMarkWin *pkWin; // [sp+Ch] [bp-8h]@8
  MobInfo *pkMobInfo; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, pkProto->handle);
  v4 = v3;
  pkMobInfo = (MobInfo *)v3;
  if ( v3 )
  {
    v5 = v3->m_kHandle;
    v6 = v2->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v6 )
    {
      while ( 1 )
      {
        v7 = v6->m_element;
        v6 = v6->m_pkNext;
        if ( v7 )
        {
          if ( v7->m_kCharHandle == v5 )
            break;
        }
        if ( !v6 )
          goto LABEL_6;
      }
      if ( FullMapWin::IsInNPC(v2, v5) )
      {
        v14 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
        v15 = v4->m_kCharShape.m_kMobID;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                                v15) )
        {
          if ( (unsigned __int16)v15 <= *(_WORD *)(v14 + 200) )
          {
            if ( *(_DWORD *)(*(_DWORD *)(v14 + 196) + 4 * v15) )
            {
              if ( Char::IsNPC((Char *)pkMobInfo) )
              {
                v16 = IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(LOWORD(pkMobInfo[8].RunSpeed), 1);
                if ( v16 )
                {
                  switch ( v16->MiniMapIcon )
                  {
                    case 0x12:
                      v17 = v2->m_spFlagNormal.m_pObject;
                      goto LABEL_29;
                    case 0x10:
                      v17 = v2->m_spFlagRed.m_pObject;
                      goto LABEL_29;
                    case 0x11:
                      v17 = v2->m_spFlagBlue.m_pObject;
                      goto LABEL_29;
                    case 0x15:
                      v17 = v2->m_spWarpGray.m_pObject;
                      goto LABEL_29;
                    case 0x13:
                      v17 = v2->m_spWarpBlue.m_pObject;
                      goto LABEL_29;
                    case 0x14:
                      v17 = v2->m_spWarpRed.m_pObject;
LABEL_29:
                      v18 = v2->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
                      if ( !v18 )
                        return;
                      break;
                    default:
                      return;
                  }
                  while ( 1 )
                  {
                    v19 = v18->m_element;
                    v18 = v18->m_pkNext;
                    pkfindWin = v19;
                    if ( v19 )
                    {
                      if ( v19->m_kCharHandle == pkProto->handle )
                        break;
                    }
                    if ( !v18 )
                      return;
                  }
                  PgWin::DetachChildWin(
                    v2->m_pkFullMapViewWin,
                    (NiPointer<PgWin> *)&pkWin,
                    &v19->baseclass_0.baseclass_0);
                  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkWin);
                  v20 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kNpcList;
                  NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
                    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v2->m_kNpcList,
                    (NiLight *const *)&pkfindWin);
                  v21 = NpcMarkWin::CreateWin(0, 0, v17, &v2->m_kQuestStateImg, v2->m_pkFullMapViewWin, 0);
                  pkfindWin = v21;
                  if ( v21 )
                  {
                    v22 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(LOWORD(pkMobInfo[8].RunSpeed), 1);
                    if ( v22 )
                    {
                      if ( MiniMapMarkWin::GetMarkWin(&v21->baseclass_0) )
                      {
                        if ( Char::IsLinkGate((Char *)pkMobInfo) )
                          v24 = Char::GetLinkGateName((Char *)pkMobInfo);
                        else
                          v24 = v22->Name;
                        v23 = (PgWin *)MiniMapMarkWin::GetMarkWin(&v21->baseclass_0);
                        PgWin::SetToolTipWinText(v23, v24);
                        MiniMapMarkWin::GetMarkWin(&v21->baseclass_0)->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                      }
                    }
                  }
                  v21->m_kCharHandle = pkProto->handle;
                  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
                    v20,
                    (NiD3DXEffectParameter *const *)&pkfindWin);
                }
              }
            }
          }
        }
      }
    }
    else
    {
LABEL_6:
      if ( Char::IsNPC(v4) )
      {
        v8 = IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(v4->m_kCharShape.m_kMobID, 1);
        if ( v8 )
        {
          v9 = FullMapWin::GetMapIconSprData(v2, v8->MiniMapIcon);
          v10 = NpcMarkWin::CreateWin(
                  0,
                  0,
                  v9,
                  &v2->m_kQuestStateImg,
                  v2->m_pkFullMapViewWin,
                  v2->m_spAutoRunMark.m_pObject);
          pkWin = v10;
          if ( v10 )
          {
            pkMobInfo = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v4->m_kCharShape.m_kMobID, 1);
            if ( pkMobInfo && MiniMapMarkWin::GetMarkWin(&v10->baseclass_0) )
            {
              if ( Char::IsLinkGate(v4) )
                v11 = Char::GetLinkGateName(v4);
              else
                v11 = pkMobInfo->Name;
              v12 = v11;
              v13 = (PgWin *)MiniMapMarkWin::GetMarkWin(&v10->baseclass_0);
              PgWin::SetToolTipWinText(v13, v12);
              MiniMapMarkWin::GetMarkWin(&v10->baseclass_0)->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
            }
            v10->m_kCharHandle = pkProto->handle;
            NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
              (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kNpcList,
              (NiD3DXEffectParameter *const *)&pkWin);
          }
        }
      }
    }
  }
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (00504F80) --------------------------------------------------------
void __thiscall FullMapWin::AddMapMark(FullMapWin *this, PROTO_NC_SCENARIO_MAPMARK_CMD *pkProto)
{
  FullMapWin *v2; // edi@1
  int v3; // esi@2
  int v4; // esi@5
  PROTO_NC_SCENARIO_MAPMARK_CMD *v5; // ebx@10
  PgSprData *v6; // eax@11
  MapMarkWin *v7; // esi@11
  int v8; // eax@12
  double v9; // st7@12
  float v10; // eax@15
  float v11; // ecx@15
  unsigned int v12; // ST1C_4@15
  int v13; // edx@18
  MainCharMarkWin *v14; // esi@19
  NiAVObject *v15; // ebx@19
  int v16; // eax@20
  MainCharMarkWin *v17; // esi@25
  NiAVObject *v18; // edi@25
  int v19; // eax@26
  NiPoint2 kPos; // [sp+3Ch] [bp-14h]@12
  float fYPos; // [sp+44h] [bp-Ch]@14
  int i; // [sp+48h] [bp-8h]@1
  float pkDelWin; // [sp+4Ch] [bp-4h]@14

  v2 = this;
  PgWin::DetachChildWin(
    this->m_pkFullMapViewWin,
    (NiPointer<PgWin> *)&i,
    &this->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
  if ( i )
  {
    v3 = i;
    if ( !InterlockedDecrement((volatile LONG *)(i + 4)) )
    {
      if ( v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    }
  }
  PgWin::DetachChildWin(
    v2->m_pkFullMapViewWin,
    (NiPointer<PgWin> *)&i,
    &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
  v4 = i;
  if ( i && !InterlockedDecrement((volatile LONG *)(i + 4)) && v4 )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
  i = 0;
  if ( pkProto->nNum > 0u )
  {
    v5 = pkProto + 2;
    do
    {
      v6 = FullMapWin::GetMapIconSprData(v2, LOBYTE(v5[4].nNum));
      v7 = MapMarkWin::CreateWin(0, 0, v6, v2->m_pkFullMapViewWin);
      if ( v7 )
      {
        v8 = *(_DWORD *)&v5[2].nNum;
        kPos.x = (double)*(_DWORD *)&v5->nNum;
        v9 = (double)*(signed int *)&v5[2].nNum;
        if ( v8 < 0 )
          v9 = v9 + 4294967300.0;
        kPos.y = v9;
        MapMarkWin::SetPos(v7, &kPos);
        pkDelWin = (double)*(unsigned int *)((char *)&v5[4].nNum + 1) / 1000.0 + Timer::ms_fCurTime;
        MapMarkWin::SetLifeTime(v7, pkDelWin);
        pkDelWin = (0.02 * kPos.x / v2->m_fFullMapScale - v2->m_fMapOffsetX) * v2->m_fMapScaleX;
        fYPos = (512.0 - 0.02 * kPos.y / v2->m_fFullMapScale - v2->m_fMapOffsetY) * v2->m_fMapScaleY;
        if ( FullMapWin::IsSameMapName(v2) )
        {
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v7,
            1u);
          v10 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
          v11 = fYPos;
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = pkDelWin;
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v11;
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v10;
          v12 = v5[-1].nNum;
          pkDelWin = 0.0;
          NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
            (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_kMapMarkMap,
            v12,
            (NiVBSet **)&pkDelWin);
          if ( pkDelWin != 0.0 )
            FullMapWin::RemoveMapMark(v2, v5[-1].nNum);
          NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
            (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_kMapMarkMap,
            v5[-1].nNum,
            (NiVBSet *)v7);
        }
      }
      v13 = pkProto->nNum;
      v5 = (PROTO_NC_SCENARIO_MAPMARK_CMD *)((char *)v5 + 15);
      ++i;
    }
    while ( i < v13 );
  }
  v14 = v2->m_pkMainCharMarkWin;
  v15 = (NiAVObject *)v2->m_pkFullMapViewWin;
  if ( v14 )
  {
    v16 = ((int (__thiscall *)(MainCharMarkWin *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2->m_pkMainCharMarkWin);
    if ( v16 )
    {
      while ( (NiRTTI *)v16 != &PgWin::m_RTTI )
      {
        v16 = *(_DWORD *)(v16 + 4);
        if ( !v16 )
          goto LABEL_25;
      }
      ((void (__thiscall *)(NiAVObject *, MainCharMarkWin *, _DWORD))v15->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v15,
        v14,
        0);
      NiAVObject::UpdateProperties(v15);
      NiAVObject::Update(v15, 0.0, 1);
    }
  }
LABEL_25:
  v17 = v2->m_pkMainCharMarkSecondWin;
  v18 = (NiAVObject *)v2->m_pkFullMapViewWin;
  if ( v17 )
  {
    v19 = ((int (__thiscall *)(MainCharMarkWin *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v17);
    if ( v19 )
    {
      while ( (NiRTTI *)v19 != &PgWin::m_RTTI )
      {
        v19 = *(_DWORD *)(v19 + 4);
        if ( !v19 )
          return;
      }
      ((void (__thiscall *)(NiAVObject *, MainCharMarkWin *, _DWORD))v18->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v18,
        v17,
        0);
      NiAVObject::UpdateProperties(v18);
      NiAVObject::Update(v18, 0.0, 1);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00505230) --------------------------------------------------------
void __thiscall FullMapWin::AddKQTeamMark(FullMapWin *this, unsigned __int16 kCharHandle)
{
  FullMapWin *v2; // esi@1
  Char *v3; // eax@1
  char v4; // al@2
  PgSprData *v5; // eax@3
  KQTeamMarkWin *v6; // ebx@7
  void *pkDelWin; // [sp+4h] [bp-4h]@8

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, kCharHandle);
  if ( v3 )
  {
    v4 = v3->m_byKQTeamType;
    if ( v4 )
    {
      if ( v4 != 1 )
        return;
      v5 = v2->m_spBluePos.m_pObject;
    }
    else
    {
      v5 = v2->m_spRedPos.m_pObject;
    }
    if ( v5 )
    {
      v6 = KQTeamMarkWin::CreateWin(0, 0, v5, v2->m_pkFullMapViewWin);
      if ( v6 )
      {
        pkDelWin = 0;
        NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::GetAt(
          &v2->m_KQTeamMarkWinMap.baseclass_0,
          kCharHandle,
          (KQTeamMarkWin **)&pkDelWin);
        if ( pkDelWin )
          FullMapWin::RemoveKQTeamMark(v2, kCharHandle);
        NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::SetAt(
          &v2->m_KQTeamMarkWinMap.baseclass_0,
          kCharHandle,
          v6);
      }
    }
  }
}

//----- (005052D0) --------------------------------------------------------
void __thiscall FullMapWin::OnShowMapList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  char v2; // al@1
  PgWinSpr *v3; // ecx@1
  SlideBar *v4; // ecx@2
  SlideListWin *v5; // eax@3

  v1 = this;
  v2 = ((int (*)(void))this->m_pkMapListPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  v3 = v1->m_pkMapListPanel[0];
  if ( v2 )
  {
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkMapListPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkMapSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkMapSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  else
  {
    ((void (__stdcall *)(signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkMapListPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkMapSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkMapSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    FullMapWin::CenterPlaceSelectedMap(v1);
    v4 = v1->m_pkMapSlideBar;
    if ( v4 )
    {
      v5 = v1->m_pkMapSlideListWin;
      if ( v5 )
      {
        SlideBar::SetSplitCnt(v4, v5->m_nSlideSplitCnt);
        v1->m_pkMapSlideListWin->m_nViewStartPos = v1->m_pkMapSlideBar->m_nCurPos;
        SlideListWin::UpdateViewList(v1->m_pkMapSlideListWin);
      }
    }
  }
}

//----- (005053D0) --------------------------------------------------------
void __thiscall FullMapWin::OnShowQuestList(FullMapWin *this, bool b)
{
  FullMapWin *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@1

  v2 = this;
  v3 = this->m_pkQuestListPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( b == 1 )
  {
    ((void (__stdcall *)(_DWORD))v3)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    FullMapWin::UpdateQuestNum(v2);
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v3)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestListBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    FullMapWin::ResetQuestNum(v2);
  }
}

//----- (00505510) --------------------------------------------------------
void __thiscall FullMapWin::UpdateSlideBarQuestList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkQuestSlideBar;
  if ( v2 )
  {
    v3 = v1->m_pkQuestSlideListWin;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pkQuestSlideListWin->m_nViewStartPos = v1->m_pkQuestSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pkQuestSlideListWin);
      FullMapWin::UpdateQuestNum(v1);
    }
  }
}

//----- (00505560) --------------------------------------------------------
void __thiscall FullMapWin::OnShowWin(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  PgFrameWork *v3; // eax@9
  signed int v4; // [sp+0h] [bp-8h]@6

  v1 = this;
  CNSTimer_Interval::ReSet(&this->m_kRandomTimer_Interval, Timer::ms_fCurTime);
  v2 = v1->m_pkMapSlideListWin;
  v1->m_kRandomTimer_Interval.m_fCheckTime = 0.5;
  if ( (unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
    FullMapWin::OnShowMapList(v1);
  if ( v1->m_pkAutoRunText )
  {
    if ( ChargedItemList::IsEffecting(EE_AUTOPATHFIND) )
    {
      v4 = 0;
    }
    else
    {
      if ( User::Lv(&g_kUser) > 0x3C )
        goto LABEL_9;
      v4 = 1;
    }
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoRunText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4);
  }
LABEL_9:
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v3, BIL_MAP_1);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00505600) --------------------------------------------------------
void __thiscall FullMapWin::AddNPC(FullMapWin *this, PROTO_NC_BRIEFINFO_MOB_CMD *pkProto)
{
  FullMapWin *v2; // esi@1
  PgWin *v3; // edi@2
  PgWin *v4; // edi@5
  signed int v5; // edi@9
  PROTO_NC_BRIEFINFO_REGENMOB_CMD *v6; // ebx@10
  MainCharMarkWin *v7; // edi@12
  NiAVObject *v8; // ebx@12
  int v9; // eax@13
  MainCharMarkWin *v10; // edi@18
  NiAVObject *v11; // esi@18
  int v12; // eax@19
  NiPointer<PgWin> result; // [sp+2Ch] [bp-4h]@1

  v2 = this;
  PgWin::DetachChildWin(this->m_pkFullMapViewWin, &result, &this->m_pkMainCharMarkWin->baseclass_0.baseclass_0);
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  PgWin::DetachChildWin(v2->m_pkFullMapViewWin, &result, &v2->m_pkMainCharMarkSecondWin->baseclass_0.baseclass_0);
  v4 = result.m_pObject;
  if ( result.m_pObject
    && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = 0;
  if ( pkProto->mobnum )
  {
    v6 = (PROTO_NC_BRIEFINFO_REGENMOB_CMD *)&pkProto[1];
    do
    {
      FullMapWin::AddNPC(v2, v6);
      ++v5;
      ++v6;
    }
    while ( v5 < pkProto->mobnum );
  }
  v7 = v2->m_pkMainCharMarkWin;
  v8 = (NiAVObject *)v2->m_pkFullMapViewWin;
  if ( v7 )
  {
    v9 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2->m_pkMainCharMarkWin);
    if ( v9 )
    {
      while ( (NiRTTI *)v9 != &PgWin::m_RTTI )
      {
        v9 = *(_DWORD *)(v9 + 4);
        if ( !v9 )
          goto LABEL_18;
      }
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v8->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v8,
        v7,
        0);
      NiAVObject::UpdateProperties(v8);
      NiAVObject::Update(v8, 0.0, 1);
    }
  }
LABEL_18:
  v10 = v2->m_pkMainCharMarkSecondWin;
  v11 = (NiAVObject *)v2->m_pkFullMapViewWin;
  if ( v10 )
  {
    v12 = ((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v10);
    if ( v12 )
    {
      while ( (NiRTTI *)v12 != &PgWin::m_RTTI )
      {
        v12 = *(_DWORD *)(v12 + 4);
        if ( !v12 )
          return;
      }
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v11->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v11,
        v10,
        0);
      NiAVObject::UpdateProperties(v11);
      NiAVObject::Update(v11, 0.0, 1);
    }
  }
}

//----- (00505760) --------------------------------------------------------
void __thiscall FullMapWin::UpdateQuestHelper(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  MobAreaMarkWin *v2; // ecx@1
  NiTListItem<MobAreaMarkWin *> *v3; // edi@1
  MobAreaMarkWin *v4; // esi@2
  PgWinSpr *v5; // eax@3
  PgWinSpr *v6; // eax@3
  PgWinSpr *v7; // eax@3
  float v8; // ecx@3
  double v9; // st7@3
  float v10; // eax@5
  int v11; // edi@9
  NiTListItem<float> *v12; // esi@10
  double v13; // st7@10
  double v14; // st6@10
  double v15; // st5@11
  double v16; // st4@12
  NiTListItem<float> *v17; // esi@12
  double v18; // st4@12
  int v19; // eax@18
  float v20; // ecx@18
  PgWin *v21; // esi@18
  float v22; // edx@18
  float v23; // ecx@18
  float v24; // eax@18
  float v25; // eax@18
  double v26; // st7@18
  NiTListItem<float> *v27; // eax@18
  NiTListItem<float> *v28; // eax@22
  PgWin *v29; // ecx@25
  int v30; // edx@29
  int v31; // eax@29
  NiAVObject *v32; // edi@33
  PgWin *v33; // edi@35
  NiAVObject *v34; // edi@38
  int v35; // eax@38
  NiTListItem<float> *v36; // esi@44
  NiTListItem<float> *v37; // ST24_4@45
  PgTList<float> kList; // [sp+38h] [bp-64h]@1
  float v39; // [sp+48h] [bp-54h]@18
  float v40; // [sp+4Ch] [bp-50h]@18
  float v41; // [sp+54h] [bp-48h]@18
  float v42; // [sp+58h] [bp-44h]@18
  float v43; // [sp+60h] [bp-3Ch]@3
  float v44; // [sp+64h] [bp-38h]@3
  float v45; // [sp+68h] [bp-34h]@10
  NiPointer<PgWin> result; // [sp+6Ch] [bp-30h]@3
  NiPoint2 kPos; // [sp+70h] [bp-2Ch]@3
  float fOldY; // [sp+78h] [bp-24h]@12
  float fXPos; // [sp+7Ch] [bp-20h]@3
  void *fWidth; // [sp+80h] [bp-1Ch]@3
  float fYPos; // [sp+84h] [bp-18h]@3
  float fDeltaX; // [sp+88h] [bp-14h]@3
  float v53; // [sp+8Ch] [bp-10h]@10
  int i; // [sp+98h] [bp-4h]@1

  v1 = this;
  v2 = 0;
  *(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&PgTList<float>::_vftable_;
  v3 = v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  for ( i = 0; v3; v2 = 0 )
  {
    v4 = v3->m_element;
    v3 = v3->m_pkNext;
    if ( v4 != v2 )
    {
      MobAreaMarkWin::GetPos(v4, &kPos);
      fXPos = (0.02 * kPos.x / v1->m_fFullMapScale - v1->m_fMapOffsetX) * v1->m_fMapScaleX;
      fYPos = (512.0 - 0.02 * kPos.y / v1->m_fFullMapScale - v1->m_fMapOffsetY) * v1->m_fMapScaleY;
      v5 = MiniMapMarkWin::GetMarkWin(&v4->baseclass_0);
      result.m_pObject = (PgWin *)((unsigned int)((int (__thiscall *)(PgWinSpr *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5) >> 1);
      *(float *)&fWidth = (double)(unsigned int)result.m_pObject;
      v6 = MiniMapMarkWin::GetMarkWin(&v4->baseclass_0);
      result.m_pObject = (PgWin *)((unsigned int)((int (__thiscall *)(PgWinSpr *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v6) >> 1);
      fDeltaX = (double)(unsigned int)result.m_pObject;
      v7 = MiniMapMarkWin::GetMarkWin(&v4->baseclass_0);
      v43 = v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
      v8 = v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      fXPos = fXPos - *(float *)&fWidth;
      *(float *)&fWidth = fYPos - fDeltaX;
      v43 = fXPos;
      v9 = *(float *)&fWidth;
      v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = fXPos;
      v44 = v9;
      v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v44;
      v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v8;
    }
  }
  LODWORD(v10) = v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  LODWORD(fYPos) = v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( LODWORD(v10) != v2 )
  {
    while ( fYPos != 0.0 )
    {
      v11 = *(_DWORD *)(LODWORD(v10) + 8);
      LODWORD(fXPos) = *LODWORD(v10);
      if ( v11 )
      {
        QuestHelperMarkWin::GetPos((QuestHelperMarkWin *)v11, (NiPoint2 *)&v44);
        v12 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        v53 = (0.02 * v44 / v1->m_fFullMapScale - v1->m_fMapOffsetX) * v1->m_fMapScaleX;
        *(float *)&fWidth = (512.0 - 0.02 * v45 / v1->m_fFullMapScale - v1->m_fMapOffsetY) * v1->m_fMapScaleY;
        v13 = *(float *)&fWidth;
        v14 = v53;
        if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead )
        {
          v15 = 21.0;
          do
          {
            v16 = v12->m_element;
            v17 = v12->m_pkNext;
            fDeltaX = v16;
            fOldY = v17->m_element;
            v12 = v17->m_pkNext;
            v18 = fDeltaX;
            fDeltaX = fDeltaX - v14;
            fDeltaX = fabs(fDeltaX);
            if ( fDeltaX < v15 )
            {
              fOldY = fOldY - v13;
              fOldY = fabs(fOldY);
              if ( fOldY < v15 )
              {
                if ( v14 < v18 )
                  fDeltaX = fDeltaX * -1.0;
                LODWORD(fOldY) = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 144))(v11);
                v53 = (double)LODWORD(fOldY) - fDeltaX + v53;
                v13 = *(float *)&fWidth;
                v15 = 21.0;
                v14 = v53;
              }
            }
          }
          while ( v12 );
        }
        v19 = *(_DWORD *)(v11 + 96);
        v41 = v14;
        *(_DWORD *)(v11 + 88) = LODWORD(v41);
        v20 = fYPos;
        v42 = v13;
        *(_DWORD *)(v11 + 92) = LODWORD(v42);
        *(_DWORD *)(v11 + 96) = v19;
        v21 = *(PgWin **)(LODWORD(v20) + 8);
        v22 = v21->baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
        fOldY = v14 - 5.0;
        LODWORD(v23) = *LODWORD(v20);
        v24 = v21->baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
        v39 = v22;
        fDeltaX = v13 - 7.0;
        v40 = v24;
        v25 = v21->baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
        v39 = fOldY;
        fYPos = v23;
        v26 = fDeltaX;
        v21->baseclass_0.baseclass_0.m_kLocal.m_Translate.x = fOldY;
        v40 = v26;
        v21->baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v40;
        v21->baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v25;
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v21, 0);
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v21, 1u);
        v27 = kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,float> *)&kList);
        v27->m_element = v53;
        v27->m_pkNext = 0;
        v27->m_pkPrev = kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail )
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v27;
        else
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v27;
        ++*(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v27;
        v28 = kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,float> *)&kList);
        v28->m_element = *(float *)&fWidth;
        v28->m_pkNext = 0;
        v28->m_pkPrev = kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail )
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v28;
        else
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v28;
        v29 = v1->m_pkFullMapViewWin;
        ++*(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v28;
        PgWin::DetachChildWin(v29, (NiPointer<PgWin> *)&kPos.y, (PgWin *)v11);
        if ( LODWORD(kPos.y) )
        {
          fOldY = kPos.y;
          if ( !InterlockedDecrement((volatile LONG *)(LODWORD(kPos.y) + 4)) )
          {
            if ( fOldY != 0.0 )
              (*(void (__stdcall **)(signed int))*LODWORD(fOldY))(1);
          }
        }
        v30 = *(_DWORD *)v11;
        fWidth = v1->m_pkFullMapViewWin;
        v31 = (*(int (__thiscall **)(int))(v30 + 4))(v11);
        if ( v31 )
        {
          while ( (NiRTTI *)v31 != &PgWin::m_RTTI )
          {
            v31 = *(_DWORD *)(v31 + 4);
            if ( !v31 )
              goto LABEL_34;
          }
          (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)fWidth + 116))(v11, 0);
          v32 = (NiAVObject *)fWidth;
          NiAVObject::UpdateProperties((NiAVObject *)fWidth);
          NiAVObject::Update(v32, 0.0, 1);
        }
LABEL_34:
        PgWin::DetachChildWin(v1->m_pkFullMapViewWin, &result, v21);
        if ( result.m_pObject )
        {
          v33 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v33 )
              v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                (NiRefObject *)v33,
                1u);
          }
        }
        v34 = (NiAVObject *)v1->m_pkFullMapViewWin;
        v35 = ((int (__thiscall *)(PgWin *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v21);
        if ( v35 )
        {
          while ( (NiRTTI *)v35 != &PgWin::m_RTTI )
          {
            v35 = *(_DWORD *)(v35 + 4);
            if ( !v35 )
              goto LABEL_43;
          }
          ((void (__thiscall *)(NiAVObject *, PgWin *, _DWORD))v34->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v34,
            v21,
            0);
          NiAVObject::UpdateProperties(v34);
          NiAVObject::Update(v34, 0.0, 1);
        }
      }
LABEL_43:
      if ( fXPos == 0.0 )
        break;
      v10 = fXPos;
    }
  }
  kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&PgTList<float>::_vftable_;
  v36 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  i = 1;
  if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead )
  {
    do
    {
      v37 = v36;
      v36 = v36->m_pkNext;
      kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,float> *)&kList,
        v37);
    }
    while ( v36 );
  }
}
// 9963DC: using guessed type int (__thiscall *PgTList_float____vftable_)(void *p, char);

//----- (00505C50) --------------------------------------------------------
void __thiscall FullMapWin::OnQuestListLClick(FullMapWin *this, unsigned int nIndex)
{
  FullMapWin *v2; // esi@1
  SlideBar *v3; // ecx@1
  SlideListWin *v4; // eax@2

  v2 = this;
  FullMapWin::UpdateArea(this, nIndex);
  v3 = v2->m_pkQuestSlideBar;
  if ( v3 )
  {
    v4 = v2->m_pkQuestSlideListWin;
    if ( v4 )
    {
      SlideBar::SetSplitCnt(v3, v4->m_nSlideSplitCnt);
      v2->m_pkQuestSlideListWin->m_nViewStartPos = v2->m_pkQuestSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(v2->m_pkQuestSlideListWin);
      FullMapWin::UpdateQuestNum(v2);
    }
  }
}

//----- (00505CB0) --------------------------------------------------------
void __thiscall FullMapWin::OnSlideBarQuestList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkQuestSlideBar;
  if ( v2 )
  {
    v3 = v1->m_pkQuestSlideListWin;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pkQuestSlideListWin->m_nViewStartPos = v1->m_pkQuestSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pkQuestSlideListWin);
      FullMapWin::UpdateQuestNum(v1);
    }
  }
}

//----- (00505D00) --------------------------------------------------------
void __thiscall FullMapWin::FullMapWin(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST18_4@1
  void *v4; // eax@1
  unsigned int v5; // ST08_4@1
  PgSprData *v6; // edi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FullMapWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FullMapWin::_vftable_;
  *(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&PgTList<RaidMarkWin__>::_vftable_;
  *(_DWORD *)&v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&PgTList<NpcMarkWin__>::_vftable_;
  *(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&PgTList<PartyMarkWin__>::_vftable_;
  v1->m_spPartySprData.m_pObject = 0;
  v1->m_spNPCSoulStoneSprData.m_pObject = 0;
  v1->m_spNPCGuildSprData.m_pObject = 0;
  v1->m_spNPCQuestSprData.m_pObject = 0;
  v1->m_spNPCStoreSprData.m_pObject = 0;
  v1->m_spNPCKingdomSprData.m_pObject = 0;
  v1->m_spNPCMineSprData.m_pObject = 0;
  v1->m_spNPCFurnitureSprData.m_pObject = 0;
  v1->m_spNPCSmithSprData.m_pObject = 0;
  v1->m_spNPCSkillSprData.m_pObject = 0;
  v1->m_spNPCHelpSprData.m_pObject = 0;
  v1->m_spNPCTemplarSprData.m_pObject = 0;
  v1->m_spNPCItemSprData.m_pObject = 0;
  v1->m_spNPCNormalSprData.m_pObject = 0;
  v1->m_spNPCWTitleSprData.m_pObject = 0;
  v1->m_kQuestStateImg.spIng.m_pObject = 0;
  v1->m_kQuestStateImg.spAble.m_pObject = 0;
  v1->m_kQuestStateImg.spReward.m_pObject = 0;
  v1->m_kQuestStateImg.spLowAble.m_pObject = 0;
  v1->m_spMainCharSprData.m_pObject = 0;
  v1->m_spLinkSprData.m_pObject = 0;
  v1->m_spLinkTownSprData.m_pObject = 0;
  v1->m_spMiniHouseSprData.m_pObject = 0;
  v1->m_spMainCharSprDataSecond.m_pObject = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kRandomTimer_Interval);
  v1->m_spFlagNormal.m_pObject = 0;
  v1->m_spFlagRed.m_pObject = 0;
  v1->m_spFlagBlue.m_pObject = 0;
  v1->m_spWarpRed.m_pObject = 0;
  v1->m_spWarpBlue.m_pObject = 0;
  v1->m_spWarpGray.m_pObject = 0;
  v1->m_spFullMapGeom.m_pObject = 0;
  v1->m_spFullMapTexProp.m_pObject = 0;
  v1->m_spAutoRunMark.m_pObject = 0;
  v1->m_spMobChiefSprData.m_pObject = 0;
  v1->m_spMobNormalSprData.m_pObject = 0;
  v1->m_spMobDmgSprData.m_pObject = 0;
  v1->m_spRedWoodSprData.m_pObject = 0;
  v1->m_spBlueWoodSprData.m_pObject = 0;
  v1->m_spCaptureFlagSprData.m_pObject = 0;
  *(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&PgTList<QuestHelperMarkWin__>::_vftable_;
  *(_DWORD *)&v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  v1->m_spQuestHelperNumBall.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spQuestHelperNum,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  *(_DWORD *)&v1->m_kSelectedMapName.n3_name[8] = 0;
  *(_DWORD *)&v1->m_kSelectedMapName.n3_name[4] = 0;
  *(_DWORD *)&v1->m_kSelectedMapName.n3_name[0] = 0;
  v1->m_kMapTitle.baseclass_0._Myres = 15;
  v1->m_kMapTitle.baseclass_0._Mysize = 0;
  v1->m_kMapTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kMarkCheck);
  *(_DWORD *)&v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&PgTList<MobAreaMarkWin__>::_vftable_;
  v1->m_spRedPos.m_pObject = 0;
  v1->m_spBluePos.m_pObject = 0;
  *(_DWORD *)&v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&PgTList<GTIScanMarkWin__>::_vftable_;
  *(_DWORD *)&v1->m_kVisibleControls.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kVisibleControls.baseclass_0._Mylast = 0;
  v1->m_kVisibleControls.baseclass_0._Myend = 0;
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  v1->m_kMapMarkMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kMapMarkMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kMapMarkMap.baseclass_0.m_uiHashSize;
  v1->m_kMapMarkMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned int,MapMarkWin *> **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMap<unsigned_int_MapMarkWin__>::_vftable_;
  v1->m_KQTeamMarkWinMap.baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  v1->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_KQTeamMarkWinMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4 = operator new__(0x94u);
  v5 = 4 * v1->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize;
  v1->m_KQTeamMarkWinMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned short,KQTeamMarkWin *> **)v4;
  memset((char *)v4, 0, v5);
  v1->m_KQTeamMarkWinMap.baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMap<unsigned_short_KQTeamMarkWin__>::_vftable_;
  v1->m_fFullMapScale = 0.0;
  v1->m_pkMiniMapWin = 0;
  v1->m_pkMainCharMarkWin = 0;
  v1->m_fAlphaBlendValue = 1.0;
  v1->m_pkFullMapViewWin = 0;
  v1->m_pkWorldMapWin = 0;
  v1->m_pkGridNumSprWin = 0;
  v1->m_pkMainCharMarkSecondWin = 0;
  v1->m_bTeleport = 0;
  v1->m_uiMapListTotalCnt = 0;
  v1->m_pkAutoRunText = 0;
  v6 = v1->m_spAutoRunMark.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    v1->m_spAutoRunMark.m_pObject = 0;
  }
}
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 99637C: using guessed type int (__thiscall *PgTList_NpcMarkWin _____vftable_)(void *p, char);
// 99638C: using guessed type int (__thiscall *NiTMap_unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 9963AC: using guessed type int (__thiscall *NiTMap_unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 9963FC: using guessed type int (__thiscall *PgTList_RaidMarkWin _____vftable_)(void *p, char);
// 99640C: using guessed type int (__thiscall *PgTList_PartyMarkWin _____vftable_)(void *p, char);
// 99641C: using guessed type int (__thiscall *PgTList_GTIScanMarkWin _____vftable_)(void *p, char);
// 99642C: using guessed type int (__thiscall *PgTList_QuestHelperMarkWin _____vftable_)(void *p, char);
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);
// 99644C: using guessed type int (__thiscall *PgTList_MobAreaMarkWin _____vftable_)(void *p, char);
// 996468: using guessed type int (__stdcall *FullMapWin___vftable_)(int uiFlags);
// 996484: using guessed type int (__thiscall *FullMapWin___vftable_)(void *p, char);

//----- (005060C0) --------------------------------------------------------
void __thiscall FullMapWin::_FullMapWin(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  char *v2; // edi@1
  int v3; // edi@3
  NiTListItem<GTIScanMarkWin *> *v4; // ebx@3
  NiTListItem<GTIScanMarkWin *> *v5; // ST0C_4@4
  PgSprData *v6; // edi@5
  PgSprData *v7; // edi@9
  int v8; // edi@13
  NiTListItem<MobAreaMarkWin *> *v9; // ebx@13
  NiTListItem<MobAreaMarkWin *> *v10; // ST0C_4@14
  PgSprData *v11; // edi@17
  int v12; // edi@21
  NiTListItem<PgWinSpr *> *v13; // ebx@21
  NiTListItem<PgWinSpr *> *v14; // ST0C_4@22
  int v15; // edi@23
  NiTListItem<QuestHelperMarkWin *> *v16; // ebx@23
  NiTListItem<QuestHelperMarkWin *> *v17; // ST0C_4@24
  PgSprData *v18; // edi@25
  PgSprData *v19; // edi@29
  PgSprData *v20; // edi@33
  PgSprData *v21; // edi@37
  PgSprData *v22; // edi@41
  PgSprData *v23; // edi@45
  PgSprData *v24; // edi@49
  NiTexturingProperty *v25; // edi@53
  NiScreenElements *v26; // edi@57
  PgSprData *v27; // edi@61
  PgSprData *v28; // edi@65
  PgSprData *v29; // edi@69
  PgSprData *v30; // edi@73
  PgSprData *v31; // edi@77
  PgSprData *v32; // edi@81
  PgSprData *v33; // edi@85
  PgSprData *v34; // edi@89
  PgSprData *v35; // edi@93
  PgSprData *v36; // edi@97
  PgSprData *v37; // edi@101
  PgSprData *v38; // edi@105
  PgSprData *v39; // edi@109
  PgSprData *v40; // edi@113
  PgSprData *v41; // edi@117
  PgSprData *v42; // edi@121
  PgSprData *v43; // edi@125
  PgSprData *v44; // edi@129
  PgSprData *v45; // edi@133
  PgSprData *v46; // edi@137
  PgSprData *v47; // edi@141
  PgSprData *v48; // edi@145
  PgSprData *v49; // edi@149
  PgSprData *v50; // edi@153
  PgSprData *v51; // edi@157
  PgSprData *v52; // edi@161
  int v53; // edi@165
  NiTListItem<PartyMarkWin *> *v54; // ebx@165
  NiTListItem<PartyMarkWin *> *v55; // ST0C_4@166
  NiTListItem<NpcMarkWin *> *v56; // eax@167
  int v57; // edi@167
  NiTListItem<NpcMarkWin *> *v58; // ebx@167
  NiTListItem<NpcMarkWin *> *v59; // ST0C_4@168
  int v60; // edi@170
  NiTListItem<RaidMarkWin *> *v61; // ebx@170
  NiTListItem<RaidMarkWin *> *v62; // eax@170
  NiTListItem<RaidMarkWin *> *v63; // ST0C_4@171

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FullMapWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FullMapWin::_vftable_;
  v2 = (char *)&this->m_KQTeamMarkWinMap;
  this->m_KQTeamMarkWinMap.baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMap<unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_KQTeamMarkWinMap);
  *(_DWORD *)v2 = &NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(*((void **)v2 + 2));
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMap<unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMapMarkMap);
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMapMarkMap);
  operator delete__(v1->m_kMapMarkMap.baseclass_0.m_ppkHashTable);
  if ( *(_DWORD *)&v1->m_kVisibleControls.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kVisibleControls.baseclass_0.___u0.baseclass_0.dummy[0]);
  v3 = (int)&v1->m_kEnemyList;
  *(_DWORD *)&v1->m_kVisibleControls.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kVisibleControls.baseclass_0._Mylast = 0;
  v1->m_kVisibleControls.baseclass_0._Myend = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&PgTList<GTIScanMarkWin__>::_vftable_;
  v4 = v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4;
    v4 = v4->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 8))(&v1->m_kEnemyList, v5);
  }
  *(_DWORD *)&v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v3 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
  v6 = v1->m_spBluePos.m_pObject;
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
    v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spRedPos.m_pObject;
  if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) && v7 )
    v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = (int)&v1->m_kMobAreaList;
  v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&PgTList<MobAreaMarkWin__>::_vftable_;
  v9 = v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v9 )
  {
    v10 = v9;
    v9 = v9->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v8 + 8))(&v1->m_kMobAreaList, v10);
  }
  *(_DWORD *)&v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v8 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  if ( v1->m_kMapTitle.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_kMapTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_kMapTitle.baseclass_0._Myres = 15;
  v1->m_kMapTitle.baseclass_0._Mysize = 0;
  v1->m_kMapTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  _eh_vector_destructor_iterator_(
    v1->m_spQuestHelperNum,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v11 = v1->m_spQuestHelperNumBall.m_pObject;
  if ( v11 && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.m_uiRefCount) && v11 )
    v11->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v12 = (int)&v1->m_kQuestNumList;
  v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  v13 = v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v13 )
  {
    v14 = v13;
    v13 = v13->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v12 + 8))(&v1->m_kQuestNumList, v14);
  }
  *(_DWORD *)&v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v12 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  v15 = (int)&v1->m_kQuestBallList;
  v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&PgTList<QuestHelperMarkWin__>::_vftable_;
  v16 = v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v16 )
  {
    v17 = v16;
    v16 = v16->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v15 + 8))(&v1->m_kQuestBallList, v17);
  }
  *(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v15 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
  v18 = v1->m_spCaptureFlagSprData.m_pObject;
  if ( v18 && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.m_uiRefCount) && v18 )
    v18->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
  v19 = v1->m_spBlueWoodSprData.m_pObject;
  if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.m_uiRefCount) && v19 )
    v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
  v20 = v1->m_spRedWoodSprData.m_pObject;
  if ( v20 && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.m_uiRefCount) && v20 )
    v20->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
  v21 = v1->m_spMobDmgSprData.m_pObject;
  if ( v21 && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.m_uiRefCount) && v21 )
    v21->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
  v22 = v1->m_spMobNormalSprData.m_pObject;
  if ( v22 && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.m_uiRefCount) && v22 )
    v22->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
  v23 = v1->m_spMobChiefSprData.m_pObject;
  if ( v23 && !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.m_uiRefCount) && v23 )
    v23->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
  v24 = v1->m_spAutoRunMark.m_pObject;
  if ( v24 && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.m_uiRefCount) && v24 )
    v24->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
  v25 = v1->m_spFullMapTexProp.m_pObject;
  if ( v25
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
  v26 = v1->m_spFullMapGeom.m_pObject;
  if ( v26
    && !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v26 )
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v26,
      1u);
  v27 = v1->m_spWarpGray.m_pObject;
  if ( v27 && !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.m_uiRefCount) && v27 )
    v27->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
  v28 = v1->m_spWarpBlue.m_pObject;
  if ( v28 && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.m_uiRefCount) && v28 )
    v28->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
  v29 = v1->m_spWarpRed.m_pObject;
  if ( v29 && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.m_uiRefCount) && v29 )
    v29->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
  v30 = v1->m_spFlagBlue.m_pObject;
  if ( v30 && !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.m_uiRefCount) && v30 )
    v30->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
  v31 = v1->m_spFlagRed.m_pObject;
  if ( v31 && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.m_uiRefCount) && v31 )
    v31->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
  v32 = v1->m_spFlagNormal.m_pObject;
  if ( v32 && !InterlockedDecrement((volatile LONG *)&v32->baseclass_0.m_uiRefCount) && v32 )
    v32->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
  v33 = v1->m_spMainCharSprDataSecond.m_pObject;
  if ( v33 && !InterlockedDecrement((volatile LONG *)&v33->baseclass_0.m_uiRefCount) && v33 )
    v33->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
  v34 = v1->m_spMiniHouseSprData.m_pObject;
  if ( v34 && !InterlockedDecrement((volatile LONG *)&v34->baseclass_0.m_uiRefCount) && v34 )
    v34->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
  v35 = v1->m_spLinkTownSprData.m_pObject;
  if ( v35 && !InterlockedDecrement((volatile LONG *)&v35->baseclass_0.m_uiRefCount) && v35 )
    v35->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
  v36 = v1->m_spLinkSprData.m_pObject;
  if ( v36 && !InterlockedDecrement((volatile LONG *)&v36->baseclass_0.m_uiRefCount) && v36 )
    v36->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
  v37 = v1->m_spMainCharSprData.m_pObject;
  if ( v37 && !InterlockedDecrement((volatile LONG *)&v37->baseclass_0.m_uiRefCount) && v37 )
    v37->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
  QuestStateImage::_QuestStateImage(&v1->m_kQuestStateImg);
  v38 = v1->m_spNPCWTitleSprData.m_pObject;
  if ( v38 && !InterlockedDecrement((volatile LONG *)&v38->baseclass_0.m_uiRefCount) && v38 )
    v38->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
  v39 = v1->m_spNPCNormalSprData.m_pObject;
  if ( v39 && !InterlockedDecrement((volatile LONG *)&v39->baseclass_0.m_uiRefCount) && v39 )
    v39->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v39, 1u);
  v40 = v1->m_spNPCItemSprData.m_pObject;
  if ( v40 && !InterlockedDecrement((volatile LONG *)&v40->baseclass_0.m_uiRefCount) && v40 )
    v40->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v40, 1u);
  v41 = v1->m_spNPCTemplarSprData.m_pObject;
  if ( v41 && !InterlockedDecrement((volatile LONG *)&v41->baseclass_0.m_uiRefCount) && v41 )
    v41->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v41, 1u);
  v42 = v1->m_spNPCHelpSprData.m_pObject;
  if ( v42 && !InterlockedDecrement((volatile LONG *)&v42->baseclass_0.m_uiRefCount) && v42 )
    v42->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v42, 1u);
  v43 = v1->m_spNPCSkillSprData.m_pObject;
  if ( v43 && !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.m_uiRefCount) && v43 )
    v43->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
  v44 = v1->m_spNPCSmithSprData.m_pObject;
  if ( v44 && !InterlockedDecrement((volatile LONG *)&v44->baseclass_0.m_uiRefCount) && v44 )
    v44->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v44, 1u);
  v45 = v1->m_spNPCFurnitureSprData.m_pObject;
  if ( v45 && !InterlockedDecrement((volatile LONG *)&v45->baseclass_0.m_uiRefCount) && v45 )
    v45->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
  v46 = v1->m_spNPCMineSprData.m_pObject;
  if ( v46 && !InterlockedDecrement((volatile LONG *)&v46->baseclass_0.m_uiRefCount) && v46 )
    v46->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
  v47 = v1->m_spNPCKingdomSprData.m_pObject;
  if ( v47 && !InterlockedDecrement((volatile LONG *)&v47->baseclass_0.m_uiRefCount) && v47 )
    v47->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
  v48 = v1->m_spNPCStoreSprData.m_pObject;
  if ( v48 && !InterlockedDecrement((volatile LONG *)&v48->baseclass_0.m_uiRefCount) && v48 )
    v48->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
  v49 = v1->m_spNPCQuestSprData.m_pObject;
  if ( v49 && !InterlockedDecrement((volatile LONG *)&v49->baseclass_0.m_uiRefCount) && v49 )
    v49->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v49, 1u);
  v50 = v1->m_spNPCGuildSprData.m_pObject;
  if ( v50 && !InterlockedDecrement((volatile LONG *)&v50->baseclass_0.m_uiRefCount) && v50 )
    v50->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v50, 1u);
  v51 = v1->m_spNPCSoulStoneSprData.m_pObject;
  if ( v51 && !InterlockedDecrement((volatile LONG *)&v51->baseclass_0.m_uiRefCount) && v51 )
    v51->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v51, 1u);
  v52 = v1->m_spPartySprData.m_pObject;
  if ( v52 && !InterlockedDecrement((volatile LONG *)&v52->baseclass_0.m_uiRefCount) && v52 )
    v52->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
  v53 = (int)&v1->m_kPartyList;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&PgTList<PartyMarkWin__>::_vftable_;
  v54 = v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v54 )
  {
    v55 = v54;
    v54 = v54->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v53 + 8))(&v1->m_kPartyList, v55);
  }
  v56 = 0;
  *(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v53 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
  v57 = (int)&v1->m_kNpcList;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&PgTList<NpcMarkWin__>::_vftable_;
  v58 = v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v58 )
  {
    do
    {
      v59 = v58;
      v58 = v58->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v57 + 8))(&v1->m_kNpcList, v59);
    }
    while ( v58 );
    v56 = 0;
  }
  *(_DWORD *)&v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v56;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v56;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v56;
  *(_DWORD *)v57 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
  v60 = (int)&v1->m_kRaidList;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&PgTList<RaidMarkWin__>::_vftable_;
  v61 = v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v62 = 0;
  if ( v61 )
  {
    do
    {
      v63 = v61;
      v61 = v61->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v60 + 8))(&v1->m_kRaidList, v63);
    }
    while ( v61 );
    v62 = 0;
  }
  *(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v62;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v62;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v62;
  *(_DWORD *)v60 = &NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 9962B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);
// 9962D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);
// 99637C: using guessed type int (__thiscall *PgTList_NpcMarkWin _____vftable_)(void *p, char);
// 99638C: using guessed type int (__thiscall *NiTMap_unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 9963AC: using guessed type int (__thiscall *NiTMap_unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 9963FC: using guessed type int (__thiscall *PgTList_RaidMarkWin _____vftable_)(void *p, char);
// 99640C: using guessed type int (__thiscall *PgTList_PartyMarkWin _____vftable_)(void *p, char);
// 99641C: using guessed type int (__thiscall *PgTList_GTIScanMarkWin _____vftable_)(void *p, char);
// 99642C: using guessed type int (__thiscall *PgTList_QuestHelperMarkWin _____vftable_)(void *p, char);
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);
// 99644C: using guessed type int (__thiscall *PgTList_MobAreaMarkWin _____vftable_)(void *p, char);
// 996468: using guessed type int (__stdcall *FullMapWin___vftable_)(int uiFlags);
// 996484: using guessed type int (__thiscall *FullMapWin___vftable_)(void *p, char);

//----- (00506990) --------------------------------------------------------
FullMapWin *__cdecl FullMapWin::CreateWin(MiniMapWin *pkMiniMap, PgFrameWork *pkFrameWork)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  FullMapWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x93Cu);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    FullMapWin::FullMapWin((FullMapWin *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, MiniMapWin *, PgFrameWork *))(*(_DWORD *)v4 + 540))(
                          v4,
                          pkMiniMap,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (FullMapWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}

//----- (00506AC0) --------------------------------------------------------
InvisibleWin *__cdecl InvisibleWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, char *pcName, unsigned int uiExtStyle)
{
  void *v7; // eax@1
  void *v8; // esi@1
  PgWin *v9; // edi@8
  InvisibleWin *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x124u);
  v8 = v7;
  result.m_pObject = (PgWin *)v7;
  v12 = 0;
  if ( v7 )
  {
    PgWin::PgWin((PgWin *)v7);
    *(_DWORD *)v8 = &InvisibleWin::_vftable_;
    *((_DWORD *)v8 + 58) = &InvisibleWin::_vftable_;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)v8 + 1);
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, unsigned int, PgWin *, char *, unsigned int))(*(_DWORD *)v8 + 336))(
                          v8,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          pcName,
                          uiExtStyle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = (InvisibleWin *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}
// 99602C: using guessed type int (__stdcall *InvisibleWin___vftable_)(int uiFlags);
// 99604C: using guessed type int (__thiscall *InvisibleWin___vftable_)(void *p, char);

//----- (00506C20) --------------------------------------------------------
void __thiscall FullMapWin::InitVisibleControls(FullMapWin *this)
{
  FullMapWin *v1; // ebx@1
  char *v2; // esi@1
  unsigned int v3; // eax@2
  int v4; // edi@2
  int v5; // edx@3
  int v6; // ecx@4
  signed int v7; // edi@4
  int v8; // eax@5
  int v9; // eax@6
  int v10; // ecx@6
  unsigned int v11; // ecx@8
  int v12; // eax@13
  int v13; // ecx@15
  int v14; // eax@16
  int v15; // eax@17
  int v16; // ecx@17
  unsigned int v17; // ecx@19
  int v18; // eax@24
  int v19; // eax@26
  int v20; // edi@28
  unsigned int v21; // eax@28
  int v22; // edx@29
  int v23; // ecx@30
  signed int v24; // edi@30
  int v25; // eax@31
  int v26; // eax@32
  int v27; // ecx@32
  unsigned int v28; // ecx@34
  int v29; // eax@40
  int v30; // ecx@42
  int v31; // eax@43
  int v32; // eax@44
  int v33; // ecx@44
  unsigned int v34; // ecx@46
  int v35; // eax@51
  unsigned int v36; // eax@53
  int v37; // edi@53
  int v38; // edx@54
  int v39; // ecx@55
  signed int v40; // edi@55
  int v41; // eax@56
  int v42; // eax@57
  int v43; // ecx@57
  unsigned int v44; // ecx@59
  int v45; // eax@64
  int v46; // ecx@66
  int v47; // eax@67
  int v48; // eax@68
  int v49; // ecx@68
  unsigned int v50; // ecx@70
  int v51; // eax@75
  int v52; // eax@77
  char *v53; // [sp+8h] [bp-14h]@1
  void *i; // [sp+Ch] [bp-10h]@1
  int *v55; // [sp+10h] [bp-Ch]@1
  PgWinSpr **v56; // [sp+14h] [bp-8h]@2
  FullMapWin *v57; // [sp+18h] [bp-4h]@1

  v1 = this;
  v2 = (char *)&this->m_kVisibleControls;
  v57 = this;
  v53 = (char *)&this->m_pkFullMapViewWin;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&this->m_kVisibleControls,
    (const unsigned int *)&this->m_pkFullMapViewWin);
  i = v1->m_pkSlides;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkQuestSlideBar->m_pkSlidePoint;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkMapSlideBar;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkQuestSlideListWin;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkMapSlideListWin;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkWorldMapBut;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkIndexBtn[0];
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkIndexBtn[1];
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkQuestListBtn[0];
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkQuestListBtn[1];
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkIndexPanel[1];
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkMapListPanel[0];
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = v1->m_pkMapListPanel[1];
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)v2,
    (const unsigned int *)&i);
  i = 0;
  v55 = (int *)v1->m_pkGridSprWin;
  do
  {
    v3 = *((_DWORD *)v2 + 1);
    v4 = *v55;
    v56 = (PgWinSpr **)*v55;
    if ( (unsigned int)&v56 >= v3 || (v5 = *(_DWORD *)v2, *(_DWORD *)v2 > (unsigned int)&v56) )
    {
      v13 = *((_DWORD *)v2 + 2);
      if ( v3 == v13 )
      {
        v14 = (signed int)(v3 - *(_DWORD *)v2) >> 2;
        if ( (unsigned int)v14 > 0x3FFFFFFE )
LABEL_35:
          std::_Xlength_error("vector<T> too long");
        v15 = v14 + 1;
        v16 = (v13 - *(_DWORD *)v2) >> 2;
        if ( v15 > (unsigned int)v16 )
        {
          if ( 1073741823 - ((unsigned int)v16 >> 1) >= v16 )
            v17 = ((unsigned int)v16 >> 1) + v16;
          else
            v17 = 0;
          if ( v17 < v15 )
            v17 = v15;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v2,
            v17);
          v1 = v57;
        }
      }
      v18 = *((_DWORD *)v2 + 1);
      if ( v18 )
        *(_DWORD *)v18 = v4;
    }
    else
    {
      v6 = *((_DWORD *)v2 + 2);
      v7 = (signed int)((char *)&v56 - v5) >> 2;
      if ( v3 == v6 )
      {
        v8 = (signed int)(v3 - v5) >> 2;
        if ( (unsigned int)v8 > 0x3FFFFFFE )
          goto LABEL_35;
        v9 = v8 + 1;
        v10 = (v6 - v5) >> 2;
        if ( v9 > (unsigned int)v10 )
        {
          if ( 1073741823 - ((unsigned int)v10 >> 1) >= v10 )
            v11 = ((unsigned int)v10 >> 1) + v10;
          else
            v11 = 0;
          if ( v11 < v9 )
            v11 = v9;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v2,
            v11);
          v1 = v57;
        }
      }
      v12 = *((_DWORD *)v2 + 1);
      if ( v12 )
        *(_DWORD *)v12 = *(_DWORD *)(*(_DWORD *)v2 + 4 * v7);
    }
    v19 = (int)i;
    *((_DWORD *)v2 + 1) += 4;
    ++v55;
    i = (void *)(v19 + 1);
  }
  while ( (unsigned int)(v19 + 1) < 0x16 );
  i = 0;
  v56 = v1->m_pkQuestListNum;
  do
  {
    v20 = (int)*(v56 - 40);
    v21 = *((_DWORD *)v2 + 1);
    v55 = (int *)*(v56 - 40);
    if ( (unsigned int)&v55 >= v21 || (v22 = *(_DWORD *)v2, *(_DWORD *)v2 > (unsigned int)&v55) )
    {
      v30 = *((_DWORD *)v2 + 2);
      if ( v21 == v30 )
      {
        v31 = (signed int)(v21 - *(_DWORD *)v2) >> 2;
        if ( (unsigned int)v31 > 0x3FFFFFFE )
          goto LABEL_35;
        v32 = v31 + 1;
        v33 = (v30 - *(_DWORD *)v2) >> 2;
        if ( v32 > (unsigned int)v33 )
        {
          if ( 1073741823 - ((unsigned int)v33 >> 1) >= v33 )
            v34 = ((unsigned int)v33 >> 1) + v33;
          else
            v34 = 0;
          if ( v34 < v32 )
            v34 = v32;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v2,
            v34);
          v1 = v57;
        }
      }
      v35 = *((_DWORD *)v2 + 1);
      if ( v35 )
        *(_DWORD *)v35 = v20;
    }
    else
    {
      v23 = *((_DWORD *)v2 + 2);
      v24 = (signed int)((char *)&v55 - v22) >> 2;
      if ( v21 == v23 )
      {
        v25 = (signed int)(v21 - v22) >> 2;
        if ( (unsigned int)v25 > 0x3FFFFFFE )
          goto LABEL_35;
        v26 = v25 + 1;
        v27 = (v23 - v22) >> 2;
        if ( v26 > (unsigned int)v27 )
        {
          if ( 1073741823 - ((unsigned int)v27 >> 1) >= v27 )
            v28 = ((unsigned int)v27 >> 1) + v27;
          else
            v28 = 0;
          if ( v28 < v26 )
            v28 = v26;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v2,
            v28);
          v1 = v57;
        }
      }
      v29 = *((_DWORD *)v2 + 1);
      if ( v29 )
        *(_DWORD *)v29 = *(_DWORD *)(*(_DWORD *)v2 + 4 * v24);
    }
    *((_DWORD *)v2 + 1) += 4;
    v36 = *((_DWORD *)v2 + 1);
    v37 = (int)*v56;
    v55 = (int *)*v56;
    if ( (unsigned int)&v55 >= v36 || (v38 = *(_DWORD *)v2, *(_DWORD *)v2 > (unsigned int)&v55) )
    {
      v46 = *((_DWORD *)v2 + 2);
      if ( v36 == v46 )
      {
        v47 = (signed int)(v36 - *(_DWORD *)v2) >> 2;
        if ( (unsigned int)v47 > 0x3FFFFFFE )
          goto LABEL_35;
        v48 = v47 + 1;
        v49 = (v46 - *(_DWORD *)v2) >> 2;
        if ( v48 > (unsigned int)v49 )
        {
          if ( 1073741823 - ((unsigned int)v49 >> 1) >= v49 )
            v50 = ((unsigned int)v49 >> 1) + v49;
          else
            v50 = 0;
          if ( v50 < v48 )
            v50 = v48;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v2,
            v50);
          v1 = v57;
        }
      }
      v51 = *((_DWORD *)v2 + 1);
      if ( v51 )
        *(_DWORD *)v51 = v37;
    }
    else
    {
      v39 = *((_DWORD *)v2 + 2);
      v40 = (signed int)((char *)&v55 - v38) >> 2;
      if ( v36 == v39 )
      {
        v41 = (signed int)(v36 - v38) >> 2;
        if ( (unsigned int)v41 > 0x3FFFFFFE )
          goto LABEL_35;
        v42 = v41 + 1;
        v43 = (v39 - v38) >> 2;
        if ( v42 > (unsigned int)v43 )
        {
          if ( 1073741823 - ((unsigned int)v43 >> 1) >= v43 )
            v44 = ((unsigned int)v43 >> 1) + v43;
          else
            v44 = 0;
          if ( v44 < v42 )
            v44 = v42;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v2,
            v44);
          v1 = v57;
        }
      }
      v45 = *((_DWORD *)v2 + 1);
      if ( v45 )
        *(_DWORD *)v45 = *(_DWORD *)(*(_DWORD *)v2 + 4 * v40);
    }
    v52 = (int)i;
    *((_DWORD *)v2 + 1) += 4;
    ++v56;
    i = (void *)(v52 + 1);
  }
  while ( (unsigned int)(v52 + 1) < 0x28 );
  ((void (__stdcall *)(_DWORD))v1->m_pkGridNumSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v53 + 240))(0);
}

//----- (00507030) --------------------------------------------------------
void __thiscall FullMapWin::ResetView(FullMapWin *this, bool bTextureChange)
{
  FullMapWin *v2; // esi@1
  MaskedWin *v3; // ecx@1
  NiSourceTexture *v4; // ebx@3
  Name3 *v5; // eax@4
  MapViewInfo *v6; // eax@5
  MapViewInfo *v7; // edi@5
  int v8; // eax@6
  int v9; // ecx@6
  const char *v10; // eax@7
  const char *v11; // ecx@7
  char v12; // dl@8
  int v13; // edi@10
  int v14; // ebx@10
  double v15; // st7@10
  double v16; // st7@10
  double v17; // st6@12
  NiTexturingProperty *v18; // ecx@14
  Name3 result; // [sp+1Ch] [bp-10h]@4
  int v20; // [sp+28h] [bp-4h]@6
  NiTexture *pkMapTexture; // [sp+34h] [bp+8h]@3

  v2 = this;
  v3 = this->m_pkMiniMapWin->m_pkMiniMapWin;
  if ( v3 )
  {
    if ( bTextureChange )
    {
      v4 = World::GetMiniMapTexture(&g_kWorld);
      pkMapTexture = (NiTexture *)v4;
    }
    else
    {
      pkMapTexture = MaskedWin::GetBaseTexture(v3);
      v5 = World::GetMapName(&g_kWorld, &result);
      v4 = (NiSourceTexture *)pkMapTexture;
      *(_DWORD *)&v2->m_kSelectedMapName.n3_name[0] = *(_DWORD *)&v5->n3_name[0];
      *(_DWORD *)&v2->m_kSelectedMapName.n3_name[4] = *(_DWORD *)&v5->n3_name[4];
      *(_DWORD *)&v2->m_kSelectedMapName.n3_name[8] = *(_DWORD *)&v5->n3_name[8];
    }
    v6 = MapViewInfoTab::GetByMapName(&v2->m_kSelectedMapName);
    v7 = v6;
    if ( v6 )
    {
      v2->m_fFullMapScale = v6->MiniMapScale;
      v8 = v6->EndY;
      v9 = v7->EndX;
      v20 = v7->StartY;
      v2->m_kMapViewRect.left = v7->StartX;
      v2->m_kMapViewRect.top = v20;
      v2->m_kMapViewRect.right = v9;
      v2->m_kMapViewRect.bottom = v8;
    }
    v10 = MapInfoTab::GetByMapName(&v2->m_kSelectedMapName)->Name;
    v11 = v10;
    v20 = (int)(v10 + 1);
    do
      v12 = *v11++;
    while ( v12 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v2->m_kMapTitle,
      v10,
      (unsigned int)&v11[-v20]);
    v2->m_kSelectedMapID = v7->ID;
    FullMapWin::CenterPlaceSelectedMap(v2);
    if ( v4 )
    {
      ((void (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v4);
      ((void (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
      v13 = v2->m_kMapViewRect.right - v2->m_kMapViewRect.left + 1;
      v14 = v2->m_kMapViewRect.bottom - v2->m_kMapViewRect.top + 1;
      NiScreenElementsData::SetTextures(
        (NiScreenElementsData *)v2->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
        0,
        0,
        0.0,
        0.0,
        1.0,
        1.0);
      NiScreenElementsData::SetRectangle(
        (NiScreenElementsData *)v2->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
        0,
        0.0,
        0.0,
        512.0,
        512.0);
      v15 = (double)v2->m_kMapViewRect.left;
      v20 = v13;
      v2->m_fMapOffsetX = v15;
      v2->m_fMapOffsetY = (double)v2->m_kMapViewRect.top;
      v16 = (double)v20;
      if ( v13 < 0 )
        v16 = v16 + 4294967300.0;
      v20 = v14;
      v2->m_fMapScaleX = 512.0 / v16;
      v17 = (double)v20;
      if ( v14 < 0 )
        v17 = v17 + 4294967300.0;
      v18 = v2->m_spFullMapTexProp.m_pObject;
      v2->m_fMapScaleY = 512.0 / v17;
      NiTexturingProperty::SetBaseTexture(v18, pkMapTexture);
      v2->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject->m_usDirtyFlags |= 9u;
      NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00507250) --------------------------------------------------------
void __thiscall FullMapWin::AddQuestList(FullMapWin *this)
{
  FullMapWin *v1; // esi@1
  int v2; // eax@2
  int v3; // ecx@4
  int v4; // eax@5
  QUEST_DATA *v5; // ebx@9
  PLAYER_QUEST_STATUS v6; // edi@10
  bool v7; // al@10
  const char *v8; // eax@13
  const char *v9; // eax@14
  int v10; // eax@17
  char v11; // cl@18
  int v12; // edi@20
  const char *v13; // eax@20
  char *v14; // eax@25
  int v15; // edi@25
  const char *v16; // eax@25
  unsigned __int16 *v17; // ebx@28
  const char *v18; // eax@30
  const char *v19; // eax@31
  int v20; // eax@34
  char v21; // cl@35
  int v22; // edi@37
  const char *v23; // eax@37
  const char *v24; // eax@43
  const char *v25; // eax@44
  int v26; // eax@47
  char v27; // cl@48
  int v28; // edi@50
  const char *v29; // eax@50
  QuestHelperMgr *v30; // edi@54
  const char *v31; // eax@54
  int v32; // edi@55
  const char *v33; // eax@55
  const char *v34; // eax@58
  const char *v35; // eax@59
  int v36; // eax@62
  char v37; // cl@63
  int v38; // edi@65
  const char *v39; // eax@65
  CQuest *pQuest; // [sp+0h] [bp-D8h]@1
  CQuestData *pQData; // [sp+4h] [bp-D4h]@1
  int kIter; // [sp+8h] [bp-D0h]@4
  signed __int16 OldQuest_ID; // [sp+Ch] [bp-CCh]@2
  signed int dwData; // [sp+10h] [bp-C8h]@3
  unsigned int *v45; // [sp+14h] [bp-C4h]@41
  unsigned __int16 *v46; // [sp+18h] [bp-C0h]@41
  signed int i; // [sp+1Ch] [bp-BCh]@28
  signed int ia; // [sp+1Ch] [bp-BCh]@41
  bool bStartReward; // [sp+23h] [bp-B5h]@10
  QUEST_DATA *lpQuest; // [sp+24h] [bp-B4h]@9
  QuestHelperMgr *pkMgr; // [sp+28h] [bp-B0h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText; // [sp+2Ch] [bp-ACh]@13
  char acResult[128]; // [sp+48h] [bp-90h]@14
  unsigned int v54; // [sp+C8h] [bp-10h]@1
  int v55; // [sp+D4h] [bp-4h]@13
  int v56; // [sp+D8h] [bp+0h]@1

  v54 = (unsigned int)&v56 ^ __security_cookie;
  v1 = this;
  pQuest = QuestDataMgr::GetQuest();
  pQData = pQuest->m_pQuestData;
  SlideListWin::RemoveAllList(v1->m_pkQuestSlideListWin);
  pkMgr = QuestHelperMgr::GetInstance();
  if ( pkMgr )
  {
    v2 = dword_A83278;
    OldQuest_ID = -1;
    if ( dword_A83278 )
    {
      dwData = 65535;
      do
      {
        v3 = *(_DWORD *)(v2 + 8);
        kIter = *(_DWORD *)v2;
        if ( v3 )
        {
          v4 = *(_DWORD *)(v3 + 4);
          if ( v4 )
          {
            if ( *(_DWORD *)(v4 + 4) == *(_DWORD *)&v1->m_kSelectedMapName.n3_name[0] )
            {
              if ( *(_DWORD *)(v4 + 8) == *(_DWORD *)&v1->m_kSelectedMapName.n3_name[4] )
              {
                if ( *(_DWORD *)(v4 + 12) == *(_DWORD *)&v1->m_kSelectedMapName.n3_name[8] )
                {
                  v5 = *(QUEST_DATA **)v3;
                  lpQuest = *(QUEST_DATA **)v3;
                  if ( OldQuest_ID != *(_WORD *)(*(_DWORD *)v3 + 4) )
                  {
                    OldQuest_ID = v5->ID;
                    v6 = CQuest::GetNewQuestStatus(pQuest, v5->ID);
                    v7 = QuestHelperMgr::IsStartRewardQuest(pkMgr, v5);
                    bStartReward = v7;
                    if ( v6 != 8 || v7 || v5->End.bLevel )
                    {
                      kText.baseclass_0._Myres = 15;
                      kText.baseclass_0._Mysize = 0;
                      kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                      v55 = 0;
                      v8 = CQuestData::GetQuestName(pQData, v5->ID);
                      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                        &kText,
                        v8,
                        strlen(v8));
                      if ( kText.baseclass_0._Mysize )
                      {
                        memset(acResult, 0, 0x80u);
                        v9 = *(const char **)&kText;
                        if ( kText.baseclass_0._Myres < 0x10 )
                          v9 = (const char *)&kText;
                        if ( FullMapWin::AbbreviateText(v1, acResult, v9, 24) )
                        {
                          v10 = (int)acResult;
                          do
                            v11 = *(_BYTE *)v10++;
                          while ( v11 );
                          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                            &kText,
                            acResult,
                            v10 - (_DWORD)&acResult[1]);
                        }
                        QuestHelperMgr::ClearConditionText(pkMgr);
                        v12 = SlideListWin::AddText(v1->m_pkQuestSlideListWin, &byte_995922);
                        v13 = *(const char **)&kText;
                        if ( kText.baseclass_0._Myres < 0x10 )
                          v13 = (const char *)&kText;
                        SlideListWin::SetText(v1->m_pkQuestSlideListWin, v12, 1u, v13);
                        SlideListWin::SetFontColor(v1->m_pkQuestSlideListWin, v12, 255, 255, 0);
                        SlideListWin::SetData(v1->m_pkQuestSlideListWin, v12, dwData++);
                        if ( bStartReward == 1
                          && !v5->End.bLevel
                          && IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v5->End.NPCMobList[0].NPCMobID, 1) )
                        {
                          v14 = fs("- NPC %s");
                          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(&kText, v14);
                          v15 = SlideListWin::AddText(v1->m_pkQuestSlideListWin, &byte_995923);
                          v16 = *(const char **)&kText;
                          if ( kText.baseclass_0._Myres < 0x10 )
                            v16 = (const char *)&kText;
                          SlideListWin::SetText(v1->m_pkQuestSlideListWin, v15, 1u, v16);
                          SlideListWin::SetFontColor(v1->m_pkQuestSlideListWin, v15, 255, 255, 255);
                          SlideListWin::SetData(v1->m_pkQuestSlideListWin, v15, v5->End.NPCMobList[0].NPCMobID);
                        }
                        i = 0;
                        v17 = &lpQuest->End.NPCMobList[0].NPCMobID;
                        do
                        {
                          if ( !*((_BYTE *)v17 - 2) )
                            break;
                          QuestHelperMgr::AddMobConditionText(pkMgr, lpQuest, &kText, *v17, 1);
                          v18 = QuestHelperMgr::GetConditionText(pkMgr);
                          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                            &kText,
                            v18,
                            strlen(v18));
                          if ( kText.baseclass_0._Mysize )
                          {
                            memset(acResult, 0, 0x80u);
                            v19 = *(const char **)&kText;
                            if ( kText.baseclass_0._Myres < 0x10 )
                              v19 = (const char *)&kText;
                            if ( FullMapWin::AbbreviateText(v1, acResult, v19, 24) )
                            {
                              v20 = (int)acResult;
                              do
                                v21 = *(_BYTE *)v20++;
                              while ( v21 );
                              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                                &kText,
                                acResult,
                                v20 - (_DWORD)&acResult[1]);
                            }
                            v22 = SlideListWin::AddText(v1->m_pkQuestSlideListWin, &byte_995932);
                            v23 = *(const char **)&kText;
                            if ( kText.baseclass_0._Myres < 0x10 )
                              v23 = (const char *)&kText;
                            SlideListWin::SetText(v1->m_pkQuestSlideListWin, v22, 1u, v23);
                            SlideListWin::SetFontColor(v1->m_pkQuestSlideListWin, v22, 255, 255, 255);
                            SlideListWin::SetData(v1->m_pkQuestSlideListWin, v22, *v17);
                            QuestHelperMgr::ClearConditionText(pkMgr);
                          }
                          v17 += 4;
                          ++i;
                        }
                        while ( i < 5 );
                        ia = 0;
                        v45 = &lpQuest->Action[0].IfTarget;
                        v46 = &lpQuest->End.ItemList[0].ItemID;
                        do
                        {
                          if ( !*((_BYTE *)v46 - 2) )
                            break;
                          QuestHelperMgr::AddItemConditionText(pkMgr, lpQuest, &kText, *v46, 1);
                          v24 = QuestHelperMgr::GetConditionText(pkMgr);
                          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                            &kText,
                            v24,
                            strlen(v24));
                          if ( kText.baseclass_0._Mysize )
                          {
                            memset(acResult, 0, 0x80u);
                            v25 = *(const char **)&kText;
                            if ( kText.baseclass_0._Myres < 0x10 )
                              v25 = (const char *)&kText;
                            if ( FullMapWin::AbbreviateText(v1, acResult, v25, 20) )
                            {
                              v26 = (int)acResult;
                              do
                                v27 = *(_BYTE *)v26++;
                              while ( v27 );
                              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                                &kText,
                                acResult,
                                v26 - (_DWORD)&acResult[1]);
                            }
                            v28 = SlideListWin::AddText(v1->m_pkQuestSlideListWin, &byte_995933);
                            v29 = *(const char **)&kText;
                            if ( kText.baseclass_0._Myres < 0x10 )
                              v29 = (const char *)&kText;
                            SlideListWin::SetText(v1->m_pkQuestSlideListWin, v28, 1u, v29);
                            SlideListWin::SetFontColor(v1->m_pkQuestSlideListWin, v28, 255, 255, 255);
                            SlideListWin::SetData(v1->m_pkQuestSlideListWin, v28, *v45);
                            QuestHelperMgr::ClearConditionText(pkMgr);
                          }
                          v46 += 3;
                          v45 += 8;
                          ++ia;
                        }
                        while ( ia < 5 );
                        v30 = pkMgr;
                        QuestHelperMgr::AddLevelConditionText(pkMgr, lpQuest, &kText);
                        v31 = QuestHelperMgr::GetConditionText(pkMgr);
                        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                          &kText,
                          v31,
                          strlen(v31));
                        if ( kText.baseclass_0._Mysize )
                        {
                          v32 = SlideListWin::AddText(v1->m_pkQuestSlideListWin, &byte_995949);
                          v33 = *(const char **)&kText;
                          if ( kText.baseclass_0._Myres < 0x10 )
                            v33 = (const char *)&kText;
                          SlideListWin::SetText(v1->m_pkQuestSlideListWin, v32, 1u, v33);
                          SlideListWin::SetFontColor(v1->m_pkQuestSlideListWin, v32, 255, 255, 255);
                          SlideListWin::SetData(v1->m_pkQuestSlideListWin, v32, lpQuest->End.NPCMobList[ia].NPCMobID);
                          QuestHelperMgr::ClearConditionText(pkMgr);
                          v30 = pkMgr;
                        }
                        QuestHelperMgr::AddLocationConditionText(v30, lpQuest, &kText);
                        v34 = QuestHelperMgr::GetConditionText(v30);
                        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                          &kText,
                          v34,
                          strlen(v34));
                        if ( kText.baseclass_0._Mysize )
                        {
                          memset(acResult, 0, 0x80u);
                          v35 = *(const char **)&kText;
                          if ( kText.baseclass_0._Myres < 0x10 )
                            v35 = (const char *)&kText;
                          if ( FullMapWin::AbbreviateText(v1, acResult, v35, 20) )
                          {
                            v36 = (int)acResult;
                            do
                              v37 = *(_BYTE *)v36++;
                            while ( v37 );
                            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                              &kText,
                              acResult,
                              v36 - (_DWORD)&acResult[1]);
                          }
                          v38 = SlideListWin::AddText(v1->m_pkQuestSlideListWin, byte_99594A);
                          v39 = *(const char **)&kText;
                          if ( kText.baseclass_0._Myres < 0x10 )
                            v39 = (const char *)&kText;
                          SlideListWin::SetText(v1->m_pkQuestSlideListWin, v38, 1u, v39);
                          SlideListWin::SetFontColor(v1->m_pkQuestSlideListWin, v38, 255, 255, 255);
                          QuestHelperMgr::ClearConditionText(pkMgr);
                        }
                        SlideListWin::AddText(v1->m_pkQuestSlideListWin, "\n");
                      }
                      v55 = -1;
                      if ( kText.baseclass_0._Myres >= 0x10 )
                        operator delete(*(void **)&kText);
                      kText.baseclass_0._Myres = 15;
                      kText.baseclass_0._Mysize = 0;
                      kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                    }
                  }
                }
              }
            }
          }
        }
        v2 = kIter;
      }
      while ( kIter );
    }
    SlideListWin::AlignText(v1->m_pkQuestSlideListWin, 4u);
  }
}
// A83278: using guessed type int dword_A83278;
// A85C00: using guessed type int __security_cookie;

//----- (00507A80) --------------------------------------------------------
void __thiscall FullMapWin::AddQuestHelper(FullMapWin *this)
{
  FullMapWin *v1; // edi@1
  QuestHelperMgr *v2; // eax@1
  QUEST_DATA **v3; // ebx@1
  int v4; // eax@2
  QUEST_DATA **v5; // esi@5
  QUEST_DATA *v6; // ebx@6
  int v7; // eax@13
  double v8; // st7@13
  QUEST_DATA *v9; // ecx@15
  QuestHelperMarkWin *v10; // esi@17
  QUEST_DATA *v11; // edx@17
  unsigned __int16 v12; // ST14_2@17
  const char *v13; // eax@17
  const char *v14; // ecx@17
  char v15; // dl@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@19
  char *v17; // ST14_4@21
  PgWin *v18; // eax@21
  PgWinSpr *v19; // eax@21
  int v20; // eax@21
  NiTListItem<QuestHelperMarkWin *> *v21; // ecx@21
  float v22; // edx@24
  PgWinSpr *v23; // eax@26
  void *v24; // esi@26
  void *(__thiscall *v25)(NiRefObject *, unsigned int); // eax@26
  int v26; // eax@26
  NiTListItem<PgWinSpr *> *v27; // ecx@26
  bool v28; // cf@29
  MobAreaMarkWin *v29; // esi@31
  int v30; // edx@31
  double v31; // st6@31
  int v32; // eax@33
  double v33; // st6@33
  double v34; // st7@35
  double v35; // st6@36
  NiRefObjectVtbl *v36; // edx@39
  unsigned int v37; // ST14_4@39
  PgWinSpr *v38; // eax@39
  PgWinSpr *v39; // eax@39
  float v40; // ecx@39
  NiRefObjectVtbl *v41; // edx@45
  NiRefObjectVtbl *v42; // edx@45
  PgWinSpr *v43; // eax@45
  int v44; // eax@46
  NiTListItem<MobAreaMarkWin *> *v45; // ecx@46
  NiTListItem<MobCoordinate *> *v46; // eax@49
  int v47; // ecx@50
  NiTListItem<MobCoordinate *> *v48; // edx@50
  NiTListItem<MobCoordinate *> *v49; // eax@54
  NiTListItem<MobCoordinate *> *v50; // esi@64
  NiTListItem<MobCoordinate *> *v51; // ST10_4@65
  unsigned int v52; // [sp-10h] [bp-88h]@1
  CQuest *pQuest; // [sp+0h] [bp-78h]@1
  int kIter; // [sp+4h] [bp-74h]@5
  NiPoint2 kPos; // [sp+8h] [bp-70h]@15
  QuestHelperMgr *pkMgr; // [sp+10h] [bp-68h]@1
  signed __int16 Quest_ID; // [sp+14h] [bp-64h]@2
  PgSprData **v58; // [sp+18h] [bp-60h]@3
  unsigned int uiAreaIndex; // [sp+1Ch] [bp-5Ch]@2
  PgTList<MobCoordinate *> kList; // [sp+20h] [bp-58h]@2
  PgSprData **v61; // [sp+30h] [bp-48h]@3
  __int64 v62; // [sp+34h] [bp-44h]@15
  signed int pkNumWin; // [sp+3Ch] [bp-3Ch]@2
  __int64 v64; // [sp+40h] [bp-38h]@13
  float fRange; // [sp+48h] [bp-30h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText; // [sp+4Ch] [bp-2Ch]@17
  unsigned int v67; // [sp+68h] [bp-10h]@1
  int v68; // [sp+74h] [bp-4h]@2
  int v69; // [sp+78h] [bp+0h]@1

  v67 = (unsigned int)&v69 ^ __security_cookie;
  v52 = (unsigned int)&v69 ^ __security_cookie;
  v1 = this;
  FullMapWin::ResetQuestHelper(this);
  pQuest = QuestDataMgr::GetQuest();
  v2 = QuestHelperMgr::GetInstance();
  v3 = 0;
  pkMgr = v2;
  if ( v2 )
  {
    v2->m_OldHandleNum = -1;
    uiAreaIndex = 0;
    Quest_ID = -1;
    pkNumWin = 65535;
    *(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
    kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&PgTList<MobCoordinate__>::_vftable_;
    v4 = dword_A83278;
    v68 = 0;
    if ( dword_A83278 )
    {
      v58 = v1->m_spMobArea;
      v61 = (PgSprData **)v1->m_spQuestHelperNum;
      while ( 1 )
      {
        v5 = *(QUEST_DATA ***)(v4 + 8);
        kIter = *(_DWORD *)v4;
        LODWORD(fRange) = v5;
        if ( v5 == v3 )
          goto LABEL_61;
        v6 = v5[1];
        if ( v6 )
        {
          if ( *(_DWORD *)&v6->ID != *(_DWORD *)&v1->m_kSelectedMapName.n3_name[0]
            || v6->NameID != *(_DWORD *)&v1->m_kSelectedMapName.n3_name[4]
            || v6->BrifingID != *(_DWORD *)&v1->m_kSelectedMapName.n3_name[8] )
            goto LABEL_59;
          if ( CQuest::GetNewQuestStatus(pQuest, (*v5)->ID) != 8
            || QuestHelperMgr::IsStartRewardQuest(pkMgr, *v5)
            || (*v5)->End.bLevel )
            break;
        }
LABEL_60:
        v3 = 0;
LABEL_61:
        if ( (QUEST_DATA **)kIter == v3 )
          goto LABEL_64;
        v4 = kIter;
      }
      v7 = *(_DWORD *)(&v6->nDailyQuestType + 1);
      *((float *)&v64 + 1) = (double)*(unsigned int *)&v6->Region;
      v8 = (double)*(signed int *)(&v6->nDailyQuestType + 1);
      if ( v7 < 0 )
        v8 = v8 + 4294967300.0;
      v9 = *v5;
      *((float *)&v62 + 1) = v8;
      kPos.x = *((float *)&v64 + 1);
      kPos.y = *((float *)&v62 + 1);
      if ( Quest_ID != v9->ID || (_WORD)pkNumWin != HIWORD(v6->nQuestDataSize) )
      {
        v10 = QuestHelperMarkWin::CreateWin(
                0,
                0,
                v1->m_spQuestHelperNumBall.m_pObject,
                v1->m_pkFullMapViewWin,
                v1->m_spAutoRunMark.m_pObject);
        QuestHelperMarkWin::SetQuestID(v10, *(_WORD *)(*LODWORD(fRange) + 4));
        QuestHelperMarkWin::SetMobID(v10, HIWORD(v6->nQuestDataSize));
        QuestHelperMarkWin::SetPos(v10, kPos);
        ((void (__thiscall *)(QuestHelperMarkWin *, _DWORD, unsigned int))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          v10,
          0,
          v52);
        kText.baseclass_0._Myres = 15;
        kText.baseclass_0._Mysize = 0;
        kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v11 = (QUEST_DATA *)*LODWORD(fRange);
        v12 = HIWORD(v6->nQuestDataSize);
        LOBYTE(v68) = 1;
        v13 = QuestHelperMgr::AddConditionText(pkMgr, v11, v12);
        v14 = v13;
        pkNumWin = (signed int)(v13 + 1);
        do
          v15 = *v14++;
        while ( v15 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &kText,
          v13,
          (unsigned int)&v14[-pkNumWin]);
        v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&kText;
        if ( kText.baseclass_0._Myres < 0x10 )
          v16 = &kText;
        v17 = (char *)v16;
        v18 = (PgWin *)MiniMapMarkWin::GetMarkWin(&v10->baseclass_0);
        PgWin::SetToolTipWinText(v18, v17);
        pkNumWin = (signed int)g_pkToolTipWin;
        v19 = MiniMapMarkWin::GetMarkWin(&v10->baseclass_0);
        v19->baseclass_0.m_pkToolTipWin = (PgWin *)pkNumWin;
        v20 = (int)v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *)&v1->m_kQuestBallList);
        *(_DWORD *)(v20 + 8) = v10;
        *(_DWORD *)v20 = 0;
        *(_DWORD *)(v20 + 4) = v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        v21 = v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        if ( v21 )
          v21->m_pkNext = (NiTListItem<QuestHelperMarkWin *> *)v20;
        else
          v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<QuestHelperMarkWin *> *)v20;
        ++*(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        v22 = fRange;
        v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<QuestHelperMarkWin *> *)v20;
        if ( Quest_ID == *(_WORD *)(*LODWORD(v22) + 4) )
          --v61;
        v23 = PgWinSpr::CreateWin(0, 0, *v61, v1->m_pkFullMapViewWin, 0, 0);
        v24 = v23;
        v25 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
        v52 = 0;
        pkNumWin = (signed int)v24;
        ((void (__thiscall *)(void *))v25)(v24);
        (*(void (__thiscall **)(void *, signed int))(*(_DWORD *)v24 + 256))(v24, 1);
        v26 = (int)v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *)&v1->m_kQuestNumList);
        *(_DWORD *)(v26 + 8) = v24;
        *(_DWORD *)v26 = 0;
        *(_DWORD *)(v26 + 4) = v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        v27 = v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        if ( v27 )
          v27->m_pkNext = (NiTListItem<PgWinSpr *> *)v26;
        else
          v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PgWinSpr *> *)v26;
        ++*(_DWORD *)&v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        ++v61;
        v28 = kText.baseclass_0._Myres < 0x10;
        v1->m_kQuestNumList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PgWinSpr *> *)v26;
        Quest_ID = *(_WORD *)(*LODWORD(fRange) + 4);
        pkNumWin = HIWORD(v6->nQuestDataSize);
        LOBYTE(v68) = 0;
        if ( !v28 )
          operator delete(*(void **)&kText);
      }
      v29 = MobAreaMarkWin::CreateWin(0, 0, *v58, v1->m_pkFullMapViewWin);
      MobAreaMarkWin::SetPos(v29, kPos);
      MobAreaMarkWin::SetMobID(v29, HIWORD(v6->nQuestDataSize));
      MobAreaMarkWin::SetQuestID(v29, *(_WORD *)(*LODWORD(fRange) + 4));
      ((void (__thiscall *)(MobAreaMarkWin *, _DWORD, unsigned int))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        v29,
        0,
        v52);
      v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v29,
        0);
      v30 = *(_DWORD *)&v6->Start.LevelMax;
      *((float *)&v62 + 1) = (double)*(unsigned int *)&v6->Start.bIsWaitListView
                           * 0.02
                           / v1->m_fFullMapScale
                           * v1->m_fMapScaleX;
      v31 = (double)*(signed int *)&v6->Start.LevelMax;
      if ( v30 < 0 )
        v31 = v31 + 4294967300.0;
      v32 = *(_DWORD *)&v6->Start.bItem;
      *((float *)&v64 + 1) = v31 * 0.02 / v1->m_fFullMapScale * v1->m_fMapScaleY;
      v33 = (double)*(signed int *)&v6->Start.bItem;
      if ( v32 < 0 )
        v33 = v33 + 4294967300.0;
      fRange = 0.02 * v33 / v1->m_fFullMapScale * v1->m_fMapScaleX;
      v34 = *((float *)&v62 + 1);
      if ( 0.0 == *((float *)&v62 + 1) )
      {
        v35 = *((float *)&v64 + 1);
        if ( *((float *)&v64 + 1) == 0.0 )
        {
          if ( fRange < 40.0 )
            fRange = 40.0;
          v64 = (signed __int64)fRange;
          v36 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v37 = (signed __int64)fRange;
          LODWORD(fRange) = (signed __int64)fRange;
          v36[38].__vecDelDtor((NiRefObject *)v29, v37);
          v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
            (NiRefObject *)v29,
            LODWORD(fRange));
          v38 = MiniMapMarkWin::GetMarkWin(&v29->baseclass_0);
          v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
            (NiRefObject *)v38,
            LODWORD(fRange));
          v39 = MiniMapMarkWin::GetMarkWin(&v29->baseclass_0);
          v40 = fRange;
          goto LABEL_46;
        }
      }
      else
      {
        v35 = *((float *)&v64 + 1);
      }
      if ( v34 < 40.0 )
      {
        *((float *)&v62 + 1) = 40.0;
        v34 = (float)40.0;
      }
      if ( v35 < 40.0 )
        *((float *)&v64 + 1) = 40.0;
      v62 = (signed __int64)v34;
      v41 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      HIDWORD(v62) = (signed __int64)v34;
      v41[38].__vecDelDtor((NiRefObject *)v29, (signed __int64)v34);
      v64 = (signed __int64)*((float *)&v64 + 1);
      v42 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      HIDWORD(v64) = v64;
      v42[39].__vecDelDtor((NiRefObject *)v29, v64);
      v43 = MiniMapMarkWin::GetMarkWin(&v29->baseclass_0);
      v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
        (NiRefObject *)v43,
        HIDWORD(v62));
      v39 = MiniMapMarkWin::GetMarkWin(&v29->baseclass_0);
      LODWORD(v40) = HIDWORD(v64);
LABEL_46:
      v52 = LODWORD(v40);
      ((void (__thiscall *)(PgWinSpr *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v39);
      v44 = (int)v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *)&v1->m_kMobAreaList);
      *(_DWORD *)(v44 + 8) = v29;
      *(_DWORD *)v44 = 0;
      *(_DWORD *)(v44 + 4) = v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      v45 = v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      if ( v45 )
        v45->m_pkNext = (NiTListItem<MobAreaMarkWin *> *)v44;
      else
        v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<MobAreaMarkWin *> *)v44;
      v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<MobAreaMarkWin *> *)v44;
      v46 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      ++*(_DWORD *)&v1->m_kMobAreaList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( !v46 )
        goto LABEL_54;
      while ( 1 )
      {
        v47 = (int)&v46->m_element;
        v48 = v46;
        v46 = v46->m_pkNext;
        if ( v6 == *(QUEST_DATA **)v47 )
          break;
        if ( !v46 )
          goto LABEL_54;
      }
      if ( !v48 )
      {
LABEL_54:
        v49 = kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *)&kList);
        v49->m_element = (MobCoordinate *)v6;
        v49->m_pkNext = 0;
        v49->m_pkPrev = kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail )
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v49;
        else
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v49;
        ++*(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v49;
      }
      ++uiAreaIndex;
      ++v58;
LABEL_59:
      if ( uiAreaIndex > 0xC8 )
      {
        v3 = 0;
        goto LABEL_64;
      }
      goto LABEL_60;
    }
LABEL_64:
    NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)&kList);
    FullMapWin::AddQuestList(v1);
    FullMapWin::UpdateSlideBarQuestList(v1);
    FullMapWin::OnShowQuestList(
      v1,
      *(_DWORD *)&v1->m_kQuestBallList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] > (unsigned int)v3);
    FullMapWin::UpdateQuestHelper(v1);
    kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&PgTList<MobCoordinate__>::_vftable_;
    v50 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v68 = 2;
    while ( (QUEST_DATA **)v50 != v3 )
    {
      v51 = v50;
      v50 = v50->m_pkNext;
      kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *)&kList,
        v51);
    }
  }
}
// 9963CC: using guessed type int (__thiscall *PgTList_MobCoordinate _____vftable_)(void *p, char);
// A83278: using guessed type int dword_A83278;
// A85C00: using guessed type int __security_cookie;

//----- (00508120) --------------------------------------------------------
void __thiscall FullMapWin::RemoveQuestHelperMark(FullMapWin *this, QuestHelperMarkWin *pkWin, PgWinSpr *pkNumWin)
{
  FullMapWin *v3; // edi@1
  unsigned __int16 v4; // bx@1
  QuestHelperMgr *v5; // eax@1
  QuestHelperMgr *v6; // esi@1
  QUEST_DATA *lpQuest; // [sp+Ch] [bp-8h]@2
  CQuest *pQuest; // [sp+10h] [bp-4h]@1

  v3 = this;
  v4 = QuestHelperMarkWin::GetQuestID(pkWin);
  pQuest = QuestDataMgr::GetQuest();
  v5 = QuestHelperMgr::GetInstance();
  v6 = v5;
  if ( v5 )
  {
    lpQuest = QuestHelperMgr::GetPQData(v5, v4);
    if ( lpQuest )
    {
      if ( CQuest::GetNewQuestStatus(pQuest, v4) == 8 )
      {
        if ( !QuestHelperMgr::IsStartRewardQuest(v6, lpQuest) )
        {
          PgWin::DetachChildWin(v3->m_pkFullMapViewWin, (NiPointer<PgWin> *)&lpQuest, &pkWin->baseclass_0.baseclass_0);
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&lpQuest);
          NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v3->m_kQuestBallList,
            (NiLight *const *)&pkWin);
          PgWin::DetachChildWin(v3->m_pkFullMapViewWin, (NiPointer<PgWin> *)&pkWin, &pkNumWin->baseclass_0);
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkWin);
          NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v3->m_kQuestNumList,
            (NiLight *const *)&pkNumWin);
          FullMapWin::AddQuestList(v3);
          FullMapWin::UpdateSlideBarQuestList(v3);
        }
      }
    }
  }
}

//----- (005081F0) --------------------------------------------------------
void __thiscall FullMapWin::OnMapListLClick(FullMapWin *this, unsigned int nIndex)
{
  FullMapWin *v2; // esi@1
  unsigned int v3; // eax@2
  int v4; // edi@2
  int v5; // ebx@2
  int v6; // eax@3
  int v7; // edx@6
  SlideBar *v8; // ecx@9
  SlideListWin *v9; // eax@10
  _BYTE v10[12]; // ST00_12@12
  bool v11; // al@12

  v2 = this;
  if ( SlideListWin::GetData(this->m_pkMapSlideListWin, nIndex, &nIndex) )
  {
    v3 = nIndex;
    v2->m_kSelectedMapID = nIndex;
    v4 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable;
    v5 = (unsigned __int16)v3;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable
                                                                   + 16))(
                            ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
                            v3) )
    {
      if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
      {
        v7 = *(_DWORD *)(v4 + 196);
        if ( *(_DWORD *)(v7 + 4 * v5) )
          v6 = *(_DWORD *)(v7 + 4 * v5);
        else
          v6 = 0;
      }
      else
      {
        v6 = 0;
      }
    }
    else
    {
      v6 = 0;
    }
    *(_DWORD *)&v2->m_kSelectedMapName.n3_name[0] = *(_DWORD *)(v6 + 2);
    *(_DWORD *)&v2->m_kSelectedMapName.n3_name[4] = *(_DWORD *)(v6 + 6);
    *(_DWORD *)&v2->m_kSelectedMapName.n3_name[8] = *(_DWORD *)(v6 + 10);
    FullMapWin::OnShowMapList(v2);
    v8 = v2->m_pkMapSlideBar;
    if ( v8 )
    {
      v9 = v2->m_pkMapSlideListWin;
      if ( v9 )
      {
        SlideBar::SetSplitCnt(v8, v9->m_nSlideSplitCnt);
        v2->m_pkMapSlideListWin->m_nViewStartPos = v2->m_pkMapSlideBar->m_nCurPos;
        SlideListWin::UpdateViewList(v2->m_pkMapSlideListWin);
      }
    }
    *(_DWORD *)v10 = *(_DWORD *)&v2->m_kSelectedMapName.n3_name[0];
    *(_QWORD *)&v10[4] = *(_QWORD *)&v2->m_kSelectedMapName.n3_name[4];
    v11 = World::SelectMiniMap(&g_kWorld, *(Name3 *)v10);
    FullMapWin::ResetView(v2, v11);
    FullMapWin::AddQuestList(v2);
    FullMapWin::UpdateSlideBarQuestList(v2);
    FullMapWin::AddQuestHelper(v2);
  }
}
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (00508320) --------------------------------------------------------
void __thiscall FullMapWin::LocationInfo(FullMapWin *this, unsigned __int16 Quest_ID)
{
  FullMapWin *v2; // esi@1
  void *v3; // ecx@1
  int v4; // ebx@2
  int v5; // eax@5
  int v6; // edi@6
  int v7; // eax@7
  unsigned int v8; // eax@11
  unsigned int v9; // ecx@11
  unsigned int v10; // edi@11
  _BYTE v11[12]; // ST00_12@16
  bool v12; // al@16
  Name3 kMapName; // [sp+Ch] [bp-14h]@1
  void *pkMgr; // [sp+18h] [bp-8h]@1
  int Mob_ID; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  World::GetMapName(&g_kWorld, &kMapName);
  Mob_ID = 65535;
  v3 = QuestHelperMgr::GetInstance();
  pkMgr = v3;
  if ( v3 )
  {
    v4 = dword_A83278;
    if ( dword_A83278 )
    {
      while ( 1 )
      {
        v5 = *(_DWORD *)(v4 + 8);
        v4 = *(_DWORD *)v4;
        if ( v5 )
        {
          v6 = *(_DWORD *)(v5 + 4);
          if ( v6 )
          {
            v7 = *(_DWORD *)v5;
            if ( *(_WORD *)(v7 + 4) == Quest_ID )
            {
              if ( QuestHelperMgr::IsConditionProgress((QuestHelperMgr *)v3, (QUEST_DATA *)v7, *(_WORD *)(v6 + 2)) )
              {
                if ( (_WORD)Mob_ID == -1 )
                  Mob_ID = *(_WORD *)(v6 + 2);
                v8 = *(_DWORD *)(v6 + 4);
                v9 = *(_DWORD *)(v6 + 8);
                v10 = *(_DWORD *)(v6 + 12);
                *(_QWORD *)&kMapName.n3_name[0] = __PAIR__(v9, v8);
                *(_DWORD *)&kMapName.n3_name[8] = v10;
                if ( *(_DWORD *)&v2->m_kSelectedMapName.n3_name[0] == v8 )
                {
                  if ( *(_DWORD *)&v2->m_kSelectedMapName.n3_name[4] == v9
                    && *(_DWORD *)&v2->m_kSelectedMapName.n3_name[8] == v10 )
                    break;
                }
              }
            }
          }
        }
        if ( !v4 )
          goto LABEL_15;
        v3 = pkMgr;
      }
    }
    else
    {
LABEL_15:
      v10 = *(_DWORD *)&kMapName.n3_name[8];
      v9 = *(_DWORD *)&kMapName.n3_name[4];
      v8 = *(_DWORD *)&kMapName;
    }
    *(_DWORD *)&v2->m_kSelectedMapName.n3_name[0] = v8;
    *(_DWORD *)&v2->m_kSelectedMapName.n3_name[4] = v9;
    *(_DWORD *)&v2->m_kSelectedMapName.n3_name[8] = v10;
    *(_DWORD *)v11 = *(_DWORD *)&v2->m_kSelectedMapName.n3_name[0];
    *(_QWORD *)&v11[4] = __PAIR__(v10, v9);
    v12 = World::SelectMiniMap(&g_kWorld, *(Name3 *)v11);
    FullMapWin::ResetView(v2, v12);
    FullMapWin::AddQuestHelper(v2);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
    FullMapWin::UpdateArea(v2, Quest_ID, Mob_ID);
  }
}
// A83278: using guessed type int dword_A83278;

//----- (00508440) --------------------------------------------------------
void __thiscall FullMapWin::OnCommand(FullMapWin *this, unsigned int wParam, int lParam)
{
  FullMapWin *v3; // esi@1
  char v4; // al@6

  v3 = this;
  switch ( wParam )
  {
    case 1u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 2u:
      FullMapWin::OpenWorldMap(this);
      break;
    case 3u:
      FullMapWin::OnShowGrid(this);
      break;
    case 4u:
      FullMapWin::OnShowIndexList(this);
      break;
    case 5u:
      v4 = ((int (*)(void))this->m_pkQuestSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      FullMapWin::OnShowQuestList(v3, v4 == 0);
      break;
    case 6u:
      FullMapWin::OnShowMapList(this);
      break;
    case 7u:
      FullMapWin::OnMapListLClick(this, lParam);
      break;
    case 8u:
      FullMapWin::OnSlideBarMapList(this);
      break;
    case 9u:
      FullMapWin::OnQuestListLClick(this, lParam);
      break;
    case 0xAu:
      FullMapWin::OnSlideBarQuestList(this);
      break;
    case 0xCu:
      FullMapWin::OnMapTransparency(this);
      break;
    case 0xDu:
      FullMapWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (00508530) --------------------------------------------------------
bool __thiscall FullMapWin::Create(FullMapWin *this, MiniMapWin *pkMiniMap, PgFrameWork *pkFrameWork)
{
  FullMapWin *v3; // esi@1
  NiTexturePalette *v4; // edi@2
  char *v5; // eax@4
  PgSprData *v6; // eax@5
  PgSprData *v7; // ebx@5
  PgSprData *v8; // edi@5
  PgSprData *v9; // eax@12
  PgSprData *v10; // edi@12
  PgSprData *v11; // ebx@12
  PgSprData *v12; // eax@19
  PgSprData *v13; // edi@19
  PgSprData *v14; // ebx@19
  PgSprData *v15; // eax@26
  PgSprData *v16; // edi@26
  PgSprData *v17; // ebx@26
  PgSprData *v18; // eax@33
  PgSprData *v19; // edi@33
  PgSprData *v20; // ebx@33
  PgSprData *v21; // eax@40
  PgSprData *v22; // edi@40
  PgSprData *v23; // ebx@40
  PgSprData *v24; // eax@47
  PgSprData *v25; // edi@47
  PgSprData *v26; // ebx@47
  PgSprData *v27; // eax@54
  PgSprData *v28; // edi@54
  PgSprData *v29; // ebx@54
  PgSprData *v30; // eax@61
  PgSprData *v31; // edi@61
  PgSprData *v32; // ebx@61
  PgSprData *v33; // eax@68
  PgSprData *v34; // edi@68
  PgSprData *v35; // ebx@68
  PgSprData *v36; // eax@75
  PgSprData *v37; // edi@75
  PgSprData *v38; // ebx@75
  PgSprData *v39; // eax@82
  PgSprData *v40; // edi@82
  PgSprData *v41; // ebx@82
  PgSprData *v42; // eax@89
  PgSprData *v43; // edi@89
  PgSprData *v44; // ebx@89
  PgSprData *v45; // eax@96
  PgSprData *v46; // edi@96
  PgSprData *v47; // ebx@96
  PgSprData *v48; // eax@103
  PgSprData *v49; // edi@103
  PgSprData *v50; // ebx@103
  PgSprData *v51; // eax@110
  PgSprData *v52; // edi@110
  PgSprData *v53; // ebx@110
  PgSprData *v54; // eax@117
  PgSprData *v55; // edi@117
  PgSprData *v56; // ebx@117
  PgSprData *v57; // eax@124
  PgSprData *v58; // edi@124
  PgSprData *v59; // ebx@124
  PgSprData *v60; // eax@131
  PgSprData *v61; // edi@131
  PgSprData *v62; // ebx@131
  PgSprData *v63; // eax@138
  PgSprData *v64; // edi@138
  PgSprData *v65; // ebx@138
  PgSprData *v66; // eax@145
  PgSprData *v67; // edi@145
  PgSprData *v68; // ebx@145
  PgSprData *v69; // eax@152
  PgSprData *v70; // edi@152
  PgSprData *v71; // ebx@152
  PgSprData *v72; // eax@159
  PgSprData *v73; // edi@159
  PgSprData *v74; // ebx@159
  PgSprData *v75; // eax@166
  PgSprData *v76; // edi@166
  PgSprData *v77; // ebx@166
  PgSprData *v78; // eax@173
  PgSprData *v79; // edi@173
  PgSprData *v80; // ebx@173
  PgSprData *v81; // eax@180
  PgSprData *v82; // edi@180
  PgSprData *v83; // ebx@180
  PgSprData *v84; // eax@187
  PgSprData *v85; // edi@187
  PgSprData *v86; // ebx@187
  PgSprData *v87; // eax@194
  PgSprData *v88; // edi@194
  PgSprData *v89; // ebx@194
  PgSprData *v90; // eax@201
  PgSprData *v91; // edi@201
  PgSprData *v92; // ebx@201
  PgSprData *v93; // eax@208
  PgSprData *v94; // edi@208
  PgSprData *v95; // ebx@208
  PgSprData *v96; // eax@215
  PgSprData *v97; // edi@215
  PgSprData *v98; // ebx@215
  PgSprData *v99; // eax@222
  PgSprData *v100; // edi@222
  PgSprData *v101; // ebx@222
  PgSprData *v102; // eax@229
  PgSprData *v103; // edi@229
  PgSprData *v104; // ebx@229
  PgSprData *v105; // eax@236
  PgSprData *v106; // edi@236
  PgSprData *v107; // ebx@236
  PgSprData *v108; // eax@243
  PgSprData *v109; // edi@243
  PgSprData *v110; // ebx@243
  PgSprData *v111; // eax@250
  PgSprData *v112; // edi@250
  PgSprData *v113; // ebx@250
  PgSprData *v114; // eax@257
  PgSprData *v115; // edi@257
  PgSprData *v116; // ebx@257
  PgSprData *v117; // eax@264
  PgSprData *v118; // edi@264
  PgSprData *v119; // ebx@264
  PgSprData *v120; // eax@271
  PgSprData *v121; // edi@271
  PgSprData *v122; // ebx@271
  PgSprData *v123; // eax@278
  NiNode *v124; // esi@279
  PgSprData *v126; // eax@284
  PgWinSpr *v127; // eax@284
  PgSprData *v128; // ebx@284
  NiSourceTexture *v129; // edi@284
  PgSprData *v130; // edi@285
  PgFont *v131; // eax@286
  PgWinText *v132; // eax@286
  PgSprData *v133; // eax@286
  NiScreenElementsData *v134; // edi@286
  void *v135; // eax@286
  NiD3DDefaultShader *v136; // eax@287
  void *v137; // eax@289
  NiD3DDefaultShader *v138; // eax@290
  InvisibleWin *v139; // eax@292
  void *v140; // eax@292
  float v141; // eax@293
  NiAVObject *v142; // ecx@295
  PgSprData *v143; // eax@295
  SlideBar *v144; // eax@295
  char *v145; // eax@295
  PgWin *v146; // ecx@295
  MainCharMarkWin *v147; // eax@295
  PgWin *v148; // ST17C_4@295
  MainCharMarkWin *v149; // eax@295
  NiNode *v150; // edx@295
  PgSprData *v151; // eax@295
  PgWinSpr *v152; // eax@295
  std::vector<unsigned long,std::allocator<unsigned long> > *v153; // ebx@295
  PgSprData *v154; // edi@295
  PgWinBut *v155; // edi@295
  char *v156; // eax@295
  PgSprData *v157; // edi@295
  char *v158; // eax@295
  signed int v159; // edi@295
  NiNode *v160; // ebx@296
  char *v161; // eax@298
  PgSprData *v162; // eax@298
  PgWinSpr *v163; // eax@298
  char *v164; // eax@301
  PgSprData *v165; // eax@301
  PgSprData *v166; // eax@303
  PgWinSpr *v167; // eax@303
  PgSprData *v168; // eax@303
  PgWinSpr *v169; // eax@303
  char *v170; // eax@303
  char *v171; // eax@303
  char *v172; // eax@303
  char *v173; // eax@303
  char *v174; // eax@303
  char *v175; // eax@303
  char *v176; // eax@303
  char *v177; // eax@303
  char *v178; // eax@303
  char *v179; // eax@303
  char *v180; // eax@303
  char *v181; // eax@303
  char *v182; // eax@303
  char *v183; // eax@303
  char *v184; // eax@303
  char *v185; // eax@303
  char *v186; // eax@303
  int v187; // edi@303
  NiNode *v188; // ebx@306
  char *v189; // eax@306
  NiPointer<PgSprData::PgHitTester> *v190; // ecx@306
  unsigned int v191; // ebx@306
  PgFont *v192; // eax@306
  PgWinText *v193; // eax@306
  float v194; // eax@307
  PgFont *v195; // eax@312
  PgWinText *v196; // eax@312
  NiRefObjectVtbl *v197; // edi@312
  PgFont *v198; // eax@312
  NiRefObjectVtbl *v199; // edi@312
  char *v200; // eax@312
  PgSprData *v201; // edi@313
  char *v202; // eax@313
  PgSprData *v203; // edi@313
  char *v204; // eax@313
  PgSprData *v205; // eax@313
  PgSprData *v206; // edi@313
  PgSprData *v207; // ebx@313
  NiNode *v208; // eax@320
  NiNode *v209; // edi@321
  char *v210; // eax@321
  PgSprData *v211; // eax@321
  int v212; // edi@321
  PgSprData *v213; // ebx@321
  void *v214; // eax@329
  int v215; // edi@330
  signed int v216; // ebx@330
  signed int v217; // edi@333
  int v218; // ebx@333
  char *v219; // eax@334
  PgSprData *v220; // eax@334
  PgWinSpr *v221; // eax@334
  SLWCreateInfo::Item *v222; // edi@335
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v223; // edi@335
  SLWCreateInfo::Item *v224; // edi@341
  SLWCreateInfo::Item *v225; // edi@343
  void *v226; // edi@345
  PgSprData *v227; // ebx@345
  PgFont *v228; // eax@345
  SlideListWin *v229; // eax@345
  PgSprData *v230; // eax@345
  SlideBar *v231; // eax@345
  SlideBar *v232; // eax@345
  NiRefObjectVtbl *v233; // ebx@345
  SlideBar *v234; // edi@345
  int v235; // eax@345
  int v236; // eax@345
  PgSprData *v237; // edi@345
  char *v238; // eax@345
  PgSprData *v239; // edi@345
  char *v240; // eax@345
  signed int v241; // edi@345
  int v242; // ebx@345
  PgSprData *v243; // eax@346
  char *v244; // eax@346
  PgSprData *v245; // eax@346
  PgSprData *v246; // edi@347
  PgWinBut *v247; // ebx@347
  char *v248; // eax@347
  PgSprData *v249; // eax@347
  PgWinSpr *v250; // eax@347
  NiRefObjectVtbl *v251; // edx@347
  std::vector<unsigned long,std::allocator<unsigned long> > *v252; // edi@347
  unsigned int *v253; // eax@347
  int v254; // edx@348
  unsigned int *v255; // ecx@349
  signed int v256; // ebx@349
  int v257; // eax@350
  int v258; // ecx@352
  unsigned int v259; // ecx@354
  int v260; // ebx@359
  unsigned int *v261; // eax@359
  unsigned int *v262; // ecx@361
  int v263; // eax@362
  int v264; // ecx@364
  unsigned int v265; // ecx@366
  unsigned int *v266; // eax@371
  float v267; // eax@373
  unsigned int v268; // eax@373
  int v269; // ebx@374
  unsigned int *v270; // ecx@375
  signed int v271; // edx@375
  int v272; // eax@376
  int v273; // eax@378
  int v274; // ecx@378
  unsigned int v275; // ecx@380
  int v276; // edx@385
  unsigned int *v277; // eax@385
  unsigned int *v278; // ecx@387
  int v279; // eax@388
  int v280; // eax@390
  int v281; // ecx@390
  unsigned int v282; // ecx@392
  unsigned int *v283; // eax@397
  signed int v284; // edi@399
  int v285; // ebx@399
  char *v286; // eax@400
  PgSprData *v287; // eax@400
  PgWinSpr *v288; // eax@400
  boost::shared_ptr<SLWCreateInfo::Item> *v289; // edi@402
  SLWCreateInfo::Item *v290; // edi@403
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v291; // edi@403
  SLWCreateInfo::Item *v292; // edi@409
  NiSourceTexture *v293; // edi@411
  PgSprData *v294; // eax@411
  SlideListWin *v295; // eax@411
  PgSprData *v296; // edi@411
  NiObjectNET *v297; // eax@411
  NiObjectNET *v298; // eax@411
  NiObjectNET *v299; // eax@411
  NiObjectNET *v300; // eax@411
  NiObjectNET *v301; // eax@411
  NiObjectNET *v302; // eax@411
  SlideBar *v303; // eax@411
  SlideBar *v304; // eax@411
  NiRefObjectVtbl *v305; // ebx@411
  SlideBar *v306; // edi@411
  int v307; // eax@411
  int v308; // eax@411
  SlideBar *v309; // ecx@411
  double v310; // st7@412
  NiRefObjectVtbl *v311; // edx@414
  std::vector<unsigned long,std::allocator<unsigned long> > *v312; // ebx@414
  unsigned int v313; // edi@414
  signed int v314; // esi@414
  double v315; // st7@416
  int v316; // ecx@418
  NiNode *v317; // esi@423
  char *v318; // [sp+17Ch] [bp-2C0h]@299
  int *v319; // [sp+184h] [bp-2B8h]@299
  int *v320; // [sp+188h] [bp-2B4h]@299
  unsigned int v321; // [sp+18Ch] [bp-2B0h]@1
  SLWCreateInfo kCreateInfo; // [sp+19Ch] [bp-2A0h]@335
  unsigned int uiWidth; // [sp+1B8h] [bp-284h]@284
  unsigned int uiHeight; // [sp+1BCh] [bp-280h]@284
  std::vector<unsigned long,std::allocator<unsigned long> > *thisa; // [sp+1C0h] [bp-27Ch]@1
  int pkTexture; // [sp+1C4h] [bp-278h]@286
  NiNode *pkMobRangeTexture; // [sp+1C8h] [bp-274h]@306
  float pkWinSpr; // [sp+1CCh] [bp-270h]@303
  float i; // [sp+1D0h] [bp-26Ch]@284
  unsigned int uiTop; // [sp+1D4h] [bp-268h]@5
  unsigned int uiLeft; // [sp+1D8h] [bp-264h]@5
  NiPointer<NiNode> spNode; // [sp+1DCh] [bp-260h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Val; // [sp+1E0h] [bp-25Ch]@335
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > pTextList[20]; // [sp+1FCh] [bp-240h]@303
  unsigned int v335; // [sp+42Ch] [bp-10h]@1
  int v336; // [sp+438h] [bp-4h]@1
  int v337; // [sp+43Ch] [bp+0h]@1

  v335 = (unsigned int)&v337 ^ __security_cookie;
  v321 = (unsigned int)&v337 ^ __security_cookie;
  v3 = this;
  thisa = (std::vector<unsigned long,std::allocator<unsigned long> > *)pkFrameWork;
  spNode.m_pObject = 0;
  v336 = 0;
  if ( !pkMiniMap )
    return 0;
  this->m_pkMiniMapWin = pkMiniMap;
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\MinimapFull.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AutoRunTarget", (int *)&uiLeft, (int *)&uiTop, 0);
  v7 = v3->m_spAutoRunMark.m_pObject;
  v8 = v6;
  if ( v7 != v6 )
  {
    if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v3->m_spAutoRunMark.m_pObject = v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount);
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCLink", (int *)&uiLeft, (int *)&uiTop, 0);
  v10 = v3->m_spLinkSprData.m_pObject;
  v11 = v9;
  if ( v10 != v9 )
  {
    if ( v10 && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.m_uiRefCount) && v10 )
      v10->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v3->m_spLinkSprData.m_pObject = v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.m_uiRefCount);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCSoulStone", (int *)&uiLeft, (int *)&uiTop, 0);
  v13 = v3->m_spNPCSoulStoneSprData.m_pObject;
  v14 = v12;
  if ( v13 != v12 )
  {
    if ( v13 && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.m_uiRefCount) && v13 )
      v13->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    v3->m_spNPCSoulStoneSprData.m_pObject = v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.m_uiRefCount);
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCGuild", (int *)&uiLeft, (int *)&uiTop, 0);
  v16 = v3->m_spNPCGuildSprData.m_pObject;
  v17 = v15;
  if ( v16 != v15 )
  {
    if ( v16 && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.m_uiRefCount) && v16 )
      v16->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    v3->m_spNPCGuildSprData.m_pObject = v17;
    if ( v17 )
      InterlockedIncrement((volatile LONG *)&v17->baseclass_0.m_uiRefCount);
  }
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCQuest", (int *)&uiLeft, (int *)&uiTop, 0);
  v19 = v3->m_spNPCQuestSprData.m_pObject;
  v20 = v18;
  if ( v19 != v18 )
  {
    if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.m_uiRefCount) && v19 )
      v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    v3->m_spNPCQuestSprData.m_pObject = v20;
    if ( v20 )
      InterlockedIncrement((volatile LONG *)&v20->baseclass_0.m_uiRefCount);
  }
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCStore", (int *)&uiLeft, (int *)&uiTop, 0);
  v22 = v3->m_spNPCStoreSprData.m_pObject;
  v23 = v21;
  if ( v22 != v21 )
  {
    if ( v22 && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.m_uiRefCount) && v22 )
      v22->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
    v3->m_spNPCStoreSprData.m_pObject = v23;
    if ( v23 )
      InterlockedIncrement((volatile LONG *)&v23->baseclass_0.m_uiRefCount);
  }
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCKingdom", (int *)&uiLeft, (int *)&uiTop, 0);
  v25 = v3->m_spNPCKingdomSprData.m_pObject;
  v26 = v24;
  if ( v25 != v24 )
  {
    if ( v25 && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.m_uiRefCount) && v25 )
      v25->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    v3->m_spNPCKingdomSprData.m_pObject = v26;
    if ( v26 )
      InterlockedIncrement((volatile LONG *)&v26->baseclass_0.m_uiRefCount);
  }
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCMine", (int *)&uiLeft, (int *)&uiTop, 0);
  v28 = v3->m_spNPCMineSprData.m_pObject;
  v29 = v27;
  if ( v28 != v27 )
  {
    if ( v28 && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.m_uiRefCount) && v28 )
      v28->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
    v3->m_spNPCMineSprData.m_pObject = v29;
    if ( v29 )
      InterlockedIncrement((volatile LONG *)&v29->baseclass_0.m_uiRefCount);
  }
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCFurniture", (int *)&uiLeft, (int *)&uiTop, 0);
  v31 = v3->m_spNPCFurnitureSprData.m_pObject;
  v32 = v30;
  if ( v31 != v30 )
  {
    if ( v31 && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.m_uiRefCount) && v31 )
      v31->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
    v3->m_spNPCFurnitureSprData.m_pObject = v32;
    if ( v32 )
      InterlockedIncrement((volatile LONG *)&v32->baseclass_0.m_uiRefCount);
  }
  v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCSmith", (int *)&uiLeft, (int *)&uiTop, 0);
  v34 = v3->m_spNPCSmithSprData.m_pObject;
  v35 = v33;
  if ( v34 != v33 )
  {
    if ( v34 && !InterlockedDecrement((volatile LONG *)&v34->baseclass_0.m_uiRefCount) && v34 )
      v34->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
    v3->m_spNPCSmithSprData.m_pObject = v35;
    if ( v35 )
      InterlockedIncrement((volatile LONG *)&v35->baseclass_0.m_uiRefCount);
  }
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCSkill", (int *)&uiLeft, (int *)&uiTop, 0);
  v37 = v3->m_spNPCSkillSprData.m_pObject;
  v38 = v36;
  if ( v37 != v36 )
  {
    if ( v37 && !InterlockedDecrement((volatile LONG *)&v37->baseclass_0.m_uiRefCount) && v37 )
      v37->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
    v3->m_spNPCSkillSprData.m_pObject = v38;
    if ( v38 )
      InterlockedIncrement((volatile LONG *)&v38->baseclass_0.m_uiRefCount);
  }
  v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCHelp", (int *)&uiLeft, (int *)&uiTop, 0);
  v40 = v3->m_spNPCHelpSprData.m_pObject;
  v41 = v39;
  if ( v40 != v39 )
  {
    if ( v40 && !InterlockedDecrement((volatile LONG *)&v40->baseclass_0.m_uiRefCount) && v40 )
      v40->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v40, 1u);
    v3->m_spNPCHelpSprData.m_pObject = v41;
    if ( v41 )
      InterlockedIncrement((volatile LONG *)&v41->baseclass_0.m_uiRefCount);
  }
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCTempler", (int *)&uiLeft, (int *)&uiTop, 0);
  v43 = v3->m_spNPCTemplarSprData.m_pObject;
  v44 = v42;
  if ( v43 != v42 )
  {
    if ( v43 && !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.m_uiRefCount) && v43 )
      v43->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
    v3->m_spNPCTemplarSprData.m_pObject = v44;
    if ( v44 )
      InterlockedIncrement((volatile LONG *)&v44->baseclass_0.m_uiRefCount);
  }
  v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCItem", (int *)&uiLeft, (int *)&uiTop, 0);
  v46 = v3->m_spNPCItemSprData.m_pObject;
  v47 = v45;
  if ( v46 != v45 )
  {
    if ( v46 && !InterlockedDecrement((volatile LONG *)&v46->baseclass_0.m_uiRefCount) && v46 )
      v46->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
    v3->m_spNPCItemSprData.m_pObject = v47;
    if ( v47 )
      InterlockedIncrement((volatile LONG *)&v47->baseclass_0.m_uiRefCount);
  }
  v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCNormal", (int *)&uiLeft, (int *)&uiTop, 0);
  v49 = v3->m_spNPCNormalSprData.m_pObject;
  v50 = v48;
  if ( v49 != v48 )
  {
    if ( v49 && !InterlockedDecrement((volatile LONG *)&v49->baseclass_0.m_uiRefCount) && v49 )
      v49->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v49, 1u);
    v3->m_spNPCNormalSprData.m_pObject = v50;
    if ( v50 )
      InterlockedIncrement((volatile LONG *)&v50->baseclass_0.m_uiRefCount);
  }
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCWtitle", (int *)&uiLeft, (int *)&uiTop, 0);
  v52 = v3->m_spNPCWTitleSprData.m_pObject;
  v53 = v51;
  if ( v52 != v51 )
  {
    if ( v52 && !InterlockedDecrement((volatile LONG *)&v52->baseclass_0.m_uiRefCount) && v52 )
      v52->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
    v3->m_spNPCWTitleSprData.m_pObject = v53;
    if ( v53 )
      InterlockedIncrement((volatile LONG *)&v53->baseclass_0.m_uiRefCount);
  }
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCQuestING", (int *)&uiLeft, (int *)&uiTop, 0);
  v55 = v3->m_kQuestStateImg.spIng.m_pObject;
  v56 = v54;
  if ( v55 != v54 )
  {
    if ( v55 && !InterlockedDecrement((volatile LONG *)&v55->baseclass_0.m_uiRefCount) && v55 )
      v55->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
    v3->m_kQuestStateImg.spIng.m_pObject = v56;
    if ( v56 )
      InterlockedIncrement((volatile LONG *)&v56->baseclass_0.m_uiRefCount);
  }
  v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCQuest", (int *)&uiLeft, (int *)&uiTop, 0);
  v58 = v3->m_kQuestStateImg.spAble.m_pObject;
  v59 = v57;
  if ( v58 != v57 )
  {
    if ( v58 && !InterlockedDecrement((volatile LONG *)&v58->baseclass_0.m_uiRefCount) && v58 )
      v58->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v58, 1u);
    v3->m_kQuestStateImg.spAble.m_pObject = v59;
    if ( v59 )
      InterlockedIncrement((volatile LONG *)&v59->baseclass_0.m_uiRefCount);
  }
  v60 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCQuestEND", (int *)&uiLeft, (int *)&uiTop, 0);
  v61 = v3->m_kQuestStateImg.spReward.m_pObject;
  v62 = v60;
  if ( v61 != v60 )
  {
    if ( v61 && !InterlockedDecrement((volatile LONG *)&v61->baseclass_0.m_uiRefCount) && v61 )
      v61->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v61, 1u);
    v3->m_kQuestStateImg.spReward.m_pObject = v62;
    if ( v62 )
      InterlockedIncrement((volatile LONG *)&v62->baseclass_0.m_uiRefCount);
  }
  v63 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCLinkTown", (int *)&uiLeft, (int *)&uiTop, 0);
  v64 = v3->m_spLinkTownSprData.m_pObject;
  v65 = v63;
  if ( v64 != v63 )
  {
    if ( v64 && !InterlockedDecrement((volatile LONG *)&v64->baseclass_0.m_uiRefCount) && v64 )
      v64->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v64, 1u);
    v3->m_spLinkTownSprData.m_pObject = v65;
    if ( v65 )
      InterlockedIncrement((volatile LONG *)&v65->baseclass_0.m_uiRefCount);
  }
  v66 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCQuestLowLevel", (int *)&uiLeft, (int *)&uiTop, 0);
  v67 = v3->m_kQuestStateImg.spLowAble.m_pObject;
  v68 = v66;
  if ( v67 != v66 )
  {
    if ( v67 && !InterlockedDecrement((volatile LONG *)&v67->baseclass_0.m_uiRefCount) && v67 )
      v67->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v67, 1u);
    v3->m_kQuestStateImg.spLowAble.m_pObject = v68;
    if ( v68 )
      InterlockedIncrement((volatile LONG *)&v68->baseclass_0.m_uiRefCount);
  }
  v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Party", (int *)&uiLeft, (int *)&uiTop, 0);
  v70 = v3->m_spPartySprData.m_pObject;
  v71 = v69;
  if ( v70 != v69 )
  {
    if ( v70 && !InterlockedDecrement((volatile LONG *)&v70->baseclass_0.m_uiRefCount) && v70 )
      v70->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v70, 1u);
    v3->m_spPartySprData.m_pObject = v71;
    if ( v71 )
      InterlockedIncrement((volatile LONG *)&v71->baseclass_0.m_uiRefCount);
  }
  v72 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Me01", (int *)&uiLeft, (int *)&uiTop, 0);
  v73 = v3->m_spMainCharSprData.m_pObject;
  v74 = v72;
  if ( v73 != v72 )
  {
    if ( v73 && !InterlockedDecrement((volatile LONG *)&v73->baseclass_0.m_uiRefCount) && v73 )
      v73->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v73, 1u);
    v3->m_spMainCharSprData.m_pObject = v74;
    if ( v74 )
      InterlockedIncrement((volatile LONG *)&v74->baseclass_0.m_uiRefCount);
  }
  v75 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MiniHouse", (int *)&uiLeft, (int *)&uiTop, 0);
  v76 = v3->m_spMiniHouseSprData.m_pObject;
  v77 = v75;
  if ( v76 != v75 )
  {
    if ( v76 && !InterlockedDecrement((volatile LONG *)&v76->baseclass_0.m_uiRefCount) && v76 )
      v76->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v76, 1u);
    v3->m_spMiniHouseSprData.m_pObject = v77;
    if ( v77 )
      InterlockedIncrement((volatile LONG *)&v77->baseclass_0.m_uiRefCount);
  }
  v78 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Me02", (int *)&uiLeft, (int *)&uiTop, 0);
  v79 = v3->m_spMainCharSprDataSecond.m_pObject;
  v80 = v78;
  if ( v79 != v78 )
  {
    if ( v79 && !InterlockedDecrement((volatile LONG *)&v79->baseclass_0.m_uiRefCount) && v79 )
      v79->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v79, 1u);
    v3->m_spMainCharSprDataSecond.m_pObject = v80;
    if ( v80 )
      InterlockedIncrement((volatile LONG *)&v80->baseclass_0.m_uiRefCount);
  }
  v81 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuilWarFlag_Yellow", (int *)&uiLeft, (int *)&uiTop, 0);
  v82 = v3->m_spFlagNormal.m_pObject;
  v83 = v81;
  if ( v82 != v81 )
  {
    if ( v82 && !InterlockedDecrement((volatile LONG *)&v82->baseclass_0.m_uiRefCount) && v82 )
      v82->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v82, 1u);
    v3->m_spFlagNormal.m_pObject = v83;
    if ( v83 )
      InterlockedIncrement((volatile LONG *)&v83->baseclass_0.m_uiRefCount);
  }
  v84 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuilWarFlag_Red", (int *)&uiLeft, (int *)&uiTop, 0);
  v85 = v3->m_spFlagRed.m_pObject;
  v86 = v84;
  if ( v85 != v84 )
  {
    if ( v85 && !InterlockedDecrement((volatile LONG *)&v85->baseclass_0.m_uiRefCount) && v85 )
      v85->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v85, 1u);
    v3->m_spFlagRed.m_pObject = v86;
    if ( v86 )
      InterlockedIncrement((volatile LONG *)&v86->baseclass_0.m_uiRefCount);
  }
  v87 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuilWarFlag_Blue", (int *)&uiLeft, (int *)&uiTop, 0);
  v88 = v3->m_spFlagBlue.m_pObject;
  v89 = v87;
  if ( v88 != v87 )
  {
    if ( v88 && !InterlockedDecrement((volatile LONG *)&v88->baseclass_0.m_uiRefCount) && v88 )
      v88->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v88, 1u);
    v3->m_spFlagBlue.m_pObject = v89;
    if ( v89 )
      InterlockedIncrement((volatile LONG *)&v89->baseclass_0.m_uiRefCount);
  }
  v90 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WarpGray", (int *)&uiLeft, (int *)&uiTop, 0);
  v91 = v3->m_spWarpGray.m_pObject;
  v92 = v90;
  if ( v91 != v90 )
  {
    if ( v91 && !InterlockedDecrement((volatile LONG *)&v91->baseclass_0.m_uiRefCount) && v91 )
      v91->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v91, 1u);
    v3->m_spWarpGray.m_pObject = v92;
    if ( v92 )
      InterlockedIncrement((volatile LONG *)&v92->baseclass_0.m_uiRefCount);
  }
  v93 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WarpRed", (int *)&uiLeft, (int *)&uiTop, 0);
  v94 = v3->m_spWarpRed.m_pObject;
  v95 = v93;
  if ( v94 != v93 )
  {
    if ( v94 && !InterlockedDecrement((volatile LONG *)&v94->baseclass_0.m_uiRefCount) && v94 )
      v94->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v94, 1u);
    v3->m_spWarpRed.m_pObject = v95;
    if ( v95 )
      InterlockedIncrement((volatile LONG *)&v95->baseclass_0.m_uiRefCount);
  }
  v96 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WarpBlue", (int *)&uiLeft, (int *)&uiTop, 0);
  v97 = v3->m_spWarpBlue.m_pObject;
  v98 = v96;
  if ( v97 != v96 )
  {
    if ( v97 && !InterlockedDecrement((volatile LONG *)&v97->baseclass_0.m_uiRefCount) && v97 )
      v97->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v97, 1u);
    v3->m_spWarpBlue.m_pObject = v98;
    if ( v98 )
      InterlockedIncrement((volatile LONG *)&v98->baseclass_0.m_uiRefCount);
  }
  v99 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForceRed", (int *)&uiLeft, (int *)&uiTop, 0);
  v100 = v3->m_spRedPos.m_pObject;
  v101 = v99;
  if ( v100 != v99 )
  {
    if ( v100 && !InterlockedDecrement((volatile LONG *)&v100->baseclass_0.m_uiRefCount) && v100 )
      v100->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v100, 1u);
    v3->m_spRedPos.m_pObject = v101;
    if ( v101 )
      InterlockedIncrement((volatile LONG *)&v101->baseclass_0.m_uiRefCount);
  }
  v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForceBlue", (int *)&uiLeft, (int *)&uiTop, 0);
  v103 = v3->m_spBluePos.m_pObject;
  v104 = v102;
  if ( v103 != v102 )
  {
    if ( v103 && !InterlockedDecrement((volatile LONG *)&v103->baseclass_0.m_uiRefCount) && v103 )
      v103->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v103, 1u);
    v3->m_spBluePos.m_pObject = v104;
    if ( v104 )
      InterlockedIncrement((volatile LONG *)&v104->baseclass_0.m_uiRefCount);
  }
  v105 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChiefMonster", (int *)&uiLeft, (int *)&uiTop, 0);
  v106 = v3->m_spMobChiefSprData.m_pObject;
  v107 = v105;
  if ( v106 != v105 )
  {
    if ( v106 && !InterlockedDecrement((volatile LONG *)&v106->baseclass_0.m_uiRefCount) && v106 )
      v106->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v106, 1u);
    v3->m_spMobChiefSprData.m_pObject = v107;
    if ( v107 )
      InterlockedIncrement((volatile LONG *)&v107->baseclass_0.m_uiRefCount);
  }
  v108 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NormalMonster", (int *)&uiLeft, (int *)&uiTop, 0);
  v109 = v3->m_spMobNormalSprData.m_pObject;
  v110 = v108;
  if ( v109 != v108 )
  {
    if ( v109 && !InterlockedDecrement((volatile LONG *)&v109->baseclass_0.m_uiRefCount) && v109 )
      v109->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v109, 1u);
    v3->m_spMobNormalSprData.m_pObject = v110;
    if ( v110 )
      InterlockedIncrement((volatile LONG *)&v110->baseclass_0.m_uiRefCount);
  }
  v111 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Broken", (int *)&uiLeft, (int *)&uiTop, 0);
  v112 = v3->m_spMobDmgSprData.m_pObject;
  v113 = v111;
  if ( v112 != v111 )
  {
    if ( v112 && !InterlockedDecrement((volatile LONG *)&v112->baseclass_0.m_uiRefCount) && v112 )
      v112->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v112, 1u);
    v3->m_spMobDmgSprData.m_pObject = v113;
    if ( v113 )
      InterlockedIncrement((volatile LONG *)&v113->baseclass_0.m_uiRefCount);
  }
  v114 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RedWood", (int *)&uiLeft, (int *)&uiTop, 0);
  v115 = v3->m_spRedWoodSprData.m_pObject;
  v116 = v114;
  if ( v115 != v114 )
  {
    if ( v115 && !InterlockedDecrement((volatile LONG *)&v115->baseclass_0.m_uiRefCount) && v115 )
      v115->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v115, 1u);
    v3->m_spRedWoodSprData.m_pObject = v116;
    if ( v116 )
      InterlockedIncrement((volatile LONG *)&v116->baseclass_0.m_uiRefCount);
  }
  v117 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BlueWood", (int *)&uiLeft, (int *)&uiTop, 0);
  v118 = v3->m_spBlueWoodSprData.m_pObject;
  v119 = v117;
  if ( v118 != v117 )
  {
    if ( v118 && !InterlockedDecrement((volatile LONG *)&v118->baseclass_0.m_uiRefCount) && v118 )
      v118->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v118, 1u);
    v3->m_spBlueWoodSprData.m_pObject = v119;
    if ( v119 )
      InterlockedIncrement((volatile LONG *)&v119->baseclass_0.m_uiRefCount);
  }
  v120 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Flag", (int *)&uiLeft, (int *)&uiTop, 0);
  v121 = v3->m_spCaptureFlagSprData.m_pObject;
  v122 = v120;
  if ( v121 != v120 )
  {
    if ( v121 && !InterlockedDecrement((volatile LONG *)&v121->baseclass_0.m_uiRefCount) && v121 )
      v121->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v121, 1u);
    v3->m_spCaptureFlagSprData.m_pObject = v122;
    if ( v122 )
      InterlockedIncrement((volatile LONG *)&v122->baseclass_0.m_uiRefCount);
  }
  v123 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", (int *)&uiLeft, (int *)&uiTop, 0);
  if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v123, 0, (PgFrameWork *)thisa, "FullMapWin", 0) )
  {
    v124 = spNode.m_pObject;
    v336 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v124 )
        v124->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v124, 1u);
    }
    return 0;
  }
  uiWidth = uiLeft;
  uiHeight = uiTop;
  v126 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", (int *)&uiLeft, (int *)&uiTop, 0);
  v127 = PgWinSpr::CreateWin(uiLeft, uiTop, v126, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    v127,
    0,
    v321);
  v128 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v128, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v128, &spNode.m_pObject->baseclass_0, "ClsOver");
  LODWORD(i) = PgWinBut::CreateWin(uiLeft, uiTop, v128, &v3->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  thisa = (std::vector<unsigned long,std::allocator<unsigned long> > *)&v3->m_kVisibleControls;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&v3->m_kVisibleControls,
    (const unsigned int *)&i);
  v129 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v130 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", (int *)&uiLeft, (int *)&uiTop, v129);
    PgSprData::Add(v130, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v130, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    LODWORD(i) = PgWinBut::CreateWin(uiLeft, uiTop, v130, &v3->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v3->m_kVisibleControls,
      (const unsigned int *)&i);
  }
  PgUtil::GetTriShapeRect(
    &spNode.m_pObject->baseclass_0,
    "WinTitle",
    (int *)&uiLeft,
    (int *)&uiTop,
    &uiWidth,
    &uiHeight);
  v131 = Font::Get(0);
  v132 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v131, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v3->m_pkMapNameTextWin = v132;
  v132->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v132,
    1u);
  ((void (__stdcall *)(_UNKNOWN *))v3->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_995921);
  ((void (__stdcall *)(_DWORD))v3->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(__int64 *))v3->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
  v133 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Gride_Num", (int *)&uiLeft, (int *)&uiTop, 0);
  v3->m_pkGridNumSprWin = PgWinSpr::CreateWin(uiLeft, uiTop, v133, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "fullmap", (int *)&uiLeft, (int *)&uiTop, &uiWidth, &uiHeight);
  v3->m_pkFullMapViewWin = PgWin::CreateWin(
                             uiLeft,
                             uiTop,
                             uiWidth,
                             uiHeight,
                             &v3->baseclass_0.baseclass_0.baseclass_0,
                             0,
                             0);
  v134 = PgUtil::CreateScreenGeometryData(1u, 1u, 0, 0, 1u, 1u);
  v135 = operator new(0xC4u);
  pkTexture = (int)v135;
  LOBYTE(v336) = 1;
  if ( v135 )
    NiScreenElements::NiScreenElements((NiScreenElements *)v135, v134);
  else
    v136 = 0;
  LOBYTE(v336) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spFullMapGeom, v136);
  v137 = operator new(0x44u);
  pkTexture = (int)v137;
  LOBYTE(v336) = 2;
  if ( v137 )
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v137);
  else
    v138 = 0;
  LOBYTE(v336) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spFullMapTexProp, v138);
  NiTexturingProperty::SetBaseTexture(v3->m_spFullMapTexProp.m_pObject, 0);
  v139 = InvisibleWin::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v3->m_pkInvisibleWin = v139;
  InvisibleWin::Init(v139);
  NiAVObject::AttachProperty(
    &v3->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v3->m_pkInvisibleWin->m_pkMaterialProp->baseclass_0);
  ((void (__stdcall *)(InvisibleWin *, _DWORD))v3->m_pkFullMapViewWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v3->m_pkInvisibleWin,
    0);
  v140 = operator new(0x20u);
  LODWORD(i) = v140;
  LOBYTE(v336) = 3;
  if ( v140 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v140);
    v141 = i;
    *LODWORD(i) = &NiAlphaProperty::_vftable_;
    *(_WORD *)(LODWORD(v141) + 28) = 236;
    *(_BYTE *)(LODWORD(v141) + 30) = 0;
  }
  else
  {
    LODWORD(v141) = 0;
  }
  *(_WORD *)(LODWORD(v141) + 28) = *(_WORD *)(LODWORD(v141) + 28) & 0xFEED | 0xED;
  v142 = (NiAVObject *)v3->m_spFullMapGeom.m_pObject;
  LOBYTE(v336) = 0;
  NiAVObject::AttachProperty(v142, LODWORD(v141));
  v143 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MovingPoint", (int *)&uiLeft, (int *)&uiTop, 0);
  LODWORD(i) = v143;
  v144 = SlideBar::CreateWin(
           spNode.m_pObject,
           "AlphaOptBar",
           "AlphaOptBarLow",
           "AlphaOptBarHigh",
           v143,
           0xBu,
           &v3->baseclass_0.baseclass_0.baseclass_0);
  v3->m_pkSlides = v144;
  v144->m_uiClickMsg = 12;
  SlideBar::SetSplitCnt(v3->m_pkSlides, 100);
  LODWORD(i) = PgWinSpr::CreateWin(uiLeft, uiTop, LODWORD(i), &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v145 = TextData2::Get(0x729894C6u);
  PgWin::SetToolTipWinText(LODWORD(i), v145);
  v146 = (PgWin *)LODWORD(i);
  *(_DWORD *)(LODWORD(i) + 272) = g_pkToolTipWin;
  PgWin::AttachChildWin(&v3->m_pkSlides->m_pkSlidePoint->baseclass_0, v146);
  NiTexturingProperty::SetBaseFilterMode(v3->m_spFullMapTexProp.m_pObject, FILTER_BILERP);
  v3->m_spFullMapTexProp.m_pObject->m_eApply = 2;
  NiTexturingProperty::SetBaseClampMode(v3->m_spFullMapTexProp.m_pObject, 0);
  NiAVObject::AttachProperty(
    &v3->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v3->m_spFullMapTexProp.m_pObject->baseclass_0);
  NiAVObject::UpdateProperties(&v3->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  ((void (__stdcall *)(NiScreenElements *, _DWORD))v3->m_pkFullMapViewWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v3->m_spFullMapGeom.m_pObject,
    0);
  v147 = MainCharMarkWin::CreateWin(0, 0, v3->m_spMainCharSprData.m_pObject, v3->m_pkFullMapViewWin);
  v148 = v3->m_pkFullMapViewWin;
  v3->m_pkMainCharMarkWin = v147;
  v149 = MainCharMarkWin::CreateWin(0, 0, v3->m_spMainCharSprDataSecond.m_pObject, v148);
  v150 = spNode.m_pObject;
  v3->m_pkMainCharMarkSecondWin = v149;
  v151 = PgSprData::Create(&v150->baseclass_0, "Panel02", (int *)&uiLeft, (int *)&uiTop, 0);
  v152 = PgWinSpr::CreateWin(uiLeft, uiTop, v151, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v153 = thisa;
  LODWORD(i) = v152;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(thisa, (const unsigned int *)&i);
  v154 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GridNor", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v154, &spNode.m_pObject->baseclass_0, "GridClick");
  PgSprData::Add(v154, &spNode.m_pObject->baseclass_0, "GridOver");
  v155 = PgWinBut::CreateWin(uiLeft, uiTop, v154, &v3->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
  v156 = TextData::Get(0x9A9C6BE6u);
  PgWin::SetToolTipWinText(&v155->baseclass_0.baseclass_0, v156);
  v155->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  LODWORD(i) = v155;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(v153, (const unsigned int *)&i);
  v157 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AllMapBtnNor", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v157, &spNode.m_pObject->baseclass_0, "AllMapBtnClick");
  PgSprData::Add(v157, &spNode.m_pObject->baseclass_0, "AllMapBtnOver");
  v3->m_pkWorldMapBut = PgWinBut::CreateWin(uiLeft, uiTop, v157, &v3->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v158 = TextData::Get(0xFA4B2544u);
  PgWin::SetToolTipWinText(&v3->m_pkWorldMapBut->baseclass_0.baseclass_0, v158);
  v3->m_pkWorldMapBut->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v159 = 0;
  do
  {
    v160 = spNode.m_pObject;
    if ( v159 >= 10 )
    {
      v320 = (int *)&uiTop;
      v319 = (int *)&uiLeft;
      v318 = "Grid%d";
    }
    else
    {
      if ( v159 == 9 )
      {
        v161 = fs("Grid%d");
        v162 = PgSprData::Create(&v160->baseclass_0, v161, (int *)&uiLeft, (int *)&uiTop, 0);
        v163 = PgWinSpr::CreateWin(uiLeft, uiTop, v162, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v3->m_pkGridSprWin[9] = v163;
        goto LABEL_302;
      }
      v320 = (int *)&uiTop;
      v319 = (int *)&uiLeft;
      v318 = "Grid0%d";
    }
    v164 = fs(v318);
    v165 = PgSprData::Create(&v160->baseclass_0, v164, v319, v320, 0);
    v163 = PgWinSpr::CreateWin(uiLeft, uiTop, v165, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v3->m_pkGridSprWin[v159] = v163;
LABEL_302:
    v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v163,
      0);
    ++v159;
  }
  while ( v159 < 22 );
  v166 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel06", (int *)&uiLeft, (int *)&uiTop, 0);
  v167 = PgWinSpr::CreateWin(uiLeft, uiTop, v166, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v3->m_pkIndexPanel[0] = v167;
  v167->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v167,
    0);
  ((void (__stdcall *)(_DWORD))v3->m_pkIndexPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v168 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel05", (int *)&uiLeft, (int *)&uiTop, 0);
  v169 = PgWinSpr::CreateWin(uiLeft, uiTop, v168, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v3->m_pkIndexPanel[1] = v169;
  v169->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v169,
    0);
  ((void (__stdcall *)(_DWORD))v3->m_pkIndexPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  _eh_vector_constructor_iterator_(
    pTextList,
    0x1Cu,
    20,
    (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  LOBYTE(v336) = 4;
  v170 = TextData2::Get(0xE22C1F11u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(pTextList, v170, strlen(v170));
  v171 = TextData2::Get(0x3949342Cu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[1], v171, strlen(v171));
  v172 = TextData2::Get(0xD6C8D823u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[2], v172, strlen(v172));
  v173 = TextData2::Get(0xC8D8F7C2u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[3], v173, strlen(v173));
  v174 = TextData2::Get(0x3D463C7Fu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[4], v174, strlen(v174));
  v175 = TextData2::Get(0xC8D8EDD6u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[5], v175, strlen(v175));
  v176 = TextData2::Get(0x353E8671u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[6], v176, strlen(v176));
  v177 = TextData2::Get(0xEAD62108u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[7], v177, strlen(v177));
  v178 = TextData2::Get(0xD2E9D6D3u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[8], v178, strlen(v178));
  v179 = TextData2::Get(0xE133110Au);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[9], v179, strlen(v179));
  v180 = TextData2::Get(0x37443837u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[10], v180, strlen(v180));
  v181 = TextData2::Get(0x7E93A2C8u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[11], v181, strlen(v181));
  v182 = TextData2::Get(0x9B9989D7u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[12], v182, strlen(v182));
  v183 = TextData2::Get(0x2C224582u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[13], v183, strlen(v183));
  v184 = TextData2::Get(0xC3F32825u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[14], v184, strlen(v184));
  v185 = TextData2::Get(0x2E51302Bu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[15], v185, strlen(v185));
  v186 = TextData2::Get(0x8BA6D9C9u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pTextList[16], v186, strlen(v186));
  i = 0.0;
  LODWORD(pkWinSpr) = pTextList;
  v187 = (int)v3->m_pkCategoryText;
  do
  {
    if ( *(_DWORD *)(LODWORD(pkWinSpr) + 16) )
    {
      v188 = spNode.m_pObject;
      v189 = fs("Text%02d");
      v190 = PgSprData::Create(&v188->baseclass_0, v189, (int *)&uiLeft, (int *)&uiTop, 0)->m_akHitTester.m_pBase;
      v191 = v190->m_pObject->m_uiHeight;
      pkMobRangeTexture = (NiNode *)v190->m_pObject->m_uiWidth;
      v192 = Font::Get(TITLEBOLD);
      v193 = PgWinText::CreateWin(
               uiLeft,
               uiTop,
               (unsigned int)pkMobRangeTexture,
               v191,
               v192,
               &v3->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      *(_DWORD *)v187 = v193;
      v193->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v193,
        5u);
      if ( *(_DWORD *)(LODWORD(pkWinSpr) + 20) < 0x10u )
        v194 = pkWinSpr;
      else
        LODWORD(v194) = *LODWORD(pkWinSpr);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v187 + 472))(LODWORD(v194));
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v187 + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v187 + 256))(0);
    }
    else
    {
      *(_DWORD *)v187 = 0;
    }
    LODWORD(pkWinSpr) += 28;
    v187 += 4;
    ++LODWORD(i);
  }
  while ( LODWORD(i) < 0x14 );
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "Text_AutoRun",
         (int *)&uiLeft,
         (int *)&uiTop,
         &uiWidth,
         &uiHeight) )
  {
    v195 = Font::Get(0);
    v196 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v195, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v3->m_pkAutoRunText = v196;
    v196->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v196,
      5u);
    v197 = v3->m_pkAutoRunText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v198 = Font::Get(SMALL);
    v197[113].__vecDelDtor((NiRefObject *)v3->m_pkAutoRunText, (unsigned int)v198);
    v199 = v3->m_pkAutoRunText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v200 = TextData2::Get(0x91A6E8E8u);
    v199[118].__vecDelDtor((NiRefObject *)v3->m_pkAutoRunText, (unsigned int)v200);
    ((void (__stdcall *)(_DWORD))v3->m_pkAutoRunText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v201 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ExBtn_L_Nor", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v201, &spNode.m_pObject->baseclass_0, "ExBtn_L_Over");
  PgSprData::Add(v201, &spNode.m_pObject->baseclass_0, "ExBtn_L_Click");
  v3->m_pkIndexBtn[0] = PgWinBut::CreateWin(uiLeft, uiTop, v201, &v3->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
  v202 = TextData2::Get(0x8FA26CBFu);
  PgWin::SetToolTipWinText(&v3->m_pkIndexBtn[0]->baseclass_0.baseclass_0, v202);
  v3->m_pkIndexBtn[0]->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(signed int))v3->m_pkIndexBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v3->m_pkIndexBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v203 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ExBtn_L_Nor01", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v203, &spNode.m_pObject->baseclass_0, "ExBtn_L_Over01");
  PgSprData::Add(v203, &spNode.m_pObject->baseclass_0, "ExBtn_L_Click01");
  v3->m_pkIndexBtn[1] = PgWinBut::CreateWin(uiLeft, uiTop, v203, &v3->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
  v204 = TextData2::Get(0x8FA26CBFu);
  PgWin::SetToolTipWinText(&v3->m_pkIndexBtn[1]->baseclass_0.baseclass_0, v204);
  v3->m_pkIndexBtn[1]->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(_DWORD))v3->m_pkIndexBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v3->m_pkIndexBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v205 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "QuestListNumBall", (int *)&uiLeft, (int *)&uiTop, 0);
  v206 = v3->m_spQuestHelperNumBall.m_pObject;
  v207 = v205;
  if ( v206 != v205 )
  {
    if ( v206 && !InterlockedDecrement((volatile LONG *)&v206->baseclass_0.m_uiRefCount) && v206 )
      v206->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v206, 1u);
    v3->m_spQuestHelperNumBall.m_pObject = v207;
    if ( v207 )
      InterlockedIncrement((volatile LONG *)&v207->baseclass_0.m_uiRefCount);
  }
  v208 = 0;
  LODWORD(pkWinSpr) = (char *)v3 + 836;
  do
  {
    v209 = spNode.m_pObject;
    pkMobRangeTexture = (NiNode *)((char *)v208 + 1);
    v210 = fs("QuestListNum%02d");
    v211 = PgSprData::Create(&v209->baseclass_0, v210, (int *)&uiLeft, (int *)&uiTop, 0);
    v212 = *LODWORD(pkWinSpr);
    v213 = v211;
    if ( (PgSprData *)*LODWORD(pkWinSpr) != v211 )
    {
      if ( v212 && !InterlockedDecrement((volatile LONG *)(v212 + 4)) && v212 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v212)(v212, 1);
      *LODWORD(pkWinSpr) = v213;
      if ( v213 )
        InterlockedIncrement((volatile LONG *)&v213->baseclass_0.m_uiRefCount);
    }
    v208 = pkMobRangeTexture;
    LODWORD(pkWinSpr) += 4;
  }
  while ( (signed int)pkMobRangeTexture < 40 );
  v214 = MenuTexMgr::GetTexture(0x15u);
  pkMobRangeTexture = (NiNode *)v214;
  if ( v214 )
  {
    v215 = (int)v3->m_spMobArea;
    v216 = 200;
    while ( 1 )
    {
      *(_DWORD *)v215 = PgSprData::Create(
                          &spNode.m_pObject->baseclass_0,
                          "MobRange",
                          (int *)&uiLeft,
                          (int *)&uiTop,
                          (NiSourceTexture *)v214);
      v215 += 4;
      --v216;
      if ( !v216 )
        break;
      v214 = pkMobRangeTexture;
    }
  }
  v217 = 0;
  v218 = (int)v3->m_pkQuestListPanel;
  do
  {
    pkMobRangeTexture = spNode.m_pObject;
    v219 = fs("Panel%02d");
    v220 = PgSprData::Create(&pkMobRangeTexture->baseclass_0, v219, (int *)&uiLeft, (int *)&uiTop, 0);
    v221 = PgWinSpr::CreateWin(uiLeft, uiTop, v220, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)v218 = v221;
    v221->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v221,
      0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v218 + 256))(0);
    ++v217;
    v218 += 4;
  }
  while ( v217 < 2 );
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v336) = 5;
  v222 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v222->nItemType = 1;
  v222->pNode = spNode.m_pObject;
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "ColumnBarNor", 0xCu);
  v223 = &v222->vecNodeName;
  LOBYTE(v336) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v223,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "ColumnBarClick", 0xEu);
  LOBYTE(v336) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v223,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "ColumnBarOver", 0xDu);
  LOBYTE(v336) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v223,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  v224 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v224->nItemType = 2;
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "Column03", 8u);
  LOBYTE(v336) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v224->vecNodeName,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  v224->pNode = spNode.m_pObject;
  v225 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v225->nItemType = 2;
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "Column01", 8u);
  LOBYTE(v336) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v225->vecNodeName,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  v225->pNode = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v226 = MenuTexMgr::GetTexture(4u);
  pkTexture = (int)v226;
  v227 = PgSprData::Create(
           &spNode.m_pObject->baseclass_0,
           "SubText01",
           (int *)&uiLeft,
           (int *)&uiTop,
           (NiSourceTexture *)v226);
  v228 = Font::Get(TITLEBOLD);
  v229 = SlideListWin::CreateWin(
           uiLeft + 25,
           uiTop,
           v227,
           &v3->baseclass_0.baseclass_0.baseclass_0,
           v228,
           &kCreateInfo,
           0,
           0);
  v3->m_pkQuestSlideListWin = v229;
  v229->m_uiLClickMsg = 9;
  SlideListWin::AlignText(v3->m_pkQuestSlideListWin, 1u);
  FullMapWin::AddQuestList(v3);
  SlideListWin::UpdateViewList(v3->m_pkQuestSlideListWin);
  ((void (__stdcall *)(_DWORD))v3->m_pkQuestSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v3->m_pkQuestSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3->m_pkQuestSlideListWin->m_bCheckEnable = 0;
  v230 = PgSprData::Create(
           &spNode.m_pObject->baseclass_0,
           "SlideBar_SlideBtnMiddle",
           (int *)&uiLeft,
           (int *)&uiTop,
           (NiSourceTexture *)v226);
  v231 = SlideBar::CreateWin(
           spNode.m_pObject,
           "SlideBar",
           "SlideBar_UpBtn",
           "SlideBar_DnBtn",
           v230,
           0,
           &v3->baseclass_0.baseclass_0.baseclass_0);
  v3->m_pkQuestSlideBar = v231;
  v231->m_uiClickMsg = 10;
  v3->m_pkQuestSlideBar->m_eType = 1;
  v232 = v3->m_pkQuestSlideBar;
  v233 = v232->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v234 = v3->m_pkQuestSlideBar;
  v235 = ((int (__thiscall *)(SlideBar *))v232->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3->m_pkQuestSlideBar);
  v236 = (int)v234->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                (NiRefObject *)v234,
                v235);
  v233[77].__vecDelDtor((NiRefObject *)v3->m_pkQuestSlideBar, v236);
  ((void (__stdcall *)(_DWORD))v3->m_pkQuestSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  SlideBar::SetSplitCnt(v3->m_pkQuestSlideBar, v3->m_pkQuestSlideListWin->m_nSlideSplitCnt);
  v237 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ExBtn_R_Nor", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v237, &spNode.m_pObject->baseclass_0, "ExBtn_R_Over");
  PgSprData::Add(v237, &spNode.m_pObject->baseclass_0, "ExBtn_R_Click");
  v3->m_pkQuestListBtn[0] = PgWinBut::CreateWin(uiLeft, uiTop, v237, &v3->baseclass_0.baseclass_0.baseclass_0, 5u, 0, 0);
  v238 = TextData2::Get(0xEDF9B63Eu);
  PgWin::SetToolTipWinText(&v3->m_pkQuestListBtn[0]->baseclass_0.baseclass_0, v238);
  v3->m_pkQuestListBtn[0]->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(_DWORD))v3->m_pkQuestListBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v3->m_pkQuestListBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v239 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ExBtn_R_Nor01", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v239, &spNode.m_pObject->baseclass_0, "ExBtn_R_Over01");
  PgSprData::Add(v239, &spNode.m_pObject->baseclass_0, "ExBtn_R_Click01");
  v3->m_pkQuestListBtn[1] = PgWinBut::CreateWin(uiLeft, uiTop, v239, &v3->baseclass_0.baseclass_0.baseclass_0, 5u, 0, 0);
  v240 = TextData2::Get(0xEDF9B63Eu);
  PgWin::SetToolTipWinText(&v3->m_pkQuestListBtn[1]->baseclass_0.baseclass_0, v240);
  v3->m_pkQuestListBtn[1]->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(_DWORD))v3->m_pkQuestListBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v3->m_pkQuestListBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v241 = 0;
  v242 = (int)v3->m_pkQuestListNum;
  do
  {
    v243 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "QuestListNumBall", (int *)&uiLeft, (int *)&uiTop, 0);
    ++v241;
    *(_DWORD *)(v242 - 160) = PgWinSpr::CreateWin(0, 0, v243, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkMobRangeTexture = spNode.m_pObject;
    v244 = fs("QuestListNum%02d");
    v245 = PgSprData::Create(&pkMobRangeTexture->baseclass_0, v244, (int *)&uiLeft, (int *)&uiTop, 0);
    *(_DWORD *)v242 = PgWinSpr::CreateWin(0, 0, v245, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v242 += 4;
  }
  while ( v241 < 40 );
  v246 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor", (int *)&uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v246, &spNode.m_pObject->baseclass_0, "BtnOver");
  PgSprData::Add(v246, &spNode.m_pObject->baseclass_0, "BtnClick");
  v247 = PgWinBut::CreateWin(uiLeft, uiTop, v246, &v3->baseclass_0.baseclass_0.baseclass_0, 6u, 0, 0);
  v248 = TextData2::Get(0x8E10C8C0u);
  PgWin::SetToolTipWinText(&v247->baseclass_0.baseclass_0, v248);
  v247->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v249 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn_arrow", (int *)&uiLeft, (int *)&uiTop, 0);
  v250 = PgWinSpr::CreateWin(uiLeft, uiTop, v249, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v251 = v250->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  LODWORD(pkWinSpr) = v250;
  v251[60].__vecDelDtor((NiRefObject *)v250, 0);
  v252 = thisa;
  v253 = thisa->baseclass_0._Mylast;
  LODWORD(i) = v247;
  if ( (unsigned int)&i >= (unsigned int)v253
    || (v254 = *(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0],
        *(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)&i) )
  {
    v262 = thisa->baseclass_0._Myend;
    if ( v253 == v262 )
    {
      v263 = (signed int)((char *)v253 - *(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( (unsigned int)v263 > 0x3FFFFFFE )
        std::_Xlength_error("vector<T> too long");
      v264 = (signed int)((char *)v262 - *(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      pkMobRangeTexture = (NiNode *)(v263 + 1);
      if ( v263 + 1 > (unsigned int)v264 )
      {
        if ( 1073741823 - ((unsigned int)v264 >> 1) >= v264 )
          v265 = ((unsigned int)v264 >> 1) + v264;
        else
          v265 = 0;
        if ( v265 < (unsigned int)pkMobRangeTexture )
          v265 = (unsigned int)pkMobRangeTexture;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)thisa,
          v265);
      }
    }
    v266 = v252->baseclass_0._Mylast;
    if ( v266 )
      *v266 = (unsigned int)v247;
  }
  else
  {
    v255 = thisa->baseclass_0._Myend;
    v256 = (signed int)((char *)&i - v254) >> 2;
    if ( v253 == v255 )
    {
      v257 = (signed int)((char *)v253 - v254) >> 2;
      if ( (unsigned int)v257 > 0x3FFFFFFE )
        std::_Xlength_error("vector<T> too long");
      v258 = (signed int)((char *)v255 - v254) >> 2;
      pkMobRangeTexture = (NiNode *)(v257 + 1);
      if ( v257 + 1 > (unsigned int)v258 )
      {
        if ( 1073741823 - ((unsigned int)v258 >> 1) >= v258 )
          v259 = ((unsigned int)v258 >> 1) + v258;
        else
          v259 = 0;
        if ( v259 < (unsigned int)pkMobRangeTexture )
          v259 = (unsigned int)pkMobRangeTexture;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)thisa,
          v259);
      }
    }
    v260 = *(_DWORD *)&v252->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v256;
    v261 = v252->baseclass_0._Mylast;
    if ( v261 )
      *v261 = *(_DWORD *)v260;
  }
  v267 = pkWinSpr;
  ++v252->baseclass_0._Mylast;
  i = v267;
  v268 = (unsigned int)v252->baseclass_0._Mylast;
  if ( (unsigned int)&i >= v268
    || (v269 = *(_DWORD *)&v252->baseclass_0.___u0.baseclass_0.dummy[0],
        *(_DWORD *)&v252->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)&i) )
  {
    v278 = v252->baseclass_0._Myend;
    if ( (unsigned int *)v268 == v278 )
    {
      v279 = (signed int)(v268 - *(_DWORD *)&v252->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( (unsigned int)v279 > 0x3FFFFFFE )
        std::_Xlength_error("vector<T> too long");
      v280 = v279 + 1;
      v281 = (signed int)((char *)v278 - *(_DWORD *)&v252->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( v280 > (unsigned int)v281 )
      {
        if ( 1073741823 - ((unsigned int)v281 >> 1) >= v281 )
          v282 = ((unsigned int)v281 >> 1) + v281;
        else
          v282 = 0;
        if ( v282 < v280 )
          v282 = v280;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v252,
          v282);
      }
    }
    v283 = v252->baseclass_0._Mylast;
    if ( v283 )
      *v283 = LODWORD(pkWinSpr);
  }
  else
  {
    v270 = v252->baseclass_0._Myend;
    v271 = (signed int)((char *)&i - v269) >> 2;
    pkMobRangeTexture = (NiNode *)((signed int)((char *)&i - v269) >> 2);
    if ( (unsigned int *)v268 == v270 )
    {
      v272 = (signed int)(v268 - v269) >> 2;
      if ( (unsigned int)v272 > 0x3FFFFFFE )
        std::_Xlength_error("vector<T> too long");
      v273 = v272 + 1;
      v274 = (signed int)((char *)v270 - v269) >> 2;
      if ( v273 > (unsigned int)v274 )
      {
        if ( 1073741823 - ((unsigned int)v274 >> 1) >= v274 )
          v275 = ((unsigned int)v274 >> 1) + v274;
        else
          v275 = 0;
        if ( v275 < v273 )
          v275 = v273;
        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v252,
          v275);
        v271 = (signed int)pkMobRangeTexture;
      }
    }
    v276 = *(_DWORD *)&v252->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v271;
    v277 = v252->baseclass_0._Mylast;
    if ( v277 )
      *v277 = *(_DWORD *)v276;
  }
  ++v252->baseclass_0._Mylast;
  v284 = 0;
  v285 = (int)v3->m_pkMapListPanel;
  do
  {
    pkMobRangeTexture = spNode.m_pObject;
    v286 = fs("Panel%02d");
    v287 = PgSprData::Create(&pkMobRangeTexture->baseclass_0, v286, (int *)&uiLeft, (int *)&uiTop, 0);
    v288 = PgWinSpr::CreateWin(uiLeft, uiTop, v287, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)v285 = v288;
    v288->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v288,
      0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v285 + 256))(0);
    ++v284;
    v285 += 4;
  }
  while ( v284 < 2 );
  if ( *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo != kCreateInfo.m_arrItem.baseclass_0._Mylast )
  {
    v289 = std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
             kCreateInfo.m_arrItem.baseclass_0._Mylast,
             kCreateInfo.m_arrItem.baseclass_0._Mylast,
             *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
             (std::_Nonscalar_ptr_iterator_tag)pkTexture);
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      v289,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)pkTexture);
    kCreateInfo.m_arrItem.baseclass_0._Mylast = v289;
  }
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  v290 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v290->nItemType = 1;
  v290->pNode = spNode.m_pObject;
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "ColumnBarNor01", 0xEu);
  v291 = &v290->vecNodeName;
  LOBYTE(v336) = 11;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v291,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "ColumnBarClick01", 0x10u);
  LOBYTE(v336) = 12;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v291,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "ColumnBarOver01", 0xFu);
  LOBYTE(v336) = 13;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v291,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  v292 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v292->nItemType = 2;
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Val, "Column02", 8u);
  LOBYTE(v336) = 14;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v292->vecNodeName,
    &_Val);
  LOBYTE(v336) = 5;
  if ( _Val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.baseclass_0._Myres = 15;
  _Val.baseclass_0._Mysize = 0;
  _Val.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v292->pNode = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v293 = (NiSourceTexture *)pkTexture;
  v294 = PgSprData::Create(
           &spNode.m_pObject->baseclass_0,
           "SubText02",
           (int *)&uiLeft,
           (int *)&uiTop,
           (NiSourceTexture *)pkTexture);
  v295 = SlideListWin::CreateWin(uiLeft, uiTop, v294, &v3->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
  v3->m_pkMapSlideListWin = v295;
  v295->m_uiLClickMsg = 7;
  SlideListWin::AlignText(v3->m_pkMapSlideListWin, 4u);
  FullMapWin::AddMapList(v3);
  SlideListWin::UpdateViewList(v3->m_pkMapSlideListWin);
  v3->m_pkMapSlideListWin->m_bCheckEnable = 0;
  ((void (__stdcall *)(_DWORD))v3->m_pkMapSlideListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v296 = PgSprData::Create(
           &spNode.m_pObject->baseclass_0,
           "SlideBar_SlideBtnMiddle",
           (int *)&uiLeft,
           (int *)&uiTop,
           v293);
  v297 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor01");
  NiObjectNET::SetName(v297, "SlideBar_DnBtn01Nor");
  v298 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick01");
  NiObjectNET::SetName(v298, "SlideBar_DnBtn01Click");
  v299 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver01");
  NiObjectNET::SetName(v299, "SlideBar_DnBtn01Over");
  v300 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor01");
  NiObjectNET::SetName(v300, "SlideBar_UpBtn01Nor");
  v301 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick01");
  NiObjectNET::SetName(v301, "SlideBar_UpBtn01Click");
  v302 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver01");
  NiObjectNET::SetName(v302, "SlideBar_UpBtn01Over");
  v303 = SlideBar::CreateWin(
           spNode.m_pObject,
           "SlideBar01",
           "SlideBar_UpBtn01",
           "SlideBar_DnBtn01",
           v296,
           0,
           &v3->baseclass_0.baseclass_0.baseclass_0);
  v3->m_pkMapSlideBar = v303;
  v303->m_uiClickMsg = 8;
  v3->m_pkMapSlideBar->m_eType = 1;
  v304 = v3->m_pkMapSlideBar;
  v305 = v304->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v306 = v3->m_pkMapSlideBar;
  v307 = ((int (__thiscall *)(SlideBar *))v304->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3->m_pkMapSlideBar);
  v308 = (int)v306->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                (NiRefObject *)v306,
                v307);
  v305[77].__vecDelDtor((NiRefObject *)v3->m_pkMapSlideBar, v308);
  ((void (__stdcall *)(_DWORD))v3->m_pkMapSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  SlideBar::SetSplitCnt(v3->m_pkMapSlideBar, v3->m_pkMapSlideListWin->m_nSlideSplitCnt);
  ((void (__thiscall *)(FullMapWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v3->m_pkWorldMapWin = WorldMapWin::CreateWin(v3->baseclass_0.m_pkFrameWork);
  FullMapWin::InitVisibleControls(v3);
  v309 = v3->m_pkSlides;
  pkTexture = v309->m_nCurPos;
  i = (double)pkTexture / 100.0;
  SlideBar::SetCurPos(v309, pkTexture);
  ((void (__stdcall *)(_DWORD))v3->m_pkInvisibleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(i));
  if ( i >= 0.8999999761581421 )
    v310 = 1.0;
  else
    v310 = 0.0;
  v311 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkWinSpr = v310;
  ((void (__thiscall *)(FullMapWin *))v311[69].__vecDelDtor)(v3);
  v312 = thisa;
  v313 = 0;
  v314 = (signed int)((char *)thisa->baseclass_0._Mylast - *(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v314 )
  {
    do
    {
      if ( *(_DWORD *)(*(_DWORD *)&v312->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v313) )
      {
        v315 = i;
        if ( i < 0.5 )
          v315 = 0.60000002;
        v316 = *(_DWORD *)(*(_DWORD *)&v312->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v313);
        *(float *)&thisa = v315;
        (*(void (__stdcall **)(std::vector<unsigned long,std::allocator<unsigned long> > *))(*(_DWORD *)v316 + 276))(thisa);
      }
      ++v313;
    }
    while ( v313 < v314 );
  }
  LOBYTE(v336) = 4;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)pkTexture);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v336) = 0;
  _eh_vector_destructor_iterator_(
    pTextList,
    0x1Cu,
    20,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  v336 = -1;
  if ( spNode.m_pObject )
  {
    v317 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v317 )
        v317->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v317, 1u);
    }
  }
  return 1;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0050B570) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);

//----- (0050B580) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
}
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);

//----- (0050B590) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
}
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);

//----- (0050B5A0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
}
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);

//----- (0050B5B0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key, NiVBSet *val)
{
  unsigned int v3; // ebx@1
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v4; // esi@1
  int v5; // eax@1
  NiTMapItem<unsigned int,NiVBSet *> *v6; // edi@1
  int v7; // edi@4
  int uiIndex; // [sp+14h] [bp+8h]@1

  v3 = key;
  v4 = this;
  v5 = ((int (__stdcall *)(_DWORD))this->vfptr->KeyToHashIndex)(key);
  v6 = v4->m_ppkHashTable[v5];
  uiIndex = v5;
  if ( v6 )
  {
    while ( !v4->vfptr->IsKeysEqual(v4, v3, v6->m_key) )
    {
      v6 = v6->m_pkNext;
      if ( !v6 )
        goto LABEL_4;
    }
    v4->vfptr->ClearValue(v4, v6);
    v4->vfptr->SetValue(v4, v6, v3, val);
  }
  else
  {
LABEL_4:
    v7 = (int)v4->vfptr->NewItem(v4);
    v4->vfptr->SetValue(v4, (NiTMapItem<unsigned int,NiVBSet *> *)v7, v3, val);
    *(_DWORD *)v7 = v4->m_ppkHashTable[uiIndex];
    v4->m_ppkHashTable[uiIndex] = (NiTMapItem<unsigned int,NiVBSet *> *)v7;
    ++*(_DWORD *)&v4->m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  }
}

//----- (0050B640) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::SetAt(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key, KQTeamMarkWin *val)
{
  int v3; // ebx@1
  NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *v4; // esi@1
  int v5; // eax@1
  NiTMapItem<unsigned short,KQTeamMarkWin *> *v6; // edi@1
  int v7; // edi@4
  int uiIndex; // [sp+14h] [bp+8h]@1

  v3 = key;
  v4 = this;
  v5 = ((int (__stdcall *)(_DWORD))this->vfptr->KeyToHashIndex)(key);
  v6 = v4->m_ppkHashTable[v5];
  *(_DWORD *)&key = v5;
  if ( v6 )
  {
    while ( !v4->vfptr->IsKeysEqual(v4, v3, v6->m_key) )
    {
      v6 = v6->m_pkNext;
      if ( !v6 )
        goto LABEL_4;
    }
    v4->vfptr->ClearValue(v4, v6);
    v4->vfptr->SetValue(v4, v6, v3, val);
  }
  else
  {
LABEL_4:
    v7 = (int)v4->vfptr->NewItem(v4);
    v4->vfptr->SetValue(v4, (NiTMapItem<unsigned short,KQTeamMarkWin *> *)v7, v3, val);
    *(_DWORD *)v7 = v4->m_ppkHashTable[uiIndex];
    v4->m_ppkHashTable[uiIndex] = (NiTMapItem<unsigned short,KQTeamMarkWin *> *)v7;
    ++*(_DWORD *)&v4->m_kAllocator.___u0.baseclass_0.dummy[0];
  }
}

//----- (0050B6D0) --------------------------------------------------------
bool __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::RemoveAt(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key)
{
  NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *v2; // esi@1
  int v3; // ebx@1
  NiTMapItem<unsigned short,KQTeamMarkWin *> *v4; // edi@1
  bool result; // al@3
  NiTMapItem<unsigned short,KQTeamMarkWin *> *v6; // ebx@4
  NiTMapItem<unsigned short,KQTeamMarkWin *> *v7; // edi@4

  v2 = this;
  v3 = ((int (__stdcall *)(_DWORD))this->vfptr->KeyToHashIndex)(key);
  v4 = v2->m_ppkHashTable[v3];
  if ( !v4 )
    goto LABEL_7;
  if ( v2->vfptr->IsKeysEqual(v2, key, v4->m_key) )
  {
    v2->m_ppkHashTable[v3] = v4->m_pkNext;
    v2->vfptr->ClearValue(v2, v4);
    v2->vfptr->DeleteItem(v2, v4);
    --*(_DWORD *)&v2->m_kAllocator.___u0.baseclass_0.dummy[0];
    return 1;
  }
  v6 = v4;
  v7 = v4->m_pkNext;
  if ( v7 )
  {
    while ( !v2->vfptr->IsKeysEqual(v2, key, v7->m_key) )
    {
      v6 = v7;
      v7 = v7->m_pkNext;
      if ( !v7 )
        goto LABEL_7;
    }
    v6->m_pkNext = v7->m_pkNext;
    v2->vfptr->ClearValue(v2, v7);
    v2->vfptr->DeleteItem(v2, v7);
    --*(_DWORD *)&v2->m_kAllocator.___u0.baseclass_0.dummy[0];
    result = 1;
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}

//----- (0050B790) --------------------------------------------------------
bool __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::GetAt(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key, KQTeamMarkWin **val)
{
  NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *v3; // esi@1
  NiTMapItem<unsigned short,KQTeamMarkWin *> *v4; // edi@1
  bool result; // al@4

  v3 = this;
  v4 = this->m_ppkHashTable[((int (__stdcall *)(_DWORD))this->vfptr->KeyToHashIndex)(key)];
  if ( v4 )
  {
    while ( !v3->vfptr->IsKeysEqual(v3, key, v4->m_key) )
    {
      v4 = v4->m_pkNext;
      if ( !v4 )
        goto LABEL_4;
    }
    *val = v4->m_val;
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (0050B7F0) --------------------------------------------------------
unsigned int __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::KeyToHashIndex(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key)
{
  return key % this->m_uiHashSize;
}

//----- (0050B810) --------------------------------------------------------
bool __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::IsKeysEqual(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned __int16 key1, unsigned __int16 key2)
{
  return key1 == key2;
}

//----- (0050B830) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::SetValue(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, NiTMapItem<unsigned short,KQTeamMarkWin *> *pkItem, unsigned __int16 key, KQTeamMarkWin *val)
{
  pkItem->m_key = key;
  pkItem->m_val = val;
}

//----- (0050B850) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
}
// 9962B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);

//----- (0050B860) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>(NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);

//----- (0050B870) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>(NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
}
// 9962D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);

//----- (0050B880) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>(NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
}
// 9962E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);

//----- (0050B890) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);

//----- (0050B8C0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);

//----- (0050B8F0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);

//----- (0050B920) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);

//----- (0050B950) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9962B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);

//----- (0050B980) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);

//----- (0050B9B0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9962D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);

//----- (0050B9E0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9962E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);

//----- (0050BA10) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_NiTListBase<NiTPointerAllocator<unsigned_int>_float>(NiTListBase<NiTPointerAllocator<unsigned int>,float> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
}
// 996214: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);

//----- (0050BA20) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,float> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 996214: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);

//----- (0050BA50) --------------------------------------------------------
void __thiscall NiPointer<PgWinLRBut>::_default_constructor_closure_(NiPointer<NiD3DTextureStage> *this)
{
  this->m_pObject = 0;
}

//----- (0050BA60) --------------------------------------------------------
void __thiscall QuestStateImage::_QuestStateImage(QuestStateImage *this)
{
  QuestStateImage *v1; // edi@1
  PgSprData *v2; // esi@1
  PgSprData *v3; // esi@5
  PgSprData *v4; // esi@9
  PgSprData *v5; // esi@13

  v1 = this;
  v2 = this->spLowAble.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->spReward.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->spAble.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v1->spIng.m_pObject;
  if ( v1->spIng.m_pObject && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) )
  {
    if ( v5 )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  }
}

//----- (0050BB40) --------------------------------------------------------
void __thiscall NiTPointerList<NpcMarkWin__>::_NiTPointerList<NpcMarkWin__>(NiTPointerList<NpcMarkWin *> *this)
{
  NiTPointerList<NpcMarkWin *> *v1; // edi@1
  NiTListItem<NpcMarkWin *> *v2; // esi@1
  NiTListItem<NpcMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
}
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);
// 996244: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);

//----- (0050BBC0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NpcMarkWin *> *v3; // esi@1
  NiTListItem<NpcMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);
// 996244: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);

//----- (0050BC50) --------------------------------------------------------
void __thiscall NiTPointerList<MobCoordinate__>::_NiTPointerList<MobCoordinate__>(NiTPointerList<MobCoordinate *> *this)
{
  NiTPointerList<MobCoordinate *> *v1; // edi@1
  NiTListItem<MobCoordinate *> *v2; // esi@1
  NiTListItem<MobCoordinate *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
}
// 9962E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);
// 9962F4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);

//----- (0050BCD0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MobCoordinate *> *v3; // esi@1
  NiTListItem<MobCoordinate *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);
// 9962F4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);

//----- (0050BD60) --------------------------------------------------------
void __thiscall NiTPointerList<float>::_NiTPointerList<float>(NiTPointerList<float> *this)
{
  NiTPointerList<float> *v1; // edi@1
  NiTListItem<float> *v2; // esi@1
  NiTListItem<float> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,float> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
}
// 996214: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);
// 996304: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);

//----- (0050BDE0) --------------------------------------------------------
void *__thiscall PgWinProxy::_scalar_deleting_destructor_(PgWinProxy *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0050BE10) --------------------------------------------------------
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::AddTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,float> *this, const float *element)
{
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,float> *v2; // esi@1
  int v3; // eax@1
  double v4; // st7@1
  NiTListItem<float> *v5; // ecx@1

  v2 = this;
  v3 = ((int (*)(void))this->baseclass_0.vfptr->NewItem)();
  v4 = *element;
  *(_DWORD *)v3 = 0;
  *(float *)(v3 + 8) = v4;
  *(_DWORD *)(v3 + 4) = v2->baseclass_0.m_pkTail;
  v5 = v2->baseclass_0.m_pkTail;
  if ( v5 )
  {
    v5->m_pkNext = (NiTListItem<float> *)v3;
    ++*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v2->baseclass_0.m_pkTail = (NiTListItem<float> *)v3;
  }
  else
  {
    ++*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v2->baseclass_0.m_pkHead = (NiTListItem<float> *)v3;
    v2->baseclass_0.m_pkTail = (NiTListItem<float> *)v3;
  }
}

//----- (0050BE60) --------------------------------------------------------
void __thiscall PgTList<NpcMarkWin__>::_PgTList<NpcMarkWin__>(PgTList<NpcMarkWin *> *this)
{
  PgTList<NpcMarkWin *> *v1; // edi@1
  NiTListItem<NpcMarkWin *> *v2; // esi@1
  NiTListItem<NpcMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&PgTList<NpcMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
}
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);
// 99637C: using guessed type int (__thiscall *PgTList_NpcMarkWin _____vftable_)(void *p, char);

//----- (0050BEE0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>(NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *> *this)
{
  NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *> *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);

//----- (0050BF00) --------------------------------------------------------
void __thiscall NiTMap<unsigned_int_MapMarkWin__>::_NiTMap<unsigned_int_MapMarkWin__>(NiTMap<unsigned int,MapMarkWin *> *this)
{
  NiTMap<unsigned int,MapMarkWin *> *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMap<unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 99638C: using guessed type int (__thiscall *NiTMap_unsigned int_MapMarkWin _____vftable_)(void *p, char);

//----- (0050BF70) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this)
{
  NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);

//----- (0050BF90) --------------------------------------------------------
void __thiscall NiTMap<unsigned_short_KQTeamMarkWin__>::_NiTMap<unsigned_short_KQTeamMarkWin__>(NiTMap<unsigned short,KQTeamMarkWin *> *this)
{
  NiTMap<unsigned short,KQTeamMarkWin *> *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMap<unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 9963AC: using guessed type int (__thiscall *NiTMap_unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);

//----- (0050C000) --------------------------------------------------------
void __thiscall PgTList<MobCoordinate__>::_PgTList<MobCoordinate__>(PgTList<MobCoordinate *> *this)
{
  PgTList<MobCoordinate *> *v1; // edi@1
  NiTListItem<MobCoordinate *> *v2; // esi@1
  NiTListItem<MobCoordinate *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&PgTList<MobCoordinate__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
}
// 9962E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);
// 9963CC: using guessed type int (__thiscall *PgTList_MobCoordinate _____vftable_)(void *p, char);

//----- (0050C080) --------------------------------------------------------
void __thiscall PgTList<float>::_PgTList<float>(PgTList<float> *this)
{
  PgTList<float> *v1; // edi@1
  NiTListItem<float> *v2; // esi@1
  NiTListItem<float> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&PgTList<float>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,float> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
}
// 996214: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);
// 9963DC: using guessed type int (__thiscall *PgTList_float____vftable_)(void *p, char);

//----- (0050C100) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_scalar_deleting_destructor_(NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *> *this, unsigned int a2)
{
  NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *> *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);

//----- (0050C140) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vector_deleting_destructor_(NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *this, unsigned int a2)
{
  NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);

//----- (0050C180) --------------------------------------------------------
void __thiscall NiTPointerMap<unsigned_int_float>::DeleteItem(NiTPointerMap<unsigned int,float> *this, NiTMapItem<unsigned int,float> *pkItem)
{
  bool v2; // zf@1

  pkItem->m_val = 0.0;
  EnterCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
  dword_B6DFE8 = GetCurrentThreadId();
  ++dword_B6DFEC;
  pkItem->m_key = 0;
  pkItem->m_pkNext = (NiTMapItem<unsigned int,float> *)NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
  v2 = dword_B6DFEC-- == 1;
  NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem = (int)pkItem;
  if ( v2 )
    dword_B6DFE8 = 0;
  LeaveCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
}
// 50C180: could not find valid save-restore pair for esi
// B6DFCC: using guessed type int NiTAbstractPoolAllocator_unsigned int___ms_pkFreeMem;
// B6DFE8: using guessed type int dword_B6DFE8;
// B6DFEC: using guessed type int dword_B6DFEC;

//----- (0050C1E0) --------------------------------------------------------
void __thiscall NiTPointerList<RaidMarkWin__>::_NiTPointerList<RaidMarkWin__>(NiTPointerList<RaidMarkWin *> *this)
{
  NiTPointerList<RaidMarkWin *> *v1; // edi@1
  NiTListItem<RaidMarkWin *> *v2; // esi@1
  NiTListItem<RaidMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);
// 996314: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);

//----- (0050C260) --------------------------------------------------------
void *__thiscall PgTList<NpcMarkWin__>::_vector_deleting_destructor_(PgTList<NpcMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NpcMarkWin *> *v3; // esi@1
  NiTListItem<NpcMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&PgTList<NpcMarkWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);
// 99637C: using guessed type int (__thiscall *PgTList_NpcMarkWin _____vftable_)(void *p, char);

//----- (0050C2F0) --------------------------------------------------------
void __thiscall NiTPointerList<PartyMarkWin__>::_NiTPointerList<PartyMarkWin__>(NiTPointerList<PartyMarkWin *> *this)
{
  NiTPointerList<PartyMarkWin *> *v1; // edi@1
  NiTListItem<PartyMarkWin *> *v2; // esi@1
  NiTListItem<PartyMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
}
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);
// 996324: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);

//----- (0050C370) --------------------------------------------------------
void __thiscall NiTPointerList<QuestHelperMarkWin__>::_NiTPointerList<QuestHelperMarkWin__>(NiTPointerList<QuestHelperMarkWin *> *this)
{
  NiTPointerList<QuestHelperMarkWin *> *v1; // edi@1
  NiTListItem<QuestHelperMarkWin *> *v2; // esi@1
  NiTListItem<QuestHelperMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
}
// 9962B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);
// 996334: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);

//----- (0050C3F0) --------------------------------------------------------
void __thiscall NiTPointerList<PgWinSpr__>::_NiTPointerList<PgWinSpr__>(NiTPointerList<PgWinSpr *> *this)
{
  NiTPointerList<PgWinSpr *> *v1; // edi@1
  NiTListItem<PgWinSpr *> *v2; // esi@1
  NiTListItem<PgWinSpr *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);
// 996344: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);

//----- (0050C470) --------------------------------------------------------
void __thiscall NiTPointerList<MobAreaMarkWin__>::_NiTPointerList<MobAreaMarkWin__>(NiTPointerList<MobAreaMarkWin *> *this)
{
  NiTPointerList<MobAreaMarkWin *> *v1; // edi@1
  NiTListItem<MobAreaMarkWin *> *v2; // esi@1
  NiTListItem<MobAreaMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
}
// 9962D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);
// 996354: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);

//----- (0050C4F0) --------------------------------------------------------
void __thiscall NiTPointerList<GTIScanMarkWin__>::_NiTPointerList<GTIScanMarkWin__>(NiTPointerList<GTIScanMarkWin *> *this)
{
  NiTPointerList<GTIScanMarkWin *> *v1; // edi@1
  NiTListItem<GTIScanMarkWin *> *v2; // esi@1
  NiTListItem<GTIScanMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
}
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);
// 996364: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);

//----- (0050C570) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<RaidMarkWin *> *v3; // esi@1
  NiTListItem<RaidMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);
// 996314: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);

//----- (0050C600) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PartyMarkWin *> *v3; // esi@1
  NiTListItem<PartyMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);
// 996324: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);

//----- (0050C690) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QuestHelperMarkWin *> *v3; // esi@1
  NiTListItem<QuestHelperMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);
// 996334: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);

//----- (0050C720) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PgWinSpr *> *v3; // esi@1
  NiTListItem<PgWinSpr *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);
// 996344: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);

//----- (0050C7B0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MobAreaMarkWin *> *v3; // esi@1
  NiTListItem<MobAreaMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);
// 996354: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);

//----- (0050C840) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<GTIScanMarkWin *> *v3; // esi@1
  NiTListItem<GTIScanMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);
// 996364: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);

//----- (0050C8D0) --------------------------------------------------------
void *__thiscall PgTList<MobCoordinate__>::_scalar_deleting_destructor_(PgTList<MobCoordinate *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MobCoordinate *> *v3; // esi@1
  NiTListItem<MobCoordinate *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobCoordinate *>Vtbl *)&PgTList<MobCoordinate__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MobCoordinate__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobCoordinate _____vftable_)(void *p, char);
// 9963CC: using guessed type int (__thiscall *PgTList_MobCoordinate _____vftable_)(void *p, char);

//----- (0050C960) --------------------------------------------------------
void *__thiscall PgTList<float>::_vector_deleting_destructor_(PgTList<float> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<float> *v3; // esi@1
  NiTListItem<float> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&PgTList<float>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996214: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);
// 9963DC: using guessed type int (__thiscall *PgTList_float____vftable_)(void *p, char);

//----- (0050C9F0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::_vector_deleting_destructor_(NiTPointerList<float> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<float> *v3; // esi@1
  NiTListItem<float> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,float>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_float>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996214: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);
// 996304: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__float____vftable_)(void *p, char);

//----- (0050CA80) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_int_MapMarkWin__>::_vector_deleting_destructor_(NiTMap<unsigned int,MapMarkWin *> *this, unsigned int a2)
{
  NiTMap<unsigned int,MapMarkWin *> *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMap<unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 99638C: using guessed type int (__thiscall *NiTMap_unsigned int_MapMarkWin _____vftable_)(void *p, char);

//----- (0050CB00) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_short_KQTeamMarkWin__>::_scalar_deleting_destructor_(NiTMap<unsigned short,KQTeamMarkWin *> *this, unsigned int a2)
{
  NiTMap<unsigned short,KQTeamMarkWin *> *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMap<unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 9963AC: using guessed type int (__thiscall *NiTMap_unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);

//----- (0050CB80) --------------------------------------------------------
void __thiscall PgTList<RaidMarkWin__>::_PgTList<RaidMarkWin__>(PgTList<RaidMarkWin *> *this)
{
  PgTList<RaidMarkWin *> *v1; // edi@1
  NiTListItem<RaidMarkWin *> *v2; // esi@1
  NiTListItem<RaidMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&PgTList<RaidMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);
// 9963FC: using guessed type int (__thiscall *PgTList_RaidMarkWin _____vftable_)(void *p, char);

//----- (0050CC00) --------------------------------------------------------
void __thiscall PgTList<PartyMarkWin__>::_PgTList<PartyMarkWin__>(PgTList<PartyMarkWin *> *this)
{
  PgTList<PartyMarkWin *> *v1; // edi@1
  NiTListItem<PartyMarkWin *> *v2; // esi@1
  NiTListItem<PartyMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&PgTList<PartyMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
}
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);
// 99640C: using guessed type int (__thiscall *PgTList_PartyMarkWin _____vftable_)(void *p, char);

//----- (0050CC80) --------------------------------------------------------
void __thiscall PgTList<GTIScanMarkWin__>::_PgTList<GTIScanMarkWin__>(PgTList<GTIScanMarkWin *> *this)
{
  PgTList<GTIScanMarkWin *> *v1; // edi@1
  NiTListItem<GTIScanMarkWin *> *v2; // esi@1
  NiTListItem<GTIScanMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&PgTList<GTIScanMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
}
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);
// 99641C: using guessed type int (__thiscall *PgTList_GTIScanMarkWin _____vftable_)(void *p, char);

//----- (0050CD00) --------------------------------------------------------
void __thiscall PgTList<QuestHelperMarkWin__>::_PgTList<QuestHelperMarkWin__>(PgTList<QuestHelperMarkWin *> *this)
{
  PgTList<QuestHelperMarkWin *> *v1; // edi@1
  NiTListItem<QuestHelperMarkWin *> *v2; // esi@1
  NiTListItem<QuestHelperMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&PgTList<QuestHelperMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
}
// 9962B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);
// 99642C: using guessed type int (__thiscall *PgTList_QuestHelperMarkWin _____vftable_)(void *p, char);

//----- (0050CD80) --------------------------------------------------------
NiLight *__thiscall NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *this, NiLight *const *element)
{
  NiTListItem<NiLight *> *v2; // eax@1
  NiLight **v3; // ebx@1
  int v4; // edx@2
  NiLight *const *v5; // esi@2
  NiLight *result; // eax@6

  v2 = this->baseclass_0.m_pkHead;
  v3 = element;
  if ( v2 )
  {
    while ( 1 )
    {
      v4 = (int)&v2->m_element;
      v5 = (NiLight *const *)v2;
      v2 = v2->m_pkNext;
      if ( *element == *(NiLight *const *)v4 )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v5 = 0;
  }
  element = v5;
  if ( v5 )
    result = (NiLight *)NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
                          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)this,
                          (void **)&element);
  else
    result = *v3;
  return result;
}

//----- (0050CDD0) --------------------------------------------------------
void __thiscall PgTList<PgWinSpr__>::_PgTList<PgWinSpr__>(PgTList<PgWinSpr *> *this)
{
  PgTList<PgWinSpr *> *v1; // edi@1
  NiTListItem<PgWinSpr *> *v2; // esi@1
  NiTListItem<PgWinSpr *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);

//----- (0050CE50) --------------------------------------------------------
void __thiscall PgTList<MobAreaMarkWin__>::_PgTList<MobAreaMarkWin__>(PgTList<MobAreaMarkWin *> *this)
{
  PgTList<MobAreaMarkWin *> *v1; // edi@1
  NiTListItem<MobAreaMarkWin *> *v2; // esi@1
  NiTListItem<MobAreaMarkWin *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&PgTList<MobAreaMarkWin__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
}
// 9962D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);
// 99644C: using guessed type int (__thiscall *PgTList_MobAreaMarkWin _____vftable_)(void *p, char);

//----- (0050CED0) --------------------------------------------------------
void *__thiscall PgTList<RaidMarkWin__>::_scalar_deleting_destructor_(PgTList<RaidMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<RaidMarkWin *> *v3; // esi@1
  NiTListItem<RaidMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&PgTList<RaidMarkWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);
// 9963FC: using guessed type int (__thiscall *PgTList_RaidMarkWin _____vftable_)(void *p, char);

//----- (0050CF60) --------------------------------------------------------
void *__thiscall PgTList<PartyMarkWin__>::_vector_deleting_destructor_(PgTList<PartyMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PartyMarkWin *> *v3; // esi@1
  NiTListItem<PartyMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&PgTList<PartyMarkWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);
// 99640C: using guessed type int (__thiscall *PgTList_PartyMarkWin _____vftable_)(void *p, char);

//----- (0050CFF0) --------------------------------------------------------
void *__thiscall PgTList<QuestHelperMarkWin__>::_scalar_deleting_destructor_(PgTList<QuestHelperMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QuestHelperMarkWin *> *v3; // esi@1
  NiTListItem<QuestHelperMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMarkWin *>Vtbl *)&PgTList<QuestHelperMarkWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMarkWin _____vftable_)(void *p, char);
// 99642C: using guessed type int (__thiscall *PgTList_QuestHelperMarkWin _____vftable_)(void *p, char);

//----- (0050D080) --------------------------------------------------------
void *__thiscall PgTList<PgWinSpr__>::_vector_deleting_destructor_(PgTList<PgWinSpr *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PgWinSpr *> *v3; // esi@1
  NiTListItem<PgWinSpr *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);

//----- (0050D110) --------------------------------------------------------
void *__thiscall PgTList<MobAreaMarkWin__>::_scalar_deleting_destructor_(PgTList<MobAreaMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MobAreaMarkWin *> *v3; // esi@1
  NiTListItem<MobAreaMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MobAreaMarkWin *>Vtbl *)&PgTList<MobAreaMarkWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MobAreaMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9962D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MobAreaMarkWin _____vftable_)(void *p, char);
// 99644C: using guessed type int (__thiscall *PgTList_MobAreaMarkWin _____vftable_)(void *p, char);

//----- (0050D1A0) --------------------------------------------------------
void *__thiscall PgTList<GTIScanMarkWin__>::_scalar_deleting_destructor_(PgTList<GTIScanMarkWin *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<GTIScanMarkWin *> *v3; // esi@1
  NiTListItem<GTIScanMarkWin *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&PgTList<GTIScanMarkWin__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);
// 99641C: using guessed type int (__thiscall *PgTList_GTIScanMarkWin _____vftable_)(void *p, char);

//----- (0050D230) --------------------------------------------------------
void *__thiscall FullMapWin::_vector_deleting_destructor_(FullMapWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  FullMapWin::_FullMapWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0050D280) --------------------------------------------------------
void __thiscall GateChannelWin::Link(GateChannelWin *this, GateChannelWin::BtnMsg BtnIndex)
{
  GateChannelWin *v2; // esi@1
  PgFrameWork *v3; // ecx@1
  char *v4; // esi@4
  int v5; // edx@6
  _BYTE v6[12]; // ST00_12@9

  v2 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !BtnIndex )
  {
    if ( !v3 )
      return;
    v5 = (int)v2->m_LinkData.LinkMapName;
    goto LABEL_9;
  }
  if ( BtnIndex == 1 )
  {
    if ( !v3 )
      return;
    v5 = (int)&v2->m_LinkData.LinkMapName[1];
LABEL_9:
    *(_DWORD *)v6 = *(_DWORD *)v5;
    *(_QWORD *)&v6[4] = *(_QWORD *)(v5 + 4);
    GameFrameWork::SendMapMultyLink((GameFrameWork *)v3, *(Name3 *)v6);
    return;
  }
  if ( BtnIndex == 2 )
  {
    v4 = (char *)&v2->m_LinkData;
    memset(v4, 0, 0x49u);
    *(_WORD *)v4 = -1;
  }
}

//----- (0050D310) --------------------------------------------------------
void __thiscall GateChannelWin::_GateChannelWin(GateChannelWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GateChannelWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GateChannelWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_LinkData.LinkMapName,
    0xCu,
    5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  PgWinFrame::_PgWinFrame(v1);
}
// 99678C: using guessed type int (__stdcall *GateChannelWin___vftable_)(int uiFlags);
// 9967AC: using guessed type int (__thiscall *GateChannelWin___vftable_)(void *p, char);

//----- (0050D390) --------------------------------------------------------
void __thiscall GateChannelWin::OnCommand(GateChannelWin *this, unsigned int wParam, int lParam)
{
  GateChannelWin *v3; // esi@1
  char *v4; // esi@4
  PgFrameWork *v5; // eax@5
  int v6; // edx@6
  _BYTE v7[12]; // ST00_12@9

  v3 = this;
  if ( !wParam )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( !v5 )
      return;
    v6 = (int)v3->m_LinkData.LinkMapName;
    goto LABEL_9;
  }
  if ( wParam == 1 )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( !v5 )
      return;
    v6 = (int)&v3->m_LinkData.LinkMapName[1];
LABEL_9:
    *(_DWORD *)v7 = *(_DWORD *)v6;
    *(_QWORD *)&v7[4] = *(_QWORD *)(v6 + 4);
    GameFrameWork::SendMapMultyLink((GameFrameWork *)v5, *(Name3 *)v7);
    return;
  }
  if ( wParam == 2 )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = (char *)&v3->m_LinkData;
    memset(v4, 0, 0x49u);
    *(_WORD *)v4 = -1;
  }
}

//----- (0050D460) --------------------------------------------------------
void __thiscall GateChannelWin::GateChannelWin(GateChannelWin *this)
{
  GateChannelWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GateChannelWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GateChannelWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_LinkData.LinkMapName,
    0xCu,
    5,
    (void (__thiscall *)(void *))Name3::Name3,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}
// 99678C: using guessed type int (__stdcall *GateChannelWin___vftable_)(int uiFlags);
// 9967AC: using guessed type int (__thiscall *GateChannelWin___vftable_)(void *p, char);

//----- (0050D4E0) --------------------------------------------------------
bool __thiscall GateChannelWin::Create(GateChannelWin *this, PgFrameWork *pkFrameWork)
{
  GateChannelWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  PgSprData *v8; // eax@15
  NiNode *v9; // esi@16
  int v10; // edi@20
  int v11; // ebx@20
  NiSourceTexture *v12; // eax@20
  PgSprData *v13; // eax@23
  PgSprData::PgHitTester *v14; // eax@23
  unsigned int v15; // ST48_4@23
  PgFont *v16; // eax@23
  PgWinText *v17; // eax@23
  char *v18; // eax@23
  NiPointer<PgSprData::PgHitTester> *v19; // ecx@23
  unsigned int v20; // ST48_4@23
  PgFont *v21; // eax@23
  PgWinText *v22; // eax@23
  char *v23; // eax@23
  NiPointer<PgSprData::PgHitTester> *v24; // ecx@23
  unsigned int v25; // ST48_4@23
  PgFont *v26; // eax@23
  PgWinText *v27; // eax@23
  char *v28; // eax@23
  NiPointer<PgSprData::PgHitTester> *v29; // ecx@23
  unsigned int v30; // ST48_4@23
  PgFont *v31; // eax@23
  PgWinText *v32; // eax@23
  NiRefObjectVtbl *v33; // edi@23
  char *v34; // eax@23
  NiNode *v35; // eax@23
  NiNode *v36; // esi@24
  const char *v37; // [sp+28h] [bp-40h]@21
  int *v38; // [sp+2Ch] [bp-3Ch]@21
  int *v39; // [sp+30h] [bp-38h]@21
  volatile LONG *v40; // [sp+34h] [bp-34h]@7
  NiSourceTexture *v41; // [sp+34h] [bp-34h]@21
  NiSourceTexture *pkTexture; // [sp+4Ch] [bp-1Ch]@12
  int uiLeft; // [sp+50h] [bp-18h]@15
  int uiTop; // [sp+54h] [bp-14h]@15
  NiPointer<NiNode> spNode; // [sp+58h] [bp-10h]@1
  int v46; // [sp+64h] [bp-4h]@1
  unsigned int pkSprData; // [sp+70h] [bp+8h]@23
  NiRefObjectVtbl *pkSprDataa; // [sp+70h] [bp+8h]@23
  PgSprData *pkSprDatab; // [sp+70h] [bp+8h]@23
  unsigned int pkSprDatac; // [sp+70h] [bp+8h]@23
  NiRefObjectVtbl *pkSprDatad; // [sp+70h] [bp+8h]@23
  PgSprData *pkSprDatae; // [sp+70h] [bp+8h]@23
  unsigned int pkSprDataf; // [sp+70h] [bp+8h]@23
  NiRefObjectVtbl *pkSprDatag; // [sp+70h] [bp+8h]@23
  PgSprData *pkSprDatah; // [sp+70h] [bp+8h]@23
  unsigned int pkSprDatai; // [sp+70h] [bp+8h]@23

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v46 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GateChannel.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\GateChannel.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v46 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v40 = (volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v6 = spNode.m_pObject;
    v46 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v40 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
    if ( !InterlockedDecrement(v40) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "GateChannelWin", 0) )
  {
    v9 = spNode.m_pObject;
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    return 0;
  }
  v10 = uiLeft;
  v11 = uiTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v41 = v12;
    v39 = &uiTop;
    v38 = &uiLeft;
    v37 = "Theme";
  }
  else
  {
    v41 = 0;
    v39 = &uiTop;
    v38 = &uiLeft;
    v37 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v37, v38, v39, v41);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Textbox", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
  pkSprData = v14->m_uiHeight;
  v15 = v14->m_uiWidth;
  v16 = Font::Get(0);
  v17 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          v15,
          pkSprData,
          v16,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_TextWin[0] = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  pkSprDataa = v2->m_TextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData::Get(0x97A4A8DFu);
  pkSprDataa[118].__vecDelDtor((NiRefObject *)v2->m_TextWin[0], (unsigned int)v18);
  ((void (__stdcall *)(_DWORD))v2->m_TextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkSprDatab = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkSprDatab, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add(pkSprDatab, &spNode.m_pObject->baseclass_0, "Btn01Over");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkSprDatab, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v19 = pkSprDatab->m_akHitTester.m_pBase;
  pkSprDatac = v19->m_pObject->m_uiHeight;
  v20 = v19->m_pObject->m_uiWidth;
  v21 = Font::Get(0);
  v22 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          v20,
          pkSprDatac,
          v21,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_TextWin[1] = v22;
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v22,
    5u);
  pkSprDatad = v2->m_TextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0x97A4A8DFu);
  pkSprDatad[118].__vecDelDtor((NiRefObject *)v2->m_TextWin[1], (unsigned int)v23);
  ((void (__stdcall *)(_DWORD))v2->m_TextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkSprDatae = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkSprDatae, &spNode.m_pObject->baseclass_0, "Btn02Click");
  PgSprData::Add(pkSprDatae, &spNode.m_pObject->baseclass_0, "Btn02Over");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkSprDatae, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v24 = pkSprDatae->m_akHitTester.m_pBase;
  pkSprDataf = v24->m_pObject->m_uiHeight;
  v25 = v24->m_pObject->m_uiWidth;
  v26 = Font::Get(0);
  v27 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          v25,
          pkSprDataf,
          v26,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_TextWin[2] = v27;
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    5u);
  pkSprDatag = v2->m_TextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = TextData::Get(0x97A4A8DFu);
  pkSprDatag[118].__vecDelDtor((NiRefObject *)v2->m_TextWin[2], (unsigned int)v28);
  ((void (__stdcall *)(_DWORD))v2->m_TextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkSprDatah = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkSprDatah, &spNode.m_pObject->baseclass_0, "Btn03Click");
  PgSprData::Add(pkSprDatah, &spNode.m_pObject->baseclass_0, "Btn03Over");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkSprDatah, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v29 = pkSprDatah->m_akHitTester.m_pBase;
  pkSprDatai = v29->m_pObject->m_uiHeight;
  v30 = v29->m_pObject->m_uiWidth;
  v31 = Font::Get(0);
  v32 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          v30,
          pkSprDatai,
          v31,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_TextWin[3] = v32;
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v32,
    5u);
  v33 = v2->m_TextWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = TextData::Get(0x97A4A8DFu);
  v33[118].__vecDelDtor((NiRefObject *)v2->m_TextWin[3], (unsigned int)v34);
  ((void (__stdcall *)(_DWORD))v2->m_TextWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(GateChannelWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  v35 = spNode.m_pObject;
  v2->m_LinkData.npcHandle = -1;
  v46 = -1;
  if ( v35 )
  {
    v36 = v35;
    if ( !InterlockedDecrement((volatile LONG *)&v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v36 )
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
    }
  }
  return 1;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0050DA80) --------------------------------------------------------
void __thiscall GateChannelWin::UpdateMeWin(GateChannelWin *this, float fCurTime)
{
  GateChannelWin *v2; // edi@1
  char *v3; // esi@1
  float v4; // ST14_4@2
  float v5; // ST18_4@2
  double v6; // st7@2
  double v7; // st5@2
  MapNavigator *v8; // ebx@6
  NiPoint3 UserPos; // [sp+14h] [bp-1Ch]@2
  float v10; // [sp+20h] [bp-10h]@2
  float v11; // [sp+24h] [bp-Ch]@2
  float pkNavi; // [sp+28h] [bp-8h]@2
  NiPointer<MapNavigator> result; // [sp+2Ch] [bp-4h]@2

  v2 = this;
  v3 = (char *)&this->m_LinkData;
  if ( this->m_LinkData.npcHandle != -1 )
  {
    v4 = (double)this->m_LinkData.npcPosition.x;
    v5 = (double)this->m_LinkData.npcPosition.y;
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&UserPos);
    v10 = UserPos.x - v4;
    UserPos.x = v10;
    result.m_pObject = (MapNavigator *)v2->m_LinkData.limitRange;
    v11 = UserPos.y - v5;
    UserPos.y = v11;
    pkNavi = 0.0 - 0.0;
    v6 = v11;
    UserPos.z = pkNavi;
    v7 = pkNavi;
    *(double *)&v11 = (double)(signed int)result.m_pObject;
    *(float *)&result.m_pObject = v6 * v6 + v10 * v10 + v7 * v7;
    *(float *)&result.m_pObject = sqrt(*(float *)&result.m_pObject);
    if ( *(float *)&result.m_pObject > *(double *)&v11 )
    {
      memset(v3, 0, 0x49u);
      *(_WORD *)v3 = -1;
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  if ( (unsigned __int8)((int (__thiscall *)(GateChannelWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    LODWORD(pkNavi) = MapNavigator::GetMapNavigator(&result)->m_pObject;
    if ( *(float *)&result.m_pObject != 0.0 )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    if ( pkNavi != 0.0 )
    {
      if ( *(_DWORD *)(LODWORD(pkNavi) + 60) == 2 )
      {
        memset(v3, 0, 0x49u);
        *(_WORD *)v3 = -1;
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}

//----- (0050DBF0) --------------------------------------------------------
void __thiscall GateChannelWin::OpenWindow(GateChannelWin *this, PROTO_NC_MAP_MULTY_LINK_CMD *pkProto)
{
  GateChannelWin *v2; // esi@1
  signed int v3; // edi@1
  MapInfo *v4; // ebx@3
  NiRefObjectVtbl *v5; // edi@5
  char *v6; // eax@5
  char *v7; // eax@5
  signed int i; // [sp+8h] [bp-8h]@1
  signed int BtnIndex; // [sp+Ch] [bp-4h]@1
  int pkProtoa; // [sp+18h] [bp+8h]@2

  v2 = this;
  PROTO_NC_MAP_MULTY_LINK_CMD::operator_(&this->m_LinkData, pkProto);
  v3 = 0;
  BtnIndex = 1;
  i = 0;
  if ( v2->m_LinkData.num )
  {
    pkProtoa = (int)&v2->m_TextWin[1];
    do
    {
      v4 = MapInfoTab::GetByMapName(&v2->m_LinkData.LinkMapName[v3]);
      if ( !v4 )
        break;
      if ( !v3 )
      {
        v5 = v2->m_TextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v6 = TextData2::Get(0x2F51786Bu);
        v7 = fs(v6);
        v5[118].__vecDelDtor((NiRefObject *)v2->m_TextWin[0], (unsigned int)v7);
        v3 = i;
      }
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)pkProtoa + 472))(v4->Name);
      pkProtoa += 4;
      ++BtnIndex;
      if ( BtnIndex > 2 )
        break;
      ++v3;
      i = v3;
    }
    while ( v3 < v2->m_LinkData.num );
  }
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
}

//----- (0050DCD0) --------------------------------------------------------
GateChannelWin *__cdecl GateChannelWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GateChannelWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1B4u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &GateChannelWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GateChannelWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 373,
      0xCu,
      5,
      (void (__thiscall *)(void *))Name3::Name3,
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GateChannelWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99678C: using guessed type int (__stdcall *GateChannelWin___vftable_)(int uiFlags);
// 9967AC: using guessed type int (__thiscall *GateChannelWin___vftable_)(void *p, char);

//----- (0050DE30) --------------------------------------------------------
PROTO_NC_MAP_MULTY_LINK_CMD *__thiscall PROTO_NC_MAP_MULTY_LINK_CMD::operator_(PROTO_NC_MAP_MULTY_LINK_CMD *this, PROTO_NC_MAP_MULTY_LINK_CMD *__that)
{
  PROTO_NC_MAP_MULTY_LINK_CMD *result; // eax@1

  result = this;
  this->npcHandle = __that->npcHandle;
  this->npcPosition.x = __that->npcPosition.x;
  this->npcPosition.y = __that->npcPosition.y;
  this->limitRange = __that->limitRange;
  this->num = __that->num;
  *(_QWORD *)&this->LinkMapName[0].n3_name[0] = *(_QWORD *)&__that->LinkMapName[0].n3_name[0];
  *(_DWORD *)&this->LinkMapName[0].n3_name[8] = *(_DWORD *)&__that->LinkMapName[0].n3_name[8];
  *(_QWORD *)&this->LinkMapName[1].n3_name[0] = *(_QWORD *)&__that->LinkMapName[1].n3_name[0];
  *(_DWORD *)&this->LinkMapName[1].n3_name[8] = *(_DWORD *)&__that->LinkMapName[1].n3_name[8];
  *(_QWORD *)&this->LinkMapName[2].n3_name[0] = *(_QWORD *)&__that->LinkMapName[2].n3_name[0];
  *(_DWORD *)&this->LinkMapName[2].n3_name[8] = *(_DWORD *)&__that->LinkMapName[2].n3_name[8];
  *(_QWORD *)&this->LinkMapName[3].n3_name[0] = *(_QWORD *)&__that->LinkMapName[3].n3_name[0];
  *(_DWORD *)&this->LinkMapName[3].n3_name[8] = *(_DWORD *)&__that->LinkMapName[3].n3_name[8];
  *(_QWORD *)&this->LinkMapName[4].n3_name[0] = *(_QWORD *)&__that->LinkMapName[4].n3_name[0];
  *(_DWORD *)&this->LinkMapName[4].n3_name[8] = *(_DWORD *)&__that->LinkMapName[4].n3_name[8];
  return result;
}

//----- (0050DEC0) --------------------------------------------------------
void *__thiscall GateChannelWin::_scalar_deleting_destructor_(GateChannelWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GateChannelWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GateChannelWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_LinkData.LinkMapName,
    0xCu,
    5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99678C: using guessed type int (__stdcall *GateChannelWin___vftable_)(int uiFlags);
// 9967AC: using guessed type int (__thiscall *GateChannelWin___vftable_)(void *p, char);

//----- (0050DF50) --------------------------------------------------------
void __thiscall GatheringWin::GatheringWin(GatheringWin *this)
{
  GatheringWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GatheringWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GatheringWin::_vftable_;
  v1->m_fTimeWhenStarted = 3.4028235e38;
  v1->m_pkGatheringProgress = 0;
  v1->m_pkSuccessEffect = 0;
  v1->m_fGatheringTime = 0.0;
  v1->m_pkSuccessEffectNode = 0;
  v1->m_pkFailEffectNode = 0;
  v1->m_pkFailEffect = 0;
}
// 996A50: using guessed type int (__stdcall *GatheringWin___vftable_)(int uiFlags);
// 996A6C: using guessed type int (__thiscall *GatheringWin___vftable_)(void *p, char);

//----- (0050DFA0) --------------------------------------------------------
void __thiscall GatheringWin::Stop(GatheringWin *this)
{
  this->m_fGatheringTime = 0.0;
  this->m_fAlphaBlendValue = 1.0;
}

//----- (0050DFC0) --------------------------------------------------------
void __thiscall GatheringWin::GatheringFail(GatheringWin *this)
{
  this->m_fGatheringTime = 0.0;
  this->m_fAlphaBlendValue = 1.0;
}

//----- (0050DFE0) --------------------------------------------------------
void __thiscall GatheringWin::GatheringSuccess(GatheringWin *this)
{
  this->m_fGatheringTime = 0.0;
  this->m_fAlphaBlendValue = 1.0;
}

//----- (0050E000) --------------------------------------------------------
bool __thiscall GatheringWin::IsFinished(GatheringWin *this)
{
  return this->m_fGatheringTime <= 0.0;
}

//----- (0050E020) --------------------------------------------------------
void __thiscall GatheringWin::DirectMessage(GatheringWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GatheringWin *v4; // esi@1
  double v5; // st7@3
  double v6; // st6@3
  bool v7; // zf@4
  int v8; // eax@4
  double v9; // st7@7
  float v10; // ST28_4@9
  signed int v11; // ebx@9
  int v12; // edx@9
  void (__thiscall *v13)(_DWORD, _DWORD, _DWORD); // eax@9
  int v14; // eax@10
  int v15; // eax@12
  int v16; // ecx@13
  int v17; // eax@14
  NiTListItem<NiPointer<NiProperty> > *v18; // eax@18
  float v19; // ST1C_4@18
  int v20; // eax@24
  float v21; // ST1C_4@24
  SoundGroupInterface::SndIndex v22; // [sp+Ch] [bp-24h]@22
  int y; // [sp+2Ch] [bp-4h]@9

  v4 = this;
  if ( iMsgTag == 9 )
  {
    if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0] > 0.0 )
    {
      v5 = Timer::ms_fCurTime
         - this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2];
      v6 = v5 / this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
      iMsgTag = (signed int)v6;
      if ( (signed int)v6 >= SLODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale) )
      {
        v8 = (signed int)v6 & 0x80000001;
        v7 = ((signed int)v6 & 0x80000001) == 0;
        *(float *)&iMsgTag = v5
                           - (double)iMsgTag
                           * this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
        if ( v8 < 0 )
          v7 = ((v8 - 1) | 0xFFFFFFFE) == -1;
        if ( v7 )
          v9 = *(float *)&iMsgTag;
        else
          v9 = 1.0 - *(float *)&iMsgTag;
        v10 = v9;
        iMsgTag = (*(int (**)(void))(*LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0])
                                   + 164))();
        v11 = (signed int)((double)iMsgTag
                         + (double)SLODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.x)
                         * v10);
        v12 = *((_DWORD *)pvBody + 1);
        v13 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)v4 - 58) + 224);
        iMsgTag = *(_DWORD *)pvBody;
        y = v12;
        v13((char *)v4 - 232, &iMsgTag, &y);
        if ( iMsgTag >= 0 )
        {
          v14 = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
          if ( iMsgTag < v14 )
          {
            if ( y >= 0 )
            {
              v15 = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 148))((char *)v4 - 232);
              if ( y < v15 )
              {
                v16 = LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.y);
                if ( iMsgTag < v16
                  || (v17 = LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z),
                      iMsgTag >= v17)
                  || v11 < v16
                  || v11 >= v17 )
                {
                  if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject )
                  {
                    v20 = *(_DWORD *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
                    v21 = (double)iMsgTag;
                    *(_DWORD *)(v20 + 88) = LODWORD(v21);
                    *(float *)(v20 + 92) = 4.0;
                    *(float *)(v20 + 96) = -8.0;
                    NiAVObject::Update(
                      *(NiAVObject **)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0],
                      0.0,
                      1);
                    SpEffect::Start(
                      (SpEffect *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject,
                      LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]));
                  }
                  v22 = 65;
                }
                else
                {
                  if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail )
                  {
                    v18 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
                    v19 = (double)iMsgTag;
                    v18[7].m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)LODWORD(v19);
                    *(float *)&v18[7].m_element.m_pObject = 4.0;
                    *(float *)&v18[8].m_pkNext = -8.0;
                    NiAVObject::Update(
                      (NiAVObject *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
                      0.0,
                      1);
                    SpEffect::Start(
                      (SpEffect *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail,
                      LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]));
                  }
                  if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
                  {
                    (*(void (__stdcall **)(signed int, _DWORD, GatheringWin *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                              + 4))(
                      31,
                      0,
                      v4);
                    if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
                      (*(void (__stdcall **)(signed int, _DWORD, GatheringWin *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                                + 20))(
                        31,
                        0,
                        v4);
                  }
                  ((void (__thiscall *)(GatheringWin *, signed int, _DWORD, GatheringWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
                    v4,
                    31,
                    0,
                    v4);
                  v22 = 64;
                }
                SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v22);
              }
            }
          }
        }
        ++LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale);
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0050E280) --------------------------------------------------------
bool __thiscall GatheringWin::Create(GatheringWin *this, PgFrameWork *pkFrameWork)
{
  GatheringWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@10
  int v9; // ebx@10
  PgSprData *v10; // eax@10
  PgWinSpr *v11; // eax@10
  PgSprData *v12; // eax@10
  PgWinBar *v13; // eax@10
  PgSprData *v14; // eax@10
  PgWinBar *v15; // eax@10
  PgSprData *v16; // eax@10
  PgWinBar *v17; // eax@10
  PgSprData *v18; // eax@10
  PgWinSpr *v19; // eax@10
  NiNode *v20; // eax@10
  void *v21; // eax@11
  SpEffect *v22; // eax@12
  NiNode *v23; // eax@15
  void *v24; // eax@16
  SpEffect *v25; // eax@17
  NiNode *v26; // esi@20
  NiPointer<NiNode> spNode; // [sp+34h] [bp-18h]@1
  int uiLeft; // [sp+38h] [bp-14h]@4
  int uiTop; // [sp+3Ch] [bp-10h]@4
  int v30; // [sp+48h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v30 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ProductBar.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GatheringWin", 0) )
  {
    v6 = spNode.m_pObject;
    v30 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  v11 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, &uiTop, 0);
  v13 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkGatheringProgress = v13;
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v2->m_iFullBarWidth = ((int (*)(void))v2->m_pkGatheringProgress->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_Start", &uiLeft, &uiTop, 0);
  v15 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkGatheringBarStart = (PgWinSpr *)v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_End", &uiLeft, &uiTop, 0);
  v17 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v16, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkGatheringBarEnd = (PgWinSpr *)v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PickPoint", &uiLeft, &uiTop, 0);
  v19 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkSuccessBox = v19;
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v20 = EffectMgr::GetEffectNode(&g_kEffectMgr, "GatherSucc");
  if ( v20 )
  {
    v2->m_pkSuccessEffectNode = v20;
    v21 = operator new(0x44u);
    LOBYTE(v30) = 1;
    if ( v21 )
      SpEffect::SpEffect((SpEffect *)v21, v2->m_pkSuccessEffectNode);
    else
      v22 = 0;
    LOBYTE(v30) = 0;
    v2->m_pkSuccessEffect = v22;
  }
  v23 = EffectMgr::GetEffectNode(&g_kEffectMgr, "GatherFail");
  if ( v23 )
  {
    v2->m_pkFailEffectNode = v23;
    v24 = operator new(0x44u);
    LOBYTE(v30) = 2;
    if ( v24 )
      SpEffect::SpEffect((SpEffect *)v24, v2->m_pkFailEffectNode);
    else
      v25 = 0;
    LOBYTE(v30) = 0;
    v2->m_pkFailEffect = v25;
  }
  ((void (__thiscall *)(GatheringWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.69999999);
  v26 = spNode.m_pObject;
  v30 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v26 )
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0050E5F0) --------------------------------------------------------
void __thiscall GatheringWin::_GatheringWin(GatheringWin *this)
{
  PgWinFrame *v1; // ebx@1
  SpEffect *v2; // esi@1
  NiNode *v3; // edi@2

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GatheringWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GatheringWin::_vftable_;
  v2 = this->m_pkSuccessEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
  }
  PgWinFrame::_PgWinFrame(v1);
}
// 996A50: using guessed type int (__stdcall *GatheringWin___vftable_)(int uiFlags);
// 996A6C: using guessed type int (__thiscall *GatheringWin___vftable_)(void *p, char);

//----- (0050E6B0) --------------------------------------------------------
void __thiscall GatheringWin::StartGathering(GatheringWin *this, unsigned int uiGatheringCycle, unsigned int uiGatheringCount, int iThickness)
{
  GatheringWin *v4; // esi@1
  signed int v5; // ebx@1
  PgWinBar *v6; // ecx@1
  double v7; // st7@3
  int v8; // edi@6
  int v9; // edi@6
  PgWinSpr *v10; // ecx@6
  PgWinBar *uiGatheringCyclea; // [sp+3Ch] [bp+8h]@6

  v4 = this;
  v5 = (signed int)((double)this->m_iFullBarWidth * 0.25);
  this->m_fTimeWhenStarted = Timer::ms_fCurTime;
  this->m_fGatheringTime = (double)(uiGatheringCount * uiGatheringCycle) / 1000.0;
  v6 = this->m_pkGatheringProgress;
  v4->m_fGatheringCycle = (double)uiGatheringCycle / 1000.0;
  if ( 1.0 != v6->m_fMaxValue || 0.0 != v6->m_fCurValue )
  {
    v7 = 0.0;
    v6->m_fMaxValue = 1.0;
    v6->m_fCurValue = v7;
    PgWinBar::OnChangeValue(v6);
  }
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v4,
    1u);
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v4,
    COERCE_UNSIGNED_INT(1.0));
  ((void (__stdcall *)(_DWORD))v4->m_pkGatheringBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v4->m_pkGatheringBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__thiscall *)(GatheringWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4);
  if ( v5 > v4->m_iFullBarWidth )
    v5 = v4->m_iFullBarWidth;
  uiGatheringCyclea = v4->m_pkGatheringProgress;
  v8 = rand() % (v4->m_iFullBarWidth - v5);
  v9 = ((int (*)(void))uiGatheringCyclea->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)()
     + v8;
  ((void (__stdcall *)(int))v4->m_pkSuccessBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v9);
  ((void (__stdcall *)(_DWORD))v4->m_pkSuccessBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(0);
  ((void (__stdcall *)(signed int))v4->m_pkSuccessBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v5);
  v10 = v4->m_pkSuccessBox;
  v4->m_iStartPos = v9;
  v4->m_iEndPos = v5 + v9;
  v4->m_iClickCount = 0;
  ((void (__stdcall *)(signed int))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__thiscall *)(GatheringWin *, unsigned int, unsigned int, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v4,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.69999999);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0050E880) --------------------------------------------------------
void __thiscall GatheringWin::UpdateMeWin(GatheringWin *this, float fCurTime)
{
  GatheringWin *v2; // esi@1
  double v3; // st7@1
  double v4; // st6@1
  SpEffect *v5; // ecx@3
  double v6; // qt2@5
  double v7; // st6@5
  double v8; // st7@5
  double v9; // st6@6
  signed int v10; // eax@6
  bool v11; // zf@8
  int v12; // eax@8
  double v13; // st6@11
  PgWinBar *v14; // ecx@13
  double v15; // st6@13
  float v16; // ST04_4@14
  float v17; // ST04_4@18
  float v18; // ST00_4@18
  float fSin; // [sp+14h] [bp+8h]@6
  float fSina; // [sp+14h] [bp+8h]@13
  float fSinb; // [sp+14h] [bp+8h]@20
  float fSinc; // [sp+14h] [bp+8h]@24

  v2 = this;
  v3 = 0.0;
  v4 = 1.0;
  if ( Char::CheckActState(g_pkMainChar, 500000) )
  {
    v2->m_fGatheringTime = 0.0;
    v2->m_fAlphaBlendValue = v4;
  }
  v5 = v2->m_pkSuccessEffect;
  if ( v5 )
  {
    SpEffect::Update(v5, fCurTime);
    v3 = 0.0;
    v4 = 1.0;
  }
  v6 = v4;
  v7 = v3;
  v8 = v6;
  if ( v7 >= v2->m_fGatheringTime )
  {
    if ( v7 >= v2->m_fAlphaBlendValue )
    {
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2,
        0);
    }
    else
    {
      fSinb = v2->m_fAlphaBlendValue - (Timer::ms_fDeltaTime + Timer::ms_fDeltaTime);
      v2->m_fAlphaBlendValue = fSinb;
      if ( fSinb <= v7 )
        v2->m_fAlphaBlendValue = v7;
      if ( v7 < v2->m_fAlphaBlendValue )
        JUMPOUT(*(int *)loc_50EA40);
      fSinc = v7;
      ((void (__stdcall *)(_DWORD))v2->m_pkSuccessBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
        (NiRefObject *)v2,
        LODWORD(fSinc));
    }
  }
  else
  {
    v9 = fCurTime - v2->m_fTimeWhenStarted;
    v10 = (signed int)(v9 / v2->m_fGatheringCycle);
    fSin = v9 - (double)v10 * v2->m_fGatheringCycle;
    if ( v10 > v2->m_iClickCount )
      v2->m_iClickCount = v10;
    v12 = v10 & 0x80000001;
    v11 = v12 == 0;
    if ( v12 < 0 )
      v11 = ((v12 - 1) | 0xFFFFFFFE) == -1;
    if ( v11 )
      v13 = fSin;
    else
      v13 = 1.0 - fSin;
    v14 = v2->m_pkGatheringProgress;
    fSina = v13;
    v15 = fSina;
    if ( fSina > v8 )
    {
      v17 = v8;
      v18 = v8;
      PgWinBar::SetValue(v14, v18, v17);
      ((void (__stdcall *)(signed int))v2->m_pkGatheringBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_pkGatheringBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    else
    {
      v16 = v15;
      PgWinBar::SetValue(v14, 0.94999999, v16);
      if ( fSina >= 0.0 )
        ((void (__stdcall *)(signed int))v2->m_pkGatheringBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      if ( fSina >= 0.949999988079071 )
        ((void (__stdcall *)(signed int))v2->m_pkGatheringBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
  }
}
// 50EA40: using guessed type int __stdcall(float fSin);
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (0050EA90) --------------------------------------------------------
GatheringWin *__cdecl GatheringWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GatheringWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x198u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GatheringWin::GatheringWin((GatheringWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    PgWin::EnableOpenCloseSound((PgWin *)v3, 0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v3);
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GatheringWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0050EBD0) --------------------------------------------------------
void *__thiscall GatheringWin::_vector_deleting_destructor_(GatheringWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GatheringWin::_GatheringWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0050EC00) --------------------------------------------------------
bool __cdecl GuildListWin::GuildInfo::Low_GuildGrade(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  return lhw->m_unGuildGrade < rhw->m_unGuildGrade;
}

//----- (0050EC20) --------------------------------------------------------
bool __cdecl GTRequestListWin::GuildInfo::High_GuildTotalMember(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  return rhw->m_unGuildTotalMember < lhw->m_unGuildTotalMember;
}

//----- (0050EC40) --------------------------------------------------------
bool __cdecl GTRequestListWin::GuildInfo::Low_GuildTotalMember(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  return lhw->m_unGuildTotalMember < rhw->m_unGuildTotalMember;
}

//----- (0050EC60) --------------------------------------------------------
void __thiscall GuildListWin::OnPrevPage(GuildListWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_GuildIndex;
  if ( v1 <= 0x16 )
    GuildListTask::OnNCGuildListReq(0);
  else
    GuildListTask::OnNCGuildListReq(v1 - 22);
}

//----- (0050EC90) --------------------------------------------------------
void __thiscall GuildListWin::OnNextPage(GuildListWin *this)
{
  GuildListTask::OnNCGuildListReq(this->m_GuildIndex + 22);
}

//----- (0050ECB0) --------------------------------------------------------
void __thiscall GuildListWin::OnHelpLink(GuildListWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildList");
}

//----- (0050ECE0) --------------------------------------------------------
void __thiscall GuildListWin::UpdateMeWin(GuildListWin *this, float fCurTime)
{
  GuildListWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pkGuildLIst, v2->m_pkSlideBarGuild);
}

//----- (0050ED10) --------------------------------------------------------
void __thiscall GuildListWin::OnSlideBar(GuildListWin *this)
{
  GuildListWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pkGuildLIst;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarGuild;
    if ( v3 )
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
    v1->m_pkGuildLIst->m_nViewStartPos = v1->m_pkSlideBarGuild->m_nCurPos;
    SlideListWin::UpdateViewList(v1->m_pkGuildLIst);
  }
}

//----- (0050ED60) --------------------------------------------------------
void __thiscall GuildListWin::OnSearchChoice(GuildListWin *this)
{
  GuildListWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
  PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v1->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  ((void (__stdcall *)(_DWORD))v1->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
}

//----- (0050EDD0) --------------------------------------------------------
void __thiscall GuildListWin::OnClose(GuildListWin *this)
{
  GuildListWin *v1; // esi@1
  PgWinText *v2; // eax@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  SlideListWin *v5; // edi@3

  v1 = this;
  v2 = this->m_pkSearchType;
  this->m_bFirstSort = 0;
  this->m_iSearchTyepe = 23;
  if ( v2 )
  {
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = TextData2::Get(0xD90AE9EEu);
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkSearchType, (unsigned int)v4);
  }
  SlideBar::SetSplitCnt(v1->m_pkSlideBarGuild, 0);
  v1->m_pkGuildLIst->m_nSlideSplitCnt = 0;
  v5 = v1->m_pkGuildLIst;
  v5->m_fCurSlideBtnPos = 0.0;
  v5->m_nViewStartPos = (signed int)((double)v5->m_nSlideSplitCnt * 0.0);
  v1->m_pkGuildLIst->m_nViewStartPos = 0;
  *(_DWORD *)&v1->m_acSearchName[0] = 0;
  *(_DWORD *)&v1->m_acSearchName[4] = 0;
  *(_DWORD *)&v1->m_acSearchName[8] = 0;
  *(_DWORD *)&v1->m_acSearchName[12] = 0;
  *(_DWORD *)&v1->m_acSearchName[16] = 0;
  *(_DWORD *)&v1->m_acSearchName[20] = 0;
  *(_DWORD *)&v1->m_acSearchName[24] = 0;
  *(_DWORD *)&v1->m_acSearchName[28] = 0;
  ((void (__stdcall *)(_DWORD))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_996CAA);
  PgWin::OnClose(&v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (0050EEB0) --------------------------------------------------------
void __thiscall GuildListWin::DirectMessage(GuildListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildListWin *v4; // esi@1
  PgWinText *v5; // eax@3
  NiRefObjectVtbl *v6; // edi@4
  char *v7; // eax@4
  PgWinText *v8; // eax@5
  NiRefObjectVtbl *v9; // edi@6
  char *v10; // eax@6

  v4 = this;
  if ( iMsgTag == 74 )
  {
    v8 = this->m_apkListTextWin[3][20];
    this->m_apkListTextWin[3][21] = (PgWinText *)23;
    if ( v8 )
    {
      v9 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = TextData2::Get(0xD90AE9EEu);
      v9[118].__vecDelDtor((NiRefObject *)v4->m_apkListTextWin[3][20], (unsigned int)v10);
    }
  }
  else
  {
    if ( iMsgTag == 75 )
    {
      v5 = this->m_apkListTextWin[3][20];
      this->m_apkListTextWin[3][21] = (PgWinText *)24;
      if ( v5 )
      {
        v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v7 = TextData2::Get(0xE012F32Cu);
        v6[118].__vecDelDtor((NiRefObject *)v4->m_apkListTextWin[3][20], (unsigned int)v7);
      }
    }
  }
}

//----- (0050EF40) --------------------------------------------------------
void __thiscall GuildListWin::AddGuildInfo(GuildListWin *this, GuildListWin::GuildInfo *kGuildInfo)
{
  GuildListWin::GuildInfo *v2; // esi@1
  GuildListWin *v3; // edi@1
  unsigned int v4; // ST34_4@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@1
  int v6; // edx@5
  std::basic_ostream<char,std::char_traits<char> > *v7; // eax@5
  unsigned int v8; // ecx@7
  int v9; // eax@10
  char v10; // dl@11
  GuildListWin::GuildInfo *v11; // eax@13
  int v12; // edx@15
  char v13; // cl@16
  char *v14; // esi@18
  GuildListWin::GuildInfo *v15; // ebx@19
  BOOL v16; // eax@19
  const char *v17; // edi@19
  int v18; // ebx@22
  void *v19; // eax@22
  const char *v20; // ebx@23
  unsigned int v21; // eax@26
  void *v22; // edi@26
  char v23; // cl@27
  unsigned int v24; // edx@28
  void *v25; // edi@28
  char v26; // cl@29
  unsigned int v27; // eax@30
  void *v28; // edi@30
  char v29; // cl@31
  unsigned int v30; // kr00_4@32
  char *v31; // eax@32
  char v32; // dl@33
  unsigned int v33; // eax@34
  const void *v34; // esi@34
  void *v35; // edi@34
  char v36; // cl@35
  int v37; // edx@36
  const char v38; // bl@43
  int v39; // ebx@45
  void *v40; // eax@45
  const char *v41; // ebx@46
  unsigned int v42; // eax@49
  void *v43; // edi@49
  char v44; // cl@50
  unsigned int v45; // edx@51
  void *v46; // edi@51
  char v47; // cl@52
  unsigned int v48; // eax@53
  void *v49; // edi@53
  char v50; // cl@54
  unsigned int v51; // kr04_4@55
  char *v52; // eax@55
  char v53; // dl@56
  char v54; // cl@58
  GuildListWin::GuildInfo *v55; // edi@65
  const char *v56; // eax@69
  unsigned int v57; // eax@70
  void *v58; // edi@70
  char v59; // cl@71
  unsigned int v60; // eax@72
  void *v61; // edi@72
  char v62; // cl@73
  unsigned int v63; // kr08_4@74
  char *v64; // eax@74
  char v65; // dl@75
  unsigned int v66; // eax@76
  const void *v67; // esi@76
  void *v68; // edi@76
  char v69; // cl@77
  void *v70; // edi@78
  const void *v71; // esi@78
  char v72; // cl@78
  int v73; // eax@78
  GuildListWin *v74; // edi@79
  unsigned int v75; // eax@80
  void *v76; // edi@80
  char v77; // cl@81
  unsigned int v78; // eax@82
  void *v79; // edi@82
  char v80; // cl@83
  unsigned int v81; // kr0C_4@84
  char *v82; // eax@84
  char v83; // dl@85
  char v84; // cl@87
  int v85; // eax@91
  char *v86; // esi@91
  std::basic_ostream<char,std::char_traits<char> > *v87; // eax@91
  unsigned int v88; // ecx@93
  int v89; // eax@96
  char v90; // dl@97
  char *v91; // eax@99
  int v92; // edx@101
  char v93; // cl@102
  char *v94; // esi@104
  const char *v95; // ebx@106
  int v96; // edi@108
  void *v97; // eax@108
  unsigned int v98; // eax@112
  void *v99; // edi@112
  char v100; // cl@113
  const char *v101; // ebx@114
  unsigned int v102; // edx@114
  void *v103; // edi@114
  char v104; // cl@115
  unsigned int v105; // eax@116
  void *v106; // edi@116
  char v107; // cl@117
  unsigned int v108; // kr10_4@118
  char *v109; // eax@118
  char v110; // dl@119
  unsigned int v111; // eax@120
  const void *v112; // esi@120
  void *v113; // edi@120
  char v114; // cl@121
  unsigned int v115; // edi@122
  GuildListWin::GuildInfo *v116; // edi@128
  int v117; // edi@128
  char v118; // bl@129
  const char *v119; // edi@129
  int v120; // ebx@131
  const char *v121; // eax@131
  const char *v122; // ebx@132
  unsigned int v123; // eax@135
  void *v124; // edi@135
  char v125; // cl@136
  unsigned int v126; // edx@137
  void *v127; // edi@137
  char v128; // cl@138
  unsigned int v129; // eax@139
  void *v130; // edi@139
  char v131; // cl@140
  unsigned int v132; // kr14_4@141
  char *v133; // eax@141
  char v134; // dl@142
  char v135; // cl@144
  GuildListWin::GuildInfo *v136; // edi@151
  GuildListWin *v137; // esi@158
  int v138; // edx@159
  unsigned int v139; // eax@159
  unsigned int v140; // eax@161
  void *v141; // edi@161
  char v142; // cl@162
  unsigned int v143; // eax@163
  void *v144; // edi@163
  char v145; // cl@164
  void *v146; // edi@165
  const void *v147; // esi@165
  char v148; // cl@165
  void *v149; // eax@165
  int v150; // edx@165
  char v151; // cl@166
  char *v152; // eax@167
  char *v153; // ecx@167
  char v154; // dl@168
  unsigned int v155; // eax@169
  const void *v156; // esi@169
  void *v157; // edi@169
  char v158; // cl@170
  unsigned int v159; // eax@172
  void *v160; // edi@172
  char v161; // cl@173
  unsigned int v162; // eax@174
  void *v163; // edi@174
  char v164; // cl@175
  unsigned int v165; // kr18_4@176
  char *v166; // eax@176
  char v167; // dl@177
  char v168; // cl@179
  char *v169; // eax@183
  unsigned int v170; // ST28_4@184
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v171; // eax@184
  int v172; // ecx@188
  unsigned int v173; // ST24_4@188
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v174; // eax@188
  int v175; // edx@192
  unsigned int v176; // [sp-24h] [bp-51Ch]@36
  char *v177; // [sp-24h] [bp-51Ch]@125
  char *v178; // [sp-24h] [bp-51Ch]@148
  unsigned int v179; // [sp-20h] [bp-518h]@36
  char *v180; // [sp-20h] [bp-518h]@39
  char *v181; // [sp-20h] [bp-518h]@62
  unsigned int v182; // [sp-20h] [bp-518h]@125
  unsigned int v183; // [sp-20h] [bp-518h]@148
  unsigned int v184; // [sp-20h] [bp-518h]@160
  const char *v185; // [sp-1Ch] [bp-514h]@36
  unsigned int v186; // [sp-1Ch] [bp-514h]@39
  unsigned int v187; // [sp-1Ch] [bp-514h]@62
  char TextCmd2[256]; // [sp+0h] [bp-4F8h]@7
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > osstream; // [sp+100h] [bp-3F8h]@1
  int v190; // [sp+198h] [bp-360h]@103
  GuildListWin::GuildInfo *GuildNamelen; // [sp+19Ch] [bp-35Ch]@17
  BYTE TestChar[4]; // [sp+1A0h] [bp-358h]@43
  int Searchlen; // [sp+1A4h] [bp-354h]@12
  int c2; // [sp+1A8h] [bp-350h]@20
  void *pChar; // [sp+1ACh] [bp-34Ch]@22
  GuildListWin::GuildInfo *v196; // [sp+1B0h] [bp-348h]@1
  char *v197; // [sp+1B4h] [bp-344h]@5
  int iLastIndex; // [sp+1B8h] [bp-340h]@3
  int c1; // [sp+1BCh] [bp-33Ch]@19
  GuildListWin *v200; // [sp+1C0h] [bp-338h]@1
  GuildListWin::GuildInfo *i; // [sp+1C4h] [bp-334h]@17
  GuildListWin::GuildInfo *pkCharClone; // [sp+1C8h] [bp-330h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+1CCh] [bp-32Ch]@1
  char TextCmd3[256]; // [sp+1E8h] [bp-310h]@7
  char TextCmd4[256]; // [sp+2E8h] [bp-210h]@7
  char TextCmd1[256]; // [sp+3E8h] [bp-110h]@7
  unsigned int v207; // [sp+4E8h] [bp-10h]@1
  int v208; // [sp+4F4h] [bp-4h]@1
  int v209; // [sp+4F8h] [bp+0h]@1

  v207 = (unsigned int)&v209 ^ __security_cookie;
  v2 = kGuildInfo;
  v3 = this;
  v200 = this;
  v196 = kGuildInfo;
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v4 = v3->m_uiNo;
  v208 = 0;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v4);
  v5 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v208) = 1;
  if ( v5->baseclass_0._Myres >= 0x10 )
    v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
  iLastIndex = SlideListWin::AddText(v3->m_pkGuildLIst, v5->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v6 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v6] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 2;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v208 = 3;
  v7 = std::operator<<<std::char_traits<char>>(&osstream.___u0.baseclass_0, " ");
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(v7, &kGuildInfo->m_strGuildName);
  if ( !strcmp(v3->m_acSearchName, (const char *)&unk_996CAB) || v3->m_iSearchTyepe != 23 )
    goto LABEL_68;
  *(_DWORD *)&TextCmd1[4] = dword_996FA4;
  *(_DWORD *)TextCmd1 = dword_996FA0;
  *(_DWORD *)&TextCmd1[8] = dword_996FA8;
  *(_DWORD *)&TextCmd1[12] = dword_996FAC;
  memset(&TextCmd1[16], 0, 0xF0u);
  strcpy(TextCmd2, "}");
  TextCmd2[2] = byte_996FB2;
  memset(&TextCmd2[3], 0, 0xFDu);
  memset(TextCmd3, 0, 0x100u);
  memset(TextCmd4, 0, 0x100u);
  v8 = kGuildInfo->m_strGuildName.baseclass_0._Myres;
  pkCharClone = v8 < 0x10 ? kGuildInfo : *(_DWORD *)&kGuildInfo->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
  v9 = (int)v3->m_acSearchName;
  do
    v10 = *(_BYTE *)v9++;
  while ( v10 );
  Searchlen = v9 - (_DWORD)((char *)v3 + 941);
  v11 = v8 < 0x10 ? kGuildInfo : *(_DWORD *)&kGuildInfo->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = (int)&v11->m_strGuildName.baseclass_0.___u0._Bx._Buf[1];
  do
  {
    v13 = v11->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    v11 = (GuildListWin::GuildInfo *)((char *)v11 + 1);
  }
  while ( v13 );
  GuildNamelen = (GuildListWin::GuildInfo *)((char *)v11 - v12);
  i = 0;
  if ( (signed int)((char *)v11 - v12) <= 0 )
  {
LABEL_68:
    if ( v2->m_strGuildName.baseclass_0._Myres < 0x10 )
      v56 = (const char *)v2;
    else
      v56 = *(const char **)&v2->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    SlideListWin::SetText(v3->m_pkGuildLIst, iLastIndex, 1u, v56);
    v74 = v200;
    goto LABEL_91;
  }
  v14 = TextCmd4;
  while ( 1 )
  {
    v15 = pkCharClone;
    LOBYTE(c1) = pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    v16 = IsDBCSLeadByte(c1);
    v17 = v200->m_acSearchName;
    if ( !v16 )
      break;
    LOBYTE(c2) = *v17;
    if ( !IsDBCSLeadByte(c2) )
    {
      strncpy(v14, v15->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GuildListWin::GuildInfo *)((char *)i + 2);
      v14 += 2;
      pkCharClone = (GuildListWin::GuildInfo *)((char *)v15 + 2);
      goto LABEL_66;
    }
    if ( (_BYTE)c1 != (_BYTE)c2 )
    {
      v186 = 2;
      v180 = (char *)v15;
      goto LABEL_41;
    }
    v18 = Searchlen;
    strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, Searchlen);
    v19 = (void *)_mbsstr(TextCmd3, v17);
    pChar = v19;
    if ( !v19 )
    {
      v186 = v18;
      v180 = (char *)pkCharClone;
LABEL_41:
      strncpy(v14, v180, v186);
      i = (GuildListWin::GuildInfo *)((char *)i + 2);
      v14 += 2;
      pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 2);
      goto LABEL_66;
    }
    v20 = (const char *)v19;
    if ( strcmp((const char *)v19, v17) )
    {
      strncpy(v14, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GuildListWin::GuildInfo *)((char *)i + 2);
      v14 += 2;
    }
    else
    {
      if ( !i )
      {
        v57 = strlen(TextCmd3) + 1;
        v58 = &TextCmd4[255];
        do
        {
          v59 = *((_BYTE *)v58 + 1);
          v58 = (char *)v58 + 1;
        }
        while ( v59 );
        memcpy(v58, TextCmd3, v57);
        v60 = strlen(TextCmd2) + 1;
        v61 = &TextCmd4[255];
        do
        {
          v62 = *((_BYTE *)v61 + 1);
          v61 = (char *)v61 + 1;
        }
        while ( v62 );
        memcpy(v61, TextCmd2, v60);
        v63 = strlen(v20);
        v64 = (char *)pkCharClone + v63;
        do
          v65 = *v64++;
        while ( v65 );
        v66 = v64 - ((char *)pkCharClone + v63);
        v67 = (char *)pkCharClone + v63;
        v68 = &TextCmd4[255];
        do
        {
          v69 = *((_BYTE *)v68 + 1);
          v68 = (char *)v68 + 1;
        }
        while ( v69 );
        goto LABEL_78;
      }
      if ( (signed int)i > 0 )
      {
        v21 = strlen(TextCmd1) + 1;
        v22 = &TextCmd3[255];
        do
        {
          v23 = *((_BYTE *)v22 + 1);
          v22 = (char *)v22 + 1;
        }
        while ( v23 );
        memcpy(v22, TextCmd1, v21);
        v24 = strlen(v20) + 1;
        v25 = &TextCmd3[255];
        do
        {
          v26 = *((_BYTE *)v25 + 1);
          v25 = (char *)v25 + 1;
        }
        while ( v26 );
        memcpy(v25, v20, v24);
        v27 = strlen(TextCmd2) + 1;
        v28 = &TextCmd3[255];
        do
        {
          v29 = *((_BYTE *)v28 + 1);
          v28 = (char *)v28 + 1;
        }
        while ( v29 );
        memcpy(v28, TextCmd2, v27);
        v30 = strlen(v20);
        v31 = (char *)pkCharClone + v30;
        do
          v32 = *v31++;
        while ( v32 );
        v33 = v31 - ((char *)pkCharClone + v30);
        v34 = (char *)pkCharClone + v30;
        v35 = &TextCmd3[255];
        do
        {
          v36 = *((_BYTE *)v35 + 1);
          v35 = (char *)v35 + 1;
        }
        while ( v36 );
LABEL_36:
        v37 = iLastIndex;
        memcpy(v35, v34, v33);
        v185 = TextCmd4;
        v179 = 1;
        v176 = v37;
        goto LABEL_79;
      }
    }
    memset(TextCmd3, 0, 0x100u);
    pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 2);
LABEL_66:
    if ( (signed int)i >= (signed int)GuildNamelen )
    {
      v2 = v196;
      v3 = v200;
      goto LABEL_68;
    }
  }
  v38 = *v17;
  TestChar[0] = *v17;
  if ( IsDBCSLeadByte(TestChar[0]) )
  {
    v55 = pkCharClone;
    strncpy(v14, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
    i = (GuildListWin::GuildInfo *)((char *)i + 1);
    ++v14;
    pkCharClone = (GuildListWin::GuildInfo *)((char *)v55 + 1);
    goto LABEL_66;
  }
  if ( (_BYTE)c1 != v38 )
  {
    v187 = 1;
    v181 = (char *)pkCharClone;
    goto LABEL_64;
  }
  v39 = Searchlen;
  strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, Searchlen);
  v40 = (void *)_mbsstr(TextCmd3, v17);
  pChar = v40;
  if ( !v40 )
  {
    v187 = v39;
    v181 = (char *)pkCharClone;
LABEL_64:
    strncpy(v14, v181, v187);
    i = (GuildListWin::GuildInfo *)((char *)i + 1);
    ++v14;
    pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 1);
    goto LABEL_66;
  }
  v41 = (const char *)v40;
  if ( strcmp((const char *)v40, v17) )
  {
    strncpy(v14, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
    i = (GuildListWin::GuildInfo *)((char *)i + 1);
    ++v14;
LABEL_61:
    memset(TextCmd3, 0, 0x100u);
    pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 1);
    goto LABEL_66;
  }
  if ( i )
  {
    if ( (signed int)i > 0 )
    {
      v42 = strlen(TextCmd1) + 1;
      v43 = &TextCmd3[255];
      do
      {
        v44 = *((_BYTE *)v43 + 1);
        v43 = (char *)v43 + 1;
      }
      while ( v44 );
      memcpy(v43, TextCmd1, v42);
      v45 = strlen(v41) + 1;
      v46 = &TextCmd3[255];
      do
      {
        v47 = *((_BYTE *)v46 + 1);
        v46 = (char *)v46 + 1;
      }
      while ( v47 );
      memcpy(v46, v41, v45);
      v48 = strlen(TextCmd2) + 1;
      v49 = &TextCmd3[255];
      do
      {
        v50 = *((_BYTE *)v49 + 1);
        v49 = (char *)v49 + 1;
      }
      while ( v50 );
      memcpy(v49, TextCmd2, v48);
      v51 = strlen(v41);
      v52 = (char *)pkCharClone + v51;
      do
        v53 = *v52++;
      while ( v53 );
      v33 = v52 - ((char *)pkCharClone + v51);
      v34 = (char *)pkCharClone + v51;
      v35 = &TextCmd3[255];
      do
      {
        v54 = *((_BYTE *)v35 + 1);
        v35 = (char *)v35 + 1;
      }
      while ( v54 );
      goto LABEL_36;
    }
    goto LABEL_61;
  }
  v75 = strlen(TextCmd3) + 1;
  v76 = &TextCmd4[255];
  do
  {
    v77 = *((_BYTE *)v76 + 1);
    v76 = (char *)v76 + 1;
  }
  while ( v77 );
  memcpy(v76, TextCmd3, v75);
  v78 = strlen(TextCmd2) + 1;
  v79 = &TextCmd4[255];
  do
  {
    v80 = *((_BYTE *)v79 + 1);
    v79 = (char *)v79 + 1;
  }
  while ( v80 );
  memcpy(v79, TextCmd2, v78);
  v81 = strlen(v41);
  v82 = (char *)pkCharClone + v81;
  do
    v83 = *v82++;
  while ( v83 );
  v66 = v82 - ((char *)pkCharClone + v81);
  v67 = (char *)pkCharClone + v81;
  v68 = &TextCmd4[255];
  do
  {
    v84 = *((_BYTE *)v68 + 1);
    v68 = (char *)v68 + 1;
  }
  while ( v84 );
LABEL_78:
  memcpy(v68, v67, 4 * (v66 >> 2));
  v71 = (char *)v67 + 4 * (v66 >> 2);
  v70 = (char *)v68 + 4 * (v66 >> 2);
  v72 = v66;
  v73 = iLastIndex;
  v185 = TextCmd1;
  v179 = 1;
  memcpy(v70, v71, v72 & 3);
  v176 = v73;
LABEL_79:
  v74 = v200;
  SlideListWin::SetText(v200->m_pkGuildLIst, v176, v179, v185);
  v2 = v196;
LABEL_91:
  v85 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v85] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 4;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v86 = (char *)&v2->m_MasterName;
  v208 = 5;
  v197 = v86;
  v87 = std::operator<<<std::char_traits<char>>(&osstream.___u0.baseclass_0, " ");
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(
    v87,
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v86);
  if ( !strcmp(v74->m_acSearchName, (const char *)&unk_996CB9) || v74->m_iSearchTyepe != 24 )
    goto LABEL_155;
  *(_DWORD *)&TextCmd1[4] = dword_996FBC;
  *(_DWORD *)TextCmd1 = dword_996FB8;
  *(_DWORD *)&TextCmd1[8] = dword_996FC0;
  *(_DWORD *)&TextCmd1[12] = dword_996FC4;
  memset(&TextCmd1[16], 0, 0xF0u);
  strcpy(TextCmd2, "}");
  TextCmd2[2] = byte_996FCA;
  memset(&TextCmd2[3], 0, 0xFDu);
  memset(TextCmd3, 0, 0x100u);
  memset(TextCmd4, 0, 0x100u);
  v88 = *((_DWORD *)v86 + 5);
  pkCharClone = (GuildListWin::GuildInfo *)(v88 < 0x10 ? v86 : *(_DWORD *)v86);
  v89 = (int)v74->m_acSearchName;
  do
    v90 = *(_BYTE *)v89++;
  while ( v90 );
  c2 = v89 - (_DWORD)((char *)v74 + 941);
  v91 = v88 < 0x10 ? v86 : *(_DWORD *)v86;
  v92 = (int)(v91 + 1);
  do
    v93 = *v91++;
  while ( v93 );
  v190 = (int)&v91[-v92];
  i = 0;
  if ( (signed int)&v91[-v92] <= 0 )
    goto LABEL_155;
  v94 = TextCmd4;
  while ( 2 )
  {
    LOBYTE(c1) = pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( !IsDBCSLeadByte(c1) )
    {
      v118 = v200->m_acSearchName[0];
      v119 = v200->m_acSearchName;
      LOBYTE(GuildNamelen) = v200->m_acSearchName[0];
      if ( !IsDBCSLeadByte((BYTE)GuildNamelen) )
      {
        if ( (_BYTE)c1 == v118 )
        {
          v120 = c2;
          strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, c2);
          v121 = _mbsstr(TextCmd3, v119);
          *(_DWORD *)TestChar = v121;
          if ( v121 )
          {
            v122 = v121;
            if ( strcmp(v121, v119) )
            {
              strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
              i = (GuildListWin::GuildInfo *)((char *)i + 1);
              ++v94;
            }
            else
            {
              if ( !i )
              {
                v159 = strlen(TextCmd3) + 1;
                v160 = &TextCmd4[255];
                do
                {
                  v161 = *((_BYTE *)v160 + 1);
                  v160 = (char *)v160 + 1;
                }
                while ( v161 );
                memcpy(v160, TextCmd3, v159);
                v162 = strlen(TextCmd2) + 1;
                v163 = &TextCmd4[255];
                do
                {
                  v164 = *((_BYTE *)v163 + 1);
                  v163 = (char *)v163 + 1;
                }
                while ( v164 );
                memcpy(v163, TextCmd2, v162);
                v165 = strlen(v122);
                v166 = (char *)pkCharClone + v165;
                do
                  v167 = *v166++;
                while ( v167 );
                v155 = v166 - ((char *)pkCharClone + v165);
                v156 = (char *)pkCharClone + v165;
                v157 = &TextCmd4[255];
                do
                {
                  v168 = *((_BYTE *)v157 + 1);
                  v157 = (char *)v157 + 1;
                }
                while ( v168 );
                goto LABEL_171;
              }
              if ( (signed int)i > 0 )
              {
                v123 = strlen(TextCmd1) + 1;
                v124 = &TextCmd3[255];
                do
                {
                  v125 = *((_BYTE *)v124 + 1);
                  v124 = (char *)v124 + 1;
                }
                while ( v125 );
                memcpy(v124, TextCmd1, v123);
                v126 = strlen(v122) + 1;
                v127 = &TextCmd3[255];
                do
                {
                  v128 = *((_BYTE *)v127 + 1);
                  v127 = (char *)v127 + 1;
                }
                while ( v128 );
                memcpy(v127, v122, v126);
                v129 = strlen(TextCmd2) + 1;
                v130 = &TextCmd3[255];
                do
                {
                  v131 = *((_BYTE *)v130 + 1);
                  v130 = (char *)v130 + 1;
                }
                while ( v131 );
                memcpy(v130, TextCmd2, v129);
                v132 = strlen(v122);
                v133 = (char *)pkCharClone + v132;
                do
                  v134 = *v133++;
                while ( v134 );
                v111 = v133 - ((char *)pkCharClone + v132);
                v112 = (char *)pkCharClone + v132;
                v113 = &TextCmd3[255];
                do
                {
                  v135 = *((_BYTE *)v113 + 1);
                  v113 = (char *)v113 + 1;
                }
                while ( v135 );
                goto LABEL_122;
              }
            }
            memset(TextCmd3, 0, 0x100u);
            pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 1);
            goto LABEL_153;
          }
          v183 = v120;
          v178 = (char *)pkCharClone;
        }
        else
        {
          v183 = 1;
          v178 = (char *)pkCharClone;
        }
        strncpy(v94, v178, v183);
        i = (GuildListWin::GuildInfo *)((char *)i + 1);
        ++v94;
        pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 1);
        goto LABEL_153;
      }
      v136 = pkCharClone;
      strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
      i = (GuildListWin::GuildInfo *)((char *)i + 1);
      ++v94;
      v117 = (int)&v136->m_strGuildName.baseclass_0.___u0._Bx._Buf[1];
LABEL_152:
      pkCharClone = (GuildListWin::GuildInfo *)v117;
      goto LABEL_153;
    }
    v95 = v200->m_acSearchName;
    LOBYTE(Searchlen) = v200->m_acSearchName[0];
    if ( !IsDBCSLeadByte(Searchlen) )
    {
      v116 = pkCharClone;
      strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GuildListWin::GuildInfo *)((char *)i + 2);
      v94 += 2;
      v117 = (int)&v116->m_strGuildName.baseclass_0.___u0._Bx._Buf[2];
      goto LABEL_152;
    }
    if ( (_BYTE)c1 != (_BYTE)Searchlen )
    {
      v182 = 2;
      v177 = (char *)pkCharClone;
      goto LABEL_127;
    }
    v96 = c2;
    strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, c2);
    v97 = (void *)_mbsstr(TextCmd3, v95);
    pChar = v97;
    if ( !v97 )
    {
      v182 = v96;
      v177 = (char *)pkCharClone;
LABEL_127:
      strncpy(v94, v177, v182);
      i = (GuildListWin::GuildInfo *)((char *)i + 2);
      v94 += 2;
      pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 2);
      goto LABEL_153;
    }
    if ( strcmp((const char *)v97, v95) )
    {
      strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GuildListWin::GuildInfo *)((char *)i + 2);
      v94 += 2;
      goto LABEL_124;
    }
    if ( !i )
    {
      v140 = strlen(TextCmd3) + 1;
      v141 = &TextCmd4[255];
      do
      {
        v142 = *((_BYTE *)v141 + 1);
        v141 = (char *)v141 + 1;
      }
      while ( v142 );
      memcpy(v141, TextCmd3, v140);
      v143 = strlen(TextCmd2) + 1;
      v144 = &TextCmd4[255];
      do
      {
        v145 = *((_BYTE *)v144 + 1);
        v144 = (char *)v144 + 1;
      }
      while ( v145 );
      memcpy(v144, TextCmd2, 4 * (v143 >> 2));
      v147 = &TextCmd2[4 * (v143 >> 2)];
      v146 = (char *)v144 + 4 * (v143 >> 2);
      v148 = v143;
      v149 = pChar;
      memcpy(v146, v147, v148 & 3);
      v150 = (int)((char *)v149 + 1);
      do
      {
        v151 = *(_BYTE *)v149;
        v149 = (char *)v149 + 1;
      }
      while ( v151 );
      v152 = (char *)v149 + (_DWORD)pkCharClone - v150;
      v153 = v152;
      do
        v154 = *v152++;
      while ( v154 );
      v155 = v152 - v153;
      v156 = v153;
      v157 = &TextCmd4[255];
      do
      {
        v158 = *((_BYTE *)v157 + 1);
        v157 = (char *)v157 + 1;
      }
      while ( v158 );
LABEL_171:
      memcpy(v157, v156, v155);
      v115 = iLastIndex;
      v137 = v200;
      SlideListWin::SetText(v200->m_pkGuildLIst, iLastIndex, 2u, TextCmd1);
      goto LABEL_159;
    }
    if ( (signed int)i > 0 )
    {
      v98 = strlen(TextCmd1) + 1;
      v99 = &TextCmd3[255];
      do
      {
        v100 = *((_BYTE *)v99 + 1);
        v99 = (char *)v99 + 1;
      }
      while ( v100 );
      v101 = (const char *)pChar;
      memcpy(v99, TextCmd1, v98);
      v102 = strlen(v101) + 1;
      v103 = &TextCmd3[255];
      do
      {
        v104 = *((_BYTE *)v103 + 1);
        v103 = (char *)v103 + 1;
      }
      while ( v104 );
      memcpy(v103, v101, v102);
      v105 = strlen(TextCmd2) + 1;
      v106 = &TextCmd3[255];
      do
      {
        v107 = *((_BYTE *)v106 + 1);
        v106 = (char *)v106 + 1;
      }
      while ( v107 );
      memcpy(v106, TextCmd2, v105);
      v108 = strlen(v101);
      v109 = (char *)pkCharClone + v108;
      do
        v110 = *v109++;
      while ( v110 );
      v111 = v109 - ((char *)pkCharClone + v108);
      v112 = (char *)pkCharClone + v108;
      v113 = &TextCmd3[255];
      do
      {
        v114 = *((_BYTE *)v113 + 1);
        v113 = (char *)v113 + 1;
      }
      while ( v114 );
LABEL_122:
      memcpy(v113, v112, v111);
      v115 = iLastIndex;
      SlideListWin::SetText(v200->m_pkGuildLIst, iLastIndex, 2u, TextCmd4);
      goto LABEL_158;
    }
LABEL_124:
    memset(TextCmd3, 0, 0x100u);
    pkCharClone = (GuildListWin::GuildInfo *)((char *)pkCharClone + 2);
LABEL_153:
    if ( (signed int)i < v190 )
      continue;
    break;
  }
  v86 = v197;
  v74 = v200;
LABEL_155:
  if ( *((_DWORD *)v86 + 5) >= 0x10u )
    v86 = *(char **)v86;
  SlideListWin::SetText(v74->m_pkGuildLIst, iLastIndex, 2u, v86);
  v115 = iLastIndex;
LABEL_158:
  v137 = v200;
LABEL_159:
  v138 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v138] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 6;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  v139 = v196->m_unGuildType;
  if ( !v139 )
  {
    v184 = 1044198562;
    goto LABEL_183;
  }
  if ( v139 == 1 )
  {
    v184 = 1044934038;
LABEL_183:
    v169 = TextData::Get(v184);
    SlideListWin::SetText(v137->m_pkGuildLIst, v115, 3u, v169);
  }
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v170 = v196->m_unGuildGrade;
  v208 = 7;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v170);
  v171 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v208) = 8;
  if ( v171->baseclass_0._Myres >= 0x10 )
    v171 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v171->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v137->m_pkGuildLIst, v115, 4u, v171->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v172 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v172] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 9;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    (std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *)&TextCmd1[104],
    2);
  v173 = v196->m_unGuildTotalMember;
  v208 = 10;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(
    (std::basic_ostream<char,std::char_traits<char> > *)&TextCmd1[104],
    v173);
  v174 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(
           (std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *)&TextCmd1[104],
           &result);
  LOBYTE(v208) = 11;
  if ( v174->baseclass_0._Myres >= 0x10 )
    v174 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v174->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v137->m_pkGuildLIst, v115, 5u, v174->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v175 = *(_DWORD *)(*(_DWORD *)&TextCmd1[104] + 4);
  result.baseclass_0._Myres = 15;
  result.baseclass_0._Mysize = 0;
  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v197 = &TextCmd1[184];
  *(_DWORD *)&TextCmd1[v175 + 104] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 12;
  *(_DWORD *)&TextCmd1[108] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&TextCmd1[108]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&TextCmd1[108]);
  *(_DWORD *)&TextCmd1[*(_DWORD *)(*(_DWORD *)&TextCmd1[104] + 4) + 104] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&TextCmd1[184] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)&TextCmd1[184]);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 996FA0: using guessed type int dword_996FA0;
// 996FA4: using guessed type int dword_996FA4;
// 996FA8: using guessed type int dword_996FA8;
// 996FAC: using guessed type int dword_996FAC;
// 996FB2: using guessed type char byte_996FB2;
// 996FB8: using guessed type int dword_996FB8;
// 996FBC: using guessed type int dword_996FBC;
// 996FC0: using guessed type int dword_996FC0;
// 996FC4: using guessed type int dword_996FC4;
// 996FCA: using guessed type char byte_996FCA;
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// A85C00: using guessed type int __security_cookie;

//----- (005102D0) --------------------------------------------------------
#error "51063B: positive sp value has been found (funcsize=230)"

//----- (00510640) --------------------------------------------------------
void __thiscall GuildListWin::GuildListWin(GuildListWin *this)
{
  GuildListWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildListWin::_vftable_;
  *(_DWORD *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuildInfo.baseclass_0._Mylast = 0;
  v1->m_vecGuildInfo.baseclass_0._Myend = 0;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v1->m_spEdit.m_pObject = 0;
  *(_WORD *)&v1->m_bFirstSort = 0;
  v1->m_spPopupMenu = 0;
  v1->m_uiNo = 0;
  v1->m_iSearchTyepe = 23;
  *(_DWORD *)&v1->m_acSearchName[0] = 0;
  *(_DWORD *)&v1->m_acSearchName[4] = 0;
  *(_DWORD *)&v1->m_acSearchName[8] = 0;
  *(_DWORD *)&v1->m_acSearchName[12] = 0;
  *(_DWORD *)&v1->m_acSearchName[16] = 0;
  *(_DWORD *)&v1->m_acSearchName[20] = 0;
  *(_DWORD *)&v1->m_acSearchName[24] = 0;
  *(_DWORD *)&v1->m_acSearchName[28] = 0;
  v1->m_GuildIndex = 0;
}
// 9970E4: using guessed type int (__stdcall *GuildListWin___vftable_)(int uiFlags);
// 997104: using guessed type int (__thiscall *GuildListWin___vftable_)(void *p, char);

//----- (005106E0) --------------------------------------------------------
void __thiscall GuildListWin::_GuildListWin(GuildListWin *this)
{
  GuildListWin *v1; // esi@1
  EditWin *v2; // edi@1
  GuildListWin::GuildInfo *v3; // eax@7
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+0h] [bp-10h]@1
  int v5; // [sp+Ch] [bp-4h]@1

  v1 = this;
  __formal.dummy[0] = (char)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildListWin::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  v5 = 2;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  LOBYTE(v5) = 1;
  if ( v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager )
    v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = (void *)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager(
                                                                                  (boost::detail::function::any_pointer)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                                                                                  destroy_functor_tag);
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v3 = *(GuildListWin::GuildInfo **)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 )
  {
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v3,
      v1->m_vecGuildInfo.baseclass_0._Mylast,
      &v1->m_vecGuildInfo.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuildInfo.baseclass_0._Mylast = 0;
  v1->m_vecGuildInfo.baseclass_0._Myend = 0;
  v5 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9970E4: using guessed type int (__stdcall *GuildListWin___vftable_)(int uiFlags);
// 997104: using guessed type int (__thiscall *GuildListWin___vftable_)(void *p, char);

//----- (005107E0) --------------------------------------------------------
GuildListWin *__cdecl GuildListWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildListWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x3D4u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildListWin::GuildListWin((GuildListWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildListWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00510910) --------------------------------------------------------
void __thiscall GuildListWin::Clear(GuildListWin *this)
{
  GuildListWin *v1; // esi@1
  GuildListWin::GuildInfo *v2; // eax@1
  GuildListWin::GuildInfo *v3; // ecx@1
  GuildListWin::GuildInfo *v4; // edi@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  *(_DWORD *)&this->m_acSearchName[0] = 0;
  *(_DWORD *)&this->m_acSearchName[4] = 0;
  *(_DWORD *)&this->m_acSearchName[8] = 0;
  *(_DWORD *)&this->m_acSearchName[12] = 0;
  *(_DWORD *)&this->m_acSearchName[16] = 0;
  *(_DWORD *)&this->m_acSearchName[20] = 0;
  *(_DWORD *)&this->m_acSearchName[24] = 0;
  *(_DWORD *)&this->m_acSearchName[28] = 0;
  v2 = this->m_vecGuildInfo.baseclass_0._Mylast;
  v3 = *(GuildListWin::GuildInfo **)&this->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    v4 = std::_Move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo__>(v2, v2, v3, __formal);
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v4,
      v1->m_vecGuildInfo.baseclass_0._Mylast,
      &v1->m_vecGuildInfo.baseclass_0._Alval,
      __formal);
    v1->m_vecGuildInfo.baseclass_0._Mylast = v4;
  }
  SlideListWin::RemoveAllList(v1->m_pkGuildLIst);
  SlideListWin::UpdateViewList(v1->m_pkGuildLIst);
}

//----- (005109B0) --------------------------------------------------------
void __thiscall GuildListWin::SetGuildList(GuildListWin *this, SHINE_GUILD_LIST_NEW *pkList, unsigned int uiTotalGuild)
{
  int v3; // edx@2
  int v4; // ecx@2
  int v5; // eax@2
  char v6; // cl@3
  int v7; // edx@4
  int v8; // ecx@4
  int v9; // eax@4
  int v10; // edx@4
  int v11; // eax@4
  char v12; // cl@5
  unsigned int v13; // eax@6
  unsigned int v14; // ecx@6
  NiRefObjectVtbl *v15; // esi@7
  char *v16; // eax@7
  char *v17; // eax@7
  GuildListWin::GuildInfo *v18; // edi@9
  signed int v19; // edx@9
  GuildListWin *v20; // [sp+0h] [bp-84h]@1
  GuildListWin::GuildInfo kGuildInfo; // [sp+4h] [bp-80h]@1
  char acName[17]; // [sp+48h] [bp-3Ch]@2
  char acName2[17]; // [sp+5Ch] [bp-28h]@4
  char v24; // [sp+70h] [bp-14h]@4
  unsigned int v25; // [sp+74h] [bp-10h]@1
  int v26; // [sp+80h] [bp-4h]@1
  int v27; // [sp+84h] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v20 = this;
  kGuildInfo.m_strGuildName.baseclass_0._Myres = 15;
  kGuildInfo.m_strGuildName.baseclass_0._Mysize = 0;
  kGuildInfo.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kGuildInfo.m_MasterName.baseclass_0._Myres = 15;
  kGuildInfo.m_MasterName.baseclass_0._Mysize = 0;
  kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v26 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kGuildInfo.m_strGuildName,
    &byte_9788EB,
    0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGuildInfo.m_MasterName, &byte_9788EB, 0);
  if ( pkList )
  {
    v3 = *(_DWORD *)&pkList->sGuildName.n4_name[8];
    v4 = *(_DWORD *)&pkList->sGuildName.n4_name[4];
    *(_DWORD *)acName = *(_DWORD *)&pkList->sGuildName.n4_name[0];
    *(_DWORD *)&acName[12] = *(_DWORD *)&pkList->sGuildName.n4_name[12];
    v5 = (int)acName;
    *(_DWORD *)&acName[8] = v3;
    *(_DWORD *)&acName[4] = v4;
    acName[16] = 0;
    do
      v6 = *(_BYTE *)v5++;
    while ( v6 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kGuildInfo.m_strGuildName,
      acName,
      v5 - (_DWORD)&acName[1]);
    v7 = *(_DWORD *)&pkList->sMasterCharID.n5_name[0];
    v8 = *(_DWORD *)&pkList->sMasterCharID.n5_name[8];
    *(_DWORD *)&acName2[4] = *(_DWORD *)&pkList->sMasterCharID.n5_name[4];
    v9 = *(_DWORD *)&pkList->sMasterCharID.n5_name[16];
    *(_DWORD *)acName2 = v7;
    v10 = *(_DWORD *)&pkList->sMasterCharID.n5_name[12];
    *(_DWORD *)&acName2[16] = v9;
    v11 = (int)acName2;
    *(_DWORD *)&acName2[12] = v10;
    *(_DWORD *)&acName2[8] = v8;
    v24 = 0;
    acName2[16] = 0;
    do
      v12 = *(_BYTE *)v11++;
    while ( v12 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kGuildInfo.m_MasterName,
      acName2,
      v11 - (_DWORD)&acName2[1]);
    v13 = pkList->nType;
    v14 = pkList->nMemberCnt;
    kGuildInfo.m_unGuildGrade = pkList->nGrade;
    kGuildInfo.m_unGuildType = v13;
    kGuildInfo.m_unGuildTotalMember = v14;
    if ( uiTotalGuild > 0 )
    {
      v15 = v20->m_pkTotalGuildNum->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v16 = TextData2::Get(0x3B544247u);
      v17 = fs(v16);
      v15[118].__vecDelDtor((NiRefObject *)v20->m_pkTotalGuildNum, (unsigned int)v17);
    }
    std::vector<GuildAcademySelectWin::GuildInfo_std::allocator<GuildAcademySelectWin::GuildInfo>>::push_back(
      &v20->m_vecGuildInfo,
      &kGuildInfo);
    if ( !v20->m_bFirstSort )
    {
      v18 = *(GuildListWin::GuildInfo **)&v20->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
      v19 = (signed int)((unsigned __int64)(2021161081i64
                                          * (unsigned int)((char *)v20->m_vecGuildInfo.baseclass_0._Mylast - (char *)v18)) >> 32) >> 5;
      std::_Sort<GTRequestListWin::GuildInfo___int_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
        v18,
        v20->m_vecGuildInfo.baseclass_0._Mylast,
        v19 + ((unsigned int)v19 >> 31),
        GTRequestListWin::GuildInfo::High_GuildName);
      v20->m_bFirstSort = 1;
    }
  }
  if ( kGuildInfo.m_MasterName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
  kGuildInfo.m_MasterName.baseclass_0._Myres = 15;
  kGuildInfo.m_MasterName.baseclass_0._Mysize = 0;
  kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( kGuildInfo.m_strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kGuildInfo);
}
// A85C00: using guessed type int __security_cookie;

//----- (00510BA0) --------------------------------------------------------
void __thiscall GuildListWin::OnSearch(GuildListWin *this)
{
  GuildListWin *v1; // esi@1
  int v2; // eax@2
  int v3; // edi@2
  char v4; // cl@3
  int v5; // eax@4
  SlideBar *v6; // ecx@11
  SlideListWin *v7; // edi@11
  boost::detail::function::any_pointer (__cdecl *v8)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-Ch] [bp-1Ch]@9
  int v9; // [sp-8h] [bp-18h]@9
  bool (__cdecl *v10)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-4h] [bp-14h]@5
  boost::detail::function::any_pointer (__cdecl **v11)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+Ch] [bp-4h]@9

  v1 = this;
  if ( !((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)() )
    return;
  *(_DWORD *)&v1->m_acSearchName[0] = 0;
  *(_DWORD *)&v1->m_acSearchName[4] = 0;
  *(_DWORD *)&v1->m_acSearchName[8] = 0;
  *(_DWORD *)&v1->m_acSearchName[12] = 0;
  *(_DWORD *)&v1->m_acSearchName[16] = 0;
  *(_DWORD *)&v1->m_acSearchName[20] = 0;
  *(_DWORD *)&v1->m_acSearchName[24] = 0;
  *(_DWORD *)&v1->m_acSearchName[28] = 0;
  v2 = ((int (*)(void))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = (int)&v1->m_acSearchName[-v2];
  do
  {
    v4 = *(_BYTE *)v2;
    *(_BYTE *)(v3 + v2) = *(_BYTE *)v2;
    ++v2;
  }
  while ( v4 );
  v5 = v1->m_iSearchTyepe;
  if ( v5 == 23 )
  {
    v10 = GTRequestListWin::GuildInfo::High_GuildName;
LABEL_8:
    boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
      &v1->m_SortPradicationFunc,
      v10);
    goto LABEL_9;
  }
  if ( v5 == 24 )
  {
    v10 = GTRequestListWin::GuildInfo::High_GuildMasterName;
    goto LABEL_8;
  }
LABEL_9:
  v8 = 0;
  v9 = 0;
  v10 = 0;
  v11 = &v8;
  if ( v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager )
  {
    v10 = (bool (__cdecl *)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))v1->m_SortPradicationFunc.baseclass_0.invoker;
    v8 = v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager;
    v9 = (int)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::sort<std::_Vector_iterator<std::_Vector_val<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>>_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
    *(std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0],
    (std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > >)v1->m_vecGuildInfo.baseclass_0._Mylast,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v8);
  v6 = v1->m_pkSlideBarGuild;
  v10 = 0;
  v1->m_bSearchStart = 1;
  SlideBar::SetSplitCnt(v6, (int)v10);
  v1->m_pkGuildLIst->m_nSlideSplitCnt = 0;
  v7 = v1->m_pkGuildLIst;
  v7->m_fCurSlideBtnPos = 0.0;
  v7->m_nViewStartPos = (signed int)((double)v7->m_nSlideSplitCnt * 0.0);
  v1->m_pkGuildLIst->m_nViewStartPos = 0;
  GuildListWin::DisplayInfoSetting(v1, 1);
}

//----- (00510CE0) --------------------------------------------------------
void __thiscall GuildListWin::ShowFormerList(GuildListWin *this)
{
  void *v1; // eax@1
  GuildListWin *v2; // esi@1
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ebx@1
  bool (__cdecl *v4)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // ecx@1
  char *v5; // edi@1
  boost::detail::function::any_pointer (__cdecl *v6)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edx@4
  void *v7; // edx@4
  boost::detail::function::any_pointer (__cdecl *v8)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-Ch] [bp-28h]@7
  int v9; // [sp-8h] [bp-24h]@7
  bool (__cdecl *v10)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-4h] [bp-20h]@7
  char v11; // [sp+Ch] [bp-10h]@3
  bool (__cdecl *v12)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp+14h] [bp-8h]@2
  boost::detail::function::any_pointer (__cdecl **v13)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+18h] [bp-4h]@7

  v1 = 0;
  v2 = this;
  this->m_bSearchStart = 0;
  *(_DWORD *)&this->m_acSearchName[0] = 0;
  *(_DWORD *)&this->m_acSearchName[4] = 0;
  *(_DWORD *)&this->m_acSearchName[8] = 0;
  *(_DWORD *)&this->m_acSearchName[12] = 0;
  *(_DWORD *)&this->m_acSearchName[16] = 0;
  *(_DWORD *)&this->m_acSearchName[20] = 0;
  v3 = 0;
  v4 = 0;
  *(_DWORD *)&v2->m_acSearchName[24] = 0;
  *(_DWORD *)&v2->m_acSearchName[28] = 0;
  v5 = (char *)&v2->m_SortPradicationFunc;
  if ( GTRequestListWin::GuildInfo::High_GuildName )
  {
    v12 = boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke;
    v3 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage;
    v1 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage(
           (boost::detail::function::any_pointer)GTRequestListWin::GuildInfo::High_GuildName,
           0).obj_ptr;
    v4 = boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke;
  }
  if ( v5 != &v11 )
  {
    v6 = v3;
    v3 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v5;
    *(_DWORD *)v5 = v6;
    v7 = v1;
    v1 = v2->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr;
    v2->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = v7;
    v2->m_SortPradicationFunc.baseclass_0.invoker = v4;
  }
  if ( v3 )
    v3((boost::detail::function::any_pointer)v1, destroy_functor_tag);
  v8 = 0;
  v9 = 0;
  v10 = 0;
  v13 = &v8;
  if ( *(_DWORD *)v5 )
  {
    v10 = v2->m_SortPradicationFunc.baseclass_0.invoker;
    v8 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v5;
    v9 = (*(int (__cdecl **)(void *, _DWORD))v5)(v2->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr, 0);
  }
  std::sort<std::_Vector_iterator<std::_Vector_val<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>>_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
    *(std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > *)&v2->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0],
    (std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > >)v2->m_vecGuildInfo.baseclass_0._Mylast,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v8);
  GuildListWin::DisplayInfoSetting(v2, 0);
}

//----- (00510DD0) --------------------------------------------------------
bool __thiscall GuildListWin::Create(GuildListWin *this, PgFrameWork *pkFrameWork)
{
  GuildListWin *v2; // esi@1
  bool result; // al@6
  NiTexturePalette *v4; // ebx@7
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  int v8; // ebx@16
  int v9; // edi@16
  NiSourceTexture *v10; // eax@16
  PgSprData *v11; // eax@19
  PgSprData *v12; // eax@21
  PgWinSpr *v13; // eax@21
  PgFont *v14; // eax@23
  PgWinText *v15; // eax@23
  NiRefObjectVtbl *v16; // edx@23
  char *v17; // eax@23
  PgSprData *v18; // eax@23
  SLWCreateInfo::Item *v19; // eax@23
  void *v20; // eax@23
  void *v21; // eax@23
  void *v22; // eax@23
  void *v23; // eax@23
  void *v24; // eax@23
  void *v25; // eax@23
  void *v26; // eax@23
  PgSprData *v27; // eax@23
  SlideListWin *v28; // eax@23
  PgSprData *v29; // eax@23
  SlideBar *v30; // eax@23
  int v31; // ecx@23
  void *v32; // eax@23
  PgFont *v33; // eax@23
  PgWinText *v34; // eax@23
  NiRefObjectVtbl *v35; // edx@23
  char *v36; // eax@23
  int v37; // ecx@23
  void *v38; // eax@23
  PgFont *v39; // eax@23
  PgWinText *v40; // eax@23
  NiRefObjectVtbl *v41; // edx@23
  char *v42; // eax@23
  int v43; // ecx@23
  void *v44; // eax@23
  PgFont *v45; // eax@23
  PgWinText *v46; // eax@23
  NiRefObjectVtbl *v47; // edx@23
  char *v48; // eax@23
  int v49; // ecx@23
  void *v50; // eax@23
  PgFont *v51; // eax@23
  PgWinText *v52; // eax@23
  NiRefObjectVtbl *v53; // edx@23
  char *v54; // eax@23
  int v55; // ecx@23
  void *v56; // eax@23
  PgFont *v57; // eax@23
  PgWinText *v58; // eax@23
  NiRefObjectVtbl *v59; // edx@23
  char *v60; // eax@23
  int v61; // ecx@23
  void *v62; // eax@23
  PgFont *v63; // eax@23
  PgWinText *v64; // eax@23
  NiRefObjectVtbl *v65; // edx@23
  char *v66; // eax@23
  int v67; // ecx@23
  void *v68; // eax@23
  PgFont *v69; // eax@23
  PgWinText *v70; // eax@23
  int v71; // eax@23
  void *v72; // edx@23
  PgFont *v73; // eax@23
  PgWinText *v74; // eax@23
  char *v75; // eax@23
  PgSprData *v76; // eax@23
  EditWin *v77; // eax@23
  NiSourceTexture *v78; // eax@23
  PopupMenuWin *v79; // eax@23
  char *v80; // eax@23
  char *v81; // eax@23
  int v82; // eax@23
  void *v83; // edx@23
  PgFont *v84; // eax@23
  PgWinText *v85; // edi@23
  NiRefObjectVtbl *v86; // ebx@23
  char *v87; // eax@23
  const char *v88; // [sp+84h] [bp-88h]@17
  int *v89; // [sp+88h] [bp-84h]@17
  int *v90; // [sp+8Ch] [bp-80h]@17
  NiSourceTexture *v91; // [sp+90h] [bp-7Ch]@17
  unsigned int v92; // [sp+94h] [bp-78h]@1
  SLWCreateInfo kCreateInfo; // [sp+A4h] [bp-68h]@23
  unsigned int uiHeight; // [sp+C0h] [bp-4Ch]@21
  unsigned int uiWidth; // [sp+C4h] [bp-48h]@21
  NiSourceTexture *pkTexture; // [sp+C8h] [bp-44h]@1
  unsigned int v97; // [sp+CCh] [bp-40h]@23
  int uiTop; // [sp+D0h] [bp-3Ch]@10
  int uiLeft; // [sp+D4h] [bp-38h]@10
  NiPointer<NiNode> spNode; // [sp+D8h] [bp-34h]@1
  void *pkMenu; // [sp+DCh] [bp-30h]@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+E0h] [bp-2Ch]@23
  unsigned int v103; // [sp+FCh] [bp-10h]@1
  int v104; // [sp+108h] [bp-4h]@1
  int v105; // [sp+10Ch] [bp+0h]@1

  v103 = (unsigned int)&v105 ^ __security_cookie;
  v92 = (unsigned int)&v105 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v104 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v104 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildList.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, pkFrameWork, "GuildListWin", 0) )
  {
    v8 = uiLeft;
    v9 = uiTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v91 = v10;
      v90 = &uiTop;
      v89 = &uiLeft;
      v88 = "Theme";
    }
    else
    {
      v91 = 0;
      v90 = &uiTop;
      v89 = &uiLeft;
      v88 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v88, v89, v90, v91);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0);
    pkMenu = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "HelpLinkNor",
           v92) )
    {
      pkMenu = PgSprData::Create(
                 &spNode.m_pObject->baseclass_0,
                 "HelpLinkNor",
                 &uiLeft,
                 &uiTop,
                 (NiSourceTexture *)pkMenu);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x19u,
        0,
        0);
    }
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v14 = Font::Get(MAIN_MENU);
      v15 = PgWinText::CreateWin(
              uiLeft,
              uiTop - v9,
              uiWidth,
              uiHeight,
              v14,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v15;
      v16[122].__vecDelDtor((NiRefObject *)v15, 5u);
      (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkMenu + 468))(&Color::m_kDxWinTitleColor);
      v97 = *(_DWORD *)pkMenu;
      v17 = TextData2::Get(0x2C5335A1u);
      (*(void (__thiscall **)(void *, char *))(v97 + 472))(pkMenu, v17);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v104) = 1;
      v19 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      pkMenu = v19;
      v19->nItemType = 1;
      v19->pNode = spNode.m_pObject;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      LOBYTE(v104) = 2;
      pkMenu = (char *)pkMenu + 72;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkMenu,
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarClick");
      LOBYTE(v104) = 3;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkMenu,
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v104) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkMenu,
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v20 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v20;
      *(_DWORD *)v20 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column01");
      LOBYTE(v104) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v21 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v21;
      *(_DWORD *)v21 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column02");
      LOBYTE(v104) = 6;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v22 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v22;
      *(_DWORD *)v22 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column03");
      LOBYTE(v104) = 7;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v23 = pkMenu;
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      *((_BYTE *)v23 + 88) = 1;
      v24 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v24;
      *(_DWORD *)v24 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column04");
      LOBYTE(v104) = 8;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v25 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v25;
      *(_DWORD *)v25 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column05");
      LOBYTE(v104) = 9;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v26 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v26;
      *(_DWORD *)v26 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column06");
      LOBYTE(v104) = 10;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v104) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      kCreateInfo.m_nOffX = 6;
      kCreateInfo.m_nOffY = 0;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, pkTexture);
      v28 = SlideListWin::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              v27,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              1);
      v2->m_pkGuildLIst = v28;
      SlideListWin::UpdateViewList(v28);
      v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
      v30 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v29,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkSlideBarGuild = v30;
      v30->m_uiClickMsg = 13;
      v2->m_pkSlideBarGuild->m_eType = 1;
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title01Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title01Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xEu,
        0,
        0);
      v31 = *((_DWORD *)pkMenu + 9);
      v32 = *(void **)(*(_DWORD *)v31 + 20);
      v97 = *(_DWORD *)(*(_DWORD *)v31 + 24);
      pkMenu = v32;
      v33 = Font::Get(MAIN_MENU);
      v34 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v97,
              v33,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v34;
      v35[122].__vecDelDtor((NiRefObject *)v34, 5u);
      v97 = *(_DWORD *)pkMenu;
      v36 = TextData2::Get(0x26B17C8Fu);
      (*(void (__thiscall **)(void *, char *))(v97 + 472))(pkMenu, v36);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title02Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title02Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xFu,
        0,
        0);
      v37 = *((_DWORD *)pkMenu + 9);
      v38 = *(void **)(*(_DWORD *)v37 + 20);
      v97 = *(_DWORD *)(*(_DWORD *)v37 + 24);
      pkMenu = v38;
      v39 = Font::Get(MAIN_MENU);
      v40 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v97,
              v39,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v40;
      v41[122].__vecDelDtor((NiRefObject *)v40, 5u);
      v97 = *(_DWORD *)pkMenu;
      v42 = TextData2::Get(0xD90AE9EEu);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v97 + 472))(pkMenu, v42);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title03Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title03Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x10u,
        0,
        0);
      v43 = *((_DWORD *)pkMenu + 9);
      v44 = *(void **)(*(_DWORD *)v43 + 20);
      v97 = *(_DWORD *)(*(_DWORD *)v43 + 24);
      pkMenu = v44;
      v45 = Font::Get(MAIN_MENU);
      v46 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v97,
              v45,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v46;
      v47[122].__vecDelDtor((NiRefObject *)v46, 5u);
      v97 = *(_DWORD *)pkMenu;
      v48 = TextData2::Get(0xE012F32Cu);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v97 + 472))(pkMenu, v48);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title04Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title04Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x11u,
        0,
        0);
      v49 = *((_DWORD *)pkMenu + 9);
      v50 = *(void **)(*(_DWORD *)v49 + 20);
      v97 = *(_DWORD *)(*(_DWORD *)v49 + 24);
      pkMenu = v50;
      v51 = Font::Get(MAIN_MENU);
      v52 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v97,
              v51,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v52;
      v53[122].__vecDelDtor((NiRefObject *)v52, 5u);
      v97 = *(_DWORD *)pkMenu;
      v54 = TextData2::Get(0x29633D92u);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v97 + 472))(pkMenu, v54);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title05Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title05Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x12u,
        0,
        0);
      v55 = *((_DWORD *)pkMenu + 9);
      v56 = *(void **)(*(_DWORD *)v55 + 20);
      v97 = *(_DWORD *)(*(_DWORD *)v55 + 24);
      pkMenu = v56;
      v57 = Font::Get(MAIN_MENU);
      v58 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v97,
              v57,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v59 = v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v58;
      v59[122].__vecDelDtor((NiRefObject *)v58, 5u);
      v97 = *(_DWORD *)pkMenu;
      v60 = TextData::Get(0x88C9DFD4u);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v97 + 472))(pkMenu, v60);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title06Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title06Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title06Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x13u,
        0,
        0);
      v61 = *((_DWORD *)pkMenu + 9);
      v62 = *(void **)(*(_DWORD *)v61 + 20);
      v97 = *(_DWORD *)(*(_DWORD *)v61 + 24);
      pkMenu = v62;
      v63 = Font::Get(MAIN_MENU);
      v64 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v97,
              v63,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v65 = v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v64;
      v65[122].__vecDelDtor((NiRefObject *)v64, 5u);
      v97 = *(_DWORD *)pkMenu;
      v66 = TextData2::Get(0xBFFAD625u);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v97 + 472))(pkMenu, v66);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Count_total", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v67 = *((_DWORD *)pkMenu + 9);
      v68 = *(void **)(*(_DWORD *)v67 + 20);
      v97 = *(_DWORD *)(*(_DWORD *)v67 + 24);
      pkMenu = v68;
      v69 = Font::Get(MAIN_MENU);
      v70 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v97,
              v69,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkTotalGuildNum = v70;
      v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v70,
        5u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTotalGuildNum->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_996CA3);
      ((void (__stdcall *)(_DWORD))v2->m_pkTotalGuildNum->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SearchChoiceNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchChoiceClick");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchChoiceOver");
      PgWinBut::CreateWin(uiLeft, uiTop, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0, 0x14u, 0, 0);
      v71 = **((_DWORD **)pkMenu + 9);
      v72 = *(void **)(v71 + 20);
      v97 = *(_DWORD *)(v71 + 24);
      pkMenu = v72;
      v73 = Font::Get(0);
      v74 = PgWinText::CreateWin(
              uiLeft,
              uiTop + 1,
              (unsigned int)pkMenu,
              v97,
              v73,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkSearchType = v74;
      v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v74,
        5u);
      v97 = (unsigned int)v2->m_pkSearchType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v75 = TextData2::Get(0xD90AE9EEu);
      (*(void (__thiscall **)(PgWinText *, char *))(v97 + 472))(v2->m_pkSearchType, v75);
      ((void (__stdcall *)(_DWORD))v2->m_pkSearchType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v76 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Search_Input", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft, uiTop, v76, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v77 = EditWin::CreateWin(
              uiLeft,
              uiTop + 2,
              uiWidth,
              uiHeight,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              NORMAL,
              0x10u,
              1u,
              1,
              0,
              1);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v77);
      EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SearchNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchClick");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchOver");
      PgWinBut::CreateWin(uiLeft, uiTop, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0, 0x15u, 0, 0);
      v78 = MenuTexMgr::GetTexture(1u);
      v79 = PopupMenuWin::CreateWin(v78, 4u, 4u, 0);
      v2->m_spPopupMenu = v79;
      ((void (__stdcall *)(IDirectMessenger *))v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      PopupMenuWin::Clear(v2->m_spPopupMenu);
      v80 = TextData2::Get(0xD90AE9EEu);
      pkMenu = PopupMenuText::CreateWin(v80, 0, 0, 0, 0, 0, 0);
      PopupMenu::SetClickEvent((PopupMenu *)pkMenu, 74, 0);
      PopupMenuWin::AddMenu(v2->m_spPopupMenu, (PopupMenu *)pkMenu);
      v81 = TextData2::Get(0xE012F32Cu);
      pkMenu = PopupMenuText::CreateWin(v81, 0, 0, 0, 0, 0, 0);
      PopupMenu::SetClickEvent((PopupMenu *)pkMenu, 75, 0);
      PopupMenuWin::AddMenu(v2->m_spPopupMenu, (PopupMenu *)pkMenu);
      PopupMenuWin::FinishMenu(v2->m_spPopupMenu, 0);
      ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x16u,
        0,
        0);
      v82 = **((_DWORD **)pkMenu + 9);
      v83 = *(void **)(v82 + 20);
      v97 = *(_DWORD *)(v82 + 24);
      pkTexture = (NiSourceTexture *)v83;
      v84 = Font::Get(MAIN_MENU);
      v85 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              (unsigned int)pkTexture,
              v97,
              v84,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v85,
        5u);
      v86 = v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v87 = TextData2::Get(0x4A8E7A8Au);
      v86[118].__vecDelDtor((NiRefObject *)v85, (unsigned int)v87);
      v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v85,
        0);
      ((void (__thiscall *)(GuildListWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.5);
      LOBYTE(v104) = 0;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      v104 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      v104 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v7 = spNode.m_pObject;
    v104 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00511E40) --------------------------------------------------------
void __thiscall GuildListWin::OnCommand(GuildListWin *this, unsigned int wParam, int lParam)
{
  GuildListWin *v3; // esi@1
  SlideListWin *v4; // edi@25
  boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > v5; // [sp-Ch] [bp-14h]@7
  bool (__cdecl *v6)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-4h] [bp-Ch]@6

  v3 = this;
  switch ( wParam )
  {
    case 0xBu:
      GuildListWin::OnPrevPage(this);
      return;
    case 0xCu:
      GuildListTask::OnNCGuildListReq(this->m_GuildIndex + 22);
      return;
    case 0xDu:
      GuildListWin::OnSlideBar(this);
      return;
    case 0xFu:
      if ( bSGuildName )
      {
        bSGuildName = 0;
        v6 = GuildListWin::GuildInfo::Low_GuildName;
      }
      else
      {
        bSGuildName = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildName;
      }
      goto LABEL_7;
    case 0x10u:
      if ( bSMasterName )
      {
        bSMasterName = 0;
        v6 = GTRequestListWin::GuildInfo::Low_GuildMasterName;
      }
      else
      {
        bSMasterName = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildMasterName;
      }
      goto LABEL_7;
    case 0x11u:
      if ( bSGuildType )
      {
        bSGuildType = 0;
        v6 = GuildListWin::GuildInfo::Low_GuildType;
      }
      else
      {
        bSGuildType = 1;
        v6 = GuildListWin::GuildInfo::High_GuildType;
      }
      goto LABEL_7;
    case 0x12u:
      if ( bSGuildGrade )
      {
        bSGuildGrade = 0;
        v6 = GuildListWin::GuildInfo::Low_GuildGrade;
      }
      else
      {
        bSGuildGrade = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildGrade;
      }
      goto LABEL_7;
    case 0x13u:
      if ( bSTotalMember )
      {
        bSTotalMember = 0;
        v6 = GTRequestListWin::GuildInfo::Low_GuildTotalMember;
      }
      else
      {
        bSTotalMember = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildTotalMember;
      }
LABEL_7:
      boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
        &this->m_SortPradicationFunc,
        v6);
      boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>(
        &v5,
        &v3->m_SortPradicationFunc);
      std::sort<std::_Vector_iterator<std::_Vector_val<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>>_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
        *(std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > *)&v3->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0],
        (std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > >)v3->m_vecGuildInfo.baseclass_0._Mylast,
        v5);
      if ( v3->m_bSearchStart )
        GuildListWin::DisplayInfoSetting(v3, 1);
      else
        GuildListWin::DisplayInfoSetting(v3, 0);
      break;
    case 0x14u:
      GuildListWin::OnSearchChoice(this);
      break;
    case 0x15u:
      GuildListWin::OnSearch(this);
      break;
    case 0x16u:
      this->m_bSearchStart = 0;
      *(_DWORD *)&this->m_acSearchName[0] = 0;
      *(_DWORD *)&this->m_acSearchName[4] = 0;
      *(_DWORD *)&this->m_acSearchName[8] = 0;
      *(_DWORD *)&this->m_acSearchName[12] = 0;
      *(_DWORD *)&this->m_acSearchName[16] = 0;
      *(_DWORD *)&this->m_acSearchName[20] = 0;
      *(_DWORD *)&this->m_acSearchName[24] = 0;
      *(_DWORD *)&this->m_acSearchName[28] = 0;
      SlideBar::SetSplitCnt(this->m_pkSlideBarGuild, 0);
      v3->m_pkGuildLIst->m_nSlideSplitCnt = 0;
      v4 = v3->m_pkGuildLIst;
      v4->m_fCurSlideBtnPos = 0.0;
      v4->m_nViewStartPos = (signed int)((double)v4->m_nSlideSplitCnt * 0.0);
      v3->m_pkGuildLIst->m_nViewStartPos = 0;
      GuildListWin::ShowFormerList(v3);
      break;
    case 0x19u:
      GuildListWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005120B0) --------------------------------------------------------
void __thiscall GuildListWin::OnEditEnd(GuildListWin *this, unsigned int wParam, int lParam)
{
  GuildListWin *v3; // esi@1
  EditWin *v4; // edi@1
  NiRefObjectVtbl *v5; // ebx@1
  int v6; // eax@1

  v3 = this;
  v4 = this->m_spEdit.m_pObject;
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)(this->m_spEdit.m_pObject);
  v5[115].__vecDelDtor((NiRefObject *)v4, v6);
  ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  GuildListWin::OnSearch(v3);
}

//----- (00512100) --------------------------------------------------------
void __thiscall std::basic_ostream<char_std::char_traits<char>>::_basic_ostream<char_std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char> > *this)
{
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 2) + 4) - 8) = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
}
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);

//----- (00512110) --------------------------------------------------------
void __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this)
{
  std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *v1; // esi@1

  v1 = this;
  if ( this->_Mystate & 1 )
    operator delete(*(void **)this->baseclass_0._IGfirst);
  *v1->baseclass_0._IGfirst = 0;
  *v1->baseclass_0._IGnext = 0;
  *v1->baseclass_0._IGcount = 0;
  *v1->baseclass_0._IPfirst = 0;
  *v1->baseclass_0._IPnext = 0;
  *v1->baseclass_0._IPcount = 0;
  v1->_Mystate &= 0xFFFFFFFEu;
  v1->_Seekhigh = 0;
}

//----- (00512170) --------------------------------------------------------
void __thiscall boost::bad_function_call::bad_function_call(boost::bad_function_call *this, boost::bad_function_call *__that)
{
  boost::bad_function_call *v2; // esi@1

  v2 = this;
  std::exception::exception(&this->baseclass_0.baseclass_0, &__that->baseclass_0.baseclass_0);
  v2->baseclass_0.baseclass_0.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (00512190) --------------------------------------------------------
void *__thiscall std::system_error::_vector_deleting_destructor_(std::ios_base::failure *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  std::exception::_exception((std::bad_cast *)this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005121C0) --------------------------------------------------------
void *__thiscall std::basic_ostream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_ostream<char,std::char_traits<char> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = (char *)this - 8;
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 2) + 4) - 8) = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)&this->dummy[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);

//----- (00512200) --------------------------------------------------------
int __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::underflow(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this)
{
  char **v1; // edx@1
  char *v2; // esi@1
  int result; // eax@2
  int *v4; // edi@3
  char *v5; // eax@6

  v1 = this->baseclass_0._IGnext;
  v2 = *v1;
  if ( *v1 )
  {
    v4 = this->baseclass_0._IGcount;
    if ( v2 >= &v2[*v4] )
    {
      if ( this->_Mystate & 4 || (v5 = *this->baseclass_0._IPnext) == 0 || v5 <= v2 && this->_Seekhigh <= v2 )
      {
        result = -1;
      }
      else
      {
        if ( this->_Seekhigh < v5 )
          this->_Seekhigh = v5;
        *v4 = this->_Seekhigh - *v1;
        result = **this->baseclass_0._IGnext;
      }
    }
    else
    {
      result = (unsigned __int8)*v2;
    }
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (00512270) --------------------------------------------------------
std::fpos<int> *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::seekoff(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, std::fpos<int> *result, __int64 _Off, int _Way, int _Which)
{
  char **v5; // edx@1
  char *v6; // eax@1
  char *v7; // eax@5
  int v8; // ebx@7
  unsigned int v9; // esi@7
  char *v10; // edi@15
  int v11; // edi@16
  char **v12; // eax@17
  char *v13; // edx@18
  int v14; // eax@18
  char *v15; // edi@29
  int v16; // edi@30
  std::fpos<int> *v17; // eax@33

  v5 = this->baseclass_0._IPnext;
  v6 = *v5;
  if ( *v5 && this->_Seekhigh < v6 )
    this->_Seekhigh = v6;
  if ( !(_Which & 1) || (v7 = *this->baseclass_0._IGnext) == 0 )
  {
    if ( _Which & 2 && *v5 )
    {
      if ( _Way == 2 )
      {
        v8 = (unsigned __int64)(this->_Seekhigh - *this->baseclass_0._IGfirst + _Off) >> 32;
        v9 = this->_Seekhigh - *this->baseclass_0._IGfirst + _Off;
      }
      else
      {
        if ( _Way == 1 )
        {
          v8 = (unsigned __int64)((signed int)(*v5 - *this->baseclass_0._IGfirst) + _Off) >> 32;
          v9 = *v5 - *this->baseclass_0._IGfirst + _Off;
        }
        else
        {
          if ( _Way )
          {
            v9 = std::_BADOFF;
            v8 = dword_9DF6FC;
          }
          else
          {
            v8 = HIDWORD(_Off);
            v9 = _Off;
          }
        }
      }
      if ( v8 >= 0 )
      {
        v15 = *this->baseclass_0._IGfirst;
        if ( (signed __int64)__PAIR__(v8, v9) <= this->_Seekhigh - v15 )
        {
          v16 = v9 + v15 - *v5;
          *this->baseclass_0._IPcount -= v16;
          *this->baseclass_0._IPnext += v16;
          goto LABEL_33;
        }
      }
    }
    else
    {
      v8 = HIDWORD(_Off);
      v9 = _Off;
      if ( !_Off )
        goto LABEL_33;
    }
LABEL_32:
    v9 = std::_BADOFF;
    v8 = dword_9DF6FC;
    goto LABEL_33;
  }
  if ( _Way != 2 )
  {
    if ( _Way == 1 )
    {
      if ( !(_Which & 2) )
      {
        v8 = (unsigned __int64)((signed int)(v7 - *this->baseclass_0._IGfirst) + _Off) >> 32;
        v9 = v7 - *this->baseclass_0._IGfirst + _Off;
        goto LABEL_14;
      }
    }
    else
    {
      if ( !_Way )
      {
        v8 = HIDWORD(_Off);
        v9 = _Off;
        goto LABEL_14;
      }
    }
    v9 = std::_BADOFF;
    v8 = dword_9DF6FC;
    goto LABEL_14;
  }
  v8 = (unsigned __int64)(this->_Seekhigh - *this->baseclass_0._IGfirst + _Off) >> 32;
  v9 = this->_Seekhigh - *this->baseclass_0._IGfirst + _Off;
LABEL_14:
  if ( v8 < 0 || (v10 = *this->baseclass_0._IGfirst, (signed __int64)__PAIR__(v8, v9) > this->_Seekhigh - v10) )
    goto LABEL_32;
  v11 = v9 + v10 - v7;
  *this->baseclass_0._IGcount -= v11;
  *this->baseclass_0._IGnext += v11;
  if ( _Which & 2 )
  {
    v12 = this->baseclass_0._IPnext;
    if ( *v12 )
    {
      v13 = *this->baseclass_0._IGnext;
      v14 = (int)&(*v12)[*this->baseclass_0._IPcount];
      *this->baseclass_0._IPnext = v13;
      *this->baseclass_0._IPcount = v14 - (_DWORD)v13;
    }
  }
LABEL_33:
  v17 = result;
  LODWORD(result->_Myoff) = v9;
  HIDWORD(result->_Myoff) = v8;
  result->_Fpos = 0i64;
  result->_Mystate = 0;
  return v17;
}
// 9DF6F8: using guessed type const __int64 std___BADOFF;
// 9DF6FC: using guessed type int dword_9DF6FC;

//----- (00512430) --------------------------------------------------------
std::fpos<int> *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::seekpos(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, std::fpos<int> *result, std::fpos<int> _Ptr, int _Mode)
{
  int v4; // ebx@1
  unsigned int v5; // esi@1
  char **v6; // edi@1
  char *v7; // eax@1
  unsigned int v8; // edx@4
  char *v9; // edi@9
  int v10; // edi@10
  char **v11; // eax@11
  char *v12; // edx@12
  int v13; // eax@12
  char *v14; // edi@16
  int v15; // edi@17
  std::fpos<int> *v16; // eax@20
  char *v17; // [sp+Ch] [bp-4h]@7
  char *_Modea; // [sp+34h] [bp+24h]@14

  v6 = this->baseclass_0._IPnext;
  v7 = *v6;
  v4 = (unsigned __int64)(_Ptr._Myoff + SLODWORD(_Ptr._Fpos)) >> 32;
  v5 = _Ptr._Myoff + LODWORD(_Ptr._Fpos);
  if ( *v6 && this->_Seekhigh < v7 )
    this->_Seekhigh = v7;
  v8 = std::_BADOFF;
  if ( v5 != (_DWORD)std::_BADOFF || v4 != dword_9DF6FC )
  {
    if ( _Mode & 1 && (v17 = *this->baseclass_0._IGnext) != 0 )
    {
      if ( v4 < 0 )
      {
LABEL_19:
        v4 = dword_9DF6FC;
        v5 = v8;
        goto LABEL_20;
      }
      v9 = *this->baseclass_0._IGfirst;
      if ( (signed __int64)__PAIR__(v4, v5) <= this->_Seekhigh - v9 )
      {
        v10 = v5 + v9 - v17;
        *this->baseclass_0._IGcount -= v10;
        *this->baseclass_0._IGnext += v10;
        if ( _Mode & 2 )
        {
          v11 = this->baseclass_0._IPnext;
          if ( *v11 )
          {
            v12 = *this->baseclass_0._IGnext;
            v13 = (int)&(*v11)[*this->baseclass_0._IPcount];
            *this->baseclass_0._IPnext = v12;
            *this->baseclass_0._IPcount = v13 - (_DWORD)v12;
          }
        }
        goto LABEL_20;
      }
    }
    else
    {
      if ( !(_Mode & 2) || (_Modea = *v6) == 0 || v4 < 0 )
        goto LABEL_19;
      v14 = *this->baseclass_0._IGfirst;
      if ( (signed __int64)__PAIR__(v4, v5) <= this->_Seekhigh - v14 )
      {
        v15 = v5 + v14 - _Modea;
        *this->baseclass_0._IPcount -= v15;
        *this->baseclass_0._IPnext += v15;
        goto LABEL_20;
      }
    }
    v8 = std::_BADOFF;
    goto LABEL_19;
  }
LABEL_20:
  v16 = result;
  LODWORD(result->_Myoff) = v5;
  HIDWORD(result->_Myoff) = v4;
  result->_Fpos = 0i64;
  result->_Mystate = 0;
  return v16;
}
// 9DF6F8: using guessed type const __int64 std___BADOFF;
// 9DF6FC: using guessed type int dword_9DF6FC;

//----- (00512550) --------------------------------------------------------
int __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::overflow(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, int _Meta)
{
  std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *v2; // esi@1
  char **v3; // edi@2
  char *v4; // edx@2
  char *v5; // ecx@3
  int v6; // eax@4
  int result; // eax@5
  unsigned int v8; // edi@7
  int *v9; // ecx@8
  int v10; // ebx@12
  unsigned int v11; // eax@14
  char *v12; // edi@21
  void **v13; // eax@21
  void *v14; // edx@21
  char **v15; // ecx@23
  char **v16; // eax@25
  int v17; // eax@25
  int v18; // eax@25
  char *v19; // ecx@27
  int v20; // eax@27
  int *v21; // eax@30
  char **v22; // esi@31
  char *v23; // ecx@31
  void *_Oldptr; // [sp+8h] [bp-8h]@21
  int _Newsize; // [sp+Ch] [bp-4h]@21

  v2 = this;
  if ( this->_Mystate & 8 )
  {
    v3 = this->baseclass_0._IPnext;
    v4 = *v3;
    if ( *v3 )
    {
      v5 = this->_Seekhigh;
      if ( v4 < v5 )
      {
        v6 = (int)&v4[*v2->baseclass_0._IPcount];
        *v3 = v5;
        *v2->baseclass_0._IPcount = v6 - (_DWORD)v5;
      }
    }
  }
  result = _Meta;
  if ( _Meta == -1 )
    return 0;
  v8 = (unsigned int)*v2->baseclass_0._IPnext;
  if ( !v8 || (v9 = v2->baseclass_0._IPcount, v8 >= v8 + *v9) )
  {
    if ( !(v2->_Mystate & 2) )
    {
      if ( v8 )
        v10 = v8 + *v2->baseclass_0._IPcount - (unsigned int)*v2->baseclass_0._IGfirst;
      else
        v10 = 0;
      v11 = (unsigned int)v10 >> 1;
      if ( (unsigned int)v10 >> 1 < 0x20 )
      {
        v11 = 32;
        do
        {
LABEL_17:
          if ( 2147483647 - v11 >= v10 )
            break;
          v11 >>= 1;
        }
        while ( v11 );
        if ( !v11 )
          return -1;
        _Newsize = v10 + v11;
        v12 = std::allocator<char>::allocate(&v2->_Al, v10 + v11);
        v13 = (void **)v2->baseclass_0._IGfirst;
        v14 = *v13;
        _Oldptr = *v13;
        if ( v10 && (memcpy(v12, (char *)v14, v10), v14 = _Oldptr, v10) )
        {
          v16 = v2->baseclass_0._IPnext;
          v2->_Seekhigh += v12 - _Oldptr;
          v17 = *v16 - _Oldptr;
          *v2->baseclass_0._IPfirst += v12 - _Oldptr;
          v18 = (int)&v12[v17];
          *v2->baseclass_0._IPnext = (char *)v18;
          *v2->baseclass_0._IPcount = (int)(&v12[_Newsize] - v18);
          if ( !(v2->_Mystate & 4) )
          {
            v19 = *v2->baseclass_0._IPnext;
            v20 = (int)&v12[(unsigned int)(*v2->baseclass_0._IGnext - (char *)_Oldptr)];
            *v2->baseclass_0._IGfirst = v12;
            *v2->baseclass_0._IGnext = (char *)v20;
            *v2->baseclass_0._IGcount = (int)&v19[-v20 + 1];
            goto LABEL_28;
          }
        }
        else
        {
          v15 = v2->baseclass_0._IPfirst;
          v2->_Seekhigh = v12;
          *v15 = v12;
          *v2->baseclass_0._IPnext = v12;
          *v2->baseclass_0._IPcount = _Newsize;
          if ( !(v2->_Mystate & 4) )
          {
            *v2->baseclass_0._IGfirst = v12;
            *v2->baseclass_0._IGnext = v12;
            *v2->baseclass_0._IGcount = 1;
LABEL_28:
            if ( v2->_Mystate & 1 )
              operator delete(v14);
            v21 = v2->baseclass_0._IPcount;
            v2->_Mystate |= 1u;
            --*v21;
            result = _Meta;
            goto LABEL_31;
          }
        }
        *v2->baseclass_0._IGfirst = v12;
        *v2->baseclass_0._IGnext = 0;
        *v2->baseclass_0._IGcount = (int)v12;
        goto LABEL_28;
      }
      if ( v11 )
        goto LABEL_17;
    }
    return -1;
  }
  --*v9;
LABEL_31:
  v22 = v2->baseclass_0._IPnext;
  v23 = (*v22)++;
  *v23 = result;
  return result;
}

//----- (00512700) --------------------------------------------------------
int __thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::pbackfail(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, int _Meta)
{
  char *v2; // eax@1
  int result; // eax@7

  v2 = *this->baseclass_0._IGnext;
  if ( !v2 || v2 <= *this->baseclass_0._IGfirst || _Meta != -1 && (_BYTE)_Meta != *(v2 - 1) && this->_Mystate & 2 )
  {
    result = -1;
  }
  else
  {
    ++*this->baseclass_0._IGcount;
    --*this->baseclass_0._IGnext;
    if ( _Meta == -1 )
    {
      result = 0;
    }
    else
    {
      **this->baseclass_0._IGnext = _Meta;
      result = _Meta;
    }
  }
  return result;
}

//----- (00512750) --------------------------------------------------------
void *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vector_deleting_destructor_(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int a2)
{
  std::basic_streambuf<char,std::char_traits<char> > *v2; // esi@1

  v2 = (std::basic_streambuf<char,std::char_traits<char> > *)this;
  this->baseclass_0.vfptr = (std::basic_streambuf<char,std::char_traits<char> >Vtbl *)&std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy(this);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);

//----- (00512780) --------------------------------------------------------
RaidMemberInfo *__thiscall std::allocator<GuildAcademySelectWin::GuildInfo>::allocate(std::allocator<RaidMemberInfo> *this, unsigned int _Count)
{
  RaidMemberInfo *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x3C3C3C3 || (result = (RaidMemberInfo *)operator new(68 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (005127E0) --------------------------------------------------------
char *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Ifmt(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, char *_Fmt, const char *_Spec, int _Flags)
{
  char *result; // eax@1
  char *v5; // ecx@1
  int v6; // ecx@6
  int v7; // esi@8

  result = _Fmt;
  *_Fmt = 37;
  v5 = _Fmt + 1;
  if ( _Flags & 0x20 )
  {
    *v5 = 43;
    v5 = _Fmt + 2;
  }
  if ( _Flags & 8 )
    *v5++ = 35;
  if ( *_Spec == 76 )
  {
    *(_WORD *)v5 = 13897;
    v5[2] = 52;
    v6 = (int)(v5 + 3);
  }
  else
  {
    *v5 = *_Spec;
    v6 = (int)(v5 + 1);
  }
  v7 = _Flags & 0xE00;
  if ( v7 == 1024 )
  {
    *(_BYTE *)v6 = 111;
    *(_BYTE *)(v6 + 1) = 0;
  }
  else
  {
    if ( v7 == 2048 )
    {
      *(_BYTE *)v6 = ~(8 * _Flags) & 0x20 | 0x58;
      *(_BYTE *)(v6 + 1) = 0;
    }
    else
    {
      *(_BYTE *)v6 = _Spec[1];
      *(_BYTE *)(v6 + 1) = 0;
    }
  }
  return result;
}

//----- (00512870) --------------------------------------------------------
void __thiscall std::numpunct<char>::_Tidy(std::numpunct<char> *this)
{
  std::numpunct<char> *v1; // esi@1

  v1 = this;
  operator delete__((void *)this->_Grouping);
  operator delete__((void *)v1->_Falsename);
  operator delete__((void *)v1->_Truename);
}

//----- (005128A0) --------------------------------------------------------
void *__thiscall std::codecvt<char_char_int>::_vector_deleting_destructor_(std::codecvt<char,char,int> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = (void *)this;
  this->baseclass_0.baseclass_0.vfptr = (std::locale::facetVtbl *)&std::locale::facet::_vftable_;
  if ( a2 & 1 )
    operator delete(&this->baseclass_0);
  return v2;
}
// 98928C: using guessed type int (__thiscall *std__locale__facet___vftable_)(void *p, char);

//----- (005128D0) --------------------------------------------------------
void __thiscall std::numpunct<char>::_Init(std::numpunct<char> *this, std::_Locinfo *_Lobj, bool _Isdef)
{
  std::numpunct<char> *v3; // ebx@1
  lconv *v4; // eax@1
  const char *v5; // edi@1
  unsigned int v6; // kr00_4@3
  void *v7; // eax@3
  void *v8; // eax@3
  void *v9; // eax@3
  void *v10; // esi@3
  int v11; // [sp-10h] [bp-28h]@1
  std::numpunct<char> *thisa; // [sp+0h] [bp-18h]@1
  void *_Ptr; // [sp+4h] [bp-14h]@1
  int *v14; // [sp+8h] [bp-10h]@1
  int v15; // [sp+14h] [bp-4h]@1

  v14 = &v11;
  v3 = this;
  thisa = this;
  v4 = localeconv();
  _Ptr = v4;
  v3->_Grouping = 0;
  v3->_Falsename = 0;
  v3->_Truename = 0;
  v15 = 0;
  v5 = &byte_9788EB;
  if ( !_Isdef )
    v5 = v4->grouping;
  _Getcvt();
  v6 = strlen(v5);
  v7 = operator new__(v6 + 1);
  memcpy(v7, v5, v6 + 1);
  v3->_Grouping = (const char *)v7;
  _Getcvt();
  v8 = operator new__(6u);
  memcpy(v8, "false", 6u);
  v3->_Falsename = (const char *)v8;
  _Getcvt();
  v9 = operator new__(5u);
  memcpy(v9, "true", 5u);
  v3->_Truename = (const char *)v9;
  _Getcvt();
  v10 = _Ptr;
  v3->_Dp = **(_BYTE **)_Ptr;
  _Getcvt();
  v3->_Kseparator = **((_BYTE **)v10 + 1);
  if ( _Isdef )
  {
    _Getcvt();
    v3->_Dp = 46;
    _Getcvt();
    v3->_Kseparator = 44;
  }
}

//----- (00512A10) --------------------------------------------------------
char __thiscall std::numpunct<char>::do_decimal_point(std::numpunct<char> *this)
{
  return this->_Dp;
}

//----- (00512A20) --------------------------------------------------------
char __thiscall std::numpunct<char>::do_thousands_sep(std::numpunct<char> *this)
{
  return this->_Kseparator;
}

//----- (00512A30) --------------------------------------------------------
void *__thiscall std::numpunct<char>::_scalar_deleting_destructor_(std::numpunct<char> *this, unsigned int a2)
{
  std::numpunct<char> *v2; // esi@1
  void *v3; // ST08_4@1

  v2 = this;
  v3 = (void *)this->_Grouping;
  this->baseclass_0.vfptr = (std::locale::facetVtbl *)&std::numpunct<char>::_vftable_;
  operator delete__(v3);
  operator delete__((void *)v2->_Falsename);
  operator delete__((void *)v2->_Truename);
  v2->baseclass_0.vfptr = (std::locale::facetVtbl *)&std::locale::facet::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98928C: using guessed type int (__thiscall *std__locale__facet___vftable_)(void *p, char);
// 99708C: using guessed type int (__thiscall *std__numpunct_char____vftable_)(void *p, char);

//----- (00512A80) --------------------------------------------------------
void __cdecl boost::throw_exception<boost::bad_function_call>(boost::bad_function_call *e)
{
  std::exception this; // [sp+0h] [bp-Ch]@1

  std::exception::exception(&this, &e->baseclass_0.baseclass_0);
  this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
  _CxxThrowException(&this, &_TI3_AVbad_function_call_boost__);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (00512AB0) --------------------------------------------------------
boost::detail::function::any_pointer __cdecl boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage(boost::detail::function::any_pointer functor_ptr, boost::detail::function::functor_manager_operation_type op)
{
  boost::detail::function::any_pointer result; // eax@2

  if ( op )
    result.obj_ptr = 0;
  else
    result.obj_ptr = functor_ptr.obj_ptr;
  return result;
}

//----- (00512AD0) --------------------------------------------------------
bool __cdecl GTRequestListWin::GuildInfo::Low_GuildMasterName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  char *v2; // eax@1

  v2 = (char *)&rhw->m_MasterName;
  if ( rhw->m_MasterName.baseclass_0._Myres >= 0x10 )
    v2 = *(char **)v2;
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &lhw->m_MasterName,
           0,
           lhw->m_MasterName.baseclass_0._Mysize,
           v2,
           rhw->m_MasterName.baseclass_0._Mysize) < 0;
}

//----- (00512B00) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, char _Ch, unsigned int _Count)
{
  std::basic_streambuf<char,std::char_traits<char> > *v5; // ecx@1
  unsigned int i; // esi@1
  int *v7; // eax@4
  char **v8; // eax@5
  char *v9; // ecx@5
  int v10; // eax@5
  std::ostreambuf_iterator<char,std::char_traits<char> > *v11; // eax@10

  v5 = _Dest._Strbuf;
  for ( i = _Count; i; --i )
  {
    if ( v5 )
    {
      if ( *v5->_IPnext && (v7 = v5->_IPcount, *v7 > 0) )
      {
        --*v7;
        v8 = v5->_IPnext;
        v9 = (*v8)++;
        *v9 = _Ch;
        v10 = (unsigned __int8)_Ch;
      }
      else
      {
        v10 = ((int (__stdcall *)(_DWORD))v5->vfptr->overflow)((unsigned __int8)_Ch);
      }
      v5 = _Dest._Strbuf;
      if ( v10 != -1 )
        continue;
    }
    _Dest.___u0.baseclass_0.baseclass_0.dummy[0] = 1;
  }
  v11 = result;
  *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&_Dest;
  result->_Strbuf = v5;
  return v11;
}

//----- (00512B70) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::falsename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[4].__vecDelDtor)(result);
  return result;
}

//----- (00512B90) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::truename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[5].__vecDelDtor)(result);
  return result;
}

//----- (00512BB0) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, const char *_Ptr, unsigned int _Count)
{
  std::basic_streambuf<char,std::char_traits<char> > *v5; // ecx@1
  unsigned int v6; // ebx@1
  const char *v7; // edi@2
  const char v8; // dl@4
  int *v9; // eax@5
  char **v10; // eax@6
  char *v11; // ecx@6
  int v12; // eax@6
  std::ostreambuf_iterator<char,std::char_traits<char> > *v13; // eax@11

  v5 = _Dest._Strbuf;
  v6 = _Count;
  if ( _Count )
  {
    v7 = _Ptr;
    do
    {
      if ( !v5
        || ((v8 = *v7, !*v5->_IPnext) || (v9 = v5->_IPcount, *v9 <= 0) ? (v12 = ((int (__stdcall *)(_DWORD))v5->vfptr->overflow)((unsigned __int8)v8)) : (--*v9, v10 = v5->_IPnext, v11 = *v10, ++*v10, *v11 = v8, v12 = (unsigned __int8)v8),
            v5 = _Dest._Strbuf,
            v12 == -1) )
        _Dest.___u0.baseclass_0.baseclass_0.dummy[0] = 1;
      ++v7;
      --v6;
    }
    while ( v6 );
  }
  v13 = result;
  *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&_Dest;
  result->_Strbuf = v5;
  return v13;
}

//----- (00512C20) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Putgrouped(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, const char *_Ptr, unsigned int _Count, char _Kseparator)
{
  int v6; // ebx@1
  char *v7; // edi@1
  int v8; // eax@2
  unsigned int v9; // esi@3
  std::ostreambuf_iterator<char,std::char_traits<char> > *v10; // eax@5
  int v11; // edi@5
  int v12; // ebx@5
  std::ostreambuf_iterator<char,std::char_traits<char> > *v13; // eax@7
  int v14; // edx@9
  char v16; // [sp+Ch] [bp-10h]@7
  char v17; // [sp+14h] [bp-8h]@5

  v6 = _Count;
  v7 = (char *)_Ptr;
  while ( 1 )
  {
    memchr(v7, 0, v6);
    v9 = v8 ? v8 - (_DWORD)v7 : v6;
    v10 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Put(
            this,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v17,
            _Dest,
            v7,
            v9);
    *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v10->___u0.baseclass_0.baseclass_0.dummy[0];
    v11 = (int)&v7[v9];
    v12 = v6 - v9;
    _Dest._Strbuf = v10->_Strbuf;
    if ( !v12 )
      break;
    if ( _Kseparator )
    {
      v13 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
              this,
              (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v16,
              *v10,
              _Kseparator,
              1u);
      *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v13->___u0.baseclass_0.baseclass_0.dummy[0];
      _Dest._Strbuf = v13->_Strbuf;
    }
    v7 = (char *)(v11 + 1);
    v6 = v12 - 1;
  }
  v14 = *(_DWORD *)&v10->___u0.baseclass_0.baseclass_0.dummy[0];
  result->_Strbuf = v10->_Strbuf;
  *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v14;
  return result;
}

//----- (00512CC0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::grouping(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[3].__vecDelDtor)(result);
  return result;
}

//----- (00512CE0) --------------------------------------------------------
unsigned int __cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc)
{
  char v2; // bl@1
  void *v3; // esi@3
  const char *v4; // eax@5
  std::_Locinfo this; // [sp+0h] [bp-34h]@7
  void *v7; // [sp+24h] [bp-10h]@1
  int v8; // [sp+30h] [bp-4h]@3

  v2 = 0;
  v7 = 0;
  if ( _Ppf && !*_Ppf )
  {
    v3 = operator new(0x10u);
    v7 = v3;
    v8 = 0;
    if ( v3 )
    {
      if ( *(_DWORD *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24) )
        v4 = *(const char **)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24);
      else
        v4 = (const char *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 28);
      std::_Locinfo::_Locinfo(&this, v4);
      v2 = 1;
      *((_DWORD *)v3 + 1) = 0;
      *(_DWORD *)v3 = &std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_vftable_;
      *((_QWORD *)v3 + 1) = _Getcvt();
    }
    else
    {
      v3 = 0;
    }
    v8 = -1;
    *_Ppf = (std::locale::facet *)v3;
    if ( v2 & 1 )
      std::_Locinfo::__Locinfo(&this);
  }
  return 4;
}
// 997054: using guessed type int (__thiscall *std__num_put_char_std__ostreambuf_iterator_char_std__char_traits_char______vftable_)(void *p, char);

//----- (00512DA0) --------------------------------------------------------
unsigned int __cdecl std::numpunct<char>::_Getcat(std::locale::facet **_Ppf, std::locale *_Ploc)
{
  char v2; // bl@1
  void *v3; // esi@3
  const char *v4; // eax@5
  std::_Locinfo *v5; // eax@7
  std::_Locinfo this; // [sp+0h] [bp-38h]@7
  void *v8; // [sp+24h] [bp-14h]@3
  int v9; // [sp+28h] [bp-10h]@1
  int v10; // [sp+34h] [bp-4h]@3

  v2 = 0;
  v9 = 0;
  if ( _Ppf && !*_Ppf )
  {
    v3 = operator new(0x18u);
    v8 = v3;
    v10 = 0;
    if ( v3 )
    {
      if ( *(_DWORD *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24) )
        v4 = *(const char **)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 24);
      else
        v4 = (const char *)(*(_DWORD *)&_Ploc->___u0.baseclass_0.dummy[0] + 28);
      std::_Locinfo::_Locinfo(&this, v4);
      v2 = 1;
      v9 = 1;
      *((_DWORD *)v3 + 1) = 0;
      v10 = 2;
      *(_DWORD *)v3 = &std::numpunct<char>::_vftable_;
      std::numpunct<char>::_Init((std::numpunct<char> *)v3, v5, 1);
    }
    else
    {
      v3 = 0;
    }
    *_Ppf = (std::locale::facet *)v3;
    v10 = -1;
    if ( v2 & 1 )
      std::_Locinfo::__Locinfo(&this);
  }
  return 4;
}
// 99708C: using guessed type int (__thiscall *std__numpunct_char____vftable_)(void *p, char);

//----- (00512E70) --------------------------------------------------------
void __thiscall std::basic_ostream<char_std::char_traits<char>>::_Osfx(std::basic_ostream<char,std::char_traits<char> > *this)
{
  bool v1; // zf@1
  int v2; // [sp-10h] [bp-20h]@1
  int *v3; // [sp+0h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v3 = &v2;
  v1 = (this->dummy[*(_DWORD *)(*(_DWORD *)&this->dummy[0] + 4) + 20] & 2) == 0;
  v4 = 0;
  if ( !v1 )
    std::basic_ostream<char_std::char_traits<char>>::flush(this);
}

//----- (00512ED0) --------------------------------------------------------
void __thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vbase_destructor(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this)
{
  std::ios_base *v1; // esi@1

  v1 = (std::ios_base *)this->gap50;
  *(_DWORD *)&this->___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&this->___u0.baseclass_0.dummy[0] + 4)] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  *(_DWORD *)&this->___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&this->___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)((char *)&v1[-1] - 20));
  *(_DWORD *)((char *)&v1[-1] + *(_DWORD *)(*((_DWORD *)&v1[-1] - 6) + 4) - 24) = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v1->vfptr = (std::ios_baseVtbl *)&std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor(v1);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);

//----- (00512F60) --------------------------------------------------------
void *__thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vector_deleting_destructor_(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = (char *)this - 80;
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vbase_destructor((std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *)((char *)this - 80));
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00512F90) --------------------------------------------------------
std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *__cdecl std::use_facet<std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>>(std::locale *_Loc)
{
  int v1; // ebx@1
  std::locale *v2; // edi@5
  int v3; // esi@5
  int v4; // eax@5
  int v5; // ecx@6
  std::locale::_Locimp *v6; // eax@8
  int v7; // esi@9
  unsigned int v8; // eax@18
  char pExceptionObject; // [sp+0h] [bp-24h]@16
  std::_Lockit _Lock; // [sp+Ch] [bp-18h]@1
  std::_Lockit this; // [sp+10h] [bp-14h]@2
  int _Psave; // [sp+14h] [bp-10h]@1
  int v14; // [sp+20h] [bp-4h]@1

  std::_Lockit::_Lockit(&_Lock, 0);
  v1 = std::_Facetptr<std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>>::_Psave;
  v14 = 0;
  _Psave = std::_Facetptr<std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>>::_Psave;
  if ( !std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::id )
  {
    std::_Lockit::_Lockit(&this, 0);
    if ( !std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::id )
    {
      ++std::locale::id::_Id_cnt;
      std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::id = std::locale::id::_Id_cnt;
    }
    std::_Lockit::__Lockit(&this);
  }
  v2 = _Loc;
  v3 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::id;
  v4 = *(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0];
  if ( (unsigned int)std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::id >= *(_DWORD *)(*(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0] + 12) )
  {
    v5 = 0;
  }
  else
  {
    v5 = *(_DWORD *)(*(_DWORD *)(v4 + 8)
                   + 4 * std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::id);
    if ( v5 )
    {
LABEL_11:
      v7 = v5;
LABEL_12:
      if ( v7 )
        goto LABEL_21;
      goto LABEL_13;
    }
  }
  if ( !*(_BYTE *)(v4 + 20) )
    goto LABEL_11;
  v6 = std::locale::_Getgloballocale();
  if ( v3 < v6->_Facetcount )
  {
    v7 = (int)v6->_Facetvec[v3];
    goto LABEL_12;
  }
LABEL_13:
  if ( v1 )
  {
    v7 = v1;
  }
  else
  {
    if ( std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Getcat(
           (std::locale::facet **)&_Psave,
           v2) == -1 )
    {
      std::bad_cast::bad_cast((std::bad_cast *)&pExceptionObject, "bad cast");
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_cast_std__);
    }
    v7 = _Psave;
    std::_Facetptr<std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>>::_Psave = _Psave;
    std::_Lockit::_Lockit((std::_Lockit *)&_Loc, 0);
    v8 = *(_DWORD *)(v7 + 4);
    if ( v8 < 0xFFFFFFFF )
      *(_DWORD *)(v7 + 4) = v8 + 1;
    std::_Lockit::__Lockit((std::_Lockit *)&_Loc);
    std::locale::facet::_Facet_Register((std::locale::facet *)v7);
  }
LABEL_21:
  v14 = -1;
  std::_Lockit::__Lockit(&_Lock);
  return (std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *)v7;
}
// A988AC: using guessed type int std___Facetptr_std__num_put_char_std__ostreambuf_iterator_char_std__char_traits_char_______Psave;
// A988C0: using guessed type int std__num_put_char_std__ostreambuf_iterator_char_std__char_traits_char_____id;
// B6C3B0: using guessed type int std__locale__id___Id_cnt;

//----- (005130D0) --------------------------------------------------------
std::numpunct<char> *__cdecl std::use_facet<std::numpunct<char>>(std::locale *_Loc)
{
  int v1; // ebx@1
  std::locale *v2; // edi@5
  int v3; // esi@5
  int v4; // eax@5
  int v5; // ecx@6
  std::locale::_Locimp *v6; // eax@8
  int v7; // esi@9
  unsigned int v8; // eax@18
  char pExceptionObject; // [sp+0h] [bp-24h]@16
  std::_Lockit _Lock; // [sp+Ch] [bp-18h]@1
  std::_Lockit this; // [sp+10h] [bp-14h]@2
  int _Psave; // [sp+14h] [bp-10h]@1
  int v14; // [sp+20h] [bp-4h]@1

  std::_Lockit::_Lockit(&_Lock, 0);
  v1 = std::_Facetptr<std::numpunct<char>>::_Psave;
  v14 = 0;
  _Psave = std::_Facetptr<std::numpunct<char>>::_Psave;
  if ( !std::numpunct<char>::id )
  {
    std::_Lockit::_Lockit(&this, 0);
    if ( !std::numpunct<char>::id )
    {
      ++std::locale::id::_Id_cnt;
      std::numpunct<char>::id = std::locale::id::_Id_cnt;
    }
    std::_Lockit::__Lockit(&this);
  }
  v2 = _Loc;
  v3 = std::numpunct<char>::id;
  v4 = *(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0];
  if ( (unsigned int)std::numpunct<char>::id >= *(_DWORD *)(*(_DWORD *)&_Loc->___u0.baseclass_0.dummy[0] + 12) )
  {
    v5 = 0;
  }
  else
  {
    v5 = *(_DWORD *)(*(_DWORD *)(v4 + 8) + 4 * std::numpunct<char>::id);
    if ( v5 )
    {
LABEL_11:
      v7 = v5;
LABEL_12:
      if ( v7 )
        goto LABEL_21;
      goto LABEL_13;
    }
  }
  if ( !*(_BYTE *)(v4 + 20) )
    goto LABEL_11;
  v6 = std::locale::_Getgloballocale();
  if ( v3 < v6->_Facetcount )
  {
    v7 = (int)v6->_Facetvec[v3];
    goto LABEL_12;
  }
LABEL_13:
  if ( v1 )
  {
    v7 = v1;
  }
  else
  {
    if ( std::numpunct<char>::_Getcat((std::locale::facet **)&_Psave, v2) == -1 )
    {
      std::bad_cast::bad_cast((std::bad_cast *)&pExceptionObject, "bad cast");
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_cast_std__);
    }
    v7 = _Psave;
    std::_Facetptr<std::numpunct<char>>::_Psave = _Psave;
    std::_Lockit::_Lockit((std::_Lockit *)&_Loc, 0);
    v8 = *(_DWORD *)(v7 + 4);
    if ( v8 < 0xFFFFFFFF )
      *(_DWORD *)(v7 + 4) = v8 + 1;
    std::_Lockit::__Lockit((std::_Lockit *)&_Loc);
    std::locale::facet::_Facet_Register((std::locale::facet *)v7);
  }
LABEL_21:
  v14 = -1;
  std::_Lockit::__Lockit(&_Lock);
  return (std::numpunct<char> *)v7;
}
// A988B0: using guessed type int std___Facetptr_std__numpunct_char_____Psave;
// A988BC: using guessed type int std__numpunct_char___id;
// B6C3B0: using guessed type int std__locale__id___Id_cnt;

//----- (00513210) --------------------------------------------------------
void __thiscall std::basic_ostream<char_std::char_traits<char>>::sentry::_sentry(std::basic_ostream<char,std::char_traits<char> >::sentry *this)
{
  std::basic_ostream<char,std::char_traits<char> > **v1; // esi@1
  int v2; // eax@3

  v1 = (std::basic_ostream<char,std::char_traits<char> > **)this;
  if ( !std::uncaught_exception() )
    std::basic_ostream<char_std::char_traits<char>>::_Osfx(*v1);
  v2 = *(_DWORD *)&(*v1)->dummy[*(_DWORD *)(*(_DWORD *)&(*v1)->dummy[0] + 4) + 56];
  if ( v2 )
    (*(void (**)(void))(*(_DWORD *)v2 + 8))();
}

//----- (00513280) --------------------------------------------------------
#error "51341F: positive sp value has been found (funcsize=149)"

//----- (00513470) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Iput(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, char *_Buf, unsigned int _Count)
{
  char *v7; // ebx@1
  std::locale *v8; // eax@1
  void *v9; // eax@1
  int v10; // esi@1
  unsigned int v11; // eax@2
  int v12; // edi@5
  int v13; // edi@5
  char v14; // al@7
  char v15; // al@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // edx@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // eax@18
  unsigned int v19; // esi@23
  int v20; // eax@23
  void *v21; // eax@26
  unsigned int v22; // edi@29
  unsigned int v23; // edi@33
  int v24; // eax@35
  std::ostreambuf_iterator<char,std::char_traits<char> > *v25; // eax@37
  std::ostreambuf_iterator<char,std::char_traits<char> > *v26; // eax@38
  std::ostreambuf_iterator<char,std::char_traits<char> > *v27; // eax@38
  char v28; // al@40
  std::ostreambuf_iterator<char,std::char_traits<char> > *v29; // eax@40
  std::ios_base *v30; // edx@40
  unsigned int v31; // ST14_4@40
  std::ostreambuf_iterator<char,std::char_traits<char> > *v32; // edi@40
  std::basic_streambuf<char,std::char_traits<char> > *v33; // eax@40
  unsigned int v35; // [sp-10h] [bp-64h]@1
  char v36; // [sp+0h] [bp-54h]@40
  std::numpunct<char> *_Punct_fac; // [sp+4h] [bp-50h]@1
  std::ostreambuf_iterator<char,std::char_traits<char> > *v38; // [sp+8h] [bp-4Ch]@1
  char v39; // [sp+Ch] [bp-48h]@38
  void *_Pg; // [sp+10h] [bp-44h]@23
  char _Kseparator[4]; // [sp+14h] [bp-40h]@1
  std::ios_base *v42; // [sp+18h] [bp-3Ch]@1
  char v43; // [sp+1Ch] [bp-38h]@37
  unsigned int _Prefix; // [sp+20h] [bp-34h]@2
  unsigned int v45; // [sp+24h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Grouping; // [sp+28h] [bp-2Ch]@7
  unsigned int v47; // [sp+44h] [bp-10h]@1
  int v48; // [sp+50h] [bp-4h]@1
  int v49; // [sp+54h] [bp+0h]@1
  unsigned int _Desta; // [sp+64h] [bp+10h]@40

  v47 = (unsigned int)&v49 ^ __security_cookie;
  v35 = (unsigned int)&v49 ^ __security_cookie;
  v7 = _Buf;
  v38 = result;
  v42 = _Iosbase;
  v45 = _Count;
  v8 = std::ios_base::getloc(_Iosbase, (std::locale *)_Kseparator);
  v48 = 0;
  v9 = std::use_facet<std::numpunct<char>>(v8);
  v10 = *(_DWORD *)_Kseparator;
  _Punct_fac = (std::numpunct<char> *)v9;
  v48 = -1;
  if ( *(_DWORD *)_Kseparator )
  {
    std::_Lockit::_Lockit((std::_Lockit *)&_Prefix, 0);
    v11 = *(_DWORD *)(v10 + 4);
    if ( v11 && v11 < 0xFFFFFFFF )
      *(_DWORD *)(v10 + 4) = v11 - 1;
    v12 = -(*(_DWORD *)(v10 + 4) == 0);
    std::_Lockit::__Lockit((std::_Lockit *)&_Prefix);
    v13 = v10 & v12;
    if ( v13 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
  }
  std::numpunct<char>::grouping(_Punct_fac, &_Grouping);
  v14 = *_Buf;
  v48 = 1;
  if ( v14 == 43 || v14 == 45 )
  {
    _Prefix = 1;
  }
  else
  {
    if ( v14 != 48 || (v15 = _Buf[1], v15 != 120) && v15 != 88 )
      _Prefix = 0;
    else
      _Prefix = 2;
  }
  v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Grouping;
  v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Grouping;
  if ( _Grouping.baseclass_0._Myres < 0x10 )
    v17 = &_Grouping;
  if ( v17->baseclass_0.___u0.baseclass_0.dummy[0] != 127 )
  {
    v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Grouping;
    if ( _Grouping.baseclass_0._Myres < 0x10 )
      v18 = &_Grouping;
    if ( v18->baseclass_0.___u0.baseclass_0.dummy[0] > 0 )
    {
      if ( _Grouping.baseclass_0._Myres < 0x10 )
        v16 = &_Grouping;
      v19 = v45;
      LOBYTE(v20) = v16->baseclass_0.___u0.baseclass_0.dummy[0];
      for ( _Pg = v16; (_BYTE)v20 != 127; LOBYTE(v20) = *(_BYTE *)v20 )
      {
        if ( (char)v20 <= 0 )
          break;
        v20 = (char)v20;
        if ( (char)v20 >= v19 - _Prefix )
          break;
        v19 -= v20;
        memmove_s(&_Buf[v19 + 1], v45 - v19 + 1, &_Buf[v19], v45 - v19 + 1);
        v21 = _Pg;
        ++v45;
        _Buf[v19] = 0;
        if ( *((_BYTE *)v21 + 1) > 0 )
        {
          v21 = (char *)v21 + 1;
          _Pg = v21;
        }
      }
    }
  }
  v22 = LODWORD(v42->_Wide);
  if ( SHIDWORD(v42->_Wide) >= 0 && (SHIDWORD(v42->_Wide) > 0 || v22) && v22 > v45 )
    v23 = v22 - v45;
  else
    v23 = 0;
  v24 = v42->_Fmtfl & 0x1C0;
  if ( v24 != 64 )
  {
    if ( v24 == 256 )
    {
      v26 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Put(
              this,
              (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v39,
              _Dest,
              _Buf,
              _Prefix);
      v45 -= _Prefix;
      v7 = &_Buf[_Prefix];
      v27 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
              this,
              (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v43,
              *v26,
              _Fill,
              v23);
      *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v27->___u0.baseclass_0.baseclass_0.dummy[0];
      _Dest._Strbuf = v27->_Strbuf;
    }
    else
    {
      v25 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
              this,
              (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v43,
              _Dest,
              _Fill,
              v23);
      *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v25->___u0.baseclass_0.baseclass_0.dummy[0];
      _Dest._Strbuf = v25->_Strbuf;
    }
    v23 = 0;
  }
  v28 = ((int (__stdcall *)(unsigned int))_Punct_fac->baseclass_0.vfptr[2].__vecDelDtor)(v35);
  _Kseparator[0] = v28;
  v29 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Putgrouped(
          this,
          (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v36,
          _Dest,
          v7,
          v45,
          v28);
  v30 = v42;
  v31 = v23;
  v32 = v38;
  _Desta = *(_DWORD *)&v29->___u0.baseclass_0.baseclass_0.dummy[0];
  v33 = v29->_Strbuf;
  LODWORD(v42->_Wide) = 0;
  HIDWORD(v30->_Wide) = 0;
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
    this,
    v32,
    (std::ostreambuf_iterator<char,std::char_traits<char> >)__PAIR__((unsigned int)v33, _Desta),
    _Fill,
    v31);
  if ( _Grouping.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Grouping);
  return v32;
}
// A85C00: using guessed type int __security_cookie;

//----- (00513700) --------------------------------------------------------
#error "5138FA: positive sp value has been found (funcsize=176)"

//----- (005139C0) --------------------------------------------------------
#error "513BF0: positive sp value has been found (funcsize=194)"

//----- (00513C60) --------------------------------------------------------
void __thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this, int _Mode)
{
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *v2; // edi@1
  char *v3; // esi@3
  char v4; // bl@5
  signed int v5; // eax@5
  int v6; // [sp+20h] [bp+Ch]@0

  v2 = this;
  if ( v6 )
  {
    *(_DWORD *)&this->___u0.baseclass_0.dummy[0] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_;
    *(_DWORD *)&this->gap50[0] = &std::basic_ios<char_std::char_traits<char>>::_vftable_;
  }
  *(_DWORD *)&this->___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&this->___u0.baseclass_0.dummy[0] + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v3 = (char *)this + *(_DWORD *)(*(_DWORD *)&this->___u0.baseclass_0.dummy[0] + 4);
  std::ios_base::_Init((std::ios_base *)((char *)this + *(_DWORD *)(*(_DWORD *)&this->___u0.baseclass_0.dummy[0] + 4)));
  *((_DWORD *)v3 + 14) = (char *)v2 + 4;
  *((_DWORD *)v3 + 15) = 0;
  v3[64] = std::basic_ios<char_std::char_traits<char>>::widen((std::basic_ios<char,std::char_traits<char> > *)v3, 32);
  if ( !*((_DWORD *)v3 + 14) )
    std::ios_base::clear((std::ios_base *)v3, *((_DWORD *)v3 + 3) | 4, 0);
  *(_DWORD *)&v2->___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&v2->___u0.baseclass_0.dummy[0] + 4)] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v4 = _Mode | 2;
  std::basic_streambuf<char_std::char_traits<char>>::basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&v2->___u0.baseclass_0.dummy[4]);
  v5 = 0;
  *(_DWORD *)&v2->___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  if ( !(((unsigned __int8)_Mode | 2) & 1) )
    v5 = 4;
  if ( !(v4 & 2) )
    v5 |= 2u;
  if ( v4 & 8 )
    v5 |= 8u;
  if ( v4 & 4 )
    v5 |= 0x10u;
  *(_DWORD *)&v2->___u0.baseclass_0.dummy[68] = v5;
  *(_DWORD *)&v2->___u0.baseclass_0.dummy[64] = 0;
}
// 9892A4: using guessed type int (__thiscall *std__basic_ios_char_std__char_traits_char_____vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);

//----- (00513D60) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, int _Val)
{
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *v6; // esi@1
  char *v7; // eax@1
  int v8; // eax@1
  char _Buf[64]; // [sp+Ch] [bp-4Ch]@1
  char _Fmt[6]; // [sp+4Ch] [bp-Ch]@1
  unsigned int v12; // [sp+54h] [bp-4h]@1
  int v13; // [sp+58h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v6 = this;
  v7 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Ifmt(
         this,
         _Fmt,
         "ld",
         _Iosbase->_Fmtfl);
  v8 = sprintf_s(_Buf, 0x40u, v7);
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Iput(
    v6,
    result,
    _Dest,
    _Iosbase,
    _Fill,
    _Buf,
    v8);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00513DE0) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, unsigned int _Val)
{
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *v6; // esi@1
  char *v7; // eax@1
  int v8; // eax@1
  char _Buf[64]; // [sp+Ch] [bp-4Ch]@1
  char _Fmt[6]; // [sp+4Ch] [bp-Ch]@1
  unsigned int v12; // [sp+54h] [bp-4h]@1
  int v13; // [sp+58h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v6 = this;
  v7 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Ifmt(
         this,
         _Fmt,
         "lu",
         _Iosbase->_Fmtfl);
  v8 = sprintf_s(_Buf, 0x40u, v7);
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Iput(
    v6,
    result,
    _Dest,
    _Iosbase,
    _Fill,
    _Buf,
    v8);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00513E60) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, __int64 _Val)
{
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *v6; // esi@1
  char *v7; // eax@1
  int v8; // eax@1
  char _Buf[64]; // [sp+Ch] [bp-4Ch]@1
  char _Fmt[8]; // [sp+4Ch] [bp-Ch]@1
  unsigned int v12; // [sp+54h] [bp-4h]@1
  int v13; // [sp+58h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v6 = this;
  v7 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Ifmt(
         this,
         _Fmt,
         "Ld",
         _Iosbase->_Fmtfl);
  v8 = sprintf_s(_Buf, 0x40u, v7);
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Iput(
    v6,
    result,
    _Dest,
    _Iosbase,
    _Fill,
    _Buf,
    v8);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00513EE0) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, unsigned __int64 _Val)
{
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *v6; // esi@1
  char *v7; // eax@1
  int v8; // eax@1
  char _Buf[64]; // [sp+Ch] [bp-4Ch]@1
  char _Fmt[8]; // [sp+4Ch] [bp-Ch]@1
  unsigned int v12; // [sp+54h] [bp-4h]@1
  int v13; // [sp+58h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v6 = this;
  v7 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Ifmt(
         this,
         _Fmt,
         "Lu",
         _Iosbase->_Fmtfl);
  v8 = sprintf_s(_Buf, 0x40u, v7);
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Iput(
    v6,
    result,
    _Dest,
    _Iosbase,
    _Fill,
    _Buf,
    v8);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00513F60) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, const void *_Val)
{
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *v6; // edi@1
  int v7; // eax@1
  char _Buf[64]; // [sp+Ch] [bp-44h]@1
  unsigned int v10; // [sp+4Ch] [bp-4h]@1
  int v11; // [sp+50h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v6 = this;
  v7 = sprintf_s(_Buf, 0x40u, "%p");
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Iput(
    v6,
    result,
    _Dest,
    _Iosbase,
    _Fill,
    _Buf,
    v7);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00513FC0) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__cdecl std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Fput(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, const char *_Buf, unsigned int _Beforepoint, unsigned int _Afterpoint, unsigned int _Trailing, unsigned int _Count)
{
  unsigned int v10; // ebx@1
  const char *v11; // edi@1
  std::locale *v12; // eax@1
  void *v13; // esi@1
  int v14; // esi@2
  unsigned int v15; // eax@2
  int v16; // esi@5
  int v17; // esi@5
  int (__thiscall *v18)(_DWORD, _DWORD); // eax@8
  const char v19; // al@8
  int v20; // eax@11
  int v21; // esi@11
  void *v22; // eax@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v23; // eax@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v24; // eax@16
  unsigned int v25; // ebx@20
  unsigned int v26; // ebx@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v27; // ebx@27
  char *v28; // eax@29
  unsigned int v29; // edi@31
  unsigned int v30; // eax@31
  unsigned int v31; // ecx@40
  int v32; // eax@40
  int v33; // eax@46
  std::ostreambuf_iterator<char,std::char_traits<char> > *v34; // eax@48
  std::ostreambuf_iterator<char,std::char_traits<char> > *v35; // eax@50
  std::ostreambuf_iterator<char,std::char_traits<char> > *v36; // eax@51
  int v37; // eax@53
  unsigned int v38; // eax@54
  int v39; // ebx@54
  std::ostreambuf_iterator<char,std::char_traits<char> > *v40; // eax@54
  char v41; // al@54
  std::ostreambuf_iterator<char,std::char_traits<char> > *v42; // eax@54
  std::ostreambuf_iterator<char,std::char_traits<char> > *v43; // eax@54
  int v44; // ecx@54
  int v45; // eax@55
  int v46; // ebx@56
  std::ostreambuf_iterator<char,std::char_traits<char> > *v47; // eax@56
  std::ostreambuf_iterator<char,std::char_traits<char> > *v48; // eax@56
  bool v49; // zf@56
  const char *v50; // ecx@56
  std::ostreambuf_iterator<char,std::char_traits<char> > *v51; // eax@58
  int v52; // edx@58
  std::ostreambuf_iterator<char,std::char_traits<char> > *v53; // eax@59
  std::ostreambuf_iterator<char,std::char_traits<char> > *v54; // eax@59
  unsigned int v55; // ecx@59
  std::ios_base *v56; // edx@59
  std::basic_streambuf<char,std::char_traits<char> > *v57; // eax@59
  unsigned int v59; // [sp-10h] [bp-94h]@1
  char v60; // [sp+4h] [bp-80h]@54
  void *_Punct_fac; // [sp+8h] [bp-7Ch]@1
  std::ios_base *v62; // [sp+Ch] [bp-78h]@1
  char v63; // [sp+10h] [bp-74h]@54
  char _Ch[4]; // [sp+14h] [bp-70h]@1
  unsigned int v65; // [sp+18h] [bp-6Ch]@1
  char v66; // [sp+1Ch] [bp-68h]@48
  int _Prefix; // [sp+20h] [bp-64h]@2
  int _Kseparator; // [sp+24h] [bp-60h]@2
  char _Enders[3]; // [sp+28h] [bp-5Ch]@11
  unsigned int v70; // [sp+2Ch] [bp-58h]@1
  unsigned int v71; // [sp+30h] [bp-54h]@1
  int _Pointptr; // [sp+34h] [bp-50h]@11
  unsigned int v73; // [sp+38h] [bp-4Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Grouping; // [sp+3Ch] [bp-48h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Groupstring; // [sp+58h] [bp-2Ch]@8
  unsigned int v76; // [sp+74h] [bp-10h]@1
  int v77; // [sp+80h] [bp-4h]@1
  int v78; // [sp+84h] [bp+0h]@1
  std::ostreambuf_iterator<char,std::char_traits<char> > _Desta; // [sp+94h] [bp+10h]@54

  v76 = (unsigned int)&v78 ^ __security_cookie;
  v59 = (unsigned int)&v78 ^ __security_cookie;
  v10 = _Count;
  v11 = _Buf;
  v65 = _Afterpoint;
  v70 = _Beforepoint;
  v62 = _Iosbase;
  v71 = _Trailing;
  v73 = _Count;
  v12 = std::ios_base::getloc(_Iosbase, (std::locale *)_Ch);
  v77 = 0;
  v13 = std::use_facet<std::numpunct<char>>(v12);
  _Punct_fac = v13;
  v77 = -1;
  if ( *(_DWORD *)_Ch )
  {
    v14 = *(_DWORD *)_Ch;
    _Kseparator = *(_DWORD *)_Ch;
    std::_Lockit::_Lockit((std::_Lockit *)&_Prefix, 0);
    v15 = *(_DWORD *)(v14 + 4);
    if ( v15 && v15 < 0xFFFFFFFF )
      *(_DWORD *)(v14 + 4) = v15 - 1;
    v16 = -(*(_DWORD *)(v14 + 4) == 0);
    std::_Lockit::__Lockit((std::_Lockit *)&_Prefix);
    v17 = _Kseparator & v16;
    if ( v17 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v17)(v17, 1);
    v13 = _Punct_fac;
  }
  std::numpunct<char>::grouping((std::numpunct<char> *)v13, &_Grouping);
  v18 = *(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v13 + 8);
  v77 = 1;
  LOBYTE(_Kseparator) = v18(v13, v59);
  _Groupstring.baseclass_0._Myres = 15;
  _Groupstring.baseclass_0._Mysize = 0;
  _Groupstring.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v19 = *_Buf;
  LOBYTE(v77) = 2;
  if ( v19 == 43 || (_Prefix = 0, v19 == 45) )
    _Prefix = 1;
  _Enders[0] = *localeconv()->decimal_point;
  *(_WORD *)&_Enders[1] = 101;
  memchr((char *)_Buf, 101, _Count);
  v21 = v20;
  memchr((char *)_Buf, _Enders[0], _Count);
  _Pointptr = (int)v22;
  if ( !v22 )
    v71 = 0;
  v23 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Grouping;
  if ( _Grouping.baseclass_0._Myres < 0x10 )
    v23 = &_Grouping;
  if ( v23->baseclass_0.___u0.baseclass_0.dummy[0] != 127 )
  {
    v24 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Grouping;
    if ( _Grouping.baseclass_0._Myres < 0x10 )
      v24 = &_Grouping;
    if ( v24->baseclass_0.___u0.baseclass_0.dummy[0] > 0 )
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&_Groupstring, _Buf, _Count);
      if ( v21 )
      {
        v25 = _Pointptr;
        if ( !_Pointptr )
        {
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&_Groupstring, v70, 48);
          v70 = v25;
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(
          &_Groupstring,
          v21 - (_DWORD)_Buf,
          v71,
          48);
      }
      else
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&_Groupstring, v71, 48);
        v25 = _Pointptr;
      }
      if ( v25 )
      {
        v26 = v25 - (_DWORD)_Buf;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(&_Groupstring, v26 + 1, v65, 48);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(&_Groupstring, v26, v70, 48);
        v65 = 0;
      }
      else
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&_Groupstring, v70, 48);
      }
      v27 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Grouping;
      v70 = 0;
      if ( _Grouping.baseclass_0._Myres < 0x10 )
        v27 = &_Grouping;
      v28 = *(char **)&_Groupstring;
      if ( _Groupstring.baseclass_0._Myres < 0x10 )
        v28 = (char *)&_Groupstring;
      strcspn(v28, _Enders);
      v29 = v30;
      for ( LOBYTE(v30) = v27->baseclass_0.___u0.baseclass_0.dummy[0];
            v27->baseclass_0.___u0.baseclass_0.dummy[0] != 127;
            LOBYTE(v30) = v27->baseclass_0.___u0.baseclass_0.dummy[0] )
      {
        if ( (char)v30 <= 0 )
          break;
        v30 = (char)v30;
        if ( (char)v30 >= v29 - _Prefix )
          break;
        v29 -= v30;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(&_Groupstring, v29, 1u, 0);
        if ( v27->baseclass_0.___u0._Bx._Buf[1] > 0 )
          v27 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v27 + 1);
      }
      v11 = *(const char **)&_Groupstring;
      if ( _Groupstring.baseclass_0._Myres < 0x10 )
        v11 = (const char *)&_Groupstring;
      v71 = 0;
      v73 = _Groupstring.baseclass_0._Mysize;
      v10 = _Groupstring.baseclass_0._Mysize;
    }
  }
  v31 = LODWORD(v62->_Wide);
  v32 = v70 + v65 + v10 + v71;
  if ( SHIDWORD(v62->_Wide) >= 0 && (SHIDWORD(v62->_Wide) > 0 || v31) && v31 > v32 )
    _Pointptr = v31 - v32;
  else
    _Pointptr = 0;
  v33 = v62->_Fmtfl & 0x1C0;
  if ( v33 != 64 )
  {
    if ( v33 == 256 )
    {
      if ( _Prefix )
      {
        v35 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Put(
                this,
                (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v66,
                _Dest,
                v11,
                1u);
        *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v35->___u0.baseclass_0.baseclass_0.dummy[0];
        ++v11;
        --v10;
        _Dest._Strbuf = v35->_Strbuf;
        v73 = v10;
      }
      v36 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
              this,
              (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v66,
              _Dest,
              _Fill,
              _Pointptr);
      *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v36->___u0.baseclass_0.baseclass_0.dummy[0];
      _Dest._Strbuf = v36->_Strbuf;
    }
    else
    {
      v34 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
              this,
              (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v66,
              _Dest,
              _Fill,
              _Pointptr);
      *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v34->___u0.baseclass_0.baseclass_0.dummy[0];
      _Dest._Strbuf = v34->_Strbuf;
    }
    _Pointptr = 0;
  }
  memchr((char *)v11, _Enders[0], v10);
  if ( v37 )
  {
    v38 = v37 - (_DWORD)v11;
    v39 = v38 + 1;
    v40 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Putgrouped(
            this,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v66,
            _Dest,
            v11,
            v38,
            _Kseparator);
    _Desta = *(std::ostreambuf_iterator<char,std::char_traits<char> > *)&std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
                                                                           this,
                                                                           (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v66,
                                                                           *v40,
                                                                           48,
                                                                           v70)->___u0.baseclass_0.baseclass_0.dummy[0];
    v41 = (*(int (**)(void))(*(_DWORD *)_Punct_fac + 4))();
    _Ch[0] = v41;
    v42 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
            this,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v60,
            _Desta,
            v41,
            1u);
    v43 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
            this,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v63,
            *v42,
            48,
            v65);
    v44 = *(_DWORD *)&v43->___u0.baseclass_0.baseclass_0.dummy[0];
    v11 += v39;
    v73 -= v39;
    v10 = v73;
    *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = v44;
    _Dest._Strbuf = v43->_Strbuf;
  }
  memchr((char *)v11, 101, v10);
  if ( v45 )
  {
    v46 = v45 - (_DWORD)v11 + 1;
    v47 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Putgrouped(
            this,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v63,
            _Dest,
            v11,
            v45 - (_DWORD)v11,
            _Kseparator);
    v48 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
            this,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v63,
            *v47,
            48,
            v71);
    v49 = (v62->_Fmtfl & 4) == 0;
    v71 = 0;
    v50 = "E";
    if ( v49 )
      v50 = "e";
    v51 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Put(
            this,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v63,
            *v48,
            v50,
            1u);
    v52 = *(_DWORD *)&v51->___u0.baseclass_0.baseclass_0.dummy[0];
    v11 += v46;
    v73 -= v46;
    v10 = v73;
    *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = v52;
    _Dest._Strbuf = v51->_Strbuf;
  }
  v53 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Putgrouped(
          this,
          (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v63,
          _Dest,
          v11,
          v10,
          _Kseparator);
  v54 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
          this,
          (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v60,
          *v53,
          48,
          v71);
  v56 = v62;
  v55 = *(_DWORD *)&v54->___u0.baseclass_0.baseclass_0.dummy[0];
  v57 = v54->_Strbuf;
  LODWORD(v62->_Wide) = 0;
  HIDWORD(v56->_Wide) = 0;
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
    this,
    result,
    (std::ostreambuf_iterator<char,std::char_traits<char> >)__PAIR__((unsigned int)v57, v55),
    _Fill,
    _Pointptr);
  if ( _Groupstring.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Groupstring);
  _Groupstring.baseclass_0._Myres = 15;
  _Groupstring.baseclass_0._Mysize = 0;
  _Groupstring.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( _Grouping.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Grouping);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00514530) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, bool _Val)
{
  bool v6; // zf@1
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *v7; // ebx@1
  std::locale *v9; // eax@3
  void *v10; // eax@3
  int v11; // edi@3
  unsigned int v12; // eax@4
  int v13; // edi@7
  int v14; // edi@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@12
  int v17; // edi@15
  unsigned int v18; // ecx@15
  unsigned int v19; // edi@19
  std::ostreambuf_iterator<char,std::char_traits<char> > *v20; // eax@22
  const char *v21; // eax@23
  std::ostreambuf_iterator<char,std::char_traits<char> > *v22; // eax@25
  unsigned int v23; // ecx@25
  std::basic_streambuf<char,std::char_traits<char> > *v24; // eax@25
  std::ostreambuf_iterator<char,std::char_traits<char> > *v25; // esi@25
  void *v26; // [sp-14h] [bp-7Ch]@11
  char v27; // [sp+0h] [bp-68h]@22
  std::_Lockit thisa; // [sp+4h] [bp-64h]@4
  char v29; // [sp+8h] [bp-60h]@25
  std::numpunct<char> *_Punct_fac; // [sp+Ch] [bp-5Ch]@3
  int v31; // [sp+10h] [bp-58h]@3
  std::ostreambuf_iterator<char,std::char_traits<char> > *v32; // [sp+14h] [bp-54h]@1
  int v33; // [sp+18h] [bp-50h]@4
  char _Ch[4]; // [sp+1Ch] [bp-4Ch]@1
  void *p; // [sp+20h] [bp-48h]@10
  unsigned int v36; // [sp+34h] [bp-34h]@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Str; // [sp+3Ch] [bp-2Ch]@9
  unsigned int v38; // [sp+58h] [bp-10h]@1
  int v39; // [sp+64h] [bp-4h]@3
  int v40; // [sp+68h] [bp+0h]@1

  v38 = (unsigned int)&v40 ^ __security_cookie;
  v6 = (_Iosbase->_Fmtfl & 0x4000) == 0;
  v7 = this;
  v32 = result;
  _Ch[0] = _Fill;
  if ( v6 )
  {
    ((void (__stdcall *)(std::ostreambuf_iterator<char,std::char_traits<char> > *, _DWORD, std::basic_streambuf<char,std::char_traits<char> > *, std::ios_base *, _DWORD, _DWORD))this->baseclass_0.vfptr[7].__vecDelDtor)(
      result,
      *(_DWORD *)&_Dest,
      _Dest._Strbuf,
      _Iosbase,
      *(_DWORD *)_Ch,
      _Val);
    return result;
  }
  v9 = std::ios_base::getloc(_Iosbase, (std::locale *)&v31);
  v39 = 0;
  v10 = std::use_facet<std::numpunct<char>>(v9);
  v11 = v31;
  _Punct_fac = (std::numpunct<char> *)v10;
  v39 = -1;
  if ( v31 )
  {
    v33 = v31;
    std::_Lockit::_Lockit(&thisa, 0);
    v12 = *(_DWORD *)(v11 + 4);
    if ( v12 && v12 < 0xFFFFFFFF )
      *(_DWORD *)(v11 + 4) = v12 - 1;
    v13 = -(*(_DWORD *)(v11 + 4) == 0);
    std::_Lockit::__Lockit(&thisa);
    v14 = v33 & v13;
    if ( v14 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
  }
  _Str.baseclass_0._Myres = 15;
  _Str.baseclass_0._Mysize = 0;
  _Str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v39 = 1;
  if ( _Val )
  {
    v15 = std::numpunct<char>::truename(
            _Punct_fac,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p);
    LOBYTE(v39) = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Str, v15);
    LOBYTE(v39) = 1;
    if ( v36 >= 0x10 )
    {
      v26 = p;
LABEL_14:
      operator delete(v26);
      goto LABEL_15;
    }
  }
  else
  {
    v16 = std::numpunct<char>::falsename(
            _Punct_fac,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p);
    LOBYTE(v39) = 3;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Str, v16);
    LOBYTE(v39) = 1;
    if ( v36 >= 0x10 )
    {
      v26 = p;
      goto LABEL_14;
    }
  }
LABEL_15:
  v17 = LODWORD(_Iosbase->_Wide);
  v18 = _Str.baseclass_0._Mysize;
  if ( SHIDWORD(_Iosbase->_Wide) >= 0 && (SHIDWORD(_Iosbase->_Wide) > 0 || v17) && v17 > _Str.baseclass_0._Mysize )
    v19 = v17 - _Str.baseclass_0._Mysize;
  else
    v19 = 0;
  if ( (_Iosbase->_Fmtfl & 0x1C0) != 64 )
  {
    v20 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
            v7,
            (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v27,
            _Dest,
            _Ch[0],
            v19);
    *(_DWORD *)&_Dest.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v20->___u0.baseclass_0.baseclass_0.dummy[0];
    v18 = _Str.baseclass_0._Mysize;
    _Dest._Strbuf = v20->_Strbuf;
    v19 = 0;
  }
  v21 = *(const char **)&_Str;
  if ( _Str.baseclass_0._Myres < 0x10 )
    v21 = (const char *)&_Str;
  v22 = std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Put(
          v7,
          (std::ostreambuf_iterator<char,std::char_traits<char> > *)&v29,
          _Dest,
          v21,
          v18);
  v23 = *(_DWORD *)&v22->___u0.baseclass_0.baseclass_0.dummy[0];
  v24 = v22->_Strbuf;
  _Iosbase->_Wide = 0i64;
  v25 = v32;
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Rep(
    v7,
    v32,
    (std::ostreambuf_iterator<char,std::char_traits<char> >)__PAIR__((unsigned int)v24, v23),
    _Ch[0],
    v19);
  if ( _Str.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Str);
  return v25;
}
// A85C00: using guessed type int __security_cookie;

//----- (00514750) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, long double _Val)
{
  signed int v6; // esi@1
  unsigned int v7; // eax@1
  unsigned int v8; // edi@1
  int v9; // ecx@11
  unsigned int v10; // esi@11
  int v11; // edx@11
  long double v12; // st7@14
  long double v13; // st6@14
  double v14; // st5@16
  double v15; // st4@16
  double v16; // st5@17
  double v17; // qt2@18
  double v18; // qtt@20
  double v19; // st4@20
  double v20; // qt0@21
  long double v21; // st5@21
  double v22; // st7@21
  double v23; // st5@25
  double v24; // qt1@26
  unsigned __int8 v25; // cf@29
  double v26; // qt2@29
  long double v27; // st5@29
  double v28; // st6@29
  double v29; // st5@29
  char *v30; // eax@32
  int v31; // edx@36
  int v32; // ecx@37
  int v33; // eax@42
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *thisa; // [sp+14h] [bp-8Ch]@1
  signed int _Significance; // [sp+1Ch] [bp-84h]@9
  unsigned int _Beforepoint; // [sp+20h] [bp-80h]@11
  char _Buf[108]; // [sp+28h] [bp-78h]@42
  char _Fmt[8]; // [sp+94h] [bp-Ch]@32
  unsigned int v40; // [sp+9Ch] [bp-4h]@1
  int v41; // [sp+A0h] [bp+0h]@1

  v40 = (unsigned int)&v41 ^ __security_cookie;
  v6 = LODWORD(_Iosbase->_Prec);
  v7 = HIDWORD(_Iosbase->_Prec);
  v8 = 0;
  thisa = this;
  if ( (signed int)v7 <= 0 && ((v7 & 0x80000000u) != 0 || (unsigned int)v6 <= 0) && !(_Iosbase->_Fmtfl & 0x2000) )
  {
    v6 = 6;
    v7 = 0;
  }
  if ( (v7 & 0x80000000u) != 0 || (signed int)v7 <= 0 && (unsigned int)v6 <= 0x24 )
    _Significance = v6;
  else
    _Significance = 36;
  v9 = (__PAIR__(v7, v6) - _Significance) >> 32;
  v10 = v6 - _Significance;
  v11 = _Iosbase->_Fmtfl;
  _Beforepoint = 0;
  if ( (_Iosbase->_Fmtfl & 0x3000) == 8192 && _Val != 0.5 * _Val )
  {
    if ( _Val >= 0.0 )
    {
      v13 = _Val;
      v12 = 0.0;
    }
    else
    {
      v12 = 0.0;
      v13 = -_Val;
    }
    v14 = 1.0e35;
    v15 = 1.0e10;
    if ( v13 >= 1.0e35 )
    {
      while ( _Beforepoint < 0x1388 )
      {
        v13 = v13 / v15;
        _Beforepoint += 10;
        v18 = v15;
        v19 = v14;
        v16 = v18;
        if ( v19 > v13 )
          goto LABEL_21;
        v17 = v19;
        v15 = v16;
        v14 = v17;
      }
    }
    v16 = v15;
LABEL_21:
    v20 = v16;
    v21 = v12;
    v22 = v20;
    if ( v21 < v13 && v9 >= 0 && (v9 > 0 || v10 >= 0xA) )
    {
      v23 = 1.0e-35;
      while ( v23 >= v13 )
      {
        if ( v8 >= 0x1388 )
          break;
        v25 = __CFADD__(v10, -10);
        v10 -= 10;
        v26 = v23;
        v27 = v13;
        v28 = v26;
        v9 = v25 + v9 - 1;
        v29 = v27 * v22;
        v8 += 10;
        if ( v9 <= 0 )
        {
          if ( v9 < 0 || v10 < 0xA )
            break;
        }
        v24 = v29;
        v23 = v28;
        v13 = v24;
      }
    }
  }
  _Fmt[0] = 37;
  v30 = &_Fmt[1];
  if ( v11 & 0x20 )
  {
    _Fmt[1] = 43;
    v30 = &_Fmt[2];
  }
  if ( v11 & 0x10 )
    *v30++ = 35;
  v31 = v11 & 0x3000;
  *(_WORD *)v30 = 10798;
  if ( v31 == 8192 )
  {
    LOBYTE(v32) = 102;
  }
  else
  {
    if ( v31 == 12288 )
    {
      LOBYTE(v32) = 97;
    }
    else
    {
      LOBYTE(v9) = v31 != 4096;
      v32 = 2 * v9 + 101;
    }
  }
  v30[2] = v32;
  v30[3] = 0;
  v33 = sprintf_s(_Buf, 0x6Cu, _Fmt);
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Fput(
    thisa,
    result,
    _Dest,
    _Iosbase,
    _Fill,
    _Buf,
    _Beforepoint,
    v8,
    v10,
    v33);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00514960) --------------------------------------------------------
std::ostreambuf_iterator<char,std::char_traits<char> > *__thiscall std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::do_put(std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *this, std::ostreambuf_iterator<char,std::char_traits<char> > *result, std::ostreambuf_iterator<char,std::char_traits<char> > _Dest, std::ios_base *_Iosbase, char _Fill, long double _Val)
{
  signed int v6; // esi@1
  unsigned int v7; // eax@1
  unsigned int v8; // edi@1
  int v9; // ecx@11
  unsigned int v10; // esi@11
  int v11; // edx@11
  long double v12; // st6@12
  double v13; // st5@14
  double v14; // st4@14
  double v15; // st5@15
  double v16; // qt0@17
  double v17; // qt1@19
  double v18; // st4@19
  double v19; // st7@20
  double v20; // st5@24
  double v21; // qtt@25
  unsigned __int8 v22; // cf@28
  double v23; // qt0@28
  long double v24; // st5@28
  double v25; // st6@28
  double v26; // st5@28
  char *v27; // eax@33
  int v28; // edx@37
  int v29; // ecx@38
  int v30; // eax@42
  std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > > *thisa; // [sp+14h] [bp-8Ch]@1
  signed int _Significance; // [sp+1Ch] [bp-84h]@9
  unsigned int _Beforepoint; // [sp+20h] [bp-80h]@11
  char _Buf[108]; // [sp+28h] [bp-78h]@42
  char _Fmt[8]; // [sp+94h] [bp-Ch]@33
  unsigned int v37; // [sp+9Ch] [bp-4h]@1
  int v38; // [sp+A0h] [bp+0h]@1

  v37 = (unsigned int)&v38 ^ __security_cookie;
  v6 = LODWORD(_Iosbase->_Prec);
  v7 = HIDWORD(_Iosbase->_Prec);
  v8 = 0;
  thisa = this;
  if ( (signed int)v7 <= 0 && ((v7 & 0x80000000u) != 0 || (unsigned int)v6 <= 0) && !(_Iosbase->_Fmtfl & 0x2000) )
  {
    v6 = 6;
    v7 = 0;
  }
  if ( (v7 & 0x80000000u) != 0 || (signed int)v7 <= 0 && (unsigned int)v6 <= 0x24 )
    _Significance = v6;
  else
    _Significance = 36;
  v9 = (__PAIR__(v7, v6) - _Significance) >> 32;
  v10 = v6 - _Significance;
  v11 = _Iosbase->_Fmtfl;
  _Beforepoint = 0;
  if ( (_Iosbase->_Fmtfl & 0x3000) == 8192 )
  {
    v12 = _Val;
    if ( _Val < 0.0 )
      v12 = -_Val;
    v13 = 1.0e35;
    v14 = 1.0e10;
    if ( v12 >= 1.0e35 )
    {
      while ( _Beforepoint < 0x1388 )
      {
        v12 = v12 / v14;
        _Beforepoint += 10;
        v17 = v14;
        v18 = v13;
        v15 = v17;
        if ( v18 > v12 )
          goto LABEL_20;
        v16 = v18;
        v14 = v15;
        v13 = v16;
      }
    }
    v15 = v14;
LABEL_20:
    v19 = v15;
    if ( v12 > 0.0 && v9 >= 0 && (v9 > 0 || v10 >= 0xA) )
    {
      v20 = 1.0e-35;
      while ( v20 >= v12 )
      {
        if ( v8 >= 0x1388 )
          break;
        v22 = __CFADD__(v10, -10);
        v10 -= 10;
        v23 = v20;
        v24 = v12;
        v25 = v23;
        v9 = v22 + v9 - 1;
        v26 = v24 * v19;
        v8 += 10;
        if ( v9 <= 0 )
        {
          if ( v9 < 0 || v10 < 0xA )
            break;
        }
        v21 = v26;
        v20 = v25;
        v12 = v21;
      }
    }
  }
  _Fmt[0] = 37;
  v27 = &_Fmt[1];
  if ( v11 & 0x20 )
  {
    _Fmt[1] = 43;
    v27 = &_Fmt[2];
  }
  if ( v11 & 0x10 )
    *v27++ = 35;
  v28 = v11 & 0x3000;
  *(_WORD *)v27 = 10798;
  v27[2] = 76;
  if ( v28 == 8192 )
  {
    LOBYTE(v29) = 102;
  }
  else
  {
    if ( v28 == 12288 )
    {
      LOBYTE(v29) = 97;
    }
    else
    {
      LOBYTE(v9) = v28 != 4096;
      v29 = 2 * v9 + 101;
    }
  }
  v27[3] = v29;
  v27[4] = 0;
  v30 = sprintf_s(_Buf, 0x6Cu, _Fmt);
  std::num_put<char_std::ostreambuf_iterator<char_std::char_traits<char>>>::_Fput(
    thisa,
    result,
    _Dest,
    _Iosbase,
    _Fill,
    _Buf,
    _Beforepoint,
    v8,
    v10,
    v30);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00514B60) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::do_grouping(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  const char *v2; // ecx@1

  v2 = this->_Grouping;
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, v2, strlen(v2));
  return result;
}

//----- (00514BB0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::do_falsename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  const char *v2; // ecx@1

  v2 = this->_Falsename;
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, v2, strlen(v2));
  return result;
}

//----- (00514C00) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::numpunct<char>::do_truename(std::numpunct<char> *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  const char *v2; // ecx@1

  v2 = this->_Truename;
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, v2, strlen(v2));
  return result;
}

//----- (00514C50) --------------------------------------------------------
boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *__thiscall boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *this, bool (__cdecl *f)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))
{
  boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *v2; // esi@1
  void *v3; // eax@1
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edi@1
  bool (__cdecl *v5)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // ebx@1
  boost::detail::function::any_pointer (__cdecl *v6)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ecx@4
  void *v7; // ecx@4
  char v9; // [sp+Ch] [bp-10h]@3
  unsigned int v10; // [sp+18h] [bp-4h]@1
  int v11; // [sp+1Ch] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  v3 = 0;
  v4 = 0;
  v5 = 0;
  if ( f )
  {
    v5 = boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke;
    v4 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage;
    v3 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage(
           (boost::detail::function::any_pointer)f,
           0).obj_ptr;
  }
  if ( (char *)v2 != &v9 )
  {
    v6 = v4;
    v4 = v2->baseclass_0.baseclass_0.manager;
    v2->baseclass_0.baseclass_0.manager = v6;
    v7 = v3;
    v3 = v2->baseclass_0.baseclass_0.functor.obj_ptr;
    v2->baseclass_0.baseclass_0.functor.obj_ptr = v7;
    v2->baseclass_0.invoker = v5;
  }
  if ( v4 )
    v4((boost::detail::function::any_pointer)v3, destroy_functor_tag);
  return v2;
}
// A85C00: using guessed type int __security_cookie;

//----- (00514CC0) --------------------------------------------------------
GuildListWin::GuildInfo *__cdecl std::_Move_backward<GuildListWin::GuildInfo___GuildListWin::GuildInfo__>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  GuildListWin::GuildInfo *v4; // edi@2
  char *v5; // esi@2
  GuildListWin::GuildInfo *result; // eax@4

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = _Dest;
    v5 = (char *)&_Last->m_unGuildType;
    do
    {
      v5 -= 68;
      --v4;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_strGuildName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5 - 2,
        0,
        0xFFFFFFFFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_MasterName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5 - 1,
        0,
        0xFFFFFFFFu);
      v4->m_unGuildType = *(_DWORD *)v5;
      v4->m_unGuildGrade = *((_DWORD *)v5 + 1);
      v4->m_unGuildTotalMember = *((_DWORD *)v5 + 2);
    }
    while ( (GuildListWin::GuildInfo *)(v5 - 56) != _First );
    result = v4;
  }
  return result;
}

//----- (00514D20) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::str(std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  int v2; // edx@1
  char **v3; // eax@2
  char *v4; // eax@3
  char *v5; // ecx@5
  unsigned int v6; // edi@5
  char **v7; // edx@9
  int v8; // eax@10
  char *v9; // ecx@10
  void *v11; // [sp-14h] [bp-60h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Nul; // [sp+4h] [bp-48h]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Str; // [sp+20h] [bp-2Ch]@5
  unsigned int v14; // [sp+3Ch] [bp-10h]@1
  int v15; // [sp+48h] [bp-4h]@5
  int v16; // [sp+4Ch] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v2 = this->_Mystate;
  if ( !(v2 & 2) )
  {
    v3 = this->baseclass_0._IPnext;
    if ( *v3 )
    {
      v4 = *v3;
      if ( this->_Seekhigh >= v4 )
        v4 = this->_Seekhigh;
      v5 = *this->baseclass_0._IPfirst;
      v6 = 15;
      _Str.baseclass_0._Myres = 15;
      _Str.baseclass_0._Mysize = 0;
      _Str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Str, v5, v4 - v5);
      v15 = 0;
LABEL_6:
      result->baseclass_0._Myres = v6;
      result->baseclass_0._Mysize = 0;
      result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, &_Str);
      if ( _Str.baseclass_0._Myres >= 0x10 )
      {
        v11 = *(void **)&_Str;
LABEL_13:
        operator delete(v11);
        return result;
      }
      return result;
    }
  }
  if ( !(v2 & 4) )
  {
    v7 = this->baseclass_0._IGnext;
    if ( *v7 )
    {
      v8 = (int)&(*v7)[*this->baseclass_0._IGcount];
      v9 = *this->baseclass_0._IGfirst;
      v6 = 15;
      _Str.baseclass_0._Myres = 15;
      _Str.baseclass_0._Mysize = 0;
      _Str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&_Str, v9, v8 - (_DWORD)v9);
      v15 = 1;
      goto LABEL_6;
    }
  }
  _Nul.baseclass_0._Myres = 15;
  _Nul.baseclass_0._Mysize = 0;
  _Nul.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  v15 = 2;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, &_Nul);
  if ( _Nul.baseclass_0._Myres >= 0x10 )
  {
    v11 = *(void **)&_Nul;
    goto LABEL_13;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00514E50) --------------------------------------------------------
GuildListWin::GuildInfo *__cdecl std::_Uninit_move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo___std::allocator<GuildAcademySelectWin::GuildInfo>_GuildAcademySelectWin::GuildInfo>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, std::allocator<GuildListWin::GuildInfo> *_Al, GuildListWin::GuildInfo *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  GuildListWin::GuildInfo *v6; // esi@1
  GuildListWin::GuildInfo *v7; // edi@1
  int v9; // [sp-10h] [bp-24h]@1
  GuildListWin::GuildInfo *_Next; // [sp+0h] [bp-14h]@1
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v11 = &v9;
  v6 = _Dest;
  v7 = _First;
  _Next = _Dest;
  v12 = 0;
  while ( v7 != _Last )
  {
    LOBYTE(v12) = 1;
    if ( v6 )
    {
      v6->m_strGuildName.baseclass_0._Myres = 15;
      v6->m_strGuildName.baseclass_0._Mysize = 0;
      v6->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v6->m_strGuildName,
        &v7->m_strGuildName,
        0,
        0xFFFFFFFFu);
      v6->m_MasterName.baseclass_0._Myres = 15;
      v6->m_MasterName.baseclass_0._Mysize = 0;
      LOBYTE(v12) = 2;
      v6->m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v6->m_MasterName,
        &v7->m_MasterName,
        0,
        0xFFFFFFFFu);
      v6->m_unGuildType = v7->m_unGuildType;
      v6->m_unGuildGrade = v7->m_unGuildGrade;
      v6->m_unGuildTotalMember = v7->m_unGuildTotalMember;
    }
    ++v6;
    LOBYTE(v12) = 0;
    ++v7;
  }
  return v6;
}

//----- (00514F40) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::str(
    (std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&this->___u0.baseclass_0.dummy[4],
    result);
  return result;
}

//----- (00514F70) --------------------------------------------------------
void __cdecl std::_Make_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, int *__formal, GuildListWin::GuildInfo *a5)
{
  int v5; // eax@1
  char *v6; // esi@2
  unsigned int v7; // edx@4
  unsigned int v8; // eax@4
  int v9; // edi@6
  boost::detail::function::any_pointer (__cdecl *v10)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-80h]@4
  int v11; // [sp-18h] [bp-7Ch]@4
  bool (__cdecl *v12)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-14h] [bp-78h]@4
  unsigned int v13; // [sp-10h] [bp-74h]@1
  boost::detail::function::any_pointer (__cdecl **v14)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-64h]@4
  int _Bottom; // [sp+4h] [bp-60h]@1
  GuildListWin::GuildInfo *v16; // [sp+8h] [bp-5Ch]@1
  int _Hole; // [sp+Ch] [bp-58h]@3
  GuildListWin::GuildInfo _Val; // [sp+10h] [bp-54h]@4
  unsigned int v19; // [sp+54h] [bp-10h]@1
  int v20; // [sp+60h] [bp-4h]@1
  int v21; // [sp+64h] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v13 = (unsigned int)&v21 ^ __security_cookie;
  v16 = _First;
  _Bottom = _Last - _First;
  v5 = _Bottom / 2;
  v20 = 0;
  if ( _Bottom / 2 > 0 )
  {
    v6 = (char *)&_First[v5].m_unGuildType;
    while ( 1 )
    {
      v6 -= 68;
      _Hole = v5 - 1;
      _Val.m_strGuildName.baseclass_0._Myres = 15;
      _Val.m_strGuildName.baseclass_0._Mysize = 0;
      _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strGuildName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6 - 2,
        0,
        0xFFFFFFFFu);
      LOBYTE(v20) = 1;
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_MasterName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6 - 1,
        0,
        0xFFFFFFFFu);
      v7 = *((_DWORD *)v6 + 1);
      v8 = *((_DWORD *)v6 + 2);
      _Val.m_unGuildType = *(_DWORD *)v6;
      _Val.m_unGuildGrade = v7;
      _Val.m_unGuildTotalMember = v8;
      v10 = 0;
      v11 = 0;
      v12 = 0;
      LOBYTE(v20) = 2;
      v14 = &v10;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v12 = _Pred.baseclass_0.invoker;
        v10 = _Pred.baseclass_0.baseclass_0.manager;
        v11 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      v9 = _Hole;
      std::_Adjust_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
        v16,
        _Hole,
        _Bottom,
        &_Val,
        *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v10);
      LOBYTE(v20) = 0;
      if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
      _Val.m_strGuildName.baseclass_0._Myres = 15;
      _Val.m_strGuildName.baseclass_0._Mysize = 0;
      _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( v9 <= 0 )
        break;
      v5 = _Hole;
    }
  }
  v20 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// A85C00: using guessed type int __security_cookie;

//----- (00515100) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>_GTRequestListWin::GuildInfo>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, GuildListWin::GuildInfo *__formal)
{
  GuildListWin::GuildInfo *v4; // edi@1
  GuildListWin::GuildInfo *i; // ebx@2
  int v6; // esi@3
  unsigned int v7; // edx@3
  unsigned int v8; // eax@3
  unsigned int v9; // edx@5
  unsigned int v10; // eax@5
  int j; // edi@6
  unsigned int v12; // ecx@10
  unsigned int v13; // edx@10
  boost::bad_function_call e; // [sp+0h] [bp-78h]@21
  std::exception this; // [sp+Ch] [bp-6Ch]@19
  GuildListWin::GuildInfo *v16; // [sp+18h] [bp-60h]@1
  char *_What; // [sp+1Ch] [bp-5Ch]@19
  int v18; // [sp+20h] [bp-58h]@5
  GuildListWin::GuildInfo _Val; // [sp+24h] [bp-54h]@3
  unsigned int v20; // [sp+68h] [bp-10h]@1
  int v21; // [sp+74h] [bp-4h]@1
  int v22; // [sp+78h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v4 = _First;
  v16 = _First;
  v21 = 0;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0 )
    {
      v6 = (int)i;
      _Val.m_strGuildName.baseclass_0._Myres = 15;
      _Val.m_strGuildName.baseclass_0._Mysize = 0;
      _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strGuildName,
        &i->m_strGuildName,
        0,
        0xFFFFFFFFu);
      LOBYTE(v21) = 1;
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_MasterName,
        &i->m_MasterName,
        0,
        0xFFFFFFFFu);
      v7 = i->m_unGuildGrade;
      v8 = i->m_unGuildTotalMember;
      _Val.m_unGuildType = i->m_unGuildType;
      _Val.m_unGuildGrade = v7;
      _Val.m_unGuildTotalMember = v8;
      LOBYTE(v21) = 2;
      if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        _What = "call to empty boost::function";
        std::exception::exception(&this, (const char *const *)&_What);
        this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
        LOBYTE(v21) = 3;
        boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
      }
      if ( _Pred.baseclass_0.invoker(
             (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
             &_Val,
             v4) )
      {
        std::_Move_backward<GuildListWin::GuildInfo___GuildListWin::GuildInfo__>(
          v4,
          i,
          i + 1,
          (std::_Nonscalar_ptr_iterator_tag)v18);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_strGuildName,
          &_Val.m_strGuildName,
          0,
          0xFFFFFFFFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_MasterName,
          &_Val.m_MasterName,
          0,
          0xFFFFFFFFu);
        v9 = _Val.m_unGuildGrade;
        v10 = _Val.m_unGuildTotalMember;
        v4->m_unGuildType = _Val.m_unGuildType;
        v4->m_unGuildGrade = v9;
        v4->m_unGuildTotalMember = v10;
      }
      else
      {
        for ( j = (int)&i->m_unGuildType; ; v6 = j - 56 )
        {
          j -= 68;
          if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
          {
            v18 = (int)"call to empty boost::function";
            std::exception::exception(&e.baseclass_0.baseclass_0, (const char *const *)&v18);
            e.baseclass_0.baseclass_0.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
            LOBYTE(v21) = 4;
            boost::throw_exception<boost::bad_function_call>(&e);
          }
          if ( !_Pred.baseclass_0.invoker(
                  (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                  &_Val,
                  (GuildListWin::GuildInfo *)(j - 56)) )
            break;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(j - 56),
            0,
            0xFFFFFFFFu);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 + 28),
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(j - 28),
            0,
            0xFFFFFFFFu);
          *(_DWORD *)(v6 + 56) = *(_DWORD *)j;
          *(_DWORD *)(v6 + 60) = *(_DWORD *)(j + 4);
          *(_DWORD *)(v6 + 64) = *(_DWORD *)(j + 8);
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
          &_Val.m_strGuildName,
          0,
          0xFFFFFFFFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 + 28),
          &_Val.m_MasterName,
          0,
          0xFFFFFFFFu);
        v12 = _Val.m_unGuildGrade;
        v13 = _Val.m_unGuildTotalMember;
        v4 = v16;
        *(_DWORD *)(v6 + 56) = _Val.m_unGuildType;
        *(_DWORD *)(v6 + 60) = v12;
        *(_DWORD *)(v6 + 64) = v13;
      }
      LOBYTE(v21) = 0;
      if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
      ++i;
      _Val.m_strGuildName.baseclass_0._Myres = 15;
      _Val.m_strGuildName.baseclass_0._Mysize = 0;
    }
  }
  v21 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00515380) --------------------------------------------------------
void __cdecl std::_Median<GTRequestListWin::GuildInfo___bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Mid, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))
{
  unsigned int v4; // eax@1
  int v5; // eax@2
  unsigned int v6; // esi@2
  GuildListWin::GuildInfo *v7; // eax@14
  GuildListWin::GuildInfo *v8; // esi@14
  int v9; // [sp+Ch] [bp-8h]@2
  GuildListWin::GuildInfo *_Right; // [sp+10h] [bp-4h]@2
  GuildListWin::GuildInfo *_Firsta; // [sp+1Ch] [bp+8h]@8
  GuildListWin::GuildInfo *_Firstb; // [sp+1Ch] [bp+8h]@14

  v4 = _Last - _First;
  if ( (signed int)v4 <= 40 )
  {
    if ( _Pred(_Mid, _First) )
      std::swap<GTRequestListWin::GuildInfo>(_Mid, _First);
    if ( _Pred(_Last, _Mid) )
      std::swap<GTRequestListWin::GuildInfo>(_Last, _Mid);
    if ( _Pred(_Mid, _First) )
      std::swap<GTRequestListWin::GuildInfo>(_Mid, _First);
  }
  else
  {
    v5 = (signed int)(v4 + 1) / 8;
    v6 = 68 * v5;
    v9 = 2 * v5;
    _Right = &_First[v5];
    if ( _Pred(_Right, _First) )
      std::swap<GTRequestListWin::GuildInfo>(_Right, _First);
    if ( _Pred(&_First[v9], _Right) )
      std::swap<GTRequestListWin::GuildInfo>(&_First[v9], _Right);
    if ( _Pred(_Right, _First) )
      std::swap<GTRequestListWin::GuildInfo>(_Right, _First);
    _Firsta = &_Mid[-v6 / 0x44u];
    if ( _Pred(_Mid, &_Mid[-v6 / 0x44u]) )
      std::swap<GTRequestListWin::GuildInfo>(_Mid, _Firsta);
    if ( _Pred(&_Mid[v6 / 0x44], _Mid) )
      std::swap<GTRequestListWin::GuildInfo>(&_Mid[v6 / 0x44], _Mid);
    if ( _Pred(_Mid, _Firsta) )
      std::swap<GTRequestListWin::GuildInfo>(_Mid, _Firsta);
    v7 = &_Last[-v6 / 0x44u];
    v8 = &_Last[-(v9 * 68) / 0x44u];
    _Firstb = v7;
    if ( _Pred(v7, &_Last[-(v9 * 68) / 0x44u]) )
      std::swap<GTRequestListWin::GuildInfo>(_Firstb, v8);
    if ( _Pred(_Last, _Firstb) )
      std::swap<GTRequestListWin::GuildInfo>(_Last, _Firstb);
    if ( _Pred(_Firstb, v8) )
      std::swap<GTRequestListWin::GuildInfo>(_Firstb, v8);
    if ( _Pred(_Mid, _Right) )
      std::swap<GTRequestListWin::GuildInfo>(_Mid, _Right);
    if ( _Pred(_Firstb, _Mid) )
      std::swap<GTRequestListWin::GuildInfo>(_Firstb, _Mid);
    if ( _Pred(_Mid, _Right) )
      std::swap<GTRequestListWin::GuildInfo>(_Mid, _Right);
  }
}

//----- (00515590) --------------------------------------------------------
void __cdecl std::_Make_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *), int *__formal, GuildListWin::GuildInfo *a5)
{
  int v5; // edi@1
  char *v6; // esi@2
  unsigned int v7; // eax@3
  unsigned int v8; // ecx@3
  int _Bottom; // [sp+8h] [bp-58h]@1
  GuildListWin::GuildInfo _Val; // [sp+Ch] [bp-54h]@3
  unsigned int v11; // [sp+50h] [bp-10h]@1
  int v12; // [sp+5Ch] [bp-4h]@3
  int v13; // [sp+60h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  _Bottom = _Last - _First;
  v5 = _Bottom / 2;
  if ( _Bottom / 2 > 0 )
  {
    v6 = (char *)&_First[v5].m_unGuildType;
    do
    {
      v6 -= 68;
      --v5;
      _Val.m_strGuildName.baseclass_0._Myres = 15;
      _Val.m_strGuildName.baseclass_0._Mysize = 0;
      _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strGuildName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6 - 2,
        0,
        0xFFFFFFFFu);
      v12 = 0;
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_MasterName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6 - 1,
        0,
        0xFFFFFFFFu);
      v7 = *((_DWORD *)v6 + 1);
      v8 = *((_DWORD *)v6 + 2);
      _Val.m_unGuildType = *(_DWORD *)v6;
      _Val.m_unGuildGrade = v7;
      _Val.m_unGuildTotalMember = v8;
      v12 = 1;
      std::_Adjust_heap<GuildListWin::GuildInfo___int_GuildListWin::GuildInfo_bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
        _First,
        v5,
        _Bottom,
        &_Val,
        _Pred);
      v12 = -1;
      if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
    }
    while ( v5 > 0 );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005156D0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<GTRequestListWin::GuildInfo___bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____GTRequestListWin::GuildInfo>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *), GuildListWin::GuildInfo *__formal)
{
  GuildListWin::GuildInfo *v4; // esi@1
  GuildListWin::GuildInfo *i; // ebx@2
  GuildListWin::GuildInfo *v6; // edi@3
  unsigned int v7; // eax@3
  unsigned int v8; // ecx@3
  unsigned int v9; // edx@4
  unsigned int v10; // eax@4
  int j; // esi@5
  unsigned int v12; // ecx@7
  unsigned int v13; // edx@7
  GuildListWin::GuildInfo _Val; // [sp+8h] [bp-54h]@3
  unsigned int v15; // [sp+4Ch] [bp-10h]@1
  int v16; // [sp+58h] [bp-4h]@3
  int v17; // [sp+5Ch] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = i;
      _Val.m_strGuildName.baseclass_0._Myres = 15;
      _Val.m_strGuildName.baseclass_0._Mysize = 0;
      _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strGuildName,
        &i->m_strGuildName,
        0,
        0xFFFFFFFFu);
      v16 = 0;
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_MasterName,
        &i->m_MasterName,
        0,
        0xFFFFFFFFu);
      v7 = i->m_unGuildGrade;
      v8 = i->m_unGuildTotalMember;
      _Val.m_unGuildType = i->m_unGuildType;
      _Val.m_unGuildGrade = v7;
      _Val.m_unGuildTotalMember = v8;
      v16 = 1;
      if ( _Pred(&_Val, v4) )
      {
        std::_Move_backward<GuildListWin::GuildInfo___GuildListWin::GuildInfo__>(
          v4,
          i,
          i + 1,
          (std::_Nonscalar_ptr_iterator_tag)_First);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_strGuildName,
          &_Val.m_strGuildName,
          0,
          0xFFFFFFFFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_MasterName,
          &_Val.m_MasterName,
          0,
          0xFFFFFFFFu);
        v9 = _Val.m_unGuildGrade;
        v10 = _Val.m_unGuildTotalMember;
        v4->m_unGuildType = _Val.m_unGuildType;
        v4->m_unGuildGrade = v9;
        v4->m_unGuildTotalMember = v10;
      }
      else
      {
        for ( j = (int)&i[-1]; _Pred(&_Val, (GuildListWin::GuildInfo *)j); j -= 68 )
        {
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &v6->m_strGuildName,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)j,
            0,
            0xFFFFFFFFu);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &v6->m_MasterName,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(j + 28),
            0,
            0xFFFFFFFFu);
          v6->m_unGuildType = *(_DWORD *)(j + 56);
          v6->m_unGuildGrade = *(_DWORD *)(j + 60);
          v6->m_unGuildTotalMember = *(_DWORD *)(j + 64);
          v6 = (GuildListWin::GuildInfo *)j;
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v6->m_strGuildName,
          &_Val.m_strGuildName,
          0,
          0xFFFFFFFFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v6->m_MasterName,
          &_Val.m_MasterName,
          0,
          0xFFFFFFFFu);
        v12 = _Val.m_unGuildGrade;
        v13 = _Val.m_unGuildTotalMember;
        v4 = _First;
        v6->m_unGuildType = _Val.m_unGuildType;
        v6->m_unGuildGrade = v12;
        v6->m_unGuildTotalMember = v13;
      }
      v16 = -1;
      if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005158D0) --------------------------------------------------------
void __cdecl std::make_heap<GuildListWin::GuildInfo___boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred)
{
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-24h] [bp-30h]@2
  int v4; // [sp-20h] [bp-2Ch]@2
  bool (__cdecl *v5)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-1Ch] [bp-28h]@2
  int *v6; // [sp-18h] [bp-24h]@2
  GuildListWin::GuildInfo *v7; // [sp-14h] [bp-20h]@2
  int v8; // [sp+8h] [bp-4h]@1

  v8 = 0;
  if ( (signed int)(_Last - _First) > 1 )
  {
    v7 = 0;
    v6 = 0;
    v3 = 0;
    v4 = 0;
    v5 = 0;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      v5 = _Pred.baseclass_0.invoker;
      v3 = _Pred.baseclass_0.baseclass_0.manager;
      v4 = (int)_Pred.baseclass_0.baseclass_0.manager(
                  (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                  0);
    }
    std::_Make_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
      _First,
      _Last,
      *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v3,
      v6,
      v7);
  }
  v8 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (00515990) --------------------------------------------------------
void __cdecl std::_Insertion_sort<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred)
{
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-18h] [bp-28h]@1
  int v4; // [sp-14h] [bp-24h]@1
  bool (__cdecl *v5)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-10h] [bp-20h]@1
  GuildListWin::GuildInfo *v6; // [sp-Ch] [bp-1Ch]@1
  boost::detail::function::any_pointer (__cdecl **v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-10h]@1
  int v8; // [sp+Ch] [bp-4h]@1

  v6 = 0;
  v3 = 0;
  v4 = 0;
  v5 = 0;
  v8 = 0;
  v7 = &v3;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v5 = _Pred.baseclass_0.invoker;
    v3 = _Pred.baseclass_0.baseclass_0.manager;
    v4 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Insertion_sort1<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>_GTRequestListWin::GuildInfo>(
    _First,
    _Last,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v3,
    v6);
  v8 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (00515A40) --------------------------------------------------------
std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> *__cdecl std::_Unguarded_partition<GuildListWin::GuildInfo___bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> *result, GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))
{
  GuildListWin::GuildInfo *v4; // esi@1
  int v5; // ebx@1
  unsigned int v6; // eax@10
  GuildListWin::GuildInfo *v7; // edi@10
  GuildListWin::GuildInfo *v8; // ST08_4@14
  bool v9; // zf@17
  GuildListWin::GuildInfo *v10; // ebx@18
  GuildListWin::GuildInfo *v11; // ST0C_4@28
  GuildListWin::GuildInfo *v12; // ST08_4@28
  GuildListWin::GuildInfo *v13; // eax@29
  std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> *v14; // eax@34
  int _Plast; // [sp+Ch] [bp-8h]@1
  int _Glast; // [sp+10h] [bp-4h]@2
  unsigned int _Glasta; // [sp+10h] [bp-4h]@10

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<GTRequestListWin::GuildInfo___bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)&v4[1];
  _Plast = (int)&v4[1];
  if ( _First < v4 )
  {
    do
    {
      _Glast = (int)&v4[-1];
      if ( _Pred(v4 - 1, v4) )
        break;
      if ( _Pred(v4, (GuildListWin::GuildInfo *)_Glast) )
        break;
      --v4;
    }
    while ( (unsigned int)_First < _Glast );
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( _Pred((GuildListWin::GuildInfo *)v5, v4) )
        break;
      if ( _Pred(v4, (GuildListWin::GuildInfo *)v5) )
        break;
      v5 += 68;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = v5;
  }
  v6 = (unsigned int)v4;
  v7 = (GuildListWin::GuildInfo *)v5;
  for ( _Glasta = (unsigned int)v4; ; v6 = _Glasta )
  {
    while ( 1 )
    {
      if ( v7 < _Last )
      {
        do
        {
          if ( !_Pred(v4, v7) )
          {
            if ( _Pred(v7, v4) )
              break;
            v8 = (GuildListWin::GuildInfo *)v5;
            v5 += 68;
            std::swap<GTRequestListWin::GuildInfo>(v8, v7);
          }
          ++v7;
        }
        while ( v7 < _Last );
        v6 = _Glasta;
        _Plast = v5;
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        v10 = (GuildListWin::GuildInfo *)(v6 - 68);
        do
        {
          if ( !_Pred(v10, v4) )
          {
            if ( _Pred(v4, v10) )
              break;
            --v4;
            std::swap<GTRequestListWin::GuildInfo>(v4, v10);
          }
          --v10;
          _Glasta -= 68;
        }
        while ( (unsigned int)_First < _Glasta );
        v6 = _Glasta;
        v5 = _Plast;
        v9 = _Glasta == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v13 = (GuildListWin::GuildInfo *)(v6 - 68);
      _Glasta = (unsigned int)v13;
      if ( v7 == _Last )
      {
        --v4;
        if ( v13 != v4 )
          std::swap<GTRequestListWin::GuildInfo>(v13, v4);
        v5 -= 68;
        _Plast = v5;
        std::swap<GTRequestListWin::GuildInfo>(v4, (GuildListWin::GuildInfo *)v5);
        v6 = _Glasta;
      }
      else
      {
        std::swap<GTRequestListWin::GuildInfo>(v7, v13);
        v6 = _Glasta;
        ++v7;
      }
    }
    if ( v7 == _Last )
      break;
    if ( (GuildListWin::GuildInfo *)v5 != v7 )
      std::swap<GTRequestListWin::GuildInfo>(v4, (GuildListWin::GuildInfo *)v5);
    v11 = v7;
    v5 += 68;
    v12 = v4;
    _Plast = v5;
    ++v4;
    ++v7;
    std::swap<GTRequestListWin::GuildInfo>(v12, v11);
  }
  v14 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = (GuildListWin::GuildInfo *)v5;
  return v14;
}

//----- (00515C00) --------------------------------------------------------
void __thiscall std::vector<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>::reserve(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this, unsigned int _Count)
{
  std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *v2; // esi@1
  void *v3; // eax@4
  GuildListWin::GuildInfo *v4; // ST04_4@4
  GuildListWin::GuildInfo *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // eax@6
  int v9; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@4

  v11 = &v9;
  v2 = this;
  if ( _Count > 0x3C3C3C3 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 68 < _Count )
  {
    v3 = std::allocator<GuildAcademySelectWin::GuildInfo>::allocate(
           (std::allocator<RaidMemberInfo> *)&this->baseclass_0._Alval,
           _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(GuildListWin::GuildInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v12 = 0;
    std::_Uninit_move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo___std::allocator<GuildAcademySelectWin::GuildInfo>_GuildAcademySelectWin::GuildInfo>(
      v5,
      v4,
      (GuildListWin::GuildInfo *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((unsigned __int64)(2021161081i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 5;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
        *(GuildListWin::GuildInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0],
        v2->baseclass_0._Mylast,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Count);
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v8 = _Ptr;
    v2->baseclass_0._Myend = (GuildListWin::GuildInfo *)&_Ptr[68 * _Count];
    v2->baseclass_0._Mylast = (GuildListWin::GuildInfo *)&v8[68 * v7];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (00515D20) --------------------------------------------------------
void __thiscall std::vector<GuildListWin::GuildInfo_std::allocator<GuildListWin::GuildInfo>>::_Reserve(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 68;
  if ( 63161283 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 68;
  if ( v3 > v4 )
  {
    if ( 63161283 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>::reserve(this, v5);
  }
}

//----- (00515DA0) --------------------------------------------------------
void *__thiscall GuildListWin::_vector_deleting_destructor_(GuildListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildListWin::_GuildListWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00515DD0) --------------------------------------------------------
void __thiscall std::vector<GuildAcademySelectWin::GuildInfo_std::allocator<GuildAcademySelectWin::GuildInfo>>::push_back(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this, GuildListWin::GuildInfo *_Val)
{
  std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *v2; // edi@1
  GuildListWin::GuildInfo *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  GuildListWin::GuildInfo *v6; // ecx@5
  GuildListWin::GuildInfo *v7; // [sp-10h] [bp-20h]@6

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<GuildListWin::GuildInfo_std::allocator<GuildListWin::GuildInfo>>::_Reserve(v2, 1u);
    v6 = v2->baseclass_0._Mylast;
    if ( v6 )
    {
      v7 = _Val;
      goto LABEL_11;
    }
  }
  else
  {
    v4 = (signed int)((unsigned __int64)(2021161081i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 5;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<GuildListWin::GuildInfo_std::allocator<GuildListWin::GuildInfo>>::_Reserve(v2, 1u);
    v6 = v2->baseclass_0._Mylast;
    if ( v6 )
    {
      v7 = (GuildListWin::GuildInfo *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 68 * v5);
LABEL_11:
      GuildListWin::GuildInfo::GuildInfo(v6, v7);
      goto LABEL_12;
    }
  }
LABEL_12:
  ++v2->baseclass_0._Mylast;
}

//----- (00515E90) --------------------------------------------------------
void __cdecl std::_Sort<GTRequestListWin::GuildInfo___int_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, int _Ideal, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))
{
  GuildListWin::GuildInfo *v4; // ebx@1
  GuildListWin::GuildInfo *v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<GuildListWin::GuildInfo___bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
      &_Mid,
      v4,
      v5,
      _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( ((signed int)_Mid.baseclass_0.first - (signed int)v4) / 68 >= (signed int)(v5 - _Mid.baseclass_0.second) )
    {
      std::_Sort<GTRequestListWin::GuildInfo___int_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
        _Mid.baseclass_0.second,
        v5,
        v7,
        _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<GTRequestListWin::GuildInfo___int_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
        v4,
        _Mid.baseclass_0.first,
        v7,
        _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<GTRequestListWin::GuildInfo___bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____GTRequestListWin::GuildInfo>(
        v4,
        v5,
        _Pred,
        0);
  }
  else
  {
    if ( (signed int)(v5 - v4) > 1 )
      std::_Make_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
        v4,
        v5,
        _Pred,
        0,
        0);
    std::_Sort_heap<GuildListWin::GuildInfo___bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
      v4,
      v5,
      _Pred);
  }
}

//----- (00515FD0) --------------------------------------------------------
void __thiscall GuildSelectWin::GuildSelectWin(GuildSelectWin *this)
{
  GuildSelectWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildSelectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildSelectWin::_vftable_;
}
// 99743C: using guessed type int (__stdcall *GuildSelectWin___vftable_)(int uiFlags);
// 99745C: using guessed type int (__thiscall *GuildSelectWin___vftable_)(void *p, char);

//----- (00515FF0) --------------------------------------------------------
void __thiscall GuildSelectWin::_GuildSelectWin(GuildSelectWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 99743C: using guessed type int (__stdcall *GuildSelectWin___vftable_)(int uiFlags);
// 99745C: using guessed type int (__thiscall *GuildSelectWin___vftable_)(void *p, char);

//----- (00516010) --------------------------------------------------------
void __thiscall GuildSelectWin::OnGuildBtn(GuildSelectWin *this)
{
  GuildSelectWin *v1; // edi@1
  PgWin *v2; // esi@1
  unsigned int YPos; // [sp+8h] [bp-8h]@2
  unsigned int XPos; // [sp+Ch] [bp-4h]@2

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  v2 = (PgWin *)GuildTask::GetGuildNpcMenuWin();
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
      v1,
      &XPos,
      &YPos);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor((NiRefObject *)v2, XPos);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor((NiRefObject *)v2, YPos);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
  }
}

//----- (00516090) --------------------------------------------------------
void __thiscall GuildSelectWin::OnAcademyBtn(GuildSelectWin *this)
{
  GuildSelectWin *v1; // edi@1
  PgWin *v2; // esi@1
  unsigned int YPos; // [sp+8h] [bp-8h]@2
  unsigned int XPos; // [sp+Ch] [bp-4h]@2

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  v2 = (PgWin *)GuildAcademyTask::GetGuildAcademyMenuWin();
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
      v1,
      &XPos,
      &YPos);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor((NiRefObject *)v2, XPos);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor((NiRefObject *)v2, YPos);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
  }
}

//----- (00516110) --------------------------------------------------------
void __thiscall GuildSelectWin::OnHelpLink(GuildSelectWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildSelect");
}

//----- (00516140) --------------------------------------------------------
void __thiscall GuildSelectWin::OnCommand(GuildSelectWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      GuildSelectWin::OnGuildBtn(this);
  }
  else
  {
    GuildSelectWin::OnAcademyBtn(this);
  }
}

//----- (00516160) --------------------------------------------------------
bool __thiscall GuildSelectWin::Create(GuildSelectWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  NiNode *v10; // esi@14
  PgFont *v11; // eax@19
  PgWinText *v12; // edi@19
  NiRefObjectVtbl *v13; // ebx@19
  char *v14; // eax@19
  PgSprData *v15; // eax@19
  PgSprData *v16; // eax@19
  PgSprData *v17; // edi@19
  NiSourceTexture *v18; // edi@19
  PgSprData *v19; // edi@20
  PgSprData *v20; // edi@21
  PgSprData::PgHitTester *v21; // eax@21
  unsigned int v22; // edi@21
  unsigned int v23; // ebx@21
  PgFont *v24; // eax@21
  PgWinText *v25; // edi@21
  NiRefObjectVtbl *v26; // ebx@21
  char *v27; // eax@21
  PgSprData *v28; // edi@21
  NiPointer<PgSprData::PgHitTester> *v29; // edx@21
  unsigned int v30; // edi@21
  unsigned int v31; // ebx@21
  PgFont *v32; // eax@21
  PgWinText *v33; // edi@21
  NiRefObjectVtbl *v34; // ebx@21
  char *v35; // eax@21
  NiNode *v36; // esi@22
  const char *v37; // [sp+24h] [bp-40h]@11
  int *v38; // [sp+28h] [bp-3Ch]@11
  int *v39; // [sp+2Ch] [bp-38h]@11
  NiSourceTexture *v40; // [sp+30h] [bp-34h]@11
  unsigned int uiWidth; // [sp+44h] [bp-20h]@13
  unsigned int uiHeight; // [sp+48h] [bp-1Ch]@13
  int uiLeft; // [sp+4Ch] [bp-18h]@4
  int uiTop; // [sp+50h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v46; // [sp+60h] [bp-4h]@1

  v2 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v46 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildSelect.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v5, 0, pkFrameWork, "GuildSelectWin", 0) )
  {
    v6 = spNode.m_pObject;
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v40 = v8;
    v39 = &uiTop;
    v38 = &uiLeft;
    v37 = "Theme";
  }
  else
  {
    v40 = 0;
    v39 = &uiTop;
    v38 = &uiLeft;
    v37 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v37, v38, v39, v40);
  PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v2->baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v11 = Font::Get(MAIN_MENU);
    v12 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v11, &v2->baseclass_0.baseclass_0, 0, 0);
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v12,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v12,
      1u);
    v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v14 = TextData::Get(0x9BEAF4F4u);
    v13[118].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft, uiTop, v15, &v2->baseclass_0.baseclass_0, 0, 0);
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft, uiTop, v16, &v2->baseclass_0.baseclass_0, 0, 0);
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft, uiTop, v17, &v2->baseclass_0.baseclass_0);
    v18 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v18);
      PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft, uiTop, v19, &v2->baseclass_0.baseclass_0, 2u, 0, 0);
    }
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "Btn01Over");
    PgWinBut::CreateWin(uiLeft, uiTop, v20, &v2->baseclass_0.baseclass_0, 1u, 0, 0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v22 = v21->m_uiHeight;
    v23 = v21->m_uiWidth;
    v24 = Font::Get(MENU);
    v25 = PgWinText::CreateWin(uiLeft, uiTop, v23, v22, v24, &v2->baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v27 = TextData::Get(0x9BEAF4F4u);
    v26[118].__vecDelDtor((NiRefObject *)v25, (unsigned int)v27);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "Btn02Over");
    PgWinBut::CreateWin(uiLeft, uiTop, v28, &v2->baseclass_0.baseclass_0, 0, 0, 0);
    v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v30 = v29->m_pObject->m_uiHeight;
    v31 = v29->m_pObject->m_uiWidth;
    v32 = Font::Get(MENU);
    v33 = PgWinText::CreateWin(uiLeft, uiTop, v31, v30, v32, &v2->baseclass_0.baseclass_0, 0, 0);
    v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v33,
      5u);
    v34 = v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v35 = TextData::Get(0x253B184Cu);
    v34[118].__vecDelDtor((NiRefObject *)v33, (unsigned int)v35);
    v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v33,
      0);
    ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v46 = -1;
    if ( spNode.m_pObject )
    {
      v36 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v36 )
          v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v10 = spNode.m_pObject;
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00516680) --------------------------------------------------------
GuildSelectWin *__cdecl GuildSelectWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildSelectWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildSelectWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildSelectWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildSelectWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99743C: using guessed type int (__stdcall *GuildSelectWin___vftable_)(int uiFlags);
// 99745C: using guessed type int (__thiscall *GuildSelectWin___vftable_)(void *p, char);

//----- (005167C0) --------------------------------------------------------
void *__thiscall GuildSelectWin::_vector_deleting_destructor_(GuildSelectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99743C: using guessed type int (__stdcall *GuildSelectWin___vftable_)(int uiFlags);
// 99745C: using guessed type int (__thiscall *GuildSelectWin___vftable_)(void *p, char);

//----- (00516800) --------------------------------------------------------
void __thiscall HelpWin::OnClose(HelpWin *this)
{
  HWND__ *v1; // esi@1
  PgFrameWork *v2; // eax@2

  this->m_bOpen = 0;
  v1 = this->m_hWebWindow;
  if ( GameFrameWork::ms_bSpawnApps == 1 )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
      GameFrameWork::DelWebList((GameFrameWork *)v2, v1);
  }
  DestroyWindow(v1);
}
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (00516840) --------------------------------------------------------
void __thiscall HelpWin::ReGenPos(HelpWin *this)
{
  HelpWin *v1; // esi@1
  int v2; // edx@1
  int v3; // eax@1
  int v4; // ecx@1

  v1 = this;
  v1->m_uiWebXPos = v1->m_uiPlaneWebXPos
                  + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1)
     + v1->m_uiPlaneWebYPos
     + 2;
  v3 = v1->m_uiPlaneWebWidth - 8;
  v4 = v1->m_uiPlaneWebHeight - 10;
  v1->m_uiWebYPos = v2;
  v1->m_uiWebWidth = v3;
  v1->m_uiWebHeight = v4;
}

//----- (005168A0) --------------------------------------------------------
void __thiscall HelpWin::UpdateWebPos(HelpWin *this)
{
  HelpWin *v1; // esi@1
  tagRECT rect; // [sp+4h] [bp-14h]@3
  unsigned int v3; // [sp+14h] [bp-4h]@1
  int v4; // [sp+18h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  if ( IsWindow(this->m_hWebWindow) )
  {
    if ( v1->m_bOpen )
    {
      HelpWin::ReGenPos(v1);
      GetWindowRect(g_hMainWnd, &rect);
      MoveWindow(
        v1->m_hWebWindow,
        rect.left + v1->m_uiWebXPos,
        rect.top + v1->m_uiWebYPos,
        v1->m_uiWebWidth,
        v1->m_uiWebHeight,
        1);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00516930) --------------------------------------------------------
void __thiscall HelpWin::OnWinClose(HelpWin *this)
{
  HelpWin *v1; // esi@1
  HWND__ *v2; // edi@1
  PgFrameWork *v3; // eax@2
  GameFrameWork *v4; // ecx@4

  v1 = this;
  this->m_bOpen = 0;
  v2 = this->m_hWebWindow;
  if ( GameFrameWork::ms_bSpawnApps == 1 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
      GameFrameWork::DelWebList((GameFrameWork *)v3, v2);
  }
  DestroyWindow(v2);
  v4 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
  v1->m_hWebWindow = 0;
  GameFrameWork::CloseHelpWin(v4);
}
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (00516990) --------------------------------------------------------
void __thiscall HelpWin::UpdateMeWin(HelpWin *this, float fCurTime)
{
  HelpWin::UpdateWebPos(this);
}

//----- (005169A0) --------------------------------------------------------
bool __thiscall HelpWin::LoadURL(HelpWin *this)
{
  int v1; // ebx@1
  HelpWin *v2; // edi@1
  void *v3; // eax@3
  ItemMallInfo *v4; // eax@4
  ItemMallInfo *v5; // esi@4
  bool result; // al@7
  int v7; // edi@9
  int v8; // eax@10
  int v9; // esi@11
  tagItemMallFileData *v10; // eax@13
  int v11; // ecx@13
  int v12; // eax@13
  int v13; // edx@13
  char v14; // cl@14
  int MaxURLNum; // [sp+0h] [bp-124h]@10
  int v16; // [sp+4h] [bp-120h]@12
  int v17; // [sp+8h] [bp-11Ch]@9
  ItemMallInfo *thisa; // [sp+Ch] [bp-118h]@4
  char acPathName[260]; // [sp+10h] [bp-114h]@1
  unsigned int v20; // [sp+114h] [bp-10h]@1
  int v21; // [sp+120h] [bp-4h]@3
  int v22; // [sp+124h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v1 = 0;
  v2 = this;
  memset(acPathName, 0, 0x104u);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sHelpPage.hb");
  v3 = operator new(0x2224u);
  v21 = 0;
  if ( v3 )
  {
    ItemMallInfo::ItemMallInfo((ItemMallInfo *)v3);
    v5 = v4;
    thisa = v4;
  }
  else
  {
    thisa = 0;
    v5 = 0;
  }
  v21 = -1;
  if ( v5 && (ItemMallInfo::LoadFromFile(v5, acPathName), ItemMallInfo::GetTotalURLNum(v5, 1) != -1) )
  {
    v2->m_iTotalChinaLocaleNum = ItemMallInfo::GetTotalLocaleNum(v5);
    v17 = (int)v2->m_acWebUrl;
    v7 = (int)v2->m_acWebUrlNum;
    do
    {
      v8 = ItemMallInfo::GetTotalURLNum(v5, v1);
      MaxURLNum = v8;
      if ( v8 != -1 )
      {
        v9 = 0;
        if ( v8 >= 0 )
        {
          v16 = v17;
          do
          {
            v10 = ItemMallInfo::GetData(thisa, v1, v9);
            *(_DWORD *)(v7 - 12) = v10->LocaleNo;
            v11 = v10->WebURLNo;
            v12 = (int)v10->Path;
            *(_DWORD *)v7 = v11;
            v13 = v16 - v12;
            do
            {
              v14 = *(_BYTE *)v12;
              *(_BYTE *)(v13 + v12) = *(_BYTE *)v12;
              ++v12;
            }
            while ( v14 );
            v16 += 512;
            ++v9;
          }
          while ( v9 <= MaxURLNum );
        }
        v5 = thisa;
      }
      v17 += 1536;
      ++v1;
      v7 += 4;
    }
    while ( v1 < 3 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00516B30) --------------------------------------------------------
bool __thiscall HelpWin::Create(HelpWin *this, PgFrameWork *pkFrameWork)
{
  HelpWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  PgFont *v8; // eax@11
  PgWinText *v9; // edi@11
  NiRefObjectVtbl *v10; // ebx@11
  char *v11; // eax@11
  PgSprData *v12; // edi@13
  unsigned int uiWidth; // [sp+28h] [bp-20h]@10
  unsigned int uiHeight; // [sp+2Ch] [bp-1Ch]@10
  int uiLeft; // [sp+30h] [bp-18h]@4
  int uiTop; // [sp+34h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+38h] [bp-10h]@1
  int v18; // [sp+44h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v18 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\Account\\SpawnAppsNotice.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "HelpWin", 0)
    || !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Title", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v18 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = Font::Get(0);
  v9 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v9,
    1u);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = TextData::Get(0x48AF9599u);
  v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v11);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "WebPage",
         &v2->m_uiPlaneWebXPos,
         &v2->m_uiPlaneWebYPos,
         &v2->m_uiPlaneWebWidth,
         &v2->m_uiPlaneWebHeight) )
  {
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    ((void (__thiscall *)(HelpWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    HelpWin::ReGenPos(v2);
    v2->m_bLoadURL = HelpWin::LoadURL(v2);
    v18 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 1;
  }
  else
  {
    v18 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00516DC0) --------------------------------------------------------
void __thiscall HelpWin::OnCommand(HelpWin *this, unsigned int wParam, int lParam)
{
  if ( wParam == 1 )
    HelpWin::OnWinClose(this);
}

//----- (00516DE0) --------------------------------------------------------
void __thiscall HelpWin::HelpWin(HelpWin *this)
{
  HelpWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HelpWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HelpWin::_vftable_;
  v1->m_kWebAddress.baseclass_0._Mysize = 0;
  v1->m_kWebAddress.baseclass_0._Myres = 15;
  v1->m_kWebAddress.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_bOpen = 0;
  v1->m_bLoadURL = 0;
}
// 9976EC: using guessed type int (__stdcall *HelpWin___vftable_)(int uiFlags);
// 99770C: using guessed type int (__thiscall *HelpWin___vftable_)(void *p, char);

//----- (00516E20) --------------------------------------------------------
void __thiscall HelpWin::_HelpWin(HelpWin *this)
{
  HelpWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HelpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HelpWin::_vftable_;
  if ( this->m_kWebAddress.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kWebAddress.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_kWebAddress.baseclass_0._Myres = 15;
  v1->m_kWebAddress.baseclass_0._Mysize = 0;
  v1->m_kWebAddress.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9976EC: using guessed type int (__stdcall *HelpWin___vftable_)(int uiFlags);
// 99770C: using guessed type int (__thiscall *HelpWin___vftable_)(void *p, char);

//----- (00516E70) --------------------------------------------------------
HelpWin *__cdecl HelpWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  HelpWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x13DCu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &HelpWin::_vftable_;
    *((_DWORD *)v2 + 58) = &HelpWin::_vftable_;
    *((_DWORD *)v2 + 1269) = 15;
    *((_DWORD *)v2 + 1268) = 0;
    *((_BYTE *)v2 + 5056) = 0;
    *((_BYTE *)v2 + 5036) = 0;
    *((_BYTE *)v2 + 4980) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (HelpWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9976EC: using guessed type int (__stdcall *HelpWin___vftable_)(int uiFlags);
// 99770C: using guessed type int (__thiscall *HelpWin___vftable_)(void *p, char);

//----- (00516FD0) --------------------------------------------------------
void __thiscall HelpWin::OnShowWin(HelpWin *this)
{
  HelpWin *v1; // esi@1
  unsigned int v2; // ebx@1
  int v3; // eax@3
  char v4; // cl@4
  int v5; // eax@5
  char v6; // cl@6
  bool v7; // cf@8
  int v8; // ecx@8
  int v9; // edx@8
  int v10; // eax@8
  const char *v11; // eax@9
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // edx@11
  int v13; // ecx@11
  tagRECT kWebRect; // [sp+Ch] [bp-128h]@8
  NiRect<int> kRect; // [sp+1Ch] [bp-118h]@11
  unsigned int uiPosY; // [sp+2Ch] [bp-108h]@11
  char acWebString[256]; // [sp+30h] [bp-104h]@2
  unsigned int v18; // [sp+130h] [bp-4h]@1
  int v19; // [sp+134h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  if ( !this->m_kWebAddress.baseclass_0._Mysize )
  {
    acWebString[0] = 0;
    memset(&acWebString[1], 0, 0xFFu);
    if ( v1->m_bLoadURL )
    {
      v3 = (int)v1->m_acWebUrl[1];
      do
      {
        v4 = *(_BYTE *)v3;
        *(_BYTE *)(acWebString - (char *)v1->m_acWebUrl[1] + v3) = *(_BYTE *)v3;
        ++v3;
      }
      while ( v4 );
      v5 = (int)acWebString;
      do
        v6 = *(_BYTE *)v5++;
      while ( v6 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v1->m_kWebAddress,
        acWebString,
        v5 - (_DWORD)&acWebString[1]);
    }
  }
  v7 = v1->m_kWebAddress.baseclass_0._Myres < 0x10;
  v8 = v1->m_uiWebYPos;
  v9 = v1->m_uiWebWidth;
  kWebRect.left = v1->m_uiWebXPos;
  v10 = v1->m_uiWebHeight;
  kWebRect.top = v8;
  kWebRect.right = v9;
  kWebRect.bottom = v10;
  if ( v7 )
    v11 = (const char *)&v1->m_kWebAddress;
  else
    v11 = *(const char **)&v1->m_kWebAddress.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_hWebWindow = CreateWebWindow(
                       g_hMainWnd,
                       g_hMainInstance,
                       v11,
                       &kWebRect,
                       &v1->baseclass_0.baseclass_0.baseclass_0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(&v1->m_kWebAddress, 0, 0xFFFFFFFFu);
  v12 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
  v1->m_bOpen = 1;
  kRect.m_left = 0;
  kRect.m_right = 0;
  kRect.m_top = 0;
  kRect.m_bottom = 0;
  v12(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    (unsigned int)&kRect);
  v13 = kRect.m_bottom - kRect.m_top;
  uiPosY = 0;
  if ( PgWin::ms_uiScreenWidth >= kRect.m_right - kRect.m_left && PgWin::ms_uiScreenHeight >= v13 )
  {
    v2 = (PgWin::ms_uiScreenWidth - (kRect.m_right - kRect.m_left)) >> 1;
    uiPosY = (PgWin::ms_uiScreenHeight - v13) >> 1;
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
    (NiRefObject *)v1,
    v2);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v1,
    uiPosY);
  SetFocus(g_hMainWnd);
}
// A85C00: using guessed type int __security_cookie;

//----- (00517180) --------------------------------------------------------
void __thiscall HelpWin::SetWebAddress(HelpWin *this, const char *pcAddress)
{
  HelpWin *v2; // edi@1
  char *v3; // eax@3

  v2 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMain, (char *)pcAddress);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2->m_kWebAddress, v3, strlen(v3));
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005171D0) --------------------------------------------------------
void *__thiscall HelpWin::_scalar_deleting_destructor_(HelpWin *this, unsigned int a2)
{
  HelpWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HelpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HelpWin::_vftable_;
  if ( this->m_kWebAddress.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kWebAddress.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_kWebAddress.baseclass_0._Myres = 15;
  v2->m_kWebAddress.baseclass_0._Mysize = 0;
  v2->m_kWebAddress.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9976EC: using guessed type int (__stdcall *HelpWin___vftable_)(int uiFlags);
// 99770C: using guessed type int (__thiscall *HelpWin___vftable_)(void *p, char);

//----- (00517250) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::HolyPromiseAddWin(HolyPromiseAddWin *this)
{
  HolyPromiseAddWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyPromiseAddWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyPromiseAddWin::_vftable_;
  v1->m_pkInputBox = 0;
}
// 997E4C: using guessed type int (__stdcall *HolyPromiseAddWin___vftable_)(int uiFlags);
// 997E6C: using guessed type int (__thiscall *HolyPromiseAddWin___vftable_)(void *p, char);

//----- (00517280) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::_HolyPromiseAddWin(HolyPromiseAddWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyPromiseAddWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyPromiseAddWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 997E4C: using guessed type int (__stdcall *HolyPromiseAddWin___vftable_)(int uiFlags);
// 997E6C: using guessed type int (__thiscall *HolyPromiseAddWin___vftable_)(void *p, char);

//----- (005172A0) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::SetTargetName(HolyPromiseAddWin *this, const char *szName)
{
  if ( szName )
    ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(szName);
}

//----- (005172C0) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::OnClose(HolyPromiseAddWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (005172E0) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::OnShowWin(HolyPromiseAddWin *this)
{
  ((void (*)(void))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (005172F0) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnSortByTitle01(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListLowRankPromise;
  if ( v2 )
  {
    v1->m_nSortColumn = 0;
    SlideListWin::Sort(v2, 0, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListLowRankPromise);
  }
}

//----- (00517320) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnSortByTitle02(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  SlideListWin *v2; // ecx@2

  v1 = this;
  if ( this->m_pkSlideBarPromiseList )
  {
    v2 = this->m_pListLowRankPromise;
    v1->m_nSortColumn = 1;
    SlideListWin::Sort(v2, 1, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListLowRankPromise);
  }
}

//----- (00517360) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnSortByTitle03(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  SlideListWin *v2; // ecx@2

  v1 = this;
  if ( this->m_pkSlideBarPromiseList )
  {
    v2 = this->m_pListLowRankPromise;
    v1->m_nSortColumn = 2;
    SlideListWin::Sort(v2, 2, 0, 1);
    SlideListWin::UpdateViewList(v1->m_pListLowRankPromise);
  }
}

//----- (005173A0) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnSortByTitle04(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  SlideListWin *v2; // ecx@2

  v1 = this;
  if ( this->m_pkSlideBarPromiseList )
  {
    v2 = this->m_pListLowRankPromise;
    v1->m_nSortColumn = 3;
    SlideListWin::Sort(v2, 3, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListLowRankPromise);
  }
}

//----- (005173E0) --------------------------------------------------------
void __thiscall HolyPromiseWin::ClearHolyPromise(HolyPromiseWin *this)
{
  CHolyPromise::ClearMember(&this->m_kCHolyPromise);
}

//----- (005173F0) --------------------------------------------------------
void __thiscall HolyPromiseWin::UpdateMeWin(HolyPromiseWin *this, float fCurTime)
{
  HolyPromiseWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListLowRankPromise, v2->m_pkSlideBarPromiseList);
}

//----- (00517420) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnHelpLink(HolyPromiseWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "HolyPromis");
}

//----- (00517450) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::OnFriendAddCancel(HolyPromiseAddWin *this)
{
  HolyPromiseAddWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_997966);
  GameFrameWork::CloseHolyPromiseAddWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00517480) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnChangeTab(HolyPromiseWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab)
{
  char *v2; // esi@1

  v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      40,
      &eTab,
      v2);
    if ( *((_DWORD *)v2 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(40, &eTab, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 40, &eTab, v2);
}

//----- (005174E0) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnLClick(HolyPromiseWin *this, int nItemIndex)
{
  this->m_bEnableHighPromise = 0;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (00517510) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnRClick(HolyPromiseWin *this, int nItemIndex)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
  PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v2->m_bEnableHighPromise = 0;
}

//----- (00517580) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnHighRankLClick(HolyPromiseWin *this, int nItemIndex)
{
  this->m_bEnableHighPromise = 1;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (005175B0) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnHighRankRClick(HolyPromiseWin *this, int nItemIndex)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
  PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v2->m_bEnableHighPromise = 1;
}

//----- (00517620) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnInviteHighPromise(HolyPromiseWin *this)
{
  GameFrameWork::OpenHolyPromiseAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00517630) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnSendWhisper(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // edi@1
  SlideListWin *v2; // eax@1
  SlideListWin *v3; // ecx@2
  int v4; // eax@4
  SlideListWin *v5; // ecx@5
  Name5 *v6; // esi@9
  GameFrameWork *v7; // ecx@10
  unsigned int *v8; // [sp-8h] [bp-2Ch]@5
  Name5 *dwData; // [sp+4h] [bp-20h]@5
  char acname[21]; // [sp+8h] [bp-1Ch]@10
  unsigned int v11; // [sp+20h] [bp-4h]@1
  int v12; // [sp+24h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pListLowRankPromise;
  if ( v2 )
  {
    v3 = this->m_pkListHighRankPromise;
    if ( v3 )
    {
      if ( v1->m_bEnableHighPromise )
      {
        v4 = SlideListWin::GetCurSelIndex(v3);
        if ( v4 < 0 )
          return;
        v8 = (unsigned int *)&dwData;
        v5 = v1->m_pkListHighRankPromise;
      }
      else
      {
        v4 = SlideListWin::GetCurSelIndex(v2);
        if ( v4 < 0 )
          return;
        v8 = (unsigned int *)&dwData;
        v5 = v1->m_pListLowRankPromise;
      }
      if ( SlideListWin::GetData(v5, v4, v8) )
      {
        v6 = dwData;
        if ( dwData )
        {
          Name5::n_string(dwData, acname);
          *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)&v6->n5_name[0];
          *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)&v6->n5_name[8];
          *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)&v6->n5_name[16];
          v7 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
          acname[20] = 0;
          GameFrameWork::OnWhisperChatStart(v7, acname);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00517700) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnSlideBar(HolyPromiseWin *this)
{
  if ( this->m_pListLowRankPromise )
  {
    this->m_pListLowRankPromise->m_nViewStartPos = this->m_pkSlideBarPromiseList->m_nCurPos;
    SlideListWin::UpdateViewList(this->m_pListLowRankPromise);
  }
}

//----- (00517730) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnTopWin(HolyPromiseWin *this)
{
  GameFrameWork::SetTopHolyPromiseAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00517740) --------------------------------------------------------
bool __thiscall HolyPromiseAddWin::Create(HolyPromiseAddWin *this, PgFrameWork *pkFrameWork)
{
  HolyPromiseAddWin *v2; // esi@1
  PgFrameWork *v3; // edi@1
  NiTexturePalette *v4; // ebx@1
  char *v5; // eax@3
  PgSprData *v6; // eax@4
  NiNode *v7; // esi@5
  NiSourceTexture *v9; // eax@10
  PgSprData *v10; // eax@13
  PgWinSpr *v11; // eax@13
  PgFont *v12; // eax@16
  PgWinText *v13; // edi@16
  NiRefObjectVtbl *v14; // ebx@16
  char *v15; // eax@16
  PgSprData *v16; // edi@16
  NiPointer<PgSprData::PgHitTester> *v17; // ecx@16
  unsigned int v18; // edi@16
  unsigned int v19; // ebx@16
  PgFont *v20; // eax@16
  PgWinText *v21; // edi@16
  NiRefObjectVtbl *v22; // ebx@16
  char *v23; // eax@16
  PgSprData *v24; // edi@16
  NiPointer<PgSprData::PgHitTester> *v25; // ecx@16
  unsigned int v26; // edi@16
  unsigned int v27; // ebx@16
  PgFont *v28; // eax@16
  PgWinText *v29; // edi@16
  NiRefObjectVtbl *v30; // ebx@16
  char *v31; // eax@16
  EditWin *v32; // eax@16
  NiNode *v33; // esi@17
  const char *v34; // [sp+2Ch] [bp-50h]@11
  int *v35; // [sp+30h] [bp-4Ch]@11
  int *v36; // [sp+34h] [bp-48h]@11
  NiSourceTexture *v37; // [sp+38h] [bp-44h]@11
  UIUtil ui; // [sp+4Ch] [bp-30h]@16
  unsigned int uiWidth; // [sp+60h] [bp-1Ch]@15
  unsigned int uiHeight; // [sp+64h] [bp-18h]@15
  int uiLeft; // [sp+68h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+6Ch] [bp-10h]@1
  int v43; // [sp+78h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = pkFrameWork;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v4 = dword_B70448;
  v43 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\AddFriendList.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, (int *)&pkFrameWork, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, v3, "HolyPromiseAddWin", 0) )
    goto LABEL_23;
  v9 = MenuTexMgr::GetTexture(0x13u);
  if ( v9 )
  {
    v37 = v9;
    v36 = (int *)&pkFrameWork;
    v35 = &uiLeft;
    v34 = "Theme";
  }
  else
  {
    v37 = 0;
    v36 = (int *)&pkFrameWork;
    v35 = &uiLeft;
    v34 = "Theme";
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v34, v35, v36, v37);
  v11 = PgWinSpr::CreateWin(
          uiLeft + 2,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 2),
          v10,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  if ( v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v11,
      0);
  if ( !PgUtil::GetTriShapeRect(
          &spNode.m_pObject->baseclass_0,
          "TextBox",
          &uiLeft,
          (int *)&pkFrameWork,
          &uiWidth,
          &uiHeight) )
  {
LABEL_23:
    v7 = spNode.m_pObject;
    v43 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v12 = Font::Get(0);
  v13 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)pkFrameWork - 2),
          uiWidth,
          uiHeight,
          v12,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v13,
    1u);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v13,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v15 = TextData::Get(0xE2E8BBD8u);
  v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, (int *)&pkFrameWork, 0);
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "BtnOver02");
  PgWinBut::CreateWin(uiLeft, (int)pkFrameWork, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v17 = v16->m_akHitTester.m_pBase;
  v18 = v17->m_pObject->m_uiHeight;
  v19 = v17->m_pObject->m_uiWidth;
  v20 = Font::Get(0);
  v21 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v19,
          v18,
          v20,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0xA7FCD9E4u);
  v22[118].__vecDelDtor((NiRefObject *)v21, (unsigned int)v23);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, (int *)&pkFrameWork, 0);
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnOver03");
  PgWinBut::CreateWin(uiLeft, (int)pkFrameWork, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v25 = v24->m_akHitTester.m_pBase;
  v26 = v25->m_pObject->m_uiHeight;
  v27 = v25->m_pObject->m_uiWidth;
  v28 = Font::Get(0);
  v29 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v27,
          v26,
          v28,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v29,
    5u);
  v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = TextData::Get(0x88A297E1u);
  v30[118].__vecDelDtor((NiRefObject *)v29, (unsigned int)v31);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v43) = 1;
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v32 = UIUtil::CreateEdit(&ui, "InputBox", 16, NORMAL, 0, 1);
  v2->m_pkInputBox = v32;
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
    (NiRefObject *)v32,
    (unsigned int)&unk_997943);
  ((void (__stdcall *)(_DWORD))v2->m_pkInputBox->m_spEditWin.m_pObject->baseclass_0.vfptr[15].__vecDelDtor)(0);
  ((void (__thiscall *)(HolyPromiseAddWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v43) = 0;
  UIUtil::_UIUtil(&ui);
  v43 = -1;
  if ( spNode.m_pObject )
  {
    v33 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v33 )
        v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00517B90) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::OnFriendAddOk(HolyPromiseAddWin *this)
{
  HolyPromiseAddWin *v1; // edi@1
  char *v2; // eax@1
  Name5 *v3; // eax@4
  PROTO_NC_HOLY_PROMISE_SET_UP_REQ kProto; // [sp+8h] [bp-54h]@4
  Name5 kNullID; // [sp+30h] [bp-2Ch]@1
  Name5 kCharID; // [sp+44h] [bp-18h]@1
  unsigned int v7; // [sp+58h] [bp-4h]@1
  int v8; // [sp+5Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = (char *)((int (*)(void))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  *(_QWORD *)&kCharID.n5_name[12] = 0i64;
  *(_QWORD *)&kCharID.n5_name[4] = 0i64;
  *(_QWORD *)&kCharID.n5_name[0] = 0i64;
  strncpy(kCharID.n5_name, v2, 0x14u);
  *(_QWORD *)&kNullID.n5_name[12] = 0i64;
  *(_QWORD *)&kNullID.n5_name[4] = 0i64;
  *(_QWORD *)&kNullID.n5_name[0] = 0i64;
  strncpy(kNullID.n5_name, &byte_99795E, 0x14u);
  if ( *(_QWORD *)&kCharID != *(_QWORD *)&kNullID
    || *(_QWORD *)&kCharID.n5_name[8] != *(_QWORD *)&kNullID.n5_name[8]
    || *(_DWORD *)&kCharID.n5_name[16] != *(_DWORD *)&kNullID.n5_name[16] )
  {
    *(_QWORD *)&kProto.CharID.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.CharID.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.CharID.n5_name[0] = 0;
    *(_QWORD *)&kProto.UpCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.UpCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.UpCharID.n5_name[0] = 0;
    v3 = User::GetMainCharID(&g_kUser);
    *(_QWORD *)&kProto.CharID.n5_name[0] = *(_QWORD *)&v3->n5_name[0];
    *(_QWORD *)&kProto.CharID.n5_name[8] = *(_QWORD *)&v3->n5_name[8];
    *(_DWORD *)&kProto.CharID.n5_name[16] = *(_DWORD *)&v3->n5_name[16];
    *(_DWORD *)&kProto.UpCharID.n5_name[0] = *(_DWORD *)&kCharID;
    *(_QWORD *)&kProto.UpCharID.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
    *(_QWORD *)&kProto.UpCharID.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x25u, 1u, &kProto, 40);
  }
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_99795F);
  GameFrameWork::CloseHolyPromiseAddWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}
// A85C00: using guessed type int __security_cookie;

//----- (00517CD0) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::OnCommand(HolyPromiseAddWin *this, unsigned int wParam, int lParam)
{
  HolyPromiseAddWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_997966);
      GameFrameWork::CloseHolyPromiseAddWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  else
  {
    HolyPromiseAddWin::OnFriendAddOk(this);
  }
}

//----- (00517D20) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::OnEditEnd(HolyPromiseAddWin *this, unsigned int wParam, int lParam)
{
  HolyPromiseAddWin::OnFriendAddOk(this);
}

//----- (00517D30) --------------------------------------------------------
void __thiscall HolyPromiseWin::SetHolyPromiseList(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pkData, bool bHighList)
{
  HolyPromiseWin *v3; // esi@1
  int v4; // ecx@8
  int v5; // edx@8
  int v6; // eax@8
  int v7; // ebx@9
  char *v8; // eax@10
  char *v9; // eax@11
  char *v10; // eax@12
  char *v11; // eax@15
  SlideListWin *v12; // ecx@15
  char *v13; // eax@17
  char *v14; // eax@18
  char *v15; // eax@19
  char *v16; // eax@22
  char dest[4]; // [sp+8h] [bp-30h]@3
  int v18; // [sp+Ch] [bp-2Ch]@3
  int v19; // [sp+10h] [bp-28h]@3
  int v20; // [sp+14h] [bp-24h]@3
  int v21; // [sp+18h] [bp-20h]@3
  char acname[21]; // [sp+1Ch] [bp-1Ch]@8
  unsigned int v23; // [sp+34h] [bp-4h]@1
  int v24; // [sp+38h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v3 = this;
  if ( pkData )
  {
    if ( this->m_pListLowRankPromise )
    {
      v21 = 0;
      v20 = 0;
      v19 = 0;
      v18 = 0;
      *(_DWORD *)dest = 0;
      strncpy(dest, &byte_997981, 0x14u);
      if ( *(_DWORD *)&pkData->PromiseCharID.n5_name[0] != *(_DWORD *)dest
        || *(_DWORD *)&pkData->PromiseCharID.n5_name[4] != v18
        || *(_DWORD *)&pkData->PromiseCharID.n5_name[8] != v19
        || *(_DWORD *)&pkData->PromiseCharID.n5_name[12] != v20
        || *(_DWORD *)&pkData->PromiseCharID.n5_name[16] != v21 )
      {
        v4 = *(_DWORD *)&pkData->PromiseCharID.n5_name[8];
        v5 = *(_DWORD *)&pkData->PromiseCharID.n5_name[12];
        *(_QWORD *)acname = *(_QWORD *)&pkData->PromiseCharID.n5_name[0];
        v6 = *(_DWORD *)&pkData->PromiseCharID.n5_name[16];
        *(_DWORD *)&acname[8] = v4;
        *(_DWORD *)&acname[12] = v5;
        *(_DWORD *)&acname[16] = v6;
        acname[20] = 0;
        if ( bHighList )
        {
          v7 = SlideListWin::AddText(v3->m_pkListHighRankPromise, acname);
          if ( pkData->LogonInfo._bf0 & 1 )
          {
            v8 = TextData::Get(0x95F9F1F2u);
            SlideListWin::SetText(v3->m_pkListHighRankPromise, v7, 1u, v8);
            SlideListWin::SetText(v3->m_pkListHighRankPromise, v7, 3u, &byte_997982);
            SlideListWin::SetFontColor(v3->m_pkListHighRankPromise, v7, 255, 255, 0);
          }
          else
          {
            v9 = TextData::Get(0xF6FF3844u);
            SlideListWin::SetText(v3->m_pkListHighRankPromise, v7, 1u, v9);
            SlideListWin::SetFontColor(v3->m_pkListHighRankPromise, v7, 200, 200, 200);
            if ( pkData->LogonInfo._bf0 & 0xFFE )
              v10 = fs("%d-%d-%d");
            else
              v10 = TextData::Get(0xDA01413Eu);
            SlideListWin::SetText(v3->m_pkListHighRankPromise, v7, 3u, v10);
          }
          v11 = fs("%d");
          SlideListWin::SetText(v3->m_pkListHighRankPromise, v7, 2u, v11);
          SlideListWin::SetData(v3->m_pkListHighRankPromise, v7, (unsigned int)pkData);
          v12 = v3->m_pkListHighRankPromise;
        }
        else
        {
          v7 = SlideListWin::AddText(v3->m_pListLowRankPromise, acname);
          if ( pkData->LogonInfo._bf0 & 1 )
          {
            v13 = TextData::Get(0x95F9F1F2u);
            SlideListWin::SetText(v3->m_pListLowRankPromise, v7, 1u, v13);
            SlideListWin::SetText(v3->m_pListLowRankPromise, v7, 3u, &byte_997983);
            SlideListWin::SetFontColor(v3->m_pListLowRankPromise, v7, 255, 255, 0);
          }
          else
          {
            v14 = TextData::Get(0xF6FF3844u);
            SlideListWin::SetText(v3->m_pListLowRankPromise, v7, 1u, v14);
            SlideListWin::SetFontColor(v3->m_pListLowRankPromise, v7, 200, 200, 200);
            if ( pkData->LogonInfo._bf0 & 0xFFE )
              v15 = fs("%d-%d-%d");
            else
              v15 = TextData::Get(0xDA01413Eu);
            SlideListWin::SetText(v3->m_pListLowRankPromise, v7, 3u, v15);
          }
          v16 = fs("%d");
          SlideListWin::SetText(v3->m_pListLowRankPromise, v7, 2u, v16);
          SlideListWin::SetData(v3->m_pListLowRankPromise, v7, (unsigned int)pkData);
          v12 = v3->m_pListLowRankPromise;
        }
        SlideListWin::SetFontSize(v12, v7, 1);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00518040) --------------------------------------------------------
void __thiscall HolyPromiseWin::CheckDay(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pdata, bool bHigh)
{
  HolyPromiseWin *v3; // esi@1
  unsigned int v4; // edx@2
  unsigned int v5; // eax@2
  unsigned int v6; // ecx@2
  char *v7; // eax@3
  char *v8; // eax@3
  MsgBox *v9; // eax@3
  int v10; // edx@4
  char *v11; // eax@7
  char *v12; // eax@7
  MsgBox *v13; // eax@7
  int v14; // edx@8
  unsigned int v15; // edx@13
  unsigned int v16; // eax@13
  unsigned __int16 v17; // [sp-Ch] [bp-30h]@12
  void *v18; // [sp-8h] [bp-2Ch]@12
  int v19; // [sp-4h] [bp-28h]@12
  PROTO_NC_HOLY_PROMISE_DEL_DOWN_REQ kProto; // [sp+8h] [bp-1Ch]@2
  char v21; // [sp+1Ch] [bp-8h]@2
  unsigned int v22; // [sp+20h] [bp-4h]@1
  int v23; // [sp+24h] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = this;
  if ( CHolyPromise::IsDelPenlety(&this->m_kCHolyPromise, &pdata->LogonInfo) )
  {
    v4 = *(_DWORD *)&pdata->PromiseCharID.n5_name[4];
    v5 = *(_DWORD *)&pdata->PromiseCharID.n5_name[8];
    *(_DWORD *)&kProto.DownCharID.n5_name[0] = *(_DWORD *)&pdata->PromiseCharID.n5_name[0];
    v6 = *(_DWORD *)&pdata->PromiseCharID.n5_name[12];
    *(_QWORD *)&kProto.DownCharID.n5_name[4] = __PAIR__(v5, v4);
    *(_QWORD *)&kProto.DownCharID.n5_name[12] = __PAIR__(*(_DWORD *)&pdata->PromiseCharID.n5_name[16], v6);
    v21 = 0;
    if ( bHigh )
    {
      v7 = TextData::Get(0x9DF3B9E1u);
      v8 = fs(v7);
      v9 = MsgBox::Modeless(MSGBOX_OKCANCEL, v8);
      if ( v3 )
        v10 = (int)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      else
        v10 = 0;
      ((void (__stdcall *)(int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v10);
      v3->m_bDelHigh = 1;
    }
    else
    {
      v11 = TextData::Get(0x8FC3BDEDu);
      v12 = fs(v11);
      v13 = MsgBox::Modeless(MSGBOX_OKCANCEL, v12);
      if ( v3 )
        v14 = (int)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      else
        v14 = 0;
      ((void (__stdcall *)(int))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v14);
      *(_QWORD *)&v3->m_kDelLowCharID.n5_name[0] = *(_QWORD *)&pdata->PromiseCharID.n5_name[0];
      *(_QWORD *)&v3->m_kDelLowCharID.n5_name[8] = *(_QWORD *)&pdata->PromiseCharID.n5_name[8];
      *(_DWORD *)&v3->m_kDelLowCharID.n5_name[16] = *(_DWORD *)&pdata->PromiseCharID.n5_name[16];
      v3->m_bDelLow = 1;
    }
  }
  else
  {
    if ( bHigh )
    {
      v19 = 0;
      v18 = 0;
      v17 = 6;
    }
    else
    {
      v15 = *(_DWORD *)&pdata->PromiseCharID.n5_name[0];
      v16 = *(_DWORD *)&pdata->PromiseCharID.n5_name[4];
      *(_DWORD *)&kProto.DownCharID.n5_name[8] = *(_DWORD *)&pdata->PromiseCharID.n5_name[8];
      v19 = 20;
      *(_QWORD *)&kProto.DownCharID.n5_name[0] = __PAIR__(v16, v15);
      v18 = &kProto;
      *(_QWORD *)&kProto.DownCharID.n5_name[12] = *(_QWORD *)&pdata->PromiseCharID.n5_name[12];
      v17 = 10;
    }
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x25u, v17, v18, v19);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005181C0) --------------------------------------------------------
void __thiscall HolyPromiseAddWin::UpdateMeWin(HolyPromiseAddWin *this, float fCurTime)
{
  HolyPromiseAddWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00518220) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnRemovalPromise(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  int v3; // eax@4
  int v4; // eax@8
  PROTO_HOLY_PROMISE_INFO *dwData; // [sp+4h] [bp-4h]@5

  v1 = this;
  v2 = this->m_pListLowRankPromise;
  if ( v2 && v1->m_pkListHighRankPromise )
  {
    if ( v1->m_bEnableHighPromise )
    {
      v4 = SlideListWin::GetCurSelIndex(v1->m_pkListHighRankPromise);
      if ( v4 >= 0 && SlideListWin::GetData(v1->m_pkListHighRankPromise, v4, (unsigned int *)&dwData) && dwData )
        HolyPromiseWin::CheckDay(v1, dwData, 1);
    }
    else
    {
      v3 = SlideListWin::GetCurSelIndex(v2);
      if ( v3 >= 0 && SlideListWin::GetData(v1->m_pListLowRankPromise, v3, (unsigned int *)&dwData) )
      {
        if ( dwData )
          HolyPromiseWin::CheckDay(v1, dwData, 0);
      }
    }
  }
}

//----- (005182B0) --------------------------------------------------------
void __thiscall HolyPromiseWin::UpdateViewList(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  int v2; // edi@1
  SlideListWin *v3; // ecx@2
  int v4; // ebx@4
  int v5; // edx@12
  int v6; // ecx@12
  int v7; // edx@12
  SlideListWin *v8; // ecx@12
  int v9; // edi@12
  char *v10; // eax@13
  char *v11; // eax@14
  char *v12; // eax@15
  char *v13; // eax@18
  int i; // [sp+8h] [bp-34h]@3
  char dest[4]; // [sp+Ch] [bp-30h]@7
  int v16; // [sp+10h] [bp-2Ch]@7
  int v17; // [sp+14h] [bp-28h]@7
  int v18; // [sp+18h] [bp-24h]@7
  int v19; // [sp+1Ch] [bp-20h]@7
  char szText[4]; // [sp+20h] [bp-1Ch]@12
  int v21; // [sp+24h] [bp-18h]@12
  int v22; // [sp+28h] [bp-14h]@12
  int v23; // [sp+2Ch] [bp-10h]@12
  int v24; // [sp+30h] [bp-Ch]@12
  char v25; // [sp+34h] [bp-8h]@12
  unsigned int v26; // [sp+38h] [bp-4h]@1
  int v27; // [sp+3Ch] [bp+0h]@1

  v26 = (unsigned int)&v27 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  if ( this->m_pListLowRankPromise )
  {
    v3 = this->m_pkListHighRankPromise;
    if ( v3 )
    {
      SlideListWin::RemoveAllList(v3);
      SlideListWin::RemoveAllList(v1->m_pListLowRankPromise);
      HolyPromiseWin::SetHolyPromiseList(v1, &v1->m_kCHolyPromise.m_HolyPromisesUp, 1);
      SlideListWin::UpdateViewList(v1->m_pkListHighRankPromise);
      i = 0;
      if ( v1->m_kCHolyPromise.m_HolyPromisesMemberCount > 0 )
      {
        v4 = (int)&v1->m_kCHolyPromise.m_HolyPromisesMember[0].PromiseCharID.n5_name[8];
        do
        {
          if ( v4 - 8 != v2 )
          {
            if ( v1->m_pListLowRankPromise != (SlideListWin *)v2 )
            {
              v19 = v2;
              v18 = v2;
              v17 = v2;
              v16 = v2;
              *(_DWORD *)dest = v2;
              strncpy(dest, &byte_997981, 0x14u);
              if ( *(_DWORD *)(v4 - 8) != *(_DWORD *)dest
                || *(_DWORD *)(v4 - 4) != v16
                || *(_DWORD *)v4 != v17
                || *(_DWORD *)(v4 + 4) != v18
                || *(_DWORD *)(v4 + 8) != v19 )
              {
                v5 = *(_DWORD *)(v4 - 4);
                v6 = *(_DWORD *)(v4 + 4);
                *(_DWORD *)szText = *(_DWORD *)(v4 - 8);
                v22 = *(_DWORD *)v4;
                v21 = v5;
                v7 = *(_DWORD *)(v4 + 8);
                v23 = v6;
                v8 = v1->m_pListLowRankPromise;
                v24 = v7;
                v25 = 0;
                v9 = SlideListWin::AddText(v8, szText);
                if ( *(_BYTE *)(v4 + 12) & 1 )
                {
                  v10 = TextData::Get(0x95F9F1F2u);
                  SlideListWin::SetText(v1->m_pListLowRankPromise, v9, 1u, v10);
                  SlideListWin::SetText(v1->m_pListLowRankPromise, v9, 3u, &byte_997983);
                  SlideListWin::SetFontColor(v1->m_pListLowRankPromise, v9, 255, 255, 0);
                }
                else
                {
                  v11 = TextData::Get(0xF6FF3844u);
                  SlideListWin::SetText(v1->m_pListLowRankPromise, v9, 1u, v11);
                  SlideListWin::SetFontColor(v1->m_pListLowRankPromise, v9, 200, 200, 200);
                  if ( *(_DWORD *)(v4 + 12) & 0xFFE )
                    v12 = fs("%d-%d-%d");
                  else
                    v12 = TextData::Get(0xDA01413Eu);
                  SlideListWin::SetText(v1->m_pListLowRankPromise, v9, 3u, v12);
                }
                v13 = fs("%d");
                SlideListWin::SetText(v1->m_pListLowRankPromise, v9, 2u, v13);
                SlideListWin::SetData(v1->m_pListLowRankPromise, v9, v4 - 8);
                SlideListWin::SetFontSize(v1->m_pListLowRankPromise, v9, 1);
                v2 = 0;
              }
            }
          }
          v4 += 26;
          ++i;
        }
        while ( i < v1->m_kCHolyPromise.m_HolyPromisesMemberCount );
      }
      SlideListWin::Sort(v1->m_pListLowRankPromise, v1->m_nSortColumn, v2, v2);
      SlideListWin::UpdateViewList(v1->m_pListLowRankPromise);
      SlideBar::SetSplitCnt(v1->m_pkSlideBarPromiseList, v1->m_pListLowRankPromise->m_nSlideSplitCnt);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00518530) --------------------------------------------------------
void __thiscall HolyPromiseWin::ChangeUserName(HolyPromiseWin *this, Name5 *OldName, Name5 *NewName)
{
  HolyPromiseWin *v3; // esi@1
  PROTO_HOLY_PROMISE_INFO *v4; // eax@1
  int Index; // [sp+4h] [bp-4h]@1

  v3 = this;
  Index = 0;
  v4 = CHolyPromise::Get(&this->m_kCHolyPromise, OldName, &Index);
  if ( v4 )
  {
    *(_QWORD *)&v4->PromiseCharID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v4->PromiseCharID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v4->PromiseCharID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
    HolyPromiseWin::UpdateViewList(v3);
  }
}

//----- (00518590) --------------------------------------------------------
void __thiscall HolyPromiseWin::OnCommand(HolyPromiseWin *this, unsigned int wParam, int lParam)
{
  HolyPromiseWin *v3; // esi@1

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      HolyPromiseWin::OnLClick(this, lParam);
      break;
    case 1u:
      HolyPromiseWin::OnRClick(this, lParam);
      break;
    case 2u:
      HolyPromiseWin::OnHighRankLClick(this, lParam);
      break;
    case 3u:
      HolyPromiseWin::OnHighRankRClick(this, lParam);
      break;
    case 4u:
      if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
        ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      GameFrameWork::CloseCommunityWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      break;
    case 5u:
      HolyPromiseWin::OnSortByTitle01(this);
      break;
    case 6u:
      HolyPromiseWin::OnSortByTitle02(this);
      break;
    case 7u:
      HolyPromiseWin::OnSortByTitle03(this);
      break;
    case 8u:
      HolyPromiseWin::OnSortByTitle04(this);
      break;
    case 0xAu:
      HolyPromiseWin::OnChangeTab(this, 0);
      break;
    case 0xBu:
      HolyPromiseWin::OnChangeTab(this, TE_GUILD);
      break;
    case 0xDu:
      HolyPromiseWin::OnChangeTab(this, TE_WEDDING);
      break;
    case 0xEu:
      HolyPromiseWin::OnChangeTab(this, TE_PARTYMATCH);
      break;
    case 0xCu:
      HolyPromiseWin::OnChangeTab(this, TE_GUILDACADEMY);
      break;
    case 0x10u:
      GameFrameWork::OpenHolyPromiseAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0x11u:
      HolyPromiseWin::OnSendWhisper(this);
      break;
    case 0x12u:
      HolyPromiseWin::OnRemovalPromise(this);
      break;
    case 0x13u:
      HolyPromiseWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005186F0) --------------------------------------------------------
void __thiscall HolyPromiseWin::SetHignHolyPromise(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pkInfo)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  CHolyPromise::SetUp(&this->m_kCHolyPromise, pkInfo);
  HolyPromiseWin::UpdateViewList(v2);
}

//----- (00518720) --------------------------------------------------------
void __thiscall HolyPromiseWin::DelHolyPromise(HolyPromiseWin *this, Name5 CharID)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  CHolyPromise::Del(&this->m_kCHolyPromise, &CharID);
  HolyPromiseWin::UpdateViewList(v2);
}

//----- (00518750) --------------------------------------------------------
void __thiscall HolyPromiseWin::DelUpHolyPromise(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1

  v1 = this;
  CHolyPromise::DelUp(&this->m_kCHolyPromise);
  HolyPromiseWin::UpdateViewList(v1);
}

//----- (00518770) --------------------------------------------------------
void __thiscall HolyPromiseWin::AddHolyPromiseList(HolyPromiseWin *this, PROTO_NC_HOLY_PROMISE_LIST_CMD *pInfo)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  CHolyPromise::Add(&this->m_kCHolyPromise, pInfo);
  HolyPromiseWin::UpdateViewList(v2);
}

//----- (005187A0) --------------------------------------------------------
void __thiscall HolyPromiseWin::AddPromise(HolyPromiseWin *this, PROTO_HOLY_PROMISE_INFO *pkInfo)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  CHolyPromise::Add(&this->m_kCHolyPromise, pkInfo);
  HolyPromiseWin::UpdateViewList(v2);
}

//----- (005187D0) --------------------------------------------------------
void __thiscall HolyPromiseWin::SetLogin(HolyPromiseWin *this, Name5 *pCharID)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  CHolyPromise::Login(&this->m_kCHolyPromise, pCharID);
  HolyPromiseWin::UpdateViewList(v2);
}

//----- (00518800) --------------------------------------------------------
void __thiscall HolyPromiseWin::SetLogOut(HolyPromiseWin *this, Name5 *pCharID)
{
  HolyPromiseWin *v2; // esi@1

  v2 = this;
  CHolyPromise::Logout(&this->m_kCHolyPromise, pCharID);
  HolyPromiseWin::UpdateViewList(v2);
}

//----- (00518830) --------------------------------------------------------
void __thiscall HolyPromiseWin::SetLevelChange(HolyPromiseWin *this, Name5 *pCharID, char Level)
{
  HolyPromiseWin *v3; // esi@1

  v3 = this;
  CHolyPromise::LevelChange(&this->m_kCHolyPromise, pCharID, Level);
  HolyPromiseWin::UpdateViewList(v3);
}

//----- (00518860) --------------------------------------------------------
HolyPromiseAddWin *__cdecl HolyPromiseAddWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  HolyPromiseAddWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &HolyPromiseAddWin::_vftable_;
    *((_DWORD *)v2 + 58) = &HolyPromiseAddWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (HolyPromiseAddWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 997E4C: using guessed type int (__stdcall *HolyPromiseAddWin___vftable_)(int uiFlags);
// 997E6C: using guessed type int (__thiscall *HolyPromiseAddWin___vftable_)(void *p, char);

//----- (005189A0) --------------------------------------------------------
void __thiscall HolyPromiseWin::DirectMessage(HolyPromiseWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  HolyPromiseWin *v4; // esi@1
  int v5; // edx@12
  int v6; // ecx@12
  int v7; // eax@12
  int v8; // ecx@12
  int v9; // eax@12
  int v10; // eax@14
  int v11; // edx@14
  unsigned int v12; // ecx@14
  unsigned int v13; // eax@14
  unsigned int v14; // eax@14
  int v15; // edx@18
  int v16; // ecx@18
  unsigned int v17; // eax@18
  unsigned int v18; // edx@18
  unsigned int v19; // edx@18
  void *v20; // [sp-Ch] [bp-5Ch]@14
  int v21; // [sp-8h] [bp-58h]@14
  unsigned int result; // [sp+4h] [bp-4Ch]@14
  unsigned int iter; // [sp+8h] [bp-48h]@14
  int pProto; // [sp+Ch] [bp-44h]@12
  int v25; // [sp+10h] [bp-40h]@12
  int v26; // [sp+14h] [bp-3Ch]@12
  int v27; // [sp+18h] [bp-38h]@12
  int v28; // [sp+1Ch] [bp-34h]@12
  PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK kProto; // [sp+20h] [bp-30h]@14
  unsigned int v30; // [sp+4Ch] [bp-4h]@1
  int v31; // [sp+50h] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 27 )
  {
    if ( !pvBody )
      return;
    if ( *(_DWORD *)pvBody )
    {
      if ( *(_DWORD *)pvBody != 1 )
        return;
      if ( this->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[11] )
      {
LABEL_10:
        v4->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[11] = 0;
        return;
      }
      if ( this->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[12] )
      {
LABEL_13:
        v4->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[12] = 0;
        return;
      }
      PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK::PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK(&kProto);
      v15 = *(int *)((char *)&v4->m_kCHolyPromise.m_HolyPromisesMember[11].LogonInfo._bf0 + 2);
      v16 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[4];
      *(_DWORD *)&kProto.UpCharID.n5_name[4] = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[0];
      v17 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[12];
      *(_DWORD *)&kProto.UpCharID.n5_name[0] = v15;
      v18 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[8];
      *(_DWORD *)&kProto.UpCharID.n5_name[8] = v16;
      *(_QWORD *)&kProto.UpCharID.n5_name[12] = __PAIR__(v17, v18);
      v19 = pkFrom->m_uiMessageNum;
      kProto.bAccept = 0;
      iter = v19;
      std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::find(
        (std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *)&v4->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[18],
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)&result,
        &iter);
      *(_QWORD *)&kProto.CharID.n5_name[0] = *(_QWORD *)(result + 16);
      *(_QWORD *)&kProto.CharID.n5_name[8] = *(_QWORD *)(result + 24);
      v21 = 41;
      *(_DWORD *)&kProto.CharID.n5_name[16] = *(_DWORD *)(result + 32);
      v20 = &kProto;
    }
    else
    {
      if ( this->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[11] )
      {
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x25u, 6u, 0, 0);
        goto LABEL_10;
      }
      if ( this->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[12] )
      {
        v5 = *(_DWORD *)&this->m_kCHolyPromise.m_HolyPromisesMember[12].Level;
        v6 = this->m_kCHolyPromise.m_HolyPromisesMember[12].LogonInfo._bf0;
        v7 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[16];
        v26 = v5;
        v25 = v6;
        v8 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[6];
        pProto = v7;
        v9 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[2];
        v28 = v8;
        v27 = v9;
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x25u, 0xAu, &pProto, 20);
        goto LABEL_13;
      }
      PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK::PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK(&kProto);
      v10 = *(int *)((char *)&v4->m_kCHolyPromise.m_HolyPromisesMember[11].LogonInfo._bf0 + 2);
      v11 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[4];
      *(_DWORD *)&kProto.UpCharID.n5_name[4] = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[0];
      v12 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[12];
      *(_DWORD *)&kProto.UpCharID.n5_name[0] = v10;
      v13 = *(_DWORD *)&v4->m_kCHolyPromise.m_HolyPromisesMember[12].PromiseCharID.n5_name[8];
      *(_DWORD *)&kProto.UpCharID.n5_name[8] = v11;
      *(_QWORD *)&kProto.UpCharID.n5_name[12] = __PAIR__(v12, v13);
      v14 = pkFrom->m_uiMessageNum;
      kProto.bAccept = 1;
      result = v14;
      std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::find(
        (std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *)&v4->m_kCHolyPromise.m_HolyPromisesMember[13].PromiseCharID.n5_name[18],
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)&iter,
        &result);
      *(_QWORD *)&kProto.CharID.n5_name[0] = *(_QWORD *)(iter + 16);
      *(_QWORD *)&kProto.CharID.n5_name[8] = *(_QWORD *)(iter + 24);
      v21 = 41;
      *(_DWORD *)&kProto.CharID.n5_name[16] = *(_DWORD *)(iter + 32);
      v20 = &kProto;
    }
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x25u, 5u, v20, v21);
    return;
  }
  if ( iMsgTag == 69 )
  {
    HolyPromiseWin::OnSendWhisper((HolyPromiseWin *)((char *)this - 232));
  }
  else
  {
    if ( iMsgTag == 70 )
      HolyPromiseWin::OnRemovalPromise((HolyPromiseWin *)((char *)this - 232));
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00518BF0) --------------------------------------------------------
void __thiscall HolyPromiseWin::SetID(HolyPromiseWin *this, Name5 RequestID, Name5 HighID)
{
  HolyPromiseWin *v3; // esi@1
  unsigned int v4; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v5; // eax@1
  std::pair<unsigned int const ,Name5> _Val; // [sp+Ch] [bp-20h]@1
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >,bool> result; // [sp+24h] [bp-8h]@1

  v3 = this;
  *(_DWORD *)&this->m_kRequestCharID.n5_name[16] = *(_DWORD *)&RequestID.n5_name[16];
  *(_QWORD *)&this->m_kRequestCharID.n5_name[0] = *(_QWORD *)&RequestID;
  *(_QWORD *)&this->m_kRequestCharID.n5_name[8] = *(_QWORD *)&RequestID.n5_name[8];
  *(_DWORD *)&this->m_kHighCharID.n5_name[0] = *(_DWORD *)&HighID;
  *(_QWORD *)&this->m_kHighCharID.n5_name[4] = *(_QWORD *)&HighID.n5_name[4];
  *(_DWORD *)&this->m_kHighCharID.n5_name[12] = *(_DWORD *)&HighID.n5_name[12];
  *(_DWORD *)&_Val.baseclass_0.second.n5_name[4] = *(_DWORD *)&RequestID.n5_name[4];
  *(_DWORD *)&this->m_kHighCharID.n5_name[16] = *(_DWORD *)&HighID.n5_name[16];
  v4 = this->m_uiCharNum;
  *(_DWORD *)&_Val.baseclass_0.second.n5_name[0] = *(_DWORD *)&RequestID;
  _Val.baseclass_0.first = v4;
  *(_QWORD *)&_Val.baseclass_0.second.n5_name[8] = *(_QWORD *)&RequestID.n5_name[8];
  *(_DWORD *)&_Val.baseclass_0.second.n5_name[16] = *(_DWORD *)&RequestID.n5_name[16];
  v5 = std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Buynode<std::pair<unsigned_int_const_Name5>>(
         &this->m_kCharNameIndex.baseclass_0.baseclass_0,
         &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Linsert(
    &v3->m_kCharNameIndex.baseclass_0,
    &result,
    v5,
    0);
  ++v3->m_uiCharNum;
}

//----- (00518CA0) --------------------------------------------------------
void __thiscall HolyPromiseWin::Terminate(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v2; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v3; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > result; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >)v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
      v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)&std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::erase(&v1->m_kCharNameIndex.baseclass_0, &result, v3)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v3 != v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::clear(&v1->m_kCharNameIndex.baseclass_0);
  v1->m_uiCharNum = 0;
}

//----- (00518CF0) --------------------------------------------------------
void __thiscall HolyPromiseWin::_HolyPromiseWin(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  char *v2; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v4; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > result; // [sp+0h] [bp-18h]@1
  std::map<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> > > *v6; // [sp+4h] [bp-14h]@1
  HolyPromiseWin *v7; // [sp+8h] [bp-10h]@1
  int v8; // [sp+14h] [bp-4h]@1

  v1 = this;
  v7 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyPromiseWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyPromiseWin::_vftable_;
  v8 = 0;
  v2 = (char *)&this->m_kCharNameIndex;
  v6 = &this->m_kCharNameIndex;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >)this->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >)**(_DWORD **)&v3;
  LOBYTE(v8) = 2;
  std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::erase(
    &this->m_kCharNameIndex.baseclass_0,
    &result,
    v4,
    v3);
  operator delete(*((void **)v2 + 1));
  LOBYTE(v8) = 0;
  CHolyPromise::_CHolyPromise(&v1->m_kCHolyPromise);
  v8 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 998090: using guessed type int (__stdcall *HolyPromiseWin___vftable_)(int uiFlags);
// 9980AC: using guessed type int (__thiscall *HolyPromiseWin___vftable_)(void *p, char);

//----- (00518D90) --------------------------------------------------------
void __thiscall HolyPromiseWin::HolyPromiseWin(HolyPromiseWin *this)
{
  HolyPromiseWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  HolyPromiseWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v6 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyPromiseWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyPromiseWin::_vftable_;
  CHolyPromise::CHolyPromise(&v1->m_kCHolyPromise);
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[0] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[0] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[0] = 0;
  LOBYTE(v6) = 1;
  v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x28u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_kCharNameIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_pkName = 0;
  v1->m_pkLogInfo = 0;
  v1->m_pkLevel = 0;
  v1->m_LastConnect = 0;
  v1->m_spPopupMenu = 0;
  v1->m_pkListHighRankPromise = 0;
  v1->m_pListLowRankPromise = 0;
  v1->m_pkSlideBarPromiseList = 0;
  v1->m_nSortColumn = 0;
  v1->m_bEnableHighPromise = 0;
  memset(v1->m_kCHolyPromise.m_HolyPromisesUp.PromiseCharID.n5_name, 0, 0x228u);
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kRequestCharID.n5_name[0] = 0;
  strncpy(v1->m_kRequestCharID.n5_name, &byte_997967, 0x14u);
  *(_DWORD *)&v1->m_kHighCharID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kHighCharID.n5_name[0] = 0;
  strncpy(v1->m_kHighCharID.n5_name, &byte_99796E, 0x14u);
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kDelLowCharID.n5_name[0] = 0;
  strncpy(v1->m_kDelLowCharID.n5_name, &byte_99796F, 0x14u);
  *(_WORD *)&v1->m_bDelHigh = 0;
  v1->m_uiCharNum = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 998090: using guessed type int (__stdcall *HolyPromiseWin___vftable_)(int uiFlags);
// 9980AC: using guessed type int (__thiscall *HolyPromiseWin___vftable_)(void *p, char);

//----- (00518F80) --------------------------------------------------------
HolyPromiseWin *__cdecl HolyPromiseWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  HolyPromiseWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x3F8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    HolyPromiseWin::HolyPromiseWin((HolyPromiseWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (HolyPromiseWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005190B0) --------------------------------------------------------
bool __thiscall HolyPromiseWin::Create(HolyPromiseWin *this, PgFrameWork *pkFrameWork)
{
  HolyPromiseWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@14
  PgFont *v13; // eax@17
  PgWinText *v14; // eax@17
  NiRefObjectVtbl *v15; // edx@17
  char *v16; // eax@17
  PgSprData *v17; // eax@19
  PgSprData *v18; // eax@19
  PgFont *v19; // eax@19
  PgWinText *v20; // eax@19
  NiRefObjectVtbl *v21; // edx@19
  char *v22; // eax@19
  PgFont *v23; // eax@19
  PgWinText *v24; // eax@19
  NiRefObjectVtbl *v25; // edx@19
  char *v26; // eax@19
  PgFont *v27; // eax@19
  PgWinText *v28; // eax@19
  NiRefObjectVtbl *v29; // edx@19
  char *v30; // eax@19
  SLWCreateInfo::Item *v31; // eax@19
  unsigned int v32; // eax@27
  PgSprData *v33; // eax@33
  SlideListWin *v34; // eax@33
  PgSprData *v35; // eax@33
  PgFont *v36; // eax@33
  PgWinText *v37; // eax@33
  NiRefObjectVtbl *v38; // edx@33
  char *v39; // eax@33
  SLWCreateInfo::Item *v40; // eax@33
  unsigned int v41; // eax@41
  PgSprData *v42; // eax@47
  SlideListWin *v43; // eax@47
  PgSprData *v44; // eax@47
  SlideBar *v45; // eax@47
  int v46; // eax@47
  void *v47; // edx@47
  PgFont *v48; // eax@47
  PgWinText *v49; // eax@47
  NiRefObjectVtbl *v50; // edx@47
  char *v51; // eax@47
  unsigned int v52; // ecx@47
  void *v53; // eax@47
  PgFont *v54; // eax@47
  PgWinText *v55; // eax@47
  NiRefObjectVtbl *v56; // edx@47
  char *v57; // eax@47
  unsigned int v58; // ecx@47
  void *v59; // eax@47
  PgFont *v60; // eax@47
  PgWinText *v61; // eax@47
  NiRefObjectVtbl *v62; // edx@47
  char *v63; // eax@47
  unsigned int v64; // ecx@47
  void *v65; // eax@47
  PgFont *v66; // eax@47
  PgWinText *v67; // eax@47
  NiRefObjectVtbl *v68; // edx@47
  char *v69; // eax@47
  char *v70; // eax@47
  int v71; // eax@47
  void *v72; // edx@47
  PgFont *v73; // eax@47
  PgWinText *v74; // eax@47
  NiRefObjectVtbl *v75; // edx@47
  char *v76; // eax@47
  unsigned int v77; // ecx@47
  void *v78; // eax@47
  PgFont *v79; // eax@47
  PgWinText *v80; // eax@47
  NiRefObjectVtbl *v81; // edx@47
  char *v82; // eax@47
  char *v83; // eax@47
  int v84; // eax@47
  void *v85; // edx@47
  PgFont *v86; // eax@47
  PgWinText *v87; // eax@47
  NiRefObjectVtbl *v88; // edx@47
  char *v89; // eax@47
  PgSprData *v90; // eax@47
  char *v91; // eax@47
  char *v92; // eax@47
  char *v93; // eax@47
  char *v94; // eax@47
  char *v95; // eax@47
  PgWinBut *v96; // edi@47
  char *v97; // eax@47
  NiPointer<PgSprData::PgHitTester> *v98; // ecx@47
  unsigned int v99; // edi@47
  unsigned int v100; // ebx@47
  PgFont *v101; // eax@47
  PgWinText *v102; // edi@47
  NiRefObjectVtbl *v103; // ebx@47
  char *v104; // eax@47
  PgSprData::PgHitTester *v105; // eax@47
  unsigned int v106; // edi@47
  unsigned int v107; // ebx@47
  PgFont *v108; // eax@47
  PgWinText *v109; // edi@47
  NiRefObjectVtbl *v110; // ebx@47
  char *v111; // eax@47
  NiPointer<PgSprData::PgHitTester> *v112; // ecx@47
  unsigned int v113; // edi@47
  unsigned int v114; // ebx@47
  PgFont *v115; // eax@47
  PgWinText *v116; // edi@47
  NiRefObjectVtbl *v117; // ebx@47
  char *v118; // eax@47
  PgSprData::PgHitTester *v119; // eax@47
  unsigned int v120; // edi@47
  unsigned int v121; // ebx@47
  PgFont *v122; // eax@47
  PgWinText *v123; // edi@47
  NiRefObjectVtbl *v124; // ebx@47
  char *v125; // eax@47
  NiPointer<PgSprData::PgHitTester> *v126; // ecx@47
  unsigned int v127; // edi@47
  unsigned int v128; // ebx@47
  PgFont *v129; // eax@47
  PgWinText *v130; // edi@47
  NiRefObjectVtbl *v131; // ebx@47
  char *v132; // eax@47
  PgSprData::PgHitTester *v133; // eax@47
  unsigned int v134; // edi@47
  unsigned int v135; // ebx@47
  PgFont *v136; // eax@47
  PgWinText *v137; // edi@47
  NiRefObjectVtbl *v138; // ebx@47
  char *v139; // eax@47
  NiSourceTexture *v140; // eax@47
  PopupMenuWin *v141; // eax@47
  char *v142; // eax@47
  PopupMenu *v143; // edi@47
  char *v144; // eax@47
  PopupMenu *v145; // edi@47
  NiNode *v146; // esi@48
  const char *v147; // [sp+E8h] [bp-A0h]@12
  int *v148; // [sp+ECh] [bp-9Ch]@12
  int *v149; // [sp+F0h] [bp-98h]@12
  volatile LONG *v150; // [sp+F4h] [bp-94h]@6
  NiSourceTexture *v151; // [sp+F4h] [bp-94h]@12
  unsigned int v152; // [sp+F8h] [bp-90h]@1
  SLWCreateInfo kCreateInfo; // [sp+108h] [bp-80h]@19
  SLWCreateInfo kCreateInfo2; // [sp+124h] [bp-64h]@33
  unsigned int uiHeight; // [sp+140h] [bp-48h]@14
  unsigned int uiWidth; // [sp+144h] [bp-44h]@14
  int uiTop; // [sp+148h] [bp-40h]@4
  int uiLeft; // [sp+14Ch] [bp-3Ch]@4
  NiPointer<NiNode> spNode; // [sp+150h] [bp-38h]@1
  unsigned int pCIItem2; // [sp+154h] [bp-34h]@17
  unsigned int *pkTextWin; // [sp+158h] [bp-30h]@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+15Ch] [bp-2Ch]@19
  unsigned int v163; // [sp+178h] [bp-10h]@1
  int v164; // [sp+184h] [bp-4h]@1
  int v165; // [sp+188h] [bp+0h]@1

  v163 = (unsigned int)&v165 ^ __security_cookie;
  v152 = (unsigned int)&v165 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v164 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\HolyPromis.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "HolyPromisWin", 0) )
  {
    v6 = spNode.m_pObject;
    v164 = -1;
    if ( spNode.m_pObject )
    {
      v150 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_7;
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v151 = v10;
    v149 = &uiTop;
    v148 = &uiLeft;
    v147 = "Theme";
  }
  else
  {
    v151 = 0;
    v149 = &uiTop;
    v148 = &uiLeft;
    v147 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v147, v148, v149, v151);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v164 = -1;
    if ( spNode.m_pObject )
    {
      v150 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_7:
      if ( !InterlockedDecrement(v150) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v13 = Font::Get(MAIN_MENU);
  v14 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v13,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v14;
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v15[122].__vecDelDtor)(v14, 1, v152);
  (*(void (__stdcall **)(__int64 *))(*pkTextWin + 468))(&Color::m_kDxWinTitleColor);
  pCIItem2 = *pkTextWin;
  v16 = TextData::Get(0xE3504941u);
  (*(void (__thiscall **)(unsigned int *, char *))(pCIItem2 + 472))(pkTextWin, v16);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(
    uiLeft - v8,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    4u,
    0,
    0);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(
      uiLeft - v8,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0x13u,
      0,
      0);
  }
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Promis01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19 = Font::Get(MAIN_MENU);
  v20 = PgWinText::CreateWin(
          uiLeft - v8 + 130,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v19,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v21 = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v20;
  v21[122].__vecDelDtor((NiRefObject *)v20, 1u);
  (*(void (__stdcall **)(__int64 *))(*pkTextWin + 468))(&Color::m_kDxWinTitleColor);
  pCIItem2 = *pkTextWin;
  v22 = TextData::Get(0x83A47797u);
  (*(void (__thiscall **)(unsigned int *, char *))(pCIItem2 + 472))(pkTextWin, v22);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, 0);
  v23 = Font::Get(TITLEBOLD);
  v24 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v23,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v24;
  v25[122].__vecDelDtor((NiRefObject *)v24, 5u);
  pCIItem2 = *pkTextWin;
  v26 = TextData::Get(0xF44C3A3Cu);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v26);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Category", &uiLeft, &uiTop, 0);
  v27 = Font::Get(TITLEBOLD);
  v28 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v27,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v29 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v28;
  v29[122].__vecDelDtor((NiRefObject *)v28, 5u);
  pCIItem2 = *pkTextWin;
  v30 = TextData3::Get(0x2E4A1B0Bu);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v30);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v164) = 1;
  v31 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v31->nItemType = 1;
  v31->pNode = spNode.m_pObject;
  pCIItem2 = (unsigned int)v31;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Nor", 0xEu);
  LOBYTE(v164) = 2;
  pCIItem2 += 72;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem2,
    &thisa);
  LOBYTE(v164) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Click", 0x10u);
  LOBYTE(v164) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem2,
    &thisa);
  LOBYTE(v164) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Over", 0xFu);
  LOBYTE(v164) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem2,
    &thisa);
  LOBYTE(v164) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
  LOBYTE(v164) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v32 = pCIItem2;
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  *(_BYTE *)(v32 + 88) = 1;
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
  LOBYTE(v164) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
  LOBYTE(v164) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
  LOBYTE(v164) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox01", &uiLeft, &uiTop, 0);
  v34 = SlideListWin::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v33,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pkListHighRankPromise = v34;
  v34->m_uiRClickMsg = 3;
  v2->m_pkListHighRankPromise->m_uiLClickMsg = 2;
  SlideListWin::UpdateViewList(v2->m_pkListHighRankPromise);
  SLWCreateInfo::Clear(&kCreateInfo);
  v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Promis02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v36 = Font::Get(MAIN_MENU);
  v37 = PgWinText::CreateWin(
          uiLeft - v8 + 130,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v36,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v38 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v37;
  v38[122].__vecDelDtor((NiRefObject *)v37, 1u);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 468))(&Color::m_kDxWinTitleColor);
  pCIItem2 = *pkTextWin;
  v39 = TextData::Get(0x53A38988u);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v39);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  *(_DWORD *)&kCreateInfo2.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo2.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo2.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo2.m_bMakeData = 0;
  kCreateInfo2.m_nOffX = 0;
  kCreateInfo2.m_nOffY = 0;
  LOBYTE(v164) = 9;
  v40 = SLWCreateInfo::AddItemInfo(&kCreateInfo2, 1);
  v40->nItemType = 1;
  v40->pNode = spNode.m_pObject;
  pCIItem2 = (unsigned int)v40;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar02Nor", 0xEu);
  LOBYTE(v164) = 10;
  pCIItem2 += 72;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem2,
    &thisa);
  LOBYTE(v164) = 9;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar02Click", 0x10u);
  LOBYTE(v164) = 11;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem2,
    &thisa);
  LOBYTE(v164) = 9;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar02Over", 0xFu);
  LOBYTE(v164) = 12;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem2,
    &thisa);
  LOBYTE(v164) = 9;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo2, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column05", 8u);
  LOBYTE(v164) = 13;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 9;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v41 = pCIItem2;
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  *(_BYTE *)(v41 + 88) = 1;
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo2, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column06", 8u);
  LOBYTE(v164) = 14;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 9;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo2, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column07", 8u);
  LOBYTE(v164) = 15;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 9;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  pCIItem2 = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo2, 2);
  *(_DWORD *)pCIItem2 = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column08", 8u);
  LOBYTE(v164) = 16;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem2 + 72),
    &thisa);
  LOBYTE(v164) = 9;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *(_DWORD *)(pCIItem2 + 4) = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo2.m_nOffX = 4;
  kCreateInfo2.m_nOffY = 0;
  SLWCreateInfo::MakeTempData(&kCreateInfo2, 0);
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox02", &uiLeft, &uiTop, 0);
  v43 = SlideListWin::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v42,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo2,
          0,
          0);
  v2->m_pListLowRankPromise = v43;
  v43->m_uiRClickMsg = 1;
  v2->m_pListLowRankPromise->m_uiLClickMsg = 0;
  SlideListWin::UpdateViewList(v2->m_pListLowRankPromise);
  v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  v45 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar",
          "SlideBar_UpBtn",
          "SlideBar_DnBtn",
          v44,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarPromiseList = v45;
  v45->m_uiClickMsg = 9;
  v2->m_pkSlideBarPromiseList->m_eType = 1;
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
  PgWinBut::CreateWin(
    uiLeft - v8,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    5u,
    0,
    0);
  v46 = *(_DWORD *)pkTextWin[9];
  v47 = *(void **)(v46 + 20);
  pCIItem2 = *(_DWORD *)(v46 + 24);
  pkTextWin = (unsigned int *)v47;
  v48 = Font::Get(MAIN_MENU);
  v49 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          pCIItem2,
          v48,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v50 = v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v49;
  ((void (__thiscall *)(PgWinText *))v50[122].__vecDelDtor)(v49);
  pCIItem2 = *pkTextWin;
  v51 = TextData::Get(0xD6F6DEDFu);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v51);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
  PgWinBut::CreateWin(
    uiLeft - v8,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    6u,
    0,
    0);
  v52 = pkTextWin[9];
  v53 = *(void **)(*(_DWORD *)v52 + 20);
  pCIItem2 = *(_DWORD *)(*(_DWORD *)v52 + 24);
  pkTextWin = (unsigned int *)v53;
  v54 = Font::Get(MAIN_MENU);
  v55 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          pCIItem2,
          v54,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v55;
  v56[122].__vecDelDtor((NiRefObject *)v55, 5u);
  pCIItem2 = *pkTextWin;
  v57 = TextData::Get(0x95F9F1F2u);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v57);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
  PgWinBut::CreateWin(
    uiLeft - v8,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    7u,
    0,
    0);
  v58 = pkTextWin[9];
  v59 = *(void **)(*(_DWORD *)v58 + 20);
  pCIItem2 = *(_DWORD *)(*(_DWORD *)v58 + 24);
  pkTextWin = (unsigned int *)v59;
  v60 = Font::Get(MAIN_MENU);
  v61 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          pCIItem2,
          v60,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v62 = v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v61;
  v62[122].__vecDelDtor((NiRefObject *)v61, 5u);
  pCIItem2 = *pkTextWin;
  v63 = TextData::Get(0x8BF7ED01u);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v63);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
  PgWinBut::CreateWin(
    uiLeft - v8,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    8u,
    0,
    0);
  v64 = pkTextWin[9];
  v65 = *(void **)(*(_DWORD *)v64 + 20);
  pCIItem2 = *(_DWORD *)(*(_DWORD *)v64 + 24);
  pkTextWin = (unsigned int *)v65;
  v66 = Font::Get(MAIN_MENU);
  v67 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          pCIItem2,
          v66,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v68 = v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v67;
  v68[122].__vecDelDtor((NiRefObject *)v67, 5u);
  pCIItem2 = *pkTextWin;
  v69 = TextData::Get(0x86B47191u);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v69);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
  pCIItem2 = (unsigned int)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             (PgSprData *)pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0x10u,
                             0,
                             0);
  *(_DWORD *)(pCIItem2 + 272) = g_pkToolTipWin;
  v70 = TextData2::Get(0xEEE7C3EBu);
  PgWin::SetToolTipWinText((PgWin *)pCIItem2, v70);
  v71 = *(_DWORD *)pkTextWin[9];
  v72 = *(void **)(v71 + 20);
  pCIItem2 = *(_DWORD *)(v71 + 24);
  pkTextWin = (unsigned int *)v72;
  v73 = Font::Get(MAIN_MENU);
  v74 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          pCIItem2,
          v73,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v75 = v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v74;
  v75[122].__vecDelDtor((NiRefObject *)v74, 5u);
  pCIItem2 = *pkTextWin;
  v76 = TextData::Get(0xD937143Fu);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v76);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
  PgWinBut::CreateWin(
    uiLeft - v8,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    0x11u,
    0,
    0);
  v77 = pkTextWin[9];
  v78 = *(void **)(*(_DWORD *)v77 + 20);
  pCIItem2 = *(_DWORD *)(*(_DWORD *)v77 + 24);
  pkTextWin = (unsigned int *)v78;
  v79 = Font::Get(MAIN_MENU);
  v80 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          pCIItem2,
          v79,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v81 = v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v80;
  v81[122].__vecDelDtor((NiRefObject *)v80, 5u);
  pCIItem2 = *pkTextWin;
  v82 = TextData::Get(0x32648786u);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v82);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
  pCIItem2 = (unsigned int)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             (PgSprData *)pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0x12u,
                             0,
                             0);
  *(_DWORD *)(pCIItem2 + 272) = g_pkToolTipWin;
  v83 = TextData2::Get(0xF0F3FF34u);
  PgWin::SetToolTipWinText((PgWin *)pCIItem2, v83);
  v84 = *(_DWORD *)pkTextWin[9];
  v85 = *(void **)(v84 + 20);
  pCIItem2 = *(_DWORD *)(v84 + 24);
  pkTextWin = (unsigned int *)v85;
  v86 = Font::Get(MAIN_MENU);
  v87 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          pCIItem2,
          v86,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v88 = v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (unsigned int *)v87;
  v88[122].__vecDelDtor((NiRefObject *)v87, 5u);
  pCIItem2 = *pkTextWin;
  v89 = TextData::Get(0x85B0B3E0u);
  (*(void (__thiscall **)(_DWORD, _DWORD))(pCIItem2 + 472))(pkTextWin, v89);
  (*(void (__stdcall **)(_DWORD))(*pkTextWin + 240))(0);
  v90 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Base", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v90, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "FriendNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "FriendClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "FriendOver");
  pCIItem2 = (unsigned int)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             (PgSprData *)pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0xAu,
                             0,
                             0);
  v91 = TextData::Get(0xDCF3EDF4u);
  PgWin::SetToolTipWinText((PgWin *)pCIItem2, v91);
  *(_DWORD *)(pCIItem2 + 272) = g_pkToolTipWin;
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "MasterNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "MasterClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "MasterOver");
  pCIItem2 = (unsigned int)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             (PgSprData *)pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0xFu,
                             0,
                             0);
  v92 = TextData::Get(0xF44C3A3Cu);
  PgWin::SetToolTipWinText((PgWin *)pCIItem2, v92);
  *(_DWORD *)(pCIItem2 + 272) = g_pkToolTipWin;
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildOver");
  pCIItem2 = (unsigned int)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             (PgSprData *)pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0xBu,
                             0,
                             0);
  v93 = TextData::Get(0x9BEAF4F4u);
  PgWin::SetToolTipWinText((PgWin *)pCIItem2, v93);
  *(_DWORD *)(pCIItem2 + 272) = g_pkToolTipWin;
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "WeddingNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingOver");
  pCIItem2 = (unsigned int)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             (PgSprData *)pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0xDu,
                             0,
                             0);
  v94 = TextData::Get(0xC8F53F44u);
  PgWin::SetToolTipWinText((PgWin *)pCIItem2, v94);
  *(_DWORD *)(pCIItem2 + 272) = g_pkToolTipWin;
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatchNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchOver");
  pCIItem2 = (unsigned int)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             (PgSprData *)pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0xEu,
                             0,
                             0);
  v95 = TextData::Get(0x1C4B503Eu);
  PgWin::SetToolTipWinText((PgWin *)pCIItem2, v95);
  *(_DWORD *)(pCIItem2 + 272) = g_pkToolTipWin;
  pkTextWin = (unsigned int *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademyNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyOver");
  v96 = PgWinBut::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0xCu,
          0,
          0);
  v97 = TextData::Get(0x253B184Cu);
  PgWin::SetToolTipWinText(&v96->baseclass_0.baseclass_0, v97);
  v96->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v98 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Friend", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v99 = v98->m_pObject->m_uiHeight;
  v100 = v98->m_pObject->m_uiWidth;
  v101 = Font::Get(TITLEBOLD);
  v102 = PgWinText::CreateWin(uiLeft, uiTop, v100, v99, v101, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v102,
    1u);
  v103 = v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v104 = TextData::Get(0xDCF3EDF4u);
  v103[118].__vecDelDtor((NiRefObject *)v102, (unsigned int)v104);
  v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v102,
    0);
  v105 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HolyPromise", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v106 = v105->m_uiHeight;
  v107 = v105->m_uiWidth;
  v108 = Font::Get(TITLEBOLD);
  v109 = PgWinText::CreateWin(uiLeft, uiTop, v107, v106, v108, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v109,
    1u);
  v110 = v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v111 = TextData::Get(0xF44C3A3Cu);
  v110[118].__vecDelDtor((NiRefObject *)v109, (unsigned int)v111);
  v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v109,
    0);
  v112 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v113 = v112->m_pObject->m_uiHeight;
  v114 = v112->m_pObject->m_uiWidth;
  v115 = Font::Get(TITLEBOLD);
  v116 = PgWinText::CreateWin(uiLeft, uiTop, v114, v113, v115, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v116,
    1u);
  v117 = v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v118 = TextData::Get(0x9BEAF4F4u);
  v117[118].__vecDelDtor((NiRefObject *)v116, (unsigned int)v118);
  v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v116,
    0);
  v119 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademy", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v120 = v119->m_uiHeight;
  v121 = v119->m_uiWidth;
  v122 = Font::Get(TITLEBOLD);
  v123 = PgWinText::CreateWin(uiLeft, uiTop, v121, v120, v122, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v123,
    1u);
  v124 = v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v125 = TextData::Get(0x253B184Cu);
  v124[118].__vecDelDtor((NiRefObject *)v123, (unsigned int)v125);
  v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v123,
    0);
  v126 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Wedding", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v127 = v126->m_pObject->m_uiHeight;
  v128 = v126->m_pObject->m_uiWidth;
  v129 = Font::Get(TITLEBOLD);
  v130 = PgWinText::CreateWin(uiLeft, uiTop, v128, v127, v129, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v130->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v130,
    1u);
  v131 = v130->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v132 = TextData::Get(0xC8F53F44u);
  v131[118].__vecDelDtor((NiRefObject *)v130, (unsigned int)v132);
  v130->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v130,
    0);
  v133 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatch", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v134 = v133->m_uiHeight;
  v135 = v133->m_uiWidth;
  v136 = Font::Get(TITLEBOLD);
  v137 = PgWinText::CreateWin(uiLeft, uiTop, v135, v134, v136, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v137->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v137,
    1u);
  v138 = v137->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v139 = TextData::Get(0x1C4B503Eu);
  v138[118].__vecDelDtor((NiRefObject *)v137, (unsigned int)v139);
  v137->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v137,
    0);
  v140 = MenuTexMgr::GetTexture(1u);
  v141 = PopupMenuWin::CreateWin(v140, 4u, 4u, 0);
  v2->m_spPopupMenu = v141;
  ((void (__stdcall *)(IDirectMessenger *))v141->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  PopupMenuWin::Clear(v2->m_spPopupMenu);
  v142 = TextData::Get(0xBEEF0012u);
  v143 = (PopupMenu *)PopupMenuText::CreateWin(v142, 0, 0, 0, 0, 0, 0);
  PopupMenu::SetClickEvent(v143, 69, 0);
  PopupMenuWin::AddMenu(v2->m_spPopupMenu, v143);
  v144 = TextData::Get(0x85B0B3E0u);
  v145 = (PopupMenu *)PopupMenuText::CreateWin(v144, 0, 0, 0, 0, 0, 0);
  PopupMenu::SetClickEvent(v145, 70, 0);
  PopupMenuWin::AddMenu(v2->m_spPopupMenu, v145);
  PopupMenuWin::FinishMenu(v2->m_spPopupMenu, 0);
  ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__thiscall *)(HolyPromiseWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v164) = 1;
  SLWCreateInfo::_SLWCreateInfo(&kCreateInfo2);
  LOBYTE(v164) = 0;
  SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
  v164 = -1;
  if ( spNode.m_pObject )
  {
    v146 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v146 )
        v146->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v146, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0051AB10) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (0051AB30) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (0051AB50) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 37) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 37) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 37); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (0051ABA0) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 37) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 37) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 37) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 37) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 37) )
    goto LABEL_11;
  return result;
}

//----- (0051AC00) --------------------------------------------------------
void *__thiscall HolyPromiseAddWin::_scalar_deleting_destructor_(HolyPromiseAddWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyPromiseAddWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyPromiseAddWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 997E4C: using guessed type int (__stdcall *HolyPromiseAddWin___vftable_)(int uiFlags);
// 997E6C: using guessed type int (__thiscall *HolyPromiseAddWin___vftable_)(void *p, char);

//----- (0051AC40) --------------------------------------------------------
void __thiscall PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK::PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK(PROTO_NC_HOLY_PROMISE_SET_UP_CONFIRM_ACK *this)
{
  *(_QWORD *)&this->CharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->CharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->CharID.n5_name[0] = 0;
  *(_QWORD *)&this->UpCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->UpCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->UpCharID.n5_name[0] = 0;
}

//----- (0051AC70) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (0051ACD0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (0051AD30) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, const unsigned int *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (0051ADA0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v29; // ecx@52
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0xAAAAAA9 )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (0051AFD0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Buynode<std::pair<unsigned_int_const_Name5>>(std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::pair<unsigned int const ,Name5> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *result; // eax@1
  std::pair<unsigned int const ,Name5> *v4; // ecx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)operator new(0x28u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    *(_DWORD *)&result->_Myval.baseclass_0.second.n5_name[0] = *(_DWORD *)&v4->baseclass_0.second.n5_name[0];
    *(_DWORD *)&result->_Myval.baseclass_0.second.n5_name[4] = *(_DWORD *)&v4->baseclass_0.second.n5_name[4];
    *(_DWORD *)&result->_Myval.baseclass_0.second.n5_name[8] = *(_DWORD *)&v4->baseclass_0.second.n5_name[8];
    *(_DWORD *)&result->_Myval.baseclass_0.second.n5_name[12] = *(_DWORD *)&v4->baseclass_0.second.n5_name[12];
    *(_DWORD *)&result->_Myval.baseclass_0.second.n5_name[16] = *(_DWORD *)&v4->baseclass_0.second.n5_name[16];
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0051B060) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 37) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 37) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 37) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 37) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 37) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v6;
      else
        v10->_Right = std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 37) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 37) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 36);
  *(_BYTE *)(*(_DWORD *)&v5 + 36) = *(_BYTE *)(*(_DWORD *)&v3 + 36);
  *(_BYTE *)(*(_DWORD *)&v3 + 36) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 36) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 36) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 36) )
        {
          *(_BYTE *)(v15 + 36) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 36) = 0;
          std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 37) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 36) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 36) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 36) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 36) = 1;
            *(_BYTE *)(v15 + 36) = 0;
            std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Rrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 36) = *(_BYTE *)(*(_DWORD *)&v6 + 36);
          *(_BYTE *)(*(_DWORD *)&v6 + 36) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 36) = 1;
          std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 36) )
        {
          *(_BYTE *)(v15 + 36) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 36) = 0;
          std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 37) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 36) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 36) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 36) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 36) = 1;
            *(_BYTE *)(v15 + 36) = 0;
            std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Lrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 36) = *(_BYTE *)(*(_DWORD *)&v6 + 36);
          *(_BYTE *)(*(_DWORD *)&v6 + 36) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 36) = 1;
          std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 36) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 36) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (0051B2B0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (0051B2F0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const unsigned int v10; // edi@2
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Insert(
                          v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >,std::_Iterator_base0> *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Insert(
                        v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (0051B3D0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::clear(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this)
{
  std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::_Erase(
        v1,
        v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (0051B420) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > _Last)
{
  std::_Tree<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v6; // ecx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 37) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 37) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 37);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 37);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Name5,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Name5> >,0> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_int_Name5_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Name5>>_0>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (0051B4C0) --------------------------------------------------------
void *__thiscall HolyPromiseWin::_vector_deleting_destructor_(HolyPromiseWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  HolyPromiseWin::_HolyPromiseWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0051B4F0) --------------------------------------------------------
void __thiscall IDTimeWin::IDTimeWin(IDTimeWin *this)
{
  IDTimeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IDTimeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IDTimeWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimer);
}
// 99832C: using guessed type int (__stdcall *IDTimeWin___vftable_)(int uiFlags);
// 99834C: using guessed type int (__thiscall *IDTimeWin___vftable_)(void *p, char);

//----- (0051B560) --------------------------------------------------------
void __thiscall IDTimeWin::_IDTimeWin(IDTimeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IDTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IDTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 99832C: using guessed type int (__stdcall *IDTimeWin___vftable_)(int uiFlags);
// 99834C: using guessed type int (__thiscall *IDTimeWin___vftable_)(void *p, char);

//----- (0051B5A0) --------------------------------------------------------
void __thiscall IDTimeWin::UpdateMeWin(IDTimeWin *this, float fCurTime)
{
  IDTimeWin *v2; // edi@1
  char *v3; // eax@3
  PgWinText *v4; // edi@4
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@4
  PgWinText *v6; // ecx@4
  PgWinText *v7; // edi@7
  D3DXCOLOR *v8; // [sp+0h] [bp-8h]@5
  NiRefObjectVtbl *fCurTimea; // [sp+10h] [bp+8h]@3

  v2 = this;
  if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimer, fCurTime) )
  {
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      1u);
    --IDTimeWin::m_second;
  }
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  fCurTimea = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = fs("%02d:%02d:%02d");
  fCurTimea[118].__vecDelDtor((NiRefObject *)v2->m_minuteTxtWin, (unsigned int)v3);
  if ( IDTimeWin::m_second >= 0x3C )
  {
    if ( IDTimeWin::m_second >= 0x12C )
      goto LABEL_10;
    v7 = v2->m_minuteTxtWin;
    v5 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
    v6 = v7;
    goto LABEL_8;
  }
  v4 = v2->m_minuteTxtWin;
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
  v6 = v4;
  if ( IDTimeWin::m_second & 1 )
  {
LABEL_8:
    v8 = &Color::m_kDxRedColor;
    goto LABEL_9;
  }
  v8 = &Color::m_kDxWhiteColor;
LABEL_9:
  v5(&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)v8);
LABEL_10:
  if ( IDTimeWin::m_second == 60 )
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_KQLast);
}
// A988C4: using guessed type unsigned int IDTimeWin__m_second;

//----- (0051B6C0) --------------------------------------------------------
void __thiscall IDTimeWin::ResetTime(IDTimeWin *this, unsigned int second)
{
  IDTimeWin *v2; // esi@1

  v2 = this;
  IDTimeWin::m_second = second;
  CNSTimer_Interval::ReSet(&this->m_kTimer, Timer::ms_fCurTime);
  v2->m_kTimer.m_fCheckTime = 1.0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A988C4: using guessed type unsigned int IDTimeWin__m_second;

//----- (0051B6F0) --------------------------------------------------------
bool __thiscall IDTimeWin::Create(IDTimeWin *this, PgFrameWork *pkFrameWork)
{
  IDTimeWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgSprData *v10; // eax@15
  PgWinSpr *v11; // eax@15
  PgSprData *v12; // eax@15
  PgWinSpr *v13; // eax@15
  PgSprData *v14; // eax@15
  PgSprData *v15; // edi@15
  PgWinSpr *v16; // eax@15
  NiPointer<PgSprData::PgHitTester> *v17; // ecx@15
  unsigned int v18; // edi@15
  unsigned int v19; // ebx@15
  PgFont *v20; // eax@15
  PgWinText *v21; // eax@15
  NiRefObjectVtbl *v22; // edi@15
  PgFont *v23; // eax@15
  NiRefObjectVtbl *v24; // edi@15
  int v25; // eax@15
  NiNode *v26; // esi@16
  int uiLeft; // [sp+34h] [bp-18h]@11
  int uiTop; // [sp+38h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+3Ch] [bp-10h]@1
  int v30; // [sp+48h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v30 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v30 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\QuestTime.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "IDTimeWin", 0) )
  {
    v4 = spNode.m_pObject;
    v30 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Reward", &uiLeft, &uiTop, 0);
  v11 = PgWinSpr::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v11,
    1u);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v13 = PgWinSpr::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Time", &uiLeft, &uiTop, v3);
  v15 = v14;
  v16 = PgWinSpr::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  v17 = v15->m_akHitTester.m_pBase;
  v18 = v17->m_pObject->m_uiHeight;
  v19 = v17->m_pObject->m_uiWidth;
  v20 = Font::Get(0);
  v21 = PgWinText::CreateWin(uiLeft, uiTop + 2, v19, v18, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_minuteTxtWin = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v22 = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = Font::Get(LARGEBOLD);
  v22[113].__vecDelDtor((NiRefObject *)v2->m_minuteTxtWin, (unsigned int)v23);
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("00:00:00");
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(IDTimeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.0);
  v24 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
               (NiRefObject *)v2,
               210u);
  v24[77].__vecDelDtor((NiRefObject *)v2, v25);
  v30 = -1;
  if ( spNode.m_pObject )
  {
    v26 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v26 )
        v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0051B9E0) --------------------------------------------------------
IDTimeWin *__cdecl IDTimeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  IDTimeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x178u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &IDTimeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &IDTimeWin::_vftable_;
    CNSTimer_Interval::CNSTimer_Interval((CNSTimer_Interval *)((char *)v2 + 348));
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (IDTimeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99832C: using guessed type int (__stdcall *IDTimeWin___vftable_)(int uiFlags);
// 99834C: using guessed type int (__thiscall *IDTimeWin___vftable_)(void *p, char);

//----- (0051BB30) --------------------------------------------------------
void *__thiscall IDTimeWin::_scalar_deleting_destructor_(IDTimeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IDTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IDTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99832C: using guessed type int (__stdcall *IDTimeWin___vftable_)(int uiFlags);
// 99834C: using guessed type int (__thiscall *IDTimeWin___vftable_)(void *p, char);

//----- (0051BB70) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::sIndunLevelButton::sIndunLevelButton(IndunLevelSelectWin::sIndunLevelButton *this)
{
  this->m_pkBtn = 0;
  this->m_pkText = 0;
  this->m_uiPos = 0;
}

//----- (0051BB80) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::sIndunLevelButton::sIndunLevelButton(IndunLevelSelectWin::sIndunLevelButton *this, PgWinBut *pkBtn, PgWinText *pkText, unsigned int uiPos)
{
  this->m_pkBtn = pkBtn;
  this->m_pkText = pkText;
  this->m_uiPos = uiPos;
}

//----- (0051BBA0) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::sIndunLevelButton::Reset(IndunLevelSelectWin::sIndunLevelButton *this)
{
  IndunLevelSelectWin::sIndunLevelButton *v1; // esi@1
  PgWinBut *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkBtn;
  if ( v2 )
  {
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v1->m_uiPos);
    ((void (__stdcall *)(_DWORD))v1->m_pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
  }
  if ( v1->m_pkText )
    ((void (__stdcall *)(_DWORD))v1->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99856C);
}

//----- (0051BBF0) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::sIndunLevelButton::ChangePos(IndunLevelSelectWin::sIndunLevelButton *this, bool bChange)
{
  IndunLevelSelectWin::sIndunLevelButton *v2; // esi@1
  PgWinBut *v3; // ecx@1
  NiRefObjectVtbl *v4; // edi@3
  unsigned int v5; // eax@3

  v2 = this;
  v3 = this->m_pkBtn;
  if ( v3 )
  {
    if ( bChange )
    {
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = ((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v4[44].__vecDelDtor((NiRefObject *)v2->m_pkBtn, v2->m_uiPos + (v5 >> 1));
    }
  }
}

//----- (0051BC30) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::sIndunLevelButton::SetText(IndunLevelSelectWin::sIndunLevelButton *this, const char *pcText)
{
  IndunLevelSelectWin::sIndunLevelButton *v2; // esi@1
  PgWinBut *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkBtn;
  if ( v3 )
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  if ( v2->m_pkText )
    ((void (__stdcall *)(_DWORD))v2->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
}

//----- (0051BC70) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::sIndunLevelButton::SetParam(IndunLevelSelectWin::sIndunLevelButton *this, unsigned int uiParam)
{
  PgWinBut *v2; // ecx@1

  v2 = this->m_pkBtn;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(uiParam);
}

//----- (0051BC90) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::_IndunLevelSelectWin(IndunLevelSelectWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IndunLevelSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IndunLevelSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 99862C: using guessed type int (__stdcall *IndunLevelSelectWin___vftable_)(int uiFlags);
// 99864C: using guessed type int (__thiscall *IndunLevelSelectWin___vftable_)(void *p, char);

//----- (0051BCB0) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::OnSelect(IndunLevelSelectWin *this, ID_LEVEL_TYPE eLevelType)
{
  IndunLevelSelectWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::NcInstanceDungeonLevelSelectMenuAck((GameFrameWork *)v3, v2->m_kNPCHandle, eLevelType);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
}

//----- (0051BCF0) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::OnCancel(IndunLevelSelectWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (0051BD00) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::ResetInfo(IndunLevelSelectWin *this)
{
  IndunLevelSelectWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  int v3; // esi@3
  signed int v4; // edi@3

  v1 = this;
  v2 = this->m_pkMsgText;
  v1->m_kNPCHandle = -1;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99856E);
  v3 = (int)v1->m_kIndunLevelButton;
  v4 = 3;
  do
  {
    if ( *(_DWORD *)v3 )
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 176))(*(_DWORD *)(v3 + 8));
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 520))(0);
    }
    if ( *(_DWORD *)(v3 + 4) )
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 4) + 472))(&unk_99856C);
    v3 += 12;
    --v4;
  }
  while ( v4 );
}

//----- (0051BD90) --------------------------------------------------------
void __thiscall IndunLevelMsgWin::IndunLevelMsgWin(IndunLevelMsgWin *this)
{
  IndunLevelMsgWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkMsgText = 0;
  v1->m_pkLevelText = 0;
  v1->m_eLevelType = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IndunLevelMsgWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IndunLevelMsgWin::_vftable_;
  v1->m_kNPCHandle = 0;
}
// 998870: using guessed type int (__stdcall *IndunLevelMsgWin___vftable_)(int uiFlags);
// 99888C: using guessed type int (__thiscall *IndunLevelMsgWin___vftable_)(void *p, char);

//----- (0051BDD0) --------------------------------------------------------
void __thiscall IndunLevelMsgWin::_IndunLevelMsgWin(IndunLevelMsgWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IndunLevelMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IndunLevelMsgWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 998870: using guessed type int (__stdcall *IndunLevelMsgWin___vftable_)(int uiFlags);
// 99888C: using guessed type int (__thiscall *IndunLevelMsgWin___vftable_)(void *p, char);

//----- (0051BDF0) --------------------------------------------------------
void __thiscall IndunLevelMsgWin::ResetInfo(IndunLevelMsgWin *this)
{
  IndunLevelMsgWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  PgWinText *v3; // ecx@3

  v1 = this;
  v2 = this->m_pkMsgText;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9985A6);
  v3 = v1->m_pkLevelText;
  if ( v3 )
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9985A7);
  *(_DWORD *)&v1->m_kNPCHandle = 65535;
}

//----- (0051BE40) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::IndunLevelSelectWin(IndunLevelSelectWin *this)
{
  IndunLevelSelectWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkMsgText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IndunLevelSelectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IndunLevelSelectWin::_vftable_;
  v1->m_kIndunLevelButton[0].m_pkBtn = 0;
  v1->m_kIndunLevelButton[0].m_pkText = 0;
  v1->m_kIndunLevelButton[0].m_uiPos = 0;
  v1->m_kIndunLevelButton[1].m_pkBtn = 0;
  v1->m_kIndunLevelButton[1].m_pkText = 0;
  v1->m_kIndunLevelButton[1].m_uiPos = 0;
  v1->m_kIndunLevelButton[2].m_pkBtn = 0;
  v1->m_kIndunLevelButton[2].m_pkText = 0;
  v1->m_kIndunLevelButton[2].m_uiPos = 0;
  v1->m_kNPCHandle = 0;
}
// 99862C: using guessed type int (__stdcall *IndunLevelSelectWin___vftable_)(int uiFlags);
// 99864C: using guessed type int (__thiscall *IndunLevelSelectWin___vftable_)(void *p, char);

//----- (0051BEB0) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::OnCommand(IndunLevelSelectWin *this, unsigned int wParam, int lParam)
{
  IndunLevelSelectWin *v3; // esi@1
  PgFrameWork *v4; // eax@4

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
      GameFrameWork::NcInstanceDungeonLevelSelectMenuAck((GameFrameWork *)v4, v3->m_kNPCHandle, (ID_LEVEL_TYPE)lParam);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (0051BF10) --------------------------------------------------------
void __thiscall IndunLevelMsgWin::OnOk(IndunLevelMsgWin *this)
{
  IndunLevelMsgWin *v1; // esi@1
  PgFrameWork *v2; // eax@1
  PgWinText *v3; // ecx@3
  PgWinText *v4; // ecx@5

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    GameFrameWork::NcInstanceDungeonLevelSelectMenuAck((GameFrameWork *)v2, v1->m_kNPCHandle, v1->m_eLevelType);
  v3 = v1->m_pkMsgText;
  if ( v3 )
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9985A6);
  v4 = v1->m_pkLevelText;
  if ( v4 )
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9985A7);
  *(_DWORD *)&v1->m_kNPCHandle = 65535;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (0051BFA0) --------------------------------------------------------
void __thiscall IndunLevelMsgWin::OnCancel(IndunLevelMsgWin *this)
{
  IndunLevelMsgWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  PgWinText *v3; // ecx@3

  v1 = this;
  v2 = this->m_pkMsgText;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9985A6);
  v3 = v1->m_pkLevelText;
  if ( v3 )
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9985A7);
  *(_DWORD *)&v1->m_kNPCHandle = 65535;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (0051C000) --------------------------------------------------------
bool __thiscall IndunLevelSelectWin::Create(IndunLevelSelectWin *this, PgFrameWork *pkFrameWork)
{
  IndunLevelSelectWin *v2; // edi@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgWinSpr *v9; // eax@10
  D3DXCOLOR v10; // ST1C_16@10
  int v11; // eax@10
  int v12; // edi@10
  char *v13; // eax@11
  PgWin *v14; // esi@11
  PgFont *v15; // ST20_4@11
  unsigned int v16; // ST1C_4@11
  unsigned int v17; // eax@11
  PgWinText *v18; // ebx@11
  int v19; // eax@11
  PgWin *v20; // ST24_4@16
  PgFont *v21; // ST20_4@16
  unsigned int v22; // ST1C_4@16
  unsigned int v23; // eax@16
  PgWinText *v24; // esi@16
  NiRefObjectVtbl *v25; // edi@16
  char *v26; // eax@16
  NiNode *v27; // esi@17
  UIUtil ui; // [sp+40h] [bp-30h]@10
  int uiLeft; // [sp+54h] [bp-1Ch]@4
  int uiTop; // [sp+58h] [bp-18h]@4
  IndunLevelSelectWin *v31; // [sp+5Ch] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+60h] [bp-10h]@1
  int v33; // [sp+6Ch] [bp-4h]@1
  int pkFrameWorka; // [sp+78h] [bp+8h]@11

  v2 = this;
  v31 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v33 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ModeIDWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "IndunLevelSelectWin", 0) )
  {
    v6 = spNode.m_pObject;
    v33 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v33) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  v9 = UIUtil::CreateSpr(&ui, "Theme", v8);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkMsgText = UIUtil::CreateTextNoSpr(&ui, "Textbox", &byte_99856D, COERCE_D3DXCOLOR(v10.r), 5u);
  v11 = 0;
  v12 = (int)v2->m_kIndunLevelButton;
  do
  {
    pkFrameWorka = v11 + 1;
    v13 = fs("Btn%02d");
    v14 = (PgWin *)UIUtil::CreateButton(&ui, 0, v13, 0, 3);
    v15 = Font::Get(0);
    v16 = ((int (__thiscall *)(PgWin *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v14);
    v17 = ((int (__thiscall *)(PgWin *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v14);
    v18 = PgWinText::CreateWin(0, 0, v17, v16, v15, v14, 0, 0);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v18,
      5u);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
    v19 = ((int (__thiscall *)(PgWin *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v14);
    *(_DWORD *)v12 = v14;
    *(_DWORD *)(v12 + 4) = v18;
    *(_DWORD *)(v12 + 8) = v19;
    if ( *(_DWORD *)v12 )
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 176))(*(_DWORD *)(v12 + 8));
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 520))(0);
    }
    if ( *(_DWORD *)(v12 + 4) )
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v12 + 4) + 472))(&unk_99856C);
    v11 = pkFrameWorka;
    v12 += 12;
  }
  while ( (unsigned int)pkFrameWorka < 3 );
  v20 = (PgWin *)UIUtil::CreateButton(&ui, 1u, "QuitBtn", 0, 3);
  v21 = Font::Get(0);
  v22 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v20);
  v23 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v20);
  v24 = PgWinText::CreateWin(0, 0, v23, v22, v21, v20, 0, 0);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v24,
    5u);
  v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v26 = TextData::Get(0xDDE7EBEFu);
  v25[118].__vecDelDtor((NiRefObject *)v24, (unsigned int)v26);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    0);
  ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  LOBYTE(v33) = 0;
  UIUtil::_UIUtil(&ui);
  v33 = -1;
  if ( spNode.m_pObject )
  {
    v27 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v27 )
        v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0051C360) --------------------------------------------------------
bool __thiscall IndunLevelMsgWin::Create(IndunLevelMsgWin *this, PgFrameWork *pkFrameWork)
{
  IndunLevelMsgWin *v2; // edi@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgWinSpr *v9; // eax@10
  D3DXCOLOR v10; // ST14_16@10
  D3DXCOLOR v11; // ST14_16@10
  PgWinText *v12; // eax@10
  PgWin *v13; // ST1C_4@10
  PgFont *v14; // ST18_4@10
  unsigned int v15; // ST14_4@10
  unsigned int v16; // eax@10
  PgWinText *v17; // esi@10
  NiRefObjectVtbl *v18; // ebx@10
  char *v19; // eax@10
  PgWin *v20; // ST1C_4@10
  PgFont *v21; // ST18_4@10
  unsigned int v22; // ST14_4@10
  unsigned int v23; // eax@10
  PgWinText *v24; // esi@10
  NiRefObjectVtbl *v25; // ebx@10
  char *v26; // eax@10
  NiNode *v27; // esi@11
  UIUtil ui; // [sp+38h] [bp-2Ch]@10
  int uiLeft; // [sp+4Ch] [bp-18h]@4
  int uiTop; // [sp+50h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v32; // [sp+60h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v32 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ModeIDMsg.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "IndunLevelMsgWin", 0) )
  {
    v6 = spNode.m_pObject;
    v32 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v32) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  v9 = UIUtil::CreateSpr(&ui, "Theme", v8);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkMsgText = UIUtil::CreateTextNoSpr(&ui, "TextBox01", &byte_99856F, COERCE_D3DXCOLOR(v10.r), 5u);
  *(_QWORD *)&v11.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v11.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v12 = UIUtil::CreateTextNoSpr(&ui, "TextBox02", &byte_998583, COERCE_D3DXCOLOR(v11.r), 5u);
  v2->m_pkLevelText = v12;
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v12,
    (unsigned int)&Color::m_kDxYellowColor);
  v13 = (PgWin *)UIUtil::CreateButton(&ui, 0, "Btn01", 0, 3);
  v14 = Font::Get(0);
  v15 = ((int (__thiscall *)(PgWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v13);
  v16 = ((int (__thiscall *)(PgWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v13);
  v17 = PgWinText::CreateWin(0, 0, v16, v15, v14, v13, 0, 0);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v19 = TextData::Get(0x4F5F499Fu);
  v18[118].__vecDelDtor((NiRefObject *)v17, (unsigned int)v19);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v20 = (PgWin *)UIUtil::CreateButton(&ui, 1u, "Btn02", 0, 3);
  v21 = Font::Get(0);
  v22 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v20);
  v23 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v20);
  v24 = PgWinText::CreateWin(0, 0, v23, v22, v21, v20, 0, 0);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v24,
    5u);
  v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v26 = TextData::Get(0x88A297E1u);
  v25[118].__vecDelDtor((NiRefObject *)v24, (unsigned int)v26);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    0);
  ((void (__thiscall *)(IndunLevelMsgWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  LOBYTE(v32) = 0;
  UIUtil::_UIUtil(&ui);
  v32 = -1;
  if ( spNode.m_pObject )
  {
    v27 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v27 )
        v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0051C6A0) --------------------------------------------------------
void __thiscall IndunLevelMsgWin::OnCommand(IndunLevelMsgWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      IndunLevelMsgWin::OnCancel(this);
  }
  else
  {
    IndunLevelMsgWin::OnOk(this);
  }
}

//----- (0051C6C0) --------------------------------------------------------
IndunLevelSelectWin *__cdecl IndunLevelSelectWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  IndunLevelSelectWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x184u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    IndunLevelSelectWin::IndunLevelSelectWin((IndunLevelSelectWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (IndunLevelSelectWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0051C7F0) --------------------------------------------------------
IndunLevelMsgWin *__cdecl IndunLevelMsgWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  IndunLevelMsgWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &IndunLevelMsgWin::_vftable_;
    *((_DWORD *)v2 + 58) = &IndunLevelMsgWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_WORD *)v2 + 176) = 0;
    *((_DWORD *)v2 + 89) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (IndunLevelMsgWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 998870: using guessed type int (__stdcall *IndunLevelMsgWin___vftable_)(int uiFlags);
// 99888C: using guessed type int (__thiscall *IndunLevelMsgWin___vftable_)(void *p, char);

//----- (0051C950) --------------------------------------------------------
void __thiscall IndunLevelSelectWin::SetInfo(IndunLevelSelectWin *this, unsigned __int16 kNPCHandle, Name3 kMapIndex, unsigned int uiMenuCount, ID_LEVEL_TYPE *eLevelType)
{
  IndunLevelSelectWin *v5; // ebx@1
  PgWinText *v6; // ecx@3
  NiRefObjectVtbl *v7; // esi@4
  char *v8; // eax@4
  char *v9; // eax@4
  char *v10; // eax@5
  char *v11; // eax@5
  char *v12; // eax@5
  unsigned int v13; // ebx@5
  int v14; // esi@6
  int v15; // ecx@7
  ID_LEVEL_TYPE v16; // edi@7
  int v17; // edi@9
  unsigned int v18; // eax@9
  int v19; // ecx@15
  unsigned int v20; // [sp-10h] [bp-80h]@1
  ID_LEVEL_TYPE *v21; // [sp+0h] [bp-70h]@1
  IndunLevelSelectWin *v22; // [sp+4h] [bp-6Ch]@1
  ID_LEVEL_TYPE uiLevelType; // [sp+8h] [bp-68h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *uiLevelTypea; // [sp+8h] [bp-68h]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kButtonText[3]; // [sp+Ch] [bp-64h]@5
  unsigned int v26; // [sp+60h] [bp-10h]@1
  int v27; // [sp+6Ch] [bp-4h]@5
  int v28; // [sp+70h] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v20 = (unsigned int)&v28 ^ __security_cookie;
  v5 = this;
  v22 = this;
  v21 = eLevelType;
  if ( uiMenuCount != 1 )
  {
    IndunLevelSelectWin::ResetInfo(this);
    if ( MapInfoTab::GetByMapName(&kMapIndex) )
    {
      v6 = v5->m_pkMsgText;
      if ( v6 )
      {
        v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v8 = TextData2::Get(0x2F51786Bu);
        v9 = fs(v8);
        v7[118].__vecDelDtor((NiRefObject *)v5->m_pkMsgText, (unsigned int)v9);
      }
      kButtonText[0].baseclass_0._Myres = 15;
      kButtonText[0].baseclass_0._Mysize = 0;
      kButtonText[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v10 = TextData3::Get(0xA7E9DC3Fu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kButtonText, v10, strlen(v10));
      v27 = 0;
      v11 = TextData3::Get(0xA7432633u);
      kButtonText[1].baseclass_0._Myres = 15;
      kButtonText[1].baseclass_0._Mysize = 0;
      kButtonText[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kButtonText[1], v11, strlen(v11));
      LOBYTE(v27) = 1;
      v12 = TextData3::Get(0xA8E9DF2Au);
      kButtonText[2].baseclass_0._Myres = 15;
      kButtonText[2].baseclass_0._Mysize = 0;
      kButtonText[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kButtonText[2], v12, strlen(v12));
      v13 = 0;
      v27 = 2;
      if ( uiMenuCount > 0 )
      {
        v14 = (int)v22->m_kIndunLevelButton;
        do
        {
          v15 = *(_DWORD *)v14;
          v16 = v21[v13];
          uiLevelType = v21[v13];
          if ( *(_DWORD *)v14 && uiMenuCount == 2 )
          {
            v17 = *(_DWORD *)v15;
            v18 = (*(int (__cdecl **)(unsigned int))(*(_DWORD *)v15 + 148))(v20);
            (*(void (__thiscall **)(int, unsigned int))(v17 + 176))(*(_DWORD *)v14, *(_DWORD *)(v14 + 8) + (v18 >> 1));
            v16 = uiLevelType;
          }
          if ( kButtonText[v16].baseclass_0._Myres < 0x10 )
            uiLevelTypea = &kButtonText[v16];
          else
            uiLevelTypea = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&kButtonText[v16].baseclass_0.___u0.baseclass_0.dummy[0];
          if ( *(_DWORD *)v14 )
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v14 + 256))(1);
          v19 = *(_DWORD *)(v14 + 4);
          if ( v19 )
            (*(void (__stdcall **)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))(*(_DWORD *)v19 + 472))(uiLevelTypea);
          if ( *(_DWORD *)v14 )
            (*(void (__stdcall **)(ID_LEVEL_TYPE))(**(_DWORD **)v14 + 520))(v16);
          ++v13;
          v14 += 12;
        }
        while ( v13 < uiMenuCount );
      }
      v22->m_kNPCHandle = kNPCHandle;
      v27 = -1;
      _eh_vector_destructor_iterator_(
        kButtonText,
        0x1Cu,
        3,
        (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0051CB70) --------------------------------------------------------
void __thiscall IndunLevelMsgWin::SetInfo(IndunLevelMsgWin *this, unsigned __int16 kNPCHandle, Name3 kMapIndex, ID_LEVEL_TYPE eLevelType)
{
  IndunLevelMsgWin *v4; // edi@1
  PgWinText *v5; // eax@2
  NiRefObjectVtbl *v6; // esi@3
  char *v7; // eax@3
  char *v8; // eax@3
  char *v9; // eax@7
  char *v10; // ecx@7
  int v11; // esi@7
  char v12; // dl@8
  char v13; // dl@11
  char v14; // dl@14
  PgWinText *v15; // eax@16
  NiRefObjectVtbl *v16; // esi@17
  char *v17; // eax@17
  bool v18; // cf@18
  ID_LEVEL_TYPE v19; // ecx@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kLevel; // [sp+4h] [bp-2Ch]@4
  unsigned int v21; // [sp+20h] [bp-10h]@1
  int v22; // [sp+2Ch] [bp-4h]@4
  int v23; // [sp+30h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v4 = this;
  if ( !MapInfoTab::GetByMapName(&kMapIndex) )
    return;
  v5 = v4->m_pkMsgText;
  if ( v5 )
  {
    v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = TextData2::Get(0x2F51786Bu);
    v8 = fs(v7);
    v6[118].__vecDelDtor((NiRefObject *)v4->m_pkMsgText, (unsigned int)v8);
  }
  kLevel.baseclass_0._Myres = 15;
  kLevel.baseclass_0._Mysize = 0;
  kLevel.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v22 = 0;
  if ( !eLevelType )
  {
    v9 = TextData3::Get(0xA7E9DC3Fu);
    v10 = v9;
    v11 = (int)(v9 + 1);
    do
      v14 = *v10++;
    while ( v14 );
    goto LABEL_15;
  }
  if ( eLevelType == 1 )
  {
    v9 = TextData3::Get(0xA7432633u);
    v10 = v9;
    v11 = (int)(v9 + 1);
    do
      v13 = *v10++;
    while ( v13 );
    goto LABEL_15;
  }
  if ( eLevelType == 2 )
  {
    v9 = TextData3::Get(0xA8E9DF2Au);
    v10 = v9;
    v11 = (int)(v9 + 1);
    do
      v12 = *v10++;
    while ( v12 );
LABEL_15:
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kLevel, v9, (unsigned int)&v10[-v11]);
  }
  v15 = v4->m_pkLevelText;
  if ( v15 )
  {
    v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = fs("(%s %s)");
    v16[118].__vecDelDtor((NiRefObject *)v4->m_pkLevelText, (unsigned int)v17);
  }
  v18 = kLevel.baseclass_0._Myres < 0x10;
  v19 = eLevelType;
  v4->m_kNPCHandle = kNPCHandle;
  v4->m_eLevelType = v19;
  if ( !v18 )
    operator delete(*(void **)&kLevel);
}
// A85C00: using guessed type int __security_cookie;

//----- (0051CD00) --------------------------------------------------------
void *__thiscall IndunLevelSelectWin::_vector_deleting_destructor_(IndunLevelSelectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IndunLevelSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IndunLevelSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99862C: using guessed type int (__stdcall *IndunLevelSelectWin___vftable_)(int uiFlags);
// 99864C: using guessed type int (__thiscall *IndunLevelSelectWin___vftable_)(void *p, char);

//----- (0051CD40) --------------------------------------------------------
void *__thiscall IndunLevelMsgWin::_vector_deleting_destructor_(IndunLevelMsgWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IndunLevelMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IndunLevelMsgWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 998870: using guessed type int (__stdcall *IndunLevelMsgWin___vftable_)(int uiFlags);
// 99888C: using guessed type int (__thiscall *IndunLevelMsgWin___vftable_)(void *p, char);

//----- (0051CD80) --------------------------------------------------------
void __thiscall InputTextWin::OnCmdOk(InputTextWin *this)
{
  InputTextWin *v1; // esi@1

  v1 = this;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v1->m_pkRevWin, 5u, v1->m_uiOkMsg, 0);
}

//----- (0051CDB0) --------------------------------------------------------
void __thiscall InputTextWin::OnCmdCancel(InputTextWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0051CDC0) --------------------------------------------------------
void __thiscall InputTextWin::OnClose(InputTextWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  ((void (__stdcall *)(_DWORD))this->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  PgWin::OnClose(v1);
}

//----- (0051CDE0) --------------------------------------------------------
void __thiscall InputTextWin::OnEditEnd(InputTextWin *this, unsigned int wParam, int lParam)
{
  InputTextWin *v3; // esi@1

  v3 = this;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  PgWin::PostMsg(&v3->baseclass_0.baseclass_0.baseclass_0, v3->m_pkRevWin, 5u, v3->m_uiOkMsg, 0);
  ((void (*)(void))v3->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (0051CE20) --------------------------------------------------------
void __thiscall InputTextWin::OnCommand(InputTextWin *this, unsigned int wParam, int lParam)
{
  InputTextWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  else
  {
    PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    PgWin::PostMsg(&v3->baseclass_0.baseclass_0.baseclass_0, v3->m_pkRevWin, 5u, v3->m_uiOkMsg, 0);
  }
}

//----- (0051CE70) --------------------------------------------------------
void __thiscall InputTextWin::Open(InputTextWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, char *pcText)
{
  InputTextWin *v4; // esi@1
  NiRefObjectVtbl *v5; // edi@1
  unsigned int v6; // eax@1
  NiRefObjectVtbl *v7; // edi@1
  unsigned int v8; // eax@1

  v4 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTextWin[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  ((void (*)(void))v4->m_pkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  v4->m_pkRevWin = pkRevWin;
  v4->m_uiOkMsg = uiOkMsg;
  PgWinMgr::DoModal(&Pgg_kWinMgr, &v4->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4);
  v5[43].__vecDelDtor((NiRefObject *)v4, PgWin::ms_iMsX.x - (v6 >> 1));
  v7 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v8 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4);
  v7[44].__vecDelDtor((NiRefObject *)v4, PgWin::ms_iMsY - (v8 >> 1));
}

//----- (0051CF10) --------------------------------------------------------
void __thiscall InputTextWin::_InputTextWin(InputTextWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InputTextWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InputTextWin::_vftable_;
  this->m_pkInputEdit = 0;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 998B4C: using guessed type int (__stdcall *InputTextWin___vftable_)(int uiFlags);
// 998B6C: using guessed type int (__thiscall *InputTextWin___vftable_)(void *p, char);

//----- (0051CF90) --------------------------------------------------------
bool __thiscall InputTextWin::Create(InputTextWin *this, PgFrameWork *pkFrameWork)
{
  InputTextWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  PgSprData *v13; // eax@21
  PgSprData *v14; // edi@22
  PgWinBut *v15; // eax@22
  PgWinBut *v16; // edi@22
  PgWin *v17; // ST4C_4@22
  PgFont *v18; // ST48_4@22
  unsigned int v19; // ST44_4@22
  unsigned int v20; // eax@22
  PgWinText *v21; // edi@22
  NiRefObjectVtbl *v22; // ebx@22
  char *v23; // eax@22
  PgSprData *v24; // edi@22
  PgWinBut *v25; // eax@22
  PgWinBut *v26; // edi@22
  PgWin *v27; // ST4C_4@22
  PgFont *v28; // ST48_4@22
  unsigned int v29; // ST44_4@22
  unsigned int v30; // eax@22
  PgWinText *v31; // edi@22
  NiRefObjectVtbl *v32; // ebx@22
  char *v33; // eax@22
  PgFont *v34; // eax@22
  int v35; // edi@22
  unsigned int v36; // ebx@24
  PgFont *v37; // ST48_4@24
  unsigned int v38; // ST44_4@24
  int v39; // eax@24
  PgWinText *v40; // eax@24
  int v41; // ebx@24
  PgWinText *v42; // ebx@33
  NiRefObjectVtbl *v43; // edi@33
  char *v44; // eax@33
  NiNode *v45; // esi@34
  const char *v46; // [sp+24h] [bp-48h]@16
  int *v47; // [sp+28h] [bp-44h]@16
  int *v48; // [sp+2Ch] [bp-40h]@16
  NiSourceTexture *v49; // [sp+30h] [bp-3Ch]@16
  PgFont *pkFont; // [sp+44h] [bp-28h]@22
  unsigned int uiWidth; // [sp+48h] [bp-24h]@20
  unsigned int uiHeight; // [sp+4Ch] [bp-20h]@20
  NiSourceTexture *pkTexture; // [sp+50h] [bp-1Ch]@1
  int uiLeft; // [sp+54h] [bp-18h]@11
  int uiTop; // [sp+58h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-10h]@1
  int v57; // [sp+68h] [bp-4h]@1
  signed int i; // [sp+74h] [bp+8h]@22

  v2 = this;
  spNode.m_pObject = 0;
  v57 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "CalculatorWin", 0) )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v49 = v10;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  else
  {
    v49 = 0;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v46, v47, v48, v49);
  v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, (NiSourceTexture *)v3);
    PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkInputEdit = EditWin::CreateWin(
                          uiLeft + 2,
                          uiTop + 4,
                          uiWidth,
                          uiHeight,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          NORMAL,
                          0x10u,
                          3u,
                          0,
                          0,
                          1);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v15 = PgWinBut::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v16 = v15;
  v17 = (PgWin *)v15;
  v18 = Font::Get(0);
  v19 = ((int (__thiscall *)(PgWinBut *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v16);
  v20 = ((int (__thiscall *)(PgWinBut *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v16);
  v21 = PgWinText::CreateWin(0, 1, v20, v19, v18, v17, 0, 0);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0x4F5F499Fu);
  v22[118].__vecDelDtor((NiRefObject *)v21, (unsigned int)v23);
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor04", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnClick04");
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnOver04");
  v25 = PgWinBut::CreateWin(uiLeft, uiTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v26 = v25;
  v27 = (PgWin *)v25;
  v28 = Font::Get(0);
  v29 = ((int (__thiscall *)(PgWinBut *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v26);
  v30 = ((int (__thiscall *)(PgWinBut *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v26);
  v31 = PgWinText::CreateWin(0, 1, v30, v29, v28, v27, 0, 0);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v31,
    5u);
  v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v33 = TextData::Get(0x88A297E1u);
  v32[118].__vecDelDtor((NiRefObject *)v31, (unsigned int)v33);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  v34 = Font::Get(0);
  pkFont = v34;
  i = 0;
  v35 = (int)v2->m_apkTextWin;
  while ( 1 )
  {
    v36 = v34->m_uiDefHeight;
    v37 = v34;
    v38 = v34->m_uiDefHeight;
    v39 = ((int (__thiscall *)(InputTextWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
    v40 = PgWinText::CreateWin(8, i * (v36 + 1) + 8, v39 - 16, v38, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v41 = *(_DWORD *)v35;
    pkTexture = (NiSourceTexture *)v40;
    if ( (PgWinText *)v41 != v40 )
    {
      if ( v41 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) && v41 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v41)(v41, 1);
        v40 = (PgWinText *)pkTexture;
      }
      *(_DWORD *)v35 = v40;
      if ( v40 )
        InterlockedIncrement((volatile LONG *)&v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v35 + 240))(0);
    v35 += 4;
    ++i;
    if ( i >= 2 )
      break;
    v34 = pkFont;
  }
  ((void (__stdcall *)(signed int))v2->m_apkTextWin[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  v42 = v2->m_apkTextWin[0].m_pObject;
  v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData::Get(0xEAF9353Bu);
  v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
  ((void (__thiscall *)(InputTextWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v57 = -1;
  if ( spNode.m_pObject )
  {
    v45 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v45 )
        v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0051D470) --------------------------------------------------------
void __thiscall InputTextWin::InputTextWin(InputTextWin *this)
{
  InputTextWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InputTextWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InputTextWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 998B4C: using guessed type int (__stdcall *InputTextWin___vftable_)(int uiFlags);
// 998B6C: using guessed type int (__thiscall *InputTextWin___vftable_)(void *p, char);

//----- (0051D4F0) --------------------------------------------------------
InputTextWin *__cdecl InputTextWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  InputTextWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x270u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &InputTextWin::_vftable_;
    *((_DWORD *)v2 + 58) = &InputTextWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 616,
      4u,
      2,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (InputTextWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 998B4C: using guessed type int (__stdcall *InputTextWin___vftable_)(int uiFlags);
// 998B6C: using guessed type int (__thiscall *InputTextWin___vftable_)(void *p, char);

//----- (0051D650) --------------------------------------------------------
void *__thiscall InputTextWin::_scalar_deleting_destructor_(InputTextWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InputTextWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InputTextWin::_vftable_;
  this->m_pkInputEdit = 0;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 998B4C: using guessed type int (__stdcall *InputTextWin___vftable_)(int uiFlags);
// 998B6C: using guessed type int (__thiscall *InputTextWin___vftable_)(void *p, char);

//----- (0051D6E0) --------------------------------------------------------
void __thiscall ChargedItemUseTask::OnStart(ChargedItemUseTask *this)
{
  ChargedItemUseTask *v1; // esi@1

  v1 = this;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x22u, &this->m_kChargedItemWithDrawPacket, 4);
  v1->m_eState = 0;
}

//----- (0051D700) --------------------------------------------------------
void __thiscall InvWin::SetInvType(InvWin *this, unsigned int uiInvType)
{
  this->m_uiInvType = uiInvType;
}

//----- (0051D710) --------------------------------------------------------
void __thiscall InvWin::SetActive(InvWin *this, bool bActive)
{
  this->m_bActive = bActive;
}

//----- (0051D720) --------------------------------------------------------
bool __thiscall InvWin::GetActive(InvWin *this)
{
  return this->m_bActive;
}

//----- (0051D730) --------------------------------------------------------
bool __thiscall InvWin::IsLock(InvWin *this)
{
  return this->m_bLock;
}

//----- (0051D740) --------------------------------------------------------
void __thiscall InvTabButWin::InvTabButWin(InvTabButWin *this)
{
  InvTabButWin *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InvTabButWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InvTabButWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
}
// 99949C: using guessed type int (__stdcall *InvTabButWin___vftable_)(int uiFlags);
// 9994BC: using guessed type int (__thiscall *InvTabButWin___vftable_)(void *p, char);

//----- (0051D770) --------------------------------------------------------
void __thiscall InvTabButWin::_InvTabButWin(InvTabButWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InvTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InvTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 99949C: using guessed type int (__stdcall *InvTabButWin___vftable_)(int uiFlags);
// 9994BC: using guessed type int (__thiscall *InvTabButWin___vftable_)(void *p, char);

//----- (0051D790) --------------------------------------------------------
bool __thiscall InvTabButWin::Create(InvTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  return PgWinBut::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, uiCmdMsg, 0, 0) != 0;
}

//----- (0051D7C0) --------------------------------------------------------
void __thiscall ChargedItemIcon::ChargedItemIcon(ChargedItemIcon *this)
{
  ChargedItemIcon *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemIcon::_vftable_;
  v1->m_dwChargedItemID = -1;
}
// 9996F4: using guessed type int (__stdcall *ChargedItemIcon___vftable_)(int uiFlags);
// 999714: using guessed type int (__thiscall *ChargedItemIcon___vftable_)(void *p, char);

//----- (0051D7F0) --------------------------------------------------------
void __thiscall ChargedItemIcon::_ChargedItemIcon(ChargedItemIcon *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemIcon::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 9996F4: using guessed type int (__stdcall *ChargedItemIcon___vftable_)(int uiFlags);
// 999714: using guessed type int (__thiscall *ChargedItemIcon___vftable_)(void *p, char);

//----- (0051D810) --------------------------------------------------------
bool __thiscall ChargedItemIcon::Create(ChargedItemIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent) != 0;
}

//----- (0051D830) --------------------------------------------------------
void __thiscall ChargedItemIcon::SetChargedItem(ChargedItemIcon *this, unsigned int dwShopItemID)
{
  this->m_dwChargedItemID = dwShopItemID;
  ItemIcon::SetChargedItem(&this->baseclass_0, dwShopItemID);
}

//----- (0051D850) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::ChargedItemInvenWin(ChargedItemInvenWin *this)
{
  ChargedItemInvenWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemInvenWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemInvenWin::_vftable_;
  v1->m_apkItemIcon[0] = 0;
  v1->m_apkItemIcon[1] = 0;
  v1->m_apkItemIcon[2] = 0;
  v1->m_apkItemIcon[3] = 0;
  v1->m_apkItemIcon[4] = 0;
  v1->m_apkItemIcon[5] = 0;
  v1->m_apkItemIcon[6] = 0;
  v1->m_apkItemIcon[7] = 0;
  v1->m_apkItemIcon[8] = 0;
  v1->m_apkItemIcon[9] = 0;
  v1->m_apkItemIcon[10] = 0;
  v1->m_apkItemIcon[11] = 0;
  v1->m_apkItemIcon[12] = 0;
  v1->m_apkItemIcon[13] = 0;
  v1->m_apkItemIcon[14] = 0;
  v1->m_apkItemIcon[15] = 0;
  v1->m_apkItemIcon[16] = 0;
  v1->m_apkItemIcon[17] = 0;
  v1->m_apkItemIcon[18] = 0;
  v1->m_apkItemIcon[19] = 0;
  v1->m_apkItemIcon[20] = 0;
  v1->m_apkItemIcon[21] = 0;
  v1->m_apkItemIcon[22] = 0;
  v1->m_apkItemIcon[23] = 0;
  v1->m_uiCurrPage = 0;
}
// 999980: using guessed type int (__stdcall *ChargedItemInvenWin___vftable_)(int uiFlags);
// 99999C: using guessed type int (__thiscall *ChargedItemInvenWin___vftable_)(void *p, char);

//----- (0051D910) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::_ChargedItemInvenWin(ChargedItemInvenWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemInvenWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemInvenWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 999980: using guessed type int (__stdcall *ChargedItemInvenWin___vftable_)(int uiFlags);
// 99999C: using guessed type int (__thiscall *ChargedItemInvenWin___vftable_)(void *p, char);

//----- (0051D930) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::SendPageInfoReq(ChargedItemInvenWin *this)
{
  ChargedItemInvenWin *kProto; // [sp+0h] [bp-4h]@1

  kProto = this;
  LOWORD(kProto) = LOWORD(this->m_uiCurrPage);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x20u, &kProto, 2);
}

//----- (0051D960) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::Refresh(ChargedItemInvenWin *this)
{
  ChargedItemInvenWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1
  int v4; // edi@1
  int v5; // esi@1
  signed int v6; // ebx@1
  int v7; // esi@3
  PROTO_CHARGED_ITEM_INFO *v8; // eax@4

  v1 = this;
  v2 = this->m_pkPageNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = fs("%d");
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageNumText, (unsigned int)v3);
  v4 = (int)v1->m_apkItemIcon;
  v5 = (int)v1->m_apkItemIcon;
  v6 = 24;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 608))(-1);
    v5 += 4;
    --v6;
  }
  while ( v6 );
  v7 = 0;
  do
  {
    v8 = CChargedItem::Seek(&g_kChargedItem, v7);
    if ( !v8 )
      break;
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 608))(v8->ItemCode);
    ++v7;
    v4 += 4;
  }
  while ( v7 < 24 );
}

//----- (0051D9F0) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::DirectMessage(ChargedItemInvenWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ChargedItemInvenWin *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 48 )
  {
    ChargedItemInvenWin::Refresh((ChargedItemInvenWin *)((char *)this - 232));
    LOWORD(iMsgTag) = LOWORD(v4->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr);
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x20u, &iMsgTag, 2);
  }
}

//----- (0051DA30) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::OnHelpLink(ChargedItemInvenWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ChrInv");
}

//----- (0051DA60) --------------------------------------------------------
bool __thiscall CompensationItemIcon::Create(CompensationItemIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent) != 0;
}

//----- (0051DA80) --------------------------------------------------------
void __thiscall CompensationItemIcon::SetChargedItem(CompensationItemIcon *this, unsigned int dwShopItemID)
{
  this->m_dwChargedItemID = dwShopItemID;
  ItemIcon::SetChargedItem(&this->baseclass_0, dwShopItemID);
}

//----- (0051DAA0) --------------------------------------------------------
void __thiscall CompensationInvWin::CompensationInvWin(CompensationInvWin *this)
{
  CompensationInvWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CompensationInvWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CompensationInvWin::_vftable_;
  v1->m_apkItemIcon[0] = 0;
  v1->m_apkItemIcon[1] = 0;
  v1->m_apkItemIcon[2] = 0;
  v1->m_apkItemIcon[3] = 0;
  v1->m_apkItemIcon[4] = 0;
  v1->m_apkItemIcon[5] = 0;
  v1->m_apkItemIcon[6] = 0;
  v1->m_apkItemIcon[7] = 0;
  v1->m_apkItemIcon[8] = 0;
  v1->m_apkItemIcon[9] = 0;
  v1->m_apkItemIcon[10] = 0;
  v1->m_apkItemIcon[11] = 0;
  v1->m_apkItemIcon[12] = 0;
  v1->m_apkItemIcon[13] = 0;
  v1->m_apkItemIcon[14] = 0;
  v1->m_apkItemIcon[15] = 0;
  v1->m_apkItemIcon[16] = 0;
  v1->m_apkItemIcon[17] = 0;
  v1->m_apkItemIcon[18] = 0;
  v1->m_apkItemIcon[19] = 0;
  v1->m_apkItemIcon[20] = 0;
  v1->m_apkItemIcon[21] = 0;
  v1->m_apkItemIcon[22] = 0;
  v1->m_apkItemIcon[23] = 0;
  v1->m_uiCurrPage = 0;
}
// 999B68: using guessed type int (__stdcall *CompensationInvWin___vftable_)(int uiFlags);
// 999B84: using guessed type int (__thiscall *CompensationInvWin___vftable_)(void *p, char);

//----- (0051DB60) --------------------------------------------------------
void __thiscall CompensationInvWin::_CompensationInvWin(CompensationInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CompensationInvWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CompensationInvWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 999B68: using guessed type int (__stdcall *CompensationInvWin___vftable_)(int uiFlags);
// 999B84: using guessed type int (__thiscall *CompensationInvWin___vftable_)(void *p, char);

//----- (0051DB80) --------------------------------------------------------
bool __thiscall CompensationInvWin::EatDropInstance(CompensationInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  return 0;
}

//----- (0051DB90) --------------------------------------------------------
void __thiscall CompensationInvWin::OnOpenPage(CompensationInvWin *this)
{
  CompensationInvWin *kProto; // [sp+0h] [bp-4h]@1

  kProto = this;
  LOWORD(kProto) = LOWORD(this->m_uiCurrPage);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x2Cu, &kProto, 2);
}

//----- (0051DBC0) --------------------------------------------------------
void __thiscall CompensationInvWin::Change(CompensationInvWin *this, Item *pkItem, unsigned int uiInvIndex)
{
  ItemIcon::SetItem(&this->m_apkItemIcon[uiInvIndex]->baseclass_0, pkItem, 1);
}

//----- (0051DBE0) --------------------------------------------------------
void __thiscall CompensationInvWin::OnHelpLink(CompensationInvWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ChrInv");
}

//----- (0051DC10) --------------------------------------------------------
bool __thiscall InventoryWin::Change(InventoryWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex)
{
  InvWin *v4; // ecx@3
  CompensationInvWin *v6; // ecx@11

  if ( uiInvType == 9 )
  {
    if ( uiInvIndex < 0xC0 )
    {
      v4 = this->m_apkInvWin[uiInvIndex];
      goto LABEL_4;
    }
    return 0;
  }
  if ( uiInvType == 8 )
  {
    v4 = this->m_apkEquipWin[uiInvIndex];
LABEL_4:
    if ( v4 )
      ItemIcon::SetItem(&v4->baseclass_0, pkItem, 1);
    return 1;
  }
  if ( uiInvType != 2 || uiInvIndex >= 0xC0 )
    return 0;
  v6 = this->m_pkCompensationInvenWin;
  if ( !v6 )
    return 1;
  ItemIcon::SetItem(&v6->m_apkItemIcon[uiInvIndex]->baseclass_0, pkItem, 1);
  return 1;
}

//----- (0051DC90) --------------------------------------------------------
void __thiscall InventoryWin::OnInputPrivateStoreBuyClientItemCount(InventoryWin *this, unsigned int uiBuyLot)
{
  GameFrameWork::NcBoothItemTradeReq(
    (GameFrameWork *)this->baseclass_0.m_pkFrameWork,
    PrivateStoreWin::ms_BoothHandle,
    LOBYTE(this->m_uiCurInvIndex),
    uiBuyLot);
}
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (0051DCC0) --------------------------------------------------------
void __thiscall InventoryWin::RefreshChargedItemInven(InventoryWin *this)
{
  if ( !this->m_bChargedStart )
    ChargedItemInvenWin::Refresh(this->m_pkChargedItemInvenWin);
}

//----- (0051DCF0) --------------------------------------------------------
void __thiscall InventoryWin::OnHelpLink(InventoryWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ChrInv");
}

//----- (0051DD20) --------------------------------------------------------
void __thiscall InventoryWin::SetAutoPickMinimon(InventoryWin *this, const bool bAutoPickMinimon)
{
  this->m_bAutoPickMinimon = bAutoPickMinimon;
}

//----- (0051DD30) --------------------------------------------------------
bool __thiscall InventoryWin::SetSenderInvPos(InventoryWin *this, unsigned int uiPos)
{
  bool result; // al@2

  if ( uiPos == -1 )
  {
    this->m_uiSenderInvPos = -1;
    result = 0;
  }
  else
  {
    this->m_uiSenderInvPos = uiPos;
    result = 1;
  }
  return result;
}

//----- (0051DD60) --------------------------------------------------------
bool __thiscall InventoryWin::SetReceiverInvPos(InventoryWin *this, unsigned int uiPos)
{
  bool result; // al@2

  if ( uiPos == -1 )
  {
    this->m_uiReceiverInvPos = -1;
    result = 0;
  }
  else
  {
    this->m_uiReceiverInvPos = uiPos;
    result = 1;
  }
  return result;
}

//----- (0051DD90) --------------------------------------------------------
void __thiscall InventoryWin::OnArrange(InventoryWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v1 || GameFrameWork::IsAvailableArrange((GameFrameWork *)v1) )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x4Au, 0, 0);
}

//----- (0051DDD0) --------------------------------------------------------
void __thiscall InventoryWin::SetEnableAutoArrange(InventoryWin *this, bool bEnable)
{
  InventoryWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkArrangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bEnable);
  ((void (__stdcall *)(_DWORD))v2->m_pkArrangeDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bEnable == 0);
}

//----- (0051DE10) --------------------------------------------------------
void __thiscall InventoryWin::OnOpenMagicBox(InventoryWin *this)
{
  InventoryWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x4Cu, 0, 0);
}

//----- (0051DE50) --------------------------------------------------------
void __thiscall InventoryWin::ShowRewardNewMark(InventoryWin *this, bool bShow)
{
  bool v2; // al@1

  v2 = this->m_bRewardStart;
  this->m_bRewardNew = v2 && bShow;
  ((void (__stdcall *)(_BYTE))this->m_pkNewRewardItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
}

//----- (0051DE90) --------------------------------------------------------
void __thiscall InventoryWin::ShowChargedNewMark(InventoryWin *this, bool bShow)
{
  this->m_bChargedNew = this->m_bChargedStart && bShow;
  ((void (__stdcall *)(_DWORD))this->m_pkNewChargedItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(this->m_bChargedNew);
}

//----- (0051DED0) --------------------------------------------------------
void __thiscall InventoryWin::SetStartNewMark(InventoryWin *this)
{
  *(_WORD *)&this->m_bRewardStart = 257;
}

//----- (0051DEE0) --------------------------------------------------------
bool __thiscall InventoryWin::GetIsViewNewMark(InventoryWin *this)
{
  return this->m_bRewardNew || this->m_bChargedNew;
}

//----- (0051DF00) --------------------------------------------------------
void __thiscall ChargedItemUseTask::SetChargedInvenIndex(ChargedItemUseTask *this, unsigned int uiIndex)
{
  ChargedItemUseTask *v2; // esi@1
  PROTO_CHARGED_ITEM_INFO *v3; // eax@1

  v2 = this;
  v3 = CChargedItem::Seek(&g_kChargedItem, uiIndex);
  if ( v3 )
    v2->m_kChargedItemWithDrawPacket.ItemOrderNo = v3->ItemOrderNo;
  else
    v2->baseclass_0.baseclass_0.m_eTaskState = 2;
}

//----- (0051DF30) --------------------------------------------------------
void __thiscall ChargedItemUseTask::DirectMessage(ChargedItemUseTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ChargedItemUseTask *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( *(_DWORD *)pvBody )
    {
      if ( *(_DWORD *)pvBody == 1 )
        this->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
    }
    else
    {
      NetMgr::SendNetMsgZoneMgr(
        &g_kNetMgr,
        0xCu,
        0x22u,
        &this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator,
        4);
      v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = 0;
    }
  }
}

//----- (0051DF80) --------------------------------------------------------
void __thiscall InvWin::InvWin(InvWin *this)
{
  InvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InvWin::_vftable_;
  v1->m_spSubImagePlane.m_pObject = 0;
  v1->m_spSubImageTexProp.m_pObject = 0;
  v1->baseclass_0.m_pkLotText = 0;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = 9;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  *(_WORD *)&v1->m_bActive = 0;
}
// 999D50: using guessed type int (__stdcall *InvWin___vftable_)(int uiFlags);
// 999D6C: using guessed type int (__thiscall *InvWin___vftable_)(void *p, char);

//----- (0051E020) --------------------------------------------------------
void __thiscall InvWin::_InvWin(InvWin *this)
{
  InvWin *v1; // esi@1
  NiTexturingProperty *v2; // edi@1
  NiScreenElements *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InvWin::_vftable_;
  v2 = this->m_spSubImageTexProp.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spSubImagePlane.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  ItemIcon::_ItemIcon(&v1->baseclass_0);
}
// 999D50: using guessed type int (__stdcall *InvWin___vftable_)(int uiFlags);
// 999D6C: using guessed type int (__thiscall *InvWin___vftable_)(void *p, char);

//----- (0051E0D0) --------------------------------------------------------
bool __thiscall InvTabButWin::EatDropInstance(InvTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PgCursor::ms_bKeepDrop = 1;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)();
  return 1;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (0051E0F0) --------------------------------------------------------
void __thiscall CompensationItemIcon::CompensationItemIcon(CompensationItemIcon *this)
{
  CompensationItemIcon *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CompensationItemIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CompensationItemIcon::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_dwChargedItemID = -1;
  v1->m_uiInvIndex = -1;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 999FE0: using guessed type int (__stdcall *CompensationItemIcon___vftable_)(int uiFlags);
// 999FFC: using guessed type int (__thiscall *CompensationItemIcon___vftable_)(void *p, char);

//----- (0051E150) --------------------------------------------------------
void __thiscall CompensationItemIcon::_CompensationItemIcon(CompensationItemIcon *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CompensationItemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CompensationItemIcon::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 999FE0: using guessed type int (__stdcall *CompensationItemIcon___vftable_)(int uiFlags);
// 999FFC: using guessed type int (__thiscall *CompensationItemIcon___vftable_)(void *p, char);

//----- (0051E180) --------------------------------------------------------
void __thiscall CompensationItemIcon::SetDropContents(CompensationItemIcon *this, Item *pkItem, unsigned int uiInvIndex, bool b)
{
  CompensationItemIcon *v4; // esi@1

  v4 = this;
  this->m_kDropContents.m_eSenderType = 3;
  this->m_kDropContents.m_eType = 0;
  if ( pkItem )
  {
    this->m_kDropContents.m_apvParam[1] = 0;
    this->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    this->m_kDropContents.m_apvParam[0] = pkItem;
    this->m_kDropContents.m_uiLot = ((int (*)(void))pkItem->baseclass_0.vfptr[3].__vecDelDtor)();
  }
  v4->m_kDrop.m_pkSender = (PgWin *)v4;
  PgCursor::ms_pkDrop = (int)&v4->m_kDrop;
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051E1E0) --------------------------------------------------------
void __thiscall CompensationInvWin::OnInvLClick(CompensationInvWin *this, unsigned int uiInvIndex)
{
  CompensationInvWin *v2; // esi@1
  Item *v3; // edi@1
  CompensationItemIcon *v4; // esi@2

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkItemIcon[uiInvIndex]->baseclass_0);
  if ( v3 )
  {
    v4 = v2->m_apkItemIcon[uiInvIndex];
    v4->m_kDropContents.m_eSenderType = 3;
    v4->m_kDropContents.m_eType = 0;
    v4->m_kDropContents.m_apvParam[0] = v3;
    v4->m_kDropContents.m_apvParam[1] = 0;
    v4->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    v4->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
    v4->m_kDrop.m_pkSender = (PgWin *)v4;
    PgCursor::ms_pkDrop = (int)&v4->m_kDrop;
    SoundMgr::PlayItemPutSound(&g_kSoundMgr, v3->m_kStruct.itemid);
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051E260) --------------------------------------------------------
void __thiscall InventoryWin::InventoryWin(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  MsgBox *v2; // edi@1
  NiNode *v3; // edi@6
  NiNode *v4; // edi@11

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InventoryWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InventoryWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkContents = 0;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_spMsgBox.m_pObject = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kMarkCheck);
  NsEffect::NsEffect(&v1->m_kEffect);
  v1->m_spEffect.m_pObject = 0;
  v1->m_pRunArrangeButEff.m_pObject = 0;
  v1->m_pRunArrangeInvenEff.m_pObject = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  memset(v1->m_apkInvWin, 0, sizeof(v1->m_apkInvWin));
  v1->m_apkEquipWin[0] = 0;
  v1->m_apkEquipWin[1] = 0;
  v1->m_apkEquipWin[2] = 0;
  v1->m_apkEquipWin[3] = 0;
  v1->m_apkEquipWin[4] = 0;
  v1->m_apkEquipWin[5] = 0;
  v1->m_apkEquipWin[6] = 0;
  v1->m_apkEquipWin[7] = 0;
  v1->m_apkEquipWin[8] = 0;
  v1->m_apkEquipWin[9] = 0;
  v1->m_apkEquipWin[10] = 0;
  v1->m_apkEquipWin[11] = 0;
  v1->m_apkEquipWin[12] = 0;
  v1->m_apkEquipWin[13] = 0;
  v1->m_apkEquipWin[14] = 0;
  v1->m_apkEquipWin[15] = 0;
  v1->m_apkEquipWin[16] = 0;
  v1->m_apkEquipWin[17] = 0;
  v1->m_apkEquipWin[18] = 0;
  v1->m_apkEquipWin[19] = 0;
  v1->m_apkEquipWin[20] = 0;
  v1->m_apkEquipWin[21] = 0;
  v1->m_apkEquipWin[22] = 0;
  v1->m_apkEquipWin[23] = 0;
  v1->m_apkEquipWin[24] = 0;
  v1->m_apkEquipWin[25] = 0;
  v1->m_apkEquipWin[26] = 0;
  v1->m_apkEquipWin[27] = 0;
  v1->m_apkEquipWin[28] = 0;
  v1->m_apkEquipWin[29] = 0;
  v1->m_apkActiveTabWin[0] = 0;
  v1->m_apkActiveTabWin[1] = 0;
  v1->m_apkActiveTabWin[2] = 0;
  v1->m_apkActiveTabWin[3] = 0;
  v1->m_apkActiveTabWin[4] = 0;
  v1->m_apkActiveTabWin[5] = 0;
  v1->m_apkActiveTabWin[6] = 0;
  v1->m_apkActiveTabWin[7] = 0;
  v1->m_iActivePage = 0;
  v1->m_pTargetItem = 0;
  v1->m_bDivide = 0;
  v1->m_pkChargedItemInvenWin = 0;
  v1->m_pkCompensationInvenWin = 0;
  v1->m_pkInchenBtn = 0;
  v2 = v1->m_spMsgBox.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spMsgBox.m_pObject = 0;
  }
  v1->m_iEnchantAddItemInvIdx = -1;
  v1->m_pkAutoPickBtn = 0;
  v1->m_pkAutoPickDisable = 0;
  v1->m_pkAutoPickON = 0;
  v1->m_pkAutoPickOFF = 0;
  *(_WORD *)&v1->m_bAutoPickMinimon = 0;
  v1->m_uiReceiverInvPos = -1;
  v1->m_uiSenderInvPos = -1;
  v1->m_pkInvMagicBoxBut = 0;
  v1->m_pkDisMagicBoxBut = 0;
  v1->m_pkAutoUseWinOpenBtn = 0;
  v1->m_pkAutoUseDisable = 0;
  v1->m_apkArrangeButEff = 0;
  v1->m_apkArrangeInvenEff = 0;
  v1->m_pkArrangeBut = 0;
  v3 = v1->m_pRunArrangeButEff.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_pRunArrangeButEff.m_pObject = 0;
  }
  v4 = v1->m_pRunArrangeInvenEff.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_pRunArrangeInvenEff.m_pObject = 0;
  }
  v1->m_pkArrangeDisable = 0;
  v1->m_pkNewRewardItem = 0;
  v1->m_pkNewChargedItem = 0;
  *(_DWORD *)&v1->m_bRewardStart = 0;
  v1->m_bShowEquip = 1;
  v1->m_bAutoPickCheck = 0;
  v1->m_pEquipTheme = 0;
  v1->m_nOpenPage = 0;
  v1->m_pkInvPanel = 0;
  v1->m_pkMoneyPanel = 0;
  v1->m_pkFunctionPanel = 0;
  v1->m_pkGoldBtn = 0;
  v1->m_pkSilverBtn = 0;
  v1->m_pkCopperBtn = 0;
  v1->m_pkGemBtn = 0;
  v1->m_pkGoldInput = 0;
  v1->m_pkSilverInput = 0;
  v1->m_pkCopperInput = 0;
  v1->m_pkGemInput = 0;
  v1->m_pkInvenTheme = 0;
  v1->m_pkChrEquipOnOffBut = 0;
  v1->m_pkChargedItemOffTabWin = 0;
  v1->m_pkCompensationItemOffTabWin = 0;
  memset(v1->m_pkInvSlot, 0, sizeof(v1->m_pkInvSlot));
  v1->m_pkNumSpr[0] = 0;
  v1->m_pkNumSpr[1] = 0;
  v1->m_pkNumSpr[2] = 0;
  v1->m_pkNumSpr[3] = 0;
  v1->m_pkNumSpr[4] = 0;
  v1->m_pkNumSpr[5] = 0;
  v1->m_pkNumSpr[6] = 0;
  v1->m_pkNumSpr[7] = 0;
  v1->currPcItemId = -1;
  v1->iEffectKey = -1;
  v1->m_pkRandomOptCountRecoverWin = 0;
  v1->m_bBlinkActive = 0;
  v1->m_iBlinkSlotNum = 9999;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99A268: using guessed type int (__stdcall *InventoryWin___vftable_)(int uiFlags);
// 99A284: using guessed type int (__thiscall *InventoryWin___vftable_)(void *p, char);

//----- (0051E620) --------------------------------------------------------
void __thiscall InventoryWin::_InventoryWin(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  PgWin *v2; // eax@1
  NiNode *v3; // edi@3
  NiNode *v4; // edi@7
  NiNode *v5; // edi@11
  MsgBox *v6; // edi@15

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InventoryWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InventoryWin::_vftable_;
  v2 = (PgWin *)this->m_pkRandomOptCountRecoverWin;
  this->m_pTargetItem = 0;
  if ( v2 )
  {
    PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, v2, 2u, 0, 0);
    v1->m_pkRandomOptCountRecoverWin = 0;
  }
  v3 = v1->m_pRunArrangeInvenEff.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_pRunArrangeButEff.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v1->m_spEffect.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  NsEffect::_NsEffect(&v1->m_kEffect);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  v6 = v1->m_spMsgBox.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99A268: using guessed type int (__stdcall *InventoryWin___vftable_)(int uiFlags);
// 99A284: using guessed type int (__thiscall *InventoryWin___vftable_)(void *p, char);

//----- (0051E780) --------------------------------------------------------
void __thiscall InventoryWin::OnInvLClickPrivateStoreMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  Item *v3; // eax@1

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v2->m_kDropContents.m_eSenderType = 0;
  v2->m_kDropContents.m_eType = 0;
  if ( v3 )
  {
    v2->m_kDropContents.m_apvParam[0] = v3;
    v2->m_kDropContents.m_apvParam[1] = 0;
    v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
  }
  v2->m_kDrop.m_pkSender = (PgWin *)v2;
  PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051E7F0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvRClickShopMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1

  v2 = this;
  if ( ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0) )
    GameFrameWork::NcItemSellReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex, 1u);
}

//----- (0051E820) --------------------------------------------------------
void __thiscall InventoryWin::OnInvLClickBankMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  Item *v3; // edi@1

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v2->m_kDropContents.m_eSenderType = 0;
  v2->m_kDropContents.m_eType = 0;
  if ( v3 )
  {
    v2->m_kDropContents.m_apvParam[0] = v3;
    v2->m_kDropContents.m_apvParam[1] = 0;
    v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
  }
  v2->m_kDrop.m_pkSender = (PgWin *)v2;
  PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
  SoundMgr::PlayItemPutSound(&g_kSoundMgr, v3->m_kStruct.itemid);
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051E8A0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvLClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  Item *v3; // edi@1

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v2->m_kDropContents.m_eSenderType = 0;
  v2->m_kDropContents.m_eType = 0;
  if ( v3 )
  {
    v2->m_kDropContents.m_apvParam[0] = v3;
    v2->m_kDropContents.m_apvParam[1] = 0;
    v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
  }
  v2->m_kDrop.m_pkSender = (PgWin *)v2;
  PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
  SoundMgr::PlayItemPutSound(&g_kSoundMgr, v3->m_kStruct.itemid);
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051E920) --------------------------------------------------------
void __thiscall InventoryWin::OnInvLClickGttStoreMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  Item *v3; // edi@1

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v2->m_kDropContents.m_eSenderType = 0;
  v2->m_kDropContents.m_eType = 0;
  if ( v3 )
  {
    v2->m_kDropContents.m_apvParam[0] = v3;
    v2->m_kDropContents.m_apvParam[1] = 0;
    v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
  }
  v2->m_kDrop.m_pkSender = (PgWin *)v2;
  PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
  SoundMgr::PlayItemPutSound(&g_kSoundMgr, v3->m_kStruct.itemid);
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051E9A0) --------------------------------------------------------
void __thiscall InventoryWin::OnClickRepairItem(InventoryWin *this, ITEM_INVEN kFrom)
{
  InventoryWin *v2; // edi@1
  ItemRepairWin *v3; // esi@1
  IDirectMessenger *v4; // ecx@2
  IDirectMessenger *v5; // ecx@4

  v2 = this;
  v3 = (ItemRepairWin *)this->baseclass_0.m_pkFrameWork[33].m_kMsgQ.m_uiAlloced;
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(this->baseclass_0.m_pkFrameWork[33].m_kMsgQ.m_uiAlloced) )
  {
    ItemRepairWin::SetRepairItemSlot(v3, kFrom);
    v4 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker;
    if ( v4 )
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->vfptr->SendDirectMessage)(
        72,
        &kFrom,
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker;
    if ( v5 )
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->vfptr->DirectDispatchToParent)(
        72,
        &kFrom,
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      72,
      &kFrom,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
}

//----- (0051EA20) --------------------------------------------------------
void __thiscall InventoryWin::OnResetRecoverCountState(InventoryWin *this)
{
  PgWin *v1; // ecx@4

  if ( dword_B30F2C )
  {
    if ( InventoryWin::ms_uiMode == 9 )
      InventoryWin::ms_uiMode = 0;
    dword_B30F2C = 0;
    this->m_iRecoveryCountItemInvIdx = -1;
    v1 = (PgWin *)this->m_pkRandomOptCountRecoverWin;
    if ( v1 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F2C: using guessed type int dword_B30F2C;

//----- (0051EA60) --------------------------------------------------------
unsigned int __thiscall InventoryWin::FindItem(InventoryWin *this, unsigned __int16 ItemID)
{
  unsigned int v2; // esi@1
  ItemIcon **v3; // edi@1
  Item *v4; // eax@2
  ItemInfo *v5; // eax@3

  v2 = 0;
  v3 = (ItemIcon **)this->m_apkInvWin;
  while ( 1 )
  {
    v4 = ItemIcon::GetItem(*v3);
    if ( v4 )
    {
      v5 = v4->m_pkInfo;
      if ( v5 )
      {
        if ( v5->ID == ItemID )
          break;
      }
    }
    ++v2;
    ++v3;
    if ( (signed int)v2 >= 192 )
      return 193;
  }
  return v2;
}

//----- (0051EAB0) --------------------------------------------------------
unsigned int __thiscall InventoryWin::GetFuncItemCount(InventoryWin *this, ItemFuncEnum e, const bool bFindUsingInven)
{
  unsigned int v3; // ebx@1
  InventoryWin *v4; // esi@1
  int v5; // eax@1
  ItemIcon **v6; // esi@4
  int v7; // edi@4
  Item *v8; // eax@5
  ItemInfo *v9; // ecx@6

  v3 = 0;
  v4 = this;
  v5 = 192;
  if ( bFindUsingInven )
  {
    *(_DWORD *)&bFindUsingInven = 0;
    ChargedItemList::GetTotalEffectingValue(EE_MOREINVENTORY, (unsigned int *)&bFindUsingInven);
    v5 = 8 * (3 * bFindUsingInven + 6);
  }
  if ( (unsigned int)v5 > 0 )
  {
    v6 = (ItemIcon **)v4->m_apkInvWin;
    v7 = v5;
    do
    {
      v8 = ItemIcon::GetItem(*v6);
      if ( v8 )
      {
        v9 = v8->m_pkInfo;
        if ( v9 )
        {
          if ( v9->ItemFunc == e )
            v3 += ((int (__thiscall *)(_DWORD))v8->baseclass_0.vfptr[3].__vecDelDtor)(v8);
        }
      }
      ++v6;
      --v7;
    }
    while ( v7 );
  }
  return v3;
}

//----- (0051EB30) --------------------------------------------------------
void __thiscall InventoryWin::SearchQuestStartItem(InventoryWin *this, unsigned __int16 qID, bool bGiveup)
{
  InventoryWin *v3; // ebx@1
  CQuest *v4; // eax@1
  CQuestData *v5; // edi@2
  unsigned int v6; // esi@2
  QUEST_DATA *v7; // eax@3
  unsigned int v8; // eax@7
  ItemIcon *v9; // ecx@8

  v3 = this;
  v4 = QuestDataMgr::GetQuest();
  if ( v4 )
  {
    v5 = v4->m_pQuestData;
    v6 = 0;
    if ( CQuestData::GetNumOfQuestData(v4->m_pQuestData) > 0u )
    {
      do
      {
        v7 = CQuestData::GetQuestDataByIndex(v5, v6);
        if ( v7 )
        {
          if ( v7->ID == qID )
          {
            if ( v7->Start.bItem )
            {
              if ( !v7->Start.bNPC )
              {
                v8 = InventoryWin::FindItem(v3, v7->Start.ItemID);
                if ( (signed int)v8 < 193 )
                {
                  v9 = (ItemIcon *)v3->m_apkInvWin[v8];
                  if ( bGiveup )
                    ItemIcon::GiveUpQuest(v9);
                  else
                    ItemIcon::DoingQuest(v9);
                }
              }
            }
          }
        }
        ++v6;
      }
      while ( (signed int)v6 < CQuestData::GetNumOfQuestData(v5) );
    }
  }
}

//----- (0051EBC0) --------------------------------------------------------
void __thiscall InventoryWin::StartSuccessEffect(InventoryWin *this)
{
  InventoryWin *v1; // esi@1

  v1 = this;
  if ( this->m_uiReceiverInvPos != -1 )
  {
    NsEffect::Start(&this->m_kEffect, Timer::ms_fCurTime);
    v1->m_kMarkCheck.m_fMarkTime = v1->m_kEffect.m_fMaxTime;
    CNSTimer_MarkCheck::ReSet(&v1->m_kMarkCheck, Timer::ms_fCurTime, OVER);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_apkInvWin[v1->m_uiReceiverInvPos]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v1->m_spEffect.m_pObject,
      1);
    NiAVObject::UpdateProperties(&v1->m_apkInvWin[v1->m_uiReceiverInvPos]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::UpdateEffects(&v1->m_apkInvWin[v1->m_uiReceiverInvPos]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0051EC50) --------------------------------------------------------
void __thiscall InventoryWin::OnCloseMagicBox(InventoryWin *this)
{
  GameFrameWork::CloseStorageMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0051EC60) --------------------------------------------------------
unsigned int __thiscall InventoryWin::FindEquipItem(InventoryWin *this, unsigned __int16 kItemID)
{
  unsigned int v2; // esi@1
  ItemIcon **v3; // edi@1
  Item *v4; // eax@3
  ItemInfo *v5; // eax@4

  v2 = 0;
  v3 = (ItemIcon **)this->m_apkEquipWin;
  while ( 1 )
  {
    if ( *v3 )
    {
      v4 = ItemIcon::GetItem(*v3);
      if ( v4 )
      {
        v5 = v4->m_pkInfo;
        if ( v5 )
        {
          if ( v5->ID == kItemID )
            break;
        }
      }
    }
    ++v2;
    ++v3;
    if ( (signed int)v2 >= 30 )
      return 31;
  }
  return v2;
}

//----- (0051ECB0) --------------------------------------------------------
void __thiscall InventoryWin::NcNewRewardAndChargedItem(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  __int16 pProto; // [sp+4h] [bp-4h]@1

  v1 = this;
  pProto = LOWORD(this->m_pkCompensationInvenWin->m_uiCurrPage);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x2Cu, &pProto, 2);
  pProto = LOWORD(v1->m_pkChargedItemInvenWin->m_uiCurrPage);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x20u, &pProto, 2);
}

//----- (0051ED10) --------------------------------------------------------
bool __thiscall ChargedItemUseTask::OnProcessNetMsg(ChargedItemUseTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  ChargedItemUseTask *v5; // edi@1
  bool result; // al@3
  __int16 v7; // ax@4
  PROTO_CHARGED_ITEM_INFO *v8; // eax@5
  char *v9; // eax@12
  char *v10; // eax@13

  v5 = this;
  if ( iDepart == 12 && iCommand == 35 )
  {
    v7 = *((_WORD *)pvData + 2);
    if ( v7 == 4161 )
    {
      v8 = CChargedItem::Find(&g_kChargedItem, *(_DWORD *)pvData);
      if ( v8 )
        CChargedItem::Del(&g_kChargedItem, v8);
      if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          48,
          0,
          &v5->baseclass_0.baseclass_0.baseclass_8);
        if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            48,
            0,
            &v5->baseclass_0.baseclass_0.baseclass_8);
      }
      v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v5->baseclass_0.baseclass_0.baseclass_8,
        48,
        0,
        &v5->baseclass_0.baseclass_0.baseclass_8);
      v5->baseclass_0.baseclass_0.m_eTaskState = 2;
      result = 1;
    }
    else
    {
      if ( v7 == 4165 )
      {
        v9 = TextData::Get(0x91A8CDCEu);
        MsgBox::Modeless(MSGBOX_OK, v9);
        v5->baseclass_0.baseclass_0.m_eTaskState = 2;
        result = 1;
      }
      else
      {
        TextData::Get(0xE90C344Bu);
        v10 = fs("%s : %d");
        MsgBox::Modeless(MSGBOX_OK, v10);
        v5->baseclass_0.baseclass_0.m_eTaskState = 2;
        result = 1;
      }
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0051EE00) --------------------------------------------------------
void __thiscall InvWin::UpdateMeWin(InvWin *this, float fCurTime)
{
  InvWin *v2; // esi@1
  unsigned int v3; // eax@1
  unsigned int v4; // eax@2
  Item *v5; // edi@3
  unsigned int v6; // eax@6
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // edx@11

  v2 = this;
  v3 = this->m_uiInvType;
  if ( v3 == 9 )
  {
    v4 = this->m_uiInvIndex;
    if ( v4 < 0xC0 )
      v5 = g_kInventory.m_aspInv[v4].m_pObject;
    else
      v5 = 0;
  }
  else
  {
    if ( v3 != 8 )
      goto LABEL_11;
    v6 = this->m_uiInvIndex;
    if ( v6 < 0x1E )
      v5 = g_kInventory.m_aspEquip[v6].m_pObject;
    else
      v5 = 0;
  }
  if ( v5 != ItemIcon::GetItem(&this->baseclass_0) )
    ItemIcon::SetItem(&v2->baseclass_0, v5, 1);
LABEL_11:
  v7 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( v2->m_bActive )
  {
    v7(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
    if ( !ItemIcon::GetItem(&v2->baseclass_0) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2,
        0);
    IconWin::UpdateMeWin(&v2->baseclass_0.baseclass_0, fCurTime);
  }
  else
  {
    v7(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  }
}

//----- (0051EEC0) --------------------------------------------------------
void __thiscall InvWin::DoAction(InvWin *this)
{
  InvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_bLock )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (0051EEF0) --------------------------------------------------------
void __thiscall InvWin::DoRAction(InvWin *this)
{
  InvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_bLock )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (0051EF20) --------------------------------------------------------
void __thiscall InvWin::OnFirstHitWin(InvWin *this)
{
  InvWin *v1; // esi@1
  Item *v2; // ebx@1
  ItemInfoWin *v3; // edi@4
  char *v4; // eax@11

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
  v2 = ItemIcon::GetItem(&v1->baseclass_0);
  if ( v2 )
  {
    if ( !v1->m_bLock )
    {
      if ( PgWin::GetParentWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0) )
      {
        v3 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
        if ( v3 )
        {
          if ( InventoryWin::ms_uiMode
            && InventoryWin::ms_uiMode != 7
            && InventoryWin::ms_uiMode != 9
            && InventoryWin::ms_uiMode != 2 )
          {
            ItemInfoWin::SetSellInfo(v3, v2, 1);
            PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          }
          else
          {
            if ( *(_BYTE *)(g_pkKeyboard + 40) & 1 )
            {
              v4 = TextData3::Get(0x42331237u);
              ItemInfoWin::SetItemToolTip(v3, v4);
              PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
            }
            else
            {
              if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin) )
                ItemInfoWin::SetItemInfo(v3, v2);
              PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
            }
          }
        }
      }
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (0051EFF0) --------------------------------------------------------
void __thiscall InvWin::OnFirstHitWinEx(InvWin *this)
{
  InvWin *v1; // esi@1
  Item *v2; // edi@1
  ItemInfoWin *v3; // ecx@4

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
  v2 = ItemIcon::GetItem(&v1->baseclass_0);
  if ( v2 )
  {
    if ( !v1->m_bLock )
    {
      if ( PgWin::GetParentWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0) )
      {
        v3 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
        if ( v3 )
        {
          if ( InventoryWin::ms_uiMode && InventoryWin::ms_uiMode != 2 )
          {
            ItemInfoWin::SetSellInfo(v3, v2, 1);
            PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          }
          else
          {
            ItemInfoWin::SetItemInfo(v3, v2);
            PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          }
        }
      }
    }
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (0051F060) --------------------------------------------------------
void __thiscall ChargedItemIcon::OnFirstHitWin(ChargedItemIcon *this)
{
  ChargedItemIcon *v1; // ebx@1
  unsigned int v2; // eax@1
  ItemShopView *v3; // esi@2
  char *v4; // edi@2
  HDC__ *v5; // ebx@3
  signed int v6; // esi@3
  int v7; // eax@4
  PgWin *v8; // ecx@5
  ChargedItemIcon *v9; // [sp+4h] [bp-108h]@1
  char acStr[256]; // [sp+8h] [bp-104h]@4
  unsigned int v11; // [sp+108h] [bp-4h]@1
  int v12; // [sp+10Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  v2 = this->m_dwChargedItemID;
  v9 = this;
  if ( v2 == -1 )
  {
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
    ToolTipWin::ClearTipText((ToolTipWin *)g_pkToolTipWin);
  }
  else
  {
    v3 = ItemShopViewTable::GetByShopID(v2);
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    ToolTipWin::ClearTipText((ToolTipWin *)g_pkToolTipWin);
    ((void (__stdcall *)(_DWORD, char *, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      0,
      v3->Name,
      255,
      255,
      255,
      0);
    ((void (__stdcall *)(signed int, _DWORD, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      1,
      " ",
      255,
      255,
      255,
      0);
    v4 = v3->Descript;
    if ( v3->Descript[0] != 45 )
    {
      v5 = Font::Get(0)->baseclass_0.m_kFontRenderStuff.hDC;
      v6 = 2;
      do
      {
        v7 = PgUtil::StringPixelCopy(acStr, v4, v5, 200);
        if ( !v7 )
          break;
        v8 = g_pkToolTipWin;
        acStr[v7] = 0;
        v4 += v7;
        ((void (__stdcall *)(signed int, _DWORD, signed int, signed int, signed int, _DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
          v6++,
          acStr,
          255,
          255,
          255,
          0);
      }
      while ( v6 < 20 );
      v1 = v9;
    }
    ((void (*)(void))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[109].__vecDelDtor)();
  }
  PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
}
// A85C00: using guessed type int __security_cookie;

//----- (0051F1C0) --------------------------------------------------------
void __thiscall CompensationItemIcon::OnFirstHitWin(CompensationItemIcon *this)
{
  CompensationItemIcon *v1; // edi@1
  unsigned int v2; // eax@1
  Item *v3; // esi@2
  ItemInfoWin *v4; // ecx@4

  v1 = this;
  v2 = this->m_uiInvIndex;
  if ( v2 >= 0xC0 || (v3 = g_kInventory.m_aspRewardInv[v2].m_pObject) == 0 )
  {
LABEL_9:
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    return;
  }
  if ( PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0) )
  {
    v4 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v4 )
    {
      if ( InventoryWin::ms_uiMode && InventoryWin::ms_uiMode != 2 )
      {
        ItemInfoWin::SetSellInfo(v4, v3, 1);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        return;
      }
      ItemInfoWin::SetItemInfo(v4, v3);
      goto LABEL_9;
    }
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (0051F220) --------------------------------------------------------
void __thiscall CompensationItemIcon::DoAction(CompensationItemIcon *this)
{
  CompensationItemIcon *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0051F250) --------------------------------------------------------
void __thiscall CompensationItemIcon::DoRAction(CompensationItemIcon *this)
{
  CompensationItemIcon *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0051F280) --------------------------------------------------------
void __thiscall CompensationInvWin::Refresh(CompensationInvWin *this)
{
  CompensationInvWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1
  ItemIcon **v4; // esi@1
  signed int v5; // edi@1
  unsigned int v6; // eax@2
  Item *v7; // [sp-8h] [bp-10h]@5
  bool v8; // [sp-4h] [bp-Ch]@5

  v1 = this;
  v2 = this->m_pkPageNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = fs("%d");
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageNumText, (unsigned int)v3);
  v4 = (ItemIcon **)v1->m_apkItemIcon;
  v5 = 24;
  do
  {
    v6 = (*v4)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    if ( v6 < 0xC0 && g_kInventory.m_aspRewardInv[v6].m_pObject )
    {
      if ( v6 < 0xC0 )
      {
        v8 = 1;
        v7 = g_kInventory.m_aspRewardInv[v6].m_pObject;
      }
      else
      {
        v8 = 1;
        v7 = 0;
      }
    }
    else
    {
      v8 = 1;
      v7 = 0;
    }
    ItemIcon::SetItem(*v4, v7, v8);
    ++v4;
    --v5;
  }
  while ( v5 );
}

//----- (0051F310) --------------------------------------------------------
void __thiscall CompensationInvWin::OnInvRClick(CompensationInvWin *this, unsigned int uiInvIndex)
{
  __int16 v2; // bx@2
  Item *v3; // esi@2
  PgFrameWork *v4; // edi@3
  unsigned int v5; // eax@3
  char *v6; // eax@4
  CompensationInvWin *kFrom; // [sp+0h] [bp-4h]@1

  kFrom = this;
  if ( !PgCursor::ms_pkDrop )
  {
    v2 = uiInvIndex;
    v3 = ItemIcon::GetItem(&this->m_apkItemIcon[uiInvIndex]->baseclass_0);
    if ( v3 )
    {
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v5 = Inventory::GetInvIdxLotIsNotMax(&g_kInventory, v3);
      if ( v5 == -1 )
      {
        v6 = TextData::Get(0x91A8CDCEu);
        GameFrameWork::AddSysMsg((GameFrameWork *)v4, v6);
      }
      else
      {
        LOWORD(kFrom) = v2 & 0x3FF | 0x800;
        LOWORD(uiInvIndex) = v5 & 0x3FF | 0x2400;
        GameFrameWork::NcItemRelocReq((GameFrameWork *)v4, (ITEM_INVEN *)&kFrom, (ITEM_INVEN *)&uiInvIndex);
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, v3->m_kStruct.itemid);
      }
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051F3C0) --------------------------------------------------------
void __thiscall CompensationInvWin::DirectMessage(CompensationInvWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 49 )
    CompensationInvWin::Refresh((CompensationInvWin *)((char *)this - 232));
}

//----- (0051F3E0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftLClickPrivateStoreMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  InvWin *v3; // ecx@1
  Item *v4; // edi@2
  GameFrameWork *v5; // ebx@4
  char *v6; // ST0C_4@4
  int v7; // eax@4

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_bDivide = 0;
      if ( (unsigned int)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4) > 1 )
      {
        v2->m_bDivide = 1;
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(0xFBF1412Eu);
        v7 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        GameFrameWork::OnOpenDivideWin(v5, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, v7 - 1, v6, 0);
      }
    }
  }
}

//----- (0051F470) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftRClickPrivateStoreMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  Item *v3; // edi@2
  GameFrameWork *v4; // ebx@4
  char *v5; // ST0C_4@4
  unsigned int v6; // eax@4

  v2 = this;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 2 )
  {
    v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
    v2->m_uiCurInvIndex = uiInvIndex;
    if ( (unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3) <= 1
      || (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)() )
    {
      GameFrameWork::NcBoothItemTradeReq(
        (GameFrameWork *)v2->baseclass_0.m_pkFrameWork,
        PrivateStoreWin::ms_BoothHandle,
        LOBYTE(v2->m_uiCurInvIndex),
        1u);
    }
    else
    {
      v4 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
      v5 = TextData::Get(0x37494293u);
      v6 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      GameFrameWork::OnOpenDivideWin(v4, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u, v6, v5, 1u);
    }
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (0051F520) --------------------------------------------------------
void __thiscall InventoryWin::OnInvLClickNormalMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  InvWin *v3; // ecx@1
  Item *v4; // eax@2
  Item *v5; // edi@2
  ActionViewInfo *v6; // eax@4

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    v5 = v4;
    if ( v4 )
    {
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[1].__vecDelDtor)(v4) == 27 )
      {
        v6 = ActionViewTable::GetByInxName(v5->m_pkInfo->InxName);
        if ( v6 )
          v2->m_kDropContents.nTableIndexNum = v6->nIndex;
      }
      v2->m_kDropContents.m_eSenderType = 0;
      v2->m_kDropContents.m_eType = 0;
      v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
      v2->m_kDropContents.m_apvParam[0] = v5;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[3].__vecDelDtor)(v5);
      v2->m_kDrop.m_pkSender = (PgWin *)v2;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, v5->m_kStruct.itemid);
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0051F5E0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftLClickNormalMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  InvWin *v3; // ecx@1
  Item *v4; // edi@2
  GameFrameWork *v5; // ebx@4
  char *v6; // ST0C_4@4
  int v7; // eax@4

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_bDivide = 0;
      if ( (unsigned int)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4) > 1 )
      {
        v2->m_bDivide = 1;
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(0xFBF1412Eu);
        v7 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        GameFrameWork::OnOpenDivideWin(v5, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, v7 - 1, v6, 1u);
      }
    }
  }
}

//----- (0051F670) --------------------------------------------------------
void __thiscall InventoryWin::OnInvLClickShopMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin::OnInvLClickNormalMode(this, uiInvIndex);
}

//----- (0051F680) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftLClickShopMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  InvWin *v3; // ecx@1
  Item *v4; // edi@2
  GameFrameWork *v5; // ebx@4
  char *v6; // ST0C_4@4
  int v7; // eax@4

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_bDivide = 0;
      if ( (unsigned int)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4) > 1 )
      {
        v2->m_bDivide = 1;
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(0xFBF1412Eu);
        v7 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        GameFrameWork::OnOpenDivideWin(v5, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, v7 - 1, v6, 1u);
      }
    }
  }
}

//----- (0051F710) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftRClickShopMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // edi@1
  Item *v3; // eax@1
  Item *v4; // esi@1
  NiRefObjectVtbl *v5; // eax@4
  Item *v6; // ecx@4
  int v7; // eax@5
  GameFrameWork *v8; // ebx@6
  char *v9; // ST0C_4@6
  unsigned int v10; // eax@6
  unsigned int v11; // eax@9
  char *v12; // eax@13
  MsgBox *v13; // eax@13

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v4 = v3;
  if ( v3 && v3->m_pkInfo )
  {
    if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
    {
      v5 = v3->baseclass_0.vfptr;
      v6 = v4;
      if ( !byte_B5BB2D )
      {
        v7 = ((int (__thiscall *)(_DWORD))v5[4].__vecDelDtor)(v4);
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        if ( v7 != 1 )
        {
          v8 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
          v9 = TextData::Get(0x4C907C7Fu);
          v10 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
          GameFrameWork::OnOpenDivideWin(v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, v10, v9, 1u);
          return;
        }
LABEL_13:
        v12 = TextData::Get(0x4A432A41u);
        v13 = MsgBox::Modal(MSGBOX_OKCANCEL, v12);
        if ( v2 )
          ((void (__stdcall *)(_DWORD))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        else
          ((void (__stdcall *)(_DWORD))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(0);
        return;
      }
    }
    else
    {
      if ( !(*(_BYTE *)(g_pkKeyboard + 36) & 0x20) )
      {
        if ( byte_B5BB2D || ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[4].__vecDelDtor)(v3) != 1 )
        {
          GameFrameWork::NcItemSellReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex, 1u);
          return;
        }
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        goto LABEL_13;
      }
      v5 = v3->baseclass_0.vfptr;
      v6 = v4;
    }
    v11 = ((int (__thiscall *)(_DWORD))v5[3].__vecDelDtor)(v6);
    GameFrameWork::NcItemSellReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex, v11);
  }
}
// A9816C: using guessed type int g_pkKeyboard;
// B5BB2D: using guessed type char byte_B5BB2D;

//----- (0051F850) --------------------------------------------------------
void __thiscall InventoryWin::OnInvRClickBankMode(InventoryWin *this, unsigned int uiInvIndex)
{
  __int16 v2; // bx@1
  InventoryWin *v3; // edi@1
  Item *v4; // eax@1
  Item *v5; // esi@1
  unsigned int v6; // eax@2
  char *v7; // eax@3
  GameFrameWork *v8; // ecx@4
  ITEM_INVEN kFrom; // [sp+Ch] [bp-4h]@4

  v2 = uiInvIndex;
  v3 = this;
  v4 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v5 = v4;
  if ( v4 )
  {
    v6 = Bank::GetInvIdxLotIsNotMax(v4);
    if ( v6 == -1 )
    {
      v7 = TextData::Get(0x91A8CDCEu);
      GameFrameWork::AddSysMsg((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v7);
    }
    else
    {
      LOWORD(uiInvIndex) = v6 & 0x3FF | 0x1800;
      v8 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      kFrom.Inven = v2 & 0x3FF | 0x2400;
      GameFrameWork::NcItemRelocReq(v8, &kFrom, (ITEM_INVEN *)&uiInvIndex);
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, v5->m_kStruct.itemid);
    }
  }
}

//----- (0051F8F0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftLClickBankMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  InvWin *v3; // ecx@1
  Item *v4; // edi@2
  GameFrameWork *v5; // ebx@4
  char *v6; // ST0C_4@4
  int v7; // eax@4

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_bDivide = 0;
      if ( (unsigned int)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4) > 1 )
      {
        v2->m_bDivide = 1;
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(0xFBF1412Eu);
        v7 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        GameFrameWork::OnOpenDivideWin(v5, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, v7 - 1, v6, 1u);
      }
    }
  }
}

//----- (0051F980) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftRClickBankMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin::OnInvRClickBankMode(this, uiInvIndex);
}

//----- (0051F990) --------------------------------------------------------
void __thiscall InventoryWin::OnInvRClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex)
{
  __int16 v2; // bx@1
  InventoryWin *v3; // edi@1
  Item *v4; // eax@1
  Item *v5; // esi@1
  unsigned int v6; // eax@2
  char *v7; // eax@3
  GameFrameWork *v8; // ecx@4
  ITEM_INVEN kFrom; // [sp+Ch] [bp-4h]@4

  v2 = uiInvIndex;
  v3 = this;
  v4 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v5 = v4;
  if ( v4 )
  {
    v6 = GuildAcademyStorage::GetInvIdxLotIsNotMax(v4);
    if ( v6 == -1 )
    {
      v7 = TextData::Get(0x91A8CDCEu);
      GameFrameWork::AddSysMsg((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v7);
    }
    else
    {
      LOWORD(uiInvIndex) = v6 & 0x3FF;
      v8 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      kFrom.Inven = v2 & 0x3FF | 0x2400;
      GameFrameWork::NcItemRelocReq(v8, &kFrom, (ITEM_INVEN *)&uiInvIndex);
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, v5->m_kStruct.itemid);
    }
  }
}

//----- (0051FA30) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftLClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  InvWin *v3; // ecx@1
  Item *v4; // edi@2
  GameFrameWork *v5; // ebx@4
  char *v6; // ST0C_4@4
  int v7; // eax@4

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_bDivide = 0;
      if ( (unsigned int)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4) > 1 )
      {
        v2->m_bDivide = 1;
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(0xFBF1412Eu);
        v7 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        GameFrameWork::OnOpenDivideWin(v5, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, v7 - 1, v6, 1u);
      }
    }
  }
}

//----- (0051FAC0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftRClickGuildAcademyStorageMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin::OnInvRClickGuildAcademyStorageMode(this, uiInvIndex);
}

//----- (0051FAD0) --------------------------------------------------------
void __thiscall InventoryWin::UnEquip(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  unsigned int v3; // eax@3

  v2 = this;
  if ( g_pkMainChar->m_byMode != 5 && ItemIcon::GetItem(&this->m_apkEquipWin[uiInvIndex]->baseclass_0) )
  {
    v3 = 0;
    while ( g_kInventory.m_aspInv[v3].m_pObject )
    {
      ++v3;
      if ( v3 >= 0xC0 )
        return;
    }
    if ( v3 != -1 )
      GameFrameWork::NcItemUnequipReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex, v3);
  }
}

//----- (0051FB30) --------------------------------------------------------
void __thiscall InventoryWin::UseEquipedItem(InventoryWin *this, unsigned int uiInvIndex)
{
  char v2; // bl@2
  Item *v3; // eax@2
  ItemInfo *v4; // ecx@3
  unsigned int v5; // eax@3

  if ( g_pkMainChar->m_byMode != 5 )
  {
    v2 = uiInvIndex;
    v3 = ItemIcon::GetItem(&this->m_apkEquipWin[uiInvIndex]->baseclass_0);
    if ( v3 )
    {
      v4 = v3->m_pkInfo;
      v5 = 0;
      while ( g_kInventory.m_aspInv[v5].m_pObject )
      {
        ++v5;
        if ( v5 >= 0xC0 )
          goto LABEL_8;
      }
      if ( v5 != -1 )
        goto LABEL_9;
LABEL_8:
      if ( v4->Class != 5 )
        return;
LABEL_9:
      LOBYTE(uiInvIndex) = v2;
      BYTE1(uiInvIndex) = 8;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x15u, &uiInvIndex, 2);
    }
  }
}

//----- (0051FBA0) --------------------------------------------------------
void __thiscall InventoryWin::OnEquipRClick(InventoryWin *this, unsigned int uiInvIndex)
{
  if ( InventoryWin::ms_uiMode != 6 )
    InventoryWin::UnEquip(this, uiInvIndex);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (0051FBC0) --------------------------------------------------------
bool __thiscall InventoryWin::DropOnInv(InventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents *v3; // ebx@1
  DropContents::SenderType v4; // edi@1
  InventoryWin *v5; // esi@1
  CClientGuild *v6; // eax@10
  void *v7; // eax@12
  unsigned int v8; // ebx@14
  PgFrameWork *v9; // ecx@17
  unsigned int v10; // edi@17
  Item *v11; // eax@18
  bool result; // al@19
  GameFrameWork *v13; // ecx@20
  void *v14; // ebx@24
  ItemInfo *v15; // edi@25
  GameFrameWork *v16; // esi@26
  char *v17; // eax@26
  unsigned __int16 v18; // dx@29
  GameFrameWork *v19; // ebx@29
  char *v20; // eax@29
  int v21; // ebx@32
  PgFrameWork *v22; // ecx@33
  unsigned int v23; // eax@33
  unsigned int v24; // eax@34
  PgFrameWork *v25; // ecx@40
  unsigned int v26; // eax@40
  PgFrameWork *v27; // ecx@42
  unsigned int v28; // eax@42
  unsigned int v29; // eax@43
  GameFrameWork *v30; // ecx@47
  ITEM_INVEN kFrom; // [sp+14h] [bp-4h]@20

  v3 = pkContents;
  v4 = pkContents->m_eSenderType;
  v5 = this;
  if ( !v4 || v4 == 1 || v4 == 5 || v4 == 6 || v4 == 7 )
    goto LABEL_9;
  if ( v4 != 19 )
  {
    if ( v4 != 3 && v4 != 13 )
      return 0;
LABEL_9:
    if ( v4 != 19 )
      goto LABEL_11;
  }
  v6 = GuildTask::GetGuild();
  if ( !CClientGuild::CanIUseStorage(v6) )
    return 0;
LABEL_11:
  if ( !v3->m_eType )
  {
    v7 = v3->m_apvParam[0];
    if ( v7 )
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, *((_WORD *)v7 + 4));
  }
  v8 = v3->m_uiSenderIndex;
  if ( !v4 )
  {
    if ( v8 != uiReceiverInvIndex )
    {
      if ( !v5->m_bDivide )
      {
LABEL_20:
        v13 = (GameFrameWork *)v5->baseclass_0.m_pkFrameWork;
        kFrom.Inven = v8 & 0x3FF | 0x2400;
        LOWORD(pkContents) = uiReceiverInvIndex & 0x3FF | 0x2400;
        GameFrameWork::NcItemRelocReq(v13, &kFrom, (ITEM_INVEN *)&pkContents);
        return 1;
      }
      v9 = v5->baseclass_0.m_pkFrameWork;
      v5->m_bDivide = 0;
      v10 = v9[20].m_kMsgQ.m_uiHead;
      if ( v10 )
      {
        v11 = ItemIcon::GetItem(&v5->m_apkInvWin[v8]->baseclass_0);
        if ( (unsigned int)((int (__thiscall *)(Item *))v11->baseclass_0.vfptr[3].__vecDelDtor)(v11) > 1 )
        {
          InventoryWin::ms_kFrom.Inven = v8 & 0x3FF | 0x2400;
          InventoryWin::ms_kTo.Inven = uiReceiverInvIndex & 0x3FF | 0x2400;
          GameFrameWork::NcItemSplitReq(
            (GameFrameWork *)v5->baseclass_0.m_pkFrameWork,
            &InventoryWin::ms_kFrom,
            &InventoryWin::ms_kTo,
            *(_DWORD *)(v10 + 348));
          return 1;
        }
        goto LABEL_20;
      }
    }
    return 0;
  }
  if ( v4 == 1 )
  {
    GameFrameWork::NcItemUnequipReq((GameFrameWork *)v5->baseclass_0.m_pkFrameWork, v8, uiReceiverInvIndex);
    return 1;
  }
  if ( v4 != 5 )
  {
    if ( v4 == 6 )
    {
      v21 = v8 & 0x3FF | 0x1800;
    }
    else
    {
      if ( v4 == 7 )
      {
        GameFrameWork::NcTradeDownboardReq((GameFrameWork *)v5->baseclass_0.m_pkFrameWork, v8);
        return 1;
      }
      if ( v4 == 13 )
      {
        if ( v5->m_bDivide )
        {
          v25 = v5->baseclass_0.m_pkFrameWork;
          v5->m_bDivide = 0;
          v26 = v25[20].m_kMsgQ.m_uiHead;
          if ( v26 )
          {
            if ( *(_DWORD *)(v26 + 376) != 1 )
              return 0;
          }
        }
        v27 = v5->baseclass_0.m_pkFrameWork;
        LOWORD(pkContents) = v8 & 0x3FF | 0x1000;
        LOWORD(uiReceiverInvIndex) = uiReceiverInvIndex & 0x3FF | 0x2400;
        v28 = v27[20].m_kMsgQ.m_uiHead;
        if ( v28 && (v29 = *(_DWORD *)(v28 + 348)) != 0 )
        {
          GameFrameWork::NcItemSplitReq(
            (GameFrameWork *)v27,
            (ITEM_INVEN *)&pkContents,
            (ITEM_INVEN *)&uiReceiverInvIndex,
            v29);
          result = 1;
        }
        else
        {
          GameFrameWork::NcItemRelocReq(
            (GameFrameWork *)v27,
            (ITEM_INVEN *)&pkContents,
            (ITEM_INVEN *)&uiReceiverInvIndex);
          result = 1;
        }
        return result;
      }
      if ( v4 == 3 )
      {
        v30 = (GameFrameWork *)v5->baseclass_0.m_pkFrameWork;
        LOWORD(pkContents) = v8 & 0x3FF | 0x800;
        LOWORD(uiReceiverInvIndex) = uiReceiverInvIndex & 0x3FF | 0x2400;
        GameFrameWork::NcItemRelocReq(v30, (ITEM_INVEN *)&pkContents, (ITEM_INVEN *)&uiReceiverInvIndex);
        return 1;
      }
      if ( v4 != 19 )
        return 1;
      LOWORD(v21) = v8 & 0x3FF;
    }
    v22 = v5->baseclass_0.m_pkFrameWork;
    LOWORD(pkContents) = v21;
    LOWORD(uiReceiverInvIndex) = uiReceiverInvIndex & 0x3FF | 0x2400;
    v23 = v22[20].m_kMsgQ.m_uiHead;
    if ( v23 )
    {
      v24 = *(_DWORD *)(v23 + 348);
      if ( v24 )
      {
        GameFrameWork::NcItemSplitReq(
          (GameFrameWork *)v22,
          (ITEM_INVEN *)&pkContents,
          (ITEM_INVEN *)&uiReceiverInvIndex,
          v24);
        return 1;
      }
    }
    GameFrameWork::NcItemRelocReq((GameFrameWork *)v22, (ITEM_INVEN *)&pkContents, (ITEM_INVEN *)&uiReceiverInvIndex);
    return 1;
  }
  v14 = pkContents->m_apvParam[0];
  if ( !v14 )
    return 0;
  v15 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*(_WORD *)((char *)v14 + 1));
  if ( v15->BuyPrice > User::GetMoney(&g_kUser) )
  {
    v16 = (GameFrameWork *)v5->baseclass_0.m_pkFrameWork;
    v17 = TextData::Get(0x5B531F00u);
    GameFrameWork::AddSysMsg(v16, v17);
    return 0;
  }
  if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
  {
    v18 = *(_WORD *)((char *)v14 + 1);
    v19 = (GameFrameWork *)v5->baseclass_0.m_pkFrameWork;
    v5->m_TargetItemID = v18;
    v20 = TextData::Get(0x2C588E90u);
    GameFrameWork::OnOpenDivideWin(v19, &v5->baseclass_0.baseclass_0.baseclass_0, 0x12u, v15->MaxLot, v20, 1u);
    result = 1;
  }
  else
  {
    GameFrameWork::NcItemBuyReq(
      (GameFrameWork *)v5->baseclass_0.m_pkFrameWork,
      *(_WORD *)((char *)v14 + 1),
      v15->MaxLot);
    result = 1;
  }
  return result;
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (0051FFA0) --------------------------------------------------------
void __thiscall InventoryWin::OnActivePage(InventoryWin *this, unsigned int uiIndex)
{
  int v2; // edi@0
  signed int v3; // ebx@1
  InventoryWin *v4; // esi@1
  char *v5; // edi@2
  int v6; // edi@6
  signed int v7; // ebx@6
  int v8; // ebx@8
  unsigned int v9; // edi@9
  int v10; // [sp+10h] [bp-Ch]@2

  v3 = 8;
  v4 = this;
  if ( uiIndex < 8 )
  {
    v10 = v2;
    v5 = (char *)this->m_apkActiveTabWin;
    do
    {
      if ( *(_DWORD *)v5 )
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0);
      v5 += 4;
      --v3;
    }
    while ( v3 );
    ((void (__stdcall *)(signed int, int))v4->m_apkActiveTabWin[uiIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      1,
      v10);
    v6 = (int)v4->m_apkInvWin;
    v7 = 192;
    do
    {
      *(_BYTE *)(*(_DWORD *)v6 + 456) = 0;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 324))(0.0);
      v6 += 4;
      --v7;
    }
    while ( v7 );
    v8 = 24 * uiIndex;
    v4->m_iActivePage = 24 * uiIndex;
    if ( (signed int)(24 * uiIndex) < (signed int)(24 * uiIndex + 24) )
    {
      v9 = (unsigned int)&v4->m_apkInvWin[24 * uiIndex];
      do
      {
        *(_BYTE *)(*(_DWORD *)v9 + 456) = 1;
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v9 + 324))(0.0);
        ++v8;
        v9 += 4;
      }
      while ( v8 < v4->m_iActivePage + 24 );
    }
    ((void (__cdecl *)(_DWORD))v4->m_pkChargedItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v4->m_pkChargedItemInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v4->m_pkChargedItemInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v4->m_pkCompensationItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v4->m_pkCompensationInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v4->m_pkCompensationInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(0);
    Inventory::ClearRewardInv(&g_kInventory);
    CompensationInvWin::Refresh(v4->m_pkCompensationInvenWin);
    v4->m_nOpenPage = uiIndex;
  }
}
// 51FFA0: could not find valid save-restore pair for edi

//----- (00520100) --------------------------------------------------------
void __thiscall InventoryWin::OnChargedItemPage(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  char *v2; // edi@1
  signed int v3; // ebx@1
  int v4; // edi@5
  signed int v5; // ebx@5
  __int16 pProto; // [sp+14h] [bp-4h]@7

  v1 = this;
  v2 = (char *)this->m_apkActiveTabWin;
  v3 = 8;
  do
  {
    if ( *(_DWORD *)v2 )
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = (int)v1->m_apkInvWin;
  v5 = 192;
  do
  {
    *(_BYTE *)(*(_DWORD *)v4 + 456) = 0;
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 324))(0.0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  ((void (__stdcall *)(signed int))v1->m_pkChargedItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkChargedItemInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkChargedItemInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkCompensationItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCompensationInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCompensationInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(0);
  Inventory::ClearRewardInv(&g_kInventory);
  CompensationInvWin::Refresh(v1->m_pkCompensationInvenWin);
  CChargedItem::Clear(&g_kChargedItem);
  ChargedItemInvenWin::Refresh(v1->m_pkChargedItemInvenWin);
  pProto = LOWORD(v1->m_pkChargedItemInvenWin->m_uiCurrPage);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x20u, &pProto, 2);
  v1->m_bChargedStart = 0;
}

//----- (00520230) --------------------------------------------------------
void __thiscall InventoryWin::OnCompensationPage(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  char *v2; // edi@1
  signed int v3; // ebx@1
  int v4; // edi@5
  signed int v5; // ebx@5
  PROTO_NC_ITEM_REWARDINVENOPEN_REQ kProto; // [sp+14h] [bp-4h]@7

  v1 = this;
  v2 = (char *)this->m_apkActiveTabWin;
  v3 = 8;
  do
  {
    if ( *(_DWORD *)v2 )
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = (int)v1->m_apkInvWin;
  v5 = 192;
  do
  {
    *(_BYTE *)(*(_DWORD *)v4 + 456) = 0;
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 324))(0.0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(0);
  ((void (__stdcall *)(signed int))v1->m_pkCompensationItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkCompensationInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkCompensationInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
  Inventory::ClearRewardInv(&g_kInventory);
  CompensationInvWin::Refresh(v1->m_pkCompensationInvenWin);
  CChargedItem::Clear(&g_kChargedItem);
  ChargedItemInvenWin::Refresh(v1->m_pkChargedItemInvenWin);
  kProto.page = LOWORD(v1->m_pkCompensationInvenWin->m_uiCurrPage);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x2Cu, &kProto, 2);
  v1->m_bRewardStart = 0;
}

//----- (00520360) --------------------------------------------------------
void __thiscall InventoryWin::RefreshCompensationInv(InventoryWin *this)
{
  if ( !this->m_bRewardStart )
    CompensationInvWin::Refresh(this->m_pkCompensationInvenWin);
}

//----- (00520380) --------------------------------------------------------
void __thiscall InventoryWin::UpdateInventory(InventoryWin *this)
{
  InventoryWin *v1; // edi@1
  char *v2; // esi@2
  signed int v3; // ebx@2
  unsigned int v4; // esi@4
  int v5; // eax@6
  int auiEquipPos[26]; // [sp+10h] [bp-6Ch]@4
  unsigned int v7; // [sp+78h] [bp-4h]@1
  int v8; // [sp+7Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  if ( this->m_bShowEquip )
  {
    v2 = (char *)this->m_apkInvWin;
    v3 = 192;
    do
    {
      *(_BYTE *)(*(_DWORD *)v2 + 456) = 1;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 324))(0.0);
      v2 += 4;
      --v3;
    }
    while ( v3 );
  }
  auiEquipPos[0] = 6;
  auiEquipPos[1] = 1;
  auiEquipPos[2] = 23;
  auiEquipPos[3] = 12;
  auiEquipPos[4] = 7;
  auiEquipPos[5] = 10;
  auiEquipPos[6] = 16;
  auiEquipPos[7] = 19;
  auiEquipPos[8] = 15;
  auiEquipPos[9] = 14;
  auiEquipPos[10] = 21;
  auiEquipPos[11] = 0;
  auiEquipPos[12] = 22;
  auiEquipPos[13] = 20;
  auiEquipPos[14] = 8;
  auiEquipPos[15] = 17;
  auiEquipPos[16] = 24;
  auiEquipPos[17] = 25;
  auiEquipPos[18] = 26;
  auiEquipPos[19] = 27;
  auiEquipPos[20] = 11;
  auiEquipPos[21] = 13;
  auiEquipPos[22] = 9;
  auiEquipPos[23] = 29;
  auiEquipPos[24] = 18;
  auiEquipPos[25] = 28;
  v4 = 0;
  do
  {
    if ( v4 < 0x1E )
    {
      v5 = auiEquipPos[v4];
      if ( v5 )
      {
        v1->m_apkEquipWin[v5]->m_bActive = 1;
        v1->m_apkEquipWin[v5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor(
          (NiRefObject *)v1->m_apkEquipWin[v5],
          COERCE_UNSIGNED_INT(0.0));
      }
    }
    ++v4;
  }
  while ( v4 < 0x1A );
  if ( v1->m_bShowEquip )
    InventoryWin::OnActivePage(v1, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (005204F0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvRClickGttStoreMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  Item *v3; // eax@1
  GameFrameWork *v4; // esi@2
  char *v5; // eax@2

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  if ( v3 )
  {
    SoundMgr::PlayItemPutSound(&g_kSoundMgr, v3->m_kStruct.itemid);
    v4 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
    v5 = TextData::Get(0xE2F1C6Eu);
    GameFrameWork::AddSysMsg(v4, v5);
  }
}

//----- (00520540) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftLClickGttStoreMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // esi@1
  InvWin *v3; // ecx@1
  Item *v4; // edi@2
  GameFrameWork *v5; // ebx@4
  char *v6; // ST0C_4@4
  int v7; // eax@4

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_bDivide = 0;
      if ( (unsigned int)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4) > 1 )
      {
        v2->m_bDivide = 1;
        InventoryWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x2400;
        v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(0xFBF1412Eu);
        v7 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        GameFrameWork::OnOpenDivideWin(v5, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, v7 - 1, v6, 1u);
      }
    }
  }
}

//----- (005205D0) --------------------------------------------------------
void __thiscall InventoryWin::SetAutoPickCheck(InventoryWin *this, const bool bCheck, const bool bSysMsg)
{
  InventoryWin *v3; // esi@1
  const bool v4; // bl@4
  char *v5; // eax@6
  bool v6; // zf@10
  bool v7; // bl@11
  PgFrameWork *v8; // eax@13
  unsigned int v9; // [sp-Ch] [bp-14h]@6
  unsigned int v10; // [sp-8h] [bp-10h]@7
  int bAutoPickCheck; // [sp+4h] [bp-4h]@0
  const char *pcSysMsg; // [sp+10h] [bp+8h]@10

  v3 = this;
  if ( !this->m_pkAutoPickBtn || !this->m_pkAutoPickON || !this->m_pkAutoPickOFF )
    return;
  v4 = bCheck;
  LOBYTE(bAutoPickCheck) = bCheck;
  if ( !this->m_bAutoPickMinimon )
  {
    v4 = 0;
    LOBYTE(bAutoPickCheck) = 0;
    v10 = -856106548;
    goto LABEL_9;
  }
  if ( !bCheck )
  {
    v10 = -1007036142;
LABEL_9:
    v5 = TextData2::Get(v10);
    v9 = 1874639786;
    goto LABEL_10;
  }
  v5 = TextData2::Get(0xCBF9D9CCu);
  v9 = 1874621874;
LABEL_10:
  pcSysMsg = v5;
  TextData2::Get(v9);
  v6 = v3->m_bShowEquip == 0;
  v3->m_bAutoPickCheck = v4;
  if ( !v6 )
  {
    ((void (__stdcall *)(int))v3->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bAutoPickCheck);
    v7 = v4 == 0;
    ((void (__stdcall *)(bool))v3->m_pkAutoPickOFF->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7);
    ((void (__stdcall *)(bool))v3->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v7);
    ((void (__thiscall *)(PgWinSpr *))v3->m_pkAutoPickOFF->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v3->m_pkAutoPickOFF);
  }
  if ( bSysMsg )
  {
    v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v8 )
      GameFrameWork::AddSysMsg((GameFrameWork *)v8, pcSysMsg);
  }
}

//----- (005206E0) --------------------------------------------------------
void __thiscall InventoryWin::OnAutoPickShow(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  void *v2; // eax@2
  char v3; // bl@2
  Item *v4; // edi@2
  int v5; // eax@20
  char bRightPickEnable; // [sp+7h] [bp-1h]@2

  v1 = this;
  if ( this->m_pkAutoPickBtn )
  {
    v2 = g_kInventory.m_aspEquip[25].m_pObject;
    v3 = 0;
    v4 = g_kInventory.m_aspEquip[28].m_pObject;
    bRightPickEnable = 0;
    if ( g_kInventory.m_aspEquip[25].m_pObject )
    {
      v2 = g_kInventory.m_aspEquip[25].m_pObject->m_pkInfo;
      if ( v2 )
      {
        v2 = MinimonInfoTable::GetMinimonInfoByIDX((char *)v2 + 2);
        if ( *((_DWORD *)v2 + 9) == 1 )
          v3 = 1;
      }
    }
    if ( v4 )
    {
      v2 = v4->m_pkInfo;
      if ( v2 )
      {
        v2 = MinimonInfoTable::GetMinimonInfoByIDX((char *)v2 + 2);
        if ( *((_DWORD *)v2 + 9) == 1 )
          bRightPickEnable = 1;
      }
    }
    if ( v1->m_bShowEquip )
    {
      if ( v3 || bRightPickEnable )
        v2 = (void *)1;
      else
        LOBYTE(v2) = 0;
      v2 = (void *)((int (__stdcall *)(_DWORD))v1->m_pkAutoPickBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
    }
    if ( v3 || bRightPickEnable )
      v2 = (void *)1;
    else
      LOBYTE(v2) = 0;
    v5 = ((int (__stdcall *)(_DWORD))v1->m_pkAutoPickBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v2);
    if ( v1->m_bShowEquip )
    {
      LOBYTE(v5) = !v3 && !bRightPickEnable;
      v5 = ((int (__stdcall *)(_DWORD))v1->m_pkAutoPickDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v5);
    }
    LOBYTE(v5) = !v3 && !bRightPickEnable;
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v5);
    if ( v1->m_bShowEquip )
    {
      ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bAutoPickCheck);
      ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickOFF->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bAutoPickCheck == 0);
      ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v1->m_bAutoPickCheck == 0);
      ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickOFF->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v1->m_bAutoPickCheck);
    }
  }
}

//----- (00520860) --------------------------------------------------------
void __thiscall InventoryWin::OnAutoPickCheck(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  char v2; // al@3
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@3
  PgFrameWork *v4; // edi@6
  char v5; // al@8
  char *v6; // eax@9
  int v7; // [sp+0h] [bp-4h]@0
  signed int v8; // [sp+0h] [bp-4h]@4

  v1 = this;
  if ( this->m_pkAutoPickON && this->m_pkAutoPickOFF )
  {
    v2 = ((int (*)(void))this->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)();
    v3 = v1->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    if ( v2 == 1 )
    {
      ((void (__stdcall *)(_DWORD, int))v3)(0, v7);
      v8 = 1;
    }
    else
    {
      ((void (__stdcall *)(signed int, int))v3)(1, v7);
      v8 = 0;
    }
    ((void (__cdecl *)(signed int))v1->m_pkAutoPickOFF->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v8);
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      if ( v1->m_bAutoPickMinimon )
      {
        v5 = ((int (*)(void))v1->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)();
        PgFrameWork::AddMsg(v4, 0xFDu, v5 == 0, 0);
      }
      else
      {
        v6 = TextData2::Get(0xCCF8D9CCu);
        GameFrameWork::AddSysMsg((GameFrameWork *)v4, v6);
      }
    }
  }
}

//----- (00520920) --------------------------------------------------------
void __thiscall InventoryWin::OnAutoUseShow(InventoryWin *this)
{
  InventoryWin *v1; // ebx@1
  void *v2; // eax@2
  Item *v3; // esi@2
  int v4; // eax@20
  char bRightAutoUse; // [sp+6h] [bp-2h]@2
  char bLeftAutoUse; // [sp+7h] [bp-1h]@2

  v1 = this;
  if ( this->m_pkAutoUseWinOpenBtn )
  {
    v2 = g_kInventory.m_aspEquip[25].m_pObject;
    v3 = g_kInventory.m_aspEquip[28].m_pObject;
    bLeftAutoUse = 0;
    bRightAutoUse = 0;
    if ( g_kInventory.m_aspEquip[25].m_pObject )
    {
      v2 = g_kInventory.m_aspEquip[25].m_pObject->m_pkInfo;
      if ( v2 )
      {
        v2 = MinimonInfoTable::GetMinimonInfoByIDX((char *)v2 + 2);
        if ( *((_DWORD *)v2 + 9) == 2 )
          bLeftAutoUse = 1;
      }
    }
    if ( v3 )
    {
      v2 = v3->m_pkInfo;
      if ( v2 )
      {
        v2 = MinimonInfoTable::GetMinimonInfoByIDX((char *)v2 + 2);
        if ( *((_DWORD *)v2 + 9) == 2 )
          bRightAutoUse = 1;
      }
    }
    if ( v1->m_bShowEquip )
    {
      if ( bLeftAutoUse || bRightAutoUse )
        v2 = (void *)1;
      else
        LOBYTE(v2) = 0;
      v2 = (void *)((int (__stdcall *)(_DWORD))v1->m_pkAutoUseWinOpenBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
    }
    if ( bLeftAutoUse || bRightAutoUse )
      v2 = (void *)1;
    else
      LOBYTE(v2) = 0;
    v4 = ((int (__stdcall *)(_DWORD))v1->m_pkAutoUseWinOpenBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v2);
    if ( v1->m_bShowEquip )
    {
      LOBYTE(v4) = !bLeftAutoUse && !bRightAutoUse;
      v4 = ((int (__stdcall *)(_DWORD))v1->m_pkAutoUseDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4);
    }
    LOBYTE(v4) = !bLeftAutoUse && !bRightAutoUse;
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoUseDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v4);
  }
}

//----- (00520A40) --------------------------------------------------------
void __thiscall InventoryWin::OnOffEquipWin(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  signed int v2; // ebx@1
  char *v3; // edi@2
  IconWin **v4; // edi@4
  signed int v5; // ebx@4
  bool v6; // al@8
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // edx@8
  int v8; // edx@9
  char *v9; // edi@12
  IconWin **v10; // edi@14
  signed int v11; // ebx@14
  int v12; // edi@17
  signed int v13; // ebx@17
  int v14; // edi@19
  signed int v15; // ebx@19
  NiNode *v16; // eax@21

  v1 = this;
  v2 = 8;
  if ( this->m_bShowEquip )
  {
    v3 = (char *)this->m_apkInvTabWin;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(v1->m_bShowEquip);
      v3 += 4;
      --v2;
    }
    while ( v2 );
    v4 = (IconWin **)v1->m_apkInvWin;
    v5 = 192;
    do
    {
      IconWin::ShowFocus(*v4, v1->m_bShowEquip);
      ((void (__stdcall *)(_DWORD))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
      ++v4;
      --v5;
    }
    while ( v5 );
    ((void (__stdcall *)(_DWORD))v1->m_pkCompensationItemOffTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemOffTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    if ( v1->m_nOpenPage >= 0 )
      InventoryWin::OnActivePage(v1, v1->m_nOpenPage);
    ((void (__stdcall *)(_DWORD))v1->m_pkNewRewardItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bRewardNew);
    ((void (__stdcall *)(_DWORD))v1->m_pkNewChargedItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bChargedNew);
    v6 = ChargedItemList::IsEffecting(EE_STORAGE_ANYWHERE);
    v7 = v1->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( v6 == 1 )
    {
      ((void (__stdcall *)(_DWORD))v7)(v1->m_bShowEquip);
      ((void (__stdcall *)(_DWORD))v1->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v1->m_bShowEquip);
      ((void (__stdcall *)(_DWORD))v1->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip == 0);
      v8 = v1->m_bShowEquip == 0;
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v7)(v1->m_bShowEquip == 0);
      ((void (__stdcall *)(_DWORD))v1->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v1->m_bShowEquip == 0);
      ((void (__stdcall *)(_DWORD))v1->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
      v8 = v1->m_bShowEquip;
    }
    ((void (__stdcall *)(int))v1->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v8);
    InventoryWin::OnAutoUseShow(v1);
    InventoryWin::OnAutoPickShow(v1);
  }
  else
  {
    v9 = (char *)this->m_apkActiveTabWin;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v9 - 8) + 256))(v1->m_bShowEquip);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v9 + 256))(v1->m_bShowEquip);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v9 + 8) + 256))(v1->m_bShowEquip);
      v9 += 4;
      --v2;
    }
    while ( v2 );
    ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemDisableTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkCompensationInvenWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkCompensationItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkCompensationDisableTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkNewRewardItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkNewChargedItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickOFF->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoPickDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    v10 = (IconWin **)v1->m_apkInvWin;
    v11 = 192;
    do
    {
      IconWin::ShowFocus(*v10, v1->m_bShowEquip);
      LOBYTE((*v10)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][0]) = v1->m_bShowEquip;
      ((void (__stdcall *)(_DWORD))(*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
      ++v10;
      --v11;
    }
    while ( v11 );
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoUseWinOpenBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
    ((void (__stdcall *)(_DWORD))v1->m_pkAutoUseDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  }
  v12 = (int)v1->m_pkNumSpr;
  v13 = 8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 256))(v1->m_bShowEquip);
    v12 += 4;
    --v13;
  }
  while ( v13 );
  v14 = (int)v1->m_pkInvSlot;
  v15 = 24;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v14 + 256))(v1->m_bShowEquip);
    v14 += 4;
    --v15;
  }
  while ( v15 );
  ((void (__stdcall *)(_DWORD))v1->m_pkArrangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkChargedItemOffTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkCompensationItemOffTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkInvPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkMoneyPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkFunctionPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkGemBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkGemInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  ((void (__stdcall *)(_DWORD))v1->m_pkInvenTheme->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bShowEquip);
  v16 = v1->m_pRunArrangeInvenEff.m_pObject;
  if ( v1->m_bShowEquip )
    v16->baseclass_0.m_uFlags &= 0xFFFEu;
  else
    v16->baseclass_0.m_uFlags |= 1u;
}

//----- (00521040) --------------------------------------------------------
void __thiscall InventoryWin::ItemChatLink(InventoryWin *this, unsigned int uiLClickType, unsigned int uiInvIndex)
{
  PgFrameWork *v3; // eax@3
  GameFrameWork *v4; // ebx@3
  char *v5; // eax@5
  ItemIcon *v6; // ecx@9
  Item *v7; // eax@12
  ItemInfo *v8; // ebx@13
  int v9; // esi@13
  int v10; // eax@13
  char v11; // dl@14
  unsigned int v12; // eax@16
  void *v13; // edi@16
  char v14; // cl@17
  GameFrameWork *pkGame; // [sp+8h] [bp-2B4h]@3
  InventoryWin *v16; // [sp+Ch] [bp-2B0h]@1
  char rItemStruct; // [sp+10h] [bp-2ACh]@13
  __int16 v18; // [sp+74h] [bp-248h]@13
  char v19; // [sp+76h] [bp-246h]@13
  char chItemTagName[256]; // [sp+78h] [bp-244h]@16
  char chItemName[256]; // [sp+178h] [bp-144h]@15
  char chItemUpGrade[64]; // [sp+278h] [bp-44h]@16
  unsigned int v23; // [sp+2B8h] [bp-4h]@1
  int v24; // [sp+2BCh] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v16 = this;
  if ( uiLClickType == 3 || uiLClickType == 5 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = (GameFrameWork *)v3;
    pkGame = (GameFrameWork *)v3;
    if ( v3 && GameFrameWork::IsRoarShowWin((GameFrameWork *)v3) )
    {
      v5 = TextData3::Get(0x5F9769D4u);
      GameFrameWork::AddSysMsg(v4, v5);
      return;
    }
    if ( uiLClickType == 3 )
    {
      if ( uiInvIndex >= 0xC0 )
        return;
      v6 = (ItemIcon *)v16->m_apkInvWin[uiInvIndex];
    }
    else
    {
      if ( uiLClickType != 5 || uiInvIndex >= 0x1E )
        return;
      v6 = (ItemIcon *)v16->m_apkEquipWin[uiInvIndex];
    }
    v7 = ItemIcon::GetItem(v6);
    if ( v7 )
    {
      v8 = v7->m_pkInfo;
      memcpy(&rItemStruct, &v7->m_kStruct, 0x64u);
      v18 = *(_WORD *)((char *)&v7->m_kStruct.itemattr.binditem.portal[9].y + 1);
      v19 = BYTE3(v7->m_kStruct.itemattr.binditem.portal[9].y);
      v9 = ((int (__thiscall *)(Item *))v7->baseclass_0.vfptr[9].__vecDelDtor)(v7);
      v10 = (int)v8->Name;
      do
        v11 = *(_BYTE *)v10++;
      while ( v11 );
      strncpy(chItemName, v8->Name, v10 - (_DWORD)((char *)v8 + 35) + 1);
      if ( v9 )
      {
        sprintf(chItemUpGrade, " [+%d]");
        v12 = strlen(chItemUpGrade) + 1;
        v13 = &chItemTagName[255];
        do
        {
          v14 = *((_BYTE *)v13 + 1);
          v13 = (char *)v13 + 1;
        }
        while ( v14 );
        memcpy(v13, chItemUpGrade, v12);
      }
      sprintf(chItemTagName, "<\t%s\t>");
      if ( pkGame )
        GameFrameWork::ChatItemLink(pkGame, chItemTagName, (SHINE_ITEM_STRUCT *)&rItemStruct);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005211F0) --------------------------------------------------------
void __thiscall InvWin::SetLock(InvWin *this, bool bLock)
{
  InvWin *v2; // ebx@1
  NiProperty *v3; // edi@2
  void *v4; // eax@3
  void *v5; // esi@3
  NiProperty *v6; // esi@7
  char *v7; // eax@7
  void *v8; // eax@8
  NiProperty *v9; // eax@9
  double v10; // st7@13
  float v11; // ST14_4@15
  float v12; // ST18_4@15
  float v13; // ST1C_4@15

  v2 = this;
  if ( this->m_bLock != bLock )
  {
    v3 = NiAVObject::GetProperty(
           &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           9);
    if ( !v3 )
    {
      v4 = operator new(0x28u);
      v5 = v4;
      if ( v4 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v4);
        *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
        *((_WORD *)v5 + 14) = 0;
        *((_DWORD *)v5 + 8) = 0;
        *((_DWORD *)v5 + 9) = 1;
      }
      else
      {
        v5 = 0;
      }
      v3 = (NiProperty *)v5;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        (NiProperty *)v5);
    }
    v6 = NiAVObject::GetProperty(
           &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           3);
    v7 = 0;
    if ( !v6 )
    {
      v8 = operator new(0x60u);
      if ( v8 )
        NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v8);
      else
        v9 = 0;
      v6 = v9;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v9);
      v7 = 0;
    }
    v2->m_bLock = bLock;
    v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = (unsigned int)v7;
    v3[1].baseclass_0.m_pcName = v7;
    ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    if ( bLock )
      v10 = 0.40000001;
    else
      v10 = 1.0;
    v11 = v10;
    v12 = v10;
    v6[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(v11);
    v13 = v10;
    v6[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(v12);
    v6[2].baseclass_0.m_uiExtraDataSize = LODWORD(v13);
    NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (00521320) --------------------------------------------------------
void __thiscall CompensationInvWin::OnCommand(CompensationInvWin *this, unsigned int wParam, int lParam)
{
  unsigned int v3; // eax@2
  unsigned int v4; // eax@5
  PgFrameWork *v5; // eax@11

  switch ( wParam )
  {
    case 1u:
      v3 = this->m_uiCurrPage;
      if ( v3 )
        this->m_uiCurrPage = v3 - 1;
      LOWORD(lParam) = LOWORD(this->m_uiCurrPage);
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x2Cu, &lParam, 2);
      break;
    case 2u:
      ++this->m_uiCurrPage;
      v4 = this->m_uiCurrPage;
      if ( g_kInventory.m_uiRewardCount != 24 && v4 )
        this->m_uiCurrPage = v4 - 1;
      LOWORD(lParam) = LOWORD(this->m_uiCurrPage);
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x2Cu, &lParam, 2);
      break;
    case 5u:
      CompensationInvWin::OnInvRClick(this, lParam);
      break;
    case 6u:
      CompensationInvWin::OnInvLClick(this, lParam);
      break;
    case 3u:
      v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v5 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v5, "ChrInv");
      break;
    default:
      return;
  }
}

//----- (00521410) --------------------------------------------------------
void __thiscall InventoryWin::OnEquipLClick(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // ebx@1
  ItemIcon *v3; // ecx@1
  Item *v4; // esi@1
  Item *v5; // esi@6
  int v6; // ebx@10
  char *v7; // esi@10
  Item *v8; // edi@17
  ItemInfo *v9; // esi@19
  int v10; // esi@22
  char *v11; // eax@23
  MsgBox *v12; // eax@23
  int v13; // ebx@23
  char *v14; // esi@23
  signed int v15; // eax@27
  MsgBox **v16; // esi@29
  char *v17; // eax@30
  MsgBox *v18; // eax@30
  PgFrameWork *v19; // eax@30
  int v20; // ebx@31
  char *v21; // esi@31
  GameFrameWork *v22; // ebx@36
  char *v23; // eax@36
  char v24; // [sp+Ch] [bp-84h]@21
  char v25; // [sp+48h] [bp-48h]@21
  __int16 v26; // [sp+70h] [bp-20h]@21
  char v27; // [sp+72h] [bp-1Eh]@21
  unsigned int kFrom; // [sp+74h] [bp-1Ch]@1
  PgMsg::Frame kOkMsg; // [sp+78h] [bp-18h]@30
  unsigned int v30; // [sp+8Ch] [bp-4h]@1
  int v31; // [sp+90h] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  v2 = this;
  v3 = (ItemIcon *)this->m_apkEquipWin[uiInvIndex];
  kFrom = uiInvIndex;
  v4 = ItemIcon::GetItem(v3);
  if ( v4 )
  {
    if ( *(_BYTE *)(g_pkKeyboard + 40) & 1 )
    {
      InventoryWin::ItemChatLink(v2, 5u, uiInvIndex);
    }
    else
    {
      switch ( InventoryWin::ms_uiMode )
      {
        case 6:
          if ( uiInvIndex < 0x1E )
            v5 = g_kInventory.m_aspEquip[uiInvIndex].m_pObject;
          else
            v5 = 0;
          if ( (unsigned __int8)((int (__thiscall *)(Item *))v5->baseclass_0.vfptr[1].__vecDelDtor)(v5) == 26
            || (unsigned __int8)((int (__thiscall *)(Item *))v5->baseclass_0.vfptr[1].__vecDelDtor)(v5) == 37 )
          {
            LOWORD(kFrom) = uiInvIndex & 0x3FF | 0x2000;
            InventoryWin::OnClickRepairItem(v2, (ITEM_INVEN)(uiInvIndex & 0x3FF | 0x2000));
          }
          else
          {
            v6 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
            v7 = TextData2::Get(0xB23A203Fu);
            if ( *(_DWORD *)(v6 + 4) )
            {
              (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
              if ( *(_DWORD *)(v6 + 4) )
                (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
            }
            (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
          }
          break;
        case 7:
          if ( uiInvIndex < 0x1E )
            v8 = g_kInventory.m_aspEquip[uiInvIndex].m_pObject;
          else
            v8 = 0;
          v9 = v8->m_pkInfo;
          if ( (unsigned __int8)((int (__thiscall *)(Item *))v8->baseclass_0.vfptr[1].__vecDelDtor)(v8) != 5 || v9->Type )
          {
            v20 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
            v21 = TextData2::Get(0x569771CAu);
            if ( *(_DWORD *)(v20 + 4) )
            {
              (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v20 + 4) + 4))(25, v21, v20);
              if ( *(_DWORD *)(v20 + 4) )
                (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v20 + 4) + 20))(25, v21, v20);
            }
            (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v20 + 20))(v20, 25, v21, v20);
          }
          else
          {
            memcpy(&v24, &v8->m_kStruct, 0x64u);
            v26 = *(_WORD *)((char *)&v8->m_kStruct.itemattr.binditem.portal[9].y + 1);
            v27 = BYTE3(v8->m_kStruct.itemattr.binditem.portal[9].y);
            if ( v25 )
            {
              v10 = (int)&v2->m_spMsgBox;
              if ( !v2->m_spMsgBox.m_pObject )
              {
                v11 = TextData2::Get(0xE3E2319u);
                v12 = MsgBox::Modeless(MSGBOX_OK, v11);
                NiPointer<PopupMenuWin>::operator_(
                  (NiPointer<NiD3DDefaultShader> *)&v2->m_spMsgBox,
                  (NiD3DDefaultShader *)v12);
                v13 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
                (**(void (__thiscall ***)(_DWORD, _DWORD))(*(_DWORD *)v10 + 232))(*(_DWORD *)v10 + 232, v13);
                v14 = TextData2::Get(0xE3E2319u);
                if ( *(_DWORD *)(v13 + 4) )
                {
                  (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v13 + 4) + 4))(25, v14, v13);
                  if ( *(_DWORD *)(v13 + 4) )
                    (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v13 + 4) + 20))(25, v14, v13);
                }
                (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v13 + 20))(v13, 25, v14, v13);
              }
            }
            else
            {
              v15 = v2->m_iEnchantAddItemInvIdx;
              if ( v15 >= 0 )
              {
                if ( v15 < 192 )
                {
                  v16 = (MsgBox **)&v2->m_spMsgBox;
                  if ( !v2->m_spMsgBox.m_pObject )
                  {
                    v17 = TextData2::Get(0x123B201Cu);
                    v18 = MsgBox::Modeless(MSGBOX_OKCANCEL, v17);
                    NiPointer<PopupMenuWin>::operator_(
                      (NiPointer<NiD3DDefaultShader> *)&v2->m_spMsgBox,
                      (NiD3DDefaultShader *)v18);
                    kOkMsg.m_uiFrameWParam = v2->m_iEnchantAddItemInvIdx;
                    kOkMsg.m_uiFrameMsg = 255;
                    kOkMsg.m_uiFramelParam = kFrom | 0x2000;
                    v19 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                    MsgBox::SetFrameWorkMsgOnClose(*v16, v19, &kOkMsg, 0);
                    (*v16)->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
                      &(*v16)->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
                      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
                  }
                }
              }
            }
          }
          break;
        case 9:
          v22 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
          v23 = TextData3::Get(0x99BEF7C3u);
          GameFrameWork::AddSysMsg(v22, v23);
          break;
        default:
          v2->m_kDropContents.m_eType = 0;
          v2->m_kDropContents.m_eSenderType = 1;
          v2->m_kDropContents.m_apvParam[1] = 0;
          v2->m_kDropContents.m_apvParam[0] = v4;
          v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
          v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(Item *))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
          v2->m_kDrop.m_pkSender = (PgWin *)v2;
          PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
          SoundMgr::PlayItemPutSound(&g_kSoundMgr, v4->m_kStruct.itemid);
          break;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9816C: using guessed type int g_pkKeyboard;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005217D0) --------------------------------------------------------
void __thiscall InventoryWin::LockAllItem(InventoryWin *this)
{
  int v1; // ecx@1
  int v2; // edi@2
  NiProperty *v3; // ebx@3
  void *v4; // eax@4
  void *v5; // esi@4
  NiProperty *v6; // esi@12
  void *v7; // eax@13
  NiProperty *v8; // eax@14
  bool v9; // zf@22
  NiPointer<NiRoom> element; // [sp+Ch] [bp-18h]@4
  int v11; // [sp+10h] [bp-14h]@1
  int v12; // [sp+14h] [bp-10h]@1
  int v13; // [sp+20h] [bp-4h]@4

  v1 = (int)this->m_apkInvWin;
  v12 = v1;
  v11 = 192;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_BYTE *)(*(_DWORD *)v1 + 457) != 1 )
    {
      v3 = NiAVObject::GetProperty((NiAVObject *)v2, 9);
      if ( !v3 )
      {
        v4 = operator new(0x28u);
        v5 = v4;
        element.m_pObject = (NiRoom *)v4;
        v13 = 0;
        if ( v4 )
        {
          NiObjectNET::NiObjectNET((NiObjectNET *)v4);
          *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
          *((_WORD *)v5 + 14) = 0;
          *((_DWORD *)v5 + 8) = 0;
          *((_DWORD *)v5 + 9) = 1;
        }
        else
        {
          v5 = 0;
        }
        v3 = (NiProperty *)v5;
        element.m_pObject = (NiRoom *)v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)v5 + 1);
        v13 = 1;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v5 && !InterlockedDecrement((volatile LONG *)v5 + 1) )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
      v6 = NiAVObject::GetProperty((NiAVObject *)v2, 3);
      if ( !v6 )
      {
        v7 = operator new(0x60u);
        element.m_pObject = (NiRoom *)v7;
        v13 = 2;
        if ( v7 )
        {
          NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v7);
          v6 = v8;
        }
        else
        {
          v6 = 0;
        }
        element.m_pObject = (NiRoom *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v13 = 3;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
      }
      *(_BYTE *)(v2 + 457) = 1;
      v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
      v3[1].baseclass_0.m_pcName = 0;
      ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      *(float *)&v6[2].baseclass_0.m_spControllers.m_pObject = 0.40000001;
      *(float *)&v6[2].baseclass_0.m_ppkExtra = 0.40000001;
      *(float *)&v6[2].baseclass_0.m_uiExtraDataSize = 0.40000001;
      NiAVObject::UpdateProperties((NiAVObject *)v2);
    }
    v1 = v12 + 4;
    v9 = v11-- == 1;
    v12 += 4;
  }
  while ( !v9 );
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (005219A0) --------------------------------------------------------
void __thiscall InventoryWin::UnLockAllItem(InventoryWin *this)
{
  int v1; // ecx@1
  int v2; // edi@2
  NiProperty *v3; // ebx@3
  void *v4; // eax@4
  void *v5; // esi@4
  NiProperty *v6; // esi@12
  void *v7; // eax@13
  NiProperty *v8; // eax@14
  bool v9; // zf@22
  NiPointer<NiRoom> element; // [sp+Ch] [bp-18h]@4
  int v11; // [sp+10h] [bp-14h]@1
  int v12; // [sp+14h] [bp-10h]@1
  int v13; // [sp+20h] [bp-4h]@4

  v1 = (int)this->m_apkInvWin;
  v12 = v1;
  v11 = 192;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_BYTE *)(*(_DWORD *)v1 + 457) )
    {
      v3 = NiAVObject::GetProperty((NiAVObject *)v2, 9);
      if ( !v3 )
      {
        v4 = operator new(0x28u);
        v5 = v4;
        element.m_pObject = (NiRoom *)v4;
        v13 = 0;
        if ( v4 )
        {
          NiObjectNET::NiObjectNET((NiObjectNET *)v4);
          *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
          *((_WORD *)v5 + 14) = 0;
          *((_DWORD *)v5 + 8) = 0;
          *((_DWORD *)v5 + 9) = 1;
        }
        else
        {
          v5 = 0;
        }
        v3 = (NiProperty *)v5;
        element.m_pObject = (NiRoom *)v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)v5 + 1);
        v13 = 1;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v5 && !InterlockedDecrement((volatile LONG *)v5 + 1) )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
      v6 = NiAVObject::GetProperty((NiAVObject *)v2, 3);
      if ( !v6 )
      {
        v7 = operator new(0x60u);
        element.m_pObject = (NiRoom *)v7;
        v13 = 2;
        if ( v7 )
        {
          NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v7);
          v6 = v8;
        }
        else
        {
          v6 = 0;
        }
        element.m_pObject = (NiRoom *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v13 = 3;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
      }
      *(_BYTE *)(v2 + 457) = 0;
      v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
      v3[1].baseclass_0.m_pcName = 0;
      ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      *(float *)&v6[2].baseclass_0.m_spControllers.m_pObject = 1.0;
      *(float *)&v6[2].baseclass_0.m_ppkExtra = 1.0;
      *(float *)&v6[2].baseclass_0.m_uiExtraDataSize = 1.0;
      NiAVObject::UpdateProperties((NiAVObject *)v2);
    }
    v1 = v12 + 4;
    v9 = v11-- == 1;
    v12 += 4;
  }
  while ( !v9 );
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (00521B60) --------------------------------------------------------
void __thiscall InventoryWin::LockAllEquipItem(InventoryWin *this)
{
  int v1; // ecx@1
  int v2; // edi@2
  NiProperty *v3; // ebx@4
  void *v4; // eax@5
  void *v5; // esi@5
  NiProperty *v6; // esi@13
  void *v7; // eax@14
  NiProperty *v8; // eax@15
  bool v9; // zf@23
  NiPointer<NiRoom> element; // [sp+Ch] [bp-18h]@5
  int v11; // [sp+10h] [bp-14h]@1
  int v12; // [sp+14h] [bp-10h]@1
  int v13; // [sp+20h] [bp-4h]@5

  v1 = (int)this->m_apkEquipWin;
  v12 = v1;
  v11 = 30;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 && *(_BYTE *)(v2 + 457) != 1 )
    {
      v3 = NiAVObject::GetProperty((NiAVObject *)v2, 9);
      if ( !v3 )
      {
        v4 = operator new(0x28u);
        v5 = v4;
        element.m_pObject = (NiRoom *)v4;
        v13 = 0;
        if ( v4 )
        {
          NiObjectNET::NiObjectNET((NiObjectNET *)v4);
          *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
          *((_WORD *)v5 + 14) = 0;
          *((_DWORD *)v5 + 8) = 0;
          *((_DWORD *)v5 + 9) = 1;
        }
        else
        {
          v5 = 0;
        }
        v3 = (NiProperty *)v5;
        element.m_pObject = (NiRoom *)v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)v5 + 1);
        v13 = 1;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v5 && !InterlockedDecrement((volatile LONG *)v5 + 1) )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
      v6 = NiAVObject::GetProperty((NiAVObject *)v2, 3);
      if ( !v6 )
      {
        v7 = operator new(0x60u);
        element.m_pObject = (NiRoom *)v7;
        v13 = 2;
        if ( v7 )
        {
          NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v7);
          v6 = v8;
        }
        else
        {
          v6 = 0;
        }
        element.m_pObject = (NiRoom *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v13 = 3;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
      }
      *(_BYTE *)(v2 + 457) = 1;
      v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
      v3[1].baseclass_0.m_pcName = 0;
      ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      *(float *)&v6[2].baseclass_0.m_spControllers.m_pObject = 0.40000001;
      *(float *)&v6[2].baseclass_0.m_ppkExtra = 0.40000001;
      *(float *)&v6[2].baseclass_0.m_uiExtraDataSize = 0.40000001;
      NiAVObject::UpdateProperties((NiAVObject *)v2);
    }
    v1 = v12 + 4;
    v9 = v11-- == 1;
    v12 += 4;
  }
  while ( !v9 );
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (00521D30) --------------------------------------------------------
void __thiscall InventoryWin::UnLockAllEquipItem(InventoryWin *this)
{
  int v1; // ecx@1
  int v2; // edi@2
  NiProperty *v3; // ebx@4
  void *v4; // eax@5
  void *v5; // esi@5
  NiProperty *v6; // esi@13
  void *v7; // eax@14
  NiProperty *v8; // eax@15
  bool v9; // zf@23
  NiPointer<NiRoom> element; // [sp+Ch] [bp-18h]@5
  int v11; // [sp+10h] [bp-14h]@1
  int v12; // [sp+14h] [bp-10h]@1
  int v13; // [sp+20h] [bp-4h]@5

  v1 = (int)this->m_apkEquipWin;
  v12 = v1;
  v11 = 30;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 && *(_BYTE *)(v2 + 457) )
    {
      v3 = NiAVObject::GetProperty((NiAVObject *)v2, 9);
      if ( !v3 )
      {
        v4 = operator new(0x28u);
        v5 = v4;
        element.m_pObject = (NiRoom *)v4;
        v13 = 0;
        if ( v4 )
        {
          NiObjectNET::NiObjectNET((NiObjectNET *)v4);
          *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
          *((_WORD *)v5 + 14) = 0;
          *((_DWORD *)v5 + 8) = 0;
          *((_DWORD *)v5 + 9) = 1;
        }
        else
        {
          v5 = 0;
        }
        v3 = (NiProperty *)v5;
        element.m_pObject = (NiRoom *)v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)v5 + 1);
        v13 = 1;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v5 && !InterlockedDecrement((volatile LONG *)v5 + 1) )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
      v6 = NiAVObject::GetProperty((NiAVObject *)v2, 3);
      if ( !v6 )
      {
        v7 = operator new(0x60u);
        element.m_pObject = (NiRoom *)v7;
        v13 = 2;
        if ( v7 )
        {
          NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v7);
          v6 = v8;
        }
        else
        {
          v6 = 0;
        }
        element.m_pObject = (NiRoom *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v13 = 3;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
      }
      *(_BYTE *)(v2 + 457) = 0;
      v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
      v3[1].baseclass_0.m_pcName = 0;
      ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      *(float *)&v6[2].baseclass_0.m_spControllers.m_pObject = 1.0;
      *(float *)&v6[2].baseclass_0.m_ppkExtra = 1.0;
      *(float *)&v6[2].baseclass_0.m_uiExtraDataSize = 1.0;
      NiAVObject::UpdateProperties((NiAVObject *)v2);
    }
    v1 = v12 + 4;
    v9 = v11-- == 1;
    v12 += 4;
  }
  while ( !v9 );
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (00521F00) --------------------------------------------------------
void __thiscall InventoryWin::OnCreateNewSocket(InventoryWin *this, bool bSucss)
{
  InventoryWin *v2; // esi@1
  signed int v3; // eax@3
  PgWin *v4; // eax@8
  MsgBox *v5; // edi@9
  ITEM_INVEN kInven; // [sp+4h] [bp-4h]@2

  v2 = this;
  if ( dword_B30F28 )
  {
    if ( Inventory::FindEnchantSoketAdd(&g_kInventory, &kInven) )
    {
      v3 = v2->m_iEnchantAddItemInvIdx;
      if ( v3 >= 0 )
      {
        if ( v3 < 192 )
          InvWin::SetLock(v2->m_apkInvWin[v3], 0);
      }
    }
    if ( InventoryWin::ms_uiMode == 7 )
      InventoryWin::ms_uiMode = 0;
  }
  dword_B30F28 = 0;
  v4 = (PgWin *)v2->m_spMsgBox.m_pObject;
  if ( v4 )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
    v5 = v2->m_spMsgBox.m_pObject;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v5,
          1u);
      v2->m_spMsgBox.m_pObject = 0;
    }
  }
  if ( v2->m_iEnchantAddItemInvIdx > 0 )
    v2->m_iEnchantAddItemInvIdx = -1;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F28: using guessed type int dword_B30F28;

//----- (00521FC0) --------------------------------------------------------
InvWin *__cdecl InvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  InvWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1D4u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    InvWin::InvWin((InvWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *))(*(_DWORD *)v6 + 620))(
                          v6,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (InvWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (00522100) --------------------------------------------------------
InvTabButWin *__cdecl InvTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  InvTabButWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x144u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v5);
    *(_DWORD *)v6 = &InvTabButWin::_vftable_;
    *((_DWORD *)v6 + 58) = &InvTabButWin::_vftable_;
    *((_BYTE *)v6 + 254) = 1;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int))(*(_DWORD *)v6 + 560))(
                          v6,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (InvTabButWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 99949C: using guessed type int (__stdcall *InvTabButWin___vftable_)(int uiFlags);
// 9994BC: using guessed type int (__thiscall *InvTabButWin___vftable_)(void *p, char);

//----- (00522260) --------------------------------------------------------
ChargedItemIcon *__cdecl ChargedItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  ChargedItemIcon *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1C4u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v3);
    *(_DWORD *)v4 = &ChargedItemIcon::_vftable_;
    *((_DWORD *)v4 + 58) = &ChargedItemIcon::_vftable_;
    *((_DWORD *)v4 + 112) = -1;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 612))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (ChargedItemIcon *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9996F4: using guessed type int (__stdcall *ChargedItemIcon___vftable_)(int uiFlags);
// 999714: using guessed type int (__thiscall *ChargedItemIcon___vftable_)(void *p, char);

//----- (005223B0) --------------------------------------------------------
ChargedItemInvenWin *__cdecl ChargedItemInvenWin::CreateWin()
{
  void *v0; // eax@1
  int v1; // eax@2
  int v2; // esi@2
  PgWin *v3; // edi@8
  ChargedItemInvenWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x188u);
  result.m_pObject = (PgWin *)v0;
  v6 = 0;
  if ( v0 )
  {
    ChargedItemInvenWin::ChargedItemInvenWin((ChargedItemInvenWin *)v0);
    v2 = v1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)(v2 + 4));
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 452))(v2) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    v4 = (ChargedItemInvenWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}

//----- (005224E0) --------------------------------------------------------
bool __thiscall ChargedItemInvenWin::Create(ChargedItemInvenWin *this)
{
  ChargedItemInvenWin *v1; // edi@1
  bool result; // al@2
  NiTexturePalette *v3; // esi@3
  char *v4; // eax@5
  signed int v5; // ebx@6
  IconWin **v6; // esi@6
  ItemIcon *v7; // eax@7
  IconWin *v8; // eax@7
  bool v9; // zf@7
  PgSprData *v10; // esi@8
  PgSprData *v11; // esi@8
  NiSourceTexture *v12; // esi@8
  PgSprData *v13; // esi@9
  PgSprData *v14; // esi@10
  NiPointer<PgSprData::PgHitTester> *v15; // ecx@10
  unsigned int v16; // esi@10
  unsigned int v17; // ebx@10
  PgFont *v18; // eax@10
  PgWinText *v19; // eax@10
  NiNode *v20; // esi@11
  unsigned int v21; // [sp-10h] [bp-80h]@1
  int uiWidth; // [sp+0h] [bp-70h]@6
  int uiHeight; // [sp+4h] [bp-6Ch]@6
  int v24; // [sp+8h] [bp-68h]@6
  int iOffY; // [sp+Ch] [bp-64h]@6
  int iOffX; // [sp+10h] [bp-60h]@6
  int iLeft; // [sp+14h] [bp-5Ch]@7
  int iTop; // [sp+18h] [bp-58h]@7
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-54h]@3
  char acShapeName[64]; // [sp+20h] [bp-50h]@7
  unsigned int v31; // [sp+60h] [bp-10h]@1
  int v32; // [sp+6Ch] [bp-4h]@3
  int v33; // [sp+70h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v21 = (unsigned int)&v33 ^ __security_cookie;
  v1 = this;
  if ( !PgWin::Create(&this->baseclass_0, 0, 0, 1u, 1u, 0, "ChargedItemInvenWin", 0) )
    goto LABEL_17;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v32 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ChrInv.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( spNode.m_pObject )
  {
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "Frame",
      &iOffX,
      &iOffY,
      (unsigned int *)&uiWidth,
      (unsigned int *)&uiHeight);
    v5 = 4;
    v6 = (IconWin **)v1->m_apkItemIcon;
    v24 = 24;
    do
    {
      sprintf(acShapeName, "InvItemSlot%03d");
      PgUtil::GetTriShapeRect(
        &spNode.m_pObject->baseclass_0,
        acShapeName,
        &iLeft,
        &iTop,
        (unsigned int *)&uiWidth,
        (unsigned int *)&uiHeight);
      v7 = (ItemIcon *)ChargedItemIcon::CreateWin(iLeft - iOffX + 1, iTop - iOffY + 1, &v1->baseclass_0);
      *v6 = (IconWin *)v7;
      ItemIcon::SetItem(v7, 0, 1);
      ((void (__stdcall *)(signed int))(*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(v5);
      (*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
      IconWin::ShowFocus(*v6, 1);
      v8 = *v6;
      ++v6;
      ++v5;
      v9 = v24-- == 1;
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
    }
    while ( !v9 );
    v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &iLeft, &iTop, 0);
    PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "PrePageClick");
    PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "PrePageOver");
    PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v10, &v1->baseclass_0, 1u, 0, 0);
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextPageNor", &iLeft, &iTop, 0);
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "NextPageClick");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "NextPageOver");
    PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v11, &v1->baseclass_0, 2u, 0, 0);
    v12 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "HelpLinkNor",
           v21) )
    {
      v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v12);
      PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v13, &v1->baseclass_0, 3u, 0, 0);
    }
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PageNum", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v14, &v1->baseclass_0, 0, 0);
    v15 = v14->m_akHitTester.m_pBase;
    v16 = v15->m_pObject->m_uiHeight;
    v17 = v15->m_pObject->m_uiWidth;
    v18 = Font::Get(SMALL);
    v19 = PgWinText::CreateWin(iLeft - iOffX - 2, iTop - iOffY + 2, v17, v16, v18, &v1->baseclass_0, 0, 0);
    v1->m_pkPageNumText = v19;
    ((void (__thiscall *)(PgWinText *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v19);
    ((void (__stdcall *)(_DWORD))v1->m_pkPageNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
    ((void (__stdcall *)(_DWORD))v1->m_pkPageNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v1->baseclass_0.m_bDroppable = 0;
    v1->m_uiCurrPage = 0;
    ChargedItemInvenWin::Refresh(v1);
    v32 = -1;
    if ( spNode.m_pObject )
    {
      v20 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v20 )
          v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
      }
    }
    result = 1;
  }
  else
  {
LABEL_17:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00522870) --------------------------------------------------------
CompensationItemIcon *__cdecl CompensationItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  CompensationItemIcon *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x220u);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    CompensationItemIcon::CompensationItemIcon((CompensationItemIcon *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, PgWin *))(*(_DWORD *)v5 + 612))(
                          v5,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (CompensationItemIcon *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (005229B0) --------------------------------------------------------
CompensationInvWin *__cdecl CompensationInvWin::CreateWin()
{
  void *v0; // eax@1
  int v1; // eax@2
  int v2; // esi@2
  PgWin *v3; // edi@8
  CompensationInvWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x188u);
  result.m_pObject = (PgWin *)v0;
  v6 = 0;
  if ( v0 )
  {
    CompensationInvWin::CompensationInvWin((CompensationInvWin *)v0);
    v2 = v1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)(v2 + 4));
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 452))(v2) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    v4 = (CompensationInvWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}

//----- (00522AE0) --------------------------------------------------------
bool __thiscall CompensationInvWin::Create(CompensationInvWin *this)
{
  int v1; // ebx@1
  CompensationInvWin *v2; // edi@1
  bool result; // al@2
  NiTexturePalette *v4; // esi@3
  char *v5; // eax@5
  IconWin **v6; // esi@6
  ItemIcon *v7; // eax@7
  PgSprData *v8; // esi@8
  PgSprData *v9; // esi@8
  NiSourceTexture *v10; // esi@8
  PgSprData *v11; // esi@9
  PgSprData *v12; // esi@10
  NiPointer<PgSprData::PgHitTester> *v13; // ecx@10
  unsigned int v14; // esi@10
  unsigned int v15; // ebx@10
  PgFont *v16; // eax@10
  PgWinText *v17; // eax@10
  NiNode *v18; // eax@10
  NiNode *v19; // esi@11
  unsigned int v20; // [sp-10h] [bp-80h]@1
  int uiHeight; // [sp+0h] [bp-70h]@6
  int v22; // [sp+4h] [bp-6Ch]@7
  int uiWidth; // [sp+8h] [bp-68h]@6
  int iOffY; // [sp+Ch] [bp-64h]@6
  int iOffX; // [sp+10h] [bp-60h]@6
  int iLeft; // [sp+14h] [bp-5Ch]@7
  int iTop; // [sp+18h] [bp-58h]@7
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-54h]@3
  char acShapeName[64]; // [sp+20h] [bp-50h]@7
  unsigned int v30; // [sp+60h] [bp-10h]@1
  int v31; // [sp+6Ch] [bp-4h]@3
  int v32; // [sp+70h] [bp+0h]@1

  v30 = (unsigned int)&v32 ^ __security_cookie;
  v20 = (unsigned int)&v32 ^ __security_cookie;
  v1 = 0;
  v2 = this;
  if ( !PgWin::Create(&this->baseclass_0, 0, 0, 1u, 1u, 0, "CompensationInvWin", 0) )
    goto LABEL_17;
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v31 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\ChrInv.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( spNode.m_pObject )
  {
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "Frame",
      &iOffX,
      &iOffY,
      (unsigned int *)&uiWidth,
      (unsigned int *)&uiHeight);
    v6 = (IconWin **)v2->m_apkItemIcon;
    do
    {
      v22 = v1 + 1;
      sprintf(acShapeName, "InvItemSlot%03d");
      PgUtil::GetTriShapeRect(
        &spNode.m_pObject->baseclass_0,
        acShapeName,
        &iLeft,
        &iTop,
        (unsigned int *)&uiWidth,
        (unsigned int *)&uiHeight);
      v7 = (ItemIcon *)CompensationItemIcon::CreateWin(iLeft - iOffX + 1, iTop - iOffY + 1, &v2->baseclass_0);
      *v6 = (IconWin *)v7;
      ItemIcon::SetItem(v7, 0, 1);
      ((void (__stdcall *)(signed int))(*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(5);
      (*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
      IconWin::ShowFocus(*v6, 1);
      (*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
      LODWORD((*v6)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][2]) = v1;
      v1 = v22;
      ++v6;
    }
    while ( v22 < 24 );
    v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &iLeft, &iTop, 0);
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "PrePageClick");
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "PrePageOver");
    PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v8, &v2->baseclass_0, 1u, 0, 0);
    v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextPageNor", &iLeft, &iTop, 0);
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "NextPageClick");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "NextPageOver");
    PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v9, &v2->baseclass_0, 2u, 0, 0);
    v10 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "HelpLinkNor",
           v20) )
    {
      v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v10);
      PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v11, &v2->baseclass_0, 3u, 0, 0);
    }
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PageNum", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v12, &v2->baseclass_0, 0, 0);
    v13 = v12->m_akHitTester.m_pBase;
    v14 = v13->m_pObject->m_uiHeight;
    v15 = v13->m_pObject->m_uiWidth;
    v16 = Font::Get(SMALL);
    v17 = PgWinText::CreateWin(iLeft - iOffX - 2, iTop - iOffY + 2, v15, v14, v16, &v2->baseclass_0, 0, 0);
    v2->m_pkPageNumText = v17;
    ((void (__thiscall *)(PgWinText *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v17);
    ((void (__stdcall *)(_DWORD))v2->m_pkPageNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("1");
    ((void (__stdcall *)(_DWORD))v2->m_pkPageNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v18 = spNode.m_pObject;
    v2->baseclass_0.m_bDroppable = 0;
    v2->m_uiCurrPage = 0;
    v31 = -1;
    if ( v18 )
    {
      v19 = v18;
      if ( !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v19 )
          v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
      }
    }
    result = 1;
  }
  else
  {
LABEL_17:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00522E60) --------------------------------------------------------
InventoryWin *__cdecl InventoryWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  InventoryWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0xA08u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    InventoryWin::InventoryWin((InventoryWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (InventoryWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00522F90) --------------------------------------------------------
bool __thiscall InventoryWin::Create(InventoryWin *this, PgFrameWork *pkFrameWork)
{
  InventoryWin *v2; // ebx@1
  char *v3; // eax@3
  NiNode *v4; // eax@3
  NiNode *v5; // esi@3
  NiNode *v6; // edi@3
  NiTexturePalette *v7; // esi@10
  char *v8; // eax@12
  PgSprData *v9; // eax@13
  NiNode *v10; // esi@14
  bool result; // al@18
  int v12; // esi@19
  int v13; // edi@19
  PgSprData *v14; // eax@22
  PgSprData *v15; // eax@22
  PgWinSpr *v16; // eax@22
  NiNode *v17; // edx@22
  PgSprData *v18; // eax@22
  void *v19; // eax@22
  int v20; // ecx@22
  PgWinBut *v21; // eax@27
  PgSprData *v22; // eax@29
  PgSprData *v23; // eax@29
  PgSprData *v24; // eax@29
  PgWinSpr *v25; // eax@29
  bool v26; // zf@29
  PgSprData *v27; // eax@32
  PgSprData *v28; // eax@32
  PgWinSpr *v29; // eax@32
  NiNode *v30; // edx@32
  PgSprData *v31; // eax@32
  NiSourceTexture *v32; // eax@32
  NiRefObjectVtbl *v33; // edx@32
  PgFont *v34; // eax@35
  PgWinText *v35; // eax@35
  NiRefObjectVtbl *v36; // edx@35
  char *v37; // eax@35
  PgSprData *v38; // eax@35
  InvTabButWin *v39; // eax@35
  PgSprData *v40; // eax@35
  PgWinSpr *v41; // eax@35
  PgSprData *v42; // eax@35
  PgWinSpr *v43; // eax@35
  PgSprData *v44; // eax@35
  InvTabButWin *v45; // eax@35
  PgSprData *v46; // eax@35
  PgWinSpr *v47; // eax@35
  PgSprData *v48; // eax@35
  PgWinSpr *v49; // eax@35
  PgSprData *v50; // eax@35
  InvTabButWin *v51; // eax@35
  PgSprData *v52; // eax@35
  PgWinSpr *v53; // eax@35
  PgSprData *v54; // eax@35
  PgWinSpr *v55; // eax@35
  PgSprData *v56; // eax@35
  InvTabButWin *v57; // eax@35
  PgSprData *v58; // eax@35
  PgWinSpr *v59; // eax@35
  PgSprData *v60; // eax@35
  PgWinSpr *v61; // eax@35
  PgSprData *v62; // eax@35
  InvTabButWin *v63; // eax@35
  PgSprData *v64; // eax@35
  PgWinSpr *v65; // eax@35
  PgSprData *v66; // eax@35
  PgWinSpr *v67; // eax@35
  PgSprData *v68; // eax@35
  InvTabButWin *v69; // eax@35
  PgSprData *v70; // eax@35
  PgWinSpr *v71; // eax@35
  PgSprData *v72; // eax@35
  PgWinSpr *v73; // eax@35
  PgSprData *v74; // eax@35
  InvTabButWin *v75; // eax@35
  char *v76; // eax@35
  PgSprData *v77; // eax@35
  PgWinSpr *v78; // eax@35
  PgSprData *v79; // eax@35
  PgWinSpr *v80; // eax@35
  PgSprData *v81; // eax@35
  PgWinSpr *v82; // eax@35
  PgSprData *v83; // eax@35
  char *v84; // eax@35
  PgSprData *v85; // eax@35
  PgWinSpr *v86; // eax@35
  PgSprData *v87; // eax@35
  PgWinSpr *v88; // eax@35
  PgSprData *v89; // eax@35
  PgWinSpr *v90; // eax@35
  PgSprData *v91; // eax@35
  PgSprData *v92; // eax@36
  unsigned int v93; // eax@37
  ItemIcon *v94; // eax@38
  int v95; // eax@38
  PgSprData *v96; // eax@41
  PgWinSpr *v97; // eax@41
  int v98; // ecx@41
  void *v99; // edx@41
  ItemIcon *v100; // eax@42
  IconWin **v101; // eax@42
  PgSprData *v102; // eax@44
  PgWinSpr *v103; // eax@44
  char *v104; // eax@44
  PgSprData *v105; // eax@44
  PgWinSpr *v106; // eax@44
  int v107; // edx@44
  int v108; // eax@44
  int v109; // edx@44
  PgFont *v110; // eax@44
  PgWinText *v111; // eax@44
  PgSprData *v112; // eax@44
  PgWinSpr *v113; // eax@44
  char *v114; // eax@44
  int v115; // ecx@44
  int v116; // eax@44
  PgFont *v117; // eax@44
  PgWinText *v118; // eax@44
  PgSprData *v119; // eax@44
  PgWinSpr *v120; // eax@44
  char *v121; // eax@44
  int v122; // ecx@44
  int v123; // eax@44
  PgFont *v124; // eax@44
  PgWinText *v125; // eax@44
  PgSprData *v126; // eax@44
  PgWinSpr *v127; // eax@44
  char *v128; // eax@44
  int v129; // ecx@44
  int v130; // eax@44
  PgFont *v131; // eax@44
  PgWinText *v132; // eax@44
  PgWinBut *v133; // eax@44
  char *v134; // eax@44
  PgSprData *v135; // eax@44
  PgWinBut *v136; // eax@44
  char *v137; // eax@44
  PgSprData *v138; // eax@44
  PgWinSpr *v139; // eax@44
  PgSprData *v140; // eax@44
  PgWinSpr *v141; // eax@44
  ChargedItemInvenWin *v142; // eax@44
  int v143; // eax@45
  CompensationInvWin *v144; // eax@50
  int v145; // eax@51
  PgWinBut *v146; // eax@56
  char *v147; // eax@56
  int v148; // ecx@56
  int v149; // eax@61
  PgSprData *v150; // eax@63
  PgWinSpr *v151; // eax@63
  char *v152; // eax@63
  PgWinBut *v153; // eax@63
  PgSprData *v154; // eax@63
  PgWinBut *v155; // eax@63
  PgWinBut *v156; // eax@63
  char *v157; // eax@63
  PgSprData *v158; // eax@63
  PgWinBut *v159; // eax@63
  char *v160; // eax@63
  PgSprData *v161; // eax@63
  InvTabButWin *v162; // eax@63
  PgSprData *v163; // eax@63
  PgWinSpr *v164; // eax@63
  PgSprData *v165; // eax@63
  PgWinSpr *v166; // eax@63
  PgSprData *v167; // eax@63
  InvTabButWin *v168; // eax@63
  PgSprData *v169; // eax@63
  PgWinSpr *v170; // eax@63
  PgSprData *v171; // eax@63
  PgWinSpr *v172; // eax@63
  NiTexturePalette *v173; // eax@63
  PgSprData *v174; // eax@64
  PgWinSpr *v175; // eax@64
  PgWinBut *v176; // eax@65
  NiNode *v177; // esi@66
  int v178; // eax@73
  char v179; // cl@74
  void *v180; // edi@75
  char v181; // al@76
  int v182; // edi@77
  NiTexturePalette *v183; // ST174_4@77
  void *v184; // esi@77
  NiObject *v185; // eax@78
  PgWinBut *v186; // ecx@80
  NiRefObjectVtbl *v187; // esi@80
  float v188; // edx@80
  PgWinSpr *v189; // ecx@80
  void *(__thiscall *v190)(NiRefObject *, unsigned int); // eax@80
  int (*v191)(void); // eax@80
  double v192; // st7@80
  double v193; // st7@80
  NiTexturePalette *v194; // esi@80
  int v195; // eax@82
  char v196; // cl@83
  char *v197; // eax@84
  char v198; // cl@85
  int v199; // edx@86
  int v200; // ecx@86
  int v201; // edx@86
  int (__fastcall *v202)(Char *); // ecx@86
  void *v203; // esi@86
  NiObject *v204; // eax@87
  NiNode *v205; // ecx@89
  NiRefObjectVtbl *v206; // esi@89
  float v207; // edx@89
  PgWinSpr *v208; // ecx@89
  int (*v209)(void); // eax@89
  int (*v210)(void); // eax@89
  double v211; // st7@89
  double v212; // st7@89
  NiNode *v213; // esi@90
  NiNode *v214; // esi@93
  const char *v215; // [sp+168h] [bp-FCh]@20
  const char *v216; // [sp+168h] [bp-FCh]@30
  int *v217; // [sp+16Ch] [bp-F8h]@20
  int *v218; // [sp+16Ch] [bp-F8h]@30
  int *v219; // [sp+170h] [bp-F4h]@20
  int *v220; // [sp+170h] [bp-F4h]@30
  NiSourceTexture *v221; // [sp+174h] [bp-F0h]@20
  NiSourceTexture *v222; // [sp+174h] [bp-F0h]@30
  unsigned int v223; // [sp+178h] [bp-ECh]@1
  int v224; // [sp+178h] [bp-ECh]@63
  unsigned int uiHeight; // [sp+188h] [bp-DCh]@34
  unsigned int uiWidth; // [sp+18Ch] [bp-D8h]@34
  NiPoint3 EffectPos; // [sp+190h] [bp-D4h]@80
  NiPointer<NiNode> pkNiNodePtr; // [sp+19Ch] [bp-C8h]@71
  void *pkSkinTexture; // [sp+1A0h] [bp-C4h]@19
  PgWinBut *pkBut; // [sp+1A4h] [bp-C0h]@22
  void *(__thiscall *v231)(NiRefObject *, unsigned int); // [sp+1A8h] [bp-BCh]@80
  double v232; // [sp+1ACh] [bp-B8h]@1
  NiTexturePalette *pTexturePalette; // [sp+1B4h] [bp-B0h]@41
  void *i; // [sp+1B8h] [bp-ACh]@22
  NiPointer<NiNode> spNode; // [sp+1BCh] [bp-A8h]@1
  int uiTop; // [sp+1C0h] [bp-A4h]@13
  int uiLeft; // [sp+1C4h] [bp-A0h]@13
  int auiEquipPos[26]; // [sp+1C8h] [bp-9Ch]@35
  char acShapeName[33]; // [sp+230h] [bp-34h]@36
  unsigned int v240; // [sp+254h] [bp-10h]@1
  int v241; // [sp+260h] [bp-4h]@1
  int v242; // [sp+264h] [bp+0h]@1

  v240 = (unsigned int)&v242 ^ __security_cookie;
  v223 = (unsigned int)&v242 ^ __security_cookie;
  HIDWORD(v232) = pkFrameWork;
  v2 = this;
  spNode.m_pObject = 0;
  v241 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acEffect, "PutOnClear.nif");
  v4 = Ns_LoadNifFile(v3, 0);
  v5 = v2->m_spEffect.m_pObject;
  v6 = v4;
  if ( v5 != v4 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v2->m_spEffect.m_pObject = v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  NsEffect::SetEffectNode(&v2->m_kEffect, &v2->m_spEffect.m_pObject->baseclass_0);
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\ChrInv.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, HIDWORD(v232), "InventoryWin", 0) )
    goto LABEL_100;
  v12 = uiLeft;
  v13 = uiTop;
  pkSkinTexture = MenuTexMgr::GetTexture(0x13u);
  if ( pkSkinTexture )
  {
    v221 = (NiSourceTexture *)pkSkinTexture;
    v219 = &uiTop;
    v217 = &uiLeft;
    v215 = "Theme";
  }
  else
  {
    v221 = 0;
    v219 = &uiTop;
    v217 = &uiLeft;
    v215 = "Theme";
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v215, v217, v219, v221);
  v2->m_pkInvenTheme = PgWinSpr::CreateWin(
                         uiLeft - v12,
                         uiTop - v13,
                         v14,
                         &v2->baseclass_0.baseclass_0.baseclass_0,
                         0,
                         0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v16 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v17 = spNode.m_pObject;
  v2->m_pkInvPanel = v16;
  v18 = PgSprData::Create(&v17->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  v19 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v20 = (int)v2->m_pRunArrangeInvenEff.m_pObject;
  pkBut = (PgWinBut *)v19;
  i = (void *)v20;
  if ( (void *)v20 != v19 )
  {
    if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && i )
      (**(void (__stdcall ***)(_DWORD))i)(1);
    v21 = pkBut;
    v2->m_pRunArrangeInvenEff.m_pObject = (NiNode *)pkBut;
    if ( v21 )
      InterlockedIncrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, 0);
  v25 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v26 = pkSkinTexture == 0;
  v2->m_pkMoneyPanel = v25;
  if ( v26 )
  {
    v222 = 0;
    v220 = &uiTop;
    v218 = &uiLeft;
    v216 = "Theme01";
  }
  else
  {
    v222 = (NiSourceTexture *)pkSkinTexture;
    v220 = &uiTop;
    v218 = &uiLeft;
    v216 = "Theme01";
  }
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v216, v218, v220, v222);
  v2->m_pEquipTheme = PgWinSpr::CreateWin(
                        uiLeft - v12,
                        uiTop - v13,
                        v27,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &uiLeft, &uiTop, 0);
  v29 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v30 = spNode.m_pObject;
  v2->m_pkFunctionPanel = v29;
  v31 = PgSprData::Create(&v30->baseclass_0, "Panel05", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v31, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v12, uiTop - v13, (PgSprData *)i, &v2->baseclass_0.baseclass_0.baseclass_0);
  v32 = MenuTexMgr::GetTexture(4u);
  v33 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  HIDWORD(v232) = v32;
  if ( ((int (__stdcall *)(_DWORD))v33[18].__vecDelDtor)("HelpLinkNor") )
  {
    i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, HIDWORD(v232));
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)i,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0x15u,
      0,
      0);
  }
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_100:
    v10 = spNode.m_pObject;
    v241 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v34 = Font::Get(MAIN_MENU);
  v35 = PgWinText::CreateWin(
          uiLeft - v12,
          uiTop - v13 + 2,
          uiWidth,
          uiHeight,
          v34,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  i = v35;
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v36[122].__vecDelDtor)(v35, 1, v223);
  (*(void (__stdcall **)(__int64 *))(*(_DWORD *)i + 468))(&Color::m_kDxWinTitleColor);
  HIDWORD(v232) = *(_DWORD *)i + 472;
  v37 = TextData::Get(0xF0F6EEF6u);
  ((void (__thiscall *)(void *, char *))*HIDWORD(v232))(i, v37);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
  v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv1thTabOff", &uiLeft, &uiTop, 0);
  v39 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 8u);
  v2->m_apkInvTabWin[0] = (PgWinBut *)v39;
  v39->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv1thTabDis", &uiLeft, &uiTop, 0);
  v41 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[0] = v41;
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v41,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv1thTabOn", &uiLeft, &uiTop, 0);
  v43 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[0] = v43;
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v43,
    0);
  ((void (__stdcall *)(signed int))v2->m_apkActiveTabWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv2thTabOff", &uiLeft, &uiTop, 0);
  v45 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v44, &v2->baseclass_0.baseclass_0.baseclass_0, 9u);
  v2->m_apkInvTabWin[1] = (PgWinBut *)v45;
  v45->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv2thTabDis", &uiLeft, &uiTop, 0);
  v47 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v46, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[1] = v47;
  v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v47,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv2thTabOn", &uiLeft, &uiTop, 0);
  v49 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[1] = v49;
  v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v49,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv3thTabOff", &uiLeft, &uiTop, 0);
  v51 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v50, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu);
  v2->m_apkInvTabWin[2] = (PgWinBut *)v51;
  v51->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv3thTabDis", &uiLeft, &uiTop, 0);
  v53 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v52, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[2] = v53;
  v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v53,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv3thTabOn", &uiLeft, &uiTop, 0);
  v55 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[2] = v55;
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v55,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v56 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv4thTabOff", &uiLeft, &uiTop, 0);
  v57 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v56, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu);
  v2->m_apkInvTabWin[3] = (PgWinBut *)v57;
  v57->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v58 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv4thTabDis", &uiLeft, &uiTop, 0);
  v59 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v58, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[3] = v59;
  v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v59,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v60 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv4thTabOn", &uiLeft, &uiTop, 0);
  v61 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v60, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[3] = v61;
  v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v61,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v62 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv5thTabOff", &uiLeft, &uiTop, 0);
  v63 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v62, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu);
  v2->m_apkInvTabWin[4] = (PgWinBut *)v63;
  v63->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v64 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv5thTabDis", &uiLeft, &uiTop, 0);
  v65 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v64, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[4] = v65;
  v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v65,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v66 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv5thTabOn", &uiLeft, &uiTop, 0);
  v67 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v66, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[4] = v67;
  v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v67,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v68 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv6thTabOff", &uiLeft, &uiTop, 0);
  v69 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v68, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu);
  v2->m_apkInvTabWin[5] = (PgWinBut *)v69;
  v69->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v70 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv6thTabDis", &uiLeft, &uiTop, 0);
  v71 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v70, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[5] = v71;
  v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v71,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v72 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv6thTabOn", &uiLeft, &uiTop, 0);
  v73 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v72, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[5] = v73;
  v73->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v73,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v74 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PCBangOff", &uiLeft, &uiTop, 0);
  v75 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v74, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu);
  v2->m_pkCompensationItemOffTabWin = (PgWinBut *)v75;
  v75->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v76 = TextData::Get(0x8A91AAD2u);
  PgWin::SetToolTipWinText(&v2->m_pkCompensationItemOffTabWin->baseclass_0.baseclass_0, v76);
  v77 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PCBangOn", &uiLeft, &uiTop, 0);
  v78 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v77, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCompensationItemTabWin = v78;
  v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v78,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCompensationItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v79 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PCBangDis", &uiLeft, &uiTop, 0);
  v80 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v79, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCompensationDisableTabWin = v80;
  v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v80,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkCompensationDisableTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v81 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NewItem01", &uiLeft, &uiTop, 0);
  v82 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v81, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkNewRewardItem = v82;
  v82->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v82,
    0);
  v83 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvCommercialOff", &uiLeft, &uiTop, 0);
  pkBut = PgWinBut::CreateWin(uiLeft - v12, uiTop - v13, v83, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
  pkBut->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v84 = TextData::Get(0xB9F8D72Au);
  PgWin::SetToolTipWinText(&pkBut->baseclass_0.baseclass_0, v84);
  v2->m_pkChargedItemOffTabWin = pkBut;
  v85 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvCommercialOn", &uiLeft, &uiTop, 0);
  v86 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v85, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkChargedItemTabWin = v86;
  v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v86,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkChargedItemTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v87 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvCommercialDis", &uiLeft, &uiTop, 0);
  v88 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v87, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkChargedItemDisableTabWin = v88;
  v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v88,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkChargedItemDisableTabWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v89 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NewItem", &uiLeft, &uiTop, 0);
  v90 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v89, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkNewChargedItem = v90;
  v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v90,
    0);
  v91 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v91, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  auiEquipPos[0] = 6;
  auiEquipPos[1] = 1;
  auiEquipPos[2] = 23;
  auiEquipPos[3] = 12;
  auiEquipPos[4] = 7;
  auiEquipPos[5] = 10;
  auiEquipPos[6] = 16;
  auiEquipPos[7] = 19;
  auiEquipPos[8] = 15;
  auiEquipPos[9] = 14;
  auiEquipPos[10] = 21;
  auiEquipPos[11] = 0;
  auiEquipPos[12] = 22;
  auiEquipPos[13] = 20;
  auiEquipPos[14] = 8;
  auiEquipPos[15] = 17;
  auiEquipPos[16] = 24;
  auiEquipPos[17] = 25;
  auiEquipPos[18] = 26;
  auiEquipPos[19] = 27;
  auiEquipPos[20] = 11;
  auiEquipPos[21] = 13;
  auiEquipPos[22] = 9;
  auiEquipPos[23] = 29;
  auiEquipPos[24] = 18;
  auiEquipPos[25] = 28;
  i = 0;
  do
  {
    HIDWORD(v232) = (char *)i + 1;
    sprintf(acShapeName, "EquipSlot%03d");
    v92 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v92, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( (signed int)i < 30 )
    {
      v93 = auiEquipPos[(signed int)i];
      i = (void *)v93;
      if ( v93 )
      {
        v94 = (ItemIcon *)InvWin::CreateWin(
                            uiLeft - v12 + 1,
                            uiTop - v13 + 1,
                            v93,
                            &v2->baseclass_0.baseclass_0.baseclass_0);
        v2->m_apkEquipWin[(_DWORD)i] = (InvWin *)v94;
        ItemIcon::SetItem(v94, 0, 1);
        ((void (__stdcall *)(signed int))v2->m_apkEquipWin[(_DWORD)i]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(5);
        ((void (__stdcall *)(signed int))v2->m_apkEquipWin[(_DWORD)i]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(6);
        v95 = (int)i;
        v2->m_apkEquipWin[(_DWORD)i]->m_uiInvType = 8;
        v2->m_apkEquipWin[v95]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
        v2->m_apkEquipWin[v95]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
        v2->m_apkEquipWin[v95]->m_bActive = 1;
        IconWin::ShowFocus(&v2->m_apkEquipWin[v95]->baseclass_0.baseclass_0, 1);
      }
    }
    i = (void *)HIDWORD(v232);
  }
  while ( SHIDWORD(v232) < 26 );
  pkSkinTexture = 0;
  pkBut = (PgWinBut *)v2->m_apkInvWin;
  do
  {
    pTexturePalette = (NiTexturePalette *)((char *)pkSkinTexture + 1);
    sprintf(acShapeName, "InvItemSlot%03d");
    v96 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, 0);
    v97 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v96, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v98 = (int)pkBut;
    v99 = pkSkinTexture;
    LODWORD(pkBut[4].baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) = v97;
    pkSkinTexture = v99;
    i = (void *)v98;
    HIDWORD(v232) = 8;
    do
    {
      v100 = (ItemIcon *)InvWin::CreateWin(
                           uiLeft - v12 + 1,
                           uiTop - v13 + 1,
                           (unsigned int)pkSkinTexture,
                           &v2->baseclass_0.baseclass_0.baseclass_0);
      *(_DWORD *)i = v100;
      ItemIcon::SetItem(v100, 0, 1);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 516))(3);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 560))(4);
      v101 = (IconWin **)i;
      *(_DWORD *)(*(_DWORD *)i + 452) = 9;
      (*v101)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
      (*v101)->baseclass_0.baseclass_0.m_eType = 1;
      IconWin::ShowFocus(*v101, 1);
      i = (char *)i + 96;
      pkSkinTexture = (char *)pkSkinTexture + 24;
      --HIDWORD(v232);
    }
    while ( HIDWORD(v232) );
    pkBut = (PgWinBut *)((char *)pkBut + 4);
    pkSkinTexture = pTexturePalette;
  }
  while ( (signed int)pTexturePalette < 24 );
  v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CopperBtn", &uiLeft, &uiTop, 0);
  v103 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v102, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCopperBtn = v103;
  v103->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v104 = TextData::Get(0x88AF99F5u);
  PgWin::SetToolTipWinText(&v2->m_pkCopperBtn->baseclass_0, v104);
  ((void (__stdcall *)(signed int))v2->m_pkCopperBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v105 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CopperInput", &uiLeft, &uiTop, 0);
  i = v105;
  v106 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v105, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v107 = (int)i;
  v2->m_pkCopperInput = v106;
  v108 = **(_DWORD **)(v107 + 36);
  v109 = *(_DWORD *)(v108 + 20);
  pTexturePalette = *(NiTexturePalette **)(v108 + 24);
  HIDWORD(v232) = v109;
  v110 = Font::Get(SMALL);
  v111 = PgWinText::CreateWin(
           uiLeft - v12 - 2,
           uiTop - v13 + 2,
           HIDWORD(v232),
           (unsigned int)pTexturePalette,
           v110,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkCopperText = v111;
  v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v111,
    2u);
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v112 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SilverBtn", &uiLeft, &uiTop, 0);
  v113 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v112, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkSilverBtn = v113;
  v113->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v114 = TextData::Get(0x98B595EFu);
  PgWin::SetToolTipWinText(&v2->m_pkSilverBtn->baseclass_0, v114);
  ((void (__stdcall *)(signed int))v2->m_pkSilverBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SilverInput", &uiLeft, &uiTop, 0);
  v2->m_pkSilverInput = PgWinSpr::CreateWin(
                          uiLeft - v12,
                          uiTop - v13,
                          (PgSprData *)i,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0);
  v115 = *((_DWORD *)i + 9);
  v116 = *(_DWORD *)(*(_DWORD *)v115 + 20);
  pTexturePalette = *(NiTexturePalette **)(*(_DWORD *)v115 + 24);
  HIDWORD(v232) = v116;
  v117 = Font::Get(SMALL);
  v118 = PgWinText::CreateWin(
           uiLeft - v12 - 2,
           uiTop - v13 + 2,
           HIDWORD(v232),
           (unsigned int)pTexturePalette,
           v117,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkSilverText = v118;
  v118->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v118,
    2u);
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v119 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GoldBtn", &uiLeft, &uiTop, 0);
  v120 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v119, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkGoldBtn = v120;
  v120->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v121 = TextData::Get(0x47A395A3u);
  PgWin::SetToolTipWinText(&v2->m_pkGoldBtn->baseclass_0, v121);
  ((void (__stdcall *)(signed int))v2->m_pkGoldBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GoldInput", &uiLeft, &uiTop, 0);
  v2->m_pkGoldInput = PgWinSpr::CreateWin(
                        uiLeft - v12,
                        uiTop - v13,
                        (PgSprData *)i,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
  v122 = *((_DWORD *)i + 9);
  v123 = *(_DWORD *)(*(_DWORD *)v122 + 20);
  pTexturePalette = *(NiTexturePalette **)(*(_DWORD *)v122 + 24);
  HIDWORD(v232) = v123;
  v124 = Font::Get(SMALL);
  v125 = PgWinText::CreateWin(
           uiLeft - v12 - 2,
           uiTop - v13 + 2,
           HIDWORD(v232),
           (unsigned int)pTexturePalette,
           v124,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkGoldText = v125;
  v125->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v125,
    2u);
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v126 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GemBtn", &uiLeft, &uiTop, 0);
  v127 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v126, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkGemBtn = v127;
  v127->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v128 = TextData::Get(0x475F9699u);
  PgWin::SetToolTipWinText(&v2->m_pkGemBtn->baseclass_0, v128);
  ((void (__stdcall *)(signed int))v2->m_pkGemBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GemInput", &uiLeft, &uiTop, 0);
  v2->m_pkGemInput = PgWinSpr::CreateWin(
                       uiLeft - v12,
                       uiTop - v13,
                       (PgSprData *)i,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0);
  v129 = *((_DWORD *)i + 9);
  v130 = *(_DWORD *)(*(_DWORD *)v129 + 20);
  pTexturePalette = *(NiTexturePalette **)(*(_DWORD *)v129 + 24);
  HIDWORD(v232) = v130;
  v131 = Font::Get(SMALL);
  v132 = PgWinText::CreateWin(
           uiLeft - v12 - 2,
           uiTop - v13 + 2,
           HIDWORD(v232),
           (unsigned int)pTexturePalette,
           v131,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkGemText = v132;
  v132->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v132,
    2u);
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MiniMonNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MiniMonClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MiniMonOver");
  v133 = PgWinBut::CreateWin(
           uiLeft - v12,
           uiTop - v13,
           (PgSprData *)i,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x16u,
           0,
           0);
  v2->m_pkAutoPickBtn = v133;
  v133->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v134 = TextData2::Get(0xB110C907u);
  PgWin::SetToolTipWinText(&v2->m_pkAutoPickBtn->baseclass_0.baseclass_0, v134);
  ((void (__stdcall *)(_DWORD))v2->m_pkAutoPickBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkAutoPickBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v135 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MiniMonDisable", &uiLeft, &uiTop, 0);
  v136 = PgWinBut::CreateWin(uiLeft - v12, uiTop - v13, v135, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkAutoPickDisable = v136;
  v136->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v137 = TextData2::Get(0x759331Bu);
  PgWin::SetToolTipWinText(&v2->m_pkAutoPickDisable->baseclass_0.baseclass_0, v137);
  ((void (__stdcall *)(signed int))v2->m_pkAutoPickDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_pkAutoPickDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v138 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MiniMonON", &uiLeft, &uiTop, 0);
  v139 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v138, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkAutoPickON = v139;
  v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v139,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkAutoPickON->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v140 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MiniMonOFF", &uiLeft, &uiTop, 0);
  v141 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v140, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkAutoPickOFF = v141;
  v141->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v141,
    1u);
  ((void (__stdcall *)(signed int))v2->m_pkAutoPickOFF->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v142 = ChargedItemInvenWin::CreateWin();
  HIDWORD(v232) = v142;
  v2->m_pkChargedItemInvenWin = v142;
  if ( v142 )
  {
    v143 = ((int (*)(void))v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v143 )
    {
      while ( (NiRTTI *)v143 != &PgWin::m_RTTI )
      {
        v143 = *(_DWORD *)(v143 + 4);
        if ( !v143 )
          goto LABEL_50;
      }
      ((void (__thiscall *)(InventoryWin *, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v2,
        HIDWORD(v232),
        0);
      NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    }
  }
LABEL_50:
  v144 = CompensationInvWin::CreateWin();
  HIDWORD(v232) = v144;
  v2->m_pkCompensationInvenWin = v144;
  if ( v144 )
  {
    v145 = ((int (*)(void))v144->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v145 )
    {
      while ( (NiRTTI *)v145 != &PgWin::m_RTTI )
      {
        v145 = *(_DWORD *)(v145 + 4);
        if ( !v145 )
          goto LABEL_56;
      }
      ((void (__thiscall *)(InventoryWin *, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v2,
        HIDWORD(v232),
        0);
      NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    }
  }
LABEL_56:
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AutoArrayNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "AutoArrayClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "AutoArrayOver");
  v146 = PgWinBut::CreateWin(
           uiLeft - v12,
           uiTop - v13,
           (PgSprData *)i,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x17u,
           0,
           0);
  v2->m_pkArrangeBut = v146;
  v146->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v147 = TextData2::Get(0xDBE83345u);
  PgWin::SetToolTipWinText(&v2->m_pkArrangeBut->baseclass_0.baseclass_0, v147);
  v148 = (int)v2->m_pRunArrangeButEff.m_pObject;
  HIDWORD(v232) = v2->m_pkArrangeBut;
  i = (void *)v148;
  if ( v148 != HIDWORD(v232) )
  {
    if ( v148 && !InterlockedDecrement((volatile LONG *)(v148 + 4)) && i )
      (**(void (__stdcall ***)(_DWORD))i)(1);
    v149 = HIDWORD(v232);
    v2->m_pRunArrangeButEff.m_pObject = (NiNode *)HIDWORD(v232);
    if ( v149 )
      InterlockedIncrement((volatile LONG *)(v149 + 4));
  }
  v150 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AutoArrayDisable", &uiLeft, &uiTop, 0);
  v151 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v150, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkArrangeDisable = v151;
  v151->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v152 = TextData3::Get(0x7D918182u);
  PgWin::SetToolTipWinText(&v2->m_pkArrangeDisable->baseclass_0, v152);
  ((void (__cdecl *)(_DWORD))v2->m_pkArrangeDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InventoryOpenNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "InventoryOpenClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "InventoryOpenOver");
  v153 = PgWinBut::CreateWin(
           uiLeft - v12,
           uiTop - v13,
           (PgSprData *)i,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x18u,
           0,
           0);
  v2->m_pkInvMagicBoxBut = v153;
  v153->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(_DWORD))v2->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v154 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InventoryOpenDisable", &uiLeft, &uiTop, 0);
  v155 = PgWinBut::CreateWin(uiLeft - v12, uiTop - v13, v154, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkDisMagicBoxBut = v155;
  v155->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(signed int))v2->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MiniMonAutoUseNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MiniMonAutoUseClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MiniMonAutoUseOver");
  v156 = PgWinBut::CreateWin(
           uiLeft - v12,
           uiTop - v13,
           (PgSprData *)i,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x19u,
           0,
           0);
  v2->m_pkAutoUseWinOpenBtn = v156;
  v156->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v157 = TextData3::Get(0x717EC0B6u);
  PgWin::SetToolTipWinText(&v2->m_pkAutoUseWinOpenBtn->baseclass_0.baseclass_0, v157);
  ((void (__stdcall *)(_DWORD))v2->m_pkAutoUseWinOpenBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkAutoUseWinOpenBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v158 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MiniMonAutoUseDisable", &uiLeft, &uiTop, 0);
  v159 = PgWinBut::CreateWin(uiLeft - v12, uiTop - v13, v158, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkAutoUseDisable = v159;
  v159->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v160 = TextData3::Get(0xC4C3BC02u);
  PgWin::SetToolTipWinText(&v2->m_pkAutoUseDisable->baseclass_0.baseclass_0, v160);
  ((void (__stdcall *)(signed int))v2->m_pkAutoUseDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v2->m_pkAutoUseDisable->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v161 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv7thTabOff", &uiLeft, &uiTop, 0);
  v162 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v161, &v2->baseclass_0.baseclass_0.baseclass_0, 0x1Au);
  v2->m_apkInvTabWin[6] = (PgWinBut *)v162;
  v162->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v163 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv7thTabDis", &uiLeft, &uiTop, 0);
  v164 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v163, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[6] = v164;
  v164->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v164,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v165 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv7thTabOn", &uiLeft, &uiTop, 0);
  v166 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v165, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[6] = v166;
  v166->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v166,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v167 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv8thTabOff", &uiLeft, &uiTop, 0);
  v168 = InvTabButWin::CreateWin(uiLeft - v12, uiTop - v13, v167, &v2->baseclass_0.baseclass_0.baseclass_0, 0x1Bu);
  v2->m_apkInvTabWin[7] = (PgWinBut *)v168;
  v168->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v169 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv8thTabDis", &uiLeft, &uiTop, 0);
  v170 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v169, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkDisableTabWin[7] = v170;
  v170->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v170,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkDisableTabWin[7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v171 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Inv8thTabOn", &uiLeft, &uiTop, 0);
  v172 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v171, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkActiveTabWin[7] = v172;
  v172->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v172,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v173 = 0;
  pkBut = (PgWinBut *)v2->m_pkNumSpr;
  do
  {
    pTexturePalette = (NiTexturePalette *)((char *)v173 + 1);
    sprintf(acShapeName, "Num%02d");
    v174 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, 0);
    v175 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v174, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)v175;
    v175->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v175,
      0);
    v173 = pTexturePalette;
    pkBut = (PgWinBut *)((char *)pkBut + 4);
  }
  while ( (signed int)pTexturePalette < 8 );
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrEquipON", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "ChrEquipOff");
  v176 = PgWinBut::CreateWin(
           uiLeft - v12,
           uiTop - v13,
           (PgSprData *)i,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x1Cu,
           0,
           0);
  v2->m_pkChrEquipOnOffBut = v176;
  if ( v176 )
  {
    pkNiNodePtr.m_pObject = 0;
    LOBYTE(v241) = 1;
    pTexturePalette = dword_B70448;
    if ( !Folder::m_bInit )
      Folder::Init();
    v178 = 0;
    do
    {
      v179 = *(&Folder::m_acEffect + v178);
      *(&Folder::m_acMerge + v178++) = v179;
    }
    while ( v179 );
    v180 = &Folder::m_acMerge - 1;
    do
    {
      v181 = *((_BYTE *)v180 + 1);
      v180 = (char *)v180 + 1;
    }
    while ( v181 );
    memcpy(v180, "ItemSort_Button_US.nif", 0x14u);
    v182 = (int)((char *)v180 + 20);
    v183 = pTexturePalette;
    *(_WORD *)v182 = *(_WORD *)"if";
    *(_BYTE *)(v182 + 2) = aItemsort_butto[22];
    PgUtil::LoadNodeNifFile(&Folder::m_acMerge, &pkNiNodePtr, v183);
    v184 = operator new(0x44u);
    pTexturePalette = (NiTexturePalette *)v184;
    LOBYTE(v241) = 2;
    if ( v184 )
    {
      v185 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      SpEffect::SpEffect((SpEffect *)v184, (NiNode *)v185);
    }
    else
    {
      v185 = 0;
    }
    v186 = v2->m_pkArrangeBut;
    v2->m_apkArrangeButEff = (SpEffect *)v185;
    v187 = v185->baseclass_0.vfptr;
    EffectPos.x = v186->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v188 = v186->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
    EffectPos.z = v186->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v189 = v2->m_pEquipTheme;
    EffectPos.y = v188;
    v190 = v189->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    LOBYTE(v241) = 1;
    pTexturePalette = (NiTexturePalette *)((int (__stdcall *)(int))v190)(v224);
    v191 = (int (*)(void))v2->m_pkMoneyPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    v232 = (double)(unsigned int)pTexturePalette - EffectPos.y;
    *(float *)&pTexturePalette = (double)(unsigned int)v191() + v232;
    *(float *)&v231 = -EffectPos.x;
    v192 = *(float *)&pTexturePalette;
    v187[22].__vecDelDtor = v231;
    *(float *)&v232 = v192;
    v193 = EffectPos.z;
    v187[23].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v232);
    *((float *)&v232 + 1) = v193;
    v187[24].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))HIDWORD(v232);
    v2->m_apkArrangeButEff->m_bLoop = 1;
    v194 = dword_B70448;
    if ( !Folder::m_bInit )
      Folder::Init();
    v195 = 0;
    do
    {
      v196 = *(&Folder::m_acEffect + v195);
      *(&Folder::m_acMerge + v195++) = v196;
    }
    while ( v196 );
    v197 = &Folder::m_acMerge - 1;
    do
      v198 = (v197++)[1];
    while ( v198 );
    v199 = dword_999430;
    *(_DWORD *)v197 = dword_99942C;
    v200 = dword_999434;
    *((_DWORD *)v197 + 1) = v199;
    v201 = dword_999438;
    *((_DWORD *)v197 + 2) = v200;
    v202 = off_99943C;
    *((_DWORD *)v197 + 3) = v201;
    *((_DWORD *)v197 + 4) = v202;
    PgUtil::LoadNodeNifFile(&Folder::m_acMerge, &pkNiNodePtr, v194);
    v203 = operator new(0x44u);
    pTexturePalette = (NiTexturePalette *)v203;
    LOBYTE(v241) = 3;
    if ( v203 )
    {
      v204 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      SpEffect::SpEffect((SpEffect *)v203, (NiNode *)v204);
    }
    else
    {
      v204 = 0;
    }
    v205 = v2->m_pRunArrangeInvenEff.m_pObject;
    v2->m_apkArrangeInvenEff = (SpEffect *)v204;
    v206 = v204->baseclass_0.vfptr;
    EffectPos.x = v205->baseclass_0.m_kLocal.m_Translate.x;
    v207 = v205->baseclass_0.m_kLocal.m_Translate.y;
    EffectPos.z = v205->baseclass_0.m_kLocal.m_Translate.z;
    v208 = v2->m_pEquipTheme;
    EffectPos.y = v207;
    v209 = (int (*)(void))v208->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    LOBYTE(v241) = 1;
    pTexturePalette = (NiTexturePalette *)v209();
    v210 = (int (*)(void))v2->m_pkMoneyPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    v232 = (double)(unsigned int)pTexturePalette - EffectPos.y;
    *(float *)&pTexturePalette = (double)(unsigned int)v210() + v232;
    *(float *)&v231 = -EffectPos.x;
    v211 = *(float *)&pTexturePalette;
    v206[22].__vecDelDtor = v231;
    *(float *)&v232 = v211;
    v212 = EffectPos.z;
    v206[23].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v232);
    *((float *)&v232 + 1) = v212;
    v206[24].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))HIDWORD(v232);
    v2->m_apkArrangeInvenEff->m_bLoop = 1;
    ((void (__thiscall *)(InventoryWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.81999999);
    InventoryWin::OnActivePage(v2, 0);
    LOBYTE(v241) = 0;
    if ( pkNiNodePtr.m_pObject )
    {
      v213 = pkNiNodePtr.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v213 )
          v213->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v213, 1u);
      }
    }
    v214 = spNode.m_pObject;
    v241 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v214 )
      v214->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v214, 1u);
    result = 1;
  }
  else
  {
    v177 = spNode.m_pObject;
    v241 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v177 )
      v177->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v177, 1u);
    result = 0;
  }
  return result;
}
// 99942C: using guessed type int dword_99942C;
// 999430: using guessed type int dword_999430;
// 999434: using guessed type int dword_999434;
// 999438: using guessed type int dword_999438;
// 99943C: using guessed type int (__fastcall *off_99943C)(Char *this);
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00525720) --------------------------------------------------------
void __thiscall InventoryWin::DirectMessage(InventoryWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  InventoryWin *v4; // edi@1

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( dword_B30F28 )
      InventoryWin::OnCreateNewSocket((InventoryWin *)((char *)this - 232), 0);
    if ( !*(_DWORD *)pvBody )
      GameFrameWork::NcItemSellReq(
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
        InventoryWin::ms_kFrom.Inven,
        1u);
  }
}
// B30F28: using guessed type int dword_B30F28;

//----- (00525770) --------------------------------------------------------
void __thiscall InventoryWin::OnClose(InventoryWin *this)
{
  InventoryWin *v1; // esi@1

  v1 = this;
  if ( this->m_bShowEquip )
    InventoryWin::OnActivePage(this, this->m_iActivePage);
  if ( InventoryWin::ms_uiMode == 8 )
    PgFrameWork::AddMsg(v1->baseclass_0.m_pkFrameWork, 0x10Au, 0, 0);
  if ( dword_B30F24 )
  {
    ItemRepairWin::CancelItemRepair((ItemRepairWin *)v1->baseclass_0.m_pkFrameWork[33].m_kMsgQ.m_uiAlloced);
  }
  else
  {
    if ( dword_B30F28 )
    {
      InventoryWin::OnCreateNewSocket(v1, 0);
    }
    else
    {
      if ( dword_B30F2C )
        InventoryWin::OnResetRecoverCountState(v1);
    }
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F24: using guessed type int dword_B30F24;
// B30F28: using guessed type int dword_B30F28;
// B30F2C: using guessed type int dword_B30F2C;

//----- (005257F0) --------------------------------------------------------
void __thiscall InventoryWin::UpdateBlinkEffect(InventoryWin *this)
{
  InventoryWin *v1; // esi@1
  unsigned int v2; // ebx@2
  const char *v3; // edx@4
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *v4; // ecx@4
  PgWin *v5; // edi@4
  PgWin *v6; // ebx@5
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v7; // ecx@11
  int v8; // ecx@16
  const char *v9; // ST00_4@16
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *v10; // ecx@16
  PgWin *v11; // edi@16
  PgWin *v12; // eax@17
  PgWin *v13; // ebx@17
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v14; // ecx@23
  signed int v15; // edi@24
  const char *v16; // edx@26
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *v17; // ecx@26
  PgWin *v18; // ebx@26
  unsigned int v19; // eax@27
  PgWin *v20; // eax@28
  int v21; // edx@30
  UIBlinkEffect *v22; // eax@30
  unsigned int v23; // [sp-14h] [bp-40h]@4
  NiColorA kColor; // [sp+0h] [bp-2Ch]@30
  unsigned int uiSlot; // [sp+10h] [bp-1Ch]@2
  NiPointer<PgWin> spParent; // [sp+14h] [bp-18h]@5
  NiPointer<PgWin> result; // [sp+18h] [bp-14h]@8
  NiPointer<PgWin> spWin; // [sp+1Ch] [bp-10h]@4
  int v29; // [sp+28h] [bp-4h]@4

  v1 = this;
  if ( this->m_bBlinkActive )
  {
    v2 = InventoryWin::FindItem(this, LOWORD(this->currPcItemId));
    uiSlot = v2;
    if ( v2 <= 0xC0 )
    {
      if ( v1->m_nOpenPage == v2 / 0x18 )
      {
        if ( v2 == v1->m_iBlinkSlotNum )
        {
          v15 = -1;
        }
        else
        {
          spWin.m_pObject = 0;
          v8 = v1->iEffectKey;
          v23 = (unsigned int)&spWin;
          v9 = (const char *)v8;
          v10 = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)v1->m_UIEffectList;
          v29 = 2;
          NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
            v10,
            v9,
            (NiPointer<NiShaderLibrary> *)&spWin);
          v11 = spWin.m_pObject;
          if ( spWin.m_pObject )
          {
            v12 = PgWin::GetParentWin(spWin.m_pObject);
            v13 = v12;
            result.m_pObject = v12;
            if ( v12 )
              InterlockedIncrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
            LOBYTE(v29) = 3;
            if ( v13 )
            {
              PgWin::DetachChildWin(v13, &spParent, v11);
              NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spParent);
            }
            PgWinMgr::Remove(&Pgg_kWinMgr, &spParent, v11);
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spParent);
            if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
              v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                (NiRefObject *)v11,
                1u);
            v14 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)v1->m_UIEffectList;
            v23 = v1->iEffectKey;
            spWin.m_pObject = 0;
            NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(v14, v23);
            LOBYTE(v29) = 2;
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
            v2 = uiSlot;
          }
          v15 = -1;
          v29 = -1;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spWin);
        }
        v1->m_iBlinkSlotNum = v2;
        spWin.m_pObject = 0;
        v16 = (const char *)v1->iEffectKey;
        v23 = (unsigned int)&spWin;
        v17 = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)v1->m_UIEffectList;
        v29 = 4;
        NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
          v17,
          v16,
          (NiPointer<NiShaderLibrary> *)&spWin);
        v18 = spWin.m_pObject;
        if ( !spWin.m_pObject )
        {
          v19 = v1->m_iBlinkSlotNum;
          if ( v19 >= 0xC0 || (v20 = (PgWin *)v1->m_apkInvWin[v19]) == 0 )
          {
            v29 = v15;
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spWin);
            return;
          }
          v21 = *(_DWORD *)&v1->m_UIEffectList->baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
          kColor.r = 255.0;
          kColor.g = 250.0;
          v23 = (unsigned int)&kColor;
          kColor.b = 205.0;
          v1->iEffectKey = v21;
          kColor.a = 255.0;
          v22 = UIBlinkEffect::CreateWin(v20, (NiColorA *)v23);
          uiSlot = (unsigned int)&v23;
          v23 = (unsigned int)v22;
          if ( v22 )
            InterlockedIncrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1->m_UIEffectList,
            v1->iEffectKey,
            (NiPointer<PgWinBut>)v23);
        }
        v29 = v15;
        if ( v18
          && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
      }
      else
      {
        spWin.m_pObject = 0;
        v3 = (const char *)v1->iEffectKey;
        v23 = (unsigned int)&spWin;
        v4 = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)v1->m_UIEffectList;
        v29 = 0;
        NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
          v4,
          v3,
          (NiPointer<NiShaderLibrary> *)&spWin);
        v5 = spWin.m_pObject;
        if ( spWin.m_pObject )
        {
          v6 = PgWin::GetParentWin(spWin.m_pObject);
          spParent.m_pObject = v6;
          if ( v6 )
            InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
          LOBYTE(v29) = 1;
          if ( v6 )
          {
            PgWin::DetachChildWin(v6, &result, v5);
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
          }
          PgWinMgr::Remove(&Pgg_kWinMgr, &result, v5);
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
          if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
          v23 = v1->iEffectKey;
          v7 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)v1->m_UIEffectList;
          v5 = 0;
          spWin.m_pObject = 0;
          NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(v7, v23);
          LOBYTE(v29) = 0;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spParent);
        }
        v29 = -1;
        if ( v5 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            ((void (__cdecl *)(signed int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
        }
      }
    }
  }
}

//----- (00525B20) --------------------------------------------------------
void __thiscall InventoryWin::UpdateMeWin(InventoryWin *this, float fCurTime)
{
  InventoryWin *v2; // esi@1
  unsigned int v3; // eax@2
  int v4; // edi@4
  __int64 v5; // qax@8
  __int64 v6; // qax@8
  __int64 v7; // qax@8
  __int64 v8; // qax@8
  signed int v9; // edi@8
  int v10; // ebx@8
  char *v11; // eax@20
  bool v12; // zf@22
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@22
  char *v14; // eax@23
  char *v15; // eax@24
  unsigned int v16; // [sp+0h] [bp-9Ch]@12
  int dwValue; // [sp+10h] [bp-8Ch]@8
  int iUsing; // [sp+14h] [bp-88h]@3
  char acStr[128]; // [sp+18h] [bp-84h]@8
  unsigned int v20; // [sp+98h] [bp-4h]@1
  int v21; // [sp+9Ch] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  InventoryWin::UpdateBlinkEffect(this);
  if ( CNSTimer_MarkCheck::Update(&v2->m_kMarkCheck, Timer::ms_fCurTime) == 1 )
  {
    CNSTimer_MarkCheck::ReSet(&v2->m_kMarkCheck, Timer::ms_fCurTime, OVER);
    v3 = v2->m_uiReceiverInvPos;
    if ( v3 != -1 )
    {
      ((void (__stdcall *)(int *, NiNode *))v2->m_apkInvWin[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &iUsing,
        v2->m_spEffect.m_pObject);
      if ( iUsing )
      {
        v4 = iUsing;
        if ( !InterlockedDecrement((volatile LONG *)(iUsing + 4)) )
        {
          if ( v4 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        }
      }
      v2->m_uiReceiverInvPos = -1;
    }
  }
  v5 = User::GetMoney(&g_kUser);
  User::GetGem(v5);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v6 = User::GetMoney(&g_kUser);
  User::GetGold(v6);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v7 = User::GetMoney(&g_kUser);
  User::GetSilver(v7);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v8 = User::GetMoney(&g_kUser);
  User::GetCopper(v8);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ChargedItemList::GetTotalEffectingValue(EE_MOREINVENTORY, (unsigned int *)&dwValue);
  iUsing = dwValue + 2;
  v9 = 0;
  v10 = (int)v2->m_apkInvTabWin;
  do
  {
    if ( v2->m_bShowEquip )
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v10 + 64) + 256))(v9 >= iUsing);
    if ( v9 < iUsing )
    {
      if ( v9 == v2->m_iActivePage / 24 )
      {
        if ( v9 < 2 )
          v16 = 927110286;
        else
          v16 = 676560778;
      }
      else
      {
        if ( v9 < 2 )
          v16 = -621221563;
        else
          v16 = -689309136;
      }
    }
    else
    {
      v16 = -638238644;
    }
    v11 = TextData::Get(v16);
    PgWin::SetToolTipWinText(*(PgWin **)v10, v11);
    ++v9;
    v10 += 4;
  }
  while ( v9 < 8 );
  if ( v2->m_bShowEquip )
  {
    v12 = ChargedItemList::IsEffecting(EE_STORAGE_ANYWHERE) == 1;
    v13 = v2->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( v12 )
    {
      ((void (__stdcall *)(signed int))v13)(1);
      ((void (__stdcall *)(signed int))v2->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      v14 = TextData2::Get(0x79A5ADB0u);
      PgWin::SetToolTipWinText(&v2->m_pkInvMagicBoxBut->baseclass_0.baseclass_0, v14);
      ((void (__stdcall *)(_DWORD))v2->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v2->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v2->m_pkDisMagicBoxBut,
        0);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v13)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkInvMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(signed int))v2->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_pkDisMagicBoxBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      v15 = TextData2::Get(0xC5FABCF1u);
      PgWin::SetToolTipWinText(&v2->m_pkDisMagicBoxBut->baseclass_0.baseclass_0, v15);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00525E70) --------------------------------------------------------
void __thiscall InventoryWin::GetItem(InventoryWin *this, std::vector<unsigned int,std::allocator<unsigned int> > *lstItem, unsigned __int16 ItemID)
{
  unsigned __int16 v3; // bx@1
  signed int v4; // esi@1
  ItemIcon **v5; // edi@1
  Item *v6; // eax@2
  ItemInfo *v7; // eax@3

  v3 = ItemID;
  v4 = 0;
  v5 = (ItemIcon **)this->m_apkInvWin;
  do
  {
    v6 = ItemIcon::GetItem(*v5);
    if ( v6 )
    {
      v7 = v6->m_pkInfo;
      if ( v7 )
      {
        if ( v7->ID == v3 )
        {
          *(_DWORD *)&ItemID = v4;
          std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
            (std::vector<unsigned long,std::allocator<unsigned long> > *)lstItem,
            (const unsigned int *)&ItemID);
        }
      }
    }
    ++v4;
    ++v5;
  }
  while ( v4 < 192 );
}

//----- (00525EC0) --------------------------------------------------------
unsigned int __thiscall InventoryWin::GetTotalItemCount(InventoryWin *this, unsigned __int16 ItemID)
{
  InventoryWin *v2; // edi@1
  unsigned int result; // eax@2
  void *v4; // esi@3
  unsigned int v5; // ebx@3
  void *v6; // eax@3
  unsigned int *v7; // esi@4
  unsigned int v8; // eax@5
  Item *v9; // eax@8
  std::vector<unsigned int,std::allocator<unsigned int> > lstItem; // [sp+0h] [bp-1Ch]@3
  int v11; // [sp+18h] [bp-4h]@3

  v2 = this;
  if ( ItemID == -1 )
  {
    result = 0;
  }
  else
  {
    v4 = 0;
    v5 = 0;
    *(_DWORD *)&lstItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    lstItem.baseclass_0._Mylast = 0;
    lstItem.baseclass_0._Myend = 0;
    v11 = 0;
    InventoryWin::GetItem(this, &lstItem, ItemID);
    v6 = *(void **)&lstItem;
    if ( *(unsigned int **)&lstItem != lstItem.baseclass_0._Mylast )
    {
      v7 = *(unsigned int **)&lstItem;
      do
      {
        v8 = *v7;
        if ( *v7 < 0xC0 && v2->m_apkInvWin[v8] && ItemIcon::GetItem(&v2->m_apkInvWin[v8]->baseclass_0) )
        {
          v9 = ItemIcon::GetItem(&v2->m_apkInvWin[*v7]->baseclass_0);
          v5 += ((int (__thiscall *)(Item *))v9->baseclass_0.vfptr[3].__vecDelDtor)(v9);
        }
        ++v7;
      }
      while ( v7 != lstItem.baseclass_0._Mylast );
      v6 = *(void **)&lstItem;
      v4 = 0;
    }
    if ( v6 != v4 )
      operator delete(v6);
    result = v5;
  }
  return result;
}

//----- (00525FA0) --------------------------------------------------------
bool __thiscall InvWin::Create(InvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  InvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    ItemIcon::ShowLotText(&v5->baseclass_0, 1);
    pkParent = (PgWin *)v5;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      &IconWin::ms_kCoolTimeIconList,
      (const unsigned int *)&pkParent);
    result = 1;
  }
  return result;
}

//----- (00525FF0) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::OnInvRClick(ChargedItemInvenWin *this, unsigned int uiInvIndex)
{
  ChargedItemInvenWin *v2; // edi@1
  int v3; // esi@2
  void *v4; // eax@3
  PROTO_CHARGED_ITEM_INFO *v5; // eax@7

  v2 = this;
  if ( !PgCursor::ms_pkDrop )
  {
    v3 = ISingletonTask<ChargedItemUseTask>::ms_pkSingletonTask;
    if ( !ISingletonTask<ChargedItemUseTask>::ms_pkSingletonTask )
    {
      v4 = operator new(0x48u);
      v3 = (int)v4;
      if ( v4 )
      {
        ITask::ITask((ITask *)v4, 0);
        *(_DWORD *)v3 = &ChargedItemUseTask::_vftable_;
        *(_DWORD *)(v3 + 8) = &ChargedItemUseTask::_vftable_;
      }
      else
      {
        v3 = 0;
      }
      ISingletonTask<ChargedItemUseTask>::ms_pkSingletonTask = v3;
    }
    v5 = CChargedItem::Seek(&g_kChargedItem, uiInvIndex - 24 * v2->m_uiCurrPage);
    if ( v5 )
      *(_DWORD *)(v3 + 68) = v5->ItemOrderNo;
    else
      *(_DWORD *)(v3 + 20) = 2;
    (**(void (__thiscall ***)(_DWORD, _DWORD))(v3 + 8))(v3 + 8, &v2->baseclass_0.baseclass_e8);
  }
}
// 99A4E0: using guessed type int (__stdcall *ChargedItemUseTask___vftable_)(int uiFlags);
// 99A4FC: using guessed type int (__thiscall *ChargedItemUseTask___vftable_)(void *p, char);
// A988DC: using guessed type int ISingletonTask_ChargedItemUseTask___ms_pkSingletonTask;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005260D0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvLClick(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // ebx@1
  GameFrameWork *v3; // eax@3
  GameFrameWork *v4; // edi@3
  char *v5; // eax@5
  GameFrameWork *v6; // ecx@5
  Item *v7; // eax@7
  ItemInfo *v8; // ebx@8
  int v9; // esi@8
  int v10; // eax@8
  char v11; // dl@9
  unsigned int v12; // eax@11
  void *v13; // edi@11
  char v14; // cl@12
  bool v15; // zf@16
  Item *v16; // edi@40
  int v17; // ebx@44
  char *v18; // esi@44
  Item *v19; // esi@51
  ItemInfo *v20; // edi@53
  int v21; // esi@55
  int v22; // esi@56
  char *v23; // eax@57
  MsgBox *v24; // eax@57
  int v25; // ebx@57
  char *v26; // esi@57
  signed int v27; // eax@61
  MsgBox **v28; // esi@63
  char *v29; // eax@64
  MsgBox *v30; // eax@64
  PgFrameWork *v31; // eax@64
  int v32; // ebx@65
  char *v33; // esi@65
  Item *v34; // eax@71
  ItemInfo *v35; // eax@73
  char *v36; // eax@76
  char *v37; // eax@76
  MsgBox *v38; // edi@76
  CursorState *v39; // eax@76
  PgFrameWork *v40; // eax@76
  Item *v41; // edi@81
  int v42; // eax@83
  unsigned __int16 v43; // ax@87
  PgFrameWork *v44; // ebx@87
  char *v45; // eax@87
  RandomOptCountRecoverWin *v46; // eax@90
  PgFrameWork *v47; // ebx@91
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v48; // [sp-1Ch] [bp-300h]@87
  unsigned int v49; // [sp-8h] [bp-2ECh]@90
  char *v50; // [sp-4h] [bp-2E8h]@11
  GameFrameWork *kFrom; // [sp+Ch] [bp-2D8h]@1
  char rItemStruct; // [sp+10h] [bp-2D4h]@8
  char v53; // [sp+4Ch] [bp-298h]@55
  __int16 v54; // [sp+74h] [bp-270h]@8
  char v55; // [sp+76h] [bp-26Eh]@8
  PgMsg::Frame kCancelMsg; // [sp+78h] [bp-26Ch]@76
  PgMsg::Frame kOkMsg; // [sp+8Ch] [bp-258h]@64
  char pText; // [sp+A0h] [bp-244h]@14
  char v59; // [sp+19Fh] [bp-145h]@11
  char dest; // [sp+1A0h] [bp-144h]@10
  char string; // [sp+2A0h] [bp-44h]@11
  unsigned int v62; // [sp+2E0h] [bp-4h]@1
  int v63; // [sp+2E4h] [bp+0h]@1

  v62 = (unsigned int)&v63 ^ __security_cookie;
  v2 = this;
  kFrom = (GameFrameWork *)uiInvIndex;
  if ( !InventoryWin::ms_uiMode )
  {
    this->m_bDivide = InventoryWin::ms_uiMode;
    if ( *(_BYTE *)(g_pkKeyboard + 40) & 1 )
    {
      v3 = (GameFrameWork *)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v4 = v3;
      kFrom = v3;
      if ( v3 && GameFrameWork::IsRoarShowWin(v3) )
      {
        v5 = TextData3::Get(0x5F9769D4u);
        v6 = v4;
LABEL_92:
        GameFrameWork::AddSysMsg(v6, v5);
        return;
      }
      if ( uiInvIndex < 0xC0 )
      {
        v7 = ItemIcon::GetItem(&v2->m_apkInvWin[uiInvIndex]->baseclass_0);
        if ( v7 )
        {
          v8 = v7->m_pkInfo;
          memcpy(&rItemStruct, &v7->m_kStruct, 0x64u);
          v54 = *(_WORD *)((char *)&v7->m_kStruct.itemattr.binditem.portal[9].y + 1);
          v55 = BYTE3(v7->m_kStruct.itemattr.binditem.portal[9].y);
          v9 = ((int (__thiscall *)(Item *))v7->baseclass_0.vfptr[9].__vecDelDtor)(v7);
          v10 = (int)v8->Name;
          do
            v11 = *(_BYTE *)v10++;
          while ( v11 );
          strncpy(&dest, v8->Name, v10 - (_DWORD)((char *)v8 + 35) + 1);
          if ( v9 )
          {
            v50 = (char *)v9;
            sprintf(&string, " [+%d]");
            v12 = strlen(&string) + 1;
            v13 = &v59;
            do
            {
              v14 = *((_BYTE *)v13 + 1);
              v13 = (char *)v13 + 1;
            }
            while ( v14 );
            memcpy(v13, &string, v12);
          }
          v50 = &dest;
          sprintf(&pText, "<\t%s\t>");
          if ( kFrom )
            GameFrameWork::ChatItemLink(kFrom, &pText, (SHINE_ITEM_STRUCT *)&rItemStruct);
        }
      }
      return;
    }
    v15 = (*(_BYTE *)(g_pkKeyboard + 38) & 4) == 0;
    v50 = (char *)uiInvIndex;
    if ( !v15 )
    {
      InventoryWin::OnInvShiftLClickNormalMode(this, (unsigned int)v50);
      return;
    }
LABEL_21:
    InventoryWin::OnInvLClickNormalMode(this, (unsigned int)v50);
    return;
  }
  if ( InventoryWin::ms_uiMode == 1 )
  {
    this->m_bDivide = 0;
    v15 = (*(_BYTE *)(g_pkKeyboard + 38) & 4) == 0;
    v50 = (char *)uiInvIndex;
    if ( !v15 )
    {
      InventoryWin::OnInvShiftLClickShopMode(this, (unsigned int)v50);
      return;
    }
    goto LABEL_21;
  }
  switch ( InventoryWin::ms_uiMode )
  {
    case 2:
      this->m_bDivide = 0;
      v15 = (*(_BYTE *)(g_pkKeyboard + 38) & 4) == 0;
      v50 = (char *)uiInvIndex;
      if ( v15 )
        InventoryWin::OnInvLClickBankMode(this, (unsigned int)v50);
      else
        InventoryWin::OnInvShiftLClickBankMode(this, (unsigned int)v50);
      break;
    case 3:
      this->m_bDivide = 0;
      v15 = (*(_BYTE *)(g_pkKeyboard + 38) & 4) == 0;
      v50 = (char *)uiInvIndex;
      if ( v15 )
        InventoryWin::OnInvLClickPrivateStoreMode(this, (unsigned int)v50);
      else
        InventoryWin::OnInvShiftLClickPrivateStoreMode(this, (unsigned int)v50);
      break;
    case 4:
      this->m_bDivide = 0;
      v15 = (*(_BYTE *)(g_pkKeyboard + 38) & 4) == 0;
      v50 = (char *)uiInvIndex;
      if ( v15 )
        InventoryWin::OnInvLClickGttStoreMode(this, (unsigned int)v50);
      else
        InventoryWin::OnInvShiftLClickGttStoreMode(this, (unsigned int)v50);
      break;
    case 5:
      this->m_bDivide = 0;
      v15 = (*(_BYTE *)(g_pkKeyboard + 38) & 4) == 0;
      v50 = (char *)uiInvIndex;
      if ( v15 )
        InventoryWin::OnInvLClickGuildAcademyStorageMode(this, (unsigned int)v50);
      else
        InventoryWin::OnInvShiftLClickGuildAcademyStorageMode(this, (unsigned int)v50);
      break;
    case 6:
      if ( uiInvIndex < 0xC0 )
        v16 = g_kInventory.m_aspInv[uiInvIndex].m_pObject;
      else
        v16 = 0;
      if ( (unsigned __int8)((int (__thiscall *)(Item *))v16->baseclass_0.vfptr[1].__vecDelDtor)(v16) == 26
        || (unsigned __int8)((int (__thiscall *)(Item *))v16->baseclass_0.vfptr[1].__vecDelDtor)(v16) == 37 )
      {
        InventoryWin::OnClickRepairItem(v2, (ITEM_INVEN)(uiInvIndex & 0x3FF | 0x2400));
      }
      else
      {
        v17 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v18 = TextData2::Get(0xB23A203Fu);
        if ( *(_DWORD *)(v17 + 4) )
        {
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v17 + 4) + 4))(25, v18, v17);
          if ( *(_DWORD *)(v17 + 4) )
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v17 + 4) + 20))(25, v18, v17);
        }
        (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v17 + 20))(v17, 25, v18, v17);
      }
      break;
    case 7:
      if ( uiInvIndex < 0xC0 )
        v19 = g_kInventory.m_aspInv[uiInvIndex].m_pObject;
      else
        v19 = 0;
      v20 = v19->m_pkInfo;
      if ( (unsigned __int8)((int (__thiscall *)(Item *))v19->baseclass_0.vfptr[1].__vecDelDtor)(v19) != 5 || v20->Type )
      {
        v32 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v33 = TextData2::Get(0x569771CAu);
        if ( *(_DWORD *)(v32 + 4) )
        {
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v32 + 4) + 4))(25, v33, v32);
          if ( *(_DWORD *)(v32 + 4) )
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v32 + 4) + 20))(25, v33, v32);
        }
        (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v32 + 20))(v32, 25, v33, v32);
      }
      else
      {
        v21 = (int)&v19->m_kStruct;
        memcpy(&rItemStruct, (const void *)v21, 0x64u);
        v21 += 100;
        v54 = *(_WORD *)v21;
        v55 = *(_BYTE *)(v21 + 2);
        if ( v53 )
        {
          v22 = (int)&v2->m_spMsgBox;
          if ( !v2->m_spMsgBox.m_pObject )
          {
            v23 = TextData2::Get(0xE3E2319u);
            v24 = MsgBox::Modeless(MSGBOX_OK, v23);
            NiPointer<PopupMenuWin>::operator_(
              (NiPointer<NiD3DDefaultShader> *)&v2->m_spMsgBox,
              (NiD3DDefaultShader *)v24);
            v25 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
            (**(void (__thiscall ***)(_DWORD, _DWORD))(*(_DWORD *)v22 + 232))(*(_DWORD *)v22 + 232, v25);
            v26 = TextData2::Get(0xE3E2319u);
            if ( *(_DWORD *)(v25 + 4) )
            {
              (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v25 + 4) + 4))(25, v26, v25);
              if ( *(_DWORD *)(v25 + 4) )
                (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v25 + 4) + 20))(25, v26, v25);
            }
            (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v25 + 20))(v25, 25, v26, v25);
          }
        }
        else
        {
          v27 = v2->m_iEnchantAddItemInvIdx;
          if ( v27 >= 0 )
          {
            if ( v27 < 192 )
            {
              v28 = (MsgBox **)&v2->m_spMsgBox;
              if ( !v2->m_spMsgBox.m_pObject )
              {
                v29 = TextData2::Get(0x123B201Cu);
                v30 = MsgBox::Modeless(MSGBOX_OKCANCEL, v29);
                NiPointer<PopupMenuWin>::operator_(
                  (NiPointer<NiD3DDefaultShader> *)&v2->m_spMsgBox,
                  (NiD3DDefaultShader *)v30);
                kOkMsg.m_uiFrameWParam = v2->m_iEnchantAddItemInvIdx;
                kOkMsg.m_uiFrameMsg = 255;
                kOkMsg.m_uiFramelParam = (unsigned int)kFrom | 0x2400;
                v31 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                MsgBox::SetFrameWorkMsgOnClose(*v28, v31, &kOkMsg, 0);
                (*v28)->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
                  &(*v28)->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
                  &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
              }
            }
          }
        }
      }
      break;
    case 8:
      if ( uiInvIndex < 0xC0 )
        v34 = g_kInventory.m_aspInv[uiInvIndex].m_pObject;
      else
        v34 = 0;
      v35 = v34->m_pkInfo;
      if ( v35 )
        v50 = v35->Name;
      else
        v50 = (char *)&unk_998D9B;
      v36 = TextData2::Get(0x6F9FCDEAu);
      v37 = fs(v36);
      v38 = MsgBox::Modal(MSGBOX_OKCANCEL, v37);
      v39 = Singleton<CursorState>::getInstance();
      CursorState::SetState(v39, 0);
      kOkMsg.m_uiFrameMsg = 263;
      kCancelMsg.m_uiFrameMsg = 266;
      kOkMsg.m_uiFramelParam = uiInvIndex;
      v40 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      MsgBox::SetFrameWorkMsgOnClose(v38, v40, &kOkMsg, &kCancelMsg);
      if ( v2 )
        v38->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
          &v38->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
          &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      else
        v38->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
          &v38->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
          0);
      break;
    default:
      if ( InventoryWin::ms_uiMode != 9 )
        return;
      if ( uiInvIndex < 0xC0 )
        v41 = g_kInventory.m_aspInv[uiInvIndex].m_pObject;
      else
        v41 = 0;
      v42 = ((int (__thiscall *)(Item *))v41->baseclass_0.vfptr[12].__vecDelDtor)(v41);
      if ( !v42 || v2->m_iRecoveryCountItemInvIdx < 0 || !(*(_BYTE *)v42 & 0xFE) )
      {
        v47 = v2->baseclass_0.m_pkFrameWork;
        v5 = TextData3::Get(0x98BEF7C3u);
        v6 = (GameFrameWork *)v47;
        goto LABEL_92;
      }
      if ( !(unsigned __int8)((int (__thiscall *)(Item *))v41->baseclass_0.vfptr[18].__vecDelDtor)(v41) )
      {
        kFrom = (GameFrameWork *)&v48;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &v48,
          "LimitRandomOption");
        v43 = CSingleDataMap::GetValue(&g_kSingleDataMap, v48);
        v44 = v2->baseclass_0.m_pkFrameWork;
        v50 = (char *)v43;
        v45 = TextData3::Get(0x96BEF7C3u);
        v5 = fs(v45);
        v6 = (GameFrameWork *)v44;
        goto LABEL_92;
      }
      if ( !v2->m_pkRandomOptCountRecoverWin )
        v2->m_pkRandomOptCountRecoverWin = RandomOptCountRecoverWin::CreateWin(v2->baseclass_0.m_pkFrameWork);
      v46 = RandomOptCountRecoverWin::Modal(v2->m_pkRandomOptCountRecoverWin);
      v50 = (char *)v41;
      v49 = uiInvIndex;
      v2->m_pkRandomOptCountRecoverWin = v46;
      RandomOptCountRecoverWin::SetRecoverCountItemSlot(v46, v49, (Item *)v50);
      break;
  }
}
// A85C00: using guessed type int __security_cookie;
// A9816C: using guessed type int g_pkKeyboard;
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (005268C0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvRClickNormalMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // edi@1
  Item *v3; // eax@2
  Item *v4; // esi@2
  ItemInfo *v5; // ebx@3
  ItemTypeEnum v6; // eax@4
  int v7; // eax@5
  unsigned int v8; // esi@8
  CollectCard *v9; // eax@8
  unsigned int v10; // eax@9
  ItemUseTask *v11; // esi@15
  unsigned int uiStar; // [sp+4h] [bp-8h]@8

  v2 = this;
  if ( uiInvIndex < 0xC0 )
  {
    v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
    v4 = v3;
    if ( v3 )
    {
      v5 = v3->m_pkInfo;
      if ( v5 )
      {
        v6 = v5->Type;
        if ( v6 )
        {
          v7 = v6 - 1;
          if ( v7 )
          {
            if ( v7 == 5 && v5->Class == 31 )
            {
              uiStar = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[16].__vecDelDtor)(v4);
              v8 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[14].__vecDelDtor)(v4);
              v9 = CollectCardTab::GetByItemInx(v5->InxName);
              if ( v9 )
                v10 = v9->CC_CardID;
              else
                v10 = 0;
              GameFrameWork::RegisterCard((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex, v10, uiStar, v8);
            }
          }
          else
          {
            if ( v5->Class == 30 )
            {
              if ( GameFrameWork::PlayCardEffect((GameFrameWork *)v2->baseclass_0.m_pkFrameWork) )
              {
                InvWin::SetLock(v2->m_apkInvWin[uiInvIndex], 1);
                v2->m_uiCloseCardInvIndex = uiInvIndex;
                v2->m_pkCloseCardItem = v4;
              }
            }
            else
            {
              v11 = ISingletonTask<ItemUseTask>::Run();
              ItemUseTask::SetInventoryIndex(v11, uiInvIndex);
              v11->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
                &v11->baseclass_0.baseclass_0.baseclass_8,
                v2->baseclass_0.m_pkFrameWork);
            }
          }
        }
        else
        {
          GameFrameWork::NcItemEquipReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex);
        }
      }
    }
  }
}

//----- (005269F0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvShiftRClickNormalMode(InventoryWin *this, unsigned int uiInvIndex)
{
  InventoryWin *v2; // edi@1
  Item *v3; // eax@3
  Item *v4; // ebx@3
  ItemInfo *v5; // esi@4
  ItemViewInfo *v6; // eax@5
  ChargedItemEffect *v7; // eax@6
  EffectEnumerate v8; // eax@7
  PgFrameWork *v9; // ecx@8
  ChatColorSpinWin *v10; // ebx@8
  ChatColorInfo v11; // ST00_16@10
  TermExtendWin *v12; // ebx@12
  _BYTE v13[12]; // ST04_12@14
  int v14; // edi@20
  char *v15; // esi@20
  ItemClassEnum v16; // eax@24
  int v17; // edi@30
  char *v18; // esi@30
  unsigned int v19; // ST0C_4@40
  __int64 v20; // qax@40
  ItemUseTask *v21; // esi@41
  ItemUseTask *v22; // ebx@47
  ItemUseTask *v23; // ebx@50
  ItemUseTask *v24; // esi@52
  PgFrameWork *v25; // eax@53
  MHDiceGameTask *v26; // esi@54
  CQuest *v27; // eax@56
  CQuestData *v28; // esi@57
  QUEST_DATA *v29; // eax@58
  QUEST_DATA *v30; // ebx@58
  PLAYER_QUEST_STATUS v31; // eax@62
  PgFrameWork *v32; // eax@65
  PgFrameWork *v33; // esi@65
  unsigned int v34; // ebx@71
  CollectCard *v35; // eax@71
  unsigned int v36; // eax@72
  unsigned int pkExtendInfo_8; // [sp+18h] [bp-18h]@0
  int v38; // [sp+1Ch] [bp-14h]@0
  CQuest *uiCardID; // [sp+20h] [bp-10h]@56
  Item *uiStar; // [sp+24h] [bp-Ch]@3
  unsigned int uiStara; // [sp+24h] [bp-Ch]@71
  NiPointer<MHDiceGameTask> result; // [sp+28h] [bp-8h]@54
  void *pQData; // [sp+2Ch] [bp-4h]@6
  unsigned int i; // [sp+38h] [bp+8h]@57

  v2 = this;
  if ( uiInvIndex >= 0xC0
    || !this->m_apkInvWin[uiInvIndex]
    || (((void (__stdcall *)(_DWORD))this->m_apkInvWin[uiInvIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0),
        v3 = ItemIcon::GetItem(&v2->m_apkInvWin[uiInvIndex]->baseclass_0),
        v4 = v3,
        (uiStar = v3) == 0)
    || (v5 = v3->m_pkInfo) == 0 )
    return;
  v6 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v5->ID, 1);
  if ( !v6 || (v7 = ChargedEffectTable::GetByInxName(v6->InxName, 1), (pQData = v7) == 0) )
    goto LABEL_77;
  v8 = v7->EffectEnum;
  if ( v8 == 36 )
  {
    v9 = v2->baseclass_0.m_pkFrameWork;
    v10 = *(ChatColorSpinWin **)&v9[141].m_bInit;
    if ( v10 )
    {
      if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(*(_DWORD *)&v9[141].m_bInit) )
      {
        v11.uiInveInx = uiInvIndex;
        v11.uiItemID = v5->ID;
        v11.uiColorType = *((_WORD *)pQData + 20);
        *(_DWORD *)&v11.kChatColorID = v38;
        ChatColorSpinWin::SetChatColorInfo(v10, v11);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v10->baseclass_0.baseclass_0.baseclass_0);
        InvWin::SetLock(v2->m_apkInvWin[uiInvIndex], 1);
      }
    }
    return;
  }
  if ( v8 == 37 )
  {
    v12 = (TermExtendWin *)v2->baseclass_0.m_pkFrameWork[142].baseclass_0.m_pkMsgHooker;
    if ( v12 )
    {
      if ( !(unsigned __int8)((int (__thiscall *)(TermExtendWin *))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v12) )
      {
        LOWORD(pkExtendInfo_8) = *((_WORD *)pQData + 17);
        *(_DWORD *)v13 = (char *)v5 + 2;
        *(_QWORD *)&v13[4] = __PAIR__(uiInvIndex, pkExtendInfo_8);
        TermExtendWin::SetExtendInfo(v12, *(ExtendItemInfo *)v13);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v12->baseclass_0.baseclass_0.baseclass_0);
        if ( !(unsigned __int8)((int (__thiscall *)(InventoryWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
  else
  {
LABEL_77:
    SoundMgr::PlayItemPutSound(&g_kSoundMgr, v5->ID);
    switch ( v5->Type )
    {
      case 0:
        if ( !Inventory::IsHandedItem(&g_kInventory, v5) )
          goto LABEL_34;
        if ( v5->WeaponType == 16 || Inventory::CanIEquipHandedItem(&g_kInventory, v5) )
        {
          v16 = v5->Class;
          if ( v16 != 26 && v16 != 37
            || Inventory::GetEquipedWeapon(&g_kInventory)
            || (pQData = 0, Char::GetAniCode(g_pkMainChar, 0, (unsigned int *)&pQData, 0), pQData != (void *)300000)
            && pQData != (void *)600000
            && pQData != (void *)700000 )
          {
LABEL_34:
            if ( v5->ItemGradeType == 4
              && ((int (__thiscall *)(Item *))v4->baseclass_0.vfptr[11].__vecDelDtor)(v4)
              && !*(_BYTE *)((int (__thiscall *)(Item *))v4->baseclass_0.vfptr[11].__vecDelDtor)(v4) )
              goto LABEL_78;
            if ( !CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v5->BT_Inx) )
            {
              GameFrameWork::NcItemEquipReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex);
              return;
            }
            if ( Item::GetPutOnBelongState(v4) )
            {
              GameFrameWork::NcItemEquipReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex);
              return;
            }
            if ( v5->Type
              || (v19 = (unsigned __int8)User::GetMainCharClass(&g_kUser),
                  v20 = CharClass::GetBitbyClassType(v5->UseClass),
                  CharClass::TestChrClassMask(v20, v19)) )
            {
LABEL_78:
              v21 = ISingletonTask<ItemUseTask>::Run();
              ItemUseTask::SetInventoryIndex(v21, uiInvIndex);
              v21->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
                &v21->baseclass_0.baseclass_0.baseclass_8,
                v2->baseclass_0.m_pkFrameWork);
              ItemUseTask::SetGameFrameWork(v21, (GameFrameWork *)v2->baseclass_0.m_pkFrameWork);
              return;
            }
          }
          else
          {
            v17 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
            v18 = TextData2::Get(0x43B5B3C5u);
            if ( *(_DWORD *)(v17 + 4) )
            {
              (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v17 + 4) + 4))(25, v18, v17);
              if ( *(_DWORD *)(v17 + 4) )
                (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v17 + 4) + 20))(25, v18, v17);
            }
            (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v17 + 20))(v17, 25, v18, v17);
          }
        }
        else
        {
          v14 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
          v15 = TextData2::Get(0xA6FD0F42u);
          if ( *(_DWORD *)(v14 + 4) )
          {
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v14 + 4) + 4))(25, v15, v14);
            if ( *(_DWORD *)(v14 + 4) )
              (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v14 + 4) + 20))(25, v15, v14);
          }
          (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v14 + 20))(v14, 25, v15, v14);
        }
        break;
      case 1:
        if ( v5->Class == 30 )
        {
          if ( GameFrameWork::PlayCardEffect((GameFrameWork *)v2->baseclass_0.m_pkFrameWork) )
          {
            InvWin::SetLock(v2->m_apkInvWin[uiInvIndex], 1);
            v2->m_uiCloseCardInvIndex = uiInvIndex;
            v2->m_pkCloseCardItem = v4;
          }
        }
        else
        {
          v22 = ISingletonTask<ItemUseTask>::Run();
          ItemUseTask::SetInventoryIndex(v22, uiInvIndex);
          v22->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
            &v22->baseclass_0.baseclass_0.baseclass_8,
            v2->baseclass_0.m_pkFrameWork);
          if ( v5->Class == 18 )
            GameFrameWork::OpenMiniHouseInventoryWin((GameFrameWork *)v2->baseclass_0.m_pkFrameWork);
        }
        return;
      case 2:
        if ( v5->Class == 13 )
        {
          v23 = ISingletonTask<ItemUseTask>::Run();
          ItemUseTask::SetInventoryIndex(v23, uiInvIndex);
          v23->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
            &v23->baseclass_0.baseclass_0.baseclass_8,
            v2->baseclass_0.m_pkFrameWork);
        }
        if ( !strcmp(v5->InxName, "ProposeRing") )
        {
          v24 = ISingletonTask<ItemUseTask>::Run();
          ItemUseTask::SetInventoryIndex(v24, uiInvIndex);
          v24->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
            &v24->baseclass_0.baseclass_0.baseclass_8,
            v2->baseclass_0.m_pkFrameWork);
        }
        return;
      case 5:
        v25 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( !(unsigned __int8)(*(int (**)(void))(*(_DWORD *)v25[22].m_kMsgQ.m_uiHead + 260))() )
        {
          v26 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
          if ( v26 )
            MHDiceGameTask::NcGambleCoinVipcardUIopenReq(v26, uiInvIndex);
        }
        return;
      case 4:
        v27 = QuestDataMgr::GetQuest();
        uiCardID = v27;
        if ( v27 )
        {
          v28 = v27->m_pQuestData;
          pQData = v27->m_pQuestData;
          i = 0;
          if ( CQuestData::GetNumOfQuestData((CQuestData *)pQData) > 0u )
          {
            do
            {
              v29 = CQuestData::GetQuestDataByIndex(v28, i);
              v30 = v29;
              if ( v29 )
              {
                if ( v29->Start.bItem )
                {
                  if ( !v29->Start.bNPC )
                  {
                    if ( v29->Start.ItemID == uiStar->m_kStruct.itemid )
                    {
                      v31 = CQuest::GetNewQuestStatus(uiCardID, v29->ID);
                      if ( v31 == 5 || v31 == 9 || v31 == 4 )
                      {
                        v32 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                        v33 = v32;
                        if ( v32 )
                        {
                          QuestStartItemWin::ResetViewPoint((QuestStartItemWin *)v32[35].m_kMsgQ.m_uiTail);
                          QuestStartItemWin::SetQuestInfo((QuestStartItemWin *)v33[35].m_kMsgQ.m_uiTail, v30->ID);
                          PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v33[35].m_kMsgQ.m_uiTail);
                          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
                          PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v33[35].m_kMsgQ.m_uiTail);
                        }
                        v28 = (CQuestData *)pQData;
                      }
                    }
                  }
                }
              }
              ++i;
            }
            while ( (signed int)i < CQuestData::GetNumOfQuestData(v28) );
          }
        }
        return;
      case 6:
        if ( v5->Class == 31 )
        {
          uiStara = ((int (__thiscall *)(Item *))v4->baseclass_0.vfptr[16].__vecDelDtor)(v4);
          v34 = ((int (__thiscall *)(Item *))v4->baseclass_0.vfptr[14].__vecDelDtor)(v4);
          v35 = CollectCardTab::GetByItemInx(v5->InxName);
          if ( v35 )
            v36 = v35->CC_CardID;
          else
            v36 = 0;
          GameFrameWork::RegisterCard((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex, v36, uiStara, v34);
        }
        return;
      default:
        return;
    }
  }
}

//----- (00527090) --------------------------------------------------------
bool __thiscall InventoryWin::DropOnEquip(InventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents::SenderType v3; // edi@1
  InventoryWin *v4; // ebx@1
  void *v5; // eax@2
  unsigned int v6; // esi@5
  Item *v7; // eax@6
  Item *v8; // edi@6
  ItemInfo *v9; // esi@7
  unsigned int v10; // ST08_4@11
  __int64 v11; // qax@11
  ItemUseTask *v12; // esi@12
  bool result; // al@12
  ItemEquipEnum v14; // eax@13
  unsigned int v15; // edi@13
  MinimonInfo *v16; // eax@18
  char *v17; // edi@27
  char *v18; // edi@38
  unsigned int uiSenderInvIndex; // [sp+14h] [bp+8h]@5

  v3 = pkContents->m_eSenderType;
  v4 = this;
  if ( !pkContents->m_eType )
  {
    v5 = pkContents->m_apvParam[0];
    if ( v5 )
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, *((_WORD *)v5 + 4));
  }
  if ( v3
    || (v6 = pkContents->m_uiSenderIndex, uiSenderInvIndex = v6, v6 >= 0xC0)
    || (v7 = ItemIcon::GetItem(&v4->m_apkInvWin[v6]->baseclass_0), (v8 = v7) == 0)
    || (v9 = v7->m_pkInfo, v9->Type) )
    return 0;
  if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v9->BT_Inx) && !Item::GetPutOnBelongState(v8) )
  {
    if ( v9->Type
      || (v10 = (unsigned __int8)User::GetMainCharClass(&g_kUser),
          v11 = CharClass::GetBitbyClassType(v9->UseClass),
          CharClass::TestChrClassMask(v11, v10)) )
    {
      v12 = ISingletonTask<ItemUseTask>::Run();
      ItemUseTask::SetInventoryIndex(v12, uiSenderInvIndex);
      v12->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
        &v12->baseclass_0.baseclass_0.baseclass_8,
        v4->baseclass_0.m_pkFrameWork);
      ItemUseTask::SetGameFrameWork(v12, (GameFrameWork *)v4->baseclass_0.m_pkFrameWork);
      return 1;
    }
    return 1;
  }
  v14 = v9->Equip;
  v15 = uiReceiverInvIndex;
  if ( v14 == 15 && (uiReceiverInvIndex == 15 || uiReceiverInvIndex == 16) )
  {
    GameFrameWork::NcItemRingEquipReq(
      (GameFrameWork *)v4->baseclass_0.m_pkFrameWork,
      uiSenderInvIndex,
      uiReceiverInvIndex);
    return 1;
  }
  if ( v14 == 25 )
  {
    v16 = MinimonInfoTable::GetMinimonInfoByIDX(v9->InxName);
    if ( v16 && v16->MinimonEquipPos == 2 && (v15 == 25 || v15 == 28) )
    {
      GameFrameWork::NcItemMiniMonEquipReq((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, uiSenderInvIndex, v15);
      result = 1;
    }
    else
    {
      GameFrameWork::NcItemEquipReq((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, uiSenderInvIndex);
      result = 1;
    }
    return result;
  }
  if ( !Inventory::IsHandedItem(&g_kInventory, v9) )
    goto LABEL_46;
  if ( v9->WeaponType != 16 && !Inventory::CanIEquipHandedItem(&g_kInventory, v9) )
  {
    v17 = TextData2::Get(0xA6FD0F42u);
    if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v17,
        &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v17,
          &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      25,
      v17,
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    return 0;
  }
  if ( v9->Class != 26
    || Inventory::GetEquipedWeapon(&g_kInventory) && v9->Class != 37
    || (uiReceiverInvIndex = 0, Char::GetAniCode(g_pkMainChar, 0, &uiReceiverInvIndex, 0), uiReceiverInvIndex != 300000)
    && uiReceiverInvIndex != 600000
    && uiReceiverInvIndex != 700000 )
  {
LABEL_46:
    GameFrameWork::NcItemEquipReq((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, uiSenderInvIndex);
    return 1;
  }
  v18 = TextData2::Get(0x43B5B3C5u);
  if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v18,
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v18,
        &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
    &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    25,
    v18,
    &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  return 0;
}

//----- (00527350) --------------------------------------------------------
bool __thiscall InvWin::EatDropInstance(InvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  InvWin *v4; // edi@1
  bool result; // al@2
  void *v6; // esi@5
  int v7; // eax@8
  PgWin *v8; // ecx@18

  v4 = this;
  if ( !this->m_bLock && *pkDrop && this->m_bActive )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( !v6
      || InventoryWin::ms_uiMode != 1 && *((_DWORD *)v6 + 4)
      || (v7 = *((_DWORD *)v6 + 2)) != 0
      && v7 != 1
      && v7 != 2
      && v7 != 6
      && v7 != 5
      && v7 != 7
      && v7 != 3
      && v7 != 19
      && v7 != 13 )
    {
      result = 0;
    }
    else
    {
      v8 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      if ( v4->m_uiInvType == 9 )
        result = InventoryWin::DropOnInv((InventoryWin *)v8, (DropContents *)v6, v4->m_uiInvIndex);
      else
        result = InventoryWin::DropOnEquip((InventoryWin *)v8, (DropContents *)v6, v4->m_uiInvIndex);
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (00527400) --------------------------------------------------------
void __thiscall ChargedItemInvenWin::OnCommand(ChargedItemInvenWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@6
  unsigned int v4; // eax@10

  if ( wParam - 4 > 0x17 )
  {
    switch ( wParam )
    {
      case 1u:
        v4 = this->m_uiCurrPage;
        if ( v4 )
          this->m_uiCurrPage = v4 - 1;
        LOWORD(wParam) = LOWORD(this->m_uiCurrPage);
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x20u, &wParam, 2);
        break;
      case 2u:
        if ( g_kChargedItem.m_NumOfChargedItem >= 0x18u )
        {
          ++this->m_uiCurrPage;
          LOWORD(wParam) = LOWORD(this->m_uiCurrPage);
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x20u, &wParam, 2);
        }
        break;
      case 3u:
        v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v3 )
          GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "ChrInv");
        break;
    }
  }
  else
  {
    ChargedItemInvenWin::OnInvRClick(this, wParam + 24 * this->m_uiCurrPage - 4);
  }
}

//----- (005274C0) --------------------------------------------------------
void __thiscall InventoryWin::OnInvRClick(InventoryWin *this, unsigned int uiInvIndex, unsigned int uiUser)
{
  InventoryWin *v3; // ebx@1
  InvWin *v4; // ecx@3
  Item *v5; // eax@8
  Item *v6; // esi@8
  ItemInfo *v7; // eax@9
  int v8; // eax@12
  int v9; // eax@13
  Item *v10; // eax@19
  Item *v11; // edi@19
  ItemInfo *v12; // esi@20
  E_BelongType v13; // ST10_4@21
  SHINE_PUT_ON_BELONGED_ITEM v14; // eax@23
  SHINE_PUT_ON_BELONGED_ITEM v15; // eax@26
  SHINE_PUT_ON_BELONGED_ITEM v16; // eax@27
  int v17; // eax@28
  int v18; // eax@29
  Item *v19; // eax@40
  Item *v20; // edi@40
  ItemInfo *v21; // esi@41
  E_BelongType v22; // ST10_4@42
  SHINE_PUT_ON_BELONGED_ITEM v23; // eax@44
  SHINE_PUT_ON_BELONGED_ITEM v24; // eax@47
  SHINE_PUT_ON_BELONGED_ITEM v25; // eax@48
  int v26; // eax@50
  int v27; // eax@51
  GameFrameWork *v28; // esi@54
  char *v29; // eax@54
  unsigned int v30; // [sp-Ch] [bp-10h]@11

  v3 = this;
  if ( !Char::CheckActState(g_pkMainChar, 500000) )
  {
    if ( !g_pkMainChar->m_bWillDead )
    {
      v4 = v3->m_apkInvWin[uiInvIndex];
      if ( !v4->m_bLock )
      {
        if ( !PgCursor::ms_pkDrop )
        {
          if ( InventoryWin::ms_uiMode && uiUser != 1 )
          {
            if ( InventoryWin::ms_uiMode == 1 )
            {
              v5 = ItemIcon::GetItem(&v4->baseclass_0);
              v6 = v5;
              if ( !v5 )
                goto LABEL_59;
              v7 = v5->m_pkInfo;
              if ( v7 && !CItemAuthorityBase::IA_CanNpcSell(&g_kItemAuthority, v7->BT_Inx) )
              {
                v30 = -1533312649;
LABEL_54:
                v28 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
                v29 = TextData::Get(v30);
                GameFrameWork::AddSysMsg(v28, v29);
                return;
              }
              v8 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[11].__vecDelDtor)(v6);
              if ( !v8 || (v9 = *(_DWORD *)v8 & 0xFF) == 0 || v9 == 255 )
              {
LABEL_59:
                InventoryWin::OnInvShiftRClickShopMode(v3, uiInvIndex);
                return;
              }
LABEL_53:
              v30 = -1634432127;
              goto LABEL_54;
            }
            if ( InventoryWin::ms_uiMode == 2 )
            {
              if ( PgWin::ms_bShiftPressed )
              {
                InventoryWin::OnInvRClickBankMode(v3, uiInvIndex);
                return;
              }
              v10 = ItemIcon::GetItem(&v4->baseclass_0);
              v11 = v10;
              if ( !v10 )
                goto LABEL_31;
              v12 = v10->m_pkInfo;
              if ( !v12 )
              {
LABEL_28:
                v17 = ((int (__thiscall *)(_DWORD))v11->baseclass_0.vfptr[11].__vecDelDtor)(v11);
                if ( v17 )
                {
                  v18 = *(_DWORD *)v17 & 0xFF;
                  if ( v18 )
                  {
                    if ( v18 != 255 )
                      goto LABEL_53;
                  }
                }
LABEL_31:
                InventoryWin::OnInvRClickBankMode(v3, uiInvIndex);
                return;
              }
              v13 = v12->BT_Inx;
              uiUser = 0;
              if ( !CItemAuthorityBase::IA_IsDataAccBelonged(&g_kItemAuthority, v13)
                && !CItemAuthorityBase::IA_IsDataChrBelonged(&g_kItemAuthority, v12->BT_Inx) )
              {
                v14 = Item::GetPutOnBelongState(v11);
                if ( !CItemAuthorityBase::IA_CanInvenReloc(
                        &g_kItemAuthority,
                        v12->BT_Inx,
                        v14,
                        9u,
                        6u,
                        (E_RELOC_ERR *)&uiUser) )
                {
                  v30 = -2102363671;
                  goto LABEL_54;
                }
                goto LABEL_28;
              }
              if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v12->BT_Inx) == 1 )
              {
                v15 = Item::GetPutOnBelongState(v11);
                if ( !CItemAuthorityBase::IA_IsWorkAccBelonged(&g_kItemAuthority, v12->BT_Inx, v15) )
                {
                  v16 = Item::GetPutOnBelongState(v11);
                  if ( !CItemAuthorityBase::IA_IsWorkChrBelonged(&g_kItemAuthority, v12->BT_Inx, v16) )
                    goto LABEL_28;
                }
              }
LABEL_49:
              v30 = -857857511;
              goto LABEL_54;
            }
            if ( InventoryWin::ms_uiMode == 3 )
            {
              InventoryWin::OnInvShiftRClickPrivateStoreMode(v3, uiInvIndex);
              return;
            }
            if ( InventoryWin::ms_uiMode == 4 )
            {
              v30 = 237968494;
              goto LABEL_54;
            }
            if ( InventoryWin::ms_uiMode == 5 )
            {
              if ( PgWin::ms_bShiftPressed )
              {
                InventoryWin::OnInvRClickGuildAcademyStorageMode(v3, uiInvIndex);
              }
              else
              {
                v19 = ItemIcon::GetItem(&v4->baseclass_0);
                v20 = v19;
                if ( v19 )
                {
                  v21 = v19->m_pkInfo;
                  if ( v21 )
                  {
                    v22 = v21->BT_Inx;
                    uiUser = 0;
                    if ( CItemAuthorityBase::IA_IsDataAccBelonged(&g_kItemAuthority, v22)
                      || CItemAuthorityBase::IA_IsDataChrBelonged(&g_kItemAuthority, v21->BT_Inx) )
                    {
                      if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v21->BT_Inx) != 1
                        || (v24 = Item::GetPutOnBelongState(v20),
                            CItemAuthorityBase::IA_IsWorkAccBelonged(&g_kItemAuthority, v21->BT_Inx, v24))
                        || (v25 = Item::GetPutOnBelongState(v20),
                            CItemAuthorityBase::IA_IsWorkChrBelonged(&g_kItemAuthority, v21->BT_Inx, v25)) )
                        goto LABEL_49;
                    }
                    else
                    {
                      v23 = Item::GetPutOnBelongState(v20);
                      if ( !CItemAuthorityBase::IA_CanInvenReloc(
                              &g_kItemAuthority,
                              v21->BT_Inx,
                              v23,
                              9u,
                              0,
                              (E_RELOC_ERR *)&uiUser) )
                      {
                        v30 = -2102363671;
                        goto LABEL_54;
                      }
                    }
                  }
                  v26 = ((int (__thiscall *)(_DWORD))v20->baseclass_0.vfptr[11].__vecDelDtor)(v20);
                  if ( v26 )
                  {
                    v27 = *(_DWORD *)v26 & 0xFF;
                    if ( v27 )
                    {
                      if ( v27 != 255 )
                        goto LABEL_53;
                    }
                  }
                }
                InventoryWin::OnInvRClickGuildAcademyStorageMode(v3, uiInvIndex);
              }
            }
          }
          else
          {
            InventoryWin::OnInvShiftRClickNormalMode(v3, uiInvIndex);
          }
        }
      }
    }
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B7030C: using guessed type bool PgWin__ms_bShiftPressed;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (00527830) --------------------------------------------------------
unsigned int __thiscall InventoryWin::FindItem(InventoryWin *this, char *ItemName)
{
  InventoryWin *v2; // esi@1
  unsigned __int16 *v3; // eax@1
  unsigned int result; // eax@2

  v2 = this;
  v3 = (unsigned __int16 *)ItemInfoTab::GetByInxName(ItemName);
  if ( v3 )
    result = InventoryWin::FindItem(v2, *v3);
  else
    result = 193;
  return result;
}

//----- (00527860) --------------------------------------------------------
unsigned int __thiscall InventoryWin::FindEquipItem(InventoryWin *this, const char *pcItemIdx)
{
  InventoryWin *v2; // esi@1
  unsigned __int16 *v3; // eax@1
  unsigned int result; // eax@2

  v2 = this;
  v3 = (unsigned __int16 *)ItemInfoTab::GetByInxName((char *)pcItemIdx);
  if ( v3 )
    result = InventoryWin::FindEquipItem(v2, *v3);
  else
    result = 31;
  return result;
}

//----- (00527890) --------------------------------------------------------
unsigned int __thiscall InventoryWin::FindItemID(InventoryWin *this, char *ItemName)
{
  unsigned int *v2; // eax@1
  unsigned int result; // eax@2

  v2 = (unsigned int *)ItemInfoTab::GetByInxName(ItemName);
  if ( v2 )
    result = *(_WORD *)v2;
  else
    result = 193;
  return result;
}

//----- (005278C0) --------------------------------------------------------
void __thiscall InventoryWin::OnCommand(InventoryWin *this, unsigned int wParam, int lParam)
{
  InventoryWin *v3; // esi@1
  int v4; // ecx@1
  Item *v5; // eax@20
  int v6; // ecx@21
  PgFrameWork *v7; // eax@32
  PgFrameWork *v8; // ecx@35
  PgWin *v9; // esi@35
  bool v10; // zf@41
  unsigned int v11; // edi@42
  int v12; // edi@42
  int v13; // edi@42
  int v14; // [sp+Ch] [bp-14h]@0
  float lParama; // [sp+2Ch] [bp+Ch]@42

  v3 = this;
  v4 = g_pkMainChar->m_byMode;
  switch ( wParam )
  {
    case 3u:
      InventoryWin::OnInvLClick(v3, lParam);
      break;
    case 4u:
      if ( v4 != 5 )
        InventoryWin::OnInvRClick(v3, lParam, 0);
      break;
    case 5u:
      if ( v4 != 5 )
        InventoryWin::OnEquipLClick(v3, lParam);
      break;
    case 6u:
      if ( v4 != 5 && !PgCursor::ms_pkDrop && InventoryWin::ms_uiMode != 6 )
        InventoryWin::UnEquip(v3, lParam);
      break;
    case 8u:
      InventoryWin::OnActivePage(v3, 0);
      break;
    case 9u:
      InventoryWin::OnActivePage(v3, 1u);
      break;
    case 0xAu:
      InventoryWin::OnActivePage(v3, 2u);
      break;
    case 0xBu:
      InventoryWin::OnActivePage(v3, 3u);
      break;
    case 0xCu:
      InventoryWin::OnActivePage(v3, 4u);
      break;
    case 0xDu:
      InventoryWin::OnActivePage(v3, 5u);
      break;
    case 0xFu:
      InventoryWin::OnChargedItemPage(v3);
      break;
    case 0xEu:
      InventoryWin::OnCompensationPage(v3);
      break;
    case 0x10u:
      if ( lParam )
      {
        v5 = ItemIcon::GetItem(&v3->m_apkInvWin[InventoryWin::ms_kFrom.Inven & 0x3FF]->baseclass_0);
        if ( v5 )
        {
          v3->m_kDropContents.m_eSenderType = 0;
          v3->m_kDropContents.m_eType = 0;
          v6 = InventoryWin::ms_kFrom.Inven & 0x3FF;
          v3->m_kDropContents.m_apvParam[0] = v5;
          v3->m_kDropContents.m_uiSenderIndex = v6;
          v3->m_kDropContents.m_apvParam[1] = 0;
          ((void (__thiscall *)(Item *))v5->baseclass_0.vfptr[3].__vecDelDtor)(v5);
          v3->m_kDropContents.m_uiLot = lParam;
          v3->m_kDrop.m_pkSender = (PgWin *)v3;
          PgCursor::ms_pkDrop = (int)&v3->m_kDrop;
        }
      }
      break;
    case 0x11u:
      if ( lParam )
        GameFrameWork::NcItemSellReq(
          (GameFrameWork *)v3->baseclass_0.m_pkFrameWork,
          InventoryWin::ms_kFrom.Inven,
          lParam);
      break;
    case 0x12u:
      if ( lParam )
        GameFrameWork::NcItemBuyReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v3->m_TargetItemID, lParam);
      break;
    case 0x13u:
      if ( lParam )
        InventoryWin::OnInputPrivateStoreBuyClientItemCount(v3, lParam);
      break;
    case 0x14u:
      GameFrameWork::OpenEnchantGemWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      break;
    case 0x15u:
      InventoryWin::OnHelpLink(v3);
      break;
    case 0x16u:
      InventoryWin::OnAutoPickCheck(v3);
      break;
    case 0x17u:
      InventoryWin::OnArrange(v3);
      break;
    case 0x18u:
      v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( (unsigned __int8)(*(int (__stdcall **)(int))(*(_DWORD *)v7[26].m_kMsgQ.m_uiAlloced + 260))(v14) == 1 )
        GameFrameWork::CloseStorageMenu((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      else
        InventoryWin::OnOpenMagicBox(v3);
      break;
    case 0x19u:
      v8 = v3->baseclass_0.m_pkFrameWork;
      v9 = (PgWin *)v8[142].baseclass_0.m_uiMessageNum;
      if ( v9 )
      {
        if ( (unsigned __int8)((int (__thiscall *)(unsigned int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v8[142].baseclass_0.m_uiMessageNum) )
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, v9);
        }
        else
        {
          PgWinMgr::ShowWin(&Pgg_kWinMgr, v9);
          MinimonAutoItemUseWin::ShowAutoUseItemInfo((MinimonAutoItemUseWin *)v9);
        }
      }
      break;
    case 0x1Au:
      InventoryWin::OnActivePage(v3, 6u);
      break;
    case 0x1Bu:
      InventoryWin::OnActivePage(v3, 7u);
      break;
    case 0x1Cu:
      v10 = v3->m_bShowEquip == 0;
      if ( !v3->m_bShowEquip )
      {
        v11 = PgWin::ms_uiScreenHeight
            - ((int (*)(void))v3->m_pkInvenTheme->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
        v12 = v11
            - ((int (*)(void))v3->m_pEquipTheme->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
        v13 = v12
            - ((int (__thiscall *)(InventoryWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3);
        lParama = (double)(unsigned int)(v13
                                       - ((int (*)(void))v3->m_pkMoneyPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)());
        if ( lParama < (double)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y )
          NiAVObject::SetTranslate(
            &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x,
            lParama,
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z);
        v10 = v3->m_bShowEquip == 0;
      }
      v3->m_bShowEquip = v10;
      InventoryWin::OnOffEquipWin(v3);
      break;
    default:
      return;
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (00527D10) --------------------------------------------------------
void __thiscall ChatColorSpinWin::SetChatColorInfo(ChatColorSpinWin *this, ChatColorInfo kChatColorInfo)
{
  this->m_kChatItem.uiInveInx = kChatColorInfo.uiInveInx;
  this->m_kChatItem.uiItemID = kChatColorInfo.uiItemID;
  this->m_kChatItem.uiColorType = kChatColorInfo.uiColorType;
  *(_DWORD *)&this->m_kChatItem.kChatColorID = *(_DWORD *)&kChatColorInfo.kChatColorID;
}

//----- (00527D40) --------------------------------------------------------
ItemViewInfo *__cdecl IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  ItemViewInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(ItemViewInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00527D90) --------------------------------------------------------
unsigned __int16 __thiscall CQuestData::GetNumOfQuestData(CQuestData *this)
{
  QUEST_DATA_HEAD *v1; // eax@1
  unsigned __int16 result; // ax@2

  v1 = this->m_pDataHead;
  if ( v1 )
    result = v1->NumOfQuest;
  else
    result = 0;
  return result;
}

//----- (00527DA0) --------------------------------------------------------
NiRTTI *__thiscall InvWin::GetRTTI(InvWin *this)
{
  return &InvWin::m_RTTI;
}

//----- (00527DB0) --------------------------------------------------------
void *__thiscall InvTabButWin::_vector_deleting_destructor_(InvTabButWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&InvTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&InvTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99949C: using guessed type int (__stdcall *InvTabButWin___vftable_)(int uiFlags);
// 9994BC: using guessed type int (__thiscall *InvTabButWin___vftable_)(void *p, char);

//----- (00527DF0) --------------------------------------------------------
void *__thiscall ChargedItemIcon::_scalar_deleting_destructor_(ChargedItemIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemIcon::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9996F4: using guessed type int (__stdcall *ChargedItemIcon___vftable_)(int uiFlags);
// 999714: using guessed type int (__thiscall *ChargedItemIcon___vftable_)(void *p, char);

//----- (00527E30) --------------------------------------------------------
void *__thiscall ChargedItemInvenWin::_vector_deleting_destructor_(ChargedItemInvenWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChargedItemInvenWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChargedItemInvenWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 999980: using guessed type int (__stdcall *ChargedItemInvenWin___vftable_)(int uiFlags);
// 99999C: using guessed type int (__thiscall *ChargedItemInvenWin___vftable_)(void *p, char);

//----- (00527E70) --------------------------------------------------------
void *__thiscall CompensationInvWin::_scalar_deleting_destructor_(CompensationInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CompensationInvWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CompensationInvWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 999B68: using guessed type int (__stdcall *CompensationInvWin___vftable_)(int uiFlags);
// 999B84: using guessed type int (__thiscall *CompensationInvWin___vftable_)(void *p, char);

//----- (00527EB0) --------------------------------------------------------
unsigned int __cdecl ITableBase<ItemShopView_ItemShopViewTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E44: using guessed type int ITableBase_ItemShopView_ItemShopViewTable___ms_pkTable;

//----- (00527ED0) --------------------------------------------------------
ItemShopView *__cdecl ItemShopViewTable::GetByShopID(unsigned int dwShopID)
{
  unsigned int v1; // esi@1
  ItemShopView *result; // eax@2

  v1 = 0;
  if ( ITableBase<ItemShopView_ItemShopViewTable>::GetTotal() )
  {
    while ( 1 )
    {
      result = (ItemShopView *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<ItemShopView_ItemShopViewTable>::ms_pkTable + 4),
                                 v1);
      if ( result )
      {
        if ( result->goodsNo == dwShopID )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<ItemShopView_ItemShopViewTable>::GetTotal() )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A97E44: using guessed type int ITableBase_ItemShopView_ItemShopViewTable___ms_pkTable;

//----- (00527F10) --------------------------------------------------------
void *__thiscall InvWin::_scalar_deleting_destructor_(InvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  InvWin::_InvWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00527F40) --------------------------------------------------------
void *__thiscall CompensationItemIcon::_scalar_deleting_destructor_(CompensationItemIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CompensationItemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CompensationItemIcon::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 999FE0: using guessed type int (__stdcall *CompensationItemIcon___vftable_)(int uiFlags);
// 999FFC: using guessed type int (__thiscall *CompensationItemIcon___vftable_)(void *p, char);

//----- (00527F90) --------------------------------------------------------
void *__thiscall InventoryWin::_vector_deleting_destructor_(InventoryWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  InventoryWin::_InventoryWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00527FC0) --------------------------------------------------------
void *__thiscall ChargedItemUseTask::_vector_deleting_destructor_(ChargedItemUseTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<ChargedItemUseTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<ChargedItemUseTask>::_vftable_;
  ISingletonTask<ChargedItemUseTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99A4A8: using guessed type int (__stdcall *ISingletonTask_ChargedItemUseTask____vftable_)(int uiFlags);
// 99A4C4: using guessed type int (__thiscall *ISingletonTask_ChargedItemUseTask____vftable_)(void *p, char);
// A988DC: using guessed type int ISingletonTask_ChargedItemUseTask___ms_pkSingletonTask;

//----- (00528000) --------------------------------------------------------
void __thiscall ItemInfoWin::_ItemInfoWin(ItemInfoWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemInfoWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
}
// 99AA10: using guessed type int (__stdcall *ItemInfoWin___vftable_)(int uiFlags);
// 99AA2C: using guessed type int (__thiscall *ItemInfoWin___vftable_)(void *p, char);

//----- (00528020) --------------------------------------------------------
long double __usercall difftime_0<edx:eax>(int _Time1<ecx>, int _Time2<eax>)
{
  long double result; // qax@1

  _difftime32(_Time1, _Time2);
  return result;
}
// 528020: function return type is incorrect (must be floating point)

//----- (00528030) --------------------------------------------------------
int __usercall mktime_1<eax>(tm *_Tm<eax>)
{
  return _mktime32(_Tm);
}

//----- (00528040) --------------------------------------------------------
void __thiscall ItemInfoWin::HideAllMoneyWin(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkItemMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkItemMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkItemMoneyNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkItemTotalMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkItemTotalMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_uiItemMoneyWidth = 0;
}

//----- (005281D0) --------------------------------------------------------
bool __thiscall ItemInfoWin::IsMoneyShow(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
}

//----- (00528230) --------------------------------------------------------
bool __thiscall ItemInfoWin::IsTotalMoneyShow(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->m_pkTotalGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkTotalGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkTotalSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
}

//----- (00528290) --------------------------------------------------------
unsigned int __thiscall ItemInfoWin::GetMoneyWinWidth(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1
  unsigned int v2; // edi@1
  unsigned int result; // eax@8

  v1 = this;
  v2 = 0;
  if ( (unsigned __int8)((int (*)(void))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 = ((int (*)(void))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + v1->m_uiIconWidth
       + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    result = v2
           + v1->m_uiIconWidth
           + ((int (*)(void))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
           + 2;
  else
    result = v2;
  return result;
}

//----- (00528360) --------------------------------------------------------
unsigned int __thiscall ItemInfoWin::GetTotalMoneyWinWidth(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1
  unsigned int v2; // edi@1
  unsigned int result; // eax@8

  v1 = this;
  v2 = 0;
  if ( (unsigned __int8)((int (*)(void))this->m_pkTotalGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 = ((int (*)(void))v1->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + v1->m_uiIconWidth
       + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkTotalGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkTotalSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    result = v2
           + v1->m_uiIconWidth
           + ((int (*)(void))v1->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
           + 2;
  else
    result = v2;
  return result;
}

//----- (00528430) --------------------------------------------------------
void __thiscall ItemInfoWin::InitTimeLimitUpdateTime(ItemInfoWin *this)
{
  this->RemainTimeUpdate = 1.0;
}

//----- (00528440) --------------------------------------------------------
void __thiscall ItemInfoWin::ReduceTimeLimitUpdateTime(ItemInfoWin *this)
{
  if ( this->RemainTimeUpdate > 0.0 )
    this->RemainTimeUpdate = this->RemainTimeUpdate - 0.02;
}

//----- (00528470) --------------------------------------------------------
void __thiscall ItemInfoWin::OnCommand(ItemInfoWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@2

  if ( wParam == 10 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
      GameFrameWork::LinkItemShowWin((GameFrameWork *)v3, 0);
  }
}

//----- (005284A0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetCloseButtonPos(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1
  int v2; // edi@1
  unsigned int v3; // eax@1
  PgWinBut *v4; // esi@1
  float v5; // ST14_4@2
  float v6; // ST0C_4@2
  float fX; // [sp+18h] [bp-4h]@1

  v1 = this;
  v2 = ((int (*)(void))this->m_pkCloseBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  fX = (double)(unsigned int)(((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v1)
                            - v2);
  v3 = ((int (*)(void))v1->m_pkCloseBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v4 = v1->m_pkCloseBtn;
  if ( v4 )
  {
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = fX;
    v5 = (double)v3;
    v6 = -v5;
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v6;
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 0.0;
  }
}

//----- (00528540) --------------------------------------------------------
void __thiscall ItemInfoWin::ShowMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, __int64 i64Money)
{
  ItemInfoWin *v4; // esi@1
  int v5; // edi@5
  int v6; // edi@5
  int v7; // edi@8
  int v8; // edi@10
  int v9; // edi@12
  int v10; // [sp+0h] [bp-38h]@0
  D3DXCOLOR *v11; // [sp+0h] [bp-38h]@2
  __int64 i64Val; // [sp+Ch] [bp-2Ch]@1
  char acMoneyStr[32]; // [sp+14h] [bp-24h]@5
  unsigned int v14; // [sp+34h] [bp-4h]@1
  int v15; // [sp+38h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v4 = this;
  this->m_uiMoneyXPos = 0;
  i64Val = User::GetGem(i64Money);
  if ( User::GetMoney(&g_kUser) >= i64Money )
  {
    ((void (__stdcall *)(D3DXCOLOR *, int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
      &Color::m_kDxWhiteColor,
      v10);
    ((void (__stdcall *)(D3DXCOLOR *))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    ((void (__stdcall *)(D3DXCOLOR *))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v11 = &Color::m_kDxWhiteColor;
  }
  else
  {
    ((void (__stdcall *)(D3DXCOLOR *, int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
      &Color::m_kDxRedColor,
      v10);
    ((void (__stdcall *)(D3DXCOLOR *))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__stdcall *)(D3DXCOLOR *))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    v11 = &Color::m_kDxRedColor;
  }
  ((void (__cdecl *)(D3DXCOLOR *))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v11);
  if ( i64Val )
  {
    ((void (__stdcall *)(signed int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      iXPos,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v5 = iXPos
       + ((int (*)(void))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v5,
      iYPos);
    v6 = v5 + v4->m_uiIconWidth + 1;
  }
  else
  {
    v6 = iXPos;
  }
  if ( User::GetGold(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v7 = v6
       + ((int (*)(void))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v7,
      iYPos);
    v6 = v7 + v4->m_uiIconWidth + 1;
  }
  if ( User::GetSilver(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v8 = v6
       + ((int (*)(void))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v8,
      iYPos);
    v6 = v8 + v4->m_uiIconWidth + 1;
  }
  if ( User::GetCopper(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v9 = v6
       + ((int (*)(void))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v9,
      iYPos);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00528900) --------------------------------------------------------
void __thiscall ItemInfoWin::ShowPrivateStoreMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, __int64 i64Money, bool bBuyItem)
{
  ItemInfoWin *v5; // esi@1
  __int64 v6; // kr00_8@1
  int v7; // edi@4
  int v8; // edi@4
  int v9; // edi@7
  int v10; // edi@9
  int v11; // edi@11
  int v12; // edi@13
  char acMoneyStr[32]; // [sp+14h] [bp-24h]@4
  unsigned int v14; // [sp+34h] [bp-4h]@1
  int v15; // [sp+38h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v5 = this;
  User::GetGem(i64Money);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v6 = User::GetGem(i64Money);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  if ( !bBuyItem )
  {
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
  }
  if ( v6 )
  {
    ((void (__stdcall *)(signed int))v5->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      iXPos,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v7 = iXPos
       + ((int (*)(void))v5->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v5->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v7,
      iYPos);
    v8 = v7 + v5->m_uiIconWidth + 1;
  }
  else
  {
    v8 = iXPos;
  }
  if ( User::GetGold(i64Money) )
  {
    ((void (__stdcall *)(signed int))v5->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v8,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v9 = v8
       + ((int (*)(void))v5->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v5->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v9,
      iYPos);
    v8 = v9 + v5->m_uiIconWidth + 1;
  }
  if ( User::GetSilver(i64Money) )
  {
    ((void (__stdcall *)(signed int))v5->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v8,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v10 = v8
        + ((int (*)(void))v5->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v5->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      iYPos);
    v8 = v10 + v5->m_uiIconWidth + 1;
  }
  if ( User::GetCopper(i64Money) )
  {
    ((void (__stdcall *)(signed int))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v8,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v11 = v8
        + ((int (*)(void))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v5->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v11,
      iYPos);
    v8 = v11 + v5->m_uiIconWidth + 1;
  }
  if ( !i64Money )
  {
    ((void (__stdcall *)(signed int))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v8,
      iYPos + 3);
    sprintf(acMoneyStr, "%d");
    ((void (__stdcall *)(_DWORD))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v12 = v8
        + ((int (*)(void))v5->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v5->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v12,
      iYPos);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00528DB0) --------------------------------------------------------
void __thiscall ItemInfoWin::ShowTotalMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, __int64 i64Money, bool bBuyItem)
{
  ItemInfoWin *v5; // esi@1
  __int64 v6; // qax@1
  int v7; // ebx@1
  int v8; // edi@1
  int v9; // edi@4
  int v10; // edi@4
  int v11; // edi@7
  int v12; // edi@9
  int v13; // edi@11
  int v14; // edi@13
  char acMoneyStr[32]; // [sp+14h] [bp-24h]@4
  unsigned int v16; // [sp+34h] [bp-4h]@1
  int v17; // [sp+38h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v5 = this;
  v6 = User::GetGem(i64Money);
  v7 = HIDWORD(v6);
  v8 = v6;
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  if ( !bBuyItem )
  {
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
  }
  if ( v7 | v8 )
  {
    ((void (__stdcall *)(signed int))v5->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      iXPos,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v9 = iXPos
       + ((int (*)(void))v5->m_pkTotalGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v5->m_pkTotalGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v9,
      iYPos);
    v10 = v9 + v5->m_uiIconWidth + 1;
  }
  else
  {
    v10 = iXPos;
  }
  if ( User::GetGold(i64Money) )
  {
    ((void (__stdcall *)(signed int))v5->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v11 = v10
        + ((int (*)(void))v5->m_pkTotalGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v5->m_pkTotalGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v11,
      iYPos);
    v10 = v11 + v5->m_uiIconWidth + 1;
  }
  if ( User::GetSilver(i64Money) )
  {
    ((void (__stdcall *)(signed int))v5->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v12 = v10
        + ((int (*)(void))v5->m_pkTotalSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v5->m_pkTotalSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v12,
      iYPos);
    v10 = v12 + v5->m_uiIconWidth + 1;
  }
  if ( User::GetCopper(i64Money) )
  {
    ((void (__stdcall *)(signed int))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v13 = v10
        + ((int (*)(void))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v5->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v13,
      iYPos);
    v10 = v13 + v5->m_uiIconWidth + 1;
  }
  if ( !i64Money )
  {
    ((void (__stdcall *)(signed int))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      iYPos + 3);
    sprintf(acMoneyStr, "%d");
    ((void (__stdcall *)(_DWORD))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v14 = v10
        + ((int (*)(void))v5->m_pkTotalCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v5->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v5->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v14,
      iYPos);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00529200) --------------------------------------------------------
void __thiscall ItemInfoWin::AdjustSizeIfIamToolTipWin(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1
  int v2; // ebx@1
  int v3; // eax@1
  int v4; // edi@2
  char *v5; // eax@3
  bool v6; // zf@7
  int v7; // ebx@12
  unsigned int v8; // eax@12
  unsigned int v9; // eax@19
  tagSIZE kSize; // [sp+8h] [bp-18h]@4
  PgFont *pkFont; // [sp+10h] [bp-10h]@1
  int v12; // [sp+14h] [bp-Ch]@2
  PgWinText **v13; // [sp+18h] [bp-8h]@2
  int uiCy; // [sp+1Ch] [bp-4h]@2

  v1 = this;
  v2 = (int)this->m_apkTextWin;
  v3 = ((int (*)(void))this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
  pkFont = (PgFont *)v3;
  if ( v3 )
  {
    SelectObject(*(HDC *)(v3 + 192), *(HGDIOBJ *)(v3 + 184));
    v4 = 0;
    uiCy = 0;
    v13 = v1->m_apkTextWin;
    v12 = 80;
    do
    {
      v5 = (char *)(*(int (**)(void))(**(_DWORD **)v2 + 484))();
      if ( v5 )
      {
        PgFont::GetTextSize(pkFont, v5, strlen(v5), &kSize);
        if ( (unsigned int)kSize.cx > v4 )
          v4 = kSize.cx;
        uiCy += kSize.cy + 2;
      }
      v2 = (int)(v13 + 1);
      v6 = v12-- == 1;
      ++v13;
    }
    while ( !v6 );
    if ( (unsigned __int8)((int (*)(void))v1->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v7 = uiCy + v1->m_uiIconHeight + 2;
      v8 = v1->m_uiMoneyXPos + ItemInfoWin::GetMoneyWinWidth(v1);
      if ( v8 > v4 )
        v4 = v8;
    }
    else
    {
      v7 = uiCy;
    }
    if ( (unsigned __int8)((int (*)(void))v1->m_pkTotalGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkTotalGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkTotalSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkTotalCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v9 = v1->m_uiTotalMoneyXPos + ItemInfoWin::GetTotalMoneyWinWidth(v1);
      if ( v9 > v4 )
        v4 = v9;
    }
    if ( (unsigned __int8)((int (*)(void))v1->m_pkItemMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      && v1->m_uiItemMoneyWidth > v4 )
      v4 = v1->m_uiItemMoneyWidth;
    if ( v4 )
      ((void (__thiscall *)(ItemInfoWin *, unsigned int, unsigned int))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
        v1,
        v4 + 2 * v1->baseclass_0.m_uiEdgeWidth + 14,
        v7 + 2 * v1->baseclass_0.m_uiEdgeHeight);
  }
}

//----- (005293D0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetTextBeginNewLine(ItemInfoWin *this, const char *pkTextData, int *nIndex, D3DXCOLOR *kColor)
{
  char *v4; // ebx@1
  ItemInfoWin *v5; // edi@1
  int v6; // eax@2
  HDC__ *hDC; // [sp+Ch] [bp-10Ch]@1
  char acStr[256]; // [sp+14h] [bp-104h]@1
  unsigned int v9; // [sp+114h] [bp-4h]@1
  int v10; // [sp+118h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v4 = (char *)pkTextData;
  v5 = this;
  hDC = *(HDC__ **)(((int (*)(void))this->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)()
                  + 192);
  memset(acStr, 0, 0x100u);
  while ( *nIndex < 80 )
  {
    v6 = PgUtil::StringPixelCopy(acStr, v4, hDC, v5->m_iItemNameLength);
    if ( !v6 )
      break;
    acStr[v6] = 0;
    v4 += v6;
    ((void (__stdcall *)(_DWORD))v5->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[(*nIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(kColor);
    memset(acStr, 0, 0x100u);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005294D0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetItemToolTip(ItemInfoWin *this, char *pText)
{
  ItemInfoWin *v2; // ebx@1
  int v3; // esi@2
  signed int v4; // edi@2

  v2 = this;
  if ( pText )
  {
    ItemInfoWin::HideAllMoneyWin(this);
    v3 = (int)v2->m_apkTextWin;
    v4 = 80;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 472))(&unk_99A5E2);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 468))(&Color::m_kDxWhiteColor);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    ((void (__stdcall *)(_DWORD))v2->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pText);
    ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[109].__vecDelDtor)(v2);
  }
}

//----- (00529540) --------------------------------------------------------
bool __thiscall ItemInfoWin::Create(ItemInfoWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight)
{
  ItemInfoWin *v4; // esi@1
  bool result; // al@2
  PgFont *v6; // eax@3
  PgFont *v7; // ecx@3
  signed int v8; // edi@4
  int v9; // ebx@4
  PgWinText *v10; // eax@6
  NiTexturePalette *v11; // edi@8
  char *v12; // eax@10
  PgSprData *v13; // eax@11
  PgWinSpr *v14; // eax@11
  NiAVObject *v15; // edx@11
  PgSprData *v16; // eax@11
  PgWinSpr *v17; // eax@11
  NiAVObject *v18; // edx@11
  PgSprData *v19; // eax@11
  PgWinSpr *v20; // eax@11
  NiAVObject *v21; // edx@11
  PgSprData *v22; // eax@11
  PgWinSpr *v23; // eax@11
  NiAVObject *v24; // edx@11
  PgSprData *v25; // eax@11
  PgWinSpr *v26; // eax@11
  NiAVObject *v27; // edx@11
  PgSprData *v28; // eax@11
  PgWinSpr *v29; // eax@11
  NiAVObject *v30; // edx@11
  PgSprData *v31; // eax@11
  PgWinSpr *v32; // eax@11
  NiAVObject *v33; // edx@11
  PgSprData *v34; // eax@11
  PgWinSpr *v35; // eax@11
  PgWinSpr *v36; // ecx@11
  int v37; // eax@11
  PgWinSpr *v38; // ecx@11
  PgFont *v39; // eax@11
  PgFont *v40; // eax@11
  PgFont *v41; // eax@11
  PgFont *v42; // eax@11
  PgFont *v43; // eax@11
  PgFont *v44; // eax@11
  PgFont *v45; // eax@11
  PgFont *v46; // eax@11
  PgFont *v47; // eax@11
  PgFont *v48; // eax@11
  PgFont *v49; // eax@11
  unsigned int v50; // esi@12
  PgFont *pkFont; // [sp+0h] [bp-14h]@3
  int uiLeft; // [sp+4h] [bp-10h]@11
  int v53; // [sp+10h] [bp-4h]@7

  v4 = this;
  if ( !FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, 0, 0) )
    goto LABEL_18;
  v6 = Font::Get(0);
  v7 = v6;
  pkFont = v6;
  if ( !v6 )
    goto LABEL_18;
  v4->m_iFontHeight = v6->m_uiDefHeight;
  v8 = 0;
  v9 = (int)v4->m_apkTextWin;
  while ( 1 )
  {
    v10 = PgWinText::CreateWin(
            v4->baseclass_0.m_uiEdgeWidth,
            v8 * (v4->m_iFontHeight + 2) + v4->baseclass_0.m_uiEdgeHeight + 2,
            0x100u,
            v4->m_iFontHeight + 4,
            v7,
            &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    *(_DWORD *)v9 = v10;
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
    ++v8;
    v9 += 4;
    if ( v8 >= 80 )
      break;
    v7 = pkFont;
  }
  ((void (__thiscall *)(ItemInfoWin *, unsigned int, unsigned int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v4,
    2 * v4->baseclass_0.m_uiEdgeWidth + 142,
    v4->m_iFontHeight + 2 * v4->baseclass_0.m_uiEdgeHeight);
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v4,
    0);
  uiEdgeHeight = 0;
  v53 = 0;
  if ( !pkTexture )
    goto LABEL_18;
  v11 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v12 = Folder::Merge(&Folder::m_acMenu, "Game\\Money.nif");
  PgUtil::LoadNodeNifFile(v12, (NiPointer<NiNode> *)&uiEdgeHeight, v11);
  if ( uiEdgeHeight )
  {
    v13 = PgSprData::Create((NiAVObject *)uiEdgeHeight, "MyGemBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v14 = PgWinSpr::CreateWin(0, 0, v13, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v15 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkGemIcon = v14;
    v16 = PgSprData::Create(v15, "MyGoldBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v17 = PgWinSpr::CreateWin(0, 0, v16, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkGoldIcon = v17;
    v19 = PgSprData::Create(v18, "MySilverBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v20 = PgWinSpr::CreateWin(0, 0, v19, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v21 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkSilverIcon = v20;
    v22 = PgSprData::Create(v21, "MyCopperBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v23 = PgWinSpr::CreateWin(0, 0, v22, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v24 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkCopperIcon = v23;
    v25 = PgSprData::Create(v24, "MyGemBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v26 = PgWinSpr::CreateWin(0, 0, v25, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v27 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkTotalGemIcon = v26;
    v28 = PgSprData::Create(v27, "MyGoldBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v29 = PgWinSpr::CreateWin(0, 0, v28, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v30 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkTotalGoldIcon = v29;
    v31 = PgSprData::Create(v30, "MySilverBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v32 = PgWinSpr::CreateWin(0, 0, v31, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v33 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkTotalSilverIcon = v32;
    v34 = PgSprData::Create(v33, "MyCopperBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v35 = PgWinSpr::CreateWin(0, 0, v34, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v36 = v4->m_pkGemIcon;
    v4->m_pkTotalCopperIcon = v35;
    v37 = ((int (*)(void))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v38 = v4->m_pkGemIcon;
    v4->m_uiIconWidth = v37;
    v4->m_uiIconHeight = ((int (*)(void))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v39 = Font::Get(SMALL);
    v4->m_pkGemText = AutoSizingTextWin::CreateWin(0, 0, v39, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v40 = Font::Get(SMALL);
    v4->m_pkGoldText = AutoSizingTextWin::CreateWin(0, 0, v40, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v41 = Font::Get(SMALL);
    v4->m_pkSilverText = AutoSizingTextWin::CreateWin(0, 0, v41, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v42 = Font::Get(SMALL);
    v4->m_pkCopperText = AutoSizingTextWin::CreateWin(0, 0, v42, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v43 = Font::Get(SMALL);
    v4->m_pkTotalGemText = AutoSizingTextWin::CreateWin(0, 0, v43, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v44 = Font::Get(SMALL);
    v4->m_pkTotalGoldText = AutoSizingTextWin::CreateWin(
                              0,
                              0,
                              v44,
                              &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v45 = Font::Get(SMALL);
    v4->m_pkTotalSilverText = AutoSizingTextWin::CreateWin(
                                0,
                                0,
                                v45,
                                &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v46 = Font::Get(SMALL);
    v4->m_pkTotalCopperText = AutoSizingTextWin::CreateWin(
                                0,
                                0,
                                v46,
                                &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v4->m_pkItemMoneyIcon = IconWin::CreateWin(0, 0, 32, 32, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v47 = Font::Get(SMALL);
    v4->m_pkItemMoneyText = AutoSizingTextWin::CreateWin(
                              0,
                              0,
                              v47,
                              &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v48 = Font::Get(SMALL);
    v4->m_pkItemMoneyNumText = AutoSizingTextWin::CreateWin(
                                 0,
                                 0,
                                 v48,
                                 &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v4->m_pkItemTotalMoneyIcon = IconWin::CreateWin(0, 0, 32, 32, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v49 = Font::Get(SMALL);
    v4->m_pkItemTotalMoneyText = AutoSizingTextWin::CreateWin(
                                   0,
                                   0,
                                   v49,
                                   &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    ItemInfoWin::HideAllMoneyWin(v4);
    v53 = -1;
    if ( uiEdgeHeight )
    {
      v50 = uiEdgeHeight;
      if ( !InterlockedDecrement((volatile LONG *)(uiEdgeHeight + 4)) )
      {
        if ( v50 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v50)(v50, 1);
      }
    }
    result = 1;
  }
  else
  {
LABEL_18:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005299D0) --------------------------------------------------------
bool __thiscall ItemInfoWin::CreateCloseButton(ItemInfoWin *this)
{
  ItemInfoWin *v1; // edi@1
  NiTexturePalette *v2; // esi@1
  char *v3; // eax@3
  bool result; // al@4
  NiSourceTexture *v5; // eax@5
  PgSprData *v6; // esi@5
  NiNode *v7; // esi@6
  int uiLeft; // [sp+0h] [bp-18h]@5
  int uiTop; // [sp+4h] [bp-14h]@5
  NiPointer<NiNode> spNode; // [sp+8h] [bp-10h]@1
  int v11; // [sp+14h] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v2 = dword_B70448;
  v11 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\CloseButton.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, v2);
  if ( spNode.m_pObject )
  {
    v5 = MenuTexMgr::GetTexture(4u);
    v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor", &uiLeft, &uiTop, v5);
    PgSprData::Add(v6, &spNode.m_pObject->baseclass_0, "BtnClick");
    PgSprData::Add(v6, &spNode.m_pObject->baseclass_0, "BtnOver");
    v1->m_pkCloseBtn = PgWinBut::CreateWin(0, 0, v6, &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
    v11 = -1;
    if ( spNode.m_pObject )
    {
      v7 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00529AF0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetItemExpInfo(ItemInfoWin *this, __int64 i64Exp)
{
  ItemInfoWin *v2; // esi@1
  int v3; // ebx@1
  int v4; // esi@1
  signed int v5; // edi@1
  int v6; // esi@3
  char *v7; // eax@3

  v2 = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v3 = (int)v2->m_apkTextWin;
  v4 = (int)v2->m_apkTextWin;
  v5 = 80;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v4 + 472))(&unk_99A537);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v4 + 468))(&Color::m_kDxWhiteColor);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  v6 = **(_DWORD **)v3;
  TextData::Get(0x455F99ACu);
  v7 = fs("%s: %I64d");
  (*(void (__thiscall **)(_DWORD, char *))(v6 + 472))(*(_DWORD *)v3, v7);
}

//----- (00529B80) --------------------------------------------------------
void __thiscall ItemInfoWin::SetItemMoneyInfo(ItemInfoWin *this, __int64 i64Money)
{
  ItemInfoWin *v2; // ebx@1
  int v3; // esi@1
  signed int v4; // edi@1

  v2 = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v3 = (int)v2->m_apkTextWin;
  v4 = 80;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 472))(&unk_99A541);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 468))(&Color::m_kDxWhiteColor);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  ItemInfoWin::ShowPrivateStoreMoneyWin(v2, v2->baseclass_0.m_uiEdgeWidth, v2->baseclass_0.m_uiEdgeHeight, i64Money, 1);
}

//----- (00529BF0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetItemFameInfo(ItemInfoWin *this, unsigned int iFameVal)
{
  ItemInfoWin *v2; // esi@1
  int v3; // ebx@1
  int v4; // esi@1
  signed int v5; // edi@1
  int v6; // esi@3
  char *v7; // eax@3

  v2 = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v3 = (int)v2->m_apkTextWin;
  v4 = (int)v2->m_apkTextWin;
  v5 = 80;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v4 + 472))(&unk_99A542);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v4 + 468))(&Color::m_kDxWhiteColor);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  v6 = **(_DWORD **)v3;
  TextData::Get(0x9BAE96E8u);
  v7 = fs("%s:%d");
  (*(void (__thiscall **)(_DWORD, char *))(v6 + 472))(*(_DWORD *)v3, v7);
}

//----- (00529C70) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertWeaponTitleContents(ItemInfoWin *this, Item *pkItem, int *iIndex)
{
  int v3; // edi@0
  unsigned __int16 *v4; // eax@4
  char v5; // dl@4
  char *v6; // esi@4
  char *v7; // eax@6
  const char *v8; // eax@9
  NiRefObjectVtbl *v9; // esi@13
  char *v10; // eax@13
  signed int v11; // [sp+Ch] [bp-74h]@4
  ItemInfoWin *v12; // [sp+10h] [bp-70h]@1
  char v13; // [sp+14h] [bp-6Ch]@4
  char v14; // [sp+1Dh] [bp-63h]@4
  __int16 v15; // [sp+78h] [bp-8h]@4
  char v16; // [sp+7Ah] [bp-6h]@4
  unsigned int v17; // [sp+7Ch] [bp-4h]@1
  int v18; // [sp+80h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v12 = this;
  if ( *iIndex < 80
    && pkItem
    && (unsigned __int8)((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[1].__vecDelDtor)(pkItem) == 5 )
  {
    v4 = (unsigned __int16 *)&pkItem->m_kStruct;
    memcpy(&v13, &pkItem->m_kStruct, 0x64u);
    v15 = *(_WORD *)((char *)&pkItem->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v16 = BYTE3(pkItem->m_kStruct.itemattr.binditem.portal[9].y);
    v5 = 0;
    v6 = &v14;
    v11 = 3;
    do
    {
      if ( *(_WORD *)v6 != -1 )
      {
        v7 = WeaponTitleTab::GetWeaponTitleString(*(_WORD *)v6, *(_DWORD *)(v6 + 2) & 0xFFFFFFF, *v4);
        ((void (__stdcall *)(char *))v12->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v7);
        v4 = (unsigned __int16 *)&pkItem->m_kStruct;
        v5 = 1;
      }
      v6 += 6;
      --v11;
    }
    while ( v11 );
    if ( v5 )
    {
      v8 = (const char *)(*(int (__stdcall **)(int))(**((_DWORD **)&v12->m_uiTotalMoneyXPos + *iIndex) + 484))(v3);
      if ( v8 && *iIndex > 0 )
      {
        if ( !strcmp(v8, " ") )
          ((void (__stdcall *)(_DWORD))v12->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
      }
      v9 = v12->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = TextData::Get(0x8AFEEDF6u);
      fs(v10);
      ((void (__thiscall *)(PgWinText *))v9[118].__vecDelDtor)(v12->m_apkTextWin[(*iIndex)++]);
    }
  }
}
// 529C70: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;

//----- (00529DE0) --------------------------------------------------------
char *__cdecl GetLastCoolTimeStr(int iTime)
{
  float v1; // ST18_4@9
  char *v2; // eax@2
  unsigned int v3; // eax@2
  const void *v4; // edx@2
  void *v5; // edi@2
  char v6; // cl@3
  char *v7; // eax@6
  char v8; // cl@7
  char v9; // cl@11
  char acTmp[32]; // [sp+4h] [bp-24h]@2
  unsigned int v12; // [sp+24h] [bp-4h]@1
  int v13; // [sp+28h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  acStr[0] = 0;
  if ( iTime / 1000 / 3600 )
  {
    v2 = TextData::Get(0x9CB3EDF8u);
    sprintf(acTmp, v2);
    v4 = acTmp;
    v3 = strlen(acTmp) + 1;
    v5 = &acStr[-1];
    do
    {
      v6 = *((_BYTE *)v5 + 1);
      v5 = (char *)v5 + 1;
    }
    while ( v6 );
LABEL_12:
    memcpy(v5, v4, v3);
    return acStr;
  }
  if ( iTime / 1000 / 60 != 60 * iTime / 1000 / 3600 )
  {
    v7 = TextData::Get(0x9CACA8F9u);
    sprintf(acTmp, v7);
    v4 = acTmp;
    v3 = strlen(acTmp) + 1;
    v5 = &acStr[-1];
    do
    {
      v8 = *((_BYTE *)v5 + 1);
      v5 = (char *)v5 + 1;
    }
    while ( v8 );
    goto LABEL_12;
  }
  v1 = (double)iTime / 1000.0
     - (double)(60 * (iTime / 1000 / 60 - 60 * iTime / 1000 / 3600))
     - (double)(3600 * iTime / 1000 / 3600);
  if ( 0.0 != v1 )
  {
    TextData::Get(0x535F8C99u);
    sprintf(acTmp, "%d%s");
    v4 = acTmp;
    v3 = strlen(acTmp) + 1;
    v5 = &acStr[-1];
    do
    {
      v9 = *((_BYTE *)v5 + 1);
      v5 = (char *)v5 + 1;
    }
    while ( v9 );
    goto LABEL_12;
  }
  return acStr;
}
// A85C00: using guessed type int __security_cookie;

//----- (00529F70) --------------------------------------------------------
int __thiscall ItemInfoWin::DisplayItemDurationBackupTime(ItemInfoWin *this, int iIndex)
{
  int v2; // edi@1
  ItemInfoWin *v3; // ebx@1
  char *v4; // eax@1
  char *v5; // edx@1
  char v6; // cl@2
  int v7; // eax@4
  const void *v8; // edx@4
  char v9; // cl@5
  unsigned int v10; // eax@6
  void *v11; // edi@6
  char v12; // cl@7
  int v13; // eax@10
  const void *v14; // edx@10
  char v15; // cl@11
  unsigned int v16; // eax@12
  void *v17; // edi@12
  char v18; // cl@13
  int v19; // eax@16
  const void *v20; // edx@16
  char v21; // cl@17
  unsigned int v22; // eax@18
  void *v23; // edi@18
  char v24; // cl@19
  NiRefObjectVtbl *v25; // esi@21
  char *v26; // eax@21
  char *v27; // eax@21
  int result; // eax@21
  int v29; // [sp+8h] [bp-408h]@1
  char strResult[1024]; // [sp+Ch] [bp-404h]@1
  unsigned int v31; // [sp+40Ch] [bp-4h]@1
  int v32; // [sp+410h] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v2 = iIndex;
  v3 = this;
  v29 = iIndex;
  strResult[0] = 0;
  memset(&strResult[1], 0, 0x3FFu);
  v4 = TextData::Get(0x27444090u);
  v5 = (char *)(strResult - v4);
  do
  {
    v6 = *v4;
    v4[(_DWORD)v5] = *v4;
    ++v4;
  }
  while ( v6 );
  if ( strcmp(v3->strStaticDay, "0") == 1 )
  {
    v7 = (int)v3->strStaticDay;
    v8 = v3->strStaticDay;
    do
      v9 = *(_BYTE *)v7++;
    while ( v9 );
    v10 = v7 - (_DWORD)v8;
    v11 = (char *)&v29 + 3;
    do
    {
      v12 = *((_BYTE *)v11 + 1);
      v11 = (char *)v11 + 1;
    }
    while ( v12 );
    memcpy(v11, v8, v10);
    v2 = v29;
  }
  if ( strcmp(v3->strStaticHour, "0") == 1 )
  {
    v13 = (int)v3->strStaticHour;
    v14 = v3->strStaticHour;
    do
      v15 = *(_BYTE *)v13++;
    while ( v15 );
    v16 = v13 - (_DWORD)v14;
    v17 = (char *)&v29 + 3;
    do
    {
      v18 = *((_BYTE *)v17 + 1);
      v17 = (char *)v17 + 1;
    }
    while ( v18 );
    memcpy(v17, v14, v16);
    v2 = v29;
  }
  if ( strcmp(v3->strStaticMinute, "0") == 1 )
  {
    v19 = (int)v3->strStaticMinute;
    v20 = v3->strStaticMinute;
    do
      v21 = *(_BYTE *)v19++;
    while ( v21 );
    v22 = v19 - (_DWORD)v20;
    v23 = (char *)&v29 + 3;
    do
    {
      v24 = *((_BYTE *)v23 + 1);
      v23 = (char *)v23 + 1;
    }
    while ( v24 );
    memcpy(v23, v20, v22);
    v2 = v29;
  }
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[v2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(strResult);
  v25 = v3->m_apkTextWin[v2 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v26 = TextData::Get(0x7ACAD1D9u);
  v27 = fs(v26);
  v25[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[v2 + 1], (unsigned int)v27);
  result = v2 + 2;
  if ( v3->RemainTimeUpdate > 0.0 )
    v3->RemainTimeUpdate = v3->RemainTimeUpdate - 0.02;
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0052A1A0) --------------------------------------------------------
int __thiscall ItemInfoWin::DisplayItemDurationDirectTime(ItemInfoWin *this, int iIndex, ShineDateTime kDelTime)
{
  ItemInfoWin *v3; // esi@1
  int v4; // eax@1
  char v5; // cl@2
  int v6; // eax@3
  char v7; // cl@4
  int v8; // eax@5
  int v9; // esi@5
  char v10; // cl@6
  int v11; // esi@7
  int v12; // eax@7
  long double v13; // st7@7
  signed int v14; // esi@7
  signed int v15; // eax@7
  int v16; // edi@7
  long double v17; // st7@7
  signed int v18; // edx@7
  int v19; // ebx@7
  char *v20; // eax@7
  char *v21; // ecx@7
  char v22; // dl@8
  char *v23; // eax@10
  int v24; // eax@10
  char v25; // cl@11
  unsigned int v26; // eax@12
  void *v27; // edi@12
  char v28; // cl@13
  char *v29; // eax@16
  int v30; // eax@16
  char v31; // cl@17
  unsigned int v32; // eax@18
  void *v33; // edi@18
  char v34; // cl@19
  char *v35; // eax@22
  int v36; // eax@22
  char v37; // cl@23
  unsigned int v38; // eax@24
  void *v39; // edi@24
  char v40; // cl@25
  NiRefObjectVtbl *v41; // esi@27
  char *v42; // eax@27
  char *v43; // eax@27
  int v44; // eax@27
  char v45; // cl@28
  int v47; // [sp+Ch] [bp-77Ch]@3
  ItemInfoWin *v48; // [sp+10h] [bp-778h]@1
  int iHour; // [sp+14h] [bp-774h]@7
  int v50; // [sp+18h] [bp-770h]@5
  int v51; // [sp+1Ch] [bp-76Ch]@1
  tm TimeRL; // [sp+28h] [bp-760h]@7
  tm TimeRH; // [sp+4Ch] [bp-73Ch]@7
  char strResult[1024]; // [sp+70h] [bp-718h]@1
  char strDay[255]; // [sp+470h] [bp-318h]@1
  char strHour[255]; // [sp+570h] [bp-218h]@1
  char strMinute[255]; // [sp+670h] [bp-118h]@1
  char acDeleteDate[20]; // [sp+770h] [bp-18h]@27
  unsigned int v59; // [sp+784h] [bp-4h]@1
  int v60; // [sp+788h] [bp+0h]@1

  v59 = (unsigned int)&v60 ^ __security_cookie;
  v3 = this;
  this->RemainTimeUpdate = 1.0;
  v48 = this;
  strcpy(strDay, "0");
  memset(&strDay[2], 0, 0xFDu);
  strcpy(strHour, "0");
  memset(&strHour[2], 0, 0xFDu);
  strcpy(strMinute, "0");
  memset(&strMinute[2], 0, 0xFDu);
  strResult[0] = 0;
  memset(&strResult[1], 0, 0x3FFu);
  v4 = (int)strDay;
  v51 = (char *)v3 - strDay + 440;
  do
  {
    v5 = *(_BYTE *)v4;
    *(_BYTE *)((char *)v3 - strDay + 440 + v4) = *(_BYTE *)v4;
    ++v4;
  }
  while ( v5 );
  v6 = (int)strHour;
  v47 = (char *)v3 - strHour + 695;
  do
  {
    v7 = *(_BYTE *)v6;
    *(_BYTE *)((char *)v3 - strHour + 695 + v6) = *(_BYTE *)v6;
    ++v6;
  }
  while ( v7 );
  v8 = (int)strMinute;
  v9 = (char *)v3 - strMinute;
  v50 = v9 + 950;
  do
  {
    v10 = *(_BYTE *)v8;
    *(_BYTE *)(v9 + 950 + v8) = *(_BYTE *)v8;
    ++v8;
  }
  while ( v10 );
  memcpy(&TimeRL, &Timer::ms_dLastServerTime, sizeof(TimeRL));
  v11 = _mktime32(&TimeRL);
  TimeRH.tm_year = (unsigned __int8)kDelTime._bf0 + 100;
  TimeRH.tm_mon = (((unsigned int)kDelTime._bf0 >> 8) & 0x1F) - 1;
  TimeRH.tm_min = (unsigned int)kDelTime._bf0 >> 25;
  TimeRH.tm_mday = ((unsigned int)kDelTime._bf0 >> 13) & 0x3F;
  TimeRH.tm_hour = ((unsigned int)kDelTime._bf0 >> 19) & 0x3F;
  TimeRH.tm_sec = 0;
  v12 = _mktime32(&TimeRH);
  v13 = _difftime32(v12, v11);
  v14 = (signed int)(v13 / 86400.0);
  v15 = (signed int)(v13 / 3600.0);
  v16 = v15 % 24;
  iHour = v15 % 24;
  v17 = v13 - (double)(86400 * v14) - (double)(3600 * v15 % 24);
  v18 = (signed int)((signed int)v17 + ((unsigned __int64)(-2004318071i64 * (signed int)v17) >> 32)) >> 5;
  v19 = v18 + ((unsigned int)v18 >> 31);
  v20 = TextData::Get(0x27444090u);
  v21 = (char *)(strResult - v20);
  do
  {
    v22 = *v20;
    v20[(_DWORD)v21] = *v20;
    ++v20;
  }
  while ( v22 );
  if ( v14 > 0 )
  {
    v23 = TextData::Get(0x97BEF4E9u);
    sprintf(strDay, v23);
    v24 = (int)strDay;
    do
    {
      v25 = *(_BYTE *)v24;
      *(_BYTE *)(v51 + v24) = *(_BYTE *)v24;
      ++v24;
    }
    while ( v25 );
    v26 = strlen(strDay) + 1;
    v27 = (char *)&TimeRH.tm_isdst + 3;
    do
    {
      v28 = *((_BYTE *)v27 + 1);
      v27 = (char *)v27 + 1;
    }
    while ( v28 );
    memcpy(v27, strDay, v26);
    v16 = iHour;
  }
  if ( v16 > 0 )
  {
    v29 = TextData::Get(0xA703F2F6u);
    sprintf(strHour, v29);
    v30 = (int)strHour;
    do
    {
      v31 = *(_BYTE *)v30;
      *(_BYTE *)(v47 + v30) = *(_BYTE *)v30;
      ++v30;
    }
    while ( v31 );
    v32 = strlen(strHour) + 1;
    v33 = (char *)&TimeRH.tm_isdst + 3;
    do
    {
      v34 = *((_BYTE *)v33 + 1);
      v33 = (char *)v33 + 1;
    }
    while ( v34 );
    memcpy(v33, strHour, v32);
  }
  if ( v19 > 0 )
  {
    v35 = TextData::Get(0xF507F634u);
    sprintf(strMinute, v35);
    v36 = (int)strMinute;
    do
    {
      v37 = *(_BYTE *)v36;
      *(_BYTE *)(v50 + v36) = *(_BYTE *)v36;
      ++v36;
    }
    while ( v37 );
    v38 = strlen(strMinute) + 1;
    v39 = (char *)&TimeRH.tm_isdst + 3;
    do
    {
      v40 = *((_BYTE *)v39 + 1);
      v39 = (char *)v39 + 1;
    }
    while ( v40 );
    memcpy(v39, strMinute, v38);
  }
  ((void (__stdcall *)(_DWORD))v48->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(strResult);
  GetShineDateStr(kDelTime, acDeleteDate, 18, 0);
  v41 = v48->m_apkTextWin[iIndex + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v42 = TextData::Get(0x7ACAD1D9u);
  v43 = fs(v42);
  v41[118].__vecDelDtor((NiRefObject *)v48->m_apkTextWin[iIndex + 1], (unsigned int)v43);
  v44 = (int)acDeleteDate;
  do
  {
    v45 = *(_BYTE *)v44;
    *(_BYTE *)((char *)v48 - acDeleteDate + v44 + 420) = *(_BYTE *)v44;
    ++v44;
  }
  while ( v45 );
  return iIndex + 2;
}
// A85C00: using guessed type int __security_cookie;

//----- (0052A5C0) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertItemEffectContents(ItemInfoWin *this, ItemInfo *pkInfo, int *iIndex)
{
  unsigned int v3; // ebx@1
  ItemInfoWin *v4; // edi@1
  void *v5; // eax@2
  ItemActionEffectDesc *v6; // ebx@4
  char *v7; // ebx@8
  int v8; // eax@9
  int v9; // eax@12
  PgWinText *v10; // ecx@13
  char *v11; // [sp-Ch] [bp-128h]@6
  int iTextLine; // [sp+Ch] [bp-110h]@1
  HDC__ *hDC; // [sp+10h] [bp-10Ch]@5
  unsigned int i; // [sp+14h] [bp-108h]@1
  char acStr[256]; // [sp+18h] [bp-104h]@5
  unsigned int v16; // [sp+118h] [bp-4h]@1
  int v17; // [sp+11Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = 0;
  v4 = this;
  iTextLine = *iIndex;
  i = 0;
  if ( ITableBase<ActionEffectItem_ActionEffectItemTab>::GetTotal() )
  {
    do
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActionEffectItem_ActionEffectItemTab>::ms_pkTable + 4), v3);
      if ( v5 )
      {
        if ( *(_WORD *)v5 == pkInfo->ID )
        {
          v6 = ItemActionEffectDescTab::GetByItemActionID(*((_WORD *)v5 + 1));
          if ( v6 )
          {
            acStr[0] = 0;
            memset(&acStr[1], 0, 0xFFu);
            hDC = *(HDC__ **)(((int (*)(void))v4->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)()
                            + 192);
            if ( v6->UseItem )
            {
              TextData2::Get(0xB8D2E5D2u);
              v11 = "%s %s";
            }
            else
            {
              TextData2::Get(0xCED02416u);
              v11 = "%s %s";
            }
            v7 = fs(v11);
            memset(acStr, 0, 0x100u);
            while ( *iIndex < 80 )
            {
              v8 = PgUtil::StringPixelCopy(acStr, v7, hDC, v4->m_iItemNameLength);
              if ( !v8 )
                break;
              acStr[v8] = 0;
              v7 += v8;
              ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
              ((void (__stdcall *)(_DWORD, signed int, signed int, signed int))v4->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
                0,
                200,
                20,
                255);
              memset(acStr, 0, 0x100u);
            }
          }
        }
      }
      ++i;
      v3 = i;
    }
    while ( i < ITableBase<ActionEffectItem_ActionEffectItemTab>::GetTotal() );
  }
  v9 = *iIndex;
  if ( iTextLine < *iIndex )
  {
    v10 = v4->m_apkTextWin[v9];
    *iIndex = v9 + 1;
    ((void (__stdcall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  }
}
// A85C00: using guessed type int __security_cookie;
// A97E64: using guessed type int ITableBase_ActionEffectItem_ActionEffectItemTab___ms_pkTable;

//----- (0052A7C0) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertRequireWeponContents(ItemInfoWin *this, ItemInfo *pkItemInfo, int *iIndex)
{
  char *v3; // eax@3
  char *v4; // eax@4
  const void *v5; // edx@4
  char v6; // cl@5
  unsigned int v7; // eax@6
  void *v8; // edi@6
  char v9; // cl@7
  char *v10; // eax@9
  char v11; // cl@10
  char v12; // cl@12
  char *v13; // eax@14
  char v14; // cl@15
  char v15; // cl@17
  char *v16; // eax@19
  char v17; // cl@20
  char v18; // cl@22
  char *v19; // eax@24
  char v20; // cl@25
  char v21; // cl@27
  char *v22; // eax@29
  char v23; // cl@30
  char v24; // cl@32
  char *v25; // eax@34
  char v26; // cl@35
  char v27; // cl@37
  char *v28; // eax@39
  char v29; // cl@40
  char v30; // cl@42
  char *v31; // eax@44
  char v32; // cl@45
  char v33; // cl@47
  char *v34; // eax@49
  char v35; // cl@50
  char v36; // cl@52
  char *v37; // eax@54
  char v38; // cl@55
  char v39; // cl@57
  char *v40; // eax@59
  char v41; // cl@60
  char v42; // cl@62
  Item *v43; // eax@64
  ItemInfo *v44; // eax@65
  const __int64 v45; // kr00_8@68
  ItemInfoWin *v46; // [sp+8h] [bp-58h]@1
  D3DXCOLOR kTextColor; // [sp+Ch] [bp-54h]@6
  char pkBuff[64]; // [sp+1Ch] [bp-44h]@3
  unsigned int v49; // [sp+5Ch] [bp-4h]@1
  int v50; // [sp+60h] [bp+0h]@1

  v49 = (unsigned int)&v50 ^ __security_cookie;
  v46 = this;
  if ( pkItemInfo && pkItemInfo->Class == 26 )
  {
    pkBuff[0] = 0;
    memset(&pkBuff[1], 0, 0x3Fu);
    v3 = TextData2::Get(0x2D8479A5u);
    sprintf(pkBuff, v3);
    switch ( pkItemInfo->WeaponType )
    {
      case 1:
        v4 = TextData2::Get(0x5E8CB8A7u);
        v5 = v4;
        do
          v6 = *v4++;
        while ( v6 );
        v7 = v4 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v9 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v9 );
        goto LABEL_63;
      case 0x15:
        v10 = TextData2::Get(0x6791B8B1u);
        v5 = v10;
        do
          v11 = *v10++;
        while ( v11 );
        v7 = v10 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v12 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v12 );
        goto LABEL_63;
      case 2:
        v13 = TextData2::Get(0xC2E7D923u);
        v5 = v13;
        do
          v14 = *v13++;
        while ( v14 );
        v7 = v13 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v15 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v15 );
        goto LABEL_63;
      case 3:
        v16 = TextData2::Get(0xC73E1F0Du);
        v5 = v16;
        do
          v17 = *v16++;
        while ( v17 );
        v7 = v16 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v18 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v18 );
        goto LABEL_63;
      case 4:
        v19 = TextData2::Get(0xCBE6D911u);
        v5 = v19;
        do
          v20 = *v19++;
        while ( v20 );
        v7 = v19 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v21 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v21 );
        goto LABEL_63;
      case 5:
        v22 = TextData2::Get(0xB4F21E0Fu);
        v5 = v22;
        do
          v23 = *v22++;
        while ( v23 );
        v7 = v22 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v24 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v24 );
        goto LABEL_63;
      case 0xA:
        v25 = TextData2::Get(0xB5E8301Bu);
        v5 = v25;
        do
          v26 = *v25++;
        while ( v26 );
        v7 = v25 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v27 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v27 );
        goto LABEL_63;
      case 0xB:
        v28 = TextData2::Get(0xB4FC1D1Au);
        v5 = v28;
        do
          v29 = *v28++;
        while ( v29 );
        v7 = v28 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v30 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v30 );
        goto LABEL_63;
      case 0xD:
        v31 = TextData2::Get(0x6322619u);
        v5 = v31;
        do
          v32 = *v31++;
        while ( v32 );
        v7 = v31 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v33 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v33 );
        goto LABEL_63;
      case 0x11:
        v34 = TextData2::Get(0xA3B2823u);
        v5 = v34;
        do
          v35 = *v34++;
        while ( v35 );
        v7 = v34 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v36 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v36 );
        goto LABEL_63;
      case 0x12:
        v37 = TextData2::Get(0xBFE8300Du);
        v5 = v37;
        do
          v38 = *v37++;
        while ( v38 );
        v7 = v37 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v39 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v39 );
        goto LABEL_63;
      case 0x13:
        v40 = TextData2::Get(0xBF2C1D0Du);
        v5 = v40;
        do
          v41 = *v40++;
        while ( v41 );
        v7 = v40 - v5;
        v8 = (char *)&kTextColor.a + 3;
        do
        {
          v42 = *((_BYTE *)v8 + 1);
          v8 = (char *)v8 + 1;
        }
        while ( v42 );
LABEL_63:
        memcpy(v8, v5, v7);
        break;
      default:
        break;
    }
    LODWORD(kTextColor.r) = (_DWORD)Color::m_kDxWhiteColor.r;
    kTextColor.a = Color::m_kDxWhiteColor.a;
    kTextColor.g = Color::m_kDxWhiteColor.g;
    kTextColor.b = Color::m_kDxWhiteColor.b;
    v43 = Inventory::GetEquipedWeapon(&g_kInventory);
    if ( v43 )
    {
      v44 = v43->m_pkInfo;
      if ( v44 )
      {
        if ( v44->WeaponType != pkItemInfo->WeaponType )
        {
          LODWORD(kTextColor.r) = (_DWORD)Color::m_kDxRedColor.r;
          kTextColor.g = Color::m_kDxRedColor.g;
          kTextColor.b = Color::m_kDxRedColor.b;
          kTextColor.a = Color::m_kDxRedColor.a;
        }
      }
    }
    else
    {
      v45 = CharClass::GetBitbyClassType(pkItemInfo->UseClass);
      if ( !(v45 & (1i64 << Char::GetClass(g_pkMainChar))) )
      {
        LODWORD(kTextColor.r) = (_DWORD)Color::m_kDxRedColor.r;
        kTextColor.g = Color::m_kDxRedColor.g;
        kTextColor.b = Color::m_kDxRedColor.b;
        kTextColor.a = Color::m_kDxRedColor.a;
      }
    }
    ((void (__stdcall *)(D3DXCOLOR *))v46->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&kTextColor);
    ((void (__stdcall *)(_DWORD))v46->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkBuff);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0052ABE0) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertSocketInfoContents(ItemInfoWin *this, Item *pkItem, int *iIndex)
{
  ItemInfoWin *v3; // edx@1
  ItemInfo *v4; // eax@2
  int v5; // ecx@4
  int v6; // edi@4
  char *v7; // eax@5
  ItemInfoWin *v8; // esi@9
  PgWinText *v9; // ST1C_4@9
  NiRefObjectVtbl *v10; // ST20_4@9
  char *v11; // eax@9
  char *v12; // ST0C_4@9
  NiRefObjectVtbl *v13; // edi@9
  PgWinText *v14; // ST20_4@9
  char *v15; // eax@9
  char *v16; // eax@9
  PgWinText *v17; // esi@9
  ItemInfoWin *v18; // [sp+4h] [bp-74h]@1
  char v19; // [sp+Ch] [bp-6Ch]@2
  char v20; // [sp+3Eh] [bp-3Ah]@5
  unsigned __int8 v21; // [sp+47h] [bp-31h]@4
  __int16 v22; // [sp+70h] [bp-8h]@2
  char v23; // [sp+72h] [bp-6h]@2
  unsigned int v24; // [sp+74h] [bp-4h]@1
  int v25; // [sp+78h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v3 = this;
  v18 = this;
  if ( pkItem )
  {
    v4 = pkItem->m_pkInfo;
    memcpy(&v19, &pkItem->m_kStruct, 0x64u);
    v22 = *(_WORD *)((char *)&pkItem->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v23 = BYTE3(pkItem->m_kStruct.itemattr.binditem.portal[9].y);
    if ( v4 )
    {
      if ( v4->Class == 5 )
      {
        v5 = v21;
        v6 = 0;
        if ( (signed int)v21 > 0 )
        {
          v7 = &v20;
          do
          {
            if ( *(_WORD *)v7 == -1 )
              ++v6;
            v7 += 3;
            --v5;
          }
          while ( v5 );
          ((void (__stdcall *)(signed int, signed int, signed int, signed int))v3->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
            220,
            100,
            20,
            255);
          v8 = v18;
          v9 = v18->m_apkTextWin[*iIndex];
          v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = TextData3::Get(0x87AC6D7Au);
          v12 = fs(v11);
          v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v12);
          ++*iIndex;
          ((void (__stdcall *)(signed int, signed int, signed int, signed int))v8->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
            220,
            100,
            20,
            255);
          v13 = v8->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v14 = v8->m_apkTextWin[*iIndex];
          v15 = TextData3::Get(0x2A586979u);
          v16 = fs(v15);
          v13[118].__vecDelDtor((NiRefObject *)v14, (unsigned int)v16);
          ++*iIndex;
          v17 = v8->m_apkTextWin[(*iIndex)++];
          v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
            (NiRefObject *)v17,
            (unsigned int)" ");
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0052AD40) --------------------------------------------------------
void __thiscall ItemInfoWin::ShowItemMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, int iLot, ItemViewInfo *pkViewInfo, ItemMoney *pkItemMoney, bool bBuyPossible)
{
  int v7; // ebx@0
  int v8; // edi@0
  ItemInfoWin *v9; // esi@1
  int v10; // eax@7
  NiRefObjectVtbl *v11; // edi@7
  PgFont *v12; // ebx@7
  char *v13; // eax@7
  char *v14; // eax@7
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // edx@7
  int v16; // eax@7
  char *v17; // ecx@7
  char v18; // dl@8
  int v19; // eax@9
  char v20; // dl@10
  unsigned int v21; // ST28_4@11
  int v22; // ebx@11
  NiRefObjectVtbl *v23; // edi@11
  NiSourceTexture *v24; // eax@11
  NiRefObjectVtbl *v25; // edi@11
  int v26; // ebx@11
  char *v27; // eax@11
  char *v28; // eax@11
  void *(__thiscall *v29)(NiRefObject *, unsigned int); // eax@11
  int v30; // [sp+34h] [bp-120h]@0
  D3DXCOLOR *v31; // [sp+34h] [bp-120h]@12
  tagSIZE kSize; // [sp+38h] [bp-11Ch]@11
  ItemInfo *pkItemInfo; // [sp+40h] [bp-114h]@6
  ItemViewInfo *v34; // [sp+44h] [bp-110h]@1
  ItemMoney *v35; // [sp+48h] [bp-10Ch]@1
  int v36; // [sp+4Ch] [bp-108h]@1
  char acStr[256]; // [sp+50h] [bp-104h]@7
  unsigned int v38; // [sp+150h] [bp-4h]@1
  int v39; // [sp+154h] [bp+0h]@1

  v38 = (unsigned int)&v39 ^ __security_cookie;
  v36 = iLot;
  v9 = this;
  v34 = pkViewInfo;
  v35 = pkItemMoney;
  if ( pkViewInfo )
  {
    if ( pkItemMoney )
    {
      if ( this->m_pkItemMoneyIcon )
      {
        if ( this->m_pkItemMoneyNumText )
        {
          if ( this->m_pkItemMoneyText )
          {
            pkItemInfo = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(pkViewInfo->ID);
            if ( pkItemInfo )
            {
              v10 = ((int (__stdcall *)(int, int))v9->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)(
                      v8,
                      v7);
              v11 = v9->m_pkItemMoneyNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v12 = (PgFont *)v10;
              v13 = TextData3::Get(0x2B2A567Au);
              v14 = fs(v13);
              v11[125].__vecDelDtor((NiRefObject *)v9->m_pkItemMoneyNumText, (unsigned int)v14);
              v15 = v9->m_pkItemMoneyNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor;
              v36 = iYPos + 3;
              ((void (__stdcall *)(int, int))v15)(iXPos + 3, iYPos + 3);
              ((void (__stdcall *)(signed int))v9->m_pkItemMoneyNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              v16 = ((int (*)(void))v9->m_pkItemMoneyNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
              v17 = &acStr[-v16];
              do
              {
                v18 = *(_BYTE *)v16;
                v17[v16] = *(_BYTE *)v16;
                ++v16;
              }
              while ( v18 );
              v19 = (int)acStr;
              do
                v20 = *(_BYTE *)v19++;
              while ( v20 );
              PgFont::GetTextSize(v12, acStr, v19 - (_DWORD)&acStr[1], &kSize);
              v21 = v34->IconIndex;
              v22 = iXPos + kSize.cx;
              v23 = v9->m_pkItemMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v24 = IconMgr::GetTexture(v34->IconFile);
              ((void (__thiscall *)(IconWin *, NiSourceTexture *, unsigned int))v23[146].__vecDelDtor)(
                v9->m_pkItemMoneyIcon,
                v24,
                v21);
              ((void (__stdcall *)(int, int))v9->m_pkItemMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
                v22,
                iYPos - 5);
              ((void (__stdcall *)(_DWORD))v9->m_pkItemMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[71].__vecDelDtor)(0.69999999);
              ((void (__stdcall *)(signed int))v9->m_pkItemMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              v25 = v9->m_pkItemMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v26 = v22 + v9->m_uiIconWidth + 6;
              v27 = TextData3::Get(0x10361F61u);
              v28 = fs(v27);
              v25[125].__vecDelDtor((NiRefObject *)v9->m_pkItemMoneyText, (unsigned int)v28);
              ((void (__stdcall *)(int, int))v9->m_pkItemMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
                v26,
                v36);
              ((void (__stdcall *)(signed int))v9->m_pkItemMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              v29 = v9->m_pkItemMoneyNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
              if ( bBuyPossible )
              {
                ((void (__stdcall *)(D3DXCOLOR *, int))v29)(&Color::m_kDxWhiteColor, v30);
                v31 = &Color::m_kDxWhiteColor;
              }
              else
              {
                ((void (__stdcall *)(D3DXCOLOR *, int))v29)(&Color::m_kDxRedColor, v30);
                v31 = &Color::m_kDxRedColor;
              }
              ((void (__cdecl *)(D3DXCOLOR *))v9->m_pkItemMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v31);
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0052AFE0) --------------------------------------------------------
void __thiscall ItemInfoWin::ShowTotalItemMoneyWin(ItemInfoWin *this, int iXPos, int iYPos, int iLot, ItemViewInfo *pkViewInfo, ItemMoney *pkItemMoney, bool bBuyPossible)
{
  ItemInfoWin *v7; // esi@1
  NiRefObjectVtbl *v8; // edi@6
  unsigned int v9; // ST10_4@6
  NiSourceTexture *v10; // eax@6
  int v11; // ebx@6
  void *v12; // eax@6
  NiRefObjectVtbl *v13; // edi@6
  char *v14; // eax@6
  char *v15; // eax@6
  int v16; // eax@6
  char *v17; // ecx@6
  char v18; // dl@7
  int v19; // eax@8
  char v20; // cl@9
  void *(__thiscall *v21)(NiRefObject *, unsigned int); // eax@10
  tagSIZE kSize; // [sp+28h] [bp-118h]@10
  ItemMoney *v23; // [sp+30h] [bp-110h]@1
  ItemInfo *pkItemInfo; // [sp+34h] [bp-10Ch]@5
  PgFont *pkFont; // [sp+38h] [bp-108h]@6
  char acStr[256]; // [sp+3Ch] [bp-104h]@6
  unsigned int v27; // [sp+13Ch] [bp-4h]@1
  int v28; // [sp+140h] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v7 = this;
  v23 = pkItemMoney;
  if ( pkViewInfo )
  {
    if ( pkItemMoney )
    {
      if ( this->m_pkItemTotalMoneyIcon )
      {
        if ( this->m_pkItemTotalMoneyText )
        {
          pkItemInfo = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(pkViewInfo->ID);
          if ( pkItemInfo )
          {
            v8 = v7->m_pkItemTotalMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v9 = pkViewInfo->IconIndex;
            v10 = IconMgr::GetTexture(pkViewInfo->IconFile);
            ((void (__thiscall *)(IconWin *, NiSourceTexture *, unsigned int, signed int, signed int))v8[146].__vecDelDtor)(
              v7->m_pkItemTotalMoneyIcon,
              v10,
              v9,
              32,
              32);
            ((void (__stdcall *)(int, int))v7->m_pkItemTotalMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
              iXPos,
              iYPos - 5);
            ((void (__stdcall *)(_DWORD))v7->m_pkItemTotalMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[71].__vecDelDtor)(0.69999999);
            ((void (__stdcall *)(signed int))v7->m_pkItemTotalMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            v11 = iXPos + v7->m_uiIconWidth + 3;
            v12 = (void *)((int (*)(void))v7->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
            v13 = v7->m_pkItemTotalMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkFont = (PgFont *)v12;
            v14 = TextData3::Get(0x10361F61u);
            v15 = fs(v14);
            v13[125].__vecDelDtor((NiRefObject *)v7->m_pkItemTotalMoneyText, (unsigned int)v15);
            v16 = ((int (*)(void))v7->m_pkItemTotalMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
            v17 = &acStr[-v16];
            do
            {
              v18 = *(_BYTE *)v16;
              v17[v16] = *(_BYTE *)v16;
              ++v16;
            }
            while ( v18 );
            v19 = (int)acStr;
            do
              v20 = *(_BYTE *)v19++;
            while ( v20 );
            PgFont::GetTextSize(pkFont, acStr, v19 - (_DWORD)&acStr[1], &kSize);
            v7->m_uiItemMoneyWidth += v11;
            ((void (__stdcall *)(int, int))v7->m_pkItemTotalMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
              v11 + 3,
              iYPos + 3);
            ((void (__stdcall *)(signed int))v7->m_pkItemTotalMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            v21 = v7->m_pkItemTotalMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
            if ( bBuyPossible )
              ((void (__stdcall *)(D3DXCOLOR *))v21)(&Color::m_kDxWhiteColor);
            else
              ((void (__stdcall *)(D3DXCOLOR *))v21)(&Color::m_kDxRedColor);
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0052B1F0) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertRandomOptCntContents(ItemInfoWin *this, Item *pkItem, int *iIndex)
{
  ItemInfoWin *v3; // edi@1
  int v4; // eax@3
  NiRefObjectVtbl *v5; // ebx@6
  char *v6; // eax@6
  char *v7; // eax@6

  v3 = this;
  if ( pkItem )
  {
    if ( *iIndex >= 0 )
    {
      v4 = ((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[12].__vecDelDtor)(pkItem);
      if ( v4 )
      {
        if ( *(_BYTE *)v4 & 0xFE )
        {
          if ( ((v3->m_iLimitRandomOption
               - (unsigned __int8)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[18].__vecDelDtor)(pkItem)) & 0x80000000u) == 0 )
          {
            v5 = v3->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v6 = TextData3::Get(0xE2ED021Du);
            v7 = fs(v6);
            v5[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[*iIndex], (unsigned int)v7);
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v3->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
              220,
              100,
              20,
              255);
          }
        }
      }
    }
  }
}

//----- (0052B2A0) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertRequireShieldContents(ItemInfoWin *this, ItemInfo *pkItemInfo, int *iIndex)
{
  char *v3; // eax@3
  char *v4; // eax@3
  char *v5; // edx@3
  char v6; // cl@4
  unsigned int v7; // eax@5
  void *v8; // edi@5
  char v9; // cl@6
  const void *v10; // esi@7
  float v11; // edx@7
  void *v12; // edi@7
  const void *v13; // esi@7
  char v14; // cl@7
  float v15; // eax@7
  Item *v16; // eax@7
  const __int64 v17; // kr00_8@10
  ItemInfoWin *v18; // [sp+8h] [bp-58h]@1
  D3DXCOLOR kTextColor; // [sp+Ch] [bp-54h]@5
  char pkBuff[64]; // [sp+1Ch] [bp-44h]@3
  unsigned int v21; // [sp+5Ch] [bp-4h]@1
  int v22; // [sp+60h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v18 = this;
  if ( pkItemInfo && pkItemInfo->Class == 37 )
  {
    pkBuff[0] = 0;
    memset(&pkBuff[1], 0, 0x3Fu);
    v3 = TextData2::Get(0x2D8479A5u);
    sprintf(pkBuff, v3);
    v4 = TextData3::Get(0xFF441E15u);
    v5 = v4;
    do
      v6 = *v4++;
    while ( v6 );
    v7 = v4 - v5;
    v8 = (char *)&kTextColor.a + 3;
    do
    {
      v9 = *((_BYTE *)v8 + 1);
      v8 = (char *)v8 + 1;
    }
    while ( v9 );
    v10 = v5;
    LODWORD(v11) = (_DWORD)Color::m_kDxWhiteColor.r;
    memcpy(v8, v10, 4 * (v7 >> 2));
    v13 = (char *)v10 + 4 * (v7 >> 2);
    v12 = (char *)v8 + 4 * (v7 >> 2);
    v14 = v7;
    v15 = Color::m_kDxWhiteColor.g;
    memcpy(v12, v13, v14 & 3);
    kTextColor.r = v11;
    kTextColor.b = Color::m_kDxWhiteColor.b;
    kTextColor.g = v15;
    kTextColor.a = Color::m_kDxWhiteColor.a;
    v16 = Inventory::GetLeftHandEquip(&g_kInventory);
    if ( v16 && (unsigned __int8)((int (__thiscall *)(Item *))v16->baseclass_0.vfptr[1].__vecDelDtor)(v16) != 7 )
    {
      LODWORD(kTextColor.r) = (_DWORD)Color::m_kDxRedColor.r;
      kTextColor.g = Color::m_kDxRedColor.g;
      kTextColor.b = Color::m_kDxRedColor.b;
      kTextColor.a = Color::m_kDxRedColor.a;
    }
    v17 = CharClass::GetBitbyClassType(pkItemInfo->UseClass);
    if ( !(v17 & (1i64 << Char::GetClass(g_pkMainChar))) )
    {
      LODWORD(kTextColor.r) = (_DWORD)Color::m_kDxRedColor.r;
      kTextColor.g = Color::m_kDxRedColor.g;
      kTextColor.b = Color::m_kDxRedColor.b;
      kTextColor.a = Color::m_kDxRedColor.a;
    }
    ((void (__cdecl *)(D3DXCOLOR *))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&kTextColor);
    ((void (__cdecl *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkBuff);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0052B430) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertMoverUpgradeContents(ItemInfoWin *this, ItemInfo *pkItemInfo, char nGrade, int *iIndex)
{
  ItemInfoWin *v4; // edi@1
  void *v5; // ebx@1
  NiRefObjectVtbl *v6; // ebx@2
  char *v7; // eax@2
  char *v8; // eax@2
  NiRefObjectVtbl *v9; // ebx@4
  char *v10; // eax@4
  char *v11; // eax@4
  NiRefObjectVtbl *v12; // ebx@4
  char *v13; // eax@4
  char *v14; // eax@4
  NiRefObjectVtbl *v15; // ebx@6
  char *v16; // eax@6
  char *v17; // eax@6
  NiRefObjectVtbl *v18; // ebx@8
  char *v19; // eax@8
  char *v20; // eax@8
  NiRefObjectVtbl *v21; // ebx@10
  char *v22; // eax@10
  char *v23; // ebx@11
  char *v24; // eax@12
  void *nGradea; // [sp+18h] [bp+Ch]@1

  v4 = this;
  v5 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<MoverUpgradeEffect_MoverUpgradeEffectTab>::ms_pkTable + 4),
         (unsigned __int8)nGrade);
  nGradea = v5;
  if ( *(_WORD *)v5 )
  {
    v6 = v4->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = TextData3::Get(0x3D202268u);
    v8 = fs(v7);
    v6[118].__vecDelDtor((NiRefObject *)v4->m_apkTextWin[*iIndex], (unsigned int)v8);
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v5 = nGradea;
  }
  if ( *((_WORD *)v5 + 2) )
  {
    v9 = v4->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v10 = TextData3::Get(0x3D7B6760u);
    v11 = fs(v10);
    v9[118].__vecDelDtor((NiRefObject *)v4->m_apkTextWin[*iIndex], (unsigned int)v11);
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v12 = v4->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = TextData3::Get(0x3D7B676Bu);
    v14 = fs(v13);
    v12[118].__vecDelDtor((NiRefObject *)v4->m_apkTextWin[*iIndex], (unsigned int)v14);
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v5 = nGradea;
  }
  if ( *((_WORD *)v5 + 4) )
  {
    v15 = v4->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = TextData3::Get(0x89776A68u);
    v17 = fs(v16);
    v15[118].__vecDelDtor((NiRefObject *)v4->m_apkTextWin[*iIndex], (unsigned int)v17);
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v5 = nGradea;
  }
  if ( *((_WORD *)v5 + 3) )
  {
    v18 = v4->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = TextData3::Get(0xA0BAAEA6u);
    v20 = fs(v19);
    v18[118].__vecDelDtor((NiRefObject *)v4->m_apkTextWin[*iIndex], (unsigned int)v20);
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v5 = nGradea;
  }
  if ( strcmp((const char *)v5 + 10, "-") )
  {
    v21 = v4->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v22 = TextData3::Get(0x3D216C59u);
    v21[118].__vecDelDtor((NiRefObject *)v4->m_apkTextWin[*iIndex], (unsigned int)v22);
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v5 = nGradea;
  }
  v23 = (char *)v5 + 42;
  if ( strcmp(v23, "-") )
  {
    AbnormalStateViewInfoTab::GetByInxName(v23);
    v24 = fs("+ %s");
    ItemInfoWin::SetTextBeginNewLine(v4, v24, iIndex, &Color::m_kDxWhiteColor);
  }
}
// A97F14: using guessed type int ITableBase_MoverUpgradeEffect_MoverUpgradeEffectTab___ms_pkTable;

//----- (0052B760) --------------------------------------------------------
void __thiscall ItemInfoWin::ItemInfoWin(ItemInfoWin *this)
{
  ItemInfoWin *v1; // esi@1
  unsigned __int16 v2; // ax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v3; // [sp-28h] [bp-3Ch]@1
  int v4; // [sp-18h] [bp-2Ch]@1
  signed int v5; // [sp-14h] [bp-28h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // [sp+0h] [bp-14h]@1
  ItemInfoWin *v7; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v1 = this;
  v7 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v6 = &v3;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemInfoWin::_vftable_;
  v5 = 15;
  v4 = 0;
  v8 = 0;
  v3.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v3, "LimitRandomOption", 0x11u);
  v2 = CSingleDataMap::GetValue(&g_kSingleDataMap, v3);
  v1->RemainTimeUpdate = -1.0;
  v1->m_iLimitRandomOption = v2;
  v1->m_uiMoneyXPos = 0;
  v1->m_iFontHeight = 14;
  v1->m_pkItemMoneyIcon = 0;
  v1->m_pkItemMoneyText = 0;
  v1->m_pkItemMoneyNumText = 0;
  v1->m_pkItemTotalMoneyIcon = 0;
  v1->m_pkItemTotalMoneyText = 0;
  v1->m_uiItemMoneyWidth = 0;
  v1->strStaticItemDeleteTime[0] = 0;
  v1->strStaticDay[0] = 0;
  v1->strStaticHour[0] = 0;
  v1->strStaticMinute[0] = 0;
}
// 99AA10: using guessed type int (__stdcall *ItemInfoWin___vftable_)(int uiFlags);
// 99AA2C: using guessed type int (__thiscall *ItemInfoWin___vftable_)(void *p, char);

//----- (0052B850) --------------------------------------------------------
ItemInfoWin *__cdecl ItemInfoWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  ItemInfoWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x678u);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    ItemInfoWin::ItemInfoWin((ItemInfoWin *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiSourceTexture *, unsigned int, unsigned int))(*(_DWORD *)v5 + 548))(
                          v5,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (ItemInfoWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (0052B990) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertSetItemContents(ItemInfoWin *this, ItemInfo *pkInfo, int *iIndex)
{
  ItemInfoWin *v3; // edi@1
  NiRefObjectVtbl *v4; // ebx@4
  char *v5; // eax@4
  PgWinText *v6; // ecx@5
  PgWinText *v7; // ebx@5
  NiRefObjectVtbl *v8; // edi@5
  char *v9; // eax@5
  unsigned int v10; // ebx@5
  void *v11; // eax@6
  void *v12; // edi@6
  const char *v13; // eax@7
  signed int v14; // edi@9
  bool v15; // cf@9
  Item *v16; // eax@11
  unsigned int v17; // edi@18
  void *v18; // edi@19
  int v19; // ebx@21
  unsigned int v20; // edi@21
  PgWinText *v21; // ecx@26
  NiRefObjectVtbl *v22; // edi@26
  char *v23; // eax@26
  char *v24; // eax@26
  int v25; // eax@28
  char v26; // dl@29
  unsigned int v27; // edi@30
  const void *v28; // eax@32
  int v29; // ecx@34
  unsigned int v30; // eax@36
  int v31; // edi@36
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v32; // edx@39
  char *v33; // ecx@40
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v34; // ecx@41
  unsigned int v35; // eax@41
  int v36; // eax@45
  char *v37; // edi@45
  int v38; // eax@48
  PgWinText *v39; // ecx@57
  unsigned int v40; // [sp-10h] [bp-25Ch]@1
  unsigned int v41; // [sp+4h] [bp-248h]@18
  ItemInfoWin *v42; // [sp+8h] [bp-244h]@1
  void *pkTempItemActionEffectDesc; // [sp+Ch] [bp-240h]@25
  HDC__ *pkTempItemActionEffectDesca; // [sp+Ch] [bp-240h]@45
  void *pkTempInfo; // [sp+10h] [bp-23Ch]@6
  signed int pkTempInfoa; // [sp+10h] [bp-23Ch]@17
  signed int iEquipedSetItemCount; // [sp+14h] [bp-238h]@5
  unsigned int i; // [sp+18h] [bp-234h]@5
  signed int ia; // [sp+18h] [bp-234h]@17
  char _Ptr; // [sp+1Ch] [bp-230h]@30
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strDesc; // [sp+20h] [bp-22Ch]@28
  char buffer[256]; // [sp+3Ch] [bp-210h]@32
  char acStr[256]; // [sp+13Ch] [bp-110h]@47
  unsigned int v54; // [sp+23Ch] [bp-10h]@1
  int v55; // [sp+248h] [bp-4h]@30
  int v56; // [sp+24Ch] [bp+0h]@1

  v54 = (unsigned int)&v56 ^ __security_cookie;
  v40 = (unsigned int)&v56 ^ __security_cookie;
  v3 = this;
  v42 = this;
  if ( *iIndex < 80 && pkInfo->SetItemIndex[0] != 45 )
  {
    if ( SetItemNameTab::GetByInxName(pkInfo->SetItemIndex) )
    {
      v4 = v3->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = fs("[%s]");
      v4[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[*iIndex], (unsigned int)v5);
      ((void (__stdcall *)(signed int, signed int, signed int, signed int))v3->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        120,
        120,
        255,
        255);
    }
    v6 = v3->m_apkTextWin[(*iIndex)++];
    ((void (__stdcall *)(_DWORD, unsigned int))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
      " ",
      v40);
    v7 = v3->m_apkTextWin[(*iIndex)++];
    v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = TextData2::Get(0xDB653F36u);
    v8[118].__vecDelDtor((NiRefObject *)v7, (unsigned int)v9);
    v10 = 0;
    iEquipedSetItemCount = 0;
    i = 0;
    if ( ITableBase<ItemInfo_ItemInfoTab>::GetTotal() )
    {
      do
      {
        v11 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v10);
        v12 = v11;
        pkTempInfo = v11;
        if ( v11 )
        {
          v13 = (char *)v11 + 342;
          if ( *((_BYTE *)v12 + 342) != 45 )
          {
            if ( !strcmp(v13, pkInfo->SetItemIndex) )
            {
              ((void (__stdcall *)(char *))v42->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)v12 + 34);
              v14 = 0;
              v15 = 1;
              do
              {
                if ( v15 )
                {
                  v16 = g_kInventory.m_aspEquip[v14].m_pObject;
                  if ( v16 )
                  {
                    if ( *(_WORD *)pkTempInfo == v16->m_kStruct.itemid )
                    {
                      ((void (__stdcall *)(D3DXCOLOR *))v42->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
                      ++iEquipedSetItemCount;
                    }
                  }
                }
                ++v14;
                v15 = (unsigned int)v14 < 0x1E;
              }
              while ( v14 < 30 );
              ++*iIndex;
              v10 = i;
            }
          }
        }
        ++v10;
        i = v10;
      }
      while ( v10 < ITableBase<ItemInfo_ItemInfoTab>::GetTotal() );
    }
    ia = 2;
    pkTempInfoa = 4;
    do
    {
      v17 = 0;
      v41 = 0;
      if ( SetEffectTab::GetTotal() )
      {
        do
        {
          v18 = CDataReader::GetRecord((CDataReader *)(ITableBase<SetEffect_SetEffectTab>::ms_pkTable + 4), v17);
          if ( !strcmp((const char *)v18, pkInfo->SetItemIndex) )
          {
            if ( *((_BYTE *)v18 + 32) == ia )
            {
              v19 = *(_WORD *)((char *)v18 + 33);
              v20 = 0;
              if ( ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::GetTotal() )
              {
                while ( *(_WORD *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable
                                                  + 4),
                                    v20) != v19 )
                {
                  ++v20;
                  if ( v20 >= ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::GetTotal() )
                    goto LABEL_55;
                }
                pkTempItemActionEffectDesc = CDataReader::GetRecord(
                                               (CDataReader *)(ITableBase<ItemActionEffectDesc_ItemActionEffectDescTab>::ms_pkTable
                                                             + 4),
                                               v20);
                if ( pkTempItemActionEffectDesc )
                {
                  v21 = v42->m_apkTextWin[(*iIndex)++];
                  ((void (__stdcall *)(_DWORD))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
                  v22 = v42->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                  v23 = TextData2::Get(0xDB03E333u);
                  v24 = fs(v23);
                  v22[118].__vecDelDtor((NiRefObject *)v42->m_apkTextWin[*iIndex], (unsigned int)v24);
                  if ( ia <= iEquipedSetItemCount )
                    ((void (__stdcall *)(int *))v42->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxBlueColor);
                  ++*iIndex;
                  v25 = (int)((char *)pkTempItemActionEffectDesc + 3);
                  strDesc.baseclass_0._Myres = 15;
                  strDesc.baseclass_0._Mysize = 0;
                  strDesc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                  do
                    v26 = *(_BYTE *)v25++;
                  while ( v26 );
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                    &strDesc,
                    (const char *)pkTempItemActionEffectDesc + 3,
                    v25 - (_DWORD)((char *)pkTempItemActionEffectDesc + 4));
                  v55 = 0;
                  _Ptr = 10;
                  v27 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(
                          &strDesc,
                          &_Ptr,
                          0,
                          1u);
                  if ( v27 != -1 )
                  {
                    _Ptr = 10;
                    do
                    {
                      buffer[0] = 0;
                      memset(&buffer[1], 0, 0xFFu);
                      v28 = *(const void **)&strDesc;
                      if ( strDesc.baseclass_0._Myres < 0x10 )
                        v28 = &strDesc;
                      memcpy_s(buffer, v27, v28, 0);
                      v29 = *iIndex;
                      buffer[0] = 0;
                      ((void (__stdcall *)(_DWORD))v42->m_apkTextWin[v29]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(buffer);
                      if ( ia <= iEquipedSetItemCount )
                        ((void (__stdcall *)(D3DXCOLOR *))v42->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
                      v30 = strDesc.baseclass_0._Mysize;
                      ++*iIndex;
                      v31 = v27 + 1;
                      if ( v30 < v31 )
                        v31 = v30;
                      if ( v31 )
                      {
                        v32 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strDesc;
                        if ( strDesc.baseclass_0._Myres >= 0x10 )
                        {
                          v33 = *(char **)&strDesc;
                        }
                        else
                        {
                          v32 = &strDesc;
                          v33 = (char *)&strDesc;
                        }
                        memmove(v33, (char *)v32 + v31, v30 - v31);
                        v34 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strDesc;
                        v35 = strDesc.baseclass_0._Mysize - v31;
                        strDesc.baseclass_0._Mysize -= v31;
                        if ( strDesc.baseclass_0._Myres < 0x10 )
                          v34 = &strDesc;
                        v34->baseclass_0.___u0.baseclass_0.dummy[v35] = 0;
                      }
                      v27 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(
                              &strDesc,
                              &_Ptr,
                              0,
                              1u);
                    }
                    while ( v27 != -1 );
                  }
                  v36 = ((int (*)(void))v42->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
                  v37 = *(char **)&strDesc;
                  pkTempItemActionEffectDesca = *(HDC__ **)(v36 + 192);
                  if ( strDesc.baseclass_0._Myres < 0x10 )
                    v37 = (char *)&strDesc;
                  memset(acStr, 0, 0x100u);
                  while ( *iIndex < 80 )
                  {
                    v38 = PgUtil::StringPixelCopy(acStr, v37, pkTempItemActionEffectDesca, v42->m_iItemNameLength);
                    if ( !v38 )
                      break;
                    acStr[v38] = 0;
                    v37 += v38;
                    ((void (__stdcall *)(_DWORD))v42->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
                    if ( ia <= iEquipedSetItemCount )
                      ((void (__stdcall *)(_DWORD))v42->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
                    ++*iIndex;
                    memset(acStr, 0, 0x100u);
                  }
                  v55 = -1;
                  if ( strDesc.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&strDesc);
                  strDesc.baseclass_0._Myres = 15;
                  strDesc.baseclass_0._Mysize = 0;
                  strDesc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                }
              }
            }
          }
LABEL_55:
          ++v41;
          v17 = v41;
        }
        while ( v41 < SetEffectTab::GetTotal() );
      }
      ++ia;
      --pkTempInfoa;
    }
    while ( pkTempInfoa );
    v39 = v42->m_apkTextWin[(*iIndex)++];
    ((void (__cdecl *)(_DWORD))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  }
}
// A745F0: using guessed type int Color__m_kDxBlueColor;
// A85C00: using guessed type int __security_cookie;
// A97E5C: using guessed type int ITableBase_ItemActionEffectDesc_ItemActionEffectDescTab___ms_pkTable;
// A97E60: using guessed type int ITableBase_SetEffect_SetEffectTab___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0052C010) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertItemMixContents(ItemInfoWin *this, Item *pkItem, int *iIndex)
{
  ItemInfoWin *v3; // edi@1
  ItemInfo *v4; // eax@3
  char *v5; // eax@4
  NiRefObjectVtbl *v6; // ebx@7
  char *v7; // eax@7

  v3 = this;
  if ( pkItem && *iIndex >= 0 )
  {
    v4 = pkItem->m_pkInfo;
    if ( v4 )
      v5 = v4->InxName;
    else
      v5 = 0;
    if ( ItemMixDataTab::IsMixItem(&g_kItemMixDataTab, v5) )
    {
      v6 = v3->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = TextData3::Get(0x17C17067u);
      v6[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[*iIndex], (unsigned int)v7);
      ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    }
  }
}

//----- (0052C090) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertNameContents(ItemInfoWin *this, ItemInfoWin::sNameContentsParameter *Parameter, int *iIndex)
{
  bool v3; // sf@1
  unsigned __int8 v4; // of@1
  ItemViewInfo *v5; // edx@1
  int v6; // esi@1
  void *v7; // edi@1
  void *v8; // ecx@1
  BRAccUpgradeInfo *v9; // eax@8
  UpgradeFactor v10; // ecx@10
  UpGradeInfo *v11; // eax@26
  UpgradeFactor v12; // ecx@28
  char *v13; // esi@46
  WEAPON_TITLE_DATA *v14; // eax@48
  unsigned int v15; // ecx@53
  signed int v16; // edi@53
  unsigned int v17; // eax@60
  ItemInfoWin *v18; // esi@64
  PgWinText *v19; // edx@67
  NiRefObjectVtbl *v20; // edi@69
  char *v21; // eax@69
  int v22; // edi@83
  unsigned __int8 v23; // al@86
  unsigned int v24; // ecx@88
  int v25; // eax@89
  int v26; // edx@90
  int v27; // edi@90
  NiRefObjectVtbl *v28; // edi@92
  char *v29; // eax@92
  char *v30; // eax@92
  void *(__thiscall *v31)(NiRefObject *, unsigned int); // eax@92
  void *v32; // edi@93
  const char *v33; // edi@97
  RIDING *v34; // eax@97
  const char *v35; // edx@98
  int v36; // eax@98
  char v37; // cl@99
  MoverItem *v38; // eax@101
  MoverHG *v39; // eax@102
  const char *v40; // edx@103
  int v41; // eax@103
  int v42; // edi@103
  char v43; // cl@104
  char *v44; // eax@106
  NiRefObjectVtbl *v45; // edi@109
  char *v46; // eax@109
  char *v47; // eax@109
  const char *v48; // eax@114
  PupMain *v49; // eax@115
  PupView *v50; // eax@116
  const char *v51; // edx@117
  int v52; // eax@117
  int v53; // edi@117
  char v54; // cl@118
  float v55; // ecx@120
  int v56; // edi@120
  char *v57; // eax@120
  char *v58; // eax@120
  PgWinText *v59; // ecx@120
  void *v60; // edi@122
  unsigned int v61; // edi@123
  char *v62; // eax@125
  PgWinText *v63; // ecx@126
  signed int v64; // edi@134
  NiRefObjectVtbl *v65; // edi@135
  char *v66; // eax@135
  char *v67; // eax@135
  MinimonInfo *v68; // eax@138
  MinimonEquipPos v69; // eax@139
  char *v70; // eax@147
  NiRefObjectVtbl *v71; // edi@150
  char *v72; // eax@150
  NiRefObjectVtbl *v73; // edi@151
  char *v74; // eax@151
  const char *v75; // eax@153
  GradeItemOption *v76; // edi@157
  int v77; // eax@159
  unsigned __int8 v78; // cl@160
  unsigned int v79; // edx@162
  int v80; // ecx@163
  int v81; // eax@164
  int v82; // edi@164
  float v83; // eax@172
  int v84; // edi@172
  char *v85; // eax@172
  NiRefObjectVtbl *v86; // edi@173
  char *v87; // eax@173
  PgWinText *v88; // ecx@174
  NiRefObjectVtbl *v89; // edi@177
  char *v90; // eax@177
  float v91; // eax@184
  int v92; // edi@184
  char *v93; // eax@184
  NiRefObjectVtbl *v94; // edi@185
  char *v95; // eax@185
  PgWinText *v96; // ecx@186
  NiRefObjectVtbl *v97; // edi@189
  char *v98; // eax@189
  float v99; // eax@196
  int v100; // edi@196
  char *v101; // eax@196
  NiRefObjectVtbl *v102; // edi@197
  char *v103; // eax@197
  PgWinText *v104; // ecx@198
  NiRefObjectVtbl *v105; // edi@201
  char *v106; // eax@201
  float v107; // eax@208
  int v108; // edi@208
  char *v109; // eax@208
  NiRefObjectVtbl *v110; // edi@209
  char *v111; // eax@209
  PgWinText *v112; // ecx@210
  NiRefObjectVtbl *v113; // edi@213
  char *v114; // eax@213
  float v115; // eax@220
  int v116; // edi@220
  char *v117; // eax@220
  NiRefObjectVtbl *v118; // edi@221
  char *v119; // eax@221
  PgWinText *v120; // ecx@222
  NiRefObjectVtbl *v121; // edi@225
  char *v122; // eax@225
  unsigned int v123; // eax@229
  bool v124; // zf@236
  NiRefObjectVtbl *v125; // edi@237
  char *v126; // eax@237
  char *v127; // eax@237
  NiRefObjectVtbl *v128; // edi@240
  PgWinText *v129; // ecx@241
  float v130; // edi@244
  char *v131; // eax@246
  char *v132; // eax@248
  char *v133; // eax@250
  unsigned __int16 v134; // ax@251
  int v135; // edi@251
  int v136; // ecx@251
  NiRefObjectVtbl *v137; // edi@262
  char *v138; // eax@262
  NiRefObjectVtbl *v139; // edi@268
  char *v140; // eax@268
  NiRefObjectVtbl *v141; // edi@274
  char *v142; // eax@274
  NiRefObjectVtbl *v143; // edi@280
  char *v144; // eax@280
  NiRefObjectVtbl *v145; // edi@286
  char *v146; // eax@286
  NiRefObjectVtbl *v147; // edi@298
  char *v148; // eax@298
  PgWinText *v149; // ecx@298
  char *v150; // eax@299
  NiRefObjectVtbl *v151; // edi@305
  char *v152; // eax@305
  PgWinText *v153; // ecx@305
  char *v154; // eax@306
  NiRefObjectVtbl *v155; // edi@312
  char *v156; // eax@312
  PgWinText *v157; // ecx@312
  char *v158; // eax@313
  NiRefObjectVtbl *v159; // edi@319
  char *v160; // eax@319
  PgWinText *v161; // ecx@319
  char *v162; // eax@320
  char *v163; // eax@326
  char *v164; // eax@327
  NiRefObjectVtbl *v165; // edi@331
  char *v166; // eax@331
  NiRefObjectVtbl *v167; // edi@333
  char *v168; // eax@333
  NiRefObjectVtbl *v169; // edi@335
  char *v170; // eax@335
  NiRefObjectVtbl *v171; // edi@337
  char *v172; // eax@337
  NiRefObjectVtbl *v173; // edi@339
  char *v174; // eax@339
  PgWinText *v175; // ecx@341
  int v176; // eax@348
  int v177; // edi@362
  unsigned __int16 v178; // ax@372
  char *v179; // eax@374
  int v180; // eax@379
  char *v181; // eax@381
  int v182; // eax@392
  int v183; // edi@396
  int v184; // eax@405
  char *v185; // eax@407
  int v186; // eax@418
  int v187; // edi@422
  unsigned __int16 v188; // ax@432
  char *v189; // eax@434
  int v190; // eax@439
  char *v191; // eax@441
  int v192; // edi@449
  char *v193; // eax@458
  PgWinText *v194; // ecx@458
  char *v195; // eax@460
  int v196; // eax@465
  int v197; // edi@469
  int v198; // eax@478
  char *v199; // eax@480
  unsigned int v200; // eax@486
  char *v201; // eax@488
  unsigned int v202; // ecx@489
  char *v203; // eax@491
  unsigned int v204; // ecx@492
  char *v205; // eax@494
  unsigned int v206; // ecx@495
  char *v207; // eax@497
  int v208; // edi@498
  int v209; // eax@498
  int v210; // ecx@498
  char *v211; // eax@502
  int v212; // eax@512
  char *v213; // eax@514
  int v214; // edi@515
  int v215; // eax@515
  int v216; // ecx@515
  char *v217; // eax@519
  int v218; // eax@529
  char *v219; // eax@531
  char *v220; // eax@534
  char *v221; // eax@535
  unsigned int v222; // eax@537
  double v223; // st6@538
  double v224; // st6@544
  double v225; // st5@544
  char *v226; // eax@549
  unsigned int v227; // eax@556
  bool v228; // zf@563
  NiRefObjectVtbl *v229; // edi@564
  char *v230; // eax@564
  char *v231; // eax@564
  NiRefObjectVtbl *v232; // edi@567
  char *v233; // eax@567
  char *v234; // eax@567
  char *v235; // eax@568
  char *v236; // eax@572
  char *v237; // eax@575
  char *v238; // eax@578
  int v239; // eax@580
  unsigned int v240; // edi@583
  ItemInfoWin::sNameContentsParameter *v241; // esi@584
  void *v242; // eax@585
  NiRefObjectVtbl *v243; // edi@589
  char *v244; // eax@589
  char *v245; // eax@589
  char *v246; // edi@591
  char *v247; // eax@591
  const char *v248; // edi@591
  char *v249; // ecx@591
  int v250; // eax@591
  char v251; // dl@592
  char *v252; // eax@593
  const char *v253; // edi@593
  char *v254; // ecx@593
  int v255; // eax@593
  char v256; // dl@594
  char *v257; // eax@595
  const char *v258; // edi@595
  char *v259; // ecx@595
  int v260; // eax@595
  char v261; // dl@596
  int (__stdcall *v262)(_DWORD); // eax@597
  unsigned int v263; // eax@597
  void *v264; // eax@597
  char *v265; // eax@599
  NiRefObjectVtbl *v266; // edi@599
  char *v267; // eax@599
  char *v268; // eax@599
  NiRefObjectVtbl *v269; // edi@600
  char *v270; // eax@600
  const char *v271; // eax@601
  PgWinText *v272; // esi@604
  char *v273; // [sp+C0h] [bp-3D0h]@552
  signed int v274; // [sp+C4h] [bp-3CCh]@75
  char *v275; // [sp+C4h] [bp-3CCh]@140
  char *v276; // [sp+C4h] [bp-3CCh]@240
  char *v277; // [sp+C4h] [bp-3CCh]@256
  char *v278; // [sp+C4h] [bp-3CCh]@352
  char *v279; // [sp+C4h] [bp-3CCh]@376
  char *v280; // [sp+C4h] [bp-3CCh]@409
  char *v281; // [sp+C4h] [bp-3CCh]@436
  char *v282; // [sp+C4h] [bp-3CCh]@482
  char *v283; // [sp+C4h] [bp-3CCh]@504
  char *v284; // [sp+C4h] [bp-3CCh]@521
  char *v285; // [sp+C4h] [bp-3CCh]@552
  unsigned __int16 v286; // [sp+C8h] [bp-3C8h]@7
  char *v287; // [sp+C8h] [bp-3C8h]@67
  const char *v288[6]; // [sp+C8h] [bp-3C8h]@75
  char *v289; // [sp+C8h] [bp-3C8h]@140
  const char *v290[6]; // [sp+C8h] [bp-3C8h]@352
  char *v291; // [sp+C8h] [bp-3C8h]@376
  char *v292; // [sp+C8h] [bp-3C8h]@409
  char *v293; // [sp+C8h] [bp-3C8h]@436
  char *v294; // [sp+C8h] [bp-3C8h]@482
  char *v295; // [sp+C8h] [bp-3C8h]@504
  char *v296; // [sp+C8h] [bp-3C8h]@521
  char *v297; // [sp+CCh] [bp-3C4h]@241
  char *v298; // [sp+CCh] [bp-3C4h]@298
  char *v299; // [sp+CCh] [bp-3C4h]@305
  char *v300; // [sp+CCh] [bp-3C4h]@312
  char *v301; // [sp+CCh] [bp-3C4h]@319
  unsigned int v302; // [sp+D0h] [bp-3C0h]@1
  signed int v303; // [sp+D0h] [bp-3C0h]@75
  D3DXCOLOR *v304; // [sp+D0h] [bp-3C0h]@126
  char *v305; // [sp+D0h] [bp-3C0h]@153
  tagSIZE kSize; // [sp+E0h] [bp-3B0h]@71
  __int64 v307; // [sp+E8h] [bp-3A8h]@48
  int v308; // [sp+F0h] [bp-3A0h]@44
  int v309; // [sp+F4h] [bp-39Ch]@44
  unsigned int v310; // [sp+F8h] [bp-398h]@44
  ItemInfoWin *thisa; // [sp+FCh] [bp-394h]@1
  int v312; // [sp+100h] [bp-390h]@2
  int v313; // [sp+104h] [bp-38Ch]@2
  int v314; // [sp+108h] [bp-388h]@2
  int v315; // [sp+10Ch] [bp-384h]@2
  int v316; // [sp+110h] [bp-380h]@2
  int v317; // [sp+114h] [bp-37Ch]@2
  int v318; // [sp+118h] [bp-378h]@2
  float v319; // [sp+11Ch] [bp-374h]@2
  int v320; // [sp+120h] [bp-370h]@2
  ItemInfoWin::sNameContentsParameter *pkCollectCard; // [sp+124h] [bp-36Ch]@1
  ItemViewInfo *fCrlTB; // [sp+128h] [bp-368h]@1
  char cSerialKey; // [sp+12Fh] [bp-361h]@2
  void *pkItem; // [sp+130h] [bp-360h]@1
  GradeItemOption *fRanCriRate; // [sp+134h] [bp-35Ch]@1
  void *pkInfo; // [sp+138h] [bp-358h]@1
  float uiSerialMiddle; // [sp+13Ch] [bp-354h]@46
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > PetName; // [sp+140h] [bp-350h]@97
  char v329; // [sp+15Ch] [bp-334h]@166
  char acEquipableClassStr[256]; // [sp+1D0h] [bp-2C0h]@92
  char ptr; // [sp+2D4h] [bp-1BCh]@591
  char v332; // [sp+2DCh] [bp-1B4h]@46
  int v333; // [sp+2E4h] [bp-1ACh]@591
  char v334; // [sp+2E5h] [bp-1ABh]@46
  int v335; // [sp+2E8h] [bp-1A8h]@591
  char v336; // [sp+2F0h] [bp-1A0h]@591
  int v337; // [sp+300h] [bp-190h]@591
  int v338; // [sp+304h] [bp-18Ch]@591
  int uiUpgradeOpt[15]; // [sp+308h] [bp-188h]@46
  int aiOptionValue[15]; // [sp+344h] [bp-14Ch]@85
  char acStr[256]; // [sp+380h] [bp-110h]@125
  unsigned int v342; // [sp+480h] [bp-10h]@1
  int v343; // [sp+48Ch] [bp-4h]@97
  int v344; // [sp+490h] [bp+0h]@1

  v342 = (unsigned int)&v344 ^ __security_cookie;
  v302 = (unsigned int)&v344 ^ __security_cookie;
  v4 = __OFSUB__(*iIndex, 80);
  v3 = *iIndex - 80 < 0;
  v5 = Parameter->pkViewInfo;
  v6 = Parameter->iItemUpgrade;
  v7 = Parameter->pkItem;
  thisa = this;
  v8 = Parameter->pkInfo;
  pkCollectCard = Parameter;
  pkInfo = v8;
  fCrlTB = v5;
  fRanCriRate = (GradeItemOption *)v6;
  pkItem = v7;
  if ( !(v3 ^ v4) )
    return;
  cSerialKey = User::GetMainCharClass(&g_kUser);
  v312 = 0;
  v313 = 0;
  v314 = 0;
  v315 = 0;
  v316 = 0;
  v317 = 0;
  v318 = 0;
  LODWORD(v319) = 0;
  v320 = 0;
  if ( v6 )
  {
    if ( !v7 )
      goto LABEL_44;
    if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v7 + 4))(v7) != 23 )
      goto LABEL_607;
  }
  if ( v7 && (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v7 + 4))(v7) == 38 )
  {
LABEL_607:
    v286 = *(_WORD *)((char *)pkInfo + 241);
    if ( (unsigned __int8)(*(int (__cdecl **)(unsigned int))(*(_DWORD *)pkItem + 4))(v302) == 38 )
    {
      v9 = IIDTableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab_unsigned_short>::GetByID(v286, 1);
      if ( v9 )
      {
        if ( v6 > *(_BYTE *)(*((_DWORD *)pkItem + 28) + 240) )
          return;
        v10 = v9->UpFactor;
        if ( v10 )
        {
          switch ( v10 )
          {
            case 1:
              v313 = v9->BRAccUpdata[v6];
              break;
            case 2:
              v314 = v9->BRAccUpdata[v6];
              break;
            case 3:
              v315 = v9->BRAccUpdata[v6];
              break;
            case 4:
              v316 = v9->BRAccUpdata[v6];
              break;
            case 6:
              v317 = v9->BRAccUpdata[v6];
              break;
            case 7:
              v318 = v9->BRAccUpdata[v6];
              break;
            case 8:
              LODWORD(v319) = v9->BRAccUpdata[v6];
              break;
          }
        }
        else
        {
          v312 = v9->BRAccUpdata[v6];
        }
      }
    }
    else
    {
      v11 = IIDTableBase<UpGradeInfo_UpGradeInfoTab_unsigned_short>::GetByID(v286, 1);
      if ( v11 )
      {
        if ( v6 > 12 )
          return;
        v12 = v11->UpFactor;
        if ( v12 )
        {
          switch ( v12 )
          {
            case 1:
              v313 = *((_WORD *)&v11->UpFactor + v6 + 1);
              break;
            case 2:
              v314 = *((_WORD *)&v11->UpFactor + v6 + 1);
              break;
            case 3:
              v315 = *((_WORD *)&v11->UpFactor + v6 + 1);
              break;
            case 4:
              v316 = *((_WORD *)&v11->UpFactor + v6 + 1);
              break;
            case 6:
              v317 = *((_WORD *)&v11->UpFactor + v6 + 1);
              break;
            case 7:
              v318 = *((_WORD *)&v11->UpFactor + v6 + 1);
              break;
            case 8:
              LODWORD(v319) = *((_WORD *)&v11->UpFactor + v6 + 1);
              break;
          }
        }
        else
        {
          v312 = *((_WORD *)&v11->UpFactor + v6 + 1);
        }
      }
    }
  }
LABEL_44:
  v308 = 0;
  v309 = 0;
  v310 = 0;
  if ( pkItem && (unsigned __int8)(*(int (__cdecl **)(unsigned int))(*(_DWORD *)pkItem + 4))(v302) == 5 )
  {
    memcpy(&v332, (char *)pkItem + 8, 0x64u);
    LOWORD(uiUpgradeOpt[14]) = *((_WORD *)pkItem + 54);
    BYTE2(uiUpgradeOpt[14]) = *((_BYTE *)pkItem + 110);
    v13 = &v334;
    LODWORD(uiSerialMiddle) = 3;
    do
    {
      if ( *(_WORD *)v13 != -1
        && (v14 = CWeaponTitle::GetLevelData(
                    &WeaponTitleTab::ms_kTab,
                    *(_WORD *)v13,
                    *(_DWORD *)(v13 + 2) & 0xFFFFFFF,
                    (unsigned int *)&v307 + 1)) != 0 )
      {
        if ( v309 < v14->MaxAdd )
          v309 = v14->MaxAdd;
        if ( v308 < v14->MinAdd )
          v308 = v14->MinAdd;
        v15 = v310;
        v16 = 1;
        if ( v14->SP1_Type == 1 && v310 < v14->SP1_Value )
        {
          v15 = v14->SP1_Value;
          v310 = v14->SP1_Value;
        }
        if ( v14->SP2_Type == 1 && v15 < v14->SP2_Value )
        {
          v15 = v14->SP2_Value;
          v310 = v14->SP2_Value;
        }
        if ( v14->SP3_Type == 1 )
        {
          v17 = v14->SP3_Value;
          if ( v15 < v17 )
            v310 = v17;
        }
      }
      else
      {
        v16 = 1;
      }
      v13 += 6;
      LODWORD(uiSerialMiddle) -= v16;
    }
    while ( uiSerialMiddle != 0.0 );
  }
  v18 = thisa;
  ((void (__stdcall *)(D3DXCOLOR *, unsigned int))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
    &Color::m_kDxWhiteColor,
    v302);
  if ( *(float *)&fRanCriRate == 0.0 )
  {
    ((void (__stdcall *)(char *))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)pkInfo + 34);
  }
  else
  {
    if ( pkItem && (unsigned __int8)(*(int (**)(void))(*(_DWORD *)pkItem + 4))() == 23 )
    {
      v19 = v18->m_apkTextWin[*iIndex];
      v287 = "(+%d)%s";
    }
    else
    {
      v19 = v18->m_apkTextWin[*iIndex];
      v287 = "%s[+%d]";
    }
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v21 = fs(v287);
    v20[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v21);
  }
  ((void (__stdcall *)(tagSIZE *))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(&kSize);
  if ( kSize.cx <= 200 )
    v18->m_iItemNameLength = 200;
  else
    v18->m_iItemNameLength = kSize.cx;
  switch ( *(_DWORD *)((char *)pkInfo + 118) )
  {
    case 1:
      v303 = 255;
      *(_QWORD *)v288 = 255i64;
      v274 = 0;
      goto LABEL_83;
    case 2:
    case 5:
      v303 = 255;
      *(_QWORD *)v288 = 1090921693378i64;
      v274 = 13;
      goto LABEL_83;
    case 3:
      v303 = 255;
      *(_QWORD *)v288 = 228i64;
      break;
    case 4:
      v303 = 255;
      *(_QWORD *)v288 = 1026497183776i64;
      v274 = 253;
      goto LABEL_83;
    case 6:
      v303 = 255;
      *(_QWORD *)v288 = 128i64;
      break;
    case 7:
      v303 = 255;
      *(_QWORD *)v288 = 1095216660480i64;
      break;
    default:
      v303 = 255;
      *(_QWORD *)v288 = 1095216660735i64;
      break;
  }
  v274 = 255;
LABEL_83:
  ((void (__stdcall *)(signed int, const char *, const char *))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
    v274,
    v288[0],
    v288[1]);
  ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  v22 = 0;
  if ( pkItem )
    v22 = (*(int (__cdecl **)(signed int))(*(_DWORD *)pkItem + 48))(v303);
  memset((char *)aiOptionValue, 0, 0x3Cu);
  if ( v22 )
  {
    v23 = *(_BYTE *)v22;
    if ( *(_BYTE *)v22 & 0xFE )
    {
      if ( v23 & 1 )
      {
        v24 = (unsigned int)v23 >> 1;
        if ( (signed int)v24 > 0 )
        {
          v25 = v22 + 1;
          do
          {
            v26 = *(_WORD *)(v25 + 1);
            v27 = *(_BYTE *)v25;
            v25 += 3;
            --v24;
            aiOptionValue[v27] = v26;
          }
          while ( v24 );
        }
      }
    }
  }
  if ( *(_DWORD *)((char *)pkInfo + 98) )
  {
    v32 = pkInfo;
  }
  else
  {
    v307 = CharClass::GetBitbyClassType((UseClassType)*(_DWORD *)((char *)pkInfo + 207));
    CharClass::GetEquipableClassSortStr(v307, acEquipableClassStr, 0x100u);
    v28 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v29 = TextData::Get(0xDC00D34Eu);
    v30 = fs(v29);
    ((void (__thiscall *)(PgWinText *, char *, signed int))v28[118].__vecDelDtor)(v18->m_apkTextWin[*iIndex], v30, v303);
    v31 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
    if ( v307 & (1i64 << cSerialKey) )
    {
      ((void (__cdecl *)(D3DXCOLOR *))v31)(&Color::m_kDxWhiteColor);
      ++*iIndex;
      v32 = pkInfo;
    }
    else
    {
      ((void (__cdecl *)(D3DXCOLOR *))v31)(&Color::m_kDxRedColor);
      ++*iIndex;
      v32 = pkInfo;
    }
  }
  ItemInfoWin::InsertRequireWeponContents(v18, (ItemInfo *)v32, iIndex);
  ItemInfoWin::InsertRequireShieldContents(v18, (ItemInfo *)v32, iIndex);
  if ( *(_DWORD *)((char *)v32 + 102) == 23 )
  {
    PetName.baseclass_0._Myres = 15;
    PetName.baseclass_0._Mysize = 0;
    PetName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v33 = (char *)pkInfo + 2;
    v343 = 0;
    v34 = RidePetTable::GetByInxName((char *)pkInfo + 2);
    if ( v34 )
    {
      v35 = v34->FeedType;
      v36 = (int)v34->FeedType;
      LODWORD(uiSerialMiddle) = v36 + 1;
      do
        v37 = *(_BYTE *)v36++;
      while ( v37 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &PetName,
        v35,
        v36 - LODWORD(uiSerialMiddle));
    }
    v38 = MoverItemTab::GetByItemIdx(v33);
    if ( v38 )
    {
      v39 = MoverHGTab::GetByMoverIdx(v38->MoverIDX);
      if ( v39 )
      {
        v40 = v39->FeedType;
        v41 = (int)v39->FeedType;
        v42 = v41 + 1;
        do
          v43 = *(_BYTE *)v41++;
        while ( v43 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&PetName, v40, v41 - v42);
      }
    }
    v44 = *(char **)&PetName;
    if ( PetName.baseclass_0._Myres < 0x10 )
      v44 = (char *)&PetName;
    if ( ItemInfoTab::GetByInxName(v44) )
    {
      v45 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v46 = TextData2::Get(0xEFF2282Eu);
      v47 = fs(v46);
      v45[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v47);
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    }
    v343 = -1;
    if ( PetName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&PetName);
  }
  if ( *(_DWORD *)((char *)pkInfo + 102) == 36 )
  {
    PetName.baseclass_0._Myres = 15;
    PetName.baseclass_0._Mysize = 0;
    PetName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v343 = 1;
    if ( !pkItem
      || (v48 = (const char *)(*(int (__cdecl **)(signed int))(*(_DWORD *)pkItem + 80))(v303),
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&PetName, v48, strlen(v48)),
          !PetName.baseclass_0._Mysize) )
    {
      v49 = PetMainTab::GetByItemIdx((const char *)pkInfo + 2);
      if ( v49 )
      {
        v50 = PetViewTab::GetByPetIdx(v49->PupIDX);
        if ( v50 )
        {
          v51 = v50->Name;
          v52 = (int)v50->Name;
          v53 = v52 + 1;
          do
            v54 = *(_BYTE *)v52++;
          while ( v54 );
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&PetName, v51, v52 - v53);
        }
      }
    }
    LODWORD(v55) = v18->m_apkTextWin[(*iIndex)++];
    uiSerialMiddle = v55;
    v56 = *LODWORD(v55);
    v57 = TextData3::Get(0x46AE8582u);
    v58 = fs(v57);
    (*(void (__thiscall **)(_DWORD, char *))(v56 + 472))(LODWORD(uiSerialMiddle), v58);
    v59 = v18->m_apkTextWin[(*iIndex)++];
    ((void (__stdcall *)(_DWORD))v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    v343 = -1;
    if ( PetName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&PetName);
  }
  v60 = pkInfo;
  if ( *(_DWORD *)((char *)pkInfo + 127) )
  {
    v61 = *(_DWORD *)((char *)pkInfo + 127);
    if ( aiOptionValue[13] )
      v61 -= aiOptionValue[13];
    v62 = TextData::Get(0xD7383A33u);
    sprintf(acStr, v62);
    ((void (__stdcall *)(_DWORD, signed int))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
      acStr,
      v303);
    if ( v61 <= User::Lv(&g_kUser) )
    {
      v63 = v18->m_apkTextWin[*iIndex];
      if ( aiOptionValue[13] > 0 )
      {
        v303 = 255;
        ((void (__stdcall *)(signed int, signed int, signed int))v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
          220,
          100,
          20);
LABEL_131:
        ++*iIndex;
        v60 = pkInfo;
        goto LABEL_132;
      }
      v304 = &Color::m_kDxWhiteColor;
    }
    else
    {
      v63 = v18->m_apkTextWin[*iIndex];
      v304 = &Color::m_kDxRedColor;
    }
    ((void (__cdecl *)(signed int))v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v303);
    goto LABEL_131;
  }
LABEL_132:
  if ( pkCollectCard->bNPCShop && *((_BYTE *)v60 + 219) )
  {
    v64 = *((_BYTE *)pkInfo + 219);
    LODWORD(uiSerialMiddle) = *((_BYTE *)pkInfo + 219);
    if ( v64 > (signed int)User::Lv(&g_kUser) )
    {
      v65 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v66 = TextData3::Get(0x77914C4Du);
      v67 = fs(v66);
      v65[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v67);
      ((void (__stdcall *)(D3DXCOLOR *))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    }
    v60 = pkInfo;
  }
  if ( *(_DWORD *)((char *)v60 + 110) == 25 )
  {
    v68 = MinimonInfoTable::GetMinimonInfoByIDX(fCrlTB->InxName);
    if ( v68 )
    {
      v69 = v68->MinimonEquipPos;
      if ( v69 == 2 )
      {
        v289 = TextData3::Get(0x9097A5C5u);
        v275 = acStr;
      }
      else
      {
        if ( v69 == 1 )
        {
          v289 = TextData3::Get(0x282F0A22u);
          v275 = acStr;
        }
        else
        {
          v289 = TextData3::Get(0xE3180332u);
          v275 = acStr;
        }
      }
      sprintf(v275, v289);
    }
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    ((void (__stdcall *)(D3DXCOLOR *))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  }
  if ( *(_DWORD *)((char *)v60 + 131) )
  {
    v70 = TextData::Get(0x4634383Bu);
    sprintf(acStr, v70);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  }
  if ( *(_DWORD *)((char *)v60 + 102) == 5 )
  {
    if ( *((_BYTE *)v60 + 122) )
    {
      v71 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v72 = TextData::Get(0x4B437992u);
      v71[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v72);
    }
    else
    {
      v73 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v74 = TextData::Get(0x46436F89u);
      v73[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v74);
    }
    ++*iIndex;
  }
  v75 = (const char *)(*(int (__cdecl **)(signed int))(**((_DWORD **)&v18->m_uiTotalMoneyXPos + *iIndex) + 484))(v303);
  if ( v75 && *iIndex > 0 && strcmp(v75, " ") )
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  HIDWORD(v307) = (char *)pkInfo + 2;
  v76 = GradeItemOptionTab::GetByInxName((char *)pkInfo + 2);
  fRanCriRate = v76;
  uiUpgradeOpt[0] = 0;
  memset((char *)&uiUpgradeOpt[1], 0, 0x38u);
  if ( *(_DWORD *)((char *)pkInfo + 102) != 4 )
  {
    if ( !v76 )
    {
      if ( aiOptionValue[0] > 0 )
      {
        v165 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xF2FBFC44u);
        v166 = fs("%s (+%d)");
        v165[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v166);
      }
      if ( aiOptionValue[2] > 0 )
      {
        v167 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xE3ECFC4Au);
        v168 = fs("%s (+%d)");
        v167[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v168);
      }
      if ( aiOptionValue[1] > 0 )
      {
        v169 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xEDEBFC40u);
        v170 = fs("%s (+%d)");
        v169[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v170);
      }
      if ( aiOptionValue[3] > 0 )
      {
        v171 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xECF1FC46u);
        v172 = fs("%s (+%d)");
        v171[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v172);
      }
      if ( aiOptionValue[4] > 0 )
      {
        v173 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xE3F5FC40u);
        v174 = fs("%s (+%d)");
        v173[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v174);
      }
      goto LABEL_340;
    }
    if ( v76->STR )
    {
      if ( aiOptionValue[0] <= 0 )
      {
        v147 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xF2FBFC44u);
        v150 = fs("%s +%d");
        v149 = v18->m_apkTextWin[*iIndex];
        v298 = v150;
      }
      else
      {
        v147 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xF2FBFC44u);
        v148 = fs("%s +%d (+%d)");
        v149 = v18->m_apkTextWin[*iIndex];
        v298 = v148;
      }
    }
    else
    {
      if ( aiOptionValue[0] <= 0 )
        goto LABEL_303;
      v147 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      TextData::Get(0xF2FBFC44u);
      v298 = fs("%s (+%d)");
      v149 = v18->m_apkTextWin[*iIndex];
    }
    v147[118].__vecDelDtor((NiRefObject *)v149, (unsigned int)v298);
    ++*iIndex;
LABEL_303:
    if ( fRanCriRate->DEX )
    {
      if ( aiOptionValue[2] <= 0 )
      {
        v151 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xE3ECFC4Au);
        v154 = fs("%s +%d");
        v153 = v18->m_apkTextWin[*iIndex];
        v299 = v154;
      }
      else
      {
        v151 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xE3ECFC4Au);
        v152 = fs("%s +%d (+%d)");
        v153 = v18->m_apkTextWin[*iIndex];
        v299 = v152;
      }
    }
    else
    {
      if ( aiOptionValue[2] <= 0 )
        goto LABEL_310;
      v151 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      TextData::Get(0xE3ECFC4Au);
      v299 = fs("%s (+%d)");
      v153 = v18->m_apkTextWin[*iIndex];
    }
    v151[118].__vecDelDtor((NiRefObject *)v153, (unsigned int)v299);
    ++*iIndex;
LABEL_310:
    if ( fRanCriRate->CON )
    {
      if ( aiOptionValue[1] <= 0 )
      {
        v155 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xEDEBFC40u);
        v158 = fs("%s +%d");
        v157 = v18->m_apkTextWin[*iIndex];
        v300 = v158;
      }
      else
      {
        v155 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xEDEBFC40u);
        v156 = fs("%s +%d (+%d)");
        v157 = v18->m_apkTextWin[*iIndex];
        v300 = v156;
      }
    }
    else
    {
      if ( aiOptionValue[1] <= 0 )
        goto LABEL_317;
      v155 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      TextData::Get(0xEDEBFC40u);
      v300 = fs("%s (+%d)");
      v157 = v18->m_apkTextWin[*iIndex];
    }
    v155[118].__vecDelDtor((NiRefObject *)v157, (unsigned int)v300);
    ++*iIndex;
LABEL_317:
    if ( fRanCriRate->INT )
    {
      if ( aiOptionValue[3] <= 0 )
      {
        v159 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xECF1FC46u);
        v162 = fs("%s +%d");
        v161 = v18->m_apkTextWin[*iIndex];
        v301 = v162;
      }
      else
      {
        v159 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xECF1FC46u);
        v160 = fs("%s +%d (+%d)");
        v161 = v18->m_apkTextWin[*iIndex];
        v301 = v160;
      }
    }
    else
    {
      if ( aiOptionValue[3] <= 0 )
        goto LABEL_324;
      v159 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      TextData::Get(0xECF1FC46u);
      v301 = fs("%s (+%d)");
      v161 = v18->m_apkTextWin[*iIndex];
    }
    v159[118].__vecDelDtor((NiRefObject *)v161, (unsigned int)v301);
    ++*iIndex;
LABEL_324:
    if ( fRanCriRate->MEN )
    {
      if ( aiOptionValue[4] <= 0 )
      {
        v128 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xE3F5FC40u);
        v164 = fs("%s +%d");
        v129 = v18->m_apkTextWin[*iIndex];
        v297 = v164;
      }
      else
      {
        v128 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xE3F5FC40u);
        v163 = fs("%s +%d (+%d)");
        v129 = v18->m_apkTextWin[*iIndex];
        v297 = v163;
      }
      goto LABEL_242;
    }
    if ( aiOptionValue[4] > 0 )
    {
      v128 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      TextData::Get(0xE3F5FC40u);
      v276 = "%s (+%d)";
      goto LABEL_241;
    }
    goto LABEL_244;
  }
  if ( pkItem )
  {
    v77 = (*(int (**)(void))(*(_DWORD *)pkItem + 52))();
    LODWORD(uiSerialMiddle) = v77;
    if ( v77 )
    {
      v78 = *(_BYTE *)v77;
      if ( *(_BYTE *)v77 & 0xFE )
      {
        if ( v78 & 1 )
        {
          v79 = (unsigned int)v78 >> 1;
          if ( (signed int)v79 > 0 )
          {
            v80 = v77 + 1;
            do
            {
              v81 = *(_WORD *)(v80 + 1);
              v82 = *(_BYTE *)v80;
              v80 += 3;
              --v79;
              uiUpgradeOpt[v82] = v81;
            }
            while ( v79 );
            v77 = LODWORD(uiSerialMiddle);
          }
        }
      }
    }
  }
  else
  {
    v77 = (int)&v329;
  }
  if ( *(float *)&fRanCriRate == 0.0 || !v77 )
  {
    if ( aiOptionValue[0] > 0 )
    {
      if ( uiUpgradeOpt[0] <= 0 )
      {
LABEL_262:
        v137 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xF2FBFC44u);
        v138 = fs("%s (+%d)");
        v137[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v138);
LABEL_263:
        if ( aiOptionValue[2] > 0 )
        {
          if ( uiUpgradeOpt[2] <= 0 )
          {
LABEL_268:
            v139 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            TextData::Get(0xE3ECFC4Au);
            v140 = fs("%s (+%d)");
            v139[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v140);
LABEL_269:
            if ( aiOptionValue[1] > 0 )
            {
              if ( uiUpgradeOpt[1] <= 0 )
              {
LABEL_274:
                v141 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                TextData::Get(0xEDEBFC40u);
                v142 = fs("%s (+%d)");
                v141[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v142);
LABEL_275:
                if ( aiOptionValue[3] > 0 )
                {
                  if ( uiUpgradeOpt[3] <= 0 )
                  {
LABEL_280:
                    v143 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                    TextData::Get(0xECF1FC46u);
                    v144 = fs("%s (+%d)");
                    v143[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v144);
LABEL_281:
                    if ( aiOptionValue[4] > 0 )
                    {
                      if ( uiUpgradeOpt[4] <= 0 )
                      {
LABEL_286:
                        v145 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                        TextData::Get(0xE3F5FC40u);
                        v146 = fs("%s (+%d)");
                        v145[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v146);
LABEL_287:
                        if ( aiOptionValue[8] > 0 )
                        {
                          if ( uiUpgradeOpt[8] <= 0 )
                          {
LABEL_292:
                            v125 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                            TextData::Get(0xE3F5FC40u);
                            v277 = "%s (+%d)";
                            goto LABEL_293;
                          }
                        }
                        else
                        {
                          if ( uiUpgradeOpt[8] <= 0 )
                            goto LABEL_244;
                        }
                        ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
                          255,
                          255,
                          0,
                          255);
                        goto LABEL_292;
                      }
                    }
                    else
                    {
                      if ( uiUpgradeOpt[4] <= 0 )
                        goto LABEL_287;
                    }
                    ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
                      255,
                      255,
                      0,
                      255);
                    goto LABEL_286;
                  }
                }
                else
                {
                  if ( uiUpgradeOpt[3] <= 0 )
                    goto LABEL_281;
                }
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
                  255,
                  255,
                  0,
                  255);
                goto LABEL_280;
              }
            }
            else
            {
              if ( uiUpgradeOpt[1] <= 0 )
                goto LABEL_275;
            }
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
              255,
              255,
              0,
              255);
            goto LABEL_274;
          }
        }
        else
        {
          if ( uiUpgradeOpt[2] <= 0 )
            goto LABEL_269;
        }
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
          255,
          255,
          0,
          255);
        goto LABEL_268;
      }
    }
    else
    {
      if ( uiUpgradeOpt[0] <= 0 )
        goto LABEL_263;
    }
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      255,
      0,
      255);
    goto LABEL_262;
  }
  if ( fRanCriRate->STR )
  {
    if ( aiOptionValue[0] <= 0 && uiUpgradeOpt[0] <= 0 )
    {
      LODWORD(v83) = v18->m_apkTextWin[(*iIndex)++];
      v84 = *LODWORD(v83);
      uiSerialMiddle = v83;
      TextData::Get(0xF2FBFC44u);
      v85 = fs("%s +%d");
      (*(void (__thiscall **)(_DWORD, char *))(v84 + 472))(LODWORD(uiSerialMiddle), v85);
      goto LABEL_181;
    }
    v86 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xF2FBFC44u);
    v87 = fs("%s +%d (+%d)");
    v86[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v87);
    if ( uiUpgradeOpt[0] <= 0 )
      goto LABEL_180;
    v88 = v18->m_apkTextWin[*iIndex];
    goto LABEL_179;
  }
  if ( aiOptionValue[0] > 0 || uiUpgradeOpt[0] > 0 )
  {
    v89 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xF2FBFC44u);
    v90 = fs("%s (+%d)");
    v89[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v90);
    if ( uiUpgradeOpt[0] <= 0 )
    {
LABEL_180:
      ++*iIndex;
      goto LABEL_181;
    }
    v88 = v18->m_apkTextWin[*iIndex];
LABEL_179:
    ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      255,
      0,
      255);
    goto LABEL_180;
  }
LABEL_181:
  if ( fRanCriRate->DEX )
  {
    if ( aiOptionValue[2] <= 0 && uiUpgradeOpt[2] <= 0 )
    {
      LODWORD(v91) = v18->m_apkTextWin[(*iIndex)++];
      v92 = *LODWORD(v91);
      uiSerialMiddle = v91;
      TextData::Get(0xE3ECFC4Au);
      v93 = fs("%s +%d");
      (*(void (__thiscall **)(_DWORD, char *))(v92 + 472))(LODWORD(uiSerialMiddle), v93);
      goto LABEL_193;
    }
    v94 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xE3ECFC4Au);
    v95 = fs("%s +%d (+%d)");
    v94[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v95);
    if ( uiUpgradeOpt[2] <= 0 )
      goto LABEL_192;
    v96 = v18->m_apkTextWin[*iIndex];
    goto LABEL_191;
  }
  if ( aiOptionValue[2] > 0 || uiUpgradeOpt[2] > 0 )
  {
    v97 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xE3ECFC4Au);
    v98 = fs("%s (+%d)");
    v97[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v98);
    if ( uiUpgradeOpt[2] <= 0 )
    {
LABEL_192:
      ++*iIndex;
      goto LABEL_193;
    }
    v96 = v18->m_apkTextWin[*iIndex];
LABEL_191:
    ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      255,
      0,
      255);
    goto LABEL_192;
  }
LABEL_193:
  if ( fRanCriRate->CON )
  {
    if ( aiOptionValue[1] <= 0 && uiUpgradeOpt[1] <= 0 )
    {
      LODWORD(v99) = v18->m_apkTextWin[(*iIndex)++];
      v100 = *LODWORD(v99);
      uiSerialMiddle = v99;
      TextData::Get(0xEDEBFC40u);
      v101 = fs("%s +%d");
      (*(void (__thiscall **)(_DWORD, char *))(v100 + 472))(LODWORD(uiSerialMiddle), v101);
      goto LABEL_205;
    }
    v102 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xEDEBFC40u);
    v103 = fs("%s +%d (+%d)");
    v102[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v103);
    if ( uiUpgradeOpt[1] <= 0 )
      goto LABEL_204;
    v104 = v18->m_apkTextWin[*iIndex];
    goto LABEL_203;
  }
  if ( aiOptionValue[1] > 0 || uiUpgradeOpt[1] > 0 )
  {
    v105 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xEDEBFC40u);
    v106 = fs("%s (+%d)");
    v105[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v106);
    if ( uiUpgradeOpt[1] <= 0 )
    {
LABEL_204:
      ++*iIndex;
      goto LABEL_205;
    }
    v104 = v18->m_apkTextWin[*iIndex];
LABEL_203:
    ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      255,
      0,
      255);
    goto LABEL_204;
  }
LABEL_205:
  if ( fRanCriRate->INT )
  {
    if ( aiOptionValue[3] <= 0 && uiUpgradeOpt[3] <= 0 )
    {
      LODWORD(v107) = v18->m_apkTextWin[(*iIndex)++];
      v108 = *LODWORD(v107);
      uiSerialMiddle = v107;
      TextData::Get(0xECF1FC46u);
      v109 = fs("%s +%d");
      (*(void (__thiscall **)(_DWORD, char *))(v108 + 472))(LODWORD(uiSerialMiddle), v109);
      goto LABEL_217;
    }
    v110 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xECF1FC46u);
    v111 = fs("%s +%d (+%d)");
    v110[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v111);
    if ( uiUpgradeOpt[3] <= 0 )
      goto LABEL_216;
    v112 = v18->m_apkTextWin[*iIndex];
    goto LABEL_215;
  }
  if ( aiOptionValue[3] > 0 || uiUpgradeOpt[3] > 0 )
  {
    v113 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xECF1FC46u);
    v114 = fs("%s (+%d)");
    v113[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v114);
    if ( uiUpgradeOpt[3] <= 0 )
    {
LABEL_216:
      ++*iIndex;
      goto LABEL_217;
    }
    v112 = v18->m_apkTextWin[*iIndex];
LABEL_215:
    ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v112->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      255,
      0,
      255);
    goto LABEL_216;
  }
LABEL_217:
  if ( fRanCriRate->MEN )
  {
    if ( aiOptionValue[4] <= 0 && uiUpgradeOpt[4] <= 0 )
    {
      LODWORD(v115) = v18->m_apkTextWin[(*iIndex)++];
      v116 = *LODWORD(v115);
      uiSerialMiddle = v115;
      TextData::Get(0xE3F5FC40u);
      v117 = fs("%s +%d");
      (*(void (__thiscall **)(_DWORD, char *))(v116 + 472))(LODWORD(uiSerialMiddle), v117);
      goto LABEL_229;
    }
    v118 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xE3F5FC40u);
    v119 = fs("%s +%d (+%d)");
    v118[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v119);
    if ( uiUpgradeOpt[4] > 0 )
    {
      v120 = v18->m_apkTextWin[*iIndex];
LABEL_227:
      ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v120->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        255,
        255,
        0,
        255);
      goto LABEL_228;
    }
    goto LABEL_228;
  }
  if ( aiOptionValue[4] > 0 || uiUpgradeOpt[4] )
  {
    v121 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0xE3F5FC40u);
    v122 = fs("%s (+%d)");
    v121[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v122);
    if ( uiUpgradeOpt[4] > 0 )
    {
      v120 = v18->m_apkTextWin[*iIndex];
      goto LABEL_227;
    }
LABEL_228:
    ++*iIndex;
  }
LABEL_229:
  v123 = *(_DWORD *)((char *)pkInfo + 203);
  if ( v123 || aiOptionValue[12] > 0 )
  {
    uiSerialMiddle = 0.0;
    *(float *)&fCrlTB = 0.0;
    if ( v123 )
      uiSerialMiddle = (double)v123 / 10.0;
    if ( aiOptionValue[12] > 0 )
      *(float *)&fCrlTB = (double)aiOptionValue[12] / 10.0;
    if ( v123 )
    {
      v124 = aiOptionValue[12] == 0;
      if ( aiOptionValue[12] > 0 )
      {
        v125 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v126 = TextData3::Get(0xADF1B5B7u);
        v127 = fs(v126);
LABEL_294:
        v125[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v127);
        goto LABEL_243;
      }
    }
    else
    {
      v124 = aiOptionValue[12] == 0;
    }
    if ( !v124 )
    {
      v128 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v276 = TextData3::Get(0xAEF1B5B7u);
LABEL_241:
      v297 = fs(v276);
      v129 = v18->m_apkTextWin[*iIndex];
LABEL_242:
      v128[118].__vecDelDtor((NiRefObject *)v129, (unsigned int)v297);
LABEL_243:
      ++*iIndex;
      goto LABEL_244;
    }
    v125 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v277 = TextData::Get(0x2E452A84u);
LABEL_293:
    v127 = fs(v277);
    goto LABEL_294;
  }
LABEL_244:
  LODWORD(v130) = fRanCriRate;
  if ( *(float *)&fRanCriRate != 0.0 )
  {
    if ( fRanCriRate->ResistPoison )
    {
      v131 = TextData::Get(0x68A3E3E7u);
      sprintf(acStr, v131);
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    }
    if ( *(_WORD *)(LODWORD(v130) + 44) )
    {
      v132 = TextData::Get(0x72E4CCD1u);
      sprintf(acStr, v132);
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    }
    if ( *(_WORD *)(LODWORD(v130) + 46) )
    {
      v133 = TextData::Get(0x72A29BD0u);
      sprintf(acStr, v133);
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    }
    v134 = fRanCriRate->MaxHP;
    v135 = uiUpgradeOpt[14];
    v136 = uiUpgradeOpt[14] + aiOptionValue[14];
    if ( v134 )
    {
      if ( v136 )
      {
        sprintf(acStr, "MaxHP : +%i (+%d)");
        goto LABEL_356;
      }
      if ( v134 )
      {
        v290[0] = "MaxHP : +%i";
        v278 = acStr;
LABEL_355:
        sprintf(v278, v290[0]);
        goto LABEL_356;
      }
    }
    else
    {
      if ( !v136 )
      {
LABEL_359:
        if ( !fRanCriRate->MaxSP )
          goto LABEL_343;
        sprintf(acStr, "MaxSP : +%i");
        v175 = v18->m_apkTextWin[*iIndex];
        goto LABEL_342;
      }
    }
    if ( v136 )
    {
      v290[0] = "MaxHP : (+%d)";
      v278 = acStr;
      goto LABEL_355;
    }
LABEL_356:
    if ( v135 )
      ((void (__stdcall *)(D3DXCOLOR *))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    goto LABEL_359;
  }
LABEL_340:
  if ( aiOptionValue[14] > 0 )
  {
    sprintf(acStr, "MaxHP : (+%d)");
    v175 = v18->m_apkTextWin[*iIndex];
LABEL_342:
    ((void (__stdcall *)(_DWORD))v175->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    ++*iIndex;
  }
LABEL_343:
  if ( *(_DWORD *)((char *)pkInfo + 139)
    || aiOptionValue[7]
    || uiUpgradeOpt[7]
    || *(float *)&fRanCriRate != 0.0 && fRanCriRate->WCPlus != LOWORD(uiUpgradeOpt[7]) )
  {
    v176 = v313;
    goto LABEL_362;
  }
  v176 = v313;
  if ( v313 || v317 != v313 )
  {
LABEL_362:
    v177 = 0;
    if ( v176 || v317 )
      v177 = v176 + v317;
    if ( uiUpgradeOpt[7] )
      v177 += uiUpgradeOpt[7];
    if ( v177 )
      ((void (__stdcall *)(D3DXCOLOR *))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    if ( aiOptionValue[7] )
      v177 += aiOptionValue[7];
    if ( *(_DWORD *)((char *)pkInfo + 102) == 4 )
    {
      v178 = fRanCriRate->WCPlus;
      if ( v178 )
      {
        if ( v177 > 0 )
        {
          v179 = TextData3::Get(0xF4020223u);
LABEL_384:
          sprintf(acStr, v179);
          goto LABEL_388;
        }
        if ( v178 )
        {
          v291 = TextData3::Get(0xF4020123u);
          v279 = acStr;
          goto LABEL_387;
        }
      }
      if ( v177 )
      {
        v291 = TextData3::Get(0xF402D023u);
        v279 = acStr;
        goto LABEL_387;
      }
LABEL_388:
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      goto LABEL_389;
    }
    v180 = *(_DWORD *)((char *)pkInfo + 139);
    if ( v180 )
    {
      if ( v177 > 0 )
      {
        v181 = TextData::Get(0x1D424C56u);
        sprintf(acStr, v181);
        goto LABEL_388;
      }
      if ( v180 )
      {
        v179 = TextData::Get(0x1E424C56u);
        goto LABEL_384;
      }
    }
    if ( !v177 )
      goto LABEL_388;
    v291 = TextData3::Get(0xF402D023u);
    v279 = acStr;
LABEL_387:
    sprintf(v279, v291);
    goto LABEL_388;
  }
LABEL_389:
  if ( *(_DWORD *)((char *)pkInfo + 143) || aiOptionValue[8] || uiUpgradeOpt[8] )
  {
    v182 = v312;
LABEL_396:
    v183 = 0;
    if ( v182 || v318 )
      v183 = v182 + v318;
    if ( uiUpgradeOpt[8] )
      v183 += uiUpgradeOpt[8];
    if ( v183 )
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    if ( aiOptionValue[8] )
      v183 += aiOptionValue[8];
    v184 = *(_DWORD *)((char *)pkInfo + 143);
    if ( !v184 )
      goto LABEL_608;
    if ( v183 > 0 )
    {
      v185 = TextData::Get(0xE454C48u);
      sprintf(acStr, v185);
LABEL_412:
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      goto LABEL_413;
    }
    if ( v184 )
    {
      v292 = TextData::Get(0xF454C48u);
      v280 = acStr;
    }
    else
    {
LABEL_608:
      v292 = TextData3::Get(0xF4F4C126u);
      v280 = acStr;
    }
    sprintf(v280, v292);
    goto LABEL_412;
  }
  v182 = v312;
  if ( v312 || v318 != v312 )
    goto LABEL_396;
LABEL_413:
  if ( *(_DWORD *)((char *)pkInfo + 151)
    || aiOptionValue[9]
    || uiUpgradeOpt[9]
    || *(float *)&fRanCriRate != 0.0 && fRanCriRate->MAPlus != LOWORD(uiUpgradeOpt[9]) )
  {
    v186 = v315;
    goto LABEL_422;
  }
  v186 = v315;
  if ( v315 || v317 != v315 )
  {
LABEL_422:
    v187 = 0;
    if ( v186 || v317 )
      v187 = v186 + v317;
    if ( uiUpgradeOpt[9] )
      v187 += uiUpgradeOpt[9];
    if ( v187 )
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    if ( aiOptionValue[9] )
      v187 += aiOptionValue[9];
    if ( *(_DWORD *)((char *)pkInfo + 102) == 4 )
    {
      v188 = fRanCriRate->MAPlus;
      if ( v188 )
      {
        if ( v187 > 0 )
        {
          v189 = TextData3::Get(0x1A401227u);
LABEL_444:
          sprintf(acStr, v189);
          goto LABEL_448;
        }
        if ( v188 )
        {
          v293 = TextData3::Get(0x19401227u);
          v281 = acStr;
          goto LABEL_447;
        }
      }
      if ( v187 )
      {
        v293 = TextData3::Get(0xE8401227u);
        v281 = acStr;
        goto LABEL_447;
      }
LABEL_448:
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      goto LABEL_449;
    }
    v190 = *(_DWORD *)((char *)pkInfo + 151);
    if ( v190 )
    {
      if ( v187 > 0 )
      {
        v191 = TextData::Get(0x2E467194u);
        sprintf(acStr, v191);
        goto LABEL_448;
      }
      if ( v190 )
      {
        v189 = TextData::Get(0x2E467294u);
        goto LABEL_444;
      }
    }
    if ( !v187 )
      goto LABEL_448;
    v293 = TextData3::Get(0xE8401227u);
    v281 = acStr;
LABEL_447:
    sprintf(v281, v293);
    goto LABEL_448;
  }
LABEL_449:
  v192 = LODWORD(v319);
  if ( LODWORD(v319) )
  {
    uiSerialMiddle = v319;
    if ( uiUpgradeOpt[6] )
    {
      v192 = uiUpgradeOpt[6] + LODWORD(v319);
      LODWORD(uiSerialMiddle) = uiUpgradeOpt[6] + LODWORD(v319);
    }
    if ( v192 )
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    if ( aiOptionValue[6] )
    {
      v192 += aiOptionValue[6];
      LODWORD(uiSerialMiddle) = v192;
    }
    v124 = *(_DWORD *)((char *)pkInfo + 102) == 4;
    uiSerialMiddle = (double)SLODWORD(uiSerialMiddle) / 1000.0;
    if ( v124 )
    {
      if ( v192 )
      {
        v193 = TextData2::Get(0xF8E1D127u);
        sprintf(acStr, v193);
        v194 = v18->m_apkTextWin[*iIndex];
LABEL_461:
        ((void (__stdcall *)(_DWORD))v194->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
        ++*iIndex;
        goto LABEL_462;
      }
    }
    else
    {
      if ( v192 )
      {
        v195 = TextData2::Get(0xF8E1D127u);
        sprintf(acStr, v195);
        v194 = v18->m_apkTextWin[*iIndex];
        goto LABEL_461;
      }
    }
  }
LABEL_462:
  if ( *(_DWORD *)((char *)pkInfo + 155) || aiOptionValue[10] || uiUpgradeOpt[10] )
  {
    v196 = v316;
LABEL_469:
    v197 = 0;
    if ( v196 || v318 )
      v197 = v196 + v318;
    if ( uiUpgradeOpt[10] )
      v197 += uiUpgradeOpt[10];
    if ( v197 )
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    if ( aiOptionValue[10] )
      v197 += aiOptionValue[10];
    v198 = *(_DWORD *)((char *)pkInfo + 155);
    if ( !v198 )
      goto LABEL_609;
    if ( v197 > 0 )
    {
      v199 = TextData::Get(0x7EC8DAE4u);
      sprintf(acStr, v199);
LABEL_485:
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      goto LABEL_486;
    }
    if ( v198 )
    {
      v294 = TextData::Get(0x7EC9DAE4u);
      v282 = acStr;
    }
    else
    {
LABEL_609:
      v294 = TextData3::Get(0x82906278u);
      v282 = acStr;
    }
    sprintf(v282, v294);
    goto LABEL_485;
  }
  v196 = v316;
  if ( v316 || v318 != v316 )
    goto LABEL_469;
LABEL_486:
  v200 = *(_DWORD *)((char *)pkInfo + 167);
  if ( v200 && v200 > 0x3E8 )
  {
    v201 = TextData::Get(0x3083AB9Au);
    sprintf(acStr, v201);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  }
  v202 = *(_DWORD *)((char *)pkInfo + 175);
  if ( v202 && v202 > 0x3E8 )
  {
    v203 = TextData::Get(0x2186AB8Cu);
    sprintf(acStr, v203);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  }
  v204 = *(_DWORD *)((char *)pkInfo + 171);
  if ( v204 && v204 > 0x3E8 )
  {
    v205 = TextData::Get(0x72879FD8u);
    sprintf(acStr, v205);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  }
  v206 = *(_DWORD *)((char *)pkInfo + 179);
  if ( v206 && v206 > 0x3E8 )
  {
    v207 = TextData::Get(0xC2D83928u);
    sprintf(acStr, v207);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  }
  v208 = uiUpgradeOpt[5];
  v209 = *(_DWORD *)((char *)pkInfo + 159);
  v210 = uiUpgradeOpt[5] + aiOptionValue[5];
  if ( v209 )
  {
    if ( v210 )
    {
      v211 = TextData3::Get(0xF4FFB70Bu);
      sprintf(acStr, v211);
      goto LABEL_508;
    }
    if ( v209 )
    {
      v295 = TextData::Get(0xD3F94C53u);
      v283 = acStr;
LABEL_507:
      sprintf(v283, v295);
      goto LABEL_508;
    }
  }
  else
  {
    if ( !v210 )
      goto LABEL_511;
  }
  if ( v210 )
  {
    v295 = TextData3::Get(0xF4FFB70Cu);
    v283 = acStr;
    goto LABEL_507;
  }
LABEL_508:
  if ( v208 )
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
LABEL_511:
  if ( *(float *)&fRanCriRate != 0.0 )
  {
    v212 = fRanCriRate->ToHitRate;
    if ( (_WORD)v212 )
    {
      if ( (v212 - 1000) / 10 > 0 )
      {
        v213 = TextData::Get(0x21378697u);
        sprintf(acStr, v213);
        ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      }
    }
  }
  v214 = uiUpgradeOpt[11];
  v215 = *(_DWORD *)((char *)pkInfo + 163);
  v216 = uiUpgradeOpt[11] + aiOptionValue[11];
  if ( v215 )
  {
    if ( v216 )
    {
      v217 = TextData3::Get(0xDA292719u);
      sprintf(acStr, v217);
      goto LABEL_525;
    }
    if ( v215 )
    {
      v296 = TextData::Get(0x4338324Cu);
      v284 = acStr;
LABEL_524:
      sprintf(v284, v296);
      goto LABEL_525;
    }
  }
  else
  {
    if ( !v216 )
      goto LABEL_528;
  }
  if ( v216 )
  {
    v296 = TextData3::Get(0xDA2A2719u);
    v284 = acStr;
    goto LABEL_524;
  }
LABEL_525:
  if ( v214 )
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
LABEL_528:
  if ( *(float *)&fRanCriRate != 0.0 )
  {
    v218 = fRanCriRate->ToBlockRate;
    if ( (_WORD)v218 )
    {
      if ( (v218 - 1000) / 10 > 0 )
      {
        v219 = TextData::Get(0x667A819Au);
        sprintf(acStr, v219);
        ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      }
    }
  }
  if ( *(_DWORD *)((char *)pkInfo + 250) )
  {
    if ( v314 )
    {
      v220 = TextData::Get(0x1B433184u);
      sprintf(acStr, v220);
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    }
    else
    {
      v221 = TextData::Get(0x1B433185u);
      sprintf(acStr, v221);
    }
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  }
  v222 = *(_DWORD *)((char *)pkInfo + 183);
  *(float *)&fCrlTB = 0.0;
  uiSerialMiddle = 0.0;
  *(float *)&fRanCriRate = 0.0;
  if ( v222 )
  {
    v223 = 10.0;
    *(float *)&fCrlTB = (double)v222 / 10.0;
  }
  else
  {
    v223 = 10.0;
  }
  if ( v310 )
    uiSerialMiddle = (double)v310 / v223;
  if ( aiOptionValue[6] )
    *(float *)&fRanCriRate = (double)aiOptionValue[6] / v223;
  v224 = *(float *)&fCrlTB;
  v225 = uiSerialMiddle;
  if ( *(float *)&fCrlTB > 0.0 )
    goto LABEL_548;
  if ( *(float *)&fRanCriRate + v225 > 0.0 )
  {
    if ( *(float *)&fCrlTB <= 0.0 )
      goto LABEL_553;
    v224 = *(float *)&fCrlTB;
LABEL_548:
    if ( v225 + *(float *)&fRanCriRate > 0.0 )
    {
      v226 = TextData3::Get(0xD22E1226u);
      sprintf(acStr, v226);
      if ( uiSerialMiddle > 0.0 )
        ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
      goto LABEL_555;
    }
    if ( v224 > 0.0 )
    {
      v285 = TextData::Get(0x2E452A83u);
      v273 = acStr;
LABEL_554:
      sprintf(v273, v285);
LABEL_555:
      ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      goto LABEL_556;
    }
LABEL_553:
    v285 = TextData3::Get(0xD22F1226u);
    v273 = acStr;
    goto LABEL_554;
  }
LABEL_556:
  v227 = *(_DWORD *)((char *)pkInfo + 203);
  if ( !v227 && aiOptionValue[12] <= 0 )
    goto LABEL_571;
  *(float *)&fCrlTB = 0.0;
  uiSerialMiddle = 0.0;
  if ( v227 )
    *(float *)&fCrlTB = (double)v227 / 10.0;
  if ( aiOptionValue[12] > 0 )
    uiSerialMiddle = (double)aiOptionValue[12] / 10.0;
  if ( v227 )
  {
    v228 = aiOptionValue[12] == 0;
    if ( aiOptionValue[12] > 0 )
    {
      v229 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v230 = TextData3::Get(0xADF1B5B7u);
      v231 = fs(v230);
LABEL_569:
      v229[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v231);
      goto LABEL_570;
    }
  }
  else
  {
    v228 = aiOptionValue[12] == 0;
  }
  if ( v228 )
  {
    v229 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v235 = TextData::Get(0x2E452A84u);
    v231 = fs(v235);
    goto LABEL_569;
  }
  v232 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v233 = TextData3::Get(0xAEF1B5B7u);
  v234 = fs(v233);
  v232[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[*iIndex], (unsigned int)v234);
LABEL_570:
  ++*iIndex;
LABEL_571:
  if ( *(_DWORD *)((char *)pkInfo + 102) == 5 )
  {
    uiSerialMiddle = (double)*(unsigned int *)((char *)pkInfo + 123) / 1000.0;
    v236 = TextData::Get(0x3F452739u);
    sprintf(acStr, v236);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  }
  if ( !pkCollectCard->bNPCShop && *(_DWORD *)((char *)pkInfo + 102) == 26 )
  {
    (*(void (**)(void))(*(_DWORD *)pkItem + 76))();
    (*(void (**)(void))(*(_DWORD *)pkItem + 84))();
    v237 = TextData2::Get(0xDA13E036u);
    sprintf(acStr, v237);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    ((void (__stdcall *)(D3DXCOLOR *))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  }
  if ( !pkCollectCard->bNPCShop && *(_DWORD *)((char *)pkInfo + 102) == 37 )
  {
    (*(void (**)(void))(*(_DWORD *)pkItem + 76))();
    (*(void (**)(void))(*(_DWORD *)pkItem + 84))();
    v238 = TextData2::Get(0xDA13E036u);
    sprintf(acStr, v238);
    ((void (__stdcall *)(_DWORD))v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    ((void (__stdcall *)(D3DXCOLOR *))v18->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  }
  if ( *(_DWORD *)((char *)pkInfo + 102) == 30 )
  {
    LODWORD(uiSerialMiddle) = (*(int (**)(void))(*(_DWORD *)pkItem + 68))();
    v239 = *(_DWORD *)(ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable + 56);
    pkCollectCard = (ItemInfoWin::sNameContentsParameter *)(v239 ? *(_DWORD *)(v239 + 40) : 0);
    v240 = 0;
    if ( pkCollectCard )
    {
      v241 = pkCollectCard;
      while ( 1 )
      {
        v242 = CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<CollectCardGroupDesc_CollectCardGroupDescTab>::ms_pkTable + 4),
                 v240);
        if ( v242 )
        {
          if ( *(_DWORD *)v242 == LODWORD(uiSerialMiddle) )
            break;
        }
        ++v240;
        if ( v240 >= (unsigned int)v241 )
        {
          v18 = thisa;
          goto LABEL_590;
        }
      }
      v18 = thisa;
      v243 = thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v244 = TextData2::Get(0x1A44766Du);
      v245 = fs(v244);
      v243[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v245);
    }
  }
LABEL_590:
  if ( *(_DWORD *)((char *)pkInfo + 102) == 31 )
  {
    v246 = TextData2::Get(0xFF43606Cu);
    v335 = 15;
    v333 = 0;
    ptr = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&ptr,
      v246,
      strlen(v246));
    v343 = 2;
    v247 = TextData2::Get(0xFF434E6Cu);
    v248 = v247;
    v249 = v247;
    v338 = 15;
    v337 = 0;
    v336 = 0;
    v250 = (int)(v247 + 1);
    do
      v251 = *v249++;
    while ( v251 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v336,
      v248,
      (unsigned int)&v249[-v250]);
    LOBYTE(v343) = 3;
    v252 = TextData2::Get(0xFF434F6Cu);
    v253 = v252;
    v254 = v252;
    uiUpgradeOpt[6] = 15;
    uiUpgradeOpt[5] = 0;
    LOBYTE(uiUpgradeOpt[1]) = 0;
    v255 = (int)(v252 + 1);
    do
      v256 = *v254++;
    while ( v256 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&uiUpgradeOpt[1],
      v253,
      (unsigned int)&v254[-v255]);
    LOBYTE(v343) = 4;
    v257 = TextData2::Get(0xFF43506Cu);
    v258 = v257;
    v259 = v257;
    uiUpgradeOpt[13] = 15;
    uiUpgradeOpt[12] = 0;
    LOBYTE(uiUpgradeOpt[8]) = 0;
    v260 = (int)(v257 + 1);
    do
      v261 = *v259++;
    while ( v261 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&uiUpgradeOpt[8],
      v258,
      (unsigned int)&v259[-v260]);
    v262 = *(int (__stdcall **)(_DWORD))(*(_DWORD *)pkItem + 56);
    v343 = 5;
    v263 = v262(v305);
    pkCollectCard = (ItemInfoWin::sNameContentsParameter *)(v263 / 0xF4240);
    LODWORD(uiSerialMiddle) = (v263 % 0xF4240 - v263 % 0x2710) / 0x2710;
    cSerialKey = v263 / 0xF4240 + 64;
    v264 = CollectCardTab::GetByItemInx(HIDWORD(v307));
    pkCollectCard = (ItemInfoWin::sNameContentsParameter *)v264;
    if ( v264 && CollectCardViewTab::GetByCardID(*(_WORD *)v264) )
    {
      v265 = TextData2::Get(0x73A0CCBBu);
      fs(v265);
      v266 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v267 = TextData2::Get(0x1899725Au);
      v268 = fs(v267);
      v266[118].__vecDelDtor((NiRefObject *)v18->m_apkTextWin[(*iIndex)++], (unsigned int)v268);
    }
    v269 = v18->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    (*(void (**)(void))(*(_DWORD *)pkItem + 64))();
    v270 = TextData2::Get(0xC46326Au);
    v305 = fs(v270);
    ((void (__thiscall *)(PgWinText *))v269[118].__vecDelDtor)(v18->m_apkTextWin[(*iIndex)++]);
    v343 = -1;
    _eh_vector_destructor_iterator_(
      &ptr,
      0x1Cu,
      4,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  }
  v271 = (const char *)(*(int (__cdecl **)(char *))(**((_DWORD **)&v18->m_uiTotalMoneyXPos + *iIndex) + 484))(v305);
  if ( v271 && *iIndex > 0 )
  {
    if ( strcmp(v271, " ") )
    {
      v272 = v18->m_apkTextWin[*iIndex];
      v272->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
        (NiRefObject *)v272,
        (unsigned int)" ");
      ++*iIndex;
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97ED4: using guessed type int ITableBase_CollectCardGroupDesc_CollectCardGroupDescTab___ms_pkTable;

//----- (0052F390) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertMoneyContents(ItemInfoWin *this, ItemInfo *pkInfo, int iLot, __int64 i64Money, int *iIndex, ItemInfoWin::eSellState eState)
{
  ItemInfoWin *v6; // esi@1
  int v7; // ebx@2
  int v8; // edx@2
  int (__thiscall *v9)(_DWORD, _DWORD); // eax@2
  int v10; // eax@3
  int v11; // eax@6
  ItemMoney *v12; // eax@9
  char v13; // bl@10
  NiRefObjectVtbl *v14; // ebx@14
  char *v15; // eax@14
  ItemMoney *v16; // ebx@14
  unsigned __int16 *v17; // eax@14
  int v18; // eax@14
  int v19; // ecx@14
  int v20; // eax@16
  char *v21; // edx@16
  char v22; // cl@17
  int v23; // eax@18
  char v24; // cl@19
  int v25; // eax@20
  NiRefObjectVtbl *v26; // ebx@21
  char *v27; // eax@21
  int v28; // eax@21
  char *v29; // ecx@21
  char v30; // dl@22
  int v31; // eax@23
  char v32; // cl@24
  PgFont *v33; // ebx@25
  int v34; // eax@27
  char *v35; // edx@27
  char v36; // cl@28
  int v37; // eax@29
  char v38; // cl@30
  bool v39; // cl@31
  ItemMoney *v40; // edx@31
  int v41; // eax@31
  int v42; // eax@43
  char v43; // dl@44
  int v44; // eax@45
  bool v45; // ST14_1@45
  int v46; // ecx@45
  int v47; // eax@49
  char v48; // dl@50
  int v49; // ebx@51
  bool v50; // ST14_1@51
  PgWinText *v51; // esi@52
  char *v52; // [sp-Ch] [bp-138h]@39
  char *v53; // [sp-8h] [bp-134h]@39
  ItemViewInfo *pkMoneyViewInfo; // [sp+Ch] [bp-120h]@9
  tagSIZE kSize; // [sp+10h] [bp-11Ch]@20
  ItemMoney *pkItemMoney; // [sp+18h] [bp-114h]@2
  PgFont *pkFont; // [sp+1Ch] [bp-110h]@2
  char bShowItemMoney; // [sp+23h] [bp-109h]@2
  int bBuyPossible; // [sp+24h] [bp-108h]@2
  char acStr[256]; // [sp+28h] [bp-104h]@16
  unsigned int v61; // [sp+128h] [bp-4h]@1
  int v62; // [sp+12Ch] [bp+0h]@1

  v61 = (unsigned int)&v62 ^ __security_cookie;
  v6 = this;
  if ( *iIndex < 80 )
  {
    pkFont = (PgFont *)((int (*)(void))this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
    v7 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    v8 = *(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    pkItemMoney = (ItemMoney *)pkInfo->ID;
    v9 = *(int (__thiscall **)(_DWORD, _DWORD))(v8 + 16);
    LOBYTE(bBuyPossible) = 1;
    bShowItemMoney = 0;
    if ( (unsigned __int8)v9(ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable, pkItemMoney) )
    {
      if ( (unsigned __int16)pkItemMoney <= *(_WORD *)(v7 + 200) )
      {
        v11 = *(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)pkItemMoney;
        if ( *(_DWORD *)v11 )
          v10 = *(_DWORD *)v11;
        else
          v10 = 0;
      }
      else
      {
        v10 = 0;
      }
    }
    else
    {
      v10 = 0;
    }
    v12 = ItemMoneyTab::GetByInxName((char *)(v10 + 2));
    pkItemMoney = v12;
    pkMoneyViewInfo = 0;
    if ( v12 )
    {
      v13 = 1;
      pkMoneyViewInfo = ItemViewInfoTab::GetByInxName(v12->IM_MoneyIDX);
    }
    else
    {
      v13 = bShowItemMoney;
    }
    ((void (__stdcall *)(_DWORD))v6->m_pkItemMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v6->m_pkItemMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v6->m_pkItemMoneyNumText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v6->m_pkItemTotalMoneyIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v6->m_pkItemTotalMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    if ( v13 )
    {
      if ( eState == 2 )
      {
        ItemInfoWin::HideAllMoneyWin(v6);
        v14 = v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v15 = TextData3::Get(0x10361F2Fu);
        v14[118].__vecDelDtor((NiRefObject *)v6->m_apkTextWin[*iIndex], (unsigned int)v15);
        v16 = pkItemMoney;
        v17 = (unsigned __int16 *)ItemInfoTab::GetByInxName(pkItemMoney->IM_MoneyIDX);
        v18 = Inventory::GetItemLot(&g_kInventory, *v17);
        v19 = pkItemMoney->IM_MoneyLot;
        LOBYTE(bBuyPossible) = 1;
        if ( v19 > v18 )
        {
          ((void (__stdcall *)(D3DXCOLOR *))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
          LOBYTE(bBuyPossible) = 0;
        }
        v20 = ((int (*)(void))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
        v21 = &acStr[-v20];
        do
        {
          v22 = *(_BYTE *)v20;
          v21[v20] = *(_BYTE *)v20;
          ++v20;
        }
        while ( v22 );
        v23 = (int)acStr;
        do
          v24 = *(_BYTE *)v23++;
        while ( v24 );
        PgFont::GetTextSize(pkFont, acStr, v23 - (_DWORD)&acStr[1], &kSize);
        v25 = kSize.cx;
        v6->m_uiItemMoneyWidth += kSize.cx;
        if ( iLot > 0 )
        {
          ItemInfoWin::ShowItemMoneyWin(
            v6,
            v25 + 5,
            v6->baseclass_0.m_uiEdgeHeight + *iIndex * (v6->m_iFontHeight + 2),
            iLot,
            pkMoneyViewInfo,
            v16,
            bBuyPossible);
          *iIndex += 2;
          ((void (__stdcall *)(_DWORD))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
          v26 = v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v27 = TextData3::Get(0x2B2A247Au);
          v26[118].__vecDelDtor((NiRefObject *)v6->m_apkTextWin[*iIndex], (unsigned int)v27);
          v28 = ((int (*)(void))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
          v29 = &acStr[-v28];
          do
          {
            v30 = *(_BYTE *)v28;
            v29[v28] = *(_BYTE *)v28;
            ++v28;
          }
          while ( v30 );
          v31 = (int)acStr;
          do
            v32 = *(_BYTE *)v31++;
          while ( v32 );
          v33 = pkFont;
          PgFont::GetTextSize(pkFont, acStr, v31 - (_DWORD)&acStr[1], &kSize);
          v6->m_uiItemMoneyWidth += kSize.cx;
          if ( !(_BYTE)bBuyPossible )
            ((void (__stdcall *)(D3DXCOLOR *))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
          v34 = ((int (*)(void))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
          v35 = &acStr[-v34];
          do
          {
            v36 = *(_BYTE *)v34;
            v35[v34] = *(_BYTE *)v34;
            ++v34;
          }
          while ( v36 );
          v37 = (int)acStr;
          do
            v38 = *(_BYTE *)v37++;
          while ( v38 );
          PgFont::GetTextSize(v33, acStr, v37 - (_DWORD)&acStr[1], &kSize);
          v39 = bBuyPossible;
          v40 = pkItemMoney;
          v41 = kSize.cx;
          v6->m_uiItemMoneyWidth += kSize.cx;
          ItemInfoWin::ShowTotalItemMoneyWin(
            v6,
            v41 + 5,
            v6->baseclass_0.m_uiEdgeHeight + *iIndex * (v6->m_iFontHeight + 2),
            iLot,
            pkMoneyViewInfo,
            v40,
            v39);
        }
LABEL_52:
        ++*iIndex;
        v51 = v6->m_apkTextWin[*iIndex];
        v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v51,
          (unsigned int)" ");
        return;
      }
    }
    else
    {
      if ( eState == 2 )
        goto LABEL_35;
    }
    if ( eState != 3 )
    {
      ((void (__stdcall *)(D3DXCOLOR *))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
LABEL_37:
      if ( iLot > 0 )
      {
        if ( eState )
        {
          v53 = TextData::Get(0x98A2FCFEu);
          v52 = acStr;
        }
        else
        {
          v53 = TextData::Get(0x3089A194u);
          v52 = acStr;
        }
        sprintf(v52, v53);
        if ( !(_BYTE)bBuyPossible )
          ((void (__stdcall *)(_DWORD))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
        ((void (__stdcall *)(_DWORD))v6->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
        v42 = (int)acStr;
        do
          v43 = *(_BYTE *)v42++;
        while ( v43 );
        PgFont::GetTextSize(pkFont, acStr, v42 - (_DWORD)&acStr[1], &kSize);
        v44 = kSize.cx + v6->baseclass_0.m_uiEdgeWidth;
        v45 = bBuyPossible;
        v46 = v6->m_iFontHeight;
        v6->m_uiMoneyXPos = v44;
        ItemInfoWin::ShowPrivateStoreMoneyWin(
          v6,
          v44 + 7,
          v6->baseclass_0.m_uiEdgeHeight + (*iIndex - 1) * (v46 + 2),
          i64Money,
          v45);
      }
      ++*iIndex;
      ((void (__stdcall *)(_DWORD))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
      if ( iLot > 0 )
      {
        TextData::Get(0x9EB2A8F8u);
        sprintf(acStr, "%s");
        if ( !(_BYTE)bBuyPossible )
          ((void (__stdcall *)(_DWORD))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
        ((void (__stdcall *)(_DWORD))v6->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
        v47 = (int)acStr;
        do
          v48 = *(_BYTE *)v47++;
        while ( v48 );
        PgFont::GetTextSize(pkFont, acStr, v47 - (_DWORD)&acStr[1], &kSize);
        v49 = kSize.cx + v6->baseclass_0.m_uiEdgeWidth;
        v50 = bBuyPossible;
        v6->m_uiTotalMoneyXPos = v49;
        ItemInfoWin::ShowTotalMoneyWin(
          v6,
          v49 + 7,
          v6->baseclass_0.m_uiEdgeHeight + *iIndex * (v6->m_iFontHeight + 2),
          iLot * i64Money,
          v50);
      }
      goto LABEL_52;
    }
LABEL_35:
    if ( User::GetMoney(&g_kUser) < i64Money )
      LOBYTE(bBuyPossible) = 0;
    goto LABEL_37;
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (0052F9A0) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertProductContents(ItemInfoWin *this, Item *pkItem, int *iIndex)
{
  ItemInfo *v3; // eax@2
  const char *v4; // esi@3
  int v5; // eax@3
  int v6; // edi@3
  char v7; // dl@4
  ProduceInfo *v8; // esi@5
  int *v9; // edi@6
  const char *v10; // eax@7
  ProduceViewInfo *v11; // eax@11
  NiRefObjectVtbl *v12; // edi@12
  unsigned int v13; // edx@13
  int *v14; // esi@13
  int v15; // eax@13
  void *v16; // ecx@14
  char *v17; // eax@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // eax@20
  char *v19; // eax@22
  char *v20; // eax@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v21; // [sp-2Ch] [bp-98h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // [sp-1Ch] [bp-88h]@3
  int *v23; // [sp-18h] [bp-84h]@3
  int v24; // [sp-14h] [bp-80h]@11
  unsigned int v25; // [sp-10h] [bp-7Ch]@1
  void *pkMaterialItemInfo; // [sp+0h] [bp-6Ch]@14
  int v27; // [sp+4h] [bp-68h]@3
  std::vector<unsigned int,std::allocator<unsigned int> > kMaterialCount; // [sp+8h] [bp-64h]@13
  int *nIndex; // [sp+18h] [bp-54h]@1
  ItemInfoWin *v30; // [sp+1Ch] [bp-50h]@1
  unsigned int _Val; // [sp+20h] [bp-4Ch]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Materials; // [sp+24h] [bp-48h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+40h] [bp-2Ch]@7
  unsigned int v34; // [sp+5Ch] [bp-10h]@1
  int v35; // [sp+68h] [bp-4h]@7
  int v36; // [sp+6Ch] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v25 = (unsigned int)&v36 ^ __security_cookie;
  v30 = this;
  nIndex = iIndex;
  if ( pkItem )
  {
    v3 = pkItem->m_pkInfo;
    if ( v3 )
    {
      v4 = v3->InxName;
      v5 = (int)v3->InxName;
      v23 = (int *)15;
      v22 = 0;
      v27 = (int)&v21;
      v21.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v6 = v5 + 1;
      do
        v7 = *(_BYTE *)v5++;
      while ( v7 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v21, v4, v5 - v6);
      v8 = ProduceInfoTable::GetByProduct(v21);
      if ( v8 )
      {
        v9 = nIndex;
        if ( *nIndex > 0 )
        {
          v10 = (const char *)(*(int (__cdecl **)(unsigned int))(**((_DWORD **)&v30->m_uiTotalMoneyXPos + *nIndex) + 484))(v25);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            v10);
          v35 = 0;
          if ( thisa.baseclass_0._Mysize > 0
            && std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(&thisa, " ") )
            ((void (__stdcall *)(_DWORD))v30->m_apkTextWin[(*v9)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
          v35 = -1;
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        }
        v24 = v8->MasteryType;
        v11 = ProduceViewInfoTable::GetByMasteryType((TotalMasteryType)v24);
        if ( v11 )
        {
          v12 = v30->m_apkTextWin[*v9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v24 = (int)v11->Name;
          v24 = (int)fs("[%s]");
          v12[118].__vecDelDtor((NiRefObject *)v30->m_apkTextWin[*nIndex], v24);
          v9 = nIndex;
          ((void (__stdcall *)(D3DXCOLOR *))v30->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
          ++*v9;
        }
        ItemInfoWin::SetTextBeginNewLine(v30, v8->Name, v9, &Color::m_kDxGreenColor);
        *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] = 0;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0._Myres = 0;
        v35 = 1;
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw0);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw1);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw2);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw3);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw4);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw5);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw6);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        _Val = (unsigned int)ItemInfoTab::GetByInxName(v8->Raw7);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&thisa.baseclass_0.___u0._Bx._Buf[12],
          &_Val);
        *(_DWORD *)&kMaterialCount.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        kMaterialCount.baseclass_0._Mylast = 0;
        kMaterialCount.baseclass_0._Myend = 0;
        v13 = v8->Quantity0;
        LOBYTE(v35) = 2;
        _Val = v13;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        _Val = v8->Quantity1;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        _Val = v8->Quantity2;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        _Val = v8->Quantity3;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        _Val = v8->Quantity4;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        _Val = v8->Quantity5;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        _Val = v8->Quantity6;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        _Val = v8->Quantity7;
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&kMaterialCount,
          &_Val);
        Materials.baseclass_0._Myres = 15;
        Materials.baseclass_0._Mysize = 0;
        Materials.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v14 = *(int **)&kMaterialCount;
        v15 = *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] - *(_DWORD *)&kMaterialCount;
        LOBYTE(v35) = 3;
        v27 = *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] - *(_DWORD *)&kMaterialCount;
        _Val = 8;
        do
        {
          v16 = *(void **)((char *)v14 + v15);
          pkMaterialItemInfo = v16;
          if ( v16 && *v14 )
          {
            if ( Materials.baseclass_0._Mysize > 0 )
            {
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&Materials, ", ", 2u);
              v16 = pkMaterialItemInfo;
            }
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
              &Materials,
              (const char *)v16 + 34,
              strlen((const char *)v16 + 34));
            v24 = *v14;
            v17 = fs("(%d)");
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&Materials, v17, strlen(v17));
            v9 = nIndex;
            v15 = v27;
          }
          ++v14;
          --_Val;
        }
        while ( _Val );
        v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Materials;
        if ( Materials.baseclass_0._Myres < 0x10 )
          v18 = &Materials;
        v24 = (int)&Color::m_kDxGreenColor;
        v23 = v9;
        v22 = v18;
        v19 = TextData3::Get(0x829488E5u);
        v20 = fs(v19);
        ItemInfoWin::SetTextBeginNewLine(v30, v20, v23, (D3DXCOLOR *)v24);
        if ( Materials.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&Materials);
        Materials.baseclass_0._Myres = 15;
        Materials.baseclass_0._Mysize = 0;
        Materials.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( *(_DWORD *)&kMaterialCount )
          operator delete(*(void **)&kMaterialCount);
        if ( *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] )
          operator delete(*(void **)&thisa.baseclass_0.___u0._Bx._Buf[12]);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0052FE00) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertMaterialContents(ItemInfoWin *this, Item *pkItem, int *iIndex)
{
  ItemInfo *v3; // eax@2
  const char *v4; // esi@3
  int v5; // eax@3
  int v6; // ebx@3
  char v7; // dl@4
  ItemInfoWin *v8; // ebx@6
  const char *v9; // eax@7
  TotalMasteryType v10; // eax@11
  ProduceViewInfo *v11; // esi@13
  const char *v12; // edx@16
  int v13; // eax@16
  int v14; // esi@16
  char v15; // cl@17
  NiRefObjectVtbl *v16; // esi@21
  char *v17; // eax@21
  const char *v18; // eax@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v19; // [sp-2Ch] [bp-7Ch]@3
  int v20; // [sp-1Ch] [bp-6Ch]@3
  signed int v21; // [sp-18h] [bp-68h]@3
  unsigned int v22; // [sp-10h] [bp-60h]@1
  ProduceInfoTable::MaterialInfo *v23; // [sp+0h] [bp-50h]@3
  ItemInfoWin *i; // [sp+4h] [bp-4Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > str; // [sp+8h] [bp-48h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ProduceSkills; // [sp+24h] [bp-2Ch]@11
  unsigned int v27; // [sp+40h] [bp-10h]@1
  int v28; // [sp+4Ch] [bp-4h]@7
  int v29; // [sp+50h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v22 = (unsigned int)&v29 ^ __security_cookie;
  i = this;
  if ( pkItem )
  {
    v3 = pkItem->m_pkInfo;
    if ( v3 )
    {
      v4 = v3->InxName;
      v5 = (int)v3->InxName;
      v21 = 15;
      v20 = 0;
      v23 = (ProduceInfoTable::MaterialInfo *)&v19;
      v19.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v6 = v5 + 1;
      do
        v7 = *(_BYTE *)v5++;
      while ( v7 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v19, v4, v5 - v6);
      v23 = ProduceInfoTable::GetMaterialInfo(v19);
      if ( v23 )
      {
        v8 = i;
        if ( *iIndex > 0 )
        {
          v9 = (const char *)(*(int (__cdecl **)(unsigned int))(**((_DWORD **)&i->m_uiTotalMoneyXPos + *iIndex) + 484))(v22);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &str,
            v9);
          v28 = 0;
          if ( str.baseclass_0._Mysize > 0
            && std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(&str, " ") )
            ((void (__stdcall *)(_DWORD))v8->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&str);
        }
        ProduceSkills.baseclass_0._Myres = 15;
        ProduceSkills.baseclass_0._Mysize = 0;
        ProduceSkills.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v10 = 0;
        v28 = 1;
        i = 0;
        do
        {
          if ( v23->m_MasteryType[v10] )
          {
            v11 = ProduceViewInfoTable::GetByMasteryType(v10);
            if ( v11 )
            {
              if ( ProduceSkills.baseclass_0._Mysize )
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&ProduceSkills, ", ", 2u);
              v12 = v11->Name;
              v13 = (int)v11->Name;
              v14 = (int)&v11->Name[1];
              do
                v15 = *(_BYTE *)v13++;
              while ( v15 );
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                &ProduceSkills,
                v12,
                v13 - v14);
            }
            v10 = (TotalMasteryType)i;
          }
          ++v10;
          i = (ItemInfoWin *)v10;
        }
        while ( (unsigned int)v10 < 7 );
        v16 = v8->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v17 = TextData3::Get(0xD6DD342Au);
        v16[118].__vecDelDtor((NiRefObject *)v8->m_apkTextWin[*iIndex], (unsigned int)v17);
        ((void (__stdcall *)(D3DXCOLOR *))v8->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
        v18 = *(const char **)&ProduceSkills;
        if ( ProduceSkills.baseclass_0._Myres < 0x10 )
          v18 = (const char *)&ProduceSkills;
        ItemInfoWin::SetTextBeginNewLine(v8, v18, iIndex, &Color::m_kDxGreenColor);
        if ( ProduceSkills.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&ProduceSkills);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0052FFF0) --------------------------------------------------------
void __thiscall ItemInfoWin::InsertDescriptContents(ItemInfoWin *this, ItemViewInfo *pkViewInfo, char nGrade, Item *pkItem, int *iIndex, int iLot)
{
  int v6; // edi@0
  ItemInfo *v7; // edi@2
  char v8; // cl@6
  int v9; // eax@6
  char v10; // cl@6
  char v11; // cl@6
  unsigned int v12; // esi@8
  unsigned __int16 *v13; // eax@9
  unsigned __int16 *v14; // edi@9
  ProduceInfo *v15; // eax@9
  PgWinText *v16; // esi@15
  NiRefObjectVtbl *v17; // edi@15
  char *v18; // eax@15
  char *v19; // eax@15
  int v20; // eax@16
  const char *v21; // eax@17
  CQuest *v22; // eax@24
  unsigned int v23; // edi@25
  QUEST_DATA *v24; // eax@26
  QUEST_DATA *v25; // esi@26
  int *v26; // edi@36
  char *v27; // eax@36
  char *v28; // eax@36
  const char *v29; // eax@38
  ItemInfoWin *v30; // edi@42
  char *v31; // esi@42
  int v32; // eax@44
  signed int v33; // eax@45
  char *v34; // eax@49
  const char *v35; // eax@52
  PgWinText *v36; // esi@59
  NiRefObjectVtbl *v37; // edi@59
  char *v38; // eax@59
  char *v39; // eax@59
  int v40; // eax@59
  int v41; // edi@59
  int *v42; // esi@62
  int v43; // edi@62
  char *v44; // eax@63
  void (__thiscall *v45)(_DWORD, _DWORD); // eax@63
  char v46; // kr00_1@64
  int v47; // eax@65
  int v48; // edx@67
  char v49; // kr01_1@67
  char *v50; // eax@67
  int v51; // edi@68
  int v52; // eax@68
  ItemViewInfo *v53; // esi@70
  MiniHouse *v54; // eax@71
  signed __int64 v55; // qax@73
  int v56; // edi@73
  int v57; // esi@73
  char *v58; // eax@73
  char *v59; // edx@73
  char v60; // cl@74
  char *v61; // eax@76
  unsigned int v62; // eax@76
  void *v63; // edi@76
  char v64; // cl@77
  char *v65; // eax@80
  unsigned int v66; // eax@80
  const void *v67; // edx@80
  void *v68; // edi@80
  char v69; // cl@81
  int v70; // esi@87
  int v71; // eax@87
  long double v72; // st7@87
  signed int v73; // eax@87
  char *v74; // eax@87
  char *v75; // esi@87
  char v76; // cl@88
  char *v77; // eax@90
  unsigned int v78; // eax@90
  void *v79; // edi@90
  char v80; // cl@91
  char *v81; // eax@94
  unsigned int v82; // eax@94
  void *v83; // edi@94
  char v84; // cl@95
  int v85; // edi@97
  char *v86; // eax@98
  unsigned int v87; // eax@98
  void *v88; // edi@98
  char v89; // cl@99
  char *v90; // eax@104
  const void *v91; // edx@104
  char v92; // cl@105
  unsigned int v93; // eax@106
  void *v94; // edi@106
  char v95; // cl@107
  void *v96; // edi@108
  const void *v97; // esi@108
  char v98; // cl@108
  int v99; // eax@108
  MiniHouseFurniture *v100; // eax@111
  ItemInfoWin *v101; // esi@113
  PgFont *v102; // edi@113
  int v103; // eax@113
  char v104; // dl@114
  int v105; // eax@115
  int v106; // edx@115
  __int64 v107; // ST28_8@115
  signed int v108; // edi@124
  MoverItem *v109; // eax@124
  MoverMain *v110; // eax@125
  RIDING *v111; // eax@127
  bool v112; // zf@128
  bool v113; // sf@128
  unsigned __int8 v114; // of@128
  int v115; // esi@132
  int v116; // edi@132
  char *v117; // eax@132
  char *v118; // edx@132
  char v119; // cl@133
  char *v120; // eax@135
  unsigned int v121; // eax@135
  void *v122; // edi@135
  char v123; // cl@136
  char *v124; // eax@139
  char v125; // cl@140
  Item *v126; // esi@144
  ItemInfoWin *v127; // edi@144
  int v128; // eax@146
  ShineDateTime v129; // ecx@146
  int v130; // eax@146
  int v131; // eax@150
  const char *v132; // eax@157
  ItemInfo *v133; // esi@163
  NiRefObjectVtbl *v134; // esi@169
  char *v135; // eax@169
  char *v136; // eax@175
  NiRefObjectVtbl *v137; // esi@176
  char *v138; // eax@176
  ItemInfo *v139; // eax@179
  char *v140; // eax@180
  unsigned __int16 *v141; // eax@181
  double v142; // st7@182
  NiRefObjectVtbl *v143; // esi@183
  char *v144; // eax@183
  PgWinText *v145; // esi@185
  NiRefObjectVtbl *v146; // edi@185
  char *v147; // eax@185
  const char *v148; // eax@186
  char *v149; // [sp-Ch] [bp-7E8h]@167
  char *v150; // [sp-8h] [bp-7E4h]@63
  int v151; // [sp-4h] [bp-7E0h]@2
  ItemInfo *iMinute; // [sp+Ch] [bp-7D0h]@2
  int iMinutea; // [sp+Ch] [bp-7D0h]@84
  int iMinuteb; // [sp+Ch] [bp-7D0h]@87
  ProduceInfo *iDay; // [sp+10h] [bp-7CCh]@7
  unsigned int iDaya; // [sp+10h] [bp-7CCh]@25
  signed int iDayb; // [sp+10h] [bp-7CCh]@87
  tagSIZE kSize; // [sp+14h] [bp-7C8h]@8
  Item *v159; // [sp+1Ch] [bp-7C0h]@1
  int iHour; // [sp+20h] [bp-7BCh]@2
  ItemInfoWin *thisa; // [sp+24h] [bp-7B8h]@1
  __int16 v162; // [sp+28h] [bp-7B4h]@58
  unsigned __int8 v163; // [sp+2Ah] [bp-7B2h]@59
  __int16 v164; // [sp+2Bh] [bp-7B1h]@61
  ShineDateTime kDelTime; // [sp+2Dh] [bp-7AFh]@116
  unsigned int v166; // [sp+32h] [bp-7AAh]@84
  __int64 i64Money; // [sp+46h] [bp-796h]@115
  __int16 v168; // [sp+8Ch] [bp-750h]@58
  char v169; // [sp+8Eh] [bp-74Eh]@58
  tm TimeRL; // [sp+90h] [bp-74Ch]@87
  tm tb; // [sp+B4h] [bp-728h]@6
  char strResult[1024]; // [sp+D8h] [bp-704h]@70
  char acStr[256]; // [sp+4D8h] [bp-304h]@2
  char strDay[255]; // [sp+5D8h] [bp-204h]@70
  char strHour[255]; // [sp+6D8h] [bp-104h]@70
  unsigned int v176; // [sp+7D8h] [bp-4h]@1
  int v177; // [sp+7DCh] [bp+0h]@1

  v176 = (unsigned int)&v177 ^ __security_cookie;
  v114 = __OFSUB__(*iIndex, 80);
  v113 = *iIndex - 80 < 0;
  thisa = this;
  v159 = pkItem;
  if ( !(v113 ^ v114) )
    return;
  v151 = v6;
  acStr[0] = 0;
  memset(&acStr[1], 0, 0xFFu);
  v7 = 0;
  iMinute = 0;
  iHour = 0;
  if ( pkItem )
  {
    v7 = pkItem->m_pkInfo;
    iMinute = v7;
    if ( v7 )
    {
      if ( v7->Class == 11 )
      {
        if ( !strcmp(v7->ItemUseSkill, "UseSkill") )
        {
          v8 = v7->InxName[1];
          tb.tm_min = 0;
          tb.tm_hour = 0;
          tb.tm_mday = 0;
          tb.tm_mon = 0;
          tb.tm_year = 0;
          tb.tm_wday = 0;
          tb.tm_yday = 0;
          tb.tm_isdst = 0;
          tb.tm_min = v7->InxName[0];
          HIWORD(tb.tm_min) = v7->InxName[2];
          v9 = v7->InxName[4];
          BYTE1(tb.tm_min) = v8;
          v10 = v7->InxName[3];
          LOBYTE(tb.tm_hour) = v9;
          LOBYTE(v9) = v7->InxName[6];
          BYTE3(tb.tm_min) = v10;
          v11 = v7->InxName[5];
          BYTE2(tb.tm_hour) = v9;
          BYTE1(tb.tm_hour) = v11;
          if ( !strcmp((const char *)&tb.tm_min, "Recipe_") )
          {
            iDay = ProduceInfoTable::GetByNeedMasteryGain(v7->InxName);
            if ( iDay )
            {
              v12 = 0;
              kSize.cy = Skill::GetTotalLearnProductSkill();
              if ( kSize.cy )
              {
                do
                {
                  v13 = (unsigned __int16 *)Skill::GetLearnProductSkill(v12);
                  v14 = v13;
                  v15 = ProduceInfoTable::GetByID(*v13);
                  if ( v15 && iDay->MasteryType == v15->MasteryType )
                    iHour += *((_DWORD *)v14 + 1);
                  ++v12;
                }
                while ( v12 < kSize.cy );
              }
              if ( iDay->NeededMasteryGain > iHour )
                ((void (__stdcall *)(D3DXCOLOR *))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
              v16 = thisa->m_apkTextWin[*iIndex];
              v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v18 = TextData::Get(0x957C6FFDu);
              v19 = fs(v18);
              v17[118].__vecDelDtor((NiRefObject *)v16, (unsigned int)v19);
              ++*iIndex;
              v7 = iMinute;
            }
          }
        }
      }
    }
  }
  v20 = *iIndex;
  if ( *iIndex <= 0 )
  {
    thisa->m_apkTextWin[v20]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)thisa->m_apkTextWin[v20],
      (unsigned int)" ");
    goto LABEL_21;
  }
  v21 = (const char *)(*(int (__thiscall **)(_DWORD))(**((_DWORD **)&thisa->m_uiTotalMoneyXPos + v20) + 484))(*(&thisa->m_uiTotalMoneyXPos + v20));
  if ( v21 && strcmp(v21, " ") )
  {
    ((void (__stdcall *)(_DWORD))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
LABEL_21:
    ++*iIndex;
  }
  if ( v7 && v7->Type == 4 )
  {
    v22 = QuestDataMgr::GetQuest();
    if ( v22 )
    {
      v23 = 0;
      iHour = (int)v22->m_pQuestData;
      iDaya = 0;
      if ( CQuestData::GetNumOfQuestData((CQuestData *)iHour) > 0u )
      {
        do
        {
          v24 = CQuestData::GetQuestDataByIndex((CQuestData *)iHour, v23);
          v25 = v24;
          if ( v24 && v24->Start.bItem && !v24->Start.bNPC && v24->Start.ItemID == v159->m_kStruct.itemid )
          {
            if ( v24->Start.LevelMin > User::Lv(&g_kUser) || User::Lv(&g_kUser) > v25->Start.LevelMax )
              ((void (__stdcall *)(D3DXCOLOR *))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
            if ( User::Lv(&g_kUser) >= v25->Start.LevelMin && User::Lv(&g_kUser) <= v25->Start.LevelMax )
              ((void (__stdcall *)(D3DXCOLOR *))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
            v26 = (int *)thisa->m_apkTextWin[*iIndex];
            kSize.cy = *v26;
            v27 = TextData2::Get(0x7EAA8B9Fu);
            v28 = fs(v27);
            (*(void (__thiscall **)(int *, char *))(kSize.cy + 472))(v26, v28);
            ++*iIndex;
            v23 = iDaya;
          }
          ++v23;
          iDaya = v23;
        }
        while ( (signed int)v23 < CQuestData::GetNumOfQuestData((CQuestData *)iHour) );
      }
    }
    v29 = (const char *)(*(int (**)(void))(**((_DWORD **)&thisa->m_uiTotalMoneyXPos + *iIndex) + 484))();
    if ( v29 && *iIndex > 0 && !strcmp(v29, " ") )
      ((void (__stdcall *)(_DWORD))thisa->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  }
  v30 = thisa;
  v31 = pkViewInfo->Descript;
  if ( pkViewInfo->Descript[0] != 45 )
  {
    kSize.cy = *(_DWORD *)(((int (*)(void))thisa->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)()
                         + 192);
    memset(acStr, 0, 0x100u);
    while ( *iIndex < 80 )
    {
      v32 = PgUtil::StringPixelCopy(acStr, v31, (HDC__ *)kSize.cy, v30->m_iItemNameLength);
      if ( !v32 )
        break;
      acStr[v32] = 0;
      v31 += v32;
      v33 = 0;
      if ( acStr[0] == 32 )
      {
        do
        {
          if ( !acStr[v33] )
            break;
          if ( v33 >= 64 )
            break;
          ++v33;
        }
        while ( acStr[v33] == 32 );
      }
      v34 = &acStr[v33];
      if ( v34 )
        ((void (__stdcall *)(char *))v30->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v34);
      memset(acStr, 0, 0x100u);
    }
  }
  v35 = (const char *)(*(int (**)(void))(**((_DWORD **)&v30->m_uiTotalMoneyXPos + *iIndex) + 484))();
  if ( v35 && *iIndex > 0 && strcmp(v35, " ") )
    ((void (__stdcall *)(_DWORD))v30->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  if ( !v159 )
    goto LABEL_144;
  if ( (unsigned __int8)((int (*)(void))v159->baseclass_0.vfptr[1].__vecDelDtor)() == 13 )
  {
    memcpy(&v162, &v159->m_kStruct, 0x64u);
    v168 = *(_WORD *)((char *)&v159->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v169 = BYTE3(v159->m_kStruct.itemattr.binditem.portal[9].y);
    if ( (unsigned __int8)(*(_DWORD *)&v162 >> 16) )
    {
      v36 = thisa->m_apkTextWin[*iIndex];
      v37 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v38 = TextData::Get(0xA0A48F88u);
      v39 = fs(v38);
      v37[118].__vecDelDtor((NiRefObject *)v36, (unsigned int)v39);
      v40 = v163;
      ++*iIndex;
      v41 = 0;
      iHour = 0;
      if ( v40 > 0 )
      {
        do
        {
          if ( v41 )
          {
            v47 = (unsigned __int16)*(&v164 + 5 * v41);
            if ( (_WORD)v47 != -1 )
            {
              v48 = *(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
              kSize.cy = (unsigned __int16)*(&v164 + 5 * v41);
              v49 = (*(int (__thiscall **)(int, int))(v48 + 16))(ITableBase<MapInfo_MapInfoTab>::ms_pkTable, v47);
              v42 = (int *)thisa->m_apkTextWin[*iIndex];
              kSize.cy = *v42;
              v50 = TextData::Get(0x333C156Du);
              v150 = fs(v50);
              v45 = *(void (__thiscall **)(_DWORD, _DWORD))(kSize.cy + 472);
              goto LABEL_68;
            }
            v42 = (int *)thisa->m_apkTextWin[*iIndex];
            v43 = *v42;
            TextData::Get(0x9BEBE5D9u);
          }
          else
          {
            if ( v164 == -1 )
            {
              v42 = (int *)thisa->m_apkTextWin[*iIndex];
              v43 = *v42;
              TextData::Get(0x9BEBE5D9u);
            }
            else
            {
              v46 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 16))(
                      ITableBase<MapInfo_MapInfoTab>::ms_pkTable,
                      *(_DWORD *)&v164);
              v42 = (int *)thisa->m_apkTextWin[*iIndex];
              v43 = *v42;
            }
          }
          v44 = TextData::Get(0x333C156Du);
          v150 = fs(v44);
          v45 = *(void (__thiscall **)(_DWORD, _DWORD))(v43 + 472);
LABEL_68:
          v45(v42, v150);
          v51 = iHour;
          v52 = v163;
          ++*iIndex;
          v41 = v51 + 1;
          iHour = v41;
        }
        while ( v41 < v52 );
      }
    }
  }
  if ( (unsigned __int8)((int (__thiscall *)(Item *))v159->baseclass_0.vfptr[1].__vecDelDtor)(v159) == 18 )
  {
    strDay[0] = 0;
    memset(&strDay[1], 0, 0xFEu);
    strHour[0] = 0;
    memset(&strHour[1], 0, 0xFEu);
    strResult[0] = 0;
    memset(&strResult[1], 0, 0x3FFu);
    v53 = v159->m_pkViewInfo;
    if ( !v53 || (v54 = MiniHouseTable::GetByInxName(v53->InxName)) == 0 || !v54->KeepTime_Hour )
      goto LABEL_144;
    v55 = v54->KeepTime_Hour;
    v56 = v55 % 24;
    kSize.cy = v55 % 24;
    v57 = v55 / 24;
    v58 = TextData::Get(0xC1D8D332u);
    v59 = (char *)(strResult - v58);
    do
    {
      v60 = *v58;
      v59[(_DWORD)v58] = *v58;
      ++v58;
    }
    while ( v60 );
    if ( v57 > 0 )
    {
      v61 = TextData::Get(0x97BEF4E9u);
      sprintf(strDay, v61);
      v62 = strlen(strDay) + 1;
      v63 = (char *)&tb.tm_isdst + 3;
      do
      {
        v64 = *((_BYTE *)v63 + 1);
        v63 = (char *)v63 + 1;
      }
      while ( v64 );
      memcpy(v63, strDay, v62);
      v56 = kSize.cy;
    }
    if ( v56 <= 0 )
      goto LABEL_142;
    v65 = TextData::Get(0xA703F2F6u);
    sprintf(strHour, v65);
    v67 = strHour;
    v66 = strlen(strHour) + 1;
    v68 = (char *)&tb.tm_isdst + 3;
    do
    {
      v69 = *((_BYTE *)v68 + 1);
      v68 = (char *)v68 + 1;
    }
    while ( v69 );
LABEL_141:
    memcpy(v68, v67, v66);
LABEL_142:
    ((void (__stdcall *)(_DWORD))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(strResult);
LABEL_143:
    ++*iIndex;
    goto LABEL_144;
  }
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v159->baseclass_0.vfptr[1].__vecDelDtor)(v159) != 28 )
  {
    if ( (unsigned __int8)((int (__thiscall *)(Item *))v159->baseclass_0.vfptr[1].__vecDelDtor)(v159) == 9 )
    {
      memcpy(&v162, &v159->m_kStruct, 0x64u);
      v168 = *(_WORD *)((char *)&v159->m_kStruct.itemattr.binditem.portal[9].y + 1);
      v169 = BYTE3(v159->m_kStruct.itemattr.binditem.portal[9].y);
      v100 = MiniHouseFuritureInfoTab::GetObjByName(pkViewInfo->InxName);
      if ( v100->GameType == 1 )
      {
        if ( strcmp(v100->InvenType, "MINIGAME") )
        {
          if ( ((_BYTE)kDelTime._bf0 || kDelTime._bf0 & 0xFFFFFF00) && (unsigned __int8)kDelTime._bf0 != 255 )
          {
            if ( thisa->RemainTimeUpdate <= 0.0 )
              *iIndex = ItemInfoWin::DisplayItemDurationDirectTime(thisa, *iIndex, kDelTime);
            else
              *iIndex = ItemInfoWin::DisplayItemDurationBackupTime(thisa, *iIndex);
          }
        }
        else
        {
          strHour[0] = 0;
          memset(&strHour[1], 0, 0xFFu);
          v101 = thisa;
          v102 = (PgFont *)((int (*)(void))thisa->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
          ((void (__stdcall *)(_DWORD))thisa->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(strHour);
          v103 = (int)strHour;
          do
            v104 = *(_BYTE *)v103++;
          while ( v104 );
          PgFont::GetTextSize(v102, strHour, v103 - (_DWORD)&strHour[1], &kSize);
          v105 = kSize.cx + v101->baseclass_0.m_uiEdgeWidth;
          v106 = v101->m_iFontHeight;
          v107 = i64Money;
          v101->m_uiMoneyXPos = v105;
          ItemInfoWin::ShowPrivateStoreMoneyWin(
            v101,
            v105 + 7,
            v101->baseclass_0.m_uiEdgeHeight + (*iIndex - 1) * (v106 + 2),
            v107,
            1);
        }
      }
      goto LABEL_144;
    }
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v159->baseclass_0.vfptr[1].__vecDelDtor)(v159) != 23 || !iMinute )
      goto LABEL_144;
    v108 = 0;
    v109 = MoverItemTab::GetByItemIdx(iMinute->InxName);
    if ( v109 )
    {
      v110 = MoverMainTab::GetByMoverIdx(v109->MoverIDX);
      if ( v110 )
        v108 = v110->DurationHour;
    }
    v111 = RidePetTable::GetByInxName(iMinute->InxName);
    if ( v111 )
    {
      v114 = 0;
      v112 = v108 == 0;
      v113 = v108 < 0;
      if ( v108 )
      {
LABEL_131:
        if ( (unsigned __int8)(v113 ^ v114) | v112 )
          goto LABEL_144;
        strHour[0] = 0;
        memset(&strHour[1], 0, 0xFEu);
        strDay[0] = 0;
        memset(&strDay[1], 0, 0xFEu);
        strResult[0] = 0;
        memset(&strResult[1], 0, 0x3FFu);
        v115 = v108 / 24;
        v116 = v108 % 24;
        kSize.cy = v116;
        v117 = TextData::Get(0xC1D8D332u);
        v118 = (char *)(strResult - v117);
        do
        {
          v119 = *v117;
          v118[(_DWORD)v117] = *v117;
          ++v117;
        }
        while ( v119 );
        if ( v115 > 0 )
        {
          v120 = TextData::Get(0x97BEF4E9u);
          sprintf(strHour, v120);
          v121 = strlen(strHour) + 1;
          v122 = (char *)&tb.tm_isdst + 3;
          do
          {
            v123 = *((_BYTE *)v122 + 1);
            v122 = (char *)v122 + 1;
          }
          while ( v123 );
          memcpy(v122, strHour, v121);
          v116 = kSize.cy;
        }
        if ( v116 <= 0 )
          goto LABEL_142;
        v124 = TextData::Get(0xA703F2F6u);
        sprintf(strDay, v124);
        v67 = strDay;
        v66 = strlen(strDay) + 1;
        v68 = (char *)&tb.tm_isdst + 3;
        do
        {
          v125 = *((_BYTE *)v68 + 1);
          v68 = (char *)v68 + 1;
        }
        while ( v125 );
        goto LABEL_141;
      }
      v108 = v111->UseTime;
    }
    v114 = 0;
    v112 = v108 == 0;
    v113 = v108 < 0;
    goto LABEL_131;
  }
  memcpy(&v162, &v159->m_kStruct, 0x64u);
  v168 = *(_WORD *)((char *)&v159->m_kStruct.itemattr.binditem.portal[9].y + 1);
  v169 = BYTE3(v159->m_kStruct.itemattr.binditem.portal[9].y);
  iMinutea = (unsigned __int8)v166;
  if ( ((_BYTE)v166 || v166 & 0xFFFFFF00) && (unsigned __int8)v166 != 255 )
  {
    strHour[0] = 0;
    memset(&strHour[1], 0, 0xFEu);
    strDay[0] = 0;
    memset(&strDay[1], 0, 0xFEu);
    strResult[0] = 0;
    memset(&strResult[1], 0, 0x3FFu);
    memcpy(&TimeRL, &Timer::ms_dLastServerTime, sizeof(TimeRL));
    v70 = _mktime32(&TimeRL);
    tb.tm_year = iMinutea + 100;
    tb.tm_mon = ((v166 >> 8) & 0x1F) - 1;
    tb.tm_mday = (v166 >> 13) & 0x3F;
    tb.tm_hour = (v166 >> 19) & 0x3F;
    tb.tm_min = v166 >> 25;
    tb.tm_sec = 0;
    v71 = _mktime32(&tb);
    v72 = _difftime32(v71, v70);
    iDayb = (signed int)(v72 / 86400.0);
    v73 = (signed int)(v72 / 3600.0);
    iHour = v73 % 24;
    kSize.cy = 3600 * v73 % 24;
    iMinuteb = (signed int)(v72 - (double)(86400 * (signed int)(v72 / 86400.0)) - (double)kSize.cy) / 60;
    v74 = TextData::Get(0x27444090u);
    v75 = (char *)(strResult - v74);
    do
    {
      v76 = *v74;
      v75[(_DWORD)v74] = *v74;
      ++v74;
    }
    while ( v76 );
    if ( iDayb > 0 )
    {
      v77 = TextData::Get(0x97BEF4E9u);
      sprintf(strHour, v77);
      v78 = strlen(strHour) + 1;
      v79 = (char *)&tb.tm_isdst + 3;
      do
      {
        v80 = *((_BYTE *)v79 + 1);
        v79 = (char *)v79 + 1;
      }
      while ( v80 );
      memcpy(v79, strHour, v78);
    }
    if ( iHour > 0 )
    {
      v81 = TextData::Get(0xA703F2F6u);
      sprintf(strDay, v81);
      v82 = strlen(strDay) + 1;
      v83 = (char *)&tb.tm_isdst + 3;
      do
      {
        v84 = *((_BYTE *)v83 + 1);
        v83 = (char *)v83 + 1;
      }
      while ( v84 );
      memcpy(v83, strDay, v82);
    }
    v85 = iMinuteb;
    if ( iMinuteb > 0 )
    {
      v86 = TextData::Get(0xF507F634u);
      sprintf(strDay, v86);
      v87 = strlen(strDay) + 1;
      v88 = (char *)&tb.tm_isdst + 3;
      do
      {
        v89 = *((_BYTE *)v88 + 1);
        v88 = (char *)v88 + 1;
      }
      while ( v89 );
      memcpy(v88, strDay, v87);
      v85 = iMinuteb;
    }
    ((void (__stdcall *)(_DWORD))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    if ( iDayb > 0 || iHour > 0 || v85 > 0 )
    {
      ((void (__cdecl *)(_DWORD))thisa->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(strResult);
    }
    else
    {
      v90 = TextData2::Get(0xA5A4A8EFu);
      v91 = v90;
      do
        v92 = *v90++;
      while ( v92 );
      v93 = v90 - v91;
      v94 = (char *)&tb.tm_isdst + 3;
      do
      {
        v95 = *((_BYTE *)v94 + 1);
        v94 = (char *)v94 + 1;
      }
      while ( v95 );
      memcpy(v94, v91, 4 * (v93 >> 2));
      v97 = (char *)v91 + 4 * (v93 >> 2);
      v96 = (char *)v94 + 4 * (v93 >> 2);
      v98 = v93;
      v99 = *iIndex;
      memcpy(v96, v97, v98 & 3);
      ((void (__cdecl *)(_DWORD))thisa->m_apkTextWin[v99]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(strResult);
    }
    goto LABEL_143;
  }
LABEL_144:
  v126 = v159;
  v127 = thisa;
  ItemInfoWin::InsertProductContents(thisa, v159, iIndex);
  ItemInfoWin::InsertMaterialContents(v127, v126, iIndex);
  if ( v126 )
  {
    if ( ((int (__thiscall *)(Item *))v126->baseclass_0.vfptr[11].__vecDelDtor)(v126) )
    {
      v128 = ((int (__thiscall *)(Item *))v126->baseclass_0.vfptr[11].__vecDelDtor)(v126);
      v129._bf0 = *(_DWORD *)v128;
      v130 = (unsigned __int8)*(_DWORD *)v128;
      if ( v130 || v129._bf0 & 0xFFFFFF00 )
      {
        if ( v130 != 255 )
        {
          if ( v127->RemainTimeUpdate <= 0.0 )
            v131 = ItemInfoWin::DisplayItemDurationDirectTime(v127, *iIndex, v129);
          else
            v131 = ItemInfoWin::DisplayItemDurationBackupTime(v127, *iIndex);
          *iIndex = v131;
        }
      }
    }
  }
  if ( nGrade
    && v126
    && (unsigned __int8)((int (__thiscall *)(Item *))v126->baseclass_0.vfptr[1].__vecDelDtor)(v126) == 23 )
    ItemInfoWin::InsertMoverUpgradeContents(v127, v126->m_pkInfo, nGrade, iIndex);
  v132 = (const char *)(*(int (**)(void))(**((_DWORD **)&v127->m_uiTotalMoneyXPos + *iIndex) + 484))();
  if ( v132 && *iIndex > 0 )
  {
    if ( strcmp(v132, " ") )
      ((void (__stdcall *)(_DWORD))v127->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    v126 = v159;
  }
  if ( !v126 )
    goto LABEL_186;
  v133 = v159->m_pkInfo;
  if ( v133 )
  {
    ((void (__stdcall *)(D3DXCOLOR *, int))v127->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
      &Color::m_kDxRedColor,
      v151);
    if ( CItemAuthorityBase::IA_IsDataChrBelonged(&g_kItemAuthority, v133->BT_Inx) )
    {
      if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v133->BT_Inx) )
      {
        if ( Item::GetPutOnBelongState(v159) )
        {
          TextData2::Get(0xE004343Eu);
          TextData2::Get(0xF64F3F3Fu);
          v149 = "%s (%s)";
        }
        else
        {
          TextData2::Get(0x2E63888Du);
          TextData2::Get(0xF64F3F3Fu);
          v149 = "%s (%s)";
        }
LABEL_175:
        v136 = fs(v149);
        ItemInfoWin::SetTextBeginNewLine(v127, v136, iIndex, &Color::m_kDxRedColor);
        goto LABEL_178;
      }
      v134 = v127->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      kSize.cy = (int)v127->m_apkTextWin[*iIndex];
      v135 = TextData2::Get(0x8AA2A8FAu);
      v134[118].__vecDelDtor((NiRefObject *)kSize.cy, (unsigned int)v135);
    }
    else
    {
      if ( !CItemAuthorityBase::IA_IsDataAccBelonged(&g_kItemAuthority, v133->BT_Inx) )
      {
LABEL_178:
        ((void (__cdecl *)(D3DXCOLOR *))v127->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
        goto LABEL_179;
      }
      if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v133->BT_Inx) )
      {
        if ( Item::GetPutOnBelongState(v159) )
        {
          TextData2::Get(0xE004343Eu);
          TextData2::Get(0xF6403A3Du);
          v149 = "%s (%s)";
        }
        else
        {
          TextData2::Get(0x2E63888Du);
          TextData2::Get(0xF6403A3Du);
          v149 = "%s (%s)";
        }
        goto LABEL_175;
      }
      v137 = v127->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      kSize.cy = (int)v127->m_apkTextWin[*iIndex];
      v138 = TextData2::Get(0x85A0A8EBu);
      v137[118].__vecDelDtor((NiRefObject *)kSize.cy, (unsigned int)v138);
    }
    ++*iIndex;
    goto LABEL_178;
  }
LABEL_179:
  v139 = v159->m_pkInfo;
  if ( v139 )
  {
    v140 = v139->ItemUseSkill;
    if ( *v140 != 45 )
    {
      v141 = (unsigned __int16 *)ActSkillInfoTab::GetByInxName(v140);
      if ( v141 )
      {
        v142 = Skill::GetLastCoolTime(*v141) * 1000.0;
        kSize = (tagSIZE)(signed __int64)v142;
        if ( (unsigned int)(signed __int64)v142 )
        {
          v143 = v127->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          kSize.cy = (int)v127->m_apkTextWin[*iIndex];
          GetLastCoolTimeStr((signed __int64)v142);
          TextData::Get(0x3C4F342Cu);
          v144 = fs("%s: %s");
          v143[118].__vecDelDtor((NiRefObject *)kSize.cy, (unsigned int)v144);
          ++*iIndex;
        }
      }
    }
  }
  if ( (unsigned __int8)((int (*)(void))v159->baseclass_0.vfptr[1].__vecDelDtor)() == 24 )
  {
    v145 = v127->m_apkTextWin[*iIndex];
    v146 = v145->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0x3C2F4A36u);
    v147 = fs("%s %d");
    v146[118].__vecDelDtor((NiRefObject *)v145, (unsigned int)v147);
    ++*iIndex;
    v127 = thisa;
  }
LABEL_186:
  v148 = (const char *)(*(int (**)(void))(**((_DWORD **)&v127->m_uiTotalMoneyXPos + *iIndex) + 484))();
  if ( v148 && *iIndex > 0 )
  {
    if ( strcmp(v148, " ") )
      ((void (__stdcall *)(_DWORD))v127->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  }
}
// 52FFF0: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (00531510) --------------------------------------------------------
void __thiscall ItemInfoWin::SetBasicItemInfo(ItemInfoWin *this, int iItemID, int iItemUpgrade, int iLot, int *rkIndex, Item *pkItem)
{
  int v6; // edi@0
  ItemInfoWin *v7; // esi@1
  int v8; // ST14_4@2
  int v9; // ebx@2
  unsigned __int16 v10; // di@2
  ItemInfo *v11; // ebx@3
  int v12; // edx@6
  int v13; // edx@13
  int v14; // edi@18
  const char *v15; // eax@18
  ItemInfoWin::sNameContentsParameter Parameter; // [sp+4h] [bp-18h]@18
  int iIndex; // [sp+18h] [bp-4h]@2
  int pkViewInfo; // [sp+24h] [bp+8h]@9
  ItemViewInfo *pkViewInfoa; // [sp+24h] [bp+8h]@10

  v7 = this;
  if ( *rkIndex < 80 )
  {
    v8 = v6;
    iIndex = 0;
    User::GetMainCharClass(&g_kUser);
    v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v10 = iItemID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            iItemID,
                            v8) )
    {
      if ( (unsigned __int16)iItemID <= *(_WORD *)(v9 + 200) )
      {
        v12 = *(_DWORD *)(v9 + 196);
        v11 = (ItemInfo *)(*(_DWORD *)(v12 + 4 * (unsigned __int16)iItemID) ? *(_DWORD *)(v12
                                                                                        + 4 * (unsigned __int16)iItemID) : 0);
      }
      else
      {
        v11 = 0;
      }
    }
    else
    {
      v11 = 0;
    }
    pkViewInfo = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 16))() )
    {
      if ( v10 <= *(_WORD *)(pkViewInfo + 200) )
      {
        v13 = *(_DWORD *)(pkViewInfo + 196);
        pkViewInfoa = (ItemViewInfo *)(*(_DWORD *)(v13 + 4 * v10) ? *(_DWORD *)(v13 + 4 * v10) : 0);
      }
      else
      {
        pkViewInfoa = 0;
      }
    }
    else
    {
      pkViewInfoa = 0;
    }
    v7->m_pkItem = 0;
    v7->m_pkItemInfo = 0;
    if ( v11 )
    {
      if ( pkViewInfoa )
      {
        Parameter.bNPCShop = 0;
        Parameter.pkViewInfo = pkViewInfoa;
        Parameter.iItemUpgrade = iItemUpgrade;
        Parameter.pkInfo = v11;
        Parameter.pkItem = pkItem;
        ItemInfoWin::InsertNameContents(v7, &Parameter, &iIndex);
        ItemInfoWin::InsertWeaponTitleContents(v7, pkItem, &iIndex);
        ItemInfoWin::InsertDescriptContents(v7, pkViewInfoa, iItemUpgrade, pkItem, &iIndex, iLot);
        ItemInfoWin::InsertItemEffectContents(v7, v11, &iIndex);
        ItemInfoWin::InsertSetItemContents(v7, v11, &iIndex);
        ItemInfoWin::InsertSocketInfoContents(v7, pkItem, &iIndex);
        ItemInfoWin::InsertRandomOptCntContents(v7, pkItem, &iIndex);
        ItemInfoWin::InsertItemMixContents(v7, pkItem, &iIndex);
        v14 = iIndex;
        v15 = (const char *)(*(int (**)(void))(**((_DWORD **)&v7->m_uiTotalMoneyXPos + iIndex) + 484))();
        if ( v15 && v14 > 0 )
        {
          if ( !strcmp(v15, " ") )
            (*(void (__stdcall **)(_UNKNOWN *))(**((_DWORD **)&v7->m_uiTotalMoneyXPos + v14--) + 472))(&unk_99A526);
        }
        *rkIndex = v14;
      }
    }
  }
}
// 531510: could not find valid save-restore pair for edi
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (005316E0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetItemInfo(ItemInfoWin *this, Item *pkItem)
{
  ItemInfoWin *v2; // ebx@1
  int v3; // esi@1
  signed int v4; // edi@1
  Item *v5; // esi@3
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@4
  Item *v7; // ecx@4
  bool v8; // zf@4
  NiRefObjectVtbl *v9; // eax@4
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // edx@5
  int v11; // eax@7
  int v12; // edi@7
  int v13; // ebx@7
  int v14; // eax@7
  NiRefObjectVtbl *v15; // eax@8
  ItemInfoWin *thisa; // [sp+Ch] [bp-4h]@1

  v2 = this;
  thisa = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v3 = (int)v2->m_apkTextWin;
  v4 = 80;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 472))(&unk_99A527);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 468))(&Color::m_kDxWhiteColor);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  v5 = pkItem;
  if ( pkItem )
  {
    v6 = pkItem->baseclass_0.vfptr[1].__vecDelDtor;
    v7 = pkItem;
    pkItem = 0;
    v8 = ((int (__thiscall *)(_DWORD))v6)(v7) == 23;
    v9 = v5->baseclass_0.vfptr;
    if ( v8 )
      v10 = v9[10].__vecDelDtor;
    else
      v10 = v9[9].__vecDelDtor;
    v11 = ((int (__thiscall *)(_DWORD))v10)(v5);
    v12 = v5->m_kStruct.itemid;
    v13 = v11;
    v14 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[3].__vecDelDtor)(v5);
    ItemInfoWin::SetBasicItemInfo(thisa, v12, v13, v14, (int *)&pkItem, v5);
    v2 = thisa;
  }
  v15 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v2->m_pkItem = v5;
  v2->m_pkItemInfo = v5->m_pkInfo;
  ((void (__thiscall *)(_DWORD))v15[109].__vecDelDtor)(v2);
}

//----- (005317A0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetRepurchaseInfo(ItemInfoWin *this, Item *pkItem)
{
  ItemInfoWin *v2; // edi@1
  int v3; // esi@1
  signed int v4; // ebx@1
  Item *v5; // esi@3
  int v6; // ebx@4
  int v7; // edx@4
  int v8; // ebx@5
  int v9; // eax@8
  int (__stdcall *v10)(_DWORD); // eax@11
  int v11; // eax@15
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@20
  int v13; // eax@20
  unsigned int v14; // ST08_4@20
  int v15; // eax@20
  PgFrameWork *v16; // eax@20
  ItemInfoWin::sNameContentsParameter Parameter; // [sp+Ch] [bp-18h]@20
  int pkViewInfo; // [sp+20h] [bp-4h]@11

  v2 = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v3 = (int)v2->m_apkTextWin;
  v4 = 80;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v3 + 472))(&unk_99A54F);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v3 + 468))(&Color::m_kDxWhiteColor);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  v5 = pkItem;
  if ( pkItem )
  {
    v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v7 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    pkItem = (Item *)pkItem->m_kStruct.itemid;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, Item *))(v7 + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            pkItem) )
    {
      if ( (unsigned __int16)pkItem <= *(_WORD *)(v6 + 200) )
      {
        v9 = *(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)pkItem;
        if ( *(_DWORD *)v9 )
          v8 = *(_DWORD *)v9;
        else
          v8 = 0;
      }
      else
      {
        v8 = 0;
      }
    }
    else
    {
      v8 = 0;
    }
    v10 = *(int (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 16);
    pkViewInfo = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)v10(pkItem) )
    {
      if ( (unsigned __int16)pkItem <= *(_WORD *)(pkViewInfo + 200) )
      {
        v11 = *(_DWORD *)(pkViewInfo + 196) + 4 * (unsigned __int16)pkItem;
        if ( *(_DWORD *)v11 )
          pkViewInfo = *(_DWORD *)v11;
        else
          pkViewInfo = 0;
      }
      else
      {
        pkViewInfo = 0;
      }
    }
    else
    {
      pkViewInfo = 0;
    }
    if ( v8 && pkViewInfo )
    {
      v2->m_pkItem = v5;
      v2->m_pkItemInfo = (ItemInfo *)v8;
      pkItem = 0;
      User::GetMainCharClass(&g_kUser);
      v12 = v5->baseclass_0.vfptr[9].__vecDelDtor;
      Parameter.pkViewInfo = (ItemViewInfo *)pkViewInfo;
      Parameter.bNPCShop = 0;
      Parameter.pkInfo = (ItemInfo *)v8;
      Parameter.iItemUpgrade = ((int (__thiscall *)(Item *))v12)(v5);
      Parameter.pkItem = v5;
      ItemInfoWin::InsertNameContents(v2, &Parameter, (int *)&pkItem);
      ItemInfoWin::InsertWeaponTitleContents(v2, v5, (int *)&pkItem);
      v13 = ((int (__thiscall *)(Item *))v5->baseclass_0.vfptr[3].__vecDelDtor)(v5);
      ItemInfoWin::InsertDescriptContents(v2, (ItemViewInfo *)pkViewInfo, 0, v5, (int *)&pkItem, v13);
      ItemInfoWin::InsertItemEffectContents(v2, (ItemInfo *)v8, (int *)&pkItem);
      ItemInfoWin::InsertSetItemContents(v2, (ItemInfo *)v8, (int *)&pkItem);
      ItemInfoWin::InsertRandomOptCntContents(v2, v5, (int *)&pkItem);
      ItemInfoWin::InsertItemMixContents(v2, v5, (int *)&pkItem);
      v14 = *(_DWORD *)(v8 + 215);
      v15 = ((int (__thiscall *)(Item *))v5->baseclass_0.vfptr[3].__vecDelDtor)(v5);
      ItemInfoWin::InsertMoneyContents(v2, (ItemInfo *)v8, v15, v14, (int *)&pkItem, SellState_NPC_Repurchase);
      v2->m_pkItem = 0;
      v16 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v16 )
        EnchantGemToolTipWin::Clear((EnchantGemToolTipWin *)v16[27].m_kMsgQ.m_uiTail);
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (005319A0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetNPCItemSellInfo(ItemInfoWin *this, int iItemID, int iItemUpgrade, int iLot, int *rkIndex, __int64 i64Money)
{
  int v6; // ebx@0
  bool v7; // sf@1
  unsigned __int8 v8; // of@1
  ItemInfoWin *v9; // edi@1
  int v10; // ebx@2
  int v11; // ebx@3
  int v12; // edx@6
  int (*v13)(void); // edx@9
  ItemViewInfo *v14; // esi@10
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // edx@13
  ItemViewInfo *v16; // eax@18
  ActiveSkillInfo *v17; // esi@20
  int v18; // esi@22
  char *v19; // eax@22
  char *v20; // eax@22
  char v21; // al@22
  int v22; // esi@24
  PROTO_NC_CHAR_BASE_CMD *v23; // eax@29
  char *v24; // eax@32
  CClientGuild *v25; // eax@35
  char *v26; // eax@39
  char *v27; // eax@39
  char *v28; // eax@45
  char *v29; // eax@45
  D3DXCOLOR *v30; // [sp-Ch] [bp-144h]@30
  D3DXCOLOR *v31; // [sp-Ch] [bp-144h]@37
  D3DXCOLOR *v32; // [sp-Ch] [bp-144h]@43
  int v33; // [sp-8h] [bp-140h]@9
  int v34; // [sp-4h] [bp-13Ch]@2
  ItemInfoWin::sNameContentsParameter Parameter; // [sp+4h] [bp-134h]@20
  int *v36; // [sp+18h] [bp-120h]@1
  __int64 kWhoEquip; // [sp+1Ch] [bp-11Ch]@22
  int v38; // [sp+24h] [bp-114h]@1
  NiRefObjectVtbl *v39; // [sp+28h] [bp-110h]@9
  int iIndex; // [sp+2Ch] [bp-10Ch]@2
  char bItemMoney; // [sp+33h] [bp-105h]@18
  char acstr[256]; // [sp+34h] [bp-104h]@22
  unsigned int v43; // [sp+134h] [bp-4h]@1
  int v44; // [sp+138h] [bp+0h]@1

  v43 = (unsigned int)&v44 ^ __security_cookie;
  v38 = iLot;
  v8 = __OFSUB__(*rkIndex, 80);
  v7 = *rkIndex - 80 < 0;
  v9 = this;
  v36 = rkIndex;
  if ( !(v7 ^ v8)
    || ((v34 = v6,
         iIndex = 0,
         User::GetMainCharClass(&g_kUser),
         v10 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
         (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            iItemID)) ? ((unsigned __int16)iItemID <= *(_WORD *)(v10 + 200) ? ((v12 = *(_DWORD *)(v10 + 196),
                                                                                                *(_DWORD *)(v12 + 4 * (unsigned __int16)iItemID)) ? (v11 = *(_DWORD *)(v12 + 4 * (unsigned __int16)iItemID)) : (v11 = 0)) : (v11 = 0)) : (v11 = 0),
        (v13 = *(int (**)(void))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 16),
         v33 = iItemID,
         v39 = (NiRefObjectVtbl *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
         (unsigned __int8)v13()) ? ((unsigned __int16)iItemID <= LOWORD(v39[50].__vecDelDtor) ? ((v15 = v39[49].__vecDelDtor,
                                                                                                  *((_DWORD *)v15
                                                                                                  + (unsigned __int16)iItemID)) ? (v14 = (ItemViewInfo *)*((_DWORD *)v15 + (unsigned __int16)iItemID)) : (v14 = 0)) : (v14 = 0)) : (v14 = 0),
        (v9->m_pkItem = 0, v9->m_pkItemInfo = 0, !v11) || !v14) )
    return;
  v16 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(iItemID, 1);
  bItemMoney = 0;
  if ( ItemMoneyTab::GetByInxName(v16->InxName) )
    bItemMoney = 1;
  Parameter.iItemUpgrade = iItemUpgrade;
  Parameter.pkItem = 0;
  Parameter.pkInfo = (ItemInfo *)v11;
  Parameter.pkViewInfo = v14;
  Parameter.bNPCShop = 1;
  ItemInfoWin::InsertNameContents(v9, &Parameter, &iIndex);
  ItemInfoWin::InsertDescriptContents(v9, v14, 0, 0, &iIndex, v38);
  ItemInfoWin::InsertItemEffectContents(v9, (ItemInfo *)v11, &iIndex);
  ItemInfoWin::InsertSetItemContents(v9, (ItemInfo *)v11, &iIndex);
  v17 = ActSkillInfoTab::GetByInxName((char *)(v11 + 2));
  if ( v17 && ActSkillViewInfoTab::GetByInxName((char *)(v11 + 2)) )
  {
    kWhoEquip = CharClass::GetBitbyClassType(v17->UseClass);
    CharClass::GetEquipableClassSortStr(kWhoEquip, acstr, 0x100u);
    v18 = iIndex;
    v39 = v9->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = TextData::Get(0x9FF5FBECu);
    v20 = fs(v19);
    ((void (__thiscall *)(PgWinText *, char *, int))v39[118].__vecDelDtor)(v9->m_apkTextWin[v18], v20, iItemID);
    v21 = User::GetMainCharClass(&g_kUser);
    if ( !CharClass::TestChrClassMask(kWhoEquip, (unsigned __int8)v21) )
      ((void (__stdcall *)(D3DXCOLOR *))v9->m_apkTextWin[v18]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    ((void (__cdecl *)(_DWORD))v9->m_apkTextWin[v18 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    v22 = v18 + 2;
    iIndex = v22;
  }
  else
  {
    v22 = iIndex;
  }
  if ( *(_DWORD *)(v11 + 220) )
  {
    if ( *(_DWORD *)(v11 + 224) )
    {
LABEL_34:
      if ( !bItemMoney )
      {
        v25 = GuildTask::GetGuild();
        if ( v25 )
        {
          if ( LODWORD(v25->m_iGuildToken) <= *(_DWORD *)(v11 + 224) )
            v31 = &Color::m_kDxRedColor;
          else
            v31 = &Color::m_kDxWhiteColor;
          ((void (__stdcall *)(D3DXCOLOR *))v9->m_apkTextWin[v22]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v31);
          v39 = v9->m_apkTextWin[v22]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v26 = TextData2::Get(0x4F472D2Fu);
          v27 = fs(v26);
          v39[118].__vecDelDtor((NiRefObject *)v9->m_apkTextWin[v22], (unsigned int)v27);
          ((void (__stdcall *)(_DWORD))v9->m_apkTextWin[v22 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
          v22 += 2;
          iIndex = v22;
        }
      }
      goto LABEL_40;
    }
    if ( !bItemMoney )
    {
      v23 = User::GetMainCharBaseData(&g_kUser);
      if ( v38 * *(_DWORD *)(v11 + 220) >= v23->fame )
        v30 = &Color::m_kDxRedColor;
      else
        v30 = &Color::m_kDxWhiteColor;
      ((void (__stdcall *)(D3DXCOLOR *))v9->m_apkTextWin[v22]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v30);
      v39 = v9->m_apkTextWin[v22]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      TextData::Get(0xD4E9322Au);
      v24 = fs("%s: %d");
      v39[118].__vecDelDtor((NiRefObject *)v9->m_apkTextWin[v22], (unsigned int)v24);
      ((void (__stdcall *)(_DWORD))v9->m_apkTextWin[v22 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
      v22 += 2;
      iIndex = v22;
    }
  }
  if ( *(_DWORD *)(v11 + 224) )
    goto LABEL_34;
LABEL_40:
  if ( *(_DWORD *)(v11 + 228) && !bItemMoney )
  {
    if ( *(_DWORD *)(v11 + 228) >= User::Coin(&g_kUser) )
      v32 = &Color::m_kDxRedColor;
    else
      v32 = &Color::m_kDxWhiteColor;
    ((void (__stdcall *)(D3DXCOLOR *, int, int))v9->m_apkTextWin[v22]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
      v32,
      v33,
      v34);
    acstr[0] = 0;
    memset(&acstr[1], 0, 0xFFu);
    v28 = TextData2::Get(0x7A9898DEu);
    sprintf(acstr, v28);
    v39 = v9->m_apkTextWin[v22]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData2::Get(0xD75E3C3Eu);
    v29 = fs("%s %d %s");
    v39[118].__vecDelDtor((NiRefObject *)v9->m_apkTextWin[v22], (unsigned int)v29);
    ((void (__stdcall *)(_DWORD))v9->m_apkTextWin[v22 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    User::Coin(&g_kUser);
    LODWORD(kWhoEquip) = v38 * *(_DWORD *)(v11 + 228);
    ((void (*)(void))v9->m_apkTextWin[v22 + 2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
    v39 = v9->m_apkTextWin[v22 + 2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData2::Get(0xD75E3C3Eu);
    TextData::Get(0x9EB2A8F8u);
    fs("%s %d %s");
    ((void (__thiscall *)(PgWinText *))v39[118].__vecDelDtor)(v9->m_apkTextWin[v22 + 2]);
    ((void (__stdcall *)(_DWORD))v9->m_apkTextWin[v22 + 3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    v22 += 4;
    iIndex = v22;
  }
  if ( !*(_DWORD *)(v11 + 224) )
  {
    ItemInfoWin::InsertMoneyContents(v9, (ItemInfo *)v11, v38, i64Money, &iIndex, SellState_NPC_Sell);
    v22 = iIndex;
  }
  *v36 = v22;
}
// 5319A0: could not find valid save-restore pair for ebx
// 5319A0: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00531FB0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetPrivateStoreItemInfo(ItemInfoWin *this, int iItemID, int iItemUpgrade, int iLot, int *rkIndex, __int64 i64Money, Item *pkItem, bool bSellMode)
{
  int v8; // edi@0
  ItemInfoWin *v9; // esi@1
  int v10; // ST18_4@2
  int v11; // ebx@2
  unsigned __int16 v12; // di@2
  ItemInfo *v13; // ebx@3
  int v14; // edx@6
  int v15; // edx@13
  ItemInfoWin::sNameContentsParameter Parameter; // [sp+4h] [bp-18h]@18
  int iIndex; // [sp+18h] [bp-4h]@2
  int pkViewInfo; // [sp+24h] [bp+8h]@9
  ItemViewInfo *pkViewInfoa; // [sp+24h] [bp+8h]@10

  v9 = this;
  if ( *rkIndex < 80 )
  {
    v10 = v8;
    iIndex = 0;
    User::GetMainCharClass(&g_kUser);
    v11 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v12 = iItemID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            iItemID,
                            v10) )
    {
      if ( (unsigned __int16)iItemID <= *(_WORD *)(v11 + 200) )
      {
        v14 = *(_DWORD *)(v11 + 196);
        if ( *(_DWORD *)(v14 + 4 * (unsigned __int16)iItemID) )
          v13 = *(ItemInfo **)(v14 + 4 * (unsigned __int16)iItemID);
        else
          v13 = 0;
      }
      else
      {
        v13 = 0;
      }
    }
    else
    {
      v13 = 0;
    }
    pkViewInfo = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 16))() )
    {
      if ( v12 <= *(_WORD *)(pkViewInfo + 200) )
      {
        v15 = *(_DWORD *)(pkViewInfo + 196);
        if ( *(_DWORD *)(v15 + 4 * v12) )
          pkViewInfoa = *(ItemViewInfo **)(v15 + 4 * v12);
        else
          pkViewInfoa = 0;
      }
      else
      {
        pkViewInfoa = 0;
      }
    }
    else
    {
      pkViewInfoa = 0;
    }
    if ( v13 )
    {
      if ( pkViewInfoa )
      {
        Parameter.pkViewInfo = pkViewInfoa;
        Parameter.iItemUpgrade = iItemUpgrade;
        Parameter.bNPCShop = 0;
        Parameter.pkInfo = v13;
        Parameter.pkItem = pkItem;
        ItemInfoWin::InsertNameContents(v9, &Parameter, &iIndex);
        ItemInfoWin::InsertWeaponTitleContents(v9, pkItem, &iIndex);
        ItemInfoWin::InsertDescriptContents(v9, pkViewInfoa, iItemUpgrade, pkItem, &iIndex, iLot);
        ItemInfoWin::InsertItemEffectContents(v9, v13, &iIndex);
        ItemInfoWin::InsertSetItemContents(v9, v13, &iIndex);
        ItemInfoWin::InsertRandomOptCntContents(v9, pkItem, &iIndex);
        ItemInfoWin::InsertItemMixContents(v9, pkItem, &iIndex);
        ItemInfoWin::InsertMoneyContents(v9, v13, iLot, i64Money, &iIndex, (ItemInfoWin::eSellState)(bSellMode != 0));
        *rkIndex = iIndex;
      }
    }
  }
}
// 531FB0: could not find valid save-restore pair for edi
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00532130) --------------------------------------------------------
void __thiscall ItemInfoWin::SetBuyInfo(ItemInfoWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkSellInfo)
{
  ItemInfoWin *v2; // esi@1
  int v3; // esi@1
  signed int v4; // edi@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v5; // ebx@3
  int v6; // esi@4
  int v7; // edi@4
  int v8; // esi@5
  int v9; // ecx@8
  __int64 v10; // ST10_8@12
  int v11; // ST08_4@12
  int v12; // ST00_4@12
  PgFrameWork *v13; // eax@13
  ItemInfoWin *thisa; // [sp+Ch] [bp-4h]@1

  v2 = this;
  thisa = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v3 = (int)v2->m_apkTextWin;
  v4 = 80;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v3 + 472))(&unk_99A543);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v3 + 468))(&Color::m_kDxWhiteColor);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  v5 = pkSellInfo;
  if ( pkSellInfo )
  {
    v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v7 = pkSellInfo->item;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            pkSellInfo->item) )
    {
      if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) )
      {
        v9 = *(_DWORD *)(v6 + 196);
        if ( *(_DWORD *)(v9 + 4 * v7) )
          v8 = *(_DWORD *)(v9 + 4 * v7);
        else
          v8 = 0;
      }
      else
      {
        v8 = 0;
      }
    }
    else
    {
      v8 = 0;
    }
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 16))(v5->item);
    if ( v8 )
    {
      v10 = *(_DWORD *)(v8 + 211);
      v11 = *(_DWORD *)(v8 + 106);
      v12 = v5->item;
      pkSellInfo = 0;
      ItemInfoWin::SetNPCItemSellInfo(thisa, v12, 0, v11, (int *)&pkSellInfo, v10);
    }
    thisa->m_pkItem = 0;
    v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v13 )
      EnchantGemToolTipWin::Clear((EnchantGemToolTipWin *)v13[27].m_kMsgQ.m_uiTail);
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00532230) --------------------------------------------------------
void __thiscall ItemInfoWin::SetPrivateStoreSellInfo(ItemInfoWin *this, Item *pkItem, __int64 i64SellMoney, bool bMyInven)
{
  ItemInfoWin *v4; // ebx@1
  int v5; // esi@1
  signed int v6; // edi@1
  Item *v7; // esi@3
  ItemInfo *v8; // edi@4
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // edx@5
  int v10; // ebx@5
  int v11; // eax@5
  ItemInfoWin *thisa; // [sp+Ch] [bp-4h]@1

  v4 = this;
  thisa = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v5 = (int)v4->m_apkTextWin;
  v6 = 80;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 472))(&unk_99A54E);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 468))(&Color::m_kDxWhiteColor);
    v5 += 4;
    --v6;
  }
  while ( v6 );
  v7 = pkItem;
  if ( pkItem )
  {
    v8 = pkItem->m_pkInfo;
    v4->m_pkItem = pkItem;
    v4->m_pkItemInfo = v8;
    if ( v8 )
    {
      v9 = v7->baseclass_0.vfptr[3].__vecDelDtor;
      pkItem = 0;
      v10 = ((int (__thiscall *)(_DWORD))v9)(v7);
      v11 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.vfptr[9].__vecDelDtor)(v7);
      if ( v8->Class == 23 )
      {
        v10 = 1;
        v11 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.vfptr[10].__vecDelDtor)(v7);
      }
      ItemInfoWin::SetPrivateStoreItemInfo(thisa, v7->m_kStruct.itemid, v11, v10, (int *)&pkItem, i64SellMoney, v7, 1);
    }
  }
}

//----- (005322F0) --------------------------------------------------------
void __thiscall ItemInfoWin::SetPrivateStoreBuyInfo(ItemInfoWin *this, Item *pkItem, __int64 i64SellMoney, unsigned int uiLot, bool bMyInven)
{
  ItemInfoWin *v5; // ebx@1
  int v6; // esi@1
  signed int v7; // edi@1
  Item *v8; // ecx@3
  ItemInfo *v9; // eax@4
  int v10; // esi@5
  Item *v11; // ST18_4@5
  __int64 v12; // ST10_8@5
  int v13; // ST08_4@5
  int (*v14)(void); // edx@5
  int v15; // eax@5

  v5 = this;
  ItemInfoWin::HideAllMoneyWin(this);
  v6 = (int)v5->m_apkTextWin;
  v7 = 80;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 472))(&unk_99A571);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 468))(&Color::m_kDxWhiteColor);
    v6 += 4;
    --v7;
  }
  while ( v7 );
  v8 = pkItem;
  if ( pkItem )
  {
    v9 = pkItem->m_pkInfo;
    v5->m_pkItem = pkItem;
    v5->m_pkItemInfo = v9;
    if ( v9 )
    {
      v10 = v8->m_kStruct.itemid;
      v11 = v8;
      v12 = i64SellMoney;
      v13 = uiLot;
      v14 = (int (*)(void))v8->baseclass_0.vfptr[9].__vecDelDtor;
      pkItem = 0;
      v15 = v14();
      ItemInfoWin::SetPrivateStoreItemInfo(v5, v10, v15, v13, (int *)&pkItem, v12, v11, 0);
    }
  }
}

//----- (00532390) --------------------------------------------------------
void __thiscall ItemInfoWin::SetSellInfo(ItemInfoWin *this, Item *pkItem, bool bMyInven)
{
  if ( pkItem )
    ItemInfoWin::SetPrivateStoreSellInfo(this, pkItem, pkItem->m_pkInfo->SellPrice, bMyInven);
}

//----- (005323C0) --------------------------------------------------------
UpGradeInfo *__cdecl IIDTableBase<UpGradeInfo_UpGradeInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  UpGradeInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<UpGradeInfo_UpGradeInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(UpGradeInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F34: using guessed type int ITableBase_UpGradeInfo_UpGradeInfoTab___ms_pkTable;

//----- (00532410) --------------------------------------------------------
BRAccUpgradeInfo *__cdecl IIDTableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  BRAccUpgradeInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<BRAccUpgradeInfo_BRAccUpgradeInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(BRAccUpgradeInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F50: using guessed type int ITableBase_BRAccUpgradeInfo_BRAccUpgradeInfoTab___ms_pkTable;

//----- (00532460) --------------------------------------------------------
unsigned int __cdecl ITableBase<ItemMoney_ItemMoneyTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E00: using guessed type int ITableBase_ItemMoney_ItemMoneyTab___ms_pkTable;

//----- (00532480) --------------------------------------------------------
unsigned int __cdecl ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (005324A0) --------------------------------------------------------
unsigned int __cdecl ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (005324C0) --------------------------------------------------------
void *__thiscall ItemInfoWin::_scalar_deleting_destructor_(ItemInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemInfoWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99AA10: using guessed type int (__stdcall *ItemInfoWin___vftable_)(int uiFlags);
// 99AA2C: using guessed type int (__thiscall *ItemInfoWin___vftable_)(void *p, char);

//----- (00532500) --------------------------------------------------------
unsigned int __cdecl ITableBase<ItemInfo_ItemInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00532520) --------------------------------------------------------
unsigned int __cdecl ITableBase<GradeItemOption_GradeItemOptionTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E3C: using guessed type int ITableBase_GradeItemOption_GradeItemOptionTab___ms_pkTable;

//----- (00532540) --------------------------------------------------------
unsigned int __cdecl ITableBase<MiniHouse_MiniHouseTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E40: using guessed type int ITableBase_MiniHouse_MiniHouseTable___ms_pkTable;

//----- (00532560) --------------------------------------------------------
unsigned int __cdecl ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (00532580) --------------------------------------------------------
unsigned int __cdecl ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E34: using guessed type int ITableBase_ProduceViewInfo_ProduceViewInfoTable___ms_pkTable;

//----- (005325A0) --------------------------------------------------------
unsigned int __cdecl ITableBase<SetItemName_SetItemNameTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<SetItemName_SetItemNameTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E58: using guessed type int ITableBase_SetItemName_SetItemNameTab___ms_pkTable;

//----- (005325C0) --------------------------------------------------------
char *__cdecl WeaponTitleTab::GetWeaponTitleString(unsigned __int16 MobID, unsigned int MobKillCount, unsigned __int16 wepID)
{
  int v3; // esi@1
  int v4; // edx@3
  int v5; // eax@4
  WEAPON_TITLE_DATA *v6; // esi@5
  WEAPON_TITLE_DATA *v7; // eax@6
  unsigned int v8; // ecx@6
  unsigned int v9; // edx@7
  int v10; // edi@13
  int v11; // eax@15
  unsigned int v12; // eax@18
  char *v13; // eax@23
  char *result; // eax@23
  char *v15; // eax@24
  unsigned int dwLevel; // [sp+10h] [bp-30h]@5
  unsigned int dwRatio; // [sp+14h] [bp-2Ch]@8
  void *pcMobName; // [sp+18h] [bp-28h]@5
  char acRatio[32]; // [sp+1Ch] [bp-24h]@19
  unsigned int v20; // [sp+3Ch] [bp-4h]@1
  int v21; // [sp+40h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v3 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          MobID)
    && MobID <= *(_WORD *)(v3 + 200)
    && (v4 = *(_DWORD *)(v3 + 196), *(_DWORD *)(v4 + 4 * MobID))
    && (v5 = *(_DWORD *)(v4 + 4 * MobID)) != 0
    && (pcMobName = (void *)(v5 + 34),
        (v6 = CWeaponTitle::GetLevelData(&WeaponTitleTab::ms_kTab, MobID, MobKillCount, &dwLevel)) != 0)
    && ((v7 = CWeaponTitle::GetPrevLevelData(&WeaponTitleTab::ms_kTab, MobID, dwLevel), v8 = v6->MobKillCount, !v7) ? (!v8 ? (dwRatio = 100 * MobKillCount) : (dwRatio = 100 * MobKillCount / v8)) : (v9 = v7->MobKillCount, v8 != v9) ? (dwRatio = 100 * (MobKillCount - v9) / (v8 - v9)) : (dwRatio = 100 * (MobKillCount - v9) / v8),
        (v10 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
         (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            wepID))
     && wepID <= *(_WORD *)(v10 + 200)
     && (v11 = *(_DWORD *)(v10 + 196) + 4 * wepID, *(_DWORD *)v11)
     && *(_DWORD *)v11) )
  {
    if ( dwLevel < 9 && (v12 = CWeaponTitle::GetMaxLevel(&WeaponTitleTab::ms_kTab, MobID), v12 > dwLevel) )
    {
      sprintf(acRatio, "%d%%");
    }
    else
    {
      TextData::Get(0xA6A3EDF0u);
      sprintf(acRatio, "%s");
    }
    if ( v6->MinAdd )
    {
      if ( v6->Prefix[0] )
      {
        v15 = TextData::Get(0x2C424C4Du);
        result = fs(v15);
      }
      else
      {
        v13 = TextData::Get(0x2B424C4Du);
        result = fs(v13);
      }
    }
    else
    {
      if ( v6->Prefix[0] )
        result = fs("%s %s %s %s: %s");
      else
        result = fs("%s %s %s: %s");
    }
  }
  else
  {
    result = &byte_9788EB;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00532840) --------------------------------------------------------
GradeItemOption *__cdecl GradeItemOptionTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  GradeItemOption *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<GradeItemOption_GradeItemOptionTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable + 4),
                                v1),
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<GradeItemOption_GradeItemOptionTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (GradeItemOption *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<GradeItemOption_GradeItemOptionTab>::ms_pkTable + 4),
                                    v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E3C: using guessed type int ITableBase_GradeItemOption_GradeItemOptionTab___ms_pkTable;

//----- (005328D0) --------------------------------------------------------
MiniHouse *__cdecl MiniHouseTable::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  MiniHouse *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<MiniHouse_MiniHouseTable>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 4),
                                v1)
              + 2,
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<MiniHouse_MiniHouseTable>::GetTotal() )
          goto LABEL_6;
      }
      result = (MiniHouse *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 4),
                              v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E40: using guessed type int ITableBase_MiniHouse_MiniHouseTable___ms_pkTable;

//----- (00532960) --------------------------------------------------------
ProduceInfo *__cdecl ProduceInfoTable::GetByID(unsigned __int16 kSkillID)
{
  ProduceInfo *result; // eax@2
  unsigned int v2; // esi@3

  if ( kSkillID == -1 )
  {
    result = 0;
  }
  else
  {
    v2 = 0;
    if ( ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
    {
      while ( 1 )
      {
        result = (ProduceInfo *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4),
                                  v2);
        if ( result->ProductID == kSkillID )
          break;
        ++v2;
        if ( v2 >= ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
          goto LABEL_6;
      }
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  return result;
}
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (005329B0) --------------------------------------------------------
ProduceInfo *__cdecl ProduceInfoTable::GetByNeedMasteryGain(char *pcName)
{
  ProduceInfo *result; // eax@2
  unsigned int v2; // esi@3

  if ( pcName )
  {
    v2 = 0;
    if ( ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
    {
      while ( 1 )
      {
        result = (ProduceInfo *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4),
                                  v2);
        if ( result )
        {
          if ( !strcmp(result->ProduceIndex, pcName) )
            break;
        }
        ++v2;
        if ( v2 >= ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
          goto LABEL_7;
      }
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (00532A30) --------------------------------------------------------
ProduceViewInfo *__cdecl ProduceViewInfoTable::GetByMasteryType(TotalMasteryType eType)
{
  unsigned int v1; // esi@1
  ProduceViewInfo *result; // eax@2

  v1 = 0;
  if ( ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
  {
    while ( 1 )
    {
      result = (ProduceViewInfo *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 4),
                                    v1);
      if ( result->MasteryType == eType )
        break;
      ++v1;
      if ( v1 >= ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97E34: using guessed type int ITableBase_ProduceViewInfo_ProduceViewInfoTable___ms_pkTable;

//----- (00532A70) --------------------------------------------------------
SetItemName *__cdecl SetItemNameTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  SetItemName *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<SetItemName_SetItemNameTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<SetItemName_SetItemNameTab>::ms_pkTable + 4),
                                v1),
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<SetItemName_SetItemNameTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (SetItemName *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<SetItemName_SetItemNameTab>::ms_pkTable + 4),
                                v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E58: using guessed type int ITableBase_SetItemName_SetItemNameTab___ms_pkTable;

//----- (00532B00) --------------------------------------------------------
unsigned int __cdecl SetEffectTab::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<SetEffect_SetEffectTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E60: using guessed type int ITableBase_SetEffect_SetEffectTab___ms_pkTable;

//----- (00532B20) --------------------------------------------------------
ItemMoney *__cdecl ItemMoneyTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  ItemMoney *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<ItemMoney_ItemMoneyTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 4),
                                v1),
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<ItemMoney_ItemMoneyTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (ItemMoney *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 4),
                              v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E00: using guessed type int ITableBase_ItemMoney_ItemMoneyTab___ms_pkTable;

//----- (00532BB0) --------------------------------------------------------
AbnormalStateViewInfo *__cdecl AbnormalStateViewInfoTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  AbnormalStateViewInfo *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                              + 4),
                                v1)
              + 2,
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (AbnormalStateViewInfo *)CDataReader::GetRecord(
                                          (CDataReader *)(ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                        + 4),
                                          v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (00532C40) --------------------------------------------------------
ActiveSkillViewInfo *__cdecl ActSkillViewInfoTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  ActiveSkillViewInfo *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::GetTotal() )
    {
      while ( 1 )
      {
        CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 4), v1);
        if ( !strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 4),
                                v1)
              + 2,
                pcInxName) )
          break;
        ++v1;
        if ( v1 >= ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (ActiveSkillViewInfo *)CDataReader::GetRecord(
                                        (CDataReader *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                      + 4),
                                        v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (00532CE0) --------------------------------------------------------
ProduceInfo *__cdecl ProduceInfoTable::GetByProduct(std::basic_string<char,std::char_traits<char>,std::allocator<char> > Product)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  void *v3; // eax@5
  const char *v4; // ebx@6
  int v5; // eax@6
  int v6; // edx@6
  char v7; // cl@7
  unsigned int v8; // edi@8
  unsigned int v9; // eax@8
  unsigned int v10; // esi@8
  unsigned int v11; // ecx@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@10
  int v13; // eax@12
  ProduceInfo *pkProduceInfo; // [sp+0h] [bp-18h]@5
  unsigned int i; // [sp+4h] [bp-14h]@4
  unsigned int v17; // [sp+8h] [bp-10h]@2

  v1 = *(_DWORD *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v17 = *(_DWORD *)(v1 + 40);
  else
    v17 = 0;
  i = 0;
  if ( v17 <= 0 )
  {
LABEL_17:
    if ( Product.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&Product);
    return 0;
  }
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4), v2);
    pkProduceInfo = (ProduceInfo *)v3;
    if ( v3 )
      break;
LABEL_16:
    ++v2;
    i = v2;
    if ( v2 >= v17 )
      goto LABEL_17;
  }
  v4 = (char *)v3 + 98;
  v5 = (int)((char *)v3 + 98);
  v6 = v5 + 1;
  do
    v7 = *(_BYTE *)v5++;
  while ( v7 );
  v8 = Product.baseclass_0._Mysize;
  v9 = v5 - v6;
  v10 = v9;
  v11 = Product.baseclass_0._Mysize;
  if ( Product.baseclass_0._Mysize >= v9 )
    v11 = v9;
  v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Product;
  if ( Product.baseclass_0._Myres < 0x10 )
    v12 = &Product;
  v13 = std::char_traits<char>::compare(v12->baseclass_0.___u0.baseclass_0.dummy, v4, v11);
  if ( v13 || v8 < v10 || (LOBYTE(v13) = v8 != v10, v13) )
  {
    v2 = i;
    goto LABEL_16;
  }
  if ( Product.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&Product);
  return pkProduceInfo;
}
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (00532DF0) --------------------------------------------------------
MoverItem *__cdecl MoverItemTab::GetByItemIdx(const char *pcItemIdx)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  void *v3; // eax@5
  const char *v4; // ecx@6
  int v5; // eax@6
  int v6; // esi@6
  char v7; // dl@7
  unsigned int v8; // eax@8
  unsigned int v9; // ebx@8
  unsigned int v10; // esi@8
  unsigned int v11; // ecx@8
  unsigned int v12; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@10
  int v14; // eax@12
  bool v15; // zf@12
  signed int v16; // eax@14
  bool v17; // bl@17
  MoverItem *pkMoverItem; // [sp+0h] [bp-3Ch]@5
  unsigned int i; // [sp+8h] [bp-34h]@4
  unsigned int v21; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v23; // [sp+2Ch] [bp-10h]@1
  int v24; // [sp+38h] [bp-4h]@17
  int v25; // [sp+3Ch] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MoverItem_MoverItemTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v21 = *(_DWORD *)(v1 + 40);
  else
    v21 = 0;
  i = 0;
  if ( v21 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverItem_MoverItemTab>::ms_pkTable + 4), v2);
    pkMoverItem = (MoverItem *)v3;
    if ( v3 )
      break;
LABEL_21:
    ++v2;
    i = v2;
    if ( v2 >= v21 )
      return 0;
  }
  v4 = (char *)v3 + 32;
  v5 = (int)((char *)v3 + 32);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = v5 + 1;
  do
    v7 = *(_BYTE *)v5++;
  while ( v7 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, v4, v5 - v6);
  v8 = strlen(pcItemIdx);
  v9 = this.baseclass_0._Mysize;
  v10 = v8;
  v11 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v8 )
    v11 = v8;
  v12 = this.baseclass_0._Myres;
  v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v13 = &this;
  v14 = std::char_traits<char>::compare(v13->baseclass_0.___u0.baseclass_0.dummy, pcItemIdx, v11);
  v15 = v14 == 0;
  if ( !v14 )
  {
    if ( v9 >= v10 )
      v16 = v9 != v10;
    else
      v16 = -1;
    v15 = v16 == 0;
  }
  v17 = v15;
  v24 = -1;
  if ( v12 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v17 )
  {
    v2 = i;
    goto LABEL_21;
  }
  return pkMoverItem;
}
// A85C00: using guessed type int __security_cookie;
// A97EF4: using guessed type int ITableBase_MoverItem_MoverItemTab___ms_pkTable;

//----- (00532F50) --------------------------------------------------------
PupMain *__cdecl PetMainTab::GetByItemIdx(const char *pcItemIdx)
{
  int v1; // eax@1
  unsigned int v2; // esi@1
  void *v3; // eax@5
  const char *v4; // ecx@6
  int v5; // eax@6
  int v6; // esi@6
  char v7; // dl@7
  unsigned int v8; // eax@8
  unsigned int v9; // ebx@8
  unsigned int v10; // esi@8
  unsigned int v11; // ecx@8
  unsigned int v12; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@10
  int v14; // eax@12
  bool v15; // zf@12
  signed int v16; // eax@14
  bool v17; // bl@17
  PupMain *pkPetMain; // [sp+0h] [bp-3Ch]@5
  unsigned int i; // [sp+8h] [bp-34h]@4
  unsigned int v21; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v23; // [sp+2Ch] [bp-10h]@1
  int v24; // [sp+38h] [bp-4h]@17
  int v25; // [sp+3Ch] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v21 = *(_DWORD *)(v1 + 40);
  else
    v21 = 0;
  i = 0;
  if ( v21 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 4), v2);
    pkPetMain = (PupMain *)v3;
    if ( v3 )
      break;
LABEL_21:
    ++v2;
    i = v2;
    if ( v2 >= v21 )
      return 0;
  }
  v4 = (char *)v3 + 36;
  v5 = (int)((char *)v3 + 36);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = v5 + 1;
  do
    v7 = *(_BYTE *)v5++;
  while ( v7 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, v4, v5 - v6);
  v8 = strlen(pcItemIdx);
  v9 = this.baseclass_0._Mysize;
  v10 = v8;
  v11 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v8 )
    v11 = v8;
  v12 = this.baseclass_0._Myres;
  v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v13 = &this;
  v14 = std::char_traits<char>::compare(v13->baseclass_0.___u0.baseclass_0.dummy, pcItemIdx, v11);
  v15 = v14 == 0;
  if ( !v14 )
  {
    if ( v9 >= v10 )
      v16 = v9 != v10;
    else
      v16 = -1;
    v15 = v16 == 0;
  }
  v17 = v15;
  v24 = -1;
  if ( v12 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v17 )
  {
    v2 = i;
    goto LABEL_21;
  }
  return pkPetMain;
}
// A85C00: using guessed type int __security_cookie;
// A959F0: using guessed type int ITableBase_PupMain_PetMainTab___ms_pkTable;

//----- (005330B0) --------------------------------------------------------
void __thiscall ItemMallMenuWin::ItemMallMenuWin(ItemMallMenuWin *this)
{
  ItemMallMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemMallMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemMallMenuWin::_vftable_;
}
// 99ADB4: using guessed type int (__stdcall *ItemMallMenuWin___vftable_)(int uiFlags);
// 99ADD4: using guessed type int (__thiscall *ItemMallMenuWin___vftable_)(void *p, char);

//----- (005330D0) --------------------------------------------------------
void __thiscall ItemMallMenuWin::_ItemMallMenuWin(ItemMallMenuWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemMallMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemMallMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 99ADB4: using guessed type int (__stdcall *ItemMallMenuWin___vftable_)(int uiFlags);
// 99ADD4: using guessed type int (__thiscall *ItemMallMenuWin___vftable_)(void *p, char);

//----- (005330F0) --------------------------------------------------------
void __thiscall ItemMallMenuWin::OnCmdOpenItemMall(ItemMallMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcMiscItemShopUrlReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (00533110) --------------------------------------------------------
void __thiscall ItemMallMenuWin::OnCmdOpenUsingChargedItemList(ItemMallMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0xB9u, 0, 0);
}

//----- (00533130) --------------------------------------------------------
void __thiscall ItemMallMenuWin::OnHelpLink(ItemMallMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MallMenu");
}

//----- (00533160) --------------------------------------------------------
void __thiscall ItemMallMenuWin::OnCommand(ItemMallMenuWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // eax@4
  PgFrameWork *v5; // ecx@6

  v3 = (PgWin *)this;
  switch ( wParam )
  {
    case 5u:
      GameFrameWork::NcMiscItemShopUrlReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
      break;
    case 6u:
      v5 = this->baseclass_0.m_pkFrameWork;
      if ( v5 )
        PgFrameWork::AddMsg(v5, 0xB9u, 0, 0);
      break;
    case 7u:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "MallMenu");
      break;
  }
}

//----- (005331E0) --------------------------------------------------------
bool __thiscall ItemMallMenuWin::Create(ItemMallMenuWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // edi@13
  NiSourceTexture *v15; // edi@13
  PgSprData *v16; // edi@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // edi@21
  NiRefObjectVtbl *v20; // ST54_4@21
  char *v21; // eax@21
  PgSprData *v22; // edi@21
  NiPointer<PgSprData::PgHitTester> *v23; // edx@21
  unsigned int v24; // edi@21
  unsigned int v25; // ST54_4@21
  PgFont *v26; // eax@21
  PgWinText *v27; // edi@21
  NiRefObjectVtbl *v28; // ST54_4@21
  char *v29; // eax@21
  PgSprData *v30; // edi@21
  NiPointer<PgSprData::PgHitTester> *v31; // edx@21
  unsigned int v32; // edi@21
  unsigned int v33; // ST54_4@21
  PgFont *v34; // eax@21
  PgWinText *v35; // edi@21
  NiRefObjectVtbl *v36; // ST54_4@21
  char *v37; // eax@21
  PgSprData *v38; // edi@21
  NiPointer<PgSprData::PgHitTester> *v39; // edx@21
  unsigned int v40; // edi@21
  PgFont *v41; // eax@21
  PgWinText *v42; // edi@21
  NiRefObjectVtbl *v43; // ebx@21
  char *v44; // eax@21
  NiNode *v45; // esi@22
  const char *v46; // [sp+30h] [bp-44h]@11
  int *v47; // [sp+34h] [bp-40h]@11
  int *v48; // [sp+38h] [bp-3Ch]@11
  NiSourceTexture *v49; // [sp+3Ch] [bp-38h]@11
  unsigned int uiWidth; // [sp+54h] [bp-20h]@15
  unsigned int uiHeight; // [sp+58h] [bp-1Ch]@15
  int uiLeft; // [sp+5Ch] [bp-18h]@4
  int uiTop; // [sp+60h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+64h] [bp-10h]@1
  int v55; // [sp+70h] [bp-4h]@1
  int iYOff; // [sp+7Ch] [bp+8h]@10
  unsigned int iYOffa; // [sp+7Ch] [bp+8h]@21

  v2 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v55 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MallMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v5, 0, pkFrameWork, "ItemMallMenuWin", 0) )
  {
    v6 = spNode.m_pObject;
    v55 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v49 = v10;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  else
  {
    v49 = 0;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v46, v47, v48, v49);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0, 7u, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(0);
    v19 = PgWinText::CreateWin(uiLeft - v9, uiTop, uiWidth, uiHeight, v18, &v2->baseclass_0.baseclass_0, 0, 0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v21 = TextData::Get(0xF40ADF3Au);
    v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "Btn01Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v22, &v2->baseclass_0.baseclass_0, 5u, 0, 0);
    v23 = v22->m_akHitTester.m_pBase;
    v24 = v23->m_pObject->m_uiHeight;
    v25 = v23->m_pObject->m_uiWidth;
    v26 = Font::Get(0);
    v27 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, v25, v24, v26, &v2->baseclass_0.baseclass_0, 0, 0);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v27,
      5u);
    v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v29 = TextData::Get(0x7C9CDAE8u);
    v28[118].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v27,
      0);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "Btn02Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v30, &v2->baseclass_0.baseclass_0, 6u, 0, 0);
    v31 = v30->m_akHitTester.m_pBase;
    v32 = v31->m_pObject->m_uiHeight;
    v33 = v31->m_pObject->m_uiWidth;
    v34 = Font::Get(0);
    v35 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, v33, v32, v34, &v2->baseclass_0.baseclass_0, 0, 0);
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v35,
      5u);
    v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v37 = TextData::Get(0x9286CA0u);
    v36[118].__vecDelDtor((NiRefObject *)v35, (unsigned int)v37);
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v35,
      0);
    v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v38, &spNode.m_pObject->baseclass_0, "Btn03Click");
    PgSprData::Add(v38, &spNode.m_pObject->baseclass_0, "Btn03Over");
    PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v38, &v2->baseclass_0.baseclass_0);
    v39 = v38->m_akHitTester.m_pBase;
    v40 = v39->m_pObject->m_uiHeight;
    iYOffa = v39->m_pObject->m_uiWidth;
    v41 = Font::Get(0);
    v42 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffa, v40, v41, &v2->baseclass_0.baseclass_0, 0, 0);
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v42,
      5u);
    v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v44 = TextData::Get(0x9FE7FBFCu);
    v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v42,
      0);
    ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v55 = -1;
    if ( spNode.m_pObject )
    {
      v45 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v45 )
          v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v55 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005337E0) --------------------------------------------------------
ItemMallMenuWin *__cdecl ItemMallMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ItemMallMenuWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ItemMallMenuWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ItemMallMenuWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ItemMallMenuWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99ADB4: using guessed type int (__stdcall *ItemMallMenuWin___vftable_)(int uiFlags);
// 99ADD4: using guessed type int (__thiscall *ItemMallMenuWin___vftable_)(void *p, char);

//----- (00533920) --------------------------------------------------------
void *__thiscall ItemMallMenuWin::_scalar_deleting_destructor_(ItemMallMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemMallMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemMallMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99ADB4: using guessed type int (__stdcall *ItemMallMenuWin___vftable_)(int uiFlags);
// 99ADD4: using guessed type int (__thiscall *ItemMallMenuWin___vftable_)(void *p, char);

//----- (00533960) --------------------------------------------------------
void __thiscall ShopInvWin::ShopInvWin(ShopInvWin *this)
{
  ShopInvWin *v1; // esi@1

  v1 = this;
  ItemShopInvWin::ItemShopInvWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShopInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShopInvWin::_vftable_;
}
// 99B1B8: using guessed type int (__stdcall *ShopInvWin___vftable_)(int uiFlags);
// 99B1D4: using guessed type int (__thiscall *ShopInvWin___vftable_)(void *p, char);

//----- (00533980) --------------------------------------------------------
void __thiscall ShopInvWin::_ShopInvWin(ShopInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShopInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShopInvWin::_vftable_;
  ItemShopInvWin::_ItemShopInvWin(&this->baseclass_0);
}
// 99B1B8: using guessed type int (__stdcall *ShopInvWin___vftable_)(int uiFlags);
// 99B1D4: using guessed type int (__thiscall *ShopInvWin___vftable_)(void *p, char);

//----- (005339E0) --------------------------------------------------------
void __thiscall ItemShopWin::OnHelpLink(ItemShopWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NPCItem");
}

//----- (00533A10) --------------------------------------------------------
unsigned int __thiscall ItemShopWin::GetSellItemNum(ItemShopWin *this)
{
  unsigned int v1; // eax@1
  unsigned int result; // eax@2

  v1 = this->m_uiCurPageType;
  if ( v1 )
  {
    if ( v1 == 1 )
    {
      result = Market::GetTotalArmor();
    }
    else
    {
      if ( v1 == 3 )
        result = Market::GetTotalRepurchase();
      else
        result = Market::GetTotalAcc();
    }
  }
  else
  {
    result = Market::GetTotalWeapon();
  }
  return result;
}

//----- (00533A40) --------------------------------------------------------
unsigned int __thiscall ItemShopWin::GetMaxPageNum(ItemShopWin *this)
{
  unsigned int v1; // eax@1
  unsigned int v2; // eax@2
  unsigned int result; // eax@9

  v1 = this->m_uiCurPageType;
  if ( v1 )
  {
    if ( v1 == 1 )
    {
      v2 = Market::GetTotalArmor();
    }
    else
    {
      if ( v1 == 3 )
        v2 = Market::GetTotalRepurchase();
      else
        v2 = Market::GetTotalAcc();
    }
  }
  else
  {
    v2 = Market::GetTotalWeapon();
  }
  if ( v2 )
    result = (v2 - 1) / 0x2A + 1;
  else
    result = 1;
  return result;
}

//----- (00533A90) --------------------------------------------------------
ShopInvWin *__thiscall ItemShopWin::GetInvWin(ItemShopWin *this, unsigned int uiIndex)
{
  ShopInvWin *result; // eax@2

  if ( uiIndex < 0x2A )
    result = this->m_apkInvWin[uiIndex];
  else
    result = 0;
  return result;
}

//----- (00533AB0) --------------------------------------------------------
void __thiscall ItemShopWin::DeleteRepurchaseInv(ItemShopWin *this, unsigned __int16 nHandle)
{
  ItemShopWin *v2; // ebx@1
  unsigned int v3; // edi@1
  unsigned int v4; // eax@1
  unsigned int v5; // esi@1
  ItemRepurchase *v6; // eax@3
  ItemShopInvWin *v7; // ecx@5
  ItemRepurchase *v8; // [sp-4h] [bp-14h]@5
  int v9; // [sp+Ch] [bp-4h]@1
  ItemShopInvWin **nHandlea; // [sp+18h] [bp+8h]@2

  v2 = this;
  v3 = Market::FindRepurchase(nHandle);
  v4 = Market::GetTotalRepurchase();
  v5 = 0;
  v9 = v4 - v3;
  if ( v4 != v3 )
  {
    nHandlea = (ItemShopInvWin **)&v2->m_apkInvWin[v3 + 1];
    do
    {
      v6 = ItemShopInvWin::GetRepurchaseItem(*nHandlea);
      if ( v2->m_uiCurPageType == 3 )
      {
        if ( v5 + v3 == 41 )
        {
          v7 = (ItemShopInvWin *)v2->m_apkInvWin[v5 + v3];
          v8 = 0;
        }
        else
        {
          v8 = v6;
          v7 = (ItemShopInvWin *)v2->m_apkInvWin[v5 + v3];
        }
        ItemShopInvWin::SetItemIcon(v7, v8);
      }
      ++nHandlea;
      ++v5;
    }
    while ( v5 < v9 );
  }
  Market::DeleteRepurchase(v3);
}

//----- (00533B40) --------------------------------------------------------
void __thiscall ItemShopWin::AddRepurchaseInv(ItemShopWin *this, PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *pkRepurItem)
{
  ItemShopWin *v2; // esi@1
  unsigned int v3; // eax@1
  unsigned int v4; // edi@1
  ItemRepurchase *v5; // eax@1
  ItemRepurchase *v6; // eax@3

  v2 = this;
  v3 = Market::GetTotalRepurchase();
  v4 = v3;
  v5 = ItemShopInvWin::GetRepurchaseItem(&v2->m_apkInvWin[v3]->baseclass_0);
  if ( !v5 || !v5->pItem )
  {
    v6 = Market::AddRepurchase(pkRepurItem);
    if ( v2->m_uiCurPageType == 3 )
      ItemShopInvWin::SetRepurchaseItem(&v2->m_apkInvWin[v4]->baseclass_0, v6);
  }
}

//----- (00533B90) --------------------------------------------------------
void __thiscall ShopInvWin::SetItem(ShopInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo)
{
  IconWin *v2; // esi@1
  Tutorial *v3; // eax@3
  Tutorial *v4; // eax@3

  v2 = (IconWin *)this;
  ItemShopInvWin::SetItem(&this->baseclass_0, pkInfo);
  if ( pkInfo )
  {
    if ( pkInfo->item != -1 )
    {
      v3 = Singleton<Tutorial>::getInstance();
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v2,
        v3->m_bLockItemShop == 0);
      v4 = Singleton<Tutorial>::getInstance();
      IconWin::IconDisable(v2, v4->m_bLockItemShop);
    }
  }
}

//----- (00533BF0) --------------------------------------------------------
void __thiscall ItemShopWin::ItemShopWin(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemShopWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemShopWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 0;
  v1->m_pkTitleTextWin = 0;
  memset(v1->m_apkInvWin, 0, sizeof(v1->m_apkInvWin));
  v1->m_pkPageText = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99B444: using guessed type int (__stdcall *ItemShopWin___vftable_)(int uiFlags);
// 99B464: using guessed type int (__thiscall *ItemShopWin___vftable_)(void *p, char);

//----- (00533C70) --------------------------------------------------------
void __thiscall ItemShopWin::_ItemShopWin(ItemShopWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemShopWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemShopWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99B444: using guessed type int (__stdcall *ItemShopWin___vftable_)(int uiFlags);
// 99B464: using guessed type int (__thiscall *ItemShopWin___vftable_)(void *p, char);

//----- (00533CB0) --------------------------------------------------------
void __thiscall ItemShopWin::OnCancel(ItemShopWin *this)
{
  GameFrameWork::CloseShopMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
}

//----- (00533CC0) --------------------------------------------------------
void __thiscall ItemShopWin::UpdatePageInfo(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@2
  char *v3; // eax@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v2 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ItemShopWin::GetMaxPageNum(v1);
    v3 = fs("%d / %d");
    v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v3);
  }
}

//----- (00533D10) --------------------------------------------------------
void __thiscall ItemShopWin::OnInvRClick(ItemShopWin *this, unsigned int uiInvIndex)
{
  unsigned int v2; // esi@1
  ItemShopWin *v3; // edi@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v4; // eax@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v5; // ebx@1
  ItemRepurchase *v6; // eax@1
  ItemRepurchase *v7; // esi@1
  int v8; // esi@2
  int v9; // edi@2
  int v10; // esi@3
  int v11; // eax@6
  GameFrameWork *v12; // esi@10
  char *v13; // eax@11
  ItemShopWin *v14; // [sp+Ch] [bp-4h]@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkSellInfo; // [sp+18h] [bp+8h]@1

  v2 = uiInvIndex;
  v3 = this;
  v14 = this;
  v4 = ItemShopInvWin::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v5 = v4;
  pkSellInfo = v4;
  v6 = ItemShopInvWin::GetRepurchaseItem(&v3->m_apkInvWin[v2]->baseclass_0);
  v7 = v6;
  if ( v5 )
  {
    v8 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v9 = v5->item;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v5->item) )
    {
      if ( (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) )
      {
        v11 = *(_DWORD *)(v8 + 196) + 4 * v9;
        if ( *(_DWORD *)v11 )
          v10 = *(_DWORD *)v11;
        else
          v10 = 0;
      }
      else
      {
        v10 = 0;
      }
    }
    else
    {
      v10 = 0;
    }
    if ( *(_DWORD *)(v10 + 211) > User::GetMoney(&g_kUser) )
    {
      v12 = (GameFrameWork *)v14->baseclass_0.m_pkFrameWork;
LABEL_11:
      v13 = TextData::Get(0x304F413Du);
      GameFrameWork::AddSysMsg(v12, v13);
      return;
    }
    GameFrameWork::NcItemBuyReq(
      (GameFrameWork *)v14->baseclass_0.m_pkFrameWork,
      pkSellInfo->item,
      *(_DWORD *)(v10 + 106));
  }
  else
  {
    if ( v6 )
    {
      if ( v6->pItem->m_pkInfo->SellPrice > User::GetMoney(&g_kUser) )
      {
        v12 = (GameFrameWork *)v14->baseclass_0.m_pkFrameWork;
        goto LABEL_11;
      }
      GameFrameWork::NcItemRepurchaseReq((GameFrameWork *)v14->baseclass_0.m_pkFrameWork, v7->nHandle);
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00533E40) --------------------------------------------------------
void __thiscall ItemShopWin::ResetContents(ItemShopWin *this)
{
  ItemShopInvWin **v1; // edi@1
  ItemShopInvWin **v2; // esi@2
  signed int v3; // ebx@2
  unsigned int v4; // eax@4
  unsigned int v5; // esi@4
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v6; // eax@8
  ItemShopInvWin *v7; // ebx@8
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v8; // esi@8
  Tutorial *v9; // eax@10
  void *v10; // eax@11
  Tutorial *v11; // eax@15
  void *v12; // eax@16
  unsigned int v13; // ebx@24
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v14; // eax@27
  ItemShopInvWin *v15; // esi@27
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v16; // edi@27
  Tutorial *v17; // eax@29
  Tutorial *v18; // eax@29
  ItemRepurchase *v19; // eax@35
  unsigned int v20; // ebx@37
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v21; // eax@40
  ItemShopInvWin *v22; // esi@40
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v23; // edi@40
  Tutorial *v24; // eax@42
  Tutorial *v25; // eax@42
  unsigned int v26; // eax@45
  NiRefObjectVtbl *v27; // esi@52
  char *v28; // eax@52
  ItemShopWin *v29; // [sp+4h] [bp-1Ch]@1
  unsigned int v30; // [sp+8h] [bp-18h]@6
  ItemShopInvWin **v31; // [sp+8h] [bp-18h]@25
  ItemShopInvWin **v32; // [sp+8h] [bp-18h]@38
  unsigned int i; // [sp+Ch] [bp-14h]@5
  unsigned int ia; // [sp+Ch] [bp-14h]@25
  unsigned int ib; // [sp+Ch] [bp-14h]@38
  unsigned int uiTotal; // [sp+10h] [bp-10h]@5
  unsigned int uiTotala; // [sp+10h] [bp-10h]@24
  unsigned int uiTotalb; // [sp+10h] [bp-10h]@33
  unsigned int uiTotalc; // [sp+10h] [bp-10h]@37

  v29 = this;
  v1 = (ItemShopInvWin **)this->m_apkInvWin;
  if ( this->m_apkInvWin[0] )
  {
    v2 = (ItemShopInvWin **)this->m_apkInvWin;
    v3 = 42;
    do
    {
      ItemShopInvWin::SetItem(*v2, 0);
      ItemShopInvWin::SetRepurchaseItem(*v2, 0);
      ++v2;
      --v3;
    }
    while ( v3 );
    v4 = v29->m_uiCurPageType;
    v5 = 42 * v29->m_uiCurPage;
    if ( v4 )
    {
      if ( v4 == 1 )
      {
        uiTotala = Market::GetTotalArmor();
        v13 = v5;
        if ( v5 < uiTotala )
        {
          ia = 0;
          v31 = v1;
          do
          {
            if ( ia >= 0x2A )
              break;
            v14 = Market::GetArmor(v13);
            v15 = *v31;
            v16 = v14;
            ItemShopInvWin::SetItem(*v31, v14);
            if ( v16 && v16->item != -1 )
            {
              v17 = Singleton<Tutorial>::getInstance();
              v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                (NiRefObject *)v15,
                v17->m_bLockItemShop == 0);
              v18 = Singleton<Tutorial>::getInstance();
              IconWin::IconDisable(&v15->baseclass_0.baseclass_0, v18->m_bLockItemShop);
            }
            ++v31;
            ++ia;
            ++v13;
          }
          while ( v13 < uiTotala );
        }
      }
      else
      {
        if ( v4 == 3 )
        {
          for ( uiTotalb = Market::GetTotalRepurchase(); v5 < uiTotalb; ++v3 )
          {
            if ( (unsigned int)v3 >= 0x2A )
              break;
            v19 = Market::GetRepurchase(v5);
            ItemShopInvWin::SetRepurchaseItem(*v1, v19);
            ++v5;
            ++v1;
          }
        }
        else
        {
          uiTotalc = Market::GetTotalAcc();
          v20 = v5;
          if ( v5 < uiTotalc )
          {
            ib = 0;
            v32 = v1;
            do
            {
              if ( ib >= 0x2A )
                break;
              v21 = Market::GetAcc(v20);
              v22 = *v32;
              v23 = v21;
              ItemShopInvWin::SetItem(*v32, v21);
              if ( v23 && v23->item != -1 )
              {
                v24 = Singleton<Tutorial>::getInstance();
                v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                  (NiRefObject *)v22,
                  v24->m_bLockItemShop == 0);
                v25 = Singleton<Tutorial>::getInstance();
                IconWin::IconDisable(&v22->baseclass_0.baseclass_0, v25->m_bLockItemShop);
              }
              ++v32;
              ++ib;
              ++v20;
            }
            while ( v20 < uiTotalc );
          }
        }
      }
    }
    else
    {
      uiTotal = Market::GetTotalWeapon();
      i = v5;
      if ( v5 < uiTotal )
      {
        v30 = 0;
        do
        {
          if ( v30 >= 0x2A )
            break;
          v6 = Market::GetWeaopn(i);
          v7 = *v1;
          v8 = v6;
          ItemShopInvWin::SetItem(*v1, v6);
          if ( v8 && v8->item != -1 )
          {
            v9 = Singleton<Tutorial>::m_pInstance;
            if ( !Singleton<Tutorial>::m_pInstance )
            {
              v10 = operator new(0xB4u);
              if ( v10 )
                Tutorial::Tutorial(v9);
              else
                v9 = 0;
              Singleton<Tutorial>::m_pInstance = v9;
            }
            v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
              (NiRefObject *)v7,
              v9->m_bLockItemShop == 0);
            v11 = Singleton<Tutorial>::m_pInstance;
            if ( !Singleton<Tutorial>::m_pInstance )
            {
              v12 = operator new(0xB4u);
              if ( v12 )
                Tutorial::Tutorial(v11);
              else
                v11 = 0;
              Singleton<Tutorial>::m_pInstance = v11;
            }
            IconWin::IconDisable(&v7->baseclass_0.baseclass_0, v11->m_bLockItemShop);
          }
          ++v30;
          ++v1;
          ++i;
        }
        while ( i < uiTotal );
      }
    }
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v29) )
    {
      v26 = v29->m_uiCurPageType;
      if ( v26 )
      {
        if ( v26 == 1 )
        {
          Market::GetTotalArmor();
        }
        else
        {
          if ( v26 == 3 )
            Market::GetTotalRepurchase();
          else
            Market::GetTotalAcc();
        }
      }
      else
      {
        Market::GetTotalWeapon();
      }
      v27 = v29->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v28 = fs("%d / %d");
      v27[118].__vecDelDtor((NiRefObject *)v29->m_pkPageText, (unsigned int)v28);
    }
  }
}

//----- (005341B0) --------------------------------------------------------
void __thiscall ItemShopWin::OnShowWin(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@2
  char *v3; // eax@2

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1) )
  {
    v2 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ItemShopWin::GetMaxPageNum(v1);
    v3 = fs("%d / %d");
    v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v3);
  }
}

//----- (00534200) --------------------------------------------------------
void __thiscall ItemShopWin::OnSetPage(ItemShopWin *this, unsigned int uiPage)
{
  this->m_uiCurPage = uiPage;
  ItemShopWin::ResetContents(this);
}

//----- (00534220) --------------------------------------------------------
void __thiscall ItemShopWin::ResetPage(ItemShopWin *this)
{
  this->m_uiCurPage = 0;
  this->m_uiCurPageType = 0;
  ItemShopWin::ResetContents(this);
}

//----- (00534240) --------------------------------------------------------
void __thiscall ItemShopWin::OnWeapon(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockItemShopTab )
  {
    if ( v1->m_uiCurPageType )
    {
      v1->m_uiCurPageType = 0;
      v1->m_uiCurPage = 0;
      ItemShopWin::ResetContents(v1);
    }
  }
}

//----- (005342E0) --------------------------------------------------------
void __thiscall ItemShopWin::OnArmor(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockItemShopTab )
  {
    if ( v1->m_uiCurPageType != 1 )
    {
      v1->m_uiCurPageType = 1;
      v1->m_uiCurPage = 0;
      ItemShopWin::ResetContents(v1);
    }
  }
}

//----- (00534380) --------------------------------------------------------
void __thiscall ItemShopWin::OnAcc(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockItemShopTab )
  {
    if ( v1->m_uiCurPageType != 2 )
    {
      v1->m_uiCurPageType = 2;
      v1->m_uiCurPage = 0;
      ItemShopWin::ResetContents(v1);
    }
  }
}

//----- (00534420) --------------------------------------------------------
void __thiscall ItemShopWin::OnRepurchase(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockItemShopTab )
  {
    if ( v1->m_uiCurPageType != 3 )
    {
      v1->m_uiCurPageType = 3;
      v1->m_uiCurPage = 0;
      ItemShopWin::ResetContents(v1);
    }
  }
}

//----- (005344C0) --------------------------------------------------------
void __thiscall ItemShopWin::OnPrevPage(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  unsigned int v4; // eax@7

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockItemShopTab )
  {
    v4 = v1->m_uiCurPage;
    if ( v4 )
      v1->m_uiCurPage = v4 - 1;
    ItemShopWin::ResetContents(v1);
  }
}

//----- (00534550) --------------------------------------------------------
void __thiscall ItemShopWin::OnNextPage(ItemShopWin *this)
{
  ItemShopWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  unsigned int v4; // eax@7
  unsigned int v5; // eax@8
  unsigned int v6; // ecx@14

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockItemShopTab )
  {
    v4 = v1->m_uiCurPageType;
    if ( v4 )
    {
      if ( v4 == 1 )
      {
        v5 = Market::GetTotalArmor();
      }
      else
      {
        if ( v4 == 3 )
          v5 = Market::GetTotalRepurchase();
        else
          v5 = Market::GetTotalAcc();
      }
    }
    else
    {
      v5 = Market::GetTotalWeapon();
    }
    v6 = v1->m_uiCurPage;
    if ( 42 * (v6 + 1) < v5 )
      v1->m_uiCurPage = v6 + 1;
    ItemShopWin::ResetContents(v1);
  }
}

//----- (00534620) --------------------------------------------------------
void __thiscall ItemShopWin::OnCommand(ItemShopWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 1u:
      ItemShopWin::OnInvRClick(this, lParam);
      break;
    case 2u:
      ItemShopWin::OnWeapon(this);
      break;
    case 3u:
      ItemShopWin::OnArmor(this);
      break;
    case 4u:
      ItemShopWin::OnAcc(this);
      break;
    case 5u:
      ItemShopWin::OnRepurchase(this);
      break;
    case 6u:
      ItemShopWin::OnPrevPage(this);
      break;
    case 7u:
      ItemShopWin::OnNextPage(this);
      break;
    case 9u:
      GameFrameWork::CloseShopMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
      break;
    case 0xBu:
      ItemShopWin::OnHelpLink(this);
      break;
    case 0xCu:
      this->m_uiCurPage = lParam;
      ItemShopWin::ResetContents(this);
      break;
    default:
      return;
  }
}

//----- (005346E0) --------------------------------------------------------
ShopInvWin *__cdecl ShopInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  ShopInvWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1CCu);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    ItemShopInvWin::ItemShopInvWin((ItemShopInvWin *)v4);
    *(_DWORD *)v5 = &ShopInvWin::_vftable_;
    *((_DWORD *)v5 + 58) = &ShopInvWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 616))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (ShopInvWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 99B1B8: using guessed type int (__stdcall *ShopInvWin___vftable_)(int uiFlags);
// 99B1D4: using guessed type int (__thiscall *ShopInvWin___vftable_)(void *p, char);

//----- (00534830) --------------------------------------------------------
ItemShopWin *__cdecl ItemShopWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ItemShopWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x268u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ItemShopWin::ItemShopWin((ItemShopWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ItemShopWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00534960) --------------------------------------------------------
bool __thiscall ItemShopWin::Create(ItemShopWin *this, PgFrameWork *pkFrameWork)
{
  ItemShopWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  char *v6; // eax@10
  PgSprData *v7; // eax@11
  int v8; // edi@12
  int v9; // ebx@12
  NiSourceTexture *v10; // eax@12
  PgSprData *v11; // eax@15
  PgSprData *v12; // eax@17
  PgWinSpr *v13; // eax@17
  PgSprData *v14; // eax@17
  PgFont *v15; // eax@19
  PgWinText *v16; // eax@19
  NiRefObjectVtbl *v17; // edx@19
  char *v18; // eax@19
  PgSprData *v19; // eax@19
  PgSprData *v20; // eax@20
  ItemShopInvWin *v21; // eax@20
  PgSprData *v22; // ecx@20
  char *v23; // eax@21
  NiSourceTexture *v24; // ST44_4@21
  char *v25; // eax@21
  NiSourceTexture *v26; // ST44_4@21
  char *v27; // eax@21
  NiSourceTexture *v28; // ST44_4@21
  char *v29; // eax@21
  char *v30; // eax@21
  char *v31; // eax@21
  PgSprData *v32; // eax@21
  PgFont *v33; // eax@24
  PgWinText *v34; // eax@24
  NiNode *v35; // esi@25
  const char *v36; // [sp+1Ch] [bp-78h]@13
  int *v37; // [sp+20h] [bp-74h]@13
  int *v38; // [sp+24h] [bp-70h]@13
  volatile LONG *v39; // [sp+28h] [bp-6Ch]@3
  NiSourceTexture *v40; // [sp+28h] [bp-6Ch]@13
  unsigned int v41; // [sp+2Ch] [bp-68h]@1
  unsigned int uiHeight; // [sp+3Ch] [bp-58h]@17
  void *pkTexture10; // [sp+40h] [bp-54h]@20
  unsigned int uiWidth; // [sp+44h] [bp-50h]@17
  void *i; // [sp+48h] [bp-4Ch]@8
  NiSourceTexture *pkTexture; // [sp+4Ch] [bp-48h]@1
  int uiTop; // [sp+50h] [bp-44h]@11
  int uiLeft; // [sp+54h] [bp-40h]@11
  NiPointer<NiNode> spNode; // [sp+58h] [bp-3Ch]@1
  PgSprData *pkTextWin; // [sp+5Ch] [bp-38h]@15
  char acShapeName[33]; // [sp+60h] [bp-34h]@20
  unsigned int v52; // [sp+84h] [bp-10h]@1
  int v53; // [sp+90h] [bp-4h]@1
  int v54; // [sp+94h] [bp+0h]@1

  v52 = (unsigned int)&v54 ^ __security_cookie;
  v41 = (unsigned int)&v54 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v53 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
    goto LABEL_31;
  i = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCItem.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, (NiTexturePalette *)i);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "ItemShopWin", 0) )
  {
LABEL_31:
    v4 = spNode.m_pObject;
    v53 = -1;
    if ( spNode.m_pObject )
    {
      v39 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_4;
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v40 = v10;
    v38 = &uiTop;
    v37 = &uiLeft;
    v36 = "Theme";
  }
  else
  {
    v40 = 0;
    v38 = &uiTop;
    v37 = &uiLeft;
    v36 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v36, v37, v38, v40);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0, 0);
  i = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v41) )
  {
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)i);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v53 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v15 = Font::Get(0);
  v16 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 2,
          uiWidth,
          uiHeight,
          v15,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (PgSprData *)v16;
  v17[122].__vecDelDtor((NiRefObject *)v16, 5u);
  ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
  i = &pkTextWin->baseclass_0.vfptr[118];
  v18 = TextData::Get(0xF0574438u);
  (*(void (__thiscall **)(PgSprData *, char *))i)(pkTextWin, v18);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  i = 0;
  pkTextWin = (PgSprData *)v2->m_apkInvWin;
  do
  {
    pkTexture10 = (char *)i + 1;
    sprintf(acShapeName, "IconSlot%03d");
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v21 = (ItemShopInvWin *)ShopInvWin::CreateWin(
                              uiLeft - v8 + 1,
                              uiTop - v9 + 1,
                              (unsigned int)i,
                              &v2->baseclass_0.baseclass_0.baseclass_0);
    pkTextWin->baseclass_0.vfptr = (NiRefObjectVtbl *)v21;
    ItemShopInvWin::SetItem(v21, 0);
    (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 129))(0);
    (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 140))(1);
    v22 = pkTextWin;
    pkTextWin->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkItemInfoWin;
    i = pkTexture10;
    pkTextWin = (PgSprData *)((char *)v22 + 4);
  }
  while ( (signed int)pkTexture10 < 42 );
  pkTexture = MenuTexMgr::GetTexture(0x1Du);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WeaNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WeaClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WeaOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             2u,
                             0,
                             0);
  v23 = TextData::Get(0xDC05F8ECu);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v23);
  v24 = pkTexture;
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ArmNor", &uiLeft, &uiTop, v24);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ArmClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ArmOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             3u,
                             0,
                             0);
  v25 = TextData::Get(0x9BF2F7F8u);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v25);
  v26 = pkTexture;
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AccNor", &uiLeft, &uiTop, v26);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "AccClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "AccOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             4u,
                             0,
                             0);
  v27 = TextData::Get(0x8CA0A8EEu);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v27);
  v28 = pkTexture;
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RepurchaseNor", &uiLeft, &uiTop, v28);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "RepurchaseClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "RepurchaseOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             5u,
                             0,
                             0);
  v29 = TextData3::Get(0x2392E3Eu);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v29);
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  pkTexture = MenuTexMgr::GetTexture(4u);
  pkTexture10 = MenuTexMgr::GetTexture(0x1Cu);
  pkTextWin = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "PrePageNor",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)pkTexture10);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             6u,
                             0,
                             0);
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  v30 = TextData3::Get(0x6A8A9870u);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v30);
  pkTextWin = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "NextPageNor",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)pkTexture10);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             7u,
                             0,
                             0);
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  v31 = TextData3::Get(0x25449D82u);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v31);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Number", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Number01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v4 = spNode.m_pObject;
    v53 = -1;
    if ( spNode.m_pObject )
    {
      v39 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_4:
      if ( !InterlockedDecrement(v39) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
      return 0;
    }
    return 0;
  }
  v33 = Font::Get(0);
  v34 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v33,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkPageText = v34;
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v34,
    5u);
  ((void (__thiscall *)(ItemShopWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v53 = -1;
  if ( spNode.m_pObject )
  {
    v35 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v35 )
        v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00535200) --------------------------------------------------------
void *__thiscall ShopInvWin::_scalar_deleting_destructor_(ShopInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShopInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShopInvWin::_vftable_;
  ItemShopInvWin::_ItemShopInvWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99B1B8: using guessed type int (__stdcall *ShopInvWin___vftable_)(int uiFlags);
// 99B1D4: using guessed type int (__thiscall *ShopInvWin___vftable_)(void *p, char);

//----- (00535240) --------------------------------------------------------
void *__thiscall ItemShopWin::_scalar_deleting_destructor_(ItemShopWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemShopWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemShopWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99B444: using guessed type int (__stdcall *ItemShopWin___vftable_)(int uiFlags);
// 99B464: using guessed type int (__thiscall *ItemShopWin___vftable_)(void *p, char);

//----- (00535290) --------------------------------------------------------
void __thiscall ItemTradeWin::ItemTradeWin(ItemTradeWin *this)
{
  ItemTradeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemTradeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemTradeWin::_vftable_;
  v1->m_eMode = 1;
  v1->m_uiResultValue = 0;
}
// 99B798: using guessed type int (__stdcall *ItemTradeWin___vftable_)(int uiFlags);
// 99B7B4: using guessed type int (__thiscall *ItemTradeWin___vftable_)(void *p, char);

//----- (005352C0) --------------------------------------------------------
void __thiscall ItemTradeWin::_ItemTradeWin(ItemTradeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemTradeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemTradeWin::_vftable_;
  this->m_pkLotInputEdit = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 99B798: using guessed type int (__stdcall *ItemTradeWin___vftable_)(int uiFlags);
// 99B7B4: using guessed type int (__thiscall *ItemTradeWin___vftable_)(void *p, char);

//----- (005352E0) --------------------------------------------------------
void __thiscall ItemTradeWin::OnCmdCancel(ItemTradeWin *this)
{
  ItemTradeWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  this->m_uiResultValue = 0;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2 = v1->m_pkRevWin;
  if ( v2 )
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, 5u, v1->m_uiOkMsg, 0);
}

//----- (00535320) --------------------------------------------------------
void __thiscall ItemTradeWin::GetValueFromEdit(ItemTradeWin *this)
{
  ItemTradeWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1

  v1 = this;
  v2 = this->m_pkLotInputEdit;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 )
  {
    if ( *v3 )
      v1->m_uiResultValue = atoi(v3);
  }
}

//----- (00535360) --------------------------------------------------------
void __thiscall ItemTradeWin::SetValueToEdit(ItemTradeWin *this)
{
  ItemTradeWin *v1; // esi@1
  char acStr[32]; // [sp+4h] [bp-24h]@1
  unsigned int v3; // [sp+24h] [bp-4h]@1
  int v4; // [sp+28h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  sprintf(acStr, "%u");
  ((void (__stdcall *)(_DWORD))v1->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (005353B0) --------------------------------------------------------
void __thiscall ItemTradeWin::SetValueToEdit(ItemTradeWin *this, unsigned int num)
{
  ItemTradeWin *v2; // esi@1
  char acStr[32]; // [sp+4h] [bp-24h]@1
  unsigned int v4; // [sp+24h] [bp-4h]@1
  int v5; // [sp+28h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  this->m_uiResultValue = num;
  sprintf(acStr, "%u");
  ((void (__stdcall *)(_DWORD))v2->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (00535410) --------------------------------------------------------
void __thiscall ItemTradeWin::UpdateMeWin(ItemTradeWin *this, float fCurTime)
{
  int v2; // ebx@0
  int v3; // edi@0
  ItemTradeWin *v4; // esi@1
  const char *v5; // eax@2
  int v6; // edi@2
  NiRefObjectVtbl *v7; // edi@3
  char *v8; // eax@3
  NiRefObjectVtbl *v9; // ebx@4
  NiRefObjectVtbl *v10; // ebx@4
  NiRefObjectVtbl *v11; // ebx@4
  char *v12; // eax@4
  NiRefObjectVtbl *v13; // ebx@4
  char *v14; // eax@4

  v4 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)() )
  {
    v5 = (const char *)((int (__stdcall *)(int, int))v4->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(
                         v3,
                         v2);
    v6 = atoi(v5);
    if ( v6 > v4->m_uiMax )
    {
      v7 = v4->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = fs("%d");
      v7[115].__vecDelDtor((NiRefObject *)v4->m_pkLotInputEdit, (unsigned int)v8);
      v6 = v4->m_uiMax;
    }
    v9 = v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::GetGem(v6 * v4->m_uiPrice);
    fs("%d");
    ((void (__thiscall *)(PgWinText *))v9[118].__vecDelDtor)(v4->m_pkGemText);
    v10 = v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::GetGold(v6 * v4->m_uiPrice);
    fs("%d");
    ((void (__thiscall *)(PgWinText *))v10[118].__vecDelDtor)(v4->m_pkGoldText);
    v11 = v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::GetSilver(v6 * v4->m_uiPrice);
    v12 = fs("%d");
    v11[118].__vecDelDtor((NiRefObject *)v4->m_pkSilverText, (unsigned int)v12);
    v13 = v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::GetCopper(v6 * v4->m_uiPrice);
    v14 = fs("%d");
    v13[118].__vecDelDtor((NiRefObject *)v4->m_pkCopperText, (unsigned int)v14);
  }
}

//----- (00535560) --------------------------------------------------------
void __thiscall ItemTradeWin::Open(ItemTradeWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, ItemInfo *pkItemInfo, char *pcText)
{
  ItemTradeWin *v5; // esi@1
  NiRefObjectVtbl *v6; // edi@1
  unsigned int v7; // eax@1
  NiRefObjectVtbl *v8; // edi@1
  unsigned int v9; // eax@1
  char string; // [sp+Ch] [bp-24h]@1
  unsigned int v11; // [sp+2Ch] [bp-4h]@1
  int v12; // [sp+30h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v5 = this;
  this->m_pkRevWin = pkRevWin;
  this->m_uiOkMsg = uiOkMsg;
  this->m_uiResultValue = pkItemInfo->MaxLot;
  this->m_uiMax = pkItemInfo->MaxLot;
  this->m_uiPrice = pkItemInfo->BuyPrice;
  ((void (*)(void))this->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  v5->m_uiResultValue = 1;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v5->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
  ((void (__stdcall *)(char *))v5->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  ((void (__stdcall *)(char *))v5->m_pkItemNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkItemInfo->Name);
  ItemIcon::SetItemAsID(v5->m_pkItemIcon, pkItemInfo->ID);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
  v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = ((int (__thiscall *)(ItemTradeWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
  v6[43].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsX.x - (v7 >> 1));
  v8 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (__thiscall *)(ItemTradeWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5);
  v8[44].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsY - (v9 >> 1));
}
// A85C00: using guessed type int __security_cookie;

//----- (00535680) --------------------------------------------------------
void __thiscall ItemTradeWin::OnClose(ItemTradeWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  ((void (__stdcall *)(_DWORD))this->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  PgWin::OnClose(v1);
}

//----- (005356A0) --------------------------------------------------------
void __thiscall ItemTradeWin::Open(ItemTradeWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, Item *pkItem, char *pcText)
{
  ItemTradeWin *v5; // esi@1
  int v6; // eax@1
  bool v7; // zf@1
  PgFrameWork *v8; // eax@2
  signed int v9; // ebx@3
  NiRefObjectVtbl *v10; // edi@11
  unsigned int v11; // eax@11
  NiRefObjectVtbl *v12; // edi@11
  unsigned int v13; // eax@11
  PgFrameWork *pkGame; // [sp+14h] [bp-2Ch]@2
  int i; // [sp+18h] [bp-28h]@3
  char string; // [sp+1Ch] [bp-24h]@11
  unsigned int v17; // [sp+3Ch] [bp-4h]@1
  int v18; // [sp+40h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v5 = this;
  this->m_pkRevWin = pkRevWin;
  this->m_uiOkMsg = uiOkMsg;
  this->m_uiResultValue = ((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[3].__vecDelDtor)(pkItem);
  v6 = ((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[3].__vecDelDtor)(pkItem);
  v7 = v5->m_eMode == 2;
  v5->m_uiMax = v6;
  if ( v7 )
  {
    v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    pkGame = v8;
    if ( v8 )
    {
      i = 0;
      v9 = 504;
      while ( !ItemIcon::GetItem(*(ItemIcon **)(v9 + v8[20].m_kMsgQ.m_uiAlloced))
           || pkItem->m_kStruct.itemid != ItemIcon::GetItem(*(ItemIcon **)(v9 + pkGame[20].m_kMsgQ.m_uiAlloced))->m_kStruct.itemid )
      {
        ++i;
        v9 += 4;
        if ( v9 >= 584 )
          goto LABEL_11;
        v8 = pkGame;
      }
      v5->m_uiPrice = *(_DWORD *)(*(_DWORD *)(pkGame[20].m_kMsgQ.m_uiAlloced + 4 * i + 504) + 464);
    }
  }
  else
  {
    v5->m_uiPrice = pkItem->m_pkInfo->SellPrice;
  }
LABEL_11:
  ((void (*)(void))v5->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  v5->m_uiResultValue = v5->m_uiMax;
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v5->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
  ((void (__stdcall *)(char *))v5->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  ((void (__stdcall *)(char *))v5->m_pkItemNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkItem->m_pkInfo->Name);
  ItemIcon::SetItemAsID(v5->m_pkItemIcon, pkItem->m_kStruct.itemid);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0);
  v10 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = ((int (__thiscall *)(ItemTradeWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
  v10[43].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsX.x - (v11 >> 1));
  v12 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = ((int (__thiscall *)(ItemTradeWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5);
  v12[44].__vecDelDtor((NiRefObject *)v5, PgWin::ms_iMsY - (v13 >> 1));
}
// A85C00: using guessed type int __security_cookie;

//----- (00535880) --------------------------------------------------------
bool __thiscall ItemTradeWin::Create(ItemTradeWin *this, PgFrameWork *pkFrameWork)
{
  ItemTradeWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  PgSprData *v13; // eax@21
  PgSprData *v14; // edi@22
  PgWin *v15; // ST64_4@22
  PgFont *v16; // ST60_4@22
  unsigned int v17; // ST5C_4@22
  unsigned int v18; // eax@22
  PgWinText *v19; // edi@22
  char *v20; // eax@22
  PgSprData *v21; // edi@22
  PgWin *v22; // ST64_4@22
  PgFont *v23; // ST60_4@22
  unsigned int v24; // ST5C_4@22
  unsigned int v25; // eax@22
  PgWinText *v26; // edi@22
  char *v27; // eax@22
  PgFont *v28; // eax@24
  PgWinText *v29; // eax@24
  PgSprData *v30; // eax@24
  PgWinSpr *v31; // eax@24
  int v32; // ecx@24
  PgFont *v33; // eax@25
  PgWinText *v34; // eax@25
  PgSprData *v35; // eax@25
  PgFont *v36; // eax@26
  PgWinText *v37; // eax@26
  PgFont *v38; // eax@27
  PgWinText *v39; // eax@27
  PgFont *v40; // eax@28
  PgWinText *v41; // eax@28
  PgFont *v42; // eax@29
  PgWinText *v43; // eax@29
  const char *v44; // [sp+60h] [bp-40h]@16
  int *v45; // [sp+64h] [bp-3Ch]@16
  int *v46; // [sp+68h] [bp-38h]@16
  NiSourceTexture *v47; // [sp+6Ch] [bp-34h]@16
  unsigned int uiWidth; // [sp+80h] [bp-20h]@20
  unsigned int uiHeight; // [sp+84h] [bp-1Ch]@20
  int uiLeft; // [sp+88h] [bp-18h]@11
  int uiTop; // [sp+8Ch] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+90h] [bp-10h]@1
  int v53; // [sp+9Ch] [bp-4h]@1
  NiRefObjectVtbl *pkFrameWorka; // [sp+A8h] [bp+8h]@22
  NiRefObjectVtbl *pkFrameWorkb; // [sp+A8h] [bp+8h]@22

  v2 = this;
  spNode.m_pObject = 0;
  v53 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v53 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\ItemTrade.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "ItemTradeWin", 0) )
  {
    v4 = spNode.m_pObject;
    v53 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v47 = v10;
    v46 = &uiTop;
    v45 = &uiLeft;
    v44 = "Theme";
  }
  else
  {
    v47 = 0;
    v46 = &uiTop;
    v45 = &uiLeft;
    v44 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v44, v45, v46, v47);
  v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LotInput", &uiLeft, &uiTop, v3);
    PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkLotInputEdit = EditWin::CreateWin(
                             uiLeft + 2,
                             uiTop + 4,
                             uiWidth,
                             uiHeight,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             NUMBER,
                             0xAu,
                             3u,
                             0,
                             0,
                             1);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor01", &uiLeft, &uiTop, v3);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnClick01");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnOver01");
  v15 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v16 = Font::Get(0);
  v17 = ((int (__thiscall *)(PgWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v15);
  v18 = ((int (__thiscall *)(PgWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v15);
  v19 = PgWinText::CreateWin(0, 1, v18, v17, v16, v15, 0, 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v19,
    5u);
  pkFrameWorka = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = TextData::Get(0x4F5F499Fu);
  pkFrameWorka[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v20);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, v3);
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v22 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v23 = Font::Get(0);
  v24 = ((int (__thiscall *)(PgWin *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v22);
  v25 = ((int (__thiscall *)(PgWin *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v22);
  v26 = PgWinText::CreateWin(0, 1, v25, v24, v23, v22, 0, 0);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v26,
    5u);
  pkFrameWorkb = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = TextData::Get(0x88A297E1u);
  pkFrameWorkb[118].__vecDelDtor((NiRefObject *)v26, (unsigned int)v27);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v28 = Font::Get(0),
        v29 = PgWinText::CreateWin(
                uiLeft,
                uiTop,
                uiWidth,
                uiHeight,
                v28,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkTitleText = v29,
        v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v29,
          5u),
        ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99B697),
        ((void (__stdcall *)(_DWORD))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ItemSlot", &uiLeft, &uiTop, v3),
        v31 = PgWinSpr::CreateWin(uiLeft, uiTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        v32 = uiLeft,
        v2->m_pkItemSlotWin = v31,
        v2->m_pkItemIcon = ItemIcon::CreateWin(v32, uiTop, &v2->baseclass_0.baseclass_0.baseclass_0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ItemName", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v33 = Font::Get(0),
        v34 = PgWinText::CreateWin(
                uiLeft,
                uiTop,
                uiWidth,
                uiHeight,
                v33,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkItemNameText = v34,
        v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v34,
          5u),
        ((void (__stdcall *)(_UNKNOWN *))v2->m_pkItemNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99B6AD),
        ((void (__stdcall *)(_DWORD))v2->m_pkItemNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v3),
        PgWinSpr::CreateWin(uiLeft, uiTop, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GemInput", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v36 = Font::Get(0),
        v37 = PgWinText::CreateWin(
                uiLeft,
                uiTop,
                uiWidth,
                uiHeight,
                v36,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkGemText = v37,
        v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v37,
          5u),
        ((void (__stdcall *)(_UNKNOWN *))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99B6AE),
        ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GoldInput", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v38 = Font::Get(0),
        v39 = PgWinText::CreateWin(
                uiLeft,
                uiTop,
                uiWidth,
                uiHeight,
                v38,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkGoldText = v39,
        v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v39,
          5u),
        ((void (__stdcall *)(_UNKNOWN *))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99B6AF),
        ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "SilverInput", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v40 = Font::Get(0),
        v41 = PgWinText::CreateWin(
                uiLeft,
                uiTop,
                uiWidth,
                uiHeight,
                v40,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkSilverText = v41,
        v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v41,
          5u),
        ((void (__stdcall *)(_UNKNOWN *))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99B6B6),
        ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CopperInput", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
    v53 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v42 = Font::Get(0);
  v43 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkCopperText = v43;
  ((void (__thiscall *)(PgWinText *))v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v43);
  ((void (__cdecl *)(_UNKNOWN *, signed int))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
    &unk_99B6B7,
    5);
  ((void (__cdecl *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__cdecl *)(IDirectMessenger *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  ((void (__thiscall *)(ItemTradeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v53 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00536040) --------------------------------------------------------
void __thiscall ItemTradeWin::OnCmdOk(ItemTradeWin *this)
{
  ItemTradeWin *v1; // esi@1
  EditWin *v2; // ecx@1
  const char *v3; // eax@1
  unsigned int v4; // eax@5
  char *v5; // eax@8
  char temp[256]; // [sp+4h] [bp-104h]@8
  unsigned int v7; // [sp+104h] [bp-4h]@1
  int v8; // [sp+108h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkLotInputEdit;
  v1->m_uiResultValue = 0;
  v3 = (const char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 && *v3 )
    v1->m_uiResultValue = atoi(v3);
  if ( v1->m_pkRevWin )
  {
    v4 = v1->m_uiResultValue;
    if ( v4 && v4 <= v1->m_uiMax )
    {
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v1->m_pkRevWin, 5u, v1->m_uiOkMsg, v1->m_uiResultValue);
    }
    else
    {
      v5 = TextData::Get(0x97A69795u);
      sprintf(temp, v5);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, temp);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00536130) --------------------------------------------------------
void __thiscall ItemTradeWin::OnEditEnd(ItemTradeWin *this, unsigned int wParam, int lParam)
{
  ItemTradeWin *v3; // esi@1

  v3 = this;
  ItemTradeWin::OnCmdOk(this);
  ((void (*)(void))v3->m_pkLotInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (00536150) --------------------------------------------------------
void __thiscall ItemTradeWin::OnCommand(ItemTradeWin *this, unsigned int wParam, int lParam)
{
  ItemTradeWin *v3; // esi@1
  PgWin *v4; // eax@3

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      this->m_uiResultValue = 0;
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      v4 = v3->m_pkRevWin;
      if ( v4 )
        PgWin::PostMsg(&v3->baseclass_0.baseclass_0.baseclass_0, v4, 5u, v3->m_uiOkMsg, 0);
    }
  }
  else
  {
    ItemTradeWin::OnCmdOk(this);
  }
}

//----- (005361A0) --------------------------------------------------------
ItemTradeWin *__cdecl ItemTradeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ItemTradeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x194u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ItemTradeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ItemTradeWin::_vftable_;
    *((_DWORD *)v2 + 100) = 1;
    *((_DWORD *)v2 + 87) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ItemTradeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99B798: using guessed type int (__stdcall *ItemTradeWin___vftable_)(int uiFlags);
// 99B7B4: using guessed type int (__thiscall *ItemTradeWin___vftable_)(void *p, char);

//----- (005362F0) --------------------------------------------------------
void *__thiscall ItemTradeWin::_vector_deleting_destructor_(ItemTradeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemTradeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemTradeWin::_vftable_;
  this->m_pkLotInputEdit = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99B798: using guessed type int (__stdcall *ItemTradeWin___vftable_)(int uiFlags);
// 99B7B4: using guessed type int (__thiscall *ItemTradeWin___vftable_)(void *p, char);

//----- (00536330) --------------------------------------------------------
bool __thiscall ItemUpgradeWin::IsUpgradeSlotItem(ItemUpgradeWin *this)
{
  return ItemIcon::GetItem(&this->m_apkSlotWin[8]->baseclass_0) != 0;
}

//----- (00536350) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::ForgeSlotInvWin(ForgeSlotInvWin *this)
{
  ForgeSlotInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ForgeSlotInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ForgeSlotInvWin::_vftable_;
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_pkSender = 0;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = 1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  v1->m_pkFrameWork = 0;
  v1->m_bLock = 0;
}
// 99BC34: using guessed type int (__stdcall *ForgeSlotInvWin___vftable_)(int uiFlags);
// 99BC54: using guessed type int (__thiscall *ForgeSlotInvWin___vftable_)(void *p, char);

//----- (005363F0) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::_ForgeSlotInvWin(ForgeSlotInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ForgeSlotInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ForgeSlotInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 99BC34: using guessed type int (__stdcall *ForgeSlotInvWin___vftable_)(int uiFlags);
// 99BC54: using guessed type int (__thiscall *ForgeSlotInvWin___vftable_)(void *p, char);

//----- (00536410) --------------------------------------------------------
bool __thiscall ForgeSlotInvWin::Create(ForgeSlotInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  ForgeSlotInvWin *v6; // esi@1
  bool result; // al@1

  v6 = this;
  this->m_pkFrameWork = pkFrameWork;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v6->m_uiInvIndex = uiInvIndex;
    ItemIcon::ShowLotText(&v6->baseclass_0, 0);
    result = 1;
  }
  return result;
}

//----- (00536460) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::SetSlotType(ForgeSlotInvWin *this, unsigned int uiInvType)
{
  this->m_uiInvType = uiInvType;
}

//----- (00536470) --------------------------------------------------------
unsigned int __thiscall ForgeSlotInvWin::GetSlotType(ForgeSlotInvWin *this)
{
  return this->m_uiInvType;
}

//----- (005364B0) --------------------------------------------------------
ForgeSlotInvWin *__thiscall ItemUpgradeWin::GetInsertedOldSlot(ItemUpgradeWin *this, unsigned int _uiSlotNum)
{
  ItemUpgradeWin *v2; // esi@1
  ItemIcon *v4; // ebx@14
  ItemIcon **v5; // esi@14
  signed int v6; // edi@14

  v2 = this;
  if ( _uiSlotNum == 9 )
  {
    if ( ItemIcon::GetItem(&this->m_apkSlotWin[9]->baseclass_0) )
      return v2->m_apkSlotWin[9];
    return 0;
  }
  if ( _uiSlotNum == 10 )
  {
    if ( ItemIcon::GetItem(&this->m_apkSlotWin[10]->baseclass_0) )
      return v2->m_apkSlotWin[10];
    return 0;
  }
  if ( _uiSlotNum == 11 )
  {
    if ( ItemIcon::GetItem(&this->m_apkSlotWin[11]->baseclass_0) )
      return v2->m_apkSlotWin[11];
    return 0;
  }
  if ( _uiSlotNum == 8 )
  {
    if ( ItemIcon::GetItem(&this->m_apkSlotWin[8]->baseclass_0) )
      return v2->m_apkSlotWin[8];
    return 0;
  }
  v4 = 0;
  v5 = (ItemIcon **)this->m_apkSlotWin;
  v6 = 8;
  do
  {
    if ( ItemIcon::GetItem(*v5) )
      v4 = *v5;
    ++v5;
    --v6;
  }
  while ( v6 );
  return (ForgeSlotInvWin *)v4;
}

//----- (00536570) --------------------------------------------------------
void __thiscall ItemUpgradeWin::StopSlotRotate(ItemUpgradeWin *this)
{
  this->m_bUpGradeStart = 1;
  this->m_fAcceleration = 1.8;
}

//----- (00536590) --------------------------------------------------------
bool __thiscall ItemUpgradeWin::IsUpgradingitem(ItemUpgradeWin *this)
{
  return this->m_bUpGradeStart;
}

//----- (005365A0) --------------------------------------------------------
int __thiscall ItemUpgradeWin::GetUpgradeSlotItemClass(ItemUpgradeWin *this)
{
  Item *v1; // eax@1
  int result; // eax@2

  v1 = ItemIcon::GetItem(&this->m_apkSlotWin[8]->baseclass_0);
  if ( v1 )
    result = (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[1].__vecDelDtor)(v1);
  else
    result = -1;
  return result;
}

//----- (005365C0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::OnHelpLink(ItemUpgradeWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ItemUpgrade");
}

//----- (005365F0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::EnableSprSlot(ItemUpgradeWin *this, unsigned int uiSlotNum)
{
  ItemUpgradeWin *v2; // eax@1
  ItemIcon *v3; // ecx@2
  PgWinSpr *v4; // esi@3
  NiRefObjectVtbl *v5; // edi@4
  Item *v6; // eax@4

  v2 = this;
  if ( uiSlotNum < 0xC )
  {
    v3 = (ItemIcon *)this->m_apkSlotWin[uiSlotNum];
    if ( v3 )
    {
      v4 = v2->pkForgeSlot[uiSlotNum];
      if ( v4 )
      {
        v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v6 = ItemIcon::GetItem(v3);
        v5[60].__vecDelDtor((NiRefObject *)v4, v6 == 0);
      }
    }
  }
}

//----- (00536640) --------------------------------------------------------
void __thiscall ItemUpgradeMsgWin::ItemUpgradeMsgWin(ItemUpgradeMsgWin *this)
{
  ItemUpgradeMsgWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkOutlineSpr = 0;
  v1->m_pkGoldSpr = 0;
  v1->m_pkBlueSpr = 0;
  v1->m_pkRedSpr = 0;
  v1->m_pkNoItemText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpgradeMsgWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemUpgradeMsgWin::_vftable_;
}
// 99BEC8: using guessed type int (__stdcall *ItemUpgradeMsgWin___vftable_)(int uiFlags);
// 99BEE4: using guessed type int (__thiscall *ItemUpgradeMsgWin___vftable_)(void *p, char);

//----- (00536680) --------------------------------------------------------
void __thiscall ItemUpgradeMsgWin::_ItemUpgradeMsgWin(ItemUpgradeMsgWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpgradeMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemUpgradeMsgWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 99BEC8: using guessed type int (__stdcall *ItemUpgradeMsgWin___vftable_)(int uiFlags);
// 99BEE4: using guessed type int (__thiscall *ItemUpgradeMsgWin___vftable_)(void *p, char);

//----- (005366B0) --------------------------------------------------------
void __thiscall ItemUpgradeMsgWin::OnClose(ItemUpgradeMsgWin *this)
{
  ItemUpgradeMsgWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkRedSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkBlueSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkNoItemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkOutlineSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (00536730) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::OnFirstHitWin(ForgeSlotInvWin *this)
{
  ForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@5
  unsigned int v3; // ecx@6
  ItemIcon *v4; // ecx@7
  Item *v5; // eax@9
  ItemInfoWin *v6; // ecx@10

  v1 = this;
  if ( !this->m_bLock )
  {
    if ( ItemIcon::GetItem(&this->baseclass_0) )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    else
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2 = v1->m_pkSender;
    if ( v2 )
    {
      v3 = v1->m_uiSenderInvIndex;
      if ( v3 < 0xC0 )
      {
        v4 = (ItemIcon *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
        if ( v4 )
        {
          if ( ItemIcon::GetItem(v4) )
          {
            v5 = ItemIcon::GetItem(&v1->baseclass_0);
            if ( v5 )
            {
              v6 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
              if ( v6 )
              {
                ItemInfoWin::SetItemInfo(v6, v5);
                PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              }
            }
          }
        }
      }
    }
  }
}

//----- (005367C0) --------------------------------------------------------
bool __thiscall ForgeSlotInvWin::SetSenderInvSlotLock(ForgeSlotInvWin *this, bool _bLock)
{
  PgWin *v2; // eax@1
  bool result; // al@2
  unsigned int v4; // ecx@3
  InvWin *v5; // ecx@4

  v2 = this->m_pkSender;
  if ( v2
    && (v4 = this->m_uiSenderInvIndex, v4 < 0xC0)
    && (v5 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v4 + 2])) != 0 )
  {
    InvWin::SetLock(v5, _bLock);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00536800) --------------------------------------------------------
void __thiscall ItemUpgradeWin::_ItemUpgradeWin(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6
  NiNode *v4; // edi@11
  NiNode *v5; // edi@16
  NiNode *v6; // edi@21
  NiNode *v7; // edi@26
  NiNode *v8; // edi@30
  NiNode *v9; // edi@34
  NiNode *v10; // edi@38
  NiNode *v11; // edi@42

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpgradeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemUpgradeWin::_vftable_;
  v2 = this->m_spEffect_SUCC_1.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spEffect_SUCC_1.m_pObject = 0;
  }
  v3 = v1->m_spEffect_SUCC_2.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spEffect_SUCC_2.m_pObject = 0;
  }
  v4 = v1->m_spEffect_FAIL_0.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spEffect_FAIL_0.m_pObject = 0;
  }
  v5 = v1->m_spEffect_FAIL_1.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spEffect_FAIL_1.m_pObject = 0;
  }
  v6 = v1->m_spEffect_DESTROY.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spEffect_DESTROY.m_pObject = 0;
  }
  v7 = v1->m_spEffect_DESTROY.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spEffect_FAIL_1.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spEffect_FAIL_0.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  v10 = v1->m_spEffect_SUCC_2.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_spEffect_SUCC_1.m_pObject;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  NsEffect::_NsEffect(&v1->m_kEffect);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99C108: using guessed type int (__stdcall *ItemUpgradeWin___vftable_)(int uiFlags);
// 99C124: using guessed type int (__thiscall *ItemUpgradeWin___vftable_)(void *p, char);

//----- (00536A50) --------------------------------------------------------
void __thiscall ItemUpgradeWin::ProcessMeInput(ItemUpgradeWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (00536AD0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::OnCancel(ItemUpgradeWin *this)
{
  GameFrameWork::CloseItemUpgradeWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
}

//----- (00536AE0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::UpGradeResult(ItemUpgradeWin *this, unsigned int dwUpgradeResult)
{
  this->m_fAcceleration = 1.8;
  *(_WORD *)&this->m_bUpGradeStart = 257;
  this->m_dwUpResult = dwUpgradeResult;
  if ( dwUpgradeResult != 2243 && dwUpgradeResult != 2244 && dwUpgradeResult != 14339 && dwUpgradeResult != 15367 )
  {
    if ( dwUpgradeResult != 15368 )
      this->m_nSuccessTargetSlot = (rand() % 7 + this->m_nSuccessTargetSlot + 1) % 8;
  }
}

//----- (00536B60) --------------------------------------------------------
void __thiscall ItemUpgradeWin::StartResultEffect(ItemUpgradeWin *this, NiAVObject *_pEffect)
{
  ItemUpgradeWin *v2; // esi@1

  v2 = this;
  this->m_pCurObject = _pEffect;
  NsEffect::SetEffectNode(&this->m_kEffect, _pEffect);
  NsEffect::Start(&v2->m_kEffect, Timer::ms_fCurTime);
  v2->m_kMarkCheck.m_fMarkTime = v2->m_kEffect.m_fMaxTime;
  CNSTimer_MarkCheck::ReSet(&v2->m_kMarkCheck, Timer::ms_fCurTime, OVER);
  ((void (__stdcall *)(_DWORD, _DWORD))v2->pkForgeSlot[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    _pEffect,
    1);
  NiAVObject::UpdateProperties(&v2->pkForgeSlot[8]->baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::UpdateEffects(&v2->pkForgeSlot[8]->baseclass_0.baseclass_0.baseclass_0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00536BF0) --------------------------------------------------------
bool __thiscall ItemUpgradeWin::IsSameGrade(ItemUpgradeWin *this, Item *pkUpSource)
{
  bool result; // al@2
  Item *v3; // eax@3

  if ( pkUpSource && (v3 = ItemIcon::GetItem(&this->m_apkSlotWin[8]->baseclass_0)) != 0 )
    result = pkUpSource->m_pkInfo->Grade == v3->m_pkInfo->Grade;
  else
    result = 0;
  return result;
}

//----- (00536C30) --------------------------------------------------------
bool __thiscall ItemUpgradeWin::IsBraceletUpsourceItem(ItemUpgradeWin *this, Item *pkUpSource)
{
  signed int v2; // eax@2
  char *v3; // ecx@2
  bool result; // al@5

  if ( pkUpSource )
  {
    v2 = 0;
    v3 = (char *)this->m_BraceletGradeItemID;
    while ( pkUpSource->m_kStruct.itemid != *(_WORD *)v3 )
    {
      ++v2;
      v3 += 2;
      if ( v2 >= 4 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00536C60) --------------------------------------------------------
char *__thiscall ItemUpgradeWin::GetBraceletUpsourceName(ItemUpgradeWin *this)
{
  Item *v1; // eax@1
  char *result; // eax@2

  v1 = Item::Create(this->m_BraceletGradeItemID[0]);
  if ( v1 )
    result = v1->m_pkInfo->Name;
  else
    result = 0;
  return result;
}

//----- (00536C80) --------------------------------------------------------
char *__thiscall ItemUpgradeWin::GetUpgradeSlotItemName(ItemUpgradeWin *this)
{
  Item *v1; // eax@1
  char *result; // eax@2

  v1 = ItemIcon::GetItem(&this->m_apkSlotWin[8]->baseclass_0);
  if ( v1 )
    result = v1->m_pkInfo->Name;
  else
    result = 0;
  return result;
}

//----- (00536CA0) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::DoAction(ForgeSlotInvWin *this)
{
  ForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00536CD0) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::DoRAction(ForgeSlotInvWin *this)
{
  ForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00536D00) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::ReSetSlot(ForgeSlotInvWin *this)
{
  ForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@1
  unsigned int v3; // ecx@2
  InvWin *v4; // ecx@3

  v1 = this;
  v2 = this->m_pkSender;
  this->m_bLock = 0;
  if ( v2 )
  {
    v3 = this->m_uiSenderInvIndex;
    if ( v3 < 0xC0 )
    {
      v4 = (InvWin *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
      if ( v4 )
        InvWin::SetLock(v4, 0);
    }
  }
  v1->m_uiSenderType = -1;
  v1->m_uiSenderInvIndex = -1;
  v1->m_pkSender = 0;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}

//----- (00536D60) --------------------------------------------------------
bool __thiscall ItemUpgradeWin::DropForgeSlot(ItemUpgradeWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop)
{
  ItemUpgradeWin *v3; // edi@1
  ForgeSlotInvWin *v4; // esi@1
  bool result; // al@2
  ItemIcon *v6; // eax@4
  signed int v7; // esi@5
  ItemIcon **v8; // edi@5
  Item *v9; // ebx@7
  ItemIcon *v10; // ecx@12
  PgWinSpr *v11; // ebx@13
  NiRefObjectVtbl *v12; // esi@14
  Item *v13; // eax@14
  ItemIcon *v14; // ecx@17
  PgWinSpr *v15; // edi@18
  NiRefObjectVtbl *v16; // ebx@19
  Item *v17; // eax@19
  PgWin *v18; // eax@20
  unsigned int v19; // esi@21
  InvWin *v20; // ecx@22
  void *pkContents; // [sp+8h] [bp-14h]@3
  ForgeSlotInvWin *pOldSlot; // [sp+10h] [bp-Ch]@4
  ItemUpgradeWin *v23; // [sp+14h] [bp-8h]@1
  ForgeSlotInvWin *pSlot; // [sp+18h] [bp-4h]@1

  v3 = this;
  v4 = this->m_apkSlotWin[uiReceiverInvIndex];
  v23 = this;
  pSlot = v4;
  if ( v4 && (pkContents = pkDrop->m_pkContents) != 0 )
  {
    v6 = (ItemIcon *)ItemUpgradeWin::GetInsertedOldSlot(this, uiReceiverInvIndex);
    pOldSlot = (ForgeSlotInvWin *)v6;
    if ( v6 )
    {
      v7 = 0;
      v8 = (ItemIcon **)v3->m_apkSlotWin;
      while ( 1 )
      {
        v9 = ItemIcon::GetItem(v6);
        if ( ItemIcon::GetItem(*v8) == v9 )
          break;
        ++v7;
        ++v8;
        if ( v7 >= 8 )
        {
          v7 = -1;
          break;
        }
        v6 = (ItemIcon *)pOldSlot;
      }
      ForgeSlotInvWin::ReSetSlot(pOldSlot);
      v3 = v23;
      if ( v7 != -1 )
      {
        if ( (unsigned int)v7 < 0xC )
        {
          v10 = (ItemIcon *)v23->m_apkSlotWin[v7];
          if ( v10 )
          {
            v11 = v23->pkForgeSlot[v7];
            if ( v11 )
            {
              v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v13 = ItemIcon::GetItem(v10);
              v12[60].__vecDelDtor((NiRefObject *)v11, v13 == 0);
            }
          }
        }
      }
      v4 = pSlot;
    }
    v4->m_uiSenderType = *((_DWORD *)pkContents + 2);
    v4->m_uiSenderInvIndex = *((_DWORD *)pkContents + 3);
    v4->m_pkSender = pkDrop->m_pkSender;
    ItemIcon::SetItem(&v4->baseclass_0, *((Item **)pkContents + 5), 1);
    if ( uiReceiverInvIndex < 0xC )
    {
      v14 = (ItemIcon *)v3->m_apkSlotWin[uiReceiverInvIndex];
      if ( v14 )
      {
        v15 = v3->pkForgeSlot[uiReceiverInvIndex];
        if ( v15 )
        {
          v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v17 = ItemIcon::GetItem(v14);
          v16[60].__vecDelDtor((NiRefObject *)v15, v17 == 0);
        }
      }
    }
    v18 = v4->m_pkSender;
    if ( v18 )
    {
      v19 = v4->m_uiSenderInvIndex;
      if ( v19 < 0xC0 )
      {
        v20 = (InvWin *)LODWORD(v18[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v19 + 2]);
        if ( v20 )
          InvWin::SetLock(v20, 1);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00536EC0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::ResetAllData(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // edi@1
  char *v2; // ebx@1
  int v3; // esi@2
  int v4; // eax@2
  unsigned int v5; // ecx@3
  InvWin *v6; // eax@4
  PgWinText *v7; // eax@7
  NiRefObjectVtbl *v8; // esi@7
  char *v9; // eax@7
  signed int v10; // [sp+Ch] [bp-4h]@1

  v1 = this;
  this->m_pkSlotOn->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v1->m_pkSprBomb[0]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v1->m_pkSprBomb[1]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  this->m_pkSprBomb[2]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2 = (char *)this->m_apkSlotWin;
  v10 = 12;
  do
  {
    v3 = *(_DWORD *)v2;
    v4 = *(_DWORD *)(*(_DWORD *)v2 + 472);
    *(_BYTE *)(*(_DWORD *)v2 + 448) = 0;
    if ( v4 )
    {
      v5 = *(_DWORD *)(v3 + 460);
      if ( v5 < 0xC0 )
      {
        v6 = *(InvWin **)(v4 + 4 * v5 + 348);
        if ( v6 )
          InvWin::SetLock(v6, 0);
      }
    }
    *(_DWORD *)(v3 + 456) = -1;
    *(_DWORD *)(v3 + 460) = -1;
    *(_DWORD *)(v3 + 472) = 0;
    ItemIcon::SetItem((ItemIcon *)v3, 0, 1);
    v2 += 4;
    --v10;
  }
  while ( v10 );
  v7 = v1->m_pkStartTextWin;
  v1->m_bUpGradeStart = 0;
  v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = TextData::Get(0xCF06FADCu);
  v8[118].__vecDelDtor((NiRefObject *)v1->m_pkStartTextWin, (unsigned int)v9);
}

//----- (00536FB0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::StartSlotRotate(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1
  int v4; // eax@1

  v1 = this;
  v2 = this->m_pkStartTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData::Get(0x30798C95u);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkStartTextWin, (unsigned int)v3);
  v1->m_dwUpResult = 0;
  v1->m_fRotateStartTime = Timer::ms_fCurTime;
  CNSTimer_Interval::ReSet(&v1->m_kTimerInterval, v1->m_fRotateStartTime);
  v1->m_fSpeed = 15.0;
  *(_WORD *)&v1->m_bUpGradeStart = 1;
  v1->m_eUpgradeState = 1;
  v4 = v1->m_nSuccessTargetSlot;
  v1->m_kTimerInterval.m_fCheckTime = 0.06666667;
  v1->m_nBombCount = 0;
  v1->m_fAcceleration = 0.0;
  v1->m_nCurRotatePos = v4;
  v1->m_pkSlotOn->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00537060) --------------------------------------------------------
void __thiscall ItemUpgradeWin::AssistItemShow(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1

  v1 = this;
  ForgeSlotInvWin::ReSetSlot(this->m_apkSlotWin[9]);
  ForgeSlotInvWin::ReSetSlot(v1->m_apkSlotWin[10]);
  ForgeSlotInvWin::ReSetSlot(v1->m_apkSlotWin[11]);
  IconWin::ShowFocus(&v1->m_apkSlotWin[9]->baseclass_0.baseclass_0, v1->m_bNormalUpgradeWin);
  IconWin::ShowFocus(&v1->m_apkSlotWin[10]->baseclass_0.baseclass_0, v1->m_bNormalUpgradeWin);
  IconWin::ShowFocus(&v1->m_apkSlotWin[11]->baseclass_0.baseclass_0, v1->m_bNormalUpgradeWin);
  ((void (__stdcall *)(_DWORD))v1->pkForgeSlot[9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bNormalUpgradeWin);
  ((void (__stdcall *)(_DWORD))v1->pkForgeSlot[10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bNormalUpgradeWin);
  ((void (__stdcall *)(_DWORD))v1->pkForgeSlot[11]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v1->m_bNormalUpgradeWin);
}

//----- (00537110) --------------------------------------------------------
bool __thiscall ItemUpgradeMsgWin::Create(ItemUpgradeMsgWin *this, PgFrameWork *pkFrameWork)
{
  ItemUpgradeMsgWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  PgWinSpr *v8; // eax@10
  PgWinSpr *v9; // eax@10
  char *v10; // eax@10
  PgWinSpr *v11; // eax@10
  char *v12; // eax@10
  PgWinSpr *v13; // eax@10
  char *v14; // eax@10
  char *v15; // edi@10
  unsigned int v16; // ST18_4@10
  D3DXCOLOR v17; // ST1C_16@10
  int v18; // ST0C_4@10
  int v19; // eax@10
  int v20; // eax@10
  char *v21; // edi@10
  unsigned int v22; // ST1C_4@10
  D3DXCOLOR v23; // ST20_16@10
  int v24; // ST10_4@10
  int v25; // eax@10
  int v26; // eax@10
  D3DXCOLOR v27; // ST1C_16@10
  char *v28; // eax@10
  D3DXCOLOR v29; // ST1C_16@10
  char *v30; // eax@10
  PgWinText *v31; // eax@10
  NiNode *v32; // esi@11
  bool v33; // [sp+1Ch] [bp-38h]@0
  UIUtil ui; // [sp+28h] [bp-2Ch]@10
  int uiLeft; // [sp+3Ch] [bp-18h]@4
  int uiTop; // [sp+40h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+44h] [bp-10h]@1
  int v38; // [sp+50h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v38 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ItemUpgradeMsg.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "ItemUpgradeMsgWin", 0) )
  {
    v6 = spNode.m_pObject;
    v38 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v38) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Theme", 0);
  v8 = UIUtil::CreateSpr(&ui, "Panel02", 0);
  v2->m_pkOutlineSpr = v8;
  ((void (__thiscall *)(PgWinSpr *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
  v9 = UIUtil::CreateSpr(&ui, "GoldNine", 0);
  v2->m_pkGoldSpr = v9;
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v2->m_pkGoldSpr->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v10 = TextData3::Get(0x2701DC06u);
  PgWin::SetToolTipWinText(&v2->m_pkGoldSpr->baseclass_0, v10);
  v11 = UIUtil::CreateSpr(&ui, "BlueMile", 0);
  v2->m_pkBlueSpr = v11;
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  v2->m_pkBlueSpr->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v12 = TextData3::Get(0x2200E502u);
  PgWin::SetToolTipWinText(&v2->m_pkBlueSpr->baseclass_0, v12);
  v13 = UIUtil::CreateSpr(&ui, "RedEye", 0);
  v2->m_pkRedSpr = v13;
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v2->m_pkRedSpr->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v14 = TextData3::Get(0xD3CED007u);
  PgWin::SetToolTipWinText(&v2->m_pkRedSpr->baseclass_0, v14);
  v15 = (char *)UIUtil::CreateButton(&ui, 0, "Btn01", 0, 3);
  v16 = (unsigned int)Color::m_kDxWhiteColor.r;
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor.g;
  *(_QWORD *)&v17.b = __PAIR__(5, LODWORD(Color::m_kDxWhiteColor.a));
  v18 = (int)TextData::Get(0x4F5F499Fu);
  v19 = (*(int (__thiscall **)(char *))(*(_DWORD *)v15 + 148))(v15);
  v20 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v15 + 144))(v15, v19);
  UIUtil::CreateTextNoTag(&ui, 0, 0, v20, v18, v15, 0, v16, COERCE_D3DXCOLOR(v17.r), 0, 0, 0);
  v21 = (char *)UIUtil::CreateButton(&ui, 1u, "Btn02", 0, 3);
  v22 = (unsigned int)Color::m_kDxWhiteColor.r;
  *(_QWORD *)&v23.r = *(_QWORD *)&Color::m_kDxWhiteColor.g;
  *(_QWORD *)&v23.b = __PAIR__(5, LODWORD(Color::m_kDxWhiteColor.a));
  v24 = (int)TextData::Get(0x45B392ACu);
  v25 = (*(int (__thiscall **)(char *))(*(_DWORD *)v21 + 148))(v21);
  v26 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v21 + 144))(v21, v25);
  UIUtil::CreateTextNoTag(&ui, 0, 0, v26, v24, v21, 0, v22, COERCE_D3DXCOLOR(v23.r), 0, 0, v33);
  *(_QWORD *)&v27.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v27.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v28 = TextData3::Get(0xA1867FCFu);
  UIUtil::CreateTextEx(&ui, "Text01", v28, 0, COERCE_D3DXCOLOR(v27.r), 5u, 0, 0, 0);
  *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v30 = TextData3::Get(0x236A4146u);
  v31 = UIUtil::CreateTextEx(&ui, "Text02", v30, 0, COERCE_D3DXCOLOR(v29.r), 5u, 0, 0, 0);
  v2->m_pkNoItemText = v31;
  ((void (__thiscall *)(PgWinText *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v31);
  ((void (__thiscall *)(ItemUpgradeMsgWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v38) = 0;
  UIUtil::_UIUtil(&ui);
  v38 = -1;
  if ( spNode.m_pObject )
  {
    v32 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v32 )
        v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00537560) --------------------------------------------------------
void __thiscall ItemUpgradeMsgWin::OnShowWin(ItemUpgradeMsgWin *this)
{
  ItemUpgradeMsgWin *v1; // esi@1
  PgFrameWork *v2; // eax@1
  unsigned int v3; // edi@2
  char v4; // bl@3
  unsigned int v5; // eax@6
  Item *v6; // ecx@7

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = v2[15].m_kMsgQ.m_uiAlloced;
    if ( v3 )
    {
      v4 = 0;
      if ( *(_BYTE *)(v3 + 726) == -1 )
      {
        ((void (__stdcall *)(_DWORD))v1->m_pkRedSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v4 = 1;
      }
      if ( *(_BYTE *)(v3 + 727) == -1 )
      {
        v5 = *(_BYTE *)(v3 + 724);
        if ( v5 < 0xC0 )
        {
          v6 = g_kInventory.m_aspInv[v5].m_pObject;
          if ( v6 )
          {
            if ( ((int (*)(void))v6->baseclass_0.vfptr[9].__vecDelDtor)() )
            {
              ((void (__stdcall *)(_DWORD))v1->m_pkBlueSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              v4 = 1;
            }
          }
        }
      }
      if ( *(_BYTE *)(v3 + 728) == -1 )
      {
        ((void (__stdcall *)(_DWORD))v1->m_pkGoldSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      else
      {
        if ( !v4 )
          return;
      }
      ((void (__stdcall *)(_DWORD))v1->m_pkNoItemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v1->m_pkOutlineSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
  }
}

//----- (00537640) --------------------------------------------------------
void __thiscall ForgeSlotInvWin::ReSetInitSlot(ForgeSlotInvWin *this)
{
  ForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@1
  unsigned int v3; // ecx@2
  ItemIcon *v4; // ecx@3
  Item *v5; // eax@4

  v1 = this;
  v2 = this->m_pkSender;
  if ( v2 )
  {
    v3 = this->m_uiSenderInvIndex;
    if ( v3 < 0xC0 )
    {
      v4 = (ItemIcon *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
      if ( v4 )
      {
        v5 = ItemIcon::GetItem(v4);
        if ( v5 )
        {
          v1->m_bLock = 0;
          ItemIcon::SetItem(&v1->baseclass_0, v5, 1);
        }
        else
        {
          ForgeSlotInvWin::ReSetSlot(v1);
        }
      }
    }
  }
}

//----- (00537690) --------------------------------------------------------
void __thiscall ItemUpgradeWin::DirectMessage(ItemUpgradeWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ItemUpgradeWin *v4; // esi@1
  int v5; // eax@4
  signed int v6; // ecx@4
  int v7; // edi@5

  v4 = this;
  if ( iMsgTag == 27 && pvBody && !*(_DWORD *)pvBody )
  {
    ItemUpgradeWin::StartSlotRotate((ItemUpgradeWin *)((char *)this - 232));
    v5 = (int)&v4->baseclass_0.m_iDragOffX;
    v6 = 12;
    do
    {
      v7 = *(_DWORD *)v5;
      v5 += 4;
      --v6;
      *(_BYTE *)(v7 + 448) = 1;
    }
    while ( v6 );
    GameFrameWork::NcItemUpgradeReq(
      LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
      LOBYTE(v4->pkForgeSlot[9]),
      BYTE1(v4->pkForgeSlot[9]),
      BYTE2(v4->pkForgeSlot[9]),
      BYTE3(v4->pkForgeSlot[9]),
      LOBYTE(v4->pkForgeSlot[10]),
      (unsigned int)v4->pkForgeSlot[11]);
    v4->pkForgeSlot[9] = (PgWinSpr *)-1;
    LOBYTE(v4->pkForgeSlot[10]) = -1;
    v4->pkForgeSlot[11] = 0;
  }
}

//----- (00537740) --------------------------------------------------------
void __thiscall ItemUpgradeWin::StartUpgrade(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1
  int v2; // eax@1
  signed int v3; // ecx@1
  int v4; // edi@2
  int v5; // eax@3

  v1 = this;
  ItemUpgradeWin::StartSlotRotate(this);
  v2 = (int)v1->m_apkSlotWin;
  v3 = 12;
  do
  {
    v4 = *(_DWORD *)v2;
    v2 += 4;
    --v3;
    *(_BYTE *)(v4 + 448) = 1;
  }
  while ( v3 );
  v5 = v1->m_UpgradeType;
  if ( v5 )
  {
    if ( v5 == 1 )
    {
      GameFrameWork::NcItemNewUpGradeReq(
        (GameFrameWork *)v1->baseclass_0.m_pkFrameWork,
        v1->m_bEquipSlot,
        v1->m_bRawSlot);
    }
    else
    {
      if ( v5 == 2 )
        GameFrameWork::NcItemBraceletUpgradeReq(
          (GameFrameWork *)v1->baseclass_0.m_pkFrameWork,
          v1->m_bEquipSlot,
          v1->m_bRawSlot);
    }
  }
  else
  {
    GameFrameWork::NcItemUpgradeReq(
      (GameFrameWork *)v1->baseclass_0.m_pkFrameWork,
      v1->m_bEquipSlot,
      v1->m_bRawSlot,
      v1->m_bGemRedSlot,
      v1->m_bGemBlueSlot,
      v1->m_bGoldNineSlot,
      v1->m_dwMoney);
  }
}

//----- (00537800) --------------------------------------------------------
void __thiscall ItemUpgradeWin::ResetAllDataWithoutItem(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // edi@1
  signed int v2; // ebx@1
  ForgeSlotInvWin *v3; // esi@3
  PgWin *v4; // eax@3
  unsigned int v5; // ecx@4
  InvWin *v6; // eax@5
  ItemIcon *v7; // ecx@8
  PgWinSpr *v8; // ebx@9
  NiRefObjectVtbl *v9; // esi@10
  Item *v10; // eax@10
  unsigned int v11; // eax@14
  ForgeSlotInvWin *v12; // esi@17
  PgWin *v13; // eax@17
  unsigned int v14; // ecx@18
  ItemIcon *v15; // ecx@19
  Item *v16; // eax@20
  signed int i; // [sp+Ch] [bp-4h]@1

  v1 = this;
  this->m_pkSlotOn->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v1->m_pkSprBomb[0]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v1->m_pkSprBomb[1]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v1->m_pkSprBomb[2]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2 = 0;
  i = 0;
  do
  {
    if ( v2 == 8 )
    {
      v11 = v1->m_dwUpResult;
      if ( v11 != 2247 && v11 != 15371 )
      {
        v12 = v1->m_apkSlotWin[8];
        v13 = v12->m_pkSender;
        if ( v13 )
        {
          v14 = v12->m_uiSenderInvIndex;
          if ( v14 < 0xC0 )
          {
            v15 = (ItemIcon *)LODWORD(v13[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v14 + 2]);
            if ( v15 )
            {
              v16 = ItemIcon::GetItem(v15);
              if ( v16 )
              {
                v12->m_bLock = 0;
                ItemIcon::SetItem(&v12->baseclass_0, v16, 1);
              }
              else
              {
                ForgeSlotInvWin::ReSetSlot(v12);
              }
            }
          }
        }
      }
      else
      {
        ForgeSlotInvWin::ReSetSlot(v1->m_apkSlotWin[8]);
      }
LABEL_8:
      v7 = (ItemIcon *)v1->m_apkSlotWin[v2];
      if ( v7 )
      {
        v8 = v1->pkForgeSlot[v2];
        if ( v8 )
        {
          v9 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v10 = ItemIcon::GetItem(v7);
          v9[60].__vecDelDtor((NiRefObject *)v8, v10 == 0);
        }
        v2 = i;
      }
      goto LABEL_12;
    }
    v3 = v1->m_apkSlotWin[v2];
    v4 = v3->m_pkSender;
    v3->m_bLock = 0;
    if ( v4 )
    {
      v5 = v3->m_uiSenderInvIndex;
      if ( v5 < 0xC0 )
      {
        v6 = (InvWin *)LODWORD(v4[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v5 + 2]);
        if ( v6 )
          InvWin::SetLock(v6, 0);
      }
    }
    v3->m_uiSenderType = -1;
    v3->m_uiSenderInvIndex = -1;
    v3->m_pkSender = 0;
    ItemIcon::SetItem(&v3->baseclass_0, 0, 1);
    if ( (unsigned int)v2 < 0xC )
      goto LABEL_8;
LABEL_12:
    ++v2;
    i = v2;
  }
  while ( v2 < 12 );
  v1->m_bUpGradeStart = 0;
  *(_DWORD *)&v1->m_bEquipSlot = -1;
  v1->m_bGoldNineSlot = -1;
  v1->m_dwMoney = 0;
}

//----- (005379A0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::EndSlotRotate(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1
  unsigned int v2; // ecx@1
  PgFrameWork *v3; // edi@5
  GameFrameWork *v4; // ecx@5
  PgFrameWork *v5; // edi@6
  PgFrameWork *v6; // edi@7
  PgFrameWork *v7; // edi@8
  PgFrameWork *v8; // edi@9
  PgFrameWork *v9; // edi@10
  PgFrameWork *v10; // edi@11
  PgFrameWork *v11; // edi@12
  PgFrameWork *v12; // edi@13
  PgFrameWork *v13; // edi@14
  PgFrameWork *v14; // edi@15
  PgFrameWork *v15; // edi@16
  PgFrameWork *v16; // edi@17
  PgFrameWork *v17; // edi@18
  PgFrameWork *v18; // edi@19
  PgFrameWork *v19; // edi@20
  PgFrameWork *v20; // edi@21
  PgFrameWork *v21; // edi@31
  Item *v22; // ebx@34
  Item *v23; // eax@34
  PgFrameWork *v24; // ST1C_4@36
  char *v25; // eax@36
  char *v26; // eax@36
  PgFrameWork *v27; // edi@37
  PgFrameWork *v28; // edi@38
  PgWinText *v29; // eax@48
  NiRefObjectVtbl *v30; // edi@48
  char *v31; // eax@48
  unsigned int v32; // [sp-4h] [bp-98h]@4
  char *v33; // [sp-4h] [bp-98h]@5
  NiAVObject *v34; // [sp-4h] [bp-98h]@26
  NiAVObject *v35; // [sp-4h] [bp-98h]@28
  char szErrorCode[128]; // [sp+10h] [bp-84h]@43
  unsigned int v37; // [sp+90h] [bp-4h]@1
  int v38; // [sp+94h] [bp+0h]@1

  v37 = (unsigned int)&v38 ^ __security_cookie;
  v1 = this;
  v2 = this->m_dwUpResult;
  if ( v2 > 0x3801 )
  {
    if ( v2 > 0x3C01 )
    {
      switch ( v2 )
      {
        case 0x3C07u:
$LN17_26:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_SUCC_1.m_pObject->baseclass_0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPGOOD);
          v32 = 593906556;
          goto LABEL_5;
        case 0x3C02u:
        case 0x3C04u:
          v22 = Item::Create(v1->m_UpgradedItemID);
          v23 = Item::Create(v1->m_UpsourceItemID);
          if ( !v22 || !v23 )
            goto LABEL_45;
          v24 = v1->baseclass_0.m_pkFrameWork;
          ItemUpgradeWin::GetBraceletUpsourceName(v1);
          v25 = TextData3::Get(0xF4333A4Bu);
          v26 = fs(v25);
          v4 = (GameFrameWork *)v24;
          v33 = v26;
          goto LABEL_44;
        case 0x3C05u:
          v27 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData3::Get(0x4EA8C4C2u);
          v4 = (GameFrameWork *)v27;
          goto LABEL_44;
        case 0x3C03u:
          v28 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData3::Get(0x4779B4D5u);
          v4 = (GameFrameWork *)v28;
          goto LABEL_44;
        case 0x3C08u:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_SUCC_2.m_pObject->baseclass_0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPBEST);
          v32 = 610683772;
          goto LABEL_5;
        case 0x3C09u:
          v34 = (NiAVObject *)v1->m_spEffect_FAIL_0.m_pObject;
LABEL_27:
          ItemUpgradeWin::StartResultEffect(v1, v34);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPWORST);
          v32 = 1922737530;
          goto LABEL_5;
        case 0x3C0Au:
          v35 = (NiAVObject *)v1->m_spEffect_FAIL_1.m_pObject;
LABEL_29:
          ItemUpgradeWin::StartResultEffect(v1, v35);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPWORST);
          v32 = 313827963;
          goto LABEL_5;
        case 0x3C0Bu:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_DESTROY.m_pObject->baseclass_0);
          v32 = 609371264;
          goto LABEL_5;
        default:
          goto LABEL_43;
      }
      goto LABEL_43;
    }
    if ( v2 != 15361 )
    {
      switch ( v2 )
      {
        case 0x3802u:
          goto $LN35_7;
        case 0x3803u:
          goto $LN17_26;
        case 0x3804u:
          v34 = (NiAVObject *)v1->m_spEffect_FAIL_0.m_pObject;
          goto LABEL_27;
        case 0x3805u:
          v35 = (NiAVObject *)v1->m_spEffect_FAIL_1.m_pObject;
          goto LABEL_29;
        case 0x3806u:
          v32 = -1226578909;
          goto LABEL_5;
        case 0x3807u:
          v21 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData2::Get(0xFF869D74u);
          v4 = (GameFrameWork *)v21;
          goto LABEL_44;
        case 0x3808u:
          v32 = 2123540171;
          goto LABEL_5;
        default:
          goto LABEL_43;
      }
      goto LABEL_43;
    }
$LN35_7:
    v32 = -1787109935;
LABEL_5:
    v3 = v1->baseclass_0.m_pkFrameWork;
    v33 = TextData::Get(v32);
    v4 = (GameFrameWork *)v3;
  }
  else
  {
    if ( v2 != 14337 )
    {
      switch ( v2 )
      {
        case 0x8C2u:
          goto $LN35_7;
        case 0x8C3u:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_SUCC_1.m_pObject->baseclass_0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPGOOD);
          v5 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x23664B7Cu);
          v4 = (GameFrameWork *)v5;
          goto LABEL_44;
        case 0x8C4u:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_SUCC_2.m_pObject->baseclass_0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPBEST);
          v6 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x24664B7Cu);
          v4 = (GameFrameWork *)v6;
          goto LABEL_44;
        case 0x8C5u:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_FAIL_0.m_pObject->baseclass_0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPWORST);
          v7 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x729AA57Au);
          v4 = (GameFrameWork *)v7;
          goto LABEL_44;
        case 0x8C6u:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_FAIL_1.m_pObject->baseclass_0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_UPWORST);
          v8 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x12B4A27Bu);
          v4 = (GameFrameWork *)v8;
          goto LABEL_44;
        case 0x8C7u:
          ItemUpgradeWin::StartResultEffect(v1, &v1->m_spEffect_DESTROY.m_pObject->baseclass_0);
          v9 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x24524480u);
          v4 = (GameFrameWork *)v9;
          goto LABEL_44;
        case 0x8C8u:
          v10 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0xB6E3E423u);
          v4 = (GameFrameWork *)v10;
          goto LABEL_44;
        case 0x8C9u:
          v11 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData2::Get(0xFF869D74u);
          v4 = (GameFrameWork *)v11;
          goto LABEL_44;
        case 0x8CAu:
          v12 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x7E92A6CBu);
          v4 = (GameFrameWork *)v12;
          goto LABEL_44;
        case 0x8CBu:
          v13 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x304F412Du);
          v4 = (GameFrameWork *)v13;
          goto LABEL_44;
        case 0x8CFu:
          v14 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x2B90B779u);
          v4 = (GameFrameWork *)v14;
          goto LABEL_44;
        case 0x8D2u:
          v15 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0x60DFB2B8u);
          v4 = (GameFrameWork *)v15;
          goto LABEL_44;
        case 0x8D3u:
          v16 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0xA6EBB6AFu);
          v4 = (GameFrameWork *)v16;
          goto LABEL_44;
        case 0x8D4u:
          v17 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0xA5E2B9B4u);
          v4 = (GameFrameWork *)v17;
          goto LABEL_44;
        case 0x8D0u:
          v18 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0xC9114F0Du);
          v4 = (GameFrameWork *)v18;
          goto LABEL_44;
        case 0x8D1u:
          v19 = v1->baseclass_0.m_pkFrameWork;
          v33 = TextData::Get(0xC0575B11u);
          v4 = (GameFrameWork *)v19;
          goto LABEL_44;
        default:
          break;
      }
LABEL_43:
      sprintf(szErrorCode, " Upgrade Error (Code:%d)");
      v4 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v33 = szErrorCode;
      goto LABEL_44;
    }
    v20 = v1->baseclass_0.m_pkFrameWork;
    v33 = TextData3::Get(0xED462021u);
    v4 = (GameFrameWork *)v20;
  }
LABEL_44:
  GameFrameWork::AddSysMsg(v4, v33);
LABEL_45:
  ItemUpgradeWin::ResetAllDataWithoutItem(v1);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    TutorialMgr::TutorialMgr(&kTutorialMgr);
    atexit(_dynamic_atexit_destuctor_for__kTutorialMgr__);
  }
  TutorialMgr::On_NC_ITEM_UPGRADE_ACK(&kTutorialMgr);
  v29 = v1->m_pkStartTextWin;
  v1->m_eUpgradeState = 0;
  v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = TextData::Get(0xCF06FADCu);
  v30[118].__vecDelDtor((NiRefObject *)v1->m_pkStartTextWin, (unsigned int)v31);
  *(_DWORD *)&v1->m_UpgradedItemID = -1;
}
// A85C00: using guessed type int __security_cookie;
// A98300: using guessed type int _local static guard_;

//----- (00537F40) --------------------------------------------------------
void __thiscall ItemUpgradeWin::UpdateSlotRotate(ItemUpgradeWin *this, float fCurTime)
{
  ItemUpgradeWin *v2; // esi@1
  ItemUpgradeWin::UpgradeState v3; // eax@2
  float v4; // ST10_4@3
  unsigned int v5; // edi@5
  int v6; // ecx@7
  unsigned int v7; // eax@8
  int v8; // edi@17
  int v9; // ebx@17
  int v10; // eax@20
  float v11; // edi@21
  int v12; // ebx@28
  int v13; // edi@28
  PgWinSpr *v14; // eax@28
  float fCurSpeed; // [sp+10h] [bp-4h]@3

  v2 = this;
  if ( this->m_bUpGradeStart )
  {
    v3 = this->m_eUpgradeState;
    if ( v3 == 1 )
    {
      v4 = fCurTime - this->m_fRotateStartTime;
      fCurSpeed = this->m_fSpeed - v4 * this->m_fAcceleration;
      if ( fCurSpeed < 1.700000047683716 )
        fCurSpeed = 1.6;
      this->m_kTimerInterval.m_fCheckTime = 1.0 / fCurSpeed;
      v5 = CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime);
      if ( v5 )
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, "SFX_SlotOne");
      v6 = (signed int)(v5 + v2->m_nCurRotatePos) % 8;
      v2->m_nCurRotatePos = v6;
      if ( fCurSpeed < 1.700000047683716 )
      {
        v7 = v2->m_dwUpResult;
        if ( v7 == 2243 || v7 == 14339 || v7 == 15367 || v7 == 15368 || v7 == 2244 )
        {
          if ( v2->m_nSuccessTargetSlot == v6 )
          {
            v2->m_eUpgradeState = 3;
            CNSTimer_Interval::ReSet(&v2->m_kTimerInterval, fCurTime);
            v2->m_kTimerInterval.m_fCheckTime = 0.66666669;
          }
        }
        else
        {
          if ( v2->m_nSuccessTargetSlot == v6 )
            v2->m_eUpgradeState = 2;
        }
      }
      v8 = ((int (*)(void))v2->pkForgeSlot[v2->m_nCurRotatePos]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)();
      v9 = ((int (*)(void))v2->pkForgeSlot[v2->m_nCurRotatePos]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[50].__vecDelDtor)();
      ((void (__stdcall *)(_DWORD))v2->m_pkSlotOn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v8);
      ((void (__stdcall *)(_DWORD))v2->m_pkSlotOn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v9);
    }
    else
    {
      if ( v3 == 3 )
      {
        if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime) )
        {
          v10 = v2->m_nBombCount;
          if ( v10 )
          {
            if ( v10 == 1 )
            {
              LODWORD(v11) = 8;
            }
            else
            {
              if ( v10 == 2 )
                LODWORD(v11) = v2->m_nCurRawSlot;
              else
                v11 = fCurTime;
            }
          }
          else
          {
            SoundMgr::PlayInterfaceSound(&g_kSoundMgr, "SFX_SlotEnd");
            LODWORD(v11) = v2->m_nSuccessTargetSlot;
          }
          if ( v2->m_nBombCount < 3 )
          {
            v2->m_pkSlotOn->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
            v12 = ((int (*)(void))v2->pkForgeSlot[LODWORD(v11)]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)();
            v13 = ((int (*)(void))v2->pkForgeSlot[LODWORD(v11)]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[50].__vecDelDtor)();
            ((void (__stdcall *)(_DWORD))v2->m_pkSprBomb[v2->m_nBombCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v12);
            ((void (__stdcall *)(_DWORD))v2->m_pkSprBomb[v2->m_nBombCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v13);
            v14 = v2->m_pkSprBomb[v2->m_nBombCount];
            v14->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
          }
          ++v2->m_nBombCount;
        }
        if ( v2->m_nBombCount >= 4 )
          ItemUpgradeWin::EndSlotRotate(v2);
      }
      else
      {
        if ( v3 == 2 && CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime) )
          ItemUpgradeWin::EndSlotRotate(v2);
      }
    }
  }
}

//----- (005381F0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::ChangeUpgradeWin(ItemUpgradeWin *this, bool bNormalWin, int iUpgradeType)
{
  ItemUpgradeWin *v3; // edi@1
  GameFrameWork *v4; // esi@5
  char *v5; // eax@5
  NiRefObjectVtbl *v6; // esi@7
  char *v7; // eax@7
  ItemIcon **v8; // esi@7
  Item *v9; // ebx@9
  Item *v10; // eax@10
  int v11; // eax@14
  int v12; // ebx@15
  Item *v13; // eax@15
  GameFrameWork *v14; // ebx@17
  char *v15; // eax@17
  char *v16; // eax@18
  NiRefObjectVtbl *v17; // esi@20
  char *v18; // eax@20
  int v19; // esi@20
  int v20; // ebx@20
  int v21; // ecx@22
  ItemIcon **v22; // esi@24
  Item *v23; // ebx@26
  Item *v24; // eax@27
  ItemIcon *v25; // ecx@30
  int v26; // ebx@31
  int v27; // esi@32
  Item *v28; // eax@32
  GameFrameWork *v29; // ebx@34
  char *v30; // eax@34
  char *v31; // eax@37
  char *v32; // eax@37
  int v33; // [sp+10h] [bp-4h]@24
  signed int i; // [sp+1Ch] [bp+8h]@7
  signed int ia; // [sp+1Ch] [bp+8h]@24
  int iUpgradeTypea; // [sp+20h] [bp+Ch]@14

  v3 = this;
  this->m_UpgradeType = iUpgradeType;
  this->m_bNormalUpgradeWin = bNormalWin;
  if ( !bNormalWin
    && (ItemIcon::GetItem(&this->m_apkSlotWin[9]->baseclass_0)
     || ItemIcon::GetItem(&v3->m_apkSlotWin[10]->baseclass_0)
     || ItemIcon::GetItem(&v3->m_apkSlotWin[11]->baseclass_0)) )
  {
    v4 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
    v5 = TextData3::Get(0xEF71897Fu);
    GameFrameWork::AddSysMsg(v4, v5);
  }
  if ( v3->m_bNormalUpgradeWin )
  {
    v6 = v3->m_pkForgeFirstText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = TextData::Get(0x333F8F7Eu);
    v6[118].__vecDelDtor((NiRefObject *)v3->m_pkForgeFirstText, (unsigned int)v7);
    ((void (__stdcall *)(signed int))v3->m_pkForgeSecondText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    i = 0;
    v8 = (ItemIcon **)v3->m_apkSlotWin;
    do
    {
      if ( ItemIcon::GetItem(*v8) )
      {
        v9 = ItemIcon::GetItem(*v8);
        if ( !v9
          || (v10 = ItemIcon::GetItem(&v3->m_apkSlotWin[8]->baseclass_0)) == 0
          || v9->m_pkInfo->Grade != v10->m_pkInfo->Grade )
        {
          ForgeSlotInvWin::ReSetSlot((ForgeSlotInvWin *)*v8);
          if ( (unsigned int)i < 0xC )
          {
            if ( *v8 )
            {
              v11 = (int)*(v8 - 19);
              iUpgradeTypea = v11;
              if ( v11 )
              {
                v12 = *(_DWORD *)v11;
                v13 = ItemIcon::GetItem(*v8);
                (*(void (__thiscall **)(int, _DWORD))(v12 + 240))(iUpgradeTypea, v13 == 0);
              }
            }
          }
          if ( ItemIcon::GetItem(&v3->m_apkSlotWin[8]->baseclass_0) )
          {
            v14 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
            v15 = TextData3::Get(0xED462021u);
            GameFrameWork::AddSysMsg(v14, v15);
          }
        }
      }
      v16 = TextData::Get(0xD5174325u);
      PgWin::SetToolTipWinText(&(*(v8 - 19))->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v16);
      ++v8;
      ++i;
    }
    while ( i < 8 );
    ItemUpgradeWin::AssistItemShow(v3);
  }
  else
  {
    v17 = v3->m_pkForgeFirstText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v18 = TextData3::Get(0xBCE0AFCFu);
    ((void (__thiscall *)(PgWinText *, char *, _DWORD))v17[120].__vecDelDtor)(v3->m_pkForgeFirstText, v18, 0);
    ((void (__stdcall *)(_DWORD))v3->m_pkForgeSecondText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v19 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v20 = v3->m_GradeItemID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v3->m_GradeItemID) )
    {
      if ( (unsigned __int16)v20 <= *(_WORD *)(v19 + 200) )
      {
        v21 = *(_DWORD *)(v19 + 196);
        if ( *(_DWORD *)(v21 + 4 * v20) )
        {
          if ( *(_DWORD *)(v21 + 4 * v20) )
          {
            v22 = (ItemIcon **)v3->m_apkSlotWin;
            ia = 0;
            v33 = (int)v3->m_apkSlotWin;
            do
            {
              if ( ItemIcon::GetItem(*v22) )
              {
                v23 = ItemIcon::GetItem(*v22);
                if ( !v23
                  || (v24 = ItemIcon::GetItem(&v3->m_apkSlotWin[8]->baseclass_0)) == 0
                  || v23->m_pkInfo->Grade != v24->m_pkInfo->Grade )
                {
                  ForgeSlotInvWin::ReSetSlot((ForgeSlotInvWin *)*v22);
                  if ( (unsigned int)ia < 0xC )
                  {
                    v25 = *v22;
                    if ( *v22 )
                    {
                      v26 = (int)*(v22 - 19);
                      if ( v26 )
                      {
                        v27 = *(_DWORD *)v26;
                        v28 = ItemIcon::GetItem(v25);
                        (*(void (__thiscall **)(int, _DWORD))(v27 + 240))(v26, v28 == 0);
                        v22 = (ItemIcon **)v33;
                      }
                    }
                  }
                  if ( ItemIcon::GetItem(&v3->m_apkSlotWin[8]->baseclass_0) )
                  {
                    v29 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
                    v30 = TextData3::Get(0xED462021u);
                    GameFrameWork::AddSysMsg(v29, v30);
                  }
                }
              }
              if ( iUpgradeType != 1 )
                Item::Create(v3->m_BraceletGradeItemID[0]);
              v31 = TextData3::Get(0x5FFCC4C7u);
              v32 = fs(v31);
              PgWin::SetToolTipWinText(&(*(v22 - 19))->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v32);
              ++v22;
              ++ia;
              v33 = (int)v22;
            }
            while ( ia < 8 );
            ItemUpgradeWin::AssistItemShow(v3);
          }
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00538540) --------------------------------------------------------
void __thiscall ItemUpgradeMsgWin::OnApply(ItemUpgradeMsgWin *this)
{
  ItemUpgradeMsgWin *v1; // edi@1
  PgFrameWork *v2; // eax@1
  unsigned int v3; // ebx@2
  int v4; // eax@3
  GameFrameWork *v5; // esi@6
  char *v6; // eax@6
  char *v7; // eax@6
  int v8; // eax@7
  GameFrameWork *v9; // esi@10
  char *v10; // eax@10
  char *v11; // eax@10
  int v12; // eax@11
  GameFrameWork *v13; // esi@14
  char *v14; // eax@14
  char *v15; // eax@14
  int v16; // eax@15
  GameFrameWork *v17; // esi@18
  char *v18; // eax@18
  char *v19; // eax@18

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = v2[15].m_kMsgQ.m_uiAlloced;
    if ( v3 )
    {
      ItemUpgradeWin::StartUpgrade((ItemUpgradeWin *)v3);
      LOBYTE(v4) = *(_BYTE *)(v3 + 725);
      if ( (_BYTE)v4 != -1 )
      {
        v4 = (unsigned __int8)v4;
        if ( (unsigned __int8)v4 < 0xC0u )
        {
          if ( g_kInventory.m_aspInv[v4].m_pObject )
          {
            v5 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
            v6 = TextData3::Get(0xB95AF4F3u);
            v7 = fs(v6);
            GameFrameWork::AddSysMsg(v5, v7);
          }
        }
      }
      LOBYTE(v8) = *(_BYTE *)(v3 + 726);
      if ( (_BYTE)v8 != -1 )
      {
        v8 = (unsigned __int8)v8;
        if ( (unsigned __int8)v8 < 0xC0u )
        {
          if ( g_kInventory.m_aspInv[v8].m_pObject )
          {
            v9 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
            v10 = TextData3::Get(0xB95AF4F3u);
            v11 = fs(v10);
            GameFrameWork::AddSysMsg(v9, v11);
          }
        }
      }
      LOBYTE(v12) = *(_BYTE *)(v3 + 728);
      if ( (_BYTE)v12 != -1 )
      {
        v12 = (unsigned __int8)v12;
        if ( (unsigned __int8)v12 < 0xC0u )
        {
          if ( g_kInventory.m_aspInv[v12].m_pObject )
          {
            v13 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
            v14 = TextData3::Get(0xB95AF4F3u);
            v15 = fs(v14);
            GameFrameWork::AddSysMsg(v13, v15);
          }
        }
      }
      LOBYTE(v16) = *(_BYTE *)(v3 + 727);
      if ( (_BYTE)v16 != -1 )
      {
        v16 = (unsigned __int8)v16;
        if ( (unsigned __int8)v16 < 0xC0u )
        {
          if ( g_kInventory.m_aspInv[v16].m_pObject )
          {
            v17 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
            v18 = TextData3::Get(0xB95AF4F3u);
            v19 = fs(v18);
            GameFrameWork::AddSysMsg(v17, v19);
          }
        }
      }
      PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    }
  }
}

//----- (005386B0) --------------------------------------------------------
bool __thiscall ForgeSlotInvWin::EatDropInstance(ForgeSlotInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  ForgeSlotInvWin *v4; // ebx@1
  void *v5; // eax@3
  PgFrameWork *v6; // ebx@4
  char *v7; // eax@4
  int v9; // esi@8
  PgWin *v10; // edi@10
  unsigned int v11; // eax@11
  GameFrameWork *v12; // ebx@18
  char *v13; // eax@18
  char *v14; // eax@29
  int v15; // eax@37
  int v16; // eax@50
  unsigned int v17; // [sp-10h] [bp-14h]@28
  unsigned int v18; // [sp-Ch] [bp-10h]@17

  v4 = this;
  if ( this->m_bLock )
    goto LABEL_5;
  if ( !*pkDrop )
    return 0;
  v5 = (*pkDrop)->m_pkContents;
  if ( *((_DWORD *)v5 + 2) )
  {
    v6 = this->m_pkFrameWork;
    v7 = TextData3::Get(0x4779B4D5u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v7);
LABEL_5:
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( *((_DWORD *)v5 + 4) )
    goto LABEL_5;
  v9 = *((_DWORD *)v5 + 5);
  if ( !v9 )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  v10 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( !v10 )
    return 0;
  v11 = v4->m_uiInvType;
  if ( !v11 )
  {
    if ( !*(_BYTE *)(*(_DWORD *)(v9 + 112) + 240)
      || (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9) == 14
      || (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9) == 19
      || (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v9) == 20
      || (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v9) == 25 )
    {
      v18 = -1226578909;
LABEL_18:
      v12 = (GameFrameWork *)v4->m_pkFrameWork;
      v13 = TextData::Get(v18);
LABEL_19:
      GameFrameWork::AddSysMsg(v12, v13);
LABEL_20:
      PgCursor::ms_bKeepDrop = 1;
      return 0;
    }
    goto LABEL_48;
  }
  if ( v11 != 1 )
  {
    if ( v11 == 2 )
    {
      if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v9) != 19 )
      {
        v18 = 153303337;
        goto LABEL_18;
      }
    }
    else
    {
      if ( v11 == 3 )
      {
        if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v9) != 20 )
        {
          v18 = 354889839;
          goto LABEL_18;
        }
      }
      else
      {
        if ( v11 != 4 )
          goto LABEL_20;
        if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v9) != 25 )
        {
          v18 = 204092782;
          goto LABEL_18;
        }
      }
    }
    goto LABEL_48;
  }
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v9) != 14 )
  {
    v18 = 119947882;
    goto LABEL_18;
  }
  if ( ItemUpgradeWin::IsUpgradeSlotItem((ItemUpgradeWin *)v10) )
  {
    if ( ItemUpgradeWin::IsBraceletUpsourceItem((ItemUpgradeWin *)v10, (Item *)v9) == 1 )
    {
      if ( ItemUpgradeWin::GetUpgradeSlotItemClass((ItemUpgradeWin *)v10) == 38 )
        goto LABEL_48;
      v12 = (GameFrameWork *)v4->m_pkFrameWork;
      ItemUpgradeWin::GetUpgradeSlotItemName((ItemUpgradeWin *)v10);
      v17 = -197969332;
LABEL_29:
      v14 = TextData3::Get(v17);
      v13 = fs(v14);
      goto LABEL_19;
    }
    if ( *(_DWORD *)(*(_DWORD *)(v9 + 112) + 131) == 6 )
    {
      if ( ItemUpgradeWin::GetUpgradeSlotItemClass((ItemUpgradeWin *)v10) == 38 )
      {
        v12 = (GameFrameWork *)v4->m_pkFrameWork;
        ItemUpgradeWin::GetBraceletUpsourceName((ItemUpgradeWin *)v10);
        v17 = 1610400967;
        goto LABEL_29;
      }
      if ( ItemUpgradeWin::IsSameGrade((ItemUpgradeWin *)v10, (Item *)v9) )
        goto LABEL_48;
      v12 = (GameFrameWork *)v4->m_pkFrameWork;
    }
    else
    {
      if ( !v10[2].baseclass_0.m_kChildren.m_uiSize )
        goto LABEL_48;
      v15 = ItemUpgradeWin::GetUpgradeSlotItemClass((ItemUpgradeWin *)v10);
      v12 = (GameFrameWork *)v4->m_pkFrameWork;
      if ( v15 == 38 )
      {
        ItemUpgradeWin::GetBraceletUpsourceName((ItemUpgradeWin *)v10);
        v17 = 1610400967;
        goto LABEL_29;
      }
    }
    v13 = TextData3::Get(0xED462021u);
    goto LABEL_19;
  }
LABEL_48:
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v9) == 38
    || ItemUpgradeWin::IsBraceletUpsourceItem((ItemUpgradeWin *)v10, (Item *)v9) == 1 )
    v16 = 2;
  else
    v16 = *(_DWORD *)(*(_DWORD *)(v9 + 112) + 131) == 6;
  if ( v16 != v10[2].baseclass_0.m_kChildren.m_uiSize )
    ItemUpgradeWin::ChangeUpgradeWin((ItemUpgradeWin *)v10, v16 == 0, v16);
  return ItemUpgradeWin::DropForgeSlot((ItemUpgradeWin *)v10, v4->m_uiInvIndex, *pkDrop);
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (00538950) --------------------------------------------------------
void __thiscall ItemUpgradeWin::UpdateMeWin(ItemUpgradeWin *this, float fCurTime)
{
  ItemUpgradeWin *v2; // esi@1
  float v3; // edi@4

  v2 = this;
  ItemUpgradeWin::UpdateSlotRotate(this, fCurTime);
  if ( CNSTimer_MarkCheck::Update(&v2->m_kMarkCheck, Timer::ms_fCurTime) == 1 )
  {
    if ( v2->m_pCurObject )
    {
      ((void (__stdcall *)(_DWORD, _DWORD))v2->pkForgeSlot[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &fCurTime,
        v2->m_pCurObject);
      if ( fCurTime != 0.0 )
      {
        v3 = fCurTime;
        if ( !InterlockedDecrement((volatile LONG *)(LODWORD(fCurTime) + 4)) )
        {
          if ( LODWORD(v3) )
            (*(void (__thiscall **)(_DWORD, _DWORD))*LODWORD(v3))(LODWORD(v3), 1);
        }
      }
    }
    v2->m_pCurObject = 0;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005389D0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::OnApply(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1
  PgFrameWork *v2; // esi@2
  char *v3; // eax@2
  ForgeSlotInvWin *v4; // ebx@3
  Item *v5; // edi@3
  ItemIcon **v6; // ebx@4
  GameFrameWork *v7; // esi@10
  char *v8; // eax@10
  ItemInfo *v9; // ebx@14
  unsigned int v10; // eax@14
  Item *v11; // ebx@19
  GameFrameWork *v12; // ST30_4@21
  char *v13; // eax@21
  GameFrameWork *v14; // ST30_4@24
  char *v15; // eax@24
  unsigned int v16; // ST30_4@26
  GameFrameWork *v17; // ebx@27
  char *v18; // eax@27
  Item *v19; // ebx@28
  GameFrameWork *v20; // ST2C_4@30
  char *v21; // eax@30
  GameFrameWork *v22; // ST2C_4@33
  char *v23; // eax@33
  unsigned int v24; // ST2C_4@35
  GameFrameWork *v25; // ebx@36
  char *v26; // eax@36
  GameFrameWork *v27; // ebx@39
  char *v28; // eax@39
  GameFrameWork *v29; // edi@42
  char *v30; // eax@42
  unsigned int v31; // edi@44
  unsigned int v32; // ebx@48
  unsigned int v33; // edi@49
  bool v34; // zf@51
  PgWin *v35; // esi@53
  GameFrameWork *v36; // edi@55
  char *v37; // eax@55
  GameFrameWork *v38; // esi@58
  char *v39; // eax@58
  unsigned int v40; // [sp-Ch] [bp-28h]@13
  Item *pBlueGem; // [sp+4h] [bp-18h]@19
  ItemIcon *pRawSlot; // [sp+8h] [bp-14h]@3
  Item *pItemRaw; // [sp+Ch] [bp-10h]@4
  signed int pGoldNine; // [sp+10h] [bp-Ch]@4
  Item *pGoldNinea; // [sp+10h] [bp-Ch]@19
  char rawSlot; // [sp+16h] [bp-6h]@9
  char equipSlot; // [sp+17h] [bp-5h]@4
  char GoldNineSlot; // [sp+18h] [bp-4h]@3
  char gemBlueSlot; // [sp+19h] [bp-3h]@3
  char gemRedSlot; // [sp+1Ah] [bp-2h]@3
  char bGemResult; // [sp+1Bh] [bp-1h]@19

  v1 = this;
  if ( this->m_bUpGradeStart )
  {
    v2 = this->baseclass_0.m_pkFrameWork;
    v3 = TextData::Get(0xC7E4E718u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v2, v3);
    return;
  }
  v4 = this->m_apkSlotWin[8];
  gemRedSlot = -1;
  gemBlueSlot = -1;
  GoldNineSlot = -1;
  pRawSlot = 0;
  v5 = ItemIcon::GetItem(&v4->baseclass_0);
  if ( !v5 )
  {
    v40 = 1771407352;
    goto LABEL_58;
  }
  equipSlot = LOBYTE(v4->m_uiSenderInvIndex);
  v1->m_UpgradedItemID = v5->m_kStruct.itemid;
  pItemRaw = 0;
  v6 = (ItemIcon **)v1->m_apkSlotWin;
  pGoldNine = 8;
  do
  {
    if ( ItemIcon::GetItem(*v6) )
    {
      pItemRaw = ItemIcon::GetItem(*v6);
      pRawSlot = *v6;
    }
    ++v6;
    --pGoldNine;
  }
  while ( pGoldNine );
  if ( !pItemRaw )
  {
    v40 = -883880437;
    goto LABEL_58;
  }
  rawSlot = LOBYTE(pRawSlot[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spControllers.m_pObject);
  v1->m_UpsourceItemID = pItemRaw->m_kStruct.itemid;
  v1->m_nSuccessTargetSlot = ((unsigned __int8)pRawSlot[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_ppkExtra
                            - 4) & 7;
  v1->m_nCurRawSlot = (int)pRawSlot[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_ppkExtra;
  if ( ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) >= v5->m_pkInfo->UpLimit )
  {
    v7 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
    v8 = TextData3::Get(0x4EA8C4C2u);
    GameFrameWork::AddSysMsg(v7, v8);
    return;
  }
  if ( v1->m_UpgradeType != 2 )
  {
    if ( ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) < pItemRaw->m_pkInfo->UpLimit )
    {
      v40 = -872603382;
LABEL_58:
      v38 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v39 = TextData::Get(v40);
      GameFrameWork::AddSysMsg(v38, v39);
      return;
    }
    v9 = pItemRaw->m_pkInfo;
    v10 = v9->Grade;
    if ( v5->m_pkInfo->Grade != v10 && v10 )
    {
      v40 = -1176520779;
      goto LABEL_58;
    }
    if ( ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) > v9->UpResource )
    {
      v40 = -939907822;
      goto LABEL_58;
    }
  }
  v11 = ItemIcon::GetItem(&v1->m_apkSlotWin[9]->baseclass_0);
  pBlueGem = ItemIcon::GetItem(&v1->m_apkSlotWin[10]->baseclass_0);
  pGoldNinea = ItemIcon::GetItem(&v1->m_apkSlotWin[11]->baseclass_0);
  bGemResult = 1;
  if ( v11 )
  {
    gemRedSlot = LOBYTE(v1->m_apkSlotWin[9]->m_uiSenderInvIndex);
    if ( v5->m_pkInfo->Grade != v11->m_pkInfo->Grade )
    {
      v12 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v13 = TextData::Get(0xBFDF0804u);
      GameFrameWork::AddSysMsg(v12, v13);
      bGemResult = 0;
    }
    if ( ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) < v11->m_pkInfo->UpLimit
      || ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) > v11->m_pkInfo->UpResource )
    {
      v14 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v15 = TextData::Get(0x96CCDCC7u);
      GameFrameWork::AddSysMsg(v14, v15);
      bGemResult = 0;
    }
    if ( (unsigned int)((int (__thiscall *)(_DWORD))v11->baseclass_0.vfptr[3].__vecDelDtor)(v11) < 1
      || (v16 = ((int (__thiscall *)(_DWORD))v11->baseclass_0.vfptr[4].__vecDelDtor)(v11),
          ((int (__thiscall *)(_DWORD))v11->baseclass_0.vfptr[3].__vecDelDtor)(v11) > v16) )
    {
      v17 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v18 = TextData::Get(0xD5BED8EFu);
      GameFrameWork::AddSysMsg(v17, v18);
      bGemResult = 0;
    }
  }
  v19 = pBlueGem;
  if ( pBlueGem )
  {
    gemBlueSlot = LOBYTE(v1->m_apkSlotWin[10]->m_uiSenderInvIndex);
    if ( v5->m_pkInfo->Grade != pBlueGem->m_pkInfo->Grade )
    {
      v20 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v21 = TextData::Get(0xA641020Eu);
      GameFrameWork::AddSysMsg(v20, v21);
      bGemResult = 0;
    }
    if ( ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) < v19->m_pkInfo->UpLimit
      || ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) > v19->m_pkInfo->UpResource )
    {
      v22 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v23 = TextData::Get(0x90D6C329u);
      GameFrameWork::AddSysMsg(v22, v23);
      bGemResult = 0;
    }
    if ( (unsigned int)((int (__thiscall *)(_DWORD))v19->baseclass_0.vfptr[3].__vecDelDtor)(v19) < 1
      || (v24 = ((int (__thiscall *)(_DWORD))v19->baseclass_0.vfptr[4].__vecDelDtor)(v19),
          ((int (__thiscall *)(_DWORD))v19->baseclass_0.vfptr[3].__vecDelDtor)(v19) > v24) )
    {
      v25 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v26 = TextData::Get(0xE1C2CF35u);
      GameFrameWork::AddSysMsg(v25, v26);
      bGemResult = 0;
    }
  }
  if ( pGoldNinea )
  {
    GoldNineSlot = LOBYTE(v1->m_apkSlotWin[11]->m_uiSenderInvIndex);
    if ( v5->m_pkInfo->Grade != pGoldNinea->m_pkInfo->Grade )
    {
      v27 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v28 = TextData::Get(0xA5380513u);
      GameFrameWork::AddSysMsg(v27, v28);
      bGemResult = 0;
    }
    if ( ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) < pGoldNinea->m_pkInfo->UpLimit
      || ((int (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[9].__vecDelDtor)(v5) > pGoldNinea->m_pkInfo->UpResource )
    {
      v29 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v30 = TextData::Get(0x93DBC220u);
      GameFrameWork::AddSysMsg(v29, v30);
      bGemResult = 0;
    }
    if ( (unsigned int)((int (__thiscall *)(_DWORD))pGoldNinea->baseclass_0.vfptr[3].__vecDelDtor)(pGoldNinea) < 1
      || (v31 = ((int (__thiscall *)(_DWORD))pGoldNinea->baseclass_0.vfptr[4].__vecDelDtor)(pGoldNinea),
          ((int (__thiscall *)(_DWORD))pGoldNinea->baseclass_0.vfptr[3].__vecDelDtor)(pGoldNinea) > v31) )
    {
      v40 = -658123724;
      goto LABEL_58;
    }
  }
  if ( !bGemResult )
    return;
  if ( (unsigned int)((int (__thiscall *)(_DWORD))pItemRaw->baseclass_0.vfptr[3].__vecDelDtor)(pItemRaw) < 1
    || (v32 = ((int (__thiscall *)(_DWORD))pItemRaw->baseclass_0.vfptr[4].__vecDelDtor)(pItemRaw),
        ((int (__thiscall *)(_DWORD))pItemRaw->baseclass_0.vfptr[3].__vecDelDtor)(pItemRaw) > v32) )
  {
    v36 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
    v37 = TextData::Get(0x946B8C9Cu);
    GameFrameWork::AddSysMsg(v36, v37);
    v40 = 730969977;
    goto LABEL_58;
  }
  v33 = User::ConvertMoney(0i64, 0i64, 0i64, 0i64);
  if ( v33 > User::GetMoney(&g_kUser) )
  {
    v40 = -1285540828;
    goto LABEL_58;
  }
  v34 = v1->m_bNormalUpgradeWin == 0;
  v1->m_bEquipSlot = equipSlot;
  v1->m_bRawSlot = rawSlot;
  v1->m_bGemRedSlot = gemRedSlot;
  v1->m_bGemBlueSlot = gemBlueSlot;
  v1->m_bGoldNineSlot = GoldNineSlot;
  v1->m_dwMoney = v33;
  if ( v34 )
  {
    ItemUpgradeWin::StartUpgrade(v1);
  }
  else
  {
    v35 = (PgWin *)v1->m_pkItemUpgradeMsgWin;
    if ( v35 )
      PgWinMgr::DoModal(&Pgg_kWinMgr, v35, 0, 0, 0);
  }
}

//----- (00538F80) --------------------------------------------------------
void __thiscall ItemUpgradeWin::OnSlotLClick(ItemUpgradeWin *this, unsigned int _uiSlotIndex)
{
  ItemUpgradeWin *v2; // esi@1
  ForgeSlotInvWin *v3; // edi@3
  Item *v4; // eax@4
  unsigned int v5; // ecx@5
  ItemIcon *v6; // ecx@6

  v2 = this;
  if ( this->m_bUpGradeStart )
  {
    PgCursor::ms_bKeepDrop = 1;
  }
  else
  {
    v3 = this->m_apkSlotWin[_uiSlotIndex];
    if ( v3 )
    {
      v4 = ItemIcon::GetItem(&this->m_apkSlotWin[_uiSlotIndex]->baseclass_0);
      if ( v4 )
      {
        v2->m_kDropContents.m_eSenderType = v3->m_uiSenderType;
        v2->m_kDropContents.m_eType = 0;
        v5 = v3->m_uiSenderInvIndex;
        v2->m_kDropContents.m_apvParam[0] = v4;
        v2->m_kDropContents.m_uiSenderIndex = v5;
        v2->m_kDropContents.m_apvParam[1] = 0;
        v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        v2->m_kDrop.m_pkSender = v3->m_pkSender;
        PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
        ForgeSlotInvWin::ReSetSlot(v3);
        ItemUpgradeWin::EnableSprSlot(v2, _uiSlotIndex);
        if ( !v2->m_bNormalUpgradeWin )
        {
          v6 = (ItemIcon *)v2->m_apkSlotWin[8];
          if ( v6 )
          {
            if ( !ItemIcon::GetItem(v6) )
              ItemUpgradeWin::ChangeUpgradeWin(v2, 1, 0);
          }
        }
      }
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (00539050) --------------------------------------------------------
void __thiscall ItemUpgradeWin::OnCommand(ItemUpgradeWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      ItemUpgradeWin::OnSlotLClick(this, lParam);
      break;
    case 0xCu:
      ItemUpgradeWin::OnApply(this);
      break;
    case 0xDu:
      GameFrameWork::CloseItemUpgradeWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
      break;
    case 0xFu:
      ItemUpgradeWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005390B0) --------------------------------------------------------
void __thiscall ItemUpgradeWin::OnClose(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1

  v1 = this;
  ItemUpgradeWin::ResetAllData(this);
  ItemUpgradeWin::ChangeUpgradeWin(v1, 1, 0);
}

//----- (005390D0) --------------------------------------------------------
void __thiscall ItemUpgradeMsgWin::OnCommand(ItemUpgradeMsgWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
  }
  else
  {
    ItemUpgradeMsgWin::OnApply(this);
  }
}

//----- (00539100) --------------------------------------------------------
ForgeSlotInvWin *__cdecl ForgeSlotInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  ForgeSlotInvWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x1DCu);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    ForgeSlotInvWin::ForgeSlotInvWin((ForgeSlotInvWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *, PgFrameWork *))(*(_DWORD *)v7 + 616))(
                          v7,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (ForgeSlotInvWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (00539240) --------------------------------------------------------
ItemUpgradeMsgWin *__cdecl ItemUpgradeMsgWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ItemUpgradeMsgWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x16Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ItemUpgradeMsgWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ItemUpgradeMsgWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ItemUpgradeMsgWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99BEC8: using guessed type int (__stdcall *ItemUpgradeMsgWin___vftable_)(int uiFlags);
// 99BEE4: using guessed type int (__thiscall *ItemUpgradeMsgWin___vftable_)(void *p, char);

//----- (005393A0) --------------------------------------------------------
bool __thiscall ItemUpgradeWin::Create(ItemUpgradeWin *this, PgFrameWork *pkFrameWork)
{
  ItemUpgradeWin *v2; // esi@1
  char *v3; // eax@3
  NiNode *v4; // eax@3
  NiNode *v5; // edi@3
  NiNode *v6; // ebx@3
  char *v7; // eax@12
  NiNode *v8; // eax@12
  NiNode *v9; // edi@12
  NiNode *v10; // ebx@12
  char *v11; // eax@21
  NiNode *v12; // eax@21
  NiNode *v13; // edi@21
  NiNode *v14; // ebx@21
  char *v15; // eax@30
  NiNode *v16; // eax@30
  NiNode *v17; // edi@30
  NiNode *v18; // ebx@30
  char *v19; // eax@39
  NiNode *v20; // eax@39
  NiNode *v21; // edi@39
  NiNode *v22; // ebx@39
  void *v23; // edi@46
  NiNode *v24; // esi@47
  bool result; // al@52
  NiTexturePalette *v26; // ebx@53
  char *v27; // eax@55
  PgSprData *v28; // eax@56
  int v29; // edi@59
  int v30; // ebx@59
  NiSourceTexture *v31; // eax@59
  PgSprData *v32; // eax@62
  PgFont *v33; // eax@64
  PgWinText *v34; // eax@64
  NiRefObjectVtbl *v35; // edx@64
  char *v36; // eax@64
  PgSprData *v37; // eax@64
  PgSprData *v38; // eax@64
  NiAVObject *v39; // eax@64
  void *v40; // eax@64
  int v41; // eax@66
  NiSourceTexture *v42; // eax@67
  PgSprData *v43; // eax@69
  void *v44; // eax@69
  NiRefObjectVtbl *v45; // edx@69
  PgSprData *v46; // eax@71
  PgSprData::PgHitTester *v47; // eax@71
  void *v48; // edx@71
  PgFont *v49; // eax@71
  PgWinText *v50; // eax@71
  char *v51; // eax@71
  PgSprData::PgHitTester *v52; // eax@71
  void *v53; // edx@71
  PgFont *v54; // eax@71
  PgWinText *v55; // eax@71
  NiRefObjectVtbl *v56; // edx@71
  char *v57; // eax@71
  PgSprData *v58; // eax@71
  NiPointer<PgSprData::PgHitTester> *v59; // edx@71
  void *v60; // ecx@71
  void *v61; // edx@71
  PgFont *v62; // eax@71
  PgWinText *v63; // eax@71
  char *v64; // eax@71
  PgSprData::PgHitTester *v65; // eax@71
  void *v66; // edx@71
  PgFont *v67; // eax@71
  PgWinText *v68; // eax@71
  char *v69; // eax@71
  PgSprData *v70; // eax@71
  PgSprData *v71; // eax@72
  PgWinSpr *v72; // eax@72
  PgFrameWork *v73; // ST44_4@72
  int v74; // edx@72
  ForgeSlotInvWin *v75; // eax@72
  PgSprData *v76; // ecx@72
  char *v77; // eax@73
  PgWin *v78; // ecx@73
  char *v79; // eax@74
  char *v80; // eax@75
  char *v81; // eax@76
  IconWin **v82; // ecx@79
  PgSprData *v83; // eax@80
  PgWinSpr *v84; // eax@80
  NiSourceTexture *v85; // ST50_4@80
  NiNode *v86; // ecx@80
  void *v87; // eax@80
  PgWinSpr *v88; // eax@80
  PgSprData *v89; // ecx@80
  int v90; // edx@80
  PgWinSpr *v91; // eax@80
  PgSprData *v92; // ecx@80
  int v93; // edx@80
  NiTexturingProperty *v94; // esi@80
  NiNode *v95; // esi@82
  const char *v96; // [sp+70h] [bp-80h]@60
  int *v97; // [sp+74h] [bp-7Ch]@60
  int *v98; // [sp+78h] [bp-78h]@60
  volatile LONG *v99; // [sp+7Ch] [bp-74h]@48
  NiSourceTexture *v100; // [sp+7Ch] [bp-74h]@60
  unsigned int v101; // [sp+80h] [bp-70h]@1
  signed int v102; // [sp+80h] [bp-70h]@71
  char *v103; // [sp+80h] [bp-70h]@73
  unsigned int uiHeight; // [sp+90h] [bp-60h]@62
  unsigned int uiWidth; // [sp+94h] [bp-5Ch]@62
  PgFrameWork *v106; // [sp+98h] [bp-58h]@1
  NiPointer<NiTexturingProperty> spTexProp; // [sp+9Ch] [bp-54h]@64
  NiSourceTexture *pkTexture; // [sp+A0h] [bp-50h]@46
  unsigned int pkTextureMain; // [sp+A4h] [bp-4Ch]@69
  NiSourceTexture *pkTexture8; // [sp+A8h] [bp-48h]@69
  NiPointer<NiNode> spNode; // [sp+ACh] [bp-44h]@1
  int uiTop; // [sp+B0h] [bp-40h]@56
  int uiLeft; // [sp+B4h] [bp-3Ch]@56
  PgSprData *pkTextWin; // [sp+B8h] [bp-38h]@64
  char acShapeName[33]; // [sp+BCh] [bp-34h]@72
  unsigned int v116; // [sp+E0h] [bp-10h]@1
  int v117; // [sp+ECh] [bp-4h]@1
  int v118; // [sp+F0h] [bp+0h]@1

  v116 = (unsigned int)&v118 ^ __security_cookie;
  v101 = (unsigned int)&v118 ^ __security_cookie;
  v2 = this;
  v106 = pkFrameWork;
  spNode.m_pObject = 0;
  v117 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acEffect, "SUCC_1.nif");
  v4 = Ns_LoadNifFile(v3, 0);
  v5 = v2->m_spEffect_SUCC_1.m_pObject;
  v6 = v4;
  if ( v5 != v4 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v2->m_spEffect_SUCC_1.m_pObject = v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acEffect, "SUCC_2.nif");
  v8 = Ns_LoadNifFile(v7, 0);
  v9 = v2->m_spEffect_SUCC_2.m_pObject;
  v10 = v8;
  if ( v9 != v8 )
  {
    if ( v9
      && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    v2->m_spEffect_SUCC_2.m_pObject = v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v11 = Folder::Merge(&Folder::m_acEffect, "FAIL_0.nif");
  v12 = Ns_LoadNifFile(v11, 0);
  v13 = v2->m_spEffect_FAIL_0.m_pObject;
  v14 = v12;
  if ( v13 != v12 )
  {
    if ( v13
      && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v13 )
      v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    v2->m_spEffect_FAIL_0.m_pObject = v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v15 = Folder::Merge(&Folder::m_acEffect, "FAIL_1.nif");
  v16 = Ns_LoadNifFile(v15, 0);
  v17 = v2->m_spEffect_FAIL_1.m_pObject;
  v18 = v16;
  if ( v17 != v16 )
  {
    if ( v17
      && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    v2->m_spEffect_FAIL_1.m_pObject = v18;
    if ( v18 )
      InterlockedIncrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v19 = Folder::Merge(&Folder::m_acEffect, "DESTROY.nif");
  v20 = Ns_LoadNifFile(v19, 0);
  v21 = v2->m_spEffect_DESTROY.m_pObject;
  v22 = v20;
  if ( v21 != v20 )
  {
    if ( v21
      && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v21 )
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    v2->m_spEffect_DESTROY.m_pObject = v22;
    if ( v22 )
      InterlockedIncrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v23 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v23;
  if ( !v23 )
  {
    v24 = spNode.m_pObject;
    v117 = -1;
    if ( spNode.m_pObject )
    {
      v99 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_49;
    }
    return 0;
  }
  v26 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v27 = Folder::Merge(&Folder::m_acMenu, "Game\\ItemUpgrade.nif");
  PgUtil::LoadNodeNifFile(v27, &spNode, v26);
  if ( !spNode.m_pObject )
    return 0;
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v23);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v28, 0, v106, "ItemUpgradeWin", 0) )
  {
    v24 = spNode.m_pObject;
    v117 = -1;
    if ( spNode.m_pObject )
    {
      v99 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_49:
      if ( !InterlockedDecrement(v99) )
      {
        if ( v24 )
          v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
      }
    }
    return 0;
  }
  v29 = uiLeft;
  v30 = uiTop;
  v31 = MenuTexMgr::GetTexture(0x13u);
  if ( v31 )
  {
    v100 = v31;
    v98 = &uiTop;
    v97 = &uiLeft;
    v96 = "Theme";
  }
  else
  {
    v100 = 0;
    v98 = &uiTop;
    v97 = &uiLeft;
    v96 = "Theme";
  }
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v96, v97, v98, v100);
  PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v33 = Font::Get(0);
    v34 = PgWinText::CreateWin(
            uiLeft - v29,
            uiTop - v30,
            uiWidth,
            uiHeight,
            v33,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v34;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v35[122].__vecDelDtor)(v34, 1, v101);
    ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    spTexProp.m_pObject = (NiTexturingProperty *)&pkTextWin->baseclass_0.vfptr[118];
    v36 = TextData::Get(0x33598174u);
    ((void (__thiscall *)(PgSprData *, char *))spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pkTextWin,
      v36);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v39 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel03");
    v40 = NiAVObject::GetProperty(v39, 8);
    spTexProp.m_pObject = (NiTexturingProperty *)v40;
    if ( v40 )
    {
      InterlockedIncrement((volatile LONG *)v40 + 1);
      v40 = spTexProp.m_pObject;
    }
    v41 = **((_DWORD **)v40 + 10);
    LOBYTE(v117) = 1;
    if ( v41 )
      v42 = *(NiSourceTexture **)(v41 + 4);
    else
      v42 = 0;
    v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, v42);
    PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v43, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft - v29, uiTop - v30, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
    pkTexture8 = MenuTexMgr::GetTexture(0x18u);
    v44 = MenuTexMgr::GetTexture(4u);
    v45 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextureMain = (unsigned int)v44;
    if ( ((int (__stdcall *)(_DWORD))v45[18].__vecDelDtor)("HelpLinkNor") )
    {
      pkTextWin = PgSprData::Create(
                    &spNode.m_pObject->baseclass_0,
                    "HelpLinkNor",
                    &uiLeft,
                    &uiTop,
                    (NiSourceTexture *)pkTextureMain);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v29, uiTop - v30, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
    }
    v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object01", &uiLeft, &uiTop, pkTexture8);
    PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v46, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "OkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "OkOver");
    PgWinBut::CreateWin(uiLeft - v29, uiTop - v30, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    v47 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v48 = (void *)v47->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v47->m_uiHeight;
    pkTextureMain = (unsigned int)v48;
    v49 = Font::Get(0);
    v50 = PgWinText::CreateWin(
            uiLeft - v29,
            uiTop - v30 + 1,
            pkTextureMain,
            (unsigned int)pkTexture8,
            v49,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkStartTextWin = v50;
    v102 = 5;
    ((void (__thiscall *)(PgWinText *))v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v50);
    pkTexture8 = (NiSourceTexture *)&v2->m_pkStartTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v51 = TextData::Get(0x9D06FADCu);
    ((void (__thiscall *)(PgWinText *, char *))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      v2->m_pkStartTextWin,
      v51);
    ((void (__stdcall *)(_DWORD))v2->m_pkStartTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CancelClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CancelOver");
    PgWinBut::CreateWin(uiLeft - v29, uiTop - v30, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
    v52 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v53 = (void *)v52->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v52->m_uiHeight;
    pkTextureMain = (unsigned int)v53;
    v54 = Font::Get(0);
    v55 = PgWinText::CreateWin(
            uiLeft - v29,
            uiTop - v30 + 1,
            pkTextureMain,
            (unsigned int)pkTexture8,
            v54,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v55;
    v56[122].__vecDelDtor((NiRefObject *)v55, 5u);
    pkTexture8 = (NiSourceTexture *)&pkTextWin->baseclass_0.vfptr[118];
    v57 = TextData::Get(0x97A4A8DFu);
    ((void (__thiscall *)(PgSprData *, char *))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pkTextWin,
      v57);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v58 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForgeText", &uiLeft, &uiTop, pkTexture);
    v59 = v58->m_akHitTester.m_pBase;
    pkTextWin = v58;
    v60 = (void *)v59->m_pObject->m_uiHeight;
    v61 = (void *)v59->m_pObject->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v60;
    pkTextureMain = (unsigned int)v61;
    v62 = Font::Get(MENU);
    v63 = PgWinText::CreateWin(
            uiLeft - v29,
            uiTop - v30 + 1,
            pkTextureMain,
            (unsigned int)pkTexture8,
            v62,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkForgeFirstText = v63;
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v63,
      5u);
    pkTexture8 = (NiSourceTexture *)&v2->m_pkForgeFirstText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v64 = TextData::Get(0x333F8F7Eu);
    ((void (__thiscall *)(PgWinText *, char *))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      v2->m_pkForgeFirstText,
      v64);
    ((void (__stdcall *)(_DWORD))v2->m_pkForgeFirstText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v65 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v66 = (void *)v65->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v65->m_uiHeight;
    pkTextureMain = (unsigned int)v66;
    v67 = Font::Get(MENU);
    v68 = PgWinText::CreateWin(
            uiLeft - v29,
            uiTop - v30 + 20,
            pkTextureMain,
            (unsigned int)pkTexture8,
            v67,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkForgeSecondText = v68;
    v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v68,
      5u);
    pkTexture8 = (NiSourceTexture *)&v2->m_pkForgeSecondText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v69 = TextData::Get(0xDFD9E4D8u);
    ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      v2->m_pkForgeSecondText,
      v69);
    ((void (__stdcall *)(_DWORD))v2->m_pkForgeSecondText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v70 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v70, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkItemUpgradeMsgWin = ItemUpgradeMsgWin::CreateWin(v106);
    pkTextureMain = -8;
    pkTextWin = (PgSprData *)v2->m_apkSlotWin;
    do
    {
      sprintf(acShapeName, "ForgeSlot%02d");
      v71 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
      v72 = PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v71, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v73 = v106;
      v74 = uiLeft;
      *((_DWORD *)pkTextWin - 19) = v72;
      v75 = ForgeSlotInvWin::CreateWin(
              v74 - v29 + 1,
              uiTop - v30 + 1,
              pkTextureMain + 8,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              v73);
      pkTextWin->baseclass_0.vfptr = (NiRefObjectVtbl *)v75;
      ((void (__thiscall *)(ForgeSlotInvWin *, signed int, signed int))v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
        v75,
        1,
        v102);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 64))(1);
      (*(void (__stdcall **)(signed int))(**((_DWORD **)pkTextWin - 19) + 240))(1);
      (*(void (__stdcall **)(signed int))(**((_DWORD **)pkTextWin - 19) + 256))(1);
      v76 = pkTextWin;
      *(_DWORD *)(*((_DWORD *)pkTextWin - 19) + 272) = g_pkToolTipWin;
      (*(void (__stdcall **)(signed int))(**((_DWORD **)v76 - 19) + 240))(1);
      switch ( pkTextureMain )
      {
        case 0u:
          pkTextWin->baseclass_0.vfptr[117].__vecDelDtor = 0;
          v77 = TextData::Get(0x92B9FCD4u);
          v78 = (PgWin *)*((_DWORD *)pkTextWin - 19);
          v103 = v77;
          break;
        case 1u:
          pkTextWin->baseclass_0.vfptr[117].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))2;
          v79 = TextData2::Get(0xCF1BF12u);
          goto LABEL_78;
        case 2u:
          pkTextWin->baseclass_0.vfptr[117].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))3;
          v80 = TextData2::Get(0xF0361326u);
          v78 = (PgWin *)*((_DWORD *)pkTextWin - 19);
          v103 = v80;
          break;
        case 3u:
          pkTextWin->baseclass_0.vfptr[117].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))4;
          v81 = TextData2::Get(0xF6351520u);
          v78 = (PgWin *)*((_DWORD *)pkTextWin - 19);
          v103 = v81;
          break;
        default:
          pkTextWin->baseclass_0.vfptr[117].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))1;
          v79 = TextData::Get(0xD5174325u);
LABEL_78:
          v103 = v79;
          v78 = (PgWin *)*((_DWORD *)pkTextWin - 19);
          break;
      }
      PgWin::SetToolTipWinText(v78, v103);
      v102 = 11;
      (*((void (**)(void))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 129))();
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 140))(10);
      v82 = (IconWin **)pkTextWin;
      pkTextWin->baseclass_0.vfptr[76].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))1;
      IconWin::ShowFocus(*v82, 1);
      pkTextWin = (PgSprData *)((char *)pkTextWin + 4);
      ++pkTextureMain;
    }
    while ( (signed int)(pkTextureMain + 8) < 12 );
    v83 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlotOn", &uiLeft, &uiTop, pkTexture);
    v84 = PgWinSpr::CreateWin(uiLeft - v29, uiTop - v30, v83, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v85 = pkTexture;
    v86 = spNode.m_pObject;
    v2->m_pkSlotOn = v84;
    v87 = PgSprData::Create(&v86->baseclass_0, "SlotBomb", &uiLeft, &uiTop, v85);
    pkTextWin = (PgSprData *)v87;
    v88 = PgWinSpr::CreateWin(
            uiLeft - v29 + 45,
            uiTop - v30,
            (PgSprData *)v87,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v89 = pkTextWin;
    v90 = uiTop;
    v2->m_pkSprBomb[0] = v88;
    v91 = PgWinSpr::CreateWin(uiLeft - v29 + 85, v90 - v30, v89, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v92 = pkTextWin;
    v93 = uiTop;
    v2->m_pkSprBomb[1] = v91;
    v2->m_pkSprBomb[2] = PgWinSpr::CreateWin(
                           uiLeft - v29 + 125,
                           v93 - v30,
                           v92,
                           &v2->baseclass_0.baseclass_0.baseclass_0,
                           0,
                           0);
    PgWin::InitPos(
      &v2->baseclass_0.baseclass_0.baseclass_0,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
    v94 = spTexProp.m_pObject;
    LOBYTE(v117) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v94->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v94, 1u);
    v95 = spNode.m_pObject;
    v117 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v95 )
      v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v95, 1u);
    result = 1;
  }
  else
  {
    v117 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0053A080) --------------------------------------------------------
void __thiscall ItemUpgradeWin::ItemUpgradeWin(ItemUpgradeWin *this)
{
  ItemUpgradeWin *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6
  NiNode *v4; // edi@11
  NiNode *v5; // edi@16
  NiNode *v6; // edi@21
  int v7; // ecx@26
  int v8; // eax@26
  int v9; // eax@27
  char *v10; // eax@27
  char *v11; // edx@27
  char v12; // cl@28
  unsigned __int16 v13; // ax@29
  int v14; // ecx@29
  int v15; // [sp-2Ch] [bp-48h]@26
  char *v16; // [sp-1Ch] [bp-38h]@26
  signed int v17; // [sp-18h] [bp-34h]@26
  unsigned int v18; // [sp-14h] [bp-30h]@26
  ItemUpgradeWin *v19; // [sp+0h] [bp-1Ch]@1
  int v20; // [sp+4h] [bp-18h]@26
  char *v21; // [sp+8h] [bp-14h]@27
  int v22; // [sp+Ch] [bp-10h]@26
  int v23; // [sp+18h] [bp-4h]@1

  v1 = this;
  v19 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpgradeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemUpgradeWin::_vftable_;
  v23 = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkContents = 0;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kMarkCheck);
  LOBYTE(v23) = 3;
  NsEffect::NsEffect(&v1->m_kEffect);
  v1->m_spEffect_SUCC_1.m_pObject = 0;
  v1->m_spEffect_SUCC_2.m_pObject = 0;
  v1->m_spEffect_FAIL_0.m_pObject = 0;
  v1->m_spEffect_FAIL_1.m_pObject = 0;
  v1->m_spEffect_DESTROY.m_pObject = 0;
  v1->m_fRotateStartTime = 0.0;
  *(_WORD *)&v1->m_bUpGradeStart = 0;
  v1->m_dwUpResult = 0;
  v1->m_fSpeed = 10.0;
  v1->m_nSuccessTargetSlot = -1;
  v1->m_nBombCount = 0;
  v1->m_nCurRawSlot = 0;
  v1->m_fAcceleration = 0.0;
  v2 = v1->m_spEffect_SUCC_1.m_pObject;
  LOBYTE(v23) = 9;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spEffect_SUCC_1.m_pObject = 0;
  }
  v3 = v1->m_spEffect_SUCC_2.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spEffect_SUCC_2.m_pObject = 0;
  }
  v4 = v1->m_spEffect_FAIL_0.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spEffect_FAIL_0.m_pObject = 0;
  }
  v5 = v1->m_spEffect_FAIL_1.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spEffect_FAIL_1.m_pObject = 0;
  }
  v6 = v1->m_spEffect_DESTROY.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spEffect_DESTROY.m_pObject = 0;
  }
  v18 = 48;
  v1->m_bGoldNineSlot = -1;
  v17 = 0;
  v16 = (char *)v1->m_apkSlotWin;
  v1->m_pCurObject = 0;
  *(_DWORD *)&v1->m_bEquipSlot = -1;
  v1->m_dwMoney = 0;
  v1->m_eUpgradeState = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  memset(v16, v17, v18);
  memset((char *)v1->pkForgeSlot, 0, 0x30u);
  v15 = v7;
  v20 = (int)&v15;
  v1->m_pkItemUpgradeMsgWin = 0;
  v1->m_bNormalUpgradeWin = 1;
  v1->m_pkForgeFirstText = 0;
  v1->m_pkForgeSecondText = 0;
  v17 = 15;
  v16 = 0;
  LOBYTE(v15) = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v15,
    "Grade6",
    6u);
  v1->m_GradeItemID = CSingleDataMap::GetValue(
                        &g_kSingleDataMap,
                        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v15);
  v8 = 0;
  v22 = (int)v1->m_BraceletGradeItemID;
  do
  {
    v9 = v8 + 1;
    v18 = v9;
    v20 = v9;
    v10 = fs("BR_UPSORCE0%d");
    v11 = v10;
    v17 = 15;
    v16 = 0;
    LOBYTE(v15) = 0;
    v21 = v10 + 1;
    do
      v12 = *v11++;
    while ( v12 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v15,
      v10,
      v11 - v21);
    v13 = CSingleDataMap::GetValue(
            &g_kSingleDataMap,
            *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v15);
    v14 = v22;
    *(_WORD *)v22 = v13;
    v8 = v20;
    v22 = v14 + 2;
  }
  while ( v20 < 4 );
  v1->m_UpgradeType = 0;
  *(_DWORD *)&v1->m_UpgradedItemID = -1;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99C108: using guessed type int (__stdcall *ItemUpgradeWin___vftable_)(int uiFlags);
// 99C124: using guessed type int (__thiscall *ItemUpgradeWin___vftable_)(void *p, char);

//----- (0053A390) --------------------------------------------------------
ItemUpgradeWin *__cdecl ItemUpgradeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ItemUpgradeWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x300u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ItemUpgradeWin::ItemUpgradeWin((ItemUpgradeWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ItemUpgradeWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0053A4C0) --------------------------------------------------------
void *__thiscall ForgeSlotInvWin::_scalar_deleting_destructor_(ForgeSlotInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ForgeSlotInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ForgeSlotInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99BC34: using guessed type int (__stdcall *ForgeSlotInvWin___vftable_)(int uiFlags);
// 99BC54: using guessed type int (__thiscall *ForgeSlotInvWin___vftable_)(void *p, char);

//----- (0053A500) --------------------------------------------------------
void *__thiscall ItemUpgradeMsgWin::_vector_deleting_destructor_(ItemUpgradeMsgWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpgradeMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemUpgradeMsgWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99BEC8: using guessed type int (__stdcall *ItemUpgradeMsgWin___vftable_)(int uiFlags);
// 99BEE4: using guessed type int (__thiscall *ItemUpgradeMsgWin___vftable_)(void *p, char);

//----- (0053A540) --------------------------------------------------------
void *__thiscall ItemUpgradeWin::_vector_deleting_destructor_(ItemUpgradeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ItemUpgradeWin::_ItemUpgradeWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0053A590) --------------------------------------------------------
void __thiscall KeyRemappingBut::KeyRemappingBut(KeyRemappingBut *this)
{
  KeyRemappingBut *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyRemappingBut::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KeyRemappingBut::_vftable_;
  v1->m_uiInvIndex = -1;
}
// 99D0E8: using guessed type int (__stdcall *KeyRemappingBut___vftable_)(int uiFlags);
// 99D104: using guessed type int (__thiscall *KeyRemappingBut___vftable_)(void *p, char);

//----- (0053A5C0) --------------------------------------------------------
void __thiscall KeyRemappingBut::_KeyRemappingBut(KeyRemappingBut *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyRemappingBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KeyRemappingBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 99D0E8: using guessed type int (__stdcall *KeyRemappingBut___vftable_)(int uiFlags);
// 99D104: using guessed type int (__thiscall *KeyRemappingBut___vftable_)(void *p, char);

//----- (0053A5E0) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnReset(KeyRemappingWin *this)
{
  GameFrameWork::SendDefaultKeyRemappingReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0053A600) --------------------------------------------------------
NiInputKeyboard::KeyCode __thiscall KeyRemappingWin::ConvertKeyCode(KeyRemappingWin *this, char keyValue)
{
  NiInputKeyboard::KeyCode result; // eax@7
  char buf[9]; // [sp+0h] [bp-10h]@1
  unsigned int v4; // [sp+Ch] [bp-4h]@1
  int v5; // [sp+10h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  GetKeyboardLayoutNameA(buf);
  switch ( keyValue )
  {
    case 0x41:
      if ( !strcmp(buf, "0000040C")
        || !strcmp(buf, "00000484")
        || !strcmp(buf, "0000047E")
        || !strcmp(buf, "00000483")
        || !strcmp(buf, "00000482") )
        goto LABEL_8;
      goto LABEL_7;
    case 0x42:
      return 48;
    case 0x43:
      return 46;
    case 0x44:
      return 32;
    case 0x45:
      return 18;
    case 0x46:
      return 33;
    case 0x47:
      return 34;
    case 0x48:
      return 35;
    case 0x49:
      return 23;
    case 0x4A:
      return 36;
    case 0x4B:
      return 37;
    case 0x4C:
      return 38;
    case 0x4D:
      return 50;
    case 0x4E:
      return 49;
    case 0x4F:
      return 24;
    case 0x50:
      return 25;
    case 0x51:
      if ( strcmp(buf, "0000040C")
        && strcmp(buf, "00000484")
        && strcmp(buf, "0000047E")
        && strcmp(buf, "00000483")
        && strcmp(buf, "00000482") )
LABEL_8:
        result = 16;
      else
LABEL_7:
        result = 30;
      return result;
    case 0x52:
      return 19;
    case 0x53:
      return 31;
    case 0x54:
      return 20;
    case 0x55:
      return 22;
    case 0x56:
      return 47;
    case 0x57:
      if ( strcmp(buf, "0000040C")
        && strcmp(buf, "00000484")
        && strcmp(buf, "0000047E")
        && strcmp(buf, "00000483")
        && strcmp(buf, "00000482") )
        goto LABEL_40;
      goto LABEL_41;
    case 0x58:
      result = 45;
      break;
    case 0x59:
      if ( strcmp(buf, "00000407") )
        result = 21;
      else
        result = 44;
      break;
    case 0x5A:
      if ( strcmp(buf, "00000407") )
      {
        if ( strcmp(buf, "0000040C")
          && strcmp(buf, "00000484")
          && strcmp(buf, "0000047E")
          && strcmp(buf, "00000483")
          && strcmp(buf, "00000482") )
LABEL_41:
          result = 44;
        else
LABEL_40:
          result = 17;
      }
      else
      {
        result = 21;
      }
      break;
    case 0x1B:
      result = 1;
      break;
    case 0xD:
      result = 28;
      break;
    case 0x31:
      result = 2;
      break;
    case 0x32:
      result = 3;
      break;
    case 0x33:
      result = 4;
      break;
    case 0x34:
      result = 5;
      break;
    case 0x35:
      result = 6;
      break;
    case 0x36:
      result = 7;
      break;
    case 0x37:
      result = 8;
      break;
    case 0x38:
      result = 9;
      break;
    case 0x39:
      result = 10;
      break;
    case 0x30:
      result = 11;
      break;
    case 0xBD:
      result = 12;
      break;
    case 0xBB:
      result = 13;
      break;
    case 0xDB:
      result = 26;
      break;
    case 0xDD:
      result = 27;
      break;
    case 0xBA:
      result = 39;
      break;
    case 0xDE:
      result = 40;
      break;
    case 0xDC:
      result = 43;
      break;
    case 0xBC:
      result = 51;
      break;
    case 0xBE:
      result = 52;
      break;
    case 0x6F:
      result = 53;
      break;
    case 0x6A:
      result = 55;
      break;
    case 0x20:
      result = 57;
      break;
    case 0x70:
      result = 59;
      break;
    case 0x71:
      result = 60;
      break;
    case 0x72:
      result = 61;
      break;
    case 0x73:
      result = 62;
      break;
    case 0x74:
      result = 63;
      break;
    case 0x75:
      result = 64;
      break;
    case 0x76:
      result = 65;
      break;
    case 0x77:
      result = 66;
      break;
    case 0x78:
      result = 67;
      break;
    case 0x79:
      result = 68;
      break;
    case 0x6D:
      result = 74;
      break;
    case 0x6B:
      result = 78;
      break;
    case 0x60:
      result = 82;
      break;
    case 0x61:
      result = 79;
      break;
    case 0x62:
      result = 80;
      break;
    case 0x63:
      result = 81;
      break;
    case 0x64:
      result = 75;
      break;
    case 0x65:
      result = 76;
      break;
    case 0x66:
      result = 77;
      break;
    case 0x67:
      result = 71;
      break;
    case 0x68:
      result = 72;
      break;
    case 0x69:
      result = 73;
      break;
    case 0x6E:
      result = 83;
      break;
    case 0x7A:
      result = 85;
      break;
    case 0x7B:
      result = 86;
      break;
    case 0xBF:
      result = 116;
      break;
    case 0xC0:
      result = 41;
      break;
    case 0x10:
      result = 42;
      break;
    case 0x11:
      result = 29;
      break;
    case 0x12:
      result = 56;
      break;
    case 0x14:
      result = 58;
      break;
    case 0x90:
      result = 69;
      break;
    case 0x91:
      result = 70;
      break;
    case 0x21:
      result = 122;
      break;
    case 0x22:
      result = 127;
      break;
    case 0x23:
      result = 125;
      break;
    case 0x24:
      result = 120;
      break;
    case 0x25:
      result = 123;
      break;
    case 0x26:
      result = 121;
      break;
    case 0x27:
      result = 124;
      break;
    case 0x28:
      result = 126;
      break;
    case 0x2D:
      result = 128;
      break;
    case 0x2E:
      result = 129;
      break;
    case 0x5B:
      result = 130;
      break;
    case 0xF5:
      result = 15;
      break;
    case 8:
      result = 14;
      break;
    case 0x13:
      result = 119;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0053B580) --------------------------------------------------------
unsigned int __thiscall KeyRemappingWin::ConvertKeyCodeModifier(KeyRemappingWin *this, char keyModifier)
{
  unsigned int result; // eax@4

  switch ( keyModifier )
  {
    case 16:
      result = 64;
      break;
    case 17:
      result = 1;
      break;
    case 18:
      result = 4;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (0053B5C0) --------------------------------------------------------
int __thiscall KeyRemappingWin::GetKeyIndexByName(KeyRemappingWin *this, char *pcBtnName)
{
  int result; // eax@2
  int v3; // edi@3
  const char *v4; // esi@3

  if ( pcBtnName )
  {
    v3 = 0;
    v4 = (const char *)this->m_keyMapping;
    while ( strncmp(v4, pcBtnName, strlen(pcBtnName)) )
    {
      ++v3;
      v4 += 258;
      if ( v3 >= 95 )
        return -1;
    }
    result = v3;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (0053B620) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnHelpLink(KeyRemappingWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "KeyRemappingWin");
}

//----- (0053B650) --------------------------------------------------------
bool __thiscall KeyRemappingWin::SaveDefalultKeyRemapping(KeyRemappingWin *this, bool bDefault)
{
  _iobuf *v2; // eax@3
  _iobuf *v3; // esi@3
  bool result; // al@4
  char acFileName[256]; // [sp+0h] [bp-104h]@3
  unsigned int v6; // [sp+100h] [bp-4h]@1
  int v7; // [sp+104h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  v2 = fopen(acFileName, "wb");
  v3 = v2;
  if ( v2 )
  {
    fwrite(&MachineOpt::m_keyMappingBuff, 0xF4u, 1u, v2);
    fclose(v3);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0053B6F0) --------------------------------------------------------
bool __thiscall KeyRemappingWin::UpdateDynamicStrings(KeyRemappingWin *this, float fTime)
{
  int v2; // edi@1
  KeyRemappingWin *v3; // esi@1
  bool result; // al@2
  bool v5; // bl@3
  unsigned int v6; // eax@3
  int v7; // eax@72
  int v8; // ecx@72
  int v9; // eax@262
  unsigned int v10; // [sp-8h] [bp-20h]@53
  unsigned int v11; // [sp-8h] [bp-20h]@62
  unsigned int v12; // [sp-8h] [bp-20h]@73
  unsigned int v13; // [sp-8h] [bp-20h]@94
  unsigned int v14; // [sp-8h] [bp-20h]@121
  char buf[9]; // [sp+8h] [bp-10h]@3
  unsigned int v16; // [sp+14h] [bp-4h]@1
  int v17; // [sp+18h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = g_pkKeyboard;
  v3 = this;
  if ( g_pkKeyboard )
  {
    v5 = 0;
    GetKeyboardLayoutNameA(buf);
    v6 = v3->m_uiTargetKeyIndex;
    if ( v6 == 1 )
    {
      v3->m_keyMapping[1].keyValue = 27;
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
        (NiRefObject *)v3,
        (unsigned int)"ESC ");
      result = 1;
    }
    else
    {
      if ( v3->m_bModeif )
        v3->m_bModeif = 0;
      if ( *(_BYTE *)(v2 + 38) & 4 )
      {
        v3->m_keyMapping[v6].modifier = 16;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"LSHIFT ");
        v3->m_bModeif = 1;
      }
      if ( *(_BYTE *)(v2 + 39) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].modifier = 16;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"RSHIFT ");
        v3->m_bModeif = 1;
      }
      if ( *(_BYTE *)(v2 + 36) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].modifier = 17;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"LCTRL ");
        v3->m_bModeif = 1;
      }
      if ( *(_BYTE *)(v2 + 46) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].modifier = 17;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"RCTRL ");
        v3->m_bModeif = 1;
      }
      if ( *(_BYTE *)(v2 + 40) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].modifier = 18;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"LMENU ");
        v3->m_bModeif = 1;
      }
      if ( *(_BYTE *)(v2 + 47) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].modifier = 18;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"RMENU ");
        v3->m_bModeif = 1;
      }
      if ( *(_BYTE *)(v2 + 36) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 13;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"ENTER ");
      }
      if ( *(_BYTE *)(v2 + 46) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 13;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"ENTER ");
      }
      if ( *(_BYTE *)(v2 + 33) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 49;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"1 ");
      }
      if ( *(_BYTE *)(v2 + 33) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 50;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"2 ");
      }
      if ( *(_BYTE *)(v2 + 33) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 51;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"3 ");
      }
      if ( *(_BYTE *)(v2 + 33) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 52;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"4 ");
      }
      if ( *(_BYTE *)(v2 + 33) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 53;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"5 ");
      }
      if ( *(_BYTE *)(v2 + 33) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 54;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"6 ");
      }
      if ( *(_BYTE *)(v2 + 34) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 55;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"7 ");
      }
      if ( *(_BYTE *)(v2 + 34) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 56;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"8 ");
      }
      if ( *(_BYTE *)(v2 + 34) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 57;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"9 ");
      }
      if ( *(_BYTE *)(v2 + 34) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 48;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"0 ");
      }
      if ( *(_BYTE *)(v2 + 34) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -67;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"- ");
      }
      if ( *(_BYTE *)(v2 + 34) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -69;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"= ");
      }
      if ( *(_BYTE *)(v2 + 35) & 1 )
      {
        if ( strcmp(buf, "0000040C")
          && strcmp(buf, "00000484")
          && strcmp(buf, "0000047E")
          && strcmp(buf, "00000483")
          && strcmp(buf, "00000482") )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 81;
          v10 = (unsigned int)"Q ";
        }
        else
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 65;
          v10 = (unsigned int)"A ";
        }
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          v10);
      }
      if ( *(_BYTE *)(v2 + 35) & 2 )
      {
        if ( strcmp(buf, "0000040C")
          && strcmp(buf, "00000484")
          && strcmp(buf, "0000047E")
          && strcmp(buf, "00000483")
          && strcmp(buf, "00000482") )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 87;
          v11 = (unsigned int)"W ";
        }
        else
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 90;
          v11 = (unsigned int)"Z ";
        }
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          v11);
      }
      if ( *(_BYTE *)(v2 + 35) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 69;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"E ");
      }
      if ( *(_BYTE *)(v2 + 35) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 82;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"R ");
      }
      if ( *(_BYTE *)(v2 + 35) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 84;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"T ");
      }
      if ( *(_BYTE *)(v2 + 35) & 0x20 )
      {
        v7 = strcmp(buf, "00000407");
        v8 = v3->m_uiTargetKeyIndex;
        v5 = 1;
        if ( v7 )
        {
          v3->m_keyMapping[v8].keyValue = 89;
          v12 = (unsigned int)"Y ";
        }
        else
        {
          v3->m_keyMapping[v8].keyValue = 90;
          v12 = (unsigned int)"Z ";
        }
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          v12);
      }
      if ( *(_BYTE *)(v2 + 35) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 85;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"U ");
      }
      if ( *(_BYTE *)(v2 + 35) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 73;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"I ");
      }
      if ( *(_BYTE *)(v2 + 36) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 79;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"O ");
      }
      if ( *(_BYTE *)(v2 + 36) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 80;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"P ");
      }
      if ( *(_BYTE *)(v2 + 36) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -37;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"[ ");
      }
      if ( *(_BYTE *)(v2 + 36) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -35;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"] ");
      }
      if ( *(_BYTE *)(v2 + 36) & 0x40 )
      {
        if ( strcmp(buf, "0000040C")
          && strcmp(buf, "00000484")
          && strcmp(buf, "0000047E")
          && strcmp(buf, "00000483")
          && strcmp(buf, "00000482") )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 65;
          v13 = (unsigned int)"A ";
        }
        else
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 81;
          v13 = (unsigned int)"Q ";
        }
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          v13);
      }
      if ( *(_BYTE *)(v2 + 36) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 83;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"S ");
      }
      if ( *(_BYTE *)(v2 + 37) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 68;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"D ");
      }
      if ( *(_BYTE *)(v2 + 37) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 70;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F ");
      }
      if ( *(_BYTE *)(v2 + 37) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 71;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"G ");
      }
      if ( *(_BYTE *)(v2 + 37) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 72;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"H ");
      }
      if ( *(_BYTE *)(v2 + 37) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 74;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"J ");
      }
      if ( *(_BYTE *)(v2 + 37) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 75;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"K ");
      }
      if ( *(_BYTE *)(v2 + 37) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 76;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"L ");
      }
      if ( *(_BYTE *)(v2 + 37) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -70;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"; ");
      }
      if ( *(_BYTE *)(v2 + 38) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -34;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"' ");
      }
      if ( *(_BYTE *)(v2 + 38) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -36;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"\\ ");
      }
      if ( *(_BYTE *)(v2 + 38) & 0x10 )
      {
        if ( strcmp(buf, "00000407") )
        {
          if ( strcmp(buf, "0000040C")
            && strcmp(buf, "00000484")
            && strcmp(buf, "0000047E")
            && strcmp(buf, "00000483")
            && strcmp(buf, "00000482") )
          {
            v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 90;
            v14 = (unsigned int)"Z ";
          }
          else
          {
            v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 87;
            v14 = (unsigned int)"W ";
          }
        }
        else
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 89;
          v14 = (unsigned int)"Y ";
        }
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          v14);
      }
      if ( *(_BYTE *)(v2 + 38) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 88;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"X ");
      }
      if ( *(_BYTE *)(v2 + 38) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 67;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"C ");
      }
      if ( *(_BYTE *)(v2 + 38) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 86;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"V ");
      }
      if ( *(_BYTE *)(v2 + 39) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 66;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"B ");
      }
      if ( *(_BYTE *)(v2 + 39) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 78;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"N ");
      }
      if ( *(_BYTE *)(v2 + 39) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 77;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"M ");
      }
      if ( *(_BYTE *)(v2 + 39) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -68;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)", ");
      }
      if ( *(_BYTE *)(v2 + 39) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -66;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)". ");
      }
      if ( *(_BYTE *)(v2 + 39) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 111;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"/ ");
      }
      if ( *(_BYTE *)(v2 + 39) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 106;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"* ");
      }
      if ( *(_BYTE *)(v2 + 40) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 32;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"  ");
      }
      if ( *(_BYTE *)(v2 + 40) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 112;
        v5 = 0;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F1 ");
      }
      if ( *(_BYTE *)(v2 + 40) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 113;
        v5 = 0;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F2 ");
      }
      if ( *(_BYTE *)(v2 + 40) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 114;
        v5 = 0;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F3 ");
      }
      if ( *(_BYTE *)(v2 + 40) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 115;
        v5 = 0;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F4 ");
      }
      if ( *(_BYTE *)(v2 + 40) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 116;
        v5 = 0;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F5 ");
      }
      if ( *(_BYTE *)(v2 + 41) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 117;
        v5 = 0;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F6 ");
      }
      if ( *(_BYTE *)(v2 + 41) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 118;
        v5 = 0;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F7 ");
      }
      if ( *(_BYTE *)(v2 + 41) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 119;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F8 ");
      }
      if ( *(_BYTE *)(v2 + 41) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 120;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F9 ");
      }
      if ( *(_BYTE *)(v2 + 41) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 121;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F10 ");
      }
      if ( *(_BYTE *)(v2 + 42) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 109;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP- ");
      }
      if ( *(_BYTE *)(v2 + 42) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 107;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP+ ");
      }
      if ( *(_BYTE *)(v2 + 43) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 96;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP0 ");
      }
      if ( *(_BYTE *)(v2 + 42) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 97;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP1 ");
      }
      if ( *(_BYTE *)(v2 + 43) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 98;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP2 ");
      }
      if ( *(_BYTE *)(v2 + 43) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 99;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP3 ");
      }
      if ( *(_BYTE *)(v2 + 42) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 100;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP4 ");
      }
      if ( *(_BYTE *)(v2 + 42) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 101;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP5 ");
      }
      if ( *(_BYTE *)(v2 + 42) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 102;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP6 ");
      }
      if ( *(_BYTE *)(v2 + 41) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 103;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP7 ");
      }
      if ( *(_BYTE *)(v2 + 42) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 104;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP8 ");
      }
      if ( *(_BYTE *)(v2 + 42) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 105;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP9 ");
      }
      if ( *(_BYTE *)(v2 + 43) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 110;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP. ");
      }
      if ( *(_BYTE *)(v2 + 43) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 122;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F11 ");
      }
      if ( *(_BYTE *)(v2 + 43) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 123;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"F12 ");
      }
      if ( *(_BYTE *)(v2 + 47) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -65;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NP/ ");
      }
      if ( *(_BYTE *)(v2 + 38) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -64;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"` ");
      }
      if ( *(_BYTE *)(v2 + 40) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 20;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"CAP ");
      }
      if ( *(_BYTE *)(v2 + 41) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -112;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"NUML ");
      }
      if ( *(_BYTE *)(v2 + 41) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -111;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"SCROLL ");
      }
      if ( *(_BYTE *)(v2 + 48) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 36;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"HOME ");
      }
      if ( *(_BYTE *)(v2 + 48) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 38;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"UP ");
      }
      if ( *(_BYTE *)(v2 + 48) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 37;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"LEFT ");
      }
      if ( *(_BYTE *)(v2 + 48) & 0x10 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 39;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"RIGHT ");
      }
      if ( *(_BYTE *)(v2 + 48) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 35;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"END ");
      }
      if ( *(_BYTE *)(v2 + 48) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 40;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"DOWN ");
      }
      if ( *(_BYTE *)(v2 + 48) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 34;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"PGDN");
      }
      if ( *(_BYTE *)(v2 + 48) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 33;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"PGUP ");
      }
      if ( *(_BYTE *)(v2 + 49) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 45;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"INS ");
      }
      if ( *(_BYTE *)(v2 + 49) & 2 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 46;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"DEL ");
      }
      if ( *(_BYTE *)(v2 + 49) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 91;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"LWIN ");
      }
      if ( *(_BYTE *)(v2 + 49) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 91;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"RWIN ");
      }
      if ( *(_BYTE *)(v2 + 49) & 0x10 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"APPS ");
      if ( *(_BYTE *)(v2 + 34) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -11;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"TAB ");
      }
      if ( *(_BYTE *)(v2 + 34) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 8;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"\\ ");
      }
      if ( *(_BYTE *)(v2 + 47) & 0x80 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 19;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"Pause Break ");
      }
      if ( !(*(_BYTE *)(v2 + 38) & 4) && *(_BYTE *)(v2 + 70) & 4 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 16;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"Shift");
      }
      if ( !(*(_BYTE *)(v2 + 39) & 0x40) && *(_BYTE *)(v2 + 71) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 16;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"Shift ");
      }
      if ( !(*(_BYTE *)(v2 + 36) & 0x20) && *(_BYTE *)(v2 + 68) & 0x20 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 17;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"Ctrl");
      }
      if ( !(*(_BYTE *)(v2 + 46) & 8) && *(_BYTE *)(v2 + 78) & 8 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 17;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"Ctrl ");
      }
      if ( !(*(_BYTE *)(v2 + 40) & 1) && *(_BYTE *)(v2 + 72) & 1 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 18;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"Alt");
      }
      if ( !(*(_BYTE *)(v2 + 47) & 0x40) && *(_BYTE *)(v2 + 79) & 0x40 )
      {
        v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = 18;
        v5 = 1;
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
          (NiRefObject *)v3,
          (unsigned int)"Alt");
      }
      v9 = g_pkMouse;
      if ( *(_BYTE *)(g_pkMouse + 129) || *(_BYTE *)(g_pkMouse + 145) )
      {
        result = 0;
      }
      else
      {
        if ( *(_BYTE *)(g_pkMouse + 161) )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -6;
          v5 = 1;
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
            (NiRefObject *)v3,
            (unsigned int)"MMB");
          v9 = g_pkMouse;
        }
        if ( *(_BYTE *)(v9 + 177) )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -5;
          v5 = 1;
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
            (NiRefObject *)v3,
            (unsigned int)"MMOD_X1");
          v9 = g_pkMouse;
        }
        if ( *(_BYTE *)(v9 + 193) )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -4;
          v5 = 1;
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
            (NiRefObject *)v3,
            (unsigned int)"MMOD_X2");
          v9 = g_pkMouse;
        }
        if ( *(_BYTE *)(v9 + 209) )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -3;
          v5 = 1;
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
            (NiRefObject *)v3,
            (unsigned int)"MMOD_X3");
          v9 = g_pkMouse;
        }
        if ( *(_BYTE *)(v9 + 225) )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -2;
          v5 = 1;
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
            (NiRefObject *)v3,
            (unsigned int)"MMMOD_X4");
          v9 = g_pkMouse;
        }
        if ( *(_BYTE *)(v9 + 241) )
        {
          v3->m_keyMapping[v3->m_uiTargetKeyIndex].keyValue = -1;
          v5 = 1;
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor(
            (NiRefObject *)v3,
            (unsigned int)"MMOD_X5");
        }
        result = v5;
      }
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9816C: using guessed type int g_pkKeyboard;
// A98170: using guessed type int g_pkMouse;

//----- (0053D130) --------------------------------------------------------
bool __thiscall KeyRemappingBut::Create(KeyRemappingBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex)
{
  KeyRemappingBut *v9; // esi@1
  bool result; // al@1
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@2

  v9 = this;
  result = PgWinSpr::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, pkSprData, pkParent, pcName, uiExtStyle);
  if ( result )
  {
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v9,
      0);
    v11 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor;
    v9->baseclass_0.m_uiButNum = pkSprData->m_akGeomData.m_uiSize;
    v11(&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, uiCmdMsg);
    v9->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (0053D1A0) --------------------------------------------------------
void __thiscall KeyRemappingBut::DoAction(KeyRemappingBut *this)
{
  KeyRemappingBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, v1->baseclass_0.m_uiCmdMsg, v1->m_uiInvIndex);
}

//----- (0053D1D0) --------------------------------------------------------
bool __thiscall KeyRemappingWin::KeyMappingInfo(KeyRemappingWin *this, unsigned int uiKeyMappingIndex, unsigned int *uiMsg, char *keyName)
{
  KeyRemappingWin *v4; // edi@1
  char *v5; // eax@1
  PgFrameWork *v6; // eax@1
  MainMenuWin *v7; // ecx@1
  PgMsg::Frame *v8; // edi@1
  PgMsg::Frame *v9; // edx@1
  int v10; // eax@1
  bool result; // al@2
  bool bDataReadOK; // [sp+13h] [bp-105h]@1
  char ToolTipText[256]; // [sp+14h] [bp-104h]@1
  unsigned int v14; // [sp+114h] [bp-4h]@1
  int v15; // [sp+118h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v4 = this;
  bDataReadOK = 1;
  ToolTipText[0] = 0;
  memset(&ToolTipText[1], 0, 0xFFu);
  v5 = TextData::Get(0x9FBEF2E2u);
  sprintf(ToolTipText, v5);
  v6 = v4->baseclass_0.m_pkFrameWork;
  v7 = (MainMenuWin *)v6[16].baseclass_0.vfptr;
  v8 = v6[15].m_kMsgQ.m_pBase;
  v9 = v6[20].m_kMsgQ.m_pBase;
  v10 = *(_DWORD *)&v6[15].m_bInit;
  if ( v7 )
  {
    switch ( uiKeyMappingIndex )
    {
      case 0u:
        *uiMsg = 17;
        MainMenuWin::SetMainButToolTip(v7, 9u, ToolTipText);
        dword_B5B174 = 1;
        break;
      case 1u:
        *uiMsg = 29;
        MainMenuWin::SetMainButToolTip(v7, 0, ToolTipText);
        dword_B5B17C = 1;
        break;
      case 2u:
        *uiMsg = 106;
        MainMenuWin::SetMainButToolTip(v7, 0xAu, ToolTipText);
        dword_B5B184 = 1;
        break;
      case 8u:
        *uiMsg = 109;
        MainMenuWin::SetMainButToolTip(v7, 2u, ToolTipText);
        dword_B5B1B4 = 1;
        break;
      case 3u:
        *uiMsg = 107;
        MainMenuWin::SetMainButToolTip(v7, 6u, ToolTipText);
        dword_B5B18C = 1;
        break;
      case 4u:
        *uiMsg = 108;
        MainMenuWin::SetMainButToolTip(v7, 5u, ToolTipText);
        dword_B5B194 = 1;
        break;
      case 5u:
        *uiMsg = 16;
        MainMenuWin::SetMainButToolTip(v7, 4u, ToolTipText);
        dword_B5B19C = 1;
        break;
      case 7u:
        *uiMsg = 162;
        MainMenuWin::SetMainButToolTip(v7, 1u, ToolTipText);
        dword_B5B1AC = 1;
        break;
      case 0xFu:
        *uiMsg = 20;
        MainMenuWin::SetMainButToolTip(v7, 7u, ToolTipText);
        dword_B5B1EC = 1;
        break;
      case 0xEu:
        *uiMsg = 191;
        dword_B5B1E4 = 1;
        break;
      case 0x29u:
        *uiMsg = 181;
        if ( v10 )
          PgWin::SetToolTipWinText(*(PgWin **)(v10 + 364), ToolTipText);
        dword_B5B2BC = 2;
        break;
      case 0x2Au:
        *uiMsg = 182;
        if ( v10 )
          PgWin::SetToolTipWinText(*(PgWin **)(*(_DWORD *)(v10 + 528) + 592), ToolTipText);
        dword_B5B2C4 = 2;
        break;
      case 0x28u:
        *uiMsg = 111;
        dword_B5B2B4 = 2;
        break;
      case 0x15u:
        *uiMsg = 254;
        if ( v10 )
          PgWin::SetToolTipWinText(*(PgWin **)(v10 + 376), ToolTipText);
        dword_B5B21C = 1;
        break;
      case 6u:
        *uiMsg = 110;
        MainMenuWin::SetMainButToolTip(v7, 3u, ToolTipText);
        dword_B5B1A4 = 1;
        break;
      case 0x10u:
        *uiMsg = 245;
        dword_B5B1F4 = 1;
        break;
      case 0x14u:
        *uiMsg = 247;
        dword_B5B214 = 1;
        break;
      case 0x11u:
        *uiMsg = 246;
        dword_B5B1FC = 1;
        break;
      case 0x13u:
        *uiMsg = 249;
        dword_B5B20C = 1;
        break;
      case 0x12u:
        *uiMsg = 248;
        dword_B5B204 = 1;
        break;
      case 9u:
        *uiMsg = 11;
        dword_B5B1BC = 1;
        break;
      case 0xAu:
        *uiMsg = 187;
        dword_B5B1C4 = 1;
        break;
      case 0xBu:
        *uiMsg = 188;
        dword_B5B1CC = 1;
        break;
      case 0x16u:
        *uiMsg = 250;
        dword_B5B224 = 1;
        break;
      case 0xCu:
        *uiMsg = 189;
        dword_B5B1D4 = 1;
        break;
      case 0xDu:
        *uiMsg = 190;
        dword_B5B1DC = 1;
        break;
      case 0x2Du:
        *uiMsg = 252;
        dword_B5B2DC = 2;
        break;
      case 0x17u:
        *uiMsg = 98;
        dword_B5B22C = 2;
        break;
      case 0x18u:
        *uiMsg = 99;
        dword_B5B234 = 2;
        break;
      case 0x1Au:
        *uiMsg = 100;
        dword_B5B244 = 2;
        break;
      case 0x1Bu:
        *uiMsg = 101;
        dword_B5B24C = 2;
        break;
      case 0x1Du:
        *uiMsg = 102;
        dword_B5B25C = 2;
        break;
      case 0x1Cu:
        *uiMsg = 103;
        dword_B5B254 = 2;
        break;
      case 0x24u:
        *uiMsg = 104;
        if ( v8 )
          PgWin::SetToolTipWinText((PgWin *)v8[17].m_uiDumy[1], ToolTipText);
        dword_B5B294 = 2;
        if ( v8 )
          StatusWin::SetStoneAlarmShortcutText((StatusWin *)v8, keyName);
        break;
      case 0x25u:
        *uiMsg = 105;
        if ( v8 )
          PgWin::SetToolTipWinText((PgWin *)v8[17].m_uiFrameMsg, ToolTipText);
        dword_B5B29C = 2;
        break;
      case 0x22u:
        *uiMsg = 173;
        if ( v9 )
          PgWin::SetToolTipWinText((PgWin *)v9[17].m_uiFrameMsg, ToolTipText);
        dword_B5B284 = 2;
        break;
      case 0x23u:
        *uiMsg = 112;
        dword_B5B28C = 2;
        break;
      case 0x26u:
        *uiMsg = 44;
        dword_B5B2A4 = 2;
        break;
      case 0x27u:
        *uiMsg = 172;
        if ( v9 )
          PgWin::SetToolTipWinText((PgWin *)v9[17].m_uiDumy[1], ToolTipText);
        dword_B5B2AC = 2;
        break;
      case 0x2Bu:
        *uiMsg = 183;
        dword_B5B2CC = 2;
        break;
      case 0x2Cu:
        dword_B5B2D4 = 1;
        break;
      case 0x2Eu:
        *uiMsg = 214;
        if ( v9 )
          PgWin::SetToolTipWinText((PgWin *)v9[17].m_uiFrameWParam, ToolTipText);
        dword_B5B2E4 = 0;
        break;
      case 0x2Fu:
        *uiMsg = 45;
        dword_B5B2EC = 3;
        break;
      case 0x30u:
        *uiMsg = 46;
        dword_B5B2F4 = 3;
        break;
      case 0x31u:
        *uiMsg = 47;
        dword_B5B2FC = 3;
        break;
      case 0x32u:
        *uiMsg = 48;
        dword_B5B304 = 3;
        break;
      case 0x33u:
        *uiMsg = 49;
        dword_B5B30C = 3;
        break;
      case 0x34u:
        *uiMsg = 50;
        dword_B5B314 = 3;
        break;
      case 0x35u:
        *uiMsg = 51;
        dword_B5B31C = 3;
        break;
      case 0x36u:
        *uiMsg = 52;
        dword_B5B324 = 3;
        break;
      case 0x37u:
        *uiMsg = 53;
        dword_B5B32C = 3;
        break;
      case 0x38u:
        *uiMsg = 54;
        dword_B5B334 = 3;
        break;
      case 0x39u:
        *uiMsg = 55;
        dword_B5B33C = 3;
        break;
      case 0x3Au:
        *uiMsg = 56;
        dword_B5B344 = 3;
        break;
      case 0x3Bu:
        *uiMsg = 57;
        dword_B5B34C = 3;
        break;
      case 0x3Cu:
        *uiMsg = 58;
        dword_B5B354 = 3;
        break;
      case 0x3Du:
        *uiMsg = 59;
        dword_B5B35C = 3;
        break;
      case 0x3Eu:
        *uiMsg = 60;
        dword_B5B364 = 3;
        break;
      case 0x3Fu:
        *uiMsg = 61;
        dword_B5B36C = 3;
        break;
      case 0x40u:
        *uiMsg = 62;
        dword_B5B374 = 3;
        break;
      case 0x41u:
        *uiMsg = 63;
        dword_B5B37C = 3;
        break;
      case 0x42u:
        *uiMsg = 64;
        dword_B5B384 = 3;
        break;
      case 0x43u:
        *uiMsg = 65;
        dword_B5B38C = 3;
        break;
      case 0x44u:
        *uiMsg = 66;
        dword_B5B394 = 3;
        break;
      case 0x45u:
        *uiMsg = 67;
        dword_B5B39C = 3;
        break;
      case 0x46u:
        *uiMsg = 68;
        dword_B5B3A4 = 3;
        break;
      case 0x47u:
        *uiMsg = 69;
        dword_B5B3AC = 3;
        break;
      case 0x48u:
        *uiMsg = 70;
        dword_B5B3B4 = 3;
        break;
      case 0x49u:
        *uiMsg = 71;
        dword_B5B3BC = 3;
        break;
      case 0x4Au:
        *uiMsg = 72;
        dword_B5B3C4 = 3;
        break;
      case 0x4Bu:
        *uiMsg = 73;
        dword_B5B3CC = 3;
        break;
      case 0x4Cu:
        *uiMsg = 74;
        dword_B5B3D4 = 3;
        break;
      case 0x4Du:
        *uiMsg = 75;
        dword_B5B3DC = 3;
        break;
      case 0x4Eu:
        *uiMsg = 76;
        dword_B5B3E4 = 3;
        break;
      case 0x4Fu:
        *uiMsg = 77;
        dword_B5B3EC = 3;
        break;
      case 0x50u:
        *uiMsg = 78;
        dword_B5B3F4 = 3;
        break;
      case 0x51u:
        *uiMsg = 79;
        dword_B5B3FC = 3;
        break;
      case 0x52u:
        *uiMsg = 80;
        dword_B5B404 = 3;
        break;
      case 0x53u:
        *uiMsg = 81;
        dword_B5B40C = 3;
        break;
      case 0x54u:
        *uiMsg = 82;
        dword_B5B414 = 3;
        break;
      case 0x55u:
        *uiMsg = 83;
        dword_B5B41C = 3;
        break;
      case 0x56u:
        *uiMsg = 84;
        dword_B5B424 = 3;
        break;
      case 0x57u:
        *uiMsg = 85;
        dword_B5B42C = 3;
        break;
      case 0x58u:
        *uiMsg = 86;
        dword_B5B434 = 3;
        break;
      case 0x59u:
        *uiMsg = 87;
        dword_B5B43C = 3;
        break;
      case 0x5Au:
        *uiMsg = 88;
        dword_B5B444 = 3;
        break;
      case 0x5Bu:
        *uiMsg = 89;
        dword_B5B44C = 3;
        break;
      case 0x5Cu:
        *uiMsg = 90;
        dword_B5B454 = 3;
        break;
      case 0x5Du:
        *uiMsg = 91;
        dword_B5B45C = 3;
        break;
      case 0x5Eu:
        *uiMsg = 92;
        dword_B5B464 = 3;
        break;
      default:
        bDataReadOK = 0;
        break;
    }
    result = bDataReadOK;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B5B174: using guessed type int dword_B5B174;
// B5B17C: using guessed type int dword_B5B17C;
// B5B184: using guessed type int dword_B5B184;
// B5B18C: using guessed type int dword_B5B18C;
// B5B194: using guessed type int dword_B5B194;
// B5B19C: using guessed type int dword_B5B19C;
// B5B1A4: using guessed type int dword_B5B1A4;
// B5B1AC: using guessed type int dword_B5B1AC;
// B5B1B4: using guessed type int dword_B5B1B4;
// B5B1BC: using guessed type int dword_B5B1BC;
// B5B1C4: using guessed type int dword_B5B1C4;
// B5B1CC: using guessed type int dword_B5B1CC;
// B5B1D4: using guessed type int dword_B5B1D4;
// B5B1DC: using guessed type int dword_B5B1DC;
// B5B1E4: using guessed type int dword_B5B1E4;
// B5B1EC: using guessed type int dword_B5B1EC;
// B5B1F4: using guessed type int dword_B5B1F4;
// B5B1FC: using guessed type int dword_B5B1FC;
// B5B204: using guessed type int dword_B5B204;
// B5B20C: using guessed type int dword_B5B20C;
// B5B214: using guessed type int dword_B5B214;
// B5B21C: using guessed type int dword_B5B21C;
// B5B224: using guessed type int dword_B5B224;
// B5B22C: using guessed type int dword_B5B22C;
// B5B234: using guessed type int dword_B5B234;
// B5B244: using guessed type int dword_B5B244;
// B5B24C: using guessed type int dword_B5B24C;
// B5B254: using guessed type int dword_B5B254;
// B5B25C: using guessed type int dword_B5B25C;
// B5B284: using guessed type int dword_B5B284;
// B5B28C: using guessed type int dword_B5B28C;
// B5B294: using guessed type int dword_B5B294;
// B5B29C: using guessed type int dword_B5B29C;
// B5B2A4: using guessed type int dword_B5B2A4;
// B5B2AC: using guessed type int dword_B5B2AC;
// B5B2B4: using guessed type int dword_B5B2B4;
// B5B2BC: using guessed type int dword_B5B2BC;
// B5B2C4: using guessed type int dword_B5B2C4;
// B5B2CC: using guessed type int dword_B5B2CC;
// B5B2D4: using guessed type int dword_B5B2D4;
// B5B2DC: using guessed type int dword_B5B2DC;
// B5B2E4: using guessed type int dword_B5B2E4;
// B5B2EC: using guessed type int dword_B5B2EC;
// B5B2F4: using guessed type int dword_B5B2F4;
// B5B2FC: using guessed type int dword_B5B2FC;
// B5B304: using guessed type int dword_B5B304;
// B5B30C: using guessed type int dword_B5B30C;
// B5B314: using guessed type int dword_B5B314;
// B5B31C: using guessed type int dword_B5B31C;
// B5B324: using guessed type int dword_B5B324;
// B5B32C: using guessed type int dword_B5B32C;
// B5B334: using guessed type int dword_B5B334;
// B5B33C: using guessed type int dword_B5B33C;
// B5B344: using guessed type int dword_B5B344;
// B5B34C: using guessed type int dword_B5B34C;
// B5B354: using guessed type int dword_B5B354;
// B5B35C: using guessed type int dword_B5B35C;
// B5B364: using guessed type int dword_B5B364;
// B5B36C: using guessed type int dword_B5B36C;
// B5B374: using guessed type int dword_B5B374;
// B5B37C: using guessed type int dword_B5B37C;
// B5B384: using guessed type int dword_B5B384;
// B5B38C: using guessed type int dword_B5B38C;
// B5B394: using guessed type int dword_B5B394;
// B5B39C: using guessed type int dword_B5B39C;
// B5B3A4: using guessed type int dword_B5B3A4;
// B5B3AC: using guessed type int dword_B5B3AC;
// B5B3B4: using guessed type int dword_B5B3B4;
// B5B3BC: using guessed type int dword_B5B3BC;
// B5B3C4: using guessed type int dword_B5B3C4;
// B5B3CC: using guessed type int dword_B5B3CC;
// B5B3D4: using guessed type int dword_B5B3D4;
// B5B3DC: using guessed type int dword_B5B3DC;
// B5B3E4: using guessed type int dword_B5B3E4;
// B5B3EC: using guessed type int dword_B5B3EC;
// B5B3F4: using guessed type int dword_B5B3F4;
// B5B3FC: using guessed type int dword_B5B3FC;
// B5B404: using guessed type int dword_B5B404;
// B5B40C: using guessed type int dword_B5B40C;
// B5B414: using guessed type int dword_B5B414;
// B5B41C: using guessed type int dword_B5B41C;
// B5B424: using guessed type int dword_B5B424;
// B5B42C: using guessed type int dword_B5B42C;
// B5B434: using guessed type int dword_B5B434;
// B5B43C: using guessed type int dword_B5B43C;
// B5B444: using guessed type int dword_B5B444;
// B5B44C: using guessed type int dword_B5B44C;
// B5B454: using guessed type int dword_B5B454;
// B5B45C: using guessed type int dword_B5B45C;
// B5B464: using guessed type int dword_B5B464;

//----- (0053DCE0) --------------------------------------------------------
char *__thiscall KeyRemappingWin::GetKeyString(KeyRemappingWin *this, char uiKeyValue, char uiModifier)
{
  signed int v3; // eax@88
  int v4; // eax@92
  int v5; // eax@93
  char *v7; // [sp-Ch] [bp-114h]@3
  const char *v8; // [sp-8h] [bp-110h]@3
  const char *v9; // [sp-8h] [bp-110h]@95
  char temp[2]; // [sp+0h] [bp-108h]@82
  char keyName[256]; // [sp+4h] [bp-104h]@1
  unsigned int v12; // [sp+104h] [bp-4h]@1
  int v13; // [sp+108h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  keyName[0] = 0;
  memset(&keyName[1], 0, 0xFFu);
  switch ( uiKeyValue )
  {
    case 0:
      TextData::Get(0x3343908Bu);
      sprintf(keyName, "%s");
      goto LABEL_85;
    case 0x1B:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xD:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x31:
      v8 = "%s";
      goto LABEL_83;
    case 0x32:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x33:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x34:
      v8 = "%s";
      goto LABEL_83;
    case 0x35:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x36:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x37:
      v8 = "%s";
      goto LABEL_83;
    case 0x38:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x39:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x30:
      v8 = "%s";
      goto LABEL_83;
    case 0xBD:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xBB:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xDB:
      v8 = "%s";
      goto LABEL_83;
    case 0xDD:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xBA:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xDE:
      v8 = "%s";
      goto LABEL_83;
    case 0xDC:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xBC:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xBE:
      v8 = "%s";
      goto LABEL_83;
    case 0x6F:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x20:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x70:
      v8 = "%s";
      goto LABEL_83;
    case 0x71:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x72:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x73:
      v8 = "%s";
      goto LABEL_83;
    case 0x74:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x75:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x76:
      v8 = "%s";
      goto LABEL_83;
    case 0x77:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x78:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x79:
      v8 = "%s";
      goto LABEL_83;
    case 0x24:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x26:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x21:
      v8 = "%s";
      goto LABEL_83;
    case 0x6D:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x25:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x27:
      v8 = "%s";
      goto LABEL_83;
    case 0x6B:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x23:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x28:
      v8 = "%s";
      goto LABEL_83;
    case 0x22:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x2D:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x2E:
      v8 = "%s";
      goto LABEL_83;
    case 0x7A:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x7B:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xBF:
      v8 = "%s";
      goto LABEL_83;
    case 0xC0:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x10:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x11:
      v8 = "%s";
      goto LABEL_83;
    case 0x12:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x14:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x90:
      v8 = "%s";
      goto LABEL_83;
    case 0x91:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x5B:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xF5:
      v8 = "%s";
      goto LABEL_83;
    case 8:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x6A:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x13:
      v8 = "%s";
      goto LABEL_83;
    case 0x60:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x61:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x62:
      v8 = "%s";
      goto LABEL_83;
    case 0x63:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x64:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x65:
      v8 = "%s";
      goto LABEL_83;
    case 0x66:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x67:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x68:
      v8 = "%s";
      goto LABEL_83;
    case 0x69:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0x6E:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xF8:
      v8 = "%s";
      goto LABEL_83;
    case 0xF9:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xFA:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xFB:
      v8 = "%s";
      goto LABEL_83;
    case 0xFC:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xFD:
      v8 = "%s";
      v7 = keyName;
      break;
    case 0xFE:
      v8 = "%s";
      goto LABEL_83;
    case 0xFF:
      v8 = "%s";
      v7 = keyName;
      break;
    default:
      temp[0] = uiKeyValue;
      temp[1] = 0;
      v8 = "%s";
LABEL_83:
      v7 = keyName;
      break;
  }
  sprintf(v7, v8);
LABEL_85:
  switch ( uiModifier )
  {
    case 16:
      v3 = 64;
      break;
    case 17:
      v3 = 1;
      break;
    case 18:
      v3 = 4;
      break;
    default:
      v3 = 0;
      break;
  }
  v4 = v3 - 1;
  if ( v4 )
  {
    v5 = v4 - 3;
    if ( v5 )
    {
      if ( v5 == 60 )
        v9 = "Shift + %s";
      else
        v9 = "%s";
    }
    else
    {
      v9 = "Alt + %s";
    }
  }
  else
  {
    v9 = "Ctrl + %s";
  }
  sprintf(resultKeyName, v9);
  return resultKeyName;
}
// A85C00: using guessed type int __security_cookie;

//----- (0053E650) --------------------------------------------------------
void __thiscall KeyRemappingWin::SetUIPageInfo(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // edi@1
  unsigned int v2; // eax@1
  unsigned int v3; // esi@1
  int v4; // eax@2
  int v5; // eax@9
  int v6; // ebx@9
  int v7; // eax@11
  unsigned int v8; // esi@18
  int v9; // [sp+0h] [bp-128h]@0
  signed int v10; // [sp+0h] [bp-128h]@4
  int *v11; // [sp+Ch] [bp-11Ch]@9
  unsigned int AttribCount; // [sp+10h] [bp-118h]@1
  signed int eSelectedAttrib; // [sp+14h] [bp-114h]@0
  int v14; // [sp+18h] [bp-110h]@9
  int v15; // [sp+1Ch] [bp-10Ch]@9
  int v16; // [sp+20h] [bp-108h]@9
  char keyName[256]; // [sp+24h] [bp-104h]@13
  unsigned int v18; // [sp+124h] [bp-4h]@1
  int v19; // [sp+128h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v1 = this;
  v2 = this->m_uiCurPageType;
  v3 = 0;
  AttribCount = 0;
  if ( !v2 )
  {
    eSelectedAttrib = 1;
    goto LABEL_7;
  }
  v4 = v2 - 1;
  if ( !v4 )
  {
    eSelectedAttrib = 2;
LABEL_7:
    ((void (__stdcall *)(_DWORD, int))this->m_pkPrePageBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      0,
      v9);
    v10 = 0;
    goto LABEL_8;
  }
  if ( v4 == 1 )
  {
    eSelectedAttrib = 3;
    ((void (__stdcall *)(signed int, int))this->m_pkPrePageBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      1,
      v9);
    v10 = 1;
LABEL_8:
    ((void (__cdecl *)(signed int))v1->m_pkNextPageBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v10);
  }
  v15 = (int)v1->m_apkKeyMappingBtn;
  v5 = (int)&dword_B5B174;
  v11 = &dword_B5B174;
  v6 = (int)v1->m_keyMapping;
  v16 = (int)v1->m_apkInvLevWin;
  v14 = (int)v1->m_apkInvTextWin;
  do
  {
    if ( *(_DWORD *)v5 != eSelectedAttrib )
      goto LABEL_21;
    v7 = 24 * v1->m_uiCurPage;
    if ( v3 < v7 || v3 >= v7 + 24 )
      goto LABEL_19;
    keyName[0] = 0;
    memset(&keyName[1], 0, 0xFFu);
    KeyRemappingWin::GetKeyString(v1, *(_BYTE *)(v6 + 257), *(_BYTE *)(v6 + 256));
    sprintf(keyName, "%s");
    if ( *(_BYTE *)v6 != 45 || *(_BYTE *)(v6 + 1) != 45 )
    {
      if ( v3 >= 0x18 )
      {
        v8 = v3 % 0x18;
        ((void (__stdcall *)(int))v1->m_apkInvTextWin[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v6);
        ((void (__stdcall *)(_DWORD))v1->m_apkInvLevWin[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(keyName);
        v1->m_apkKeyMappingBtn[v8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v1->m_apkKeyMappingBtn[v8],
          1u);
        v3 = AttribCount;
      }
      else
      {
        (*(void (__stdcall **)(int))(**(_DWORD **)v14 + 472))(v6);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v16 + 472))(keyName);
        (*(void (__stdcall **)(signed int))(**(_DWORD **)v15 + 256))(1);
      }
LABEL_19:
      v14 += 4;
      v16 += 4;
      ++v3;
      v15 += 4;
      goto LABEL_20;
    }
    v14 -= 4;
    v16 -= 4;
    --v3;
    v15 -= 4;
LABEL_20:
    AttribCount = v3;
LABEL_21:
    v5 = (int)(v11 + 2);
    v6 += 258;
    v11 = (int *)v5;
  }
  while ( v5 < (signed int)&unk_B5B46C );
}
// A85C00: using guessed type int __security_cookie;
// B5B174: using guessed type int dword_B5B174;

//----- (0053E8A0) --------------------------------------------------------
void __thiscall KeyRemappingWin::SetKeyName(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // esi@1
  signed int v2; // edi@1

  v1 = this;
  v2 = 0;
  do
  {
    switch ( v2 )
    {
      case 0:
        TextData::Get(0xD8DC563Du);
        sprintf((char *)v1->m_keyMapping, "%s");
        break;
      case 1:
        TextData::Get(0x392C5A44u);
        sprintf(v1->m_keyMapping[1].Name, "%s");
        break;
      case 2:
        TextData::Get(0x1E6A9D86u);
        sprintf(v1->m_keyMapping[2].Name, "%s");
        break;
      case 3:
        TextData::Get(0x35849D96u);
        sprintf(v1->m_keyMapping[3].Name, "%s");
        break;
      case 4:
        TextData::Get(0xDE33523Au);
        sprintf(v1->m_keyMapping[4].Name, "%s");
        break;
      case 5:
        TextData::Get(0xE8395936u);
        sprintf(v1->m_keyMapping[5].Name, "%s");
        break;
      case 6:
        TextData::Get(0x3085A787u);
        sprintf(v1->m_keyMapping[6].Name, "%s");
        break;
      case 7:
        TextData::Get(0x2B6EA294u);
        sprintf(v1->m_keyMapping[7].Name, "%s");
        break;
      case 8:
        TextData::Get(0x24244F45u);
        sprintf(v1->m_keyMapping[8].Name, "%s");
        break;
      case 9:
        TextData::Get(0x29205A79u);
        sprintf(v1->m_keyMapping[9].Name, "%s");
        break;
      case 10:
        TextData::Get(0x6F6B96F6u);
        sprintf(v1->m_keyMapping[10].Name, "%s");
        break;
      case 11:
        TextData::Get(0x9B609A7Du);
        sprintf(v1->m_keyMapping[11].Name, "%s");
        break;
      case 12:
        TextData::Get(0x877EA286u);
        sprintf(v1->m_keyMapping[12].Name, "%s");
        break;
      case 13:
        TextData::Get(0x687E0CCDu);
        sprintf(v1->m_keyMapping[13].Name, "%s");
        break;
      case 14:
        TextData::Get(0xC1E4E133u);
        sprintf(v1->m_keyMapping[14].Name, "%s");
        break;
      case 23:
        TextData::Get(0xE2DB06F1u);
        sprintf(v1->m_keyMapping[23].Name, "%s");
        break;
      case 24:
        TextData::Get(0xD4D65134u);
        sprintf(v1->m_keyMapping[24].Name, "%s");
        break;
      case 26:
        TextData::Get(0xD8E05A37u);
        sprintf(v1->m_keyMapping[26].Name, "%s");
        break;
      case 27:
        TextData::Get(0xDC3A4E38u);
        sprintf(v1->m_keyMapping[27].Name, "%s");
        break;
      case 28:
        TextData::Get(0x293D518Bu);
        sprintf(v1->m_keyMapping[28].Name, "%s");
        break;
      case 29:
        TextData::Get(0xE8DE563Eu);
        sprintf(v1->m_keyMapping[29].Name, "%s");
        break;
      case 34:
        TextData::Get(0xD83A4B44u);
        sprintf(v1->m_keyMapping[34].Name, "%s");
        break;
      case 35:
        TextData::Get(0xE7E75640u);
        sprintf(v1->m_keyMapping[35].Name, "%s");
        break;
      case 37:
        TextData::Get(0x31365A44u);
        sprintf(v1->m_keyMapping[37].Name, "%s");
        break;
      case 36:
        TextData::Get(0x312B5A44u);
        sprintf(v1->m_keyMapping[36].Name, "%s");
        break;
      case 38:
        TextData::Get(0x7D6E9C97u);
        sprintf(v1->m_keyMapping[38].Name, "%s");
        break;
      case 39:
        TextData::Get(0xE72C5840u);
        sprintf(v1->m_keyMapping[39].Name, "%s");
        break;
      case 40:
        TextData::Get(0xD43D5A43u);
        sprintf(v1->m_keyMapping[40].Name, "%s");
        break;
      case 41:
        TextData::Get(0x2F2FA284u);
        sprintf(v1->m_keyMapping[41].Name, "%s");
        break;
      case 42:
        TextData::Get(0x83D5E5D9u);
        sprintf(v1->m_keyMapping[42].Name, "%s");
        break;
      case 43:
        TextData::Get(0xAE1E232Bu);
        sprintf(v1->m_keyMapping[43].Name, "%s");
        break;
      case 47:
        TextData::Get(0x4F9ADDF4u);
        sprintf(v1->m_keyMapping[47].Name, "%s");
        break;
      case 48:
        TextData::Get(0x4F9ADEF4u);
        sprintf(v1->m_keyMapping[48].Name, "%s");
        break;
      case 49:
        TextData::Get(0x4F9ADFF4u);
        sprintf(v1->m_keyMapping[49].Name, "%s");
        break;
      case 50:
        TextData::Get(0x4F9AE0F4u);
        sprintf(v1->m_keyMapping[50].Name, "%s");
        break;
      case 51:
        TextData::Get(0x4F9AE1F4u);
        sprintf(v1->m_keyMapping[51].Name, "%s");
        break;
      case 52:
        TextData::Get(0x4F9AE2F4u);
        sprintf(v1->m_keyMapping[52].Name, "%s");
        break;
      case 53:
        TextData::Get(0x4F9AE3F4u);
        sprintf(v1->m_keyMapping[53].Name, "%s");
        break;
      case 54:
        TextData::Get(0x4F9AE4F4u);
        sprintf(v1->m_keyMapping[54].Name, "%s");
        break;
      case 55:
        TextData::Get(0x4F9AE5F4u);
        sprintf(v1->m_keyMapping[55].Name, "%s");
        break;
      case 56:
        TextData::Get(0x4FCADDF4u);
        sprintf(v1->m_keyMapping[56].Name, "%s");
        break;
      case 57:
        TextData::Get(0x4FCBDDF4u);
        sprintf(v1->m_keyMapping[57].Name, "%s");
        break;
      case 58:
        TextData::Get(0x4FCCDDF4u);
        sprintf(v1->m_keyMapping[58].Name, "%s");
        break;
      case 59:
        TextData::Get(0x509ADDF4u);
        sprintf(v1->m_keyMapping[59].Name, "%s");
        break;
      case 60:
        TextData::Get(0x509ADEF4u);
        sprintf(v1->m_keyMapping[60].Name, "%s");
        break;
      case 61:
        TextData::Get(0x509ADFF4u);
        sprintf(v1->m_keyMapping[61].Name, "%s");
        break;
      case 62:
        TextData::Get(0x509AE0F4u);
        sprintf(v1->m_keyMapping[62].Name, "%s");
        break;
      case 63:
        TextData::Get(0x509AE1F4u);
        sprintf(v1->m_keyMapping[63].Name, "%s");
        break;
      case 64:
        TextData::Get(0x509AE2F4u);
        sprintf(v1->m_keyMapping[64].Name, "%s");
        break;
      case 65:
        TextData::Get(0x509AE3F4u);
        sprintf(v1->m_keyMapping[65].Name, "%s");
        break;
      case 66:
        TextData::Get(0x509AE4F4u);
        sprintf(v1->m_keyMapping[66].Name, "%s");
        break;
      case 67:
        TextData::Get(0x509AE5F4u);
        sprintf(v1->m_keyMapping[67].Name, "%s");
        break;
      case 68:
        TextData::Get(0x50CADDF4u);
        sprintf(v1->m_keyMapping[68].Name, "%s");
        break;
      case 69:
        TextData::Get(0x50CBDDF4u);
        sprintf(v1->m_keyMapping[69].Name, "%s");
        break;
      case 70:
        TextData::Get(0x50CCDDF4u);
        sprintf(v1->m_keyMapping[70].Name, "%s");
        break;
      case 71:
        TextData::Get(0x519ADDF4u);
        sprintf(v1->m_keyMapping[71].Name, "%s");
        break;
      case 72:
        TextData::Get(0x519ADEF4u);
        sprintf(v1->m_keyMapping[72].Name, "%s");
        break;
      case 73:
        TextData::Get(0x519ADFF4u);
        sprintf(v1->m_keyMapping[73].Name, "%s");
        break;
      case 74:
        TextData::Get(0x519AE0F4u);
        sprintf(v1->m_keyMapping[74].Name, "%s");
        break;
      case 75:
        TextData::Get(0x519AE1F4u);
        sprintf(v1->m_keyMapping[75].Name, "%s");
        break;
      case 76:
        TextData::Get(0x519AE2F4u);
        sprintf(v1->m_keyMapping[76].Name, "%s");
        break;
      case 77:
        TextData::Get(0x519AE3F4u);
        sprintf(v1->m_keyMapping[77].Name, "%s");
        break;
      case 78:
        TextData::Get(0x519AE4F4u);
        sprintf(v1->m_keyMapping[78].Name, "%s");
        break;
      case 79:
        TextData::Get(0x519AE5F4u);
        sprintf(v1->m_keyMapping[79].Name, "%s");
        break;
      case 80:
        TextData::Get(0x51CADDF4u);
        sprintf(v1->m_keyMapping[80].Name, "%s");
        break;
      case 81:
        TextData::Get(0x51CBDDF4u);
        sprintf(v1->m_keyMapping[81].Name, "%s");
        break;
      case 82:
        TextData::Get(0x51CCDDF4u);
        sprintf(v1->m_keyMapping[82].Name, "%s");
        break;
      case 83:
        TextData::Get(0x529ADDF4u);
        sprintf(v1->m_keyMapping[83].Name, "%s");
        break;
      case 84:
        TextData::Get(0x529ADEF4u);
        sprintf(v1->m_keyMapping[84].Name, "%s");
        break;
      case 85:
        TextData::Get(0x529ADFF4u);
        sprintf(v1->m_keyMapping[85].Name, "%s");
        break;
      case 86:
        TextData::Get(0x529AE0F4u);
        sprintf(v1->m_keyMapping[86].Name, "%s");
        break;
      case 87:
        TextData::Get(0x529AE1F4u);
        sprintf(v1->m_keyMapping[87].Name, "%s");
        break;
      case 88:
        TextData::Get(0x529AE2F4u);
        sprintf(v1->m_keyMapping[88].Name, "%s");
        break;
      case 89:
        TextData::Get(0x529AE3F4u);
        sprintf(v1->m_keyMapping[89].Name, "%s");
        break;
      case 90:
        TextData::Get(0x529AE4F4u);
        sprintf(v1->m_keyMapping[90].Name, "%s");
        break;
      case 91:
        TextData::Get(0x529AE5F4u);
        sprintf(v1->m_keyMapping[91].Name, "%s");
        break;
      case 92:
        TextData::Get(0x52CADDF4u);
        sprintf(v1->m_keyMapping[92].Name, "%s");
        break;
      case 93:
        TextData::Get(0x52CBDDF4u);
        sprintf(v1->m_keyMapping[93].Name, "%s");
        break;
      case 94:
        TextData::Get(0x52CCDDF4u);
        sprintf(v1->m_keyMapping[94].Name, "%s");
        break;
      case 15:
        TextData::Get(0xE2F5413Cu);
        sprintf(v1->m_keyMapping[15].Name, "%s");
        break;
      case 16:
        TextData2::Get(0x839E68F4u);
        sprintf(v1->m_keyMapping[16].Name, "%s");
        break;
      case 17:
        TextData2::Get(0xE2DAD147u);
        sprintf(v1->m_keyMapping[17].Name, "%s");
        break;
      case 18:
        TextData2::Get(0xCDC81050u);
        sprintf(v1->m_keyMapping[18].Name, "%s");
        break;
      case 19:
        TextData2::Get(0x7C857D9Eu);
        sprintf(v1->m_keyMapping[19].Name, "%s");
        break;
      case 20:
        TextData2::Get(0xC0EA0236u);
        sprintf(v1->m_keyMapping[20].Name, "%s");
        break;
      case 22:
        TextData2::Get(0xABCEBA58u);
        sprintf(v1->m_keyMapping[22].Name, "%s");
        break;
      case 45:
        TextData2::Get(0xFB453836u);
        sprintf(v1->m_keyMapping[45].Name, "%s");
        break;
      case 21:
        TextData2::Get(0xFDF7DB2Eu);
        sprintf(v1->m_keyMapping[21].Name, "%s");
        break;
      case 46:
        TextData2::Get(0x9BF6EDF0u);
        sprintf(v1->m_keyMapping[46].Name, "%s");
        break;
      default:
        sprintf(v1->m_keyMapping[v2].Name, "%s");
        break;
    }
    ++v2;
  }
  while ( v2 < 95 );
}

//----- (0053F6E0) --------------------------------------------------------
void __thiscall KeyRemappingWin::ReflashContents(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // edi@1
  char *v2; // esi@1
  signed int v3; // ebx@1
  unsigned int v4; // eax@3
  unsigned int v5; // esi@3
  int v6; // eax@4
  int v7; // ecx@11
  int v8; // ebx@11
  int v9; // eax@13
  unsigned int v10; // esi@20
  int v11; // [sp+0h] [bp-128h]@0
  signed int v12; // [sp+0h] [bp-128h]@6
  int *v13; // [sp+Ch] [bp-11Ch]@11
  unsigned int v14; // [sp+10h] [bp-118h]@3
  signed int v15; // [sp+14h] [bp-114h]@0
  int v16; // [sp+18h] [bp-110h]@11
  int v17; // [sp+1Ch] [bp-10Ch]@11
  int v18; // [sp+20h] [bp-108h]@11
  char string; // [sp+24h] [bp-104h]@15
  char dst; // [sp+25h] [bp-103h]@15
  unsigned int v21; // [sp+124h] [bp-4h]@1
  int v22; // [sp+128h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v1 = this;
  v2 = (char *)this->m_apkInvLevWin;
  v3 = 24;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**((_DWORD **)v2 - 24) + 472))(&unk_99C371);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v2 + 472))(&unk_99C372);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 24) + 256))(0);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = v1->m_uiCurPageType;
  v5 = 0;
  v14 = 0;
  if ( !v4 )
  {
    v15 = 1;
    goto LABEL_9;
  }
  v6 = v4 - 1;
  if ( !v6 )
  {
    v15 = 2;
LABEL_9:
    ((void (__stdcall *)(_DWORD, int))v1->m_pkPrePageBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      0,
      v11);
    v12 = 0;
    goto LABEL_10;
  }
  if ( v6 == 1 )
  {
    v15 = 3;
    ((void (__stdcall *)(signed int, int))v1->m_pkPrePageBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      1,
      v11);
    v12 = 1;
LABEL_10:
    ((void (__cdecl *)(signed int))v1->m_pkNextPageBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v12);
  }
  v17 = (int)v1->m_apkKeyMappingBtn;
  v7 = (int)&dword_B5B174;
  v13 = &dword_B5B174;
  v8 = (int)v1->m_keyMapping;
  v18 = (int)v1->m_apkInvLevWin;
  v16 = (int)v1->m_apkInvTextWin;
  do
  {
    if ( *(_DWORD *)v7 != v15 )
      goto LABEL_23;
    v9 = 24 * v1->m_uiCurPage;
    if ( v5 < v9 || v5 >= v9 + 24 )
      goto LABEL_21;
    string = 0;
    memset(&dst, 0, 0xFFu);
    KeyRemappingWin::GetKeyString(v1, *(_BYTE *)(v8 + 257), *(_BYTE *)(v8 + 256));
    sprintf(&string, "%s");
    if ( *(_BYTE *)v8 != 45 || *(_BYTE *)(v8 + 1) != 45 )
    {
      if ( v5 >= 0x18 )
      {
        v10 = v5 % 0x18;
        ((void (__stdcall *)(int))v1->m_apkInvTextWin[v10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v8);
        ((void (__stdcall *)(char *))v1->m_apkInvLevWin[v10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&string);
        v1->m_apkKeyMappingBtn[v10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v1->m_apkKeyMappingBtn[v10],
          1u);
        v5 = v14;
      }
      else
      {
        (*(void (__stdcall **)(int))(**(_DWORD **)v16 + 472))(v8);
        (*(void (__stdcall **)(char *))(**(_DWORD **)v18 + 472))(&string);
        (*(void (__stdcall **)(signed int))(**(_DWORD **)v17 + 256))(1);
      }
LABEL_21:
      v16 += 4;
      v18 += 4;
      ++v5;
      v17 += 4;
      goto LABEL_22;
    }
    v16 -= 4;
    v18 -= 4;
    --v5;
    v17 -= 4;
LABEL_22:
    v14 = v5;
LABEL_23:
    v7 = (int)(v13 + 2);
    v8 += 258;
    v13 = (int *)v7;
  }
  while ( v7 < (signed int)&unk_B5B46C );
}
// A85C00: using guessed type int __security_cookie;
// B5B174: using guessed type int dword_B5B174;

//----- (0053F980) --------------------------------------------------------
void __thiscall KeyRemappingWin::UpdateMeWin(KeyRemappingWin *this, float fCurTime)
{
  KeyRemappingWin *v2; // esi@1
  char *v3; // edi@2
  signed int v4; // ebx@2
  bool v5; // zf@6
  signed int v6; // edx@8
  int v7; // eax@8
  int v8; // ecx@9
  int v9; // ecx@13
  int v10; // ecx@17
  int v11; // ecx@21
  int v12; // ecx@25
  PgWinText *v13; // edi@30
  NiRefObjectVtbl *v14; // ebx@30
  char *v15; // eax@30
  signed int fCurTimea; // [sp+1Ch] [bp+8h]@8

  v2 = this;
  if ( !this->m_bCheckingKey )
  {
    v3 = (char *)this->m_apkKeyMappingBtn;
    v4 = 24;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(1);
      v3 += 4;
      --v4;
    }
    while ( v4 );
  }
  if ( v2->m_bCheckingKey == 1 && KeyRemappingWin::UpdateDynamicStrings(v2, fCurTime) )
  {
    v5 = v2->m_bModeif == 0;
    v2->m_bCheckRemaping = 0;
    if ( v5 )
      v2->m_keyMapping[v2->m_uiTargetKeyIndex].modifier = 0;
    v2->m_bModeif = 1;
    v6 = 2;
    v7 = (int)&v2->m_keyMapping[0].modifier;
    fCurTimea = 19;
    do
    {
      v8 = v2->m_uiTargetKeyIndex;
      if ( v2->m_keyMapping[v8].keyValue == *(_BYTE *)(v7 + 1)
        && v2->m_keyMapping[v8].modifier == *(_BYTE *)v7
        && v2->m_uiTargetKeyIndex != v6 - 2 )
        *(_WORD *)v7 = 0;
      v9 = v2->m_uiTargetKeyIndex;
      if ( v2->m_keyMapping[v9].keyValue == *(_BYTE *)(v7 + 259)
        && v2->m_keyMapping[v9].modifier == *(_BYTE *)(v7 + 258)
        && v2->m_uiTargetKeyIndex != v6 - 1 )
        *(_WORD *)(v7 + 258) = 0;
      v10 = v2->m_uiTargetKeyIndex;
      if ( v2->m_keyMapping[v10].keyValue == *(_BYTE *)(v7 + 517)
        && v2->m_keyMapping[v10].modifier == *(_BYTE *)(v7 + 516)
        && v2->m_uiTargetKeyIndex != v6 )
        *(_WORD *)(v7 + 516) = 0;
      v11 = v2->m_uiTargetKeyIndex;
      if ( v2->m_keyMapping[v11].keyValue == *(_BYTE *)(v7 + 775)
        && v2->m_keyMapping[v11].modifier == *(_BYTE *)(v7 + 774)
        && v2->m_uiTargetKeyIndex != v6 + 1 )
        *(_WORD *)(v7 + 774) = 0;
      v12 = v2->m_uiTargetKeyIndex;
      if ( v2->m_keyMapping[v12].keyValue == *(_BYTE *)(v7 + 1033)
        && v2->m_keyMapping[v12].modifier == *(_BYTE *)(v7 + 1032) )
      {
        if ( v2->m_uiTargetKeyIndex != v6 + 2 )
          *(_WORD *)(v7 + 1032) = 0;
      }
      v6 += 5;
      v7 += 1290;
      --fCurTimea;
    }
    while ( fCurTimea );
    v13 = v2->m_apkInvLevWin[v2->m_uiSelectButIndex];
    v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v15 = KeyRemappingWin::GetKeyString(
            v2,
            v2->m_keyMapping[v2->m_uiTargetKeyIndex].keyValue,
            v2->m_keyMapping[v2->m_uiTargetKeyIndex].modifier);
    v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
    v2->m_bCheckingKey = 0;
    KeyRemappingWin::ReflashContents(v2);
  }
}

//----- (0053FBB0) --------------------------------------------------------
void __thiscall KeyRemappingWin::AddInfo(KeyRemappingWin *this, unsigned int uiTotalNum, unsigned int uiOffset)
{
  KeyRemappingWin *v3; // esi@1
  unsigned int v4; // edi@1
  char *v5; // ebx@2
  signed int v6; // [sp+8h] [bp-10Ch]@2
  const char *v7; // [sp+Ch] [bp-108h]@2
  char keyName[256]; // [sp+10h] [bp-104h]@5
  unsigned int v9; // [sp+110h] [bp-4h]@1
  int v10; // [sp+114h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  v4 = 24 * this->m_uiCurPage;
  if ( (signed int)v4 < (signed int)uiTotalNum )
  {
    v5 = &byte_A8270B[2 * (uiOffset + v4)];
    v6 = 0;
    v7 = (const char *)&this->m_keyMapping[uiOffset + v4];
    do
    {
      if ( v6 >= 24 )
        break;
      if ( !strcmp(v7, " ") )
        break;
      ((void (__stdcall *)(const char *))v3->m_apkInvTextWin[v4 - 24 * v3->m_uiCurPage]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v7);
      keyName[0] = 0;
      memset(&keyName[1], 0, 0xFFu);
      KeyRemappingWin::GetKeyString(v3, *v5, *(v5 - 1));
      sprintf(keyName, "%s");
      ((void (__stdcall *)(_DWORD))v3->m_apkInvLevWin[v4 - 24 * v3->m_uiCurPage]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(keyName);
      ((void (__stdcall *)(signed int))v3->m_apkKeyMappingBtn[v4 - 24 * v3->m_uiCurPage]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v7 += 258;
      ++v6;
      ++v4;
      v5 += 2;
    }
    while ( (signed int)v4 < (signed int)uiTotalNum );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0053FD50) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnKeyRemapping(KeyRemappingWin *this, unsigned int uiNum)
{
  KeyRemappingWin *v2; // ebx@1
  unsigned int v3; // esi@3
  char *v4; // eax@3
  int v5; // eax@3
  NiRefObjectVtbl *v6; // edi@6
  char *v7; // eax@6
  KeyMap *v8; // eax@6

  v2 = this;
  if ( this->m_bCheckRemaping )
  {
    ((void (__stdcall *)(_DWORD))this->m_apkKeyMappingBtn[this->m_uiSelectButIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    memcpy(
      &v2->m_keyMapping[v2->m_uiTargetKeyIndex],
      &v2->m_kOldKeyMap,
      sizeof(v2->m_keyMapping[v2->m_uiTargetKeyIndex]));
    v2->m_bCheckRemaping = 0;
  }
  v2->m_bCheckingKey = 0;
  KeyRemappingWin::ReflashContents(v2);
  v3 = uiNum;
  v2->m_uiSelectButIndex = uiNum;
  v4 = (char *)((int (*)(void))v2->m_apkInvTextWin[uiNum]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  v5 = KeyRemappingWin::GetKeyIndexByName(v2, v4);
  v2->m_uiTargetKeyIndex = v5;
  if ( v5 != -1 )
  {
    if ( v5 )
    {
      memcpy(&v2->m_kOldKeyMap, &v2->m_keyMapping[v5], sizeof(v2->m_kOldKeyMap));
      v3 = uiNum;
    }
    v2->m_bCheckingKey = 1;
    v6 = v2->m_apkInvLevWin[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = TextData::Get(0xF8554241u);
    v6[118].__vecDelDtor((NiRefObject *)v2->m_apkInvLevWin[v3], (unsigned int)v7);
    v8 = GameFrameWork::GetKeyMap((GameFrameWork *)v2->baseclass_0.m_pkFrameWork);
    KeyMap::RemoveAll(v8);
    ((void (__stdcall *)(_DWORD))v2->m_apkKeyMappingBtn[v2->m_uiSelectButIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v2->m_bCheckRemaping = 1;
  }
}

//----- (0053FE70) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnMainMenu(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // edi@1
  unsigned int v2; // ecx@1
  int v3; // eax@1
  int v4; // edx@2
  int v5; // esi@3
  signed int v6; // ebx@3

  v1 = this;
  v2 = 0;
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 0;
  v3 = (signed int)((char *)v1->m_pkTabList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v3 )
  {
    do
    {
      v4 = *(_DWORD *)(*(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v2++);
      *(_BYTE *)(v4 + 380) = 0;
    }
    while ( v2 < v3 );
  }
  *(_BYTE *)(**(_DWORD **)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 380) = 1;
  v5 = (int)v1->m_apkInvLevWin;
  v6 = 24;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v5 - 96) + 472))(&unk_99C371);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v5 + 472))(&unk_99C372);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 96) + 256))(0);
    v5 += 4;
    --v6;
  }
  while ( v6 );
  KeyRemappingWin::SetUIPageInfo(v1);
  ((void (__stdcall *)(signed int))v1->m_apkKeyMappingBtn[v1->m_uiSelectButIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
}

//----- (0053FF30) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnGame(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // edi@1
  unsigned int v2; // ecx@1
  int v3; // eax@1
  int v4; // edx@2
  int v5; // esi@3
  signed int v6; // ebx@3

  v1 = this;
  v2 = 0;
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 1;
  v3 = (signed int)((char *)v1->m_pkTabList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v3 )
  {
    do
    {
      v4 = *(_DWORD *)(*(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v2++);
      *(_BYTE *)(v4 + 380) = 0;
    }
    while ( v2 < v3 );
  }
  *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4) + 380) = 1;
  v5 = (int)v1->m_apkInvLevWin;
  v6 = 24;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v5 - 96) + 472))(&unk_99C371);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v5 + 472))(&unk_99C372);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 96) + 256))(0);
    v5 += 4;
    --v6;
  }
  while ( v6 );
  KeyRemappingWin::SetUIPageInfo(v1);
  ((void (__stdcall *)(signed int))v1->m_apkKeyMappingBtn[v1->m_uiSelectButIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
}

//----- (0053FFF0) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnShortCut(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // edi@1
  unsigned int v2; // ecx@1
  int v3; // eax@1
  int v4; // edx@2
  int v5; // esi@3
  signed int v6; // ebx@3

  v1 = this;
  v2 = 0;
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 2;
  v3 = (signed int)((char *)v1->m_pkTabList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v3 )
  {
    do
    {
      v4 = *(_DWORD *)(*(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v2++);
      *(_BYTE *)(v4 + 380) = 0;
    }
    while ( v2 < v3 );
  }
  *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 8) + 380) = 1;
  v5 = (int)v1->m_apkInvLevWin;
  v6 = 24;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v5 - 96) + 472))(&unk_99C371);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v5 + 472))(&unk_99C372);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 96) + 256))(0);
    v5 += 4;
    --v6;
  }
  while ( v6 );
  KeyRemappingWin::SetUIPageInfo(v1);
  ((void (__stdcall *)(signed int))v1->m_apkKeyMappingBtn[v1->m_uiSelectButIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
}

//----- (005400B0) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnPrevPage(KeyRemappingWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_uiCurPage;
  if ( v1 )
  {
    this->m_uiCurPage = v1 - 1;
    KeyRemappingWin::ReflashContents(this);
  }
}

//----- (005400D0) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnNextPage(KeyRemappingWin *this)
{
  unsigned int v1; // eax@1
  unsigned int v2; // edx@2
  unsigned int v3; // eax@7

  v1 = this->m_uiCurPageType;
  if ( v1 )
  {
    if ( v1 == 1 )
    {
      v2 = this->m_uiGameTotalNum;
    }
    else
    {
      if ( v1 != 2 )
        return;
      v2 = this->m_uiShortCutTotalNum;
    }
  }
  else
  {
    v2 = this->m_uiMainMenuTotalNum;
  }
  v3 = this->m_uiCurPage;
  if ( 8 * (3 * v3 + 3) < v2 )
  {
    this->m_uiCurPage = v3 + 1;
    KeyRemappingWin::ReflashContents(this);
  }
}

//----- (00540120) --------------------------------------------------------
void __thiscall KeyRemappingWin::SetKeyRemapping(KeyRemappingWin *this, bool bKeyboard, NiInputMouse::Button mouseKeyCode, NiInputKeyboard::KeyCode keyCode, unsigned int msg, unsigned int modifier)
{
  KeyMap *v6; // esi@3

  if ( mouseKeyCode && mouseKeyCode != 1 )
  {
    v6 = GameFrameWork::GetKeyMap((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
    if ( bKeyboard )
      KeyMap::Remove(v6, keyCode, modifier);
    else
      KeyMap::Remove(v6, mouseKeyCode, modifier);
    KeyMap::Remove(v6, msg);
    if ( msg < 0x62 || msg > 0x65 )
    {
      if ( bKeyboard )
        KeyMap::Add(v6, msg, keyCode, WAS_RELEASED, modifier, 0);
      else
        KeyMap::AddMouse(v6, msg, mouseKeyCode, WAS_RELEASED, modifier, 0);
    }
    else
    {
      if ( bKeyboard )
        KeyMap::Add(v6, msg, keyCode, IS_DOWN, modifier, 0);
      else
        KeyMap::AddMouse(v6, msg, mouseKeyCode, IS_DOWN, modifier, 0);
    }
  }
}

//----- (005401E0) --------------------------------------------------------
void __thiscall KeyRemappingWin::SetFromKeyMsgToGameMsg(KeyRemappingWin *this)
{
  unsigned int v1; // esi@1
  char *v2; // edi@1
  char v3; // bl@2
  char *v4; // eax@4
  char v5; // ST10_1@5
  KeyRemappingWin *v6; // ebx@5
  char v7; // cl@6
  unsigned int v8; // edi@10
  NiInputKeyboard::KeyCode v9; // ebx@14
  KeyMap *v10; // esi@14
  NiInputMouse::Button v11; // esi@17
  KeyMap *v12; // edi@35
  unsigned int v13; // ebx@35
  KeyRemappingWin *v14; // ebx@39
  unsigned int v15; // edi@39
  char *v16; // esi@39
  char *v17; // eax@43
  KeyMap *v18; // esi@47
  KeyMap::PressType v19; // [sp-Ch] [bp-134h]@36
  unsigned int v20; // [sp-8h] [bp-130h]@36
  int uiMsg; // [sp+Ch] [bp-11Ch]@4
  char *v22; // [sp+10h] [bp-118h]@1
  unsigned int i; // [sp+14h] [bp-114h]@1
  unsigned int v24; // [sp+18h] [bp-110h]@5
  unsigned int uiModif; // [sp+1Ch] [bp-10Ch]@29
  KeyRemappingWin *thisa; // [sp+20h] [bp-108h]@1
  char keyName[256]; // [sp+24h] [bp-104h]@5
  unsigned int v28; // [sp+124h] [bp-4h]@1
  int v29; // [sp+128h] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  v1 = 0;
  v2 = &this->m_keyMapping[0].keyValue;
  thisa = this;
  i = 0;
  v22 = &this->m_keyMapping[0].keyValue;
  do
  {
    v3 = *(v2 - 1);
    if ( v3 || *v2 )
    {
      keyName[0] = 0;
      memset(&keyName[1], 0, 0xFFu);
      v5 = v3;
      v6 = thisa;
      KeyRemappingWin::GetKeyString(thisa, *v2, v5);
      sprintf(keyName, "%s");
      if ( KeyRemappingWin::KeyMappingInfo(v6, v1, &v24, keyName) )
      {
        v7 = *v2;
        if ( (unsigned __int8)*v2 >= 0xF8u )
        {
          v11 = -1;
          switch ( v7 )
          {
            case 0xF8:
              v11 = 0;
              break;
            case 0xF9:
              v11 = 1;
              break;
            case 0xFA:
              v11 = 2;
              break;
            case 0xFB:
              v11 = 3;
              break;
            case 0xFC:
              v11 = 4;
              break;
            case 0xFD:
              v11 = 5;
              break;
            case 0xFE:
              v11 = 6;
              break;
            case 0xFF:
              v11 = 7;
              break;
            default:
              break;
          }
          switch ( *(v2 - 1) )
          {
            case 16:
              uiModif = 64;
              break;
            case 17:
              uiModif = 1;
              break;
            case 18:
              uiModif = 4;
              break;
            default:
              uiModif = 0;
              break;
          }
          if ( v11 && v11 != 1 )
          {
            v12 = GameFrameWork::GetKeyMap((GameFrameWork *)v6->baseclass_0.m_pkFrameWork);
            KeyMap::Remove(v12, v11, uiModif);
            v13 = v24;
            KeyMap::Remove(v12, v24);
            if ( v13 - 98 > 3 )
            {
              v20 = uiModif;
              v19 = 1;
            }
            else
            {
              v20 = uiModif;
              v19 = 2;
            }
            KeyMap::AddMouse(v12, v13, v11, v19, v20, 0);
          }
        }
        else
        {
          switch ( *(v2 - 1) )
          {
            case 16:
              v8 = 64;
              break;
            case 17:
              v8 = 1;
              break;
            case 18:
              v8 = 4;
              break;
            default:
              v8 = 0;
              break;
          }
          v9 = KeyRemappingWin::ConvertKeyCode(v6, v7);
          v10 = GameFrameWork::GetKeyMap((GameFrameWork *)thisa->baseclass_0.m_pkFrameWork);
          KeyMap::Remove(v10, v9, v8);
          KeyMap::Remove(v10, v24);
          if ( v24 - 98 > 3 )
            KeyMap::Add(v10, v24, v9, WAS_RELEASED, v8, 0);
          else
            KeyMap::Add(v10, v24, v9, IS_DOWN, v8, 0);
        }
        v14 = thisa;
        v15 = 0;
        v16 = &thisa->m_keyMapping[0].modifier;
        do
        {
          if ( v16[1] == *v22 && *v16 == *(v22 - 1) && v15 != i )
          {
            *(_WORD *)v16 = 0;
            v17 = TextData::Get(0x3343908Bu);
            KeyRemappingWin::KeyMappingInfo(v14, v15, &v24, v17);
          }
          ++v15;
          v16 += 258;
        }
        while ( (signed int)v15 < 95 );
        v1 = i;
        v2 = v22;
      }
    }
    else
    {
      v4 = TextData::Get(0x3343908Bu);
      KeyRemappingWin::KeyMappingInfo(thisa, v1, (unsigned int *)&uiMsg, v4);
    }
    ++v1;
    v2 += 258;
    i = v1;
    v22 = v2;
  }
  while ( (signed int)v1 < 95 );
  v18 = GameFrameWork::GetKeyMap((GameFrameWork *)thisa->baseclass_0.m_pkFrameWork);
  KeyMap::Add(v18, 0x1Eu, KEY_F1, WAS_RELEASED, 0, 0);
  KeyMap::Add(v18, 0x1Fu, KEY_F2, WAS_RELEASED, 0, 0);
  KeyMap::Add(v18, 0x20u, KEY_F3, WAS_RELEASED, 0, 0);
  KeyMap::Add(v18, 0x21u, KEY_F4, WAS_RELEASED, 0, 0);
  KeyMap::Add(v18, 0x22u, KEY_F5, WAS_RELEASED, 0, 0);
  KeyMap::Add(v18, 0x23u, KEY_F6, WAS_RELEASED, 0, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00540550) --------------------------------------------------------
void __thiscall KeyRemappingWin::SetSyncFromOpt(KeyRemappingWin *this, bool bOverWrite)
{
  KeyRemappingWin *v2; // esi@1
  signed int v3; // eax@3
  char v4; // dl@4
  int v5; // ecx@4

  v2 = this;
  if ( bOverWrite == 1 )
    memset((char *)this->m_keyMapping, 0, 0x5FBEu);
  v3 = (signed int)&MachineOpt::m_keyMap;
  do
  {
    v2->m_keyMapping[*(_WORD *)v3].keyValue = *(_BYTE *)(v3 + 3);
    v2->m_keyMapping[*(_WORD *)v3].modifier = *(_BYTE *)(v3 + 2);
    v2->m_keyMapping[*(_WORD *)(v3 + 8)].keyValue = *(_BYTE *)(v3 + 11);
    v2->m_keyMapping[*(_WORD *)(v3 + 8)].modifier = *(_BYTE *)(v3 + 10);
    v2->m_keyMapping[*(_WORD *)(v3 + 16)].keyValue = *(_BYTE *)(v3 + 19);
    v2->m_keyMapping[*(_WORD *)(v3 + 16)].modifier = *(_BYTE *)(v3 + 18);
    v2->m_keyMapping[*(_WORD *)(v3 + 24)].keyValue = *(_BYTE *)(v3 + 27);
    v2->m_keyMapping[*(_WORD *)(v3 + 24)].modifier = *(_BYTE *)(v3 + 26);
    v2->m_keyMapping[*(_WORD *)(v3 + 32)].keyValue = *(_BYTE *)(v3 + 35);
    v4 = *(_BYTE *)(v3 + 34);
    v5 = *(_WORD *)(v3 + 32);
    v3 += 40;
    v2->m_keyMapping[v5].modifier = v4;
  }
  while ( v3 < (signed int)&unk_B5B468 );
  KeyRemappingWin::SetKeyName(v2);
  KeyRemappingWin::SetFromKeyMsgToGameMsg(v2);
}
// B5B170: using guessed type struct MachineOpt__stKeyMapData *MachineOpt__m_keyMap;

//----- (00540680) --------------------------------------------------------
void __thiscall KeyRemappingWin::SetSyncToOpt(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // esi@1
  signed int v2; // eax@1
  int v3; // ecx@2
  char v4; // dl@2
  int v5; // ecx@5
  char v6; // dl@5
  int v7; // ecx@8
  char v8; // dl@8
  int v9; // ecx@11
  char v10; // dl@11
  int v11; // ecx@14
  char v12; // dl@14

  v1 = this;
  v2 = (signed int)&MachineOpt::m_keyMap;
  do
  {
    v3 = *(_WORD *)v2;
    v4 = v1->m_keyMapping[v3].keyValue;
    if ( *(_BYTE *)(v2 + 3) != v4 || *(_BYTE *)(v2 + 2) != v1->m_keyMapping[v3].modifier )
    {
      *(_BYTE *)(v2 + 3) = v4;
      *(_BYTE *)(v2 + 2) = v1->m_keyMapping[v3].modifier;
    }
    v5 = *(_WORD *)(v2 + 8);
    v6 = v1->m_keyMapping[v5].keyValue;
    if ( *(_BYTE *)(v2 + 11) != v6 || *(_BYTE *)(v2 + 10) != v1->m_keyMapping[v5].modifier )
    {
      *(_BYTE *)(v2 + 11) = v6;
      *(_BYTE *)(v2 + 10) = v1->m_keyMapping[v5].modifier;
    }
    v7 = *(_WORD *)(v2 + 16);
    v8 = v1->m_keyMapping[v7].keyValue;
    if ( *(_BYTE *)(v2 + 19) != v8 || *(_BYTE *)(v2 + 18) != v1->m_keyMapping[v7].modifier )
    {
      *(_BYTE *)(v2 + 19) = v8;
      *(_BYTE *)(v2 + 18) = v1->m_keyMapping[v7].modifier;
    }
    v9 = *(_WORD *)(v2 + 24);
    v10 = v1->m_keyMapping[v9].keyValue;
    if ( *(_BYTE *)(v2 + 27) != v10 || *(_BYTE *)(v2 + 26) != v1->m_keyMapping[v9].modifier )
    {
      *(_BYTE *)(v2 + 27) = v10;
      *(_BYTE *)(v2 + 26) = v1->m_keyMapping[v9].modifier;
    }
    v11 = *(_WORD *)(v2 + 32);
    v12 = v1->m_keyMapping[v11].keyValue;
    if ( *(_BYTE *)(v2 + 35) != v12 || *(_BYTE *)(v2 + 34) != v1->m_keyMapping[v11].modifier )
    {
      *(_BYTE *)(v2 + 35) = v12;
      *(_BYTE *)(v2 + 34) = v1->m_keyMapping[v11].modifier;
    }
    v2 += 40;
  }
  while ( v2 < (signed int)&unk_B5B468 );
  KeyRemappingWin::SetKeyName(v1);
  KeyRemappingWin::SetFromKeyMsgToGameMsg(v1);
}
// B5B170: using guessed type struct MachineOpt__stKeyMapData *MachineOpt__m_keyMap;

//----- (005407A0) --------------------------------------------------------
KeyRemappingBut *__cdecl KeyRemappingBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex)
{
  void *v8; // eax@1
  void *v9; // esi@1
  PgWin *v10; // edi@8
  KeyRemappingBut *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v8 = operator new(0x148u);
  v9 = v8;
  result.m_pObject = (PgWin *)v8;
  v13 = 0;
  if ( v8 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v8);
    *(_DWORD *)v9 = &KeyRemappingBut::_vftable_;
    *((_DWORD *)v9 + 58) = &KeyRemappingBut::_vftable_;
    *((_DWORD *)v9 + 81) = -1;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)v9 + 1);
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int, char *, unsigned int, unsigned int))(*(_DWORD *)v9 + 560))(
                          v9,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg,
                          pcName,
                          uiExtStyle,
                          uiInvIndex) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = (KeyRemappingBut *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}
// 99D0E8: using guessed type int (__stdcall *KeyRemappingBut___vftable_)(int uiFlags);
// 99D104: using guessed type int (__thiscall *KeyRemappingBut___vftable_)(void *p, char);

//----- (00540910) --------------------------------------------------------
void __thiscall KeyRemappingWin::KeyRemappingWin(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyRemappingWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KeyRemappingWin::_vftable_;
  *(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkTabList.baseclass_0._Mylast = 0;
  v1->m_pkTabList.baseclass_0._Myend = 0;
  v1->m_uiCurPageType = 0;
  v1->m_uiCurPage = 0;
  *(_WORD *)&v1->m_bCheckingKey = 0;
  v1->m_uiSelectButIndex = 0;
  v1->m_pkPrePageBut = 0;
  v1->m_pkNextPageBut = 0;
  v1->m_bModeif = 0;
  v1->m_uiTargetKeyIndex = 0;
  v1->m_uiMainMenuTotalNum = 25;
  v1->m_uiGameTotalNum = 24;
  v1->m_uiShortCutTotalNum = 48;
}
// 99D33C: using guessed type int (__stdcall *KeyRemappingWin___vftable_)(int uiFlags);
// 99D35C: using guessed type int (__thiscall *KeyRemappingWin___vftable_)(void *p, char);

//----- (00540990) --------------------------------------------------------
void __thiscall KeyRemappingWin::_KeyRemappingWin(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyRemappingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KeyRemappingWin::_vftable_;
  if ( *(_DWORD *)&this->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkTabList.baseclass_0._Mylast = 0;
  v1->m_pkTabList.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 99D33C: using guessed type int (__stdcall *KeyRemappingWin___vftable_)(int uiFlags);
// 99D35C: using guessed type int (__thiscall *KeyRemappingWin___vftable_)(void *p, char);

//----- (005409E0) --------------------------------------------------------
KeyRemappingWin *__cdecl KeyRemappingWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  KeyRemappingWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x6374u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    KeyRemappingWin::KeyRemappingWin((KeyRemappingWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 544))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (KeyRemappingWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00540B10) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnCancel(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // esi@1

  v1 = this;
  KeyRemappingWin::SetSyncFromOpt(this, 0);
  KeyRemappingWin::ReflashContents(v1);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00540B30) --------------------------------------------------------
bool __thiscall KeyRemappingWin::LoadDefalultKeyRemapping(KeyRemappingWin *this, bool bDefault)
{
  KeyRemappingWin::SetSyncFromOpt(this, bDefault);
  return 1;
}

//----- (00540B60) --------------------------------------------------------
bool __thiscall KeyRemappingWin::Create(KeyRemappingWin *this, PgFrameWork *pkFrameWork)
{
  KeyRemappingWin *v2; // esi@1
  bool result; // al@6
  NiTexturePalette *v4; // ebx@7
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  int v8; // edi@16
  int v9; // ebx@16
  NiSourceTexture *v10; // eax@16
  PgSprData *v11; // eax@19
  PgSprData *v12; // eax@21
  PgWinSpr *v13; // eax@21
  PgSprData *v14; // eax@21
  PgFont *v15; // eax@23
  PgWinText *v16; // eax@23
  NiRefObjectVtbl *v17; // edx@23
  char *v18; // eax@23
  PgSprData *v19; // eax@23
  PgFont *v20; // eax@24
  PgWinText *v21; // eax@24
  NiRefObjectVtbl *v22; // edx@24
  char *v23; // eax@24
  PgFont *v24; // eax@25
  PgWinText *v25; // eax@25
  NiRefObjectVtbl *v26; // edx@25
  char *v27; // eax@25
  PgFont *v28; // eax@26
  PgWinText *v29; // eax@26
  NiRefObjectVtbl *v30; // edx@26
  char *v31; // eax@26
  PgSprData *v32; // eax@26
  int v33; // edi@26
  PgSprData *v34; // eax@28
  PgFont *v35; // eax@28
  PgWinText *v36; // eax@28
  char *v37; // eax@28
  char *v38; // eax@28
  PgFont *v39; // eax@29
  PgWinText *v40; // eax@29
  char *v41; // eax@29
  PgSprData *v42; // edi@30
  PgWinBut *v43; // eax@30
  NiSourceTexture *v44; // ST48_4@30
  NiNode *v45; // edx@30
  PgSprData *v46; // edi@30
  PgSprData *v47; // ST54_4@30
  int v48; // edi@30
  PgWin *v49; // edi@30
  D3DXCOLOR v50; // ST54_16@30
  char *v51; // eax@30
  PgWin *v52; // edi@30
  D3DXCOLOR v53; // ST54_16@30
  char *v54; // eax@30
  PgWin *v55; // edi@30
  D3DXCOLOR v56; // ST54_16@30
  char *v57; // eax@30
  int v58; // ecx@31
  unsigned int v59; // eax@31
  NiNode *v60; // esi@34
  const char *v61; // [sp+58h] [bp-98h]@17
  int *v62; // [sp+5Ch] [bp-94h]@17
  int *v63; // [sp+60h] [bp-90h]@17
  NiSourceTexture *v64; // [sp+64h] [bp-8Ch]@17
  unsigned int v65; // [sp+68h] [bp-88h]@1
  UIUtil ui; // [sp+78h] [bp-78h]@30
  unsigned int v67; // [sp+8Ch] [bp-64h]@27
  unsigned int v68; // [sp+90h] [bp-60h]@27
  unsigned int i; // [sp+94h] [bp-5Ch]@26
  int iOffY; // [sp+98h] [bp-58h]@16
  unsigned int uiHeight; // [sp+9Ch] [bp-54h]@21
  unsigned int uiWidth; // [sp+A0h] [bp-50h]@21
  NiSourceTexture *pkTexture; // [sp+A4h] [bp-4Ch]@1
  NiSourceTexture *pkTexture8; // [sp+A8h] [bp-48h]@19
  PgSprData *pkTextWin; // [sp+ACh] [bp-44h]@19
  int uiLeft; // [sp+B0h] [bp-40h]@10
  int uiTop; // [sp+B4h] [bp-3Ch]@10
  NiPointer<NiNode> spNode; // [sp+B8h] [bp-38h]@1
  char acShapeName[33]; // [sp+BCh] [bp-34h]@27
  unsigned int v80; // [sp+E0h] [bp-10h]@1
  int v81; // [sp+ECh] [bp-4h]@1
  int v82; // [sp+F0h] [bp+0h]@1

  v80 = (unsigned int)&v82 ^ __security_cookie;
  v65 = (unsigned int)&v82 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v81 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v81 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\KeyRemappingWin.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, pkFrameWork, "KeyRemappingWin", 0) )
  {
    v8 = uiTop;
    v9 = uiLeft;
    iOffY = uiTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v64 = v10;
      v63 = &uiTop;
      v62 = &uiLeft;
      v61 = "Theme";
    }
    else
    {
      v64 = 0;
      v63 = &uiTop;
      v62 = &uiLeft;
      v61 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v61, v62, v63, v64);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - v8, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0);
    pkTexture8 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "HelpLinkNor",
           v65) )
    {
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v9, uiTop - v8, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x14u, 0, 0);
    }
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v13 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v15 = Font::Get(MAIN_MENU);
      v16 = PgWinText::CreateWin(
              uiLeft - v9,
              uiTop - v8 + 2,
              uiWidth,
              uiHeight,
              v15,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v16;
      v17[122].__vecDelDtor((NiRefObject *)v16, 5u);
      ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
      pkTexture8 = (NiSourceTexture *)&pkTextWin->baseclass_0.vfptr[118];
      v18 = TextData::Get(0x244566A7u);
      ((void (__thiscall *)(PgSprData *, char *))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
        pkTextWin,
        v18);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Tab01_On", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab01_On");
        pkTexture8 = (NiSourceTexture *)ColumnBut::CreateWin(
                                          uiLeft - v9,
                                          uiTop - v8,
                                          pkTextWin,
                                          &v2->baseclass_0.baseclass_0.baseclass_0,
                                          0xBu,
                                          0);
        std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
          (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkTabList,
          (const unsigned int *)&pkTexture8);
        *(_BYTE *)(**(_DWORD **)&v2->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 380) = 1;
        v20 = Font::Get(0);
        v21 = PgWinText::CreateWin(
                uiLeft - v9,
                uiTop - v8 + 2,
                uiWidth,
                uiHeight,
                v20,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
        v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkTextWin = (PgSprData *)v21;
        v22[122].__vecDelDtor((NiRefObject *)v21, 5u);
        ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
        pkTexture8 = (NiSourceTexture *)&pkTextWin->baseclass_0.vfptr[118];
        v23 = TextData::Get(0xF1F7FCF9u);
        ((void (__thiscall *)(PgSprData *, char *))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
          pkTextWin,
          v23);
        ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
        if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Tab02_On", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
        {
          pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, pkTexture);
          PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab02_On");
          pkTexture8 = (NiSourceTexture *)ColumnBut::CreateWin(
                                            uiLeft - v9,
                                            uiTop - v8,
                                            pkTextWin,
                                            &v2->baseclass_0.baseclass_0.baseclass_0,
                                            0xCu,
                                            0);
          std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
            (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkTabList,
            (const unsigned int *)&pkTexture8);
          *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v2->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4) + 380) = 0;
          v24 = Font::Get(0);
          v25 = PgWinText::CreateWin(
                  uiLeft - v9,
                  uiTop - v8 + 2,
                  uiWidth,
                  uiHeight,
                  v24,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
          v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          pkTextWin = (PgSprData *)v25;
          v26[122].__vecDelDtor((NiRefObject *)v25, 5u);
          ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
          pkTexture8 = (NiSourceTexture *)&pkTextWin->baseclass_0.vfptr[118];
          v27 = TextData::Get(0x97AF01E7u);
          ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
            pkTextWin,
            v27);
          ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
          if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Tab03_On", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
          {
            pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_Off", &uiLeft, &uiTop, pkTexture);
            PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab03_On");
            pkTexture8 = (NiSourceTexture *)ColumnBut::CreateWin(
                                              uiLeft - v9,
                                              uiTop - v8,
                                              pkTextWin,
                                              &v2->baseclass_0.baseclass_0.baseclass_0,
                                              0xDu,
                                              0);
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkTabList,
              (const unsigned int *)&pkTexture8);
            *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v2->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 8) + 380) = 0;
            v28 = Font::Get(0);
            v29 = PgWinText::CreateWin(
                    uiLeft - v9,
                    uiTop - v8 + 2,
                    uiWidth,
                    uiHeight,
                    v28,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkTextWin = (PgSprData *)v29;
            v30[122].__vecDelDtor((NiRefObject *)v29, 5u);
            ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
            pkTexture8 = (NiSourceTexture *)&pkTextWin->baseclass_0.vfptr[118];
            v31 = TextData::Get(0x534A3742u);
            ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
              pkTextWin,
              v31);
            ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
            v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &uiLeft, &uiTop, pkTexture);
            PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
            i = 0;
            v33 = (int)v2->m_apkInvTextWin;
            while ( 1 )
            {
              pkTexture8 = (NiSourceTexture *)(i + 1);
              sprintf(acShapeName, "SlotBox%02d");
              if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, &v68, &v67) )
                break;
              v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
              PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
              v35 = Font::Get(0);
              v36 = PgWinText::CreateWin(
                      uiLeft - v9,
                      uiTop - iOffY + 2,
                      v68,
                      v67,
                      v35,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
              *(_DWORD *)v33 = v36;
              v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
                (NiRefObject *)v36,
                5u);
              pkTextWin = (PgSprData *)(**(_DWORD **)v33 + 472);
              v37 = TextData::Get(0xECE5F444u);
              v38 = fs(v37);
              ((void (__thiscall *)(_DWORD, char *))pkTextWin->baseclass_0.vfptr)(*(_DWORD *)v33, v38);
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v33 + 240))(0);
              sprintf(acShapeName, "SlotMap%02d");
              if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, &v68, &v67) )
                break;
              pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
              sprintf(acShapeName, "SlotMap%02dOver");
              PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, acShapeName);
              PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, acShapeName);
              *(_DWORD *)(v33 + 192) = KeyRemappingBut::CreateWin(
                                         uiLeft - v9,
                                         uiTop - iOffY,
                                         pkTextWin,
                                         &v2->baseclass_0.baseclass_0.baseclass_0,
                                         0x10u,
                                         0,
                                         0,
                                         i);
              v39 = Font::Get(0);
              v40 = PgWinText::CreateWin(
                      uiLeft - v9,
                      uiTop - iOffY + 2,
                      v68,
                      v67,
                      v39,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
              *(_DWORD *)(v33 + 96) = v40;
              v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
                (NiRefObject *)v40,
                5u);
              pkTextWin = (PgSprData *)(**(_DWORD **)(v33 + 96) + 472);
              v41 = fs("%d");
              ((void (__thiscall *)(_DWORD, char *))pkTextWin->baseclass_0.vfptr)(*(_DWORD *)(v33 + 96), v41);
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v33 + 96) + 240))(0);
              v33 += 4;
              i = (unsigned int)pkTexture8;
              if ( (unsigned int)pkTexture8 >= 0x18 )
              {
                v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, pkTexture);
                PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "PrePageClick");
                PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "PrePageOver");
                v43 = PgWinBut::CreateWin(
                        uiLeft - v9,
                        uiTop - iOffY,
                        v42,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0xEu,
                        0,
                        0);
                v44 = pkTexture;
                v45 = spNode.m_pObject;
                v2->m_pkPrePageBut = v43;
                v46 = PgSprData::Create(&v45->baseclass_0, "NextPageNor", &uiLeft, &uiTop, v44);
                PgSprData::Add(v46, &spNode.m_pObject->baseclass_0, "NextPageClick");
                PgSprData::Add(v46, &spNode.m_pObject->baseclass_0, "NextPageOver");
                v47 = v46;
                v48 = iOffY;
                v2->m_pkNextPageBut = PgWinBut::CreateWin(
                                        uiLeft - v9,
                                        uiTop - iOffY,
                                        v47,
                                        &v2->baseclass_0.baseclass_0.baseclass_0,
                                        0xFu,
                                        0,
                                        0);
                UIUtil::UIUtil(&ui);
                LOBYTE(v81) = 1;
                UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
                UIUtil::SetOffset(&ui, v9, v48);
                UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
                v49 = (PgWin *)UIUtil::CreateBtn(&ui, 0x11u, "ApplyNor", "ApplyOver", "ApplyClick", 0, 0);
                *(_QWORD *)&v50.r = *(_QWORD *)&Color::m_kDxWhiteColor;
                *(_QWORD *)&v50.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
                v51 = TextData::Get(0x9BF9F4F6u);
                UIUtil::CreateAttachedText(&ui, v49, v51, COERCE_D3DXCOLOR(v50.r), 5u);
                v52 = (PgWin *)UIUtil::CreateBtn(&ui, 0x12u, "DefaultNor", "DefaultOver", "DefaultClick", 0, 0);
                *(_QWORD *)&v53.r = *(_QWORD *)&Color::m_kDxWhiteColor;
                *(_QWORD *)&v53.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
                v54 = TextData::Get(0x9005EDF9u);
                UIUtil::CreateAttachedText(&ui, v52, v54, COERCE_D3DXCOLOR(v53.r), 5u);
                v55 = (PgWin *)UIUtil::CreateBtn(&ui, 0x13u, "CancelNor", "CancelOver", "CancelClick", 0, 0);
                *(_QWORD *)&v56.r = *(_QWORD *)&Color::m_kDxWhiteColor;
                *(_QWORD *)&v56.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
                v57 = TextData::Get(0x97E7FBF5u);
                UIUtil::CreateAttachedText(&ui, v55, v57, COERCE_D3DXCOLOR(v56.r), 5u);
                ((void (__thiscall *)(KeyRemappingWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
                  v2,
                  PgWin::ms_uiScreenWidth,
                  PgWin::ms_uiScreenHeight,
                  0.5,
                  0.5);
                if ( !CharSelectFrameWork::ms_bLoadKeyMappingOptionSuccess )
                {
                  KeyRemappingWin::SetSyncFromOpt(v2, 1);
                  v58 = (int)&v2->m_keyMapping[0].keyValue;
                  v59 = 0;
                  do
                  {
                    byte_A8270A[v59] = *(_BYTE *)(v58 - 1);
                    byte_A8270B[v59] = *(_BYTE *)v58;
                    v59 += 2;
                    v58 += 258;
                  }
                  while ( v59 < 0xBE );
                  KeyRemappingWin::ReflashContents(v2);
                }
                LOBYTE(v81) = 0;
                UIUtil::_UIUtil(&ui);
                v60 = spNode.m_pObject;
                v81 = -1;
                if ( spNode.m_pObject
                  && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
                  && v60 )
                  v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v60, 1u);
                return 1;
              }
            }
          }
        }
      }
    }
    v81 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  else
  {
    v7 = spNode.m_pObject;
    v81 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9438F: using guessed type bool CharSelectFrameWork__ms_bLoadKeyMappingOptionSuccess;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005417B0) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnClose(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // esi@1
  signed int v2; // eax@3
  int v3; // ecx@3

  v1 = this;
  if ( this->m_bCheckRemaping )
  {
    ((void (__stdcall *)(_DWORD))this->m_apkKeyMappingBtn[this->m_uiSelectButIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v1->m_bCheckRemaping = 0;
  }
  KeyRemappingWin::SetSyncFromOpt(v1, 0);
  v2 = (signed int)byte_A8270B;
  v3 = (int)&v1->m_keyMapping[0].keyValue;
  do
  {
    *(_BYTE *)(v2 - 1) = *(_BYTE *)(v3 - 1);
    *(_BYTE *)v2 = *(_BYTE *)v3;
    v2 += 2;
    v3 += 258;
  }
  while ( v2 < (signed int)&unk_A827C9 );
  KeyRemappingWin::ReflashContents(v1);
  PgWin::OnClose(&v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00541840) --------------------------------------------------------
void __thiscall KeyRemappingWin::SaveKeyMapping(KeyRemappingWin *this)
{
  KeyRemappingWin *v1; // ebx@1
  unsigned int v2; // esi@1
  void *v3; // eax@1
  signed int v4; // edi@2
  int v5; // eax@3
  int v6; // esi@5
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v7; // eax@5
  void *v8; // eax@8
  void *v9; // esi@9
  void *v10; // eax@11
  void *v11; // ecx@11
  void *v12; // esi@12
  std::exception thisa; // [sp+0h] [bp-2Ch]@15
  std::list<int,std::allocator<int> > lstChange; // [sp+Ch] [bp-20h]@1
  char *_What; // [sp+18h] [bp-14h]@15
  int i; // [sp+1Ch] [bp-10h]@2
  int v17; // [sp+28h] [bp-4h]@2

  v1 = this;
  v2 = 0;
  lstChange.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0xCu);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&lstChange.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&lstChange + 4) = *(_DWORD *)&lstChange;
  v4 = 0;
  v17 = 0;
  i = 0;
  do
  {
    v5 = *((_WORD *)&MachineOpt::m_keyMap + 4 * v4);
    if ( HIBYTE(word_B5B172[4 * v4]) != v1->m_keyMapping[v5].keyValue
      || LOBYTE(word_B5B172[4 * v4]) != v1->m_keyMapping[v5].modifier )
    {
      v6 = *(_DWORD *)&lstChange + 4;
      v7 = std::_List_val<char___std::allocator<char__>>::_Buynode(
             (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)&lstChange,
             *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)&lstChange,
             *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)&lstChange + 4),
             (ItemViewDummy *const *)&i);
      if ( 1073741822 - lstChange.baseclass_0.baseclass_0._Mysize < 1 )
        std::_Xlength_error("list<T> too long");
      ++lstChange.baseclass_0.baseclass_0._Mysize;
      *(_DWORD *)v6 = v7;
      v7->_Prev->_Next = v7;
      v2 = 0;
    }
    ++v4;
    i = v4;
  }
  while ( v4 < 95 );
  GameFrameWork::SendKeyRemappingReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, &lstChange);
  KeyRemappingWin::SetSyncToOpt(v1);
  v8 = (void *)**(_DWORD **)&lstChange;
  **(_DWORD **)&lstChange = *(_DWORD *)&lstChange;
  *(_DWORD *)(*(_DWORD *)&lstChange + 4) = *(_DWORD *)&lstChange;
  lstChange.baseclass_0.baseclass_0._Mysize = v2;
  if ( v8 != *(void **)&lstChange )
  {
    do
    {
      v9 = *(void **)v8;
      operator delete(v8);
      v8 = v9;
    }
    while ( v9 != *(void **)&lstChange );
    v2 = 0;
  }
  PgFrameWork::AddMsg(v1->baseclass_0.m_pkFrameWork, 0x10Bu, v2, v2);
  v10 = (void *)**(_DWORD **)&lstChange;
  **(_DWORD **)&lstChange = *(_DWORD *)&lstChange;
  *(_DWORD *)(*(_DWORD *)&lstChange + 4) = *(_DWORD *)&lstChange;
  v11 = *(void **)&lstChange;
  lstChange.baseclass_0.baseclass_0._Mysize = v2;
  if ( v10 != *(void **)&lstChange )
  {
    do
    {
      v12 = *(void **)v10;
      operator delete(v10);
      v11 = *(void **)&lstChange;
      v10 = v12;
    }
    while ( v12 != *(void **)&lstChange );
  }
  operator delete(v11);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// B5B170: using guessed type struct MachineOpt__stKeyMapData *MachineOpt__m_keyMap;
// B5B172: using guessed type __int16 word_B5B172[];

//----- (005419F0) --------------------------------------------------------
void __thiscall KeyRemappingWin::OnCommand(KeyRemappingWin *this, unsigned int wParam, int lParam)
{
  unsigned int v3; // eax@5

  switch ( wParam )
  {
    case 0xBu:
      KeyRemappingWin::OnMainMenu(this);
      break;
    case 0xCu:
      KeyRemappingWin::OnGame(this);
      break;
    case 0xDu:
      KeyRemappingWin::OnShortCut(this);
      break;
    case 0xEu:
      v3 = this->m_uiCurPage;
      if ( v3 )
      {
        this->m_uiCurPage = v3 - 1;
        KeyRemappingWin::ReflashContents(this);
      }
      break;
    case 0xFu:
      KeyRemappingWin::OnNextPage(this);
      break;
    case 0x11u:
      KeyRemappingWin::SaveKeyMapping(this);
      break;
    case 0x12u:
      GameFrameWork::SendDefaultKeyRemappingReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0x10u:
      KeyRemappingWin::OnKeyRemapping(this, lParam);
      break;
    case 0x13u:
      KeyRemappingWin::OnCancel(this);
      break;
    case 0x14u:
      KeyRemappingWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (00541AB0) --------------------------------------------------------
void *__thiscall KeyRemappingBut::_scalar_deleting_destructor_(KeyRemappingBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyRemappingBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KeyRemappingBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99D0E8: using guessed type int (__stdcall *KeyRemappingBut___vftable_)(int uiFlags);
// 99D104: using guessed type int (__thiscall *KeyRemappingBut___vftable_)(void *p, char);

//----- (00541AF0) --------------------------------------------------------
void __thiscall KeyMap::Remove(KeyMap *this, unsigned int uiMsg)
{
  NiTListItem<KeyMap::KeyNode *> *v2; // eax@1
  void *v3; // esi@2
  NiTListItem<KeyMap::KeyNode *> *v4; // eax@5
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v5; // ecx@5
  int v6; // edx@6
  unsigned int v7; // edi@6

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      if ( *(_DWORD *)v3 == uiMsg )
        break;
      v2 = v2->m_pkNext;
      if ( !v2 )
        return;
    }
    v4 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v5 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kList;
    if ( v4 )
    {
      while ( 1 )
      {
        v6 = (int)&v4->m_element;
        v7 = (unsigned int)v4;
        v4 = v4->m_pkNext;
        if ( v3 == *(void **)v6 )
          break;
        if ( !v4 )
          goto LABEL_8;
      }
    }
    else
    {
LABEL_8:
      v7 = 0;
    }
    uiMsg = v7;
    if ( v7 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v5, (void **)&uiMsg);
    operator delete(v3);
  }
}

//----- (00541B50) --------------------------------------------------------
void __thiscall std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>(std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *this)
{
  void **v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2

  v1 = (void **)this;
  v2 = *(void ***)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *((_DWORD *)*v1 + 1) = *v1;
  v1[1] = 0;
  if ( v3 != *v1 )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *v1 );
  }
  operator delete(*v1);
}

//----- (00541B90) --------------------------------------------------------
std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *__thiscall std::_List_val<char___std::allocator<char__>>::_Buynode(std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *this, std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *_Next, std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *_Prev, ItemViewDummy *const *_Val)
{
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *result; // eax@1
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v5; // edx@2
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *)operator new(0xCu);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *)-8 )
    result->_Myval = *_Val;
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00541BF0) --------------------------------------------------------
void *__thiscall KeyRemappingWin::_vector_deleting_destructor_(KeyRemappingWin *this, unsigned int a2)
{
  KeyRemappingWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KeyRemappingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KeyRemappingWin::_vftable_;
  if ( *(_DWORD *)&this->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v2->m_pkTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_pkTabList.baseclass_0._Mylast = 0;
  v2->m_pkTabList.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99D33C: using guessed type int (__stdcall *KeyRemappingWin___vftable_)(int uiFlags);
// 99D35C: using guessed type int (__thiscall *KeyRemappingWin___vftable_)(void *p, char);

//----- (00541C60) --------------------------------------------------------
void __thiscall KQScoreWin::_KQScoreWin(KQScoreWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KQScoreWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KQScoreWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_spScoreText,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 99D608: using guessed type int (__stdcall *KQScoreWin___vftable_)(int uiFlags);
// 99D624: using guessed type int (__thiscall *KQScoreWin___vftable_)(void *p, char);

//----- (00541CE0) --------------------------------------------------------
bool __thiscall KQScoreWin::Create(KQScoreWin *this, PgFrameWork *pkFrameWork)
{
  KQScoreWin *v2; // edi@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgWinSpr *v9; // eax@10
  PgWinSpr *v10; // eax@10
  D3DXCOLOR v11; // ST3C_16@10
  PgWinText *v12; // esi@10
  NiRefObjectVtbl *v13; // ebx@10
  PgFont *v14; // eax@10
  D3DXCOLOR v15; // ST3C_16@10
  PgWinText *v16; // esi@10
  NiRefObjectVtbl *v17; // ebx@10
  PgFont *v18; // eax@10
  PgWinSpr *v19; // eax@10
  PgWinSpr *v20; // eax@10
  D3DXCOLOR v21; // ST3C_16@10
  PgWinText *v22; // eax@10
  PgWinText *v23; // esi@10
  PgWinText *v24; // ebx@10
  PgWinText *v25; // ebx@17
  NiRefObjectVtbl *v26; // esi@17
  PgFont *v27; // eax@17
  D3DXCOLOR v28; // ST3C_16@17
  PgWinText *v29; // eax@17
  PgWinText *v30; // esi@17
  PgWinText *v31; // ebx@17
  PgWinText *v32; // ebx@24
  NiRefObjectVtbl *v33; // esi@24
  PgFont *v34; // eax@24
  NiNode *v35; // esi@25
  UIUtil ui; // [sp+60h] [bp-2Ch]@10
  int iLeft; // [sp+74h] [bp-18h]@1
  int iTop; // [sp+78h] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+7Ch] [bp-10h]@1
  int v40; // [sp+88h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v40 = 0;
  iLeft = 0;
  iTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\KQScoreWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "KQScoreWin", 0) )
  {
    v6 = spNode.m_pObject;
    v40 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v40) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  v9 = UIUtil::CreateSpr(&ui, "Theme", v8);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v10 = UIUtil::CreateSpr(&ui, "Panel02", 0);
  v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v10,
    0);
  *(_QWORD *)&v11.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v11.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v12 = UIUtil::CreateTextNoSpr(&ui, "Text01", "Team", COERCE_D3DXCOLOR(v11.r), 5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = Font::Get(BOLD);
  v13[113].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v12,
    (unsigned int)&Color::m_kDxYellowColor);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v16 = UIUtil::CreateTextNoSpr(&ui, "Text02", "Score", COERCE_D3DXCOLOR(v15.r), 5u);
  v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = Font::Get(BOLD);
  v17[113].__vecDelDtor((NiRefObject *)v16, (unsigned int)v18);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v16,
    (unsigned int)&Color::m_kDxYellowColor);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  v19 = UIUtil::CreateSpr(&ui, "GuildName01", 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v20 = UIUtil::CreateSpr(&ui, "GuildName02", 0);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v22 = UIUtil::CreateTextNoSpr(&ui, "Score01", &byte_99D5A7, COERCE_D3DXCOLOR(v21.r), 5u);
  v23 = v2->m_spScoreText[0].m_pObject;
  v24 = v22;
  if ( v23 != v22 )
  {
    if ( v23
      && !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v23 )
      v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v23,
        1u);
    v2->m_spScoreText[0].m_pObject = v24;
    if ( v24 )
      InterlockedIncrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v25 = v2->m_spScoreText[0].m_pObject;
  v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = Font::Get(BOLD);
  v26[113].__vecDelDtor((NiRefObject *)v25, (unsigned int)v27);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_spScoreText[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
  ((void (__stdcall *)(_DWORD))v2->m_spScoreText[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  *(_QWORD *)&v28.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v28.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v29 = UIUtil::CreateTextNoSpr(&ui, "Score02", byte_99D5AE, COERCE_D3DXCOLOR(v28.r), 5u);
  v30 = v2->m_spScoreText[1].m_pObject;
  v31 = v29;
  if ( v30 != v29 )
  {
    if ( v30
      && !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v30 )
      v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v30,
        1u);
    v2->m_spScoreText[1].m_pObject = v31;
    if ( v31 )
      InterlockedIncrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v32 = v2->m_spScoreText[1].m_pObject;
  v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = Font::Get(BOLD);
  v33[113].__vecDelDtor((NiRefObject *)v32, (unsigned int)v34);
  ((void (__stdcall *)(int *))v2->m_spScoreText[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxBlueColor);
  ((void (__stdcall *)(_DWORD))v2->m_spScoreText[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(KQScoreWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.5);
  LOBYTE(v40) = 0;
  UIUtil::_UIUtil(&ui);
  v40 = -1;
  if ( spNode.m_pObject )
  {
    v35 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v35 )
        v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
    }
  }
  return 1;
}
// A745F0: using guessed type int Color__m_kDxBlueColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00542150) --------------------------------------------------------
void __thiscall KQScoreWin::SetScore(KQScoreWin *this, unsigned int uiTeam, unsigned int uiScore)
{
  PgWinText *v3; // esi@2
  NiRefObjectVtbl *v4; // edi@5
  char *v5; // eax@5

  if ( uiTeam < 2 )
  {
    v3 = this->m_spScoreText[uiTeam].m_pObject;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( v3 )
    {
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = fs("%d");
      v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v5);
    }
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v3,
          1u);
    }
  }
}

//----- (00542200) --------------------------------------------------------
void __thiscall KQScoreWin::ResetScore(KQScoreWin *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_spScoreText;
  v2 = 2;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (00542250) --------------------------------------------------------
void __thiscall KQScoreWin::KQScoreWin(KQScoreWin *this)
{
  KQScoreWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KQScoreWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KQScoreWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_spScoreText,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  KQScoreWin::ResetScore(v1);
}
// 99D608: using guessed type int (__stdcall *KQScoreWin___vftable_)(int uiFlags);
// 99D624: using guessed type int (__thiscall *KQScoreWin___vftable_)(void *p, char);

//----- (005422E0) --------------------------------------------------------
KQScoreWin *__cdecl KQScoreWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  KQScoreWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &KQScoreWin::_vftable_;
    *((_DWORD *)v2 + 58) = &KQScoreWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 344,
      4u,
      2,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    LOBYTE(v6) = 2;
    KQScoreWin::ResetScore((KQScoreWin *)v2);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 3;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (KQScoreWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99D608: using guessed type int (__stdcall *KQScoreWin___vftable_)(int uiFlags);
// 99D624: using guessed type int (__thiscall *KQScoreWin___vftable_)(void *p, char);

//----- (00542450) --------------------------------------------------------
void *__thiscall KQScoreWin::_vector_deleting_destructor_(KQScoreWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KQScoreWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KQScoreWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_spScoreText,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99D608: using guessed type int (__stdcall *KQScoreWin___vftable_)(int uiFlags);
// 99D624: using guessed type int (__thiscall *KQScoreWin___vftable_)(void *p, char);

//----- (005424E0) --------------------------------------------------------
void __thiscall MainCharHPBarWin::MainCharHPBarWin(MainCharHPBarWin *this)
{
  MainCharHPBarWin *v1; // esi@1

  v1 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->m_pkHPBarWin = 0;
  v1->m_bDrawTargetCharOption = 0;
  v1->m_pkLPBarBackWin = 0;
  v1->m_pkLPBarWin = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MainCharHPBarWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MainCharHPBarWin::_vftable_;
  *(_WORD *)&v1->m_bIsMainCharHPBarWin = 1;
}
// 99D898: using guessed type int (__stdcall *MainCharHPBarWin___vftable_)(int uiFlags);
// 99D8B4: using guessed type int (__thiscall *MainCharHPBarWin___vftable_)(void *p, char);

//----- (00542520) --------------------------------------------------------
void __thiscall MainCharHPBarWin::_MainCharHPBarWin(MainCharHPBarWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MainCharHPBarWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MainCharHPBarWin::_vftable_;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
}
// 99D898: using guessed type int (__stdcall *MainCharHPBarWin___vftable_)(int uiFlags);
// 99D8B4: using guessed type int (__thiscall *MainCharHPBarWin___vftable_)(void *p, char);

//----- (00542540) --------------------------------------------------------
void __thiscall MainCharHPBarWin::SetMoveStop(MainCharHPBarWin *this, bool b)
{
  this->m_bMoveStop = b;
}

//----- (00542550) --------------------------------------------------------
bool __thiscall MainCharHPBarWin::Create(MainCharHPBarWin *this)
{
  MainCharHPBarWin *v1; // esi@1
  NiNode *v2; // esi@2
  NiTexturePalette *v4; // edi@11
  char *v5; // eax@13
  PgSprData *v6; // eax@14
  PgWinSpr *v7; // eax@14
  PgSprData *v8; // eax@14
  PgWinBar *v9; // eax@14
  PgSprData *v10; // ST1C_4@14
  int v11; // eax@14
  PgWinSpr *v12; // eax@14
  PgSprData *v13; // ST20_4@14
  int v14; // eax@14
  PgWinBar *v15; // eax@14
  PgSprData *v16; // ST1C_4@14
  int v17; // eax@14
  PgWinSpr *v18; // eax@14
  PgSprData *v19; // ST20_4@14
  int v20; // eax@14
  PgWinBar *v21; // eax@14
  NiRefObjectVtbl *v22; // edi@14
  int v23; // eax@14
  NiRefObjectVtbl *v24; // edi@14
  int v25; // eax@14
  NiNode *v26; // esi@15
  volatile LONG *v27; // [sp+18h] [bp-28h]@3
  int uiLeft; // [sp+28h] [bp-18h]@14
  int uiTop; // [sp+2Ch] [bp-14h]@14
  NiPointer<NiNode> spNode; // [sp+30h] [bp-10h]@1
  int v31; // [sp+3Ch] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v31 = 0;
  if ( !PgWin::Create(&this->baseclass_0.baseclass_0, 0, 0, 1u, 1u, 0, 0, 0) )
  {
    v2 = spNode.m_pObject;
    v31 = -1;
    if ( spNode.m_pObject )
    {
      v27 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_4;
    }
    return 0;
  }
  if ( !MenuTexMgr::GetTexture(4u) )
  {
    v2 = spNode.m_pObject;
    v31 = -1;
    if ( spNode.m_pObject )
    {
      v27 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_4:
      if ( !InterlockedDecrement(v27) )
      {
        if ( v2 )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\PtyWin.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HPground01", &uiLeft, &uiTop, 0);
  v7 = PgWinSpr::CreateWin(0, 0, v6, &v1->baseclass_0.baseclass_0, 0, 0);
  v1->m_pkHPBarBackWin = v7;
  v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v7,
    COERCE_UNSIGNED_INT(0.5));
  ((void (__stdcall *)(_DWORD))v1->m_pkHPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, &uiTop, 0);
  v9 = PgWinBar::CreateWin(0, 0, v8, &v1->baseclass_0.baseclass_0, BGT_RIGHT);
  v1->m_pkHPBarWin = v9;
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SPground01", &uiLeft, &uiTop, 0);
  v11 = ((int (*)(void))v1->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v12 = PgWinSpr::CreateWin(0, v11, v10, &v1->baseclass_0.baseclass_0, 0, 0);
  v1->m_pkSPBarBackWin = v12;
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v12,
    COERCE_UNSIGNED_INT(0.5));
  ((void (__stdcall *)(_DWORD))v1->m_pkSPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP", &uiLeft, &uiTop, 0);
  v14 = ((int (*)(void))v1->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v15 = PgWinBar::CreateWin(0, v14, v13, &v1->baseclass_0.baseclass_0, BGT_RIGHT);
  v1->m_pkSPBarWin = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LPground01", &uiLeft, &uiTop, 0);
  v17 = ((int (*)(void))v1->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v18 = PgWinSpr::CreateWin(0, v17, v16, &v1->baseclass_0.baseclass_0, 0, 0);
  v1->m_pkLPBarBackWin = v18;
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v18,
    COERCE_UNSIGNED_INT(0.5));
  ((void (__stdcall *)(_DWORD))v1->m_pkLPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP", &uiLeft, &uiTop, 0);
  v20 = ((int (*)(void))v1->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v21 = PgWinBar::CreateWin(0, v20, v19, &v1->baseclass_0.baseclass_0, BGT_RIGHT);
  v1->m_pkLPBarWin = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  v22 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = ((int (*)(void))v1->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v22[38].__vecDelDtor((NiRefObject *)v1, v23);
  v24 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = ((int (*)(void))v1->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v24[39].__vecDelDtor((NiRefObject *)v1, v25);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v1,
    0);
  v31 = -1;
  if ( spNode.m_pObject )
  {
    v26 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v26 )
        v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005428C0) --------------------------------------------------------
void __thiscall MainCharHPBarWin::UpdatePosition(MainCharHPBarWin *this)
{
  MainCharHPBarWin *v1; // esi@1
  Char *v2; // ecx@2
  NiPoint3 *v3; // eax@6
  float v4; // ecx@6
  float v5; // edx@6
  _BYTE v6[12]; // ST0C_12@6
  float v7; // ST08_4@6
  float v8; // ST04_4@6
  Char *v9; // edi@10
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // eax@14
  MainCharHPBarWin *v11; // ecx@14
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@20
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@20
  bool v14; // zf@20
  NiPoint3 *v15; // [sp+14h] [bp-28h]@2
  signed int v16; // [sp+14h] [bp-28h]@9
  NiPoint3 k2DOrthoPos; // [sp+20h] [bp-1Ch]@6
  NiPoint3 kWorldPos; // [sp+2Ch] [bp-10h]@2
  unsigned int v19; // [sp+38h] [bp-4h]@20

  v1 = this;
  if ( this->m_bIsMainCharHPBarWin )
  {
    v2 = g_pkMainChar;
    v15 = &kWorldPos;
    goto LABEL_6;
  }
  v2 = (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  if ( v2 && v2 != g_pkMainChar )
  {
    v15 = &kWorldPos;
LABEL_6:
    v3 = Char::GetHeightPos(v2, v15);
    v4 = v3->x;
    v5 = v3->y;
    kWorldPos.z = v3->z;
    kWorldPos.z = kWorldPos.z + 3.0;
    *(_QWORD *)v6 = __PAIR__(LODWORD(v5), LODWORD(v4));
    *(_DWORD *)&v6[8] = LODWORD(kWorldPos.z);
    v7 = (double)PgWin::ms_uiScreenHeight;
    v8 = (double)PgWin::ms_uiScreenWidth;
    if ( !PgUtil::Get2DOrthoPosFrom3DPos(pkCamera, v8, v7, *(NiPoint3 *)v6, &k2DOrthoPos) )
    {
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v1,
        0);
      return;
    }
    if ( v1->m_bIsMainCharHPBarWin )
    {
      v16 = 1;
    }
    else
    {
      v9 = (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
      if ( !v9 )
        goto LABEL_20;
      if ( ((int (__thiscall *)(unsigned int))v9->baseclass_0.vfptr[2].__vecDelDtor)(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0]) > 0
        && (unsigned __int8)((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[1].Affect)(v9)
        && !Char::IsNPC(v9) )
      {
        v10 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
        v11 = v1;
        if ( v1->m_bDrawTargetCharOption )
          v16 = 1;
        else
          v16 = 0;
        goto LABEL_19;
      }
      v16 = 0;
    }
    v10 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v11 = v1;
LABEL_19:
    v10(&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v16);
LABEL_20:
    v12 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
    *(double *)&kWorldPos.y = k2DOrthoPos.x;
    v19 = (unsigned int)((int (__thiscall *)(MainCharHPBarWin *))v12)(v1) >> 1;
    v13 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    k2DOrthoPos.x = *(double *)&kWorldPos.y - (double)v19;
    *(double *)&kWorldPos.y = k2DOrthoPos.y;
    v19 = ((int (__thiscall *)(MainCharHPBarWin *))v13)(v1);
    v14 = v1->m_bMoveStop == 0;
    k2DOrthoPos.y = *(double *)&kWorldPos.y - (double)v19;
    if ( v14 )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor(
        (NiRefObject *)v1,
        (signed int)(k2DOrthoPos.x + 0.5));
  }
}

//----- (00542A80) --------------------------------------------------------
void __thiscall MainCharHPBarWin::UpdateMeWin(MainCharHPBarWin *this, float fCurTime)
{
  MainCharHPBarWin *v2; // esi@1
  Mover *v3; // edi@2
  float v4; // ST08_4@20
  float v5; // ST04_4@20
  double v6; // st7@20
  float v7; // ST08_4@21
  float v8; // ST04_4@21
  float v9; // ST08_4@21
  float v10; // ST04_4@21
  PgWinBar *v11; // ecx@21
  Char *v12; // edi@22
  float v13; // ST04_4@27
  float v14; // ST00_4@27
  float v15; // ST04_4@27
  float v16; // ST04_4@29
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // eax@29
  float v18; // [sp+8h] [bp-10h]@20
  int v19; // [sp+Ch] [bp-Ch]@0

  v2 = this;
  if ( this->m_bIsMainCharHPBarWin )
  {
    v3 = g_pkMainChar->m_pkMover;
    if ( v3 && !Mover::IsSlotView(v3, g_pkMainChar->m_uiMoverSlot, 0) )
    {
      if ( v2->m_pkHPBarWin )
        ((void (__stdcall *)(_DWORD))v2->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      if ( v2->m_pkHPBarBackWin )
        ((void (__stdcall *)(_DWORD))v2->m_pkHPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      if ( v2->m_pkSPBarWin )
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      if ( v2->m_pkSPBarBackWin )
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      if ( v2->m_pkLPBarWin )
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      if ( v2->m_pkLPBarBackWin )
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      return;
    }
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      1u);
    if ( !v3 || !Mover::IsAbility(v3) || g_pkMainChar->m_uiMoverSlot )
    {
      v7 = (double)User::HP(&g_kUser);
      v8 = (double)User::MaxHP(&g_kUser);
      PgWinBar::SetValue(v2->m_pkHPBarWin, v8, v7);
      v9 = (double)User::SP(&g_kUser);
      v10 = (double)User::MaxSP(&g_kUser);
      PgWinBar::SetValue(v2->m_pkSPBarWin, v10, v9);
      v18 = (double)User::LP(&g_kUser);
      v6 = (double)User::MaxLP(&g_kUser);
      v11 = v2->m_pkLPBarWin;
      goto LABEL_29;
    }
    v4 = (double)((int (__thiscall *)(Mover *))v3->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)(v3);
    v5 = (double)((int (__thiscall *)(Mover *))v3->baseclass_0.baseclass_0.vfptr[3].Deaffect)(v3);
    PgWinBar::SetValue(v2->m_pkHPBarWin, v5, v4);
    v18 = (double)((int (__thiscall *)(Mover *))v3->baseclass_0.baseclass_0.vfptr[3].SetAbStateProperty)(v3);
    v6 = (double)v3->baseclass_0.baseclass_0.vfptr[3].IsVisible((AbStateInfectee *)v3);
  }
  else
  {
    v12 = (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
    if ( !v12 || v12 == g_pkMainChar )
    {
      ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      return;
    }
    if ( this->m_bDrawTargetCharOption )
      LODWORD(v18) = 1;
    else
      v18 = 0.0;
    ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
    v13 = (double)((int (__thiscall *)(Char *))v12->baseclass_0.vfptr[2].__vecDelDtor)(v12);
    v14 = (double)((int (__thiscall *)(Char *))v12->baseclass_0.vfptr[3].Deaffect)(v12);
    PgWinBar::SetValue(v2->m_pkHPBarWin, v14, v13);
    v15 = (double)((int (__thiscall *)(Char *))v12->baseclass_0.vfptr[3].SetAbStateProperty)(v12);
    v6 = (double)((int (__thiscall *)(Char *, _DWORD))v12->baseclass_0.vfptr[3].IsVisible)(v12, LODWORD(v15));
  }
  v11 = v2->m_pkSPBarWin;
LABEL_29:
  v16 = v6;
  PgWinBar::SetValue(v11, v16, v18);
  v17 = v2->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( byte_B5BB23 )
    ((void (__stdcall *)(signed int, int))v17)(1, v19);
  else
    ((void (__stdcall *)(_DWORD, int))v17)(0, v19);
  ((void (*)(void))v2->m_pkHPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
  if ( byte_B5BB24 )
  {
    switch ( Char::GetClass(g_pkMainChar) )
    {
      case 0x1A:
      case 0x1B:
        ((void (__stdcall *)(signed int))v2->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(signed int))v2->m_pkLPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        break;
      default:
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v2->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(signed int))v2->m_pkSPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        break;
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkLPBarBackWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}
// B5BB23: using guessed type char byte_B5BB23;
// B5BB24: using guessed type char byte_B5BB24;

//----- (00542EB0) --------------------------------------------------------
MainCharHPBarWin *__cdecl MainCharHPBarWin::CreateWin()
{
  void *v0; // eax@1
  void *v1; // esi@1
  PgWin *v2; // edi@8
  MainCharHPBarWin *v3; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x148u);
  v1 = v0;
  result.m_pObject = (PgWin *)v0;
  v5 = 0;
  if ( v0 )
  {
    PgWinSpr::PgWinSpr((PgWinSpr *)v0);
    *(_DWORD *)v1 = &MainCharHPBarWin::_vftable_;
    *((_DWORD *)v1 + 58) = &MainCharHPBarWin::_vftable_;
    *((_DWORD *)v1 + 75) = 0;
    *((_BYTE *)v1 + 296) = 0;
    *((_WORD *)v1 + 162) = 1;
    *((_DWORD *)v1 + 80) = 0;
    *((_DWORD *)v1 + 79) = 0;
  }
  else
  {
    v1 = 0;
  }
  if ( v1 )
    InterlockedIncrement((volatile LONG *)v1 + 1);
  v5 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v1);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 516))(v1) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v1 + 356))(v1);
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = (MainCharHPBarWin *)v1;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v1);
    if ( result.m_pObject )
    {
      v2 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v2 )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
    }
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = 0;
  }
  return v3;
}
// 99D898: using guessed type int (__stdcall *MainCharHPBarWin___vftable_)(int uiFlags);
// 99D8B4: using guessed type int (__thiscall *MainCharHPBarWin___vftable_)(void *p, char);

//----- (00543010) --------------------------------------------------------
void *__thiscall MainCharHPBarWin::_scalar_deleting_destructor_(MainCharHPBarWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MainCharHPBarWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MainCharHPBarWin::_vftable_;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99D898: using guessed type int (__stdcall *MainCharHPBarWin___vftable_)(int uiFlags);
// 99D8B4: using guessed type int (__thiscall *MainCharHPBarWin___vftable_)(void *p, char);

//----- (00543050) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdChar(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0xCu, 0, 0);
}

//----- (00543070) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdInven(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0xDu, 0, 0);
}

//----- (00543090) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdSkill(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0xEu, 0, 0);
}

//----- (005430B0) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdAction(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0xFu, 0, 0);
}

//----- (005430D0) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdQuest(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x10u, 0, 0);
}

//----- (005430F0) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdFriend(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x12u, 0, 0);
}

//----- (00543120) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdMiniHouse(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x13u, 0, 0);
}

//----- (00543140) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdForum(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x15u, 0, 0);
}

//----- (00543160) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdItemMall(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x14u, 0, 0);
}

//----- (00543180) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdSystem(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x16u, 0, 0);
}

//----- (005431A0) --------------------------------------------------------
void __thiscall MainMenuWin::OnCmdHelp(MainMenuWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x11u, 0, 0);
}

//----- (005431C0) --------------------------------------------------------
void __thiscall MainMenuWin::SetMainButToolTip(MainMenuWin *this, unsigned int uiMenu, char *pkStr)
{
  PgWin::SetToolTipWinText(&this->m_pkBut[uiMenu]->baseclass_0.baseclass_0.baseclass_0, pkStr);
}

//----- (005431E0) --------------------------------------------------------
void __thiscall MainMenuWin::SetBlinkEffect(MainMenuWin *this, bool bActive, int iBlinkSlotType)
{
  MainMenuWin *v3; // ebx@1
  char *v4; // esi@1
  signed int v5; // edi@1
  double v6; // st7@3
  float bActivea; // [sp+18h] [bp+8h]@5

  v3 = this;
  this->m_bBlinkEffect = bActive;
  this->m_iBlinkSlotType = iBlinkSlotType;
  v4 = (char *)this->m_pkBut;
  v5 = 13;
  do
  {
    if ( v3->m_bBlinkEffect )
      v6 = 0.30000001;
    else
      v6 = 1.0;
    bActivea = v6;
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 276))(LODWORD(bActivea));
    v4 += 4;
    --v5;
  }
  while ( v5 );
}

//----- (00543240) --------------------------------------------------------
void __thiscall MainMenuWin::ShowNewMark(MainMenuWin *this, bool bShow)
{
  ((void (__stdcall *)(_DWORD))this->m_pkNewItem->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
}

//----- (00543260) --------------------------------------------------------
void __thiscall MainMenuWin::_MainMenuWin(MainMenuWin *this)
{
  MainMenuWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MainMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MainMenuWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_aspEffectNode,
    4u,
    13,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_kEffectManager,
    0x68u,
    13,
    (void (__thiscall *)(void *))MainMenuWin::_unnamed_type_m_kEffectManager_::__unnamed_type_m_kEffectManager_);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 99DF18: using guessed type int (__stdcall *MainMenuWin___vftable_)(int uiFlags);
// 99DF34: using guessed type int (__thiscall *MainMenuWin___vftable_)(void *p, char);

//----- (005432F0) --------------------------------------------------------
NiMaterialProperty *__cdecl GetMaterialProp(NiNode *pkMtrlNode, char *pcName)
{
  NiAVObject *v2; // eax@1

  v2 = (NiAVObject *)((int (__stdcall *)(_DWORD))pkMtrlNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(pcName);
  return (NiMaterialProperty *)NiAVObject::GetProperty(v2, 3);
}

//----- (00543310) --------------------------------------------------------
void __thiscall MainMenuWin::ChangeMenuTab(MainMenuWin *this)
{
  MainMenuWin *v1; // esi@1
  MainMenuWin::MENU_TAB_MODE v2; // eax@1
  int v3; // eax@2
  MainMenuWin::MENU_TAB_MODE v4; // eax@7
  int v5; // eax@8
  int v6; // edi@10
  PgWinButExt *v7; // edi@12
  int v8; // ebx@12
  int v9; // edi@12
  int v10; // ebx@12
  int v11; // edi@12
  PgWinButExt *v12; // eax@12
  PgWinButExt *v13; // edi@13
  int v14; // ebx@13
  signed int v15; // edi@13
  int v16; // ebx@16
  int v17; // ST14_4@16
  PgWinButExt *v18; // eax@16
  char *v19; // edi@19
  int v20; // ebx@20
  int v21; // ST14_4@20
  int v22; // eax@20
  int v23; // [sp-4h] [bp-18h]@0
  signed int posY; // [sp+Ch] [bp-8h]@10
  int offsetX; // [sp+10h] [bp-4h]@13
  signed int offsetXa; // [sp+10h] [bp-4h]@19

  v1 = this;
  v2 = this->m_tab;
  if ( v2 )
  {
    v3 = v2 - 1;
    if ( v3 )
    {
      if ( v3 == 1 )
        this->m_tab = 0;
    }
    else
    {
      this->m_tab = 2;
    }
  }
  else
  {
    this->m_tab = 1;
  }
  v4 = this->m_tab;
  if ( !v4 )
  {
    v19 = (char *)this->m_pkBut;
    offsetXa = 13;
    do
    {
      v20 = *(_DWORD *)(*(_DWORD *)v19 + 340);
      v21 = *(_DWORD *)(*(_DWORD *)v19 + 344);
      (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)v19 + 308))(*(_DWORD *)(*(_DWORD *)v19 + 340), v23);
      v22 = *(_DWORD *)v19;
      *(_DWORD *)(*(_DWORD *)v19 + 348) = v20;
      *(_DWORD *)(v22 + 352) = v21;
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v19 + 256))(1);
      v19 += 4;
      --offsetXa;
    }
    while ( offsetXa );
LABEL_21:
    v1->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1->m_pkBut[12],
      0);
    return;
  }
  v5 = v4 - 1;
  if ( !v5 )
  {
    ((void (__stdcall *)(signed int))this->m_pkBut[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_pkBut[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v13 = v1->m_pkBut[2];
    v14 = ((int (*)(void))v1->m_pkBut[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)();
    offsetX = ((int (__thiscall *)(PgWinButExt *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)(v13)
            - v14;
    v15 = 2;
    do
    {
      if ( v15 == 4 )
      {
        offsetX -= ((int (*)(void))v1->m_pkBut[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
        ((void (__stdcall *)(_DWORD))v1->m_pkBut[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
      else
      {
        v16 = ((int (*)(void))v1->m_pkBut[v15]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)()
            - offsetX;
        v17 = ((int (*)(void))v1->m_pkBut[v15]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[50].__vecDelDtor)();
        ((void (__stdcall *)(int, int))v1->m_pkBut[v15]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
          v16,
          v17);
        v18 = v1->m_pkBut[v15];
        v18->defaultPosX = v16;
        v18->defaultPosY = v17;
        ((void (__stdcall *)(signed int))v1->m_pkBut[v15]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      ++v15;
    }
    while ( v15 < 13 );
    goto LABEL_21;
  }
  if ( v5 == 1 )
  {
    ((void (__stdcall *)(signed int))this->m_pkBut[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v6 = (int)&v1->m_pkBut[1];
    posY = 12;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0);
      v6 += 4;
      --posY;
    }
    while ( posY );
    v7 = v1->m_pkBut[12];
    v8 = ((int (*)(void))v1->m_pkBut[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)();
    v9 = v1->maxButOffset
       + ((int (__thiscall *)(PgWinButExt *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)(v7)
       - v8;
    v10 = ((int (*)(void))v1->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)()
        - v9;
    v11 = ((int (*)(void))v1->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[50].__vecDelDtor)();
    ((void (__stdcall *)(int, int))v1->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      v11);
    v12 = v1->m_pkBut[12];
    v12->defaultPosX = v10;
    v12->defaultPosY = v11;
    v1->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1->m_pkBut[12],
      1u);
  }
}

//----- (00543590) --------------------------------------------------------
void __thiscall MainMenuWin::ProcessMeInput(MainMenuWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    PgWinFrame::ProcessMeInput(v2, bHit);
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (00543600) --------------------------------------------------------
void __thiscall MainMenuWin::StartParticle(MainMenuWin *this, int iIndex)
{
  MainMenuWin *v2; // edi@1
  NiNode *v3; // eax@1
  char *v4; // esi@2
  NiObjectNET *v5; // edx@2

  v2 = this;
  v3 = this->m_aspEffectNode[iIndex].m_pObject;
  if ( v3 )
  {
    v4 = (char *)this + 104 * iIndex;
    NsEffect::SetEffectNode((NsEffect *)(v4 + 408), &v3->baseclass_0);
    NsEffect::Start((NsEffect *)(v4 + 408), Timer::ms_fCurTime);
    *((float *)v4 + 99) = *((float *)v4 + 105);
    CNSTimer_MarkCheck::ReSet((CNSTimer_MarkCheck *)v4 + 16, Timer::ms_fCurTime, OVER);
    v5 = (NiObjectNET *)*((_DWORD *)v4 + 114);
    v4[444] = 1;
    NiTimeController::StartAnimations(v5, Timer::ms_fCurTime);
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkBut[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_aspEffectNode[iIndex].m_pObject,
      1);
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkBut[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *((_DWORD *)v4 + 114),
      0);
    NiAVObject::UpdateProperties(&v2->m_pkBut[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::UpdateEffects(&v2->m_pkBut[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005436E0) --------------------------------------------------------
void __thiscall MainMenuWin::UpdateBlinkEffect(MainMenuWin *this)
{
  double v1; // st7@0
  MainMenuWin *v2; // esi@1
  int v3; // eax@2
  double v4; // st6@5
  float v5; // ST08_4@6
  double v6; // st7@8
  float v7; // ST08_4@10
  float v8; // ST00_4@14
  float fBlinkAlpha; // [sp+8h] [bp-4h]@4

  v2 = this;
  if ( this->m_bBlinkEffect )
  {
    v3 = this->m_iBlinkSlotType;
    if ( v3 >= 0 && v3 < 13 )
    {
      ((void (*)(void))this->m_pkBut[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
      fBlinkAlpha = v1;
      if ( v2->m_bBlinkActive )
      {
        v4 = fBlinkAlpha;
        if ( fBlinkAlpha >= 0.5 )
        {
          v5 = v4 - Timer::ms_fDeltaTime;
          v4 = v5;
        }
        if ( v4 <= 0.5 )
        {
          v2->m_bBlinkActive = 0;
          v6 = (float)0.5;
LABEL_14:
          v8 = v6;
          ((void (__stdcall *)(_DWORD))v2->m_pkBut[v2->m_iBlinkSlotType]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(v8));
          return;
        }
      }
      else
      {
        v4 = fBlinkAlpha;
        if ( fBlinkAlpha <= 1.0 )
        {
          v7 = v4 + Timer::ms_fDeltaTime;
          v4 = v7;
        }
        if ( v4 >= 1.0 )
        {
          v2->m_bBlinkActive = 1;
          v6 = (float)1.0;
          goto LABEL_14;
        }
      }
      v6 = v4;
      goto LABEL_14;
    }
    this->m_bBlinkEffect = 0;
  }
}
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (005437D0) --------------------------------------------------------
bool __thiscall MainMenuWin::Create(MainMenuWin *this, PgFrameWork *pkFrameWork)
{
  MainMenuWin *v2; // esi@1
  NiNode *v3; // edi@1
  NiTexturePalette *v5; // ebx@7
  char *v6; // eax@9
  NiNode *v7; // esi@11
  NiTexturePalette *v8; // ebx@16
  char *v9; // eax@18
  int v10; // ebx@21
  PgSprData *v11; // edi@23
  PgWin *v12; // eax@23
  char *v13; // eax@23
  PgWinButExt *v14; // eax@23
  PgWinButExt *v15; // eax@23
  int v16; // eax@23
  PgWinButExt *v17; // edx@23
  int v18; // edi@23
  PgWin *v19; // eax@23
  char *v20; // eax@23
  PgWinButExt *v21; // ecx@23
  int v22; // eax@23
  PgWinButExt *v23; // ecx@23
  int v24; // eax@23
  int v25; // ecx@23
  PgWinButExt *v26; // edx@23
  int v27; // edi@23
  PgWin *v28; // eax@23
  PgSprData *v29; // ST34_4@23
  int v30; // ST30_4@23
  char *v31; // eax@23
  PgWinButExt *v32; // ecx@23
  int v33; // eax@23
  PgWinButExt *v34; // ecx@23
  int v35; // eax@23
  int v36; // eax@23
  PgWinButExt *v37; // edx@23
  int v38; // edi@23
  PgWin *v39; // eax@23
  char *v40; // eax@23
  PgWinButExt *v41; // ecx@23
  PgWinButExt *v42; // ecx@23
  int v43; // eax@23
  int v44; // ecx@23
  PgWinButExt *v45; // edx@23
  int v46; // edi@23
  PgWin *v47; // eax@23
  PgSprData *v48; // ST34_4@23
  int v49; // ST30_4@23
  char *v50; // eax@23
  PgWinButExt *v51; // ecx@23
  int v52; // eax@23
  PgWinButExt *v53; // ecx@23
  int v54; // eax@23
  int v55; // eax@23
  PgWinButExt *v56; // edx@23
  int v57; // edi@23
  PgWin *v58; // eax@23
  char *v59; // eax@23
  PgWinButExt *v60; // ecx@23
  int v61; // eax@23
  PgWinButExt *v62; // ecx@23
  int v63; // eax@23
  int v64; // ecx@23
  PgWinButExt *v65; // edx@23
  int v66; // edi@23
  PgWin *v67; // eax@23
  PgSprData *v68; // ST34_4@23
  int v69; // ST30_4@23
  char *v70; // eax@23
  PgWinButExt *v71; // ecx@23
  int v72; // eax@23
  PgWinButExt *v73; // ecx@23
  int v74; // eax@23
  int v75; // ecx@23
  PgWinButExt *v76; // edx@23
  int v77; // edi@23
  PgSprData *v78; // eax@23
  PgWinSpr *v79; // eax@23
  PgWin *v80; // eax@23
  char *v81; // eax@23
  PgWinButExt *v82; // ecx@23
  int v83; // eax@23
  PgWinButExt *v84; // ecx@23
  int v85; // eax@23
  int v86; // eax@23
  PgWinButExt *v87; // edx@23
  int v88; // edi@23
  PgWin *v89; // eax@23
  PgSprData *v90; // ST34_4@23
  int v91; // ST30_4@23
  char *v92; // eax@23
  PgWinButExt *v93; // ecx@23
  int v94; // eax@23
  PgWinButExt *v95; // ecx@23
  int v96; // eax@23
  PgWinButExt *v97; // edx@23
  int v98; // edi@23
  PgWin *v99; // eax@23
  char *v100; // eax@23
  PgWinButExt *v101; // ecx@23
  int v102; // eax@23
  PgWinButExt *v103; // ecx@23
  int v104; // eax@23
  int v105; // ecx@23
  PgWinButExt *v106; // edx@23
  int v107; // edi@23
  PgWin *v108; // eax@23
  PgSprData *v109; // ST34_4@23
  int v110; // ST30_4@23
  char *v111; // eax@23
  PgWinButExt *v112; // ecx@23
  int v113; // eax@23
  PgWinButExt *v114; // ecx@23
  int v115; // eax@23
  int v116; // eax@23
  PgWinButExt *v117; // edx@23
  int v118; // edi@23
  int v119; // edi@23
  PgWinButExt *v120; // eax@23
  PgWinButExt *v121; // ecx@23
  int v122; // eax@23
  PgWinButExt *v123; // ecx@23
  int v124; // eax@23
  int v125; // eax@23
  PgWinButExt *v126; // edx@23
  PgSprData *v127; // ecx@23
  PgWinButExt *v128; // eax@23
  PgWinButExt *v129; // ecx@23
  int v130; // eax@23
  int v131; // ebx@23
  PgWinButExt *v132; // eax@23
  int v133; // eax@23
  PgWinButExt *v134; // edx@23
  char *v135; // eax@23
  char *v136; // eax@23
  int v137; // edx@23
  void *(__thiscall *v138)(NiRefObject *, unsigned int); // eax@23
  char *v139; // eax@23
  char *v140; // eax@23
  NiNode *v141; // eax@23
  NiNode *v142; // edi@23
  NiShader *v143; // eax@26
  NiShader *v144; // eax@26
  NiNode *v145; // eax@26
  float v146; // ST5C_4@26
  float v147; // ST48_4@26
  NiShader *v148; // eax@26
  NiShader *v149; // eax@26
  NiNode *v150; // eax@26
  float v151; // ST5C_4@26
  float v152; // ST48_4@26
  NiShader *v153; // eax@26
  NiShader *v154; // eax@26
  NiNode *v155; // eax@26
  float v156; // ST5C_4@26
  float v157; // ST48_4@26
  NiShader *v158; // eax@26
  NiShader *v159; // eax@26
  NiNode *v160; // eax@26
  float v161; // ST5C_4@26
  float v162; // ST48_4@26
  NiShader *v163; // eax@26
  NiShader *v164; // eax@26
  NiNode *v165; // eax@26
  float v166; // ST5C_4@26
  float v167; // ST48_4@26
  NiShader *v168; // eax@26
  NiShader *v169; // eax@26
  NiNode *v170; // eax@26
  float v171; // ST5C_4@26
  float v172; // ST48_4@26
  NiShader *v173; // eax@26
  NiShader *v174; // eax@26
  NiNode *v175; // eax@26
  float v176; // ST5C_4@26
  float v177; // ST48_4@26
  NiShader *v178; // eax@26
  NiObject *v179; // eax@26
  NiObject *v180; // eax@26
  NiNode *v181; // eax@26
  float v182; // ST5C_4@26
  float v183; // ST48_4@26
  NiShader *v184; // eax@26
  NiShader *v185; // eax@26
  NiNode *v186; // eax@26
  float v187; // ST5C_4@26
  float v188; // ST48_4@26
  NiShader *v189; // eax@26
  NiShader *v190; // eax@26
  NiNode *v191; // eax@26
  float v192; // ST5C_4@26
  float v193; // ST48_4@26
  NiShader *v194; // eax@26
  NiObject *v195; // eax@26
  NiObject *v196; // eax@26
  void *(__thiscall *v197)(NiRefObject *, unsigned int); // eax@26
  NiObjectNET *v198; // eax@26
  NiTimeController *v199; // eax@26
  NiObject *v200; // ebx@26
  NiPointer<NiD3DDefaultShader> *v201; // esi@29
  void *v202; // eax@31
  NiD3DDefaultShader *v203; // eax@32
  NiObject *v204; // eax@34
  NiSourceTexture *pkAddedTexture; // [sp+64h] [bp-54h]@10
  int ForumLeft; // [sp+68h] [bp-50h]@23
  int ForumTop; // [sp+6Ch] [bp-4Ch]@23
  NiSourceTexture *pkTextureForum; // [sp+70h] [bp-48h]@19
  int fixTop; // [sp+74h] [bp-44h]@21
  NiPointer<NiNode> spParticle; // [sp+78h] [bp-40h]@1
  NiPointer<NiNode> spAddedNode; // [sp+7Ch] [bp-3Ch]@16
  int uiTop; // [sp+80h] [bp-38h]@23
  int hilWidth; // [sp+84h] [bp-34h]@23
  int hilHeight; // [sp+88h] [bp-30h]@23
  int norWidth; // [sp+8Ch] [bp-2Ch]@21
  int norLeft; // [sp+90h] [bp-28h]@21
  int hilLeft; // [sp+94h] [bp-24h]@23
  int hilTop; // [sp+98h] [bp-20h]@23
  int norTop; // [sp+9Ch] [bp-1Ch]@21
  int uiLeft; // [sp+A0h] [bp-18h]@23
  int norHeight; // [sp+A4h] [bp-14h]@21
  NiPointer<NiNode> spNode; // [sp+A8h] [bp-10h]@1
  int v223; // [sp+B4h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v223 = 0;
  v3 = (NiNode *)MenuTexMgr::GetTexture(4u);
  spParticle.m_pObject = v3;
  if ( !v3 )
  {
    v223 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\Menu.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  pkAddedTexture = MenuTexMgr::GetTexture(0x12u);
  if ( pkAddedTexture )
  {
    spAddedNode.m_pObject = 0;
    v8 = dword_B70448;
    LOBYTE(v223) = 1;
    if ( !Folder::m_bInit )
      Folder::Init();
    v9 = Folder::Merge(&Folder::m_acMenu, "Game\\Menu01.nif");
    PgUtil::LoadNodeNifFile(v9, &spAddedNode, v8);
    if ( !spAddedNode.m_pObject
      || (pkTextureForum = MenuTexMgr::GetTexture(0x1Fu)) == 0
      || !PgWinFrame::Create(&v2->baseclass_0, 0, 0, 0, pkFrameWork, "MainMenuWin", 0) )
      goto LABEL_28;
    v10 = 0;
    fixTop = 0;
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "SystemNor",
           &norLeft,
           &norTop,
           (unsigned int *)&norWidth,
           (unsigned int *)&norHeight) )
    {
      v10 = norHeight;
      fixTop = norTop;
    }
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "SystemOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SystemNor", &uiLeft, &uiTop, (NiSourceTexture *)v3);
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "SystemNor");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "SystemOver");
    v12 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_kEffectManager[0].pkProxy = v12;
    v2->m_pkBut[0] = PgWinButExt::CreateWin(0, 0, v11, v12, 0, 0, 0);
    v13 = TextData::Get(0xF3F7FCFEu);
    PgWin::SetToolTipWinText(&v2->m_pkBut[0]->baseclass_0.baseclass_0.baseclass_0, v13);
    v2->m_pkBut[0]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[0]->m_bMainBtnMode = 1;
    v14 = v2->m_pkBut[0];
    v14->firstPosX = 0;
    v14->firstPosY = 0;
    v15 = v2->m_pkBut[0];
    v15->defaultPosX = 0;
    v15->defaultPosY = 0;
    v16 = hilTop - norTop;
    v17 = v2->m_pkBut[0];
    v17->hilOffsetX = hilLeft - norLeft;
    v17->hilOffsetY = v16;
    v18 = uiLeft;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "MiniHouseNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "MiniHouseOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "MiniHouseNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "MiniHouseNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "MiniHouseOver");
    v19 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_kEffectManager[1].pkProxy = v19;
    v2->m_pkBut[1] = PgWinButExt::CreateWin(v18, v10 - norHeight, (PgSprData *)pkFrameWork, v19, 1u, 0, 0);
    v20 = TextData::Get(0xE539444Eu);
    PgWin::SetToolTipWinText(&v2->m_pkBut[1]->baseclass_0.baseclass_0.baseclass_0, v20);
    v2->m_pkBut[1]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[1]->m_bMainBtnMode = 1;
    v21 = v2->m_pkBut[1];
    v22 = v10 - norHeight;
    v21->firstPosX = v18;
    v21->firstPosY = v22;
    v23 = v2->m_pkBut[1];
    v24 = v10 - norHeight;
    v23->defaultPosX = v18;
    v23->defaultPosY = v24;
    v25 = hilLeft - norLeft;
    v26 = v2->m_pkBut[1];
    v26->hilOffsetY = hilTop - norTop;
    v26->hilOffsetX = v25;
    v27 = uiLeft + v18;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ActionNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ActionOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "ActionNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ActionNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ActionOver");
    v28 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v29 = (PgSprData *)pkFrameWork;
    v30 = v10 - norHeight;
    v2->m_kEffectManager[2].pkProxy = v28;
    v2->m_pkBut[2] = PgWinButExt::CreateWin(v27, v30, v29, v28, 2u, 0, 0);
    v31 = TextData::Get(0xDEEFF1FFu);
    PgWin::SetToolTipWinText(&v2->m_pkBut[2]->baseclass_0.baseclass_0.baseclass_0, v31);
    v2->m_pkBut[2]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[2]->m_bMainBtnMode = 1;
    v32 = v2->m_pkBut[2];
    v33 = v10 - norHeight;
    v32->firstPosX = v27;
    v32->firstPosY = v33;
    v34 = v2->m_pkBut[2];
    v35 = v10 - norHeight;
    v34->defaultPosX = v27;
    v34->defaultPosY = v35;
    v36 = hilTop - norTop;
    v37 = v2->m_pkBut[2];
    v37->hilOffsetX = hilLeft - norLeft;
    v37->hilOffsetY = v36;
    v38 = uiLeft + v27;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ComuNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ComuOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "ComuNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ComuNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ComuOver");
    v39 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_kEffectManager[3].pkProxy = v39;
    v2->m_pkBut[3] = PgWinButExt::CreateWin(v38, v10 - norHeight, (PgSprData *)pkFrameWork, v39, 3u, 0, 0);
    v40 = TextData::Get(0xEA504941u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[3]->baseclass_0.baseclass_0.baseclass_0, v40);
    v2->m_pkBut[3]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[3]->m_bMainBtnMode = 1;
    v41 = v2->m_pkBut[3];
    v41->firstPosY = v10 - norHeight;
    v41->firstPosX = v38;
    v42 = v2->m_pkBut[3];
    v43 = v10 - norHeight;
    v42->defaultPosX = v38;
    v42->defaultPosY = v43;
    v44 = hilLeft - norLeft;
    v45 = v2->m_pkBut[3];
    v45->hilOffsetY = hilTop - norTop;
    v45->hilOffsetX = v44;
    v46 = uiLeft + v38;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "QuestNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "QuestOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "QuestNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "QuestNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "QuestOver");
    v47 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v48 = (PgSprData *)pkFrameWork;
    v49 = v10 - norHeight;
    v2->m_kEffectManager[4].pkProxy = v47;
    v2->m_pkBut[4] = PgWinButExt::CreateWin(v46, v49, v48, v47, 4u, 0, 0);
    v50 = TextData::Get(0xA204FBF0u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[4]->baseclass_0.baseclass_0.baseclass_0, v50);
    v2->m_pkBut[4]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[4]->m_bMainBtnMode = 1;
    v51 = v2->m_pkBut[4];
    v52 = v10 - norHeight;
    v51->firstPosX = v46;
    v51->firstPosY = v52;
    v53 = v2->m_pkBut[4];
    v54 = v10 - norHeight;
    v53->defaultPosX = v46;
    v53->defaultPosY = v54;
    v55 = hilTop - norTop;
    v56 = v2->m_pkBut[4];
    v56->hilOffsetX = hilLeft - norLeft;
    v56->hilOffsetY = v55;
    v57 = uiLeft + v46;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "SkillNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "SkillOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "SkillNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "SkillNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "SkillOver");
    v58 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_kEffectManager[5].pkProxy = v58;
    v2->m_pkBut[5] = PgWinButExt::CreateWin(v57, v10 - norHeight, (PgSprData *)pkFrameWork, v58, 5u, 0, 0);
    v59 = TextData::Get(0x98FEF4F4u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[5]->baseclass_0.baseclass_0.baseclass_0, v59);
    v2->m_pkBut[5]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[5]->m_bMainBtnMode = 1;
    v60 = v2->m_pkBut[5];
    v61 = v10 - norHeight;
    v60->firstPosX = v57;
    v60->firstPosY = v61;
    v62 = v2->m_pkBut[5];
    v63 = v10 - norHeight;
    v62->defaultPosX = v57;
    v62->defaultPosY = v63;
    v64 = hilLeft - norLeft;
    v65 = v2->m_pkBut[5];
    v65->hilOffsetY = hilTop - norTop;
    v65->hilOffsetX = v64;
    v66 = uiLeft + v57;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "InventoryNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "InventoryOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "InventoryNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "InventoryNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "InventoryOver");
    v67 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v68 = (PgSprData *)pkFrameWork;
    v69 = v10 - norHeight;
    v2->m_kEffectManager[6].pkProxy = v67;
    v2->m_pkBut[6] = PgWinButExt::CreateWin(v66, v69, v68, v67, 6u, 0, 0);
    v70 = TextData::Get(0xEF4F3F50u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[6]->baseclass_0.baseclass_0.baseclass_0, v70);
    v2->m_pkBut[6]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[6]->m_bMainBtnMode = 1;
    v71 = v2->m_pkBut[6];
    v72 = v10 - norHeight;
    v71->firstPosX = v66;
    v71->firstPosY = v72;
    v73 = v2->m_pkBut[6];
    v74 = v10 - norHeight;
    v73->defaultPosX = v66;
    v73->defaultPosY = v74;
    v75 = hilLeft - norLeft;
    v76 = v2->m_pkBut[6];
    v76->hilOffsetY = hilTop - norTop;
    v76->hilOffsetX = v75;
    pkFrameWork = (PgFrameWork *)v66;
    v77 = uiLeft + v66;
    v78 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NewItem", &uiLeft, &uiTop, 0);
    v79 = PgWinSpr::CreateWin(
            (int)((char *)pkFrameWork - uiLeft),
            v10 - norHeight,
            v78,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkNewItem = v79;
    v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v79,
      0);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ItemMallNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ItemMallOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "ItemMallNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ItemMallNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ItemMallOver");
    v80 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_kEffectManager[7].pkProxy = v80;
    v2->m_pkBut[7] = PgWinButExt::CreateWin(v77, v10 - norHeight, (PgSprData *)pkFrameWork, v80, 7u, 0, 0);
    v81 = TextData::Get(0xE2F5413Cu);
    PgWin::SetToolTipWinText(&v2->m_pkBut[7]->baseclass_0.baseclass_0.baseclass_0, v81);
    v2->m_pkBut[7]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[7]->m_bMainBtnMode = 1;
    v82 = v2->m_pkBut[7];
    v83 = v10 - norHeight;
    v82->firstPosX = v77;
    v82->firstPosY = v83;
    v84 = v2->m_pkBut[7];
    v85 = v10 - norHeight;
    v84->defaultPosX = v77;
    v84->defaultPosY = v85;
    v86 = hilTop - norTop;
    v87 = v2->m_pkBut[7];
    v87->hilOffsetX = hilLeft - norLeft;
    v87->hilOffsetY = v86;
    v88 = uiLeft + v77;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ForumNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "ForumOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    ForumLeft = 0;
    ForumTop = 0;
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "ForumNor",
                                   &ForumLeft,
                                   &ForumTop,
                                   pkTextureForum);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ForumNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ForumOver");
    v89 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v90 = (PgSprData *)pkFrameWork;
    v91 = v10 - norHeight;
    v2->m_kEffectManager[8].pkProxy = v89;
    v2->m_pkBut[8] = PgWinButExt::CreateWin(v88, v91, v90, v89, 8u, 0, 0);
    v92 = TextData3::Get(0x79A193F6u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[8]->baseclass_0.baseclass_0.baseclass_0, v92);
    v2->m_pkBut[8]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[8]->m_bMainBtnMode = 1;
    v93 = v2->m_pkBut[8];
    v94 = v10 - norHeight;
    v93->firstPosX = v88;
    v93->firstPosY = v94;
    v95 = v2->m_pkBut[8];
    v95->defaultPosY = v10 - norHeight;
    v95->defaultPosX = v88;
    v96 = hilTop - norTop;
    v97 = v2->m_pkBut[8];
    v97->hilOffsetX = hilLeft - norLeft;
    v97->hilOffsetY = v96;
    v98 = uiLeft + v88;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "StatusNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "StatusOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "StatusNor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "StatusNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "StatusOver");
    v99 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_kEffectManager[10].pkProxy = v99;
    v2->m_pkBut[10] = PgWinButExt::CreateWin(v98, v10 - norHeight, (PgSprData *)pkFrameWork, v99, 0xAu, 0, 0);
    v100 = TextData::Get(0xD8353F40u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[10]->baseclass_0.baseclass_0.baseclass_0, v100);
    v2->m_pkBut[10]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[10]->m_bMainBtnMode = 1;
    v101 = v2->m_pkBut[10];
    v102 = v10 - norHeight;
    v101->firstPosX = v98;
    v101->firstPosY = v102;
    v103 = v2->m_pkBut[10];
    v104 = v10 - norHeight;
    v103->defaultPosX = v98;
    v103->defaultPosY = v104;
    v105 = hilLeft - norLeft;
    v106 = v2->m_pkBut[10];
    v106->hilOffsetY = hilTop - norTop;
    v106->hilOffsetX = v105;
    v107 = uiLeft + v98;
    PgUtil::GetTriShapeRect(
      &spAddedNode.m_pObject->baseclass_0,
      "QuestionNor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spAddedNode.m_pObject->baseclass_0,
      "QuestionOver",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spAddedNode.m_pObject->baseclass_0,
                                   "QuestionNor",
                                   &uiLeft,
                                   &uiTop,
                                   pkAddedTexture);
    PgSprData::Add((PgSprData *)pkFrameWork, &spAddedNode.m_pObject->baseclass_0, "QuestionNor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spAddedNode.m_pObject->baseclass_0, "QuestionOver");
    v108 = (PgWin *)PgWinProxy::CreateWin(&v2->baseclass_0.baseclass_0.baseclass_0);
    v109 = (PgSprData *)pkFrameWork;
    v110 = v10 - norHeight;
    v2->m_kEffectManager[9].pkProxy = v108;
    v2->m_pkBut[9] = PgWinButExt::CreateWin(v107, v110, v109, v108, 9u, 0, 0);
    v111 = TextData::Get(0xD8DC563Du);
    PgWin::SetToolTipWinText(&v2->m_pkBut[9]->baseclass_0.baseclass_0.baseclass_0, v111);
    v2->m_pkBut[9]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v2->m_pkBut[9]->m_bMainBtnMode = 1;
    v112 = v2->m_pkBut[9];
    v113 = v10 - norHeight;
    v112->firstPosX = v107;
    v112->firstPosY = v113;
    v114 = v2->m_pkBut[9];
    v115 = v10 - norHeight;
    v114->defaultPosX = v107;
    v114->defaultPosY = v115;
    v116 = hilTop - norTop;
    v117 = v2->m_pkBut[9];
    v117->hilOffsetX = hilLeft - norLeft;
    v117->hilOffsetY = v116;
    v118 = uiLeft + v107;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "PanelBtn01Nor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "PanelBtn01Over",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "PanelBtn01Nor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "PanelBtn01Nor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "PanelBtn01Over");
    v119 = v118 - uiLeft;
    v120 = PgWinButExt::CreateWin(
             v119,
             v10 - norHeight,
             (PgSprData *)pkFrameWork,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0xBu,
             0,
             0);
    v2->m_pkBut[11] = v120;
    v120->m_bMainBtnMode = 1;
    v121 = v2->m_pkBut[11];
    v122 = v10 - norHeight;
    v121->firstPosX = v119;
    v121->firstPosY = v122;
    v123 = v2->m_pkBut[11];
    v124 = v10 - norHeight;
    v123->defaultPosX = v119;
    v123->defaultPosY = v124;
    v125 = hilTop - norTop;
    v126 = v2->m_pkBut[11];
    v126->hilOffsetX = hilLeft - norLeft;
    v126->hilOffsetY = v125;
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "PanelBtn02Nor",
      &norLeft,
      &norTop,
      (unsigned int *)&norWidth,
      (unsigned int *)&norHeight);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "PanelBtn02Over",
      &hilLeft,
      &hilTop,
      (unsigned int *)&hilWidth,
      (unsigned int *)&hilHeight);
    pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "PanelBtn02Nor",
                                   &uiLeft,
                                   &uiTop,
                                   (NiSourceTexture *)spParticle.m_pObject);
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "PanelBtn02Nor");
    PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "PanelBtn02Over");
    v127 = (PgSprData *)pkFrameWork;
    v2->maxButOffset = uiLeft;
    v128 = PgWinButExt::CreateWin(v119, v10 - norHeight, v127, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    v2->m_pkBut[12] = v128;
    v128->m_bMainBtnMode = 1;
    v129 = v2->m_pkBut[12];
    v130 = v10 - norHeight;
    v129->firstPosX = v119;
    v129->firstPosY = v130;
    v131 = v10 - norHeight;
    v132 = v2->m_pkBut[12];
    v132->defaultPosX = v119;
    v132->defaultPosY = v131;
    v133 = hilTop - norTop;
    v134 = v2->m_pkBut[12];
    v134->hilOffsetX = hilLeft - norLeft;
    v134->hilOffsetY = v133;
    ((void (__stdcall *)(_DWORD))v2->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v2->m_pkBut[11]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v135 = TextData2::Get(0xF5DBB444u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[11]->baseclass_0.baseclass_0.baseclass_0, v135);
    v2->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v136 = TextData2::Get(0xF5DBB444u);
    PgWin::SetToolTipWinText(&v2->m_pkBut[12]->baseclass_0.baseclass_0.baseclass_0, v136);
    v137 = fixTop;
    v138 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor;
    v2->m_tab = 0;
    ((void (__thiscall *)(MainMenuWin *, unsigned int, unsigned int))v138)(
      v2,
      PgWin::ms_uiScreenWidth - 44,
      PgWin::ms_uiScreenHeight + v137 - 3);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v139 = Folder::Menu();
    v140 = Folder::Merge(v139, "Game\\Menu_Particle.nif");
    v141 = Ns_LoadNifFile(v140, 0);
    v142 = v141;
    spParticle.m_pObject = v141;
    if ( v141 )
      InterlockedIncrement((volatile LONG *)&v141->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v223) = 2;
    if ( v142 )
    {
      v143 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_System");
      v144 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v143);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)v2->m_aspEffectNode,
        (NiD3DDefaultShader *)v144);
      v145 = v2->m_aspEffectNode[0].m_pObject;
      v146 = v145->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v145->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v147 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v146 + 50.0;
      PgUtil::SetXYTranslate(&v145->baseclass_0, *(float *)&pkFrameWork, v147);
      v148 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Comu");
      v149 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v148);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[3],
        (NiD3DDefaultShader *)v149);
      v150 = v2->m_aspEffectNode[3].m_pObject;
      v151 = v150->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v150->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v152 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v151 + 50.0;
      PgUtil::SetXYTranslate(&v150->baseclass_0, *(float *)&pkFrameWork, v152);
      v153 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_MiniHouse");
      v154 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v153);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[1],
        (NiD3DDefaultShader *)v154);
      v155 = v2->m_aspEffectNode[1].m_pObject;
      v156 = v155->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v155->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v157 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v156 + 50.0;
      PgUtil::SetXYTranslate(&v155->baseclass_0, *(float *)&pkFrameWork, v157);
      v158 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Quest");
      v159 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v158);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[4],
        (NiD3DDefaultShader *)v159);
      v160 = v2->m_aspEffectNode[4].m_pObject;
      v161 = v160->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v160->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v162 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v161 + 50.0;
      PgUtil::SetXYTranslate(&v160->baseclass_0, *(float *)&pkFrameWork, v162);
      v163 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Action");
      v164 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v163);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[2],
        (NiD3DDefaultShader *)v164);
      v165 = v2->m_aspEffectNode[2].m_pObject;
      v166 = v165->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v165->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v167 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v166 + 50.0;
      PgUtil::SetXYTranslate(&v165->baseclass_0, *(float *)&pkFrameWork, v167);
      v168 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Skill");
      v169 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v168);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[5],
        (NiD3DDefaultShader *)v169);
      v170 = v2->m_aspEffectNode[5].m_pObject;
      v171 = v170->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v170->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v172 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v171 + 50.0;
      PgUtil::SetXYTranslate(&v170->baseclass_0, *(float *)&pkFrameWork, v172);
      v173 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Inventory");
      v174 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v173);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[6],
        (NiD3DDefaultShader *)v174);
      v175 = v2->m_aspEffectNode[6].m_pObject;
      v176 = v175->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v175->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v177 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v176 + 50.0;
      PgUtil::SetXYTranslate(&v175->baseclass_0, *(float *)&pkFrameWork, v177);
      v178 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Status");
      v179 = (NiObject *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v178);
      v180 = NiObject::Clone(v179);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[7],
        (NiD3DDefaultShader *)v180);
      v181 = v2->m_aspEffectNode[7].m_pObject;
      v182 = v181->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v181->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v183 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v182 + 50.0;
      PgUtil::SetXYTranslate(&v181->baseclass_0, *(float *)&pkFrameWork, v183);
      v184 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Forum");
      v185 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v184);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[8],
        (NiD3DDefaultShader *)v185);
      v186 = v2->m_aspEffectNode[8].m_pObject;
      v187 = v186->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v186->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v188 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v187 + 50.0;
      PgUtil::SetXYTranslate(&v186->baseclass_0, *(float *)&pkFrameWork, v188);
      v189 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Status");
      v190 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v189);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[10],
        (NiD3DDefaultShader *)v190);
      v191 = v2->m_aspEffectNode[10].m_pObject;
      v192 = v191->baseclass_0.m_kLocal.m_Translate.x;
      *(float *)&pkFrameWork = v191->baseclass_0.m_kLocal.m_Translate.y + 60.0;
      v193 = *(float *)&pkFrameWork;
      *(float *)&pkFrameWork = v192 + 50.0;
      PgUtil::SetXYTranslate(&v191->baseclass_0, *(float *)&pkFrameWork, v193);
      v194 = (NiShader *)v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v142,
                           (unsigned int)"Dummy_Status");
      v195 = (NiObject *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v194);
      v196 = NiObject::Clone(v195);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_aspEffectNode[9],
        (NiD3DDefaultShader *)v196);
      PgUtil::SetXYTranslate(
        &v2->m_aspEffectNode[9].m_pObject->baseclass_0,
        v2->m_aspEffectNode[9].m_pObject->baseclass_0.m_kLocal.m_Translate.x,
        v2->m_aspEffectNode[9].m_pObject->baseclass_0.m_kLocal.m_Translate.y);
      *(float *)&pkFrameWork = 0.0;
      v197 = v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor;
      LOBYTE(v223) = 3;
      v198 = (NiObjectNET *)v197(&v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)"dummy_noise");
      v199 = NiObjectNET::GetController(v198, &NiTransformController::m_RTTI);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&pkFrameWork, (NiD3DDefaultShader *)v199);
      v200 = (NiObject *)pkFrameWork;
      if ( *(float *)&pkFrameWork == 0.0 )
      {
        LOBYTE(v223) = 2;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFrameWork);
        LOBYTE(v223) = 1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spParticle);
LABEL_28:
        LOBYTE(v223) = 0;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spAddedNode);
        v223 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
        return 0;
      }
      v201 = (NiPointer<NiD3DDefaultShader> *)&v2->m_kEffectManager[0].spPosOffsetNode;
      fixTop = 13;
      do
      {
        if ( v201[-1].m_pObject )
        {
          LOBYTE(v201[-3].m_pObject) = 0;
          v202 = operator new(0xE8u);
          LOBYTE(v223) = 4;
          if ( v202 )
            NiNode::NiNode((NiNode *)v202, 0);
          else
            v203 = 0;
          LOBYTE(v223) = 3;
          NiPointer<PopupMenuWin>::operator_(v201, v203);
          v204 = NiObject::Clone(v200);
          NiPointer<PopupMenuWin>::operator_(v201 - 2, (NiD3DDefaultShader *)v204);
          ((void (__stdcall *)(NiD3DDefaultShader *))v201[-2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v201->m_pObject);
          LOWORD(v201[-2].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pszName) = (unsigned int)v201[-2].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pszName & 0xFFF7 | 1;
        }
        v201 += 26;
        --fixTop;
      }
      while ( fixTop );
      LOBYTE(v223) = 2;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFrameWork);
    }
    LOBYTE(v223) = 1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spParticle);
    LOBYTE(v223) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spAddedNode);
    v223 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 1;
  }
  v7 = spNode.m_pObject;
  v223 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  return 0;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00544F90) --------------------------------------------------------
void __thiscall MainMenuWin::OnCommand(MainMenuWin *this, unsigned int wParam, int lParam)
{
  MainMenuWin *v3; // esi@1

  v3 = this;
  switch ( wParam )
  {
    case 0xBu:
    case 0xCu:
      MainMenuWin::ChangeMenuTab(this);
      break;
    case 0xAu:
      MainMenuWin::OnCmdChar(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 6u:
      MainMenuWin::OnCmdInven(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 5u:
      MainMenuWin::OnCmdSkill(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 2u:
      MainMenuWin::OnCmdAction(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 4u:
      MainMenuWin::OnCmdQuest(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 3u:
      MainMenuWin::OnCmdFriend(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 1u:
      MainMenuWin::OnCmdMiniHouse(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 7u:
      MainMenuWin::OnCmdItemMall(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 8u:
      MainMenuWin::OnCmdForum(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 0u:
      MainMenuWin::OnCmdSystem(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    case 9u:
      MainMenuWin::OnCmdHelp(this);
      MainMenuWin::StartParticle(v3, wParam);
      break;
    default:
      if ( wParam <= 0xA )
        MainMenuWin::StartParticle(this, wParam);
      break;
  }
}

//----- (005450D0) --------------------------------------------------------
void __thiscall MainMenuWin::UpdateMeWin(MainMenuWin *this, float fCurTime)
{
  MainMenuWin *v2; // edi@1
  int v3; // esi@1
  int v4; // edi@1
  int v5; // edi@7
  bool v6; // zf@12
  int v7; // [sp+1Ch] [bp-Ch]@6
  int v8; // [sp+20h] [bp-8h]@1
  int v9; // [sp+24h] [bp-4h]@1

  v2 = this;
  MainMenuWin::UpdateBlinkEffect(this);
  v3 = (int)&v2->m_kEffectManager[0].bLive;
  v4 = (int)v2->m_pkBut;
  v9 = v4;
  v8 = 13;
  do
  {
    if ( *(_BYTE *)v3 )
    {
      if ( CNSTimer_MarkCheck::Update((CNSTimer_MarkCheck *)(v3 - 60), Timer::ms_fCurTime) == 1
        && *(_DWORD *)(v4 - 56)
        && *(_DWORD *)v4 )
      {
        (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)v4 + 120))(&v7, *(_DWORD *)(v4 - 56));
        if ( v7 )
        {
          v5 = v7;
          if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
          {
            if ( v5 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
          }
        }
        *(_BYTE *)v3 = 0;
      }
      (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v3 + 8) + 308))(
        *(_DWORD *)(v3 + 8),
        (signed int)*(float *)(*(_DWORD *)(v3 + 12) + 88));
      v4 = v9;
    }
    v4 += 4;
    v3 += 104;
    v6 = v8-- == 1;
    v9 = v4;
  }
  while ( !v6 );
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005451B0) --------------------------------------------------------
void __thiscall MainMenuWin::MainMenuWin(MainMenuWin *this)
{
  MainMenuWin *v1; // esi@1
  int v2; // ebx@1
  int v3; // edi@1
  int v4; // ebx@3
  int v5; // ebx@8
  int v6; // ebx@13
  signed int v7; // [sp+4h] [bp-14h]@1
  int v8; // [sp+8h] [bp-10h]@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v2 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MainMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MainMenuWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_kEffectManager,
    0x68u,
    13,
    (void (__thiscall *)(void *))MainMenuWin::_unnamed_type_m_kEffectManager_::_unnamed_type_m_kEffectManager_,
    (void (__thiscall *)(void *))MainMenuWin::_unnamed_type_m_kEffectManager_::__unnamed_type_m_kEffectManager_);
  _eh_vector_constructor_iterator_(
    v1->m_aspEffectNode,
    4u,
    13,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v8 = (int)v1->m_aspEffectNode;
  v1->m_uiFrameWidth = 20;
  v1->m_tab = 0;
  v1->maxButOffset = 0;
  v1->m_iCurrParticleIndex = -1;
  v3 = (int)&v1->m_kEffectManager[0].spPosOffsetNode;
  v7 = 13;
  while ( 1 )
  {
    *(_DWORD *)(v3 - 4) = v2;
    *(_BYTE *)(v3 - 12) = 0;
    v4 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)v3 = 0;
    }
    v5 = *(_DWORD *)(v3 - 8);
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      *(_DWORD *)(v3 - 8) = 0;
    }
    v6 = *(_DWORD *)v8;
    if ( *(_DWORD *)v8 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      *(_DWORD *)v8 = 0;
    }
    v8 += 4;
    v3 += 104;
    --v7;
    if ( !v7 )
      break;
    v2 = 0;
  }
  *(_WORD *)&v1->m_bBlinkEffect = 0;
  v1->m_pkNewItem = 0;
}
// 99DF18: using guessed type int (__stdcall *MainMenuWin___vftable_)(int uiFlags);
// 99DF34: using guessed type int (__thiscall *MainMenuWin___vftable_)(void *p, char);

//----- (00545330) --------------------------------------------------------
NiNode *__cdecl CloneWithSpecifiedMaterial(NiNode *pkSrc, NiNode *pkMtrlNode, char *pcMtrlNodeName)
{
  NiObject *v3; // edi@1
  int v4; // eax@2
  char v5; // al@5
  NiAVObject *v6; // esi@6
  NiAVObject *v7; // eax@7
  NiProperty *v8; // eax@7
  NiNode *result; // eax@7

  v3 = NiObject::Clone(&pkSrc->baseclass_0.baseclass_0.baseclass_0);
  if ( !v3 )
    goto LABEL_12;
  v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3);
  if ( v4 )
  {
    while ( (NiRTTI *)v4 != &NiNode::m_RTTI )
    {
      v4 = *(_DWORD *)(v4 + 4);
      if ( !v4 )
        goto LABEL_5;
    }
    v5 = 1;
  }
  else
  {
LABEL_5:
    v5 = 0;
  }
  v6 = (NiAVObject *)(v5 != 0 ? (int)v3 : 0);
  if ( v5 != 0 ? (int)v3 : 0 )
  {
    v7 = (NiAVObject *)((int (__stdcall *)(_DWORD))pkMtrlNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(pcMtrlNodeName);
    v8 = NiAVObject::GetProperty(v7, 3);
    NiAVObject::AttachProperty(v6, v8);
    result = (NiNode *)v6;
  }
  else
  {
LABEL_12:
    result = 0;
  }
  return result;
}

//----- (005453A0) --------------------------------------------------------
MainMenuWin *__cdecl MainMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MainMenuWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x728u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MainMenuWin::MainMenuWin((MainMenuWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MainMenuWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005454D0) --------------------------------------------------------
void __thiscall MainMenuWin::_unnamed_type_m_kEffectManager_::__unnamed_type_m_kEffectManager_(MainMenuWin::<unnamed-type-m_kEffectManager> *this)
{
  MainMenuWin::<unnamed-type-m_kEffectManager> *v1; // edi@1
  NiNode *v2; // esi@1
  NiTransformController *v3; // esi@5

  v1 = this;
  v2 = this->spPosOffsetNode.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->spTransformController.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  NsEffect::_NsEffect(&v1->kEffect);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->kMarkCheck);
}

//----- (00545580) --------------------------------------------------------
void __thiscall NiTimeController::SetAnimType(NiTimeController *this, NiTimeController::AnimType eType)
{
  unsigned __int16 v2; // ax@1

  v2 = eType | this->m_uFlags & 0xFFFE;
  this->m_uFlags = v2;
  if ( eType )
    this->m_uFlags = v2 & 0xFFF7;
  else
    this->m_uFlags = v2 | 8;
}

//----- (005455C0) --------------------------------------------------------
void *__thiscall MainMenuWin::_vector_deleting_destructor_(MainMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MainMenuWin::_MainMenuWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005455F0) --------------------------------------------------------
void __thiscall MainMenuWin::_unnamed_type_m_kEffectManager_::_unnamed_type_m_kEffectManager_(MainMenuWin::<unnamed-type-m_kEffectManager> *this)
{
  MainMenuWin::<unnamed-type-m_kEffectManager> *v1; // esi@1

  v1 = this;
  CNSTimer_Interval::CNSTimer_Interval(&this->kTimerInterval);
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->kMarkCheck);
  NsEffect::NsEffect(&v1->kEffect);
  v1->spTransformController.m_pObject = 0;
  v1->spPosOffsetNode.m_pObject = 0;
}

//----- (00545660) --------------------------------------------------------
void __thiscall KarisForgeSlotInvWin::KarisForgeSlotInvWin(KarisForgeSlotInvWin *this)
{
  KarisForgeSlotInvWin *v1; // esi@1

  v1 = this;
  ForgeSlotInvWin::ForgeSlotInvWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KarisForgeSlotInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KarisForgeSlotInvWin::_vftable_;
  v1->baseclass_0.m_uiSenderType = -1;
  v1->baseclass_0.m_uiSenderInvIndex = -1;
  v1->baseclass_0.m_pkSender = 0;
  v1->baseclass_0.m_uiInvIndex = -1;
  v1->baseclass_0.m_uiInvType = 1;
  ItemIcon::SetItem(&v1->baseclass_0.baseclass_0, 0, 1);
  v1->baseclass_0.m_pkFrameWork = 0;
  v1->baseclass_0.m_bLock = 0;
}
// 99E2B8: using guessed type int (__stdcall *KarisForgeSlotInvWin___vftable_)(int uiFlags);
// 99E2D4: using guessed type int (__thiscall *KarisForgeSlotInvWin___vftable_)(void *p, char);

//----- (00545700) --------------------------------------------------------
void __thiscall KarisForgeSlotInvWin::_KarisForgeSlotInvWin(KarisForgeSlotInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KarisForgeSlotInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KarisForgeSlotInvWin::_vftable_;
  ForgeSlotInvWin::_ForgeSlotInvWin(&this->baseclass_0);
}
// 99E2B8: using guessed type int (__stdcall *KarisForgeSlotInvWin___vftable_)(int uiFlags);
// 99E2D4: using guessed type int (__thiscall *KarisForgeSlotInvWin___vftable_)(void *p, char);

//----- (00545720) --------------------------------------------------------
bool __thiscall KarisForgeSlotInvWin::Create(KarisForgeSlotInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  KarisForgeSlotInvWin *v6; // esi@1
  bool result; // al@1

  v6 = this;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  result = ItemIcon::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v6->baseclass_0.m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (00545770) --------------------------------------------------------
void __thiscall MakeKarisWin::OnShowWin(MakeKarisWin *this)
{
  this->m_eState = 0;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00545780) --------------------------------------------------------
KarisForgeSlotInvWin *__thiscall MakeKarisWin::GetInsertedOldSlot(MakeKarisWin *this, unsigned int _uiSlotNum)
{
  MakeKarisWin *v2; // esi@1
  ItemIcon *v3; // ecx@1
  KarisForgeSlotInvWin *result; // eax@4
  KarisForgeSlotInvWin *v5; // edi@6

  v2 = this;
  v3 = (ItemIcon *)this->m_apkSlotWin[0];
  if ( _uiSlotNum )
  {
    v5 = 0;
    if ( ItemIcon::GetItem(v3) )
      v5 = v2->m_apkSlotWin[0];
    result = v5;
  }
  else
  {
    if ( v3 && ItemIcon::GetItem(v3) )
      result = v2->m_apkSlotWin[0];
    else
      result = 0;
  }
  return result;
}

//----- (005457E0) --------------------------------------------------------
void __thiscall MakeKarisWin::OnHelpLink(MakeKarisWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "makekaris");
}

//----- (00545810) --------------------------------------------------------
void __thiscall MakeKarisWin::EnableSprSlot(MakeKarisWin *this, unsigned int uiSlotNum)
{
  MakeKarisWin *v2; // eax@1
  ItemIcon *v3; // ecx@2
  PgWinSpr *v4; // esi@3
  NiRefObjectVtbl *v5; // edi@4
  Item *v6; // eax@4

  v2 = this;
  if ( uiSlotNum < 1 )
  {
    v3 = (ItemIcon *)this->m_apkSlotWin[uiSlotNum];
    if ( v3 )
    {
      v4 = v2->m_apkSprSlotWin[uiSlotNum];
      if ( v4 )
      {
        v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v6 = ItemIcon::GetItem(v3);
        v5[60].__vecDelDtor((NiRefObject *)v4, v6 == 0);
      }
    }
  }
}

//----- (00545870) --------------------------------------------------------
void __thiscall KarisForgeSlotInvWin::OnFirstHitWin(KarisForgeSlotInvWin *this)
{
  KarisForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@5
  unsigned int v3; // ecx@6
  ItemIcon *v4; // ecx@7
  Item *v5; // eax@9
  ItemInfoWin *v6; // ecx@10

  v1 = this;
  if ( !this->baseclass_0.m_bLock )
  {
    if ( ItemIcon::GetItem(&this->baseclass_0.baseclass_0) )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    else
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2 = v1->baseclass_0.m_pkSender;
    if ( v2 )
    {
      v3 = v1->baseclass_0.m_uiSenderInvIndex;
      if ( v3 < 0xC0 )
      {
        v4 = (ItemIcon *)LODWORD(v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][v3 + 2]);
        if ( v4 )
        {
          if ( ItemIcon::GetItem(v4) )
          {
            v5 = ItemIcon::GetItem(&v1->baseclass_0.baseclass_0);
            if ( v5 )
            {
              v6 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
              if ( v6 )
              {
                ItemInfoWin::SetItemInfo(v6, v5);
                PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              }
            }
          }
        }
      }
    }
  }
}

//----- (00545900) --------------------------------------------------------
void __thiscall MakeKarisWin::MakeKarisWin(MakeKarisWin *this)
{
  MakeKarisWin *v1; // esi@1
  NiNode *v2; // ebx@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MakeKarisWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MakeKarisWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kMarkCheck);
  NsEffect::NsEffect(&v1->m_kEffect);
  v1->m_spEffect.m_pObject = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_apkSprSlotWin[0] = 0;
  v1->m_apkSlotWin[0] = 0;
  v2 = v1->m_spEffect.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spEffect.m_pObject = 0;
  }
  v1->m_pCurObject = 0;
  v1->m_fKarisSlotAlpha = 1.0;
  v1->m_pkKarisSlot = 0;
  v1->m_eState = 0;
  v1->m_pkKarisCount = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99E544: using guessed type int (__stdcall *MakeKarisWin___vftable_)(int uiFlags);
// 99E564: using guessed type int (__thiscall *MakeKarisWin___vftable_)(void *p, char);

//----- (00545A10) --------------------------------------------------------
void __thiscall MakeKarisWin::_MakeKarisWin(MakeKarisWin *this)
{
  MakeKarisWin *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MakeKarisWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MakeKarisWin::_vftable_;
  this->m_apkSprSlotWin[0] = 0;
  this->m_apkSlotWin[0] = 0;
  v2 = this->m_spEffect.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spEffect.m_pObject = 0;
  }
  v1->m_pCurObject = 0;
  v1->m_pkKarisSlot = 0;
  v1->m_pkKarisCount = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v3 = v1->m_spEffect.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  NsEffect::_NsEffect(&v1->m_kEffect);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99E544: using guessed type int (__stdcall *MakeKarisWin___vftable_)(int uiFlags);
// 99E564: using guessed type int (__thiscall *MakeKarisWin___vftable_)(void *p, char);

//----- (00545B20) --------------------------------------------------------
void __thiscall MakeKarisWin::OnSlotLClick(MakeKarisWin *this, unsigned int _uiSlotIndex)
{
  MakeKarisWin *v2; // esi@1
  KarisForgeSlotInvWin *v3; // edi@1
  Item *v4; // eax@2
  unsigned int v5; // ecx@3
  ItemIcon *v6; // ecx@4
  PgWinSpr *v7; // esi@5
  NiRefObjectVtbl *v8; // edi@6
  Item *v9; // eax@6

  v2 = this;
  v3 = this->m_apkSlotWin[_uiSlotIndex];
  if ( v3 )
  {
    v4 = ItemIcon::GetItem(&this->m_apkSlotWin[_uiSlotIndex]->baseclass_0.baseclass_0);
    if ( v4 )
    {
      v2->m_kDropContents.m_eSenderType = v3->baseclass_0.m_uiSenderType;
      v2->m_kDropContents.m_eType = 0;
      v5 = v3->baseclass_0.m_uiSenderInvIndex;
      v2->m_kDropContents.m_apvParam[0] = v4;
      v2->m_kDropContents.m_uiSenderIndex = v5;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
      v2->m_kDrop.m_pkSender = v3->baseclass_0.m_pkSender;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      ForgeSlotInvWin::ReSetSlot(&v3->baseclass_0);
      if ( _uiSlotIndex < 1 )
      {
        v6 = (ItemIcon *)v2->m_apkSlotWin[_uiSlotIndex];
        if ( v6 )
        {
          v7 = v2->m_apkSprSlotWin[_uiSlotIndex];
          if ( v7 )
          {
            v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v9 = ItemIcon::GetItem(v6);
            v8[60].__vecDelDtor((NiRefObject *)v7, v9 == 0);
          }
        }
      }
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (00545BE0) --------------------------------------------------------
void __thiscall MakeKarisWin::OnCancel(MakeKarisWin *this)
{
  GameFrameWork::OnShowMakeKarisWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 0);
}

//----- (00545BF0) --------------------------------------------------------
void __thiscall MakeKarisWin::ClearSlot(MakeKarisWin *this)
{
  MakeKarisWin *v1; // esi@1
  ItemIcon *v2; // ecx@1
  ForgeSlotInvWin *v3; // ecx@3
  ItemIcon *v4; // ecx@5
  PgWinSpr *v5; // esi@6
  NiRefObjectVtbl *v6; // edi@7
  Item *v7; // eax@7

  v1 = this;
  v2 = (ItemIcon *)this->m_apkSlotWin[0];
  if ( v2 )
  {
    if ( ItemIcon::GetItem(v2) )
    {
      v3 = (ForgeSlotInvWin *)v1->m_apkSlotWin[0];
      if ( v3 )
        ForgeSlotInvWin::ReSetSlot(v3);
    }
  }
  v4 = (ItemIcon *)v1->m_apkSlotWin[0];
  if ( v4 )
  {
    v5 = v1->m_apkSprSlotWin[0];
    if ( v5 )
    {
      v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = ItemIcon::GetItem(v4);
      v6[60].__vecDelDtor((NiRefObject *)v5, v7 == 0);
    }
  }
}

//----- (00545C50) --------------------------------------------------------
void __thiscall MakeKarisWin::StartEffect(MakeKarisWin *this, NiAVObject *_pEffect)
{
  MakeKarisWin *v2; // esi@1
  PgWinSpr *v3; // ecx@1
  double v4; // st7@2
  PgWinSpr *v5; // ecx@4

  v2 = this;
  this->m_pCurObject = _pEffect;
  NsEffect::SetEffectNode(&this->m_kEffect, _pEffect);
  NsEffect::Start(&v2->m_kEffect, Timer::ms_fCurTime);
  v2->m_kMarkCheck.m_fMarkTime = v2->m_kEffect.m_fMaxTime;
  CNSTimer_MarkCheck::ReSet(&v2->m_kMarkCheck, Timer::ms_fCurTime, OVER);
  _pEffect->m_kLocal.m_Translate.x = -130.0;
  _pEffect->m_kLocal.m_Translate.y = -135.0;
  _pEffect->m_kLocal.m_Translate.z = 50.0;
  ((void (__stdcall *)(NiAVObject *, signed int))v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    _pEffect,
    1);
  NiAVObject::UpdateProperties(&v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::UpdateEffects(&v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v3 = v2->m_pkKarisSlot;
  v2->m_eState = 1;
  ((void (__stdcall *)(signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  if ( v2->m_kEffect.m_fMaxTime < 1.0 )
    v4 = 0.0099999998;
  else
    v4 = v2->m_kEffect.m_fMaxTime / 100.0;
  v5 = v2->m_pkKarisSlot;
  v2->m_fKarisSlotAlpha = v4;
  ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00545D60) --------------------------------------------------------
void __thiscall MakeKarisWin::UpdateEffect(MakeKarisWin *this, float fTime)
{
  double v2; // st7@1
  MakeKarisWin *v3; // esi@1
  CNSTimer_MarkCheck::TIMERSTATE v4; // eax@1
  PgWinSpr *v5; // ecx@9
  NiRefObjectVtbl *v6; // edi@9
  float v7; // ST18_4@9
  PgWinSpr *v8; // ecx@11
  NiRefObjectVtbl *v9; // edi@11
  float v10; // ST18_4@11
  NiPointer<HazeAccumulator> thisa; // [sp+18h] [bp-4h]@6

  v2 = Timer::ms_fCurTime;
  v3 = this;
  v4 = CNSTimer_MarkCheck::Update(&this->m_kMarkCheck, Timer::ms_fCurTime);
  if ( v4 == -1 )
  {
    v8 = v3->m_pkKarisSlot;
    v9 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ((void (*)(void))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
    v10 = v2 + v3->m_fKarisSlotAlpha;
    v9[69].__vecDelDtor((NiRefObject *)v3->m_pkKarisSlot, LODWORD(v10));
  }
  else
  {
    if ( v4 )
    {
      if ( v4 == 1 && v3->m_eState && v3->m_pCurObject )
      {
        ((void (__stdcall *)(NiPointer<HazeAccumulator> *, NiAVObject *))v3->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
          &thisa,
          v3->m_pCurObject);
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>(&thisa);
        v3->m_pCurObject = 0;
        PgWin::SendMsg(&v3->baseclass_0.baseclass_0.baseclass_0, &v3->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
        ((void (*)(void))v3->m_pkKarisSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
        if ( v2 < 0.800000011920929 )
          ((void (__stdcall *)(_DWORD))v3->m_pkKarisSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.80000001);
      }
    }
    else
    {
      if ( (unsigned __int8)((int (*)(void))v3->m_pkKarisSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
      {
        v5 = v3->m_pkKarisSlot;
        v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        ((void (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
        v7 = v2 - (v3->m_fKarisSlotAlpha + v3->m_fKarisSlotAlpha);
        v6[69].__vecDelDtor((NiRefObject *)v3->m_pkKarisSlot, LODWORD(v7));
        ((void (*)(void))v3->m_pkKarisSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[70].__vecDelDtor)();
        if ( v7 <= 0.0 )
          ((void (__stdcall *)(_DWORD))v3->m_pkKarisSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00545EE0) --------------------------------------------------------
void __thiscall MakeKarisWin::ClearAll(MakeKarisWin *this)
{
  MakeKarisWin *v1; // esi@1

  v1 = this;
  MakeKarisWin::ClearSlot(this);
  v1->m_eState = 0;
}

//----- (00545F00) --------------------------------------------------------
void __thiscall MakeKarisWin::SendPacket(MakeKarisWin *this)
{
  KarisForgeSlotInvWin *v1; // eax@1

  v1 = this->m_apkSlotWin[0];
  if ( v1 )
    GameFrameWork::OnSendNCItemDisMantleReq(
      (GameFrameWork *)this->baseclass_0.m_pkFrameWork,
      LOBYTE(v1->baseclass_0.m_uiSenderInvIndex));
}

//----- (00545F20) --------------------------------------------------------
void __thiscall MakeKarisWin::OnClose(MakeKarisWin *this)
{
  MakeKarisWin *v1; // esi@1
  int v2; // edi@3
  int v3; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_eState )
  {
    ((void (__stdcall *)(int *, NiAVObject *))this->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &v3,
      this->m_pCurObject);
    if ( v3 )
    {
      v2 = v3;
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    ((void (__stdcall *)(_DWORD))v1->m_pkKarisSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  GameFrameWork::NcActEndOfTrade((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  MakeKarisWin::ClearSlot(v1);
  v1->m_eState = 0;
}

//----- (00545FB0) --------------------------------------------------------
void __thiscall MakeKarisWin::_ProcessMsg(MakeKarisWin *this, unsigned int Msg, unsigned int wParam, int lParam)
{
  KarisForgeSlotInvWin *v4; // eax@2

  if ( Msg == 13 )
  {
    v4 = this->m_apkSlotWin[0];
    if ( v4 )
      GameFrameWork::OnSendNCItemDisMantleReq(
        (GameFrameWork *)this->baseclass_0.m_pkFrameWork,
        LOBYTE(v4->baseclass_0.m_uiSenderInvIndex));
  }
}

//----- (00545FE0) --------------------------------------------------------
void __thiscall KarisForgeSlotInvWin::DoAction(KarisForgeSlotInvWin *this)
{
  KarisForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->baseclass_0.m_uiInvIndex);
}

//----- (00546010) --------------------------------------------------------
void __thiscall KarisForgeSlotInvWin::DoRAction(KarisForgeSlotInvWin *this)
{
  KarisForgeSlotInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->baseclass_0.m_uiInvIndex);
}

//----- (00546040) --------------------------------------------------------
void __thiscall MakeKarisWin::UpdateMeWin(MakeKarisWin *this, float fCurTime)
{
  MakeKarisWin *v2; // esi@1

  v2 = this;
  MakeKarisWin::UpdateEffect(this, fCurTime);
  if ( !ItemIcon::GetItem(&v2->m_apkSlotWin[0]->baseclass_0.baseclass_0) )
    ((void (__stdcall *)(_DWORD))v2->m_pkKarisCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99E154);
}

//----- (00546080) --------------------------------------------------------
bool __thiscall MakeKarisWin::CheckCanEnableUpgrade(MakeKarisWin *this, KarisForgeSlotInvWin *pSlot)
{
  bool result; // al@2
  Item *v3; // esi@3
  char v4; // al@5
  ItemDismantle *v5; // edi@5
  unsigned int v6; // edi@7

  if ( pSlot )
  {
    v3 = ItemIcon::GetItem(&pSlot->baseclass_0.baseclass_0);
    if ( v3 )
    {
      v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[9].__vecDelDtor)(v3);
      v5 = ItemDismantleTab::GetObjByGrade(v4);
      if ( !v5 )
        goto LABEL_14;
      switch ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3) )
      {
        case 8u:
          v6 = v5->Armor[v3->m_pkInfo->Grade + 4];
          break;
        case 6u:
          v6 = *(_DWORD *)((char *)v5 + 4 * v3->m_pkInfo->Grade - 2);
          break;
        case 7u:
          v6 = v5->Boot[v3->m_pkInfo->Grade + 4];
          break;
        case 5u:
          v6 = v5->Shield[v3->m_pkInfo->Grade + 4];
          break;
        case 4u:
          v6 = v5->Weapon[v3->m_pkInfo->Grade + 4];
          break;
        default:
          goto LABEL_14;
      }
      if ( (signed int)v6 > 0 )
        result = 1;
      else
LABEL_14:
        result = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00546150) --------------------------------------------------------
bool __thiscall MakeKarisWin::DropForgeSlot(MakeKarisWin *this, unsigned int uiReceiverInvIndex, PgWinDrop *pkDrop)
{
  KarisForgeSlotInvWin *v3; // edi@1
  bool result; // al@2
  void *v5; // ebx@3
  Item *v6; // esi@5
  char v7; // al@6
  ForgeSlotInvWin *v8; // eax@8
  int v9; // kr00_4@10
  NiRefObjectVtbl *v10; // esi@10
  char *v11; // eax@10
  char *v12; // eax@10
  MakeKarisWin *thisa; // [sp+4h] [bp-8h]@1

  v3 = this->m_apkSlotWin[uiReceiverInvIndex];
  thisa = this;
  if ( v3 )
  {
    v5 = pkDrop->m_pkContents;
    if ( v5 )
    {
      v6 = (Item *)*((_DWORD *)v5 + 5);
      if ( v6
        && (v7 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[9].__vecDelDtor)(*((_DWORD *)v5 + 5)),
            ItemDismantleTab::GetObjByGrade(v7)) )
      {
        v8 = (ForgeSlotInvWin *)MakeKarisWin::GetInsertedOldSlot(thisa, uiReceiverInvIndex);
        if ( v8 )
          ForgeSlotInvWin::ReSetSlot(v8);
        v3->baseclass_0.m_uiSenderType = *((_DWORD *)v5 + 2);
        v3->baseclass_0.m_uiSenderInvIndex = *((_DWORD *)v5 + 3);
        v3->baseclass_0.m_pkSender = pkDrop->m_pkSender;
        ItemIcon::SetItem(&v3->baseclass_0.baseclass_0, v6, 1);
        MakeKarisWin::EnableSprSlot(thisa, uiReceiverInvIndex);
        ForgeSlotInvWin::SetSenderInvSlotLock(&v3->baseclass_0, 1);
        v9 = (unsigned __int8)((int (__thiscall *)(Item *))v6->baseclass_0.vfptr[1].__vecDelDtor)(v6);
        v10 = thisa->m_pkKarisCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v11 = TextData::Get(0x403C7D83u);
        v12 = fs(v11);
        v10[118].__vecDelDtor((NiRefObject *)thisa->m_pkKarisCount, (unsigned int)v12);
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005462D0) --------------------------------------------------------
void __thiscall MakeKarisWin::StartEffectt(MakeKarisWin *this)
{
  MakeKarisWin *v1; // esi@1
  GameFrameWork *v2; // esi@8
  char *v3; // eax@8
  unsigned int v4; // [sp-4h] [bp-8h]@5

  v1 = this;
  if ( this->m_eState )
  {
    v4 = 913670526;
  }
  else
  {
    if ( ItemIcon::GetItem(&this->m_apkSlotWin[0]->baseclass_0.baseclass_0) )
    {
      if ( MakeKarisWin::CheckCanEnableUpgrade(v1, v1->m_apkSlotWin[0]) == 1 )
      {
        MakeKarisWin::StartEffect(v1, &v1->m_spEffect.m_pObject->baseclass_0);
        return;
      }
      v4 = -1479362343;
    }
    else
    {
      v4 = 940845358;
    }
  }
  v2 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
  v3 = TextData::Get(v4);
  GameFrameWork::AddSysMsg(v2, v3);
}

//----- (00546340) --------------------------------------------------------
void __thiscall MakeKarisWin::OnStart(MakeKarisWin *this)
{
  MakeKarisWin *v1; // esi@1
  char *v2; // eax@1
  MsgBox *v3; // edi@1
  PgFrameWork *v4; // eax@1
  int v5; // eax@2
  PgMsg::Frame kCancelMsg; // [sp+8h] [bp-2Ch]@1
  PgMsg::Frame kOkMsg; // [sp+1Ch] [bp-18h]@1
  unsigned int v8; // [sp+30h] [bp-4h]@1
  int v9; // [sp+34h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = TextData::Get(0x8FEFDECFu);
  v3 = MsgBox::Modal(MSGBOX_OKCANCEL, v2);
  kCancelMsg.m_uiFrameMsg = 272;
  kOkMsg.m_uiFramelParam = 272;
  kOkMsg.m_uiFrameMsg = 271;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  MsgBox::SetFrameWorkMsgOnClose(v3, v4, &kOkMsg, &kCancelMsg);
  if ( v1 )
    v5 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  else
    v5 = 0;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    v5);
}
// A85C00: using guessed type int __security_cookie;

//----- (005463D0) --------------------------------------------------------
bool __thiscall KarisForgeSlotInvWin::EatDropInstance(KarisForgeSlotInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  KarisForgeSlotInvWin *v4; // esi@1
  bool result; // al@2
  void *v6; // eax@4
  int v7; // eax@6
  PgWin *v8; // eax@9
  PgFrameWork *v9; // esi@10
  char *v10; // eax@10

  v4 = this;
  if ( this->baseclass_0.m_bLock )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( !*pkDrop )
    return 0;
  v6 = (*pkDrop)->m_pkContents;
  if ( *((_DWORD *)v6 + 2)
    || *((_DWORD *)v6 + 4)
    || (v7 = *((_DWORD *)v6 + 5)) == 0
    || this->baseclass_0.m_uiInvType != 6 )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( *(_BYTE *)(*(_DWORD *)(v7 + 112) + 240) )
  {
    v8 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    result = MakeKarisWin::DropForgeSlot((MakeKarisWin *)v8, v4->baseclass_0.m_uiInvIndex, *pkDrop);
  }
  else
  {
    v9 = this->baseclass_0.m_pkFrameWork;
    v10 = TextData::Get(0xA7D2B8D9u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v9, v10);
    result = 0;
  }
  return result;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (00546480) --------------------------------------------------------
void __thiscall MakeKarisWin::OnCommand(MakeKarisWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@5

  switch ( wParam )
  {
    case 0xCu:
      MakeKarisWin::OnStart(this);
      break;
    case 0xFu:
      GameFrameWork::OnShowMakeKarisWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 0);
      break;
    case 0x10u:
      MakeKarisWin::OnSlotLClick(this, lParam);
      break;
    case 0x11u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "makekaris");
      break;
    default:
      return;
  }
}

//----- (00546500) --------------------------------------------------------
KarisForgeSlotInvWin *__cdecl KarisForgeSlotInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  KarisForgeSlotInvWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x1DCu);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    KarisForgeSlotInvWin::KarisForgeSlotInvWin((KarisForgeSlotInvWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *, PgFrameWork *))(*(_DWORD *)v7 + 616))(
                          v7,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (KarisForgeSlotInvWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (00546640) --------------------------------------------------------
MakeKarisWin *__cdecl MakeKarisWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MakeKarisWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x228u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MakeKarisWin::MakeKarisWin((MakeKarisWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MakeKarisWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00546770) --------------------------------------------------------
bool __thiscall MakeKarisWin::Create(MakeKarisWin *this, PgFrameWork *pkFrameWork)
{
  MakeKarisWin *v2; // esi@1
  char *v3; // eax@3
  NiNode *v4; // eax@3
  NiNode *v5; // edi@3
  NiNode *v6; // ebx@3
  NiTexturePalette *v7; // edi@10
  char *v8; // eax@12
  PgSprData *v9; // eax@13
  NiNode *v10; // esi@14
  bool result; // al@19
  PgFont *v12; // eax@21
  PgWinText *v13; // edi@21
  NiRefObjectVtbl *v14; // ebx@21
  char *v15; // eax@21
  PgSprData *v16; // eax@21
  PgSprData *v17; // eax@21
  PgSprData *v18; // eax@21
  PgWinSpr *v19; // eax@21
  PgSprData *v20; // eax@21
  PgSprData *v21; // eax@21
  PgWinSpr *v22; // eax@21
  unsigned int v23; // edi@21
  int v24; // ebx@22
  PgSprData *v25; // eax@22
  PgWinSpr *v26; // eax@22
  char *v27; // eax@22
  KarisForgeSlotInvWin *v28; // eax@22
  char *v29; // eax@23
  PgSprData *v30; // eax@28
  PgFont *v31; // eax@28
  PgWinText *v32; // edi@28
  NiRefObjectVtbl *v33; // ebx@28
  char *v34; // eax@28
  NiNode *v35; // esi@29
  PgSprData *v36; // eax@33
  PgFont *v37; // eax@33
  PgWinText *v38; // eax@33
  PgSprData *v39; // edi@33
  NiSourceTexture *v40; // edi@33
  PgSprData *v41; // edi@34
  PgSprData *v42; // edi@35
  PgSprData::PgHitTester *v43; // eax@35
  unsigned int v44; // edi@35
  unsigned int v45; // ebx@35
  PgFont *v46; // eax@35
  PgWinText *v47; // edi@35
  NiRefObjectVtbl *v48; // ebx@35
  char *v49; // eax@35
  PgSprData *v50; // edi@35
  NiPointer<PgSprData::PgHitTester> *v51; // edx@35
  unsigned int v52; // edi@35
  unsigned int v53; // ebx@35
  PgFont *v54; // eax@35
  PgWinText *v55; // edi@35
  NiRefObjectVtbl *v56; // ebx@35
  char *v57; // eax@35
  NiNode *v58; // esi@36
  volatile LONG *v59; // [sp+70h] [bp-68h]@15
  unsigned int v60; // [sp+74h] [bp-64h]@1
  unsigned int uiHeight; // [sp+88h] [bp-50h]@1
  unsigned int uiWidth; // [sp+8Ch] [bp-4Ch]@1
  int iOffY; // [sp+90h] [bp-48h]@1
  int iOffX; // [sp+94h] [bp-44h]@1
  NiPointer<NiNode> spNode; // [sp+98h] [bp-40h]@1
  int iTop; // [sp+9Ch] [bp-3Ch]@1
  int iLeft; // [sp+A0h] [bp-38h]@1
  char acShapeName[33]; // [sp+A4h] [bp-34h]@22
  unsigned int v69; // [sp+C8h] [bp-10h]@1
  int v70; // [sp+D4h] [bp-4h]@1
  int v71; // [sp+D8h] [bp+0h]@1

  v69 = (unsigned int)&v71 ^ __security_cookie;
  v60 = (unsigned int)&v71 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v70 = 0;
  uiWidth = 0;
  uiHeight = 0;
  iTop = 0;
  iLeft = 0;
  iOffX = 0;
  iOffY = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acEffect, "Karis_Effect01.nif");
  v4 = Ns_LoadNifFile(v3, 0);
  v5 = v2->m_spEffect.m_pObject;
  v6 = v4;
  if ( v5 != v4 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v2->m_spEffect.m_pObject = v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\makekaris.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iOffX, &iOffY, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "MakeKarisWin", 0)
    || !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v10 = spNode.m_pObject;
    v70 = -1;
    if ( spNode.m_pObject )
    {
      v59 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_16;
    }
    return 0;
  }
  v12 = Font::Get(MAIN_MENU);
  v13 = PgWinText::CreateWin(
          iLeft - iOffX,
          iTop - iOffY,
          uiWidth,
          uiHeight,
          v12,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v13,
    5u);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v13,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v15 = TextData::Get(0x3F367F81u);
  v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ImageBack01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
  v19 = PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForgeSlot02", &iLeft, &iTop, 0);
  v22 = PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkKarisSlot = v22;
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkKarisSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v23 = 0;
  do
  {
    v24 = v23 + 1;
    *(_DWORD *)acShapeName = 0;
    *(_DWORD *)&acShapeName[4] = 0;
    *(_DWORD *)&acShapeName[8] = 0;
    *(_DWORD *)&acShapeName[12] = 0;
    *(_DWORD *)&acShapeName[16] = 0;
    *(_DWORD *)&acShapeName[20] = 0;
    *(_DWORD *)&acShapeName[24] = 0;
    *(_DWORD *)&acShapeName[28] = 0;
    acShapeName[32] = 0;
    sprintf(acShapeName, "ForgeSlot%02d");
    v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &iLeft, &iTop, 0);
    v26 = PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkSprSlotWin[v23] = v26;
    v26->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v27 = TextData2::Get(0x5B4D2295u);
    PgWin::SetToolTipWinText(&v2->m_apkSprSlotWin[v23]->baseclass_0, v27);
    ((void (__stdcall *)(signed int))v2->m_apkSprSlotWin[v23]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v28 = KarisForgeSlotInvWin::CreateWin(
            iLeft - iOffX,
            iTop - iOffY,
            v23,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            pkFrameWork);
    v2->m_apkSlotWin[v23] = v28;
    v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v28,
      1u);
    v2->m_apkSlotWin[v23]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
    IconWin::ShowFocus(&v2->m_apkSlotWin[v23]->baseclass_0.baseclass_0.baseclass_0, 1);
    ((void (__stdcall *)(signed int))v2->m_apkSlotWin[v23]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    if ( !v23 )
    {
      ((void (__stdcall *)(signed int))v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(16);
      ForgeSlotInvWin::SetSlotType(&v2->m_apkSlotWin[0]->baseclass_0, 6u);
      v29 = TextData2::Get(0x8DF3F602u);
      PgWin::SetToolTipWinText(
        &v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v29);
      v2->m_apkSlotWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    }
    ItemIcon::SetItem(&v2->m_apkSlotWin[v23++]->baseclass_0.baseclass_0, 0, 1);
  }
  while ( v24 < 1 );
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ForgeText01", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v10 = spNode.m_pObject;
    v70 = -1;
    if ( spNode.m_pObject )
    {
      v59 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_16:
      if ( !InterlockedDecrement(v59) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
      return 0;
    }
    return 0;
  }
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForgeText01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v31 = Font::Get(MAIN_MENU);
  v32 = PgWinText::CreateWin(
          iLeft - iOffX,
          iTop - iOffY,
          uiWidth,
          uiHeight,
          v31,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v32,
    5u);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v32,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = TextData::Get(0x847C8683u);
  v33[118].__vecDelDtor((NiRefObject *)v32, (unsigned int)v34);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v32,
    0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ForgeText", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForgeText", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v37 = Font::Get(MAIN_MENU);
    v38 = PgWinText::CreateWin(
            iLeft - iOffX,
            iTop - iOffY,
            uiWidth,
            uiHeight,
            v37,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkKarisCount = v38;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v38,
      5,
      v60);
    ((void (__stdcall *)(__int64 *))v2->m_pkKarisCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkKarisCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99E155);
    ((void (__stdcall *)(_DWORD))v2->m_pkKarisCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(iLeft - iOffX, iTop - iOffY, v39, &v2->baseclass_0.baseclass_0.baseclass_0);
    v40 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v40);
      PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v41, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, 0, 0);
    }
    v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &iLeft, &iTop, 0);
    PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "OkClick");
    PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "OkOver");
    PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    v43 = v42->m_akHitTester.m_pBase->m_pObject;
    v44 = v43->m_uiHeight;
    v45 = v43->m_uiWidth;
    v46 = Font::Get(MAIN_MENU);
    v47 = PgWinText::CreateWin(
            iLeft - iOffX,
            iTop - iOffY,
            v45,
            v44,
            v46,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    ((void (__thiscall *)(PgWinText *))v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v47);
    v48 = v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v49 = TextData::Get(0x6D874F7Au);
    v48[118].__vecDelDtor((NiRefObject *)v47, (unsigned int)v49);
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v47,
      0);
    v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &iLeft, &iTop, 0);
    PgSprData::Add(v50, &spNode.m_pObject->baseclass_0, "CancelClick");
    PgSprData::Add(v50, &spNode.m_pObject->baseclass_0, "CancelOver");
    PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v50, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
    v51 = v50->m_akHitTester.m_pBase;
    v52 = v51->m_pObject->m_uiHeight;
    v53 = v51->m_pObject->m_uiWidth;
    v54 = Font::Get(MAIN_MENU);
    v55 = PgWinText::CreateWin(
            iLeft - iOffX,
            iTop - iOffY,
            v53,
            v52,
            v54,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v55,
      5u);
    v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v57 = TextData::Get(0x88A297E1u);
    v56[118].__vecDelDtor((NiRefObject *)v55, (unsigned int)v57);
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v55,
      0);
    PgWin::InitPos(
      &v2->baseclass_0.baseclass_0.baseclass_0,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.30000001,
      0.5);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v70 = -1;
    if ( spNode.m_pObject )
    {
      v58 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v58 )
          v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v58, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v35 = spNode.m_pObject;
    v70 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v35 )
      return 0;
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005470E0) --------------------------------------------------------
void *__thiscall KarisForgeSlotInvWin::_vector_deleting_destructor_(KarisForgeSlotInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KarisForgeSlotInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KarisForgeSlotInvWin::_vftable_;
  ForgeSlotInvWin::_ForgeSlotInvWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99E2B8: using guessed type int (__stdcall *KarisForgeSlotInvWin___vftable_)(int uiFlags);
// 99E2D4: using guessed type int (__thiscall *KarisForgeSlotInvWin___vftable_)(void *p, char);

//----- (00547120) --------------------------------------------------------
ItemDismantle *__cdecl ItemDismantleTab::GetObjByGrade(char byGrade)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  ItemDismantle *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( *((_BYTE *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable + 4),
                         v3)
            + 1) != byGrade )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (ItemDismantle *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ItemDismantle_ItemDismantleTab>::ms_pkTable + 4),
                                v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97E50: using guessed type int ITableBase_ItemDismantle_ItemDismantleTab___ms_pkTable;

//----- (00547180) --------------------------------------------------------
void *__thiscall MakeKarisWin::_vector_deleting_destructor_(MakeKarisWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MakeKarisWin::_MakeKarisWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005471B0) --------------------------------------------------------
void __thiscall MapLinkGateWin::OnWinClose(MapLinkGateWin *this)
{
  this->m_bInputEnable = 0;
  GameFrameWork::CloseMapLinkGateWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005471D0) --------------------------------------------------------
void __thiscall MapLinkGateWin::OnClose(MapLinkGateWin *this)
{
  MapLinkGateWin *v1; // esi@1
  PgFrameWork *v2; // ecx@1

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  v1->m_bInputEnable = 0;
  GameFrameWork::NcActEndOfTrade((GameFrameWork *)v2);
  v1->m_uiMapLinkPage = 0;
}

//----- (00547200) --------------------------------------------------------
void __thiscall MapLinkGateWin::NoLinkMapData(MapLinkGateWin *this, int nCurrentDataCnt)
{
  char *v2; // esi@2
  char *v3; // edi@5
  NiImageConverter *v4; // eax@6
  NiPixelData *v5; // eax@6
  NiSourceTexture *v6; // eax@7
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-Ch]@7
  int nCurrentDataCnta; // [sp+14h] [bp+8h]@2

  if ( nCurrentDataCnt < 3 )
  {
    v2 = (char *)&this->m_apkBtns[nCurrentDataCnt];
    nCurrentDataCnta = 3 - nCurrentDataCnt;
    do
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v3 = fs("%s\\TownPortal\\NoneMap.dds");
      if ( v3 )
      {
        v4 = NiImageConverter::GetImageConverter();
        v5 = (NiPixelData *)((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(
                              v4,
                              v3,
                              0);
        if ( v5 )
        {
          kPrefs.m_ePixelLayout = 6;
          kPrefs.m_eAlphaFmt = 3;
          kPrefs.m_eMipMapped = 0;
          v6 = NiSourceTexture::Create(v5, &kPrefs);
          if ( v6 )
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 452))(v6);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 240))(0);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(1);
          }
        }
      }
      v2 += 4;
      --nCurrentDataCnta;
    }
    while ( nCurrentDataCnta );
  }
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005472D0) --------------------------------------------------------
void __thiscall MapLinkGateWin::MapLinkGateWin(MapLinkGateWin *this)
{
  MapLinkGateWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MapLinkGateWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MapLinkGateWin::_vftable_;
  v1->m_spMtrlProp.m_pObject = 0;
  v1->m_apkBtns[0] = 0;
  v1->m_apkTexts[0] = 0;
  v1->m_apkLevelTexts[0] = 0;
  v1->m_apkBtns[1] = 0;
  v1->m_apkTexts[1] = 0;
  v1->m_apkLevelTexts[1] = 0;
  v1->m_apkBtns[2] = 0;
  v1->m_apkTexts[2] = 0;
  v1->m_apkLevelTexts[2] = 0;
  v1->m_kAlphaControl.fTimeLeftToAppear = 1.0;
  v1->m_bInputEnable = 0;
  v1->m_pkCloseBtn = 0;
  v1->m_kAlphaControl.fAlphaValue = 0.0;
  v1->m_uiMapLinkPage = 0;
  v1->m_uiMaxPage = 0;
}
// 99E978: using guessed type int (__stdcall *MapLinkGateWin___vftable_)(int uiFlags);
// 99E994: using guessed type int (__thiscall *MapLinkGateWin___vftable_)(void *p, char);

//----- (00547360) --------------------------------------------------------
void __thiscall MapLinkGateWin::_MapLinkGateWin(MapLinkGateWin *this)
{
  PgWinFrame *v1; // esi@1
  NiMaterialProperty *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MapLinkGateWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MapLinkGateWin::_vftable_;
  v2 = this->m_spMtrlProp.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 99E978: using guessed type int (__stdcall *MapLinkGateWin___vftable_)(int uiFlags);
// 99E994: using guessed type int (__thiscall *MapLinkGateWin___vftable_)(void *p, char);

//----- (005473F0) --------------------------------------------------------
void __thiscall MapLinkGateWin::UpdateMeWin(MapLinkGateWin *this, float fCurTime)
{
  MapLinkGateWin *v2; // ebx@1
  float v3; // ST10_4@3
  NiMaterialProperty *v4; // eax@7
  NiObjectNET **v5; // esi@9
  NiExtraData *v6; // eax@11
  int v7; // edi@12
  PgWinBut *v8; // ecx@17
  int v9; // [sp-Ch] [bp-14h]@13
  signed int fSin; // [sp+4h] [bp-4h]@9

  v2 = this;
  if ( !unk_B7040C )
  {
    if ( this->m_kAlphaControl.fAlphaValue >= 1.0 )
    {
      if ( !this->m_bInputEnable )
      {
        v5 = (NiObjectNET **)this->m_apkBtns;
        fSin = 3;
        do
        {
          if ( *v5 )
          {
            v6 = NiObjectNET::GetExtraData(*v5, "MinLV");
            if ( v6 )
            {
              v7 = atoi((const char *)v6[1].baseclass_0.baseclass_0.vfptr);
              v9 = User::Lv(&g_kUser) >= v7;
              ((void (__stdcall *)(int))(*v5)->baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v9);
            }
          }
          ++v5;
          --fSin;
        }
        while ( fSin );
        v8 = v2->m_pkCloseBtn;
        v2->m_bInputEnable = 1;
        ((void (__stdcall *)(signed int))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      }
    }
    else
    {
      v3 = this->m_kAlphaControl.fAlphaValue + Timer::ms_fDeltaTime;
      this->m_kAlphaControl.fAlphaValue = v3;
      if ( v3 > 1.0 )
        this->m_kAlphaControl.fAlphaValue = 1.0;
      if ( this->m_kAlphaControl.fAlphaValue < 1.0 )
        JUMPOUT(*(int *)loc_547460);
      v4 = this->m_spMtrlProp.m_pObject;
      ++v4->m_uiRevID;
      v4->m_fAlpha = 1.0;
    }
  }
}
// 547460: using guessed type int __stdcall(float fCurTime);
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (00547510) --------------------------------------------------------
void __thiscall MapLinkGateWin::ShowLinkGate(MapLinkGateWin *this)
{
  MapLinkGateWin *v1; // esi@1
  char *v2; // ebx@1
  signed int v3; // edi@1
  Name3 *v4; // eax@3
  int v5; // ebx@4
  NiObjectNET **v6; // esi@4
  void *v7; // eax@6
  void *v8; // eax@7
  void *v9; // edi@10
  NiImageConverter *v10; // eax@11
  NiPixelData *v11; // eax@11
  int v12; // edi@13
  char *v13; // eax@13
  char *v14; // eax@13
  int v15; // edi@13
  void *v16; // edi@14
  unsigned int v17; // eax@14
  CDataReader *v18; // ecx@14
  char *v19; // edi@17
  NiImageConverter *v20; // eax@18
  int v21; // eax@18
  NiTexture::FormatPrefs *v22; // ecx@19
  char *v23; // edi@22
  NiImageConverter *v24; // eax@23
  NiSourceTexture *v25; // eax@25
  void *v26; // eax@27
  NiStringExtraData *v27; // edi@27
  void *v28; // eax@27
  NiObjectNET *v29; // ecx@29
  unsigned int v30; // edi@29
  char *v31; // eax@30
  NiObjectNET *v32; // ecx@32
  unsigned int v33; // eax@32
  int v34; // edx@32
  char *v35; // eax@33
  char *v36; // eax@33
  PgWinBut *v37; // ecx@42
  unsigned int v38; // [sp-10h] [bp-78h]@1
  Name3 result; // [sp+0h] [bp-68h]@3
  NiTexture::FormatPrefs kPrefs; // [sp+Ch] [bp-5Ch]@12
  int v41; // [sp+18h] [bp-50h]@24
  int v42; // [sp+1Ch] [bp-4Ch]@24
  int v43; // [sp+20h] [bp-48h]@24
  CDataReader thisa; // [sp+24h] [bp-44h]@1
  int v45; // [sp+64h] [bp-4h]@27
  int v46; // [sp+68h] [bp+0h]@1

  thisa.m_pHead = (CDataReader::HEAD *)((unsigned int)&v46 ^ __security_cookie);
  v38 = (unsigned int)&v46 ^ __security_cookie;
  v1 = this;
  v2 = (char *)this->m_apkBtns;
  thisa.m_nFileCheckSum = (unsigned int)this;
  *(_DWORD *)&thisa.m_sFileMD5.n8_name[4] = (char *)this + 348;
  v3 = 3;
  do
  {
    NiObjectNET::RemoveExtraData(*(NiObjectNET **)v2, "action");
    NiObjectNET::RemoveExtraData(*(NiObjectNET **)v2, "MinLV");
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 3) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 6) + 256))(0);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = World::GetMapName(&g_kWorld, &result);
  thisa.m_nDataArraySize = (unsigned int)MapInfoTab::GetByMapName(v4);
  *(_QWORD *)&thisa.m_sFileMD5.n8_name[12] = 0i64;
  if ( ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() )
  {
    v5 = (int)v1->m_apkLevelTexts;
    *(_DWORD *)&thisa.m_sFileMD5.n8_name[8] = (char *)v1 + 360;
    v6 = *(NiObjectNET ***)&thisa.m_sFileMD5.n8_name[4];
    while ( 1 )
    {
      if ( *(_DWORD *)&thisa.m_sFileMD5.n8_name[12] >= 3 )
      {
LABEL_41:
        v1 = (MapLinkGateWin *)thisa.m_nFileCheckSum;
        goto LABEL_42;
      }
      v7 = CDataReader::GetRecord(
             (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
             v3);
      if ( *(_DWORD *)(thisa.m_nFileCheckSum + 400) == *((_BYTE *)v7 + 2) )
        break;
LABEL_37:
      ++v3;
      *(_DWORD *)&thisa.m_sFileMD5.n8_name[16] = v3;
      if ( v3 >= ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() )
      {
        if ( *(_DWORD *)&thisa.m_sFileMD5.n8_name[12] < 3 )
        {
          v1 = (MapLinkGateWin *)thisa.m_nFileCheckSum;
          goto LABEL_40;
        }
        goto LABEL_41;
      }
    }
    v8 = CDataReader::GetRecord(
           (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
           v3);
    *(_QWORD *)&thisa.m_sFileMD5.n8_name[24] = 0i64;
    *(_DWORD *)&thisa.m_sFileMD5.n8_name[20] = 0;
    strncpy(&thisa.m_sFileMD5.n8_name[20], (char *)v8 + 3, 0xCu);
    *(_DWORD *)&thisa.m_sFileMD5.n8_name[4] = (char *)MapInfoTab::GetByMapName((Name3 *)&thisa.m_sFileMD5.n8_name[20])
                                            + 14;
    if ( !strcmp((const char *)(thisa.m_nDataArraySize + 14), *(const char **)&thisa.m_sFileMD5.n8_name[4]) )
    {
      CDataReader::GetRecord(
        (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
        *(unsigned int *)&thisa.m_sFileMD5.n8_name[16]);
      if ( !Folder::m_bInit )
        Folder::Init();
      v9 = fs("%s\\TownPortal\\%s_disable.DDS");
      if ( v9 )
      {
        v10 = NiImageConverter::GetImageConverter();
        v11 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, void *, _DWORD))v10->baseclass_0.vfptr[2].__vecDelDtor)(
                               v10,
                               v9,
                               0);
        v9 = 0;
        if ( v11 )
        {
          kPrefs.m_ePixelLayout = 6;
          kPrefs.m_eAlphaFmt = 3;
          kPrefs.m_eMipMapped = 0;
          v9 = NiSourceTexture::Create(v11, &kPrefs);
        }
      }
      (*(void (__stdcall **)(signed int))(*(_DWORD *)**(_DWORD **)&thisa.m_sFileMD5.n8_name[8] + 256))(1);
      ((void (__stdcall *)(void *))(*v6)->baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v9);
      ((void (__stdcall *)(_DWORD))(*v6)->baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(signed int))(*v6)->baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v12 = **(_DWORD **)v5;
      v13 = TextData3::Get(0x7CA1DBE4u);
      v14 = fs(v13);
      (*(void (__thiscall **)(_DWORD, char *))(v12 + 472))(*(_DWORD *)v5, v14);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v5 + 256))(1);
      (*(void (__stdcall **)(int *))(**(_DWORD **)v5 + 468))(&Color::m_kDxBlueColor);
      v15 = *(_DWORD *)&thisa.m_sFileMD5.n8_name[8];
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)**(_DWORD **)&thisa.m_sFileMD5.n8_name[8] + 472))(*(_DWORD *)&thisa.m_sFileMD5.n8_name[4]);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v15 + 256))(1);
      *(_DWORD *)&thisa.m_sFileMD5.n8_name[8] = v15 + 4;
LABEL_36:
      ++*(_DWORD *)&thisa.m_sFileMD5.n8_name[12];
      v3 = *(_DWORD *)&thisa.m_sFileMD5.n8_name[16];
      ++v6;
      v5 += 4;
      goto LABEL_37;
    }
    v16 = CDataReader::GetRecord(
            (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
            *(unsigned int *)&thisa.m_sFileMD5.n8_name[16]);
    v17 = User::Lv(&g_kUser);
    v18 = (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    if ( v17 >= *((_BYTE *)v16 + 1) )
    {
      CDataReader::GetRecord(v18, *(unsigned int *)&thisa.m_sFileMD5.n8_name[16]);
      if ( !Folder::m_bInit )
        Folder::Init();
      v23 = fs("%s\\TownPortal\\%s.DDS");
      if ( !v23
        || (v24 = NiImageConverter::GetImageConverter(),
            (v21 = ((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v24->baseclass_0.vfptr[2].__vecDelDtor)(
                     v24,
                     v23,
                     0)) == 0) )
        goto LABEL_27;
      v41 = 6;
      v42 = 3;
      v43 = 0;
      v22 = (NiTexture::FormatPrefs *)&v41;
    }
    else
    {
      CDataReader::GetRecord(v18, *(unsigned int *)&thisa.m_sFileMD5.n8_name[16]);
      if ( !Folder::m_bInit )
        Folder::Init();
      v19 = fs("%s\\TownPortal\\%s_disable.DDS");
      if ( !v19
        || (v20 = NiImageConverter::GetImageConverter(),
            (v21 = ((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v20->baseclass_0.vfptr[2].__vecDelDtor)(
                     v20,
                     v19,
                     0)) == 0) )
        goto LABEL_27;
      thisa.vfptr = (CDataReaderVtbl *)6;
      thisa.m_nFileSize = 3;
      thisa.m_nBFSize = 0;
      v22 = (NiTexture::FormatPrefs *)&thisa;
    }
    v25 = NiSourceTexture::Create((NiPixelData *)v21, v22);
    if ( v25 )
      ((void (__stdcall *)(NiSourceTexture *))(*v6)->baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v25);
LABEL_27:
    NiObjectNET::RemoveExtraData(*v6, "action");
    v26 = operator new(0x10u);
    v27 = (NiStringExtraData *)v26;
    *(_DWORD *)&thisa.m_sFileMD5.n8_name[0] = v26;
    v28 = 0;
    v45 = 0;
    if ( *(_DWORD *)&thisa.m_sFileMD5.n8_name[0] )
    {
      v28 = CDataReader::GetRecord(
              (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
              *(unsigned int *)&thisa.m_sFileMD5.n8_name[16]);
      NiStringExtraData::NiStringExtraData(v27, (const char *)v28 + 3);
    }
    v29 = *v6;
    v45 = -1;
    NiObjectNET::AddExtraData(v29, "action", (NiExtraData *)v28);
    NiObjectNET::RemoveExtraData(*v6, "MinLV");
    v30 = *((_BYTE *)CDataReader::GetRecord(
                       (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                       *(unsigned int *)&thisa.m_sFileMD5.n8_name[16])
          + 1);
    *(_DWORD *)&thisa.m_sFileMD5.n8_name[0] = operator new(0x10u);
    v45 = 1;
    if ( *(_DWORD *)&thisa.m_sFileMD5.n8_name[0] )
    {
      v31 = fs("%d");
      NiStringExtraData::NiStringExtraData(*(NiStringExtraData **)&thisa.m_sFileMD5.n8_name[0], v31);
    }
    else
    {
      v31 = 0;
    }
    v32 = *v6;
    v45 = -1;
    NiObjectNET::AddExtraData(v32, "MinLV", (NiExtraData *)v31);
    ((void (__stdcall *)(signed int, unsigned int))(*v6)->baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1, v38);
    ((void (__stdcall *)(_DWORD))(*v6)->baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)**(_DWORD **)&thisa.m_sFileMD5.n8_name[8] + 472))(*(_DWORD *)&thisa.m_sFileMD5.n8_name[4]);
    (*(void (__stdcall **)(signed int))(*(_DWORD *)**(_DWORD **)&thisa.m_sFileMD5.n8_name[8] + 256))(1);
    v33 = User::Lv(&g_kUser);
    v34 = **(_DWORD **)v5;
    if ( v33 >= v30 )
    {
      v38 = 0;
    }
    else
    {
      (*(void (__stdcall **)(D3DXCOLOR *))(v34 + 468))(&Color::m_kDxRedColor);
      *(_DWORD *)&thisa.m_sFileMD5.n8_name[0] = **(_DWORD **)v5 + 472;
      v35 = TextData2::Get(0xCA2B4841u);
      v36 = fs(v35);
      ((void (__thiscall *)(_DWORD, char *))**(_DWORD **)&thisa.m_sFileMD5.n8_name[0])(*(_DWORD *)v5, v36);
      v34 = **(_DWORD **)v5;
      v38 = 1;
    }
    (*(void (**)(void))(v34 + 256))();
    *(_DWORD *)&thisa.m_sFileMD5.n8_name[8] += 4;
    goto LABEL_36;
  }
LABEL_40:
  MapLinkGateWin::NoLinkMapData(v1, *(int *)&thisa.m_sFileMD5.n8_name[12]);
LABEL_42:
  v37 = v1->m_pkCloseBtn;
  v1->m_bInputEnable = 0;
  ((void (__cdecl *)(_DWORD))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
}
// A745F0: using guessed type int Color__m_kDxBlueColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00547A80) --------------------------------------------------------
bool __thiscall MapLinkGateWin::Create(MapLinkGateWin *this, PgFrameWork *pkFrameWork)
{
  MapLinkGateWin *v2; // edi@1
  int v3; // ebx@1
  NiTexturePalette *v4; // esi@1
  char *v5; // eax@3
  void *v6; // eax@4
  int v7; // eax@5
  NiMaterialProperty *v8; // esi@6
  NiMaterialProperty *v9; // eax@13
  NiMaterialProperty *v10; // eax@13
  int v11; // edx@13
  NiMaterialProperty *v12; // eax@13
  int v13; // ecx@13
  NiMaterialProperty *v14; // eax@13
  PgSprData *v15; // eax@13
  NiNode *v16; // esi@14
  PgSprData *v18; // esi@19
  NiAVObject *v19; // eax@19
  NiProperty *v20; // ST3C_4@19
  int v21; // esi@19
  NiNode *v22; // ebx@20
  char *v23; // eax@20
  PgSprData *v24; // ebx@20
  char *v25; // eax@20
  char *v26; // eax@20
  PgWinBut *v27; // eax@20
  NiMaterialProperty *v28; // ebx@20
  D3DXCOLOR v29; // ST2C_16@25
  PgWinText *v30; // eax@25
  NiRefObjectVtbl *v31; // ebx@25
  PgFont *v32; // eax@25
  int v33; // ebx@25
  unsigned int v34; // eax@25
  NiRefObject *v35; // ecx@25
  int v36; // eax@25
  D3DXCOLOR v37; // ST2C_16@25
  PgWinText *v38; // eax@25
  NiRefObjectVtbl *v39; // ebx@25
  PgFont *v40; // eax@25
  int v41; // ecx@25
  int v42; // ebx@25
  int v43; // eax@25
  D3DXCOLOR v44; // ST2C_16@26
  char *v45; // eax@26
  PgWinText *v46; // esi@26
  NiRefObjectVtbl *v47; // ebx@26
  PgFont *v48; // eax@26
  D3DXCOLOR v49; // ST2C_16@26
  char *v50; // eax@26
  PgWinText *v51; // esi@26
  NiRefObjectVtbl *v52; // ebx@26
  PgFont *v53; // eax@26
  PgSprData *v54; // esi@26
  PgWinBut *v55; // eax@26
  PgSprData *v56; // esi@26
  PgWinBut *v57; // eax@26
  signed int v58; // ebx@26
  unsigned int v59; // esi@26
  NiNode *v60; // esi@32
  NiNode *v61; // esi@37
  volatile LONG *v62; // [sp+3Ch] [bp-4Ch]@38
  UIUtil ui; // [sp+50h] [bp-38h]@19
  unsigned int v64; // [sp+64h] [bp-24h]@4
  NiAVObject *element; // [sp+68h] [bp-20h]@20
  int v66; // [sp+6Ch] [bp-1Ch]@19
  int uiLeft; // [sp+70h] [bp-18h]@13
  int uiTop; // [sp+74h] [bp-14h]@13
  NiPointer<NiNode> spNode; // [sp+78h] [bp-10h]@1
  int v70; // [sp+84h] [bp-4h]@1
  signed int pkFrameWorka; // [sp+90h] [bp+8h]@19

  v2 = this;
  v3 = 0;
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v70 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\MapLinkGate.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = operator new(0x60u);
  v64 = (unsigned int)v6;
  LOBYTE(v70) = 1;
  if ( v6 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v6);
    v3 = v7;
  }
  v8 = v2->m_spMtrlProp.m_pObject;
  LOBYTE(v70) = 0;
  if ( v8 != (NiMaterialProperty *)v3 )
  {
    if ( v8
      && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v2->m_spMtrlProp.m_pObject = (NiMaterialProperty *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v9 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v9->m_amb.r) = NiColor::WHITE;
  LODWORD(v9->m_amb.g) = dword_A88D90;
  LODWORD(v9->m_amb.b) = dword_A88D94;
  ++v9->m_uiRevID;
  v10 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v10->m_diff.r) = NiColor::WHITE;
  LODWORD(v10->m_diff.g) = dword_A88D90;
  v11 = dword_A88D94;
  ++v10->m_uiRevID;
  LODWORD(v10->m_diff.b) = v11;
  v12 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v12->m_emit.r) = NiColor::WHITE;
  LODWORD(v12->m_emit.g) = dword_A88D90;
  v13 = dword_A88D94;
  ++v12->m_uiRevID;
  LODWORD(v12->m_emit.b) = v13;
  v14 = v2->m_spMtrlProp.m_pObject;
  ++v14->m_uiRevID;
  v14->m_fAlpha = 1.0;
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v15, 0, pkFrameWork, "MapLinkGateWin", 0) )
  {
    v16 = spNode.m_pObject;
    v70 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v16 )
        v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    }
    return 0;
  }
  NiAVObject::AttachProperty(
    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v2->m_spMtrlProp.m_pObject->baseclass_0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v70) = 2;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, uiLeft, uiTop);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Cls_Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "Cls_Click");
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "Cls_Over");
  v19 = (NiAVObject *)PgWinBut::CreateWin(uiLeft, uiTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v20 = (NiProperty *)v2->m_spMtrlProp.m_pObject;
  v2->m_pkCloseBtn = (PgWinBut *)v19;
  NiAVObject::AttachProperty(v19, v20);
  pkFrameWorka = 1;
  v21 = (int)v2->m_apkTexts;
  v66 = 3;
  do
  {
    v22 = spNode.m_pObject;
    v23 = fs("MapSlot%.2d_Nor");
    v24 = PgSprData::Create(&v22->baseclass_0, v23, &uiLeft, &uiTop, 0);
    element = (NiAVObject *)spNode.m_pObject;
    v25 = fs("MapSlot%.2d_Click");
    PgSprData::Add(v24, element, v25);
    element = (NiAVObject *)spNode.m_pObject;
    v26 = fs("MapSlot%.2d_Over");
    PgSprData::Add(v24, element, v26);
    v27 = PgWinBut::CreateWin(uiLeft, uiTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    *(_DWORD *)(v21 - 12) = v27;
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v27,
      (unsigned int)v27);
    v28 = v2->m_spMtrlProp.m_pObject;
    v64 = *(_DWORD *)(v21 - 12);
    element = (NiAVObject *)v28;
    if ( v28 )
      InterlockedIncrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v70) = 3;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v64 + 156),
      (NiPointer<NiRoom> *)&element);
    LOBYTE(v70) = 2;
    if ( v28
      && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
    *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v30 = UIUtil::CreateAttachedText(&ui, *(PgWin **)(v21 - 12), &byte_99E7A1, COERCE_D3DXCOLOR(v29.r), 5u);
    *(_DWORD *)v21 = v30;
    v31 = v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v32 = Font::Get(GTFONT);
    v31[113].__vecDelDtor(*(NiRefObject **)v21, (unsigned int)v32);
    v33 = **(_DWORD **)v21;
    v34 = (*(int (**)(void))(**(_DWORD **)(v21 - 12) + 148))();
    v35 = *(NiRefObject **)v21;
    v64 = v34 / 3;
    v36 = ((int (*)(void))v35->vfptr[42].__vecDelDtor)();
    (*(void (__thiscall **)(_DWORD, unsigned int))(v33 + 176))(*(_DWORD *)v21, v64 + v36);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v21 + 240))(0);
    *(_QWORD *)&v37.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v37.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v38 = UIUtil::CreateAttachedText(&ui, *(PgWin **)(v21 - 12), byte_99E7A2, COERCE_D3DXCOLOR(v37.r), 5u);
    *(_DWORD *)(v21 + 12) = v38;
    v39 = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v40 = Font::Get(GTFONT);
    v39[113].__vecDelDtor(*(NiRefObject **)(v21 + 12), (unsigned int)v40);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)(v21 + 12) + 468))(&Color::m_kDxRedColor);
    v41 = *(_DWORD *)(v21 + 12);
    v42 = *(_DWORD *)v41;
    v43 = (*(int (**)(void))(*(_DWORD *)v41 + 168))();
    (*(void (__thiscall **)(_DWORD, int))(v42 + 176))(*(_DWORD *)(v21 + 12), v43 - 20);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v21 + 12) + 240))(0);
    ++pkFrameWorka;
    v21 += 4;
    --v66;
  }
  while ( v66 );
  *(_QWORD *)&v44.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v44.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v45 = TextData2::Get(0x7FA494E1u);
  v46 = UIUtil::CreateTextNoSpr(&ui, "Text01", v45, COERCE_D3DXCOLOR(v44.r), 5u);
  v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v48 = Font::Get(MENU);
  v47[113].__vecDelDtor((NiRefObject *)v46, (unsigned int)v48);
  v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v46,
    0);
  *(_QWORD *)&v49.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v49.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v50 = TextData2::Get(0x6EF2EBE0u);
  v51 = UIUtil::CreateTextNoSpr(&ui, "Text02", v50, COERCE_D3DXCOLOR(v49.r), 5u);
  v52 = v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v53 = Font::Get(MENU);
  v52[113].__vecDelDtor((NiRefObject *)v51, (unsigned int)v53);
  v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v51,
    0);
  ((void (__thiscall *)(MapLinkGateWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Page_Nor00", &uiLeft, &uiTop, 0);
  PgSprData::Add(v54, &spNode.m_pObject->baseclass_0, "Page_Click00");
  PgSprData::Add(v54, &spNode.m_pObject->baseclass_0, "Page_Over00");
  v55 = PgWinBut::CreateWin(uiLeft, uiTop, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v55,
    1u);
  v56 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Page_Nor01", &uiLeft, &uiTop, 0);
  PgSprData::Add(v56, &spNode.m_pObject->baseclass_0, "Page_Click01");
  PgSprData::Add(v56, &spNode.m_pObject->baseclass_0, "Page_Over01");
  v57 = PgWinBut::CreateWin(uiLeft, uiTop, v56, &v2->baseclass_0.baseclass_0.baseclass_0, 6u, 0, 0);
  v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v57,
    1u);
  v58 = 0;
  v59 = 0;
  if ( !ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() )
  {
LABEL_32:
    LOBYTE(v70) = 0;
    UIUtil::_UIUtil(&ui);
    v60 = spNode.m_pObject;
    v70 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v60 )
      v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v60, 1u);
    return 1;
  }
  while ( 1 )
  {
    if ( v58 > 3 )
    {
      MessageBoxA(0, "Never Count Over 2! ", "MapLinkGateWin", 0);
      LOBYTE(v70) = 0;
      UIUtil::_UIUtil(&ui);
      v61 = spNode.m_pObject;
      v70 = -1;
      if ( !spNode.m_pObject )
        return 0;
      v62 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_39;
    }
    ++v58;
    if ( v2->m_uiMaxPage < *((_BYTE *)CDataReader::GetRecord(
                                        (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                                        v59)
                           + 2) )
      break;
LABEL_31:
    ++v59;
    if ( v59 >= ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() )
      goto LABEL_32;
  }
  if ( (signed int)(*((_BYTE *)CDataReader::GetRecord(
                                 (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                                 v59)
                    + 2)
                  - v2->m_uiMaxPage) <= 1 )
  {
    v2->m_uiMaxPage = *((_BYTE *)CDataReader::GetRecord(
                                   (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                                   v59)
                      + 2);
    v58 = 0;
    goto LABEL_31;
  }
  MessageBoxA(0, "MapLinkGateWin", "error", 0);
  LOBYTE(v70) = 0;
  UIUtil::_UIUtil(&ui);
  v61 = spNode.m_pObject;
  v70 = -1;
  if ( !spNode.m_pObject )
    return 0;
  v62 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_39:
  if ( !InterlockedDecrement(v62) && v61 )
    v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v61, 1u);
  return 0;
}
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00548270) --------------------------------------------------------
void __thiscall MapLinkGateWin::OnShowWin(MapLinkGateWin *this)
{
  MapLinkGateWin *v1; // esi@1

  v1 = this;
  MapLinkGateWin::ShowLinkGate(this);
  v1->m_kAlphaControl.fAlphaValue = 0.0;
}

//----- (00548290) --------------------------------------------------------
bool __thiscall MapLinkGateWin::ChangePage(MapLinkGateWin *this, int nChangePage)
{
  bool result; // al@2
  unsigned int v3; // eax@5
  unsigned int v4; // eax@8

  if ( nChangePage >= 2 )
    return 0;
  if ( !nChangePage )
  {
    v4 = this->m_uiMapLinkPage;
    if ( !v4 )
    {
      this->m_uiMapLinkPage = this->m_uiMaxPage;
      MapLinkGateWin::ShowLinkGate(this);
      return 1;
    }
    this->m_uiMapLinkPage = v4 - 1;
    goto LABEL_11;
  }
  if ( nChangePage != 1 )
  {
LABEL_11:
    MapLinkGateWin::ShowLinkGate(this);
    return 1;
  }
  v3 = this->m_uiMapLinkPage;
  if ( v3 == this->m_uiMaxPage )
  {
    this->m_uiMapLinkPage = 0;
    MapLinkGateWin::ShowLinkGate(this);
    result = 1;
  }
  else
  {
    this->m_uiMapLinkPage = v3 + 1;
    MapLinkGateWin::ShowLinkGate(this);
    result = 1;
  }
  return result;
}

//----- (00548320) --------------------------------------------------------
void __thiscall MapLinkGateWin::OnCommand(MapLinkGateWin *this, unsigned int wParam, int lParam)
{
  MapLinkGateWin *v3; // ebx@1
  PgFrameWork *v4; // ecx@2
  NiExtraData *v5; // eax@4
  unsigned int v6; // edi@5
  GameFrameWork *v7; // ecx@12
  unsigned int v8; // eax@13
  unsigned int v9; // eax@16

  v3 = this;
  switch ( wParam )
  {
    case 1u:
      v4 = this->baseclass_0.m_pkFrameWork;
      v3->m_bInputEnable = 0;
      GameFrameWork::CloseMapLinkGateWin((GameFrameWork *)v4);
      break;
    case 2u:
      if ( lParam )
      {
        v5 = NiObjectNET::GetExtraData((NiObjectNET *)lParam, "action");
        if ( v5 )
        {
          lParam = (int)v5[1].baseclass_0.baseclass_0.vfptr;
          v6 = 0;
          if ( ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() )
          {
            while ( strcmp(
                      (const char *)CDataReader::GetRecord(
                                      (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                                      v6)
                    + 3,
                      (const char *)lParam) )
            {
              ++v6;
              if ( v6 >= ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() )
                return;
            }
            BYTE3(wParam) = *(_BYTE *)CDataReader::GetRecord(
                                        (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                                        v6);
            NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 6u, 0x1Au, (char *)&wParam + 3, 1);
            if ( v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                36,
                0,
                &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
              if ( v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  36,
                  0,
                  &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
            }
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
              &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
              36,
              0,
              &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
            v7 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
            v3->m_bInputEnable = 0;
            GameFrameWork::CloseMapLinkGateWin(v7);
          }
        }
      }
      break;
    default:
      return;
    case 6u:
      v8 = this->m_uiMapLinkPage;
      if ( v8 )
      {
        this->m_uiMapLinkPage = v8 - 1;
        MapLinkGateWin::ShowLinkGate(this);
      }
      else
      {
        this->m_uiMapLinkPage = this->m_uiMaxPage;
        MapLinkGateWin::ShowLinkGate(this);
      }
      break;
    case 7u:
      v9 = this->m_uiMapLinkPage;
      if ( v9 == this->m_uiMaxPage )
      {
        this->m_uiMapLinkPage = 0;
        MapLinkGateWin::ShowLinkGate(this);
      }
      else
      {
        this->m_uiMapLinkPage = v9 + 1;
        MapLinkGateWin::ShowLinkGate(this);
      }
      break;
  }
}

//----- (005484E0) --------------------------------------------------------
MapLinkGateWin *__cdecl MapLinkGateWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MapLinkGateWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x198u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MapLinkGateWin::MapLinkGateWin((MapLinkGateWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MapLinkGateWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00548610) --------------------------------------------------------
TownPortal *__cdecl ITableBase<TownPortal_TownPortalInfoTable>::GetByIndex(unsigned int uiIndex)
{
  return (TownPortal *)CDataReader::GetRecord(
                         (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                         uiIndex);
}

//----- (00548630) --------------------------------------------------------
unsigned int __cdecl ITableBase<TownPortal_TownPortalInfoTable>::GetTotal()
{
  char *v0; // eax@1
  unsigned int result; // eax@2

  v0 = ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable[3].baseclass_0.m_pcName;
  if ( v0 )
    result = *((_DWORD *)v0 + 10);
  else
    result = 0;
  return result;
}

//----- (00548650) --------------------------------------------------------
void *__thiscall MapLinkGateWin::_vector_deleting_destructor_(MapLinkGateWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  NiMaterialProperty *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MapLinkGateWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MapLinkGateWin::_vftable_;
  v3 = this->m_spMtrlProp.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99E978: using guessed type int (__stdcall *MapLinkGateWin___vftable_)(int uiFlags);
// 99E994: using guessed type int (__thiscall *MapLinkGateWin___vftable_)(void *p, char);

//----- (005486F0) --------------------------------------------------------
bool __thiscall MarketSearchItem::IsAvailable(MarketSearchItem *this)
{
  return this->m_hItem != -1;
}

//----- (00548700) --------------------------------------------------------
unsigned __int64 __thiscall MarketSearchItem::GetPrice(MarketSearchItem *this)
{
  return this->m_nPrice;
}

//----- (00548710) --------------------------------------------------------
unsigned int __thiscall MarketSearchItem::GetItemHandle(MarketSearchItem *this)
{
  return this->m_hItem;
}

//----- (00548720) --------------------------------------------------------
unsigned __int16 __thiscall MarketSearchItem::GetOwnerHandle(MarketSearchItem *this)
{
  return this->m_hOwner;
}

//----- (00548730) --------------------------------------------------------
int __thiscall MarketSearchWin::MarketSort::CompName(MarketSearchWin::MarketSort *this, char *Name1, char *Name2, bool desc)
{
  int result; // eax@3

  if ( Name1 && Name2 )
  {
    result = strcmp(Name1, Name2);
    if ( !desc )
      result = -result;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (00548780) --------------------------------------------------------
void __thiscall MarketSearchWin::SetSearchBooth(MarketSearchWin *this, unsigned __int16 hHandle)
{
  this->m_hFindBooth = hHandle;
}

//----- (005487A0) --------------------------------------------------------
bool __thiscall MarketSearchWin::IsFindBooth(MarketSearchWin *this, unsigned __int16 hHandle)
{
  unsigned __int16 v2; // ax@1
  bool result; // al@2

  v2 = this->m_hFindBooth;
  if ( v2 == -1 )
    result = 0;
  else
    result = v2 == hHandle;
  return result;
}

//----- (005487D0) --------------------------------------------------------
void __thiscall MarketSearchWin::SetCategoryFromBtn(MarketSearchWin *this, unsigned int PgBtnMsg)
{
  MarketSearchWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  int v4; // eax@2
  NiRefObjectVtbl *v5; // edi@3
  int v6; // eax@3
  NiRefObjectVtbl *v7; // edi@4
  int v8; // eax@4
  NiRefObjectVtbl *v9; // edi@5
  int v10; // eax@5
  NiRefObjectVtbl *v11; // edi@6
  int v12; // eax@6
  NiRefObjectVtbl *v13; // edi@7
  int v14; // eax@7
  NiRefObjectVtbl *v15; // edi@8
  int v16; // eax@8
  NiRefObjectVtbl *v17; // edi@9
  int v18; // eax@9

  v2 = this;
  switch ( PgBtnMsg )
  {
    case 2u:
      v3 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v4 = ((int (*)(void))this->m_pkItemCategoryText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v3[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v4);
      v2->m_uiSelectCategory = 1;
      break;
    case 3u:
      v5 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v6 = ((int (*)(void))this->m_pkItemCategoryText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v5[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v6);
      v2->m_uiSelectCategory = 2;
      break;
    case 4u:
      v7 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = ((int (*)(void))this->m_pkItemCategoryText[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v7[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v8);
      v2->m_uiSelectCategory = 3;
      break;
    case 5u:
      v9 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = ((int (*)(void))this->m_pkItemCategoryText[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v9[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v10);
      v2->m_uiSelectCategory = 4;
      break;
    case 6u:
      v11 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v12 = ((int (*)(void))this->m_pkItemCategoryText[7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v11[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v12);
      v2->m_uiSelectCategory = 5;
      break;
    case 7u:
      v13 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v14 = ((int (*)(void))this->m_pkItemCategoryText[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v13[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v14);
      v2->m_uiSelectCategory = 6;
      break;
    case 8u:
      v15 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v16 = ((int (*)(void))this->m_pkItemCategoryText[9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v15[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v16);
      v2->m_uiSelectCategory = 7;
      break;
    default:
      v17 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v18 = ((int (*)(void))this->m_pkItemCategoryText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      v17[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v18);
      v2->m_uiSelectCategory = 0;
      break;
  }
}

//----- (005489D0) --------------------------------------------------------
void __thiscall MarketSearchWin::ShowWTCombo(MarketSearchWin *this, bool b)
{
  MarketSearchWin *v2; // ebx@1
  char *v3; // esi@1
  signed int v4; // edi@1
  signed int v5; // [sp-4h] [bp-10h]@3

  v2 = this;
  v3 = (char *)&this->m_pkItemCategory[2];
  v4 = 8;
  if ( b == 1 )
  {
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(1);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v5 = 1;
  }
  else
  {
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v5 = 0;
  }
  ((void (__stdcall *)(_DWORD))v2->m_pkChosenItemCategoryBG->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v5);
}

//----- (00548A40) --------------------------------------------------------
void __thiscall MarketSearchWin::SetSearchingMsgBox(MarketSearchWin *this, MsgBox *pkMsgBox)
{
  this->m_pkSearchingMsgBox = pkMsgBox;
}

//----- (00548A50) --------------------------------------------------------
void __thiscall MarketSearchWin::DirectMessage(MarketSearchWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  MarketSearchWin *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
    {
      EffectMgr::RemoveClientEff(&g_kEffectMgr, 0);
      v4->m_ColumnWinName[5].baseclass_0._Myres = 65535;
    }
  }
}

//----- (00548A90) --------------------------------------------------------
void __thiscall MarketSearchWin::CloseSearchingMsgBox(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  MsgBox *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkSearchingMsgBox;
  if ( v2 )
  {
    MsgBox::CloseWithOK(v2);
    *(_DWORD *)&v1->m_hFindBooth = 65535;
  }
  else
  {
    v1->m_hFindBooth = -1;
  }
}

//----- (00548AD0) --------------------------------------------------------
void __thiscall MarketSearchWin::OnSomeoneBoothOpen(MarketSearchWin *this, unsigned __int16 hBoothHandle)
{
  MarketSearchWin *v2; // esi@1
  MsgBox *v3; // ecx@2

  v2 = this;
  if ( this->m_hFindBooth == hBoothHandle )
  {
    v3 = this->m_pkSearchingMsgBox;
    if ( v3 )
    {
      MsgBox::CloseWithOK(v3);
      v2->m_pkSearchingMsgBox = 0;
    }
    v2->m_hFindBooth = -1;
  }
}

//----- (00548B10) --------------------------------------------------------
void __thiscall MarketSearchItem::MarketSearchItem(MarketSearchItem *this)
{
  this->vfptr = (MarketSearchItemVtbl *)&MarketSearchItem::_vftable_;
  this->m_pkItem.m_pObject = 0;
  LODWORD(this->m_nPrice) = -1;
  HIDWORD(this->m_nPrice) = -1;
  this->m_hItem = -1;
  this->m_hOwner = -1;
}
// 99EF44: using guessed type int (__thiscall *MarketSearchItem___vftable_)(void *p, char);

//----- (00548B40) --------------------------------------------------------
void __thiscall MarketSearchItem::_MarketSearchItem(MarketSearchItem *this)
{
  Item *v1; // esi@1

  this->vfptr = (MarketSearchItemVtbl *)&MarketSearchItem::_vftable_;
  v1 = this->m_pkItem.m_pObject;
  if ( v1 && !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.m_uiRefCount) )
  {
    if ( v1 )
      v1->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
  }
}
// 99EF44: using guessed type int (__thiscall *MarketSearchItem___vftable_)(void *p, char);

//----- (00548B70) --------------------------------------------------------
void __thiscall MarketSearchItem::Clear(MarketSearchItem *this)
{
  MarketSearchItem *v1; // esi@1
  Item *v2; // edi@1

  v1 = this;
  v2 = this->m_pkItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_pkItem.m_pObject = 0;
  }
  LODWORD(v1->m_nPrice) = -1;
  HIDWORD(v1->m_nPrice) = -1;
  v1->m_hItem = -1;
  v1->m_hOwner = -1;
}

//----- (00548BC0) --------------------------------------------------------
void __thiscall MarketSearchItem::Set(MarketSearchItem *this, BoothItemInfo *pkBoothItemInfo)
{
  MarketSearchItem *v2; // esi@1
  Item *v3; // eax@1
  Item *v4; // edi@1
  Item *v5; // ebx@1

  v2 = this;
  v3 = Item::Create(&pkBoothItemInfo->bii_ItemInfo);
  v4 = v2->m_pkItem.m_pObject;
  v5 = v3;
  if ( v4 != v3 )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v2->m_pkItem.m_pObject = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount);
  }
  v2->m_nPrice = pkBoothItemInfo->bii_nUnitPrice;
  v2->m_hItem = pkBoothItemInfo->bii_nItemHandle;
  v2->m_hOwner = pkBoothItemInfo->bii_nOwnerHandle;
}

//----- (00548C40) --------------------------------------------------------
Item *__thiscall MarketSearchItem::GetItem(MarketSearchItem *this)
{
  return this->m_pkItem.m_pObject;
}

//----- (00548C50) --------------------------------------------------------
int __thiscall MarketSearchWin::MarketSort::CompLevel(MarketSearchWin::MarketSort *this, int Level1, int Level2, bool desc)
{
  int result; // eax@1

  result = 0;
  if ( Level1 != Level2 )
  {
    if ( Level1 <= Level2 )
    {
      if ( Level1 < Level2 )
        result = 1;
    }
    else
    {
      result = -1;
    }
  }
  if ( desc )
    result = -result;
  return result;
}

//----- (00548C80) --------------------------------------------------------
int __thiscall MarketSearchWin::MarketSort::CompMoney(MarketSearchWin::MarketSort *this, unsigned __int64 Money1, unsigned __int64 Money2, bool desc)
{
  int result; // eax@1
  bool v5; // cf@2
  bool v6; // zf@2

  result = 0;
  if ( (_DWORD)Money1 == (_DWORD)Money2 )
  {
    v5 = HIDWORD(Money1) < HIDWORD(Money2);
    v6 = HIDWORD(Money1) == HIDWORD(Money2);
    if ( HIDWORD(Money1) == HIDWORD(Money2) )
      goto LABEL_11;
  }
  else
  {
    v5 = HIDWORD(Money1) < HIDWORD(Money2);
    v6 = HIDWORD(Money1) == HIDWORD(Money2);
  }
  if ( v5 || v5 | v6 && (unsigned int)Money1 <= (unsigned int)Money2 )
  {
    if ( Money1 < Money2 )
      result = 1;
  }
  else
  {
    result = -1;
  }
LABEL_11:
  if ( desc )
    result = -result;
  return result;
}

//----- (00548CD0) --------------------------------------------------------
int __thiscall MarketSearchWin::MarketSort::CompSubGroup(MarketSearchWin::MarketSort *this, Item *Item1, Item *Item2, bool desc)
{
  AuctionGroup v4; // edx@1
  AuctionGroup v5; // ecx@1
  int result; // eax@1

  v4 = Item2->m_pkInfo->ItemAuctionGroup;
  v5 = Item1->m_pkInfo->ItemAuctionGroup;
  result = 0;
  if ( v5 != v4 )
  {
    if ( v5 <= (unsigned int)v4 )
    {
      if ( v5 < (unsigned int)v4 )
        result = 1;
    }
    else
    {
      result = -1;
    }
  }
  if ( desc )
    result = -result;
  return result;
}

//----- (00548D10) --------------------------------------------------------
int __thiscall MarketSearchWin::MarketSort::CompItemHandle(MarketSearchWin::MarketSort *this, unsigned int Handle1, unsigned int Handle2, bool desc)
{
  int result; // eax@1

  result = 0;
  if ( Handle1 != Handle2 )
  {
    if ( Handle1 <= Handle2 )
    {
      if ( Handle1 < Handle2 )
        result = 1;
    }
    else
    {
      result = -1;
    }
  }
  if ( desc )
    result = -result;
  return result;
}

//----- (00548D40) --------------------------------------------------------
void __thiscall MarketSearchWin::MakeDefaultAll(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  int v3; // eax@1
  EditWinEx *v4; // ecx@1

  v1 = this;
  v2 = this->m_pkItemCategoryText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = ((int (*)(void))this->m_pkItemCategoryText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkItemCategoryText[0], v3);
  v4 = v1->m_pkItemSearchInput;
  v1->m_uiSelectCategory = 0;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_99EBCB);
  v1->m_pkMyClassViewBtn->m_bCheck = 1;
}

//----- (00548DA0) --------------------------------------------------------
bool __thiscall MarketSearchWin::DelayTimeCheck(MarketSearchWin *this)
{
  return Timer::ms_fCurTime - this->m_fCurrentDelayTime > 3.0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00548DD0) --------------------------------------------------------
void __thiscall MarketSearchWin::GetItemFontTable(MarketSearchWin *this, D3DXCOLOR *RetColor, GradeType eType)
{
  D3DXCOLOR *v3; // ecx@2
  char *v4; // edx@2
  int v5; // esi@2
  double v6; // st7@2

  switch ( eType )
  {
    case 1:
      v3 = RetColor;
      RetColor->r = 0.0;
      v4 = (char *)&RetColor->g;
      v5 = (int)&RetColor->b;
      RetColor->g = 255.0;
      v6 = 255.0;
      RetColor->b = 0.0;
      break;
    case 2:
      v3 = RetColor;
      RetColor->r = 13.0;
      v4 = (char *)&RetColor->g;
      v5 = (int)&RetColor->b;
      RetColor->g = 194.0;
      RetColor->b = 254.0;
      v6 = 255.0;
      break;
    case 5:
      v3 = RetColor;
      RetColor->r = 120.0;
      v4 = (char *)&RetColor->g;
      RetColor->g = 120.0;
      v6 = 255.0;
      goto LABEL_11;
    case 3:
      v3 = RetColor;
      v6 = 255.0;
      RetColor->r = 255.0;
      v4 = (char *)&RetColor->g;
      v5 = (int)&RetColor->b;
      RetColor->g = 228.0;
      RetColor->b = 0.0;
      break;
    case 4:
      v3 = RetColor;
      RetColor->r = 253.0;
      v4 = (char *)&RetColor->g;
      v5 = (int)&RetColor->b;
      RetColor->g = 32.0;
      RetColor->b = 239.0;
      v6 = 255.0;
      break;
    case 8:
      v3 = RetColor;
      v6 = 255.0;
      RetColor->r = 255.0;
      v4 = (char *)&RetColor->g;
      RetColor->g = 255.0;
      v5 = (int)&RetColor->b;
      RetColor->b = 0.0;
      break;
    case 6:
      v3 = RetColor;
      v6 = 225.0;
      RetColor->r = 225.0;
      v4 = (char *)&RetColor->g;
      v5 = (int)&RetColor->b;
      RetColor->g = 128.0;
      RetColor->b = 0.0;
      break;
    case 7:
      v3 = RetColor;
      v6 = 225.0;
      RetColor->r = 225.0;
      v4 = (char *)&RetColor->g;
      v5 = (int)&RetColor->b;
      RetColor->g = 0.0;
      RetColor->b = 255.0;
      break;
    default:
      v3 = RetColor;
      v6 = 255.0;
      v4 = (char *)&RetColor->g;
      RetColor->r = 255.0;
      RetColor->g = 255.0;
LABEL_11:
      v5 = (int)&v3->b;
      v3->b = v6;
      break;
  }
  v3->a = v6;
  v3->r = (double)(unsigned __int8)(signed int)v3->r / 255.0;
  *(float *)v4 = (double)(unsigned __int8)(signed int)*(float *)v4 / 255.0;
  *(float *)v5 = (double)(unsigned __int8)(signed int)*(float *)v5 / 255.0;
  v3->a = (double)(unsigned __int8)(signed int)v3->a / 255.0;
}

//----- (00548FE0) --------------------------------------------------------
int __thiscall MarketSearchWin::MarketSort::CompMainGroup(MarketSearchWin::MarketSort *this, Item *Item1, Item *Item2, bool desc)
{
  unsigned int v4; // esi@1
  unsigned int v5; // esi@3

  v4 = 0;
  if ( ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() )
  {
    do
      CDataReader::GetRecord((CDataReader *)(ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 4), v4++);
    while ( v4 < ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() );
  }
  v5 = 0;
  if ( ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() )
  {
    do
      CDataReader::GetRecord((CDataReader *)(ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 4), v5++);
    while ( v5 < ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() );
  }
  return 0;
}
// A97F10: using guessed type int ITableBase_MarketSearchInfo_MarketSearchInfoTab___ms_pkTable;

//----- (00549040) --------------------------------------------------------
bool __thiscall MarketSearchWin::SortByDefault::operator__(MarketSearchWin::SortByDefault *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2)
{
  Item *v4; // esi@8
  Item *v5; // edi@8
  int v6; // eax@8
  AuctionGroup v7; // ecx@9
  AuctionGroup v8; // edx@9
  unsigned int v9; // edx@15
  unsigned int v10; // ecx@15

  if ( pkMSItem1->m_hItem == -1 )
  {
    if ( pkMSItem2->m_hItem == -1 || pkMSItem2->m_hItem != -1 )
      return 0;
  }
  else
  {
    if ( pkMSItem2->m_hItem == -1 )
      return 1;
  }
  v4 = pkMSItem1->m_pkItem.m_pObject;
  v5 = pkMSItem2->m_pkItem.m_pObject;
  v6 = MarketSearchWin::MarketSort::CompMainGroup(
         &this->baseclass_0,
         pkMSItem1->m_pkItem.m_pObject,
         pkMSItem2->m_pkItem.m_pObject,
         0);
  if ( !v6 )
  {
    v7 = v4->m_pkInfo->ItemAuctionGroup;
    v8 = v5->m_pkInfo->ItemAuctionGroup;
    v6 = 0;
    if ( v7 != v8 )
    {
      if ( v7 <= (unsigned int)v8 )
      {
        if ( v7 < (unsigned int)v8 )
          v6 = 1;
      }
      else
      {
        v6 = -1;
      }
    }
    if ( !v6 )
    {
      v9 = pkMSItem1->m_hItem;
      v10 = pkMSItem2->m_hItem;
      v6 = 0;
      if ( v9 == v10 )
        return 0;
      if ( v9 > v10 )
        return 0;
      if ( v9 < v10 )
        v6 = 1;
    }
  }
  return v6 > 0;
}

//----- (00549100) --------------------------------------------------------
bool __thiscall MarketSearchWin::SortByName::operator__(MarketSearchWin::SortByName *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2)
{
  ItemInfo *v4; // esi@8
  Item *v5; // edi@8
  ItemInfo *v6; // ecx@8
  int v7; // eax@10
  unsigned int v8; // edx@11
  unsigned int v9; // esi@11
  unsigned int v10; // edx@19
  unsigned int v11; // ebx@19
  unsigned int v12; // esi@19
  unsigned int v13; // ecx@19
  bool v14; // cf@20
  bool v15; // zf@20
  AuctionGroup v16; // ecx@33
  AuctionGroup v17; // edx@33
  unsigned int v18; // ecx@39
  unsigned int v19; // edx@39
  MarketSearchWin::MarketSort *thisa; // [sp+4h] [bp-8h]@1
  Item *pkItem2; // [sp+8h] [bp-4h]@8

  thisa = (MarketSearchWin::MarketSort *)this;
  if ( pkMSItem1->m_hItem == -1 )
  {
    if ( pkMSItem2->m_hItem == -1 || pkMSItem2->m_hItem != -1 )
      return 0;
  }
  else
  {
    if ( pkMSItem2->m_hItem == -1 )
      return 1;
  }
  v4 = pkMSItem2->m_pkItem.m_pObject->m_pkInfo;
  v5 = pkMSItem1->m_pkItem.m_pObject;
  v6 = v5->m_pkInfo;
  pkItem2 = pkMSItem2->m_pkItem.m_pObject;
  if ( v6 == (ItemInfo *)-34 || v4 == (ItemInfo *)-34 )
    return 0;
  v7 = -strcmp(v6->Name, v4->Name);
  if ( v7 )
    return v7 > 0;
  v8 = v4->DemandLv;
  v9 = v6->DemandLv;
  if ( v9 != v8 )
  {
    if ( (signed int)v9 <= (signed int)v8 )
    {
      if ( (signed int)v9 < (signed int)v8 )
        v7 = 1;
    }
    else
    {
      v7 = -1;
    }
  }
  if ( v7 )
    return v7 > 0;
  v10 = LODWORD(pkMSItem2->m_nPrice);
  v11 = HIDWORD(pkMSItem2->m_nPrice);
  v12 = LODWORD(pkMSItem1->m_nPrice);
  v13 = HIDWORD(pkMSItem1->m_nPrice);
  v7 = 0;
  if ( v12 == v10 )
  {
    v14 = v13 < v11;
    v15 = v13 == v11;
    if ( v13 == v11 )
      goto LABEL_31;
  }
  else
  {
    v14 = v13 < v11;
    v15 = v13 == v11;
  }
  if ( v14 || v14 | v15 && v12 <= v10 )
  {
    if ( v13 <= v11 && (v13 < v11 || v12 < v10) )
      v7 = 1;
  }
  else
  {
    v7 = -1;
  }
LABEL_31:
  if ( !v7 )
  {
    v7 = MarketSearchWin::MarketSort::CompMainGroup(thisa, v5, pkItem2, 0);
    if ( !v7 )
    {
      v16 = v5->m_pkInfo->ItemAuctionGroup;
      v17 = pkItem2->m_pkInfo->ItemAuctionGroup;
      v7 = 0;
      if ( v16 != v17 )
      {
        if ( v16 <= (unsigned int)v17 )
        {
          if ( v16 < (unsigned int)v17 )
            v7 = 1;
        }
        else
        {
          v7 = -1;
        }
      }
      if ( !v7 )
      {
        v18 = pkMSItem2->m_hItem;
        v19 = pkMSItem1->m_hItem;
        v7 = 0;
        if ( v19 == v18 )
          return 0;
        if ( v19 > v18 )
          return 0;
        if ( v19 < v18 )
          v7 = 1;
      }
    }
  }
  return v7 > 0;
}

//----- (00549290) --------------------------------------------------------
bool __thiscall MarketSearchWin::SortByNameDesc::operator__(MarketSearchWin::SortByNameDesc *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2)
{
  int v3; // eax@3
  ItemInfo *v4; // esi@8
  Item *v5; // edi@8
  ItemInfo *v6; // ecx@8
  int v7; // eax@8
  int v8; // edx@8
  bool v9; // cf@10
  unsigned __int8 v10; // bl@12
  int v11; // eax@14
  unsigned int v12; // edx@16
  unsigned int v13; // esi@16
  unsigned int v14; // edx@25
  unsigned int v15; // ebx@25
  unsigned int v16; // esi@25
  unsigned int v17; // ecx@25
  signed int v18; // eax@25
  bool v19; // cf@26
  bool v20; // zf@26
  AuctionGroup v21; // ecx@39
  AuctionGroup v22; // edx@39
  signed int v23; // eax@39
  unsigned int v24; // ecx@45
  unsigned int v25; // edx@45
  signed int v26; // eax@45
  MarketSearchWin::MarketSort *thisa; // [sp+4h] [bp-8h]@1
  Item *pkItem2; // [sp+8h] [bp-4h]@8

  thisa = (MarketSearchWin::MarketSort *)this;
  if ( pkMSItem1->m_hItem == -1 )
  {
    if ( pkMSItem2->m_hItem == -1 || pkMSItem2->m_hItem != -1 )
    {
      LOBYTE(v3) = 0;
      return v3;
    }
  }
  else
  {
    if ( pkMSItem2->m_hItem == -1 )
    {
      LOBYTE(v3) = 1;
      return v3;
    }
  }
  v4 = pkMSItem2->m_pkItem.m_pObject->m_pkInfo;
  v5 = pkMSItem1->m_pkItem.m_pObject;
  v6 = v5->m_pkInfo;
  pkItem2 = pkMSItem2->m_pkItem.m_pObject;
  v7 = (int)v6->Name;
  v8 = (int)v4->Name;
  if ( v6 != (ItemInfo *)-34 && v4 != (ItemInfo *)-34 )
  {
    while ( 1 )
    {
      v9 = *(_BYTE *)v7 < *(_BYTE *)v8;
      if ( *(_BYTE *)v7 != *(_BYTE *)v8 )
        break;
      if ( !*(_BYTE *)v7 )
        goto LABEL_14;
      v10 = *(_BYTE *)(v7 + 1);
      v9 = v10 < *(_BYTE *)(v8 + 1);
      if ( v10 != *(_BYTE *)(v8 + 1) )
        break;
      v7 += 2;
      v8 += 2;
      if ( !v10 )
      {
LABEL_14:
        v11 = 0;
        goto LABEL_15;
      }
    }
    v11 = -v9 - (v9 - 1);
LABEL_15:
    if ( v11 )
      goto LABEL_52;
    v12 = v4->DemandLv;
    v13 = v6->DemandLv;
    if ( v13 != v12 )
    {
      if ( (signed int)v13 <= (signed int)v12 )
      {
        if ( (signed int)v13 < (signed int)v12 )
          v11 = 1;
      }
      else
      {
        v11 = -1;
      }
    }
    v11 = -v11;
    if ( v11 )
      goto LABEL_52;
    v14 = LODWORD(pkMSItem2->m_nPrice);
    v15 = HIDWORD(pkMSItem2->m_nPrice);
    v16 = LODWORD(pkMSItem1->m_nPrice);
    v17 = HIDWORD(pkMSItem1->m_nPrice);
    v18 = 0;
    if ( v16 == v14 )
    {
      v19 = v17 < v15;
      v20 = v17 == v15;
      if ( v17 == v15 )
        goto LABEL_37;
    }
    else
    {
      v19 = v17 < v15;
      v20 = v17 == v15;
    }
    if ( v19 || v19 | v20 && v16 <= v14 )
    {
      if ( v17 <= v15 && (v17 < v15 || v16 < v14) )
        v18 = 1;
    }
    else
    {
      v18 = -1;
    }
LABEL_37:
    v11 = -v18;
    if ( !v11 )
    {
      v11 = MarketSearchWin::MarketSort::CompMainGroup(thisa, v5, pkItem2, 1);
      if ( !v11 )
      {
        v21 = v5->m_pkInfo->ItemAuctionGroup;
        v22 = pkItem2->m_pkInfo->ItemAuctionGroup;
        v23 = 0;
        if ( v21 != v22 )
        {
          if ( v21 <= (unsigned int)v22 )
          {
            if ( v21 < (unsigned int)v22 )
              v23 = 1;
          }
          else
          {
            v23 = -1;
          }
        }
        v11 = -v23;
        if ( !v11 )
        {
          v24 = pkMSItem2->m_hItem;
          v25 = pkMSItem1->m_hItem;
          v26 = 0;
          if ( v25 == v24 )
            return 0;
          if ( v25 > v24 )
          {
            LOBYTE(v3) = 1;
            return v3;
          }
          if ( v25 < v24 )
            v26 = 1;
          v11 = -v26;
        }
      }
    }
LABEL_52:
    LOBYTE(v3) = v3 > 0;
    return v3;
  }
  LOBYTE(v3) = 0;
  return v3;
}

//----- (00549430) --------------------------------------------------------
bool __thiscall MarketSearchWin::SortByLevel::operator__(MarketSearchWin::SortByLevel *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2)
{
  ItemInfo *v4; // ebx@8
  Item *v5; // edi@8
  ItemInfo *v6; // ecx@8
  unsigned int v7; // edx@8
  unsigned int v8; // esi@8
  int v9; // eax@8
  unsigned int v10; // ecx@17
  unsigned int v11; // esi@17
  unsigned int v12; // edx@17
  unsigned int v13; // ebx@17
  bool v14; // cf@18
  bool v15; // zf@18
  AuctionGroup v16; // ecx@31
  AuctionGroup v17; // edx@31
  unsigned int v18; // ecx@37
  unsigned int v19; // edx@37
  MarketSearchWin::MarketSort *thisa; // [sp+4h] [bp-8h]@1
  Item *pkItem2; // [sp+8h] [bp-4h]@8

  thisa = (MarketSearchWin::MarketSort *)this;
  if ( pkMSItem1->m_hItem == -1 )
  {
    if ( pkMSItem2->m_hItem == -1 || pkMSItem2->m_hItem != -1 )
      return 0;
  }
  else
  {
    if ( pkMSItem2->m_hItem == -1 )
      return 1;
  }
  v4 = pkMSItem2->m_pkItem.m_pObject->m_pkInfo;
  v5 = pkMSItem1->m_pkItem.m_pObject;
  v6 = v5->m_pkInfo;
  v7 = v4->DemandLv;
  v8 = v6->DemandLv;
  pkItem2 = pkMSItem2->m_pkItem.m_pObject;
  v9 = 0;
  if ( v8 != v7 )
  {
    if ( (signed int)v8 <= (signed int)v7 )
    {
      if ( (signed int)v8 < (signed int)v7 )
        v9 = 1;
    }
    else
    {
      v9 = -1;
    }
  }
  if ( !v9 )
  {
    if ( v6 == (ItemInfo *)-34 || v4 == (ItemInfo *)-34 )
      return 0;
    v9 = -strcmp(v6->Name, v4->Name);
    if ( !v9 )
    {
      v10 = LODWORD(pkMSItem2->m_nPrice);
      v11 = HIDWORD(pkMSItem2->m_nPrice);
      v12 = LODWORD(pkMSItem1->m_nPrice);
      v13 = HIDWORD(pkMSItem1->m_nPrice);
      v9 = 0;
      if ( v12 == v10 )
      {
        v14 = v13 < v11;
        v15 = v13 == v11;
        if ( v13 == v11 )
          goto LABEL_29;
      }
      else
      {
        v14 = v13 < v11;
        v15 = v13 == v11;
      }
      if ( v14 || v14 | v15 && v12 <= v10 )
      {
        if ( v13 <= v11 && (v13 < v11 || v12 < v10) )
          v9 = 1;
      }
      else
      {
        v9 = -1;
      }
LABEL_29:
      if ( !v9 )
      {
        v9 = MarketSearchWin::MarketSort::CompMainGroup(thisa, v5, pkItem2, 0);
        if ( !v9 )
        {
          v16 = v5->m_pkInfo->ItemAuctionGroup;
          v17 = pkItem2->m_pkInfo->ItemAuctionGroup;
          v9 = 0;
          if ( v16 != v17 )
          {
            if ( v16 <= (unsigned int)v17 )
            {
              if ( v16 < (unsigned int)v17 )
                v9 = 1;
            }
            else
            {
              v9 = -1;
            }
          }
          if ( !v9 )
          {
            v18 = pkMSItem2->m_hItem;
            v19 = pkMSItem1->m_hItem;
            v9 = 0;
            if ( v19 == v18 )
              return 0;
            if ( v19 > v18 )
              return 0;
            if ( v19 < v18 )
              v9 = 1;
          }
        }
      }
      return v9 > 0;
    }
  }
  return v9 > 0;
}

//----- (005495C0) --------------------------------------------------------
bool __thiscall MarketSearchWin::SortByLevelDesc::operator__(MarketSearchWin::SortByLevelDesc *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2)
{
  int v3; // eax@3
  ItemInfo *v4; // ebx@8
  Item *v5; // edi@8
  ItemInfo *v6; // ecx@8
  unsigned int v7; // edx@8
  unsigned int v8; // esi@8
  signed int v9; // eax@8
  int v10; // eax@13
  int v11; // eax@14
  int v12; // edx@14
  bool v13; // cf@16
  unsigned __int8 v14; // bl@18
  unsigned int v15; // ecx@22
  unsigned int v16; // esi@22
  unsigned int v17; // edx@22
  unsigned int v18; // ebx@22
  signed int v19; // eax@22
  bool v20; // cf@23
  bool v21; // zf@23
  AuctionGroup v22; // ecx@38
  AuctionGroup v23; // edx@38
  signed int v24; // eax@38
  unsigned int v25; // ecx@44
  unsigned int v26; // edx@44
  signed int v27; // eax@44
  MarketSearchWin::MarketSort *thisa; // [sp+4h] [bp-8h]@1
  Item *pkItem2; // [sp+8h] [bp-4h]@8

  thisa = (MarketSearchWin::MarketSort *)this;
  if ( pkMSItem1->m_hItem == -1 )
  {
    if ( pkMSItem2->m_hItem == -1 || pkMSItem2->m_hItem != -1 )
    {
      LOBYTE(v3) = 0;
      return v3;
    }
  }
  else
  {
    if ( pkMSItem2->m_hItem == -1 )
    {
      LOBYTE(v3) = 1;
      return v3;
    }
  }
  v4 = pkMSItem2->m_pkItem.m_pObject->m_pkInfo;
  v5 = pkMSItem1->m_pkItem.m_pObject;
  v6 = v5->m_pkInfo;
  v7 = v4->DemandLv;
  v8 = v6->DemandLv;
  pkItem2 = pkMSItem2->m_pkItem.m_pObject;
  v9 = 0;
  if ( v8 != v7 )
  {
    if ( (signed int)v8 <= (signed int)v7 )
    {
      if ( (signed int)v8 < (signed int)v7 )
        v9 = 1;
    }
    else
    {
      v9 = -1;
    }
  }
  v10 = -v9;
  if ( v10 )
    goto LABEL_51;
  v11 = (int)v6->Name;
  v12 = (int)v4->Name;
  if ( v6 != (ItemInfo *)-34 && v4 != (ItemInfo *)-34 )
  {
    while ( 1 )
    {
      v13 = *(_BYTE *)v11 < *(_BYTE *)v12;
      if ( *(_BYTE *)v11 != *(_BYTE *)v12 )
        break;
      if ( !*(_BYTE *)v11 )
        goto LABEL_20;
      v14 = *(_BYTE *)(v11 + 1);
      v13 = v14 < *(_BYTE *)(v12 + 1);
      if ( v14 != *(_BYTE *)(v12 + 1) )
        break;
      v11 += 2;
      v12 += 2;
      if ( !v14 )
      {
LABEL_20:
        v10 = 0;
        goto LABEL_21;
      }
    }
    v10 = -v13 - (v13 - 1);
LABEL_21:
    if ( v10 )
      goto LABEL_51;
    v15 = LODWORD(pkMSItem2->m_nPrice);
    v16 = HIDWORD(pkMSItem2->m_nPrice);
    v17 = LODWORD(pkMSItem1->m_nPrice);
    v18 = HIDWORD(pkMSItem1->m_nPrice);
    v19 = 0;
    if ( v17 == v15 )
    {
      v20 = v18 < v16;
      v21 = v18 == v16;
      if ( v18 == v16 )
        goto LABEL_36;
    }
    else
    {
      v20 = v18 < v16;
      v21 = v18 == v16;
    }
    if ( v20 || v20 | v21 && v17 <= v15 )
    {
      if ( v18 <= v16 && (v18 < v16 || v17 < v15) )
        v19 = 1;
    }
    else
    {
      v19 = -1;
    }
LABEL_36:
    v10 = -v19;
    if ( !v10 )
    {
      v10 = MarketSearchWin::MarketSort::CompMainGroup(thisa, v5, pkItem2, 1);
      if ( !v10 )
      {
        v22 = v5->m_pkInfo->ItemAuctionGroup;
        v23 = pkItem2->m_pkInfo->ItemAuctionGroup;
        v24 = 0;
        if ( v22 != v23 )
        {
          if ( v22 <= (unsigned int)v23 )
          {
            if ( v22 < (unsigned int)v23 )
              v24 = 1;
          }
          else
          {
            v24 = -1;
          }
        }
        v10 = -v24;
        if ( !v10 )
        {
          v25 = pkMSItem2->m_hItem;
          v26 = pkMSItem1->m_hItem;
          v27 = 0;
          if ( v26 == v25 )
            return 0;
          if ( v26 > v25 )
          {
            LOBYTE(v3) = 1;
            return v3;
          }
          if ( v26 < v25 )
            v27 = 1;
          v10 = -v27;
        }
      }
    }
LABEL_51:
    LOBYTE(v3) = v3 > 0;
    return v3;
  }
  LOBYTE(v3) = 0;
  return v3;
}

//----- (00549760) --------------------------------------------------------
bool __thiscall MarketSearchWin::SortByMoney::operator__(MarketSearchWin::SortByMoney *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2)
{
  unsigned int v4; // edx@8
  unsigned int v5; // ebx@8
  unsigned int v6; // esi@8
  Item *v7; // edi@8
  unsigned int v8; // ecx@8
  int v9; // eax@8
  bool v10; // cf@9
  bool v11; // zf@9
  unsigned int v12; // ecx@24
  unsigned int v13; // edx@24
  AuctionGroup v14; // ecx@31
  AuctionGroup v15; // edx@31
  unsigned int v16; // ecx@37
  unsigned int v17; // edx@37
  MarketSearchWin::MarketSort *thisa; // [sp+4h] [bp-8h]@1
  Item *pkItem2; // [sp+8h] [bp-4h]@8

  thisa = (MarketSearchWin::MarketSort *)this;
  if ( pkMSItem1->m_hItem == -1 )
  {
    if ( pkMSItem2->m_hItem == -1 || pkMSItem2->m_hItem != -1 )
      return 0;
  }
  else
  {
    if ( pkMSItem2->m_hItem == -1 )
      return 1;
  }
  v4 = LODWORD(pkMSItem2->m_nPrice);
  v5 = HIDWORD(pkMSItem2->m_nPrice);
  v6 = LODWORD(pkMSItem1->m_nPrice);
  pkItem2 = pkMSItem2->m_pkItem.m_pObject;
  v7 = pkMSItem1->m_pkItem.m_pObject;
  v8 = HIDWORD(pkMSItem1->m_nPrice);
  v9 = 0;
  if ( v6 == v4 )
  {
    v10 = v8 < v5;
    v11 = v8 == v5;
    if ( v8 == v5 )
      goto LABEL_20;
  }
  else
  {
    v10 = v8 < v5;
    v11 = v8 == v5;
  }
  if ( v10 || v10 | v11 && v6 <= v4 )
  {
    if ( v8 <= v5 && (v8 < v5 || v6 < v4) )
      v9 = 1;
  }
  else
  {
    v9 = -1;
  }
LABEL_20:
  if ( !v9 )
  {
    if ( v7->m_pkInfo == (ItemInfo *)-34 || pkItem2->m_pkInfo == (ItemInfo *)-34 )
      return 0;
    v9 = -strcmp(v7->m_pkInfo->Name, pkItem2->m_pkInfo->Name);
    if ( !v9 )
    {
      v12 = pkItem2->m_pkInfo->DemandLv;
      v13 = v7->m_pkInfo->DemandLv;
      v9 = 0;
      if ( v13 != v12 )
      {
        if ( (signed int)v13 <= (signed int)v12 )
        {
          if ( (signed int)v13 < (signed int)v12 )
            v9 = 1;
        }
        else
        {
          v9 = -1;
        }
      }
      if ( !v9 )
      {
        v9 = MarketSearchWin::MarketSort::CompMainGroup(thisa, v7, pkItem2, 0);
        if ( !v9 )
        {
          v14 = v7->m_pkInfo->ItemAuctionGroup;
          v15 = pkItem2->m_pkInfo->ItemAuctionGroup;
          v9 = 0;
          if ( v14 != v15 )
          {
            if ( v14 <= (unsigned int)v15 )
            {
              if ( v14 < (unsigned int)v15 )
                v9 = 1;
            }
            else
            {
              v9 = -1;
            }
          }
          if ( !v9 )
          {
            v16 = pkMSItem2->m_hItem;
            v17 = pkMSItem1->m_hItem;
            v9 = 0;
            if ( v17 == v16 )
              return 0;
            if ( v17 > v16 )
              return 0;
            if ( v17 < v16 )
              v9 = 1;
          }
        }
      }
    }
  }
  return v9 > 0;
}

//----- (005498F0) --------------------------------------------------------
bool __thiscall MarketSearchWin::SortByMoneyDesc::operator__(MarketSearchWin::SortByMoneyDesc *this, MarketSearchItem *pkMSItem1, MarketSearchItem *pkMSItem2)
{
  int v3; // eax@3
  unsigned int v4; // edx@8
  unsigned int v5; // ebx@8
  unsigned int v6; // esi@8
  Item *v7; // edi@8
  unsigned int v8; // ecx@8
  signed int v9; // eax@8
  bool v10; // cf@9
  bool v11; // zf@9
  int v12; // eax@20
  int v13; // edx@21
  int v14; // eax@21
  bool v15; // cf@23
  unsigned __int8 v16; // bl@25
  unsigned int v17; // ecx@29
  unsigned int v18; // edx@29
  signed int v19; // eax@29
  AuctionGroup v20; // ecx@39
  AuctionGroup v21; // edx@39
  signed int v22; // eax@39
  unsigned int v23; // ecx@45
  unsigned int v24; // edx@45
  signed int v25; // eax@45
  MarketSearchWin::MarketSort *thisa; // [sp+4h] [bp-8h]@1
  Item *pkItem2; // [sp+8h] [bp-4h]@8

  thisa = (MarketSearchWin::MarketSort *)this;
  if ( pkMSItem1->m_hItem == -1 )
  {
    if ( pkMSItem2->m_hItem == -1 || pkMSItem2->m_hItem != -1 )
    {
      LOBYTE(v3) = 0;
      return v3;
    }
  }
  else
  {
    if ( pkMSItem2->m_hItem == -1 )
    {
      LOBYTE(v3) = 1;
      return v3;
    }
  }
  v4 = LODWORD(pkMSItem2->m_nPrice);
  v5 = HIDWORD(pkMSItem2->m_nPrice);
  v6 = LODWORD(pkMSItem1->m_nPrice);
  pkItem2 = pkMSItem2->m_pkItem.m_pObject;
  v7 = pkMSItem1->m_pkItem.m_pObject;
  v8 = HIDWORD(pkMSItem1->m_nPrice);
  v9 = 0;
  if ( v6 != v4 )
  {
    v10 = v8 < v5;
    v11 = v8 == v5;
    goto LABEL_12;
  }
  v10 = v8 < v5;
  v11 = v8 == v5;
  if ( v8 != v5 )
  {
LABEL_12:
    if ( v10 || v10 | v11 && v6 <= v4 )
    {
      if ( v8 <= v5 && (v8 < v5 || v6 < v4) )
        v9 = 1;
    }
    else
    {
      v9 = -1;
    }
  }
  v12 = -v9;
  if ( v12 )
    goto LABEL_52;
  v13 = (int)pkItem2->m_pkInfo->Name;
  v14 = (int)v7->m_pkInfo->Name;
  if ( v7->m_pkInfo != (ItemInfo *)-34 && pkItem2->m_pkInfo != (ItemInfo *)-34 )
  {
    while ( 1 )
    {
      v15 = *(_BYTE *)v14 < *(_BYTE *)v13;
      if ( *(_BYTE *)v14 != *(_BYTE *)v13 )
        break;
      if ( !*(_BYTE *)v14 )
        goto LABEL_27;
      v16 = *(_BYTE *)(v14 + 1);
      v15 = v16 < *(_BYTE *)(v13 + 1);
      if ( v16 != *(_BYTE *)(v13 + 1) )
        break;
      v14 += 2;
      v13 += 2;
      if ( !v16 )
      {
LABEL_27:
        v12 = 0;
        goto LABEL_28;
      }
    }
    v12 = -v15 - (v15 - 1);
LABEL_28:
    if ( !v12 )
    {
      v17 = pkItem2->m_pkInfo->DemandLv;
      v18 = v7->m_pkInfo->DemandLv;
      v19 = 0;
      if ( v18 != v17 )
      {
        if ( (signed int)v18 <= (signed int)v17 )
        {
          if ( (signed int)v18 < (signed int)v17 )
            v19 = 1;
        }
        else
        {
          v19 = -1;
        }
      }
      v12 = -v19;
      if ( !v12 )
      {
        v12 = MarketSearchWin::MarketSort::CompMainGroup(thisa, v7, pkItem2, 1);
        if ( !v12 )
        {
          v20 = v7->m_pkInfo->ItemAuctionGroup;
          v21 = pkItem2->m_pkInfo->ItemAuctionGroup;
          v22 = 0;
          if ( v20 != v21 )
          {
            if ( v20 <= (unsigned int)v21 )
            {
              if ( v20 < (unsigned int)v21 )
                v22 = 1;
            }
            else
            {
              v22 = -1;
            }
          }
          v12 = -v22;
          if ( !v12 )
          {
            v23 = pkMSItem2->m_hItem;
            v24 = pkMSItem1->m_hItem;
            v25 = 0;
            if ( v24 == v23 )
              return 0;
            if ( v24 > v23 )
            {
              LOBYTE(v3) = 1;
              return v3;
            }
            if ( v24 < v23 )
              v25 = 1;
            v12 = -v25;
          }
        }
      }
    }
LABEL_52:
    LOBYTE(v3) = v3 > 0;
    return v3;
  }
  LOBYTE(v3) = 0;
  return v3;
}

//----- (00549A90) --------------------------------------------------------
void __thiscall MarketSearchWin::InitItemSearchUI(MarketSearchWin *this, UIUtil *ui)
{
  MarketSearchWin *v2; // esi@1
  D3DXCOLOR v3; // ST0C_16@1
  char *v4; // eax@1
  EditWinEx *v5; // eax@1
  ColumnBut *v6; // eax@1
  D3DXCOLOR v7; // ST0C_16@1
  char *v8; // eax@1
  PgWinText *v9; // eax@1
  D3DXCOLOR v10; // ST14_16@1
  char *v11; // eax@1
  char *v12; // eax@1
  D3DXCOLOR v13; // ST14_16@1
  char *v14; // eax@1

  v2 = this;
  *(_QWORD *)&v3.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v3.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v4 = TextData3::Get(0x638636Eu);
  UIUtil::CreateText(ui, "Text_ItemName", v4, 0, COERCE_D3DXCOLOR(v3.r), 4u, 0, 0);
  v5 = UIUtil::CreateEditEx(ui, "Text_ItemNameInput", 33, NORMAL, 0, 0);
  v2->m_pkItemSearchInput = v5;
  EditWinEx::SetFocusClear(v5, 1);
  ((void (__stdcall *)(_DWORD))v2->m_pkItemSearchInput->baseclass_0.m_spEditWin.m_pObject->baseclass_0.vfptr[13].__vecDelDtor)(1);
  v6 = UIUtil::CreateCheckButton(ui, 0xEu, "MyNmCh", 0, 2);
  v2->m_pkMyClassViewBtn = v6;
  v6->m_bCheck = 1;
  *(_QWORD *)&v7.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v7.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v8 = TextData3::Get(0xF1BE820u);
  v9 = UIUtil::CreateText(ui, "Text01", v8, 0, COERCE_D3DXCOLOR(v7.r), 5u, 0, 0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v9,
    4u);
  v2->m_pkItemSearch = UIUtil::CreateButton(ui, 9u, "SearchBtn", 0, 3);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v11 = TextData3::Get(0xE37156Cu);
  UIUtil::CreateAttachedText(ui, &v2->m_pkItemSearch->baseclass_0.baseclass_0, v11, COERCE_D3DXCOLOR(v10.r), 5u);
  v2->m_pkStartSearchBtn = UIUtil::CreateButton(ui, 0xAu, "Btn01", 0, 3);
  v12 = TextData3::Get(0x738AA08Fu);
  PgWin::SetToolTipWinText(&v2->m_pkStartSearchBtn->baseclass_0.baseclass_0, v12);
  v2->m_pkStartSearchBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v14 = TextData3::Get(0x60C4ABE4u);
  UIUtil::CreateAttachedText(ui, &v2->m_pkStartSearchBtn->baseclass_0.baseclass_0, v14, COERCE_D3DXCOLOR(v13.r), 5u);
}

//----- (00549C90) --------------------------------------------------------
void __thiscall MarketSearchWin::InitCategoryComboBoxUI(MarketSearchWin *this, UIUtil *ui)
{
  MarketSearchWin *v2; // esi@1
  D3DXCOLOR v3; // ST0C_16@1
  char *v4; // eax@1
  PgWin *v5; // eax@1
  D3DXCOLOR v6; // ST14_16@1
  D3DXCOLOR v7; // ST14_16@1
  char *v8; // eax@1
  D3DXCOLOR v9; // ST14_16@1
  char *v10; // eax@1
  D3DXCOLOR v11; // ST14_16@1
  char *v12; // eax@1
  D3DXCOLOR v13; // ST14_16@1
  char *v14; // eax@1
  D3DXCOLOR v15; // ST14_16@1
  char *v16; // eax@1
  D3DXCOLOR v17; // ST14_16@1
  char *v18; // eax@1
  D3DXCOLOR v19; // ST14_16@1
  char *v20; // eax@1
  D3DXCOLOR v21; // ST14_16@1
  char *v22; // eax@1
  PgWinText *v23; // eax@1
  PgWinText *v24; // ecx@1
  NiRefObjectVtbl *v25; // edi@1
  int v26; // eax@1

  v2 = this;
  *(_QWORD *)&v3.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v3.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v4 = TextData3::Get(0x1E3E6371u);
  UIUtil::CreateText(ui, "Text_ItemGrade", v4, 0, COERCE_D3DXCOLOR(v3.r), 4u, 0, 0);
  v2->m_pkChosenItemCategoryBG = UIUtil::CreateSpr(ui, "ItemGradePulldown", 0);
  v5 = (PgWin *)UIUtil::CreateButton(ui, 0, "ItemGrade", 0, 3);
  v2->m_pkItemCategory[0] = (PgWinBut *)v5;
  *(_QWORD *)&v6.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v6.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkItemCategoryText[0] = UIUtil::CreateAttachedText(ui, v5, "-", COERCE_D3DXCOLOR(v6.r), 5u);
  v2->m_pkItemCategory[1] = UIUtil::CreateButton(ui, 0, "ItemGrade01", 0, 3);
  v2->m_pkItemCategory[2] = UIUtil::CreateButton(ui, 1u, "Text_ItemGradeList01", 0, 3);
  *(_QWORD *)&v7.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v7.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v8 = TextData3::Get(0xA912160Du);
  v2->m_pkItemCategoryText[2] = UIUtil::CreateAttachedText(
                                  ui,
                                  &v2->m_pkItemCategory[2]->baseclass_0.baseclass_0,
                                  v8,
                                  COERCE_D3DXCOLOR(v7.r),
                                  5u);
  v2->m_pkItemCategory[3] = UIUtil::CreateButton(ui, 2u, "Text_ItemGradeList02", 0, 3);
  *(_QWORD *)&v9.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v9.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v10 = TextData3::Get(0xA913160Du);
  v2->m_pkItemCategoryText[3] = UIUtil::CreateAttachedText(
                                  ui,
                                  &v2->m_pkItemCategory[3]->baseclass_0.baseclass_0,
                                  v10,
                                  COERCE_D3DXCOLOR(v9.r),
                                  5u);
  v2->m_pkItemCategory[4] = UIUtil::CreateButton(ui, 3u, "Text_ItemGradeList03", 0, 3);
  *(_QWORD *)&v11.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v11.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v12 = TextData3::Get(0xA914160Du);
  v2->m_pkItemCategoryText[4] = UIUtil::CreateAttachedText(
                                  ui,
                                  &v2->m_pkItemCategory[4]->baseclass_0.baseclass_0,
                                  v12,
                                  COERCE_D3DXCOLOR(v11.r),
                                  5u);
  v2->m_pkItemCategory[5] = UIUtil::CreateButton(ui, 4u, "Text_ItemGradeList04", 0, 3);
  *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v14 = TextData3::Get(0xA915160Du);
  v2->m_pkItemCategoryText[5] = UIUtil::CreateAttachedText(
                                  ui,
                                  &v2->m_pkItemCategory[5]->baseclass_0.baseclass_0,
                                  v14,
                                  COERCE_D3DXCOLOR(v13.r),
                                  5u);
  v2->m_pkItemCategory[6] = UIUtil::CreateButton(ui, 5u, "Text_ItemGradeList05", 0, 3);
  *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v16 = TextData3::Get(0xA916160Du);
  v2->m_pkItemCategoryText[6] = UIUtil::CreateAttachedText(
                                  ui,
                                  &v2->m_pkItemCategory[6]->baseclass_0.baseclass_0,
                                  v16,
                                  COERCE_D3DXCOLOR(v15.r),
                                  5u);
  v2->m_pkItemCategory[7] = UIUtil::CreateButton(ui, 6u, "Text_ItemGradeList06", 0, 3);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v18 = TextData3::Get(0xA917160Du);
  v2->m_pkItemCategoryText[7] = UIUtil::CreateAttachedText(
                                  ui,
                                  &v2->m_pkItemCategory[7]->baseclass_0.baseclass_0,
                                  v18,
                                  COERCE_D3DXCOLOR(v17.r),
                                  5u);
  v2->m_pkItemCategory[8] = UIUtil::CreateButton(ui, 7u, "Text_ItemGradeList07", 0, 3);
  *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v20 = TextData3::Get(0xA918160Du);
  v2->m_pkItemCategoryText[8] = UIUtil::CreateAttachedText(
                                  ui,
                                  &v2->m_pkItemCategory[8]->baseclass_0.baseclass_0,
                                  v20,
                                  COERCE_D3DXCOLOR(v19.r),
                                  5u);
  v2->m_pkItemCategory[9] = UIUtil::CreateButton(ui, 8u, "Text_ItemGradeList08", 0, 3);
  *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v22 = TextData3::Get(0xA919160Du);
  v23 = UIUtil::CreateAttachedText(
          ui,
          &v2->m_pkItemCategory[9]->baseclass_0.baseclass_0,
          v22,
          COERCE_D3DXCOLOR(v21.r),
          5u);
  v24 = v2->m_pkItemCategoryText[0];
  v2->m_pkItemCategoryText[9] = v23;
  v25 = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v26 = ((int (*)(void))v2->m_pkItemCategoryText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  v25[118].__vecDelDtor((NiRefObject *)v2->m_pkItemCategoryText[0], v26);
  v2->m_uiSelectCategory = 0;
}

//----- (0054A0C0) --------------------------------------------------------
void __thiscall MarketSearchWin::OnSearch(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  PgFrameWork *v2; // ecx@1
  PgWinBut *v3; // ecx@4
  int v4; // esi@5
  char *v5; // edi@5

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( Timer::ms_fCurTime - v1->m_fCurrentDelayTime <= 3.0 )
  {
    v4 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v5 = TextData3::Get(0xE9DFDC12u);
    if ( *(_DWORD *)(v4 + 4) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
      if ( *(_DWORD *)(v4 + 4) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  }
  else
  {
    v1->m_bSearching = 1;
    if ( v2 )
    {
      GameFrameWork::NcBoothSearchItemListCategorized(
        (GameFrameWork *)v2,
        v1->m_uiSelectCategory,
        v1->m_pkMyClassViewBtn->m_bCheck,
        0);
      SlideListWin::RemoveAllList(v1->m_pkItemViewSlideListWin);
      SlideListWin::UpdateViewList(v1->m_pkItemViewSlideListWin);
    }
    v3 = v1->m_pkItemSearch;
    v1->m_fCurrentDelayTime = Timer::ms_fCurTime;
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0054A1A0) --------------------------------------------------------
void __thiscall MarketSearchWin::OnSearchBooth(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  PgFrameWork *v2; // ebx@1
  int v3; // eax@2
  int v4; // esi@3
  char *v5; // edi@3
  int v6; // eax@7
  unsigned __int16 v7; // di@7

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    v3 = SlideListWin::GetCurSelIndex(v1->m_pkItemViewSlideListWin);
    if ( v3 >= 0 )
    {
      v6 = *(_DWORD *)(*(_DWORD *)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v3);
      v7 = *(_WORD *)(v6 + 28);
      GameFrameWork::NcBoothSearchBoothPosition((GameFrameWork *)v2, *(_DWORD *)(v6 + 24), *(_WORD *)(v6 + 28));
      v1->m_hFindBooth = v7;
    }
    else
    {
      v4 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v5 = TextData3::Get(0xF915577u);
      if ( *(_DWORD *)(v4 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
        if ( *(_DWORD *)(v4 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
    }
  }
}

//----- (0054A240) --------------------------------------------------------
void __thiscall MarketSearchWin::OnShowWin(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  MsgBox *v2; // ecx@1
  PgFrameWork *v3; // eax@3

  v1 = this;
  v2 = this->m_pkSearchingMsgBox;
  if ( v2 )
  {
    MsgBox::CloseWithOK(v2);
    v1->m_pkSearchingMsgBox = 0;
  }
  v1->m_hFindBooth = -1;
  MarketSearchWin::MakeDefaultAll(v1);
  SlideListWin::RemoveAllList(v1->m_pkItemViewSlideListWin);
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::NcBoothSearchItemListCategorized((GameFrameWork *)v3, 0, 1, 1);
}

//----- (0054A2A0) --------------------------------------------------------
bool __thiscall MarketSearchWin::SetListItem(MarketSearchWin *this, MarketSearchItem *pkMarketSearchItem)
{
  MarketSearchWin *v2; // esi@1
  bool result; // al@2
  Item *v4; // eax@3
  ItemInfo *v5; // eax@4
  SlideListWin *v6; // ecx@5
  int v7; // ebx@5
  char *v8; // eax@5
  char *v9; // eax@5
  char *v10; // eax@5
  char *v11; // eax@5
  int v12; // ST04_4@5
  char *v13; // eax@5
  D3DXCOLOR FontColor; // [sp+8h] [bp-18h]@5
  int v15; // [sp+18h] [bp-8h]@5
  ItemInfo *pkInfo; // [sp+1Ch] [bp-4h]@4

  v2 = this;
  if ( pkMarketSearchItem
    && (v4 = pkMarketSearchItem->m_pkItem.m_pObject) != 0
    && (v5 = v4->m_pkInfo, (pkInfo = v5) != 0) )
  {
    MarketSearchWin::GetItemFontTable(this, &FontColor, v5->ItemGradeType);
    FontColor.r = (double)(unsigned __int8)(signed int)(FontColor.r * 255.0);
    FontColor.g = (double)(unsigned __int8)(signed int)(FontColor.g * 255.0);
    v15 = (signed int)(255.0 * FontColor.b);
    v6 = v2->m_pkItemViewSlideListWin;
    FontColor.b = (double)(unsigned __int8)(signed int)(255.0 * FontColor.b);
    v7 = SlideListWin::AddText(v6, &byte_99EBCA);
    SlideListWin::SetText(v2->m_pkItemViewSlideListWin, v7, 1u, pkInfo->Name);
    SlideListWin::SetFontColor(
      v2->m_pkItemViewSlideListWin,
      v7,
      1u,
      (signed int)FontColor.r,
      (signed int)FontColor.g,
      (signed int)FontColor.b);
    v8 = fs("%d");
    SlideListWin::SetText(v2->m_pkItemViewSlideListWin, v7, 2u, v8);
    User::GetGem(pkMarketSearchItem->m_nPrice);
    v9 = fs("%d");
    SlideListWin::SetText(v2->m_pkItemViewSlideListWin, v7, 3u, v9);
    User::GetGold(pkMarketSearchItem->m_nPrice);
    v10 = fs("%d");
    SlideListWin::SetText(v2->m_pkItemViewSlideListWin, v7, 4u, v10);
    User::GetSilver(pkMarketSearchItem->m_nPrice);
    v11 = fs("%d");
    SlideListWin::SetText(v2->m_pkItemViewSlideListWin, v7, 5u, v11);
    v12 = User::GetCopper(pkMarketSearchItem->m_nPrice);
    v13 = fs("%d");
    SlideListWin::SetText(v2->m_pkItemViewSlideListWin, v7, 6u, v13);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0054A490) --------------------------------------------------------
bool __thiscall MarketSearchWin::SetListIcon(MarketSearchWin *this, unsigned int uiIndex, Item *pkItem)
{
  bool result; // al@2
  SlideListWin *v4; // eax@3
  int v5; // esi@4
  int v6; // ecx@5
  int v7; // eax@5
  unsigned int v8; // edi@6
  const char *v9; // eax@7
  ItemIcon *v10; // edi@11
  int v11; // esi@11
  int v12; // eax@11

  if ( pkItem )
  {
    v4 = this->m_pkItemViewSlideListWin;
    if ( (signed int)uiIndex < (signed int)((char *)v4->m_vecButList.baseclass_0._Mylast
                                          - *(_DWORD *)&v4->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2
      && (v5 = *(_DWORD *)(*(_DWORD *)&v4->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex)) != 0
      && (v6 = *(_DWORD *)(v5 + 364), v7 = *(_DWORD *)(v5 + 368), v6 != v7)
      && (v8 = 0, (v7 - v6) >> 2) )
    {
      while ( 1 )
      {
        v9 = *(const char **)(*(_DWORD *)(*(_DWORD *)(v5 + 364) + 4 * v8) + 8);
        if ( v9 )
        {
          if ( !_strcmpi(v9, "InvItemSlot001_icon") )
            break;
        }
        ++v8;
        if ( v8 >= (*(_DWORD *)(v5 + 368) - *(_DWORD *)(v5 + 364)) >> 2 )
          goto LABEL_10;
      }
      v10 = *(ItemIcon **)(*(_DWORD *)(v5 + 364) + 4 * v8);
      (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 164))(v5);
      v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5);
      v12 = ((int (__thiscall *)(ItemIcon *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v10);
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
        (NiRefObject *)v10,
        (unsigned int)(v11 - v12) >> 1);
      ItemIcon::SetItem(v10, pkItem, 1);
      ItemInfoWin::SetItemInfo(g_pkItemInfoWin, pkItem);
      result = 1;
    }
    else
    {
LABEL_10:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0054A590) --------------------------------------------------------
void __thiscall MarketSearchWin::UpdateMeWin(MarketSearchWin *this, float fCutTime)
{
  MarketSearchWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pkItemViewSlideListWin, v2->m_pkSlideBar);
  if ( !(unsigned __int8)((int (*)(void))v2->m_pkItemSearch->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
  {
    if ( Timer::ms_fCurTime - v2->m_fCurrentDelayTime > 3.0 )
      ((void (__stdcall *)(_DWORD))v2->m_pkItemSearch->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0054A600) --------------------------------------------------------
void __thiscall MarketSearchWin::RefreshItemViewList(MarketSearchWin *this)
{
  MarketSearchWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  int v3; // eax@1
  int v4; // esi@2
  unsigned int v5; // ebx@2
  int v6; // eax@3
  int v7; // eax@5
  Item *v8; // eax@7
  int ColumnNum; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_pkItemViewSlideListWin;
  v3 = v2->m_nViewStartPos;
  if ( v3 >= 0 )
  {
    ColumnNum = 0;
    v4 = v3
       + ((signed int)((char *)v2->m_vecButList.baseclass_0._Mylast
                     - *(_DWORD *)&v2->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    v5 = v2->m_nViewStartPos;
    if ( v3 < (unsigned int)v4 )
    {
      do
      {
        v6 = (signed int)((char *)v1->m_vecMarketSearchItem.baseclass_0._Mylast
                        - *(_DWORD *)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
        if ( !v6 || v6 - 1 < v5 )
          break;
        v7 = *(_DWORD *)(*(_DWORD *)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
        if ( *(_DWORD *)(v7 + 24) == -1 )
        {
          ++v4;
        }
        else
        {
          v8 = *(Item **)(v7 + 8);
          if ( v8 )
            MarketSearchWin::SetListIcon(v1, ColumnNum++, v8);
          else
            ++v4;
        }
        ++v5;
      }
      while ( v5 < v4 );
    }
  }
  SlideListWin::UpdateViewList(v1->m_pkItemViewSlideListWin);
}

//----- (0054A6A0) --------------------------------------------------------
void __thiscall MarketSearchWin::RefreshItemViewSlide(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkSlideBar;
  if ( v2 )
  {
    v3 = v1->m_pkItemViewSlideListWin;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pkItemViewSlideListWin->m_nViewStartPos = v1->m_pkSlideBar->m_nCurPos;
      MarketSearchWin::RefreshItemViewList(v1);
    }
  }
}

//----- (0054A6F0) --------------------------------------------------------
void __thiscall MarketSearchWin::MarketSearchWin(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MarketSearchWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MarketSearchWin::_vftable_;
  v1->m_pkChosenItemCategoryBG = 0;
  _eh_vector_constructor_iterator_(
    v1->m_ColumnWinName,
    0x1Cu,
    9,
    (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  v1->m_pkMyClassViewBtn = 0;
  v1->m_pkItemSearch = 0;
  v1->m_pkStartSearchBtn = 0;
  v1->m_pkItemSearchInput = 0;
  v1->m_pkItemViewSlideListWin = 0;
  v1->m_pkSlideBar = 0;
  *(_DWORD *)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecMarketSearchItem.baseclass_0._Mylast = 0;
  v1->m_vecMarketSearchItem.baseclass_0._Myend = 0;
  v1->m_fCurrentDelayTime = 0.0;
  v1->m_iVecLastIndex = 0;
  v1->m_bSearching = 0;
  v1->m_pkSearchingMsgBox = 0;
  v1->m_uiSortState = 0;
  v1->m_hFindBooth = -1;
  v1->m_pkItemCategory[0] = 0;
  v1->m_pkItemCategoryText[0] = 0;
  v1->m_pkItemCategory[1] = 0;
  v1->m_pkItemCategoryText[1] = 0;
  v1->m_pkItemCategory[2] = 0;
  v1->m_pkItemCategoryText[2] = 0;
  v1->m_pkItemCategory[3] = 0;
  v1->m_pkItemCategoryText[3] = 0;
  v1->m_pkItemCategory[4] = 0;
  v1->m_pkItemCategoryText[4] = 0;
  v1->m_pkItemCategory[5] = 0;
  v1->m_pkItemCategoryText[5] = 0;
  v1->m_pkItemCategory[6] = 0;
  v1->m_pkItemCategoryText[6] = 0;
  v1->m_pkItemCategory[7] = 0;
  v1->m_pkItemCategoryText[7] = 0;
  v1->m_pkItemCategory[8] = 0;
  v1->m_pkItemCategoryText[8] = 0;
  v1->m_pkItemCategory[9] = 0;
  v1->m_pkItemCategoryText[9] = 0;
  v1->m_uiSelectCategory = 0;
}
// 99EF70: using guessed type int (__stdcall *MarketSearchWin___vftable_)(int uiFlags);
// 99EF8C: using guessed type int (__thiscall *MarketSearchWin___vftable_)(void *p, char);

//----- (0054A850) --------------------------------------------------------
void __thiscall MarketSearchWin::_MarketSearchWin(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  void *v2; // eax@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MarketSearchWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MarketSearchWin::_vftable_;
  v2 = *(void **)&this->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
    operator delete(v2);
  *(_DWORD *)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecMarketSearchItem.baseclass_0._Mylast = 0;
  v1->m_vecMarketSearchItem.baseclass_0._Myend = 0;
  _eh_vector_destructor_iterator_(
    v1->m_ColumnWinName,
    0x1Cu,
    9,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 99EF70: using guessed type int (__stdcall *MarketSearchWin___vftable_)(int uiFlags);
// 99EF8C: using guessed type int (__thiscall *MarketSearchWin___vftable_)(void *p, char);

//----- (0054A8F0) --------------------------------------------------------
bool __thiscall MarketSearchWin::UpdateViewList(MarketSearchWin *this)
{
  MarketSearchWin *v1; // esi@1
  MarketSearchItem **v2; // ebx@1
  int v3; // edi@2

  v1 = this;
  SlideListWin::RemoveAllList(this->m_pkItemViewSlideListWin);
  v2 = *(MarketSearchItem ***)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 != v1->m_vecMarketSearchItem.baseclass_0._Mylast )
  {
    v3 = 0;
    do
    {
      if ( *(_DWORD *)(*(_DWORD *)(v3 + *(_DWORD *)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0])
                     + 24) != -1 )
        MarketSearchWin::SetListItem(
          v1,
          *(MarketSearchItem **)(v3 + *(_DWORD *)&v1->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]));
      ++v2;
      v3 += 4;
    }
    while ( v2 != v1->m_vecMarketSearchItem.baseclass_0._Mylast );
  }
  SlideListWin::AlignText(v1->m_pkItemViewSlideListWin, 1u, 4u);
  SlideListWin::AlignText(v1->m_pkItemViewSlideListWin, 2u, 5u);
  SlideListWin::AlignText(v1->m_pkItemViewSlideListWin, 3u, 6u);
  SlideListWin::AlignText(v1->m_pkItemViewSlideListWin, 4u, 6u);
  SlideListWin::AlignText(v1->m_pkItemViewSlideListWin, 5u, 6u);
  SlideListWin::AlignText(v1->m_pkItemViewSlideListWin, 6u, 6u);
  MarketSearchWin::RefreshItemViewList(v1);
  return 1;
}

//----- (0054A9A0) --------------------------------------------------------
void __thiscall MarketSearchWin::RemoveAllList(MarketSearchWin *this)
{
  MarketSearchWin *v1; // edi@1
  MarketSearchItem **v2; // esi@1

  v1 = this;
  v2 = *(MarketSearchItem ***)&this->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 != this->m_vecMarketSearchItem.baseclass_0._Mylast )
  {
    do
    {
      ((void (*)(void))(*v2)->vfptr->Clear)();
      ++v2;
    }
    while ( v2 != v1->m_vecMarketSearchItem.baseclass_0._Mylast );
  }
  v1->m_iVecLastIndex = 0;
}

//----- (0054A9E0) --------------------------------------------------------
MarketSearchWin *__cdecl MarketSearchWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MarketSearchWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x2F0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MarketSearchWin::MarketSearchWin((MarketSearchWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MarketSearchWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0054AB10) --------------------------------------------------------
void __thiscall MarketSearchWin::OnClose(MarketSearchWin *this)
{
  MarketSearchWin *v1; // edi@1
  MarketSearchItem **v2; // esi@1

  v1 = this;
  v2 = *(MarketSearchItem ***)&this->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 != this->m_vecMarketSearchItem.baseclass_0._Mylast )
  {
    do
    {
      ((void (*)(void))(*v2)->vfptr->Clear)();
      ++v2;
    }
    while ( v2 != v1->m_vecMarketSearchItem.baseclass_0._Mylast );
  }
  v1->m_iVecLastIndex = 0;
  v1->m_fCurrentDelayTime = Timer::ms_fCurTime;
  PrivateStoreWin::ms_bPrivateStoreWin = 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (0054AB60) --------------------------------------------------------
bool __thiscall MarketSearchWin::SetListItems(MarketSearchWin *this, PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *pkProto)
{
  PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *v2; // ebx@1
  NiRefObjectVtbl *v4; // edx@4
  void *v5; // eax@4
  int v6; // esi@4
  int v7; // edi@4
  int v8; // edx@4
  int v9; // edx@6
  int v10; // eax@7
  int v11; // eax@9
  char *v12; // edx@9
  char v13; // cl@10
  int v14; // eax@11
  MarketSearchItem **j; // esi@17
  char *v16; // ebx@19
  int v17; // edx@25
  unsigned int v18; // eax@25
  std::vector<CBaseObject *,std::allocator<CBaseObject *> > *v19; // esi@25
  int v20; // ecx@25
  signed int v21; // ebx@26
  void *v22; // eax@27
  void *v23; // edi@28
  unsigned int v24; // eax@30
  int v25; // edx@31
  MarketSearchItem **v26; // ecx@32
  signed int v27; // edi@32
  int v28; // eax@33
  int v29; // eax@34
  int v30; // ecx@34
  unsigned int v31; // ecx@36
  MarketSearchItem **v32; // eax@41
  MarketSearchItem **v33; // ecx@43
  int v34; // eax@44
  int v35; // eax@45
  int v36; // ecx@45
  unsigned int v37; // ecx@47
  MarketSearchItem **v38; // eax@52
  int v39; // ebx@55
  void *v40; // eax@56
  void *v41; // edi@57
  unsigned int v42; // eax@60
  int v43; // edx@61
  MarketSearchItem **v44; // ecx@62
  signed int v45; // edi@62
  int v46; // eax@63
  int v47; // eax@64
  int v48; // ecx@64
  unsigned int v49; // ecx@66
  MarketSearchItem **v50; // eax@71
  MarketSearchItem **v51; // ecx@73
  int v52; // eax@74
  int v53; // eax@75
  int v54; // ecx@75
  unsigned int v55; // ecx@77
  MarketSearchItem **v56; // eax@82
  PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *v57; // edi@85
  EditWinEx *v58; // ecx@87
  void *v59; // eax@87
  int v60; // esi@87
  int v61; // ebx@87
  int v62; // edx@87
  int v63; // edx@89
  int v64; // eax@90
  int v65; // eax@92
  char *v66; // edx@92
  char v67; // cl@93
  char *v68; // esi@94
  int v69; // eax@94
  int v70; // esi@96
  void *v71; // eax@96
  int v72; // ebx@96
  char *v73; // eax@101
  MarketSearchWin *thisa; // [sp+8h] [bp-58h]@1
  int i; // [sp+Ch] [bp-54h]@3
  unsigned int ia; // [sp+Ch] [bp-54h]@26
  unsigned int ib; // [sp+Ch] [bp-54h]@55
  unsigned int nAddItemCnt; // [sp+10h] [bp-50h]@3
  int nAddItemCnta; // [sp+10h] [bp-50h]@26
  int nAddItemCntb; // [sp+10h] [bp-50h]@55
  unsigned int nAddItemCntc; // [sp+10h] [bp-50h]@86
  char *strSearchWord; // [sp+14h] [bp-4Ch]@4
  unsigned __int8 datasize; // [sp+1Bh] [bp-45h]@4
  char strItemName[64]; // [sp+1Ch] [bp-44h]@9
  unsigned int v85; // [sp+5Ch] [bp-4h]@1
  int v86; // [sp+60h] [bp+0h]@1

  v85 = (unsigned int)&v86 ^ __security_cookie;
  thisa = this;
  v2 = pkProto + 1;
  if ( pkProto == (PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *)-3 )
    return 0;
  i = 0;
  nAddItemCnt = 0;
  if ( pkProto->nNumOfItems <= 0u )
  {
LABEL_15:
    if ( thisa->m_bSearching == 1 )
    {
      if ( i )
      {
        if ( i )
        {
          MarketSearchWin::RemoveAllList(thisa);
          thisa->m_bSearching = 0;
        }
      }
      else
      {
        for ( j = *(MarketSearchItem ***)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
              j != thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
              ++j )
          ((void (*)(void))(*j)->vfptr->Clear)();
        thisa->m_iVecLastIndex = 0;
        thisa->m_bSearching = 0;
        v16 = TextData3::Get(0xB0C5B5BFu);
        if ( thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            v16,
            &thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          if ( thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              v16,
              &thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        }
        thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
          &thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
          25,
          v16,
          &thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
    }
    v17 = pkProto->nNumOfItems;
    v18 = thisa->m_iVecLastIndex;
    v19 = (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&thisa->m_vecMarketSearchItem;
    v20 = (signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Myend
                     - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    if ( v18 + v17 >= v20 )
    {
      nAddItemCnta = v17 + v18 - v20;
      ia = 0;
      v21 = -1;
      if ( nAddItemCnta )
      {
        do
        {
          v22 = operator new(0x20u);
          if ( v22 )
          {
            *(_DWORD *)v22 = &MarketSearchItem::_vftable_;
            *((_DWORD *)v22 + 2) = 0;
            *((_DWORD *)v22 + 4) = v21;
            *((_DWORD *)v22 + 5) = v21;
            *((_DWORD *)v22 + 6) = v21;
            *((_WORD *)v22 + 14) = -1;
            v23 = v22;
          }
          else
          {
            v23 = 0;
          }
          v24 = (unsigned int)thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
          strSearchWord = (char *)v23;
          if ( (unsigned int)&strSearchWord >= v24
            || (v25 = *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0],
                *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)&strSearchWord) )
          {
            v33 = thisa->m_vecMarketSearchItem.baseclass_0._Myend;
            if ( (MarketSearchItem **)v24 == v33 )
            {
              v34 = (signed int)(v24 - *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
              if ( (unsigned int)v34 > 0x3FFFFFFE )
LABEL_58:
                std::_Xlength_error("vector<T> too long");
              v35 = v34 + 1;
              v36 = (signed int)((char *)v33 - *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
              if ( v35 > (unsigned int)v36 )
              {
                if ( 1073741823 - ((unsigned int)v36 >> 1) >= v36 )
                  v37 = ((unsigned int)v36 >> 1) + v36;
                else
                  v37 = 0;
                if ( v37 < v35 )
                  v37 = v35;
                std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(v19, v37);
                v21 = -1;
              }
            }
            v38 = thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
            if ( v38 )
              *v38 = (MarketSearchItem *)v23;
          }
          else
          {
            v26 = thisa->m_vecMarketSearchItem.baseclass_0._Myend;
            v27 = (signed int)&(&strSearchWord)[-v25] >> 2;
            if ( (MarketSearchItem **)v24 == v26 )
            {
              v28 = (signed int)(v24 - v25) >> 2;
              if ( (unsigned int)v28 > 0x3FFFFFFE )
                goto LABEL_58;
              v29 = v28 + 1;
              v30 = (signed int)((char *)v26 - v25) >> 2;
              if ( v29 > (unsigned int)v30 )
              {
                if ( 1073741823 - ((unsigned int)v30 >> 1) >= v30 )
                  v31 = ((unsigned int)v30 >> 1) + v30;
                else
                  v31 = 0;
                if ( v31 < v29 )
                  v31 = v29;
                std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(v19, v31);
                v21 = -1;
              }
            }
            v32 = thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
            if ( v32 )
              *v32 = *(MarketSearchItem **)(*(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v27);
          }
          ++thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
          ++ia;
        }
        while ( ia < nAddItemCnta );
      }
      v39 = ((signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Myend
                        - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
          - ((signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Mylast
                        - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
      nAddItemCntb = ((signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Myend
                                 - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
                   - ((signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Mylast
                                 - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
      ib = 0;
      if ( (signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Myend
                      - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 != (signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Mylast - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
      {
        do
        {
          v40 = operator new(0x20u);
          if ( v40 )
          {
            *(_DWORD *)v40 = &MarketSearchItem::_vftable_;
            *((_DWORD *)v40 + 2) = 0;
            *((_DWORD *)v40 + 4) = -1;
            *((_DWORD *)v40 + 5) = -1;
            *((_DWORD *)v40 + 6) = -1;
            *((_WORD *)v40 + 14) = -1;
            v41 = v40;
          }
          else
          {
            v41 = 0;
          }
          v42 = (unsigned int)thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
          strSearchWord = (char *)v41;
          if ( (unsigned int)&strSearchWord >= v42
            || (v43 = *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0],
                *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)&strSearchWord) )
          {
            v51 = thisa->m_vecMarketSearchItem.baseclass_0._Myend;
            if ( (MarketSearchItem **)v42 == v51 )
            {
              v52 = (signed int)(v42 - *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
              if ( (unsigned int)v52 > 0x3FFFFFFE )
                goto LABEL_58;
              v53 = v52 + 1;
              v54 = (signed int)((char *)v51 - *(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
              if ( v53 > (unsigned int)v54 )
              {
                if ( 1073741823 - ((unsigned int)v54 >> 1) >= v54 )
                  v55 = ((unsigned int)v54 >> 1) + v54;
                else
                  v55 = 0;
                if ( v55 < v53 )
                  v55 = v53;
                std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(v19, v55);
                v39 = nAddItemCntb;
              }
            }
            v56 = thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
            if ( v56 )
              *v56 = (MarketSearchItem *)v41;
          }
          else
          {
            v44 = thisa->m_vecMarketSearchItem.baseclass_0._Myend;
            v45 = (signed int)&(&strSearchWord)[-v43] >> 2;
            if ( (MarketSearchItem **)v42 == v44 )
            {
              v46 = (signed int)(v42 - v43) >> 2;
              if ( (unsigned int)v46 > 0x3FFFFFFE )
                goto LABEL_58;
              v47 = v46 + 1;
              v48 = (signed int)((char *)v44 - v43) >> 2;
              if ( v47 > (unsigned int)v48 )
              {
                if ( 1073741823 - ((unsigned int)v48 >> 1) >= v48 )
                  v49 = ((unsigned int)v48 >> 1) + v48;
                else
                  v49 = 0;
                if ( v49 < v47 )
                  v49 = v47;
                std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(v19, v49);
                v39 = nAddItemCntb;
              }
            }
            v50 = thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
            if ( v50 )
              *v50 = *(MarketSearchItem **)(*(_DWORD *)&v19->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v45);
          }
          ++thisa->m_vecMarketSearchItem.baseclass_0._Mylast;
          ++ib;
        }
        while ( ib < v39 );
      }
    }
    v57 = pkProto + 1;
    if ( pkProto != (PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *)-3 )
    {
      nAddItemCntc = 0;
      if ( !pkProto->nNumOfItems )
      {
LABEL_105:
        std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByDefault>(
          *(MarketSearchItem ***)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0],
          thisa->m_vecMarketSearchItem.baseclass_0._Mylast,
          (signed int)((char *)thisa->m_vecMarketSearchItem.baseclass_0._Mylast
                     - *(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2,
          (MarketSearchWin::SortByDefault)strSearchWord);
        MarketSearchWin::UpdateViewList(thisa);
        return 1;
      }
      while ( 1 )
      {
        v58 = thisa->m_pkItemSearchInput;
        datasize = LOBYTE(v57->nError);
        v59 = (void *)((int (*)(void))v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v60 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        v61 = v57[5].nError;
        v62 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        strSearchWord = (char *)v59;
        if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(v62 + 16))(
                                 ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                 v61) )
          break;
        if ( (unsigned __int16)v61 > *(_WORD *)(v60 + 200) )
          break;
        v63 = *(_DWORD *)(v60 + 196);
        if ( !*(_DWORD *)(v63 + 4 * v61) )
          break;
        v64 = *(_DWORD *)(v63 + 4 * v61);
        if ( !v64 )
          break;
        if ( !strSearchWord )
          break;
        v65 = v64 + 34;
        v66 = &strItemName[-v65];
        do
        {
          v67 = *(_BYTE *)v65;
          v66[v65] = *(_BYTE *)v65;
          ++v65;
        }
        while ( v67 );
        v68 = strSearchWord;
        _strlwr(strSearchWord);
        _strlwr(strItemName);
        strstr(strItemName, v68);
        if ( v69 )
        {
          v70 = *(_DWORD *)(*(_DWORD *)&thisa->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0]
                          + 4 * thisa->m_iVecLastIndex);
          v71 = Item::Create((SHINE_ITEM_STRUCT *)&v57[5]);
          v72 = *(_DWORD *)(v70 + 8);
          strSearchWord = (char *)v71;
          if ( (void *)v72 != v71 )
          {
            if ( v72 && !InterlockedDecrement((volatile LONG *)(v72 + 4)) && v72 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v72)(v72, 1);
            v73 = strSearchWord;
            *(_DWORD *)(v70 + 8) = strSearchWord;
            if ( v73 )
              InterlockedIncrement((volatile LONG *)v73 + 1);
          }
          *(_DWORD *)(v70 + 16) = *(_DWORD *)((char *)&v57[2].nError + 1);
          *(_DWORD *)(v70 + 20) = *(_DWORD *)&v57[3].nNumOfItems;
          *(_DWORD *)(v70 + 24) = *(_DWORD *)((char *)&v57->nError + 1);
          *(_WORD *)(v70 + 28) = *(_WORD *)&v57[1].nNumOfItems;
          ++thisa->m_iVecLastIndex;
          v57 = (PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *)((char *)v57 + datasize + 1);
        }
        else
        {
          v57 = (PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *)((char *)v57 + datasize + 1);
        }
        ++nAddItemCntc;
        if ( nAddItemCntc >= pkProto->nNumOfItems )
          goto LABEL_105;
      }
    }
  }
  else
  {
    while ( 1 )
    {
      v4 = thisa->m_pkItemSearchInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      datasize = LOBYTE(v2->nError);
      v5 = (void *)((int (*)(void))v4[113].__vecDelDtor)();
      v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v7 = v2[5].nError;
      v8 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      strSearchWord = (char *)v5;
      if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(v8 + 16))(
                               ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                               v7) )
        break;
      if ( (unsigned __int16)v7 > *(_WORD *)(v6 + 200) )
        break;
      v9 = *(_DWORD *)(v6 + 196);
      if ( !*(_DWORD *)(v9 + 4 * v7) )
        break;
      v10 = *(_DWORD *)(v9 + 4 * v7);
      if ( !v10 )
        break;
      if ( !strSearchWord )
        break;
      v11 = v10 + 34;
      v12 = &strItemName[-v11];
      do
      {
        v13 = *(_BYTE *)v11;
        v12[v11] = *(_BYTE *)v11;
        ++v11;
      }
      while ( v13 );
      _strlwr(strSearchWord);
      _strlwr(strItemName);
      strstr(strItemName, strSearchWord);
      if ( v14 )
      {
        ++i;
        v2 = (PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *)((char *)v2 + datasize + 1);
      }
      else
      {
        v2 = (PROTO_NC_BOOTH_SEARCH_ITEM_LIST_CATEGORIZED_ACK *)((char *)v2 + datasize + 1);
      }
      ++nAddItemCnt;
      if ( nAddItemCnt >= pkProto->nNumOfItems )
        goto LABEL_15;
    }
  }
  return 0;
}
// 99EF44: using guessed type int (__thiscall *MarketSearchItem___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0054B190) --------------------------------------------------------
bool __thiscall MarketSearchWin::Sort(MarketSearchWin *this, unsigned int uiMsg)
{
  MarketSearchWin *v2; // esi@1
  MarketSearchItem **v3; // ecx@4
  int v4; // ST08_4@5
  MarketSearchItem **v5; // ST04_4@5
  bool result; // al@5
  MarketSearchItem **v7; // ecx@7
  int v8; // ST08_4@8
  MarketSearchItem **v9; // ST04_4@8
  MarketSearchItem **v10; // eax@10
  MarketSearchItem **v11; // ecx@10
  int v12; // [sp-8h] [bp-Ch]@10

  v2 = this;
  if ( uiMsg == 11 )
  {
    v10 = this->m_vecMarketSearchItem.baseclass_0._Mylast;
    v11 = *(MarketSearchItem ***)&this->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
    v12 = v10 - v11;
    if ( v2->m_uiSortState == 1 )
    {
      v2->m_uiSortState = 2;
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByName>(v11, v10, v12, (MarketSearchWin::SortByName)11);
      MarketSearchWin::UpdateViewList(v2);
      return 1;
    }
    v2->m_uiSortState = 1;
    std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByNameDesc>(
      v11,
      v10,
      v12,
      (MarketSearchWin::SortByNameDesc)11);
    goto LABEL_13;
  }
  if ( uiMsg != 12 )
  {
    if ( uiMsg == 13 )
    {
      v3 = *(MarketSearchItem ***)&this->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v2->m_uiSortState == 5 )
      {
        v4 = v2->m_vecMarketSearchItem.baseclass_0._Mylast - v3;
        v5 = v2->m_vecMarketSearchItem.baseclass_0._Mylast;
        v2->m_uiSortState = 6;
        std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoney>(
          v3,
          v5,
          v4,
          (MarketSearchWin::SortByMoney)uiMsg);
        MarketSearchWin::UpdateViewList(v2);
        result = 1;
      }
      else
      {
        v2->m_uiSortState = 5;
        std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoneyDesc>(
          v3,
          v2->m_vecMarketSearchItem.baseclass_0._Mylast,
          v2->m_vecMarketSearchItem.baseclass_0._Mylast - v3,
          (MarketSearchWin::SortByMoneyDesc)uiMsg);
        MarketSearchWin::UpdateViewList(v2);
        result = 1;
      }
      return result;
    }
LABEL_13:
    MarketSearchWin::UpdateViewList(v2);
    return 1;
  }
  v7 = *(MarketSearchItem ***)&this->m_vecMarketSearchItem.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2->m_uiSortState == 3 )
  {
    v8 = v2->m_vecMarketSearchItem.baseclass_0._Mylast - v7;
    v9 = v2->m_vecMarketSearchItem.baseclass_0._Mylast;
    v2->m_uiSortState = 4;
    std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevel>(v7, v9, v8, (MarketSearchWin::SortByLevel)12);
    MarketSearchWin::UpdateViewList(v2);
    result = 1;
  }
  else
  {
    v2->m_uiSortState = 3;
    std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevelDesc>(
      v7,
      v2->m_vecMarketSearchItem.baseclass_0._Mylast,
      v2->m_vecMarketSearchItem.baseclass_0._Mylast - v7,
      (MarketSearchWin::SortByLevelDesc)12);
    MarketSearchWin::UpdateViewList(v2);
    result = 1;
  }
  return result;
}

//----- (0054B300) --------------------------------------------------------
void __thiscall MarketSearchWin::OnCommand(MarketSearchWin *this, unsigned int wParam, int lParam)
{
  MarketSearchWin *v3; // esi@1
  char v4; // al@2
  char v5; // al@3

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      v4 = ((int (*)(void))this->m_pkChosenItemCategoryBG->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      MarketSearchWin::ShowWTCombo(v3, v4 == 0);
      break;
    case 1u:
    case 2u:
    case 3u:
    case 4u:
    case 5u:
    case 6u:
    case 7u:
    case 8u:
      MarketSearchWin::SetCategoryFromBtn(this, wParam);
      v5 = ((int (*)(void))v3->m_pkChosenItemCategoryBG->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      MarketSearchWin::ShowWTCombo(v3, v5 == 0);
      break;
    case 0xBu:
    case 0xCu:
    case 0xDu:
      MarketSearchWin::Sort(this, wParam);
      break;
    case 0xFu:
      MarketSearchWin::RefreshItemViewSlide(this);
      break;
    case 0xEu:
      this->m_pkMyClassViewBtn->m_bCheck = this->m_pkMyClassViewBtn->m_bCheck == 0;
      break;
    case 9u:
      MarketSearchWin::OnSearch(this);
      break;
    case 0xAu:
      MarketSearchWin::OnSearchBooth(this);
      break;
    default:
      return;
  }
}

//----- (0054B3F0) --------------------------------------------------------
bool __thiscall MarketSearchWin::Create(MarketSearchWin *this, PgFrameWork *pkFrameWork)
{
  MarketSearchWin *v2; // esi@1
  char *v3; // eax@3
  NiNode *v4; // eax@3
  NiNode *v5; // esi@7
  PgSprData *v7; // eax@11
  NiNode *v8; // esi@12
  NiSourceTexture *v9; // eax@18
  PgSprData *v10; // eax@21
  PgSprData *v11; // edi@22
  PgFont *v12; // eax@26
  PgWinText *v13; // edi@26
  char *v14; // eax@26
  SLWCreateInfo::Item *v15; // edi@26
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v16; // edi@26
  SLWCreateInfo::Item *v17; // edi@32
  SLWCreateInfo::Item *v18; // edi@34
  SLWCreateInfo::Item *v19; // edi@36
  SLWCreateInfo::Item *v20; // edi@38
  SLWCreateInfo::Item *v21; // edi@40
  SLWCreateInfo::Item *v22; // edi@42
  SLWCreateInfo::Item *v23; // edi@44
  PgSprData *v24; // eax@46
  SlideListWin *v25; // eax@46
  PgSprData *v26; // eax@46
  SlideBar *v27; // eax@46
  void *v28; // eax@47
  PgWin *v29; // edi@51
  D3DXCOLOR v30; // ST24_16@51
  char *v31; // eax@51
  PgWin *v32; // edi@51
  D3DXCOLOR v33; // ST24_16@51
  char *v34; // eax@51
  PgWinSpr *v35; // eax@51
  PgWinSpr *v36; // eax@51
  PgWinSpr *v37; // eax@51
  PgWinSpr *v38; // eax@51
  int v39; // edi@51
  NiNode *v40; // esi@55
  const char *v41; // [sp+24h] [bp-98h]@19
  int *v42; // [sp+28h] [bp-94h]@19
  int *v43; // [sp+2Ch] [bp-90h]@19
  volatile LONG *v44; // [sp+30h] [bp-8Ch]@13
  NiSourceTexture *v45; // [sp+30h] [bp-8Ch]@19
  unsigned int v46; // [sp+34h] [bp-88h]@1
  unsigned int uiHeight; // [sp+44h] [bp-78h]@23
  void *pkMarketSearchItem; // [sp+48h] [bp-74h]@50
  unsigned int uiWidth; // [sp+4Ch] [bp-70h]@23
  SLWCreateInfo kCreateInfo; // [sp+50h] [bp-6Ch]@26
  UIUtil ui; // [sp+6Ch] [bp-50h]@21
  NiTexturePalette *pTexturePalette; // [sp+80h] [bp-3Ch]@1
  int iTop; // [sp+84h] [bp-38h]@11
  int iLeft; // [sp+88h] [bp-34h]@11
  NiPointer<NiNode> spNode; // [sp+8Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+90h] [bp-2Ch]@26
  unsigned int v57; // [sp+ACh] [bp-10h]@1
  int v58; // [sp+B8h] [bp-4h]@1
  int v59; // [sp+BCh] [bp+0h]@1

  v57 = (unsigned int)&v59 ^ __security_cookie;
  v46 = (unsigned int)&v59 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v58 = 0;
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\MarketSearch.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, pTexturePalette);
  v4 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MarketSearch.nif load fila", "LoadFail", 0);
      v4 = spNode.m_pObject;
    }
    v58 = -1;
    if ( v4 )
    {
      v5 = v4;
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    return 0;
  }
  iLeft = 0;
  iTop = 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "MarketSearchWin", 0) )
  {
    v8 = spNode.m_pObject;
    v58 = -1;
    if ( spNode.m_pObject )
    {
      v44 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_14:
      if ( !InterlockedDecrement(v44) && v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      return 0;
    }
    return 0;
  }
  v9 = MenuTexMgr::GetTexture(0x13u);
  if ( v9 )
  {
    v45 = v9;
    v43 = &iTop;
    v42 = &iLeft;
    v41 = "Theme";
  }
  else
  {
    v45 = 0;
    v43 = &iTop;
    v42 = &iLeft;
    v41 = "Theme";
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v41, v42, v43, v45);
  PgWinSpr::CreateWin(iLeft, iTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v58) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Plane01", 0);
  UIUtil::CreateSpr(&ui, "Line01", 0);
  UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, 0);
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(iLeft, iTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
  }
  uiWidth = 0;
  uiHeight = 0;
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    LOBYTE(v58) = 0;
    UIUtil::_UIUtil(&ui);
    v8 = spNode.m_pObject;
    v58 = -1;
    if ( spNode.m_pObject )
    {
      v44 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_14;
    }
    return 0;
  }
  v12 = Font::Get(MAIN_MENU);
  v13 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinText *, __int64 *, unsigned int))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
    v13,
    &Color::m_kDxWinTitleColor,
    v46);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v13,
    1u);
  pTexturePalette = (NiTexturePalette *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v14 = TextData3::Get(0x6865A7BCu);
  ((void (__thiscall *)(PgWinText *, char *))pTexturePalette->baseclass_0.vfptr)(v13, v14);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v58) = 2;
  v15 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v15->nItemType = 1;
  v15->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  v16 = &v15->vecNodeName;
  LOBYTE(v58) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v16,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v58) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v16,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v58) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v16,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v17 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v17->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
  LOBYTE(v58) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v17->vecNodeName,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  SLWCreateInfo::Item::AddWin(v17, "InvItemSlot001_icon", ITEMICON);
  v17->pNode = spNode.m_pObject;
  v18 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v18->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
  LOBYTE(v58) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v18->vecNodeName,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v18->pNode = spNode.m_pObject;
  v18->bAbbreviatable = 1;
  v19 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v19->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
  LOBYTE(v58) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v19->vecNodeName,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v19->pNode = spNode.m_pObject;
  v20 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v20->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "GemInput", 8u);
  LOBYTE(v58) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v20->vecNodeName,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v20->pNode = spNode.m_pObject;
  v21 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v21->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "GoldInput", 9u);
  LOBYTE(v58) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v21->vecNodeName,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v21->pNode = spNode.m_pObject;
  v22 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v22->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "SilverInput", 0xBu);
  LOBYTE(v58) = 11;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v22->vecNodeName,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v22->pNode = spNode.m_pObject;
  v23 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v23->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "CopperInput", 0xBu);
  LOBYTE(v58) = 12;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v23->vecNodeName,
    &thisa);
  LOBYTE(v58) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v23->pNode = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ColumnBox", &iLeft, &iTop, 0);
  v25 = SlideListWin::CreateWin(iLeft, iTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 1u, 0);
  v2->m_pkItemViewSlideListWin = v25;
  SlideListWin::UpdateViewList(v25);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, 0);
  v27 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar",
          "SlideBar_UpBtn",
          "SlideBar_DnBtn",
          v26,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBar = v27;
  v27->m_uiClickMsg = 15;
  v2->m_pkSlideBar->m_eType = 1;
  NiObjectNET::SetName(&v2->m_pkSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0, "MarketSearchWinSlide");
  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v2->m_vecMarketSearchItem,
    0x64u);
  pTexturePalette = (NiTexturePalette *)100;
  do
  {
    v28 = operator new(0x20u);
    if ( v28 )
    {
      *(_DWORD *)v28 = &MarketSearchItem::_vftable_;
      *((_DWORD *)v28 + 2) = 0;
      *((_DWORD *)v28 + 4) = -1;
      *((_DWORD *)v28 + 5) = -1;
      *((_DWORD *)v28 + 6) = -1;
      *((_WORD *)v28 + 14) = -1;
    }
    else
    {
      v28 = 0;
    }
    pkMarketSearchItem = v28;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_vecMarketSearchItem,
      (const unsigned int *)&pkMarketSearchItem);
    pTexturePalette = (NiTexturePalette *)((char *)pTexturePalette - 1);
  }
  while ( pTexturePalette );
  v29 = (PgWin *)UIUtil::CreateButton(&ui, 0xBu, "Title01", 0, 3);
  *(_QWORD *)&v30.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v30.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v31 = TextData3::Get(0x7278A2C2u);
  UIUtil::CreateAttachedText(&ui, v29, v31, COERCE_D3DXCOLOR(v30.r), 5u);
  v32 = (PgWin *)UIUtil::CreateButton(&ui, 0xCu, "Title02", 0, 3);
  *(_QWORD *)&v33.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v33.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v34 = TextData3::Get(0xBACB90B9u);
  UIUtil::CreateAttachedText(&ui, v32, v34, COERCE_D3DXCOLOR(v33.r), 5u);
  UIUtil::CreateButton(&ui, 0xDu, "Title03", 0, 3);
  v35 = UIUtil::CreateSpr(&ui, "GemBtn", 0);
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v35,
    0);
  v36 = UIUtil::CreateSpr(&ui, "GoldBtn", 0);
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v36,
    0);
  v37 = UIUtil::CreateSpr(&ui, "SilverBtn", 0);
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v37,
    0);
  v38 = UIUtil::CreateSpr(&ui, "CopperBtn", 0);
  v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v38,
    0);
  MarketSearchWin::InitItemSearchUI(v2, &ui);
  MarketSearchWin::InitCategoryComboBoxUI(v2, &ui);
  v39 = (int)&v2->m_pkItemCategory[2];
  pTexturePalette = (NiTexturePalette *)8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v39 + 256))(0);
    v39 += 4;
    pTexturePalette = (NiTexturePalette *)((char *)pTexturePalette - 1);
  }
  while ( pTexturePalette );
  ((void (__cdecl *)(_DWORD))v2->m_pkChosenItemCategoryBG->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__thiscall *)(MarketSearchWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v58) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)pkMarketSearchItem);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v58) = 0;
  UIUtil::_UIUtil(&ui);
  v40 = spNode.m_pObject;
  v58 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v40 )
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v40, 1u);
  return 1;
}
// 99EF44: using guessed type int (__thiscall *MarketSearchItem___vftable_)(void *p, char);
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0054BD90) --------------------------------------------------------
unsigned int __cdecl ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F10: using guessed type int ITableBase_MarketSearchInfo_MarketSearchInfoTab___ms_pkTable;

//----- (0054BDB0) --------------------------------------------------------
void *__thiscall MarketSearchItem::_vector_deleting_destructor_(MarketSearchItem *this, unsigned int a2)
{
  void *v2; // edi@1
  Item *v3; // esi@1

  v2 = this;
  this->vfptr = (MarketSearchItemVtbl *)&MarketSearchItem::_vftable_;
  v3 = this->m_pkItem.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99EF44: using guessed type int (__thiscall *MarketSearchItem___vftable_)(void *p, char);

//----- (0054BE00) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByDefault_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred, MarketSearchItem **__formal)
{
  MarketSearchItem **v4; // esi@1
  MarketSearchItem **i; // ebx@2
  MarketSearchItem *v6; // edi@3
  int v7; // esi@5
  MarketSearchItem *v8; // edx@6
  MarketSearchItem **_Next1; // [sp+4h] [bp-4h]@3

  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = *i;
      _Next1 = i;
      if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *i, *v4) )
      {
        memmove((char *)&i[-(i - v4) + 1], (char *)v4, 4 * (i - v4));
        *v4 = v6;
      }
      else
      {
        v7 = (int)(i - 1);
        if ( MarketSearchWin::SortByDefault::operator__(&_Pred, v6, *(i - 1)) )
        {
          do
          {
            *_Next1 = *(MarketSearchItem **)v7;
            v8 = *(MarketSearchItem **)(v7 - 4);
            _Next1 = (MarketSearchItem **)v7;
            v7 -= 4;
          }
          while ( MarketSearchWin::SortByDefault::operator__(&_Pred, v6, v8) );
        }
        v4 = _First;
        *_Next1 = v6;
      }
    }
  }
}

//----- (0054BEB0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByName_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred, MarketSearchItem **__formal)
{
  MarketSearchItem **v4; // esi@1
  MarketSearchItem **i; // ebx@2
  MarketSearchItem *v6; // edi@3
  int v7; // esi@5
  MarketSearchItem *v8; // edx@6
  MarketSearchItem **_Next1; // [sp+4h] [bp-4h]@3

  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = *i;
      _Next1 = i;
      if ( MarketSearchWin::SortByName::operator__(&_Pred, *i, *v4) )
      {
        memmove((char *)&i[-(i - v4) + 1], (char *)v4, 4 * (i - v4));
        *v4 = v6;
      }
      else
      {
        v7 = (int)(i - 1);
        if ( MarketSearchWin::SortByName::operator__(&_Pred, v6, *(i - 1)) )
        {
          do
          {
            *_Next1 = *(MarketSearchItem **)v7;
            v8 = *(MarketSearchItem **)(v7 - 4);
            _Next1 = (MarketSearchItem **)v7;
            v7 -= 4;
          }
          while ( MarketSearchWin::SortByName::operator__(&_Pred, v6, v8) );
        }
        v4 = _First;
        *_Next1 = v6;
      }
    }
  }
}

//----- (0054BF60) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByNameDesc_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred, MarketSearchItem **__formal)
{
  MarketSearchItem **v4; // esi@1
  MarketSearchItem **i; // ebx@2
  MarketSearchItem *v6; // edi@3
  int v7; // esi@5
  MarketSearchItem *v8; // edx@6
  MarketSearchItem **_Next1; // [sp+4h] [bp-4h]@3

  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = *i;
      _Next1 = i;
      if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *i, *v4) )
      {
        memmove((char *)&i[-(i - v4) + 1], (char *)v4, 4 * (i - v4));
        *v4 = v6;
      }
      else
      {
        v7 = (int)(i - 1);
        if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, v6, *(i - 1)) )
        {
          do
          {
            *_Next1 = *(MarketSearchItem **)v7;
            v8 = *(MarketSearchItem **)(v7 - 4);
            _Next1 = (MarketSearchItem **)v7;
            v7 -= 4;
          }
          while ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, v6, v8) );
        }
        v4 = _First;
        *_Next1 = v6;
      }
    }
  }
}

//----- (0054C010) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByLevel_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred, MarketSearchItem **__formal)
{
  MarketSearchItem **v4; // esi@1
  MarketSearchItem **i; // ebx@2
  MarketSearchItem *v6; // edi@3
  int v7; // esi@5
  MarketSearchItem *v8; // edx@6
  MarketSearchItem **_Next1; // [sp+4h] [bp-4h]@3

  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = *i;
      _Next1 = i;
      if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *i, *v4) )
      {
        memmove((char *)&i[-(i - v4) + 1], (char *)v4, 4 * (i - v4));
        *v4 = v6;
      }
      else
      {
        v7 = (int)(i - 1);
        if ( MarketSearchWin::SortByLevel::operator__(&_Pred, v6, *(i - 1)) )
        {
          do
          {
            *_Next1 = *(MarketSearchItem **)v7;
            v8 = *(MarketSearchItem **)(v7 - 4);
            _Next1 = (MarketSearchItem **)v7;
            v7 -= 4;
          }
          while ( MarketSearchWin::SortByLevel::operator__(&_Pred, v6, v8) );
        }
        v4 = _First;
        *_Next1 = v6;
      }
    }
  }
}

//----- (0054C0C0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByLevelDesc_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred, MarketSearchItem **__formal)
{
  MarketSearchItem **v4; // esi@1
  MarketSearchItem **i; // ebx@2
  MarketSearchItem *v6; // edi@3
  int v7; // esi@5
  MarketSearchItem *v8; // edx@6
  MarketSearchItem **_Next1; // [sp+4h] [bp-4h]@3

  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = *i;
      _Next1 = i;
      if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *i, *v4) )
      {
        memmove((char *)&i[-(i - v4) + 1], (char *)v4, 4 * (i - v4));
        *v4 = v6;
      }
      else
      {
        v7 = (int)(i - 1);
        if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, v6, *(i - 1)) )
        {
          do
          {
            *_Next1 = *(MarketSearchItem **)v7;
            v8 = *(MarketSearchItem **)(v7 - 4);
            _Next1 = (MarketSearchItem **)v7;
            v7 -= 4;
          }
          while ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, v6, v8) );
        }
        v4 = _First;
        *_Next1 = v6;
      }
    }
  }
}

//----- (0054C170) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByMoney_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred, MarketSearchItem **__formal)
{
  MarketSearchItem **v4; // esi@1
  MarketSearchItem **i; // ebx@2
  MarketSearchItem *v6; // edi@3
  int v7; // esi@5
  MarketSearchItem *v8; // edx@6
  MarketSearchItem **_Next1; // [sp+4h] [bp-4h]@3

  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = *i;
      _Next1 = i;
      if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *i, *v4) )
      {
        memmove((char *)&i[-(i - v4) + 1], (char *)v4, 4 * (i - v4));
        *v4 = v6;
      }
      else
      {
        v7 = (int)(i - 1);
        if ( MarketSearchWin::SortByMoney::operator__(&_Pred, v6, *(i - 1)) )
        {
          do
          {
            *_Next1 = *(MarketSearchItem **)v7;
            v8 = *(MarketSearchItem **)(v7 - 4);
            _Next1 = (MarketSearchItem **)v7;
            v7 -= 4;
          }
          while ( MarketSearchWin::SortByMoney::operator__(&_Pred, v6, v8) );
        }
        v4 = _First;
        *_Next1 = v6;
      }
    }
  }
}

//----- (0054C220) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc_MarketSearchItem__>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred, MarketSearchItem **__formal)
{
  MarketSearchItem **v4; // esi@1
  MarketSearchItem **i; // ebx@2
  MarketSearchItem *v6; // edi@3
  int v7; // esi@5
  MarketSearchItem *v8; // edx@6
  MarketSearchItem **_Next1; // [sp+4h] [bp-4h]@3

  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = *i;
      _Next1 = i;
      if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *i, *v4) )
      {
        memmove((char *)&i[-(i - v4) + 1], (char *)v4, 4 * (i - v4));
        *v4 = v6;
      }
      else
      {
        v7 = (int)(i - 1);
        if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, v6, *(i - 1)) )
        {
          do
          {
            *_Next1 = *(MarketSearchItem **)v7;
            v8 = *(MarketSearchItem **)(v7 - 4);
            _Next1 = (MarketSearchItem **)v7;
            v7 -= 4;
          }
          while ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, v6, v8) );
        }
        v4 = _First;
        *_Next1 = v6;
      }
    }
  }
}

//----- (0054C2D0) --------------------------------------------------------
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred)
{
  MarketSearchItem *v4; // eax@2
  MarketSearchItem *v5; // eax@4
  MarketSearchItem *v6; // eax@6

  if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *_Mid, *_First) )
  {
    v4 = *_Mid;
    *_Mid = *_First;
    *_First = v4;
  }
  if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *_Last, *_Mid) )
  {
    v5 = *_Last;
    *_Last = *_Mid;
    *_Mid = v5;
  }
  if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *_Mid, *_First) )
  {
    v6 = *_Mid;
    *_Mid = *_First;
    *_First = v6;
  }
}

//----- (0054C340) --------------------------------------------------------
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred)
{
  MarketSearchItem *v4; // eax@2
  MarketSearchItem *v5; // eax@4
  MarketSearchItem *v6; // eax@6

  if ( MarketSearchWin::SortByName::operator__(&_Pred, *_Mid, *_First) )
  {
    v4 = *_Mid;
    *_Mid = *_First;
    *_First = v4;
  }
  if ( MarketSearchWin::SortByName::operator__(&_Pred, *_Last, *_Mid) )
  {
    v5 = *_Last;
    *_Last = *_Mid;
    *_Mid = v5;
  }
  if ( MarketSearchWin::SortByName::operator__(&_Pred, *_Mid, *_First) )
  {
    v6 = *_Mid;
    *_Mid = *_First;
    *_First = v6;
  }
}

//----- (0054C3B0) --------------------------------------------------------
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred)
{
  MarketSearchItem *v4; // eax@2
  MarketSearchItem *v5; // eax@4
  MarketSearchItem *v6; // eax@6

  if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *_Mid, *_First) )
  {
    v4 = *_Mid;
    *_Mid = *_First;
    *_First = v4;
  }
  if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *_Last, *_Mid) )
  {
    v5 = *_Last;
    *_Last = *_Mid;
    *_Mid = v5;
  }
  if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *_Mid, *_First) )
  {
    v6 = *_Mid;
    *_Mid = *_First;
    *_First = v6;
  }
}

//----- (0054C420) --------------------------------------------------------
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred)
{
  MarketSearchItem *v4; // eax@2
  MarketSearchItem *v5; // eax@4
  MarketSearchItem *v6; // eax@6

  if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *_Mid, *_First) )
  {
    v4 = *_Mid;
    *_Mid = *_First;
    *_First = v4;
  }
  if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *_Last, *_Mid) )
  {
    v5 = *_Last;
    *_Last = *_Mid;
    *_Mid = v5;
  }
  if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *_Mid, *_First) )
  {
    v6 = *_Mid;
    *_Mid = *_First;
    *_First = v6;
  }
}

//----- (0054C490) --------------------------------------------------------
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred)
{
  MarketSearchItem *v4; // eax@2
  MarketSearchItem *v5; // eax@4
  MarketSearchItem *v6; // eax@6

  if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *_Mid, *_First) )
  {
    v4 = *_Mid;
    *_Mid = *_First;
    *_First = v4;
  }
  if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *_Last, *_Mid) )
  {
    v5 = *_Last;
    *_Last = *_Mid;
    *_Mid = v5;
  }
  if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *_Mid, *_First) )
  {
    v6 = *_Mid;
    *_Mid = *_First;
    *_First = v6;
  }
}

//----- (0054C500) --------------------------------------------------------
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred)
{
  MarketSearchItem *v4; // eax@2
  MarketSearchItem *v5; // eax@4
  MarketSearchItem *v6; // eax@6

  if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *_Mid, *_First) )
  {
    v4 = *_Mid;
    *_Mid = *_First;
    *_First = v4;
  }
  if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *_Last, *_Mid) )
  {
    v5 = *_Last;
    *_Last = *_Mid;
    *_Mid = v5;
  }
  if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *_Mid, *_First) )
  {
    v6 = *_Mid;
    *_Mid = *_First;
    *_First = v6;
  }
}

//----- (0054C570) --------------------------------------------------------
void __cdecl std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred)
{
  MarketSearchItem *v4; // eax@2
  MarketSearchItem *v5; // eax@4
  MarketSearchItem *v6; // eax@6

  if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *_Mid, *_First) )
  {
    v4 = *_Mid;
    *_Mid = *_First;
    *_First = v4;
  }
  if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *_Last, *_Mid) )
  {
    v5 = *_Last;
    *_Last = *_Mid;
    *_Mid = v5;
  }
  if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *_Mid, *_First) )
  {
    v6 = *_Mid;
    *_Mid = *_First;
    *_First = v6;
  }
}

//----- (0054C5E0) --------------------------------------------------------
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByDefault _Pred)
{
  int v5; // ecx@1
  MarketSearchItem **v6; // esi@4
  MarketSearchItem *v7; // edx@4
  MarketSearchItem *v8; // edi@4
  Item *v9; // ebx@9
  unsigned int v10; // esi@9
  unsigned int v11; // esi@11
  AuctionGroup v12; // ecx@13
  AuctionGroup v13; // edx@13
  signed int v14; // eax@13
  signed int v15; // edx@18
  unsigned int v16; // eax@19
  unsigned int v17; // ecx@19
  MarketSearchItem *v18; // [sp+4h] [bp-Ch]@4
  Item *v19; // [sp+8h] [bp-8h]@9
  int _Idx; // [sp+Ch] [bp-4h]@1

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < _Hole )
  {
    while ( 1 )
    {
      v6 = _First;
      v7 = _First[v5];
      v8 = *_Val;
      v18 = _First[v5];
      if ( v7->m_hItem == -1 )
      {
        if ( v8->m_hItem == -1 || v8->m_hItem != -1 )
          goto LABEL_27;
      }
      else
      {
        if ( v8->m_hItem == -1 )
          goto LABEL_26;
      }
      v9 = v7->m_pkItem.m_pObject;
      v19 = v8->m_pkItem.m_pObject;
      v10 = 0;
      if ( ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() )
      {
        do
          CDataReader::GetRecord(
            (CDataReader *)(ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 4),
            v10++);
        while ( v10 < ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() );
      }
      v11 = 0;
      if ( ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() )
      {
        do
          CDataReader::GetRecord(
            (CDataReader *)(ITableBase<MarketSearchInfo_MarketSearchInfoTab>::ms_pkTable + 4),
            v11++);
        while ( v11 < ITableBase<MarketSearchInfo_MarketSearchInfoTab>::GetTotal() );
      }
      v12 = v9->m_pkInfo->ItemAuctionGroup;
      v13 = v19->m_pkInfo->ItemAuctionGroup;
      v14 = 0;
      if ( v12 != v13 )
      {
        if ( v12 <= (unsigned int)v13 )
        {
          if ( v12 < (unsigned int)v13 )
            v14 = 1;
        }
        else
        {
          v14 = -1;
        }
      }
      v15 = v14;
      if ( !v14 )
      {
        v16 = v8->m_hItem;
        v17 = v18->m_hItem;
        if ( v17 != v16 )
        {
          if ( v17 <= v16 )
          {
            if ( v17 < v16 )
              v15 = 1;
          }
          else
          {
            v15 = -1;
          }
        }
      }
      v6 = _First;
      if ( v15 <= 0 )
      {
LABEL_27:
        v6[_Hole] = *_Val;
        return;
      }
      v5 = _Idx;
LABEL_26:
      v6[_Hole] = v6[v5];
      _Hole = v5;
      _Idx = (v5 - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_27;
      v5 = (v5 - 1) / 2;
    }
  }
  _First[_Hole] = *_Val;
}
// A97F10: using guessed type int ITableBase_MarketSearchInfo_MarketSearchInfoTab___ms_pkTable;

//----- (0054C740) --------------------------------------------------------
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByName _Pred)
{
  int v5; // edx@1
  MarketSearchItem *v6; // ecx@4
  MarketSearchItem *v7; // ebx@4
  ItemInfo *v8; // esi@9
  ItemInfo *v9; // edi@9
  int v10; // eax@11
  unsigned int v11; // ecx@12
  unsigned int v12; // edx@12
  unsigned int v13; // edx@20
  unsigned int v14; // ecx@20
  unsigned int v15; // edi@20
  unsigned int v16; // esi@20
  bool v17; // cf@21
  bool v18; // zf@21
  AuctionGroup v19; // ecx@34
  AuctionGroup v20; // edx@34
  unsigned int v21; // ecx@40
  unsigned int v22; // edx@40
  Item *Item1; // [sp+0h] [bp-10h]@9
  Item *Item2; // [sp+4h] [bp-Ch]@9
  MarketSearchItem *v25; // [sp+8h] [bp-8h]@4
  int _Idx; // [sp+Ch] [bp-4h]@1

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < _Hole )
  {
    while ( 1 )
    {
      v6 = _First[v5];
      v7 = *_Val;
      v25 = _First[v5];
      if ( v6->m_hItem == -1 )
      {
        if ( v7->m_hItem == -1 || v7->m_hItem != -1 )
          goto LABEL_48;
      }
      else
      {
        if ( v7->m_hItem == -1 )
          goto LABEL_47;
      }
      v8 = v6->m_pkItem.m_pObject->m_pkInfo;
      v9 = v7->m_pkItem.m_pObject->m_pkInfo;
      Item1 = v6->m_pkItem.m_pObject;
      Item2 = v7->m_pkItem.m_pObject;
      if ( v8 == (ItemInfo *)-34 || v9 == (ItemInfo *)-34 )
      {
        v10 = -1;
        goto LABEL_46;
      }
      v10 = -strcmp(v8->Name, v9->Name);
      if ( !v10 )
      {
        v11 = v9->DemandLv;
        v12 = v8->DemandLv;
        if ( v12 != v11 )
        {
          if ( (signed int)v12 <= (signed int)v11 )
          {
            if ( (signed int)v12 < (signed int)v11 )
              v10 = 1;
          }
          else
          {
            v10 = -1;
          }
        }
        if ( !v10 )
          break;
      }
LABEL_45:
      v5 = _Idx;
LABEL_46:
      if ( !(v10 > 0) )
        goto LABEL_48;
LABEL_47:
      _First[_Hole] = _First[v5];
      _Hole = v5;
      _Idx = (v5 - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_48;
      v5 = (v5 - 1) / 2;
    }
    v13 = LODWORD(v25->m_nPrice);
    v14 = LODWORD(v7->m_nPrice);
    v15 = HIDWORD(v25->m_nPrice);
    v16 = HIDWORD(v7->m_nPrice);
    v10 = 0;
    if ( v13 == v14 )
    {
      v17 = v15 < v16;
      v18 = v15 == v16;
      if ( v15 == v16 )
      {
LABEL_32:
        if ( !v10 )
        {
          v10 = MarketSearchWin::MarketSort::CompMainGroup(&_Pred.baseclass_0, Item1, Item2, 0);
          if ( !v10 )
          {
            v19 = Item1->m_pkInfo->ItemAuctionGroup;
            v20 = Item2->m_pkInfo->ItemAuctionGroup;
            v10 = 0;
            if ( v19 != v20 )
            {
              if ( v19 <= (unsigned int)v20 )
              {
                if ( v19 < (unsigned int)v20 )
                  v10 = 1;
              }
              else
              {
                v10 = -1;
              }
            }
            if ( !v10 )
            {
              v21 = v7->m_hItem;
              v22 = v25->m_hItem;
              if ( v22 != v21 )
              {
                if ( v22 <= v21 )
                {
                  if ( v22 < v21 )
                    v10 = 1;
                }
                else
                {
                  v10 = -1;
                }
              }
            }
          }
        }
        goto LABEL_45;
      }
    }
    else
    {
      v17 = v15 < v16;
      v18 = v15 == v16;
    }
    if ( v17 || v17 | v18 && v13 <= v14 )
    {
      if ( v15 <= v16 && (v15 < v16 || v13 < v14) )
        v10 = 1;
    }
    else
    {
      v10 = -1;
    }
    goto LABEL_32;
  }
LABEL_48:
  _First[_Hole] = *_Val;
}

//----- (0054C900) --------------------------------------------------------
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByNameDesc _Pred)
{
  int v5; // edx@1
  MarketSearchItem *v6; // ecx@4
  MarketSearchItem *v7; // ebx@4
  ItemInfo *v8; // esi@9
  ItemInfo *v9; // edi@9
  int v10; // eax@9
  int v11; // ecx@9
  bool v12; // cf@11
  unsigned __int8 v13; // dl@13
  int v14; // eax@15
  unsigned int v15; // ecx@17
  unsigned int v16; // edx@17
  unsigned int v17; // edx@26
  unsigned int v18; // ecx@26
  unsigned int v19; // edi@26
  unsigned int v20; // esi@26
  signed int v21; // eax@26
  bool v22; // cf@27
  bool v23; // zf@27
  AuctionGroup v24; // ecx@40
  AuctionGroup v25; // edx@40
  signed int v26; // eax@40
  unsigned int v27; // ecx@46
  unsigned int v28; // edx@46
  signed int v29; // eax@46
  Item *Item1; // [sp+0h] [bp-10h]@9
  Item *Item2; // [sp+4h] [bp-Ch]@9
  MarketSearchItem *v32; // [sp+8h] [bp-8h]@4
  int _Idx; // [sp+Ch] [bp-4h]@1

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < _Hole )
  {
    while ( 1 )
    {
      v6 = _First[v5];
      v7 = *_Val;
      v32 = _First[v5];
      if ( v6->m_hItem == -1 )
      {
        if ( v7->m_hItem == -1 || v7->m_hItem != -1 )
          goto LABEL_55;
      }
      else
      {
        if ( v7->m_hItem == -1 )
          goto LABEL_54;
      }
      v8 = v6->m_pkItem.m_pObject->m_pkInfo;
      v9 = v7->m_pkItem.m_pObject->m_pkInfo;
      Item1 = v6->m_pkItem.m_pObject;
      v10 = (int)v8->Name;
      Item2 = v7->m_pkItem.m_pObject;
      v11 = (int)v9->Name;
      if ( v8 == (ItemInfo *)-34 || v9 == (ItemInfo *)-34 )
      {
        v14 = -1;
        goto LABEL_53;
      }
      while ( 1 )
      {
        v12 = *(_BYTE *)v10 < *(_BYTE *)v11;
        if ( *(_BYTE *)v10 != *(_BYTE *)v11 )
          break;
        if ( !*(_BYTE *)v10 )
          goto LABEL_15;
        v13 = *(_BYTE *)(v10 + 1);
        v12 = v13 < *(_BYTE *)(v11 + 1);
        if ( v13 != *(_BYTE *)(v11 + 1) )
          break;
        v10 += 2;
        v11 += 2;
        if ( !v13 )
        {
LABEL_15:
          v14 = 0;
          goto LABEL_16;
        }
      }
      v14 = -v12 - (v12 - 1);
LABEL_16:
      if ( !v14 )
      {
        v15 = v9->DemandLv;
        v16 = v8->DemandLv;
        if ( v16 != v15 )
        {
          if ( (signed int)v16 <= (signed int)v15 )
          {
            if ( (signed int)v16 < (signed int)v15 )
              v14 = 1;
          }
          else
          {
            v14 = -1;
          }
        }
        v14 = -v14;
        if ( !v14 )
          break;
      }
LABEL_52:
      v5 = _Idx;
LABEL_53:
      if ( !(v14 > 0) )
        goto LABEL_55;
LABEL_54:
      _First[_Hole] = _First[v5];
      _Hole = v5;
      _Idx = (v5 - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_55;
      v5 = (v5 - 1) / 2;
    }
    v17 = LODWORD(v32->m_nPrice);
    v18 = LODWORD(v7->m_nPrice);
    v19 = HIDWORD(v32->m_nPrice);
    v20 = HIDWORD(v7->m_nPrice);
    v21 = 0;
    if ( v17 == v18 )
    {
      v22 = v19 < v20;
      v23 = v19 == v20;
      if ( v19 == v20 )
      {
LABEL_38:
        v14 = -v21;
        if ( !v14 )
        {
          v14 = MarketSearchWin::MarketSort::CompMainGroup(&_Pred.baseclass_0, Item1, Item2, 1);
          if ( !v14 )
          {
            v24 = Item1->m_pkInfo->ItemAuctionGroup;
            v25 = Item2->m_pkInfo->ItemAuctionGroup;
            v26 = 0;
            if ( v24 != v25 )
            {
              if ( v24 <= (unsigned int)v25 )
              {
                if ( v24 < (unsigned int)v25 )
                  v26 = 1;
              }
              else
              {
                v26 = -1;
              }
            }
            v14 = -v26;
            if ( !v14 )
            {
              v27 = v7->m_hItem;
              v28 = v32->m_hItem;
              v29 = 0;
              if ( v28 != v27 )
              {
                if ( v28 <= v27 )
                {
                  if ( v28 < v27 )
                    v29 = 1;
                }
                else
                {
                  v29 = -1;
                }
              }
              v14 = -v29;
            }
          }
        }
        goto LABEL_52;
      }
    }
    else
    {
      v22 = v19 < v20;
      v23 = v19 == v20;
    }
    if ( v22 || v22 | v23 && v17 <= v18 )
    {
      if ( v19 <= v20 && (v19 < v20 || v17 < v18) )
        v21 = 1;
    }
    else
    {
      v21 = -1;
    }
    goto LABEL_38;
  }
LABEL_55:
  _First[_Hole] = *_Val;
}

//----- (0054CAC0) --------------------------------------------------------
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByLevel _Pred)
{
  int v5; // ecx@1
  MarketSearchItem **v6; // esi@4
  MarketSearchItem *v7; // edx@4
  MarketSearchItem *v8; // ebx@4
  Item *v9; // eax@9
  ItemInfo *v10; // edi@9
  ItemInfo *v11; // esi@9
  unsigned int v12; // edx@9
  unsigned int v13; // ecx@9
  signed int v14; // eax@9
  bool v15; // zf@14
  bool v16; // sf@14
  char v17; // of@14
  int v18; // eax@17
  unsigned int v19; // edx@18
  unsigned int v20; // ecx@18
  unsigned int v21; // edi@18
  unsigned int v22; // esi@18
  signed int v23; // eax@18
  bool v24; // cf@19
  bool v25; // zf@19
  int v26; // eax@31
  AuctionGroup v27; // ecx@32
  AuctionGroup v28; // edx@32
  unsigned int v29; // edx@38
  unsigned int v30; // ecx@38
  signed int v31; // eax@38
  Item *Item1; // [sp+4h] [bp-10h]@9
  Item *Item2; // [sp+8h] [bp-Ch]@9
  MarketSearchItem *v34; // [sp+Ch] [bp-8h]@4
  int _Idx; // [sp+10h] [bp-4h]@1

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < _Hole )
  {
    while ( 1 )
    {
      v6 = _First;
      v7 = _First[v5];
      v8 = *_Val;
      v34 = _First[v5];
      if ( v7->m_hItem == -1 )
      {
        if ( v8->m_hItem == -1 || v8->m_hItem != -1 )
        {
LABEL_47:
          v6[_Hole] = *_Val;
          return;
        }
      }
      else
      {
        if ( v8->m_hItem == -1 )
          goto LABEL_46;
      }
      v9 = v7->m_pkItem.m_pObject;
      v10 = v9->m_pkInfo;
      v11 = v8->m_pkItem.m_pObject->m_pkInfo;
      v12 = v10->DemandLv;
      Item2 = v8->m_pkItem.m_pObject;
      v13 = v11->DemandLv;
      Item1 = v9;
      v14 = 0;
      if ( v12 != v13 )
      {
        if ( (signed int)v12 <= (signed int)v13 )
        {
          if ( (signed int)v12 < (signed int)v13 )
            v14 = 1;
        }
        else
        {
          v14 = -1;
        }
      }
      v17 = 0;
      v15 = v14 == 0;
      v16 = v14 < 0;
      if ( !v14 )
      {
        if ( v10 == (ItemInfo *)-34 || v11 == (ItemInfo *)-34 )
          goto LABEL_40;
        v18 = -strcmp(v10->Name, v11->Name);
        v17 = 0;
        v15 = v18 == 0;
        v16 = v18 < 0;
        if ( !v18 )
          break;
      }
LABEL_44:
      v6 = _First;
      if ( (unsigned __int8)(v16 ^ v17) | v15 )
        goto LABEL_47;
      v5 = _Idx;
LABEL_46:
      v6[_Hole] = v6[v5];
      _Hole = v5;
      _Idx = (v5 - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_47;
      v5 = (v5 - 1) / 2;
    }
    v19 = LODWORD(v34->m_nPrice);
    v20 = LODWORD(v8->m_nPrice);
    v21 = HIDWORD(v34->m_nPrice);
    v22 = HIDWORD(v8->m_nPrice);
    v23 = 0;
    if ( v19 == v20 )
    {
      v24 = v21 < v22;
      v25 = v21 == v22;
      if ( v21 == v22 )
        goto LABEL_30;
    }
    else
    {
      v24 = v21 < v22;
      v25 = v21 == v22;
    }
    if ( v24 || v24 | v25 && v19 <= v20 )
    {
      if ( v21 <= v22 && (v21 < v22 || v19 < v20) )
        v23 = 1;
    }
    else
    {
      v23 = -1;
    }
LABEL_30:
    v17 = 0;
    v15 = v23 == 0;
    v16 = v23 < 0;
    if ( v23
      || (v26 = MarketSearchWin::MarketSort::CompMainGroup(&_Pred.baseclass_0, Item1, Item2, 0),
          v17 = 0,
          v15 = v26 == 0,
          v16 = v26 < 0,
          v26) )
      goto LABEL_44;
    v27 = Item1->m_pkInfo->ItemAuctionGroup;
    v28 = Item2->m_pkInfo->ItemAuctionGroup;
    if ( v27 != v28 )
    {
      if ( v27 <= (unsigned int)v28 )
      {
        if ( v27 < (unsigned int)v28 )
          v26 = 1;
      }
      else
      {
        v26 = -1;
      }
    }
    v17 = 0;
    v15 = v26 == 0;
    v16 = v26 < 0;
    if ( v26 )
      goto LABEL_44;
    v29 = v34->m_hItem;
    v30 = v8->m_hItem;
    v31 = 0;
    if ( v29 != v30 )
    {
      if ( v29 <= v30 )
      {
        if ( v29 < v30 )
          v31 = 1;
      }
      else
      {
LABEL_40:
        v31 = -1;
      }
    }
    v17 = 0;
    v15 = v31 == 0;
    v16 = v31 < 0;
    goto LABEL_44;
  }
  _First[_Hole] = *_Val;
}

//----- (0054CC90) --------------------------------------------------------
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByLevelDesc _Pred)
{
  int v5; // ecx@1
  MarketSearchItem **v6; // esi@4
  MarketSearchItem *v7; // edx@4
  MarketSearchItem *v8; // ebx@4
  Item *v9; // eax@9
  ItemInfo *v10; // edi@9
  ItemInfo *v11; // esi@9
  unsigned int v12; // edx@9
  unsigned int v13; // ecx@9
  signed int v14; // eax@9
  int v15; // eax@14
  int v16; // eax@15
  int v17; // ecx@15
  bool v18; // cf@17
  unsigned __int8 v19; // dl@19
  int v20; // eax@21
  bool v21; // zf@22
  bool v22; // sf@22
  char v23; // of@22
  unsigned int v24; // edx@23
  unsigned int v25; // ecx@23
  unsigned int v26; // edi@23
  unsigned int v27; // esi@23
  signed int v28; // eax@23
  bool v29; // cf@24
  bool v30; // zf@24
  int v31; // eax@38
  AuctionGroup v32; // ecx@39
  AuctionGroup v33; // edx@39
  unsigned int v34; // edx@45
  unsigned int v35; // ecx@45
  signed int v36; // eax@45
  Item *Item1; // [sp+4h] [bp-10h]@9
  Item *Item2; // [sp+8h] [bp-Ch]@9
  MarketSearchItem *v39; // [sp+Ch] [bp-8h]@4
  int _Idx; // [sp+10h] [bp-4h]@1

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < _Hole )
  {
    while ( 1 )
    {
      v6 = _First;
      v7 = _First[v5];
      v8 = *_Val;
      v39 = _First[v5];
      if ( v7->m_hItem == -1 )
      {
        if ( v8->m_hItem == -1 || v8->m_hItem != -1 )
        {
LABEL_55:
          v6[_Hole] = *_Val;
          return;
        }
      }
      else
      {
        if ( v8->m_hItem == -1 )
          goto LABEL_54;
      }
      v9 = v7->m_pkItem.m_pObject;
      v10 = v9->m_pkInfo;
      v11 = v8->m_pkItem.m_pObject->m_pkInfo;
      v12 = v10->DemandLv;
      Item2 = v8->m_pkItem.m_pObject;
      v13 = v11->DemandLv;
      Item1 = v9;
      v14 = 0;
      if ( v12 != v13 )
      {
        if ( (signed int)v12 <= (signed int)v13 )
        {
          if ( (signed int)v12 < (signed int)v13 )
            v14 = 1;
        }
        else
        {
          v14 = -1;
        }
      }
      v15 = -v14;
      if ( v15 )
        goto LABEL_51;
      v16 = (int)v10->Name;
      v17 = (int)v11->Name;
      if ( v10 == (ItemInfo *)-34 || v11 == (ItemInfo *)-34 )
      {
        v15 = -1;
LABEL_51:
        v23 = 0;
        v21 = v15 == 0;
        v22 = v15 < 0;
        goto LABEL_52;
      }
      while ( 1 )
      {
        v18 = *(_BYTE *)v16 < *(_BYTE *)v17;
        if ( *(_BYTE *)v16 != *(_BYTE *)v17 )
          break;
        if ( !*(_BYTE *)v16 )
          goto LABEL_21;
        v19 = *(_BYTE *)(v16 + 1);
        v18 = v19 < *(_BYTE *)(v17 + 1);
        if ( v19 != *(_BYTE *)(v17 + 1) )
          break;
        v16 += 2;
        v17 += 2;
        if ( !v19 )
        {
LABEL_21:
          v20 = 0;
          goto LABEL_22;
        }
      }
      v20 = -v18 - (v18 - 1);
LABEL_22:
      v23 = 0;
      v21 = v20 == 0;
      v22 = v20 < 0;
      if ( v20 )
        goto LABEL_52;
      v24 = LODWORD(v39->m_nPrice);
      v25 = LODWORD(v8->m_nPrice);
      v26 = HIDWORD(v39->m_nPrice);
      v27 = HIDWORD(v8->m_nPrice);
      v28 = 0;
      if ( v24 == v25 )
      {
        v29 = v26 < v27;
        v30 = v26 == v27;
        if ( v26 == v27 )
          goto LABEL_37;
      }
      else
      {
        v29 = v26 < v27;
        v30 = v26 == v27;
      }
      if ( v29 || v29 | v30 && v24 <= v25 )
      {
        if ( v26 <= v27 && (v26 < v27 || v24 < v25) )
          v28 = 1;
      }
      else
      {
        v28 = -1;
      }
LABEL_37:
      v15 = -v28;
      if ( v15 )
        goto LABEL_51;
      v31 = MarketSearchWin::MarketSort::CompMainGroup(&_Pred.baseclass_0, Item1, Item2, 1);
      v23 = 0;
      v21 = v31 == 0;
      v22 = v31 < 0;
      if ( !v31 )
      {
        v32 = Item1->m_pkInfo->ItemAuctionGroup;
        v33 = Item2->m_pkInfo->ItemAuctionGroup;
        if ( v32 != v33 )
        {
          if ( v32 <= (unsigned int)v33 )
          {
            if ( v32 < (unsigned int)v33 )
              v31 = 1;
          }
          else
          {
            v31 = -1;
          }
        }
        v15 = -v31;
        if ( !v15 )
        {
          v34 = v39->m_hItem;
          v35 = v8->m_hItem;
          v36 = 0;
          if ( v34 != v35 )
          {
            if ( v34 <= v35 )
            {
              if ( v34 < v35 )
                v36 = 1;
            }
            else
            {
              v36 = -1;
            }
          }
          v15 = -v36;
        }
        goto LABEL_51;
      }
LABEL_52:
      v6 = _First;
      if ( (unsigned __int8)(v22 ^ v23) | v21 )
        goto LABEL_55;
      v5 = _Idx;
LABEL_54:
      v6[_Hole] = v6[v5];
      _Hole = v5;
      _Idx = (v5 - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_55;
      v5 = (v5 - 1) / 2;
    }
  }
  _First[_Hole] = *_Val;
}

//----- (0054CE60) --------------------------------------------------------
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByMoney _Pred)
{
  int v5; // ecx@1
  MarketSearchItem **v6; // esi@4
  MarketSearchItem *v7; // edi@4
  MarketSearchItem *v8; // ebx@4
  unsigned int v9; // esi@9
  unsigned int v10; // ecx@9
  unsigned int v11; // edx@9
  unsigned int v12; // edi@9
  signed int v13; // eax@9
  bool v14; // cf@10
  bool v15; // zf@10
  bool v16; // zf@21
  bool v17; // sf@21
  char v18; // of@21
  int v19; // eax@24
  unsigned int v20; // ecx@25
  unsigned int v21; // edx@25
  signed int v22; // eax@25
  int v23; // eax@31
  AuctionGroup v24; // ecx@32
  AuctionGroup v25; // edx@32
  signed int v26; // eax@32
  unsigned int v27; // edx@38
  unsigned int v28; // ecx@38
  signed int v29; // eax@38
  MarketSearchItem *v30; // [sp+4h] [bp-10h]@4
  int _Idx; // [sp+8h] [bp-Ch]@1
  Item *Item1; // [sp+Ch] [bp-8h]@9
  Item *Item2; // [sp+10h] [bp-4h]@9

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < _Hole )
  {
    while ( 1 )
    {
      v6 = _First;
      v7 = _First[v5];
      v8 = *_Val;
      v30 = _First[v5];
      if ( v7->m_hItem == -1 )
      {
        if ( v8->m_hItem == -1 || v8->m_hItem != -1 )
        {
LABEL_47:
          v6[_Hole] = *_Val;
          return;
        }
      }
      else
      {
        if ( v8->m_hItem == -1 )
          goto LABEL_46;
      }
      v9 = HIDWORD(v8->m_nPrice);
      Item1 = v7->m_pkItem.m_pObject;
      v10 = LODWORD(v8->m_nPrice);
      Item2 = v8->m_pkItem.m_pObject;
      v11 = LODWORD(v7->m_nPrice);
      v12 = HIDWORD(v7->m_nPrice);
      v13 = 0;
      if ( v11 == v10 )
      {
        v14 = v12 < v9;
        v15 = v12 == v9;
        if ( v12 == v9 )
          goto LABEL_21;
      }
      else
      {
        v14 = v12 < v9;
        v15 = v12 == v9;
      }
      if ( v14 || v14 | v15 && v11 <= v10 )
      {
        if ( v12 <= v9 && (v12 < v9 || v11 < v10) )
          v13 = 1;
      }
      else
      {
        v13 = -1;
      }
LABEL_21:
      v18 = 0;
      v16 = v13 == 0;
      v17 = v13 < 0;
      if ( !v13 )
      {
        if ( Item1->m_pkInfo == (ItemInfo *)-34 || Item2->m_pkInfo == (ItemInfo *)-34 )
        {
LABEL_40:
          v29 = -1;
        }
        else
        {
          v19 = -strcmp(Item1->m_pkInfo->Name, Item2->m_pkInfo->Name);
          v18 = 0;
          v16 = v19 == 0;
          v17 = v19 < 0;
          if ( v19 )
            goto LABEL_44;
          v20 = Item2->m_pkInfo->DemandLv;
          v21 = Item1->m_pkInfo->DemandLv;
          v22 = 0;
          if ( v21 != v20 )
          {
            if ( (signed int)v21 <= (signed int)v20 )
            {
              if ( (signed int)v21 < (signed int)v20 )
                v22 = 1;
            }
            else
            {
              v22 = -1;
            }
          }
          v18 = 0;
          v16 = v22 == 0;
          v17 = v22 < 0;
          if ( v22
            || (v23 = MarketSearchWin::MarketSort::CompMainGroup(&_Pred.baseclass_0, Item1, Item2, 0),
                v18 = 0,
                v16 = v23 == 0,
                v17 = v23 < 0,
                v23) )
            goto LABEL_44;
          v24 = Item1->m_pkInfo->ItemAuctionGroup;
          v25 = Item2->m_pkInfo->ItemAuctionGroup;
          v26 = 0;
          if ( v24 != v25 )
          {
            if ( v24 <= (unsigned int)v25 )
            {
              if ( v24 < (unsigned int)v25 )
                v26 = 1;
            }
            else
            {
              v26 = -1;
            }
          }
          v18 = 0;
          v16 = v26 == 0;
          v17 = v26 < 0;
          if ( v26 )
            goto LABEL_44;
          v27 = v30->m_hItem;
          v28 = v8->m_hItem;
          v29 = 0;
          if ( v27 != v28 )
          {
            if ( v27 > v28 )
              goto LABEL_40;
            if ( v27 < v28 )
              v29 = 1;
          }
        }
        v18 = 0;
        v16 = v29 == 0;
        v17 = v29 < 0;
      }
LABEL_44:
      v6 = _First;
      if ( (unsigned __int8)(v17 ^ v18) | v16 )
        goto LABEL_47;
      v5 = _Idx;
LABEL_46:
      v6[_Hole] = v6[v5];
      _Hole = v5;
      _Idx = (v5 - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_47;
      v5 = (v5 - 1) / 2;
    }
  }
  _First[_Hole] = *_Val;
}

//----- (0054D040) --------------------------------------------------------
void __cdecl std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, int _Hole, int _Top, MarketSearchItem **_Val, MarketSearchWin::SortByMoneyDesc _Pred)
{
  int v5; // ecx@1
  MarketSearchItem **v6; // esi@4
  MarketSearchItem *v7; // edi@4
  MarketSearchItem *v8; // ebx@4
  unsigned int v9; // esi@9
  unsigned int v10; // ecx@9
  unsigned int v11; // edx@9
  unsigned int v12; // edi@9
  signed int v13; // eax@9
  bool v14; // cf@10
  bool v15; // zf@10
  int v16; // eax@21
  int v17; // ecx@22
  int v18; // eax@22
  bool v19; // cf@24
  unsigned __int8 v20; // dl@26
  int v21; // eax@28
  bool v22; // zf@29
  bool v23; // sf@29
  char v24; // of@29
  unsigned int v25; // ecx@30
  unsigned int v26; // edx@30
  signed int v27; // eax@30
  int v28; // eax@39
  AuctionGroup v29; // ecx@40
  AuctionGroup v30; // edx@40
  signed int v31; // eax@40
  unsigned int v32; // edx@46
  unsigned int v33; // ecx@46
  signed int v34; // eax@46
  MarketSearchItem *v35; // [sp+4h] [bp-10h]@4
  int _Idx; // [sp+8h] [bp-Ch]@1
  Item *Item1; // [sp+Ch] [bp-8h]@9
  Item *Item2; // [sp+10h] [bp-4h]@9

  v5 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < _Hole )
  {
    while ( 1 )
    {
      v6 = _First;
      v7 = _First[v5];
      v8 = *_Val;
      v35 = _First[v5];
      if ( v7->m_hItem == -1 )
      {
        if ( v8->m_hItem == -1 || v8->m_hItem != -1 )
        {
LABEL_56:
          v6[_Hole] = *_Val;
          return;
        }
      }
      else
      {
        if ( v8->m_hItem == -1 )
          goto LABEL_55;
      }
      v9 = HIDWORD(v8->m_nPrice);
      Item1 = v7->m_pkItem.m_pObject;
      v10 = LODWORD(v8->m_nPrice);
      Item2 = v8->m_pkItem.m_pObject;
      v11 = LODWORD(v7->m_nPrice);
      v12 = HIDWORD(v7->m_nPrice);
      v13 = 0;
      if ( v11 == v10 )
      {
        v14 = v12 < v9;
        v15 = v12 == v9;
        if ( v12 == v9 )
          goto LABEL_21;
      }
      else
      {
        v14 = v12 < v9;
        v15 = v12 == v9;
      }
      if ( v14 || v14 | v15 && v11 <= v10 )
      {
        if ( v12 <= v9 && (v12 < v9 || v11 < v10) )
          v13 = 1;
      }
      else
      {
        v13 = -1;
      }
LABEL_21:
      v16 = -v13;
      if ( v16 )
        goto LABEL_52;
      v17 = (int)Item2->m_pkInfo->Name;
      v18 = (int)Item1->m_pkInfo->Name;
      if ( Item1->m_pkInfo == (ItemInfo *)-34 || Item2->m_pkInfo == (ItemInfo *)-34 )
      {
        v16 = -1;
LABEL_52:
        v24 = 0;
        v22 = v16 == 0;
        v23 = v16 < 0;
        goto LABEL_53;
      }
      while ( 1 )
      {
        v19 = *(_BYTE *)v18 < *(_BYTE *)v17;
        if ( *(_BYTE *)v18 != *(_BYTE *)v17 )
          break;
        if ( !*(_BYTE *)v18 )
          goto LABEL_28;
        v20 = *(_BYTE *)(v18 + 1);
        v19 = v20 < *(_BYTE *)(v17 + 1);
        if ( v20 != *(_BYTE *)(v17 + 1) )
          break;
        v18 += 2;
        v17 += 2;
        if ( !v20 )
        {
LABEL_28:
          v21 = 0;
          goto LABEL_29;
        }
      }
      v21 = -v19 - (v19 - 1);
LABEL_29:
      v24 = 0;
      v22 = v21 == 0;
      v23 = v21 < 0;
      if ( v21 )
        goto LABEL_53;
      v25 = Item2->m_pkInfo->DemandLv;
      v26 = Item1->m_pkInfo->DemandLv;
      v27 = 0;
      if ( v26 != v25 )
      {
        if ( (signed int)v26 <= (signed int)v25 )
        {
          if ( (signed int)v26 < (signed int)v25 )
            v27 = 1;
        }
        else
        {
          v27 = -1;
        }
      }
      v16 = -v27;
      if ( v16 )
        goto LABEL_52;
      v28 = MarketSearchWin::MarketSort::CompMainGroup(&_Pred.baseclass_0, Item1, Item2, 1);
      v24 = 0;
      v22 = v28 == 0;
      v23 = v28 < 0;
      if ( !v28 )
      {
        v29 = Item1->m_pkInfo->ItemAuctionGroup;
        v30 = Item2->m_pkInfo->ItemAuctionGroup;
        v31 = 0;
        if ( v29 != v30 )
        {
          if ( v29 <= (unsigned int)v30 )
          {
            if ( v29 < (unsigned int)v30 )
              v31 = 1;
          }
          else
          {
            v31 = -1;
          }
        }
        v16 = -v31;
        if ( !v16 )
        {
          v32 = v35->m_hItem;
          v33 = v8->m_hItem;
          v34 = 0;
          if ( v32 != v33 )
          {
            if ( v32 <= v33 )
            {
              if ( v32 < v33 )
                v34 = 1;
            }
            else
            {
              v34 = -1;
            }
          }
          v16 = -v34;
        }
        goto LABEL_52;
      }
LABEL_53:
      v6 = _First;
      if ( (unsigned __int8)(v23 ^ v24) | v22 )
        goto LABEL_56;
      v5 = _Idx;
LABEL_55:
      v6[_Hole] = v6[v5];
      _Hole = v5;
      _Idx = (v5 - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_56;
      v5 = (v5 - 1) / 2;
    }
  }
  _First[_Hole] = *_Val;
}

//----- (0054D220) --------------------------------------------------------
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred)
{
  MarketSearchItem **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  MarketSearchItem **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByDefault>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByDefault>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByDefault>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByDefault>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByDefault>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0054D2D0) --------------------------------------------------------
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred)
{
  MarketSearchItem **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  MarketSearchItem **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByName>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByName>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByName>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByName>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByName>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0054D380) --------------------------------------------------------
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred)
{
  MarketSearchItem **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  MarketSearchItem **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0054D430) --------------------------------------------------------
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred)
{
  MarketSearchItem **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  MarketSearchItem **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevel>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevel>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevel>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevel>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevel>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0054D4E0) --------------------------------------------------------
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred)
{
  MarketSearchItem **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  MarketSearchItem **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0054D590) --------------------------------------------------------
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred)
{
  MarketSearchItem **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  MarketSearchItem **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoney>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoney>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoney>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoney>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoney>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0054D640) --------------------------------------------------------
void __cdecl std::_Median<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Mid, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred)
{
  MarketSearchItem **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  MarketSearchItem **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0054D6F0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByDefault _Pred)
{
  int v5; // eax@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( MarketSearchWin::SortByDefault::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v6] = _First[v5 - 1];
    v6 = v5 - 1;
  }
  std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (0054D770) --------------------------------------------------------
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByName _Pred)
{
  int v5; // eax@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( MarketSearchWin::SortByName::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v6] = _First[v5 - 1];
    v6 = v5 - 1;
  }
  std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (0054D7F0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByNameDesc _Pred)
{
  int v5; // eax@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v6] = _First[v5 - 1];
    v6 = v5 - 1;
  }
  std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (0054D870) --------------------------------------------------------
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByLevel _Pred)
{
  int v5; // eax@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( MarketSearchWin::SortByLevel::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v6] = _First[v5 - 1];
    v6 = v5 - 1;
  }
  std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (0054D8F0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByLevelDesc _Pred)
{
  int v5; // eax@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v6] = _First[v5 - 1];
    v6 = v5 - 1;
  }
  std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (0054D970) --------------------------------------------------------
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByMoney _Pred)
{
  int v5; // eax@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( MarketSearchWin::SortByMoney::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v6] = _First[v5 - 1];
    v6 = v5 - 1;
  }
  std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (0054D9F0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, int _Hole, int _Bottom, MarketSearchItem **_Val, MarketSearchWin::SortByMoneyDesc _Pred)
{
  int v5; // eax@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v6] = _First[v5 - 1];
    v6 = v5 - 1;
  }
  std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (0054DA70) --------------------------------------------------------
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByDefault>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred)
{
  MarketSearchItem **v4; // esi@1
  int v5; // edi@1
  unsigned int v6; // ebx@10
  MarketSearchItem **v7; // eax@14
  MarketSearchItem *v8; // ecx@14
  bool v9; // zf@16
  int v10; // eax@19
  MarketSearchItem *v11; // ecx@25
  int v12; // eax@26
  MarketSearchItem *v13; // ST1C_4@26
  MarketSearchItem *v14; // eax@29
  MarketSearchItem *v15; // ecx@30
  MarketSearchItem *v16; // eax@31
  std::pair<MarketSearchItem * *,MarketSearchItem * *> *v17; // eax@32
  MarketSearchItem **_Plast; // [sp+10h] [bp-4h]@1

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<MarketSearchItem_____MarketSearchWin::SortByDefault>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)(v4 + 1);
  for ( _Plast = v4 + 1; _First < v4; --v4 )
  {
    if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *(v4 - 1), *v4) )
      break;
    if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *v4, *(v4 - 1)) )
      break;
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
        break;
      if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        break;
      v5 += 4;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = (MarketSearchItem **)v5;
  }
  v6 = (unsigned int)v4;
  while ( 1 )
  {
    while ( 1 )
    {
      for ( ; v5 < (unsigned int)_Last; v5 += 4 )
      {
        if ( !MarketSearchWin::SortByDefault::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        {
          if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
            break;
          v7 = _Plast;
          ++_Plast;
          v8 = *v7;
          *v7 = *(MarketSearchItem **)v5;
          *(_DWORD *)v5 = v8;
        }
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        do
        {
          if ( !MarketSearchWin::SortByDefault::operator__(&_Pred, *(MarketSearchItem **)(v6 - 4), *v4) )
          {
            if ( MarketSearchWin::SortByDefault::operator__(&_Pred, *v4, *(MarketSearchItem **)(v6 - 4)) )
              break;
            v10 = (int)*(v4 - 1);
            --v4;
            *v4 = *(MarketSearchItem **)(v6 - 4);
            *(_DWORD *)(v6 - 4) = v10;
          }
          v6 -= 4;
        }
        while ( (unsigned int)_First < v6 );
        v9 = v6 == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v6 -= 4;
      if ( (MarketSearchItem **)v5 == _Last )
      {
        --v4;
        if ( (MarketSearchItem **)v6 != v4 )
        {
          v14 = *(MarketSearchItem **)v6;
          *(_DWORD *)v6 = *v4;
          *v4 = v14;
        }
        v15 = *v4;
        *v4 = *(_Plast - 1);
        --_Plast;
        *_Plast = v15;
      }
      else
      {
        v16 = *(MarketSearchItem **)v5;
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v16;
        v5 += 4;
      }
    }
    if ( (MarketSearchItem **)v5 == _Last )
      break;
    if ( _Plast != (MarketSearchItem **)v5 )
    {
      v11 = *v4;
      *v4 = *_Plast;
      *_Plast = v11;
    }
    ++_Plast;
    v12 = v5;
    v13 = *v4;
    *v4 = *(MarketSearchItem **)v5;
    ++v4;
    v5 += 4;
    *(_DWORD *)v12 = v13;
  }
  v17 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = _Plast;
  return v17;
}

//----- (0054DC30) --------------------------------------------------------
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByName>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred)
{
  MarketSearchItem **v4; // esi@1
  int v5; // edi@1
  unsigned int v6; // ebx@10
  MarketSearchItem **v7; // eax@14
  MarketSearchItem *v8; // ecx@14
  bool v9; // zf@16
  int v10; // eax@19
  MarketSearchItem *v11; // ecx@25
  int v12; // eax@26
  MarketSearchItem *v13; // ST1C_4@26
  MarketSearchItem *v14; // eax@29
  MarketSearchItem *v15; // ecx@30
  MarketSearchItem *v16; // eax@31
  std::pair<MarketSearchItem * *,MarketSearchItem * *> *v17; // eax@32
  MarketSearchItem **_Plast; // [sp+10h] [bp-4h]@1

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<MarketSearchItem_____MarketSearchWin::SortByName>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)(v4 + 1);
  for ( _Plast = v4 + 1; _First < v4; --v4 )
  {
    if ( MarketSearchWin::SortByName::operator__(&_Pred, *(v4 - 1), *v4) )
      break;
    if ( MarketSearchWin::SortByName::operator__(&_Pred, *v4, *(v4 - 1)) )
      break;
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( MarketSearchWin::SortByName::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
        break;
      if ( MarketSearchWin::SortByName::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        break;
      v5 += 4;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = (MarketSearchItem **)v5;
  }
  v6 = (unsigned int)v4;
  while ( 1 )
  {
    while ( 1 )
    {
      for ( ; v5 < (unsigned int)_Last; v5 += 4 )
      {
        if ( !MarketSearchWin::SortByName::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        {
          if ( MarketSearchWin::SortByName::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
            break;
          v7 = _Plast;
          ++_Plast;
          v8 = *v7;
          *v7 = *(MarketSearchItem **)v5;
          *(_DWORD *)v5 = v8;
        }
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        do
        {
          if ( !MarketSearchWin::SortByName::operator__(&_Pred, *(MarketSearchItem **)(v6 - 4), *v4) )
          {
            if ( MarketSearchWin::SortByName::operator__(&_Pred, *v4, *(MarketSearchItem **)(v6 - 4)) )
              break;
            v10 = (int)*(v4 - 1);
            --v4;
            *v4 = *(MarketSearchItem **)(v6 - 4);
            *(_DWORD *)(v6 - 4) = v10;
          }
          v6 -= 4;
        }
        while ( (unsigned int)_First < v6 );
        v9 = v6 == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v6 -= 4;
      if ( (MarketSearchItem **)v5 == _Last )
      {
        --v4;
        if ( (MarketSearchItem **)v6 != v4 )
        {
          v14 = *(MarketSearchItem **)v6;
          *(_DWORD *)v6 = *v4;
          *v4 = v14;
        }
        v15 = *v4;
        *v4 = *(_Plast - 1);
        --_Plast;
        *_Plast = v15;
      }
      else
      {
        v16 = *(MarketSearchItem **)v5;
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v16;
        v5 += 4;
      }
    }
    if ( (MarketSearchItem **)v5 == _Last )
      break;
    if ( _Plast != (MarketSearchItem **)v5 )
    {
      v11 = *v4;
      *v4 = *_Plast;
      *_Plast = v11;
    }
    ++_Plast;
    v12 = v5;
    v13 = *v4;
    *v4 = *(MarketSearchItem **)v5;
    ++v4;
    v5 += 4;
    *(_DWORD *)v12 = v13;
  }
  v17 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = _Plast;
  return v17;
}

//----- (0054DDF0) --------------------------------------------------------
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred)
{
  MarketSearchItem **v4; // esi@1
  int v5; // edi@1
  unsigned int v6; // ebx@10
  MarketSearchItem **v7; // eax@14
  MarketSearchItem *v8; // ecx@14
  bool v9; // zf@16
  int v10; // eax@19
  MarketSearchItem *v11; // ecx@25
  int v12; // eax@26
  MarketSearchItem *v13; // ST1C_4@26
  MarketSearchItem *v14; // eax@29
  MarketSearchItem *v15; // ecx@30
  MarketSearchItem *v16; // eax@31
  std::pair<MarketSearchItem * *,MarketSearchItem * *> *v17; // eax@32
  MarketSearchItem **_Plast; // [sp+10h] [bp-4h]@1

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)(v4 + 1);
  for ( _Plast = v4 + 1; _First < v4; --v4 )
  {
    if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *(v4 - 1), *v4) )
      break;
    if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *v4, *(v4 - 1)) )
      break;
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
        break;
      if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        break;
      v5 += 4;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = (MarketSearchItem **)v5;
  }
  v6 = (unsigned int)v4;
  while ( 1 )
  {
    while ( 1 )
    {
      for ( ; v5 < (unsigned int)_Last; v5 += 4 )
      {
        if ( !MarketSearchWin::SortByNameDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        {
          if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
            break;
          v7 = _Plast;
          ++_Plast;
          v8 = *v7;
          *v7 = *(MarketSearchItem **)v5;
          *(_DWORD *)v5 = v8;
        }
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        do
        {
          if ( !MarketSearchWin::SortByNameDesc::operator__(&_Pred, *(MarketSearchItem **)(v6 - 4), *v4) )
          {
            if ( MarketSearchWin::SortByNameDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)(v6 - 4)) )
              break;
            v10 = (int)*(v4 - 1);
            --v4;
            *v4 = *(MarketSearchItem **)(v6 - 4);
            *(_DWORD *)(v6 - 4) = v10;
          }
          v6 -= 4;
        }
        while ( (unsigned int)_First < v6 );
        v9 = v6 == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v6 -= 4;
      if ( (MarketSearchItem **)v5 == _Last )
      {
        --v4;
        if ( (MarketSearchItem **)v6 != v4 )
        {
          v14 = *(MarketSearchItem **)v6;
          *(_DWORD *)v6 = *v4;
          *v4 = v14;
        }
        v15 = *v4;
        *v4 = *(_Plast - 1);
        --_Plast;
        *_Plast = v15;
      }
      else
      {
        v16 = *(MarketSearchItem **)v5;
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v16;
        v5 += 4;
      }
    }
    if ( (MarketSearchItem **)v5 == _Last )
      break;
    if ( _Plast != (MarketSearchItem **)v5 )
    {
      v11 = *v4;
      *v4 = *_Plast;
      *_Plast = v11;
    }
    ++_Plast;
    v12 = v5;
    v13 = *v4;
    *v4 = *(MarketSearchItem **)v5;
    ++v4;
    v5 += 4;
    *(_DWORD *)v12 = v13;
  }
  v17 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = _Plast;
  return v17;
}

//----- (0054DFB0) --------------------------------------------------------
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByLevel>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred)
{
  MarketSearchItem **v4; // esi@1
  int v5; // edi@1
  unsigned int v6; // ebx@10
  MarketSearchItem **v7; // eax@14
  MarketSearchItem *v8; // ecx@14
  bool v9; // zf@16
  int v10; // eax@19
  MarketSearchItem *v11; // ecx@25
  int v12; // eax@26
  MarketSearchItem *v13; // ST1C_4@26
  MarketSearchItem *v14; // eax@29
  MarketSearchItem *v15; // ecx@30
  MarketSearchItem *v16; // eax@31
  std::pair<MarketSearchItem * *,MarketSearchItem * *> *v17; // eax@32
  MarketSearchItem **_Plast; // [sp+10h] [bp-4h]@1

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<MarketSearchItem_____MarketSearchWin::SortByLevel>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)(v4 + 1);
  for ( _Plast = v4 + 1; _First < v4; --v4 )
  {
    if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *(v4 - 1), *v4) )
      break;
    if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *v4, *(v4 - 1)) )
      break;
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
        break;
      if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        break;
      v5 += 4;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = (MarketSearchItem **)v5;
  }
  v6 = (unsigned int)v4;
  while ( 1 )
  {
    while ( 1 )
    {
      for ( ; v5 < (unsigned int)_Last; v5 += 4 )
      {
        if ( !MarketSearchWin::SortByLevel::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        {
          if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
            break;
          v7 = _Plast;
          ++_Plast;
          v8 = *v7;
          *v7 = *(MarketSearchItem **)v5;
          *(_DWORD *)v5 = v8;
        }
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        do
        {
          if ( !MarketSearchWin::SortByLevel::operator__(&_Pred, *(MarketSearchItem **)(v6 - 4), *v4) )
          {
            if ( MarketSearchWin::SortByLevel::operator__(&_Pred, *v4, *(MarketSearchItem **)(v6 - 4)) )
              break;
            v10 = (int)*(v4 - 1);
            --v4;
            *v4 = *(MarketSearchItem **)(v6 - 4);
            *(_DWORD *)(v6 - 4) = v10;
          }
          v6 -= 4;
        }
        while ( (unsigned int)_First < v6 );
        v9 = v6 == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v6 -= 4;
      if ( (MarketSearchItem **)v5 == _Last )
      {
        --v4;
        if ( (MarketSearchItem **)v6 != v4 )
        {
          v14 = *(MarketSearchItem **)v6;
          *(_DWORD *)v6 = *v4;
          *v4 = v14;
        }
        v15 = *v4;
        *v4 = *(_Plast - 1);
        --_Plast;
        *_Plast = v15;
      }
      else
      {
        v16 = *(MarketSearchItem **)v5;
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v16;
        v5 += 4;
      }
    }
    if ( (MarketSearchItem **)v5 == _Last )
      break;
    if ( _Plast != (MarketSearchItem **)v5 )
    {
      v11 = *v4;
      *v4 = *_Plast;
      *_Plast = v11;
    }
    ++_Plast;
    v12 = v5;
    v13 = *v4;
    *v4 = *(MarketSearchItem **)v5;
    ++v4;
    v5 += 4;
    *(_DWORD *)v12 = v13;
  }
  v17 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = _Plast;
  return v17;
}

//----- (0054E170) --------------------------------------------------------
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred)
{
  MarketSearchItem **v4; // esi@1
  int v5; // edi@1
  unsigned int v6; // ebx@10
  MarketSearchItem **v7; // eax@14
  MarketSearchItem *v8; // ecx@14
  bool v9; // zf@16
  int v10; // eax@19
  MarketSearchItem *v11; // ecx@25
  int v12; // eax@26
  MarketSearchItem *v13; // ST1C_4@26
  MarketSearchItem *v14; // eax@29
  MarketSearchItem *v15; // ecx@30
  MarketSearchItem *v16; // eax@31
  std::pair<MarketSearchItem * *,MarketSearchItem * *> *v17; // eax@32
  MarketSearchItem **_Plast; // [sp+10h] [bp-4h]@1

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)(v4 + 1);
  for ( _Plast = v4 + 1; _First < v4; --v4 )
  {
    if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *(v4 - 1), *v4) )
      break;
    if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *v4, *(v4 - 1)) )
      break;
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
        break;
      if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        break;
      v5 += 4;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = (MarketSearchItem **)v5;
  }
  v6 = (unsigned int)v4;
  while ( 1 )
  {
    while ( 1 )
    {
      for ( ; v5 < (unsigned int)_Last; v5 += 4 )
      {
        if ( !MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        {
          if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
            break;
          v7 = _Plast;
          ++_Plast;
          v8 = *v7;
          *v7 = *(MarketSearchItem **)v5;
          *(_DWORD *)v5 = v8;
        }
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        do
        {
          if ( !MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *(MarketSearchItem **)(v6 - 4), *v4) )
          {
            if ( MarketSearchWin::SortByLevelDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)(v6 - 4)) )
              break;
            v10 = (int)*(v4 - 1);
            --v4;
            *v4 = *(MarketSearchItem **)(v6 - 4);
            *(_DWORD *)(v6 - 4) = v10;
          }
          v6 -= 4;
        }
        while ( (unsigned int)_First < v6 );
        v9 = v6 == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v6 -= 4;
      if ( (MarketSearchItem **)v5 == _Last )
      {
        --v4;
        if ( (MarketSearchItem **)v6 != v4 )
        {
          v14 = *(MarketSearchItem **)v6;
          *(_DWORD *)v6 = *v4;
          *v4 = v14;
        }
        v15 = *v4;
        *v4 = *(_Plast - 1);
        --_Plast;
        *_Plast = v15;
      }
      else
      {
        v16 = *(MarketSearchItem **)v5;
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v16;
        v5 += 4;
      }
    }
    if ( (MarketSearchItem **)v5 == _Last )
      break;
    if ( _Plast != (MarketSearchItem **)v5 )
    {
      v11 = *v4;
      *v4 = *_Plast;
      *_Plast = v11;
    }
    ++_Plast;
    v12 = v5;
    v13 = *v4;
    *v4 = *(MarketSearchItem **)v5;
    ++v4;
    v5 += 4;
    *(_DWORD *)v12 = v13;
  }
  v17 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = _Plast;
  return v17;
}

//----- (0054E330) --------------------------------------------------------
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByMoney>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred)
{
  MarketSearchItem **v4; // esi@1
  int v5; // edi@1
  unsigned int v6; // ebx@10
  MarketSearchItem **v7; // eax@14
  MarketSearchItem *v8; // ecx@14
  bool v9; // zf@16
  int v10; // eax@19
  MarketSearchItem *v11; // ecx@25
  int v12; // eax@26
  MarketSearchItem *v13; // ST1C_4@26
  MarketSearchItem *v14; // eax@29
  MarketSearchItem *v15; // ecx@30
  MarketSearchItem *v16; // eax@31
  std::pair<MarketSearchItem * *,MarketSearchItem * *> *v17; // eax@32
  MarketSearchItem **_Plast; // [sp+10h] [bp-4h]@1

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<MarketSearchItem_____MarketSearchWin::SortByMoney>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)(v4 + 1);
  for ( _Plast = v4 + 1; _First < v4; --v4 )
  {
    if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *(v4 - 1), *v4) )
      break;
    if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *v4, *(v4 - 1)) )
      break;
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
        break;
      if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        break;
      v5 += 4;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = (MarketSearchItem **)v5;
  }
  v6 = (unsigned int)v4;
  while ( 1 )
  {
    while ( 1 )
    {
      for ( ; v5 < (unsigned int)_Last; v5 += 4 )
      {
        if ( !MarketSearchWin::SortByMoney::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        {
          if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
            break;
          v7 = _Plast;
          ++_Plast;
          v8 = *v7;
          *v7 = *(MarketSearchItem **)v5;
          *(_DWORD *)v5 = v8;
        }
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        do
        {
          if ( !MarketSearchWin::SortByMoney::operator__(&_Pred, *(MarketSearchItem **)(v6 - 4), *v4) )
          {
            if ( MarketSearchWin::SortByMoney::operator__(&_Pred, *v4, *(MarketSearchItem **)(v6 - 4)) )
              break;
            v10 = (int)*(v4 - 1);
            --v4;
            *v4 = *(MarketSearchItem **)(v6 - 4);
            *(_DWORD *)(v6 - 4) = v10;
          }
          v6 -= 4;
        }
        while ( (unsigned int)_First < v6 );
        v9 = v6 == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v6 -= 4;
      if ( (MarketSearchItem **)v5 == _Last )
      {
        --v4;
        if ( (MarketSearchItem **)v6 != v4 )
        {
          v14 = *(MarketSearchItem **)v6;
          *(_DWORD *)v6 = *v4;
          *v4 = v14;
        }
        v15 = *v4;
        *v4 = *(_Plast - 1);
        --_Plast;
        *_Plast = v15;
      }
      else
      {
        v16 = *(MarketSearchItem **)v5;
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v16;
        v5 += 4;
      }
    }
    if ( (MarketSearchItem **)v5 == _Last )
      break;
    if ( _Plast != (MarketSearchItem **)v5 )
    {
      v11 = *v4;
      *v4 = *_Plast;
      *_Plast = v11;
    }
    ++_Plast;
    v12 = v5;
    v13 = *v4;
    *v4 = *(MarketSearchItem **)v5;
    ++v4;
    v5 += 4;
    *(_DWORD *)v12 = v13;
  }
  v17 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = _Plast;
  return v17;
}

//----- (0054E4F0) --------------------------------------------------------
std::pair<MarketSearchItem * *,MarketSearchItem * *> *__cdecl std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(std::pair<MarketSearchItem * *,MarketSearchItem * *> *result, MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred)
{
  MarketSearchItem **v4; // esi@1
  int v5; // edi@1
  unsigned int v6; // ebx@10
  MarketSearchItem **v7; // eax@14
  MarketSearchItem *v8; // ecx@14
  bool v9; // zf@16
  int v10; // eax@19
  MarketSearchItem *v11; // ecx@25
  int v12; // eax@26
  MarketSearchItem *v13; // ST1C_4@26
  MarketSearchItem *v14; // eax@29
  MarketSearchItem *v15; // ecx@30
  MarketSearchItem *v16; // eax@31
  std::pair<MarketSearchItem * *,MarketSearchItem * *> *v17; // eax@32
  MarketSearchItem **_Plast; // [sp+10h] [bp-4h]@1

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)(v4 + 1);
  for ( _Plast = v4 + 1; _First < v4; --v4 )
  {
    if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *(v4 - 1), *v4) )
      break;
    if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *v4, *(v4 - 1)) )
      break;
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
        break;
      if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        break;
      v5 += 4;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = (MarketSearchItem **)v5;
  }
  v6 = (unsigned int)v4;
  while ( 1 )
  {
    while ( 1 )
    {
      for ( ; v5 < (unsigned int)_Last; v5 += 4 )
      {
        if ( !MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)v5) )
        {
          if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *(MarketSearchItem **)v5, *v4) )
            break;
          v7 = _Plast;
          ++_Plast;
          v8 = *v7;
          *v7 = *(MarketSearchItem **)v5;
          *(_DWORD *)v5 = v8;
        }
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        do
        {
          if ( !MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *(MarketSearchItem **)(v6 - 4), *v4) )
          {
            if ( MarketSearchWin::SortByMoneyDesc::operator__(&_Pred, *v4, *(MarketSearchItem **)(v6 - 4)) )
              break;
            v10 = (int)*(v4 - 1);
            --v4;
            *v4 = *(MarketSearchItem **)(v6 - 4);
            *(_DWORD *)(v6 - 4) = v10;
          }
          v6 -= 4;
        }
        while ( (unsigned int)_First < v6 );
        v9 = v6 == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v6 -= 4;
      if ( (MarketSearchItem **)v5 == _Last )
      {
        --v4;
        if ( (MarketSearchItem **)v6 != v4 )
        {
          v14 = *(MarketSearchItem **)v6;
          *(_DWORD *)v6 = *v4;
          *v4 = v14;
        }
        v15 = *v4;
        *v4 = *(_Plast - 1);
        --_Plast;
        *_Plast = v15;
      }
      else
      {
        v16 = *(MarketSearchItem **)v5;
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)v6 = v16;
        v5 += 4;
      }
    }
    if ( (MarketSearchItem **)v5 == _Last )
      break;
    if ( _Plast != (MarketSearchItem **)v5 )
    {
      v11 = *v4;
      *v4 = *_Plast;
      *_Plast = v11;
    }
    ++_Plast;
    v12 = v5;
    v13 = *v4;
    *v4 = *(MarketSearchItem **)v5;
    ++v4;
    v5 += 4;
    *(_DWORD *)v12 = v13;
  }
  v17 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = _Plast;
  return v17;
}

//----- (0054E6B0) --------------------------------------------------------
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred, int *__formal, MarketSearchItem **a5)
{
  MarketSearchItem **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int i; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  int v12; // eax@7
  MarketSearchItem *v13; // edx@7
  void *_Val; // [sp+8h] [bp-Ch]@4
  int v15; // [sp+Ch] [bp-8h]@3
  MarketSearchWin::SortByDefault this[4]; // [sp+10h] [bp-4h]@4
  unsigned int _Bottom; // [sp+1Ch] [bp+8h]@1
  int _Lasta; // [sp+20h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    for ( i = 2 * v7 + 2; ; i = v15 )
    {
      v9 = v5[v7-- - 1];
      v10 = i - 2;
      v15 = v10;
      _Val = v9;
      this[0].baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          if ( MarketSearchWin::SortByDefault::operator__(this, v5[v10], v5[v10 - 1]) )
            --v10;
          v12 = _Lasta;
          v13 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v12] = v13;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(
        v5,
        _Lasta,
        v7,
        (MarketSearchItem **)&_Val,
        this[0]);
      if ( v7 <= 0 )
        break;
      v6 = _Bottom;
    }
  }
}

//----- (0054E770) --------------------------------------------------------
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred, int *__formal, MarketSearchItem **a5)
{
  MarketSearchItem **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int i; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  int v12; // eax@7
  MarketSearchItem *v13; // edx@7
  void *_Val; // [sp+8h] [bp-Ch]@4
  int v15; // [sp+Ch] [bp-8h]@3
  MarketSearchWin::SortByName this[4]; // [sp+10h] [bp-4h]@4
  unsigned int _Bottom; // [sp+1Ch] [bp+8h]@1
  int _Lasta; // [sp+20h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    for ( i = 2 * v7 + 2; ; i = v15 )
    {
      v9 = v5[v7-- - 1];
      v10 = i - 2;
      v15 = v10;
      _Val = v9;
      this[0].baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          if ( MarketSearchWin::SortByName::operator__(this, v5[v10], v5[v10 - 1]) )
            --v10;
          v12 = _Lasta;
          v13 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v12] = v13;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(
        v5,
        _Lasta,
        v7,
        (MarketSearchItem **)&_Val,
        this[0]);
      if ( v7 <= 0 )
        break;
      v6 = _Bottom;
    }
  }
}

//----- (0054E830) --------------------------------------------------------
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred, int *__formal, MarketSearchItem **a5)
{
  MarketSearchItem **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int i; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  int v12; // eax@7
  MarketSearchItem *v13; // edx@7
  void *_Val; // [sp+8h] [bp-Ch]@4
  int v15; // [sp+Ch] [bp-8h]@3
  MarketSearchWin::SortByNameDesc this[4]; // [sp+10h] [bp-4h]@4
  unsigned int _Bottom; // [sp+1Ch] [bp+8h]@1
  int _Lasta; // [sp+20h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    for ( i = 2 * v7 + 2; ; i = v15 )
    {
      v9 = v5[v7-- - 1];
      v10 = i - 2;
      v15 = v10;
      _Val = v9;
      this[0].baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          if ( MarketSearchWin::SortByNameDesc::operator__(this, v5[v10], v5[v10 - 1]) )
            --v10;
          v12 = _Lasta;
          v13 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v12] = v13;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(
        v5,
        _Lasta,
        v7,
        (MarketSearchItem **)&_Val,
        this[0]);
      if ( v7 <= 0 )
        break;
      v6 = _Bottom;
    }
  }
}

//----- (0054E8F0) --------------------------------------------------------
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred, int *__formal, MarketSearchItem **a5)
{
  MarketSearchItem **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int i; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  int v12; // eax@7
  MarketSearchItem *v13; // edx@7
  void *_Val; // [sp+8h] [bp-Ch]@4
  int v15; // [sp+Ch] [bp-8h]@3
  MarketSearchWin::SortByLevel this[4]; // [sp+10h] [bp-4h]@4
  unsigned int _Bottom; // [sp+1Ch] [bp+8h]@1
  int _Lasta; // [sp+20h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    for ( i = 2 * v7 + 2; ; i = v15 )
    {
      v9 = v5[v7-- - 1];
      v10 = i - 2;
      v15 = v10;
      _Val = v9;
      this[0].baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          if ( MarketSearchWin::SortByLevel::operator__(this, v5[v10], v5[v10 - 1]) )
            --v10;
          v12 = _Lasta;
          v13 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v12] = v13;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(
        v5,
        _Lasta,
        v7,
        (MarketSearchItem **)&_Val,
        this[0]);
      if ( v7 <= 0 )
        break;
      v6 = _Bottom;
    }
  }
}

//----- (0054E9B0) --------------------------------------------------------
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred, int *__formal, MarketSearchItem **a5)
{
  MarketSearchItem **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int i; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  int v12; // eax@7
  MarketSearchItem *v13; // edx@7
  void *_Val; // [sp+8h] [bp-Ch]@4
  int v15; // [sp+Ch] [bp-8h]@3
  MarketSearchWin::SortByLevelDesc this[4]; // [sp+10h] [bp-4h]@4
  unsigned int _Bottom; // [sp+1Ch] [bp+8h]@1
  int _Lasta; // [sp+20h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    for ( i = 2 * v7 + 2; ; i = v15 )
    {
      v9 = v5[v7-- - 1];
      v10 = i - 2;
      v15 = v10;
      _Val = v9;
      this[0].baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          if ( MarketSearchWin::SortByLevelDesc::operator__(this, v5[v10], v5[v10 - 1]) )
            --v10;
          v12 = _Lasta;
          v13 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v12] = v13;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(
        v5,
        _Lasta,
        v7,
        (MarketSearchItem **)&_Val,
        this[0]);
      if ( v7 <= 0 )
        break;
      v6 = _Bottom;
    }
  }
}

//----- (0054EA70) --------------------------------------------------------
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred, int *__formal, MarketSearchItem **a5)
{
  MarketSearchItem **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int i; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  int v12; // eax@7
  MarketSearchItem *v13; // edx@7
  void *_Val; // [sp+8h] [bp-Ch]@4
  int v15; // [sp+Ch] [bp-8h]@3
  MarketSearchWin::SortByMoney this[4]; // [sp+10h] [bp-4h]@4
  unsigned int _Bottom; // [sp+1Ch] [bp+8h]@1
  int _Lasta; // [sp+20h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    for ( i = 2 * v7 + 2; ; i = v15 )
    {
      v9 = v5[v7-- - 1];
      v10 = i - 2;
      v15 = v10;
      _Val = v9;
      this[0].baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          if ( MarketSearchWin::SortByMoney::operator__(this, v5[v10], v5[v10 - 1]) )
            --v10;
          v12 = _Lasta;
          v13 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v12] = v13;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(
        v5,
        _Lasta,
        v7,
        (MarketSearchItem **)&_Val,
        this[0]);
      if ( v7 <= 0 )
        break;
      v6 = _Bottom;
    }
  }
}

//----- (0054EB30) --------------------------------------------------------
void __cdecl std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred, int *__formal, MarketSearchItem **a5)
{
  MarketSearchItem **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int i; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  int v12; // eax@7
  MarketSearchItem *v13; // edx@7
  void *_Val; // [sp+8h] [bp-Ch]@4
  int v15; // [sp+Ch] [bp-8h]@3
  MarketSearchWin::SortByMoneyDesc this[4]; // [sp+10h] [bp-4h]@4
  unsigned int _Bottom; // [sp+1Ch] [bp+8h]@1
  int _Lasta; // [sp+20h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    for ( i = 2 * v7 + 2; ; i = v15 )
    {
      v9 = v5[v7-- - 1];
      v10 = i - 2;
      v15 = v10;
      _Val = v9;
      this[0].baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          if ( MarketSearchWin::SortByMoneyDesc::operator__(this, v5[v10], v5[v10 - 1]) )
            --v10;
          v12 = _Lasta;
          v13 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v12] = v13;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(
        v5,
        _Lasta,
        v7,
        (MarketSearchItem **)&_Val,
        this[0]);
      if ( v7 <= 0 )
        break;
      v6 = _Bottom;
    }
  }
}

//----- (0054EBF0) --------------------------------------------------------
void __thiscall std::pair<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::_pair<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(std::pair<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *this)
{
  std::pair<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *v1; // esi@1

  v1 = this;
  if ( this->baseclass_0.second.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->baseclass_0.second.baseclass_0._Myres = 15;
  v1->baseclass_0.second.baseclass_0._Mysize = 0;
  v1->baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (0054EC20) --------------------------------------------------------
void *__thiscall MarketSearchWin::_scalar_deleting_destructor_(MarketSearchWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MarketSearchWin::_MarketSearchWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0054EC50) --------------------------------------------------------
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByDefault _Pred)
{
  unsigned int v3; // eax@1
  MarketSearchItem *v4; // ecx@2
  MarketSearchWin::SortByDefault v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(MarketSearchItem ***)((char *)_First + v3 - 4);
      v5.baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      *(MarketSearchItem **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (MarketSearchItem **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0054ECA0) --------------------------------------------------------
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByName _Pred)
{
  unsigned int v3; // eax@1
  MarketSearchItem *v4; // ecx@2
  MarketSearchWin::SortByName v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(MarketSearchItem ***)((char *)_First + v3 - 4);
      v5.baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      *(MarketSearchItem **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (MarketSearchItem **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0054ECF0) --------------------------------------------------------
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByNameDesc _Pred)
{
  unsigned int v3; // eax@1
  MarketSearchItem *v4; // ecx@2
  MarketSearchWin::SortByNameDesc v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(MarketSearchItem ***)((char *)_First + v3 - 4);
      v5.baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      *(MarketSearchItem **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (MarketSearchItem **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0054ED40) --------------------------------------------------------
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevel _Pred)
{
  unsigned int v3; // eax@1
  MarketSearchItem *v4; // ecx@2
  MarketSearchWin::SortByLevel v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(MarketSearchItem ***)((char *)_First + v3 - 4);
      v5.baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      *(MarketSearchItem **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (MarketSearchItem **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0054ED90) --------------------------------------------------------
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByLevelDesc _Pred)
{
  unsigned int v3; // eax@1
  MarketSearchItem *v4; // ecx@2
  MarketSearchWin::SortByLevelDesc v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(MarketSearchItem ***)((char *)_First + v3 - 4);
      v5.baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      *(MarketSearchItem **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (MarketSearchItem **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0054EDE0) --------------------------------------------------------
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoney _Pred)
{
  unsigned int v3; // eax@1
  MarketSearchItem *v4; // ecx@2
  MarketSearchWin::SortByMoney v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(MarketSearchItem ***)((char *)_First + v3 - 4);
      v5.baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      *(MarketSearchItem **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (MarketSearchItem **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0054EE30) --------------------------------------------------------
void __cdecl std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, MarketSearchWin::SortByMoneyDesc _Pred)
{
  unsigned int v3; // eax@1
  MarketSearchItem *v4; // ecx@2
  MarketSearchWin::SortByMoneyDesc v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(MarketSearchItem ***)((char *)_First + v3 - 4);
      v5.baseclass_0.dummy[0] = _Pred.baseclass_0.dummy[0];
      *(MarketSearchItem **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (MarketSearchItem **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0054EE80) --------------------------------------------------------
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByDefault>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByDefault _Pred)
{
  MarketSearchItem **v4; // ebx@1
  MarketSearchItem **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<MarketSearchItem * *,MarketSearchItem * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByDefault>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByDefault>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByDefault>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByDefault_MarketSearchItem__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByDefault>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByDefault>(v4, v5, _Pred);
  }
}

//----- (0054EF70) --------------------------------------------------------
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByName>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByName _Pred)
{
  MarketSearchItem **v4; // ebx@1
  MarketSearchItem **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<MarketSearchItem * *,MarketSearchItem * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByName>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByName>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByName>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByName_MarketSearchItem__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByName>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByName>(v4, v5, _Pred);
  }
}

//----- (0054F060) --------------------------------------------------------
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByNameDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByNameDesc _Pred)
{
  MarketSearchItem **v4; // ebx@1
  MarketSearchItem **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<MarketSearchItem * *,MarketSearchItem * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByNameDesc>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByNameDesc>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByNameDesc_MarketSearchItem__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByNameDesc>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByNameDesc>(v4, v5, _Pred);
  }
}

//----- (0054F150) --------------------------------------------------------
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevel>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByLevel _Pred)
{
  MarketSearchItem **v4; // ebx@1
  MarketSearchItem **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<MarketSearchItem * *,MarketSearchItem * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByLevel>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevel>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevel>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByLevel_MarketSearchItem__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevel>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByLevel>(v4, v5, _Pred);
  }
}

//----- (0054F240) --------------------------------------------------------
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevelDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByLevelDesc _Pred)
{
  MarketSearchItem **v4; // ebx@1
  MarketSearchItem **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<MarketSearchItem * *,MarketSearchItem * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevelDesc>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByLevelDesc>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByLevelDesc_MarketSearchItem__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByLevelDesc>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByLevelDesc>(v4, v5, _Pred);
  }
}

//----- (0054F330) --------------------------------------------------------
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoney>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByMoney _Pred)
{
  MarketSearchItem **v4; // ebx@1
  MarketSearchItem **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<MarketSearchItem * *,MarketSearchItem * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByMoney>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoney>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoney>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByMoney_MarketSearchItem__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoney>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByMoney>(v4, v5, _Pred);
  }
}

//----- (0054F420) --------------------------------------------------------
void __cdecl std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoneyDesc>(MarketSearchItem **_First, MarketSearchItem **_Last, int _Ideal, MarketSearchWin::SortByMoneyDesc _Pred)
{
  MarketSearchItem **v4; // ebx@1
  MarketSearchItem **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<MarketSearchItem * *,MarketSearchItem * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoneyDesc>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<MarketSearchItem_____int_MarketSearchWin::SortByMoneyDesc>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc_MarketSearchItem__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<MarketSearchItem_____int_MarketSearchItem___MarketSearchWin::SortByMoneyDesc>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<MarketSearchItem_____MarketSearchWin::SortByMoneyDesc>(v4, v5, _Pred);
  }
}

//----- (0054F510) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(...)
{
  std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *v4; // edx@1
  int v5; // ecx@1
  int v6; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v7; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v8; // edi@1
  bool v9; // cl@1
  const unsigned int v10; // ebx@2
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v11; // ebx@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<ch *v13; // eax@12
  int v14; // ecx@15
  std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *v15; // [sp+Ch] [bp-4h]@1
  bool _Addleft; // [sp+1Ch] [bp+Ch]@1

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = *(_DWORD *)(v5 + 4);
  v7 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v5;
  v8 = _Node;
  v9 = 1;
  v15 = v4;
  _Addleft = 1;
  if ( !*(_BYTE *)(v6 + 45) )
  {
    v10 = v8->_Myval.baseclass_0.first;
    do
    {
      v7 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v6;
      if ( _Leftish )
        v9 = *(_DWORD *)(v6 + 12) >= v10;
      else
        v9 = v10 < *(_DWORD *)(v6 + 12);
      _Addleft = v9;
      if ( v9 )
        v6 = *(_DWORD *)v6;
      else
        v6 = *(_DWORD *)(v6 + 8);
    }
    while ( !*(_BYTE *)(v6 + 45) );
  }
  v11 = v7;
  *(_DWORD *)&_Leftish = v7;
  if ( v9 )
  {
    if ( v7 == **((std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > ***)&v4->baseclass_0
                + 1) )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
                          v4,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *)&_Leftish,
                          1,
                          v7,
                          v8)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)_Leftish;
    v4 = v15;
  }
  if ( v11->_Myval.baseclass_0.first >= v8->_Myval.baseclass_0.first )
  {
    if ( v8->_Myval.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v8->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    v8->_Myval.baseclass_0.second.baseclass_0._Myres = 15;
    v8->_Myval.baseclass_0.second.baseclass_0._Mysize = 0;
    v8->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(v8);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
                        v4,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *)&_Leftish,
                        _Addleft,
                        v7,
                        v8)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (0054F610) --------------------------------------------------------
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>(...)
{
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_tr *v2; // esi@1
  void *v3; // edi@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> *v4; // ebx@3
  int v6; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v8; // [sp+Ch] [bp-1Ch]@2
  char *v9; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v11; // [sp+18h] [bp-10h]@1
  int v12; // [sp+24h] [bp-4h]@2

  v11 = &v6;
  v2 = this;
  v3 = operator new(0x30u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v3 + 22) = 0;
  v12 = 0;
  v9 = (char *)v3 + 12;
  v8 = (char *)v3 + 12;
  LOBYTE(v12) = 1;
  if ( v3 != (void *)-12 )
  {
    v4 = _Val;
    *((_DWORD *)v3 + 8) = 15;
    *((_DWORD *)v3 + 7) = 0;
    *((_BYTE *)v3 + 12) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 12),
      &v4->baseclass_0.first,
      0,
      0xFFFFFFFFu);
    *((_DWORD *)v3 + 10) = v4->baseclass_0.second;
  }
  return (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_tr *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0054F6F0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>__>(std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *this, std::pair<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v2; // edi@1
  void *v3; // eax@1
  void *v4; // esi@1
  int v5; // eax@2
  std::pair<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *v6; // edx@3
  int v8; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v10; // [sp+Ch] [bp-1Ch]@2
  char *v11; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v13; // [sp+18h] [bp-10h]@1
  int v14; // [sp+24h] [bp-4h]@2

  v13 = &v8;
  v2 = this;
  v3 = operator new(0x30u);
  v4 = v3;
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  v5 = (int)((char *)v3 + 12);
  *((_DWORD *)v4 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v4 + 22) = 0;
  v14 = 0;
  v11 = (char *)v4 + 12;
  v10 = (char *)v4 + 12;
  LOBYTE(v14) = 1;
  if ( v4 != (void *)-12 )
  {
    v6 = _Val;
    *(_DWORD *)v5 = _Val->baseclass_0.first;
    *((_DWORD *)v4 + 9) = 15;
    *((_DWORD *)v4 + 8) = 0;
    *((_BYTE *)v4 + 16) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 16),
      &v6->baseclass_0.second,
      0,
      0xFFFFFFFFu);
  }
  return (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0054F7D0) --------------------------------------------------------
bool __thiscall SLWCreateInfo::Item::AddWin(SLWCreateInfo::Item *this, char *pcNodeName, SLWCreateInfo::SprDataType eType)
{
  SLWCreateInfo::Item *v3; // edi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v4; // eax@4
  bool v5; // al@7
  SLWCreateInfo::Item *v6; // esi@10
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v7; // eax@10
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pai result; // [sp+0h] [bp-78h]@4
  SLWCreateInfo::Item *v9; // [sp+8h] [bp-70h]@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,enum SLWCreateInfo::SprDataType> addEle; // [sp+Ch] [bp-6Ch]@2
  std::pair<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > addOrderEle; // [sp+2Ch] [bp-4Ch]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4Ch] [bp-2Ch]@2
  unsigned int v13; // [sp+68h] [bp-10h]@1
  int v14; // [sp+74h] [bp-4h]@2
  int v15; // [sp+78h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  v9 = this;
  if ( !pcNodeName )
    return 0;
  addEle.baseclass_0.first.baseclass_0._Myres = 15;
  addEle.baseclass_0.first.baseclass_0._Mysize = 0;
  addEle.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  addEle.baseclass_0.second = 0;
  thisa.baseclass_0._Myres = 15;
  v14 = 0;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcNodeName, strlen(pcNodeName));
  LOBYTE(v14) = 1;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&addEle.baseclass_0.first, &thisa);
  LOBYTE(v14) = 0;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  addEle.baseclass_0.second = eType;
  v4 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>(&v3->mapSprDataWinState.baseclass_0.baseclass_0, (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> *)&addEle);
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&v3->mapSprDataWinState,
    &result,
    v4,
    0);
  if ( !result.baseclass_0.second )
  {
    if ( addEle.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&addEle);
    return 0;
  }
  addOrderEle.baseclass_0.second.baseclass_0._Myres = 15;
  addOrderEle.baseclass_0.second.baseclass_0._Mysize = 0;
  addOrderEle.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  addOrderEle.baseclass_0.first = *((_DWORD *)&v9->mapSprDataWinState.baseclass_0.baseclass_0 + 2) - 1;
  LOBYTE(v14) = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, pcNodeName, strlen(pcNodeName));
  LOBYTE(v14) = 3;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&addOrderEle.baseclass_0.second, &thisa);
  LOBYTE(v14) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v6 = v9;
  v7 = std::_Tree_val<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>__>(
         &v9->mapSprDataWinStateOrder.baseclass_0.baseclass_0,
         &addOrderEle);
  std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(
    &v6->mapSprDataWinStateOrder.baseclass_0,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<ch *)&result,
    v7,
    0);
  if ( result.baseclass_0.second )
  {
    if ( addOrderEle.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&addOrderEle.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    addOrderEle.baseclass_0.second.baseclass_0._Myres = 15;
    addOrderEle.baseclass_0.second.baseclass_0._Mysize = 0;
    addOrderEle.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( addEle.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&addEle);
    v5 = 1;
  }
  else
  {
    if ( addOrderEle.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&addOrderEle.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    addOrderEle.baseclass_0.second.baseclass_0._Myres = 15;
    addOrderEle.baseclass_0.second.baseclass_0._Mysize = 0;
    addOrderEle.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( addEle.baseclass_0.first.baseclass_0._Myres < 0x10 )
      return 0;
    operator delete(*(void **)&addEle);
    v5 = 0;
  }
  return v5;
}
// A85C00: using guessed type int __security_cookie;

//----- (0054F9C0) --------------------------------------------------------
void __thiscall MiniHouseInvWin::SetInvType(MiniHouseInvWin *this, unsigned int uiInvType)
{
  this->m_uiInvType = uiInvType;
}

//----- (0054F9D0) --------------------------------------------------------
void __thiscall MiniHouseInvWin::SetActive(MiniHouseInvWin *this, bool bActive)
{
  this->m_bActive = bActive;
}

//----- (0054F9E0) --------------------------------------------------------
bool __thiscall MiniHouseInvWin::GetActive(MiniHouseInvWin *this)
{
  return this->m_bActive;
}

//----- (0054F9F0) --------------------------------------------------------
bool __thiscall MiniHouseInvWin::IsLock(MiniHouseInvWin *this)
{
  return this->m_bLock;
}

//----- (0054FA00) --------------------------------------------------------
void __thiscall MiniHouseInvTabButWin::MiniHouseInvTabButWin(MiniHouseInvTabButWin *this)
{
  MiniHouseInvTabButWin *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInvTabButWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInvTabButWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
}
// 99F384: using guessed type int (__stdcall *MiniHouseInvTabButWin___vftable_)(int uiFlags);
// 99F3A4: using guessed type int (__thiscall *MiniHouseInvTabButWin___vftable_)(void *p, char);

//----- (0054FA30) --------------------------------------------------------
void __thiscall MiniHouseInvTabButWin::_MiniHouseInvTabButWin(MiniHouseInvTabButWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInvTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInvTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 99F384: using guessed type int (__stdcall *MiniHouseInvTabButWin___vftable_)(int uiFlags);
// 99F3A4: using guessed type int (__thiscall *MiniHouseInvTabButWin___vftable_)(void *p, char);

//----- (0054FA50) --------------------------------------------------------
bool __thiscall MiniHouseInvTabButWin::Create(MiniHouseInvTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  return PgWinBut::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, uiCmdMsg, 0, 0) != 0;
}

//----- (0054FB70) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnActivePage(MiniHouseInventoryWin *this, unsigned int uiIndex)
{
  MiniHouseInventoryWin *v2; // ebx@1
  char *v3; // esi@2
  signed int v4; // edi@2
  unsigned int v5; // esi@5
  signed int v6; // edi@5

  v2 = this;
  if ( uiIndex < 1 )
  {
    v3 = (char *)this->m_apkMiniHouseInvWin;
    v4 = 24;
    do
    {
      *(_BYTE *)(*(_DWORD *)v3 + 456) = 0;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 324))(0.0);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v2->m_iActivePage = uiIndex;
    if ( 24 * uiIndex < 24 * uiIndex + 24 )
    {
      v5 = (unsigned int)&v2->m_apkMiniHouseInvWin[24 * uiIndex];
      v6 = 24;
      do
      {
        *(_BYTE *)(*(_DWORD *)v5 + 456) = 1;
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 324))(0.0);
        v5 += 4;
        --v6;
      }
      while ( v6 );
    }
  }
}

//----- (0054FC30) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnHelpLink(MiniHouseInventoryWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MinihouseInv");
}

//----- (0054FC60) --------------------------------------------------------
void __thiscall MiniHouseInvWin::_MiniHouseInvWin(MiniHouseInvWin *this)
{
  MiniHouseInvWin *v1; // esi@1
  NiTexturingProperty *v2; // edi@1
  NiScreenElements *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInvWin::_vftable_;
  v2 = this->m_spSubImageTexProp.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spSubImagePlane.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  ItemIcon::_ItemIcon(&v1->baseclass_0);
}
// 99F5DC: using guessed type int (__stdcall *MiniHouseInvWin___vftable_)(int uiFlags);
// 99F5FC: using guessed type int (__thiscall *MiniHouseInvWin___vftable_)(void *p, char);

//----- (0054FD10) --------------------------------------------------------
bool __thiscall MiniHouseInvTabButWin::EatDropInstance(MiniHouseInvTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PgCursor::ms_bKeepDrop = 1;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)();
  return 1;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (0054FD30) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::MiniHouseInventoryWin(MiniHouseInventoryWin *this)
{
  MiniHouseInventoryWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInventoryWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInventoryWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_apkMiniHouseInvWin[0] = 0;
  v1->m_apkMiniHouseInvWin[1] = 0;
  v1->m_apkMiniHouseInvWin[2] = 0;
  v1->m_apkMiniHouseInvWin[3] = 0;
  v1->m_apkMiniHouseInvWin[4] = 0;
  v1->m_apkMiniHouseInvWin[5] = 0;
  v1->m_apkMiniHouseInvWin[6] = 0;
  v1->m_apkMiniHouseInvWin[7] = 0;
  v1->m_apkMiniHouseInvWin[8] = 0;
  v1->m_apkMiniHouseInvWin[9] = 0;
  v1->m_apkMiniHouseInvWin[10] = 0;
  v1->m_apkMiniHouseInvWin[11] = 0;
  v1->m_apkMiniHouseInvWin[12] = 0;
  v1->m_apkMiniHouseInvWin[13] = 0;
  v1->m_apkMiniHouseInvWin[14] = 0;
  v1->m_apkMiniHouseInvWin[15] = 0;
  v1->m_apkMiniHouseInvWin[16] = 0;
  v1->m_apkMiniHouseInvWin[17] = 0;
  v1->m_apkMiniHouseInvWin[18] = 0;
  v1->m_apkMiniHouseInvWin[19] = 0;
  v1->m_apkMiniHouseInvWin[20] = 0;
  v1->m_apkMiniHouseInvWin[21] = 0;
  v1->m_apkMiniHouseInvWin[22] = 0;
  v1->m_apkMiniHouseInvWin[23] = 0;
  v1->m_apkEquipWin[0] = 0;
  v1->m_apkEquipWin[1] = 0;
  v1->m_apkEquipWin[2] = 0;
  v1->m_apkEquipWin[3] = 0;
  v1->m_apkEquipWin[4] = 0;
  v1->m_apkEquipWin[5] = 0;
  v1->m_apkEquipWin[6] = 0;
  v1->m_apkEquipWin[7] = 0;
  v1->m_apkEquipWin[8] = 0;
  v1->m_apkEquipWin[9] = 0;
  v1->m_apkEquipWin[10] = 0;
  v1->m_iActivePage = 0;
  v1->m_PreEquipSkinItemID = -1;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99F86C: using guessed type int (__stdcall *MiniHouseInventoryWin___vftable_)(int uiFlags);
// 99F88C: using guessed type int (__thiscall *MiniHouseInventoryWin___vftable_)(void *p, char);

//----- (0054FE70) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::_MiniHouseInventoryWin(MiniHouseInventoryWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInventoryWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInventoryWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99F86C: using guessed type int (__stdcall *MiniHouseInventoryWin___vftable_)(int uiFlags);
// 99F88C: using guessed type int (__thiscall *MiniHouseInventoryWin___vftable_)(void *p, char);

//----- (0054FEA0) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnInvLClickNormalMode(MiniHouseInventoryWin *this, unsigned int uiInvIndex)
{
  MiniHouseInventoryWin *v2; // esi@1
  MiniHouseInvWin *v3; // ecx@1
  Item *v4; // eax@2

  v2 = this;
  v3 = this->m_apkMiniHouseInvWin[uiInvIndex];
  if ( !v3->m_bLock )
  {
    v4 = ItemIcon::GetItem(&v3->baseclass_0);
    if ( v4 )
    {
      v2->m_kDropContents.m_eSenderType = 10;
      v2->m_kDropContents.m_eType = 0;
      v2->m_kDropContents.m_apvParam[0] = v4;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
      v2->m_kDrop.m_pkSender = (PgWin *)v2;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0054FF20) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnInvLClickShopMode(MiniHouseInventoryWin *this, unsigned int uiInvIndex)
{
  MiniHouseInventoryWin::OnInvLClickNormalMode(this, uiInvIndex);
}

//----- (0054FF30) --------------------------------------------------------
bool __thiscall MiniHouseInventoryWin::DropOnInv(MiniHouseInventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents::SenderType v3; // esi@1
  MiniHouseInventoryWin *v4; // ebx@1
  bool result; // al@3
  unsigned int v6; // edi@4
  void *v7; // eax@4
  InventoryWin *v8; // ecx@6

  v3 = pkContents->m_eSenderType;
  v4 = this;
  if ( v3 && v3 != 10 )
  {
    result = 0;
  }
  else
  {
    v6 = pkContents->m_uiSenderIndex;
    v7 = pkContents->m_apvParam[0];
    if ( v7 )
    {
      if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v7 + 4))(v7) == 18 )
      {
        v8 = (InventoryWin *)v4->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
        if ( v8 )
        {
          if ( !v3 )
            InventoryWin::OnInvRClick(v8, v6, 1u);
        }
      }
    }
    result = 1;
  }
  return result;
}

//----- (0054FF90) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::SetDefaultHouse(MiniHouseInventoryWin *this)
{
  MiniHouseInventoryWin *v1; // edi@1
  signed int v2; // ebx@1
  ItemIcon **v3; // esi@1
  ItemInfo *v4; // eax@3

  v1 = this;
  v2 = 0;
  v3 = (ItemIcon **)this->m_apkMiniHouseInvWin;
  do
  {
    if ( ItemIcon::GetItem(*v3) )
    {
      v4 = ItemIcon::GetItem(*v3)->m_pkInfo;
      if ( v4 )
      {
        if ( !_strcmpi("House_MushRoom", v4->InxName) )
          GameFrameWork::NcMiniHouseActivReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v2 + 11);
      }
    }
    ++v2;
    ++v3;
  }
  while ( v2 < 24 );
}

//----- (0054FFF0) --------------------------------------------------------
void __thiscall MiniHouseInvWin::MiniHouseInvWin(MiniHouseInvWin *this)
{
  MiniHouseInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInvWin::_vftable_;
  v1->m_spSubImagePlane.m_pObject = 0;
  v1->m_spSubImageTexProp.m_pObject = 0;
  v1->baseclass_0.m_pkLotText = 0;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = 9;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  *(_WORD *)&v1->m_bActive = 0;
}
// 99F5DC: using guessed type int (__stdcall *MiniHouseInvWin___vftable_)(int uiFlags);
// 99F5FC: using guessed type int (__thiscall *MiniHouseInvWin___vftable_)(void *p, char);

//----- (00550090) --------------------------------------------------------
void __thiscall MiniHouseInvWin::UpdateMeWin(MiniHouseInvWin *this, float fCurTime)
{
  MiniHouseInvWin *v2; // esi@1
  unsigned int v3; // eax@1
  Item *v4; // edi@2
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@7

  v2 = this;
  v3 = this->m_uiInvType;
  if ( v3 == 9 )
  {
    v4 = g_kInventory.m_aspMiniHouseInv[this->m_uiInvIndex].m_pObject;
  }
  else
  {
    if ( v3 != 8 )
      goto LABEL_7;
    v4 = g_kInventory.m_aspMiniHouseEquip[this->m_uiInvIndex].m_pObject;
  }
  if ( v4 != ItemIcon::GetItem(&this->baseclass_0) )
    ItemIcon::SetItem(&v2->baseclass_0, v4, 1);
LABEL_7:
  v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( v2->m_bActive )
  {
    v5(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
    if ( !ItemIcon::GetItem(&v2->baseclass_0) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2,
        0);
    IconWin::UpdateMeWin(&v2->baseclass_0.baseclass_0, fCurTime);
  }
  else
  {
    v5(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  }
}

//----- (00550140) --------------------------------------------------------
void __thiscall MiniHouseInvWin::DoAction(MiniHouseInvWin *this)
{
  MiniHouseInvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_bLock )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (00550170) --------------------------------------------------------
void __thiscall MiniHouseInvWin::DoRAction(MiniHouseInvWin *this)
{
  MiniHouseInvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_bLock )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (005501A0) --------------------------------------------------------
void __thiscall MiniHouseInvWin::OnFirstHitWin(MiniHouseInvWin *this)
{
  MiniHouseInvWin *v1; // esi@1
  Item *v2; // edi@1
  ItemInfoWin *v3; // ecx@4

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
  v2 = ItemIcon::GetItem(&v1->baseclass_0);
  if ( v2
    && !v1->m_bLock
    && PgWin::GetParentWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0) )
  {
    v3 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v3 )
    {
      ItemInfoWin::SetItemInfo(v3, v2);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (00550200) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::UpdateMeWin(MiniHouseInventoryWin *this, float fCurTime)
{
  MiniHouseInventoryWin *v2; // esi@1
  Item *v3; // eax@1
  unsigned __int16 v4; // cx@2
  ItemViewInfo *v5; // eax@3
  NiTexture *v6; // eax@5
  char acFileName[260]; // [sp+4h] [bp-108h]@5
  unsigned int v8; // [sp+108h] [bp-4h]@1
  int v9; // [sp+10Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkEquipWin[0]->baseclass_0);
  if ( v3 )
  {
    v4 = v3->m_kStruct.itemid;
    if ( v2->m_PreEquipSkinItemID != v4 )
    {
      v2->m_PreEquipSkinItemID = v4;
      v5 = v3->m_pkViewInfo;
      if ( v5 )
      {
        if ( MiniHouseTable::GetByInxName(v5->InxName) )
        {
          Folder::Menu();
          sprintf(acFileName, "%sgame\\MiniHouse\\%s.dds");
          v6 = (NiTexture *)PgUtil::LoadSourceTexture(acFileName);
          if ( v6 )
            PgSpr::SetTexture(v2->m_pkMiniHouseSprWin->m_spSpr.m_pObject, v6);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005502B0) --------------------------------------------------------
bool __thiscall MiniHouseInventoryWin::Change(MiniHouseInventoryWin *this, unsigned int uiInvType, Item *pkItem, unsigned int uiInvIndex)
{
  MiniHouseInventoryWin *v4; // esi@1
  ItemIcon *v5; // ecx@2
  ItemIcon *v7; // ecx@4

  v4 = this;
  if ( uiInvIndex <= 0xA )
  {
    v7 = (ItemIcon *)this->m_apkEquipWin[uiInvIndex];
    if ( v7 )
      ItemIcon::SetItem(v7, pkItem, 1);
    if ( !ItemIcon::GetItem(&v4->m_apkEquipWin[uiInvIndex]->baseclass_0) )
      MiniHouseInventoryWin::SetDefaultHouse(v4);
  }
  else
  {
    v5 = (ItemIcon *)*(&this->baseclass_0.m_iDragOffY + uiInvIndex);
    if ( v5 )
    {
      ItemIcon::SetItem(v5, pkItem, 1);
      return 0;
    }
  }
  return 0;
}

//----- (00550320) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnInvLClick(MiniHouseInventoryWin *this, unsigned int uiInvIndex)
{
  MiniHouseInventoryWin::OnInvLClickNormalMode(this, uiInvIndex);
}

//----- (00550330) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnInvShiftRClickNormalMode(MiniHouseInventoryWin *this, unsigned int uiInvIndex)
{
  MiniHouseInventoryWin *v2; // esi@1
  char *v3; // esi@2
  char *v4; // edi@2

  v2 = this;
  if ( PrivateStoreWin::ms_bPrivateStoreWin )
  {
    v3 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v4 = TextData::Get(0x122CF41Au);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
  else
  {
    if ( ItemIcon::GetItem(&this->m_apkMiniHouseInvWin[uiInvIndex]->baseclass_0) )
      GameFrameWork::NcMiniHouseActivReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, uiInvIndex + 11);
  }
}
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (005503C0) --------------------------------------------------------
char __thiscall MiniHouseInventoryWin::GetSkin(MiniHouseInventoryWin *this)
{
  Item *v1; // eax@1
  ItemViewInfo *v2; // eax@2
  char *v3; // eax@3
  char result; // al@4

  v1 = ItemIcon::GetItem(&this->m_apkEquipWin[0]->baseclass_0);
  if ( v1 && (v2 = v1->m_pkViewInfo) != 0 && (v3 = (char *)MiniHouseTable::GetByInxName(v2->InxName)) != 0 )
    result = *v3;
  else
    result = 0;
  return result;
}

//----- (005503F0) --------------------------------------------------------
void __thiscall MiniHouseInvWin::SetLock(MiniHouseInvWin *this, bool bLock)
{
  MiniHouseInvWin *v2; // ebx@1
  NiProperty *v3; // edi@2
  void *v4; // eax@3
  void *v5; // esi@3
  NiProperty *v6; // esi@7
  char *v7; // eax@7
  void *v8; // eax@8
  NiProperty *v9; // eax@9
  double v10; // st7@13
  float v11; // ST14_4@15
  float v12; // ST18_4@15
  float v13; // ST1C_4@15

  v2 = this;
  if ( this->m_bLock != bLock )
  {
    v3 = NiAVObject::GetProperty(
           &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           9);
    if ( !v3 )
    {
      v4 = operator new(0x28u);
      v5 = v4;
      if ( v4 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v4);
        *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
        *((_WORD *)v5 + 14) = 0;
        *((_DWORD *)v5 + 8) = 0;
        *((_DWORD *)v5 + 9) = 1;
      }
      else
      {
        v5 = 0;
      }
      v3 = (NiProperty *)v5;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        (NiProperty *)v5);
    }
    v6 = NiAVObject::GetProperty(
           &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           3);
    v7 = 0;
    if ( !v6 )
    {
      v8 = operator new(0x60u);
      if ( v8 )
        NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v8);
      else
        v9 = 0;
      v6 = v9;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v9);
      v7 = 0;
    }
    v2->m_bLock = bLock;
    v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = (unsigned int)v7;
    v3[1].baseclass_0.m_pcName = v7;
    ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    if ( bLock )
      v10 = 0.40000001;
    else
      v10 = 1.0;
    v11 = v10;
    v12 = v10;
    v6[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(v11);
    v13 = v10;
    v6[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(v12);
    v6[2].baseclass_0.m_uiExtraDataSize = LODWORD(v13);
    NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (00550520) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnInvRClick(MiniHouseInventoryWin *this, unsigned int uiInvIndex)
{
  MiniHouseInventoryWin::OnInvShiftRClickNormalMode(this, uiInvIndex);
}

//----- (00550530) --------------------------------------------------------
bool __thiscall MiniHouseInventoryWin::DropOnEquip(MiniHouseInventoryWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents::SenderType v3; // esi@1
  MiniHouseInventoryWin *v4; // ebx@1
  unsigned int v6; // edi@4
  void *v7; // ecx@5
  InventoryWin *v8; // ecx@7
  char *v9; // edi@13
  int v10; // eax@18

  v3 = pkContents->m_eSenderType;
  v4 = this;
  if ( v3 && v3 != 10 )
    return 0;
  v6 = pkContents->m_uiSenderIndex;
  if ( v6 >= 0xC0 )
    return 0;
  v7 = pkContents->m_apvParam[0];
  if ( v7 )
  {
    if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v7 + 4))() == 18 )
    {
      v8 = (InventoryWin *)v4->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
      if ( v8 )
      {
        if ( !uiReceiverInvIndex )
        {
          if ( !v3 )
          {
            InventoryWin::OnInvRClick(v8, v6, 1u);
            return 1;
          }
          if ( v3 == 10 )
          {
            if ( PrivateStoreWin::ms_bPrivateStoreWin )
            {
              v9 = TextData::Get(0x122CF41Au);
              if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v9,
                  &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
                if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
                  ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v9,
                    &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
              }
              v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
                &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
                25,
                v9,
                &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
              return 0;
            }
            v10 = g_pkMainChar->m_byMode;
            if ( v10 != 5 && v10 != 4 )
              MiniHouseInventoryWin::OnInvShiftRClickNormalMode(v4, v6);
          }
        }
      }
    }
  }
  return 1;
}
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (00550640) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::LockAllItem(MiniHouseInventoryWin *this)
{
  int v1; // ecx@1
  int v2; // edi@2
  NiProperty *v3; // ebx@3
  void *v4; // eax@4
  void *v5; // esi@4
  NiProperty *v6; // esi@12
  void *v7; // eax@13
  NiProperty *v8; // eax@14
  bool v9; // zf@22
  NiPointer<NiRoom> element; // [sp+Ch] [bp-18h]@4
  int v11; // [sp+10h] [bp-14h]@1
  int v12; // [sp+14h] [bp-10h]@1
  int v13; // [sp+20h] [bp-4h]@4

  v1 = (int)this->m_apkMiniHouseInvWin;
  v12 = v1;
  v11 = 24;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_BYTE *)(*(_DWORD *)v1 + 457) != 1 )
    {
      v3 = NiAVObject::GetProperty((NiAVObject *)v2, 9);
      if ( !v3 )
      {
        v4 = operator new(0x28u);
        v5 = v4;
        element.m_pObject = (NiRoom *)v4;
        v13 = 0;
        if ( v4 )
        {
          NiObjectNET::NiObjectNET((NiObjectNET *)v4);
          *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
          *((_WORD *)v5 + 14) = 0;
          *((_DWORD *)v5 + 8) = 0;
          *((_DWORD *)v5 + 9) = 1;
        }
        else
        {
          v5 = 0;
        }
        v3 = (NiProperty *)v5;
        element.m_pObject = (NiRoom *)v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)v5 + 1);
        v13 = 1;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v5 && !InterlockedDecrement((volatile LONG *)v5 + 1) )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
      v6 = NiAVObject::GetProperty((NiAVObject *)v2, 3);
      if ( !v6 )
      {
        v7 = operator new(0x60u);
        element.m_pObject = (NiRoom *)v7;
        v13 = 2;
        if ( v7 )
        {
          NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v7);
          v6 = v8;
        }
        else
        {
          v6 = 0;
        }
        element.m_pObject = (NiRoom *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v13 = 3;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
      }
      *(_BYTE *)(v2 + 457) = 1;
      v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
      v3[1].baseclass_0.m_pcName = 0;
      ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      *(float *)&v6[2].baseclass_0.m_spControllers.m_pObject = 0.40000001;
      *(float *)&v6[2].baseclass_0.m_ppkExtra = 0.40000001;
      *(float *)&v6[2].baseclass_0.m_uiExtraDataSize = 0.40000001;
      NiAVObject::UpdateProperties((NiAVObject *)v2);
    }
    v1 = v12 + 4;
    v9 = v11-- == 1;
    v12 += 4;
  }
  while ( !v9 );
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (00550810) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::UnLockAllItem(MiniHouseInventoryWin *this)
{
  int v1; // ecx@1
  int v2; // edi@2
  NiProperty *v3; // ebx@3
  void *v4; // eax@4
  void *v5; // esi@4
  NiProperty *v6; // esi@12
  void *v7; // eax@13
  NiProperty *v8; // eax@14
  bool v9; // zf@22
  NiPointer<NiRoom> element; // [sp+Ch] [bp-18h]@4
  int v11; // [sp+10h] [bp-14h]@1
  int v12; // [sp+14h] [bp-10h]@1
  int v13; // [sp+20h] [bp-4h]@4

  v1 = (int)this->m_apkMiniHouseInvWin;
  v12 = v1;
  v11 = 24;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_BYTE *)(*(_DWORD *)v1 + 457) )
    {
      v3 = NiAVObject::GetProperty((NiAVObject *)v2, 9);
      if ( !v3 )
      {
        v4 = operator new(0x28u);
        v5 = v4;
        element.m_pObject = (NiRoom *)v4;
        v13 = 0;
        if ( v4 )
        {
          NiObjectNET::NiObjectNET((NiObjectNET *)v4);
          *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
          *((_WORD *)v5 + 14) = 0;
          *((_DWORD *)v5 + 8) = 0;
          *((_DWORD *)v5 + 9) = 1;
        }
        else
        {
          v5 = 0;
        }
        v3 = (NiProperty *)v5;
        element.m_pObject = (NiRoom *)v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)v5 + 1);
        v13 = 1;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v5 && !InterlockedDecrement((volatile LONG *)v5 + 1) )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
      v6 = NiAVObject::GetProperty((NiAVObject *)v2, 3);
      if ( !v6 )
      {
        v7 = operator new(0x60u);
        element.m_pObject = (NiRoom *)v7;
        v13 = 2;
        if ( v7 )
        {
          NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v7);
          v6 = v8;
        }
        else
        {
          v6 = 0;
        }
        element.m_pObject = (NiRoom *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v13 = 3;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v2 + 156),
          &element);
        v13 = -1;
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
      }
      *(_BYTE *)(v2 + 457) = 0;
      v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
      v3[1].baseclass_0.m_pcName = 0;
      ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      *(float *)&v6[2].baseclass_0.m_spControllers.m_pObject = 1.0;
      *(float *)&v6[2].baseclass_0.m_ppkExtra = 1.0;
      *(float *)&v6[2].baseclass_0.m_uiExtraDataSize = 1.0;
      NiAVObject::UpdateProperties((NiAVObject *)v2);
    }
    v1 = v12 + 4;
    v9 = v11-- == 1;
    v12 += 4;
  }
  while ( !v9 );
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (005509D0) --------------------------------------------------------
bool __thiscall MiniHouseInvWin::EatDropInstance(MiniHouseInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  MiniHouseInvWin *v4; // edi@1
  bool result; // al@2
  void *v6; // esi@5
  int v7; // eax@5
  PgWin *v8; // ecx@8

  v4 = this;
  if ( !this->m_bLock && *pkDrop && this->m_bActive )
  {
    v6 = (*pkDrop)->m_pkContents;
    v7 = *((_DWORD *)v6 + 2);
    if ( v7 && v7 != 10 )
    {
      result = 0;
    }
    else
    {
      v8 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      if ( v4->m_uiInvType == 9 )
        result = MiniHouseInventoryWin::DropOnInv((MiniHouseInventoryWin *)v8, (DropContents *)v6, v4->m_uiInvIndex);
      else
        result = MiniHouseInventoryWin::DropOnEquip((MiniHouseInventoryWin *)v8, (DropContents *)v6, v4->m_uiInvIndex);
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00550A50) --------------------------------------------------------
void __thiscall MiniHouseInventoryWin::OnCommand(MiniHouseInventoryWin *this, unsigned int wParam, int lParam)
{
  int v3; // edx@1
  int v4; // eax@7
  int v5; // eax@9
  unsigned int v6; // eax@10
  PgFrameWork *v7; // eax@12

  v3 = g_pkMainChar->m_byMode;
  switch ( wParam )
  {
    case 3u:
      MiniHouseInventoryWin::OnInvLClickNormalMode(this, lParam);
      break;
    case 4u:
      if ( v3 != 5 && v3 != 4 )
      {
        if ( !PgCursor::ms_pkDrop )
          MiniHouseInventoryWin::OnInvShiftRClickNormalMode(this, lParam);
      }
      break;
    case 8u:
      v4 = this->m_iActivePage;
      if ( v4 > 0 )
        MiniHouseInventoryWin::OnActivePage(this, v4 - 1);
      break;
    case 9u:
      v5 = this->m_iActivePage;
      if ( v5 >= 0 )
      {
        v6 = v5 + 1;
        if ( (signed int)v6 < 1 )
          MiniHouseInventoryWin::OnActivePage(this, v6);
      }
      break;
    case 0xEu:
      v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v7 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v7, "MinihouseInv");
      break;
    default:
      return;
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (00550B30) --------------------------------------------------------
MiniHouseInvWin *__cdecl MiniHouseInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  MiniHouseInvWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1D4u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    MiniHouseInvWin::MiniHouseInvWin((MiniHouseInvWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *))(*(_DWORD *)v6 + 616))(
                          v6,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (MiniHouseInvWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (00550C70) --------------------------------------------------------
MiniHouseInvTabButWin *__cdecl MiniHouseInvTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  MiniHouseInvTabButWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x144u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v5);
    *(_DWORD *)v6 = &MiniHouseInvTabButWin::_vftable_;
    *((_DWORD *)v6 + 58) = &MiniHouseInvTabButWin::_vftable_;
    *((_BYTE *)v6 + 254) = 1;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int))(*(_DWORD *)v6 + 560))(
                          v6,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (MiniHouseInvTabButWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 99F384: using guessed type int (__stdcall *MiniHouseInvTabButWin___vftable_)(int uiFlags);
// 99F3A4: using guessed type int (__thiscall *MiniHouseInvTabButWin___vftable_)(void *p, char);

//----- (00550DD0) --------------------------------------------------------
MiniHouseInventoryWin *__cdecl MiniHouseInventoryWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MiniHouseInventoryWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x250u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MiniHouseInventoryWin::MiniHouseInventoryWin((MiniHouseInventoryWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MiniHouseInventoryWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00550F00) --------------------------------------------------------
bool __thiscall MiniHouseInventoryWin::Create(MiniHouseInventoryWin *this, PgFrameWork *pkFrameWork)
{
  MiniHouseInventoryWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool result; // al@6
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // ebx@11
  int v9; // edi@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@16
  PgWinSpr *v13; // eax@16
  PgSprData *v14; // eax@16
  PgFont *v15; // eax@18
  PgWinText *v16; // edi@18
  char *v17; // eax@18
  PgSprData *v18; // edi@18
  MiniHouseInvTabButWin *v19; // eax@18
  PgSprData *v20; // edi@18
  PgSprData *v21; // ST38_4@18
  int v22; // edi@18
  MiniHouseInvTabButWin *v23; // eax@18
  PgSprData *v24; // eax@18
  NiSourceTexture *v25; // eax@21
  PgSprData *v26; // eax@22
  PgWinSpr *v27; // eax@22
  unsigned int v28; // edi@22
  PgSprData *v29; // eax@26
  ItemIcon *v30; // eax@26
  int v31; // edi@27
  int v32; // ebx@28
  int v33; // ecx@29
  PgSprData *v34; // eax@30
  NiNode *v35; // esi@31
  unsigned int v36; // ebx@37
  IconWin **v37; // edi@37
  PgSprData *v38; // eax@39
  ItemIcon *v39; // eax@40
  int v40; // eax@40
  bool v41; // sf@40
  unsigned __int8 v42; // of@40
  NiNode *v43; // esi@42
  NiNode *v44; // [sp+2Ch] [bp-244h]@24
  const char *v45; // [sp+30h] [bp-240h]@12
  char *v46; // [sp+30h] [bp-240h]@19
  const char *v47; // [sp+30h] [bp-240h]@24
  int *v48; // [sp+34h] [bp-23Ch]@12
  const char *v49; // [sp+34h] [bp-23Ch]@19
  int *v50; // [sp+34h] [bp-23Ch]@24
  int *v51; // [sp+38h] [bp-238h]@12
  int *v52; // [sp+38h] [bp-238h]@24
  NiSourceTexture *v53; // [sp+3Ch] [bp-234h]@12
  NiSourceTexture *v54; // [sp+3Ch] [bp-234h]@24
  unsigned int v55; // [sp+40h] [bp-230h]@1
  unsigned int uiWidth; // [sp+50h] [bp-220h]@16
  unsigned int uiHeight; // [sp+54h] [bp-21Ch]@16
  NiTexturePalette *iOffX; // [sp+58h] [bp-218h]@7
  int iOffY; // [sp+5Ch] [bp-214h]@11
  NiSourceTexture *i; // [sp+60h] [bp-210h]@14
  NiSourceTexture *pkTexture; // [sp+64h] [bp-20Ch]@1
  PgSprData *j; // [sp+68h] [bp-208h]@14
  int uiLeft; // [sp+6Ch] [bp-204h]@10
  int uiTop; // [sp+70h] [bp-200h]@10
  NiPointer<NiNode> spNode; // [sp+74h] [bp-1FCh]@1
  int uiInvLeft[24]; // [sp+78h] [bp-1F8h]@29
  int uiInvTop[24]; // [sp+D8h] [bp-198h]@29
  char acFileName[260]; // [sp+138h] [bp-138h]@19
  char acShapeName[33]; // [sp+23Ch] [bp-34h]@23
  unsigned int v70; // [sp+260h] [bp-10h]@1
  int v71; // [sp+26Ch] [bp-4h]@1
  int v72; // [sp+270h] [bp+0h]@1

  v70 = (unsigned int)&v72 ^ __security_cookie;
  v55 = (unsigned int)&v72 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v71 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
    goto LABEL_49;
  iOffX = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\MinihouseInv.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, iOffX);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "MiniHouseInventoryWin", 0) )
  {
LABEL_49:
    v4 = spNode.m_pObject;
    v71 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  iOffX = (NiTexturePalette *)uiLeft;
  iOffY = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v53 = v10;
    v51 = &uiTop;
    v48 = &uiLeft;
    v45 = "Theme";
  }
  else
  {
    v53 = 0;
    v51 = &uiTop;
    v48 = &uiLeft;
    v45 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v45, v48, v51, v53);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  j = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(j, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(j, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v8, uiTop - v9, j, &v2->baseclass_0.baseclass_0.baseclass_0);
  i = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v55) )
  {
    j = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, i);
    PgSprData::Add(j, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(j, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, j, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    && ((v15 = Font::Get(MAIN_MENU),
         v16 = PgWinText::CreateWin(
                 uiLeft - v8,
                 uiTop - v9 + 2,
                 uiWidth,
                 uiHeight,
                 v15,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0),
         v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
           (NiRefObject *)v16,
           1u),
         v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
           (NiRefObject *)v16,
           (unsigned int)&Color::m_kDxWinTitleColor),
         i = (NiSourceTexture *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118],
         v17 = TextData::Get(0x96F8F4F0u),
         ((void (__thiscall *)(PgWinText *, char *))i->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(v16, v17),
         v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
           (NiRefObject *)v16,
           0),
         v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, pkTexture),
         PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "PrePageClick"),
         PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "PrePageOver"),
         v19 = MiniHouseInvTabButWin::CreateWin(
                 uiLeft - v8,
                 uiTop - iOffY,
                 v18,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 8u),
         v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
           (NiRefObject *)v19,
           0),
         v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextPageNor", &uiLeft, &uiTop, pkTexture),
         PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "NextPageClick"),
         PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "NextPageOver"),
         v21 = v20,
         v22 = iOffY,
         v23 = MiniHouseInvTabButWin::CreateWin(
                 uiLeft - v8,
                 uiTop - iOffY,
                 v21,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 9u),
         v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
           (NiRefObject *)v23,
           0),
         v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture),
         PgWinSpr::CreateWin(uiLeft - v8, uiTop - v22, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
         !MiniHouseTable::GetByHandle(0)) ? (Folder::Menu(), v49 = "%sgame\\MiniHouse\\%s.dds", v46 = acFileName) : (Folder::Menu(), v49 = "%sgame\\MiniHouse\\%s.dds", v46 = acFileName),
        sprintf(v46, v49),
        (v25 = PgUtil::LoadSourceTexture(acFileName)) != 0) )
  {
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, v25);
    v27 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v22, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkMiniHouseSprWin = v27;
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v27,
      0);
    v28 = 0;
    do
    {
      sprintf(acShapeName, "EquipSlot%02d");
      if ( v28 )
      {
        v54 = pkTexture;
        v52 = &uiTop;
        v50 = &uiLeft;
        v47 = acShapeName;
        v44 = spNode.m_pObject;
      }
      else
      {
        v54 = pkTexture;
        v52 = &uiTop;
        v50 = &uiLeft;
        v47 = "MinihouseSlot";
        v44 = spNode.m_pObject;
      }
      v29 = PgSprData::Create(&v44->baseclass_0, v47, v50, v52, v54);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - iOffY, v29, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v30 = (ItemIcon *)MiniHouseInvWin::CreateWin(
                          uiLeft - v8 + 1,
                          uiTop - iOffY + 1,
                          v28,
                          &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_apkEquipWin[v28] = (MiniHouseInvWin *)v30;
      ItemIcon::SetItem(v30, 0, 1);
      ((void (__stdcall *)(signed int))v2->m_apkEquipWin[v28]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(5);
      ((void (__stdcall *)(signed int))v2->m_apkEquipWin[v28]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(6);
      v2->m_apkEquipWin[v28]->m_uiInvType = 8;
      v2->m_apkEquipWin[v28]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
      v2->m_apkEquipWin[v28]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
      v2->m_apkEquipWin[v28]->m_bActive = 1;
      IconWin::ShowFocus(&v2->m_apkEquipWin[v28++]->baseclass_0.baseclass_0, 1);
    }
    while ( (signed int)v28 < 11 );
    v31 = 0;
    while ( 1 )
    {
      v32 = v31 + 1;
      sprintf(acShapeName, "InvItemSlot%03d");
      if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, &uiWidth, &uiHeight) )
        break;
      v33 = uiTop;
      uiInvLeft[v31] = uiLeft;
      uiInvTop[v31++] = v33;
      if ( v32 >= 24 )
      {
        v34 = 0;
        for ( j = 0; ; v34 = j )
        {
          v36 = 24 * (_DWORD)v34;
          i = 0;
          v37 = (IconWin **)&v2->m_apkMiniHouseInvWin[24 * (_DWORD)v34];
          do
          {
            if ( !v34 )
            {
              sprintf(acShapeName, "InvItemSlot%03d");
              v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
              PgWinSpr::CreateWin(
                uiLeft - (_DWORD)iOffX,
                uiTop - iOffY,
                v38,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
            }
            v39 = (ItemIcon *)MiniHouseInvWin::CreateWin(
                                uiInvLeft[v36] - (_DWORD)iOffX + 1,
                                uiInvTop[v36] - iOffY + 1,
                                v36,
                                &v2->baseclass_0.baseclass_0.baseclass_0);
            *v37 = (IconWin *)v39;
            ItemIcon::SetItem(v39, 0, 1);
            ((void (__stdcall *)(signed int))(*v37)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(3);
            ((void (__stdcall *)(signed int))(*v37)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(4);
            LODWORD((*v37)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][2]) = 9;
            (*v37)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
            (*v37)->baseclass_0.baseclass_0.m_eType = 1;
            IconWin::ShowFocus(*v37, 1);
            v40 = (int)((char *)&i->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 1);
            ++v36;
            ++v37;
            i = (NiSourceTexture *)v40;
            v42 = __OFSUB__(v40, 24);
            v41 = v40 - 24 < 0;
            v34 = j;
          }
          while ( v41 ^ v42 );
          j = (PgSprData *)((char *)j + 1);
          if ( (signed int)j >= 1 )
            break;
        }
        ((void (__thiscall *)(MiniHouseInventoryWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          v2,
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.41999999,
          0.57999998);
        MiniHouseInventoryWin::OnActivePage(v2, 0);
        v43 = spNode.m_pObject;
        v71 = -1;
        if ( spNode.m_pObject
          && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v43 )
          v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
        return 1;
      }
    }
    v35 = spNode.m_pObject;
    v71 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v35 )
      v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
    result = 0;
  }
  else
  {
    v71 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005518C0) --------------------------------------------------------
bool __thiscall MiniHouseInvWin::Create(MiniHouseInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  MiniHouseInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    ItemIcon::ShowLotText(&v5->baseclass_0, 1);
    pkParent = (PgWin *)v5;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      &IconWin::ms_kCoolTimeIconList,
      (const unsigned int *)&pkParent);
    result = 1;
  }
  return result;
}

//----- (00551910) --------------------------------------------------------
void *__thiscall MiniHouseInvTabButWin::_scalar_deleting_destructor_(MiniHouseInvTabButWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInvTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInvTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99F384: using guessed type int (__stdcall *MiniHouseInvTabButWin___vftable_)(int uiFlags);
// 99F3A4: using guessed type int (__thiscall *MiniHouseInvTabButWin___vftable_)(void *p, char);

//----- (00551950) --------------------------------------------------------
MiniHouse *__cdecl MiniHouseTable::GetByHandle(unsigned __int16 wHandle)
{
  unsigned int v1; // esi@1
  MiniHouse *result; // eax@2

  v1 = 0;
  if ( ITableBase<MiniHouse_MiniHouseTable>::GetTotal() )
  {
    while ( 1 )
    {
      result = (MiniHouse *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MiniHouse_MiniHouseTable>::ms_pkTable + 4),
                              v1);
      if ( result->Handle == wHandle )
        break;
      ++v1;
      if ( v1 >= ITableBase<MiniHouse_MiniHouseTable>::GetTotal() )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97E40: using guessed type int ITableBase_MiniHouse_MiniHouseTable___ms_pkTable;

//----- (00551990) --------------------------------------------------------
void *__thiscall MiniHouseInvWin::_scalar_deleting_destructor_(MiniHouseInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MiniHouseInvWin::_MiniHouseInvWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005519C0) --------------------------------------------------------
void *__thiscall MiniHouseInventoryWin::_scalar_deleting_destructor_(MiniHouseInventoryWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseInventoryWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseInventoryWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 99F86C: using guessed type int (__stdcall *MiniHouseInventoryWin___vftable_)(int uiFlags);
// 99F88C: using guessed type int (__thiscall *MiniHouseInventoryWin___vftable_)(void *p, char);

//----- (00551A10) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::MiniHouseMenuWin(MiniHouseMenuWin *this)
{
  MiniHouseMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkRestText = 0;
  v1->m_pkPrivateStoreText = 0;
  v1->m_pkPrivateStoreBut = 0;
  v1->m_pkRestBut = 0;
  v1->m_pkMHEnterText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseMenuWin::_vftable_;
}
// 99FC38: using guessed type int (__stdcall *MiniHouseMenuWin___vftable_)(int uiFlags);
// 99FC54: using guessed type int (__thiscall *MiniHouseMenuWin___vftable_)(void *p, char);

//----- (00551A50) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::_MiniHouseMenuWin(MiniHouseMenuWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 99FC38: using guessed type int (__stdcall *MiniHouseMenuWin___vftable_)(int uiFlags);
// 99FC54: using guessed type int (__thiscall *MiniHouseMenuWin___vftable_)(void *p, char);

//----- (00551AD0) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::OnCancel(MiniHouseMenuWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00551AE0) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::SetMHJoinText(MiniHouseMenuWin *this, char *pStr)
{
  if ( pStr )
  {
    if ( this->m_pkMHEnterText )
      ((void (__stdcall *)(_DWORD))this->m_pkMHEnterText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pStr);
  }
}

//----- (00551B10) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::OnHelpLink(MiniHouseMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MiniHouseMenu");
}

//----- (00551B40) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::Show(MiniHouseMenuWin *this, bool b)
{
  if ( b )
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  else
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (00551B60) --------------------------------------------------------
bool __thiscall MiniHouseMenuWin::Create(MiniHouseMenuWin *this, PgFrameWork *pkFrameWork)
{
  MiniHouseMenuWin *v2; // esi@1
  void *v3; // eax@1
  NiTexturePalette *v4; // edi@1
  NiSourceTexture *v5; // ebx@1
  char *v6; // eax@3
  PgSprData *v7; // eax@4
  NiNode *v8; // esi@5
  bool result; // al@9
  int v10; // edi@10
  int v11; // ebx@10
  NiSourceTexture *v12; // eax@10
  PgSprData *v13; // eax@13
  PgSprData *v14; // eax@13
  PgSprData *v15; // eax@13
  NiNode *v16; // esi@16
  PgFont *v17; // eax@21
  NiRefObjectVtbl *v18; // ST68_4@21
  char *v19; // ST54_4@21
  PgWinBut *v20; // eax@21
  PgSprData::PgHitTester *v21; // eax@21
  unsigned int v22; // ST68_4@21
  PgFont *v23; // eax@21
  PgWinText *v24; // eax@21
  char *v25; // eax@21
  Tutorial *v26; // eax@21
  PgWinBut *v27; // eax@21
  PgSprData::PgHitTester *v28; // eax@21
  unsigned int v29; // ST68_4@21
  PgFont *v30; // eax@21
  PgWinText *v31; // eax@21
  char *v32; // eax@21
  PgWinBut *v33; // eax@21
  PgSprData::PgHitTester *v34; // eax@21
  unsigned int v35; // ST68_4@21
  PgFont *v36; // eax@21
  PgWinText *v37; // eax@21
  char *v38; // eax@21
  NiPointer<PgSprData::PgHitTester> *v39; // ecx@21
  unsigned int v40; // ST68_4@21
  PgFont *v41; // eax@21
  NiRefObjectVtbl *v42; // ST68_4@21
  char *v43; // ST54_4@21
  NiPointer<PgSprData::PgHitTester> *v44; // ecx@21
  unsigned int v45; // ST68_4@21
  PgFont *v46; // eax@21
  PgWinText *v47; // edi@21
  NiRefObjectVtbl *v48; // ebx@21
  char *v49; // eax@21
  NiNode *v50; // esi@22
  const char *v51; // [sp+48h] [bp-48h]@11
  int *v52; // [sp+4Ch] [bp-44h]@11
  int *v53; // [sp+50h] [bp-40h]@11
  NiSourceTexture *v54; // [sp+54h] [bp-3Ch]@11
  unsigned int uiWidth; // [sp+6Ch] [bp-24h]@15
  unsigned int uiHeight; // [sp+70h] [bp-20h]@15
  NiSourceTexture *pkTexture; // [sp+74h] [bp-1Ch]@1
  int uiLeft; // [sp+78h] [bp-18h]@4
  int uiTop; // [sp+7Ch] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+80h] [bp-10h]@1
  int v61; // [sp+8Ch] [bp-4h]@1
  PgSprData *pkTextWina; // [sp+98h] [bp+8h]@13
  NiSourceTexture *pkTextWin; // [sp+98h] [bp+8h]@13
  PgSprData *pkTextWinb; // [sp+98h] [bp+8h]@14
  PgWinText *pkTextWinc; // [sp+98h] [bp+8h]@21
  PgSprData *pkTextWind; // [sp+98h] [bp+8h]@21
  unsigned int pkTextWine; // [sp+98h] [bp+8h]@21
  NiRefObjectVtbl *pkTextWinf; // [sp+98h] [bp+8h]@21
  NiVBSet *pkTextWing; // [sp+98h] [bp+8h]@21
  PgSprData *pkTextWinh; // [sp+98h] [bp+8h]@21
  unsigned int pkTextWini; // [sp+98h] [bp+8h]@21
  NiRefObjectVtbl *pkTextWinj; // [sp+98h] [bp+8h]@21
  PgSprData *pkTextWink; // [sp+98h] [bp+8h]@21
  unsigned int pkTextWinl; // [sp+98h] [bp+8h]@21
  NiRefObjectVtbl *pkTextWinm; // [sp+98h] [bp+8h]@21
  PgSprData *pkTextWinn; // [sp+98h] [bp+8h]@21
  unsigned int pkTextWino; // [sp+98h] [bp+8h]@21
  PgWinText *pkTextWinp; // [sp+98h] [bp+8h]@21
  PgSprData *pkTextWinq; // [sp+98h] [bp+8h]@21
  unsigned int pkTextWinr; // [sp+98h] [bp+8h]@21

  v2 = this;
  spNode.m_pObject = 0;
  v61 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  v4 = dword_B70448;
  v5 = (NiSourceTexture *)v3;
  pkTexture = (NiSourceTexture *)v3;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\MiniHouseMenu.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v5);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "MiniHouseMenuWin", 0) )
  {
    v8 = spNode.m_pObject;
    v61 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  v10 = uiLeft;
  v11 = uiTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v54 = v12;
    v53 = &uiTop;
    v52 = &uiLeft;
    v51 = "Theme";
  }
  else
  {
    v54 = 0;
    v53 = &uiTop;
    v52 = &uiLeft;
    v51 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v51, v52, v53, v54);
  PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWina = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(pkTextWina, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWina, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWina, &v2->baseclass_0.baseclass_0.baseclass_0);
  pkTextWin = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWinb = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTextWin);
    PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWinb, &v2->baseclass_0.baseclass_0.baseclass_0, 8u, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v17 = Font::Get(MAIN_MENU);
    pkTextWinc = PgWinText::CreateWin(
                   uiLeft - v10,
                   uiTop - v11,
                   uiWidth,
                   uiHeight,
                   v17,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   0,
                   0);
    pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkTextWinc,
      1u);
    ((void (__stdcall *)(__int64 *))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    v18 = pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = TextData::Get(0xE539443Fu);
    v18[118].__vecDelDtor((NiRefObject *)pkTextWinc, (unsigned int)v19);
    ((void (__stdcall *)(_DWORD))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWind = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RestNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "RestClick");
    PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "RestOver");
    v20 = PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWind, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v2->m_pkRestBut = v20;
    v20->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v21 = pkTextWind->m_akHitTester.m_pBase->m_pObject;
    pkTextWine = v21->m_uiHeight;
    v22 = v21->m_uiWidth;
    v23 = Font::Get(MAIN_MENU);
    v24 = PgWinText::CreateWin(
            uiLeft - v10,
            uiTop - v11 + 1,
            v22,
            pkTextWine,
            v23,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkRestText = v24;
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v24,
      5u);
    pkTextWinf = v2->m_pkRestText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v25 = TextData::Get(0x92B1FCEFu);
    pkTextWinf[118].__vecDelDtor((NiRefObject *)v2->m_pkRestText, (unsigned int)v25);
    ((void (__stdcall *)(_DWORD))v2->m_pkRestText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWing = (NiVBSet *)v2->m_pkRestBut;
    v26 = Singleton<Tutorial>::getInstance();
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
      (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v26->m_kBlinkWinList,
      0,
      pkTextWing);
    pkTextWinh = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrivatStoreNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWinh, &spNode.m_pObject->baseclass_0, "PrivatStoreClick");
    PgSprData::Add(pkTextWinh, &spNode.m_pObject->baseclass_0, "PrivatStoreOver");
    v27 = PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWinh, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v2->m_pkPrivateStoreBut = v27;
    v27->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v28 = pkTextWinh->m_akHitTester.m_pBase->m_pObject;
    pkTextWini = v28->m_uiHeight;
    v29 = v28->m_uiWidth;
    v30 = Font::Get(MAIN_MENU);
    v31 = PgWinText::CreateWin(
            uiLeft - v10,
            uiTop - v11 + 1,
            v29,
            pkTextWini,
            v30,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkPrivateStoreText = v31;
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v31,
      5u);
    pkTextWinj = v2->m_pkPrivateStoreText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v32 = TextData::Get(0x9CE9FCEBu);
    pkTextWinj[118].__vecDelDtor((NiRefObject *)v2->m_pkPrivateStoreText, (unsigned int)v32);
    ((void (__stdcall *)(_DWORD))v2->m_pkPrivateStoreText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWink = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EntanceNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWink, &spNode.m_pObject->baseclass_0, "EntanceClick");
    PgSprData::Add(pkTextWink, &spNode.m_pObject->baseclass_0, "EntanceOver");
    v33 = PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWink, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
    v2->m_pkEntanceBut = v33;
    v33->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v34 = pkTextWink->m_akHitTester.m_pBase->m_pObject;
    pkTextWinl = v34->m_uiHeight;
    v35 = v34->m_uiWidth;
    v36 = Font::Get(MAIN_MENU);
    v37 = PgWinText::CreateWin(
            uiLeft - v10,
            uiTop - v11 + 1,
            v35,
            pkTextWinl,
            v36,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkMHEnterText = v37;
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v37,
      5u);
    pkTextWinm = v2->m_pkMHEnterText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v38 = TextData::Get(0xFAF63B39u);
    pkTextWinm[118].__vecDelDtor((NiRefObject *)v2->m_pkMHEnterText, (unsigned int)v38);
    ((void (__stdcall *)(_DWORD))v2->m_pkMHEnterText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWinn = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChangeNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWinn, &spNode.m_pObject->baseclass_0, "ChangeClick");
    PgSprData::Add(pkTextWinn, &spNode.m_pObject->baseclass_0, "ChangeOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWinn, &v2->baseclass_0.baseclass_0.baseclass_0, 6u, 0, 0);
    v39 = pkTextWinn->m_akHitTester.m_pBase;
    pkTextWino = v39->m_pObject->m_uiHeight;
    v40 = v39->m_pObject->m_uiWidth;
    v41 = Font::Get(MAIN_MENU);
    pkTextWinp = PgWinText::CreateWin(
                   uiLeft - v10,
                   uiTop - v11 + 1,
                   v40,
                   pkTextWino,
                   v41,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   0,
                   0);
    pkTextWinp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkTextWinp,
      5u);
    v42 = pkTextWinp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v43 = TextData::Get(0x798D9488u);
    v42[118].__vecDelDtor((NiRefObject *)pkTextWinp, (unsigned int)v43);
    ((void (__stdcall *)(_DWORD))pkTextWinp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWinq = PgSprData::Create(&spNode.m_pObject->baseclass_0, "QuitNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWinq, &spNode.m_pObject->baseclass_0, "QuitClick");
    PgSprData::Add(pkTextWinq, &spNode.m_pObject->baseclass_0, "QuitOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWinq, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
    v44 = pkTextWinq->m_akHitTester.m_pBase;
    pkTextWinr = v44->m_pObject->m_uiHeight;
    v45 = v44->m_pObject->m_uiWidth;
    v46 = Font::Get(MAIN_MENU);
    v47 = PgWinText::CreateWin(
            uiLeft - v10,
            uiTop - v11 + 1,
            v45,
            pkTextWinr,
            v46,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v47,
      5u);
    v48 = v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v49 = TextData::Get(0x3C359B91u);
    v48[118].__vecDelDtor((NiRefObject *)v47, (unsigned int)v49);
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v47,
      0);
    ((void (__thiscall *)(MiniHouseMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v61 = -1;
    if ( spNode.m_pObject )
    {
      v50 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v50 )
          v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v50, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v16 = spNode.m_pObject;
    v61 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v16 )
      v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00552420) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::OnCommand(MiniHouseMenuWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // ecx@3
  PgFrameWork *v5; // edi@8
  char *v6; // eax@8
  unsigned int v7; // [sp-Ch] [bp-10h]@2
  unsigned int v8; // [sp-8h] [bp-Ch]@2
  unsigned int v9; // [sp-4h] [bp-8h]@2

  v3 = (PgWin *)this;
  switch ( wParam )
  {
    case 1u:
      v9 = 0;
      v8 = 0;
      v7 = 173;
      goto LABEL_3;
    case 7u:
      goto LABEL_5;
    case 2u:
      if ( nowState )
      {
        v5 = this->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(0x87EBC3DCu);
        GameFrameWork::AddSysMsg((GameFrameWork *)v5, v6);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
      }
      else
      {
        PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xA3u, 0, 0);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
      }
      return;
    case 3u:
      v4 = this->baseclass_0.m_pkFrameWork;
      v9 = 0;
      v8 = 0;
      if ( nowState )
        v7 = 206;
      else
        v7 = 192;
      goto LABEL_4;
    case 4u:
      v9 = 0;
      v8 = 0;
      v7 = 219;
      goto LABEL_3;
    case 6u:
      v9 = 0;
      v8 = 0;
      v7 = 184;
LABEL_3:
      v4 = this->baseclass_0.m_pkFrameWork;
LABEL_4:
      PgFrameWork::AddMsg(v4, v7, v8, v9);
LABEL_5:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
      break;
    case 8u:
      MiniHouseMenuWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (00552530) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::EnablePrivateStoreBut(MiniHouseMenuWin *this, bool bEnable)
{
  int v2; // edi@0
  MiniHouseMenuWin *v3; // esi@1
  int v4; // ST04_4@6
  NiRefObjectVtbl *v5; // edi@6
  char *v6; // eax@6
  D3DXCOLOR *v7; // [sp-4h] [bp-8h]@4

  v3 = this;
  if ( this->m_pkPrivateStoreBut && this->m_pkPrivateStoreText )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkPrivateStoreBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
    if ( bEnable )
      v7 = &Color::m_kDxWhiteColor;
    else
      v7 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
    ((void (__cdecl *)(D3DXCOLOR *))v3->m_pkPrivateStoreText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v7);
    v4 = v2;
    v5 = v3->m_pkPrivateStoreText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = TextData::Get(0x9CE9FCEBu);
    ((void (__thiscall *)(PgWinText *, char *, int))v5[118].__vecDelDtor)(v3->m_pkPrivateStoreText, v6, v4);
  }
}
// 552530: could not find valid save-restore pair for edi

//----- (005525B0) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::EnableRestBut(MiniHouseMenuWin *this, bool bEnable)
{
  int v2; // edi@0
  MiniHouseMenuWin *v3; // esi@1
  int v4; // ST04_4@6
  NiRefObjectVtbl *v5; // edi@6
  char *v6; // eax@6
  D3DXCOLOR *v7; // [sp-4h] [bp-8h]@4

  v3 = this;
  if ( this->m_pkRestBut && this->m_pkRestText )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkRestBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
    if ( bEnable )
      v7 = &Color::m_kDxWhiteColor;
    else
      v7 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
    ((void (__cdecl *)(D3DXCOLOR *))v3->m_pkRestText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v7);
    v4 = v2;
    v5 = v3->m_pkRestText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = TextData::Get(0x92B1FCEFu);
    ((void (__thiscall *)(PgWinText *, char *, int))v5[118].__vecDelDtor)(v3->m_pkRestText, v6, v4);
  }
}
// 5525B0: could not find valid save-restore pair for edi

//----- (00552630) --------------------------------------------------------
void __thiscall MiniHouseMenuWin::UpdateMeWin(MiniHouseMenuWin *this, float fCurTime)
{
  MiniHouseMenuWin *v2; // esi@1
  char v3; // al@2
  NiRefObjectVtbl *v4; // edi@5
  char *v5; // eax@5
  NiRefObjectVtbl *v6; // edi@9
  char *v7; // eax@9

  v2 = this;
  if ( g_pkMainChar )
  {
    v3 = g_pkMainChar->m_byMode;
    if ( v3 == 4 )
    {
      if ( this->m_pkPrivateStoreBut && this->m_pkPrivateStoreText )
      {
        ((void (__stdcall *)(_DWORD))this->m_pkPrivateStoreBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkPrivateStoreText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGrayColor);
        v4 = v2->m_pkPrivateStoreText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v5 = TextData::Get(0x9CE9FCEBu);
        v4[118].__vecDelDtor((NiRefObject *)v2->m_pkPrivateStoreText, (unsigned int)v5);
      }
      if ( v2->m_pkRestBut )
        ((void (__stdcall *)(_DWORD))v2->m_pkRestBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      if ( v2->m_pkRestText )
      {
        ((void (__stdcall *)(_DWORD))v2->m_pkRestText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
        v6 = v2->m_pkRestText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v7 = TextData::Get(0xE0F65B33u);
        v6[118].__vecDelDtor((NiRefObject *)v2->m_pkRestText, (unsigned int)v7);
      }
    }
    else
    {
      if ( v3 == 5 )
      {
        MiniHouseMenuWin::EnablePrivateStoreBut(this, 0);
        MiniHouseMenuWin::EnableRestBut(v2, 0);
      }
      else
      {
        MiniHouseMenuWin::EnablePrivateStoreBut(this, 1);
        MiniHouseMenuWin::EnableRestBut(v2, 1);
      }
    }
  }
}

//----- (00552740) --------------------------------------------------------
MiniHouseMenuWin *__cdecl MiniHouseMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  MiniHouseMenuWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &MiniHouseMenuWin::_vftable_;
    *((_DWORD *)v2 + 58) = &MiniHouseMenuWin::_vftable_;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 91) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (MiniHouseMenuWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 99FC38: using guessed type int (__stdcall *MiniHouseMenuWin___vftable_)(int uiFlags);
// 99FC54: using guessed type int (__thiscall *MiniHouseMenuWin___vftable_)(void *p, char);

//----- (005528A0) --------------------------------------------------------
void *__thiscall MiniHouseMenuWin::_scalar_deleting_destructor_(MiniHouseMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 99FC38: using guessed type int (__stdcall *MiniHouseMenuWin___vftable_)(int uiFlags);
// 99FC54: using guessed type int (__thiscall *MiniHouseMenuWin___vftable_)(void *p, char);

//----- (005528E0) --------------------------------------------------------
void __thiscall NpcMarkWin::SetIconDrawRect(NpcMarkWin *this, tagRECT kRect)
{
  this->m_kIconDrawRect.left = kRect.left;
  this->m_kIconDrawRect.top = kRect.top;
  this->m_kIconDrawRect.right = kRect.right;
  this->m_kIconDrawRect.bottom = kRect.bottom;
}

//----- (00552920) --------------------------------------------------------
void __thiscall MiniMapMarkWin::MiniMapMarkWin(MiniMapMarkWin *this)
{
  MiniMapMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552940) --------------------------------------------------------
void __thiscall MiniMapMarkWin::_MiniMapMarkWin(MiniMapMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552960) --------------------------------------------------------
PgWinSpr *__thiscall MiniMapMarkWin::GetMarkWin(MiniMapMarkWin *this)
{
  return this->m_pkMarkWin;
}

//----- (00552970) --------------------------------------------------------
void __thiscall MainCharMarkWin::MainCharMarkWin(MainCharMarkWin *this)
{
  MainCharMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MainCharMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MainCharMarkWin::_vftable_;
}
// 9A0300: using guessed type int (__stdcall *MainCharMarkWin___vftable_)(int uiFlags);
// 9A031C: using guessed type int (__thiscall *MainCharMarkWin___vftable_)(void *p, char);

//----- (00552990) --------------------------------------------------------
void __thiscall MainCharMarkWin::_MainCharMarkWin(MainCharMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (005529B0) --------------------------------------------------------
void __thiscall NpcMarkWin::NpcMarkWin(NpcMarkWin *this)
{
  NpcMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->m_kCharHandle = -1;
  v1->m_pkQuestStateIngWin = 0;
  v1->m_pkQuestStateAbleWin = 0;
  v1->m_pkQuestStateRewardWin = 0;
  v1->m_pkQuestStateLowAbleWin = 0;
  v1->m_bIconDraw = 0;
  v1->m_pkAutoRunMark = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NpcMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NpcMarkWin::_vftable_;
}
// 9A04E8: using guessed type int (__stdcall *NpcMarkWin___vftable_)(int uiFlags);
// 9A0504: using guessed type int (__thiscall *NpcMarkWin___vftable_)(void *p, char);

//----- (00552A00) --------------------------------------------------------
void __thiscall NpcMarkWin::_NpcMarkWin(NpcMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552A20) --------------------------------------------------------
void __thiscall NpcMarkWin::ProcessMeInput(NpcMarkWin *this, bool *bHit)
{
  NpcMarkWin *v2; // esi@1
  unsigned int v3; // edi@2
  unsigned int v4; // ebx@2
  int yPos; // [sp+4h] [bp-4h]@2

  v2 = this;
  PgWin::ProcessMeInput(&this->baseclass_0.baseclass_0, bHit);
  if ( v2->m_pkAutoRunMark )
  {
    v3 = (unsigned int)((int (__thiscall *)(NpcMarkWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2) >> 1;
    v4 = (unsigned int)((int (__thiscall *)(NpcMarkWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2) >> 1;
    ((void (__thiscall *)(NpcMarkWin *, bool **, int *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[53].__vecDelDtor)(
      v2,
      &bHit,
      &yPos);
    bHit -= PgWin::ms_iMsX.x;
    yPos -= PgWin::ms_iMsY;
    ((void (*)(void))v2->m_pkAutoRunMark->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
  }
}

//----- (00552AC0) --------------------------------------------------------
void __thiscall NpcMarkWin::DrawIcon(NpcMarkWin *this, PgWinSpr *pkSprWin)
{
  NpcMarkWin *v2; // edi@1
  int v3; // ebx@3
  int v4; // ST0C_4@3
  int v5; // ebx@3
  int v6; // ebx@3
  int v7; // ebx@3
  int v8; // ebx@3
  int v9; // ebx@3
  int v10; // eax@3
  int kRect_4; // [sp+8h] [bp-Ch]@3
  int kRect_8; // [sp+Ch] [bp-8h]@3

  v2 = this;
  if ( this->m_bIconDraw && pkSprWin )
  {
    v3 = ((int (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(pkSprWin);
    v4 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v2)
       + v3;
    v5 = ((int (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(pkSprWin);
    kRect_4 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2)
            + v5;
    v6 = ((int (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(pkSprWin);
    v7 = ((int (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(pkSprWin)
       + v6;
    kRect_8 = v7
            + ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v2);
    v8 = ((int (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(pkSprWin);
    v9 = ((int (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pkSprWin)
       + v8;
    v10 = v9
        + ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
    if ( v4 <= v2->m_kIconDrawRect.left
      || kRect_4 <= v2->m_kIconDrawRect.top
      || kRect_8 >= v2->m_kIconDrawRect.right
      || v10 >= v2->m_kIconDrawRect.bottom )
      ((void (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(pkSprWin);
    else
      ((void (__thiscall *)(_DWORD))pkSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(pkSprWin);
  }
}
// 552AC0: could not find valid save-restore pair for esi

//----- (00552BD0) --------------------------------------------------------
void __thiscall PartyMarkWin::PartyMarkWin(PartyMarkWin *this)
{
  PartyMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyMarkWin::_vftable_;
  v1->m_pkInfo = 0;
}
// 9A06D4: using guessed type int (__stdcall *PartyMarkWin___vftable_)(int uiFlags);
// 9A06F4: using guessed type int (__thiscall *PartyMarkWin___vftable_)(void *p, char);

//----- (00552C00) --------------------------------------------------------
void __thiscall PartyMarkWin::_PartyMarkWin(PartyMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552C20) --------------------------------------------------------
void __thiscall PartyMarkWin::SetParty(PartyMarkWin *this, PartyMemberInfo *pkInfo)
{
  this->m_pkInfo = pkInfo;
}

//----- (00552C30) --------------------------------------------------------
PartyMemberInfo *__thiscall PartyMarkWin::GetParty(PartyMarkWin *this)
{
  return this->m_pkInfo;
}

//----- (00552C40) --------------------------------------------------------
void __thiscall RaidMarkWin::RaidMarkWin(RaidMarkWin *this)
{
  RaidMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RaidMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RaidMarkWin::_vftable_;
  v1->m_pkInfo = 0;
}
// 9A08C0: using guessed type int (__stdcall *RaidMarkWin___vftable_)(int uiFlags);
// 9A08DC: using guessed type int (__thiscall *RaidMarkWin___vftable_)(void *p, char);

//----- (00552C70) --------------------------------------------------------
void __thiscall RaidMarkWin::_RaidMarkWin(RaidMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552C90) --------------------------------------------------------
void __thiscall RaidMarkWin::SetRaidMember(RaidMarkWin *this, RaidMemberInfo *pkInfo)
{
  this->m_pkInfo = pkInfo;
}

//----- (00552CA0) --------------------------------------------------------
RaidMemberInfo *__thiscall RaidMarkWin::GetRaidMember(RaidMarkWin *this)
{
  return this->m_pkInfo;
}

//----- (00552CB0) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::ProcessMeInput(QuestHelperMarkWin *this, bool *bHit)
{
  QuestHelperMarkWin *v2; // esi@1
  int v3; // edi@3
  signed int v4; // eax@3
  int v5; // ebx@3
  int v6; // eax@3
  NiRefObjectVtbl *v7; // edi@3
  int v8; // eax@3
  NiRefObjectVtbl *bHita; // [sp+Ch] [bp+8h]@3

  v2 = this;
  PgWin::ProcessMeInput(&this->baseclass_0.baseclass_0, bHit);
  if ( v2->m_pkAutoRunMark )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[87].__vecDelDtor)(
                            v2,
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
    {
      v3 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2)
         / 2
         + 5;
      v4 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2);
      bHita = v2->m_pkAutoRunMark->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = v4 / 2 + 5;
      v6 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v2);
      bHita[43].__vecDelDtor((NiRefObject *)v2->m_pkAutoRunMark, v6 - v3);
      v7 = v2->m_pkAutoRunMark->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
      v7[44].__vecDelDtor((NiRefObject *)v2->m_pkAutoRunMark, v8 - v5);
      ((void (__stdcall *)(_DWORD))v2->m_pkAutoRunMark->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v2->m_pkAutoRunMark->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
  }
}

//----- (00552DA0) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::SetQuestID(QuestHelperMarkWin *this, unsigned __int16 kQuestID)
{
  this->m_kQuestID = kQuestID;
}

//----- (00552DC0) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::SetMobID(QuestHelperMarkWin *this, unsigned __int16 Mob_ID)
{
  this->m_MobID = Mob_ID;
}

//----- (00552DE0) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::SetPos(QuestHelperMarkWin *this, NiPoint2 kPos)
{
  LODWORD(this->m_kPos.x) = (_DWORD)kPos.x;
  this->m_kPos.y = kPos.y;
}

//----- (00552E00) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::SetQCID(QuestHelperMarkWin *this, unsigned __int16 QC_ID)
{
  this->m_QCID = QC_ID;
}

//----- (00552E20) --------------------------------------------------------
unsigned __int16 __thiscall QuestHelperMarkWin::GetQuestID(QuestHelperMarkWin *this)
{
  return this->m_kQuestID;
}

//----- (00552E30) --------------------------------------------------------
unsigned __int16 __thiscall QuestHelperMarkWin::GetMobID(QuestHelperMarkWin *this)
{
  return this->m_MobID;
}

//----- (00552E40) --------------------------------------------------------
unsigned __int16 __thiscall QuestHelperMarkWin::GetQCID(QuestHelperMarkWin *this)
{
  return this->m_QCID;
}

//----- (00552E50) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::GetPos(QuestHelperMarkWin *this, NiPoint2 *kPos)
{
  kPos->x = this->m_kPos.x;
  kPos->y = this->m_kPos.y;
}

//----- (00552E70) --------------------------------------------------------
void __thiscall MobAreaMarkWin::_MobAreaMarkWin(MobAreaMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552E90) --------------------------------------------------------
void __thiscall MobAreaMarkWin::SetQuestID(MobAreaMarkWin *this, unsigned __int16 QuestID)
{
  this->m_QuestID = QuestID;
}

//----- (00552EB0) --------------------------------------------------------
void __thiscall MobAreaMarkWin::SetMobID(MobAreaMarkWin *this, unsigned __int16 MobID)
{
  this->m_MobID = MobID;
}

//----- (00552ED0) --------------------------------------------------------
void __thiscall MobAreaMarkWin::SetPos(MobAreaMarkWin *this, NiPoint2 kPos)
{
  LODWORD(this->m_kPos.x) = (_DWORD)kPos.x;
  this->m_kPos.y = kPos.y;
}

//----- (00552EF0) --------------------------------------------------------
unsigned __int16 __thiscall MobAreaMarkWin::GetQuestID(MobAreaMarkWin *this)
{
  return this->m_QuestID;
}

//----- (00552F00) --------------------------------------------------------
unsigned __int16 __thiscall MobAreaMarkWin::GetMobID(MobAreaMarkWin *this)
{
  return this->m_MobID;
}

//----- (00552F10) --------------------------------------------------------
void __thiscall MobAreaMarkWin::GetPos(MobAreaMarkWin *this, NiPoint2 *kPos)
{
  kPos->x = this->m_kPos.x;
  kPos->y = this->m_kPos.y;
}

//----- (00552F30) --------------------------------------------------------
void __thiscall GTIScanMarkWin::GTIScanMarkWin(GTIScanMarkWin *this)
{
  GTIScanMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTIScanMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTIScanMarkWin::_vftable_;
}
// 9A0AA8: using guessed type int (__stdcall *GTIScanMarkWin___vftable_)(int uiFlags);
// 9A0AC4: using guessed type int (__thiscall *GTIScanMarkWin___vftable_)(void *p, char);

//----- (00552F50) --------------------------------------------------------
void __thiscall GTIScanMarkWin::_GTIScanMarkWin(GTIScanMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552F70) --------------------------------------------------------
void __thiscall GTIScanMarkWin::SetEnemyPos(GTIScanMarkWin *this, ScanMemberInfo pkMemberInfo)
{
  this->m_EenemyPos.loc.x = pkMemberInfo.loc.x;
  this->m_EenemyPos.loc.y = pkMemberInfo.loc.y;
}

//----- (00552F90) --------------------------------------------------------
ScanMemberInfo *__thiscall GTIScanMarkWin::GetEnemyPos(GTIScanMarkWin *this)
{
  return &this->m_EenemyPos;
}

//----- (00552FA0) --------------------------------------------------------
void __thiscall MapMarkWin::_MapMarkWin(MapMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00552FC0) --------------------------------------------------------
void __thiscall MapMarkWin::SetLifeTime(MapMarkWin *this, float fTime)
{
  this->m_fLifeTime = fTime;
}

//----- (00552FD0) --------------------------------------------------------
bool __thiscall MapMarkWin::IsPassLifeTime(MapMarkWin *this, float fTime)
{
  return fTime > (double)this->m_fLifeTime;
}

//----- (00553000) --------------------------------------------------------
void __thiscall MapMarkWin::SetPos(MapMarkWin *this, NiPoint2 *kPos)
{
  this->m_kPos.x = kPos->x;
  this->m_kPos.y = kPos->y;
}

//----- (00553020) --------------------------------------------------------
NiPoint2 *__thiscall MapMarkWin::GetPos(MapMarkWin *this)
{
  return &this->m_kPos;
}

//----- (00553030) --------------------------------------------------------
void __thiscall KQTeamMarkWin::KQTeamMarkWin(KQTeamMarkWin *this)
{
  KQTeamMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KQTeamMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KQTeamMarkWin::_vftable_;
}
// 9A0C90: using guessed type int (__stdcall *KQTeamMarkWin___vftable_)(int uiFlags);
// 9A0CAC: using guessed type int (__thiscall *KQTeamMarkWin___vftable_)(void *p, char);

//----- (00553050) --------------------------------------------------------
void __thiscall KQTeamMarkWin::_KQTeamMarkWin(KQTeamMarkWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00553070) --------------------------------------------------------
void __thiscall KQTeamMarkWin::SetCharHandle(KQTeamMarkWin *this, unsigned __int16 kCharHandle)
{
  this->m_kCharHandle = kCharHandle;
}

//----- (00553090) --------------------------------------------------------
unsigned __int16 __thiscall KQTeamMarkWin::GetCharHandle(KQTeamMarkWin *this)
{
  return this->m_kCharHandle;
}

//----- (005530A0) --------------------------------------------------------
void __thiscall MiniMapWin::SetMapTexture(MiniMapWin *this, NiSourceTexture *pkTexture)
{
  MiniMapWin *v2; // esi@1
  double v3; // st7@2
  FullMapWin *v4; // ecx@4

  v2 = this;
  MaskedWin::SetBaseTexture(this->m_pkMiniMapWin, &pkTexture->baseclass_0);
  if ( pkTexture )
  {
    v2->m_fTextureWidth = (double)(unsigned int)((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture)
                        * v2->m_fMiniMapScale;
    v2->m_fTextureHeight = (double)(unsigned int)((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(pkTexture)
                         * v2->m_fMiniMapScale;
    v3 = v2->m_fViewWidth / v2->m_fTextureWidth;
  }
  else
  {
    v2->m_fTextureWidth = 512.0;
    v2->m_fTextureHeight = 512.0;
    v3 = 0.3125;
  }
  v4 = v2->m_pkFullMapWin;
  v2->m_fMap2FullMapRate = v3;
  FullMapWin::ResetView(v4, 0);
}

//----- (00553150) --------------------------------------------------------
void __thiscall MiniMapWin::SetMapShift(MiniMapWin *this, float fX, float fY)
{
  this->m_fShiftX = 0.0;
  this->m_fShiftY = 0.0;
}

//----- (00553170) --------------------------------------------------------
void __thiscall MiniMapWin::SetMapScale(MiniMapWin *this, float fScale)
{
  this->m_fMiniMapScale = fScale;
  FullMapWin::SetMapScale(this->m_pkFullMapWin, fScale);
}

//----- (005531B0) --------------------------------------------------------
void __thiscall MiniMapWin::SetFullModeTextureUVs(MiniMapWin *this)
{
  NiAVObject *v1; // esi@1

  v1 = (NiAVObject *)this;
  MaskedWin::SetBaseTextureMatrix(this->m_pkMiniMapWin, 0.0, 0.0, 1.0, 1.0);
  NiAVObject::Update(v1, 0.0, 0);
}

//----- (005531F0) --------------------------------------------------------
void __thiscall MiniMapWin::SetZoomModeTextureUVs(MiniMapWin *this)
{
  int v3; // ST24_4@4
  int v4; // ST20_4@4
  int v6; // ST24_4@4
  int v7; // ST1C_4@4
  float v22; // ST0C_4@4
  float v26; // ST08_4@4
  float v27; // ST04_4@4
  float v28; // ST00_4@4
  float v29; // ST08_4@4

  _ESI = (NiAVObject *)this;
  if ( this->m_eMode )
    __asm { fld     ds:__real@3ecccccd }
  else
    __asm { fld     ds:__real@3f333333 }
  __asm { fstp    [ebp+fZoom] }
  v3 = this->m_kMapViewRect.right - this->m_kMapViewRect.left + 1;
  __asm { fild    [ebp+fViewWidth] }
  v4 = this->m_kMapViewRect.left;
  __asm
  {
    fstp    [ebp+fViewWidth]
    fld     [ebp+fViewWidth]
  }
  v6 = this->m_kMapViewRect.bottom - this->m_kMapViewRect.top + 1;
  __asm { fld     ds:__real@3f60000000000000 }
  v7 = this->m_kMapViewRect.top;
  __asm
  {
    fmul    st, st(1)
    fmul    [ebp+fZoom]
    fstp    [ebp+fZoom]
    fmul    dword ptr [esi+1B0h]
    fstp    [ebp+fUVTop]
    fild    [ebp+fViewWidth]
    fmul    dword ptr [esi+1B0h]
    fstp    [ebp+fTexViewHeight]
    fld     dword ptr [esi+1A0h]
    fld     [ebp+fZoom]
    fld     st
    fmulp   st(2), st
    fxch    st(1)
    fstp    [ebp+fViewWidth]
    fmul    dword ptr [esi+1A4h]
    fstp    [ebp+fZoom]
    fld     [ebp+fViewWidth]
    fld     st
    fld     ds:__real@3fe0000000000000
    fmul    st(1), st
    fxch    st(1)
    fsubr   dword ptr [esi+1C0h]
    fxch    st(1)
    fxch    st(2)
    fxch    st(1)
    fild    [ebp+fUVLeft]
    fmul    dword ptr [esi+1B0h]
    fstp    [ebp+fUVLeft]
    fsub    [ebp+fUVLeft]
    fstp    [ebp+fUVLeft]
    fld     dword ptr [esi+194h]
    fild    [ebp+fMapTop]
    fmul    dword ptr [esi+1B0h]
    fstp    [ebp+fMapTop]
    fld     [ebp+fMapTop]
    fadd    dword ptr [esi+1C4h]
    fsubp   st(1), st
    fld     [ebp+fZoom]
    fld     st
    fmulp   st(4), st
    fxch    st(1)
    fsubrp  st(3), st
    fxch    st(2)
    fstp    [ebp+fMapTop]
    fld     [ebp+fUVLeft]
    fld     st
    fld     [ebp+fUVTop]
    fld     st
    fdivp   st(2), st
    fxch    st(1)
    fstp    [ebp+fUVLeft]
    fld     [ebp+fMapTop]
    fld     st
    fld     [ebp+fTexViewHeight]
    fld     st
    fdivp   st(2), st
    fxch    st(1)
    fstp    [ebp+fUVTop]
    fxch    st(1)
    faddp   st(5), st
    fxch    st(4)
    fstp    [ebp+fTexViewHeight]
    fld     [ebp+fTexViewHeight]
    fdivrp  st(4), st
    fxch    st(3)
    fstp    [ebp+fTexViewHeight]
    fld     [ebp+fTexViewHeight]
    fld     [ebp+fUVTop]
    fld     st
    fsubp   st(2), st
    fxch    st(1)
    fstp    [ebp+fTexViewHeight]
    fld     [ebp+fTexViewHeight]
    fstp    [esp+2Ch+var_20]
    fxch    st(1)
    faddp   st(2), st
    fxch    st(1)
    fstp    [ebp+fTexViewHeight]
    fld     [ebp+fTexViewHeight]
    fdivrp  st(2), st
    fxch    st(1)
    fstp    [ebp+fTexViewHeight]
    fld     [ebp+fTexViewHeight]
    fld     [ebp+fUVLeft]
    fld     st
    fsubp   st(2), st
    fxch    st(1)
    fstp    [ebp+fTexViewHeight]
    fld     [ebp+fTexViewHeight]
    fstp    [esp+2Ch+var_24]
    fxch    st(1)
    fstp    [esp+2Ch+var_28]
    fstp    [esp+2Ch+var_2C]
  }
  MaskedWin::SetBaseTextureMatrix(this->m_pkMiniMapWin, v28, v27, v26, v22);
  __asm
  {
    fldz
    fstp    [esp+24h+var_24]
  }
  NiAVObject::Update(_ESI, v29, 0);
}
// 553202: inconsistent fpu stack

//----- (00553380) --------------------------------------------------------
void __thiscall MiniMapWin::Add_KQ_MOB(MiniMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto)
{
  FullMapWin::Add_KQ_MOB(this->m_pkFullMapWin, pkProto);
}

//----- (00553390) --------------------------------------------------------
void __thiscall MiniMapWin::Remove_KQ_MOB(MiniMapWin *this, bool b)
{
  FullMapWin::Remove_KQ_MOB(this->m_pkFullMapWin, b);
}

//----- (005533A0) --------------------------------------------------------
bool __thiscall MiniMapWin::GetWinPos(MiniMapWin *this, float fCharWorldX, float fCharWorldY, float *rfXPos, float *rfYPos)
{
  MiniMapWin *v5; // esi@1
  float v6; // ST10_4@4
  double v7; // st7@2
  char *v8; // edi@4
  double v9; // st7@4
  float v10; // ST08_4@4
  int v11; // eax@5
  float v12; // ST08_4@6
  double v13; // st7@8
  int v14; // ebx@10
  double v15; // st6@10
  int v16; // esi@10
  int v17; // edi@10
  int v18; // ebx@10
  int v20; // [sp-8h] [bp-14h]@0
  int v21; // [sp-4h] [bp-10h]@0
  float fMapCharY; // [sp+0h] [bp-Ch]@1
  char *v23; // [sp+4h] [bp-8h]@6
  float fMapCharX; // [sp+8h] [bp-4h]@4
  float fPlayerMiniMapGapa; // [sp+14h] [bp+8h]@7
  float fPlayerMiniMapGap; // [sp+14h] [bp+8h]@7
  float fPlayerMiniMapGapb; // [sp+14h] [bp+8h]@10
  float fZooma; // [sp+18h] [bp+Ch]@4
  float fZoomb; // [sp+18h] [bp+Ch]@4
  float fZoom; // [sp+18h] [bp+Ch]@4
  int fZoomc; // [sp+18h] [bp+Ch]@10

  v5 = this;
  fMapCharY = 0.01999999955296516 * fCharWorldY;
  if ( this->m_eMode )
    v7 = 0.40000001;
  else
    v7 = 0.69999999;
  fZooma = v7;
  v8 = (char *)&this->m_fViewWidth;
  fZoomb = (double)(this->m_kMapViewRect.right - this->m_kMapViewRect.left + 1) * 0.001953125 * fZooma;
  v9 = fZoomb;
  v6 = fCharWorldX * 0.01999999955296516;
  fZoom = (v6 - this->m_fMapCharX) / fZoomb;
  fMapCharX = (fMapCharY - this->m_fMapCharY) / v9;
  v10 = fabs(fZoom);
  if ( v10 > this->m_fViewWidth * 0.5
    || (v23 = (char *)&this->m_fViewHeight, v12 = fabs(fMapCharX), v12 > 0.5 * this->m_fViewHeight) )
  {
    LOBYTE(v11) = 0;
  }
  else
  {
    fPlayerMiniMapGapa = fCharWorldX
                       - *(float *)((int (__stdcall *)(int, int))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)(v20, v21);
    fPlayerMiniMapGap = fPlayerMiniMapGapa * 0.01999999955296516;
    if ( v5->m_eMode )
    {
      v13 = 0.5;
    }
    else
    {
      v13 = 0.5;
      fPlayerMiniMapGap = fPlayerMiniMapGap * 0.5;
    }
    v14 = (int)&v5->m_fViewLeft;
    v15 = *(float *)v8 * v13 + v5->m_fViewLeft + fZoom;
    fZoomc = (int)&v5->m_fViewTop;
    *rfXPos = v15 + fPlayerMiniMapGap;
    fPlayerMiniMapGapb = v13 + *(float *)v23 * v13 + v5->m_fViewTop - fMapCharX;
    *rfYPos = fPlayerMiniMapGapb;
    v16 = (signed int)*(float *)v8 / 2;
    v17 = (signed int)*rfXPos - (signed int)*(float *)v14 - v16;
    v18 = (signed int)fPlayerMiniMapGapb - (signed int)*(float *)v23 / 2;
    v11 = v17 * v17 + (v18 - (signed int)*(float *)fZoomc) * (v18 - (signed int)*(float *)fZoomc) < v16 * v16 - 900;
  }
  return v11;
}
// 5533A0: could not find valid save-restore pair for ebx

//----- (00553560) --------------------------------------------------------
void __thiscall MiniMapWin::SetMapViewRect(MiniMapWin *this, unsigned int dwLeft, unsigned int dwTop, unsigned int dwRight, unsigned int dwBottom)
{
  this->m_kMapViewRect.left = dwLeft;
  this->m_kMapViewRect.top = dwTop;
  this->m_kMapViewRect.right = dwRight;
  this->m_kMapViewRect.bottom = dwBottom;
  FullMapWin::SetMapViewRect(this->m_pkFullMapWin, dwLeft, dwTop, dwRight, dwBottom);
}

//----- (005535A0) --------------------------------------------------------
void __thiscall MiniMapWin::OnDestroy(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1

  v1 = this;
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_pkFullMapWin->baseclass_0.baseclass_0.baseclass_0);
  v1->m_pkFullMapWin = 0;
}

//----- (005535C0) --------------------------------------------------------
WorldMapWin *__thiscall MiniMapWin::GetWorldMap(MiniMapWin *this)
{
  return FullMapWin::GetWorldMap(this->m_pkFullMapWin);
}

//----- (005535D0) --------------------------------------------------------
void __thiscall MiniMapWin::OpenFullWorldMap(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  WorldMapWin *v2; // eax@1
  char v3; // al@2
  FullMapWin *v4; // ecx@2

  v1 = this;
  v2 = FullMapWin::GetWorldMap(this->m_pkFullMapWin);
  if ( v2 )
  {
    v3 = ((int (__thiscall *)(WorldMapWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2);
    v4 = v1->m_pkFullMapWin;
    if ( v3 )
      FullMapWin::CloseWorldMap(v4);
    else
      FullMapWin::OpenWorldMap(v4);
  }
}

//----- (00553610) --------------------------------------------------------
void __thiscall MiniMapWin::ShowGTQuit(MiniMapWin *this, bool b)
{
  MiniMapWin *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@1
  int v4; // [sp+0h] [bp-4h]@0
  signed int v5; // [sp+0h] [bp-4h]@2

  v2 = this;
  v3 = this->m_pkGTQuitBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( b )
  {
    ((void (__stdcall *)(signed int, int))v3)(1, v4);
    ((void (__stdcall *)(signed int))v2->m_pkGTTQuitText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v5 = 1;
  }
  else
  {
    ((void (__stdcall *)(_DWORD, int))v3)(0, v4);
    ((void (__stdcall *)(_DWORD))v2->m_pkGTTQuitText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v5 = 0;
  }
  ((void (__cdecl *)(signed int))v2->m_pkGTQuitPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v5);
}

//----- (00553680) --------------------------------------------------------
void __thiscall MiniMapWin::DirectMessage(MiniMapWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  CClientGuild *v4; // eax@4

  if ( iMsgTag == 27 && pvBody && !*(_DWORD *)pvBody )
  {
    v4 = GuildTask::GetGuild();
    if ( v4 )
    {
      BYTE3(iMsgTag) = LOBYTE(v4->m_iGTObserverSeedNum);
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xDBu, (char *)&iMsgTag + 3, 1);
    }
  }
}

//----- (005536D0) --------------------------------------------------------
void __thiscall MiniMapWin::AddQuestHelper(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1

  v1 = this;
  FullMapWin::ResetView(this->m_pkFullMapWin, 0);
  FullMapWin::AddQuestHelper(v1->m_pkFullMapWin);
}

//----- (005536F0) --------------------------------------------------------
bool __thiscall MiniMapMarkWin::HitTest(MiniMapMarkWin *this, int iSx, int iSy)
{
  MiniMapMarkWin *v3; // esi@1
  int v4; // eax@2
  int v5; // eax@4
  unsigned int v7; // [sp+4h] [bp-8h]@1
  unsigned int v8; // [sp+8h] [bp-4h]@1

  v3 = this;
  v7 = iSy
     + ((unsigned int)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)() >> 1);
  v8 = iSx
     + ((unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3) >> 1);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor)(
    v3,
    &v8,
    &v7);
  return (v8 & 0x80000000u) == 0
      && (v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3),
          (signed int)v8 < v4)
      && (v7 & 0x80000000u) == 0
      && (v5 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3),
          (signed int)v7 < v5);
}

//----- (00553780) --------------------------------------------------------
void __thiscall NpcMarkWin::UpdateMeWin(NpcMarkWin *this, float fCurTime)
{
  int v2; // edi@0
  NpcMarkWin *v3; // esi@1
  Char *v4; // edi@2
  CQuest *v5; // eax@3
  CQuest *v6; // ebx@3
  unsigned int v7; // eax@3
  PgWinSpr *v8; // ecx@6
  PgWinSpr *v9; // ecx@7
  signed int v10; // [sp-8h] [bp-1Ch]@12
  int v11; // [sp-4h] [bp-18h]@2
  CQuest::NPC_QUEST_STATUS kNpcState; // [sp+4h] [bp-10h]@3

  v3 = this;
  if ( this->m_pkQuestStateIngWin )
  {
    v11 = v2;
    ((void (__stdcall *)(_DWORD))this->m_pkQuestStateIngWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkQuestStateAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkQuestStateRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkQuestStateLowAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v4 = CharMgr::GetChar(&g_kCharMgr, v3->m_kCharHandle);
    if ( v4 )
    {
      v5 = QuestDataMgr::GetQuest();
      kNpcState.hID = v4->m_kCharShape.m_kMobID;
      v6 = v5;
      v7 = User::Lv(&g_kUser);
      CQuest::GetQuestStatusWithNPC(v6, &kNpcState, PQS_ING, v7, 0);
      if ( kNpcState.hID != -1 )
      {
        switch ( kNpcState.eResultState )
        {
          case 4:
          case 5:
          case 0x14:
            if ( !(unsigned __int8)((int (*)(void))v3->m_pkQuestStateRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
            {
              ((void (__stdcall *)(signed int, int))v3->m_pkQuestStateAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
                1,
                v11);
              v8 = v3->m_pkQuestStateIngWin;
              goto LABEL_7;
            }
            break;
          case 8:
            ((void (__stdcall *)(signed int, int))v3->m_pkQuestStateRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
              1,
              v11);
            ((void (__stdcall *)(_DWORD))v3->m_pkQuestStateIngWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            v8 = v3->m_pkQuestStateAbleWin;
LABEL_7:
            ((void (__cdecl *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            v9 = v3->m_pkQuestStateLowAbleWin;
            goto LABEL_15;
          case 6:
            if ( (unsigned __int8)((int (*)(void))v3->m_pkQuestStateRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
              || (unsigned __int8)((int (*)(void))v3->m_pkQuestStateAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
              || (unsigned __int8)((int (*)(void))v3->m_pkQuestStateLowAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
              break;
            v9 = v3->m_pkQuestStateIngWin;
            v10 = 1;
            goto LABEL_16;
          case 9:
            if ( !(unsigned __int8)((int (*)(void))v3->m_pkQuestStateRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
            {
              ((void (__stdcall *)(signed int))v3->m_pkQuestStateLowAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(_DWORD))v3->m_pkQuestStateAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              v9 = v3->m_pkQuestStateIngWin;
LABEL_15:
              v10 = 0;
LABEL_16:
              ((void (__stdcall *)(signed int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v10);
            }
            break;
          default:
            break;
        }
        if ( PgWin::IsVisible(&v3->m_pkQuestStateIngWin->baseclass_0) )
        {
          NpcMarkWin::DrawIcon(v3, v3->m_pkQuestStateIngWin);
        }
        else
        {
          if ( PgWin::IsVisible(&v3->m_pkQuestStateAbleWin->baseclass_0) )
          {
            NpcMarkWin::DrawIcon(v3, v3->m_pkQuestStateAbleWin);
          }
          else
          {
            if ( PgWin::IsVisible(&v3->m_pkQuestStateRewardWin->baseclass_0) )
            {
              NpcMarkWin::DrawIcon(v3, v3->m_pkQuestStateRewardWin);
            }
            else
            {
              if ( PgWin::IsVisible(&v3->m_pkQuestStateLowAbleWin->baseclass_0) )
                NpcMarkWin::DrawIcon(v3, v3->m_pkQuestStateLowAbleWin);
            }
          }
        }
      }
    }
  }
}
// 553780: could not find valid save-restore pair for edi

//----- (00553A20) --------------------------------------------------------
bool __thiscall NpcMarkWin::HitTest(NpcMarkWin *this, int iSx, int iSy)
{
  NpcMarkWin *v3; // esi@1
  int v4; // eax@2
  int v5; // eax@4
  int v7; // [sp+4h] [bp-8h]@1
  int v8; // [sp+8h] [bp-4h]@1

  v3 = this;
  v7 = iSy
     + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v8 = iSx
     + ((int (__thiscall *)(NpcMarkWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3);
  ((void (__thiscall *)(NpcMarkWin *, int *, int *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor)(
    v3,
    &v8,
    &v7);
  return v8 >= 0
      && (v4 = ((int (__thiscall *)(NpcMarkWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3),
          v8 < v4)
      && v7 >= 0
      && (v5 = ((int (__thiscall *)(NpcMarkWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3),
          v7 < v5);
}

//----- (00553AA0) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::QuestHelperMarkWin(QuestHelperMarkWin *this)
{
  QuestHelperMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->m_pkQuestHelperWin = 0;
  v1->m_pkAutoRunMark = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestHelperMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestHelperMarkWin::_vftable_;
  v1->m_kQuestID = -1;
}
// 9A0EAC: using guessed type int (__stdcall *QuestHelperMarkWin___vftable_)(int uiFlags);
// 9A0ECC: using guessed type int (__thiscall *QuestHelperMarkWin___vftable_)(void *p, char);

//----- (00553AE0) --------------------------------------------------------
void __thiscall MobAreaMarkWin::MobAreaMarkWin(MobAreaMarkWin *this)
{
  MobAreaMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MobAreaMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MobAreaMarkWin::_vftable_;
}
// 9A109C: using guessed type int (__stdcall *MobAreaMarkWin___vftable_)(int uiFlags);
// 9A10BC: using guessed type int (__thiscall *MobAreaMarkWin___vftable_)(void *p, char);

//----- (00553B00) --------------------------------------------------------
void __thiscall MapMarkWin::MapMarkWin(MapMarkWin *this)
{
  MapMarkWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MapMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MapMarkWin::_vftable_;
}
// 9A1288: using guessed type int (__stdcall *MapMarkWin___vftable_)(int uiFlags);
// 9A12A4: using guessed type int (__thiscall *MapMarkWin___vftable_)(void *p, char);

//----- (00553B20) --------------------------------------------------------
void __thiscall MiniMapWin::SetZoomButStateByMode(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1

  v1 = this;
  if ( this->m_eMode )
  {
    ((void (__stdcall *)(_DWORD))this->m_spZoomInBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v1->m_spZoomInBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    ((void (__stdcall *)(_DWORD))v1->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v1->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
  else
  {
    ((void (__stdcall *)(_DWORD))this->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v1->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    ((void (__stdcall *)(_DWORD))v1->m_spZoomInBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v1->m_spZoomInBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
}

//----- (00553BB0) --------------------------------------------------------
void __thiscall MiniMapWin::OnSchedule(MiniMapWin *this)
{
  GameFrameWork::OpenKDQuestWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
}

//----- (00553BC0) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateMainCharPos(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  int v2; // eax@1
  float v3; // ecx@1
  float v4; // edx@1
  MainCharMarkWin *v5; // edi@1
  int v6; // [sp+0h] [bp-18h]@0

  v1 = this;
  v2 = ((int (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)(v6);
  LODWORD(v3) = *(_DWORD *)v2;
  LODWORD(v4) = *(_DWORD *)(v2 + 4);
  v5 = v1->m_pkMainCharMarkWin;
  v1->m_fMainCharWorldX = *(float *)v2;
  v1->m_fMainCharWorldY = v4;
  v1->m_fMapCharX = v3 * 0.01999999955296516;
  v1->m_fMapCharY = 0.01999999955296516 * v4;
  ((void (__thiscall *)(MainCharMarkWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(v5);
  MiniMapWin::SetZoomModeTextureUVs(v1);
}

//----- (00553C90) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateMainCharDir(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  Mover *v2; // eax@1
  NiPoint3 kDir; // [sp+4h] [bp-34h]@2
  NiMatrix3 kMat; // [sp+10h] [bp-28h]@1
  unsigned int v5; // [sp+34h] [bp-4h]@1
  int v6; // [sp+38h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = this;
  ((void (__stdcall *)(NiMatrix3 *))g_pkMainChar->baseclass_0.vfptr[6].GetAbstateColor)(&kMat);
  v2 = g_pkMainChar->m_pkMover;
  if ( v2 )
    v2->baseclass_0.baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v2, (unsigned int)&kDir);
  else
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].__vecDelDtor)(&kDir);
  kDir.y = -kDir.y;
  kDir.z = -kDir.z;
  NpNs_RotateModelZToVector(&kDir, &kMat);
  ((void (__stdcall *)(NiMatrix3 *))v1->m_pkMainCharMarkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[74].__vecDelDtor)(&kMat);
}
// A85C00: using guessed type int __security_cookie;

//----- (00553D30) --------------------------------------------------------
void __thiscall MiniMapWin::UpdatePartyPos(MiniMapWin *this)
{
  NiTListItem<PartyMarkWin *> *v1; // eax@1
  PartyMarkWin *v2; // esi@4
  PartyMemberInfo *v3; // edi@5
  _BYTE v4[20]; // ST00_20@8
  Char *v5; // eax@8
  Char *v6; // ebx@8
  double v7; // st7@10
  float v8; // eax@13
  float v9; // edx@13
  NiPoint3 kPos; // [sp+1Ch] [bp-30h]@10
  float v11; // [sp+28h] [bp-24h]@13
  float v12; // [sp+2Ch] [bp-20h]@13
  float fYPos; // [sp+34h] [bp-18h]@12
  float fXPos; // [sp+38h] [bp-14h]@12
  MiniMapWin *thisa; // [sp+3Ch] [bp-10h]@1
  NiTListItem<PartyMarkWin *> *kIter; // [sp+40h] [bp-Ch]@3
  float x; // [sp+44h] [bp-8h]@10
  float y; // [sp+48h] [bp-4h]@12

  v1 = this->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->m_element;
      kIter = v1->m_pkNext;
      if ( v2 )
      {
        v3 = v2->m_pkInfo;
        if ( !v3 )
          return;
        if ( v3->m_bShow )
        {
          *(_DWORD *)v4 = *(_DWORD *)&v3->m_kCharID.n5_name[0];
          *(_QWORD *)&v4[4] = *(_QWORD *)&v3->m_kCharID.n5_name[4];
          *(_QWORD *)&v4[12] = *(_QWORD *)&v3->m_kCharID.n5_name[12];
          v5 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v4);
          v6 = v5;
          if ( v5 && Char::IsUpdate(v5) )
          {
            ((void (__thiscall *)(Char *, NiPoint3 *))v6->baseclass_0.vfptr[6].SetAbStateProperty)(v6, &kPos);
            x = kPos.x;
            v7 = kPos.y;
          }
          else
          {
            x = v3->m_fX;
            v7 = v3->m_fY;
          }
          y = v7;
          if ( MiniMapWin::GetWinPos(thisa, x, y, &fXPos, &fYPos) == 1 )
          {
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)v2,
              1u);
            v8 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
            v11 = fXPos;
            v12 = fYPos;
            v9 = fYPos;
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = fXPos;
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v9;
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v8;
          }
          else
          {
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)v2,
              0);
          }
        }
        else
        {
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v2,
            0);
        }
      }
      if ( !kIter )
        break;
      v1 = kIter;
    }
  }
}

//----- (00553E70) --------------------------------------------------------
bool __thiscall MiniMapWin::IsInNPC(MiniMapWin *this, unsigned __int16 kCharHandle)
{
  NiTListItem<NpcMarkWin *> *v2; // eax@1
  NpcMarkWin *v3; // ecx@2
  bool result; // al@5

  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3->m_kCharHandle == kCharHandle )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00553EB0) --------------------------------------------------------
bool __thiscall MiniMapWin::IsInParty(MiniMapWin *this, PartyMemberInfo *pkInfo)
{
  NiTListItem<PartyMarkWin *> *v2; // eax@1
  PartyMarkWin *v3; // ecx@2
  bool result; // al@5

  v2 = this->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3->m_pkInfo == pkInfo )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00553EF0) --------------------------------------------------------
PartyMarkWin *__thiscall MiniMapWin::FindPartyWin(MiniMapWin *this, PartyMemberInfo *pkInfo)
{
  NiTListItem<PartyMarkWin *> *v2; // ecx@1
  PartyMarkWin *result; // eax@2

  v2 = this->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result )
      {
        if ( result->m_pkInfo == pkInfo )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00553F20) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateNPCPos(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  NiTListItem<NpcMarkWin *> *v2; // eax@1
  NpcMarkWin *v3; // edi@4
  Char *v4; // eax@5
  int v5; // eax@6
  float v6; // ST38_4@9
  float v7; // ST28_4@9
  double v8; // st7@7
  float v9; // ST44_4@9
  float v10; // ST44_4@9
  float v11; // ST28_4@9
  float v12; // ST28_4@10
  float v13; // ST28_4@11
  double v14; // st7@12
  double v15; // st7@14
  int v16; // esi@14
  int v17; // edi@14
  int v18; // ebx@14
  float v19; // eax@17
  NiTListItem<NpcMarkWin *> *kIter; // [sp+20h] [bp-1Ch]@4
  NpcMarkWin *pkWin; // [sp+24h] [bp-18h]@4
  int v22; // [sp+28h] [bp-14h]@10
  float fYPos; // [sp+2Ch] [bp-10h]@9
  float fYPosa; // [sp+2Ch] [bp-10h]@14
  float fXPos; // [sp+30h] [bp-Ch]@9
  float fXPosa; // [sp+30h] [bp-Ch]@14
  MiniMapWin *v27; // [sp+34h] [bp-8h]@1
  float v28; // [sp+38h] [bp-4h]@11

  v1 = this;
  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v27 = this;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      kIter = v2->m_pkNext;
      pkWin = v3;
      if ( v3 )
      {
        v4 = CharMgr::GetChar(&g_kCharMgr, v3->m_kCharHandle);
        if ( v4 )
        {
          v5 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
          if ( v1->m_eMode )
            v8 = 0.40000001;
          else
            v8 = 0.69999999;
          v9 = v8;
          v10 = (double)(v1->m_kMapViewRect.right - v1->m_kMapViewRect.left + 1) * 0.001953125 * v9;
          v6 = *(float *)v5 * 0.01999999955296516;
          fXPos = (v6 - v1->m_fMapCharX) / v10;
          v7 = 0.01999999955296516 * *(float *)(v5 + 4);
          fYPos = (v7 - v1->m_fMapCharY) / v10;
          v11 = fabs(fXPos);
          if ( v11 > v1->m_fViewWidth * 0.5
            || (v22 = (int)&v1->m_fViewHeight, v12 = fabs(fYPos), v12 > 0.5 * v1->m_fViewHeight) )
            goto LABEL_19;
          v13 = *(float *)v5 - *(float *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
          v28 = v13 * 0.01999999955296516;
          if ( v1->m_eMode )
          {
            v14 = 0.5;
          }
          else
          {
            v14 = 0.5;
            v28 = v28 * 0.5;
          }
          fXPosa = v1->m_fViewWidth * v14 + v1->m_fViewLeft + fXPos + v28;
          fYPosa = v14 + *(float *)v22 * v14 + v1->m_fViewTop - fYPos;
          v15 = v1->m_fViewLeft;
          v16 = (signed int)v1->m_fViewWidth / 2;
          v17 = (signed int)fXPosa - (signed int)v15 - v16;
          v18 = (signed int)fYPosa - (signed int)*(float *)v22 / 2;
          if ( v17 * v17 + (v18 - (signed int)v27->m_fViewTop) * (v18 - (signed int)v27->m_fViewTop) < v16 * v16 - 900 != 1 )
          {
            v3 = pkWin;
            v1 = v27;
LABEL_19:
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)v3,
              0);
            goto LABEL_20;
          }
          if ( !(unsigned __int8)((int (__thiscall *)(NpcMarkWin *))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(pkWin) )
            pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)pkWin,
              1u);
          v19 = pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
          pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = fXPosa;
          pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = fYPosa;
          pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v19;
          v1 = v27;
        }
      }
LABEL_20:
      if ( !kIter )
        return;
      v2 = kIter;
    }
  }
}

//----- (005541B0) --------------------------------------------------------
bool __thiscall MiniMapWin::IsInRaid(MiniMapWin *this, RaidMemberInfo *pkInfo)
{
  NiTListItem<RaidMarkWin *> *v2; // ecx@1
  RaidMarkWin *v3; // eax@2
  RaidMemberInfo *v4; // eax@3
  bool result; // al@10

  v2 = this->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        v4 = v3->m_pkInfo;
        if ( v4 )
        {
          if ( *(_DWORD *)&v4->m_kCharID.n5_name[0] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[0]
            && *(_DWORD *)&v4->m_kCharID.n5_name[4] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[4]
            && *(_DWORD *)&v4->m_kCharID.n5_name[8] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[8]
            && *(_DWORD *)&v4->m_kCharID.n5_name[12] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[12]
            && *(_DWORD *)&v4->m_kCharID.n5_name[16] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[16] )
            break;
        }
      }
      if ( !v2 )
        goto LABEL_10;
    }
    result = 1;
  }
  else
  {
LABEL_10:
    result = 0;
  }
  return result;
}

//----- (00554210) --------------------------------------------------------
RaidMarkWin *__thiscall MiniMapWin::FindRaidWin(MiniMapWin *this, RaidMemberInfo *pkInfo)
{
  NiTListItem<RaidMarkWin *> *v2; // ecx@1
  RaidMarkWin *result; // eax@2

  v2 = this->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result )
      {
        if ( result->m_pkInfo == pkInfo )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00554240) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateRaidPos(MiniMapWin *this)
{
  NiTListItem<RaidMarkWin *> *v1; // eax@1
  RaidMarkWin *v2; // esi@4
  RaidMemberInfo *v3; // edi@5
  _BYTE v4[20]; // ST00_20@8
  Char *v5; // eax@8
  Char *v6; // ebx@8
  double v7; // st7@10
  float v8; // eax@13
  float v9; // edx@13
  NiPoint3 kPos; // [sp+1Ch] [bp-30h]@10
  float v11; // [sp+28h] [bp-24h]@13
  float v12; // [sp+2Ch] [bp-20h]@13
  float fYPos; // [sp+34h] [bp-18h]@12
  float fXPos; // [sp+38h] [bp-14h]@12
  MiniMapWin *thisa; // [sp+3Ch] [bp-10h]@1
  NiTListItem<RaidMarkWin *> *kIter; // [sp+40h] [bp-Ch]@3
  float x; // [sp+44h] [bp-8h]@10
  float y; // [sp+48h] [bp-4h]@12

  v1 = this->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->m_element;
      kIter = v1->m_pkNext;
      if ( v2 )
      {
        v3 = v2->m_pkInfo;
        if ( !v3 )
          return;
        if ( v3->m_bShow )
        {
          *(_DWORD *)v4 = *(_DWORD *)&v3->m_kCharID.n5_name[0];
          *(_QWORD *)&v4[4] = *(_QWORD *)&v3->m_kCharID.n5_name[4];
          *(_QWORD *)&v4[12] = *(_QWORD *)&v3->m_kCharID.n5_name[12];
          v5 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v4);
          v6 = v5;
          if ( v5 && Char::IsUpdate(v5) )
          {
            ((void (__thiscall *)(Char *, NiPoint3 *))v6->baseclass_0.vfptr[6].SetAbStateProperty)(v6, &kPos);
            x = kPos.x;
            v7 = kPos.y;
          }
          else
          {
            x = v3->m_fX;
            v7 = v3->m_fY;
          }
          y = v7;
          if ( MiniMapWin::GetWinPos(thisa, x, y, &fXPos, &fYPos) == 1 )
          {
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)v2,
              1u);
            v8 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
            v11 = fXPos;
            v12 = fYPos;
            v9 = fYPos;
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = fXPos;
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v9;
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v8;
          }
          else
          {
            v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)v2,
              0);
          }
        }
        else
        {
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v2,
            0);
        }
      }
      if ( !kIter )
        break;
      v1 = kIter;
    }
  }
}

//----- (00554380) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateGTEnemyPos(MiniMapWin *this)
{
  signed int v1; // ebx@0
  MiniMapWin *v2; // esi@1
  NiTListItem<GTIScanMarkWin *> *v3; // edi@1
  GTIScanMarkWin *v4; // ecx@3
  float v5; // ST2C_4@8
  float v6; // ST1C_4@8
  double v7; // st6@6
  float v8; // ST3C_4@8
  float v9; // ST3C_4@8
  float v10; // ST1C_4@8
  float v11; // ST1C_4@9
  float v12; // ST1C_4@10
  double v13; // st7@11
  double v14; // st7@13
  int v15; // esi@13
  int v16; // edi@13
  int v17; // ebx@13
  float v18; // eax@14
  signed int v19; // [sp-4h] [bp-3Ch]@2
  GTIScanMarkWin *pkWin; // [sp+18h] [bp-20h]@3
  NiTListItem<GTIScanMarkWin *> *kIter; // [sp+1Ch] [bp-1Ch]@3
  int v22; // [sp+20h] [bp-18h]@9
  float fYPos; // [sp+24h] [bp-14h]@8
  float fYPosa; // [sp+24h] [bp-14h]@13
  float fXPos; // [sp+28h] [bp-10h]@8
  float fXPosa; // [sp+28h] [bp-10h]@13
  float x; // [sp+2Ch] [bp-Ch]@5
  MiniMapWin *v28; // [sp+30h] [bp-8h]@1
  float v29; // [sp+34h] [bp-4h]@10

  v2 = this;
  v3 = this->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v28 = this;
  if ( v3 )
  {
    v19 = v1;
    do
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      kIter = v3;
      pkWin = v4;
      if ( v4 )
      {
        if ( v4 == (GTIScanMarkWin *)-292 )
          return;
        x = (double)v4->m_EenemyPos.loc.x;
        if ( v2->m_eMode )
          v7 = 0.40000001;
        else
          v7 = 0.69999999;
        v8 = v7;
        v9 = (double)(v2->m_kMapViewRect.right - v2->m_kMapViewRect.left + 1) * 0.001953125 * v8;
        v5 = x * 0.01999999955296516;
        fXPos = (v5 - v2->m_fMapCharX) / v9;
        v6 = 0.01999999955296516 * (double)v4->m_EenemyPos.loc.y;
        fYPos = (v6 - v2->m_fMapCharY) / v9;
        v10 = fabs(fXPos);
        if ( v2->m_fViewWidth * 0.5 < v10
          || (v22 = (int)&v2->m_fViewHeight, v11 = fabs(fYPos), v11 > 0.5 * v2->m_fViewHeight) )
        {
          ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        }
        else
        {
          v12 = x - *(float *)((int (__stdcall *)(signed int))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)(v19);
          v29 = v12 * 0.01999999955296516;
          if ( v2->m_eMode )
          {
            v13 = 0.5;
          }
          else
          {
            v13 = 0.5;
            v29 = v29 * 0.5;
          }
          fXPosa = v2->m_fViewWidth * v13 + v2->m_fViewLeft + fXPos + v29;
          fYPosa = v13 + *(float *)v22 * v13 + v2->m_fViewTop - fYPos;
          v14 = v2->m_fViewLeft;
          v15 = (signed int)v2->m_fViewWidth / 2;
          v16 = (signed int)fXPosa - (signed int)v14 - v15;
          v17 = (signed int)fYPosa - (signed int)*(float *)v22 / 2;
          if ( v16 * v16 + (v17 - (signed int)v28->m_fViewTop) * (v17 - (signed int)v28->m_fViewTop) < v15 * v15 - 900 == 1 )
          {
            v19 = 1;
            ((void (__thiscall *)(GTIScanMarkWin *))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(pkWin);
            v3 = kIter;
            v18 = pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
            pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = fXPosa;
            pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = fYPosa;
            pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v18;
            v2 = v28;
          }
          else
          {
            v3 = kIter;
            v2 = v28;
            v19 = 0;
            ((void (*)(void))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
          }
        }
      }
    }
    while ( v3 );
  }
}
// 554380: could not find valid save-restore pair for ebx

//----- (00554620) --------------------------------------------------------
void __thiscall MiniMapWin::StopScanEffect(MiniMapWin *this)
{
  SpEffect *v1; // eax@1

  v1 = this->m_pkScanEffect;
  if ( v1 )
  {
    if ( v1->m_bLive )
      v1->m_bLoop = 0;
  }
}

//----- (00554640) --------------------------------------------------------
void __thiscall MiniMapWin::ResetKQAlarm(MiniMapWin *this)
{
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v1; // esi@1
  char *v2; // edi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v3; // ST00_4@2

  v1 = this->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v2 = (char *)&this->m_kKQAlarmInfos;
  while ( v1 )
  {
    v3 = v1;
    v1 = v1->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v3);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
}

//----- (00554680) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateKQAlarm(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v2; // eax@4
  MiniMapWin::sKQAlarmInfo *v3; // ecx@5
  int bShow; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( this->m_bKQListChanged )
  {
    if ( this->m_bKQStarted || this->m_bKQJoined )
    {
      ((void (__stdcall *)(_DWORD))this->m_spNewKQuest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v1->m_bKQListChanged = 0;
    }
    else
    {
      v2 = this->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      LOBYTE(bShow) = 0;
      if ( v2 )
      {
        while ( 1 )
        {
          v3 = v2->m_element;
          v2 = v2->m_pkNext;
          if ( v3 )
          {
            if ( v3->m_bJoinable )
              break;
          }
          if ( !v2 )
            goto LABEL_10;
        }
        LOBYTE(bShow) = 1;
      }
LABEL_10:
      ((void (__stdcall *)(int))v1->m_spNewKQuest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
      v1->m_bKQListChanged = 0;
    }
  }
}

//----- (00554710) --------------------------------------------------------
bool __thiscall MiniMapWin::ConfirmKQAlarmInfo(MiniMapWin *this, unsigned int kHandle)
{
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v2; // eax@1
  MiniMapWin::sKQAlarmInfo *v3; // ecx@2
  bool result; // al@5

  v2 = this->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3->m_kHandle == kHandle )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = 0;
  }
  else
  {
LABEL_5:
    result = 1;
  }
  return result;
}

//----- (00554740) --------------------------------------------------------
PgSprData *__thiscall MiniMapWin::GetMapIconSprData(MiniMapWin *this, unsigned int kIndex)
{
  PgSprData *result; // eax@4

  switch ( kIndex )
  {
    case 5u:
      result = this->m_spLinkSprData.m_pObject;
      break;
    case 0x10u:
      result = this->m_spRedPos.m_pObject;
      break;
    case 0x11u:
      result = this->m_spBluePos.m_pObject;
      break;
    default:
      result = this->m_spNpcSprData.m_pObject;
      break;
  }
  return result;
}

//----- (00554780) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateKQTeamMark(MiniMapWin *this)
{
  signed int v1; // edi@0
  char *v2; // ebx@1
  unsigned int v3; // ecx@1
  unsigned int v4; // eax@1
  int v5; // edx@2
  int v6; // eax@5
  int v7; // esi@6
  int v8; // eax@8
  int v9; // edi@8
  int v10; // eax@9
  unsigned int v11; // edx@9
  int v12; // eax@9
  int v13; // ecx@10
  Char *v14; // eax@15
  int v15; // eax@16
  int v16; // eax@17
  float v17; // ecx@17
  signed int v18; // [sp+14h] [bp-34h]@7
  float fYPos; // [sp+38h] [bp-10h]@16
  float fXPos; // [sp+3Ch] [bp-Ch]@16
  MiniMapWin *thisa; // [sp+40h] [bp-8h]@1
  int uiKey; // [sp+44h] [bp-4h]@8

  v2 = (char *)&this->m_KQTeamMarkWinMap;
  thisa = this;
  v3 = this->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize;
  v4 = 0;
  if ( v3 )
  {
    v5 = *((_DWORD *)v2 + 2);
    while ( !*(_DWORD *)v5 )
    {
      ++v4;
      v5 += 4;
      if ( v4 >= v3 )
        goto LABEL_5;
    }
    v6 = *(_DWORD *)(*((_DWORD *)v2 + 2) + 4 * v4);
  }
  else
  {
LABEL_5:
    v6 = 0;
  }
  v7 = v6;
  if ( v6 )
  {
    v18 = v1;
    do
    {
      v8 = *(_WORD *)(v7 + 4);
      v9 = *(_DWORD *)(v7 + 8);
      v7 = *(_DWORD *)v7;
      uiKey = v8;
      if ( !v7 )
      {
        v10 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v2 + 4))(v2, v8);
        v11 = *((_DWORD *)v2 + 1);
        v12 = v10 + 1;
        if ( v12 >= v11 )
        {
LABEL_13:
          v7 = 0;
        }
        else
        {
          v13 = *((_DWORD *)v2 + 2) + 4 * v12;
          while ( 1 )
          {
            v7 = *(_DWORD *)v13;
            if ( *(_DWORD *)v13 )
              break;
            ++v12;
            v13 += 4;
            if ( v12 >= v11 )
              goto LABEL_13;
          }
        }
      }
      if ( v9 )
      {
        v14 = CharMgr::GetChar(&g_kCharMgr, uiKey);
        if ( v14 )
        {
          v15 = ((int (__thiscall *)(Char *, signed int))v14->baseclass_0.vfptr[6].Deaffect)(v14, v18);
          if ( MiniMapWin::GetWinPos(thisa, *(float *)v15, *(float *)(v15 + 4), &fXPos, &fYPos) == 1 )
          {
            v18 = 1;
            (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 256))(v9);
            v16 = *(_DWORD *)(v9 + 96);
            v17 = fYPos;
            *(_DWORD *)(v9 + 88) = LODWORD(fXPos);
            *(_DWORD *)(v9 + 92) = LODWORD(v17);
            *(_DWORD *)(v9 + 96) = v16;
          }
          else
          {
            v18 = 0;
            (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 256))(v9);
          }
        }
      }
    }
    while ( v7 );
  }
}
// 554780: could not find valid save-restore pair for edi

//----- (005548C0) --------------------------------------------------------
void __thiscall MiniMapWin::ShowSideWin(MiniMapWin *this, bool b)
{
  ClientWin *v2; // ecx@1

  v2 = this->m_spSideWin.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
}

//----- (005548E0) --------------------------------------------------------
bool __thiscall MiniMapMarkWin::Create(MiniMapMarkWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  MiniMapMarkWin *v5; // esi@1
  bool result; // al@2

  v5 = this;
  if ( pkSprData )
  {
    PgWin::Create(
      &this->baseclass_0,
      iXPos,
      iYPos,
      pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
      pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
      pkParent,
      0,
      0);
    v5->m_pkMarkWin = PgWinSpr::CreateWin(
                        -1 - (signed int)pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiWidth / 2,
                        -1 - (signed int)pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiHeight / 2,
                        pkSprData,
                        &v5->baseclass_0,
                        0,
                        0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00554960) --------------------------------------------------------
PgWinSpr *__cdecl CreateSprCenteredWin(PgSprData *pkSprData, int iXOff, int iYOff, PgWin *pkParent)
{
  return PgWinSpr::CreateWin(
           iXOff - (signed int)pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiWidth / 2 - 1,
           iYOff - (signed int)pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiHeight / 2 - 1,
           pkSprData,
           pkParent,
           0,
           0);
}

//----- (005549A0) --------------------------------------------------------
bool __thiscall NpcMarkWin::Create(NpcMarkWin *this, int iXPos, int iYPos, PgSprData *pkSprData, QuestStateImage *pkImage, PgWin *pkParent, PgSprData *pkAutoSprData)
{
  NpcMarkWin *v7; // esi@1
  int v8; // edi@3
  PgWinSpr *v9; // eax@3
  NiPointer<MapNavigator> *v10; // eax@4
  PgWin *v11; // edi@4
  MapNavigator *v12; // ebx@4
  PgWinSpr *v13; // eax@11
  bool result; // al@12

  v7 = this;
  if ( MiniMapMarkWin::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent) )
  {
    if ( pkImage )
    {
      v8 = (signed int)(-2 * pkSprData->m_akHitTester.m_pBase->m_pObject->m_uiHeight) / 3;
      v7->m_pkQuestStateIngWin = PgWinSpr::CreateWin(
                                   -1
                                 - (signed int)pkImage->spIng.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiWidth / 2,
                                   v8
                                 - (signed int)pkImage->spIng.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiHeight
                                 / 2
                                 - 1,
                                   pkImage->spIng.m_pObject,
                                   &v7->baseclass_0.baseclass_0,
                                   0,
                                   0);
      v7->m_pkQuestStateAbleWin = PgWinSpr::CreateWin(
                                    -1
                                  - (signed int)pkImage->spAble.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiWidth
                                  / 2,
                                    v8
                                  - (signed int)pkImage->spAble.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiHeight
                                  / 2
                                  - 1,
                                    pkImage->spAble.m_pObject,
                                    &v7->baseclass_0.baseclass_0,
                                    0,
                                    0);
      v7->m_pkQuestStateRewardWin = PgWinSpr::CreateWin(
                                      -1
                                    - (signed int)pkImage->spReward.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiWidth
                                    / 2,
                                      v8
                                    - (signed int)pkImage->spReward.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiHeight
                                    / 2
                                    - 1,
                                      pkImage->spReward.m_pObject,
                                      &v7->baseclass_0.baseclass_0,
                                      0,
                                      0);
      v9 = PgWinSpr::CreateWin(
             -1 - (signed int)pkImage->spLowAble.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiWidth / 2,
             v8 - (signed int)pkImage->spLowAble.m_pObject->m_akHitTester.m_pBase->m_pObject->m_uiHeight / 2 - 1,
             pkImage->spLowAble.m_pObject,
             &v7->baseclass_0.baseclass_0,
             0,
             0);
      v7->m_pkQuestStateLowAbleWin = v9;
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v9,
        0);
      ((void (__stdcall *)(_DWORD))v7->m_pkQuestStateIngWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v7->m_pkQuestStateAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v7->m_pkQuestStateRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v7->m_pkQuestStateIngWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v7->m_pkQuestStateAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v7->m_pkQuestStateRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v7->m_pkQuestStateLowAbleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    }
    v10 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&pkParent);
    v11 = pkParent;
    v12 = v10->m_pObject;
    if ( pkParent
      && !InterlockedDecrement((volatile LONG *)&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    if ( pkAutoSprData && v12 )
    {
      if ( v12->m_bEnableAutoWay )
      {
        v13 = CreateSprCenteredWin(pkAutoSprData, 0, 0, &v7->baseclass_0.baseclass_0);
        v7->m_pkAutoRunMark = v13;
        v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v13,
          0);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00554BD0) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::OnClose(QuestHelperMarkWin *this)
{
  QuestHelperMarkWin *v1; // esi@1
  PgWin *v2; // ecx@1
  PgWin *v3; // eax@2
  PgWin *v4; // edi@4
  NiPointer<PgWin> result; // [sp+4h] [bp-4h]@3

  v1 = this;
  v2 = (PgWin *)this->m_pkAutoRunMark;
  if ( v2 )
  {
    v3 = PgWin::GetParentWin(v2);
    if ( v3 )
    {
      PgWin::DetachChildWin(v3, &result, &v1->m_pkAutoRunMark->baseclass_0);
      if ( result.m_pObject )
      {
        v4 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v4 )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
      }
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkAutoRunMark->baseclass_0);
      v1->m_pkAutoRunMark = 0;
    }
  }
}

//----- (00554C50) --------------------------------------------------------
bool __thiscall QuestHelperMarkWin::Create(QuestHelperMarkWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgSprData *pkAutoSprData)
{
  QuestHelperMarkWin *v6; // edi@1
  MapNavigator *v7; // ebx@2
  PgSprData *v8; // esi@3
  PgWinSpr *v9; // eax@9
  bool result; // al@10

  v6 = this;
  if ( MiniMapMarkWin::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent) )
  {
    v7 = MapNavigator::GetMapNavigator((NiPointer<MapNavigator> *)&pkSprData)->m_pObject;
    if ( pkSprData )
    {
      v8 = pkSprData;
      if ( !InterlockedDecrement((volatile LONG *)&pkSprData->baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    if ( pkAutoSprData && v7 )
    {
      if ( v7->m_bEnableAutoWay )
      {
        v9 = CreateSprCenteredWin(pkAutoSprData, 0, 0, pkParent);
        v6->m_pkAutoRunMark = v9;
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v9,
          0);
        ((void (__stdcall *)(_DWORD))v6->m_pkAutoRunMark->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00554D10) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::DirectMessage(QuestHelperMarkWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  QuestHelperMarkWin *v4; // ebx@1
  unsigned int v5; // eax@2
  void *v6; // eax@2
  void *v7; // esi@2
  MapNavigator *v8; // edi@5
  int v9; // edx@9
  double v10; // st7@9
  Name3 *v11; // eax@11
  int v12; // edx@11
  int v13; // ecx@11
  int v14; // edx@11
  PgFrameWork *v15; // eax@11
  GTInformWin *v16; // edi@11
  D3DXCOLOR v17; // ST08_16@13
  char *v18; // eax@13
  char *v19; // eax@13
  char v20; // [sp+18h] [bp-54h]@11
  NiPoint3 kDest; // [sp+24h] [bp-48h]@11
  NiPointer<MapNavigator> result; // [sp+30h] [bp-3Ch]@4
  NiPoint3 kPos; // [sp+38h] [bp-34h]@9
  MapNavigator *pkNavigater; // [sp+44h] [bp-28h]@4
  char acMapName[13]; // [sp+48h] [bp-24h]@11
  char acDestMapName[13]; // [sp+58h] [bp-14h]@11
  unsigned int v27; // [sp+68h] [bp-4h]@1
  int v28; // [sp+6Ch] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 3 )
  {
    v5 = MobCoordinateTab::GetRecordNum(HIWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][1]));
    v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4), v5);
    v7 = v6;
    if ( v6 )
    {
      if ( *((_WORD *)v6 + 1) == HIWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][1]) )
      {
        pkNavigater = MapNavigator::GetMapNavigator(&result)->m_pObject;
        if ( result.m_pObject )
        {
          v8 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v8 )
              v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
          }
        }
        if ( pkNavigater )
        {
          v9 = *((_DWORD *)v7 + 5);
          kPos.x = (double)*((unsigned int *)v7 + 4);
          v10 = (double)*((signed int *)v7 + 5);
          if ( v9 < 0 )
            v10 = v10 + 4294967300.0;
          kPos.y = v10;
          kPos.z = 0.0;
          kDest.y = kPos.y;
          LODWORD(kDest.x) = (_DWORD)kPos.x;
          kDest.z = 0.0;
          ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
          v11 = World::GetMapName(&g_kWorld, (Name3 *)&v20);
          *(_DWORD *)acMapName = *(_DWORD *)&v11->n3_name[0];
          *(_DWORD *)&acMapName[4] = *(_DWORD *)&v11->n3_name[4];
          v12 = *(_DWORD *)&v11->n3_name[8];
          v13 = *((_DWORD *)v7 + 2);
          *(_DWORD *)acDestMapName = *((_DWORD *)v7 + 1);
          *(_DWORD *)&acMapName[8] = v12;
          v14 = *((_DWORD *)v7 + 3);
          *(_DWORD *)&acDestMapName[4] = v13;
          acMapName[12] = 0;
          *(_DWORD *)&acDestMapName[8] = v14;
          acDestMapName[12] = 0;
          v15 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          v16 = (GTInformWin *)v15[33].m_kMsgQ.m_uiHead;
          if ( v16 )
          {
            GTInformWin::Clear((GTInformWin *)v15[33].m_kMsgQ.m_uiHead);
            if ( IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(
                   HIWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][1]),
                   1) )
            {
              *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxYellowColor;
              *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
              v18 = TextData2::Get(0x9F9CD2DCu);
              v19 = fs(v18);
              GTInformWin::AddText(v16, v19, COERCE_D3DXCOLOR(v17.r), 0, 1000000.0);
            }
          }
          MapNavigator::FindPathAway(pkNavigater, &kPos, &kDest, acMapName, acDestMapName, *((_WORD *)v7 + 1));
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;

//----- (00554EF0) --------------------------------------------------------
void __thiscall MiniMapWin::OnZoomIn(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1

  v1 = this;
  if ( this->m_eMode != 1 )
  {
    this->m_eMode = 1;
    MiniMapWin::SetZoomModeTextureUVs(this);
    MiniMapWin::SetZoomButStateByMode(v1);
  }
}

//----- (00554F20) --------------------------------------------------------
void __thiscall MiniMapWin::OnZoomOut(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1

  v1 = this;
  if ( this->m_eMode )
  {
    this->m_eMode = 0;
    MiniMapWin::SetZoomModeTextureUVs(this);
    MiniMapWin::SetZoomButStateByMode(v1);
  }
}

//----- (00554F50) --------------------------------------------------------
void __thiscall MiniMapWin::OnAllMap(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  Name3 *v2; // eax@1
  MapViewInfo *v3; // eax@1
  Name3 result; // [sp+4h] [bp-Ch]@1

  v1 = this;
  v2 = World::GetMapName(&g_kWorld, &result);
  v3 = MapViewInfoTab::GetByMapName(v2);
  if ( v1->m_pkFullMapWin && v3 && v3->MinimapView )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkFullMapWin->baseclass_0.baseclass_0.baseclass_0);
  FullMapWin::ResetView(v1->m_pkFullMapWin, 0);
  FullMapWin::AddQuestHelper(v1->m_pkFullMapWin);
}

//----- (00554FB0) --------------------------------------------------------
void __thiscall MiniMapWin::ClearWithOutMainChar(MiniMapWin *this)
{
  MiniMapWin *v1; // ebx@1
  NiTListItem<NpcMarkWin *> *v2; // esi@1
  PgWin *v3; // eax@2
  PgWin *v4; // edi@4
  NiTListItem<NpcMarkWin *> *v5; // esi@8
  NiTListItem<NpcMarkWin *> *v6; // ST04_4@9
  NiPointer<PgWin> result; // [sp+Ch] [bp-4h]@3

  v1 = this;
  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = (PgWin *)v2->m_element;
    v2 = v2->m_pkNext;
    if ( v3 )
    {
      PgWin::DetachChildWin(&v1->m_pkClientWin->baseclass_0, &result, v3);
      if ( result.m_pObject )
      {
        v4 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v4 )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
      }
    }
  }
  v5 = v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5;
    v5 = v5->m_pkNext;
    v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *)&v1->m_kNpcList,
      v6);
  }
  *(_DWORD *)&v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  FullMapWin::ClearWithOutMainChar(v1->m_pkFullMapWin);
}

//----- (00555050) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveNPC(MiniMapWin *this, unsigned __int16 handle)
{
  unsigned __int16 v2; // si@1
  MiniMapWin *v3; // edi@1
  NiTListItem<NpcMarkWin *> *v4; // eax@2
  NpcMarkWin *v5; // ecx@3
  int v6; // esi@8
  NiTListItem<NpcMarkWin *> *kCurrIter; // [sp+8h] [bp-4h]@3

  v2 = handle;
  v3 = this;
  FullMapWin::RemoveNPC(this->m_pkFullMapWin, handle);
  if ( CharMgr::GetChar(&g_kCharMgr, v2) )
  {
    v4 = v3->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v4 )
    {
      while ( 1 )
      {
        v5 = v4->m_element;
        kCurrIter = v4;
        v4 = v4->m_pkNext;
        if ( v5 )
        {
          if ( v5->m_kCharHandle == v2 )
            break;
        }
        if ( !v4 )
          return;
      }
      PgWin::DetachChildWin(&v3->m_pkClientWin->baseclass_0, (NiPointer<PgWin> *)&handle, &v5->baseclass_0.baseclass_0);
      if ( handle )
      {
        v6 = handle;
        if ( !InterlockedDecrement((volatile LONG *)(handle + 4)) )
        {
          if ( v6 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
        }
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kNpcList,
        (void **)&kCurrIter);
    }
  }
}

//----- (005550F0) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveParty(MiniMapWin *this, PartyMemberInfo *pkParty)
{
  PartyMemberInfo *v2; // edi@1
  MiniMapWin *v3; // esi@1
  NiTListItem<PartyMarkWin *> *v4; // eax@1
  PartyMarkWin *v5; // ecx@2
  PartyMemberInfo *v6; // edi@7
  NiTListItem<PartyMarkWin *> *kCurrIter; // [sp+8h] [bp-4h]@2

  v2 = pkParty;
  v3 = this;
  FullMapWin::RemoveParty(this->m_pkFullMapWin, pkParty);
  v4 = v3->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v4 )
  {
    while ( 1 )
    {
      v5 = v4->m_element;
      kCurrIter = v4;
      v4 = v4->m_pkNext;
      if ( v5 )
      {
        if ( v5->m_pkInfo == v2 )
          break;
      }
      if ( !v4 )
        return;
    }
    PgWin::DetachChildWin(&v3->m_pkClientWin->baseclass_0, (NiPointer<PgWin> *)&pkParty, &v5->baseclass_0.baseclass_0);
    if ( pkParty )
    {
      v6 = pkParty;
      if ( !InterlockedDecrement((volatile LONG *)&pkParty->m_kCharID.n5_name[4]) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))&v6->m_kCharID.n5_name[0])(v6, 1);
      }
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kPartyList,
      (void **)&kCurrIter);
  }
}

//----- (00555180) --------------------------------------------------------
void __thiscall MiniMapWin::ClearParty(MiniMapWin *this)
{
  MiniMapWin *v1; // ebx@1
  NiTListItem<PartyMarkWin *> *v2; // edx@1
  NiTListItem<PartyMarkWin *> *v3; // eax@4
  NiTListItem<PartyMarkWin *> *v4; // ecx@4
  PgWin *v5; // edi@7
  PgWin *v6; // edi@9
  NiPointer<PgWin> result; // [sp+4h] [bp-4h]@8

  v1 = this;
  FullMapWin::ClearParty(this->m_pkFullMapWin);
  v2 = 0;
  if ( *(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    while ( 1 )
    {
      v3 = v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v4 = v3->m_pkNext;
      v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
      if ( v4 == v2 )
        v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v2;
      else
        v4->m_pkPrev = v2;
      v5 = (PgWin *)v3->m_element;
      v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *)&v1->m_kPartyList,
        v3);
      --*(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v5 )
      {
        PgWin::DetachChildWin(&v1->m_pkClientWin->baseclass_0, &result, v5);
        if ( result.m_pObject )
        {
          v6 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v6 )
              v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
          }
        }
      }
      if ( !*(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
        break;
      v2 = 0;
    }
  }
}

//----- (00555230) --------------------------------------------------------
void __thiscall MiniMapWin::OpenAllMap(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1

  v1 = this;
  if ( this->m_pkFullMapWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkFullMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkFullMapWin->baseclass_0.baseclass_0.baseclass_0);
    else
      MiniMapWin::OnAllMap(v1);
  }
}

//----- (00555270) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveRaidMember(MiniMapWin *this, RaidMemberInfo *pkRaid)
{
  RaidMemberInfo *v2; // esi@1
  MiniMapWin *v3; // edi@1
  NiTListItem<RaidMarkWin *> *v4; // ecx@2
  RaidMarkWin *v5; // edx@3
  RaidMemberInfo *v6; // eax@4
  RaidMemberInfo *v7; // esi@13
  NiTListItem<RaidMarkWin *> *kCurrIter; // [sp+8h] [bp-4h]@3

  v2 = pkRaid;
  v3 = this;
  if ( pkRaid )
  {
    FullMapWin::RemoveRaidMember(this->m_pkFullMapWin, pkRaid);
    v4 = v3->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v4 )
    {
      while ( 1 )
      {
        v5 = v4->m_element;
        kCurrIter = v4;
        v4 = v4->m_pkNext;
        if ( v5 )
        {
          v6 = v5->m_pkInfo;
          if ( v6 )
          {
            if ( *(_DWORD *)&v6->m_kCharID.n5_name[0] == *(_DWORD *)&v2->m_kCharID.n5_name[0]
              && *(_DWORD *)&v6->m_kCharID.n5_name[4] == *(_DWORD *)&v2->m_kCharID.n5_name[4]
              && *(_DWORD *)&v6->m_kCharID.n5_name[8] == *(_DWORD *)&v2->m_kCharID.n5_name[8]
              && *(_DWORD *)&v6->m_kCharID.n5_name[12] == *(_DWORD *)&v2->m_kCharID.n5_name[12]
              && *(_DWORD *)&v6->m_kCharID.n5_name[16] == *(_DWORD *)&v2->m_kCharID.n5_name[16] )
              break;
          }
        }
        if ( !v4 )
          return;
      }
      PgWin::DetachChildWin(&v3->m_pkClientWin->baseclass_0, (NiPointer<PgWin> *)&pkRaid, &v5->baseclass_0.baseclass_0);
      if ( pkRaid )
      {
        v7 = pkRaid;
        if ( !InterlockedDecrement((volatile LONG *)&pkRaid->m_kCharID.n5_name[4]) )
        {
          if ( v7 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))&v7->m_kCharID.n5_name[0])(v7, 1);
        }
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kRaidList,
        (void **)&kCurrIter);
    }
  }
}

//----- (00555340) --------------------------------------------------------
void __thiscall MiniMapWin::ClearRaidMember(MiniMapWin *this)
{
  MiniMapWin *v1; // ebx@1
  NiTListItem<RaidMarkWin *> *v2; // edx@1
  NiTListItem<RaidMarkWin *> *v3; // eax@4
  NiTListItem<RaidMarkWin *> *v4; // ecx@4
  PgWin *v5; // edi@7
  PgWin *v6; // edi@9
  NiPointer<PgWin> result; // [sp+4h] [bp-4h]@8

  v1 = this;
  FullMapWin::ClearRaidMember(this->m_pkFullMapWin);
  v2 = 0;
  if ( *(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    while ( 1 )
    {
      v3 = v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v4 = v3->m_pkNext;
      v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
      if ( v4 == v2 )
        v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v2;
      else
        v4->m_pkPrev = v2;
      v5 = (PgWin *)v3->m_element;
      v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *> *)&v1->m_kRaidList,
        v3);
      --*(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v5 )
      {
        PgWin::DetachChildWin(&v1->m_pkClientWin->baseclass_0, &result, v5);
        if ( result.m_pObject )
        {
          v6 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v6 )
              v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
          }
        }
      }
      if ( !*(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
        break;
      v2 = 0;
    }
  }
}

//----- (005553F0) --------------------------------------------------------
void __thiscall MiniMapWin::ClearGTEnemyPos(MiniMapWin *this)
{
  MiniMapWin *v1; // ebx@1
  NiTListItem<GTIScanMarkWin *> *v2; // esi@1
  PgWin *v3; // ST04_4@2
  PgWin *v4; // ecx@2
  PgWin *v5; // edi@3
  NiTListItem<GTIScanMarkWin *> *kCurrIter; // [sp+8h] [bp-8h]@2
  NiPointer<PgWin> result; // [sp+Ch] [bp-4h]@2

  v1 = this;
  FullMapWin::ClearGTEnemyPos(this->m_pkFullMapWin);
  v2 = v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = (PgWin *)v2->m_element;
    v4 = (PgWin *)v1->m_pkClientWin;
    kCurrIter = v2;
    v2 = v2->m_pkNext;
    PgWin::DetachChildWin(v4, &result, v3);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v1->m_kEnemyList,
      (void **)&kCurrIter);
  }
}

//----- (00555470) --------------------------------------------------------
void __thiscall MiniMapWin::StartScanEffect(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  NiNode *v2; // edi@2
  float v3; // ST0C_4@2
  int v4; // eax@2
  float v5; // ST10_4@2

  v1 = this;
  if ( this->m_pkScanEffect )
  {
    this->m_pkScanEffect->m_bLoop = 1;
    v2 = this->m_pkScanEffect->m_spEffect.m_pObject;
    v3 = (double)(((int (*)(void))this->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)()
                - 86);
    v4 = ((int (*)(void))v1->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
    v2->baseclass_0.m_kLocal.m_Translate.x = v3;
    v5 = (double)(v4 - 18);
    v2->baseclass_0.m_kLocal.m_Translate.y = v5;
    v2->baseclass_0.m_kLocal.m_Translate.z = 0.0;
    SpEffect::Start(v1->m_pkScanEffect, &v1->m_pkMapNameTextWin->baseclass_0.baseclass_0);
  }
}

//----- (00555500) --------------------------------------------------------
void __thiscall MiniMapWin::AddKQAlarmInfo(MiniMapWin *this, MiniMapWin::sKQAlarmInfo *pkInfo)
{
  MiniMapWin *v2; // edi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v3; // eax@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v4; // ecx@1

  v2 = this;
  v3 = this->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *)&this->m_kKQAlarmInfos);
  v3->m_element = pkInfo;
  v3->m_pkNext = 0;
  v3->m_pkPrev = v2->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  v4 = v2->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  if ( v4 )
    v4->m_pkNext = v3;
  else
    v2->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3;
  v2->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v3;
  ++*(_DWORD *)&v2->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v2->m_bKQListChanged = 1;
}

//----- (00555560) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveKQAlarmInfo(MiniMapWin *this, unsigned int kHandle)
{
  MiniMapWin *v2; // esi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v3; // edi@1
  MiniMapWin::sKQAlarmInfo *v4; // ecx@4
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v5; // eax@4
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v6; // ecx@6
  int v7; // esi@6
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v8; // eax@7
  void (__thiscall *v9)(_DWORD, _DWORD); // edx@9
  int v10; // ecx@10
  int v11; // eax@11
  void (__thiscall *v12)(_DWORD, _DWORD); // edx@13
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v13; // ecx@14
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v14; // edx@14
  MiniMapWin *v15; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = this->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v15 = this;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      v5 = v3;
      v3 = v3->m_pkNext;
      if ( v4 && v4->m_kHandle == kHandle )
      {
        v6 = v2->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        v7 = (int)&v2->m_kKQAlarmInfos;
        if ( v5 == v6 )
        {
          v8 = v6->m_pkNext;
          *(_DWORD *)(v7 + 4) = v6->m_pkNext;
          if ( v8 )
          {
            v8->m_pkPrev = 0;
            (*(void (__thiscall **)(int, NiTListItem<MiniMapWin::sKQAlarmInfo *> *))(*(_DWORD *)v7 + 8))(v7, v6);
          }
          else
          {
            v9 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 8);
            *(_DWORD *)(v7 + 8) = 0;
            v9(v7, v6);
          }
        }
        else
        {
          v10 = *(_DWORD *)(v7 + 8);
          if ( v5 == (NiTListItem<MiniMapWin::sKQAlarmInfo *> *)v10 )
          {
            v11 = *(_DWORD *)(v10 + 4);
            *(_DWORD *)(v7 + 8) = v11;
            if ( v11 )
            {
              *(_DWORD *)v11 = 0;
              (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 8))(v7, v10);
            }
            else
            {
              v12 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 8);
              *(_DWORD *)(v7 + 4) = 0;
              v12(v7, v10);
            }
          }
          else
          {
            v13 = v5->m_pkPrev;
            v14 = v5->m_pkNext;
            if ( v13 )
              v13->m_pkNext = v14;
            if ( v14 )
              v14->m_pkPrev = v13;
            (*(void (__thiscall **)(int, NiTListItem<MiniMapWin::sKQAlarmInfo *> *))(*(_DWORD *)v7 + 8))(v7, v5);
          }
        }
        --*(_DWORD *)(v7 + 12);
      }
      if ( !v3 )
        break;
      v2 = v15;
    }
    v15->m_bKQListChanged = 1;
  }
  else
  {
    this->m_bKQListChanged = 1;
  }
}

//----- (00555650) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveMapMark(MiniMapWin *this, unsigned int nGroup)
{
  MiniMapWin *v2; // esi@1
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v3; // ebx@1
  PgWin *v4; // edi@1
  void *v5; // esi@3
  void *pkWin; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMapMarkMap;
  pkWin = 0;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kMapMarkMap,
    nGroup,
    (NiVBSet **)&pkWin);
  v4 = (PgWin *)pkWin;
  if ( pkWin )
  {
    PgWin::DetachChildWin(&v2->m_pkClientWin->baseclass_0, (NiPointer<PgWin> *)&pkWin, (PgWin *)pkWin);
    if ( pkWin )
    {
      v5 = pkWin;
      if ( !InterlockedDecrement((volatile LONG *)pkWin + 1) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v4);
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::RemoveAt(v3, nGroup);
  }
}

//----- (005556D0) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveAllMapMark(MiniMapWin *this)
{
  MiniMapWin *v1; // ebx@1
  FullMapWin *v2; // ecx@1
  unsigned int v3; // ecx@3
  unsigned int v4; // eax@3
  NiTMapItem<unsigned int,MapMarkWin *> **v5; // edx@4
  NiTMapItem<unsigned int,MapMarkWin *> *v6; // eax@7
  NiTMapItem<unsigned int,MapMarkWin *> *v7; // esi@8
  PgWin *v8; // edi@9
  int v9; // eax@12
  unsigned int v10; // edx@12
  int v11; // eax@12
  int v12; // ecx@13
  PgWin *v13; // edi@18
  PgWin *pkWin; // [sp+8h] [bp-Ch]@9
  NiPointer<PgWin> result; // [sp+Ch] [bp-8h]@17

  v1 = this;
  v2 = this->m_pkFullMapWin;
  if ( v2 )
    FullMapWin::RemoveAllMapMark(v2);
  v3 = v1->m_kMapMarkMap.baseclass_0.m_uiHashSize;
  v4 = 0;
  if ( v3 )
  {
    v5 = v1->m_kMapMarkMap.baseclass_0.m_ppkHashTable;
    while ( !*v5 )
    {
      ++v4;
      ++v5;
      if ( v4 >= v3 )
        goto LABEL_7;
    }
    v6 = v1->m_kMapMarkMap.baseclass_0.m_ppkHashTable[v4];
  }
  else
  {
LABEL_7:
    v6 = 0;
  }
  v7 = v6;
  while ( v7 )
  {
    v8 = (PgWin *)v7->m_val;
    pkWin = (PgWin *)v7->m_val;
    if ( v7->m_pkNext )
    {
      v7 = v7->m_pkNext;
    }
    else
    {
      v9 = v1->m_kMapMarkMap.baseclass_0.vfptr->KeyToHashIndex(
             (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *> *)&v1->m_kMapMarkMap,
             v7->m_key);
      v10 = v1->m_kMapMarkMap.baseclass_0.m_uiHashSize;
      v11 = v9 + 1;
      if ( v11 >= v10 )
      {
LABEL_16:
        v7 = 0;
      }
      else
      {
        v12 = (int)&v1->m_kMapMarkMap.baseclass_0.m_ppkHashTable[v11];
        while ( 1 )
        {
          v7 = *(NiTMapItem<unsigned int,MapMarkWin *> **)v12;
          if ( *(_DWORD *)v12 )
            break;
          ++v11;
          v12 += 4;
          if ( v11 >= v10 )
            goto LABEL_16;
        }
      }
    }
    PgWin::DetachChildWin(&v1->m_pkClientWin->baseclass_0, &result, v8);
    if ( result.m_pObject )
    {
      v13 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v13 )
          v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, pkWin);
  }
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMapMarkMap);
}

//----- (005557D0) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateMapMark(MiniMapWin *this)
{
  char *v1; // ebx@1
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@1
  int v4; // edx@2
  int v5; // eax@5
  int v6; // edi@6
  unsigned int v7; // eax@7
  int v8; // esi@7
  int v9; // eax@8
  unsigned int v10; // edx@8
  int v11; // eax@8
  int v12; // ecx@9
  int v13; // eax@18
  float v14; // edx@18
  float fYPos; // [sp+34h] [bp-10h]@17
  float fXPos; // [sp+38h] [bp-Ch]@17
  unsigned int nGroup; // [sp+3Ch] [bp-8h]@7
  MiniMapWin *thisa; // [sp+40h] [bp-4h]@1

  v1 = (char *)&this->m_kMapMarkMap;
  thisa = this;
  v2 = this->m_kMapMarkMap.baseclass_0.m_uiHashSize;
  v3 = 0;
  if ( v2 )
  {
    v4 = *((_DWORD *)v1 + 2);
    while ( !*(_DWORD *)v4 )
    {
      ++v3;
      v4 += 4;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    v5 = *(_DWORD *)(*((_DWORD *)v1 + 2) + 4 * v3);
  }
  else
  {
LABEL_5:
    v5 = 0;
  }
  v6 = v5;
  while ( v6 )
  {
    v7 = *(_DWORD *)(v6 + 4);
    v8 = *(_DWORD *)(v6 + 8);
    v6 = *(_DWORD *)v6;
    nGroup = v7;
    if ( !v6 )
    {
      v9 = (*(int (__thiscall **)(char *, unsigned int))(*(_DWORD *)v1 + 4))(v1, v7);
      v10 = *((_DWORD *)v1 + 1);
      v11 = v9 + 1;
      if ( v11 >= v10 )
      {
LABEL_12:
        v6 = 0;
      }
      else
      {
        v12 = *((_DWORD *)v1 + 2) + 4 * v11;
        while ( 1 )
        {
          v6 = *(_DWORD *)v12;
          if ( *(_DWORD *)v12 )
            break;
          ++v11;
          v12 += 4;
          if ( v11 >= v10 )
            goto LABEL_12;
        }
      }
    }
    if ( v8 )
    {
      if ( Timer::ms_fCurTime <= (double)*(float *)(v8 + 304) )
      {
        if ( MiniMapWin::GetWinPos(thisa, *(float *)(v8 + 292), *(float *)(v8 + 296), &fXPos, &fYPos) == 1 )
        {
          (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v8 + 256))(v8, 1);
          v13 = *(_DWORD *)(v8 + 96);
          v14 = fYPos;
          *(_DWORD *)(v8 + 88) = LODWORD(fXPos);
          *(_DWORD *)(v8 + 92) = LODWORD(v14);
          *(_DWORD *)(v8 + 96) = v13;
        }
        else
        {
          (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 256))(v8, 0);
        }
      }
      else
      {
        MiniMapWin::RemoveMapMark(thisa, nGroup);
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00555910) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveKQTeamMark(MiniMapWin *this, unsigned __int16 kCharHandle)
{
  MiniMapWin *v2; // esi@1
  FullMapWin *v3; // ecx@1
  NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *v4; // ebx@3
  PgWin *v5; // edi@3
  void *v6; // esi@5
  void *pkWin; // [sp+Ch] [bp-4h]@3

  v2 = this;
  v3 = this->m_pkFullMapWin;
  if ( v3 )
    FullMapWin::RemoveKQTeamMark(v3, kCharHandle);
  v4 = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *)&v2->m_KQTeamMarkWinMap;
  pkWin = 0;
  NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::GetAt(
    &v2->m_KQTeamMarkWinMap.baseclass_0,
    kCharHandle,
    (KQTeamMarkWin **)&pkWin);
  v5 = (PgWin *)pkWin;
  if ( pkWin )
  {
    PgWin::DetachChildWin(&v2->m_pkClientWin->baseclass_0, (NiPointer<PgWin> *)&pkWin, (PgWin *)pkWin);
    if ( pkWin )
    {
      v6 = pkWin;
      if ( !InterlockedDecrement((volatile LONG *)pkWin + 1) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v5);
    NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::RemoveAt(v4, kCharHandle);
  }
}

//----- (005559B0) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveAllKQTeamMark(MiniMapWin *this)
{
  MiniMapWin *v1; // ebx@1
  FullMapWin *v2; // ecx@1
  unsigned int v3; // ecx@3
  unsigned int v4; // eax@3
  NiTMapItem<unsigned short,KQTeamMarkWin *> **v5; // edx@4
  NiTMapItem<unsigned short,KQTeamMarkWin *> *v6; // eax@7
  NiTMapItem<unsigned short,KQTeamMarkWin *> *v7; // esi@8
  PgWin *v8; // edi@9
  int v9; // eax@12
  unsigned int v10; // edx@12
  int v11; // eax@12
  int v12; // ecx@13
  PgWin *v13; // edi@18
  PgWin *pkWin; // [sp+8h] [bp-Ch]@9
  NiPointer<PgWin> result; // [sp+Ch] [bp-8h]@17

  v1 = this;
  v2 = this->m_pkFullMapWin;
  if ( v2 )
    FullMapWin::RemoveAllKQTeamMark(v2);
  v3 = v1->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize;
  v4 = 0;
  if ( v3 )
  {
    v5 = v1->m_KQTeamMarkWinMap.baseclass_0.m_ppkHashTable;
    while ( !*v5 )
    {
      ++v4;
      ++v5;
      if ( v4 >= v3 )
        goto LABEL_7;
    }
    v6 = v1->m_KQTeamMarkWinMap.baseclass_0.m_ppkHashTable[v4];
  }
  else
  {
LABEL_7:
    v6 = 0;
  }
  v7 = v6;
  while ( v7 )
  {
    v8 = (PgWin *)v7->m_val;
    pkWin = (PgWin *)v7->m_val;
    if ( v7->m_pkNext )
    {
      v7 = v7->m_pkNext;
    }
    else
    {
      v9 = v1->m_KQTeamMarkWinMap.baseclass_0.vfptr->KeyToHashIndex(
             (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *> *)&v1->m_KQTeamMarkWinMap,
             v7->m_key);
      v10 = v1->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize;
      v11 = v9 + 1;
      if ( v11 >= v10 )
      {
LABEL_16:
        v7 = 0;
      }
      else
      {
        v12 = (int)&v1->m_KQTeamMarkWinMap.baseclass_0.m_ppkHashTable[v11];
        while ( 1 )
        {
          v7 = *(NiTMapItem<unsigned short,KQTeamMarkWin *> **)v12;
          if ( *(_DWORD *)v12 )
            break;
          ++v11;
          v12 += 4;
          if ( v11 >= v10 )
            goto LABEL_16;
        }
      }
    }
    PgWin::DetachChildWin(&v1->m_pkClientWin->baseclass_0, &result, v8);
    if ( result.m_pObject )
    {
      v13 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v13 )
          v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, pkWin);
  }
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_KQTeamMarkWinMap);
}

//----- (00555AB0) --------------------------------------------------------
void __thiscall MiniMapWin::RemoveInDunEffect(MiniMapWin *this)
{
  char *v1; // ebx@1
  int v2; // esi@2
  int v3; // edi@3
  signed int v4; // [sp+4h] [bp-10h]@1

  v1 = (char *)this->m_apkEffect;
  v4 = 3;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      NsEffect::_NsEffect((NsEffect *)(v2 + 28));
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v2 + 4));
      v3 = *(_DWORD *)v2;
      if ( *(_DWORD *)v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      operator delete((void *)v2);
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v4;
  }
  while ( v4 );
}

//----- (00555B60) --------------------------------------------------------
void __thiscall MiniMapWin::ViewInDunLevelFlag(MiniMapWin *this, ID_LEVEL_TYPE eLevelType)
{
  MiniMapWin *v2; // edi@1
  SpEffect *v3; // ecx@3
  char *v4; // eax@6
  char *v5; // ecx@6
  char v6; // dl@7
  unsigned int v7; // eax@8
  const void *v8; // esi@8
  void *v9; // edi@8
  char v10; // cl@9

  v2 = this;
  if ( (unsigned int)eLevelType <= 2 && this->m_pkHeroModeFlag )
  {
    v3 = this->m_apkEffect[eLevelType];
    if ( v3 )
      SpEffect::Start(v3, v2->m_pAttachEffect.m_pObject);
    v2->m_eInDunLevel = eLevelType;
    if ( eLevelType == 2 )
    {
      ((void (__stdcall *)(signed int))v2->m_pkHeroModeFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_pkHeroModeFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      v4 = TextData3::Get(0x4026F785u);
      v5 = v4;
      do
        v6 = *v4++;
      while ( v6 );
      v7 = v4 - v5;
      v8 = v5;
      v9 = (char *)&v2->m_pAttachEffect.m_pObject + 3;
      do
      {
        v10 = *((_BYTE *)v9 + 1);
        v9 = (char *)v9 + 1;
      }
      while ( v10 );
      memcpy(v9, v8, v7);
    }
  }
}

//----- (00555C00) --------------------------------------------------------
void __thiscall MiniMapWin::NotViewInDunLevelFlag(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  ID_LEVEL_TYPE v2; // eax@1
  Name3 *v3; // eax@6
  MapInfo *v4; // ebx@6
  Name3 result; // [sp+4h] [bp-Ch]@6

  v1 = this;
  v2 = this->m_eInDunLevel;
  if ( (signed int)v2 < 3 && (signed int)v2 >= 0 && this->m_pkHeroModeFlag )
  {
    if ( this->m_apkEffect[v2] )
      SpEffect::End(this->m_apkEffect[v2], this->m_pAttachEffect.m_pObject);
    v3 = World::GetMapName(&g_kWorld, &result);
    v4 = MapInfoTab::GetByMapName(v3);
    if ( v4 )
    {
      memset(v1->m_MapName, 0, 0x80u);
      strncpy(v1->m_MapName, v4->Name, 0x20u);
    }
    ((void (__stdcall *)(_DWORD))v1->m_pkHeroModeFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkHeroModeFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
}

//----- (00555CC0) --------------------------------------------------------
void __thiscall QuestHelperMarkWin::_QuestHelperMarkWin(QuestHelperMarkWin *this)
{
  QuestHelperMarkWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestHelperMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestHelperMarkWin::_vftable_;
  QuestHelperMarkWin::OnClose(this);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&v1->baseclass_0.baseclass_0);
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);
// 9A0EAC: using guessed type int (__stdcall *QuestHelperMarkWin___vftable_)(int uiFlags);
// 9A0ECC: using guessed type int (__thiscall *QuestHelperMarkWin___vftable_)(void *p, char);

//----- (00555D40) --------------------------------------------------------
void __thiscall MiniMapWin::_MiniMapWin(MiniMapWin *this)
{
  MiniMapWin *v1; // edi@1
  NiTListItem<NpcMarkWin *> *v2; // esi@1
  NiTListItem<NpcMarkWin *> *v3; // eax@1
  NiTListItem<NpcMarkWin *> *v4; // ST0C_4@2
  SpEffect *v5; // esi@4
  NiNode *v6; // ebx@5
  NiNode *v7; // esi@10
  ClientWin *v8; // esi@14
  PgWinSpr *v9; // esi@18
  int v10; // esi@22
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v11; // ebx@22
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v12; // eax@22
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v13; // ST0C_4@23
  int v14; // esi@25
  NiTListItem<GTIScanMarkWin *> *v15; // ebx@25
  NiTListItem<GTIScanMarkWin *> *v16; // ST0C_4@26
  PgSprData *v17; // esi@27
  PgSprData *v18; // esi@31
  int v19; // esi@35
  NiTListItem<PartyMarkWin *> *v20; // ebx@35
  NiTListItem<PartyMarkWin *> *v21; // ST0C_4@36
  NiTListItem<NpcMarkWin *> *v22; // eax@37
  int v23; // esi@37
  NiTListItem<NpcMarkWin *> *v24; // ebx@37
  NiTListItem<NpcMarkWin *> *v25; // ST0C_4@38
  int v26; // esi@40
  NiTListItem<RaidMarkWin *> *v27; // ebx@40
  NiTListItem<RaidMarkWin *> *v28; // ST0C_4@41
  PgSprData *v29; // esi@42
  PgSprData *v30; // esi@46
  PgSprData *v31; // esi@50
  PgSprData *v32; // esi@54
  PgSprData *v33; // esi@58
  PgWinBut *v34; // esi@62
  PgWinBut *v35; // esi@66
  PgWinBut *v36; // esi@70

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapWin::_vftable_;
  v2 = this->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v3 = 0;
  if ( v2 )
  {
    do
    {
      v4 = v2;
      v2 = v2->m_pkNext;
      v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *> *)&v1->m_kNpcList,
        v4);
    }
    while ( v2 );
    v3 = 0;
  }
  *(_DWORD *)&v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v3;
  v5 = v1->m_pkScanEffect;
  if ( (NiTListItem<NpcMarkWin *> *)v5 != v3 )
  {
    NsEffect::_NsEffect(&v5->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v5->m_kMarkCheck);
    v6 = v5->m_spEffect.m_pObject;
    if ( v5->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    operator delete(v5);
  }
  MiniMapWin::RemoveAllMapMark(v1);
  MiniMapWin::RemoveAllKQTeamMark(v1);
  MiniMapWin::RemoveInDunEffect(v1);
  v7 = v1->m_pAttachEffect.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spSideWin.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  v1->m_KQTeamMarkWinMap.baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMap<unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_KQTeamMarkWinMap);
  v1->m_KQTeamMarkWinMap.baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_KQTeamMarkWinMap);
  operator delete__(v1->m_KQTeamMarkWinMap.baseclass_0.m_ppkHashTable);
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMap<unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMapMarkMap);
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMapMarkMap);
  operator delete__(v1->m_kMapMarkMap.baseclass_0.m_ppkHashTable);
  v9 = v1->m_spNewKQuest.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  v10 = (int)&v1->m_kKQAlarmInfos;
  v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&PgTList<MiniMapWin::sKQAlarmInfo__>::_vftable_;
  v11 = v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v12 = 0;
  if ( v11 )
  {
    do
    {
      v13 = v11;
      v11 = v11->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v10 + 8))(&v1->m_kKQAlarmInfos, v13);
    }
    while ( v11 );
    v12 = 0;
  }
  *(_DWORD *)&v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
  v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v12;
  v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v12;
  *(_DWORD *)v10 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
  v14 = (int)&v1->m_kEnemyList;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&PgTList<GTIScanMarkWin__>::_vftable_;
  v15 = v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v15 )
  {
    v16 = v15;
    v15 = v15->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v14 + 8))(&v1->m_kEnemyList, v16);
  }
  *(_DWORD *)&v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v14 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GTIScanMarkWin__>::_vftable_;
  v17 = v1->m_spBluePos.m_pObject;
  if ( v17 && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.m_uiRefCount) && v17 )
    v17->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
  v18 = v1->m_spRedPos.m_pObject;
  if ( v18 && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.m_uiRefCount) && v18 )
    v18->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
  v19 = (int)&v1->m_kPartyList;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&PgTList<PartyMarkWin__>::_vftable_;
  v20 = v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v20 )
  {
    v21 = v20;
    v20 = v20->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v19 + 8))(&v1->m_kPartyList, v21);
  }
  v22 = 0;
  *(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v19 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PartyMarkWin__>::_vftable_;
  v23 = (int)&v1->m_kNpcList;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&PgTList<NpcMarkWin__>::_vftable_;
  v24 = v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v24 )
  {
    do
    {
      v25 = v24;
      v24 = v24->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v23 + 8))(&v1->m_kNpcList, v25);
    }
    while ( v24 );
    v22 = 0;
  }
  *(_DWORD *)&v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v22;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v22;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v22;
  *(_DWORD *)v23 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NpcMarkWin__>::_vftable_;
  v26 = (int)&v1->m_kRaidList;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&PgTList<RaidMarkWin__>::_vftable_;
  v27 = v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v27 )
  {
    v28 = v27;
    v27 = v27->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v26 + 8))(&v1->m_kRaidList, v28);
  }
  *(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v26 = &NiTListBase<NiTPointerAllocator<unsigned_int>_RaidMarkWin__>::_vftable_;
  v29 = v1->m_spNpcSprData.m_pObject;
  if ( v29 && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.m_uiRefCount) && v29 )
    v29->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
  v30 = v1->m_spPartySprData.m_pObject;
  if ( v30 && !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.m_uiRefCount) && v30 )
    v30->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
  v31 = v1->m_spLinkDirSprData.m_pObject;
  if ( v31 && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.m_uiRefCount) && v31 )
    v31->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
  v32 = v1->m_spLinkSprData.m_pObject;
  if ( v32 && !InterlockedDecrement((volatile LONG *)&v32->baseclass_0.m_uiRefCount) && v32 )
    v32->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
  v33 = v1->m_spMainCharSprData.m_pObject;
  if ( v33 && !InterlockedDecrement((volatile LONG *)&v33->baseclass_0.m_uiRefCount) && v33 )
    v33->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_spSideBut,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v34 = v1->m_spAllMapBut.m_pObject;
  if ( v34
    && !InterlockedDecrement((volatile LONG *)&v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v34 )
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v34,
      1u);
  v35 = v1->m_spZoomOutBut.m_pObject;
  if ( v35
    && !InterlockedDecrement((volatile LONG *)&v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v35 )
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v35,
      1u);
  v36 = v1->m_spZoomInBut.m_pObject;
  if ( v36
    && !InterlockedDecrement((volatile LONG *)&v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v36 )
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v36,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 996224: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__RaidMarkWin _____vftable_)(void *p, char);
// 996234: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NpcMarkWin _____vftable_)(void *p, char);
// 996254: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PartyMarkWin _____vftable_)(void *p, char);
// 996264: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GTIScanMarkWin _____vftable_)(void *p, char);
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 99637C: using guessed type int (__thiscall *PgTList_NpcMarkWin _____vftable_)(void *p, char);
// 99638C: using guessed type int (__thiscall *NiTMap_unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 9963AC: using guessed type int (__thiscall *NiTMap_unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 9963FC: using guessed type int (__thiscall *PgTList_RaidMarkWin _____vftable_)(void *p, char);
// 99640C: using guessed type int (__thiscall *PgTList_PartyMarkWin _____vftable_)(void *p, char);
// 99641C: using guessed type int (__thiscall *PgTList_GTIScanMarkWin _____vftable_)(void *p, char);
// 9A0E8C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);
// 9A1470: using guessed type int (__thiscall *PgTList_MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);
// 9A1480: using guessed type int (__stdcall *MiniMapWin___vftable_)(int uiFlags);
// 9A149C: using guessed type int (__thiscall *MiniMapWin___vftable_)(void *p, char);

//----- (00556200) --------------------------------------------------------
void __thiscall MiniMapWin::SetMapZoomFlag(MiniMapWin *this, bool bZoomEnable)
{
  MiniMapWin *v2; // esi@1

  v2 = this;
  this->m_bZoomEnableFlag = bZoomEnable;
  if ( bZoomEnable )
  {
    MiniMapWin::SetZoomButStateByMode(this);
  }
  else
  {
    if ( this->m_eMode != 1 )
    {
      this->m_eMode = 1;
      MiniMapWin::SetZoomModeTextureUVs(this);
      MiniMapWin::SetZoomButStateByMode(v2);
    }
    ((void (__stdcall *)(_DWORD))v2->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spZoomInBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_spZoomInBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00556290) --------------------------------------------------------
void __thiscall MiniMapWin::OnCommand(MiniMapWin *this, unsigned int wParam, int lParam)
{
  MiniMapWin *v3; // edi@1
  char *v4; // eax@8
  MsgBox *v5; // eax@8
  signed int v6; // esi@11
  PgFrameWork *v7; // eax@14
  SkillWin *v8; // esi@14

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      MiniMapWin::OnZoomIn(this);
      break;
    case 1u:
      MiniMapWin::OnZoomOut(this);
      break;
    case 5u:
      GameFrameWork::OpenKDQuestWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 1);
      break;
    case 4u:
      MiniMapWin::OnAllMap(this);
      break;
    case 6u:
      GameFrameWork::ActivateCommunityWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 8u:
      GameFrameWork::ActivateRaidWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 7u:
      v4 = TextData2::Get(0x2B6E9B93u);
      v5 = MsgBox::Modeless(MSGBOX_OKCANCEL, v4);
      if ( v3 )
        ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      else
        ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(0);
      break;
    case 9u:
      v6 = 29100;
      do
      {
        if ( Skill::IsLearnProdSkill(v6) )
          break;
        ++v6;
      }
      while ( v6 < 29105 );
      v7 = v3->baseclass_0.m_pkFrameWork;
      v8 = (SkillWin *)v7[20].baseclass_0.m_pkMsgHooker;
      if ( v8 )
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v7[20].baseclass_0.m_pkMsgHooker);
        SkillWin::SelectByPageType(v8, 3u);
      }
      break;
    default:
      return;
  }
}

//----- (005563B0) --------------------------------------------------------
void __thiscall MiniMapWin::UpdateMeWin(MiniMapWin *this, float fCurTime)
{
  MiniMapWin *v2; // esi@1
  ID_LEVEL_TYPE v3; // eax@1
  SpEffect *v4; // eax@3
  SpEffect *v5; // ecx@8
  NiTListItem<NpcMarkWin *> *v6; // esi@10
  NpcMarkWin *v7; // ecx@11
  PgFrameWork *v8; // eax@13

  v2 = this;
  v3 = this->m_eInDunLevel;
  if ( v3 != 3 )
  {
    if ( this->m_apkEffect[v3] )
    {
      v4 = this->m_apkEffect[v3];
      if ( v4->m_bLive )
        SpEffect::Update(v4, fCurTime);
    }
  }
  ((void (__stdcall *)(_DWORD))v2->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v2->m_MapName);
  if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
    MiniMapWin::UpdateRaidPos(v2);
  else
    MiniMapWin::UpdatePartyPos(v2);
  MiniMapWin::UpdateNPCPos(v2);
  MiniMapWin::UpdateMainCharPos(v2);
  MiniMapWin::UpdateMainCharDir(v2);
  MiniMapWin::UpdateGTEnemyPos(v2);
  v5 = v2->m_pkScanEffect;
  if ( v5 )
    SpEffect::Update(v5, fCurTime);
  MiniMapWin::UpdateKQAlarm(v2);
  MiniMapWin::UpdateMapMark(v2);
  MiniMapWin::UpdateKQTeamMark(v2);
  v6 = v2->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v6 )
  {
    v7 = v6->m_element;
    v6 = v6->m_pkNext;
    if ( v7
      && (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
    {
      v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v8 )
        GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v8, BIL_MAP_3);
    }
  }
}

//----- (005564C0) --------------------------------------------------------
void __thiscall MiniMapWin::MiniMapWin(MiniMapWin *this)
{
  MiniMapWin *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ecx@1
  void *v4; // eax@1
  unsigned int v5; // ST08_4@1
  PgWinSpr *v6; // edi@1
  NiNode *v7; // edi@6

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapWin::_vftable_;
  v1->m_spZoomInBut.m_pObject = 0;
  v1->m_spZoomOutBut.m_pObject = 0;
  v1->m_spAllMapBut.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spSideBut,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spMainCharSprData.m_pObject = 0;
  v1->m_spLinkSprData.m_pObject = 0;
  v1->m_spLinkDirSprData.m_pObject = 0;
  v1->m_spPartySprData.m_pObject = 0;
  v1->m_spNpcSprData.m_pObject = 0;
  *(_DWORD *)&v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kRaidList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,RaidMarkWin *>Vtbl *)&PgTList<RaidMarkWin__>::_vftable_;
  *(_DWORD *)&v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NpcMarkWin *>Vtbl *)&PgTList<NpcMarkWin__>::_vftable_;
  *(_DWORD *)&v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *>Vtbl *)&PgTList<PartyMarkWin__>::_vftable_;
  v1->m_spRedPos.m_pObject = 0;
  v1->m_spBluePos.m_pObject = 0;
  *(_DWORD *)&v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *>Vtbl *)&PgTList<GTIScanMarkWin__>::_vftable_;
  *(_DWORD *)&v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kKQAlarmInfos.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&PgTList<MiniMapWin::sKQAlarmInfo__>::_vftable_;
  v1->m_spNewKQuest.m_pObject = 0;
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMapBase<DFALL<MapMarkWin__>_unsigned_int_MapMarkWin__>::_vftable_;
  v1->m_kMapMarkMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kMapMarkMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kMapMarkMap.baseclass_0.m_uiHashSize;
  v1->m_kMapMarkMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned int,MapMarkWin *> **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kMapMarkMap.baseclass_0.vfptr = (NiTMapBase<DFALL<MapMarkWin *>,unsigned int,MapMarkWin *>Vtbl *)&NiTMap<unsigned_int_MapMarkWin__>::_vftable_;
  v1->m_KQTeamMarkWinMap.baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::_vftable_;
  v1->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_KQTeamMarkWinMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4 = operator new__(0x94u);
  v5 = 4 * v1->m_KQTeamMarkWinMap.baseclass_0.m_uiHashSize;
  v1->m_KQTeamMarkWinMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned short,KQTeamMarkWin *> **)v4;
  memset((char *)v4, 0, v5);
  v1->m_KQTeamMarkWinMap.baseclass_0.vfptr = (NiTMapBase<DFALL<KQTeamMarkWin *>,unsigned short,KQTeamMarkWin *>Vtbl *)&NiTMap<unsigned_short_KQTeamMarkWin__>::_vftable_;
  v1->m_spSideWin.m_pObject = 0;
  v1->m_pAttachEffect.m_pObject = 0;
  v1->m_fMap2FullMapRate = 0.34179688;
  v1->m_eMode = 1;
  v1->m_pkFullMapWin = 0;
  v1->m_fTextureWidth = 512.0;
  v1->m_pkScanEffect = 0;
  v1->m_fTextureHeight = 512.0;
  v1->m_fMainCharWorldX = -1.0;
  v1->m_fMainCharWorldY = -1.0;
  v1->m_fMapCharX = -0.02;
  v1->m_fMapCharY = -0.02;
  v1->m_fShiftX = 0.0;
  v1->m_fShiftY = 0.0;
  v1->m_fAlphaBlendValue = 1.0;
  v6 = v1->m_spNewKQuest.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v1->m_spNewKQuest.m_pObject = 0;
  }
  *(_WORD *)&v1->m_bKQStarted = 0;
  v1->m_bKQListChanged = 0;
  v1->m_eInDunLevel = 1;
  v1->m_pkHeroModeFlag = 0;
  v7 = v1->m_pAttachEffect.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v1->m_pAttachEffect.m_pObject = 0;
  }
  v1->m_apkEffect[0] = 0;
  v1->m_apkEffect[1] = 0;
  v1->m_apkEffect[2] = 0;
  memset(v1->m_MapName, 0, 0x80u);
}
// 996274: using guessed type int (__thiscall *NiTMapBase_DFALL_MapMarkWin ___unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 996294: using guessed type int (__thiscall *NiTMapBase_DFALL_KQTeamMarkWin ___unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 99637C: using guessed type int (__thiscall *PgTList_NpcMarkWin _____vftable_)(void *p, char);
// 99638C: using guessed type int (__thiscall *NiTMap_unsigned int_MapMarkWin _____vftable_)(void *p, char);
// 9963AC: using guessed type int (__thiscall *NiTMap_unsigned short_KQTeamMarkWin _____vftable_)(void *p, char);
// 9963FC: using guessed type int (__thiscall *PgTList_RaidMarkWin _____vftable_)(void *p, char);
// 99640C: using guessed type int (__thiscall *PgTList_PartyMarkWin _____vftable_)(void *p, char);
// 99641C: using guessed type int (__thiscall *PgTList_GTIScanMarkWin _____vftable_)(void *p, char);
// 9A1470: using guessed type int (__thiscall *PgTList_MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);
// 9A1480: using guessed type int (__stdcall *MiniMapWin___vftable_)(int uiFlags);
// 9A149C: using guessed type int (__thiscall *MiniMapWin___vftable_)(void *p, char);

//----- (005567D0) --------------------------------------------------------
MainCharMarkWin *__cdecl MainCharMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  MainCharMarkWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x124u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &MainCharMarkWin::_vftable_;
    *((_DWORD *)v5 + 58) = &MainCharMarkWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *))(*(_DWORD *)v5 + 452))(
                          v5,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (MainCharMarkWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A0300: using guessed type int (__stdcall *MainCharMarkWin___vftable_)(int uiFlags);
// 9A031C: using guessed type int (__thiscall *MainCharMarkWin___vftable_)(void *p, char);

//----- (00556920) --------------------------------------------------------
NpcMarkWin *__cdecl NpcMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, QuestStateImage *pkImage, PgWin *pkParent, PgSprData *pkAutoSprData)
{
  void *v6; // eax@1
  int v7; // eax@2
  int v8; // esi@2
  PgWin *v9; // edi@8
  NpcMarkWin *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x150u);
  result.m_pObject = (PgWin *)v6;
  v12 = 0;
  if ( v6 )
  {
    NpcMarkWin::NpcMarkWin((NpcMarkWin *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, PgSprData *, QuestStateImage *, PgWin *, PgSprData *))(*(_DWORD *)v8 + 456))(
                          v8,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkImage,
                          pkParent,
                          pkAutoSprData) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = (NpcMarkWin *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}

//----- (00556A60) --------------------------------------------------------
PartyMarkWin *__cdecl PartyMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  PartyMarkWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x128u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &PartyMarkWin::_vftable_;
    *((_DWORD *)v5 + 58) = &PartyMarkWin::_vftable_;
    *((_DWORD *)v5 + 73) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *))(*(_DWORD *)v5 + 452))(
                          v5,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (PartyMarkWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A06D4: using guessed type int (__stdcall *PartyMarkWin___vftable_)(int uiFlags);
// 9A06F4: using guessed type int (__thiscall *PartyMarkWin___vftable_)(void *p, char);

//----- (00556BB0) --------------------------------------------------------
RaidMarkWin *__cdecl RaidMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  RaidMarkWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x128u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &RaidMarkWin::_vftable_;
    *((_DWORD *)v5 + 58) = &RaidMarkWin::_vftable_;
    *((_DWORD *)v5 + 73) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *))(*(_DWORD *)v5 + 452))(
                          v5,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (RaidMarkWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A08C0: using guessed type int (__stdcall *RaidMarkWin___vftable_)(int uiFlags);
// 9A08DC: using guessed type int (__thiscall *RaidMarkWin___vftable_)(void *p, char);

//----- (00556D00) --------------------------------------------------------
QuestHelperMarkWin *__cdecl QuestHelperMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, PgSprData *pkAutoSprData)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  QuestHelperMarkWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x13Cu);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWin::PgWin((PgWin *)v5);
    *(_DWORD *)v6 = &QuestHelperMarkWin::_vftable_;
    *((_DWORD *)v6 + 58) = &QuestHelperMarkWin::_vftable_;
    *((_DWORD *)v6 + 74) = 0;
    *((_WORD *)v6 + 150) = -1;
    *((_DWORD *)v6 + 73) = 0;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, PgSprData *))(*(_DWORD *)v6 + 456))(
                          v6,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          pkAutoSprData) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (QuestHelperMarkWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 9A0EAC: using guessed type int (__stdcall *QuestHelperMarkWin___vftable_)(int uiFlags);
// 9A0ECC: using guessed type int (__thiscall *QuestHelperMarkWin___vftable_)(void *p, char);

//----- (00556E70) --------------------------------------------------------
MobAreaMarkWin *__cdecl MobAreaMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  MobAreaMarkWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x134u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &MobAreaMarkWin::_vftable_;
    *((_DWORD *)v5 + 58) = &MobAreaMarkWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *))(*(_DWORD *)v5 + 452))(
                          v5,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (MobAreaMarkWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A109C: using guessed type int (__stdcall *MobAreaMarkWin___vftable_)(int uiFlags);
// 9A10BC: using guessed type int (__thiscall *MobAreaMarkWin___vftable_)(void *p, char);

//----- (00556FC0) --------------------------------------------------------
GTIScanMarkWin *__cdecl GTIScanMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  GTIScanMarkWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x12Cu);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &GTIScanMarkWin::_vftable_;
    *((_DWORD *)v5 + 58) = &GTIScanMarkWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *))(*(_DWORD *)v5 + 452))(
                          v5,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (GTIScanMarkWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A0AA8: using guessed type int (__stdcall *GTIScanMarkWin___vftable_)(int uiFlags);
// 9A0AC4: using guessed type int (__thiscall *GTIScanMarkWin___vftable_)(void *p, char);

//----- (00557110) --------------------------------------------------------
MapMarkWin *__cdecl MapMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  MapMarkWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x134u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &MapMarkWin::_vftable_;
    *((_DWORD *)v5 + 58) = &MapMarkWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *))(*(_DWORD *)v5 + 452))(
                          v5,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (MapMarkWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A1288: using guessed type int (__stdcall *MapMarkWin___vftable_)(int uiFlags);
// 9A12A4: using guessed type int (__thiscall *MapMarkWin___vftable_)(void *p, char);

//----- (00557260) --------------------------------------------------------
KQTeamMarkWin *__cdecl KQTeamMarkWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  KQTeamMarkWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x128u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    PgWin::PgWin((PgWin *)v4);
    *(_DWORD *)v5 = &KQTeamMarkWin::_vftable_;
    *((_DWORD *)v5 + 58) = &KQTeamMarkWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *))(*(_DWORD *)v5 + 452))(
                          v5,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (KQTeamMarkWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A0C90: using guessed type int (__stdcall *KQTeamMarkWin___vftable_)(int uiFlags);
// 9A0CAC: using guessed type int (__thiscall *KQTeamMarkWin___vftable_)(void *p, char);

//----- (005573B0) --------------------------------------------------------
MiniMapWin *__cdecl MiniMapWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MiniMapWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x324u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MiniMapWin::MiniMapWin((MiniMapWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MiniMapWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005574E0) --------------------------------------------------------
bool __thiscall MiniMapWin::CreateKoreaUI(MiniMapWin *this, PgFrameWork *pkFrameWork)
{
  MiniMapWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  bool result; // al@7
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgSprData *v10; // edi@11
  PgSprData *v11; // ebx@11
  PgSprData *v12; // eax@18
  PgSprData *v13; // edi@18
  PgSprData *v14; // ebx@18
  PgSprData *v15; // eax@25
  PgSprData *v16; // edi@25
  PgSprData *v17; // ebx@25
  PgSprData *v18; // eax@32
  PgSprData *v19; // edi@32
  PgSprData *v20; // ebx@32
  PgSprData *v21; // eax@39
  PgSprData *v22; // edi@39
  PgSprData *v23; // ebx@39
  PgSprData *v24; // eax@46
  NiNode *v25; // esi@47
  int v26; // edi@52
  int v27; // ebx@52
  NiAVObject *v28; // eax@52
  void *v29; // eax@52
  int v30; // eax@54
  NiSourceTexture *v31; // eax@55
  PgSprData *v32; // eax@57
  PgWinSpr *v33; // eax@57
  ClientWin *v34; // eax@57
  PgSprData *v35; // eax@57
  NiShader *v36; // eax@57
  MaskedWin *v37; // eax@57
  NiAVObject *v38; // eax@57
  NiProperty *v39; // eax@58
  PgSprData *v40; // eax@60
  PgWinSpr *v41; // eax@60
  NiSourceTexture *v42; // ST84_4@60
  NiNode *v43; // ecx@60
  PgSprData *v44; // eax@60
  double v45; // st7@61
  PgWin *v46; // ecx@61
  double v47; // st6@61
  PgSprData *v48; // eax@61
  NiD3DDefaultShader *v49; // eax@61
  NiNode *v50; // ST98_4@62
  char *v51; // eax@62
  PgSprData *v52; // eax@62
  PgWinBut *v53; // eax@63
  char *v54; // eax@63
  NiSourceTexture *v55; // ST84_4@63
  PgWinBut *v56; // eax@63
  char *v57; // eax@63
  NiSourceTexture *v58; // ST84_4@63
  PgWinBut *v59; // eax@63
  char *v60; // eax@63
  PgWinBut *v61; // eax@63
  char *v62; // eax@63
  PgSprData *v63; // eax@63
  PgWinSpr *v64; // eax@63
  PgWinBut *v65; // eax@63
  char *v66; // eax@63
  PgWinBut *v67; // eax@63
  char *v68; // eax@63
  PgWinBut *v69; // eax@63
  char *v70; // eax@63
  PgWin *v71; // ST80_4@63
  PgFont *v72; // eax@63
  PgWinAbbreviateText *v73; // eax@63
  PgSprData *v74; // eax@63
  PgWinSpr *v75; // eax@63
  void (__thiscall *v76)(IDirectMessenger *, IDirectMessenger *); // eax@63
  unsigned int v77; // edx@63
  unsigned int v78; // ST98_4@63
  PgFont *v79; // eax@63
  PgWinText *v80; // eax@63
  char *v81; // eax@63
  PgWinBut *v82; // eax@63
  PgSprData *v83; // eax@63
  PgSprData *v84; // eax@63
  char *v85; // eax@65
  void *v86; // edi@65
  NiObject *v87; // eax@66
  PgWin *v88; // ecx@68
  PgWin *v89; // ST84_4@68
  PgSprData *v90; // eax@68
  NiNode *v91; // esi@69
  NiTexturingProperty *v92; // esi@73
  PgWinSpr *v93; // eax@78
  char *v94; // eax@80
  PgWinSpr *v95; // eax@80
  char *v96; // eax@82
  char *v97; // eax@82
  void *v98; // edi@83
  NiObject *v99; // eax@84
  PgWinSpr *v100; // ecx@86
  int (*v101)(void); // eax@86
  signed int v102; // eax@86
  NiAVObject **v103; // ecx@86
  NiAVObject *v104; // ecx@87
  float v105; // ST80_4@87
  unsigned int uiWidth; // [sp+9Ch] [bp-2Ch]@60
  unsigned int uiHeight; // [sp+A0h] [bp-28h]@60
  NiPointer<NiTexturingProperty> spTexProp; // [sp+A4h] [bp-24h]@52
  NiPointer<NiNode> pkNiNodePtr; // [sp+A8h] [bp-20h]@63
  NiSourceTexture *pkTexture; // [sp+ACh] [bp-1Ch]@1
  int uiLeft; // [sp+B0h] [bp-18h]@11
  int uiTop; // [sp+B4h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+B8h] [bp-10h]@1
  int v114; // [sp+C4h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v114 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v114 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\Minimap.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrImg01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  v10 = v2->m_spMainCharSprData.m_pObject;
  v11 = v9;
  if ( v10 != v9 )
  {
    if ( v10 && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.m_uiRefCount) && v10 )
      v10->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v2->m_spMainCharSprData.m_pObject = v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.m_uiRefCount);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LinkImg", &uiLeft, &uiTop, pkTexture);
  v13 = v2->m_spLinkSprData.m_pObject;
  v14 = v12;
  if ( v13 != v12 )
  {
    if ( v13 && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.m_uiRefCount) && v13 )
      v13->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    v2->m_spLinkSprData.m_pObject = v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.m_uiRefCount);
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LinkDirImg", &uiLeft, &uiTop, pkTexture);
  v16 = v2->m_spLinkDirSprData.m_pObject;
  v17 = v15;
  if ( v16 != v15 )
  {
    if ( v16 && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.m_uiRefCount) && v16 )
      v16->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    v2->m_spLinkDirSprData.m_pObject = v17;
    if ( v17 )
      InterlockedIncrement((volatile LONG *)&v17->baseclass_0.m_uiRefCount);
  }
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ParImg", &uiLeft, &uiTop, pkTexture);
  v19 = v2->m_spPartySprData.m_pObject;
  v20 = v18;
  if ( v19 != v18 )
  {
    if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.m_uiRefCount) && v19 )
      v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    v2->m_spPartySprData.m_pObject = v20;
    if ( v20 )
      InterlockedIncrement((volatile LONG *)&v20->baseclass_0.m_uiRefCount);
  }
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCImg", &uiLeft, &uiTop, pkTexture);
  v22 = v2->m_spNpcSprData.m_pObject;
  v23 = v21;
  if ( v22 != v21 )
  {
    if ( v22 && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.m_uiRefCount) && v22 )
      v22->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
    v2->m_spNpcSprData.m_pObject = v23;
    if ( v23 )
      InterlockedIncrement((volatile LONG *)&v23->baseclass_0.m_uiRefCount);
  }
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, pkTexture);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v24, 0, pkFrameWork, "MiniMapWin", 0) )
  {
    v26 = uiLeft;
    v27 = uiTop;
    v28 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EventPanel");
    v29 = NiAVObject::GetProperty(v28, 8);
    spTexProp.m_pObject = (NiTexturingProperty *)v29;
    if ( v29 )
    {
      InterlockedIncrement((volatile LONG *)v29 + 1);
      v29 = spTexProp.m_pObject;
    }
    v30 = **((_DWORD **)v29 + 10);
    LOBYTE(v114) = 1;
    if ( !v30 || (v31 = *(NiSourceTexture **)(v30 + 4)) == 0 )
      goto LABEL_91;
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EventPanel", &uiLeft, &uiTop, v31);
    v33 = PgWinSpr::CreateWin(uiLeft - v26, uiTop - v27, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v33,
      0);
    v34 = ClientWin::CreateWin(0, 0, &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkClientWin = v34;
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v34,
      0);
    v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Map_Mask01", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v26, uiTop - v27, v35, &v2->m_pkClientWin->baseclass_0, 0, 0);
    v36 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Map_Mask");
    pkFrameWork = (PgFrameWork *)CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v36);
    PgSprData::Create(&spNode.m_pObject->baseclass_0, "Map_Mask", &uiLeft, &uiTop, pkTexture);
    v37 = MaskedWin::CreateWin_MaskShaderNoAlphaBlend(
            uiLeft - v26,
            uiTop - v27,
            (NiTriShape *)pkFrameWork,
            &v2->m_pkClientWin->baseclass_0);
    v2->m_pkMiniMapWin = v37;
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v37,
      0);
    v38 = (NiAVObject *)MaskedWin::GetTriShape(v2->m_pkMiniMapWin);
    if ( v38 )
    {
      v39 = NiAVObject::GetProperty(v38, 8);
      pkFrameWork = (PgFrameWork *)v39;
      if ( v39 )
      {
        NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v39, FILTER_BILERP);
        NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)pkFrameWork, WRAP_S_WRAP_T);
      }
    }
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Map_Mask", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, pkTexture);
    v41 = PgWinSpr::CreateWin(uiLeft - v26, uiTop - v27, v40, &v2->m_pkClientWin->baseclass_0, 0, 0);
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v41,
      0);
    v42 = pkTexture;
    v43 = spNode.m_pObject;
    v2->m_fViewLeft = (double)uiLeft;
    v2->m_fViewTop = (double)uiTop;
    v44 = PgSprData::Create(&v43->baseclass_0, "Map_Coordinate", &uiLeft, &uiTop, v42);
    if ( v44 )
    {
      *(float *)&pkFrameWork = (double)v44->m_akHitTester.m_pBase->m_pObject->m_uiWidth;
      v45 = *(float *)&pkFrameWork;
      v2->m_fViewWidth = *(float *)&pkFrameWork;
      pkFrameWork = (PgFrameWork *)v44->m_akHitTester.m_pBase->m_pObject->m_uiHeight;
      v46 = (PgWin *)v2->m_pkClientWin;
      *(float *)&pkFrameWork = (double)(unsigned int)pkFrameWork;
      v47 = *(float *)&pkFrameWork;
      v48 = v2->m_spMainCharSprData.m_pObject;
      v2->m_fViewHeight = *(float *)&pkFrameWork;
      v2->m_pkMainCharMarkWin = MainCharMarkWin::CreateWin(
                                  (signed int)(v45 * 0.5 + v2->m_fViewLeft),
                                  (signed int)(v47 * 0.5 + v2->m_fViewTop),
                                  v48,
                                  v46);
      v49 = (NiD3DDefaultShader *)ClientWin::CreateWin(0, 0, &v2->baseclass_0.baseclass_0.baseclass_0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spSideWin, v49);
      ((void (__stdcall *)(_DWORD))v2->m_spSideWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      *(float *)&pkFrameWork = 0.0;
      do
      {
        v50 = spNode.m_pObject;
        v51 = fs("Plane%02d");
        v52 = PgSprData::Create(&v50->baseclass_0, v51, &uiLeft, &uiTop, 0);
        PgWinSpr::CreateWin(uiLeft - v26, uiTop - v27, v52, &v2->m_spSideWin.m_pObject->baseclass_0, 0, 0);
        pkFrameWork = (PgFrameWork *)((char *)pkFrameWork + 1);
      }
      while ( (signed int)pkFrameWork < 4 );
      pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                     &spNode.m_pObject->baseclass_0,
                                     "MaxBtnNor",
                                     &uiLeft,
                                     &uiTop,
                                     pkTexture);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "MaxBtnClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "MaxBtnOver");
      v53 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spZoomInBut, (NiD3DDefaultShader *)v53);
      pkFrameWork = (PgFrameWork *)v2->m_spZoomInBut.m_pObject;
      v54 = TextData::Get(0xF9FE2744u);
      PgWin::SetToolTipWinText((PgWin *)pkFrameWork, v54);
      v55 = pkTexture;
      v2->m_spZoomInBut.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      pkFrameWork = (PgFrameWork *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "MinBtnNor", &uiLeft, &uiTop, v55);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "MinBtnClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "MinBtnOver");
      v56 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              1u,
              0,
              0);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_spZoomOutBut,
        (NiD3DDefaultShader *)v56);
      ((void (__stdcall *)(_DWORD))v2->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v2->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      pkFrameWork = (PgFrameWork *)v2->m_spZoomOutBut.m_pObject;
      v57 = TextData::Get(0xF9522E4Au);
      PgWin::SetToolTipWinText((PgWin *)pkFrameWork, v57);
      v58 = pkTexture;
      v2->m_spZoomOutBut.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                     &spNode.m_pObject->baseclass_0,
                                     "AllMapBtnNor",
                                     &uiLeft,
                                     &uiTop,
                                     v58);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "AllMapBtnClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "AllMapBtnOver");
      v59 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              4u,
              0,
              0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spAllMapBut, (NiD3DDefaultShader *)v59);
      pkFrameWork = (PgFrameWork *)v2->m_spAllMapBut.m_pObject;
      v60 = TextData::Get(0xF9FB2623u);
      PgWin::SetToolTipWinText((PgWin *)pkFrameWork, v60);
      v2->m_spAllMapBut.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                     &spNode.m_pObject->baseclass_0,
                                     "ScheduleBtnNor",
                                     &uiLeft,
                                     &uiTop,
                                     0);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ScheduleBtnClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ScheduleBtnOver");
      v61 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              5u,
              0,
              0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spSideBut, (NiD3DDefaultShader *)v61);
      pkFrameWork = (PgFrameWork *)v2->m_spSideBut[0].m_pObject;
      v62 = TextData::Get(0xF5FB2F3Fu);
      PgWin::SetToolTipWinText((PgWin *)pkFrameWork, v62);
      v2->m_spSideBut[0].m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v63 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NewKQuest", &uiLeft, &uiTop, pkTexture);
      v64 = PgWinSpr::CreateWin(uiLeft - v26, uiTop - v27, v63, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spNewKQuest, (NiD3DDefaultShader *)v64);
      ((void (__stdcall *)(_DWORD))v2->m_spNewKQuest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_spNewKQuest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                     &spNode.m_pObject->baseclass_0,
                                     "ExpeditionNor",
                                     &uiLeft,
                                     &uiTop,
                                     0);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ExpeditionClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ExpeditionOver");
      v65 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              8u,
              0,
              0);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_spSideBut[2],
        (NiD3DDefaultShader *)v65);
      pkFrameWork = (PgFrameWork *)v2->m_spSideBut[2].m_pObject;
      v66 = TextData2::Get(0xFDF7DB2Eu);
      PgWin::SetToolTipWinText((PgWin *)pkFrameWork, v66);
      v2->m_spSideBut[2].m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                     &spNode.m_pObject->baseclass_0,
                                     "PartyMatchingNor",
                                     &uiLeft,
                                     &uiTop,
                                     0);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "PartyMatchingClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "PartyMatchingOver");
      v67 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              6u,
              0,
              0);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_spSideBut[1],
        (NiD3DDefaultShader *)v67);
      pkFrameWork = (PgFrameWork *)v2->m_spSideBut[1].m_pObject;
      v68 = TextData::Get(0x5D9FE8F1u);
      PgWin::SetToolTipWinText((PgWin *)pkFrameWork, v68);
      v2->m_spSideBut[1].m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      pkFrameWork = (PgFrameWork *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "ProductNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ProductClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ProductOver");
      v69 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              9u,
              0,
              0);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_spSideBut[3],
        (NiD3DDefaultShader *)v69);
      pkFrameWork = (PgFrameWork *)v2->m_spSideBut[3].m_pObject;
      v70 = TextData::Get(0xE9E5F047u);
      PgWin::SetToolTipWinText((PgWin *)pkFrameWork, v70);
      v2->m_spSideBut[3].m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight);
      v71 = g_pkToolTipWin;
      v72 = Font::Get(0);
      v73 = PgWinAbbreviateText::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              uiWidth,
              uiHeight,
              v72,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0,
              1,
              v71,
              0xFFFFFFE2u);
      v2->m_pkMapNameTextWin = (PgWinText *)v73;
      v73->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v73,
        1u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_99FE89);
      ((void (__stdcall *)(_DWORD))v2->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(__int64 *))v2->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
      v74 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildQuitPanel", &uiLeft, &uiTop, pkTexture);
      pkFrameWork = (PgFrameWork *)v74;
      v75 = PgWinSpr::CreateWin(uiLeft - v26, uiTop - v27, v74, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v2->m_pkGTQuitPanel = v75;
      v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v75,
        0);
      v76 = pkFrameWork[1].baseclass_0.vfptr->SetMsgHooker;
      v77 = *((_DWORD *)v76 + 5);
      pkFrameWork = (PgFrameWork *)*((_DWORD *)v76 + 6);
      v78 = v77;
      v79 = Font::Get(MAIN_MENU);
      v80 = PgWinText::CreateWin(
              uiLeft - v26,
              uiTop - v27 + 1,
              v78,
              (unsigned int)pkFrameWork,
              v79,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkGTTQuitText = v80;
      v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v80,
        5u);
      pkFrameWork = (PgFrameWork *)&v2->m_pkGTTQuitText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v81 = TextData2::Get(0x9CB0FCF1u);
      ((void (__thiscall *)(PgWinText *, char *))pkFrameWork->baseclass_0.vfptr)(v2->m_pkGTTQuitText, v81);
      ((void (__stdcall *)(_DWORD))v2->m_pkGTTQuitText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkGTTQuitText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      pkFrameWork = (PgFrameWork *)PgSprData::Create(
                                     &spNode.m_pObject->baseclass_0,
                                     "ClsNor",
                                     &uiLeft,
                                     &uiTop,
                                     pkTexture);
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add((PgSprData *)pkFrameWork, &spNode.m_pObject->baseclass_0, "ClsOver");
      v82 = PgWinBut::CreateWin(
              uiLeft - v26,
              uiTop - v27,
              (PgSprData *)pkFrameWork,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              7u,
              0,
              0);
      v2->m_pkGTQuitBut = v82;
      v82->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v82,
        0);
      v2->m_eMode = 1;
      MiniMapWin::SetZoomButStateByMode(v2);
      v83 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForceRed", &uiLeft, &uiTop, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spRedPos, (NiD3DDefaultShader *)v83);
      v84 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ForceBlue", &uiLeft, &uiTop, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBluePos, (NiD3DDefaultShader *)v84);
      pkNiNodePtr.m_pObject = 0;
      LOBYTE(v114) = 2;
      if ( !Folder::m_bInit )
        Folder::Init();
      v85 = Folder::Merge(&Folder::m_acEffect, "Sta_GTI_Scan_UI.nif");
      PgUtil::LoadNodeNifFile(v85, &pkNiNodePtr, 0);
      v86 = operator new(0x44u);
      pkFrameWork = (PgFrameWork *)v86;
      LOBYTE(v114) = 3;
      if ( v86 )
      {
        v87 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
        SpEffect::SpEffect((SpEffect *)v86, (NiNode *)v87);
      }
      else
      {
        v87 = 0;
      }
      v88 = (PgWin *)v2->m_spSideWin.m_pObject;
      v2->m_pkScanEffect = (SpEffect *)v87;
      v89 = (PgWin *)v2->m_spSideBut[0].m_pObject;
      LOBYTE(v114) = 2;
      PgWin::AttachChildWin(v88, v89);
      PgWin::AttachChildWin(
        &v2->m_spSideWin.m_pObject->baseclass_0,
        &v2->m_spSideBut[1].m_pObject->baseclass_0.baseclass_0);
      PgWin::AttachChildWin(
        &v2->m_spSideWin.m_pObject->baseclass_0,
        &v2->m_spSideBut[2].m_pObject->baseclass_0.baseclass_0);
      PgWin::AttachChildWin(
        &v2->m_spSideWin.m_pObject->baseclass_0,
        &v2->m_spSideBut[3].m_pObject->baseclass_0.baseclass_0);
      PgWin::AttachChildWin(&v2->m_spSideWin.m_pObject->baseclass_0, &v2->m_spNewKQuest.m_pObject->baseclass_0);
      v90 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HardModeFlag", &uiLeft, &uiTop, 0);
      if ( !v90 )
      {
        v91 = pkNiNodePtr.m_pObject;
        LOBYTE(v114) = 1;
        if ( pkNiNodePtr.m_pObject
          && !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v91 )
          v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v91, 1u);
        v92 = spTexProp.m_pObject;
        LOBYTE(v114) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v92->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v92, 1u);
        v4 = spNode.m_pObject;
        v114 = -1;
        if ( !spNode.m_pObject
          || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          return 0;
        v5 = v4 == 0;
LABEL_5:
        if ( !v5 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        return 0;
      }
      v93 = PgWinSpr::CreateWin(uiLeft, uiTop, v90, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v2->m_pkHeroModeFlag = v93;
      if ( !v93 )
        goto LABEL_92;
      v93->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v94 = TextData3::Get(0xE705270Eu);
      PgWin::SetToolTipWinText(&v2->m_pkHeroModeFlag->baseclass_0, v94);
      ((void (__stdcall *)(signed int))v2->m_pkHeroModeFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v2->m_pkHeroModeFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      v95 = PgWinSpr::CreateWin(0, 0, 1u, 1u, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      pkFrameWork = (PgFrameWork *)v95;
      if ( v95 )
        InterlockedIncrement((volatile LONG *)&v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      LOBYTE(v114) = 4;
      NiPointer<NiActorManager>::operator_(
        (NiPointer<NiPixelData> *)&v2->m_pAttachEffect,
        (NiPointer<NiPixelData> *)&pkFrameWork);
      LOBYTE(v114) = 2;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFrameWork);
      ((void (__thiscall *)(MiniMapWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.30000001,
        0.5);
      v96 = Folder::Menu();
      v97 = Folder::Merge(v96, "Game\\HeroMode.nif");
      PgUtil::LoadNodeNifFile(v97, &pkNiNodePtr, 0);
      if ( !pkNiNodePtr.m_pObject )
      {
LABEL_92:
        LOBYTE(v114) = 1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNiNodePtr);
        LOBYTE(v114) = 0;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
        v114 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
        return 0;
      }
      v98 = operator new(0x44u);
      pkFrameWork = (PgFrameWork *)v98;
      LOBYTE(v114) = 5;
      if ( v98 )
      {
        v99 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
        SpEffect::SpEffect((SpEffect *)v98, (NiNode *)v99);
      }
      else
      {
        v99 = 0;
      }
      v100 = v2->m_pkHeroModeFlag;
      v2->m_apkEffect[2] = (SpEffect *)v99;
      v101 = (int (*)(void))v100->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
      LOBYTE(v114) = 2;
      v102 = v101();
      v103 = (NiAVObject **)v2->m_apkEffect[2];
      if ( v103 )
      {
        v104 = *v103;
        v105 = (double)uiTop;
        *(float *)&pkFrameWork = (double)(v102 / 2) + (double)uiLeft;
        NiAVObject::SetTranslate(v104, *(float *)&pkFrameWork, v105, 1000.0);
        v2->m_apkEffect[2]->m_bClamp = 1;
      }
      LOBYTE(v114) = 1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNiNodePtr);
      LOBYTE(v114) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v114 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
LABEL_91:
      LOBYTE(v114) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v114 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v25 = spNode.m_pObject;
    v114 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v25 )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005585C0) --------------------------------------------------------
void __thiscall MiniMapWin::AddNPC(MiniMapWin *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *pkProto)
{
  MiniMapWin *v2; // esi@1
  Char *v3; // eax@2
  Char *v4; // ebx@2
  PgSprData *v5; // eax@7
  NpcMarkWin *v6; // edi@9
  char *v7; // eax@13
  PgWin *v8; // ecx@13
  int v9; // eax@16
  tagRECT v10; // ST08_16@16
  PgWin *v11; // [sp-8h] [bp-64h]@7
  NiPoint3 kDir; // [sp+Ch] [bp-50h]@16
  PROTO_NC_BRIEFINFO_REGENMOB_CMD *v13; // [sp+18h] [bp-44h]@1
  NpcMarkWin *pkWin; // [sp+1Ch] [bp-40h]@9
  char *pkMobInfo; // [sp+20h] [bp-3Ch]@10
  NiMatrix3 kMat; // [sp+24h] [bp-38h]@16
  tagRECT kRect; // [sp+48h] [bp-14h]@16
  unsigned int v18; // [sp+58h] [bp-4h]@1
  int v19; // [sp+5Ch] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v2 = this;
  v13 = pkProto;
  if ( pkProto )
  {
    FullMapWin::AddNPC(this->m_pkFullMapWin, pkProto);
    v3 = CharMgr::GetChar(&g_kCharMgr, pkProto->handle);
    v4 = v3;
    if ( v3 )
    {
      if ( !MiniMapWin::IsInNPC(v2, v3->m_kHandle)
        && Char::IsNPC(v4)
        && IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(v4->m_kCharShape.m_kMobID, 1)->MiniMapIcon != 22 )
      {
        if ( Char::IsLinkGate(v4) )
        {
          v5 = v2->m_spLinkSprData.m_pObject;
          v11 = (PgWin *)v2->m_pkClientWin;
        }
        else
        {
          v5 = v2->m_spNpcSprData.m_pObject;
          v11 = (PgWin *)v2->m_pkClientWin;
        }
        v6 = NpcMarkWin::CreateWin(0, 0, v5, 0, v11, 0);
        pkWin = v6;
        if ( v6 )
        {
          pkMobInfo = (char *)IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v4->m_kCharShape.m_kMobID, 1);
          if ( pkMobInfo && v6->baseclass_0.m_pkMarkWin )
          {
            if ( Char::IsLinkGate(v4) )
            {
              pkMobInfo = (char *)v6->baseclass_0.m_pkMarkWin;
              v7 = Char::GetLinkGateName(v4);
              v8 = (PgWin *)pkMobInfo;
            }
            else
            {
              v8 = (PgWin *)v6->baseclass_0.m_pkMarkWin;
              v7 = pkMobInfo + 34;
            }
            PgWin::SetToolTipWinText(v8, v7);
            v6->baseclass_0.m_pkMarkWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
          }
          ((void (__thiscall *)(Char *, NiMatrix3 *))v4->baseclass_0.vfptr[6].GetAbstateColor)(v4, &kMat);
          v4->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v4, (unsigned int)&kDir);
          kDir.y = -kDir.y;
          kDir.z = -kDir.z;
          NpNs_RotateModelZToVector(&kDir, &kMat);
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[74].__vecDelDtor(
            (NiRefObject *)v6,
            (unsigned int)&kMat);
          v6->m_kCharHandle = v13->handle;
          NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kNpcList,
            (NiD3DXEffectParameter *const *)&pkWin);
          ((void (__stdcall *)(tagRECT *))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor)(&kRect);
          kRect.left += ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
          kRect.top += ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
          kRect.right += ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
          v9 = ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
          v10.left = kRect.left;
          *(_QWORD *)&v10.top = *(_QWORD *)&kRect.top;
          v10.bottom = v9 + kRect.bottom;
          NpcMarkWin::SetIconDrawRect(v6, v10);
          v6->m_bIconDraw = 1;
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00558800) --------------------------------------------------------
void __thiscall MiniMapWin::AddParty(MiniMapWin *this, PartyMemberInfo *pkParty)
{
  MiniMapWin *v2; // esi@1
  PartyMarkWin *v3; // eax@1
  PartyMarkWin *v4; // edi@1
  int v5; // eax@2
  NiTListItem<PartyMarkWin *> *v6; // ecx@2

  v2 = this;
  FullMapWin::AddParty(this->m_pkFullMapWin, pkParty);
  v3 = PartyMarkWin::CreateWin(0, 0, v2->m_spPartySprData.m_pObject, &v2->m_pkClientWin->baseclass_0);
  v4 = v3;
  if ( v3 )
  {
    v3->m_pkInfo = pkParty;
    v5 = (int)v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,PartyMarkWin *> *)&v2->m_kPartyList);
    *(_DWORD *)(v5 + 8) = v4;
    *(_DWORD *)v5 = 0;
    *(_DWORD *)(v5 + 4) = v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v6 = v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v6 )
    {
      v6->m_pkNext = (NiTListItem<PartyMarkWin *> *)v5;
      ++*(_DWORD *)&v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PartyMarkWin *> *)v5;
    }
    else
    {
      ++*(_DWORD *)&v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<PartyMarkWin *> *)v5;
      v2->m_kPartyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<PartyMarkWin *> *)v5;
    }
  }
}

//----- (005588A0) --------------------------------------------------------
void __thiscall MiniMapWin::AddRaidMember(MiniMapWin *this, RaidMemberInfo *pkRaid)
{
  MiniMapWin *v2; // edi@1
  Name5 *v3; // eax@1
  RaidMemberInfo *v4; // esi@1
  RaidMarkWin *v5; // eax@7

  v2 = this;
  v3 = User::GetMainCharID(&g_kUser);
  v4 = pkRaid;
  if ( *(_DWORD *)&pkRaid->m_kCharID.n5_name[0] != *(_DWORD *)&v3->n5_name[0]
    || *(_DWORD *)&pkRaid->m_kCharID.n5_name[4] != *(_DWORD *)&v3->n5_name[4]
    || *(_DWORD *)&pkRaid->m_kCharID.n5_name[8] != *(_DWORD *)&v3->n5_name[8]
    || *(_DWORD *)&pkRaid->m_kCharID.n5_name[12] != *(_DWORD *)&v3->n5_name[12]
    || *(_DWORD *)&pkRaid->m_kCharID.n5_name[16] != *(_DWORD *)&v3->n5_name[16] )
  {
    FullMapWin::AddRaidMember(v2->m_pkFullMapWin, pkRaid);
    if ( !MiniMapWin::IsInRaid(v2, v4) )
    {
      v5 = RaidMarkWin::CreateWin(0, 0, v2->m_spPartySprData.m_pObject, &v2->m_pkClientWin->baseclass_0);
      pkRaid = (RaidMemberInfo *)v5;
      if ( v5 )
      {
        v5->m_pkInfo = v4;
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kRaidList,
          (NiD3DXEffectParameter *const *)&pkRaid);
      }
    }
  }
}

//----- (00558930) --------------------------------------------------------
void __thiscall MiniMapWin::AddGTEnemyPos(MiniMapWin *this, SHINE_XY_TYPE pkMemberInfo)
{
  MiniMapWin *v2; // esi@1
  FullMapWin *v3; // ecx@1
  PgSprData *v4; // eax@2
  GTIScanMarkWin *v5; // eax@5
  GTIScanMarkWin *v6; // edi@5
  unsigned int v7; // ecx@6
  int v8; // eax@6
  NiTListItem<GTIScanMarkWin *> *v9; // ecx@6
  ScanMemberInfo kmemberInfo; // [sp+8h] [bp-8h]@1

  v2 = this;
  kmemberInfo.loc.y = pkMemberInfo.y;
  v3 = this->m_pkFullMapWin;
  kmemberInfo.loc.x = pkMemberInfo.x;
  FullMapWin::AddGTEnemyPos(v3, &kmemberInfo);
  if ( GuildTask::GetGuildTournamentImprove()->m_BlueTeam == g_pkMainChar->m_dwGuildRegNum )
  {
    v4 = v2->m_spRedPos.m_pObject;
  }
  else
  {
    if ( GuildTask::GetGuildTournamentImprove()->m_RedTeam != g_pkMainChar->m_dwGuildRegNum )
      return;
    v4 = v2->m_spBluePos.m_pObject;
  }
  v5 = GTIScanMarkWin::CreateWin(0, 0, v4, &v2->m_pkClientWin->baseclass_0);
  v6 = v5;
  if ( v5 )
  {
    v7 = kmemberInfo.loc.y;
    v5->m_EenemyPos.loc.x = kmemberInfo.loc.x;
    v5->m_EenemyPos.loc.y = v7;
    v8 = (int)v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,GTIScanMarkWin *> *)&v2->m_kEnemyList);
    *(_DWORD *)(v8 + 8) = v6;
    *(_DWORD *)v8 = 0;
    *(_DWORD *)(v8 + 4) = v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v9 = v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v9 )
    {
      v9->m_pkNext = (NiTListItem<GTIScanMarkWin *> *)v8;
      ++*(_DWORD *)&v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<GTIScanMarkWin *> *)v8;
    }
    else
    {
      ++*(_DWORD *)&v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<GTIScanMarkWin *> *)v8;
      v2->m_kEnemyList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<GTIScanMarkWin *> *)v8;
    }
  }
}

//----- (00558A20) --------------------------------------------------------
void __thiscall MiniMapWin::AddMapMark(MiniMapWin *this, PROTO_NC_SCENARIO_MAPMARK_CMD *kProto)
{
  MiniMapWin *v2; // esi@1
  FullMapWin *v3; // ecx@1
  PROTO_NC_SCENARIO_MAPMARK_CMD *v4; // edi@1
  PROTO_NC_SCENARIO_MAPMARK_CMD *v5; // ebx@4
  PgSprData *v6; // eax@8
  MapMarkWin *v7; // eax@12
  float v8; // ST1C_4@13
  float v9; // ST20_4@13
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v10; // esi@13
  NiTMapItem<unsigned int,NiVBSet *> *v11; // edi@13
  NiVBSet *pkWin; // [sp+10h] [bp-10h]@12
  unsigned int v13; // [sp+14h] [bp-Ch]@13
  signed int i; // [sp+18h] [bp-8h]@3
  MiniMapWin *thisa; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  v3 = this->m_pkFullMapWin;
  v4 = kProto;
  thisa = v2;
  if ( v3 )
    FullMapWin::AddMapMark(v3, kProto);
  i = 0;
  if ( kProto->nNum > 0u )
  {
    v5 = kProto + 2;
    do
    {
      switch ( LOBYTE(v5[4].nNum) )
      {
        case 5:
          v6 = v2->m_spLinkSprData.m_pObject;
          break;
        case 0x10:
          v6 = v2->m_spRedPos.m_pObject;
          break;
        case 0x11:
          v6 = v2->m_spBluePos.m_pObject;
          break;
        default:
          v6 = v2->m_spNpcSprData.m_pObject;
          break;
      }
      v7 = MapMarkWin::CreateWin(0, 0, v6, &v2->m_pkClientWin->baseclass_0);
      pkWin = (NiVBSet *)v7;
      if ( v7 )
      {
        v8 = (double)*(_DWORD *)&v5->nNum;
        v9 = (double)*(unsigned int *)&v5[2].nNum;
        v7->m_kPos.x = v8;
        v7->m_kPos.y = v9;
        v10 = (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_kMapMarkMap;
        v7->m_fLifeTime = (double)*(unsigned int *)((char *)&v5[4].nNum + 1) / 1000.0 + Timer::ms_fCurTime;
        v13 = v5[-1].nNum;
        v11 = v10->m_ppkHashTable[v10->vfptr->KeyToHashIndex(v10, v5[-1].nNum)];
        if ( v11 )
        {
          while ( !v10->vfptr->IsKeysEqual(v10, v13, v11->m_key) )
          {
            v11 = v11->m_pkNext;
            if ( !v11 )
              goto LABEL_19;
          }
          if ( v11->m_val )
            MiniMapWin::RemoveMapMark(thisa, v5[-1].nNum);
        }
LABEL_19:
        NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
          v10,
          v5[-1].nNum,
          pkWin);
        v4 = kProto;
        v2 = thisa;
      }
      v5 = (PROTO_NC_SCENARIO_MAPMARK_CMD *)((char *)v5 + 15);
      ++i;
    }
    while ( i < v4->nNum );
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00558B90) --------------------------------------------------------
void __thiscall MiniMapWin::AddKQTeamMark(MiniMapWin *this, unsigned __int16 kCharHandle)
{
  MiniMapWin *v2; // esi@1
  FullMapWin *v3; // ecx@2
  Char *v4; // eax@4
  char v5; // al@5
  PgSprData *v6; // eax@6
  KQTeamMarkWin *v7; // ebx@10
  void *pkDelWin; // [sp+8h] [bp-4h]@11

  v2 = this;
  if ( -1 != kCharHandle )
  {
    v3 = this->m_pkFullMapWin;
    if ( v3 )
      FullMapWin::AddKQTeamMark(v3, kCharHandle);
    v4 = CharMgr::GetChar(&g_kCharMgr, kCharHandle);
    if ( v4 )
    {
      v5 = v4->m_byKQTeamType;
      if ( v5 )
      {
        if ( v5 != 1 )
          return;
        v6 = v2->m_spBluePos.m_pObject;
      }
      else
      {
        v6 = v2->m_spRedPos.m_pObject;
      }
      if ( v6 )
      {
        v7 = KQTeamMarkWin::CreateWin(0, 0, v6, &v2->m_pkClientWin->baseclass_0);
        if ( v7 )
        {
          pkDelWin = 0;
          NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::GetAt(
            &v2->m_KQTeamMarkWinMap.baseclass_0,
            kCharHandle,
            (KQTeamMarkWin **)&pkDelWin);
          if ( pkDelWin )
            MiniMapWin::RemoveKQTeamMark(v2, kCharHandle);
          NiTMapBase<DFALL<KQTeamMarkWin__>_unsigned_short_KQTeamMarkWin__>::SetAt(
            &v2->m_KQTeamMarkWinMap.baseclass_0,
            kCharHandle,
            v7);
        }
      }
    }
  }
}

//----- (00558C50) --------------------------------------------------------
bool __thiscall MiniMapWin::Create(MiniMapWin *this, PgFrameWork *pkFrameWork)
{
  MiniMapWin *v2; // esi@1

  v2 = this;
  MiniMapWin::CreateKoreaUI(this, pkFrameWork);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.0);
  v2->m_pkFullMapWin = FullMapWin::CreateWin(v2, pkFrameWork);
  return 1;
}

//----- (00558CA0) --------------------------------------------------------
void __thiscall MiniMapWin::AddNPC(MiniMapWin *this, PROTO_NC_BRIEFINFO_MOB_CMD *pkProto)
{
  MiniMapWin *v2; // edi@1
  bool v3; // zf@1
  PROTO_NC_BRIEFINFO_REGENMOB_CMD *v4; // esi@2
  Char *v5; // ebx@4
  NiTListItem<NpcMarkWin *> *v6; // eax@5
  NpcMarkWin *v7; // ecx@6
  int v8; // esi@10
  int v9; // edx@10
  int v10; // eax@11
  int v11; // eax@14
  PgSprData *v12; // eax@19
  NpcMarkWin *v13; // esi@21
  char *v14; // eax@25
  PgWin *v15; // ecx@25
  int v16; // eax@28
  int v17; // edx@28
  int v18; // ebx@28
  int v19; // ecx@28
  int v20; // edx@29
  PgWin *v21; // [sp-Ch] [bp-6Ch]@19
  char *v22; // [sp-8h] [bp-68h]@25
  NiPoint3 vec; // [sp+Ch] [bp-54h]@28
  int i; // [sp+18h] [bp-48h]@1
  PROTO_NC_BRIEFINFO_MOB_CMD *v25; // [sp+1Ch] [bp-44h]@2
  MobInfo *v26; // [sp+20h] [bp-40h]@22
  NiD3DXEffectParameter *element; // [sp+24h] [bp-3Ch]@10
  NiMatrix3 rot; // [sp+28h] [bp-38h]@28
  int v29; // [sp+4Ch] [bp-14h]@28
  int v30; // [sp+50h] [bp-10h]@28
  int v31; // [sp+54h] [bp-Ch]@28
  int v32; // [sp+58h] [bp-8h]@28
  unsigned int v33; // [sp+5Ch] [bp-4h]@1
  int v34; // [sp+60h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v2 = this;
  FullMapWin::AddNPC(this->m_pkFullMapWin, pkProto);
  v3 = pkProto->mobnum == 0;
  i = 0;
  if ( !v3 )
  {
    v4 = (PROTO_NC_BRIEFINFO_REGENMOB_CMD *)&pkProto[1];
    v25 = pkProto + 1;
    do
    {
      if ( v4 )
      {
        FullMapWin::AddNPC(v2->m_pkFullMapWin, v4);
        v5 = CharMgr::GetChar(&g_kCharMgr, v4->handle);
        if ( v5 )
        {
          v6 = v2->m_kNpcList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          if ( v6 )
          {
            while ( 1 )
            {
              v7 = v6->m_element;
              v6 = v6->m_pkNext;
              if ( v7 )
              {
                if ( v7->m_kCharHandle == v5->m_kHandle )
                  break;
              }
              if ( !v6 )
                goto LABEL_9;
            }
          }
          else
          {
LABEL_9:
            if ( Char::IsNPC(v5) )
            {
              v8 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
              v9 = *(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
              element = (NiD3DXEffectParameter *)v5->m_kCharShape.m_kMobID;
              if ( (unsigned __int8)(*(int (__thiscall **)(int, NiD3DXEffectParameter *))(v9 + 16))(
                                      ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                                      element) )
              {
                if ( (unsigned __int16)element <= *(_WORD *)(v8 + 200) )
                {
                  v11 = *(_DWORD *)(v8 + 196) + 4 * (unsigned __int16)element;
                  v10 = *(_DWORD *)v11 ? *(_DWORD *)v11 : 0;
                }
                else
                {
                  v10 = 0;
                }
              }
              else
              {
                v10 = 0;
              }
              if ( *(_DWORD *)(v10 + 170) != 22 )
              {
                if ( Char::IsLinkGate(v5) )
                {
                  v12 = v2->m_spLinkSprData.m_pObject;
                  v21 = (PgWin *)v2->m_pkClientWin;
                }
                else
                {
                  v12 = v2->m_spNpcSprData.m_pObject;
                  v21 = (PgWin *)v2->m_pkClientWin;
                }
                v13 = NpcMarkWin::CreateWin(0, 0, v12, 0, v21, 0);
                element = (NiD3DXEffectParameter *)v13;
                if ( v13 )
                {
                  v26 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v5->m_kCharShape.m_kMobID, 1);
                  if ( v26 && v13->baseclass_0.m_pkMarkWin )
                  {
                    if ( Char::IsLinkGate(v5) )
                    {
                      v26 = (MobInfo *)v13->baseclass_0.m_pkMarkWin;
                      v14 = Char::GetLinkGateName(v5);
                      v15 = (PgWin *)v26;
                      v22 = v14;
                    }
                    else
                    {
                      v22 = v26->Name;
                      v15 = (PgWin *)v13->baseclass_0.m_pkMarkWin;
                    }
                    PgWin::SetToolTipWinText(v15, v22);
                    v13->baseclass_0.m_pkMarkWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                  }
                  ((void (__thiscall *)(Char *, NiMatrix3 *))v5->baseclass_0.vfptr[6].GetAbstateColor)(v5, &rot);
                  v5->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v5, (unsigned int)&vec);
                  vec.y = -vec.y;
                  vec.z = -vec.z;
                  NpNs_RotateModelZToVector(&vec, &rot);
                  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[74].__vecDelDtor(
                    (NiRefObject *)v13,
                    (unsigned int)&rot);
                  v13->m_kCharHandle = *(_WORD *)&v25->mobnum;
                  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
                    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kNpcList,
                    &element);
                  ((void (__stdcall *)(int *))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor)(&v29);
                  v29 += ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
                  v30 += ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
                  v31 += ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
                  v16 = ((int (*)(void))v2->m_pkMiniMapWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
                  v17 = v30;
                  v18 = v31;
                  v32 += v16;
                  v19 = v32;
                  v13->m_kIconDrawRect.left = v29;
                  v13->m_kIconDrawRect.top = v17;
                  v13->m_kIconDrawRect.right = v18;
                  v13->m_kIconDrawRect.bottom = v19;
                  v13->m_bIconDraw = 1;
                }
              }
            }
          }
        }
      }
      v20 = pkProto->mobnum;
      v4 = (PROTO_NC_BRIEFINFO_REGENMOB_CMD *)&v25[152];
      ++i;
      v25 += 152;
    }
    while ( i < v20 );
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (00558F80) --------------------------------------------------------
void __thiscall NpcMarkWin::DirectMessage(NpcMarkWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  char *v4; // esi@2
  unsigned int v5; // edi@2
  unsigned int v6; // ebx@2
  int v7; // eax@2
  int v8; // ecx@2
  bool v9; // bl@6
  Char *v10; // eax@8
  Char *v11; // esi@8
  NiPointer<MapNavigator> *v12; // eax@10
  MapNavigator *v13; // edi@10
  MapNavigator *v14; // ebx@10
  GTInformWin *v15; // edi@15
  char *v16; // eax@17
  D3DXCOLOR v17; // ST08_16@19
  char *v18; // eax@19
  char *v19; // eax@19
  Name3 *v20; // eax@20
  unsigned __int16 v21; // ST1C_2@20
  char v22; // [sp+20h] [bp-70h]@20
  NiPoint3 kPos; // [sp+2Ch] [bp-64h]@20
  NiPoint3 kDest; // [sp+38h] [bp-58h]@20
  NiPointer<MapNavigator> result; // [sp+44h] [bp-4Ch]@10
  NpcMarkWin *v26; // [sp+48h] [bp-48h]@1
  int xPos; // [sp+4Ch] [bp-44h]@2
  int yPos; // [sp+50h] [bp-40h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+54h] [bp-3Ch]@16
  char acMapName[13]; // [sp+70h] [bp-20h]@20
  unsigned int v31; // [sp+80h] [bp-10h]@1
  int v32; // [sp+8Ch] [bp-4h]@16
  int v33; // [sp+90h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v26 = this;
  if ( iMsgTag == 3 )
  {
    v9 = (v4 = (char *)this - 232,
          v5 = (unsigned int)(*(int (__thiscall **)(char *))(*((_DWORD *)this - 58) + 144))((char *)this - 232) >> 1,
          v6 = (unsigned int)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 148))(v4) >> 1,
          (*(void (__thiscall **)(char *, int *, int *))(*(_DWORD *)v4 + 212))(v4, &xPos, &yPos),
          v7 = xPos - PgWin::ms_iMsX.x,
          v8 = yPos - PgWin::ms_iMsY,
          xPos = v7,
          yPos -= PgWin::ms_iMsY,
          v7 >= -v5)
      && v7 < (signed int)v5
      && v8 >= -v6
      && v8 < (signed int)v6;
    v10 = CharMgr::GetChar(
            &g_kCharMgr,
            LOWORD(v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[2][1]));
    v11 = v10;
    if ( v9 )
    {
      if ( v10 )
      {
        v12 = MapNavigator::GetMapNavigator(&result);
        v13 = result.m_pObject;
        v14 = v12->m_pObject;
        if ( result.m_pObject
          && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount)
          && v13 )
          v13->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
        if ( v14 )
        {
          v15 = (GTInformWin *)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[33].m_kMsgQ.m_uiHead;
          if ( v15 )
          {
            strName.baseclass_0._Myres = 15;
            strName.baseclass_0._Mysize = 0;
            strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            v32 = 0;
            if ( Char::IsLinkGate(v11) )
              v16 = Char::GetLinkGateName(v11);
            else
              v16 = (char *)((int (__thiscall *)(Char *))v11->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v11);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(&strName, v16);
            GTInformWin::Clear(v15);
            *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxYellowColor;
            *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
            v18 = TextData2::Get(0x9F9CD2DCu);
            v19 = fs(v18);
            GTInformWin::AddText(v15, v19, COERCE_D3DXCOLOR(v17.r), 0, 1000000.0);
            v32 = -1;
            std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strName);
          }
          ((void (__thiscall *)(Char *, NiPoint3 *))v11->baseclass_0.vfptr[6].SetAbStateProperty)(v11, &kDest);
          ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
          v20 = World::GetMapName(&g_kWorld, (Name3 *)&v22);
          *(_DWORD *)acMapName = *(_DWORD *)&v20->n3_name[0];
          *(_DWORD *)&acMapName[4] = *(_DWORD *)&v20->n3_name[4];
          v21 = v11->m_kCharShape.m_kMobID;
          *(_DWORD *)&acMapName[8] = *(_DWORD *)&v20->n3_name[8];
          acMapName[12] = 0;
          MapNavigator::FindPathAway(v14, &kPos, &kDest, acMapName, acMapName, v21);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005591E0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>(NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
}
// 9A0E8C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);

//----- (005591F0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9A0E8C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);

//----- (00559220) --------------------------------------------------------
void *__thiscall GTIScanMarkWin::_scalar_deleting_destructor_(KQTeamMarkWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);

//----- (00559260) --------------------------------------------------------
void __thiscall NiTPointerList<MiniMapWin::sKQAlarmInfo__>::_NiTPointerList<MiniMapWin::sKQAlarmInfo__>(NiTPointerList<MiniMapWin::sKQAlarmInfo *> *this)
{
  NiTPointerList<MiniMapWin::sKQAlarmInfo *> *v1; // edi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v2; // esi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
}
// 9A0E8C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);
// 9A0E9C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);

//----- (005592E0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v3; // esi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A0E8C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);
// 9A0E9C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);

//----- (00559370) --------------------------------------------------------
void __thiscall PgTList<MiniMapWin::sKQAlarmInfo__>::_PgTList<MiniMapWin::sKQAlarmInfo__>(PgTList<MiniMapWin::sKQAlarmInfo *> *this)
{
  PgTList<MiniMapWin::sKQAlarmInfo *> *v1; // edi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v2; // esi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&PgTList<MiniMapWin::sKQAlarmInfo__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
}
// 9A0E8C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);
// 9A1470: using guessed type int (__thiscall *PgTList_MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);

//----- (005593F0) --------------------------------------------------------
MobCoordinate *__cdecl ITableBase<MobCoordinate_MobCoordinateTab>::GetByIndex(unsigned int uiIndex)
{
  return (MobCoordinate *)CDataReader::GetRecord(
                            (CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4),
                            uiIndex);
}
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;

//----- (00559410) --------------------------------------------------------
unsigned int __cdecl ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;

//----- (00559430) --------------------------------------------------------
unsigned int __cdecl MobCoordinateTab::GetRecordNum(unsigned __int16 Mob_ID)
{
  unsigned int v1; // esi@1

  v1 = 0;
  if ( ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() )
  {
    do
    {
      if ( *((_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4),
                        v1)
           + 1) == Mob_ID )
        break;
      ++v1;
    }
    while ( v1 < ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() );
  }
  return v1;
}
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;

//----- (00559470) --------------------------------------------------------
void *__thiscall PgTList<MiniMapWin::sKQAlarmInfo__>::_vector_deleting_destructor_(PgTList<MiniMapWin::sKQAlarmInfo *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v3; // esi@1
  NiTListItem<MiniMapWin::sKQAlarmInfo *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MiniMapWin::sKQAlarmInfo *>Vtbl *)&PgTList<MiniMapWin::sKQAlarmInfo__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MiniMapWin::sKQAlarmInfo__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A0E8C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);
// 9A1470: using guessed type int (__thiscall *PgTList_MiniMapWin__sKQAlarmInfo _____vftable_)(void *p, char);

//----- (00559500) --------------------------------------------------------
void *__thiscall QuestHelperMarkWin::_vector_deleting_destructor_(QuestHelperMarkWin *this, unsigned int a2)
{
  QuestHelperMarkWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestHelperMarkWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestHelperMarkWin::_vftable_;
  QuestHelperMarkWin::OnClose(this);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniMapMarkWin::_vftable_;
  v2->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniMapMarkWin::_vftable_;
  PgWin::_PgWin(&v2->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A0114: using guessed type int (__stdcall *MiniMapMarkWin___vftable_)(int uiFlags);
// 9A0134: using guessed type int (__thiscall *MiniMapMarkWin___vftable_)(void *p, char);
// 9A0EAC: using guessed type int (__stdcall *QuestHelperMarkWin___vftable_)(int uiFlags);
// 9A0ECC: using guessed type int (__thiscall *QuestHelperMarkWin___vftable_)(void *p, char);

//----- (00559590) --------------------------------------------------------
void *__thiscall MiniMapWin::_vector_deleting_destructor_(MiniMapWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MiniMapWin::_MiniMapWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005595C0) --------------------------------------------------------
void __thiscall MiniPartyWin::ProcessMeInput(MiniPartyWin *this, bool *bHit)
{
  PgWinFrame::ProcessMeInput(&this->baseclass_0, bHit);
}

//----- (005595D0) --------------------------------------------------------
void __thiscall MiniPartyWin::ClearInfo(MiniPartyWin *this)
{
  MiniPartyWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A16D9);
  v1->m_pkMemberInfo = 0;
}

//----- (00559600) --------------------------------------------------------
const char *__thiscall MiniPartyWin::GetMemberName(MiniPartyWin *this)
{
  MiniPartyWin *v1; // esi@1
  const char *result; // eax@2

  v1 = this;
  if ( this->m_pkNameTextWin )
  {
    ((void (*)(void))this->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
    result = (const char *)((int (*)(void))v1->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00559640) --------------------------------------------------------
void __thiscall MiniPartyWin::DirectMessage(MiniPartyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  MiniPartyWin *v4; // esi@1
  signed int v5; // eax@2
  AbstateIcon *v6; // ecx@11
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@14
  void (__thiscall *v8)(_DWORD, _DWORD, _DWORD); // eax@19
  int v9; // ebx@19
  signed int v10; // eax@20
  int v11; // eax@22
  const char *v12; // eax@26
  unsigned int v13; // edi@26
  char *v14; // eax@31
  Char *v15; // eax@33
  int v16; // [sp+0h] [bp-Ch]@0
  signed int v17; // [sp+0h] [bp-Ch]@12
  int v18; // [sp+0h] [bp-Ch]@14
  int iSy; // [sp+8h] [bp-4h]@19

  v4 = this;
  if ( iMsgTag == 15 )
  {
    v5 = 0;
    switch ( *(_DWORD *)pvBody )
    {
      case 0x3F7:
        v5 = 1;
        break;
      case 0x3F8:
        v5 = 2;
        break;
      case 0x3F9:
        v5 = 4;
        break;
      case 0x3FA:
        v5 = 8;
        break;
      case 0x3FB:
        v5 = 16;
        break;
      default:
        break;
    }
    if ( *((_BYTE *)pvBody + 4) )
      LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) |= v5;
    else
      LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) &= ~v5;
    v6 = this->m_apkAbstateBufIconWin[3].m_pObject;
    if ( LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) & 0x10 )
    {
      ((void (__stdcall *)(_DWORD, int))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
        0,
        v16);
      v4->m_apkAbstateBufIconWin[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      v17 = 0;
    }
    else
    {
      ((void (__stdcall *)(signed int, int))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
        1,
        v16);
      v4->m_apkAbstateBufIconWin[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      v17 = 1;
    }
    ((void (__cdecl *)(signed int))v4->m_apkAbstateBufIconWin[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v17);
    v7 = v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    if ( LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) & 0xF )
    {
      ((void (__stdcall *)(_DWORD, int))v7)(0, v18);
      v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      ((void (__stdcall *)(signed int, int))v7)(1, v18);
      v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    }
    ((void (*)(void))v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
  }
  if ( pkFrom )
  {
    v8 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)v4 - 58) + 224);
    pvBody = (void *)PgWin::ms_iMsX.x;
    v9 = (int)((char *)v4 - 232);
    iSy = PgWin::ms_iMsY;
    v8((char *)v4 - 232, &pvBody, &iSy);
    if ( (signed int)pvBody >= 0 )
    {
      v10 = (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 144))((char *)v4 - 232);
      if ( (signed int)pvBody < v10 )
      {
        if ( iSy >= 0 )
        {
          v11 = (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 148))((char *)v4 - 232);
          if ( iSy < v11 )
          {
            if ( iMsgTag == 3 )
            {
              if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]) )
              {
                v14 = (char *)(*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0])
                                               + 484))();
                if ( v14 )
                {
                  if ( strcmp(v14, (const char *)&unk_9A16DB) )
                  {
                    v15 = CharMgr::GetChar(&g_kCharMgr, v14);
                    if ( v15 )
                      GameFrameWork::TargetCharReq(
                        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
                        v15);
                  }
                }
              }
            }
            else
            {
              if ( iMsgTag == 6 )
              {
                if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]) )
                {
                  v12 = (const char *)(*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0])
                                                       + 484))();
                  v13 = (unsigned int)v12;
                  if ( v12 )
                  {
                    if ( strcmp(v12, (const char *)&unk_9A16DA) )
                    {
                      if ( (unsigned __int8)(*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 260))((char *)v4 - 232) )
                        PgFrameWork::AddMsg(
                          LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
                          0x80u,
                          v13,
                          0);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

//----- (005598D0) --------------------------------------------------------
void __thiscall MiniPartyWin::SetBuffUI(MiniPartyWin *this, Char *pkMember, StateType type, int *AbstateNums)
{
  MiniPartyWin *v4; // esi@1
  NiTListItem<AbStateInst *> *v5; // ecx@1
  signed int v6; // eax@1
  AbstateIcon **v7; // edi@2
  AbstateIcon **v8; // esi@2
  AbStateInst *v9; // ebx@5
  int v10; // eax@9
  bool v11; // zf@9
  int v12; // eax@9
  int v13; // eax@18
  int v14; // eax@18
  int v15; // eax@19
  int v16; // eax@22
  int v17; // eax@27
  int v18; // eax@27
  int v19; // eax@28
  int v20; // [sp+4h] [bp-14h]@5
  unsigned __int16 v21; // [sp+4h] [bp-14h]@16
  unsigned __int16 v22; // [sp+4h] [bp-14h]@25
  NiTListItem<AbStateInst *> *kIter; // [sp+8h] [bp-10h]@5
  unsigned __int16 pkInfo; // [sp+Ch] [bp-Ch]@5
  int pkInfoa; // [sp+Ch] [bp-Ch]@6
  GameFrameWork *pkInfob; // [sp+Ch] [bp-Ch]@16
  GameFrameWork *pkInfoc; // [sp+Ch] [bp-Ch]@25
  int v28; // [sp+10h] [bp-8h]@2
  int v29; // [sp+14h] [bp-4h]@2
  int i; // [sp+20h] [bp+8h]@1

  v4 = this;
  v5 = AbStateInfectee::GetAbStateList(&pkMember->baseclass_0)->baseclass_0.baseclass_0.m_pkHead;
  v6 = *AbstateNums;
  i = *AbstateNums;
  if ( v5 )
  {
    v28 = (int)&v4->m_apkAbstateBuffWin[v6];
    v7 = (AbstateIcon **)&v4->m_apkAbstateBufIconWin[v6];
    v29 = (int)&v4->m_apkAbstateDBuffWin[v6];
    v8 = (AbstateIcon **)&v4->m_apkAbstateDeBufIconWin[v6];
    while ( v6 < 15 )
    {
      v9 = v5->m_element;
      kIter = v5->m_pkNext;
      pkInfo = v9->kID;
      v20 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                         + 16))(v9->kID) )
      {
        if ( pkInfo <= *(_WORD *)(v20 + 200) )
        {
          v10 = *(_DWORD *)(v20 + 196);
          v11 = *(_DWORD *)(v10 + 4 * pkInfo) == 0;
          v12 = v10 + 4 * pkInfo;
          if ( v11 )
            pkInfoa = 0;
          else
            pkInfoa = *(_DWORD *)v12;
        }
        else
        {
          pkInfoa = 0;
        }
      }
      else
      {
        pkInfoa = 0;
      }
      if ( *(_BYTE *)(pkInfoa + 526) )
      {
        if ( type != 4 || *(_DWORD *)(pkInfoa + 522) != 4 )
        {
          v16 = *(_DWORD *)(pkInfoa + 522);
          if ( v16 == type )
          {
            if ( v16 != 4 )
            {
              AbstateIcon::SetAbstate(*v7, v9->kID);
              PgWin::SetToolTipWinText(
                &(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                (char *)(pkInfoa + 70));
              (*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
              (*(void (__stdcall **)(signed int))(**(_DWORD **)v28 + 256))(1);
              ++i;
              v29 += 4;
              v28 += 4;
              ++v8;
              ++v7;
              if ( v9->uiSubStateStr )
              {
                v22 = v9->kID;
                pkInfoc = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
                if ( (unsigned __int8)((int (__stdcall *)(_DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(v9->kID) )
                {
                  if ( v22 <= LOWORD(pkInfoc->m_ResList[2].m_eAspect) )
                  {
                    v17 = *(_DWORD *)&pkInfoc->m_ResList[2].m_bCheckAdd;
                    v11 = *(_DWORD *)(v17 + 4 * v22) == 0;
                    v18 = v17 + 4 * v22;
                    if ( !v11 )
                    {
                      v19 = *(_DWORD *)v18;
                      if ( v19 )
                      {
                        if ( *(_BYTE *)(v19 + 288) )
                        {
                          AbstateIcon::SetDuplicate(*v7, v9->uiSubStateStr);
                          ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                          ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                          ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
                          (*(void (__stdcall **)(signed int))(**(_DWORD **)v28 + 256))(1);
                          ++i;
                          v29 += 4;
                          ++v8;
                          ++v7;
                          v28 += 4;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else
        {
          AbstateIcon::SetAbstate(*v8, v9->kID);
          PgWin::SetToolTipWinText(
            &(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            (char *)(pkInfoa + 70));
          (*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
          ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v29 + 256))(1);
          ++i;
          v29 += 4;
          v28 += 4;
          ++v8;
          ++v7;
          if ( v9->uiSubStateStr )
          {
            v21 = v9->kID;
            pkInfob = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
            if ( (unsigned __int8)((int (__stdcall *)(_DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(v9->kID) )
            {
              if ( v21 <= LOWORD(pkInfob->m_ResList[2].m_eAspect) )
              {
                v13 = *(_DWORD *)&pkInfob->m_ResList[2].m_bCheckAdd;
                v11 = *(_DWORD *)(v13 + 4 * v21) == 0;
                v14 = v13 + 4 * v21;
                if ( !v11 )
                {
                  v15 = *(_DWORD *)v14;
                  if ( v15 )
                  {
                    if ( *(_BYTE *)(v15 + 288) )
                    {
                      AbstateIcon::SetDuplicate(*v8, v9->uiSubStateStr);
                      ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                      ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                      ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
                      (*(void (__stdcall **)(signed int))(**(_DWORD **)v29 + 256))(1);
                      ++i;
                      ++v8;
                      ++v7;
                      v28 += 4;
                      v29 += 4;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if ( !kIter )
      {
        *AbstateNums = i;
        return;
      }
      v5 = kIter;
      v6 = i;
    }
    *AbstateNums = v6;
  }
  else
  {
    *AbstateNums = v6;
  }
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (00559C70) --------------------------------------------------------
void __thiscall MiniPartyWin::SetOption(MiniPartyWin *this, unsigned int uiOpt)
{
  MiniPartyWin *v2; // esi@1
  char *v3; // edi@1
  int v4; // edi@4
  int v5; // edi@7
  int v6; // edi@10
  int v7; // edi@13
  PgWinBut *v8; // ecx@16
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@19
  int v10; // [sp+0h] [bp-14h]@0
  signed int v11; // [sp+0h] [bp-14h]@17
  int v12; // [sp+0h] [bp-14h]@19
  DirectUserMsgBody_PopupMenuSetCheckBox kBody; // [sp+Ch] [bp-8h]@1

  v2 = this;
  v3 = (char *)&this->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1015;
  kBody.bCheck = uiOpt & 1;
  if ( *((_DWORD *)v3 + 1) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v3 + 1) + 4))(
      16,
      &kBody,
      v3);
    if ( *((_DWORD *)v3 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v3 + 1) + 16))(
        16,
        &kBody,
        v3);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(*(_DWORD *)v3 + 16))(
    v3,
    16,
    &kBody,
    v3);
  v4 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1016;
  kBody.bCheck = (uiOpt >> 1) & 1;
  if ( *(_DWORD *)(v4 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v4 + 4) + 4))(
      16,
      &kBody,
      v4);
    if ( *(_DWORD *)(v4 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v4 + 4) + 16))(
        16,
        &kBody,
        v4);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v4 + 16))(
    v4,
    16,
    &kBody,
    v4);
  v5 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1017;
  kBody.bCheck = (uiOpt >> 2) & 1;
  if ( *(_DWORD *)(v5 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 4))(
      16,
      &kBody,
      v5);
    if ( *(_DWORD *)(v5 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 16))(
        16,
        &kBody,
        v5);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v5 + 16))(
    v5,
    16,
    &kBody,
    v5);
  v6 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1018;
  kBody.bCheck = (uiOpt >> 3) & 1;
  if ( *(_DWORD *)(v6 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 4))(
      16,
      &kBody,
      v6);
    if ( *(_DWORD *)(v6 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 16))(
        16,
        &kBody,
        v6);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v6 + 16))(
    v6,
    16,
    &kBody,
    v6);
  v7 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1019;
  kBody.bCheck = (uiOpt >> 4) & 1;
  if ( *(_DWORD *)(v7 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 4))(
      16,
      &kBody,
      v7);
    if ( *(_DWORD *)(v7 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 16))(
        16,
        &kBody,
        v7);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v7 + 16))(
    v7,
    16,
    &kBody,
    v7);
  v8 = v2->m_pkDeBufExtendBtn.m_pObject;
  v2->m_uiOption = uiOpt;
  if ( uiOpt & 0x10 )
  {
    ((void (__stdcall *)(_DWORD, int))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      0,
      v10);
    v2->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v11 = 0;
  }
  else
  {
    ((void (__stdcall *)(signed int, int))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      1,
      v10);
    v2->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v11 = 1;
  }
  ((void (__cdecl *)(signed int))v2->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v11);
  v9 = v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  if ( v2->m_uiOption & 0xF )
  {
    ((void (__stdcall *)(_DWORD, int))v9)(0, v12);
    v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  else
  {
    ((void (__stdcall *)(signed int, int))v9)(1, v12);
    v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
  ((void (__thiscall *)(PgWinBut *))v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_pkBufExtendBtn.m_pObject);
}

//----- (00559F00) --------------------------------------------------------
void __thiscall MiniPartyWin::OnCommand(MiniPartyWin *this, unsigned int wParam, int lParam)
{
  MiniPartyWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      this->m_uiOption |= 0x10u;
      MiniPartyWin::SetOption(this, this->m_uiOption);
      ((void (__stdcall *)(_DWORD))v3->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v3->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      ((void (__stdcall *)(_DWORD))v3->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
  }
  else
  {
    MiniPartyWin::SetOption(this, this->m_uiOption | 0xF);
    ((void (__stdcall *)(_DWORD))v3->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v3->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    ((void (__stdcall *)(_DWORD))v3->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00559FA0) --------------------------------------------------------
void __thiscall MiniPartyWin::_MiniPartyWin(MiniPartyWin *this)
{
  MiniPartyWin *v1; // esi@1
  PgWinBut *v2; // edi@1
  PgWinBut *v3; // edi@5
  PopupMenuWin *v4; // edi@9

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniPartyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniPartyWin::_vftable_;
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_pkDeBufExtendBtn.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_pkBufExtendBtn.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateDBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateDeBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v4 = v1->m_spPopupMenu.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A1884: using guessed type int (__stdcall *MiniPartyWin___vftable_)(int uiFlags);
// 9A18A4: using guessed type int (__thiscall *MiniPartyWin___vftable_)(void *p, char);

//----- (0055A0F0) --------------------------------------------------------
bool __thiscall MiniPartyWin::Create(MiniPartyWin *this, int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork)
{
  MiniPartyWin *v6; // esi@1
  void *v7; // edi@1
  NiNode *v8; // esi@2
  char *v10; // eax@9
  PgSprData *v11; // eax@10
  int v12; // edi@11
  int v13; // ebx@11
  NiAVObject *v14; // eax@11
  void *v15; // eax@11
  int v16; // eax@13
  NiSourceTexture *v17; // eax@14
  PgSprData *v18; // eax@15
  PgWinSpr *v19; // eax@15
  PgWinSpr *v20; // eax@15
  NiSourceTexture *v21; // ST40_4@15
  NiNode *v22; // edx@15
  PgSprData *v23; // eax@15
  PgWinSpr *v24; // eax@15
  PgSprData *v25; // eax@15
  PgWinBar *v26; // eax@15
  PgSprData *v27; // eax@15
  PgWinBar *v28; // eax@15
  PgSprData *v29; // eax@15
  PgWinBar *v30; // eax@15
  PgSprData *v31; // eax@15
  PgWinBar *v32; // eax@15
  PgSprData *v33; // eax@18
  PgWinBar *v34; // eax@18
  PgSprData *v35; // eax@19
  PgWinBar *v36; // eax@19
  PgSprData *v37; // eax@19
  PgWinBar *v38; // eax@19
  PgSprData *v39; // eax@19
  PgWinBar *v40; // eax@19
  PgSprData *v41; // eax@20
  PgWinBar *v42; // eax@20
  PgSprData *v43; // eax@22
  PgWinSpr *v44; // eax@22
  AbstateIcon *v45; // eax@22
  PgSprData *v46; // eax@22
  PgWinSpr *v47; // eax@22
  AbstateIcon *v48; // eax@22
  PgWinBut *v49; // eax@23
  NiSourceTexture *v50; // ST40_4@23
  PgWinBut *v51; // eax@23
  PgWin *v52; // ST3C_4@23
  PgFont *v53; // eax@23
  PgWinAbbreviateText *v54; // eax@23
  NiSourceTexture *v55; // ST10_4@23
  NiNode *v56; // edx@23
  PgSprData *v57; // eax@23
  PgWinSpr *v58; // eax@23
  PgSprData *v59; // eax@23
  NiSourceTexture *v60; // eax@23
  PgSprData *v61; // eax@23
  PgWinSpr *v62; // eax@23
  NiSourceTexture *v63; // eax@23
  PopupMenuWin *v64; // eax@23
  char *v65; // eax@23
  PopupMenuTextCheck *v66; // eax@23
  char *v67; // eax@23
  PopupMenuTextCheck *v68; // eax@23
  char *v69; // eax@23
  PopupMenuTextCheck *v70; // eax@23
  char *v71; // eax@23
  PopupMenuTextCheck *v72; // eax@23
  char *v73; // eax@23
  PopupMenuTextCheck *v74; // eax@23
  UIUtil ui; // [sp+0h] [bp-88h]@15
  NiTexturePalette *i; // [sp+14h] [bp-74h]@7
  unsigned int uiWidth; // [sp+18h] [bp-70h]@15
  unsigned int uiHeight; // [sp+1Ch] [bp-6Ch]@15
  NiPointer<NiTexturingProperty> spTexProp; // [sp+20h] [bp-68h]@1
  NiSourceTexture *pkTexture; // [sp+24h] [bp-64h]@1
  PgSprData *pkSprData; // [sp+28h] [bp-60h]@20
  NiPointer<NiNode> spNode; // [sp+2Ch] [bp-5Ch]@1
  int uiTop; // [sp+30h] [bp-58h]@10
  int uiLeft; // [sp+34h] [bp-54h]@10
  char acShapeName[64]; // [sp+38h] [bp-50h]@21
  unsigned int v86; // [sp+78h] [bp-10h]@1
  int v87; // [sp+84h] [bp-4h]@1
  int v88; // [sp+88h] [bp+0h]@1

  v86 = (unsigned int)&v88 ^ __security_cookie;
  spTexProp.m_pObject = (NiTexturingProperty *)pkFrameWork;
  v6 = this;
  spNode.m_pObject = 0;
  v87 = 0;
  v7 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v7;
  if ( !v7 )
    goto LABEL_26;
  i = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v10 = Folder::Merge(&Folder::m_acMenu, "Game\\PtyWin_Mini.nif");
  PgUtil::LoadNodeNifFile(v10, &spNode, i);
  if ( !spNode.m_pObject )
    return 0;
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v7);
  if ( !PgWinFrame::Create(
          &v6->baseclass_0,
          iXPos,
          iYPos,
          v11,
          pkParent,
          (PgFrameWork *)spTexProp.m_pObject,
          "PartyMemberWin",
          0) )
  {
LABEL_26:
    v8 = spNode.m_pObject;
    v87 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  v12 = uiLeft;
  v13 = uiTop;
  v14 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EventPanel");
  v15 = NiAVObject::GetProperty(v14, 8);
  spTexProp.m_pObject = (NiTexturingProperty *)v15;
  if ( v15 )
  {
    InterlockedIncrement((volatile LONG *)v15 + 1);
    v15 = spTexProp.m_pObject;
  }
  v16 = **((_DWORD **)v15 + 10);
  LOBYTE(v87) = 1;
  if ( v16 )
  {
    v17 = *(NiSourceTexture **)(v16 + 4);
    if ( v17 )
    {
      v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EventPanel", &uiLeft, &uiTop, v17);
      v19 = PgWinSpr::CreateWin(uiLeft, uiTop, v18, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v19,
        0);
      UIUtil::UIUtil(&ui);
      LOBYTE(v87) = 2;
      UIUtil::SetOffset(&ui, v12, v13);
      UIUtil::SetParent(&ui, &v6->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      v6->m_pkSPGround = UIUtil::CreateSpr(&ui, "SPground", 0);
      v20 = UIUtil::CreateSpr(&ui, "LPground", 0);
      v21 = pkTexture;
      v22 = spNode.m_pObject;
      v6->m_pkLPGround = v20;
      v23 = PgSprData::Create(&v22->baseclass_0, "Panel02", &uiLeft, &uiTop, v21);
      v24 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v23, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v24,
        0);
      v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_Start", &uiLeft, &uiTop, pkTexture);
      v26 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v25, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkHPBarStartWin = (PgWinSpr *)v26;
      v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v26,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_Start", &uiLeft, &uiTop, pkTexture);
      v28 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v27, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkSPBarStartWin = (PgWinSpr *)v28;
      v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v28,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkSPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_End", &uiLeft, &uiTop, pkTexture);
      v30 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v29, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkHPBarEndWin = (PgWinSpr *)v30;
      v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v30,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_End", &uiLeft, &uiTop, pkTexture);
      v32 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v31, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkSPBarEndWin = (PgWinSpr *)v32;
      v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v32,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkSPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, &uiTop, pkTexture);
        v34 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v33, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v6->m_pkHPBarWin = v34;
        v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v34,
          0);
        if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Fill_SP", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
        {
          v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP", &uiLeft, &uiTop, pkTexture);
          v36 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v35, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
          v6->m_pkSPBarWin = v36;
          v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v36,
            0);
          v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_Start", &uiLeft, &uiTop, pkTexture);
          v38 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v37, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
          v6->m_pkLPBarStartWin = (PgWinSpr *)v38;
          v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v38,
            0);
          ((void (__stdcall *)(_DWORD))v6->m_pkLPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_End", &uiLeft, &uiTop, pkTexture);
          v40 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v39, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
          v6->m_pkLPBarEndWin = (PgWinSpr *)v40;
          v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v40,
            0);
          ((void (__stdcall *)(_DWORD))v6->m_pkLPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Fill_LP", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
          {
            v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP", &uiLeft, &uiTop, pkTexture);
            v42 = PgWinBar::CreateWin(
                    uiLeft - v12,
                    uiTop - v13,
                    v41,
                    &v6->baseclass_0.baseclass_0.baseclass_0,
                    BGT_RIGHT);
            v6->m_pkLPBarWin = v42;
            v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
              (NiRefObject *)v42,
              0);
            i = 0;
            pkSprData = (PgSprData *)v6->m_apkAbstateBufIconWin;
            while ( 1 )
            {
              sprintf(acShapeName, "CharBuffBox%02d");
              if ( !PgUtil::GetTriShapeRect(
                      &spNode.m_pObject->baseclass_0,
                      acShapeName,
                      &uiLeft,
                      &uiTop,
                      &uiWidth,
                      &uiHeight) )
                break;
              v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
              v44 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v43, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&pkSprData[1].m_akHitTester.m_pBase,
                (NiD3DDefaultShader *)v44);
              ((void (__stdcall *)(_DWORD))pkSprData[1].m_akHitTester.m_pBase->m_pObject[3].m_uiHeight)(0);
              LODWORD(pkSprData[1].m_akHitTester.m_pBase->m_pObject[3].m_akUVs[0].y)(0);
              v45 = AbstateIcon::CreateWin(
                      uiLeft + 2,
                      uiTop + 2,
                      uiWidth - 4,
                      uiHeight - 4,
                      &v6->baseclass_0.baseclass_0.baseclass_0,
                      0);
              NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)pkSprData, (NiD3DDefaultShader *)v45);
              (*((void (__stdcall **)(_DWORD))pkSprData->baseclass_0.vfptr->__vecDelDtor + 60))(0);
              (*((void (__stdcall **)(_DWORD))pkSprData->baseclass_0.vfptr->__vecDelDtor + 64))(0);
              sprintf(acShapeName, "CharDBuffBox%02d");
              v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
              v47 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v46, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&pkSprData[2].m_akGeomData.m_pBase,
                (NiD3DDefaultShader *)v47);
              LODWORD(pkSprData[2].m_akGeomData.m_pBase->m_pObject[2].baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.x)(0);
              ((void (__stdcall *)(_DWORD))pkSprData[2].m_akGeomData.m_pBase->m_pObject[2].baseclass_0.baseclass_0.baseclass_0.m_pkVertex)(0);
              v48 = AbstateIcon::CreateWin(
                      uiLeft + 2,
                      uiTop + 2,
                      uiWidth - 4,
                      uiHeight - 4,
                      &v6->baseclass_0.baseclass_0.baseclass_0,
                      0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&pkSprData->m_akAlphaPropertyData,
                (NiD3DDefaultShader *)v48);
              (*((void (__stdcall **)(_DWORD))pkSprData->m_akAlphaPropertyData.vfptr->__vecDelDtor + 60))(0);
              (*((void (__stdcall **)(_DWORD))pkSprData->m_akAlphaPropertyData.vfptr->__vecDelDtor + 64))(0);
              pkSprData = (PgSprData *)((char *)pkSprData + 4);
              i = (NiTexturePalette *)((char *)i + 1);
              if ( (signed int)i >= 15 )
              {
                pkSprData = PgSprData::Create(
                              &spNode.m_pObject->baseclass_0,
                              "BuffExtendNor",
                              &uiLeft,
                              &uiTop,
                              pkTexture);
                PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "BuffExtendClick");
                PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "BuffExtendOver");
                v49 = PgWinBut::CreateWin(uiLeft, uiTop, pkSprData, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
                NiPointer<PopupMenuWin>::operator_(
                  (NiPointer<NiD3DDefaultShader> *)&v6->m_pkBufExtendBtn,
                  (NiD3DDefaultShader *)v49);
                PgWin::SetToolTipWinText(&v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0, "Open");
                v50 = pkTexture;
                v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DeBuffExtendNor", &uiLeft, &uiTop, v50);
                PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "DeBuffExtendClick");
                PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "DeBuffExtendOver");
                v51 = PgWinBut::CreateWin(uiLeft, uiTop, pkSprData, &v6->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
                NiPointer<PopupMenuWin>::operator_(
                  (NiPointer<NiD3DDefaultShader> *)&v6->m_pkDeBufExtendBtn,
                  (NiD3DDefaultShader *)v51);
                PgWin::SetToolTipWinText(&v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0, "Open");
                v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                ((void (__stdcall *)(_DWORD))v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
                ((void (__stdcall *)(_DWORD))v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
                v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
                v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
                ((void (__stdcall *)(_DWORD))v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                ((void (__stdcall *)(_DWORD))v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                PgUtil::GetTriShapeRect(
                  &spNode.m_pObject->baseclass_0,
                  "CharName",
                  &uiLeft,
                  &uiTop,
                  &uiWidth,
                  &uiHeight);
                v52 = g_pkToolTipWin;
                v53 = Font::Get(0);
                v54 = PgWinAbbreviateText::CreateWin(
                        uiLeft - v12,
                        uiTop - v13,
                        uiWidth,
                        uiHeight,
                        v53,
                        &v6->baseclass_0.baseclass_0.baseclass_0,
                        "2",
                        0,
                        0,
                        1,
                        v52,
                        0x1Eu);
                v55 = pkTexture;
                v56 = spNode.m_pObject;
                v6->m_pkNameTextWin = v54;
                v57 = PgSprData::Create(&v56->baseclass_0, "Chief_Party", &uiLeft, &uiTop, v55);
                v58 = PgWinSpr::CreateWin(
                        uiLeft - v12,
                        uiTop - v13,
                        v57,
                        &v6->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
                v6->m_pkPtyChiefWin = v58;
                v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                  (NiRefObject *)v58,
                  1u);
                v59 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel_job", &uiLeft, &uiTop, pkTexture);
                PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v59, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
                v60 = MenuTexMgr::GetTexture(0x12u);
                v61 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Char_Job", &uiLeft, &uiTop, v60);
                v62 = PgWinSpr::CreateWin(
                        uiLeft - v12,
                        uiTop - v13,
                        v61,
                        &v6->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
                v6->m_pkPtyCharJob = v62;
                v62->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                v63 = MenuTexMgr::GetTexture(1u);
                v64 = PopupMenuWin::CreateWin(v63, 4u, 4u, 0);
                NiPointer<PopupMenuWin>::operator_(
                  (NiPointer<NiD3DDefaultShader> *)&v6->m_spPopupMenu,
                  (NiD3DDefaultShader *)v64);
                v6->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
                  &v6->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
                  &v6->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
                PopupMenuWin::Clear(v6->m_spPopupMenu.m_pObject);
                v65 = TextData2::Get(0x3569283Du);
                v66 = PopupMenuTextCheck::CreateWin(v65, 0, 0, 0, 0, 0);
                v66->baseclass_0.m_ePopupMenuID = 1015;
                PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v66->baseclass_0);
                v67 = TextData2::Get(0x356C3181u);
                v68 = PopupMenuTextCheck::CreateWin(v67, 0, 0, 0, 0, 0);
                v68->baseclass_0.m_ePopupMenuID = 1016;
                PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v68->baseclass_0);
                v69 = TextData2::Get(0x3566338Fu);
                v70 = PopupMenuTextCheck::CreateWin(v69, 0, 0, 0, 0, 0);
                v70->baseclass_0.m_ePopupMenuID = 1017;
                PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v70->baseclass_0);
                v71 = TextData2::Get(0xDB1D2246u);
                v72 = PopupMenuTextCheck::CreateWin(v71, 0, 0, 0, 0, 0);
                v72->baseclass_0.m_ePopupMenuID = 1018;
                PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v72->baseclass_0);
                v73 = TextData2::Get(0xDE13DBE2u);
                v74 = PopupMenuTextCheck::CreateWin(v73, 0, 0, 0, 0, 0);
                v74->baseclass_0.m_ePopupMenuID = 1019;
                PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v74->baseclass_0);
                PopupMenuWin::FinishMenu(v6->m_spPopupMenu.m_pObject, 0);
                ((void (__stdcall *)(_DWORD))v6->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                MiniPartyWin::SetOption(v6, 0xFFFFFFFFu);
                v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                  (NiRefObject *)v6,
                  1u);
                v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
                  (NiRefObject *)v6,
                  0);
                LOBYTE(v87) = 1;
                UIUtil::_UIUtil(&ui);
                LOBYTE(v87) = 0;
                NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
                v87 = -1;
                NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
                return 1;
              }
            }
          }
        }
      }
      LOBYTE(v87) = 1;
      UIUtil::_UIUtil(&ui);
    }
  }
  LOBYTE(v87) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
  v87 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0055AD20) --------------------------------------------------------
void __thiscall MiniPartyWin::UpdateMeWin(MiniPartyWin *this, float fCurTime)
{
  MiniPartyWin *v2; // edi@1
  int v3; // esi@4
  signed int v4; // ebx@4
  PartyMemberInfo *v5; // eax@6
  _BYTE v6[20]; // ST00_20@7
  Char *v7; // eax@7
  Char *v8; // esi@7
  bool v9; // zf@8
  int DBufNum; // [sp+Ch] [bp-8h]@3
  int BufNum; // [sp+10h] [bp-4h]@3

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    if ( v2->m_bOpenPopUp )
    {
      ((void (__thiscall *)(MiniPartyWin *, int *, int *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
        v2,
        &DBufNum,
        &BufNum);
      ((void (__stdcall *)(int, int))v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        DBufNum,
        BufNum);
      PgWinMgr::OpenPopupWin(
        &Pgg_kWinMgr,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        &v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      v2->m_bOpenPopUp = 0;
    }
    v3 = (int)v2->m_apkAbstateBufIconWin;
    v4 = 15;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 248))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 60) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 60) + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 60) + 248))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 120) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 180) + 256))(0);
      AbstateIcon::ClearDuplicateText(*(AbstateIcon **)v3);
      AbstateIcon::ClearDuplicateText(*(AbstateIcon **)(v3 + 60));
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v5 = v2->m_pkMemberInfo;
    if ( v5 )
    {
      *(_DWORD *)v6 = *(_DWORD *)&v5->m_kCharID.n5_name[0];
      *(_QWORD *)&v6[4] = *(_QWORD *)&v5->m_kCharID.n5_name[4];
      *(_QWORD *)&v6[12] = *(_QWORD *)&v5->m_kCharID.n5_name[12];
      v7 = CharMgr::GetUserChar(&g_kCharMgr, *(Name5 *)v6);
      v8 = v7;
      if ( v7 )
      {
        AbStateInfectee::GetAbStateList(&v7->baseclass_0);
        v9 = (v2->m_uiOption & 1) == 0;
        DBufNum = 0;
        BufNum = 0;
        if ( !v9 )
          MiniPartyWin::SetBuffUI(v2, v8, Skill, &BufNum);
        if ( v2->m_uiOption & 2 )
          MiniPartyWin::SetBuffUI(v2, v8, Scroll, &BufNum);
        if ( v2->m_uiOption & 4 )
          MiniPartyWin::SetBuffUI(v2, v8, Potion, &BufNum);
        if ( v2->m_uiOption & 8 )
          MiniPartyWin::SetBuffUI(v2, v8, 0, &BufNum);
        if ( v2->m_uiOption & 0x10 )
          MiniPartyWin::SetBuffUI(v2, v8, Debuff, &DBufNum);
      }
    }
  }
}

//----- (0055AEF0) --------------------------------------------------------
void __thiscall MiniPartyWin::MiniPartyWin(MiniPartyWin *this)
{
  MiniPartyWin *v1; // esi@1
  PopupMenuWin *v2; // edi@1
  int v3; // edi@6
  int v4; // ebx@7
  int v5; // ebx@12
  int v6; // ebx@17
  int v7; // ebx@22
  signed int v8; // [sp+4h] [bp-10h]@6

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniPartyWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniPartyWin::_vftable_;
  v1->m_spPopupMenu.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateDeBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateDBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_pkBufExtendBtn.m_pObject = 0;
  v1->m_pkDeBufExtendBtn.m_pObject = 0;
  v2 = v1->m_spPopupMenu.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spPopupMenu.m_pObject = 0;
  }
  v1->m_bOpenPopUp = 0;
  v3 = (int)v1->m_apkAbstateDeBufIconWin;
  v8 = 15;
  do
  {
    v4 = *(_DWORD *)(v3 - 60);
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)(v3 - 60) = 0;
    }
    v5 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      *(_DWORD *)v3 = 0;
    }
    v6 = *(_DWORD *)(v3 + 60);
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      *(_DWORD *)(v3 + 60) = 0;
    }
    v7 = *(_DWORD *)(v3 + 120);
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
      *(_DWORD *)(v3 + 120) = 0;
    }
    v3 += 4;
    --v8;
  }
  while ( v8 );
  v1->m_pkMemberInfo = 0;
  v1->m_pkLPBarWin = 0;
  v1->m_pkLPBarStartWin = 0;
  v1->m_pkLPBarEndWin = 0;
  v1->m_pkLPGround = 0;
  v1->m_pkSPGround = 0;
}
// 9A1884: using guessed type int (__stdcall *MiniPartyWin___vftable_)(int uiFlags);
// 9A18A4: using guessed type int (__thiscall *MiniPartyWin___vftable_)(void *p, char);

//----- (0055B100) --------------------------------------------------------
void __thiscall MiniPartyWin::SetInfo(MiniPartyWin *this, PartyMemberInfo *pkInfo)
{
  MiniPartyWin *v2; // esi@1
  PgWinAbbreviateText *v3; // ecx@2
  int v4; // eax@3
  int v5; // edx@3
  int v6; // ecx@3
  int v7; // eax@3
  PgWinAbbreviateText *v8; // ecx@3
  PgWinBar *v9; // ecx@6
  PgWinBar *v10; // ecx@7
  double v11; // st7@7
  int v12; // eax@12
  int v13; // eax@20
  PgWinSpr *v14; // ecx@22
  int v15; // eax@27
  char v16; // al@45
  unsigned int v17; // ebx@52
  int v18; // eax@59
  int v19; // edi@59
  unsigned int v20; // eax@59
  double v21; // st7@59
  int (__thiscall *v22)(_DWORD); // eax@59
  unsigned int v23; // eax@59
  double v24; // st7@59
  PgSpr *v25; // eax@59
  PgSprData *v26; // eax@60
  NiScreenElementsData *v27; // edi@62
  void *v28; // eax@62
  char *v29; // eax@63
  signed int v30; // [sp-4h] [bp-58h]@2
  D3DXCOLOR *v31; // [sp-4h] [bp-58h]@4
  int v32; // [sp-4h] [bp-58h]@10
  int v33; // [sp-4h] [bp-58h]@14
  int v34; // [sp-4h] [bp-58h]@18
  signed int v35; // [sp-4h] [bp-58h]@22
  int v36; // [sp-4h] [bp-58h]@25
  int v37; // [sp-4h] [bp-58h]@41
  float fy; // [sp+Ch] [bp-48h]@59
  NiPoint2 kValue; // [sp+10h] [bp-44h]@62
  float cHeightInTex; // [sp+18h] [bp-3Ch]@59
  float fx; // [sp+1Ch] [bp-38h]@52
  float cWidthInTex; // [sp+20h] [bp-34h]@6
  Name5 kMasterID; // [sp+24h] [bp-30h]@33
  char acName[21]; // [sp+38h] [bp-1Ch]@3
  unsigned int v45; // [sp+50h] [bp-4h]@1
  int v46; // [sp+54h] [bp+0h]@1

  v45 = (unsigned int)&v46 ^ __security_cookie;
  v2 = this;
  if ( pkInfo )
  {
    this->m_pkMemberInfo = pkInfo;
    v4 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[0];
    v5 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[8];
    *(_DWORD *)&acName[4] = *(_DWORD *)&pkInfo->m_kCharID.n5_name[4];
    v6 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[16];
    *(_DWORD *)acName = v4;
    v7 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[12];
    *(_DWORD *)&acName[16] = v6;
    v8 = v2->m_pkNameTextWin;
    *(_DWORD *)&acName[8] = v5;
    *(_DWORD *)&acName[12] = v7;
    acName[20] = 0;
    ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acName);
    if ( pkInfo->m_ucStatus )
      v31 = &Color::m_kDxWhiteColor;
    else
      v31 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
    ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v31);
    v9 = v2->m_pkHPBarWin;
    cWidthInTex = (double)pkInfo->m_iMaxHP;
    v9->m_fCurValue = (double)pkInfo->m_iHP;
    v9->m_fMaxValue = cWidthInTex;
    PgWinBar::OnChangeValue(v9);
    switch ( pkInfo->m_byChrClass )
    {
      case 0x1A:
      case 0x1B:
        v10 = v2->m_pkLPBarWin;
        cWidthInTex = (double)pkInfo->m_iMaxLP;
        v11 = (double)pkInfo->m_iLP;
        break;
      default:
        v10 = v2->m_pkSPBarWin;
        cWidthInTex = (double)pkInfo->m_iMaxSP;
        v11 = (double)pkInfo->m_iSP;
        break;
    }
    v10->m_fCurValue = v11;
    v10->m_fMaxValue = cWidthInTex;
    PgWinBar::OnChangeValue(v10);
    ((void (__stdcall *)(signed int))v2->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v32 = pkInfo->m_iHP > 0;
    ((void (__stdcall *)(int))v2->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v32);
    v12 = pkInfo->m_iMaxHP;
    v33 = pkInfo->m_iHP == v12 && v12;
    ((void (__stdcall *)(int))v2->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v33);
    switch ( pkInfo->m_byChrClass )
    {
      case 0x1A:
      case 0x1B:
        ((void (__stdcall *)(signed int))v2->m_pkLPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v2->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v34 = pkInfo->m_iLP > 0;
        ((void (__stdcall *)(int))v2->m_pkLPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v34);
        v13 = pkInfo->m_iMaxLP;
        if ( pkInfo->m_iLP != v13 || !v13 )
        {
          v14 = v2->m_pkLPBarEndWin;
          goto LABEL_31;
        }
        v14 = v2->m_pkLPBarEndWin;
        v35 = 1;
        break;
      default:
        ((void (__stdcall *)(_DWORD))v2->m_pkLPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v2->m_pkSPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v2->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v36 = pkInfo->m_iSP > 0;
        ((void (__stdcall *)(int))v2->m_pkSPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v36);
        v15 = pkInfo->m_iMaxSP;
        if ( pkInfo->m_iSP == v15 && v15 )
        {
          v14 = v2->m_pkSPBarEndWin;
          v35 = 1;
        }
        else
        {
          v14 = v2->m_pkSPBarEndWin;
LABEL_31:
          v35 = 0;
        }
        break;
    }
    ((void (__stdcall *)(signed int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v35);
    if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
    {
      v37 = *(_QWORD *)&g_kRaidinfo.m_kRaidLeaderID.n5_name[0] == *(_QWORD *)&pkInfo->m_kCharID.n5_name[0]
         && *(_QWORD *)&g_kRaidinfo.m_kRaidLeaderID.n5_name[8] == *(_QWORD *)&pkInfo->m_kCharID.n5_name[8]
         && *(_DWORD *)&g_kRaidinfo.m_kRaidLeaderID.n5_name[16] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[16];
      ((void (__stdcall *)(int))v2->m_pkPtyChiefWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v37);
    }
    else
    {
      Party::GetPartyMasterID(&g_kParty, &kMasterID);
      if ( *(_QWORD *)&kMasterID != *(_QWORD *)&pkInfo->m_kCharID.n5_name[0]
        || *(_QWORD *)&kMasterID.n5_name[8] != *(_QWORD *)&pkInfo->m_kCharID.n5_name[8]
        || *(_DWORD *)&kMasterID.n5_name[16] != *(_DWORD *)&pkInfo->m_kCharID.n5_name[16] )
        ((void (__stdcall *)(_DWORD))v2->m_pkPtyChiefWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      else
        ((void (__stdcall *)(signed int))v2->m_pkPtyChiefWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    switch ( pkInfo->m_byChrClass )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        v16 = 1;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        v16 = 6;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        v16 = 11;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        v16 = 16;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        v16 = 21;
        break;
      case 0x1A:
      case 0x1B:
        v16 = 26;
        break;
      default:
        v16 = 0;
        break;
    }
    fx = 0.0;
    v17 = (unsigned __int8)v16;
    switch ( v16 )
    {
      case 1:
        fx = 0.0;
        break;
      case 6:
        LODWORD(fx) = 1;
        break;
      case 0x10:
        LODWORD(fx) = 2;
        break;
      case 0xB:
        LODWORD(fx) = 3;
        break;
      case 0x15:
        LODWORD(fx) = 4;
        break;
      case 0x1A:
        LODWORD(fx) = 5;
        break;
      default:
        break;
    }
    v18 = ((int (*)(void))v2->m_pkPtyCharJob->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
    v19 = v18;
    v20 = (*(int (__thiscall **)(int))(*(_DWORD *)v18 + 60))(v18);
    LODWORD(cWidthInTex) = v20;
    v21 = 16.0 / (double)v20;
    v22 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v19 + 64);
    cWidthInTex = v21;
    v23 = v22(v19);
    LODWORD(cHeightInTex) = v23;
    v24 = (double)v23;
    v25 = v2->m_pkPtyCharJob->m_spSpr.m_pObject;
    cHeightInTex = 16.0 / v24;
    fx = (double)SLODWORD(fx) * cWidthInTex;
    fy = cHeightInTex + cHeightInTex;
    if ( v25 )
      v26 = v25->m_spSprData.m_pObject;
    else
      v26 = 0;
    v27 = v26->m_akGeomData.m_pBase->m_pObject;
    kValue.x = fx;
    kValue.y = cHeightInTex + cHeightInTex;
    NiScreenElementsData::SetTexture(v27, 0, 0, 0, &kValue);
    kValue.x = fx;
    cHeightInTex = fy + cHeightInTex;
    kValue.y = cHeightInTex;
    NiScreenElementsData::SetTexture(v27, 0, 1, 0, &kValue);
    cWidthInTex = fx + cWidthInTex;
    kValue.x = cWidthInTex;
    kValue.y = cHeightInTex;
    NiScreenElementsData::SetTexture(v27, 0, 2, 0, &kValue);
    kValue.x = cWidthInTex;
    kValue.y = fy;
    NiScreenElementsData::SetTexture(v27, 0, 3, 0, &kValue);
    v28 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), v17);
    if ( v28 )
      v29 = (char *)v28 + 21;
    else
      v29 = &byte_9788EB;
    PgWin::SetToolTipWinText(&v2->m_pkPtyCharJob->baseclass_0, v29);
    v30 = 1;
  }
  else
  {
    v3 = this->m_pkNameTextWin;
    v2->m_pkMemberInfo = 0;
    ((void (__stdcall *)(_UNKNOWN *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A16D9);
    v2->m_pkMemberInfo = 0;
    v30 = 0;
  }
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2,
    v30);
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (0055B740) --------------------------------------------------------
MiniPartyWin *__cdecl MiniPartyWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  MiniPartyWin *v9; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x29Cu);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    MiniPartyWin::MiniPartyWin((MiniPartyWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( MiniPartyWin::Create((MiniPartyWin *)v7, iXPos, iYPos, pkParent, pkNode, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (MiniPartyWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    }
    v9 = 0;
  }
  return v9;
}

//----- (0055B880) --------------------------------------------------------
void *__thiscall MiniPartyWin::_vector_deleting_destructor_(MiniPartyWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MiniPartyWin::_MiniPartyWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0055B8B0) --------------------------------------------------------
void __thiscall MoneyWin::MoneyWin(MoneyWin *this)
{
  MoneyWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_uiCurFoscus = 0;
  v1->m_apkTitleText = 0;
  v1->m_pkTitleText2 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoneyWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoneyWin::_vftable_;
}
// 9A1E40: using guessed type int (__stdcall *MoneyWin___vftable_)(int uiFlags);
// 9A1E5C: using guessed type int (__thiscall *MoneyWin___vftable_)(void *p, char);

//----- (0055B8E0) --------------------------------------------------------
void __thiscall MoneyWin::_MoneyWin(MoneyWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoneyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoneyWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A1E40: using guessed type int (__stdcall *MoneyWin___vftable_)(int uiFlags);
// 9A1E5C: using guessed type int (__thiscall *MoneyWin___vftable_)(void *p, char);

//----- (0055B900) --------------------------------------------------------
void __thiscall MoneyWin::OnCmdCancel(MoneyWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, this->m_pkRevWin, 5u, this->m_uiCancelMsg, 0);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
}

//----- (0055B930) --------------------------------------------------------
void __thiscall MoneyWin::Open(MoneyWin *this, PgWin *pkRevWin, unsigned int uiOkMsg, unsigned int uiCancelMsg, char *pcText)
{
  MoneyWin *v5; // esi@1
  EditWin *v6; // ecx@1

  v5 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  v5->m_pkRevWin = pkRevWin;
  v6 = v5->m_pkCopperEdit;
  v5->m_uiCancelMsg = uiCancelMsg;
  v5->m_uiOkMsg = uiOkMsg;
  ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_9A1AE1);
  ((void (__stdcall *)(_DWORD))v5->m_pkSilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_9A1AE2);
  ((void (__stdcall *)(_DWORD))v5->m_pkGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_9A1AE3);
  ((void (__stdcall *)(_DWORD))v5->m_pkGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_9A1AEA);
  MoneyWin::i64Money = 0i64;
  PgWinMgr::DoModal(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
}

//----- (0055B9E0) --------------------------------------------------------
void __thiscall MoneyWin::SetEditFocus(MoneyWin *this, unsigned int uiFocus)
{
  MoneyWin *v2; // esi@1
  EditWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkCopperEdit;
  if ( v3 )
  {
    v2->m_uiCurFoscus = uiFocus;
    switch ( uiFocus )
    {
      case 0u:
        ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkSilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
        break;
      case 2u:
        ((void (*)(void))v2->m_pkSilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
        break;
      case 3u:
        ((void (*)(void))v2->m_pkGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
        break;
      case 4u:
        v3 = v2->m_pkGemEdit;
        goto LABEL_7;
      case 1u:
LABEL_7:
        ((void (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
        break;
      default:
        return;
    }
  }
}

//----- (0055BAB0) --------------------------------------------------------
void __thiscall MoneyWin::OnEditEnd(MoneyWin *this, unsigned int wParam, int lParam)
{
  MoneyWin *v3; // eax@1
  EditWin *v4; // ecx@8

  v3 = this;
  switch ( this->m_uiCurFoscus )
  {
    case 1u:
      if ( this->m_pkCopperEdit )
      {
        this->m_uiCurFoscus = 4;
        ((void (__thiscall *)(_DWORD))this->m_pkGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)(this->m_pkGemEdit);
      }
      break;
    case 4u:
      if ( this->m_pkCopperEdit )
      {
        this->m_uiCurFoscus = 3;
        ((void (__thiscall *)(_DWORD))this->m_pkGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)(this->m_pkGoldEdit);
      }
      break;
    case 3u:
      if ( this->m_pkCopperEdit )
      {
        this->m_uiCurFoscus = 2;
        ((void (__thiscall *)(_DWORD))this->m_pkSilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)(this->m_pkSilverEdit);
      }
      break;
    case 2u:
      v4 = this->m_pkCopperEdit;
      if ( v4 )
      {
        v3->m_uiCurFoscus = 1;
        ((void (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
      }
      break;
    default:
      return;
  }
}

//----- (0055BB80) --------------------------------------------------------
void __thiscall MoneyWin::SetTitle1(MoneyWin *this, char *pcTitle)
{
  if ( this->m_apkTitleText )
    ((void (__stdcall *)(_DWORD))this->m_apkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcTitle);
}

//----- (0055BBB0) --------------------------------------------------------
void __thiscall MoneyWin::SetTitle2(MoneyWin *this, char *pcTitle)
{
  if ( this->m_pkTitleText2 )
    ((void (__stdcall *)(_DWORD))this->m_pkTitleText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcTitle);
}

//----- (0055BC00) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::SetTitle1(HolyRewardMoneyWin *this, char *pcTitle)
{
  if ( this->m_pkTitleText1 )
    ((void (__stdcall *)(_DWORD))this->m_pkTitleText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcTitle);
}

//----- (0055BC30) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::SetTitle2(HolyRewardMoneyWin *this, char *pcTitle)
{
  if ( this->m_pkTitleText2 )
    ((void (__stdcall *)(_DWORD))this->m_pkTitleText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcTitle);
}

//----- (0055BC60) --------------------------------------------------------
void __thiscall MoneyWin::OnShowWin(MoneyWin *this)
{
  MoneyWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_pkCopperEdit;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 1;
    ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
}

//----- (0055BC90) --------------------------------------------------------
void __thiscall MoneyWin::OnClose(MoneyWin *this)
{
  MoneyWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkCopperEdit;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 0;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_pkSilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_pkGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v1->m_pkGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  }
}

//----- (0055BCF0) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::OnCmdOk(HolyRewardMoneyWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcHolyPromiseWithDrawCenRewardReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
}

//----- (0055BD10) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::Open(HolyRewardMoneyWin *this, unsigned int uiOkMsg, unsigned int uiCancelMsg, char *pcText1, char *pcText2)
{
  HolyRewardMoneyWin *v5; // esi@1
  PgWinText *v6; // ecx@2
  PgWinText *v7; // ecx@5

  v5 = this;
  if ( pcText1 )
  {
    v6 = this->m_pkTitleText1;
    if ( v6 )
      ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText1);
  }
  if ( pcText2 )
  {
    v7 = v5->m_pkTitleText2;
    if ( v7 )
      ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText2);
  }
  v5->m_uiOkMsg = uiOkMsg;
  v5->m_uiCancelMsg = uiCancelMsg;
  PgWinMgr::DoModal(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
}

//----- (0055BD80) --------------------------------------------------------
bool __thiscall MoneyWin::Create(MoneyWin *this, PgFrameWork *pkFrameWork)
{
  MoneyWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgSprData *v12; // ebx@18
  PgWin *v13; // ST38_4@18
  PgFont *v14; // ST34_4@18
  unsigned int v15; // ST30_4@18
  unsigned int v16; // eax@18
  PgWinText *v17; // ebx@18
  char *v18; // eax@18
  PgSprData *v19; // ebx@18
  PgWin *v20; // ST38_4@18
  PgFont *v21; // ST34_4@18
  unsigned int v22; // ST30_4@18
  unsigned int v23; // eax@18
  PgWinText *v24; // ebx@18
  char *v25; // eax@18
  PgSprData *v26; // eax@18
  bool v27; // bl@20
  PgSprData *v28; // eax@20
  bool v29; // bl@22
  PgSprData *v30; // eax@22
  bool v31; // bl@24
  PgSprData *v32; // eax@24
  PgSprData *v33; // eax@26
  PgWin *v34; // ebx@26
  PgFont *v35; // ST34_4@26
  unsigned int v36; // ST30_4@26
  unsigned int v37; // eax@26
  PgWinText *v38; // eax@26
  PgSprData *v39; // eax@26
  PgWin *v40; // ST38_4@26
  PgFont *v41; // ST34_4@26
  unsigned int v42; // ST30_4@26
  unsigned int v43; // eax@26
  PgWinText *v44; // edi@26
  NiRefObjectVtbl *v45; // ebx@26
  char *v46; // eax@26
  void *(__thiscall *v47)(NiRefObject *, unsigned int); // edx@26
  NiNode *v48; // esi@27
  const char *v49; // [sp+2Ch] [bp-54h]@16
  int *v50; // [sp+30h] [bp-50h]@16
  int *v51; // [sp+34h] [bp-4Ch]@16
  NiSourceTexture *v52; // [sp+38h] [bp-48h]@16
  UIUtil ui; // [sp+4Ch] [bp-34h]@18
  unsigned int uiWidth; // [sp+60h] [bp-20h]@18
  unsigned int uiHeight; // [sp+64h] [bp-1Ch]@18
  NiPointer<NiNode> spNode; // [sp+68h] [bp-18h]@1
  int uiLeft; // [sp+6Ch] [bp-14h]@11
  int uiTop; // [sp+70h] [bp-10h]@11
  int v59; // [sp+7Ch] [bp-4h]@1
  NiRefObjectVtbl *pkFrameWorka; // [sp+88h] [bp+8h]@18
  NiRefObjectVtbl *pkFrameWorkb; // [sp+88h] [bp+8h]@18

  v2 = this;
  spNode.m_pObject = 0;
  v59 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v59 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\Money.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "MoneyWin", 0) )
  {
    v4 = spNode.m_pObject;
    v59 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v52 = v10;
    v51 = &uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  else
  {
    v52 = 0;
    v51 = &uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v49, v50, v51, v52);
  PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "OKClick");
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "OKOver");
  v13 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v14 = Font::Get(0);
  v15 = ((int (__thiscall *)(PgWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v13);
  v16 = ((int (__thiscall *)(PgWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v13);
  v17 = PgWinText::CreateWin(0, 1, v16, v15, v14, v13, 0, 0);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  pkFrameWorka = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData::Get(0x4F5F499Fu);
  pkFrameWorka[118].__vecDelDtor((NiRefObject *)v17, (unsigned int)v18);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "CancelClick");
  PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "CancelOver");
  v20 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v21 = Font::Get(0);
  v22 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v20);
  v23 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v20);
  v24 = PgWinText::CreateWin(0, 1, v23, v22, v21, v20, 0, 0);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v24,
    5u);
  pkFrameWorkb = v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = TextData::Get(0x88A297E1u);
  pkFrameWorkb[118].__vecDelDtor((NiRefObject *)v24, (unsigned int)v25);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v59) = 1;
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v2->m_pkCopperBtn = UIUtil::CreateBtn(&ui, 0, "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", v3);
  v2->m_pkSilverBtn = UIUtil::CreateBtn(&ui, 0, "MySilverBtn", "MySilverBtn", "MySilverBtn", "MySilverBtn", v3);
  v2->m_pkGoldBtn = UIUtil::CreateBtn(&ui, 0, "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", v3);
  v2->m_pkGemBtn = UIUtil::CreateBtn(&ui, 0, "MyGemBtn", "MyGemBtn", "MyGemBtn", "MyGemBtn", v3);
  LOBYTE(v24) = PgUtil::GetTriShapeRect(
                  &spNode.m_pObject->baseclass_0,
                  "MyCopperInput",
                  &uiLeft,
                  &uiTop,
                  &uiWidth,
                  &uiHeight);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyCopperInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( (_BYTE)v24 )
    v2->m_pkCopperEdit = EditWin::CreateWin(
                           uiLeft + 2,
                           uiTop + 4,
                           uiWidth,
                           uiHeight,
                           &v2->baseclass_0.baseclass_0.baseclass_0,
                           NUMBER,
                           3u,
                           3u,
                           0,
                           0,
                           1);
  v27 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MySilverInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MySilverInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v27 )
    v2->m_pkSilverEdit = EditWin::CreateWin(
                           uiLeft + 2,
                           uiTop + 4,
                           uiWidth,
                           uiHeight,
                           &v2->baseclass_0.baseclass_0.baseclass_0,
                           NUMBER,
                           3u,
                           3u,
                           0,
                           0,
                           1);
  v29 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MyGoldInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyGoldInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v29 )
    v2->m_pkGoldEdit = EditWin::CreateWin(
                         uiLeft + 2,
                         uiTop + 4,
                         uiWidth,
                         uiHeight,
                         &v2->baseclass_0.baseclass_0.baseclass_0,
                         NUMBER,
                         2u,
                         3u,
                         0,
                         0,
                         1);
  v31 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MyGemInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyGemInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v31 )
    v2->m_pkGemEdit = EditWin::CreateWin(
                        uiLeft + 2,
                        uiTop + 4,
                        uiWidth,
                        uiHeight,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        NUMBER,
                        3u,
                        3u,
                        0,
                        0,
                        1);
  v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, v3);
  v34 = (PgWin *)PgWinSpr::CreateWin(uiLeft, uiTop, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v34, 0);
  v35 = Font::Get(0);
  v36 = ((int (__thiscall *)(PgWin *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v34);
  v37 = ((int (__thiscall *)(PgWin *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v34);
  v38 = PgWinText::CreateWin(0, 1, v37, v36, v35, v34, 0, 0);
  v2->m_apkTitleText = v38;
  v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v38,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_apkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A1ACF);
  ((void (__stdcall *)(_DWORD))v2->m_apkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox01", &uiLeft, &uiTop, v3);
  v40 = (PgWin *)PgWinSpr::CreateWin(uiLeft, uiTop, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v41 = Font::Get(0);
  v42 = ((int (__thiscall *)(PgWin *))v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v40);
  v43 = ((int (__thiscall *)(PgWin *))v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v40);
  v44 = PgWinText::CreateWin(0, 1, v43, v42, v41, v40, 0, 0);
  v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v44,
    5u);
  v45 = v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v46 = TextData::Get(0x3B609389u);
  v45[118].__vecDelDtor((NiRefObject *)v44, (unsigned int)v46);
  v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v44,
    0);
  v47 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
  v2->m_pkTitleText2 = v44;
  ((void (__thiscall *)(MoneyWin *, unsigned int, unsigned int, _DWORD, _DWORD))v47)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v59) = 0;
  UIUtil::_UIUtil(&ui);
  v59 = -1;
  if ( spNode.m_pObject )
  {
    v48 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v48 )
        v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0055C520) --------------------------------------------------------
void __thiscall MoneyWin::OnCmdOk(MoneyWin *this)
{
  MoneyWin *v1; // esi@1
  const char *v2; // eax@2
  int v3; // edi@2
  const char *v4; // eax@2
  int v5; // ebx@2
  const char *v6; // eax@2
  int v7; // ST30_4@2
  const char *v8; // eax@2
  int v9; // eax@2
  __int64 v10; // qax@2
  char *v11; // eax@7

  v1 = this;
  if ( !this->m_pkRevWin )
    goto LABEL_6;
  v2 = (const char *)((int (*)(void))this->m_pkCopperEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = atoi(v2);
  v4 = (const char *)((int (*)(void))v1->m_pkSilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v5 = atoi(v4);
  v6 = (const char *)((int (*)(void))v1->m_pkGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v7 = atoi(v6);
  v8 = (const char *)((int (*)(void))v1->m_pkGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v9 = atoi(v8);
  v10 = User::ConvertMoney(v3, v5, v7, v9);
  MoneyWin::i64Money = v10;
  if ( SHIDWORD(v10) >= 0 && (SHIDWORD(v10) > 0 || (_DWORD)v10) )
  {
    HIDWORD(v10) = v1->m_pkRevWin;
    LODWORD(v1->m_i64InputMoney) = v10;
    HIDWORD(v1->m_i64InputMoney) = HIDWORD(MoneyWin::i64Money);
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, HIDWORD(v10), 5u, v1->m_uiOkMsg, (int)&v1->m_i64InputMoney);
LABEL_6:
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    return;
  }
  v11 = TextData::Get(0x3BAFA08Du);
  MsgBox::Modal(MSGBOX_OK, v11);
}

//----- (0055C630) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::HolyRewardMoneyWin(HolyRewardMoneyWin *this)
{
  HolyRewardMoneyWin *v1; // esi@1
  PgWinBut *v2; // edi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyRewardMoneyWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyRewardMoneyWin::_vftable_;
  v1->m_pkOkBut.m_pObject = 0;
  v1->m_pkTitleText1 = 0;
  v1->m_pkTitleText2 = 0;
  v2 = v1->m_pkOkBut.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v2,
          1u);
    }
    v1->m_pkOkBut.m_pObject = 0;
  }
}
// 9A2080: using guessed type int (__stdcall *HolyRewardMoneyWin___vftable_)(int uiFlags);
// 9A209C: using guessed type int (__thiscall *HolyRewardMoneyWin___vftable_)(void *p, char);

//----- (0055C6D0) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::_HolyRewardMoneyWin(HolyRewardMoneyWin *this)
{
  PgWinFrame *v1; // esi@1
  PgWinBut *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyRewardMoneyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyRewardMoneyWin::_vftable_;
  v2 = this->m_pkOkBut.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9A2080: using guessed type int (__stdcall *HolyRewardMoneyWin___vftable_)(int uiFlags);
// 9A209C: using guessed type int (__thiscall *HolyRewardMoneyWin___vftable_)(void *p, char);

//----- (0055C760) --------------------------------------------------------
bool __thiscall HolyRewardMoneyWin::Create(HolyRewardMoneyWin *this, PgFrameWork *pkFrameWork)
{
  HolyRewardMoneyWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgSprData *v12; // ebx@18
  PgWinBut *v13; // eax@18
  PgWinBut *v14; // ebx@18
  PgWin *v15; // ST70_4@18
  PgFont *v16; // ST6C_4@18
  unsigned int v17; // ST68_4@18
  unsigned int v18; // eax@18
  PgWinText *v19; // ebx@18
  char *v20; // eax@18
  PgSprData *v21; // ebx@18
  PgWin *v22; // ST70_4@18
  PgFont *v23; // ST6C_4@18
  unsigned int v24; // ST68_4@18
  unsigned int v25; // eax@18
  PgWinText *v26; // ebx@18
  char *v27; // eax@18
  PgWinBut *v28; // eax@18
  PgWinBut *v29; // eax@18
  PgWinBut *v30; // eax@18
  PgWinBut *v31; // eax@18
  PgSprData *v32; // eax@18
  PgFont *v33; // eax@19
  PgWinText *v34; // eax@19
  bool v35; // bl@20
  PgSprData *v36; // eax@20
  PgFont *v37; // eax@21
  PgWinText *v38; // eax@21
  bool v39; // bl@22
  PgSprData *v40; // eax@22
  PgFont *v41; // eax@23
  PgWinText *v42; // eax@23
  bool v43; // bl@24
  PgSprData *v44; // eax@24
  PgFont *v45; // eax@25
  PgWinText *v46; // eax@25
  PgSprData *v47; // eax@26
  PgWin *v48; // ebx@26
  PgFont *v49; // ST6C_4@26
  unsigned int v50; // ST68_4@26
  unsigned int v51; // eax@26
  PgWinText *v52; // eax@26
  PgSprData *v53; // eax@26
  PgWin *v54; // ST70_4@26
  PgFont *v55; // ST6C_4@26
  unsigned int v56; // ST68_4@26
  unsigned int v57; // eax@26
  PgWinText *v58; // eax@26
  NiRefObjectVtbl *v59; // edi@26
  char *v60; // eax@26
  NiNode *v61; // esi@27
  const char *v62; // [sp+6Ch] [bp-54h]@16
  int *v63; // [sp+70h] [bp-50h]@16
  int *v64; // [sp+74h] [bp-4Ch]@16
  NiSourceTexture *v65; // [sp+78h] [bp-48h]@16
  UIUtil ui; // [sp+8Ch] [bp-34h]@18
  unsigned int uiWidth; // [sp+A0h] [bp-20h]@18
  unsigned int uiHeight; // [sp+A4h] [bp-1Ch]@18
  NiPointer<NiNode> spNode; // [sp+A8h] [bp-18h]@1
  int uiLeft; // [sp+ACh] [bp-14h]@11
  int uiTop; // [sp+B0h] [bp-10h]@11
  int v72; // [sp+BCh] [bp-4h]@1
  NiRefObjectVtbl *pkFrameWorka; // [sp+C8h] [bp+8h]@18
  NiRefObjectVtbl *pkFrameWorkb; // [sp+C8h] [bp+8h]@18

  v2 = this;
  spNode.m_pObject = 0;
  v72 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v72 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\HolyPReward.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "HolyRewardMoneyWin", 0) )
  {
    v4 = spNode.m_pObject;
    v72 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v65 = v10;
    v64 = &uiTop;
    v63 = &uiLeft;
    v62 = "Theme";
  }
  else
  {
    v65 = 0;
    v64 = &uiTop;
    v63 = &uiLeft;
    v62 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v62, v63, v64, v65);
  PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "OKClick");
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "OKOver");
  v13 = PgWinBut::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_pkOkBut, (NiD3DDefaultShader *)v13);
  v14 = v2->m_pkOkBut.m_pObject;
  v15 = (PgWin *)v2->m_pkOkBut.m_pObject;
  v16 = Font::Get(0);
  v17 = ((int (__thiscall *)(PgWinBut *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v14);
  v18 = ((int (__thiscall *)(PgWinBut *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v14);
  v19 = PgWinText::CreateWin(0, 1, v18, v17, v16, v15, 0, 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v19,
    5u);
  pkFrameWorka = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = TextData2::Get(0x9BA4D1EFu);
  pkFrameWorka[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v20);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "CancelClick");
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "CancelOver");
  v22 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v23 = Font::Get(0);
  v24 = ((int (__thiscall *)(PgWin *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v22);
  v25 = ((int (__thiscall *)(PgWin *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v22);
  v26 = PgWinText::CreateWin(0, 1, v25, v24, v23, v22, 0, 0);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v26,
    5u);
  pkFrameWorkb = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = TextData2::Get(0xF23B3C34u);
  pkFrameWorkb[118].__vecDelDtor((NiRefObject *)v26, (unsigned int)v27);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v72) = 1;
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v28 = UIUtil::CreateBtn(&ui, 0, "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", v3);
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v28,
    0);
  v29 = UIUtil::CreateBtn(&ui, 0, "MySilverBtn", "MySilverBtn", "MySilverBtn", "MySilverBtn", v3);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  v30 = UIUtil::CreateBtn(&ui, 0, "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", v3);
  v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v30,
    0);
  v31 = UIUtil::CreateBtn(&ui, 0, "MyGemBtn", "MyGemBtn", "MyGemBtn", "MyGemBtn", v3);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  LOBYTE(v26) = PgUtil::GetTriShapeRect(
                  &spNode.m_pObject->baseclass_0,
                  "MyCopperInput",
                  &uiLeft,
                  &uiTop,
                  &uiWidth,
                  &uiHeight);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyCopperInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( (_BYTE)v26 )
  {
    v33 = Font::Get(0);
    v34 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v33,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkCopperText = v34;
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v34,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A1AEB);
    ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v35 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MySilverInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MySilverInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v35 )
  {
    v37 = Font::Get(0);
    v38 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v37,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkSilverText = v38;
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v38,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A1AF2);
    ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v39 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MyGoldInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyGoldInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v39 )
  {
    v41 = Font::Get(0);
    v42 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v41,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkGoldText = v42;
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v42,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A1AF3);
    ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v43 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MyGemInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyGemInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v44, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v43 )
  {
    v45 = Font::Get(0);
    v46 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v45,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkGemText = v46;
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v46,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A1AFA);
    ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox01", &uiLeft, &uiTop, v3);
  v48 = (PgWin *)PgWinSpr::CreateWin(uiLeft, uiTop, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v48, 0);
  v49 = Font::Get(0);
  v50 = ((int (__thiscall *)(PgWin *))v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v48);
  v51 = ((int (__thiscall *)(PgWin *))v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v48);
  v52 = PgWinText::CreateWin(0, 1, v51, v50, v49, v48, 0, 0);
  v2->m_pkTitleText1 = v52;
  v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v52,
    4u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTitleText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A1AFB);
  ((void (__stdcall *)(_DWORD))v2->m_pkTitleText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v53 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox02", &uiLeft, &uiTop, v3);
  v54 = (PgWin *)PgWinSpr::CreateWin(uiLeft, uiTop, v53, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v55 = Font::Get(0);
  v56 = ((int (__thiscall *)(PgWin *))v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v54);
  v57 = ((int (__thiscall *)(PgWin *))v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v54);
  v58 = PgWinText::CreateWin(0, 1, v57, v56, v55, v54, 0, 0);
  v2->m_pkTitleText2 = v58;
  v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v58,
    4u);
  v59 = v2->m_pkTitleText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v60 = TextData::Get(0x3B609389u);
  v59[118].__vecDelDtor((NiRefObject *)v2->m_pkTitleText2, (unsigned int)v60);
  ((void (__stdcall *)(_DWORD))v2->m_pkTitleText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(HolyRewardMoneyWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v72) = 0;
  UIUtil::_UIUtil(&ui);
  v72 = -1;
  if ( spNode.m_pObject )
  {
    v61 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v61 )
        v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v61, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0055D010) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::OnCmdCancel(HolyRewardMoneyWin *this)
{
  PgWin *v1; // esi@1
  PgFrameWork *v2; // edi@1
  char *v3; // eax@1

  v1 = (PgWin *)this;
  v2 = this->baseclass_0.m_pkFrameWork;
  v3 = TextData2::Get(0x40A8555Au);
  GameFrameWork::AddSysMsg((GameFrameWork *)v2, v3);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
}

//----- (0055D040) --------------------------------------------------------
void __thiscall MoneyWin::OnCommand(MoneyWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, this->m_pkRevWin, 5u, this->m_uiCancelMsg, 0);
      PgWin::PostMsg(v3, v3, 1u, 0, 0);
    }
  }
  else
  {
    MoneyWin::OnCmdOk(this);
  }
}

//----- (0055D090) --------------------------------------------------------
void __thiscall MoneyWin::UpdateMeWin(MoneyWin *this, float fCurTime)
{
  MoneyWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (0055D0F0) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::OnCommand(HolyRewardMoneyWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // edi@3
  char *v5; // eax@3

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      v4 = this->baseclass_0.m_pkFrameWork;
      v5 = TextData2::Get(0x40A8555Au);
      GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
      PgWin::PostMsg(v3, v3, 1u, 0, 0);
    }
  }
  else
  {
    GameFrameWork::NcHolyPromiseWithDrawCenRewardReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
    PgWin::PostMsg(v3, v3, 1u, 0, 0);
  }
}

//----- (0055D150) --------------------------------------------------------
void __thiscall HolyRewardMoneyWin::UpdateMeWin(HolyRewardMoneyWin *this, float fCurTime)
{
  HolyRewardMoneyWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (0055D1B0) --------------------------------------------------------
MoneyWin *__cdecl MoneyWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  MoneyWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A0u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &MoneyWin::_vftable_;
    *((_DWORD *)v2 + 58) = &MoneyWin::_vftable_;
    *((_DWORD *)v2 + 102) = 0;
    *((_DWORD *)v2 + 97) = 0;
    *((_DWORD *)v2 + 98) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (MoneyWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A1E40: using guessed type int (__stdcall *MoneyWin___vftable_)(int uiFlags);
// 9A1E5C: using guessed type int (__thiscall *MoneyWin___vftable_)(void *p, char);

//----- (0055D300) --------------------------------------------------------
HolyRewardMoneyWin *__cdecl HolyRewardMoneyWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  HolyRewardMoneyWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    HolyRewardMoneyWin::HolyRewardMoneyWin((HolyRewardMoneyWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (HolyRewardMoneyWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0055D430) --------------------------------------------------------
void *__thiscall MoneyWin::_vector_deleting_destructor_(MoneyWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoneyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoneyWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A1E40: using guessed type int (__stdcall *MoneyWin___vftable_)(int uiFlags);
// 9A1E5C: using guessed type int (__thiscall *MoneyWin___vftable_)(void *p, char);

//----- (0055D470) --------------------------------------------------------
void *__thiscall HolyRewardMoneyWin::_scalar_deleting_destructor_(HolyRewardMoneyWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  PgWinBut *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&HolyRewardMoneyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&HolyRewardMoneyWin::_vftable_;
  v3 = this->m_pkOkBut.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A2080: using guessed type int (__stdcall *HolyRewardMoneyWin___vftable_)(int uiFlags);
// 9A209C: using guessed type int (__thiscall *HolyRewardMoneyWin___vftable_)(void *p, char);

//----- (0055D510) --------------------------------------------------------
void __thiscall MoveModeWin::MoveModeWin(MoveModeWin *this)
{
  MoveModeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoveModeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoveModeWin::_vftable_;
}
// 9A2334: using guessed type int (__stdcall *MoveModeWin___vftable_)(int uiFlags);
// 9A2354: using guessed type int (__thiscall *MoveModeWin___vftable_)(void *p, char);

//----- (0055D530) --------------------------------------------------------
void __thiscall MoveModeWin::_MoveModeWin(MoveModeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoveModeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoveModeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A2334: using guessed type int (__stdcall *MoveModeWin___vftable_)(int uiFlags);
// 9A2354: using guessed type int (__thiscall *MoveModeWin___vftable_)(void *p, char);

//----- (0055D550) --------------------------------------------------------
void __thiscall MoveModeWin::OnCommand(MoveModeWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@2

  if ( !wParam )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v3->baseclass_0.vfptr[2].SetMessageNum)(v3, 103, 0, 0);
  }
}

//----- (0055D580) --------------------------------------------------------
bool __thiscall MoveModeWin::Create(MoveModeWin *this, PgFrameWork *pkFrameWork)
{
  MoveModeWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  volatile LONG *v7; // eax@7
  NiNode *v9; // ST08_4@12
  PgSprData *v10; // eax@12
  int v11; // ebx@15
  PgSprData *v12; // edi@15
  NiNode *v13; // esi@16
  int uiLeft; // [sp+18h] [bp-18h]@12
  int uiTop; // [sp+1Ch] [bp-14h]@12
  NiPointer<NiNode> spNode; // [sp+20h] [bp-10h]@1
  int v17; // [sp+2Ch] [bp-4h]@1
  int iOffY; // [sp+38h] [bp+8h]@15

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v17 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\RunButton.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\RunButton.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v17 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v7 = (volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v9 = spNode.m_pObject;
  v2->baseclass_0.m_pkFrameWork = pkFrameWork;
  v10 = PgSprData::Create(&v9->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v10, 0, pkFrameWork, "MoveModeWin", 0) )
  {
    v6 = spNode.m_pObject;
    v17 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v7 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
    if ( !InterlockedDecrement(v7) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v11 = uiLeft;
  iOffY = uiTop;
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNormal", &uiLeft, &uiTop, 0);
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "BtnClick");
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "BtnOver");
  PgWinBut::CreateWin(uiLeft - v11, uiTop - iOffY, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  ((void (__thiscall *)(MoveModeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.63999999,
    0.5);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v17 = -1;
  if ( spNode.m_pObject )
  {
    v13 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v13 )
        v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    }
  }
  return 1;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0055D780) --------------------------------------------------------
MoveModeWin *__cdecl MoveModeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  MoveModeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &MoveModeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &MoveModeWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (MoveModeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A2334: using guessed type int (__stdcall *MoveModeWin___vftable_)(int uiFlags);
// 9A2354: using guessed type int (__thiscall *MoveModeWin___vftable_)(void *p, char);

//----- (0055D8C0) --------------------------------------------------------
void *__thiscall MoveModeWin::_vector_deleting_destructor_(MoveModeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MoveModeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MoveModeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A2334: using guessed type int (__stdcall *MoveModeWin___vftable_)(int uiFlags);
// 9A2354: using guessed type int (__thiscall *MoveModeWin___vftable_)(void *p, char);

//----- (0055D900) --------------------------------------------------------
void __thiscall MysteryVaultWin::MysteryVaultWin(MysteryVaultWin *this)
{
  MysteryVaultWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkBut = 0;
  v1->m_apkEffect = 0;
  v1->m_pkHINumSpr = 0;
  v1->m_pkLowNumSpr = 0;
  v1->m_pkLevelSpr = 0;
  v1->m_bEffectStart = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MysteryVaultWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MysteryVaultWin::_vftable_;
}
// 9A2688: using guessed type int (__stdcall *MysteryVaultWin___vftable_)(int uiFlags);
// 9A26A4: using guessed type int (__thiscall *MysteryVaultWin___vftable_)(void *p, char);

//----- (0055D950) --------------------------------------------------------
void __thiscall MysteryVaultWin::OnMysteryVaultBtnClick(MysteryVaultWin *this)
{
  MysteryVaultWin *v1; // edi@1
  PgFrameWork *v2; // esi@1

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( User::Lv(&g_kUser) >= v1->m_ItemLV )
  {
    if ( !v2 )
      return;
    GameFrameWork::OpenInventoryWin((GameFrameWork *)v2);
  }
  if ( v2 )
  {
    GameFrameWork::CloseMysteryVaultWin((GameFrameWork *)v2);
    GameFrameWork::NcCharSaveUIStateSaveReq((GameFrameWork *)v2, 0);
  }
}

//----- (0055D9A0) --------------------------------------------------------
void __thiscall MysteryVaultWin::OnCommand(MysteryVaultWin *this, unsigned int wParam, int lParam)
{
  MysteryVaultWin *v3; // edi@1
  PgFrameWork *v4; // esi@2

  v3 = this;
  if ( wParam == 1 )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( User::Lv(&g_kUser) >= v3->m_ItemLV )
    {
      if ( !v4 )
        return;
      GameFrameWork::OpenInventoryWin((GameFrameWork *)v4);
    }
    if ( v4 )
    {
      GameFrameWork::CloseMysteryVaultWin((GameFrameWork *)v4);
      GameFrameWork::NcCharSaveUIStateSaveReq((GameFrameWork *)v4, 0);
    }
  }
}

//----- (0055DA00) --------------------------------------------------------
void __thiscall MysteryVaultWin::UpdateMeWin(MysteryVaultWin *this, float fCurTime)
{
  MysteryVaultWin *v2; // esi@1
  SpEffect *v3; // ecx@4

  v2 = this;
  if ( this->m_bEffectStart && this->m_ItemLV == User::Lv(&g_kUser) )
  {
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, MysteryVaultAlarm);
    SpEffect::Start(v2->m_apkEffect, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2->m_bEffectStart = 0;
  }
  v3 = v2->m_apkEffect;
  if ( v3->m_bLive )
    SpEffect::Update(v3, fCurTime);
}

//----- (0055DA60) --------------------------------------------------------
bool __thiscall MysteryVaultWin::Create(MysteryVaultWin *this, PgFrameWork *pkFrameWork)
{
  MysteryVaultWin *v2; // edi@1
  NiSourceTexture *v3; // esi@1
  bool result; // al@6
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  PgSprData *v8; // esi@16
  PgSprData *v9; // esi@16
  PgWinSpr *v10; // eax@16
  PgSprData *v11; // esi@16
  PgWinSpr *v12; // eax@16
  PgSprData *v13; // eax@16
  PgWinSpr *v14; // eax@16
  NiTexturePalette *v15; // esi@16
  char *v16; // eax@18
  void *v17; // esi@20
  NiObject *v18; // eax@21
  void *(__thiscall *v19)(NiRefObject *, unsigned int); // edx@23
  NiTexturePalette *pTexturePalette; // [sp+24h] [bp-20h]@7
  NiPointer<NiNode> pkNiNodePtr; // [sp+28h] [bp-1Ch]@16
  int uiLeft; // [sp+2Ch] [bp-18h]@10
  int uiTop; // [sp+30h] [bp-14h]@10
  NiPointer<NiNode> spNode; // [sp+34h] [bp-10h]@1
  int v25; // [sp+40h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v25 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v25 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\MysteryVault.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, v3);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, pkFrameWork, "MysteryVaultWin", 0) )
  {
    v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01_Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "Btn01_Click");
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "Btn01_Over");
    v2->m_pkBut = PgWinBut::CreateWin(uiLeft, uiTop, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num00", &uiLeft, &uiTop, 0);
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num01");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num02");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num03");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num04");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num05");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num06");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num07");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num08");
    PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "Num09");
    v10 = PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkLowNumSpr = v10;
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num10", &uiLeft, &uiTop, 0);
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num20");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num30");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num40");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num50");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num60");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num70");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num80");
    PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "Num90");
    v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkHINumSpr = v12;
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane02", &uiLeft, &uiTop, 0);
    v14 = PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkLevelSpr = v14;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v14,
      0);
    pkNiNodePtr.m_pObject = 0;
    v15 = dword_B70448;
    LOBYTE(v25) = 1;
    if ( !Folder::m_bInit )
      Folder::Init();
    v16 = Folder::Merge(&Folder::m_acMenu, "Game\\MysteryVaultEffect.nif");
    PgUtil::LoadNodeNifFile(v16, &pkNiNodePtr, v15);
    if ( pkNiNodePtr.m_pObject )
    {
      v17 = operator new(0x44u);
      LOBYTE(v25) = 2;
      if ( v17 )
      {
        v18 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
        SpEffect::SpEffect((SpEffect *)v17, (NiNode *)v18);
      }
      else
      {
        v18 = 0;
      }
      v19 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
      v2->m_apkEffect = (SpEffect *)v18;
      LOBYTE(v25) = 1;
      ((void (__thiscall *)(MysteryVaultWin *))v19)(v2);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      LOBYTE(v25) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNiNodePtr);
      v25 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v25) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNiNodePtr);
      v25 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v7 = spNode.m_pObject;
    v25 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0055DED0) --------------------------------------------------------
void __thiscall MysteryVaultWin::_MysteryVaultWin(MysteryVaultWin *this)
{
  PgWinFrame *v1; // ebx@1
  SpEffect *v2; // esi@1
  NiNode *v3; // edi@2

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MysteryVaultWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MysteryVaultWin::_vftable_;
  v2 = this->m_apkEffect;
  if ( v2 )
  {
    NsEffect::_NsEffect(&v2->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    if ( v2->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
  }
  PgWinFrame::_PgWinFrame(v1);
}
// 9A2688: using guessed type int (__stdcall *MysteryVaultWin___vftable_)(int uiFlags);
// 9A26A4: using guessed type int (__thiscall *MysteryVaultWin___vftable_)(void *p, char);

//----- (0055DF90) --------------------------------------------------------
void __thiscall MysteryVaultWin::OnReachTheLevel(MysteryVaultWin *this, unsigned int curUserLV, unsigned int itemLV)
{
  MysteryVaultWin *v3; // edi@1
  PgWinSpr *v4; // ecx@3
  int v5; // edx@6
  NiRefObjectVtbl *v6; // eax@6
  PgFrameWork *v7; // eax@11
  GuildWarInformWin *v8; // esi@12
  D3DXCOLOR *v9; // eax@13
  char *v10; // eax@13
  signed int v11; // [sp-Ch] [bp-20h]@7
  D3DXCOLOR result; // [sp+4h] [bp-10h]@13

  v3 = this;
  if ( this->m_pkLowNumSpr )
  {
    if ( this->m_pkLevelSpr )
    {
      v4 = this->m_pkHINumSpr;
      if ( v4 )
      {
        if ( v3->m_pkBut )
        {
          if ( curUserLV >= itemLV )
          {
            if ( curUserLV == itemLV )
            {
              v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
              if ( v7 )
              {
                v8 = (GuildWarInformWin *)v7[31].m_kMsgQ.m_uiHead;
                if ( v8 )
                {
                  v9 = ColorInfoTable::GetDxColor(&result, blue);
                  GuildWarInformWin::SetColor(v8, v9);
                  v10 = TextData2::Get(0x314B3839u);
                  GuildWarInformWin::SetText(v8, v10);
                }
              }
              v3->m_bEffectStart = 1;
            }
            ((void (__stdcall *)(_DWORD))v3->m_pkHINumSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            ((void (__stdcall *)(_DWORD))v3->m_pkLowNumSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            ((void (__stdcall *)(_DWORD))v3->m_pkLevelSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            v3->m_ItemLV = itemLV;
          }
          else
          {
            v5 = (signed int)(itemLV - curUserLV) / 10 - 1;
            v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            if ( (unsigned int)v5 > 8 )
            {
              v11 = 0;
            }
            else
            {
              ((void (__stdcall *)(_DWORD))v6[123].__vecDelDtor)(v5);
              v6 = v3->m_pkHINumSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v11 = 1;
            }
            ((void (__stdcall *)(_DWORD))v6[64].__vecDelDtor)(v11);
            ((void (__stdcall *)(_DWORD))v3->m_pkLowNumSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)((signed int)(itemLV - curUserLV) % 10);
            ((void (__stdcall *)(_DWORD))v3->m_pkLowNumSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            ((void (__stdcall *)(_DWORD))v3->m_pkLevelSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            v3->m_ItemLV = itemLV;
          }
        }
      }
    }
  }
}

//----- (0055E100) --------------------------------------------------------
MysteryVaultWin *__cdecl MysteryVaultWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  MysteryVaultWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x178u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &MysteryVaultWin::_vftable_;
    *((_DWORD *)v2 + 58) = &MysteryVaultWin::_vftable_;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 91) = 0;
    *((_DWORD *)v2 + 92) = 0;
    *((_BYTE *)v2 + 348) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (MysteryVaultWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A2688: using guessed type int (__stdcall *MysteryVaultWin___vftable_)(int uiFlags);
// 9A26A4: using guessed type int (__thiscall *MysteryVaultWin___vftable_)(void *p, char);

//----- (0055E260) --------------------------------------------------------
void *__thiscall MysteryVaultWin::_scalar_deleting_destructor_(MysteryVaultWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MysteryVaultWin::_MysteryVaultWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0055E290) --------------------------------------------------------
void __thiscall ItemShopInvWin::_ItemShopInvWin(ItemShopInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemShopInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemShopInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 9A2AB4: using guessed type int (__stdcall *ItemShopInvWin___vftable_)(int uiFlags);
// 9A2AD4: using guessed type int (__thiscall *ItemShopInvWin___vftable_)(void *p, char);

//----- (0055E2B0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__thiscall ItemShopInvWin::GetItem(ItemShopInvWin *this)
{
  return this->m_pkSellInfo;
}

//----- (0055E2C0) --------------------------------------------------------
void __thiscall ItemShopInvWin::SetItem(ItemShopInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo)
{
  ItemShopInvWin *v2; // esi@1

  v2 = this;
  ItemIcon::SetItemSellInfo(&this->baseclass_0, pkInfo);
  v2->m_pkSellInfo = pkInfo;
}

//----- (0055E2E0) --------------------------------------------------------
ItemRepurchase *__thiscall ItemShopInvWin::GetRepurchaseItem(ItemShopInvWin *this)
{
  return this->m_pkRepurchaseItem;
}

//----- (0055E2F0) --------------------------------------------------------
bool __thiscall ItemShopInvWin::Create(ItemShopInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  ItemShopInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (0055E330) --------------------------------------------------------
void __thiscall ItemShopInvWin::OnFirstHitWin(ItemShopInvWin *this)
{
  ItemShopInvWin *v1; // esi@1
  PgWin *v2; // ecx@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v3; // eax@1
  Item **v4; // edx@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
  v3 = v1->m_pkSellInfo;
  v4 = (Item **)v1->m_pkRepurchaseItem;
  if ( v2 )
  {
    if ( v3 )
    {
      ItemInfoWin::SetBuyInfo((ItemInfoWin *)v2, v3);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( v4 )
      {
        ItemInfoWin::SetRepurchaseInfo((ItemInfoWin *)v2, *v4);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}

//----- (0055E3C0) --------------------------------------------------------
void __thiscall NPCItemWin::OnHelpLink(NPCItemWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NPCWTitle");
}

//----- (0055E3F0) --------------------------------------------------------
void __thiscall ItemShopInvWin::ItemShopInvWin(ItemShopInvWin *this)
{
  ItemShopInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemShopInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemShopInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  ItemIcon::SetItemSellInfo(&v1->baseclass_0, 0);
  v1->m_pkSellInfo = 0;
  v1->m_pkRepurchaseItem = 0;
}
// 9A2AB4: using guessed type int (__stdcall *ItemShopInvWin___vftable_)(int uiFlags);
// 9A2AD4: using guessed type int (__thiscall *ItemShopInvWin___vftable_)(void *p, char);

//----- (0055E470) --------------------------------------------------------
void __thiscall ItemShopInvWin::SetItemIcon(ItemShopInvWin *this, ItemRepurchase *pkItem)
{
  ItemShopInvWin *v2; // esi@1
  unsigned __int16 v3; // ax@3
  ItemViewInfo *v4; // eax@4
  ItemViewInfo *v5; // edi@4
  NiRefObjectVtbl *v6; // ebx@5
  unsigned int v7; // ST04_4@5
  NiSourceTexture *v8; // eax@5
  char *v9; // eax@6

  v2 = this;
  if ( pkItem && pkItem->pItem && (v3 = pkItem->pItem->m_kStruct.itemid, v3 != -1) )
  {
    v4 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v3, 1);
    v5 = v4;
    if ( v4 )
    {
      v6 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = v4->IconIndex;
      v8 = IconMgr::GetTexture(v4->IconFile);
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v6[146].__vecDelDtor)(v2, v8, v7, 32, 32);
      ItemIcon::SetSubIconImage(&v2->baseclass_0, v5->SubIconFile, v5->SubIconIndex, 0x20u, 0x20u);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2,
        1u);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v2,
        1u);
      if ( (unsigned int)((int (*)(void))pkItem->pItem->baseclass_0.vfptr[3].__vecDelDtor)() <= 1 )
      {
        ItemIcon::SetLotText(&v2->baseclass_0, &byte_9A28C7);
      }
      else
      {
        v9 = fs("%d");
        ItemIcon::SetLotText(&v2->baseclass_0, v9);
      }
    }
  }
  else
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      this,
      0,
      -1,
      32,
      32);
    ItemIcon::SetSubIconImage(&v2->baseclass_0, 0, 0xFFFFFFFFu, 0x20u, 0x20u);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A28C8);
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
}

//----- (0055E5B0) --------------------------------------------------------
void __thiscall ItemShopInvWin::SetRepurchaseItem(ItemShopInvWin *this, ItemRepurchase *pkItem)
{
  ItemShopInvWin *v2; // esi@1

  v2 = this;
  ItemShopInvWin::SetItemIcon(this, pkItem);
  v2->m_pkRepurchaseItem = pkItem;
}

//----- (0055E5D0) --------------------------------------------------------
void __thiscall NPCItemWin::OnInvLClick(NPCItemWin *this, unsigned int uiInvIndex)
{
  void *v2; // eax@2

  if ( !PgWin::ms_bShiftPressed )
  {
    v2 = this->m_apkInvWin[uiInvIndex]->m_pkSellInfo;
    if ( v2 )
    {
      this->m_kDropContents.m_eSenderType = 5;
      this->m_kDropContents.m_eType = 2;
      this->m_kDropContents.m_apvParam[0] = v2;
      this->m_kDrop.m_pkSender = (PgWin *)this;
      PgCursor::ms_pkDrop = (int)&this->m_kDrop;
    }
  }
}
// B7030C: using guessed type bool PgWin__ms_bShiftPressed;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0055E620) --------------------------------------------------------
void __thiscall NPCItemWin::TabShow(NPCItemWin *this, NPCItemWin::TAPTYPE type, bool _bTab)
{
  NPCItemWin *v3; // esi@1
  unsigned int v4; // edi@3
  signed int v5; // ebx@3
  unsigned int v6; // edi@6
  signed int v7; // ebx@6

  v3 = this;
  if ( type )
  {
    if ( type == 1 )
    {
      v4 = 0;
      v5 = (signed int)((char *)this->m_pkItemTabList.baseclass_0._Mylast
                      - *(_DWORD *)&this->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( v5 )
      {
        do
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v3->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                      + 4 * v4++)
                                        + 256))(_bTab);
        while ( v4 < v5 );
      }
    }
  }
  else
  {
    v6 = 0;
    v7 = (signed int)((char *)this->m_pkWTitleTabList.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    if ( v7 )
    {
      do
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v3->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                    + 4 * v6++)
                                      + 256))(_bTab);
      while ( v6 < v7 );
    }
  }
}

//----- (0055E6C0) --------------------------------------------------------
void __thiscall NPCItemWin::DeleteAllContents(NPCItemWin *this)
{
  ItemIcon **v1; // edi@1
  signed int v2; // ebx@2
  ItemIcon *v3; // esi@3
  ItemIcon *v4; // esi@3

  v1 = (ItemIcon **)this->m_apkInvWin;
  if ( this->m_apkInvWin[0] )
  {
    v2 = 42;
    do
    {
      v3 = *v1;
      ItemIcon::SetItemSellInfo(*v1, 0);
      v3[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = 0;
      v4 = *v1;
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*v1)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
        *v1,
        0,
        -1,
        32,
        32);
      ItemIcon::SetSubIconImage(v4, 0, 0xFFFFFFFFu, 0x20u, 0x20u);
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v4,
        0);
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v4,
        0);
      ((void (__stdcall *)(_DWORD))v4->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A28C8);
      ((void (__stdcall *)(_DWORD))v4->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ++v1;
      --v2;
      v4[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
    }
    while ( v2 );
  }
}

//----- (0055E780) --------------------------------------------------------
unsigned int __thiscall NPCItemWin::GetSellItemNum(NPCItemWin *this)
{
  unsigned int v1; // edx@1
  unsigned int result; // eax@1
  NPCItemWin::PAGETYPE v3; // ecx@3
  int v4; // ecx@7

  v1 = this->m_uiCurNPCType;
  result = 0;
  if ( v1 != 3 )
  {
    if ( v1 == 14 )
    {
      v3 = this->m_CurPageType;
      if ( v3 )
      {
        if ( v3 == 1 )
          result = Market::GetTotalEnchantItem();
      }
      else
      {
        result = Market::GetTotalWeapontitleItem();
      }
      return result;
    }
    return *(_DWORD *)&ItemMarket::GetItemSellInfoList()->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
  }
  v4 = this->m_CurPageType - 2;
  if ( !v4 )
    return *(_DWORD *)&ItemMarket::GetItemSellInfoList()->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
  if ( v4 == 1 )
    result = Market::GetTotalRepurchase();
  return result;
}

//----- (0055E7D0) --------------------------------------------------------
unsigned int __thiscall NPCItemWin::GetMaxPageNum(NPCItemWin *this)
{
  unsigned int v1; // eax@1
  NPCItemWin::PAGETYPE v2; // ecx@3
  unsigned int v3; // eax@5
  int v4; // ecx@7

  v1 = this->m_uiCurNPCType;
  if ( v1 == 3 )
  {
    v4 = this->m_CurPageType - 2;
    if ( v4 )
    {
      if ( v4 != 1 )
        return 1;
      v3 = Market::GetTotalRepurchase();
      goto LABEL_11;
    }
LABEL_10:
    v3 = *(_DWORD *)&ItemMarket::GetItemSellInfoList()->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    goto LABEL_11;
  }
  if ( v1 != 14 )
    goto LABEL_10;
  v2 = this->m_CurPageType;
  if ( v2 )
  {
    if ( v2 == 1 )
    {
      v3 = Market::GetTotalEnchantItem();
      goto LABEL_11;
    }
    return 1;
  }
  v3 = Market::GetTotalWeapontitleItem();
LABEL_11:
  if ( !v3 )
    return 1;
  return (v3 - 1) / 0x2A + 1;
}

//----- (0055E840) --------------------------------------------------------
void __thiscall NPCItemWin::DeleteRepurchaseInv(NPCItemWin *this, unsigned __int16 nHandle)
{
  NPCItemWin *v2; // esi@1
  unsigned int v3; // ebx@1
  unsigned int v4; // eax@1
  unsigned int v5; // edi@1
  ItemShopInvWin *v6; // esi@5
  int v7; // [sp+Ch] [bp-8h]@1
  NPCItemWin *v8; // [sp+10h] [bp-4h]@1
  int nHandlea; // [sp+1Ch] [bp+8h]@2

  v2 = this;
  v8 = this;
  v3 = Market::FindRepurchase(nHandle);
  v4 = Market::GetTotalRepurchase();
  v5 = 0;
  v7 = v4 - v3;
  if ( v4 != v3 )
  {
    nHandlea = (int)&v2->m_apkInvWin[v3 + 1];
    do
    {
      if ( v2->m_CurPageType == 3 )
      {
        if ( v5 + v3 == 41 )
        {
          v6 = v2->m_apkInvWin[v5 + v3];
          ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
            v6,
            0,
            -1,
            32,
            32);
          ItemIcon::SetSubIconImage(&v6->baseclass_0, 0, 0xFFFFFFFFu, 0x20u, 0x20u);
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v6,
            0);
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v6,
            0);
          ((void (__stdcall *)(_DWORD))v6->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A28C8);
          ((void (__stdcall *)(_DWORD))v6->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          v2 = v8;
        }
        else
        {
          ItemShopInvWin::SetItemIcon(v2->m_apkInvWin[v5 + v3], *(ItemRepurchase **)(*(_DWORD *)nHandlea + 452));
        }
      }
      nHandlea += 4;
      ++v5;
    }
    while ( v5 < v7 );
  }
  Market::DeleteRepurchase(v3);
}

//----- (0055E950) --------------------------------------------------------
void __thiscall NPCItemWin::AddRepurchaseInv(NPCItemWin *this, PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *pkRepurItem)
{
  NPCItemWin *v2; // esi@1
  unsigned int v3; // eax@1
  unsigned int v4; // ebx@1
  ItemRepurchase *v5; // eax@1
  ItemRepurchase *v6; // eax@3
  ItemRepurchase *v7; // edi@3
  ItemShopInvWin *v8; // esi@4

  v2 = this;
  v3 = Market::GetTotalRepurchase();
  v4 = v3;
  v5 = v2->m_apkInvWin[v3]->m_pkRepurchaseItem;
  if ( !v5 || !v5->pItem )
  {
    v6 = Market::AddRepurchase(pkRepurItem);
    v7 = v6;
    if ( v2->m_CurPageType == 3 )
    {
      v8 = v2->m_apkInvWin[v4];
      ItemShopInvWin::SetItemIcon(v8, v6);
      v8->m_pkRepurchaseItem = v7;
    }
  }
}

//----- (0055E9B0) --------------------------------------------------------
void __thiscall ItemShopInvWin::DoAction(ItemShopInvWin *this)
{
  ItemShopInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0055E9E0) --------------------------------------------------------
void __thiscall ItemShopInvWin::DoRAction(ItemShopInvWin *this)
{
  ItemShopInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (0055EA10) --------------------------------------------------------
void __thiscall NPCItemWin::OnCancel(NPCItemWin *this)
{
  NPCItemWin *v1; // esi@1
  unsigned int v2; // ebx@1
  int v3; // edi@1
  unsigned int v4; // edi@3
  int v5; // ebx@3

  v1 = this;
  GameFrameWork::CloseItemShopWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  v2 = 0;
  v3 = (signed int)((char *)v1->m_pkWTitleTabList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v3 )
  {
    do
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 4 * v2++)
                                    + 256))(0);
    while ( v2 < v3 );
  }
  v4 = 0;
  v5 = (signed int)((char *)v1->m_pkItemTabList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v5 )
  {
    do
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 4 * v4++)
                                    + 256))(0);
    while ( v4 < v5 );
  }
}

//----- (0055EA90) --------------------------------------------------------
void __thiscall NPCItemWin::UpdatePageInfo(NPCItemWin *this)
{
  NPCItemWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@2
  char *v3; // eax@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v2 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    NPCItemWin::GetMaxPageNum(v1);
    v3 = fs("%d / %d");
    v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v3);
  }
}

//----- (0055EAE0) --------------------------------------------------------
void __thiscall NPCItemWin::ReSetItemMarket(NPCItemWin *this)
{
  NPCItemWin *v1; // ebx@1
  int v2; // edi@1
  NiTListItem<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *v3; // esi@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v4; // edi@7
  ItemIcon *v5; // ebx@7
  PgWinText *v6; // esi@9
  NiRefObjectVtbl *v7; // edi@9
  char *v8; // eax@9
  NPCItemWin *v9; // [sp+Ch] [bp-Ch]@1
  ItemIcon **v10; // [sp+10h] [bp-8h]@5
  signed int iSellInfoCount; // [sp+14h] [bp-4h]@5

  v1 = this;
  v9 = this;
  NPCItemWin::DeleteAllContents(this);
  v2 = 42 * v1->m_uiCurPage;
  v3 = ItemMarket::GetItemSellInfoList()->baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      --v2;
      if ( !v3 )
        break;
      v3 = v3->m_pkNext;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    if ( v3 )
    {
      iSellInfoCount = 0;
      v10 = (ItemIcon **)v1->m_apkInvWin;
      do
      {
        if ( iSellInfoCount >= 42 )
          break;
        v4 = v3->m_element;
        v5 = *v10;
        v3 = v3->m_pkNext;
        ItemIcon::SetItemSellInfo(*v10, v4);
        ++iSellInfoCount;
        ++v10;
        v5[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)v4;
        v1 = v9;
      }
      while ( v3 );
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1) )
      {
        v6 = v1->m_pkPageText;
        v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        NPCItemWin::GetMaxPageNum(v1);
        v8 = fs("%d / %d");
        v7[118].__vecDelDtor((NiRefObject *)v6, (unsigned int)v8);
      }
    }
  }
}

//----- (0055EBB0) --------------------------------------------------------
void __thiscall NPCItemWin::OnShowWin(NPCItemWin *this)
{
  NPCItemWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@2
  char *v3; // eax@2

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1) )
  {
    v2 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    NPCItemWin::GetMaxPageNum(v1);
    v3 = fs("%d / %d");
    v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v3);
  }
}

//----- (0055EC00) --------------------------------------------------------
void __thiscall NPCItemWin::ResetContents(NPCItemWin *this)
{
  NPCItemWin *v1; // esi@1
  unsigned int v2; // ebx@1
  int v3; // edi@1
  unsigned int v4; // edi@3
  int v5; // ebx@3
  unsigned int v6; // eax@5
  NPCItemWin *v7; // ecx@6
  NPCItemWin::PAGETYPE v8; // eax@7
  unsigned int v9; // edi@9
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v10; // eax@11
  ItemIcon *v11; // ebx@11
  NiRefObjectVtbl *v12; // esi@11
  unsigned int v13; // edi@13
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v14; // eax@15
  ItemIcon *v15; // ebx@15
  NiRefObjectVtbl *v16; // esi@15
  unsigned int v17; // edi@17
  int v18; // ebx@17
  unsigned int v19; // edi@21
  ItemRepurchase *v20; // eax@23
  ItemShopInvWin *v21; // ebx@23
  ItemRepurchase *v22; // esi@23
  int iStart; // [sp+Ch] [bp-8h]@1
  ItemIcon **iStarta; // [sp+Ch] [bp-8h]@10
  ItemIcon **iStartb; // [sp+Ch] [bp-8h]@14
  ItemShopInvWin **iStartc; // [sp+Ch] [bp-8h]@22
  unsigned int uiTotal; // [sp+10h] [bp-4h]@9
  unsigned int uiTotala; // [sp+10h] [bp-4h]@13
  unsigned int uiTotalb; // [sp+10h] [bp-4h]@21

  v1 = this;
  NPCItemWin::DeleteAllContents(this);
  v2 = 0;
  v3 = (signed int)((char *)v1->m_pkItemTabList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  iStart = 42 * v1->m_uiCurPage;
  if ( v3 )
  {
    do
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 4 * v2++)
                                    + 256))(0);
    while ( v2 < v3 );
  }
  v4 = 0;
  v5 = (signed int)((char *)v1->m_pkWTitleTabList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v5 )
  {
    do
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 4 * v4++)
                                    + 256))(0);
    while ( v4 < v5 );
  }
  v6 = v1->m_uiCurNPCType;
  if ( v6 != 3 )
  {
    v7 = v1;
    if ( v6 == 14 )
    {
      NPCItemWin::TabShow(v1, 0, 1);
      v8 = v1->m_CurPageType;
      if ( v8 )
      {
        if ( v8 == 1 )
        {
          v9 = iStart;
          uiTotal = Market::GetTotalEnchantItem();
          if ( iStart < uiTotal )
          {
            iStarta = (ItemIcon **)v1->m_apkInvWin;
            do
            {
              v10 = Market::GetEnchantItem(v9);
              v11 = *iStarta;
              v12 = (NiRefObjectVtbl *)v10;
              ItemIcon::SetItemSellInfo(*iStarta, v10);
              ++iStarta;
              ++v9;
              v11[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = v12;
            }
            while ( v9 < uiTotal );
          }
        }
      }
      else
      {
        v13 = iStart;
        uiTotala = Market::GetTotalWeapontitleItem();
        if ( iStart < uiTotala )
        {
          iStartb = (ItemIcon **)v1->m_apkInvWin;
          do
          {
            v14 = Market::GetWeapontitleItem(v13);
            v15 = *iStartb;
            v16 = (NiRefObjectVtbl *)v14;
            ItemIcon::SetItemSellInfo(*iStartb, v14);
            ++iStartb;
            ++v13;
            v15[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = v16;
          }
          while ( v13 < uiTotala );
        }
      }
      return;
    }
LABEL_26:
    NPCItemWin::ReSetItemMarket(v7);
    return;
  }
  v17 = 0;
  v18 = (signed int)((char *)v1->m_pkItemTabList.baseclass_0._Mylast
                   - *(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v18 )
  {
    do
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                  + 4 * v17++)
                                    + 256))(1);
    while ( v17 < v18 );
  }
  if ( v1->m_CurPageType == 2 )
  {
    v7 = v1;
    goto LABEL_26;
  }
  if ( v1->m_CurPageType == 3 )
  {
    v19 = iStart;
    uiTotalb = Market::GetTotalRepurchase();
    if ( iStart < uiTotalb )
    {
      iStartc = v1->m_apkInvWin;
      do
      {
        v20 = Market::GetRepurchase(v19);
        v21 = *iStartc;
        v22 = v20;
        ItemShopInvWin::SetItemIcon(*iStartc, v20);
        ++iStartc;
        ++v19;
        v21->m_pkRepurchaseItem = v22;
      }
      while ( v19 < uiTotalb );
    }
  }
}

//----- (0055EDF0) --------------------------------------------------------
void __thiscall NPCItemWin::OnTab(NPCItemWin *this, NPCItemWin::PAGETYPE index)
{
  if ( this->m_CurPageType != index )
  {
    this->m_CurPageType = index;
    this->m_uiCurPage = 0;
    NPCItemWin::ResetContents(this);
  }
}

//----- (0055EE20) --------------------------------------------------------
void __thiscall NPCItemWin::ResetPage(NPCItemWin *this, int NPCType)
{
  this->m_uiCurPage = 0;
  this->m_uiCurNPCType = NPCType;
  this->m_CurPageType = ((NPCType != 3) - 1) & 2;
  NPCItemWin::ResetContents(this);
}

//----- (0055EE60) --------------------------------------------------------
ItemShopInvWin *__cdecl ItemShopInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  ItemShopInvWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1CCu);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v4);
    LOBYTE(v9) = 1;
    *(_DWORD *)v5 = &ItemShopInvWin::_vftable_;
    *((_DWORD *)v5 + 58) = &ItemShopInvWin::_vftable_;
    *((_DWORD *)v5 + 114) = -1;
    ItemIcon::SetItemSellInfo((ItemIcon *)v5, 0);
    *((_DWORD *)v5 + 112) = 0;
    *((_DWORD *)v5 + 113) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 616))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (ItemShopInvWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9A2AB4: using guessed type int (__stdcall *ItemShopInvWin___vftable_)(int uiFlags);
// 9A2AD4: using guessed type int (__thiscall *ItemShopInvWin___vftable_)(void *p, char);

//----- (0055EFD0) --------------------------------------------------------
void __thiscall NPCItemWin::NPCItemWin(NPCItemWin *this)
{
  NPCItemWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCItemWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCItemWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.m_kItemID = -1;
  *(_DWORD *)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkWTitleTabList.baseclass_0._Mylast = 0;
  v1->m_pkWTitleTabList.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkItemTabList.baseclass_0._Mylast = 0;
  v1->m_pkItemTabList.baseclass_0._Myend = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_uiCurPage = 0;
  v1->m_pkTitleTextWin = 0;
  memset(v1->m_apkInvWin, 0, sizeof(v1->m_apkInvWin));
  v1->m_CurPageType = 0;
  v1->m_uiCurNPCType = 0;
  v1->m_pkPageText = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9A2D44: using guessed type int (__stdcall *NPCItemWin___vftable_)(int uiFlags);
// 9A2D64: using guessed type int (__thiscall *NPCItemWin___vftable_)(void *p, char);

//----- (0055F080) --------------------------------------------------------
void __thiscall NPCItemWin::_NPCItemWin(NPCItemWin *this)
{
  NPCItemWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCItemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCItemWin::_vftable_;
  if ( *(_DWORD *)&this->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_pkItemTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkItemTabList.baseclass_0._Mylast = 0;
  v1->m_pkItemTabList.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_pkWTitleTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkWTitleTabList.baseclass_0._Mylast = 0;
  v1->m_pkWTitleTabList.baseclass_0._Myend = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9A2D44: using guessed type int (__stdcall *NPCItemWin___vftable_)(int uiFlags);
// 9A2D64: using guessed type int (__thiscall *NPCItemWin___vftable_)(void *p, char);

//----- (0055F100) --------------------------------------------------------
NPCItemWin *__cdecl NPCItemWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  NPCItemWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x290u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    NPCItemWin::NPCItemWin((NPCItemWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (NPCItemWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0055F230) --------------------------------------------------------
void __thiscall NPCItemWin::ResetPage(NPCItemWin *this)
{
  this->m_uiCurPage = 0;
  this->m_CurPageType = 0;
  NPCItemWin::ResetContents(this);
}

//----- (0055F250) --------------------------------------------------------
void __thiscall NPCItemWin::OnPrevPage(NPCItemWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_uiCurPage;
  if ( v1 )
    this->m_uiCurPage = v1 - 1;
  NPCItemWin::ResetContents(this);
}

//----- (0055F270) --------------------------------------------------------
void __thiscall NPCItemWin::OnNextPage(NPCItemWin *this)
{
  NPCItemWin *v1; // esi@1
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@1
  NPCItemWin::PAGETYPE v4; // ecx@3
  unsigned int v5; // ecx@11

  v1 = this;
  v2 = this->m_uiCurNPCType;
  v3 = 0;
  if ( v2 != 3 )
  {
    if ( v2 == 14 )
    {
      v4 = v1->m_CurPageType;
      if ( v4 )
      {
        if ( v4 == 1 )
          v3 = Market::GetTotalEnchantItem();
      }
      else
      {
        v3 = Market::GetTotalWeapontitleItem();
      }
      goto LABEL_11;
    }
LABEL_10:
    v3 = *(_DWORD *)&ItemMarket::GetItemSellInfoList()->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    goto LABEL_11;
  }
  if ( v1->m_CurPageType == 2 )
    goto LABEL_10;
  if ( v1->m_CurPageType == 3 )
    v3 = Market::GetTotalRepurchase();
LABEL_11:
  v5 = v1->m_uiCurPage;
  if ( 42 * (v5 + 1) < v3 )
    v1->m_uiCurPage = v5 + 1;
  NPCItemWin::ResetContents(v1);
}

//----- (0055F2E0) --------------------------------------------------------
bool __thiscall NPCItemWin::Create(NPCItemWin *this, PgFrameWork *pkFrameWork)
{
  NPCItemWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool result; // al@6
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  NiSourceTexture *v12; // eax@14
  NiRefObjectVtbl *v13; // edx@14
  PgSprData *v14; // eax@16
  PgWinSpr *v15; // eax@16
  PgSprData *v16; // eax@16
  PgFont *v17; // eax@18
  PgWinText *v18; // eax@18
  NiRefObjectVtbl *v19; // edx@18
  char *v20; // eax@18
  PgSprData *v21; // eax@18
  PgSprData *v22; // eax@19
  ItemIcon *v23; // eax@19
  PgSprData *v24; // eax@19
  PgSprData *v25; // ecx@19
  char *v26; // eax@20
  char *v27; // eax@20
  D3DXCOLOR v28; // ST34_16@20
  PgWinBut *v29; // eax@20
  NiRefObjectVtbl *v30; // edx@20
  char *v31; // eax@20
  PgWinBut *v32; // eax@20
  NiRefObjectVtbl *v33; // edx@20
  char *v34; // eax@20
  PgWinBut *v35; // eax@20
  NiRefObjectVtbl *v36; // edx@20
  char *v37; // eax@20
  PgWinBut *v38; // eax@20
  PgWinBut *v39; // edi@20
  void *(__thiscall *v40)(NiRefObject *, unsigned int); // eax@20
  char *v41; // eax@20
  NiNode *v42; // esi@21
  const char *v43; // [sp+28h] [bp-8Ch]@12
  int *v44; // [sp+2Ch] [bp-88h]@12
  int *v45; // [sp+30h] [bp-84h]@12
  NiSourceTexture *v46; // [sp+34h] [bp-80h]@12
  unsigned int v47; // [sp+38h] [bp-7Ch]@1
  unsigned int uiWidth; // [sp+48h] [bp-6Ch]@16
  unsigned int uiHeight; // [sp+4Ch] [bp-68h]@16
  UIUtil ui; // [sp+50h] [bp-64h]@11
  signed int pkTexture10; // [sp+64h] [bp-50h]@19
  NiSourceTexture *pkTexture; // [sp+68h] [bp-4Ch]@1
  unsigned int i; // [sp+6Ch] [bp-48h]@7
  int uiTop; // [sp+70h] [bp-44h]@10
  int uiLeft; // [sp+74h] [bp-40h]@10
  NiPointer<NiNode> spNode; // [sp+78h] [bp-3Ch]@1
  PgSprData *pkTextWin; // [sp+7Ch] [bp-38h]@14
  char acShapeName[33]; // [sp+80h] [bp-34h]@19
  unsigned int v59; // [sp+A4h] [bp-10h]@1
  int v60; // [sp+B0h] [bp-4h]@1
  int v61; // [sp+B4h] [bp+0h]@1

  v59 = (unsigned int)&v61 ^ __security_cookie;
  v47 = (unsigned int)&v61 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v60 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
    goto LABEL_27;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCWTitle.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, (NiTexturePalette *)i);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "NPCItemWin", 0) )
  {
LABEL_27:
    v4 = spNode.m_pObject;
    v60 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v60) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v8, v9);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v46 = v10;
    v45 = &uiTop;
    v44 = &uiLeft;
    v43 = "Theme";
  }
  else
  {
    v46 = 0;
    v45 = &uiTop;
    v44 = &uiLeft;
    v43 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v43, v44, v45, v46);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
  v12 = MenuTexMgr::GetTexture(4u);
  v13 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  i = (unsigned int)v12;
  if ( ((int (__stdcall *)(_DWORD, unsigned int))v13[18].__vecDelDtor)("HelpLinkNor", v47) )
  {
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)i);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v15 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v15);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v17 = Font::Get(0);
    v18 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 2,
            uiWidth,
            uiHeight,
            v17,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v19 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v18;
    ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v19[122].__vecDelDtor)(v18, 5, 0);
    ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v20 = TextData::Get(0xF557442Au);
    (*(void (__thiscall **)(PgSprData *, char *))i)(pkTextWin, v20);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    i = 0;
    pkTextWin = (PgSprData *)v2->m_apkInvWin;
    do
    {
      pkTexture10 = i + 1;
      sprintf(acShapeName, "IconSlot%03d");
      v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v23 = (ItemIcon *)ItemShopInvWin::CreateWin(
                          uiLeft - v8 + 1,
                          uiTop - v9 + 1,
                          i,
                          &v2->baseclass_0.baseclass_0.baseclass_0);
      pkTextWin->baseclass_0.vfptr = (NiRefObjectVtbl *)v23;
      i = (unsigned int)v23;
      ItemIcon::SetItemSellInfo(v23, 0);
      v24 = pkTextWin;
      *(_DWORD *)(i + 448) = 0;
      (*((void (__stdcall **)(_DWORD))v24->baseclass_0.vfptr->__vecDelDtor + 129))(0);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 140))(1);
      v25 = pkTextWin;
      pkTextWin->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkItemInfoWin;
      i = pkTexture10;
      pkTextWin = (PgSprData *)((char *)v25 + 4);
    }
    while ( pkTexture10 < 42 );
    pkTexture10 = (signed int)MenuTexMgr::GetTexture(0x1Cu);
    pkTextWin = (PgSprData *)UIUtil::CreateBtn(
                               &ui,
                               4u,
                               "PrePageNor",
                               "PrePageClick",
                               "PrePageOver",
                               0,
                               (NiSourceTexture *)pkTexture10);
    pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
    v26 = TextData3::Get(0x6A8A9870u);
    PgWin::SetToolTipWinText((PgWin *)pkTextWin, v26);
    pkTextWin = (PgSprData *)UIUtil::CreateBtn(
                               &ui,
                               5u,
                               "NextPageNor",
                               "NextPageClick",
                               "NextPageOver",
                               0,
                               (NiSourceTexture *)pkTexture10);
    pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
    v27 = TextData3::Get(0x25449D82u);
    PgWin::SetToolTipWinText((PgWin *)pkTextWin, v27);
    UIUtil::CreateSpr(&ui, "Number", 0);
    *(_QWORD *)&v28.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v28.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v2->m_pkPageText = UIUtil::CreateTextNoSpr(&ui, "Number01", byte_9A28C9, COERCE_D3DXCOLOR(v28.r), 5u);
    pkTexture = MenuTexMgr::GetTexture(0x1Du);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WTitleNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WTitleClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WTitleOver");
    v29 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v29;
    ((void (__thiscall *)(PgWinBut *))v30[130].__vecDelDtor)(v29);
    v31 = TextData2::Get(0xF602040Cu);
    PgWin::SetToolTipWinText((PgWin *)pkTextWin, v31);
    pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkWTitleTabList,
      (const unsigned int *)&pkTextWin);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EnchantNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "EnchantClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "EnchantOver");
    v32 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v32;
    v33[130].__vecDelDtor((NiRefObject *)v32, 1u);
    v34 = TextData2::Get(0x82B1C1C9u);
    PgWin::SetToolTipWinText((PgWin *)pkTextWin, v34);
    pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkWTitleTabList,
      (const unsigned int *)&pkTextWin);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GeneralNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GeneralClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GeneralOver");
    v35 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
    v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v35;
    v36[130].__vecDelDtor((NiRefObject *)v35, 2u);
    v37 = TextData3::Get(0xAFF6D637u);
    PgWin::SetToolTipWinText((PgWin *)pkTextWin, v37);
    pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkItemTabList,
      (const unsigned int *)&pkTextWin);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RepurchaseNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "RepurchaseClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "RepurchaseOver");
    v38 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
    v39 = v38;
    v40 = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor;
    pkTextWin = (PgSprData *)v39;
    v40(&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3u);
    v41 = TextData3::Get(0x2392E3Eu);
    PgWin::SetToolTipWinText(&v39->baseclass_0.baseclass_0, v41);
    v39->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkItemTabList,
      (const unsigned int *)&pkTextWin);
    ((void (__thiscall *)(NPCItemWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v60) = 0;
    UIUtil::_UIUtil(&ui);
    v60 = -1;
    if ( spNode.m_pObject )
    {
      v42 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v42 )
          v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v42, 1u);
      }
    }
    result = 1;
  }
  else
  {
    LOBYTE(v60) = 0;
    UIUtil::_UIUtil(&ui);
    v60 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0055FB80) --------------------------------------------------------
void __thiscall NPCItemWin::OnInvRClick(NPCItemWin *this, unsigned int uiInvIndex)
{
  NPCItemWin *v2; // ebx@1
  ItemShopInvWin *v3; // eax@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v4; // ecx@1
  ItemRepurchase *v5; // esi@1
  int v6; // edi@2
  int v7; // esi@2
  int v8; // edi@3
  int v9; // edx@6
  int v10; // esi@9
  int v11; // ebx@9
  int v12; // eax@11
  int v13; // eax@12
  ItemMoney *v14; // esi@13
  unsigned __int16 *v15; // eax@13
  GameFrameWork *v16; // esi@16
  char *v17; // eax@16
  GameFrameWork *v18; // esi@18
  char *v19; // eax@19
  unsigned int v20; // esi@22
  unsigned __int64 v21; // qax@22
  CClientGuild *v22; // eax@31
  GameFrameWork *v23; // esi@33
  char *v24; // eax@33
  unsigned int v25; // edi@35
  GameFrameWork *v26; // ebx@40
  char *v27; // eax@40
  GameFrameWork *v28; // ebx@44
  char *v29; // eax@44
  unsigned int v30; // [sp-4h] [bp-1Ch]@18
  unsigned int i64ReBuyPrice; // [sp+Ch] [bp-Ch]@9
  int i64ReBuyPrice_4; // [sp+10h] [bp-8h]@0
  NPCItemWin *pkCallerWin; // [sp+14h] [bp-4h]@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkSellInfo; // [sp+20h] [bp+8h]@1

  v2 = this;
  v3 = this->m_apkInvWin[uiInvIndex];
  v4 = v3->m_pkSellInfo;
  v5 = v3->m_pkRepurchaseItem;
  pkCallerWin = v2;
  pkSellInfo = v4;
  if ( v4 )
  {
    v6 = v4->item;
    v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v4->item) )
    {
      if ( (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) )
      {
        v9 = *(_DWORD *)(v7 + 196);
        if ( *(_DWORD *)(v9 + 4 * v6) )
          v8 = *(_DWORD *)(v9 + 4 * v6);
        else
          v8 = 0;
      }
      else
      {
        v8 = 0;
      }
    }
    else
    {
      v8 = 0;
    }
    v10 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    v11 = *(_WORD *)v8;
    i64ReBuyPrice = *(_DWORD *)(v8 + 211);
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                            *(_WORD *)v8) )
    {
      if ( (unsigned __int16)v11 <= *(_WORD *)(v10 + 200) )
      {
        v12 = *(_DWORD *)(v10 + 196) + 4 * v11;
        if ( *(_DWORD *)v12 )
        {
          v13 = *(_DWORD *)v12;
          if ( v13 )
          {
            v14 = ItemMoneyTab::GetByInxName((char *)(v13 + 2));
            v15 = (unsigned __int16 *)ItemMoneyTab::GetItemMoneyInfoByItemInx(v14->IM_ItemIDX);
            if ( v14 && v15 )
            {
              if ( v14->IM_MoneyLot > Inventory::GetItemLot(&g_kInventory, *v15) )
              {
                v16 = (GameFrameWork *)pkCallerWin->baseclass_0.m_pkFrameWork;
                v17 = TextData3::Get(0x5083C8E4u);
                GameFrameWork::AddSysMsg(v16, v17);
                return;
              }
            }
            else
            {
              if ( i64ReBuyPrice > User::GetMoney(&g_kUser) )
              {
                v18 = (GameFrameWork *)pkCallerWin->baseclass_0.m_pkFrameWork;
                v30 = -1040586969;
                goto LABEL_19;
              }
            }
            if ( v14 && v14->IM_MoneyLot )
            {
              v20 = *(_DWORD *)(v8 + 106);
              HIDWORD(v21) = 0;
              goto LABEL_35;
            }
          }
        }
      }
    }
    if ( *(_DWORD *)(v8 + 224) )
    {
      v22 = GuildTask::GetGuild();
      if ( v22 )
      {
        v21 = v22->m_iGuildToken / *(_DWORD *)(v8 + 224);
        v20 = v21;
        if ( !v21 )
        {
          v23 = (GameFrameWork *)pkCallerWin->baseclass_0.m_pkFrameWork;
          v24 = TextData2::Get(0xE1FC4A4Cu);
          GameFrameWork::AddSysMsg(v23, v24);
          return;
        }
      }
      else
      {
        HIDWORD(v21) = i64ReBuyPrice_4;
        v20 = i64ReBuyPrice;
      }
      goto LABEL_35;
    }
    if ( !i64ReBuyPrice )
    {
      if ( *(_DWORD *)(v8 + 220) <= 0u )
      {
        if ( *(_DWORD *)(v8 + 228) <= 0u )
          return;
        v21 = User::Coin(&g_kUser) / *(_DWORD *)(v8 + 228);
        v20 = v21;
      }
      else
      {
        v20 = *(_DWORD *)(v8 + 106);
        HIDWORD(v21) = 0;
      }
      goto LABEL_35;
    }
    v21 = User::GetMoney(&g_kUser) / i64ReBuyPrice;
    v20 = v21;
    if ( v21 )
    {
LABEL_35:
      v25 = *(_DWORD *)(v8 + 106);
      if ( SHIDWORD(v21) >= 0 && (SHIDWORD(v21) > 0 || v20 >= v25) )
        v20 = v25;
      if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
      {
        v26 = (GameFrameWork *)pkCallerWin->baseclass_0.m_pkFrameWork;
        pkCallerWin->m_TargetItemID = pkSellInfo->item;
        v27 = TextData::Get(0x4A344943u);
        GameFrameWork::OnOpenDivideWin(v26, &pkCallerWin->baseclass_0.baseclass_0.baseclass_0, 9u, v20, v27, 0);
        DivideWin::SetValueToEdit((DivideWin *)pkCallerWin->baseclass_0.m_pkFrameWork[20].m_kMsgQ.m_uiHead, 1u);
      }
      else
      {
        GameFrameWork::NcItemBuyReq((GameFrameWork *)pkCallerWin->baseclass_0.m_pkFrameWork, pkSellInfo->item, v20);
      }
      return;
    }
    v18 = (GameFrameWork *)pkCallerWin->baseclass_0.m_pkFrameWork;
    v30 = 894386479;
LABEL_19:
    v19 = TextData::Get(v30);
    GameFrameWork::AddSysMsg(v18, v19);
    return;
  }
  if ( v5 )
  {
    if ( v5->pItem->m_pkInfo->SellPrice <= User::GetMoney(&g_kUser) )
    {
      GameFrameWork::NcItemRepurchaseReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v5->nHandle);
    }
    else
    {
      v28 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
      v29 = TextData::Get(0x304F413Du);
      GameFrameWork::AddSysMsg(v28, v29);
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;
// A9816C: using guessed type int g_pkKeyboard;

//----- (0055FEC0) --------------------------------------------------------
void __thiscall NPCItemWin::OnCommand(NPCItemWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      NPCItemWin::OnInvLClick(this, lParam);
      break;
    case 1u:
      NPCItemWin::OnInvRClick(this, lParam);
      break;
    case 4u:
      NPCItemWin::OnPrevPage(this);
      break;
    case 5u:
      NPCItemWin::OnNextPage(this);
      break;
    case 7u:
      NPCItemWin::OnCancel(this);
      break;
    case 9u:
      if ( lParam )
        GameFrameWork::NcItemBuyReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_TargetItemID, lParam);
      break;
    case 0xAu:
      NPCItemWin::OnHelpLink(this);
      break;
    case 2u:
      NPCItemWin::OnTab(this, (NPCItemWin::PAGETYPE)lParam);
      break;
    case 3u:
      NPCItemWin::OnTab(this, (NPCItemWin::PAGETYPE)lParam);
      break;
    default:
      return;
  }
}

//----- (0055FF80) --------------------------------------------------------
void *__thiscall ItemShopInvWin::_scalar_deleting_destructor_(ItemShopInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemShopInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemShopInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A2AB4: using guessed type int (__stdcall *ItemShopInvWin___vftable_)(int uiFlags);
// 9A2AD4: using guessed type int (__thiscall *ItemShopInvWin___vftable_)(void *p, char);

//----- (0055FFC0) --------------------------------------------------------
void *__thiscall NPCItemWin::_scalar_deleting_destructor_(NPCItemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NPCItemWin::_NPCItemWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0055FFF0) --------------------------------------------------------
ItemInfo *__cdecl ItemMoneyTab::GetItemMoneyInfoByItemInx(char *pcInxName)
{
  unsigned int v1; // edi@3
  void *v2; // eax@5
  ItemInfo *result; // eax@7

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<ItemMoney_ItemMoneyTab>::GetTotal() )
    {
      while ( 1 )
      {
        if ( !strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 4),
                                v1),
                pcInxName) )
        {
          v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemMoney_ItemMoneyTab>::ms_pkTable + 4), v1);
          if ( v2 )
            break;
        }
        ++v1;
        if ( v1 >= ITableBase<ItemMoney_ItemMoneyTab>::GetTotal() )
          goto LABEL_7;
      }
      result = ItemInfoTab::GetByInxName((char *)v2 + 32);
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E00: using guessed type int ITableBase_ItemMoney_ItemMoneyTab___ms_pkTable;

//----- (00560090) --------------------------------------------------------
void __thiscall NPCSkillInvWin::_NPCSkillInvWin(NPCSkillInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSkillInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSkillInvWin::_vftable_;
  SkillIcon::_SkillIcon(&this->baseclass_0);
}
// 9A3154: using guessed type int (__stdcall *NPCSkillInvWin___vftable_)(int uiFlags);
// 9A3174: using guessed type int (__thiscall *NPCSkillInvWin___vftable_)(void *p, char);

//----- (005600B0) --------------------------------------------------------
unsigned __int16 __thiscall NPCSkillInvWin::GetSkill(NPCSkillInvWin *this)
{
  return this->m_kSkillID;
}

//----- (005600C0) --------------------------------------------------------
bool __thiscall NPCSkillInvWin::Create(NPCSkillInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  NPCSkillInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0.baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (00560100) --------------------------------------------------------
void __thiscall NPCSkillInvWin::OnFirstHitWin(NPCSkillInvWin *this)
{
  NPCSkillInvWin *v1; // esi@1
  unsigned __int16 v2; // dx@1
  PgWin *v3; // ecx@2
  unsigned int v4; // eax@3

  v1 = this;
  v2 = this->m_kSkillID;
  if ( v2 != -1 )
  {
    v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v3 )
    {
      v4 = v1->m_uiSkillType;
      if ( v4 )
      {
        if ( v4 == 1 )
          SkillInfoWin::SetPassiveSkillBuyInfo((SkillInfoWin *)v3, v2, v1->m_uiPrice);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        SkillInfoWin::SetSkillBuyInfo((SkillInfoWin *)v3, v2, v1->m_uiPrice);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}

//----- (00560180) --------------------------------------------------------
void __thiscall NPCSkillWin::OnHelpLink(NPCSkillWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NPCSkill");
}

//----- (005601B0) --------------------------------------------------------
unsigned int __thiscall NPCSkillWin::GetSellItemNum(NPCSkillWin *this)
{
  unsigned int v1; // edx@1
  unsigned int result; // eax@1
  unsigned int v3; // ecx@2
  unsigned int v4; // ecx@15

  v1 = this->m_uiCurSkillType;
  result = 0;
  if ( v1 )
  {
    if ( v1 == 1 )
    {
      v4 = this->m_uiCurPageType;
      if ( v4 )
      {
        switch ( v4 )
        {
          case 1u:
            result = Market::GetTotalClePassiveSkill();
            break;
          case 2u:
            result = Market::GetTotalArcPassiveSkill();
            break;
          case 3u:
            result = Market::GetTotalMagPassiveSkill();
            break;
          case 4u:
            result = Market::GetTotalJokPassiveSkill();
            break;
          case 5u:
            result = Market::GetTotalSenPassiveSkill();
            break;
        }
      }
      else
      {
        result = Market::GetTotalFigPassiveSkill();
      }
    }
    else
    {
      if ( v1 == 2 )
        result = Market::GetTotalProdSkill();
    }
  }
  else
  {
    v3 = this->m_uiCurPageType;
    if ( v3 )
    {
      switch ( v3 )
      {
        case 1u:
          result = Market::GetTotalCleActiveSkill();
          break;
        case 2u:
          result = Market::GetTotalArcActiveSkill();
          break;
        case 3u:
          result = Market::GetTotalMagActiveSkill();
          break;
        case 4u:
          result = Market::GetTotalJokActiveSkill();
          break;
        case 5u:
          result = Market::GetTotalSenActiveSkill();
          break;
      }
    }
    else
    {
      result = Market::GetTotalFigActiveSkill();
    }
  }
  return result;
}

//----- (00560250) --------------------------------------------------------
unsigned int __thiscall NPCSkillWin::GetMaxPageNum(NPCSkillWin *this)
{
  unsigned int v1; // eax@1
  unsigned int result; // eax@2

  v1 = NPCSkillWin::GetSellItemNum(this);
  if ( v1 )
    result = (v1 - 1) / 0x24 + 1;
  else
    result = 1;
  return result;
}

//----- (00560270) --------------------------------------------------------
NPCSkillInvWin *__thiscall NPCSkillWin::GetInvWin(NPCSkillWin *this, unsigned int uiIndex)
{
  NPCSkillInvWin *result; // eax@2

  if ( uiIndex < 0x24 )
    result = this->m_apkInvWin[uiIndex];
  else
    result = 0;
  return result;
}

//----- (00560290) --------------------------------------------------------
void __thiscall NPCSkillWin::_NPCSkillWin(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  NiD3DPass *v2; // ecx@1
  bool v3; // zf@2
  NiTexture *v4; // edi@4

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSkillWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSkillWin::_vftable_;
  v2 = this->m_spPassOne.m_pObject;
  if ( v2 )
  {
    v3 = v2->m_uiRefCount-- == 1;
    if ( v3 )
      NiD3DPass::ReturnPassToPool(v2);
  }
  v4 = v1->m_spGrayTexture.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A33E0: using guessed type int (__stdcall *NPCSkillWin___vftable_)(int uiFlags);
// 9A33FC: using guessed type int (__thiscall *NPCSkillWin___vftable_)(void *p, char);

//----- (00560330) --------------------------------------------------------
void __thiscall NPCSkillWin::OnOk(NPCSkillWin *this)
{
  GameFrameWork::CloseSkillShopMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00560340) --------------------------------------------------------
void __thiscall NPCSkillWin::OnCancel(NPCSkillWin *this)
{
  GameFrameWork::CloseSkillShopMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00560350) --------------------------------------------------------
void __thiscall NPCSkillWin::UpdatePageInfo(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@2
  char *v3; // eax@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    NPCSkillWin::GetSellItemNum(v1);
    v2 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v3 = fs("%d / %d");
    v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v3);
  }
}

//----- (005603B0) --------------------------------------------------------
void __thiscall NPCSkillInvWin::DoAction(NPCSkillInvWin *this)
{
  NPCSkillInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (005603E0) --------------------------------------------------------
void __thiscall NPCSkillInvWin::DoRAction(NPCSkillInvWin *this)
{
  NPCSkillInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00560410) --------------------------------------------------------
void __thiscall NPCSkillWin::NPCSkillWin(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  NiTexture *v2; // ebx@1
  NiD3DPass *v3; // ecx@6
  bool v4; // zf@7

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSkillWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSkillWin::_vftable_;
  v1->m_spGrayTexture.m_pObject = 0;
  v1->m_spPassOne.m_pObject = 0;
  v1->m_apkInvWin[0] = 0;
  v1->m_apkInvWin[1] = 0;
  v1->m_apkInvWin[2] = 0;
  v1->m_apkInvWin[3] = 0;
  v1->m_apkInvWin[4] = 0;
  v1->m_apkInvWin[5] = 0;
  v1->m_apkInvWin[6] = 0;
  v1->m_apkInvWin[7] = 0;
  v1->m_apkInvWin[8] = 0;
  v1->m_apkInvWin[9] = 0;
  v1->m_apkInvWin[10] = 0;
  v1->m_apkInvWin[11] = 0;
  v1->m_apkInvWin[12] = 0;
  v1->m_apkInvWin[13] = 0;
  v1->m_apkInvWin[14] = 0;
  v1->m_apkInvWin[15] = 0;
  v1->m_apkInvWin[16] = 0;
  v1->m_apkInvWin[17] = 0;
  v1->m_apkInvWin[18] = 0;
  v1->m_apkInvWin[19] = 0;
  v1->m_apkInvWin[20] = 0;
  v1->m_apkInvWin[21] = 0;
  v1->m_apkInvWin[22] = 0;
  v1->m_apkInvWin[23] = 0;
  v1->m_apkInvWin[24] = 0;
  v1->m_apkInvWin[25] = 0;
  v1->m_apkInvWin[26] = 0;
  v1->m_apkInvWin[27] = 0;
  v1->m_apkInvWin[28] = 0;
  v1->m_apkInvWin[29] = 0;
  v1->m_apkInvWin[30] = 0;
  v1->m_apkInvWin[31] = 0;
  v1->m_apkInvWin[32] = 0;
  v1->m_apkInvWin[33] = 0;
  v1->m_apkInvWin[34] = 0;
  v1->m_apkInvWin[35] = 0;
  v1->m_pkInfoWin = 0;
  v1->m_uiCurPageType = 0;
  v1->m_uiCurPage = 0;
  v1->m_uiCurSkillType = 0;
  v2 = v1->m_spGrayTexture.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spGrayTexture.m_pObject = 0;
  }
  v3 = v1->m_spPassOne.m_pObject;
  if ( v3 )
  {
    v4 = v3->m_uiRefCount-- == 1;
    if ( v4 )
      NiD3DPass::ReturnPassToPool(v3);
    v1->m_spPassOne.m_pObject = 0;
  }
  v1->m_pkPageText = 0;
}
// 9A33E0: using guessed type int (__stdcall *NPCSkillWin___vftable_)(int uiFlags);
// 9A33FC: using guessed type int (__thiscall *NPCSkillWin___vftable_)(void *p, char);

//----- (005605C0) --------------------------------------------------------
void __thiscall NPCSkillWin::OnInvRClick(NPCSkillWin *this, unsigned int uiInvIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v2; // ebx@1
  int v3; // esi@2
  int v4; // edi@2
  int v5; // edx@4
  int v6; // eax@5
  GameFrameWork *v7; // esi@7
  char *v8; // eax@7
  NPCSkillWin *v9; // [sp+4h] [bp-4h]@1

  v9 = this;
  v2 = this->m_apkInvWin[uiInvIndex]->m_pkSellInfo;
  if ( v2 )
  {
    v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v4 = v2->item;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v2->item) )
    {
      if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
      {
        v5 = *(_DWORD *)(v3 + 196);
        if ( *(_DWORD *)(v5 + 4 * v4) )
        {
          v6 = *(_DWORD *)(v5 + 4 * v4);
          if ( v6 )
          {
            if ( *(_DWORD *)(v6 + 211) <= User::GetMoney(&g_kUser) )
            {
              GameFrameWork::NcItemBuyReq((GameFrameWork *)v9->baseclass_0.m_pkFrameWork, v2->item, 1u);
            }
            else
            {
              v7 = (GameFrameWork *)v9->baseclass_0.m_pkFrameWork;
              v8 = TextData::Get(0x5B531F00u);
              GameFrameWork::AddSysMsg(v7, v8);
            }
          }
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00560680) --------------------------------------------------------
void __thiscall NPCSkillWin::OnShowWin(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  NPCSkillWin::UpdatePageInfo(v1);
}

//----- (00560690) --------------------------------------------------------
void __thiscall NPCSkillInvWin::SetItem(NPCSkillInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo)
{
  NPCSkillInvWin *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@2
  int v4; // ebx@3
  int v5; // edi@3
  int v6; // eax@5
  int v7; // ebx@6
  ActiveSkillViewInfo *v8; // eax@7
  ActiveSkillViewInfo *v9; // edi@7
  float v10; // ST0C_4@8
  float v11; // ST08_4@8
  float v12; // ST04_4@8
  unsigned int v13; // ST08_4@8
  NiSourceTexture *v14; // eax@8
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@8
  Tutorial *v16; // eax@8
  Tutorial *v17; // eax@8
  NiRefObjectVtbl *pkInfoa; // [sp+28h] [bp+8h]@8

  v2 = this;
  this->m_pkSellInfo = pkInfo;
  if ( pkInfo )
  {
    v4 = pkInfo->item;
    v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v4) )
    {
      if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196) + 4 * v4;
        if ( *(_DWORD *)v6 )
        {
          v7 = *(_DWORD *)v6;
          if ( *(_DWORD *)v6 )
          {
            v8 = ActSkillViewInfoTab::GetByInxName((char *)(v7 + 2));
            v9 = v8;
            if ( v8 )
            {
              v12 = (double)v8->R;
              v11 = (double)v8->G;
              v10 = (double)v8->B;
              SkillIcon::SetBackPlaneColor(&v2->baseclass_0, v12, v11, v10, 255.0);
              SkillIcon::SetTopPlaneColor(&v2->baseclass_0, 255.0, 0.0, 0.0, 0.0);
              v13 = v9->IconIndex;
              pkInfoa = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v14 = IconMgr::GetTexture(v9->IconFile);
              ((void (__thiscall *)(NPCSkillInvWin *, NiSourceTexture *, unsigned int, signed int, signed int))pkInfoa[146].__vecDelDtor)(
                v2,
                v14,
                v13,
                32,
                32);
              v15 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
              v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
              v15(
                &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                1u);
              v2->m_kSkillID = v9->ID;
              v2->m_uiPrice = *(_DWORD *)(v7 + 211);
              v16 = Singleton<Tutorial>::getInstance();
              v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                (NiRefObject *)v2,
                v16->m_bLockSkillShop == 0);
              v17 = Singleton<Tutorial>::getInstance();
              IconWin::IconDisable(&v2->baseclass_0.baseclass_0, v17->m_bLockSkillShop);
            }
          }
        }
      }
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD, signed int, signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      0,
      -1,
      32,
      32);
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v3(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    v2->m_kSkillID = -1;
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00560840) --------------------------------------------------------
void __thiscall NPCSkillInvWin::SetItem(NPCSkillInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo, unsigned int uiSkillType)
{
  NPCSkillInvWin *v3; // esi@1
  int v4; // eax@2
  int v5; // edi@3
  int v6; // ebx@3
  int v7; // edx@5
  int v8; // ebx@6
  ActiveSkillViewInfo *v9; // eax@8
  ActiveSkillViewInfo *v10; // edi@8
  float v11; // ST0C_4@9
  float v12; // ST08_4@9
  float v13; // ST04_4@9
  unsigned int v14; // ST08_4@9
  NiSourceTexture *v15; // eax@9
  unsigned __int16 v16; // ax@9
  PassiveSkillViewInfo *v17; // eax@13
  PassiveSkillViewInfo *v18; // edi@13
  float v19; // ST0C_4@14
  float v20; // ST08_4@14
  float v21; // ST04_4@14
  NiRefObjectVtbl *v22; // ebx@14
  unsigned int v23; // ST08_4@14
  NiSourceTexture *v24; // eax@14
  unsigned __int16 v25; // ax@14
  NiRefObjectVtbl *v26; // eax@18
  Tutorial *v27; // eax@18
  Tutorial *v28; // eax@18
  void *(__thiscall *v29)(NiRefObject *, unsigned int); // eax@20
  int pkItemInfo; // [sp+2Ch] [bp+8h]@6
  NiRefObjectVtbl *pkItemInfoa; // [sp+2Ch] [bp+8h]@9

  v3 = this;
  this->m_pkSellInfo = pkInfo;
  if ( !pkInfo || (v4 = pkInfo->item, (_WORD)v4 == -1) )
  {
    ((void (__thiscall *)(NPCSkillInvWin *, _DWORD, signed int, signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      this,
      0,
      -1,
      32,
      32);
    v29 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v29(
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    v3->m_kSkillID = -1;
    return;
  }
  v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v6 = pkInfo->item;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          v4) )
  {
    if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) )
    {
      v7 = *(_DWORD *)(v5 + 196);
      if ( *(_DWORD *)(v7 + 4 * v6) )
      {
        v8 = *(_DWORD *)(v7 + 4 * v6);
        pkItemInfo = v8;
        if ( v8 )
        {
          if ( uiSkillType )
          {
            if ( uiSkillType == 1 )
            {
              v17 = PasSkillViewInfoTab::GetByInxName((char *)(v8 + 2));
              v18 = v17;
              if ( !v17 )
                return;
              v21 = (double)v17->R;
              v20 = (double)v17->G;
              v19 = (double)v17->B;
              SkillIcon::SetBackPlaneColor(&v3->baseclass_0, v21, v20, v19, 255.0);
              SkillIcon::SetTopPlaneColor(&v3->baseclass_0, 255.0, 0.0, 0.0, 0.0);
              v22 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v23 = v18->Icon;
              v24 = IconMgr::GetTexture(v18->IconFile);
              ((void (__thiscall *)(NPCSkillInvWin *, NiSourceTexture *, unsigned int, signed int, signed int))v22[146].__vecDelDtor)(
                v3,
                v24,
                v23,
                32,
                32);
              v25 = v18->ID;
              v3->m_kSkillID = v18->ID;
              if ( v25 < 0x4E20u )
                SkillIcon::UsingSkillAlphaProperty(&v3->baseclass_0);
              else
                SkillIcon::UsingItemAlphaProperty(&v3->baseclass_0);
              v8 = pkItemInfo;
            }
          }
          else
          {
            v9 = ActSkillViewInfoTab::GetByInxName((char *)(v8 + 2));
            v10 = v9;
            if ( !v9 )
              return;
            v13 = (double)v9->R;
            v12 = (double)v9->G;
            v11 = (double)v9->B;
            SkillIcon::SetBackPlaneColor(&v3->baseclass_0, v13, v12, v11, 255.0);
            SkillIcon::SetTopPlaneColor(&v3->baseclass_0, 255.0, 0.0, 0.0, 0.0);
            v14 = v10->IconIndex;
            pkItemInfoa = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v15 = IconMgr::GetTexture(v10->IconFile);
            ((void (__thiscall *)(NPCSkillInvWin *, NiSourceTexture *, unsigned int, signed int, signed int))pkItemInfoa[146].__vecDelDtor)(
              v3,
              v15,
              v14,
              32,
              32);
            v16 = v10->ID;
            v3->m_kSkillID = v10->ID;
            if ( v16 < 0x4E20u )
              SkillIcon::UsingSkillAlphaProperty(&v3->baseclass_0);
            else
              SkillIcon::UsingItemAlphaProperty(&v3->baseclass_0);
          }
          v26 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
          v26[60].__vecDelDtor((NiRefObject *)v3, 1u);
          v3->m_uiPrice = *(_DWORD *)(v8 + 211);
          v3->m_uiSkillType = uiSkillType;
          v27 = Singleton<Tutorial>::getInstance();
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v3,
            v27->m_bLockSkillShop == 0);
          v28 = Singleton<Tutorial>::getInstance();
          IconWin::IconDisable(&v3->baseclass_0.baseclass_0, v28->m_bLockSkillShop);
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00560B10) --------------------------------------------------------
void __thiscall NPCSkillInvWin::SetItem(NPCSkillInvWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkInfo, unsigned int uiSkillType, NiTexture *pkTexture, NiD3DPass *pkD3DPass)
{
  NPCSkillInvWin *v5; // esi@1
  int v6; // eax@2
  int v7; // edi@3
  int v8; // ebx@3
  int v9; // edx@5
  int v10; // eax@6
  ActiveSkillViewInfo *v11; // eax@8
  ActiveSkillViewInfo *v12; // edi@8
  float v13; // ST1C_4@9
  float v14; // ST18_4@9
  float v15; // ST14_4@9
  NiRefObjectVtbl *v16; // ebx@9
  unsigned int v17; // ST18_4@9
  NiSourceTexture *v18; // eax@9
  unsigned __int16 v19; // ax@9
  double v20; // st7@12
  double v21; // st7@15
  PassiveSkillViewInfo *v22; // eax@17
  PassiveSkillViewInfo *v23; // edi@17
  float v24; // ST1C_4@18
  float v25; // ST18_4@18
  float v26; // ST14_4@18
  NiRefObjectVtbl *v27; // ebx@18
  unsigned int v28; // ST18_4@18
  NiSourceTexture *v29; // eax@18
  unsigned __int16 v30; // ax@18
  float v31; // ST20_4@22
  float v32; // ST20_4@27
  void *(__thiscall *v33)(NiRefObject *, unsigned int); // eax@29
  Tutorial *v34; // eax@29
  Tutorial *v35; // eax@29
  void *(__thiscall *v36)(NiRefObject *, unsigned int); // eax@31
  int pkItemInfo; // [sp+3Ch] [bp+8h]@6

  v5 = this;
  this->m_pkSellInfo = pkInfo;
  if ( !pkInfo || (v6 = pkInfo->item, (_WORD)v6 == -1) )
  {
    ((void (__thiscall *)(NPCSkillInvWin *, _DWORD, signed int, signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      this,
      0,
      -1,
      32,
      32);
    v36 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v36(
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    v5->m_kSkillID = -1;
    return;
  }
  v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v8 = pkInfo->item;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          v6) )
  {
    if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) )
    {
      v9 = *(_DWORD *)(v7 + 196);
      if ( *(_DWORD *)(v9 + 4 * v8) )
      {
        v10 = *(_DWORD *)(v9 + 4 * v8);
        pkItemInfo = v10;
        if ( v10 )
        {
          if ( uiSkillType )
          {
            if ( uiSkillType != 1 )
            {
LABEL_29:
              v33 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
              v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
              v33(
                &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                1u);
              v5->m_uiPrice = *(_DWORD *)(pkItemInfo + 211);
              v5->m_uiSkillType = uiSkillType;
              v34 = Singleton<Tutorial>::getInstance();
              v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                (NiRefObject *)v5,
                v34->m_bLockSkillShop == 0);
              v35 = Singleton<Tutorial>::getInstance();
              IconWin::IconDisable(&v5->baseclass_0.baseclass_0, v35->m_bLockSkillShop);
              return;
            }
            v22 = PasSkillViewInfoTab::GetByInxName((char *)(v10 + 2));
            v23 = v22;
            if ( !v22 )
              return;
            v26 = (double)v22->R;
            v25 = (double)v22->G;
            v24 = (double)v22->B;
            SkillIcon::SetBackPlaneColor(&v5->baseclass_0, v26, v25, v24, 255.0);
            SkillIcon::SetTopPlaneColor(&v5->baseclass_0, 255.0, 0.0, 0.0, 0.0);
            v27 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v28 = v23->Icon;
            v29 = IconMgr::GetTexture(v23->IconFile);
            ((void (__thiscall *)(NPCSkillInvWin *, NiSourceTexture *, unsigned int, signed int, signed int))v27[146].__vecDelDtor)(
              v5,
              v29,
              v28,
              32,
              32);
            v30 = v23->ID;
            v5->m_kSkillID = v23->ID;
            if ( v30 >= 0x4E20u )
            {
              if ( !Skill::IsLearnProdSkill(v30) && !Skill::IsLearnPassiveSkill(v5->m_kSkillID) )
                goto LABEL_23;
              SkillIcon::SetBackPlaneColor(&v5->baseclass_0, 175.0, 175.0, 175.0, 155.0);
              v20 = 155.0;
              goto LABEL_22;
            }
            if ( Skill::IsLearnProdSkill(v30) || Skill::IsLearnPassiveSkill(v5->m_kSkillID) )
            {
              SkillIcon::SetBackPlaneColor(&v5->baseclass_0, 175.0, 175.0, 175.0, 155.0);
              v21 = 155.0;
              goto LABEL_27;
            }
          }
          else
          {
            v11 = ActSkillViewInfoTab::GetByInxName((char *)(v10 + 2));
            v12 = v11;
            if ( !v11 )
              return;
            v15 = (double)v11->R;
            v14 = (double)v11->G;
            v13 = (double)v11->B;
            SkillIcon::SetBackPlaneColor(&v5->baseclass_0, v15, v14, v13, 255.0);
            SkillIcon::SetTopPlaneColor(&v5->baseclass_0, 255.0, 0.0, 0.0, 0.0);
            v16 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v17 = v12->IconIndex;
            v18 = IconMgr::GetTexture(v12->IconFile);
            ((void (__thiscall *)(NPCSkillInvWin *, NiSourceTexture *, unsigned int, signed int, signed int))v16[146].__vecDelDtor)(
              v5,
              v18,
              v17,
              32,
              32);
            v19 = v12->ID;
            v5->m_kSkillID = v12->ID;
            if ( v19 >= 0x4E20u )
            {
              if ( !Skill::IsLearnProdSkill(v19) && !Skill::IsLearnSkill(v5->m_kSkillID) )
                goto LABEL_23;
              SkillIcon::SetBackPlaneColor(&v5->baseclass_0, 175.0, 175.0, 175.0, 160.0);
              v20 = 160.0;
LABEL_22:
              v31 = v20;
              SkillIcon::SetTopPlaneColor(&v5->baseclass_0, 175.0, 175.0, 175.0, v31);
LABEL_23:
              SkillIcon::UsingItemAlphaProperty(&v5->baseclass_0);
              goto LABEL_29;
            }
            if ( Skill::IsLearnProdSkill(v19) || Skill::IsLearnSkill(v5->m_kSkillID) )
            {
              SkillIcon::SetBackPlaneColor(&v5->baseclass_0, 175.0, 175.0, 175.0, 160.0);
              v21 = 160.0;
LABEL_27:
              v32 = v21;
              SkillIcon::SetTopPlaneColor(&v5->baseclass_0, 175.0, 175.0, 175.0, v32);
              goto LABEL_28;
            }
          }
LABEL_28:
          SkillIcon::UsingSkillAlphaProperty(&v5->baseclass_0);
          goto LABEL_29;
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00560F40) --------------------------------------------------------
void __thiscall NPCSkillWin::ResetContents(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  NPCSkillInvWin **v2; // ebx@1
  int v3; // edi@3
  void (__thiscall *v4)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // eax@4
  void (__thiscall *v5)(_DWORD, _DWORD); // eax@4
  unsigned int v6; // eax@6
  unsigned int v7; // edi@6
  unsigned int v8; // eax@7
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v9; // eax@11
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v10; // eax@17
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v11; // eax@23
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v12; // eax@29
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v13; // eax@35
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v14; // eax@41
  unsigned int v15; // eax@44
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v16; // eax@48
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v17; // eax@54
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v18; // eax@60
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v19; // eax@66
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v20; // eax@72
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v21; // eax@78
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *v22; // eax@84
  NiRefObjectVtbl *v23; // edi@86
  char *v24; // eax@86
  signed int v25; // [sp+8h] [bp-8h]@2
  unsigned int v26; // [sp+8h] [bp-8h]@9
  unsigned int v27; // [sp+8h] [bp-8h]@15
  unsigned int v28; // [sp+8h] [bp-8h]@21
  unsigned int v29; // [sp+8h] [bp-8h]@27
  unsigned int v30; // [sp+8h] [bp-8h]@33
  unsigned int v31; // [sp+8h] [bp-8h]@39
  unsigned int v32; // [sp+8h] [bp-8h]@46
  unsigned int v33; // [sp+8h] [bp-8h]@52
  unsigned int v34; // [sp+8h] [bp-8h]@58
  unsigned int v35; // [sp+8h] [bp-8h]@64
  unsigned int v36; // [sp+8h] [bp-8h]@70
  unsigned int v37; // [sp+8h] [bp-8h]@76
  unsigned int v38; // [sp+8h] [bp-8h]@82
  char *uiTotal; // [sp+Ch] [bp-4h]@2
  unsigned int uiTotala; // [sp+Ch] [bp-4h]@8
  unsigned int uiTotalb; // [sp+Ch] [bp-4h]@14
  unsigned int uiTotalc; // [sp+Ch] [bp-4h]@20
  unsigned int uiTotald; // [sp+Ch] [bp-4h]@26
  unsigned int uiTotale; // [sp+Ch] [bp-4h]@32
  unsigned int uiTotalf; // [sp+Ch] [bp-4h]@38
  unsigned int uiTotalg; // [sp+Ch] [bp-4h]@45
  unsigned int uiTotalh; // [sp+Ch] [bp-4h]@51
  unsigned int uiTotali; // [sp+Ch] [bp-4h]@57
  unsigned int uiTotalj; // [sp+Ch] [bp-4h]@63
  unsigned int uiTotalk; // [sp+Ch] [bp-4h]@69
  unsigned int uiTotall; // [sp+Ch] [bp-4h]@75
  unsigned int uiTotalm; // [sp+Ch] [bp-4h]@81

  v1 = this;
  v2 = this->m_apkInvWin;
  if ( this->m_apkInvWin[0] )
  {
    uiTotal = (char *)this->m_apkInvWin;
    v25 = 36;
    do
    {
      v3 = *(_DWORD *)uiTotal;
      if ( *(_DWORD *)uiTotal )
      {
        v4 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 584);
        *(_DWORD *)(v3 + 420) = 0;
        v4(v3, 0, -1, 32, 32);
        v5 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 240);
        *(_WORD *)(v3 + 28) |= 1u;
        v5(v3, 0);
        *(_WORD *)(v3 + 424) = -1;
      }
      uiTotal += 4;
      --v25;
    }
    while ( v25 );
    v6 = v1->m_uiCurSkillType;
    v7 = 36 * v1->m_uiCurPage;
    if ( v6 )
    {
      if ( v6 == 1 )
      {
        v15 = v1->m_uiCurPageType;
        if ( v15 )
        {
          switch ( v15 )
          {
            case 1u:
              uiTotalh = Market::GetTotalClePassiveSkill();
              if ( v7 < uiTotalh )
              {
                v33 = 0;
                do
                {
                  if ( v33 >= 0x24 )
                    break;
                  v17 = Market::GetClePasSkill(v7);
                  NPCSkillInvWin::SetItem(*v2, v17, 1u, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                  ++v33;
                  ++v7;
                  ++v2;
                }
                while ( v7 < uiTotalh );
              }
              break;
            case 2u:
              uiTotali = Market::GetTotalArcPassiveSkill();
              if ( v7 < uiTotali )
              {
                v34 = 0;
                do
                {
                  if ( v34 >= 0x24 )
                    break;
                  v18 = Market::GetArcPasSkill(v7);
                  NPCSkillInvWin::SetItem(*v2, v18, 1u, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                  ++v34;
                  ++v7;
                  ++v2;
                }
                while ( v7 < uiTotali );
              }
              break;
            case 3u:
              uiTotalj = Market::GetTotalMagPassiveSkill();
              if ( v7 < uiTotalj )
              {
                v35 = 0;
                do
                {
                  if ( v35 >= 0x24 )
                    break;
                  v19 = Market::GetMagPasSkill(v7);
                  NPCSkillInvWin::SetItem(*v2, v19, 1u, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                  ++v35;
                  ++v7;
                  ++v2;
                }
                while ( v7 < uiTotalj );
              }
              break;
            case 4u:
              uiTotalk = Market::GetTotalJokPassiveSkill();
              if ( v7 < uiTotalk )
              {
                v36 = 0;
                do
                {
                  if ( v36 >= 0x24 )
                    break;
                  v20 = Market::GetJokPasSkill(v7);
                  NPCSkillInvWin::SetItem(*v2, v20, 1u, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                  ++v36;
                  ++v7;
                  ++v2;
                }
                while ( v7 < uiTotalk );
              }
              break;
            case 5u:
              uiTotall = Market::GetTotalSenPassiveSkill();
              if ( v7 < uiTotall )
              {
                v37 = 0;
                do
                {
                  if ( v37 >= 0x24 )
                    break;
                  v21 = Market::GetSenPasSkill(v7);
                  NPCSkillInvWin::SetItem(*v2, v21, 1u, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                  ++v37;
                  ++v7;
                  ++v2;
                }
                while ( v7 < uiTotall );
              }
              break;
          }
        }
        else
        {
          uiTotalg = Market::GetTotalFigPassiveSkill();
          if ( v7 < uiTotalg )
          {
            v32 = 0;
            do
            {
              if ( v32 >= 0x24 )
                break;
              v16 = Market::GetFigPasSkill(v7);
              NPCSkillInvWin::SetItem(*v2, v16, 1u, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
              ++v32;
              ++v7;
              ++v2;
            }
            while ( v7 < uiTotalg );
          }
        }
      }
      else
      {
        if ( v6 == 2 )
        {
          uiTotalm = Market::GetTotalProdSkill();
          if ( v7 < uiTotalm )
          {
            v38 = 0;
            do
            {
              if ( v38 >= 0x24 )
                break;
              v22 = Market::GetProdSkill(v7);
              NPCSkillInvWin::SetItem(*v2, v22, 0, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
              ++v38;
              ++v7;
              ++v2;
            }
            while ( v7 < uiTotalm );
          }
        }
      }
    }
    else
    {
      v8 = v1->m_uiCurPageType;
      if ( v8 )
      {
        switch ( v8 )
        {
          case 1u:
            uiTotalb = Market::GetTotalCleActiveSkill();
            if ( v7 < uiTotalb )
            {
              v27 = 0;
              do
              {
                if ( v27 >= 0x24 )
                  break;
                v10 = Market::GetCleActSkill(v7);
                NPCSkillInvWin::SetItem(*v2, v10, 0, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                ++v27;
                ++v7;
                ++v2;
              }
              while ( v7 < uiTotalb );
            }
            break;
          case 2u:
            uiTotalc = Market::GetTotalArcActiveSkill();
            if ( v7 < uiTotalc )
            {
              v28 = 0;
              do
              {
                if ( v28 >= 0x24 )
                  break;
                v11 = Market::GetArcActSkill(v7);
                NPCSkillInvWin::SetItem(*v2, v11, 0, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                ++v28;
                ++v7;
                ++v2;
              }
              while ( v7 < uiTotalc );
            }
            break;
          case 3u:
            uiTotald = Market::GetTotalMagActiveSkill();
            if ( v7 < uiTotald )
            {
              v29 = 0;
              do
              {
                if ( v29 >= 0x24 )
                  break;
                v12 = Market::GetMagActSkill(v7);
                NPCSkillInvWin::SetItem(*v2, v12, 0, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                ++v29;
                ++v7;
                ++v2;
              }
              while ( v7 < uiTotald );
            }
            break;
          case 4u:
            uiTotale = Market::GetTotalJokActiveSkill();
            if ( v7 < uiTotale )
            {
              v30 = 0;
              do
              {
                if ( v30 >= 0x24 )
                  break;
                v13 = Market::GetJokActSkill(v7);
                NPCSkillInvWin::SetItem(*v2, v13, 0, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                ++v30;
                ++v7;
                ++v2;
              }
              while ( v7 < uiTotale );
            }
            break;
          case 5u:
            uiTotalf = Market::GetTotalSenActiveSkill();
            if ( v7 < uiTotalf )
            {
              v31 = 0;
              do
              {
                if ( v31 >= 0x24 )
                  break;
                v14 = Market::GetSenActSkill(v7);
                NPCSkillInvWin::SetItem(*v2, v14, 0, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
                ++v31;
                ++v7;
                ++v2;
              }
              while ( v7 < uiTotalf );
            }
            break;
        }
      }
      else
      {
        uiTotala = Market::GetTotalFigActiveSkill();
        if ( v7 < uiTotala )
        {
          v26 = 0;
          do
          {
            if ( v26 >= 0x24 )
              break;
            v9 = Market::GetFigActSkill(v7);
            NPCSkillInvWin::SetItem(*v2, v9, 0, v1->m_spGrayTexture.m_pObject, v1->m_spPassOne.m_pObject);
            ++v26;
            ++v7;
            ++v2;
          }
          while ( v7 < uiTotala );
        }
      }
    }
    if ( (unsigned __int8)((int (__thiscall *)(NPCSkillWin *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v1) )
    {
      NPCSkillWin::GetSellItemNum(v1);
      v23 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = fs("%d / %d");
      v23[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v24);
    }
  }
}

//----- (00561500) --------------------------------------------------------
void __thiscall NPCSkillWin::OnSetPage(NPCSkillWin *this, unsigned int uiPage)
{
  this->m_uiCurPage = uiPage;
  NPCSkillWin::ResetContents(this);
}

//----- (00561520) --------------------------------------------------------
void __thiscall NPCSkillInvWin::NPCSkillInvWin(NPCSkillInvWin *this)
{
  NPCSkillInvWin *v1; // esi@1
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@1

  v1 = this;
  SkillIcon::SkillIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSkillInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSkillInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  v1->m_pkSellInfo = 0;
  off_9A33BC(v1, 0, -1, 32, 32);
  v2 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  ((void (__cdecl *)(_DWORD))v2)(0);
  v1->m_kSkillID = -1;
  v1->m_uiSkillType = 0;
}
// 9A3154: using guessed type int (__stdcall *NPCSkillInvWin___vftable_)(int uiFlags);
// 9A3174: using guessed type int (__thiscall *NPCSkillInvWin___vftable_)(void *p, char);
// 9A33BC: using guessed type int (__thiscall *off_9A33BC)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);

//----- (005615D0) --------------------------------------------------------
void __thiscall NPCSkillWin::ResetPage(NPCSkillWin *this)
{
  this->m_uiCurPage = 0;
  this->m_uiCurPageType = 0;
  NPCSkillWin::ResetContents(this);
}

//----- (005615F0) --------------------------------------------------------
void __thiscall NPCSkillWin::OnActiveSkill(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockSkillShopTab )
  {
    v1->m_uiCurSkillType = 0;
    v1->m_uiCurPage = 0;
    NPCSkillWin::ResetContents(v1);
  }
}

//----- (00561690) --------------------------------------------------------
void __thiscall NPCSkillWin::OnPasssiveSkill(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockSkillShopTab )
  {
    v1->m_uiCurSkillType = 1;
    v1->m_uiCurPage = 0;
    NPCSkillWin::ResetContents(v1);
  }
}

//----- (00561730) --------------------------------------------------------
void __thiscall NPCSkillWin::OnProductSkill(NPCSkillWin *this)
{
  NPCSkillWin *v1; // edi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockSkillShopTab )
  {
    if ( !Skill::AmILearnAnyProdBaseSkill() )
    {
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          55,
          0,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            55,
            0,
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        55,
        0,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v1->m_uiCurSkillType = 2;
    v1->m_uiCurPage = 0;
    NPCSkillWin::ResetContents(v1);
  }
}

//----- (00561810) --------------------------------------------------------
void __thiscall NPCSkillWin::OnPrevPage(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  unsigned int v4; // eax@7

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockSkillShopTab )
  {
    v4 = v1->m_uiCurPage;
    if ( v4 )
    {
      v1->m_uiCurPage = v4 - 1;
      NPCSkillWin::ResetContents(v1);
    }
  }
}

//----- (005618A0) --------------------------------------------------------
void __thiscall NPCSkillWin::OnNextPage(NPCSkillWin *this)
{
  NPCSkillWin *v1; // esi@1
  Tutorial *v2; // eax@1
  void *v3; // eax@2
  unsigned int v4; // eax@7
  unsigned int v5; // ecx@7

  v1 = this;
  v2 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v3 = operator new(0xB4u);
    if ( v3 )
      Tutorial::Tutorial(v2);
    else
      v2 = 0;
    Singleton<Tutorial>::m_pInstance = v2;
  }
  if ( !v2->m_bLockSkillShopTab )
  {
    v4 = NPCSkillWin::GetSellItemNum(v1);
    v5 = v1->m_uiCurPage;
    if ( 4 * (9 * v5 + 9) < v4 )
    {
      v1->m_uiCurPage = v5 + 1;
      NPCSkillWin::ResetContents(v1);
    }
  }
}

//----- (00561940) --------------------------------------------------------
void __thiscall NPCSkillWin::OnSelectJob(NPCSkillWin *this, unsigned int uiIndex)
{
  NPCSkillWin *v2; // edi@1
  Tutorial *v3; // eax@1
  void *v4; // eax@2
  signed int v5; // ebx@7
  int v6; // esi@8

  v2 = this;
  v3 = Singleton<Tutorial>::m_pInstance;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    if ( v4 )
      Tutorial::Tutorial(v3);
    else
      v3 = 0;
    Singleton<Tutorial>::m_pInstance = v3;
  }
  if ( !v3->m_bLockSkillShopTab )
  {
    v5 = 6;
    if ( uiIndex < 6 )
    {
      v6 = (int)v2->m_apkActiveTabWinText;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 - 24) + 256))(0);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 468))(&Color::m_kDxWinTabColor);
        v6 += 4;
        --v5;
      }
      while ( v5 );
      ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWin[uiIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v2->m_apkActiveTabWinText[uiIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
      v2->m_uiCurPageType = uiIndex;
      v2->m_uiCurPage = 0;
      NPCSkillWin::ResetContents(v2);
    }
  }
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;

//----- (00561A40) --------------------------------------------------------
void __thiscall NPCSkillWin::SelectClassPage(NPCSkillWin *this, char kClass)
{
  char v2; // al@2

  switch ( kClass )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v2 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v2 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v2 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v2 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v2 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v2 = 26;
      break;
    default:
      v2 = 0;
      break;
  }
  switch ( v2 )
  {
    case 1:
      NPCSkillWin::OnSelectJob(this, 0);
      break;
    case 6:
      NPCSkillWin::OnSelectJob(this, 1u);
      break;
    case 0xB:
      NPCSkillWin::OnSelectJob(this, 2u);
      break;
    case 0x10:
      NPCSkillWin::OnSelectJob(this, 3u);
      break;
    case 0x15:
      NPCSkillWin::OnSelectJob(this, 4u);
      break;
    case 0x1A:
      NPCSkillWin::OnSelectJob(this, 5u);
      break;
    default:
      return;
  }
}

//----- (00561B70) --------------------------------------------------------
NPCSkillInvWin *__cdecl NPCSkillInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  NPCSkillInvWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1B0u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    NPCSkillInvWin::NPCSkillInvWin((NPCSkillInvWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *))(*(_DWORD *)v6 + 612))(
                          v6,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (NPCSkillInvWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (00561CB0) --------------------------------------------------------
NPCSkillWin *__cdecl NPCSkillWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  NPCSkillWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x234u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    NPCSkillWin::NPCSkillWin((NPCSkillWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (NPCSkillWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00561DE0) --------------------------------------------------------
bool __thiscall NPCSkillWin::Create(NPCSkillWin *this, PgFrameWork *pkFrameWork)
{
  NPCSkillWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  char *v6; // eax@10
  PgSprData *v7; // eax@11
  int v8; // edi@12
  int v9; // ebx@12
  NiSourceTexture *v10; // eax@12
  PgSprData *v11; // eax@15
  PgSprData *v12; // eax@15
  PgWinSpr *v13; // eax@15
  PgSprData *v14; // eax@17
  PgWinSpr *v15; // eax@17
  PgSprData *v16; // eax@17
  PgFont *v17; // eax@19
  PgWinText *v18; // eax@19
  NiRefObjectVtbl *v19; // edx@19
  char *v20; // eax@19
  PgSprData *v21; // eax@20
  NPCSkillInvWin *v22; // eax@20
  NiRefObjectVtbl *v23; // edx@20
  void (__stdcall *v24)(_DWORD); // eax@20
  PgSprData *v25; // eax@20
  PgSprData *v26; // ecx@20
  char *v27; // eax@21
  NiSourceTexture *v28; // ST74_4@21
  char *v29; // eax@21
  NiSourceTexture *v30; // ST74_4@21
  char *v31; // eax@21
  char *v32; // eax@21
  char *v33; // eax@21
  PgSprData *v34; // eax@21
  PgFont *v35; // eax@24
  PgWinText *v36; // eax@24
  char *v37; // eax@25
  PgSprData *v38; // eax@25
  PgWinBut *v39; // eax@25
  char *v40; // eax@25
  void *v41; // eax@25
  PgWinSpr *v42; // eax@25
  PgSprData::PgHitTester *v43; // eax@25
  void *v44; // edx@25
  PgFont *v45; // eax@25
  PgWinText *v46; // eax@25
  void *v47; // eax@26
  int v48; // eax@27
  void *v49; // eax@29
  int v50; // eax@30
  void *v51; // eax@32
  int v52; // eax@33
  void *v53; // eax@35
  int v54; // eax@36
  void *v55; // eax@38
  int v56; // eax@39
  void *v57; // eax@41
  int v58; // eax@42
  NiNode *v59; // esi@45
  const char *v60; // [sp+68h] [bp-78h]@13
  int *v61; // [sp+6Ch] [bp-74h]@13
  int *v62; // [sp+70h] [bp-70h]@13
  volatile LONG *v63; // [sp+74h] [bp-6Ch]@3
  NiSourceTexture *v64; // [sp+74h] [bp-6Ch]@13
  unsigned int v65; // [sp+78h] [bp-68h]@1
  unsigned int uiHeight; // [sp+88h] [bp-58h]@17
  unsigned int uiWidth; // [sp+8Ch] [bp-54h]@17
  NiTexturePalette *pkTexture8; // [sp+90h] [bp-50h]@8
  void *i; // [sp+94h] [bp-4Ch]@19
  void *pkTexture; // [sp+98h] [bp-48h]@1
  int uiTop; // [sp+9Ch] [bp-44h]@11
  int uiLeft; // [sp+A0h] [bp-40h]@11
  NiPointer<NiNode> spNode; // [sp+A4h] [bp-3Ch]@1
  PgSprData *pkTextWin; // [sp+A8h] [bp-38h]@15
  char acShapeName[33]; // [sp+ACh] [bp-34h]@20
  unsigned int v76; // [sp+D0h] [bp-10h]@1
  int v77; // [sp+DCh] [bp-4h]@1
  int v78; // [sp+E0h] [bp+0h]@1

  v76 = (unsigned int)&v78 ^ __security_cookie;
  v65 = (unsigned int)&v78 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v77 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = v3;
  if ( !v3 )
    goto LABEL_51;
  pkTexture8 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCSkill.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, pkTexture8);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "NPCSkillWin", 0) )
  {
LABEL_51:
    v4 = spNode.m_pObject;
    v77 = -1;
    if ( spNode.m_pObject )
    {
      v63 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_4;
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v64 = v10;
    v62 = &uiTop;
    v61 = &uiLeft;
    v60 = "Theme";
  }
  else
  {
    v64 = 0;
    v62 = &uiTop;
    v61 = &uiLeft;
    v60 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v60, v61, v62, v64);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    v13,
    0,
    v65);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  pkTexture8 = (NiTexturePalette *)MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWin = PgSprData::Create(
                  &spNode.m_pObject->baseclass_0,
                  "HelpLinkNor",
                  &uiLeft,
                  &uiTop,
                  (NiSourceTexture *)pkTexture8);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
  v15 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v15);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v77 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v17 = Font::Get(0);
  v18 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          uiWidth,
          uiHeight,
          v17,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v19 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (PgSprData *)v18;
  v19[122].__vecDelDtor((NiRefObject *)v18, 1u);
  ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
  pkTexture8 = (NiTexturePalette *)&pkTextWin->baseclass_0.vfptr[118];
  v20 = TextData::Get(0x484D3C43u);
  ((void (__thiscall *)(PgSprData *, char *))pkTexture8->baseclass_0.vfptr)(pkTextWin, v20);
  ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
  i = 0;
  pkTextWin = (PgSprData *)v2->m_apkInvWin;
  do
  {
    pkTexture8 = (NiTexturePalette *)((char *)i + 1);
    sprintf(acShapeName, "IconSlot%03d");
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v22 = NPCSkillInvWin::CreateWin(
            uiLeft - v8 + 1,
            uiTop - v9 + 1,
            (unsigned int)i,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    pkTextWin->baseclass_0.vfptr = (NiRefObjectVtbl *)v22;
    v23 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = v22;
    v22->m_pkSellInfo = 0;
    ((void (__thiscall *)(NPCSkillInvWin *, _DWORD, signed int, signed int, signed int))v23[146].__vecDelDtor)(
      v22,
      0,
      -1,
      32,
      32);
    v24 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240);
    *((_WORD *)i + 14) |= 1u;
    v24(0);
    v25 = pkTextWin;
    *((_WORD *)i + 212) = -1;
    (*((void (__stdcall **)(_DWORD))v25->baseclass_0.vfptr->__vecDelDtor + 129))(0);
    (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 140))(1);
    v26 = pkTextWin;
    pkTextWin->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkSkillInfoWin;
    i = pkTexture8;
    pkTextWin = (PgSprData *)((char *)v26 + 4);
  }
  while ( (signed int)pkTexture8 < 36 );
  pkTextWin = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "ActSkNor",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ActSkClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ActSkOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             2u,
                             0,
                             0);
  v27 = TextData::Get(0xD6F6F1FBu);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v27);
  v28 = (NiSourceTexture *)pkTexture;
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PasSkNor", &uiLeft, &uiTop, v28);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PasSkClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PasSkOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             3u,
                             0,
                             0);
  v29 = TextData::Get(0xE5F8FB3Fu);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v29);
  v30 = (NiSourceTexture *)pkTexture;
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ProSkNor", &uiLeft, &uiTop, v30);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ProSkClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ProSkOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             5u,
                             0,
                             0);
  v31 = TextData::Get(0xE7E5F043u);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v31);
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  pkTexture8 = (NiTexturePalette *)MenuTexMgr::GetTexture(0x1Cu);
  pkTextWin = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "PrePageNor",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)pkTexture8);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             6u,
                             0,
                             0);
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  v32 = TextData3::Get(0x6A8A9870u);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v32);
  pkTextWin = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "NextPageNor",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)pkTexture8);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageOver");
  pkTextWin = (PgSprData *)PgWinBut::CreateWin(
                             uiLeft - v8,
                             uiTop - v9,
                             pkTextWin,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             7u,
                             0,
                             0);
  pkTextWin[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
  v33 = TextData3::Get(0x25449D82u);
  PgWin::SetToolTipWinText((PgWin *)pkTextWin, v33);
  v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Number", &uiLeft, &uiTop, (NiSourceTexture *)pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Number01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v4 = spNode.m_pObject;
    v77 = -1;
    if ( spNode.m_pObject )
    {
      v63 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_4:
      if ( !InterlockedDecrement(v63) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
      return 0;
    }
    return 0;
  }
  v35 = Font::Get(0);
  v36 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v35,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkPageText = v36;
  ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v36,
    5,
    0);
  i = 0;
  pkTexture = v2->m_apkActiveTabWinText;
  do
  {
    pkTextWin = (PgSprData *)spNode.m_pObject;
    pkTexture8 = (NiTexturePalette *)((char *)i + 1);
    v37 = fs("JobTabOff%02d");
    v38 = PgSprData::Create((NiAVObject *)pkTextWin, v37, &uiLeft, &uiTop, 0);
    v39 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 8u, 0, 0);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v39,
      (unsigned int)i);
    i = spNode.m_pObject;
    v40 = fs("JobTabOn%02d");
    v41 = PgSprData::Create((NiAVObject *)i, v40, &uiLeft, &uiTop, 0);
    pkTextWin = (PgSprData *)v41;
    v42 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)v41, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *((_DWORD *)pkTexture - 6) = v42;
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v42,
      0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkTexture - 6) + 256))(0);
    v43 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
    v44 = (void *)v43->m_uiWidth;
    i = (void *)v43->m_uiHeight;
    pkTextWin = (PgSprData *)v44;
    v45 = Font::Get(0);
    v46 = PgWinText::CreateWin(
            uiLeft - v8 + 3,
            uiTop - v9 + 4,
            (unsigned int)pkTextWin,
            (unsigned int)i,
            v45,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    *(_DWORD *)pkTexture = v46;
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v46,
      (unsigned int)&unk_9A2F96);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)pkTexture + 468))(&Color::m_kDxWinTabColor);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)pkTexture + 240))(0);
    pkTexture = (char *)pkTexture + 4;
    i = pkTexture8;
  }
  while ( (signed int)pkTexture8 < 6 );
  v47 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), 1u);
  if ( v47 )
    v48 = (int)((char *)v47 + 21);
  else
    v48 = (int)&byte_9788EB;
  ((void (__stdcall *)(int))v2->m_apkActiveTabWinText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v48);
  v49 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), 6u);
  if ( v49 )
    v50 = (int)((char *)v49 + 21);
  else
    v50 = (int)&byte_9788EB;
  ((void (__stdcall *)(int))v2->m_apkActiveTabWinText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v50);
  v51 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), 0xBu);
  if ( v51 )
    v52 = (int)((char *)v51 + 21);
  else
    v52 = (int)&byte_9788EB;
  ((void (__stdcall *)(int))v2->m_apkActiveTabWinText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v52);
  v53 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), 0x10u);
  if ( v53 )
    v54 = (int)((char *)v53 + 21);
  else
    v54 = (int)&byte_9788EB;
  ((void (__stdcall *)(int))v2->m_apkActiveTabWinText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v54);
  v55 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), 0x15u);
  if ( v55 )
    v56 = (int)((char *)v55 + 21);
  else
    v56 = (int)&byte_9788EB;
  ((void (__stdcall *)(int))v2->m_apkActiveTabWinText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v56);
  v57 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), 0x1Au);
  if ( v57 )
    v58 = (int)((char *)v57 + 21);
  else
    v58 = (int)&byte_9788EB;
  ((void (__cdecl *)(int))v2->m_apkActiveTabWinText[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v58);
  ((void (__stdcall *)(signed int))v2->m_apkActiveTabWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__thiscall *)(NPCSkillWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v77 = -1;
  if ( spNode.m_pObject )
  {
    v59 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v59 )
        v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v59, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005628D0) --------------------------------------------------------
void __thiscall NPCSkillWin::OnCommand(NPCSkillWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 1u:
      NPCSkillWin::OnInvRClick(this, lParam);
      break;
    case 2u:
      NPCSkillWin::OnActiveSkill(this);
      break;
    case 3u:
      NPCSkillWin::OnPasssiveSkill(this);
      break;
    case 5u:
      NPCSkillWin::OnProductSkill(this);
      break;
    case 6u:
      NPCSkillWin::OnPrevPage(this);
      break;
    case 7u:
      NPCSkillWin::OnNextPage(this);
      break;
    case 8u:
      NPCSkillWin::OnSelectJob(this, lParam);
      break;
    case 9u:
    case 0xAu:
      GameFrameWork::CloseSkillShopMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xBu:
      NPCSkillWin::OnHelpLink(this);
      break;
    case 0xCu:
      this->m_uiCurPage = lParam;
      NPCSkillWin::ResetContents(this);
      break;
    default:
      return;
  }
}

//----- (00562990) --------------------------------------------------------
void *__thiscall NPCSkillInvWin::_vector_deleting_destructor_(NPCSkillInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSkillInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSkillInvWin::_vftable_;
  SkillIcon::_SkillIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A3154: using guessed type int (__stdcall *NPCSkillInvWin___vftable_)(int uiFlags);
// 9A3174: using guessed type int (__thiscall *NPCSkillInvWin___vftable_)(void *p, char);

//----- (005629D0) --------------------------------------------------------
unsigned int __cdecl ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A98A38: using guessed type int ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab___ms_pkTable;

//----- (005629F0) --------------------------------------------------------
PassiveSkillViewInfo *__cdecl PasSkillViewInfoTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@3
  PassiveSkillViewInfo *result; // eax@6

  if ( pcInxName && *pcInxName )
  {
    v1 = 0;
    if ( ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable + 4),
                                v1)
              + 2,
                pcInxName) )
      {
        ++v1;
        if ( v1 >= ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::GetTotal() )
          goto LABEL_6;
      }
      result = (PassiveSkillViewInfo *)CDataReader::GetRecord(
                                         (CDataReader *)(ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable
                                                       + 4),
                                         v1);
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98A38: using guessed type int ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab___ms_pkTable;

//----- (00562A80) --------------------------------------------------------
void *__thiscall NPCSkillWin::_vector_deleting_destructor_(NPCSkillWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NPCSkillWin::_NPCSkillWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00562AB0) --------------------------------------------------------
void __thiscall NPCSoulInvWin::NPCSoulInvWin(NPCSoulInvWin *this)
{
  NPCSoulInvWin *v1; // esi@1

  v1 = this;
  PgWinLRBut::PgWinLRBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSoulInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSoulInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
}
// 9A3788: using guessed type int (__stdcall *NPCSoulInvWin___vftable_)(int uiFlags);
// 9A37A4: using guessed type int (__thiscall *NPCSoulInvWin___vftable_)(void *p, char);

//----- (00562AE0) --------------------------------------------------------
void __thiscall NPCSoulInvWin::_NPCSoulInvWin(NPCSoulInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSoulInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSoulInvWin::_vftable_;
  PgWinLRBut::_PgWinLRBut(&this->baseclass_0);
}
// 9A3788: using guessed type int (__stdcall *NPCSoulInvWin___vftable_)(int uiFlags);
// 9A37A4: using guessed type int (__thiscall *NPCSoulInvWin___vftable_)(void *p, char);

//----- (00562B00) --------------------------------------------------------
bool __thiscall NPCSoulInvWin::Create(NPCSoulInvWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiInvIndex)
{
  NPCSoulInvWin *v6; // esi@1
  bool result; // al@1

  v6 = this;
  result = PgWinLRBut::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, 0, 0);
  if ( result )
  {
    v6->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (00562B40) --------------------------------------------------------
void __thiscall NPCSoulInvWin::OnFirstHitWin(NPCSoulInvWin *this)
{
  PgWin *v1; // edi@1
  PgWin *v2; // esi@1
  unsigned int v3; // eax@2
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v4; // eax@3
  unsigned int v5; // ST08_4@4
  unsigned int v6; // ST04_4@4
  int v7; // eax@4
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v8; // eax@6
  unsigned int v9; // ST08_4@7
  unsigned int v10; // ST04_4@7
  int v11; // eax@7

  v1 = (PgWin *)this;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
  if ( v2 )
  {
    v3 = this->m_uiInvIndex;
    if ( v3 )
    {
      if ( v3 == 1 )
      {
        v8 = Market::GetSPSoulStoneInfo();
        if ( v8 )
        {
          v9 = v8->price;
          v10 = v8->maxnum;
          v11 = User::SPStone(&g_kUser);
          SoulStoneInfoWin::SetSPBuyInfo((SoulStoneInfoWin *)v2, v11, v10, v9);
        }
      }
    }
    else
    {
      v4 = Market::GetHPSoulStoneInfo();
      if ( v4 )
      {
        v5 = v4->price;
        v6 = v4->maxnum;
        v7 = User::HPStone(&g_kUser);
        SoulStoneInfoWin::SetHPBuyInfo((SoulStoneInfoWin *)v2, v7, v6, v5);
        PgWin::OnFirstHitWin(v1);
        return;
      }
    }
    PgWin::OnFirstHitWin(v1);
  }
}

//----- (00562BC0) --------------------------------------------------------
void __thiscall NPCSoulWin::NPCSoulWin(NPCSoulWin *this)
{
  NPCSoulWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 0;
  v1->m_pkTitleTextWin = 0;
  v1->m_apkInvWin[1] = 0;
  v1->m_apkInvWin[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSoulWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSoulWin::_vftable_;
}
// 9A39F4: using guessed type int (__stdcall *NPCSoulWin___vftable_)(int uiFlags);
// 9A3A14: using guessed type int (__thiscall *NPCSoulWin___vftable_)(void *p, char);

//----- (00562C00) --------------------------------------------------------
void __thiscall NPCSoulWin::_NPCSoulWin(NPCSoulWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSoulWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSoulWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A39F4: using guessed type int (__stdcall *NPCSoulWin___vftable_)(int uiFlags);
// 9A3A14: using guessed type int (__thiscall *NPCSoulWin___vftable_)(void *p, char);

//----- (00562C90) --------------------------------------------------------
void __thiscall NPCSoulWin::OnHelpLink(NPCSoulWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NPCSoul");
}

//----- (00562CC0) --------------------------------------------------------
void __thiscall NPCSoulWin::ResetPage(NPCSoulWin *this)
{
  this->m_uiCurPage = 0;
  this->m_uiCurPageType = 0;
}

//----- (00562CD0) --------------------------------------------------------
void __thiscall NPCSoulWin::OnCancel(NPCSoulWin *this)
{
  GameFrameWork::CloseSoulStoneShopMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00562CE0) --------------------------------------------------------
void __thiscall NPCSoulWin::OnBuyHPOk(NPCSoulWin *this, unsigned int uiLot)
{
  GameFrameWork::NcSoulStoneHPBuyReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, uiLot);
}

//----- (00562CF0) --------------------------------------------------------
void __thiscall NPCSoulWin::OnBuySPOk(NPCSoulWin *this, unsigned int uiLot)
{
  GameFrameWork::NcSoulStoneSPBuyReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, uiLot);
}

//----- (00562D00) --------------------------------------------------------
void __thiscall NPCSoulInvWin::DoAction(NPCSoulInvWin *this)
{
  NPCSoulInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00562D30) --------------------------------------------------------
void __thiscall NPCSoulInvWin::DoRAction(NPCSoulInvWin *this)
{
  NPCSoulInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00562D60) --------------------------------------------------------
void __thiscall NPCSoulWin::OnInvLClick(NPCSoulWin *this, unsigned int uiInvIndex)
{
  NPCSoulWin *v2; // edi@1
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v3; // eax@2
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v4; // esi@2
  GameFrameWork *v5; // edi@6
  char *v6; // eax@6
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v7; // eax@11
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v8; // esi@11
  unsigned int v9; // [sp-4h] [bp-Ch]@5

  v2 = this;
  if ( uiInvIndex )
  {
    if ( uiInvIndex == 1 )
    {
      v7 = Market::GetSPSoulStoneInfo();
      v8 = v7;
      if ( v7 )
      {
        if ( v7->price )
        {
          if ( !((unsigned int)User::GetMoney(&g_kUser) / v7->price) )
            goto LABEL_5;
          if ( User::SPStone(&g_kUser) >= (signed int)v8->maxnum )
            goto LABEL_8;
          GameFrameWork::NcSoulStoneSPBuyReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, 1u);
        }
      }
    }
  }
  else
  {
    v3 = Market::GetHPSoulStoneInfo();
    v4 = v3;
    if ( v3 && v3->price )
    {
      if ( !((unsigned int)User::GetMoney(&g_kUser) / v3->price) )
      {
LABEL_5:
        v9 = 978272565;
LABEL_6:
        v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v6 = TextData::Get(v9);
        GameFrameWork::AddSysMsg(v5, v6);
        return;
      }
      if ( User::HPStone(&g_kUser) >= (signed int)v4->maxnum )
      {
LABEL_8:
        v9 = 1677983971;
        goto LABEL_6;
      }
      GameFrameWork::NcSoulStoneHPBuyReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, 1u);
    }
  }
}

//----- (00562E30) --------------------------------------------------------
void __thiscall NPCSoulWin::OnInvRClick(NPCSoulWin *this, unsigned int uiInvIndex)
{
  NPCSoulWin *v2; // edi@1
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v3; // eax@2
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v4; // esi@2
  unsigned int v5; // ebx@4
  GameFrameWork *v6; // edi@6
  char *v7; // eax@6
  int v8; // esi@9
  GameFrameWork *v9; // ebx@12
  char *v10; // eax@12
  GameFrameWork *v11; // ecx@13
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v12; // eax@17
  PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *v13; // esi@17
  unsigned int v14; // ebx@19
  int v15; // esi@21
  GameFrameWork *v16; // ebx@24
  char *v17; // eax@24
  GameFrameWork *v18; // ecx@25
  unsigned int v19; // [sp-4h] [bp-10h]@5

  v2 = this;
  if ( uiInvIndex )
  {
    if ( uiInvIndex == 1 )
    {
      v12 = Market::GetSPSoulStoneInfo();
      v13 = v12;
      if ( v12 )
      {
        if ( v12->price )
        {
          v14 = (unsigned int)User::GetMoney(&g_kUser) / v12->price;
          if ( !v14 )
            goto LABEL_5;
          if ( User::SPStone(&g_kUser) >= (signed int)v13->maxnum )
            goto LABEL_8;
          v15 = v13->maxnum - User::SPStone(&g_kUser);
          if ( v14 < v15 )
            v15 = v14;
          if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
          {
            v16 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
            v17 = TextData::Get(0xEDD6FCE1u);
            GameFrameWork::OnOpenDivideWin(v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, v15, v17, 0);
          }
          else
          {
            v18 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
            if ( *(_BYTE *)(g_pkKeyboard + 36) & 0x20 )
              GameFrameWork::NcSoulStoneSPBuyReq(v18, v15);
            else
              GameFrameWork::NcSoulStoneSPBuyReq(v18, 1u);
          }
        }
      }
    }
  }
  else
  {
    v3 = Market::GetHPSoulStoneInfo();
    v4 = v3;
    if ( v3 && v3->price )
    {
      v5 = (unsigned int)User::GetMoney(&g_kUser) / v3->price;
      if ( !v5 )
      {
LABEL_5:
        v19 = 978272565;
LABEL_6:
        v6 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v7 = TextData::Get(v19);
        GameFrameWork::AddSysMsg(v6, v7);
        return;
      }
      if ( User::HPStone(&g_kUser) >= (signed int)v4->maxnum )
      {
LABEL_8:
        v19 = 1677983971;
        goto LABEL_6;
      }
      v8 = v4->maxnum - User::HPStone(&g_kUser);
      if ( v5 < v8 )
        v8 = v5;
      if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
      {
        v9 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        v10 = TextData::Get(0xEDCBFCE1u);
        GameFrameWork::OnOpenDivideWin(v9, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, v8, v10, 0);
      }
      else
      {
        v11 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
        if ( *(_BYTE *)(g_pkKeyboard + 36) & 0x20 )
          GameFrameWork::NcSoulStoneHPBuyReq(v11, v8);
        else
          GameFrameWork::NcSoulStoneHPBuyReq(v11, 1u);
      }
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00562FE0) --------------------------------------------------------
void __thiscall NPCSoulWin::OnCommand(NPCSoulWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      NPCSoulWin::OnInvLClick(this, lParam);
      break;
    case 1u:
      NPCSoulWin::OnInvRClick(this, lParam);
      break;
    case 8u:
      GameFrameWork::CloseSoulStoneShopMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 9u:
      GameFrameWork::NcSoulStoneHPBuyReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, lParam);
      break;
    case 0xAu:
      GameFrameWork::NcSoulStoneSPBuyReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, lParam);
      break;
    case 0xBu:
      NPCSoulWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (00563080) --------------------------------------------------------
NPCSoulInvWin *__cdecl NPCSoulInvWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiInvIndex)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  NPCSoulInvWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x150u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWinLRBut::PgWinLRBut((PgWinLRBut *)v5);
    *(_DWORD *)v6 = &NPCSoulInvWin::_vftable_;
    *((_DWORD *)v6 + 58) = &NPCSoulInvWin::_vftable_;
    *((_DWORD *)v6 + 83) = -1;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int))(*(_DWORD *)v6 + 584))(
                          v6,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiInvIndex) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (NPCSoulInvWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 9A3788: using guessed type int (__stdcall *NPCSoulInvWin___vftable_)(int uiFlags);
// 9A37A4: using guessed type int (__thiscall *NPCSoulInvWin___vftable_)(void *p, char);

//----- (005631E0) --------------------------------------------------------
NPCSoulWin *__cdecl NPCSoulWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  NPCSoulWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x16Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &NPCSoulWin::_vftable_;
    *((_DWORD *)v2 + 58) = &NPCSoulWin::_vftable_;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 89) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (NPCSoulWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A39F4: using guessed type int (__stdcall *NPCSoulWin___vftable_)(int uiFlags);
// 9A3A14: using guessed type int (__thiscall *NPCSoulWin___vftable_)(void *p, char);

//----- (00563340) --------------------------------------------------------
bool __thiscall NPCSoulWin::Create(NPCSoulWin *this, PgFrameWork *pkFrameWork)
{
  PgSprData *v2; // ebx@1
  NPCSoulWin *v3; // esi@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  PgSprData *v6; // eax@4
  PgSprData *v7; // eax@6
  PgSprData *v8; // eax@8
  NiNode *v9; // esi@15
  int v11; // edi@20
  int v12; // ebx@20
  NiSourceTexture *v13; // eax@20
  PgSprData *v14; // eax@23
  PgSprData *v15; // eax@23
  NiSourceTexture *v16; // eax@23
  NiRefObjectVtbl *v17; // edx@23
  PgSprData *v18; // eax@25
  PgWinSpr *v19; // eax@25
  PgSprData *v20; // eax@25
  PgSprData *v21; // esi@26
  PgSprData *v22; // esi@29
  NiNode *v23; // esi@32
  PgFont *v24; // eax@36
  PgWinText *v25; // eax@36
  NiRefObjectVtbl *v26; // edx@36
  char *v27; // eax@36
  PgSprData *v28; // eax@37
  NPCSoulInvWin *v29; // eax@38
  NPCSoulInvWin *v30; // eax@38
  NPCSoulInvWin *v31; // eax@40
  char *v32; // eax@43
  PgSprData *v33; // esi@43
  PgSprData *v34; // esi@46
  NiNode *v35; // esi@49
  const char *v36; // [sp+18h] [bp-78h]@21
  int *v37; // [sp+1Ch] [bp-74h]@21
  int *v38; // [sp+20h] [bp-70h]@21
  NiSourceTexture *v39; // [sp+24h] [bp-6Ch]@21
  unsigned int v40; // [sp+28h] [bp-68h]@1
  unsigned int uiHeight; // [sp+38h] [bp-58h]@25
  unsigned int uiWidth; // [sp+3Ch] [bp-54h]@25
  char *v43; // [sp+40h] [bp-50h]@36
  NiPointer<PgSprData> spHPSprData; // [sp+44h] [bp-4Ch]@1
  NiPointer<PgSprData> spSPSprData; // [sp+48h] [bp-48h]@1
  int uiTop; // [sp+4Ch] [bp-44h]@4
  int uiLeft; // [sp+50h] [bp-40h]@4
  void *i; // [sp+54h] [bp-3Ch]@1
  NiPointer<NiNode> spNode; // [sp+58h] [bp-38h]@1
  char acShapeName[33]; // [sp+5Ch] [bp-34h]@37
  unsigned int v51; // [sp+80h] [bp-10h]@1
  int v52; // [sp+8Ch] [bp-4h]@1
  int v53; // [sp+90h] [bp+0h]@1

  v51 = (unsigned int)&v53 ^ __security_cookie;
  v40 = (unsigned int)&v53 ^ __security_cookie;
  v2 = 0;
  v3 = this;
  i = pkFrameWork;
  spNode.m_pObject = 0;
  v52 = 0;
  spHPSprData.m_pObject = 0;
  spSPSprData.m_pObject = 0;
  v4 = dword_B70448;
  LOBYTE(v52) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCSoul.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HPSoulNor", &uiLeft, &uiTop, 0);
  if ( v6 )
  {
    spHPSprData.m_pObject = v6;
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount);
  }
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SPSoulNor", &uiLeft, &uiTop, 0);
  if ( v7 )
  {
    spSPSprData.m_pObject = v7;
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
    v2 = spSPSprData.m_pObject;
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v8, 0, (PgFrameWork *)i, "NPCSoulWin", 0) )
  {
    LOBYTE(v52) = 1;
    if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    LOBYTE(v52) = 0;
    if ( spHPSprData.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spHPSprData.m_pObject->baseclass_0.m_uiRefCount) )
      spHPSprData.m_pObject->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spHPSprData.m_pObject, 1u);
    v9 = spNode.m_pObject;
    v52 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
    return 0;
  }
  v11 = uiLeft;
  v12 = uiTop;
  v13 = MenuTexMgr::GetTexture(0x13u);
  if ( v13 )
  {
    v39 = v13;
    v38 = &uiTop;
    v37 = &uiLeft;
    v36 = "Theme";
  }
  else
  {
    v39 = 0;
    v38 = &uiTop;
    v37 = &uiLeft;
    v36 = "Theme";
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v36, v37, v38, v39);
  PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v14, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v15, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)i, &v3->baseclass_0.baseclass_0.baseclass_0, 8u, 0, 0);
  v16 = MenuTexMgr::GetTexture(4u);
  v17 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  i = v16;
  if ( ((int (__stdcall *)(_DWORD, unsigned int))v17[18].__vecDelDtor)("HelpLinkNor", v40) )
  {
    i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)i);
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)i, &v3->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  }
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v19 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v18, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v19);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v20, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v21 = spSPSprData.m_pObject;
    LOBYTE(v52) = 1;
    if ( spSPSprData.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spSPSprData.m_pObject->baseclass_0.m_uiRefCount) )
      v21->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    v22 = spHPSprData.m_pObject;
    LOBYTE(v52) = 0;
    if ( spHPSprData.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spHPSprData.m_pObject->baseclass_0.m_uiRefCount) )
      v22->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
    v23 = spNode.m_pObject;
    v52 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v23 )
    {
      v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
      return 0;
    }
    return 0;
  }
  v24 = Font::Get(0);
  v25 = PgWinText::CreateWin(
          uiLeft - v11,
          uiTop - v12,
          uiWidth,
          uiHeight,
          v24,
          &v3->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  i = v25;
  ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v26[122].__vecDelDtor)(v25, 1, 0);
  (*(void (__stdcall **)(__int64 *))(*(_DWORD *)i + 468))(&Color::m_kDxWinTitleColor);
  v43 = (char *)(*(_DWORD *)i + 472);
  v27 = TextData::Get(0xA5998A9Au);
  (*(void (__thiscall **)(void *, char *))v43)(i, v27);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
  i = 0;
  do
  {
    v43 = (char *)i + 1;
    sprintf(acShapeName, "IconSlot%03d");
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v28, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( i )
    {
      if ( i != (void *)1 )
        goto LABEL_42;
      v31 = NPCSoulInvWin::CreateWin(
              uiLeft - v11 + 1,
              uiTop - v12 + 1,
              spSPSprData.m_pObject,
              &v3->baseclass_0.baseclass_0.baseclass_0,
              1u);
      v3->m_apkInvWin[1] = v31;
      v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
        (NiRefObject *)v31,
        0);
      ((void (__stdcall *)(signed int))v3->m_apkInvWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(1);
      v30 = v3->m_apkInvWin[1];
    }
    else
    {
      v29 = NPCSoulInvWin::CreateWin(
              uiLeft - v11 + 1,
              uiTop - v12 + 1,
              spHPSprData.m_pObject,
              &v3->baseclass_0.baseclass_0.baseclass_0,
              0);
      v3->m_apkInvWin[0] = v29;
      v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
        (NiRefObject *)v29,
        0);
      ((void (__stdcall *)(signed int))v3->m_apkInvWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(1);
      v30 = v3->m_apkInvWin[0];
    }
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkSoulStoneInfoWin;
LABEL_42:
    i = v43;
  }
  while ( (signed int)v43 < 42 );
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PwrSoulNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "PwrSoulClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "PwrSoulOver");
  i = PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)i, &v3->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v32 = TextData::Get(0xA7F7F6F2u);
  PgWin::SetToolTipWinText((PgWin *)i, v32);
  *((_DWORD *)i + 68) = g_pkToolTipWin;
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "PrePageClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "PrePageOver");
  PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)i, &v3->baseclass_0.baseclass_0.baseclass_0, 5u, 0, 0);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextPageNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "NextPageClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "NextPageOver");
  PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)i, &v3->baseclass_0.baseclass_0.baseclass_0, 6u, 0, 0);
  ((void (__thiscall *)(NPCSoulWin *, unsigned int, unsigned int, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5);
  v33 = spSPSprData.m_pObject;
  LOBYTE(v52) = 1;
  if ( spSPSprData.m_pObject && !InterlockedDecrement((volatile LONG *)&spSPSprData.m_pObject->baseclass_0.m_uiRefCount) )
    v33->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
  v34 = spHPSprData.m_pObject;
  LOBYTE(v52) = 0;
  if ( spHPSprData.m_pObject && !InterlockedDecrement((volatile LONG *)&spHPSprData.m_pObject->baseclass_0.m_uiRefCount) )
    v34->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
  v35 = spNode.m_pObject;
  v52 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v35 )
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00563AB0) --------------------------------------------------------
void *__thiscall NPCSoulInvWin::_vector_deleting_destructor_(NPCSoulInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSoulInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSoulInvWin::_vftable_;
  PgWinLRBut::_PgWinLRBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A3788: using guessed type int (__stdcall *NPCSoulInvWin___vftable_)(int uiFlags);
// 9A37A4: using guessed type int (__thiscall *NPCSoulInvWin___vftable_)(void *p, char);

//----- (00563AF0) --------------------------------------------------------
void *__thiscall NPCSoulWin::_vector_deleting_destructor_(NPCSoulWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NPCSoulWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NPCSoulWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A39F4: using guessed type int (__stdcall *NPCSoulWin___vftable_)(int uiFlags);
// 9A3A14: using guessed type int (__thiscall *NPCSoulWin___vftable_)(void *p, char);

//----- (00563B30) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::OnBut1(PartyJoinProposeWin *this)
{
  PartyJoinProposeWin *v1; // esi@1
  Name5 *v2; // eax@1
  _BYTE v3[20]; // ST00_20@1
  PgFrameWork *v4; // eax@1
  Name5 result; // [sp+4h] [bp-14h]@1

  v1 = this;
  v2 = Party::GetJoinProposeCharID(&g_kParty, &result);
  *(_DWORD *)v3 = *(_DWORD *)&v2->n5_name[0];
  *(_QWORD *)&v3[4] = *(_QWORD *)&v2->n5_name[4];
  *(_QWORD *)&v3[12] = *(_QWORD *)&v2->n5_name[12];
  GameFrameWork::NcPartyJoinProposeAllowAck((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, *(Name5 *)v3);
  Party::ClearJoinProposeData(&g_kParty);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v4, BIL_PARTY_1);
}

//----- (00563BC0) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::OnBut2(PartyJoinProposeWin *this)
{
  PartyJoinProposeWin *v1; // esi@1
  Name5 *v2; // eax@1
  _BYTE v3[20]; // ST00_20@1
  PgFrameWork *v4; // eax@1
  Name5 result; // [sp+4h] [bp-14h]@1

  v1 = this;
  v2 = Party::GetJoinProposeCharID(&g_kParty, &result);
  *(_DWORD *)v3 = *(_DWORD *)&v2->n5_name[0];
  *(_QWORD *)&v3[4] = *(_QWORD *)&v2->n5_name[4];
  *(_QWORD *)&v3[12] = *(_QWORD *)&v2->n5_name[12];
  GameFrameWork::NcPartyJoinProposeRejectAck((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, *(Name5 *)v3);
  Party::ClearJoinProposeData(&g_kParty);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v4, BIL_PARTY_1);
}

//----- (00563C50) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::SetMsg(PartyJoinProposeWin *this, char *pcText)
{
  char *v2; // edi@1
  char *v3; // esi@1
  signed int v4; // ebx@1
  char *v5; // esi@5
  int v6; // eax@7
  int v7; // eax@7
  int v8; // ecx@7
  int v9; // edi@7
  signed int v10; // esi@10
  HDC__ *hDC; // [sp+Ch] [bp-110h]@5
  char *v12; // [sp+10h] [bp-10Ch]@1
  char *psrc; // [sp+14h] [bp-108h]@1
  char acStr[256]; // [sp+18h] [bp-104h]@7
  unsigned int v15; // [sp+118h] [bp-4h]@1
  int v16; // [sp+11Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v2 = (char *)this->m_apkTextWin;
  psrc = pcText;
  v12 = (char *)this->m_apkTextWin;
  v3 = (char *)this->m_apkTextWin;
  v4 = 2;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v3 + 472))(&unk_9A3C6A);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( pcText && *pcText )
  {
    hDC = *(HDC__ **)((*(int (**)(void))(**(_DWORD **)v2 + 456))() + 192);
    v5 = v2;
    do
    {
      if ( !*psrc )
        break;
      v6 = (*(int (**)(void))(**(_DWORD **)v5 + 144))();
      v7 = PgUtil::StringPixelCopy(acStr, psrc, hDC, v6);
      v8 = *(_DWORD *)v5;
      v9 = v7;
      acStr[v7] = 0;
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 472))(acStr);
      psrc += v9;
      v2 = v12;
      ++v4;
      v5 += 4;
    }
    while ( v4 < 2 );
    if ( v4 == 1 )
    {
      (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)v2 + 488))(*(_DWORD *)v2, 1);
    }
    else
    {
      v10 = 2;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 488))(0);
        v2 += 4;
        --v10;
      }
      while ( v10 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00563D90) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::OnTimer(PartyJoinProposeWin *this)
{
  PartyJoinProposeWin::OnBut2((PartyJoinProposeWin *)((char *)this - 344));
}

//----- (00563DA0) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::UpdateMeWin(PartyJoinProposeWin *this, float fCurTime)
{
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    PartyJoinProposeWin::OnBut2(this);
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00563DE0) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::_PartyJoinProposeWin(PartyJoinProposeWin *this)
{
  PartyJoinProposeWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyJoinProposeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyJoinProposeWin::_vftable_;
  this->baseclass_158.vfptr = (ITimerVtbl *)&PartyJoinProposeWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  ITimer::_ITimer(&v1->baseclass_158);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A3CC0: using guessed type int (__stdcall *PartyJoinProposeWin___vftable_)(int);
// 9A3CCC: using guessed type int (__stdcall *PartyJoinProposeWin___vftable_)(int uiFlags);
// 9A3CEC: using guessed type int (__thiscall *PartyJoinProposeWin___vftable_)(void *p, char);

//----- (00563E70) --------------------------------------------------------
bool __thiscall PartyJoinProposeWin::Create(PartyJoinProposeWin *this, PgFrameWork *pkFrameWork)
{
  PartyJoinProposeWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  PgWinSpr *v10; // eax@13
  PgFont *v11; // eax@15
  unsigned int v12; // edi@17
  unsigned int v13; // ST1C_4@17
  int v14; // eax@17
  PgWinText *v15; // eax@17
  PgWinText *v16; // edi@17
  PgWinText *v17; // ebx@17
  PgSprData *v18; // edi@25
  PgWin *v19; // ST20_4@25
  PgWin *v20; // edi@25
  PgFont *v21; // ST1C_4@25
  unsigned int v22; // ST18_4@25
  unsigned int v23; // eax@25
  PgWinText *v24; // eax@25
  NiRefObjectVtbl *v25; // edi@25
  char *v26; // eax@25
  PgSprData *v27; // edi@25
  PgWin *v28; // ST20_4@25
  PgWin *v29; // edi@25
  PgFont *v30; // ST1C_4@25
  unsigned int v31; // ST18_4@25
  unsigned int v32; // eax@25
  PgWinText *v33; // eax@25
  int v34; // edi@25
  char *v35; // eax@25
  Name5 *v36; // eax@25
  char *v37; // eax@25
  NiNode *v38; // esi@26
  const char *v39; // [sp+1Ch] [bp-19Ch]@11
  int *v40; // [sp+20h] [bp-198h]@11
  int *v41; // [sp+24h] [bp-194h]@11
  NiSourceTexture *v42; // [sp+28h] [bp-190h]@11
  unsigned int v43; // [sp+2Ch] [bp-18Ch]@1
  Name5 result; // [sp+3Ch] [bp-17Ch]@25
  PgFont *pkFont; // [sp+50h] [bp-168h]@15
  int i; // [sp+54h] [bp-164h]@15
  NiPointer<PgWinText> *v47; // [sp+58h] [bp-160h]@15
  int uiTop; // [sp+5Ch] [bp-15Ch]@4
  int uiLeft; // [sp+60h] [bp-158h]@4
  NiPointer<NiNode> spNode; // [sp+64h] [bp-154h]@1
  char acStr[256]; // [sp+68h] [bp-150h]@25
  char acName[64]; // [sp+168h] [bp-50h]@25
  unsigned int v53; // [sp+1A8h] [bp-10h]@1
  int v54; // [sp+1B4h] [bp-4h]@1
  int v55; // [sp+1B8h] [bp+0h]@1

  v53 = (unsigned int)&v55 ^ __security_cookie;
  v43 = (unsigned int)&v55 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v54 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "PartyJoinProposeWin", 0) )
  {
    v6 = spNode.m_pObject;
    v54 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v42 = v8;
    v41 = &uiTop;
    v40 = &uiLeft;
    v39 = "Theme";
  }
  else
  {
    v42 = 0;
    v41 = &uiTop;
    v40 = &uiLeft;
    v39 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v39, v40, v41, v42);
  v10 = PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
  v11 = Font::Get(0);
  pkFont = v11;
  i = 0;
  v47 = v2->m_apkTextWin;
  while ( 1 )
  {
    v12 = v11->m_uiDefHeight;
    v13 = (unsigned int)v11;
    v14 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                 (NiRefObject *)v2,
                 v12);
    v15 = PgWinText::CreateWin(8, i * (v12 + 1) + 8, v14 - 16, v13, (PgFont *)v2, 0, 0, v43);
    v16 = v47->m_pObject;
    v17 = v15;
    if ( v47->m_pObject != v15 )
    {
      if ( v16
        && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v16 )
        v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v16,
          1u);
      v47->m_pObject = v17;
      if ( v17 )
        InterlockedIncrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v43 = 0;
    ((void (*)(void))v47->m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)();
    ++v47;
    ++i;
    if ( i >= 2 )
      break;
    v11 = pkFont;
  }
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, 0);
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v19 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_apkButWin[1] = (PgWinBut *)v19;
  v20 = v19;
  v21 = Font::Get(0);
  v22 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v20);
  v23 = ((int (__thiscall *)(PgWin *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v20);
  v24 = PgWinText::CreateWin(0, 0, v23, v22, v21, v19, 0, 0);
  v2->m_apkButTextWin[1] = v24;
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v24,
    5u);
  v25 = v2->m_apkButTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v26 = TextData::Get(0xE7F0EDE7u);
  v25[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[1], (unsigned int)v26);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, &uiTop, 0);
  PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "BtnOver03");
  v28 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2->m_apkButTextWin[0] = (PgWinText *)v28;
  v29 = v28;
  v30 = Font::Get(0);
  v31 = ((int (__thiscall *)(PgWin *))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v29);
  v32 = ((int (__thiscall *)(PgWin *))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v29);
  v33 = PgWinText::CreateWin(0, 0, v32, v31, v30, v28, 0, 0);
  *(_DWORD *)&v2->m_aucReply[0] = v33;
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v33,
    5u);
  v34 = **(_DWORD **)&v2->m_aucReply[0];
  v35 = TextData::Get(0xE9F4EDEEu);
  (*(void (__thiscall **)(_DWORD, char *))(v34 + 472))(*(_DWORD *)&v2->m_aucReply[0], v35);
  (*(void (__stdcall **)(_DWORD))(**(_DWORD **)&v2->m_aucReply[0] + 240))(0);
  ((void (__thiscall *)(PartyJoinProposeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  acStr[0] = 0;
  memset(&acStr[1], 0, 0xFFu);
  acName[0] = 0;
  memset(&acName[1], 0, 0x3Fu);
  v36 = Party::GetJoinProposeCharID(&g_kParty, &result);
  *(_DWORD *)acName = *(_DWORD *)&v36->n5_name[0];
  *(_DWORD *)&acName[4] = *(_DWORD *)&v36->n5_name[4];
  *(_DWORD *)&acName[8] = *(_DWORD *)&v36->n5_name[8];
  *(_DWORD *)&acName[12] = *(_DWORD *)&v36->n5_name[12];
  *(_DWORD *)&acName[16] = *(_DWORD *)&v36->n5_name[16];
  acName[20] = 0;
  v37 = TextData::Get(0xD5EDEEEBu);
  sprintf(acStr, v37);
  PartyJoinProposeWin::SetMsg(v2, acStr);
  v54 = -1;
  if ( spNode.m_pObject )
  {
    v38 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v38 )
        v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00564390) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::OnCommand(PartyJoinProposeWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      PartyJoinProposeWin::OnBut2(this);
  }
  else
  {
    PartyJoinProposeWin::OnBut1(this);
  }
}

//----- (005643B0) --------------------------------------------------------
void __thiscall PartyJoinProposeWin::PartyJoinProposeWin(PartyJoinProposeWin *this)
{
  PartyJoinProposeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  ITimer::ITimer(&v1->baseclass_158);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyJoinProposeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyJoinProposeWin::_vftable_;
  v1->baseclass_158.vfptr = (ITimerVtbl *)&PartyJoinProposeWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9A3CC0: using guessed type int (__stdcall *PartyJoinProposeWin___vftable_)(int);
// 9A3CCC: using guessed type int (__stdcall *PartyJoinProposeWin___vftable_)(int uiFlags);
// 9A3CEC: using guessed type int (__thiscall *PartyJoinProposeWin___vftable_)(void *p, char);

//----- (00564440) --------------------------------------------------------
PartyJoinProposeWin *__cdecl PartyJoinProposeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  PartyJoinProposeWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x190u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    PartyJoinProposeWin::PartyJoinProposeWin((PartyJoinProposeWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (PartyJoinProposeWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00564570) --------------------------------------------------------
void *__thiscall PartyJoinProposeWin::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return PartyJoinProposeWin::_scalar_deleting_destructor_((PartyJoinProposeWin *)((char *)this - 344), a2);
}

//----- (00564580) --------------------------------------------------------
void *__thiscall PartyJoinProposeWin::_scalar_deleting_destructor_(PartyJoinProposeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PartyJoinProposeWin::_PartyJoinProposeWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005645D0) --------------------------------------------------------
void __thiscall PartyLootSetupWin::OnHelpLink(PartyLootSetupWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "PartyRootOption");
}

//----- (00564600) --------------------------------------------------------
void __thiscall PartyLootSelectWin::PartyLootSelectWin(PartyLootSelectWin *this)
{
  PartyLootSelectWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyLootSelectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyLootSelectWin::_vftable_;
}
// 9A4218: using guessed type int (__stdcall *PartyLootSelectWin___vftable_)(int uiFlags);
// 9A4234: using guessed type int (__thiscall *PartyLootSelectWin___vftable_)(void *p, char);

//----- (00564620) --------------------------------------------------------
void __thiscall PartyLootSelectWin::_PartyLootSelectWin(PartyLootSelectWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyLootSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyLootSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A4218: using guessed type int (__stdcall *PartyLootSelectWin___vftable_)(int uiFlags);
// 9A4234: using guessed type int (__thiscall *PartyLootSelectWin___vftable_)(void *p, char);

//----- (00564640) --------------------------------------------------------
void __thiscall PartyLootSelectWin::OnSlideBtnUp(PartyLootSelectWin *this)
{
  SlideBar::OnClick1(this->m_pkSlideBarEx);
}

//----- (00564650) --------------------------------------------------------
void __thiscall PartyLootSelectWin::OnHelpLink(PartyLootSelectWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "RaidRootSelect");
}

//----- (00564680) --------------------------------------------------------
void __thiscall PartyLootSetupWin::SetLooterName(PartyLootSetupWin *this, const char *name)
{
  if ( name )
    ((void (__stdcall *)(_DWORD))this->m_spText[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(name);
}

//----- (005646A0) --------------------------------------------------------
void __thiscall PartyLootSelectWin::UpdateMeWin(PartyLootSelectWin *this, float fCurTime)
{
  PartyLootSelectWin *v2; // esi@1
  Name5 *v3; // eax@1
  int v4; // eax@4
  PartyMemberInfo *v5; // eax@7
  unsigned int v6; // ecx@7
  int v7; // esi@7
  int v8; // edi@7
  unsigned int v9; // ebx@7
  unsigned int v10; // eax@7
  Name5 *v11; // eax@7
  int v12; // eax@11
  PgFrameWork *v13; // eax@15
  unsigned int j; // [sp+4h] [bp-78h]@6
  PartyLootSelectWin *v15; // [sp+8h] [bp-74h]@1
  Name5 result; // [sp+Ch] [bp-70h]@7
  Name5 kTargetID; // [sp+20h] [bp-5Ch]@1
  Name5 kMasterID; // [sp+34h] [bp-48h]@1
  char acstr[21]; // [sp+48h] [bp-34h]@7
  char acName[21]; // [sp+60h] [bp-1Ch]@1
  unsigned int v21; // [sp+78h] [bp-4h]@1
  int v22; // [sp+7Ch] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v2 = this;
  v15 = this;
  SlideListWin::RemoveAllList(this->m_pSeletMemberList);
  Party::GetPartyMasterID(&g_kParty, &kMasterID);
  *(_DWORD *)acName = *(_DWORD *)&kMasterID;
  *(_QWORD *)&acName[4] = *(_QWORD *)&kMasterID.n5_name[4];
  *(_QWORD *)&acName[12] = *(_QWORD *)&kMasterID.n5_name[12];
  acName[20] = 0;
  v3 = Party::GetLooterID(&g_kParty, &kTargetID);
  if ( *(_QWORD *)&kMasterID != *(_QWORD *)&v3->n5_name[0]
    || *(_QWORD *)&kMasterID.n5_name[8] != *(_QWORD *)&v3->n5_name[8]
    || *(_DWORD *)&kMasterID.n5_name[16] != *(_DWORD *)&v3->n5_name[16] )
  {
    SlideListWin::AddText(v2->m_pSeletMemberList, acName);
  }
  else
  {
    v4 = SlideListWin::AddText(v2->m_pSeletMemberList, acName);
    SlideListWin::SetFontColor(v2->m_pSeletMemberList, v4, 0, 255, 255, 0);
  }
  j = 0;
  if ( g_kParty.m_uiTotalMember )
  {
    do
    {
      v5 = Party::GetMemberInfo(&g_kParty, j);
      v6 = *(_DWORD *)&v5->m_kCharID.n5_name[12];
      v7 = *(_DWORD *)&v5->m_kCharID.n5_name[0];
      v8 = *(_DWORD *)&v5->m_kCharID.n5_name[4];
      v9 = *(_DWORD *)&v5->m_kCharID.n5_name[8];
      v10 = *(_DWORD *)&v5->m_kCharID.n5_name[16];
      *(_QWORD *)&kTargetID.n5_name[12] = __PAIR__(v10, v6);
      *(_DWORD *)&acstr[12] = v6;
      *(_DWORD *)acstr = v7;
      *(_DWORD *)&acstr[4] = v8;
      *(_DWORD *)&acstr[8] = v9;
      *(_DWORD *)&acstr[16] = v10;
      acstr[20] = 0;
      v11 = Party::GetLooterID(&g_kParty, &result);
      if ( v7 != *(_DWORD *)&v11->n5_name[0]
        || v8 != *(_DWORD *)&v11->n5_name[4]
        || __PAIR__(*(unsigned int *)&kTargetID.n5_name[12], v9) != *(_QWORD *)&v11->n5_name[8]
        || *(_DWORD *)&kTargetID.n5_name[16] != *(_DWORD *)&v11->n5_name[16] )
      {
        SlideListWin::AddText(v15->m_pSeletMemberList, acstr);
      }
      else
      {
        v12 = SlideListWin::AddText(v15->m_pSeletMemberList, acstr);
        SlideListWin::SetFontColor(v15->m_pSeletMemberList, v12, 0, 255, 255, 0);
      }
      ++j;
    }
    while ( j < g_kParty.m_uiTotalMember );
    v2 = v15;
  }
  SlideListWin::UpdateViewList(v2->m_pSeletMemberList);
  v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v13 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v13, v2->m_pSeletMemberList, v2->m_pkSlideBarEx);
}
// A85C00: using guessed type int __security_cookie;

//----- (00564880) --------------------------------------------------------
void __thiscall PartyLootSelectWin::OnSlideBar(PartyLootSelectWin *this)
{
  PartyLootSelectWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pSeletMemberList;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarEx;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
      v1->m_pSeletMemberList->m_nViewStartPos = v1->m_pkSlideBarEx->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pSeletMemberList);
    }
  }
}

//----- (005648D0) --------------------------------------------------------
void __thiscall PartyLootSetupWin::_PartyLootSetupWin(PartyLootSetupWin *this)
{
  PartyLootSetupWin *v1; // esi@1
  int v2; // ebx@1
  int v3; // edi@2
  int v4; // edi@7
  PgWinText *v5; // edi@13
  PgWinText *v6; // edi@18
  PopupMenuWin *v7; // edi@22
  PopupMenuWin *v8; // edi@26
  PopupMenuWin *v9; // edi@30
  PopupMenuWin *v10; // edi@34
  signed int v11; // [sp+4h] [bp-10h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyLootSetupWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyLootSetupWin::_vftable_;
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::DestroyWin(
    &Pgg_kWinMgr,
    &v1->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::DestroyWin(
    &Pgg_kWinMgr,
    &v1->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v2 = (int)v1->m_spText;
  v11 = 3;
  do
  {
    v3 = *(_DWORD *)(v2 - 12);
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)(v2 - 12) = 0;
    }
    v4 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v11;
  }
  while ( v11 );
  v5 = v1->m_spLootName.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spLootName.m_pObject = 0;
  }
  v6 = v1->m_spLootName.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spLooterPopupMenu.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  v8 = v1->m_spItemGradePopupMenu.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spText,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBtn,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v9 = v1->m_spPopupMenu.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  v10 = v1->m_spDicePopupMenu.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v10,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A4458: using guessed type int (__stdcall *PartyLootSetupWin___vftable_)(int uiFlags);
// 9A4474: using guessed type int (__thiscall *PartyLootSetupWin___vftable_)(void *p, char);

//----- (00564AF0) --------------------------------------------------------
bool __thiscall PartyLootSetupWin::Create(PartyLootSetupWin *this, PgFrameWork *pkFrameWork)
{
  PartyLootSetupWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  NiSourceTexture *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  D3DXCOLOR v18; // ST30_16@25
  char *v19; // eax@25
  PgWinText *v20; // eax@25
  D3DXCOLOR v21; // ST30_16@25
  char *v22; // eax@25
  PgWinText *v23; // eax@25
  D3DXCOLOR v24; // ST30_16@25
  char *v25; // eax@25
  PgWinText *v26; // eax@25
  D3DXCOLOR v27; // ST30_16@25
  char *v28; // eax@25
  PgWinText *v29; // eax@25
  PgWinBut *v30; // eax@25
  PgWinBut *v31; // eax@25
  PgWinBut *v32; // eax@25
  D3DXCOLOR v33; // ST30_16@25
  int v34; // edi@25
  char *v35; // eax@25
  PgWinText *v36; // eax@25
  D3DXCOLOR v37; // ST30_16@25
  char *v38; // eax@25
  PgWinText *v39; // eax@25
  D3DXCOLOR v40; // ST30_16@25
  PgWinText *v41; // eax@25
  signed int v42; // ebx@25
  NiSourceTexture *v43; // edi@27
  NiSourceTexture *v44; // eax@29
  PopupMenuWin *v45; // eax@29
  PopupMenuWin *v46; // edi@29
  PopupMenuWin *v47; // ebx@29
  char *v48; // eax@36
  PopupMenuText *v49; // eax@36
  char *v50; // eax@36
  PopupMenuText *v51; // eax@36
  char *v52; // eax@36
  PopupMenuText *v53; // eax@36
  char *v54; // eax@36
  PopupMenuText *v55; // eax@36
  NiSourceTexture *v56; // eax@36
  PopupMenuWin *v57; // eax@36
  PopupMenuWin *v58; // ebx@36
  char *v59; // eax@44
  PopupMenuText *v60; // eax@44
  char *v61; // eax@44
  PopupMenuText *v62; // eax@44
  char *v63; // eax@44
  PopupMenuText *v64; // eax@44
  char *v65; // eax@44
  PopupMenuText *v66; // eax@44
  NiSourceTexture *v67; // eax@44
  PopupMenuWin *v68; // eax@44
  PopupMenuWin *v69; // ebx@44
  NiTexturingProperty *v70; // esi@52
  NiNode *v71; // esi@54
  const char *v72; // [sp+34h] [bp-50h]@23
  int *v73; // [sp+38h] [bp-4Ch]@23
  int *v74; // [sp+3Ch] [bp-48h]@23
  NiSourceTexture *v75; // [sp+40h] [bp-44h]@23
  UIUtil ui; // [sp+54h] [bp-30h]@25
  NiPointer<NiTexturingProperty> spTexProp; // [sp+68h] [bp-1Ch]@4
  int uiLeft; // [sp+6Ch] [bp-18h]@15
  int uiTop; // [sp+70h] [bp-14h]@15
  NiPointer<NiNode> spNode; // [sp+74h] [bp-10h]@1
  int v81; // [sp+80h] [bp-4h]@1
  PopupMenuWin *pkFrameWorka; // [sp+8Ch] [bp+8h]@36
  PopupMenuWin *pkFrameWorkb; // [sp+8Ch] [bp+8h]@44

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v81 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\PartyRootOption.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v81) = 1;
  if ( !v8 || (v9 = (NiSourceTexture *)v8[1].__vecDelDtor) == 0 )
  {
    LOBYTE(v81) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v81 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "PartyLootSetupWin", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v75 = v16;
      v74 = &uiTop;
      v73 = &uiLeft;
      v72 = "Theme";
    }
    else
    {
      v75 = 0;
      v74 = &uiTop;
      v73 = &uiLeft;
      v72 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v72, v73, v74, v75);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    UIUtil::UIUtil(&ui);
    LOBYTE(v81) = 2;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, v14, v15);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    UIUtil::CreateSpr(&ui, "Panel01", 0);
    UIUtil::CreateSpr(&ui, "Panel02", 0);
    *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v19 = TextData2::Get(0xBC907078u);
    v20 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v19, COERCE_D3DXCOLOR(v18.r), 5u);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v20,
      1u);
    UIUtil::CreateBtn(&ui, 0, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v22 = TextData3::Get(0x949172F1u);
    v23 = UIUtil::CreateTextNoSpr(&ui, "GainMethod", v22, COERCE_D3DXCOLOR(v21.r), 5u);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v23,
      4u);
    *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v25 = TextData3::Get(0xCF47F72Du);
    v26 = UIUtil::CreateTextNoSpr(&ui, "ItemGrade", v25, COERCE_D3DXCOLOR(v24.r), 5u);
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v26,
      4u);
    *(_QWORD *)&v27.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v27.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v28 = TextData2::Get(0x64462634u);
    v29 = UIUtil::CreateTextNoSpr(&ui, "RootSelect", v28, COERCE_D3DXCOLOR(v27.r), 5u);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v29,
      4u);
    v30 = UIUtil::CreateBtn(&ui, 1u, "GainMethodNor", "GainMethodClick", "GainMethodOver", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spBtn, (NiD3DDefaultShader *)v30);
    v31 = UIUtil::CreateBtn(&ui, 2u, "ItemGradeNor", "ItemGradeClick", "ItemGradeOver", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBtn[1], (NiD3DDefaultShader *)v31);
    v32 = UIUtil::CreateBtn(&ui, 3u, "RootSelectNor", "RootSelectClick", "RootSelectOver", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBtn[2], (NiD3DDefaultShader *)v32);
    *(_QWORD *)&v33.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v33.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v34 = (int)v2->m_spText;
    v35 = TextData::Get(0xE54F4142u);
    v36 = UIUtil::CreateTextNoSpr(&ui, "GainMethod_Text", v35, COERCE_D3DXCOLOR(v33.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spText, (NiD3DDefaultShader *)v36);
    *(_QWORD *)&v37.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v37.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v38 = TextData3::Get(0xD77667Au);
    v39 = UIUtil::CreateTextNoSpr(&ui, "ItemGrade_Text", v38, COERCE_D3DXCOLOR(v37.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spText[1], (NiD3DDefaultShader *)v39);
    *(_QWORD *)&v40.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v40.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v41 = UIUtil::CreateTextNoSpr(&ui, "RootSelect_Text", byte_9A3F25, COERCE_D3DXCOLOR(v40.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spText[2], (NiD3DDefaultShader *)v41);
    v42 = 3;
    do
    {
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v34 + 488))(4);
      v34 += 4;
      --v42;
    }
    while ( v42 );
    v2->m_eLootType = 0;
    v2->m_eItemType = 0;
    v43 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      UIUtil::CreateBtn(&ui, 5u, "HelpLinkNor", "HelpLinkClick", "HelpLinkOver", 0, v43);
    v44 = MenuTexMgr::GetTexture(1u);
    v45 = PopupMenuWin::CreateWin(v44, 4u, 4u, 0);
    v46 = v2->m_spPopupMenu.m_pObject;
    v47 = v45;
    if ( v46 != v45 )
    {
      if ( v46
        && !InterlockedDecrement((volatile LONG *)&v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v46 )
        v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v46,
          1u);
      v2->m_spPopupMenu.m_pObject = v47;
      if ( v47 )
        InterlockedIncrement((volatile LONG *)&v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spPopupMenu.m_pObject);
    v48 = TextData::Get(0xE54F4142u);
    v49 = PopupMenuText::CreateWin(v48, 0, 0, 0, 0, 0, 0);
    v49->baseclass_0.m_ePopupMenuID = 1028;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v49->baseclass_0);
    v50 = TextData::Get(0x78A8A1CFu);
    v51 = PopupMenuText::CreateWin(v50, 0, 0, 0, 0, 0, 0);
    v51->baseclass_0.m_ePopupMenuID = 1029;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v51->baseclass_0);
    v52 = TextData2::Get(0x799878B4u);
    v53 = PopupMenuText::CreateWin(v52, 0, 0, 0, 0, 0, 0);
    v53->baseclass_0.m_ePopupMenuID = 1030;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v53->baseclass_0);
    v54 = TextData2::Get(0x2C518D68u);
    v55 = PopupMenuText::CreateWin(v54, 0, 0, 0, 0, 0, 0);
    v55->baseclass_0.m_ePopupMenuID = 1032;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v55->baseclass_0);
    PopupMenuWin::FinishMenu(v2->m_spPopupMenu.m_pObject, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v56 = MenuTexMgr::GetTexture(1u);
    v57 = PopupMenuWin::CreateWin(v56, 4u, 4u, 0);
    v58 = v2->m_spItemGradePopupMenu.m_pObject;
    pkFrameWorka = v57;
    if ( v58 != v57 )
    {
      if ( v58 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v58 )
          v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v58,
            1u);
        v57 = pkFrameWorka;
      }
      v2->m_spItemGradePopupMenu.m_pObject = v57;
      if ( v57 )
        InterlockedIncrement((volatile LONG *)&v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spItemGradePopupMenu.m_pObject);
    v59 = TextData3::Get(0xD77667Au);
    v60 = PopupMenuText::CreateWin(v59, 0, 0, 0, 0, 0, 0);
    v60->baseclass_0.m_ePopupMenuID = 1038;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v60->baseclass_0);
    v61 = TextData3::Get(0xD78667Au);
    v62 = PopupMenuText::CreateWin(v61, 0, 0, 0, 0, 0, 0);
    v62->baseclass_0.m_ePopupMenuID = 1039;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v62->baseclass_0);
    v63 = TextData3::Get(0xD79667Au);
    v64 = PopupMenuText::CreateWin(v63, 0, 0, 0, 0, 0, 0);
    v64->baseclass_0.m_ePopupMenuID = 1040;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v64->baseclass_0);
    v65 = TextData3::Get(0xD7A667Au);
    v66 = PopupMenuText::CreateWin(v65, 0, 0, 0, 0, 0, 0);
    v66->baseclass_0.m_ePopupMenuID = 1041;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v66->baseclass_0);
    PopupMenuWin::FinishMenu(v2->m_spItemGradePopupMenu.m_pObject, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v67 = MenuTexMgr::GetTexture(1u);
    v68 = PopupMenuWin::CreateWin(v67, 4u, 4u, 0);
    v69 = v2->m_spLooterPopupMenu.m_pObject;
    pkFrameWorkb = v68;
    if ( v69 != v68 )
    {
      if ( v69 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v69 )
          v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v69,
            1u);
        v68 = pkFrameWorkb;
      }
      v2->m_spLooterPopupMenu.m_pObject = v68;
      if ( v68 )
        InterlockedIncrement((volatile LONG *)&v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    ((void (__thiscall *)(PartyLootSetupWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v81) = 1;
    UIUtil::_UIUtil(&ui);
    v70 = spTexProp.m_pObject;
    LOBYTE(v81) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v70, 1u);
    v71 = spNode.m_pObject;
    v81 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v71 )
      v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v71, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v81) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v81 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00565460) --------------------------------------------------------
void __thiscall PartyLootSetupWin::UpdateLooterList(PartyLootSetupWin *this)
{
  PartyLootSetupWin *v1; // edi@1
  PgWinText *v2; // ecx@1
  unsigned int v3; // ebx@1
  PopupMenuText *v4; // eax@1
  unsigned int v5; // esi@1
  PartyMemberInfo *v6; // eax@2
  int v7; // edx@2
  int v8; // ecx@2
  int v9; // ST30_4@2
  int v10; // ebx@2
  int v11; // eax@2
  PopupMenuText *v12; // eax@2
  Name5 kMasterID; // [sp+20h] [bp-74h]@1
  Name5 kLooterID; // [sp+34h] [bp-60h]@1
  char acName[21]; // [sp+48h] [bp-4Ch]@1
  char acstr[21]; // [sp+60h] [bp-34h]@1
  char pcText[4]; // [sp+78h] [bp-1Ch]@2
  int v18; // [sp+7Ch] [bp-18h]@2
  int v19; // [sp+80h] [bp-14h]@2
  int v20; // [sp+84h] [bp-10h]@2
  int v21; // [sp+88h] [bp-Ch]@2
  char v22; // [sp+8Ch] [bp-8h]@2
  unsigned int v23; // [sp+90h] [bp-4h]@1
  int v24; // [sp+94h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v1 = this;
  PopupMenuWin::Clear(this->m_spLooterPopupMenu.m_pObject);
  Party::GetLooterID(&g_kParty, &kLooterID);
  *(_QWORD *)acName = *(_QWORD *)&kLooterID;
  v2 = v1->m_spText[2].m_pObject;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kLooterID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kLooterID.n5_name[16];
  v3 = 0;
  acName[20] = 0;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acName);
  Party::GetPartyMasterID(&g_kParty, &kMasterID);
  *(_DWORD *)acstr = *(_DWORD *)&kMasterID;
  *(_QWORD *)&acstr[4] = *(_QWORD *)&kMasterID.n5_name[4];
  *(_QWORD *)&acstr[12] = *(_QWORD *)&kMasterID.n5_name[12];
  acstr[20] = 0;
  v4 = PopupMenuText::CreateWin(acstr, 0, 0, 0, 0, 0, 0);
  v4->baseclass_0.m_ePopupMenuID = 1042;
  PopupMenuWin::AddMenu(v1->m_spLooterPopupMenu.m_pObject, &v4->baseclass_0);
  v5 = 0;
  if ( g_kParty.m_uiTotalMember > 0 )
  {
    do
    {
      v6 = Party::GetMemberInfo(&g_kParty, v5);
      v7 = *(_DWORD *)&v6->m_kCharID.n5_name[4];
      v8 = *(_DWORD *)&v6->m_kCharID.n5_name[0];
      v9 = *(_DWORD *)&v6->m_kCharID.n5_name[8];
      v10 = *(_DWORD *)&v6->m_kCharID.n5_name[12];
      v11 = *(_DWORD *)&v6->m_kCharID.n5_name[16];
      v20 = v10;
      v3 = 0;
      v21 = v11;
      v18 = v7;
      *(_DWORD *)pcText = v8;
      v19 = v9;
      v22 = 0;
      v12 = PopupMenuText::CreateWin(pcText, 0, 0, 0, 0, 0, 0);
      v12->baseclass_0.m_ePopupMenuID = v5 + 1043;
      PopupMenuWin::AddMenu(v1->m_spLooterPopupMenu.m_pObject, &v12->baseclass_0);
      ++v5;
    }
    while ( v5 < g_kParty.m_uiTotalMember );
  }
  PopupMenuWin::FinishMenu(v1->m_spLooterPopupMenu.m_pObject, v3);
  v1->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v1->m_spLooterPopupMenu.m_pObject,
    v3);
}
// A85C00: using guessed type int __security_cookie;

//----- (005655D0) --------------------------------------------------------
void __thiscall PartyLootSetupWin::ChangeLooter(PartyLootSetupWin *this, unsigned int index)
{
  void *v2; // eax@2
  _BYTE v3[20]; // ST00_20@4
  PartyLootSetupWin *v4; // [sp+Ch] [bp-1Ch]@1
  Name5 result; // [sp+10h] [bp-18h]@2
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v4 = this;
  if ( index )
    v2 = Party::GetMemberInfo(&g_kParty, index - 1);
  else
    v2 = Party::GetPartyMasterID(&g_kParty, &result);
  *(_DWORD *)v3 = *(_DWORD *)v2;
  *(_QWORD *)&v3[4] = *(_QWORD *)((char *)v2 + 4);
  *(_QWORD *)&v3[12] = *(_QWORD *)((char *)v2 + 12);
  GameFrameWork::NcPartySetLooterReq((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, *(Name5 *)v3);
}
// A85C00: using guessed type int __security_cookie;

//----- (00565650) --------------------------------------------------------
void __thiscall PartyLootSetupWin::OnCommand(PartyLootSetupWin *this, unsigned int wParam, int lParam)
{
  int v3; // edi@0
  PartyLootSetupWin *v4; // esi@1
  PgWinBut *v5; // edi@6
  int v6; // ST14_4@6
  int v7; // ebx@6
  int v8; // ebx@6
  int v9; // ST08_4@6
  int v10; // edi@6
  int v11; // eax@6
  int v12; // edi@6
  int v13; // eax@6
  PgWinBut *v14; // edi@10
  int v15; // ST14_4@10
  int v16; // ebx@10
  int v17; // ebx@10
  int v18; // ST08_4@10
  int v19; // edi@10
  int v20; // eax@10
  int v21; // edi@10
  int v22; // eax@10
  PgWinBut *v23; // edi@14
  int v24; // ST14_4@14
  int v25; // ebx@14
  int v26; // ebx@14
  int v27; // ST08_4@14
  int v28; // edi@14
  int v29; // eax@14
  int v30; // edi@14
  int v31; // eax@14
  PgFrameWork *v32; // eax@15
  PopupMenuWin *wParama; // [sp+10h] [bp+8h]@6
  PopupMenuWin *wParamb; // [sp+10h] [bp+8h]@10
  PopupMenuWin *wParamc; // [sp+10h] [bp+8h]@14

  v4 = this;
  switch ( wParam )
  {
    case 0u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 1u:
      if ( Party::IsMePartyMaster(&g_kParty) )
      {
        if ( (unsigned __int8)((int (__stdcall *)(int))v4->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
        {
          PgWinMgr::ClosePopupWin(
            &Pgg_kWinMgr,
            &v4->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        }
        else
        {
          v5 = v4->m_spBtn[0].m_pObject;
          wParama = v4->m_spPopupMenu.m_pObject;
          v6 = (int)&v4->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77];
          v7 = ((int (__thiscall *)(PgWinBut *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4->m_spBtn[0].m_pObject);
          v8 = ((int (__thiscall *)(PgWinBut *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5)
             + v7;
          v9 = v8
             + ((int (__thiscall *)(PartyLootSetupWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4);
          v10 = ((int (__thiscall *)(PgWinBut *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v5);
          v11 = ((int (__thiscall *)(PartyLootSetupWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v4);
          (*(void (__thiscall **)(PopupMenuWin *, int))v6)(wParama, v11 + v10);
          v12 = ((int (*)(void))v4->m_spBtn[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          v13 = ((int (*)(void))v4->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          ((void (__stdcall *)(int, int))v4->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
            v12 - 22,
            v13);
          PgWinMgr::OpenPopupWin(
            &Pgg_kWinMgr,
            0,
            &v4->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          v4->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
            (NiRefObject *)v4->m_spPopupMenu.m_pObject,
            0);
        }
      }
      break;
    case 2u:
      if ( Party::IsMePartyMaster(&g_kParty) )
      {
        if ( (unsigned __int8)((int (__stdcall *)(int))v4->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
        {
          PgWinMgr::ClosePopupWin(
            &Pgg_kWinMgr,
            &v4->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        }
        else
        {
          v14 = v4->m_spBtn[1].m_pObject;
          wParamb = v4->m_spItemGradePopupMenu.m_pObject;
          v15 = (int)&wParamb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77];
          v16 = ((int (__thiscall *)(PgWinBut *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4->m_spBtn[1].m_pObject);
          v17 = ((int (__thiscall *)(PgWinBut *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v14)
              + v16;
          v18 = v17
              + ((int (__thiscall *)(PartyLootSetupWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4);
          v19 = ((int (__thiscall *)(PgWinBut *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v14);
          v20 = ((int (__thiscall *)(PartyLootSetupWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v4);
          (*(void (__thiscall **)(PopupMenuWin *, int))v15)(wParamb, v20 + v19);
          v21 = ((int (*)(void))v4->m_spBtn[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          v22 = ((int (*)(void))v4->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          ((void (__stdcall *)(int, int))v4->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
            v21 - 22,
            v22);
          ((void (__stdcall *)(_DWORD))v4->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
          PgWinMgr::OpenPopupWin(
            &Pgg_kWinMgr,
            0,
            &v4->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        }
      }
      break;
    case 3u:
      if ( Party::IsMePartyMaster(&g_kParty) )
      {
        if ( (unsigned __int8)((int (__stdcall *)(int))v4->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
        {
          PgWinMgr::ClosePopupWin(
            &Pgg_kWinMgr,
            &v4->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        }
        else
        {
          PartyLootSetupWin::UpdateLooterList(v4);
          v23 = v4->m_spBtn[2].m_pObject;
          wParamc = v4->m_spLooterPopupMenu.m_pObject;
          v24 = (int)&wParamc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77];
          v25 = ((int (__thiscall *)(PgWinBut *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4->m_spBtn[2].m_pObject);
          v26 = ((int (__thiscall *)(PgWinBut *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v23)
              + v25;
          v27 = v26
              + ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4);
          v28 = ((int (__thiscall *)(PgWinBut *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v23);
          v29 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v4);
          (*(void (__thiscall **)(PopupMenuWin *, int))v24)(wParamc, v29 + v28);
          v30 = ((int (*)(void))v4->m_spBtn[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          v31 = ((int (*)(void))v4->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          ((void (__stdcall *)(int, int))v4->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
            v30 - 22,
            v31);
          ((void (__stdcall *)(_DWORD))v4->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
          PgWinMgr::OpenPopupWin(
            &Pgg_kWinMgr,
            0,
            &v4->m_spLooterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        }
      }
      break;
    case 5u:
      v32 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v32 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v32, "PartyRootOption");
      break;
    default:
      return;
  }
}
// 565650: could not find valid save-restore pair for edi

//----- (00565A00) --------------------------------------------------------
void __thiscall PartyLootSetupWin::DirectMessage(PartyLootSetupWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 15 )
  {
    switch ( *(_DWORD *)pvBody )
    {
      case 0x404:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          0,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale));
        break;
      case 0x405:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOOTING_TYPE_ORDER,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale));
        break;
      case 0x406:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOOTING_TYPE_LOOTER,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale));
        break;
      case 0x408:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOOTING_TYPE_DICE,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale));
        break;
      case 0x40E:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          SLODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z),
          0);
        break;
      case 0x40F:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          SLODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z),
          1);
        break;
      case 0x410:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          SLODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z),
          2);
        break;
      case 0x411:
        GameFrameWork::NcPartyItemLootingSet(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          SLODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z),
          3);
        break;
      case 0x412:
        PartyLootSetupWin::ChangeLooter((PartyLootSetupWin *)((char *)this - 232), 0);
        break;
      case 0x413:
        PartyLootSetupWin::ChangeLooter((PartyLootSetupWin *)((char *)this - 232), 1u);
        break;
      case 0x414:
        PartyLootSetupWin::ChangeLooter((PartyLootSetupWin *)((char *)this - 232), 2u);
        break;
      case 0x415:
        PartyLootSetupWin::ChangeLooter((PartyLootSetupWin *)((char *)this - 232), 3u);
        break;
      case 0x416:
        PartyLootSetupWin::ChangeLooter((PartyLootSetupWin *)((char *)this - 232), 4u);
        break;
      default:
        return;
    }
  }
}

//----- (00565B80) --------------------------------------------------------
void __thiscall PartyLootSetupWin::SetLootingType(PartyLootSetupWin *this, char nLootingType)
{
  PartyLootSetupWin *v2; // esi@1
  PgWinText *v3; // ebx@2
  NiRefObjectVtbl *v4; // edi@2
  char *v5; // eax@2
  PgWinText *v6; // ebx@3
  NiRefObjectVtbl *v7; // edi@3
  char *v8; // eax@3
  PgWinText *v9; // ebx@4
  NiRefObjectVtbl *v10; // edi@4
  char *v11; // eax@4

  v2 = this;
  switch ( nLootingType )
  {
    case 0:
      v3 = this->m_spText[0].m_pObject;
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = TextData::Get(0xE54F4142u);
      v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v5);
      v2->m_eLootType = (unsigned __int8)nLootingType;
      return;
    case 1:
      v6 = this->m_spText[0].m_pObject;
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData::Get(0x78A8A1CFu);
      goto LABEL_6;
    case 2:
      v9 = this->m_spText[0].m_pObject;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = TextData2::Get(0x799878B4u);
      v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v11);
      v2->m_eLootType = (unsigned __int8)nLootingType;
      return;
    case 3:
      v6 = this->m_spText[0].m_pObject;
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData2::Get(0x2C518D68u);
LABEL_6:
      v7[118].__vecDelDtor((NiRefObject *)v6, (unsigned int)v8);
      break;
    default:
      break;
  }
  v2->m_eLootType = (unsigned __int8)nLootingType;
}

//----- (00565C60) --------------------------------------------------------
void __thiscall PartyLootSetupWin::SetItemGrade(PartyLootSetupWin *this, char nItemGrade)
{
  PartyLootSetupWin *v2; // esi@1
  PgWinText *v3; // ebx@5
  NiRefObjectVtbl *v4; // edi@5
  char *v5; // eax@5
  PgWinText *v6; // ebx@7
  NiRefObjectVtbl *v7; // edi@7
  char *v8; // eax@7
  unsigned int v9; // [sp-Ch] [bp-10h]@2
  unsigned int v10; // [sp-Ch] [bp-10h]@3

  v2 = this;
  switch ( nItemGrade )
  {
    case 0:
      v9 = 225928826;
      goto LABEL_5;
    case 1:
      v10 = 225994362;
      goto LABEL_7;
    case 2:
      v9 = 226059898;
LABEL_5:
      v3 = this->m_spText[1].m_pObject;
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = TextData3::Get(v9);
      v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v5);
      v2->m_eItemType = (unsigned __int8)nItemGrade;
      return;
    case 3:
      v10 = 226125434;
LABEL_7:
      v6 = this->m_spText[1].m_pObject;
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData3::Get(v10);
      v7[118].__vecDelDtor((NiRefObject *)v6, (unsigned int)v8);
      break;
    default:
      break;
  }
  v2->m_eItemType = (unsigned __int8)nItemGrade;
}

//----- (00565D00) --------------------------------------------------------
void __thiscall PartyLootSetupWin::PartyLootSetupWin(PartyLootSetupWin *this)
{
  PartyLootSetupWin *v1; // esi@1
  PopupMenuWin *v2; // edi@1
  PopupMenuWin *v3; // edi@6
  PopupMenuWin *v4; // edi@11
  PopupMenuWin *v5; // edi@16

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyLootSetupWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyLootSetupWin::_vftable_;
  v1->m_spDicePopupMenu.m_pObject = 0;
  v1->m_spPopupMenu.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spBtn,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spText,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spItemGradePopupMenu.m_pObject = 0;
  v1->m_spLooterPopupMenu.m_pObject = 0;
  v1->m_spLootName.m_pObject = 0;
  v2 = v1->m_spPopupMenu.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spPopupMenu.m_pObject = 0;
  }
  v3 = v1->m_spDicePopupMenu.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spDicePopupMenu.m_pObject = 0;
  }
  v4 = v1->m_spItemGradePopupMenu.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spItemGradePopupMenu.m_pObject = 0;
  }
  v5 = v1->m_spLooterPopupMenu.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v5,
          1u);
    }
    v1->m_spLooterPopupMenu.m_pObject = 0;
  }
}
// 9A4458: using guessed type int (__stdcall *PartyLootSetupWin___vftable_)(int uiFlags);
// 9A4474: using guessed type int (__thiscall *PartyLootSetupWin___vftable_)(void *p, char);

//----- (00565E70) --------------------------------------------------------
PartyLootSetupWin *__cdecl PartyLootSetupWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  PartyLootSetupWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x190u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    PartyLootSetupWin::PartyLootSetupWin((PartyLootSetupWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (PartyLootSetupWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00565FA0) --------------------------------------------------------
PartyLootSelectWin *__cdecl PartyLootSelectWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PartyLootSelectWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &PartyLootSelectWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PartyLootSelectWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PartyLootSelectWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A4218: using guessed type int (__stdcall *PartyLootSelectWin___vftable_)(int uiFlags);
// 9A4234: using guessed type int (__thiscall *PartyLootSelectWin___vftable_)(void *p, char);

//----- (005660E0) --------------------------------------------------------
void __thiscall PartyLootSelectWin::OnCommand(PartyLootSelectWin *this, unsigned int wParam, int lParam)
{
  PartyLootSelectWin *v3; // esi@1
  int v4; // eax@4
  const char *v5; // eax@5
  const char *v6; // eax@5
  PgFrameWork *v7; // eax@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+0h] [bp-54h]@5
  Name5 kCharID; // [sp+1Ch] [bp-38h]@7
  PROTO_NC_PARTY_SET_LOOTER_REQ kProto; // [sp+30h] [bp-24h]@7
  unsigned int v11; // [sp+44h] [bp-10h]@1
  int v12; // [sp+50h] [bp-4h]@5
  int v13; // [sp+54h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v3 = this;
  switch ( wParam )
  {
    case 0u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      PgWin::OnClose(&v3->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 3u:
      PartyLootSelectWin::OnSlideBar(this);
      break;
    case 4u:
      v4 = SlideListWin::GetCurSelIndex(this->m_pSeletMemberList);
      if ( v4 >= 0 )
      {
        v5 = SlideListWin::GetText(v3->m_pSeletMemberList, v4, 0);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &strText,
          v5);
        v6 = *(const char **)&strText;
        v12 = 0;
        if ( strText.baseclass_0._Myres < 0x10 )
          v6 = (const char *)&strText;
        Name5::Name5(&kCharID, v6);
        *(_QWORD *)&kProto.sNewLooterCharID.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
        *(_DWORD *)&kProto.sNewLooterCharID.n5_name[0] = *(_DWORD *)&kCharID;
        *(_QWORD *)&kProto.sNewLooterCharID.n5_name[12] = *(_QWORD *)&kCharID.n5_name[12];
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0xEu, 0x5Au, &kProto, 20);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
        PgWin::OnClose(&v3->baseclass_0.baseclass_0.baseclass_0);
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
      }
      break;
    case 5u:
      v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v7 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v7, "RaidRootSelect");
      break;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00566230) --------------------------------------------------------
bool __thiscall PartyLootSelectWin::Create(PartyLootSelectWin *this, PgFrameWork *pkFrameWork)
{
  PartyLootSelectWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // edi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // edi@18
  int v14; // edi@22
  NiSourceTexture *v15; // eax@22
  PgSprData *v16; // eax@25
  D3DXCOLOR v17; // ST18_16@25
  char *v18; // eax@25
  PgWinText *v19; // eax@25
  SLWCreateInfo::Item *v20; // edi@25
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v21; // edi@25
  SLWCreateInfo::Item *v22; // edi@31
  NiSourceTexture *v23; // edi@33
  PgSprData *v24; // eax@33
  SlideListWin *v25; // eax@33
  PgSprData *v26; // eax@33
  SlideBar *v27; // eax@33
  SlideBar *v28; // edi@33
  int v29; // eax@33
  NiSourceTexture *v30; // esi@33
  NiTexturingProperty *v31; // esi@35
  NiNode *v32; // esi@37
  const char *v33; // [sp+8h] [bp-98h]@23
  int *v34; // [sp+Ch] [bp-94h]@23
  int *v35; // [sp+10h] [bp-90h]@23
  NiSourceTexture *v36; // [sp+14h] [bp-8Ch]@23
  unsigned int v37; // [sp+18h] [bp-88h]@1
  SLWCreateInfo kCreateInfo; // [sp+28h] [bp-78h]@25
  UIUtil ui; // [sp+44h] [bp-5Ch]@25
  NiPointer<NiTexturingProperty> spTexProp; // [sp+58h] [bp-48h]@4
  NiSourceTexture *pkTexture; // [sp+5Ch] [bp-44h]@7
  NiRefObjectVtbl *iOffX; // [sp+60h] [bp-40h]@22
  int iOffY; // [sp+64h] [bp-3Ch]@1
  int uiTop; // [sp+68h] [bp-38h]@15
  int uiLeft; // [sp+6Ch] [bp-34h]@15
  NiPointer<NiNode> spNode; // [sp+70h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+74h] [bp-2Ch]@25
  unsigned int v48; // [sp+90h] [bp-10h]@1
  int v49; // [sp+9Ch] [bp-4h]@1
  int v50; // [sp+A0h] [bp+0h]@1

  v48 = (unsigned int)&v50 ^ __security_cookie;
  v37 = (unsigned int)&v50 ^ __security_cookie;
  v2 = this;
  iOffY = (int)pkFrameWork;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v49 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\RaidRootSelect.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v49) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v49) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v49 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, (PgFrameWork *)iOffY, "ExpeditionLootSelectWin", 0) )
  {
    v14 = uiLeft;
    iOffX = (NiRefObjectVtbl *)uiLeft;
    iOffY = uiTop;
    v15 = MenuTexMgr::GetTexture(0x13u);
    if ( v15 )
    {
      v36 = v15;
      v35 = &uiTop;
      v34 = &uiLeft;
      v33 = "Theme";
    }
    else
    {
      v36 = 0;
      v35 = &uiTop;
      v34 = &uiLeft;
      v33 = "Theme";
    }
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v33, v34, v35, v36);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - iOffY, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    UIUtil::UIUtil(&ui);
    LOBYTE(v49) = 2;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, v14, iOffY);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    UIUtil::CreateSpr(&ui, "Panel01", 0);
    UIUtil::CreateSpr(&ui, "Panel02", 0);
    *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v18 = TextData2::Get(0x64462634u);
    v19 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v18, COERCE_D3DXCOLOR(v17.r), 5u);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v19,
      1,
      v37);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v49) = 3;
    v20 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v20->nItemType = 1;
    v20->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    v21 = &v20->vecNodeName;
    LOBYTE(v49) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v21,
      &thisa);
    LOBYTE(v49) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v49) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v21,
      &thisa);
    LOBYTE(v49) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v49) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v21,
      &thisa);
    LOBYTE(v49) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v22 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    v22->nItemType = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column", 6u);
    LOBYTE(v49) = 7;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      &v22->vecNodeName,
      &thisa);
    LOBYTE(v49) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v22->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_nOffX = 3;
    kCreateInfo.m_nOffY = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v23 = pkTexture;
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Textbox", &uiLeft, &uiTop, pkTexture);
    v25 = SlideListWin::CreateWin(
            uiLeft - (_DWORD)iOffX,
            uiTop - iOffY,
            v24,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pSeletMemberList = v25;
    v25->m_uiLClickMsg = 4;
    SlideListWin::AlignText(v2->m_pSeletMemberList, 0);
    SlideListWin::UpdateViewList(v2->m_pSeletMemberList);
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, v23);
    v27 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            v26,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkSlideBarEx = v27;
    v27->m_uiClickMsg = 3;
    v2->m_pkSlideBarEx->m_eType = 1;
    v28 = v2->m_pkSlideBarEx;
    iOffX = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ((void (__thiscall *)(SlideBar *))iOffX[42].__vecDelDtor)(v28);
    v29 = ((int (__thiscall *)(SlideBar *))v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v28);
    iOffX[77].__vecDelDtor((NiRefObject *)v2->m_pkSlideBarEx, v29);
    SlideBar::SetSplitCnt(v2->m_pkSlideBarEx, v2->m_pSeletMemberList->m_nSlideSplitCnt);
    UIUtil::CreateBtn(&ui, 0, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    ((void (__thiscall *)(PartyLootSelectWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.69999999,
      0.1);
    v30 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      UIUtil::CreateBtn(&ui, 5u, "HelpLinkNor", "HelpLinkClick", "HelpLinkOver", 0, v30);
    LOBYTE(v49) = 2;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    LOBYTE(v49) = 1;
    UIUtil::_UIUtil(&ui);
    v31 = spTexProp.m_pObject;
    LOBYTE(v49) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
    v32 = spNode.m_pObject;
    v49 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v32 )
      v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v49) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v49 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00566830) --------------------------------------------------------
void *__thiscall PartyLootSelectWin::_vector_deleting_destructor_(PartyLootSelectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyLootSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyLootSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A4218: using guessed type int (__stdcall *PartyLootSelectWin___vftable_)(int uiFlags);
// 9A4234: using guessed type int (__thiscall *PartyLootSelectWin___vftable_)(void *p, char);

//----- (00566870) --------------------------------------------------------
void *__thiscall PartyLootSetupWin::_scalar_deleting_destructor_(PartyLootSetupWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PartyLootSetupWin::_PartyLootSetupWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005668B0) --------------------------------------------------------
void __thiscall CPartyMatchWin::AddPartyInfo(CPartyMatchWin *this, PROTO_NC_PARTY_FINDER_INFO *pkInfo)
{
  CPartyFinder *v2; // ecx@1

  v2 = this->m_pkPartyFinder;
  if ( v2 )
    CPartyFinder::Add(v2, pkInfo);
}

//----- (005668D0) --------------------------------------------------------
void __thiscall CPartyMatchWin::DelPartyInfo(CPartyMatchWin *this, Name5 *psCharID)
{
  CPartyFinder *v2; // ecx@1

  v2 = this->m_pkPartyFinder;
  if ( v2 )
    CPartyFinder::Del(v2, psCharID);
}

//----- (005668F0) --------------------------------------------------------
void __thiscall CPartyMatchWin::AbbreviateText(CPartyMatchWin *this, char *pResult, char *pTarget, int nAbbreviationSize)
{
  char *v4; // edi@1
  int v5; // eax@1
  int v6; // ebx@3
  char *v7; // esi@3
  int v8; // esi@8
  char v9; // al@9
  char *v10; // eax@11
  char v11; // cl@12

  v4 = pTarget;
  v5 = strlen(pTarget);
  if ( v5 && v5 >= nAbbreviationSize )
  {
    v6 = 0;
    v7 = pResult;
    while ( v6 < nAbbreviationSize )
    {
      if ( IsDBCSLeadByte(*v4) )
      {
        *v7 = *v4;
        v6 += 2;
        v7[1] = v4[1];
        v4 += 2;
        v7 += 2;
      }
      else
      {
        ++v6;
        *v7++ = *v4++;
      }
    }
    v8 = (int)(v7 - 1);
    do
      v9 = *(_BYTE *)(v8++ + 1);
    while ( v9 );
    *(_DWORD *)v8 = dword_9A4A54;
  }
  else
  {
    v10 = pTarget;
    do
    {
      v11 = *v10;
      v10[pResult - pTarget] = *v10;
      ++v10;
    }
    while ( v11 );
  }
}
// 9A4A54: using guessed type int dword_9A4A54;

//----- (00566980) --------------------------------------------------------
CPartyFinder::PARTY_FINDER_INFO_LIST *__thiscall CPartyMatchWin::FindList(CPartyMatchWin *this, int nIndexNum)
{
  CPartyFinder *v2; // eax@1
  CPartyFinder::PARTY_FINDER_INFO_LIST *result; // eax@2
  int i; // ecx@4

  v2 = this->m_pkPartyFinder;
  if ( v2 && nIndexNum < v2->m_NumOfInfo )
  {
    result = v2->m_pListTop;
    for ( i = 0; result; ++i )
    {
      if ( i >= nIndexNum )
        break;
      result = result->pLinkDn;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005669C0) --------------------------------------------------------
void __thiscall CPartyMatchWin::ClearList(CPartyMatchWin *this)
{
  CPartyFinder *v1; // ecx@1

  v1 = this->m_pkPartyFinder;
  if ( v1 )
    CPartyFinder::Clear(v1);
}

//----- (005669D0) --------------------------------------------------------
void __thiscall CPartyMatchWin::OnHelpLink(CPartyMatchWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "PartyMatching");
}

//----- (00566A00) --------------------------------------------------------
void __thiscall CPartyMatchWin::UpdateMeWin(CPartyMatchWin *this, float fCurTime)
{
  CPartyMatchWin *v2; // esi@1
  DWORD v3; // edi@4
  unsigned int v4; // eax@4
  PgWinBut *v5; // ecx@6
  unsigned int v6; // eax@8
  bool v7; // zf@10
  PgWinBut *v8; // ecx@11
  unsigned int v9; // eax@13
  PgWinBut *v10; // ecx@15
  SlideListWin *v11; // ecx@17
  char *v12; // eax@17
  char *v13; // edi@17

  v2 = this;
  if ( !(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1) )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimer, fCurTime) )
      GameFrameWork::NcPartyFinderListReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, LOWORD(v2->m_nPageNum), 0x14u);
    v3 = timeGetTime();
    v4 = v2->m_dwTimer_BtnEnroll;
    if ( v4 )
    {
      if ( v3 - v4 > 0xBB8 )
      {
        v5 = v2->m_pkBtnAddComment;
        v2->m_dwTimer_BtnEnroll = 0;
        if ( v5 )
          ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      }
    }
    v6 = v2->m_dwTimer_BtnDelete;
    if ( v6 )
    {
      if ( v3 - v6 > 0xBB8 )
      {
        v7 = v2->m_bCommentEnrolled == 0;
        v2->m_dwTimer_BtnDelete = 0;
        if ( !v7 )
        {
          v8 = v2->m_pkBtnDelComment;
          if ( v8 )
            ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        }
      }
    }
    v9 = v2->m_dwTimer_BtnInvite;
    if ( v9 )
    {
      if ( v3 - v9 > 0xBB8 )
      {
        v10 = v2->m_pkBtnApplyParty;
        v2->m_dwTimer_BtnInvite = 0;
        if ( v10 )
          ((void (__stdcall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      }
    }
  }
  v11 = v2->m_pkListWin;
  fCurTime = -6.8056469e38;
  v12 = SlideListWin::GetMouseOnItemText(v11, (int *)&fCurTime, 1);
  v13 = v12;
  if ( v12 )
  {
    if ( SLODWORD(fCurTime) >= 0 )
    {
      SlideListWin::SetToolTipWinTextInColumn(v2->m_pkListWin, 0, v12);
      SlideListWin::SetToolTipWinTextInColumn(v2->m_pkListWin, 1u, v13);
    }
  }
}

//----- (00566B40) --------------------------------------------------------
void __thiscall CPartyMatchWin::OnWinClose(CPartyMatchWin *this)
{
  CPartyMatchWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GameFrameWork::CloseCommunityWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (00566B70) --------------------------------------------------------
void __thiscall CPartyMatchWin::OnChangeTab(CPartyMatchWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab)
{
  char *v2; // esi@1

  v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      40,
      &eTab,
      v2);
    if ( *((_DWORD *)v2 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(40, &eTab, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 40, &eTab, v2);
}

//----- (00566BD0) --------------------------------------------------------
void __thiscall CPartyMatchWin::UpdateToolTip(CPartyMatchWin *this)
{
  CPartyMatchWin *v1; // edi@1
  CPartyFinder *v2; // ecx@4
  CPartyFinder::PARTY_FINDER_INFO_LIST *v3; // esi@6
  signed int v4; // eax@6
  SlideListWin *v5; // ecx@11
  int v6; // ebx@11
  SlideListWin *v7; // ecx@11
  signed int i; // [sp+4h] [bp-A4h]@3
  char acStr[129]; // [sp+8h] [bp-A0h]@11
  char acName[21]; // [sp+8Ch] [bp-1Ch]@11
  unsigned int v11; // [sp+A4h] [bp-4h]@1
  int v12; // [sp+A8h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  if ( this->m_pkListWin && this->m_pkPartyFinder )
  {
    i = 0;
    do
    {
      v2 = v1->m_pkPartyFinder;
      if ( !v2 )
        break;
      if ( (unsigned __int16)i >= v2->m_NumOfInfo )
        break;
      v3 = v2->m_pListTop;
      v4 = 0;
      if ( !v3 )
        break;
      while ( v4 < (unsigned __int16)i )
      {
        v3 = v3->pLinkDn;
        ++v4;
        if ( !v3 )
          return;
      }
      if ( !v3 )
        break;
      *(_DWORD *)acName = *(_DWORD *)&v3->Info.sCharID.n5_name[0];
      *(_DWORD *)&acName[4] = *(_DWORD *)&v3->Info.sCharID.n5_name[4];
      *(_DWORD *)&acName[8] = *(_DWORD *)&v3->Info.sCharID.n5_name[8];
      *(_DWORD *)&acName[12] = *(_DWORD *)&v3->Info.sCharID.n5_name[12];
      *(_DWORD *)&acName[16] = *(_DWORD *)&v3->Info.sCharID.n5_name[16];
      v5 = v1->m_pkListWin;
      acName[20] = 0;
      v6 = SlideListWin::AddText(v5, acName);
      strncpy(acStr, v3->Info.sMsg, 0x80u);
      v7 = v1->m_pkListWin;
      acStr[128] = 0;
      SlideListWin::SetText(v7, v6, 1u, acStr);
      SlideListWin::SetData(v1->m_pkListWin, v6, (unsigned __int16)i);
      SlideListWin::SetToolTipWinText(v1->m_pkListWin, i++, acStr);
    }
    while ( i < 20 );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00566D20) --------------------------------------------------------
void __thiscall CPartyMatchWin::UpdateList(CPartyMatchWin *this)
{
  CPartyMatchWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  int v3; // eax@3
  char v4; // cl@4
  int v5; // ebx@7
  CPartyFinder *v6; // ecx@8
  CPartyFinder::PARTY_FINDER_INFO_LIST *v7; // esi@10
  signed int v8; // eax@10
  SlideListWin *v9; // ecx@15
  int v10; // ebx@15
  SlideListWin *v11; // ecx@18
  CPartyFinder *v12; // eax@20
  CPartyFinder::PARTY_FINDER_INFO_LIST *v13; // eax@22
  int v14; // ecx@22
  int v15; // edx@27
  int v16; // ecx@27
  int v17; // edx@27
  int v18; // eax@27
  Name5 *v19; // eax@27
  int v20; // ecx@27
  int v21; // edx@27
  int v22; // esi@27
  int v23; // ebx@27
  int v24; // eax@27
  PgWinBut *v25; // ecx@28
  signed int v26; // [sp+8h] [bp-D4h]@28
  signed int nPrevSelectedIndex; // [sp+18h] [bp-C4h]@7
  int i; // [sp+1Ch] [bp-C0h]@7
  char bNeedCheck; // [sp+23h] [bp-B9h]@3
  char acStr[129]; // [sp+24h] [bp-B8h]@18
  char acID[21]; // [sp+A8h] [bp-34h]@27
  char acname[21]; // [sp+C0h] [bp-1Ch]@15
  unsigned int v33; // [sp+D8h] [bp-4h]@1
  int v34; // [sp+DCh] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkListWin;
  if ( v2 && v1->m_pkPartyFinder )
  {
    SlideListWin::RemoveAllList(v2);
    v3 = (int)v1->m_chSelectedID;
    bNeedCheck = 0;
    do
      v4 = *(_BYTE *)v3++;
    while ( v4 );
    if ( (char *)v3 != &v1->m_chSelectedID[1] )
      bNeedCheck = 1;
    v5 = 20;
    nPrevSelectedIndex = 20;
    i = 0;
    do
    {
      v6 = v1->m_pkPartyFinder;
      if ( !v6 )
        break;
      if ( (unsigned __int16)i >= v6->m_NumOfInfo )
        break;
      v7 = v6->m_pListTop;
      v8 = 0;
      if ( !v7 )
        break;
      while ( v8 < (unsigned __int16)i )
      {
        v7 = v7->pLinkDn;
        ++v8;
        if ( !v7 )
          goto LABEL_19;
      }
      if ( !v7 )
        break;
      *(_DWORD *)acname = *(_DWORD *)&v7->Info.sCharID.n5_name[0];
      *(_DWORD *)&acname[4] = *(_DWORD *)&v7->Info.sCharID.n5_name[4];
      *(_DWORD *)&acname[8] = *(_DWORD *)&v7->Info.sCharID.n5_name[8];
      *(_DWORD *)&acname[12] = *(_DWORD *)&v7->Info.sCharID.n5_name[12];
      *(_DWORD *)&acname[16] = *(_DWORD *)&v7->Info.sCharID.n5_name[16];
      v9 = v1->m_pkListWin;
      acname[20] = 0;
      v10 = SlideListWin::AddText(v9, acname);
      if ( bNeedCheck == 1 && !strcmp(acname, v1->m_chSelectedID) )
        nPrevSelectedIndex = i;
      strncpy(acStr, v7->Info.sMsg, 0x80u);
      v11 = v1->m_pkListWin;
      acStr[128] = 0;
      SlideListWin::SetText(v11, v10, 1u, acStr);
      SlideListWin::SetData(v1->m_pkListWin, v10, (unsigned __int16)i);
      SlideListWin::SetToolTipWinText(v1->m_pkListWin, i, acStr);
      v5 = nPrevSelectedIndex;
      ++i;
    }
    while ( i < 20 );
LABEL_19:
    if ( v5 == 20 )
    {
      if ( bNeedCheck == 1 )
        memset(v1->m_chSelectedID, 0, 0x100u);
    }
    else
    {
      SlideListWin::SetCurSelIndex(v1->m_pkListWin, v5);
      v12 = v1->m_pkPartyFinder;
      if ( !v12 || v5 >= v12->m_NumOfInfo || (v13 = v12->m_pListTop, v14 = 0, !v13) )
        goto LABEL_34;
      while ( v14 < v5 )
      {
        v13 = v13->pLinkDn;
        ++v14;
        if ( !v13 )
          goto LABEL_34;
      }
      if ( !v13 )
        goto LABEL_34;
      v15 = *(_DWORD *)&v13->Info.sCharID.n5_name[4];
      *(_DWORD *)acname = *(_DWORD *)&v13->Info.sCharID.n5_name[0];
      v16 = *(_DWORD *)&v13->Info.sCharID.n5_name[8];
      *(_DWORD *)&acname[4] = v15;
      v17 = *(_DWORD *)&v13->Info.sCharID.n5_name[12];
      v18 = *(_DWORD *)&v13->Info.sCharID.n5_name[16];
      *(_DWORD *)&acname[8] = v16;
      *(_DWORD *)&acname[12] = v17;
      *(_DWORD *)&acname[16] = v18;
      acname[20] = 0;
      v19 = User::GetMainCharID(&g_kUser);
      v20 = *(_DWORD *)&v19->n5_name[0];
      v21 = *(_DWORD *)&v19->n5_name[4];
      v22 = *(_DWORD *)&v19->n5_name[8];
      v23 = *(_DWORD *)&v19->n5_name[12];
      v24 = *(_DWORD *)&v19->n5_name[16];
      *(_DWORD *)acID = v20;
      *(_DWORD *)&acID[16] = v24;
      *(_DWORD *)&acID[4] = v21;
      *(_DWORD *)&acID[8] = v22;
      *(_DWORD *)&acID[12] = v23;
      acID[20] = 0;
      if ( !strcmp(acID, acname) )
      {
        ((void (__stdcall *)(_DWORD))v1->m_pkBtnApplyParty->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v25 = v1->m_pkBtnWhisper;
        v26 = 0;
        goto LABEL_33;
      }
    }
    ((void (__stdcall *)(signed int))v1->m_pkBtnWhisper->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    if ( v1->m_dwTimer_BtnInvite )
    {
LABEL_34:
      SlideListWin::AlignText(v1->m_pkListWin, 0, 4u);
      SlideListWin::AlignText(v1->m_pkListWin, 1u, 4u);
      SlideListWin::UpdateViewList(v1->m_pkListWin);
      CNSTimer_Interval::ReSet(&v1->m_kTimer, Timer::ms_fCurTime);
      v1->m_kTimer.m_fCheckTime = 10.0;
      return;
    }
    v25 = v1->m_pkBtnApplyParty;
    v26 = 1;
LABEL_33:
    ((void (__stdcall *)(signed int))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v26);
    goto LABEL_34;
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00567060) --------------------------------------------------------
void __thiscall CPartyMatchWin::ChangeUserName(CPartyMatchWin *this, Name5 *OldName, Name5 *NewName)
{
  CPartyMatchWin *v3; // esi@1
  CPartyFinder *v4; // ecx@1
  CPartyFinder::PARTY_FINDER_INFO_LIST *v5; // eax@2

  v3 = this;
  v4 = this->m_pkPartyFinder;
  if ( v4 )
  {
    v5 = CPartyFinder::Find(v4, OldName);
    if ( v5 )
    {
      *(_QWORD *)&v5->Info.sCharID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
      *(_QWORD *)&v5->Info.sCharID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
      *(_DWORD *)&v5->Info.sCharID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
      CPartyMatchWin::UpdateList(v3);
    }
  }
}

//----- (005670B0) --------------------------------------------------------
void __thiscall CPartyMatchWin::CPartyMatchWin(CPartyMatchWin *this)
{
  CPartyMatchWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CPartyMatchWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CPartyMatchWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimer);
  v1->m_pkListWin = 0;
  v1->m_pkPartyFinder = 0;
  v1->m_pkBtnAddComment = 0;
  v1->m_pkBtnDelComment = 0;
  v1->m_pkBtnApplyParty = 0;
  v1->m_pkBtnWhisper = 0;
}
// 9A4A6C: using guessed type int (__stdcall *CPartyMatchWin___vftable_)(int uiFlags);
// 9A4A8C: using guessed type int (__thiscall *CPartyMatchWin___vftable_)(void *p, char);

//----- (00567140) --------------------------------------------------------
void __thiscall CPartyMatchWin::_CPartyMatchWin(CPartyMatchWin *this)
{
  CPartyMatchWin *v1; // esi@1
  CPartyFinder *v2; // edi@1
  EditWin *v3; // edi@3
  EditWin *v4; // edi@8

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CPartyMatchWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CPartyMatchWin::_vftable_;
  v2 = this->m_pkPartyFinder;
  if ( v2 )
  {
    CPartyFinder::_CPartyFinder(v2);
    operator delete(v2);
    v1->m_pkPartyFinder = 0;
  }
  v3 = v1->m_spEdit.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spEdit.m_pObject = 0;
  }
  v1->m_pkBtnAddComment = 0;
  v1->m_pkBtnDelComment = 0;
  v1->m_pkBtnApplyParty = 0;
  v1->m_pkBtnWhisper = 0;
  v4 = v1->m_spEdit.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A4A6C: using guessed type int (__stdcall *CPartyMatchWin___vftable_)(int uiFlags);
// 9A4A8C: using guessed type int (__thiscall *CPartyMatchWin___vftable_)(void *p, char);

//----- (00567240) --------------------------------------------------------
void __thiscall CPartyMatchWin::OnCommand(CPartyMatchWin *this, unsigned int wParam, int lParam)
{
  CPartyMatchWin *v3; // esi@1
  int v4; // eax@8
  CPartyFinder::PARTY_FINDER_INFO_LIST *v5; // eax@9
  int v6; // eax@10
  char v7; // cl@11
  Name5 *v8; // eax@12
  int v9; // ecx@12
  unsigned int v10; // edx@12
  int v11; // eax@16
  int v12; // eax@17
  SlideListWin *v13; // ecx@18
  int v14; // eax@20
  int v15; // eax@21
  EditWin *v16; // ecx@22
  int v17; // eax@24
  int v18; // edx@24
  char v19; // cl@25
  char *v20; // eax@28
  char *v21; // eax@28
  DWORD v22; // eax@28
  PgWinBut *v23; // ecx@28
  DWORD v24; // eax@30
  PgWinBut *v25; // ecx@30
  int v26; // eax@31
  CPartyFinder::PARTY_FINDER_INFO_LIST *v27; // eax@32
  GameFrameWork *v28; // ecx@34
  DWORD v29; // eax@34
  PgWinBut *v30; // ecx@34
  char *v31; // eax@36
  int v32; // eax@37
  CPartyFinder::PARTY_FINDER_INFO_LIST *v33; // eax@38
  int v34; // edi@39
  GameFrameWork *v35; // ecx@39
  unsigned __int16 v36; // [sp-8h] [bp-58h]@17
  unsigned __int16 v37; // [sp-4h] [bp-54h]@17
  unsigned int v38; // [sp-4h] [bp-54h]@27
  Name5 id; // [sp+4h] [bp-4Ch]@12
  int dwTargetIndex; // [sp+18h] [bp-38h]@9
  char acname[21]; // [sp+1Ch] [bp-34h]@10
  char acID[21]; // [sp+34h] [bp-1Ch]@12
  unsigned int v43; // [sp+4Ch] [bp-4h]@1
  int v44; // [sp+50h] [bp+0h]@1

  v43 = (unsigned int)&v44 ^ __security_cookie;
  v3 = this;
  switch ( wParam )
  {
    case 0xBu:
      CPartyMatchWin::OnWinClose(this);
      break;
    case 0x14u:
      CPartyMatchWin::OnChangeTab(this, 0);
      break;
    case 0x15u:
      CPartyMatchWin::OnChangeTab(this, TE_GUILD);
      break;
    case 0x16u:
      CPartyMatchWin::OnChangeTab(this, TE_WEDDING);
      break;
    case 0x17u:
      CPartyMatchWin::OnChangeTab(this, TE_HOLYPROMISE);
      break;
    case 0x18u:
      CPartyMatchWin::OnChangeTab(this, TE_GUILDACADEMY);
      break;
    case 0xEu:
    case 0xFu:
      v4 = SlideListWin::GetCurSelIndex(this->m_pkListWin);
      if ( v4 >= 0 )
      {
        SlideListWin::GetData(v3->m_pkListWin, v4, (unsigned int *)&dwTargetIndex);
        v5 = CPartyMatchWin::FindList(v3, dwTargetIndex);
        if ( v5 )
        {
          Name5::n_string(&v5->Info.sCharID, acname);
          v6 = (int)acname;
          acname[20] = 0;
          do
          {
            v7 = *(_BYTE *)v6;
            *(_BYTE *)(v3->m_chSelectedID - acname + v6) = *(_BYTE *)v6;
            ++v6;
          }
          while ( v7 );
          v8 = User::GetMainCharID(&g_kUser);
          v9 = *(_DWORD *)&v8->n5_name[4];
          *(_DWORD *)&id.n5_name[0] = *(_DWORD *)&v8->n5_name[0];
          v10 = *(_DWORD *)&v8->n5_name[8];
          *(_DWORD *)&id.n5_name[4] = v9;
          *(_QWORD *)&id.n5_name[8] = __PAIR__(*(_DWORD *)&v8->n5_name[12], v10);
          *(_DWORD *)&id.n5_name[16] = *(_DWORD *)&v8->n5_name[16];
          Name5::n_string(&id, acID);
          acID[20] = 0;
          if ( strcmp(acID, acname) )
          {
            ((void (__stdcall *)(signed int))v3->m_pkBtnWhisper->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
            if ( !v3->m_dwTimer_BtnInvite )
              ((void (__stdcall *)(signed int))v3->m_pkBtnApplyParty->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          }
          else
          {
            ((void (__stdcall *)(_DWORD))v3->m_pkBtnApplyParty->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
            ((void (__stdcall *)(_DWORD))v3->m_pkBtnWhisper->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          }
        }
      }
      break;
    case 0xCu:
      v11 = this->m_nPageNum;
      if ( v11 )
      {
        v12 = v11 - 1;
        v37 = 20;
        this->m_nPageNum = v12;
        v36 = v12;
        goto LABEL_18;
      }
      break;
    case 0xDu:
      v14 = this->m_nPageNum;
      if ( this->m_nMaxPage - 1 > v14 )
      {
        v15 = v14 + 1;
        this->m_nPageNum = v15;
        v37 = 20;
        v36 = v15;
LABEL_18:
        GameFrameWork::NcPartyFinderListReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, v36, v37);
        v13 = v3->m_pkListWin;
        if ( v13 )
          SlideListWin::RemoveAllList(v13);
      }
      break;
    case 0x10u:
      v16 = this->m_spEdit.m_pObject;
      if ( v16 && !v3->m_dwTimer_BtnEnroll )
      {
        v17 = ((int (*)(void))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v18 = v17 + 1;
        do
          v19 = *(_BYTE *)v17++;
        while ( v19 );
        if ( v17 == v18 )
        {
          v38 = -2003857495;
          goto LABEL_36;
        }
        v20 = (char *)((int (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v21 = TextFilterTable::FilterSlander(v20);
        GameFrameWork::NcPartyFinderAddCommentReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v21);
        ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
        v22 = timeGetTime();
        v23 = v3->m_pkBtnAddComment;
        v3->m_dwTimer_BtnEnroll = v22;
        ((void (__stdcall *)(_DWORD))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      }
      break;
    case 0x11u:
      if ( !this->m_dwTimer_BtnDelete )
      {
        GameFrameWork::NcPartyFinderDelCommentReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
        v24 = timeGetTime();
        v25 = v3->m_pkBtnDelComment;
        v3->m_dwTimer_BtnDelete = v24;
        ((void (__stdcall *)(_DWORD))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      }
      break;
    case 0x13u:
      v26 = SlideListWin::GetCurSelIndex(this->m_pkListWin);
      if ( v26 < 0 )
        goto LABEL_35;
      SlideListWin::GetData(v3->m_pkListWin, v26, (unsigned int *)&dwTargetIndex);
      v27 = CPartyMatchWin::FindList(v3, (unsigned __int16)dwTargetIndex);
      if ( v27 && !v3->m_dwTimer_BtnInvite )
      {
        Name5::n_string(&v27->Info.sCharID, acID);
        v28 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
        acID[20] = 0;
        GameFrameWork::NcPartyJoinReq(v28, acID);
        v29 = timeGetTime();
        v30 = v3->m_pkBtnApplyParty;
        v3->m_dwTimer_BtnInvite = v29;
        ((void (__stdcall *)(_DWORD))v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      }
      break;
    case 0x12u:
      v32 = SlideListWin::GetCurSelIndex(this->m_pkListWin);
      if ( v32 < 0 )
      {
LABEL_35:
        v38 = -857216207;
LABEL_36:
        v31 = TextData::Get(v38);
        MsgBox::Modal(MSGBOX_OK, v31);
      }
      else
      {
        SlideListWin::GetData(v3->m_pkListWin, v32, (unsigned int *)&dwTargetIndex);
        v33 = CPartyMatchWin::FindList(v3, (unsigned __int16)dwTargetIndex);
        if ( v33 )
        {
          v34 = (int)&v33->Info.sCharID;
          Name5::n_string(&v33->Info.sCharID, acID);
          *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)v34;
          *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)(v34 + 8);
          *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)(v34 + 16);
          v35 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
          acID[20] = 0;
          GameFrameWork::OnWhisperChatStart(v35, acID);
        }
      }
      break;
    case 0x19u:
      CPartyMatchWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00567730) --------------------------------------------------------
bool __thiscall CPartyMatchWin::SetListBriefInfo(CPartyMatchWin *this, unsigned __int16 wCurrPageNo, unsigned __int16 wMaxPages, bool bHaveOwnInfo)
{
  int v4; // edi@0
  CPartyMatchWin *v5; // esi@1
  bool v6; // zf@1
  NiRefObjectVtbl *v7; // edi@3
  char *v8; // eax@3
  NiRefObjectVtbl *v9; // edi@4
  char *v10; // eax@4
  int v12; // [sp-4h] [bp-Ch]@2

  v5 = this;
  v6 = this->m_pkBtnAddComment == 0;
  this->m_nMaxPage = wMaxPages;
  this->m_nPageNum = wCurrPageNo;
  this->m_bCommentEnrolled = bHaveOwnInfo;
  if ( !v6 )
  {
    v12 = v4;
    if ( bHaveOwnInfo )
    {
      v7 = this->m_pkBtnTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData::Get(0x8F8F799Bu);
      ((void (__thiscall *)(PgWinText *, char *, int))v7[118].__vecDelDtor)(v5->m_pkBtnTxt, v8, v12);
    }
    else
    {
      v9 = this->m_pkBtnTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = TextData::Get(0x818D7FA9u);
      ((void (__thiscall *)(PgWinText *, char *, int))v9[118].__vecDelDtor)(v5->m_pkBtnTxt, v10, v12);
    }
    ((void (*)(void))v5->m_pkBtnDelComment->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)();
  }
  return wCurrPageNo == v5->m_nPageNum;
}
// 567730: could not find valid save-restore pair for edi

//----- (005677E0) --------------------------------------------------------
void __thiscall CPartyMatchWin::OnShowWin(CPartyMatchWin *this)
{
  char v1; // bl@1
  CPartyMatchWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  SlideListWin *v5; // ecx@3
  EditWin *v6; // ecx@5
  EditWin *v7; // ebx@6
  NiRefObjectVtbl *v8; // edi@6
  char *v9; // eax@6

  v1 = 0;
  v2 = this;
  this->m_dwTimer_BtnEnroll = 0;
  this->m_dwTimer_BtnDelete = 0;
  this->m_dwTimer_BtnInvite = 0;
  this->m_nPageNum = 0;
  this->m_nMaxPage = 0;
  this->m_bCommentEnrolled = 0;
  if ( this->m_pkBtnAddComment )
  {
    v3 = this->m_pkBtnTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = TextData::Get(0x818D7FA9u);
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkBtnTxt, (unsigned int)v4);
    ((void (__stdcall *)(_DWORD))v2->m_pkBtnDelComment->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  ((void (__stdcall *)(_DWORD))v2->m_pkBtnAddComment->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v2->m_pkBtnApplyParty->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v2->m_pkBtnWhisper->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v5 = v2->m_pkListWin;
  if ( v5 )
  {
    SlideListWin::RemoveAllList(v5);
    GameFrameWork::NcPartyFinderListReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, LOWORD(v2->m_nPageNum), 0x14u);
  }
  v6 = v2->m_spEdit.m_pObject;
  if ( v6 )
  {
    ((void (*)(void))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
    v7 = v2->m_spEdit.m_pObject;
    v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = TextData2::Get(0xBBAE8B7Du);
    v8[116].__vecDelDtor((NiRefObject *)v7, (unsigned int)v9);
    v1 = 0;
  }
  memset(v2->m_chSelectedID, v1, 0x100u);
  PgWin::OnShowWin(&v2->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00567900) --------------------------------------------------------
CPartyMatchWin *__cdecl CPartyMatchWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CPartyMatchWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x2ACu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CPartyMatchWin::CPartyMatchWin((CPartyMatchWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CPartyMatchWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00567A30) --------------------------------------------------------
bool __thiscall CPartyMatchWin::Create(CPartyMatchWin *this, PgFrameWork *pkFrameWork)
{
  CPartyMatchWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  PgSprData *v18; // eax@25
  PgSprData *v19; // eax@25
  PgWinSpr *v20; // eax@25
  PgSprData *v21; // eax@25
  PgFont *v22; // eax@26
  PgWinText *v23; // eax@26
  NiRefObjectVtbl *v24; // edx@26
  char *v25; // eax@26
  PgFont *v26; // eax@28
  PgWinText *v27; // eax@28
  NiRefObjectVtbl *v28; // edx@28
  char *v29; // eax@28
  PgFont *v30; // eax@28
  char *v31; // eax@28
  SLWCreateInfo::Item *v32; // eax@28
  void *v33; // eax@28
  void *v34; // eax@28
  void *v35; // eax@28
  void *v36; // eax@28
  PgSprData *v37; // eax@28
  SlideListWin *v38; // eax@28
  void *v39; // eax@28
  CPartyFinder *v40; // eax@29
  NiSourceTexture *v41; // STD8_4@31
  NiNode *v42; // edx@31
  PgSprData::PgHitTester *v43; // eax@31
  void *v44; // edx@31
  PgFont *v45; // eax@31
  PgWinText *v46; // eax@31
  NiRefObjectVtbl *v47; // edx@31
  char *v48; // eax@31
  NiPointer<PgSprData::PgHitTester> *v49; // ecx@31
  void *v50; // eax@31
  PgFont *v51; // eax@31
  PgWinText *v52; // eax@31
  NiRefObjectVtbl *v53; // edx@31
  char *v54; // eax@31
  PgSprData *v55; // eax@31
  char *v56; // eax@31
  char *v57; // eax@31
  char *v58; // eax@31
  char *v59; // eax@31
  char *v60; // eax@31
  char *v61; // eax@31
  PgSprData::PgHitTester *v62; // eax@31
  void *v63; // edx@31
  PgFont *v64; // eax@31
  PgWinText *v65; // eax@31
  NiRefObjectVtbl *v66; // edx@31
  char *v67; // eax@31
  PgSprData::PgHitTester *v68; // eax@31
  void *v69; // edx@31
  PgFont *v70; // eax@31
  PgWinText *v71; // eax@31
  NiRefObjectVtbl *v72; // edx@31
  char *v73; // eax@31
  PgSprData::PgHitTester *v74; // eax@31
  void *v75; // edx@31
  PgFont *v76; // eax@31
  PgWinText *v77; // eax@31
  NiRefObjectVtbl *v78; // edx@31
  char *v79; // eax@31
  PgSprData::PgHitTester *v80; // eax@31
  void *v81; // edx@31
  PgFont *v82; // eax@31
  PgWinText *v83; // eax@31
  NiRefObjectVtbl *v84; // edx@31
  char *v85; // eax@31
  PgSprData::PgHitTester *v86; // eax@31
  void *v87; // edx@31
  PgFont *v88; // eax@31
  PgWinText *v89; // eax@31
  NiRefObjectVtbl *v90; // edx@31
  char *v91; // eax@31
  PgSprData::PgHitTester *v92; // eax@31
  void *v93; // edx@31
  PgFont *v94; // eax@31
  PgWinText *v95; // eax@31
  NiRefObjectVtbl *v96; // edx@31
  char *v97; // eax@31
  NiPointer<PgSprData::PgHitTester> *v98; // ecx@31
  void *v99; // eax@31
  PgFont *v100; // eax@31
  PgWinText *v101; // eax@31
  NiRefObjectVtbl *v102; // edx@31
  char *v103; // eax@31
  PgSprData *v104; // eax@31
  PgFont *v105; // eax@34
  EditWin *v106; // eax@34
  PgWinBut *v107; // eax@34
  PgSprData *v108; // edx@34
  PgSprData::PgHitTester *v109; // eax@34
  void *v110; // edx@34
  PgFont *v111; // eax@34
  PgWinText *v112; // eax@34
  char *v113; // eax@34
  PgWinBut *v114; // eax@34
  char *v115; // eax@34
  PgSprData::PgHitTester *v116; // eax@34
  void *v117; // edx@34
  PgFont *v118; // eax@34
  PgWinText *v119; // eax@34
  NiRefObjectVtbl *v120; // edx@34
  char *v121; // eax@34
  PgWinBut *v122; // eax@34
  PgSprData *v123; // ecx@34
  PgSprData::PgHitTester *v124; // eax@34
  void *v125; // edx@34
  PgFont *v126; // eax@34
  PgWinText *v127; // eax@34
  NiRefObjectVtbl *v128; // edx@34
  char *v129; // eax@34
  PgWinBut *v130; // eax@34
  char *v131; // eax@34
  PgSprData::PgHitTester *v132; // eax@34
  void *v133; // edx@34
  PgFont *v134; // eax@34
  PgWinText *v135; // edi@34
  NiRefObjectVtbl *v136; // ebx@34
  char *v137; // eax@34
  const char *v138; // [sp+C8h] [bp-8Ch]@23
  int *v139; // [sp+CCh] [bp-88h]@23
  int *v140; // [sp+D0h] [bp-84h]@23
  NiSourceTexture *v141; // [sp+D4h] [bp-80h]@23
  unsigned int v142; // [sp+D8h] [bp-7Ch]@1
  SLWCreateInfo kCreateInfo; // [sp+E8h] [bp-6Ch]@28
  NiPointer<NiTexturingProperty> spTexProp; // [sp+104h] [bp-50h]@4
  unsigned int uiWidth; // [sp+108h] [bp-4Ch]@25
  unsigned int uiHeight; // [sp+10Ch] [bp-48h]@25
  NiSourceTexture *pkTexture; // [sp+110h] [bp-44h]@7
  int uiTop; // [sp+114h] [bp-40h]@15
  int uiLeft; // [sp+118h] [bp-3Ch]@15
  NiPointer<NiNode> spNode; // [sp+11Ch] [bp-38h]@1
  void *pkTexture8; // [sp+120h] [bp-34h]@26
  PgSprData *pkTextWin; // [sp+124h] [bp-30h]@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+128h] [bp-2Ch]@28
  unsigned int v154; // [sp+144h] [bp-10h]@1
  int v155; // [sp+150h] [bp-4h]@1
  int v156; // [sp+154h] [bp+0h]@1

  v154 = (unsigned int)&v156 ^ __security_cookie;
  v142 = (unsigned int)&v156 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v155 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\PartyMatching.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v155) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v155) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v155 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "FriendWin", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v141 = v16;
      v140 = &uiTop;
      v139 = &uiLeft;
      v138 = "Theme";
    }
    else
    {
      v141 = 0;
      v140 = &uiTop;
      v139 = &uiLeft;
      v138 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v138, v139, v140, v141);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
    v20 = PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v22 = Font::Get(MAIN_MENU);
      v23 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              uiWidth,
              uiHeight,
              v22,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v23;
      ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v24[122].__vecDelDtor)(v23, 1, v142);
      ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v25 = TextData::Get(0xE3504941u);
      (*(void (__thiscall **)(PgSprData *, char *))((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(
        pkTextWin,
        v25);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
      pkTexture8 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        pkTextWin = PgSprData::Create(
                      &spNode.m_pObject->baseclass_0,
                      "HelpLinkNor",
                      &uiLeft,
                      &uiTop,
                      (NiSourceTexture *)pkTexture8);
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x19u, 0, 0);
      }
      PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, 0);
      v26 = Font::Get(TITLEBOLD);
      v27 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              uiWidth,
              uiHeight,
              v26,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v27;
      v28[122].__vecDelDtor((NiRefObject *)v27, 5u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v29 = TextData::Get(0x1C4B503Eu);
      (*(void (__thiscall **)(PgSprData *, char *))((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(
        pkTextWin,
        v29);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      PgSprData::Create(&spNode.m_pObject->baseclass_0, "Category", &uiLeft, &uiTop, 0);
      v30 = Font::Get(TITLEBOLD);
      pkTextWin = (PgSprData *)PgWinText::CreateWin(
                                 uiLeft - v14,
                                 uiTop - v15,
                                 uiWidth,
                                 uiHeight,
                                 v30,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 0,
                                 0);
      pkTextWin->baseclass_0.vfptr[122].__vecDelDtor((NiRefObject *)pkTextWin, 5u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v31 = TextData3::Get(0x2E4A1B0Bu);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v31);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v155) = 2;
      v32 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v32->nItemType = 1;
      v32->pNode = spNode.m_pObject;
      pkTexture8 = v32;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      LOBYTE(v155) = 3;
      pkTexture8 = (char *)pkTexture8 + 72;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTexture8,
        &thisa);
      LOBYTE(v155) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarClick");
      LOBYTE(v155) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTexture8,
        &thisa);
      LOBYTE(v155) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v155) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTexture8,
        &thisa);
      LOBYTE(v155) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v33 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTexture8 = v33;
      *(_DWORD *)v33 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "CharName01");
      LOBYTE(v155) = 6;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTexture8 + 72),
        &thisa);
      LOBYTE(v155) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v34 = pkTexture8;
      *((_DWORD *)pkTexture8 + 1) = spNode.m_pObject;
      *((_BYTE *)v34 + 88) = 1;
      v35 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTexture8 = v35;
      *(_DWORD *)v35 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Title01");
      LOBYTE(v155) = 7;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTexture8 + 72),
        &thisa);
      LOBYTE(v155) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v36 = pkTexture8;
      *((_DWORD *)pkTexture8 + 1) = spNode.m_pObject;
      *((_BYTE *)v36 + 88) = 1;
      kCreateInfo.m_nOffX = 3;
      kCreateInfo.m_nOffY = 0;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, pkTexture);
      v38 = SlideListWin::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              v37,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              0);
      v2->m_pkListWin = v38;
      v38->m_uiLClickMsg = 14;
      v2->m_pkListWin->m_uiRClickMsg = 15;
      SlideListWin::UpdateViewList(v2->m_pkListWin);
      SlideListWin::SetToolTipWin(v2->m_pkListWin, g_pkToolTipWin);
      v39 = operator new(0xCu);
      pkTexture8 = v39;
      LOBYTE(v155) = 8;
      if ( v39 )
        CPartyFinder::CPartyFinder((CPartyFinder *)v39);
      else
        v40 = 0;
      v41 = pkTexture;
      v42 = spNode.m_pObject;
      v2->m_pkPartyFinder = v40;
      LOBYTE(v155) = 2;
      v43 = PgSprData::Create(&v42->baseclass_0, "CharName", &uiLeft, &uiTop, v41)->m_akHitTester.m_pBase->m_pObject;
      v44 = (void *)v43->m_uiWidth;
      pkTexture8 = (void *)v43->m_uiHeight;
      pkTextWin = (PgSprData *)v44;
      v45 = Font::Get(MAIN_MENU);
      v46 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v45,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v46;
      ((void (__thiscall *)(PgWinText *))v47[122].__vecDelDtor)(v46);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v48 = TextData::Get(0x4EA49695u);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v48);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v49 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase;
      v50 = (void *)v49->m_pObject->m_uiWidth;
      pkTexture8 = (void *)v49->m_pObject->m_uiHeight;
      pkTextWin = (PgSprData *)v50;
      v51 = Font::Get(MAIN_MENU);
      v52 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v51,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v52;
      v53[122].__vecDelDtor((NiRefObject *)v52, 5u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v54 = TextData::Get(0xE5E1C0D9u);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v54);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v55 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Base", &uiLeft, &uiTop, 0);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v55, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FriendNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FriendClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "FriendOver");
      pkTexture8 = PgWinBut::CreateWin(
                     uiLeft - v14,
                     uiTop - v15,
                     pkTextWin,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0x14u,
                     0,
                     0);
      v56 = TextData::Get(0xDCF3EDF4u);
      PgWin::SetToolTipWinText((PgWin *)pkTexture8, v56);
      *((_DWORD *)pkTexture8 + 68) = g_pkToolTipWin;
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildOver");
      pkTexture8 = PgWinBut::CreateWin(
                     uiLeft - v14,
                     uiTop - v15,
                     pkTextWin,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0x15u,
                     0,
                     0);
      v57 = TextData::Get(0x9BEAF4F4u);
      PgWin::SetToolTipWinText((PgWin *)pkTexture8, v57);
      *((_DWORD *)pkTexture8 + 68) = g_pkToolTipWin;
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MasterNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MasterClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "MasterOver");
      pkTexture8 = PgWinBut::CreateWin(
                     uiLeft - v14,
                     uiTop - v15,
                     pkTextWin,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0x17u,
                     0,
                     0);
      v58 = TextData::Get(0xF44C3A3Cu);
      PgWin::SetToolTipWinText((PgWin *)pkTexture8, v58);
      *((_DWORD *)pkTexture8 + 68) = g_pkToolTipWin;
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WeddingNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingOver");
      pkTexture8 = PgWinBut::CreateWin(
                     uiLeft - v14,
                     uiTop - v15,
                     pkTextWin,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0x16u,
                     0,
                     0);
      v59 = TextData::Get(0xC8F53F44u);
      PgWin::SetToolTipWinText((PgWin *)pkTexture8, v59);
      *((_DWORD *)pkTexture8 + 68) = g_pkToolTipWin;
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatchNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchOver");
      pkTexture8 = PgWinBut::CreateWin(
                     uiLeft - v14,
                     uiTop - v15,
                     pkTextWin,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0xAu,
                     0,
                     0);
      v60 = TextData::Get(0x1C4B503Eu);
      PgWin::SetToolTipWinText((PgWin *)pkTexture8, v60);
      *((_DWORD *)pkTexture8 + 68) = g_pkToolTipWin;
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademyNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyOver");
      pkTexture8 = PgWinBut::CreateWin(
                     uiLeft - v14,
                     uiTop - v15,
                     pkTextWin,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0x18u,
                     0,
                     0);
      v61 = TextData::Get(0x253B184Cu);
      PgWin::SetToolTipWinText((PgWin *)pkTexture8, v61);
      *((_DWORD *)pkTexture8 + 68) = g_pkToolTipWin;
      v62 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Friend", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
      v63 = (void *)v62->m_uiWidth;
      pkTexture8 = (void *)v62->m_uiHeight;
      pkTextWin = (PgSprData *)v63;
      v64 = Font::Get(TITLEBOLD);
      v65 = PgWinText::CreateWin(
              uiLeft,
              uiTop,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v64,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v66 = v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v65;
      v66[122].__vecDelDtor((NiRefObject *)v65, 1u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v67 = TextData::Get(0xDCF3EDF4u);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v67);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v68 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HolyPromise", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
      v69 = (void *)v68->m_uiWidth;
      pkTexture8 = (void *)v68->m_uiHeight;
      pkTextWin = (PgSprData *)v69;
      v70 = Font::Get(TITLEBOLD);
      v71 = PgWinText::CreateWin(
              uiLeft,
              uiTop,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v70,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v72 = v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v71;
      v72[122].__vecDelDtor((NiRefObject *)v71, 1u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v73 = TextData::Get(0xF44C3A3Cu);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v73);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v74 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
      v75 = (void *)v74->m_uiWidth;
      pkTexture8 = (void *)v74->m_uiHeight;
      pkTextWin = (PgSprData *)v75;
      v76 = Font::Get(TITLEBOLD);
      v77 = PgWinText::CreateWin(
              uiLeft,
              uiTop,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v76,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v78 = v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v77;
      v78[122].__vecDelDtor((NiRefObject *)v77, 1u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v79 = TextData::Get(0x9BEAF4F4u);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v79);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v80 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademy", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
      v81 = (void *)v80->m_uiWidth;
      pkTexture8 = (void *)v80->m_uiHeight;
      pkTextWin = (PgSprData *)v81;
      v82 = Font::Get(TITLEBOLD);
      v83 = PgWinText::CreateWin(
              uiLeft,
              uiTop,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v82,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v84 = v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v83;
      v84[122].__vecDelDtor((NiRefObject *)v83, 1u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v85 = TextData::Get(0x253B184Cu);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v85);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Wedding", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
      v87 = (void *)v86->m_uiWidth;
      pkTexture8 = (void *)v86->m_uiHeight;
      pkTextWin = (PgSprData *)v87;
      v88 = Font::Get(TITLEBOLD);
      v89 = PgWinText::CreateWin(
              uiLeft,
              uiTop,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v88,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v90 = v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v89;
      v90[122].__vecDelDtor((NiRefObject *)v89, 1u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v91 = TextData::Get(0xC8F53F44u);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v91);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v92 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatch", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
      v93 = (void *)v92->m_uiWidth;
      pkTexture8 = (void *)v92->m_uiHeight;
      pkTextWin = (PgSprData *)v93;
      v94 = Font::Get(TITLEBOLD);
      v95 = PgWinText::CreateWin(
              uiLeft,
              uiTop,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v94,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v96 = v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v95;
      v96[122].__vecDelDtor((NiRefObject *)v95, 1u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v97 = TextData::Get(0x1C4B503Eu);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v97);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PrePageOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextPageNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageClick");
      PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "NextPageOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
      v98 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextInput", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase;
      v99 = (void *)v98->m_pObject->m_uiWidth;
      pkTexture8 = (void *)v98->m_pObject->m_uiHeight;
      pkTextWin = (PgSprData *)v99;
      v100 = Font::Get(MAIN_MENU);
      v101 = PgWinText::CreateWin(
               uiLeft - v14,
               uiTop - v15 + 1,
               (unsigned int)pkTextWin,
               (unsigned int)pkTexture8,
               v100,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v102 = v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = (PgSprData *)v101;
      v102[122].__vecDelDtor((NiRefObject *)v101, 5u);
      pkTexture8 = pkTextWin->baseclass_0.vfptr;
      v103 = TextData::Get(0xE3E7F54Cu);
      (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v103);
      ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
      v104 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextInput01", &uiLeft, &uiTop, pkTexture);
      pkTexture8 = PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v104, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "TextInput01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        v105 = Font::Get(0);
        v106 = EditWin::CreateWin(
                 uiLeft,
                 uiTop + (v105->m_uiDefHeight >> 1),
                 uiWidth,
                 uiHeight,
                 (PgWin *)pkTexture8,
                 NORMAL,
                 0x2Eu,
                 4u,
                 1,
                 0,
                 1);
        NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v106);
        EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Disable");
        v107 = PgWinBut::CreateWin(
                 uiLeft - v14,
                 uiTop - v15,
                 pkTextWin,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0x10u,
                 0,
                 0);
        v108 = pkTextWin;
        v2->m_pkBtnAddComment = v107;
        v109 = v108->m_akHitTester.m_pBase->m_pObject;
        v110 = (void *)v109->m_uiWidth;
        pkTexture8 = (void *)v109->m_uiHeight;
        pkTextWin = (PgSprData *)v110;
        v111 = Font::Get(MAIN_MENU);
        v112 = PgWinText::CreateWin(
                 uiLeft - v14,
                 uiTop - v15 + 1,
                 (unsigned int)pkTextWin,
                 (unsigned int)pkTexture8,
                 v111,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
        v2->m_pkBtnTxt = v112;
        v112->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v112,
          5u);
        pkTexture8 = v2->m_pkBtnTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v113 = TextData::Get(0x818D7FA9u);
        (*(void (__thiscall **)(PgWinText *, char *))((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(
          v2->m_pkBtnTxt,
          v113);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtnTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Click");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Over");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Disable");
        v114 = PgWinBut::CreateWin(
                 uiLeft - v14,
                 uiTop - v15,
                 pkTextWin,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0x11u,
                 0,
                 0);
        v2->m_pkBtnDelComment = v114;
        pkTexture8 = v114;
        v114->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
        v115 = TextData2::Get(0xDDF50F1Cu);
        PgWin::SetToolTipWinText((PgWin *)pkTexture8, v115);
        v116 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
        v117 = (void *)v116->m_uiWidth;
        pkTexture8 = (void *)v116->m_uiHeight;
        pkTextWin = (PgSprData *)v117;
        v118 = Font::Get(MAIN_MENU);
        v119 = PgWinText::CreateWin(
                 uiLeft - v14,
                 uiTop - v15 + 1,
                 (unsigned int)pkTextWin,
                 (unsigned int)pkTexture8,
                 v118,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
        v120 = v119->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkTextWin = (PgSprData *)v119;
        v120[122].__vecDelDtor((NiRefObject *)v119, 5u);
        pkTexture8 = pkTextWin->baseclass_0.vfptr;
        v121 = TextData::Get(0x748473A5u);
        (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v121);
        ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Click");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Over");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Disable");
        v122 = PgWinBut::CreateWin(
                 uiLeft - v14,
                 uiTop - v15,
                 pkTextWin,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0x12u,
                 0,
                 0);
        v123 = pkTextWin;
        v2->m_pkBtnWhisper = v122;
        v124 = v123->m_akHitTester.m_pBase->m_pObject;
        v125 = (void *)v124->m_uiWidth;
        pkTexture8 = (void *)v124->m_uiHeight;
        pkTextWin = (PgSprData *)v125;
        v126 = Font::Get(MAIN_MENU);
        v127 = PgWinText::CreateWin(
                 uiLeft - v14,
                 uiTop - v15 + 1,
                 (unsigned int)pkTextWin,
                 (unsigned int)pkTexture8,
                 v126,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
        v128 = v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkTextWin = (PgSprData *)v127;
        v128[122].__vecDelDtor((NiRefObject *)v127, 5u);
        pkTexture8 = pkTextWin->baseclass_0.vfptr;
        v129 = TextData::Get(0x32648786u);
        (*((void (__thiscall **)(_DWORD, _DWORD))pkTexture8 + 118))(pkTextWin, v129);
        ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn04Click");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn04Over");
        PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Btn04Disable");
        v130 = PgWinBut::CreateWin(
                 uiLeft - v14,
                 uiTop - v15,
                 pkTextWin,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0x13u,
                 0,
                 0);
        v2->m_pkBtnApplyParty = v130;
        pkTexture8 = v130;
        v130->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
        v131 = TextData2::Get(0x404C6D5u);
        PgWin::SetToolTipWinText((PgWin *)pkTexture8, v131);
        v132 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
        v133 = (void *)v132->m_uiWidth;
        pkTexture = (NiSourceTexture *)v132->m_uiHeight;
        pkTexture8 = v133;
        v134 = Font::Get(MAIN_MENU);
        v135 = PgWinText::CreateWin(
                 uiLeft - v14,
                 uiTop - v15 + 1,
                 (unsigned int)pkTexture8,
                 (unsigned int)pkTexture,
                 v134,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
        v135->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v135,
          5u);
        v136 = v135->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v137 = TextData::Get(0x353D9AAAu);
        v136[118].__vecDelDtor((NiRefObject *)v135, (unsigned int)v137);
        v135->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v135,
          0);
        ((void (__thiscall *)(CPartyMatchWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          v2,
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.40000001,
          0.5);
        LOBYTE(v155) = 1;
        SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
        LOBYTE(v155) = 0;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
        v155 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
        return 1;
      }
      LOBYTE(v155) = 1;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    }
    LOBYTE(v155) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v155 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  LOBYTE(v155) = 0;
  if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v13 = spNode.m_pObject;
  v155 = -1;
  if ( !spNode.m_pObject
    || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    || !v13 )
    return 0;
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
  return 0;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00569040) --------------------------------------------------------
void *__thiscall CPartyMatchWin::_scalar_deleting_destructor_(CPartyMatchWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CPartyMatchWin::_CPartyMatchWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00569070) --------------------------------------------------------
void __thiscall PartyWin::ProcessMeInput(PartyWin *this, bool *bHit)
{
  PgWinFrame::ProcessMeInput(&this->baseclass_0, bHit);
}

//----- (00569080) --------------------------------------------------------
void __thiscall PartyWin::ClearInfo(PartyWin *this)
{
  PartyWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkLvTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A4CD3);
  ((void (__stdcall *)(_DWORD))v1->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A4CDF);
  v1->m_pkMemberInfo = 0;
}

//----- (005690C0) --------------------------------------------------------
const char *__thiscall PartyWin::GetMemberName(PartyWin *this)
{
  PartyWin *v1; // esi@1
  const char *result; // eax@2

  v1 = this;
  if ( this->m_pkNameTextWin )
  {
    ((void (*)(void))this->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
    result = (const char *)((int (*)(void))v1->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00569100) --------------------------------------------------------
void __thiscall PartyWin::_PartyWin(PartyWin *this)
{
  PartyWin *v1; // esi@1
  PgWinBut *v2; // edi@1
  PgWinBut *v3; // edi@5
  PopupMenuWin *v4; // edi@9

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyWin::_vftable_;
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_pkDeBufExtendBtn.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_pkBufExtendBtn.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateDBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateDeBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v4 = v1->m_spPopupMenu.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A4ED0: using guessed type int (__stdcall *PartyWin___vftable_)(int uiFlags);
// 9A4EEC: using guessed type int (__thiscall *PartyWin___vftable_)(void *p, char);

//----- (00569250) --------------------------------------------------------
void __thiscall PartyWin::DirectMessage(PartyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  PartyWin *v4; // esi@1
  signed int v5; // eax@2
  AbstateIcon *v6; // ecx@11
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@14
  void (__thiscall *v8)(_DWORD, _DWORD, _DWORD); // eax@19
  int v9; // ebx@19
  signed int v10; // eax@20
  int v11; // eax@22
  const char *v12; // eax@26
  unsigned int v13; // edi@26
  char *v14; // eax@31
  Char *v15; // eax@33
  int v16; // [sp+0h] [bp-Ch]@0
  signed int v17; // [sp+0h] [bp-Ch]@12
  int v18; // [sp+0h] [bp-Ch]@14
  int iSy; // [sp+8h] [bp-4h]@19

  v4 = this;
  if ( iMsgTag == 15 )
  {
    v5 = 0;
    switch ( *(_DWORD *)pvBody )
    {
      case 0x3F7:
        v5 = 1;
        break;
      case 0x3F8:
        v5 = 2;
        break;
      case 0x3F9:
        v5 = 4;
        break;
      case 0x3FA:
        v5 = 8;
        break;
      case 0x3FB:
        v5 = 16;
        break;
      default:
        break;
    }
    if ( *((_BYTE *)pvBody + 4) )
      LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) |= v5;
    else
      LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) &= ~v5;
    v6 = this->m_apkAbstateBufIconWin[3].m_pObject;
    if ( LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) & 0x10 )
    {
      ((void (__stdcall *)(_DWORD, int))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
        0,
        v16);
      v4->m_apkAbstateBufIconWin[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      v17 = 0;
    }
    else
    {
      ((void (__stdcall *)(signed int, int))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
        1,
        v16);
      v4->m_apkAbstateBufIconWin[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      v17 = 1;
    }
    ((void (__cdecl *)(signed int))v4->m_apkAbstateBufIconWin[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v17);
    v7 = v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    if ( LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) & 0xF )
    {
      ((void (__stdcall *)(_DWORD, int))v7)(0, v18);
      v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      ((void (__stdcall *)(signed int, int))v7)(1, v18);
      v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    }
    ((void (*)(void))v4->m_apkAbstateBufIconWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
  }
  if ( pkFrom )
  {
    v8 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)v4 - 58) + 224);
    pvBody = (void *)PgWin::ms_iMsX.x;
    v9 = (int)((char *)v4 - 232);
    iSy = PgWin::ms_iMsY;
    v8((char *)v4 - 232, &pvBody, &iSy);
    if ( (signed int)pvBody >= 0 )
    {
      v10 = (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 144))((char *)v4 - 232);
      if ( (signed int)pvBody < v10 )
      {
        if ( iSy >= 0 )
        {
          v11 = (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 148))((char *)v4 - 232);
          if ( iSy < v11 )
          {
            if ( iMsgTag == 3 )
            {
              if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1]) )
              {
                v14 = (char *)(*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1])
                                               + 484))();
                if ( v14 )
                {
                  if ( strcmp(v14, (const char *)&unk_9A4CF5) )
                  {
                    v15 = CharMgr::GetChar(&g_kCharMgr, v14);
                    if ( v15 )
                      GameFrameWork::TargetCharReq(
                        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
                        v15);
                  }
                }
              }
            }
            else
            {
              if ( iMsgTag == 6 )
              {
                if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1]) )
                {
                  v12 = (const char *)(*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1])
                                                       + 484))();
                  v13 = (unsigned int)v12;
                  if ( v12 )
                  {
                    if ( strcmp(v12, (const char *)&unk_9A4CEB) )
                    {
                      if ( (unsigned __int8)(*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 260))((char *)v4 - 232) )
                        PgFrameWork::AddMsg(
                          LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
                          0x80u,
                          v13,
                          0);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

//----- (005694E0) --------------------------------------------------------
void __thiscall PartyWin::SetBuffUI(PartyWin *this, Char *pkMember, StateType type, int *AbstateNums)
{
  PartyWin *v4; // esi@1
  NiTListItem<AbStateInst *> *v5; // ecx@1
  signed int v6; // eax@1
  AbstateIcon **v7; // edi@2
  AbstateIcon **v8; // esi@2
  AbStateInst *v9; // ebx@5
  int v10; // eax@9
  bool v11; // zf@9
  int v12; // eax@9
  int v13; // eax@18
  int v14; // eax@18
  int v15; // eax@19
  int v16; // eax@22
  int v17; // eax@27
  int v18; // eax@27
  int v19; // eax@28
  int v20; // [sp+4h] [bp-14h]@5
  unsigned __int16 v21; // [sp+4h] [bp-14h]@16
  unsigned __int16 v22; // [sp+4h] [bp-14h]@25
  NiTListItem<AbStateInst *> *kIter; // [sp+8h] [bp-10h]@5
  unsigned __int16 pkInfo; // [sp+Ch] [bp-Ch]@5
  int pkInfoa; // [sp+Ch] [bp-Ch]@6
  GameFrameWork *pkInfob; // [sp+Ch] [bp-Ch]@16
  GameFrameWork *pkInfoc; // [sp+Ch] [bp-Ch]@25
  int v28; // [sp+10h] [bp-8h]@2
  int v29; // [sp+14h] [bp-4h]@2
  int i; // [sp+20h] [bp+8h]@1

  v4 = this;
  v5 = AbStateInfectee::GetAbStateList(&pkMember->baseclass_0)->baseclass_0.baseclass_0.m_pkHead;
  v6 = *AbstateNums;
  i = *AbstateNums;
  if ( v5 )
  {
    v28 = (int)&v4->m_apkAbstateBuffWin[v6];
    v7 = (AbstateIcon **)&v4->m_apkAbstateBufIconWin[v6];
    v29 = (int)&v4->m_apkAbstateDBuffWin[v6];
    v8 = (AbstateIcon **)&v4->m_apkAbstateDeBufIconWin[v6];
    while ( v6 < 15 )
    {
      v9 = v5->m_element;
      kIter = v5->m_pkNext;
      pkInfo = v9->kID;
      v20 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                         + 16))(v9->kID) )
      {
        if ( pkInfo <= *(_WORD *)(v20 + 200) )
        {
          v10 = *(_DWORD *)(v20 + 196);
          v11 = *(_DWORD *)(v10 + 4 * pkInfo) == 0;
          v12 = v10 + 4 * pkInfo;
          if ( v11 )
            pkInfoa = 0;
          else
            pkInfoa = *(_DWORD *)v12;
        }
        else
        {
          pkInfoa = 0;
        }
      }
      else
      {
        pkInfoa = 0;
      }
      if ( *(_BYTE *)(pkInfoa + 526) )
      {
        if ( type != 4 || *(_DWORD *)(pkInfoa + 522) != 4 )
        {
          v16 = *(_DWORD *)(pkInfoa + 522);
          if ( v16 == type )
          {
            if ( v16 != 4 )
            {
              AbstateIcon::SetAbstate(*v7, v9->kID);
              PgWin::SetToolTipWinText(
                &(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                (char *)(pkInfoa + 70));
              (*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
              (*(void (__stdcall **)(signed int))(**(_DWORD **)v28 + 256))(1);
              ++i;
              v29 += 4;
              v28 += 4;
              ++v8;
              ++v7;
              if ( v9->uiSubStateStr )
              {
                v22 = v9->kID;
                pkInfoc = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
                if ( (unsigned __int8)((int (__stdcall *)(_DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(v9->kID) )
                {
                  if ( v22 <= LOWORD(pkInfoc->m_ResList[2].m_eAspect) )
                  {
                    v17 = *(_DWORD *)&pkInfoc->m_ResList[2].m_bCheckAdd;
                    v11 = *(_DWORD *)(v17 + 4 * v22) == 0;
                    v18 = v17 + 4 * v22;
                    if ( !v11 )
                    {
                      v19 = *(_DWORD *)v18;
                      if ( v19 )
                      {
                        if ( *(_BYTE *)(v19 + 288) )
                        {
                          AbstateIcon::SetDuplicate(*v7, v9->uiSubStateStr);
                          ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                          ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                          ((void (__stdcall *)(signed int))(*v7)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
                          (*(void (__stdcall **)(signed int))(**(_DWORD **)v28 + 256))(1);
                          ++i;
                          v29 += 4;
                          ++v8;
                          ++v7;
                          v28 += 4;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else
        {
          AbstateIcon::SetAbstate(*v8, v9->kID);
          PgWin::SetToolTipWinText(
            &(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            (char *)(pkInfoa + 70));
          (*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
          ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v29 + 256))(1);
          ++i;
          v29 += 4;
          v28 += 4;
          ++v8;
          ++v7;
          if ( v9->uiSubStateStr )
          {
            v21 = v9->kID;
            pkInfob = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
            if ( (unsigned __int8)((int (__stdcall *)(_DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(v9->kID) )
            {
              if ( v21 <= LOWORD(pkInfob->m_ResList[2].m_eAspect) )
              {
                v13 = *(_DWORD *)&pkInfob->m_ResList[2].m_bCheckAdd;
                v11 = *(_DWORD *)(v13 + 4 * v21) == 0;
                v14 = v13 + 4 * v21;
                if ( !v11 )
                {
                  v15 = *(_DWORD *)v14;
                  if ( v15 )
                  {
                    if ( *(_BYTE *)(v15 + 288) )
                    {
                      AbstateIcon::SetDuplicate(*v8, v9->uiSubStateStr);
                      ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                      ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                      ((void (__stdcall *)(signed int))(*v8)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
                      (*(void (__stdcall **)(signed int))(**(_DWORD **)v29 + 256))(1);
                      ++i;
                      ++v8;
                      ++v7;
                      v28 += 4;
                      v29 += 4;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if ( !kIter )
      {
        *AbstateNums = i;
        return;
      }
      v5 = kIter;
      v6 = i;
    }
    *AbstateNums = v6;
  }
  else
  {
    *AbstateNums = v6;
  }
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (00569880) --------------------------------------------------------
void __thiscall PartyWin::SetOption(PartyWin *this, unsigned int uiOpt)
{
  PartyWin *v2; // esi@1
  char *v3; // edi@1
  int v4; // edi@4
  int v5; // edi@7
  int v6; // edi@10
  int v7; // edi@13
  PgWinBut *v8; // ecx@16
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@19
  int v10; // [sp+0h] [bp-14h]@0
  signed int v11; // [sp+0h] [bp-14h]@17
  int v12; // [sp+0h] [bp-14h]@19
  DirectUserMsgBody_PopupMenuSetCheckBox kBody; // [sp+Ch] [bp-8h]@1

  v2 = this;
  v3 = (char *)&this->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1015;
  kBody.bCheck = uiOpt & 1;
  if ( *((_DWORD *)v3 + 1) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v3 + 1) + 4))(
      16,
      &kBody,
      v3);
    if ( *((_DWORD *)v3 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v3 + 1) + 16))(
        16,
        &kBody,
        v3);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(*(_DWORD *)v3 + 16))(
    v3,
    16,
    &kBody,
    v3);
  v4 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1016;
  kBody.bCheck = (uiOpt >> 1) & 1;
  if ( *(_DWORD *)(v4 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v4 + 4) + 4))(
      16,
      &kBody,
      v4);
    if ( *(_DWORD *)(v4 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v4 + 4) + 16))(
        16,
        &kBody,
        v4);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v4 + 16))(
    v4,
    16,
    &kBody,
    v4);
  v5 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1017;
  kBody.bCheck = (uiOpt >> 2) & 1;
  if ( *(_DWORD *)(v5 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 4))(
      16,
      &kBody,
      v5);
    if ( *(_DWORD *)(v5 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 16))(
        16,
        &kBody,
        v5);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v5 + 16))(
    v5,
    16,
    &kBody,
    v5);
  v6 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1018;
  kBody.bCheck = (uiOpt >> 3) & 1;
  if ( *(_DWORD *)(v6 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 4))(
      16,
      &kBody,
      v6);
    if ( *(_DWORD *)(v6 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 16))(
        16,
        &kBody,
        v6);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v6 + 16))(
    v6,
    16,
    &kBody,
    v6);
  v7 = (int)&v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1019;
  kBody.bCheck = (uiOpt >> 4) & 1;
  if ( *(_DWORD *)(v7 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 4))(
      16,
      &kBody,
      v7);
    if ( *(_DWORD *)(v7 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 16))(
        16,
        &kBody,
        v7);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v7 + 16))(
    v7,
    16,
    &kBody,
    v7);
  v8 = v2->m_pkDeBufExtendBtn.m_pObject;
  v2->m_uiOption = uiOpt;
  if ( uiOpt & 0x10 )
  {
    ((void (__stdcall *)(_DWORD, int))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      0,
      v10);
    v2->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v11 = 0;
  }
  else
  {
    ((void (__stdcall *)(signed int, int))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      1,
      v10);
    v2->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v11 = 1;
  }
  ((void (__cdecl *)(signed int))v2->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v11);
  v9 = v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  if ( v2->m_uiOption & 0xF )
  {
    ((void (__stdcall *)(_DWORD, int))v9)(0, v12);
    v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  else
  {
    ((void (__stdcall *)(signed int, int))v9)(1, v12);
    v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
  ((void (__thiscall *)(PgWinBut *))v2->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_pkBufExtendBtn.m_pObject);
}

//----- (00569B10) --------------------------------------------------------
void __thiscall PartyWin::OnCommand(PartyWin *this, unsigned int wParam, int lParam)
{
  PartyWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      this->m_uiOption |= 0x10u;
      PartyWin::SetOption(this, this->m_uiOption);
      ((void (__stdcall *)(_DWORD))v3->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v3->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      ((void (__stdcall *)(_DWORD))v3->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
  }
  else
  {
    PartyWin::SetOption(this, this->m_uiOption | 0xF);
    ((void (__stdcall *)(_DWORD))v3->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v3->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    ((void (__stdcall *)(_DWORD))v3->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00569BB0) --------------------------------------------------------
void __thiscall PartyWin::PartyWin(PartyWin *this)
{
  PartyWin *v1; // esi@1
  PopupMenuWin *v2; // edi@1
  int v3; // edi@6
  int v4; // ebx@7
  int v5; // ebx@12
  int v6; // ebx@17
  int v7; // ebx@22
  signed int v8; // [sp+4h] [bp-10h]@6

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PartyWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PartyWin::_vftable_;
  v1->m_spPopupMenu.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateDeBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateDBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_pkBufExtendBtn.m_pObject = 0;
  v1->m_pkDeBufExtendBtn.m_pObject = 0;
  v2 = v1->m_spPopupMenu.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spPopupMenu.m_pObject = 0;
  }
  v1->m_bOpenPopUp = 0;
  v3 = (int)v1->m_apkAbstateDeBufIconWin;
  v8 = 15;
  do
  {
    v4 = *(_DWORD *)(v3 - 60);
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)(v3 - 60) = 0;
    }
    v5 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      *(_DWORD *)v3 = 0;
    }
    v6 = *(_DWORD *)(v3 + 60);
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      *(_DWORD *)(v3 + 60) = 0;
    }
    v7 = *(_DWORD *)(v3 + 120);
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
      *(_DWORD *)(v3 + 120) = 0;
    }
    v3 += 4;
    --v8;
  }
  while ( v8 );
  v1->m_pkMemberInfo = 0;
  v1->m_pkLPBarWin = 0;
  v1->m_pkLPBarStartWin = 0;
  v1->m_pkLPBarEndWin = 0;
  v1->m_pkLPGround = 0;
  v1->m_pkSPGround = 0;
}
// 9A4ED0: using guessed type int (__stdcall *PartyWin___vftable_)(int uiFlags);
// 9A4EEC: using guessed type int (__thiscall *PartyWin___vftable_)(void *p, char);

//----- (00569DC0) --------------------------------------------------------
bool __thiscall PartyWin::Create(PartyWin *this, int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork)
{
  PartyWin *v6; // esi@1
  void *v7; // edi@1
  NiNode *v8; // esi@2
  char *v10; // eax@9
  PgSprData *v11; // eax@10
  int v12; // edi@11
  int v13; // ebx@11
  NiAVObject *v14; // eax@11
  void *v15; // eax@11
  int v16; // eax@13
  NiSourceTexture *v17; // eax@14
  PgSprData *v18; // eax@15
  PgWinSpr *v19; // eax@15
  PgWinSpr *v20; // eax@15
  PgWinSpr *v21; // eax@15
  PgWinSpr *v22; // eax@15
  NiShader *v23; // eax@15
  NiShader *v24; // eax@15
  NiTexture *v25; // eax@15
  PgSprData *v26; // eax@15
  PgWinSpr *v27; // eax@15
  PgSprData *v28; // eax@15
  PgWinSpr *v29; // eax@15
  PgSprData *v30; // eax@15
  PgWinSpr *v31; // eax@15
  PgSprData *v32; // eax@15
  PgWinSpr *v33; // eax@15
  PgSprData *v34; // eax@15
  PgWinSpr *v35; // eax@15
  PgSprData *v36; // eax@15
  PgWinBar *v37; // eax@15
  PgSprData *v38; // eax@15
  PgWinBar *v39; // eax@15
  PgSprData *v40; // eax@15
  PgWinBar *v41; // eax@15
  PgSprData *v42; // eax@15
  PgWinBar *v43; // eax@15
  PgSprData *v44; // eax@18
  PgWinBar *v45; // eax@18
  PgSprData *v46; // eax@19
  PgWinBar *v47; // eax@19
  PgSprData *v48; // eax@19
  PgWinBar *v49; // eax@19
  PgSprData *v50; // eax@19
  PgWinBar *v51; // eax@19
  PgSprData *v52; // eax@19
  PgWinBar *v53; // eax@19
  PgWin *v54; // ST3C_4@19
  PgFont *v55; // eax@19
  PgWinAbbreviateText *v56; // eax@19
  NiSourceTexture *v57; // ST10_4@19
  void *v58; // eax@19
  PgWinSpr *v59; // eax@19
  NiPointer<PgSprData::PgHitTester> *v60; // ecx@19
  void *v61; // eax@19
  PgFont *v62; // eax@19
  PgWinText *v63; // eax@19
  PgSprData *v64; // eax@21
  PgWinSpr *v65; // eax@21
  AbstateIcon *v66; // eax@21
  PgSprData *v67; // eax@21
  PgWinSpr *v68; // eax@21
  AbstateIcon *v69; // eax@21
  PgWinBut *v70; // eax@22
  NiSourceTexture *v71; // ST40_4@22
  PgWinBut *v72; // eax@22
  PgSprData *v73; // eax@22
  NiSourceTexture *v74; // eax@22
  PgSprData *v75; // eax@22
  PgWinSpr *v76; // eax@22
  NiSourceTexture *v77; // eax@22
  PopupMenuWin *v78; // eax@22
  char *v79; // eax@22
  PopupMenuTextCheck *v80; // eax@22
  char *v81; // eax@22
  PopupMenuTextCheck *v82; // eax@22
  char *v83; // eax@22
  PopupMenuTextCheck *v84; // eax@22
  char *v85; // eax@22
  PopupMenuTextCheck *v86; // eax@22
  char *v87; // eax@22
  PopupMenuTextCheck *v88; // eax@22
  NiTexturingProperty *v89; // esi@22
  NiNode *v90; // esi@24
  UIUtil ui; // [sp+0h] [bp-88h]@15
  unsigned int uiWidth; // [sp+14h] [bp-74h]@15
  unsigned int uiHeight; // [sp+18h] [bp-70h]@15
  NiTexturePalette *i; // [sp+1Ch] [bp-6Ch]@7
  NiPointer<NiTexturingProperty> spTexProp; // [sp+20h] [bp-68h]@1
  NiSourceTexture *pkTexture; // [sp+24h] [bp-64h]@1
  PgSprData *pkSprData; // [sp+28h] [bp-60h]@19
  NiPointer<NiNode> spNode; // [sp+2Ch] [bp-5Ch]@1
  int uiTop; // [sp+30h] [bp-58h]@10
  int uiLeft; // [sp+34h] [bp-54h]@10
  char acShapeName[64]; // [sp+38h] [bp-50h]@20
  unsigned int v102; // [sp+78h] [bp-10h]@1
  int v103; // [sp+84h] [bp-4h]@1
  int v104; // [sp+88h] [bp+0h]@1

  v102 = (unsigned int)&v104 ^ __security_cookie;
  spTexProp.m_pObject = (NiTexturingProperty *)pkFrameWork;
  v6 = this;
  spNode.m_pObject = 0;
  v103 = 0;
  v7 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v7;
  if ( !v7 )
    goto LABEL_31;
  i = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v10 = Folder::Merge(&Folder::m_acMenu, "Game\\PtyWin.nif");
  PgUtil::LoadNodeNifFile(v10, &spNode, i);
  if ( !spNode.m_pObject )
    return 0;
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, (NiSourceTexture *)v7);
  if ( !PgWinFrame::Create(
          &v6->baseclass_0,
          iXPos,
          iYPos,
          v11,
          pkParent,
          (PgFrameWork *)spTexProp.m_pObject,
          "PartyMemberWin",
          0) )
  {
LABEL_31:
    v8 = spNode.m_pObject;
    v103 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  v12 = uiLeft;
  v13 = uiTop;
  v14 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EventPanel");
  v15 = NiAVObject::GetProperty(v14, 8);
  spTexProp.m_pObject = (NiTexturingProperty *)v15;
  if ( v15 )
  {
    InterlockedIncrement((volatile LONG *)v15 + 1);
    v15 = spTexProp.m_pObject;
  }
  v16 = **((_DWORD **)v15 + 10);
  LOBYTE(v103) = 1;
  if ( v16 )
  {
    v17 = *(NiSourceTexture **)(v16 + 4);
    if ( v17 )
    {
      v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EventPanel", &uiLeft, &uiTop, v17);
      v19 = PgWinSpr::CreateWin(uiLeft, uiTop, v18, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v19,
        0);
      UIUtil::UIUtil(&ui);
      LOBYTE(v103) = 2;
      UIUtil::SetParent(&ui, &v6->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, v12, v13);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      v20 = UIUtil::CreateSpr(&ui, "SPground", 0);
      v6->m_pkSPGround = v20;
      v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v20,
        0);
      v21 = UIUtil::CreateSpr(&ui, "LPground", 0);
      v6->m_pkLPGround = v21;
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v21,
        0);
      v22 = UIUtil::CreateSpr(&ui, "HPground", 0);
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v22,
        0);
      v23 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("FaceCut_Mask");
      v24 = CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v23);
      v6->m_pkPortrait = MaskedWin::CreateWin(0, 0, (NiTriShape *)v24, &v6->baseclass_0.baseclass_0.baseclass_0);
      v25 = PortraitTextureBuffer::GetBlackTexture();
      MaskedWin::SetBaseTexture(v6->m_pkPortrait, v25);
      v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_Mon", &uiLeft, &uiTop, 0);
      v27 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v26, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v6->m_pkMobPortrait = v27;
      v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v27,
        0);
      v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_OtherMap", &uiLeft, &uiTop, 0);
      v29 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v28, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v6->m_pkOutofMyZone = v29;
      v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v29,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkOutofMyZone->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_LogOff", &uiLeft, &uiTop, 0);
      v31 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v30, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v6->m_pkDisconnected = v31;
      v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v31,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkDisconnected->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_MiniHouse", &uiLeft, &uiTop, 0);
      v33 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v32, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v6->m_pkMiniHouseMode = v33;
      v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v33,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkMiniHouseMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &uiLeft, &uiTop, pkTexture);
      v35 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v34, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v35,
        0);
      v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_Start", &uiLeft, &uiTop, pkTexture);
      v37 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v36, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkHPBarStartWin = (PgWinSpr *)v37;
      v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v37,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_Start", &uiLeft, &uiTop, pkTexture);
      v39 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v38, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkSPBarStartWin = (PgWinSpr *)v39;
      v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v39,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkSPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_End", &uiLeft, &uiTop, pkTexture);
      v41 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v40, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkHPBarEndWin = (PgWinSpr *)v41;
      v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v41,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_End", &uiLeft, &uiTop, pkTexture);
      v43 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v42, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
      v6->m_pkSPBarEndWin = (PgWinSpr *)v43;
      v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v43,
        0);
      ((void (__stdcall *)(_DWORD))v6->m_pkSPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, &uiTop, pkTexture);
        v45 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v44, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v6->m_pkHPBarWin = v45;
        v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v45,
          0);
        if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Fill_SP", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
        {
          v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP", &uiLeft, &uiTop, pkTexture);
          v47 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v46, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
          v6->m_pkSPBarWin = v47;
          v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v47,
            0);
          v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_Start", &uiLeft, &uiTop, pkTexture);
          v49 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v48, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
          v6->m_pkLPBarStartWin = (PgWinSpr *)v49;
          v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v49,
            0);
          ((void (__stdcall *)(_DWORD))v6->m_pkLPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_End", &uiLeft, &uiTop, pkTexture);
          v51 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v50, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
          v6->m_pkLPBarEndWin = (PgWinSpr *)v51;
          v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v51,
            0);
          ((void (__stdcall *)(_DWORD))v6->m_pkLPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP", &uiLeft, &uiTop, pkTexture);
          v53 = PgWinBar::CreateWin(uiLeft - v12, uiTop - v13, v52, &v6->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
          v6->m_pkLPBarWin = v53;
          v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v53,
            0);
          PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CharName", &uiLeft, &uiTop, &uiWidth, &uiHeight);
          v54 = g_pkToolTipWin;
          v55 = Font::Get(0);
          v56 = PgWinAbbreviateText::CreateWin(
                  uiLeft - v12,
                  uiTop - v13,
                  uiWidth,
                  uiHeight,
                  v55,
                  &v6->baseclass_0.baseclass_0.baseclass_0,
                  "2",
                  0,
                  0,
                  1,
                  v54,
                  0x1Eu);
          v57 = pkTexture;
          v6->m_pkNameTextWin = v56;
          v58 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Chief_Party", &uiLeft, &uiTop, v57);
          pkSprData = (PgSprData *)v58;
          v59 = PgWinSpr::CreateWin(
                  uiLeft - v12,
                  uiTop - v13,
                  (PgSprData *)v58,
                  &v6->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
          v6->m_pkPtyChiefWin = v59;
          v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v59,
            0);
          PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Num_Level", &uiLeft, &uiTop, &uiWidth, &uiHeight);
          v60 = pkSprData->m_akHitTester.m_pBase;
          v61 = (void *)v60->m_pObject->m_uiWidth;
          i = (NiTexturePalette *)v60->m_pObject->m_uiHeight;
          pkSprData = (PgSprData *)v61;
          v62 = Font::Get(0);
          v63 = PgWinText::CreateWin(
                  uiLeft - v12,
                  uiTop - v13,
                  (unsigned int)pkSprData,
                  (unsigned int)i,
                  v62,
                  &v6->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
          v6->m_pkLvTextWin = v63;
          v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
            (NiRefObject *)v63,
            5u);
          ((void (__stdcall *)(_DWORD))v6->m_pkLvTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("?");
          ((void (__stdcall *)(_DWORD))v6->m_pkLvTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          i = 0;
          pkSprData = (PgSprData *)v6->m_apkAbstateBufIconWin;
          while ( 1 )
          {
            sprintf(acShapeName, "CharBuffBox%02d");
            if ( !PgUtil::GetTriShapeRect(
                    &spNode.m_pObject->baseclass_0,
                    acShapeName,
                    &uiLeft,
                    &uiTop,
                    &uiWidth,
                    &uiHeight) )
              break;
            v64 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
            v65 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v64, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
            NiPointer<PopupMenuWin>::operator_(
              (NiPointer<NiD3DDefaultShader> *)&pkSprData[1].m_akHitTester.m_pBase,
              (NiD3DDefaultShader *)v65);
            ((void (__stdcall *)(_DWORD))pkSprData[1].m_akHitTester.m_pBase->m_pObject[3].m_uiHeight)(0);
            LODWORD(pkSprData[1].m_akHitTester.m_pBase->m_pObject[3].m_akUVs[0].y)(0);
            v66 = AbstateIcon::CreateWin(
                    uiLeft + 2,
                    uiTop + 2,
                    uiWidth - 4,
                    uiHeight - 4,
                    &v6->baseclass_0.baseclass_0.baseclass_0,
                    0);
            NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)pkSprData, (NiD3DDefaultShader *)v66);
            (*((void (__stdcall **)(_DWORD))pkSprData->baseclass_0.vfptr->__vecDelDtor + 60))(0);
            (*((void (__stdcall **)(_DWORD))pkSprData->baseclass_0.vfptr->__vecDelDtor + 64))(0);
            sprintf(acShapeName, "CharDBuffBox%02d");
            v67 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
            v68 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v67, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
            NiPointer<PopupMenuWin>::operator_(
              (NiPointer<NiD3DDefaultShader> *)&pkSprData[2].m_akGeomData.m_pBase,
              (NiD3DDefaultShader *)v68);
            LODWORD(pkSprData[2].m_akGeomData.m_pBase->m_pObject[2].baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.x)(0);
            ((void (__stdcall *)(_DWORD))pkSprData[2].m_akGeomData.m_pBase->m_pObject[2].baseclass_0.baseclass_0.baseclass_0.m_pkVertex)(0);
            v69 = AbstateIcon::CreateWin(
                    uiLeft + 2,
                    uiTop + 2,
                    uiWidth - 4,
                    uiHeight - 4,
                    &v6->baseclass_0.baseclass_0.baseclass_0,
                    0);
            NiPointer<PopupMenuWin>::operator_(
              (NiPointer<NiD3DDefaultShader> *)&pkSprData->m_akAlphaPropertyData,
              (NiD3DDefaultShader *)v69);
            (*((void (__stdcall **)(_DWORD))pkSprData->m_akAlphaPropertyData.vfptr->__vecDelDtor + 60))(0);
            (*((void (__stdcall **)(_DWORD))pkSprData->m_akAlphaPropertyData.vfptr->__vecDelDtor + 64))(0);
            pkSprData = (PgSprData *)((char *)pkSprData + 4);
            i = (NiTexturePalette *)((char *)i + 1);
            if ( (signed int)i >= 15 )
            {
              pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BuffExtendNor", &uiLeft, &uiTop, pkTexture);
              PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "BuffExtendClick");
              PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "BuffExtendOver");
              v70 = PgWinBut::CreateWin(uiLeft, uiTop, pkSprData, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&v6->m_pkBufExtendBtn,
                (NiD3DDefaultShader *)v70);
              PgWin::SetToolTipWinText(&v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0, "Open");
              v71 = pkTexture;
              v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DeBuffExtendNor", &uiLeft, &uiTop, v71);
              PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "DeBuffExtendClick");
              PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "DeBuffExtendOver");
              v72 = PgWinBut::CreateWin(uiLeft, uiTop, pkSprData, &v6->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&v6->m_pkDeBufExtendBtn,
                (NiD3DDefaultShader *)v72);
              PgWin::SetToolTipWinText(&v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0, "Open");
              v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              ((void (__stdcall *)(_DWORD))v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              ((void (__stdcall *)(_DWORD))v6->m_pkBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v6->m_pkDeBufExtendBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              v73 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel_job", &uiLeft, &uiTop, pkTexture);
              PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v73, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
              v74 = MenuTexMgr::GetTexture(0x12u);
              v75 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Char_Job", &uiLeft, &uiTop, v74);
              v76 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v75, &v6->baseclass_0.baseclass_0.baseclass_0, 0, 0);
              v6->m_pkPtyCharJob = v76;
              v76->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              v77 = MenuTexMgr::GetTexture(1u);
              v78 = PopupMenuWin::CreateWin(v77, 4u, 4u, 0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&v6->m_spPopupMenu,
                (NiD3DDefaultShader *)v78);
              v6->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
                &v6->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
                &v6->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
              PopupMenuWin::Clear(v6->m_spPopupMenu.m_pObject);
              v79 = TextData2::Get(0x3569283Du);
              v80 = PopupMenuTextCheck::CreateWin(v79, 0, 0, 0, 0, 0);
              v80->baseclass_0.m_ePopupMenuID = 1015;
              PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v80->baseclass_0);
              v81 = TextData2::Get(0x356C3181u);
              v82 = PopupMenuTextCheck::CreateWin(v81, 0, 0, 0, 0, 0);
              v82->baseclass_0.m_ePopupMenuID = 1016;
              PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v82->baseclass_0);
              v83 = TextData2::Get(0x3566338Fu);
              v84 = PopupMenuTextCheck::CreateWin(v83, 0, 0, 0, 0, 0);
              v84->baseclass_0.m_ePopupMenuID = 1017;
              PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v84->baseclass_0);
              v85 = TextData2::Get(0xDB1D2246u);
              v86 = PopupMenuTextCheck::CreateWin(v85, 0, 0, 0, 0, 0);
              v86->baseclass_0.m_ePopupMenuID = 1018;
              PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v86->baseclass_0);
              v87 = TextData2::Get(0xDE13DBE2u);
              v88 = PopupMenuTextCheck::CreateWin(v87, 0, 0, 0, 0, 0);
              v88->baseclass_0.m_ePopupMenuID = 1019;
              PopupMenuWin::AddMenu(v6->m_spPopupMenu.m_pObject, &v88->baseclass_0);
              PopupMenuWin::FinishMenu(v6->m_spPopupMenu.m_pObject, 0);
              ((void (__stdcall *)(_DWORD))v6->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              PartyWin::SetOption(v6, 0xFFFFFFFFu);
              v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                (NiRefObject *)v6,
                1u);
              v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
                (NiRefObject *)v6,
                0);
              LOBYTE(v103) = 1;
              UIUtil::_UIUtil(&ui);
              v89 = spTexProp.m_pObject;
              LOBYTE(v103) = 0;
              if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
                v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v89, 1u);
              v90 = spNode.m_pObject;
              v103 = -1;
              if ( spNode.m_pObject
                && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
                && v90 )
                v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v90, 1u);
              return 1;
            }
          }
        }
      }
      LOBYTE(v103) = 1;
      UIUtil::_UIUtil(&ui);
    }
  }
  LOBYTE(v103) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
  v103 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0056AC60) --------------------------------------------------------
void __thiscall PartyWin::UpdateMeWin(PartyWin *this, float fCurTime)
{
  PartyWin *v2; // esi@1
  int v3; // edi@4
  signed int v4; // ebx@4
  PartyMemberInfo *v5; // eax@6
  _BYTE v6[20]; // ST00_20@7
  Char *v7; // eax@7
  Char *v8; // edi@7
  bool v9; // zf@8
  PartyMemberInfo *v10; // eax@18
  _BYTE v11[20]; // ST00_20@21
  Char *v12; // eax@21
  Char *v13; // edi@21
  PgSpr *v14; // ebx@25
  NiTexture *v15; // eax@25
  NiTexture *v16; // eax@26
  int v17; // [sp+0h] [bp-14h]@0
  signed int v18; // [sp+0h] [bp-14h]@26
  signed int v19; // [sp+0h] [bp-14h]@27
  int DBufNum; // [sp+Ch] [bp-8h]@3
  int BufNum; // [sp+10h] [bp-4h]@3

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    if ( v2->m_bOpenPopUp )
    {
      ((void (__thiscall *)(PartyWin *, int *, int *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
        v2,
        &DBufNum,
        &BufNum);
      ((void (__stdcall *)(int, int))v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        DBufNum,
        BufNum);
      PgWinMgr::OpenPopupWin(
        &Pgg_kWinMgr,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        &v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      v2->m_bOpenPopUp = 0;
    }
    v3 = (int)v2->m_apkAbstateBufIconWin;
    v4 = 15;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 248))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 60) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 60) + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 60) + 248))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 120) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 180) + 256))(0);
      AbstateIcon::ClearDuplicateText(*(AbstateIcon **)v3);
      AbstateIcon::ClearDuplicateText(*(AbstateIcon **)(v3 + 60));
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v5 = v2->m_pkMemberInfo;
    if ( v5 )
    {
      *(_DWORD *)v6 = *(_DWORD *)&v5->m_kCharID.n5_name[0];
      *(_QWORD *)&v6[4] = *(_QWORD *)&v5->m_kCharID.n5_name[4];
      *(_QWORD *)&v6[12] = *(_QWORD *)&v5->m_kCharID.n5_name[12];
      v7 = CharMgr::GetUserChar(&g_kCharMgr, *(Name5 *)v6);
      v8 = v7;
      if ( v7 )
      {
        AbStateInfectee::GetAbStateList(&v7->baseclass_0);
        v9 = (v2->m_uiOption & 1) == 0;
        DBufNum = 0;
        BufNum = 0;
        if ( !v9 )
          PartyWin::SetBuffUI(v2, v8, Skill, &BufNum);
        if ( v2->m_uiOption & 2 )
          PartyWin::SetBuffUI(v2, v8, Scroll, &BufNum);
        if ( v2->m_uiOption & 4 )
          PartyWin::SetBuffUI(v2, v8, Potion, &BufNum);
        if ( v2->m_uiOption & 8 )
          PartyWin::SetBuffUI(v2, v8, 0, &BufNum);
        if ( v2->m_uiOption & 0x10 )
          PartyWin::SetBuffUI(v2, v8, Debuff, &DBufNum);
      }
      v10 = v2->m_pkMemberInfo;
      if ( !v10->m_ucStatus )
      {
        ((void (__stdcall *)(_DWORD))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v2->m_pkDisconnected->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkOutofMyZone->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v2->m_pkMiniHouseMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v2->m_pkMiniHouseMode,
          0);
        return;
      }
      if ( !v10->m_bShow
        || (*(_DWORD *)v11 = *(_DWORD *)&v10->m_kCharID.n5_name[0],
            *(_QWORD *)&v11[4] = *(_QWORD *)&v10->m_kCharID.n5_name[4],
            *(_QWORD *)&v11[12] = *(_QWORD *)&v10->m_kCharID.n5_name[12],
            v12 = CharMgr::GetUserChar(&g_kCharMgr, *(Name5 *)v11),
            (v13 = v12) == 0) )
      {
        ((void (__stdcall *)(_DWORD, int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          0,
          v17);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkDisconnected->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v19 = 1;
LABEL_30:
        ((void (__stdcall *)(signed int))v2->m_pkOutofMyZone->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v19);
        goto LABEL_31;
      }
      if ( (unsigned __int8)((int (__thiscall *)(Char *))v12->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v12) )
      {
        ((void (__stdcall *)(_DWORD, int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          0,
          v17);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkDisconnected->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkOutofMyZone->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
LABEL_31:
        ((void (__thiscall *)(PgWinSpr *))v2->m_pkMiniHouseMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_pkMiniHouseMode);
        return;
      }
      if ( (unsigned __int8)((int (__thiscall *)(Char *))v13->baseclass_0.vfptr[20].SetAbStateProperty)(v13) )
      {
        v14 = v2->m_pkMobPortrait->m_spSpr.m_pObject;
        v15 = PortraitTextureBuffer::GetOtherCharPortrait(v13);
        PgSpr::SetTexture(v14, v15);
        ((void (__cdecl *)(_DWORD))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkDisconnected->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkOutofMyZone->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMiniHouseMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        return;
      }
      v16 = PortraitTextureBuffer::GetOtherCharPortrait(v13);
      MaskedWin::SetBaseTexture(v2->m_pkPortrait, v16);
      ((void (__stdcall *)(signed int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v18 = 0;
    }
    else
    {
      ((void (__stdcall *)(_DWORD, _DWORD))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        0,
        v17);
      ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v18 = 1;
    }
    ((void (__stdcall *)(signed int))v2->m_pkDisconnected->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v18);
    v19 = 0;
    goto LABEL_30;
  }
}

//----- (0056B090) --------------------------------------------------------
void __thiscall PartyWin::SetInfo(PartyWin *this, PartyMemberInfo *pkInfo)
{
  int v2; // ebx@1
  PartyWin *v3; // esi@1
  PgWinText *v4; // ecx@2
  int v5; // eax@3
  int v6; // edx@3
  int v7; // ecx@3
  int v8; // eax@3
  PgWinAbbreviateText *v9; // ecx@3
  PgWinBar *v10; // ecx@6
  int v11; // eax@9
  int v12; // eax@13
  PgWinBar *v13; // ecx@16
  int v14; // eax@19
  PgWinSpr *v15; // ecx@21
  PgWinBar *v16; // ecx@23
  int v17; // eax@26
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // eax@32
  char v19; // al@47
  unsigned int v20; // ebx@54
  int v21; // eax@61
  int v22; // edi@61
  unsigned int v23; // eax@61
  double v24; // st7@61
  int (__thiscall *v25)(_DWORD); // eax@61
  unsigned int v26; // eax@61
  double v27; // st7@61
  PgSpr *v28; // eax@61
  PgSprData *v29; // eax@62
  NiScreenElementsData *v30; // edi@64
  void *v31; // eax@64
  char *v32; // eax@65
  signed int v33; // [sp-4h] [bp-5Ch]@2
  D3DXCOLOR *v34; // [sp-4h] [bp-5Ch]@4
  int v35; // [sp-4h] [bp-5Ch]@7
  int v36; // [sp-4h] [bp-5Ch]@11
  int v37; // [sp-4h] [bp-5Ch]@17
  signed int v38; // [sp-4h] [bp-5Ch]@21
  int v39; // [sp-4h] [bp-5Ch]@24
  int v40; // [sp-4h] [bp-5Ch]@32
  int v41; // [sp-4h] [bp-5Ch]@43
  float fy; // [sp+Ch] [bp-4Ch]@61
  NiPoint2 kValue; // [sp+10h] [bp-48h]@64
  float cHeightInTex; // [sp+18h] [bp-40h]@61
  float fx; // [sp+1Ch] [bp-3Ch]@13
  Name5 kMasterID; // [sp+20h] [bp-38h]@35
  char acName[21]; // [sp+34h] [bp-24h]@3
  float acTemp[2]; // [sp+4Ch] [bp-Ch]@6
  unsigned int v49; // [sp+54h] [bp-4h]@1
  int v50; // [sp+58h] [bp+0h]@1

  v49 = (unsigned int)&v50 ^ __security_cookie;
  v2 = 0;
  v3 = this;
  if ( !pkInfo )
  {
    v4 = this->m_pkLvTextWin;
    v3->m_pkMemberInfo = 0;
    ((void (__stdcall *)(_UNKNOWN *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A4CD3);
    ((void (__stdcall *)(_UNKNOWN *))v3->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A4CDF);
    v3->m_pkMemberInfo = 0;
    v33 = 0;
    goto LABEL_68;
  }
  this->m_pkMemberInfo = pkInfo;
  v5 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[0];
  v6 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[8];
  *(_DWORD *)&acName[4] = *(_DWORD *)&pkInfo->m_kCharID.n5_name[4];
  v7 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[16];
  *(_DWORD *)acName = v5;
  v8 = *(_DWORD *)&pkInfo->m_kCharID.n5_name[12];
  *(_DWORD *)&acName[16] = v7;
  v9 = v3->m_pkNameTextWin;
  *(_DWORD *)&acName[8] = v6;
  *(_DWORD *)&acName[12] = v8;
  acName[20] = 0;
  ((void (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acName);
  if ( pkInfo->m_ucStatus )
    v34 = &Color::m_kDxWhiteColor;
  else
    v34 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
  ((void (__stdcall *)(D3DXCOLOR *))v3->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v34);
  ((void (__stdcall *)(signed int))v3->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v10 = v3->m_pkHPBarWin;
  acTemp[0] = (double)pkInfo->m_iMaxHP;
  v10->m_fCurValue = (double)pkInfo->m_iHP;
  v10->m_fMaxValue = acTemp[0];
  PgWinBar::OnChangeValue(v10);
  v35 = pkInfo->m_iHP > 0;
  ((void (__stdcall *)(int))v3->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v35);
  v11 = pkInfo->m_iMaxHP;
  v36 = pkInfo->m_iHP == v11 && v11;
  ((void (__stdcall *)(int))v3->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v36);
  v12 = pkInfo->m_byChrClass;
  LOBYTE(fx) = 0;
  switch ( v12 )
  {
    case 26:
    case 27:
      LOBYTE(fx) = 1;
      break;
    default:
      break;
  }
  ((void (__stdcall *)(_DWORD))v3->m_pkLPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(LODWORD(fx));
  LOBYTE(v2) = LOBYTE(fx) == 0;
  ((void (__stdcall *)(int))v3->m_pkSPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
  if ( !LOBYTE(fx) )
  {
    ((void (__stdcall *)(_DWORD))v3->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkLPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkLPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(signed int))v3->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v16 = v3->m_pkSPBarWin;
    acTemp[0] = (double)pkInfo->m_iMaxSP;
    v16->m_fCurValue = (double)pkInfo->m_iSP;
    v16->m_fMaxValue = acTemp[0];
    PgWinBar::OnChangeValue(v16);
    v39 = pkInfo->m_iSP > 0;
    ((void (__stdcall *)(int))v3->m_pkSPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v39);
    v17 = pkInfo->m_iMaxSP;
    if ( pkInfo->m_iSP == v17 && v17 )
    {
      v15 = v3->m_pkSPBarEndWin;
      v38 = 1;
      goto LABEL_31;
    }
    v15 = v3->m_pkSPBarEndWin;
LABEL_30:
    v38 = 0;
    goto LABEL_31;
  }
  ((void (__stdcall *)(int))v3->m_pkSPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
  ((void (__stdcall *)(int))v3->m_pkSPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
  ((void (__stdcall *)(int))v3->m_pkSPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2);
  ((void (__stdcall *)(_DWORD))v3->m_pkLPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(LODWORD(fx));
  v13 = v3->m_pkLPBarWin;
  acTemp[0] = (double)pkInfo->m_iMaxLP;
  v13->m_fCurValue = (double)pkInfo->m_iLP;
  v13->m_fMaxValue = acTemp[0];
  PgWinBar::OnChangeValue(v13);
  v37 = pkInfo->m_iLP > 0;
  ((void (__stdcall *)(int))v3->m_pkLPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v37);
  v14 = pkInfo->m_iMaxLP;
  if ( pkInfo->m_iLP != v14 || !v14 )
  {
    v15 = v3->m_pkLPBarEndWin;
    goto LABEL_30;
  }
  v15 = v3->m_pkLPBarEndWin;
  v38 = 1;
LABEL_31:
  ((void (__stdcall *)(signed int))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v38);
  if ( pkInfo->m_bShow )
  {
    _itoa(pkInfo->m_iLv, (char *)acTemp, 10);
    v18 = v3->m_pkLvTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v40 = (int)acTemp;
  }
  else
  {
    v18 = v3->m_pkLvTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v40 = (int)"?";
  }
  ((void (__stdcall *)(int))v18)(v40);
  if ( RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
  {
    v41 = *(_QWORD *)&g_kRaidinfo.m_kRaidLeaderID.n5_name[0] == *(_QWORD *)&pkInfo->m_kCharID.n5_name[0]
       && *(_QWORD *)&g_kRaidinfo.m_kRaidLeaderID.n5_name[8] == *(_QWORD *)&pkInfo->m_kCharID.n5_name[8]
       && *(_DWORD *)&g_kRaidinfo.m_kRaidLeaderID.n5_name[16] == *(_DWORD *)&pkInfo->m_kCharID.n5_name[16];
    ((void (__stdcall *)(int))v3->m_pkPtyChiefWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v41);
  }
  else
  {
    Party::GetPartyMasterID(&g_kParty, &kMasterID);
    if ( *(_QWORD *)&kMasterID != *(_QWORD *)&pkInfo->m_kCharID.n5_name[0]
      || *(_QWORD *)&kMasterID.n5_name[8] != *(_QWORD *)&pkInfo->m_kCharID.n5_name[8]
      || *(_DWORD *)&kMasterID.n5_name[16] != *(_DWORD *)&pkInfo->m_kCharID.n5_name[16] )
      ((void (__stdcall *)(_DWORD))v3->m_pkPtyChiefWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    else
      ((void (__stdcall *)(signed int))v3->m_pkPtyChiefWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
  switch ( pkInfo->m_byChrClass )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v19 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v19 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v19 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v19 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v19 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v19 = 26;
      break;
    default:
      v19 = 0;
      break;
  }
  v20 = (unsigned __int8)v19;
  fx = 0.0;
  switch ( v19 )
  {
    case 1:
      fx = 0.0;
      break;
    case 6:
      LODWORD(fx) = 1;
      break;
    case 0x10:
      LODWORD(fx) = 2;
      break;
    case 0xB:
      LODWORD(fx) = 3;
      break;
    case 0x15:
      LODWORD(fx) = 4;
      break;
    case 0x1A:
      LODWORD(fx) = 5;
      break;
    default:
      break;
  }
  v21 = ((int (*)(void))v3->m_pkPtyCharJob->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
  v22 = v21;
  v23 = (*(int (__thiscall **)(int))(*(_DWORD *)v21 + 60))(v21);
  LODWORD(acTemp[0]) = v23;
  v24 = 16.0 / (double)v23;
  v25 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v22 + 64);
  acTemp[0] = v24;
  v26 = v25(v22);
  LODWORD(cHeightInTex) = v26;
  v27 = (double)v26;
  v28 = v3->m_pkPtyCharJob->m_spSpr.m_pObject;
  cHeightInTex = 16.0 / v27;
  fx = (double)SLODWORD(fx) * acTemp[0];
  fy = cHeightInTex + cHeightInTex;
  if ( v28 )
    v29 = v28->m_spSprData.m_pObject;
  else
    v29 = 0;
  v30 = v29->m_akGeomData.m_pBase->m_pObject;
  kValue.x = fx;
  kValue.y = cHeightInTex + cHeightInTex;
  NiScreenElementsData::SetTexture(v30, 0, 0, 0, &kValue);
  kValue.x = fx;
  cHeightInTex = fy + cHeightInTex;
  kValue.y = cHeightInTex;
  NiScreenElementsData::SetTexture(v30, 0, 1, 0, &kValue);
  acTemp[0] = fx + acTemp[0];
  kValue.x = acTemp[0];
  kValue.y = cHeightInTex;
  NiScreenElementsData::SetTexture(v30, 0, 2, 0, &kValue);
  kValue.x = acTemp[0];
  kValue.y = fy;
  NiScreenElementsData::SetTexture(v30, 0, 3, 0, &kValue);
  v31 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), v20);
  if ( v31 )
    v32 = (char *)v31 + 21;
  else
    v32 = &byte_9788EB;
  PgWin::SetToolTipWinText(&v3->m_pkPtyCharJob->baseclass_0, v32);
  v33 = 1;
LABEL_68:
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v3,
    v33);
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (0056B700) --------------------------------------------------------
PartyWin *__cdecl PartyWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent, NiNode *pkNode, PgFrameWork *pkFrameWork)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  PartyWin *v9; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x2B4u);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    PartyWin::PartyWin((PartyWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( PartyWin::Create((PartyWin *)v7, iXPos, iYPos, pkParent, pkNode, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (PartyWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    }
    v9 = 0;
  }
  return v9;
}

//----- (0056B840) --------------------------------------------------------
void *__thiscall PartyWin::_vector_deleting_destructor_(PartyWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PartyWin::_PartyWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0056B870) --------------------------------------------------------
void __thiscall PartyWinInterface::PartyWinInterface(PartyWinInterface *this)
{
  this->isMiniPartyWinShow = 0;
  this->m_apkPartyWin[0] = 0;
  this->m_apkPartyWin[1] = 0;
  this->m_apkPartyWin[2] = 0;
  this->m_apkPartyWin[3] = 0;
  this->m_apkMiniPartyWin[0] = 0;
  this->m_apkMiniPartyWin[1] = 0;
  this->m_apkMiniPartyWin[2] = 0;
  this->m_apkMiniPartyWin[3] = 0;
}

//----- (0056B8A0) --------------------------------------------------------
void __thiscall PartyWinInterface::CreatePartyWin(PartyWinInterface *this, PgFrameWork *pkFrameWork)
{
  unsigned int v2; // esi@1
  PartyWinInterface *v3; // edi@1
  int v4; // ebx@1
  PartyMemberInfo *v5; // eax@4
  int offsetX; // [sp+18h] [bp-10Ch]@1
  int m_uiMemberWinHeight; // [sp+1Ch] [bp-108h]@1
  char partyWinName[255]; // [sp+20h] [bp-104h]@4
  unsigned int v9; // [sp+120h] [bp-4h]@1
  int v10; // [sp+124h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = 0;
  v3 = this;
  m_uiMemberWinHeight = 0;
  offsetX = 0;
  v4 = 0;
  do
  {
    v3->m_apkPartyWin[v2] = PartyWin::CreateWin(offsetX, v4, 0, 0, pkFrameWork);
    if ( !v2 )
    {
      ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v3->m_apkPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.0,
        0.33000001);
      offsetX = ((int (*)(void))v3->m_apkPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
      v4 = ((int (*)(void))v3->m_apkPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      m_uiMemberWinHeight = ((int (*)(void))v3->m_apkPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    }
    v4 += m_uiMemberWinHeight;
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_apkPartyWin[v2]->baseclass_0.baseclass_0.baseclass_0);
    sprintf(partyWinName, "PartyWinName%i");
    NiObjectNET::SetName(
      &v3->m_apkPartyWin[v2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      partyWinName);
    v5 = Party::GetMemberInfo(&g_kParty, v2);
    PartyWin::SetInfo(v3->m_apkPartyWin[v2++], v5);
  }
  while ( (signed int)v2 < 4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (0056B9D0) --------------------------------------------------------
void __thiscall PartyWinInterface::DestoryPartyWin(PartyWinInterface *this)
{
  PgWin **v1; // esi@1
  signed int v2; // edi@1

  v1 = (PgWin **)this->m_apkPartyWin;
  v2 = 4;
  do
  {
    if ( *v1 )
    {
      MachineOpt::RegistereWinPostion(*v1);
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, *v1);
      *v1 = 0;
    }
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (0056BA10) --------------------------------------------------------
void __thiscall PartyWinInterface::CreateMiniPartyWin(PartyWinInterface *this, PgFrameWork *pkFrameWork)
{
  unsigned int v2; // esi@1
  PartyWinInterface *v3; // edi@1
  int v4; // ebx@1
  PartyMemberInfo *v5; // eax@4
  int offsetX; // [sp+18h] [bp-10Ch]@1
  int m_uiMemberWinHeight; // [sp+1Ch] [bp-108h]@1
  char miniPartyWinName[255]; // [sp+20h] [bp-104h]@4
  unsigned int v9; // [sp+120h] [bp-4h]@1
  int v10; // [sp+124h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = 0;
  v3 = this;
  m_uiMemberWinHeight = 0;
  offsetX = 0;
  v4 = 0;
  do
  {
    v3->m_apkMiniPartyWin[v2] = MiniPartyWin::CreateWin(offsetX, v4, 0, 0, pkFrameWork);
    if ( !v2 )
    {
      ((void (__stdcall *)(unsigned int, unsigned int, _DWORD, _DWORD))v3->m_apkMiniPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.0,
        0.33000001);
      offsetX = ((int (*)(void))v3->m_apkMiniPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
      v4 = ((int (*)(void))v3->m_apkMiniPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      m_uiMemberWinHeight = ((int (*)(void))v3->m_apkMiniPartyWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    }
    v4 += m_uiMemberWinHeight;
    sprintf(miniPartyWinName, "MiniPartyWinName%i");
    NiObjectNET::SetName(
      &v3->m_apkMiniPartyWin[v2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      miniPartyWinName);
    v5 = Party::GetMemberInfo(&g_kParty, v2);
    MiniPartyWin::SetInfo(v3->m_apkMiniPartyWin[v2++], v5);
  }
  while ( (signed int)v2 < 4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (0056BB30) --------------------------------------------------------
void __thiscall PartyWinInterface::DestoryMiniPartyWin(PartyWinInterface *this)
{
  PgWin **v1; // esi@1
  signed int v2; // edi@1

  v1 = (PgWin **)this->m_apkMiniPartyWin;
  v2 = 4;
  do
  {
    if ( *v1 )
    {
      MachineOpt::RegistereWinPostion(*v1);
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, *v1);
      *v1 = 0;
    }
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (0056BB70) --------------------------------------------------------
void __thiscall PartyWinInterface::SetPartyWinMachineOpt(PartyWinInterface *this)
{
  PgWin **v1; // esi@1
  signed int v2; // edi@1

  v1 = (PgWin **)this->m_apkPartyWin;
  v2 = 4;
  do
  {
    if ( *v1 )
      MachineOpt::SetWinPostion(*v1);
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (0056BBA0) --------------------------------------------------------
void __thiscall PartyWinInterface::SetMiniPartyWinMachineOpt(PartyWinInterface *this)
{
  PgWin **v1; // esi@1
  signed int v2; // edi@1

  v1 = (PgWin **)this->m_apkMiniPartyWin;
  v2 = 4;
  do
  {
    if ( *v1 )
      MachineOpt::SetWinPostion(*v1);
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (0056BBD0) --------------------------------------------------------
void __thiscall PartyWinInterface::Create(PartyWinInterface *this, PgFrameWork *pkFrameWork)
{
  PartyWinInterface *v2; // esi@1

  v2 = this;
  PartyWinInterface::CreatePartyWin(this, pkFrameWork);
  PartyWinInterface::CreateMiniPartyWin(v2, pkFrameWork);
}

//----- (0056BBF0) --------------------------------------------------------
void __thiscall PartyWinInterface::Destory(PartyWinInterface *this)
{
  PartyWinInterface *v1; // esi@1

  v1 = this;
  PartyWinInterface::DestoryPartyWin(this);
  PartyWinInterface::DestoryMiniPartyWin(v1);
}

//----- (0056BC00) --------------------------------------------------------
void __thiscall PartyWinInterface::UpdatePartyWin(PartyWinInterface *this)
{
  PartyWin **v1; // edi@1
  PartyWin **v2; // esi@2
  signed int v3; // ebx@2
  unsigned int v4; // ebx@4
  unsigned int v5; // esi@4
  PartyMemberInfo *v6; // eax@5

  v1 = this->m_apkPartyWin;
  if ( this->m_apkPartyWin[0] )
  {
    v2 = this->m_apkPartyWin;
    v3 = 4;
    do
    {
      PartyWin::SetInfo(*v2, 0);
      ++v2;
      --v3;
    }
    while ( v3 );
    v4 = g_kParty.m_uiTotalMember;
    v5 = 0;
    if ( g_kParty.m_uiTotalMember )
    {
      do
      {
        v6 = Party::GetMemberInfo(&g_kParty, v5);
        PartyWin::SetInfo(*v1, v6);
        ++v5;
        ++v1;
      }
      while ( v5 < v4 );
    }
  }
}

//----- (0056BC50) --------------------------------------------------------
void __thiscall PartyWinInterface::UpdateMiniPartyWin(PartyWinInterface *this)
{
  MiniPartyWin **v1; // edi@1
  MiniPartyWin **v2; // esi@1
  signed int v3; // ebx@1
  unsigned int v4; // ebx@3
  unsigned int v5; // esi@3
  PartyMemberInfo *v6; // eax@4

  v1 = this->m_apkMiniPartyWin;
  v2 = this->m_apkMiniPartyWin;
  v3 = 4;
  do
  {
    MiniPartyWin::SetInfo(*v2, 0);
    ++v2;
    --v3;
  }
  while ( v3 );
  v4 = g_kParty.m_uiTotalMember;
  v5 = 0;
  if ( g_kParty.m_uiTotalMember )
  {
    do
    {
      v6 = Party::GetMemberInfo(&g_kParty, v5);
      MiniPartyWin::SetInfo(*v1, v6);
      ++v5;
      ++v1;
    }
    while ( v5 < v4 );
  }
}

//----- (0056BCA0) --------------------------------------------------------
void __thiscall PartyWinInterface::SetWindowCull(PartyWinInterface *this, bool bIsCull)
{
  char *v2; // ecx@3
  unsigned int v3; // esi@5
  int v4; // eax@6
  char *v5; // ecx@12
  unsigned int v6; // esi@14
  int v7; // eax@15

  if ( g_kParty.m_uiTotalMember )
  {
    if ( this->isMiniPartyWinShow )
    {
      v2 = (char *)this->m_apkMiniPartyWin;
      if ( *(_DWORD *)v2 && g_kParty.m_uiTotalMember )
      {
        v3 = g_kParty.m_uiTotalMember;
        do
        {
          v4 = *(_DWORD *)v2;
          if ( *(_DWORD *)v2 )
          {
            if ( bIsCull )
              *(_WORD *)(v4 + 28) |= 1u;
            else
              *(_WORD *)(v4 + 28) &= 0xFFFEu;
          }
          v2 += 4;
          --v3;
        }
        while ( v3 );
      }
    }
    else
    {
      v5 = (char *)this->m_apkPartyWin;
      if ( *(_DWORD *)v5 && g_kParty.m_uiTotalMember )
      {
        v6 = g_kParty.m_uiTotalMember;
        do
        {
          v7 = *(_DWORD *)v5;
          if ( *(_DWORD *)v5 )
          {
            if ( bIsCull )
              *(_WORD *)(v7 + 28) |= 1u;
            else
              *(_WORD *)(v7 + 28) &= 0xFFFEu;
          }
          v5 += 4;
          --v6;
        }
        while ( v6 );
      }
    }
  }
}

//----- (0056BD30) --------------------------------------------------------
void __thiscall PartyWinInterface::Update(PartyWinInterface *this)
{
  PartyWinInterface *v1; // esi@1

  v1 = this;
  PartyWinInterface::UpdatePartyWin(this);
  PartyWinInterface::UpdateMiniPartyWin(v1);
}

//----- (0056BD40) --------------------------------------------------------
void __thiscall PartyWinInterface::TogglePartyWin(PartyWinInterface *this)
{
  PartyWinInterface *v1; // ebx@1
  signed int v2; // edi@3
  int v3; // esi@4
  PgWin **v4; // esi@7
  PartyWin **v5; // esi@10
  bool v6; // zf@10
  signed int v7; // edi@11
  unsigned int v8; // ebx@13
  unsigned int v9; // esi@13
  PartyWin **v10; // edi@14
  PartyMemberInfo *v11; // eax@15
  signed int v12; // [sp+4h] [bp-8h]@2
  PartyWinInterface *v13; // [sp+8h] [bp-4h]@1

  v1 = this;
  v13 = this;
  if ( this->m_apkPartyWin[0] )
  {
    v12 = 4;
    do
    {
      v2 = 4;
      if ( v1->isMiniPartyWinShow )
      {
        v3 = (int)v1->m_apkPartyWin;
        do
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, *(PgWin **)(v3 + 16));
          PgWinMgr::ShowWin(&Pgg_kWinMgr, *(PgWin **)v3);
          PartyWin::SetOption(*(PartyWin **)v3, *(_DWORD *)(*(_DWORD *)(v3 + 16) + 344));
          v3 += 4;
          --v2;
        }
        while ( v2 );
      }
      else
      {
        v4 = (PgWin **)v1->m_apkMiniPartyWin;
        do
        {
          PgWinMgr::CloseWin(&Pgg_kWinMgr, *(v4 - 4));
          PgWinMgr::ShowWin(&Pgg_kWinMgr, *v4);
          MiniPartyWin::SetOption(
            (MiniPartyWin *)*v4,
            LODWORD((*(v4 - 4))[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][1]));
          ++v4;
          --v2;
        }
        while ( v2 );
      }
      --v12;
    }
    while ( v12 );
    v5 = v1->m_apkPartyWin;
    v6 = v1->m_apkPartyWin[0] == 0;
    v1->isMiniPartyWinShow = v1->isMiniPartyWinShow == 0;
    if ( !v6 )
    {
      v7 = 4;
      do
      {
        PartyWin::SetInfo(*v5, 0);
        ++v5;
        --v7;
      }
      while ( v7 );
      v8 = g_kParty.m_uiTotalMember;
      v9 = 0;
      if ( g_kParty.m_uiTotalMember )
      {
        v10 = v13->m_apkPartyWin;
        do
        {
          v11 = Party::GetMemberInfo(&g_kParty, v9);
          PartyWin::SetInfo(*v10, v11);
          ++v9;
          ++v10;
        }
        while ( v9 < v8 );
      }
      v1 = v13;
    }
    PartyWinInterface::UpdateMiniPartyWin(v1);
  }
}

//----- (0056BE40) --------------------------------------------------------
void __thiscall PkKqRankingWin::PkKqRankingWin(PkKqRankingWin *this)
{
  PkKqRankingWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_dwBaseScore = 0;
  v1->m_iPkRankingSortColumn = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PkKqRankingWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PkKqRankingWin::_vftable_;
}
// 9A53DC: using guessed type int (__stdcall *PkKqRankingWin___vftable_)(int uiFlags);
// 9A53FC: using guessed type int (__thiscall *PkKqRankingWin___vftable_)(void *p, char);

//----- (0056BE70) --------------------------------------------------------
void __thiscall PkKqRankingWin::_PkKqRankingWin(PkKqRankingWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PkKqRankingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PkKqRankingWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A53DC: using guessed type int (__stdcall *PkKqRankingWin___vftable_)(int uiFlags);
// 9A53FC: using guessed type int (__thiscall *PkKqRankingWin___vftable_)(void *p, char);

//----- (0056BE90) --------------------------------------------------------
void __thiscall PkKqRankingWin::Clear(PkKqRankingWin *this)
{
  PkKqRankingWin *v1; // esi@1

  v1 = this;
  SlideListWin::RemoveAllList(this->m_pkListWin);
  v1->m_iPkRankingSortColumn = 0;
}

//----- (0056BEB0) --------------------------------------------------------
void __thiscall PkKqRankingWin::OnCmdClose(PkKqRankingWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0056BED0) --------------------------------------------------------
void __thiscall PkKqRankingWin::SetBaseScore(PkKqRankingWin *this, unsigned int dwBaseScore)
{
  this->m_dwBaseScore = dwBaseScore;
}

//----- (0056BEE0) --------------------------------------------------------
void __thiscall PkKqRankingWin::SortListBy(PkKqRankingWin *this, int iIndex)
{
  PkKqRankingWin *v2; // esi@1
  SlideListWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkListWin;
  if ( v3 )
  {
    v2->m_iPkRankingSortColumn = iIndex;
    SlideListWin::Sort(v3, iIndex, 0, 0);
    SlideListWin::UpdateViewList(v2->m_pkListWin);
  }
}

//----- (0056BF20) --------------------------------------------------------
void __thiscall PkKqRankingWin::OnHelpLink(PkKqRankingWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "RankingWin");
}

//----- (0056BF50) --------------------------------------------------------
void __thiscall PkKqRankingWin::AddRanking(PkKqRankingWin *this, char *pcName, unsigned int dwKillPoint, unsigned int dwDownPoint, unsigned int dwContribute, char byMedal, char byGender, char byChrCls, unsigned int dwScore)
{
  PkKqRankingWin *v9; // esi@1
  char *v10; // ebx@1
  int v11; // edi@1
  char *v12; // eax@2
  char *v13; // eax@3
  char *v14; // eax@3
  char *v15; // eax@3
  char *v16; // eax@3
  char *v17; // eax@3
  NiRefObjectVtbl *pcNamea; // [sp+14h] [bp+8h]@2

  v9 = this;
  v10 = pcName;
  v11 = SlideListWin::AddText(this->m_pkListWin, 0);
  if ( !v11 )
  {
    pcNamea = v9->m_pkWinnerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v12 = fs("\" %s \"");
    pcNamea[118].__vecDelDtor((NiRefObject *)v9->m_pkWinnerText, (unsigned int)v12);
  }
  v13 = fs("%d");
  SlideListWin::SetText(v9->m_pkListWin, v11, 0, v13);
  SlideListWin::SetText(v9->m_pkListWin, v11, 1u, v10);
  v14 = fs("%d");
  SlideListWin::SetText(v9->m_pkListWin, v11, 2u, v14);
  v15 = fs("%d");
  SlideListWin::SetText(v9->m_pkListWin, v11, 3u, v15);
  v16 = fs("%d");
  SlideListWin::SetText(v9->m_pkListWin, v11, 4u, v16);
  v17 = fs("%d");
  SlideListWin::SetText(v9->m_pkListWin, v11, 5u, v17);
  if ( !strcmp((const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(), v10) )
    SlideListWin::SetFontColor(v9->m_pkListWin, v11, 128, 245, 122);
  SlideListWin::AlignText(v9->m_pkListWin, 5u);
  SlideListWin::UpdateViewList(v9->m_pkListWin);
  SlideBar::SetSplitCnt(v9->m_pkSlideBar, v9->m_pkListWin->m_nSlideSplitCnt);
}

//----- (0056C0D0) --------------------------------------------------------
void __thiscall PkKqRankingWin::OnCmdSlide(PkKqRankingWin *this)
{
  this->m_pkListWin->m_nViewStartPos = this->m_pkSlideBar->m_nCurPos;
  SlideListWin::UpdateViewList(this->m_pkListWin);
}

//----- (0056C100) --------------------------------------------------------
void __thiscall PkKqRankingWin::OnCommand(PkKqRankingWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4

  switch ( wParam )
  {
    case 4u:
      PkKqRankingWin::OnCmdSlide(this);
      break;
    case 1u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xBu:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "RankingWin");
      break;
    default:
      return;
  }
}

//----- (0056C180) --------------------------------------------------------
bool __thiscall PkKqRankingWin::Create(PkKqRankingWin *this, PgFrameWork *pkFrameWork)
{
  PkKqRankingWin *v2; // esi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  bool result; // al@9
  NiSourceTexture *v7; // eax@10
  PgSprData *v8; // eax@13
  D3DXCOLOR v9; // ST18_16@13
  char *v10; // eax@13
  NiNode *v11; // esi@14
  PgFont *v12; // eax@19
  PgWinText *v13; // edi@19
  char *v14; // eax@19
  PgFont *v15; // eax@21
  PgWinText *v16; // eax@21
  PgWin *v17; // edi@21
  D3DXCOLOR v18; // ST1C_16@21
  char *v19; // eax@21
  NiSourceTexture *v20; // edi@21
  SLWCreateInfo::Item *v21; // eax@23
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v22; // edi@23
  SLWCreateInfo::Item *v23; // eax@23
  SLWCreateInfo::Item *v24; // edi@23
  SLWCreateInfo::Item *v25; // eax@23
  SLWCreateInfo::Item *v26; // edi@23
  SLWCreateInfo::Item *v27; // eax@23
  SLWCreateInfo::Item *v28; // edi@23
  SLWCreateInfo::Item *v29; // eax@23
  SLWCreateInfo::Item *v30; // edi@23
  SLWCreateInfo::Item *v31; // eax@23
  SLWCreateInfo::Item *v32; // edi@23
  SLWCreateInfo::Item *v33; // eax@23
  SLWCreateInfo::Item *v34; // edi@23
  PgSprData *v35; // eax@23
  SlideListWin *v36; // eax@23
  PgSprData *v37; // eax@23
  SlideBar *v38; // eax@23
  SlideBar *v39; // eax@23
  NiRefObjectVtbl *v40; // ebx@23
  SlideBar *v41; // edi@23
  int v42; // eax@23
  PgWin *v43; // esi@23
  D3DXCOLOR v44; // ST18_16@23
  char *v45; // eax@23
  PgWin *v46; // esi@23
  D3DXCOLOR v47; // ST18_16@23
  char *v48; // eax@23
  PgWin *v49; // esi@23
  D3DXCOLOR v50; // ST18_16@23
  char *v51; // eax@23
  PgWin *v52; // esi@23
  D3DXCOLOR v53; // ST18_16@23
  char *v54; // eax@23
  PgWin *v55; // esi@23
  D3DXCOLOR v56; // ST18_16@23
  char *v57; // eax@23
  PgWin *v58; // esi@23
  D3DXCOLOR v59; // ST18_16@23
  char *v60; // eax@23
  const char *v61; // [sp-20h] [bp-A4h]@11
  int *v62; // [sp-1Ch] [bp-A0h]@11
  int *v63; // [sp-18h] [bp-9Ch]@11
  NiSourceTexture *v64; // [sp-14h] [bp-98h]@11
  unsigned int v65; // [sp-10h] [bp-94h]@1
  SLWCreateInfo kCreateInfo; // [sp+0h] [bp-84h]@23
  NiTexturePalette *pTexturePalette; // [sp+1Ch] [bp-68h]@1
  int uiTop; // [sp+20h] [bp-64h]@13
  int uiLeft; // [sp+24h] [bp-60h]@13
  unsigned int uiHeight; // [sp+28h] [bp-5Ch]@13
  unsigned int uiWidth; // [sp+2Ch] [bp-58h]@13
  int iXOff; // [sp+30h] [bp-54h]@4
  int iYOff; // [sp+34h] [bp-50h]@4
  UIUtil ui; // [sp+38h] [bp-4Ch]@10
  int iTop; // [sp+4Ch] [bp-38h]@11
  int iLeft; // [sp+50h] [bp-34h]@11
  NiPointer<NiNode> spNode; // [sp+54h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+58h] [bp-2Ch]@23
  unsigned int v79; // [sp+74h] [bp-10h]@1
  int v80; // [sp+80h] [bp-4h]@1
  int v81; // [sp+84h] [bp+0h]@1

  v79 = (unsigned int)&v81 ^ __security_cookie;
  v65 = (unsigned int)&v81 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v80 = 0;
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\RankingWin.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v4, 0, pkFrameWork, "PkKqRankingWin", 0) )
  {
    v5 = spNode.m_pObject;
    v80 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v80) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  v7 = MenuTexMgr::GetTexture(0x13u);
  if ( v7 )
  {
    v64 = v7;
    v63 = &iTop;
    v62 = &iLeft;
    v61 = "Theme";
  }
  else
  {
    v64 = 0;
    v63 = &iTop;
    v62 = &iLeft;
    v61 = "Theme";
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v61, v62, v63, v64);
  PgWinSpr::CreateWin(iLeft, iTop, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "IconSlot", 0);
  *(_QWORD *)&v9.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v9.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v10 = TextData::Get(0x99F8F4F3u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v10, COERCE_D3DXCOLOR(v9.r), 5u);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Txt02", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v12 = Font::Get(BOLD);
    v13 = PgWinText::CreateWin(
            uiLeft - iXOff + 20,
            uiTop - iYOff - 13,
            uiWidth,
            uiHeight,
            v12,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v13,
      5u);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v13,
      0);
    SpScreenText::SetShadowOffset(&v13->m_spTextGeom.m_pObject->baseclass_0, 1u);
    pTexturePalette = (NiTexturePalette *)v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v14 = TextData::Get(0xE0F43441u);
    ((void (__thiscall *)(PgWinText *, char *))pTexturePalette[59].baseclass_0.vfptr)(v13, v14);
    SpScreenText::SetVerticalGap(&v13->m_spTextGeom.m_pObject->baseclass_0, 3);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Txt01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v15 = Font::Get(LARGE);
      v16 = PgWinText::CreateWin(
              uiLeft - iXOff + 20,
              uiTop - iYOff - 10,
              uiWidth,
              uiHeight,
              v15,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkWinnerText = v16;
      ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
        v16,
        5,
        v65);
      ((void (__stdcall *)(_DWORD))v2->m_pkWinnerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(signed int, signed int, signed int, signed int))v2->m_pkWinnerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        255,
        255,
        128,
        255);
      v17 = (PgWin *)UIUtil::CreateBtn(&ui, 1u, "Btn01Nor", "Btn01Over", "Btn01Click", 0, 0);
      *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v19 = TextData::Get(0xD6FBEFFFu);
      UIUtil::CreateAttachedText(&ui, v17, v19, COERCE_D3DXCOLOR(v18.r), 5u);
      UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
      v20 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
        UIUtil::CreateBtn(&ui, 0xBu, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v20);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v80) = 2;
      v21 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v22 = (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v21;
      v21->nItemType = 1;
      v21->pNode = spNode.m_pObject;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      v22 = (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)v22 + 72);
      LOBYTE(v80) = 3;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        v22,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarClick");
      LOBYTE(v80) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        v22,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v80) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        v22,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v23 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      v24 = v23;
      v23->nItemType = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column01");
      LOBYTE(v80) = 6;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &v24->vecNodeName,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v24->pNode = spNode.m_pObject;
      v25 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      v26 = v25;
      v25->nItemType = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column02");
      LOBYTE(v80) = 7;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &v26->vecNodeName,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v26->pNode = spNode.m_pObject;
      v26->bAbbreviatable = 1;
      v27 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      v28 = v27;
      v27->nItemType = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column03");
      LOBYTE(v80) = 8;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &v28->vecNodeName,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v28->pNode = spNode.m_pObject;
      v29 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      v30 = v29;
      v29->nItemType = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column04");
      LOBYTE(v80) = 9;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &v30->vecNodeName,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v30->pNode = spNode.m_pObject;
      v31 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      v32 = v31;
      v31->nItemType = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column05");
      LOBYTE(v80) = 10;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &v32->vecNodeName,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v32->pNode = spNode.m_pObject;
      v33 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      v34 = v33;
      v33->nItemType = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column06");
      LOBYTE(v80) = 11;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        &v34->vecNodeName,
        &thisa);
      LOBYTE(v80) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v34->pNode = spNode.m_pObject;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, 0);
      v36 = SlideListWin::CreateWin(
              iLeft - iXOff,
              iTop - iYOff,
              v35,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              3u,
              0);
      v2->m_pkListWin = v36;
      v36->m_uiRClickMsg = 2;
      v2->m_pkListWin->m_uiLClickMsg = 3;
      SlideListWin::UpdateViewList(v2->m_pkListWin);
      v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, 0);
      v38 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v37,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkSlideBar = v38;
      v38->m_uiClickMsg = 4;
      v2->m_pkSlideBar->m_eType = 1;
      v39 = v2->m_pkSlideBar;
      v40 = v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v41 = v2->m_pkSlideBar;
      ((void (__thiscall *)(SlideBar *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2->m_pkSlideBar);
      v42 = ((int (__thiscall *)(SlideBar *))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v41);
      v40[77].__vecDelDtor((NiRefObject *)v2->m_pkSlideBar, v42 - 20);
      v43 = (PgWin *)UIUtil::CreateBtn(&ui, 5u, "Title01Nor", "Title01Over", "Title01Over", 0, 0);
      *(_QWORD *)&v44.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v44.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v45 = TextData::Get(0x91B1F3EDu);
      UIUtil::CreateAttachedText(&ui, v43, v45, COERCE_D3DXCOLOR(v44.r), 5u);
      v46 = (PgWin *)UIUtil::CreateBtn(&ui, 6u, "Title02Nor", "Title02Over", "Title02Over", 0, 0);
      *(_QWORD *)&v47.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v47.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v48 = TextData::Get(0xE4023F31u);
      UIUtil::CreateAttachedText(&ui, v46, v48, COERCE_D3DXCOLOR(v47.r), 5u);
      v49 = (PgWin *)UIUtil::CreateBtn(&ui, 7u, "Title03Nor", "Title03Over", "Title03Over", 0, 0);
      *(_QWORD *)&v50.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v50.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v51 = TextData::Get(0xE84E4234u);
      UIUtil::CreateAttachedText(&ui, v49, v51, COERCE_D3DXCOLOR(v50.r), 5u);
      v52 = (PgWin *)UIUtil::CreateBtn(&ui, 8u, "Title04Nor", "Title04Over", "Title04Over", 0, 0);
      *(_QWORD *)&v53.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v53.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v54 = TextData::Get(0xEE47443Fu);
      UIUtil::CreateAttachedText(&ui, v52, v54, COERCE_D3DXCOLOR(v53.r), 5u);
      v55 = (PgWin *)UIUtil::CreateBtn(&ui, 9u, "Title05Nor", "Title05Over", "Title05Over", 0, 0);
      *(_QWORD *)&v56.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v56.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v57 = TextData::Get(0x2D48512Fu);
      UIUtil::CreateAttachedText(&ui, v55, v57, COERCE_D3DXCOLOR(v56.r), 5u);
      v58 = (PgWin *)UIUtil::CreateBtn(&ui, 0xAu, "Title06Nor", "Title06Over", "Title06Over", 0, 0);
      *(_QWORD *)&v59.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v59.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v60 = TextData::Get(0x9FFFE9F3u);
      UIUtil::CreateAttachedText(&ui, v58, v60, COERCE_D3DXCOLOR(v59.r), 5u);
      LOBYTE(v80) = 1;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      LOBYTE(v80) = 0;
      UIUtil::_UIUtil(&ui);
      v80 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v80) = 0;
      UIUtil::_UIUtil(&ui);
      v80 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v80) = 0;
    UIUtil::_UIUtil(&ui);
    v11 = spNode.m_pObject;
    v80 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0056CB40) --------------------------------------------------------
PkKqRankingWin *__cdecl PkKqRankingWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PkKqRankingWin *v4; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x16Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &PkKqRankingWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PkKqRankingWin::_vftable_;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( PkKqRankingWin::Create((PkKqRankingWin *)v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PkKqRankingWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    }
    v4 = 0;
  }
  return v4;
}
// 9A53DC: using guessed type int (__stdcall *PkKqRankingWin___vftable_)(int uiFlags);
// 9A53FC: using guessed type int (__thiscall *PkKqRankingWin___vftable_)(void *p, char);

//----- (0056CC90) --------------------------------------------------------
void *__thiscall PkKqRankingWin::_vector_deleting_destructor_(PkKqRankingWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PkKqRankingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PkKqRankingWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A53DC: using guessed type int (__stdcall *PkKqRankingWin___vftable_)(int uiFlags);
// 9A53FC: using guessed type int (__thiscall *PkKqRankingWin___vftable_)(void *p, char);

//----- (0056CCD0) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::High_DieCount(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw)
{
  return rhw->m_unDown < lhw->m_unDown;
}

//----- (0056CCF0) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::High_DecreaseScore(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw)
{
  return rhw->m_unKill < lhw->m_unKill;
}

//----- (0056CD30) --------------------------------------------------------
void __thiscall PkRealTiemRankWin::OnHelpLink(PkRealTiemRankWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "KDScoreRealTime");
}

//----- (0056CD60) --------------------------------------------------------
bool __thiscall PkRealTiemRankWin::Open(PkRealTiemRankWin *this)
{
  bool result; // al@2

  if ( (signed int)((char *)this->m_vecRankInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0])
     / 44 )
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0056CDA0) --------------------------------------------------------
void __thiscall PkRealTiemRankWin::minimizeWindow(PkRealTiemRankWin *this, bool btrue)
{
  PkRealTiemRankWin *v2; // ebx@1
  PgWin *v3; // eax@1
  int v4; // edi@2
  NiAVObject *v5; // esi@7
  int v6; // eax@8
  int Pos; // [sp+4h] [bp-4h]@1

  v2 = this;
  this->m_bNotMinimize = btrue;
  Pos = 0;
  v3 = PgWin::GetNextChildWin(&this->baseclass_0.baseclass_0.baseclass_0, (unsigned int *)&Pos);
  if ( v3 )
  {
    v4 = Pos;
    while ( 1 )
    {
      if ( (PgWin *)v2->m_pkMinimizeButton != v3 && v2->m_pWinTitleText != v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v3, btrue);
      if ( v4 >= v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiSize )
        break;
      while ( 1 )
      {
        v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_pBase[v4].m_pObject;
        if ( v5 )
        {
          v6 = ((int (__thiscall *)(NiAVObject *))v5->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v5);
          if ( v6 )
            break;
        }
LABEL_11:
        ++v4;
        if ( v4 >= v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiSize )
          return;
      }
      while ( (NiRTTI *)v6 != &PgWin::m_RTTI )
      {
        v6 = *(_DWORD *)(v6 + 4);
        if ( !v6 )
          goto LABEL_11;
      }
      ++v4;
      v3 = (PgWin *)v5;
    }
  }
}

//----- (0056CE50) --------------------------------------------------------
bool __thiscall PkRealTiemRankWin::AddRankPlayerInfo(PkRealTiemRankWin *this, PkRealTiemRankWin::RankInfo *rInfo)
{
  const char *v2; // eax@1
  unsigned int v3; // ST1C_4@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@1
  int v5; // eax@5
  unsigned int v6; // ST18_4@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@5
  int v8; // edx@9
  std::basic_ostream<char,std::char_traits<char> > *v9; // eax@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // eax@9
  int v11; // ecx@13
  unsigned int v12; // ST10_4@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@13
  int v14; // eax@17
  unsigned int v15; // ST0C_4@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@17
  int v17; // edx@21
  unsigned int v18; // ebx@21
  PkRealTiemRankWin::RankInfo *v19; // edx@22
  unsigned int v20; // esi@24
  unsigned int v21; // eax@24
  const char *v22; // ecx@26
  int v23; // eax@28
  int v24; // eax@31
  int v25; // ecx@31
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > osstream; // [sp+0h] [bp-ECh]@1
  int v28; // [sp+98h] [bp-54h]@5
  int iLastIndex; // [sp+9Ch] [bp-50h]@3
  PkRealTiemRankWin *v30; // [sp+A0h] [bp-4Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMainName; // [sp+A4h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+C0h] [bp-2Ch]@1
  unsigned int v33; // [sp+DCh] [bp-10h]@1
  int v34; // [sp+E8h] [bp-4h]@1
  int v35; // [sp+ECh] [bp+0h]@1

  v33 = (unsigned int)&v35 ^ __security_cookie;
  v30 = this;
  v2 = (const char *)((int (__stdcall *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)((unsigned int)&v35 ^ __security_cookie);
  strMainName.baseclass_0._Myres = 15;
  strMainName.baseclass_0._Mysize = 0;
  strMainName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strMainName, v2, strlen(v2));
  v34 = 0;
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v3 = rInfo->m_unRank;
  LOBYTE(v34) = 1;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v3);
  v4 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v34) = 2;
  if ( v4->baseclass_0._Myres >= 0x10 )
    v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
  iLastIndex = SlideListWin::AddText(v30->m_pkSkillListWin, v4->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v5 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v28 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v5] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v34) = 3;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v34) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v6 = rInfo->m_unScore;
  LOBYTE(v34) = 4;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v6);
  v7 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v34) = 5;
  if ( v7->baseclass_0._Myres >= 0x10 )
    v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v7->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v30->m_pkSkillListWin, iLastIndex, 1u, v7->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v8 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v28 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v8] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v34) = 6;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v34) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  LOBYTE(v34) = 7;
  v9 = std::operator<<<std::char_traits<char>>(&osstream.___u0.baseclass_0, " ");
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(v9, &rInfo->m_strName);
  v10 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v34) = 8;
  if ( v10->baseclass_0._Myres >= 0x10 )
    v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v10->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v30->m_pkSkillListWin, iLastIndex, 2u, v10->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v11 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v28 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v11] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v34) = 9;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v34) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v12 = rInfo->m_unKill;
  LOBYTE(v34) = 10;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v12);
  v13 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v34) = 11;
  if ( v13->baseclass_0._Myres >= 0x10 )
    v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v13->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v30->m_pkSkillListWin, iLastIndex, 3u, v13->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v14 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v28 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v14] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v34) = 12;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v34) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v15 = rInfo->m_unDown;
  LOBYTE(v34) = 13;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v15);
  v16 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v34) = 14;
  if ( v16->baseclass_0._Myres >= 0x10 )
    v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v16->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v30->m_pkSkillListWin, iLastIndex, 4u, v16->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v17 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v28 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v17] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v34) = 15;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v34) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  v18 = rInfo->m_strName.baseclass_0._Mysize;
  if ( rInfo->m_strName.baseclass_0._Myres < 0x10 )
    v19 = rInfo;
  else
    v19 = *(PkRealTiemRankWin::RankInfo **)&rInfo->m_strName.baseclass_0.___u0.baseclass_0.dummy[0];
  v20 = strMainName.baseclass_0._Mysize;
  v21 = strMainName.baseclass_0._Mysize;
  if ( strMainName.baseclass_0._Mysize >= v18 )
    v21 = rInfo->m_strName.baseclass_0._Mysize;
  v22 = *(const char **)&strMainName;
  if ( strMainName.baseclass_0._Myres < 0x10 )
    v22 = (const char *)&strMainName;
  v23 = std::char_traits<char>::compare(v22, v19->m_strName.baseclass_0.___u0.baseclass_0.dummy, v21);
  if ( v23 || v20 < v18 || (LOBYTE(v23) = v20 != v18, v23) )
  {
    v24 = 255;
    v25 = 0;
  }
  else
  {
    v24 = 102;
    v25 = 51;
  }
  SlideListWin::SetFontColor(v30->m_pkSkillListWin, iLastIndex, v24, 255, v25);
  if ( strMainName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strMainName);
  return 1;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// A85C00: using guessed type int __security_cookie;

//----- (0056D380) --------------------------------------------------------
bool __thiscall PkRealTiemRankWin::DisplayInfoSetting(PkRealTiemRankWin *this)
{
  PkRealTiemRankWin *v1; // edi@1
  signed int v2; // ecx@1
  const char *v3; // eax@3
  int v4; // ebx@3
  signed int v5; // ecx@3
  int v6; // esi@5
  unsigned int v7; // ebx@5
  const char *v8; // edx@6
  unsigned int v9; // ecx@8
  const char *v10; // eax@10
  int v11; // ebx@20
  int v12; // ecx@21
  unsigned int v13; // edx@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // esi@25
  signed int v15; // eax@31
  int v16; // eax@38
  unsigned int v17; // eax@42
  unsigned int v19; // [sp-10h] [bp-48h]@1
  int nMaxLine; // [sp+0h] [bp-38h]@1
  unsigned int i; // [sp+4h] [bp-34h]@3
  int ia; // [sp+4h] [bp-34h]@19
  int rInfo; // [sp+8h] [bp-30h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMainName; // [sp+Ch] [bp-2Ch]@3
  unsigned int v25; // [sp+28h] [bp-10h]@1
  int v26; // [sp+34h] [bp-4h]@3
  int v27; // [sp+38h] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v19 = (unsigned int)&v27 ^ __security_cookie;
  v1 = this;
  v2 = (signed int)((char *)this->m_vecRankInfos.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  nMaxLine = 9;
  if ( (unsigned int)(v2 / 44) <= 9 )
    nMaxLine = v2 / 44;
  SlideListWin::RemoveAllList(v1->m_pkSkillListWin);
  v3 = (const char *)((int (__stdcall *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v19);
  v4 = 0;
  strMainName.baseclass_0._Myres = 15;
  strMainName.baseclass_0._Mysize = 0;
  strMainName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strMainName, v3, strlen(v3));
  v5 = (signed int)((char *)v1->m_vecRankInfos.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  v26 = 0;
  i = 0;
  if ( v5 / 44 )
  {
    rInfo = 0;
    do
    {
      v6 = rInfo + *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      v7 = *(_DWORD *)(v6 + 16);
      if ( *(_DWORD *)(v6 + 20) < 0x10u )
        v8 = (const char *)(rInfo + *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
      else
        v8 = *(const char **)v6;
      v9 = strMainName.baseclass_0._Mysize;
      if ( strMainName.baseclass_0._Mysize >= v7 )
        v9 = *(_DWORD *)(v6 + 16);
      v10 = *(const char **)&strMainName;
      if ( strMainName.baseclass_0._Myres < 0x10 )
        v10 = (const char *)&strMainName;
      if ( !std::char_traits<char>::compare(v10, v8, v9)
        && strMainName.baseclass_0._Mysize >= v7
        && strMainName.baseclass_0._Mysize == v7 )
        PkRealTiemRankWin::AddRankPlayerInfo(v1, (PkRealTiemRankWin::RankInfo *)v6);
      rInfo += 44;
      ++i;
    }
    while ( i < (signed int)((char *)v1->m_vecRankInfos.baseclass_0._Mylast
                           - *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0])
              / 44 );
    v4 = 0;
  }
  if ( nMaxLine > v4 )
  {
    ia = v4;
    do
    {
      v11 = ia + *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( *(_DWORD *)(v11 + 20) < 0x10u )
        v12 = ia + *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      else
        v12 = *(_DWORD *)v11;
      v13 = strMainName.baseclass_0._Mysize;
      if ( strMainName.baseclass_0._Mysize >= *(_DWORD *)(v11 + 16) )
        v13 = *(_DWORD *)(v11 + 16);
      v14 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strMainName;
      if ( strMainName.baseclass_0._Myres < 0x10 )
        v14 = &strMainName;
      if ( v13 < 4 )
      {
LABEL_30:
        if ( !v13 )
          goto LABEL_40;
      }
      else
      {
        while ( *(_DWORD *)&v14->baseclass_0.___u0.baseclass_0.dummy[0] == *(_DWORD *)v12 )
        {
          v13 -= 4;
          v12 += 4;
          v14 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v14 + 4);
          if ( v13 < 4 )
            goto LABEL_30;
        }
      }
      v15 = v14->baseclass_0.___u0.baseclass_0.dummy[0] - *(_BYTE *)v12;
      if ( v14->baseclass_0.___u0.baseclass_0.dummy[0] != *(_BYTE *)v12 )
        goto LABEL_38;
      if ( v13 > 1 )
      {
        v15 = v14->baseclass_0.___u0._Bx._Buf[1] - *(_BYTE *)(v12 + 1);
        if ( v14->baseclass_0.___u0._Bx._Buf[1] != *(_BYTE *)(v12 + 1) )
          goto LABEL_38;
        if ( v13 > 2 )
        {
          v15 = v14->baseclass_0.___u0._Bx._Buf[2] - *(_BYTE *)(v12 + 2);
          if ( v14->baseclass_0.___u0._Bx._Buf[2] != *(_BYTE *)(v12 + 2) )
            goto LABEL_38;
          if ( v13 > 3 )
          {
            v15 = v14->baseclass_0.___u0._Bx._Buf[3] - *(_BYTE *)(v12 + 3);
LABEL_38:
            v11 = ia + *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
            v16 = (v15 >> 31) | 1;
            goto LABEL_41;
          }
        }
      }
      v11 = ia + *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
LABEL_40:
      v16 = 0;
LABEL_41:
      if ( v16
        || (v17 = *(_DWORD *)(v11 + 16), strMainName.baseclass_0._Mysize < v17)
        || strMainName.baseclass_0._Mysize != v17 )
        PkRealTiemRankWin::AddRankPlayerInfo(v1, (PkRealTiemRankWin::RankInfo *)v11);
      ia += 44;
      --nMaxLine;
    }
    while ( nMaxLine );
  }
  SlideListWin::AlignText(v1->m_pkSkillListWin, 2u, 4u);
  SlideListWin::UpdateViewList(v1->m_pkSkillListWin);
  if ( strMainName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strMainName);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0056D600) --------------------------------------------------------
void __thiscall PkRealTiemRankWin::PkRealTiemRankWin(PkRealTiemRankWin *this)
{
  PkRealTiemRankWin *v1; // esi@1
  boost::detail::function::any_pointer (__cdecl *v2)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ecx@1
  char *v3; // edi@1
  void *v4; // eax@1
  boost::detail::function::any_pointer (__cdecl *v5)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ebx@1
  boost::detail::function::any_pointer (__cdecl *v6)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edx@4
  void *v7; // edx@4
  char v8; // [sp+0h] [bp-1Ch]@3
  bool (__cdecl *v9)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp+8h] [bp-14h]@1
  PkRealTiemRankWin *v10; // [sp+Ch] [bp-10h]@1
  int v11; // [sp+18h] [bp-4h]@1

  v1 = this;
  v10 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v2 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PkRealTiemRankWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PkRealTiemRankWin::_vftable_;
  v1->m_strPlayerName.baseclass_0._Myres = 15;
  v1->m_strPlayerName.baseclass_0._Mysize = 0;
  v11 = 0;
  v1->m_strPlayerName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecRankInfos.baseclass_0._Mylast = 0;
  v1->m_vecRankInfos.baseclass_0._Myend = 0;
  v3 = (char *)&v1->m_SortPradicationFunc;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v4 = 0;
  v5 = 0;
  LOBYTE(v11) = 3;
  v1->m_iFontHeight = 14;
  v9 = 0;
  if ( PkRealTiemRankWin::RankInfo::greater_Score )
  {
    v9 = boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke;
    v5 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage;
    v4 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage(
           (boost::detail::function::any_pointer)PkRealTiemRankWin::RankInfo::greater_Score,
           0).obj_ptr;
    v2 = 0;
  }
  if ( v3 != &v8 )
  {
    v6 = v5;
    v5 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v3;
    *(_DWORD *)v3 = v6;
    v7 = v4;
    v4 = v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr;
    v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = v7;
    v1->m_SortPradicationFunc.baseclass_0.invoker = (bool (__cdecl *)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))v9;
  }
  if ( v5 != v2 )
    v5((boost::detail::function::any_pointer)v4, destroy_functor_tag);
  PkRealTiemRankWin::minimizeWindow(v1, 1);
}
// 9A5700: using guessed type int (__stdcall *PkRealTiemRankWin___vftable_)(int uiFlags);
// 9A571C: using guessed type int (__thiscall *PkRealTiemRankWin___vftable_)(void *p, char);

//----- (0056D700) --------------------------------------------------------
void __thiscall PkRealTiemRankWin::_PkRealTiemRankWin(PkRealTiemRankWin *this)
{
  PkRealTiemRankWin *v1; // esi@1
  PkRealTiemRankWin::RankInfo *v2; // eax@3
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+0h] [bp-10h]@1

  v1 = this;
  __formal.dummy[0] = (char)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PkRealTiemRankWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PkRealTiemRankWin::_vftable_;
  if ( this->m_SortPradicationFunc.baseclass_0.baseclass_0.manager )
    this->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = (void *)this->m_SortPradicationFunc.baseclass_0.baseclass_0.manager(
                                                                                    (boost::detail::function::any_pointer)this->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                                                                                    destroy_functor_tag);
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v2 = *(PkRealTiemRankWin::RankInfo **)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
  {
    std::_Destroy_range<std::allocator<PkRealTiemRankWin::RankInfo>>(
      v2,
      v1->m_vecRankInfos.baseclass_0._Mylast,
      &v1->m_vecRankInfos.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecRankInfos.baseclass_0._Mylast = 0;
  v1->m_vecRankInfos.baseclass_0._Myend = 0;
  if ( v1->m_strPlayerName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_strPlayerName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_strPlayerName.baseclass_0._Myres = 15;
  v1->m_strPlayerName.baseclass_0._Mysize = 0;
  v1->m_strPlayerName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A5700: using guessed type int (__stdcall *PkRealTiemRankWin___vftable_)(int uiFlags);
// 9A571C: using guessed type int (__thiscall *PkRealTiemRankWin___vftable_)(void *p, char);

//----- (0056D810) --------------------------------------------------------
PkRealTiemRankWin *__cdecl PkRealTiemRankWin::CreateWin(PgFrameWork *pFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  PkRealTiemRankWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1B8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    PkRealTiemRankWin::PkRealTiemRankWin((PkRealTiemRankWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (PkRealTiemRankWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0056D940) --------------------------------------------------------
bool __thiscall PkRealTiemRankWin::Clear(PkRealTiemRankWin *this)
{
  PkRealTiemRankWin *v1; // esi@1
  PkRealTiemRankWin::RankInfo *v2; // eax@1
  PkRealTiemRankWin::RankInfo *v3; // ecx@1
  PkRealTiemRankWin::RankInfo *v4; // edi@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = this->m_vecRankInfos.baseclass_0._Mylast;
  v3 = *(PkRealTiemRankWin::RankInfo **)&this->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    v4 = std::_Move<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(v2, v2, v3, __formal);
    std::_Destroy_range<std::allocator<PkRealTiemRankWin::RankInfo>>(
      v4,
      v1->m_vecRankInfos.baseclass_0._Mylast,
      &v1->m_vecRankInfos.baseclass_0._Alval,
      __formal);
    v1->m_vecRankInfos.baseclass_0._Mylast = v4;
  }
  SlideListWin::RemoveAllList(v1->m_pkSkillListWin);
  SlideListWin::UpdateViewList(v1->m_pkSkillListWin);
  return 1;
}

//----- (0056D9B0) --------------------------------------------------------
bool __thiscall PkRealTiemRankWin::Close(PkRealTiemRankWin *this, bool bReset)
{
  PkRealTiemRankWin *v2; // esi@1

  v2 = this;
  if ( bReset )
    PkRealTiemRankWin::Clear(this);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  return 1;
}

//----- (0056D9E0) --------------------------------------------------------
bool __thiscall PkRealTiemRankWin::SetRankInfo(PkRealTiemRankWin *this, const char *pkName, unsigned int unScore, unsigned int Down, unsigned int Kill)
{
  PkRealTiemRankWin *v5; // edi@1
  unsigned int v6; // ebx@1
  int v7; // esi@1
  PkRealTiemRankWin::RankInfo *v8; // edi@1
  signed int v9; // ecx@1
  int v10; // edi@3
  const char *v11; // edx@3
  unsigned int v12; // ecx@5
  const char *v13; // eax@8
  unsigned int v14; // eax@11
  int v15; // ecx@14
  signed int v16; // edx@17
  PkRealTiemRankWin::RankInfo *v17; // ecx@17
  unsigned int v18; // edi@17
  int v19; // ebx@18
  PkRealTiemRankWin *v20; // edi@20
  boost::detail::function::any_pointer (__cdecl *v22)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-64h]@20
  int v23; // [sp-18h] [bp-60h]@20
  bool (__cdecl *v24)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-14h] [bp-5Ch]@20
  unsigned int v25; // [sp-10h] [bp-58h]@1
  PkRealTiemRankWin *thisa; // [sp+0h] [bp-48h]@1
  boost::detail::function::any_pointer (__cdecl **v27)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+4h] [bp-44h]@2
  char bEqualData; // [sp+Bh] [bp-3Dh]@1
  PkRealTiemRankWin::RankInfo info; // [sp+Ch] [bp-3Ch]@1
  unsigned int v30; // [sp+38h] [bp-10h]@1
  int v31; // [sp+44h] [bp-4h]@1
  int v32; // [sp+48h] [bp+0h]@1

  v30 = (unsigned int)&v32 ^ __security_cookie;
  v25 = (unsigned int)&v32 ^ __security_cookie;
  v5 = this;
  v6 = 0;
  thisa = this;
  info.m_strName.baseclass_0._Myres = 15;
  info.m_strName.baseclass_0._Mysize = 0;
  info.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v31 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&info.m_strName, pkName, strlen(pkName));
  v7 = (int)&v5->m_vecRankInfos;
  v8 = *(PkRealTiemRankWin::RankInfo **)&v5->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  info.m_unScore = unScore;
  info.m_unDown = Down;
  v9 = *(_DWORD *)(v7 + 4) - (_DWORD)v8;
  info.m_unKill = Kill;
  info.m_unRank = 0;
  bEqualData = 0;
  if ( !(v9 / 44) )
    goto LABEL_28;
  v27 = 0;
  if ( (unsigned int)(v9 / 44) <= 0 )
    std::_Xout_of_range("invalid vector<T> subscript");
  do
  {
    v10 = (int)((char *)v8 + (_DWORD)v27);
    v11 = *(const char **)&info;
    if ( info.m_strName.baseclass_0._Myres < 0x10 )
      v11 = (const char *)&info;
    v12 = info.m_strName.baseclass_0._Mysize;
    if ( *(_DWORD *)(v10 + 16) < info.m_strName.baseclass_0._Mysize )
      v12 = *(_DWORD *)(v10 + 16);
    if ( *(_DWORD *)(v10 + 20) < 0x10u )
      v13 = (const char *)v10;
    else
      v13 = *(const char **)v10;
    if ( !std::char_traits<char>::compare(v13, v11, v12) )
    {
      v14 = *(_DWORD *)(v10 + 16);
      if ( v14 >= info.m_strName.baseclass_0._Mysize )
      {
        if ( v14 == info.m_strName.baseclass_0._Mysize )
        {
          bEqualData = 1;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v10,
            &info.m_strName,
            v14 != info.m_strName.baseclass_0._Mysize,
            0xFFFFFFFFu);
          *(_DWORD *)(v10 + 28) = info.m_unScore;
          *(_DWORD *)(v10 + 32) = info.m_unKill;
          *(_DWORD *)(v10 + 36) = info.m_unDown;
          *(_DWORD *)(v10 + 40) = info.m_unRank;
        }
      }
    }
    v8 = *(PkRealTiemRankWin::RankInfo **)v7;
    v15 = *(_DWORD *)(v7 + 4);
    v27 += 11;
    ++v6;
  }
  while ( (v15 - (signed int)v8) / 44 > v6 );
  if ( !bEqualData )
LABEL_28:
    std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::push_back(
      (std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *)v7,
      &info);
  v16 = (signed int)((unsigned __int64)(780903145i64
                                      * (unsigned int)((char *)thisa->m_vecRankInfos.baseclass_0._Mylast - *(_DWORD *)v7)) >> 32) >> 3;
  std::_Sort<PkRealTiemRankWin::RankInfo___int_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
    *(PkRealTiemRankWin::RankInfo **)v7,
    thisa->m_vecRankInfos.baseclass_0._Mylast,
    v16 + ((unsigned int)v16 >> 31),
    PkRealTiemRankWin::RankInfo::greater_Score);
  v17 = *(PkRealTiemRankWin::RankInfo **)v7;
  v18 = 0;
  if ( (*(_DWORD *)(v7 + 4) - *(_DWORD *)v7) / 44 )
  {
    v19 = 0;
    do
    {
      ++v18;
      v17[v19].m_unRank = v18;
      v17 = *(PkRealTiemRankWin::RankInfo **)v7;
      ++v19;
    }
    while ( v18 < (*(_DWORD *)(v7 + 4) - *(_DWORD *)v7) / 44 );
  }
  v20 = thisa;
  v22 = 0;
  v23 = 0;
  v24 = 0;
  v27 = &v22;
  if ( thisa->m_SortPradicationFunc.baseclass_0.baseclass_0.manager )
  {
    v24 = thisa->m_SortPradicationFunc.baseclass_0.invoker;
    v22 = thisa->m_SortPradicationFunc.baseclass_0.baseclass_0.manager;
    v23 = (int)thisa->m_SortPradicationFunc.baseclass_0.baseclass_0.manager(
                 (boost::detail::function::any_pointer)thisa->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                 0);
  }
  std::sort<std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>>_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
    *(std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > > *)v7,
    (std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > >)v20->m_vecRankInfos.baseclass_0._Mylast,
    *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v22);
  PkRealTiemRankWin::DisplayInfoSetting(v20);
  ((void (__thiscall *)(PkRealTiemRankWin *, signed int, unsigned int))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
    v20,
    1,
    v25);
  if ( info.m_strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&info);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0056DC60) --------------------------------------------------------
void __thiscall PkRealTiemRankWin::OnCommand(PkRealTiemRankWin *this, unsigned int wParam, int lParam)
{
  PkRealTiemRankWin *v3; // esi@1
  boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > v4; // [sp-Ch] [bp-14h]@4
  void *v5; // [sp-4h] [bp-Ch]@3

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      PkRealTiemRankWin::minimizeWindow(this, this->m_bNotMinimize == 0);
      return;
    case 1u:
      v5 = PkRealTiemRankWin::RankInfo::Less_Rank;
      goto LABEL_4;
    case 2u:
      v5 = PkRealTiemRankWin::RankInfo::greater_Score;
      goto LABEL_4;
    case 3u:
      v5 = GuildListWin::GuildInfo::Low_GuildName;
      goto LABEL_4;
    case 4u:
      v5 = GTStatusWin::RankInfo::High_DecreaseScore;
      goto LABEL_4;
    case 5u:
      v5 = GTStatusWin::RankInfo::High_DieCount;
LABEL_4:
      boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&this->m_SortPradicationFunc,
        (bool (__cdecl *)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))v5);
      boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>(
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v4,
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v3->m_SortPradicationFunc);
      std::sort<std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>>_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
        *(std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > > *)&v3->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0],
        (std::_Vector_iterator<std::_Vector_val<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > >)v3->m_vecRankInfos.baseclass_0._Mylast,
        v4);
      PkRealTiemRankWin::DisplayInfoSetting(v3);
      break;
    case 6u:
      PkRealTiemRankWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (0056DD20) --------------------------------------------------------
bool __thiscall PkRealTiemRankWin::Create(PkRealTiemRankWin *this, PgFrameWork *pkFrameWork)
{
  PkRealTiemRankWin *v2; // edi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  NiSourceTexture *v7; // eax@10
  D3DXCOLOR v8; // ST1C_16@10
  char *v9; // eax@10
  NiSourceTexture *v10; // esi@10
  unsigned int v11; // esi@12
  PgWin *v12; // eax@13
  char *v13; // edi@13
  char v14; // cl@14
  char **v15; // edi@15
  D3DXCOLOR v16; // ST1C_16@15
  bool v17; // zf@15
  SLWCreateInfo::Item *v18; // esi@16
  NiTexturePalette *v19; // edi@18
  SLWCreateInfo::Item *v20; // esi@19
  int v21; // eax@19
  char v22; // dl@20
  PgSprData *v23; // eax@26
  PgWin *v24; // edi@26
  PkRealTiemRankWin::RankInfo *v25; // eax@26
  PkRealTiemRankWin::RankInfo *v26; // ecx@26
  PgWin *v27; // eax@27
  NiTexturePalette *v28; // ecx@27
  PgWin *i; // esi@27
  NiNode *v30; // esi@34
  int uiHeight; // [sp+0h] [bp-184h]@26
  SLWCreateInfo kCreateInfo; // [sp+4h] [bp-180h]@16
  UIUtil ui; // [sp+20h] [bp-164h]@10
  int uiTop; // [sp+34h] [bp-150h]@4
  char **v35; // [sp+38h] [bp-14Ch]@12
  int uiLeft; // [sp+3Ch] [bp-148h]@4
  PgWinBut **v37; // [sp+40h] [bp-144h]@12
  int uiWidth; // [sp+44h] [bp-140h]@26
  PgWin *pkParent; // [sp+48h] [bp-13Ch]@1
  NiTexturePalette *pTexturePalette; // [sp+4Ch] [bp-138h]@1
  NiPointer<NiNode> spNode; // [sp+50h] [bp-134h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+54h] [bp-130h]@12
  char szDatabuff[260]; // [sp+70h] [bp-114h]@13
  unsigned int v44; // [sp+174h] [bp-10h]@1
  int v45; // [sp+180h] [bp-4h]@1
  int v46; // [sp+184h] [bp+0h]@1

  v44 = (unsigned int)&v46 ^ __security_cookie;
  v2 = this;
  pkParent = (PgWin *)this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v45 = 0;
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\KDScoreRealTime.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v4, 0, pkFrameWork, "PkRealTiemRankWin", 0) )
  {
    v5 = spNode.m_pObject;
    v45 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v45) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, uiLeft, uiTop);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v7 = MenuTexMgr::GetTexture(0x13u);
  UIUtil::CreateSpr(&ui, "Theme", v7);
  UIUtil::CreateSpr(&ui, "Plane", 0);
  *(_QWORD *)&v8.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v8.b = qword_A746E8;
  v9 = TextData2::Get(0x9E876F93u);
  v2->m_pWinTitleText = (PgWin *)UIUtil::CreateTextNoSpr(&ui, "WinTitle", v9, COERCE_D3DXCOLOR(v8.r), 5u);
  v2->m_pkMinimizeButton = UIUtil::CreateButton(&ui, 0, "Cls", 0, 3);
  v10 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    UIUtil::CreateBtn(&ui, 6u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v10);
  *(_QWORD *)&thisa.baseclass_0.___u0._Bx._Buf[8] = __PAIR__(
                                                      (unsigned int)TextData2::Get(0x98B19897u),
                                                      (unsigned int)TextData::Get(0x91B1F3EDu));
  thisa.baseclass_0._Mysize = (unsigned int)TextData2::Get(0x9EB18EEBu);
  thisa.baseclass_0._Myres = (unsigned int)&unk_9A5631;
  *(_DWORD *)&thisa.baseclass_0._Alval.baseclass_0.dummy[0] = &unk_9A5632;
  v11 = 1;
  v35 = (char **)&thisa.baseclass_0.___u0._Bx._Buf[8];
  v37 = v2->m_pkTitleButton;
  pTexturePalette = (NiTexturePalette *)5;
  do
  {
    szDatabuff[0] = 0;
    memset(&szDatabuff[1], 0, 0x103u);
    sprintf(szDatabuff, "Title%02d");
    v12 = (PgWin *)UIUtil::CreateButton(&ui, v11, szDatabuff, 0, 3);
    *v37 = (PgWinBut *)v12;
    v13 = (char *)(&thisa.baseclass_0._Alval + 3);
    do
      v14 = (v13++)[1];
    while ( v14 );
    *(_DWORD *)v13 = off_9A56B4;
    v15 = v35;
    *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxGreenColor;
    *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxGreenColor.b;
    UIUtil::CreateAttachedText(&ui, v12, *v35, COERCE_D3DXCOLOR(v16.r), 5u);
    ++v37;
    ++v11;
    v17 = pTexturePalette == (NiTexturePalette *)1;
    pTexturePalette = (NiTexturePalette *)((char *)pTexturePalette - 1);
    v35 = v15 + 1;
  }
  while ( !v17 );
  UIUtil::CreateSpr(&ui, "Win", 0);
  UIUtil::CreateSpr(&ui, "Lose", 0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v45) = 2;
  v18 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v18->nItemType = 1;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  LOBYTE(v45) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v18->vecNodeName,
    &thisa);
  LOBYTE(v45) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v18->pNode = spNode.m_pObject;
  v19 = 0;
  do
  {
    szDatabuff[0] = 0;
    memset(&szDatabuff[1], 0, 0x103u);
    pTexturePalette = (NiTexturePalette *)((char *)v19 + 1);
    sprintf(szDatabuff, "Column%02d");
    v20 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    v21 = (int)szDatabuff;
    v20->nItemType = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v22 = *(_BYTE *)v21++;
    while ( v22 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &thisa,
      szDatabuff,
      v21 - (_DWORD)&szDatabuff[1]);
    LOBYTE(v45) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      &v20->vecNodeName,
      &thisa);
    LOBYTE(v45) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v20->pNode = spNode.m_pObject;
    if ( v19 == (NiTexturePalette *)2 )
      v20->bAbbreviatable = 1;
    v19 = pTexturePalette;
  }
  while ( (unsigned int)pTexturePalette < 5 );
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiWidth, &uiHeight, 0);
  v24 = pkParent;
  LODWORD(pkParent[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][1]) = SlideListWin::CreateWin(
                                                                                    uiWidth - uiLeft,
                                                                                    uiHeight - uiTop - 2,
                                                                                    v23,
                                                                                    pkParent,
                                                                                    &kCreateInfo,
                                                                                    1u,
                                                                                    0);
  v25 = (PkRealTiemRankWin::RankInfo *)LODWORD(v24[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]);
  v26 = (PkRealTiemRankWin::RankInfo *)LODWORD(v24[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]);
  if ( v26 != v25 )
  {
    v27 = (PgWin *)std::_Move<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(
                     v25,
                     v25,
                     v26,
                     (std::_Nonscalar_ptr_iterator_tag)uiWidth);
    v28 = (NiTexturePalette *)LODWORD(v24[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]);
    pkParent = v27;
    pTexturePalette = v28;
    for ( i = v27; (NiTexturePalette *)i != v28; i = (PgWin *)((char *)i + 44) )
    {
      if ( i->baseclass_0.baseclass_0.baseclass_0.m_uiExtraDataSize >= 0x10 )
      {
        operator delete(i->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr);
        v27 = pkParent;
        v28 = pTexturePalette;
      }
      i->baseclass_0.baseclass_0.baseclass_0.m_uiExtraDataSize = 15;
      i->baseclass_0.baseclass_0.baseclass_0.m_ppkExtra = 0;
      LOBYTE(i->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr) = 0;
    }
    LODWORD(v24[1].baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]) = v27;
  }
  SlideListWin::RemoveAllList(LODWORD(v24[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][1]));
  SlideListWin::UpdateViewList(LODWORD(v24[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][1]));
  LOBYTE(v45) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)uiWidth);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v45) = 0;
  UIUtil::_UIUtil(&ui);
  v30 = spNode.m_pObject;
  v45 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v30 )
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
  return 1;
}
// 9A56B4: using guessed type int (__thiscall *off_9A56B4)(PgWin *pkParent, int pkFrameWork);
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0056E3B0) --------------------------------------------------------
PkRealTiemRankWin::RankInfo *__thiscall std::allocator<PkRealTiemRankWin::RankInfo>::allocate(std::allocator<PkRealTiemRankWin::RankInfo> *this, unsigned int _Count)
{
  PkRealTiemRankWin::RankInfo *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x5D1745D || (result = (PkRealTiemRankWin::RankInfo *)operator new(44 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0056E410) --------------------------------------------------------
PkRealTiemRankWin::RankInfo *__cdecl std::_Move<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  PkRealTiemRankWin::RankInfo *v4; // edi@2
  char *v5; // esi@2
  unsigned int v6; // ecx@3
  PkRealTiemRankWin::RankInfo *result; // eax@4

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = _Dest;
    v5 = (char *)&_First->m_unKill;
    do
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v5 - 32),
        0,
        0xFFFFFFFFu);
      v4->m_unScore = *((_DWORD *)v5 - 1);
      v4->m_unKill = *(_DWORD *)v5;
      v4->m_unDown = *((_DWORD *)v5 + 1);
      v6 = *((_DWORD *)v5 + 2);
      v5 += 44;
      v4->m_unRank = v6;
      ++v4;
    }
    while ( (PkRealTiemRankWin::RankInfo *)(v5 - 32) != _Last );
    result = v4;
  }
  return result;
}

//----- (0056E470) --------------------------------------------------------
void __cdecl std::_Destroy_range<std::allocator<PkRealTiemRankWin::RankInfo>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, std::allocator<PkRealTiemRankWin::RankInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  PkRealTiemRankWin::RankInfo *i; // esi@1

  for ( i = _First; i != _Last; ++i )
  {
    if ( i->m_strName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&i->m_strName.baseclass_0.___u0.baseclass_0.dummy[0]);
    i->m_strName.baseclass_0._Myres = 15;
    i->m_strName.baseclass_0._Mysize = 0;
    i->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
}

//----- (0056E4B0) --------------------------------------------------------
void __cdecl std::swap<PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_Left, PkRealTiemRankWin::RankInfo *_Right)
{
  unsigned int v2; // ecx@1
  unsigned int v3; // edx@1
  unsigned int v4; // eax@1
  bool v5; // cf@1
  unsigned int v6; // ecx@1
  unsigned int v7; // edx@1
  unsigned int v8; // eax@1
  PkRealTiemRankWin::RankInfo _Tmp; // [sp+0h] [bp-3Ch]@1
  unsigned int v10; // [sp+2Ch] [bp-10h]@1
  int v11; // [sp+38h] [bp-4h]@1
  int v12; // [sp+3Ch] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  _Tmp.m_strName.baseclass_0._Myres = 15;
  _Tmp.m_strName.baseclass_0._Mysize = 0;
  _Tmp.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Tmp.m_strName,
    &_Left->m_strName,
    0,
    0xFFFFFFFFu);
  v2 = _Left->m_unKill;
  v3 = _Left->m_unDown;
  _Tmp.m_unScore = _Left->m_unScore;
  v4 = _Left->m_unRank;
  _Tmp.m_unKill = v2;
  _Tmp.m_unDown = v3;
  _Tmp.m_unRank = v4;
  v11 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Left->m_strName,
    &_Right->m_strName,
    0,
    0xFFFFFFFFu);
  _Left->m_unScore = _Right->m_unScore;
  _Left->m_unKill = _Right->m_unKill;
  _Left->m_unDown = _Right->m_unDown;
  _Left->m_unRank = _Right->m_unRank;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Right->m_strName,
    &_Tmp.m_strName,
    0,
    0xFFFFFFFFu);
  v5 = _Tmp.m_strName.baseclass_0._Myres < 0x10;
  v6 = _Tmp.m_unKill;
  v7 = _Tmp.m_unDown;
  _Right->m_unScore = _Tmp.m_unScore;
  v8 = _Tmp.m_unRank;
  _Right->m_unKill = v6;
  _Right->m_unDown = v7;
  _Right->m_unRank = v8;
  if ( !v5 )
    operator delete(*(void **)&_Tmp);
}
// A85C00: using guessed type int __security_cookie;

//----- (0056E5A0) --------------------------------------------------------
void __cdecl std::_Push_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Top, PkRealTiemRankWin::RankInfo *_Val, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))
{
  int v5; // edi@1
  int i; // ebx@1
  PkRealTiemRankWin::RankInfo *v7; // esi@2
  PkRealTiemRankWin::RankInfo *v8; // edi@3
  PkRealTiemRankWin::RankInfo *v9; // edi@4

  v5 = _Hole;
  for ( i = (_Hole - 1) / 2; _Top < v5; i = (i - 1) / 2 )
  {
    v7 = &_First[i];
    if ( !_Pred(&_First[i], _Val) )
      break;
    v8 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_strName,
      &v7->m_strName,
      0,
      0xFFFFFFFFu);
    v8->m_unScore = v7->m_unScore;
    v8->m_unKill = v7->m_unKill;
    v8->m_unDown = v7->m_unDown;
    v8->m_unRank = v7->m_unRank;
    v5 = i;
  }
  v9 = &_First[v5];
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v9->m_strName,
    &_Val->m_strName,
    0,
    0xFFFFFFFFu);
  v9->m_unScore = _Val->m_unScore;
  v9->m_unKill = _Val->m_unKill;
  v9->m_unDown = _Val->m_unDown;
  v9->m_unRank = _Val->m_unRank;
}

//----- (0056E640) --------------------------------------------------------
PkRealTiemRankWin::RankInfo *__cdecl std::_Move_backward<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  PkRealTiemRankWin::RankInfo *v4; // edi@2
  char *v5; // esi@2
  PkRealTiemRankWin::RankInfo *result; // eax@4

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = _Dest;
    v5 = (char *)&_Last->m_unKill;
    do
    {
      v5 -= 44;
      --v4;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v5 - 32),
        0,
        0xFFFFFFFFu);
      v4->m_unScore = *((_DWORD *)v5 - 1);
      v4->m_unKill = *(_DWORD *)v5;
      v4->m_unDown = *((_DWORD *)v5 + 1);
      v4->m_unRank = *((_DWORD *)v5 + 2);
    }
    while ( (PkRealTiemRankWin::RankInfo *)(v5 - 32) != _First );
    result = v4;
  }
  return result;
}

//----- (0056E6A0) --------------------------------------------------------
void __cdecl std::_Push_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Top, PkRealTiemRankWin::RankInfo *_Val, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred)
{
  int v5; // edi@1
  int v6; // ebx@1
  PkRealTiemRankWin::RankInfo *v7; // esi@3
  PkRealTiemRankWin::RankInfo *v8; // edi@4
  PkRealTiemRankWin::RankInfo *v9; // esi@5
  PkRealTiemRankWin::RankInfo *v10; // edi@5
  std::exception this; // [sp+0h] [bp-18h]@8
  int i; // [sp+14h] [bp-4h]@1

  v5 = _Hole;
  v6 = (_Hole - 1) / 2;
  for ( i = 0; _Top < v5; v6 = (v6 - 1) / 2 )
  {
    if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      _Hole = (int)"call to empty boost::function";
      std::exception::exception(&this, (const char *const *)&_Hole);
      this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
      LOBYTE(i) = 1;
      boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
    }
    v7 = &_First[v6];
    if ( !_Pred.baseclass_0.invoker(
            (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
            &_First[v6],
            _Val) )
      break;
    v8 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_strName,
      &v7->m_strName,
      0,
      0xFFFFFFFFu);
    v8->m_unScore = v7->m_unScore;
    v8->m_unKill = v7->m_unKill;
    v8->m_unDown = v7->m_unDown;
    v8->m_unRank = v7->m_unRank;
    v5 = v6;
  }
  v9 = _Val;
  v10 = &_First[v5];
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v10->m_strName,
    &_Val->m_strName,
    0,
    0xFFFFFFFFu);
  v10->m_unScore = v9->m_unScore;
  v10->m_unKill = v9->m_unKill;
  v10->m_unDown = v9->m_unDown;
  v10->m_unRank = v9->m_unRank;
  i = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (0056E7D0) --------------------------------------------------------
PkRealTiemRankWin::RankInfo *__cdecl std::_Uninit_move<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo___std::allocator<PkRealTiemRankWin::RankInfo>_PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, std::allocator<PkRealTiemRankWin::RankInfo> *_Al, PkRealTiemRankWin::RankInfo *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  PkRealTiemRankWin::RankInfo *v6; // esi@1
  PkRealTiemRankWin::RankInfo *v7; // edi@1
  int v9; // [sp-10h] [bp-24h]@1
  PkRealTiemRankWin::RankInfo *_Next; // [sp+0h] [bp-14h]@1
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v11 = &v9;
  v6 = _Dest;
  v7 = _First;
  _Next = _Dest;
  v12 = 0;
  while ( v7 != _Last )
  {
    LOBYTE(v12) = 1;
    if ( v6 )
    {
      v6->m_strName.baseclass_0._Myres = 15;
      v6->m_strName.baseclass_0._Mysize = 0;
      v6->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v6->m_strName,
        &v7->m_strName,
        0,
        0xFFFFFFFFu);
      v6->m_unScore = v7->m_unScore;
      v6->m_unKill = v7->m_unKill;
      v6->m_unDown = v7->m_unDown;
      v6->m_unRank = v7->m_unRank;
    }
    ++v6;
    LOBYTE(v12) = 0;
    ++v7;
  }
  return v6;
}

//----- (0056E8A0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Bottom, PkRealTiemRankWin::RankInfo *_Val, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))
{
  int v5; // ebx@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1
  PkRealTiemRankWin::RankInfo *v9; // ebx@4
  PkRealTiemRankWin::RankInfo *v10; // edi@4
  PkRealTiemRankWin::RankInfo *v11; // esi@7
  PkRealTiemRankWin::RankInfo *v12; // ebx@7

  v5 = _Hole;
  v6 = _Bottom;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( _Pred(&_First[v7], &_First[v7 - 1]) )
        --v7;
      v9 = &_First[v5];
      v10 = &_First[v7];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v9->m_strName,
        &v10->m_strName,
        0,
        0xFFFFFFFFu);
      v9->m_unScore = v10->m_unScore;
      v9->m_unKill = v10->m_unKill;
      v9->m_unDown = v10->m_unDown;
      v9->m_unRank = v10->m_unRank;
      v5 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v6 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    v11 = &_First[v6 - 1];
    v12 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_strName,
      &_First[v6 - 1].m_strName,
      0,
      0xFFFFFFFFu);
    v12->m_unScore = v11->m_unScore;
    v12->m_unKill = v11->m_unKill;
    v12->m_unDown = v11->m_unDown;
    v12->m_unRank = v11->m_unRank;
    v5 = v6 - 1;
  }
  std::_Push_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
    _First,
    v5,
    _Hole,
    _Val,
    _Pred);
}

//----- (0056E970) --------------------------------------------------------
void __cdecl std::_Med3<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Mid, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred)
{
  std::exception this; // [sp+0h] [bp-1Ch]@2
  char *_What; // [sp+Ch] [bp-10h]@2
  int v6; // [sp+18h] [bp-4h]@1

  v6 = 0;
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 1;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Mid,
         _First) )
    std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _First);
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 2;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Last,
         _Mid) )
    std::swap<PkRealTiemRankWin::RankInfo>(_Last, _Mid);
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 3;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Mid,
         _First) )
    std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _First);
  v6 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (0056EAB0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, int _Hole, int _Bottom, PkRealTiemRankWin::RankInfo *_Val, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred)
{
  int v5; // ebx@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1
  PkRealTiemRankWin::RankInfo *v9; // ebx@5
  PkRealTiemRankWin::RankInfo *v10; // edi@5
  PkRealTiemRankWin::RankInfo *v11; // esi@8
  PkRealTiemRankWin::RankInfo *v12; // ebx@8
  boost::detail::function::any_pointer (__cdecl *v13)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-38h]@9
  int v14; // [sp-18h] [bp-34h]@9
  bool (__cdecl *v15)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-14h] [bp-30h]@9
  std::exception this; // [sp+0h] [bp-1Ch]@14
  int _Top; // [sp+Ch] [bp-10h]@1
  int v18; // [sp+18h] [bp-4h]@1

  v5 = _Hole;
  v6 = _Bottom;
  v7 = 2 * _Hole + 2;
  v18 = 0;
  _Top = _Hole;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        _Hole = (int)"call to empty boost::function";
        std::exception::exception(&this, (const char *const *)&_Hole);
        this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
        LOBYTE(v18) = 1;
        boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
      }
      if ( _Pred.baseclass_0.invoker(
             (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
             &_First[v7],
             &_First[v7 - 1]) )
        --v7;
      v9 = &_First[v5];
      v10 = &_First[v7];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v9->m_strName,
        &v10->m_strName,
        0,
        0xFFFFFFFFu);
      v9->m_unScore = v10->m_unScore;
      v9->m_unKill = v10->m_unKill;
      v9->m_unDown = v10->m_unDown;
      v9->m_unRank = v10->m_unRank;
      v5 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v6 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    v11 = &_First[v6 - 1];
    v12 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_strName,
      &_First[v6 - 1].m_strName,
      0,
      0xFFFFFFFFu);
    v12->m_unScore = v11->m_unScore;
    v12->m_unKill = v11->m_unKill;
    v12->m_unDown = v11->m_unDown;
    v12->m_unRank = v11->m_unRank;
    v5 = v6 - 1;
  }
  v13 = 0;
  v14 = 0;
  v15 = 0;
  _Bottom = (int)&v13;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v15 = _Pred.baseclass_0.invoker;
    v13 = _Pred.baseclass_0.baseclass_0.manager;
    v14 = (int)_Pred.baseclass_0.baseclass_0.manager(
                 (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                 0);
  }
  std::_Push_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
    _First,
    v5,
    _Top,
    _Val,
    *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v13);
  v18 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (0056EC30) --------------------------------------------------------
void __cdecl std::_Pop_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, PkRealTiemRankWin::RankInfo *_Dest, PkRealTiemRankWin::RankInfo *_Val, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal)
{
  boost::detail::function::any_pointer (__cdecl *v6)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-18h] [bp-24h]@1
  int v7; // [sp-14h] [bp-20h]@1
  bool (__cdecl *v8)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-10h] [bp-1Ch]@1
  int v9; // [sp+8h] [bp-4h]@1

  v9 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Dest->m_strName,
    &_First->m_strName,
    0,
    0xFFFFFFFFu);
  _Dest->m_unScore = _First->m_unScore;
  _Dest->m_unKill = _First->m_unKill;
  _Dest->m_unDown = _First->m_unDown;
  _Dest->m_unRank = _First->m_unRank;
  v6 = 0;
  v7 = 0;
  v8 = 0;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v8 = _Pred.baseclass_0.invoker;
    v6 = _Pred.baseclass_0.baseclass_0.manager;
    v7 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
    _First,
    0,
    _Last - _First,
    _Val,
    *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v6);
  v9 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (0056ED20) --------------------------------------------------------
void __cdecl std::_Median<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Mid, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))
{
  unsigned int v4; // eax@1
  int v5; // eax@2
  unsigned int v6; // edi@2
  PkRealTiemRankWin::RankInfo *v7; // eax@14
  PkRealTiemRankWin::RankInfo *v8; // edi@14
  int v9; // [sp+Ch] [bp-8h]@2
  PkRealTiemRankWin::RankInfo *_Right; // [sp+10h] [bp-4h]@2
  PkRealTiemRankWin::RankInfo *_Firsta; // [sp+1Ch] [bp+8h]@8
  PkRealTiemRankWin::RankInfo *_Firstb; // [sp+1Ch] [bp+8h]@14

  v4 = _Last - _First;
  if ( (signed int)v4 <= 40 )
  {
    if ( _Pred(_Mid, _First) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _First);
    if ( _Pred(_Last, _Mid) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Last, _Mid);
    if ( _Pred(_Mid, _First) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _First);
  }
  else
  {
    v5 = (signed int)(v4 + 1) / 8;
    v6 = 44 * v5;
    v9 = 2 * v5;
    _Right = &_First[v5];
    if ( _Pred(_Right, _First) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Right, _First);
    if ( _Pred(&_First[v9], _Right) )
      std::swap<PkRealTiemRankWin::RankInfo>(&_First[v9], _Right);
    if ( _Pred(_Right, _First) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Right, _First);
    _Firsta = &_Mid[-v6 / 0x2Cu];
    if ( _Pred(_Mid, &_Mid[-v6 / 0x2Cu]) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _Firsta);
    if ( _Pred(&_Mid[v6 / 0x2C], _Mid) )
      std::swap<PkRealTiemRankWin::RankInfo>(&_Mid[v6 / 0x2C], _Mid);
    if ( _Pred(_Mid, _Firsta) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _Firsta);
    v7 = &_Last[-v6 / 0x2Cu];
    v8 = &_Last[-(v9 * 44) / 0x2Cu];
    _Firstb = v7;
    if ( _Pred(v7, &_Last[-(v9 * 44) / 0x2Cu]) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Firstb, v8);
    if ( _Pred(_Last, _Firstb) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Last, _Firstb);
    if ( _Pred(_Firstb, v8) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Firstb, v8);
    if ( _Pred(_Mid, _Right) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _Right);
    if ( _Pred(_Firstb, _Mid) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Firstb, _Mid);
    if ( _Pred(_Mid, _Right) )
      std::swap<PkRealTiemRankWin::RankInfo>(_Mid, _Right);
  }
}

//----- (0056EF20) --------------------------------------------------------
void __cdecl std::_Make_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *), int *__formal, PkRealTiemRankWin::RankInfo *a5)
{
  int v5; // edi@1
  char *v6; // esi@2
  unsigned int v7; // eax@3
  unsigned int v8; // ecx@3
  unsigned int v9; // edx@3
  PkRealTiemRankWin::RankInfo _Val; // [sp+8h] [bp-3Ch]@3
  unsigned int v11; // [sp+34h] [bp-10h]@1
  int v12; // [sp+40h] [bp-4h]@3
  int v13; // [sp+44h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v5 = (signed int)(_Last - _First) / 2;
  if ( v5 > 0 )
  {
    v6 = (char *)&_First[v5].m_unKill;
    do
    {
      v6 -= 44;
      --v5;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 - 32),
        0,
        0xFFFFFFFFu);
      v7 = *(_DWORD *)v6;
      v8 = *((_DWORD *)v6 + 1);
      _Val.m_unScore = *((_DWORD *)v6 - 1);
      v9 = *((_DWORD *)v6 + 2);
      _Val.m_unKill = v7;
      _Val.m_unDown = v8;
      _Val.m_unRank = v9;
      v12 = 0;
      std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
        _First,
        v5,
        _Last - _First,
        &_Val,
        _Pred);
      v12 = -1;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
    }
    while ( v5 > 0 );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0056F020) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *), PkRealTiemRankWin::RankInfo *__formal)
{
  PkRealTiemRankWin::RankInfo *v4; // esi@1
  PkRealTiemRankWin::RankInfo *i; // ebx@2
  PkRealTiemRankWin::RankInfo *v6; // edi@3
  unsigned int v7; // edx@3
  unsigned int v8; // eax@3
  unsigned int v9; // ecx@3
  unsigned int v10; // ecx@4
  unsigned int v11; // edx@4
  unsigned int v12; // eax@4
  int j; // esi@5
  unsigned int v14; // eax@7
  unsigned int v15; // ecx@7
  unsigned int v16; // edx@7
  PkRealTiemRankWin::RankInfo _Val; // [sp+8h] [bp-3Ch]@3
  unsigned int v18; // [sp+34h] [bp-10h]@1
  int v19; // [sp+40h] [bp-4h]@3
  int v20; // [sp+44h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = i;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        &i->m_strName,
        0,
        0xFFFFFFFFu);
      v7 = i->m_unKill;
      v8 = i->m_unDown;
      _Val.m_unScore = i->m_unScore;
      v9 = i->m_unRank;
      _Val.m_unKill = v7;
      _Val.m_unDown = v8;
      _Val.m_unRank = v9;
      v19 = 0;
      if ( _Pred(&_Val, v4) )
      {
        std::_Move_backward<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(
          v4,
          i,
          i + 1,
          (std::_Nonscalar_ptr_iterator_tag)_First);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_strName,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v10 = _Val.m_unKill;
        v11 = _Val.m_unDown;
        v4->m_unScore = _Val.m_unScore;
        v12 = _Val.m_unRank;
        v4->m_unKill = v10;
        v4->m_unDown = v11;
        v4->m_unRank = v12;
      }
      else
      {
        for ( j = (int)&i[-1]; _Pred(&_Val, (PkRealTiemRankWin::RankInfo *)j); j -= 44 )
        {
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &v6->m_strName,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)j,
            0,
            0xFFFFFFFFu);
          v6->m_unScore = *(_DWORD *)(j + 28);
          v6->m_unKill = *(_DWORD *)(j + 32);
          v6->m_unDown = *(_DWORD *)(j + 36);
          v6->m_unRank = *(_DWORD *)(j + 40);
          v6 = (PkRealTiemRankWin::RankInfo *)j;
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v6->m_strName,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v14 = _Val.m_unKill;
        v15 = _Val.m_unDown;
        v4 = _First;
        v6->m_unScore = _Val.m_unScore;
        v16 = _Val.m_unRank;
        v6->m_unKill = v14;
        v6->m_unDown = v15;
        v6->m_unRank = v16;
      }
      v19 = -1;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0056F1C0) --------------------------------------------------------
#error "56F385: positive sp value has been found (funcsize=180)"

//----- (0056F390) --------------------------------------------------------
void __cdecl std::_Make_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal, PkRealTiemRankWin::RankInfo *a5)
{
  int v5; // ebx@1
  char *v6; // esi@2
  unsigned int v7; // eax@3
  unsigned int v8; // ecx@3
  unsigned int v9; // edx@3
  boost::detail::function::any_pointer (__cdecl *v10)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-64h]@3
  int v11; // [sp-18h] [bp-60h]@3
  bool (__cdecl *v12)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-14h] [bp-5Ch]@3
  unsigned int v13; // [sp-10h] [bp-58h]@1
  boost::detail::function::any_pointer (__cdecl **v14)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-48h]@3
  int _Bottom; // [sp+4h] [bp-44h]@1
  PkRealTiemRankWin::RankInfo *v16; // [sp+8h] [bp-40h]@1
  PkRealTiemRankWin::RankInfo _Val; // [sp+Ch] [bp-3Ch]@3
  unsigned int v18; // [sp+38h] [bp-10h]@1
  int v19; // [sp+44h] [bp-4h]@1
  int v20; // [sp+48h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v13 = (unsigned int)&v20 ^ __security_cookie;
  v16 = _First;
  _Bottom = _Last - _First;
  v5 = _Bottom / 2;
  v19 = 0;
  if ( _Bottom / 2 > 0 )
  {
    v6 = (char *)&_First[v5].m_unKill;
    do
    {
      v6 -= 44;
      --v5;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 - 32),
        0,
        0xFFFFFFFFu);
      v7 = *(_DWORD *)v6;
      v8 = *((_DWORD *)v6 + 1);
      _Val.m_unScore = *((_DWORD *)v6 - 1);
      v9 = *((_DWORD *)v6 + 2);
      _Val.m_unKill = v7;
      _Val.m_unDown = v8;
      _Val.m_unRank = v9;
      v10 = 0;
      v11 = 0;
      v12 = 0;
      LOBYTE(v19) = 1;
      v14 = &v10;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v12 = _Pred.baseclass_0.invoker;
        v10 = _Pred.baseclass_0.baseclass_0.manager;
        v11 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
        v16,
        v5,
        _Bottom,
        &_Val,
        *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v10);
      LOBYTE(v19) = 0;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    while ( v5 > 0 );
  }
  v19 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// A85C00: using guessed type int __security_cookie;

//----- (0056F4F0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>_PkRealTiemRankWin::RankInfo>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, PkRealTiemRankWin::RankInfo *__formal)
{
  PkRealTiemRankWin::RankInfo *v4; // edi@1
  PkRealTiemRankWin::RankInfo *i; // ebx@2
  int v6; // esi@3
  unsigned int v7; // ecx@3
  unsigned int v8; // edx@3
  unsigned int v9; // eax@3
  unsigned int v10; // ecx@5
  unsigned int v11; // edx@5
  unsigned int v12; // eax@5
  int j; // edi@6
  unsigned int v14; // eax@10
  unsigned int v15; // ecx@10
  unsigned int v16; // edx@10
  boost::bad_function_call e; // [sp+0h] [bp-60h]@19
  std::exception this; // [sp+Ch] [bp-54h]@17
  PkRealTiemRankWin::RankInfo *v19; // [sp+18h] [bp-48h]@1
  char *_What; // [sp+1Ch] [bp-44h]@17
  int v21; // [sp+20h] [bp-40h]@5
  PkRealTiemRankWin::RankInfo _Val; // [sp+24h] [bp-3Ch]@3
  unsigned int v23; // [sp+50h] [bp-10h]@1
  int v24; // [sp+5Ch] [bp-4h]@1
  int v25; // [sp+60h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v4 = _First;
  v19 = _First;
  v24 = 0;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0 )
    {
      v6 = (int)i;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        &i->m_strName,
        0,
        0xFFFFFFFFu);
      v7 = i->m_unKill;
      v8 = i->m_unDown;
      _Val.m_unScore = i->m_unScore;
      v9 = i->m_unRank;
      _Val.m_unKill = v7;
      _Val.m_unDown = v8;
      _Val.m_unRank = v9;
      LOBYTE(v24) = 1;
      if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        _What = "call to empty boost::function";
        std::exception::exception(&this, (const char *const *)&_What);
        this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
        LOBYTE(v24) = 2;
        boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
      }
      if ( _Pred.baseclass_0.invoker(
             (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
             &_Val,
             v4) )
      {
        std::_Move_backward<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo__>(
          v4,
          i,
          i + 1,
          (std::_Nonscalar_ptr_iterator_tag)v21);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_strName,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v10 = _Val.m_unKill;
        v11 = _Val.m_unDown;
        v4->m_unScore = _Val.m_unScore;
        v12 = _Val.m_unRank;
        v4->m_unKill = v10;
        v4->m_unDown = v11;
        v4->m_unRank = v12;
      }
      else
      {
        for ( j = (int)&i->m_unKill; ; v6 = j - 32 )
        {
          j -= 44;
          if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
          {
            v21 = (int)"call to empty boost::function";
            std::exception::exception(&e.baseclass_0.baseclass_0, (const char *const *)&v21);
            e.baseclass_0.baseclass_0.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
            LOBYTE(v24) = 3;
            boost::throw_exception<boost::bad_function_call>(&e);
          }
          if ( !_Pred.baseclass_0.invoker(
                  (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                  &_Val,
                  (PkRealTiemRankWin::RankInfo *)(j - 32)) )
            break;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(j - 32),
            0,
            0xFFFFFFFFu);
          *(_DWORD *)(v6 + 28) = *(_DWORD *)(j - 4);
          *(_DWORD *)(v6 + 32) = *(_DWORD *)j;
          *(_DWORD *)(v6 + 36) = *(_DWORD *)(j + 4);
          *(_DWORD *)(v6 + 40) = *(_DWORD *)(j + 8);
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v14 = _Val.m_unKill;
        v15 = _Val.m_unDown;
        v4 = v19;
        *(_DWORD *)(v6 + 28) = _Val.m_unScore;
        v16 = _Val.m_unRank;
        *(_DWORD *)(v6 + 32) = v14;
        *(_DWORD *)(v6 + 36) = v15;
        *(_DWORD *)(v6 + 40) = v16;
      }
      LOBYTE(v24) = 0;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
      ++i;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
    }
  }
  v24 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0056F710) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *), PkRealTiemRankWin::RankInfo *__formal)
{
  unsigned int v4; // edx@1
  unsigned int v5; // eax@1
  unsigned int v6; // ecx@1
  PkRealTiemRankWin::RankInfo _Val; // [sp+4h] [bp-3Ch]@1
  unsigned int v8; // [sp+30h] [bp-10h]@1
  int v9; // [sp+3Ch] [bp-4h]@1
  int v10; // [sp+40h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  _Val.m_strName.baseclass_0._Myres = 15;
  _Val.m_strName.baseclass_0._Mysize = 0;
  _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Val.m_strName,
    &_Last[-1].m_strName,
    0,
    0xFFFFFFFFu);
  v4 = *(&_Last->m_unKill - 11);
  v5 = *(&_Last->m_unDown - 11);
  _Val.m_unScore = *(&_Last->m_unScore - 11);
  v6 = *(&_Last->m_unRank - 11);
  _Val.m_unKill = v4;
  _Val.m_unDown = v5;
  _Val.m_unRank = v6;
  v9 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Last[-1].m_strName,
    &_First->m_strName,
    0,
    0xFFFFFFFFu);
  *(&_Last->m_unScore - 11) = _First->m_unScore;
  *(&_Last->m_unKill - 11) = _First->m_unKill;
  *(&_Last->m_unDown - 11) = _First->m_unDown;
  *(&_Last->m_unRank - 11) = _First->m_unRank;
  std::_Adjust_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
    _First,
    0,
    (signed int)((char *)_Last - (char *)_First - 44) / 44,
    &_Val,
    _Pred);
  if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
}
// A85C00: using guessed type int __security_cookie;

//----- (0056F810) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred, PkRealTiemRankWin::RankInfo *__formal)
{
  unsigned int v4; // edx@1
  unsigned int v5; // eax@1
  unsigned int v6; // ecx@1
  boost::detail::function::any_pointer (__cdecl *v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-20h] [bp-64h]@1
  int v8; // [sp-1Ch] [bp-60h]@1
  bool (__cdecl *v9)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-18h] [bp-5Ch]@1
  int *v10; // [sp-14h] [bp-58h]@1
  unsigned int v11; // [sp-10h] [bp-54h]@1
  boost::detail::function::any_pointer (__cdecl **v12)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-44h]@1
  PkRealTiemRankWin::RankInfo *v13; // [sp+4h] [bp-40h]@1
  PkRealTiemRankWin::RankInfo _Val; // [sp+8h] [bp-3Ch]@1
  unsigned int v15; // [sp+34h] [bp-10h]@1
  int v16; // [sp+40h] [bp-4h]@1
  int v17; // [sp+44h] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v11 = (unsigned int)&v17 ^ __security_cookie;
  v13 = _First;
  v16 = 0;
  _Val.m_strName.baseclass_0._Myres = 15;
  _Val.m_strName.baseclass_0._Mysize = 0;
  _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Val.m_strName,
    &_Last[-1].m_strName,
    0,
    0xFFFFFFFFu);
  v4 = *(&_Last->m_unKill - 11);
  v5 = *(&_Last->m_unDown - 11);
  _Val.m_unScore = *(&_Last->m_unScore - 11);
  v6 = *(&_Last->m_unRank - 11);
  _Val.m_unKill = v4;
  _Val.m_unDown = v5;
  _Val.m_unRank = v6;
  v10 = 0;
  v7 = 0;
  v8 = 0;
  v9 = 0;
  LOBYTE(v16) = 1;
  v12 = &v7;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v9 = _Pred.baseclass_0.invoker;
    v7 = _Pred.baseclass_0.baseclass_0.manager;
    v8 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Pop_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
    v13,
    _Last - 1,
    _Last - 1,
    &_Val,
    *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v7,
    v10);
  if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.m_strName.baseclass_0._Myres = 15;
  _Val.m_strName.baseclass_0._Mysize = 0;
  _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v16 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// A85C00: using guessed type int __security_cookie;

//----- (0056F920) --------------------------------------------------------
std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> *__cdecl std::_Unguarded_partition<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> *result, PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))
{
  PkRealTiemRankWin::RankInfo *v4; // esi@1
  int v5; // ebx@1
  unsigned int v6; // eax@10
  PkRealTiemRankWin::RankInfo *v7; // edi@10
  PkRealTiemRankWin::RankInfo *v8; // ST08_4@14
  bool v9; // zf@17
  PkRealTiemRankWin::RankInfo *v10; // ebx@18
  PkRealTiemRankWin::RankInfo *v11; // ST0C_4@28
  PkRealTiemRankWin::RankInfo *v12; // ST08_4@28
  PkRealTiemRankWin::RankInfo *v13; // eax@29
  std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> *v14; // eax@34
  int _Plast; // [sp+Ch] [bp-8h]@1
  int _Glast; // [sp+10h] [bp-4h]@2
  unsigned int _Glasta; // [sp+10h] [bp-4h]@10

  v4 = &_First[(signed int)(_Last - _First) / 2];
  std::_Median<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = (int)&v4[1];
  _Plast = (int)&v4[1];
  if ( _First < v4 )
  {
    do
    {
      _Glast = (int)&v4[-1];
      if ( _Pred(v4 - 1, v4) )
        break;
      if ( _Pred(v4, (PkRealTiemRankWin::RankInfo *)_Glast) )
        break;
      --v4;
    }
    while ( (unsigned int)_First < _Glast );
  }
  if ( v5 < (unsigned int)_Last )
  {
    do
    {
      if ( _Pred((PkRealTiemRankWin::RankInfo *)v5, v4) )
        break;
      if ( _Pred(v4, (PkRealTiemRankWin::RankInfo *)v5) )
        break;
      v5 += 44;
    }
    while ( v5 < (unsigned int)_Last );
    _Plast = v5;
  }
  v6 = (unsigned int)v4;
  v7 = (PkRealTiemRankWin::RankInfo *)v5;
  for ( _Glasta = (unsigned int)v4; ; v6 = _Glasta )
  {
    while ( 1 )
    {
      if ( v7 < _Last )
      {
        do
        {
          if ( !_Pred(v4, v7) )
          {
            if ( _Pred(v7, v4) )
              break;
            v8 = (PkRealTiemRankWin::RankInfo *)v5;
            v5 += 44;
            std::swap<PkRealTiemRankWin::RankInfo>(v8, v7);
          }
          ++v7;
        }
        while ( v7 < _Last );
        v6 = _Glasta;
        _Plast = v5;
      }
      v9 = v6 == (_DWORD)_First;
      if ( v6 > (unsigned int)_First )
      {
        v10 = (PkRealTiemRankWin::RankInfo *)(v6 - 44);
        do
        {
          if ( !_Pred(v10, v4) )
          {
            if ( _Pred(v4, v10) )
              break;
            --v4;
            std::swap<PkRealTiemRankWin::RankInfo>(v4, v10);
          }
          --v10;
          _Glasta -= 44;
        }
        while ( (unsigned int)_First < _Glasta );
        v6 = _Glasta;
        v5 = _Plast;
        v9 = _Glasta == (_DWORD)_First;
      }
      if ( v9 )
        break;
      v13 = (PkRealTiemRankWin::RankInfo *)(v6 - 44);
      _Glasta = (unsigned int)v13;
      if ( v7 == _Last )
      {
        --v4;
        if ( v13 != v4 )
          std::swap<PkRealTiemRankWin::RankInfo>(v13, v4);
        v5 -= 44;
        _Plast = v5;
        std::swap<PkRealTiemRankWin::RankInfo>(v4, (PkRealTiemRankWin::RankInfo *)v5);
        v6 = _Glasta;
      }
      else
      {
        std::swap<PkRealTiemRankWin::RankInfo>(v7, v13);
        v6 = _Glasta;
        ++v7;
      }
    }
    if ( v7 == _Last )
      break;
    if ( (PkRealTiemRankWin::RankInfo *)v5 != v7 )
      std::swap<PkRealTiemRankWin::RankInfo>(v4, (PkRealTiemRankWin::RankInfo *)v5);
    v11 = v7;
    v5 += 44;
    v12 = v4;
    _Plast = v5;
    ++v4;
    ++v7;
    std::swap<PkRealTiemRankWin::RankInfo>(v12, v11);
  }
  v14 = result;
  result->baseclass_0.first = v4;
  result->baseclass_0.second = (PkRealTiemRankWin::RankInfo *)v5;
  return v14;
}

//----- (0056FAE0) --------------------------------------------------------
#error "56FEBA: positive sp value has been found (funcsize=332)"

//----- (0056FEC0) --------------------------------------------------------
void __cdecl std::make_heap<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred)
{
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-24h] [bp-30h]@2
  int v4; // [sp-20h] [bp-2Ch]@2
  bool (__cdecl *v5)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-1Ch] [bp-28h]@2
  int *v6; // [sp-18h] [bp-24h]@2
  PkRealTiemRankWin::RankInfo *v7; // [sp-14h] [bp-20h]@2
  int v8; // [sp+8h] [bp-4h]@1

  v8 = 0;
  if ( (signed int)(_Last - _First) > 1 )
  {
    v7 = 0;
    v6 = 0;
    v3 = 0;
    v4 = 0;
    v5 = 0;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      v5 = _Pred.baseclass_0.invoker;
      v3 = _Pred.baseclass_0.baseclass_0.manager;
      v4 = (int)_Pred.baseclass_0.baseclass_0.manager(
                  (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                  0);
    }
    std::_Make_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
      _First,
      _Last,
      *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v3,
      v6,
      v7);
  }
  v8 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (0056FF80) --------------------------------------------------------
void __cdecl std::_Insertion_sort<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred)
{
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-18h] [bp-28h]@1
  int v4; // [sp-14h] [bp-24h]@1
  bool (__cdecl *v5)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-10h] [bp-20h]@1
  PkRealTiemRankWin::RankInfo *v6; // [sp-Ch] [bp-1Ch]@1
  boost::detail::function::any_pointer (__cdecl **v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-10h]@1
  int v8; // [sp+Ch] [bp-4h]@1

  v6 = 0;
  v3 = 0;
  v4 = 0;
  v5 = 0;
  v8 = 0;
  v7 = &v3;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v5 = _Pred.baseclass_0.invoker;
    v3 = _Pred.baseclass_0.baseclass_0.manager;
    v4 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Insertion_sort1<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>_PkRealTiemRankWin::RankInfo>(
    _First,
    _Last,
    *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v3,
    v6);
  v8 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (00570030) --------------------------------------------------------
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::_vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this)
{
  std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *v1; // esi@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    std::_Destroy_range<std::allocator<PkRealTiemRankWin::RankInfo>>(
      *(PkRealTiemRankWin::RankInfo **)&this->baseclass_0.___u0.baseclass_0.dummy[0],
      this->baseclass_0._Mylast,
      &this->baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0._Mylast = 0;
  v1->baseclass_0._Myend = 0;
}

//----- (00570080) --------------------------------------------------------
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::reserve(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this, unsigned int _Count)
{
  std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *v2; // esi@1
  void *v3; // eax@4
  PkRealTiemRankWin::RankInfo *v4; // ST04_4@4
  PkRealTiemRankWin::RankInfo *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // ecx@6
  char *v9; // edi@6
  int v10; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v12; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@4

  v12 = &v10;
  v2 = this;
  if ( _Count > 0x5D1745D )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 44 < _Count )
  {
    v3 = std::allocator<PkRealTiemRankWin::RankInfo>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(PkRealTiemRankWin::RankInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v13 = 0;
    std::_Uninit_move<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo___std::allocator<PkRealTiemRankWin::RankInfo>_PkRealTiemRankWin::RankInfo>(
      v5,
      v4,
      (PkRealTiemRankWin::RankInfo *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((unsigned __int64)(780903145i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      std::_Destroy_range<std::allocator<PkRealTiemRankWin::RankInfo>>(
        *(PkRealTiemRankWin::RankInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0],
        v2->baseclass_0._Mylast,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Count);
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v8 = _Ptr;
    v9 = &_Ptr[44 * v7];
    v2->baseclass_0._Myend = (PkRealTiemRankWin::RankInfo *)&_Ptr[44 * _Count];
    v2->baseclass_0._Mylast = (PkRealTiemRankWin::RankInfo *)v9;
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (00570190) --------------------------------------------------------
void __cdecl std::_Sort_heap<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))
{
  PkRealTiemRankWin::RankInfo *v3; // esi@1
  signed int i; // edi@1

  v3 = _Last;
  for ( i = (char *)_Last - (char *)_First; i / 44 > 1; --v3 )
  {
    std::_Pop_heap_0<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
      _First,
      v3,
      _Pred,
      0);
    i -= 44;
  }
}

//----- (005701F0) --------------------------------------------------------
void __cdecl std::_Sort_heap<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred)
{
  int v3; // ebx@3
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edi@3
  signed int v5; // edx@9
  boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > v6; // [sp-20h] [bp-40h]@5
  int v7; // [sp-1Ch] [bp-3Ch]@5
  bool (__cdecl *v8)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-18h] [bp-38h]@5
  PkRealTiemRankWin::RankInfo *v9; // [sp-14h] [bp-34h]@5
  int v10; // [sp+0h] [bp-20h]@3
  int v11; // [sp+4h] [bp-1Ch]@3
  bool (__cdecl *v12)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp+8h] [bp-18h]@3
  boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *v13; // [sp+Ch] [bp-14h]@5
  unsigned int v14; // [sp+10h] [bp-10h]@2
  int v15; // [sp+1Ch] [bp-4h]@1

  v15 = 0;
  if ( (signed int)(_Last - _First) > 1 )
  {
    v14 = (char *)_Last - (char *)_First;
    do
    {
      v3 = 0;
      v4 = 0;
      v10 = 0;
      v11 = 0;
      v12 = 0;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v4 = _Pred.baseclass_0.baseclass_0.manager;
        v12 = _Pred.baseclass_0.invoker;
        v10 = (signed int)_Pred.baseclass_0.baseclass_0.manager;
        v3 = (int)_Pred.baseclass_0.baseclass_0.manager(
                    (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                    0);
        v11 = v3;
      }
      v9 = 0;
      LOBYTE(v15) = 1;
      v13 = &v6;
      v6.baseclass_0.baseclass_0.manager = 0;
      v7 = 0;
      v8 = 0;
      if ( v4 )
      {
        v8 = v12;
        v6.baseclass_0.baseclass_0.manager = v4;
        v7 = (int)v4((boost::detail::function::any_pointer)v3, 0).obj_ptr;
      }
      std::_Pop_heap_0<PkRealTiemRankWin::RankInfo___PkRealTiemRankWin::RankInfo_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
        _First,
        _Last,
        v6,
        v9);
      LOBYTE(v15) = 0;
      if ( v4 )
        v11 = (int)v4((boost::detail::function::any_pointer)v3, destroy_functor_tag).obj_ptr;
      --_Last;
      v5 = (signed int)((unsigned __int64)(780903145i64 * (signed int)(v14 - 44)) >> 32) >> 3;
      v14 -= 44;
      v10 = 0;
      v12 = 0;
    }
    while ( (signed int)(v5 + ((unsigned int)v5 >> 31)) > 1 );
  }
  v15 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (00570320) --------------------------------------------------------
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::_Reserve(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 44;
  if ( 97612893 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 44;
  if ( v3 > v4 )
  {
    if ( 97612893 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::reserve(this, v5);
  }
}

//----- (005703A0) --------------------------------------------------------
#error "57043E: positive sp value has been found (funcsize=52)"

//----- (00570440) --------------------------------------------------------
void *__thiscall PkRealTiemRankWin::_scalar_deleting_destructor_(PkRealTiemRankWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PkRealTiemRankWin::_PkRealTiemRankWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00570470) --------------------------------------------------------
void __thiscall std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::push_back(std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *this, PkRealTiemRankWin::RankInfo *_Val)
{
  std::vector<PkRealTiemRankWin::RankInfo,std::allocator<PkRealTiemRankWin::RankInfo> > *v2; // ebx@1
  PkRealTiemRankWin::RankInfo *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  PkRealTiemRankWin::RankInfo *v6; // edi@5
  int v7; // esi@5
  PkRealTiemRankWin::RankInfo *v8; // edi@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::_Reserve(v2, 1u);
    v8 = v2->baseclass_0._Mylast;
    if ( v8 )
    {
      v8->m_strName.baseclass_0._Myres = 15;
      v8->m_strName.baseclass_0._Mysize = 0;
      v8->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v8->m_strName,
        &_Val->m_strName,
        0,
        0xFFFFFFFFu);
      v8->m_unScore = _Val->m_unScore;
      v8->m_unKill = _Val->m_unKill;
      v8->m_unDown = _Val->m_unDown;
      v8->m_unRank = _Val->m_unRank;
    }
  }
  else
  {
    v4 = (signed int)((unsigned __int64)(780903145i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<PkRealTiemRankWin::RankInfo_std::allocator<PkRealTiemRankWin::RankInfo>>::_Reserve(v2, 1u);
    v6 = v2->baseclass_0._Mylast;
    v7 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 44 * v5;
    if ( v6 )
    {
      v6->m_strName.baseclass_0._Myres = 15;
      v6->m_strName.baseclass_0._Mysize = 0;
      v6->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v6->m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v7,
        0,
        0xFFFFFFFFu);
      v6->m_unScore = *(_DWORD *)(v7 + 28);
      v6->m_unKill = *(_DWORD *)(v7 + 32);
      v6->m_unDown = *(_DWORD *)(v7 + 36);
      v6->m_unRank = *(_DWORD *)(v7 + 40);
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (00570580) --------------------------------------------------------
void __cdecl std::_Sort<PkRealTiemRankWin::RankInfo___int_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, int _Ideal, bool (__cdecl *_Pred)(PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))
{
  PkRealTiemRankWin::RankInfo *v4; // ebx@1
  PkRealTiemRankWin::RankInfo *v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
      &_Mid,
      v4,
      v5,
      _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( ((signed int)_Mid.baseclass_0.first - (signed int)v4) / 44 >= (signed int)(v5 - _Mid.baseclass_0.second) )
    {
      std::_Sort<PkRealTiemRankWin::RankInfo___int_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
        _Mid.baseclass_0.second,
        v5,
        v7,
        _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<PkRealTiemRankWin::RankInfo___int_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
        v4,
        _Mid.baseclass_0.first,
        v7,
        _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____PkRealTiemRankWin::RankInfo>(
        v4,
        v5,
        _Pred,
        0);
  }
  else
  {
    if ( (signed int)(v5 - v4) > 1 )
      std::_Make_heap<PkRealTiemRankWin::RankInfo___int_PkRealTiemRankWin::RankInfo_bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
        v4,
        v5,
        _Pred,
        0,
        0);
    std::_Sort_heap<PkRealTiemRankWin::RankInfo___bool____cdecl____PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const___>(
      v4,
      v5,
      _Pred);
  }
}

//----- (005706C0) --------------------------------------------------------
void __cdecl std::_Sort<PkRealTiemRankWin::RankInfo___int_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(PkRealTiemRankWin::RankInfo *_First, PkRealTiemRankWin::RankInfo *_Last, int _Ideal, boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > _Pred)
{
  PkRealTiemRankWin::RankInfo *v4; // edi@1
  PkRealTiemRankWin::RankInfo *v5; // ebx@1
  boost::detail::function::functor_manager_operation_type v6; // ecx@1
  int v7; // eax@1
  signed int v8; // esi@2
  boost::detail::function::any_pointer (__cdecl *v9)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-30h]@4
  int v10; // [sp-18h] [bp-2Ch]@4
  bool (__cdecl *v11)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *); // [sp-14h] [bp-28h]@4
  std::pair<PkRealTiemRankWin::RankInfo *,PkRealTiemRankWin::RankInfo *> _Mid; // [sp+0h] [bp-14h]@6
  int v13; // [sp+10h] [bp-4h]@1

  v4 = _Last;
  v5 = _First;
  v6 = 0;
  v7 = _Last - _First;
  v13 = 0;
  if ( v7 <= 32 )
    goto LABEL_14;
  v8 = _Ideal;
  while ( v8 > v6 )
  {
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::_Unguarded_partition<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
      &_Mid,
      v5,
      v4,
      *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v9);
    v8 = v8 / 2 / 2 + v8 / 2;
    v9 = 0;
    v10 = 0;
    v11 = 0;
    if ( ((signed int)_Mid.baseclass_0.first - (signed int)v5) / 44 >= (signed int)(v4 - _Mid.baseclass_0.second) )
    {
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v11 = _Pred.baseclass_0.invoker;
        v9 = _Pred.baseclass_0.baseclass_0.manager;
        v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Sort<PkRealTiemRankWin::RankInfo___int_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
        _Mid.baseclass_0.second,
        v4,
        v8,
        *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v9);
      v4 = _Mid.baseclass_0.first;
    }
    else
    {
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v11 = _Pred.baseclass_0.invoker;
        v9 = _Pred.baseclass_0.baseclass_0.manager;
        v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Sort<PkRealTiemRankWin::RankInfo___int_boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
        v5,
        _Mid.baseclass_0.first,
        v8,
        *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v9);
      v5 = _Mid.baseclass_0.second;
    }
    v7 = v4 - v5;
    v6 = 0;
    if ( v7 <= 32 )
      goto LABEL_14;
  }
  if ( v7 <= 32 )
  {
LABEL_14:
    if ( v7 <= 1 )
      goto LABEL_19;
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::_Insertion_sort<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v9);
  }
  else
  {
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, PkRealTiemRankWin::RankInfo *, PkRealTiemRankWin::RankInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::make_heap<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v9);
    v9 = 0;
    v10 = 0;
    v11 = 0;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   0);
    }
    std::sort_heap<PkRealTiemRankWin::RankInfo___boost::function<bool___cdecl__PkRealTiemRankWin::RankInfo_const___PkRealTiemRankWin::RankInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &),std::allocator<void> > *)&v9);
  }
  v6 = 0;
LABEL_19:
  v13 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (00570920) --------------------------------------------------------
#error "5709D6: positive sp value has been found (funcsize=63)"

//----- (005709E0) --------------------------------------------------------
void __thiscall PlayGuideMinWin::PlayGuideMinWin(PlayGuideMinWin *this)
{
  PlayGuideMinWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PlayGuideMinWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PlayGuideMinWin::_vftable_;
}
// 9A5BA0: using guessed type int (__stdcall *PlayGuideMinWin___vftable_)(int uiFlags);
// 9A5BBC: using guessed type int (__thiscall *PlayGuideMinWin___vftable_)(void *p, char);

//----- (00570A00) --------------------------------------------------------
void __thiscall PlayGuideMinWin::_PlayGuideMinWin(PlayGuideMinWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PlayGuideMinWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PlayGuideMinWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A5BA0: using guessed type int (__stdcall *PlayGuideMinWin___vftable_)(int uiFlags);
// 9A5BBC: using guessed type int (__thiscall *PlayGuideMinWin___vftable_)(void *p, char);

//----- (00570A20) --------------------------------------------------------
void __thiscall PlayGuideMinWin::OnCommand(PlayGuideMinWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)();
}

//----- (00570A40) --------------------------------------------------------
bool __thiscall PlayGuideWin::sTextList::Close(PlayGuideWin::sTextList *this)
{
  PlayGuideWin::sTextList *v1; // esi@1
  int v2; // edi@1
  int v3; // eax@1
  int v4; // edx@1
  PgWinBut *v5; // ecx@2
  int v6; // eax@2

  v1 = this;
  v2 = 2
     * ((int (*)(void))this->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v3 = ((int (*)(void))v1->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v4 = v1->m_iDefaultYPos;
  if ( v3 > v4 )
  {
    v5 = v1->m_pkButWin;
    v6 = v3 - v2;
    if ( v6 < v4 )
      goto LABEL_3;
LABEL_6:
    ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
    return ((int (*)(void))v1->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)() == v1->m_iDefaultYPos;
  }
  if ( v3 >= v4 )
    return ((int (*)(void))v1->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)() == v1->m_iDefaultYPos;
  v5 = v1->m_pkButWin;
  v6 = v2 + v3;
  if ( v6 <= v4 )
    goto LABEL_6;
LABEL_3:
  ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v1->m_iDefaultYPos);
  return ((int (*)(void))v1->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)() == v1->m_iDefaultYPos;
}

//----- (00570AB0) --------------------------------------------------------
bool __thiscall PlayGuideWin::sTextList::Up(PlayGuideWin::sTextList *this, const int iTopYPos)
{
  PlayGuideWin::sTextList *v2; // esi@1
  int v3; // edi@1
  const int v4; // eax@1
  PgWinBut *v5; // ecx@2
  const int v6; // eax@2

  v2 = this;
  v3 = 2
     * ((int (*)(void))this->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v4 = ((int (*)(void))v2->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  if ( v4 > iTopYPos )
  {
    v5 = v2->m_pkButWin;
    v6 = v4 - v3;
    if ( v6 >= iTopYPos )
      ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
    else
      ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(iTopYPos);
  }
  return ((int (*)(void))v2->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)() == iTopYPos;
}

//----- (00570B20) --------------------------------------------------------
bool __thiscall PlayGuideWin::sTextList::Down(PlayGuideWin::sTextList *this, const int iBottomYPos)
{
  PlayGuideWin::sTextList *v2; // esi@1
  int v3; // edi@1
  const int v4; // eax@1
  PgWinBut *v5; // ecx@2
  const int v6; // eax@2

  v2 = this;
  v3 = 2
     * ((int (*)(void))this->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v4 = ((int (*)(void))v2->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  if ( v4 < iBottomYPos )
  {
    v5 = v2->m_pkButWin;
    v6 = v3 + v4;
    if ( v6 <= iBottomYPos )
      ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
    else
      ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(iBottomYPos);
  }
  return ((int (*)(void))v2->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)() == iBottomYPos;
}

//----- (00570B90) --------------------------------------------------------
void __thiscall PlayGuideWin::sTextList::Reset(PlayGuideWin::sTextList *this)
{
  PlayGuideWin::sTextList *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v1->m_iDefaultYPos);
}

//----- (00570BD0) --------------------------------------------------------
void __thiscall PlayGuideWin::OnClose(PlayGuideWin *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.5);
}

//----- (00570C00) --------------------------------------------------------
void __thiscall PlayGuideWin::AdjustFocus(PlayGuideWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::AdjustFocus((GameFrameWork *)v1);
}

//----- (00570C20) --------------------------------------------------------
void __thiscall PlayGuideMinWin::OnClick(PlayGuideMinWin *this)
{
  PgFrameWork *v1; // esi@1
  unsigned int v2; // ecx@2

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
  {
    v2 = v1[135].baseclass_0.m_uiMessageNum;
    if ( v2 )
    {
      if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v2 + 260))() )
        GameFrameWork::ClosePlayGuideWin((GameFrameWork *)v1);
      else
        GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v1);
    }
  }
}

//----- (00570C60) --------------------------------------------------------
void __thiscall PlayGuideWin::OnWinClose(PlayGuideWin *this)
{
  GameFrameWork::ClosePlayGuideWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00570C70) --------------------------------------------------------
void __thiscall PlayGuideWin::UpdateScroll(PlayGuideWin *this)
{
  PlayGuideWin *v1; // ebx@1
  int v2; // esi@3
  unsigned int v3; // edi@3

  v1 = this;
  if ( (PgWin *)this == PgWinMgr::GetTopWin(&Pgg_kWinMgr) )
  {
    if ( v1->m_eState )
    {
      v2 = (signed int)((char *)v1->m_kTextList.baseclass_0._Mylast
                      - *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      v3 = 0;
      if ( v2 )
      {
        do
        {
          if ( (unsigned __int8)(*(int (__stdcall **)(_DWORD, _DWORD))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                     + 4 * v3)
                                                                     + 332))(
                                  PgWin::ms_iMsX.x,
                                  PgWin::ms_iMsY) )
          {
            if ( PgWin::ms_iMsDeltaZ <= 0 )
            {
              if ( PgWin::ms_iMsDeltaZ < 0 )
                SlideBar::OnClick2(v1->m_pkSlideBar);
            }
            else
            {
              SlideBar::OnClick1(v1->m_pkSlideBar);
            }
          }
          ++v3;
        }
        while ( v3 < v2 );
      }
    }
  }
}

//----- (00570D00) --------------------------------------------------------
bool __thiscall PageWinSpr::HitTest(PageWinSpr *this, int iSx, int iSy)
{
  PageWinSpr *v3; // edi@1
  bool result; // al@3
  int v5; // eax@4
  PgWin *v6; // esi@4
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@6

  v3 = this;
  if ( PgWinSpr::HitTest(&this->baseclass_0, iSx, iSy) )
  {
    if ( v3->m_kToolTip.baseclass_0._Mysize )
    {
      v5 = (int)&v3->m_kToolTip;
      v6 = v3->baseclass_0.baseclass_0.m_pkToolTipWin;
      if ( v3->m_kToolTip.baseclass_0._Myres >= 0x10 )
        v5 = *(_DWORD *)v5;
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[107].__vecDelDtor((NiRefObject *)v6, v5);
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor((NiRefObject *)v6, 1u);
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[109].__vecDelDtor;
      v6->m_pkToolTipParentWin = v3->baseclass_0.baseclass_0.m_pkToolTipParentWin;
      ((void (__thiscall *)(_DWORD))v7)(v6);
      ((void (__thiscall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[108].__vecDelDtor)(v6);
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, v6);
      unk_B70440 = v6;
      result = 1;
    }
    else
    {
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00570DB0) --------------------------------------------------------
bool __thiscall PlayGuideMinWin::Create(PlayGuideMinWin *this, PgFrameWork *pkFrameWork)
{
  PgWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiSourceTexture *v5; // edi@4
  NiNode *v6; // esi@5
  bool result; // al@9
  PgSprData *v8; // eax@10
  NiNode *v9; // esi@11
  PgSprData *v10; // edi@16
  NiNode *v11; // esi@17
  int iLeft; // [sp+14h] [bp-18h]@10
  int iTop; // [sp+18h] [bp-14h]@10
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v15; // [sp+28h] [bp-4h]@1

  v2 = (PgWin *)this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v15 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\PlayGuideMin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = MenuTexMgr::GetTexture(0x18u);
  if ( !v5 )
  {
    v6 = spNode.m_pObject;
    v15 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MinimumNor", &iLeft, &iTop, v5);
  if ( PgWinFrame::Create((PgWinFrame *)v2, 0, 0, v8, 0, pkFrameWork, "PlayGuideMinWin", 0) )
  {
    v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MinimumNor", &iLeft, &iTop, v5);
    PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "MinimumClick");
    PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "MinimumOver");
    PgWinBut::CreateWin(iLeft, iTop, v10, v2, 0, 0, 0);
    ((void (__thiscall *)(PgWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.89999998,
      0.66000003);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor((NiRefObject *)v2, 0);
    v15 = -1;
    if ( spNode.m_pObject )
    {
      v11 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v11 )
          v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v9 = spNode.m_pObject;
    v15 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00570FC0) --------------------------------------------------------
void __thiscall PlayGuideWin::InitPos(PlayGuideWin *this, unsigned int uiScreenWidth, unsigned int uiScreenHeight, float fXPosRate, float fYPosRate)
{
  PgWin::InitPos(&this->baseclass_0.baseclass_0.baseclass_0, uiScreenWidth, uiScreenHeight, fXPosRate, fYPosRate);
}

//----- (00570FF0) --------------------------------------------------------
void __thiscall PlayGuideWin::OnTextList(PlayGuideWin *this, const unsigned int uiIndex)
{
  PlayGuideWin *v2; // esi@1
  bool v3; // zf@1
  BasicInfoLink *v4; // eax@2
  BasicInfoLinkType v5; // eax@5
  BasicInfoLink *v6; // eax@5
  int v7; // eax@8
  int v8; // ecx@10
  int v9; // eax@12
  SlideBar *v10; // ecx@12

  v2 = this;
  v3 = this->m_bWordSearch == 0;
  this->m_iViewIndex = uiIndex;
  this->m_iPrevIndex = uiIndex - 1;
  this->m_iNextIndex = uiIndex + 1;
  if ( v3 )
  {
    this->m_eBasicInfoCategory = uiIndex;
    v4 = BasicInfoLinkTab::GetByCategory((BasicInfoCategory)uiIndex);
    if ( v4 )
      v2->m_eBasicInfoLinkType = v4->BIL_GuideType;
  }
  else
  {
    if ( (signed int)((char *)this->m_vecGuideInfoList.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 > uiIndex )
    {
      v5 = **(_DWORD **)(*(_DWORD *)&this->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex);
      this->m_eBasicInfoLinkType = v5;
      v6 = BasicInfoLinkTab::GetByType(v5);
      if ( v6 )
        v2->m_eBasicInfoCategory = v6->BIL_Category;
    }
  }
  if ( uiIndex )
    v7 = v2->m_iPrevIndex;
  else
    v7 = 0;
  v8 = v2->m_iSplitCnt;
  v2->m_iCurPos = v7;
  if ( v7 > v8 )
    v7 = v8 - 1;
  v9 = ((v7 < 0) - 1) & v7;
  v10 = v2->m_pkSlideBar;
  v2->m_iCurPos = v9;
  if ( v10 )
    SlideBar::SetCurPos(v10, v9);
  *(_WORD *)&v2->m_bOpenTextList = 1;
}

//----- (005710D0) --------------------------------------------------------
void __thiscall PlayGuideWin::UpdateTextList(PlayGuideWin *this)
{
  PlayGuideWin *v1; // esi@1
  PlayGuideWin::eState v2; // eax@1
  signed int v3; // ebx@1
  unsigned int v4; // edi@3
  int v5; // ebx@5
  void *v6; // eax@5
  int v7; // ecx@10
  int v8; // eax@10
  int v9; // ebx@12
  void (*v10)(void); // edx@13
  BasicInfoLink *v11; // eax@14
  void *v12; // eax@21
  int v13; // ecx@21
  int v14; // ecx@24
  signed int v15; // edi@26
  int v16; // ebx@26
  void *v17; // eax@28
  int v18; // edi@30
  int v19; // ecx@32
  int v20; // ecx@33
  int v21; // edx@33
  BasicInfoLink *v22; // edi@33
  int v23; // eax@37
  signed int v24; // edi@42
  int v25; // ebx@42
  int v26; // eax@44
  unsigned int v27; // ecx@44
  BasicInfoLink *v28; // eax@45
  signed int v29; // [sp-4h] [bp-14h]@8
  int v30; // [sp-4h] [bp-14h]@24
  signed int v31; // [sp+0h] [bp-10h]@0
  signed int bBottomEnable; // [sp+Ch] [bp-4h]@1

  v1 = this;
  v2 = this->m_eState;
  v3 = (signed int)((char *)this->m_kTextList.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  bBottomEnable = (signed int)((char *)this->m_kTextList.baseclass_0._Mylast
                             - *(_DWORD *)&this->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v2 )
  {
    if ( v2 != 1 )
      return;
    v4 = 0;
    if ( !this->m_bWordSearch )
    {
      if ( v3 )
      {
        do
        {
          v5 = v4 + v1->m_iCurPos;
          v6 = CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable + 4),
                 v4 + v1->m_iCurPos);
          if ( v6 )
          {
            (*(void (__stdcall **)(char *))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                    + 4 * v4)
                                                        + 4)
                                          + 472))((char *)v6 + 4);
            (*(void (__stdcall **)(int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                       + 4 * v4)
                                       + 520))(v5);
            (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                              + 4 * v4)
                                              + 240))(1);
            (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                              + 4 * v4)
                                              + 256))(1);
          }
          ++v4;
        }
        while ( v4 < bBottomEnable );
        v29 = 1;
        goto LABEL_50;
      }
      goto LABEL_19;
    }
    if ( !v3 )
    {
LABEL_19:
      v29 = 1;
LABEL_50:
      v1->m_pkSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v1->m_pkSlideBar,
        v29);
      return;
    }
    while ( 1 )
    {
      v7 = *(_DWORD *)&v1->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0];
      v8 = (signed int)((char *)v1->m_vecGuideInfoList.baseclass_0._Mylast - v7) >> 2;
      if ( v4 < v8 )
        break;
      (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                        + 4 * v4)
                                        + 256))(1);
      (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                    + 4 * v4)
                                    + 240))(0);
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                  + 4 * v4)
                                                      + 4)
                                        + 472))(&unk_9A597B);
LABEL_18:
      ++v4;
      if ( v4 >= v3 )
        goto LABEL_19;
    }
    v9 = v4 + v1->m_iCurPos;
    if ( v8 > (unsigned int)v9 )
    {
      v11 = BasicInfoLinkTab::GetByType(**(BasicInfoLinkType **)(v7 + 4 * v9));
      if ( !v11 )
      {
LABEL_17:
        v3 = bBottomEnable;
        goto LABEL_18;
      }
      (*(void (__stdcall **)(char *, signed int))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                          + 4 * v4)
                                                              + 4)
                                                + 472))(
        v11->BIL_GuideTypeName,
        v31);
      (*(void (__stdcall **)(int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                 + 4 * v4)
                                 + 520))(v9);
      (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                        + 4 * v4)
                                        + 240))(1);
      v10 = *(void (**)(void))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                             + 4 * v4)
                             + 256);
      v31 = 1;
    }
    else
    {
      (*(void (__stdcall **)(signed int, signed int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                    + 4 * v4)
                                                    + 256))(
        1,
        v31);
      (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                    + 4 * v4)
                                    + 240))(0);
      v10 = *(void (**)(void))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                       + 4 * v4)
                                           + 4)
                             + 472);
      v31 = (signed int)&unk_9A5989;
    }
    v10();
    goto LABEL_17;
  }
  if ( !this->m_bWordSearch )
  {
    v12 = CDataReader::GetRecord(
            (CDataReader *)(ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable + 4),
            this->m_iPrevIndex);
    v13 = *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0];
    LOBYTE(bBottomEnable) = v1->m_iPrevIndex >= 0;
    if ( !((signed int)((char *)v1->m_kTextList.baseclass_0._Mylast - v13) >> 2) )
      return;
    if ( v1->m_iPrevIndex >= 0 && v12 )
    {
      v14 = *(_DWORD *)(*(_DWORD *)v13 + 4);
      v30 = (int)((char *)v12 + 4);
    }
    else
    {
      v14 = *(_DWORD *)(*(_DWORD *)v13 + 4);
      v30 = 0;
    }
    (*(void (__stdcall **)(int))(*(_DWORD *)v14 + 472))(v30);
    (*(void (__stdcall **)(int))(****(_DWORD ****)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 520))(v1->m_iPrevIndex);
    (*(void (__stdcall **)(signed int))(****(_DWORD ****)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 240))(bBottomEnable);
    v15 = 1;
    v16 = v3 - 1;
    if ( (unsigned int)v16 > 1 )
    {
      do
      {
        (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                      + 4 * v15)
                                      + 240))(0);
        (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                      + 4 * v15++)
                                      + 256))(0);
      }
      while ( v15 < (unsigned int)v16 );
    }
    v17 = CDataReader::GetRecord(
            (CDataReader *)(ITableBase<BasicInfoTitle_BasicInfoTitleTab>::ms_pkTable + 4),
            v1->m_iNextIndex);
    LOBYTE(bBottomEnable) = v1->m_iNextIndex < 36;
    if ( v17 && v1->m_iNextIndex < 36 )
    {
      v18 = 4 * v15;
      (*(void (__stdcall **)(char *))(**(_DWORD **)(*(_DWORD *)(v18
                                                              + *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0])
                                                  + 4)
                                    + 472))((char *)v17 + 4);
    }
    else
    {
      v18 = 4 * v15;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v18
                                                              + *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0])
                                                  + 4)
                                    + 472))(0);
    }
    (*(void (__stdcall **)(int))(***(_DWORD ***)(v18 + *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0])
                               + 520))(v1->m_iNextIndex);
    v19 = *(_DWORD *)(v18 + *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]);
    goto LABEL_49;
  }
  v20 = this->m_iPrevIndex;
  v21 = *(_DWORD *)&v1->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0];
  LOBYTE(bBottomEnable) = v20 >= 0;
  v22 = 0;
  if ( (signed int)((char *)v1->m_vecGuideInfoList.baseclass_0._Mylast - v21) >> 2 > (unsigned int)v20
    && v20 >= 0
    && *(_DWORD *)(v21 + 4 * v20) )
    v22 = BasicInfoLinkTab::GetByType(**(BasicInfoLinkType **)(v21 + 4 * v20));
  v23 = *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (signed int)((char *)v1->m_kTextList.baseclass_0._Mylast - v23) >> 2 )
  {
    if ( (_BYTE)bBottomEnable && v22 )
      (*(void (__stdcall **)(char *))(**(_DWORD **)(*(_DWORD *)v23 + 4) + 472))(v22->BIL_GuideTypeName);
    else
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)v23 + 4) + 472))(0);
    (*(void (__stdcall **)(int))(****(_DWORD ****)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 520))(v1->m_iPrevIndex);
    (*(void (__stdcall **)(signed int))(****(_DWORD ****)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 240))(bBottomEnable);
    v24 = 1;
    v25 = v3 - 1;
    if ( (unsigned int)v25 > 1 )
    {
      do
      {
        (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                      + 4 * v24)
                                      + 240))(0);
        (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                      + 4 * v24++)
                                      + 256))(0);
      }
      while ( v24 < (unsigned int)v25 );
    }
    v26 = *(_DWORD *)&v1->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0];
    v27 = v1->m_iNextIndex;
    LOBYTE(bBottomEnable) = v27 < (signed int)((char *)v1->m_vecGuideInfoList.baseclass_0._Mylast - v26) >> 2;
    if ( (_BYTE)bBottomEnable )
    {
      v28 = BasicInfoLinkTab::GetByType(**(BasicInfoLinkType **)(v26 + 4 * v27));
      if ( v28 )
        (*(void (__stdcall **)(char *))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                + 4 * v24)
                                                    + 4)
                                      + 472))(v28->BIL_GuideTypeName);
    }
    else
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                              + 4 * v24)
                                                  + 4)
                                    + 472))(0);
    }
    (*(void (__stdcall **)(int))(***(_DWORD ***)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                               + 4 * v24)
                               + 520))(v1->m_iNextIndex);
    v19 = *(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v24);
LABEL_49:
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v19 + 240))(bBottomEnable);
    v29 = 0;
    goto LABEL_50;
  }
}
// A97EB0: using guessed type int ITableBase_BasicInfoTitle_BasicInfoTitleTab___ms_pkTable;

//----- (00571630) --------------------------------------------------------
void __thiscall PlayGuideWin::Reset(PlayGuideWin *this)
{
  PlayGuideWin *v1; // ebx@1
  unsigned int v2; // edi@1
  int v3; // esi@2
  SlideBar *v4; // ecx@3
  signed int uiTextListSize; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = 0;
  uiTextListSize = (signed int)((char *)this->m_kTextList.baseclass_0._Mylast
                              - *(_DWORD *)&this->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( uiTextListSize )
  {
    do
    {
      v3 = *(_DWORD *)(*(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v2);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v3 + 256))(1);
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v3 + 240))(1);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 176))(*(_DWORD *)(v3 + 8));
      ++v2;
    }
    while ( v2 < uiTextListSize );
  }
  v4 = v1->m_pkSlideBar;
  if ( v4 )
  {
    SlideBar::SetCurPos(v4, 0);
    v1->m_iCurPos = v1->m_pkSlideBar->m_nCurPos;
  }
  v1->m_eState = 1;
  PlayGuideWin::UpdateTextList(v1);
  *(_WORD *)&v1->m_bOpenTextList = 256;
}

//----- (005716D0) --------------------------------------------------------
bool __thiscall PlayGuideWin::UpdatePageContents(PlayGuideWin *this, BasicInfoLink *pkBasicInfoLink)
{
  BasicInfoLink *v2; // esi@1
  signed int v3; // ebx@1
  PlayGuideWin *v4; // edi@1
  bool result; // al@2
  BasicInfoLink *v6; // eax@3
  int v7; // eax@5
  unsigned int v8; // ebx@6
  unsigned int v9; // esi@8
  void *v10; // eax@9
  char *v11; // eax@25
  NiSourceTexture *v12; // eax@25
  char *v13; // eax@27
  char *v14; // eax@27
  PgWinBut *v15; // edi@34
  int v16; // [sp-4h] [bp-68h]@30
  unsigned int v17; // [sp-4h] [bp-68h]@35
  BasicInfoLink *kFirstGuideType; // [sp+Ch] [bp-58h]@3
  signed int CurPage; // [sp+14h] [bp-50h]@3
  signed int MaxPage; // [sp+18h] [bp-4Ch]@3
  signed int CurType; // [sp+1Ch] [bp-48h]@4
  char acPageText[64]; // [sp+20h] [bp-44h]@27
  unsigned int v23; // [sp+60h] [bp-4h]@1
  int v24; // [sp+64h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v2 = pkBasicInfoLink;
  v3 = 0;
  v4 = this;
  if ( pkBasicInfoLink )
  {
    MaxPage = 0;
    CurPage = 0;
    v6 = BasicInfoLinkTab::GetByCategory(this->m_eBasicInfoCategory);
    kFirstGuideType = v6;
    if ( v6 )
    {
      CurType = v6->BIL_GuideType;
      if ( CurType < 197 )
      {
        while ( 1 )
        {
          v7 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
          if ( v7 )
            v8 = *(_DWORD *)(v7 + 40);
          else
            v8 = 0;
          v9 = 0;
          if ( v8 )
          {
            while ( 1 )
            {
              v10 = CDataReader::GetRecord(
                      (CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4),
                      v9);
              if ( v10 )
              {
                if ( *((_DWORD *)v10 + 1) == CurType )
                  break;
              }
              ++v9;
              if ( v9 >= v8 )
                goto LABEL_12;
            }
            if ( *(_DWORD *)v10 != kFirstGuideType->BIL_Category )
            {
LABEL_17:
              v3 = CurPage;
              v2 = pkBasicInfoLink;
              break;
            }
            ++CurType;
            ++MaxPage;
            if ( *((_DWORD *)v10 + 1) == pkBasicInfoLink->BIL_GuideType )
              CurPage = MaxPage;
          }
          else
          {
LABEL_12:
            ++CurType;
          }
          if ( CurType >= 197 )
            goto LABEL_17;
        }
      }
    }
    if ( v4->m_pkGuideTitleTextWin )
    {
      ((void (__stdcall *)(signed int))v4->m_pkGuideTitleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(char *))v4->m_pkGuideTitleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v2->BIL_GuideTypeName);
    }
    if ( v4->m_pkGuideExplanationTextWin )
    {
      ((void (__stdcall *)(signed int))v4->m_pkGuideExplanationTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(char *))v4->m_pkGuideExplanationTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v2->BIL_Desc);
    }
    if ( v4->m_pkGuideImageSprWin )
    {
      ((void (__stdcall *)(signed int))v4->m_pkGuideImageSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      if ( !Folder::m_bInit )
        Folder::Init();
      v11 = fs("%s\\playguide\\%s.png");
      v12 = PgUtil::LoadSourceTexture(v11);
      ((void (__stdcall *)(NiSourceTexture *))v4->m_pkGuideImageSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v12);
    }
    if ( v4->m_pkGuidePageNumTextWin )
    {
      v13 = TextData3::Get(0x1E390354u);
      v14 = fs(v13);
      sprintf(acPageText, v14);
      ((void (__stdcall *)(_DWORD))v4->m_pkGuidePageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acPageText);
      ((void (__stdcall *)(signed int))v4->m_pkGuidePageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    if ( v4->m_pkGuidePageLeftButWin )
    {
      v16 = v3 > 1;
      ((void (__stdcall *)(int))v4->m_pkGuidePageLeftButWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v16);
    }
    if ( v4->m_pkGuidePageRightButWin )
    {
      v15 = v4->m_pkGuidePageRightButWin;
      v17 = MaxPage > v3;
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v15,
        v17);
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (00571920) --------------------------------------------------------
void __thiscall PlayGuideWin::EraseAllSpace(PlayGuideWin *this, char *acString)
{
  int v2; // edi@3
  char *v3; // esi@4
  char *v4; // eax@8
  int v5; // edx@8
  char v6; // cl@9
  char *v7; // eax@11
  char v8; // cl@12
  NiRefObjectVtbl *v9; // esi@14
  char *v10; // eax@14
  PlayGuideWin *v11; // [sp+4h] [bp-4h]@1

  v11 = this;
  if ( acString && this->m_pkGuideSearchTextEditWin )
  {
    v2 = 0;
    if ( *acString )
    {
      v3 = acString;
      do
      {
        if ( *v3 == 32 || *v3 == 10 )
        {
          v4 = &acString[v2 + 1];
          v5 = v3 - v4;
          do
          {
            v6 = *v4;
            v4[v5] = *v4;
            ++v4;
          }
          while ( v6 );
        }
        else
        {
          ++v2;
          ++v3;
        }
      }
      while ( *v3 );
    }
    v7 = acString;
    do
      v8 = *v7++;
    while ( v8 );
    if ( v7 == acString + 1 )
    {
      v9 = v11->m_pkGuideSearchTextEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = TextData3::Get(0x8095BCC4u);
      v9[115].__vecDelDtor((NiRefObject *)v11->m_pkGuideSearchTextEditWin, (unsigned int)v10);
    }
    else
    {
      ((void (__stdcall *)(char *))v11->m_pkGuideSearchTextEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(acString);
    }
  }
}

//----- (005719E0) --------------------------------------------------------
void __thiscall PlayGuideWin::OnSlideBar(PlayGuideWin *this)
{
  SlideBar *v1; // eax@1

  v1 = this->m_pkSlideBar;
  if ( v1 )
  {
    this->m_iCurPos = v1->m_nCurPos;
    PlayGuideWin::UpdateTextList(this);
  }
}

//----- (00571A00) --------------------------------------------------------
void __thiscall PlayGuideWin::UpdateSelectedPage(PlayGuideWin *this)
{
  PlayGuideWin *v1; // esi@1
  PlayGuideWin::eState v2; // eax@2
  PgWinSpr *v3; // ecx@4
  PgWinText *v4; // ecx@6
  PgWinText *v5; // ecx@8
  PgWinSpr *v6; // ecx@10
  PgWinText *v7; // ecx@12
  PgWinBut *v8; // ecx@14
  PgWinBut *v9; // ecx@16
  void *v10; // eax@18
  int v11; // ecx@19
  unsigned int v12; // ebx@20
  unsigned int v13; // edi@22
  BasicInfoFind **v14; // edi@27
  BasicInfoFind **v15; // ecx@27
  unsigned int v16; // edx@28
  PgWinSpr *v17; // ecx@30
  SlideBar *v18; // ecx@32

  v1 = this;
  if ( PgWin::IsVisible(&this->baseclass_0.baseclass_0.baseclass_0) )
  {
    v2 = v1->m_eState;
    if ( v2 )
    {
      if ( v2 == 1 )
      {
        v3 = v1->m_pkThemeSprWin;
        if ( v3 )
          ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v4 = v1->m_pkGuideTitleTextWin;
        if ( v4 )
          ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v5 = v1->m_pkGuideExplanationTextWin;
        if ( v5 )
          ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v6 = v1->m_pkGuideImageSprWin;
        if ( v6 )
          ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v7 = v1->m_pkGuidePageNumTextWin;
        if ( v7 )
          ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v8 = v1->m_pkGuidePageLeftButWin;
        if ( v8 )
          ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v9 = v1->m_pkGuidePageRightButWin;
        if ( v9 )
          ((void (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
    }
    else
    {
      v10 = 0;
      if ( v1->m_bWordSearch )
      {
        v14 = *(BasicInfoFind ***)&v1->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0];
        v15 = v1->m_vecGuideInfoList.baseclass_0._Mylast;
        if ( v14 != v15 )
        {
          v16 = v1->m_iViewIndex;
          if ( v15 - v14 > v16 )
            v10 = BasicInfoLinkTab::GetByType(v14[v16]->BIL_GuideType);
        }
      }
      else
      {
        v11 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
        if ( v11 )
          v12 = *(_DWORD *)(v11 + 40);
        else
          v12 = 0;
        v13 = 0;
        if ( v12 )
        {
          do
          {
            v10 = CDataReader::GetRecord(
                    (CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4),
                    v13);
            if ( v10 && *((_DWORD *)v10 + 1) == v1->m_eBasicInfoLinkType )
              break;
            ++v13;
          }
          while ( v13 < v12 );
        }
      }
      PlayGuideWin::UpdatePageContents(v1, (BasicInfoLink *)v10);
      v17 = v1->m_pkThemeSprWin;
      if ( v17 )
        ((void (__stdcall *)(signed int))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v18 = v1->m_pkSlideBar;
      if ( v18 )
      {
        v1->m_iOldSlidePos = v1->m_iCurPos;
        v1->m_iCurPos = 0;
        SlideBar::SetSplitCnt(v18, 0);
      }
    }
  }
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (00571B90) --------------------------------------------------------
void __thiscall PlayGuideWin::OnPageBtn(PlayGuideWin *this, bool IsBtnLeft)
{
  signed int v2; // ebx@1
  int v3; // eax@7
  unsigned int v4; // edi@8
  unsigned int v5; // esi@10
  void *v6; // eax@11
  PlayGuideWin *thisa; // [sp+Ch] [bp-4h]@1

  v2 = this->m_eBasicInfoLinkType;
  thisa = this;
LABEL_2:
  while ( 1 )
  {
    if ( IsBtnLeft == 1 )
      --v2;
    else
      ++v2;
    if ( v2 < 0 || v2 >= 197 )
      break;
    this->m_eBasicInfoLinkType = v2;
    v3 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
    if ( v3 )
      v4 = *(_DWORD *)(v3 + 40);
    else
      v4 = 0;
    v5 = 0;
    if ( v4 )
    {
      while ( 1 )
      {
        v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4), v5);
        if ( v6 )
        {
          if ( *((_DWORD *)v6 + 1) == v2 )
            break;
        }
        ++v5;
        if ( v5 >= v4 )
        {
          this = thisa;
          goto LABEL_2;
        }
      }
      PlayGuideWin::UpdatePageContents(thisa, (BasicInfoLink *)v6);
      return;
    }
  }
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (00571C10) --------------------------------------------------------
void __thiscall PlayGuideWin::UpdateMeWin(PlayGuideWin *this, float fCurTime)
{
  PlayGuideWin *v2; // edi@1
  int v3; // ebx@2
  int v4; // eax@2
  int v5; // esi@2
  int v6; // esi@3
  int v7; // eax@3
  int v8; // eax@4
  int v9; // ecx@4
  int v10; // esi@10
  int v11; // eax@10
  int v12; // eax@11
  int v13; // ecx@11
  int v14; // esi@20
  int v15; // ebx@20
  int v16; // eax@20
  int v17; // edx@20
  int v18; // ecx@21
  int v19; // eax@21
  int uiSize; // [sp+Ch] [bp-1Ch]@2
  int uiSizea; // [sp+Ch] [bp-1Ch]@10
  int uiSizeb; // [sp+Ch] [bp-1Ch]@19
  int iUpIndex; // [sp+10h] [bp-18h]@2
  int v24; // [sp+14h] [bp-14h]@3
  int iBottomYPos; // [sp+18h] [bp-10h]@2
  int iTopYPos; // [sp+1Ch] [bp-Ch]@2
  int i; // [sp+20h] [bp-8h]@2
  int ia; // [sp+20h] [bp-8h]@9
  unsigned int ib; // [sp+20h] [bp-8h]@19
  char bAllStop; // [sp+26h] [bp-2h]@2
  char bAllStopa; // [sp+26h] [bp-2h]@19
  char bTopAllStop; // [sp+27h] [bp-1h]@2

  v2 = this;
  if ( this->m_bOpenTextList )
  {
    v3 = ((signed int)((char *)this->m_kTextList.baseclass_0._Mylast
                     - *(_DWORD *)&this->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
       - 1;
    iTopYPos = (*(int (**)(void))(****(_DWORD ****)&this->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 168))();
    iBottomYPos = (*(int (**)(void))(***(_DWORD ***)(*(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                   + 4 * v3)
                                   + 168))();
    v4 = v2->m_iViewIndex - v2->m_iCurPos;
    bTopAllStop = 1;
    v5 = v4 + 1;
    iUpIndex = v2->m_iViewIndex - v2->m_iCurPos;
    uiSize = v4 + 1;
    bAllStop = 1;
    i = 0;
    if ( v4 > 0 )
    {
      do
      {
        v6 = *(_DWORD *)(*(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * i);
        v24 = 2 * (*(int (**)(void))(**(_DWORD **)v6 + 148))();
        v7 = (*(int (**)(void))(**(_DWORD **)v6 + 168))();
        if ( v7 > iTopYPos )
        {
          v8 = v7 - v24;
          v9 = *(_DWORD *)v6;
          if ( v8 >= iTopYPos )
            (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 176))(v8);
          else
            (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 176))(iTopYPos);
        }
        bTopAllStop &= (*(int (__thiscall **)(_DWORD))(**(_DWORD **)v6 + 168))(*(_DWORD *)v6) == iTopYPos;
        ++i;
      }
      while ( i < iUpIndex );
      v5 = uiSize;
    }
    for ( ia = v5; ia < v3; ++ia )
    {
      v10 = *(_DWORD *)(*(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * ia);
      uiSizea = 2 * (*(int (**)(void))(**(_DWORD **)v10 + 148))();
      v11 = (*(int (**)(void))(**(_DWORD **)v10 + 168))();
      if ( v11 < iBottomYPos )
      {
        v12 = uiSizea + v11;
        v13 = *(_DWORD *)v10;
        if ( v12 <= iBottomYPos )
          (*(void (__stdcall **)(int))(*(_DWORD *)v13 + 176))(v12);
        else
          (*(void (__stdcall **)(int))(*(_DWORD *)v13 + 176))(iBottomYPos);
      }
      bAllStop &= (*(int (__thiscall **)(_DWORD))(**(_DWORD **)v10 + 168))(*(_DWORD *)v10) == iBottomYPos;
    }
    if ( bTopAllStop && bAllStop )
    {
      v2->m_bOpenTextList = 0;
      v2->m_eState = 0;
      PlayGuideWin::UpdateTextList(v2);
      PlayGuideWin::UpdateSelectedPage(v2);
    }
  }
  if ( !v2->m_bCloseTextList )
    goto LABEL_30;
  bAllStopa = 1;
  uiSizeb = (signed int)((char *)v2->m_kTextList.baseclass_0._Mylast
                       - *(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  ib = 0;
  if ( !uiSizeb )
    goto LABEL_29;
  do
  {
    v14 = *(_DWORD *)(*(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * ib);
    v15 = 2 * (*(int (**)(void))(**(_DWORD **)v14 + 148))();
    v16 = (*(int (**)(void))(**(_DWORD **)v14 + 168))();
    v17 = *(_DWORD *)(v14 + 8);
    if ( v16 <= v17 )
    {
      if ( v16 >= v17 )
        goto LABEL_27;
      v18 = *(_DWORD *)v14;
      v19 = v15 + v16;
      if ( v19 > v17 )
      {
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 176))(*(_DWORD *)(v14 + 8));
        goto LABEL_27;
      }
    }
    else
    {
      v18 = *(_DWORD *)v14;
      v19 = v16 - v15;
      if ( v19 < v17 )
      {
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 176))(*(_DWORD *)(v14 + 8));
        goto LABEL_27;
      }
    }
    (*(void (__stdcall **)(int))(*(_DWORD *)v18 + 176))(v19);
LABEL_27:
    bAllStopa &= (*(int (**)(void))(**(_DWORD **)v14 + 168))() == *(_DWORD *)(v14 + 8);
    ++ib;
  }
  while ( ib < uiSizeb );
  if ( bAllStopa )
  {
LABEL_29:
    v2->m_bCloseTextList = 0;
    PlayGuideWin::UpdateSelectedPage(v2);
  }
LABEL_30:
  PlayGuideWin::UpdateScroll(v2);
}

//----- (00571E90) --------------------------------------------------------
PageWinSpr *__cdecl PageWinSpr::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, char *pcName, unsigned int uiExtStyle)
{
  void *v6; // eax@1
  void *v7; // esi@1
  PgWin *v8; // edi@8
  PageWinSpr *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x144u);
  v7 = v6;
  result.m_pObject = (PgWin *)v6;
  v11 = 0;
  if ( v6 )
  {
    PgWinSpr::PgWinSpr((PgWinSpr *)v6);
    *(_DWORD *)v7 = &PageWinSpr::_vftable_;
    *((_DWORD *)v7 + 58) = &PageWinSpr::_vftable_;
    *((_DWORD *)v7 + 79) = 15;
    *((_DWORD *)v7 + 78) = 0;
    *((_BYTE *)v7 + 296) = 0;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)v7 + 1);
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, char *, unsigned int))(*(_DWORD *)v7 + 508))(
                          v7,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          pcName,
                          uiExtStyle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = (PageWinSpr *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}
// 9A5DE4: using guessed type int (__stdcall *PageWinSpr___vftable_)(int uiFlags);
// 9A5E04: using guessed type int (__thiscall *PageWinSpr___vftable_)(void *p, char);

//----- (00572000) --------------------------------------------------------
PlayGuideMinWin *__cdecl PlayGuideMinWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PlayGuideMinWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &PlayGuideMinWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PlayGuideMinWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PlayGuideMinWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A5BA0: using guessed type int (__stdcall *PlayGuideMinWin___vftable_)(int uiFlags);
// 9A5BBC: using guessed type int (__thiscall *PlayGuideMinWin___vftable_)(void *p, char);

//----- (00572140) --------------------------------------------------------
void __thiscall PlayGuideWin::PlayGuideWin(PlayGuideWin *this)
{
  PlayGuideWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_iWebXPos = 0;
  v1->m_iWebYPos = 0;
  v1->m_iPlaneWebXPos = 0;
  v1->m_iPlaneWebYPos = 0;
  v1->m_uiWebWidth = 0;
  v1->m_uiWebHeight = 0;
  v1->m_uiPlaneWebWidth = 0;
  v1->m_uiPlaneWebHeight = 0;
  v1->m_iViewIndex = 0;
  v1->m_iPrevIndex = 0;
  v1->m_iNextIndex = 0;
  v1->m_iCurPos = 0;
  *(_WORD *)&v1->m_bOpenTextList = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PlayGuideWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PlayGuideWin::_vftable_;
  *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kTextList.baseclass_0._Mylast = 0;
  v1->m_kTextList.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuideInfoList.baseclass_0._Mylast = 0;
  v1->m_vecGuideInfoList.baseclass_0._Myend = 0;
  v1->m_bWordSearch = 0;
  v1->m_iSplitCnt = 0;
  v1->m_iOldSlidePos = 0;
  v1->m_eBasicInfoCategory = 0;
  v1->m_eBasicInfoLinkType = 0;
  v1->m_acPrevSearchText[0] = 0;
  v1->m_eState = 1;
}
// 9A6010: using guessed type int (__stdcall *PlayGuideWin___vftable_)(int uiFlags);
// 9A602C: using guessed type int (__thiscall *PlayGuideWin___vftable_)(void *p, char);

//----- (00572200) --------------------------------------------------------
void __thiscall PlayGuideWin::_PlayGuideWin(PlayGuideWin *this)
{
  PlayGuideWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PlayGuideWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PlayGuideWin::_vftable_;
  if ( *(_DWORD *)&this->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuideInfoList.baseclass_0._Mylast = 0;
  v1->m_vecGuideInfoList.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kTextList.baseclass_0._Mylast = 0;
  v1->m_kTextList.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A6010: using guessed type int (__stdcall *PlayGuideWin___vftable_)(int uiFlags);
// 9A602C: using guessed type int (__thiscall *PlayGuideWin___vftable_)(void *p, char);

//----- (00572270) --------------------------------------------------------
PlayGuideWin *__cdecl PlayGuideWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  PlayGuideWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x230u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    PlayGuideWin::PlayGuideWin((PlayGuideWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (PlayGuideWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005723A0) --------------------------------------------------------
void __thiscall PlayGuideWin::SetInfo(PlayGuideWin *this, BasicInfoLinkType eType)
{
  PlayGuideWin *v2; // esi@1
  int v3; // eax@1
  unsigned int v4; // ebx@2
  unsigned int v5; // edi@4
  void *v6; // eax@5
  int v7; // eax@9
  char *v8; // ecx@10
  char *v9; // edi@10
  SlideBar *v10; // ecx@12
  int v11; // eax@12
  char *v12; // eax@14
  int v13; // edx@14
  char v14; // cl@15
  int v15; // eax@17

  v2 = this;
  this->m_eBasicInfoLinkType = eType;
  v3 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
  if ( v3 )
    v4 = *(_DWORD *)(v3 + 40);
  else
    v4 = 0;
  v5 = 0;
  if ( v4 )
  {
    while ( 1 )
    {
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4), v5);
      if ( v6 )
      {
        if ( *((_DWORD *)v6 + 1) == eType )
          break;
      }
      ++v5;
      if ( v5 >= v4 )
        goto LABEL_10;
    }
    v7 = *(_DWORD *)v6;
    v2->m_eBasicInfoCategory = v7;
    v2->m_iViewIndex = v7;
    v2->m_iPrevIndex = v7 - 1;
    v2->m_iNextIndex = v2->m_iViewIndex + 1;
  }
LABEL_10:
  v8 = (char *)v2->m_vecGuideInfoList.baseclass_0._Mylast;
  v9 = *(char **)&v2->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v9 != v8 )
  {
    memmove(v9, v8, 0);
    v2->m_vecGuideInfoList.baseclass_0._Mylast = (BasicInfoFind **)v9;
  }
  v10 = v2->m_pkSlideBar;
  v11 = ((37
        - ((signed int)((char *)v2->m_kTextList.baseclass_0._Mylast
                      - *(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2) <= 0)
       - 1) & (37
             - ((signed int)((char *)v2->m_kTextList.baseclass_0._Mylast
                           - *(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2));
  v2->m_iSplitCnt = v11;
  if ( v10 )
    SlideBar::SetSplitCnt(v10, v11);
  v2->m_bWordSearch = 0;
  v12 = TextData3::Get(0x8095BCC4u);
  v13 = v2->m_acPrevSearchText - v12;
  do
  {
    v14 = *v12;
    v12[v13] = *v12;
    ++v12;
  }
  while ( v14 );
  if ( v2->m_iViewIndex )
    v15 = v2->m_iPrevIndex;
  else
    v15 = 0;
  SlideBar::SetCurPos(v2->m_pkSlideBar, v15);
  v2->m_iCurPos = v2->m_pkSlideBar->m_nCurPos;
  *(_WORD *)&v2->m_bOpenTextList = 1;
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (005724F0) --------------------------------------------------------
void __thiscall PlayGuideWin::OnSearchBtn(PlayGuideWin *this)
{
  PlayGuideWin *v1; // esi@1
  EditWinEx *v2; // ecx@1
  void *v3; // ebx@3
  char *v4; // eax@4
  char *v5; // eax@7
  PgFrameWork *v6; // edi@10
  char *v7; // eax@11
  int v8; // edi@13
  int v9; // ecx@13
  char *v10; // eax@13
  signed int v11; // ebx@13
  char *v12; // ebx@17
  char *v13; // eax@23
  BasicInfoFind **v14; // edi@23
  PgFrameWork *v15; // edi@24
  char *v16; // eax@25
  void *v17; // eax@27
  int v18; // edx@27
  char v19; // cl@28
  int v20; // ecx@30
  char v21; // al@31
  char *v22; // eax@33
  PgFrameWork *v23; // edi@36
  char *v24; // eax@37
  int v25; // eax@39
  SlideBar *v26; // ecx@42
  int v27; // ST10_4@42
  std::vector<BasicInfoFindWord *,std::allocator<BasicInfoFindWord *> > kBasicInfoFindWordVector; // [sp+0h] [bp-F0h]@13
  void *SearchWord; // [sp+10h] [bp-E0h]@3
  char *i; // [sp+14h] [bp-DCh]@13
  char bTypeCheck[197]; // [sp+18h] [bp-D8h]@13
  unsigned int v32; // [sp+E0h] [bp-10h]@1
  int v33; // [sp+ECh] [bp-4h]@13
  int v34; // [sp+F0h] [bp+0h]@1

  v32 = (unsigned int)&v34 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkGuideSearchTextEditWin;
  if ( !v2 || !v1->m_pkSlideBar )
    return;
  v3 = (void *)((int (__stdcall *)(unsigned int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)((unsigned int)&v34 ^ __security_cookie);
  SearchWord = v3;
  if ( !_mbscmp(v1->m_acPrevSearchText, (const char *)v3) )
  {
    v22 = TextData3::Get(0x8095BCC4u);
    if ( _mbsnbcmp((const char *)v3, v22, 0x10u) )
    {
      if ( _mbsnbcmp((const char *)v3, &byte_9A595F, 0x10u) )
      {
        if ( *(BasicInfoFind ***)&v1->m_vecGuideInfoList.baseclass_0.___u0.baseclass_0.dummy[0] == v1->m_vecGuideInfoList.baseclass_0._Mylast )
        {
          v23 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v23 )
          {
            v24 = TextData3::Get(0x487D7DCCu);
            GameFrameWork::AddSysMsg((GameFrameWork *)v23, v24);
          }
        }
      }
    }
    if ( v1->m_eState )
      v25 = 0;
    else
      v25 = v1->m_iOldSlidePos;
    v1->m_iCurPos = v25;
    goto LABEL_42;
  }
  v4 = TextData3::Get(0x8095BCC4u);
  if ( _mbsnbcmp((const char *)v3, v4, 0x10u) && _mbsnbcmp((const char *)v3, &byte_9A5952, 0x10u) )
    PlayGuideWin::EraseAllSpace(v1, (char *)v3);
  v5 = TextData3::Get(0x8095BCC4u);
  if ( !_mbsnbcmp((const char *)v3, v5, 0x10u) || !_mbsnbcmp((const char *)v3, &byte_9A5953, 0x10u) )
  {
    std::vector<BasicInfoFind___std::allocator<BasicInfoFind__>>::clear(&v1->m_vecGuideInfoList);
    v1->m_iSplitCnt = 37
                    - ((signed int)((char *)v1->m_kTextList.baseclass_0._Mylast
                                  - *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
    v1->m_bWordSearch = 0;
    v20 = v1->m_acPrevSearchText - v3;
    do
    {
      v21 = *(_BYTE *)v3;
      *((_BYTE *)v3 + v20) = *(_BYTE *)v3;
      v3 = (char *)v3 + 1;
    }
    while ( v21 );
    v1->m_iCurPos = 0;
LABEL_42:
    v26 = v1->m_pkSlideBar;
    v27 = ((v1->m_iSplitCnt <= 0) - 1) & v1->m_iSplitCnt;
    v1->m_iSplitCnt = v27;
    SlideBar::SetSplitCnt(v26, v27);
    SlideBar::SetCurPos(v1->m_pkSlideBar, v1->m_iCurPos);
    v1->m_eState = 1;
    PlayGuideWin::UpdateTextList(v1);
    *(_WORD *)&v1->m_bOpenTextList = 256;
    ((void (__cdecl *)(signed int))v1->m_pkGuideSearchTextEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    return;
  }
  if ( strlen((const char *)v3) > 2 )
  {
    v8 = (int)&v1->m_vecGuideInfoList;
    std::vector<BasicInfoFind___std::allocator<BasicInfoFind__>>::clear(&v1->m_vecGuideInfoList);
    *(_DWORD *)&kBasicInfoFindWordVector.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kBasicInfoFindWordVector.baseclass_0._Mylast = 0;
    kBasicInfoFindWordVector.baseclass_0._Myend = 0;
    v33 = 0;
    BasicInfoFindWordTab::GetListByWord((char *)v3, &kBasicInfoFindWordVector);
    bTypeCheck[0] = 0;
    memset(&bTypeCheck[1], 0, 0xC4u);
    v9 = *(_DWORD *)&kBasicInfoFindWordVector;
    v10 = 0;
    v11 = (signed int)((char *)kBasicInfoFindWordVector.baseclass_0._Mylast - *(_DWORD *)&kBasicInfoFindWordVector) >> 2;
    i = 0;
    if ( v11 )
    {
      do
      {
        if ( *(_DWORD *)(v9 + 4 * (_DWORD)v10) )
        {
          BasicInfoFindTab::GetListByFindType(
            **(BasicInfoFindType **)(v9 + 4 * (_DWORD)v10),
            &v1->m_vecGuideInfoList,
            (bool *)bTypeCheck);
          v10 = i;
          v9 = *(_DWORD *)&kBasicInfoFindWordVector;
        }
        ++v10;
        i = v10;
      }
      while ( (unsigned int)v10 < v11 );
    }
    v12 = *(char **)v8;
    if ( *(BasicInfoFind ***)v8 != v1->m_vecGuideInfoList.baseclass_0._Mylast )
    {
      i = v12 + 4;
      do
      {
        if ( BasicInfoLinkTab::GetByType(**(BasicInfoLinkType **)v12) )
        {
          v12 += 4;
          i += 4;
        }
        else
        {
          memmove(v12, i, 4 * ((signed int)((char *)v1->m_vecGuideInfoList.baseclass_0._Mylast - i) >> 2));
          --v1->m_vecGuideInfoList.baseclass_0._Mylast;
        }
      }
      while ( v12 != (char *)v1->m_vecGuideInfoList.baseclass_0._Mylast );
    }
    v13 = *(char **)v8;
    v14 = v1->m_vecGuideInfoList.baseclass_0._Mylast;
    if ( (BasicInfoFind **)v13 == v14 )
    {
      v1->m_iSplitCnt = 37
                      - ((signed int)((char *)v1->m_kTextList.baseclass_0._Mylast
                                    - *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2);
      v1->m_bWordSearch = 0;
      v15 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v15 )
      {
        v16 = TextData3::Get(0x487D7DCCu);
        GameFrameWork::AddSysMsg((GameFrameWork *)v15, v16);
      }
    }
    else
    {
      v1->m_iSplitCnt = ((signed int)((char *)v14 - v13) >> 2)
                      - ((signed int)((char *)v1->m_kTextList.baseclass_0._Mylast
                                    - *(_DWORD *)&v1->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
                      + 1;
      v1->m_bWordSearch = 1;
    }
    v17 = SearchWord;
    v18 = v1->m_acPrevSearchText - SearchWord;
    do
    {
      v19 = *(_BYTE *)v17;
      *((_BYTE *)v17 + v18) = *(_BYTE *)v17;
      v17 = (char *)v17 + 1;
    }
    while ( v19 );
    v33 = -1;
    __1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a((std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&kBasicInfoFindWordVector);
    v1->m_iCurPos = 0;
    goto LABEL_42;
  }
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v6 )
  {
    v7 = TextData3::Get(0x4B70D6D2u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v7);
  }
  ((void (__cdecl *)(signed int))v1->m_pkGuideSearchTextEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}
// A85C00: using guessed type int __security_cookie;

//----- (00572920) --------------------------------------------------------
void __thiscall PlayGuideWin::OpenPlayGuideSearchList(PlayGuideWin *this, char *acUIFile)
{
  PlayGuideWin *v2; // esi@1
  BasicInfoFindUI *v3; // eax@2
  BasicInfoFindWord *v4; // eax@3
  PgFrameWork *v5; // eax@6

  v2 = this;
  if ( acUIFile
    && (v3 = BasicInfoFindUITab::GetByUIFile(acUIFile)) != 0
    && (v4 = BasicInfoFindWordTab::GetByFindType(v3->BIL_GuideFind)) != 0
    && v2->m_pkGuideSearchTextEditWin )
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkGuideSearchTextEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v4->BIL_FindWord);
    PlayGuideWin::OnSearchBtn(v2);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v5 )
      GameFrameWork::OpenHelpWin((GameFrameWork *)v5);
  }
}

//----- (005729A0) --------------------------------------------------------
void __thiscall PlayGuideWin::OnEditEnd(PlayGuideWin *this, unsigned int wParam, int lParam)
{
  PlayGuideWin::OnSearchBtn(this);
}

//----- (005729B0) --------------------------------------------------------
void __thiscall PageWinSpr::SetToolTip(PageWinSpr *this, const char *pcText)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this->m_kToolTip, pcText, strlen(pcText));
}

//----- (005729E0) --------------------------------------------------------
bool __thiscall PlayGuideWin::Create(PlayGuideWin *this, PgFrameWork *pkFrameWork)
{
  PlayGuideWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  PgSprData *v9; // eax@9
  NiNode *v10; // esi@12
  bool result; // al@16
  int v12; // edi@17
  int v13; // ebx@17
  NiNode *v14; // esi@20
  void *v15; // eax@24
  PgWinText *v16; // eax@24
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // edx@24
  char *v18; // eax@24
  PgSprData *v19; // eax@24
  PgWinSpr *v20; // eax@24
  PgSprData *v21; // eax@24
  PgSprData *v22; // eax@24
  PgWinSpr *v23; // eax@24
  NiSourceTexture *v24; // ST4C_4@24
  NiNode *v25; // ecx@24
  PgWinText *v26; // eax@26
  D3DXCOLOR *v27; // eax@26
  PgWinText *v28; // eax@27
  PgTextGeometry *v29; // ecx@27
  PgSprData *v30; // eax@29
  PgWinSpr *v31; // eax@29
  PgWinText *v32; // eax@30
  PgTextGeometry *v33; // eax@30
  PgWinBut *v34; // eax@32
  PgWinBut *v35; // eax@32
  EditWinEx *v36; // eax@33
  char *v37; // eax@33
  EditWinEx *v38; // ecx@33
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v39; // eax@33
  char *v40; // eax@33
  char *v41; // eax@33
  int v42; // ecx@33
  char v43; // dl@34
  PgWinBut *v44; // eax@35
  int v45; // ecx@35
  int v46; // edx@35
  unsigned int v47; // edi@35
  unsigned int v48; // ebx@35
  PgWin *v49; // ST60_4@35
  PgFont *v50; // eax@35
  PgWinText *v51; // edi@35
  NiRefObjectVtbl *v52; // ebx@35
  char *v53; // eax@35
  NiRefObjectVtbl *v54; // edi@35
  NiNode *v55; // ebx@35
  char *v56; // eax@35
  void *v57; // eax@36
  void *v58; // edi@37
  NiNode *v59; // ebx@39
  char *v60; // eax@39
  PgSprData *v61; // ebx@39
  char *v62; // eax@39
  char *v63; // eax@39
  PgWinBut *v64; // eax@39
  PgFont *v65; // ecx@39
  PgSprData::PgHitTester *v66; // eax@39
  unsigned int v67; // ebx@39
  PgWin *v68; // ST60_4@39
  PgFont *v69; // eax@39
  PgWinText *v70; // eax@39
  NiRefObjectVtbl *v71; // edi@39
  NiNode *v72; // ebx@39
  char *v73; // eax@39
  PgSprData *v74; // eax@40
  SlideBar *v75; // eax@40
  int v76; // edx@40
  unsigned int v77; // [sp+68h] [bp-94h]@1
  D3DXCOLOR kColor; // [sp+78h] [bp-84h]@24
  UIUtil ui; // [sp+88h] [bp-74h]@24
  int iOffY; // [sp+9Ch] [bp-60h]@17
  int iOffX; // [sp+A0h] [bp-5Ch]@17
  PgFont *i; // [sp+A4h] [bp-58h]@24
  NiSourceTexture *pkTexture; // [sp+A8h] [bp-54h]@7
  NiPointer<NiTexturingProperty> spTexProp; // [sp+ACh] [bp-50h]@4
  PgFrameWork *pkTextList; // [sp+B0h] [bp-4Ch]@1
  unsigned int uiWidth; // [sp+B4h] [bp-48h]@17
  NiNode *pkFont; // [sp+B8h] [bp-44h]@24
  unsigned int uiHeight; // [sp+BCh] [bp-40h]@17
  PgSprData *uiControlIndex; // [sp+C0h] [bp-3Ch]@24
  int iTop; // [sp+C4h] [bp-38h]@9
  int iLeft; // [sp+C8h] [bp-34h]@9
  NiPointer<NiNode> spNode; // [sp+CCh] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+D0h] [bp-2Ch]@26
  unsigned int v94; // [sp+ECh] [bp-10h]@1
  int v95; // [sp+F8h] [bp-4h]@1
  int v96; // [sp+FCh] [bp+0h]@1

  v94 = (unsigned int)&v96 ^ __security_cookie;
  v77 = (unsigned int)&v96 ^ __security_cookie;
  v2 = this;
  pkTextList = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v95 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\PlayGuideWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v95) = 1;
  if ( v8 )
    pkTexture = (NiSourceTexture *)v8[1].__vecDelDtor;
  else
    pkTexture = 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, pkTexture);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkTextList, "PlayGuideContent", 0) )
  {
    LOBYTE(v95) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v95 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = iLeft;
  v13 = iTop;
  iOffX = iLeft;
  iOffY = iTop;
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v15 = Font::Get(0);
    pkFont = (NiNode *)v15;
    *(_QWORD *)&kColor.r = Color::m_kDxWinTitleColor;
    *(_QWORD *)&kColor.b = qword_A746E8;
    v16 = PgWinText::CreateWin(
            iLeft - v12,
            iTop - v13,
            uiWidth,
            uiHeight,
            (PgFont *)v15,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
    uiControlIndex = (PgSprData *)v16;
    v17(&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)&kColor);
    ((void (__stdcall *)(signed int))uiControlIndex->baseclass_0.vfptr[122].__vecDelDtor)(1);
    pkTextList = (PgFrameWork *)&uiControlIndex->baseclass_0.vfptr[118];
    v18 = TextData2::Get(0xE0EC2B54u);
    ((void (__thiscall *)(PgSprData *, char *))pkTextList->baseclass_0.vfptr)(uiControlIndex, v18);
    ((void (__stdcall *)(_DWORD))uiControlIndex->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Theme", &iLeft, &iTop, 0);
    v20 = PgWinSpr::CreateWin(iLeft - v12, iTop - v13, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkThemeSprWin = v20;
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, pkTexture);
    PgWinSpr::CreateWin(iLeft - v12, iTop - v13, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, pkTexture);
    v23 = PgWinSpr::CreateWin(iLeft - v12, iTop - v13, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v24 = pkTexture;
    v25 = spNode.m_pObject;
    v2->m_pkListPanel = v23;
    uiControlIndex = PgSprData::Create(&v25->baseclass_0, "ClsNor", &iLeft, &iTop, v24);
    PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(iLeft - v12, iTop - v13, uiControlIndex, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    MenuTexMgr::GetTexture(0x18u);
    UIUtil::UIUtil(&ui);
    LOBYTE(v95) = 2;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, 0, 0);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    i = UIUtil::AddOutLineFromFontType(&ui, GTFONT, 1u);
    if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GuideTitle", &iLeft, &iTop, &uiWidth, &uiHeight)
      || (v26 = PgWinText::CreateWin(
                  iLeft - v12,
                  iTop - v13,
                  uiWidth,
                  uiHeight,
                  i,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0),
          v2->m_pkGuideTitleTextWin = v26,
          v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
            (NiRefObject *)v26,
            1u),
          pkTextList = (PgFrameWork *)&v2->m_pkGuideTitleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117],
          v27 = Color::GetDxColor((D3DXCOLOR *)&thisa.baseclass_0.___u0._Bx._Buf[12], -4, -114, 0, -1),
          ((void (__thiscall *)(PgWinText *, D3DXCOLOR *))pkTextList->baseclass_0.vfptr)(v2->m_pkGuideTitleTextWin, v27),
          ((void (__stdcall *)(_DWORD))v2->m_pkGuideTitleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
          !PgUtil::GetTriShapeRect(
             &spNode.m_pObject->baseclass_0,
             "GuideExplanation",
             &iLeft,
             &iTop,
             &uiWidth,
             &uiHeight)) )
      goto LABEL_43;
    v28 = PgWinText::CreateWin(
            iLeft - v12,
            iTop - v13,
            uiWidth,
            uiHeight,
            (PgFont *)pkFont,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkGuideExplanationTextWin = v28;
    ((void (__thiscall *)(PgWinText *, _DWORD, unsigned int))v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      v28,
      0,
      v77);
    v29 = v2->m_pkGuideExplanationTextWin->m_spTextGeom.m_pObject;
    if ( v29 )
    {
      *(_WORD *)&v29->baseclass_0.m_bAutoWordWrap = 257;
      SpScreenText::SetVerticalGap(&v29->baseclass_0, 4);
    }
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuideImage", &iLeft, &iTop, 0);
    v31 = PgWinSpr::CreateWin(iLeft - v12, iTop - v13, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkGuideImageSprWin = v31;
    ((void (__thiscall *)(PgWinSpr *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v31);
    if ( !PgUtil::GetTriShapeRect(
            &spNode.m_pObject->baseclass_0,
            "GuidePageNumText",
            &iLeft,
            &iTop,
            &uiWidth,
            &uiHeight) )
      goto LABEL_43;
    v32 = PgWinText::CreateWin(
            iLeft - v12,
            iTop - v13,
            uiWidth,
            uiHeight,
            i,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkGuidePageNumTextWin = v32;
    ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v32,
      1,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_pkGuidePageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v33 = v2->m_pkGuidePageNumTextWin->m_spTextGeom.m_pObject;
    if ( v33 )
      v33->baseclass_0.m_bTextCmdOn = 1;
    uiControlIndex = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuidePage_Nor00", &iLeft, &iTop, 0);
    PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "GuidePage_Click00");
    PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "GuidePage_Over00");
    v34 = PgWinBut::CreateWin(
            iLeft - v12,
            iTop - v13,
            uiControlIndex,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            3u,
            0,
            0);
    v2->m_pkGuidePageLeftButWin = v34;
    ((void (__thiscall *)(PgWinBut *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v34);
    uiControlIndex = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuidePage_Nor01", &iLeft, &iTop, 0);
    PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "GuidePage_Click01");
    PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "GuidePage_Over01");
    v35 = PgWinBut::CreateWin(
            iLeft - v12,
            iTop - v13,
            uiControlIndex,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            4u,
            0,
            0);
    v2->m_pkGuidePageRightButWin = v35;
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v35,
      0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GuideSerchText", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v36 = EditWinEx::CreateWin(
              iLeft - v12,
              iTop - v13,
              uiWidth,
              uiHeight,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              NORMAL,
              0x10u,
              1u,
              0,
              0,
              1);
      v2->m_pkGuideSearchTextEditWin = v36;
      EditWinEx::SetFocusClear(v36, 1);
      v37 = TextData3::Get(0x8095BCC4u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        v37);
      v38 = v2->m_pkGuideSearchTextEditWin;
      LOBYTE(v95) = 3;
      EditWinEx::SetDefaultStr(v38, v39);
      LOBYTE(v95) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      pkFont = (NiNode *)&v2->m_pkGuideSearchTextEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115];
      v40 = TextData3::Get(0x8095BCC4u);
      ((void (__thiscall *)(EditWinEx *, char *, _DWORD))pkFont->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
        v2->m_pkGuideSearchTextEditWin,
        v40,
        0);
      v41 = TextData3::Get(0x8095BCC4u);
      v42 = v2->m_acPrevSearchText - v41;
      do
      {
        v43 = *v41;
        v41[v42] = *v41;
        ++v41;
      }
      while ( v43 );
      uiControlIndex = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ListBtnNor", &iLeft, &iTop, 0);
      PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "ListBtnClick");
      PgSprData::Add(uiControlIndex, &spNode.m_pObject->baseclass_0, "ListBtnOver");
      v44 = PgWinBut::CreateWin(
              iLeft - v12,
              iTop - v13,
              uiControlIndex,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              5u,
              0,
              0);
      v45 = (int)uiControlIndex;
      v2->m_pkListButWin = v44;
      v46 = *(_DWORD *)(v45 + 36);
      v47 = *(_DWORD *)(*(_DWORD *)v46 + 24);
      v48 = *(_DWORD *)(*(_DWORD *)v46 + 20);
      v49 = (PgWin *)v44;
      v50 = Font::Get(BOLD);
      v51 = PgWinText::CreateWin(0, 0, v48, v47, v50, v49, 0, 0);
      v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v51,
        5u);
      v52 = v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v53 = TextData3::Get(0xBED5D4DEu);
      v52[118].__vecDelDtor((NiRefObject *)v51, (unsigned int)v53);
      v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v51,
        0);
      v54 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      i = 0;
      uiControlIndex = 0;
      v55 = spNode.m_pObject;
      v56 = fs("TextList%02dNor");
      if ( v54[18].__vecDelDtor((NiRefObject *)v55, (unsigned int)v56) )
      {
        do
        {
          v57 = operator new(0xCu);
          if ( v57 )
          {
            *(_DWORD *)v57 = 0;
            *((_DWORD *)v57 + 1) = 0;
            *((_DWORD *)v57 + 2) = 0;
            v58 = v57;
          }
          else
          {
            v58 = 0;
          }
          v59 = spNode.m_pObject;
          pkTextList = (PgFrameWork *)v58;
          v60 = fs("TextList%02dNor");
          v61 = PgSprData::Create(&v59->baseclass_0, v60, &iLeft, &iTop, 0);
          pkFont = spNode.m_pObject;
          v62 = fs("TextList%02dClick");
          PgSprData::Add(v61, &pkFont->baseclass_0, v62);
          pkFont = spNode.m_pObject;
          v63 = fs("TextList%02dOver");
          PgSprData::Add(v61, &pkFont->baseclass_0, v63);
          v64 = PgWinBut::CreateWin(iLeft - iOffX, iTop - iOffY, v61, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
          v65 = i;
          *(_DWORD *)v58 = v64;
          v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
            (NiRefObject *)v64,
            (unsigned int)v65);
          v66 = v61->m_akHitTester.m_pBase->m_pObject;
          v67 = v66->m_uiHeight;
          v68 = *(PgWin **)v58;
          pkFont = (NiNode *)v66->m_uiWidth;
          v69 = Font::Get(BOLD);
          v70 = PgWinText::CreateWin(0, 0, (unsigned int)pkFont, v67, v69, v68, 0, 0);
          *((_DWORD *)v58 + 1) = v70;
          v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
            (NiRefObject *)v70,
            5u);
          (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v58 + 1) + 240))(0);
          *((_DWORD *)v58 + 2) = (*(int (**)(void))(**(_DWORD **)v58 + 168))();
          std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
            (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_kTextList,
            (const unsigned int *)&pkTextList);
          v71 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          i = (PgFont *)((char *)i + 1);
          uiControlIndex = (PgSprData *)i;
          v72 = spNode.m_pObject;
          v73 = fs("TextList%02dNor");
        }
        while ( v71[18].__vecDelDtor((NiRefObject *)v72, (unsigned int)v73) );
      }
      v74 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, pkTexture);
      v75 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v74,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkSlideBar = v75;
      v75->m_uiClickMsg = 1;
      v2->m_pkSlideBar->m_eType = 1;
      v76 = (signed int)((char *)v2->m_kTextList.baseclass_0._Mylast
                       - *(_DWORD *)&v2->m_kTextList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      SlideBar::SetSplitCnt(v2->m_pkSlideBar, (37 - v76) & ((37 - v76 <= 0) - 1));
      v2->m_iSplitCnt = v2->m_pkSlideBar->m_nSplitCnt;
      ((void (__thiscall *)(PlayGuideWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        1.0);
      LOBYTE(v95) = 1;
      UIUtil::_UIUtil(&ui);
      LOBYTE(v95) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v95 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
LABEL_43:
      LOBYTE(v95) = 1;
      UIUtil::_UIUtil(&ui);
      LOBYTE(v95) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v95 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v95) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spTexProp.m_pObject,
        1u);
    v14 = spNode.m_pObject;
    v95 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v14 )
      return 0;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005734F0) --------------------------------------------------------
void __thiscall PlayGuideWin::OnCommand(PlayGuideWin *this, unsigned int wParam, int lParam)
{
  SlideBar *v3; // eax@3

  switch ( wParam )
  {
    case 0u:
      PlayGuideWin::OnTextList(this, lParam);
      break;
    case 1u:
      v3 = this->m_pkSlideBar;
      if ( v3 )
      {
        this->m_iCurPos = v3->m_nCurPos;
        PlayGuideWin::UpdateTextList(this);
      }
      break;
    case 2u:
      GameFrameWork::ClosePlayGuideWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 5u:
      PlayGuideWin::OnSearchBtn(this);
      break;
    case 3u:
      PlayGuideWin::OnPageBtn(this, 1);
      break;
    case 4u:
      PlayGuideWin::OnPageBtn(this, 0);
      break;
    default:
      return;
  }
}

//----- (00573580) --------------------------------------------------------
void *__thiscall PlayGuideMinWin::_vector_deleting_destructor_(PlayGuideMinWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PlayGuideMinWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PlayGuideMinWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A5BA0: using guessed type int (__stdcall *PlayGuideMinWin___vftable_)(int uiFlags);
// 9A5BBC: using guessed type int (__thiscall *PlayGuideMinWin___vftable_)(void *p, char);

//----- (005735C0) --------------------------------------------------------
BasicInfoLink *__cdecl BasicInfoLinkTab::GetByType(BasicInfoLinkType eType)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  BasicInfoLink *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (BasicInfoLink *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4),
                                  v3);
      if ( result )
      {
        if ( result->BIL_GuideType == eType )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (00573610) --------------------------------------------------------
BasicInfoLink *__cdecl BasicInfoLinkTab::GetByCategory(BasicInfoCategory eCategory)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  BasicInfoLink *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (BasicInfoLink *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<BasicInfoLink_BasicInfoLinkTab>::ms_pkTable + 4),
                                  v3);
      if ( result )
      {
        if ( result->BIL_Category == eCategory )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A97EB4: using guessed type int ITableBase_BasicInfoLink_BasicInfoLinkTab___ms_pkTable;

//----- (00573660) --------------------------------------------------------
BasicInfoFindWord *__cdecl BasicInfoFindWordTab::GetByFindType(BasicInfoFindType eType)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  BasicInfoFindWord *result; // eax@5

  v1 = *(_DWORD *)(ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      result = (BasicInfoFindWord *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 4),
                                      v3);
      if ( result )
      {
        if ( result->BIL_GuideFind == eType )
          break;
      }
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A97EC8: using guessed type int ITableBase_BasicInfoFindWord_BasicInfoFindWordTab___ms_pkTable;

//----- (005736B0) --------------------------------------------------------
void *__thiscall PageWinSpr::_scalar_deleting_destructor_(PageWinSpr *this, unsigned int a2)
{
  PageWinSpr *v2; // esi@1

  v2 = this;
  if ( this->m_kToolTip.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kToolTip.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_kToolTip.baseclass_0._Myres = 15;
  v2->m_kToolTip.baseclass_0._Mysize = 0;
  v2->m_kToolTip.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinSpr::_PgWinSpr(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00573710) --------------------------------------------------------
void __thiscall std::vector<BasicInfoFind___std::allocator<BasicInfoFind__>>::clear(std::vector<BasicInfoFind *,std::allocator<BasicInfoFind *> > *this)
{
  std::vector<BasicInfoFind *,std::allocator<BasicInfoFind *> > *v1; // ebx@1
  BasicInfoFind **v2; // ecx@1
  char *v3; // esi@1

  v1 = this;
  v2 = this->baseclass_0._Mylast;
  v3 = *(char **)&v1->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( *(BasicInfoFind ***)&v1->baseclass_0.___u0.baseclass_0.dummy[0] != v2 )
  {
    memmove(v3, (char *)v2, 0);
    v1->baseclass_0._Mylast = (BasicInfoFind **)v3;
  }
}

//----- (00573740) --------------------------------------------------------
void __cdecl BasicInfoFindTab::GetListByFindType(BasicInfoFindType eType, std::vector<BasicInfoFind *,std::allocator<BasicInfoFind *> > *pkBasicInfoFindVector, bool *pabTypeCheck)
{
  int v3; // eax@3
  unsigned int v4; // edi@4
  unsigned int v5; // esi@6
  void *v6; // eax@7
  void *pkData; // [sp+8h] [bp-D0h]@7
  char bSameCheck[197]; // [sp+Ch] [bp-CCh]@11
  unsigned int v9; // [sp+D4h] [bp-4h]@1
  int v10; // [sp+D8h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  if ( pkBasicInfoFindVector && pabTypeCheck )
  {
    v3 = *(_DWORD *)(ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable + 56);
    v4 = v3 ? *(_DWORD *)(v3 + 40) : 0;
    v5 = 0;
    if ( v4 )
    {
      do
      {
        v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<BasicInfoFind_BasicInfoFindTab>::ms_pkTable + 4), v5);
        pkData = v6;
        if ( v6 && *(_DWORD *)v6 < 197 && *((_DWORD *)v6 + 1) == eType )
        {
          if ( !pabTypeCheck[*(_DWORD *)v6] )
          {
            pabTypeCheck[*(_DWORD *)v6] = 1;
            bSameCheck[*(_DWORD *)v6] = 1;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)pkBasicInfoFindVector,
              (const unsigned int *)&pkData);
          }
        }
        ++v5;
      }
      while ( v5 < v4 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97EC0: using guessed type int ITableBase_BasicInfoFind_BasicInfoFindTab___ms_pkTable;

//----- (00573800) --------------------------------------------------------
void __cdecl BasicInfoFindWordTab::GetListByWord(char *FindWord, std::vector<BasicInfoFindWord *,std::allocator<BasicInfoFindWord *> > *BasicInfoFindWordVector)
{
  int v2; // eax@3
  unsigned int v3; // ebx@4
  unsigned int v4; // edi@6
  void *v5; // eax@7
  void *v6; // esi@7
  int v7; // eax@8
  char v8; // cl@9
  std::vector<unsigned long,std::allocator<unsigned long> > *v9; // ecx@13
  void *pkData; // [sp+0h] [bp-16Ch]@7
  std::vector<unsigned long,std::allocator<unsigned long> > *this; // [sp+4h] [bp-168h]@1
  char *str2; // [sp+8h] [bp-164h]@1
  char BIL_Word[256]; // [sp+Ch] [bp-160h]@9
  char bTypeCheck[90]; // [sp+10Ch] [bp-60h]@6
  unsigned int v15; // [sp+168h] [bp-4h]@1
  int v16; // [sp+16Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  str2 = FindWord;
  this = (std::vector<unsigned long,std::allocator<unsigned long> > *)BasicInfoFindWordVector;
  if ( BasicInfoFindWordVector && FindWord )
  {
    v2 = *(_DWORD *)(ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 56);
    v3 = v2 ? *(_DWORD *)(v2 + 40) : 0;
    bTypeCheck[0] = 0;
    memset(&bTypeCheck[1], 0, 0x59u);
    v4 = 0;
    if ( v3 )
    {
      do
      {
        v5 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<BasicInfoFindWord_BasicInfoFindWordTab>::ms_pkTable + 4),
               v4);
        v6 = v5;
        pkData = v5;
        if ( v5 )
        {
          v7 = (int)((char *)v5 + 4);
          do
          {
            v8 = *(_BYTE *)v7;
            *(_BYTE *)(BIL_Word - ((char *)v6 + 4) + v7) = *(_BYTE *)v7;
            ++v7;
          }
          while ( v8 );
          _strlwr(str2);
          _strlwr(BIL_Word);
          if ( *(_DWORD *)v6 < 90 )
          {
            if ( _mbsstr(BIL_Word, str2) )
            {
              if ( !bTypeCheck[*(_DWORD *)v6] )
              {
                v9 = this;
                bTypeCheck[*(_DWORD *)v6] = 1;
                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(v9, (const unsigned int *)&pkData);
              }
            }
          }
        }
        ++v4;
      }
      while ( v4 < v3 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97EC8: using guessed type int ITableBase_BasicInfoFindWord_BasicInfoFindWordTab___ms_pkTable;

//----- (00573920) --------------------------------------------------------
void *__thiscall PlayGuideWin::_scalar_deleting_destructor_(PlayGuideWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PlayGuideWin::_PlayGuideWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00573950) --------------------------------------------------------
LONG __cdecl PopupMenuTemplate::Terminate()
{
  LONG result; // eax@1
  unsigned int v1; // esi@2
  unsigned int v2; // esi@6
  unsigned int v3; // esi@11
  unsigned int v4; // esi@16
  unsigned int v5; // esi@21
  unsigned int v6; // esi@26
  unsigned int v7; // esi@31
  PopupMenuWin *v8; // esi@36
  NiD3DDefaultShader *v9; // esi@41
  NiD3DDefaultShader *v10; // esi@46
  NiD3DDefaultShader *v11; // esi@51
  NiD3DDefaultShader *v12; // esi@56
  unsigned int v13; // esi@61
  unsigned int v14; // esi@66
  int v15; // esi@71
  unsigned int v16; // esi@76
  int v17; // esi@81
  int v18; // esi@86
  int v19; // esi@91
  int v20; // esi@96
  int v21; // esi@101
  int v22; // esi@106
  int v23; // esi@111
  int v24; // esi@116
  int v25; // esi@121
  int v26; // esi@126
  int v27; // esi@131
  int v28; // esi@136
  int v29; // esi@141
  unsigned int v30; // esi@146
  int v31; // esi@151
  unsigned int v32; // esi@156
  unsigned int v33; // esi@161
  unsigned int v34; // esi@166
  unsigned int v35; // esi@171
  unsigned int v36; // esi@176
  unsigned int v37; // esi@181
  unsigned int v38; // esi@186
  unsigned int v39; // esi@191
  unsigned int v40; // esi@196
  unsigned int v41; // esi@201
  unsigned int v42; // esi@206
  unsigned int v43; // esi@211

  result = PopupMenuTemplate::ms_spProposeTradeMenu;
  if ( PopupMenuTemplate::ms_spProposeTradeMenu )
  {
    v1 = PopupMenuTemplate::ms_spProposeTradeMenu;
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spProposeTradeMenu + 4));
    if ( !result && v1 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    PopupMenuTemplate::ms_spProposeTradeMenu = 0;
  }
  v2 = PopupMenuTemplate::ms_spInvitePartyMenu;
  if ( PopupMenuTemplate::ms_spInvitePartyMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spInvitePartyMenu + 4));
    if ( !result && v2 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    PopupMenuTemplate::ms_spInvitePartyMenu = 0;
  }
  v3 = PopupMenuTemplate::ms_spInviteGuildMenu;
  if ( PopupMenuTemplate::ms_spInviteGuildMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spInviteGuildMenu + 4));
    if ( !result && v3 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    PopupMenuTemplate::ms_spInviteGuildMenu = 0;
  }
  v4 = PopupMenuTemplate::ms_spCancelMenu;
  if ( PopupMenuTemplate::ms_spCancelMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spCancelMenu + 4));
    if ( !result && v4 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    PopupMenuTemplate::ms_spCancelMenu = 0;
  }
  v5 = PopupMenuTemplate::ms_spDelegatePartyMenu;
  if ( PopupMenuTemplate::ms_spDelegatePartyMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spDelegatePartyMenu + 4));
    if ( !result && v5 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    PopupMenuTemplate::ms_spDelegatePartyMenu = 0;
  }
  v6 = PopupMenuTemplate::ms_spQuitPartyMenu;
  if ( PopupMenuTemplate::ms_spQuitPartyMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spQuitPartyMenu + 4));
    if ( !result && v6 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    PopupMenuTemplate::ms_spQuitPartyMenu = 0;
  }
  v7 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
  if ( PopupMenuTemplate::ms_spFirePartyMemberMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spFirePartyMemberMenu + 4));
    if ( !result && v7 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    PopupMenuTemplate::ms_spFirePartyMemberMenu = 0;
  }
  v8 = PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin;
  if ( PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin )
  {
    result = InterlockedDecrement((volatile LONG *)&PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( !result && v8 )
      result = (int)v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                      (NiRefObject *)v8,
                      1u);
    PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin = 0;
  }
  v9 = PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu.m_pObject;
  if ( PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu.m_pObject )
  {
    result = InterlockedDecrement((volatile LONG *)&PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( !result && v9 )
      result = (int)v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu.m_pObject = 0;
  }
  v10 = PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu.m_pObject;
  if ( PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu.m_pObject )
  {
    result = InterlockedDecrement((volatile LONG *)&PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( !result && v10 )
      result = (int)v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu.m_pObject = 0;
  }
  v11 = PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu.m_pObject;
  if ( PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu.m_pObject )
  {
    result = InterlockedDecrement((volatile LONG *)&PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( !result && v11 )
      result = (int)v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu.m_pObject = 0;
  }
  v12 = PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu.m_pObject;
  if ( PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu.m_pObject )
  {
    result = InterlockedDecrement((volatile LONG *)&PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( !result && v12 )
      result = (int)v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu.m_pObject = 0;
  }
  v13 = PopupMenuTemplate::ms_spPartyLootSetupMenu;
  if ( PopupMenuTemplate::ms_spPartyLootSetupMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spPartyLootSetupMenu + 4));
    if ( !result && v13 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
    PopupMenuTemplate::ms_spPartyLootSetupMenu = 0;
  }
  v14 = PopupMenuTemplate::ms_spWhisper;
  if ( PopupMenuTemplate::ms_spWhisper )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spWhisper + 4));
    if ( !result && v14 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
    PopupMenuTemplate::ms_spWhisper = 0;
  }
  v15 = PopupMenuTemplate::ms_spFollowCharMenu;
  if ( PopupMenuTemplate::ms_spFollowCharMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spFollowCharMenu + 4));
    if ( !result && v15 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
    PopupMenuTemplate::ms_spFollowCharMenu = 0;
  }
  v16 = PopupMenuTemplate::ms_spConfigRoom;
  if ( PopupMenuTemplate::ms_spConfigRoom )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spConfigRoom + 4));
    if ( !result && v16 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
    PopupMenuTemplate::ms_spConfigRoom = 0;
  }
  v17 = PopupMenuTemplate::ms_spShowBlog;
  if ( PopupMenuTemplate::ms_spShowBlog )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spShowBlog + 4));
    if ( !result && v17 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v17)(v17, 1);
    PopupMenuTemplate::ms_spShowBlog = 0;
  }
  v18 = PopupMenuTemplate::ms_spChangeBlogAddr;
  if ( PopupMenuTemplate::ms_spChangeBlogAddr )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spChangeBlogAddr + 4));
    if ( !result && v18 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
    PopupMenuTemplate::ms_spChangeBlogAddr = 0;
  }
  v19 = PopupMenuTemplate::ms_spKickGuest;
  if ( PopupMenuTemplate::ms_spKickGuest )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spKickGuest + 4));
    if ( !result && v19 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v19)(v19, 1);
    PopupMenuTemplate::ms_spKickGuest = 0;
  }
  v20 = PopupMenuTemplate::ms_spSetArrModeOn;
  if ( PopupMenuTemplate::ms_spSetArrModeOn )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spSetArrModeOn + 4));
    if ( !result && v20 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v20)(v20, 1);
    PopupMenuTemplate::ms_spSetArrModeOn = 0;
  }
  v21 = PopupMenuTemplate::ms_spSetArrModeOff;
  if ( PopupMenuTemplate::ms_spSetArrModeOff )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spSetArrModeOff + 4));
    if ( !result && v21 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
    PopupMenuTemplate::ms_spSetArrModeOff = 0;
  }
  v22 = PopupMenuTemplate::ms_spReturnToInvMHItem;
  if ( PopupMenuTemplate::ms_spReturnToInvMHItem )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spReturnToInvMHItem + 4));
    if ( !result && v22 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v22)(v22, 1);
    PopupMenuTemplate::ms_spReturnToInvMHItem = 0;
  }
  v23 = PopupMenuTemplate::ms_spArrToInvMHItem;
  if ( PopupMenuTemplate::ms_spArrToInvMHItem )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spArrToInvMHItem + 4));
    if ( !result && v23 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v23)(v23, 1);
    PopupMenuTemplate::ms_spArrToInvMHItem = 0;
  }
  v24 = PopupMenuTemplate::ms_spDeleteMHItem;
  if ( PopupMenuTemplate::ms_spDeleteMHItem )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spDeleteMHItem + 4));
    if ( !result && v24 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v24)(v24, 1);
    PopupMenuTemplate::ms_spDeleteMHItem = 0;
  }
  v25 = PopupMenuTemplate::ms_spObjName;
  if ( PopupMenuTemplate::ms_spObjName )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spObjName + 4));
    if ( !result && v25 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v25)(v25, 1);
    PopupMenuTemplate::ms_spObjName = 0;
  }
  v26 = PopupMenuTemplate::ms_spObjAction;
  if ( PopupMenuTemplate::ms_spObjAction )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spObjAction + 4));
    if ( !result && v26 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v26)(v26, 1);
    PopupMenuTemplate::ms_spObjAction = 0;
  }
  v27 = PopupMenuTemplate::ms_spMHObjEndure;
  if ( PopupMenuTemplate::ms_spMHObjEndure )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spMHObjEndure + 4));
    if ( !result && v27 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v27)(v27, 1);
    PopupMenuTemplate::ms_spMHObjEndure = 0;
  }
  v28 = PopupMenuTemplate::ms_spMHObjEndurePercentage;
  if ( PopupMenuTemplate::ms_spMHObjEndurePercentage )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spMHObjEndurePercentage + 4));
    if ( !result && v28 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v28)(v28, 1);
    PopupMenuTemplate::ms_spMHObjEndurePercentage = 0;
  }
  v29 = PopupMenuTemplate::m_spReArrange;
  if ( PopupMenuTemplate::m_spReArrange )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::m_spReArrange + 4));
    if ( !result && v29 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v29)(v29, 1);
    PopupMenuTemplate::m_spReArrange = 0;
  }
  v30 = PopupMenuTemplate::ms_spHighHolyPromise;
  if ( PopupMenuTemplate::ms_spHighHolyPromise )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spHighHolyPromise + 4));
    if ( !result && v30 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v30)(v30, 1);
    PopupMenuTemplate::ms_spHighHolyPromise = 0;
  }
  v31 = PopupMenuTemplate::ms_spTargetCharName;
  if ( PopupMenuTemplate::ms_spTargetCharName )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spTargetCharName + 4));
    if ( !result && v31 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v31)(v31, 1);
    PopupMenuTemplate::ms_spTargetCharName = 0;
  }
  v32 = PopupMenuTemplate::ms_spBuffUIMenu;
  if ( PopupMenuTemplate::ms_spBuffUIMenu )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spBuffUIMenu + 4));
    if ( !result && v32 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v32)(v32, 1);
    PopupMenuTemplate::ms_spBuffUIMenu = 0;
  }
  v33 = PopupMenuTemplate::ms_spRaidSelect;
  if ( PopupMenuTemplate::ms_spRaidSelect )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidSelect + 4));
    if ( !result && v33 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v33)(v33, 1);
    PopupMenuTemplate::ms_spRaidSelect = 0;
  }
  v34 = PopupMenuTemplate::ms_spRaidInvite;
  if ( PopupMenuTemplate::ms_spRaidInvite )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidInvite + 4));
    if ( !result && v34 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v34)(v34, 1);
    PopupMenuTemplate::ms_spRaidInvite = 0;
  }
  v35 = PopupMenuTemplate::ms_spRaidVanish;
  if ( PopupMenuTemplate::ms_spRaidVanish )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidVanish + 4));
    if ( !result && v35 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v35)(v35, 1);
    PopupMenuTemplate::ms_spRaidVanish = 0;
  }
  v36 = PopupMenuTemplate::ms_spRaidLeave;
  if ( PopupMenuTemplate::ms_spRaidLeave )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidLeave + 4));
    if ( !result && v36 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v36)(v36, 1);
    PopupMenuTemplate::ms_spRaidLeave = 0;
  }
  v37 = PopupMenuTemplate::ms_spChangeRaidLeader;
  if ( PopupMenuTemplate::ms_spChangeRaidLeader )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spChangeRaidLeader + 4));
    if ( !result && v37 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v37)(v37, 1);
    PopupMenuTemplate::ms_spChangeRaidLeader = 0;
  }
  v38 = PopupMenuTemplate::ms_spChangeRaidLooter;
  if ( PopupMenuTemplate::ms_spChangeRaidLooter )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spChangeRaidLooter + 4));
    if ( !result && v38 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v38)(v38, 1);
    PopupMenuTemplate::ms_spChangeRaidLooter = 0;
  }
  v39 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
  if ( PopupMenuTemplate::ms_spRaidSubLeaderUp )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidSubLeaderUp + 4));
    if ( !result && v39 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v39)(v39, 1);
    PopupMenuTemplate::ms_spRaidSubLeaderUp = 0;
  }
  v40 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
  if ( PopupMenuTemplate::ms_spRaidSubLeaderDown )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidSubLeaderDown + 4));
    if ( !result && v40 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v40)(v40, 1);
    PopupMenuTemplate::ms_spRaidSubLeaderDown = 0;
  }
  v41 = PopupMenuTemplate::ms_spCollectOpen;
  if ( PopupMenuTemplate::ms_spCollectOpen )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spCollectOpen + 4));
    if ( !result && v41 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v41)(v41, 1);
    PopupMenuTemplate::ms_spCollectOpen = 0;
  }
  v42 = PopupMenuTemplate::ms_spInviteFriend;
  if ( PopupMenuTemplate::ms_spInviteFriend )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spInviteFriend + 4));
    if ( !result && v42 )
      result = (**(int (__thiscall ***)(_DWORD, _DWORD))v42)(v42, 1);
    PopupMenuTemplate::ms_spInviteFriend = 0;
  }
  v43 = PopupMenuTemplate::ms_spRideOn;
  if ( PopupMenuTemplate::ms_spRideOn )
  {
    result = InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRideOn + 4));
    if ( !result )
    {
      if ( v43 )
        result = (**(int (__thiscall ***)(_DWORD, _DWORD))v43)(v43, 1);
    }
    PopupMenuTemplate::ms_spRideOn = 0;
  }
  return result;
}
// A99070: using guessed type int PopupMenuTemplate__ms_spFollowCharMenu;
// A990D0: using guessed type int PopupMenuTemplate__ms_spTargetCharName;
// A990F0: using guessed type int PopupMenuTemplate__ms_spShowBlog;
// A990F4: using guessed type int PopupMenuTemplate__ms_spChangeBlogAddr;
// A990F8: using guessed type int PopupMenuTemplate__ms_spKickGuest;
// A990FC: using guessed type int PopupMenuTemplate__ms_spSetArrModeOn;
// A99100: using guessed type int PopupMenuTemplate__ms_spSetArrModeOff;
// A99104: using guessed type int PopupMenuTemplate__ms_spReturnToInvMHItem;
// A99108: using guessed type int PopupMenuTemplate__ms_spArrToInvMHItem;
// A9910C: using guessed type int PopupMenuTemplate__ms_spDeleteMHItem;
// A99110: using guessed type int PopupMenuTemplate__ms_spObjAction;
// A99114: using guessed type int PopupMenuTemplate__ms_spObjName;
// A99118: using guessed type int PopupMenuTemplate__ms_spMHObjEndure;
// A9911C: using guessed type int PopupMenuTemplate__ms_spMHObjEndurePercentage;
// A99120: using guessed type int PopupMenuTemplate__m_spReArrange;

//----- (00574020) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetResolutionMenu(unsigned int uiParam)
{
  NiD3DDefaultShader *v1; // eax@2
  PopupMenu *result; // eax@2
  NiD3DDefaultShader *v3; // eax@3
  NiD3DDefaultShader *v4; // eax@4
  NiD3DDefaultShader *v5; // eax@5
  NiD3DDefaultShader *v6; // eax@6
  NiD3DDefaultShader *v7; // eax@7
  NiD3DDefaultShader *v8; // eax@8
  NiD3DDefaultShader *v9; // eax@9
  NiD3DDefaultShader *v10; // eax@10
  NiD3DDefaultShader *v11; // eax@11
  NiD3DDefaultShader *v12; // eax@12
  NiD3DDefaultShader *v13; // eax@13
  NiD3DDefaultShader *v14; // eax@14
  NiD3DDefaultShader *v15; // eax@15
  NiD3DDefaultShader *v16; // eax@16
  NiD3DDefaultShader *v17; // eax@17
  NiD3DDefaultShader *v18; // eax@18
  NiD3DDefaultShader *v19; // eax@19
  NiD3DDefaultShader *v20; // eax@20
  NiD3DDefaultShader *v21; // eax@21

  switch ( uiParam )
  {
    case 0u:
      v1 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("800x600", 0x8Eu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu0, v1);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu0.m_pObject;
      break;
    case 1u:
      v3 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1024x768", 0x8Fu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu1, v3);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu1.m_pObject;
      break;
    case 2u:
      v4 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x768(wide)", 0x90u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu2, v4);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu2.m_pObject;
      break;
    case 3u:
      v5 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x960", 0x91u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu3, v5);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu3.m_pObject;
      break;
    case 4u:
      v6 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x1024", 0x92u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu4, v6);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu4.m_pObject;
      break;
    case 5u:
      v7 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1400x1050", 0x93u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu5, v7);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu5.m_pObject;
      break;
    case 6u:
      v8 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1600x1200", 0x94u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu6, v8);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu6.m_pObject;
      break;
    case 7u:
      v9 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1600x900(wide)", 0x95u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu7, v9);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu7.m_pObject;
      break;
    case 8u:
      v10 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1920x1440", 0x96u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu8, v10);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu8.m_pObject;
      break;
    case 9u:
      v11 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1920x1200(wide)", 0x97u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu9, v11);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu9.m_pObject;
      break;
    case 0xAu:
      v12 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1680x1050(wide)", 0x98u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu10, v12);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu10.m_pObject;
      break;
    case 0xBu:
      v13 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x800(wide)", 0x99u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu11, v13);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu11.m_pObject;
      break;
    case 0xCu:
      v14 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1600x900(wide)", 0x9Au, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu12, v14);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu12.m_pObject;
      break;
    case 0xDu:
      v15 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1440x900(wide)", 0x9Bu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu13, v15);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu13.m_pObject;
      break;
    case 0xEu:
      v16 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1920x1080(wide)", 0x9Cu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu14, v16);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu14.m_pObject;
      break;
    case 0xFu:
      v17 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("2560x1440", 0x9Du, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu15, v17);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu15.m_pObject;
      break;
    case 0x10u:
      v18 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("2560x1600(wide)", 0x9Eu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu16, v18);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu16.m_pObject;
      break;
    case 0x11u:
      v19 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("3840x2160(wide)", 0x9Fu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu17, v19);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu17.m_pObject;
      break;
    case 0x12u:
      v20 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1366x768", 0xA0u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu18, v20);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu18.m_pObject;
      break;
    case 0x13u:
      v21 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("3440x1440(wide)", 0xA1u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu19, v21);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu19.m_pObject;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00574430) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::AccountFrameGetResolutionMenu(unsigned int uiParam)
{
  NiD3DDefaultShader *v1; // eax@2
  PopupMenu *result; // eax@2
  NiD3DDefaultShader *v3; // eax@3
  NiD3DDefaultShader *v4; // eax@4
  NiD3DDefaultShader *v5; // eax@5
  NiD3DDefaultShader *v6; // eax@6
  NiD3DDefaultShader *v7; // eax@7
  NiD3DDefaultShader *v8; // eax@8
  NiD3DDefaultShader *v9; // eax@9
  NiD3DDefaultShader *v10; // eax@10
  NiD3DDefaultShader *v11; // eax@11
  NiD3DDefaultShader *v12; // eax@12
  NiD3DDefaultShader *v13; // eax@13
  NiD3DDefaultShader *v14; // eax@14
  NiD3DDefaultShader *v15; // eax@15
  NiD3DDefaultShader *v16; // eax@16
  NiD3DDefaultShader *v17; // eax@17
  NiD3DDefaultShader *v18; // eax@18
  NiD3DDefaultShader *v19; // eax@19
  NiD3DDefaultShader *v20; // eax@20
  NiD3DDefaultShader *v21; // eax@21

  switch ( uiParam )
  {
    case 0u:
      v1 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("800x600", 0x16u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu0, v1);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu0.m_pObject;
      break;
    case 1u:
      v3 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1024x768", 0x17u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu1, v3);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu1.m_pObject;
      break;
    case 2u:
      v4 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x768(wide)", 0x18u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu2, v4);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu2.m_pObject;
      break;
    case 3u:
      v5 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x960", 0x19u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu3, v5);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu3.m_pObject;
      break;
    case 4u:
      v6 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x1024", 0x1Au, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu4, v6);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu4.m_pObject;
      break;
    case 5u:
      v7 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1400x1050", 0x1Bu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu5, v7);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu5.m_pObject;
      break;
    case 6u:
      v8 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1600x1200", 0x1Cu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu6, v8);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu6.m_pObject;
      break;
    case 7u:
      v9 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1600x900(wide)", 0x1Du, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu7, v9);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu7.m_pObject;
      break;
    case 8u:
      v10 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1920x1440", 0x1Eu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu8, v10);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu8.m_pObject;
      break;
    case 9u:
      v11 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1920x1200(wide)", 0x1Fu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu9, v11);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu9.m_pObject;
      break;
    case 0xAu:
      v12 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1680x1050(wide)", 0x20u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu10, v12);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu10.m_pObject;
      break;
    case 0xBu:
      v13 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1280x800(wide)", 0x21u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu11, v13);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu11.m_pObject;
      break;
    case 0xCu:
      v14 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1600x900(wide)", 0x22u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu12, v14);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu12.m_pObject;
      break;
    case 0xDu:
      v15 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1440x900(wide)", 0x23u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu13, v15);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu13.m_pObject;
      break;
    case 0xEu:
      v16 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1920x1080(wide)", 0x24u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu14, v16);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu14.m_pObject;
      break;
    case 0xFu:
      v17 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("2560x1440", 0x25u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu15, v17);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu15.m_pObject;
      break;
    case 0x10u:
      v18 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("2560x1600(wide)", 0x26u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu16, v18);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu16.m_pObject;
      break;
    case 0x11u:
      v19 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("3840x2160(wide)", 0x27u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu17, v19);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu17.m_pObject;
      break;
    case 0x12u:
      v20 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("1366x768", 0x28u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu18, v20);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu18.m_pObject;
      break;
    case 0x13u:
      v21 = (NiD3DDefaultShader *)PopupMenuText::CreateWin("3440x1440(wide)", 0x29u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spResolutionMenu19, v21);
      result = (PopupMenu *)PopupMenuTemplate::ms_spResolutionMenu19.m_pObject;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00574800) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetWingStonePositionList(unsigned int uiParam, char *pcText, unsigned __int16 id)
{
  NiD3DDefaultShader *v3; // eax@2
  char *v4; // eax@2
  char v5; // cl@3
  PopupMenu *result; // eax@4
  NiD3DDefaultShader *v7; // eax@5
  char *v8; // eax@5
  char v9; // cl@6
  NiD3DDefaultShader *v10; // eax@8
  char *v11; // eax@8
  char v12; // cl@9
  NiD3DDefaultShader *v13; // eax@11
  char *v14; // eax@11
  char v15; // cl@12
  NiD3DDefaultShader *v16; // eax@14
  char *v17; // eax@14
  char v18; // cl@15

  switch ( uiParam )
  {
    case 0u:
      v3 = (NiD3DDefaultShader *)PopupMenuText::CreateWin(pcText, 0xEDu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spPlaceMemory0, v3);
      v4 = pcText;
      do
      {
        v5 = *v4;
        v4[(char *)&PopupMenuTemplate::ms_acChoiceMapNameSlot0 - pcText] = *v4;
        ++v4;
      }
      while ( v5 );
      PopupMenuTemplate::ms_smiMapID0 = id;
      result = (PopupMenu *)PopupMenuTemplate::ms_spPlaceMemory0.m_pObject;
      PopupMenuTemplate::ms_uiWingStoneMemorySlot0 = 0;
      break;
    case 1u:
      v7 = (NiD3DDefaultShader *)PopupMenuText::CreateWin(pcText, 0xEEu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spPlaceMemory1, v7);
      v8 = pcText;
      do
      {
        v9 = *v8;
        v8[(char *)&PopupMenuTemplate::ms_acChoiceMapNameSlot1 - pcText] = *v8;
        ++v8;
      }
      while ( v9 );
      result = (PopupMenu *)PopupMenuTemplate::ms_spPlaceMemory1.m_pObject;
      PopupMenuTemplate::ms_uiWingStoneMemorySlot1 = 1;
      PopupMenuTemplate::ms_smiMapID1 = id;
      break;
    case 2u:
      v10 = (NiD3DDefaultShader *)PopupMenuText::CreateWin(pcText, 0xEFu, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spPlaceMemory2, v10);
      v11 = pcText;
      do
      {
        v12 = *v11;
        v11[(char *)&PopupMenuTemplate::ms_acChoiceMapNameSlot2 - pcText] = *v11;
        ++v11;
      }
      while ( v12 );
      result = (PopupMenu *)PopupMenuTemplate::ms_spPlaceMemory2.m_pObject;
      PopupMenuTemplate::ms_uiWingStoneMemorySlot2 = 2;
      PopupMenuTemplate::ms_smiMapID2 = id;
      break;
    case 3u:
      v13 = (NiD3DDefaultShader *)PopupMenuText::CreateWin(pcText, 0xF0u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spPlaceMemory3, v13);
      v14 = pcText;
      do
      {
        v15 = *v14;
        v14[(char *)&PopupMenuTemplate::ms_acChoiceMapNameSlot3 - pcText] = *v14;
        ++v14;
      }
      while ( v15 );
      PopupMenuTemplate::ms_smiMapID3 = id;
      result = (PopupMenu *)PopupMenuTemplate::ms_spPlaceMemory3.m_pObject;
      PopupMenuTemplate::ms_uiWingStoneMemorySlot3 = 3;
      break;
    case 4u:
      v16 = (NiD3DDefaultShader *)PopupMenuText::CreateWin(pcText, 0xF1u, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spPlaceMemory4, v16);
      v17 = pcText;
      do
      {
        v18 = *v17;
        v17[(char *)&PopupMenuTemplate::ms_acChoiceMapNameSlot4 - pcText] = *v17;
        ++v17;
      }
      while ( v18 );
      result = (PopupMenu *)PopupMenuTemplate::ms_spPlaceMemory4.m_pObject;
      PopupMenuTemplate::ms_uiWingStoneMemorySlot4 = 4;
      PopupMenuTemplate::ms_smiMapID4 = id;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}
// A7CE28: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot0;
// A7CE2C: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot1;
// A7CE30: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot2;
// A7CE34: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot3;
// A7CE38: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot4;
// A7CE3C: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID0;
// A7CE40: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID1;
// A7CE44: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID2;
// A7CE48: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID3;
// A7CE4C: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID4;
// A98B40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot4;
// A98C40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot3;
// A98D40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot2;
// A98E40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot1;
// A98F40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot0;

//----- (005749F0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_FocusObjCancel()
{
  PopupMenuText *v0; // esi@1
  PopupMenu *result; // eax@1
  int v2; // edi@3

  v0 = PopupMenuText::CreateWin("-G1¼±ÅÃÃë¼Ò", 0xE2u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::m_spSelectCancel;
  if ( (PopupMenuText *)PopupMenuTemplate::m_spSelectCancel != v0 )
  {
    if ( PopupMenuTemplate::m_spSelectCancel )
    {
      v2 = PopupMenuTemplate::m_spSelectCancel;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::m_spSelectCancel + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    result = (PopupMenu *)v0;
    PopupMenuTemplate::m_spSelectCancel = (int)v0;
    if ( v0 )
    {
      InterlockedIncrement((volatile LONG *)&v0->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::m_spSelectCancel;
    }
  }
  return result;
}
// A99124: using guessed type int PopupMenuTemplate__m_spSelectCancel;

//----- (00574A60) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetTargetCharName(unsigned int uiParam)
{
  unsigned int v1; // eax@1
  char v2; // cl@2
  PopupMenuText *v3; // eax@3
  int v4; // ecx@3
  int v5; // esi@3
  int v6; // edi@5

  v1 = uiParam;
  do
  {
    v2 = *(_BYTE *)v1;
    *(&PopupMenuTemplate::ms_acCharName[v1] - uiParam) = *(_BYTE *)v1;
    ++v1;
  }
  while ( v2 );
  v3 = PopupMenuText::CreateWin(PopupMenuTemplate::ms_acCharName, 0, 0, 0, 0, 0, 1);
  v4 = PopupMenuTemplate::ms_spTargetCharName;
  v5 = (int)v3;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spTargetCharName != v3 )
  {
    if ( PopupMenuTemplate::ms_spTargetCharName )
    {
      v6 = PopupMenuTemplate::ms_spTargetCharName;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spTargetCharName + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    v4 = v5;
    PopupMenuTemplate::ms_spTargetCharName = v5;
    if ( v5 )
    {
      InterlockedIncrement((volatile LONG *)(v5 + 4));
      v4 = PopupMenuTemplate::ms_spTargetCharName;
    }
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 520))(PopupMenuTemplate::ms_acCharName);
  *(_DWORD *)(PopupMenuTemplate::ms_spTargetCharName + 336) = PopupMenuTemplate::ms_acCharName;
  return (PopupMenu *)PopupMenuTemplate::ms_spTargetCharName;
}
// A990D0: using guessed type int PopupMenuTemplate__ms_spTargetCharName;

//----- (00574B10) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetProposeTradeMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  char *v7; // eax@2
  PopupMenuText *v8; // esi@2
  unsigned int v9; // eax@2
  unsigned int v10; // edi@4

  v1 = PopupMenuTemplate::ms_spProposeTradeMenu;
  if ( !PopupMenuTemplate::ms_spProposeTradeMenu )
  {
    v2 = PopupMenuTemplate::ms_spProposeTradeMenu;
    v3 = PopupMenuTemplate::ms_spProposeTradeMenu;
    v4 = (char *)PopupMenuTemplate::ms_spProposeTradeMenu;
    v5 = (PgWin *)PopupMenuTemplate::ms_spProposeTradeMenu;
    v6 = PopupMenuTemplate::ms_spProposeTradeMenu;
    v7 = TextData::Get(0xF44C4B3Bu);
    v8 = PopupMenuText::CreateWin(v7, 0x79u, v6, v5, v4, v3, v2);
    v9 = PopupMenuTemplate::ms_spProposeTradeMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spProposeTradeMenu != v8 )
    {
      if ( PopupMenuTemplate::ms_spProposeTradeMenu )
      {
        v10 = PopupMenuTemplate::ms_spProposeTradeMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spProposeTradeMenu + 4)) )
        {
          if ( v10 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        }
      }
      v9 = (unsigned int)v8;
      PopupMenuTemplate::ms_spProposeTradeMenu = (unsigned int)v8;
      if ( v8 )
      {
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v9 = PopupMenuTemplate::ms_spProposeTradeMenu;
      }
    }
    *(_DWORD *)(v9 + 332) = 1;
    v1 = PopupMenuTemplate::ms_spProposeTradeMenu;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spProposeTradeMenu + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spProposeTradeMenu;
}

//----- (00574BC0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetMainCharUnMetamorphosis()
{
  PopupMenu *result; // eax@1
  bool v1; // ST18_1@2
  unsigned int v2; // ST14_4@2
  char *v3; // ST10_4@2
  PgWin *v4; // ST0C_4@2
  unsigned int v5; // ST08_4@2
  char *v6; // eax@2
  PopupMenuText *v7; // esi@2
  unsigned int v8; // eax@2
  unsigned int v9; // edi@4

  result = (PopupMenu *)PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
  if ( !PopupMenuTemplate::ms_spMainCharUnMetamorphosis )
  {
    v1 = PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
    v2 = PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
    v3 = (char *)PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
    v4 = (PgWin *)PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
    v5 = PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
    v6 = TextData::Get(0x4E427E7Cu);
    v7 = PopupMenuText::CreateWin(v6, 0x79u, v5, v4, v3, v2, v1);
    v8 = PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spMainCharUnMetamorphosis != v7 )
    {
      if ( PopupMenuTemplate::ms_spMainCharUnMetamorphosis )
      {
        v9 = PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spMainCharUnMetamorphosis + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
      v8 = (unsigned int)v7;
      PopupMenuTemplate::ms_spMainCharUnMetamorphosis = (unsigned int)v7;
      if ( v7 )
      {
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v8 = PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
      }
    }
    *(_DWORD *)(v8 + 332) = 8;
    result = (PopupMenu *)PopupMenuTemplate::ms_spMainCharUnMetamorphosis;
  }
  return result;
}

//----- (00574C50) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetInvitePartyMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  char *v7; // eax@2
  PopupMenuText *v8; // esi@2
  unsigned int v9; // eax@2
  unsigned int v10; // edi@4

  v1 = PopupMenuTemplate::ms_spInvitePartyMenu;
  if ( !PopupMenuTemplate::ms_spInvitePartyMenu )
  {
    v2 = PopupMenuTemplate::ms_spInvitePartyMenu;
    v3 = PopupMenuTemplate::ms_spInvitePartyMenu;
    v4 = (char *)PopupMenuTemplate::ms_spInvitePartyMenu;
    v5 = (PgWin *)PopupMenuTemplate::ms_spInvitePartyMenu;
    v6 = PopupMenuTemplate::ms_spInvitePartyMenu;
    v7 = TextData::Get(0x353D9AAAu);
    v8 = PopupMenuText::CreateWin(v7, 0x7Au, v6, v5, v4, v3, v2);
    v9 = PopupMenuTemplate::ms_spInvitePartyMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spInvitePartyMenu != v8 )
    {
      if ( PopupMenuTemplate::ms_spInvitePartyMenu )
      {
        v10 = PopupMenuTemplate::ms_spInvitePartyMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spInvitePartyMenu + 4)) )
        {
          if ( v10 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        }
      }
      v9 = (unsigned int)v8;
      PopupMenuTemplate::ms_spInvitePartyMenu = (unsigned int)v8;
      if ( v8 )
      {
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v9 = PopupMenuTemplate::ms_spInvitePartyMenu;
      }
    }
    *(_DWORD *)(v9 + 332) = 2;
    v1 = PopupMenuTemplate::ms_spInvitePartyMenu;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spInvitePartyMenu + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spInvitePartyMenu;
}

//----- (00574D00) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetCancelMenu()
{
  PopupMenu *result; // eax@1
  bool v1; // ST18_1@2
  unsigned int v2; // ST14_4@2
  char *v3; // ST10_4@2
  PgWin *v4; // ST0C_4@2
  unsigned int v5; // ST08_4@2
  char *v6; // eax@2
  PopupMenuText *v7; // esi@2
  unsigned int v8; // eax@2
  unsigned int v9; // edi@4

  result = (PopupMenu *)PopupMenuTemplate::ms_spCancelMenu;
  if ( !PopupMenuTemplate::ms_spCancelMenu )
  {
    v1 = PopupMenuTemplate::ms_spCancelMenu;
    v2 = PopupMenuTemplate::ms_spCancelMenu;
    v3 = (char *)PopupMenuTemplate::ms_spCancelMenu;
    v4 = (PgWin *)PopupMenuTemplate::ms_spCancelMenu;
    v5 = PopupMenuTemplate::ms_spCancelMenu;
    v6 = TextData::Get(0xDDE7EBEFu);
    v7 = PopupMenuText::CreateWin(v6, 0x7Fu, v5, v4, v3, v2, v1);
    v8 = PopupMenuTemplate::ms_spCancelMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spCancelMenu != v7 )
    {
      if ( PopupMenuTemplate::ms_spCancelMenu )
      {
        v9 = PopupMenuTemplate::ms_spCancelMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spCancelMenu + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
      v8 = (unsigned int)v7;
      PopupMenuTemplate::ms_spCancelMenu = (unsigned int)v7;
      if ( v7 )
      {
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v8 = PopupMenuTemplate::ms_spCancelMenu;
      }
    }
    *(_DWORD *)(v8 + 332) = 9;
    result = (PopupMenu *)PopupMenuTemplate::ms_spCancelMenu;
  }
  return result;
}

//----- (00574D90) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetFirePartyMemberMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
  if ( !PopupMenuTemplate::ms_spFirePartyMemberMenu )
  {
    v2 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
    v3 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
    v4 = (char *)PopupMenuTemplate::ms_spFirePartyMemberMenu;
    v5 = (PgWin *)PopupMenuTemplate::ms_spFirePartyMemberMenu;
    v6 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
    v7 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
    v8 = TextData::Get(0xF2D4CFE7u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spFirePartyMemberMenu != v9 )
    {
      if ( PopupMenuTemplate::ms_spFirePartyMemberMenu )
      {
        v11 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spFirePartyMemberMenu + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spFirePartyMemberMenu = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
      }
    }
    *(_DWORD *)(v10 + 332) = 3;
    v1 = PopupMenuTemplate::ms_spFirePartyMemberMenu;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spFirePartyMemberMenu + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spFirePartyMemberMenu;
}

//----- (00574E40) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetInviteGuildMenu(unsigned int uiParam)
{
  bool v1; // ST18_1@2
  unsigned int v2; // ST14_4@2
  char *v3; // ST10_4@2
  PgWin *v4; // ST0C_4@2
  unsigned int v5; // ST08_4@2
  unsigned int v6; // ST04_4@2
  char *v7; // eax@2
  PopupMenuText *v8; // esi@2
  unsigned int v9; // eax@2
  unsigned int v10; // edi@4
  PopupMenu *result; // eax@9

  if ( PopupMenuTemplate::ms_spInviteGuildMenu )
  {
    *(_DWORD *)(PopupMenuTemplate::ms_spInviteGuildMenu + 336) = uiParam;
    result = (PopupMenu *)PopupMenuTemplate::ms_spInviteGuildMenu;
  }
  else
  {
    v1 = PopupMenuTemplate::ms_spInviteGuildMenu;
    v2 = PopupMenuTemplate::ms_spInviteGuildMenu;
    v3 = (char *)PopupMenuTemplate::ms_spInviteGuildMenu;
    v4 = (PgWin *)PopupMenuTemplate::ms_spInviteGuildMenu;
    v5 = PopupMenuTemplate::ms_spInviteGuildMenu;
    v6 = PopupMenuTemplate::ms_spInviteGuildMenu;
    v7 = TextData::Get(0x2C517CA2u);
    v8 = PopupMenuText::CreateWin(v7, v6, v5, v4, v3, v2, v1);
    v9 = PopupMenuTemplate::ms_spInviteGuildMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spInviteGuildMenu != v8 )
    {
      if ( PopupMenuTemplate::ms_spInviteGuildMenu )
      {
        v10 = PopupMenuTemplate::ms_spInviteGuildMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spInviteGuildMenu + 4)) )
        {
          if ( v10 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        }
      }
      v9 = (unsigned int)v8;
      PopupMenuTemplate::ms_spInviteGuildMenu = (unsigned int)v8;
      if ( v8 )
      {
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v9 = PopupMenuTemplate::ms_spInviteGuildMenu;
      }
    }
    *(_DWORD *)(v9 + 332) = 10;
    *(_DWORD *)(PopupMenuTemplate::ms_spInviteGuildMenu + 336) = uiParam;
    result = (PopupMenu *)PopupMenuTemplate::ms_spInviteGuildMenu;
  }
  return result;
}

//----- (00574EF0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetDelegatePartyChiefMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  char *v7; // eax@2
  PopupMenuText *v8; // esi@2
  unsigned int v9; // eax@2
  unsigned int v10; // edi@4

  v1 = PopupMenuTemplate::ms_spDelegatePartyMenu;
  if ( !PopupMenuTemplate::ms_spDelegatePartyMenu )
  {
    v2 = PopupMenuTemplate::ms_spDelegatePartyMenu;
    v3 = PopupMenuTemplate::ms_spDelegatePartyMenu;
    v4 = (char *)PopupMenuTemplate::ms_spDelegatePartyMenu;
    v5 = (PgWin *)PopupMenuTemplate::ms_spDelegatePartyMenu;
    v6 = PopupMenuTemplate::ms_spDelegatePartyMenu;
    v7 = TextData::Get(0xC1DDF228u);
    v8 = PopupMenuText::CreateWin(v7, 0x7Cu, v6, v5, v4, v3, v2);
    v9 = PopupMenuTemplate::ms_spDelegatePartyMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spDelegatePartyMenu != v8 )
    {
      if ( PopupMenuTemplate::ms_spDelegatePartyMenu )
      {
        v10 = PopupMenuTemplate::ms_spDelegatePartyMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spDelegatePartyMenu + 4)) )
        {
          if ( v10 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        }
      }
      v9 = (unsigned int)v8;
      PopupMenuTemplate::ms_spDelegatePartyMenu = (unsigned int)v8;
      if ( v8 )
      {
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v9 = PopupMenuTemplate::ms_spDelegatePartyMenu;
      }
    }
    *(_DWORD *)(v9 + 332) = 4;
    v1 = PopupMenuTemplate::ms_spDelegatePartyMenu;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spDelegatePartyMenu + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spDelegatePartyMenu;
}

//----- (00574FA0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetQuitPartyMenu()
{
  PopupMenu *result; // eax@1
  bool v1; // ST18_1@2
  unsigned int v2; // ST14_4@2
  char *v3; // ST10_4@2
  PgWin *v4; // ST0C_4@2
  unsigned int v5; // ST08_4@2
  char *v6; // eax@2
  PopupMenuText *v7; // esi@2
  unsigned int v8; // eax@2
  unsigned int v9; // edi@4

  result = (PopupMenu *)PopupMenuTemplate::ms_spQuitPartyMenu;
  if ( !PopupMenuTemplate::ms_spQuitPartyMenu )
  {
    v1 = PopupMenuTemplate::ms_spQuitPartyMenu;
    v2 = PopupMenuTemplate::ms_spQuitPartyMenu;
    v3 = (char *)PopupMenuTemplate::ms_spQuitPartyMenu;
    v4 = (PgWin *)PopupMenuTemplate::ms_spQuitPartyMenu;
    v5 = PopupMenuTemplate::ms_spQuitPartyMenu;
    v6 = TextData::Get(0x48423F8Bu);
    v7 = PopupMenuText::CreateWin(v6, 0x7Du, v5, v4, v3, v2, v1);
    v8 = PopupMenuTemplate::ms_spQuitPartyMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spQuitPartyMenu != v7 )
    {
      if ( PopupMenuTemplate::ms_spQuitPartyMenu )
      {
        v9 = PopupMenuTemplate::ms_spQuitPartyMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spQuitPartyMenu + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
      v8 = (unsigned int)v7;
      PopupMenuTemplate::ms_spQuitPartyMenu = (unsigned int)v7;
      if ( v7 )
      {
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v8 = PopupMenuTemplate::ms_spQuitPartyMenu;
      }
    }
    *(_DWORD *)(v8 + 332) = 5;
    result = (PopupMenu *)PopupMenuTemplate::ms_spQuitPartyMenu;
  }
  return result;
}

//----- (00575030) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetPartyMasterLootSetupMenu(PARTY_ITEM_LOOTING_TYPE eDistType)
{
  NiSourceTexture *v1; // eax@2
  PopupMenuWin *v2; // esi@2
  char *v3; // eax@2
  PopupMenuText *v4; // eax@2
  char *v5; // eax@2
  PopupMenuText *v6; // eax@2
  PopupMenuWin *v7; // edi@4
  char *v8; // eax@12
  PopupMenuSubMenu *v9; // esi@12
  PopupMenu *result; // eax@13
  char *v11; // eax@15
  PopupMenuSubMenu *v12; // esi@15

  if ( !PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin )
  {
    v1 = MenuTexMgr::GetTexture(1u);
    v2 = PopupMenuWin::CreateWin(v1, 5u, 5u, 0);
    v3 = TextData::Get(0xE54F4142u);
    v4 = PopupMenuText::CreateWin(v3, 0, 0, 0, 0, 0, 0);
    v4->baseclass_0.m_ePopupMenuID = 15;
    PopupMenuWin::AddMenu(v2, &v4->baseclass_0);
    v5 = TextData::Get(0x78A8A1CFu);
    v6 = PopupMenuText::CreateWin(v5, 0, 0, 0, 0, 0, 0);
    v6->baseclass_0.m_ePopupMenuID = 16;
    PopupMenuWin::AddMenu(v2, &v6->baseclass_0);
    PopupMenuWin::FinishMenu(v2, 0);
    if ( PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin != v2 )
    {
      if ( PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin )
      {
        v7 = PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin;
        if ( !InterlockedDecrement((volatile LONG *)&PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v7 )
            v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
              (NiRefObject *)v7,
              1u);
        }
      }
      PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin = v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
  }
  if ( eDistType )
  {
    if ( eDistType == 1 )
    {
      if ( !PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu.m_pObject )
      {
        v8 = TextData::Get(0x78A8A1CFu);
        v9 = PopupMenuSubMenu::CreateWin(v8, 0, 0, 0, 0, 0);
        PopupMenuSubMenu::SetPopupMenu(v9, PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin);
        NiPointer<PopupMenuWin>::operator_(
          &PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu,
          (NiD3DDefaultShader *)v9);
      }
      result = (PopupMenu *)PopupMenuTemplate::ms_spPartyMasterLootSequentialSetupMenu.m_pObject;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    if ( !PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu.m_pObject )
    {
      v11 = TextData::Get(0xE54F4142u);
      v12 = PopupMenuSubMenu::CreateWin(v11, 0, 0, 0, 0, 0);
      PopupMenuSubMenu::SetPopupMenu(v12, PopupMenuTemplate::ms_spPartyMasterLootSetupSubMenuWin);
      NiPointer<PopupMenuWin>::operator_(
        &PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu,
        (NiD3DDefaultShader *)v12);
    }
    result = (PopupMenu *)PopupMenuTemplate::ms_spPartyMasterLootFreeSetupMenu.m_pObject;
  }
  return result;
}

//----- (005751B0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetPartyMemberLootSetupMenu(PARTY_ITEM_LOOTING_TYPE eDistType)
{
  PopupMenu *result; // eax@1
  char *v2; // eax@4
  NiD3DDefaultShader *v3; // eax@4
  char *v4; // eax@7
  NiD3DDefaultShader *v5; // eax@7

  result = 0;
  if ( eDistType )
  {
    if ( eDistType == 1 )
    {
      if ( !PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu.m_pObject )
      {
        v2 = TextData::Get(0x78A8A1CFu);
        v3 = (NiD3DDefaultShader *)PopupMenuSubMenu::CreateWin(v2, 0, 0, 0, 0, 0);
        NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu, v3);
      }
      result = (PopupMenu *)PopupMenuTemplate::ms_spPartyMemberLootSequentialSetupMenu.m_pObject;
    }
  }
  else
  {
    if ( !PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu.m_pObject )
    {
      v4 = TextData::Get(0xE54F4142u);
      v5 = (NiD3DDefaultShader *)PopupMenuSubMenu::CreateWin(v4, 0, 0, 0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(&PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu, v5);
    }
    result = (PopupMenu *)PopupMenuTemplate::ms_spPartyMemberLootFreeSetupMenu.m_pObject;
  }
  return result;
}

//----- (00575230) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetFollowCharMenu(unsigned int uiParam)
{
  unsigned int v1; // eax@1
  char v2; // cl@2
  PopupMenu *result; // eax@3
  ActionViewInfo *v4; // eax@4
  PopupMenuText *v5; // esi@7
  int v6; // eax@7
  int v7; // edi@9
  char *v8; // [sp-24h] [bp-24h]@5

  v1 = uiParam;
  do
  {
    v2 = *(_BYTE *)v1;
    *(&PopupMenuTemplate::ms_acCharName[v1] - uiParam) = *(_BYTE *)v1;
    ++v1;
  }
  while ( v2 );
  result = (PopupMenu *)PopupMenuTemplate::ms_spFollowCharMenu;
  if ( !PopupMenuTemplate::ms_spFollowCharMenu )
  {
    v4 = ActionViewTable::GetByInxName("stick");
    if ( v4 )
      v8 = v4->ActionName;
    else
      v8 = "Stick";
    v5 = PopupMenuText::CreateWin(v8, 0, 0, 0, 0, 0, 0);
    v6 = PopupMenuTemplate::ms_spFollowCharMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spFollowCharMenu != v5 )
    {
      if ( PopupMenuTemplate::ms_spFollowCharMenu )
      {
        v7 = PopupMenuTemplate::ms_spFollowCharMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spFollowCharMenu + 4)) )
        {
          if ( v7 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
        }
      }
      v6 = (int)v5;
      PopupMenuTemplate::ms_spFollowCharMenu = (int)v5;
      if ( v5 )
      {
        InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v6 = PopupMenuTemplate::ms_spFollowCharMenu;
      }
    }
    *(_DWORD *)(v6 + 332) = 6;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)PopupMenuTemplate::ms_spFollowCharMenu + 520))(PopupMenuTemplate::ms_acCharName);
    *(_DWORD *)(PopupMenuTemplate::ms_spFollowCharMenu + 336) = PopupMenuTemplate::ms_acCharName;
    result = (PopupMenu *)PopupMenuTemplate::ms_spFollowCharMenu;
  }
  return result;
}
// A99070: using guessed type int PopupMenuTemplate__ms_spFollowCharMenu;

//----- (00575310) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetChatWhisperMenu(unsigned int uiParam)
{
  unsigned int v1; // eax@1
  char v2; // cl@2
  PopupMenu *result; // eax@3
  bool v4; // ST18_1@4
  unsigned int v5; // ST14_4@4
  char *v6; // ST10_4@4
  PgWin *v7; // ST0C_4@4
  unsigned int v8; // ST08_4@4
  unsigned int v9; // ST04_4@4
  char *v10; // eax@4
  PopupMenuText *v11; // esi@4
  unsigned int v12; // eax@4
  unsigned int v13; // edi@6

  v1 = uiParam;
  do
  {
    v2 = *(_BYTE *)v1;
    *(&PopupMenuTemplate::ms_acCharName[v1] - uiParam) = *(_BYTE *)v1;
    ++v1;
  }
  while ( v2 );
  result = (PopupMenu *)PopupMenuTemplate::ms_spWhisper;
  if ( !PopupMenuTemplate::ms_spWhisper )
  {
    v4 = PopupMenuTemplate::ms_spWhisper;
    v5 = PopupMenuTemplate::ms_spWhisper;
    v6 = (char *)PopupMenuTemplate::ms_spWhisper;
    v7 = (PgWin *)PopupMenuTemplate::ms_spWhisper;
    v8 = PopupMenuTemplate::ms_spWhisper;
    v9 = PopupMenuTemplate::ms_spWhisper;
    v10 = TextData::Get(0xBEEF0012u);
    v11 = PopupMenuText::CreateWin(v10, v9, v8, v7, v6, v5, v4);
    v12 = PopupMenuTemplate::ms_spWhisper;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spWhisper != v11 )
    {
      if ( PopupMenuTemplate::ms_spWhisper )
      {
        v13 = PopupMenuTemplate::ms_spWhisper;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spWhisper + 4)) )
        {
          if ( v13 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
        }
      }
      v12 = (unsigned int)v11;
      PopupMenuTemplate::ms_spWhisper = (unsigned int)v11;
      if ( v11 )
      {
        InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v12 = PopupMenuTemplate::ms_spWhisper;
      }
    }
    *(_DWORD *)(v12 + 332) = 7;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)PopupMenuTemplate::ms_spWhisper + 520))(PopupMenuTemplate::ms_acCharName);
    *(_DWORD *)(PopupMenuTemplate::ms_spWhisper + 336) = PopupMenuTemplate::ms_acCharName;
    result = (PopupMenu *)PopupMenuTemplate::ms_spWhisper;
  }
  return result;
}

//----- (005753E0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_Endure(int iEndure)
{
  char *v1; // eax@3
  char *v2; // eax@3
  PopupMenuText *v3; // esi@7
  PopupMenu *result; // eax@7
  int v5; // edi@9
  unsigned int v6; // [sp-1Ch] [bp-24h]@4

  if ( iEndure == 100000 )
  {
    v6 = -1513429725;
  }
  else
  {
    if ( iEndure != 200000 )
    {
      v1 = TextData2::Get(0x51819BC5u);
      v2 = fs(v1);
      goto LABEL_7;
    }
    v6 = -551780518;
  }
  v2 = TextData2::Get(v6);
LABEL_7:
  v3 = PopupMenuText::CreateWin(v2, 0x7Fu, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spMHObjEndure;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spMHObjEndure != v3 )
  {
    if ( PopupMenuTemplate::ms_spMHObjEndure )
    {
      v5 = PopupMenuTemplate::ms_spMHObjEndure;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spMHObjEndure + 4)) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      }
    }
    result = (PopupMenu *)v3;
    PopupMenuTemplate::ms_spMHObjEndure = (int)v3;
    if ( v3 )
    {
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spMHObjEndure;
    }
  }
  return result;
}
// A99118: using guessed type int PopupMenuTemplate__ms_spMHObjEndure;

//----- (00575490) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_EndurePercentage(int iEndurePer)
{
  char *v1; // eax@1
  char *v2; // eax@1
  PopupMenuText *v3; // esi@1
  PopupMenu *result; // eax@1
  int v5; // edi@3

  v1 = TextData2::Get(0x606EA4BDu);
  v2 = fs(v1);
  v3 = PopupMenuText::CreateWin(v2, 0x7Fu, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spMHObjEndurePercentage;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spMHObjEndurePercentage != v3 )
  {
    if ( PopupMenuTemplate::ms_spMHObjEndurePercentage )
    {
      v5 = PopupMenuTemplate::ms_spMHObjEndurePercentage;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spMHObjEndurePercentage + 4)) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      }
    }
    result = (PopupMenu *)v3;
    PopupMenuTemplate::ms_spMHObjEndurePercentage = (int)v3;
    if ( v3 )
    {
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spMHObjEndurePercentage;
    }
  }
  return result;
}
// A9911C: using guessed type int PopupMenuTemplate__ms_spMHObjEndurePercentage;

//----- (00575510) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListConfigRoomMenu()
{
  PopupMenu *result; // eax@1
  bool v1; // ST18_1@2
  unsigned int v2; // ST14_4@2
  char *v3; // ST10_4@2
  PgWin *v4; // ST0C_4@2
  unsigned int v5; // ST08_4@2
  char *v6; // eax@2
  PopupMenuText *v7; // esi@2
  unsigned int v8; // edi@4

  result = (PopupMenu *)PopupMenuTemplate::ms_spConfigRoom;
  if ( !PopupMenuTemplate::ms_spConfigRoom )
  {
    v1 = PopupMenuTemplate::ms_spConfigRoom;
    v2 = PopupMenuTemplate::ms_spConfigRoom;
    v3 = (char *)PopupMenuTemplate::ms_spConfigRoom;
    v4 = (PgWin *)PopupMenuTemplate::ms_spConfigRoom;
    v5 = PopupMenuTemplate::ms_spConfigRoom;
    v6 = TextData2::Get(0xD3C92430u);
    v7 = PopupMenuText::CreateWin(v6, 0xC0u, v5, v4, v3, v2, v1);
    result = (PopupMenu *)PopupMenuTemplate::ms_spConfigRoom;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spConfigRoom != v7 )
    {
      if ( PopupMenuTemplate::ms_spConfigRoom )
      {
        v8 = PopupMenuTemplate::ms_spConfigRoom;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spConfigRoom + 4)) )
        {
          if ( v8 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
        }
      }
      result = (PopupMenu *)v7;
      PopupMenuTemplate::ms_spConfigRoom = (unsigned int)v7;
      if ( v7 )
      {
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        result = (PopupMenu *)PopupMenuTemplate::ms_spConfigRoom;
      }
    }
  }
  return result;
}

//----- (00575590) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListShowBlogMenu()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0x999D9181u);
  v1 = PopupMenuText::CreateWin(v0, 0xC1u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spShowBlog;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spShowBlog != v1 )
  {
    if ( PopupMenuTemplate::ms_spShowBlog )
    {
      v3 = PopupMenuTemplate::ms_spShowBlog;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spShowBlog + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spShowBlog = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spShowBlog;
    }
  }
  return result;
}
// A990F0: using guessed type int PopupMenuTemplate__ms_spShowBlog;

//----- (00575610) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListChangeBlogAddrMenu()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0x1B33685Cu);
  v1 = PopupMenuText::CreateWin(v0, 0xC2u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spChangeBlogAddr;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spChangeBlogAddr != v1 )
  {
    if ( PopupMenuTemplate::ms_spChangeBlogAddr )
    {
      v3 = PopupMenuTemplate::ms_spChangeBlogAddr;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spChangeBlogAddr + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spChangeBlogAddr = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spChangeBlogAddr;
    }
  }
  return result;
}
// A990F4: using guessed type int PopupMenuTemplate__ms_spChangeBlogAddr;

//----- (00575690) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListKickGuestMenu()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0x46424637u);
  v1 = PopupMenuText::CreateWin(v0, 0xC3u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spKickGuest;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spKickGuest != v1 )
  {
    if ( PopupMenuTemplate::ms_spKickGuest )
    {
      v3 = PopupMenuTemplate::ms_spKickGuest;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spKickGuest + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spKickGuest = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spKickGuest;
    }
  }
  return result;
}
// A990F8: using guessed type int PopupMenuTemplate__ms_spKickGuest;

//----- (00575710) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListSetArrangeModeOnMenu()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0xE82F1F1Du);
  v1 = PopupMenuText::CreateWin(v0, 0xC4u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spSetArrModeOn;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spSetArrModeOn != v1 )
  {
    if ( PopupMenuTemplate::ms_spSetArrModeOn )
    {
      v3 = PopupMenuTemplate::ms_spSetArrModeOn;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spSetArrModeOn + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spSetArrModeOn = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spSetArrModeOn;
    }
  }
  return result;
}
// A990FC: using guessed type int PopupMenuTemplate__ms_spSetArrModeOn;

//----- (00575790) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_GuestListSetArrangeModeOffMenu()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0x2D2F636Bu);
  v1 = PopupMenuText::CreateWin(v0, 0xC4u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spSetArrModeOff;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spSetArrModeOff != v1 )
  {
    if ( PopupMenuTemplate::ms_spSetArrModeOff )
    {
      v3 = PopupMenuTemplate::ms_spSetArrModeOff;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spSetArrModeOff + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spSetArrModeOff = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spSetArrModeOff;
    }
  }
  return result;
}
// A99100: using guessed type int PopupMenuTemplate__ms_spSetArrModeOff;

//----- (00575810) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ReturnToInvMHItem(bool ClickInv)
{
  char *v1; // eax@4
  PopupMenuText *v2; // esi@4
  int v3; // eax@4
  int v4; // edi@6
  unsigned int v6; // [sp-18h] [bp-20h]@2

  if ( ClickInv == 1 )
    v6 = 197;
  else
    v6 = 228;
  v1 = TextData2::Get(0x5599F7CBu);
  v2 = PopupMenuText::CreateWin(v1, v6, 0, 0, 0, 0, 0);
  v3 = PopupMenuTemplate::ms_spReturnToInvMHItem;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spReturnToInvMHItem != v2 )
  {
    if ( PopupMenuTemplate::ms_spReturnToInvMHItem )
    {
      v4 = PopupMenuTemplate::ms_spReturnToInvMHItem;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spReturnToInvMHItem + 4)) )
      {
        if ( v4 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      }
    }
    v3 = (int)v2;
    PopupMenuTemplate::ms_spReturnToInvMHItem = (int)v2;
    if ( v2 )
    {
      InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v3 = PopupMenuTemplate::ms_spReturnToInvMHItem;
    }
  }
  *(_DWORD *)(v3 + 332) = 1000;
  return (PopupMenu *)PopupMenuTemplate::ms_spReturnToInvMHItem;
}
// A99104: using guessed type int PopupMenuTemplate__ms_spReturnToInvMHItem;

//----- (005758B0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ArrToInvMHItem()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0x666EEAB1u);
  v1 = PopupMenuText::CreateWin(v0, 0xC6u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spArrToInvMHItem;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spArrToInvMHItem != v1 )
  {
    if ( PopupMenuTemplate::ms_spArrToInvMHItem )
    {
      v3 = PopupMenuTemplate::ms_spArrToInvMHItem;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spArrToInvMHItem + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spArrToInvMHItem = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spArrToInvMHItem;
    }
  }
  return result;
}
// A99108: using guessed type int PopupMenuTemplate__ms_spArrToInvMHItem;

//----- (00575930) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_DeleteMHItem()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0x48828BCDu);
  v1 = PopupMenuText::CreateWin(v0, 0xC7u, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spDeleteMHItem;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spDeleteMHItem != v1 )
  {
    if ( PopupMenuTemplate::ms_spDeleteMHItem )
    {
      v3 = PopupMenuTemplate::ms_spDeleteMHItem;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spDeleteMHItem + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spDeleteMHItem = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spDeleteMHItem;
    }
  }
  return result;
}
// A9910C: using guessed type int PopupMenuTemplate__ms_spDeleteMHItem;

//----- (005759B0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ObjAction()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0xE4EAF2C1u);
  v1 = PopupMenuText::CreateWin(v0, 0xDCu, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::ms_spObjAction;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spObjAction != v1 )
  {
    if ( PopupMenuTemplate::ms_spObjAction )
    {
      v3 = PopupMenuTemplate::ms_spObjAction;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spObjAction + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::ms_spObjAction = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::ms_spObjAction;
    }
  }
  return result;
}
// A99110: using guessed type int PopupMenuTemplate__ms_spObjAction;

//----- (00575A30) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ReArrange()
{
  char *v0; // eax@1
  PopupMenuText *v1; // esi@1
  PopupMenu *result; // eax@1
  int v3; // edi@3

  v0 = TextData2::Get(0x2B4A44A7u);
  v1 = PopupMenuText::CreateWin(v0, 0xDEu, 0, 0, 0, 0, 0);
  result = (PopupMenu *)PopupMenuTemplate::m_spReArrange;
  if ( (PopupMenuText *)PopupMenuTemplate::m_spReArrange != v1 )
  {
    if ( PopupMenuTemplate::m_spReArrange )
    {
      v3 = PopupMenuTemplate::m_spReArrange;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::m_spReArrange + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    result = (PopupMenu *)v1;
    PopupMenuTemplate::m_spReArrange = (int)v1;
    if ( v1 )
    {
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      result = (PopupMenu *)PopupMenuTemplate::m_spReArrange;
    }
  }
  return result;
}
// A99120: using guessed type int PopupMenuTemplate__m_spReArrange;

//----- (00575AB0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetInviteHighHolyPromise(unsigned int uiParam)
{
  unsigned int v1; // eax@1
  char v2; // cl@2
  PopupMenu *result; // eax@3
  bool v4; // ST18_1@4
  unsigned int v5; // ST14_4@4
  char *v6; // ST10_4@4
  PgWin *v7; // ST0C_4@4
  unsigned int v8; // ST08_4@4
  unsigned int v9; // ST04_4@4
  char *v10; // eax@4
  PopupMenuText *v11; // esi@4
  unsigned int v12; // eax@4
  unsigned int v13; // edi@6

  v1 = uiParam;
  do
  {
    v2 = *(_BYTE *)v1;
    *(&PopupMenuTemplate::ms_acCharName[v1] - uiParam) = *(_BYTE *)v1;
    ++v1;
  }
  while ( v2 );
  result = (PopupMenu *)PopupMenuTemplate::ms_spHighHolyPromise;
  if ( !PopupMenuTemplate::ms_spHighHolyPromise )
  {
    v4 = PopupMenuTemplate::ms_spHighHolyPromise;
    v5 = PopupMenuTemplate::ms_spHighHolyPromise;
    v6 = (char *)PopupMenuTemplate::ms_spHighHolyPromise;
    v7 = (PgWin *)PopupMenuTemplate::ms_spHighHolyPromise;
    v8 = PopupMenuTemplate::ms_spHighHolyPromise;
    v9 = PopupMenuTemplate::ms_spHighHolyPromise;
    v10 = TextData::Get(0xD937143Fu);
    v11 = PopupMenuText::CreateWin(v10, v9, v8, v7, v6, v5, v4);
    v12 = PopupMenuTemplate::ms_spHighHolyPromise;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spHighHolyPromise != v11 )
    {
      if ( PopupMenuTemplate::ms_spHighHolyPromise )
      {
        v13 = PopupMenuTemplate::ms_spHighHolyPromise;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spHighHolyPromise + 4)) )
        {
          if ( v13 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
        }
      }
      v12 = (unsigned int)v11;
      PopupMenuTemplate::ms_spHighHolyPromise = (unsigned int)v11;
      if ( v11 )
      {
        InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v12 = PopupMenuTemplate::ms_spHighHolyPromise;
      }
    }
    *(_DWORD *)(v12 + 332) = 1005;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)PopupMenuTemplate::ms_spHighHolyPromise + 520))(PopupMenuTemplate::ms_acCharName);
    *(_DWORD *)(PopupMenuTemplate::ms_spHighHolyPromise + 336) = PopupMenuTemplate::ms_acCharName;
    result = (PopupMenu *)PopupMenuTemplate::ms_spHighHolyPromise;
  }
  return result;
}

//----- (00575B80) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetPartyBuffMenu(unsigned int uiParam)
{
  unsigned int v1; // eax@1
  char v2; // cl@2
  PopupMenu *result; // eax@3
  bool v4; // ST18_1@4
  unsigned int v5; // ST14_4@4
  char *v6; // ST10_4@4
  PgWin *v7; // ST0C_4@4
  unsigned int v8; // ST08_4@4
  unsigned int v9; // ST04_4@4
  char *v10; // eax@4
  PopupMenuText *v11; // esi@4
  unsigned int v12; // eax@4
  unsigned int v13; // edi@6

  v1 = uiParam;
  do
  {
    v2 = *(_BYTE *)v1;
    *(&PopupMenuTemplate::ms_acCharName[v1] - uiParam) = *(_BYTE *)v1;
    ++v1;
  }
  while ( v2 );
  result = (PopupMenu *)PopupMenuTemplate::ms_spBuffUIMenu;
  if ( !PopupMenuTemplate::ms_spBuffUIMenu )
  {
    v4 = PopupMenuTemplate::ms_spBuffUIMenu;
    v5 = PopupMenuTemplate::ms_spBuffUIMenu;
    v6 = (char *)PopupMenuTemplate::ms_spBuffUIMenu;
    v7 = (PgWin *)PopupMenuTemplate::ms_spBuffUIMenu;
    v8 = PopupMenuTemplate::ms_spBuffUIMenu;
    v9 = PopupMenuTemplate::ms_spBuffUIMenu;
    v10 = TextData2::Get(0x4F9E7082u);
    v11 = PopupMenuText::CreateWin(v10, v9, v8, v7, v6, v5, v4);
    v12 = PopupMenuTemplate::ms_spBuffUIMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spBuffUIMenu != v11 )
    {
      if ( PopupMenuTemplate::ms_spBuffUIMenu )
      {
        v13 = PopupMenuTemplate::ms_spBuffUIMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spBuffUIMenu + 4)) )
        {
          if ( v13 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
        }
      }
      v12 = (unsigned int)v11;
      PopupMenuTemplate::ms_spBuffUIMenu = (unsigned int)v11;
      if ( v11 )
      {
        InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v12 = PopupMenuTemplate::ms_spBuffUIMenu;
      }
    }
    *(_DWORD *)(v12 + 332) = 1014;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)PopupMenuTemplate::ms_spBuffUIMenu + 520))(PopupMenuTemplate::ms_acCharName);
    *(_DWORD *)(PopupMenuTemplate::ms_spBuffUIMenu + 336) = PopupMenuTemplate::ms_acCharName;
    result = (PopupMenu *)PopupMenuTemplate::ms_spBuffUIMenu;
  }
  return result;
}

//----- (00575C50) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberSelectMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spRaidSelect;
  if ( !PopupMenuTemplate::ms_spRaidSelect )
  {
    v2 = PopupMenuTemplate::ms_spRaidSelect;
    v3 = PopupMenuTemplate::ms_spRaidSelect;
    v4 = (char *)PopupMenuTemplate::ms_spRaidSelect;
    v5 = (PgWin *)PopupMenuTemplate::ms_spRaidSelect;
    v6 = PopupMenuTemplate::ms_spRaidSelect;
    v7 = PopupMenuTemplate::ms_spRaidSelect;
    v8 = TextData2::Get(0x8C936CB2u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spRaidSelect;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spRaidSelect != v9 )
    {
      if ( PopupMenuTemplate::ms_spRaidSelect )
      {
        v11 = PopupMenuTemplate::ms_spRaidSelect;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidSelect + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spRaidSelect = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spRaidSelect;
      }
    }
    *(_DWORD *)(v10 + 332) = 1020;
    v1 = PopupMenuTemplate::ms_spRaidSelect;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spRaidSelect + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spRaidSelect;
}

//----- (00575D00) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberInviteMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spRaidInvite;
  if ( !PopupMenuTemplate::ms_spRaidInvite )
  {
    v2 = PopupMenuTemplate::ms_spRaidInvite;
    v3 = PopupMenuTemplate::ms_spRaidInvite;
    v4 = (char *)PopupMenuTemplate::ms_spRaidInvite;
    v5 = (PgWin *)PopupMenuTemplate::ms_spRaidInvite;
    v6 = PopupMenuTemplate::ms_spRaidInvite;
    v7 = PopupMenuTemplate::ms_spRaidInvite;
    v8 = TextData2::Get(0xFAF92532u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spRaidInvite;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spRaidInvite != v9 )
    {
      if ( PopupMenuTemplate::ms_spRaidInvite )
      {
        v11 = PopupMenuTemplate::ms_spRaidInvite;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidInvite + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spRaidInvite = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spRaidInvite;
      }
    }
    *(_DWORD *)(v10 + 332) = 1021;
    v1 = PopupMenuTemplate::ms_spRaidInvite;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spRaidInvite + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spRaidInvite;
}

//----- (00575DB0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberVanishMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spRaidVanish;
  if ( !PopupMenuTemplate::ms_spRaidVanish )
  {
    v2 = PopupMenuTemplate::ms_spRaidVanish;
    v3 = PopupMenuTemplate::ms_spRaidVanish;
    v4 = (char *)PopupMenuTemplate::ms_spRaidVanish;
    v5 = (PgWin *)PopupMenuTemplate::ms_spRaidVanish;
    v6 = PopupMenuTemplate::ms_spRaidVanish;
    v7 = PopupMenuTemplate::ms_spRaidVanish;
    v8 = TextData2::Get(0xFAF11B2Au);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spRaidVanish;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spRaidVanish != v9 )
    {
      if ( PopupMenuTemplate::ms_spRaidVanish )
      {
        v11 = PopupMenuTemplate::ms_spRaidVanish;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidVanish + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spRaidVanish = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spRaidVanish;
      }
    }
    *(_DWORD *)(v10 + 332) = 1022;
    v1 = PopupMenuTemplate::ms_spRaidVanish;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spRaidVanish + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spRaidVanish;
}

//----- (00575E60) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetRaidMemberLeaveMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spRaidLeave;
  if ( !PopupMenuTemplate::ms_spRaidLeave )
  {
    v2 = PopupMenuTemplate::ms_spRaidLeave;
    v3 = PopupMenuTemplate::ms_spRaidLeave;
    v4 = (char *)PopupMenuTemplate::ms_spRaidLeave;
    v5 = (PgWin *)PopupMenuTemplate::ms_spRaidLeave;
    v6 = PopupMenuTemplate::ms_spRaidLeave;
    v7 = PopupMenuTemplate::ms_spRaidLeave;
    v8 = TextData2::Get(0x7E4D726u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spRaidLeave;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spRaidLeave != v9 )
    {
      if ( PopupMenuTemplate::ms_spRaidLeave )
      {
        v11 = PopupMenuTemplate::ms_spRaidLeave;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidLeave + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spRaidLeave = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spRaidLeave;
      }
    }
    *(_DWORD *)(v10 + 332) = 1023;
    v1 = PopupMenuTemplate::ms_spRaidLeave;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spRaidLeave + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spRaidLeave;
}

//----- (00575F10) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetChangeRaidLeaderMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spChangeRaidLeader;
  if ( !PopupMenuTemplate::ms_spChangeRaidLeader )
  {
    v2 = PopupMenuTemplate::ms_spChangeRaidLeader;
    v3 = PopupMenuTemplate::ms_spChangeRaidLeader;
    v4 = (char *)PopupMenuTemplate::ms_spChangeRaidLeader;
    v5 = (PgWin *)PopupMenuTemplate::ms_spChangeRaidLeader;
    v6 = PopupMenuTemplate::ms_spChangeRaidLeader;
    v7 = PopupMenuTemplate::ms_spChangeRaidLeader;
    v8 = TextData2::Get(0x54386E79u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spChangeRaidLeader;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spChangeRaidLeader != v9 )
    {
      if ( PopupMenuTemplate::ms_spChangeRaidLeader )
      {
        v11 = PopupMenuTemplate::ms_spChangeRaidLeader;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spChangeRaidLeader + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spChangeRaidLeader = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spChangeRaidLeader;
      }
    }
    *(_DWORD *)(v10 + 332) = 1024;
    v1 = PopupMenuTemplate::ms_spChangeRaidLeader;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spChangeRaidLeader + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spChangeRaidLeader;
}

//----- (00575FC0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetChangeRaidLooterMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spChangeRaidLooter;
  if ( !PopupMenuTemplate::ms_spChangeRaidLooter )
  {
    v2 = PopupMenuTemplate::ms_spChangeRaidLooter;
    v3 = PopupMenuTemplate::ms_spChangeRaidLooter;
    v4 = (char *)PopupMenuTemplate::ms_spChangeRaidLooter;
    v5 = (PgWin *)PopupMenuTemplate::ms_spChangeRaidLooter;
    v6 = PopupMenuTemplate::ms_spChangeRaidLooter;
    v7 = PopupMenuTemplate::ms_spChangeRaidLooter;
    v8 = TextData2::Get(0x64462634u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spChangeRaidLooter;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spChangeRaidLooter != v9 )
    {
      if ( PopupMenuTemplate::ms_spChangeRaidLooter )
      {
        v11 = PopupMenuTemplate::ms_spChangeRaidLooter;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spChangeRaidLooter + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spChangeRaidLooter = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spChangeRaidLooter;
      }
    }
    *(_DWORD *)(v10 + 332) = 1025;
    v1 = PopupMenuTemplate::ms_spChangeRaidLooter;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spChangeRaidLooter + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spChangeRaidLooter;
}

//----- (00576070) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetUpRaidSubLeaderMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
  if ( !PopupMenuTemplate::ms_spRaidSubLeaderUp )
  {
    v2 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
    v3 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
    v4 = (char *)PopupMenuTemplate::ms_spRaidSubLeaderUp;
    v5 = (PgWin *)PopupMenuTemplate::ms_spRaidSubLeaderUp;
    v6 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
    v7 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
    v8 = TextData2::Get(0xA17D6DD2u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spRaidSubLeaderUp != v9 )
    {
      if ( PopupMenuTemplate::ms_spRaidSubLeaderUp )
      {
        v11 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidSubLeaderUp + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spRaidSubLeaderUp = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
      }
    }
    *(_DWORD *)(v10 + 332) = 1026;
    v1 = PopupMenuTemplate::ms_spRaidSubLeaderUp;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spRaidSubLeaderUp + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spRaidSubLeaderUp;
}

//----- (00576120) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetDownRaidSubLeaderMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
  if ( !PopupMenuTemplate::ms_spRaidSubLeaderDown )
  {
    v2 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
    v3 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
    v4 = (char *)PopupMenuTemplate::ms_spRaidSubLeaderDown;
    v5 = (PgWin *)PopupMenuTemplate::ms_spRaidSubLeaderDown;
    v6 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
    v7 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
    v8 = TextData2::Get(0x32F1B1Au);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spRaidSubLeaderDown != v9 )
    {
      if ( PopupMenuTemplate::ms_spRaidSubLeaderDown )
      {
        v11 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRaidSubLeaderDown + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spRaidSubLeaderDown = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
      }
    }
    *(_DWORD *)(v10 + 332) = 1027;
    v1 = PopupMenuTemplate::ms_spRaidSubLeaderDown;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spRaidSubLeaderDown + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spRaidSubLeaderDown;
}

//----- (005761D0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetPartyLootSetupMenu()
{
  PopupMenu *result; // eax@1
  bool v1; // ST18_1@2
  unsigned int v2; // ST14_4@2
  char *v3; // ST10_4@2
  PgWin *v4; // ST0C_4@2
  unsigned int v5; // ST08_4@2
  char *v6; // eax@2
  PopupMenuText *v7; // esi@2
  unsigned int v8; // eax@2
  unsigned int v9; // edi@4

  result = (PopupMenu *)PopupMenuTemplate::ms_spPartyLootSetupMenu;
  if ( !PopupMenuTemplate::ms_spPartyLootSetupMenu )
  {
    v1 = PopupMenuTemplate::ms_spPartyLootSetupMenu;
    v2 = PopupMenuTemplate::ms_spPartyLootSetupMenu;
    v3 = (char *)PopupMenuTemplate::ms_spPartyLootSetupMenu;
    v4 = (PgWin *)PopupMenuTemplate::ms_spPartyLootSetupMenu;
    v5 = PopupMenuTemplate::ms_spPartyLootSetupMenu;
    v6 = TextData2::Get(0x104B1C2Fu);
    v7 = PopupMenuText::CreateWin(v6, 0x7Eu, v5, v4, v3, v2, v1);
    v8 = PopupMenuTemplate::ms_spPartyLootSetupMenu;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spPartyLootSetupMenu != v7 )
    {
      if ( PopupMenuTemplate::ms_spPartyLootSetupMenu )
      {
        v9 = PopupMenuTemplate::ms_spPartyLootSetupMenu;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spPartyLootSetupMenu + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
      v8 = (unsigned int)v7;
      PopupMenuTemplate::ms_spPartyLootSetupMenu = (unsigned int)v7;
      if ( v7 )
      {
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v8 = PopupMenuTemplate::ms_spPartyLootSetupMenu;
      }
    }
    *(_DWORD *)(v8 + 332) = 1031;
    result = (PopupMenu *)PopupMenuTemplate::ms_spPartyLootSetupMenu;
  }
  return result;
}

//----- (00576260) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetCollectOpenMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spCollectOpen;
  if ( !PopupMenuTemplate::ms_spCollectOpen )
  {
    v2 = PopupMenuTemplate::ms_spCollectOpen;
    v3 = PopupMenuTemplate::ms_spCollectOpen;
    v4 = (char *)PopupMenuTemplate::ms_spCollectOpen;
    v5 = (PgWin *)PopupMenuTemplate::ms_spCollectOpen;
    v6 = PopupMenuTemplate::ms_spCollectOpen;
    v7 = PopupMenuTemplate::ms_spCollectOpen;
    v8 = TextData2::Get(0xED457D64u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spCollectOpen;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spCollectOpen != v9 )
    {
      if ( PopupMenuTemplate::ms_spCollectOpen )
      {
        v11 = PopupMenuTemplate::ms_spCollectOpen;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spCollectOpen + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spCollectOpen = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spCollectOpen;
      }
    }
    *(_DWORD *)(v10 + 332) = 1034;
    v1 = PopupMenuTemplate::ms_spCollectOpen;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spCollectOpen + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spCollectOpen;
}

//----- (00576310) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetInviteFriendMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spInviteFriend;
  if ( !PopupMenuTemplate::ms_spInviteFriend )
  {
    v2 = PopupMenuTemplate::ms_spInviteFriend;
    v3 = PopupMenuTemplate::ms_spInviteFriend;
    v4 = (char *)PopupMenuTemplate::ms_spInviteFriend;
    v5 = (PgWin *)PopupMenuTemplate::ms_spInviteFriend;
    v6 = PopupMenuTemplate::ms_spInviteFriend;
    v7 = PopupMenuTemplate::ms_spInviteFriend;
    v8 = TextData::Get(0x1B50368Cu);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spInviteFriend;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spInviteFriend != v9 )
    {
      if ( PopupMenuTemplate::ms_spInviteFriend )
      {
        v11 = PopupMenuTemplate::ms_spInviteFriend;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spInviteFriend + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spInviteFriend = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spInviteFriend;
      }
    }
    *(_DWORD *)(v10 + 332) = 1035;
    v1 = PopupMenuTemplate::ms_spInviteFriend;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spInviteFriend + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spInviteFriend;
}

//----- (005763C0) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetRideOnMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spRideOn;
  if ( !PopupMenuTemplate::ms_spRideOn )
  {
    v2 = PopupMenuTemplate::ms_spRideOn;
    v3 = PopupMenuTemplate::ms_spRideOn;
    v4 = (char *)PopupMenuTemplate::ms_spRideOn;
    v5 = (PgWin *)PopupMenuTemplate::ms_spRideOn;
    v6 = PopupMenuTemplate::ms_spRideOn;
    v7 = PopupMenuTemplate::ms_spRideOn;
    v8 = TextData2::Get(0x2240866Bu);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spRideOn;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spRideOn != v9 )
    {
      if ( PopupMenuTemplate::ms_spRideOn )
      {
        v11 = PopupMenuTemplate::ms_spRideOn;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spRideOn + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spRideOn = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spRideOn;
      }
    }
    *(_DWORD *)(v10 + 332) = 1036;
    v1 = PopupMenuTemplate::ms_spRideOn;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spRideOn + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spRideOn;
}

//----- (00576470) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetVoteMenu(unsigned int uiParam)
{
  unsigned int v1; // ecx@1
  bool v2; // ST18_1@2
  unsigned int v3; // ST14_4@2
  char *v4; // ST10_4@2
  PgWin *v5; // ST0C_4@2
  unsigned int v6; // ST08_4@2
  unsigned int v7; // ST04_4@2
  char *v8; // eax@2
  PopupMenuText *v9; // esi@2
  unsigned int v10; // eax@2
  unsigned int v11; // edi@4

  v1 = PopupMenuTemplate::ms_spVote;
  if ( !PopupMenuTemplate::ms_spVote )
  {
    v2 = PopupMenuTemplate::ms_spVote;
    v3 = PopupMenuTemplate::ms_spVote;
    v4 = (char *)PopupMenuTemplate::ms_spVote;
    v5 = (PgWin *)PopupMenuTemplate::ms_spVote;
    v6 = PopupMenuTemplate::ms_spVote;
    v7 = PopupMenuTemplate::ms_spVote;
    v8 = TextData2::Get(0x93958BA1u);
    v9 = PopupMenuText::CreateWin(v8, v7, v6, v5, v4, v3, v2);
    v10 = PopupMenuTemplate::ms_spVote;
    if ( (PopupMenuText *)PopupMenuTemplate::ms_spVote != v9 )
    {
      if ( PopupMenuTemplate::ms_spVote )
      {
        v11 = PopupMenuTemplate::ms_spVote;
        if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spVote + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      v10 = (unsigned int)v9;
      PopupMenuTemplate::ms_spVote = (unsigned int)v9;
      if ( v9 )
      {
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v10 = PopupMenuTemplate::ms_spVote;
      }
    }
    *(_DWORD *)(v10 + 332) = 1037;
    v1 = PopupMenuTemplate::ms_spVote;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 520))(uiParam);
  *(_DWORD *)(PopupMenuTemplate::ms_spVote + 336) = uiParam;
  return (PopupMenu *)PopupMenuTemplate::ms_spVote;
}

//----- (00576520) --------------------------------------------------------
PopupMenu *__cdecl PopupMenuTemplate::GetmhUI_ObjName(char *pObjName)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v1; // eax@1
  unsigned int v2; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ecx@3
  char *v4; // eax@7
  PopupMenuText *v5; // esi@9
  int v6; // eax@9
  int v7; // edi@11
  PopupMenu *v8; // esi@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ObjNameMenu; // [sp+0h] [bp-2Ch]@1
  unsigned int v11; // [sp+1Ch] [bp-10h]@1
  int v12; // [sp+28h] [bp-4h]@1
  int v13; // [sp+2Ch] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  ObjNameMenu.baseclass_0._Myres = 15;
  ObjNameMenu.baseclass_0._Mysize = 0;
  ObjNameMenu.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ObjNameMenu, "<", 1u);
  v12 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&ObjNameMenu, pObjName, strlen(pObjName));
  v1 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&ObjNameMenu;
  if ( ObjNameMenu.baseclass_0._Myres < 0x10 )
    v1 = &ObjNameMenu;
  v2 = (unsigned int)((char *)v1 + ObjNameMenu.baseclass_0._Mysize);
  v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&ObjNameMenu;
  if ( ObjNameMenu.baseclass_0._Myres < 0x10 )
    v3 = &ObjNameMenu;
  if ( v2 )
    v2 -= (unsigned int)v3;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(&ObjNameMenu, v2, 1u, 62);
  v4 = *(char **)&ObjNameMenu;
  if ( ObjNameMenu.baseclass_0._Myres < 0x10 )
    v4 = (char *)&ObjNameMenu;
  v5 = PopupMenuText::CreateWin(v4, 0, 0, 0, 0, 0, 0);
  v6 = PopupMenuTemplate::ms_spObjName;
  if ( (PopupMenuText *)PopupMenuTemplate::ms_spObjName != v5 )
  {
    if ( PopupMenuTemplate::ms_spObjName )
    {
      v7 = PopupMenuTemplate::ms_spObjName;
      if ( !InterlockedDecrement((volatile LONG *)(PopupMenuTemplate::ms_spObjName + 4)) )
      {
        if ( v7 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
      }
    }
    v6 = (int)v5;
    PopupMenuTemplate::ms_spObjName = (int)v5;
    if ( v5 )
    {
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v6 = PopupMenuTemplate::ms_spObjName;
    }
  }
  v8 = (PopupMenu *)v6;
  if ( ObjNameMenu.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&ObjNameMenu);
  return v8;
}
// A85C00: using guessed type int __security_cookie;
// A99114: using guessed type int PopupMenuTemplate__ms_spObjName;

//----- (00576660) --------------------------------------------------------
void __thiscall PopupMenuSubMenu::SetPopupMenu(PopupMenuSubMenu *this, PopupMenuWin *pkPopupMenuWin)
{
  PopupMenuSubMenu *v2; // ebx@1
  PopupMenuWin *v3; // esi@1

  v2 = this;
  v3 = this->m_spSubMenu.m_pObject;
  if ( v3 != pkPopupMenuWin )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v2->m_spSubMenu.m_pObject = pkPopupMenuWin;
    if ( pkPopupMenuWin )
      InterlockedIncrement((volatile LONG *)&pkPopupMenuWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (005766B0) --------------------------------------------------------
void __thiscall PopupMenu::PopupMenu(PopupMenu *this)
{
  PopupMenu *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->m_kClickEvent.iMsg = 0;
  v1->m_kClickEvent.pvMsgBody = 0;
  v1->m_ePopupMenuID = 0;
  v1->m_uiExtraData = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PopupMenu::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PopupMenu::_vftable_;
}
// 9A64D8: using guessed type int (__stdcall *PopupMenu___vftable_)(int uiFlags);
// 9A64F4: using guessed type int (__thiscall *PopupMenu___vftable_)(void *p, char);

//----- (005766F0) --------------------------------------------------------
void __thiscall PopupMenu::_PopupMenu(PopupMenu *this)
{
  PgWinBut *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = (PgWinBut *)this;
  v2 = this->m_kClickEvent.pvMsgBody;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PopupMenu::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PopupMenu::_vftable_;
  operator delete(v2);
  PgWinBut::_PgWinBut(v1);
}
// 9A64D8: using guessed type int (__stdcall *PopupMenu___vftable_)(int uiFlags);
// 9A64F4: using guessed type int (__thiscall *PopupMenu___vftable_)(void *p, char);

//----- (00576720) --------------------------------------------------------
void __thiscall PopupMenu::SetClickEvent(PopupMenu *this, int iMsg, void *pvMsgBody)
{
  PopupMenu *v3; // esi@1

  v3 = this;
  operator delete(this->m_kClickEvent.pvMsgBody);
  v3->m_kClickEvent.iMsg = iMsg;
  v3->m_kClickEvent.pvMsgBody = pvMsgBody;
}

//----- (00576750) --------------------------------------------------------
void __thiscall PopupMenuText::Resize(PopupMenuText *this, unsigned int dwWidth, unsigned int dwHeight)
{
  PopupMenuText *v3; // esi@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(dwWidth);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v3,
    dwHeight);
  ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(v3);
  ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)(v3);
}

//----- (005767A0) --------------------------------------------------------
void __thiscall PopupMenuText::GetExtent(PopupMenuText *this, unsigned int *rdwWidth, unsigned int *rdwHeight)
{
  PopupMenuText *v3; // esi@1

  v3 = this;
  *rdwWidth = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  *rdwHeight = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3);
}

//----- (005767D0) --------------------------------------------------------
void __thiscall PopupMenuText::OnChangeButShow(PopupMenuText *this, PgWinBut::ButShow eShow)
{
  if ( eShow )
  {
    if ( eShow == 1 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        0,
        255,
        204,
        255);
    }
    else
    {
      if ( eShow == 2 )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
          54,
          255,
          0,
          255);
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      255,
      255,
      255);
  }
}

//----- (00576850) --------------------------------------------------------
void __thiscall PopupMenuTextCheck::Resize(PopupMenuTextCheck *this, unsigned int dwWidth, unsigned int dwHeight)
{
  PopupMenuTextCheck *v3; // esi@1

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(dwWidth);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v3,
    dwHeight);
  ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[119].__vecDelDtor)(v3);
  ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)(v3);
}

//----- (005768A0) --------------------------------------------------------
void __thiscall PopupMenuTextCheck::GetExtent(PopupMenuTextCheck *this, unsigned int *rdwWidth, unsigned int *rdwHeight)
{
  PopupMenuTextCheck *v3; // esi@1

  v3 = this;
  *rdwWidth = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  *rdwHeight = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3);
}

//----- (005768D0) --------------------------------------------------------
void __thiscall PopupMenuTextCheck::OnCommand(PopupMenuTextCheck *this, unsigned int wParam, int lParam)
{
  if ( wParam == 100 )
    ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)();
}

//----- (005768F0) --------------------------------------------------------
bool __thiscall PopupMenuWin::Create(PopupMenuWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight, PgFrameWork *pkFrameWork)
{
  PopupMenuWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, 0, pkFrameWork);
  if ( result )
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
      v5,
      2 * v5->baseclass_0.m_uiEdgeWidth + 128,
      2 * v5->baseclass_0.m_uiEdgeHeight + 12);
    result = 1;
  }
  return result;
}

//----- (00576950) --------------------------------------------------------
void __thiscall PopupMenuWin::OnCommand(PopupMenuWin *this, unsigned int wParam, int lParam)
{
  if ( this->baseclass_0.baseclass_0.m_pkFrameWork )
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.m_pkFrameWork->baseclass_0.vfptr[2].SetMessageNum)(
      wParam,
      lParam,
      0);
}

//----- (00576980) --------------------------------------------------------
void __thiscall PopupMenuWin::SetReceiver(PopupMenuWin *this, PgWin *pkReceiver)
{
  this->m_pkReceiver = pkReceiver;
}

//----- (00576990) --------------------------------------------------------
bool __thiscall PopupMenuText::Create(PopupMenuText *this, unsigned int uiWidth, unsigned int uiHeight, char *pcText, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, bool bBold)
{
  PopupMenuText *v9; // edi@1
  PgFont *v10; // eax@4
  PgWinText *v11; // eax@4
  PgWinText *v12; // esi@4
  bool result; // al@5
  Font::Type v14; // [sp-10h] [bp-1Ch]@2
  bool bRet_3; // [sp+2Fh] [bp+23h]@1

  v9 = this;
  bRet_3 = PgWinBut::Create(
             &this->baseclass_0.baseclass_0,
             5,
             5,
             uiWidth,
             uiHeight,
             pkParent,
             uiCmdMsg,
             pcName,
             uiExtStyle);
  v14 = bBold != 0;
  v10 = Font::Get(v14);
  v11 = PgWinText::CreateWin(5, 5, uiWidth, uiHeight, v10, &v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = v11;
  if ( v11 )
  {
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v11,
      5u);
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v12,
      (unsigned int)&Color::m_kDxWhiteColor);
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v12,
      (unsigned int)pcText);
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
    result = bRet_3;
    v9->m_pkText = v12;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00576A50) --------------------------------------------------------
void __thiscall PopupMenuTextCheck::DirectMessage(PopupMenuTextCheck *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 16 )
  {
    if ( LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_fScale) == *(_DWORD *)pvBody )
      *(_BYTE *)(LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][1])
               + 380) = *((_BYTE *)pvBody + 4);
  }
}

//----- (00576A80) --------------------------------------------------------
bool __thiscall PopupMenuWin::IsMenuIDShow(PopupMenuWin *this, PopupMenuID eID)
{
  PopupMenuWin *v2; // ebx@1
  signed int v3; // edi@1
  char *v4; // esi@1

  v2 = this;
  v3 = 0;
  v4 = (char *)this->m_aspMenu;
  while ( 1 )
  {
    if ( !*(_DWORD *)v4 )
      return 0;
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) == 1
      && *(_DWORD *)(*(_DWORD *)v4 + 332) == eID )
      break;
    ++v3;
    v4 += 4;
    if ( v3 >= 20 )
      return 0;
  }
  return 1;
}

//----- (00576AD0) --------------------------------------------------------
void __thiscall PopupMenuWin::FinishMenu(PopupMenuWin *this, unsigned int uiMinimumWidth)
{
  unsigned int v2; // edi@1
  PopupMenuWin *v3; // esi@1
  char *v4; // ebx@2
  unsigned int v5; // edi@10
  int v6; // ebx@11
  unsigned int dwHeight; // [sp+Ch] [bp-14h]@4
  unsigned int dwWidth; // [sp+10h] [bp-10h]@4
  int uiCy; // [sp+14h] [bp-Ch]@1
  unsigned int uiMaxCy; // [sp+18h] [bp-8h]@1
  unsigned int uiMaxCx; // [sp+1Ch] [bp-4h]@1

  v2 = 0;
  v3 = this;
  uiMaxCx = 0;
  uiMaxCy = 0;
  uiCy = 0;
  if ( this->m_dwMenuCount )
  {
    v4 = (char *)this->m_aspMenu;
    do
    {
      if ( *(_DWORD *)v4 )
      {
        (*(void (__stdcall **)(unsigned int *, unsigned int *))(**(_DWORD **)v4 + 560))(&dwWidth, &dwHeight);
        if ( dwWidth > uiMaxCx )
          uiMaxCx = dwWidth;
        if ( dwHeight > uiMaxCy )
          uiMaxCy = dwHeight;
        uiCy += dwHeight + 4;
      }
      ++v2;
      v4 += 4;
    }
    while ( v2 < v3->m_dwMenuCount );
  }
  v5 = 0;
  if ( v3->m_dwMenuCount )
  {
    v6 = (int)v3->m_aspMenu;
    do
    {
      if ( *(_DWORD *)v6 )
        (*(void (__stdcall **)(unsigned int, unsigned int))(**(_DWORD **)v6 + 564))(uiMaxCx, uiMaxCy);
      ++v5;
      v6 += 4;
    }
    while ( v5 < v3->m_dwMenuCount );
  }
  if ( uiMaxCx < uiMinimumWidth )
    uiMaxCx = uiMinimumWidth;
  if ( uiMaxCx )
    ((void (__thiscall *)(PopupMenuWin *, unsigned int, unsigned int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
      v3,
      uiMaxCx + 2 * v3->baseclass_0.m_uiEdgeWidth + 10,
      uiCy + 2 * v3->baseclass_0.m_uiEdgeHeight + 10);
}

//----- (00576BB0) --------------------------------------------------------
void __thiscall PopupMenu::DoAction(PopupMenu *this)
{
  PopupMenu *v1; // edi@1
  PgWin *v2; // eax@1
  int v3; // eax@3
  void *v4; // ebx@4
  bool v5; // zf@8
  int v6; // ecx@8
  unsigned int v7; // edx@8
  int v8; // [sp+8h] [bp-14h]@3
  DirectUserMsgBody_PopupMenuClicked kBody; // [sp+Ch] [bp-10h]@8
  unsigned int v10; // [sp+18h] [bp-4h]@1
  int v11; // [sp+1Ch] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.m_uiCmdMsg,
      v1->baseclass_0.m_uiCmdMsgParam);
  v3 = v1->m_kClickEvent.iMsg;
  v8 = v3;
  if ( v3 )
  {
    v4 = v1->m_kClickEvent.pvMsgBody;
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(int, void *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        v3,
        v4,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      v3 = v8;
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(int, void *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          v8,
          v4,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        v3 = v8;
      }
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      v3,
      v4,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v5 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  v6 = v1->m_ePopupMenuID;
  v7 = v1->m_uiExtraData;
  kBody.bCheck = 0;
  kBody.iPopupMenuID = v6;
  kBody.uiExtraData = v7;
  if ( !v5 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_PopupMenuClicked *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      15,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, DirectUserMsgBody_PopupMenuClicked *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        15,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    15,
    &kBody,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  PgWinMgr::ClosePopupWin(&Pgg_kWinMgr, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00576CC0) --------------------------------------------------------
bool __thiscall PopupMenuTextCheck::Create(PopupMenuTextCheck *this, unsigned int uiWidth, unsigned int uiHeight, char *pcText, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle)
{
  PopupMenuTextCheck *v8; // ebx@1
  PgFont *v9; // eax@1
  bool result; // al@2
  NiTexturePalette *v11; // esi@3
  char *v12; // eax@5
  PgSprData *v13; // edi@6
  NiPointer<PgSprData::PgHitTester> *v14; // ecx@6
  unsigned int v15; // esi@6
  int v16; // eax@10
  PgFont *v17; // eax@12
  PgWinText *v18; // esi@12
  ColumnBut *v19; // eax@13
  int kButtonSize_4; // [sp+4h] [bp-28h]@6
  tagSIZE kTextSize; // [sp+8h] [bp-24h]@3
  int iLeft; // [sp+10h] [bp-1Ch]@6
  int iTop; // [sp+14h] [bp-18h]@6
  NiNode *v24; // [sp+18h] [bp-14h]@7
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@3
  int v26; // [sp+28h] [bp-4h]@3
  bool bRet_3; // [sp+4Fh] [bp+23h]@12

  v8 = this;
  v9 = Font::Get(0);
  if ( !v9 )
    goto LABEL_16;
  PgFont::GetTextSize(v9, pcText, strlen(pcText), &kTextSize);
  spNode.m_pObject = 0;
  v11 = dword_B70448;
  v26 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v12 = Folder::Merge(&Folder::m_acMenu, "Game\\Option_Graphic.nif");
  PgUtil::LoadNodeNifFile(v12, &spNode, v11);
  if ( !spNode.m_pObject )
    goto LABEL_16;
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrOlineChNor", &iLeft, &iTop, 0);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "ChrOlineChClick");
  v14 = v13->m_akHitTester.m_pBase;
  v15 = v14->m_pObject->m_uiWidth;
  kButtonSize_4 = v14->m_pObject->m_uiHeight;
  v26 = -1;
  if ( spNode.m_pObject )
  {
    v24 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v24 )
        ((void (__stdcall *)(signed int))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
    }
  }
  v16 = kTextSize.cy;
  if ( kTextSize.cy <= kButtonSize_4 )
    v16 = kButtonSize_4;
  bRet_3 = PgWinBut::Create(
             &v8->baseclass_0.baseclass_0,
             5,
             5,
             v15 + kTextSize.cx,
             v16,
             pkParent,
             uiCmdMsg,
             pcName,
             uiExtStyle);
  v17 = Font::Get(0);
  v18 = PgWinText::CreateWin(
          v15 + 5,
          5,
          kTextSize.cx,
          kTextSize.cy,
          v17,
          &v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  if ( v18 )
  {
    ((void (__thiscall *)(PgWinText *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v18);
    ((void (__thiscall *)(PgWinText *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v18);
    ((void (__thiscall *)(PgWinText *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v18);
    ((void (__thiscall *)(PgWinText *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v18);
    v19 = ColumnBut::CreateWin(5, 5, v13, &v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0x64u, 0);
    v8->m_pkCheckBox = v19;
    result = v19 != 0 ? bRet_3 : 0;
  }
  else
  {
LABEL_16:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00576EB0) --------------------------------------------------------
void __thiscall PopupMenuTextCheck::DoAction(PopupMenuTextCheck *this)
{
  PopupMenuTextCheck *v1; // esi@1
  PgWin *v2; // eax@1
  bool v3; // al@3
  int v4; // ecx@3
  unsigned int v5; // edx@3
  int v6; // esi@3
  bool v7; // zf@3
  DirectUserMsgBody_PopupMenuClicked kBody; // [sp+4h] [bp-10h]@3
  unsigned int v9; // [sp+10h] [bp-4h]@1
  int v10; // [sp+14h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->baseclass_0.baseclass_0.m_uiCmdMsgParam);
  v1->m_pkCheckBox->m_bCheck = v1->m_pkCheckBox->m_bCheck == 0;
  v3 = v1->m_pkCheckBox->m_bCheck;
  v4 = v1->baseclass_0.m_ePopupMenuID;
  v5 = v1->baseclass_0.m_uiExtraData;
  v6 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  v7 = *(_DWORD *)(v6 + 4) == 0;
  kBody.bCheck = v3;
  kBody.iPopupMenuID = v4;
  kBody.uiExtraData = v5;
  if ( !v7 )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuClicked *, int))(**(_DWORD **)(v6 + 4) + 4))(
      15,
      &kBody,
      v6);
    if ( *(_DWORD *)(v6 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuClicked *, int))(**(_DWORD **)(v6 + 4) + 20))(
        15,
        &kBody,
        v6);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuClicked *, int))(*(_DWORD *)v6 + 20))(
    v6,
    15,
    &kBody,
    v6);
}
// A85C00: using guessed type int __security_cookie;

//----- (00576F70) --------------------------------------------------------
void __thiscall PopupMenuSubMenu::DoAction(PopupMenuSubMenu *this)
{
  PopupMenuSubMenu *v1; // esi@1
  PgWin *v2; // eax@1
  bool v3; // zf@3
  int v4; // eax@3
  PgWin *v5; // edi@7
  int v6; // ebx@8
  int v7; // ebx@8
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // eax@8
  PgWin *v9; // ST04_4@8
  PgWin *v10; // eax@8
  int y; // [sp+8h] [bp-18h]@8
  int x; // [sp+Ch] [bp-14h]@8
  DirectUserMsgBody_PopupMenuClicked kBody; // [sp+10h] [bp-10h]@3
  unsigned int v14; // [sp+1Ch] [bp-4h]@1
  int v15; // [sp+20h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsgParam);
  v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  v4 = v1->baseclass_0.baseclass_0.m_ePopupMenuID;
  kBody.bCheck = 0;
  kBody.iPopupMenuID = v4;
  if ( !v3 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_PopupMenuClicked *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      15,
      &kBody,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, DirectUserMsgBody_PopupMenuClicked *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        15,
        &kBody,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    15,
    &kBody,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  if ( v1->m_spSubMenu.m_pObject )
  {
    v5 = PgWin::GetParentWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v5 )
    {
      v6 = ((int (__thiscall *)(PgWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
      v7 = v6
         - ((int (__thiscall *)(PopupMenuSubMenu *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v1);
      v8 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor;
      x = v7;
      y = 0;
      ((void (__thiscall *)(PopupMenuSubMenu *, int *, int *))v8)(v1, &x, &y);
      ((void (__stdcall *)(int, int))v1->m_spSubMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        x,
        y);
      ((void (__stdcall *)(char *))v1->m_spSubMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(v5[1].baseclass_0.baseclass_0.baseclass_0.m_pcName);
      v9 = (PgWin *)v1->m_spSubMenu.m_pObject;
      v10 = PgWin::GetParentWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, v10, v9);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005770B0) --------------------------------------------------------
void __thiscall PopupMenuWin::_PopupMenuWin(PopupMenuWin *this)
{
  PopupMenuWin *v1; // ebx@1
  char *v2; // edi@1
  int v3; // esi@2
  signed int v4; // [sp+4h] [bp-10h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PopupMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PopupMenuWin::_vftable_;
  v2 = (char *)this->m_aspMenu;
  v4 = 20;
  do
  {
    v3 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v4;
  }
  while ( v4 );
  _eh_vector_destructor_iterator_(
    v1->m_aspMenu,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  FrameBoxWin::_FrameBoxWin(&v1->baseclass_0);
}
// 9A6BEC: using guessed type int (__stdcall *PopupMenuWin___vftable_)(int uiFlags);
// 9A6C0C: using guessed type int (__thiscall *PopupMenuWin___vftable_)(void *p, char);

//----- (00577170) --------------------------------------------------------
void __thiscall PopupMenuWin::Clear(PopupMenuWin *this)
{
  PopupMenuWin *v1; // ebx@1
  PgWin **v2; // edi@2
  PgWin *v3; // esi@4
  PgWin *v4; // esi@7
  NiPointer<PgWin> result; // [sp+4h] [bp-8h]@3
  unsigned int i; // [sp+8h] [bp-4h]@1

  v1 = this;
  i = 0;
  if ( this->m_dwMenuCount )
  {
    v2 = (PgWin **)this->m_aspMenu;
    do
    {
      PgWin::DetachChildWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0, &result, *v2);
      if ( result.m_pObject )
      {
        v3 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v3 )
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
        }
      }
      v4 = *v2;
      if ( *v2 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v4 )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
        *v2 = 0;
      }
      ++v2;
      ++i;
    }
    while ( i < v1->m_dwMenuCount );
    v1->m_dwMenuCount = 0;
  }
  else
  {
    this->m_dwMenuCount = 0;
  }
}

//----- (00577220) --------------------------------------------------------
bool __thiscall PopupMenuWin::AddMenu(PopupMenuWin *this, PopupMenu *pkMenu)
{
  int v2; // edi@0
  PopupMenuWin *v3; // esi@1
  PopupMenu *v4; // edi@2
  unsigned int v5; // eax@2
  int v6; // ebx@3
  int v7; // ST04_4@3
  unsigned int v8; // ecx@5
  PopupMenu *v9; // ebx@5
  bool result; // al@11
  int v11; // [sp-8h] [bp-Ch]@2
  int pkMenua; // [sp+Ch] [bp+8h]@5

  v3 = this;
  if ( this->m_dwMenuCount >= 0x14 )
  {
    result = 0;
  }
  else
  {
    v11 = v2;
    v4 = pkMenu;
    PgWin::AttachChildWin(
      &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &pkMenu->baseclass_0.baseclass_0.baseclass_0);
    v5 = v3->m_dwMenuCount;
    if ( v5 )
    {
      v6 = (*(int (__stdcall **)(int))(**((_DWORD **)&v3->m_dwMenuCount + v5) + 168))(v11);
      v7 = v6 + (*(int (**)(void))(**((_DWORD **)&v3->m_dwMenuCount + v3->m_dwMenuCount) + 148))() + 4;
    }
    else
    {
      ((void (__thiscall *)(PopupMenu *, signed int, int))pkMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(
        pkMenu,
        5,
        v11);
    }
    ((void (__thiscall *)(PopupMenu *))pkMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(pkMenu);
    v8 = v3->m_dwMenuCount;
    v9 = v3->m_aspMenu[v8].m_pObject;
    pkMenua = (int)&v3->m_aspMenu[v8];
    if ( v9 != v4 )
    {
      if ( v9
        && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v9,
            1u);
      }
      *(_DWORD *)pkMenua = v4;
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ++v3->m_dwMenuCount;
    result = 1;
  }
  return result;
}
// 577220: could not find valid save-restore pair for edi

//----- (00577300) --------------------------------------------------------
void __thiscall PopupMenuWin::PopupMenuWin(PopupMenuWin *this)
{
  PopupMenuWin *v1; // esi@1
  int v2; // ebx@1
  int v3; // edi@2
  signed int v4; // [sp+4h] [bp-10h]@1

  v1 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PopupMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PopupMenuWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_aspMenu,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v2 = (int)v1->m_aspMenu;
  v4 = 20;
  do
  {
    v3 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v4;
  }
  while ( v4 );
  v1->m_dwMenuCount = 0;
  v1->m_pkReceiver = 0;
}
// 9A6BEC: using guessed type int (__stdcall *PopupMenuWin___vftable_)(int uiFlags);
// 9A6C0C: using guessed type int (__thiscall *PopupMenuWin___vftable_)(void *p, char);

//----- (005773D0) --------------------------------------------------------
void __thiscall PopupMenuWin::UpdateMeWin(PopupMenuWin *this, float fCurTime)
{
  PopupMenuWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00577430) --------------------------------------------------------
PopupMenuText *__cdecl PopupMenuText::CreateWin(char *pcText, unsigned int uiCmdMsg, unsigned int uiCmdParam, PgWin *pkParent, char *pcName, unsigned int uiExtStyle, bool bBold)
{
  PgFont *v7; // eax@2
  int v8; // ebx@2
  void *v9; // eax@5
  void *v10; // esi@5
  int v11; // edi@12
  tagSIZE kSize; // [sp+0h] [bp-18h]@5
  NiPointer<PopupMenuText> pkWin; // [sp+8h] [bp-10h]@5
  int v15; // [sp+14h] [bp-4h]@5

  if ( bBold )
  {
    v7 = Font::Get(BOLD);
    v8 = 0;
  }
  else
  {
    v8 = 0;
    v7 = Font::Get(0);
  }
  if ( v7 == (PgFont *)v8 )
    return 0;
  PgFont::GetTextSize(v7, pcText, strlen(pcText), &kSize);
  v9 = operator new(0x158u);
  v10 = v9;
  pkWin.m_pObject = (PopupMenuText *)v9;
  v15 = v8;
  if ( v9 == (void *)v8 )
  {
    v10 = 0;
  }
  else
  {
    PgWinBut::PgWinBut((PgWinBut *)v9);
    *((_DWORD *)v10 + 81) = v8;
    *((_DWORD *)v10 + 82) = v8;
    *((_DWORD *)v10 + 83) = v8;
    *((_DWORD *)v10 + 84) = v8;
    *(_DWORD *)v10 = &PopupMenuText::_vftable_;
    *((_DWORD *)v10 + 58) = &PopupMenuText::_vftable_;
  }
  pkWin.m_pObject = (PopupMenuText *)v10;
  if ( v10 != (void *)v8 )
    InterlockedIncrement((volatile LONG *)v10 + 1);
  v15 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v10);
  if ( !(unsigned __int8)(*(int (__thiscall **)(void *, int, int, char *, PgWin *, unsigned int, char *, unsigned int, _DWORD))(*(_DWORD *)v10 + 568))(
                           v10,
                           kSize.cx,
                           kSize.cy,
                           pcText,
                           pkParent,
                           uiCmdMsg,
                           pcName,
                           uiExtStyle,
                           bBold) )
  {
    (*(void (__thiscall **)(void *, unsigned int))(*(_DWORD *)v10 + 520))(v10, uiCmdParam);
    PgWinMgr::Remove(&Pgg_kWinMgr, (NiPointer<PgWin> *)&bBold, (PgWin *)v10);
    if ( bBold != v8 )
    {
      v11 = bBold;
      if ( !InterlockedDecrement((volatile LONG *)(bBold + 4)) )
      {
        if ( v11 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
      }
    }
    v15 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v10 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v10)(v10, 1);
    return 0;
  }
  (*(void (__thiscall **)(void *))(*(_DWORD *)v10 + 356))(v10);
  v15 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v10 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v10)(v10, 1);
  return (PopupMenuText *)v10;
}
// 9A6730: using guessed type int (__stdcall *PopupMenuText___vftable_)(int uiFlags);
// 9A674C: using guessed type int (__thiscall *PopupMenuText___vftable_)(void *p, char);

//----- (005775F0) --------------------------------------------------------
PopupMenuTextCheck *__cdecl PopupMenuTextCheck::CreateWin(char *pcText, unsigned int uiCmdMsg, unsigned int uiCmdParam, PgWin *pkParent, char *pcName, unsigned int uiExtStyle)
{
  void *v6; // eax@1
  void *v7; // esi@1
  PgWin *v8; // edi@8
  PopupMenuTextCheck *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x158u);
  v7 = v6;
  result.m_pObject = (PgWin *)v6;
  v11 = 0;
  if ( v6 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v6);
    *((_DWORD *)v7 + 81) = 0;
    *((_DWORD *)v7 + 82) = 0;
    *((_DWORD *)v7 + 83) = 0;
    *((_DWORD *)v7 + 84) = 0;
    *(_DWORD *)v7 = &PopupMenuTextCheck::_vftable_;
    *((_DWORD *)v7 + 58) = &PopupMenuTextCheck::_vftable_;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)v7 + 1);
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, _DWORD, _DWORD, char *, PgWin *, unsigned int, char *, unsigned int))(*(_DWORD *)v7 + 568))(
                          v7,
                          0,
                          0,
                          pcText,
                          pkParent,
                          uiCmdMsg,
                          pcName,
                          uiExtStyle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = (PopupMenuTextCheck *)v7;
  }
  else
  {
    (*(void (__thiscall **)(void *, unsigned int))(*(_DWORD *)v7 + 520))(v7, uiCmdParam);
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}
// 9A698C: using guessed type int (__stdcall *PopupMenuTextCheck___vftable_)(int uiFlags);
// 9A69AC: using guessed type int (__thiscall *PopupMenuTextCheck___vftable_)(void *p, char);

//----- (00577770) --------------------------------------------------------
PopupMenuWin *__cdecl PopupMenuWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth, PgFrameWork *pkFrameWork)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  PopupMenuWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1F8u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    PopupMenuWin::PopupMenuWin((PopupMenuWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiSourceTexture *, unsigned int, unsigned int, PgFrameWork *))(*(_DWORD *)v6 + 548))(
                          v6,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (PopupMenuWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (005778B0) --------------------------------------------------------
PopupMenuSubMenu *__cdecl PopupMenuSubMenu::CreateWin(char *pcText, unsigned int uiCmdMsg, unsigned int uiCmdParam, PgWin *pkParent, char *pcName, unsigned int uiExtStyle)
{
  PgFont *v6; // ecx@1
  void *v7; // eax@2
  void *v8; // esi@2
  PgWin *v9; // edi@9
  tagSIZE kSize; // [sp+0h] [bp-1Ch]@2
  NiPointer<PopupMenuSubMenu> pkWin; // [sp+8h] [bp-14h]@5
  NiPointer<PgWin> result; // [sp+Ch] [bp-10h]@2
  int v14; // [sp+18h] [bp-4h]@2

  v6 = Font::Get(0);
  if ( !v6 )
    return 0;
  PgFont::GetTextSize(v6, pcText, strlen(pcText), &kSize);
  v7 = operator new(0x15Cu);
  v8 = v7;
  result.m_pObject = (PgWin *)v7;
  v14 = 0;
  if ( v7 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v7);
    *((_DWORD *)v8 + 81) = 0;
    *((_DWORD *)v8 + 82) = 0;
    *((_DWORD *)v8 + 83) = 0;
    *((_DWORD *)v8 + 84) = 0;
    *(_DWORD *)v8 = &PopupMenuSubMenu::_vftable_;
    *((_DWORD *)v8 + 58) = &PopupMenuSubMenu::_vftable_;
    *((_DWORD *)v8 + 86) = 0;
  }
  else
  {
    v8 = 0;
  }
  pkWin.m_pObject = (PopupMenuSubMenu *)v8;
  if ( v8 )
    InterlockedIncrement((volatile LONG *)v8 + 1);
  v14 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( !(unsigned __int8)(*(int (__thiscall **)(void *, int, int, char *, PgWin *, unsigned int, char *, unsigned int, _DWORD))(*(_DWORD *)v8 + 568))(
                           v8,
                           kSize.cx,
                           kSize.cy,
                           pcText,
                           pkParent,
                           uiCmdMsg,
                           pcName,
                           uiExtStyle,
                           0) )
  {
    (*(void (__thiscall **)(void *, unsigned int))(*(_DWORD *)v8 + 520))(v8, uiCmdParam);
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v14 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    return 0;
  }
  (*(void (__thiscall **)(void *))(*(_DWORD *)v8 + 356))(v8);
  v14 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
  return (PopupMenuSubMenu *)v8;
}
// 9A6E38: using guessed type int (__stdcall *PopupMenuSubMenu___vftable_)(int uiFlags);
// 9A6E54: using guessed type int (__thiscall *PopupMenuSubMenu___vftable_)(void *p, char);

//----- (00577A60) --------------------------------------------------------
void __thiscall PopupMenuText::_PopupMenuText(PopupMenuText *this)
{
  PgWinBut *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = (PgWinBut *)this;
  v2 = this->baseclass_0.m_kClickEvent.pvMsgBody;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PopupMenu::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PopupMenu::_vftable_;
  operator delete(v2);
  PgWinBut::_PgWinBut(v1);
}
// 9A64D8: using guessed type int (__stdcall *PopupMenu___vftable_)(int uiFlags);
// 9A64F4: using guessed type int (__thiscall *PopupMenu___vftable_)(void *p, char);

//----- (00577A90) --------------------------------------------------------
void *__thiscall PopupMenuTextCheck::_vector_deleting_destructor_(PopupMenuTextCheck *this, unsigned int a2)
{
  PgWinBut *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = (PgWinBut *)this;
  v3 = this->baseclass_0.m_kClickEvent.pvMsgBody;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PopupMenu::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PopupMenu::_vftable_;
  operator delete(v3);
  PgWinBut::_PgWinBut(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A64D8: using guessed type int (__stdcall *PopupMenu___vftable_)(int uiFlags);
// 9A64F4: using guessed type int (__thiscall *PopupMenu___vftable_)(void *p, char);

//----- (00577AE0) --------------------------------------------------------
void __thiscall PopupMenuSubMenu::_PopupMenuSubMenu(PopupMenuSubMenu *this)
{
  PopupMenuSubMenu *v1; // edi@1
  PopupMenuWin *v2; // esi@1
  void *v3; // ST00_4@5

  v1 = this;
  v2 = this->m_spSubMenu.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->baseclass_0.baseclass_0.m_kClickEvent.pvMsgBody;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PopupMenu::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PopupMenu::_vftable_;
  operator delete(v3);
  PgWinBut::_PgWinBut(&v1->baseclass_0.baseclass_0.baseclass_0);
}
// 9A64D8: using guessed type int (__stdcall *PopupMenu___vftable_)(int uiFlags);
// 9A64F4: using guessed type int (__thiscall *PopupMenu___vftable_)(void *p, char);

//----- (00577B80) --------------------------------------------------------
void *__thiscall PopupMenuWin::_vector_deleting_destructor_(PopupMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PopupMenuWin::_PopupMenuWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00577BB0) --------------------------------------------------------
void *__thiscall PopupMenuSubMenu::_vector_deleting_destructor_(PopupMenuSubMenu *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PopupMenuSubMenu::_PopupMenuSubMenu(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00577BE0) --------------------------------------------------------
void __thiscall PrisonTimeWin::PrisonTimeWin(PrisonTimeWin *this)
{
  PrisonTimeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrisonTimeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrisonTimeWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimer);
}
// 9A70F8: using guessed type int (__stdcall *PrisonTimeWin___vftable_)(int uiFlags);
// 9A7114: using guessed type int (__thiscall *PrisonTimeWin___vftable_)(void *p, char);

//----- (00577C50) --------------------------------------------------------
void __thiscall PrisonTimeWin::_PrisonTimeWin(PrisonTimeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrisonTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrisonTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A70F8: using guessed type int (__stdcall *PrisonTimeWin___vftable_)(int uiFlags);
// 9A7114: using guessed type int (__thiscall *PrisonTimeWin___vftable_)(void *p, char);

//----- (00577C90) --------------------------------------------------------
void __thiscall PrisonTimeWin::UpdateMeWin(PrisonTimeWin *this, float fCurTime)
{
  PrisonTimeWin *v2; // edi@1
  char *v3; // eax@3
  NiRefObjectVtbl *v4; // ebx@3
  char *v5; // eax@3
  PgWinText *v6; // edi@4
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // edx@4
  PgWinText *v8; // ecx@4
  PgWinText *v9; // edi@7
  D3DXCOLOR *v10; // [sp+0h] [bp-8h]@5
  NiRefObjectVtbl *fCurTimea; // [sp+10h] [bp+8h]@3

  v2 = this;
  if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimer, fCurTime) )
  {
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      1u);
    --PrisonTimeWin::m_second;
  }
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  fCurTimea = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = fs("%02d:%02d:%02d");
  fCurTimea[118].__vecDelDtor((NiRefObject *)v2->m_minuteTxtWin, (unsigned int)v3);
  v4 = v2->m_DayTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = fs("%02d");
  v4[118].__vecDelDtor((NiRefObject *)v2->m_DayTxtWin, (unsigned int)v5);
  if ( PrisonTimeWin::m_second >= 0x3C )
  {
    if ( PrisonTimeWin::m_second >= 0x12C )
      goto LABEL_10;
    v9 = v2->m_minuteTxtWin;
    v7 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
    v8 = v9;
    goto LABEL_8;
  }
  v6 = v2->m_minuteTxtWin;
  v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
  v8 = v6;
  if ( PrisonTimeWin::m_second & 1 )
  {
LABEL_8:
    v10 = &Color::m_kDxRedColor;
    goto LABEL_9;
  }
  v10 = &Color::m_kDxWhiteColor;
LABEL_9:
  v7(&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)v10);
LABEL_10:
  if ( PrisonTimeWin::m_second == 60 )
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_KQLast);
}
// A9915C: using guessed type unsigned int PrisonTimeWin__m_second;

//----- (00577DF0) --------------------------------------------------------
void __thiscall PrisonTimeWin::ResetTime(PrisonTimeWin *this, unsigned int second)
{
  PrisonTimeWin *v2; // esi@1

  v2 = this;
  PrisonTimeWin::m_second = second;
  CNSTimer_Interval::ReSet(&this->m_kTimer, Timer::ms_fCurTime);
  v2->m_kTimer.m_fCheckTime = 1.0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A9915C: using guessed type unsigned int PrisonTimeWin__m_second;

//----- (00577E20) --------------------------------------------------------
bool __thiscall PrisonTimeWin::Create(PrisonTimeWin *this, PgFrameWork *pkFrameWork)
{
  PrisonTimeWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgSprData *v10; // eax@15
  PgSprData *v11; // edi@15
  PgWinSpr *v12; // eax@15
  NiPointer<PgSprData::PgHitTester> *v13; // ecx@15
  unsigned int v14; // edi@15
  unsigned int v15; // ebx@15
  PgFont *v16; // eax@15
  PgWinText *v17; // eax@15
  NiRefObjectVtbl *v18; // edi@15
  PgFont *v19; // eax@15
  PgFont *v20; // eax@17
  PgWinText *v21; // eax@17
  NiRefObjectVtbl *v22; // edi@17
  PgFont *v23; // ST24_4@17
  NiRefObjectVtbl *v24; // edi@17
  int v25; // eax@17
  unsigned int uiWidth; // [sp+3Ch] [bp-20h]@15
  unsigned int uiHeight; // [sp+40h] [bp-1Ch]@15
  int uiLeft; // [sp+44h] [bp-18h]@11
  int uiTop; // [sp+48h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+4Ch] [bp-10h]@1
  int v31; // [sp+58h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v31 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v31 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\PrisonTime.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "PrisonTimeWin", 0) )
  {
    v4 = spNode.m_pObject;
    v31 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Time", &uiLeft, &uiTop, v3);
  v11 = v10;
  v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  v13 = v11->m_akHitTester.m_pBase;
  v14 = v13->m_pObject->m_uiHeight;
  v15 = v13->m_pObject->m_uiWidth;
  v16 = Font::Get(0);
  v17 = PgWinText::CreateWin(uiLeft, uiTop + 2, v15, v14, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_minuteTxtWin = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  v18 = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v19 = Font::Get(LARGEBOLD);
  v18[113].__vecDelDtor((NiRefObject *)v2->m_minuteTxtWin, (unsigned int)v19);
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("00:00:00");
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Day", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v31 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v20 = Font::Get(0);
  v21 = PgWinText::CreateWin(uiLeft, uiTop + 2, uiWidth, uiHeight, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_DayTxtWin = v21;
  ((void (__thiscall *)(PgWinText *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v21);
  v22 = v2->m_DayTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = Font::Get(SMALL);
  ((void (__thiscall *)(PgWinText *))v22[113].__vecDelDtor)(v2->m_DayTxtWin);
  ((void (__cdecl *)(_DWORD, PgFont *, signed int))v2->m_DayTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
    "0",
    v23,
    5);
  ((void (__cdecl *)(_DWORD))v2->m_DayTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(PrisonTimeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.0);
  v24 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
               (NiRefObject *)v2,
               160u);
  v24[77].__vecDelDtor((NiRefObject *)v2, v25);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    1u);
  v31 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00578140) --------------------------------------------------------
PrisonTimeWin *__cdecl PrisonTimeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  PrisonTimeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x17Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &PrisonTimeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &PrisonTimeWin::_vftable_;
    CNSTimer_Interval::CNSTimer_Interval((CNSTimer_Interval *)((char *)v2 + 352));
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (PrisonTimeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A70F8: using guessed type int (__stdcall *PrisonTimeWin___vftable_)(int uiFlags);
// 9A7114: using guessed type int (__thiscall *PrisonTimeWin___vftable_)(void *p, char);

//----- (00578290) --------------------------------------------------------
void *__thiscall PrisonTimeWin::_vector_deleting_destructor_(PrisonTimeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrisonTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrisonTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A70F8: using guessed type int (__stdcall *PrisonTimeWin___vftable_)(int uiFlags);
// 9A7114: using guessed type int (__thiscall *PrisonTimeWin___vftable_)(void *p, char);

//----- (005782D0) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::PrivateStoreInvWin(PrivateStoreInvWin *this)
{
  PrivateStoreInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrivateStoreInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrivateStoreInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = 0;
  LODWORD(v1->i64SellMoney) = 0;
  HIDWORD(v1->i64SellMoney) = 0;
  IconWin::ShowFocus(&v1->baseclass_0.baseclass_0, 1);
  v1->m_BuySloatItemCount = 0;
}
// 9A75E8: using guessed type int (__stdcall *PrivateStoreInvWin___vftable_)(int uiFlags);
// 9A7604: using guessed type int (__thiscall *PrivateStoreInvWin___vftable_)(void *p, char);

//----- (00578360) --------------------------------------------------------
bool __thiscall PrivateStoreInvWin::Create(PrivateStoreInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  PrivateStoreInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (005783A0) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::SetInvType(PrivateStoreInvWin *this, unsigned int uiInvType)
{
  this->m_uiInvType = uiInvType;
}

//----- (005783B0) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::OnFirstHitWin(PrivateStoreInvWin *this)
{
  PrivateStoreInvWin *v1; // esi@1
  Item *v2; // eax@1
  ItemInfoWin *v3; // ecx@2

  v1 = this;
  v2 = ItemIcon::GetItem(&this->baseclass_0);
  if ( v2 )
  {
    v3 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v3 )
    {
      if ( PrivateStoreWin::ms_uiPrivateStoreMode == 2 || PrivateStoreWin::ms_uiPrivateStoreMode == 3 )
      {
        ItemInfoWin::SetPrivateStoreBuyInfo(v3, v2, v1->i64SellMoney, v1->m_BuySloatItemCount, 0);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        ItemInfoWin::SetPrivateStoreSellInfo(v3, v2, v1->i64SellMoney, 0);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;

//----- (00578420) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::SetLotText(PrivateStoreInvWin *this, unsigned int uiLot)
{
  PrivateStoreInvWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@1

  v2 = this;
  v3 = this->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = fs("%d");
  v3[118].__vecDelDtor((NiRefObject *)v2->baseclass_0.m_pkLotText, (unsigned int)v4);
}

//----- (00578460) --------------------------------------------------------
void __thiscall PrivateStoreWin::PrivateStoreWin(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrivateStoreWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrivateStoreWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kEnableReflashButTimer);
  v1->m_bPrivateStoreOpen = 0;
  *(_DWORD *)&v1->signboard.signboard[0] = 0;
  *(_DWORD *)&v1->signboard.signboard[4] = 0;
  *(_DWORD *)&v1->signboard.signboard[8] = 0;
  *(_DWORD *)&v1->signboard.signboard[12] = 0;
  *(_DWORD *)&v1->signboard.signboard[16] = 0;
  *(_DWORD *)&v1->signboard.signboard[20] = 0;
  *(_DWORD *)&v1->signboard.signboard[24] = 0;
  *(_WORD *)&v1->signboard.signboard[28] = 0;
  v1->m_uiCurInvIndex = 0;
  v1->m_pkMoneyWin = 0;
  LODWORD(v1->i64PrivateStoreStartMyMoney) = 0;
  HIDWORD(v1->i64PrivateStoreStartMyMoney) = 0;
  v1->m_uiLot = 0;
}
// 9A7874: using guessed type int (__stdcall *PrivateStoreWin___vftable_)(int uiFlags);
// 9A7894: using guessed type int (__thiscall *PrivateStoreWin___vftable_)(void *p, char);

//----- (00578530) --------------------------------------------------------
void __thiscall PrivateStoreWin::_PrivateStoreWin(PrivateStoreWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrivateStoreWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrivateStoreWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A7874: using guessed type int (__stdcall *PrivateStoreWin___vftable_)(int uiFlags);
// 9A7894: using guessed type int (__thiscall *PrivateStoreWin___vftable_)(void *p, char);

//----- (00578550) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnCmdCancel(PrivateStoreWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (00578560) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnShowWin(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // esi@1
  PgFrameWork *v2; // eax@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  EditWin::SetEnable(v1->m_pkStoreNameInputEdit, 1);
  ((void (__stdcall *)(_DWORD))v1->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v2, BIL_MINIHOUSE_11);
}

//----- (005785C0) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnSellMoneyOK(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // ebx@1
  __int64 v2; // kr00_8@2
  __int64 v3; // ST30_8@2
  int v4; // ST4C_4@2
  __int64 v5; // ST28_8@2
  int v6; // ST50_4@2
  int v7; // ST54_4@2
  int v8; // eax@2

  v1 = this;
  if ( ItemIcon::GetItem(&this->m_apkInvWin[this->m_uiCurInvIndex]->baseclass_0) )
  {
    v2 = MoneyWin::i64Money;
    v3 = MoneyWin::i64Money;
    v4 = User::GetCopper(MoneyWin::i64Money);
    v5 = v3;
    v6 = User::GetSilver(v3);
    v7 = User::GetGold(v5);
    v8 = User::GetGem(v2);
    v1->m_apkInvWin[v1->m_uiCurInvIndex]->i64SellMoney = User::ConvertMoney(v4, v6, v7, v8);
  }
}

//----- (00578650) --------------------------------------------------------
void __thiscall PrivateStoreWin::ClearItems(PrivateStoreWin *this)
{
  ItemIcon **v1; // esi@1
  signed int v2; // edi@1

  v1 = (ItemIcon **)this->m_apkInvWin;
  v2 = 20;
  do
  {
    ItemIcon::SetItem(*v1, 0, 1);
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (00578680) --------------------------------------------------------
void __thiscall PrivateStoreWin::SetBoothSize(PrivateStoreWin *this, char bySize)
{
  PrivateStoreWin::ms_byBoothSize = bySize;
}
// A7CF04: using guessed type unsigned __int8 PrivateStoreWin__ms_byBoothSize;

//----- (00578690) --------------------------------------------------------
void __thiscall PrivateStoreWin::DirectMessage(PrivateStoreWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  PrivateStoreWin *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
    {
      GameFrameWork::NcBoothItemTradeReq(
        LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
        PrivateStoreWin::ms_BoothHandle,
        LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.y),
        LOWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_pkHead));
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_pkHead = 0;
    }
  }
}
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (005786E0) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnHelpLink(PrivateStoreWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "PrivateStore");
}

//----- (00578710) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::_PrivateStoreInvWin(PrivateStoreInvWin *this)
{
  PrivateStoreInvWin *v1; // esi@1
  Item *v2; // edi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrivateStoreInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrivateStoreInvWin::_vftable_;
  v2 = this->baseclass_0.m_spItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->baseclass_0.m_spItem.m_pObject = 0;
  }
  ItemIcon::_ItemIcon(&v1->baseclass_0);
}
// 9A75E8: using guessed type int (__stdcall *PrivateStoreInvWin___vftable_)(int uiFlags);
// 9A7604: using guessed type int (__thiscall *PrivateStoreInvWin___vftable_)(void *p, char);

//----- (005787A0) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::UpdateMeWin(PrivateStoreInvWin *this, float fCurTime)
{
  PrivateStoreInvWin *v2; // esi@1
  Item *v3; // ecx@3
  NiRefObjectVtbl *v4; // edi@6
  char *v5; // eax@6

  v2 = this;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode != 2 )
  {
    if ( PrivateStoreWin::ms_uiPrivateStoreMode != 3 )
    {
      v3 = this->baseclass_0.m_spItem.m_pObject;
      if ( v3 )
      {
        if ( (unsigned int)((int (*)(void))v3->baseclass_0.vfptr[4].__vecDelDtor)() <= 1 )
        {
          if ( v2->baseclass_0.m_pkLotText )
          {
            ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A7337);
            ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          }
        }
        else
        {
          if ( v2->baseclass_0.m_pkLotText )
          {
            v4 = v2->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            ((void (*)(void))v2->baseclass_0.m_spItem.m_pObject->baseclass_0.vfptr[3].__vecDelDtor)();
            v5 = fs("%d");
            v4[118].__vecDelDtor((NiRefObject *)v2->baseclass_0.m_pkLotText, (unsigned int)v5);
            ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          }
        }
      }
    }
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;

//----- (00578860) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnClose(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // esi@1
  unsigned int v2; // eax@2
  ItemIcon **v3; // edi@7
  signed int v4; // ebx@7
  void *v5; // ecx@9
  unsigned int v6; // eax@10
  InvWin *v7; // ecx@11
  ItemIcon **v8; // edi@18
  signed int v9; // ebx@18
  void *v10; // ecx@20
  unsigned int v11; // eax@21
  InvWin *v12; // ecx@22

  v1 = this;
  if ( g_pkMainChar )
  {
    v2 = PrivateStoreWin::ms_uiPrivateStoreMode;
    if ( (PrivateStoreWin::ms_uiPrivateStoreMode == 1 || PrivateStoreWin::ms_uiPrivateStoreMode == 3)
      && g_pkMainChar->m_byMode == 5 )
    {
      GameFrameWork::NcBoothCloseReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      v2 = PrivateStoreWin::ms_uiPrivateStoreMode;
    }
    InventoryWin::ms_uiMode = 0;
    if ( v2 == 1 )
    {
      v3 = (ItemIcon **)v1->m_apkInvWin;
      v4 = 20;
      do
      {
        if ( ItemIcon::GetItem(*v3) )
        {
          v5 = v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
          if ( v5 )
          {
            v6 = (unsigned int)(*v3)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pcName;
            if ( v6 < 0xC0 )
              v7 = (InvWin *)*((_DWORD *)v5 + v6 + 87);
            else
              v7 = 0;
            InvWin::SetLock(v7, 0);
          }
          ItemIcon::SetItem(*v3, 0, 1);
        }
        ++v3;
        --v4;
      }
      while ( v4 );
    }
    else
    {
      if ( v2 == 3 )
      {
        v8 = (ItemIcon **)v1->m_apkInvWin;
        v9 = 20;
        do
        {
          if ( ItemIcon::GetItem(*v8) )
          {
            v10 = v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
            if ( v10 )
            {
              v11 = (unsigned int)(*v8)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pcName;
              if ( v11 < 0xC0 )
                v12 = (InvWin *)*((_DWORD *)v10 + v11 + 87);
              else
                v12 = 0;
              InvWin::SetLock(v12, 0);
            }
            ItemIcon::SetItem(*v8, 0, 1);
          }
          ++v8;
          --v9;
        }
        while ( v9 );
      }
    }
    ((void (__stdcall *)(_DWORD))v1->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9A735B);
    ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A7372);
    ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A7373);
    ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A737A);
    ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A737B);
    ((void (__stdcall *)(_DWORD))v1->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    EditWin::SetEnable(v1->m_pkStoreNameInputEdit, 0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMoneyWin->baseclass_0.baseclass_0.baseclass_0);
    ((void (__stdcall *)(_DWORD))v1->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    PrivateStoreWin::ms_bPrivateStoreWin = 0;
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// A99162: using guessed type bool PrivateStoreWin__ms_bPrivateStoreWin;

//----- (00578A20) --------------------------------------------------------
void __thiscall PrivateStoreWin::UpdateMeWin(PrivateStoreWin *this, float fCurTime)
{
  unsigned int v2; // eax@1
  PrivateStoreWin *v3; // esi@1
  __int64 v4; // qax@3
  unsigned int v5; // edi@3
  unsigned int v6; // ebx@3
  ItemIcon **v7; // edi@3
  signed int v8; // ebx@3
  unsigned int v9; // eax@5
  ItemIcon *v10; // eax@6
  Item *v11; // eax@8
  __int64 v12; // qax@16
  __int64 v13; // qax@16
  __int64 v14; // qax@16
  __int64 v15; // qax@16
  ItemIcon **v16; // edi@16
  signed int v17; // ebx@16
  ItemIcon **v18; // edi@27
  signed int v19; // ebx@27
  Item *v20; // [sp+0h] [bp-9Ch]@9
  unsigned __int16 v21; // [sp+4h] [bp-98h]@21
  unsigned int pkItemNum; // [sp+14h] [bp-88h]@16
  unsigned int pkItemNuma; // [sp+14h] [bp-88h]@27
  char acStr[128]; // [sp+18h] [bp-84h]@3
  unsigned int v25; // [sp+98h] [bp-4h]@1
  int v26; // [sp+9Ch] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v2 = PrivateStoreWin::ms_uiPrivateStoreMode;
  v3 = this;
  if ( this->m_bPrivateStoreOpen && PrivateStoreWin::ms_uiPrivateStoreMode == 1 )
  {
    v4 = User::GetMoney(&g_kUser);
    v5 = v4 - LODWORD(v3->i64PrivateStoreStartMyMoney);
    v6 = (unsigned __int64)(v4 - v3->i64PrivateStoreStartMyMoney) >> 32;
    User::GetGem(v4 - v3->i64PrivateStoreStartMyMoney);
    sprintf(acStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v3->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    User::GetGold(__PAIR__(v6, v5));
    sprintf(acStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v3->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    User::GetSilver(__PAIR__(v6, v5));
    sprintf(acStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v3->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    User::GetCopper(__PAIR__(v6, v5));
    sprintf(acStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v3->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    v7 = (ItemIcon **)v3->m_apkInvWin;
    v8 = 20;
    do
    {
      if ( ItemIcon::GetItem(*v7) )
      {
        v9 = (unsigned int)(*v7)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pcName;
        if ( v9 < 0xC0 )
          v10 = (ItemIcon *)*((_DWORD *)v3->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v9 + 87);
        else
          v10 = 0;
        v11 = ItemIcon::GetItem(v10);
        if ( v11 )
          v20 = v11;
        else
          v20 = 0;
        ItemIcon::SetItem(*v7, v20, 1);
      }
      ++v7;
      --v8;
    }
    while ( v8 );
    goto LABEL_34;
  }
  if ( !PrivateStoreWin::ms_uiPrivateStoreMode )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime) )
    {
      v12 = User::GetMoney(&g_kUser);
      User::GetGem(v12);
      sprintf(acStr, "%I64d");
      ((void (__stdcall *)(_DWORD))v3->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      v13 = User::GetMoney(&g_kUser);
      User::GetGold(v13);
      sprintf(acStr, "%I64d");
      ((void (__stdcall *)(_DWORD))v3->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      v14 = User::GetMoney(&g_kUser);
      User::GetSilver(v14);
      sprintf(acStr, "%I64d");
      ((void (__stdcall *)(_DWORD))v3->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      v15 = User::GetMoney(&g_kUser);
      User::GetCopper(v15);
      sprintf(acStr, "%I64d");
      ((void (__stdcall *)(_DWORD))v3->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
      pkItemNum = 0;
      v16 = (ItemIcon **)v3->m_apkInvWin;
      v17 = 20;
      do
      {
        if ( ItemIcon::GetItem(*v16) )
          ++pkItemNum;
        ++v16;
        --v17;
      }
      while ( v17 );
      if ( pkItemNum > 0 )
      {
        v21 = PrivateStoreWin::ms_BoothHandle;
LABEL_33:
        GameFrameWork::NcBoothReflashReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v21);
        goto LABEL_34;
      }
      goto LABEL_34;
    }
    v2 = PrivateStoreWin::ms_uiPrivateStoreMode;
  }
  if ( (!v3->m_bPrivateStoreOpen || v2 != 3)
    && v2 == 2
    && CNSTimer_Interval::IsRun_GetCount(&v3->m_kTimerInterval, fCurTime) )
  {
    pkItemNuma = 0;
    v18 = (ItemIcon **)v3->m_apkInvWin;
    v19 = 20;
    do
    {
      if ( ItemIcon::GetItem(*v18) )
        ++pkItemNuma;
      ++v18;
      --v19;
    }
    while ( v19 );
    if ( pkItemNuma > 0 )
    {
      v21 = PrivateStoreWin::ms_BoothHandle;
      goto LABEL_33;
    }
  }
LABEL_34:
  if ( !(unsigned __int8)((int (*)(void))v3->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)()
    && (!PrivateStoreWin::ms_uiPrivateStoreMode
     && CNSTimer_Interval::IsRun_GetCount(&v3->m_kEnableReflashButTimer, fCurTime)
     || PrivateStoreWin::ms_uiPrivateStoreMode == 2
     && CNSTimer_Interval::IsRun_GetCount(&v3->m_kEnableReflashButTimer, fCurTime)) )
  {
    ((void (__stdcall *)(signed int))v3->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    CNSTimer_Interval::ReSet(&v3->m_kEnableReflashButTimer, Timer::ms_fCurTime);
    v3->m_kEnableReflashButTimer.m_fCheckTime = 1.0;
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (00578E00) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnSellMoneyCancel(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // esi@1
  unsigned int v2; // eax@2
  InvWin *v3; // ecx@3
  PrivateStoreInvWin *v4; // esi@5

  v1 = this;
  if ( ItemIcon::GetItem(&this->m_apkInvWin[this->m_uiCurInvIndex]->baseclass_0) )
  {
    v2 = v1->m_apkInvWin[v1->m_uiCurInvIndex]->m_uiSenderInvIndex;
    if ( v2 < 0xC0 )
      v3 = (InvWin *)*((_DWORD *)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v2 + 87);
    else
      v3 = 0;
    InvWin::SetLock(v3, 0);
    ItemIcon::SetItem(&v1->m_apkInvWin[v1->m_uiCurInvIndex]->baseclass_0, 0, 1);
    v4 = v1->m_apkInvWin[v1->m_uiCurInvIndex];
    LODWORD(v4->i64SellMoney) = 0;
    HIDWORD(v4->i64SellMoney) = 0;
  }
}

//----- (00578E90) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnBuyMoneyCancel(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // esi@1
  unsigned int v2; // eax@2
  InvWin *v3; // ecx@3
  PrivateStoreInvWin *v4; // esi@5

  v1 = this;
  if ( ItemIcon::GetItem(&this->m_apkInvWin[this->m_uiCurInvIndex]->baseclass_0) )
  {
    v2 = v1->m_apkInvWin[v1->m_uiCurInvIndex]->m_uiSenderInvIndex;
    if ( v2 < 0xC0 )
      v3 = (InvWin *)*((_DWORD *)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v2 + 87);
    else
      v3 = 0;
    InvWin::SetLock(v3, 0);
    ItemIcon::SetItem(&v1->m_apkInvWin[v1->m_uiCurInvIndex]->baseclass_0, 0, 1);
    v4 = v1->m_apkInvWin[v1->m_uiCurInvIndex];
    LODWORD(v4->i64SellMoney) = 0;
    HIDWORD(v4->i64SellMoney) = 0;
  }
}

//----- (00578F20) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::DoAction(PrivateStoreInvWin *this)
{
  PrivateStoreInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00578F50) --------------------------------------------------------
void __thiscall PrivateStoreInvWin::DoRAction(PrivateStoreInvWin *this)
{
  PrivateStoreInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00578F80) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnBuyItem(PrivateStoreWin *this, unsigned int uiLot)
{
  PrivateStoreWin *v2; // esi@1
  char *v3; // eax@1
  MsgBox *v4; // eax@1

  v2 = this;
  v3 = TextData::Get(0x83BEEDFCu);
  v4 = MsgBox::Modal(MSGBOX_OKCANCEL, v3);
  v2->m_uiLot = uiLot;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
}

//----- (00578FC0) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnCmdInvRClick(PrivateStoreWin *this, unsigned int uiInvIndex)
{
  PrivateStoreWin *v2; // esi@1
  unsigned int v3; // eax@4
  InvWin *v4; // ecx@5
  Item *v5; // ebx@5
  Item *v6; // edi@9
  GameFrameWork *v7; // ebx@11
  char *v8; // ST0C_4@11
  unsigned int v9; // eax@11
  PrivateStoreInvWin *v10; // esi@17
  bool v11; // [sp-4h] [bp-10h]@5

  v2 = this;
  this->m_uiCurInvIndex = uiInvIndex;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 1 )
  {
    if ( !this->m_bPrivateStoreOpen && ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0) )
    {
      v3 = v2->m_apkInvWin[uiInvIndex]->m_uiSenderInvIndex;
      if ( v3 < 0xC0 )
      {
        v4 = (InvWin *)*((_DWORD *)v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v3 + 87);
        v5 = 0;
        v11 = 0;
      }
      else
      {
        v4 = 0;
        v5 = 0;
        v11 = 0;
      }
      goto LABEL_17;
    }
  }
  else
  {
    v5 = 0;
    if ( PrivateStoreWin::ms_uiPrivateStoreMode )
    {
      if ( PrivateStoreWin::ms_uiPrivateStoreMode == 3
        && !this->m_bPrivateStoreOpen
        && ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0) )
      {
        v11 = 0;
        v4 = InventoryWin::GetInvWin(
               (InventoryWin *)v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID,
               v2->m_apkInvWin[uiInvIndex]->m_uiSenderInvIndex);
LABEL_17:
        InvWin::SetLock(v4, v11);
        ItemIcon::SetItem(&v2->m_apkInvWin[uiInvIndex]->baseclass_0, v5, 1);
        v10 = v2->m_apkInvWin[uiInvIndex];
        HIDWORD(v10->i64SellMoney) = v5;
        LODWORD(v10->i64SellMoney) = v5;
        return;
      }
    }
    else
    {
      if ( InventoryWin::ms_bBuyPrivateStoreActionReady )
      {
        v6 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
        if ( v6 )
        {
          if ( (unsigned int)((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[3].__vecDelDtor)(v6) <= 1 )
          {
            PrivateStoreWin::OnBuyItem(v2, 1u);
          }
          else
          {
            v7 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
            v8 = TextData::Get(0x37494293u);
            v9 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[3].__vecDelDtor)(v6);
            GameFrameWork::OnOpenDivideWin(v7, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, v9, v8, 0);
          }
        }
      }
    }
  }
}
// A7C518: using guessed type bool InventoryWin__ms_bBuyPrivateStoreActionReady;
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;

//----- (00579120) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnCmdInvLClick(PrivateStoreWin *this, unsigned int uiInvIndex)
{
  PgWin *v2; // esi@1
  PgFrameWork *v3; // edi@4
  char *v4; // ST10_4@4
  char *v5; // eax@4

  v2 = (PgWin *)this;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 1 || PrivateStoreWin::ms_uiPrivateStoreMode == 3 )
  {
    if ( !this->m_bPrivateStoreOpen )
    {
      v3 = this->baseclass_0.m_pkFrameWork;
      this->m_uiCurInvIndex = uiInvIndex;
      v4 = TextData::Get(0x3B609389u);
      v5 = TextData::Get(0x9B9A90D3u);
      GameFrameWork::OnOpenMoneyWin((GameFrameWork *)v3, v2, 0xFu, 0x10u, v5, v4);
    }
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;

//----- (00579180) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnCmdOk(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // edi@1
  ItemIcon **v2; // esi@5
  signed int v3; // ebx@5
  char *v4; // eax@10
  char *v5; // eax@12
  char *v6; // eax@13
  GameFrameWork *v7; // ecx@15
  ItemIcon **v8; // ebx@19
  ItemIcon *v9; // esi@20
  char *v10; // eax@26
  char *v11; // eax@27
  unsigned int v12; // [sp+4h] [bp-20h]@11
  __int64 nTotalNeedMoney; // [sp+14h] [bp-10h]@19
  signed int v14; // [sp+1Ch] [bp-8h]@19
  char bItemOk; // [sp+23h] [bp-1h]@5
  char bItemOka; // [sp+23h] [bp-1h]@19

  v1 = this;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 1 )
  {
    if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
      return;
    if ( v1->m_bPrivateStoreOpen )
      goto LABEL_4;
    bItemOk = 0;
    v2 = (ItemIcon **)v1->m_apkInvWin;
    v3 = 20;
    do
    {
      if ( ItemIcon::GetItem(*v2) )
        bItemOk = 1;
      ++v2;
      --v3;
    }
    while ( v3 );
    if ( bItemOk )
    {
      v4 = (char *)((int (*)(void))v1->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      if ( TextFilterTable::IsBadName(v4) )
      {
LABEL_11:
        v12 = 849182339;
LABEL_12:
        v5 = TextData::Get(v12);
        MsgBox::Modeless(MSGBOX_OK, v5);
        return;
      }
      *(_DWORD *)&v1->signboard.signboard[0] = 0;
      *(_DWORD *)&v1->signboard.signboard[4] = 0;
      *(_DWORD *)&v1->signboard.signboard[8] = 0;
      *(_DWORD *)&v1->signboard.signboard[12] = 0;
      *(_DWORD *)&v1->signboard.signboard[16] = 0;
      *(_DWORD *)&v1->signboard.signboard[20] = 0;
      *(_DWORD *)&v1->signboard.signboard[24] = 0;
      *(_WORD *)&v1->signboard.signboard[28] = 0;
      v6 = (char *)((int (*)(void))v1->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      memcpy(v1->signboard.signboard, v6, strlen(v6));
      GameFrameWork::NcBoothOpenReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 1);
    }
  }
  else
  {
    if ( PrivateStoreWin::ms_uiPrivateStoreMode )
    {
      if ( PrivateStoreWin::ms_uiPrivateStoreMode == 3 )
      {
        if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)() )
        {
          if ( v1->m_bPrivateStoreOpen )
          {
LABEL_4:
            GameFrameWork::NcBoothInterioStartReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
            return;
          }
          bItemOka = 0;
          nTotalNeedMoney = 0i64;
          v8 = (ItemIcon **)v1->m_apkInvWin;
          v14 = 20;
          do
          {
            v9 = *v8;
            if ( ItemIcon::GetItem(*v8) )
            {
              bItemOka = 1;
              nTotalNeedMoney += LOWORD(v9[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiMaxSize)
                               * *(_QWORD *)&v9[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_ppkExtra;
            }
            ++v8;
            --v14;
          }
          while ( v14 );
          if ( nTotalNeedMoney > User::GetMoney(&g_kUser) )
          {
            v12 = 810500413;
            goto LABEL_12;
          }
          if ( bItemOka )
          {
            v10 = (char *)((int (*)(void))v1->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
            if ( TextFilterTable::IsBadName(v10) )
              goto LABEL_11;
            *(_DWORD *)&v1->signboard.signboard[0] = 0;
            *(_DWORD *)&v1->signboard.signboard[4] = 0;
            *(_DWORD *)&v1->signboard.signboard[8] = 0;
            *(_DWORD *)&v1->signboard.signboard[12] = 0;
            *(_DWORD *)&v1->signboard.signboard[16] = 0;
            *(_DWORD *)&v1->signboard.signboard[20] = 0;
            *(_DWORD *)&v1->signboard.signboard[24] = 0;
            *(_WORD *)&v1->signboard.signboard[28] = 0;
            v11 = (char *)((int (*)(void))v1->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
            if ( v11 )
              memcpy(v1->signboard.signboard, v11, strlen(v11));
            GameFrameWork::NcBoothOpenReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 0);
          }
        }
      }
      else
      {
        if ( PrivateStoreWin::ms_uiPrivateStoreMode == 2 )
        {
          ((void (__stdcall *)(_DWORD))this->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          CNSTimer_Interval::ReSet(&v1->m_kEnableReflashButTimer, Timer::ms_fCurTime);
          v1->m_kEnableReflashButTimer.m_fCheckTime = 1.0;
          GameFrameWork::NcBoothReflashReq(
            (GameFrameWork *)v1->baseclass_0.m_pkFrameWork,
            PrivateStoreWin::ms_BoothHandle);
        }
      }
    }
    else
    {
      ((void (__stdcall *)(_DWORD))this->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      CNSTimer_Interval::ReSet(&v1->m_kEnableReflashButTimer, Timer::ms_fCurTime);
      v7 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
      v1->m_kEnableReflashButTimer.m_fCheckTime = 1.0;
      GameFrameWork::NcBoothReflashReq(v7, PrivateStoreWin::ms_BoothHandle);
    }
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A99160: using guessed type unsigned __int16 PrivateStoreWin__ms_BoothHandle;

//----- (00579470) --------------------------------------------------------
void __thiscall PrivateStoreWin::SetPrivateStoreOpen(PrivateStoreWin *this, bool bRes)
{
  PrivateStoreWin *v2; // esi@1
  bool v3; // bl@2
  NiRefObjectVtbl *v4; // edi@7
  char *v5; // eax@7
  ItemIcon **v6; // edi@10
  signed int v7; // ebx@10
  unsigned int v8; // eax@12
  InvWin *v9; // eax@13
  NiRefObjectVtbl *v10; // edi@23
  char *v11; // eax@23
  ItemIcon **v12; // edi@26
  signed int v13; // ebx@26
  unsigned int v14; // eax@28
  InvWin *v15; // eax@29
  NiRefObjectVtbl *v16; // edi@33
  char *v17; // eax@33
  void *pInvenWin; // [sp+Ch] [bp-4h]@10
  void *pInvenWina; // [sp+Ch] [bp-4h]@26

  v2 = this;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 1 )
  {
    v3 = bRes;
    if ( bRes )
    {
      this->i64PrivateStoreStartMyMoney = User::GetMoney(&g_kUser);
      InventoryWin::ms_uiMode = 0;
      EditWin::SetEnable(v2->m_pkStoreNameInputEdit, 0);
      ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
      ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
      ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
      ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
      InventoryWin::LockAllItem((InventoryWin *)v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID);
    }
    else
    {
      InventoryWin::UnLockAllItem((InventoryWin *)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID);
    }
    ((void (__stdcall *)(_DWORD))v2->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    if ( !v2->m_bPrivateStoreOpen && bRes == 1 )
    {
      v4 = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = TextData2::Get(0xEEC4C250u);
      v4[118].__vecDelDtor((NiRefObject *)v2->m_pkOkTextWin, (unsigned int)v5);
    }
    ((void (__stdcall *)(_DWORD))v2->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    if ( v2->m_bPrivateStoreOpen != 1 || bRes )
      goto LABEL_34;
    pInvenWin = v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
    v6 = (ItemIcon **)v2->m_apkInvWin;
    v7 = 20;
    do
    {
      if ( ItemIcon::GetItem(*v6) )
      {
        v8 = (unsigned int)(*v6)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pcName;
        if ( v8 < 0xC0 )
          v9 = (InvWin *)*((_DWORD *)pInvenWin + v8 + 87);
        else
          v9 = 0;
        InvWin::SetLock(v9, 1);
      }
      ++v6;
      --v7;
    }
    while ( v7 );
    goto LABEL_33;
  }
  if ( PrivateStoreWin::ms_uiPrivateStoreMode != 3 )
    return;
  v3 = bRes;
  if ( bRes )
  {
    this->i64PrivateStoreStartMyMoney = User::GetMoney(&g_kUser);
    InventoryWin::ms_uiMode = 0;
    EditWin::SetEnable(v2->m_pkStoreNameInputEdit, 0);
    ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
    ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
    ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
    ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  }
  InventoryWin::UnLockAllItem((InventoryWin *)v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID);
  ((void (__stdcall *)(_DWORD))v2->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  if ( !v2->m_bPrivateStoreOpen && bRes == 1 )
  {
    v10 = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v11 = TextData2::Get(0xEEC4C250u);
    v10[118].__vecDelDtor((NiRefObject *)v2->m_pkOkTextWin, (unsigned int)v11);
  }
  ((void (__stdcall *)(_DWORD))v2->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  if ( v2->m_bPrivateStoreOpen == 1 && !bRes )
  {
    pInvenWina = v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
    v12 = (ItemIcon **)v2->m_apkInvWin;
    v13 = 20;
    do
    {
      if ( ItemIcon::GetItem(*v12) )
      {
        v14 = (unsigned int)(*v12)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pcName;
        if ( v14 < 0xC0 )
          v15 = (InvWin *)*((_DWORD *)pInvenWina + v14 + 87);
        else
          v15 = 0;
        InvWin::SetLock(v15, 1);
      }
      ++v12;
      --v13;
    }
    while ( v13 );
LABEL_33:
    EditWin::SetEnable(v2->m_pkStoreNameInputEdit, 1);
    v16 = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = TextData2::Get(0x31240238u);
    v16[118].__vecDelDtor((NiRefObject *)v2->m_pkOkTextWin, (unsigned int)v17);
    ((void (__stdcall *)(_DWORD))v2->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v3 = bRes;
  }
LABEL_34:
  v2->m_bPrivateStoreOpen = v3;
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (005797F0) --------------------------------------------------------
bool __thiscall PrivateStoreWin::DropOnMyInv(PrivateStoreWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  PrivateStoreWin *v3; // esi@1
  DropContents *v4; // ebx@2
  unsigned int v6; // edi@9
  unsigned int v7; // edi@12
  InvWin *v8; // eax@13
  void *v9; // ebx@15
  int v10; // edi@16
  SHINE_PUT_ON_BELONGED_ITEM v11; // eax@19
  SHINE_PUT_ON_BELONGED_ITEM v12; // eax@22
  SHINE_PUT_ON_BELONGED_ITEM v13; // eax@23
  int v14; // eax@26
  int v15; // eax@27
  Item *v16; // eax@30
  unsigned int v17; // eax@31
  InvWin *v18; // eax@31
  GameFrameWork *v19; // edi@31
  char *v20; // ST10_4@31
  char *v21; // eax@31
  void *v22; // ebx@33
  int v23; // edi@34
  SHINE_PUT_ON_BELONGED_ITEM v24; // eax@37
  SHINE_PUT_ON_BELONGED_ITEM v25; // eax@40
  SHINE_PUT_ON_BELONGED_ITEM v26; // eax@41
  int v27; // eax@44
  int v28; // eax@45
  GameFrameWork *v29; // esi@48
  char *v30; // eax@48
  InvWin *v31; // eax@49
  Item *v32; // eax@49
  Item *v33; // edi@49
  GameFrameWork *v34; // ebx@50
  char *v35; // ST0C_4@50
  unsigned int v36; // eax@50
  unsigned int v37; // [sp-8h] [bp-18h]@11
  int dwValue; // [sp+8h] [bp-8h]@10
  unsigned int uiSenderInvIndex; // [sp+Ch] [bp-4h]@9

  v3 = this;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 3 )
  {
    v4 = pkContents;
    if ( !*(_DWORD *)(*((_DWORD *)pkContents->m_apvParam[0] + 28) + 98) )
      return 0;
  }
  else
  {
    if ( !PrivateStoreWin::ms_uiPrivateStoreMode || PrivateStoreWin::ms_uiPrivateStoreMode == 2 )
      return 0;
    v4 = pkContents;
  }
  if ( this->m_bPrivateStoreOpen || v4->m_eSenderType )
    return 0;
  v6 = v4->m_uiSenderIndex;
  uiSenderInvIndex = v6;
  if ( v6 >= 0x30 )
  {
    ChargedItemList::GetTotalEffectingValue(EE_MOREINVENTORY, (unsigned int *)&dwValue);
    if ( dwValue + 2 <= v6 / 0x18 )
    {
      v37 = 1704690796;
LABEL_48:
      v29 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v30 = TextData::Get(v37);
      GameFrameWork::AddSysMsg(v29, v30);
      return 0;
    }
  }
  ((void (__stdcall *)(signed int))v3->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  v7 = uiReceiverInvIndex;
  if ( ItemIcon::GetItem(&v3->m_apkInvWin[uiReceiverInvIndex]->baseclass_0) )
  {
    v8 = InventoryWin::GetInvWin(
           (InventoryWin *)v3->baseclass_0.m_pkFrameWork[19].m_BackFrameID,
           v3->m_apkInvWin[uiReceiverInvIndex]->m_uiSenderInvIndex);
    InvWin::SetLock(v8, 0);
  }
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 1 )
  {
    v9 = v4->m_apvParam[0];
    if ( !v9 )
      goto LABEL_30;
    v10 = *((_DWORD *)v9 + 28);
    if ( v10 )
    {
      if ( CItemAuthorityBase::IA_IsDataAccBelonged(&g_kItemAuthority, *(E_BelongType *)(v10 + 274))
        || CItemAuthorityBase::IA_IsDataChrBelonged(&g_kItemAuthority, *(E_BelongType *)(v10 + 274)) )
      {
        if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, *(E_BelongType *)(v10 + 274)) != 1
          || (v12 = Item::GetPutOnBelongState((Item *)v9),
              CItemAuthorityBase::IA_IsWorkAccBelonged(&g_kItemAuthority, *(E_BelongType *)(v10 + 274), v12))
          || (v13 = Item::GetPutOnBelongState((Item *)v9),
              CItemAuthorityBase::IA_IsWorkChrBelonged(&g_kItemAuthority, *(E_BelongType *)(v10 + 274), v13)) )
          goto LABEL_20;
      }
      else
      {
        v11 = Item::GetPutOnBelongState((Item *)v9);
        if ( !CItemAuthorityBase::IA_CanPlayerTrade(&g_kItemAuthority, *(E_BelongType *)(v10 + 274), v11) )
          goto LABEL_20;
      }
      if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, *(E_BelongType *)(v10 + 274))
        && Item::GetPutOnBelongState((Item *)v9) == 1 )
        goto LABEL_20;
    }
    v14 = (*(int (__thiscall **)(void *))(*(_DWORD *)v9 + 44))(v9);
    if ( !v14 || (v15 = *(_DWORD *)v14 & 0xFF) == 0 || v15 == 255 )
    {
      v7 = uiReceiverInvIndex;
LABEL_30:
      v16 = Item::Create((SHINE_ITEM_STRUCT *)((char *)pkContents->m_apvParam[0] + 8));
      if ( v16 )
      {
        ItemIcon::SetItem(&v3->m_apkInvWin[v7]->baseclass_0, v16, 1);
        v17 = uiSenderInvIndex;
        v3->m_apkInvWin[v7]->m_uiSenderInvIndex = uiSenderInvIndex;
        v18 = InventoryWin::GetInvWin((InventoryWin *)v3->baseclass_0.m_pkFrameWork[19].m_BackFrameID, v17);
        InvWin::SetLock(v18, 1);
        v3->m_uiCurInvIndex = v7;
        v19 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
        v20 = TextData::Get(0x3B609389u);
        v21 = TextData::Get(0x9B9A90D3u);
        GameFrameWork::OnOpenMoneyWin(v19, &v3->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0x10u, v21, v20);
        return 1;
      }
      return 1;
    }
LABEL_47:
    v37 = -1634432127;
    goto LABEL_48;
  }
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 3 )
  {
    v22 = v4->m_apvParam[0];
    if ( v22 )
    {
      v23 = *((_DWORD *)v22 + 28);
      if ( v23 )
      {
        if ( CItemAuthorityBase::IA_IsDataAccBelonged(&g_kItemAuthority, *(E_BelongType *)(v23 + 274))
          || CItemAuthorityBase::IA_IsDataChrBelonged(&g_kItemAuthority, *(E_BelongType *)(v23 + 274)) )
        {
          if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, *(E_BelongType *)(v23 + 274)) != 1
            || (v25 = Item::GetPutOnBelongState((Item *)v22),
                CItemAuthorityBase::IA_IsWorkAccBelonged(&g_kItemAuthority, *(E_BelongType *)(v23 + 274), v25))
            || (v26 = Item::GetPutOnBelongState((Item *)v22),
                CItemAuthorityBase::IA_IsWorkChrBelonged(&g_kItemAuthority, *(E_BelongType *)(v23 + 274), v26)) )
            goto LABEL_20;
        }
        else
        {
          v24 = Item::GetPutOnBelongState((Item *)v22);
          if ( !CItemAuthorityBase::IA_CanPlayerTrade(&g_kItemAuthority, *(E_BelongType *)(v23 + 274), v24) )
          {
            v37 = -2086507545;
            goto LABEL_48;
          }
        }
        if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, *(E_BelongType *)(v23 + 274))
          && Item::GetPutOnBelongState((Item *)v22) == 1 )
        {
LABEL_20:
          v37 = -857857511;
          goto LABEL_48;
        }
      }
      v27 = (*(int (__thiscall **)(void *))(*(_DWORD *)v22 + 44))(v22);
      if ( v27 )
      {
        v28 = *(_DWORD *)v27 & 0xFF;
        if ( v28 )
        {
          if ( v28 != 255 )
            goto LABEL_47;
        }
      }
    }
    v31 = InventoryWin::GetInvWin((InventoryWin *)v3->baseclass_0.m_pkFrameWork[19].m_BackFrameID, uiSenderInvIndex);
    InvWin::SetLock(v31, 1);
    v32 = Item::Create((SHINE_ITEM_STRUCT *)((char *)pkContents->m_apvParam[0] + 8));
    v33 = v32;
    if ( v32 )
    {
      ItemIcon::SetItem(&v3->m_apkInvWin[uiReceiverInvIndex]->baseclass_0, v32, 1);
      v3->m_apkInvWin[uiReceiverInvIndex]->m_uiSenderInvIndex = uiSenderInvIndex;
      v3->m_uiCurInvIndex = uiReceiverInvIndex;
      v34 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v35 = TextData::Get(0x37494293u);
      v36 = ((int (__thiscall *)(Item *))v33->baseclass_0.vfptr[4].__vecDelDtor)(v33);
      GameFrameWork::OnOpenDivideWin(v34, &v3->baseclass_0.baseclass_0.baseclass_0, 5u, v36, v35, 0);
    }
  }
  return 1;
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;

//----- (00579C30) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnBuyMoneyOK(PrivateStoreWin *this)
{
  PrivateStoreWin *v1; // esi@1
  unsigned int v2; // ebx@2
  unsigned int v3; // edi@2
  char *v4; // eax@3
  unsigned int v5; // eax@3
  InvWin *v6; // eax@4
  PrivateStoreInvWin *v7; // esi@6
  int v8; // ST50_4@7
  int v9; // ST54_4@7
  int v10; // ST58_4@7
  int v11; // eax@7

  v1 = this;
  if ( ItemIcon::GetItem(&this->m_apkInvWin[this->m_uiCurInvIndex]->baseclass_0) )
  {
    v2 = HIDWORD(MoneyWin::i64Money);
    v3 = MoneyWin::i64Money;
    if ( v1->m_apkInvWin[v1->m_uiCurInvIndex]->m_BuySloatItemCount * MoneyWin::i64Money <= User::GetMoney(&g_kUser) )
    {
      v8 = User::GetCopper(__PAIR__(v2, v3));
      v9 = User::GetSilver(__PAIR__(v2, v3));
      v10 = User::GetGold(__PAIR__(v2, v3));
      v11 = User::GetGem(__PAIR__(v2, v3));
      v1->m_apkInvWin[v1->m_uiCurInvIndex]->i64SellMoney = User::ConvertMoney(v8, v9, v10, v11);
    }
    else
    {
      v4 = TextData::Get(0x304F413Du);
      MsgBox::Modeless(MSGBOX_OK, v4);
      v5 = v1->m_apkInvWin[v1->m_uiCurInvIndex]->m_uiSenderInvIndex;
      if ( v5 < 0xC0 )
        v6 = (InvWin *)*((_DWORD *)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v5 + 87);
      else
        v6 = 0;
      InvWin::SetLock(v6, 0);
      ItemIcon::SetItem(&v1->m_apkInvWin[v1->m_uiCurInvIndex]->baseclass_0, 0, 1);
      v7 = v1->m_apkInvWin[v1->m_uiCurInvIndex];
      LODWORD(v7->i64SellMoney) = 0;
      HIDWORD(v7->i64SellMoney) = 0;
    }
  }
}

//----- (00579DA0) --------------------------------------------------------
void __thiscall PrivateStoreWin::SetPrivateStoreMode(PrivateStoreWin *this, unsigned int uiMode)
{
  PrivateStoreWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  NiRefObjectVtbl *v5; // edi@2
  char *v6; // eax@2
  NiRefObjectVtbl *v7; // edi@2
  char *v8; // eax@2
  NiRefObjectVtbl *v9; // edi@2
  char *v10; // eax@2
  signed int v11; // edi@2
  IconWin **v12; // esi@2
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@3
  NiRefObjectVtbl *v14; // edi@9
  char *v15; // eax@9
  NiRefObjectVtbl *v16; // edi@9
  char *v17; // eax@9
  NiRefObjectVtbl *v18; // edi@9
  char *v19; // eax@9
  NiRefObjectVtbl *v20; // edi@9
  char *v21; // eax@9
  IconWin **v22; // esi@9
  signed int v23; // edi@9
  NiRefObjectVtbl *v24; // edi@13
  char *v25; // eax@13
  NiRefObjectVtbl *v26; // edi@13
  char *v27; // eax@13
  NiRefObjectVtbl *v28; // edi@13
  char *v29; // eax@13
  signed int v30; // edi@13
  IconWin **v31; // esi@13
  void *(__thiscall *v32)(NiRefObject *, unsigned int); // eax@14
  NiRefObjectVtbl *v33; // edi@20
  char *v34; // eax@20
  NiRefObjectVtbl *v35; // edi@20
  char *v36; // eax@20
  NiRefObjectVtbl *v37; // edi@20
  char *v38; // eax@20
  IconWin **v39; // esi@20
  signed int v40; // edi@20
  bool v41; // [sp-4h] [bp-10h]@4
  bool v42; // [sp-4h] [bp-10h]@15

  v2 = this;
  PrivateStoreWin::ms_uiPrivateStoreMode = uiMode;
  if ( uiMode == 1 )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
    v3 = v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = TextData::Get(0xF5D4F4D7u);
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkTitleText, (unsigned int)v4);
    EditWin::SetEnable(v2->m_pkStoreNameInputEdit, 1);
    v5 = v2->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = TextData2::Get(0x65A68581u);
    v5[116].__vecDelDtor((NiRefObject *)v2->m_pkStoreNameInputEdit, (unsigned int)v6);
    ((void (__stdcall *)(_DWORD))v2->m_pkText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v7 = v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = TextData::Get(0x4D427C91u);
    v7[118].__vecDelDtor((NiRefObject *)v2->m_pkMoneyText, (unsigned int)v8);
    ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v9 = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v10 = TextData::Get(0x385F4540u);
    v9[118].__vecDelDtor((NiRefObject *)v2->m_pkOkTextWin, (unsigned int)v10);
    v11 = 0;
    v12 = (IconWin **)v2->m_apkInvWin;
    do
    {
      v13 = v12[20]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
      if ( v11 >= PrivateStoreWin::ms_byBoothSize )
      {
        ((void (__stdcall *)(_DWORD))v13)(0);
        (*v12)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
        v41 = 0;
      }
      else
      {
        ((void (__stdcall *)(_DWORD))v13)(1);
        (*v12)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
        v41 = 1;
      }
      IconWin::ShowFocus(*v12, v41);
      ++v11;
      ++v12;
    }
    while ( v11 < 20 );
  }
  else
  {
    if ( uiMode )
    {
      if ( uiMode == 3 )
      {
        ((void (__stdcall *)(_DWORD))this->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
        v24 = v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v25 = TextData::Get(0xA9E104C6u);
        v24[118].__vecDelDtor((NiRefObject *)v2->m_pkTitleText, (unsigned int)v25);
        EditWin::SetEnable(v2->m_pkStoreNameInputEdit, 1);
        v26 = v2->m_pkStoreNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v27 = TextData2::Get(0xAAE2DED2u);
        v26[116].__vecDelDtor((NiRefObject *)v2->m_pkStoreNameInputEdit, (unsigned int)v27);
        ((void (__stdcall *)(_DWORD))v2->m_pkText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A7385);
        ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v28 = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v29 = TextData::Get(0x385F4540u);
        v28[118].__vecDelDtor((NiRefObject *)v2->m_pkOkTextWin, (unsigned int)v29);
        v30 = 0;
        v31 = (IconWin **)v2->m_apkInvWin;
        do
        {
          v32 = v31[20]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
          if ( v30 >= PrivateStoreWin::ms_byBoothSize )
          {
            ((void (__stdcall *)(_DWORD))v32)(0);
            (*v31)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
            v42 = 0;
          }
          else
          {
            ((void (__stdcall *)(_DWORD))v32)(1);
            (*v31)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
            v42 = 1;
          }
          IconWin::ShowFocus(*v31, v42);
          ++v30;
          ++v31;
        }
        while ( v30 < 20 );
      }
      else
      {
        if ( uiMode == 2 )
        {
          ((void (__stdcall *)(_DWORD))this->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
          v33 = v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v34 = TextData::Get(0xA9E104C6u);
          v33[118].__vecDelDtor((NiRefObject *)v2->m_pkTitleText, (unsigned int)v34);
          EditWin::SetEnable(v2->m_pkStoreNameInputEdit, 0);
          ((void (__stdcall *)(_DWORD))v2->m_pkText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          v35 = v2->m_pkText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v36 = TextData::Get(0xEEF50750u);
          v35[118].__vecDelDtor((NiRefObject *)v2->m_pkText2, (unsigned int)v36);
          ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A7386);
          ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          v37 = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v38 = TextData::Get(0xDC41502Du);
          v37[118].__vecDelDtor((NiRefObject *)v2->m_pkOkTextWin, (unsigned int)v38);
          v39 = (IconWin **)v2->m_apkInvWin;
          v40 = 20;
          do
          {
            ((void (__stdcall *)(_DWORD))v39[20]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            (*v39)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
            IconWin::ShowFocus(*v39, 1);
            ++v39;
            --v40;
          }
          while ( v40 );
        }
      }
    }
    else
    {
      ((void (__stdcall *)(_DWORD))this->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
      v14 = v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v15 = TextData::Get(0xF5D4F4D7u);
      v14[118].__vecDelDtor((NiRefObject *)v2->m_pkTitleText, (unsigned int)v15);
      EditWin::SetEnable(v2->m_pkStoreNameInputEdit, 0);
      v16 = v2->m_pkText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v17 = TextData::Get(0xE3F7DDDBu);
      v16[118].__vecDelDtor((NiRefObject *)v2->m_pkText2, (unsigned int)v17);
      ((void (__stdcall *)(_DWORD))v2->m_pkText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v18 = v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v19 = TextData::Get(0x3C969088u);
      v18[118].__vecDelDtor((NiRefObject *)v2->m_pkMoneyText, (unsigned int)v19);
      ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v20 = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v21 = TextData::Get(0xDC41502Du);
      v20[118].__vecDelDtor((NiRefObject *)v2->m_pkOkTextWin, (unsigned int)v21);
      v22 = (IconWin **)v2->m_apkInvWin;
      v23 = 20;
      do
      {
        ((void (__stdcall *)(_DWORD))v22[20]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        (*v22)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
        IconWin::ShowFocus(*v22, 1);
        ++v22;
        --v23;
      }
      while ( v23 );
    }
  }
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;
// A7CF04: using guessed type unsigned __int8 PrivateStoreWin__ms_byBoothSize;

//----- (0057A240) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnInputBuyItemCount(PrivateStoreWin *this, unsigned int uiBuyLot)
{
  PrivateStoreWin *v2; // esi@1
  unsigned int v3; // ecx@2
  unsigned int v4; // eax@3
  InvWin *v5; // ecx@4
  PrivateStoreInvWin *v6; // edi@7
  PgWinText *v7; // edx@7
  NiRefObjectVtbl *v8; // ebx@7
  char *v9; // eax@7
  GameFrameWork *v10; // edi@7
  char *v11; // ST10_4@7
  char *v12; // eax@7

  v2 = this;
  if ( ItemIcon::GetItem(&this->m_apkInvWin[this->m_uiCurInvIndex]->baseclass_0) )
  {
    v3 = v2->m_uiCurInvIndex;
    if ( uiBuyLot )
    {
      v6 = v2->m_apkInvWin[v3];
      v7 = v6->baseclass_0.m_pkLotText;
      v6->m_BuySloatItemCount = uiBuyLot;
      v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v9 = fs("%d");
      v8[118].__vecDelDtor((NiRefObject *)v6->baseclass_0.m_pkLotText, (unsigned int)v9);
      v10 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
      v11 = TextData::Get(0x90A2F2E2u);
      v12 = TextData::Get(0x8CAB9C90u);
      GameFrameWork::OnOpenMoneyWin(v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, 0x12u, v12, v11);
    }
    else
    {
      v4 = v2->m_apkInvWin[v3]->m_uiSenderInvIndex;
      if ( v4 < 0xC0 )
        v5 = (InvWin *)*((_DWORD *)v2->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v4 + 87);
      else
        v5 = 0;
      InvWin::SetLock(v5, 0);
      ItemIcon::SetItem(&v2->m_apkInvWin[v2->m_uiCurInvIndex]->baseclass_0, 0, 1);
    }
  }
}

//----- (0057A330) --------------------------------------------------------
bool __thiscall PrivateStoreInvWin::EatDropInstance(PrivateStoreInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PrivateStoreInvWin *v4; // esi@1
  void *v6; // edi@3
  int v7; // ecx@4
  char *v8; // eax@6
  int v9; // esi@7
  char *v10; // edi@7
  int v11; // eax@13
  PgWin *v12; // eax@16

  v4 = this;
  if ( !*pkDrop )
    return 0;
  v6 = (*pkDrop)->m_pkContents;
  if ( PrivateStoreWin::ms_uiPrivateStoreMode == 3
    && ((v7 = *((_DWORD *)v6 + 5)) == 0 || (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v7 + 4))() == 24)
    || *((_DWORD *)v6 + 4) )
    goto LABEL_21;
  v11 = *((_DWORD *)v6 + 2);
  if ( v11 == 21 )
  {
    v8 = TextData2::Get(0x95F0EBD5u);
    goto LABEL_7;
  }
  if ( v11 )
    goto LABEL_21;
  v12 = PgWin::GetParentWin(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v4->m_uiInvType )
    return 0;
  if ( !PrivateStoreWin::DropOnMyInv((PrivateStoreWin *)v12, (DropContents *)v6, v4->m_uiInvIndex) )
  {
LABEL_21:
    v8 = TextData::Get(0x83A26BE7u);
LABEL_7:
    v9 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v10 = v8;
    if ( *(_DWORD *)(v9 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 4))(25, v8, v9);
      if ( *(_DWORD *)(v9 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 20))(25, v10, v9);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
    return 0;
  }
  return 1;
}
// A7CF00: using guessed type unsigned int PrivateStoreWin__ms_uiPrivateStoreMode;

//----- (0057A410) --------------------------------------------------------
void __thiscall PrivateStoreWin::OnCommand(PrivateStoreWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xCu:
      PrivateStoreWin::OnCmdOk(this);
      break;
    case 0xDu:
    case 0xEu:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xAu:
      PrivateStoreWin::OnCmdInvLClick(this, lParam);
      break;
    case 0xBu:
      PrivateStoreWin::OnCmdInvRClick(this, lParam);
      break;
    case 0xFu:
      PrivateStoreWin::OnSellMoneyOK(this);
      break;
    case 0x10u:
      PrivateStoreWin::OnSellMoneyCancel(this);
      break;
    case 4u:
      if ( lParam )
        PrivateStoreWin::OnBuyItem(this, lParam);
      break;
    case 5u:
      PrivateStoreWin::OnInputBuyItemCount(this, lParam);
      break;
    case 0x11u:
      PrivateStoreWin::OnBuyMoneyOK(this);
      break;
    case 0x12u:
      PrivateStoreWin::OnBuyMoneyCancel(this);
      break;
    case 0x13u:
      PrivateStoreWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (0057A4F0) --------------------------------------------------------
PrivateStoreInvWin *__cdecl PrivateStoreInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  PrivateStoreInvWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1E0u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    PrivateStoreInvWin::PrivateStoreInvWin((PrivateStoreInvWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *))(*(_DWORD *)v6 + 616))(
                          v6,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (PrivateStoreInvWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (0057A630) --------------------------------------------------------
PrivateStoreWin *__cdecl PrivateStoreWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  PrivateStoreWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x2A8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    PrivateStoreWin::PrivateStoreWin((PrivateStoreWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (PrivateStoreWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0057A760) --------------------------------------------------------
bool __thiscall PrivateStoreWin::Create(PrivateStoreWin *this, PgFrameWork *pkFrameWork)
{
  PrivateStoreWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // ebx@11
  NiSourceTexture *v9; // eax@11
  PgSprData *v10; // eax@14
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@16
  PgWinSpr *v13; // eax@16
  PgFont *v14; // eax@17
  PgWinText *v15; // eax@17
  char *v16; // eax@17
  PgFont *v17; // eax@18
  char *v18; // eax@18
  PgSprData *v19; // eax@21
  EditWin *v20; // eax@21
  PgSprData *v21; // eax@22
  PgWinSpr *v22; // eax@22
  char *v23; // eax@22
  ItemIcon *v24; // eax@22
  PgSprData *v25; // ecx@22
  bool v26; // zf@22
  bool v27; // sf@22
  unsigned __int8 v28; // of@22
  PgSprData *v29; // ecx@22
  IconWin **v30; // eax@23
  PgFont *v31; // eax@26
  PgWinText *v32; // eax@26
  char *v33; // eax@26
  PgFont *v34; // eax@27
  PgWinText *v35; // eax@27
  char *v36; // eax@27
  PgFont *v37; // eax@28
  PgWinText *v38; // eax@28
  char *v39; // eax@28
  NiPointer<PgSprData::PgHitTester> *v40; // ecx@28
  NiTexturePalette *v41; // eax@28
  PgFont *v42; // eax@28
  PgWinText *v43; // eax@28
  char *v44; // eax@28
  NiPointer<PgSprData::PgHitTester> *v45; // ecx@28
  NiTexturePalette *v46; // eax@28
  PgFont *v47; // eax@28
  PgWinText *v48; // ebx@28
  char *v49; // eax@28
  D3DXCOLOR v50; // ST58_16@28
  D3DXCOLOR v51; // ST58_16@28
  D3DXCOLOR v52; // ST58_16@28
  D3DXCOLOR v53; // ST58_16@28
  const char *v54; // [sp+64h] [bp-8Ch]@12
  int *v55; // [sp+68h] [bp-88h]@12
  int *v56; // [sp+6Ch] [bp-84h]@12
  NiSourceTexture *v57; // [sp+70h] [bp-80h]@12
  unsigned int v58; // [sp+74h] [bp-7Ch]@1
  UIUtil ui; // [sp+84h] [bp-6Ch]@18
  unsigned int uiWidth; // [sp+98h] [bp-58h]@16
  unsigned int uiHeight; // [sp+9Ch] [bp-54h]@16
  unsigned int v62; // [sp+A0h] [bp-50h]@22
  NiTexturePalette *i; // [sp+A4h] [bp-4Ch]@7
  int iOffY; // [sp+A8h] [bp-48h]@11
  PgSprData *pkSprData; // [sp+ACh] [bp-44h]@14
  int uiTop; // [sp+B0h] [bp-40h]@10
  int uiLeft; // [sp+B4h] [bp-3Ch]@10
  NiPointer<NiNode> spNode; // [sp+B8h] [bp-38h]@1
  char acShapeName[33]; // [sp+BCh] [bp-34h]@22
  unsigned int v70; // [sp+E0h] [bp-10h]@1
  int v71; // [sp+ECh] [bp-4h]@1
  int v72; // [sp+F0h] [bp+0h]@1

  v70 = (unsigned int)&v72 ^ __security_cookie;
  v58 = (unsigned int)&v72 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v71 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
    goto LABEL_31;
  i = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\PrivateStore.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, i);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "PrivateStoreWin", 0) )
  {
LABEL_31:
    v4 = spNode.m_pObject;
    v71 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  iOffY = uiTop;
  v9 = MenuTexMgr::GetTexture(0x13u);
  if ( v9 )
  {
    v57 = v9;
    v56 = &uiTop;
    v55 = &uiLeft;
    v54 = "Theme";
  }
  else
  {
    v57 = 0;
    v56 = &uiTop;
    v55 = &uiLeft;
    v54 = "Theme";
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v54, v55, v56, v57);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - iOffY, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - iOffY, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "ClsOver");
  v2->m_pkCloseBtn = PgWinBut::CreateWin(
                       uiLeft - v8,
                       uiTop - iOffY,
                       pkSprData,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0xEu,
                       0,
                       0);
  i = (NiTexturePalette *)MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v58) )
  {
    pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)i);
    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - iOffY, pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u, 0, 0);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - iOffY, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v14 = Font::Get(0),
        v15 = PgWinText::CreateWin(
                uiLeft - v8,
                uiTop - iOffY + 1,
                uiWidth,
                uiHeight,
                v14,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkTitleText = v15,
        v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v15,
          1u),
        ((void (__stdcall *)(__int64 *))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        i = (NiTexturePalette *)&v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118],
        v16 = TextData::Get(0xF5D4F4D7u),
        ((void (__thiscall *)(PgWinText *, char *))i->baseclass_0.vfptr)(v2->m_pkTitleText, v16),
        ((void (__stdcall *)(_DWORD))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "StoreName", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
    goto LABEL_20;
  v17 = Font::Get(0);
  i = (NiTexturePalette *)PgWinText::CreateWin(
                            uiLeft - v8,
                            uiTop - iOffY,
                            uiWidth,
                            uiHeight,
                            v17,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
  pkSprData = (PgSprData *)&i->baseclass_0.vfptr[118];
  v18 = TextData::Get(0x48443B44u);
  ((void (__thiscall *)(NiTexturePalette *, char *))pkSprData->baseclass_0.vfptr)(i, v18);
  UIUtil::UIUtil(&ui);
  LOBYTE(v71) = 1;
  UIUtil::SetOffset(&ui, v8, iOffY + 2);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "StoreNameInput", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_32;
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "StoreNameInput", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - iOffY, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v20 = EditWin::CreateWin(
          uiLeft - v8 + 2,
          uiTop - iOffY + 2,
          uiWidth,
          uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          NORMAL,
          0x1Du,
          1u,
          0,
          0,
          1);
  v2->m_pkStoreNameInputEdit = v20;
  EditWin::SetImeStatus(v20, IS_ENGLISH);
  i = 0;
  pkSprData = (PgSprData *)v2->m_apkInvWin;
  do
  {
    v62 = (unsigned int)((char *)&i->baseclass_0.vfptr + 1);
    sprintf(acShapeName, "Slot%03d");
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, v3);
    v22 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - iOffY, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkSprData->m_akAlphaPropertyData.m_uiGrowBy = (unsigned int)v22;
    v22->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v23 = TextData2::Get(0x614D7B88u);
    PgWin::SetToolTipWinText((PgWin *)pkSprData->m_akAlphaPropertyData.m_uiGrowBy, v23);
    v24 = (ItemIcon *)PrivateStoreInvWin::CreateWin(
                        uiLeft - v8 + 1,
                        uiTop - iOffY + 1,
                        (unsigned int)i,
                        &v2->baseclass_0.baseclass_0.baseclass_0);
    pkSprData->baseclass_0.vfptr = (NiRefObjectVtbl *)v24;
    ItemIcon::SetItem(v24, 0, 1);
    v25 = pkSprData;
    pkSprData->baseclass_0.vfptr[113].__vecDelDtor = 0;
    (*((void (__stdcall **)(_DWORD))v25->baseclass_0.vfptr->__vecDelDtor + 129))(10);
    (*((void (__stdcall **)(_DWORD))pkSprData->baseclass_0.vfptr->__vecDelDtor + 140))(11);
    v28 = __OFSUB__(i, 4);
    v26 = i == (NiTexturePalette *)4;
    v27 = (signed int)((char *)i - 4) < 0;
    v29 = pkSprData;
    pkSprData->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkItemInfoWin;
    if ( !((unsigned __int8)(v27 ^ v28) | v26) )
    {
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v29->m_akAlphaPropertyData.m_uiGrowBy + 256))(0);
      v30 = (IconWin **)pkSprData;
      BYTE2(pkSprData->baseclass_0.vfptr[63].__vecDelDtor) = 0;
      IconWin::ShowFocus(*v30, 0);
    }
    pkSprData = (PgSprData *)((char *)pkSprData + 4);
    i = (NiTexturePalette *)v62;
  }
  while ( (signed int)v62 < 20 );
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "text01", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v31 = Font::Get(0),
        v32 = PgWinText::CreateWin(
                uiLeft - v8,
                uiTop - iOffY,
                uiWidth,
                uiHeight,
                v31,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkText2 = v32,
        v62 = (unsigned int)&v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118],
        v33 = TextData::Get(0xE3F7DDDBu),
        (*(void (__thiscall **)(PgWinText *, char *))v62)(v2->m_pkText2, v33),
        ((void (__stdcall *)(_DWORD))v2->m_pkText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "text02", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v34 = Font::Get(0),
        v35 = PgWinText::CreateWin(
                uiLeft - v8,
                uiTop - iOffY,
                uiWidth,
                uiHeight,
                v34,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkRegulateModeText = v35,
        v62 = (unsigned int)&v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118],
        v36 = TextData2::Get(0x3D836EA9u),
        (*(void (__thiscall **)(PgWinText *, char *))v62)(v2->m_pkRegulateModeText, v36),
        ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor),
        ((void (__stdcall *)(_DWORD))v2->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
        ((void (__stdcall *)(signed int))v2->m_pkRegulateModeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "PriceMy", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_32:
    LOBYTE(v71) = 0;
    UIUtil::_UIUtil(&ui);
LABEL_20:
    v71 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v37 = Font::Get(0);
  v38 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - iOffY,
          uiWidth,
          uiHeight,
          v37,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkMoneyText = v38;
  v62 = (unsigned int)&v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v39 = TextData::Get(0x4D427C91u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v62)(v2->m_pkMoneyText, v39);
  ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "OkClick");
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "OkOver");
  v2->m_pkOk = PgWinBut::CreateWin(
                 uiLeft - v8,
                 uiTop - iOffY,
                 pkSprData,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0xCu,
                 0,
                 0);
  v40 = pkSprData->m_akHitTester.m_pBase;
  v41 = (NiTexturePalette *)v40->m_pObject->m_uiWidth;
  v62 = v40->m_pObject->m_uiHeight;
  i = v41;
  v42 = Font::Get(0);
  v43 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - iOffY,
          (unsigned int)i,
          v62,
          v42,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkOkTextWin = v43;
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v43,
    5u);
  v62 = (unsigned int)&v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v44 = TextData::Get(0x385F4540u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v62)(v2->m_pkOkTextWin, v44);
  ((void (__stdcall *)(_DWORD))v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "CancelClick");
  PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "CancelOver");
  v2->m_pkCancel = PgWinBut::CreateWin(
                     uiLeft - v8,
                     uiTop - iOffY,
                     pkSprData,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0xDu,
                     0,
                     0);
  v45 = pkSprData->m_akHitTester.m_pBase;
  v46 = (NiTexturePalette *)v45->m_pObject->m_uiWidth;
  v62 = v45->m_pObject->m_uiHeight;
  i = v46;
  v47 = Font::Get(0);
  v48 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - iOffY,
          (unsigned int)i,
          v62,
          v47,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v48,
    5u);
  v62 = (unsigned int)&v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v49 = TextData::Get(0x4D364F8Eu);
  (*(void (__thiscall **)(_DWORD, _DWORD))v62)(v48, v49);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v48,
    0);
  v2->m_pkCopperBtn = UIUtil::CreateBtn(&ui, 0, "CopperBtn01", "CopperBtn01", "CopperBtn01", "CopperBtn01", v3);
  v2->m_pkSilverBtn = UIUtil::CreateBtn(&ui, 0, "SilverBtn01", "SilverBtn01", "SilverBtn01", "SilverBtn01", v3);
  v2->m_pkGoldBtn = UIUtil::CreateBtn(&ui, 0, "GoldBtn01", "GoldBtn01", "GoldBtn01", "GoldBtn01", v3);
  v2->m_pkGemBtn = UIUtil::CreateBtn(&ui, 0, "GemBtn01", "GemBtn01", "GemBtn01", "GemBtn01", v3);
  *(_QWORD *)&v50.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v50.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkCopperText = UIUtil::CreateText(&ui, "CopperInput01", &byte_9A733B, 0, COERCE_D3DXCOLOR(v50.r), 6u, v3, 0);
  *(_QWORD *)&v51.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v51.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkSilverText = UIUtil::CreateText(&ui, "SilverInput01", &byte_9A7352, 0, COERCE_D3DXCOLOR(v51.r), 6u, v3, 0);
  *(_QWORD *)&v52.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v52.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkGoldText = UIUtil::CreateText(&ui, "GoldInput01", &byte_9A7353, 0, COERCE_D3DXCOLOR(v52.r), 6u, v3, 0);
  *(_QWORD *)&v53.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v53.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkGemText = UIUtil::CreateText(&ui, "GemInput01", &byte_9A735A, 0, COERCE_D3DXCOLOR(v53.r), 6u, v3, 0);
  ((void (__thiscall *)(PrivateStoreWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  CNSTimer_Interval::ReSet(&v2->m_kTimerInterval, Timer::ms_fCurTime);
  v2->m_kTimerInterval.m_fCheckTime = 1.0;
  LOBYTE(v71) = 0;
  UIUtil::_UIUtil(&ui);
  v71 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0057B330) --------------------------------------------------------
void *__thiscall PrivateStoreWin::_vector_deleting_destructor_(PrivateStoreWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PrivateStoreWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PrivateStoreWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A7874: using guessed type int (__stdcall *PrivateStoreWin___vftable_)(int uiFlags);
// 9A7894: using guessed type int (__thiscall *PrivateStoreWin___vftable_)(void *p, char);

//----- (0057B370) --------------------------------------------------------
void *__thiscall PrivateStoreInvWin::_vector_deleting_destructor_(PrivateStoreInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PrivateStoreInvWin::_PrivateStoreInvWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0057B3A0) --------------------------------------------------------
void __thiscall MaterialItemIcon::SetItemAsMaterial(MaterialItemIcon *this, unsigned int dwNeededMaterialLot, unsigned __int16 itemid, unsigned int dwLot)
{
  MaterialItemIcon *v4; // esi@1
  NiRefObjectVtbl *v5; // edi@5
  char *v6; // eax@5
  signed int v7; // [sp-14h] [bp-18h]@3
  signed int v8; // [sp-10h] [bp-14h]@3

  v4 = this;
  ItemIcon::SetItemAsID(&this->baseclass_0, itemid);
  if ( v4->baseclass_0.m_pkLotText )
  {
    if ( dwLot >= dwNeededMaterialLot )
    {
      v8 = 255;
      v7 = 255;
    }
    else
    {
      v8 = 0;
      v7 = 0;
    }
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      v7,
      v8,
      255);
    v5 = v4->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = fs("%d");
    v5[118].__vecDelDtor((NiRefObject *)v4->baseclass_0.m_pkLotText, (unsigned int)v6);
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
}

//----- (0057B430) --------------------------------------------------------
bool __thiscall MaterialItemIcon::Create(MaterialItemIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent) != 0;
}

//----- (0057B450) --------------------------------------------------------
void __thiscall ProductionWin::ProductionWin(ProductionWin *this)
{
  ProductionWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_uiProductableItemCount = 0;
  v1->m_uiProduceItemCount = 0;
  v1->m_eProduceBtnState = 0;
  v1->m_bIsProducing = 0;
  v1->m_bReserved = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ProductionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ProductionWin::_vftable_;
}
// 9A8044: using guessed type int (__stdcall *ProductionWin___vftable_)(int uiFlags);
// 9A8064: using guessed type int (__thiscall *ProductionWin___vftable_)(void *p, char);

//----- (0057B490) --------------------------------------------------------
void __thiscall ProductionWin::_ProductionWin(ProductionWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ProductionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ProductionWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A8044: using guessed type int (__stdcall *ProductionWin___vftable_)(int uiFlags);
// 9A8064: using guessed type int (__thiscall *ProductionWin___vftable_)(void *p, char);

//----- (0057B4B0) --------------------------------------------------------
int __cdecl GetNeedExpForProduceSkillGrade(int iLevel)
{
  int result; // eax@2

  switch ( iLevel )
  {
    case 1:
      result = 1000;
      break;
    case 2:
      result = 12000;
      break;
    case 3:
      result = 35000;
      break;
    case 4:
      result = 100000;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (0057B500) --------------------------------------------------------
int __cdecl GetProduceSkillGradeByExp(unsigned int dwExp)
{
  int result; // eax@2

  if ( dwExp >= 0x3E8 )
  {
    if ( dwExp >= 0x2EE0 )
    {
      if ( dwExp >= 0x88B8 )
        result = 4 - (dwExp < 0x186A0);
      else
        result = 2;
    }
    else
    {
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0057B540) --------------------------------------------------------
void __thiscall ProductionWin::OnQuit(ProductionWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0057B570) --------------------------------------------------------
void __thiscall ProductionWin::OnHelpLink(ProductionWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ProductWin");
}

//----- (0057B5A0) --------------------------------------------------------
void __thiscall ProductionWin::UpdateMeWin(ProductionWin *this, float fCurTime)
{
  ProductionWin *v2; // esi@1
  PgFrameWork *v3; // eax@1
  NiRefObjectVtbl *v4; // edi@3
  char *v5; // eax@3

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pkSkillListWin, v2->m_pkSkillSlideBar);
  v4 = v2->m_pkProduceItemCountText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = fs("%d");
  v4[118].__vecDelDtor((NiRefObject *)v2->m_pkProduceItemCountText, (unsigned int)v5);
}

//----- (0057B600) --------------------------------------------------------
void __thiscall ProductionWin::OnClose(ProductionWin *this)
{
  char *v1; // esi@2

  if ( this->m_bIsProducing )
  {
    v1 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        35,
        0,
        v1);
      if ( *((_DWORD *)v1 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v1 + 1) + 20))(35, 0, v1);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v1 + 20))(v1, 35, 0, v1);
  }
}

//----- (0057B650) --------------------------------------------------------
unsigned int __cdecl GetProduceSkillExp(TotalMasteryType eType)
{
  unsigned int v1; // ebx@1
  Skill::LearnProdSkillInfo *v2; // eax@2
  unsigned __int16 v3; // di@2
  unsigned int v4; // esi@3
  void *v5; // eax@4
  unsigned int result; // eax@10
  unsigned int totalNum; // [sp+4h] [bp-Ch]@1
  Skill::LearnProdSkillInfo *pkInfo; // [sp+8h] [bp-8h]@2
  unsigned int uiExp; // [sp+Ch] [bp-4h]@1

  v1 = 0;
  totalNum = Skill::GetTotalLearnProductSkill();
  uiExp = 0;
  if ( totalNum )
  {
    do
    {
      v2 = Skill::GetLearnProductSkill(v1);
      v3 = v2->kSkillID;
      pkInfo = v2;
      if ( v2->kSkillID != -1 )
      {
        v4 = 0;
        if ( ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
        {
          while ( 1 )
          {
            v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4), v4);
            if ( *(_WORD *)v5 == v3 )
              break;
            ++v4;
            if ( v4 >= ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
              goto LABEL_9;
          }
          if ( *(_DWORD *)((char *)v5 + 422) == eType )
            uiExp += pkInfo->kSkillExp;
        }
      }
LABEL_9:
      ++v1;
    }
    while ( v1 < totalNum );
    result = uiExp;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (0057B6E0) --------------------------------------------------------
int __cdecl GetProduceSkillGrade(unsigned __int16 id)
{
  ProduceInfo *v1; // eax@1
  int result; // eax@2
  unsigned int v3; // eax@3

  v1 = ProduceInfoTable::GetByID(id);
  if ( !v1 )
    return -1;
  v3 = v1->NeededMasteryGain;
  if ( v3 > 0x2EE0 )
  {
    if ( v3 == 35000 )
    {
      result = 3;
    }
    else
    {
      if ( v3 != 100000 )
        return -1;
      result = 4;
    }
  }
  else
  {
    if ( v3 == 12000 )
    {
      result = 2;
    }
    else
    {
      if ( v3 )
      {
        if ( v3 == 1000 )
          return 1;
        return -1;
      }
      result = 0;
    }
  }
  return result;
}

//----- (0057B740) --------------------------------------------------------
void __thiscall ProductionWin::ProduceStartCurrentSelected(ProductionWin *this)
{
  ProductionWin *v1; // esi@1
  int v2; // edi@1
  bool v3; // zf@5
  PgWinText *v4; // eax@8
  NiRefObjectVtbl *v5; // edi@8
  char *v6; // eax@8
  int v7; // esi@9
  char *v8; // edi@9
  int dwData; // [sp+8h] [bp-8h]@3
  DirectUserMsgBody_StartProducing kBody; // [sp+Ch] [bp-4h]@5

  v1 = this;
  v2 = SlideListWin::GetCurSelIndex(this->m_pkSkillListWin);
  if ( v2 >= 0 )
  {
    if ( v2 < (signed int)SlideListWin::GetItemSize(v1->m_pkSkillListWin) )
    {
      SlideListWin::GetData(v1->m_pkSkillListWin, v2, (unsigned int *)&dwData);
      if ( dwData != -1 )
      {
        if ( Skill::GetLearnProductSkill(dwData) )
        {
          v3 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
          kBody.skillID = dwData;
          if ( !v3 )
          {
            ((void (__stdcall *)(signed int, DirectUserMsgBody_StartProducing *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              34,
              &kBody,
              &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
            if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
              ((void (__stdcall *)(signed int, DirectUserMsgBody_StartProducing *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                34,
                &kBody,
                &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          }
          v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
            34,
            &kBody,
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          v4 = v1->m_pkProduceBtnText;
          v1->m_bIsProducing = 1;
          v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v6 = TextData::Get(0xA4B2F8FAu);
          v5[118].__vecDelDtor((NiRefObject *)v1->m_pkProduceBtnText, (unsigned int)v6);
          ((void (__stdcall *)(_DWORD))v1->m_pkSkillListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v1->m_pkSkillSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v1->m_pkSkillSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v1->m_pkProductCountDecBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v1->m_pkProductCountIncBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        }
        else
        {
          v7 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
          v8 = TextData::Get(0x2534818Cu);
          if ( *(_DWORD *)(v7 + 4) )
          {
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 4))(25, v8, v7);
            if ( *(_DWORD *)(v7 + 4) )
              (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 20))(25, v8, v7);
          }
          (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
        }
      }
    }
  }
}

//----- (0057B8D0) --------------------------------------------------------
void __thiscall ProductionWin::ProduceStop(ProductionWin *this)
{
  ProductionWin *v1; // esi@1
  PgWinText *v2; // eax@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@1

  v1 = this;
  v2 = this->m_pkProduceBtnText;
  this->m_bIsProducing = 0;
  v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = TextData::Get(0xD8FAF1F6u);
  v3[118].__vecDelDtor((NiRefObject *)v1->m_pkProduceBtnText, (unsigned int)v4);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkProductCountDecBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkProductCountIncBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
}

//----- (0057B960) --------------------------------------------------------
bool __thiscall ProductionWin::ProduceComplete(ProductionWin *this)
{
  unsigned int v1; // eax@1
  unsigned int v2; // eax@2
  bool result; // al@3

  v1 = this->m_uiProduceItemCount;
  if ( v1 && (v2 = v1 - 1, (this->m_uiProduceItemCount = v2) != 0) )
  {
    ProductionWin::ProduceStartCurrentSelected(this);
    result = 1;
  }
  else
  {
    ProductionWin::ProduceStop(this);
    result = 0;
  }
  return result;
}

//----- (0057B990) --------------------------------------------------------
MaterialItemIcon *__cdecl MaterialItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  MaterialItemIcon *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1C0u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v3);
    *(_DWORD *)v4 = &MaterialItemIcon::_vftable_;
    *((_DWORD *)v4 + 58) = &MaterialItemIcon::_vftable_;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 612))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (MaterialItemIcon *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9A7DB8: using guessed type int (__stdcall *MaterialItemIcon___vftable_)(int uiFlags);
// 9A7DD4: using guessed type int (__thiscall *MaterialItemIcon___vftable_)(void *p, char);

//----- (0057BAE0) --------------------------------------------------------
ProductionWin *__cdecl ProductionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ProductionWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x21Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ProductionWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ProductionWin::_vftable_;
    *((_DWORD *)v2 + 131) = 0;
    *((_DWORD *)v2 + 132) = 0;
    *((_DWORD *)v2 + 86) = 0;
    *((_BYTE *)v2 + 532) = 0;
    *((_BYTE *)v2 + 536) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ProductionWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A8044: using guessed type int (__stdcall *ProductionWin___vftable_)(int uiFlags);
// 9A8064: using guessed type int (__thiscall *ProductionWin___vftable_)(void *p, char);

//----- (0057BC40) --------------------------------------------------------
int __cdecl GetNeededMaterialInfo(ProduceInfo *pkProduceInfo, NeededMaterialInfo *pkMaterialInfo)
{
  int v2; // ebx@1
  ItemInfo *v3; // eax@2
  unsigned __int16 v4; // cx@3
  ItemInfo *v5; // eax@4
  unsigned __int16 v6; // cx@5
  ItemInfo *v7; // eax@6
  unsigned __int16 v8; // cx@7
  ItemInfo *v9; // eax@8
  unsigned __int16 v10; // cx@9
  ItemInfo *v11; // eax@10
  unsigned __int16 v12; // cx@11
  ItemInfo *v13; // eax@12
  unsigned __int16 v14; // cx@13
  ItemInfo *v15; // eax@14
  unsigned __int16 v16; // cx@15
  ItemInfo *v17; // eax@16

  v2 = 0;
  if ( pkProduceInfo->Raw0[0] != 45 )
  {
    v3 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw0);
    if ( v3 )
    {
      v4 = v3->ID;
      pkMaterialInfo->pcName = v3->Name;
      pkMaterialInfo->ID = v4;
      pkMaterialInfo->dwQuantity = pkProduceInfo->Quantity0;
      v2 = 1;
      if ( pkProduceInfo->Raw1[0] != 45 )
      {
        v5 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw1);
        if ( v5 )
        {
          v6 = v5->ID;
          pkMaterialInfo[1].pcName = v5->Name;
          pkMaterialInfo[1].ID = v6;
          pkMaterialInfo[1].dwQuantity = pkProduceInfo->Quantity1;
          v2 = 2;
          if ( pkProduceInfo->Raw2[0] != 45 )
          {
            v7 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw2);
            if ( v7 )
            {
              v8 = v7->ID;
              pkMaterialInfo[2].pcName = v7->Name;
              pkMaterialInfo[2].ID = v8;
              pkMaterialInfo[2].dwQuantity = pkProduceInfo->Quantity2;
              v2 = 3;
              if ( pkProduceInfo->Raw3[0] != 45 )
              {
                v9 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw3);
                if ( v9 )
                {
                  v10 = v9->ID;
                  pkMaterialInfo[3].pcName = v9->Name;
                  pkMaterialInfo[3].ID = v10;
                  pkMaterialInfo[3].dwQuantity = pkProduceInfo->Quantity3;
                  v2 = 4;
                  if ( pkProduceInfo->Raw4[0] != 45 )
                  {
                    v11 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw4);
                    if ( v11 )
                    {
                      v12 = v11->ID;
                      pkMaterialInfo[4].pcName = v11->Name;
                      pkMaterialInfo[4].ID = v12;
                      pkMaterialInfo[4].dwQuantity = pkProduceInfo->Quantity4;
                      v2 = 5;
                      if ( pkProduceInfo->Raw5[0] != 45 )
                      {
                        v13 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw5);
                        if ( v13 )
                        {
                          v14 = v13->ID;
                          pkMaterialInfo[5].pcName = v13->Name;
                          pkMaterialInfo[5].ID = v14;
                          pkMaterialInfo[5].dwQuantity = pkProduceInfo->Quantity5;
                          v2 = 6;
                          if ( pkProduceInfo->Raw6[0] != 45 )
                          {
                            v15 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw6);
                            if ( v15 )
                            {
                              v16 = v15->ID;
                              pkMaterialInfo[6].pcName = v15->Name;
                              pkMaterialInfo[6].ID = v16;
                              pkMaterialInfo[6].dwQuantity = pkProduceInfo->Quantity6;
                              v2 = 7;
                              if ( pkProduceInfo->Raw7[0] != 45 )
                              {
                                v17 = ItemInfoTab::GetByInxName(pkProduceInfo->Raw7);
                                if ( v17 )
                                {
                                  pkMaterialInfo[7].ID = v17->ID;
                                  pkMaterialInfo[7].pcName = v17->Name;
                                  pkMaterialInfo[7].dwQuantity = pkProduceInfo->Quantity7;
                                  v2 = 8;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return v2;
}

//----- (0057BE20) --------------------------------------------------------
char *__cdecl GetItemNameByInxName(char *pcInxName)
{
  char *result; // eax@1

  result = (char *)ItemInfoTab::GetByInxName(pcInxName);
  if ( result )
    result += 34;
  return result;
}

//----- (0057BE40) --------------------------------------------------------
bool __cdecl AddProductSkillTextInList(ProduceInfo *pkProduce, SlideListWin *pkListWin, bool bMyGradeIsLow, TotalMasteryType eType)
{
  ProduceInfo *v4; // ebx@1
  ItemInfo *v5; // eax@1
  char *v7; // eax@4
  int v8; // edi@4
  char *v9; // eax@4
  int v10; // [sp-10h] [bp-18h]@6
  int v11; // [sp-Ch] [bp-14h]@6
  int v12; // [sp-8h] [bp-10h]@6
  Skill::LearnProdSkillInfo *pkLearnSkillInfo; // [sp+10h] [bp+8h]@4

  v4 = pkProduce;
  v5 = ItemInfoTab::GetByInxName(pkProduce->Product);
  if ( !v5 || v5 == (ItemInfo *)-34 )
    return 0;
  pkLearnSkillInfo = Skill::GetLearnProductSkill(pkProduce->ProductID);
  v7 = fs(" %s");
  v8 = SlideListWin::AddText(pkListWin, v7);
  v9 = fs(" %6d");
  SlideListWin::SetText(pkListWin, v8, 1u, v9);
  if ( bMyGradeIsLow )
    goto LABEL_9;
  if ( !pkLearnSkillInfo )
  {
    if ( GetProduceSkillExp(eType) >= v4->NeededMasteryGain )
    {
      v12 = 128;
      v11 = 255;
LABEL_10:
      v10 = 255;
      goto LABEL_11;
    }
LABEL_9:
    v12 = 128;
    v11 = 128;
    goto LABEL_10;
  }
  v12 = 255;
  v11 = 128;
  v10 = 128;
LABEL_11:
  SlideListWin::SetFontColor(pkListWin, v8, v10, v11, v12);
  SlideListWin::SetData(pkListWin, v8, v4->ProductID);
  return 1;
}

//----- (0057BF20) --------------------------------------------------------
int __cdecl AddProductSkillTextInListByType(TotalMasteryType eType, unsigned int iGrade, SlideListWin *pkListWin, bool bMyGradeIsLow)
{
  unsigned int v4; // esi@1
  void *v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@3
  void *v8; // eax@6
  unsigned int v9; // edx@8
  int v10; // ecx@9
  std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *v11; // eax@19
  std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *i; // esi@19
  std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *v13; // eax@23
  std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *k; // eax@24
  std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *j; // eax@27
  std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *v16; // edi@32
  std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *v17; // esi@32
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v18; // ST08_4@36
  std::multimap<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> > > mapPInfo; // [sp+0h] [bp-40h]@1
  std::exception this; // [sp+10h] [bp-30h]@37
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> result; // [sp+1Ch] [bp-24h]@16
  std::pair<unsigned int,Effect *> _Val; // [sp+24h] [bp-1Ch]@16
  char *_What; // [sp+2Ch] [bp-14h]@36
  int uiAdded; // [sp+30h] [bp-10h]@1
  int v26; // [sp+3Ch] [bp-4h]@2

  v4 = 0;
  uiAdded = 0;
  mapPInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x18u);
  if ( !v5 )
  {
    _What = 0;
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
  }
  mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned long,ProduceInfo *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,ProduceInfo *> >,1> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v6 = *(_DWORD *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 56);
  v26 = 0;
  if ( v6 )
    v7 = *(_DWORD *)(v6 + 40);
  else
    v7 = 0;
  if ( v7 > 0 )
  {
    do
    {
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4), v4);
      if ( v8 && *(_DWORD *)((char *)v8 + 422) == eType )
      {
        v9 = *(_DWORD *)((char *)v8 + 434);
        if ( v9 >= 0x3E8 )
        {
          if ( v9 >= 0x2EE0 )
            v10 = v9 >= 0x88B8 ? 4 - (v9 < 0x186A0) : 2;
          else
            v10 = 1;
        }
        else
        {
          v10 = 0;
        }
        if ( v10 == iGrade )
        {
          _Val.baseclass_0.first = *(_DWORD *)((char *)v8 + 434);
          _Val.baseclass_0.second = (Effect *)v8;
          std::_Tree<std::_Tmap_traits<unsigned_long_ProduceInfo___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_ProduceInfo__>>_1>>::insert<std::pair<unsigned_long_const_ProduceInfo__>>(
            (std::_Tree<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > *)&mapPInfo,
            &result,
            &_Val);
        }
      }
      ++v4;
    }
    while ( v4 < v7 );
  }
  if ( mapPInfo.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    v11 = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    for ( i = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
          i != mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
          v11 = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      if ( AddProductSkillTextInList(i->_Myval.baseclass_0.second, pkListWin, bMyGradeIsLow, eType) )
        ++uiAdded;
      if ( !i->_Isnil )
      {
        v13 = i->_Right;
        if ( v13->_Isnil )
        {
          for ( j = i->_Parent; !j->_Isnil; j = j->_Parent )
          {
            if ( i != j->_Right )
              break;
            i = j;
          }
          i = j;
        }
        else
        {
          i = i->_Right;
          for ( k = v13->_Left; !k->_Isnil; k = k->_Left )
            i = k;
        }
      }
    }
    v16 = v11->_Parent;
    v17 = v11->_Parent;
    if ( !v16->_Isnil )
    {
      do
      {
        std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
          (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&mapPInfo,
          (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v17->_Right);
        v17 = v17->_Left;
        operator delete(v16);
        v16 = v17;
      }
      while ( !v17->_Isnil );
      v11 = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    }
    v11->_Parent = v11;
    mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    mapPInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  }
  v18 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v26 = 1;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&mapPInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&_What,
    v18,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
  operator delete(mapPInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
  return uiAdded;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (0057C140) --------------------------------------------------------
void __thiscall ProductionWin::SetCurrentProduction(ProductionWin *this, ProduceInfo *pkInfo, bool bFirstTime)
{
  D3DXCOLOR *v3; // edi@0
  ItemInfo *v4; // eax@1
  unsigned __int16 *v5; // esi@1
  int v6; // edi@2
  int v7; // eax@4
  int v8; // edi@5
  Item *v9; // eax@6
  ProductionWin *v10; // esi@6
  int v11; // eax@6
  char *v12; // edi@7
  int v13; // ebx@7
  signed int v14; // esi@8
  bool v15; // cf@8
  Item *v16; // ecx@10
  char *v17; // edi@16
  int v18; // esi@16
  int v19; // ebx@17
  int v20; // ST14_4@17
  char *v21; // eax@17
  void (__stdcall *v22)(_DWORD); // edx@17
  int v23; // esi@23
  int v24; // edi@23
  int v25; // ebx@26
  ItemIcon **v26; // edi@26
  signed int v27; // esi@26
  int v28; // eax@28
  ItemIcon **v29; // esi@29
  unsigned __int16 *v30; // edi@29
  int v31; // ebx@29
  Item *v32; // eax@30
  signed int v33; // esi@32
  char *v34; // ecx@33
  int v35; // edi@33
  D3DXCOLOR *v36; // [sp-4h] [bp-C0h]@2
  int iMaterialCount; // [sp+Ch] [bp-B0h]@6
  int v38; // [sp+10h] [bp-ACh]@2
  int v39; // [sp+10h] [bp-ACh]@16
  ProductionWin *v40; // [sp+14h] [bp-A8h]@1
  NeededMaterialInfo akMaterialInfo[10]; // [sp+18h] [bp-A4h]@6
  unsigned int v42; // [sp+B8h] [bp-4h]@1
  int v43; // [sp+BCh] [bp+0h]@1

  v42 = (unsigned int)&v43 ^ __security_cookie;
  v40 = this;
  v4 = ItemInfoTab::GetByInxName(pkInfo->Product);
  v5 = (unsigned __int16 *)v4;
  if ( v4 )
  {
    v36 = v3;
    v6 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    v38 = v4->ID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                            v38) )
    {
      if ( (unsigned __int16)v38 <= *(_WORD *)(v6 + 200) )
      {
        v7 = *(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v38;
        if ( *(_DWORD *)v7 )
        {
          v8 = *(_DWORD *)v7;
          if ( *(_DWORD *)v7 )
          {
            ((void (__stdcall *)(unsigned __int16 *))v40->m_pkProductionName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v5 + 17);
            ((void (__stdcall *)(int))v40->m_pkProductionDesc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v8 + 380);
            v9 = Item::Create(*v5);
            v10 = v40;
            ItemIcon::SetItem(v40->m_pkProductItemIcon, v9, 1);
            ((void (__stdcall *)(signed int))v40->m_pkProductItemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            v11 = GetNeededMaterialInfo(pkInfo, akMaterialInfo);
            iMaterialCount = v11;
            if ( v11 > 0 )
            {
              v12 = (char *)&akMaterialInfo[0].dwOwnedQuantity;
              v13 = v11;
              do
              {
                v14 = 0;
                *(_DWORD *)v12 = 0;
                v15 = 1;
                do
                {
                  if ( v15 )
                  {
                    v16 = g_kInventory.m_aspInv[v14].m_pObject;
                    if ( v16 )
                    {
                      if ( v16->m_kStruct.itemid == *((_WORD *)v12 - 6) )
                      {
                        *(_DWORD *)v12 += ((int (*)(void))v16->baseclass_0.vfptr[3].__vecDelDtor)();
                        v11 = iMaterialCount;
                      }
                    }
                  }
                  ++v14;
                  v15 = (unsigned int)v14 < 0xC0;
                }
                while ( v14 < 192 );
                v12 += 16;
                --v13;
              }
              while ( v13 );
              v10 = v40;
              if ( v11 > 0 )
              {
                v17 = (char *)&akMaterialInfo[0].dwQuantity;
                v18 = (int)v40->m_pkMaterialLot;
                v39 = v11;
                do
                {
                  (*(void (__stdcall **)(_DWORD, D3DXCOLOR *))(**(_DWORD **)(v18 - 40) + 472))(
                    *((_DWORD *)v17 - 1),
                    v36);
                  v19 = **(_DWORD **)v18;
                  v20 = *(_DWORD *)v18;
                  v21 = fs("%d/%d");
                  (*(void (__thiscall **)(int, char *))(v19 + 472))(v20, v21);
                  v22 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(v18 - 40) + 468);
                  if ( *((_DWORD *)v17 + 1) >= *(_DWORD *)v17 )
                  {
                    v22(&Color::m_kDxWhiteColor);
                    v36 = &Color::m_kDxWhiteColor;
                  }
                  else
                  {
                    v22(&Color::m_kDxRedColor);
                    v36 = &Color::m_kDxRedColor;
                  }
                  (*(void (**)(void))(**(_DWORD **)v18 + 468))();
                  v18 += 4;
                  v17 += 16;
                  --v39;
                }
                while ( v39 );
                v10 = v40;
                v11 = iMaterialCount;
              }
            }
            if ( v11 < 10 )
            {
              v23 = (int)&v10->m_pkMaterialLot[v11];
              v24 = 10 - v11;
              do
              {
                (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v23 - 40) + 472))(&unk_9A7ADF);
                (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v23 + 472))(&unk_9A7AEE);
                v23 += 4;
                --v24;
              }
              while ( v24 );
              v10 = v40;
            }
            v25 = (int)v10->m_apkMaterialIcon;
            v26 = (ItemIcon **)v10->m_apkMaterialIcon;
            v27 = 10;
            do
            {
              ItemIcon::SetItem(*v26, 0, 1);
              ((void (__stdcall *)(_DWORD))(*v26)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ++v26;
              --v27;
            }
            while ( v27 );
            v28 = iMaterialCount;
            if ( iMaterialCount > 0 )
            {
              v29 = (ItemIcon **)v25;
              v30 = (unsigned __int16 *)akMaterialInfo;
              v31 = iMaterialCount;
              do
              {
                v32 = Item::Create(*v30);
                ItemIcon::SetItem(*v29, v32, 1);
                ((void (__stdcall *)(signed int))(*v29)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                ++v29;
                v30 += 8;
                --v31;
              }
              while ( v31 );
              v28 = iMaterialCount;
            }
            v33 = 999999999;
            if ( v28 > 0 )
            {
              v34 = (char *)&akMaterialInfo[0].dwOwnedQuantity;
              v35 = v28;
              do
              {
                if ( *(_DWORD *)v34 / *((_DWORD *)v34 - 1) < v33 )
                  v33 = *(_DWORD *)v34 / *((_DWORD *)v34 - 1);
                v34 += 16;
                --v35;
              }
              while ( v35 );
            }
            v40->m_uiProductableItemCount = v33;
            if ( bFirstTime )
              v40->m_uiProduceItemCount = v33;
          }
        }
      }
    }
  }
}
// 57C140: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (0057C470) --------------------------------------------------------
void __thiscall ProductionWin::RefreshProductSkillList(ProductionWin *this)
{
  ProductionWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  int v3; // edi@1
  ProduceViewInfo *v4; // eax@5
  unsigned int v5; // eax@13
  unsigned int v6; // ebx@13
  char *v7; // eax@26
  int v8; // eax@26
  NiRefObjectVtbl *v9; // edi@26
  char *v10; // eax@26
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@28
  unsigned int v12; // edi@28
  char *v13; // eax@29
  int v14; // ebx@29
  SlideListWin *v15; // ecx@29
  int iSelIndex; // [sp+Ch] [bp-20h]@1
  bool bMyGradeIsLow_4; // [sp+14h] [bp-18h]@29
  int dwData; // [sp+18h] [bp-14h]@3
  ProduceInfo *pkSelectedInfo; // [sp+1Ch] [bp-10h]@1
  unsigned int v20; // [sp+20h] [bp-Ch]@14
  TotalMasteryType eType; // [sp+24h] [bp-8h]@7
  unsigned int fGaugeWidth; // [sp+28h] [bp-4h]@21

  v1 = this;
  v2 = this->m_pkSkillListWin;
  pkSelectedInfo = 0;
  v3 = SlideListWin::GetCurSelIndex(v2);
  iSelIndex = v3;
  if ( v3 >= 0 )
  {
    if ( v3 < (signed int)SlideListWin::GetItemSize(v1->m_pkSkillListWin) )
    {
      SlideListWin::GetData(v1->m_pkSkillListWin, v3, (unsigned int *)&dwData);
      if ( dwData != -1 )
        pkSelectedInfo = ProduceInfoTable::GetByID(dwData);
    }
  }
  SlideListWin::RemoveAllList(v1->m_pkSkillListWin);
  v4 = ProduceViewInfoTable::GetByID(v1->m_kCurrProduceBaseSkillID);
  if ( v4 )
  {
    switch ( v4->MasteryType )
    {
      case 1:
        eType = 1;
        goto LABEL_13;
      case 2:
        eType = 2;
        goto LABEL_13;
      case 0:
        eType = 0;
        goto LABEL_13;
      case 3:
        eType = 3;
        goto LABEL_13;
      case 4:
        eType = 4;
        goto LABEL_13;
      case 5:
        eType = 5;
LABEL_13:
        ((void (__stdcall *)(char *))v1->m_pkProductSkillName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v4->Name);
        v5 = GetProduceSkillExp(eType);
        v6 = v5;
        if ( v5 >= 0x3E8 )
        {
          if ( v5 >= 0x2EE0 )
          {
            if ( v5 >= 0x88B8 )
              v20 = 4 - (v5 < 0x186A0);
            else
              v20 = 2;
          }
          else
          {
            v20 = 1;
          }
        }
        else
        {
          v20 = 0;
        }
        switch ( v20 + 1 )
        {
          case 1u:
            fGaugeWidth = 1000;
            break;
          case 2u:
            fGaugeWidth = 12000;
            break;
          case 3u:
            fGaugeWidth = 35000;
            break;
          case 4u:
            fGaugeWidth = 100000;
            break;
          default:
            *(float *)&fGaugeWidth = 0.0;
            break;
        }
        v7 = fs("%s");
        v8 = SlideListWin::AddText(v1->m_pkSkillListWin, v7);
        SlideListWin::SetData(v1->m_pkSkillListWin, v8, 0xFFFFFFFFu);
        v9 = v1->m_pkSkillValue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v10 = fs("( %d/%d )");
        v9[118].__vecDelDtor((NiRefObject *)v1->m_pkSkillValue, (unsigned int)v10);
        *(float *)&fGaugeWidth = (double)v6 / (double)fGaugeWidth;
        if ( *(float *)&fGaugeWidth > 1.0 )
          *(float *)&fGaugeWidth = 1.0;
        v11 = v1->m_pkLearnGauge->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
        *(float *)&fGaugeWidth = (double)v1->m_uiGaugeWidth * *(float *)&fGaugeWidth;
        ((void (__stdcall *)(_DWORD))v11)((signed __int64)*(float *)&fGaugeWidth);
        v12 = 0;
        break;
      default:
        return;
    }
    while ( 1 )
    {
      fGaugeWidth = v12 + 1;
      TextData::Get(0xA2EBECECu);
      v13 = fs("  %d%s");
      v14 = SlideListWin::AddText(v1->m_pkSkillListWin, v13);
      SlideListWin::SetData(v1->m_pkSkillListWin, v14, 0xFFFFFFFFu);
      v15 = v1->m_pkSkillListWin;
      bMyGradeIsLow_4 = v12 > v20;
      if ( v12 > v20 == 1 )
        goto LABEL_32;
      SlideListWin::SetFontColor(v15, v14, 128, 128, 255);
      if ( !AddProductSkillTextInListByType(eType, v12, v1->m_pkSkillListWin, bMyGradeIsLow_4) )
        break;
LABEL_33:
      v12 = fGaugeWidth;
      if ( fGaugeWidth >= 5 )
      {
        if ( pkSelectedInfo )
          ProductionWin::SetCurrentProduction(v1, pkSelectedInfo, 0);
        if ( iSelIndex >= 0 )
          SlideListWin::SetCurSelIndex(v1->m_pkSkillListWin, iSelIndex);
        SlideListWin::AlignText(v1->m_pkSkillListWin, 0, 4u);
        SlideListWin::AlignText(v1->m_pkSkillListWin, 1u, 6u);
        SlideListWin::UpdateViewList(v1->m_pkSkillListWin);
        SlideBar::SetSplitCnt(v1->m_pkSkillSlideBar, v1->m_pkSkillListWin->m_nSlideSplitCnt);
        return;
      }
    }
    v15 = v1->m_pkSkillListWin;
LABEL_32:
    SlideListWin::RemoveItem(v15, v14);
    goto LABEL_33;
  }
}

//----- (0057C7E0) --------------------------------------------------------
void __thiscall ProductionWin::OnSelChange(ProductionWin *this)
{
  ProductionWin *v1; // esi@1
  int v2; // edi@1
  unsigned __int16 v3; // ax@3
  int v4; // edi@4
  ProduceInfo *v5; // eax@5
  int dwData; // [sp+8h] [bp-4h]@3

  v1 = this;
  v2 = SlideListWin::GetCurSelIndex(this->m_pkSkillListWin);
  if ( v2 >= 0 )
  {
    if ( v2 < (signed int)SlideListWin::GetItemSize(v1->m_pkSkillListWin) )
    {
      SlideListWin::GetData(v1->m_pkSkillListWin, v2, (unsigned int *)&dwData);
      v3 = dwData;
      if ( dwData != -1
        || (v4 = v2 + 1,
            SlideListWin::SetCurSelIndex(v1->m_pkSkillListWin, v4),
            SlideListWin::UpdateViewList(v1->m_pkSkillListWin),
            SlideListWin::GetData(v1->m_pkSkillListWin, v4, (unsigned int *)&dwData),
            v3 = dwData,
            dwData != -1) )
      {
        v5 = ProduceInfoTable::GetByID(v3);
        ProductionWin::SetCurrentProduction(v1, v5, 1);
      }
    }
  }
}

//----- (0057C870) --------------------------------------------------------
void __thiscall ProductionWin::OnCommand(ProductionWin *this, unsigned int wParam, int lParam)
{
  ProductionWin *v3; // esi@1
  unsigned int v4; // eax@3
  unsigned int v5; // eax@5
  char *v6; // esi@10
  int v7; // esi@19
  char *v8; // edi@19
  unsigned int v9; // [sp-8h] [bp-Ch]@18

  v3 = this;
  switch ( wParam )
  {
    case 6u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      return;
    case 2u:
      v4 = this->m_uiProduceItemCount;
      if ( v4 )
        this->m_uiProduceItemCount = v4 - 1;
      return;
    case 3u:
      v5 = this->m_uiProduceItemCount;
      if ( v5 < this->m_uiProductableItemCount )
        this->m_uiProduceItemCount = v5 + 1;
      return;
    case 4u:
      this->m_pkSkillListWin->m_nViewStartPos = this->m_pkSkillSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(this->m_pkSkillListWin);
      return;
    case 5u:
      ProductionWin::OnSelChange(this);
      return;
    case 1u:
      if ( this->m_bIsProducing )
      {
        v6 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            35,
            0,
            &this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          if ( *((_DWORD *)v6 + 1) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v6 + 1) + 20))(35, 0, v6);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 35, 0, v6);
      }
      else
      {
        if ( this->m_uiProduceItemCount )
        {
          if ( Char::IsActGathering(g_pkMainChar) )
            return;
          if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() )
          {
            ProductionWin::ProduceStartCurrentSelected(v3);
            return;
          }
          v9 = 187771224;
        }
        else
        {
          v9 = 691091320;
        }
        v7 = (int)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v8 = TextData::Get(v9);
        if ( *(_DWORD *)(v7 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 4))(25, v8, v7);
          if ( *(_DWORD *)(v7 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 20))(25, v8, v7);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
      }
      return;
    case 7u:
      ProductionWin::OnHelpLink(this);
      return;
    default:
      return;
  }
}

//----- (0057CA10) --------------------------------------------------------
void __thiscall ProductionWin::RefreshProductItemState(ProductionWin *this)
{
  if ( !this->m_bIsProducing )
    ProductionWin::OnSelChange(this);
}

//----- (0057CA20) --------------------------------------------------------
void __thiscall ProductionWin::OpenDialog(ProductionWin *this, unsigned __int16 kSkillID)
{
  ProductionWin *v2; // esi@1

  v2 = this;
  this->m_kCurrProduceBaseSkillID = kSkillID;
  ProductionWin::ms_kCurrProduceBaseSkillID = kSkillID;
  ProductionWin::RefreshProductSkillList(this);
  v2->m_pkSkillListWin->m_nViewStartPos = 0;
  SlideListWin::SetCurSelIndex(v2->m_pkSkillListWin, 1);
  SlideListWin::UpdateViewList(v2->m_pkSkillListWin);
  if ( !v2->m_bIsProducing )
    ProductionWin::OnSelChange(v2);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
}
// A99164: using guessed type unsigned __int16 ProductionWin__ms_kCurrProduceBaseSkillID;

//----- (0057CA90) --------------------------------------------------------
void __thiscall ProductionWin::OnShowWin(ProductionWin *this)
{
  ProductionWin *v1; // esi@1

  v1 = this;
  this->m_pkSkillListWin->m_nViewStartPos = 0;
  ProductionWin::RefreshProductSkillList(this);
  SlideListWin::SetCurSelIndex(v1->m_pkSkillListWin, 1);
  SlideListWin::UpdateViewList(v1->m_pkSkillListWin);
  if ( !v1->m_bIsProducing )
    ProductionWin::OnSelChange(v1);
  NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
}

//----- (0057CAF0) --------------------------------------------------------
bool __thiscall ProductionWin::Create(ProductionWin *this, PgFrameWork *pkFrameWork)
{
  ProductionWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  PgWin *v10; // eax@13
  D3DXCOLOR v11; // ST2C_16@13
  D3DXCOLOR v12; // ST24_16@13
  char *v13; // eax@13
  D3DXCOLOR v14; // ST24_16@13
  char *v15; // eax@13
  D3DXCOLOR v16; // ST24_16@13
  D3DXCOLOR v17; // ST24_16@13
  PgWinText *v18; // eax@13
  PgWin *v19; // edi@13
  D3DXCOLOR v20; // ST2C_16@13
  char *v21; // eax@13
  NiSourceTexture *v22; // edi@13
  PgWin *v23; // edi@15
  D3DXCOLOR v24; // ST30_16@15
  char *v25; // eax@15
  D3DXCOLOR v26; // ST30_16@15
  char *v27; // eax@15
  PgWin *v28; // eax@15
  D3DXCOLOR v29; // ST30_16@15
  PgWinText *v30; // eax@15
  PgWinSpr *v31; // ecx@15
  int v32; // eax@15
  PgWinSpr *v33; // ecx@15
  PgSprData *v34; // eax@15
  PgWin *v35; // eax@15
  ItemIcon *v36; // eax@15
  signed int v37; // ebx@15
  ItemIcon **v38; // edi@15
  char *v39; // eax@16
  PgSprData *v40; // eax@16
  PgWin *v41; // eax@16
  MaterialItemIcon *v42; // eax@16
  D3DXCOLOR v43; // ST28_16@16
  char *v44; // eax@16
  D3DXCOLOR v45; // ST28_16@16
  char *v46; // eax@16
  D3DXCOLOR v47; // ST28_16@17
  SLWCreateInfo::Item *v48; // edi@17
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v49; // edi@17
  SLWCreateInfo::Item *v50; // edi@23
  SLWCreateInfo::Item *v51; // edi@25
  PgSprData *v52; // eax@27
  SlideListWin *v53; // eax@27
  PgSprData *v54; // eax@27
  SlideBar *v55; // eax@27
  NiNode *v56; // esi@29
  const char *v57; // [sp+8h] [bp-98h]@11
  int *v58; // [sp+Ch] [bp-94h]@11
  int *v59; // [sp+10h] [bp-90h]@11
  NiSourceTexture *v60; // [sp+14h] [bp-8Ch]@11
  unsigned int v61; // [sp+18h] [bp-88h]@1
  SLWCreateInfo kCreateInfo; // [sp+28h] [bp-78h]@17
  int v63; // [sp+44h] [bp-5Ch]@15
  NiAVObject *__formal; // [sp+48h] [bp-58h]@16
  UIUtil ui; // [sp+4Ch] [bp-54h]@10
  int iYOff; // [sp+60h] [bp-40h]@4
  int iXOff; // [sp+64h] [bp-3Ch]@4
  int iLeft; // [sp+68h] [bp-38h]@11
  int iTop; // [sp+6Ch] [bp-34h]@11
  NiPointer<NiNode> spNode; // [sp+70h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+74h] [bp-2Ch]@17
  unsigned int v72; // [sp+90h] [bp-10h]@1
  int v73; // [sp+9Ch] [bp-4h]@1
  int v74; // [sp+A0h] [bp+0h]@1

  v72 = (unsigned int)&v74 ^ __security_cookie;
  v61 = (unsigned int)&v74 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v73 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ProductWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "ProductionWin", 0) )
  {
    v6 = spNode.m_pObject;
    v73 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v73) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v60 = v8;
    v59 = &iTop;
    v58 = &iLeft;
    v57 = "Theme";
  }
  else
  {
    v60 = 0;
    v59 = &iTop;
    v58 = &iLeft;
    v57 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v57, v58, v59, v60);
  PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "IconSlot", 0);
  v10 = (PgWin *)UIUtil::CreateSpr(&ui, "ProductSkill", 0);
  LODWORD(v11.r) = (_DWORD)Color::m_kDxWhiteColor.r;
  *(_QWORD *)&v11.g = *(_QWORD *)&Color::m_kDxWhiteColor.g;
  v11.a = Color::m_kDxWhiteColor.a;
  v2->m_pkProductSkillName = UIUtil::CreateAttachedText(&ui, v10, "ProductSkill", COERCE_D3DXCOLOR(v11.r), 5u);
  *(_QWORD *)&v12.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v12.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v13 = TextData::Get(0xD8FAF1F6u);
  UIUtil::CreateText(&ui, "Product", v13, 0, COERCE_D3DXCOLOR(v12.r), 5u, 0, 0);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = TextData::Get(0xE7063C41u);
  UIUtil::CreateText(&ui, "Material", v15, 0, COERCE_D3DXCOLOR(v14.r), 5u, 0, 0);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkProductionName = UIUtil::CreateText(&ui, "ProductName", &byte_9A7AB7, 0, COERCE_D3DXCOLOR(v16.r), 5u, 0, 0);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v18 = UIUtil::CreateText(&ui, "ProductItemIntro", &byte_9A7AC1, 1u, COERCE_D3DXCOLOR(v17.r), 0, 0, 0);
  v2->m_pkProductionDesc = v18;
  v18->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
  UIUtil::CreateBtn(&ui, 6u, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  v19 = (PgWin *)UIUtil::CreateBtn(&ui, 6u, "CancelNor", "CancelOver", "CancelClick", 0, 0);
  LODWORD(v20.r) = (_DWORD)Color::m_kDxWhiteColor.r;
  *(_QWORD *)&v20.g = *(_QWORD *)&Color::m_kDxWhiteColor.g;
  v20.a = Color::m_kDxWhiteColor.a;
  v21 = TextData::Get(0x9EA4A8EFu);
  UIUtil::CreateAttachedText(&ui, v19, v21, COERCE_D3DXCOLOR(v20.r), 5u);
  v22 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v61) )
    UIUtil::CreateBtn(&ui, 7u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v22);
  v23 = (PgWin *)UIUtil::CreateBtn(&ui, 1u, "ProductNor", "ProductOver", "ProductClick", 0, 0);
  *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v25 = TextData::Get(0xD8FAF1F6u);
  v2->m_pkProduceBtnText = UIUtil::CreateAttachedText(&ui, v23, v25, COERCE_D3DXCOLOR(v24.r), 5u);
  v2->m_pkProductCountIncBtn = UIUtil::CreateBtn(&ui, 3u, "NextNumNor", "NextNumOver", "NextNumClick", 0, 0);
  v2->m_pkProductCountDecBtn = UIUtil::CreateBtn(&ui, 2u, "PreNumNor", "PreNumOver", "PreNumClick", 0, 0);
  *(_QWORD *)&v26.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v26.b = qword_A746E8;
  v27 = TextData::Get(0xE9E5F047u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v27, COERCE_D3DXCOLOR(v26.r), 5u);
  UIUtil::CreateSpr(&ui, "Fill_Skill_Panel", 0);
  UIUtil::CreateSpr(&ui, "Fill_Skill_Back", 0);
  v28 = (PgWin *)UIUtil::CreateSpr(&ui, "Fill_Skill", 0);
  v2->m_pkLearnGauge = (PgWinSpr *)v28;
  *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxYellowColor;
  *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
  v30 = UIUtil::CreateAttachedText(&ui, v28, "Fill_Skill", COERCE_D3DXCOLOR(v29.r), 5u);
  v31 = v2->m_pkLearnGauge;
  v2->m_pkSkillValue = v30;
  v32 = ((int (*)(void))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v33 = v2->m_pkLearnGauge;
  v2->m_uiGaugeWidth = v32;
  ((void (__stdcall *)(_DWORD))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(0);
  v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TargetSlot", &iLeft, &iTop, 0);
  v35 = (PgWin *)PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v36 = ItemIcon::CreateWin(3, 3, v35);
  v2->m_pkProductItemIcon = v36;
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v36,
    0);
  ItemIcon::ShowLotText(v2->m_pkProductItemIcon, 0);
  v2->m_pkProductItemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
  v37 = 1;
  v38 = (ItemIcon **)v2->m_apkMaterialIcon;
  v63 = 10;
  do
  {
    __formal = (NiAVObject *)spNode.m_pObject;
    v39 = fs("MaterialSlot%02d");
    v40 = PgSprData::Create(__formal, v39, &iLeft, &iTop, 0);
    v41 = (PgWin *)PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v42 = MaterialItemIcon::CreateWin(1, 1, v41);
    *v38 = (ItemIcon *)v42;
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v42,
      0);
    ItemIcon::ShowLotText(*v38, 0);
    (*v38)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    *(_QWORD *)&v43.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v43.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v44 = fs("MaterialIntro%02d");
    *(v38 - 26) = (ItemIcon *)UIUtil::CreateText(&ui, v44, &byte_9A7AC2, 1u, COERCE_D3DXCOLOR(v43.r), 0, 0, 1);
    *(_QWORD *)&v45.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v45.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v46 = fs("MaterialIntroNum%02d");
    *(v38 - 16) = (ItemIcon *)UIUtil::CreateText(&ui, v46, &byte_9A7AC3, 1u, COERCE_D3DXCOLOR(v45.r), 0, 0, 0);
    ++v38;
    ++v37;
    --v63;
  }
  while ( v63 );
  *(_QWORD *)&v47.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v47.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkProduceItemCountText = UIUtil::CreateText(&ui, "Num", &byte_9A7ADE, 0, COERCE_D3DXCOLOR(v47.r), 5u, 0, 0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v73) = 2;
  v48 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v48->nItemType = 1;
  v48->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  v49 = &v48->vecNodeName;
  LOBYTE(v73) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v49,
    &thisa);
  LOBYTE(v73) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v73) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v49,
    &thisa);
  LOBYTE(v73) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v73) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v49,
    &thisa);
  LOBYTE(v73) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v50 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v50->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column", 6u);
  LOBYTE(v73) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v50->vecNodeName,
    &thisa);
  LOBYTE(v73) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v50->pNode = spNode.m_pObject;
  v51 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v51->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ProductSkillTab", 0xFu);
  LOBYTE(v73) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v51->vecNodeName,
    &thisa);
  LOBYTE(v73) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v51->pNode = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ColumnBox", &iLeft, &iTop, 0);
  v53 = SlideListWin::CreateWin(
          iLeft - iXOff,
          iTop - iYOff,
          v52,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          1u,
          0);
  v2->m_pkSkillListWin = v53;
  v53->m_uiLClickMsg = 5;
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, 0);
  v55 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar",
          "SlideBar_UpBtn",
          "SlideBar_DnBtn",
          v54,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSkillSlideBar = v55;
  v55->m_uiClickMsg = 4;
  v2->m_pkSkillSlideBar->m_eType = 1;
  ((void (__thiscall *)(ProductionWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0);
  LOBYTE(v73) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)__formal);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v73) = 0;
  UIUtil::_UIUtil(&ui);
  v56 = spNode.m_pObject;
  v73 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v56 )
    v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v56, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0057D520) --------------------------------------------------------
void *__thiscall MaterialItemIcon::_scalar_deleting_destructor_(MaterialItemIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0057D550) --------------------------------------------------------
void *__thiscall ProductionWin::_vector_deleting_destructor_(ProductionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ProductionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ProductionWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A8044: using guessed type int (__stdcall *ProductionWin___vftable_)(int uiFlags);
// 9A8064: using guessed type int (__thiscall *ProductionWin___vftable_)(void *p, char);

//----- (0057D590) --------------------------------------------------------
ProduceViewInfo *__cdecl ProduceViewInfoTable::GetByID(unsigned __int16 kSkillID)
{
  ProduceViewInfo *result; // eax@2
  unsigned int v2; // esi@3

  if ( kSkillID == -1 )
  {
    result = 0;
  }
  else
  {
    v2 = 0;
    if ( ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
    {
      while ( 1 )
      {
        result = (ProduceViewInfo *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 4),
                                      v2);
        if ( result->ID == kSkillID )
          break;
        ++v2;
        if ( v2 >= ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
          goto LABEL_6;
      }
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  return result;
}
// A97E34: using guessed type int ITableBase_ProduceViewInfo_ProduceViewInfoTable___ms_pkTable;

//----- (0057D5E0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_long_ProduceInfo___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_ProduceInfo__>>_1>>::insert<std::pair<unsigned_long_const_ProduceInfo__>>(std::_Tree<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> *result, std::pair<unsigned int,Effect *> *_Val)
{
  std::_Tree<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v5; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v6; // ecx@1
  bool v7; // zf@1
  const int v8; // edi@2
  int v9; // ecx@7
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,bool> *v10; // eax@7

  v3 = this;
  v4 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
         (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
         (std::pair<int const ,int> *)_Val);
  v5 = v3->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = v6->_Isnil == 0;
  LOBYTE(_Val) = 1;
  if ( v7 )
  {
    v8 = v4->_Myval.baseclass_0.first;
    do
    {
      v5 = v6;
      LOBYTE(_Val) = v8 < v6->_Myval.baseclass_0.first;
      if ( (_BYTE)_Val )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                     (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v3,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Val,
                     (bool)_Val,
                     (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5,
                     v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v10 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  result->baseclass_0.second = 1;
  return v10;
}

//----- (0057D650) --------------------------------------------------------
void __thiscall ProductSkillSelectWin::OnHelpLink(ProductSkillSelectWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ProductSkillSelect");
}

//----- (0057D680) --------------------------------------------------------
void __thiscall ProductSkillSelectWin::ProductSkillSelectWin(ProductSkillSelectWin *this)
{
  ProductSkillSelectWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ProductSkillSelectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ProductSkillSelectWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_pkMsgBox = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9A8514: using guessed type int (__stdcall *ProductSkillSelectWin___vftable_)(int uiFlags);
// 9A8534: using guessed type int (__thiscall *ProductSkillSelectWin___vftable_)(void *p, char);

//----- (0057D6E0) --------------------------------------------------------
void __thiscall ProductSkillSelectWin::_ProductSkillSelectWin(ProductSkillSelectWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ProductSkillSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ProductSkillSelectWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9A8514: using guessed type int (__stdcall *ProductSkillSelectWin___vftable_)(int uiFlags);
// 9A8534: using guessed type int (__thiscall *ProductSkillSelectWin___vftable_)(void *p, char);

//----- (0057D710) --------------------------------------------------------
bool __thiscall ProductSkillSelectWin::Create(ProductSkillSelectWin *this, PgFrameWork *pkFrameWork)
{
  ProductSkillSelectWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  D3DXCOLOR v10; // ST48_16@13
  char *v11; // eax@13
  PgWin *v12; // edi@13
  D3DXCOLOR v13; // ST48_16@13
  char *v14; // eax@13
  PgWin *v15; // edi@13
  D3DXCOLOR v16; // ST48_16@13
  char *v17; // eax@13
  NiSourceTexture *v18; // edi@13
  NiNode *v19; // esi@16
  D3DXCOLOR v20; // ST40_16@21
  D3DXCOLOR v21; // ST40_16@23
  SkillIcon *v22; // edi@24
  ProduceViewInfo *v23; // eax@24
  D3DXCOLOR v24; // ST40_16@25
  D3DXCOLOR v25; // ST40_16@26
  char *v26; // eax@26
  SkillIcon *v27; // edi@27
  ProduceViewInfo *v28; // eax@27
  D3DXCOLOR v29; // ST40_16@28
  D3DXCOLOR v30; // ST40_16@29
  char *v31; // eax@29
  SkillIcon *v32; // edi@30
  ProduceViewInfo *v33; // eax@30
  D3DXCOLOR v34; // ST40_16@31
  D3DXCOLOR v35; // ST40_16@32
  char *v36; // eax@32
  SkillIcon *v37; // edi@33
  ProduceViewInfo *v38; // eax@33
  D3DXCOLOR v39; // ST40_16@34
  D3DXCOLOR v40; // ST40_16@35
  char *v41; // eax@35
  SkillIcon *v42; // edi@36
  ProduceViewInfo *v43; // eax@36
  D3DXCOLOR v44; // ST40_16@37
  D3DXCOLOR v45; // ST40_16@38
  char *v46; // eax@38
  const char *v47; // [sp+4Ch] [bp-5Ch]@11
  int *v48; // [sp+50h] [bp-58h]@11
  int *v49; // [sp+54h] [bp-54h]@11
  NiSourceTexture *v50; // [sp+58h] [bp-50h]@11
  UIUtil ui; // [sp+6Ch] [bp-3Ch]@10
  int uiWidth; // [sp+80h] [bp-28h]@15
  int uiHeight; // [sp+84h] [bp-24h]@15
  int iXOff; // [sp+88h] [bp-20h]@4
  int iYOff; // [sp+8Ch] [bp-1Ch]@4
  int iLeft; // [sp+90h] [bp-18h]@11
  int iTop; // [sp+94h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+98h] [bp-10h]@1
  int v59; // [sp+A4h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v59 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ProductSkillSelect.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "ProductSelectWin", 0) )
  {
    v6 = spNode.m_pObject;
    v59 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v59) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v50 = v8;
    v49 = &iTop;
    v48 = &iLeft;
    v47 = "Theme";
  }
  else
  {
    v50 = 0;
    v49 = &iTop;
    v48 = &iLeft;
    v47 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v47, v48, v49, v50);
  PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "IconSlot", 0);
  UIUtil::CreateSpr(&ui, "Plane", 0);
  *(_QWORD *)&v10.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v10.b = qword_A746E8;
  v11 = TextData::Get(0xE90AF0F0u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v11, COERCE_D3DXCOLOR(v10.r), 5u);
  UIUtil::CreateSpr(&ui, "IconSlotBox01", 0);
  UIUtil::CreateSpr(&ui, "IconSlotBox02", 0);
  UIUtil::CreateSpr(&ui, "IconSlotBox03", 0);
  UIUtil::CreateSpr(&ui, "IconSlotBox04", 0);
  UIUtil::CreateSpr(&ui, "IconSlotBox05", 0);
  UIUtil::CreateSpr(&ui, "IconSlotBox06", 0);
  UIUtil::CreateSpr(&ui, "IconSlotBox07", 0);
  UIUtil::CreateSpr(&ui, "IconSlotBox08", 0);
  UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
  v12 = (PgWin *)UIUtil::CreateBtn(&ui, 1u, "Btn01Nor", "Btn01Over", "Btn01Click", 0, 0);
  *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v14 = TextData::Get(0x4F5F499Fu);
  UIUtil::CreateAttachedText(&ui, v12, v14, COERCE_D3DXCOLOR(v13.r), 5u);
  v15 = (PgWin *)UIUtil::CreateBtn(&ui, 2u, "Btn02Nor", "Btn02Over", "Btn02Click", 0, 0);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v17 = TextData::Get(0x88A297E1u);
  UIUtil::CreateAttachedText(&ui, v15, v17, COERCE_D3DXCOLOR(v16.r), 5u);
  v18 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    UIUtil::CreateBtn(&ui, 5u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v18);
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "IconSlot00",
         &iLeft,
         &iTop,
         (unsigned int *)&uiWidth,
         (unsigned int *)&uiHeight) )
  {
    v2->m_akSelectedSkill[0].pkSlot = IconSlotWin::CreateWin(
                                        iLeft - iXOff,
                                        iTop - iYOff,
                                        &v2->baseclass_0.baseclass_0.baseclass_0);
    *(_QWORD *)&v20.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v20.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v2->m_akSelectedSkill[0].pkTitle = UIUtil::CreateText(
                                         &ui,
                                         "IconTxt01",
                                         &byte_9A82A6,
                                         0,
                                         COERCE_D3DXCOLOR(v20.r),
                                         5u,
                                         0,
                                         0);
    if ( !PgUtil::GetTriShapeRect(
            &spNode.m_pObject->baseclass_0,
            "IconSlot01",
            &iLeft,
            &iTop,
            (unsigned int *)&uiWidth,
            (unsigned int *)&uiHeight)
      || (v2->m_akSelectedSkill[1].pkSlot = IconSlotWin::CreateWin(
                                              iLeft - iXOff,
                                              iTop - iYOff,
                                              &v2->baseclass_0.baseclass_0.baseclass_0),
          *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor,
          *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b,
          v2->m_akSelectedSkill[1].pkTitle = UIUtil::CreateText(
                                               &ui,
                                               "IconTxt02",
                                               &byte_9A82A7,
                                               0,
                                               COERCE_D3DXCOLOR(v21.r),
                                               5u,
                                               0,
                                               0),
          !PgUtil::GetTriShapeRect(
             &spNode.m_pObject->baseclass_0,
             "IconSlot02",
             &iLeft,
             &iTop,
             (unsigned int *)&uiWidth,
             (unsigned int *)&uiHeight)) )
      goto LABEL_41;
    v22 = SkillIcon::CreateWin(iLeft - iXOff, iTop - iYOff, &v2->baseclass_0.baseclass_0.baseclass_0);
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v22,
      3u);
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor(
      (NiRefObject *)v22,
      4u);
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v22,
      29100u);
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[141].__vecDelDtor(
      (NiRefObject *)v22,
      29100u);
    SkillIcon::SetSkill(v22, 0x71ACu);
    v23 = ProduceViewInfoTable::GetByID(0x71ACu);
    if ( v23 )
    {
      *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      UIUtil::CreateText(&ui, "IconTxt03", v23->Name, 0, COERCE_D3DXCOLOR(v24.r), 5u, 0, 0);
    }
    *(_QWORD *)&v25.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v25.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v26 = TextData::Get(0x86FAC9DEu);
    UIUtil::CreateText(&ui, "IconTxt03_", v26, 0, COERCE_D3DXCOLOR(v25.r), 1u, 0, 0);
    if ( !PgUtil::GetTriShapeRect(
            &spNode.m_pObject->baseclass_0,
            "IconSlot03",
            &iLeft,
            &iTop,
            (unsigned int *)&uiWidth,
            (unsigned int *)&uiHeight) )
      goto LABEL_41;
    v27 = SkillIcon::CreateWin(iLeft - iXOff, iTop - iYOff, &v2->baseclass_0.baseclass_0.baseclass_0);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v27,
      3u);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor(
      (NiRefObject *)v27,
      4u);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v27,
      29101u);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[141].__vecDelDtor(
      (NiRefObject *)v27,
      29101u);
    SkillIcon::SetSkill(v27, 0x71ADu);
    v28 = ProduceViewInfoTable::GetByID(0x71ADu);
    if ( v28 )
    {
      *(_QWORD *)&v29.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v29.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      UIUtil::CreateText(&ui, "IconTxt04", v28->Name, 0, COERCE_D3DXCOLOR(v29.r), 5u, 0, 0);
    }
    *(_QWORD *)&v30.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v30.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v31 = TextData::Get(0x81B1C2E3u);
    UIUtil::CreateText(&ui, "IconTxt04_", v31, 0, COERCE_D3DXCOLOR(v30.r), 1u, 0, 0);
    if ( !PgUtil::GetTriShapeRect(
            &spNode.m_pObject->baseclass_0,
            "IconSlot04",
            &iLeft,
            &iTop,
            (unsigned int *)&uiWidth,
            (unsigned int *)&uiHeight) )
      goto LABEL_41;
    v32 = SkillIcon::CreateWin(iLeft - iXOff, iTop - iYOff, &v2->baseclass_0.baseclass_0.baseclass_0);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v32,
      3u);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor(
      (NiRefObject *)v32,
      4u);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v32,
      29102u);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[141].__vecDelDtor(
      (NiRefObject *)v32,
      29102u);
    SkillIcon::SetSkill(v32, 0x71AEu);
    v33 = ProduceViewInfoTable::GetByID(0x71AEu);
    if ( v33 )
    {
      *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      UIUtil::CreateText(&ui, "IconTxt05", v33->Name, 0, COERCE_D3DXCOLOR(v34.r), 5u, 0, 0);
    }
    *(_QWORD *)&v35.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v35.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v36 = TextData::Get(0x84ECC9E4u);
    UIUtil::CreateText(&ui, "IconTxt05_", v36, 0, COERCE_D3DXCOLOR(v35.r), 1u, 0, 0);
    if ( !PgUtil::GetTriShapeRect(
            &spNode.m_pObject->baseclass_0,
            "IconSlot05",
            &iLeft,
            &iTop,
            (unsigned int *)&uiWidth,
            (unsigned int *)&uiHeight) )
      goto LABEL_41;
    v37 = SkillIcon::CreateWin(iLeft - iXOff, iTop - iYOff, &v2->baseclass_0.baseclass_0.baseclass_0);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v37,
      3u);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor(
      (NiRefObject *)v37,
      4u);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v37,
      29104u);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[141].__vecDelDtor(
      (NiRefObject *)v37,
      29104u);
    SkillIcon::SetSkill(v37, 0x71B0u);
    v38 = ProduceViewInfoTable::GetByID(0x71B0u);
    if ( v38 )
    {
      *(_QWORD *)&v39.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v39.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      UIUtil::CreateText(&ui, "IconTxt06", v38->Name, 0, COERCE_D3DXCOLOR(v39.r), 5u, 0, 0);
    }
    *(_QWORD *)&v40.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v40.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v41 = TextData::Get(0xCD01BC29u);
    UIUtil::CreateText(&ui, "IconTxt06_", v41, 0, COERCE_D3DXCOLOR(v40.r), 1u, 0, 0);
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "IconSlot06",
           &iLeft,
           &iTop,
           (unsigned int *)&uiWidth,
           (unsigned int *)&uiHeight) )
    {
      v42 = SkillIcon::CreateWin(iLeft - iXOff, iTop - iYOff, &v2->baseclass_0.baseclass_0.baseclass_0);
      v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
        (NiRefObject *)v42,
        3u);
      v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor(
        (NiRefObject *)v42,
        4u);
      v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v42,
        29105u);
      v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[141].__vecDelDtor(
        (NiRefObject *)v42,
        29105u);
      SkillIcon::SetSkill(v42, 0x71B1u);
      v43 = ProduceViewInfoTable::GetByID(0x71B1u);
      if ( v43 )
      {
        *(_QWORD *)&v44.r = *(_QWORD *)&Color::m_kDxWhiteColor;
        *(_QWORD *)&v44.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
        UIUtil::CreateText(&ui, "IconTxt07", v43->Name, 0, COERCE_D3DXCOLOR(v44.r), 5u, 0, 0);
      }
      *(_QWORD *)&v45.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v45.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v46 = TextData::Get(0xCAF8C8E4u);
      UIUtil::CreateText(&ui, "IconTxt07_", v46, 0, COERCE_D3DXCOLOR(v45.r), 1u, 0, 0);
      ((void (__thiscall *)(ProductSkillSelectWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
      LOBYTE(v59) = 0;
      UIUtil::_UIUtil(&ui);
      v59 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
LABEL_41:
      LOBYTE(v59) = 0;
      UIUtil::_UIUtil(&ui);
      v59 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v59) = 0;
    UIUtil::_UIUtil(&ui);
    v19 = spNode.m_pObject;
    v59 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v19 )
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0057E1F0) --------------------------------------------------------
void __thiscall ProductSkillSelectWin::DirectMessage(ProductSkillSelectWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ProductSkillSelectWin *v4; // esi@1
  IDirectMessenger *v5; // eax@5
  float v6; // ecx@9
  unsigned __int16 v7; // di@9
  unsigned __int16 v8; // bx@9
  float v9; // ecx@11
  signed int v10; // edi@18
  char *v11; // ecx@19
  char *v12; // eax@24
  int v13; // eax@30
  ProduceViewInfo *v14; // eax@32
  signed int v15; // edi@34
  char *v16; // ecx@35
  char *v17; // eax@40
  float v18; // esi@48
  int v19; // edi@48
  char *v20; // eax@48

  v4 = this;
  switch ( iMsgTag )
  {
    case 3:
      v15 = -1;
      if ( pkFrom )
        v16 = (char *)&pkFrom[-19] - 4;
      else
        v16 = 0;
      if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) == v16 )
        v15 = 0;
      if ( pkFrom )
        v17 = (char *)&pkFrom[-19] - 4;
      else
        v17 = 0;
      if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) == v17 )
      {
        v15 = 1;
      }
      else
      {
        if ( v15 < 0 || v15 >= 2 )
          return;
      }
      if ( IconSlotWin::GetSkill(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2 * v15])) != -1
        && *(_BYTE *)(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2 * v15])
                    + 254) )
      {
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale) = 12;
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)1;
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)IconSlotWin::GetSkill(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2 * v15]));
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr = 0;
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.x) = (char *)v4 - 232;
        PgCursor::ms_pkDrop = (int)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1];
        IconSlotWin::Clear(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2 * v15]));
        v18 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2 * v15 + 2];
        v19 = *LODWORD(v18);
        v20 = TextData::Get(0x7DEEC8DDu);
        (*(void (__thiscall **)(_DWORD, char *))(v19 + 472))(LODWORD(v18), v20);
      }
      break;
    case 22:
      v10 = -1;
      if ( pkFrom )
        v11 = (char *)&pkFrom[-19] - 4;
      else
        v11 = 0;
      if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) == v11 )
        v10 = 0;
      if ( pkFrom )
        v12 = (char *)&pkFrom[-19] - 4;
      else
        v12 = 0;
      if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) == v12 )
      {
        v10 = 1;
      }
      else
      {
        if ( v10 < 0 || v10 >= 2 )
          return;
      }
      v13 = *(_DWORD *)pvBody;
      if ( *(_DWORD *)(*(_DWORD *)pvBody + 8) == 12 )
      {
        if ( *(_DWORD *)(v13 + 16) == 1 )
        {
          *((_BYTE *)pvBody + 12) = 1;
          v14 = ProduceViewInfoTable::GetByID(*(_DWORD *)(v13 + 20));
          if ( v14 )
            (*(void (__stdcall **)(char *))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2 * v10 + 2])
                                          + 472))(v14->Name);
        }
      }
      break;
    case 27:
      v5 = pkFrom ? (IDirectMessenger *)((char *)&pkFrom[-19] - 4) : 0;
      if ( v5 == LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]) )
      {
        if ( !*(_DWORD *)pvBody )
        {
          v6 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
          v7 = -1;
          v8 = -1;
          if ( *(_BYTE *)(LODWORD(v6) + 254) )
            v7 = IconSlotWin::GetSkill(LODWORD(v6));
          v9 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
          if ( *(_BYTE *)(LODWORD(v9) + 254) )
            v8 = IconSlotWin::GetSkill(LODWORD(v9));
          if ( v7 != -1 )
          {
            LOWORD(pkFrom) = v7;
            NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x12u, 0x22u, &pkFrom, 2);
          }
          if ( v8 != -1 )
          {
            LOWORD(pkFrom) = v8;
            NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x12u, 0x22u, &pkFrom, 2);
          }
        }
        PgWin::PostMsg((PgWin *)((char *)v4 - 232), (PgWin *)((char *)v4 - 232), 1u, 0, 0);
      }
      break;
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0057E430) --------------------------------------------------------
void __thiscall ProductSkillSelectWin::OnCommand(ProductSkillSelectWin *this, unsigned int wParam, int lParam)
{
  ProductSkillSelectWin *v3; // esi@1
  IconSlotWin *v4; // ecx@3
  IconSlotWin *v5; // ecx@6
  IconSlotWin *v6; // ecx@9
  signed __int16 v7; // bx@9
  signed __int16 v8; // di@9
  IconSlotWin *v9; // ecx@11
  char *v10; // ST0C_4@15
  char *v11; // ST08_4@15
  char *v12; // eax@17
  char *v13; // edx@17
  char v14; // cl@18
  char *v15; // eax@20
  char *v16; // edx@20
  char v17; // cl@21
  char *v18; // eax@22
  MsgBox *v19; // eax@22
  PgFrameWork *v20; // eax@26
  char acSkill[128]; // [sp+4h] [bp-84h]@9
  unsigned int v22; // [sp+84h] [bp-4h]@1
  int v23; // [sp+88h] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = this;
  switch ( wParam )
  {
    case 3u:
      this->m_kDropContents.m_eSenderType = 12;
      this->m_kDropContents.m_eType = 1;
      this->m_kDropContents.m_apvParam[0] = (void *)(unsigned __int16)lParam;
      this->m_kDropContents.m_uiSenderIndex = 0;
      this->m_kDrop.m_pkSender = (PgWin *)this;
      PgCursor::ms_pkDrop = (int)&this->m_kDrop;
      return;
    case 4u:
      v4 = this->m_akSelectedSkill[0].pkSlot;
      if ( v4->baseclass_0.m_bDroppable && IconSlotWin::GetSkill(v4) == -1 )
      {
        IconSlotWin::SetSkill(v3->m_akSelectedSkill[0].pkSlot, lParam);
      }
      else
      {
        v5 = v3->m_akSelectedSkill[1].pkSlot;
        if ( v5->baseclass_0.m_bDroppable )
        {
          if ( IconSlotWin::GetSkill(v5) == -1 )
            IconSlotWin::SetSkill(v3->m_akSelectedSkill[1].pkSlot, lParam);
        }
      }
      return;
    case 1u:
      v6 = this->m_akSelectedSkill[0].pkSlot;
      acSkill[0] = 0;
      v7 = -1;
      v8 = -1;
      if ( v6->baseclass_0.m_bDroppable )
        v7 = IconSlotWin::GetSkill(v6);
      v9 = v3->m_akSelectedSkill[1].pkSlot;
      if ( v9->baseclass_0.m_bDroppable )
        v8 = IconSlotWin::GetSkill(v9);
      if ( v7 != -1 )
      {
        if ( v8 == -1 )
        {
          v15 = ProduceViewInfoTable::GetByID(v7)->Name;
          v16 = (char *)(acSkill - v15);
          do
          {
            v17 = *v15;
            v15[(_DWORD)v16] = *v15;
            ++v15;
          }
          while ( v17 );
        }
        else
        {
          v10 = ProduceViewInfoTable::GetByID(v8)->Name;
          v11 = ProduceViewInfoTable::GetByID(v7)->Name;
          sprintf(acSkill, "%s, %s");
        }
LABEL_22:
        ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(acSkill);
        v18 = TextData::Get(0x73B8DCE0u);
        v19 = MsgBox::Modeless(MSGBOX_OKCANCEL, v18);
        v3->m_pkMsgBox = v19;
        ((void (__cdecl *)(IDirectMessenger *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        return;
      }
      if ( v8 != -1 )
      {
        v12 = ProduceViewInfoTable::GetByID(v8)->Name;
        v13 = (char *)(acSkill - v12);
        do
        {
          v14 = *v12;
          v12[(_DWORD)v13] = *v12;
          ++v12;
        }
        while ( v14 );
        goto LABEL_22;
      }
      PgWin::PostMsg(&v3->baseclass_0.baseclass_0.baseclass_0, &v3->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      return;
    case 2u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      return;
    case 5u:
      v20 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v20 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v20, "ProductSkillSelect");
      return;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0057E6D0) --------------------------------------------------------
void __thiscall ProductSkillSelectWin::OnShowWin(ProductSkillSelectWin *this)
{
  char *v1; // esi@1
  signed int v2; // ebx@1
  int v3; // edi@2
  char *v4; // eax@2
  signed int v5; // esi@3
  char *v6; // ebx@3
  __int16 v7; // di@4
  unsigned int v8; // esi@7
  void *v9; // eax@8
  PgFrameWork *v10; // eax@14
  char *v11; // [sp+Ch] [bp-Ch]@1
  signed int i; // [sp+10h] [bp-8h]@3
  signed int iBaseSkillCount; // [sp+14h] [bp-4h]@3

  v1 = (char *)this->m_akSelectedSkill;
  v11 = (char *)this->m_akSelectedSkill;
  v2 = 2;
  do
  {
    *(_BYTE *)(*((_DWORD *)v1 + 1) + 254) = 1;
    IconSlotWin::Clear(*((IconSlotWin **)v1 + 1));
    v3 = **(_DWORD **)v1;
    v4 = TextData::Get(0x7DEEC8DDu);
    (*(void (__thiscall **)(_DWORD, char *))(v3 + 472))(*(_DWORD *)v1, v4);
    v1 += 8;
    --v2;
  }
  while ( v2 );
  v5 = 29100;
  iBaseSkillCount = 0;
  v6 = v11;
  i = 29100;
  do
  {
    v7 = v5;
    if ( Skill::IsLearnProdSkill(v5) )
    {
      if ( iBaseSkillCount >= 2 )
        break;
      IconSlotWin::SetSkill(*((IconSlotWin **)v6 + 1), v5);
      *(_BYTE *)(*((_DWORD *)v6 + 1) + 254) = 0;
      if ( (_WORD)v5 != -1 )
      {
        v8 = 0;
        if ( ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
        {
          while ( 1 )
          {
            v9 = CDataReader::GetRecord(
                   (CDataReader *)(ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 4),
                   v8);
            if ( *(_WORD *)v9 == v7 )
              break;
            ++v8;
            if ( v8 >= ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
              goto LABEL_12;
          }
          (*(void (__stdcall **)(char *))(**(_DWORD **)v6 + 472))((char *)v9 + 34);
        }
      }
LABEL_12:
      ++iBaseSkillCount;
      v5 = i;
      v6 += 8;
    }
    ++v5;
    i = v5;
  }
  while ( v5 < 29200 );
  v10 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v10 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v10, BIL_PRODUCTION_1);
}
// A97E34: using guessed type int ITableBase_ProduceViewInfo_ProduceViewInfoTable___ms_pkTable;

//----- (0057E7F0) --------------------------------------------------------
ProductSkillSelectWin *__cdecl ProductSkillSelectWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ProductSkillSelectWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ProductSkillSelectWin::ProductSkillSelectWin((ProductSkillSelectWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ProductSkillSelectWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0057E920) --------------------------------------------------------
void *__thiscall ProductSkillSelectWin::_vector_deleting_destructor_(ProductSkillSelectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ProductSkillSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ProductSkillSelectWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9A8514: using guessed type int (__stdcall *ProductSkillSelectWin___vftable_)(int uiFlags);
// 9A8534: using guessed type int (__thiscall *ProductSkillSelectWin___vftable_)(void *p, char);

//----- (0057E970) --------------------------------------------------------
void __thiscall RebirthMenuWin::SetAutoRevieTime(RebirthMenuWin *this, char auMin)
{
  this->m_fAutoReviveTime = (double)(unsigned __int8)auMin * 60.0;
}

//----- (0057E990) --------------------------------------------------------
void __thiscall RebirthMenuWin::SetDeadTime(RebirthMenuWin *this, float fTime)
{
  this->m_fDeadTime = fTime;
}

//----- (0057E9A0) --------------------------------------------------------
void __thiscall RebirthMenuWin::OnTimer(RebirthMenuWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)((char *)this - 344));
}

//----- (0057E9C0) --------------------------------------------------------
void __thiscall RebirthMenuWin::OnCancel(RebirthMenuWin *this)
{
  PgFrameWork *v1; // eax@1
  GameFrameWork *v2; // esi@1

  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v2 = (GameFrameWork *)v1;
  if ( v1 )
  {
    GameFrameWork::OnOpenReviveMenuWin((GameFrameWork *)v1, 1);
    GameFrameWork::NcCharRebirthRejectCmd(v2);
  }
}

//----- (0057EA00) --------------------------------------------------------
void __thiscall RebirthMenuWin::OnOk(RebirthMenuWin *this)
{
  PgFrameWork *v1; // eax@1
  PgFrameWork *v2; // esi@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v2 = v1;
  if ( v1 )
  {
    GameFrameWork::NcCharRebirthCmd((GameFrameWork *)v1);
    InventoryWin::UnLockAllItem((InventoryWin *)v2[19].m_BackFrameID);
    InventoryWin::UnLockAllEquipItem((InventoryWin *)v2[19].m_BackFrameID);
  }
}

//----- (0057EA40) --------------------------------------------------------
void __thiscall RebirthMenuWin::_RebirthMenuWin(RebirthMenuWin *this)
{
  RebirthMenuWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RebirthMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RebirthMenuWin::_vftable_;
  this->baseclass_158.vfptr = (ITimerVtbl *)&RebirthMenuWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  ITimer::_ITimer(&v1->baseclass_158);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A87DC: using guessed type int (__stdcall *RebirthMenuWin___vftable_)(int);
// 9A87E8: using guessed type int (__stdcall *RebirthMenuWin___vftable_)(int uiFlags);
// 9A8804: using guessed type int (__thiscall *RebirthMenuWin___vftable_)(void *p, char);

//----- (0057EAD0) --------------------------------------------------------
bool __thiscall RebirthMenuWin::Create(RebirthMenuWin *this, PgFrameWork *pkFrameWork)
{
  RebirthMenuWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  PgWinSpr *v10; // eax@13
  PgFont *v11; // eax@15
  int v12; // edi@15
  unsigned int v13; // ebx@17
  PgFont *v14; // ST24_4@17
  unsigned int v15; // ST20_4@17
  int v16; // eax@17
  PgWinText *v17; // eax@17
  int v18; // ebx@17
  PgWinText *v19; // ebx@26
  NiRefObjectVtbl *v20; // edi@26
  char *v21; // eax@26
  PgSprData *v22; // edi@26
  PgWin *v23; // ST28_4@26
  PgWin *v24; // edi@26
  PgFont *v25; // ST24_4@26
  unsigned int v26; // ST20_4@26
  unsigned int v27; // eax@26
  PgWinText *v28; // eax@26
  NiRefObjectVtbl *v29; // edi@26
  char *v30; // eax@26
  PgSprData *v31; // edi@26
  PgWin *v32; // ST28_4@26
  PgWin *v33; // edi@26
  PgFont *v34; // ST24_4@26
  unsigned int v35; // ST20_4@26
  unsigned int v36; // eax@26
  PgWinText *v37; // eax@26
  NiRefObjectVtbl *v38; // edi@26
  char *v39; // eax@26
  NiNode *v40; // esi@27
  const char *v41; // [sp+24h] [bp-40h]@11
  int *v42; // [sp+28h] [bp-3Ch]@11
  int *v43; // [sp+2Ch] [bp-38h]@11
  NiSourceTexture *v44; // [sp+30h] [bp-34h]@11
  PgFont *pkFont; // [sp+44h] [bp-20h]@15
  PgWinText *v46; // [sp+48h] [bp-1Ch]@17
  int uiLeft; // [sp+4Ch] [bp-18h]@4
  int uiTop; // [sp+50h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v50; // [sp+60h] [bp-4h]@1
  signed int i; // [sp+6Ch] [bp+8h]@15

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v50 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "RebirthMenuWin", 0) )
  {
    v6 = spNode.m_pObject;
    v50 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v44 = v8;
    v43 = &uiTop;
    v42 = &uiLeft;
    v41 = "Theme";
  }
  else
  {
    v44 = 0;
    v43 = &uiTop;
    v42 = &uiLeft;
    v41 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v41, v42, v43, v44);
  v10 = PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
  v11 = Font::Get(0);
  pkFont = v11;
  i = 0;
  v12 = (int)v2->m_apkTextWin;
  while ( 1 )
  {
    v13 = v11->m_uiDefHeight;
    v14 = v11;
    v15 = v11->m_uiDefHeight;
    v16 = ((int (__thiscall *)(RebirthMenuWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
    v17 = PgWinText::CreateWin(8, i * (v13 + 1) + 8, v16 - 16, v15, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = *(_DWORD *)v12;
    v46 = v17;
    if ( *(PgWinText **)v12 != v17 )
    {
      if ( v18 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
        v17 = v46;
      }
      *(_DWORD *)v12 = v17;
      if ( v17 )
        InterlockedIncrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 240))(0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v12 + 488))(1);
    v12 += 4;
    ++i;
    if ( i >= 3 )
      break;
    v11 = pkFont;
  }
  v19 = v2->m_apkTextWin[0].m_pObject;
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData2::Get(0x4C507573u);
  v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, 0);
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v23 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_apkButWin[0] = (PgWinBut *)v23;
  v24 = v23;
  v25 = Font::Get(0);
  v26 = ((int (__thiscall *)(PgWin *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v24);
  v27 = ((int (__thiscall *)(PgWin *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v24);
  v28 = PgWinText::CreateWin(0, 0, v27, v26, v25, v23, 0, 0);
  v2->m_apkButTextWin[0] = v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v28,
    5u);
  v29 = v2->m_apkButTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v30 = TextData::Get(0x4F5F499Fu);
  v29[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[0], (unsigned int)v30);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, &uiTop, 0);
  PgSprData::Add(v31, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v31, &spNode.m_pObject->baseclass_0, "BtnOver03");
  v32 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v31, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2->m_apkButWin[1] = (PgWinBut *)v32;
  v33 = v32;
  v34 = Font::Get(0);
  v35 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v33);
  v36 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v33);
  v37 = PgWinText::CreateWin(0, 0, v36, v35, v34, v32, 0, 0);
  v2->m_apkButTextWin[1] = v37;
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v37,
    5u);
  v38 = v2->m_apkButTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v39 = TextData::Get(0x88A297E1u);
  v38[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[1], (unsigned int)v39);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(RebirthMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  v50 = -1;
  if ( spNode.m_pObject )
  {
    v40 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v40 )
        v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v40, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0057EF10) --------------------------------------------------------
void __thiscall RebirthMenuWin::UpdateMeWin(RebirthMenuWin *this, float fCurTime)
{
  RebirthMenuWin *v2; // esi@1
  float v3; // ST20_4@1
  double v4; // st7@1
  char *v5; // eax@4
  char *v6; // eax@4
  char *v7; // eax@5
  PgFrameWork *v8; // eax@7
  GameFrameWork *v9; // esi@7
  int v10; // [sp-4h] [bp-114h]@0
  float fPastTime; // [sp+8h] [bp-108h]@1
  char acStr[256]; // [sp+Ch] [bp-104h]@4
  unsigned int v13; // [sp+10Ch] [bp-4h]@1
  int v14; // [sp+110h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v2 = this;
  v3 = fCurTime - this->m_fDeadTime;
  v4 = v3;
  fPastTime = this->m_fAutoReviveTime - v3;
  if ( this->m_fAutoReviveTime > v4 )
  {
    if ( fPastTime < 60.0 )
    {
      v7 = TextData::Get(0x7795949Cu);
      sprintf(acStr, v7);
    }
    else
    {
      v5 = TextData::Get(0x82998E9Cu);
      v6 = fs(v5);
      sprintf(acStr, v6);
    }
    ((void (__stdcall *)(_DWORD, int))v2->m_apkTextWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
      acStr,
      v10);
    ((void (__stdcall *)(signed int))v2->m_apkTextWin[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1);
    if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
    {
      BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
      PgWin::PostMsg(&v2->baseclass_0.baseclass_0.baseclass_0, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v9 = (GameFrameWork *)v8;
      if ( v8 )
      {
        GameFrameWork::OnOpenReviveMenuWin((GameFrameWork *)v8, 1);
        GameFrameWork::NcCharRebirthRejectCmd(v9);
      }
    }
  }
  else
  {
    PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
}
// A85C00: using guessed type int __security_cookie;
// A9816C: using guessed type int g_pkKeyboard;

//----- (0057F0D0) --------------------------------------------------------
void __thiscall RebirthMenuWin::OnCommand(RebirthMenuWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@3
  GameFrameWork *v4; // esi@3
  PgFrameWork *v5; // eax@5
  PgFrameWork *v6; // esi@5

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v4 = (GameFrameWork *)v3;
      if ( v3 )
      {
        GameFrameWork::OnOpenReviveMenuWin((GameFrameWork *)v3, 1);
        GameFrameWork::NcCharRebirthRejectCmd(v4);
      }
    }
  }
  else
  {
    v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v6 = v5;
    if ( v5 )
    {
      GameFrameWork::NcCharRebirthCmd((GameFrameWork *)v5);
      InventoryWin::UnLockAllItem((InventoryWin *)v6[19].m_BackFrameID);
      InventoryWin::UnLockAllEquipItem((InventoryWin *)v6[19].m_BackFrameID);
    }
  }
}

//----- (0057F150) --------------------------------------------------------
void __thiscall RebirthMenuWin::RebirthMenuWin(RebirthMenuWin *this)
{
  RebirthMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  ITimer::ITimer(&v1->baseclass_158);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RebirthMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RebirthMenuWin::_vftable_;
  v1->baseclass_158.vfptr = (ITimerVtbl *)&RebirthMenuWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9A87DC: using guessed type int (__stdcall *RebirthMenuWin___vftable_)(int);
// 9A87E8: using guessed type int (__stdcall *RebirthMenuWin___vftable_)(int uiFlags);
// 9A8804: using guessed type int (__thiscall *RebirthMenuWin___vftable_)(void *p, char);

//----- (0057F1E0) --------------------------------------------------------
RebirthMenuWin *__cdecl RebirthMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  RebirthMenuWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    RebirthMenuWin::RebirthMenuWin((RebirthMenuWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (RebirthMenuWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0057F310) --------------------------------------------------------
void *__thiscall RebirthMenuWin::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return RebirthMenuWin::_scalar_deleting_destructor_((RebirthMenuWin *)((char *)this - 344), a2);
}

//----- (0057F320) --------------------------------------------------------
void *__thiscall RebirthMenuWin::_scalar_deleting_destructor_(RebirthMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  RebirthMenuWin::_RebirthMenuWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0057F350) --------------------------------------------------------
void __thiscall ReportWin::ReportWin(ReportWin *this)
{
  ReportWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_uiCurFoscus = 0;
  v1->m_pkCharNameInputEdit = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ReportWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ReportWin::_vftable_;
}
// 9A8BA8: using guessed type int (__stdcall *ReportWin___vftable_)(int uiFlags);
// 9A8BC4: using guessed type int (__thiscall *ReportWin___vftable_)(void *p, char);

//----- (0057F380) --------------------------------------------------------
void __thiscall ReportWin::_ReportWin(ReportWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ReportWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ReportWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A8BA8: using guessed type int (__stdcall *ReportWin___vftable_)(int uiFlags);
// 9A8BC4: using guessed type int (__thiscall *ReportWin___vftable_)(void *p, char);

//----- (0057F3A0) --------------------------------------------------------
void __thiscall ReportWin::OnCmdCancel(ReportWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0057F3D0) --------------------------------------------------------
void __thiscall ReportWin::SetCharName(ReportWin *this, const char *name)
{
  if ( this->m_pkCharNameInputEdit )
    ((void (__stdcall *)(_DWORD))this->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(name);
}

//----- (0057F400) --------------------------------------------------------
void __thiscall ReportWin::SetProcessText(ReportWin *this, const char *text)
{
  ((void (__stdcall *)(_DWORD))this->m_pkProcessWinTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(text);
}

//----- (0057F420) --------------------------------------------------------
void __thiscall ReportWin::SetRegID(ReportWin *this, int iRegID)
{
  ReportWin *v2; // esi@1
  char temp[1024]; // [sp+4h] [bp-404h]@1
  unsigned int v4; // [sp+404h] [bp-4h]@1
  int v5; // [sp+408h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  this->m_uiRegId = iRegID;
  sprintf(temp, "%i");
  ((void (__stdcall *)(_DWORD))v2->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(temp);
}
// A85C00: using guessed type int __security_cookie;

//----- (0057F480) --------------------------------------------------------
void __thiscall ReportWin::SetReportInfoInput(ReportWin *this, const char *text)
{
  ((void (__stdcall *)(_DWORD))this->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(text);
}

//----- (0057F4A0) --------------------------------------------------------
void __thiscall ReportWin::SetOKButText(ReportWin *this, const char *text)
{
  ((void (__stdcall *)(_DWORD))this->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(text);
}

//----- (0057F4C0) --------------------------------------------------------
void __thiscall ReportWin::ShowOKButton(ReportWin *this, bool bShow)
{
  ReportWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
  ((void (__stdcall *)(_DWORD))v2->m_pkOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
}

//----- (0057F500) --------------------------------------------------------
void __thiscall ReportWin::OnHelpLink(ReportWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ReportWin");
}

//----- (0057F540) --------------------------------------------------------
bool __thiscall ReportWin::Create(ReportWin *this, PgFrameWork *pkFrameWork)
{
  ReportWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  int v11; // ebx@15
  NiSourceTexture *v12; // eax@15
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@20
  PgWinSpr *v15; // eax@20
  PgFont *v16; // eax@21
  PgWinText *v17; // eax@21
  char *v18; // eax@21
  PgFont *v19; // eax@22
  PgWinText *v20; // eax@22
  char *v21; // eax@22
  PgFont *v22; // eax@23
  char *v23; // eax@23
  EditWin *v24; // eax@23
  NiNode *v25; // edx@23
  PgSprData *v26; // eax@23
  PgFont *v27; // eax@28
  char *v28; // eax@28
  PgSprData *v29; // eax@28
  PgFont *v30; // eax@31
  char *v31; // eax@31
  PgFont *v32; // eax@32
  PgWinText *v33; // eax@32
  PgFont *v34; // ST4C_4@32
  NiSourceTexture *v35; // ecx@32
  PgSprData::PgHitTester *v36; // eax@32
  PgFont *v37; // eax@32
  PgWinText *v38; // eax@32
  char *v39; // ST44_4@32
  NiPointer<PgSprData::PgHitTester> *v40; // ecx@32
  PgFont *v41; // eax@32
  PgWinText *v42; // edi@32
  NiRefObjectVtbl *v43; // ebx@32
  char *v44; // eax@32
  const char *v45; // [sp+40h] [bp-5Ch]@16
  int *v46; // [sp+44h] [bp-58h]@16
  int *v47; // [sp+48h] [bp-54h]@16
  NiSourceTexture *v48; // [sp+4Ch] [bp-50h]@16
  UIUtil ui; // [sp+60h] [bp-3Ch]@23
  unsigned int v50; // [sp+74h] [bp-28h]@23
  NiSourceTexture *pkTexture; // [sp+78h] [bp-24h]@1
  unsigned int uiWidth; // [sp+7Ch] [bp-20h]@20
  unsigned int uiHeight; // [sp+80h] [bp-1Ch]@20
  int uiLeft; // [sp+84h] [bp-18h]@11
  int uiTop; // [sp+88h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+8Ch] [bp-10h]@1
  int v57; // [sp+98h] [bp-4h]@1
  PgSprData *pkTexture8a; // [sp+A4h] [bp+8h]@18
  NiSourceTexture *pkTexture8; // [sp+A4h] [bp+8h]@18
  PgSprData *pkTexture8b; // [sp+A4h] [bp+8h]@19
  NiRefObjectVtbl *pkTexture8c; // [sp+A4h] [bp+8h]@21
  int pkTexture8d; // [sp+A4h] [bp+8h]@22
  PgWinText *pkTexture8e; // [sp+A4h] [bp+8h]@23
  PgWinText *pkTexture8f; // [sp+A4h] [bp+8h]@28
  PgWinText *pkTexture8g; // [sp+A4h] [bp+8h]@31
  int pkTexture8h; // [sp+A4h] [bp+8h]@32
  PgSprData *pkTexture8i; // [sp+A4h] [bp+8h]@32
  unsigned int pkTexture8j; // [sp+A4h] [bp+8h]@32
  NiRefObjectVtbl *pkTexture8k; // [sp+A4h] [bp+8h]@32
  PgSprData *pkTexture8l; // [sp+A4h] [bp+8h]@32
  unsigned int pkTexture8m; // [sp+A4h] [bp+8h]@32

  v2 = this;
  spNode.m_pObject = 0;
  v57 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\ReportWin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "PrivateStoreWin", 0) )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  v11 = uiTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v48 = v12;
    v47 = &uiTop;
    v46 = &uiLeft;
    v45 = "Theme";
  }
  else
  {
    v48 = 0;
    v47 = &uiTop;
    v46 = &uiLeft;
    v45 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v45, v46, v47, v48);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTexture8a = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8a, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTexture8a, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTexture8a, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
  pkTexture8 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTexture8b = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
    PgSprData::Add(pkTexture8b, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTexture8b, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTexture8b, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v15 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v16 = Font::Get(0),
        v17 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11 + 1,
                uiWidth,
                uiHeight,
                v16,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkTitleText = v17,
        v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v17,
          1u),
        ((void (__stdcall *)(__int64 *))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        pkTexture8c = v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v18 = TextData::Get(0xED05F83Bu),
        pkTexture8c[118].__vecDelDtor((NiRefObject *)v2->m_pkTitleText, (unsigned int)v18),
        ((void (__stdcall *)(_DWORD))v2->m_pkTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CharName", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v19 = Font::Get(0),
        v20 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v19,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkCharRegIDNameText = v20,
        pkTexture8d = (int)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118],
        v21 = TextData::Get(0xECF14A2Eu),
        (*(void (__thiscall **)(PgWinText *, char *))pkTexture8d)(v2->m_pkCharRegIDNameText, v21),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ReportText", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_27:
    v57 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v22 = Font::Get(0);
  pkTexture8e = PgWinText::CreateWin(
                  uiLeft - v10,
                  uiTop - v11,
                  uiWidth,
                  uiHeight,
                  v22,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
  pkTexture8e->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTexture8e,
    1u);
  SpScreenText::SetVerticalGap(&pkTexture8e->m_spTextGeom.m_pObject->baseclass_0, 5);
  v50 = (unsigned int)pkTexture8e->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0x383F4141u);
  (*(void (__thiscall **)(PgWinText *, char *))(v50 + 472))(pkTexture8e, v23);
  UIUtil::UIUtil(&ui);
  LOBYTE(v57) = 1;
  UIUtil::SetOffset(&ui, v10, v11 + 2);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v24 = UIUtil::CreateEdit(&ui, "CharNameInput", 14, NORMAL, pkTexture, 0);
  v25 = spNode.m_pObject;
  v2->m_pkCharNameInputEdit = v24;
  BYTE3(pkTexture8e) = PgUtil::GetTriShapeRect(
                         &v25->baseclass_0,
                         "ReportInfoInput",
                         &uiLeft,
                         &uiTop,
                         &uiWidth,
                         &uiHeight);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ReportInfoInput", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( BYTE3(pkTexture8e) )
    v2->m_pkReportInfoInput = EditWin::CreateWin(
                                uiLeft - v10,
                                uiTop - v11,
                                uiWidth,
                                uiHeight,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                MULTILINE,
                                0x100u,
                                4u,
                                0,
                                0,
                                1);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ReportType", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_35;
  v27 = Font::Get(0);
  pkTexture8f = PgWinText::CreateWin(
                  uiLeft - v10,
                  uiTop - v11,
                  uiWidth,
                  uiHeight,
                  v27,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
  v50 = (unsigned int)pkTexture8f->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = TextData::Get(0x9A8FD7D6u);
  (*(void (__thiscall **)(PgWinText *, char *))(v50 + 472))(pkTexture8f, v28);
  BYTE3(pkTexture8f) = PgUtil::GetTriShapeRect(
                         &spNode.m_pObject->baseclass_0,
                         "ReportTypeInput",
                         &uiLeft,
                         &uiTop,
                         &uiWidth,
                         &uiHeight);
  v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ReportTypeInput", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v29, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( BYTE3(pkTexture8f) )
    v2->m_pkReportTypeInput = EditWin::CreateWin(
                                uiLeft - v10,
                                uiTop - v11,
                                uiWidth,
                                uiHeight,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                MULTILINE,
                                0x100u,
                                4u,
                                0,
                                0,
                                1);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ReportInfo", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v30 = Font::Get(0),
        pkTexture8g = PgWinText::CreateWin(
                        uiLeft - v10,
                        uiTop - v11,
                        uiWidth,
                        uiHeight,
                        v30,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        v50 = (unsigned int)pkTexture8g->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v31 = TextData::Get(0xF2F74733u),
        (*(void (__thiscall **)(_DWORD, _DWORD))(v50 + 472))(pkTexture8g, v31),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ReportProcess", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_35:
    LOBYTE(v57) = 0;
    UIUtil::_UIUtil(&ui);
    goto LABEL_27;
  }
  v32 = Font::Get(0);
  v33 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          uiWidth,
          uiHeight,
          v32,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkProcessWinTxt = v33;
  pkTexture8h = (int)&v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
  v34 = Font::Get(LARGEBOLD);
  (*(void (__thiscall **)(PgWinText *))pkTexture8h)(v2->m_pkProcessWinTxt);
  v35 = pkTexture;
  v2->m_pkProcessWinTxt->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  pkTexture8i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, v35);
  PgSprData::Add(pkTexture8i, &spNode.m_pObject->baseclass_0, "OkClick");
  PgSprData::Add(pkTexture8i, &spNode.m_pObject->baseclass_0, "OkOver");
  v2->m_pkOk = PgWinBut::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 pkTexture8i,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0xAu,
                 0,
                 0);
  v36 = pkTexture8i->m_akHitTester.m_pBase->m_pObject;
  pkTexture8j = v36->m_uiHeight;
  v50 = v36->m_uiWidth;
  v37 = Font::Get(0);
  v38 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          v50,
          pkTexture8j,
          v37,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkOkTextWin = v38;
  ((void (__thiscall *)(PgWinText *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v38);
  pkTexture8k = v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v39 = TextData::Get(0xE9013C3Bu);
  ((void (__thiscall *)(PgWinText *))pkTexture8k[118].__vecDelDtor)(v2->m_pkOkTextWin);
  ((void (__cdecl *)(_DWORD, char *, signed int, PgFont *))v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    0,
    v39,
    5,
    v34);
  pkTexture8l = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8l, &spNode.m_pObject->baseclass_0, "CancelClick");
  PgSprData::Add(pkTexture8l, &spNode.m_pObject->baseclass_0, "CancelOver");
  v2->m_pkCancel = PgWinBut::CreateWin(
                     uiLeft - v10,
                     uiTop - v11,
                     pkTexture8l,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0xBu,
                     0,
                     0);
  v40 = pkTexture8l->m_akHitTester.m_pBase;
  pkTexture8m = v40->m_pObject->m_uiHeight;
  v50 = v40->m_pObject->m_uiWidth;
  v41 = Font::Get(0);
  v42 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          v50,
          pkTexture8m,
          v41,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v42,
    5u);
  v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData::Get(0xF0364B3Cu);
  v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v42,
    0);
  ((void (__thiscall *)(ReportWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v57) = 0;
  UIUtil::_UIUtil(&ui);
  v57 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0057FED0) --------------------------------------------------------
void __thiscall ReportWin::OnCmdOk(ReportWin *this)
{
  ReportWin *v1; // esi@1
  unsigned int v2; // eax@1
  int v3; // edi@2
  int v4; // ebx@2
  int v5; // eax@2
  int v6; // ecx@3
  int v7; // edi@3
  char v8; // dl@4
  char *v9; // eax@7
  int v10; // edx@8
  char v11; // cl@9
  int v12; // eax@12
  char v13; // cl@13
  int v14; // eax@16
  EditWin *v15; // ecx@16
  int v16; // eax@16
  EditWin *v17; // ecx@16
  const char *v18; // eax@16
  Name5 v19; // [sp-1Ch] [bp-2Ch]@16
  char *v20; // [sp-8h] [bp-18h]@16
  unsigned int v21; // [sp-4h] [bp-14h]@6
  Name5 *v22; // [sp+Ch] [bp-4h]@16

  v1 = this;
  v2 = this->m_uiMode;
  if ( v2 )
  {
    if ( v2 == 1 )
      GameFrameWork::NcReportCancelReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_uiRegId);
  }
  else
  {
    v3 = ((int (*)(void))this->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v4 = ((int (*)(void))v1->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v5 = ((int (*)(void))v1->m_pkReportTypeInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    if ( !v3 )
      return;
    v6 = v3;
    v7 = v3 + 1;
    do
      v8 = *(_BYTE *)v6++;
    while ( v8 );
    if ( v6 == v7 )
    {
      v21 = -2037871133;
LABEL_7:
      v9 = TextData::Get(v21);
      MsgBox::Modeless(MSGBOX_OK, v9);
      return;
    }
    v10 = v5 + 1;
    do
      v11 = *(_BYTE *)v5++;
    while ( v11 );
    if ( v5 == v10 )
    {
      v21 = -1294866470;
      goto LABEL_7;
    }
    v12 = v4;
    do
      v13 = *(_BYTE *)v12++;
    while ( v13 );
    if ( v12 == v4 + 1 )
    {
      v21 = -1601070202;
      goto LABEL_7;
    }
    v14 = ((int (*)(void))v1->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v15 = v1->m_pkReportTypeInput;
    v21 = v14;
    v16 = ((int (*)(void))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v17 = v1->m_pkCharNameInputEdit;
    v20 = (char *)v16;
    v18 = (const char *)((int (*)(void))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v22 = &v19;
    Name5::Name5(&v19, v18);
    GameFrameWork::NcReportAddReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v19, v20, (char *)v21);
  }
}

//----- (00580000) --------------------------------------------------------
void __thiscall ReportWin::SetMode(ReportWin *this, ReportWin::REPORT_MODE eMode)
{
  ReportWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@3
  char *v4; // eax@3

  v2 = this;
  this->m_uiMode = eMode;
  if ( eMode )
  {
    if ( eMode == 1 )
    {
      ((void (__stdcall *)(_DWORD))this->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_9A8A56);
      ((void (__stdcall *)(_DWORD))v2->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9A8A57);
      ((void (__stdcall *)(_DWORD))v2->m_pkReportTypeInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9A8A5E);
      ((void (__stdcall *)(_DWORD))v2->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v3 = v2->m_pkProcessWinTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v4 = TextData::Get(0x49433B8Fu);
      v3[118].__vecDelDtor((NiRefObject *)v2->m_pkProcessWinTxt, (unsigned int)v4);
      v2->m_pkProcessWinTxt->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD))this->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_9A8A37);
    ((void (__stdcall *)(_DWORD))v2->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9A8A3E);
    ((void (__stdcall *)(_DWORD))v2->m_pkReportTypeInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9A8A3F);
    ((void (__stdcall *)(_DWORD))v2->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v2->m_pkProcessWinTxt->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (00580110) --------------------------------------------------------
void __thiscall ReportWin::SetReportAdd(ReportWin *this, int nRegNum)
{
  ReportWin *v2; // esi@1
  char *v3; // eax@1
  char *v4; // eax@1
  char *v5; // eax@1
  char string; // [sp+4h] [bp-404h]@1
  unsigned int v7; // [sp+404h] [bp-4h]@1
  int v8; // [sp+408h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  this->m_uiRegId = nRegNum;
  sprintf(&string, "%i");
  ((void (__stdcall *)(char *))v2->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&string);
  v3 = TextData::Get(0xE9444134u);
  ((void (__stdcall *)(char *))v2->m_pkCharRegIDNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v3);
  v4 = TextData::Get(0x343D8D8Eu);
  ((void (__stdcall *)(char *))v2->m_pkProcessWinTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v4);
  v5 = TextData::Get(0x31363B3Bu);
  ((void (__stdcall *)(char *))v2->m_pkOkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v5);
  ((void (__stdcall *)(_DWORD))v2->m_pkReportInfoInput->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
}
// A85C00: using guessed type int __security_cookie;

//----- (005801E0) --------------------------------------------------------
void __thiscall ReportWin::SetReportAddErr(ReportWin *this)
{
  ReportWin *v1; // esi@1
  char *v2; // eax@1
  char *v3; // eax@1

  v1 = this;
  ReportWin::SetMode(this, REPORT_PROCESS);
  v2 = TextData::Get(0x8799869Au);
  ((void (__stdcall *)(_DWORD))v1->m_pkProcessWinTxt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v2);
  v3 = TextData::Get(0xECF14A2Eu);
  ((void (__stdcall *)(_DWORD))v1->m_pkCharRegIDNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v3);
}

//----- (00580230) --------------------------------------------------------
void __thiscall ReportWin::OnCommand(ReportWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4

  switch ( wParam )
  {
    case 0xAu:
      ReportWin::OnCmdOk(this);
      break;
    case 0xBu:
    case 0xCu:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xDu:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "ReportWin");
      break;
    default:
      return;
  }
}

//----- (005802A0) --------------------------------------------------------
ReportWin *__cdecl ReportWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ReportWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x194u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ReportWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ReportWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 91) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ReportWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A8BA8: using guessed type int (__stdcall *ReportWin___vftable_)(int uiFlags);
// 9A8BC4: using guessed type int (__thiscall *ReportWin___vftable_)(void *p, char);

//----- (005803F0) --------------------------------------------------------
void *__thiscall ReportWin::_vector_deleting_destructor_(ReportWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ReportWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ReportWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A8BA8: using guessed type int (__stdcall *ReportWin___vftable_)(int uiFlags);
// 9A8BC4: using guessed type int (__thiscall *ReportWin___vftable_)(void *p, char);

//----- (00580430) --------------------------------------------------------
void __thiscall ReviveMenuWin::ReviveMenuWin(ReviveMenuWin *this)
{
  ReviveMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_fAutoReviveTime = 300.0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ReviveMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ReviveMenuWin::_vftable_;
  v1->m_byPriority = 0;
  v1->m_bCanReviveItem = 1;
}
// 9A8F20: using guessed type int (__stdcall *ReviveMenuWin___vftable_)(int uiFlags);
// 9A8F3C: using guessed type int (__thiscall *ReviveMenuWin___vftable_)(void *p, char);

//----- (00580470) --------------------------------------------------------
void __thiscall ReviveMenuWin::_ReviveMenuWin(ReviveMenuWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ReviveMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ReviveMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A8F20: using guessed type int (__stdcall *ReviveMenuWin___vftable_)(int uiFlags);
// 9A8F3C: using guessed type int (__thiscall *ReviveMenuWin___vftable_)(void *p, char);

//----- (00580490) --------------------------------------------------------
void __thiscall ReviveMenuWin::SetDeadTime(ReviveMenuWin *this, float fTime)
{
  this->m_fDeadTime = fTime;
}

//----- (005804A0) --------------------------------------------------------
void __thiscall ReviveMenuWin::SetAutoRevieTime(ReviveMenuWin *this, char auMin)
{
  this->m_fAutoReviveTime = (double)(unsigned __int8)auMin * 60.0;
}

//----- (005804C0) --------------------------------------------------------
void __thiscall ReviveMenuWin::SetAutoRevieTimeSec(ReviveMenuWin *this, char auSec)
{
  this->m_fAutoReviveTime = (double)(unsigned __int8)auSec;
}

//----- (005804E0) --------------------------------------------------------
void __thiscall ReviveMenuWin::SetCanReviveItem(ReviveMenuWin *this, char bCanReviveItem)
{
  this->m_bCanReviveItem = bCanReviveItem != 0;
}

//----- (00580500) --------------------------------------------------------
void __thiscall ReviveMenuWin::OnItemMall(ReviveMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::NcMiscItemShopUrlReq((GameFrameWork *)v1);
}

//----- (00580520) --------------------------------------------------------
void __thiscall ReviveMenuWin::SetBtnText(ReviveMenuWin *this, ReviveMenuWin::BtnIndex e, const char *Text)
{
  ((void (__stdcall *)(_DWORD))this->m_BtnText[e]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(Text);
}

//----- (00580540) --------------------------------------------------------
void __thiscall ReviveMenuWin::SetPriority(ReviveMenuWin *this, char byPriority)
{
  this->m_byPriority = byPriority;
}

//----- (00580550) --------------------------------------------------------
char __thiscall ReviveMenuWin::GetPriority(ReviveMenuWin *this)
{
  return this->m_byPriority;
}

//----- (00580560) --------------------------------------------------------
void __thiscall ReviveMenuWin::OnHelpLink(ReviveMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "RevivalMenu");
}

//----- (00580590) --------------------------------------------------------
void __thiscall ReviveMenuWin::OnRevive(ReviveMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcCharReviveCmd((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
}

//----- (005805B0) --------------------------------------------------------
void __thiscall ReviveMenuWin::EnableBtns(ReviveMenuWin *this, ReviveMenuWin::BtnIndex e, bool state)
{
  ReviveMenuWin *v3; // esi@1
  PgWinText *v4; // ecx@3
  NiRefObjectVtbl *v5; // eax@3
  char *v6; // esi@6
  signed int v7; // edi@6
  D3DXCOLOR *v8; // [sp-4h] [bp-10h]@3
  D3DXCOLOR *v9; // [sp-4h] [bp-10h]@8

  v3 = this;
  if ( e == 4 )
  {
    v6 = (char *)this->m_BtnText;
    v7 = 4;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v6 - 4) + 240))(state);
      if ( state == 1 )
        v9 = &Color::m_kDxWhiteColor;
      else
        v9 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 468))(v9);
      v6 += 4;
      --v7;
    }
    while ( v7 );
  }
  else
  {
    ((void (__stdcall *)(_DWORD))this->m_Btn[e]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(state);
    if ( state == 1 )
    {
      v4 = v3->m_BtnText[e];
      v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = &Color::m_kDxWhiteColor;
    }
    else
    {
      v5 = v3->m_BtnText[e]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
      v4 = v3->m_BtnText[e];
    }
    v5[117].__vecDelDtor((NiRefObject *)v4, (unsigned int)v8);
    ((void (__stdcall *)(_DWORD))v3->m_Btn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v3->m_BtnText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  }
}

//----- (00580680) --------------------------------------------------------
bool __thiscall ReviveMenuWin::Create(ReviveMenuWin *this, PgFrameWork *pkFrameWork)
{
  ReviveMenuWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgFont *v10; // eax@15
  PgWinText *v11; // edi@15
  NiRefObjectVtbl *v12; // ebx@15
  char *v13; // eax@15
  NiSourceTexture *v14; // edi@15
  PgSprData *v15; // eax@15
  NiSourceTexture *v16; // eax@15
  PgSprData *v17; // eax@16
  NiSourceTexture *v18; // eax@17
  PgWinSpr *v19; // eax@18
  PgSprData *v20; // eax@20
  int v21; // ebx@22
  int v22; // edi@22
  PgFont *v23; // eax@23
  PgWinText *v24; // eax@23
  PgSprData *v25; // edi@24
  PgWin *v26; // ST58_4@24
  PgWin *v27; // edi@24
  PgFont *v28; // ST54_4@24
  unsigned int v29; // ST50_4@24
  unsigned int v30; // eax@24
  PgWinText *v31; // eax@24
  int v32; // edi@24
  NiRefObjectVtbl *v33; // ebx@24
  char *v34; // eax@24
  char *v35; // eax@24
  PgSprData *v36; // ebx@24
  PgWin *v37; // ST58_4@24
  PgWin *v38; // ebx@24
  PgFont *v39; // ST54_4@24
  unsigned int v40; // ST50_4@24
  unsigned int v41; // eax@24
  PgWinText *v42; // eax@24
  NiRefObjectVtbl *v43; // ebx@24
  char *v44; // eax@24
  PgSprData *v45; // ebx@24
  PgWin *v46; // ST58_4@24
  PgWin *v47; // ebx@24
  PgFont *v48; // ST54_4@24
  unsigned int v49; // ST50_4@24
  unsigned int v50; // eax@24
  PgWinText *v51; // eax@24
  NiRefObjectVtbl *v52; // ebx@24
  char *v53; // eax@24
  char *v54; // eax@24
  PgSprData *v55; // ebx@24
  PgWin *v56; // ST58_4@24
  PgWin *v57; // ebx@24
  PgFont *v58; // ST54_4@24
  unsigned int v59; // ST50_4@24
  unsigned int v60; // eax@24
  PgWinText *v61; // eax@24
  NiRefObjectVtbl *v62; // ebx@24
  char *v63; // eax@24
  signed int v64; // ebx@24
  NiSourceTexture *v65; // edi@26
  PgSprData *v66; // edi@27
  NiNode *v67; // esi@28
  signed int iHeightOff; // [sp+74h] [bp-28h]@22
  unsigned int uiWidth; // [sp+78h] [bp-24h]@15
  unsigned int uiHeight; // [sp+7Ch] [bp-20h]@15
  NiSourceTexture *pkTexture; // [sp+80h] [bp-1Ch]@1
  int uiLeft; // [sp+84h] [bp-18h]@11
  int uiTop; // [sp+88h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+8Ch] [bp-10h]@1
  int v75; // [sp+98h] [bp-4h]@1
  signed int pkFrameWorka; // [sp+A4h] [bp+8h]@22

  v2 = this;
  spNode.m_pObject = 0;
  v75 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v75 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Common\\RevivalMenu.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "ReviveMenuWin", 0) )
  {
    v4 = spNode.m_pObject;
    v75 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v10 = Font::Get(0);
  v11 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v11,
    1u);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v11,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = TextData2::Get(0x3B314545u);
  v12[118].__vecDelDtor((NiRefObject *)v11, (unsigned int)v13);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  v14 = pkTexture;
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = MenuTexMgr::GetTexture(0x13u);
  if ( v16 )
  {
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Theme", &uiLeft, &uiTop, v16);
  }
  else
  {
    v18 = MenuTexMgr::GetTexture(0x14u);
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Theme", &uiLeft, &uiTop, v18);
  }
  v19 = PgWinSpr::CreateWin(uiLeft, uiTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v19 )
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v14);
  PgWinSpr::CreateWin(uiLeft, uiTop, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v75 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  iHeightOff = (signed int)((double)uiHeight * 0.5);
  v21 = 0;
  v22 = (int)v2->m_pkTextWin;
  pkFrameWorka = 2;
  do
  {
    v23 = Font::Get(0);
    v24 = PgWinText::CreateWin(
            uiLeft,
            v21 + uiTop,
            uiWidth,
            uiHeight,
            v23,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    *(_DWORD *)v22 = v24;
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v24,
      0);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v22 + 472))(&unk_9A8DFB);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0);
    v21 += iHeightOff;
    v22 += 4;
    --pkFrameWorka;
  }
  while ( pkFrameWorka );
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "Btn01Over");
  v26 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_Btn[0] = (PgWinBut *)v26;
  v27 = v26;
  v28 = Font::Get(0);
  v29 = ((int (__thiscall *)(PgWin *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v27);
  v30 = ((int (__thiscall *)(PgWin *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v27);
  v31 = PgWinText::CreateWin(0, 0, v30, v29, v28, v26, 0, 0);
  v32 = (int)v2->m_BtnText;
  v2->m_BtnText[0] = v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v31,
    5u);
  v33 = v2->m_BtnText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = TextData2::Get(0xE8FACDDBu);
  v35 = fs(v34);
  v33[118].__vecDelDtor((NiRefObject *)v2->m_BtnText[0], (unsigned int)v35);
  ((void (__stdcall *)(_DWORD))v2->m_BtnText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v36, &spNode.m_pObject->baseclass_0, "Btn02Click");
  PgSprData::Add(v36, &spNode.m_pObject->baseclass_0, "Btn02Over");
  v37 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2->m_Btn[1] = (PgWinBut *)v37;
  v38 = v37;
  v39 = Font::Get(0);
  v40 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v38);
  v41 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v38);
  v42 = PgWinText::CreateWin(0, 0, v41, v40, v39, v37, 0, 0);
  v2->m_BtnText[1] = v42;
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v42,
    5u);
  v43 = v2->m_BtnText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData::Get(0x7C9CDAE8u);
  v43[118].__vecDelDtor((NiRefObject *)v2->m_BtnText[1], (unsigned int)v44);
  ((void (__stdcall *)(_DWORD))v2->m_BtnText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v45, &spNode.m_pObject->baseclass_0, "Btn03Click");
  PgSprData::Add(v45, &spNode.m_pObject->baseclass_0, "Btn03Over");
  v46 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v45, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v2->m_Btn[2] = (PgWinBut *)v46;
  v47 = v46;
  v48 = Font::Get(0);
  v49 = ((int (__thiscall *)(PgWin *))v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v47);
  v50 = ((int (__thiscall *)(PgWin *))v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v47);
  v51 = PgWinText::CreateWin(0, 0, v50, v49, v48, v46, 0, 0);
  v2->m_BtnText[2] = v51;
  v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v51,
    5u);
  v52 = v2->m_BtnText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v53 = TextData2::Get(0x475B8382u);
  v54 = fs(v53);
  v52[118].__vecDelDtor((NiRefObject *)v2->m_BtnText[2], (unsigned int)v54);
  ((void (__stdcall *)(_DWORD))v2->m_BtnText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v55 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v55, &spNode.m_pObject->baseclass_0, "Btn04Click");
  PgSprData::Add(v55, &spNode.m_pObject->baseclass_0, "Btn04Over");
  v56 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v55, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
  v2->m_Btn[3] = (PgWinBut *)v56;
  v57 = v56;
  v58 = Font::Get(0);
  v59 = ((int (__thiscall *)(PgWin *))v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v57);
  v60 = ((int (__thiscall *)(PgWin *))v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v57);
  v61 = PgWinText::CreateWin(0, 0, v60, v59, v58, v56, 0, 0);
  v2->m_BtnText[3] = v61;
  v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v61,
    5u);
  v62 = v2->m_BtnText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v63 = TextData2::Get(0xFD07302Du);
  v62[118].__vecDelDtor((NiRefObject *)v2->m_BtnText[3], (unsigned int)v63);
  ((void (__stdcall *)(_DWORD))v2->m_BtnText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v64 = 4;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v32 - 16) + 240))(0);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v32 + 468))(&Color::m_kDxGrayColor);
    v32 += 4;
    --v64;
  }
  while ( v64 );
  v65 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v66 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v65);
    PgSprData::Add(v66, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v66, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft, uiTop, v66, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
  }
  ((void (__thiscall *)(ReviveMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v67 = spNode.m_pObject;
  v75 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v67 )
    v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v67, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00580E50) --------------------------------------------------------
void __thiscall ReviveMenuWin::UpdateMeWin(ReviveMenuWin *this, float fCurTime)
{
  PgWin *v2; // esi@1
  float v3; // ST20_4@1
  double v4; // st7@1
  char *v5; // eax@4
  char *v6; // eax@4
  char *v7; // eax@5
  PgWinText **v8; // ebx@6
  int v9; // esi@6
  signed int v10; // edi@6
  PgWinText **v11; // esi@8
  unsigned int v12; // edi@8
  signed int v13; // ebx@8
  signed int v14; // [sp-10h] [bp-120h]@10
  float fPastTime; // [sp+8h] [bp-108h]@1
  char acStr[256]; // [sp+Ch] [bp-104h]@4
  unsigned int v17; // [sp+10Ch] [bp-4h]@1
  int v18; // [sp+110h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = (PgWin *)this;
  v3 = fCurTime - this->m_fDeadTime;
  v4 = v3;
  fPastTime = this->m_fAutoReviveTime - v3;
  if ( this->m_fAutoReviveTime > v4 )
  {
    if ( fPastTime < 60.0 )
    {
      v7 = TextData::Get(0x7795949Cu);
      sprintf(acStr, v7);
    }
    else
    {
      v5 = TextData::Get(0x82998E9Cu);
      v6 = fs(v5);
      sprintf(acStr, v6);
    }
    v8 = (PgWinText **)&v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][2];
    v9 = (int)&v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][2];
    v10 = 2;
    do
    {
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v9 + 472))(&unk_9A8E02);
      v9 += 4;
      --v10;
    }
    while ( v10 );
    v11 = v8;
    v12 = PgWinText::SetArrayText(v8, 2u, acStr);
    v13 = 2;
    do
    {
      if ( v12 < 2 )
        v14 = 4;
      else
        v14 = 0;
      ((void (__stdcall *)(signed int))(*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v14);
      ++v11;
      --v13;
    }
    while ( v13 );
  }
  else
  {
    GameFrameWork::NcCharReviveCmd((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
    PgWin::PostMsg(v2, v2, 1u, 0, 0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00581010) --------------------------------------------------------
void __thiscall ReviveMenuWin::OnClose(ReviveMenuWin *this)
{
  ReviveMenuWin *v1; // esi@1
  int v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  InventoryWin::UnLockAllItem((InventoryWin *)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID);
  InventoryWin::UnLockAllEquipItem((InventoryWin *)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID);
  v2 = (int)v1->m_BtnText;
  v3 = 4;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 16) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 468))(&Color::m_kDxGrayColor);
    v2 += 4;
    --v3;
  }
  while ( v3 );
}

//----- (00581070) --------------------------------------------------------
void __thiscall ReviveMenuWin::OnReviveFromItem(ReviveMenuWin *this)
{
  ReviveMenuWin *v1; // esi@1

  v1 = this;
  GameFrameWork::On_NC_ITEM_REVIVEITEMUSE_CMD((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  ((void (__stdcall *)(_DWORD))v1->m_Btn[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_BtnText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGrayColor);
  ((void (__stdcall *)(_DWORD))v1->m_Btn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_BtnText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
}

//----- (005810D0) --------------------------------------------------------
void __thiscall ReviveMenuWin::OnReviveFromCleric(ReviveMenuWin *this)
{
  ReviveMenuWin *v1; // esi@1

  v1 = this;
  GameFrameWork::On_NC_SKILL_REPLYREVIVE_CMD((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  ((void (__stdcall *)(_DWORD))v1->m_Btn[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_BtnText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGrayColor);
  ((void (__stdcall *)(_DWORD))v1->m_Btn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_BtnText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
}

//----- (00581130) --------------------------------------------------------
void __thiscall ReviveMenuWin::SetReviveBtn(ReviveMenuWin *this, unsigned int Count)
{
  ReviveMenuWin *v2; // esi@1
  char *v3; // eax@3
  char *v4; // eax@3

  v2 = this;
  if ( this->m_bCanReviveItem )
    ReviveMenuWin::EnableBtns(this, BTN_INDEX_REVIVE_FROM_ITEM, Count != 0);
  v3 = TextData2::Get(0x475B8382u);
  v4 = fs(v3);
  ((void (__stdcall *)(_DWORD))v2->m_BtnText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v4);
}

//----- (00581190) --------------------------------------------------------
void __thiscall ReviveMenuWin::OnCommand(ReviveMenuWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // eax@3
  PgFrameWork *v5; // eax@7
  int v6; // esi@10
  signed int v7; // edi@10

  v3 = (PgWin *)this;
  switch ( wParam )
  {
    case 0u:
      GameFrameWork::NcCharReviveCmd((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      PgWin::PostMsg(v3, v3, 1u, 0, 0);
      goto LABEL_10;
    case 1u:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::NcMiscItemShopUrlReq((GameFrameWork *)v4);
      break;
    case 2u:
      ReviveMenuWin::OnReviveFromItem(this);
      break;
    case 3u:
      ReviveMenuWin::OnReviveFromCleric(this);
      break;
    case 4u:
      v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v5 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v5, "RevivalMenu");
      break;
    default:
      if ( !wParam )
      {
LABEL_10:
        v6 = (int)&v3[1].baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
        v7 = 4;
        do
        {
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 - 16) + 240))(0);
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 468))(&Color::m_kDxGrayColor);
          v6 += 4;
          --v7;
        }
        while ( v7 );
      }
      break;
  }
}

//----- (00581280) --------------------------------------------------------
ReviveMenuWin *__cdecl ReviveMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ReviveMenuWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x190u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *((float *)v2 + 89) = 300.0;
    *(_DWORD *)v2 = &ReviveMenuWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ReviveMenuWin::_vftable_;
    *((_BYTE *)v2 + 396) = 0;
    *((_BYTE *)v2 + 344) = 1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ReviveMenuWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9A8F20: using guessed type int (__stdcall *ReviveMenuWin___vftable_)(int uiFlags);
// 9A8F3C: using guessed type int (__thiscall *ReviveMenuWin___vftable_)(void *p, char);

//----- (005813E0) --------------------------------------------------------
void *__thiscall ReviveMenuWin::_scalar_deleting_destructor_(ReviveMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ReviveMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ReviveMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A8F20: using guessed type int (__stdcall *ReviveMenuWin___vftable_)(int uiFlags);
// 9A8F3C: using guessed type int (__thiscall *ReviveMenuWin___vftable_)(void *p, char);

//----- (00581420) --------------------------------------------------------
void __thiscall NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>(NiPointer<HazeAccumulator> *this)
{
  HazeAccumulator *v1; // esi@1

  v1 = this->m_pObject;
  if ( this->m_pObject && !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v1 )
      v1->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
  }
}

//----- (00581450) --------------------------------------------------------
bool __thiscall RewardInvWin::Create(RewardInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  RewardInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (00581490) --------------------------------------------------------
void __thiscall RewardWin::RewardWin(RewardWin *this)
{
  RewardWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkTitleTextWin = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RewardWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RewardWin::_vftable_;
  v1->m_apkInvWin[0] = 0;
  v1->m_apkInvWin[1] = 0;
  v1->m_apkInvWin[2] = 0;
  v1->m_apkInvWin[3] = 0;
  v1->m_apkInvWin[4] = 0;
  v1->m_apkInvWin[5] = 0;
  v1->m_apkInvWin[6] = 0;
  v1->m_apkInvWin[7] = 0;
  v1->m_apkInvWin[8] = 0;
  v1->m_apkInvWin[9] = 0;
  v1->m_apkSelectInvWin[0] = 0;
  v1->m_apkSelectInvWin[1] = 0;
  v1->m_apkSelectInvWin[2] = 0;
  v1->m_apkSelectInvWin[3] = 0;
  v1->m_apkSelectInvWin[4] = 0;
  v1->m_apkSelectInvWin[5] = 0;
  v1->m_apkSelectInvWin[6] = 0;
  v1->m_apkSelectInvWin[7] = 0;
  v1->m_apkSelectInvWin[8] = 0;
  v1->m_apkSelectInvWin[9] = 0;
  *(_WORD *)&v1->m_bHaveSelectRewardQuest = 0;
  v1->m_kCurrQuestID = -1;
  v1->m_iSelectedReward = -1;
}
// 9A921C: using guessed type int (__stdcall *RewardWin___vftable_)(int uiFlags);
// 9A923C: using guessed type int (__thiscall *RewardWin___vftable_)(void *p, char);

//----- (00581550) --------------------------------------------------------
void __thiscall RewardWin::_RewardWin(RewardWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RewardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9A921C: using guessed type int (__stdcall *RewardWin___vftable_)(int uiFlags);
// 9A923C: using guessed type int (__thiscall *RewardWin___vftable_)(void *p, char);

//----- (00581570) --------------------------------------------------------
void __thiscall RewardWin::OnInvLClick(RewardWin *this, unsigned int uiInvIndex)
{
  if ( this->m_iSelectedReward != uiInvIndex )
  {
    if ( this->m_bIsNpcReward )
      this->m_iSelectedReward = uiInvIndex;
  }
}

//----- (005815D0) --------------------------------------------------------
bool __thiscall RewardWin::HasSelectableReward(RewardWin *this, unsigned __int16 qID)
{
  CQuest *v2; // eax@1
  bool result; // al@2
  CQuestData *v4; // edi@3
  QUEST_DATA *v5; // eax@4
  signed int v6; // ecx@4
  int v7; // eax@4

  v2 = QuestDataMgr::GetQuest();
  if ( v2 )
  {
    v4 = v2->m_pQuestData;
    if ( v4 )
    {
      CQuest::GetQuestInfo(v2, qID);
      v5 = CQuestData::GetQuestData(v4, qID);
      v6 = 0;
      v7 = (int)v5->Reward;
      while ( !*(_BYTE *)v7 || *(_BYTE *)v7 != 2 )
      {
        ++v6;
        v7 += 12;
        if ( v6 >= 12 )
          goto LABEL_8;
      }
      result = 1;
    }
    else
    {
LABEL_8:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00581630) --------------------------------------------------------
int __thiscall RewardWin::GetRealSelectReword(RewardWin *this)
{
  RewardWin *v1; // esi@1
  CQuest *v2; // eax@1
  int result; // eax@2
  CQuestData *v4; // edi@3
  QUEST_DATA *v5; // eax@4
  int v6; // esi@4
  QUEST_DATA *v7; // ecx@4
  int v8; // edx@5

  v1 = this;
  v2 = QuestDataMgr::GetQuest();
  if ( v2 )
  {
    v4 = v2->m_pQuestData;
    if ( v4 )
    {
      CQuest::GetQuestInfo(v2, v1->m_kCurrQuestID);
      v5 = CQuestData::GetQuestData(v4, v1->m_kCurrQuestID);
      v6 = v1->m_iSelectedReward;
      v7 = v5;
      if ( v6 >= 0 )
      {
        result = 0;
        v8 = (int)v7->Reward;
        do
        {
          if ( *(_BYTE *)v8 && *(_BYTE *)v8 == 2 )
          {
            if ( !v6 )
              return result;
            --v6;
          }
          ++result;
          v8 += 12;
        }
        while ( result < 12 );
      }
    }
    result = -1;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (005816A0) --------------------------------------------------------
void __thiscall RewardWin::SetNpcRewardMode(RewardWin *this, bool b)
{
  RewardWin *v2; // ebx@1
  IconWin **v3; // esi@1
  signed int v4; // edi@1
  bool v5; // [sp-4h] [bp-10h]@3

  v2 = this;
  this->m_bIsNpcReward = b;
  v3 = (IconWin **)this->m_apkSelectInvWin;
  v4 = 10;
  do
  {
    if ( v2->m_bIsNpcReward )
      v5 = 1;
    else
      v5 = 0;
    IconWin::ShowFocus(*v3, v5);
    ++v3;
    --v4;
  }
  while ( v4 );
}

//----- (005816F0) --------------------------------------------------------
void __thiscall RewardWin::ShowSelectInvWin(RewardWin *this, bool b)
{
  RewardWin *v2; // esi@1
  int v3; // esi@1
  signed int v4; // ebx@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkRewardTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  v3 = (int)v2->m_apkSelectInvWin;
  v4 = 10;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 52) + 256))(b);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(b);
    v3 += 4;
    --v4;
  }
  while ( v4 );
}

//----- (00581750) --------------------------------------------------------
unsigned int __thiscall RewardWin::GetRewardItemCount(RewardWin *this, unsigned __int16 qID)
{
  CQuest *v2; // eax@1
  CQuestData *v4; // ecx@3
  QUEST_DATA *v5; // eax@4
  int v6; // ecx@5
  unsigned int v7; // esi@5
  char v8; // bl@5
  signed int v9; // edi@5

  v2 = QuestDataMgr::GetQuest();
  if ( !v2 || (v4 = v2->m_pQuestData) == 0 || (v5 = CQuestData::GetQuestData(v4, qID)) == 0 )
    return 0;
  v6 = (int)&v5->Reward[1].Type;
  v7 = 0;
  v8 = 0;
  v9 = 2;
  do
  {
    if ( v6 != 13 && *(_BYTE *)(v6 - 12) == 2 )
    {
      if ( *(_BYTE *)(v6 - 13) != 2 )
        goto LABEL_11;
      if ( !v8 )
      {
        v8 = 1;
LABEL_11:
        ++v7;
        goto LABEL_12;
      }
    }
LABEL_12:
    if ( v6 == 1 || *(_BYTE *)v6 != 2 )
      goto LABEL_18;
    if ( *(_BYTE *)(v6 - 1) == 2 )
    {
      if ( v8 )
        goto LABEL_18;
      v8 = 1;
    }
    ++v7;
LABEL_18:
    if ( v6 != -11 && *(_BYTE *)(v6 + 12) == 2 )
    {
      if ( *(_BYTE *)(v6 + 11) != 2 )
        goto LABEL_23;
      if ( !v8 )
      {
        v8 = 1;
LABEL_23:
        ++v7;
        goto LABEL_24;
      }
    }
LABEL_24:
    if ( v6 == -23 || *(_BYTE *)(v6 + 24) != 2 )
      goto LABEL_30;
    if ( *(_BYTE *)(v6 + 23) == 2 )
    {
      if ( v8 )
        goto LABEL_30;
      v8 = 1;
    }
    ++v7;
LABEL_30:
    if ( v6 != -35 && *(_BYTE *)(v6 + 36) == 2 )
    {
      if ( *(_BYTE *)(v6 + 35) != 2 )
        goto LABEL_35;
      if ( !v8 )
      {
        v8 = 1;
LABEL_35:
        ++v7;
        goto LABEL_36;
      }
    }
LABEL_36:
    if ( v6 != -47 && *(_BYTE *)(v6 + 48) == 2 )
    {
      if ( *(_BYTE *)(v6 + 47) == 2 )
      {
        if ( v8 )
          goto LABEL_42;
        v8 = 1;
      }
      ++v7;
    }
LABEL_42:
    v6 += 72;
    --v9;
  }
  while ( v9 );
  return v7;
}

//----- (00581830) --------------------------------------------------------
void __thiscall RewardInvWin::OnFirstHitWin(RewardInvWin *this)
{
  PgWin *v1; // esi@1
  RewardInvItem *v2; // eax@1
  PgWin *v3; // ecx@2
  Item *v4; // eax@6

  v1 = (PgWin *)this;
  v2 = this->m_spRewardInvItem.m_pObject;
  if ( v2 )
  {
    v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v3 )
    {
      switch ( v2->m_eItemType )
      {
        case 0:
          ItemInfoWin::SetItemExpInfo((ItemInfoWin *)v3, v2->m_i64Exp);
          PgWin::OnFirstHitWin(v1);
          break;
        case 1:
          ItemInfoWin::SetItemMoneyInfo((ItemInfoWin *)v3, v2->m_i64Money);
          PgWin::OnFirstHitWin(v1);
          break;
        case 2:
          v4 = v2->m_spItem.m_pObject;
          if ( !v4 )
            goto LABEL_9;
          ItemInfoWin::SetItemInfo((ItemInfoWin *)v3, v4);
          PgWin::OnFirstHitWin(v1);
          break;
        case 4:
          ItemInfoWin::SetItemFameInfo((ItemInfoWin *)v3, v2->m_iFameVal);
          goto LABEL_9;
        default:
LABEL_9:
          PgWin::OnFirstHitWin(v1);
          break;
      }
    }
  }
}

//----- (005818C0) --------------------------------------------------------
void __thiscall RewardInvWin::ShowSelected(RewardInvWin *this, bool b)
{
  bool v2; // zf@1
  NiAVObject *v3; // ecx@1

  v2 = this->m_spRewardInvItem.m_pObject == 0;
  v3 = this->baseclass_0.m_spClickGeom.m_pObject;
  if ( v2 || !b )
    v3->m_uFlags |= 1u;
  else
    v3->m_uFlags &= 0xFFFEu;
}

//----- (005818F0) --------------------------------------------------------
void __thiscall RewardWin::OnCommand(RewardWin *this, unsigned int wParam, int lParam)
{
  if ( wParam == 10 && this->m_iSelectedReward != lParam )
  {
    if ( this->m_bIsNpcReward )
      this->m_iSelectedReward = lParam;
  }
}

//----- (00581920) --------------------------------------------------------
RewardInvWin *__thiscall RewardWin::GetFreeSlot(RewardWin *this)
{
  unsigned int v1; // eax@1
  char *v2; // edx@1

  v1 = 0;
  v2 = (char *)this->m_apkInvWin;
  while ( *(_DWORD *)(*(_DWORD *)v2 + 380) )
  {
    ++v1;
    v2 += 4;
    if ( v1 >= 0xA )
      return 0;
  }
  return this->m_apkInvWin[v1];
}

//----- (00581960) --------------------------------------------------------
RewardInvWin *__thiscall RewardWin::GetFreeSelectSlot(RewardWin *this)
{
  unsigned int v1; // eax@1
  char *v2; // edx@1

  v1 = 0;
  v2 = (char *)this->m_apkSelectInvWin;
  while ( *(_DWORD *)(*(_DWORD *)v2 + 380) )
  {
    ++v1;
    v2 += 4;
    if ( v1 >= 0xA )
      return 0;
  }
  return this->m_apkSelectInvWin[v1];
}

//----- (005819A0) --------------------------------------------------------
void __thiscall RewardWin::UpdateMeWin(RewardWin *this, float fCurTime)
{
  signed int v2; // edi@2
  char *v3; // edx@2
  int v4; // eax@3
  bool v5; // zf@4
  int v6; // eax@4
  int v7; // eax@8
  int v8; // eax@9
  int v9; // eax@13
  int v10; // eax@14
  int v11; // eax@18
  int v12; // eax@19
  int v13; // eax@23
  int v14; // eax@24

  if ( this->m_bHaveSelectRewardQuest )
  {
    v2 = 2;
    v3 = (char *)&this->m_apkSelectInvWin[1];
    do
    {
      v4 = *((_DWORD *)v3 - 1);
      if ( v2 - 2 == this->m_iSelectedReward )
      {
        v5 = *(_DWORD *)(v4 + 380) == 0;
        v6 = *(_DWORD *)(v4 + 356);
        if ( !v5 )
        {
          *(_WORD *)(v6 + 28) &= 0xFFFEu;
          goto LABEL_8;
        }
      }
      else
      {
        v6 = *(_DWORD *)(v4 + 356);
      }
      *(_WORD *)(v6 + 28) |= 1u;
LABEL_8:
      v7 = *(_DWORD *)v3;
      if ( v2 - 1 == this->m_iSelectedReward )
      {
        v5 = *(_DWORD *)(v7 + 380) == 0;
        v8 = *(_DWORD *)(v7 + 356);
        if ( !v5 )
        {
          *(_WORD *)(v8 + 28) &= 0xFFFEu;
          goto LABEL_13;
        }
      }
      else
      {
        v8 = *(_DWORD *)(v7 + 356);
      }
      *(_WORD *)(v8 + 28) |= 1u;
LABEL_13:
      v9 = *((_DWORD *)v3 + 1);
      if ( v2 == this->m_iSelectedReward )
      {
        v5 = *(_DWORD *)(v9 + 380) == 0;
        v10 = *(_DWORD *)(v9 + 356);
        if ( !v5 )
        {
          *(_WORD *)(v10 + 28) &= 0xFFFEu;
          goto LABEL_18;
        }
      }
      else
      {
        v10 = *(_DWORD *)(v9 + 356);
      }
      *(_WORD *)(v10 + 28) |= 1u;
LABEL_18:
      v11 = *((_DWORD *)v3 + 2);
      if ( v2 + 1 == this->m_iSelectedReward )
      {
        v5 = *(_DWORD *)(v11 + 380) == 0;
        v12 = *(_DWORD *)(v11 + 356);
        if ( !v5 )
        {
          *(_WORD *)(v12 + 28) &= 0xFFFEu;
          goto LABEL_23;
        }
      }
      else
      {
        v12 = *(_DWORD *)(v11 + 356);
      }
      *(_WORD *)(v12 + 28) |= 1u;
LABEL_23:
      v13 = *((_DWORD *)v3 + 3);
      if ( v2 + 2 != this->m_iSelectedReward )
      {
        v14 = *(_DWORD *)(v13 + 356);
LABEL_27:
        *(_WORD *)(v14 + 28) |= 1u;
        goto LABEL_28;
      }
      v5 = *(_DWORD *)(v13 + 380) == 0;
      v14 = *(_DWORD *)(v13 + 356);
      if ( v5 )
        goto LABEL_27;
      *(_WORD *)(v14 + 28) &= 0xFFFEu;
LABEL_28:
      v2 += 5;
      v3 += 20;
    }
    while ( v2 - 2 < 10 );
  }
}

//----- (00581B00) --------------------------------------------------------
void __thiscall RewardInvItem::RewardInvItem(RewardInvItem *this, QUEST_DATA::QUEST_REWARD_TYPE eType)
{
  RewardInvItem *v2; // esi@1
  Item *v3; // edi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&RewardInvItem::_vftable_;
  v2->m_spItem.m_pObject = 0;
  v2->m_eItemType = eType;
  v3 = v2->m_spItem.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spItem.m_pObject = 0;
  }
  LODWORD(v2->m_i64Money) = 0;
  HIDWORD(v2->m_i64Money) = 0;
  LODWORD(v2->m_i64Exp) = 0;
  HIDWORD(v2->m_i64Exp) = 0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9A9460: using guessed type int (__thiscall *RewardInvItem___vftable_)(void *p, char);

//----- (00581BA0) --------------------------------------------------------
void __thiscall RewardInvItem::_RewardInvItem(RewardInvItem *this)
{
  RewardInvItem *v1; // edi@1
  Item *v2; // esi@1
  Item *v3; // esi@6

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&RewardInvItem::_vftable_;
  v2 = this->m_spItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spItem.m_pObject = 0;
  }
  v3 = v1->m_spItem.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9A9460: using guessed type int (__thiscall *RewardInvItem___vftable_)(void *p, char);

//----- (00581C50) --------------------------------------------------------
void __thiscall RewardInvWin::_RewardInvWin(RewardInvWin *this)
{
  RewardInvWin *v1; // esi@1
  RewardInvItem *v2; // edi@1
  RewardInvItem *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RewardInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RewardInvWin::_vftable_;
  v2 = this->m_spRewardInvItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spRewardInvItem.m_pObject = 0;
  }
  v3 = v1->m_spRewardInvItem.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  IconWin::_IconWin(&v1->baseclass_0);
}
// 9A9468: using guessed type int (__stdcall *RewardInvWin___vftable_)(int uiFlags);
// 9A9484: using guessed type int (__thiscall *RewardInvWin___vftable_)(void *p, char);

//----- (00581D10) --------------------------------------------------------
void __thiscall RewardInvWin::DoAction(RewardInvWin *this)
{
  RewardInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00581D40) --------------------------------------------------------
void __thiscall RewardInvWin::DoRAction(RewardInvWin *this)
{
  RewardInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (00581D70) --------------------------------------------------------
void __thiscall RewardInvWin::SetRewardInvItem(RewardInvWin *this, RewardInvItem *pkRewardItem)
{
  RewardInvWin *v2; // esi@1
  RewardInvItem *v3; // edi@1
  NiRefObjectVtbl *v4; // edi@11
  NiSourceTexture *v5; // eax@11
  NiRefObjectVtbl *v6; // edx@11
  Item *v7; // eax@13
  ItemViewInfo *v8; // eax@14
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@20
  char *v10; // [sp-10h] [bp-1Ch]@10
  signed int v11; // [sp-Ch] [bp-18h]@10
  signed int v12; // [sp-8h] [bp-14h]@10
  signed int v13; // [sp-4h] [bp-10h]@10

  v2 = this;
  v3 = this->m_spRewardInvItem.m_pObject;
  if ( v3 != pkRewardItem )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spRewardInvItem.m_pObject = pkRewardItem;
    if ( pkRewardItem )
      InterlockedIncrement((volatile LONG *)&pkRewardItem->baseclass_0.m_uiRefCount);
  }
  if ( v2->m_spRewardInvItem.m_pObject )
  {
    switch ( pkRewardItem->m_eItemType )
    {
      case 0:
        v13 = 32;
        v12 = 32;
        v11 = 9;
        v10 = "VarItem000";
        goto LABEL_11;
      case 1:
        v13 = 32;
        v12 = 32;
        v11 = 10;
        v10 = "VarItem000";
        goto LABEL_11;
      case 2:
        v7 = pkRewardItem->m_spItem.m_pObject;
        if ( !v7 )
          goto LABEL_20;
        v8 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v7->m_kStruct.itemid, 1);
        v13 = 32;
        v12 = 32;
        v11 = v8->IconIndex;
        v10 = v8->IconFile;
        goto LABEL_11;
      case 3:
        v13 = 32;
        v12 = 32;
        v11 = 24;
        v10 = "VarItem000";
        goto LABEL_11;
      case 4:
        v13 = 32;
        v12 = 32;
        v11 = 22;
        v10 = "VarItem000";
        goto LABEL_11;
      case 5:
        v13 = 32;
        v12 = 32;
        v11 = 23;
        v10 = "VarItem000";
        goto LABEL_11;
      case 6:
        v13 = 32;
        v12 = 32;
        v11 = 26;
        v10 = "VarItem000";
        goto LABEL_11;
      case 7:
        v13 = 32;
        v12 = 32;
        v11 = 25;
        v10 = "VarItem000";
LABEL_11:
        v4 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v5 = IconMgr::GetTexture(v10);
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v4[146].__vecDelDtor)(v2, v5, v11, v12, v13);
        v6 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
        v6[60].__vecDelDtor((NiRefObject *)v2, 1u);
        break;
      default:
        return;
    }
  }
  else
  {
LABEL_20:
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v2,
      0,
      -1,
      32,
      32);
    v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v9(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
  }
}

//----- (00581EE0) --------------------------------------------------------
void __thiscall RewardWin::ResetContents(RewardWin *this)
{
  int v1; // esi@2
  int v2; // edi@2
  int v3; // edi@10
  NiSourceTexture *v4; // eax@10
  ItemViewInfo *v5; // eax@13
  RewardInvWin **v6; // esi@22
  signed int v7; // edi@22
  char *v8; // [sp-10h] [bp-28h]@9
  signed int v9; // [sp-Ch] [bp-24h]@9
  signed int v10; // [sp-8h] [bp-20h]@9
  signed int v11; // [sp-4h] [bp-1Ch]@9
  signed int v12; // [sp+0h] [bp-18h]@0
  RewardWin *v13; // [sp+Ch] [bp-Ch]@1
  signed int v14; // [sp+10h] [bp-8h]@1
  char *v15; // [sp+14h] [bp-4h]@1

  v13 = this;
  v15 = (char *)this->m_apkInvWin;
  v14 = 10;
  do
  {
    v1 = *(_DWORD *)v15;
    v2 = *(_DWORD *)(*(_DWORD *)v15 + 380);
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      *(_DWORD *)(v1 + 380) = 0;
    }
    if ( *(_DWORD *)(v1 + 380) )
    {
      switch ( ::v8 )
      {
        case 0u:
          v11 = 32;
          v10 = 32;
          v9 = 9;
          v8 = "VarItem000";
          goto LABEL_10;
        case 1u:
          v11 = 32;
          v10 = 32;
          v9 = 10;
          v8 = "VarItem000";
          goto LABEL_10;
        case 2u:
          if ( !vC )
            goto LABEL_19;
          v5 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(*(_WORD *)(vC + 8), 1);
          v11 = 32;
          v10 = 32;
          v9 = v5->IconIndex;
          v8 = v5->IconFile;
          goto LABEL_10;
        case 3u:
          v11 = 32;
          v10 = 32;
          v9 = 24;
          v8 = "VarItem000";
          goto LABEL_10;
        case 4u:
          v11 = 32;
          v10 = 32;
          v9 = 22;
          v8 = "VarItem000";
          goto LABEL_10;
        case 5u:
          v11 = 32;
          v10 = 32;
          v9 = 23;
          v8 = "VarItem000";
          goto LABEL_10;
        case 6u:
          v11 = 32;
          v10 = 32;
          v9 = 26;
          v8 = "VarItem000";
          goto LABEL_10;
        case 7u:
          v11 = 32;
          v10 = 32;
          v9 = 25;
          v8 = "VarItem000";
LABEL_10:
          v3 = *(_DWORD *)v1;
          v4 = IconMgr::GetTexture(v8);
          (*(void (__thiscall **)(int, NiSourceTexture *, signed int, signed int, signed int, signed int))(v3 + 584))(
            v1,
            v4,
            v9,
            v10,
            v11,
            v12);
          *(_WORD *)(v1 + 28) &= 0xFFFEu;
          v12 = 1;
          goto LABEL_20;
        default:
          break;
      }
    }
    else
    {
LABEL_19:
      (*(void (__thiscall **)(int, _DWORD, signed int, signed int, signed int, signed int))(*(_DWORD *)v1 + 584))(
        v1,
        0,
        -1,
        32,
        32,
        v12);
      *(_WORD *)(v1 + 28) |= 1u;
      v12 = 0;
LABEL_20:
      (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 240))(v1);
    }
    v15 += 4;
    --v14;
  }
  while ( v14 );
  v6 = v13->m_apkSelectInvWin;
  v7 = 10;
  do
  {
    RewardInvWin::SetRewardInvItem(*v6, 0);
    ++v6;
    --v7;
  }
  while ( v7 );
}

//----- (00582080) --------------------------------------------------------
void __thiscall RewardWin::UpdateReward(RewardWin *this, unsigned __int16 qID)
{
  RewardWin *v2; // ebx@1
  CQuest *v3; // eax@1
  CQuestData *v4; // edi@2
  QUEST_DATA *v5; // eax@3
  unsigned __int16 *v6; // edi@3
  unsigned __int8 v7; // al@4
  int v8; // eax@6
  RewardInvWin *v9; // esi@8
  void *v10; // eax@9
  int v11; // eax@10
  RewardInvWin *v12; // esi@13
  void *v13; // eax@14
  int v14; // eax@15
  int v15; // eax@18
  RewardInvWin *v16; // esi@20
  void *v17; // eax@21
  int v18; // eax@22
  RewardInvWin *v19; // esi@25
  void *v20; // eax@26
  int v21; // eax@27
  NiTimeController *v22; // ebx@30
  int v23; // ecx@33
  RewardInvWin *v24; // edi@33
  void *v25; // eax@34
  NiObjectNET *v26; // eax@36
  NiObjectNET *v27; // esi@36
  int v28; // eax@45
  RewardInvWin *v29; // esi@47
  void *v30; // eax@48
  int v31; // eax@49
  RewardInvWin *v32; // esi@52
  void *v33; // eax@53
  int v34; // eax@54
  signed int i; // [sp+4h] [bp-14h]@3
  RewardWin *thisa; // [sp+8h] [bp-10h]@1
  int qIDa; // [sp+20h] [bp+8h]@3

  v2 = this;
  thisa = this;
  RewardWin::ResetContents(this);
  v2->m_bHaveSelectRewardQuest = 0;
  v2->m_iSelectedReward = -1;
  v3 = QuestDataMgr::GetQuest();
  if ( v3 )
  {
    v4 = v3->m_pQuestData;
    if ( v4 )
    {
      CQuest::GetQuestInfo(v3, qID);
      v2->m_kCurrQuestID = qID;
      v5 = CQuestData::GetQuestData(v4, qID);
      v6 = (unsigned __int16 *)&v5->Reward[0].Value;
      i = 0;
      qIDa = (int)&v5->Reward[0].Value;
      do
      {
        v7 = *((_BYTE *)v6 - 4);
        if ( v7 )
        {
          switch ( *((_BYTE *)v6 - 3) )
          {
            case 0:
              v8 = v7 - 1;
              if ( v8 )
              {
                if ( v8 == 1 )
                {
                  v9 = RewardWin::GetFreeSelectSlot(v2);
                  if ( v9 )
                  {
                    v2->m_bHaveSelectRewardQuest = 1;
                    v10 = operator new(0x28u);
                    if ( v10 )
                      RewardInvItem::RewardInvItem((RewardInvItem *)v10, 0);
                    else
                      v11 = 0;
                    *(_DWORD *)(v11 + 24) = *(_DWORD *)v6;
                    *(_DWORD *)(v11 + 28) = 0;
                    RewardInvWin::SetRewardInvItem(v9, (RewardInvItem *)v11);
                  }
                }
              }
              else
              {
                v12 = RewardWin::GetFreeSlot(v2);
                if ( v12 )
                {
                  v13 = operator new(0x28u);
                  if ( v13 )
                    RewardInvItem::RewardInvItem((RewardInvItem *)v13, 0);
                  else
                    v14 = 0;
                  *(_DWORD *)(v14 + 24) = *(_DWORD *)v6;
                  *(_DWORD *)(v14 + 28) = 0;
                  RewardInvWin::SetRewardInvItem(v12, (RewardInvItem *)v14);
                }
              }
              break;
            case 1:
              v15 = v7 - 1;
              if ( v15 )
              {
                if ( v15 == 1 )
                {
                  v16 = RewardWin::GetFreeSelectSlot(v2);
                  if ( v16 )
                  {
                    v2->m_bHaveSelectRewardQuest = 1;
                    v17 = operator new(0x28u);
                    if ( v17 )
                      RewardInvItem::RewardInvItem((RewardInvItem *)v17, QRT_MONEY);
                    else
                      v18 = 0;
                    *(_DWORD *)(v18 + 16) = *(_DWORD *)v6;
                    *(_DWORD *)(v18 + 20) = 0;
                    RewardInvWin::SetRewardInvItem(v16, (RewardInvItem *)v18);
                  }
                }
              }
              else
              {
                v19 = RewardWin::GetFreeSlot(v2);
                if ( v19 )
                {
                  v20 = operator new(0x28u);
                  if ( v20 )
                    RewardInvItem::RewardInvItem((RewardInvItem *)v20, QRT_MONEY);
                  else
                    v21 = 0;
                  *(_DWORD *)(v21 + 16) = *(_DWORD *)v6;
                  *(_DWORD *)(v21 + 20) = 0;
                  RewardInvWin::SetRewardInvItem(v19, (RewardInvItem *)v21);
                }
              }
              break;
            case 2:
              v22 = (NiTimeController *)Item::Create(*v6);
              if ( !v22 )
                return;
              if ( *((_BYTE *)v6 - 4) == 1 )
              {
                v24 = RewardWin::GetFreeSlot(thisa);
                if ( !v24 )
                  goto LABEL_39;
                v25 = operator new(0x28u);
                goto LABEL_35;
              }
              if ( *((_BYTE *)v6 - 4) != 2 )
                goto LABEL_40;
              v24 = RewardWin::GetFreeSelectSlot(thisa);
              if ( v24 )
              {
                *(_BYTE *)(v23 + 430) = 1;
                v25 = operator new(0x28u);
LABEL_35:
                if ( v25 )
                {
                  RewardInvItem::RewardInvItem((RewardInvItem *)v25, QRT_ITEM);
                  v27 = v26;
                }
                else
                {
                  v27 = 0;
                }
                RewardInvItem::SetItem(v27, v22);
                RewardInvWin::SetRewardInvItem(v24, (RewardInvItem *)v27);
              }
LABEL_39:
              v6 = (unsigned __int16 *)qIDa;
LABEL_40:
              v2 = thisa;
              break;
            default:
              break;
            case 4:
              v28 = v7 - 1;
              if ( v28 )
              {
                if ( v28 == 1 )
                {
                  v29 = RewardWin::GetFreeSelectSlot(v2);
                  if ( v29 )
                  {
                    v2->m_bHaveSelectRewardQuest = 1;
                    v30 = operator new(0x28u);
                    if ( v30 )
                      RewardInvItem::RewardInvItem((RewardInvItem *)v30, QRT_FAME);
                    else
                      v31 = 0;
                    *(_DWORD *)(v31 + 32) = *(_DWORD *)v6;
                    RewardInvWin::SetRewardInvItem(v29, (RewardInvItem *)v31);
                  }
                }
              }
              else
              {
                v32 = RewardWin::GetFreeSlot(v2);
                if ( v32 )
                {
                  v33 = operator new(0x28u);
                  if ( v33 )
                    RewardInvItem::RewardInvItem((RewardInvItem *)v33, QRT_FAME);
                  else
                    v34 = 0;
                  *(_DWORD *)(v34 + 32) = *(_DWORD *)v6;
                  RewardInvWin::SetRewardInvItem(v32, (RewardInvItem *)v34);
                }
              }
              break;
          }
        }
        v6 += 6;
        ++i;
        qIDa = (int)v6;
      }
      while ( i < 12 );
    }
  }
}

//----- (00582430) --------------------------------------------------------
void __thiscall RewardInvWin::RewardInvWin(RewardInvWin *this)
{
  RewardInvWin *v1; // esi@1
  RewardInvItem *v2; // edi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RewardInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RewardInvWin::_vftable_;
  v1->m_spRewardInvItem.m_pObject = 0;
  v1->m_uiInvIndex = -1;
  IconWin::CreateGeometry(&v1->baseclass_0, 0x20u, 0x20u);
  RewardInvWin::SetRewardInvItem(v1, 0);
  v2 = v1->m_spRewardInvItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spRewardInvItem.m_pObject = 0;
  }
}
// 9A9468: using guessed type int (__stdcall *RewardInvWin___vftable_)(int uiFlags);
// 9A9484: using guessed type int (__thiscall *RewardInvWin___vftable_)(void *p, char);

//----- (00582500) --------------------------------------------------------
RewardInvWin *__cdecl RewardInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  RewardInvWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x184u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    RewardInvWin::RewardInvWin((RewardInvWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *))(*(_DWORD *)v6 + 608))(
                          v6,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (RewardInvWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (00582640) --------------------------------------------------------
RewardWin *__cdecl RewardWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  RewardWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1E0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    RewardWin::RewardWin((RewardWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (RewardWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00582770) --------------------------------------------------------
bool __thiscall RewardWin::Create(RewardWin *this, PgFrameWork *pkFrameWork)
{
  RewardWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  NiTexturePalette *v6; // ST44_4@9
  char *v7; // eax@9
  PgSprData *v8; // eax@10
  int v9; // ebx@11
  unsigned int v10; // edi@11
  PgSprData *v11; // eax@12
  RewardInvWin *v12; // eax@12
  int v13; // edi@12
  int v14; // eax@12
  int v15; // edi@13
  PgSprData *v16; // eax@14
  PgWinSpr *v17; // eax@14
  int v18; // edx@14
  unsigned int v19; // ecx@14
  RewardInvWin *v20; // eax@14
  PgFont *v21; // eax@16
  PgWinText *v22; // edi@16
  PgFont *v23; // eax@16
  char *v24; // eax@16
  PgFont *v25; // eax@18
  PgWinText *v26; // eax@18
  NiRefObjectVtbl *v27; // edi@18
  PgFont *v28; // eax@18
  NiRefObjectVtbl *v29; // edi@18
  char *v30; // eax@18
  NiNode *v31; // esi@19
  NiSourceTexture *pkTexture; // [sp+40h] [bp-58h]@1
  unsigned int uiHeight; // [sp+44h] [bp-54h]@15
  unsigned int uiWidth; // [sp+48h] [bp-50h]@15
  int iOffY; // [sp+4Ch] [bp-4Ch]@11
  unsigned int v36; // [sp+50h] [bp-48h]@12
  NiPointer<NiNode> spNode; // [sp+54h] [bp-44h]@1
  RewardInvWin **i; // [sp+58h] [bp-40h]@7
  int uiTop; // [sp+5Ch] [bp-3Ch]@10
  int uiLeft; // [sp+60h] [bp-38h]@10
  char acShapeName[33]; // [sp+64h] [bp-34h]@12
  unsigned int v42; // [sp+88h] [bp-10h]@1
  int v43; // [sp+94h] [bp-4h]@1
  int v44; // [sp+98h] [bp+0h]@1

  v42 = (unsigned int)&v44 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v43 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = v3;
  if ( !v3 )
    goto LABEL_26;
  i = (RewardInvWin **)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = (NiTexturePalette *)i;
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\RewardWin.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, v6);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "RewardWin", 0) )
  {
LABEL_26:
    v4 = spNode.m_pObject;
    v43 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v9 = uiLeft;
  iOffY = uiTop;
  v10 = 0;
  i = v2->m_apkInvWin;
  do
  {
    v36 = v10 + 1;
    sprintf(acShapeName, "IconSlot%03d");
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v12 = RewardInvWin::CreateWin(uiLeft - v9 + 1, uiTop - iOffY + 1, v10, &v2->baseclass_0.baseclass_0.baseclass_0);
    v13 = (int)i;
    *i = v12;
    RewardInvWin::SetRewardInvItem(v12, 0);
    v14 = *(_DWORD *)v13;
    v10 = v36;
    ++i;
    *(_DWORD *)(v14 + 272) = g_pkItemInfoWin;
  }
  while ( (signed int)v10 < 10 );
  i = 0;
  v15 = (int)v2->m_apkSelectInvWin;
  do
  {
    v36 = (unsigned int)((char *)i + 1);
    sprintf(acShapeName, "SelectIconSlot%03d");
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
    v17 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = uiTop - iOffY;
    v19 = (unsigned int)i;
    *(_DWORD *)(v15 + 52) = v17;
    v20 = RewardInvWin::CreateWin(uiLeft - v9 + 1, v18 + 1, v19, &v2->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)v15 = v20;
    RewardInvWin::SetRewardInvItem(v20, 0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v15 + 516))(10);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v15 + 560))(11);
    *(_DWORD *)(*(_DWORD *)v15 + 272) = g_pkItemInfoWin;
    v15 += 4;
    i = (RewardInvWin **)v36;
  }
  while ( (signed int)v36 < 10 );
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "RewardTxt", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v21 = Font::Get(0);
    v22 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v21,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v22,
      0);
    v36 = (unsigned int)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v23 = Font::Get(MENU);
    (*(void (__thiscall **)(PgWinText *, PgFont *))v36)(v22, v23);
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v22,
      0);
    v36 = (unsigned int)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v24 = TextData::Get(0x3D403A6Eu);
    (*(void (__thiscall **)(PgWinText *, char *))v36)(v22, v24);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "RewardSelectTxt", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v25 = Font::Get(0);
    v26 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v25,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkRewardTextWin = v26;
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v26,
      0);
    v27 = v2->m_pkRewardTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v28 = Font::Get(MENU);
    v27[113].__vecDelDtor((NiRefObject *)v2->m_pkRewardTextWin, (unsigned int)v28);
    ((void (__stdcall *)(_DWORD))v2->m_pkRewardTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v29 = v2->m_pkRewardTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v30 = TextData::Get(0x1F483544u);
    v29[118].__vecDelDtor((NiRefObject *)v2->m_pkRewardTextWin, (unsigned int)v30);
  }
  ((void (__thiscall *)(RewardWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v31 = spNode.m_pObject;
  v43 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v31 )
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00582BB0) --------------------------------------------------------
void *__thiscall RewardWin::_scalar_deleting_destructor_(RewardWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RewardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9A921C: using guessed type int (__stdcall *RewardWin___vftable_)(int uiFlags);
// 9A923C: using guessed type int (__thiscall *RewardWin___vftable_)(void *p, char);

//----- (00582BF0) --------------------------------------------------------
void *__thiscall RewardInvItem::_vector_deleting_destructor_(RewardInvItem *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  RewardInvItem::_RewardInvItem(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00582C20) --------------------------------------------------------
void *__thiscall RewardInvWin::_scalar_deleting_destructor_(RewardInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  RewardInvWin::_RewardInvWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00582C50) --------------------------------------------------------
void __thiscall RidePetWin::DirectMessage(RidePetWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  char *v4; // esi@2
  void (__thiscall *v5)(_DWORD, _DWORD, _DWORD); // eax@2
  signed int v6; // eax@3
  RidePetWin *iSy; // [sp+0h] [bp-4h]@1

  iSy = this;
  if ( pkFrom )
  {
    v4 = (char *)this - 232;
    pkFrom = (IDirectMessenger *)PgWin::ms_iMsX.x;
    v5 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)this - 58) + 224);
    iSy = (RidePetWin *)PgWin::ms_iMsY;
    v5((char *)this - 232, &pkFrom, &iSy);
    if ( (signed int)pkFrom >= 0 )
    {
      v6 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 144))(v4);
      if ( (signed int)pkFrom < v6 )
      {
        if ( (signed int)iSy >= 0 )
          (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 148))(v4);
      }
    }
  }
}

//----- (00582CC0) --------------------------------------------------------
void __thiscall RidePetWin::RidePetWin(RidePetWin *this)
{
  RidePetWin *v1; // esi@1
  NiSourceTexture *v2; // edi@1
  NiSourceTexture *v3; // edi@6
  NiSourceTexture *v4; // edi@11

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RidePetWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RidePetWin::_vftable_;
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kMarkCheck);
  v1->m_spNormalTexture.m_pObject = 0;
  v1->m_spHungryTexture.m_pObject = 0;
  v1->m_spEatTexture.m_pObject = 0;
  v1->m_pkFrameWork = 0;
  v1->m_uiMaxHP = 0;
  v1->m_nHungryPoint = 0;
  v2 = v1->m_spNormalTexture.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spNormalTexture.m_pObject = 0;
  }
  v3 = v1->m_spHungryTexture.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spHungryTexture.m_pObject = 0;
  }
  v4 = v1->m_spEatTexture.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spEatTexture.m_pObject = 0;
  }
  v1->m_nMoverSpeed = 0;
  v1->m_bNormalize = 1;
  v1->m_pkDescriptSpr = 0;
  v1->m_bNeedFeed = 1;
}
// 9A98B4: using guessed type int (__stdcall *RidePetWin___vftable_)(int uiFlags);
// 9A98D4: using guessed type int (__thiscall *RidePetWin___vftable_)(void *p, char);

//----- (00582DF0) --------------------------------------------------------
void __thiscall RidePetWin::_RidePetWin(RidePetWin *this)
{
  RidePetWin *v1; // esi@1
  NiSourceTexture *v2; // edi@1
  NiSourceTexture *v3; // edi@5
  NiSourceTexture *v4; // edi@9

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RidePetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RidePetWin::_vftable_;
  v2 = this->m_spEatTexture.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spHungryTexture.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spNormalTexture.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A98B4: using guessed type int (__stdcall *RidePetWin___vftable_)(int uiFlags);
// 9A98D4: using guessed type int (__thiscall *RidePetWin___vftable_)(void *p, char);

//----- (00582EE0) --------------------------------------------------------
void __thiscall RidePetWin::EnablePetFaceAni(RidePetWin *this)
{
  RidePetWin *v1; // esi@1
  PgWinSpr *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkPetFaceCutWin;
  if ( v2 )
  {
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v1->m_spEatTexture.m_pObject);
    v1->m_kMarkCheck.m_fMarkTime = 2.0;
    CNSTimer_MarkCheck::ReSet(&v1->m_kMarkCheck, Timer::ms_fCurTime, OVER);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00582F30) --------------------------------------------------------
void __thiscall RidePetWin::UpdateFaceCut(RidePetWin *this)
{
  void *(__thiscall *v1)(NiRefObject *, unsigned int); // edx@2

  if ( this->m_pkPetFaceCutWin )
  {
    v1 = this->m_pkPetFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor;
    if ( this->m_nHungryPoint )
      ((void (__stdcall *)(_DWORD))v1)(this->m_spNormalTexture.m_pObject);
    else
      ((void (__stdcall *)(_DWORD))v1)(this->m_spHungryTexture.m_pObject);
  }
}

//----- (00582F70) --------------------------------------------------------
void __thiscall RidePetWin::SetHungryPoint(RidePetWin *this, int nCur)
{
  RidePetWin *v2; // esi@1
  bool v3; // zf@5
  char szPoint[256]; // [sp+4h] [bp-104h]@5
  unsigned int v5; // [sp+104h] [bp-4h]@1
  int v6; // [sp+108h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  if ( this->m_pkHPBarWin && this->m_pkHPBarStartWin && this->m_pkHPBarEndWin && this->m_pkNum_Hungry )
  {
    sprintf(szPoint, "%d/%d");
    v3 = v2->m_kMarkCheck.m_TimeStateCur == -1;
    v2->m_nHungryPoint = nCur;
    if ( !v3 )
      RidePetWin::UpdateFaceCut(v2);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00583000) --------------------------------------------------------
void __thiscall RidePetWin::Normalize(RidePetWin *this, bool b)
{
  RidePetWin *v2; // esi@1
  PgWinText *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkNameTextWin;
  v2->m_bNormalize = b;
  ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkNum_Hungry->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  ((void (__stdcall *)(_DWORD))v2->m_pkMoverSpeed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  ((void (__stdcall *)(_DWORD))v2->m_pkPanel[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  ((void (__stdcall *)(_DWORD))v2->m_pkPanel[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bNormalize);
  if ( v2->m_bNormalize == 1 )
    RidePetWin::SetHungryPoint(v2, v2->m_nHungryPoint);
  ((void (__stdcall *)(_DWORD))v2->m_pkDescriptSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v2->m_bNormalize);
  if ( v2->m_bNeedFeed == 1 )
    v2->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)((unsigned int)g_pkToolTipWin & ((v2->m_bNormalize != 0) - 1));
}

//----- (00583120) --------------------------------------------------------
bool __thiscall RidePetWin::Create(RidePetWin *this, PgFrameWork *pkFrameWork)
{
  RidePetWin *v2; // esi@1
  PgFrameWork *v3; // ebx@1
  NiSourceTexture *v4; // edi@1
  NiNode *v5; // esi@2
  char *v7; // eax@9
  PgSprData *v8; // eax@10
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@11
  int v10; // edi@11
  PgFrameWork *v11; // ebx@11
  PgSprData *v12; // eax@11
  PgWinSpr *v13; // eax@11
  char *v14; // eax@13
  NiSourceTexture *v15; // eax@13
  char *v16; // eax@16
  PgSprData *v17; // eax@17
  PgWinSpr *v18; // eax@17
  PgSprData *v19; // eax@17
  PgWinSpr *v20; // eax@17
  PgSprData *v21; // eax@17
  PgWinSpr *v22; // eax@17
  PgSprData *v23; // eax@17
  PgWinBar *v24; // eax@17
  PgSprData *v25; // eax@17
  PgWinBar *v26; // eax@17
  PgSprData *v27; // eax@17
  PgWinBar *v28; // eax@17
  PgWin *v29; // ST44_4@17
  PgFont *v30; // eax@17
  PgWinAbbreviateText *v31; // eax@17
  PgFont *v32; // eax@17
  PgWinText *v33; // eax@17
  PgFont *v34; // eax@17
  PgWinText *v35; // eax@17
  PgWinSpr *v36; // eax@18
  NiNode *v37; // esi@19
  NiTexturePalette *pkPetTexture; // [sp+5Ch] [bp-24h]@7
  NiSourceTexture *pkPetTexturea; // [sp+5Ch] [bp-24h]@13
  NiSourceTexture *pkTexture; // [sp+60h] [bp-20h]@1
  unsigned int uiWidth; // [sp+64h] [bp-1Ch]@17
  unsigned int uiHeight; // [sp+68h] [bp-18h]@17
  NiPointer<NiNode> spNode; // [sp+6Ch] [bp-14h]@1
  int uiLeft; // [sp+70h] [bp-10h]@10
  int v45; // [sp+7Ch] [bp-4h]@1

  v2 = this;
  v3 = pkFrameWork;
  this->m_pkFrameWork = pkFrameWork;
  spNode.m_pObject = 0;
  v45 = 0;
  v4 = MenuTexMgr::GetTexture(4u);
  pkTexture = v4;
  if ( !v4 )
    goto LABEL_26;
  pkPetTexture = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\PetFace.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, pkPetTexture);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, (int *)&pkFrameWork, v4);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, v3, "RidePetWin", 0) )
  {
LABEL_26:
    v5 = spNode.m_pObject;
    v45 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  v2->baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
  v9(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 1u);
  v10 = uiLeft;
  v11 = pkFrameWork;
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, (int *)&pkFrameWork, pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft, (int)pkFrameWork, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkPanel[1] = v13;
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  if ( !Folder::m_bInit )
    Folder::Init();
  v14 = fs("%sgame\\MobPortrait\\%s.png");
  v15 = PgUtil::LoadSourceTexture(v14);
  pkPetTexturea = v15;
  if ( !v15 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v16 = fs("%sgame\\MobPortrait\\%s.tga");
    v15 = PgUtil::LoadSourceTexture(v16);
    pkPetTexturea = v15;
  }
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_Mon", &uiLeft, (int *)&pkFrameWork, v15);
  v18 = PgWinSpr::CreateWin(
          uiLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v17,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkPetFaceCutWin = v18;
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v18,
    0);
  ((void (__stdcall *)(NiSourceTexture *))v2->m_pkPetFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(pkPetTexturea);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &uiLeft, (int *)&pkFrameWork, pkTexture);
  v20 = PgWinSpr::CreateWin(uiLeft, (int)pkFrameWork, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, (int *)&pkFrameWork, pkTexture);
  v22 = PgWinSpr::CreateWin(uiLeft, (int)pkFrameWork, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkPanel[0] = v22;
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_Start", &uiLeft, (int *)&pkFrameWork, pkTexture);
  v24 = PgWinBar::CreateWin(
          uiLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v23,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v2->m_pkHPBarStartWin = (PgWinSpr *)v24;
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v24,
    1u);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarStartWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_End", &uiLeft, (int *)&pkFrameWork, pkTexture);
  v26 = PgWinBar::CreateWin(
          uiLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v25,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v2->m_pkHPBarEndWin = (PgWinSpr *)v26;
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v26,
    1u);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarEndWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP", &uiLeft, (int *)&pkFrameWork, pkTexture);
  v28 = PgWinBar::CreateWin(
          uiLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          v27,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          BGT_RIGHT);
  v2->m_pkHPBarWin = v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v28,
    0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CharName", &uiLeft, (int *)&pkFrameWork, &uiWidth, &uiHeight);
  v29 = g_pkToolTipWin;
  v30 = Font::Get(0);
  v31 = PgWinAbbreviateText::CreateWin(
          uiLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          uiWidth,
          uiHeight,
          v30,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          "2",
          0,
          0,
          1,
          v29,
          0x1Eu);
  v2->m_pkNameTextWin = (PgWinText *)v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("TestName");
  PgUtil::GetTriShapeRect(
    &spNode.m_pObject->baseclass_0,
    "Num_Hungry",
    &uiLeft,
    (int *)&pkFrameWork,
    &uiWidth,
    &uiHeight);
  v32 = Font::Get(0);
  v33 = PgWinText::CreateWin(
          uiLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          uiWidth,
          uiHeight,
          v32,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          "2",
          0);
  v2->m_pkNum_Hungry = v33;
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  PgUtil::GetTriShapeRect(
    &spNode.m_pObject->baseclass_0,
    "Num_Velocity",
    &uiLeft,
    (int *)&pkFrameWork,
    &uiWidth,
    &uiHeight);
  v34 = Font::Get(0);
  v35 = PgWinText::CreateWin(
          uiLeft - v10,
          (char *)pkFrameWork - (char *)v11,
          uiWidth,
          uiHeight,
          v34,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          "2",
          0);
  v2->m_pkMoverSpeed = v35;
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v35,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkMoverSpeed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
  PgWin::InitPos(&v2->baseclass_0.baseclass_0.baseclass_0, PgWin::ms_uiScreenWidth, PgWin::ms_uiScreenHeight, 0.0, 0.23);
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "Picking01",
         &uiLeft,
         (int *)&pkFrameWork,
         &uiWidth,
         &uiHeight) )
  {
    v36 = PgWinSpr::CreateWin(
            uiLeft,
            (int)pkFrameWork,
            uiWidth,
            uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkDescriptSpr = v36;
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v36,
      1u);
    v2->m_pkDescriptSpr->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  }
  v2->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
  v37 = spNode.m_pObject;
  v45 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v37 )
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00583700) --------------------------------------------------------
void __thiscall RidePetWin::ProcessMeInput(RidePetWin *this, bool *bHit)
{
  RidePetWin *v2; // esi@1
  bool v3; // bl@1

  v2 = this;
  v3 = PgWin::ms_kbRbutReleased.m_iBool >= 1;
  if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->m_pkPetFaceCutWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    && v3 )
    RidePetWin::Normalize(v2, v2->m_bNormalize == 0);
  PgWinFrame::ProcessMeInput(&v2->baseclass_0, bHit);
}

//----- (00583760) --------------------------------------------------------
void __thiscall RidePetWin::SetPetID(RidePetWin *this, unsigned int uiPetID)
{
  RidePetWin *v2; // ebx@1
  unsigned int v3; // esi@1
  void *v4; // eax@2
  PgWinText *v5; // ecx@5
  unsigned int v6; // edi@6
  unsigned int v7; // esi@6
  char *v8; // esi@12
  NiSourceTexture *v9; // edi@13
  NiImageConverter *v10; // eax@14
  NiPixelData *v11; // eax@14
  NiSourceTexture *v12; // esi@17
  char *v13; // esi@26
  NiSourceTexture *v14; // edi@27
  NiImageConverter *v15; // eax@28
  NiPixelData *v16; // eax@28
  NiSourceTexture *v17; // esi@31
  char *v18; // esi@40
  NiSourceTexture *v19; // edi@41
  NiImageConverter *v20; // eax@42
  NiPixelData *v21; // eax@42
  NiSourceTexture *v22; // esi@45
  char *v23; // eax@55
  NiSourceTexture *v24; // eax@55
  NiSourceTexture *v25; // esi@55
  NiSourceTexture *v26; // edi@55
  char *v27; // eax@65
  NiSourceTexture *v28; // eax@65
  NiSourceTexture *v29; // esi@65
  NiSourceTexture *v30; // edi@65
  char *v31; // eax@75
  NiSourceTexture *v32; // eax@75
  NiSourceTexture *v33; // esi@75
  NiSourceTexture *v34; // edi@75
  int v35; // ecx@82
  int v36; // eax@82
  bool v37; // cf@83
  unsigned __int8 v38; // dl@85
  PgWin *v39; // edx@87
  int v40; // eax@87
  PgWinSpr *v41; // ecx@89
  PgWinSpr *v42; // ecx@92
  NiTexture::FormatPrefs kPrefs; // [sp+Ch] [bp-Ch]@16
  void *uiPetIDa; // [sp+20h] [bp+8h]@7

  v2 = this;
  this->m_uiPetID = uiPetID;
  v3 = 0;
  if ( ITableBase<RIDING_RidePetTable>::GetTotal() )
  {
    while ( 1 )
    {
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4), v3);
      if ( *(_WORD *)v4 == uiPetID )
        break;
      ++v3;
      if ( v3 >= ITableBase<RIDING_RidePetTable>::GetTotal() )
        goto LABEL_6;
    }
    v5 = v2->m_pkNameTextWin;
    v2->m_uiMaxHP = *((_WORD *)v4 + 99);
    ((void (__stdcall *)(char *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)v4 + 34);
  }
LABEL_6:
  v6 = v2->m_uiPetID;
  v7 = 0;
  if ( ITableBase<RIDING_RidePetTable>::GetTotal() )
  {
    while ( 1 )
    {
      uiPetIDa = CDataReader::GetRecord((CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4), v7);
      if ( *(_WORD *)uiPetIDa == v6 )
        break;
      ++v7;
      if ( v7 >= ITableBase<RIDING_RidePetTable>::GetTotal() )
        return;
    }
    if ( !Folder::m_bInit )
      Folder::Init();
    v8 = fs("%sgame\\MobPortrait\\%s.png");
    if ( v8 )
    {
      v10 = NiImageConverter::GetImageConverter();
      v11 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v10->baseclass_0.vfptr[2].__vecDelDtor)(
                             v10,
                             v8,
                             0);
      if ( v11 )
      {
        kPrefs.m_ePixelLayout = 6;
        kPrefs.m_eAlphaFmt = 3;
        kPrefs.m_eMipMapped = 0;
        v9 = NiSourceTexture::Create(v11, &kPrefs);
      }
      else
      {
        v9 = 0;
      }
    }
    else
    {
      v9 = 0;
    }
    v12 = v2->m_spNormalTexture.m_pObject;
    if ( v12 != v9 )
    {
      if ( v12
        && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      v2->m_spNormalTexture.m_pObject = v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    if ( !Folder::m_bInit )
      Folder::Init();
    v13 = fs("%sgame\\MobPortrait\\%s.png");
    if ( v13 )
    {
      v15 = NiImageConverter::GetImageConverter();
      v16 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v15->baseclass_0.vfptr[2].__vecDelDtor)(
                             v15,
                             v13,
                             0);
      if ( v16 )
      {
        kPrefs.m_ePixelLayout = 6;
        kPrefs.m_eAlphaFmt = 3;
        kPrefs.m_eMipMapped = 0;
        v14 = NiSourceTexture::Create(v16, &kPrefs);
      }
      else
      {
        v14 = 0;
      }
    }
    else
    {
      v14 = 0;
    }
    v17 = v2->m_spHungryTexture.m_pObject;
    if ( v17 != v14 )
    {
      if ( v17
        && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v17 )
        v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
      v2->m_spHungryTexture.m_pObject = v14;
      if ( v14 )
        InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    if ( !Folder::m_bInit )
      Folder::Init();
    v18 = fs("%sgame\\MobPortrait\\%s.png");
    if ( v18 )
    {
      v20 = NiImageConverter::GetImageConverter();
      v21 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, char *, _DWORD))v20->baseclass_0.vfptr[2].__vecDelDtor)(
                             v20,
                             v18,
                             0);
      if ( v21 )
      {
        kPrefs.m_ePixelLayout = 6;
        kPrefs.m_eAlphaFmt = 3;
        kPrefs.m_eMipMapped = 0;
        v19 = NiSourceTexture::Create(v21, &kPrefs);
      }
      else
      {
        v19 = 0;
      }
    }
    else
    {
      v19 = 0;
    }
    v22 = v2->m_spEatTexture.m_pObject;
    if ( v22 != v19 )
    {
      if ( v22
        && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v22 )
        v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
      v2->m_spEatTexture.m_pObject = v19;
      if ( v19 )
        InterlockedIncrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    if ( !v2->m_spNormalTexture.m_pObject )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v23 = fs("%sgame\\MobPortrait\\%s.tga");
      v24 = PgUtil::LoadSourceTexture(v23);
      v25 = v2->m_spNormalTexture.m_pObject;
      v26 = v24;
      if ( v25 != v24 )
      {
        if ( v25
          && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v25 )
          v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
        v2->m_spNormalTexture.m_pObject = v26;
        if ( v26 )
          InterlockedIncrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
    }
    if ( !v2->m_spHungryTexture.m_pObject )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v27 = fs("%sgame\\MobPortrait\\%s.tga");
      v28 = PgUtil::LoadSourceTexture(v27);
      v29 = v2->m_spHungryTexture.m_pObject;
      v30 = v28;
      if ( v29 != v28 )
      {
        if ( v29
          && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v29 )
          v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
        v2->m_spHungryTexture.m_pObject = v30;
        if ( v30 )
          InterlockedIncrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
    }
    if ( !v2->m_spEatTexture.m_pObject )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v31 = fs("%sgame\\MobPortrait\\%s.tga");
      v32 = PgUtil::LoadSourceTexture(v31);
      v33 = v2->m_spEatTexture.m_pObject;
      v34 = v32;
      if ( v33 != v32 )
      {
        if ( v33
          && !InterlockedDecrement((volatile LONG *)&v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v33 )
          v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
        v2->m_spEatTexture.m_pObject = v34;
        if ( v34 )
          InterlockedIncrement((volatile LONG *)&v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
    }
    v2->m_nHungryPoint = 0;
    v35 = (int)"-";
    v36 = (int)((char *)uiPetIDa + 132);
    while ( 1 )
    {
      v37 = *(_BYTE *)v36 < *(_BYTE *)v35;
      if ( *(_BYTE *)v36 != *(_BYTE *)v35 )
        break;
      if ( !*(_BYTE *)v36 )
        goto LABEL_87;
      v38 = *(_BYTE *)(v36 + 1);
      v37 = v38 < *(_BYTE *)(v35 + 1);
      if ( v38 != *(_BYTE *)(v35 + 1) )
        break;
      v36 += 2;
      v35 += 2;
      if ( !v38 )
      {
LABEL_87:
        v39 = 0;
        v40 = 0;
        goto LABEL_89;
      }
    }
    v40 = -v37 - (v37 - 1);
    v39 = 0;
LABEL_89:
    v41 = v2->m_pkDescriptSpr;
    if ( (PgWin *)v40 == v39 )
    {
      v2->m_bNeedFeed = 0;
      v41->baseclass_0.m_pkToolTipWin = v39;
    }
    else
    {
      v2->m_bNeedFeed = 1;
      v41->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    }
    v42 = v2->m_pkPetFaceCutWin;
    v2->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = v39;
    if ( (PgWin *)v42 != v39 )
    {
      if ( (PgWin *)v2->m_nHungryPoint == v39 )
        ((void (__stdcall *)(NiSourceTexture *))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v2->m_spHungryTexture.m_pObject);
      else
        ((void (__stdcall *)(NiSourceTexture *))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v2->m_spNormalTexture.m_pObject);
    }
  }
}
// A9541C: using guessed type char Folder__m_bInit;
// A97F38: using guessed type int ITableBase_RIDING_RidePetTable___ms_pkTable;

//----- (00583C40) --------------------------------------------------------
RidePetWin *__cdecl RidePetWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  RidePetWin *v5; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C4u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    RidePetWin::RidePetWin((RidePetWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( RidePetWin::Create((RidePetWin *)v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (RidePetWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    }
    v5 = 0;
  }
  return v5;
}

//----- (00583D70) --------------------------------------------------------
bool __thiscall RidePetWin::EatDropInstance(RidePetWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  int v4; // edi@0
  RidePetWin *v5; // esi@1
  void *v7; // ebx@3
  int v8; // edi@6
  RIDING *v9; // eax@9
  const char *v10; // esi@11
  GameFrameWork *v11; // esi@13
  char *v12; // eax@16
  ItemUseTask *v13; // esi@18
  int v14; // [sp-8h] [bp-10h]@6
  unsigned int v15; // [sp-8h] [bp-10h]@13
  RidePetWin *v16; // [sp+4h] [bp-4h]@1

  v5 = this;
  v16 = this;
  if ( !*pkDrop )
    return 0;
  v7 = (*pkDrop)->m_pkContents;
  if ( *((_DWORD *)v7 + 2) || *((_DWORD *)v7 + 4) )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  v14 = v4;
  v8 = *((_DWORD *)v7 + 5);
  if ( !v8 )
  {
    PgCursor::ms_bKeepDrop = 1;
    return 0;
  }
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, int))(*(_DWORD *)v8 + 4))(*((_DWORD *)v7 + 5), v14) != 22 )
    return 0;
  v9 = RidePetTable::GetByID(v5->m_uiPetID);
  if ( !v9 )
    goto LABEL_18;
  if ( v9->UseTime )
  {
LABEL_15:
    v11 = (GameFrameWork *)v5->m_pkFrameWork;
    v15 = 1906944922;
    goto LABEL_16;
  }
  v10 = v9->FeedType;
  if ( !strcmp(v9->FeedType, "-") )
  {
    v5 = v16;
    goto LABEL_15;
  }
  if ( strcmp((const char *)(*(_DWORD *)(v8 + 112) + 2), v10) )
  {
    v11 = (GameFrameWork *)v16->m_pkFrameWork;
    v15 = -1141985811;
LABEL_16:
    v12 = TextData::Get(v15);
    GameFrameWork::AddSysMsg(v11, v12);
    return 0;
  }
LABEL_18:
  v13 = ISingletonTask<ItemUseTask>::Run();
  ItemUseTask::SetInventoryIndex(v13, *((_DWORD *)v7 + 3));
  ((void (__thiscall *)(IDirectMessenger *))v13->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker)(&v13->baseclass_0.baseclass_0.baseclass_8);
  return 1;
}
// 583D70: could not find valid save-restore pair for edi
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (00583ED0) --------------------------------------------------------
void __thiscall RidePetWin::UpdateMeWin(RidePetWin *this, float fCurTime)
{
  RidePetWin *v2; // esi@1
  PgWinSpr *v3; // ecx@3
  RIDING *v4; // eax@7
  unsigned __int16 *v5; // eax@8
  char *v6; // eax@8
  char *v7; // eax@8
  char *v8; // edi@8

  v2 = this;
  if ( CNSTimer_MarkCheck::Update(&this->m_kMarkCheck, Timer::ms_fCurTime) == 1 && v2->m_pkPetFaceCutWin )
  {
    v3 = v2->m_pkPetFaceCutWin;
    if ( v2->m_nHungryPoint )
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v2->m_spNormalTexture.m_pObject);
    else
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v2->m_spHungryTexture.m_pObject);
  }
  if ( v2->m_bNeedFeed == 1 )
  {
    v4 = RidePetTable::GetByID(v2->m_uiPetID);
    if ( v4 )
    {
      v5 = (unsigned __int16 *)ItemInfoTab::GetByInxName(v4->FeedType);
      Inventory::GetItemCnt(&g_kInventory, *v5);
      v6 = TextData2::Get(0x2939242Bu);
      fs(v6);
      v7 = TextData2::Get(0xEFF2282Eu);
      fs(v7);
      v8 = fs("%s\n%s");
      PgWin::SetToolTipWinText(&v2->m_pkDescriptSpr->baseclass_0, v8);
      PgWin::SetToolTipWinText(&v2->baseclass_0.baseclass_0.baseclass_0, v8);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00583FD0) --------------------------------------------------------
RIDING *__cdecl RidePetTable::GetByID(unsigned int nActionID)
{
  unsigned int v1; // esi@1
  RIDING *result; // eax@2

  v1 = 0;
  if ( ITableBase<RIDING_RidePetTable>::GetTotal() )
  {
    while ( 1 )
    {
      result = (RIDING *)CDataReader::GetRecord((CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4), v1);
      if ( result->Handle == nActionID )
        break;
      ++v1;
      if ( v1 >= ITableBase<RIDING_RidePetTable>::GetTotal() )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97F38: using guessed type int ITableBase_RIDING_RidePetTable___ms_pkTable;

//----- (00584010) --------------------------------------------------------
void *__thiscall RidePetWin::_vector_deleting_destructor_(RidePetWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  RidePetWin::_RidePetWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00584040) --------------------------------------------------------
void __thiscall RoarWin::OnHelpLink(RoarWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "Roar");
}

//----- (00584070) --------------------------------------------------------
void __thiscall RoarWin::OnCmdCancel(RoarWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  InvWin::SetLock(*((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + this->m_uiLockInvPos + 87), 0);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
}

//----- (005840B0) --------------------------------------------------------
void __thiscall RoarWin::SetLockInvPos(RoarWin *this, unsigned int uiInvPos)
{
  this->m_uiLockInvPos = uiInvPos;
  InvWin::SetLock(*((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + uiInvPos + 87), 1);
}

//----- (005840E0) --------------------------------------------------------
void __thiscall RoarWin::UpdateMeWin(RoarWin *this, float fCurTime)
{
  RoarWin *v2; // esi@1
  int v3; // ebx@4
  int v4; // eax@4
  BYTE *v5; // edi@4
  int v6; // eax@4
  int v7; // edx@4
  char v8; // cl@5
  int v9; // eax@6
  const char *v10; // edx@7
  const char *v11; // edi@13
  char *v12; // eax@13
  char v13; // cl@14
  const char *v14; // ecx@16
  const char *v15; // edx@16
  const char v16; // al@17
  NiRefObjectVtbl *v17; // edi@19
  char *v18; // eax@20
  char *v19; // edi@22
  BYTE v20; // al@22
  int i; // ebx@22
  const char *v22; // ecx@27
  char *v23; // edx@27
  const char v24; // al@28
  char *v25; // edi@31
  BYTE v26; // al@31
  int j; // ebx@31
  const char *v28; // ecx@36
  char *v29; // edx@36
  const char v30; // al@37
  NiRefObjectVtbl *v31; // edi@39
  char *v32; // eax@39
  char *v33; // edi@41
  int v34; // eax@41
  int v35; // ebx@41
  char *v36; // edx@47
  char *v37; // ecx@48
  Item *v38; // eax@49
  ItemIcon *v39; // ecx@49
  char *v40; // eax@51
  ItemIcon *v41; // esi@51
  char *v42; // [sp-8h] [bp-20h]@18
  char *v43; // [sp-8h] [bp-20h]@38
  int c2; // [sp+10h] [bp-8h]@13
  int c1; // [sp+14h] [bp-4h]@4
  const char *c3; // [sp+20h] [bp+8h]@4

  v2 = this;
  if ( !(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1)
    && CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime) )
    v2->m_bDuplication = 0;
  v3 = 0;
  c1 = 0;
  v4 = ((int (*)(void))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  c3 = (const char *)v4;
  v5 = (BYTE *)v4;
  v6 = ((int (*)(void))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v7 = v6 + 1;
  do
    v8 = *(_BYTE *)v6++;
  while ( v8 );
  v9 = v6 - v7;
  if ( v9 <= 0 )
  {
    if ( !v9 )
    {
      v33 = v2->m_pcOldText;
      v34 = (unsigned __int8)*v33;
      v35 = 0;
      if ( !*v33 )
        goto LABEL_54;
      do
      {
        if ( IsDBCSLeadByte(v34) )
          v33 += 2;
        else
          ++v33;
        LOBYTE(v34) = *v33;
        ++v35;
      }
      while ( *v33 );
      if ( v35 != 1 )
      {
LABEL_54:
        v37 = v2->m_pcOldText;
        v2->m_uiLimitText = 0;
        *v37 = 0;
        v42 = "%d/%d";
LABEL_19:
        v17 = v2->m_pLimitTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
LABEL_20:
        v18 = fs(v42);
        v17[118].__vecDelDtor((NiRefObject *)v2->m_pLimitTextWin, (unsigned int)v18);
        return;
      }
      v36 = v2->m_pcOldText;
      --v2->m_uiLimitText;
      *v36 = 0;
      v43 = "%d/%d";
      goto LABEL_39;
    }
  }
  else
  {
    v10 = c3;
    if ( *c3 )
    {
      do
      {
        if ( IsDBCSLeadByte(*v5) )
          v5 += 2;
        else
          ++v5;
        ++v3;
      }
      while ( *v5 );
      v10 = c3;
      c1 = v3;
    }
    v11 = v2->m_pcOldText;
    v12 = v2->m_pcOldText;
    c2 = (int)(v12 + 1);
    do
      v13 = *v12++;
    while ( v13 );
    if ( v12 == (char *)c2 )
    {
      v2->m_uiLimitText += v3;
      v14 = v10;
      v15 = v11;
      do
      {
        v16 = *v14;
        *v15++ = *v14++;
      }
      while ( v16 );
      v42 = "%d/%d";
      goto LABEL_19;
    }
    if ( _strcmpi(v11, v10) < 0 )
    {
      v19 = v2->m_pcOldText;
      v20 = *v19;
      for ( i = 0; *v19; ++i )
      {
        if ( IsDBCSLeadByte(v20) )
          v19 += 2;
        else
          ++v19;
        v20 = *v19;
      }
      v22 = c3;
      v23 = v2->m_pcOldText;
      v2->m_uiLimitText += c1 - i;
      do
      {
        v24 = *v22;
        *v23++ = *v22++;
      }
      while ( v24 );
      v17 = v2->m_pLimitTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v42 = "%d/%d";
      goto LABEL_20;
    }
    if ( _strcmpi(v2->m_pcOldText, c3) > 0 )
    {
      v25 = v2->m_pcOldText;
      v26 = *v25;
      for ( j = 0; *v25; ++j )
      {
        if ( IsDBCSLeadByte(v26) )
          v25 += 2;
        else
          ++v25;
        v26 = *v25;
      }
      v28 = c3;
      v29 = v2->m_pcOldText;
      v2->m_uiLimitText += c1 - j;
      do
      {
        v30 = *v28;
        *v29++ = *v28++;
      }
      while ( v30 );
      v43 = "%d/%d";
LABEL_39:
      v31 = v2->m_pLimitTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v32 = fs(v43);
      v31[118].__vecDelDtor((NiRefObject *)v2->m_pLimitTextWin, (unsigned int)v32);
      return;
    }
  }
  v38 = Inventory::GetItemByID(&g_kInventory, v2->m_pkItemInfo->ID);
  v39 = v2->m_pkItemIconWin;
  if ( v38 )
  {
    ItemIcon::SetItem(v39, v38, 1);
  }
  else
  {
    ItemIcon::SetItemAsID(v39, 0x7575u);
    v40 = fs("%d\n");
    v41 = v2->m_pkItemIconWin;
    ((void (__stdcall *)(char *))v41->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v40);
    ((void (__stdcall *)(signed int))v41->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
}

//----- (00584410) --------------------------------------------------------
void __thiscall RoarWin::OnEditEnd(RoarWin *this, unsigned int wParam, int lParam)
{
  ((void (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (00584430) --------------------------------------------------------
void __thiscall RoarWin::RoarWin(RoarWin *this)
{
  RoarWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RoarWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RoarWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  v1->m_uiLimitTextLength = 65;
  v1->m_uiLockInvPos = 0;
  v1->m_uiLimitText = 0;
  v1->m_pLimitTextWin = 0;
  v1->m_pcOldText = 0;
  v1->m_bDuplication = 0;
  v1->m_pkItemIconWin = 0;
  v1->m_pkItemInfo = 0;
}
// 9A9CC4: using guessed type int (__stdcall *RoarWin___vftable_)(int uiFlags);
// 9A9CE4: using guessed type int (__thiscall *RoarWin___vftable_)(void *p, char);

//----- (005844D0) --------------------------------------------------------
void __thiscall RoarWin::_RoarWin(RoarWin *this)
{
  RoarWin *v1; // esi@1
  EditWin *v2; // edi@1
  void *v3; // eax@6
  EditWin *v4; // edi@8

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RoarWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RoarWin::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spEdit.m_pObject = 0;
  }
  v3 = v1->m_pcOldText;
  v1->m_pLimitTextWin = 0;
  if ( v3 )
  {
    operator delete__(v3);
    v1->m_pcOldText = 0;
  }
  v4 = v1->m_spEdit.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9A9CC4: using guessed type int (__stdcall *RoarWin___vftable_)(int uiFlags);
// 9A9CE4: using guessed type int (__thiscall *RoarWin___vftable_)(void *p, char);

//----- (005845B0) --------------------------------------------------------
bool __thiscall RoarWin::Create(RoarWin *this, PgFrameWork *pkFrameWork)
{
  RoarWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  NiSourceTexture *v11; // eax@15
  PgSprData *v12; // eax@18
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@18
  PgFont *v15; // eax@20
  PgWinText *v16; // edi@20
  NiRefObjectVtbl *v17; // ebx@20
  char *v18; // eax@20
  PgSprData *v19; // eax@20
  unsigned __int16 *v20; // eax@20
  Item *v21; // edi@20
  char *v22; // eax@20
  EditWin *v23; // eax@23
  PgSprData *v24; // edi@23
  PgWin *v25; // edi@23
  PgFont *v26; // ST44_4@23
  unsigned int v27; // ST40_4@23
  unsigned int v28; // eax@23
  PgWinText *v29; // edi@23
  NiRefObjectVtbl *v30; // ebx@23
  char *v31; // eax@23
  PgSprData *v32; // edi@23
  PgWin *v33; // edi@23
  PgFont *v34; // ST44_4@23
  unsigned int v35; // ST40_4@23
  unsigned int v36; // eax@23
  PgWinText *v37; // edi@23
  NiRefObjectVtbl *v38; // ebx@23
  char *v39; // eax@23
  NiSourceTexture *v40; // edi@23
  PgSprData *v41; // edi@24
  PgSprData *v42; // eax@25
  PgSprData *v43; // edi@25
  PgWinSpr *v44; // eax@25
  NiPointer<PgSprData::PgHitTester> *v45; // ecx@25
  unsigned int v46; // edi@25
  unsigned int v47; // ebx@25
  PgFont *v48; // eax@25
  PgWinText *v49; // edi@25
  NiRefObjectVtbl *v50; // ebx@27
  char *v51; // eax@27
  PgSprData *v52; // eax@28
  PgSprData *v53; // edi@28
  PgWinSpr *v54; // eax@28
  NiPointer<PgSprData::PgHitTester> *v55; // ecx@28
  unsigned int v56; // edi@28
  unsigned int v57; // ebx@28
  PgFont *v58; // eax@28
  PgWinText *v59; // eax@28
  NiRefObjectVtbl *v60; // edi@28
  char *v61; // eax@28
  int v62; // ecx@29
  EditWin *v63; // ebx@30
  NiRefObjectVtbl *v64; // edi@30
  char *v65; // eax@30
  char *v66; // eax@30
  int v67; // edi@30
  char v68; // dl@31
  int v69; // eax@32
  int v70; // edx@32
  char v71; // cl@33
  void *v72; // eax@34
  const char *v73; // [sp+44h] [bp-44h]@16
  int *v74; // [sp+48h] [bp-40h]@16
  int *v75; // [sp+4Ch] [bp-3Ch]@16
  NiSourceTexture *v76; // [sp+50h] [bp-38h]@16
  NiSourceTexture *pkTexture; // [sp+64h] [bp-24h]@1
  unsigned int uiWidth; // [sp+68h] [bp-20h]@18
  unsigned int uiHeight; // [sp+6Ch] [bp-1Ch]@18
  NiPointer<NiNode> spNode; // [sp+70h] [bp-18h]@1
  int uiLeft; // [sp+74h] [bp-14h]@11
  int uiTop; // [sp+78h] [bp-10h]@11
  int v83; // [sp+84h] [bp-4h]@1
  int iYOff; // [sp+90h] [bp+8h]@15

  v2 = this;
  spNode.m_pObject = 0;
  v83 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v83 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\Roar.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "RoarWin", 0) )
  {
    v4 = spNode.m_pObject;
    v83 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  iYOff = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v76 = v11;
    v75 = &uiTop;
    v74 = &uiLeft;
    v73 = "Theme";
  }
  else
  {
    v76 = 0;
    v75 = &uiTop;
    v74 = &uiLeft;
    v73 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v73, v74, v75, v76);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_37;
  v15 = Font::Get(MAIN_MENU);
  v16 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v16,
    5u);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v16,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData::Get(0xEE4B1720u);
  v17[118].__vecDelDtor((NiRefObject *)v16, (unsigned int)v18);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Slot00", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Slot00", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkItemIconWin = ItemIcon::CreateWin(uiLeft, uiTop, &v2->baseclass_0.baseclass_0.baseclass_0);
  v20 = (unsigned __int16 *)IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(0x7575u);
  v2->m_pkItemInfo = (ItemInfo *)v20;
  v21 = Inventory::GetItemByID(&g_kInventory, *v20);
  ItemIcon::SetItemAsID(v2->m_pkItemIconWin, 0x7575u);
  v22 = fs("%d\n");
  ItemIcon::SetLotText(v2->m_pkItemIconWin, v22);
  if ( v21 )
    ItemIcon::SetItem(v2->m_pkItemIconWin, v21, 1);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "TestBox", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_37:
    v83 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v23 = EditWin::CreateWin(
          uiLeft,
          uiTop - 2,
          uiWidth,
          uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          NORMAL,
          0x41u,
          1u,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v23);
  EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnClick");
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "BtnOver");
  v25 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v26 = Font::Get(0);
  v27 = ((int (__thiscall *)(PgWin *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v25);
  v28 = ((int (__thiscall *)(PgWin *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v25);
  v29 = PgWinText::CreateWin(0, 1, v28, v27, v26, v25, 0, 0);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v29,
    5u);
  v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = TextData::Get(0x4F5F499Fu);
  v30[118].__vecDelDtor((NiRefObject *)v29, (unsigned int)v31);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor01", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "BtnClick01");
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "BtnOver01");
  v33 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v34 = Font::Get(0);
  v35 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v33);
  v36 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v33);
  v37 = PgWinText::CreateWin(0, 1, v36, v35, v34, v33, 0, 0);
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v37,
    5u);
  v38 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v39 = TextData::Get(0x88A297E1u);
  v38[118].__vecDelDtor((NiRefObject *)v37, (unsigned int)v39);
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v37,
    0);
  v40 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v40);
    PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft, uiTop, v41, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  }
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TestBox01", &uiLeft, &uiTop, 0);
  v43 = v42;
  v44 = PgWinSpr::CreateWin(uiLeft, uiTop, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v44,
    COERCE_UNSIGNED_INT(0.0));
  v45 = v43->m_akHitTester.m_pBase;
  v46 = v45->m_pObject->m_uiHeight;
  v47 = v45->m_pObject->m_uiWidth;
  v48 = Font::Get(0);
  v49 = PgWinText::CreateWin(uiLeft, uiTop, v47, v46, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v49,
    5u);
  if ( *TextData::Get(0x59487899u) )
  {
    v50 = v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v51 = TextData::Get(0x59487899u);
    v50[118].__vecDelDtor((NiRefObject *)v49, (unsigned int)v51);
  }
  else
  {
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v49,
      (unsigned int)"Unknown Use String");
  }
  v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v49,
    0);
  v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TestBox_count", &uiLeft, &uiTop, 0);
  v53 = v52;
  v54 = PgWinSpr::CreateWin(uiLeft, uiTop, v52, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v54,
    COERCE_UNSIGNED_INT(0.0));
  v55 = v53->m_akHitTester.m_pBase;
  v56 = v55->m_pObject->m_uiHeight;
  v57 = v55->m_pObject->m_uiWidth;
  v58 = Font::Get(0);
  v59 = PgWinText::CreateWin(uiLeft, uiTop, v57, v56, v58, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pLimitTextWin = v59;
  v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v59,
    5u);
  v60 = v2->m_pLimitTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v61 = fs("%d/%d");
  v60[118].__vecDelDtor((NiRefObject *)v2->m_pLimitTextWin, (unsigned int)v61);
  ((void (__stdcall *)(_DWORD))v2->m_pLimitTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(RoarWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  if ( *TextData::Get(0xFA051E34u) )
  {
    v63 = v2->m_spEdit.m_pObject;
    v64 = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v65 = TextData::Get(0xFA051E34u);
    v64[116].__vecDelDtor((NiRefObject *)v63, (unsigned int)v65);
    v66 = TextData::Get(0xFA051E34u);
    v62 = (int)v2->m_acRoarNoticeClone;
    v67 = v2->m_acRoarNoticeClone - v66;
    do
    {
      v68 = *v66;
      v66[v67] = *v66;
      ++v66;
    }
    while ( v68 );
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)("Unknown Notice");
    *(_DWORD *)&v2->m_acRoarNoticeClone[0] = dword_9A9C1C;
    v62 = (int)v2->m_acRoarNoticeClone;
    *(_DWORD *)&v2->m_acRoarNoticeClone[4] = dword_9A9C20;
    *(_DWORD *)&v2->m_acRoarNoticeClone[8] = dword_9A9C24;
    *(_WORD *)&v2->m_acRoarNoticeClone[12] = word_9A9C28;
    v2->m_acRoarNoticeClone[14] = byte_9A9C2A;
  }
  v69 = v62;
  v70 = v62 + 1;
  do
    v71 = *(_BYTE *)v69++;
  while ( v71 );
  v2->m_uiRoarNoticeLength = v69 - v70;
  v72 = operator new__(0x78u);
  v2->m_pcOldText = (char *)v72;
  *(_BYTE *)v72 = 0;
  v83 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// 9A9C1C: using guessed type int dword_9A9C1C;
// 9A9C20: using guessed type int dword_9A9C20;
// 9A9C24: using guessed type int dword_9A9C24;
// 9A9C28: using guessed type __int16 word_9A9C28;
// 9A9C2A: using guessed type char byte_9A9C2A;
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00584E00) --------------------------------------------------------
char *__thiscall RoarWin::FilterRemoveEnter(RoarWin *this, char *pcStr)
{
  void *v2; // eax@5
  TextFilter *v3; // eax@6
  char str[3]; // [sp+4h] [bp-10h]@5
  int v6; // [sp+10h] [bp-4h]@2

  if ( !(_S3_5 & 1) )
  {
    _S3_5 |= 1u;
    v6 = 0;
    unk_A99174 = 0;
    unk_A9916C = 0;
    unk_A99170 = 0;
    s_kTextFilterSet_1.m_kTextFilterList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<TextFilter *>,TextFilter *>Vtbl *)&NiTList<TextFilter__>::_vftable_;
    LOBYTE(v6) = 1;
    ProcessingString::ProcessingString(&stru_A99178);
    atexit(RoarWin::FilterRemoveEnter_::_2_::_dynamic_atexit_destructor_for__s_kTextFilterSet__);
  }
  if ( !s_bInit_2 )
  {
    s_bInit_2 = 1;
    strcpy(str, "\r\n");
    v2 = operator new(0xCu);
    v6 = 2;
    if ( v2 )
      TextFilterReplace::TextFilterReplace((TextFilterReplace *)v2, str, " ");
    else
      v3 = 0;
    v6 = -1;
    TextFilterSet::AddFilter(&s_kTextFilterSet_1, v3);
  }
  return TextFilterSet::Filter(&s_kTextFilterSet_1, pcStr, 1);
}
// 981450: using guessed type int (__thiscall *NiTList_TextFilter _____vftable_)(void *p, char);

//----- (00584F00) --------------------------------------------------------
RoarWin *__cdecl RoarWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  RoarWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x29Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    RoarWin::RoarWin((RoarWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (RoarWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00585030) --------------------------------------------------------
void __thiscall RoarWin::OnCmdOk(RoarWin *this)
{
  RoarWin *v1; // ebx@1
  char *v2; // edi@7
  char *v3; // edi@17
  int v4; // eax@21
  int v5; // esi@21
  int v6; // edx@22
  char v7; // cl@23
  int v8; // edi@24
  char v9; // al@25
  char v10; // al@28
  int v11; // ecx@28
  int v12; // edx@29
  char *v13; // eax@36
  BYTE *v14; // esi@36
  const unsigned int v15; // edi@36
  char v16; // cl@37
  char *v17; // eax@42
  int v18; // esi@47
  char *v19; // esi@54
  char *v20; // eax@55
  int v21; // eax@56
  int v22; // edx@56
  char v23; // cl@57
  char *v24; // eax@61
  char *v25; // eax@61
  char *v26; // edi@69
  char *v27; // [sp+0h] [bp-A0h]@50
  int v28; // [sp+4h] [bp-9Ch]@50
  unsigned int v29; // [sp+4h] [bp-9Ch]@51
  char *pcText; // [sp+14h] [bp-8Ch]@21
  char acToken[128]; // [sp+1Ch] [bp-84h]@26
  unsigned int v32; // [sp+9Ch] [bp-4h]@1
  int v33; // [sp+A0h] [bp+0h]@1

  v32 = (unsigned int)&v33 ^ __security_cookie;
  v1 = this;
  if ( AnnounceWin::m_bNoticing )
  {
    if ( *TextData::Get(0xD8F8002Bu) )
    {
      v2 = TextData::Get(0xD8F8002Bu);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v2,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v2,
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        v2,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    else
    {
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          "Error - Global Notice",
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            "Error - Global Notice",
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        "Error - Global Notice",
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    return;
  }
  if ( this->m_bDuplication == 1 )
  {
    if ( *TextData::Get(0xDC4F373Eu) )
    {
      v3 = TextData::Get(0xDC4F373Eu);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, char *, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v3,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, char *, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v3,
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        v3,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    else
    {
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          "Error - CollTime",
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            "Error - CollTime",
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        "Error - CollTime",
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    return;
  }
  v4 = ((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v5 = v4;
  pcText = (char *)v4;
  if ( !v4 )
    return;
  v6 = v4 + 1;
  do
    v7 = *(_BYTE *)v4++;
  while ( v7 );
  v8 = v4 - v6;
  if ( !*(_BYTE *)v5 )
  {
LABEL_36:
    v13 = pcText;
    v14 = pcText;
    v15 = 0;
    do
      v16 = *v13++;
    while ( v16 );
    if ( v13 != pcText + 1 && *pcText )
    {
      do
      {
        if ( IsDBCSLeadByte(*v14) )
          v14 += 2;
        else
          ++v14;
        ++v15;
      }
      while ( *v14 );
    }
    if ( v15 <= v1->m_uiLimitTextLength )
    {
      if ( v15 && strcmp(pcText, TextData::Get(0xFA051E34u)) )
      {
        v19 = TextFilterTable::FilterSlander(pcText);
        if ( strcmp(pcText, v19) )
        {
          v20 = TextData::Get(0x24663F86u);
          GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v20);
          ((void (__stdcall *)(char *))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(v19);
        }
        else
        {
          v21 = ((int (*)(void))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
          v22 = v21 + 1;
          do
            v23 = *(_BYTE *)v21++;
          while ( v23 );
          if ( v21 != v22 )
          {
            if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].DeleteAbStateByAbstateIndex)() )
              InvWin::SetLock(
                *((InvWin **)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v1->m_uiLockInvPos + 87),
                0);
            v24 = (char *)((int (*)(void))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
            v25 = RoarWin::FilterRemoveEnter(v1, v24);
            ((void (__stdcall *)(char *))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(v25);
            GameFrameWork::On_NC_ACT_ROAR_REQ((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
            PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
            if ( !(unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[1].DeleteAbStateByAbstateIndex)() )
            {
              CNSTimer_Interval::ReSet(&v1->m_kTimerInterval, Timer::ms_fCurTime);
              v1->m_kTimerInterval.m_fCheckTime = 5.0;
              v1->m_bDuplication = 1;
            }
          }
        }
        return;
      }
      if ( !*TextData::Get(0x820DE0EBu) )
      {
        v18 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            "Error - Not Input",
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              "Error - Not Input",
              &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        }
        v28 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v27 = "Error - Not Input";
        goto LABEL_73;
      }
      v29 = -2113019669;
    }
    else
    {
      if ( !*TextData::Get(0x89B5F6C7u) )
      {
        v18 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            "Error - String Over",
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              "Error - String Over",
              &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        }
        v28 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v27 = "Error - String Over";
LABEL_73:
        (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v18 + 20))(v18, 25, v27, v28);
        return;
      }
      v29 = -1984563513;
    }
    v18 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v26 = TextData::Get(v29);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v26,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v26,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v28 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v27 = v26;
    goto LABEL_73;
  }
  while ( 1 )
  {
    v9 = *(_BYTE *)v5++;
    if ( v9 == 123 )
    {
      acToken[0] = 0;
      memset(&acToken[1], 0, 0x7Fu);
      for ( ; *(_BYTE *)v5 == 32; ++v5 )
        ;
      v10 = *(_BYTE *)v5;
      v11 = (int)acToken;
      if ( *(_BYTE *)v5 )
      {
        v12 = 0;
        do
        {
          if ( v12 >= v8 )
            break;
          if ( v10 != 32 )
          {
            *(_BYTE *)v11++ = v10;
            ++v12;
          }
          v10 = *(_BYTE *)(v5++ + 1);
        }
        while ( v10 );
      }
      *(_BYTE *)v11 = 0;
      if ( !_strnicmp(acToken, "color,", 6u) )
        break;
    }
    if ( !*(_BYTE *)v5 )
      goto LABEL_36;
  }
  InvWin::SetLock(*((InvWin **)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v1->m_uiLockInvPos + 87), 0);
  v17 = TextData3::Get(0xE012BCE5u);
  GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v17);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A987EC: using guessed type char AnnounceWin__m_bNoticing;

//----- (00585600) --------------------------------------------------------
void __thiscall RoarWin::OnCommand(RoarWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // eax@4

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      InvWin::SetLock(*((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + this->m_uiLockInvPos + 87), 0);
      PgWin::PostMsg(v3, v3, 1u, 0, 0);
    }
    else
    {
      if ( wParam == 2 )
      {
        v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v4 )
          GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "Roar");
      }
    }
  }
  else
  {
    RoarWin::OnCmdOk(this);
  }
}

//----- (00585680) --------------------------------------------------------
void *__thiscall RoarWin::_scalar_deleting_destructor_(RoarWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  RoarWin::_RoarWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005856B0) --------------------------------------------------------
void __thiscall RollingDiceWin::RollingDiceWin(RollingDiceWin *this)
{
  RollingDiceWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RollingDiceWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RollingDiceWin::_vftable_;
  v1->m_fTimeWhenCasted = 3.4028235e38;
  v1->m_pkCastingProgress = 0;
  v1->m_bCloseWhenFinished = 1;
  v1->m_fCastingTime = 0.0;
  *(_DWORD *)&v1->m_kItemHandle = -1;
  v1->m_fMax = 0.94999999;
}
// 9AA0C0: using guessed type int (__stdcall *RollingDiceWin___vftable_)(int uiFlags);
// 9AA0DC: using guessed type int (__thiscall *RollingDiceWin___vftable_)(void *p, char);

//----- (00585710) --------------------------------------------------------
void __thiscall RollingDiceWin::_RollingDiceWin(RollingDiceWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RollingDiceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RollingDiceWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9AA0C0: using guessed type int (__stdcall *RollingDiceWin___vftable_)(int uiFlags);
// 9AA0DC: using guessed type int (__thiscall *RollingDiceWin___vftable_)(void *p, char);

//----- (00585730) --------------------------------------------------------
void __thiscall RollingDiceWin::OnCommand(RollingDiceWin *this, unsigned int wParam, int lParam)
{
  RollingDiceWin *v3; // esi@1
  void *v4; // [sp-8h] [bp-Ch]@3
  int v5; // [sp-4h] [bp-8h]@3

  v3 = this;
  if ( wParam == 1 )
  {
    v5 = 3;
    LOWORD(wParam) = this->m_kItemHandle;
    BYTE2(wParam) = 0;
    v4 = &wParam;
  }
  else
  {
    if ( wParam != 2 )
      return;
    v5 = 3;
    LOWORD(wParam) = this->m_kItemHandle;
    BYTE2(wParam) = 1;
    v4 = &wParam;
  }
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x3Cu, v4, v5);
  ItemIcon::SetItemAsID(v3->m_pkItemIconWin, 0xFFFFu);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005857B0) --------------------------------------------------------
void __thiscall RollingDiceWin::Stop(RollingDiceWin *this)
{
  this->m_fCastingTime = 0.0;
}

//----- (005857C0) --------------------------------------------------------
void __thiscall RollingDiceMsgWin::RollingDiceMsgWin(RollingDiceMsgWin *this)
{
  RollingDiceMsgWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RollingDiceMsgWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RollingDiceMsgWin::_vftable_;
  *(_DWORD *)&v1->m_kItemID = -1;
}
// 9AA300: using guessed type int (__stdcall *RollingDiceMsgWin___vftable_)(int uiFlags);
// 9AA31C: using guessed type int (__thiscall *RollingDiceMsgWin___vftable_)(void *p, char);

//----- (005857F0) --------------------------------------------------------
void __thiscall RollingDiceMsgWin::_RollingDiceMsgWin(RollingDiceMsgWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RollingDiceMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RollingDiceMsgWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9AA300: using guessed type int (__stdcall *RollingDiceMsgWin___vftable_)(int uiFlags);
// 9AA31C: using guessed type int (__thiscall *RollingDiceMsgWin___vftable_)(void *p, char);

//----- (00585810) --------------------------------------------------------
void __thiscall RollingDiceMsgWin::OnCommand(RollingDiceMsgWin *this, unsigned int wParam, int lParam)
{
  RollingDiceMsgWin *v3; // esi@1
  PgFrameWork *v4; // eax@4

  v3 = this;
  if ( wParam == 1 )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      GameFrameWork::NcItemPickReq((GameFrameWork *)v4, v3->m_kItemHandle);
      v3->m_kItemHandle = -1;
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  else
  {
    if ( wParam == 2 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00585870) --------------------------------------------------------
void __thiscall RollingDiceMsgWin::SetItemInfo(RollingDiceMsgWin *this, unsigned __int16 kItemID, unsigned __int16 kItemHandle)
{
  this->m_kItemID = kItemID;
  this->m_kItemHandle = kItemHandle;
  ItemIcon::SetItemAsID(this->m_pkItemIconWin, kItemID);
}

//----- (005858B0) --------------------------------------------------------
void __thiscall RollingDiceMsgWin::UpdateMeWin(RollingDiceMsgWin *this, float fCurTime)
{
  RollingDiceMsgWin *v2; // esi@1
  Item *v3; // eax@2
  ItemInfoWin *v4; // ecx@2

  v2 = this;
  if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->m_pkItemIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) )
  {
    v3 = Item::Create(v2->m_kItemID);
    v4 = (ItemInfoWin *)v2->m_pkItemIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v4 )
    {
      if ( v3 )
        ItemInfoWin::SetItemInfo(v4, v3);
    }
  }
}

//----- (00585910) --------------------------------------------------------
bool __thiscall RollingDiceWin::Create(RollingDiceWin *this, PgFrameWork *pkFrameWork)
{
  RollingDiceWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  int v11; // ebx@15
  NiSourceTexture *v12; // eax@15
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@18
  ItemIcon *v15; // eax@18
  PgSprData::PgHitTester *v16; // eax@18
  PgFont *v17; // eax@18
  PgWinText *v18; // eax@18
  NiPointer<PgSprData::PgHitTester> *v19; // ecx@18
  PgFont *v20; // eax@18
  char *v21; // eax@18
  PgSprData *v22; // eax@18
  PgSprData *v23; // eax@18
  PgWinBar *v24; // eax@18
  PgSprData *v25; // eax@18
  PgWinBar *v26; // eax@18
  PgSprData *v27; // eax@18
  PgWinBar *v28; // eax@18
  PgSprData::PgHitTester *v29; // eax@18
  PgFont *v30; // eax@18
  char *v31; // eax@18
  NiPointer<PgSprData::PgHitTester> *v32; // ecx@18
  PgFont *v33; // eax@18
  PgWinText *v34; // edi@18
  NiRefObjectVtbl *v35; // ebx@18
  char *v36; // eax@18
  NiNode *v37; // esi@19
  const char *v38; // [sp+34h] [bp-48h]@16
  int *v39; // [sp+38h] [bp-44h]@16
  int *v40; // [sp+3Ch] [bp-40h]@16
  NiSourceTexture *v41; // [sp+40h] [bp-3Ch]@16
  int uiWidth; // [sp+54h] [bp-28h]@18
  int uiHeight; // [sp+58h] [bp-24h]@18
  unsigned int v44; // [sp+5Ch] [bp-20h]@18
  NiSourceTexture *pkTexture; // [sp+60h] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+64h] [bp-18h]@1
  int uiLeft; // [sp+68h] [bp-14h]@11
  int uiTop; // [sp+6Ch] [bp-10h]@11
  int v49; // [sp+78h] [bp-4h]@1
  PgSprData *pkTextWin; // [sp+84h] [bp+8h]@18
  unsigned int pkTextWina; // [sp+84h] [bp+8h]@18
  PgSprData *pkTextWinb; // [sp+84h] [bp+8h]@18
  unsigned int pkTextWinc; // [sp+84h] [bp+8h]@18
  PgWinText *pkTextWind; // [sp+84h] [bp+8h]@18
  PgSprData *pkTextWine; // [sp+84h] [bp+8h]@18
  unsigned int pkTextWinf; // [sp+84h] [bp+8h]@18
  PgWinText *pkTextWing; // [sp+84h] [bp+8h]@18
  PgSprData *pkTextWinh; // [sp+84h] [bp+8h]@18
  unsigned int pkTextWini; // [sp+84h] [bp+8h]@18

  v2 = this;
  spNode.m_pObject = 0;
  v49 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v49 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\BelongDiceMain.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "RollingDiceWin", 0) )
  {
    v4 = spNode.m_pObject;
    v49 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = uiLeft;
  v11 = uiTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v41 = v12;
    v40 = &uiTop;
    v39 = &uiLeft;
    v38 = "Theme";
  }
  else
  {
    v41 = 0;
    v40 = &uiTop;
    v39 = &uiLeft;
    v38 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v38, v39, v40, v41);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  PgUtil::GetTriShapeRect(
    &spNode.m_pObject->baseclass_0,
    "InvItemSlot001",
    &uiLeft,
    &uiTop,
    (unsigned int *)&uiWidth,
    (unsigned int *)&uiHeight);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvItemSlot001", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = ItemIcon::CreateWin(uiLeft, uiTop, &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkItemIconWin = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = pkTextWin->m_akHitTester.m_pBase->m_pObject;
  pkTextWina = v16->m_uiHeight;
  v44 = v16->m_uiWidth;
  v17 = Font::Get(0);
  v18 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11,
          v44,
          pkTextWina,
          v17,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkItemName = v18;
  v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v18,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkItemName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A9F33);
  ((void (__stdcall *)(_DWORD))v2->m_pkItemName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWinb = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, pkTextWinb, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19 = pkTextWinb->m_akHitTester.m_pBase;
  pkTextWinc = v19->m_pObject->m_uiHeight;
  v44 = v19->m_pObject->m_uiWidth;
  v20 = Font::Get(0);
  pkTextWind = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11,
                 v44,
                 pkTextWinc,
                 v20,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
  pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWind,
    5u);
  pkTextWind->m_spTextGeom.m_pObject->baseclass_0.m_bTextCmdOn = 1;
  v44 = (unsigned int)pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData2::Get(0x1CA58C64u);
  (*(void (__thiscall **)(PgWinText *, char *))(v44 + 472))(pkTextWind, v21);
  ((void (__stdcall *)(_DWORD))pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_Skill_Panel", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_Skill", &uiLeft, &uiTop, 0);
  v24 = PgWinBar::CreateWin(uiLeft - v10, uiTop - v11, v23, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkCastingProgress = v24;
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    0);
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_Skill_Start", &uiLeft, &uiTop, 0);
  v26 = PgWinBar::CreateWin(uiLeft - v10, uiTop - v11, v25, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkCastingBarStart = (PgWinSpr *)v26;
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_Skill_End", &uiLeft, &uiTop, 0);
  v28 = PgWinBar::CreateWin(uiLeft - v10, uiTop - v11, v27, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkCastingBarEnd = (PgWinSpr *)v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v28,
    0);
  pkTextWine = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWine, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(pkTextWine, &spNode.m_pObject->baseclass_0, "BtnOver02");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWine, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v29 = pkTextWine->m_akHitTester.m_pBase->m_pObject;
  pkTextWinf = v29->m_uiHeight;
  v44 = v29->m_uiWidth;
  v30 = Font::Get(MAIN_MENU);
  pkTextWing = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop - v11 + 1,
                 v44,
                 pkTextWinf,
                 v30,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
  pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWing,
    5u);
  v44 = (unsigned int)pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = TextData2::Get(0x32518C68u);
  (*(void (__thiscall **)(PgWinText *, char *))(v44 + 472))(pkTextWing, v31);
  ((void (__stdcall *)(_DWORD))pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWinh = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWinh, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(pkTextWinh, &spNode.m_pObject->baseclass_0, "BtnOver03");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkTextWinh, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v32 = pkTextWinh->m_akHitTester.m_pBase;
  pkTextWini = v32->m_pObject->m_uiHeight;
  v44 = v32->m_pObject->m_uiWidth;
  v33 = Font::Get(MAIN_MENU);
  v34 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v11 + 1,
          v44,
          pkTextWini,
          v33,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v34,
    5u);
  v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v36 = TextData2::Get(0x27513972u);
  v35[118].__vecDelDtor((NiRefObject *)v34, (unsigned int)v36);
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v34,
    0);
  ((void (__thiscall *)(RollingDiceWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.80000001);
  v49 = -1;
  if ( spNode.m_pObject )
  {
    v37 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v37 )
        v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00585F90) --------------------------------------------------------
bool __thiscall RollingDiceMsgWin::Create(RollingDiceMsgWin *this, PgFrameWork *pkFrameWork)
{
  RollingDiceMsgWin *v2; // esi@1
  void *v3; // ebx@1
  bool result; // al@6
  NiTexturePalette *v5; // edi@7
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  NiNode *v8; // esi@11
  int v9; // ebx@16
  NiSourceTexture *v10; // eax@16
  PgSprData *v11; // eax@19
  PgSprData *v12; // eax@19
  ItemIcon *v13; // eax@19
  PgSprData *v14; // edi@19
  NiPointer<PgSprData::PgHitTester> *v15; // ecx@19
  unsigned int v16; // edi@19
  PgFont *v17; // eax@19
  PgWinText *v18; // eax@19
  NiRefObjectVtbl *v19; // edi@19
  char *v20; // eax@19
  PgSprData *v21; // edi@19
  NiPointer<PgSprData::PgHitTester> *v22; // edx@19
  unsigned int v23; // edi@19
  PgFont *v24; // eax@19
  PgWinText *v25; // edi@19
  char *v26; // eax@19
  PgSprData *v27; // edi@19
  PgSprData::PgHitTester *v28; // eax@19
  unsigned int v29; // edi@19
  PgFont *v30; // eax@19
  PgWinText *v31; // edi@19
  NiRefObjectVtbl *v32; // ebx@19
  char *v33; // eax@19
  NiNode *v34; // esi@20
  const char *v35; // [sp+20h] [bp-48h]@17
  int *v36; // [sp+24h] [bp-44h]@17
  int *v37; // [sp+28h] [bp-40h]@17
  NiSourceTexture *v38; // [sp+2Ch] [bp-3Ch]@17
  int uiWidth; // [sp+40h] [bp-28h]@19
  int uiHeight; // [sp+44h] [bp-24h]@19
  unsigned int v41; // [sp+48h] [bp-20h]@19
  NiSourceTexture *pkTexture; // [sp+4Ch] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+50h] [bp-18h]@1
  int uiLeft; // [sp+54h] [bp-14h]@10
  int uiTop; // [sp+58h] [bp-10h]@10
  int v46; // [sp+64h] [bp-4h]@1
  int iYOff; // [sp+70h] [bp+8h]@16

  v2 = this;
  spNode.m_pObject = 0;
  v46 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\BelongDiceMsg.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( PgWinFrame::Create(&v2->baseclass_0, uiLeft, uiTop, v7, 0, pkFrameWork, "RollingDiceMsgWin", 0) )
  {
    v9 = uiLeft;
    iYOff = uiTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v38 = v10;
      v37 = &uiTop;
      v36 = &uiLeft;
      v35 = "Theme";
    }
    else
    {
      v38 = 0;
      v37 = &uiTop;
      v36 = &uiLeft;
      v35 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v35, v36, v37, v38);
    PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "InvItemSlot001",
      &uiLeft,
      &uiTop,
      (unsigned int *)&uiWidth,
      (unsigned int *)&uiHeight);
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvItemSlot001", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v13 = ItemIcon::CreateWin(uiLeft, uiTop, &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkItemIconWin = v13;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v15 = v14->m_akHitTester.m_pBase;
    v16 = v15->m_pObject->m_uiHeight;
    v41 = v15->m_pObject->m_uiWidth;
    v17 = Font::Get(0);
    v18 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iYOff,
            v41,
            v16,
            v17,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkItemName = v18;
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v18,
      5u);
    v2->m_pkItemName->m_spTextGeom.m_pObject->baseclass_0.m_bTextCmdOn = 1;
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkItemName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9A9F3A);
    v19 = v2->m_pkItemName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData2::Get(0x1A341301u);
    v19[118].__vecDelDtor((NiRefObject *)v2->m_pkItemName, (unsigned int)v20);
    ((void (__stdcall *)(_DWORD))v2->m_pkItemName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "BtnClick02");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "BtnOver02");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v22 = v21->m_akHitTester.m_pBase;
    v23 = v22->m_pObject->m_uiHeight;
    v41 = v22->m_pObject->m_uiWidth;
    v24 = Font::Get(MAIN_MENU);
    v25 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iYOff + 1,
            v41,
            v23,
            v24,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    v41 = (unsigned int)v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData2::Get(0x32518C68u);
    (*(void (__thiscall **)(PgWinText *, char *))(v41 + 472))(v25, v26);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "BtnClick03");
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "BtnOver03");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v28 = v27->m_akHitTester.m_pBase->m_pObject;
    v29 = v28->m_uiHeight;
    v41 = v28->m_uiWidth;
    v30 = Font::Get(MAIN_MENU);
    v31 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iYOff + 1,
            v41,
            v29,
            v30,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v31,
      5u);
    v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v33 = TextData2::Get(0x27513972u);
    v32[118].__vecDelDtor((NiRefObject *)v31, (unsigned int)v33);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    ((void (__thiscall *)(RollingDiceMsgWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.60000002);
    v46 = -1;
    if ( spNode.m_pObject )
    {
      v34 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v34 )
          v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v8 = spNode.m_pObject;
    v46 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00586470) --------------------------------------------------------
void __thiscall RollingDiceWin::SetDiceInfo(RollingDiceWin *this, unsigned __int16 kItemHandle, int iTimeSec)
{
  RollingDiceWin *v3; // esi@1
  PgWinBar *v4; // ecx@1
  DropItem *v5; // eax@4
  DropItem *v6; // edi@4
  ItemIcon *v7; // ecx@5
  NiRefObjectVtbl *v8; // ebx@5
  char *v9; // eax@5

  v3 = this;
  v4 = this->m_pkCastingProgress;
  v3->m_fCastingTime = (double)iTimeSec;
  v3->m_kItemHandle = kItemHandle;
  v3->m_fTimeWhenCasted = Timer::ms_fCurTime;
  if ( 0.0 != v4->m_fMaxValue || 0.0 != v4->m_fCurValue )
  {
    v4->m_fMaxValue = 0.0;
    v4->m_fCurValue = 0.0;
    PgWinBar::OnChangeValue(v4);
  }
  ((void (__stdcall *)(_DWORD))v3->m_pkCastingBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v3->m_pkCastingBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v5 = DropItemMgr::GetByHandle(&g_kDropItemMgr, v3->m_kItemHandle);
  v6 = v5;
  if ( v5 )
  {
    v7 = v3->m_pkItemIconWin;
    v3->m_kItemID = v5->m_kItemID;
    ItemIcon::SetItemAsID(v7, v5->m_kItemID);
    v8 = v3->m_pkItemName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = DropItem::GetItemName(v6);
    v8[118].__vecDelDtor((NiRefObject *)v3->m_pkItemName, (unsigned int)v9);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00586560) --------------------------------------------------------
void __thiscall RollingDiceWin::UpdateMeWin(RollingDiceWin *this, float fCurTime)
{
  RollingDiceWin *v2; // esi@1
  double v3; // st5@2
  double v4; // st7@7
  PgWinBar *v5; // ecx@12
  Item *v6; // eax@17
  ItemInfoWin *v7; // ecx@17
  float fValuea; // [sp+14h] [bp+8h]@2
  float fValue; // [sp+14h] [bp+8h]@5
  float fValueb; // [sp+14h] [bp+8h]@9

  v2 = this;
  if ( this->m_fCastingTime <= 0.0 )
  {
    v5 = this->m_pkCastingProgress;
    if ( 0.0 == v5->m_fMaxValue && 0.0 == v5->m_fCurValue )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      v5->m_fMaxValue = 0.0;
      v5->m_fCurValue = 0.0;
      PgWinBar::OnChangeValue(v5);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  else
  {
    fValuea = (fCurTime - this->m_fTimeWhenCasted) / this->m_fCastingTime;
    v3 = fValuea;
    if ( fValuea > 1.0 )
    {
      if ( this->m_bCloseWhenFinished )
      {
        PgWinBar::SetValue(this->m_pkCastingProgress, 0.0, 0.0);
        v2->m_fCastingTime = 0.0;
        PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
        return;
      }
    }
    else
    {
      if ( 1.0 == v3 )
      {
        PgWinBar::SetValue(this->m_pkCastingProgress, 0.0, 0.0);
      }
      else
      {
        fValue = this->m_fMax - v3;
        if ( fValue < 0.0 )
          fValue = 0.0;
        v4 = 0.0;
        if ( v3 < 1.0 )
          v4 = fValue;
        fValueb = v4;
        PgWinBar::SetValue(this->m_pkCastingProgress, 0.94999999, fValueb);
      }
    }
  }
  if ( (unsigned __int8)((int (__stdcall *)(int, int))v2->m_pkItemIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) )
  {
    v6 = Item::Create(v2->m_kItemID);
    v7 = (ItemInfoWin *)v2->m_pkItemIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v7 )
    {
      if ( v6 )
        ItemInfoWin::SetItemInfo(v7, v6);
    }
  }
}

//----- (00586700) --------------------------------------------------------
RollingDiceWin *__cdecl RollingDiceWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  RollingDiceWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x180u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    RollingDiceWin::RollingDiceWin((RollingDiceWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (RollingDiceWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00586830) --------------------------------------------------------
RollingDiceMsgWin *__cdecl RollingDiceMsgWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  RollingDiceMsgWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x164u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &RollingDiceMsgWin::_vftable_;
    *((_DWORD *)v2 + 58) = &RollingDiceMsgWin::_vftable_;
    *((_DWORD *)v2 + 87) = -1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (RollingDiceMsgWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9AA300: using guessed type int (__stdcall *RollingDiceMsgWin___vftable_)(int uiFlags);
// 9AA31C: using guessed type int (__thiscall *RollingDiceMsgWin___vftable_)(void *p, char);

//----- (00586980) --------------------------------------------------------
void *__thiscall RollingDiceWin::_vector_deleting_destructor_(RollingDiceWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RollingDiceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RollingDiceWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AA0C0: using guessed type int (__stdcall *RollingDiceWin___vftable_)(int uiFlags);
// 9AA0DC: using guessed type int (__thiscall *RollingDiceWin___vftable_)(void *p, char);

//----- (005869C0) --------------------------------------------------------
void *__thiscall RollingDiceMsgWin::_vector_deleting_destructor_(RollingDiceMsgWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&RollingDiceMsgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&RollingDiceMsgWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AA300: using guessed type int (__stdcall *RollingDiceMsgWin___vftable_)(int uiFlags);
// 9AA31C: using guessed type int (__thiscall *RollingDiceMsgWin___vftable_)(void *p, char);

//----- (00586A00) --------------------------------------------------------
void __thiscall ScreenWin::ScreenWin(ScreenWin *this)
{
  ScreenWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ScreenWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ScreenWin::_vftable_;
}
// 9AA54C: using guessed type int (__stdcall *ScreenWin___vftable_)(int uiFlags);
// 9AA56C: using guessed type int (__thiscall *ScreenWin___vftable_)(void *p, char);

//----- (00586A20) --------------------------------------------------------
void __thiscall ScreenWin::_ScreenWin(ScreenWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ScreenWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ScreenWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9AA54C: using guessed type int (__stdcall *ScreenWin___vftable_)(int uiFlags);
// 9AA56C: using guessed type int (__thiscall *ScreenWin___vftable_)(void *p, char);

//----- (00586A40) --------------------------------------------------------
bool __thiscall ScreenWin::Create(ScreenWin *this, PgFrameWork *pkFrameWork)
{
  ScreenWin *v2; // esi@1
  bool result; // al@1

  v2 = this;
  result = PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFrameWork, "ScreenWin", 0);
  if ( result )
  {
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
      (NiRefObject *)v2,
      PgWin::ms_uiScreenWidth);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
      (NiRefObject *)v2,
      PgWin::ms_uiScreenHeight);
    result = 1;
  }
  return result;
}

//----- (00586AA0) --------------------------------------------------------
void __thiscall ScreenWin::UpdateMeWin(ScreenWin *this, float fCurTime)
{
  ScreenWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)(PgWin::ms_uiScreenWidth);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
    (NiRefObject *)v2,
    PgWin::ms_uiScreenHeight);
}

//----- (00586AD0) --------------------------------------------------------
void __thiscall ScreenWin::ProcessMeInput(ScreenWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    PgWinFrame::ProcessMeInput(v2, bHit);
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (00586B20) --------------------------------------------------------
bool __thiscall ScreenWin::EatDropReference(ScreenWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  return *pkDrop != 0;
}

//----- (00586B30) --------------------------------------------------------
ScreenWin *__cdecl ScreenWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ScreenWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ScreenWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ScreenWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ScreenWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9AA54C: using guessed type int (__stdcall *ScreenWin___vftable_)(int uiFlags);
// 9AA56C: using guessed type int (__thiscall *ScreenWin___vftable_)(void *p, char);

//----- (00586C70) --------------------------------------------------------
void *__thiscall ScreenWin::_scalar_deleting_destructor_(ScreenWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ScreenWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ScreenWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AA54C: using guessed type int (__stdcall *ScreenWin___vftable_)(int uiFlags);
// 9AA56C: using guessed type int (__thiscall *ScreenWin___vftable_)(void *p, char);

//----- (00586CB0) --------------------------------------------------------
void __thiscall ServerMenuWin::SetPriority(ServerMenuWin *this, char byPriority)
{
  this->m_byPriority = byPriority;
}

//----- (00586CC0) --------------------------------------------------------
char __thiscall ServerMenuWin::GetPriority(ServerMenuWin *this)
{
  return this->m_byPriority;
}

//----- (00586CD0) --------------------------------------------------------
void __thiscall ServerMenuWin::OnBut0(ServerMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcMenuServerMenuAck((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_aucReply[0]);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (00586D00) --------------------------------------------------------
void __thiscall ServerMenuWin::OnBut1(ServerMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcMenuServerMenuAck((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_aucReply[1]);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (00586D30) --------------------------------------------------------
void __thiscall ServerMenuWin::OnBut2(ServerMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcMenuServerMenuAck((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_aucReply[2]);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (00586D60) --------------------------------------------------------
void __thiscall ServerMenuWin::OnBut3(ServerMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcMenuServerMenuAck((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_aucReply[3]);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (00586D90) --------------------------------------------------------
void __thiscall ServerMenuWin::OnBut4(ServerMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcMenuServerMenuAck((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_aucReply[4]);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (00586DC0) --------------------------------------------------------
void __thiscall ServerMenuWin::SetMsg(ServerMenuWin *this, char *pcText)
{
  char *v2; // ebx@1
  char *v3; // esi@1
  signed int v4; // edi@1
  char *v5; // edi@5
  int v6; // eax@7
  int v7; // eax@7
  int v8; // esi@7
  signed int v9; // eax@7
  char *v10; // eax@11
  char *v11; // esi@16
  signed int v12; // edi@16
  HDC__ *hDC; // [sp+Ch] [bp-110h]@5
  signed int iLineNum; // [sp+10h] [bp-10Ch]@5
  char *v15; // [sp+14h] [bp-108h]@1
  char acStr[256]; // [sp+18h] [bp-104h]@7
  unsigned int v17; // [sp+118h] [bp-4h]@1
  int v18; // [sp+11Ch] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = pcText;
  v15 = (char *)this->m_apkTextWin;
  v3 = (char *)this->m_apkTextWin;
  v4 = 5;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v3 + 472))(&unk_9AA7B6);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( pcText && *pcText )
  {
    v5 = v15;
    hDC = *(HDC__ **)((*(int (**)(void))(**(_DWORD **)v15 + 456))() + 192);
    iLineNum = 0;
    do
    {
      if ( !*v2 )
        break;
      v6 = (*(int (**)(void))(**(_DWORD **)v5 + 144))();
      v7 = PgUtil::StringPixelCopy(acStr, v2, hDC, v6);
      v8 = v7;
      acStr[v7] = 0;
      v9 = 0;
      if ( acStr[0] == 32 )
      {
        do
        {
          if ( !acStr[v9] )
            break;
          if ( v9 >= 255 )
            break;
          ++v9;
        }
        while ( acStr[v9] == 32 );
      }
      v10 = &acStr[v9];
      if ( v10 )
        (*(void (__stdcall **)(char *))(**(_DWORD **)v5 + 472))(v10);
      v2 += v8;
      v5 += 4;
      ++iLineNum;
    }
    while ( iLineNum < 5 );
    if ( iLineNum == 1 )
    {
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v15 + 488))(1);
    }
    else
    {
      v11 = v15;
      v12 = 5;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v11 + 488))(0);
        v11 += 4;
        --v12;
      }
      while ( v12 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00586F40) --------------------------------------------------------
void __thiscall ServerMenuWin::_ServerMenuWin(ServerMenuWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ServerMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ServerMenuWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 9AA880: using guessed type int (__stdcall *ServerMenuWin___vftable_)(int uiFlags);
// 9AA89C: using guessed type int (__thiscall *ServerMenuWin___vftable_)(void *p, char);

//----- (00586FC0) --------------------------------------------------------
bool __thiscall ServerMenuWin::Create(ServerMenuWin *this, PgFrameWork *pkFrameWork)
{
  ServerMenuWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  PgFont *v13; // eax@20
  unsigned int v14; // edi@22
  PgFont *v15; // ST40_4@22
  unsigned int v16; // ST3C_4@22
  int v17; // eax@22
  PgWinText *v18; // eax@22
  int v19; // edi@22
  PgSprData *v20; // edi@31
  PgWinBut *v21; // eax@31
  PgWin *v22; // ST44_4@31
  PgWinBut *v23; // edi@31
  PgFont *v24; // ST40_4@31
  unsigned int v25; // ST3C_4@31
  unsigned int v26; // eax@31
  PgWinText *v27; // eax@31
  NiRefObjectVtbl *v28; // edi@31
  char *v29; // eax@31
  PgSprData *v30; // edi@31
  PgWinBut *v31; // eax@31
  PgWin *v32; // ST44_4@31
  PgWinBut *v33; // edi@31
  PgFont *v34; // ST40_4@31
  unsigned int v35; // ST3C_4@31
  unsigned int v36; // eax@31
  PgWinText *v37; // eax@31
  NiRefObjectVtbl *v38; // edi@31
  char *v39; // eax@31
  PgSprData *v40; // edi@31
  PgWinBut *v41; // eax@31
  PgWin *v42; // ST44_4@31
  PgWinBut *v43; // edi@31
  PgFont *v44; // ST40_4@31
  unsigned int v45; // ST3C_4@31
  unsigned int v46; // eax@31
  PgWinText *v47; // eax@31
  NiRefObjectVtbl *v48; // edi@31
  char *v49; // eax@31
  PgSprData *v50; // edi@31
  PgWinBut *v51; // eax@31
  PgWin *v52; // ST44_4@31
  PgWinBut *v53; // edi@31
  PgFont *v54; // ST40_4@31
  unsigned int v55; // ST3C_4@31
  unsigned int v56; // eax@31
  PgWinText *v57; // eax@31
  NiRefObjectVtbl *v58; // edi@31
  char *v59; // eax@31
  PgSprData *v60; // edi@31
  PgWinBut *v61; // eax@31
  PgWin *v62; // ST44_4@31
  PgWinBut *v63; // edi@31
  PgFont *v64; // ST40_4@31
  unsigned int v65; // ST3C_4@31
  unsigned int v66; // eax@31
  PgWinText *v67; // eax@31
  NiRefObjectVtbl *v68; // edi@31
  char *v69; // eax@31
  NiNode *v70; // eax@31
  NiNode *v71; // esi@32
  const char *v72; // [sp+40h] [bp-44h]@16
  int *v73; // [sp+44h] [bp-40h]@16
  int *v74; // [sp+48h] [bp-3Ch]@16
  NiSourceTexture *v75; // [sp+4Ch] [bp-38h]@16
  PgFont *pkFont; // [sp+60h] [bp-24h]@20
  PgWinText *v77; // [sp+64h] [bp-20h]@22
  signed int i; // [sp+68h] [bp-1Ch]@20
  int uiLeft; // [sp+6Ch] [bp-18h]@11
  int uiTop; // [sp+70h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+74h] [bp-10h]@1
  int v82; // [sp+80h] [bp-4h]@1
  int pkFrameWorka; // [sp+8Ch] [bp+8h]@20

  v2 = this;
  spNode.m_pObject = 0;
  v82 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v82 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "ServerMenuWin", 0) )
  {
    v4 = spNode.m_pObject;
    v82 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v75 = v10;
    v74 = &uiTop;
    v73 = &uiLeft;
    v72 = "Theme";
  }
  else
  {
    v75 = 0;
    v74 = &uiTop;
    v73 = &uiLeft;
    v72 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v72, v73, v74, v75);
  v12 = PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
  v13 = Font::Get(0);
  pkFont = v13;
  i = 0;
  pkFrameWorka = (int)v2->m_apkTextWin;
  while ( 1 )
  {
    v14 = v13->m_uiDefHeight;
    v15 = v13;
    v16 = v13->m_uiDefHeight;
    v17 = ((int (__thiscall *)(ServerMenuWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
    v18 = PgWinText::CreateWin(8, i * (v14 + 1) + 8, v17 - 16, v16, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v19 = *(_DWORD *)pkFrameWorka;
    v77 = v18;
    if ( *(PgWinText **)pkFrameWorka != v18 )
    {
      if ( v19 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v19)(v19, 1);
        v18 = v77;
      }
      *(_DWORD *)pkFrameWorka = v18;
      if ( v18 )
        InterlockedIncrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)pkFrameWorka + 240))(0);
    pkFrameWorka += 4;
    ++i;
    if ( i >= 5 )
      break;
    v13 = pkFont;
  }
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor01", &uiLeft, &uiTop, v3);
  PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "BtnClick01");
  PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "BtnOver01");
  v21 = PgWinBut::CreateWin(uiLeft, uiTop, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v22 = (PgWin *)v21;
  v2->m_apkButWin[0] = v21;
  v23 = v21;
  v24 = Font::Get(0);
  v25 = ((int (__thiscall *)(PgWinBut *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v23);
  v26 = ((int (__thiscall *)(PgWinBut *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v23);
  v27 = PgWinText::CreateWin(0, 0, v26, v25, v24, v22, 0, 0);
  v2->m_apkButTextWin[0] = v27;
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    5u);
  v28 = v2->m_apkButTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData::Get(0x4F5F499Fu);
  v28[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[0], (unsigned int)v29);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, v3);
  PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "BtnOver02");
  v31 = PgWinBut::CreateWin(uiLeft, uiTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v32 = (PgWin *)v31;
  v2->m_apkButWin[1] = v31;
  v33 = v31;
  v34 = Font::Get(0);
  v35 = ((int (__thiscall *)(PgWinBut *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v33);
  v36 = ((int (__thiscall *)(PgWinBut *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v33);
  v37 = PgWinText::CreateWin(0, 0, v36, v35, v34, v32, 0, 0);
  v2->m_apkButTextWin[1] = v37;
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v37,
    5u);
  v38 = v2->m_apkButTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v39 = TextData::Get(0x4F5F499Fu);
  v38[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[1], (unsigned int)v39);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, &uiTop, v3);
  PgSprData::Add(v40, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v40, &spNode.m_pObject->baseclass_0, "BtnOver03");
  v41 = PgWinBut::CreateWin(uiLeft, uiTop, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v42 = (PgWin *)v41;
  v2->m_apkButWin[2] = v41;
  v43 = v41;
  v44 = Font::Get(0);
  v45 = ((int (__thiscall *)(PgWinBut *))v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v43);
  v46 = ((int (__thiscall *)(PgWinBut *))v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v43);
  v47 = PgWinText::CreateWin(0, 0, v46, v45, v44, v42, 0, 0);
  v2->m_apkButTextWin[2] = v47;
  v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v47,
    5u);
  v48 = v2->m_apkButTextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v49 = TextData::Get(0x88A297E1u);
  v48[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[2], (unsigned int)v49);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor04", &uiLeft, &uiTop, v3);
  PgSprData::Add(v50, &spNode.m_pObject->baseclass_0, "BtnClick04");
  PgSprData::Add(v50, &spNode.m_pObject->baseclass_0, "BtnOver04");
  v51 = PgWinBut::CreateWin(uiLeft, uiTop, v50, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
  v52 = (PgWin *)v51;
  v2->m_apkButWin[3] = v51;
  v53 = v51;
  v54 = Font::Get(0);
  v55 = ((int (__thiscall *)(PgWinBut *))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v53);
  v56 = ((int (__thiscall *)(PgWinBut *))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v53);
  v57 = PgWinText::CreateWin(0, 0, v56, v55, v54, v52, 0, 0);
  v2->m_apkButTextWin[3] = v57;
  v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v57,
    5u);
  v58 = v2->m_apkButTextWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v59 = TextData::Get(0x88A297E1u);
  v58[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[3], (unsigned int)v59);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v60 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor05", &uiLeft, &uiTop, v3);
  PgSprData::Add(v60, &spNode.m_pObject->baseclass_0, "BtnClick05");
  PgSprData::Add(v60, &spNode.m_pObject->baseclass_0, "BtnOver05");
  v61 = PgWinBut::CreateWin(uiLeft, uiTop, v60, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
  v62 = (PgWin *)v61;
  v2->m_apkButWin[4] = v61;
  v63 = v61;
  v64 = Font::Get(0);
  v65 = ((int (__thiscall *)(PgWinBut *))v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v63);
  v66 = ((int (__thiscall *)(PgWinBut *))v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v63);
  v67 = PgWinText::CreateWin(0, 0, v66, v65, v64, v62, 0, 0);
  v2->m_apkButTextWin[4] = v67;
  v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v67,
    5u);
  v68 = v2->m_apkButTextWin[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v69 = TextData::Get(0x88A297E1u);
  v68[118].__vecDelDtor((NiRefObject *)v2->m_apkButTextWin[4], (unsigned int)v69);
  ((void (__stdcall *)(_DWORD))v2->m_apkButTextWin[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(ServerMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  v70 = spNode.m_pObject;
  v2->m_hMenuHandle = -1;
  v82 = -1;
  if ( v70 )
  {
    v71 = v70;
    if ( !InterlockedDecrement((volatile LONG *)&v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v71 )
        v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v71, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005876D0) --------------------------------------------------------
bool __thiscall ServerMenuWin::SetServerMenu(ServerMenuWin *this, PROTO_NC_MENU_SERVERMENU_REQ *pkProto)
{
  PROTO_NC_MENU_SERVERMENU_REQ *v2; // edi@1
  ServerMenuWin *v3; // esi@1
  bool result; // al@2
  char *v5; // ebx@5
  char v6; // al@7
  PgWinText *v7; // ecx@8
  PgWinText *v8; // ecx@8
  PgWinText *v9; // ecx@10
  float v10; // ST10_4@12
  float v11; // ST14_4@12
  signed int pkProtoa; // [sp+1Ch] [bp+8h]@5

  v2 = pkProto;
  v3 = this;
  if ( pkProto )
  {
    if ( pkProto->menunum > 3u )
      pkProto->menunum = 3;
    v5 = (char *)this->m_apkButWin;
    pkProtoa = 5;
    do
    {
      *(_WORD *)(*(_DWORD *)v5 + 28) |= 1u;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 240))(0);
      v5 += 4;
      --pkProtoa;
    }
    while ( pkProtoa );
    v6 = v2->menunum;
    if ( v6 == 3 )
    {
      v3->m_apkButWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      ((void (__stdcall *)(_DWORD))v3->m_apkButWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      v3->m_apkButWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      ((void (__stdcall *)(_DWORD))v3->m_apkButWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      v3->m_apkButWin[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      ((void (__stdcall *)(_DWORD))v3->m_apkButWin[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v3->m_apkButTextWin[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&v2[1].title[1]);
      v7 = v3->m_apkButTextWin[0];
      v3->m_aucReply[4] = v2[1].title[0];
      ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&v2[1].title[34]);
      v8 = v3->m_apkButTextWin[3];
      v3->m_aucReply[0] = v2[1].title[33];
      ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&v2[1].title[67]);
      v3->m_aucReply[3] = v2[1].title[66];
    }
    else
    {
      if ( v6 == 2 )
      {
        v3->m_apkButWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
        ((void (__stdcall *)(_DWORD))v3->m_apkButWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        v3->m_apkButWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
        ((void (__stdcall *)(_DWORD))v3->m_apkButWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v3->m_apkButTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&v2[1].title[1]);
        v9 = v3->m_apkButTextWin[2];
        v3->m_aucReply[1] = v2[1].title[0];
        ((void (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&v2[1].title[34]);
        v3->m_aucReply[2] = v2[1].title[33];
      }
      else
      {
        v3->m_apkButWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
        ((void (__stdcall *)(_DWORD))v3->m_apkButWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v3->m_apkButTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&v2[1].title[1]);
        v3->m_aucReply[0] = v2[1].title[0];
      }
    }
    v3->m_hMenuHandle = v2->npcHandle;
    v11 = (double)v2->npcPosition.y;
    v10 = (double)v2->npcPosition.x;
    v3->m_kMenuPos.x = v10;
    v3->m_kMenuPos.y = v11;
    v3->m_kMenuPos.z = 0.0;
    v3->m_limitRange = v2->limitRange;
    ServerMenuWin::SetMsg(v3, v2->title);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00587960) --------------------------------------------------------
void __thiscall ServerMenuWin::OnCommand(ServerMenuWin *this, unsigned int wParam, int lParam)
{
  ServerMenuWin *v3; // esi@1
  char v4; // cl@3
  const char v5; // [sp-4h] [bp-8h]@2

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      v5 = this->m_aucReply[0];
      goto LABEL_8;
    case 1u:
      v4 = this->m_aucReply[1];
      goto LABEL_7;
    case 2u:
      v5 = this->m_aucReply[2];
      goto LABEL_8;
    case 3u:
      v5 = this->m_aucReply[3];
      goto LABEL_8;
    case 4u:
      v4 = this->m_aucReply[4];
LABEL_7:
      v5 = v4;
LABEL_8:
      GameFrameWork::NcMenuServerMenuAck((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v5);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
      break;
    default:
      return;
  }
}

//----- (005879E0) --------------------------------------------------------
void __thiscall ServerMenuWin::UpdateMeWin(ServerMenuWin *this, float fCurTime)
{
  ServerMenuWin *v2; // esi@1
  double v3; // st7@3
  double v4; // st7@3
  double v5; // st7@3
  double v6; // st5@3
  const char v7; // dl@4
  Char *v8; // eax@5
  MapNavigator *v9; // edi@7
  NiPoint3 UserPos; // [sp+4h] [bp-1Ch]@3
  float v11; // [sp+10h] [bp-10h]@3
  double v12; // [sp+14h] [bp-Ch]@3
  NiPointer<MapNavigator> result; // [sp+1Ch] [bp-4h]@3

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    && v2->m_hMenuHandle != -1 )
  {
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&UserPos);
    v11 = UserPos.x - v2->m_kMenuPos.x;
    UserPos.x = v11;
    v3 = UserPos.y - v2->m_kMenuPos.y;
    result.m_pObject = (MapNavigator *)v2->m_limitRange;
    *(float *)&v12 = v3;
    v4 = v2->m_kMenuPos.z;
    LODWORD(UserPos.y) = LODWORD(v12);
    *((float *)&v12 + 1) = 0.0 - v4;
    v5 = (float)v12;
    LODWORD(UserPos.z) = HIDWORD(v12);
    v6 = *((float *)&v12 + 1);
    v12 = (double)(signed int)result.m_pObject;
    *(float *)&result.m_pObject = v5 * v5 + v11 * v11 + v6 * v6;
    *(float *)&result.m_pObject = sqrt(*(float *)&result.m_pObject);
    if ( *(float *)&result.m_pObject > v12 )
    {
      v7 = v2->m_aucReply[2];
      v2->m_hMenuHandle = -1;
      GameFrameWork::NcMenuServerMenuAck((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v7);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
    }
    v8 = CharMgr::GetChar(&g_kCharMgr, v2->m_hMenuHandle);
    if ( v8 )
    {
      if ( Char::IsLinkGate(v8) )
      {
        v9 = MapNavigator::GetMapNavigator(&result)->m_pObject;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
        if ( v9 )
        {
          if ( v9->m_eDotState == 2 )
          {
            v2->m_hMenuHandle = -1;
            ServerMenuWin::CancelServerMenuWin(v2);
          }
        }
      }
    }
  }
}

//----- (00587B30) --------------------------------------------------------
void __thiscall ServerMenuWin::ServerMenuWin(ServerMenuWin *this)
{
  ServerMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ServerMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ServerMenuWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_byPriority = 0;
}
// 9AA880: using guessed type int (__stdcall *ServerMenuWin___vftable_)(int uiFlags);
// 9AA89C: using guessed type int (__thiscall *ServerMenuWin___vftable_)(void *p, char);

//----- (00587BB0) --------------------------------------------------------
ServerMenuWin *__cdecl ServerMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ServerMenuWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C4u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &ServerMenuWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ServerMenuWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 412,
      4u,
      5,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    *((_BYTE *)v2 + 432) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ServerMenuWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9AA880: using guessed type int (__stdcall *ServerMenuWin___vftable_)(int uiFlags);
// 9AA89C: using guessed type int (__thiscall *ServerMenuWin___vftable_)(void *p, char);

//----- (00587D10) --------------------------------------------------------
void *__thiscall ServerMenuWin::_scalar_deleting_destructor_(ServerMenuWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ServerMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ServerMenuWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AA880: using guessed type int (__stdcall *ServerMenuWin___vftable_)(int uiFlags);
// 9AA89C: using guessed type int (__thiscall *ServerMenuWin___vftable_)(void *p, char);

//----- (00587DA0) --------------------------------------------------------
void __thiscall ServerTimeWin::ServerTimeWin(ServerTimeWin *this)
{
  ServerTimeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_bEnableServerTime = 0;
  v1->m_pkServerTimeText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ServerTimeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ServerTimeWin::_vftable_;
}
// 9AAB58: using guessed type int (__stdcall *ServerTimeWin___vftable_)(int uiFlags);
// 9AAB74: using guessed type int (__thiscall *ServerTimeWin___vftable_)(void *p, char);

//----- (00587DD0) --------------------------------------------------------
void __thiscall ServerTimeWin::_ServerTimeWin(ServerTimeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ServerTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ServerTimeWin::_vftable_;
  this->m_bEnableServerTime = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9AAB58: using guessed type int (__stdcall *ServerTimeWin___vftable_)(int uiFlags);
// 9AAB74: using guessed type int (__thiscall *ServerTimeWin___vftable_)(void *p, char);

//----- (00587DF0) --------------------------------------------------------
void __thiscall ServerTimeWin::EnableServerTime(ServerTimeWin *this, bool b)
{
  this->m_bEnableServerTime = b;
}

//----- (00587E00) --------------------------------------------------------
void __thiscall ServerTimeWin::UpdateMeWin(ServerTimeWin *this, float fCurTime)
{
  ServerTimeWin *v2; // ebx@1
  unsigned int v3; // eax@4
  const void *v4; // edx@4
  void *v5; // edi@4
  char v6; // cl@5
  char v7; // cl@8
  __int64 Frequency; // [sp+4h] [bp-224h]@3
  __int64 PerformanceCount; // [sp+Ch] [bp-21Ch]@3
  __int64 v10; // [sp+14h] [bp-214h]@3
  tm timeptr; // [sp+1Ch] [bp-20Ch]@10
  tm kCorrectionTime; // [sp+40h] [bp-1E8h]@3
  char acTooltip[128]; // [sp+64h] [bp-1C4h]@4
  char acTime[256]; // [sp+E4h] [bp-144h]@3
  char acGMT[64]; // [sp+1E4h] [bp-44h]@4
  unsigned int v16; // [sp+224h] [bp-4h]@1
  int v17; // [sp+228h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  if ( this->m_bEnableServerTime && this->m_pkServerTimeText )
  {
    QueryPerformanceCounter((LARGE_INTEGER *)&PerformanceCount);
    QueryPerformanceFrequency((LARGE_INTEGER *)&Frequency);
    v10 = PerformanceCount - *(_QWORD *)&Timer::ms_StartQPC;
    memcpy(&kCorrectionTime, &Timer::ms_dLastServerTime, sizeof(kCorrectionTime));
    kCorrectionTime.tm_sec += (signed int)((double)(PerformanceCount - *(_QWORD *)&Timer::ms_StartQPC)
                                         / (double)Frequency);
    strftime(acTime, 0x100u, "%H:%M", &kCorrectionTime);
    if ( Timer::ms_cTimeZone >= 0 )
    {
      sprintf(acGMT, " {color,yellow,GMT(+%d)}");
      v4 = acGMT;
      v3 = strlen(acGMT) + 1;
      v5 = &acTooltip[127];
      do
      {
        v7 = *((_BYTE *)v5 + 1);
        v5 = (char *)v5 + 1;
      }
      while ( v7 );
    }
    else
    {
      sprintf(acGMT, " {color,yellow,GMT(-%d)}");
      v4 = acGMT;
      v3 = strlen(acGMT) + 1;
      v5 = &acTooltip[127];
      do
      {
        v6 = *((_BYTE *)v5 + 1);
        v5 = (char *)v5 + 1;
      }
      while ( v6 );
    }
    memcpy(v5, v4, v3);
    ((void (__stdcall *)(_DWORD))v2->m_pkServerTimeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acTime);
    if ( (unsigned __int8)((int (__thiscall *)(ServerTimeWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(v2) )
    {
      memcpy(&timeptr, &Timer::ms_dLastServerTime, sizeof(timeptr));
      strftime(acTooltip, 0x80u, "%Y-%m-%d (%a)", &timeptr);
      PgWin::SetToolTipWinText(&v2->baseclass_0.baseclass_0.baseclass_0, acTooltip);
    }
  }
}
// 587E00: could not find valid save-restore pair for edi
// 587E00: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;
// A9764C: using guessed type char Timer__ms_cTimeZone;

//----- (00587FD0) --------------------------------------------------------
void __thiscall ServerTimeWin::OnCommand(ServerTimeWin *this, unsigned int wParam, int lParam)
{
  ServerTimeWin *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // eax@2

  v3 = this;
  if ( !wParam )
  {
    v4 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor;
    if ( this->m_pkCheckBox->m_bCheck )
    {
      ((void (__stdcall *)(_DWORD))v4)(1);
      v3->m_pkCheckBox->m_bCheck = 0;
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v4)(0);
      v3->m_pkCheckBox->m_bCheck = 1;
    }
  }
}

//----- (00588020) --------------------------------------------------------
bool __thiscall ServerTimeWin::Create(ServerTimeWin *this, PgFrameWork *pkFrameWork)
{
  ServerTimeWin *v2; // esi@1
  NiNode *v3; // esi@2
  NiTexturePalette *v5; // edi@7
  char *v6; // eax@9
  PgSprData *v7; // edi@10
  NiPointer<PgSprData::PgHitTester> *v8; // edx@11
  unsigned int v9; // edi@11
  unsigned int v10; // ebx@11
  PgFont *v11; // eax@11
  PgWinText *v12; // eax@11
  PgSprData *v13; // edi@11
  NiNode *v14; // esi@12
  NiSourceTexture *pkTexture; // [sp+24h] [bp-1Ch]@1
  int uiLeft; // [sp+28h] [bp-18h]@10
  int uiTop; // [sp+2Ch] [bp-14h]@10
  NiPointer<NiNode> spNode; // [sp+30h] [bp-10h]@1
  int v19; // [sp+3Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v19 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
    goto LABEL_18;
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\Timeserver.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "ServerTimeWin", 0) )
  {
LABEL_18:
    v3 = spNode.m_pObject;
    v19 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    return 0;
  }
  v2->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v8 = v7->m_akHitTester.m_pBase;
  v9 = v8->m_pObject->m_uiHeight;
  v10 = v8->m_pObject->m_uiWidth;
  v11 = Font::Get(BOLD);
  v12 = PgWinText::CreateWin(uiLeft - 10, uiTop + 2, v10, v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkServerTimeText = v12;
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v12,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkServerTimeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AAAE6);
  ((void (__stdcall *)(_DWORD))v2->m_pkServerTimeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v2->m_pkServerTimeText->m_spTextGeom.m_pObject->baseclass_0.m_bTextCmdOn = 1;
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TimeLockNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "TimeLockLock");
  v2->m_pkCheckBox = ColumnBut::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(ServerTimeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.64999998);
  v19 = -1;
  if ( spNode.m_pObject )
  {
    v14 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v14 )
        v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00588260) --------------------------------------------------------
ServerTimeWin *__cdecl ServerTimeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ServerTimeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ServerTimeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ServerTimeWin::_vftable_;
    *((_BYTE *)v2 + 356) = 0;
    *((_DWORD *)v2 + 87) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ServerTimeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9AAB58: using guessed type int (__stdcall *ServerTimeWin___vftable_)(int uiFlags);
// 9AAB74: using guessed type int (__thiscall *ServerTimeWin___vftable_)(void *p, char);

//----- (005883B0) --------------------------------------------------------
void *__thiscall ServerTimeWin::_vector_deleting_destructor_(ServerTimeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ServerTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ServerTimeWin::_vftable_;
  this->m_bEnableServerTime = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AAB58: using guessed type int (__stdcall *ServerTimeWin___vftable_)(int uiFlags);
// 9AAB74: using guessed type int (__thiscall *ServerTimeWin___vftable_)(void *p, char);

//----- (00588400) --------------------------------------------------------
void __thiscall ShopWin::ReGenPos(ShopWin *this)
{
  ShopWin *v1; // esi@1
  int v2; // eax@1
  unsigned int v3; // ecx@1

  v1 = this;
  v1->m_uiWebXPos = v1->m_uiPlaneWebXPos
                  + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1);
  v3 = v1->m_uiPlaneWebHeight;
  v1->m_uiWebYPos = v1->m_uiPlaneWebYPos + v2;
  v1->m_uiWebWidth = v1->m_uiPlaneWebWidth;
  v1->m_uiWebHeight = v3;
}

//----- (00588450) --------------------------------------------------------
int __stdcall _std_view_proc(HWND__ *hDlg, unsigned int message, unsigned int wParam, int lParam)
{
  return DefWindowProcA(hDlg, message, wParam, lParam);
}

//----- (00588460) --------------------------------------------------------
void __thiscall ShopWin::OnPopShopWin(ShopWin *this)
{
  ShopWin *v1; // esi@1
  int v2; // eax@1
  char v3; // cl@2
  int v4; // eax@3
  char v5; // cl@4
  int v6; // [sp+0h] [bp-61Ch]@0
  IBindCtx *pbc; // [sp+4h] [bp-618h]@1
  tagBIND_OPTS bop; // [sp+8h] [bp-614h]@1
  char acWebString[1024]; // [sp+18h] [bp-604h]@2
  __int16 wszString[256]; // [sp+418h] [bp-204h]@5
  unsigned int v11; // [sp+618h] [bp-4h]@1
  int v12; // [sp+61Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  CreateBindCtx(0, &pbc);
  bop.cbStruct = 16;
  bop.grfFlags = 1;
  bop.grfMode = 134217728;
  bop.dwTickCountDeadline = 0;
  ((void (__stdcall *)(IBindCtx *))pbc->baseclass_0.lpVtbl[2].QueryInterface)(pbc);
  v2 = (int)v1->m_acWebUrl[1];
  do
  {
    v3 = *(_BYTE *)v2;
    *(_BYTE *)(acWebString - (char *)v1->m_acWebUrl[1] + v2) = *(_BYTE *)v2;
    ++v2;
  }
  while ( v3 );
  v4 = (int)acWebString;
  do
    v5 = *(_BYTE *)v4++;
  while ( v5 );
  MultiByteToWideChar(0, 0, acWebString, v4 - (_DWORD)&acWebString[1] + 1, (LPWSTR)wszString, 256);
  HlinkSimpleNavigateToString((LPCWSTR)wszString, 0, 0, 0, pbc, 0, 2u, 0);
  ((void (__stdcall *)(IBindCtx *, int))pbc->baseclass_0.lpVtbl->Release)(pbc, v6);
  SetFocus(g_hMainWnd);
}
// A85C00: using guessed type int __security_cookie;

//----- (00588560) --------------------------------------------------------
void __thiscall ShopWin::UpdateWebPos(ShopWin *this)
{
  ShopWin *v1; // esi@1
  tagRECT rect; // [sp+4h] [bp-14h]@3
  unsigned int v3; // [sp+14h] [bp-4h]@1
  int v4; // [sp+18h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  if ( IsWindow(this->m_hWebWindow) )
  {
    if ( v1->m_bOpen )
    {
      ShopWin::ReGenPos(v1);
      GetWindowRect(g_hMainWnd, &rect);
      MoveWindow(
        v1->m_hWebWindow,
        rect.left + v1->m_uiWebXPos,
        rect.top + v1->m_uiWebYPos,
        v1->m_uiWebWidth,
        v1->m_uiWebHeight,
        1);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005885F0) --------------------------------------------------------
void __thiscall ShopWin::ClearWebKeyParameter(ShopWin *this)
{
  *(_DWORD *)&this->m_acWebKeyParameter[0] = 0;
  *(_DWORD *)&this->m_acWebKeyParameter[4] = 0;
  *(_DWORD *)&this->m_acWebKeyParameter[8] = 0;
  *(_DWORD *)&this->m_acWebKeyParameter[12] = 0;
  *(_DWORD *)&this->m_acWebKeyParameter[16] = 0;
  *(_DWORD *)&this->m_acWebKeyParameter[20] = 0;
  *(_DWORD *)&this->m_acWebKeyParameter[24] = 0;
  *(_DWORD *)&this->m_acWebKeyParameter[28] = 0;
  this->m_acWebKeyParameter[32] = 0;
}

//----- (00588630) --------------------------------------------------------
void __thiscall ShopWin::SetWebKeyParameter(ShopWin *this, char *pbParam, char byLoginType)
{
  memcpy(this->m_acWebKeyParameter, pbParam, 0x20u);
  this->m_acWebKeyParameter[32] = 0;
}

//----- (00588660) --------------------------------------------------------
void __thiscall ShopWin::OnHelpLink(ShopWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ItemMall");
}

//----- (00588690) --------------------------------------------------------
void __thiscall ShopWin::OnWinClose(ShopWin *this)
{
  ShopWin *v1; // esi@1
  HWND__ *v2; // ST0C_4@1

  v1 = this;
  v2 = this->m_hWebWindow;
  this->m_bOpen = 0;
  if ( !DestroyWindow(v2) )
    MessageBoxA(0, "Error", "ÇÚµéÆÄ±« ½ÇÆÐ", 0);
  DestroyWindow(v1->m_hPopWebWindow);
  v1->m_hWebWindow = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[0] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[4] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[8] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[12] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[16] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[20] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[24] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[28] = 0;
  v1->m_acWebKeyParameter[32] = 0;
  GameFrameWork::CloseShopWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (00588720) --------------------------------------------------------
void __thiscall ShopWin::UpdateMeWin(ShopWin *this, float fCurTime)
{
  ShopWin::UpdateWebPos(this);
}

//----- (00588730) --------------------------------------------------------
bool __thiscall ShopWin::LoadWebUrl(ShopWin *this)
{
  int v1; // ebx@1
  ShopWin *v2; // edi@1
  void *v3; // eax@3
  ItemMallInfo *v4; // eax@4
  ItemMallInfo *v5; // esi@4
  bool result; // al@7
  int v7; // eax@10
  int v8; // edi@11
  int v9; // eax@12
  int v10; // esi@13
  tagItemMallFileData *v11; // eax@15
  int v12; // eax@15
  int v13; // edx@15
  char v14; // cl@16
  ShopWin *v15; // [sp+0h] [bp-128h]@1
  int MaxURLNum; // [sp+4h] [bp-124h]@12
  int v17; // [sp+8h] [bp-120h]@14
  int v18; // [sp+Ch] [bp-11Ch]@11
  ItemMallInfo *thisa; // [sp+10h] [bp-118h]@4
  char acPathName[260]; // [sp+14h] [bp-114h]@1
  unsigned int v21; // [sp+118h] [bp-10h]@1
  int v22; // [sp+124h] [bp-4h]@3
  int v23; // [sp+128h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v1 = 0;
  v2 = this;
  v15 = this;
  memset(acPathName, 0, 0x104u);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sItemMall.hb");
  v3 = operator new(0x2224u);
  v22 = 0;
  if ( v3 )
  {
    ItemMallInfo::ItemMallInfo((ItemMallInfo *)v3);
    v5 = v4;
    thisa = v4;
  }
  else
  {
    thisa = 0;
    v5 = 0;
  }
  v22 = -1;
  if ( v5 )
  {
    ItemMallInfo::LoadFromFile(v5, acPathName);
    if ( ItemMallInfo::GetTotalURLNum(v5, g_iChinaLocaleNo) == -1 )
    {
      OutputDebugStringA("localeItemshop doesn't exist.");
    }
    else
    {
      v7 = ItemMallInfo::GetTotalLocaleNum(v5);
      v2->m_iTotalChinaLocaleNum = v7;
      if ( v7 > 0 )
      {
        v18 = (int)v2->m_acWebUrl;
        v8 = (int)v2->m_acWebUrlNum;
        do
        {
          v9 = ItemMallInfo::GetTotalURLNum(v5, v1);
          MaxURLNum = v9;
          if ( v9 != -1 )
          {
            v10 = 0;
            if ( v9 >= 0 )
            {
              v17 = v18;
              do
              {
                v11 = ItemMallInfo::GetData(thisa, v1, v10);
                *(_DWORD *)(v8 - 200) = v11->LocaleNo;
                *(_DWORD *)v8 = v11->WebURLNo;
                v12 = (int)v11->Path;
                v13 = v17 - v12;
                do
                {
                  v14 = *(_BYTE *)v12;
                  *(_BYTE *)(v13 + v12) = *(_BYTE *)v12;
                  ++v12;
                }
                while ( v14 );
                v17 += 512;
                ++v10;
              }
              while ( v10 <= MaxURLNum );
            }
            v5 = thisa;
          }
          v18 += 5120;
          ++v1;
          v8 += 4;
        }
        while ( v1 < v15->m_iTotalChinaLocaleNum );
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00588900) --------------------------------------------------------
bool __thiscall ShopWin::Create(ShopWin *this, PgFrameWork *pkFrameWork)
{
  ShopWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  PgSprData *v9; // eax@9
  NiNode *v10; // esi@12
  bool result; // al@16
  int v12; // ebx@17
  NiNode *v13; // esi@20
  PgFont *v14; // eax@24
  PgWinText *v15; // edi@24
  NiRefObjectVtbl *v16; // ST3C_4@24
  char *v17; // eax@24
  NiSourceTexture *v18; // edi@26
  PgSprData *v19; // eax@26
  PgWinSpr *v20; // eax@26
  PgSprData *v21; // edi@26
  NiSourceTexture *v22; // edi@26
  PgSprData *v23; // edi@27
  unsigned int uiWidth; // [sp+38h] [bp-28h]@17
  unsigned int uiHeight; // [sp+3Ch] [bp-24h]@17
  NiPointer<NiTexturingProperty> spTexProp; // [sp+40h] [bp-20h]@4
  NiSourceTexture *pkTexture; // [sp+44h] [bp-1Ch]@7
  int uiLeft; // [sp+48h] [bp-18h]@9
  int uiTop; // [sp+4Ch] [bp-14h]@9
  NiPointer<NiNode> spNode; // [sp+50h] [bp-10h]@1
  int v31; // [sp+5Ch] [bp-4h]@1
  int iOffY; // [sp+68h] [bp+8h]@17

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v31 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ItemMall.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v31) = 1;
  if ( v8 )
    pkTexture = (NiSourceTexture *)v8[1].__vecDelDtor;
  else
    pkTexture = 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, pkTexture);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "ShopWin", 0) )
  {
    LOBYTE(v31) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v31 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = uiLeft;
  iOffY = uiTop;
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v14 = Font::Get(0);
    v15 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v14,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v15,
      1u);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v15,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = TextData::Get(0xF40ADF3Au);
    v16[118].__vecDelDtor((NiRefObject *)v15, (unsigned int)v17);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v15,
      0);
    if ( !PgUtil::GetTriShapeRect(
            &spNode.m_pObject->baseclass_0,
            "Panel01",
            &v2->m_uiPlaneWebXPos,
            &v2->m_uiPlaneWebYPos,
            &v2->m_uiPlaneWebWidth,
            &v2->m_uiPlaneWebHeight) )
      goto LABEL_32;
    v18 = pkTexture;
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v20 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - iOffY, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v20,
      1u);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v18);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft - v12, uiTop - iOffY, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v22 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v22);
      PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v12, uiTop - iOffY, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0x401u, 0, 0);
    }
    if ( ShopWin::LoadWebUrl(v2) )
    {
      ((void (__thiscall *)(ShopWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      ShopWin::ReGenPos(v2);
      LOBYTE(v31) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v31 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
LABEL_32:
      LOBYTE(v31) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v31 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v31) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v31 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00588D40) --------------------------------------------------------
void __thiscall ShopWin::OnCommand(ShopWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4
  MainApp *v4; // eax@6

  switch ( wParam )
  {
    case 1u:
      ShopWin::OnWinClose(this);
      break;
    case 2u:
      ShopWin::OnPopShopWin(this);
      v4 = MainApp::GetMainAppInstance();
      if ( v4 )
        MainApp::SetWinMinimized(v4);
      break;
    case 0x401u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "ItemMall");
      break;
  }
}

//----- (00588DA0) --------------------------------------------------------
void __thiscall ShopWin::ShopWin(ShopWin *this)
{
  ShopWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShopWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShopWin::_vftable_;
  v1->m_ItemShopUrl.baseclass_0._Mysize = 0;
  v1->m_ItemShopUrl.baseclass_0._Myres = 15;
  v1->m_ItemShopUrl.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_WORD *)&v1->m_bOpen = 0;
  v1->uicheck = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[0] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[4] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[8] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[12] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[16] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[20] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[24] = 0;
  *(_DWORD *)&v1->m_acWebKeyParameter[28] = 0;
  v1->m_acWebKeyParameter[32] = 0;
}
// 9AAE9C: using guessed type int (__stdcall *ShopWin___vftable_)(int uiFlags);
// 9AAEBC: using guessed type int (__thiscall *ShopWin___vftable_)(void *p, char);

//----- (00588E20) --------------------------------------------------------
void __thiscall ShopWin::_ShopWin(ShopWin *this)
{
  ShopWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShopWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShopWin::_vftable_;
  if ( this->m_ItemShopUrl.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_ItemShopUrl.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_ItemShopUrl.baseclass_0._Myres = 15;
  v1->m_ItemShopUrl.baseclass_0._Mysize = 0;
  v1->m_ItemShopUrl.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9AAE9C: using guessed type int (__stdcall *ShopWin___vftable_)(int uiFlags);
// 9AAEBC: using guessed type int (__thiscall *ShopWin___vftable_)(void *p, char);

//----- (00588E70) --------------------------------------------------------
void __thiscall ShopWin::OnShowWin(ShopWin *this)
{
  ShopWin *v1; // esi@1
  int v2; // eax@1
  int v3; // ecx@1
  int v4; // edi@1
  int v5; // ebx@1
  bool v6; // zf@1
  const char *v7; // eax@2
  HWND__ *v8; // edi@4
  int v9; // ebx@4
  PgFrameWork *v10; // eax@7
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@11
  int v12; // edx@11
  int nWidth; // [sp+Ch] [bp-2Ch]@1
  NiRect<int> kRect; // [sp+10h] [bp-28h]@11
  unsigned int uiPosY; // [sp+20h] [bp-18h]@1
  tagRECT WindowRect; // [sp+24h] [bp-14h]@1
  unsigned int v17; // [sp+34h] [bp-4h]@1
  int v18; // [sp+38h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v1 = this;
  v2 = this->m_uiWebWidth;
  v3 = this->m_uiWebHeight;
  v4 = v1->m_uiWebXPos;
  v5 = v1->m_uiWebYPos;
  nWidth = v2;
  WindowRect.right = v2;
  uiPosY = v3;
  WindowRect.left = v4;
  WindowRect.top = v5;
  WindowRect.bottom = v3;
  AdjustWindowRectEx(&WindowRect, 0x40000000u, 0, 0);
  v6 = v1->m_ItemShopUrl.baseclass_0._Mysize == 0;
  v1->m_hWebWindow = 0;
  if ( v6 )
  {
    v10 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v9 = 0;
    if ( v10 )
    {
      GameFrameWork::NcMiscItemShopUrlReq((GameFrameWork *)v10);
      return;
    }
  }
  else
  {
    v7 = (const char *)&v1->m_ItemShopUrl;
    if ( v1->m_ItemShopUrl.baseclass_0._Myres >= 0x10 )
      v7 = *(const char **)v7;
    v8 = CreateWindowExA(0, "WebCtrl32", v7, 0x90000000u, v4, v5, nWidth, uiPosY, g_hMainWnd, 0, g_hMainInstance, 0);
    ShowWindow(v8, 5);
    v1->m_hWebWindow = v8;
    v9 = 0;
  }
  if ( IsWindow(v1->m_hWebWindow) )
  {
    ShowWindow(v1->m_hWebWindow, 5);
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox != (int (__cdecl *)(_DWORD, _DWORD, _DWORD))v9 )
      NiMessageBox::ms_pfnMessageBox("CreateWindow Fail", byte_9AADA6, v9);
  }
  v11 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
  v1->m_bOpen = 1;
  kRect.m_left = v9;
  kRect.m_right = v9;
  kRect.m_top = v9;
  kRect.m_bottom = v9;
  v11(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    (unsigned int)&kRect);
  v12 = kRect.m_bottom - kRect.m_top;
  uiPosY = v9;
  if ( PgWin::ms_uiScreenWidth >= kRect.m_right - kRect.m_left )
  {
    if ( PgWin::ms_uiScreenHeight >= v12 )
    {
      v9 = (PgWin::ms_uiScreenWidth - (kRect.m_right - kRect.m_left)) >> 1;
      uiPosY = (PgWin::ms_uiScreenHeight - v12) >> 1;
    }
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
    (NiRefObject *)v1,
    v9);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v1,
    uiPosY);
  SetFocus(g_hMainWnd);
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);

//----- (00589020) --------------------------------------------------------
ShopWin *__cdecl ShopWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ShopWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x3EB60u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ShopWin::ShopWin((ShopWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ShopWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00589150) --------------------------------------------------------
void __thiscall ShopWin::SetItemShopUrl(ShopWin *this, char *pkStr, unsigned __int16 nLen)
{
  bool v3; // cf@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // edi@2
  char *v5; // eax@3
  signed int v6; // esi@5

  if ( pkStr )
  {
    v3 = this->m_ItemShopUrl.baseclass_0._Myres < 0x10;
    v4 = &this->m_ItemShopUrl;
    this->m_ItemShopUrl.baseclass_0._Mysize = 0;
    if ( v3 )
      v5 = (char *)&this->m_ItemShopUrl;
    else
      v5 = *(char **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
    v6 = 0;
    for ( *v5 = 0; v6 < nLen; ++v6 )
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(v4, 1u, pkStr[v6]);
  }
}

//----- (005891B0) --------------------------------------------------------
void *__thiscall ShopWin::_scalar_deleting_destructor_(ShopWin *this, unsigned int a2)
{
  ShopWin *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShopWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShopWin::_vftable_;
  if ( this->m_ItemShopUrl.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_ItemShopUrl.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_ItemShopUrl.baseclass_0._Myres = 15;
  v2->m_ItemShopUrl.baseclass_0._Mysize = 0;
  v2->m_ItemShopUrl.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AAE9C: using guessed type int (__stdcall *ShopWin___vftable_)(int uiFlags);
// 9AAEBC: using guessed type int (__thiscall *ShopWin___vftable_)(void *p, char);

//----- (00589230) --------------------------------------------------------
void __thiscall ShortCutIconWin::Show(ShortCutIconWin *this, bool b)
{
  ShortCutIconWin *v2; // esi@1

  v2 = this;
  SkillIcon::Show(&this->baseclass_0, b);
  if ( v2->m_pkLotText )
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
    if ( !v2->m_bDisplayLotText )
      ((void (__stdcall *)(_DWORD))v2->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00589280) --------------------------------------------------------
void __thiscall ShortCutIconWin::UpdateEffect(ShortCutIconWin *this, float ftime)
{
  SpEffect *v2; // ecx@1

  v2 = this->m_pkToggleEffect;
  if ( v2 )
    SpEffect::Update(v2, ftime);
}

//----- (005892A0) --------------------------------------------------------
bool __thiscall ShortCutIconWin::IsEnalbeToggleEffect(ShortCutIconWin *this)
{
  return this->m_bEnableToggle && this->m_pkToggleEffect;
}

//----- (005892C0) --------------------------------------------------------
void __thiscall ShortCutWin::SetPageTextWin(ShortCutWin *this)
{
  ShortCutWin *v1; // esi@1
  char acStr[32]; // [sp+4h] [bp-24h]@1
  unsigned int v3; // [sp+24h] [bp-4h]@1
  int v4; // [sp+28h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  sprintf(acStr, "%u");
  ((void (__stdcall *)(_DWORD))v1->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (00589310) --------------------------------------------------------
void __thiscall ShortCutWin::OnCmdShortCutRClick(ShortCutWin *this, unsigned int uiIndex)
{
  PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0x5Du, uiIndex + 18 * this->m_uiCurPage, 1u);
}

//----- (00589340) --------------------------------------------------------
void __thiscall ShortCutWin::ResetIconWin(ShortCutWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x8Bu, 0, 0);
}

//----- (00589360) --------------------------------------------------------
void __thiscall ShortCutWin::OnCmdPanelTurn(ShortCutWin *this)
{
  ShortCutWin *v1; // eax@1
  PgFrameWork *v2; // ecx@1

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  if ( v2 )
  {
    if ( v1->m_bVerticalMode )
    {
      if ( v1->m_bMainWinMode )
        PgFrameWork::AddMsg(v2, 0x88u, 0, 0);
      else
        PgFrameWork::AddMsg(v2, 0x8Au, v1->m_iSubTabLevel, 0);
    }
    else
    {
      if ( v1->m_bMainWinMode )
        PgFrameWork::AddMsg(v2, 0x87u, 0, 0);
      else
        PgFrameWork::AddMsg(v2, 0x89u, v1->m_iSubTabLevel, 0);
    }
  }
}

//----- (005893D0) --------------------------------------------------------
void __thiscall ShortCutWin::OnCmdSubPanel(ShortCutWin *this)
{
  ShortCutWin *v1; // eax@1
  PgFrameWork *v2; // ecx@1

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  if ( v2 )
    PgFrameWork::AddMsg(v2, 0x86u, v1->m_iSubTabLevel, 0);
}

//----- (00589400) --------------------------------------------------------
void __thiscall ShortCutWin::SizeBtnPosToStatus(ShortCutWin *this)
{
  ShortCutWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  NiRefObjectVtbl *v3; // edx@1
  int v4; // eax@2
  int v5; // eax@3

  v1 = this;
  v2 = this->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = this->m_apkIconWin[(unsigned __int8)byte_B5BB58[3 * this->m_uiShortCutStatusIndex]]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( this->m_bVerticalMode )
  {
    v4 = ((int (*)(void))v3[42].__vecDelDtor)();
    v2[44].__vecDelDtor((NiRefObject *)v1->m_pkSizeBtn, v4 - 3);
  }
  else
  {
    v5 = ((int (*)(void))v3[41].__vecDelDtor)();
    v2[43].__vecDelDtor((NiRefObject *)v1->m_pkSizeBtn, v5 - 2);
  }
}

//----- (00589470) --------------------------------------------------------
void __thiscall ShortCutWin::DirectMessage(ShortCutWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 27 && pvBody )
  {
    if ( *(_DWORD *)pvBody )
    {
      if ( *(_DWORD *)pvBody == 1 )
      {
        this->m_apkIconWinBack3[6] = 0;
        this->m_apkIconWinBack3[5] = 0;
        BYTE3(this->m_apkIconWinBack3[3]) = 0;
      }
    }
    else
    {
      BYTE3(this->m_apkIconWinBack3[3]) = 1;
    }
  }
}

//----- (005894B0) --------------------------------------------------------
void __thiscall ShortCutWin::IsStartCollTime(ShortCutWin *this, unsigned __int16 kID)
{
  SkillIcon **v2; // esi@1
  signed int v3; // edi@1
  unsigned __int16 v4; // ax@2

  v2 = (SkillIcon **)this->m_apkIconWin;
  v3 = 18;
  do
  {
    v4 = SkillIcon::GetSkill(*v2);
    if ( v4 != -1 && v4 == kID )
    {
      if ( IconWin::IsStartCoolTime(&(*v2)->baseclass_0) )
        IconWin::CooltimeDecrease(&(*v2)->baseclass_0, kID);
    }
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (00589500) --------------------------------------------------------
void __thiscall ShortCutIconWin::ShortCutIconWin(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1

  v1 = this;
  SkillIcon::SkillIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShortCutIconWin::_vftable_;
  v1->m_spShortCut.m_pObject = 0;
  v1->m_bProtected = 0;
  v1->m_pkLotText = 0;
  *(_WORD *)&v1->m_bDisplayLotText = 0;
  v1->m_pkToggleEffect = 0;
  v1->m_bEnableToggle = 0;
  v1->baseclass_0.m_kSkillID = -1;
}
// 9AB5F8: using guessed type int (__stdcall *ShortCutIconWin___vftable_)(int uiFlags);
// 9AB614: using guessed type int (__thiscall *ShortCutIconWin___vftable_)(void *p, char);

//----- (00589550) --------------------------------------------------------
void __thiscall ShortCutIconWin::ProcessMeInput(ShortCutIconWin *this, bool *bHit)
{
  ShortCutIconWin *v2; // esi@1

  v2 = this;
  if ( PgWin::IsVisible(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0) )
  {
    IconWin::ProcessMeInput(&v2->baseclass_0.baseclass_0, bHit);
  }
  else
  {
    *bHit = 0;
    v2->baseclass_0.baseclass_0.m_spClickGeom.m_pObject->m_uFlags |= 1u;
    v2->baseclass_0.baseclass_0.m_spOverGeom.m_pObject->m_uFlags |= 1u;
  }
}

//----- (005895A0) --------------------------------------------------------
ShortCut *__thiscall ShortCutIconWin::GetShortCut(ShortCutIconWin *this)
{
  return this->m_spShortCut.m_pObject;
}

//----- (005895B0) --------------------------------------------------------
void __thiscall ShortCutIconWin::SetSkillIcon(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  ShortCut *v3; // ecx@1
  ShortCut *v4; // eax@4
  unsigned __int16 v5; // di@5

  v1 = this;
  IconWin::SetCoolTimeID(&this->baseclass_0.baseclass_0, 0xFFFFu);
  IconWin::SetCoolTimeIDByItemAction(&v1->baseclass_0.baseclass_0, 0xFFFFu);
  v2 = v1->m_pkLotText;
  v1->m_bDisplayLotText = 0;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = v1->m_spShortCut.m_pObject;
  if ( v3 )
  {
    if ( ((int (*)(void))v3->baseclass_0.vfptr[1].__vecDelDtor)() == 1 )
    {
      v4 = v1->m_spShortCut.m_pObject;
      if ( v4 )
      {
        v5 = LOWORD(v4[1].baseclass_0.vfptr);
        SkillIcon::SetSkill(&v1->baseclass_0, LOWORD(v4[1].baseclass_0.vfptr));
        IconWin::SetCoolTimeID(&v1->baseclass_0.baseclass_0, v5);
      }
    }
    SkillIcon::ShowSkillPowerBar(&v1->baseclass_0, 1);
  }
  else
  {
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[150].__vecDelDtor(
      (NiRefObject *)v1,
      0);
  }
}

//----- (00589640) --------------------------------------------------------
void __thiscall ShortCutIconWin::SetActionIcon(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  ShortCut *v3; // eax@1
  NiRefObjectVtbl *v4; // ebx@3
  int v5; // edi@3
  int v6; // eax@5
  int v7; // edi@6
  NiRefObjectVtbl *v8; // ebx@7
  int v9; // ST0C_4@7
  NiSourceTexture *v10; // eax@7
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // eax@7

  v1 = this;
  IconWin::SetCoolTimeID(&this->baseclass_0.baseclass_0, 0xFFFFu);
  IconWin::SetCoolTimeIDByItemAction(&v1->baseclass_0.baseclass_0, 0xFFFFu);
  v2 = v1->m_pkLotText;
  v1->m_bDisplayLotText = 0;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = v1->m_spShortCut.m_pObject;
  if ( v3 )
  {
    v4 = v3[1].baseclass_0.vfptr;
    v5 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, NiRefObjectVtbl *))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                        + 16))(
                            ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                            v3[1].baseclass_0.vfptr) )
    {
      if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)v4;
        if ( *(_DWORD *)v6 )
        {
          v7 = *(_DWORD *)v6;
          if ( *(_DWORD *)v6 )
          {
            SkillIcon::SetBackPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
            SkillIcon::SetTopPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
            v8 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v9 = *(_WORD *)(v7 + 99);
            v10 = IconMgr::GetTexture((char *)(v7 + 67));
            ((void (__thiscall *)(ShortCutIconWin *, NiSourceTexture *, int, signed int, signed int))v8[146].__vecDelDtor)(
              v1,
              v10,
              v9,
              32,
              32);
            v11 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
            v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
            v11(
              &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              1u);
          }
        }
      }
    }
    SkillIcon::ShowSkillPowerBar(&v1->baseclass_0, 0);
  }
  else
  {
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[150].__vecDelDtor(
      (NiRefObject *)v1,
      0);
  }
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (00589750) --------------------------------------------------------
void __thiscall ShortCutIconWin::SetSoulStoneIcon(ShortCutIconWin *this)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[150].__vecDelDtor)(0);
}

//----- (00589760) --------------------------------------------------------
void __thiscall ShortCutIconWin::StopToggleEffect(ShortCutIconWin *this)
{
  SpEffect *v1; // eax@1

  v1 = this->m_pkToggleEffect;
  if ( v1 )
  {
    if ( v1->m_bLive )
      v1->m_bLoop = 0;
  }
}

//----- (00589790) --------------------------------------------------------
void __thiscall ShortCutWin::UpdateMeWin(ShortCutWin *this, float fCurTime)
{
  char *v2; // esi@2
  signed int v3; // edi@2
  SpEffect *v4; // ecx@3

  if ( this->m_bShowFlag )
  {
    v2 = (char *)this->m_apkIconWin;
    v3 = 18;
    do
    {
      v4 = *(SpEffect **)(*(_DWORD *)v2 + 432);
      if ( v4 )
        SpEffect::Update(v4, fCurTime);
      v2 += 4;
      --v3;
    }
    while ( v3 );
  }
}

//----- (005897E0) --------------------------------------------------------
void __thiscall ShortCutWin::Show(ShortCutWin *this, bool b)
{
  this->m_bShowFlag = b;
  if ( b )
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  else
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (00589810) --------------------------------------------------------
void __thiscall ShortCutWin::StartHpStonCoolTime(ShortCutWin *this)
{
  int v1; // ecx@1
  int v2; // ebx@2
  int v3; // esi@4
  int v4; // edi@4
  int v5; // edx@6
  int v6; // eax@7
  bool v7; // zf@11
  signed int v8; // [sp+1Ch] [bp-8h]@1
  IconWin **v9; // [sp+20h] [bp-4h]@1

  v1 = (int)this->m_apkIconWin;
  v9 = (IconWin **)v1;
  v8 = 18;
  do
  {
    v2 = *(_DWORD *)(*(_DWORD *)v1 + 412);
    if ( v2 )
    {
      if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(*(_DWORD *)(*(_DWORD *)v1 + 412)) == 2 )
      {
        v3 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
        v4 = *(_DWORD *)(v2 + 8);
        if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                 + 16))(
                                ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                                *(_DWORD *)(v2 + 8)) )
        {
          if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
          {
            v5 = *(_DWORD *)(v3 + 196);
            if ( *(_DWORD *)(v5 + 4 * (unsigned __int16)v4) )
            {
              v6 = *(_DWORD *)(v5 + 4 * (unsigned __int16)v4);
              if ( v6 )
              {
                if ( !*(_DWORD *)(v6 + 101) )
                {
                  if ( *(_DWORD *)(v2 + 16) == 8 )
                    IconWin::StartCoolTime(*v9, Timer::ms_fCurTime, 7.0, 0.0);
                }
              }
            }
          }
        }
      }
    }
    v1 = (int)(v9 + 1);
    v7 = v8-- == 1;
    ++v9;
  }
  while ( !v7 );
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005898D0) --------------------------------------------------------
void __thiscall ShortCutWin::StartSpStonCoolTime(ShortCutWin *this)
{
  int v1; // ecx@1
  int v2; // ebx@2
  int v3; // esi@4
  int v4; // edi@4
  int v5; // edx@6
  int v6; // eax@7
  bool v7; // zf@11
  signed int v8; // [sp+1Ch] [bp-8h]@1
  IconWin **v9; // [sp+20h] [bp-4h]@1

  v1 = (int)this->m_apkIconWin;
  v9 = (IconWin **)v1;
  v8 = 18;
  do
  {
    v2 = *(_DWORD *)(*(_DWORD *)v1 + 412);
    if ( v2 )
    {
      if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(*(_DWORD *)(*(_DWORD *)v1 + 412)) == 2 )
      {
        v3 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
        v4 = *(_DWORD *)(v2 + 8);
        if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                 + 16))(
                                ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                                *(_DWORD *)(v2 + 8)) )
        {
          if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
          {
            v5 = *(_DWORD *)(v3 + 196);
            if ( *(_DWORD *)(v5 + 4 * (unsigned __int16)v4) )
            {
              v6 = *(_DWORD *)(v5 + 4 * (unsigned __int16)v4);
              if ( v6 )
              {
                if ( !*(_DWORD *)(v6 + 101) )
                {
                  if ( *(_DWORD *)(v2 + 16) == 9 )
                    IconWin::StartCoolTime(*v9, Timer::ms_fCurTime, 7.0, 0.0);
                }
              }
            }
          }
        }
      }
    }
    v1 = (int)(v9 + 1);
    v7 = v8-- == 1;
    ++v9;
  }
  while ( !v7 );
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00589990) --------------------------------------------------------
void __thiscall ShortCutWin::SetShortCutInvPosWinLock(ShortCutWin *this, unsigned __int16 invPos)
{
  char *v2; // esi@1
  signed int v3; // edi@1
  int v4; // ecx@2

  v2 = (char *)this->m_apkIconWin;
  v3 = 18;
  do
  {
    v4 = *(_DWORD *)(*(_DWORD *)v2 + 412);
    if ( v4 )
    {
      if ( (*(int (**)(void))(*(_DWORD *)v4 + 4))() == 5 )
        *(_BYTE *)(*(_DWORD *)v2 + 429) = 1;
    }
    v2 += 4;
    --v3;
  }
  while ( v3 );
}

//----- (005899D0) --------------------------------------------------------
void __thiscall ShortCutWin::SetShortCutInvPosWinUnLock(ShortCutWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1
  int v3; // ecx@2

  v1 = (char *)this->m_apkIconWin;
  v2 = 18;
  do
  {
    v3 = *(_DWORD *)(*(_DWORD *)v1 + 412);
    if ( v3 )
    {
      if ( (*(int (**)(void))(*(_DWORD *)v3 + 4))() == 5 )
        *(_BYTE *)(*(_DWORD *)v1 + 429) = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (00589A10) --------------------------------------------------------
void __thiscall ShortCutWin::StopEffect(ShortCutWin *this)
{
  char *v1; // edx@1
  signed int v2; // esi@1
  int v3; // eax@2
  int v4; // eax@4
  int v5; // eax@7
  int v6; // eax@9
  int v7; // eax@12
  int v8; // eax@14
  int v9; // eax@17
  int v10; // eax@19
  int v11; // eax@22
  int v12; // eax@24
  int v13; // eax@27
  int v14; // eax@29

  v1 = (char *)&this->m_apkIconWin[1];
  v2 = 3;
  do
  {
    v3 = *((_DWORD *)v1 - 1);
    if ( *(_BYTE *)(v3 + 438) )
    {
      if ( *(_DWORD *)(v3 + 432) )
      {
        v4 = *(_DWORD *)(v3 + 432);
        if ( v4 )
        {
          if ( *(_BYTE *)(v4 + 64) )
            *(_BYTE *)(v4 + 65) = 0;
        }
      }
    }
    v5 = *(_DWORD *)v1;
    if ( *(_BYTE *)(*(_DWORD *)v1 + 438) )
    {
      if ( *(_DWORD *)(v5 + 432) )
      {
        v6 = *(_DWORD *)(v5 + 432);
        if ( v6 )
        {
          if ( *(_BYTE *)(v6 + 64) )
            *(_BYTE *)(v6 + 65) = 0;
        }
      }
    }
    v7 = *((_DWORD *)v1 + 1);
    if ( *(_BYTE *)(v7 + 438) )
    {
      if ( *(_DWORD *)(v7 + 432) )
      {
        v8 = *(_DWORD *)(v7 + 432);
        if ( v8 )
        {
          if ( *(_BYTE *)(v8 + 64) )
            *(_BYTE *)(v8 + 65) = 0;
        }
      }
    }
    v9 = *((_DWORD *)v1 + 2);
    if ( *(_BYTE *)(v9 + 438) )
    {
      if ( *(_DWORD *)(v9 + 432) )
      {
        v10 = *(_DWORD *)(v9 + 432);
        if ( v10 )
        {
          if ( *(_BYTE *)(v10 + 64) )
            *(_BYTE *)(v10 + 65) = 0;
        }
      }
    }
    v11 = *((_DWORD *)v1 + 3);
    if ( *(_BYTE *)(v11 + 438) )
    {
      if ( *(_DWORD *)(v11 + 432) )
      {
        v12 = *(_DWORD *)(v11 + 432);
        if ( v12 )
        {
          if ( *(_BYTE *)(v12 + 64) )
            *(_BYTE *)(v12 + 65) = 0;
        }
      }
    }
    v13 = *((_DWORD *)v1 + 4);
    if ( *(_BYTE *)(v13 + 438) )
    {
      if ( *(_DWORD *)(v13 + 432) )
      {
        v14 = *(_DWORD *)(v13 + 432);
        if ( v14 )
        {
          if ( *(_BYTE *)(v14 + 64) )
            *(_BYTE *)(v14 + 65) = 0;
        }
      }
    }
    v1 += 24;
    --v2;
  }
  while ( v2 );
}

//----- (00589B10) --------------------------------------------------------
void __thiscall ShortCutIconWin::DoAction(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiIndex);
}

//----- (00589B40) --------------------------------------------------------
void __thiscall ShortCutIconWin::DoRAction(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiIndex);
}

//----- (00589B70) --------------------------------------------------------
void __thiscall ShortCutIconWin::OnFirstHitWin(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  ShortCut *v2; // ecx@1
  int v3; // eax@3
  ShortCut *v4; // eax@4
  unsigned __int16 v5; // ax@5
  Item *v6; // eax@6
  ItemInfoWin *v7; // ecx@7
  ShortCut *v8; // eax@11
  unsigned int v9; // eax@12
  Item *v10; // eax@13
  ItemInfoWin *v11; // ecx@14
  ShortCut *v12; // eax@17
  unsigned __int16 v13; // ax@18
  SkillInfoWin *v14; // ecx@18
  ShortCut *v15; // edi@22
  ActionViewInfo *v16; // eax@23
  unsigned int v17; // edi@25
  Item *v18; // edi@26
  ItemInfoWin *v19; // ecx@27

  v1 = this;
  v2 = this->m_spShortCut.m_pObject;
  if ( !v2 )
  {
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    return;
  }
  v3 = ((int (*)(void))v2->baseclass_0.vfptr[1].__vecDelDtor)();
  switch ( v3 )
  {
    case 4:
      v4 = v1->m_spShortCut.m_pObject;
      if ( v4 )
      {
        v5 = LOWORD(v4[1].baseclass_0.m_uiRefCount);
        if ( v5 != -1 )
        {
          v6 = Inventory::GetItemByID(&g_kInventory, v5);
          if ( !v6 )
          {
            v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
            return;
          }
          v7 = g_pkItemInfoWin;
          v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
          if ( v7 )
          {
            ItemInfoWin::SetItemInfo(v7, v6);
            PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
            return;
          }
        }
      }
      break;
    case 5:
      v8 = v1->m_spShortCut.m_pObject;
      if ( v8 )
      {
        v9 = (unsigned int)v8[1].baseclass_0.vfptr;
        if ( v9 < 0xC0 )
        {
          v10 = g_kInventory.m_aspInv[v9].m_pObject;
          if ( v10 )
          {
            v11 = g_pkItemInfoWin;
            v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
            if ( v11 )
            {
              ItemInfoWin::SetItemInfo(v11, v10);
              PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              return;
            }
          }
        }
      }
      break;
    case 1:
      v12 = v1->m_spShortCut.m_pObject;
      if ( v12 )
      {
        v13 = LOWORD(v12[1].baseclass_0.vfptr);
        v14 = (SkillInfoWin *)g_pkSkillInfoWin;
        v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkSkillInfoWin;
        if ( v14 )
        {
          if ( v13 != -1 )
          {
            SkillInfoWin::SetSkillInfo(v14, v13, 1, 0, 0);
            PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
            return;
          }
        }
      }
      break;
    case 2:
      v15 = v1->m_spShortCut.m_pObject;
      if ( v15 )
      {
        v16 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(
                (unsigned __int16)v15[1].baseclass_0.vfptr,
                1);
        if ( v16 )
        {
          if ( v16->eActionType == 2 )
          {
            v17 = (unsigned int)v15[2].baseclass_0.vfptr;
            if ( v17 < 0x2A )
            {
              v18 = g_kInventory.m_aspPremiumActionInv[v17].m_pObject;
              if ( v18 )
              {
                v19 = g_pkItemInfoWin;
                v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
                if ( v19 )
                {
                  ItemInfoWin::SetItemInfo(v19, v18);
                  PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
                  return;
                }
              }
            }
          }
          else
          {
            v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
            PgWin::SetToolTipWinText(
              &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              v16->ActionName);
          }
        }
      }
      break;
  }
  PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
}

//----- (00589D10) --------------------------------------------------------
void __thiscall ShortCutIconWin::RefreshEffect(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  SpEffect *v2; // eax@2

  v1 = this;
  if ( SkillIcon::GetSkill(&this->baseclass_0) == -1 )
  {
    v2 = v1->m_pkToggleEffect;
    if ( v2 )
    {
      if ( v2->m_bLive )
        v2->m_bLoop = 0;
    }
  }
}

//----- (00589D40) --------------------------------------------------------
void __thiscall ShortCutIconWin::StartToggleEffect(ShortCutIconWin *this)
{
  NiNode *v1; // esi@1
  NiNode *v2; // edi@2
  float v3; // ST0C_4@2
  float v4; // ST10_4@2

  v1 = (NiNode *)this;
  if ( this->m_pkToggleEffect )
  {
    this->m_pkToggleEffect->m_bLoop = 1;
    v2 = this->m_pkToggleEffect->m_spEffect.m_pObject;
    v3 = (double)((unsigned int)((int (__thiscall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(this) >> 1);
    v4 = (double)((unsigned int)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v1) >> 1);
    v2->baseclass_0.m_kLocal.m_Translate.x = v3;
    v2->baseclass_0.m_kLocal.m_Translate.y = v4;
    v2->baseclass_0.m_kLocal.m_Translate.z = 0.0;
    SpEffect::Start((SpEffect *)v1[1].m_kEffectList.baseclass_0.baseclass_0.vfptr, v1);
  }
}

//----- (00589DD0) --------------------------------------------------------
void __thiscall ShortCutWin::OnCmdPrev(ShortCutWin *this)
{
  ShortCutWin *v1; // esi@1
  unsigned int v2; // eax@1
  PgFrameWork *v3; // ecx@4
  char string; // [sp+4h] [bp-24h]@6
  unsigned int v5; // [sp+24h] [bp-4h]@1
  int v6; // [sp+28h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = this;
  v2 = this->m_uiCurPage;
  if ( v2 )
    this->m_uiCurPage = v2 - 1;
  else
    this->m_uiCurPage = 4;
  ShortCutWin::StopEffect(this);
  v3 = v1->baseclass_0.m_pkFrameWork;
  if ( v3 )
    PgFrameWork::AddMsg(v3, 0x8Bu, 0, 0);
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v1->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (00589E60) --------------------------------------------------------
void __thiscall ShortCutWin::OnCmdNext(ShortCutWin *this)
{
  ShortCutWin *v1; // esi@1
  PgFrameWork *v2; // ecx@3
  char string; // [sp+4h] [bp-24h]@5
  unsigned int v4; // [sp+24h] [bp-4h]@1
  int v5; // [sp+28h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v1 = this;
  ++v1->m_uiCurPage;
  if ( this->m_uiCurPage >= 5 )
    this->m_uiCurPage = 0;
  ShortCutWin::StopEffect(this);
  v2 = v1->baseclass_0.m_pkFrameWork;
  if ( v2 )
    PgFrameWork::AddMsg(v2, 0x8Bu, 0, 0);
  sprintf(&string, "%u");
  ((void (__stdcall *)(char *))v1->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&string);
}
// A85C00: using guessed type int __security_cookie;

//----- (00589EF0) --------------------------------------------------------
bool __thiscall ShortCutWin::SetDropContents(ShortCutWin *this, ShortCut *pkShortCut, unsigned int uiSenderIndex)
{
  ShortCutWin *v3; // esi@1
  NiRefObjectVtbl *v4; // ecx@3
  bool result; // al@5
  NiRefObjectVtbl *v6; // eax@6
  Item *v7; // edi@7
  NiRefObjectVtbl *v8; // ebx@8
  NiRefObjectVtbl *v9; // ecx@9
  NiRefObjectVtbl *v10; // eax@13

  v3 = this;
  if ( pkShortCut )
  {
    switch ( ((int (__thiscall *)(_DWORD))pkShortCut->baseclass_0.vfptr[1].__vecDelDtor)(pkShortCut) )
    {
      case 0:
        v3->m_kDropContents.m_eType = 0;
        v4 = pkShortCut[1].baseclass_0.vfptr;
        if ( v4 )
        {
          v3->m_kDropContents.m_uiSenderIndex = uiSenderIndex;
          v3->m_kDropContents.m_apvParam[0] = v4;
          v3->m_kDropContents.m_apvParam[1] = 0;
          v3->m_kDropContents.m_uiLot = (*((int (**)(void))v4->__vecDelDtor + 3))();
        }
        v3->m_kDropContents.m_kItemID = LOWORD(pkShortCut[1].baseclass_0.m_uiRefCount);
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_CLICK);
        result = 1;
        break;
      case 5:
        v3->m_kDropContents.m_eType = 6;
        v6 = pkShortCut[1].baseclass_0.vfptr;
        if ( (unsigned int)v6 >= 0xC0 || (v7 = g_kInventory.m_aspInv[(_DWORD)v6].m_pObject) == 0 )
          goto LABEL_14;
        v3->m_kDropContents.m_uiSenderIndex = uiSenderIndex;
        v3->m_kDropContents.m_apvParam[0] = v7;
        v3->m_kDropContents.m_apvParam[1] = 0;
        v3->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v7->baseclass_0.vfptr[3].__vecDelDtor)(v7);
        v3->m_kDropContents.m_kItemID = v7->m_kStruct.itemid;
        v8 = pkShortCut[1].baseclass_0.vfptr;
        v3->m_kDropContents.ui_InvType = 4;
        v3->m_kDropContents.ui_InvIndex = (unsigned int)v8;
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_CLICK);
        result = 1;
        break;
      case 4:
        v3->m_kDropContents.m_eType = 6;
        v9 = pkShortCut[1].baseclass_0.vfptr;
        if ( v9 )
        {
          v3->m_kDropContents.m_uiSenderIndex = uiSenderIndex;
          v3->m_kDropContents.m_apvParam[0] = v9;
          v3->m_kDropContents.m_apvParam[1] = 0;
          v3->m_kDropContents.m_uiLot = (*((int (**)(void))v9->__vecDelDtor + 3))();
        }
        v3->m_kDropContents.m_kItemID = LOWORD(pkShortCut[1].baseclass_0.m_uiRefCount);
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_CLICK);
        result = 1;
        break;
      case 1:
        v3->m_kDropContents.m_eType = 1;
        v3->m_kDropContents.m_apvParam[0] = (void *)LOWORD(pkShortCut[1].baseclass_0.vfptr);
        v3->m_kDropContents.m_uiSenderIndex = uiSenderIndex;
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_CLICK);
        result = 1;
        break;
      case 2:
        v3->m_kDropContents.m_eType = 3;
        v10 = pkShortCut[2].baseclass_0.vfptr;
        v3->m_kDropContents.m_uiSenderIndex = uiSenderIndex;
        v3->m_kDropContents.m_apvParam[0] = v10;
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_CLICK);
        result = 1;
        break;
      default:
        goto LABEL_14;
    }
  }
  else
  {
LABEL_14:
    result = 0;
  }
  return result;
}

//----- (0058A0D0) --------------------------------------------------------
void __thiscall ShortCutWin::SetHotKeyWin(ShortCutWin *this, unsigned int index, const char *meshName)
{
  ShortCutWin *v3; // esi@1
  unsigned int v4; // edi@2
  PgWinSpr *v5; // ecx@2
  int v6; // eax@4
  PgWinSpr *v7; // ecx@4
  PgSprData *v8; // ebx@4
  NiAVObject *v9; // eax@5
  PgWinSpr *v10; // eax@6
  unsigned int v11; // esi@7
  int uiWidth; // [sp+0h] [bp-28h]@6
  int uiHeight; // [sp+4h] [bp-24h]@6
  int uiLeft; // [sp+8h] [bp-20h]@4
  int uiTop; // [sp+Ch] [bp-1Ch]@4
  int xPos; // [sp+10h] [bp-18h]@4
  int iX; // [sp+14h] [bp-14h]@6
  int yPos; // [sp+18h] [bp-10h]@4
  int v19; // [sp+24h] [bp-4h]@4

  v3 = this;
  if ( this->m_spNumberNode.m_pObject )
  {
    v4 = index;
    v5 = this->m_apkHotKeyWin[index];
    if ( v5 )
    {
      if ( (unsigned __int8)((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        v6 = ((int (*)(void))v3->m_apkIconWinBack[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
        v7 = v3->m_apkIconWinBack[v4];
        xPos = v6;
        yPos = ((int (*)(void))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        PgWin::DetachChildWin(
          &v3->baseclass_0.baseclass_0.baseclass_0,
          (NiPointer<PgWin> *)&index,
          &v3->m_apkHotKeyWin[v4]->baseclass_0);
        v19 = 0;
        PgWinMgr::DestroyWin(&Pgg_kWinMgr, (PgWin *)index);
        v3->m_apkHotKeyWin[v4] = 0;
        v8 = PgSprData::Create(
               &v3->m_spNumberNode.m_pObject->baseclass_0,
               meshName,
               &uiLeft,
               &uiTop,
               v3->m_pkNumberTexture);
        if ( v8 )
        {
          v9 = (NiAVObject *)v3->m_spNumberPosNode.m_pObject;
          if ( v9 )
          {
            PgUtil::GetTriShapeRect(
              v9,
              meshName,
              &iX,
              (int *)&meshName,
              (unsigned int *)&uiWidth,
              (unsigned int *)&uiHeight);
            v10 = PgWinSpr::CreateWin(
                    iX + xPos + 25,
                    (int)&meshName[yPos + 4],
                    v8,
                    &v3->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            v3->m_apkHotKeyWin[v4] = v10;
            v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
              (NiRefObject *)v10,
              0);
          }
        }
        v11 = index;
        v19 = -1;
        if ( index && !InterlockedDecrement((volatile LONG *)(index + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
    }
  }
}

//----- (0058A250) --------------------------------------------------------
void __thiscall ShortCutWin::SetHotKeyPlusWin(ShortCutWin *this, unsigned int index, const char *meshName)
{
  ShortCutWin *v3; // esi@1
  unsigned int v4; // edi@2
  PgWinSpr *v5; // ecx@2
  PgSprData *v6; // ebx@4
  int v7; // eax@4
  PgWinSpr *v8; // ecx@4
  PgWinSpr *v9; // eax@5
  unsigned int v10; // esi@6
  int uiLeft; // [sp+0h] [bp-18h]@4
  int uiTop; // [sp+4h] [bp-14h]@4
  int xPos; // [sp+8h] [bp-10h]@4
  int v14; // [sp+14h] [bp-4h]@4

  v3 = this;
  if ( this->m_spNumberNode.m_pObject )
  {
    v4 = index;
    v5 = this->m_apkHotKeyPlusWin[index];
    if ( v5 )
    {
      if ( (unsigned __int8)((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        v6 = PgSprData::Create(
               &v3->m_spNumberNode.m_pObject->baseclass_0,
               meshName,
               &uiLeft,
               &uiTop,
               v3->m_pkNumberTexture);
        v7 = ((int (*)(void))v3->m_apkHotKeyPlusWin[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
        v8 = v3->m_apkHotKeyPlusWin[v4];
        xPos = v7;
        meshName = (const char *)((int (*)(void))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        PgWin::DetachChildWin(
          &v3->baseclass_0.baseclass_0.baseclass_0,
          (NiPointer<PgWin> *)&index,
          &v3->m_apkHotKeyPlusWin[v4]->baseclass_0);
        v14 = 0;
        PgWinMgr::DestroyWin(&Pgg_kWinMgr, (PgWin *)index);
        v3->m_apkHotKeyPlusWin[v4] = 0;
        if ( v6 )
        {
          v9 = PgWinSpr::CreateWin(xPos, (int)meshName, v6, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
          v3->m_apkHotKeyPlusWin[v4] = v9;
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v9,
            0);
        }
        v10 = index;
        v14 = -1;
        if ( index && !InterlockedDecrement((volatile LONG *)(index + 4)) )
        {
          if ( v10 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        }
      }
    }
  }
}

//----- (0058A3A0) --------------------------------------------------------
void __thiscall ShortCutWin::SetPremiumItemInfo(ShortCutWin *this, unsigned int uiInvPos, Item *pkItem)
{
  ShortCutWin *v3; // edi@1
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  ActionViewInfo *v7; // eax@4
  PgFrameWork *v8; // ecx@6

  v3 = this;
  v4 = operator new(0x14u);
  if ( v4 )
  {
    ShortCutAction::ShortCutAction((ShortCutAction *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  *(_DWORD *)(v6 + 16) = uiInvPos;
  *(_DWORD *)(v6 + 12) = 0;
  v7 = ActionViewTable::GetByInxName(pkItem->m_pkInfo->InxName);
  if ( v7 )
    *(_DWORD *)(v6 + 8) = v7->nIndex;
  ShortCutMgr::SetShortCut(&g_kShortCutMgr, (ShortCut *)v6, v3->m_uiRevIndex, 1);
  v8 = v3->baseclass_0.m_pkFrameWork;
  if ( v8 )
    PgFrameWork::AddMsg(v8, 0x8Bu, 0, 0);
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_CLICK);
  v3->m_bPremiumActive = 0;
}

//----- (0058A470) --------------------------------------------------------
bool __thiscall ShortCutWin::IsToggleOn(ShortCutWin *this, unsigned __int16 kCastingID)
{
  int v2; // edx@1
  signed int v3; // eax@1
  unsigned int v4; // ecx@2
  bool result; // al@6

  v2 = *(_DWORD *)&this->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (signed int)((char *)this->m_vecToggleSkillID.baseclass_0._Mylast - v2) >> 1;
  if ( v3 && (v4 = 0, v3) )
  {
    if ( (unsigned int)v3 <= 0 )
      std::_Xout_of_range("invalid vector<T> subscript");
    while ( *(_WORD *)v2 != kCastingID )
    {
      ++v4;
      v2 += 2;
      if ( v3 <= v4 )
        goto LABEL_6;
    }
    result = 1;
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}

//----- (0058A4C0) --------------------------------------------------------
void __thiscall ShortCutWin::ReFreshToggleEffect(ShortCutWin *this)
{
  SkillIcon **v1; // edi@1
  signed int v2; // ebx@1
  SkillIcon *v3; // esi@2
  unsigned int v4; // eax@3

  v1 = (SkillIcon **)this->m_apkIconWin;
  v2 = 18;
  do
  {
    v3 = *v1;
    if ( SkillIcon::GetSkill(*v1) == -1 )
    {
      v4 = v3[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiExtraDataSize;
      if ( v4 )
      {
        if ( *(_BYTE *)(v4 + 64) )
          *(_BYTE *)(v4 + 65) = 0;
      }
    }
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (0058A510) --------------------------------------------------------
void __thiscall ShortCutIconWin::_ShortCutIconWin(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  ShortCut *v2; // edi@1
  SpEffect *v3; // edi@6
  NiNode *v4; // ebx@7
  ShortCut *v5; // edi@12

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShortCutIconWin::_vftable_;
  v2 = this->m_spShortCut.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spShortCut.m_pObject = 0;
  }
  v3 = v1->m_pkToggleEffect;
  if ( v3 )
  {
    NsEffect::_NsEffect(&v3->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v3->m_kMarkCheck);
    v4 = v3->m_spEffect.m_pObject;
    if ( v3->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    operator delete(v3);
    v1->m_pkToggleEffect = 0;
  }
  v5 = v1->m_spShortCut.m_pObject;
  if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
    v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  SkillIcon::_SkillIcon(&v1->baseclass_0);
}
// 9AB5F8: using guessed type int (__stdcall *ShortCutIconWin___vftable_)(int uiFlags);
// 9AB614: using guessed type int (__thiscall *ShortCutIconWin___vftable_)(void *p, char);

//----- (0058A630) --------------------------------------------------------
void __thiscall ShortCutIconWin::CreateToggleEffect(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  char *v2; // eax@5
  void *v3; // edi@5
  NiObject *v4; // eax@6
  NiNode *v5; // eax@8
  NiNode *v6; // esi@9
  NiPointer<NiNode> pkNiNodePtr; // [sp+4h] [bp-10h]@3
  int v8; // [sp+10h] [bp-4h]@3

  v1 = this;
  if ( this->m_pkToggleEffect )
  {
    ShortCutIconWin::StartToggleEffect(this);
  }
  else
  {
    pkNiNodePtr.m_pObject = 0;
    v8 = 0;
    if ( !Folder::m_bInit )
      Folder::Init();
    v2 = Folder::Merge(&Folder::m_acEffect, "Toggle_SkillOn.nif");
    PgUtil::LoadNodeNifFile(v2, &pkNiNodePtr, 0);
    v3 = operator new(0x44u);
    LOBYTE(v8) = 1;
    if ( v3 )
    {
      v4 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      SpEffect::SpEffect((SpEffect *)v3, (NiNode *)v4);
    }
    else
    {
      v4 = 0;
    }
    LOBYTE(v8) = 0;
    v1->m_pkToggleEffect = (SpEffect *)v4;
    ShortCutIconWin::StartToggleEffect(v1);
    v5 = pkNiNodePtr.m_pObject;
    v1->m_bEnableToggle = 1;
    v8 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
  }
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0058A740) --------------------------------------------------------
void __thiscall ShortCutWin::ReflashHotKey(ShortCutWin *this)
{
  ShortCutWin *v1; // edi@1
  unsigned int v2; // esi@1
  signed int v3; // eax@5
  int v4; // ebx@6
  ShortCutWin *v5; // ecx@9
  const char *v6; // [sp-4h] [bp-114h]@3
  char numberResMeshName[256]; // [sp+Ch] [bp-104h]@4
  unsigned int v8; // [sp+10Ch] [bp-4h]@1
  int v9; // [sp+110h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  do
  {
    if ( (signed int)v2 > 11 )
    {
      ShortCutWin::SetHotKeyWin(v1, v2, "SmallNumTrans02");
      v6 = "SmallNumTrans01";
LABEL_19:
      v5 = v1;
      goto LABEL_20;
    }
    numberResMeshName[0] = 0;
    memset(&numberResMeshName[1], 0, 0xFFu);
    switch ( v1->m_uiCurPage )
    {
      case 0u:
        v3 = 47;
        break;
      case 1u:
        v3 = 59;
        break;
      case 2u:
        v3 = 71;
        break;
      case 3u:
        v3 = 83;
        break;
      default:
        ShortCutWin::SetHotKeyWin(v1, v2, "SmallNumTrans02");
        v6 = "SmallNumTrans01";
        goto LABEL_19;
    }
    v4 = v3 + v2;
    if ( !byte_A8270B[2 * (v3 + v2)] )
    {
      ShortCutWin::SetHotKeyWin(v1, v2, "SmallNumTrans02");
      v6 = "SmallNumTrans01";
      goto LABEL_19;
    }
    sprintf(numberResMeshName, "%i");
    ShortCutWin::SetHotKeyWin(v1, v2, numberResMeshName);
    if ( LOBYTE(word_B5B172[4 * v4]) == 16 )
    {
      v6 = "ShiftPlus";
      goto LABEL_19;
    }
    if ( LOBYTE(word_B5B172[4 * v4]) == 17 )
    {
      v6 = "CtrlPlus";
      goto LABEL_19;
    }
    v5 = v1;
    if ( LOBYTE(word_B5B172[4 * v4]) == 18 )
      v6 = "AltPlus";
    else
      v6 = "SmallNumTrans01";
LABEL_20:
    ShortCutWin::SetHotKeyPlusWin(v5, v2++, v6);
  }
  while ( (signed int)v2 < 18 );
}
// A85C00: using guessed type int __security_cookie;
// B5B172: using guessed type __int16 word_B5B172[];

//----- (0058A890) --------------------------------------------------------
void __thiscall ShortCutWin::SetMHActionState(ShortCutWin *this, bool bMHEmotionStart)
{
  ShortCutWin *v2; // edi@1
  int v3; // esi@3
  IconWin **v4; // ebx@3
  NiNode *v5; // ecx@5
  int v6; // eax@7
  int v7; // eax@8
  int v8; // esi@9
  int v9; // edi@9
  int v10; // edx@11
  char *v11; // eax@12
  double v12; // st7@17
  float v13; // ST0C_4@19
  float v14; // ST08_4@19
  float v15; // ST04_4@19
  unsigned __int16 *Info_8; // [sp+24h] [bp-10h]@3
  ShortCutWin *v17; // [sp+28h] [bp-Ch]@1
  int i; // [sp+2Ch] [bp-8h]@3
  int bEnable; // [sp+30h] [bp-4h]@0
  MHEmotion *pkEmotion; // [sp+3Ch] [bp+8h]@3

  v2 = this;
  v17 = this;
  LOBYTE(bEnable) = 0;
  if ( !bMHEmotionStart )
    LOBYTE(bEnable) = 1;
  v3 = 0;
  Info_8 = (unsigned __int16 *)dword_AA5140;
  pkEmotion = 0;
  i = 0;
  v4 = (IconWin **)this->m_apkIconWin;
  while ( 1 )
  {
    v5 = (*v4)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
    if ( v5 )
    {
      if ( ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)() == 2 )
      {
        v6 = v3 + 18 * v2->m_uiCurPage;
        if ( (unsigned int)v6 < 0x64 )
        {
          v7 = (int)*(&unk_A9E21C + v6);
          if ( v7 )
          {
            v8 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
            v9 = *(_DWORD *)(v7 + 8);
            if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                  + 16))(
                                    ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                                    v9) )
            {
              if ( (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) )
              {
                v10 = *(_DWORD *)(v8 + 196);
                if ( *(_DWORD *)(v10 + 4 * (unsigned __int16)v9) )
                {
                  v11 = *(char **)(v10 + 4 * (unsigned __int16)v9);
                  if ( v11 )
                  {
                    if ( Info_8 )
                      pkEmotion = MiniHouseEmotionTab::GetNonMenuEmotion(*Info_8, *v11);
                    if ( !pkEmotion )
                    {
                      if ( (_BYTE)bEnable )
                        v12 = 1.0;
                      else
                        v12 = 0.44999999;
                      v13 = v12;
                      v14 = v12;
                      v15 = v12;
                      IconWin::IconDisable(*v4, v15, v14, v13);
                      ((void (__stdcall *)(int))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
                      LOBYTE((*v4)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.y) = bEnable;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    v3 = i + 1;
    ++v4;
    i = v3;
    if ( v3 >= 18 )
      break;
    v2 = v17;
  }
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;
// AA5140: using guessed type int dword_AA5140;

//----- (0058A9E0) --------------------------------------------------------
ShortCutIconWin *__cdecl ShortCutIconWin::CreateWin(int iXPos, int iYPos, unsigned int uiIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  ShortCutIconWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1B8u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    ShortCutIconWin::ShortCutIconWin((ShortCutIconWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *))(*(_DWORD *)v6 + 612))(
                          v6,
                          iXPos,
                          iYPos,
                          uiIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (ShortCutIconWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (0058AB20) --------------------------------------------------------
void __thiscall ShortCutWin::ShortCutWin(ShortCutWin *this)
{
  ShortCutWin *v1; // esi@1
  signed int v2; // ecx@1
  int v3; // eax@1
  NiNode *v4; // edi@3
  char *v5; // ecx@8
  char *v6; // edi@8

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShortCutWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_spNumberNode.m_pObject = 0;
  v1->m_spNumberPosNode.m_pObject = 0;
  *(_DWORD *)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecToggleSkillID.baseclass_0._Mylast = 0;
  v1->m_vecToggleSkillID.baseclass_0._Myend = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_uiCurPage = 0;
  *(_WORD *)&v1->m_bVerticalMode = 256;
  v1->m_pkSizeBtn = 0;
  v1->m_pkPanelTrunBut = 0;
  v1->m_pkSubPanelBut = 0;
  v1->m_iSubTabLevel = -1;
  v2 = 0;
  v3 = (int)v1->m_apkIconWinBack2;
  do
  {
    *(_DWORD *)(v3 - 72) = 0;
    *(_DWORD *)v3 = 0;
    *(_DWORD *)(v3 + 72) = 0;
    *(_DWORD *)(v3 + 144) = 0;
    *(_DWORD *)(v3 + 228) = 0;
    v1->m_bShowHotkey[v2++] = 1;
    v3 += 4;
  }
  while ( v2 < 18 );
  v1->m_bShowFlag = 0;
  v1->m_uiShortCutStatusIndex = 0;
  v4 = v1->m_spNumberPosNode.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spNumberPosNode.m_pObject = 0;
  }
  v1->m_pkDropcontents = 0;
  v1->m_uiRevIndex = 0;
  v1->m_bPremiumActive = 0;
  v5 = (char *)v1->m_vecToggleSkillID.baseclass_0._Mylast;
  v6 = *(char **)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v6 != v5 )
  {
    memmove(v6, v5, 0);
    v1->m_vecToggleSkillID.baseclass_0._Mylast = (unsigned __int16 *)v6;
  }
  v1->m_bToggleOn = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AB880: using guessed type int (__stdcall *ShortCutWin___vftable_)(int uiFlags);
// 9AB89C: using guessed type int (__thiscall *ShortCutWin___vftable_)(void *p, char);

//----- (0058ACB0) --------------------------------------------------------
void __thiscall ShortCutWin::_ShortCutWin(ShortCutWin *this)
{
  ShortCutWin *v1; // ebx@1
  int v2; // esi@2
  int v3; // edi@3
  DropContents *v4; // ecx@9
  char *v5; // ecx@12
  char *v6; // esi@12
  NiNode *v7; // esi@16
  NiNode *v8; // esi@20
  signed int v9; // [sp+8h] [bp-14h]@1
  char *v10; // [sp+Ch] [bp-10h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ShortCutWin::_vftable_;
  v10 = (char *)this->m_apkCoolTimeOverEffect;
  v9 = 18;
  do
  {
    v2 = *(_DWORD *)v10;
    if ( *(_DWORD *)v10 )
    {
      NsEffect::_NsEffect((NsEffect *)(v2 + 28));
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v2 + 4));
      v3 = *(_DWORD *)v2;
      if ( *(_DWORD *)v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      operator delete((void *)v2);
    }
    v10 += 4;
    --v9;
  }
  while ( v9 );
  v4 = v1->m_pkDropcontents;
  if ( v4 )
    ((void (__stdcall *)(signed int))v4->vfptr->__vecDelDtor)(1);
  v1->m_bPremiumActive = 0;
  if ( (unsigned int)((char *)v1->m_vecToggleSkillID.baseclass_0._Mylast
                    - *(_DWORD *)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFE )
  {
    v5 = (char *)v1->m_vecToggleSkillID.baseclass_0._Mylast;
    v6 = *(char **)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v6 != v5 )
    {
      memmove(v6, v5, 0);
      v1->m_vecToggleSkillID.baseclass_0._Mylast = (unsigned __int16 *)v6;
    }
  }
  if ( *(_DWORD *)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecToggleSkillID.baseclass_0._Mylast = 0;
  v1->m_vecToggleSkillID.baseclass_0._Myend = 0;
  v7 = v1->m_spNumberPosNode.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spNumberNode.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AB880: using guessed type int (__stdcall *ShortCutWin___vftable_)(int uiFlags);
// 9AB89C: using guessed type int (__thiscall *ShortCutWin___vftable_)(void *p, char);

//----- (0058AE70) --------------------------------------------------------
ShortCutWin *__cdecl ShortCutWin::CreateWin(PgFrameWork *pkFrameWork, bool bVertical)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  ShortCutWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x468u);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    ShortCutWin::ShortCutWin((ShortCutWin *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *, _DWORD, signed int, signed int))(*(_DWORD *)v4 + 540))(
                          v4,
                          pkFrameWork,
                          bVertical,
                          1,
                          -1) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (ShortCutWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}

//----- (0058AFB0) --------------------------------------------------------
ShortCutWin *__cdecl ShortCutWin::CreateSubWin(PgFrameWork *pkFrameWork, bool bVertical, int tabLevel)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  ShortCutWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x468u);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    ShortCutWin::ShortCutWin((ShortCutWin *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *, _DWORD, _DWORD, int))(*(_DWORD *)v5 + 540))(
                          v5,
                          pkFrameWork,
                          bVertical,
                          0,
                          tabLevel) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (ShortCutWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (0058B0F0) --------------------------------------------------------
void __thiscall ShortCutWin::OffToggleKey(ShortCutWin *this, unsigned __int16 kOffID)
{
  ShortCutWin *v2; // edi@1
  int v3; // ecx@1
  int v4; // eax@1
  unsigned int v5; // edx@2
  SkillIcon **v6; // esi@5
  signed int v7; // ebx@5
  unsigned __int16 v8; // ax@6
  unsigned int v9; // eax@8
  unsigned int i; // [sp+4h] [bp-4h]@2

  v2 = this;
  this->m_bToggleOn = 0;
  v3 = *(_DWORD *)&this->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = (signed int)((char *)v2->m_vecToggleSkillID.baseclass_0._Mylast - v3) >> 1;
  if ( v4 )
  {
    v5 = 0;
    i = 0;
    if ( v4 )
    {
      if ( (unsigned int)v4 <= 0 )
        std::_Xout_of_range("invalid vector<T> subscript");
      do
      {
        if ( *(_WORD *)(v3 + 2 * v5) == kOffID )
        {
          v6 = (SkillIcon **)v2->m_apkIconWin;
          v7 = 18;
          do
          {
            v8 = SkillIcon::GetSkill(*v6);
            if ( v8 != -1 )
            {
              if ( v8 == kOffID )
              {
                v9 = (*v6)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiExtraDataSize;
                if ( v9 )
                {
                  if ( *(_BYTE *)(v9 + 64) )
                    *(_BYTE *)(v9 + 65) = 0;
                }
              }
            }
            ++v6;
            --v7;
          }
          while ( v7 );
          memmove(
            (char *)(*(_DWORD *)&v2->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0] + 2 * i),
            (char *)(*(_DWORD *)&v2->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0] + 2 * i + 2),
            2
          * ((signed int)((char *)v2->m_vecToggleSkillID.baseclass_0._Mylast
                        + -*(_DWORD *)&v2->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0]
                        + -2 * i
                        - 2) >> 1));
          v5 = i;
          --v2->m_vecToggleSkillID.baseclass_0._Mylast;
        }
        v3 = *(_DWORD *)&v2->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
        ++v5;
        i = v5;
      }
      while ( (signed int)((char *)v2->m_vecToggleSkillID.baseclass_0._Mylast - v3) >> 1 > v5 );
    }
  }
}

//----- (0058B1E0) --------------------------------------------------------
void __thiscall ShortCutIconWin::UpdateMeWin(ShortCutIconWin *this, float fCurTime)
{
  ShortCutIconWin *v2; // edi@1
  ShortCut *v3; // ecx@1
  unsigned __int16 v4; // bx@3
  ActiveSkillInfo *v5; // esi@6
  int v6; // eax@9
  float v7; // eax@13
  SkillIcon *v8; // ecx@15
  double v9; // st7@16
  int v10; // eax@17
  ShortCut *v11; // eax@23
  unsigned __int16 v12; // ax@24
  ShortCut *v13; // esi@31
  ActionViewInfo *v14; // eax@32
  ActionType v15; // eax@33
  unsigned int v16; // esi@35
  NiRefObjectVtbl *v17; // esi@38
  int v18; // eax@39
  char v19; // al@43
  float v20; // ST00_4@48
  float v21; // [sp+4h] [bp-40h]@16
  float v22; // [sp+8h] [bp-3Ch]@16
  float v23; // [sp+Ch] [bp-38h]@16
  std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > tempList; // [sp+20h] [bp-24h]@11
  int iSP; // [sp+2Ch] [bp-18h]@6
  Skill::EmpowerInfo kEmpowerInfo; // [sp+30h] [bp-14h]@12
  PgFrameWork *pkGame; // [sp+34h] [bp-10h]@7
  int v28; // [sp+40h] [bp-4h]@11

  v2 = this;
  IconWin::UpdateMeWin(&this->baseclass_0.baseclass_0, fCurTime);
  v3 = v2->m_spShortCut.m_pObject;
  if ( !v3 )
    return;
  if ( ((int (*)(void))v3->baseclass_0.vfptr[1].__vecDelDtor)() != 1 )
  {
    if ( ((int (*)(void))v2->m_spShortCut.m_pObject->baseclass_0.vfptr[1].__vecDelDtor)() == 4 )
    {
      v11 = v2->m_spShortCut.m_pObject;
      if ( !v11 )
        return;
      v12 = LOWORD(v11[1].baseclass_0.m_uiRefCount);
      if ( v12 != -1 )
      {
        if ( Inventory::GetItemByID(&g_kInventory, v12) )
          return;
        goto LABEL_26;
      }
    }
    else
    {
      if ( ((int (*)(void))v2->m_spShortCut.m_pObject->baseclass_0.vfptr[1].__vecDelDtor)() == 5 )
      {
        if ( !v2->m_spShortCut.m_pObject )
          return;
      }
      else
      {
        if ( ((int (*)(void))v2->m_spShortCut.m_pObject->baseclass_0.vfptr[1].__vecDelDtor)() != 2
          || (v13 = v2->m_spShortCut.m_pObject) == 0
          || (v14 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(
                      (unsigned __int16)v13[1].baseclass_0.vfptr,
                      1)) == 0 )
          return;
        v15 = v14->eActionType;
        if ( v15 )
        {
          if ( v15 != 2 )
            return;
          v16 = (unsigned int)v13[2].baseclass_0.vfptr;
          if ( v16 >= 0x2A || !g_kInventory.m_aspPremiumActionInv[v16].m_pObject )
          {
            v23 = 128.0;
            v9 = 0.0;
            goto LABEL_46;
          }
        }
        else
        {
          v17 = v13[2].baseclass_0.vfptr;
          if ( v17 == (NiRefObjectVtbl *)8 )
          {
            v18 = User::HPStone(&g_kUser);
            v8 = (SkillIcon *)v2;
            if ( v18 )
            {
              v9 = 0.0;
              v23 = 0.0;
              v22 = 0.0;
              v21 = 0.0;
            }
            else
            {
              v23 = 128.0;
              v9 = 0.0;
              v22 = 0.0;
              v21 = 0.0;
            }
            goto LABEL_48;
          }
          if ( v17 != (NiRefObjectVtbl *)9 )
            return;
          v19 = User::GetMainCharClass(&g_kUser);
          if ( CharClass::GetBaseClassID(v19) != 26 && !User::SPStone(&g_kUser) )
            goto LABEL_26;
        }
      }
    }
    v9 = 0.0;
    v23 = 0.0;
    goto LABEL_46;
  }
  v4 = LOWORD(v2->m_spShortCut.m_pObject[1].baseclass_0.vfptr);
  if ( v4 == -1 )
    return;
  if ( Skill::IsProduceBaseSkill(LOWORD(v2->m_spShortCut.m_pObject[1].baseclass_0.vfptr)) == 1
    && !Skill::IsLearnProdSkill(v4) )
  {
LABEL_26:
    v23 = 128.0;
    v9 = 0.0;
LABEL_46:
    v22 = v9;
    v21 = v9;
    goto LABEL_47;
  }
  iSP = User::SP(&g_kUser);
  v5 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v4, 1);
  if ( !v5 )
    return;
  pkGame = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( pkGame )
  {
    if ( !AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, STA_SOULFREE) )
    {
      BYTE3(fCurTime) = v5->DemandSoul;
      v6 = GameFrameWork::GetSoulCount((GameFrameWork *)pkGame);
      if ( v6 < BYTE3(fCurTime) )
      {
        if ( BYTE3(fCurTime) )
        {
LABEL_21:
          v23 = 128.0;
          v22 = 0.0;
          v21 = 0.0;
          v9 = 255.0;
LABEL_47:
          v8 = (SkillIcon *)v2;
          goto LABEL_48;
        }
      }
    }
    std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>(&tempList);
    v28 = 0;
    LODWORD(fCurTime) = 349;
    std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(&tempList, (ABSTATEINDEX *)&fCurTime);
    LODWORD(fCurTime) = 346;
    std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(&tempList, (ABSTATEINDEX *)&fCurTime);
    v28 = -1;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&tempList);
  }
  LODWORD(fCurTime) = v5->SP;
  Skill::GetAccumulatedEmpowerInfo(&kEmpowerInfo, v4);
  if ( kEmpowerInfo.cSmallSp )
    LODWORD(v7) = LODWORD(fCurTime) - v5->nT0[kEmpowerInfo.cSmallSp + 4];
  else
    v7 = fCurTime;
  v8 = (SkillIcon *)v2;
  if ( iSP < SLODWORD(v7)
    || (SkillIcon::SetTopPlaneColor(&v2->baseclass_0, 255.0, 0.0, 0.0, 0.0),
        v10 = User::LP(&g_kUser),
        v8 = (SkillIcon *)v2,
        v10 < (signed int)v5->LP) )
  {
    v23 = 128.0;
    v22 = 0.0;
    v21 = 0.0;
    v9 = 255.0;
LABEL_48:
    v20 = v9;
    SkillIcon::SetTopPlaneColor(v8, v20, v21, v22, v23);
    return;
  }
  SkillIcon::SetTopPlaneColor(&v2->baseclass_0, 255.0, 0.0, 0.0, 0.0);
  Char::GetEquipWeaponType(g_pkMainChar);
  if ( !Inventory::IsDemandType(&g_kInventory, v5->DemandType)
    || AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, STA_REVERSEORDER)
    || AbStateInfectee::IsInList(&g_pkMainChar->baseclass_0, STA_GTIREVERSEORDER) )
    goto LABEL_21;
}

//----- (0058B5D0) --------------------------------------------------------
void __thiscall ShortCutWin::OnToggleKey(ShortCutWin *this, unsigned __int16 kOnID)
{
  ShortCutWin *v2; // ebx@1
  char *v3; // esi@1
  int v4; // edi@1
  signed int v5; // eax@1
  unsigned int v6; // ecx@2
  unsigned int v7; // eax@8
  int v8; // edx@9
  int v9; // ecx@10
  signed int v10; // edi@10
  int v11; // eax@11
  int v12; // eax@14
  int v13; // ecx@14
  unsigned int v14; // ecx@16
  int v15; // eax@21
  int v16; // ecx@24
  int v17; // eax@25
  int v18; // eax@27
  int v19; // ecx@27
  unsigned int v20; // ecx@29
  int v21; // eax@34
  SkillIcon **v22; // esi@38
  signed int v23; // edi@38
  unsigned __int16 v24; // ax@39
  ShortCutWin *v25; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = (char *)&this->m_vecToggleSkillID;
  v4 = *(_DWORD *)&this->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (signed int)((char *)this->m_vecToggleSkillID.baseclass_0._Mylast - v4) >> 1;
  v25 = this;
  if ( !v5 )
  {
    std::vector<unsigned_short_std::allocator<unsigned_short>>::push_back(&this->m_vecToggleSkillID, &kOnID);
LABEL_38:
    v2->m_bToggleOn = 1;
    v22 = (SkillIcon **)v2->m_apkIconWin;
    v23 = 18;
    do
    {
      v24 = SkillIcon::GetSkill(*v22);
      if ( v24 != -1 )
      {
        if ( v24 == kOnID )
          ShortCutIconWin::CreateToggleEffect((ShortCutIconWin *)*v22);
      }
      ++v22;
      --v23;
    }
    while ( v23 );
    return;
  }
  v6 = 0;
  if ( !v5 )
  {
LABEL_8:
    v7 = *((_DWORD *)v3 + 1);
    if ( (unsigned int)&kOnID >= v7 || (v8 = *(_DWORD *)v3, *(_DWORD *)v3 > (unsigned int)&kOnID) )
    {
      v16 = *((_DWORD *)v3 + 2);
      if ( v7 == v16 )
      {
        v17 = (signed int)(v7 - *(_DWORD *)v3) >> 1;
        if ( (unsigned int)v17 > 0x7FFFFFFE )
          std::_Xlength_error("vector<T> too long");
        v18 = v17 + 1;
        v19 = (v16 - *(_DWORD *)v3) >> 1;
        if ( v18 > (unsigned int)v19 )
        {
          if ( 2147483647 - ((unsigned int)v19 >> 1) >= v19 )
            v20 = ((unsigned int)v19 >> 1) + v19;
          else
            v20 = 0;
          if ( v20 < v18 )
            v20 = v18;
          std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(
            (std::vector<unsigned short,std::allocator<unsigned short> > *)v3,
            v20);
        }
      }
      v21 = *((_DWORD *)v3 + 1);
      if ( v21 )
        *(_WORD *)v21 = kOnID;
      *((_DWORD *)v3 + 1) += 2;
    }
    else
    {
      v9 = *((_DWORD *)v3 + 2);
      v10 = (signed int)((char *)&kOnID - v8) >> 1;
      if ( v7 == v9 )
      {
        v11 = (signed int)(v7 - v8) >> 1;
        if ( (unsigned int)v11 > 0x7FFFFFFE )
          std::_Xlength_error("vector<T> too long");
        v12 = v11 + 1;
        v13 = (v9 - v8) >> 1;
        if ( v12 > (unsigned int)v13 )
        {
          if ( 2147483647 - ((unsigned int)v13 >> 1) >= v13 )
            v14 = ((unsigned int)v13 >> 1) + v13;
          else
            v14 = 0;
          if ( v14 < v12 )
            v14 = v12;
          std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(
            (std::vector<unsigned short,std::allocator<unsigned short> > *)v3,
            v14);
          v2 = v25;
        }
      }
      v15 = *((_DWORD *)v3 + 1);
      if ( v15 )
        *(_WORD *)v15 = *(_WORD *)(*(_DWORD *)v3 + 2 * v10);
      *((_DWORD *)v3 + 1) += 2;
    }
    goto LABEL_38;
  }
  if ( (unsigned int)v5 <= 0 )
    std::_Xout_of_range("invalid vector<T> subscript");
  while ( *(_WORD *)v4 == -1 || kOnID != *(_WORD *)v4 )
  {
    ++v6;
    v4 += 2;
    if ( v5 <= v6 )
    {
      v2 = v25;
      goto LABEL_8;
    }
  }
}

//----- (0058B750) --------------------------------------------------------
bool __thiscall ShortCutIconWin::Create(ShortCutIconWin *this, int iXPos, int iYPos, unsigned int uiIndex, PgWin *pkParent)
{
  ShortCutIconWin *v5; // esi@1
  bool result; // al@1
  PgFont *v7; // eax@2
  PgWinText *v8; // eax@2

  v5 = this;
  result = SkillIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiIndex = uiIndex;
    v7 = Font::Get(0);
    v8 = PgWinText::CreateWin(
           18,
           20,
           0xEu,
           0xCu,
           v7,
           &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
    v5->m_pkLotText = v8;
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v8,
      2u);
    pkParent = (PgWin *)v5;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      &IconWin::ms_kCoolTimeIconList,
      (const unsigned int *)&pkParent);
    result = 1;
  }
  return result;
}

//----- (0058B7D0) --------------------------------------------------------
bool __thiscall ShortCutWin::OnDrop(ShortCutWin *this, DropContents *pkContents, unsigned int uiRevIndex)
{
  DropContents::SenderType v3; // eax@2
  unsigned int v4; // ebx@8
  void *v5; // edi@11
  int v6; // eax@13
  ItemUseTask *v7; // edi@15
  int v8; // eax@16
  void *v9; // eax@19
  void *v11; // eax@26
  int v12; // eax@27
  void *v13; // eax@29
  ShortCutItem *v14; // eax@31
  ShortCutItem *v15; // edi@31
  Item *v16; // ST38_4@33
  void *v17; // eax@35
  ShortCutItem *v18; // eax@36
  ShortCutItem *v19; // edi@36
  Item *v20; // ST38_4@38
  ShortCut *v21; // eax@42
  void *v22; // ecx@44
  void *v23; // eax@46
  unsigned int v24; // ecx@47
  void *v25; // eax@51
  ShortCut *v26; // eax@58
  unsigned int v27; // esi@61
  Item *v28; // ecx@62
  void *v29; // eax@64
  ShortCut *v30; // eax@70
  void *v31; // eax@72
  int v32; // eax@73
  __int16 v33; // dx@75
  TutorialMgr *v34; // eax@75
  CQuest *v35; // eax@75
  ActiveSkillInfo *v36; // ebx@75
  int v37; // ecx@75
  unsigned int v38; // edi@75
  int v39; // eax@75
  unsigned __int16 v40; // ax@77
  ActiveSkillInfo *v41; // eax@78
  int v42; // eax@80
  char v43; // cl@81
  int v44; // eax@82
  char v45; // cl@83
  ShortCut *v46; // eax@93
  void *v47; // eax@95
  PgFrameWork *v48; // ecx@102
  ShortCut *v49; // [sp-1Ch] [bp-438h]@33
  unsigned int v50; // [sp-18h] [bp-434h]@27
  bool v51; // [sp-14h] [bp-430h]@27
  unsigned int v52; // [sp-10h] [bp-42Ch]@1
  ShortCutWin *v53; // [sp+0h] [bp-41Ch]@1
  char acConversionData2[256]; // [sp+Ch] [bp-410h]@80
  char acConversionData1[256]; // [sp+10Ch] [bp-310h]@80
  char acSkillName2[256]; // [sp+20Ch] [bp-210h]@80
  char acSkillName[256]; // [sp+30Ch] [bp-110h]@80
  unsigned int v58; // [sp+40Ch] [bp-10h]@1
  int v59; // [sp+418h] [bp-4h]@26
  int v60; // [sp+41Ch] [bp+0h]@1

  v58 = (unsigned int)&v60 ^ __security_cookie;
  v52 = (unsigned int)&v60 ^ __security_cookie;
  v53 = this;
  if ( pkContents )
  {
    v3 = pkContents->m_eSenderType;
    if ( !v3 || v3 == 1 || v3 == 2 || v3 == 4 || v3 == 9 || v3 == 21 )
    {
      v4 = pkContents->m_uiSenderIndex;
      switch ( pkContents->m_eType )
      {
        case 0:
          if ( pkContents->m_apvParam[1] == (void *)1 )
            return 0;
          if ( !v3 )
          {
            v5 = pkContents->m_apvParam[0];
            if ( !v5 )
              return 0;
            if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v5 + 4))(pkContents->m_apvParam[0]) == 27 )
            {
              v6 = *((_DWORD *)v5 + 28);
              if ( !v6 )
                return 0;
              if ( *(_DWORD *)(v6 + 98) == 1 )
              {
                v7 = ISingletonTask<ItemUseTask>::Run();
                ItemUseTask::SetInventoryIndex(v7, v4);
                if ( v53 )
                  v8 = (int)&v53->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
                else
                  v8 = 0;
                v7->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker(
                  &v7->baseclass_0.baseclass_0.baseclass_8,
                  v8);
                if ( !v53->m_pkDropcontents )
                {
                  v9 = operator new(0x48u);
                  if ( v9 )
                  {
                    *(_DWORD *)v9 = &DropContents::_vftable_;
                    *((_DWORD *)v9 + 15) = 65535;
                  }
                  else
                  {
                    v9 = 0;
                  }
                  v53->m_pkDropcontents = (DropContents *)v9;
                }
                v53->m_pkDropcontents = pkContents;
                v53->m_uiRevIndex = uiRevIndex;
                return 0;
              }
            }
            if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v5 + 4))(v5) != 24 )
            {
              v13 = operator new(0x10u);
              v59 = 1;
              goto LABEL_30;
            }
            v11 = operator new(0xCu);
            v59 = 0;
            if ( v11 )
            {
              ShortCutInvPosItem::ShortCutInvPosItem((ShortCutInvPosItem *)v11);
              v51 = 1;
              *(_DWORD *)(v12 + 8) = v4;
              v50 = uiRevIndex;
            }
            else
            {
              v12 = 0;
              v51 = 1;
              ::v8 = v4;
              v50 = uiRevIndex;
            }
            goto LABEL_100;
          }
          if ( v3 == 1 )
          {
            v17 = operator new(0x10u);
            v59 = 2;
            if ( v17 )
            {
              ShortCutItem::ShortCutItem((ShortCutItem *)v17);
              v19 = v18;
            }
            else
            {
              v19 = 0;
            }
            v20 = (Item *)pkContents->m_apvParam[0];
            v59 = -1;
            ShortCutItem::SetItem(v19, v20);
            v51 = 1;
            v50 = uiRevIndex;
            v49 = (ShortCut *)v19;
            goto LABEL_101;
          }
          if ( v3 == 2 )
            return 0;
          if ( v3 != 4 )
          {
            if ( v3 != 21 )
              goto LABEL_102;
            v25 = operator new(0x14u);
            v59 = 5;
            if ( v25 )
              ShortCutAction::ShortCutAction((ShortCutAction *)v12);
            else
              v12 = 0;
            *(_DWORD *)(v12 + 16) = pkContents->m_apvParam[2];
            *(_DWORD *)(v12 + 12) = 0;
            v51 = 1;
            *(_DWORD *)(v12 + 8) = pkContents->nTableIndexNum;
            v50 = uiRevIndex;
            goto LABEL_100;
          }
          if ( uiRevIndex < 0x64 )
          {
            v21 = (ShortCut *)*(&unk_A9E21C + uiRevIndex);
            if ( v21 )
              ShortCutMgr::SetShortCut(&g_kShortCutMgr, v21, v4, 1);
          }
          v22 = pkContents->m_apvParam[0];
          if ( !v22 )
            return 0;
          if ( (unsigned __int8)(*(int (__cdecl **)(unsigned int))(*(_DWORD *)v22 + 4))(v52) != 24 )
          {
            v13 = operator new(0x10u);
            v59 = 4;
            goto LABEL_30;
          }
          v23 = operator new(0xCu);
          v59 = 3;
          if ( v23 )
          {
            ShortCutInvPosItem::ShortCutInvPosItem((ShortCutInvPosItem *)v12);
            v24 = pkContents->ui_InvIndex;
            v51 = 1;
            v50 = v4;
          }
          else
          {
            v24 = pkContents->ui_InvIndex;
            v51 = 1;
            v12 = 0;
            v50 = v4;
          }
          goto LABEL_99;
        case 6:
          if ( pkContents->m_apvParam[1] == (void *)1 || v3 != 4 )
            return 0;
          if ( uiRevIndex < 0x64 )
          {
            v26 = (ShortCut *)*(&unk_A9E21C + uiRevIndex);
            if ( v26 )
              ShortCutMgr::SetShortCut(&g_kShortCutMgr, v26, v4, 1);
          }
          if ( (unsigned __int8)(*(int (__cdecl **)(unsigned int))(*(_DWORD *)pkContents->m_apvParam[0] + 4))(v52) != 24 )
          {
            v13 = operator new(0x10u);
            v59 = 7;
LABEL_30:
            if ( v13 )
            {
              ShortCutItem::ShortCutItem((ShortCutItem *)v13);
              v15 = v14;
            }
            else
            {
              v15 = 0;
            }
            v16 = (Item *)pkContents->m_apvParam[0];
            v59 = -1;
            ShortCutItem::SetItem(v15, v16);
            v51 = 1;
            v50 = uiRevIndex;
            v49 = (ShortCut *)v15;
LABEL_101:
            ShortCutMgr::SetShortCut(&g_kShortCutMgr, v49, v50, v51);
            goto LABEL_102;
          }
          v27 = pkContents->ui_InvIndex;
          if ( v27 < 0xC0 )
          {
            v28 = g_kInventory.m_aspInv[v27].m_pObject;
            if ( v28 )
            {
              if ( (unsigned __int8)((int (*)(void))v28->baseclass_0.vfptr[1].__vecDelDtor)() == 24 )
              {
                v29 = operator new(0xCu);
                v59 = 6;
                if ( v29 )
                {
                  ShortCutInvPosItem::ShortCutInvPosItem((ShortCutInvPosItem *)v12);
                  v51 = 1;
                  *(_DWORD *)(v12 + 8) = v27;
                  v50 = uiRevIndex;
                }
                else
                {
                  v12 = 0;
                  v51 = 1;
                  ::v8 = v27;
                  v50 = uiRevIndex;
                }
LABEL_100:
                v59 = -1;
                v49 = (ShortCut *)v12;
                goto LABEL_101;
              }
            }
          }
          break;
        case 1:
          if ( v3 == 4 )
          {
            if ( uiRevIndex < 0x64 )
            {
              v30 = (ShortCut *)*(&unk_A9E21C + uiRevIndex);
              if ( v30 )
                ShortCutMgr::SetShortCut(&g_kShortCutMgr, v30, v4, 1);
            }
          }
          v31 = operator new(0xCu);
          v59 = 8;
          if ( v31 )
            ShortCutSkill::ShortCutSkill((ShortCutSkill *)v31);
          else
            v32 = 0;
          v33 = LOWORD(pkContents->m_apvParam[0]);
          v59 = -1;
          *(_WORD *)(v32 + 8) = v33;
          ShortCutMgr::SetShortCut(&g_kShortCutMgr, (ShortCut *)v32, uiRevIndex, 1);
          v34 = TutorialMgr::GetTutorialMgr();
          TutorialMgr::OnShortCutSkill(v34);
          Singleton<Tutorial>::getInstance()->m_bRegistSkill = 1;
          v35 = QuestDataMgr::GetQuest();
          CQuest::Send_NC_QUEST_CLIENT_SCENARIO_DONE_REQ(v35, 9u);
          v36 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(
                  (unsigned __int16)pkContents->m_apvParam[0],
                  1);
          v37 = *(_DWORD *)&v53->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
          v38 = 0;
          v39 = (signed int)((char *)v53->m_vecToggleSkillID.baseclass_0._Mylast - v37) >> 1;
          if ( !v39 )
            goto LABEL_102;
          if ( (unsigned int)v39 <= 0 )
            std::_Xout_of_range("invalid vector<T> subscript");
          while ( 1 )
          {
            v40 = *(_WORD *)(v37 + 2 * v38);
            if ( v40 != -1 )
            {
              v41 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v40, 1);
              if ( v36 )
              {
                if ( v41 )
                {
                  acSkillName[0] = 0;
                  memset(&acSkillName[1], 0, 0xFFu);
                  acConversionData1[0] = 0;
                  memset(&acConversionData1[1], 0, 0xFFu);
                  acSkillName2[0] = 0;
                  memset(&acSkillName2[1], 0, 0xFFu);
                  acConversionData2[0] = 0;
                  memset(&acConversionData2[1], 0, 0xFFu);
                  sprintf(acSkillName, "%s");
                  v42 = (int)acSkillName;
                  do
                    v43 = *(_BYTE *)v42++;
                  while ( v43 );
                  strncpy(acConversionData1, acSkillName, v42 - (_DWORD)&acSkillName[1] - 2);
                  sprintf(acSkillName2, "%s");
                  v44 = (int)acSkillName2;
                  do
                    v45 = *(_BYTE *)v44++;
                  while ( v45 );
                  strncpy(acConversionData2, acSkillName2, v44 - (_DWORD)&acSkillName2[1] - 2);
                  if ( !strcmp(acConversionData1, acConversionData2) )
                    break;
                }
              }
            }
            v37 = *(_DWORD *)&v53->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
            ++v38;
            if ( (signed int)((char *)v53->m_vecToggleSkillID.baseclass_0._Mylast - v37) >> 1 <= v38 )
              goto LABEL_102;
          }
          if ( uiRevIndex <= 0x12 )
            ShortCutIconWin::CreateToggleEffect(v53->m_apkIconWin[uiRevIndex]);
          else
            ShortCutIconWin::CreateToggleEffect(*((ShortCutIconWin **)&v53->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText
                                                + uiRevIndex));
LABEL_102:
          v48 = v53->baseclass_0.m_pkFrameWork;
          if ( v48 )
            PgFrameWork::AddMsg(v48, 0x8Bu, 0, 0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_CLICK);
          return 1;
        case 3:
          if ( v3 == 4 )
          {
            if ( uiRevIndex < 0x64 )
            {
              v46 = (ShortCut *)*(&unk_A9E21C + uiRevIndex);
              if ( v46 )
                ShortCutMgr::SetShortCut(&g_kShortCutMgr, v46, v4, 1);
            }
          }
          v47 = operator new(0x14u);
          v59 = 9;
          if ( v47 )
            ShortCutAction::ShortCutAction((ShortCutAction *)v12);
          else
            v12 = 0;
          *(_DWORD *)(v12 + 16) = pkContents->m_apvParam[0];
          *(_DWORD *)(v12 + 12) = pkContents->m_uiSenderIndex;
          v24 = pkContents->nTableIndexNum;
          v51 = 1;
          v50 = uiRevIndex;
LABEL_99:
          *(_DWORD *)(v12 + 8) = v24;
          goto LABEL_100;
        default:
          goto LABEL_102;
      }
    }
  }
  return 0;
}
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0058BF30) --------------------------------------------------------
void __thiscall ShortCutIconWin::SetItemIcon(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  ShortCut *v2; // ecx@1
  int v3; // eax@3
  ShortCut *v4; // eax@4
  unsigned int v5; // ebx@5
  ItemViewInfo *v6; // eax@6
  NiRefObjectVtbl *v7; // edi@7
  unsigned int v8; // ST08_4@7
  NiSourceTexture *v9; // eax@7
  Item *v10; // edi@7
  PgWinText *v11; // eax@9
  NiRefObjectVtbl *v12; // ST24_4@10
  char *v13; // eax@10
  PgWinText *v14; // ecx@11
  unsigned __int16 *v15; // eax@14
  ActionEffectItem *v16; // eax@16
  unsigned __int16 *v17; // eax@17
  PgWinText *v18; // ecx@19
  ShortCut *v19; // eax@23
  unsigned int v20; // eax@24
  Item *v21; // edi@25
  PgWinText *v22; // ecx@26
  unsigned __int16 v23; // bx@28
  PgWinText *v24; // ecx@30
  ItemViewInfo *v25; // eax@32
  NiRefObjectVtbl *v26; // ebx@33
  unsigned int v27; // ST08_4@33
  NiSourceTexture *v28; // eax@33
  PgWinText *v29; // eax@34
  NiRefObjectVtbl *v30; // ebx@35
  char *v31; // eax@35
  PgWinText *v32; // ecx@36
  unsigned __int16 *v33; // eax@39
  PgWinText *v34; // ecx@41
  float v35; // [sp+4h] [bp-50h]@29
  float v36; // [sp+8h] [bp-4Ch]@29
  float v37; // [sp+Ch] [bp-48h]@29
  unsigned int v38; // [sp+10h] [bp-44h]@1
  float v39; // [sp+10h] [bp-44h]@29
  int v40; // [sp+14h] [bp-40h]@0
  signed int v41; // [sp+14h] [bp-40h]@10
  signed int v42; // [sp+14h] [bp-40h]@35
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strUseSkillName; // [sp+28h] [bp-2Ch]@16
  unsigned int v44; // [sp+44h] [bp-10h]@1
  int v45; // [sp+50h] [bp-4h]@16
  int v46; // [sp+54h] [bp+0h]@1

  v44 = (unsigned int)&v46 ^ __security_cookie;
  v38 = (unsigned int)&v46 ^ __security_cookie;
  v1 = this;
  this->m_bDisplayLotText = 1;
  IconWin::SetCoolTimeID(&this->baseclass_0.baseclass_0, 0xFFFFu);
  IconWin::SetCoolTimeIDByItemAction(&v1->baseclass_0.baseclass_0, 0xFFFFu);
  v2 = v1->m_spShortCut.m_pObject;
  if ( !v2 )
  {
    ((void (__thiscall *)(ShortCutIconWin *, _DWORD, signed int, signed int, signed int, unsigned int))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v1,
      0,
      -1,
      32,
      32,
      v38);
    return;
  }
  v3 = ((int (__stdcall *)(unsigned int))v2->baseclass_0.vfptr[1].__vecDelDtor)(v38);
  if ( v3 != 4 )
  {
    if ( v3 != 5 || v1->m_bLock )
      goto LABEL_43;
    v19 = v1->m_spShortCut.m_pObject;
    if ( !v19 )
    {
      ShortCutIconWin::SetShortCut(v1, 0);
      v34 = v1->m_pkLotText;
      if ( v34 )
      {
        ((void (__stdcall *)(_UNKNOWN *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AB0E7);
        ((void (__stdcall *)(_DWORD))v1->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
      goto LABEL_43;
    }
    v20 = (unsigned int)v19[1].baseclass_0.vfptr;
    if ( v20 >= 0xC0 || (v21 = g_kInventory.m_aspInv[v20].m_pObject) == 0 )
    {
      SkillIcon::SetBackPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
      SkillIcon::SetTopPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
      ShortCutMgr::InitShortCutFromInventory(&g_kShortCutMgr);
      ShortCutIconWin::SetShortCut(v1, 0);
      v22 = v1->m_pkLotText;
      if ( v22 )
      {
        ((void (__stdcall *)(_UNKNOWN *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AB0E3);
        v1->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v1->m_pkLotText,
          0);
      }
      return;
    }
    v23 = v21->m_kStruct.itemid;
    if ( v23 == -1 )
      return;
    v39 = 0.0;
    v37 = 0.0;
    v36 = 0.0;
    v35 = 0.0;
    if ( (unsigned __int8)((int (__thiscall *)(Item *))v21->baseclass_0.vfptr[1].__vecDelDtor)(v21) != 24 )
    {
      SkillIcon::SetBackPlaneColor(&v1->baseclass_0, v35, v36, v37, v39);
      SkillIcon::SetTopPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
      ShortCutMgr::InitShortCutFromInventory(&g_kShortCutMgr);
      ShortCutIconWin::SetShortCut(v1, 0);
      v24 = v1->m_pkLotText;
      if ( v24 )
      {
        ((void (__stdcall *)(_UNKNOWN *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AB0E4);
        v1->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v1->m_pkLotText,
          0);
      }
      return;
    }
    SkillIcon::SetBackPlaneColor(&v1->baseclass_0, v35, v36, v37, v39);
    SkillIcon::SetTopPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
    v25 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v23, 1);
    if ( !v25 )
      return;
    v26 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v27 = v25->IconIndex;
    v28 = IconMgr::GetTexture(v25->IconFile);
    ((void (__thiscall *)(ShortCutIconWin *, NiSourceTexture *, unsigned int, signed int, signed int))v26[146].__vecDelDtor)(
      v1,
      v28,
      v27,
      32,
      32);
    ((void (__thiscall *)(Item *))v21->baseclass_0.vfptr[3].__vecDelDtor)(v21);
    if ( (unsigned int)((int (__thiscall *)(Item *))v21->baseclass_0.vfptr[4].__vecDelDtor)(v21) <= 1 )
    {
      v32 = v1->m_pkLotText;
      if ( !v32 )
        goto LABEL_39;
      ((void (__stdcall *)(_UNKNOWN *, int))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
        &unk_9AB0E5,
        v40);
      v42 = 0;
    }
    else
    {
      v29 = v1->m_pkLotText;
      if ( !v29 )
        goto LABEL_39;
      v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v31 = fs("%d");
      v30[118].__vecDelDtor((NiRefObject *)v1->m_pkLotText, (unsigned int)v31);
      v42 = 1;
    }
    ((void (__cdecl *)(signed int))v1->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v42);
LABEL_39:
    v33 = (unsigned __int16 *)ActSkillInfoTab::GetByInxName(v21->m_pkInfo->ItemUseSkill);
    if ( v33 )
      IconWin::SetCoolTimeID(&v1->baseclass_0.baseclass_0, *v33);
    goto LABEL_43;
  }
  v4 = v1->m_spShortCut.m_pObject;
  if ( !v4 )
  {
LABEL_43:
    SkillIcon::ShowSkillPowerBar(&v1->baseclass_0, 0);
    return;
  }
  v5 = LOWORD(v4[1].baseclass_0.m_uiRefCount);
  if ( (_WORD)v5 != -1 )
  {
    SkillIcon::SetBackPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
    SkillIcon::SetTopPlaneColor(&v1->baseclass_0, 0.0, 0.0, 0.0, 0.0);
    v6 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v5, 1);
    if ( v6 )
    {
      v7 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = v6->IconIndex;
      v9 = IconMgr::GetTexture(v6->IconFile);
      ((void (__thiscall *)(ShortCutIconWin *, NiSourceTexture *, unsigned int, signed int, signed int))v7[146].__vecDelDtor)(
        v1,
        v9,
        v8,
        32,
        32);
      v10 = Inventory::GetItemByID(&g_kInventory, v5);
      Inventory::GetItemLot(&g_kInventory, v5);
      if ( !v10 )
      {
        v18 = v1->m_pkLotText;
        if ( v18 )
        {
          ((void (__stdcall *)(_UNKNOWN *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AB0E2);
          ((void (__stdcall *)(_DWORD))v1->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        }
        goto LABEL_43;
      }
      if ( (unsigned int)((int (__thiscall *)(Item *))v10->baseclass_0.vfptr[4].__vecDelDtor)(v10) <= 1 )
      {
        v14 = v1->m_pkLotText;
        if ( !v14 )
          goto LABEL_14;
        ((void (__stdcall *)(_UNKNOWN *, int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
          &unk_9AB0DF,
          v40);
        v41 = 0;
      }
      else
      {
        v11 = v1->m_pkLotText;
        if ( !v11 )
          goto LABEL_14;
        v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v13 = fs("%d");
        v12[118].__vecDelDtor((NiRefObject *)v1->m_pkLotText, (unsigned int)v13);
        v41 = 1;
      }
      ((void (__cdecl *)(signed int))v1->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v41);
LABEL_14:
      v15 = (unsigned __int16 *)ActSkillInfoTab::GetByInxName(v10->m_pkInfo->ItemUseSkill);
      if ( v15 )
      {
        IconWin::SetCoolTimeID(&v1->baseclass_0.baseclass_0, *v15);
      }
      else
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &strUseSkillName,
          v10->m_pkInfo->ItemUseSkill);
        v45 = 0;
        std::operator__<char_std::char_traits<char>_std::allocator<char>>(&strUseSkillName, "-");
        v16 = ActionEffectItemTab::GetByItemID(v5);
        if ( v16 )
        {
          v17 = (unsigned __int16 *)ItemActionTab::GetByItemActionID(v16->ItemActionID);
          IconWin::SetCoolTimeIDByItemAction(&v1->baseclass_0.baseclass_0, *v17);
        }
        v45 = -1;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strUseSkillName);
      }
      goto LABEL_43;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0058C420) --------------------------------------------------------
bool __thiscall ShortCutIconWin::EatDropReference(ShortCutIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  ShortCutIconWin *v4; // esi@1
  bool result; // al@2
  void *v6; // edi@4
  PgWin *v7; // eax@4

  v4 = this;
  if ( this->m_bProtected || !*pkDrop )
  {
    result = 0;
  }
  else
  {
    v6 = (*pkDrop)->m_pkContents;
    v7 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v7 )
      result = ShortCutWin::OnDrop(
                 (ShortCutWin *)v7,
                 (DropContents *)v6,
                 v4->m_uiIndex + 18 * LODWORD(v7[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][2]));
    else
      result = 0;
  }
  return result;
}

//----- (0058C480) --------------------------------------------------------
void __thiscall ShortCutIconWin::SetIcon(ShortCutIconWin *this)
{
  ShortCutIconWin *v1; // esi@1
  ShortCut *v2; // ecx@1

  v1 = this;
  v2 = this->m_spShortCut.m_pObject;
  if ( v2 )
  {
    switch ( ((int (*)(void))v2->baseclass_0.vfptr[1].__vecDelDtor)() )
    {
      case 0:
      case 4:
      case 5:
        ShortCutIconWin::SetItemIcon(v1);
        SkillIcon::UsingItemAlphaProperty(&v1->baseclass_0);
        break;
      case 1:
        ShortCutIconWin::SetSkillIcon(v1);
        SkillIcon::UsingSkillAlphaProperty(&v1->baseclass_0);
        break;
      case 2:
        ShortCutIconWin::SetActionIcon(v1);
        SkillIcon::UsingItemAlphaProperty(&v1->baseclass_0);
        break;
      case 3:
        ShortCutIconWin::SetSkillIcon(v1);
        break;
      default:
        break;
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      1u);
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v1,
      1u);
  }
  else
  {
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[150].__vecDelDtor(
      (NiRefObject *)v1,
      0);
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      0);
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v1,
      0);
  }
}

//----- (0058C540) --------------------------------------------------------
void __thiscall ShortCutIconWin::SetShortCut(ShortCutIconWin *this, ShortCut *pkShortCut)
{
  ShortCutIconWin *v2; // edi@1
  ShortCut *v3; // esi@1
  ShortCut *v4; // ecx@8
  ShortCut *v5; // edi@10
  ActionViewInfo *v6; // eax@11
  ActionViewInfo *v7; // ebx@11
  int v8; // esi@13
  bool v9; // cf@13
  Item *v10; // eax@15
  ItemInfo *v11; // eax@16

  v2 = this;
  v3 = this->m_spShortCut.m_pObject;
  if ( v3 != pkShortCut )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spShortCut.m_pObject = pkShortCut;
    if ( pkShortCut )
      InterlockedIncrement((volatile LONG *)&pkShortCut->baseclass_0.m_uiRefCount);
  }
  ShortCutIconWin::SetIcon(v2);
  v4 = v2->m_spShortCut.m_pObject;
  if ( v4 )
  {
    if ( ((int (*)(void))v4->baseclass_0.vfptr[1].__vecDelDtor)() == 2 )
    {
      v5 = v2->m_spShortCut.m_pObject;
      if ( v5 )
      {
        v6 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(
               (unsigned __int16)v5[1].baseclass_0.vfptr,
               1);
        v7 = v6;
        if ( v6 )
        {
          if ( v6->eActionType == 2 )
          {
            v8 = 0;
            v9 = 1;
            do
            {
              if ( v9 )
              {
                v10 = g_kInventory.m_aspPremiumActionInv[v8].m_pObject;
                if ( v10 )
                {
                  v11 = v10->m_pkInfo;
                  if ( !v11 )
                    return;
                  if ( !strcmp(v11->InxName, v7->InxName) )
                    ShortCutMgr::SyncShortCutAndActionWinKey(&g_kShortCutMgr, (int)v5[1].baseclass_0.vfptr, v8);
                }
              }
              ++v8;
              v9 = (unsigned int)v8 < 0x2A;
            }
            while ( v8 < 42 );
          }
        }
      }
    }
  }
}

//----- (0058C640) --------------------------------------------------------
void __thiscall ShortCutWin::ReflashShortCutWin(ShortCutWin *this)
{
  ShortCutWin *v1; // edi@1
  int v2; // esi@1
  SkillIcon **v3; // ebx@1
  int v4; // eax@4
  ShortCut *v5; // eax@5
  int v6; // eax@7
  int v7; // esi@8
  unsigned __int16 v8; // ax@14
  ActiveSkillInfo *v9; // eax@14
  int v10; // ecx@14
  unsigned int v11; // ebx@14
  int v12; // eax@14
  unsigned __int16 v13; // ax@16
  ActiveSkillInfo *v14; // eax@17
  int v15; // eax@19
  char v16; // cl@20
  int v17; // eax@21
  char v18; // cl@22
  ActionViewInfo *v19; // eax@27
  ActionType v20; // eax@28
  int v21; // eax@29
  int v22; // esi@40
  int v23; // ebx@41
  PgWinButExt *v24; // ecx@41
  int v25; // ST54_4@42
  int v26; // eax@42
  int v27; // ecx@42
  int v28; // ebx@60
  int v29; // eax@60
  int v30; // ebx@60
  int v31; // ebx@63
  int v32; // eax@63
  int v33; // ebx@63
  int v34; // ebx@63
  int v35; // eax@63
  void (__stdcall *v36)(_DWORD); // edx@63
  int v37; // ST54_4@66
  int v38; // eax@66
  int v39; // ecx@66
  int v40; // ebx@73
  int v41; // eax@73
  int v42; // ebx@73
  int v43; // eax@73
  void (__stdcall *v44)(_DWORD); // edx@73
  int v45; // ebx@79
  int v46; // eax@79
  int v47; // ebx@79
  int v48; // ebx@79
  int v49; // eax@79
  void (__stdcall *v50)(_DWORD); // edx@79
  PgWinButExt *v51; // eax@87
  NiRefObjectVtbl *v52; // esi@88
  int v53; // ST54_4@88
  PgWinButExt *v54; // ebx@88
  int v55; // eax@88
  int v56; // eax@88
  PgWinButExt *v57; // eax@89
  NiRefObjectVtbl *v58; // esi@90
  int v59; // ST54_4@90
  PgWinButExt *v60; // ebx@90
  int v61; // eax@90
  int v62; // eax@90
  PgWinButExt *v63; // ecx@92
  NiRefObjectVtbl *v64; // esi@92
  PgWinButExt *v65; // ebx@92
  int v66; // ST54_4@92
  int v67; // eax@92
  int v68; // eax@92
  PgWinButExt *v69; // ecx@94
  PgWinButExt *v70; // ebx@94
  int v71; // ST54_4@94
  int v72; // eax@94
  float v73; // ST54_4@96
  signed int v74; // [sp+34h] [bp-424h]@10
  int v75; // [sp+34h] [bp-424h]@61
  SkillIcon **v76; // [sp+44h] [bp-414h]@1
  int i; // [sp+48h] [bp-410h]@1
  unsigned int ia; // [sp+48h] [bp-410h]@40
  char bCheckedIndex; // [sp+4Fh] [bp-409h]@40
  ActiveSkillInfo *pkContentsIsToggle; // [sp+50h] [bp-408h]@14
  char acConversionData2[256]; // [sp+54h] [bp-404h]@19
  char acConversionData1[256]; // [sp+154h] [bp-304h]@19
  char acSkillName2[256]; // [sp+254h] [bp-204h]@19
  char acSkillName[256]; // [sp+354h] [bp-104h]@19
  unsigned int v85; // [sp+454h] [bp-4h]@1
  int v86; // [sp+458h] [bp+0h]@1

  v85 = (unsigned int)&v86 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  v3 = (SkillIcon **)this->m_apkIconWin;
  i = 0;
  v76 = (SkillIcon **)this->m_apkIconWin;
  do
  {
    if ( *v3 )
      SkillIcon::SetEmpowerInfo(*v3, 0);
    v4 = v2 + 18 * v1->m_uiCurPage;
    if ( (unsigned int)v4 < 0x64 )
      v5 = (ShortCut *)*(&unk_A9E21C + v4);
    else
      v5 = 0;
    ShortCutIconWin::SetShortCut((ShortCutIconWin *)*v3, v5);
    v6 = v2 + 18 * v1->m_uiCurPage;
    if ( (unsigned int)v6 < 0x64 && (v7 = (int)*(&unk_A9E21C + v6)) != 0 )
    {
      switch ( (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7) )
      {
        case 0:
        case 4:
          v74 = 9;
          break;
        case 5:
          v74 = 10;
          break;
        case 1:
          ((void (__stdcall *)(signed int))(*v3)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(4);
          if ( v1->m_bToggleOn )
          {
            if ( v1->m_bShowFlag )
            {
              v8 = SkillIcon::GetSkill(*v76);
              v9 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v8, 1);
              v10 = *(_DWORD *)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
              pkContentsIsToggle = v9;
              v11 = 0;
              v12 = (signed int)((char *)v1->m_vecToggleSkillID.baseclass_0._Mylast - v10) >> 1;
              if ( v12 )
              {
                if ( (unsigned int)v12 <= 0 )
                  std::_Xout_of_range("invalid vector<T> subscript");
                do
                {
                  v13 = *(_WORD *)(v10 + 2 * v11);
                  if ( v13 != -1 )
                  {
                    v14 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v13, 1);
                    if ( pkContentsIsToggle )
                    {
                      if ( v14 )
                      {
                        acSkillName[0] = 0;
                        memset(&acSkillName[1], 0, 0xFFu);
                        acConversionData1[0] = 0;
                        memset(&acConversionData1[1], 0, 0xFFu);
                        acSkillName2[0] = 0;
                        memset(&acSkillName2[1], 0, 0xFFu);
                        acConversionData2[0] = 0;
                        memset(&acConversionData2[1], 0, 0xFFu);
                        sprintf(acSkillName, "%s");
                        v15 = (int)acSkillName;
                        do
                          v16 = *(_BYTE *)v15++;
                        while ( v16 );
                        strncpy(acConversionData1, acSkillName, v15 - (_DWORD)&acSkillName[1] - 2);
                        sprintf(acSkillName2, "%s");
                        v17 = (int)acSkillName2;
                        do
                          v18 = *(_BYTE *)v17++;
                        while ( v18 );
                        strncpy(acConversionData2, acSkillName2, v17 - (_DWORD)&acSkillName2[1] - 2);
                        if ( !strcmp(acConversionData1, acConversionData2) )
                          ShortCutIconWin::CreateToggleEffect((ShortCutIconWin *)*v76);
                      }
                    }
                  }
                  v10 = *(_DWORD *)&v1->m_vecToggleSkillID.baseclass_0.___u0.baseclass_0.dummy[0];
                  ++v11;
                }
                while ( (signed int)((char *)v1->m_vecToggleSkillID.baseclass_0._Mylast - v10) >> 1 > v11 );
              }
            }
          }
          goto LABEL_36;
        case 2:
          v19 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(*(_DWORD *)(v7 + 8), 1);
          if ( !v19 )
            goto LABEL_36;
          v20 = v19->eActionType;
          if ( v20 )
          {
            v21 = v20 - 1;
            if ( v21 )
            {
              if ( v21 != 1 )
                goto LABEL_36;
              v74 = 11;
            }
            else
            {
              v74 = 8;
            }
          }
          else
          {
            v74 = 7;
          }
          break;
        default:
          goto LABEL_36;
      }
    }
    else
    {
      v74 = 4;
    }
    ((void (__stdcall *)(signed int))(*v3)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(v74);
LABEL_36:
    v2 = i + 1;
    v3 = v76 + 1;
    i = v2;
    ++v76;
  }
  while ( (unsigned int)v2 < 0x12 );
  if ( v1->m_pkSizeBtn )
  {
    if ( v1->m_bShowFlag )
      byte_B5BB59[3 * v1->m_uiShortCutStatusIndex] = LOBYTE(v1->m_uiCurPage);
    bCheckedIndex = 0;
    ia = 0;
    v22 = (int)v1->m_apkIconWin;
    do
    {
      v23 = *(_DWORD *)(v22 + 352);
      v24 = v1->m_pkSizeBtn;
      if ( v1->m_bVerticalMode )
      {
        v25 = ((int (*)(void))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)()
            - 3;
        v26 = (*(int (__thiscall **)(int))(*(_DWORD *)v23 + 168))(v23);
        v27 = *(_DWORD *)(v22 + 352);
        if ( v26 <= v25 )
        {
          (*(void (__stdcall **)(signed int))(*(_DWORD *)v27 + 256))(1);
          if ( *(_DWORD *)(v22 + 652) && v1->m_bShowHotkey[ia] )
            (*(void (__stdcall **)(signed int))(**(_DWORD **)(v22 + 652) + 256))(1);
          if ( *(_DWORD *)(v22 + 568) && v1->m_bShowHotkey[ia] )
            (*(void (__stdcall **)(signed int))(**(_DWORD **)(v22 + 568) + 256))(1);
          *(_BYTE *)(*(_DWORD *)v22 + 420) = 0;
          if ( *(_DWORD *)(*(_DWORD *)v22 + 412) )
          {
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1);
            *(_WORD *)(*(_DWORD *)v22 + 28) &= 0xFFFEu;
            IconWin::ShowFocus(*(IconWin **)v22, 1);
            *(_BYTE *)(*(_DWORD *)(v22 + 72) + 304) = 1;
          }
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 240))(1);
        }
        else
        {
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v27 + 256))(0);
          if ( *(_DWORD *)(v22 + 652) )
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 + 652) + 256))(0);
          if ( *(_DWORD *)(v22 + 568) )
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 + 568) + 256))(0);
          *(_BYTE *)(*(_DWORD *)v22 + 420) = 1;
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 256))(0);
          IconWin::ShowFocus(*(IconWin **)v22, 0);
          *(_BYTE *)(*(_DWORD *)(v22 + 72) + 304) = 0;
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0);
          if ( !bCheckedIndex )
          {
            bCheckedIndex = 1;
            if ( v1->m_bShowFlag )
              byte_B5BB58[3 * v1->m_uiShortCutStatusIndex] = ia;
          }
        }
        v28 = *(_DWORD *)(v22 + 496);
        v29 = (*(int (**)(void))(**(_DWORD **)(v22 + 352) + 168))();
        v30 = (*(int (__thiscall **)(int))(*(_DWORD *)v28 + 148))(v28) + v29;
        v75 = v30 <= ((int (*)(void))v1->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        (*(void (__stdcall **)(int))(**(_DWORD **)(v22 + 424) + 256))(v75);
        v31 = *(_DWORD *)(v22 + 496);
        v32 = (*(int (**)(void))(**(_DWORD **)(v22 + 424) + 148))();
        v33 = (*(int (__thiscall **)(int))(*(_DWORD *)v31 + 148))(v31) + v32;
        v34 = (*(int (**)(void))(**(_DWORD **)(v22 + 352) + 168))() + v33;
        v35 = ((int (*)(void))v1->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        v36 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 + 496) + 256);
        if ( v34 <= v35 )
          v36(1);
        else
          v36(0);
      }
      else
      {
        v37 = ((int (*)(void))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)()
            - 3;
        v38 = (*(int (__thiscall **)(int))(*(_DWORD *)v23 + 164))(v23);
        v39 = *(_DWORD *)(v22 + 352);
        if ( v38 <= v37 )
        {
          (*(void (__stdcall **)(signed int))(*(_DWORD *)v39 + 256))(1);
          *(_BYTE *)(*(_DWORD *)v22 + 420) = 0;
          *(_WORD *)(*(_DWORD *)v22 + 28) &= 0xFFFEu;
          if ( *(_DWORD *)(*(_DWORD *)v22 + 412) )
          {
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1);
            IconWin::ShowFocus(*(IconWin **)v22, 1);
            *(_BYTE *)(*(_DWORD *)(v22 + 72) + 304) = 1;
          }
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 240))(1);
        }
        else
        {
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v39 + 256))(0);
          *(_BYTE *)(*(_DWORD *)v22 + 420) = 1;
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 256))(0);
          IconWin::ShowFocus(*(IconWin **)v22, 0);
          *(_BYTE *)(*(_DWORD *)(v22 + 72) + 304) = 0;
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0);
          if ( !bCheckedIndex )
          {
            bCheckedIndex = 1;
            if ( v1->m_bShowFlag )
              byte_B5BB58[3 * v1->m_uiShortCutStatusIndex] = ia;
          }
        }
        v40 = *(_DWORD *)(v22 + 352);
        v41 = (*(int (**)(void))(**(_DWORD **)(v22 + 496) + 144))();
        v42 = (*(int (__thiscall **)(int))(*(_DWORD *)v40 + 164))(v40) + v41;
        v43 = ((int (*)(void))v1->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
        v44 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 + 424) + 256);
        if ( v42 <= v43 - 3 )
        {
          v44(1);
          if ( *(_DWORD *)(v22 + 652) && v1->m_bShowHotkey[ia] )
            (*(void (__stdcall **)(signed int))(**(_DWORD **)(v22 + 652) + 256))(1);
        }
        else
        {
          v44(0);
          if ( *(_DWORD *)(v22 + 652) )
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 + 652) + 256))(0);
        }
        v45 = *(_DWORD *)(v22 + 424);
        v46 = (*(int (**)(void))(**(_DWORD **)(v22 + 496) + 144))();
        v47 = (*(int (__thiscall **)(int))(*(_DWORD *)v45 + 144))(v45) + v46;
        v48 = (*(int (**)(void))(**(_DWORD **)(v22 + 352) + 164))() + v47;
        v49 = ((int (*)(void))v1->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
        v50 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 + 496) + 256);
        if ( v48 <= v49 - 3 )
        {
          v50(1);
          if ( *(_DWORD *)(v22 + 568) && v1->m_bShowHotkey[ia] )
            (*(void (__stdcall **)(signed int))(**(_DWORD **)(v22 + 568) + 256))(1);
        }
        else
        {
          v50(0);
          if ( *(_DWORD *)(v22 + 568) )
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 + 568) + 256))(0);
        }
      }
      v22 += 4;
      ++ia;
    }
    while ( ia < 0x12 );
    if ( v1->m_bVerticalMode )
    {
      v51 = v1->m_pkPanelTrunBut;
      if ( v51 )
      {
        v52 = v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v53 = v51->orgTopOffset;
        v54 = v1->m_pkPanelTrunBut;
        v55 = ((int (*)(void))v1->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        v56 = (int)v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                     (NiRefObject *)v54,
                     v53 + v55);
        v52[77].__vecDelDtor((NiRefObject *)v1->m_pkPanelTrunBut, v56);
      }
      v57 = v1->m_pkSubPanelBut;
      if ( !v57 )
        goto LABEL_96;
      v58 = v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v59 = v57->orgTopOffset;
      v60 = v1->m_pkSubPanelBut;
      v61 = ((int (*)(void))v1->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      v62 = (int)v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                   (NiRefObject *)v60,
                   v59 + v61);
    }
    else
    {
      if ( v1->m_pkPanelTrunBut )
      {
        v63 = v1->m_pkPanelTrunBut;
        v64 = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v65 = v1->m_pkSizeBtn;
        v66 = v63->orgLeftOffset;
        v67 = ((int (*)(void))v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        v68 = (int)v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                     (NiRefObject *)v65,
                     v67);
        v64[77].__vecDelDtor((NiRefObject *)v1->m_pkPanelTrunBut, v66 + v68);
      }
      if ( !v1->m_pkSubPanelBut )
        goto LABEL_96;
      v69 = v1->m_pkSubPanelBut;
      v58 = v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v70 = v1->m_pkSizeBtn;
      v71 = v69->orgLeftOffset;
      v72 = ((int (*)(void))v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      v62 = v71
          + (int)v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                   (NiRefObject *)v70,
                   v72);
    }
    v58[77].__vecDelDtor((NiRefObject *)v1->m_pkSubPanelBut, v62);
LABEL_96:
    v73 = Timer::ms_fCurTime;
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor(
      (NiRefObject *)v1,
      LODWORD(Timer::ms_fCurTime));
    PgWin::UpdateChildWin(&v1->baseclass_0.baseclass_0.baseclass_0, v73);
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0058CFF0) --------------------------------------------------------
void __thiscall ShortCutWin::OnCmdShortCutLClick(ShortCutWin *this, unsigned int uiIndex)
{
  ShortCutWin *v2; // esi@1
  ShortCut *v3; // ebx@2
  unsigned int v4; // eax@7
  Item *v5; // ecx@8
  ShortCutIconWin *v6; // esi@14
  SpEffect *v7; // esi@18
  unsigned int uiInvPos; // [sp+8h] [bp-108h]@7
  char temp[256]; // [sp+Ch] [bp-104h]@13
  unsigned int v10; // [sp+10Ch] [bp-4h]@1
  int v11; // [sp+110h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  if ( !this->m_pkSizeBtn->m_bIsDrag )
  {
    v3 = this->m_apkIconWin[uiIndex]->m_spShortCut.m_pObject;
    if ( v3 )
    {
      this->m_kDropContents.m_eSenderType = 4;
      this->m_kDrop.m_pkSender = (PgWin *)this;
      if ( ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3) == 2 )
      {
        v2->m_kDropContents.nTableIndexNum = (unsigned int)v3[1].baseclass_0.vfptr;
      }
      else
      {
        if ( ((int (__thiscall *)(ShortCut *))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3) != 4
          && ((int (__thiscall *)(ShortCut *))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3) == 5 )
        {
          v4 = (unsigned int)v3[1].baseclass_0.vfptr;
          uiInvPos = v4;
          if ( v4 >= 0xC0 || (v5 = g_kInventory.m_aspInv[v4].m_pObject) == 0 )
            return;
          if ( (unsigned __int8)((int (*)(void))v5->baseclass_0.vfptr[1].__vecDelDtor)() == 24 )
          {
            v2->m_kDropContents.m_eSenderType = 4;
            v2->m_kDropContents.ui_InvType = 4;
            v2->m_kDropContents.ui_InvIndex = uiInvPos;
          }
        }
      }
      if ( ShortCutWin::SetDropContents(v2, v3, uiIndex + 18 * v2->m_uiCurPage) == 1 )
        PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      ShortCutIconWin::SetShortCut(v2->m_apkIconWin[uiIndex], 0);
      ShortCutMgr::SetShortCut(&g_kShortCutMgr, 0, uiIndex + 18 * v2->m_uiCurPage, 1);
      ShortCutWin::ReflashShortCutWin(v2);
      temp[0] = 0;
      memset(&temp[1], 0, 0xFFu);
      sprintf(temp, "OnCmdShortCutLClick : POS = %d\n");
      OutputDebugStringA(temp);
      if ( uiIndex <= 0x12 )
      {
        SkillIcon::SetSkill(&v2->m_apkIconWin[uiIndex]->baseclass_0, 0xFFFFu);
        v6 = v2->m_apkIconWin[uiIndex];
      }
      else
      {
        SkillIcon::SetSkill(
          *((SkillIcon **)&v2->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText + uiIndex),
          0xFFFFu);
        v6 = (ShortCutIconWin *)*((_DWORD *)&v2->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText + uiIndex);
      }
      if ( v6->m_bEnableToggle )
      {
        if ( v6->m_pkToggleEffect )
        {
          v7 = v6->m_pkToggleEffect;
          if ( v7 )
          {
            if ( v7->m_bLive )
              v7->m_bLoop = 0;
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (0058D1C0) --------------------------------------------------------
bool __thiscall ShortCutWin::CreatHorizontalWin(ShortCutWin *this, PgFrameWork *pkFrameWork, NiPointer<NiNode> *spNode, NiSourceTexture *pkTexture, bool pkMainWin)
{
  ShortCutWin *v5; // esi@1
  NiNode *v6; // ST34_4@1
  PgSprData *v7; // eax@1
  bool result; // al@4
  PgSprData *v9; // eax@6
  int v10; // ebx@6
  NiNode *v11; // eax@6
  NiSourceTexture *v12; // eax@6
  NiTexturePalette *v13; // ST44_4@9
  char *v14; // eax@9
  NiTexturePalette *v15; // ST44_4@12
  char *v16; // eax@12
  int v17; // edi@13
  PgSprData *v18; // eax@14
  PgWinSpr *v19; // eax@14
  PgSprData *v20; // eax@14
  PgWinSpr *v21; // eax@14
  PgSprData *v22; // eax@14
  PgWinSpr *v23; // eax@14
  ShortCutIconWin *v24; // eax@14
  ClockShadowWin *v25; // eax@14
  NiObject *v26; // ebx@14
  NiObject *v27; // eax@16
  int v28; // eax@16
  void *v29; // eax@19
  int v30; // edx@19
  int v31; // ebx@19
  int v32; // eax@19
  int (__thiscall *v33)(_DWORD); // edx@19
  int v34; // eax@19
  int v35; // ebx@19
  PgWinSpr *v36; // eax@19
  PgSprData *v37; // eax@19
  PgWinSpr *v38; // eax@19
  unsigned int v39; // eax@19
  NiAVObject **v40; // edi@22
  NiAVObject *v41; // eax@22
  PgSprData *v42; // eax@23
  PgWinButExt *v43; // eax@23
  int v44; // ecx@23
  PgWinButExt *v45; // eax@23
  void *v46; // eax@23
  NiAVObject *v47; // ecx@23
  PgWinButExt *v48; // eax@23
  int v49; // edx@23
  int v50; // ecx@23
  int v51; // edx@23
  PgWinButExt *v52; // eax@23
  char *v53; // eax@23
  PgSprData *v54; // eax@24
  PgWinButExt *v55; // eax@24
  int v56; // ecx@24
  int v57; // ecx@24
  PgWinButExt *v58; // eax@24
  void *v59; // eax@25
  NiAVObject *v60; // edx@25
  PgWinButExt *v61; // eax@25
  int v62; // edx@25
  int v63; // ecx@25
  PgWinButExt *v64; // eax@25
  int v65; // ebx@25
  char *v66; // eax@25
  NiSourceTexture *v67; // ebx@25
  PgSprData *v68; // eax@25
  PgSprData *v69; // eax@25
  PgSprData *v70; // eax@26
  PgFont *v71; // eax@26
  PgWinText *v72; // eax@26
  int v73; // eax@28
  NiRefObjectVtbl *v74; // ebx@28
  int v75; // edi@28
  int v76; // eax@28
  int v77; // eax@28
  bool v78; // zf@29
  NiRefObjectVtbl *v79; // edi@31
  int v80; // ST48_4@31
  PgFrameWork *v81; // [sp+2Ch] [bp-90h]@2
  char *v82; // [sp+30h] [bp-8Ch]@2
  unsigned int v83; // [sp+38h] [bp-84h]@1
  float v84; // [sp+3Ch] [bp-80h]@27
  float v85; // [sp+40h] [bp-7Ch]@27
  int qSlot01_3Width; // [sp+48h] [bp-74h]@6
  int orgOffsetY; // [sp+4Ch] [bp-70h]@25
  int orgOffsetX; // [sp+50h] [bp-6Ch]@25
  int qSlot01_2Width; // [sp+54h] [bp-68h]@6
  int tempLeft; // [sp+58h] [bp-64h]@6
  int qSlot01_1Width; // [sp+5Ch] [bp-60h]@6
  int tempTop; // [sp+60h] [bp-5Ch]@6
  unsigned int uiLeftOffset; // [sp+64h] [bp-58h]@6
  NiAVObject **v94; // [sp+68h] [bp-54h]@1
  int numberOffsetX; // [sp+6Ch] [bp-50h]@19
  unsigned int uiWidth; // [sp+70h] [bp-4Ch]@6
  unsigned int uiHeight; // [sp+74h] [bp-48h]@6
  NiSourceTexture *v98; // [sp+78h] [bp-44h]@1
  void *pkSprData; // [sp+7Ch] [bp-40h]@15
  unsigned int i; // [sp+80h] [bp-3Ch]@1
  int uiLeft; // [sp+84h] [bp-38h]@1
  int uiTop; // [sp+88h] [bp-34h]@1
  char string; // [sp+8Ch] [bp-30h]@26
  unsigned int v104; // [sp+ACh] [bp-10h]@1
  int v105; // [sp+B8h] [bp-4h]@15
  int v106; // [sp+BCh] [bp+0h]@1

  v104 = (unsigned int)&v106 ^ __security_cookie;
  v83 = (unsigned int)&v106 ^ __security_cookie;
  v5 = this;
  i = (unsigned int)pkFrameWork;
  v6 = spNode->m_pObject;
  v94 = (NiAVObject **)spNode;
  v98 = pkTexture;
  v7 = PgSprData::Create(&v6->baseclass_0, "Frame01", &uiLeft, &uiTop, pkTexture);
  if ( v5->m_bMainWinMode )
  {
    v82 = "ShortCutHorizontalWin";
    v81 = (PgFrameWork *)i;
  }
  else
  {
    v82 = "ShortCutHorizontalSubWin";
    v81 = (PgFrameWork *)i;
  }
  if ( !PgWinFrame::Create(&v5->baseclass_0, 0, 0, v7, 0, v81, v82, 0)
    || (v9 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture),
        PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        PgUtil::GetTriShapeRect(&spNode->m_pObject->baseclass_0, "Panel01", &tempLeft, &tempTop, &uiWidth, &uiHeight),
        v10 = uiLeft + uiWidth,
        v11 = spNode->m_pObject,
        uiLeftOffset = uiLeft + uiWidth,
        PgUtil::GetTriShapeRect(
          &v11->baseclass_0,
          "QSlot01_1",
          &tempLeft,
          &tempTop,
          (unsigned int *)&qSlot01_1Width,
          &uiHeight),
        v5->m_iIconWinSizeWidth = qSlot01_1Width,
        PgUtil::GetTriShapeRect(
          &spNode->m_pObject->baseclass_0,
          "QSlot01_2",
          &tempLeft,
          &tempTop,
          (unsigned int *)&qSlot01_2Width,
          &uiHeight),
        v5->m_iIconWinSizeWidth += qSlot01_2Width,
        PgUtil::GetTriShapeRect(
          &spNode->m_pObject->baseclass_0,
          "QSlot01_3",
          &tempLeft,
          &tempTop,
          (unsigned int *)&qSlot01_3Width,
          &uiHeight),
        v5->m_iIconWinSizeWidth += qSlot01_3Width,
        v12 = MenuTexMgr::GetTexture(0xEu),
        (v5->m_pkNumberTexture = v12) == 0) )
    goto LABEL_34;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v13 = (NiTexturePalette *)i;
  v14 = Folder::Merge(&Folder::m_acMenu, "Game\\MainNumber.nif");
  PgUtil::LoadNodeNifFile(v14, &v5->m_spNumberNode, v13);
  if ( !v5->m_spNumberNode.m_pObject )
    goto LABEL_34;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v15 = (NiTexturePalette *)i;
  v16 = Folder::Merge(&Folder::m_acMenu, "Game\\MainNumber.nif");
  PgUtil::LoadNodeNifFile(v16, &v5->m_spNumberPosNode, v15);
  if ( !v5->m_spNumberPosNode.m_pObject )
    goto LABEL_34;
  i = 0;
  v17 = (int)v5->m_apkIconWin;
  do
  {
    v18 = PgSprData::Create(*v94, "QSlot01_1", &uiLeft, &uiTop, v98);
    v19 = PgWinSpr::CreateWin(v10, uiTop, v18, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)(v17 + 352) = v19;
    ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      v19,
      0,
      v83);
    v20 = PgSprData::Create(*v94, "QSlot01_2", &uiLeft, &uiTop, v98);
    v21 = PgWinSpr::CreateWin(qSlot01_1Width, 0, v20, *(PgWin **)(v17 + 352), 0, 0);
    *(_DWORD *)(v17 + 424) = v21;
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v21,
      0);
    v22 = PgSprData::Create(*v94, "QSlot01_3", &uiLeft, &uiTop, v98);
    v23 = PgWinSpr::CreateWin(qSlot01_1Width + qSlot01_2Width, 0, v22, *(PgWin **)(v17 + 352), 0, 0);
    *(_DWORD *)(v17 + 496) = v23;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      0);
    v24 = ShortCutIconWin::CreateWin(v10 + 3, uiTop + 4, i, &v5->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)v17 = v24;
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v24,
      3u);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v17 + 560))(4);
    *(_DWORD *)(*(_DWORD *)v17 + 304) = 1;
    ShortCutIconWin::SetShortCut(*(ShortCutIconWin **)v17, 0);
    IconWin::ShowFocus(*(IconWin **)v17, 1);
    v25 = ClockShadowWin::CreateWin(v10 + 2, uiTop + 4, &v5->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)(v17 + 72) = v25;
    v25->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v17 + 72) + 240))(0);
    v26 = (NiObject *)EffectMgr::GetEffectNode(&g_kEffectMgr, "WeaponTitle");
    if ( v26 )
    {
      pkSprData = operator new(0x44u);
      v105 = 0;
      if ( pkSprData )
      {
        v27 = NiObject::Clone(v26);
        SpEffect::SpEffect((SpEffect *)pkSprData, (NiNode *)v27);
        v105 = -1;
        *(_DWORD *)(v17 + 164) = v28;
      }
      else
      {
        v105 = -1;
        *(_DWORD *)(v17 + 164) = 0;
      }
    }
    else
    {
      *(_DWORD *)(v17 + 164) = 0;
    }
    v29 = PgSprData::Create(
            &v5->m_spNumberNode.m_pObject->baseclass_0,
            "ShiftPlus",
            &uiLeft,
            &uiTop,
            v5->m_pkNumberTexture);
    v30 = **(_DWORD **)(v17 + 352);
    v31 = *(_DWORD *)(v17 + 424);
    pkSprData = v29;
    v32 = (*(int (**)(void))(v30 + 144))();
    v33 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v31 + 144);
    numberOffsetX = v32;
    v34 = v33(v31);
    v35 = uiLeftOffset;
    numberOffsetX += v34 + 3;
    v36 = PgWinSpr::CreateWin(
            uiLeftOffset + 5,
            uiTop + 4,
            (PgSprData *)pkSprData,
            &v5->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    *(_DWORD *)(v17 + 652) = v36;
    v83 = 0;
    ((void (__thiscall *)(PgWinSpr *))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v36);
    v37 = PgSprData::Create(&v5->m_spNumberNode.m_pObject->baseclass_0, "48", &uiLeft, &uiTop, v5->m_pkNumberTexture);
    v38 = PgWinSpr::CreateWin(numberOffsetX + v35 - 7, uiTop + 4, v37, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)(v17 + 568) = v38;
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v38,
      0);
    v10 = v5->m_iIconWinSizeWidth + v35;
    v39 = i;
    uiLeftOffset = v10;
    if ( (signed int)i > 11 )
    {
      ShortCutWin::SetHotKeyWin(v5, i, "SmallNumTrans02");
      ShortCutWin::SetHotKeyPlusWin(v5, i, "SmallNumTrans01");
      v39 = i;
    }
    v17 += 4;
    i = v39 + 1;
  }
  while ( (signed int)(v39 + 1) < 18 );
  v40 = v94;
  v41 = *v94;
  if ( v5->m_bMainWinMode )
  {
    v42 = PgSprData::Create(v41, "MovePanelBtn01", &uiLeft, &uiTop, v98);
    v43 = PgWinButExt::CreateWin(v10, uiTop, v42, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v44 = uiTop;
    v5->m_pkSizeBtn = v43;
    v43->firstPosY = v44;
    v43->firstPosX = v10;
    v45 = v5->m_pkSizeBtn;
    v45->defaultPosY = uiTop;
    v45->defaultPosX = v10;
    v5->m_pkSizeBtn->shortCutSizeMode = 1;
    v5->m_pkSizeBtn->m_bIsVerticalMode = 0;
    PgUtil::GetTriShapeRect(*v40, "SubPanelBtnNor01", &numberOffsetX, (int *)&uiLeftOffset, &uiWidth, &uiHeight);
    v46 = PgSprData::Create(*v40, "SubPanelBtnNor01", &uiLeft, &uiTop, v98);
    v47 = *v40;
    pkSprData = v46;
    PgSprData::Add((PgSprData *)v46, v47, "SubPanelBtnNor01");
    PgSprData::Add((PgSprData *)pkSprData, *v40, "SubPanelBtnOver01");
    v48 = PgWinButExt::CreateWin(
            v10 + uiLeft,
            uiTop,
            (PgSprData *)pkSprData,
            &v5->baseclass_0.baseclass_0.baseclass_0,
            6u,
            0,
            0);
    v49 = uiLeft;
    v50 = uiTop;
    v5->m_pkSubPanelBut = v48;
    v48->firstPosX = v10 + v49;
    v48->firstPosY = v50;
    v51 = uiLeft;
    v52 = v5->m_pkSubPanelBut;
    v52->defaultPosY = uiTop;
    v52->defaultPosX = v10 + v51;
    v5->m_pkSubPanelBut->orgLeftOffset = numberOffsetX;
    v5->m_pkSubPanelBut->orgTopOffset = uiLeftOffset;
    v5->m_pkSubPanelBut->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v53 = TextData2::Get(0x669A82A9u);
    PgWin::SetToolTipWinText(&v5->m_pkSubPanelBut->baseclass_0.baseclass_0.baseclass_0, v53);
  }
  else
  {
    v54 = PgSprData::Create(v41, "MovePanel01", &uiLeft, &uiTop, v98);
    v55 = PgWinButExt::CreateWin(v10, uiTop, v54, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v56 = uiTop;
    v5->m_pkSizeBtn = v55;
    v55->firstPosX = v10;
    v55->firstPosY = v56;
    v57 = uiTop;
    v58 = v5->m_pkSizeBtn;
    v58->defaultPosX = v10;
    v58->defaultPosY = v57;
    v5->m_pkSizeBtn->shortCutSizeMode = 1;
    v5->m_pkSizeBtn->m_bIsVerticalMode = 0;
  }
  PgUtil::GetTriShapeRect(*v40, "PanelTurnBtnNor01", &orgOffsetX, &orgOffsetY, &uiWidth, &uiHeight);
  v59 = PgSprData::Create(*v40, "PanelTurnBtnNor01", &uiLeft, &uiTop, v98);
  v60 = *v40;
  pkSprData = v59;
  PgSprData::Add((PgSprData *)v59, v60, "PanelTurnBtnNor01");
  PgSprData::Add((PgSprData *)pkSprData, *v40, "PanelTurnBtnOver01");
  v61 = PgWinButExt::CreateWin(
          v10 + uiLeft,
          uiTop,
          (PgSprData *)pkSprData,
          &v5->baseclass_0.baseclass_0.baseclass_0,
          5u,
          0,
          0);
  v62 = uiLeft;
  v63 = uiTop;
  v5->m_pkPanelTrunBut = v61;
  v61->firstPosY = v63;
  v61->firstPosX = v10 + v62;
  v64 = v5->m_pkPanelTrunBut;
  v65 = uiLeft + v10;
  v64->defaultPosY = uiTop;
  v64->defaultPosX = v65;
  v5->m_pkPanelTrunBut->orgLeftOffset = orgOffsetX;
  v5->m_pkPanelTrunBut->orgTopOffset = orgOffsetY;
  v5->m_pkPanelTrunBut->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v66 = TextData2::Get(0xAF9A80F7u);
  PgWin::SetToolTipWinText(&v5->m_pkPanelTrunBut->baseclass_0.baseclass_0.baseclass_0, v66);
  v67 = v98;
  v68 = PgSprData::Create(*v40, "PrePanelNor01", &uiLeft, &uiTop, v98);
  PgWinBut::CreateWin(uiLeft, uiTop, v68, &v5->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v69 = PgSprData::Create(*v40, "NextPanelNor01", &uiLeft, &uiTop, v67);
  PgWinBut::CreateWin(uiLeft, uiTop, v69, &v5->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  if ( PgUtil::GetTriShapeRect(*v40, "PageNum01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v70 = PgSprData::Create(*v40, "PageNum01", &uiLeft, &uiTop, v67);
    PgWinSpr::CreateWin(uiLeft, uiTop, v70, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v71 = Font::Get(SMALL);
    v72 = PgWinText::CreateWin(
            uiLeft,
            uiTop + 2,
            uiWidth,
            uiHeight,
            v71,
            &v5->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v5->m_pkPageNumTextWin = v72;
    ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v72,
      1,
      0);
    ((void (__stdcall *)(__int64 *))v5->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    ((void (__stdcall *)(_DWORD))v5->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    sprintf(&string, "%u");
    ((void (__stdcall *)(char *))v5->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&string);
    if ( v5->m_bMainWinMode )
    {
      v85 = 1.0;
      v84 = 0.0;
      ((void (__thiscall *)(ShortCutWin *, unsigned int, unsigned int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v5,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight);
    }
    else
    {
      v85 = 0.92500001;
      v84 = 0.0;
      ((void (__thiscall *)(ShortCutWin *, unsigned int, unsigned int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v5,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight);
      v73 = ((int (__thiscall *)(ShortCutWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5);
      v74 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v75 = v5->m_iSubTabLevel * v73;
      v76 = ((int (__thiscall *)(ShortCutWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5);
      v77 = (int)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                   (NiRefObject *)v5,
                   v76 - v75);
      v74[77].__vecDelDtor((NiRefObject *)v5, v77);
      v5->m_uiCurPage = v5->m_iSubTabLevel + 1;
      ShortCutWin::SetPageTextWin(v5);
    }
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v5,
      1u);
    v78 = v5->m_bMainWinMode == 0;
    v5->m_uiShortCutStatusIndex = 0;
    if ( v78 )
      v5->m_uiShortCutStatusIndex = v5->m_iSubTabLevel + 1;
    v79 = v5->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v80 = ((int (__cdecl *)(_DWORD, _DWORD))v5->m_apkIconWin[(unsigned __int8)byte_B5BB58[3
                                                                                        * v5->m_uiShortCutStatusIndex]]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(
            LODWORD(v84),
            LODWORD(v85))
        - 2;
    ((void (__thiscall *)(PgWinButExt *))v79[43].__vecDelDtor)(v5->m_pkSizeBtn);
    ShortCutWin::ReflashShortCutWin(v5);
    result = 1;
  }
  else
  {
LABEL_34:
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0058DC00) --------------------------------------------------------
bool __thiscall ShortCutWin::CreatVerticalWin(ShortCutWin *this, PgFrameWork *pkFrameWork, NiPointer<NiNode> *spNode, NiSourceTexture *pkTexture, bool pkMainWinMode)
{
  ShortCutWin *v5; // esi@1
  NiNode *v6; // ST34_4@1
  PgSprData *v7; // eax@1
  bool result; // al@4
  NiNode *v9; // eax@6
  PgSprData *v10; // eax@6
  NiSourceTexture *v11; // eax@6
  NiTexturePalette *v12; // ST44_4@9
  char *v13; // eax@9
  NiTexturePalette *v14; // ST44_4@12
  char *v15; // eax@12
  int v16; // edi@13
  PgSprData *v17; // eax@14
  PgWinSpr *v18; // eax@14
  PgSprData *v19; // eax@14
  PgWinSpr *v20; // eax@14
  PgSprData *v21; // eax@14
  PgWinSpr *v22; // eax@14
  ShortCutIconWin *v23; // eax@14
  ClockShadowWin *v24; // eax@14
  NiObject *v25; // eax@16
  int v26; // eax@16
  PgSprData *v27; // eax@19
  PgWinSpr *v28; // eax@19
  PgSprData *v29; // eax@19
  PgWinSpr *v30; // eax@19
  unsigned int v31; // eax@19
  NiNode *v32; // eax@22
  PgSprData *v33; // eax@23
  int v34; // edi@23
  PgWinButExt *v35; // eax@23
  int v36; // ecx@23
  PgWinButExt *v37; // eax@23
  PgSprData *v38; // eax@23
  NiNode *v39; // edx@23
  PgWinButExt *v40; // eax@23
  int v41; // ecx@23
  int v42; // edx@23
  int v43; // ecx@23
  PgWinButExt *v44; // eax@23
  char *v45; // eax@23
  PgSprData *v46; // eax@24
  PgWinButExt *v47; // eax@24
  int v48; // ecx@24
  PgWinButExt *v49; // eax@24
  PgSprData *v50; // eax@25
  NiNode *v51; // edx@25
  PgWinButExt *v52; // eax@25
  int v53; // edx@25
  int v54; // edi@25
  PgWinButExt *v55; // eax@25
  char *v56; // eax@25
  NiSourceTexture *v57; // edi@25
  PgSprData *v58; // eax@25
  PgSprData *v59; // eax@25
  PgSprData *v60; // eax@26
  PgFont *v61; // eax@26
  PgWinText *v62; // eax@26
  NiRefObjectVtbl *v63; // edi@27
  int v64; // eax@27
  NiRefObjectVtbl *v65; // edi@28
  int v66; // eax@28
  int v67; // eax@28
  NiRefObjectVtbl *v68; // ebx@28
  int v69; // edi@28
  int v70; // eax@28
  NiRefObjectVtbl *v71; // edi@31
  int v72; // ST48_4@31
  PgFrameWork *v73; // [sp+2Ch] [bp-8Ch]@2
  char *v74; // [sp+30h] [bp-88h]@2
  unsigned int v75; // [sp+38h] [bp-80h]@1
  float v76; // [sp+3Ch] [bp-7Ch]@27
  int qSlot02_3Height; // [sp+48h] [bp-70h]@6
  int orgOffsetX; // [sp+4Ch] [bp-6Ch]@25
  int orgOffsetY; // [sp+50h] [bp-68h]@25
  int qSlot02_2Height; // [sp+54h] [bp-64h]@6
  NiObject *pkEffect; // [sp+58h] [bp-60h]@14
  int qSlot02_1Height; // [sp+5Ch] [bp-5Ch]@6
  SpEffect *iLeft; // [sp+60h] [bp-58h]@15
  int tempLeft; // [sp+64h] [bp-54h]@6
  int tempTop; // [sp+68h] [bp-50h]@6
  unsigned int uiHeight; // [sp+6Ch] [bp-4Ch]@6
  unsigned int uiWidth; // [sp+70h] [bp-48h]@6
  NiSourceTexture *v88; // [sp+74h] [bp-44h]@1
  int uiTopOffset; // [sp+78h] [bp-40h]@6
  unsigned int i; // [sp+7Ch] [bp-3Ch]@1
  int uiTop; // [sp+80h] [bp-38h]@1
  int uiLeft; // [sp+84h] [bp-34h]@1
  char string; // [sp+88h] [bp-30h]@26
  unsigned int v94; // [sp+A8h] [bp-10h]@1
  int v95; // [sp+B4h] [bp-4h]@15
  int v96; // [sp+B8h] [bp+0h]@1

  v94 = (unsigned int)&v96 ^ __security_cookie;
  v75 = (unsigned int)&v96 ^ __security_cookie;
  v5 = this;
  i = (unsigned int)pkFrameWork;
  v6 = spNode->m_pObject;
  v88 = pkTexture;
  v7 = PgSprData::Create(&v6->baseclass_0, "Frame02", &uiLeft, &uiTop, pkTexture);
  if ( pkMainWinMode )
  {
    v74 = "ShortCutVerticalWin";
    v73 = (PgFrameWork *)i;
  }
  else
  {
    v74 = "ShortCutVerticalSubWin";
    v73 = (PgFrameWork *)i;
  }
  if ( !PgWinFrame::Create(&v5->baseclass_0, 0, 0, v7, 0, v73, v74, 0)
    || (PgUtil::GetTriShapeRect(&spNode->m_pObject->baseclass_0, "Panel02", &tempLeft, &tempTop, &uiWidth, &uiHeight),
        v9 = spNode->m_pObject,
        uiTopOffset = uiHeight + tempTop,
        v10 = PgSprData::Create(&v9->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture),
        PgWinSpr::CreateWin(uiLeft, uiTop, v10, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        PgUtil::GetTriShapeRect(
          &spNode->m_pObject->baseclass_0,
          "QSlot02_1",
          &tempLeft,
          &tempTop,
          &uiWidth,
          (unsigned int *)&qSlot02_1Height),
        v5->m_iIconWinSizeHeight = qSlot02_1Height,
        PgUtil::GetTriShapeRect(
          &spNode->m_pObject->baseclass_0,
          "QSlot02_2",
          &tempLeft,
          &tempTop,
          &uiWidth,
          (unsigned int *)&qSlot02_2Height),
        v5->m_iIconWinSizeHeight += qSlot02_2Height,
        PgUtil::GetTriShapeRect(
          &spNode->m_pObject->baseclass_0,
          "QSlot02_3",
          &tempLeft,
          &tempTop,
          &uiWidth,
          (unsigned int *)&qSlot02_3Height),
        v5->m_iIconWinSizeHeight += qSlot02_3Height,
        v11 = MenuTexMgr::GetTexture(0xEu),
        (v5->m_pkNumberTexture = v11) == 0) )
    goto LABEL_34;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v12 = (NiTexturePalette *)i;
  v13 = Folder::Merge(&Folder::m_acMenu, "Game\\MainNumber.nif");
  PgUtil::LoadNodeNifFile(v13, &v5->m_spNumberPosNode, v12);
  if ( !v5->m_spNumberPosNode.m_pObject )
    goto LABEL_34;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v14 = (NiTexturePalette *)i;
  v15 = Folder::Merge(&Folder::m_acMenu, "Game\\MainNumber.nif");
  PgUtil::LoadNodeNifFile(v15, &v5->m_spNumberNode, v14);
  if ( !v5->m_spNumberNode.m_pObject )
    goto LABEL_34;
  i = 0;
  v16 = (int)v5->m_apkIconWin;
  do
  {
    v17 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "QSlot02_1", &uiLeft, &uiTop, v88);
    v18 = PgWinSpr::CreateWin(uiLeft, uiTopOffset, v17, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)(v16 + 352) = v18;
    ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      v18,
      0,
      v75);
    v19 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "QSlot02_2", &uiLeft, &uiTop, v88);
    v20 = PgWinSpr::CreateWin(0, qSlot02_1Height, v19, *(PgWin **)(v16 + 352), 0, 0);
    *(_DWORD *)(v16 + 424) = v20;
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    v21 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "QSlot02_3", &uiLeft, &uiTop, v88);
    v22 = PgWinSpr::CreateWin(0, qSlot02_1Height + qSlot02_2Height, v21, *(PgWin **)(v16 + 352), 0, 0);
    *(_DWORD *)(v16 + 496) = v22;
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v22,
      0);
    v23 = ShortCutIconWin::CreateWin(uiLeft + 4, uiTopOffset + 3, i, &v5->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)v16 = v23;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v23,
      3u);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v16 + 560))(4);
    *(_DWORD *)(*(_DWORD *)v16 + 304) = 1;
    ShortCutIconWin::SetShortCut(*(ShortCutIconWin **)v16, 0);
    IconWin::ShowFocus(*(IconWin **)v16, 1);
    v24 = ClockShadowWin::CreateWin(uiLeft + 4, uiTopOffset + 3, &v5->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)(v16 + 72) = v24;
    v24->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v16 + 72) + 240))(0);
    pkEffect = (NiObject *)EffectMgr::GetEffectNode(&g_kEffectMgr, "WeaponTitle");
    if ( pkEffect )
    {
      iLeft = (SpEffect *)operator new(0x44u);
      v95 = 0;
      if ( iLeft )
      {
        v25 = NiObject::Clone(pkEffect);
        SpEffect::SpEffect(iLeft, (NiNode *)v25);
        v95 = -1;
        *(_DWORD *)(v16 + 164) = v26;
      }
      else
      {
        v95 = -1;
        *(_DWORD *)(v16 + 164) = 0;
      }
    }
    else
    {
      *(_DWORD *)(v16 + 164) = 0;
    }
    v27 = PgSprData::Create(
            &v5->m_spNumberNode.m_pObject->baseclass_0,
            "ShiftPlus",
            &uiLeft,
            &uiTop,
            v5->m_pkNumberTexture);
    v28 = PgWinSpr::CreateWin(6, uiTopOffset + 4, v27, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)(v16 + 652) = v28;
    v75 = 0;
    ((void (__thiscall *)(PgWinSpr *))v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v28);
    v29 = PgSprData::Create(&v5->m_spNumberNode.m_pObject->baseclass_0, "48", &uiLeft, &uiTop, v5->m_pkNumberTexture);
    v30 = PgWinSpr::CreateWin(25, uiTopOffset + 2, v29, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)(v16 + 568) = v30;
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v30,
      0);
    v31 = i;
    uiTopOffset += v5->m_iIconWinSizeHeight;
    if ( (signed int)i > 11 )
    {
      ShortCutWin::SetHotKeyWin(v5, i, "SmallNumTrans02");
      ShortCutWin::SetHotKeyPlusWin(v5, i, "SmallNumTrans01");
      v31 = i;
    }
    v16 += 4;
    i = v31 + 1;
  }
  while ( (signed int)(v31 + 1) < 18 );
  v32 = spNode->m_pObject;
  if ( pkMainWinMode )
  {
    v33 = PgSprData::Create(&v32->baseclass_0, "MovePanelBtn02", &uiLeft, &uiTop, v88);
    v34 = uiTopOffset;
    v35 = PgWinButExt::CreateWin(uiLeft, uiTopOffset, v33, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v36 = uiLeft;
    v5->m_pkSizeBtn = v35;
    v35->firstPosX = v36;
    v35->firstPosY = v34;
    v37 = v5->m_pkSizeBtn;
    v37->defaultPosX = uiLeft;
    v37->defaultPosY = v34;
    v5->m_pkSizeBtn->shortCutSizeMode = 1;
    v5->m_pkSizeBtn->m_bIsVerticalMode = 1;
    PgUtil::GetTriShapeRect(
      &spNode->m_pObject->baseclass_0,
      "SubPanelBtnNor02",
      (int *)&iLeft,
      (int *)&pkEffect,
      &uiWidth,
      &uiHeight);
    v38 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "SubPanelBtnNor02", &uiLeft, &uiTop, v88);
    v39 = spNode->m_pObject;
    i = (unsigned int)v38;
    PgSprData::Add(v38, &v39->baseclass_0, "SubPanelBtnNor02");
    PgSprData::Add((PgSprData *)i, &spNode->m_pObject->baseclass_0, "SubPanelBtnOver02");
    v40 = PgWinButExt::CreateWin(
            uiLeft,
            v34 + uiTop,
            (PgSprData *)i,
            &v5->baseclass_0.baseclass_0.baseclass_0,
            6u,
            0,
            0);
    v41 = v34 + uiTop;
    v42 = uiLeft;
    v5->m_pkSubPanelBut = v40;
    v40->firstPosY = v41;
    v40->firstPosX = v42;
    v43 = v34 + uiTop;
    v44 = v5->m_pkSubPanelBut;
    v44->defaultPosX = uiLeft;
    v44->defaultPosY = v43;
    v5->m_pkSubPanelBut->orgLeftOffset = (int)iLeft;
    v5->m_pkSubPanelBut->orgTopOffset = (int)pkEffect;
    v5->m_pkSubPanelBut->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v45 = TextData2::Get(0x669A82A9u);
    PgWin::SetToolTipWinText(&v5->m_pkSubPanelBut->baseclass_0.baseclass_0.baseclass_0, v45);
  }
  else
  {
    v46 = PgSprData::Create(&v32->baseclass_0, "MovePanel02", &uiLeft, &uiTop, v88);
    v34 = uiTopOffset;
    v47 = PgWinButExt::CreateWin(uiLeft, uiTopOffset, v46, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v48 = uiLeft;
    v5->m_pkSizeBtn = v47;
    v47->firstPosX = v48;
    v47->firstPosY = v34;
    v49 = v5->m_pkSizeBtn;
    v49->defaultPosX = uiLeft;
    v49->defaultPosY = v34;
    v5->m_pkSizeBtn->shortCutSizeMode = 1;
    v5->m_pkSizeBtn->m_bIsVerticalMode = 1;
  }
  PgUtil::GetTriShapeRect(
    &spNode->m_pObject->baseclass_0,
    "PanelTurnBtnNor02",
    &orgOffsetX,
    &orgOffsetY,
    &uiWidth,
    &uiHeight);
  v50 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "PanelTurnBtnNor02", &uiLeft, &uiTop, v88);
  v51 = spNode->m_pObject;
  i = (unsigned int)v50;
  PgSprData::Add(v50, &v51->baseclass_0, "PanelTurnBtnNor02");
  PgSprData::Add((PgSprData *)i, &spNode->m_pObject->baseclass_0, "PanelTurnBtnOver02");
  v52 = PgWinButExt::CreateWin(uiLeft, v34 + uiTop, (PgSprData *)i, &v5->baseclass_0.baseclass_0.baseclass_0, 5u, 0, 0);
  v53 = uiTop;
  v5->m_pkPanelTrunBut = v52;
  v52->firstPosX = uiLeft;
  v52->firstPosY = v34 + v53;
  v54 = uiTop + v34;
  v55 = v5->m_pkPanelTrunBut;
  v55->defaultPosX = uiLeft;
  v55->defaultPosY = v54;
  v5->m_pkPanelTrunBut->orgLeftOffset = orgOffsetX;
  v5->m_pkPanelTrunBut->orgTopOffset = orgOffsetY;
  v5->m_pkPanelTrunBut->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v56 = TextData2::Get(0xAF9A80F7u);
  PgWin::SetToolTipWinText(&v5->m_pkPanelTrunBut->baseclass_0.baseclass_0.baseclass_0, v56);
  v57 = v88;
  v58 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "PrePanelNor02", &uiLeft, &uiTop, v88);
  PgWinBut::CreateWin(uiLeft, uiTop, v58, &v5->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v59 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "NextPanelNor02", &uiLeft, &uiTop, v57);
  PgWinBut::CreateWin(uiLeft, uiTop, v59, &v5->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode->m_pObject->baseclass_0, "PageNum02", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v60 = PgSprData::Create(&spNode->m_pObject->baseclass_0, "PageNum02", &uiLeft, &uiTop, v57);
    PgWinSpr::CreateWin(uiLeft, uiTop, v60, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v61 = Font::Get(SMALL);
    v62 = PgWinText::CreateWin(
            uiLeft,
            uiTop + 2,
            uiWidth,
            uiHeight,
            v61,
            &v5->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v5->m_pkPageNumTextWin = v62;
    ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v62,
      1,
      0);
    ((void (__stdcall *)(__int64 *))v5->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    ((void (__stdcall *)(_DWORD))v5->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    sprintf(&string, "%u");
    ((void (__stdcall *)(char *))v5->m_pkPageNumTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&string);
    if ( pkMainWinMode )
    {
      v76 = 1.0;
      ((void (__thiscall *)(ShortCutWin *, unsigned int, unsigned int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v5,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight);
      v63 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v64 = (int)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                   (NiRefObject *)v5,
                   160u);
      v63[77].__vecDelDtor((NiRefObject *)v5, v64);
    }
    else
    {
      v76 = 0.94499999;
      ((void (__thiscall *)(ShortCutWin *, unsigned int, unsigned int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v5,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight);
      v65 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v66 = (int)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                   (NiRefObject *)v5,
                   160u);
      v65[77].__vecDelDtor((NiRefObject *)v5, v66);
      v67 = ((int (__thiscall *)(ShortCutWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v5);
      v68 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v69 = v5->m_iSubTabLevel * v67;
      v70 = (int)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                   (NiRefObject *)v5,
                   160u);
      v68[77].__vecDelDtor((NiRefObject *)v5, v70 - v69);
      v5->m_uiCurPage = v5->m_iSubTabLevel + 1;
      ShortCutWin::SetPageTextWin(v5);
    }
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v5,
      1u);
    v5->m_uiShortCutStatusIndex = 0;
    if ( !pkMainWinMode )
      v5->m_uiShortCutStatusIndex = v5->m_iSubTabLevel + 1;
    v71 = v5->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v72 = ((int (__cdecl *)(_DWORD, _DWORD))v5->m_apkIconWin[(unsigned __int8)byte_B5BB58[3
                                                                                        * v5->m_uiShortCutStatusIndex]]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(
            LODWORD(v76),
            0.0)
        - 3;
    ((void (__thiscall *)(PgWinButExt *))v71[44].__vecDelDtor)(v5->m_pkSizeBtn);
    ShortCutWin::ReflashShortCutWin(v5);
    result = 1;
  }
  else
  {
LABEL_34:
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0058E610) --------------------------------------------------------
void __thiscall ShortCutWin::ProcessMeInput(ShortCutWin *this, bool *bHit)
{
  int v2; // ebx@0
  ShortCutWin *v3; // esi@1
  int v4; // eax@2
  NiRefObjectVtbl *v5; // edi@5
  int v6; // eax@5
  NiRefObjectVtbl *v7; // edi@6
  int v8; // eax@6
  PgWinButExt *v9; // edx@11
  NiRefObjectVtbl *v10; // ebx@15
  unsigned int v11; // edi@15
  int v12; // eax@15
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // edx@15
  NiRefObjectVtbl *v14; // ebx@18
  PgWinButExt *v15; // edi@21
  int v16; // ebx@21
  ShortCutIconWin *v17; // ecx@22
  NiRefObjectVtbl *v18; // edi@23
  void *(__thiscall *v19)(NiRefObject *, unsigned int); // edx@23
  PgWinButExt *v20; // edi@24
  int v21; // ebx@24
  ShortCutIconWin *v22; // edi@26
  int v23; // ebx@26
  ShortCutIconWin *v24; // ecx@27
  ShortCutIconWin *v25; // edi@28
  int v26; // ebx@28
  NiRefObjectVtbl *v27; // edi@30
  int v28; // [sp-8h] [bp-Ch]@12

  v3 = this;
  PgWinFrame::ProcessMeInput(&this->baseclass_0, bHit);
  if ( v3->m_pkSizeBtn )
  {
    v4 = (unsigned __int8)byte_B5BB58[3 * v3->m_uiShortCutStatusIndex];
    if ( !ShortCutWin::ms_bShortCutSizeFinish && !*(_BYTE *)(g_pkMouse + 129) )
    {
      ShortCutWin::ms_bShortCutSizeFinish = 1;
      if ( v3->m_bVerticalMode )
      {
        v5 = v3->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v6 = ((int (*)(void))v3->m_apkIconWin[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        v5[44].__vecDelDtor((NiRefObject *)v3->m_pkSizeBtn, v6 - 3);
      }
      else
      {
        v7 = v3->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v8 = ((int (*)(void))v3->m_apkIconWin[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
        v7[43].__vecDelDtor((NiRefObject *)v3->m_pkSizeBtn, v8 - 2);
      }
      ShortCutWin::ReflashShortCutWin(v3);
    }
    if ( v3->m_pkSizeBtn->m_bIsDrag )
    {
      if ( !*(_BYTE *)(g_pkMouse + 129) )
        return;
      ShortCutWin::ms_bShortCutSizeFinish = 0;
    }
    v9 = v3->m_pkSizeBtn;
    if ( v9->m_bIsDrag )
    {
      v28 = v2;
      if ( v3->m_bVerticalMode )
      {
        if ( PgWin::ms_iMsDeltaY < 0 || PgWin::ms_iMsDeltaY > 0 )
        {
          v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = PgWin::ms_iMsY
              - ((unsigned int)((int (__stdcall *)(int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v28) >> 1);
          v12 = ((int (__thiscall *)(ShortCutWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
          v13 = v10[44].__vecDelDtor;
LABEL_19:
          v28 = v11 - v12;
          ((void (__thiscall *)(PgWinButExt *))v13)(v3->m_pkSizeBtn);
          goto LABEL_20;
        }
      }
      else
      {
        if ( PgWin::ms_iMsDeltaX < 0 || PgWin::ms_iMsDeltaX > 0 )
        {
          v14 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = PgWin::ms_iMsX.x
              - ((unsigned int)((int (__stdcall *)(int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v28) >> 1);
          v12 = ((int (__thiscall *)(ShortCutWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
          v13 = v14[43].__vecDelDtor;
          goto LABEL_19;
        }
      }
LABEL_20:
      if ( v3->m_bVerticalMode )
      {
        v15 = v3->m_pkSizeBtn;
        v16 = ((int (*)(void))v3->m_apkIconWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        if ( ((int (__thiscall *)(PgWinButExt *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v15) < v16 )
        {
          v17 = v3->m_apkIconWin[1];
LABEL_23:
          v18 = v3->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          ((void (__stdcall *)(int))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v28);
          v19 = v18[44].__vecDelDtor;
LABEL_31:
          ((void (__thiscall *)(PgWinButExt *))v19)(v3->m_pkSizeBtn);
          goto LABEL_32;
        }
        v20 = v3->m_pkSizeBtn;
        v21 = ((int (*)(void))v3->m_apkIconWin[17]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
        if ( ((int (__thiscall *)(PgWinButExt *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v20) > v21 )
        {
          v17 = v3->m_apkIconWin[17];
          goto LABEL_23;
        }
LABEL_32:
        ShortCutWin::ReflashShortCutWin(v3);
        return;
      }
      v22 = v3->m_apkIconWin[1];
      v23 = ((int (*)(void))v3->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
      if ( v23 >= ((int (__thiscall *)(ShortCutIconWin *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v22) )
      {
        v25 = v3->m_apkIconWin[17];
        v26 = ((int (*)(void))v3->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
        if ( v26 <= ((int (__thiscall *)(ShortCutIconWin *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v25) )
          goto LABEL_32;
        v24 = v3->m_apkIconWin[17];
      }
      else
      {
        v24 = v3->m_apkIconWin[1];
      }
      v27 = v3->m_pkSizeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      ((void (__stdcall *)(int))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v28);
      v19 = v27[43].__vecDelDtor;
      goto LABEL_31;
    }
  }
}
// 58E610: could not find valid save-restore pair for ebx
// A98170: using guessed type int g_pkMouse;
// A99D7C: using guessed type char ShortCutWin__ms_bShortCutSizeFinish;

//----- (0058E8B0) --------------------------------------------------------
void __thiscall ShortCutWin::OnCommand(ShortCutWin *this, unsigned int wParam, int lParam)
{
  ShortCutWin *v3; // esi@1
  unsigned int v4; // eax@8
  int v5; // eax@9
  PgMsg::Frame *v6; // ecx@11
  unsigned int v7; // eax@14
  int v8; // eax@15
  PgMsg::Frame *v9; // ecx@17
  unsigned int v10; // eax@20
  int v11; // ebx@21
  unsigned __int16 v12; // ax@22
  Item *v13; // edi@23
  signed int v14; // eax@24
  bool v15; // cf@24
  Item *v16; // ecx@26
  ActionEffectItem *v17; // eax@31
  ItemActionEffectDesc *v18; // eax@32
  unsigned int v19; // eax@35
  int v20; // eax@36
  unsigned int v21; // ecx@37
  Item *v22; // ecx@38
  unsigned int v23; // eax@41
  int v24; // eax@42
  PremiumActionWin *v25; // ecx@43

  v3 = this;
  switch ( wParam )
  {
    case 1u:
      ShortCutWin::OnCmdPrev(this);
      ShortCutWin::ReflashHotKey(v3);
      break;
    case 2u:
      ShortCutWin::OnCmdNext(this);
      ShortCutWin::ReflashHotKey(v3);
      break;
    case 3u:
      ShortCutWin::OnCmdShortCutLClick(this, lParam);
      break;
    case 4u:
      ShortCutWin::OnCmdShortCutRClick(this, lParam);
      break;
    case 5u:
      ShortCutWin::OnCmdPanelTurn(this);
      ShortCutMgr::SetShortCutSizeChanged(&g_kShortCutMgr, 1);
      break;
    case 6u:
      ShortCutMgr::SetShortCutSizeChanged(&g_kShortCutMgr, 1);
      ShortCutWin::OnCmdSubPanel(v3);
      break;
    case 7u:
      v4 = lParam + 18 * this->m_uiCurPage;
      if ( v4 < 0x64 )
        v5 = (int)*(&unk_A9E21C + v4);
      else
        v5 = 0;
      v6 = this->baseclass_0.m_pkFrameWork[21].m_kMsgQ.m_pBase;
      if ( v6 )
      {
        if ( v5 )
          ActionWin::OnDefaultAction((ActionWin *)v6, *(_DWORD *)(v5 + 16));
      }
      break;
    case 8u:
      v7 = lParam + 18 * this->m_uiCurPage;
      if ( v7 < 0x64 )
        v8 = (int)*(&unk_A9E21C + v7);
      else
        v8 = 0;
      v9 = this->baseclass_0.m_pkFrameWork[21].m_kMsgQ.m_pBase;
      if ( v9 && v8 )
        ActionWin::OnEmotionAction((ActionWin *)v9, *(_DWORD *)(v8 + 16));
      break;
    case 9u:
      v10 = lParam + 18 * this->m_uiCurPage;
      if ( v10 < 0x64 )
      {
        v11 = (int)*(&unk_A9E21C + v10);
        if ( v11 )
        {
          v12 = *(_WORD *)(v11 + 12);
          if ( v12 != -1 )
          {
            v13 = Inventory::GetItemByID(&g_kInventory, v12);
            if ( v13 )
            {
              v14 = 0;
              v15 = 1;
              while ( 1 )
              {
                if ( v15 )
                {
                  v16 = g_kInventory.m_aspEquip[v14].m_pObject;
                  if ( v16 )
                  {
                    if ( v13->m_kStruct.itemid == v16->m_kStruct.itemid )
                      break;
                  }
                }
                ++v14;
                v15 = (unsigned int)v14 < 0x1E;
                if ( v14 >= 30 )
                {
                  GameFrameWork::OnShortCutRClickItemNormalMode(
                    (GameFrameWork *)v3->baseclass_0.m_pkFrameWork,
                    v13,
                    (ShortCutItem *)v11,
                    1u);
                  return;
                }
              }
              v17 = ActionEffectItemTab::GetByItemID(v13->m_kStruct.itemid);
              if ( v17 )
              {
                v18 = ItemActionEffectDescTab::GetByItemActionID(v17->ItemActionID);
                if ( v18 )
                {
                  if ( v18->UseItem )
                    GameFrameWork::OnShortCutRClickItemUseMode(
                      (GameFrameWork *)v3->baseclass_0.m_pkFrameWork,
                      v13,
                      (ShortCutItem *)v11,
                      1u);
                }
              }
            }
          }
        }
      }
      break;
    case 0xAu:
      v19 = lParam + 18 * this->m_uiCurPage;
      if ( v19 < 0x64 )
      {
        v20 = (int)*(&unk_A9E21C + v19);
        if ( v20 )
        {
          v21 = *(_DWORD *)(v20 + 8);
          if ( v21 < 0xC0 )
          {
            v22 = g_kInventory.m_aspInv[v21].m_pObject;
            if ( v22 )
            {
              if ( v22->m_kStruct.itemid != -1 )
                GameFrameWork::OnShortCutRClickItemNormalMode(
                  (GameFrameWork *)v3->baseclass_0.m_pkFrameWork,
                  v22,
                  (ShortCutInvPosItem *)v20,
                  1u);
            }
          }
        }
      }
      break;
    case 0xBu:
      v23 = lParam + 18 * this->m_uiCurPage;
      if ( v23 < 0x64 )
      {
        v24 = (int)*(&unk_A9E21C + v23);
        if ( v24 )
        {
          v25 = (PremiumActionWin *)this->baseclass_0.m_pkFrameWork[21].m_kMsgQ.m_pBase[29].m_uiDumy[1];
          if ( v25 )
            PremiumActionWin::OnEmotionAction(v25, *(_DWORD *)(v24 + 16));
        }
      }
      break;
    default:
      return;
  }
}

//----- (0058EB60) --------------------------------------------------------
bool __thiscall ShortCutWin::Create(ShortCutWin *this, PgFrameWork *pkFrameWork, bool bVertical, bool bMainWin, int tabLevel)
{
  ShortCutWin *v5; // esi@1
  bool v6; // bl@1
  bool v7; // cl@1
  NiSourceTexture *v8; // edi@1
  int v9; // esi@2
  NiTexturePalette *v11; // ST0C_4@9
  char *v12; // eax@9
  bool v13; // al@11
  bool v14; // bl@13
  int v15; // esi@14
  bool v16; // [sp-14h] [bp-20h]@10

  v5 = this;
  v6 = bVertical;
  v7 = bMainWin;
  v5->m_iSubTabLevel = tabLevel;
  v5->m_bVerticalMode = v6;
  v5->m_bMainWinMode = v7;
  *(_DWORD *)&bVertical = 0;
  v8 = MenuTexMgr::GetTexture(4u);
  if ( !v8 )
  {
    v9 = bVertical;
    if ( bVertical && !InterlockedDecrement((volatile LONG *)(bVertical + 4)) )
    {
      if ( v9 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    }
    return 0;
  }
  *(_DWORD *)&bMainWin = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v11 = (NiTexturePalette *)bMainWin;
  v12 = Folder::Merge(&Folder::m_acMenu, "Game\\QuickSlot.nif");
  PgUtil::LoadNodeNifFile(v12, (NiPointer<NiNode> *)&bVertical, v11);
  if ( !bVertical )
    return 0;
  *(_DWORD *)&v5->m_abClockShadowWinActive[0] = 0;
  *(_DWORD *)&v5->m_abClockShadowWinActive[4] = 0;
  *(_DWORD *)&v5->m_abClockShadowWinActive[8] = 0;
  *(_DWORD *)&v5->m_abClockShadowWinActive[12] = 0;
  *(_WORD *)&v5->m_abClockShadowWinActive[16] = 0;
  v16 = v5->m_bMainWinMode;
  if ( v6 )
    v13 = ShortCutWin::CreatVerticalWin(v5, pkFrameWork, (NiPointer<NiNode> *)&bVertical, v8, v16);
  else
    v13 = ShortCutWin::CreatHorizontalWin(v5, pkFrameWork, (NiPointer<NiNode> *)&bVertical, v8, v16);
  v14 = v13;
  if ( bVertical )
  {
    v15 = bVertical;
    if ( !InterlockedDecrement((volatile LONG *)(bVertical + 4)) )
    {
      if ( v15 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
    }
  }
  return v14;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0058ECD0) --------------------------------------------------------
bool __thiscall ShortCutMgr::SetShortCut(ShortCutMgr *this, ShortCut *pkShortCut, unsigned int uiIndex, bool bSave)
{
  bool result; // al@2
  ShortCut *v5; // edi@3
  ShortCutMgr *thisa; // [sp+8h] [bp-108h]@1
  char temp[256]; // [sp+Ch] [bp-104h]@10
  unsigned int v8; // [sp+10Ch] [bp-4h]@1
  int v9; // [sp+110h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  thisa = this;
  if ( uiIndex < 0x64 )
  {
    v5 = this->m_aspShortCut[uiIndex].m_pObject;
    if ( v5 != pkShortCut )
    {
      if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      thisa->m_aspShortCut[uiIndex].m_pObject = pkShortCut;
      if ( pkShortCut )
        InterlockedIncrement((volatile LONG *)&pkShortCut->baseclass_0.m_uiRefCount);
    }
    temp[0] = 0;
    memset(&temp[1], 0, 0xFFu);
    if ( pkShortCut )
    {
      ((void (__thiscall *)(ShortCut *))pkShortCut->baseclass_0.vfptr[1].__vecDelDtor)(pkShortCut);
      sprintf(temp, "SetShortCut : Type = %d. To = %d\n");
    }
    else
    {
      sprintf(temp, "SetShortCut : Type = NULL. To = %d\n");
    }
    OutputDebugStringA(temp);
    thisa->m_bShortCutChanged = 1;
    if ( bSave == 1 )
      ShortCutMgr::ChangeIndex(thisa, uiIndex);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0058EDE0) --------------------------------------------------------
unsigned int __cdecl ItemActionTab::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E68: using guessed type int ITableBase_ItemAction_ItemActionTab___ms_pkTable;

//----- (0058EE00) --------------------------------------------------------
void __thiscall PgWin::UpdateChildWin(PgWin *this, float fCurTime)
{
  PgWin *v2; // ebx@1
  PgWin *v3; // esi@1
  int i; // edi@2
  NiPointer<NiAVObject> *v5; // ecx@4
  int v6; // eax@5
  int uiPos; // [sp+14h] [bp-4h]@1

  v2 = this;
  uiPos = 0;
  v3 = PgWin::GetNextChildWin(this, (unsigned int *)&uiPos);
  if ( v3 )
  {
    for ( i = uiPos; ; ++i )
    {
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor(
        (NiRefObject *)v3,
        LODWORD(fCurTime));
      PgWin::UpdateChildWin(v3, fCurTime);
      if ( i >= v2->baseclass_0.m_kChildren.m_uiSize )
        break;
      while ( 1 )
      {
        v5 = v2->baseclass_0.m_kChildren.m_pBase;
        v3 = (PgWin *)v5[i].m_pObject;
        if ( v3 )
        {
          v6 = ((int (__thiscall *)(NiAVObject *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v5[i].m_pObject);
          if ( v6 )
            break;
        }
LABEL_8:
        ++i;
        if ( i >= v2->baseclass_0.m_kChildren.m_uiSize )
          return;
      }
      while ( (NiRTTI *)v6 != &PgWin::m_RTTI )
      {
        v6 = *(_DWORD *)(v6 + 4);
        if ( !v6 )
          goto LABEL_8;
      }
    }
  }
}

//----- (0058EEA0) --------------------------------------------------------
ItemAction *__cdecl ItemActionTab::GetByItemActionID(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  void *v2; // eax@2
  ItemAction *result; // eax@5

  v1 = 0;
  if ( ItemActionTab::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 4), v1);
      if ( v2 )
      {
        if ( *(_WORD *)v2 == uiIndex )
          break;
      }
      ++v1;
      if ( v1 >= ItemActionTab::GetTotal() )
        goto LABEL_5;
    }
    result = (ItemAction *)CDataReader::GetRecord(
                             (CDataReader *)(ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 4),
                             v1);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A97E68: using guessed type int ITableBase_ItemAction_ItemActionTab___ms_pkTable;

//----- (0058EEF0) --------------------------------------------------------
void *__thiscall ShortCutIconWin::_vector_deleting_destructor_(ShortCutIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ShortCutIconWin::_ShortCutIconWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0058EF20) --------------------------------------------------------
void __thiscall std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>(std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *this)
{
  std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+4h] [bp-10h]@3
  char *_What; // [sp+10h] [bp-4h]@3

  v1 = this;
  this->baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0xCu);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0058EF80) --------------------------------------------------------
void *__thiscall ShortCutWin::_vector_deleting_destructor_(ShortCutWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ShortCutWin::_ShortCutWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0058EFB0) --------------------------------------------------------
void __thiscall SkillInfoWin::HideAllMoneyWin(SkillInfoWin *this)
{
  SkillInfoWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (0058F050) --------------------------------------------------------
bool __thiscall SkillInfoWin::IsMoneyShow(SkillInfoWin *this)
{
  SkillInfoWin *v1; // esi@1

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
}

//----- (0058F0B0) --------------------------------------------------------
unsigned int __thiscall SkillInfoWin::GetMoneyWinWidth(SkillInfoWin *this)
{
  SkillInfoWin *v1; // esi@1
  unsigned int v2; // edi@1
  unsigned int result; // eax@8

  v1 = this;
  v2 = 0;
  if ( (unsigned __int8)((int (*)(void))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 = ((int (*)(void))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + v1->m_uiIconWidth
       + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    result = v2
           + v1->m_uiIconWidth
           + ((int (*)(void))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
           + 2;
  else
    result = v2;
  return result;
}

//----- (0058F180) --------------------------------------------------------
void __thiscall SkillInfoWin::ShowMoneyWin(SkillInfoWin *this, int iXPos, int iYPos, __int64 i64Money)
{
  SkillInfoWin *v4; // esi@1
  int v5; // edi@2
  int v6; // edi@2
  int v7; // edi@5
  int v8; // edi@7
  int v9; // edi@9
  int v10; // edi@11
  char acMoneyStr[32]; // [sp+14h] [bp-24h]@2
  unsigned int v12; // [sp+34h] [bp-4h]@1
  int v13; // [sp+38h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v4 = this;
  if ( User::GetGem(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      iXPos,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v5 = iXPos
       + ((int (*)(void))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v5,
      iYPos);
    v6 = v5 + v4->m_uiIconWidth + 1;
  }
  else
  {
    v6 = iXPos;
  }
  if ( User::GetGold(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v7 = v6
       + ((int (*)(void))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v7,
      iYPos);
    v6 = v7 + v4->m_uiIconWidth + 1;
  }
  if ( User::GetSilver(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v8 = v6
       + ((int (*)(void))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v8,
      iYPos);
    v6 = v8 + v4->m_uiIconWidth + 1;
  }
  if ( User::GetCopper(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v9 = v6
       + ((int (*)(void))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v9,
      iYPos);
    v6 = v9 + v4->m_uiIconWidth + 1;
  }
  if ( !i64Money )
  {
    ((void (__stdcall *)(signed int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%d");
    ((void (__stdcall *)(_DWORD))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v10 = v6
        + ((int (*)(void))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      iYPos);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0058F530) --------------------------------------------------------
void __thiscall SkillInfoWin::AdjustSizeIfIamToolTipWin(SkillInfoWin *this)
{
  SkillInfoWin *v1; // esi@1
  int (*v2)(void); // edx@1
  int v3; // eax@1
  PgFont *v4; // edi@1
  int v5; // ebx@2
  char *v6; // eax@3
  unsigned int v7; // eax@12
  tagSIZE kSize; // [sp+8h] [bp-18h]@4
  SkillInfoWin *v9; // [sp+10h] [bp-10h]@1
  int v10; // [sp+14h] [bp-Ch]@2
  PgWinText **v11; // [sp+18h] [bp-8h]@2
  int uiCy; // [sp+1Ch] [bp-4h]@2

  v1 = this;
  v2 = (int (*)(void))this->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor;
  v9 = this;
  v3 = v2();
  v4 = (PgFont *)v3;
  if ( v3 )
  {
    SelectObject(*(HDC *)(v3 + 192), *(HGDIOBJ *)(v3 + 184));
    v5 = 0;
    uiCy = 0;
    v11 = v1->m_apkTextWin;
    v10 = 60;
    do
    {
      v6 = (char *)((int (*)(void))(*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
      if ( v6 )
      {
        PgFont::GetTextSize(v4, v6, strlen(v6), &kSize);
        if ( (unsigned int)kSize.cx > v5 )
          v5 = kSize.cx;
        v1 = v9;
        uiCy += kSize.cy + 2;
      }
      ++v11;
      --v10;
    }
    while ( v10 );
    if ( (unsigned __int8)((int (*)(void))v1->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      uiCy += v1->m_uiIconHeight + 2;
      v7 = SkillInfoWin::GetMoneyWinWidth(v1);
      if ( v7 > v5 )
        v5 = v7;
    }
    if ( v5 )
      ((void (__thiscall *)(SkillInfoWin *, unsigned int, unsigned int))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
        v1,
        v5 + 2 * v1->baseclass_0.m_uiEdgeWidth,
        uiCy + 2 * v1->baseclass_0.m_uiEdgeHeight);
  }
}

//----- (0058F680) --------------------------------------------------------
bool __thiscall SkillInfoWin::Create(SkillInfoWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight)
{
  SkillInfoWin *v4; // esi@1
  bool result; // al@2
  PgFont *v6; // eax@3
  PgFont *v7; // ebx@3
  signed int v8; // edi@4
  PgFont *v9; // eax@6
  NiTexturePalette *v10; // edi@10
  char *v11; // eax@12
  PgSprData *v12; // eax@13
  PgWinSpr *v13; // eax@13
  NiAVObject *v14; // edx@13
  PgSprData *v15; // eax@13
  PgWinSpr *v16; // eax@13
  NiAVObject *v17; // edx@13
  PgSprData *v18; // eax@13
  PgWinSpr *v19; // eax@13
  NiAVObject *v20; // edx@13
  PgSprData *v21; // eax@13
  PgWinSpr *v22; // eax@13
  PgWinSpr *v23; // ecx@13
  int v24; // eax@13
  PgWinSpr *v25; // ecx@13
  PgFont *v26; // eax@13
  PgFont *v27; // eax@13
  PgFont *v28; // eax@13
  PgFont *v29; // eax@13
  unsigned int v30; // esi@14
  int uiLeft; // [sp+0h] [bp-10h]@13
  int v32; // [sp+Ch] [bp-4h]@9

  v4 = this;
  if ( !FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, 0, 0)
    || (v6 = Font::Get(0), (v7 = v6) == 0) )
    goto LABEL_20;
  v4->m_iFontHeight = v6->m_uiDefHeight;
  v8 = 0;
  do
  {
    if ( v8 )
    {
      v4->m_apkTextWin[v8] = PgWinText::CreateWin(
                               v4->baseclass_0.m_uiEdgeWidth,
                               v8 * (v4->m_iFontHeight + 2) + v4->baseclass_0.m_uiEdgeHeight + 2,
                               0x100u,
                               v4->m_iFontHeight + 4,
                               v7,
                               &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                               0,
                               0);
    }
    else
    {
      v9 = Font::Get(BOLD);
      v4->m_apkTextWin[0] = PgWinText::CreateWin(
                              v4->baseclass_0.m_uiEdgeWidth,
                              v4->baseclass_0.m_uiEdgeHeight + 2,
                              0x100u,
                              v4->m_iFontHeight + 4,
                              v9,
                              &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                              0,
                              0);
    }
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[v8++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  while ( v8 < 60 );
  ((void (__thiscall *)(SkillInfoWin *, unsigned int, unsigned int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v4,
    2 * v4->baseclass_0.m_uiEdgeWidth + 173,
    v4->m_iFontHeight + 2 * v4->baseclass_0.m_uiEdgeHeight);
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v4,
    0);
  uiEdgeHeight = 0;
  v32 = 0;
  if ( !pkTexture )
    goto LABEL_20;
  v10 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v11 = Folder::Merge(&Folder::m_acMenu, "Game\\Money.nif");
  PgUtil::LoadNodeNifFile(v11, (NiPointer<NiNode> *)&uiEdgeHeight, v10);
  if ( uiEdgeHeight )
  {
    v12 = PgSprData::Create((NiAVObject *)uiEdgeHeight, "MyGemBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v13 = PgWinSpr::CreateWin(0, 0, v12, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v14 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkGemIcon = v13;
    v15 = PgSprData::Create(v14, "MyGoldBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v16 = PgWinSpr::CreateWin(0, 0, v15, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v17 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkGoldIcon = v16;
    v18 = PgSprData::Create(v17, "MySilverBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v19 = PgWinSpr::CreateWin(0, 0, v18, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v20 = (NiAVObject *)uiEdgeHeight;
    v4->m_pkSilverIcon = v19;
    v21 = PgSprData::Create(v20, "MyCopperBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
    v22 = PgWinSpr::CreateWin(0, 0, v21, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v23 = v4->m_pkGemIcon;
    v4->m_pkCopperIcon = v22;
    v24 = ((int (*)(void))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v25 = v4->m_pkGemIcon;
    v4->m_uiIconWidth = v24;
    v4->m_uiIconHeight = ((int (*)(void))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v26 = Font::Get(SMALL);
    v4->m_pkGemText = AutoSizingTextWin::CreateWin(0, 0, v26, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v27 = Font::Get(SMALL);
    v4->m_pkGoldText = AutoSizingTextWin::CreateWin(0, 0, v27, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v28 = Font::Get(SMALL);
    v4->m_pkSilverText = AutoSizingTextWin::CreateWin(0, 0, v28, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v29 = Font::Get(SMALL);
    v4->m_pkCopperText = AutoSizingTextWin::CreateWin(0, 0, v29, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    SkillInfoWin::HideAllMoneyWin(v4);
    v32 = -1;
    if ( uiEdgeHeight )
    {
      v30 = uiEdgeHeight;
      if ( !InterlockedDecrement((volatile LONG *)(uiEdgeHeight + 4)) )
      {
        if ( v30 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v30)(v30, 1);
      }
    }
    result = 1;
  }
  else
  {
LABEL_20:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0058F9B0) --------------------------------------------------------
char *__cdecl GetTimeStr(int iTime)
{
  float v1; // ST20_4@5
  char *v2; // eax@2
  char *v3; // eax@4
  char *v4; // eax@6
  char acTmp[32]; // [sp+18h] [bp-24h]@2
  unsigned int v7; // [sp+38h] [bp-4h]@1
  int v8; // [sp+3Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  acStr_0[0] = 0;
  if ( iTime / 1000 / 3600 )
  {
    v2 = TextData::Get(0x9CB3EDF8u);
    sprintf(acTmp, v2);
    strcat(acStr_0, acTmp);
  }
  if ( iTime / 1000 / 60 != 60 * iTime / 1000 / 3600 )
  {
    v3 = TextData::Get(0x9CACA8F9u);
    sprintf(acTmp, v3);
    strcat(acStr_0, acTmp);
  }
  v1 = (double)iTime / 1000.0
     - (double)(60 * (iTime / 1000 / 60 - 60 * iTime / 1000 / 3600))
     - (double)(3600 * iTime / 1000 / 3600);
  if ( 0.0 != v1 )
  {
    v4 = TextData::Get(0x98B2A8EEu);
    sprintf(acTmp, v4);
    strcat(acStr_0, acTmp);
  }
  return acStr_0;
}
// A85C00: using guessed type int __security_cookie;

//----- (0058FB60) --------------------------------------------------------
bool __thiscall SkillInfoWin::IsPassiveEffect(SkillInfoWin *this, unsigned __int16 kActiveID, char *pEffectRate)
{
  int v3; // esi@1
  int v4; // eax@3
  unsigned int v5; // edi@5
  void *v6; // eax@6
  void *v7; // esi@6
  unsigned __int16 *v8; // eax@8
  int v9; // eax@10
  char v10; // cl@11
  bool result; // al@15
  int pkActiveSkillInfo; // [sp+Ch] [bp-20Ch]@4
  char acConversionData1[256]; // [sp+14h] [bp-204h]@10
  char acSkillName[256]; // [sp+114h] [bp-104h]@10
  unsigned int v15; // [sp+214h] [bp-4h]@1
  int v16; // [sp+218h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kActiveID)
    && kActiveID <= *(_WORD *)(v3 + 200)
    && (v4 = *(_DWORD *)(v3 + 196) + 4 * kActiveID, *(_DWORD *)v4)
    && (pkActiveSkillInfo = *(_DWORD *)v4) != 0
    && (v5 = 0, ActiveSkillGroupTab::GetTotal()) )
  {
    while ( 1 )
    {
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 4), v5);
      v7 = v6;
      if ( v6 )
      {
        if ( !strcmp((const char *)(pkActiveSkillInfo + 2), (const char *)v6) )
        {
          v8 = (unsigned __int16 *)PasSkillInfoTab::GetByActiveSkillGroupIndex(*((ActiveSkillGroupIndex *)v7 + 8));
          if ( v8 )
          {
            if ( Skill::IsLearnPassiveSkill(*v8) )
            {
              acSkillName[0] = 0;
              memset(&acSkillName[1], 0, 0xFFu);
              acConversionData1[0] = 0;
              memset(&acConversionData1[1], 0, 0xFFu);
              sprintf(acSkillName, "%s");
              v9 = (int)acSkillName;
              do
                v10 = *(_BYTE *)v9++;
              while ( v10 );
              strncpy(acConversionData1, acSkillName, v9 - (_DWORD)&acSkillName[1] - 2);
              if ( !strcmp(acConversionData1, "HealReinforce") )
              {
                sprintf(pEffectRate, "%d%%");
                return 1;
              }
              if ( !strcmp(acConversionData1, "BiffTimeIncrease") )
                break;
            }
          }
        }
      }
      ++v5;
      if ( v5 >= ActiveSkillGroupTab::GetTotal() )
        goto LABEL_15;
    }
    sprintf(pEffectRate, "%d%%");
    result = 1;
  }
  else
  {
LABEL_15:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97E9C: using guessed type int ITableBase_ActiveSkillGroup_ActiveSkillGroupTab___ms_pkTable;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (0058FDF0) --------------------------------------------------------
int __thiscall SkillInfoWin::FindPassiveEffect(SkillInfoWin *this, unsigned __int16 kActiveID, char *pEffectRate)
{
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edi@4
  unsigned int v6; // esi@5
  void *v7; // eax@6
  void *v8; // esi@6
  unsigned __int16 *v9; // eax@8
  signed __int16 v10; // bx@9
  int v11; // eax@10
  char v12; // cl@11
  signed int j; // esi@12
  char *v14; // eax@16
  unsigned __int16 *v15; // edi@16
  int v17; // eax@22
  char v18; // cl@23
  char *v19; // [sp-Ch] [bp-42Ch]@14
  int pkActiveSkillInfo; // [sp+10h] [bp-410h]@4
  unsigned int i; // [sp+18h] [bp-408h]@5
  char acConversionData3[256]; // [sp+1Ch] [bp-404h]@10
  char acSkillName[256]; // [sp+11Ch] [bp-304h]@22
  char acFirstSkill[256]; // [sp+21Ch] [bp-204h]@10
  char acConversionData1[256]; // [sp+31Ch] [bp-104h]@22
  unsigned int v26; // [sp+41Ch] [bp-4h]@1
  int v27; // [sp+420h] [bp+0h]@1

  v26 = (unsigned int)&v27 ^ __security_cookie;
  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                           kActiveID)
    || kActiveID > *(_WORD *)(v3 + 200)
    || (v4 = *(_DWORD *)(v3 + 196) + 4 * kActiveID, !*(_DWORD *)v4)
    || (v5 = *(_DWORD *)v4, (pkActiveSkillInfo = *(_DWORD *)v4) == 0)
    || (v6 = 0, i = 0, !ActiveSkillGroupTab::GetTotal()) )
    return 0;
  while ( 1 )
  {
    v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 4), v6);
    v8 = v7;
    if ( !v7
      || strcmp((const char *)(v5 + 2), (const char *)v7)
      || (v9 = (unsigned __int16 *)PasSkillInfoTab::GetByActiveSkillGroupIndex(*((ActiveSkillGroupIndex *)v8 + 8))) == 0
      || (v10 = -1, !Skill::IsLearnPassiveSkill(*v9)) )
      goto LABEL_27;
    acFirstSkill[0] = 0;
    memset(&acFirstSkill[1], 0, 0xFFu);
    acConversionData3[0] = 0;
    memset(&acConversionData3[1], 0, 0xFFu);
    sprintf(acFirstSkill, "%s");
    v11 = (int)acFirstSkill;
    do
      v12 = *(_BYTE *)v11++;
    while ( v12 );
    strncpy(acConversionData3, acFirstSkill, v11 - (_DWORD)&acFirstSkill[1] - 2);
    for ( j = 2; ; ++j )
    {
      v19 = j >= 10 ? "%s%d" : "%s0%d";
      v14 = fs(v19);
      v15 = (unsigned __int16 *)PasSkillInfoTab::GetByInxName(v14);
      if ( !v15 )
        break;
      if ( !Skill::IsLearnPassiveSkill(*v15) )
        break;
      v10 = *v15;
    }
    if ( v10 != -1 && !PasSkillInfoTab::GetByID(v10) )
      return 0;
    acSkillName[0] = 0;
    memset(&acSkillName[1], 0, 0xFFu);
    acConversionData1[0] = 0;
    memset(&acConversionData1[1], 0, 0xFFu);
    sprintf(acSkillName, "%s");
    v17 = (int)acSkillName;
    do
      v18 = *(_BYTE *)v17++;
    while ( v18 );
    strncpy(acConversionData1, acSkillName, v17 - (_DWORD)&acSkillName[1] - 2);
    if ( !strcmp(acConversionData1, "HealReinforce") )
    {
      sprintf(pEffectRate, "%d%%");
      return 1;
    }
    if ( !strcmp(acConversionData1, "BiffTimeIncrease") )
      break;
    v5 = pkActiveSkillInfo;
LABEL_27:
    ++i;
    v6 = i;
    if ( i >= ActiveSkillGroupTab::GetTotal() )
      return 0;
  }
  sprintf(pEffectRate, "%d%%");
  return 2;
}
// A85C00: using guessed type int __security_cookie;
// A97E9C: using guessed type int ITableBase_ActiveSkillGroup_ActiveSkillGroupTab___ms_pkTable;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00590180) --------------------------------------------------------
int __thiscall SkillInfoWin::SetPassiveEffect(SkillInfoWin *this, unsigned __int16 kActiveID, int index)
{
  int v3; // edi@1
  int v4; // eax@3
  int v5; // ebx@4
  void *v6; // eax@6
  void *v7; // edi@6
  unsigned __int16 *v8; // eax@8
  unsigned __int16 *v9; // edi@8
  int v10; // eax@10
  char v11; // cl@11
  char *v13; // ecx@16
  int v14; // eax@16
  int v15; // edi@16
  char v16; // dl@17
  NiRefObjectVtbl *v17; // edi@18
  char *v18; // eax@18
  char *v19; // eax@18
  int v20; // eax@18
  char v21; // dl@19
  NiRefObjectVtbl *v22; // edi@20
  char *v23; // eax@20
  char *v24; // eax@20
  char *v25; // ecx@21
  int v26; // eax@21
  int v27; // edi@21
  char v28; // dl@22
  NiRefObjectVtbl *v29; // edi@23
  char *v30; // eax@23
  char *v31; // eax@23
  int v32; // eax@23
  char v33; // dl@24
  NiRefObjectVtbl *v34; // edi@25
  char *v35; // eax@25
  char *v36; // eax@25
  SkillInfoWin *v37; // [sp+10h] [bp-50Ch]@1
  unsigned int i; // [sp+14h] [bp-508h]@5
  char acConversionData[256]; // [sp+18h] [bp-504h]@10
  char acPassiveInxName[256]; // [sp+118h] [bp-404h]@10
  char acConversionData1[256]; // [sp+218h] [bp-304h]@12
  char acPassiveSkillName[256]; // [sp+318h] [bp-204h]@16
  char acSkillName[256]; // [sp+418h] [bp-104h]@12
  unsigned int v44; // [sp+518h] [bp-4h]@1
  int v45; // [sp+51Ch] [bp+0h]@1

  v44 = (unsigned int)&v45 ^ __security_cookie;
  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v37 = this;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                           kActiveID)
    || kActiveID > *(_WORD *)(v3 + 200)
    || (v4 = *(_DWORD *)(v3 + 196) + 4 * kActiveID, !*(_DWORD *)v4)
    || (v5 = *(_DWORD *)v4) == 0
    || (i = 0, !ActiveSkillGroupTab::GetTotal()) )
    return index;
  while ( 1 )
  {
    v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 4), i);
    v7 = v6;
    if ( !v6
      || strcmp((const char *)(v5 + 2), (const char *)v6)
      || (v8 = (unsigned __int16 *)PasSkillInfoTab::GetByActiveSkillGroupIndex(*((ActiveSkillGroupIndex *)v7 + 8)),
          (v9 = v8) == 0)
      || !Skill::IsLearnPassiveSkill(*v8) )
      goto LABEL_14;
    acPassiveInxName[0] = 0;
    memset(&acPassiveInxName[1], 0, 0xFFu);
    acConversionData[0] = 0;
    memset(&acConversionData[1], 0, 0xFFu);
    sprintf(acPassiveInxName, "%s");
    v10 = (int)acPassiveInxName;
    do
      v11 = *(_BYTE *)v10++;
    while ( v11 );
    strncpy(acConversionData, acPassiveInxName, v10 - (_DWORD)&acPassiveInxName[1] - 2);
    acSkillName[0] = 0;
    memset(&acSkillName[1], 0, 0xFFu);
    acConversionData1[0] = 0;
    memset(&acConversionData1[1], 0, 0xFFu);
    if ( !strcmp(acConversionData, "HealReinforce") )
      break;
    if ( !strcmp(acConversionData, "BiffTimeIncrease") )
    {
      acPassiveSkillName[0] = 0;
      memset(&acPassiveSkillName[1], 0, 0xFFu);
      v25 = (char *)(v9 + 17);
      v26 = (int)(v9 + 17);
      v27 = (int)((char *)v9 + 35);
      do
        v28 = *(_BYTE *)v26++;
      while ( v28 );
      strncpy(acPassiveSkillName, v25, v26 - v27 - 4);
      ((void (__stdcall *)(D3DXCOLOR *))v37->m_apkTextWin[index]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
      v29 = v37->m_apkTextWin[index]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v30 = TextData2::Get(0x39A46A8Cu);
      v31 = fs(v30);
      v29[118].__vecDelDtor((NiRefObject *)v37->m_apkTextWin[index], (unsigned int)v31);
      sprintf(acSkillName, "%s");
      v32 = (int)acSkillName;
      do
        v33 = *(_BYTE *)v32++;
      while ( v33 );
      strncpy(acConversionData1, acSkillName, v32 - (_DWORD)&acSkillName[1] - 4);
      ((void (__stdcall *)(D3DXCOLOR *))v37->m_apkTextWin[index + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
      v34 = v37->m_apkTextWin[index + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v35 = TextData2::Get(0x4053368Cu);
      v36 = fs(v35);
      v34[118].__vecDelDtor((NiRefObject *)v37->m_apkTextWin[index + 1], (unsigned int)v36);
      ((void (__stdcall *)(_DWORD))v37->m_apkTextWin[index + 2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
      return index + 3;
    }
LABEL_14:
    ++i;
    if ( i >= ActiveSkillGroupTab::GetTotal() )
      return index;
  }
  acPassiveSkillName[0] = 0;
  memset(&acPassiveSkillName[1], 0, 0xFFu);
  v13 = (char *)(v9 + 17);
  v14 = (int)(v9 + 17);
  v15 = (int)((char *)v9 + 35);
  do
    v16 = *(_BYTE *)v14++;
  while ( v16 );
  strncpy(acPassiveSkillName, v13, v14 - v15 - 4);
  ((void (__stdcall *)(D3DXCOLOR *))v37->m_apkTextWin[index]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  v17 = v37->m_apkTextWin[index]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData2::Get(0x39A46A8Cu);
  v19 = fs(v18);
  v17[118].__vecDelDtor((NiRefObject *)v37->m_apkTextWin[index], (unsigned int)v19);
  sprintf(acSkillName, "%s");
  v20 = (int)acSkillName;
  do
    v21 = *(_BYTE *)v20++;
  while ( v21 );
  strncpy(acConversionData1, acSkillName, v20 - (_DWORD)&acSkillName[1] - 4);
  ((void (__stdcall *)(D3DXCOLOR *))v37->m_apkTextWin[index + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v22 = v37->m_apkTextWin[index + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData2::Get(0xFAEFB4EFu);
  v24 = fs(v23);
  v22[118].__vecDelDtor((NiRefObject *)v37->m_apkTextWin[index + 1], (unsigned int)v24);
  ((void (__stdcall *)(_DWORD))v37->m_apkTextWin[index + 2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  return index + 3;
}
// A85C00: using guessed type int __security_cookie;
// A97E9C: using guessed type int ITableBase_ActiveSkillGroup_ActiveSkillGroupTab___ms_pkTable;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00590690) --------------------------------------------------------
int __thiscall SkillInfoWin::SetMinMaxWCRate(SkillInfoWin *this, ActiveSkillInfo *pkInfo, int iIndex)
{
  unsigned int v3; // ecx@1
  char v4; // al@1
  char *v5; // ebx@1
  const char *v6; // esi@1
  unsigned int v7; // edx@2
  char *v8; // eax@4
  char *v9; // eax@4
  char *v10; // eax@5
  unsigned int v11; // ecx@7
  unsigned int v12; // edx@8
  char *v13; // eax@11
  char *v14; // eax@12
  int result; // eax@22
  char *v16; // [sp-8h] [bp-18h]@14
  SkillInfoWin *v17; // [sp+Ch] [bp-4h]@1

  v17 = this;
  v3 = pkInfo->MinWCRate;
  v4 = 0;
  v5 = 0;
  v6 = 0;
  if ( v3 )
  {
    v7 = pkInfo->MaxWCRate;
    if ( v3 != v7 && v7 )
    {
      v8 = TextData2::Get(0x82B122Au);
      v9 = fs(v8);
    }
    else
    {
      v10 = TextData2::Get(0x92B122Au);
      v9 = fs(v10);
    }
    v5 = v9;
    v4 = 1;
  }
  v11 = pkInfo->MinWC;
  if ( v11 )
  {
    v12 = pkInfo->MaxWC;
    if ( v11 == v12 )
    {
      if ( v4 )
      {
        v16 = " + %d";
        goto LABEL_18;
      }
    }
    else
    {
      if ( v12 )
      {
        if ( v4 )
        {
          v13 = fs(" + %d~%d");
        }
        else
        {
          v14 = TextData2::Get(0xA2B122Au);
          v13 = fs(v14);
        }
        goto LABEL_19;
      }
      if ( v4 )
      {
        v16 = " + %d";
LABEL_18:
        v13 = fs(v16);
LABEL_19:
        v6 = v13;
        goto LABEL_20;
      }
    }
    v16 = TextData2::Get(0xB2B122Au);
    goto LABEL_18;
  }
LABEL_20:
  if ( v5 )
  {
    if ( v6 )
    {
      strcat(v5, v6);
      ((void (__stdcall *)(_DWORD))v17->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v5);
      result = iIndex + 1;
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v17->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v5);
      result = iIndex + 1;
    }
  }
  else
  {
    if ( v6 )
    {
      ((void (__stdcall *)(_DWORD))v17->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v6);
      result = iIndex + 1;
    }
    else
    {
      result = iIndex;
    }
  }
  return result;
}

//----- (00590830) --------------------------------------------------------
int __thiscall SkillInfoWin::SetMinMaxMARate(SkillInfoWin *this, ActiveSkillInfo *pkInfo, int iIndex)
{
  unsigned int v3; // ecx@1
  char v4; // al@1
  char *v5; // ebx@1
  const char *v6; // esi@1
  unsigned int v7; // edx@2
  char *v8; // eax@4
  char *v9; // eax@4
  char *v10; // eax@5
  unsigned int v11; // ecx@7
  unsigned int v12; // edx@8
  char *v13; // eax@11
  char *v14; // eax@12
  int result; // eax@22
  char *v16; // [sp-8h] [bp-18h]@14
  SkillInfoWin *v17; // [sp+Ch] [bp-4h]@1

  v17 = this;
  v3 = pkInfo->MinMARate;
  v4 = 0;
  v5 = 0;
  v6 = 0;
  if ( v3 )
  {
    v7 = pkInfo->MaxMARate;
    if ( v3 != v7 && v7 )
    {
      v8 = TextData2::Get(0x8130F2Au);
      v9 = fs(v8);
    }
    else
    {
      v10 = TextData2::Get(0x9130F2Au);
      v9 = fs(v10);
    }
    v5 = v9;
    v4 = 1;
  }
  v11 = pkInfo->MinMA;
  if ( v11 )
  {
    v12 = pkInfo->MaxMA;
    if ( v11 == v12 )
    {
      if ( v4 )
      {
        v16 = " + %d";
        goto LABEL_18;
      }
    }
    else
    {
      if ( v12 )
      {
        if ( v4 )
        {
          v13 = fs(" + %d~%d");
        }
        else
        {
          v14 = TextData2::Get(0xA130F2Au);
          v13 = fs(v14);
        }
        goto LABEL_19;
      }
      if ( v4 )
      {
        v16 = " + %d";
LABEL_18:
        v13 = fs(v16);
LABEL_19:
        v6 = v13;
        goto LABEL_20;
      }
    }
    v16 = TextData2::Get(0xB130F2Au);
    goto LABEL_18;
  }
LABEL_20:
  if ( v5 )
  {
    if ( v6 )
    {
      strcat(v5, v6);
      ((void (__stdcall *)(_DWORD))v17->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v5);
      result = iIndex + 1;
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v17->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v5);
      result = iIndex + 1;
    }
  }
  else
  {
    if ( v6 )
    {
      ((void (__stdcall *)(_DWORD))v17->m_apkTextWin[iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v6);
      result = iIndex + 1;
    }
    else
    {
      result = iIndex;
    }
  }
  return result;
}

//----- (005909D0) --------------------------------------------------------
void __thiscall SkillInfoWin::WordrapSetText(SkillInfoWin *this, const char *pkTextData, int *nIndex, int nMaxPixcel)
{
  SkillInfoWin *v4; // ebx@1
  int v5; // edi@2
  int v6; // eax@3
  char v7; // cl@4
  unsigned int v8; // eax@5
  HDC__ *hDC; // [sp+0h] [bp-134h]@1
  char *pcStr; // [sp+4h] [bp-130h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strbuf; // [sp+8h] [bp-12Ch]@3
  char acStr[256]; // [sp+24h] [bp-110h]@1
  unsigned int v13; // [sp+124h] [bp-10h]@1
  int v14; // [sp+130h] [bp-4h]@5
  int v15; // [sp+134h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v4 = this;
  hDC = *(HDC__ **)(((int (__stdcall *)(unsigned int))this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)((unsigned int)&v15 ^ __security_cookie)
                  + 192);
  pcStr = (char *)pkTextData;
  acStr[0] = 0;
  memset(&acStr[1], 0, 0xFFu);
  while ( *nIndex < 60 )
  {
    v5 = PgUtil::StringPixelCopy(acStr, pcStr, hDC, nMaxPixcel);
    if ( !v5 )
      break;
    v6 = (int)acStr;
    strbuf.baseclass_0._Myres = 15;
    strbuf.baseclass_0._Mysize = 0;
    strbuf.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v7 = *(_BYTE *)v6++;
    while ( v7 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strbuf, acStr, v6 - (_DWORD)&acStr[1]);
    v14 = 0;
    v8 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strbuf, "\n", 0, 1u);
    if ( v8 == -1 )
    {
      acStr[v5] = 0;
    }
    else
    {
      acStr[v8] = 0;
      v5 = v8 + 1;
    }
    pcStr += v5;
    ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    if ( !((int (*)(void))v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)() )
      ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    ++*nIndex;
    v14 = -1;
    if ( strbuf.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strbuf);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00590B90) --------------------------------------------------------
void __thiscall SkillInfoWin::SetTextBeginNewLine(SkillInfoWin *this, const char *pkTextData, int *nIndex, D3DXCOLOR *kColor)
{
  SkillInfoWin *v4; // edi@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@1
  int v6; // ebx@4
  int v7; // eax@5
  char v8; // cl@6
  unsigned int v9; // eax@7
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // eax@10
  tagSIZE kSize; // [sp+0h] [bp-144h]@1
  HDC__ *hDC; // [sp+8h] [bp-13Ch]@3
  D3DXCOLOR *v13; // [sp+Ch] [bp-138h]@1
  int nMaxPixcel; // [sp+10h] [bp-134h]@1
  char *pcStr; // [sp+14h] [bp-130h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strbuf; // [sp+18h] [bp-12Ch]@5
  char acStr[256]; // [sp+34h] [bp-110h]@3
  unsigned int v18; // [sp+134h] [bp-10h]@1
  int v19; // [sp+140h] [bp-4h]@7
  int v20; // [sp+144h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v4 = this;
  v5 = this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
  v13 = kColor;
  ((void (__stdcall *)(tagSIZE *, unsigned int))v5)(&kSize, (unsigned int)&v20 ^ __security_cookie);
  nMaxPixcel = kSize.cx;
  if ( kSize.cx <= 300 )
    nMaxPixcel = 300;
  hDC = *(HDC__ **)(((int (*)(void))v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)()
                  + 192);
  pcStr = (char *)pkTextData;
  memset(acStr, 0, 0x100u);
  while ( *nIndex < 60 )
  {
    v6 = PgUtil::StringPixelCopy(acStr, pcStr, hDC, nMaxPixcel);
    if ( !v6 )
      break;
    v7 = (int)acStr;
    strbuf.baseclass_0._Myres = 15;
    strbuf.baseclass_0._Mysize = 0;
    strbuf.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v8 = *(_BYTE *)v7++;
    while ( v8 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strbuf, acStr, v7 - (_DWORD)&acStr[1]);
    v19 = 0;
    v9 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strbuf, "\n", 0, 1u);
    if ( v9 == -1 )
    {
      acStr[v6] = 0;
    }
    else
    {
      acStr[v9] = 0;
      v6 = v9 + 1;
    }
    v10 = v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    pcStr += v6;
    ((void (__stdcall *)(_DWORD))v10)(acStr);
    ((void (__stdcall *)(D3DXCOLOR *))v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v13);
    if ( !((int (*)(void))v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)() )
      ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[*nIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    ++*nIndex;
    v19 = -1;
    if ( strbuf.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strbuf);
    memset(acStr, 0, 0x100u);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00590DC0) --------------------------------------------------------
int __thiscall SkillInfoWin::SetPassiveSkillInfo(SkillInfoWin *this, unsigned __int16 kSkillID, bool bBuy)
{
  SkillInfoWin *v3; // edi@1
  int v4; // esi@1
  signed int v5; // ebx@1
  unsigned int v6; // esi@4
  int v7; // esi@8
  int v8; // eax@13
  NiRefObjectVtbl *v9; // esi@20
  char *v10; // eax@20
  signed int v11; // esi@20
  NiRefObjectVtbl *v12; // ebx@24
  char *v13; // eax@24
  void *(__thiscall *v14)(NiRefObject *, unsigned int); // edx@27
  NiRefObjectVtbl *v15; // ebx@28
  char *v16; // eax@28
  char *v17; // eax@28
  char *v18; // eax@30
  int v19; // esi@33
  void *(__thiscall *v20)(NiRefObject *, unsigned int); // eax@35
  int result; // eax@38
  D3DXCOLOR *v22; // [sp-4h] [bp-130h]@31
  __int64 kWhoEquip; // [sp+Ch] [bp-120h]@18
  int pkViewInfo; // [sp+18h] [bp-114h]@9
  bool bLevelSatisfied; // [sp+1Fh] [bp-10Dh]@18
  void *iIndex; // [sp+20h] [bp-10Ch]@7
  char bClassSatisfied; // [sp+27h] [bp-105h]@18
  char acStr[256]; // [sp+28h] [bp-104h]@20
  unsigned int v29; // [sp+128h] [bp-4h]@1
  int v30; // [sp+12Ch] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = this;
  SkillInfoWin::HideAllMoneyWin(this);
  v4 = (int)v3->m_apkTextWin;
  v5 = 60;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v4 + 472))(&unk_9ABAD5);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v4 + 468))(&Color::m_kDxWhiteColor);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  if ( kSkillID == -1 )
    goto LABEL_42;
  v6 = 0;
  if ( ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
  {
    while ( *(_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                        v6) != kSkillID )
    {
      ++v6;
      if ( v6 >= ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
        goto LABEL_7;
    }
    iIndex = CDataReader::GetRecord((CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4), v6);
  }
  else
  {
LABEL_7:
    iIndex = 0;
  }
  v7 = ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable,
                          kSkillID) )
  {
    if ( kSkillID <= *(_WORD *)(v7 + 200) )
    {
      v8 = *(_DWORD *)(v7 + 196) + 4 * kSkillID;
      pkViewInfo = *(_DWORD *)v8 ? *(_DWORD *)v8 : 0;
    }
    else
    {
      pkViewInfo = 0;
    }
  }
  else
  {
    pkViewInfo = 0;
  }
  if ( iIndex && pkViewInfo )
  {
    bLevelSatisfied = *(_DWORD *)(pkViewInfo + 338) <= (signed int)User::Lv(&g_kUser);
    kWhoEquip = CharClass::GetBitbyClassType((UseClassType)*(_DWORD *)(pkViewInfo + 342));
    bClassSatisfied = 1;
    if ( !(kWhoEquip & (1i64 << User::GetMainCharClass(&g_kUser))) )
      bClassSatisfied = 0;
    sprintf(acStr, "%s");
    ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    ((void (__stdcall *)(D3DXCOLOR *))v3->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v9 = v3->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v10 = TextData::Get(0x3597A68Cu);
    v9[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[1], (unsigned int)v10);
    v11 = 2;
    if ( strcmp(
           (const char *)((int (*)(void))v3->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(),
           " ") )
    {
      v11 = 3;
      ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    }
    if ( Skill::IsLearnPassiveSkill(kSkillID) && bBuy )
    {
      v12 = v3->m_apkTextWin[v11]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v13 = TextData::Get(0xA3420FF4u);
      v12[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[v11], (unsigned int)v13);
      ((void (__stdcall *)(D3DXCOLOR *))v3->m_apkTextWin[v11++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    }
    if ( v11 > 0
      && strcmp((const char *)(*(int (**)(void))(**((_DWORD **)&v3->baseclass_0.m_bLock + v11) + 484))(), " ") )
    {
      v14 = v3->m_apkTextWin[v11++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
      ((void (__stdcall *)(_DWORD))v14)(" ");
    }
    CharClass::GetEquipableClassSortStr(kWhoEquip, acStr, 0x100u);
    v15 = v3->m_apkTextWin[v11]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = TextData::Get(0x9FF5FBECu);
    v17 = fs(v16);
    v15[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[v11], (unsigned int)v17);
    if ( !bClassSatisfied )
      ((void (__stdcall *)(D3DXCOLOR *))v3->m_apkTextWin[v11]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    v18 = TextData::Get(0x98F7ED01u);
    sprintf(acStr, v18);
    ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[v11 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    if ( bLevelSatisfied )
      v22 = &Color::m_kDxWhiteColor;
    else
      v22 = &Color::m_kDxRedColor;
    ((void (__stdcall *)(D3DXCOLOR *))v3->m_apkTextWin[v11 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v22);
    v19 = v11 + 2;
    iIndex = (void *)v19;
    if ( v19 > 0
      && strcmp((const char *)(*(int (**)(void))(**((_DWORD **)&v3->baseclass_0.m_bLock + v19) + 484))(), " ") )
    {
      v20 = v3->m_apkTextWin[v19++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
      iIndex = (void *)v19;
      ((void (__stdcall *)(_DWORD))v20)(" ");
    }
    if ( *(_BYTE *)(pkViewInfo + 82) != 45 )
    {
      SkillInfoWin::SetTextBeginNewLine(v3, (const char *)(pkViewInfo + 82), (int *)&iIndex, &Color::m_kDxWhiteColor);
      v19 = (int)iIndex;
    }
    result = v19;
  }
  else
  {
LABEL_42:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A98774: using guessed type int ITableBase_PassiveSkillInfo_PasSkillInfoTab___ms_pkTable;
// A98A38: using guessed type int ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab___ms_pkTable;

//----- (00591270) --------------------------------------------------------
void __thiscall SkillInfoWin::SetPassiveSkillBuyInfo(SkillInfoWin *this, unsigned __int16 kSkillID, unsigned int uiPrice)
{
  SkillInfoWin *v3; // esi@1
  int v4; // edi@1

  v3 = this;
  v4 = SkillInfoWin::SetPassiveSkillInfo(this, kSkillID, 1);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  SkillInfoWin::ShowMoneyWin(
    v3,
    v3->baseclass_0.m_uiEdgeWidth,
    (v4 + 1) * (v3->m_iFontHeight + 2) + v3->baseclass_0.m_uiEdgeHeight + 2,
    uiPrice);
}

//----- (005912D0) --------------------------------------------------------
void __thiscall SkillInfoWin::SetSetItemDesc(SkillInfoWin *this, int *iIndex)
{
  SkillInfoWin *v2; // esi@1
  signed int v3; // ecx@2
  int v4; // eax@4
  int v5; // ecx@4
  unsigned int v6; // edx@4
  unsigned int v7; // eax@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>, *v8; // eax@6
  int v9; // ebx@6
  PgWinText *v10; // ecx@7
  NiRefObjectVtbl *v11; // ebx@7
  char *v12; // eax@7
  ItemActionEffect *v13; // eax@10
  signed int v14; // ecx@13
  unsigned int v15; // [sp-10h] [bp-58h]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>, result; // [sp+0h] [bp-48h]@6
  ItemAction itrAction; // [sp+4h] [bp-44h]@4
  ItemActionEffectDesc *pkDesc; // [sp+10h] [bp-38h]@5
  unsigned int i; // [sp+14h] [bp-34h]@2
  int v20; // [sp+18h] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strSetName; // [sp+1Ch] [bp-2Ch]@7
  unsigned int v22; // [sp+38h] [bp-10h]@1
  int v23; // [sp+44h] [bp-4h]@7
  int v24; // [sp+48h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v15 = (unsigned int)&v24 ^ __security_cookie;
  v2 = this;
  if ( *iIndex < 60 )
  {
    v3 = (signed int)((char *)this->m_svItemAction.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0]);
    i = 0;
    if ( v3 / 12 )
    {
      v20 = 0;
      do
      {
        v4 = v20 + *(_DWORD *)&v2->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
        v5 = *(_DWORD *)v4;
        v6 = *(_DWORD *)(v4 + 4);
        v7 = *(_DWORD *)(v4 + 8);
        *(_DWORD *)&itrAction.ItemActionID = v5;
        *(_QWORD *)&itrAction.EffectID = __PAIR__(v7, v6);
        if ( (_WORD)v5 )
        {
          pkDesc = ItemActionEffectDescTab::GetByItemActionID((unsigned __int16)v5);
          if ( pkDesc )
          {
            v8 = std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::find(
                   &v2->m_svSetItemName.baseclass_0,
                   &result,
                   &itrAction.ItemActionID);
            v9 = *(_DWORD *)&v8->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
            if ( *(_DWORD *)&v8->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != *((_DWORD *)&v2->m_svSetItemName.baseclass_0.baseclass_0 + 1) )
            {
              v10 = v2->m_apkTextWin[(*iIndex)++];
              ((void (__stdcall *)(_DWORD, unsigned int))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
                " ",
                v15);
              strSetName.baseclass_0._Myres = 15;
              strSetName.baseclass_0._Mysize = 0;
              strSetName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                &strSetName,
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v9 + 16),
                0,
                0xFFFFFFFFu);
              v23 = 0;
              v11 = v2->m_apkTextWin[*iIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v12 = TextData2::Get(0xCEF3EEEEu);
              v15 = (unsigned int)fs(v12);
              ((void (__thiscall *)(PgWinText *))v11[118].__vecDelDtor)(v2->m_apkTextWin[*iIndex]);
              ((void (__stdcall *)(D3DXCOLOR *))v2->m_apkTextWin[(*iIndex)++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
              v23 = -1;
              if ( strSetName.baseclass_0._Myres >= 0x10 )
                operator delete(*(void **)&strSetName);
              strSetName.baseclass_0._Myres = 15;
              strSetName.baseclass_0._Mysize = 0;
              strSetName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            }
            v13 = ItemActionEffectTab::GetByEffectID(itrAction.EffectID);
            if ( pkDesc->ItemActionDesc[0] != 45 )
            {
              if ( v13 )
                SkillInfoWin::SetTextBeginNewLine(v2, pkDesc->ItemActionDesc, iIndex, &Color::m_kDxYellowColor);
            }
          }
        }
        v14 = (signed int)((char *)v2->m_svItemAction.baseclass_0._Mylast
                         - *(_DWORD *)&v2->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0]);
        v20 += 12;
        ++i;
      }
      while ( i < v14 / 12 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005914D0) --------------------------------------------------------
void __thiscall SkillInfoWin::SetGTSkillInfo(SkillInfoWin *this, unsigned int uiIndex)
{
  SkillInfoWin *v2; // esi@1
  signed int v3; // edi@1
  unsigned int v4; // ebx@4
  void *v5; // eax@8
  const char *v6; // edi@9

  v2 = this;
  v3 = 10;
  do
  {
    ((void (__stdcall *)(_DWORD))v2->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    ((void (__stdcall *)(_DWORD))v2->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    --v3;
  }
  while ( v3 );
  if ( ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal() )
  {
    v4 = uiIndex;
    while ( *((_WORD *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable
                                       + 4),
                         v3)
            + 1) != v4 )
    {
      ++v3;
      if ( v3 >= ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal() )
        return;
    }
    v5 = CDataReader::GetRecord(
           (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable + 4),
           v3);
    if ( v5 )
    {
      v6 = (char *)v5 + 72;
      if ( *((_BYTE *)v5 + 72) != 45 )
      {
        ((void (__stdcall *)(_DWORD))v2->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)((char *)v5 + 40);
        ((void (__stdcall *)(_DWORD))v2->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
        uiIndex = 2;
        SkillInfoWin::SetTextBeginNewLine(v2, v6, (int *)&uiIndex, &Color::m_kDxWhiteColor);
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
          v2,
          2 * v2->baseclass_0.m_uiEdgeWidth + 10,
          2 * v2->baseclass_0.m_uiEdgeHeight + 16);
      }
    }
  }
}
// A97E74: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab___ms_pkTable;

//----- (005915D0) --------------------------------------------------------
int __thiscall SkillInfoWin::SetNeedFame(SkillInfoWin *this, unsigned __int16 kSkillID, int index)
{
  int v3; // esi@1
  SkillInfoWin *v4; // edi@1
  int v5; // eax@3
  int result; // eax@5
  char *v7; // esi@6
  ItemInfo *v8; // ebx@6
  ItemViewInfo *v9; // eax@6
  int v10; // esi@8
  char *v11; // eax@13
  D3DXCOLOR *v12; // [sp-4h] [bp-10h]@11
  NiRefObjectVtbl *indexa; // [sp+18h] [bp+Ch]@13

  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                              + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kSkillID)
    && kSkillID <= *(_WORD *)(v3 + 200)
    && (v5 = *(_DWORD *)(v3 + 196) + 4 * kSkillID, *(_DWORD *)v5)
    && *(_DWORD *)v5
    && (v7 = (char *)(*(_DWORD *)v5 + 2), v8 = ItemInfoTab::GetByInxName(v7), v9 = ItemViewInfoTab::GetByInxName(v7), v8)
    && v9 )
  {
    v10 = index;
    if ( v8->BuyFame )
    {
      ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[index]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9ABAD6);
      v10 = index + 1;
      if ( !v8->BuyGToken )
      {
        if ( v8->BuyFame >= User::GetMainCharBaseData(&g_kUser)->fame )
          v12 = &Color::m_kDxRedColor;
        else
          v12 = &Color::m_kDxWhiteColor;
        ((void (__stdcall *)(_DWORD))v4->m_apkTextWin[v10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v12);
        indexa = v4->m_apkTextWin[v10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0x9BAE96E8u);
        v11 = fs("%s: %d");
        indexa[118].__vecDelDtor((NiRefObject *)v4->m_apkTextWin[v10], (unsigned int)v11);
        v4->m_apkTextWin[v10 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v4->m_apkTextWin[v10 + 1],
          (unsigned int)" ");
        v10 += 2;
      }
    }
    result = v10;
  }
  else
  {
    result = index;
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00591710) --------------------------------------------------------
void __thiscall SkillInfoWin::_SkillInfoWin(SkillInfoWin *this)
{
  SkillInfoWin *v1; // esi@1
  char *v2; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v4; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a result; // [sp+0h] [bp-18h]@1
  std::map<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > *v6; // [sp+4h] [bp-14h]@1
  SkillInfoWin *v7; // [sp+8h] [bp-10h]@1
  int v8; // [sp+14h] [bp-4h]@1

  v1 = this;
  v7 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillInfoWin::_vftable_;
  v8 = 0;
  v2 = (char *)&this->m_svSetItemName;
  v6 = &this->m_svSetItemName;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,)*((_DWORD *)&this->m_svSetItemName.baseclass_0.baseclass_0 + 1);
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,)**(_DWORD **)&v3;
  LOBYTE(v8) = 2;
  std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *)&this->m_svSetItemName,
    &result,
    v4,
    v3);
  operator delete(*((void **)v2 + 1));
  if ( *(_DWORD *)&v1->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_svItemAction.baseclass_0._Mylast = 0;
  v1->m_svItemAction.baseclass_0._Myend = 0;
  v8 = -1;
  FrameBoxWin::_FrameBoxWin(&v1->baseclass_0);
}
// 9ABE44: using guessed type int (__stdcall *SkillInfoWin___vftable_)(int uiFlags);
// 9ABE64: using guessed type int (__thiscall *SkillInfoWin___vftable_)(void *p, char);

//----- (005917D0) --------------------------------------------------------
void __thiscall SkillInfoWin::SkillInfoWin(SkillInfoWin *this)
{
  SkillInfoWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  SkillInfoWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillInfoWin::_vftable_;
  v6 = 0;
  *(_DWORD *)&v1->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_svItemAction.baseclass_0._Mylast = 0;
  v1->m_svItemAction.baseclass_0._Myend = 0;
  LOBYTE(v6) = 1;
  *((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0 + 2) = 0;
  v2 = operator new(0x30u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0 + 1) = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0
                                                                                   + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0
                                                                                   + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_svSetItemName.baseclass_0.baseclass_0 + 1) + 45) = 1;
  v1->m_iFontHeight = 14;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9ABE44: using guessed type int (__stdcall *SkillInfoWin___vftable_)(int uiFlags);
// 9ABE64: using guessed type int (__thiscall *SkillInfoWin___vftable_)(void *p, char);

//----- (005918B0) --------------------------------------------------------
SkillInfoWin *__cdecl SkillInfoWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  SkillInfoWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x2DCu);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    SkillInfoWin::SkillInfoWin((SkillInfoWin *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiSourceTexture *, unsigned int, unsigned int))(*(_DWORD *)v5 + 548))(
                          v5,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (SkillInfoWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (005919F0) --------------------------------------------------------
void __thiscall SkillInfoWin::SetSetItem(SkillInfoWin *this, unsigned __int16 kSkillID)
{
  SkillInfoWin *v2; // esi@1
  int v3; // ebx@2
  int v4; // edi@3
  int v5; // eax@6
  ItemAction *v6; // edx@10
  ItemAction *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v10; // edx@15
  int v11; // esi@15
  void *v12; // eax@15
  void *v13; // eax@16
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *v14; // ST0C_4@17
  Item *v15; // eax@19
  int v16; // esi@20
  int v17; // ebx@20
  int v18; // edx@22
  int v19; // eax@23
  const char *v20; // ecx@24
  int v21; // eax@25
  char v22; // dl@26
  int v23; // eax@27
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v24; // eax@28
  ActionEffectItem *v25; // eax@33
  ItemAction *v26; // eax@34
  ItemAction *v27; // esi@34
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *v28; // eax@35
  unsigned int v29; // ecx@36
  unsigned int v30; // edi@38
  unsigned int v31; // ebx@41
  void *v32; // eax@42
  void *v33; // ebx@42
  int v34; // edx@43
  char v35; // cl@44
  unsigned int v36; // edx@45
  int v37; // eax@45
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v38; // esi@49
  int v39; // ecx@51
  signed int v40; // eax@55
  int v41; // eax@62
  bool v42; // zf@65
  unsigned int v43; // eax@66
  signed int v44; // eax@67
  unsigned int v45; // ST0C_4@72
  NiTListItem<ItemAction *> *v46; // esi@72
  NiTListItem<ItemAction *> *v47; // edi@72
  ItemAction *v48; // eax@73
  int v49; // edx@74
  unsigned int v50; // ecx@74
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v51; // eax@74
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v52; // esi@74
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v53; // ecx@74
  const unsigned __int16 v54; // di@75
  const char *v55; // eax@82
  __int16 v56; // ax@82
  std::_Tree<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *v57; // esi@82
  std::_Tree_nod<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *v58; // eax@82
  NiTListItem<ItemAction *> *v59; // ST0C_4@89
  unsigned int v60; // ecx@96
  unsigned int k; // eax@97
  unsigned int j; // eax@100
  unsigned int v63; // esi@109
  void *v64; // eax@110
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v65; // ebx@112
  unsigned int v66; // eax@113
  unsigned int v67; // ecx@113
  unsigned int v68; // esi@113
  void *v69; // eax@114
  void *v70; // eax@117
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v71; // ecx@122
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v72; // eax@123
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *l; // eax@127
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v74; // ST08_4@134
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v75; // ST08_4@134
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-110h]@136
  std::pair<unsigned short,ItemAction> _Val; // [sp+Ch] [bp-104h]@74
  char *_What; // [sp+1Ch] [bp-F4h]@136
  std::vector<NiPoint3,std::allocator<NiPoint3> > *v79; // [sp+20h] [bp-F0h]@10
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_str result; // [sp+24h] [bp-ECh]@28
  NiTList<ItemAction *> kListItemAction; // [sp+2Ch] [bp-E4h]@72
  ItemAction kAction; // [sp+3Ch] [bp-D4h]@36
  std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *pkSkillGroup; // [sp+4Ch] [bp-C4h]@15
  std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > m_mapItemAction; // [sp+50h] [bp-C0h]@16
  void *pkInfo; // [sp+60h] [bp-B0h]@3
  unsigned int i; // [sp+64h] [bp-ACh]@36
  NiTListItem<ItemAction *> *kIter; // [sp+68h] [bp-A8h]@27
  std::multimap<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<ch m_mapItemEffect; // [sp+6Ch] [bp-A4h]@15
  Item *NumPiece; // [sp+7Ch] [bp-94h]@19
  bool _Addleft[4]; // [sp+80h] [bp-90h]@35
  unsigned int iEquip; // [sp+84h] [bp-8Ch]@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strSetName; // [sp+88h] [bp-88h]@82
  __int16 v93; // [sp+A4h] [bp-6Ch]@82
  void *p; // [sp+A8h] [bp-68h]@82
  int v95; // [sp+B8h] [bp-58h]@82
  unsigned int v96; // [sp+BCh] [bp-54h]@82
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+C4h] [bp-4Ch]@28
  signed int v98; // [sp+E0h] [bp-30h]@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strItemIndex; // [sp+E4h] [bp-2Ch]@25
  unsigned int v100; // [sp+100h] [bp-10h]@1
  int v101; // [sp+10Ch] [bp-4h]@16
  int v102; // [sp+110h] [bp+0h]@1

  v100 = (unsigned int)&v102 ^ __security_cookie;
  v2 = this;
  if ( kSkillID != -1 )
  {
    v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            kSkillID) )
    {
      if ( kSkillID <= *(_WORD *)(v3 + 200) )
      {
        v5 = *(_DWORD *)(v3 + 196) + 4 * kSkillID;
        if ( *(_DWORD *)v5 )
          pkInfo = *(void **)v5;
        else
          pkInfo = 0;
      }
      else
      {
        pkInfo = 0;
      }
      v4 = 0;
    }
    else
    {
      v4 = 0;
      pkInfo = 0;
    }
    v6 = v2->m_svItemAction.baseclass_0._Mylast;
    v7 = *(ItemAction **)&v2->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
    v79 = (std::vector<NiPoint3,std::allocator<NiPoint3> > *)&v2->m_svItemAction;
    if ( v7 != v6 )
      v2->m_svItemAction.baseclass_0._Mylast = v7;
    std::vector<ItemAction_std::allocator<ItemAction>>::resize(&v2->m_svItemAction, v4);
    v10 = *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)(*((_DWORD *)&v2->m_svSetItemName.baseclass_0.baseclass_0 + 1) + 4);
    v11 = (int)&v2->m_svSetItemName;
    pkSkillGroup = (std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *)v11;
    std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *)v11,
      v10);
    *(_DWORD *)(*(_DWORD *)(v11 + 4) + 4) = *(_DWORD *)(v11 + 4);
    **(_DWORD **)(v11 + 4) = *(_DWORD *)(v11 + 4);
    *(_DWORD *)(*(_DWORD *)(v11 + 4) + 8) = *(_DWORD *)(v11 + 4);
    *(_DWORD *)(v11 + 8) = v4;
    *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 2) = v4;
    v12 = operator new(0x30u);
    if ( v12 == (void *)v4 )
    {
      kIter = (NiTListItem<ItemAction *> *)v4;
      std::exception::exception((std::exception *)&kAction, (const char *const *)&kIter);
      *(_DWORD *)&kAction.ItemActionID = &std::bad_alloc::_vftable_;
      _CxxThrowException(&kAction, &_TI2_AVbad_alloc_std__);
    }
    *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) = v12;
    *(_DWORD *)v12 = v12;
    *(_DWORD *)(*((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0
                                                                                 + 1);
    *(_DWORD *)(*((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0
                                                                                 + 1);
    *(_BYTE *)(*((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) + 44) = 1;
    *(_BYTE *)(*((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) + 45) = 1;
    v101 = v4;
    m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Mysize = v4;
    v13 = operator new(0x1Cu);
    if ( v13 == (void *)v4 )
    {
      _What = (char *)v4;
      std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
      pExceptionObject = &std::bad_alloc::_vftable_;
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
    }
    m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v13;
    *(_DWORD *)v13 = v13;
    m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead;
    m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead;
    m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
    m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
    v14 = *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ **)(*((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) + 4);
    LOBYTE(v101) = 1;
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *)&m_mapItemEffect,
      v14);
    *(_DWORD *)(*((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0
                                                                                 + 1);
    **((_DWORD **)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0
                                                                  + 1);
    *(_DWORD *)(*((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0
                                                                                 + 1);
    *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 2) = v4;
    iEquip = v4;
    do
    {
      if ( iEquip < 0x1E )
      {
        v15 = g_kInventory.m_aspEquip[iEquip].m_pObject;
        NumPiece = v15;
        if ( v15 != (Item *)v4 )
        {
          v16 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
          v17 = v15->m_kStruct.itemid;
          if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                + 16))(
                                  ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                  v17) )
          {
            if ( (unsigned __int16)v17 <= *(_WORD *)(v16 + 200) )
            {
              v18 = *(_DWORD *)(v16 + 196);
              if ( *(_DWORD *)(v18 + 4 * v17) != v4 )
              {
                v19 = *(_DWORD *)(v18 + 4 * v17);
                if ( v19 != v4 )
                {
                  v20 = (const char *)(v19 + 342);
                  if ( *(_BYTE *)(v19 + 342) != 45 )
                  {
                    v21 = v19 + 342;
                    strItemIndex.baseclass_0._Myres = 15;
                    strItemIndex.baseclass_0._Mysize = v4;
                    strItemIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                    do
                      v22 = *(_BYTE *)v21++;
                    while ( v22 );
                    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                      &strItemIndex,
                      v20,
                      v21 - (_DWORD)(v20 + 1));
                    LOBYTE(v101) = 2;
                    v23 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::find(
                                        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)&m_mapItemEffect,
                                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)&kIter,
                                        &strItemIndex)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
                    if ( v23 == *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) )
                    {
                      thisa.baseclass_0._Myres = 15;
                      thisa.baseclass_0._Mysize = v4;
                      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                        &thisa,
                        &strItemIndex,
                        v4,
                        0xFFFFFFFFu);
                      v98 = 1;
                      LOBYTE(v101) = 3;
                      v24 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty___std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_CAbstractProperty__>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>>(
                              &m_mapItemEffect.baseclass_0.baseclass_0,
                              (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
                      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Linsert(
                        &m_mapItemEffect.baseclass_0,
                        &result,
                        (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char *)v24,
                        v4);
                      if ( thisa.baseclass_0._Myres >= 0x10 )
                        operator delete(*(void **)&thisa);
                    }
                    else
                    {
                      ++*(_DWORD *)(v23 + 40);
                    }
                    LOBYTE(v101) = 1;
                    if ( strItemIndex.baseclass_0._Myres >= 0x10 )
                      operator delete(*(void **)&strItemIndex);
                  }
                  v25 = ActionEffectItemTab::GetByItemID(NumPiece->m_kStruct.itemid);
                  if ( v25 != (ActionEffectItem *)v4 )
                  {
                    v26 = ItemActionTab::GetByItemActionID(v25->ItemActionID);
                    v27 = v26;
                    if ( v26 != (ItemAction *)v4 )
                    {
                      v28 = std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::find(
                              &m_mapItemAction.baseclass_0,
                              (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)_Addleft,
                              &v26->ItemActionID);
                      if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node **)&v28->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead )
                      {
                        v29 = *(_DWORD *)&v27->EffectID;
                        *(_DWORD *)&kAction.ConditionID = *(_DWORD *)&v27->ItemActionID;
                        kAction.CoolTime = v29;
                        kAction.ItemActionID = kAction.ConditionID;
                        *(_DWORD *)&kAction.CoolGroupActionID = *(unsigned int *)((char *)&v27->CoolTime + 2);
                        std::multimap<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>>::insert<std::pair<unsigned_short_ItemAction>>(
                          &m_mapItemAction,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)&i,
                          (std::pair<unsigned short,ItemAction> *)&kAction);
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      ++iEquip;
    }
    while ( (signed int)iEquip < 30 );
    v30 = **((_DWORD **)&m_mapItemEffect.baseclass_0.baseclass_0 + 1);
    iEquip = v30;
    if ( v30 != *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) )
    {
      while ( 1 )
      {
        *(_DWORD *)&thisa.baseclass_0._Alval.baseclass_0.dummy[0] = 15;
        thisa.baseclass_0._Myres = 0;
        thisa.baseclass_0.___u0._Bx._Buf[4] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&thisa + 4),
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v30 + 12),
          0,
          0xFFFFFFFFu);
        LOBYTE(v101) = 4;
        NumPiece = (Item *)1;
        if ( *(_DWORD *)(v30 + 40) >= 1 )
          break;
LABEL_95:
        if ( !*(_BYTE *)(v30 + 45) )
        {
          v60 = *(_DWORD *)(v30 + 8);
          if ( *(_BYTE *)(v60 + 45) )
          {
            for ( j = *(_DWORD *)(v30 + 4); !*(_BYTE *)(j + 45); j = *(_DWORD *)(j + 4) )
            {
              if ( v30 != *(_DWORD *)(j + 8) )
                break;
              v30 = j;
            }
            v30 = j;
          }
          else
          {
            for ( k = *(_DWORD *)v60; !*(_BYTE *)(k + 45); k = *(_DWORD *)k )
              v60 = k;
            v30 = v60;
          }
          iEquip = v30;
        }
        LOBYTE(v101) = 1;
        if ( *(_DWORD *)&thisa.baseclass_0._Alval.baseclass_0.dummy[0] >= 0x10u )
          operator delete(*(void **)&thisa.baseclass_0.___u0._Bx._Buf[4]);
        if ( v30 == *((_DWORD *)&m_mapItemEffect.baseclass_0.baseclass_0 + 1) )
          goto LABEL_108;
      }
      while ( 1 )
      {
        i = 0;
        if ( SetEffectTab::GetTotal() )
          break;
LABEL_94:
        NumPiece = (Item *)((char *)NumPiece + 1);
        if ( (signed int)NumPiece > *(_DWORD *)(v30 + 40) )
          goto LABEL_95;
      }
      v31 = i;
      while ( 1 )
      {
        v32 = CDataReader::GetRecord((CDataReader *)(ITableBase<SetEffect_SetEffectTab>::ms_pkTable + 4), v31);
        v33 = v32;
        if ( v32 )
          break;
LABEL_93:
        ++i;
        v31 = i;
        if ( i >= SetEffectTab::GetTotal() )
          goto LABEL_94;
      }
      strItemIndex.baseclass_0._Myres = 15;
      strItemIndex.baseclass_0._Mysize = 0;
      strItemIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v34 = (int)((char *)v32 + 1);
      do
      {
        v35 = *(_BYTE *)v32;
        v32 = (char *)v32 + 1;
      }
      while ( v35 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &strItemIndex,
        (const char *)v33,
        (unsigned int)((char *)v32 - v34));
      v36 = *(_DWORD *)(v30 + 28);
      v37 = v30 + 12;
      if ( *(_DWORD *)(v30 + 32) >= 0x10u )
        v37 = *(_DWORD *)v37;
      if ( strItemIndex.baseclass_0._Mysize < v36 )
        v36 = strItemIndex.baseclass_0._Mysize;
      v38 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strItemIndex;
      if ( strItemIndex.baseclass_0._Myres < 0x10 )
        v38 = &strItemIndex;
      v39 = v37;
      if ( v36 < 4 )
      {
LABEL_54:
        if ( !v36 )
        {
LABEL_64:
          v41 = 0;
          goto LABEL_65;
        }
      }
      else
      {
        while ( *(_DWORD *)&v38->baseclass_0.___u0.baseclass_0.dummy[0] == *(_DWORD *)v39 )
        {
          v36 -= 4;
          v39 += 4;
          v38 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v38 + 4);
          if ( v36 < 4 )
            goto LABEL_54;
        }
      }
      v40 = v38->baseclass_0.___u0.baseclass_0.dummy[0] - *(_BYTE *)v39;
      if ( v38->baseclass_0.___u0.baseclass_0.dummy[0] == *(_BYTE *)v39 )
      {
        if ( v36 <= 1 )
          goto LABEL_63;
        v40 = v38->baseclass_0.___u0._Bx._Buf[1] - *(_BYTE *)(v39 + 1);
        if ( v38->baseclass_0.___u0._Bx._Buf[1] != *(_BYTE *)(v39 + 1) )
          goto LABEL_62;
        if ( v36 <= 2 )
        {
LABEL_63:
          v30 = iEquip;
          goto LABEL_64;
        }
        v40 = v38->baseclass_0.___u0._Bx._Buf[2] - *(_BYTE *)(v39 + 2);
        if ( v38->baseclass_0.___u0._Bx._Buf[2] == *(_BYTE *)(v39 + 2) )
        {
          if ( v36 > 3 )
          {
            v40 = v38->baseclass_0.___u0._Bx._Buf[3] - *(_BYTE *)(v39 + 3);
            goto LABEL_62;
          }
          goto LABEL_63;
        }
      }
LABEL_62:
      v30 = iEquip;
      v41 = (v40 >> 31) | 1;
LABEL_65:
      v42 = v41 == 0;
      if ( !v41 )
      {
        v43 = *(_DWORD *)(v30 + 28);
        if ( strItemIndex.baseclass_0._Mysize >= v43 )
          v44 = strItemIndex.baseclass_0._Mysize != v43;
        else
          v44 = -1;
        v42 = v44 == 0;
      }
      if ( v42 && (Item *)*((_BYTE *)v33 + 32) == NumPiece )
      {
        *(_DWORD *)&kListItemAction.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
        kListItemAction.baseclass_0.baseclass_0.m_pkHead = 0;
        kListItemAction.baseclass_0.baseclass_0.m_pkTail = 0;
        kListItemAction.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTList<ItemAction__>::_vftable_;
        v45 = *(_WORD *)((char *)v33 + 33);
        LOBYTE(v101) = 6;
        ItemActionTab::GetListByItemActionID(&kListItemAction, v45);
        v46 = kListItemAction.baseclass_0.baseclass_0.m_pkHead;
        v47 = kListItemAction.baseclass_0.baseclass_0.m_pkHead;
        if ( kListItemAction.baseclass_0.baseclass_0.m_pkHead )
        {
          do
          {
            v48 = v47->m_element;
            v47 = v47->m_pkNext;
            kIter = v47;
            if ( v48 )
            {
              v49 = *(_DWORD *)&v48->ItemActionID;
              _Val.baseclass_0.first = *(_WORD *)((char *)v33 + 33);
              v50 = *(_DWORD *)&v48->EffectID;
              *(_DWORD *)&_Val.baseclass_0.second.ItemActionID = v49;
              *(_QWORD *)&_Val.baseclass_0.second.EffectID = __PAIR__(
                                                               *(unsigned int *)((char *)&v48->CoolTime + 2),
                                                               v50);
              v51 = std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Buynode<std::pair<unsigned_short_ItemAction>>(
                      &m_mapItemAction.baseclass_0.baseclass_0,
                      &_Val);
              v52 = m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead;
              v53 = m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
              v42 = v53->_Isnil == 0;
              _Addleft[0] = 1;
              if ( v42 )
              {
                v54 = v51->_Myval.baseclass_0.first;
                do
                {
                  v52 = v53;
                  _Addleft[0] = v54 < v53->_Myval.baseclass_0.first;
                  if ( _Addleft[0] )
                    v53 = v53->_Left;
                  else
                    v53 = v53->_Right;
                }
                while ( !v53->_Isnil );
                v47 = kIter;
              }
              std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Insert(
                &m_mapItemAction.baseclass_0,
                (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)&result.baseclass_0.second,
                _Addleft[0],
                v52,
                v51);
              if ( SetItemNameTab::GetByInxName((char *)v33) )
              {
                v55 = SetItemNameTab::GetByInxName((char *)v33)->SetName;
                strSetName.baseclass_0._Myres = 15;
                strSetName.baseclass_0._Mysize = 0;
                strSetName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                  &strSetName,
                  v55,
                  strlen(v55));
                v56 = *(_WORD *)((char *)v33 + 33);
                LOBYTE(v101) = 7;
                v93 = v56;
                v96 = 15;
                v95 = 0;
                LOBYTE(p) = 0;
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
                  &strSetName,
                  0,
                  0xFFFFFFFFu);
                v57 = (std::_Tree<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)pkSkillGroup;
                LOBYTE(v101) = 8;
                v58 = std::_Tree_val<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(
                        pkSkillGroup,
                        (std::pair<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)&v93);
                std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(
                  v57,
                  (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_tra *)&kAction.EffectID,
                  v58,
                  0);
                if ( v96 >= 0x10 )
                  operator delete(p);
                LOBYTE(v101) = 6;
                if ( strSetName.baseclass_0._Myres >= 0x10 )
                  operator delete(*(void **)&strSetName);
              }
            }
          }
          while ( v47 );
          v46 = kListItemAction.baseclass_0.baseclass_0.m_pkHead;
        }
        kListItemAction.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTPointerListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
        LOBYTE(v101) = 9;
        while ( v46 )
        {
          v59 = v46;
          v46 = v46->m_pkNext;
          kListItemAction.baseclass_0.baseclass_0.vfptr->DeleteItem(
            (NiTListBase<DFALL<ItemAction *>,ItemAction *> *)&kListItemAction,
            v59);
        }
        v30 = iEquip;
        *(_DWORD *)&kListItemAction.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
        kListItemAction.baseclass_0.baseclass_0.m_pkHead = 0;
        kListItemAction.baseclass_0.baseclass_0.m_pkTail = 0;
        kListItemAction.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
      }
      LOBYTE(v101) = 4;
      if ( strItemIndex.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strItemIndex);
      goto LABEL_93;
    }
LABEL_108:
    if ( m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Mysize )
    {
      v63 = 0;
      *(_DWORD *)_Addleft = 0;
      if ( ActiveSkillGroupTab::GetTotal() )
      {
        do
        {
          v64 = CDataReader::GetRecord(
                  (CDataReader *)(ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 4),
                  v63);
          pkSkillGroup = (std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *)v64;
          if ( v64 )
          {
            if ( !strcmp((const char *)v64, (const char *)pkInfo + 2) )
            {
              v65 = m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
              if ( m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left != m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead )
              {
                do
                {
                  v66 = *(_DWORD *)&v65->_Myval.baseclass_0.second.EffectID;
                  v67 = *(unsigned int *)((char *)&v65->_Myval.baseclass_0.second.CoolTime + 2);
                  *(_DWORD *)&kAction.ItemActionID = *(_DWORD *)&v65->_Myval.baseclass_0.second.ItemActionID;
                  *(_QWORD *)&kAction.EffectID = __PAIR__(v67, v66);
                  v68 = 0;
                  if ( ITableBase<ItemActionCondition_ItemActionConditionTab>::GetTotal() )
                  {
                    while ( 1 )
                    {
                      v69 = CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable + 4),
                              v68);
                      if ( v69 )
                      {
                        if ( *(_WORD *)v69 == kAction.ConditionID )
                          break;
                      }
                      ++v68;
                      if ( v68 >= ITableBase<ItemActionCondition_ItemActionConditionTab>::GetTotal() )
                        goto LABEL_117;
                    }
                    v70 = CDataReader::GetRecord(
                            (CDataReader *)(ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable + 4),
                            v68);
                  }
                  else
                  {
LABEL_117:
                    v70 = 0;
                  }
                  if ( *(_DWORD *)((char *)v70 + 18) == 7
                    && *((_DWORD *)pkSkillGroup + 8) == *(_DWORD *)((char *)v70 + 22) )
                    std::vector<ItemAction_std::allocator<ItemAction>>::push_back(
                      v79,
                      (NiPoint3 *)&v65->_Myval.baseclass_0.second);
                  if ( !v65->_Isnil )
                  {
                    v71 = v65->_Right;
                    if ( v71->_Isnil )
                    {
                      for ( l = v65->_Parent; !l->_Isnil; l = l->_Parent )
                      {
                        if ( v65 != l->_Right )
                          break;
                        v65 = l;
                      }
                      v65 = l;
                    }
                    else
                    {
                      v72 = v71->_Left;
                      if ( !v71->_Left->_Isnil )
                      {
                        do
                        {
                          v71 = v72;
                          v72 = v72->_Left;
                        }
                        while ( !v72->_Isnil );
                      }
                      v65 = v71;
                    }
                  }
                }
                while ( v65 != m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead );
                v63 = *(_DWORD *)_Addleft;
              }
            }
          }
          ++v63;
          *(_DWORD *)_Addleft = v63;
        }
        while ( v63 < ActiveSkillGroupTab::GetTotal() );
      }
    }
    v74 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > >)m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
    LOBYTE(v101) = 10;
    std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::erase(
      &m_mapItemAction.baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)&result.baseclass_0.second,
      v74,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > >)m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead);
    operator delete(m_mapItemAction.baseclass_0.baseclass_0.baseclass_0._Myhead);
    v75 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)**((_DWORD **)&m_mapItemEffect.baseclass_0.baseclass_0 + 1);
    v101 = 11;
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *)&m_mapItemEffect,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st *)&result.baseclass_0.second,
      v75,
      *((std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&m_mapItemEffect.baseclass_0.baseclass_0
      + 1));
    operator delete(*((void **)&m_mapItemEffect.baseclass_0.baseclass_0 + 1));
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9ABE14: using guessed type int (__thiscall *NiTListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);
// 9ABE24: using guessed type int (__thiscall *NiTPointerListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);
// 9ABE34: using guessed type int (__thiscall *NiTList_ItemAction _____vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97E60: using guessed type int ITableBase_SetEffect_SetEffectTab___ms_pkTable;
// A97E70: using guessed type int ITableBase_ItemActionCondition_ItemActionConditionTab___ms_pkTable;
// A97E9C: using guessed type int ITableBase_ActiveSkillGroup_ActiveSkillGroupTab___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00592480) --------------------------------------------------------
int __thiscall SkillInfoWin::SetSkillInfo(SkillInfoWin *this, unsigned __int16 kSkillID, bool bViewEmpowerPointApplied, Skill::EmpowerInfo *pkVirtualValue, bool bBuy)
{
  SkillInfoWin *v5; // esi@1
  int v6; // ebx@1
  int v7; // ebx@4
  int v8; // ebx@5
  int v9; // edx@8
  int (__cdecl *v10)(_DWORD); // edx@11
  int v11; // eax@15
  NiRefObjectVtbl *v12; // edi@22
  int v13; // ebx@22
  NiRefObjectVtbl *v14; // edi@24
  char *v15; // eax@24
  char *v16; // ecx@24
  bool v17; // zf@25
  void *v18; // eax@25
  void *(__thiscall *v19)(NiRefObject *, unsigned int); // eax@30
  NiRefObjectVtbl *v20; // edi@33
  char *v21; // eax@33
  void *(__thiscall *v22)(NiRefObject *, unsigned int); // edx@36
  signed int v23; // edi@37
  char *v24; // eax@38
  void *(__thiscall *v25)(NiRefObject *, unsigned int); // edx@43
  unsigned int v26; // eax@44
  char *v27; // eax@45
  ProduceInfo *v28; // eax@46
  ProduceInfo *v29; // ecx@46
  char v30; // dl@47
  char v31; // al@47
  char v32; // dl@47
  char v33; // al@47
  char v34; // dl@47
  char v35; // cl@47
  Skill::LearnProdSkillInfo *v36; // eax@49
  unsigned __int16 v37; // bx@49
  unsigned int v38; // edi@50
  void *v39; // eax@51
  char **v40; // edi@59
  char *v41; // eax@59
  char *v42; // eax@59
  Skill::EmpowerInfo *v44; // eax@64
  const __int64 v45; // qax@67
  int v46; // edi@67
  signed __int64 v47; // qax@67
  bool v48; // al@69
  NiRefObjectVtbl *v49; // edx@69
  PgWinText *v50; // ebx@69
  NiRefObjectVtbl *v51; // edi@69
  char *v52; // eax@69
  signed int v53; // ebx@69
  NiRefObjectVtbl *v54; // edi@73
  char *v55; // eax@73
  void *(__thiscall *v56)(NiRefObject *, unsigned int); // edx@76
  NiRefObjectVtbl *v57; // edi@77
  char *v58; // eax@77
  char *v59; // eax@77
  char *v60; // eax@79
  int v61; // eax@82
  int v62; // ebx@82
  NiRefObjectVtbl *v63; // edi@84
  char *v64; // eax@84
  char *v65; // ecx@84
  NiRefObjectVtbl *v66; // edi@86
  char *v67; // eax@86
  char *v68; // ecx@86
  int v69; // edi@116
  ItemAction *v70; // ecx@116
  ItemActionEffect *v71; // eax@118
  signed int v72; // edx@121
  ItemAction *v73; // ecx@122
  char *v74; // edi@124
  char *v75; // eax@126
  char *v76; // eax@126
  char *v77; // eax@128
  unsigned int v78; // edx@130
  const void *v79; // esi@130
  void *v80; // edi@130
  char v81; // cl@131
  char *v82; // ecx@134
  void *(__thiscall *v83)(NiRefObject *, unsigned int); // eax@134
  NiRefObjectVtbl *v84; // edi@137
  char *v85; // eax@137
  char *v86; // eax@137
  NiRefObjectVtbl *v87; // edi@141
  char *v88; // eax@141
  char *v89; // eax@141
  NiRefObjectVtbl *v90; // edi@143
  char *v91; // eax@143
  char *v92; // eax@143
  NiRefObjectVtbl *v93; // edi@145
  char *v94; // eax@145
  char *v95; // eax@145
  NiRefObjectVtbl *v96; // edi@147
  char *v97; // eax@147
  char *v98; // eax@147
  NiRefObjectVtbl *v99; // edi@149
  char *v100; // eax@149
  char *v101; // eax@149
  void *(__thiscall *v102)(NiRefObject *, unsigned int); // edx@152
  int v103; // eax@153
  int v104; // ebx@153
  int v105; // edi@154
  signed int v106; // ecx@154
  unsigned int v107; // ebx@154
  ItemActionEffect *v108; // eax@156
  unsigned int v109; // ecx@158
  ItemAction *v110; // ecx@161
  signed int v111; // edx@161
  char *v112; // eax@163
  char *v113; // ecx@163
  int v114; // edi@163
  char v115; // dl@164
  char v116; // dl@167
  char *v117; // eax@174
  char *v118; // edx@179
  char v119; // cl@180
  unsigned int v120; // eax@181
  void *v121; // edi@181
  char v122; // cl@182
  char *v123; // eax@186
  char *v124; // ecx@186
  char v125; // dl@187
  const void *v126; // esi@188
  char v127; // cl@189
  char *v128; // eax@191
  char *v129; // ecx@191
  char v130; // dl@192
  char v131; // cl@194
  char *v132; // eax@197
  char v133; // cl@198
  char v134; // cl@200
  int v135; // edi@203
  signed int v136; // ecx@203
  unsigned int v137; // ebx@203
  unsigned int v138; // edi@205
  void *v139; // eax@206
  void *v140; // eax@210
  signed int v141; // edx@213
  ItemAction *v142; // ecx@214
  char *v143; // eax@217
  char v144; // cl@218
  char v145; // dl@219
  char *v146; // eax@225
  const void *v147; // edx@227
  char v148; // cl@228
  unsigned int v149; // eax@229
  void *v150; // edi@229
  char v151; // cl@230
  char *v152; // eax@233
  char v153; // cl@234
  char v154; // cl@236
  char *v155; // eax@238
  char v156; // cl@239
  char v157; // cl@241
  char *v158; // eax@245
  char v159; // cl@246
  char v160; // cl@247
  char *v161; // eax@249
  char *v162; // ecx@249
  char v163; // dl@250
  unsigned int v164; // eax@251
  const void *v165; // esi@251
  void *v166; // edi@251
  char v167; // cl@252
  char *v168; // eax@254
  char *v169; // ecx@254
  char v170; // dl@255
  unsigned int v171; // eax@256
  const void *v172; // esi@256
  void *v173; // edi@256
  char v174; // cl@257
  char *v175; // eax@260
  char v176; // cl@261
  char v177; // cl@263
  char *v178; // edi@266
  char v179; // al@267
  int v180; // ebx@268
  void *(__thiscall *v181)(NiRefObject *, unsigned int); // eax@275
  unsigned int v182; // eax@276
  NiRefObjectVtbl *v183; // edi@277
  char *v184; // eax@277
  char *v185; // ecx@277
  void *(__thiscall *v186)(NiRefObject *, unsigned int); // edx@277
  char *v187; // eax@278
  int v188; // ebx@279
  int v189; // edi@284
  ItemAction *v190; // ecx@284
  unsigned int v191; // edi@286
  void *v192; // eax@287
  void *v193; // eax@291
  signed int v194; // edx@294
  ItemAction *v195; // ecx@295
  char *v196; // esi@300
  char *v197; // eax@301
  char *v198; // eax@301
  char *v199; // eax@302
  void *(__thiscall *v200)(NiRefObject *, unsigned int); // eax@303
  char *v201; // ecx@304
  void *(__thiscall *v202)(NiRefObject *, unsigned int); // eax@304
  PgWinText *v203; // eax@305
  NiRefObjectVtbl *v204; // edi@305
  char *v205; // eax@306
  int v206; // ST70_4@307
  char *v207; // eax@307
  char *v208; // eax@307
  int v209; // eax@308
  int v210; // ebx@308
  void *v211; // eax@309
  int v212; // edi@309
  char *v213; // eax@309
  void *v214; // eax@310
  int v215; // edi@310
  char *v216; // eax@310
  char *v217; // ecx@310
  void *v218; // eax@311
  int v219; // edi@311
  char *v220; // eax@311
  void *v221; // eax@312
  char *v222; // eax@314
  void *v223; // eax@315
  void *v224; // eax@316
  int v225; // edi@316
  char *v226; // eax@316
  void *v227; // eax@317
  void *(__thiscall *v228)(NiRefObject *, unsigned int); // eax@321
  char *v229; // [sp+60h] [bp-2C0h]@280
  const char *v230[8]; // [sp+64h] [bp-2BCh]@280
  char *v231; // [sp+68h] [bp-2B8h]@221
  char *v232; // [sp+6Ch] [bp-2B4h]@170
  char *v233; // [sp+6Ch] [bp-2B4h]@298
  unsigned int v234; // [sp+70h] [bp-2B0h]@1
  int v235; // [sp+70h] [bp-2B0h]@11
  char *v236; // [sp+70h] [bp-2B0h]@22
  D3DXCOLOR *v237; // [sp+70h] [bp-2B0h]@39
  D3DXCOLOR *v238; // [sp+70h] [bp-2B0h]@80
  char *v239; // [sp+70h] [bp-2B0h]@134
  char *v240; // [sp+70h] [bp-2B0h]@303
  D3DXCOLOR *v241; // [sp+70h] [bp-2B0h]@304
  bool bLevelSatisfied; // [sp+83h] [bp-29Dh]@67
  int pkViewInfo; // [sp+84h] [bp-29Ch]@12
  __int64 kClassMask; // [sp+88h] [bp-298h]@67
  Skill::LearnProdSkillInfo *kClassMask_4; // [sp+8Ch] [bp-294h]@49
  int kClassMask_4a; // [sp+8Ch] [bp-294h]@116
  int kClassMask_4b; // [sp+8Ch] [bp-294h]@154
  float kClassMask_4c; // [sp+8Ch] [bp-294h]@203
  unsigned int kClassMask_4d; // [sp+8Ch] [bp-294h]@284
  SkillInfoWin *i; // [sp+90h] [bp-290h]@1
  unsigned int ia; // [sp+90h] [bp-290h]@48
  unsigned int totalNum; // [sp+98h] [bp-288h]@48
  unsigned int totalNuma; // [sp+98h] [bp-288h]@116
  int totalNumb; // [sp+98h] [bp-288h]@205
  int totalNumc; // [sp+98h] [bp-288h]@284
  unsigned int uiExp; // [sp+9Ch] [bp-284h]@46
  int uiExpa; // [sp+9Ch] [bp-284h]@63
  int uiExpb; // [sp+9Ch] [bp-284h]@286
  int pkInfo; // [sp+A0h] [bp-280h]@11
  int dwDlyTime; // [sp+A4h] [bp-27Ch]@22
  bool bSetItemAttackPower; // [sp+AAh] [bp-276h]@37
  bool bNeedToViewEmpower; // [sp+ABh] [bp-275h]@69
  char *pkProduceInfo; // [sp+ACh] [bp-274h]@1
  char acStr[256]; // [sp+B0h] [bp-270h]@38
  char acRate[256]; // [sp+1B0h] [bp-170h]@172
  char acEmpowerApplyDesc[64]; // [sp+2B0h] [bp-70h]@154
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strAttackInfoExplanation; // [sp+2F0h] [bp-30h]@47
  int v268; // [sp+30Ch] [bp-14h]@47
  unsigned int v269; // [sp+310h] [bp-10h]@1
  int v270; // [sp+31Ch] [bp-4h]@162
  int v271; // [sp+320h] [bp+0h]@1

  v269 = (unsigned int)&v271 ^ __security_cookie;
  v234 = (unsigned int)&v271 ^ __security_cookie;
  v5 = this;
  i = this;
  SkillInfoWin::HideAllMoneyWin(this);
  v6 = (int)v5->m_apkTextWin;
  pkProduceInfo = (char *)60;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v6 + 472))(&unk_9ABACB);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v6 + 468))(&Color::m_kDxWhiteColor);
    v6 += 4;
    --pkProduceInfo;
  }
  while ( *(float *)&pkProduceInfo != 0.0 );
  if ( kSkillID == -1
    || ((SkillInfoWin::SetSetItem(v5, kSkillID),
         v7 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
         (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, unsigned int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                                           + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            kSkillID,
                            v234)) ? (kSkillID <= *(_WORD *)(v7 + 200) ? ((v9 = *(_DWORD *)(v7 + 196),
                                                                           *(_DWORD *)(v9 + 4 * kSkillID)) ? (v8 = *(_DWORD *)(v9 + 4 * kSkillID)) : (v8 = 0)) : (v8 = 0)) : (v8 = 0),
        (v10 = *(int (__cdecl **)(_DWORD))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                         + 16),
         pkInfo = v8,
         pkProduceInfo = (char *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
         (unsigned __int8)v10(kSkillID)) ? (kSkillID <= *((_WORD *)pkProduceInfo + 100) ? ((v11 = *((_DWORD *)pkProduceInfo
                                                                                                  + 49)
                                                                                                + 4 * kSkillID,
                                                                                            *(_DWORD *)v11) ? (pkViewInfo = *(_DWORD *)v11) : (pkViewInfo = 0)) : (pkViewInfo = 0)) : (pkViewInfo = 0),
        !v8 || !pkViewInfo) )
    return 0;
  if ( kSkillID < 0x4E20u )
  {
    uiExpa = 0;
    if ( bViewEmpowerPointApplied )
    {
      v44 = pkVirtualValue;
      if ( !pkVirtualValue )
        v44 = Skill::GetAccumulatedEmpowerInfo((Skill::EmpowerInfo *)&pkProduceInfo, kSkillID);
      LOBYTE(uiExpa) = v44->cDamageUp;
      BYTE1(uiExpa) = v44->cSmallSp;
      BYTE3(uiExpa) = v44->cShortCoolTime;
      BYTE2(uiExpa) = v44->cLongKeepTime;
    }
    bLevelSatisfied = *(_DWORD *)(pkViewInfo + 839) <= (signed int)User::Lv(&g_kUser);
    v45 = CharClass::GetBitbyClassType((UseClassType)*(_DWORD *)(v8 + 267));
    v46 = v45;
    kClassMask = v45;
    v47 = 1i64 << User::GetMainCharClass(&g_kUser);
    bSetItemAttackPower = 1;
    if ( !__PAIR__(HIDWORD(kClassMask) & HIDWORD(v47), v46 & (unsigned int)v47) )
      bSetItemAttackPower = 0;
    v48 = Inventory::IsDemandType(&g_kInventory, *(WeaponDemandType *)(v8 + 110));
    v49 = v5->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    bNeedToViewEmpower = v48;
    ((void (__stdcall *)(int))v49[118].__vecDelDtor)(v8 + 34);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v50 = v5->m_apkTextWin[1];
    v51 = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v52 = TextData::Get(0x244190AAu);
    v51[118].__vecDelDtor((NiRefObject *)v50, (unsigned int)v52);
    v53 = 2;
    if ( strcmp(
           (const char *)((int (*)(void))v5->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(),
           " ") )
    {
      v53 = 3;
      ((void (__stdcall *)(_DWORD))v5->m_apkTextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
    }
    if ( Skill::IsLearnSkill(kSkillID) && bBuy )
    {
      v54 = v5->m_apkTextWin[v53]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v53];
      v55 = TextData::Get(0xA3420FF4u);
      v54[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v55);
      ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[v53++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    }
    if ( v53 > 0
      && strcmp((const char *)(*(int (**)(void))(**((_DWORD **)&v5->baseclass_0.m_bLock + v53) + 484))(), " ") )
    {
      v56 = v5->m_apkTextWin[v53++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
      ((void (__stdcall *)(_DWORD))v56)(" ");
    }
    CharClass::GetEquipableClassSortStr(kClassMask, acStr, 0x100u);
    v57 = v5->m_apkTextWin[v53]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkProduceInfo = (char *)v5->m_apkTextWin[v53];
    v58 = TextData::Get(0x9FF5FBECu);
    v59 = fs(v58);
    v57[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v59);
    if ( !bSetItemAttackPower )
      ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[v53]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    v60 = TextData::Get(0x98F7ED01u);
    sprintf(acStr, v60);
    ((void (__stdcall *)(_DWORD))v5->m_apkTextWin[v53 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    if ( bLevelSatisfied )
      v238 = &Color::m_kDxWhiteColor;
    else
      v238 = &Color::m_kDxRedColor;
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[v53 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v238);
    v61 = *(_DWORD *)(pkInfo + 110);
    v62 = v53 + 2;
    if ( v61 == 2 )
    {
LABEL_114:
      *(float *)&pkProduceInfo = 0.0;
      if ( BYTE1(uiExpa) )
        pkProduceInfo = *(char **)(pkInfo + 4 * SBYTE1(uiExpa) + 463);
      v69 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
      v70 = v5->m_svItemAction.baseclass_0._Mylast;
      kClassMask_4a = 0;
      bSetItemAttackPower = 0;
      totalNuma = 0;
      if ( !((signed int)((char *)v70 - v69) / 12) )
        goto LABEL_328;
      dwDlyTime = 0;
      do
      {
        v71 = ItemActionEffectTab::GetByEffectID(*(_WORD *)(dwDlyTime + v69 + 4));
        if ( v71 && v71->EffectActivity == 5 && v71->EffectActivityValue == 3 )
        {
          v72 = (signed int)((unsigned __int64)(1717986919i64 * (1000 - v71->Value)) >> 32) >> 2;
          kClassMask_4a += v72 + ((unsigned int)v72 >> 31);
          bSetItemAttackPower = 1;
        }
        v69 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
        v73 = v5->m_svItemAction.baseclass_0._Mylast;
        ++totalNuma;
        dwDlyTime += 12;
      }
      while ( totalNuma < (signed int)((char *)v73 - v69) / 12 );
      if ( !bSetItemAttackPower )
      {
LABEL_328:
        if ( *(float *)&pkProduceInfo == 0.0 )
        {
          if ( *(_DWORD *)(pkInfo + 160) )
          {
            v87 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkProduceInfo = (char *)v5->m_apkTextWin[v62++];
            v88 = TextData::Get(0xF6070722u);
            v89 = fs(v88);
            v87[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v89);
          }
LABEL_142:
          if ( *(_DWORD *)(pkInfo + 164) )
          {
            v90 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkProduceInfo = (char *)v5->m_apkTextWin[v62];
            v91 = TextData2::Get(0x385D879Au);
            v92 = fs(v91);
            v90[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v92);
            ++v62;
          }
          if ( *(_DWORD *)(pkInfo + 172) )
          {
            v93 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkProduceInfo = (char *)v5->m_apkTextWin[v62];
            v94 = TextData2::Get(0x385D878Fu);
            v95 = fs(v94);
            v93[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v95);
            ++v62;
          }
          if ( *(_DWORD *)(pkInfo + 176) )
          {
            v96 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkProduceInfo = (char *)v5->m_apkTextWin[v62++];
            v97 = TextData3::Get(0x8CA9D6E2u);
            v98 = fs(v97);
            v96[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v98);
          }
          if ( *(_BYTE *)(pkInfo + 668) )
          {
            v99 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkProduceInfo = (char *)v5->m_apkTextWin[v62++];
            v100 = TextData2::Get(0xF6F0E3F1u);
            v101 = fs(v100);
            v99[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v101);
          }
          if ( v62 > 0
            && strcmp((const char *)(*(int (**)(void))(**((_DWORD **)&v5->baseclass_0.m_bLock + v62) + 484))(), " ") )
          {
            v102 = v5->m_apkTextWin[v62++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
            ((void (__stdcall *)(_DWORD))v102)(" ");
          }
          v103 = SkillInfoWin::SetMinMaxWCRate(v5, (ActiveSkillInfo *)pkInfo, v62);
          v104 = SkillInfoWin::SetMinMaxMARate(v5, (ActiveSkillInfo *)pkInfo, v103);
          v17 = *(_BYTE *)(pkViewInfo + 843) == 45;
          dwDlyTime = v104;
          if ( v17 )
            goto LABEL_273;
          SkillInfoWin::SetTextBeginNewLine(v5, (const char *)(pkViewInfo + 843), &dwDlyTime, &Color::m_kDxWhiteColor);
          v105 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
          *(_DWORD *)&acEmpowerApplyDesc[4] = dword_9ABB48;
          acEmpowerApplyDesc[8] = byte_9ABB4C;
          v106 = (signed int)((char *)v5->m_svItemAction.baseclass_0._Mylast - v105);
          *(_DWORD *)acEmpowerApplyDesc = dword_9ABB44;
          v107 = 0;
          bNeedToViewEmpower = 0;
          kClassMask_4b = 0;
          bSetItemAttackPower = 0;
          if ( v106 / 12 )
          {
            *(float *)&pkProduceInfo = 0.0;
            do
            {
              v108 = ItemActionEffectTab::GetByEffectID(*(_WORD *)&pkProduceInfo[v105 + 4]);
              if ( v108 )
              {
                if ( v108->EffectActivity == 5 )
                {
                  v109 = v108->EffectActivityValue;
                  if ( !v109 || v109 == 11 )
                  {
                    kClassMask_4b += (v108->Value - 1000) / 10;
                    bSetItemAttackPower = 1;
                  }
                }
              }
              v105 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
              v110 = v5->m_svItemAction.baseclass_0._Mylast;
              pkProduceInfo += 12;
              v111 = (signed int)((unsigned __int64)(715827883i64 * (signed int)((char *)v110 - v105)) >> 32) >> 1;
              ++v107;
            }
            while ( v107 < v111 + ((unsigned int)v111 >> 31) );
          }
          *(_DWORD *)&strAttackInfoExplanation.baseclass_0._Alval.baseclass_0.dummy[0] = 15;
          strAttackInfoExplanation.baseclass_0._Myres = 0;
          strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[4] = 0;
          v17 = *(_DWORD *)(pkInfo + 527) == 5;
          v270 = 0;
          if ( v17 )
          {
            v112 = TextData2::Get(0x275B438Du);
            v113 = v112;
            v114 = (int)(v112 + 1);
            do
              v115 = *v113++;
            while ( v115 );
          }
          else
          {
            v112 = TextData::Get(0x49328BA3u);
            v113 = v112;
            v114 = (int)(v112 + 1);
            do
              v116 = *v113++;
            while ( v116 );
          }
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strAttackInfoExplanation
                                                                                   + 4),
            v112,
            (unsigned int)&v113[-v114]);
          if ( bSetItemAttackPower )
          {
            if ( kClassMask_4b <= 0 )
              v232 = "%d%%";
            else
              v232 = "+%d%%";
            fs(v232);
            acRate[0] = 0;
            if ( (_BYTE)uiExpa )
            {
              memset(&acRate[1], 0, 0xFFu);
              if ( SkillInfoWin::IsPassiveEffect(v5, kSkillID, acRate) )
                v117 = fs("%s +%d %s +%s");
              else
                v117 = fs("%s +%d %s");
            }
            else
            {
              memset(&acRate[1], 0, 0xFFu);
              if ( SkillInfoWin::IsPassiveEffect(v5, kSkillID, acRate) )
                v117 = fs("%s %s +%s");
              else
                v117 = fs("%s %s");
            }
            v118 = v117;
            do
              v119 = *v117++;
            while ( v119 );
            v120 = v117 - v118;
            v121 = &acRate[255];
            do
            {
              v122 = *((_BYTE *)v121 + 1);
              v121 = (char *)v121 + 1;
            }
            while ( v122 );
          }
          else
          {
            acRate[0] = 0;
            if ( (_BYTE)uiExpa )
            {
              memset(&acRate[1], 0, 0xFFu);
              if ( SkillInfoWin::IsPassiveEffect(v5, kSkillID, acRate) )
              {
                v123 = fs("%s +%d +%s");
                v124 = v123;
                do
                  v125 = *v123++;
                while ( v125 );
                v120 = v123 - v124;
                v126 = v124;
                v121 = &acRate[255];
                do
                {
                  v127 = *((_BYTE *)v121 + 1);
                  v121 = (char *)v121 + 1;
                }
                while ( v127 );
              }
              else
              {
                v128 = fs("%s +%d");
                v129 = v128;
                do
                  v130 = *v128++;
                while ( v130 );
                v120 = v128 - v129;
                v126 = v129;
                v121 = &acRate[255];
                do
                {
                  v131 = *((_BYTE *)v121 + 1);
                  v121 = (char *)v121 + 1;
                }
                while ( v131 );
              }
              goto LABEL_202;
            }
            memset(&acRate[1], 0, 0xFFu);
            if ( SkillInfoWin::FindPassiveEffect(v5, kSkillID, acRate) != 1 )
            {
LABEL_203:
              v135 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
              kClassMask_4c = 0.0;
              v136 = (signed int)((char *)v5->m_svItemAction.baseclass_0._Mylast - v135);
              v137 = 0;
              bSetItemAttackPower = 0;
              if ( !(v136 / 12) )
                goto LABEL_329;
              *(float *)&pkProduceInfo = 0.0;
              do
              {
                totalNumb = *(_WORD *)&pkProduceInfo[v135 + 4];
                v138 = 0;
                if ( ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal() )
                {
                  while ( 1 )
                  {
                    v139 = CDataReader::GetRecord(
                             (CDataReader *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4),
                             v138);
                    if ( v139 )
                    {
                      if ( *(_WORD *)v139 == totalNumb )
                        break;
                    }
                    ++v138;
                    if ( v138 >= ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal() )
                      goto LABEL_214;
                  }
                  v140 = CDataReader::GetRecord(
                           (CDataReader *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4),
                           v138);
                  if ( v140 && *(_DWORD *)((char *)v140 + 10) == 5 && *(_DWORD *)((char *)v140 + 14) == 2 )
                  {
                    v141 = (signed int)((unsigned __int64)(1717986919i64 * (*((_WORD *)v140 + 9) - 1000)) >> 32) >> 2;
                    bSetItemAttackPower = 1;
                    kClassMask_4c = (double)(signed int)(v141 + ((unsigned int)v141 >> 31)) + kClassMask_4c;
                  }
                }
LABEL_214:
                v135 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
                v142 = v5->m_svItemAction.baseclass_0._Mylast;
                pkProduceInfo += 12;
                ++v137;
              }
              while ( v137 < (signed int)((char *)v142 - v135) / 12 );
              if ( bSetItemAttackPower )
              {
                if ( bNeedToViewEmpower )
                {
                  v143 = &acRate[255];
                  do
                    v144 = (v143++)[1];
                  while ( v144 );
                  v145 = byte_9ABBAE;
                  *(_WORD *)v143 = word_9ABBAC;
                  v143[2] = v145;
                }
                if ( kClassMask_4c <= 0.0 )
                  v231 = " %.1f%%";
                else
                  v231 = " +%.1f%%";
                fs(v231);
                acRate[0] = 0;
                if ( BYTE2(uiExpa) )
                {
                  memset(&acRate[1], 0, 0xFFu);
                  if ( SkillInfoWin::IsPassiveEffect(v5, kSkillID, acRate) )
                  {
                    TextData::Get(0x535F8C99u);
                    TextData::Get(0xEC4E4539u);
                    v146 = fs("%s +%.1f%s %s +%s");
                  }
                  else
                  {
                    TextData::Get(0x535F8C99u);
                    TextData::Get(0xEC4E4539u);
                    v146 = fs("%s +%.1f%s %s");
                  }
                  v147 = v146;
                  do
                    v148 = *v146++;
                  while ( v148 );
                  v149 = v146 - v147;
                  v150 = &acRate[255];
                  do
                  {
                    v151 = *((_BYTE *)v150 + 1);
                    v150 = (char *)v150 + 1;
                  }
                  while ( v151 );
                }
                else
                {
                  memset(&acRate[1], 0, 0xFFu);
                  if ( SkillInfoWin::IsPassiveEffect(v5, kSkillID, acRate) )
                  {
                    TextData::Get(0xEC4E4539u);
                    v152 = fs("%s %s +%s");
                    v147 = v152;
                    do
                      v153 = *v152++;
                    while ( v153 );
                    v149 = v152 - v147;
                    v150 = &acRate[255];
                    do
                    {
                      v154 = *((_BYTE *)v150 + 1);
                      v150 = (char *)v150 + 1;
                    }
                    while ( v154 );
                  }
                  else
                  {
                    TextData::Get(0xEC4E4539u);
                    v155 = fs("%s %s");
                    v147 = v155;
                    do
                      v156 = *v155++;
                    while ( v156 );
                    v149 = v155 - v147;
                    v150 = &acRate[255];
                    do
                    {
                      v157 = *((_BYTE *)v150 + 1);
                      v150 = (char *)v150 + 1;
                    }
                    while ( v157 );
                  }
                }
              }
              else
              {
LABEL_329:
                if ( BYTE2(uiExpa) )
                {
                  if ( bNeedToViewEmpower )
                  {
                    v158 = &acRate[255];
                    do
                      v159 = (v158++)[1];
                    while ( v159 );
                    v160 = byte_9ABBFE;
                    *(_WORD *)v158 = word_9ABBFC;
                    v158[2] = v160;
                  }
                  acRate[0] = 0;
                  memset(&acRate[1], 0, 0xFFu);
                  if ( SkillInfoWin::IsPassiveEffect(v5, kSkillID, acRate) )
                  {
                    TextData::Get(0x535F8C99u);
                    TextData::Get(0xEC4E4539u);
                    v161 = fs("%s +%.1f%s +%s");
                    v162 = v161;
                    do
                      v163 = *v161++;
                    while ( v163 );
                    v164 = v161 - v162;
                    v165 = v162;
                    v166 = &acRate[255];
                    do
                    {
                      v167 = *((_BYTE *)v166 + 1);
                      v166 = (char *)v166 + 1;
                    }
                    while ( v167 );
                    memcpy(v166, v165, v164);
                  }
                  else
                  {
                    TextData::Get(0x535F8C99u);
                    TextData::Get(0xEC4E4539u);
                    v168 = fs("%s +%.1f%s");
                    v169 = v168;
                    do
                      v170 = *v168++;
                    while ( v170 );
                    v171 = v168 - v169;
                    v172 = v169;
                    v173 = &acRate[255];
                    do
                    {
                      v174 = *((_BYTE *)v173 + 1);
                      v173 = (char *)v173 + 1;
                    }
                    while ( v174 );
                    memcpy(v173, v172, v171);
                  }
                  goto LABEL_266;
                }
                acRate[0] = 0;
                memset(&acRate[1], 0, 0xFFu);
                if ( SkillInfoWin::FindPassiveEffect(v5, kSkillID, acRate) != 2 )
                {
                  if ( !bNeedToViewEmpower )
                  {
                    v104 = dwDlyTime;
LABEL_270:
                    v270 = -1;
                    if ( *(_DWORD *)&strAttackInfoExplanation.baseclass_0._Alval.baseclass_0.dummy[0] >= 0x10u )
                      operator delete(*(void **)&strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[4]);
                    v5 = i;
                    *(_DWORD *)&strAttackInfoExplanation.baseclass_0._Alval.baseclass_0.dummy[0] = 15;
                    strAttackInfoExplanation.baseclass_0._Myres = 0;
                    strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[4] = 0;
LABEL_273:
                    if ( v104 > 0
                      && strcmp(
                           (const char *)(*(int (**)(void))(**((_DWORD **)&v5->baseclass_0.m_bLock + v104) + 484))(),
                           (const char *)&unk_9ABC28) )
                    {
                      v181 = v5->m_apkTextWin[v104++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
                      ((void (__stdcall *)(_UNKNOWN *))v181)(&unk_9ABC2C);
                    }
                    v182 = *(_DWORD *)(pkInfo + 203);
                    if ( v182 )
                    {
                      *(float *)&pkProduceInfo = (double)v182 / 1000.0;
                      v187 = TextData::Get(0x2B3FA092u);
                      sprintf(acStr, v187);
                      v185 = (char *)v5->m_apkTextWin[v104];
                      v186 = *(void *(__thiscall **)(NiRefObject *, unsigned int))(*(_DWORD *)v185 + 472);
                      v184 = acStr;
                    }
                    else
                    {
                      v183 = v5->m_apkTextWin[v104]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pkProduceInfo = (char *)v5->m_apkTextWin[v104];
                      v184 = TextData::Get(0x7674F4E5u);
                      v185 = pkProduceInfo;
                      v186 = v183[118].__vecDelDtor;
                    }
                    v186((NiRefObject *)v185, (unsigned int)v184);
                    v188 = v104 + 1;
                    if ( *(_DWORD *)(pkInfo + 180) )
                    {
                      pkProduceInfo = *(char **)(pkInfo + 180);
                      TextData::Get(0x2382A293u);
                      v230[0] = "%s%.1fm";
                      v229 = acStr;
                    }
                    else
                    {
                      TextData::Get(0x2382A293u);
                      v230[0] = "%s%.1fm";
                      v229 = acStr;
                    }
                    sprintf(v229, v230[0]);
                    ((void (__stdcall *)(_DWORD))v5->m_apkTextWin[v188]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
                    dwDlyTime = 0;
                    if ( BYTE3(uiExpa) )
                      dwDlyTime = *(_DWORD *)(pkInfo + 4 * SBYTE3(uiExpa) + 503);
                    v189 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
                    v190 = v5->m_svItemAction.baseclass_0._Mylast;
                    totalNumc = 0;
                    bSetItemAttackPower = 0;
                    kClassMask_4d = 0;
                    if ( !((signed int)((char *)v190 - v189) / 12) )
                      goto LABEL_330;
                    *(float *)&pkProduceInfo = 0.0;
                    do
                    {
                      uiExpb = *(_WORD *)&pkProduceInfo[v189 + 4];
                      v191 = 0;
                      if ( ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal() )
                      {
                        while ( 1 )
                        {
                          v192 = CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4),
                                   v191);
                          if ( v192 )
                          {
                            if ( *(_WORD *)v192 == uiExpb )
                              break;
                          }
                          ++v191;
                          if ( v191 >= ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal() )
                            goto LABEL_295;
                        }
                        v193 = CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4),
                                 v191);
                        if ( v193 && *(_DWORD *)((char *)v193 + 10) == 5 && *(_DWORD *)((char *)v193 + 14) == 1 )
                        {
                          v194 = (signed int)((unsigned __int64)(1717986919i64 * (*((_WORD *)v193 + 9) - 1000)) >> 32) >> 2;
                          totalNumc += v194 + ((unsigned int)v194 >> 31);
                          bSetItemAttackPower = 1;
                        }
                      }
LABEL_295:
                      v189 = *(_DWORD *)&v5->m_svItemAction.baseclass_0.___u0.baseclass_0.dummy[0];
                      v195 = v5->m_svItemAction.baseclass_0._Mylast;
                      ++kClassMask_4d;
                      pkProduceInfo += 12;
                    }
                    while ( kClassMask_4d < (signed int)((char *)v195 - v189) / 12 );
                    if ( bSetItemAttackPower )
                    {
                      if ( totalNumc <= 0 )
                        v233 = " %d%%";
                      else
                        v233 = " +%d%%";
                      v196 = fs(v233);
                      if ( dwDlyTime )
                      {
                        GetTimeStr(dwDlyTime);
                        fs("%s");
                        GetTimeStr(*(_DWORD *)(pkInfo + 207));
                        v197 = TextData::Get(0x909880BCu);
                        v198 = fs(v197);
                      }
                      else
                      {
                        GetTimeStr(*(_DWORD *)(pkInfo + 207));
                        v199 = TextData::Get(0x909880BDu);
                        v198 = fs(v199);
                      }
                      v5 = (SkillInfoWin *)strcat(v198, v196);
                      v240 = v198;
                      v200 = i->m_apkTextWin[v188 + 1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
                    }
                    else
                    {
LABEL_330:
                      v203 = v5->m_apkTextWin[v188 + 1];
                      v204 = v203->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      if ( !dwDlyTime )
                      {
                        v206 = *(_DWORD *)(pkInfo + 207);
                        pkProduceInfo = (char *)v5->m_apkTextWin[v188 + 1];
                        GetTimeStr(v206);
                        v207 = TextData::Get(0x909880BDu);
                        v208 = fs(v207);
                        v201 = pkProduceInfo;
                        v241 = (D3DXCOLOR *)v208;
                        v202 = v204[118].__vecDelDtor;
                        goto LABEL_308;
                      }
                      pkProduceInfo = (char *)v5->m_apkTextWin[v188 + 1];
                      GetTimeStr(dwDlyTime);
                      fs("%s");
                      GetTimeStr(*(_DWORD *)(pkInfo + 207));
                      v205 = TextData::Get(0x909880BCu);
                      v240 = fs(v205);
                      v200 = v204[118].__vecDelDtor;
                    }
                    ((void (__stdcall *)(char *))v200)(v240);
                    v201 = (char *)v5->m_apkTextWin[v188 + 1];
                    v202 = *(void *(__thiscall **)(NiRefObject *, unsigned int))(*(_DWORD *)v201 + 468);
                    v241 = &Color::m_kDxYellowColor;
LABEL_308:
                    ((void (__thiscall *)(char *))v202)(v201);
                    v209 = *(_DWORD *)(pkInfo + 184);
                    v210 = v188 + 2;
                    dwDlyTime = v210;
                    switch ( v209 )
                    {
                      case 0:
                        v211 = v5->m_apkTextWin[v210];
                        v212 = *(_DWORD *)v211;
                        ++v210;
                        pkProduceInfo = (char *)v211;
                        dwDlyTime = v210;
                        TextData::Get(0xE744472Eu);
                        TextData::Get(0xF1402B45u);
                        v213 = fs("%s: %s");
                        (*(void (__thiscall **)(char *, char *))(v212 + 472))(pkProduceInfo, v213);
                        break;
                      case 1:
                        v214 = v5->m_apkTextWin[v210];
                        v215 = *(_DWORD *)v214;
                        ++v210;
                        pkProduceInfo = (char *)v214;
                        dwDlyTime = v210;
                        TextData::Get(0xDEF3FAE9u);
                        TextData::Get(0xF1402B45u);
                        v216 = fs("%s: %s");
                        v217 = pkProduceInfo;
                        goto LABEL_318;
                      case 2:
                        v218 = v5->m_apkTextWin[v210];
                        v219 = *(_DWORD *)v218;
                        ++v210;
                        pkProduceInfo = (char *)v218;
                        dwDlyTime = v210;
                        TextData::Get(0xDA4F4E3Bu);
                        TextData::Get(0xF1402B45u);
                        v220 = fs("%s: %s");
                        (*(void (__thiscall **)(char *, char *))(v219 + 472))(pkProduceInfo, v220);
                        break;
                      case 3:
                        v17 = strcmp((const char *)(pkInfo + 2), "Revival01") == 0;
                        v221 = v5->m_apkTextWin[v210];
                        v215 = *(_DWORD *)v221;
                        if ( v17 )
                        {
                          ++v210;
                          pkProduceInfo = (char *)v221;
                          dwDlyTime = v210;
                          TextData::Get(0xD1C0E7DAu);
                          TextData::Get(0xF1402B45u);
                          v216 = fs("%s: %s");
                          v217 = pkProduceInfo;
LABEL_318:
                          (*(void (__thiscall **)(char *, char *))(v215 + 472))(v217, v216);
                        }
                        else
                        {
                          ++v210;
                          pkProduceInfo = (char *)v221;
                          dwDlyTime = v210;
                          TextData::Get(0x2F3A3F32u);
                          TextData::Get(0xF1402B45u);
                          v222 = fs("%s: %s");
                          (*(void (__thiscall **)(char *, char *))(v215 + 472))(pkProduceInfo, v222);
                        }
                        break;
                      case 4:
                        v223 = v5->m_apkTextWin[v210];
                        v215 = *(_DWORD *)v223;
                        ++v210;
                        pkProduceInfo = (char *)v223;
                        dwDlyTime = v210;
                        TextData::Get(0xE9F94E38u);
                        TextData::Get(0xF1402B45u);
                        v216 = fs("%s: %s");
                        v217 = pkProduceInfo;
                        goto LABEL_318;
                      case 5:
                        v224 = v5->m_apkTextWin[v210];
                        v225 = *(_DWORD *)v224;
                        ++v210;
                        pkProduceInfo = (char *)v224;
                        dwDlyTime = v210;
                        TextData::Get(0xE5E7FA35u);
                        TextData::Get(0xF1402B45u);
                        v226 = fs("%s: %s");
                        (*(void (__thiscall **)(char *, char *))(v225 + 472))(pkProduceInfo, v226);
                        break;
                      case 7:
                        v227 = v5->m_apkTextWin[v210];
                        v215 = *(_DWORD *)v227;
                        ++v210;
                        pkProduceInfo = (char *)v227;
                        dwDlyTime = v210;
                        TextData::Get(0x3C968C7Fu);
                        TextData::Get(0xF1402B45u);
                        v216 = fs("%s: %s");
                        v217 = pkProduceInfo;
                        goto LABEL_318;
                      default:
                        break;
                    }
                    if ( v210 > 0
                      && strcmp(
                           (const char *)(*(int (__cdecl **)(D3DXCOLOR *))(**((_DWORD **)&v5->baseclass_0.m_bLock + v210)
                                                                         + 484))(v241),
                           " ") )
                    {
                      v228 = v5->m_apkTextWin[v210]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
                      dwDlyTime = v210 + 1;
                      ((void (__stdcall *)(_DWORD))v228)(" ");
                    }
                    if ( *(_BYTE *)(pkViewInfo + 583) != 45 )
                      SkillInfoWin::SetTextBeginNewLine(
                        v5,
                        (const char *)(pkViewInfo + 583),
                        &dwDlyTime,
                        &Color::m_kDxWhiteColor);
                    SkillInfoWin::SetSetItemDesc(v5, &dwDlyTime);
                    return SkillInfoWin::SetPassiveEffect(v5, kSkillID, dwDlyTime);
                  }
LABEL_266:
                  v178 = &acRate[255];
                  do
                    v179 = (v178++)[1];
                  while ( v179 );
                  v180 = dwDlyTime;
                  *(_WORD *)v178 = word_9ABC24;
                  ((void (__stdcall *)(_DWORD))i->m_apkTextWin[v180]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acEmpowerApplyDesc);
                  ((void (__stdcall *)(D3DXCOLOR *))i->m_apkTextWin[v180]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
                  v104 = v180 + 1;
                  goto LABEL_270;
                }
                TextData::Get(0xEC4E4539u);
                v175 = fs("%s +%s");
                v147 = v175;
                do
                  v176 = *v175++;
                while ( v176 );
                v149 = v175 - v147;
                v150 = &acRate[255];
                do
                {
                  v177 = *((_BYTE *)v150 + 1);
                  v150 = (char *)v150 + 1;
                }
                while ( v177 );
              }
              memcpy(v150, v147, v149);
              goto LABEL_266;
            }
            v132 = fs("%s +%s");
            v118 = v132;
            do
              v133 = *v132++;
            while ( v133 );
            v120 = v132 - v118;
            v121 = &acRate[255];
            do
            {
              v134 = *((_BYTE *)v121 + 1);
              v121 = (char *)v121 + 1;
            }
            while ( v134 );
          }
          v126 = v118;
LABEL_202:
          memcpy(v121, v126, v120);
          v5 = i;
          bNeedToViewEmpower = 1;
          goto LABEL_203;
        }
        if ( !*(_DWORD *)(pkInfo + 160) )
        {
LABEL_139:
          ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[v62++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
          goto LABEL_142;
        }
        v84 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkProduceInfo = (char *)v5->m_apkTextWin[v62];
        v85 = TextData::Get(0xF6070721u);
        v86 = fs(v85);
        v82 = pkProduceInfo;
        v239 = v86;
        v83 = v84[118].__vecDelDtor;
LABEL_138:
        v83((NiRefObject *)v82, (unsigned int)v239);
        goto LABEL_139;
      }
      v74 = fs("  -%d%%");
      if ( *(float *)&pkProduceInfo == 0.0 )
      {
        if ( !*(_DWORD *)(pkInfo + 160) )
          goto LABEL_133;
        v77 = TextData::Get(0xF6070722u);
        v76 = fs(v77);
      }
      else
      {
        if ( !*(_DWORD *)(pkInfo + 160) )
          goto LABEL_133;
        v75 = TextData::Get(0xF6070721u);
        v76 = fs(v75);
      }
      if ( v76 )
      {
        v79 = v74;
        v78 = strlen(v74) + 1;
        v80 = v76 - 1;
        do
        {
          v81 = *((_BYTE *)v80 + 1);
          v80 = (char *)v80 + 1;
        }
        while ( v81 );
        memcpy(v80, v79, v78);
        v5 = i;
        goto LABEL_134;
      }
LABEL_133:
      v76 = v74;
LABEL_134:
      v82 = (char *)v5->m_apkTextWin[v62];
      v239 = v76;
      v83 = *(void *(__thiscall **)(NiRefObject *, unsigned int))(*(_DWORD *)v82 + 472);
      goto LABEL_138;
    }
    if ( !v61 )
    {
      v63 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v64 = TextData::Get(0x88A58CD1u);
      v65 = pkProduceInfo;
      goto LABEL_111;
    }
    if ( v61 == 1 )
    {
      v66 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v67 = TextData::Get(0x91AA8CDBu);
      v68 = pkProduceInfo;
      goto LABEL_87;
    }
    if ( v61 == 3 )
    {
      v63 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v64 = TextData::Get(0xE605F8ECu);
      v65 = pkProduceInfo;
      goto LABEL_111;
    }
    if ( v61 == 4 )
    {
      v66 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v67 = TextData::Get(0xE6ECF5F8u);
      v68 = pkProduceInfo;
      goto LABEL_87;
    }
    if ( v61 == 5 )
    {
      v63 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v64 = TextData::Get(0x94ACEDEEu);
      v65 = pkProduceInfo;
      goto LABEL_111;
    }
    if ( v61 == 7 )
    {
      v66 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v67 = TextData::Get(0xDFFEEDF4u);
      v68 = pkProduceInfo;
      goto LABEL_87;
    }
    if ( v61 == 8 )
    {
      v63 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v64 = TextData::Get(0xA2A1A802u);
      v65 = pkProduceInfo;
      goto LABEL_111;
    }
    if ( v61 == 9 )
    {
      v66 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v67 = TextData::Get(0xE7F55249u);
      v68 = pkProduceInfo;
      goto LABEL_87;
    }
    if ( v61 == 10 )
    {
      v63 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v64 = TextData::Get(0xA7F8EEECu);
      v65 = pkProduceInfo;
      goto LABEL_111;
    }
    if ( v61 == 11 )
    {
      v66 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v67 = TextData::Get(0x94B6ECF9u);
      v68 = pkProduceInfo;
    }
    else
    {
      if ( v61 == 12 )
      {
        v63 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkProduceInfo = (char *)v5->m_apkTextWin[v62];
        v64 = TextData2::Get(0x9FA2FFECu);
        v65 = pkProduceInfo;
LABEL_111:
        v63[118].__vecDelDtor((NiRefObject *)v65, (unsigned int)v64);
        if ( !bNeedToViewEmpower )
          ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
LABEL_113:
        ++v62;
        goto LABEL_114;
      }
      if ( v61 != 13 )
      {
        if ( v61 != 14 )
          goto LABEL_114;
        v63 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkProduceInfo = (char *)v5->m_apkTextWin[v62];
        v64 = TextData3::Get(0x7E9FC4E0u);
        v65 = pkProduceInfo;
        goto LABEL_111;
      }
      v66 = v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkProduceInfo = (char *)v5->m_apkTextWin[v62];
      v67 = TextData2::Get(0xEAF5F702u);
      v68 = pkProduceInfo;
    }
LABEL_87:
    v66[118].__vecDelDtor((NiRefObject *)v68, (unsigned int)v67);
    if ( !bNeedToViewEmpower )
      ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[v62]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    goto LABEL_113;
  }
  ((void (__stdcall *)(int, int))v5->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
    v8 + 34,
    v235);
  if ( !Skill::IsRideSkill(kSkillID) )
  {
    if ( Skill::IsGatherSkill(kSkillID) )
    {
      v14 = v5->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v13 = 2;
      pkProduceInfo = (char *)v5->m_apkTextWin[1];
      dwDlyTime = 2;
      v15 = TextData::Get(0x2F368FAAu);
      v16 = pkProduceInfo;
    }
    else
    {
      v17 = Skill::IsBuildMiniRoomSkill(kSkillID) == 0;
      v18 = v5->m_apkTextWin[1];
      v14 = *(NiRefObjectVtbl **)v18;
      v13 = 2;
      dwDlyTime = 2;
      if ( !v17 )
      {
        pkProduceInfo = (char *)v18;
        v236 = TextData::Get(0x8AA98793u);
        ((void (__thiscall *)(char *))v14[118].__vecDelDtor)(pkProduceInfo);
        goto LABEL_29;
      }
      pkProduceInfo = (char *)v18;
      v15 = TextData::Get(0x33A39797u);
      v16 = pkProduceInfo;
    }
    v236 = v15;
    ((void (__thiscall *)(char *))v14[118].__vecDelDtor)(v16);
    goto LABEL_29;
  }
  v12 = v5->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v13 = 2;
  pkProduceInfo = (char *)v5->m_apkTextWin[1];
  dwDlyTime = 2;
  v236 = TextData::Get(0x3B5C363Au);
  ((void (__thiscall *)(char *))v12[118].__vecDelDtor)(pkProduceInfo);
LABEL_29:
  if ( strcmp(
         (const char *)((int (__cdecl *)(char *))v5->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v236),
         " ") )
  {
    v19 = v5->m_apkTextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v13 = 3;
    dwDlyTime = 3;
    ((void (__stdcall *)(_DWORD))v19)(" ");
  }
  if ( Skill::IsLearnProdSkill(kSkillID) && bBuy )
  {
    v20 = v5->m_apkTextWin[v13]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkProduceInfo = (char *)v5->m_apkTextWin[v13];
    v21 = TextData::Get(0xA3420FF4u);
    v20[118].__vecDelDtor((NiRefObject *)pkProduceInfo, (unsigned int)v21);
    ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[v13++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
    dwDlyTime = v13;
  }
  if ( v13 > 0 && strcmp((const char *)(*(int (**)(void))(**((_DWORD **)&v5->baseclass_0.m_bLock + v13) + 484))(), " ") )
  {
    v22 = v5->m_apkTextWin[v13++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    dwDlyTime = v13;
    ((void (__stdcall *)(_DWORD))v22)(" ");
  }
  v23 = *(_DWORD *)(pkViewInfo + 839);
  bSetItemAttackPower = v23 <= (signed int)User::Lv(&g_kUser);
  if ( v23 )
  {
    v24 = TextData::Get(0x98F7ED01u);
    sprintf(acStr, v24);
    ((void (__stdcall *)(_DWORD, char *))v5->m_apkTextWin[v13]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
      acStr,
      v236);
    v237 = bSetItemAttackPower ? &Color::m_kDxWhiteColor : &Color::m_kDxRedColor;
    ((void (__cdecl *)(D3DXCOLOR *))v5->m_apkTextWin[v13++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v237);
    dwDlyTime = v13;
    if ( v13 > 0 )
    {
      if ( strcmp((const char *)(*(int (**)(void))(**((_DWORD **)&v5->baseclass_0.m_bLock + v13) + 484))(), " ") )
      {
        v25 = v5->m_apkTextWin[v13++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
        dwDlyTime = v13;
        ((void (__stdcall *)(_DWORD))v25)(" ");
      }
    }
  }
  v26 = *(_DWORD *)(pkInfo + 203);
  if ( v26 )
  {
    *(float *)&pkProduceInfo = (double)v26 / 1000.0;
    v27 = TextData::Get(0x2B3FA092u);
    sprintf(acStr, v27);
    ((void (__stdcall *)(_DWORD))v5->m_apkTextWin[v13++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
    dwDlyTime = v13;
  }
  uiExp = 0;
  v28 = ProduceInfoTable::GetByID(kSkillID);
  v29 = v28;
  pkProduceInfo = (char *)v28;
  if ( v28 )
  {
    v30 = v28->ProduceIndex[0];
    *(_QWORD *)&strAttackInfoExplanation.baseclass_0.___u0.baseclass_0.dummy[0] = 0i64;
    *(_QWORD *)&strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[8] = 0i64;
    strAttackInfoExplanation.baseclass_0._Mysize = 0;
    strAttackInfoExplanation.baseclass_0._Myres = 0;
    *(_DWORD *)&strAttackInfoExplanation.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
    v268 = 0;
    *(_DWORD *)&strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[1] = v28->ProduceIndex[1];
    v31 = v28->ProduceIndex[3];
    strAttackInfoExplanation.baseclass_0.___u0.baseclass_0.dummy[0] = v30;
    v32 = v29->ProduceIndex[2];
    strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[3] = v31;
    v33 = v29->ProduceIndex[5];
    strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[2] = v32;
    v34 = v29->ProduceIndex[4];
    v35 = v29->ProduceIndex[6];
    strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[5] = v33;
    strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[4] = v34;
    strAttackInfoExplanation.baseclass_0.___u0._Bx._Buf[6] = v35;
    if ( !strcmp(strAttackInfoExplanation.baseclass_0.___u0.baseclass_0.dummy, "Recipe_") )
    {
      totalNum = Skill::GetTotalLearnProductSkill();
      ia = 0;
      if ( totalNum )
      {
        do
        {
          v36 = Skill::GetLearnProductSkill(ia);
          v37 = v36->kSkillID;
          kClassMask_4 = v36;
          if ( v36->kSkillID != -1 )
          {
            v38 = 0;
            if ( ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
            {
              while ( 1 )
              {
                v39 = CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4),
                        v38);
                if ( *(_WORD *)v39 == v37 )
                  break;
                ++v38;
                if ( v38 >= ITableBase<ProduceInfo_ProduceInfoTable>::GetTotal() )
                  goto LABEL_56;
              }
              if ( *(_DWORD *)(pkProduceInfo + 422) == *(_DWORD *)((char *)v39 + 422) )
                uiExp += kClassMask_4->kSkillExp;
            }
          }
LABEL_56:
          ++ia;
        }
        while ( ia < totalNum );
      }
      if ( *(_DWORD *)(pkProduceInfo + 434) > uiExp )
        ((void (__stdcall *)(D3DXCOLOR *))v5->m_apkTextWin[dwDlyTime]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
      v40 = (char **)v5->m_apkTextWin[dwDlyTime];
      pkProduceInfo = *v40;
      v41 = TextData::Get(0x957C6FFDu);
      v42 = fs(v41);
      (*(void (__thiscall **)(char **, char *))((void (__thiscall **)(_DWORD, _DWORD))pkProduceInfo + 118))(v40, v42);
      ++dwDlyTime;
      v13 = dwDlyTime;
    }
  }
  if ( *(_BYTE *)(pkViewInfo + 583) != 45 )
  {
    SkillInfoWin::SetTextBeginNewLine(v5, (const char *)(pkViewInfo + 583), &dwDlyTime, &Color::m_kDxWhiteColor);
    v13 = dwDlyTime;
  }
  return v13;
}
// 9ABB44: using guessed type int dword_9ABB44;
// 9ABB48: using guessed type int dword_9ABB48;
// 9ABB4C: using guessed type char byte_9ABB4C;
// 9ABBAC: using guessed type __int16 word_9ABBAC;
// 9ABBAE: using guessed type char byte_9ABBAE;
// 9ABBFC: using guessed type __int16 word_9ABBFC;
// 9ABBFE: using guessed type char byte_9ABBFE;
// 9ABC24: using guessed type __int16 word_9ABC24;
// A85C00: using guessed type int __security_cookie;
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;
// A97E6C: using guessed type int ITableBase_ItemActionEffect_ItemActionEffectTab___ms_pkTable;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (00594720) --------------------------------------------------------
void __thiscall SkillInfoWin::SetSkillBuyInfo(SkillInfoWin *this, unsigned __int16 kSkillID, unsigned int uiPrice)
{
  SkillInfoWin *v3; // esi@1
  int v4; // edi@1

  v3 = this;
  v4 = SkillInfoWin::SetSkillInfo(this, kSkillID, 0, 0, 1);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[v4++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  SkillInfoWin::ShowMoneyWin(
    v3,
    v3->baseclass_0.m_uiEdgeWidth,
    v4 * (v3->m_iFontHeight + 2) + v3->baseclass_0.m_uiEdgeHeight + 2,
    uiPrice);
  SkillInfoWin::SetNeedFame(v3, kSkillID, v4);
}

//----- (00594790) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (005947B0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (005947D0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (005947F0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<ItemAction__>_ItemAction__>::_NiTListBase<DFALL<ItemAction__>_ItemAction__>(NiTListBase<DFALL<ItemAction *>,ItemAction *> *this)
{
  this->vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
}
// 9ABE14: using guessed type int (__thiscall *NiTListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);

//----- (00594800) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vector_deleting_destructor_(NiTListBase<DFALL<ItemAction *>,ItemAction *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9ABE14: using guessed type int (__thiscall *NiTListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);

//----- (00594830) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >,std::_Iterator_base0> *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 27) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 27) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 27); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 27); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (00594880) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (005948E0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00594940) --------------------------------------------------------
unsigned int __cdecl ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E6C: using guessed type int ITableBase_ItemActionEffect_ItemActionEffectTab___ms_pkTable;

//----- (00594960) --------------------------------------------------------
unsigned int __cdecl ITableBase<ItemActionCondition_ItemActionConditionTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ItemActionCondition_ItemActionConditionTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E70: using guessed type int ITableBase_ItemActionCondition_ItemActionConditionTab___ms_pkTable;

//----- (00594980) --------------------------------------------------------
unsigned int __cdecl ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E74: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab___ms_pkTable;

//----- (005949A0) --------------------------------------------------------
void __cdecl ItemActionTab::GetListByItemActionID(NiTList<ItemAction *> *kItemActionList, unsigned int uiIndex)
{
  unsigned int v2; // ebx@1
  void *v3; // eax@2
  void *v4; // edi@4
  NiTListItem<ItemAction *> *v5; // eax@4
  NiTListItem<ItemAction *> *v6; // ecx@4

  v2 = 0;
  if ( ItemActionTab::GetTotal() )
  {
    do
    {
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 4), v2);
      if ( v3 && *(_WORD *)v3 == uiIndex )
      {
        v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemAction_ItemActionTab>::ms_pkTable + 4), v2);
        v5 = kItemActionList->baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<ItemAction *>,ItemAction *> *)kItemActionList);
        v5->m_element = (ItemAction *)v4;
        v5->m_pkNext = 0;
        v5->m_pkPrev = kItemActionList->baseclass_0.baseclass_0.m_pkTail;
        v6 = kItemActionList->baseclass_0.baseclass_0.m_pkTail;
        if ( v6 )
          v6->m_pkNext = v5;
        else
          kItemActionList->baseclass_0.baseclass_0.m_pkHead = v5;
        ++*(_DWORD *)&kItemActionList->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        kItemActionList->baseclass_0.baseclass_0.m_pkTail = v5;
      }
      ++v2;
    }
    while ( v2 < ItemActionTab::GetTotal() );
  }
}
// A97E68: using guessed type int ITableBase_ItemAction_ItemActionTab___ms_pkTable;

//----- (00594A20) --------------------------------------------------------
ItemActionEffect *__cdecl ItemActionEffectTab::GetByEffectID(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  void *v2; // eax@2
  ItemActionEffect *result; // eax@5

  v1 = 0;
  if ( ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4), v1);
      if ( v2 )
      {
        if ( *(_WORD *)v2 == uiIndex )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<ItemActionEffect_ItemActionEffectTab>::GetTotal() )
        goto LABEL_5;
    }
    result = (ItemActionEffect *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<ItemActionEffect_ItemActionEffectTab>::ms_pkTable + 4),
                                   v1);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A97E6C: using guessed type int ITableBase_ItemActionEffect_ItemActionEffectTab___ms_pkTable;

//----- (00594A70) --------------------------------------------------------
PassiveSkillInfo *__cdecl PasSkillInfoTab::GetByActiveSkillGroupIndex(ActiveSkillGroupIndex kIndex)
{
  unsigned int v1; // esi@1
  PassiveSkillInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
  {
    while ( *((_DWORD *)CDataReader::GetRecord(
                          (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                          v1)
            + 62) != kIndex )
    {
      ++v1;
      if ( v1 >= ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (PassiveSkillInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                                   v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A98774: using guessed type int ITableBase_PassiveSkillInfo_PasSkillInfoTab___ms_pkTable;

//----- (00594AC0) --------------------------------------------------------
PassiveSkillInfo *__cdecl PasSkillInfoTab::GetByInxName(char *pcInxName)
{
  unsigned int v1; // edi@1
  PassiveSkillInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
  {
    while ( strcmp(
              (const char *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                              v1)
            + 2,
              pcInxName) )
    {
      ++v1;
      if ( v1 >= ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (PassiveSkillInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                                   v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A98774: using guessed type int ITableBase_PassiveSkillInfo_PasSkillInfoTab___ms_pkTable;

//----- (00594B40) --------------------------------------------------------
GUILD_TOURNAMENT_SKILLDESC *__cdecl GuildTournamentStateDescTab::GetIndex(const unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  GUILD_TOURNAMENT_SKILLDESC *result; // eax@4

  v1 = 0;
  if ( ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal() )
  {
    while ( *((_WORD *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable
                                       + 4),
                         v1)
            + 1) != uiIndex )
    {
      ++v1;
      if ( v1 >= ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (GUILD_TOURNAMENT_SKILLDESC *)CDataReader::GetRecord(
                                             (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable
                                                           + 4),
                                             v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97E74: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab___ms_pkTable;

//----- (00594B90) --------------------------------------------------------
unsigned int __cdecl ActiveSkillGroupTab::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ActiveSkillGroup_ActiveSkillGroupTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E9C: using guessed type int ITableBase_ActiveSkillGroup_ActiveSkillGroupTab___ms_pkTable;

//----- (00594BB0) --------------------------------------------------------
void __thiscall NiTList<ItemAction__>::_NiTList<ItemAction__>(NiTList<ItemAction *> *this)
{
  NiTList<ItemAction *> *v1; // edi@1
  NiTListItem<ItemAction *> *v2; // esi@1
  NiTListItem<ItemAction *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTPointerListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<ItemAction *>,ItemAction *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
}
// 9ABE14: using guessed type int (__thiscall *NiTListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);
// 9ABE24: using guessed type int (__thiscall *NiTPointerListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);

//----- (00594C30) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<ItemAction__>_ItemAction__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<ItemAction *>,ItemAction *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<ItemAction *> *v3; // esi@1
  NiTListItem<ItemAction *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<ItemAction *>,ItemAction *>Vtbl *)&NiTPointerListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<ItemAction__>_ItemAction__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9ABE14: using guessed type int (__thiscall *NiTListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);
// 9ABE24: using guessed type int (__thiscall *NiTPointerListBase_DFALL_ItemAction ___ItemAction _____vftable_)(void *p, char);

//----- (00594CC0) --------------------------------------------------------
NiPoint3 *__thiscall std::allocator<NiPoint3>::allocate(std::allocator<NiPoint3> *this, unsigned int _Count)
{
  NiPoint3 *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x15555555 || (result = (NiPoint3 *)operator new(12 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00594D20) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::erase(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 27) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 27) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 27) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 27) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 27) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v6;
      else
        v10->_Right = std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 27) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 27) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 26);
  *(_BYTE *)(*(_DWORD *)&v5 + 26) = *(_BYTE *)(*(_DWORD *)&v3 + 26);
  *(_BYTE *)(*(_DWORD *)&v3 + 26) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 26) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 26) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 26) )
        {
          *(_BYTE *)(v15 + 26) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 26) = 0;
          std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 27) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 26) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 26) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 26) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 26) = 1;
            *(_BYTE *)(v15 + 26) = 0;
            std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Rrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 26) = *(_BYTE *)(*(_DWORD *)&v6 + 26);
          *(_BYTE *)(*(_DWORD *)&v6 + 26) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 26) = 1;
          std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 26) )
        {
          *(_BYTE *)(v15 + 26) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 26) = 0;
          std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 27) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 26) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 26) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 26) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 26) = 1;
            *(_BYTE *)(v15 + 26) = 0;
            std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Lrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 26) = *(_BYTE *)(*(_DWORD *)&v6 + 26);
          *(_BYTE *)(*(_DWORD *)&v6 + 26) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 26) = 1;
          std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 26) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 26) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (00594F70) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (00594FB0) --------------------------------------------------------
void __cdecl std::_Uninit_def_fill_n<ItemAction___unsigned_int_ItemAction_std::allocator<ItemAction>_ItemAction>(ItemAction *_First, unsigned int _Count, ItemAction *__formal, std::allocator<ItemAction> *_Al, ItemAction *a5, std::_Nonscalar_ptr_iterator_tag a6)
{
  unsigned int v6; // edx@1
  ItemAction *v7; // eax@2

  v6 = _Count;
  if ( _Count )
  {
    v7 = _First;
    do
    {
      if ( v7 )
      {
        *(_DWORD *)&v7->ItemActionID = 0;
        *(_DWORD *)&v7->EffectID = 0;
        *(unsigned int *)((char *)&v7->CoolTime + 2) = 0;
      }
      ++v7;
      --v6;
    }
    while ( v6 );
  }
}

//----- (00594FE0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v29; // ecx@52
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0x12492491 )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (00595210) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::clear(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this)
{
  std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Erase(
        v1,
        v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (00595260) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::find(...)
{
  int v3; // edx@1
  int v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>, *v5; // eax@8

  v3 = *((_DWORD *)&this->baseclass_0 + 1);
  v4 = *(_DWORD *)(v3 + 4);
  while ( !*(_BYTE *)(v4 + 45) )
  {
    if ( *(_WORD *)(v4 + 12) >= *_Keyval )
    {
      v3 = v4;
      v4 = *(_DWORD *)v4;
    }
    else
    {
      v4 = *(_DWORD *)(v4 + 8);
    }
  }
  if ( v3 == *((_DWORD *)&this->baseclass_0 + 1) || *_Keyval < *(_WORD *)(v3 + 12) )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *((_DWORD *)&this->baseclass_0
                                                                                         + 1);
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (005952D0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::find(std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *result, const unsigned __int16 *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (00595340) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v6; // ecx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 27) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 27) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 27);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 27);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (005953E0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Buynode<std::pair<unsigned_short_ItemAction>>(std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *this, std::pair<unsigned short,ItemAction> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *result; // eax@1
  std::pair<unsigned short,ItemAction> *v4; // ecx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)operator new(0x1Cu);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    *(_DWORD *)&result->_Myval.baseclass_0.second.ItemActionID = *(_DWORD *)&v4->baseclass_0.second.ItemActionID;
    *(_DWORD *)&result->_Myval.baseclass_0.second.EffectID = *(_DWORD *)&v4->baseclass_0.second.EffectID;
    *(unsigned int *)((char *)&result->_Myval.baseclass_0.second.CoolTime + 2) = *(unsigned int *)((char *)&v4->baseclass_0.second.CoolTime
                                                                                                 + 2);
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00595460) --------------------------------------------------------
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::reserve(std::vector<NiPoint3,std::allocator<NiPoint3> > *this, unsigned int _Count)
{
  std::vector<NiPoint3,std::allocator<NiPoint3> > *v2; // esi@1
  void *v3; // eax@4
  NiPoint3 *v4; // ST04_4@4
  NiPoint3 *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // eax@6
  int v9; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@4

  v11 = &v9;
  v2 = this;
  if ( _Count > 0x15555555 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 12 < _Count )
  {
    v3 = std::allocator<NiPoint3>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(NiPoint3 **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v12 = 0;
    std::_Uninit_move<NiPoint3___NiPoint3___std::allocator<NiPoint3>_NiPoint3>(
      v5,
      v4,
      (NiPoint3 *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((unsigned __int64)(715827883i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 1;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    v8 = _Ptr;
    v2->baseclass_0._Myend = (NiPoint3 *)&_Ptr[12 * _Count];
    v2->baseclass_0._Mylast = (NiPoint3 *)&v8[12 * v7];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (00595550) --------------------------------------------------------
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::_Reserve(std::vector<NiPoint3,std::allocator<NiPoint3> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 12;
  if ( 357913941 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 12;
  if ( v3 > v4 )
  {
    if ( 357913941 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<ItemAction_std::allocator<ItemAction>>::reserve(this, v5);
  }
}

//----- (005955D0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *__thiscall std::multimap<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>>::insert<std::pair<unsigned_short_ItemAction>>(std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *result, std::pair<unsigned short,ItemAction> *_Val)
{
  std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > *v3; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v5; // ecx@1
  bool v6; // zf@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> >::_Node *v7; // esi@1
  const unsigned __int16 v8; // bx@2
  int v9; // ecx@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *v10; // eax@7

  v3 = this;
  v4 = std::_Tree_val<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Buynode<std::pair<unsigned_short_ItemAction>>(
         &this->baseclass_0.baseclass_0,
         _Val);
  v5 = v3->baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  v6 = v5->_Isnil == 0;
  v7 = v3->baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(_Val) = 1;
  if ( v6 )
  {
    v8 = v4->_Myval.baseclass_0.first;
    do
    {
      v7 = v5;
      LOBYTE(_Val) = v8 < v5->_Myval.baseclass_0.first;
      if ( (_BYTE)_Val )
        v5 = v5->_Left;
      else
        v5 = v5->_Right;
    }
    while ( !v5->_Isnil );
  }
  v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::_Insert(
                     &v3->baseclass_0,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > *)&_Val,
                     (bool)_Val,
                     v7,
                     v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v10 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  return v10;
}

//----- (00595640) --------------------------------------------------------
void __thiscall std::multimap<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>>::_multimap<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>>(std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > *this)
{
  std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > > result; // [sp+0h] [bp-14h]@1
  std::multimap<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,ItemAction,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,ItemAction> >,1> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_short_ItemAction_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_ItemAction>>_1>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (005956A0) --------------------------------------------------------
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::resize(std::vector<ItemAction,std::allocator<ItemAction> > *this, unsigned int _Newsize)
{
  std::vector<ItemAction,std::allocator<ItemAction> > *v2; // esi@1
  ItemAction *v3; // ecx@1
  int v4; // eax@1
  unsigned int v5; // edx@2

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  v4 = (signed int)((char *)v3 - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) / 12;
  if ( v4 <= _Newsize )
  {
    if ( v4 >= _Newsize )
      return;
    std::vector<ItemAction_std::allocator<ItemAction>>::_Reserve(
      (std::vector<NiPoint3,std::allocator<NiPoint3> > *)v2,
      _Newsize - v4);
    std::_Uninit_def_fill_n<ItemAction___unsigned_int_ItemAction_std::allocator<ItemAction>_ItemAction>(
      v2->baseclass_0._Mylast,
      _Newsize
    - (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) / 12,
      0,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Newsize);
    v5 = (unsigned int)&v2->baseclass_0._Mylast[_Newsize
                                              - (signed int)((char *)v2->baseclass_0._Mylast
                                                           - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])
                                              / 12];
  }
  else
  {
    v5 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 12 * _Newsize;
    if ( (ItemAction *)v5 == v3 )
      return;
  }
  v2->baseclass_0._Mylast = (ItemAction *)v5;
}

//----- (00595770) --------------------------------------------------------
void __thiscall std::vector<ItemAction_std::allocator<ItemAction>>::push_back(std::vector<NiPoint3,std::allocator<NiPoint3> > *this, NiPoint3 *_Val)
{
  std::vector<NiPoint3,std::allocator<NiPoint3> > *v2; // edi@1
  NiPoint3 *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  int v6; // ecx@5
  NiPoint3 *v7; // eax@5
  NiPoint3 *v8; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<ItemAction_std::allocator<ItemAction>>::_Reserve(v2, 1u);
    v8 = v2->baseclass_0._Mylast;
    if ( v8 )
    {
      v8->x = _Val->x;
      v8->y = _Val->y;
      v8->z = _Val->z;
    }
  }
  else
  {
    v4 = (signed int)((unsigned __int64)(715827883i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 1;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<ItemAction_std::allocator<ItemAction>>::_Reserve(v2, 1u);
    v6 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 12 * v5;
    v7 = v2->baseclass_0._Mylast;
    if ( v7 )
    {
      LODWORD(v7->x) = *(_DWORD *)v6;
      LODWORD(v7->y) = *(_DWORD *)(v6 + 4);
      LODWORD(v7->z) = *(_DWORD *)(v6 + 8);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (00595800) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v6; // edi@6
  int v7; // edx@6
  int v8; // edx@9
  int v9; // edx@11
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v10; // eax@13
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v11; // edx@14
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v12; // esi@14
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v13; // esi@15
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v14; // edx@18
  int v15; // esi@20
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v16; // esi@22
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v17; // edx@26
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v18; // esi@26
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v19; // edi@26
  int v20; // edi@28
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v21; // edi@30
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v22; // esi@33
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v23; // edx@36
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v24; // esi@36
  int v25; // esi@38
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v26; // esi@40
  int v27; // edi@46
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v28; // edi@48
  int v29; // ecx@54
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *v30; // eax@54

  v5 = *((_DWORD *)&this->baseclass_0 + 2);
  if ( v5 >= 0x7FFFFFE )
  {
    if ( _Newnode->_Myval.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Newnode->_Myval.baseclass_0.second.baseclass_0._Myres = 15;
    _Newnode->_Myval.baseclass_0.second.baseclass_0._Mysize = 0;
    _Newnode->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v6 = _Newnode;
  *((_DWORD *)&this->baseclass_0 + 2) = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v7 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v7 )
  {
    *(_DWORD *)(v7 + 4) = _Newnode;
    **((_DWORD **)&this->baseclass_0 + 1) = _Newnode;
    *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 8) = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)v8 )
        *(_DWORD *)v8 = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)(v9 + 8) )
        *(_DWORD *)(v9 + 8) = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)(v15 + 4) )
          {
            *(_DWORD *)(v15 + 4) = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)(v20 + 4) )
        {
          *(_DWORD *)(v20 + 4) = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_52:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)(v25 + 4) )
          {
            *(_DWORD *)(v25 + 4) = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)(v27 + 4) )
        {
          *(_DWORD *)(v27 + 4) = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_52;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 4);
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  *(_BYTE *)(v29 + 44) = 1;
  return v30;
}

//----- (00595A50) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v2; // esi@1
  std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *i; // edi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    if ( v2->_Myval.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v2->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->_Myval.baseclass_0.second.baseclass_0._Myres = 15;
    v2->_Myval.baseclass_0.second.baseclass_0._Mysize = 0;
    v2->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(v2);
  }
}

//----- (00595AB0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v6; // esi@8
  std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *v7; // ecx@10
  int v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v9; // eax@17
  int v10; // ecx@20
  int v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v14; // eax@35
  std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *i; // ecx@36
  int v16; // eax@38
  int v17; // eax@61
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *v18; // eax@63
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 45) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 45) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 45) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = *((_DWORD *)&thisa->baseclass_0 + 1);
    if ( *(_DWORD *)(v8 + 4) == v3 )
    {
      *(_DWORD *)(v8 + 4) = v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( **((_DWORD **)&thisa->baseclass_0 + 1) == v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 45) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v4);
        v7 = thisa;
      }
      **((_DWORD **)&v7->baseclass_0 + 1) = v9;
    }
    v10 = *((_DWORD *)&v7->baseclass_0 + 1);
    if ( *(_DWORD *)(v10 + 8) == v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 45) )
        *(_DWORD *)(v10 + 8) = v6;
      else
        *(_DWORD *)(v10 + 8) = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 45) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 45) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = *((_DWORD *)&thisa->baseclass_0 + 1);
  if ( *(_DWORD *)(v11 + 4) == v3 )
  {
    *(_DWORD *)(v11 + 4) = v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 44);
  *(_BYTE *)(*(_DWORD *)&v5 + 44) = *(_BYTE *)(*(_DWORD *)&v3 + 44);
  *(_BYTE *)(*(_DWORD *)&v3 + 44) = v13;
LABEL_35:
  v14 = _Erasednode;
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 44) == 1 )
  {
    for ( i = thisa;
          v4 != *(_DWORD *)(*((_DWORD *)&i->baseclass_0 + 1) + 4);
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 44) != 1 )
        break;
      v16 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v16 + 44) )
        {
          *(_BYTE *)(v16 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 0;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v16 + 45) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 || *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v16 + 44) = 1;
            *(_BYTE *)(v16 + 44) = 0;
            std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v16);
            v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v16 + 44) = *(_BYTE *)(*(_DWORD *)&v6 + 44);
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) = 1;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v16 + 44) )
        {
          *(_BYTE *)(v16 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 0;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          v16 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v16 + 45) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) != 1 || *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v16 + 44) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) = 1;
            *(_BYTE *)(v16 + 44) = 0;
            std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v16);
            v16 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v16 + 44) = *(_BYTE *)(*(_DWORD *)&v6 + 44);
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)v16 + 44) = 1;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          break;
        }
      }
      *(_BYTE *)(v16 + 44) = 0;
LABEL_53:
      v4 = v6;
    }
    v14 = _Erasednode;
    *(_BYTE *)(*(_DWORD *)&v4 + 44) = 1;
  }
  if ( *(_DWORD *)(*(_DWORD *)&v14 + 36) >= 0x10u )
    operator delete(*(void **)(*(_DWORD *)&v14 + 16));
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 36) = 15;
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 32) = 0;
  *(_BYTE *)(*(_DWORD *)&_Erasednode + 16) = 0;
  operator delete(*(void **)&_Erasednode);
  v17 = *((_DWORD *)&thisa->baseclass_0 + 2);
  if ( v17 )
    *((_DWORD *)&thisa->baseclass_0 + 2) = v17 - 1;
  v18 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v18;
}

//----- (00595D30) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(...)
{
  std::_Tree<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *v4; // edx@1
  int v5; // ecx@1
  int v6; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v7; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *v8; // edi@1
  bool v9; // cl@1
  const unsigned __int16 v10; // bx@2
  std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v11; // ebx@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_tra *v13; // eax@12
  int v14; // ecx@15
  std::_Tree<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *v15; // [sp+Ch] [bp-4h]@1
  bool _Addleft; // [sp+1Ch] [bp+Ch]@1

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = *(_DWORD *)(v5 + 4);
  v7 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v5;
  v8 = _Node;
  v9 = 1;
  v15 = v4;
  _Addleft = 1;
  if ( !*(_BYTE *)(v6 + 45) )
  {
    v10 = v8->_Myval.baseclass_0.first;
    do
    {
      v7 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v6;
      if ( _Leftish )
        v9 = *(_WORD *)(v6 + 12) >= v10;
      else
        v9 = v10 < *(_WORD *)(v6 + 12);
      _Addleft = v9;
      if ( v9 )
        v6 = *(_DWORD *)v6;
      else
        v6 = *(_DWORD *)(v6 + 8);
    }
    while ( !*(_BYTE *)(v6 + 45) );
  }
  v11 = v7;
  *(_DWORD *)&_Leftish = v7;
  if ( v9 )
  {
    if ( v7 == **((std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > ***)&v4->baseclass_0
                + 1) )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
                          (std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *)v4,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *)&_Leftish,
                          1,
                          v7,
                          (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v8)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)_Leftish;
    v4 = v15;
  }
  if ( LOWORD(v11->_Myval.baseclass_0.first) >= v8->_Myval.baseclass_0.first )
  {
    if ( v8->_Myval.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v8->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    v8->_Myval.baseclass_0.second.baseclass_0._Myres = 15;
    v8->_Myval.baseclass_0.second.baseclass_0._Mysize = 0;
    v8->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(v8);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
                        (std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *)v4,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *)&_Leftish,
                        _Addleft,
                        v7,
                        (std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)v8)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (00595E30) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Linsert(...)
{
  int v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char *v5; // edx@1
  int v6; // ebx@1
  unsigned int v7; // ecx@2
  const char *v8; // eax@4
  const char *v9; // edx@6
  unsigned int v10; // esi@8
  unsigned int v11; // ecx@8
  int v12; // eax@12
  bool v13; // sf@12
  bool v14; // al@14
  unsigned int v15; // edi@17
  unsigned int v16; // esi@19
  unsigned int v17; // edx@21
  const char *v18; // ecx@24
  int v19; // eax@26
  bool v20; // sf@26
  signed int v21; // eax@28
  int v22; // ecx@37
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_str *v23; // eax@37
  int _Wherenode; // [sp+4h] [bp-14h]@4
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,st *v25; // [sp+8h] [bp-10h]@1
  unsigned int v26; // [sp+Ch] [bp-Ch]@2
  unsigned int v27; // [sp+10h] [bp-8h]@2
  bool _Addleft; // [sp+14h] [bp-4h]@1

  v4 = *((_DWORD *)&this->baseclass_0 + 1);
  v5 = _Node;
  v6 = *(_DWORD *)(v4 + 4);
  v25 = this;
  _Addleft = 1;
  if ( !*(_BYTE *)(v6 + 45) )
  {
    v7 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
    v27 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
    v26 = _Node->_Myval.baseclass_0.first.baseclass_0._Myres;
    while ( 1 )
    {
      _Wherenode = v6;
      v8 = (const char *)(v6 + 12);
      if ( _Leftish )
      {
        if ( v26 < 0x10 )
          v9 = (const char *)&v5->_Myval;
        else
          v9 = *(const char **)&v5->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
        v10 = *(_DWORD *)(v6 + 28);
        v11 = v10;
        if ( v10 >= v27 )
          v11 = v27;
        if ( *(_DWORD *)(v6 + 32) >= 0x10u )
          v8 = *(const char **)v8;
        v12 = std::char_traits<char>::compare(v8, v9, v11);
        v13 = v12 < 0;
        if ( !v12 )
        {
          if ( v10 < v27 )
          {
            v14 = 0;
            goto LABEL_32;
          }
          v13 = (v10 != v27) < 0;
        }
        v14 = !v13;
      }
      else
      {
        v15 = *(_DWORD *)(v6 + 28);
        if ( *(_DWORD *)(v6 + 32) >= 0x10u )
          v8 = *(const char **)v8;
        v16 = v5->_Myval.baseclass_0.first.baseclass_0._Mysize;
        if ( v7 < v16 )
          v16 = v7;
        v17 = v16;
        if ( v16 >= v15 )
          v17 = *(_DWORD *)(v6 + 28);
        if ( v26 < 0x10 )
          v18 = (const char *)&_Node->_Myval;
        else
          v18 = *(const char **)&_Node->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
        v19 = std::char_traits<char>::compare(v18, v8, v17);
        v20 = v19 < 0;
        if ( !v19 )
        {
          if ( v16 >= v15 )
            v21 = v16 != v15;
          else
            v21 = -1;
          v20 = v21 < 0;
        }
        v14 = v20;
      }
LABEL_32:
      _Addleft = v14;
      if ( v14 )
        v6 = *(_DWORD *)v6;
      else
        v6 = *(_DWORD *)(v6 + 8);
      v5 = _Node;
      if ( *(_BYTE *)(v6 + 45) )
      {
        this = v25;
        v4 = _Wherenode;
        break;
      }
      v7 = v27;
    }
  }
  v22 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
                      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)this,
                      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)&_Leftish,
                      _Addleft,
                      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4,
                      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v5)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v23 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v22;
  result->baseclass_0.second = 1;
  return v23;
}

//----- (00595F60) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,0> *v4; // esi@1
  int v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v6; // ecx@1
  int v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = _First;
  if ( _First != *(_DWORD *)v5 || _Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 45) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 45) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 45);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>, *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 45);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<unsigned_int_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::a *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(
      v4,
      *(std::_Tree_nod<std::_Tmap_traits<unsigned int,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)(v5 + 4));
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 4) = *((_DWORD *)&v4->baseclass_0 + 1);
    **((_DWORD **)&v4->baseclass_0 + 1) = *((_DWORD *)&v4->baseclass_0 + 1);
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 8) = *((_DWORD *)&v4->baseclass_0 + 1);
    v7 = *((_DWORD *)&v4->baseclass_0 + 1);
    v8 = result;
    *((_DWORD *)&v4->baseclass_0 + 2) = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)v7;
  }
  return v8;
}

//----- (00596020) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<unsigned_short_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *this, std::pair<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *v2; // edi@1
  void *v3; // eax@1
  void *v4; // esi@1
  int v5; // eax@2
  std::pair<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *v6; // edx@3
  int v8; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v10; // [sp+Ch] [bp-1Ch]@2
  char *v11; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v13; // [sp+18h] [bp-10h]@1
  int v14; // [sp+24h] [bp-4h]@2

  v13 = &v8;
  v2 = this;
  v3 = operator new(0x30u);
  v4 = v3;
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  v5 = (int)((char *)v3 + 12);
  *((_DWORD *)v4 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v4 + 22) = 0;
  v14 = 0;
  v11 = (char *)v4 + 12;
  v10 = (char *)v4 + 12;
  LOBYTE(v14) = 1;
  if ( v4 != (void *)-12 )
  {
    v6 = _Val;
    *(_WORD *)v5 = _Val->baseclass_0.first;
    *((_DWORD *)v4 + 9) = 15;
    *((_DWORD *)v4 + 8) = 0;
    *((_BYTE *)v4 + 16) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 16),
      &v6->baseclass_0.second);
  }
  return (std::_Tree_nod<std::_Tmap_traits<unsigned short,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00596100) --------------------------------------------------------
void *__thiscall SkillInfoWin::_scalar_deleting_destructor_(SkillInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SkillInfoWin::_SkillInfoWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00596130) --------------------------------------------------------
void __thiscall CSkillInitWin::OnHelpLink(CSkillInitWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ProductSkillReload");
}

//----- (00596160) --------------------------------------------------------
void __thiscall CSkillInitWin::CSkillInitWin(CSkillInitWin *this)
{
  CSkillInitWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CSkillInitWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CSkillInitWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AC1E0: using guessed type int (__stdcall *CSkillInitWin___vftable_)(int uiFlags);
// 9AC1FC: using guessed type int (__thiscall *CSkillInitWin___vftable_)(void *p, char);

//----- (005961B0) --------------------------------------------------------
void __thiscall CSkillInitWin::_CSkillInitWin(CSkillInitWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CSkillInitWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CSkillInitWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AC1E0: using guessed type int (__stdcall *CSkillInitWin___vftable_)(int uiFlags);
// 9AC1FC: using guessed type int (__thiscall *CSkillInitWin___vftable_)(void *p, char);

//----- (005961E0) --------------------------------------------------------
bool __thiscall CSkillInitWin::Create(CSkillInitWin *this, PgFrameWork *pkFrameWork)
{
  CSkillInitWin *v2; // edi@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  D3DXCOLOR v10; // ST18_16@13
  char *v11; // eax@13
  NiNode *v12; // esi@14
  EditWin *v13; // esi@19
  NiRefObjectVtbl *v14; // ebx@19
  char *v15; // eax@19
  PgWin *v16; // esi@19
  D3DXCOLOR v17; // ST18_16@19
  char *v18; // eax@19
  PgWin *v19; // esi@19
  D3DXCOLOR v20; // ST18_16@19
  char *v21; // eax@19
  NiSourceTexture *v22; // esi@19
  D3DXCOLOR v23; // ST10_16@23
  const char *v24; // [sp+0h] [bp-5Ch]@11
  int *v25; // [sp+4h] [bp-58h]@11
  int *v26; // [sp+8h] [bp-54h]@11
  NiSourceTexture *v27; // [sp+Ch] [bp-50h]@11
  UIUtil ui; // [sp+20h] [bp-3Ch]@10
  unsigned int uiWidth; // [sp+34h] [bp-28h]@13
  unsigned int uiHeight; // [sp+38h] [bp-24h]@13
  int iXOff; // [sp+3Ch] [bp-20h]@4
  int iYOff; // [sp+40h] [bp-1Ch]@4
  int iLeft; // [sp+44h] [bp-18h]@11
  int iTop; // [sp+48h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+4Ch] [bp-10h]@1
  int v36; // [sp+58h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v36 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\ProductSkillReload.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "ProductInitWin", 0) )
  {
    v6 = spNode.m_pObject;
    v36 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v36) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v27 = v8;
    v26 = &iTop;
    v25 = &iLeft;
    v24 = "Theme";
  }
  else
  {
    v27 = 0;
    v26 = &iTop;
    v25 = &iLeft;
    v24 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v24, v25, v26, v27);
  PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "IconSlot", 0);
  UIUtil::CreateSpr(&ui, "Plane", 0);
  *(_QWORD *)&v10.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v10.b = qword_A746E8;
  v11 = TextData::Get(0xE90AE6F0u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v11, COERCE_D3DXCOLOR(v10.r), 5u);
  UIUtil::CreateSpr(&ui, "IconSlotBox01", 0);
  UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "IconTxt01_", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v13 = EditWin::CreateWin(
            iLeft,
            iTop + 4,
            uiWidth,
            uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            MULTILINE,
            0x64u,
            1u,
            1,
            0,
            1);
    EditWin::SetImeStatus(v13, IS_KOREAN);
    v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v15 = TextData::Get(0xD60A3048u);
    v14[115].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
    EditWin::SetEnable(v13, 0);
    v16 = (PgWin *)UIUtil::CreateBtn(&ui, 1u, "Btn01Nor", "Btn01Over", "Btn01Click", 0, 0);
    *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v18 = TextData::Get(0x9912DBF5u);
    UIUtil::CreateAttachedText(&ui, v16, v18, COERCE_D3DXCOLOR(v17.r), 5u);
    v19 = (PgWin *)UIUtil::CreateBtn(&ui, 2u, "Btn02Nor", "Btn02Over", "Btn02Click", 0, 0);
    *(_QWORD *)&v20.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v20.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v21 = TextData::Get(0x88A297E1u);
    UIUtil::CreateAttachedText(&ui, v19, v21, COERCE_D3DXCOLOR(v20.r), 5u);
    v22 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      UIUtil::CreateBtn(&ui, 3u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v22);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "IconSlot01", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v2->m_akSelectedSkill.pkSlot = IconSlotWin::CreateWin(
                                       iLeft - iXOff,
                                       iTop - iYOff,
                                       &v2->baseclass_0.baseclass_0.baseclass_0);
      *(_QWORD *)&v23.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v23.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v2->m_akSelectedSkill.pkTitle = UIUtil::CreateText(
                                        &ui,
                                        "IconTxt01",
                                        byte_9AC0AE,
                                        0,
                                        COERCE_D3DXCOLOR(v23.r),
                                        5u,
                                        0,
                                        0);
      ((void (__thiscall *)(CSkillInitWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
      LOBYTE(v36) = 0;
      UIUtil::_UIUtil(&ui);
      v36 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v36) = 0;
      UIUtil::_UIUtil(&ui);
      v36 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v36) = 0;
    UIUtil::_UIUtil(&ui);
    v12 = spNode.m_pObject;
    v36 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005966B0) --------------------------------------------------------
void __thiscall CSkillInitWin::DirectMessage(CSkillInitWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  CSkillInitWin *v4; // esi@1
  unsigned __int16 v5; // ax@9
  unsigned __int16 v6; // ax@12
  ProduceViewInfo *v7; // eax@13

  v4 = this;
  if ( iMsgTag == 22 )
  {
    if ( *(_DWORD *)(*(_DWORD *)pvBody + 16) == 1 )
    {
      v6 = *(_WORD *)(*(_DWORD *)pvBody + 20);
      if ( (unsigned __int16)(v6 - 29100) <= 0x64u )
      {
        *((_BYTE *)pvBody + 12) = 1;
        v7 = ProduceViewInfoTable::GetByID(v6);
        if ( v7 )
          (*(void (__stdcall **)(_DWORD))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2])
                                        + 472))(v7->Name);
      }
    }
  }
  else
  {
    if ( iMsgTag == 27 && pvBody )
    {
      if ( *(_DWORD *)pvBody )
      {
        if ( *(_DWORD *)pvBody == 1 )
        {
          if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
          {
            IconSlotWin::GetSkill(LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]));
            v5 = IconSlotWin::GetSkill(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]));
            if ( ProduceViewInfoTable::GetByID(v5) )
              v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
          }
        }
      }
      else
      {
        if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
        {
          *(_WORD *)((char *)&pvBody + 1) = IconSlotWin::GetSkill(LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]));
          LOBYTE(pvBody) = LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_pkTail);
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x12u, 0x24u, &pvBody, 3);
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
          PgWin::PostMsg((PgWin *)((char *)v4 - 232), (PgWin *)((char *)v4 - 232), 1u, 0, 0);
        }
      }
    }
  }
}

//----- (005967B0) --------------------------------------------------------
void __thiscall CSkillInitWin::OnCommand(CSkillInitWin *this, unsigned int wParam, int lParam)
{
  CSkillInitWin *v3; // esi@1
  PgFrameWork *v4; // eax@4
  IconSlotWin *v5; // ecx@9
  unsigned __int16 v6; // ax@9
  char *v7; // eax@10
  char *v8; // eax@10
  MsgBox *v9; // eax@10

  v3 = this;
  switch ( wParam )
  {
    case 1u:
      if ( IconSlotWin::GetSkill(this->m_akSelectedSkill.pkSlot) != -1 )
      {
        if ( v3->m_byItemSlot != 65535 )
        {
          v5 = v3->m_akSelectedSkill.pkSlot;
          v3->m_bReloadAgree = 1;
          v6 = IconSlotWin::GetSkill(v5);
          if ( ProduceViewInfoTable::GetByID(v6) )
          {
            v7 = TextData::Get(0x4DA87B87u);
            v8 = fs(v7);
            v9 = MsgBox::Modeless(MSGBOX_OKCANCEL, v8);
            ((void (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          }
        }
      }
      break;
    case 2u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 3u:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "ProductSkillReload");
      break;
  }
}

//----- (00596880) --------------------------------------------------------
void __thiscall CSkillInitWin::OnShowWin(CSkillInitWin *this)
{
  CSkillInitWin *v1; // esi@1
  IconSlotWin *v2; // eax@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@1

  v1 = this;
  v2 = this->m_akSelectedSkill.pkSlot;
  this->m_byItemSlot = 255;
  v2->baseclass_0.m_bDroppable = 1;
  IconSlotWin::Clear(this->m_akSelectedSkill.pkSlot);
  v3 = v1->m_akSelectedSkill.pkTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = TextData::Get(0x7DEEC8DDu);
  v3[118].__vecDelDtor((NiRefObject *)v1->m_akSelectedSkill.pkTitle, (unsigned int)v4);
}

//----- (005968D0) --------------------------------------------------------
CSkillInitWin *__cdecl CSkillInitWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CSkillInitWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C0u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CSkillInitWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CSkillInitWin::_vftable_;
    *((_DWORD *)v2 + 88) = &PgWinDrop::_vftable_;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 92) = &DropContents::_vftable_;
    *((_WORD *)v2 + 214) = -1;
    *((_DWORD *)v2 + 108) = 0;
    *((_DWORD *)v2 + 89) = (char *)v2 + 368;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CSkillInitWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AC1E0: using guessed type int (__stdcall *CSkillInitWin___vftable_)(int uiFlags);
// 9AC1FC: using guessed type int (__thiscall *CSkillInitWin___vftable_)(void *p, char);

//----- (00596A40) --------------------------------------------------------
void *__thiscall CSkillInitWin::_vector_deleting_destructor_(CSkillInitWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CSkillInitWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CSkillInitWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AC1E0: using guessed type int (__stdcall *CSkillInitWin___vftable_)(int uiFlags);
// 9AC1FC: using guessed type int (__thiscall *CSkillInitWin___vftable_)(void *p, char);

//----- (00596A90) --------------------------------------------------------
void __thiscall PointPool::Init(PointPool *this, int iPoint, int iAntiPoint)
{
  this->m_iTotalPoint = iPoint;
  this->m_iAntiTotalPoint = iAntiPoint;
}

//----- (00596AB0) --------------------------------------------------------
int __thiscall PointPool::GetPoint(PointPool *this)
{
  return this->m_iTotalPoint;
}

//----- (00596AC0) --------------------------------------------------------
int __thiscall PointPool::GetAntiPoint(PointPool *this)
{
  return this->m_iAntiTotalPoint;
}

//----- (00596AD0) --------------------------------------------------------
void __thiscall PointOccupier::PointOccupier(PointOccupier *this)
{
  this->m_pkPool = 0;
  this->m_iPoint = 0;
  this->m_iLowerLimit = 0;
  this->m_iUpperLimit = 20000;
  this->m_iPointCount = 0;
}

//----- (00596AF0) --------------------------------------------------------
void __thiscall PointOccupier::SetPool(PointOccupier *this, PointPool *pkPool)
{
  this->m_pkPool = pkPool;
}

//----- (00596B00) --------------------------------------------------------
void __thiscall PointOccupier::Init(PointOccupier *this, int iLowerLimit, int iUpperLimit)
{
  this->m_iLowerLimit = iLowerLimit;
  this->m_iPoint = iLowerLimit;
  this->m_iUpperLimit = iUpperLimit;
}

//----- (00596B20) --------------------------------------------------------
void __thiscall PointOccupier::Inc(PointOccupier *this)
{
  PointPool *v1; // edx@1

  v1 = this->m_pkPool;
  if ( v1->m_iTotalPoint > 0 && this->m_iPoint < this->m_iUpperLimit )
  {
    if ( this->m_iPoint < this->m_iLowerLimit )
      ++v1->m_iAntiTotalPoint;
    --this->m_pkPool->m_iTotalPoint;
    ++this->m_iPoint;
    ++this->m_iPointCount;
  }
}

//----- (00596B50) --------------------------------------------------------
void __thiscall PointOccupier::Dec(PointOccupier *this)
{
  int v1; // eax@1
  bool v2; // zf@2
  bool v3; // sf@2
  unsigned __int8 v4; // of@2
  PointPool *v5; // eax@2

  v1 = this->m_iPoint;
  if ( this->m_iPoint > 0 )
  {
    v4 = __OFSUB__(v1, this->m_iLowerLimit);
    v2 = v1 == this->m_iLowerLimit;
    v3 = v1 - this->m_iLowerLimit < 0;
    v5 = this->m_pkPool;
    if ( (unsigned __int8)(v3 ^ v4) | v2 )
    {
      if ( v5->m_iAntiTotalPoint > 0 )
      {
        ++v5->m_iTotalPoint;
        --this->m_pkPool->m_iAntiTotalPoint;
        --this->m_iPoint;
        --this->m_iPointCount;
      }
    }
    else
    {
      ++v5->m_iTotalPoint;
      --this->m_iPoint;
      --this->m_iPointCount;
    }
  }
}

//----- (00596B80) --------------------------------------------------------
int __thiscall PointOccupier::GetPoint(PointOccupier *this)
{
  return this->m_iPoint;
}

//----- (00596B90) --------------------------------------------------------
int __thiscall PointOccupier::GetPointCount(PointOccupier *this)
{
  return this->m_iPointCount;
}

//----- (00596BA0) --------------------------------------------------------
void __thiscall PointOccupier::ReSetPointCount(PointOccupier *this)
{
  this->m_iPointCount = 0;
}

//----- (00596BB0) --------------------------------------------------------
int __thiscall PointOccupier::GetUpperLimit(PointOccupier *this)
{
  return this->m_iUpperLimit;
}

//----- (00596BC0) --------------------------------------------------------
void __thiscall SkillPowerIconWin::SkillPowerIconWin(SkillPowerIconWin *this)
{
  SkillPowerIconWin *v1; // esi@1

  v1 = this;
  SkillIcon::SkillIcon(&this->baseclass_0);
  v1->m_kSkillID = -1;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerIconWin::_vftable_;
}
// 9AC704: using guessed type int (__stdcall *SkillPowerIconWin___vftable_)(int uiFlags);
// 9AC724: using guessed type int (__thiscall *SkillPowerIconWin___vftable_)(void *p, char);

//----- (00596BF0) --------------------------------------------------------
void __thiscall SkillPowerIconWin::_SkillPowerIconWin(SkillPowerIconWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerIconWin::_vftable_;
  SkillIcon::_SkillIcon(&this->baseclass_0);
}
// 9AC704: using guessed type int (__stdcall *SkillPowerIconWin___vftable_)(int uiFlags);
// 9AC724: using guessed type int (__thiscall *SkillPowerIconWin___vftable_)(void *p, char);

//----- (00596C10) --------------------------------------------------------
void __thiscall SkillPowerIconWin::UpdateMeWin(SkillPowerIconWin *this, float fCurTime)
{
  IconWin::UpdateMeWin(&this->baseclass_0.baseclass_0, fCurTime);
}

//----- (00596C30) --------------------------------------------------------
bool __thiscall SkillPowerIconWin::Create(SkillPowerIconWin *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return SkillIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent) != 0;
}

//----- (00596C50) --------------------------------------------------------
unsigned __int16 __thiscall SkillPowerIconWin::GetSkillID(SkillPowerIconWin *this)
{
  return this->m_kSkillID;
}

//----- (00596C60) --------------------------------------------------------
void __thiscall SkillPowerIconWin::OnFirstHitWin(SkillPowerIconWin *this)
{
  SkillPowerIconWin *v1; // esi@1
  Skill::EmpowerInfo *v2; // ST08_4@1
  unsigned __int16 v3; // ST00_2@1
  SkillInfoWin *v4; // ecx@1

  v1 = this;
  v2 = &this->baseclass_0.m_kEmpowerInfo;
  v3 = this->m_kSkillID;
  v4 = (SkillInfoWin *)g_pkSkillInfoWin;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkSkillInfoWin;
  SkillInfoWin::SetSkillInfo(v4, v3, 1, v2, 0);
  PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
}

//----- (00596C90) --------------------------------------------------------
void __thiscall SkillPowerListItemWin::SkillPowerListItemWin(SkillPowerListItemWin *this)
{
  SkillPowerListItemWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerListItemWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerListItemWin::_vftable_;
  v1->m_kCurrPoint.m_pkPool = 0;
  v1->m_kCurrPoint.m_iPoint = 0;
  v1->m_kCurrPoint.m_iLowerLimit = 0;
  v1->m_kCurrPoint.m_iPointCount = 0;
  v1->m_kCurrPoint.m_iUpperLimit = 20000;
  v1->m_pkIconWin = 0;
}
// 9AC98C: using guessed type int (__stdcall *SkillPowerListItemWin___vftable_)(int uiFlags);
// 9AC9AC: using guessed type int (__thiscall *SkillPowerListItemWin___vftable_)(void *p, char);

//----- (00596CE0) --------------------------------------------------------
void __thiscall SkillPowerListItemWin::_SkillPowerListItemWin(SkillPowerListItemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerListItemWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerListItemWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9AC98C: using guessed type int (__stdcall *SkillPowerListItemWin___vftable_)(int uiFlags);
// 9AC9AC: using guessed type int (__thiscall *SkillPowerListItemWin___vftable_)(void *p, char);

//----- (00596D00) --------------------------------------------------------
void __thiscall SkillPowerListItemWin::OnCommand(SkillPowerListItemWin *this, unsigned int wParam, int lParam)
{
  int v3; // eax@4
  bool v4; // zf@5
  bool v5; // sf@5
  unsigned __int8 v6; // of@5
  PointPool *v7; // eax@5
  PointPool *v8; // edx@10
  int v9; // eax@11

  if ( wParam == 9 )
  {
    if ( this->m_kCurrPoint.m_iPoint < 5 )
    {
      v8 = this->m_kCurrPoint.m_pkPool;
      if ( v8->m_iTotalPoint > 0 )
      {
        v9 = this->m_kCurrPoint.m_iPoint;
        if ( v9 < this->m_kCurrPoint.m_iUpperLimit )
        {
          if ( v9 < this->m_kCurrPoint.m_iLowerLimit )
            ++v8->m_iAntiTotalPoint;
          --this->m_kCurrPoint.m_pkPool->m_iTotalPoint;
          ++this->m_kCurrPoint.m_iPoint;
          ++this->m_kCurrPoint.m_iPointCount;
        }
      }
    }
  }
  else
  {
    if ( wParam == 10 )
    {
      if ( this->m_kCurrPoint.m_iPoint > 0 )
      {
        v3 = this->m_kCurrPoint.m_iPoint;
        if ( v3 > 0 )
        {
          v6 = __OFSUB__(v3, this->m_kCurrPoint.m_iLowerLimit);
          v4 = v3 == this->m_kCurrPoint.m_iLowerLimit;
          v5 = v3 - this->m_kCurrPoint.m_iLowerLimit < 0;
          v7 = this->m_kCurrPoint.m_pkPool;
          if ( (unsigned __int8)(v5 ^ v6) | v4 )
          {
            if ( v7->m_iAntiTotalPoint > 0 )
            {
              ++v7->m_iTotalPoint;
              --this->m_kCurrPoint.m_pkPool->m_iAntiTotalPoint;
              --this->m_kCurrPoint.m_iPoint;
              --this->m_kCurrPoint.m_iPointCount;
            }
          }
          else
          {
            ++v7->m_iTotalPoint;
            --this->m_kCurrPoint.m_iPoint;
            --this->m_kCurrPoint.m_iPointCount;
          }
        }
      }
    }
  }
}

//----- (00596DC0) --------------------------------------------------------
void __thiscall SkillPowerListItemWin::SetPoint(SkillPowerListItemWin *this, int iPoint, int iMaxPoint)
{
  this->m_kCurrPoint.m_iLowerLimit = iPoint;
  this->m_kCurrPoint.m_iPoint = iPoint;
  this->m_kCurrPoint.m_iUpperLimit = iMaxPoint;
}

//----- (00596DE0) --------------------------------------------------------
PointOccupier *__thiscall SkillPowerListItemWin::GetPointOccupier(SkillPowerListItemWin *this)
{
  return &this->m_kCurrPoint;
}

//----- (00596DF0) --------------------------------------------------------
int __thiscall SkillPowerListItemWin::GetPoint(SkillPowerListItemWin *this)
{
  return this->m_kCurrPoint.m_iPoint;
}

//----- (00596E00) --------------------------------------------------------
void __thiscall SkillPowerListItemWin::CheckPossibleEmpower(SkillPowerListItemWin *this, bool b)
{
  bool v2; // zf@2
  IconWin *v3; // ecx@2

  if ( b )
  {
    v2 = this->m_kCurrPoint.m_iUpperLimit == 0;
    v3 = this->m_pkIconWin;
    if ( v2 )
    {
      IconWin::IconDisable(v3, 1);
      return;
    }
  }
  else
  {
    v3 = this->m_pkIconWin;
  }
  IconWin::IconDisable(v3, 0);
}

//----- (00596E40) --------------------------------------------------------
void __thiscall SkillPowerWin::SkillPowerWin(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerWin::_vftable_;
  v1->m_apkListItemWin[0] = 0;
  v1->m_apkListItemWin[1] = 0;
  v1->m_apkListItemWin[2] = 0;
  v1->m_apkListItemWin[3] = 0;
  v1->m_pkSkillIconWin = 0;
  v1->m_pkSkillNameText = 0;
  v1->m_bSkillPowerSuccess = 0;
}
// 9ACB78: using guessed type int (__stdcall *SkillPowerWin___vftable_)(int uiFlags);
// 9ACB94: using guessed type int (__thiscall *SkillPowerWin___vftable_)(void *p, char);

//----- (00596E90) --------------------------------------------------------
void __thiscall SkillPowerWin::_SkillPowerWin(SkillPowerWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9ACB78: using guessed type int (__stdcall *SkillPowerWin___vftable_)(int uiFlags);
// 9ACB94: using guessed type int (__thiscall *SkillPowerWin___vftable_)(void *p, char);

//----- (00596EB0) --------------------------------------------------------
void __thiscall SkillPowerWin::OnCancel(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1
  unsigned int v2; // eax@1
  int v3; // ecx@1
  int v4; // esi@1
  signed int v5; // edi@1

  v1 = this;
  this->m_kInitialEmpowerValue.m_iRestPoint = Skill::GetRestEmpowerPoint();
  v2 = Inventory::GetSkillEmpowerInitialPoint(&g_kInventory);
  v3 = v1->m_kInitialEmpowerValue.m_iRestPoint;
  v1->m_kPointPool.m_iAntiTotalPoint = v2;
  v1->m_kPointPool.m_iTotalPoint = v3;
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AC433);
  v4 = (int)v1->m_apkListItemWin;
  v5 = 4;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 248))(0);
    IconWin::IconDisable(*(IconWin **)(*(_DWORD *)v4 + 316), 0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
}

//----- (00596F40) --------------------------------------------------------
void __thiscall SkillPowerWin::OnClose(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1
  int v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v2 = (int)v1->m_apkListItemWin;
  v3 = 4;
  do
  {
    IconWin::IconDisable(*(IconWin **)(*(_DWORD *)v2 + 316), 0);
    v2 += 4;
    --v3;
  }
  while ( v3 );
}

//----- (00596F90) --------------------------------------------------------
void __thiscall SkillPowerWin::OnShowWin(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1
  unsigned int v2; // eax@1
  int v3; // ecx@1
  int v4; // esi@1
  signed int v5; // edi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  v1->m_kInitialEmpowerValue.m_iRestPoint = Skill::GetRestEmpowerPoint();
  v2 = Inventory::GetSkillEmpowerInitialPoint(&g_kInventory);
  v3 = v1->m_kInitialEmpowerValue.m_iRestPoint;
  v1->m_kPointPool.m_iAntiTotalPoint = v2;
  v1->m_kPointPool.m_iTotalPoint = v3;
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AC44A);
  v4 = (int)v1->m_apkListItemWin;
  v5 = 4;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 248))(0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
}

//----- (00597010) --------------------------------------------------------
void __thiscall SkillPowerWin::SetSkillPowerSuccess(SkillPowerWin *this, bool b)
{
  this->m_bSkillPowerSuccess = b;
  this->m_apkListItemWin[0]->m_kCurrPoint.m_iPointCount = 0;
  this->m_apkListItemWin[1]->m_kCurrPoint.m_iPointCount = 0;
  this->m_apkListItemWin[2]->m_kCurrPoint.m_iPointCount = 0;
  this->m_apkListItemWin[3]->m_kCurrPoint.m_iPointCount = 0;
}

//----- (00597060) --------------------------------------------------------
void __thiscall SkillPowerWin::OnHelpLink(SkillPowerWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ChrSkillPwr");
}

//----- (00597090) --------------------------------------------------------
void __thiscall SkillPowerWin::OnReset(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1
  int v2; // ebx@2
  int v3; // edi@2
  int v4; // edx@4
  int v5; // eax@5
  char v6; // cl@6
  char v7; // dl@6
  char v8; // bl@6
  char v9; // al@6
  SkillIcon *v10; // ecx@6
  char v11; // dl@6
  char v12; // al@6
  char v13; // bl@6
  unsigned int v14; // eax@6
  int v15; // edx@6
  int v16; // ecx@6
  SkillPowerListItemWin *v17; // eax@6
  int v18; // ecx@6
  SkillPowerListItemWin *v19; // eax@6
  int v20; // ecx@6
  SkillPowerListItemWin *v21; // eax@6
  int v22; // edx@6
  int v23; // eax@6
  SkillPowerListItemWin *v24; // esi@6
  Skill::EmpowerInfo kEmpowerInfo; // [sp+4h] [bp-8h]@6
  Skill::EmpowerInfo kMaxEmpowerInfo; // [sp+8h] [bp-4h]@6

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkSkillIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v2 = v1->m_pkSkillIconWin->m_kSkillID;
    v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            v1->m_pkSkillIconWin->m_kSkillID) )
    {
      if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) )
      {
        v4 = *(_DWORD *)(v3 + 196);
        if ( *(_DWORD *)(v4 + 4 * v2) )
        {
          v5 = *(_DWORD *)(v4 + 4 * v2);
          if ( v5 )
          {
            v6 = *(_BYTE *)(v5 + 431);
            v7 = *(_BYTE *)(v5 + 435);
            v8 = *(_BYTE *)(v5 + 439);
            v9 = *(_BYTE *)(v5 + 443);
            kMaxEmpowerInfo.cDamageUp = v6;
            v10 = (SkillIcon *)v1->m_pkSkillIconWin;
            kMaxEmpowerInfo.cSmallSp = v7;
            kMaxEmpowerInfo.cShortCoolTime = v9;
            SkillIcon::GetTotalAccumulatedEmpowerInfo(v10, &kEmpowerInfo);
            v11 = v1->m_kInitialEmpowerValue.m_kEmpower.cSmallSp + kMaxEmpowerInfo.cSmallSp - kEmpowerInfo.cSmallSp;
            v12 = v1->m_kInitialEmpowerValue.m_kEmpower.cShortCoolTime
                + kMaxEmpowerInfo.cShortCoolTime
                - kEmpowerInfo.cShortCoolTime;
            v13 = v1->m_kInitialEmpowerValue.m_kEmpower.cLongKeepTime + v8 - kEmpowerInfo.cLongKeepTime;
            kMaxEmpowerInfo.cDamageUp = v1->m_kInitialEmpowerValue.m_kEmpower.cDamageUp
                                      + kMaxEmpowerInfo.cDamageUp
                                      - kEmpowerInfo.cDamageUp;
            kMaxEmpowerInfo.cSmallSp = v11;
            kMaxEmpowerInfo.cShortCoolTime = v12;
            v14 = Inventory::GetSkillEmpowerInitialPoint(&g_kInventory);
            v1->m_kPointPool.m_iTotalPoint = v1->m_kInitialEmpowerValue.m_iRestPoint;
            v15 = kMaxEmpowerInfo.cSmallSp;
            v1->m_kPointPool.m_iAntiTotalPoint = v14;
            v16 = v1->m_kInitialEmpowerValue.m_kEmpower.cDamageUp;
            v17 = v1->m_apkListItemWin[0];
            v17->m_kCurrPoint.m_iLowerLimit = v16;
            v17->m_kCurrPoint.m_iPoint = v16;
            v17->m_kCurrPoint.m_iUpperLimit = kMaxEmpowerInfo.cDamageUp;
            v18 = v1->m_kInitialEmpowerValue.m_kEmpower.cSmallSp;
            v19 = v1->m_apkListItemWin[1];
            v19->m_kCurrPoint.m_iLowerLimit = v18;
            v19->m_kCurrPoint.m_iPoint = v18;
            v19->m_kCurrPoint.m_iUpperLimit = v15;
            v20 = v1->m_kInitialEmpowerValue.m_kEmpower.cLongKeepTime;
            v21 = v1->m_apkListItemWin[2];
            v22 = kMaxEmpowerInfo.cShortCoolTime;
            v21->m_kCurrPoint.m_iLowerLimit = v20;
            v21->m_kCurrPoint.m_iPoint = v20;
            v21->m_kCurrPoint.m_iUpperLimit = v13;
            v23 = v1->m_kInitialEmpowerValue.m_kEmpower.cShortCoolTime;
            v24 = v1->m_apkListItemWin[3];
            v24->m_kCurrPoint.m_iLowerLimit = v23;
            v24->m_kCurrPoint.m_iPoint = v23;
            v24->m_kCurrPoint.m_iUpperLimit = v22;
          }
        }
      }
    }
  }
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00597220) --------------------------------------------------------
void __thiscall SkillPowerWin::UpdateMeWin(SkillPowerWin *this, float fCurTime)
{
  SkillPowerWin *v2; // esi@1
  Skill::EmpowerInfo kInfo; // [sp+4h] [bp-4h]@0

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_apkListItemWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
    kInfo.cDamageUp = LOBYTE(v2->m_apkListItemWin[0]->m_kCurrPoint.m_iPoint);
  if ( (unsigned __int8)((int (*)(void))v2->m_apkListItemWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
    kInfo.cSmallSp = LOBYTE(v2->m_apkListItemWin[1]->m_kCurrPoint.m_iPoint);
  if ( (unsigned __int8)((int (*)(void))v2->m_apkListItemWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
    kInfo.cLongKeepTime = LOBYTE(v2->m_apkListItemWin[2]->m_kCurrPoint.m_iPoint);
  if ( (unsigned __int8)((int (*)(void))v2->m_apkListItemWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
    kInfo.cShortCoolTime = LOBYTE(v2->m_apkListItemWin[3]->m_kCurrPoint.m_iPoint);
  Skill::SetRestEmpowerPointInEdit(v2->m_kPointPool.m_iTotalPoint);
  Skill::SetAntiEmpowerPointInEdit(v2->m_kPointPool.m_iAntiTotalPoint);
  if ( v2->m_bSkillPowerSuccess )
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkSkillIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSkillNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AC44B);
  }
  SkillIcon::SetEmpowerInfo(&v2->m_pkSkillIconWin->baseclass_0, kInfo);
}

//----- (00597320) --------------------------------------------------------
void __thiscall SkillPowerWin::OnSlideBarContent(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1

  v1 = this;
  this->m_pListWinContent->m_nViewStartPos = this->m_pSlideBar->m_nCurPos;
  SlideListWin::UpdateViewList(this->m_pListWinContent);
  SlideBar::SetSplitCnt(v1->m_pSlideBar, v1->m_pListWinContent->m_nSlideSplitCnt);
}

//----- (00597360) --------------------------------------------------------
bool __thiscall SkillPowerIconWin::SetSkill(SkillPowerIconWin *this, unsigned __int16 SkillID)
{
  SkillPowerIconWin *v2; // edi@1
  int v3; // esi@1
  unsigned __int16 v4; // ax@4
  PgWin *v5; // eax@5
  bool result; // al@5

  v2 = this;
  this->m_kSkillID = SkillID;
  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                              + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          SkillID)
    && SkillID <= *(_WORD *)(v3 + 200)
    && *(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * SkillID)
    && (v4 = v2->m_kSkillID, v4 < 0x4E20u) )
  {
    SkillIcon::SetSkill(&v2->baseclass_0, v4);
    v5 = PgWin::GetParentWin(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    PgWin::PostCommandMsg(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v5, 0xCu, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (005973E0) --------------------------------------------------------
bool __thiscall SkillPowerIconWin::EatDropReference(SkillPowerIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  SkillPowerIconWin *v4; // esi@1
  void *v5; // eax@2
  int v6; // eax@4
  PgWin *v7; // eax@6
  bool result; // al@6

  v4 = this;
  if ( *pkDrop
    && (v5 = (*pkDrop)->m_pkContents) != 0
    && *((_DWORD *)v5 + 2) == 2
    && (v6 = *((_DWORD *)v5 + 5),
        this->m_kSkillID = v6,
        IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v6, 1))
    && v4->m_kSkillID < 0x4E20u )
  {
    SkillPowerIconWin::SetSkill(v4, v4->m_kSkillID);
    v7 = PgWin::GetParentWin(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    PgWin::PostCommandMsg(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v7, 0xCu, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00597450) --------------------------------------------------------
bool __thiscall SkillPowerListItemWin::Create(SkillPowerListItemWin *this, NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, SkillPowerListItemWin::CreateSpec *rkSpec, PgWin *pkParent)
{
  SkillPowerListItemWin *v7; // edi@1
  bool result; // al@1
  char *v9; // ecx@3
  D3DXCOLOR v10; // ST30_16@5
  char *v11; // ecx@5
  D3DXCOLOR v12; // ST30_16@7
  PgSprData *v13; // eax@7
  PgWin *v14; // ebx@7
  IconWin *v15; // eax@7
  UIUtil ui; // [sp+0h] [bp-24h]@2
  int uiLeft; // [sp+14h] [bp-10h]@7
  int v18; // [sp+20h] [bp-4h]@2

  v7 = this;
  result = PgWin::Create(&this->baseclass_0, 0, 0, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    UIUtil::UIUtil(&ui);
    v18 = 0;
    UIUtil::SetParent(&ui, &v7->baseclass_0);
    UIUtil::SetOffset(&ui, iXPos, iYPos);
    UIUtil::SetUIGeom(&ui, pkGeom);
    UIUtil::CreateBtn(
      &ui,
      9u,
      rkSpec->kInterface.pcUpNor,
      rkSpec->kInterface.pcUpFocus,
      rkSpec->kInterface.pcUpClick,
      0,
      0);
    UIUtil::CreateBtn(
      &ui,
      0xAu,
      rkSpec->kInterface.pcDownNor,
      rkSpec->kInterface.pcDownFocus,
      rkSpec->kInterface.pcDownClick,
      0,
      0);
    if ( rkSpec->kSkillPowerInfo.kDesc1.baseclass_0._Myres < 0x10 )
      v9 = (char *)&rkSpec->kSkillPowerInfo.kDesc1;
    else
      v9 = *(char **)&rkSpec->kSkillPowerInfo.kDesc1.baseclass_0.___u0.baseclass_0.dummy[0];
    *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    UIUtil::CreateTextNoSpr(&ui, rkSpec->kInterface.pcDesc1, v9, COERCE_D3DXCOLOR(v10.r), 0);
    v11 = (char *)&rkSpec->kSkillPowerInfo.kDesc2;
    if ( rkSpec->kSkillPowerInfo.kDesc2.baseclass_0._Myres >= 0x10 )
      v11 = *(char **)v11;
    *(_QWORD *)&v12.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v12.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    UIUtil::CreateTextNoSpr(&ui, rkSpec->kInterface.pcDesc2, v11, COERCE_D3DXCOLOR(v12.r), 0);
    v13 = PgSprData::Create(pkGeom, rkSpec->kInterface.pcIcon, &uiLeft, (int *)&pkParent, 0);
    v14 = (PgWin *)PgWinSpr::CreateWin(uiLeft - iXPos, (int)((char *)pkParent - iYPos), v13, &v7->baseclass_0, 0, 0);
    MenuTexMgr::GetTexture(6u);
    v15 = IconWin::CreateWin(3, 3, 32, 32, v14);
    v7->m_pkIconWin = v15;
    ((void (__thiscall *)(IconWin *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(v15);
    v7->m_kCurrPoint.m_pkPool = rkSpec->pkPointPool;
    v7->m_uiListIndex = uiListIndex;
    v18 = -1;
    UIUtil::_UIUtil(&ui);
    result = 1;
  }
  return result;
}

//----- (00597640) --------------------------------------------------------
void __thiscall SkillPowerWin::OnSkillDroped(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1
  int v2; // edi@1
  signed int v3; // ebx@1
  int v4; // ebx@3
  int v5; // edi@3
  int v6; // edx@5
  int v7; // eax@6
  Skill::EmpowerInfo *v8; // eax@9
  char v9; // cl@9
  char v10; // dl@9
  char v11; // bl@9
  int v12; // esi@9
  signed int v13; // edi@9
  bool v14; // [sp-4h] [bp-18h]@11
  Skill::EmpowerInfo result; // [sp+Ch] [bp-8h]@9
  int v16; // [sp+10h] [bp-4h]@1

  v1 = this;
  ((void (__stdcall *)(signed int))this->m_pkSkillIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v2 = (int)v1->m_apkListItemWin;
  v16 = (int)v1->m_apkListItemWin;
  v3 = 4;
  do
  {
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 248))(1);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = v1->m_pkSkillIconWin->m_kSkillID;
  v5 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          v1->m_pkSkillIconWin->m_kSkillID)
    && (unsigned __int16)v4 <= *(_WORD *)(v5 + 200)
    && (v6 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v6 + 4 * v4))
    && (v7 = *(_DWORD *)(v6 + 4 * v4)) != 0 )
  {
    ((void (__stdcall *)(int))v1->m_pkSkillNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v7 + 34);
    v1->m_bSkillPowerSuccess = 0;
  }
  else
  {
    ((void (__stdcall *)(_UNKNOWN *))v1->m_pkSkillNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AC432);
  }
  v8 = Skill::GetAccumulatedEmpowerInfo(&result, v1->m_pkSkillIconWin->m_kSkillID);
  v9 = v8->cDamageUp;
  v10 = v8->cLongKeepTime;
  v11 = v8->cShortCoolTime;
  LOBYTE(v8) = v8->cSmallSp;
  v1->m_kInitialEmpowerValue.m_kEmpower.cDamageUp = v9;
  v1->m_kInitialEmpowerValue.m_kEmpower.cLongKeepTime = v10;
  v1->m_kInitialEmpowerValue.m_kEmpower.cShortCoolTime = v11;
  v1->m_kInitialEmpowerValue.m_kEmpower.cSmallSp = (char)v8;
  v1->m_kInitialEmpowerValue.m_iRestPoint = Skill::GetRestEmpowerPoint();
  SkillPowerWin::OnReset(v1);
  v12 = v16;
  v13 = 4;
  do
  {
    if ( *(_DWORD *)(*(_DWORD *)v12 + 308) )
      v14 = 0;
    else
      v14 = 1;
    IconWin::IconDisable(*(IconWin **)(*(_DWORD *)v12 + 316), v14);
    v12 += 4;
    --v13;
  }
  while ( v13 );
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00597780) --------------------------------------------------------
void __thiscall SkillPowerWin::OnOk(SkillPowerWin *this)
{
  SkillPowerWin *v1; // esi@1
  __int16 v2; // cx@2
  char v3; // dl@2
  Skill::EmpowerInfo *v4; // eax@2
  signed int v5; // edx@2
  int v6; // edi@2
  char v7; // dl@7
  int v8; // esi@9
  char *v9; // edi@9
  char v10; // dl@14
  char v11; // al@17
  char v12; // dl@20
  __int16 v13; // dx@25
  __int16 v14; // dx@25
  GameFrameWork *v15; // ecx@25
  PROTO_NC_SKILL_EMPOWALLOC_REQ kProto; // [sp+4h] [bp-18h]@2
  Skill::EmpowerInfo kEmpInfo; // [sp+Ch] [bp-10h]@2
  Skill::EmpowerInfo kMinusInfo; // [sp+10h] [bp-Ch]@2
  Skill::EmpowerInfo kPlusInfo; // [sp+14h] [bp-8h]@2
  char v20; // [sp+1Bh] [bp-1h]@20

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkSkillIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v4 = SkillIcon::GetEmpowerInfo(&v1->m_pkSkillIconWin->baseclass_0, (Skill::EmpowerInfo *)&kProto.plus);
    LOBYTE(v2) = v4->cDamageUp;
    kEmpInfo.cLongKeepTime = v4->cLongKeepTime;
    v3 = v4->cShortCoolTime;
    LOBYTE(v4) = v4->cSmallSp;
    kEmpInfo.cShortCoolTime = v3;
    v5 = 0;
    kPlusInfo = 0;
    kMinusInfo = 0;
    *(_DWORD *)&kProto.skill = 0;
    v6 = (int)v1->m_apkListItemWin;
    while ( 1 )
    {
      if ( !*(_DWORD *)(*(_DWORD *)v6 + 312) )
        *(_DWORD *)&kProto.skill = *(_DWORD *)&kProto + 1;
      if ( *(_DWORD *)&kProto == 4 )
        break;
      ++v5;
      v6 += 4;
      if ( v5 >= 4 )
      {
        v7 = v1->m_kInitialEmpowerValue.m_kEmpower.cDamageUp;
        if ( (char)v2 <= v7 )
          kMinusInfo.cDamageUp = v7 - v2;
        else
          kPlusInfo.cDamageUp = v2 - v7;
        v10 = v1->m_kInitialEmpowerValue.m_kEmpower.cSmallSp;
        if ( (char)v4 <= v10 )
          kMinusInfo.cSmallSp = v10 - (_BYTE)v4;
        else
          kPlusInfo.cSmallSp = (_BYTE)v4 - v10;
        v11 = v1->m_kInitialEmpowerValue.m_kEmpower.cLongKeepTime;
        if ( kEmpInfo.cLongKeepTime <= v11 )
        {
          LOBYTE(v4) = (_BYTE)v4 - kEmpInfo.cLongKeepTime;
          LOBYTE(v2) = kPlusInfo.cLongKeepTime;
          kMinusInfo.cLongKeepTime = (char)v4;
        }
        else
        {
          LOBYTE(v2) = kEmpInfo.cLongKeepTime - (_BYTE)v4;
          LOBYTE(v4) = kMinusInfo.cLongKeepTime;
          kPlusInfo.cLongKeepTime = v2;
        }
        v12 = v1->m_kInitialEmpowerValue.m_kEmpower.cShortCoolTime;
        v20 = v12;
        if ( kEmpInfo.cShortCoolTime <= v12 )
          kMinusInfo.cShortCoolTime = v12 - kEmpInfo.cShortCoolTime;
        else
          kPlusInfo.cShortCoolTime = kEmpInfo.cShortCoolTime - v12;
        if ( *(_DWORD *)&kPlusInfo || *(_DWORD *)&kMinusInfo )
        {
          kProto.skill = v1->m_pkSkillIconWin->m_kSkillID;
          v13 = v2 & 0xF;
          LOBYTE(v2) = kPlusInfo.cSmallSp & 0xF;
          kProto.plus._bf0 = kPlusInfo.cDamageUp & 0xF | 16
                                                       * (((signed __int16)kPlusInfo.cShortCoolTime << 8) | (v2 | 16 * v13) & 0xFF);
          v14 = (unsigned __int8)v4 & 0xF;
          LOBYTE(v4) = kMinusInfo.cSmallSp & 0xF;
          v15 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
          kProto.minus._bf0 = kMinusInfo.cDamageUp & 0xF | 16
                                                         * (((signed __int16)kMinusInfo.cShortCoolTime << 8) | ((unsigned __int16)v4 | 16 * v14) & 0xFF);
          GameFrameWork::NcSkillEmpowallocReq(v15, &kProto);
        }
        return;
      }
    }
    v8 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v9 = TextData::Get(0x8BB8CFEEu);
    if ( *(_DWORD *)(v8 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v8 + 4) + 4))(25, v9, v8);
      if ( *(_DWORD *)(v8 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v8 + 4) + 20))(25, v9, v8);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v8 + 20))(v8, 25, v9, v8);
  }
}

//----- (00597970) --------------------------------------------------------
void __thiscall SkillPowerWin::SetEmpowerSkill(SkillPowerWin *this, unsigned __int16 SkillID)
{
  SkillPowerIconWin *v2; // ecx@1

  v2 = this->m_pkSkillIconWin;
  if ( v2 )
    SkillPowerIconWin::SetSkill(v2, SkillID);
}

//----- (00597990) --------------------------------------------------------
void __thiscall SkillPowerWin::OnCommand(SkillPowerWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 9u:
      SkillPowerWin::OnOk(this);
      break;
    case 0xDu:
      SkillPowerWin::OnCancel(this);
      break;
    case 0xBu:
      SkillPowerWin::OnReset(this);
      break;
    case 0xCu:
      SkillPowerWin::OnSkillDroped(this);
      break;
    case 0xAu:
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
      break;
    case 0xEu:
      SkillPowerWin::OnSlideBarContent(this);
      break;
    case 0xFu:
      SkillPowerWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (00597A10) --------------------------------------------------------
SkillPowerIconWin *__cdecl SkillPowerIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  SkillPowerIconWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1A0u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    SkillIcon::SkillIcon((SkillIcon *)v3);
    *(_DWORD *)v4 = &SkillPowerIconWin::_vftable_;
    *((_DWORD *)v4 + 58) = &SkillPowerIconWin::_vftable_;
    *((_WORD *)v4 + 206) = -1;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 608))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (SkillPowerIconWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9AC704: using guessed type int (__stdcall *SkillPowerIconWin___vftable_)(int uiFlags);
// 9AC724: using guessed type int (__thiscall *SkillPowerIconWin___vftable_)(void *p, char);

//----- (00597B60) --------------------------------------------------------
SkillPowerListItemWin *__cdecl SkillPowerListItemWin::CreateWin(NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, SkillPowerListItemWin::CreateSpec *rkSpec, PgWin *pkParent)
{
  void *v6; // eax@1
  void *v7; // esi@1
  PgWin *v8; // edi@8
  SkillPowerListItemWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x140u);
  v7 = v6;
  result.m_pObject = (PgWin *)v6;
  v11 = 0;
  if ( v6 )
  {
    PgWin::PgWin((PgWin *)v6);
    *(_DWORD *)v7 = &SkillPowerListItemWin::_vftable_;
    *((_DWORD *)v7 + 58) = &SkillPowerListItemWin::_vftable_;
    *((_DWORD *)v7 + 75) = 0;
    *((_DWORD *)v7 + 74) = 0;
    *((_DWORD *)v7 + 76) = 0;
    *((_DWORD *)v7 + 77) = 20000;
    *((_DWORD *)v7 + 78) = 0;
    *((_DWORD *)v7 + 79) = 0;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)v7 + 1);
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiAVObject *, int, int, unsigned int, SkillPowerListItemWin::CreateSpec *, PgWin *))(*(_DWORD *)v7 + 452))(
                          v7,
                          pkGeom,
                          iXPos,
                          iYPos,
                          uiListIndex,
                          rkSpec,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = (SkillPowerListItemWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}
// 9AC98C: using guessed type int (__stdcall *SkillPowerListItemWin___vftable_)(int uiFlags);
// 9AC9AC: using guessed type int (__thiscall *SkillPowerListItemWin___vftable_)(void *p, char);

//----- (00597CE0) --------------------------------------------------------
SkillPowerWin *__cdecl SkillPowerWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SkillPowerWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x18Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &SkillPowerWin::_vftable_;
    *((_DWORD *)v2 + 58) = &SkillPowerWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 91) = 0;
    *((_BYTE *)v2 + 376) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SkillPowerWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9ACB78: using guessed type int (__stdcall *SkillPowerWin___vftable_)(int uiFlags);
// 9ACB94: using guessed type int (__thiscall *SkillPowerWin___vftable_)(void *p, char);

//----- (00597E50) --------------------------------------------------------
bool __thiscall SkillPowerWin::Create(SkillPowerWin *this, PgFrameWork *pkFrameWork)
{
  SkillPowerWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  bool result; // al@6
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  NiSourceTexture *v8; // eax@16
  PgSprData *v9; // eax@19
  D3DXCOLOR v10; // ST1C_16@19
  PgWinText *v11; // eax@19
  NiRefObjectVtbl *v12; // edi@19
  int v13; // eax@19
  PgWin *v14; // edi@19
  D3DXCOLOR v15; // ST28_16@19
  char *v16; // eax@19
  PgWin *v17; // edi@19
  D3DXCOLOR v18; // ST28_16@19
  char *v19; // eax@19
  NiSourceTexture *v20; // edi@19
  D3DXCOLOR v21; // ST28_16@21
  char *v22; // eax@21
  PgSprData *v23; // eax@21
  char *v24; // eax@21
  char *v25; // eax@21
  char *v26; // eax@21
  char *v27; // ecx@21
  char v28; // dl@22
  char *v29; // eax@23
  char *v30; // ecx@23
  char v31; // dl@24
  char *v32; // eax@25
  char *v33; // ecx@25
  char v34; // dl@26
  char *v35; // eax@27
  char *v36; // eax@27
  char *v37; // eax@27
  SkillPowerListItemWin *v38; // eax@27
  void *(__thiscall *v39)(NiRefObject *, unsigned int); // edx@27
  NiNode *v40; // esi@28
  const char *v41; // [sp+0h] [bp-C4h]@17
  int *v42; // [sp+4h] [bp-C0h]@17
  int *v43; // [sp+8h] [bp-BCh]@17
  NiSourceTexture *v44; // [sp+Ch] [bp-B8h]@17
  unsigned int v45; // [sp+10h] [bp-B4h]@1
  NiTexturePalette *pTexturePalette; // [sp+20h] [bp-A4h]@7
  UIUtil ui; // [sp+24h] [bp-A0h]@19
  int uiTop; // [sp+38h] [bp-8Ch]@17
  int uiLeft; // [sp+3Ch] [bp-88h]@17
  char *v50; // [sp+40h] [bp-84h]@1
  int uiYOff; // [sp+44h] [bp-80h]@10
  int uiXOff; // [sp+48h] [bp-7Ch]@10
  NiPointer<NiNode> spNode; // [sp+4Ch] [bp-78h]@1
  int rkSpec; // [sp+50h] [bp-74h]@21
  int v55; // [sp+54h] [bp-70h]@21
  int v56; // [sp+58h] [bp-6Ch]@21
  int v57; // [sp+5Ch] [bp-68h]@21
  int v58; // [sp+60h] [bp-64h]@21
  int v59; // [sp+64h] [bp-60h]@21
  int v60; // [sp+68h] [bp-5Ch]@21
  int v61; // [sp+6Ch] [bp-58h]@21
  int v62; // [sp+70h] [bp-54h]@21
  int v63; // [sp+74h] [bp-50h]@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+78h] [bp-4Ch]@21
  char v65; // [sp+94h] [bp-30h]@21
  int v66; // [sp+A4h] [bp-20h]@21
  int v67; // [sp+A8h] [bp-1Ch]@21
  PointPool *v68; // [sp+B0h] [bp-14h]@21
  unsigned int v69; // [sp+B4h] [bp-10h]@1
  int v70; // [sp+C0h] [bp-4h]@1
  int v71; // [sp+C4h] [bp+0h]@1

  v69 = (unsigned int)&v71 ^ __security_cookie;
  v45 = (unsigned int)&v71 ^ __security_cookie;
  v2 = this;
  v50 = (char *)pkFrameWork;
  spNode.m_pObject = 0;
  v70 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v70 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\ChrSkillPwr.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiXOff, &uiYOff, v3);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, (PgFrameWork *)v50, "SkillPowerWin", 0) )
  {
    v8 = MenuTexMgr::GetTexture(0x13u);
    if ( v8 )
    {
      v44 = v8;
      v43 = &uiTop;
      v42 = &uiLeft;
      v41 = "Theme";
    }
    else
    {
      v44 = 0;
      v43 = &uiTop;
      v42 = &uiLeft;
      v41 = "Theme";
    }
    v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v41, v42, v43, v44);
    PgWinSpr::CreateWin(uiLeft - uiXOff, uiTop - uiYOff, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    UIUtil::UIUtil(&ui);
    LOBYTE(v70) = 1;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, uiXOff, uiYOff);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    UIUtil::CreateSpr(&ui, "Plane02", 0);
    UIUtil::CreateSpr(&ui, "Plane03", 0);
    *(_QWORD *)&v10.r = Color::m_kDxWinTitleColor;
    *(_QWORD *)&v10.b = qword_A746E8;
    v11 = UIUtil::CreateText(&ui, "SelectionName", &byte_9AC431, 0, COERCE_D3DXCOLOR(v10.r), 4u, 0, 0);
    v2->m_pkSkillNameText = v11;
    v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = (int)v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                 (NiRefObject *)v11,
                 v45);
    v12[43].__vecDelDtor((NiRefObject *)v2->m_pkSkillNameText, v13 + 3);
    v14 = (PgWin *)UIUtil::CreateBtn(&ui, 9u, "OkNor", "OkOver", "OkClick", 0, 0);
    *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v16 = TextData::Get(0xA2A3EDF2u);
    UIUtil::CreateAttachedText(&ui, v14, v16, COERCE_D3DXCOLOR(v15.r), 5u);
    v17 = (PgWin *)UIUtil::CreateBtn(&ui, 0xDu, "CancelNor", "CancelOver", "CancelClick", 0, 0);
    *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v19 = TextData::Get(0x88A297E1u);
    UIUtil::CreateAttachedText(&ui, v17, v19, COERCE_D3DXCOLOR(v18.r), 5u);
    UIUtil::CreateBtn(&ui, 0xAu, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    v20 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      UIUtil::CreateBtn(&ui, 0xFu, "HelpLinkNor", "HelpLinkClick", "HelpLinkOver", 0, v20);
    *(_QWORD *)&v21.r = Color::m_kDxWinTitleColor;
    *(_QWORD *)&v21.b = qword_A746E8;
    v22 = TextData::Get(0x4255438Fu);
    UIUtil::CreateTextNoSpr(&ui, "WinTitle", v22, COERCE_D3DXCOLOR(v21.r), 5u);
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PwrTgetSlot", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - uiXOff, uiTop - uiYOff, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkSkillIconWin = SkillPowerIconWin::CreateWin(
                             uiLeft - uiXOff + 3,
                             uiTop - uiYOff + 3,
                             &v2->baseclass_0.baseclass_0.baseclass_0);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v67 = 15;
    v66 = 0;
    v65 = 0;
    LOBYTE(v70) = 2;
    rkSpec = (int)"PwrSlot1";
    v55 = (int)"PwrUpNor01";
    v56 = (int)"PwrUpOver01";
    v57 = (int)"PwrUpClick01";
    v58 = (int)"PwrDnNor01";
    v59 = (int)"PwrDnOver01";
    v60 = (int)"PwrDnClick01";
    v61 = (int)"Title1Name";
    v62 = (int)"Title1Desc";
    v63 = 0;
    v24 = TextData::Get(0x7B8D83C5u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v24, strlen(v24));
    v25 = TextData::Get(0x7B8D83C6u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v65,
      v25,
      strlen(v25));
    v68 = &v2->m_kPointPool;
    v2->m_apkListItemWin[0] = SkillPowerListItemWin::CreateWin(
                                &spNode.m_pObject->baseclass_0,
                                uiXOff,
                                uiYOff,
                                0,
                                (SkillPowerListItemWin::CreateSpec *)&rkSpec,
                                &v2->baseclass_0.baseclass_0.baseclass_0);
    rkSpec = (int)"PwrSlot2";
    v55 = (int)"PwrUpNor02";
    v56 = (int)"PwrUpOver02";
    v57 = (int)"PwrUpClick02";
    v58 = (int)"PwrDnNor02";
    v59 = (int)"PwrDnOver02";
    v60 = (int)"PwrDnClick02";
    v61 = (int)"Title2Name";
    v62 = (int)"Title2Desc";
    v63 = 3;
    v26 = TextData::Get(0x74A0977Du);
    v27 = v26;
    v50 = v26 + 1;
    do
      v28 = *v27++;
    while ( v28 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v26, v27 - v50);
    v29 = TextData::Get(0x75A0977Du);
    v30 = v29;
    v50 = v29 + 1;
    do
      v31 = *v30++;
    while ( v31 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v65,
      v29,
      v30 - v50);
    v68 = &v2->m_kPointPool;
    v2->m_apkListItemWin[1] = SkillPowerListItemWin::CreateWin(
                                &spNode.m_pObject->baseclass_0,
                                uiXOff,
                                uiYOff,
                                1u,
                                (SkillPowerListItemWin::CreateSpec *)&rkSpec,
                                &v2->baseclass_0.baseclass_0.baseclass_0);
    rkSpec = (int)"PwrSlot3";
    v55 = (int)"PwrUpNor03";
    v56 = (int)"PwrUpOver03";
    v57 = (int)"PwrUpClick03";
    v58 = (int)"PwrDnNor03";
    v59 = (int)"PwrDnOver03";
    v60 = (int)"PwrDnClick03";
    v61 = (int)"Title3Name";
    v62 = (int)"Title3Desc";
    v63 = 2;
    v32 = TextData::Get(0xE3F2C6F5u);
    v33 = v32;
    v50 = v32 + 1;
    do
      v34 = *v33++;
    while ( v34 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v32, v33 - v50);
    v35 = TextData::Get(0xE3F2C6F6u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v65,
      v35,
      strlen(v35));
    v68 = &v2->m_kPointPool;
    v2->m_apkListItemWin[2] = SkillPowerListItemWin::CreateWin(
                                &spNode.m_pObject->baseclass_0,
                                uiXOff,
                                uiYOff,
                                2u,
                                (SkillPowerListItemWin::CreateSpec *)&rkSpec,
                                &v2->baseclass_0.baseclass_0.baseclass_0);
    rkSpec = (int)"PwrSlot4";
    v55 = (int)"PwrUpNor04";
    v56 = (int)"PwrUpOver04";
    v57 = (int)"PwrUpClick04";
    v58 = (int)"PwrDnNor04";
    v59 = (int)"PwrDnOver04";
    v60 = (int)"PwrDnClick04";
    v61 = (int)"Title4Name";
    v62 = (int)"Title4Desc";
    v63 = 1;
    v36 = TextData::Get(0xDEE7072Cu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v36, strlen(v36));
    v37 = TextData::Get(0xDEE7082Cu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v65,
      v37,
      strlen(v37));
    v68 = &v2->m_kPointPool;
    v38 = SkillPowerListItemWin::CreateWin(
            &spNode.m_pObject->baseclass_0,
            uiXOff,
            uiYOff,
            3u,
            (SkillPowerListItemWin::CreateSpec *)&rkSpec,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v39 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
    v2->m_apkListItemWin[3] = v38;
    ((void (__thiscall *)(SkillPowerWin *, unsigned int, unsigned int, _DWORD))v39)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.79000002);
    SkillPowerListItemWin::CreateSpec::_CreateSpec((SkillPowerListItemWin::CreateSpec *)&rkSpec);
    LOBYTE(v70) = 0;
    UIUtil::_UIUtil(&ui);
    v70 = -1;
    if ( spNode.m_pObject )
    {
      v40 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v40 )
          v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v40, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v7 = spNode.m_pObject;
    v70 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00598610) --------------------------------------------------------
void *__thiscall SkillPowerIconWin::_scalar_deleting_destructor_(SkillPowerIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerIconWin::_vftable_;
  SkillIcon::_SkillIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AC704: using guessed type int (__stdcall *SkillPowerIconWin___vftable_)(int uiFlags);
// 9AC724: using guessed type int (__thiscall *SkillPowerIconWin___vftable_)(void *p, char);

//----- (00598650) --------------------------------------------------------
void *__thiscall SkillPowerListItemWin::_scalar_deleting_destructor_(SkillPowerListItemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerListItemWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerListItemWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AC98C: using guessed type int (__stdcall *SkillPowerListItemWin___vftable_)(int uiFlags);
// 9AC9AC: using guessed type int (__thiscall *SkillPowerListItemWin___vftable_)(void *p, char);

//----- (00598690) --------------------------------------------------------
void *__thiscall SkillPowerWin::_scalar_deleting_destructor_(SkillPowerWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillPowerWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillPowerWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9ACB78: using guessed type int (__stdcall *SkillPowerWin___vftable_)(int uiFlags);
// 9ACB94: using guessed type int (__thiscall *SkillPowerWin___vftable_)(void *p, char);

//----- (005986D0) --------------------------------------------------------
void __thiscall SkillPowerListItemWin::CreateSpec::_CreateSpec(SkillPowerListItemWin::CreateSpec *this)
{
  SkillPowerListItemWin::CreateSpec *v1; // esi@1

  v1 = this;
  if ( this->kSkillPowerInfo.kDesc2.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->kSkillPowerInfo.kDesc2.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->kSkillPowerInfo.kDesc2.baseclass_0._Myres = 15;
  v1->kSkillPowerInfo.kDesc2.baseclass_0._Mysize = 0;
  v1->kSkillPowerInfo.kDesc2.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->kSkillPowerInfo.kDesc1.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->kSkillPowerInfo.kDesc1.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->kSkillPowerInfo.kDesc1.baseclass_0._Mysize = 0;
  v1->kSkillPowerInfo.kDesc1.baseclass_0._Myres = 15;
  v1->kSkillPowerInfo.kDesc1.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (00598720) --------------------------------------------------------
void __thiscall PosInfoWinBut::PosInfoWinBut(PosInfoWinBut *this)
{
  PosInfoWinBut *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PosInfoWinBut::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PosInfoWinBut::_vftable_;
  v1->m_Pos = 0;
}
// 9AD0E4: using guessed type int (__stdcall *PosInfoWinBut___vftable_)(int uiFlags);
// 9AD104: using guessed type int (__thiscall *PosInfoWinBut___vftable_)(void *p, char);

//----- (00598750) --------------------------------------------------------
void __thiscall PosInfoWinBut::_PosInfoWinBut(PosInfoWinBut *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PosInfoWinBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PosInfoWinBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9AD0E4: using guessed type int (__stdcall *PosInfoWinBut___vftable_)(int uiFlags);
// 9AD104: using guessed type int (__thiscall *PosInfoWinBut___vftable_)(void *p, char);

//----- (00598770) --------------------------------------------------------
void __thiscall LevelSelectWinBut::LevelSelectWinBut(LevelSelectWinBut *this)
{
  LevelSelectWinBut *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LevelSelectWinBut::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&LevelSelectWinBut::_vftable_;
  v1->m_uiInvIndex = -1;
  v1->maxLevel = 0;
}
// 9AD33C: using guessed type int (__stdcall *LevelSelectWinBut___vftable_)(int uiFlags);
// 9AD35C: using guessed type int (__thiscall *LevelSelectWinBut___vftable_)(void *p, char);

//----- (005987A0) --------------------------------------------------------
void __thiscall LevelSelectWinBut::_LevelSelectWinBut(LevelSelectWinBut *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LevelSelectWinBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&LevelSelectWinBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9AD33C: using guessed type int (__stdcall *LevelSelectWinBut___vftable_)(int uiFlags);
// 9AD35C: using guessed type int (__thiscall *LevelSelectWinBut___vftable_)(void *p, char);

//----- (005987C0) --------------------------------------------------------
void __thiscall SkillInvWin::_SkillInvWin(SkillInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillInvWin::_vftable_;
  SkillIcon::_SkillIcon(&this->baseclass_0);
}
// 9AD594: using guessed type int (__stdcall *SkillInvWin___vftable_)(int uiFlags);
// 9AD5B4: using guessed type int (__thiscall *SkillInvWin___vftable_)(void *p, char);

//----- (005987E0) --------------------------------------------------------
bool __thiscall SkillInvWin::Create(SkillInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  SkillInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = SkillIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (00598820) --------------------------------------------------------
void __thiscall SkillInvWin::OnFirstHitWin(SkillInvWin *this)
{
  SkillInvWin *v1; // esi@1
  unsigned __int16 v2; // dx@3
  SkillInfoWin *v3; // ecx@4
  unsigned int v4; // eax@5

  v1 = this;
  if ( this->m_bGTSkill )
  {
    SkillInfoWin::SetGTSkillInfo(
      (SkillInfoWin *)this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin,
      this->m_iStaNum);
    PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  v2 = v1->baseclass_0.m_kSkillID;
  if ( v2 != -1 )
  {
    v3 = (SkillInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v3 )
    {
      v4 = v1->m_uiSkillType;
      if ( v4 )
      {
        if ( v4 == 1 )
          SkillInfoWin::SetPassiveSkillInfo(v3, v2, 0);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
      else
      {
        SkillInfoWin::SetSkillInfo(v3, v2, 1, 0, 0);
        PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
}

//----- (005988A0) --------------------------------------------------------
void __thiscall SkillWin::OnEmpowerWinShow(SkillWin *this, bool b)
{
  char *v2; // esi@1
  signed int v3; // edi@1
  SkillWin *v4; // [sp+Ch] [bp-4h]@1

  v4 = this;
  v2 = (char *)this->m_apkEmpowerWin;
  v3 = 8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(b);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  if ( b )
  {
    ((void (__stdcall *)(_DWORD))v4->m_pkSkillEmpowerNotice->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v4->m_pkSkillPowerWin->baseclass_0.baseclass_0.baseclass_0);
    ((void (__stdcall *)(_DWORD))v4->m_pkSkillEmpowerNotice->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00598930) --------------------------------------------------------
void __thiscall SkillWin::OnCommboSkill(SkillWin *this)
{
  SkillWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkEmpowerDescSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  SkillWin::OnEmpowerWinShow(v1, 0);
}

//----- (005989A0) --------------------------------------------------------
void __thiscall SkillWin::OnSkillPowerReset(SkillWin *this)
{
  GameFrameWork::NcSkillEmpowResetReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005989B0) --------------------------------------------------------
void __thiscall SkillWin::OnInvRClick(SkillWin *this, unsigned int uiInvIndex)
{
  SkillWin *v2; // esi@1
  unsigned __int16 v3; // ax@1
  unsigned __int16 v4; // di@1

  v2 = this;
  v3 = SkillIcon::GetSkill(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v4 = v3;
  if ( v2->m_uiCurPageType == 3 )
  {
    if ( Skill::IsProduceBaseSkill(v3) )
    {
      LOWORD(uiInvIndex) = v4;
      ITask::DirectDispatchAll(33, &uiInvIndex);
    }
  }
}

//----- (00598A00) --------------------------------------------------------
void __thiscall SkillWin::OnClose(SkillWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkSkillPowerWin->baseclass_0.baseclass_0.baseclass_0);
  PgWin::OnClose(v1);
}

//----- (00598A20) --------------------------------------------------------
void __thiscall SkillWin::OpenProduceSkillSelectWin(SkillWin *this)
{
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkProductSkillSelectWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00598A40) --------------------------------------------------------
void __thiscall SkillWin::SetSkillPowerSuccess(SkillWin *this, bool b)
{
  SkillPowerWin::SetSkillPowerSuccess(this->m_pkSkillPowerWin, b);
}

//----- (00598A50) --------------------------------------------------------
void __thiscall SkillWin::CloseProduceSkillSelectWin(SkillWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkProductSkillSelectWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00598A70) --------------------------------------------------------
void __thiscall SkillWin::OpenProduceSkillInitWin(SkillWin *this, char bySlotIndex)
{
  SkillWin *v2; // esi@1

  v2 = this;
  if ( this->m_pkProductSkillInitWin )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkProductSkillInitWin->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkProductSkillInitWin->m_byItemSlot = (unsigned __int8)bySlotIndex;
  }
}

//----- (00598AA0) --------------------------------------------------------
ProductSkillSelectWin *__thiscall SkillWin::GetProductSkillSelectWin(SkillWin *this)
{
  return this->m_pkProductSkillSelectWin;
}

//----- (00598AB0) --------------------------------------------------------
void __thiscall SkillWin::OnHelpLink(SkillWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "ChrSkill");
}

//----- (00598AE0) --------------------------------------------------------
void __thiscall SkillInvWin::SetSkill(SkillInvWin *this, unsigned __int16 kSkillID, unsigned int uiSkillType)
{
  unsigned __int16 v3; // bx@1
  SkillInvWin *v4; // esi@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@2
  int v6; // edi@4
  int v7; // eax@6
  int v8; // edi@7
  float v9; // ST0C_4@8
  float v10; // ST08_4@8
  float v11; // ST04_4@8
  int v12; // ST08_4@8
  NiSourceTexture *v13; // eax@8
  void *(__thiscall *v14)(NiRefObject *, unsigned int); // eax@8
  NiScreenElements *v15; // eax@8
  int v16; // edi@11
  int v17; // eax@13
  int v18; // edi@14
  float v19; // ST0C_4@15
  float v20; // ST08_4@15
  float v21; // ST04_4@15
  int v22; // ST08_4@15
  NiSourceTexture *v23; // eax@15
  void *(__thiscall *v24)(NiRefObject *, unsigned int); // eax@15
  unsigned int v25; // ecx@16

  v3 = kSkillID;
  v4 = this;
  if ( kSkillID == -1 )
  {
    ((void (__stdcall *)(_DWORD, signed int, signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      0,
      -1,
      32,
      32);
    v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v5(
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
  }
  else
  {
    if ( uiSkillType )
    {
      v16 = ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable,
                              kSkillID) )
      {
        if ( v3 <= *(_WORD *)(v16 + 200) )
        {
          v17 = *(_DWORD *)(v16 + 196) + 4 * v3;
          if ( *(_DWORD *)v17 )
          {
            v18 = *(_DWORD *)v17;
            if ( *(_DWORD *)v17 )
            {
              SkillIcon::SetEmpowerInfo(&v4->baseclass_0, 0);
              v21 = (double)*(unsigned int *)(v18 + 70);
              v20 = (double)*(unsigned int *)(v18 + 74);
              v19 = (double)*(unsigned int *)(v18 + 78);
              SkillIcon::SetBackPlaneColor(&v4->baseclass_0, v21, v20, v19, 255.0);
              v22 = *(_DWORD *)(v18 + 34);
              *(_DWORD *)&kSkillID = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v23 = IconMgr::GetTexture((char *)(v18 + 38));
              (*(void (__thiscall **)(SkillInvWin *, NiSourceTexture *, int, signed int, signed int))(kSkillID + 584))(
                v4,
                v23,
                v22,
                32,
                32);
              v24 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
              v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
              v24(
                &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                1u);
            }
          }
        }
      }
    }
    else
    {
      v6 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                              kSkillID) )
      {
        if ( v3 <= *(_WORD *)(v6 + 200) )
        {
          v7 = *(_DWORD *)(v6 + 196) + 4 * v3;
          if ( *(_DWORD *)v7 )
          {
            v8 = *(_DWORD *)v7;
            if ( *(_DWORD *)v7 )
            {
              v11 = (double)*(unsigned int *)(v8 + 75);
              v10 = (double)*(unsigned int *)(v8 + 79);
              v9 = (double)*(unsigned int *)(v8 + 83);
              SkillIcon::SetBackPlaneColor(&v4->baseclass_0, v11, v10, v9, 255.0);
              v12 = *(_DWORD *)(v8 + 39);
              *(_DWORD *)&kSkillID = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v13 = IconMgr::GetTexture((char *)(v8 + 43));
              (*(void (__thiscall **)(SkillInvWin *, NiSourceTexture *, int, signed int, signed int))(kSkillID + 584))(
                v4,
                v13,
                v12,
                32,
                32);
              v14 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
              v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
              v14(
                &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                1u);
              v15 = v4->baseclass_0.m_spBackPlane.m_pObject;
              if ( v3 < 0x4E20u )
              {
                v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
                SkillIcon::UsingSkillAlphaProperty(&v4->baseclass_0);
                Skill::GetAccumulatedEmpowerInfo((Skill::EmpowerInfo *)&kSkillID, v3);
                SkillIcon::SetEmpowerInfo(&v4->baseclass_0, (Skill::EmpowerInfo)kSkillID);
              }
              else
              {
                v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
                SkillIcon::SetEmpowerInfo(&v4->baseclass_0, 0);
                SkillIcon::UsingItemAlphaProperty(&v4->baseclass_0);
              }
            }
          }
        }
      }
    }
  }
  v25 = uiSkillType;
  v4->baseclass_0.m_kSkillID = v3;
  v4->m_uiSkillType = v25;
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;
// A98A38: using guessed type int ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab___ms_pkTable;

//----- (00598D50) --------------------------------------------------------
void __thiscall SkillWin::OnOpenPowerWindow(SkillWin *this)
{
  SkillWin *v1; // esi@1

  v1 = this;
  if ( this->m_uiCurPageType == 3 )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkProductSkillSelectWin->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    if ( !this->m_pkSkillPowerWin )
      this->m_pkSkillPowerWin = SkillPowerWin::CreateWin(this->baseclass_0.m_pkFrameWork);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkSkillPowerWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (00598DA0) --------------------------------------------------------
void __thiscall SkillWin::OnInvLClick(SkillWin *this, unsigned int uiInvIndex)
{
  SkillWin *v2; // esi@1
  unsigned __int16 v3; // ax@1
  void *v4; // edi@1

  v2 = this;
  v3 = SkillIcon::GetSkill(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  v4 = (void *)v3;
  if ( v3 != -1 && ((unsigned __int16)v4 < 0x4E20u || Skill::IsProduceBaseSkill((unsigned __int16)v4)) )
  {
    v2->m_kDropContents.m_eSenderType = 2;
    v2->m_kDropContents.m_eType = 1;
    v2->m_kDropContents.m_apvParam[0] = v4;
    v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
    v2->m_kDrop.m_pkSender = (PgWin *)v2;
    PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (00598E20) --------------------------------------------------------
void __thiscall SkillWin::UpdateMeWin(SkillWin *this, float fCurTime)
{
  SkillWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@3
  char *v4; // eax@3
  NiRefObjectVtbl *v5; // edi@3
  NiRefObjectVtbl *v6; // edi@4
  char *v7; // eax@4
  char *v8; // [sp-4h] [bp-Ch]@3

  v2 = this;
  if ( this->m_pkSkillPowerWin
    && (unsigned __int8)((int (*)(void))this->m_pkSkillPowerWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v3 = v2->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    Skill::GetRestEmpowerPointInEdit();
    v4 = fs("%2d");
    v3[118].__vecDelDtor((NiRefObject *)v2->m_pkSkillEmpowerPointText, (unsigned int)v4);
    v5 = v2->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    Skill::GetAntiEmpowerPointInEdit();
    v8 = "%2d";
  }
  else
  {
    v6 = v2->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    Skill::GetRestEmpowerPoint();
    v7 = fs("%2d");
    v6[118].__vecDelDtor((NiRefObject *)v2->m_pkSkillEmpowerPointText, (unsigned int)v7);
    v5 = v2->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    Inventory::GetSkillEmpowerInitialPoint(&g_kInventory);
    v8 = "%2d";
  }
  fs(v8);
  ((void (__thiscall *)(_DWORD))v5[118].__vecDelDtor)(v2->m_pkSkillEmpowerAntiPointText);
}

//----- (00598EE0) --------------------------------------------------------
bool __thiscall PosInfoWinBut::Create(PosInfoWinBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle)
{
  PosInfoWinBut *v9; // esi@1
  bool result; // al@1
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@2

  v9 = this;
  result = PgWinSpr::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, pkSprData, pkParent, pcName, uiExtStyle);
  if ( result )
  {
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v9,
      0);
    v11 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor;
    v9->baseclass_0.m_uiButNum = pkSprData->m_akGeomData.m_uiSize;
    v11(&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, uiCmdMsg);
    v9->m_Pos = Pos;
    result = 1;
  }
  return result;
}

//----- (00598F50) --------------------------------------------------------
void __thiscall PosInfoWinBut::DoAction(PosInfoWinBut *this)
{
  PosInfoWinBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, v1->baseclass_0.m_uiCmdMsg, v1->m_Pos);
}

//----- (00598F80) --------------------------------------------------------
bool __thiscall LevelSelectWinBut::Create(LevelSelectWinBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex)
{
  LevelSelectWinBut *v9; // esi@1
  bool result; // al@1
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@2

  v9 = this;
  result = PgWinSpr::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, pkSprData, pkParent, pcName, uiExtStyle);
  if ( result )
  {
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v9,
      0);
    v11 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor;
    v9->baseclass_0.m_uiButNum = pkSprData->m_akGeomData.m_uiSize;
    v11(&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, uiCmdMsg);
    v9->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (00598FF0) --------------------------------------------------------
void __thiscall LevelSelectWinBut::DoAction(LevelSelectWinBut *this)
{
  LevelSelectWinBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, v1->baseclass_0.m_uiCmdMsg, v1->m_uiInvIndex);
}

//----- (00599020) --------------------------------------------------------
void __thiscall SkillInvWin::SkillInvWin(SkillInvWin *this)
{
  SkillInvWin *v1; // esi@1

  v1 = this;
  SkillIcon::SkillIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  SkillInvWin::SetSkill(v1, 0xFFFFu, 0);
  v1->m_iStaNum = -1;
  v1->m_bGTSkill = 0;
  v1->m_uiMapType = -1;
}
// 9AD594: using guessed type int (__stdcall *SkillInvWin___vftable_)(int uiFlags);
// 9AD5B4: using guessed type int (__thiscall *SkillInvWin___vftable_)(void *p, char);

//----- (005990B0) --------------------------------------------------------
void __thiscall SkillInvWin::DoAction(SkillInvWin *this)
{
  SkillInvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_uiSkillType )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (005990E0) --------------------------------------------------------
void __thiscall SkillInvWin::DoRAction(SkillInvWin *this)
{
  SkillInvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_uiSkillType )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (00599110) --------------------------------------------------------
int __thiscall SkillInvWin::SetSkill(SkillInvWin *this, int uiRecordIndex, unsigned int uiBuffType)
{
  unsigned int v3; // edi@1
  SkillInvWin *v4; // esi@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@2
  int result; // eax@2
  void *v7; // ebx@7
  unsigned int v8; // edi@8
  void *v9; // eax@11
  NiRefObjectVtbl *v10; // edi@20
  int v11; // ST04_4@20
  NiSourceTexture *v12; // eax@20
  NiRefObjectVtbl *v13; // edx@20
  int i; // [sp+Ch] [bp-4h]@1

  v3 = 0;
  v4 = this;
  i = 0;
  if ( GuildTournamentStateTab::GetTotal() )
  {
    while ( 1 )
    {
      if ( v3 >= GuildTournamentStateTab::GetTotal() )
      {
LABEL_7:
        v7 = 0;
      }
      else
      {
        while ( !CDataReader::GetRecord(
                   (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                   v3) )
        {
          ++v3;
          if ( v3 >= GuildTournamentStateTab::GetTotal() )
            goto LABEL_7;
        }
        v7 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
               v3);
      }
      v8 = i;
      if ( i >= ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal() )
      {
LABEL_11:
        v9 = 0;
      }
      else
      {
        while ( !CDataReader::GetRecord(
                   (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable + 4),
                   v8) )
        {
          ++v8;
          if ( v8 >= ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::GetTotal() )
            goto LABEL_11;
        }
        v9 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab>::ms_pkTable + 4),
               v8);
      }
      if ( uiBuffType == *(_DWORD *)((char *)v7 + 38)
        && uiRecordIndex < i
        && *(_WORD *)v7 == *(_WORD *)v9
        && *((_WORD *)v7 + 1) == *((_WORD *)v9 + 1) )
        break;
      ++i;
      if ( i >= GuildTournamentStateTab::GetTotal() )
        goto LABEL_2;
      v3 = i;
    }
    v10 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v11 = *((_DWORD *)v9 + 1);
    v12 = IconMgr::GetTexture((char *)v9 + 8);
    ((void (__thiscall *)(SkillInvWin *, NiSourceTexture *, int, signed int, signed int))v10[146].__vecDelDtor)(
      v4,
      v12,
      v11,
      32,
      32);
    v13 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v13[60].__vecDelDtor((NiRefObject *)v4, 1u);
    result = i;
    v4->m_iStaNum = *((_WORD *)v7 + 1);
    v4->m_uiMapType = *(_WORD *)v7;
    v4->m_bGTSkill = 1;
  }
  else
  {
LABEL_2:
    ((void (__thiscall *)(SkillInvWin *, _DWORD, signed int, signed int, signed int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v4,
      0,
      -1,
      32,
      32);
    v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v5(
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    result = -1;
  }
  return result;
}
// A97E74: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILLDESC_GuildTournamentStateDescTab___ms_pkTable;
// A97E78: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab___ms_pkTable;

//----- (00599280) --------------------------------------------------------
void __thiscall SkillWin::OnEmpowerClick(SkillWin *this, unsigned int uiIndex)
{
  SkillWin *v2; // esi@1
  SkillIcon *v3; // ecx@1
  unsigned __int16 v4; // ax@3
  PgFrameWork *v5; // eax@3

  v2 = this;
  v3 = (SkillIcon *)this->m_apkInvWin[uiIndex];
  if ( v3 && SkillIcon::GetSkill(v3) != -1 )
  {
    SkillWin::OnOpenPowerWindow(v2);
    v4 = SkillIcon::GetSkill(&v2->m_apkInvWin[uiIndex]->baseclass_0);
    SkillPowerWin::SetEmpowerSkill(v2->m_pkSkillPowerWin, v4);
    v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v5 )
      GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v5, BIL_IMPOWER_1);
  }
}

//----- (005992F0) --------------------------------------------------------
void __thiscall SkillWin::_SkillWin(SkillWin *this)
{
  SkillWin *v1; // ebx@1
  bool v2; // zf@1
  PgFont *v3; // eax@2
  PgFont *v4; // esi@3
  PgFont *v5; // esi@8
  int v6; // edi@12
  NiTListItem<NiPointer<PgFont> > *v7; // esi@12
  NiTListItem<NiPointer<PgFont> > *v8; // ST00_4@13
  NiPointer<PgFont> spFont; // [sp+8h] [bp-10h]@2
  int v10; // [sp+14h] [bp-4h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillWin::_vftable_;
  v2 = *(_DWORD *)&this->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] == 0;
  v10 = 3;
  if ( !v2 )
  {
    do
    {
      NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::RemoveHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v1->m_kCustomFontList,
        (NiPointer<PgWin> *)&spFont);
      v3 = spFont.m_pObject;
      LOBYTE(v10) = 4;
      if ( spFont.m_pObject )
      {
        v4 = spFont.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spFont.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
          v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        v3 = 0;
        spFont.m_pObject = 0;
      }
      LOBYTE(v10) = 3;
      if ( v3 )
      {
        v5 = v3;
        if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v5 )
            v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
        }
      }
    }
    while ( *(_DWORD *)&v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] );
  }
  v6 = (int)&v1->m_kCustomFontList;
  v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&PgTList<NiPointer<PgFont>>::_vftable_;
  v7 = v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  LOBYTE(v10) = 5;
  while ( v7 )
  {
    v8 = v7;
    v7 = v7->m_pkNext;
    (*(void (__thiscall **)(PgTList<NiPointer<PgFont> > *, NiTListItem<NiPointer<PgFont> > *))(*(_DWORD *)v6 + 8))(
      &v1->m_kCustomFontList,
      v8);
  }
  *(_DWORD *)&v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v6 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v10 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AD820: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);
// 9AD840: using guessed type int (__thiscall *PgTList_NiPointer_PgFont_____vftable_)(void *p, char);
// 9AD850: using guessed type int (__stdcall *SkillWin___vftable_)(int uiFlags);
// 9AD86C: using guessed type int (__thiscall *SkillWin___vftable_)(void *p, char);

//----- (00599420) --------------------------------------------------------
void __thiscall SkillWin::SkillWin(SkillWin *this)
{
  SkillWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillWin::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  *(_DWORD *)&v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kCustomFontList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&PgTList<NiPointer<PgFont>>::_vftable_;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_apkInvWin[0] = 0;
  v1->m_apkEmpowerWin[0] = 0;
  v1->m_apkInvWin[1] = 0;
  v1->m_apkEmpowerWin[1] = 0;
  v1->m_apkInvWin[2] = 0;
  v1->m_apkEmpowerWin[2] = 0;
  v1->m_apkInvWin[3] = 0;
  v1->m_apkEmpowerWin[3] = 0;
  v1->m_apkInvWin[4] = 0;
  v1->m_apkEmpowerWin[4] = 0;
  v1->m_apkInvWin[5] = 0;
  v1->m_apkEmpowerWin[5] = 0;
  v1->m_apkInvWin[6] = 0;
  v1->m_apkEmpowerWin[6] = 0;
  v1->m_apkInvWin[7] = 0;
  v1->m_apkEmpowerWin[7] = 0;
  v1->m_pkSkillEmpowerNotice = 0;
  v1->m_pkInfoWin = 0;
  v1->m_uiCurPageType = 0;
  v1->m_uiCurPage = 0;
  v1->m_pkSkillPowerWin = 0;
  v1->m_pkSkillEmpowerResetBtn = 0;
  v1->m_pkEmpowerDescSpr = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AD840: using guessed type int (__thiscall *PgTList_NiPointer_PgFont_____vftable_)(void *p, char);
// 9AD850: using guessed type int (__stdcall *SkillWin___vftable_)(int uiFlags);
// 9AD86C: using guessed type int (__thiscall *SkillWin___vftable_)(void *p, char);

//----- (00599520) --------------------------------------------------------
PosInfoWinBut *__cdecl PosInfoWinBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle)
{
  void *v8; // eax@1
  void *v9; // esi@1
  PgWin *v10; // edi@8
  PosInfoWinBut *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v8 = operator new(0x148u);
  v9 = v8;
  result.m_pObject = (PgWin *)v8;
  v13 = 0;
  if ( v8 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v8);
    *(_DWORD *)v9 = &PosInfoWinBut::_vftable_;
    *((_DWORD *)v9 + 58) = &PosInfoWinBut::_vftable_;
    *((_DWORD *)v9 + 81) = 0;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)v9 + 1);
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int, int, char *, unsigned int))(*(_DWORD *)v9 + 560))(
                          v9,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg,
                          Pos,
                          pcName,
                          uiExtStyle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = (PosInfoWinBut *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}
// 9AD0E4: using guessed type int (__stdcall *PosInfoWinBut___vftable_)(int uiFlags);
// 9AD104: using guessed type int (__thiscall *PosInfoWinBut___vftable_)(void *p, char);

//----- (00599680) --------------------------------------------------------
LevelSelectWinBut *__cdecl LevelSelectWinBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle, unsigned int uiInvIndex)
{
  void *v8; // eax@1
  void *v9; // esi@1
  PgWin *v10; // edi@8
  LevelSelectWinBut *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v8 = operator new(0x14Cu);
  v9 = v8;
  result.m_pObject = (PgWin *)v8;
  v13 = 0;
  if ( v8 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v8);
    *(_DWORD *)v9 = &LevelSelectWinBut::_vftable_;
    *((_DWORD *)v9 + 58) = &LevelSelectWinBut::_vftable_;
    *((_DWORD *)v9 + 81) = -1;
    *((_BYTE *)v9 + 328) = 0;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)v9 + 1);
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int, char *, unsigned int, unsigned int))(*(_DWORD *)v9 + 560))(
                          v9,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg,
                          pcName,
                          uiExtStyle,
                          uiInvIndex) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = (LevelSelectWinBut *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}
// 9AD33C: using guessed type int (__stdcall *LevelSelectWinBut___vftable_)(int uiFlags);
// 9AD35C: using guessed type int (__thiscall *LevelSelectWinBut___vftable_)(void *p, char);

//----- (005997F0) --------------------------------------------------------
SkillInvWin *__cdecl SkillInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  int v5; // eax@2
  int v6; // esi@2
  PgWin *v7; // edi@8
  SkillInvWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1B0u);
  result.m_pObject = (PgWin *)v4;
  v10 = 0;
  if ( v4 )
  {
    SkillInvWin::SkillInvWin((SkillInvWin *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, PgWin *))(*(_DWORD *)v6 + 612))(
                          v6,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = (SkillInvWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}

//----- (00599930) --------------------------------------------------------
SkillWin *__cdecl SkillWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  SkillWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x2B8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    SkillWin::SkillWin((SkillWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (SkillWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00599A60) --------------------------------------------------------
bool __thiscall SkillWin::Create(SkillWin *this, PgFrameWork *pkFrameWork)
{
  SkillWin *v2; // edi@1
  NiTexturePalette *v4; // ebx@7
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  int v8; // esi@16
  int v9; // ebx@16
  NiSourceTexture *v10; // eax@16
  PgSprData *v11; // eax@19
  PgSprData *v12; // eax@21
  PgWinSpr *v13; // eax@21
  PgSprData *v14; // eax@21
  PgSprData *v15; // eax@21
  PgFont *v16; // eax@22
  PgWinText *v17; // esi@22
  char *v18; // eax@22
  NiSourceTexture *v19; // esi@22
  PgSprData *v20; // eax@22
  NiPointer<PgSprData::PgHitTester> *v21; // ecx@27
  unsigned int v22; // esi@27
  PgFont *v23; // eax@27
  PgWinText *v24; // eax@27
  NiRefObjectVtbl *v25; // esi@27
  char *v26; // eax@27
  PgFont *v27; // eax@27
  int v28; // esi@27
  PgSprData *v29; // eax@28
  SkillInvWin *v30; // eax@28
  PgFont *v31; // edx@28
  PgWinText *v32; // eax@28
  PosInfoWinBut *v33; // eax@28
  char *v34; // eax@28
  PgFont *v35; // eax@28
  PgWinText *v36; // eax@28
  LevelSelectWinBut *v37; // eax@28
  char *v38; // eax@28
  LevelSelectWinBut *v39; // eax@28
  char *v40; // eax@28
  PgSprData *v41; // esi@29
  PgSprData *v42; // ST54_4@29
  int v43; // esi@29
  char *v44; // eax@29
  NiSourceTexture *v45; // ST64_4@29
  char *v46; // eax@29
  NiSourceTexture *v47; // ST64_4@29
  char *v48; // eax@29
  char *v49; // eax@29
  char *v50; // eax@29
  PgSprData *v51; // eax@29
  PgFont *v52; // eax@32
  PgWinText *v53; // eax@32
  D3DXCOLOR v54; // ST54_16@32
  char *v55; // eax@32
  D3DXCOLOR v56; // ST54_16@32
  PgFont *v57; // eax@32
  D3DXCOLOR v58; // ST54_16@32
  char *v59; // eax@32
  D3DXCOLOR v60; // ST54_16@32
  PgFont *v61; // eax@32
  PgSprData *v62; // eax@32
  PgWinSpr *v63; // eax@32
  CSkillInitWin *v64; // eax@32
  void *(__thiscall *v65)(NiRefObject *, unsigned int); // edx@32
  const char *v66; // [sp+58h] [bp-F4h]@17
  int *v67; // [sp+5Ch] [bp-F0h]@17
  int *v68; // [sp+60h] [bp-ECh]@17
  NiSourceTexture *v69; // [sp+64h] [bp-E8h]@17
  unsigned int v70; // [sp+68h] [bp-E4h]@1
  int EmpowerTop; // [sp+78h] [bp-D4h]@24
  int NextLevelHeight; // [sp+7Ch] [bp-D0h]@25
  int EmpowerWidth; // [sp+80h] [bp-CCh]@24
  int NextLevelWidth; // [sp+84h] [bp-C8h]@25
  int PreLevelWidth; // [sp+88h] [bp-C4h]@26
  int EmpowerLeft; // [sp+8Ch] [bp-C0h]@24
  int PreLevelHeight; // [sp+90h] [bp-BCh]@26
  int EmpowerHeight; // [sp+94h] [bp-B8h]@24
  unsigned int IconTxtHeight; // [sp+98h] [bp-B4h]@22
  unsigned int IconLevWidth; // [sp+9Ch] [bp-B0h]@23
  int IconSlotTop; // [sp+A0h] [bp-ACh]@22
  int IconLevLeft; // [sp+A4h] [bp-A8h]@23
  int IconSlot00Left; // [sp+A8h] [bp-A4h]@22
  int NextLevelTop; // [sp+ACh] [bp-A0h]@25
  int PreLevelLeft; // [sp+B0h] [bp-9Ch]@26
  int IconLevTop; // [sp+B4h] [bp-98h]@23
  int PreLevelTop; // [sp+B8h] [bp-94h]@26
  unsigned int IconTxtWidth; // [sp+BCh] [bp-90h]@22
  int NextLevelLeft; // [sp+C0h] [bp-8Ch]@25
  unsigned int IconLevHeight; // [sp+C4h] [bp-88h]@23
  UIUtil ui; // [sp+C8h] [bp-84h]@27
  int IconTxtTop; // [sp+DCh] [bp-70h]@22
  int IconTxtLeft; // [sp+E0h] [bp-6Ch]@22
  unsigned int uiHeight; // [sp+E4h] [bp-68h]@21
  unsigned int pkTexture10; // [sp+E8h] [bp-64h]@28
  unsigned int uiWidth; // [sp+ECh] [bp-60h]@21
  int tempTop; // [sp+F0h] [bp-5Ch]@28
  unsigned int i; // [sp+F4h] [bp-58h]@27
  unsigned int tempLeft; // [sp+F8h] [bp-54h]@19
  int iOffY; // [sp+FCh] [bp-50h]@16
  NiSourceTexture *pkTexture; // [sp+100h] [bp-4Ch]@1
  NiPointer<PgFont> pkFont; // [sp+104h] [bp-48h]@1
  PgSprData *pkBut; // [sp+108h] [bp-44h]@19
  int uiTop; // [sp+10Ch] [bp-40h]@10
  int uiLeft; // [sp+110h] [bp-3Ch]@10
  NiPointer<NiNode> spNode; // [sp+114h] [bp-38h]@1
  char acShapeName[33]; // [sp+118h] [bp-34h]@28
  unsigned int v108; // [sp+13Ch] [bp-10h]@1
  int v109; // [sp+148h] [bp-4h]@1
  int v110; // [sp+14Ch] [bp+0h]@1

  v108 = (unsigned int)&v110 ^ __security_cookie;
  v70 = (unsigned int)&v110 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v109 = 0;
  pkFont.m_pObject = 0;
  LOBYTE(v109) = 1;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v109 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\ChrSkill.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, pkFrameWork, "SkillWin", 0) )
  {
    v8 = uiTop;
    v9 = uiLeft;
    iOffY = uiTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v69 = v10;
      v68 = &uiTop;
      v67 = &uiLeft;
      v66 = "Theme";
    }
    else
    {
      v69 = 0;
      v68 = &uiTop;
      v67 = &uiLeft;
      v66 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v66, v67, v68, v69);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkBut = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - v8, pkBut, &v2->baseclass_0.baseclass_0.baseclass_0);
    tempLeft = (unsigned int)MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "HelpLinkNor",
           v70) )
    {
      pkBut = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "HelpLinkNor",
                &uiLeft,
                &uiTop,
                (NiSourceTexture *)tempLeft);
      PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v9, uiTop - v8, pkBut, &v2->baseclass_0.baseclass_0.baseclass_0, 0x16u, 0, 0);
    }
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v13 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnBack", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v16 = Font::Get(MAIN_MENU);
      v17 = PgWinText::CreateWin(
              uiLeft - v9,
              uiTop - v8 + 2,
              uiWidth,
              uiHeight,
              v16,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v17,
        5u);
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
        (NiRefObject *)v17,
        (unsigned int)&Color::m_kDxWinTitleColor);
      tempLeft = (unsigned int)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v18 = TextData::Get(0x9EFEF4E8u);
      (*(void (__thiscall **)(PgWinText *, char *))tempLeft)(v17, v18);
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v17,
        0);
      v19 = pkTexture;
      v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot00", &IconSlot00Left, &IconSlotTop, v19);
      if ( PgUtil::GetTriShapeRect(
             &spNode.m_pObject->baseclass_0,
             "IconTxtPro",
             &IconTxtLeft,
             &IconTxtTop,
             &IconTxtWidth,
             &IconTxtHeight) )
      {
        if ( PgUtil::GetTriShapeRect(
               &spNode.m_pObject->baseclass_0,
               "IconLevelPro",
               &IconLevLeft,
               &IconLevTop,
               &IconLevWidth,
               &IconLevHeight)
          && PgUtil::GetTriShapeRect(
               &spNode.m_pObject->baseclass_0,
               "ImPowerNor",
               &EmpowerLeft,
               &EmpowerTop,
               (unsigned int *)&EmpowerWidth,
               (unsigned int *)&EmpowerHeight)
          && PgUtil::GetTriShapeRect(
               &spNode.m_pObject->baseclass_0,
               "NextLevelNor",
               &NextLevelLeft,
               &NextLevelTop,
               (unsigned int *)&NextLevelWidth,
               (unsigned int *)&NextLevelHeight)
          && PgUtil::GetTriShapeRect(
               &spNode.m_pObject->baseclass_0,
               "PreLevelNor",
               &PreLevelLeft,
               &PreLevelTop,
               (unsigned int *)&PreLevelWidth,
               (unsigned int *)&PreLevelHeight) )
        {
          v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, v19)->m_akHitTester.m_pBase;
          v22 = v21->m_pObject->m_uiHeight;
          tempLeft = v21->m_pObject->m_uiWidth;
          v23 = Font::Get(MAIN_MENU);
          v24 = PgWinText::CreateWin(uiLeft, uiTop, tempLeft, v22, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
          v2->m_pkSkillEmpowerNotice = v24;
          v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
            (NiRefObject *)v24,
            2u);
          v25 = v2->m_pkSkillEmpowerNotice->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v26 = TextData2::Get(0xE0E1D5D8u);
          v25[118].__vecDelDtor((NiRefObject *)v2->m_pkSkillEmpowerNotice, (unsigned int)v26);
          ((void (__stdcall *)(_DWORD))v2->m_pkSkillEmpowerNotice->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          UIUtil::UIUtil(&ui);
          LOBYTE(v109) = 2;
          UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
          UIUtil::SetOffset(&ui, v9, iOffY);
          UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
          v27 = UIUtil::AddOutLineFromFontType(&ui, MAIN_MENU, 0);
          NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&pkFont, (NiD3DDefaultShader *)v27);
          NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v2->m_kCustomFontList,
            (NiPointer<NiDX92DBufferData> *)&pkFont);
          i = 0;
          v28 = (int)v2->m_apkInvTextWin;
          do
          {
            pkTexture10 = i + 1;
            sprintf(acShapeName, "IconSlotBox%02d");
            v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
            PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v29, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
            PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot00", (int *)&tempLeft, &tempTop, pkTexture);
            v30 = SkillInvWin::CreateWin(
                    uiLeft + IconSlot00Left - v9,
                    uiTop + IconSlotTop - iOffY,
                    i,
                    &v2->baseclass_0.baseclass_0.baseclass_0);
            *(_DWORD *)(v28 - 32) = v30;
            SkillInvWin::SetSkill(v30, 0xFFFFu, 0);
            (*(void (__stdcall **)(signed int))(**(_DWORD **)(v28 - 32) + 516))(9);
            (*(void (__stdcall **)(signed int))(**(_DWORD **)(v28 - 32) + 560))(10);
            v31 = pkFont.m_pObject;
            *(_DWORD *)(*(_DWORD *)(v28 - 32) + 272) = g_pkSkillInfoWin;
            v32 = PgWinText::CreateWin(
                    uiLeft + IconTxtLeft - v9,
                    uiTop + IconTxtTop - iOffY,
                    IconTxtWidth,
                    IconTxtHeight,
                    v31,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            *(_DWORD *)v28 = v32;
            v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
              (NiRefObject *)v32,
              (unsigned int)&Color::m_kDxGreenColor);
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v28 + 488))(5);
            (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v28 + 472))(&unk_9ACDCA);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v28 + 240))(0);
            pkBut = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ImPowerNor", (int *)&tempLeft, &tempTop, 0);
            PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "ImPowerClick");
            PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "ImPowerOver");
            v33 = PosInfoWinBut::CreateWin(
                    uiLeft + IconTxtLeft - v9,
                    IconTxtTop - iOffY + uiTop + 3,
                    pkBut,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0x15u,
                    i,
                    0,
                    0);
            *(_DWORD *)(v28 + 236) = v33;
            v33->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
            v34 = TextData2::Get(0xADE6D0EDu);
            PgWin::SetToolTipWinText(*(PgWin **)(v28 + 236), v34);
            v35 = Font::Get(MAIN_MENU);
            v36 = PgWinText::CreateWin(
                    uiLeft + IconLevLeft - v9,
                    uiTop + IconLevTop - iOffY,
                    IconLevWidth,
                    IconLevHeight,
                    v35,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            *(_DWORD *)(v28 + 32) = v36;
            v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
              (NiRefObject *)v36,
              5u);
            (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(v28 + 32) + 472))(&unk_9ACDCB);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v28 + 32) + 240))(0);
            pkBut = PgSprData::Create(
                      &spNode.m_pObject->baseclass_0,
                      "NextLevelNor",
                      (int *)&tempLeft,
                      &tempTop,
                      pkTexture);
            PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "NextLevelClick");
            PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "NextLevelOver");
            v37 = LevelSelectWinBut::CreateWin(
                    uiLeft + NextLevelLeft - v9,
                    uiTop + NextLevelTop - iOffY,
                    pkBut,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0x13u,
                    0,
                    0,
                    i);
            *(_DWORD *)(v28 + 64) = v37;
            v37->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
            v38 = TextData2::Get(0xFD01F2Cu);
            PgWin::SetToolTipWinText(*(PgWin **)(v28 + 64), v38);
            pkBut = PgSprData::Create(
                      &spNode.m_pObject->baseclass_0,
                      "PreLevelNor",
                      (int *)&tempLeft,
                      &tempTop,
                      pkTexture);
            PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "PreLevelClick");
            PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "PreLevelOver");
            v39 = LevelSelectWinBut::CreateWin(
                    uiLeft + PreLevelLeft - v9,
                    uiTop + PreLevelTop - iOffY,
                    pkBut,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0x14u,
                    0,
                    0,
                    i);
            *(_DWORD *)(v28 + 96) = v39;
            v39->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
            v40 = TextData2::Get(0x5D271E1Bu);
            PgWin::SetToolTipWinText(*(PgWin **)(v28 + 96), v40);
            v28 += 4;
            i = pkTexture10;
          }
          while ( pkTexture10 < 8 );
          v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ActSkNor", &uiLeft, &uiTop, pkTexture);
          PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "ActSkClick");
          PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "ActSkOver");
          v42 = v41;
          v43 = iOffY;
          pkBut = (PgSprData *)PgWinBut::CreateWin(
                                 uiLeft - v9,
                                 uiTop - iOffY,
                                 v42,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 0xBu,
                                 0,
                                 0);
          v44 = TextData::Get(0xDBF6F1F3u);
          PgWin::SetToolTipWinText((PgWin *)pkBut, v44);
          v45 = pkTexture;
          pkBut[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
          pkBut = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PasSkNor", &uiLeft, &uiTop, v45);
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "PasSkClick");
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "PasSkOver");
          pkBut = (PgSprData *)PgWinBut::CreateWin(
                                 uiLeft - v9,
                                 uiTop - v43,
                                 pkBut,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 0xCu,
                                 0,
                                 0);
          v46 = TextData::Get(0xEAF8FB37u);
          PgWin::SetToolTipWinText((PgWin *)pkBut, v46);
          v47 = pkTexture;
          pkBut[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
          pkBut = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ProSkNor", &uiLeft, &uiTop, v47);
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "ProSkClick");
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "ProSkOver");
          pkBut = (PgSprData *)PgWinBut::CreateWin(
                                 uiLeft - v9,
                                 uiTop - v43,
                                 pkBut,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 0xEu,
                                 0,
                                 0);
          v48 = TextData::Get(0xF2E5F03Bu);
          PgWin::SetToolTipWinText((PgWin *)pkBut, v48);
          pkBut[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
          pkTexture10 = (unsigned int)MenuTexMgr::GetTexture(0x1Cu);
          pkBut = PgSprData::Create(
                    &spNode.m_pObject->baseclass_0,
                    "PrePageNor",
                    &uiLeft,
                    &uiTop,
                    (NiSourceTexture *)pkTexture10);
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "PrePageClick");
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "PrePageOver");
          pkBut = (PgSprData *)PgWinBut::CreateWin(
                                 uiLeft - v9,
                                 uiTop - v43,
                                 pkBut,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 0xFu,
                                 0,
                                 0);
          pkBut[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
          v49 = TextData3::Get(0x6A8A9870u);
          PgWin::SetToolTipWinText((PgWin *)pkBut, v49);
          pkBut = PgSprData::Create(
                    &spNode.m_pObject->baseclass_0,
                    "NextPageNor",
                    &uiLeft,
                    &uiTop,
                    (NiSourceTexture *)pkTexture10);
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "NextPageClick");
          PgSprData::Add(pkBut, &spNode.m_pObject->baseclass_0, "NextPageOver");
          pkBut = (PgSprData *)PgWinBut::CreateWin(
                                 uiLeft - v9,
                                 uiTop - v43,
                                 pkBut,
                                 &v2->baseclass_0.baseclass_0.baseclass_0,
                                 0x10u,
                                 0,
                                 0);
          pkBut[3].m_akGeomData.m_uiSize = (unsigned int)g_pkToolTipWin;
          v50 = TextData3::Get(0x25449D82u);
          PgWin::SetToolTipWinText((PgWin *)pkBut, v50);
          v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Number", &uiLeft, &uiTop, pkTexture);
          PgWinSpr::CreateWin(uiLeft - v9, uiTop - v43, v51, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
          if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Number01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
          {
            v52 = Font::Get(0);
            v53 = PgWinText::CreateWin(
                    uiLeft - v9,
                    uiTop - v43,
                    uiWidth,
                    uiHeight,
                    v52,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            v2->m_pkPageText = v53;
            v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
              (NiRefObject *)v53,
              5u);
            *(_QWORD *)&v54.r = Color::m_kDxWinTitleColor;
            *(_QWORD *)&v54.b = qword_A746E8;
            v55 = TextData::Get(0x4B47438Cu);
            v2->m_pkSkillEmpowerTitleText = UIUtil::CreateTextNoSpr(&ui, "SPwrPt", v55, COERCE_D3DXCOLOR(v54.r), 6u);
            *(_QWORD *)&v56.r = Color::m_kDxWinTitleColor;
            *(_QWORD *)&v56.b = qword_A746E8;
            v2->m_pkSkillEmpowerPointText = UIUtil::CreateTextNoSpr(&ui, "SPwrPtBox", "0", COERCE_D3DXCOLOR(v56.r), 4u);
            v57 = UIUtil::AddOutLineFromFontType(&ui, SMALL, 0);
            NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&pkFont, (NiD3DDefaultShader *)v57);
            ((void (__stdcall *)(PgFont *))v2->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(pkFont.m_pObject);
            ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
            NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
              (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v2->m_kCustomFontList,
              (NiPointer<NiDX92DBufferData> *)&pkFont);
            *(_QWORD *)&v58.r = Color::m_kDxWinTitleColor;
            *(_QWORD *)&v58.b = qword_A746E8;
            v59 = TextData::Get(0x36602732u);
            v2->m_pkSkillEmpowerAntiTitleText = UIUtil::CreateTextNoSpr(
                                                  &ui,
                                                  "SPwrPt01",
                                                  v59,
                                                  COERCE_D3DXCOLOR(v58.r),
                                                  6u);
            *(_QWORD *)&v60.r = Color::m_kDxWinTitleColor;
            *(_QWORD *)&v60.b = qword_A746E8;
            v2->m_pkSkillEmpowerAntiPointText = UIUtil::CreateTextNoSpr(
                                                  &ui,
                                                  "SPwrPtBox01",
                                                  "0",
                                                  COERCE_D3DXCOLOR(v60.r),
                                                  4u);
            v61 = UIUtil::AddOutLineFromFontType(&ui, SMALL, 0);
            NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&pkFont, (NiD3DDefaultShader *)v61);
            ((void (__stdcall *)(PgFont *))v2->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(pkFont.m_pObject);
            ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
            NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
              (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v2->m_kCustomFontList,
              (NiPointer<NiDX92DBufferData> *)&pkFont);
            v62 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PBtn", &uiLeft, &uiTop, pkTexture);
            v63 = PgWinSpr::CreateWin(uiLeft, uiTop, v62, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
            v2->m_pkEmpowerDescSpr = v63;
            v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
              (NiRefObject *)v63,
              1u);
            v2->m_pkProductSkillSelectWin = ProductSkillSelectWin::CreateWin(0);
            v64 = CSkillInitWin::CreateWin(0);
            v65 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
            v2->m_pkProductSkillInitWin = v64;
            ((void (__thiscall *)(SkillWin *, unsigned int, unsigned int, _DWORD, _DWORD))v65)(
              v2,
              PgWin::ms_uiScreenWidth,
              PgWin::ms_uiScreenHeight,
              0.5,
              0.5);
            LOBYTE(v109) = 1;
            UIUtil::_UIUtil(&ui);
            LOBYTE(v109) = 0;
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFont);
            v109 = -1;
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
            return 1;
          }
          LOBYTE(v109) = 1;
          UIUtil::_UIUtil(&ui);
        }
      }
    }
    LOBYTE(v109) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFont);
    v109 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v7 = spNode.m_pObject;
  v109 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  return 0;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0059A9D0) --------------------------------------------------------
void __thiscall SkillWin::SetLevel(SkillWin *this, unsigned int InvIndex, char curLevel)
{
  SkillWin *v3; // ebx@1
  bool v4; // zf@1
  unsigned int v5; // eax@2
  unsigned int v6; // ecx@2
  int v7; // edi@5
  int v8; // esi@5
  int (__thiscall *v9)(_DWORD, _DWORD); // eax@5
  int v10; // eax@7
  int v11; // eax@8
  const char *v12; // ecx@9
  int v13; // eax@9
  int v14; // esi@9
  char v15; // dl@10
  int v16; // edi@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@11
  bool v18; // cf@11
  bool v19; // bl@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v20; // eax@16
  bool v21; // bl@18
  SkillWin *v22; // edi@21
  unsigned int v23; // ebx@21
  unsigned int v24; // [sp-10h] [bp-78h]@1
  unsigned int totalNum; // [sp+0h] [bp-68h]@2
  Skill::EmpowerInfo kInfo; // [sp+4h] [bp-64h]@21
  unsigned int v27; // [sp+8h] [bp-60h]@1
  SkillWin *v28; // [sp+Ch] [bp-5Ch]@1
  int kSkillID; // [sp+10h] [bp-58h]@5
  unsigned int i; // [sp+14h] [bp-54h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+18h] [bp-50h]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > str; // [sp+34h] [bp-34h]@11
  char levInfoTxt[6]; // [sp+50h] [bp-18h]@21
  unsigned int v34; // [sp+58h] [bp-10h]@1
  int v35; // [sp+64h] [bp-4h]@11
  int v36; // [sp+68h] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v24 = (unsigned int)&v36 ^ __security_cookie;
  v3 = this;
  v4 = this->m_uiCurPageType == 0;
  v28 = this;
  v27 = InvIndex;
  if ( v4 )
  {
    v5 = Skill::GetTotalLearnActSkill();
    v6 = 0;
    totalNum = v5;
    i = 0;
    if ( v5 )
    {
      while ( 1 )
      {
        v7 = Skill::GetLearnActSkillInfo(v6)->kSkillID;
        v8 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
        v9 = *(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                  + 16);
        kSkillID = v7;
        if ( (unsigned __int8)v9(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable, v7) )
        {
          if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) )
          {
            v10 = *(_DWORD *)(v8 + 196) + 4 * (unsigned __int16)v7;
            if ( *(_DWORD *)v10 )
            {
              v11 = *(_DWORD *)v10;
              if ( v11 )
              {
                v12 = (const char *)(v11 + 34);
                v13 = v11 + 34;
                v14 = v13 + 1;
                do
                  v15 = *(_BYTE *)v13++;
                while ( v15 );
                v16 = v13 - v14;
                str.baseclass_0._Myres = 15;
                str.baseclass_0._Mysize = 0;
                str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&str, v12, strlen(v12));
                v35 = 0;
                v17 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                        &str,
                        &result,
                        0,
                        v16 - 4);
                v18 = v17->baseclass_0._Myres < 0x10;
                LOBYTE(v35) = 1;
                if ( !v18 )
                  v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v17->baseclass_0.___u0.baseclass_0.dummy[0];
                v19 = strcmp(
                        (const char *)((int (__cdecl *)(unsigned int))v3->m_apkInvTextWin[v27]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v24),
                        v17->baseclass_0.___u0.baseclass_0.dummy) == 0;
                LOBYTE(v35) = 0;
                if ( result.baseclass_0._Myres >= 0x10 )
                  operator delete(*(void **)&result);
                if ( v19 )
                {
                  v20 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                          &str,
                          &result,
                          v16 - 3,
                          2u);
                  if ( v20->baseclass_0._Myres >= 0x10 )
                    v20 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v20->baseclass_0.___u0.baseclass_0.dummy[0];
                  v21 = curLevel == atoi(v20->baseclass_0.___u0.baseclass_0.dummy);
                  if ( result.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&result);
                  if ( v21 )
                  {
                    v22 = v28;
                    v23 = v27;
                    SkillInvWin::SetSkill(v28->m_apkInvWin[v27], kSkillID, 0);
                    sprintf(levInfoTxt, "%02d/%02d");
                    ((void (__stdcall *)(_DWORD))v22->m_apkInvLevWin[v23]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(levInfoTxt);
                    Skill::GetAccumulatedEmpowerInfo(&kInfo, kSkillID);
                    SkillIcon::SetEmpowerInfo(&v22->m_apkInvWin[v23]->baseclass_0, kInfo);
                  }
                }
                v35 = -1;
                if ( str.baseclass_0._Myres >= 0x10 )
                  operator delete(*(void **)&str);
              }
            }
          }
        }
        v6 = i + 1;
        i = v6;
        if ( v6 >= totalNum )
          break;
        v3 = v28;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (0059AC50) --------------------------------------------------------
unsigned int __thiscall SkillWin::GetLearnSkillNum(SkillWin *this)
{
  unsigned int v1; // eax@1
  void *v2; // ebx@2
  unsigned int v3; // eax@2
  unsigned int v4; // ecx@2
  Skill::LearnSkillInfo *v5; // eax@5
  int v6; // edi@5
  int v7; // esi@5
  int v8; // eax@7
  int v9; // eax@8
  const char *v10; // ecx@9
  int v11; // eax@9
  int v12; // esi@9
  char v13; // dl@10
  const char *v14; // eax@12
  const char *v15; // esi@13
  int v16; // edi@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@15
  bool v18; // bl@17
  void *v19; // eax@21
  void *v20; // ebx@22
  unsigned int v21; // esi@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // eax@23
  bool v23; // bl@25
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v24; // eax@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v25; // eax@33
  const char *v26; // edx@34
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v27; // eax@38
  SkillData **v28; // edi@42
  unsigned int v29; // edx@42
  signed int v30; // esi@44
  int v31; // eax@45
  int v32; // eax@46
  signed int v33; // ecx@46
  unsigned int v34; // ecx@48
  int v35; // eax@56
  int v36; // eax@57
  signed int v37; // ecx@57
  unsigned int v38; // ecx@59
  void *v39; // esi@70
  unsigned __int16 v41; // ax@77
  PassiveSkillInfo *v42; // eax@77
  const char *v43; // ecx@77
  int v44; // eax@77
  int v45; // esi@77
  char v46; // dl@78
  unsigned int v47; // edi@79
  SkillData *v48; // eax@80
  const char *v49; // esi@81
  int v50; // edi@83
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v51; // eax@83
  bool v52; // bl@85
  void *v53; // eax@90
  SkillData **v54; // ebx@91
  unsigned int v55; // esi@92
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v56; // eax@92
  bool v57; // bl@94
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v58; // eax@97
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v59; // eax@102
  bool v60; // cf@102
  const char *v61; // edx@103
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v62; // eax@107
  SkillData **v63; // edx@111
  signed int v64; // esi@113
  int v65; // eax@114
  int v66; // eax@115
  signed int v67; // ecx@115
  unsigned int v68; // ecx@117
  int v69; // eax@125
  int v70; // eax@126
  signed int v71; // ecx@126
  unsigned int v72; // ecx@128
  void *v73; // esi@139
  unsigned int totalNum; // [sp+0h] [bp-70h]@2
  unsigned int totalNuma; // [sp+0h] [bp-70h]@76
  unsigned __int16 kSkillID; // [sp+4h] [bp-6Ch]@5
  unsigned __int16 kSkillIDa; // [sp+4h] [bp-6Ch]@77
  unsigned int uiTotal; // [sp+8h] [bp-68h]@1
  unsigned int i; // [sp+Ch] [bp-64h]@2
  unsigned int ia; // [sp+Ch] [bp-64h]@76
  std::vector<SkillData *,std::allocator<SkillData *> > m_listExcelData; // [sp+10h] [bp-60h]@2
  char *data; // [sp+20h] [bp-50h]@11
  SkillData **iterCur; // [sp+24h] [bp-4Ch]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > str; // [sp+28h] [bp-48h]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+44h] [bp-2Ch]@15
  unsigned int v86; // [sp+60h] [bp-10h]@1
  int v87; // [sp+6Ch] [bp-4h]@2
  int v88; // [sp+70h] [bp+0h]@1

  v86 = (unsigned int)&v88 ^ __security_cookie;
  v1 = this->m_uiCurPageType;
  uiTotal = 0;
  if ( !v1 )
  {
    v2 = 0;
    *(_DWORD *)&m_listExcelData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    m_listExcelData.baseclass_0._Mylast = 0;
    m_listExcelData.baseclass_0._Myend = 0;
    v87 = 0;
    v3 = Skill::GetTotalLearnActSkill();
    v4 = 0;
    totalNum = v3;
    i = 0;
    if ( v3 > 0 )
    {
      while ( 1 )
      {
        v5 = Skill::GetLearnActSkillInfo(v4);
        v6 = v5->kSkillID;
        v7 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
        kSkillID = v5->kSkillID;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                                v6) )
        {
          if ( (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) )
          {
            v8 = *(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v6;
            if ( *(_DWORD *)v8 )
            {
              v9 = *(_DWORD *)v8;
              if ( v9 )
              {
                v10 = (const char *)(v9 + 34);
                v11 = v9 + 34;
                v12 = v11 + 1;
                do
                  v13 = *(_BYTE *)v11++;
                while ( v13 );
                iterCur = (SkillData **)(v11 - v12);
                str.baseclass_0._Myres = 15;
                str.baseclass_0._Mysize = 0;
                str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&str, v10, strlen(v10));
                LOBYTE(v87) = 1;
                data = (char *)v2;
                if ( v2 == (void *)m_listExcelData.baseclass_0._Mylast )
                {
LABEL_21:
                  v19 = operator new(0x20u);
                  if ( v19 )
                  {
                    *((_DWORD *)v19 + 5) = 15;
                    *((_DWORD *)v19 + 4) = 0;
                    *(_BYTE *)v19 = 0;
                    v20 = v19;
                  }
                  else
                  {
                    v20 = 0;
                  }
                  data = (char *)v20;
                  v25 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                          &str,
                          &result,
                          0,
                          (unsigned int)(iterCur - 1));
                  LOBYTE(v87) = 2;
                  if ( v25->baseclass_0._Myres < 0x10 )
                    v26 = (const char *)v25;
                  else
                    v26 = *(const char **)&v25->baseclass_0.___u0.baseclass_0.dummy[0];
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v20,
                    v26,
                    strlen(v26));
                  LOBYTE(v87) = 1;
                  if ( result.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&result);
                  v27 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                          &str,
                          &result,
                          (unsigned int)((char *)iterCur - 3),
                          2u);
                  if ( v27->baseclass_0._Myres >= 0x10 )
                    v27 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v27->baseclass_0.___u0.baseclass_0.dummy[0];
                  *((_BYTE *)v20 + 28) = atoi(v27->baseclass_0.___u0.baseclass_0.dummy);
                  if ( result.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&result);
                  v28 = m_listExcelData.baseclass_0._Mylast;
                  v29 = *(_DWORD *)&m_listExcelData;
                  *((_WORD *)v20 + 15) = kSkillID;
                  if ( (unsigned int)&data >= (unsigned int)v28 || v29 > (unsigned int)&data )
                  {
                    if ( v28 == m_listExcelData.baseclass_0._Myend )
                    {
                      v35 = (signed int)((char *)v28 - v29) >> 2;
                      if ( (unsigned int)v35 > 0x3FFFFFFE )
                        goto LABEL_74;
                      v36 = v35 + 1;
                      v37 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v29) >> 2;
                      if ( v36 > (unsigned int)v37 )
                      {
                        if ( 1073741823 - ((unsigned int)v37 >> 1) >= v37 )
                          v38 = ((unsigned int)v37 >> 1) + v37;
                        else
                          v38 = 0;
                        if ( v38 < v36 )
                          v38 = v36;
                        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                          v38);
                        v28 = m_listExcelData.baseclass_0._Mylast;
                      }
                    }
                    if ( v28 )
                      *v28 = (SkillData *)v20;
                  }
                  else
                  {
                    v30 = (signed int)&(&data)[-v29] >> 2;
                    if ( v28 == m_listExcelData.baseclass_0._Myend )
                    {
                      v31 = (signed int)((char *)v28 - v29) >> 2;
                      if ( (unsigned int)v31 > 0x3FFFFFFE )
                        goto LABEL_74;
                      v32 = v31 + 1;
                      v33 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v29) >> 2;
                      if ( v32 > (unsigned int)v33 )
                      {
                        if ( 1073741823 - ((unsigned int)v33 >> 1) >= v33 )
                          v34 = ((unsigned int)v33 >> 1) + v33;
                        else
                          v34 = 0;
                        if ( v34 < v32 )
                          v34 = v32;
                        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                          v34);
                        v28 = m_listExcelData.baseclass_0._Mylast;
                        v29 = *(_DWORD *)&m_listExcelData;
                      }
                    }
                    if ( v28 )
                      *v28 = *(SkillData **)(v29 + 4 * v30);
                  }
                  ++uiTotal;
                  m_listExcelData.baseclass_0._Mylast = v28 + 1;
                }
                else
                {
                  while ( 1 )
                  {
                    v14 = *(const char **)data;
                    if ( *(_DWORD *)(*(_DWORD *)data + 20) < 0x10u )
                      v15 = *(const char **)data;
                    else
                      v15 = *(const char **)v14;
                    v16 = (unsigned __int8)v14[28];
                    v17 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                            &str,
                            &result,
                            0,
                            (unsigned int)(iterCur - 1));
                    if ( v17->baseclass_0._Myres >= 0x10 )
                      v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v17->baseclass_0.___u0.baseclass_0.dummy[0];
                    v18 = strcmp(v15, v17->baseclass_0.___u0.baseclass_0.dummy) == 0;
                    if ( result.baseclass_0._Myres >= 0x10 )
                      operator delete(*(void **)&result);
                    if ( v18 )
                      break;
                    data += 4;
                    if ( data == (char *)m_listExcelData.baseclass_0._Mylast )
                      goto LABEL_21;
                  }
                  v21 = (unsigned int)((char *)iterCur - 3);
                  v22 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                          &str,
                          &result,
                          (unsigned int)((char *)iterCur - 3),
                          2u);
                  if ( v22->baseclass_0._Myres >= 0x10 )
                    v22 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v22->baseclass_0.___u0.baseclass_0.dummy[0];
                  v23 = v16 < atoi(v22->baseclass_0.___u0.baseclass_0.dummy);
                  if ( result.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&result);
                  if ( v23 )
                  {
                    v24 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                            &str,
                            &result,
                            v21,
                            2u);
                    if ( v24->baseclass_0._Myres >= 0x10 )
                      v24 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v24->baseclass_0.___u0.baseclass_0.dummy[0];
                    *(_BYTE *)(*(_DWORD *)data + 28) = atoi(v24->baseclass_0.___u0.baseclass_0.dummy);
                    if ( result.baseclass_0._Myres >= 0x10 )
                      operator delete(*(void **)&result);
                  }
                }
                LOBYTE(v87) = 0;
                if ( str.baseclass_0._Myres >= 0x10 )
                  operator delete(*(void **)&str);
              }
            }
          }
        }
        v4 = i + 1;
        i = v4;
        if ( v4 >= totalNum )
          break;
        v2 = *(void **)&m_listExcelData;
      }
      v39 = *(void **)&m_listExcelData;
      if ( *(SkillData ***)&m_listExcelData != m_listExcelData.baseclass_0._Mylast )
        memmove(*(char **)&m_listExcelData, (char *)m_listExcelData.baseclass_0._Mylast, 0);
      if ( v39 )
      {
        operator delete(v39);
        return uiTotal;
      }
    }
    return uiTotal;
  }
  if ( v1 == 1 )
  {
    *(_DWORD *)&m_listExcelData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    m_listExcelData.baseclass_0._Mylast = 0;
    m_listExcelData.baseclass_0._Myend = 0;
    v87 = 3;
    totalNuma = Skill::GetTotalLearnPassiveSkill();
    ia = 0;
    if ( totalNuma > 0 )
    {
      do
      {
        v41 = Skill::GetLearnPassiveSkillInfo(ia);
        kSkillIDa = v41;
        v42 = PasSkillInfoTab::GetByID(v41);
        v43 = v42->Name;
        v44 = (int)v42->Name;
        v45 = v44 + 1;
        do
          v46 = *(_BYTE *)v44++;
        while ( v46 );
        data = (char *)(v44 - v45);
        str.baseclass_0._Myres = 15;
        str.baseclass_0._Mysize = 0;
        str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&str, v43, strlen(v43));
        v47 = *(_DWORD *)&m_listExcelData;
        LOBYTE(v87) = 4;
        iterCur = *(SkillData ***)&m_listExcelData;
        if ( *(SkillData ***)&m_listExcelData == m_listExcelData.baseclass_0._Mylast )
          goto LABEL_90;
        do
        {
          v48 = *iterCur;
          if ( (*iterCur)->skillName.baseclass_0._Myres < 0x10 )
            v49 = (const char *)*iterCur;
          else
            v49 = *(const char **)&v48->skillName.baseclass_0.___u0.baseclass_0.dummy[0];
          v50 = v48->skillLv;
          v51 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                  &str,
                  &result,
                  0,
                  (unsigned int)(data - 4));
          if ( v51->baseclass_0._Myres >= 0x10 )
            v51 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v51->baseclass_0.___u0.baseclass_0.dummy[0];
          v52 = strcmp(v49, v51->baseclass_0.___u0.baseclass_0.dummy) == 0;
          if ( result.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&result);
          if ( v52 )
          {
            v55 = (unsigned int)(data - 3);
            v56 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                    &str,
                    &result,
                    (unsigned int)(data - 3),
                    2u);
            if ( v56->baseclass_0._Myres >= 0x10 )
              v56 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v56->baseclass_0.___u0.baseclass_0.dummy[0];
            v57 = v50 < atoi(v56->baseclass_0.___u0.baseclass_0.dummy);
            if ( result.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&result);
            if ( v57 )
            {
              v58 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(&str, &result, v55, 2u);
              if ( v58->baseclass_0._Myres >= 0x10 )
                v58 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v58->baseclass_0.___u0.baseclass_0.dummy[0];
              (*iterCur)->skillLv = atoi(v58->baseclass_0.___u0.baseclass_0.dummy);
              if ( result.baseclass_0._Myres >= 0x10 )
                operator delete(*(void **)&result);
            }
            goto LABEL_136;
          }
          ++iterCur;
        }
        while ( iterCur != m_listExcelData.baseclass_0._Mylast );
        v47 = *(_DWORD *)&m_listExcelData;
LABEL_90:
        v53 = operator new(0x20u);
        if ( v53 )
        {
          *((_DWORD *)v53 + 5) = 15;
          *((_DWORD *)v53 + 4) = 0;
          *(_BYTE *)v53 = 0;
          v54 = (SkillData **)v53;
        }
        else
        {
          v54 = 0;
        }
        iterCur = v54;
        v59 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                &str,
                &result,
                0,
                (unsigned int)(data - 4));
        v60 = v59->baseclass_0._Myres < 0x10;
        LOBYTE(v87) = 5;
        if ( v60 )
          v61 = (const char *)v59;
        else
          v61 = *(const char **)&v59->baseclass_0.___u0.baseclass_0.dummy[0];
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v54,
          v61,
          strlen(v61));
        LOBYTE(v87) = 4;
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        v62 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                &str,
                &result,
                (unsigned int)(data - 3),
                2u);
        if ( v62->baseclass_0._Myres >= 0x10 )
          v62 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v62->baseclass_0.___u0.baseclass_0.dummy[0];
        *((_BYTE *)v54 + 28) = atoi(v62->baseclass_0.___u0.baseclass_0.dummy);
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        v63 = m_listExcelData.baseclass_0._Mylast;
        *((_WORD *)v54 + 15) = kSkillIDa;
        if ( (unsigned int)&iterCur >= (unsigned int)v63 || v47 > (unsigned int)&iterCur )
        {
          if ( v63 == m_listExcelData.baseclass_0._Myend )
          {
            v69 = (signed int)((char *)v63 - v47) >> 2;
            if ( (unsigned int)v69 > 0x3FFFFFFE )
LABEL_74:
              std::_Xlength_error("vector<T> too long");
            v70 = v69 + 1;
            v71 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v47) >> 2;
            if ( v70 > (unsigned int)v71 )
            {
              if ( 1073741823 - ((unsigned int)v71 >> 1) >= v71 )
                v72 = ((unsigned int)v71 >> 1) + v71;
              else
                v72 = 0;
              if ( v72 < v70 )
                v72 = v70;
              std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                v72);
              v63 = m_listExcelData.baseclass_0._Mylast;
            }
          }
          if ( v63 )
            *v63 = (SkillData *)v54;
          goto LABEL_135;
        }
        v64 = (signed int)((char *)&iterCur - v47) >> 2;
        if ( v63 != m_listExcelData.baseclass_0._Myend )
          goto LABEL_122;
        v65 = (signed int)((char *)v63 - v47) >> 2;
        if ( (unsigned int)v65 > 0x3FFFFFFE )
          goto LABEL_74;
        v66 = v65 + 1;
        v67 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v47) >> 2;
        if ( v66 > (unsigned int)v67 )
        {
          if ( 1073741823 - ((unsigned int)v67 >> 1) >= v67 )
            v68 = ((unsigned int)v67 >> 1) + v67;
          else
            v68 = 0;
          if ( v68 < v66 )
            v68 = v66;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
            v68);
          v63 = m_listExcelData.baseclass_0._Mylast;
          v47 = *(_DWORD *)&m_listExcelData;
        }
LABEL_122:
        if ( v63 )
          *v63 = *(SkillData **)(v47 + 4 * v64);
LABEL_135:
        ++uiTotal;
        m_listExcelData.baseclass_0._Mylast = v63 + 1;
LABEL_136:
        LOBYTE(v87) = 3;
        if ( str.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&str);
        ++ia;
      }
      while ( ia < totalNuma );
      v73 = *(void **)&m_listExcelData;
      if ( *(SkillData ***)&m_listExcelData != m_listExcelData.baseclass_0._Mylast )
        memmove(*(char **)&m_listExcelData, (char *)m_listExcelData.baseclass_0._Mylast, 0);
      if ( v73 )
      {
        operator delete(v73);
        return uiTotal;
      }
    }
    return uiTotal;
  }
  if ( v1 == 3 )
    return Skill::GetTotalLearnProductSkill();
  return -1;
}
// A85C00: using guessed type int __security_cookie;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (0059B440) --------------------------------------------------------
unsigned int __thiscall SkillWin::GetMaxPageNum(SkillWin *this)
{
  unsigned int v1; // eax@1
  unsigned int result; // eax@2

  v1 = SkillWin::GetLearnSkillNum(this);
  if ( v1 )
    result = ((v1 - 1) >> 3) + 1;
  else
    result = 1;
  return result;
}

//----- (0059B460) --------------------------------------------------------
void __thiscall SkillWin::OnLevelNext(SkillWin *this, unsigned int InvIndex)
{
  SkillWin *v2; // edi@1
  const char *v3; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@2
  char v5; // bl@4
  char curLevel; // [sp+7h] [bp-4Dh]@7
  char maxLevel; // [sp+Bh] [bp-49h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+Ch] [bp-48h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > curLevelStr; // [sp+28h] [bp-2Ch]@2
  unsigned int v10; // [sp+44h] [bp-10h]@1
  int v11; // [sp+50h] [bp-4h]@2
  int v12; // [sp+54h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  maxLevel = this->m_apkInvLevNextBtn[InvIndex]->maxLevel;
  if ( maxLevel )
  {
    v3 = (const char *)((int (__cdecl *)(unsigned int))this->m_apkInvLevWin[InvIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)((unsigned int)&v12 ^ __security_cookie);
    curLevelStr.baseclass_0._Myres = 15;
    curLevelStr.baseclass_0._Mysize = 0;
    curLevelStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&curLevelStr, v3, strlen(v3));
    v11 = 0;
    v4 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(&curLevelStr, &result, 0, 2u);
    if ( v4->baseclass_0._Myres >= 0x10 )
      v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = atoi(v4->baseclass_0.___u0.baseclass_0.dummy);
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
    if ( v5 == maxLevel )
      curLevel = 1;
    else
      curLevel = v5 + 1;
    SkillWin::SetLevel(v2, InvIndex, curLevel);
    if ( curLevelStr.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&curLevelStr);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0059B570) --------------------------------------------------------
void __thiscall SkillWin::OnLevelPre(SkillWin *this, unsigned int InvIndex)
{
  SkillWin *v2; // edi@1
  const char *v3; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@2
  char v5; // bl@4
  char curLevel; // [sp+7h] [bp-4Dh]@7
  char maxLevel; // [sp+Bh] [bp-49h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+Ch] [bp-48h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > curLevelStr; // [sp+28h] [bp-2Ch]@2
  unsigned int v10; // [sp+44h] [bp-10h]@1
  int v11; // [sp+50h] [bp-4h]@2
  int v12; // [sp+54h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  maxLevel = this->m_apkInvLevNextBtn[InvIndex]->maxLevel;
  if ( maxLevel )
  {
    v3 = (const char *)((int (__cdecl *)(unsigned int))this->m_apkInvLevWin[InvIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)((unsigned int)&v12 ^ __security_cookie);
    curLevelStr.baseclass_0._Myres = 15;
    curLevelStr.baseclass_0._Mysize = 0;
    curLevelStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&curLevelStr, v3, strlen(v3));
    v11 = 0;
    v4 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(&curLevelStr, &result, 0, 2u);
    if ( v4->baseclass_0._Myres >= 0x10 )
      v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = atoi(v4->baseclass_0.___u0.baseclass_0.dummy);
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
    if ( v5 == 1 )
      curLevel = maxLevel;
    else
      curLevel = v5 - 1;
    SkillWin::SetLevel(v2, InvIndex, curLevel);
    if ( curLevelStr.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&curLevelStr);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0059B680) --------------------------------------------------------
void __thiscall SkillWin::UpdatePageInfo(SkillWin *this)
{
  SkillWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@2
  char *v3; // eax@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    SkillWin::GetLearnSkillNum(v1);
    v2 = v1->m_pkPageText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v3 = fs("%d / %d");
    v2[118].__vecDelDtor((NiRefObject *)v1->m_pkPageText, (unsigned int)v3);
  }
}

//----- (0059B6E0) --------------------------------------------------------
void __thiscall SkillWin::ResetContents(SkillWin *this)
{
  SkillWin *v1; // edi@1
  char *v2; // esi@2
  signed int v3; // ebx@2
  int v4; // eax@3
  unsigned int v5; // eax@4
  unsigned int v6; // eax@5
  unsigned int v7; // ecx@5
  Skill::LearnSkillInfo *v8; // eax@6
  int v9; // esi@6
  int v10; // edx@6
  int v11; // eax@8
  bool v12; // zf@8
  int v13; // eax@8
  int v14; // eax@9
  const char *v15; // ebx@10
  const char *v16; // eax@11
  const char *v17; // esi@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // eax@14
  bool v19; // bl@16
  void *v20; // eax@21
  int v21; // esi@22
  unsigned int v22; // esi@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v23; // eax@23
  int v24; // eax@25
  bool v25; // bl@25
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v26; // eax@28
  char v27; // al@30
  int v28; // esi@30
  void *v29; // edx@43
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v30; // eax@44
  bool v31; // cf@44
  const char *v32; // edx@45
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v33; // eax@50
  SkillData **v34; // ebx@54
  unsigned int v35; // edx@54
  signed int v36; // esi@56
  int v37; // eax@57
  int v38; // eax@58
  signed int v39; // ecx@58
  unsigned int v40; // ecx@60
  int v41; // eax@68
  int v42; // eax@69
  signed int v43; // ecx@69
  unsigned int v44; // ecx@71
  int v45; // esi@82
  unsigned int v46; // ebx@83
  int v47; // eax@85
  unsigned __int16 v48; // di@96
  unsigned int v49; // esi@96
  void *v50; // eax@101
  void *v51; // edi@101
  const char *v52; // ebx@102
  int v53; // eax@102
  char v54; // cl@103
  int v55; // eax@104
  char v56; // dl@105
  const char *v57; // eax@107
  const char *v58; // esi@108
  int v59; // edi@110
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v60; // eax@110
  bool v61; // bl@112
  void *v62; // eax@117
  void *v63; // esi@118
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v64; // eax@119
  bool v65; // bl@121
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v66; // eax@124
  char v67; // al@126
  unsigned int v68; // esi@126
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v69; // eax@139
  SkillData **v70; // edi@143
  unsigned int v71; // edx@143
  signed int v72; // esi@145
  int v73; // eax@146
  int v74; // eax@147
  signed int v75; // ecx@147
  unsigned int v76; // ecx@149
  int v77; // eax@157
  int v78; // eax@158
  signed int v79; // ecx@158
  unsigned int v80; // ecx@160
  unsigned int v81; // esi@172
  unsigned int v82; // ebx@173
  int v83; // eax@175
  char v84; // al@177
  NiRefObjectVtbl *v85; // ecx@177
  unsigned int v86; // esi@182
  char *v87; // edi@182
  unsigned int v88; // ebx@182
  char *v89; // ecx@184
  int v90; // ebx@188
  int v91; // esi@188
  int v92; // eax@190
  int v93; // ebx@191
  void *v94; // eax@192
  void *v95; // esi@193
  const char *v96; // ecx@195
  int v97; // eax@195
  int v98; // ebx@195
  char v99; // dl@196
  int v100; // edx@199
  unsigned int v101; // eax@199
  __int16 v102; // cx@199
  SkillData **v103; // edx@199
  signed int v104; // esi@201
  int v105; // eax@202
  int v106; // eax@203
  signed int v107; // ecx@203
  unsigned int v108; // ecx@205
  int v109; // eax@213
  int v110; // eax@214
  signed int v111; // ecx@214
  unsigned int v112; // ecx@216
  char *v113; // esi@226
  unsigned int v114; // edi@228
  int v115; // ebx@229
  int v116; // esi@229
  int v117; // eax@231
  int v118; // ebx@232
  void *v119; // eax@233
  unsigned int v120; // esi@234
  const char *v121; // ecx@236
  int v122; // eax@236
  int v123; // ebx@236
  char v124; // dl@237
  int v125; // edx@240
  __int16 v126; // ax@240
  void *v127; // esi@243
  SkillWin *v128; // ebx@249
  int v129; // esi@249
  int v130; // eax@252
  int v131; // eax@256
  ProduceInfo *v132; // eax@260
  signed int v133; // edi@262
  unsigned int v134; // ebx@268
  void *v135; // eax@269
  int v136; // eax@274
  SkillData **v137; // [sp-18h] [bp-BCh]@89
  unsigned int v138; // [sp-14h] [bp-B8h]@89
  void *v139; // [sp-14h] [bp-B8h]@92
  const unsigned __int16 *v140; // [sp-14h] [bp-B8h]@184
  int pkInfo; // [sp+0h] [bp-A4h]@9
  int totalNum; // [sp+4h] [bp-A0h]@10
  unsigned int totalNuma; // [sp+4h] [bp-A0h]@95
  SkillWin *v144; // [sp+8h] [bp-9Ch]@1
  int kSkillID; // [sp+Ch] [bp-98h]@6
  unsigned int i; // [sp+10h] [bp-94h]@5
  unsigned int skillDataBankCount; // [sp+14h] [bp-90h]@4
  unsigned int maxsize; // [sp+18h] [bp-8Ch]@10
  std::vector<SkillData *,std::allocator<SkillData *> > m_listExcelData; // [sp+1Ch] [bp-88h]@5
  unsigned int data; // [sp+2Ch] [bp-78h]@10
  std::vector<unsigned short,std::allocator<unsigned short> > vecTemp1; // [sp+30h] [bp-74h]@10
  char *src; // [sp+40h] [bp-64h]@10
  unsigned int v153; // [sp+44h] [bp-60h]@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4Ch] [bp-58h]@35
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+68h] [bp-3Ch]@14
  char levInfoTxt[6]; // [sp+84h] [bp-20h]@14
  unsigned int kInfo; // [sp+8Ch] [bp-18h]@5
  unsigned int v158; // [sp+94h] [bp-10h]@1
  int v159; // [sp+A0h] [bp-4h]@5
  int v160; // [sp+A4h] [bp+0h]@1

  v158 = (unsigned int)&v160 ^ __security_cookie;
  v1 = this;
  v144 = this;
  if ( this->m_apkInvWin[0] )
  {
    v2 = (char *)this->m_apkInvTextWin;
    v3 = 8;
    do
    {
      SkillInvWin::SetSkill(*((SkillInvWin **)v2 - 8), 0xFFFFu, 0);
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v2 + 472))(&unk_9ACDD2);
      (*(void (__stdcall **)(_UNKNOWN *))(**((_DWORD **)v2 + 8) + 472))(&unk_9ACDD3);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 16) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 24) + 256))(0);
      *(_BYTE *)(*((_DWORD *)v2 + 16) + 328) = 0;
      v4 = *((_DWORD *)v2 + 24);
      v2 += 4;
      --v3;
      *(_BYTE *)(v4 + 328) = 0;
    }
    while ( v3 );
    v5 = v1->m_uiCurPageType;
    skillDataBankCount = 0;
    if ( !v5 )
    {
      *(_DWORD *)&m_listExcelData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      m_listExcelData.baseclass_0._Mylast = 0;
      m_listExcelData.baseclass_0._Myend = 0;
      v159 = 0;
      v6 = Skill::GetTotalLearnActSkill();
      v7 = 0;
      kInfo = v6;
      for ( i = 0; v7 < kInfo; i = v7 )
      {
        v8 = Skill::GetLearnActSkillInfo(v7);
        v9 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
        v10 = *(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
        kSkillID = v8->kSkillID;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v10 + 16))(
                                ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                                kSkillID) )
        {
          if ( (unsigned __int16)kSkillID <= *(_WORD *)(v9 + 200) )
          {
            v11 = *(_DWORD *)(v9 + 196);
            v12 = *(_DWORD *)(v11 + 4 * (unsigned __int16)kSkillID) == 0;
            v13 = v11 + 4 * (unsigned __int16)kSkillID;
            if ( !v12 )
            {
              v14 = *(_DWORD *)v13;
              pkInfo = v14;
              if ( v14 )
              {
                v15 = (const char *)(v14 + 34);
                totalNum = v14 + 34;
                data = strlen((const char *)(v14 + 34));
                vecTemp1.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                v153 = 15;
                src = 0;
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                  v15,
                  strlen(v15));
                LOBYTE(v159) = 1;
                maxsize = *(_DWORD *)&m_listExcelData;
                if ( *(SkillData ***)&m_listExcelData == m_listExcelData.baseclass_0._Mylast )
                  goto LABEL_21;
                do
                {
                  v16 = *(const char **)maxsize;
                  if ( *(_DWORD *)(*(_DWORD *)maxsize + 20) < 0x10u )
                    v17 = *(const char **)maxsize;
                  else
                    v17 = *(const char **)v16;
                  *(_DWORD *)levInfoTxt = (unsigned __int8)v16[28];
                  v18 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                          &result,
                          0,
                          data - 4);
                  if ( v18->baseclass_0._Myres >= 0x10 )
                    v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v18->baseclass_0.___u0.baseclass_0.dummy[0];
                  v19 = strcmp(v17, v18->baseclass_0.___u0.baseclass_0.dummy) == 0;
                  if ( result.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&result);
                  if ( v19 )
                  {
                    v22 = data - 3;
                    v23 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                            &result,
                            data - 3,
                            2u);
                    if ( v23->baseclass_0._Myres >= 0x10 )
                      v23 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v23->baseclass_0.___u0.baseclass_0.dummy[0];
                    v24 = atoi(v23->baseclass_0.___u0.baseclass_0.dummy);
                    v25 = *(_DWORD *)levInfoTxt < v24;
                    if ( result.baseclass_0._Myres >= 0x10 )
                      operator delete(*(void **)&result);
                    if ( v25 )
                    {
                      v26 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                              &result,
                              v22,
                              2u);
                      if ( v26->baseclass_0._Myres >= 0x10 )
                        v26 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v26->baseclass_0.___u0.baseclass_0.dummy[0];
                      v27 = atoi(v26->baseclass_0.___u0.baseclass_0.dummy);
                      v28 = maxsize;
                      *(_BYTE *)(*(_DWORD *)maxsize + 28) = v27;
                      if ( result.baseclass_0._Myres >= 0x10 )
                        operator delete(*(void **)&result);
                      *(_WORD *)(*(_DWORD *)v28 + 30) = kSkillID;
                    }
                    goto LABEL_79;
                  }
                  maxsize += 4;
                }
                while ( (SkillData **)maxsize != m_listExcelData.baseclass_0._Mylast );
                v15 = (const char *)totalNum;
LABEL_21:
                v20 = operator new(0x20u);
                if ( v20 )
                {
                  *((_DWORD *)v20 + 5) = 15;
                  *((_DWORD *)v20 + 4) = 0;
                  *(_BYTE *)v20 = 0;
                  v21 = (int)v20;
                }
                else
                {
                  v21 = 0;
                }
                maxsize = v21;
                if ( strcmp((const char *)(pkInfo + 2), "SummonMate01") )
                {
                  v30 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                          &result,
                          0,
                          data - 4);
                  v31 = v30->baseclass_0._Myres < 0x10;
                  LOBYTE(v159) = 3;
                  if ( v31 )
                    v32 = (const char *)v30;
                  else
                    v32 = *(const char **)&v30->baseclass_0.___u0.baseclass_0.dummy[0];
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v21,
                    v32,
                    strlen(v32));
                  LOBYTE(v159) = 1;
                  if ( result.baseclass_0._Myres >= 0x10 )
                  {
                    v29 = *(void **)&result;
LABEL_49:
                    operator delete(v29);
                  }
                }
                else
                {
                  thisa.baseclass_0._Mysize = 0;
                  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                  thisa.baseclass_0._Myres = 15;
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v15, strlen(v15));
                  if ( (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v21 != &thisa )
                  {
                    if ( *(_DWORD *)(v21 + 20) >= 0x10u )
                      operator delete(*(void **)v21);
                    *(_DWORD *)(v21 + 20) = 15;
                    *(_DWORD *)(v21 + 16) = 0;
                    *(_BYTE *)v21 = 0;
                    if ( thisa.baseclass_0._Myres >= 0x10 )
                    {
                      *(_DWORD *)v21 = *(_DWORD *)&thisa;
                      *(_DWORD *)&thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                    }
                    else
                    {
                      memmove((char *)v21, thisa.baseclass_0.___u0.baseclass_0.dummy, thisa.baseclass_0._Mysize + 1);
                    }
                    *(_DWORD *)(v21 + 16) = thisa.baseclass_0._Mysize;
                    *(_DWORD *)(v21 + 20) = thisa.baseclass_0._Myres;
                    thisa.baseclass_0._Myres = 15;
                    thisa.baseclass_0._Mysize = 0;
                    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                  }
                  LOBYTE(v159) = 1;
                  if ( thisa.baseclass_0._Myres >= 0x10 )
                  {
                    v29 = *(void **)&thisa;
                    goto LABEL_49;
                  }
                }
                v33 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                        &result,
                        data - 3,
                        2u);
                if ( v33->baseclass_0._Myres >= 0x10 )
                  v33 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v33->baseclass_0.___u0.baseclass_0.dummy[0];
                *(_BYTE *)(v21 + 28) = atoi(v33->baseclass_0.___u0.baseclass_0.dummy);
                if ( result.baseclass_0._Myres >= 0x10 )
                  operator delete(*(void **)&result);
                v34 = m_listExcelData.baseclass_0._Mylast;
                v35 = *(_DWORD *)&m_listExcelData;
                *(_WORD *)(v21 + 30) = kSkillID;
                if ( (unsigned int)&maxsize >= (unsigned int)v34 || v35 > (unsigned int)&maxsize )
                {
                  if ( v34 != m_listExcelData.baseclass_0._Myend )
                  {
LABEL_76:
                    if ( v34 )
                      *v34 = (SkillData *)v21;
                    goto LABEL_78;
                  }
                  v41 = (signed int)((char *)v34 - v35) >> 2;
                  if ( (unsigned int)v41 <= 0x3FFFFFFE )
                  {
                    v42 = v41 + 1;
                    v43 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v35) >> 2;
                    if ( v42 > (unsigned int)v43 )
                    {
                      if ( 1073741823 - ((unsigned int)v43 >> 1) >= v43 )
                        v44 = ((unsigned int)v43 >> 1) + v43;
                      else
                        v44 = 0;
                      if ( v44 < v42 )
                        v44 = v42;
                      std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                        (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                        v44);
                      v34 = m_listExcelData.baseclass_0._Mylast;
                    }
                    goto LABEL_76;
                  }
LABEL_93:
                  std::_Xlength_error("vector<T> too long");
                }
                v36 = (signed int)((char *)&maxsize - v35) >> 2;
                if ( v34 != m_listExcelData.baseclass_0._Myend )
                  goto LABEL_65;
                v37 = (signed int)((char *)v34 - v35) >> 2;
                if ( (unsigned int)v37 > 0x3FFFFFFE )
                  goto LABEL_93;
                v38 = v37 + 1;
                v39 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v35) >> 2;
                if ( v38 > (unsigned int)v39 )
                {
                  if ( 1073741823 - ((unsigned int)v39 >> 1) >= v39 )
                    v40 = ((unsigned int)v39 >> 1) + v39;
                  else
                    v40 = 0;
                  if ( v40 < v38 )
                    v40 = v38;
                  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                    v40);
                  v34 = m_listExcelData.baseclass_0._Mylast;
                  v35 = *(_DWORD *)&m_listExcelData;
                }
LABEL_65:
                if ( v34 )
                  *v34 = *(SkillData **)(v35 + 4 * v36);
LABEL_78:
                ++skillDataBankCount;
                m_listExcelData.baseclass_0._Mylast = v34 + 1;
LABEL_79:
                LOBYTE(v159) = 0;
                if ( v153 >= 0x10 )
                  operator delete(*(void **)&vecTemp1);
              }
            }
          }
        }
        v7 = i + 1;
      }
      v45 = 8 * v1->m_uiCurPage;
      if ( v45 < skillDataBankCount )
      {
        v46 = 0;
        do
        {
          if ( v46 >= 8 )
            break;
          SkillInvWin::SetSkill(
            (SkillInvWin *)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v45 + 8 * (11 - v1->m_uiCurPage)],
            *(_WORD *)(*(_DWORD *)(*(_DWORD *)&m_listExcelData + 4 * v45) + 30),
            0);
          v47 = *(_DWORD *)(*(_DWORD *)&m_listExcelData + 4 * v45);
          if ( *(_DWORD *)(v47 + 20) >= 0x10u )
            v47 = *(_DWORD *)v47;
          (*((void (__stdcall **)(_DWORD))(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v45 + 8 * (12 - v1->m_uiCurPage)]->__vecDelDtor
           + 118))(v47);
          Skill::GetAccumulatedEmpowerInfo(
            (Skill::EmpowerInfo *)&kInfo,
            *(_WORD *)(*(_DWORD *)(*(_DWORD *)&m_listExcelData + 4 * v45) + 30));
          SkillIcon::SetEmpowerInfo(
            (SkillIcon *)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v45 + 8 * (11 - v1->m_uiCurPage)],
            (Skill::EmpowerInfo)kInfo);
          sprintf(levInfoTxt, "%02d/%02d");
          (*((void (__stdcall **)(_DWORD))(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v45 + 8 * (13 - v1->m_uiCurPage)]->__vecDelDtor
           + 118))(levInfoTxt);
          LOBYTE((&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v45 + 8 * (14 - v1->m_uiCurPage)][82].__vecDelDtor) = *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&m_listExcelData + 4 * v45) + 28);
          (*((void (__stdcall **)(_DWORD))(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v45 + 8 * (14 - v1->m_uiCurPage)]->__vecDelDtor
           + 64))(1);
          (*((void (__stdcall **)(_DWORD))(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v45++ + 8 * (15 - v1->m_uiCurPage)]->__vecDelDtor
           + 64))(1);
          ++v46;
        }
        while ( v45 < skillDataBankCount );
      }
      if ( *(SkillData ***)&m_listExcelData == m_listExcelData.baseclass_0._Mylast )
        goto LABEL_91;
      v138 = 0;
      v137 = m_listExcelData.baseclass_0._Mylast;
      goto LABEL_90;
    }
    if ( v5 != 1 )
    {
      if ( v5 == 2 || v5 != 3 )
        goto LABEL_283;
      v86 = 0;
      v87 = 0;
      *(_DWORD *)&m_listExcelData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      m_listExcelData.baseclass_0._Mylast = 0;
      m_listExcelData.baseclass_0._Myend = 0;
      v159 = 8;
      v88 = Skill::GetTotalLearnProductSkill();
      *(_DWORD *)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
      src = 0;
      v153 = 0;
      *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] = 0;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0._Myres = 0;
      LOBYTE(v159) = 10;
      if ( v88 )
      {
        do
        {
          kSkillID = Skill::GetLearnProductSkill(v86)->kSkillID;
          if ( Skill::IsProduceBaseSkill(kSkillID) )
          {
            v140 = (const unsigned __int16 *)&kSkillID;
            v89 = (char *)&vecTemp1.baseclass_0._Alval;
          }
          else
          {
            v140 = (const unsigned __int16 *)&kSkillID;
            v89 = &thisa.baseclass_0.___u0._Bx._Buf[12];
          }
          std::vector<unsigned_short_std::allocator<unsigned_short>>::push_back(
            (std::vector<unsigned short,std::allocator<unsigned short> > *)v89,
            v140);
          ++v86;
        }
        while ( v86 < v88 );
      }
      i = 0;
      maxsize = (signed int)&src[-*(_DWORD *)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0]] >> 1;
      if ( (signed int)&src[-*(_DWORD *)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0]] >> 1 )
      {
        do
        {
          v90 = *(_WORD *)(*(_DWORD *)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0] + 2 * i);
          v91 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
          if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                                   + 16))(
                                  ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                                  *(_WORD *)(*(_DWORD *)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0] + 2 * i)) )
          {
            if ( (unsigned __int16)v90 <= *(_WORD *)(v91 + 200) )
            {
              v92 = *(_DWORD *)(v91 + 196) + 4 * v90;
              if ( *(_DWORD *)v92 )
              {
                v93 = *(_DWORD *)v92;
                if ( *(_DWORD *)v92 )
                {
                  v94 = operator new(0x20u);
                  if ( v94 )
                  {
                    *((_DWORD *)v94 + 5) = 15;
                    *((_DWORD *)v94 + 4) = 0;
                    *(_BYTE *)v94 = 0;
                    v95 = v94;
                  }
                  else
                  {
                    v95 = 0;
                  }
                  v96 = (const char *)(v93 + 34);
                  v97 = v93 + 34;
                  data = (unsigned int)v95;
                  result.baseclass_0._Myres = 15;
                  result.baseclass_0._Mysize = 0;
                  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                  v98 = v93 + 35;
                  do
                    v99 = *(_BYTE *)v97++;
                  while ( v99 );
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&result, v96, v97 - v98);
                  LOBYTE(v159) = 11;
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v95,
                    &result);
                  LOBYTE(v159) = 10;
                  if ( result.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&result);
                  v100 = *(_DWORD *)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0];
                  v101 = i;
                  *((_BYTE *)v95 + 28) = 0;
                  v102 = *(_WORD *)(v100 + 2 * v101);
                  v103 = m_listExcelData.baseclass_0._Mylast;
                  *((_WORD *)v95 + 15) = v102;
                  if ( (unsigned int)&data >= (unsigned int)v103 || (unsigned int)v87 > (unsigned int)&data )
                  {
                    if ( v103 == m_listExcelData.baseclass_0._Myend )
                    {
                      v109 = (signed int)((char *)v103 - v87) >> 2;
                      if ( (unsigned int)v109 > 0x3FFFFFFE )
                        goto LABEL_93;
                      v110 = v109 + 1;
                      v111 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v87) >> 2;
                      if ( v110 > (unsigned int)v111 )
                      {
                        if ( 1073741823 - ((unsigned int)v111 >> 1) >= v111 )
                          v112 = ((unsigned int)v111 >> 1) + v111;
                        else
                          v112 = 0;
                        if ( v112 < v110 )
                          v112 = v110;
                        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                          v112);
                        v103 = m_listExcelData.baseclass_0._Mylast;
                        v87 = *(char **)&m_listExcelData;
                      }
                    }
                    if ( v103 )
                      *v103 = (SkillData *)v95;
                  }
                  else
                  {
                    v104 = (signed int)((char *)&data - v87) >> 2;
                    if ( v103 == m_listExcelData.baseclass_0._Myend )
                    {
                      v105 = (signed int)((char *)v103 - v87) >> 2;
                      if ( (unsigned int)v105 > 0x3FFFFFFE )
                        goto LABEL_93;
                      v106 = v105 + 1;
                      v107 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v87) >> 2;
                      if ( v106 > (unsigned int)v107 )
                      {
                        if ( 1073741823 - ((unsigned int)v107 >> 1) >= v107 )
                          v108 = ((unsigned int)v107 >> 1) + v107;
                        else
                          v108 = 0;
                        if ( v108 < v106 )
                          v108 = v106;
                        std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                          (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                          v108);
                        v103 = m_listExcelData.baseclass_0._Mylast;
                        v87 = *(char **)&m_listExcelData;
                      }
                    }
                    if ( v103 )
                      *v103 = *(SkillData **)&v87[4 * v104];
                  }
                  ++skillDataBankCount;
                  m_listExcelData.baseclass_0._Mylast = v103 + 1;
                }
              }
            }
          }
          ++i;
        }
        while ( i < maxsize );
      }
      if ( *(char **)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0] != src )
      {
        v113 = *(char **)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0];
        memmove(*(char **)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0], src, 0);
        src = v113;
      }
      i = 0;
      maxsize = (signed int)(thisa.baseclass_0._Mysize - *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12]) >> 1;
      if ( (signed int)(thisa.baseclass_0._Mysize - *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12]) >> 1 )
      {
        v114 = i;
        do
        {
          v115 = *(_WORD *)(*(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] + 2 * v114);
          v116 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
          if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                                   + 16))(
                                  ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                                  *(_WORD *)(*(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] + 2 * v114)) )
          {
            if ( (unsigned __int16)v115 <= *(_WORD *)(v116 + 200) )
            {
              v117 = *(_DWORD *)(v116 + 196) + 4 * v115;
              if ( *(_DWORD *)v117 )
              {
                v118 = *(_DWORD *)v117;
                if ( *(_DWORD *)v117 )
                {
                  v119 = operator new(0x20u);
                  if ( v119 )
                  {
                    *((_DWORD *)v119 + 5) = 15;
                    *((_DWORD *)v119 + 4) = 0;
                    *(_BYTE *)v119 = 0;
                    v120 = (unsigned int)v119;
                  }
                  else
                  {
                    v120 = 0;
                  }
                  v121 = (const char *)(v118 + 34);
                  v122 = v118 + 34;
                  kInfo = v120;
                  result.baseclass_0._Myres = 15;
                  result.baseclass_0._Mysize = 0;
                  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                  v123 = v118 + 35;
                  do
                    v124 = *(_BYTE *)v122++;
                  while ( v124 );
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                    &result,
                    v121,
                    v122 - v123);
                  LOBYTE(v159) = 12;
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v120,
                    &result);
                  LOBYTE(v159) = 10;
                  if ( result.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&result);
                  v125 = *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12];
                  *(_BYTE *)(v120 + 28) = 0;
                  v126 = *(_WORD *)(v125 + 2 * v114);
                  result.baseclass_0._Myres = 15;
                  result.baseclass_0._Mysize = 0;
                  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                  *(_WORD *)(v120 + 30) = v126;
                  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                    (std::vector<unsigned long,std::allocator<unsigned long> > *)&m_listExcelData,
                    &kInfo);
                  ++skillDataBankCount;
                }
              }
            }
          }
          ++v114;
        }
        while ( v114 < maxsize );
        v87 = *(char **)&m_listExcelData;
      }
      v127 = *(void **)&thisa.baseclass_0.___u0._Bx._Buf[12];
      if ( *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] != thisa.baseclass_0._Mysize )
        memmove(*(char **)&thisa.baseclass_0.___u0._Bx._Buf[12], (char *)thisa.baseclass_0._Mysize, 0);
      if ( v127 )
        operator delete(v127);
      LOBYTE(v159) = 8;
      if ( *(_DWORD *)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0] )
        operator delete(*(void **)&vecTemp1.baseclass_0._Alval.baseclass_0.dummy[0]);
      v128 = v144;
      v129 = 8 * v144->m_uiCurPage;
      if ( v129 < skillDataBankCount )
      {
        data = 0;
        do
        {
          if ( data >= 8 )
            break;
          SkillInvWin::SetSkill(
            (SkillInvWin *)(&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v129 + 8 * (11 - v128->m_uiCurPage)],
            *(_WORD *)(*(_DWORD *)&v87[4 * v129] + 30),
            0);
          v12 = Skill::IsProduceBaseSkill(*(_WORD *)(*(_DWORD *)&v87[4 * v129] + 30)) == 0;
          v130 = *(_DWORD *)&v87[4 * v129];
          if ( v12 )
          {
            v12 = Skill::IsGatherSkill(*(_WORD *)(v130 + 30)) == 0;
            v131 = *(_DWORD *)&v87[4 * v129];
            if ( v12 )
            {
              v132 = ProduceInfoTable::GetByID(*(_WORD *)(v131 + 30));
              if ( v132 )
              {
                switch ( v132->MasteryType )
                {
                  case 2:
                    v133 = 2;
                    break;
                  case 0:
                    v133 = 0;
                    break;
                  case 3:
                    v133 = 3;
                    break;
                  case 4:
                    v133 = 4;
                    break;
                  case 5:
                    v133 = 5;
                    break;
                  default:
                    v133 = 1;
                    break;
                }
                v134 = 0;
                if ( ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
                {
                  while ( 1 )
                  {
                    v135 = CDataReader::GetRecord(
                             (CDataReader *)(ITableBase<ProduceViewInfo_ProduceViewInfoTable>::ms_pkTable + 4),
                             v134);
                    if ( *(_DWORD *)((char *)v135 + 134) == v133 )
                      break;
                    ++v134;
                    if ( v134 >= ITableBase<ProduceViewInfo_ProduceViewInfoTable>::GetTotal() )
                      goto LABEL_273;
                  }
                  (*(void (__stdcall **)(char *))((void (__stdcall **)(_DWORD))(&v144->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v129 + 8 * (12 - v144->m_uiCurPage)]->__vecDelDtor
                                                + 118))((char *)v135 + 34);
                }
LABEL_273:
                v87 = *(char **)&m_listExcelData;
              }
              v136 = *(_DWORD *)&v87[4 * v129];
              if ( *(_DWORD *)(v136 + 20) >= 0x10u )
                v136 = *(_DWORD *)v136;
              (*((void (__stdcall **)(_DWORD))(&v144->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v129 + 8 * (12 - v144->m_uiCurPage)]->__vecDelDtor
               + 118))(v136);
              v128 = v144;
            }
            else
            {
              if ( *(_DWORD *)(v131 + 20) >= 0x10u )
                v131 = *(_DWORD *)v131;
              (*((void (__stdcall **)(_DWORD))(&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v129 + 8 * (12 - v128->m_uiCurPage)]->__vecDelDtor
               + 118))(v131);
              (*(void (__stdcall **)(_UNKNOWN *))((void (__stdcall **)(_DWORD))(&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v129 + 8 * (13 - v128->m_uiCurPage)]->__vecDelDtor
                                                + 118))(&unk_9ACDDE);
            }
          }
          else
          {
            if ( *(_DWORD *)(v130 + 20) >= 0x10u )
              v130 = *(_DWORD *)v130;
            (*((void (__stdcall **)(_DWORD))(&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v129 + 8 * (12 - v128->m_uiCurPage)]->__vecDelDtor
             + 118))(v130);
            (*(void (__stdcall **)(_UNKNOWN *))((void (__stdcall **)(_DWORD))(&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v129 + 8 * (13 - v128->m_uiCurPage)]->__vecDelDtor
                                              + 118))(&unk_9ACDDD);
          }
          ++data;
          ++v129;
        }
        while ( v129 < skillDataBankCount );
      }
      if ( v87 != (char *)m_listExcelData.baseclass_0._Mylast )
        memmove(v87, (char *)m_listExcelData.baseclass_0._Mylast, 0);
      v159 = -1;
      if ( !v87 )
        goto LABEL_283;
      v139 = v87;
      goto LABEL_282;
    }
    *(_DWORD *)&m_listExcelData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    m_listExcelData.baseclass_0._Mylast = 0;
    m_listExcelData.baseclass_0._Myend = 0;
    v159 = 4;
    totalNuma = Skill::GetTotalLearnPassiveSkill();
    i = 0;
    if ( totalNuma <= 0 )
    {
LABEL_172:
      v81 = 8 * v144->m_uiCurPage;
      if ( v81 < skillDataBankCount )
      {
        v82 = 0;
        do
        {
          if ( v82 >= 8 )
            break;
          Skill::GetLearnPassiveSkillInfo(v81);
          SkillInvWin::SetSkill(
            (SkillInvWin *)(&v144->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v81 + 8 * (11 - v144->m_uiCurPage)],
            *(_WORD *)(*(_DWORD *)(*(_DWORD *)&m_listExcelData + 4 * v81) + 30),
            1u);
          v83 = *(_DWORD *)(*(_DWORD *)&m_listExcelData + 4 * v81);
          if ( *(_DWORD *)(v83 + 20) >= 0x10u )
            v83 = *(_DWORD *)v83;
          (*((void (__stdcall **)(_DWORD))(&v144->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v81 + 8 * (12 - v144->m_uiCurPage)]->__vecDelDtor
           + 118))(v83);
          sprintf((char *)&kInfo, "%02d");
          (*(void (__stdcall **)(unsigned int *))((void (__stdcall **)(_DWORD))(&v144->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v81 + 8 * (13 - v144->m_uiCurPage)]->__vecDelDtor
                                                + 118))(&kInfo);
          v84 = *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&m_listExcelData + 4 * v81) + 28);
          ++v82;
          v85 = (&v144->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v81++ + 8 * (14 - v144->m_uiCurPage)];
          LOBYTE(v85[82].__vecDelDtor) = v84;
        }
        while ( v81 < skillDataBankCount );
      }
      if ( *(SkillData ***)&m_listExcelData == m_listExcelData.baseclass_0._Mylast )
        goto LABEL_91;
      v138 = 0;
      v137 = m_listExcelData.baseclass_0._Mylast;
LABEL_90:
      memmove(*(char **)&m_listExcelData, (char *)v137, v138);
LABEL_91:
      v159 = -1;
      if ( !*(_DWORD *)&m_listExcelData )
      {
LABEL_283:
        SkillWin::UpdatePageInfo(v144);
        return;
      }
      v139 = *(void **)&m_listExcelData;
LABEL_282:
      operator delete(v139);
      goto LABEL_283;
    }
    while ( 1 )
    {
      v48 = Skill::GetLearnPassiveSkillInfo(i);
      kSkillID = v48;
      v49 = 0;
      if ( !ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
        break;
      while ( *(_WORD *)CDataReader::GetRecord(
                          (CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4),
                          v49) != v48 )
      {
        ++v49;
        if ( v49 >= ITableBase<PassiveSkillInfo_PasSkillInfoTab>::GetTotal() )
          goto LABEL_99;
      }
      v50 = CDataReader::GetRecord((CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4), v49);
      v51 = v50;
      kInfo = (unsigned int)v50;
      if ( v50 == (void *)v3 )
        break;
      v52 = (char *)v50 + 34;
      v53 = (int)((char *)v50 + 34);
      *(_DWORD *)levInfoTxt = (char *)v51 + 34;
      do
        v54 = *(_BYTE *)v53++;
      while ( v54 );
      maxsize = v53 - (_DWORD)((char *)v51 + 35);
      v55 = (int)((char *)v51 + 34);
      vecTemp1.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v153 = 15;
      src = 0;
      do
        v56 = *(_BYTE *)v55++;
      while ( v56 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
        (const char *)v51 + 34,
        v55 - (_DWORD)((char *)v51 + 35));
      LOBYTE(v159) = 5;
      data = *(_DWORD *)&m_listExcelData;
      if ( *(SkillData ***)&m_listExcelData == m_listExcelData.baseclass_0._Mylast )
      {
LABEL_117:
        v62 = operator new(0x20u);
        if ( v62 )
        {
          *((_DWORD *)v62 + 5) = 15;
          *((_DWORD *)v62 + 4) = 0;
          *(_BYTE *)v62 = 0;
          v63 = v62;
        }
        else
        {
          v63 = 0;
        }
        data = (unsigned int)v63;
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v52, strlen(v52));
        if ( v63 != &thisa )
        {
          if ( *((_DWORD *)v63 + 5) >= 0x10u )
            operator delete(*(void **)v63);
          *((_DWORD *)v63 + 5) = 15;
          *((_DWORD *)v63 + 4) = 0;
          *(_BYTE *)v63 = 0;
          if ( thisa.baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)v63 = *(_DWORD *)&thisa;
            *(_DWORD *)&thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove((char *)v63, thisa.baseclass_0.___u0.baseclass_0.dummy, thisa.baseclass_0._Mysize + 1);
          }
          *((_DWORD *)v63 + 4) = thisa.baseclass_0._Mysize;
          *((_DWORD *)v63 + 5) = thisa.baseclass_0._Myres;
          thisa.baseclass_0._Myres = 15;
          thisa.baseclass_0._Mysize = 0;
          thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        LOBYTE(v159) = 5;
        if ( thisa.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&thisa);
        v69 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                &result,
                maxsize - 3,
                2u);
        if ( v69->baseclass_0._Myres >= 0x10 )
          v69 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v69->baseclass_0.___u0.baseclass_0.dummy[0];
        *((_BYTE *)v63 + 28) = atoi(v69->baseclass_0.___u0.baseclass_0.dummy);
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        v70 = m_listExcelData.baseclass_0._Mylast;
        v71 = *(_DWORD *)&m_listExcelData;
        *((_WORD *)v63 + 15) = kSkillID;
        if ( (unsigned int)&data >= (unsigned int)v70 || v71 > (unsigned int)&data )
        {
          if ( v70 == m_listExcelData.baseclass_0._Myend )
          {
            v77 = (signed int)((char *)v70 - v71) >> 2;
            if ( (unsigned int)v77 > 0x3FFFFFFE )
              goto LABEL_93;
            v78 = v77 + 1;
            v79 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v71) >> 2;
            if ( v78 > (unsigned int)v79 )
            {
              if ( 1073741823 - ((unsigned int)v79 >> 1) >= v79 )
                v80 = ((unsigned int)v79 >> 1) + v79;
              else
                v80 = 0;
              if ( v80 < v78 )
                v80 = v78;
              std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                v80);
              v70 = m_listExcelData.baseclass_0._Mylast;
            }
          }
          if ( v70 )
            *v70 = (SkillData *)v63;
        }
        else
        {
          v72 = (signed int)((char *)&data - v71) >> 2;
          if ( v70 == m_listExcelData.baseclass_0._Myend )
          {
            v73 = (signed int)((char *)v70 - v71) >> 2;
            if ( (unsigned int)v73 > 0x3FFFFFFE )
              goto LABEL_93;
            v74 = v73 + 1;
            v75 = (signed int)((char *)m_listExcelData.baseclass_0._Myend - v71) >> 2;
            if ( v74 > (unsigned int)v75 )
            {
              if ( 1073741823 - ((unsigned int)v75 >> 1) >= v75 )
                v76 = ((unsigned int)v75 >> 1) + v75;
              else
                v76 = 0;
              if ( v76 < v74 )
                v76 = v74;
              std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&m_listExcelData,
                v76);
              v70 = m_listExcelData.baseclass_0._Mylast;
              v71 = *(_DWORD *)&m_listExcelData;
            }
          }
          if ( v70 )
            *v70 = *(SkillData **)(v71 + 4 * v72);
        }
        ++skillDataBankCount;
        m_listExcelData.baseclass_0._Mylast = v70 + 1;
      }
      else
      {
        while ( 1 )
        {
          v57 = *(const char **)data;
          if ( *(_DWORD *)(*(_DWORD *)data + 20) < 0x10u )
            v58 = *(const char **)data;
          else
            v58 = *(const char **)v57;
          v59 = (unsigned __int8)v57[28];
          v60 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                  &result,
                  0,
                  maxsize - 4);
          if ( v60->baseclass_0._Myres >= 0x10 )
            v60 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v60->baseclass_0.___u0.baseclass_0.dummy[0];
          v61 = strcmp(v58, v60->baseclass_0.___u0.baseclass_0.dummy) == 0;
          if ( result.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&result);
          if ( v61 )
            break;
          data += 4;
          if ( (SkillData **)data == m_listExcelData.baseclass_0._Mylast )
          {
            v52 = *(const char **)levInfoTxt;
            goto LABEL_117;
          }
        }
        v64 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                &result,
                maxsize - 3,
                2u);
        if ( v64->baseclass_0._Myres >= 0x10 )
          v64 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v64->baseclass_0.___u0.baseclass_0.dummy[0];
        v65 = v59 < atoi(v64->baseclass_0.___u0.baseclass_0.dummy);
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        if ( v65 )
        {
          v66 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::substr(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&vecTemp1,
                  &result,
                  maxsize - 3,
                  2u);
          if ( v66->baseclass_0._Myres >= 0x10 )
            v66 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v66->baseclass_0.___u0.baseclass_0.dummy[0];
          v67 = atoi(v66->baseclass_0.___u0.baseclass_0.dummy);
          v68 = data;
          *(_BYTE *)(*(_DWORD *)data + 28) = v67;
          if ( result.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&result);
          *(_WORD *)(*(_DWORD *)v68 + 30) = kSkillID;
        }
      }
      LOBYTE(v159) = 4;
      if ( v153 >= 0x10 )
        operator delete(*(void **)&vecTemp1);
      ++i;
      if ( i >= totalNuma )
        goto LABEL_172;
      v3 = 0;
    }
LABEL_99:
    if ( *(_DWORD *)&m_listExcelData != v3 )
      operator delete(*(void **)&m_listExcelData);
  }
}
// A85C00: using guessed type int __security_cookie;
// A97E34: using guessed type int ITableBase_ProduceViewInfo_ProduceViewInfoTable___ms_pkTable;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// A98774: using guessed type int ITableBase_PassiveSkillInfo_PasSkillInfoTab___ms_pkTable;

//----- (0059CAC0) --------------------------------------------------------
void __thiscall SkillWin::OnShowWin(SkillWin *this)
{
  SkillWin *v1; // esi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  SkillWin::UpdatePageInfo(v1);
}

//----- (0059CAD0) --------------------------------------------------------
void __thiscall SkillWin::ResetPage(SkillWin *this)
{
  this->m_uiCurPage = 0;
  this->m_uiCurPageType = 0;
  SkillWin::ResetContents(this);
}

//----- (0059CAF0) --------------------------------------------------------
void __thiscall SkillWin::OnActiveSkill(SkillWin *this)
{
  SkillWin *v1; // esi@1
  int v2; // edi@1
  signed int v3; // ebx@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkEmpowerDescSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 0;
  SkillWin::ResetContents(v1);
  v2 = (int)v1->m_apkEmpowerWin;
  v3 = 8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(1);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerNotice->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (0059CBA0) --------------------------------------------------------
void __thiscall SkillWin::OnPasssiveSkill(SkillWin *this)
{
  SkillWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkEmpowerDescSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 1;
  SkillWin::ResetContents(v1);
  SkillWin::OnEmpowerWinShow(v1, 0);
}

//----- (0059CC30) --------------------------------------------------------
void __thiscall SkillWin::OnProductSkill(SkillWin *this)
{
  SkillWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkSkillEmpowerPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiPointText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerAntiTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSkillEmpowerTitleText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkEmpowerDescSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  if ( Skill::GetCountOfILearnAnyProdBaseSkill() < 2 )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkProductSkillSelectWin->baseclass_0.baseclass_0.baseclass_0);
  v1->m_uiCurPage = 0;
  v1->m_uiCurPageType = 3;
  SkillWin::ResetContents(v1);
  SkillWin::OnEmpowerWinShow(v1, 0);
}

//----- (0059CCD0) --------------------------------------------------------
void __thiscall SkillWin::OnPrevPage(SkillWin *this)
{
  unsigned int v1; // eax@1

  v1 = this->m_uiCurPage;
  if ( v1 )
  {
    this->m_uiCurPage = v1 - 1;
    SkillWin::ResetContents(this);
  }
}

//----- (0059CCF0) --------------------------------------------------------
void __thiscall SkillWin::OnNextPage(SkillWin *this)
{
  SkillWin *v1; // esi@1
  unsigned int v2; // eax@1
  unsigned int v3; // ecx@1

  v1 = this;
  v2 = SkillWin::GetLearnSkillNum(this);
  v3 = v1->m_uiCurPage;
  if ( 8 * v3 + 8 < v2 )
  {
    v1->m_uiCurPage = v3 + 1;
    SkillWin::ResetContents(v1);
  }
}

//----- (0059CD20) --------------------------------------------------------
void __thiscall SkillWin::SelectByPageType(SkillWin *this, unsigned int Type)
{
  switch ( Type )
  {
    case 1u:
      SkillWin::OnPasssiveSkill(this);
      break;
    case 2u:
      SkillWin::OnCommboSkill(this);
      break;
    case 3u:
      SkillWin::OnProductSkill(this);
      break;
    default:
      SkillWin::OnActiveSkill(this);
      break;
  }
}

//----- (0059CD70) --------------------------------------------------------
void __thiscall SkillWin::OnCommand(SkillWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 9u:
      SkillWin::OnInvLClick(this, lParam);
      break;
    case 0xAu:
      SkillWin::OnInvRClick(this, lParam);
      break;
    case 0xBu:
      SkillWin::OnActiveSkill(this);
      break;
    case 0xCu:
      SkillWin::OnPasssiveSkill(this);
      break;
    case 0xDu:
      SkillWin::OnCommboSkill(this);
      break;
    case 0xEu:
      SkillWin::OnProductSkill(this);
      break;
    case 0xFu:
      SkillWin::OnPrevPage(this);
      break;
    case 0x10u:
      SkillWin::OnNextPage(this);
      break;
    case 0x11u:
      SkillWin::OnOpenPowerWindow(this);
      break;
    case 0x12u:
      GameFrameWork::NcSkillEmpowResetReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0x13u:
      SkillWin::OnLevelNext(this, lParam);
      break;
    case 0x14u:
      SkillWin::OnLevelPre(this, lParam);
      break;
    case 0x15u:
      SkillWin::OnEmpowerClick(this, lParam);
      break;
    case 0x16u:
      SkillWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (0059CE60) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
}
// 9AD820: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);

//----- (0059CE70) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9AD820: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);

//----- (0059CEA0) --------------------------------------------------------
void *__thiscall PosInfoWinBut::_vector_deleting_destructor_(PosInfoWinBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&PosInfoWinBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&PosInfoWinBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AD0E4: using guessed type int (__stdcall *PosInfoWinBut___vftable_)(int uiFlags);
// 9AD104: using guessed type int (__thiscall *PosInfoWinBut___vftable_)(void *p, char);

//----- (0059CEE0) --------------------------------------------------------
void *__thiscall LevelSelectWinBut::_scalar_deleting_destructor_(LevelSelectWinBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LevelSelectWinBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&LevelSelectWinBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AD33C: using guessed type int (__stdcall *LevelSelectWinBut___vftable_)(int uiFlags);
// 9AD35C: using guessed type int (__thiscall *LevelSelectWinBut___vftable_)(void *p, char);

//----- (0059CF20) --------------------------------------------------------
void *__thiscall SkillInvWin::_scalar_deleting_destructor_(SkillInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillInvWin::_vftable_;
  SkillIcon::_SkillIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AD594: using guessed type int (__stdcall *SkillInvWin___vftable_)(int uiFlags);
// 9AD5B4: using guessed type int (__thiscall *SkillInvWin___vftable_)(void *p, char);

//----- (0059CF60) --------------------------------------------------------
unsigned int __cdecl GuildTournamentStateTab::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E78: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab___ms_pkTable;

//----- (0059CF80) --------------------------------------------------------
void __thiscall NiTPointerList<NiPointer<PgFont>>::_NiTPointerList<NiPointer<PgFont>>(NiTPointerList<NiPointer<PgFont> > *this)
{
  NiTPointerList<NiPointer<PgFont> > *v1; // edi@1
  NiTListItem<NiPointer<PgFont> > *v2; // esi@1
  NiTListItem<NiPointer<PgFont> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
}
// 9AD820: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);
// 9AD830: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);

//----- (0059D000) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<PgFont> > *v3; // esi@1
  NiTListItem<NiPointer<PgFont> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AD820: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);
// 9AD830: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);

//----- (0059D090) --------------------------------------------------------
void __thiscall PgTList<NiPointer<PgFont>>::_PgTList<NiPointer<PgFont>>(PgTList<NiPointer<PgFont> > *this)
{
  PgTList<NiPointer<PgFont> > *v1; // edi@1
  NiTListItem<NiPointer<PgFont> > *v2; // esi@1
  NiTListItem<NiPointer<PgFont> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&PgTList<NiPointer<PgFont>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
}
// 9AD820: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);
// 9AD840: using guessed type int (__thiscall *PgTList_NiPointer_PgFont_____vftable_)(void *p, char);

//----- (0059D110) --------------------------------------------------------
void *__thiscall PgTList<NiPointer<PgFont>>::_scalar_deleting_destructor_(PgTList<NiPointer<PgFont> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<PgFont> > *v3; // esi@1
  NiTListItem<NiPointer<PgFont> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgFont> >Vtbl *)&PgTList<NiPointer<PgFont>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<PgFont>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AD820: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_PgFont_____vftable_)(void *p, char);
// 9AD840: using guessed type int (__thiscall *PgTList_NiPointer_PgFont_____vftable_)(void *p, char);

//----- (0059D1A0) --------------------------------------------------------
void *__thiscall SkillWin::_vector_deleting_destructor_(SkillWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SkillWin::_SkillWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0059D1D0) --------------------------------------------------------
void __thiscall SoulStoneInfoWin::SoulStoneInfoWin(SoulStoneInfoWin *this)
{
  SoulStoneInfoWin *v1; // esi@1

  v1 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SoulStoneInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SoulStoneInfoWin::_vftable_;
}
// 9ADAFC: using guessed type int (__stdcall *SoulStoneInfoWin___vftable_)(int uiFlags);
// 9ADB1C: using guessed type int (__thiscall *SoulStoneInfoWin___vftable_)(void *p, char);

//----- (0059D1F0) --------------------------------------------------------
void __thiscall SoulStoneInfoWin::_SoulStoneInfoWin(SoulStoneInfoWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SoulStoneInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SoulStoneInfoWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
}
// 9ADAFC: using guessed type int (__stdcall *SoulStoneInfoWin___vftable_)(int uiFlags);
// 9ADB1C: using guessed type int (__thiscall *SoulStoneInfoWin___vftable_)(void *p, char);

//----- (0059D210) --------------------------------------------------------
void __thiscall SoulStoneInfoWin::HideAllMoneyWin(SoulStoneInfoWin *this)
{
  SoulStoneInfoWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (0059D2B0) --------------------------------------------------------
bool __thiscall SoulStoneInfoWin::IsMoneyShow(SoulStoneInfoWin *this)
{
  SoulStoneInfoWin *v1; // esi@1

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
}

//----- (0059D310) --------------------------------------------------------
unsigned int __thiscall SoulStoneInfoWin::GetMoneyWinWidth(SoulStoneInfoWin *this)
{
  SoulStoneInfoWin *v1; // esi@1
  unsigned int v2; // edi@1
  unsigned int result; // eax@8

  v1 = this;
  v2 = 0;
  if ( (unsigned __int8)((int (*)(void))this->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 = ((int (*)(void))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + v1->m_uiIconWidth
       + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    v2 += v1->m_uiIconWidth
        + ((int (*)(void))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 2;
  if ( (unsigned __int8)((int (*)(void))v1->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    result = v2
           + v1->m_uiIconWidth
           + ((int (*)(void))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
           + 2;
  else
    result = v2;
  return result;
}

//----- (0059D3E0) --------------------------------------------------------
void __thiscall SoulStoneInfoWin::ShowMoneyWin(SoulStoneInfoWin *this, int iXPos, int iYPos, __int64 i64Money)
{
  SoulStoneInfoWin *v4; // esi@1
  int v5; // edi@2
  int v6; // edi@2
  int v7; // edi@5
  int v8; // edi@7
  int v9; // edi@9
  int v10; // edi@11
  char acMoneyStr[32]; // [sp+14h] [bp-24h]@2
  unsigned int v12; // [sp+34h] [bp-4h]@1
  int v13; // [sp+38h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v4 = this;
  if ( User::GetGem(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      iXPos,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v5 = iXPos
       + ((int (*)(void))v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v5,
      iYPos);
    v6 = v5 + v4->m_uiIconWidth + 1;
  }
  else
  {
    v6 = iXPos;
  }
  if ( User::GetGold(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v7 = v6
       + ((int (*)(void))v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v7,
      iYPos);
    v6 = v7 + v4->m_uiIconWidth + 1;
  }
  if ( User::GetSilver(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v8 = v6
       + ((int (*)(void))v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v8,
      iYPos);
    v6 = v8 + v4->m_uiIconWidth + 1;
  }
  if ( User::GetCopper(i64Money) )
  {
    ((void (__stdcall *)(signed int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%I64d");
    ((void (__stdcall *)(_DWORD))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v9 = v6
       + ((int (*)(void))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
       + 1;
    ((void (__stdcall *)(signed int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v9,
      iYPos);
    v6 = v9 + v4->m_uiIconWidth + 1;
  }
  if ( !i64Money )
  {
    ((void (__stdcall *)(signed int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v6,
      iYPos + 3);
    sprintf(acMoneyStr, "%d");
    ((void (__stdcall *)(_DWORD))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[125].__vecDelDtor)(acMoneyStr);
    v10 = v6
        + ((int (*)(void))v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
        + 1;
    ((void (__stdcall *)(signed int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(int, int))v4->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      v10,
      iYPos);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0059D780) --------------------------------------------------------
void __thiscall SoulStoneInfoWin::AdjustSizeIfIamToolTipWin(SoulStoneInfoWin *this)
{
  int v1; // esi@1
  int v2; // eax@1
  PgFont *v3; // edi@1
  int v4; // ebx@2
  char *v5; // eax@3
  bool v6; // zf@7
  SoulStoneInfoWin *v7; // esi@8
  int v8; // edi@12
  unsigned int v9; // eax@12
  tagSIZE kSize; // [sp+8h] [bp-18h]@4
  SoulStoneInfoWin *thisa; // [sp+10h] [bp-10h]@1
  int v12; // [sp+14h] [bp-Ch]@2
  int v13; // [sp+18h] [bp-8h]@2
  int uiCy; // [sp+1Ch] [bp-4h]@2

  v1 = (int)this->m_apkTextWin;
  thisa = this;
  v2 = ((int (*)(void))this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
  v3 = (PgFont *)v2;
  if ( v2 )
  {
    SelectObject(*(HDC *)(v2 + 192), *(HGDIOBJ *)(v2 + 184));
    v4 = 0;
    uiCy = 0;
    v13 = v1;
    v12 = 20;
    do
    {
      v5 = (char *)(*(int (**)(void))(**(_DWORD **)v1 + 484))();
      if ( v5 )
      {
        PgFont::GetTextSize(v3, v5, strlen(v5), &kSize);
        if ( (unsigned int)kSize.cx > v4 )
          v4 = kSize.cx;
        uiCy += kSize.cy + 2;
      }
      v1 = v13 + 4;
      v6 = v12-- == 1;
      v13 += 4;
    }
    while ( !v6 );
    v7 = thisa;
    if ( (unsigned __int8)((int (*)(void))thisa->m_pkGemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v7->m_pkGoldIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v7->m_pkSilverIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
      || (unsigned __int8)((int (*)(void))v7->m_pkCopperIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v8 = uiCy + v7->m_uiIconHeight + 2;
      v9 = SoulStoneInfoWin::GetMoneyWinWidth(v7);
      if ( v9 > v4 )
        v4 = v9;
    }
    else
    {
      v8 = uiCy;
    }
    if ( v4 )
      ((void (__thiscall *)(SoulStoneInfoWin *, unsigned int, unsigned int))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
        v7,
        v4 + 2 * v7->baseclass_0.m_uiEdgeWidth,
        v8 + 2 * v7->baseclass_0.m_uiEdgeHeight);
  }
}

//----- (0059D8C0) --------------------------------------------------------
bool __thiscall SoulStoneInfoWin::Create(SoulStoneInfoWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight)
{
  SoulStoneInfoWin *v4; // esi@1
  signed int v5; // edi@2
  int v6; // ebx@2
  PgFont *v7; // eax@3
  PgWinText *v8; // eax@3
  unsigned int v9; // esi@5
  NiTexturePalette *v11; // edi@10
  char *v12; // eax@12
  PgSprData *v13; // eax@13
  PgWinSpr *v14; // eax@13
  NiAVObject *v15; // ecx@13
  PgSprData *v16; // eax@13
  PgWinSpr *v17; // eax@13
  NiAVObject *v18; // ecx@13
  PgSprData *v19; // eax@13
  PgWinSpr *v20; // eax@13
  NiAVObject *v21; // ecx@13
  PgSprData *v22; // eax@13
  PgWinSpr *v23; // eax@13
  PgWinSpr *v24; // ecx@13
  int v25; // eax@13
  PgWinSpr *v26; // ecx@13
  PgFont *v27; // eax@13
  PgFont *v28; // eax@13
  PgFont *v29; // eax@13
  PgFont *v30; // eax@13
  unsigned int v31; // esi@14
  int uiLeft; // [sp+0h] [bp-10h]@13
  int v33; // [sp+Ch] [bp-4h]@4

  v4 = this;
  if ( !FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, 0, 0) )
    return 0;
  v5 = 0;
  v6 = (int)v4->m_apkTextWin;
  do
  {
    v7 = Font::Get(0);
    v8 = PgWinText::CreateWin(
           v4->baseclass_0.m_uiEdgeWidth,
           v5 + v4->baseclass_0.m_uiEdgeHeight + 2,
           0x100u,
           0x10u,
           v7,
           &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
    *(_DWORD *)v6 = v8;
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v8,
      0);
    v5 += 14;
    v6 += 4;
  }
  while ( v5 < 280 );
  ((void (__thiscall *)(SoulStoneInfoWin *, unsigned int, unsigned int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v4,
    2 * v4->baseclass_0.m_uiEdgeWidth + 128,
    2 * v4->baseclass_0.m_uiEdgeHeight + 12);
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v4,
    0);
  uiEdgeHeight = 0;
  v33 = 0;
  MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v9 = uiEdgeHeight;
    v33 = -1;
    if ( uiEdgeHeight && !InterlockedDecrement((volatile LONG *)(uiEdgeHeight + 4)) )
    {
      if ( v9 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    }
    return 0;
  }
  v11 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v12 = Folder::Merge(&Folder::m_acMenu, "Game\\Money.nif");
  PgUtil::LoadNodeNifFile(v12, (NiPointer<NiNode> *)&uiEdgeHeight, v11);
  if ( !uiEdgeHeight )
    return 0;
  v13 = PgSprData::Create((NiAVObject *)uiEdgeHeight, "MyGemBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
  v14 = PgWinSpr::CreateWin(0, 0, v13, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = (NiAVObject *)uiEdgeHeight;
  v4->m_pkGemIcon = v14;
  v16 = PgSprData::Create(v15, "MyGoldBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
  v17 = PgWinSpr::CreateWin(0, 0, v16, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v18 = (NiAVObject *)uiEdgeHeight;
  v4->m_pkGoldIcon = v17;
  v19 = PgSprData::Create(v18, "MySilverBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
  v20 = PgWinSpr::CreateWin(0, 0, v19, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v21 = (NiAVObject *)uiEdgeHeight;
  v4->m_pkSilverIcon = v20;
  v22 = PgSprData::Create(v21, "MyCopperBtn", &uiLeft, (int *)&uiEdgeWidth, 0);
  v23 = PgWinSpr::CreateWin(0, 0, v22, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v24 = v4->m_pkGemIcon;
  v4->m_pkCopperIcon = v23;
  v25 = ((int (*)(void))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v26 = v4->m_pkGemIcon;
  v4->m_uiIconWidth = v25;
  v4->m_uiIconHeight = ((int (*)(void))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v27 = Font::Get(SMALL);
  v4->m_pkGemText = AutoSizingTextWin::CreateWin(0, 0, v27, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v28 = Font::Get(SMALL);
  v4->m_pkGoldText = AutoSizingTextWin::CreateWin(0, 0, v28, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v29 = Font::Get(SMALL);
  v4->m_pkSilverText = AutoSizingTextWin::CreateWin(0, 0, v29, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v30 = Font::Get(SMALL);
  v4->m_pkCopperText = AutoSizingTextWin::CreateWin(0, 0, v30, &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  SoulStoneInfoWin::HideAllMoneyWin(v4);
  v33 = -1;
  if ( uiEdgeHeight )
  {
    v31 = uiEdgeHeight;
    if ( !InterlockedDecrement((volatile LONG *)(uiEdgeHeight + 4)) )
    {
      if ( v31 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v31)(v31, 1);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0059DBC0) --------------------------------------------------------
int __thiscall SoulStoneInfoWin::SetHPInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax)
{
  SoulStoneInfoWin *v3; // esi@1
  int v4; // edi@1
  NiRefObjectVtbl *v5; // edi@3
  char *v6; // eax@3
  char *v7; // eax@3
  char *v8; // eax@3
  int v9; // edi@3
  char *v10; // ebx@3
  int v11; // esi@3
  int v12; // eax@4
  int v13; // ecx@5
  signed int hDC; // [sp+Ch] [bp-108h]@1
  HDC__ *hDCa; // [sp+Ch] [bp-108h]@3
  char acStr[256]; // [sp+10h] [bp-104h]@3
  unsigned int v18; // [sp+110h] [bp-4h]@1
  int v19; // [sp+114h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  SoulStoneInfoWin::HideAllMoneyWin(this);
  v4 = (int)v3->m_apkTextWin;
  hDC = 20;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v4 + 472))(&unk_9ADA9B);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v4 + 468))(&Color::m_kDxWhiteColor);
    v4 += 4;
    --hDC;
  }
  while ( hDC );
  v5 = v3->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = TextData::Get(0x474A93A0u);
  v5[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[0], (unsigned int)v6);
  v7 = TextData::Get(0xE9F80745u);
  sprintf(acStr, v7);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v8 = TextData::Get(0xD502074Bu);
  sprintf(acStr, v8);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  v9 = 4;
  hDCa = *(HDC__ **)(((int (*)(void))v3->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)()
                   + 192);
  v10 = TextData::Get(0x2D4F563Cu);
  v11 = (int)&v3->m_apkTextWin[4];
  do
  {
    v12 = PgUtil::StringPixelCopy(acStr, v10, hDCa, 200);
    if ( !v12 )
      break;
    v13 = *(_DWORD *)v11;
    acStr[v12] = 0;
    v10 += v12;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v13 + 472))(acStr);
    ++v9;
    v11 += 4;
  }
  while ( v9 < 20 );
  return v9;
}
// A85C00: using guessed type int __security_cookie;

//----- (0059DD60) --------------------------------------------------------
int __thiscall SoulStoneInfoWin::SetSPInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax)
{
  SoulStoneInfoWin *v3; // esi@1
  int v4; // edi@1
  NiRefObjectVtbl *v5; // edi@3
  char *v6; // eax@3
  char *v7; // eax@3
  char *v8; // eax@3
  int v9; // edi@3
  char *v10; // ebx@3
  int v11; // esi@3
  int v12; // eax@4
  int v13; // ecx@5
  signed int hDC; // [sp+Ch] [bp-108h]@1
  HDC__ *hDCa; // [sp+Ch] [bp-108h]@3
  char acStr[256]; // [sp+10h] [bp-104h]@3
  unsigned int v18; // [sp+110h] [bp-4h]@1
  int v19; // [sp+114h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  SoulStoneInfoWin::HideAllMoneyWin(this);
  v4 = (int)v3->m_apkTextWin;
  hDC = 20;
  do
  {
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v4 + 472))(&unk_9ADAA5);
    (*(void (__stdcall **)(D3DXCOLOR *))(**(_DWORD **)v4 + 468))(&Color::m_kDxWhiteColor);
    v4 += 4;
    --hDC;
  }
  while ( hDC );
  v5 = v3->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = TextData::Get(0x475593A0u);
  v5[118].__vecDelDtor((NiRefObject *)v3->m_apkTextWin[0], (unsigned int)v6);
  v7 = TextData::Get(0xE9F80745u);
  sprintf(acStr, v7);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v8 = TextData::Get(0xD502074Bu);
  sprintf(acStr, v8);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ((void (__stdcall *)(_DWORD))v3->m_apkTextWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(" ");
  v9 = 4;
  hDCa = *(HDC__ **)(((int (*)(void))v3->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)()
                   + 192);
  v10 = TextData::Get(0x2D5A563Cu);
  v11 = (int)&v3->m_apkTextWin[4];
  do
  {
    v12 = PgUtil::StringPixelCopy(acStr, v10, hDCa, 200);
    if ( !v12 )
      break;
    v13 = *(_DWORD *)v11;
    acStr[v12] = 0;
    v10 += v12;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v13 + 472))(acStr);
    ++v9;
    v11 += 4;
  }
  while ( v9 < 20 );
  return v9;
}
// A85C00: using guessed type int __security_cookie;

//----- (0059DF00) --------------------------------------------------------
void __thiscall SoulStoneInfoWin::SetHPBuyInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax, unsigned int dwPrice)
{
  SoulStoneInfoWin *v4; // esi@1
  int v5; // eax@1

  v4 = this;
  v5 = SoulStoneInfoWin::SetHPInfo(this, dwCur, dwMax);
  SoulStoneInfoWin::ShowMoneyWin(
    v4,
    v4->baseclass_0.m_uiEdgeWidth,
    v4->baseclass_0.m_uiEdgeHeight + 14 * v5 + 2,
    dwPrice);
}

//----- (0059DF50) --------------------------------------------------------
void __thiscall SoulStoneInfoWin::SetSPBuyInfo(SoulStoneInfoWin *this, unsigned int dwCur, unsigned int dwMax, unsigned int dwPrice)
{
  SoulStoneInfoWin *v4; // esi@1
  int v5; // eax@1

  v4 = this;
  v5 = SoulStoneInfoWin::SetSPInfo(this, dwCur, dwMax);
  SoulStoneInfoWin::ShowMoneyWin(
    v4,
    v4->baseclass_0.m_uiEdgeWidth,
    v4->baseclass_0.m_uiEdgeHeight + 14 * v5 + 2,
    dwPrice);
}

//----- (0059DFA0) --------------------------------------------------------
SoulStoneInfoWin *__cdecl SoulStoneInfoWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  SoulStoneInfoWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x218u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    FrameBoxWin::FrameBoxWin((FrameBoxWin *)v3);
    *(_DWORD *)v4 = &SoulStoneInfoWin::_vftable_;
    *((_DWORD *)v4 + 58) = &SoulStoneInfoWin::_vftable_;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiSourceTexture *, unsigned int, unsigned int))(*(_DWORD *)v4 + 548))(
                          v4,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (SoulStoneInfoWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9ADAFC: using guessed type int (__stdcall *SoulStoneInfoWin___vftable_)(int uiFlags);
// 9ADB1C: using guessed type int (__thiscall *SoulStoneInfoWin___vftable_)(void *p, char);

//----- (0059E0F0) --------------------------------------------------------
void *__thiscall SoulStoneInfoWin::_scalar_deleting_destructor_(SoulStoneInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SoulStoneInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SoulStoneInfoWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9ADAFC: using guessed type int (__stdcall *SoulStoneInfoWin___vftable_)(int uiFlags);
// 9ADB1C: using guessed type int (__thiscall *SoulStoneInfoWin___vftable_)(void *p, char);

//----- (0059E130) --------------------------------------------------------
void __thiscall SoulStoneWin::SoulStoneWin(SoulStoneWin *this)
{
  SoulStoneWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_fLastHPUsedTime = -1.0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SoulStoneWin::_vftable_;
  v1->m_fLastSPUsedTime = -1.0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SoulStoneWin::_vftable_;
}
// 9ADDEC: using guessed type int (__stdcall *SoulStoneWin___vftable_)(int uiFlags);
// 9ADE0C: using guessed type int (__thiscall *SoulStoneWin___vftable_)(void *p, char);

//----- (0059E160) --------------------------------------------------------
void __thiscall SoulStoneWin::_SoulStoneWin(SoulStoneWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SoulStoneWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SoulStoneWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9ADDEC: using guessed type int (__stdcall *SoulStoneWin___vftable_)(int uiFlags);
// 9ADE0C: using guessed type int (__thiscall *SoulStoneWin___vftable_)(void *p, char);

//----- (0059E1A0) --------------------------------------------------------
void __thiscall SoulStoneWin::UpdateMeWin(SoulStoneWin *this, float fCurTime)
{
  SoulStoneWin *v2; // esi@1
  char acStr[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  User::HPStone(&g_kUser);
  sprintf(acStr, "%d");
  ((void (__stdcall *)(_DWORD))v2->m_pkHPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  User::SPStone(&g_kUser);
  sprintf(acStr, "%d");
  ((void (__stdcall *)(_DWORD))v2->m_pkSPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ((void (__stdcall *)(_DWORD))v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (0059E270) --------------------------------------------------------
void __thiscall SoulStoneWin::UseHPSoulStone(SoulStoneWin *this)
{
  SoulStoneWin *v1; // esi@1
  PgFrameWork *v2; // ecx@1

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  v1->m_fLastHPUsedTime = Timer::ms_fCurTime;
  GameFrameWork::NcSoulStoneHPUseReq((GameFrameWork *)v2);
  ClockShadowWin::Start(v1->m_apkClockShadowWin[0], Timer::ms_fCurTime, 1.0, 0.0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059E2B0) --------------------------------------------------------
void __thiscall SoulStoneWin::UseSPSoulStone(SoulStoneWin *this)
{
  SoulStoneWin *v1; // esi@1
  PgFrameWork *v2; // ecx@1

  v1 = this;
  v2 = this->baseclass_0.m_pkFrameWork;
  v1->m_fLastSPUsedTime = Timer::ms_fCurTime;
  GameFrameWork::NcSoulStoneSPUseReq((GameFrameWork *)v2);
  ClockShadowWin::Start(v1->m_apkClockShadowWin[1], Timer::ms_fCurTime, 1.0, 0.0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059E2F0) --------------------------------------------------------
bool __thiscall SoulStoneWin::Create(SoulStoneWin *this, PgFrameWork *pkFrameWork)
{
  SoulStoneWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgSprData *v10; // eax@15
  PgSprData *v11; // eax@15
  PgSprData *v12; // eax@15
  PgSprData *v13; // eax@15
  PgSprData *v14; // eax@15
  char *v15; // eax@15
  ClockShadowWin *v16; // eax@15
  NiNode *v17; // ecx@15
  PgSprData *v18; // eax@15
  char *v19; // eax@15
  PgSprData *v20; // eax@15
  char *v21; // eax@15
  PgSprData *v22; // eax@15
  char *v23; // eax@15
  PgFont *v24; // eax@17
  PgWinText *v25; // eax@17
  PgFont *v26; // eax@17
  PgWinText *v27; // eax@17
  PgFont *v28; // eax@18
  PgWinText *v29; // eax@18
  PgFont *v30; // eax@18
  PgWinText *v31; // eax@18
  unsigned int uiWidth; // [sp+50h] [bp-20h]@15
  int uiHeight; // [sp+54h] [bp-1Ch]@15
  NiPointer<NiNode> spNode; // [sp+58h] [bp-18h]@1
  int uiLeft; // [sp+5Ch] [bp-14h]@11
  int uiTop; // [sp+60h] [bp-10h]@11
  int v37; // [sp+6Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v37 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v37 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\SoulPanel.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "SoulStoneWin", 0) )
  {
    v4 = spNode.m_pObject;
    v37 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PreSoul", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextSoul", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HPSoul", &uiLeft, &uiTop, v3);
  v2->m_pkHPButWin = PgWinBut::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v15 = TextData::Get(0xE5FE4B2Cu);
  PgWin::SetToolTipWinText(&v2->m_pkHPButWin->baseclass_0.baseclass_0, v15);
  v2->m_pkHPButWin->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v16 = ClockShadowWin::CreateWin(uiLeft, uiTop, &v2->baseclass_0.baseclass_0.baseclass_0);
  v17 = spNode.m_pObject;
  v2->m_apkClockShadowWin[0] = v16;
  v18 = PgSprData::Create(&v17->baseclass_0, "SPSoul", &uiLeft, &uiTop, v3);
  v2->m_pkSPButWin = PgWinBut::CreateWin(uiLeft, uiTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v19 = TextData::Get(0xE5094B2Cu);
  PgWin::SetToolTipWinText(&v2->m_pkSPButWin->baseclass_0.baseclass_0, v19);
  v2->m_pkSPButWin->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v2->m_apkClockShadowWin[1] = ClockShadowWin::CreateWin(uiLeft, uiTop, &v2->baseclass_0.baseclass_0.baseclass_0);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PwrSoul", &uiLeft, &uiTop, v3);
  v2->m_pkPWButWin = PgWinBut::CreateWin(uiLeft, uiTop, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v21 = TextData::Get(0xE3F7FF40u);
  PgWin::SetToolTipWinText(&v2->m_pkPWButWin->baseclass_0.baseclass_0, v21);
  v2->m_pkPWButWin->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GrdSoul", &uiLeft, &uiTop, v3);
  v2->m_pkGRButWin = PgWinBut::CreateWin(uiLeft, uiTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
  v23 = TextData::Get(0xE9E00C2Au);
  PgWin::SetToolTipWinText(&v2->m_pkGRButWin->baseclass_0.baseclass_0, v23);
  v2->m_pkGRButWin->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  if ( !PgUtil::GetTriShapeRect(
          &spNode.m_pObject->baseclass_0,
          "SoulLot01",
          &uiLeft,
          &uiTop,
          &uiWidth,
          (unsigned int *)&uiHeight)
    || (v24 = Font::Get(MENU),
        v25 = PgWinText::CreateWin(
                uiLeft - 1,
                uiTop - 4,
                uiWidth,
                uiHeight + 4,
                v24,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkHPDarkText = v25,
        v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v25,
          (unsigned int)"0"),
        ((void (__stdcall *)(signed int))v2->m_pkHPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(2),
        ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkHPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxBlackColor),
        ((void (__stdcall *)(_DWORD))v2->m_pkHPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        v26 = Font::Get(MENU),
        v27 = PgWinText::CreateWin(
                uiLeft,
                uiTop - 3,
                uiWidth,
                uiHeight + 4,
                v26,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkHPText = v27,
        v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)v27,
          (unsigned int)"0"),
        ((void (__stdcall *)(signed int))v2->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(2),
        ((void (__stdcall *)(_DWORD))v2->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "SoulLot02",
           &uiLeft,
           &uiTop,
           &uiWidth,
           (unsigned int *)&uiHeight)) )
  {
    v37 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v28 = Font::Get(MENU);
  v29 = PgWinText::CreateWin(
          uiLeft - 1,
          uiTop - 4,
          uiWidth,
          uiHeight + 4,
          v28,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkSPDarkText = v29;
  ((void (__thiscall *)(PgWinText *))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v29);
  ((void (__cdecl *)(signed int, _DWORD))v2->m_pkSPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    2,
    "0");
  ((void (__cdecl *)(D3DXCOLOR *))v2->m_pkSPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxBlackColor);
  ((void (__cdecl *)(_DWORD))v2->m_pkSPDarkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v30 = Font::Get(MENU);
  v31 = PgWinText::CreateWin(
          uiLeft,
          uiTop - 3,
          uiWidth,
          uiHeight + 4,
          v30,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkSPText = v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v31,
    (unsigned int)"0");
  ((void (__stdcall *)(signed int))v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(2);
  ((void (__stdcall *)(_DWORD))v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(SoulStoneWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.32600001,
    0.0);
  v37 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0059E8E0) --------------------------------------------------------
bool __thiscall SoulStoneWin::TryHPSoulStoneUse(SoulStoneWin *this)
{
  SoulStoneWin *v1; // esi@1
  char *v2; // eax@2
  bool result; // al@2
  char *v4; // eax@4

  v1 = this;
  if ( this->m_fLastHPUsedTime + 1.0 <= Timer::ms_fCurTime )
  {
    if ( User::HPStone(&g_kUser) )
    {
      result = 1;
    }
    else
    {
      v4 = TextData::Get(0x3A4B3F5Cu);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v4);
      result = 0;
    }
  }
  else
  {
    v2 = TextData::Get(0xD9132D2Du);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v2);
    result = 0;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059E950) --------------------------------------------------------
bool __thiscall SoulStoneWin::TrySPSoulStoneUse(SoulStoneWin *this)
{
  SoulStoneWin *v1; // esi@1
  char *v2; // eax@2
  bool result; // al@2
  char *v4; // eax@4

  v1 = this;
  if ( this->m_fLastSPUsedTime + 1.0 <= Timer::ms_fCurTime )
  {
    if ( User::SPStone(&g_kUser) )
    {
      result = 1;
    }
    else
    {
      v4 = TextData::Get(0x3A4B4A5Cu);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v4);
      result = 0;
    }
  }
  else
  {
    v2 = TextData::Get(0xE4132D2Du);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v2);
    result = 0;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059E9C0) --------------------------------------------------------
void __thiscall SoulStoneWin::OnCmdHPSoul(SoulStoneWin *this)
{
  SoulStoneWin *v1; // esi@1
  GameFrameWork *v2; // ecx@2

  v1 = this;
  if ( SoulStoneWin::TryHPSoulStoneUse(this) )
  {
    v2 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
    v1->m_fLastHPUsedTime = Timer::ms_fCurTime;
    GameFrameWork::NcSoulStoneHPUseReq(v2);
    ClockShadowWin::Start(v1->m_apkClockShadowWin[0], Timer::ms_fCurTime, 1.0, 0.0);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059EA10) --------------------------------------------------------
void __thiscall SoulStoneWin::OnCmdSPSoul(SoulStoneWin *this)
{
  SoulStoneWin *v1; // esi@1
  GameFrameWork *v2; // ecx@2

  v1 = this;
  if ( SoulStoneWin::TrySPSoulStoneUse(this) )
  {
    v2 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
    v1->m_fLastSPUsedTime = Timer::ms_fCurTime;
    GameFrameWork::NcSoulStoneSPUseReq(v2);
    ClockShadowWin::Start(v1->m_apkClockShadowWin[1], Timer::ms_fCurTime, 1.0, 0.0);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059EA60) --------------------------------------------------------
void __thiscall SoulStoneWin::OnCommand(SoulStoneWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      SoulStoneWin::OnCmdHPSoul(this);
      break;
    case 1u:
      SoulStoneWin::OnCmdSPSoul(this);
      break;
    default:
      return;
  }
}

//----- (0059EAA0) --------------------------------------------------------
SoulStoneWin *__cdecl SoulStoneWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SoulStoneWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x190u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *((float *)v2 + 96) = -1.0;
    *(_DWORD *)v2 = &SoulStoneWin::_vftable_;
    *((float *)v2 + 97) = -1.0;
    *((_DWORD *)v2 + 58) = &SoulStoneWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SoulStoneWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9ADDEC: using guessed type int (__stdcall *SoulStoneWin___vftable_)(int uiFlags);
// 9ADE0C: using guessed type int (__thiscall *SoulStoneWin___vftable_)(void *p, char);

//----- (0059EBF0) --------------------------------------------------------
void *__thiscall SoulStoneWin::_vector_deleting_destructor_(SoulStoneWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SoulStoneWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SoulStoneWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9ADDEC: using guessed type int (__stdcall *SoulStoneWin___vftable_)(int uiFlags);
// 9ADE0C: using guessed type int (__thiscall *SoulStoneWin___vftable_)(void *p, char);

//----- (0059EC40) --------------------------------------------------------
void __thiscall StatTitleListItemWin::StatTitleListItemWin(StatTitleListItemWin *this)
{
  StatTitleListItemWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatTitleListItemWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatTitleListItemWin::_vftable_;
}
// 9AE270: using guessed type int (__stdcall *StatTitleListItemWin___vftable_)(int uiFlags);
// 9AE28C: using guessed type int (__thiscall *StatTitleListItemWin___vftable_)(void *p, char);

//----- (0059EC60) --------------------------------------------------------
void __thiscall StatTitleListItemWin::_StatTitleListItemWin(StatTitleListItemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatTitleListItemWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatTitleListItemWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9AE270: using guessed type int (__stdcall *StatTitleListItemWin___vftable_)(int uiFlags);
// 9AE28C: using guessed type int (__thiscall *StatTitleListItemWin___vftable_)(void *p, char);

//----- (0059ECA0) --------------------------------------------------------
void __thiscall StatTitleWin::StatTitleWin(StatTitleWin *this)
{
  StatTitleWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_iListCount = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatTitleWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatTitleWin::_vftable_;
  v1->m_apkListItemWin[0] = 0;
  v1->m_apkListItemWin[1] = 0;
  v1->m_apkListItemWin[2] = 0;
  v1->m_apkListItemWin[3] = 0;
  v1->m_pkStatTitleIconWin = 0;
}
// 9AE458: using guessed type int (__stdcall *StatTitleWin___vftable_)(int uiFlags);
// 9AE474: using guessed type int (__thiscall *StatTitleWin___vftable_)(void *p, char);

//----- (0059ECF0) --------------------------------------------------------
void __thiscall StatTitleWin::_StatTitleWin(StatTitleWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatTitleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatTitleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9AE458: using guessed type int (__stdcall *StatTitleWin___vftable_)(int uiFlags);
// 9AE474: using guessed type int (__thiscall *StatTitleWin___vftable_)(void *p, char);

//----- (0059ED10) --------------------------------------------------------
void __thiscall StatTitleWin::OnOk(StatTitleWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0059ED20) --------------------------------------------------------
void __thiscall StatTitleWin::OnCancel(StatTitleWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0059ED40) --------------------------------------------------------
void __thiscall StatTitleWin::AddStatTitle(StatTitleWin *this)
{
  ++this->m_iListCount;
}

//----- (0059ED50) --------------------------------------------------------
void __thiscall StatTitleWin::ClearStatTitle(StatTitleWin *this)
{
  this->m_iListCount = 0;
}

//----- (0059ED70) --------------------------------------------------------
bool __thiscall StatTitleListItemWin::Create(StatTitleListItemWin *this, NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, StatTitleListItemWin::CreateSpec *rkSpec, PgWin *pkParent)
{
  PgWin *v7; // esi@1
  bool result; // al@1
  D3DXCOLOR v9; // ST08_16@2
  D3DXCOLOR v10; // ST08_16@2
  D3DXCOLOR v11; // ST08_16@2
  D3DXCOLOR v12; // ST08_16@2
  D3DXCOLOR v13; // ST08_16@2
  PgWin *v14; // eax@2
  UIUtil ui; // [sp+0h] [bp-20h]@2
  int v16; // [sp+1Ch] [bp-4h]@2

  v7 = (PgWin *)this;
  result = PgWin::Create(&this->baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    UIUtil::UIUtil(&ui);
    v16 = 0;
    UIUtil::SetParent(&ui, v7);
    UIUtil::SetOffset(&ui, iXPos, iYPos);
    UIUtil::SetUIGeom(&ui, pkGeom);
    *(_QWORD *)&v9.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v9.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    UIUtil::CreateTextNoSpr(&ui, rkSpec->kInterface.pcName, &byte_9AE030, COERCE_D3DXCOLOR(v9.r), 4u);
    *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    UIUtil::CreateTextNoSpr(&ui, rkSpec->kInterface.pcRank, &byte_9AE031, COERCE_D3DXCOLOR(v10.r), 4u);
    *(_QWORD *)&v11.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v11.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    UIUtil::CreateTextNoSpr(&ui, rkSpec->kInterface.pcDesc, &byte_9AE032, COERCE_D3DXCOLOR(v11.r), 4u);
    *(_QWORD *)&v12.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v12.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    UIUtil::CreateTextNoSpr(&ui, rkSpec->kInterface.pcNextTxt, &byte_9AE033, COERCE_D3DXCOLOR(v12.r), 4u);
    *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    UIUtil::CreateTextNoSpr(&ui, rkSpec->kInterface.pcNextDesc, &byte_9AE034, COERCE_D3DXCOLOR(v13.r), 4u);
    v14 = (PgWin *)UIUtil::CreateSpr(&ui, rkSpec->kInterface.pcIcon, 0);
    IconWin::CreateWin(3, 3, 32, 32, v14);
    v16 = -1;
    UIUtil::_UIUtil(&ui);
    result = 1;
  }
  return result;
}

//----- (0059EF70) --------------------------------------------------------
void __thiscall StatTitleWin::OnCommand(StatTitleWin *this, unsigned int wParam, int lParam)
{
  if ( wParam == 9 || wParam == 10 )
    PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0059EFA0) --------------------------------------------------------
StatTitleListItemWin *__cdecl StatTitleListItemWin::CreateWin(NiAVObject *pkGeom, int iXPos, int iYPos, unsigned int uiListIndex, StatTitleListItemWin::CreateSpec *rkSpec, PgWin *pkParent)
{
  void *v6; // eax@1
  void *v7; // esi@1
  PgWin *v8; // edi@8
  StatTitleListItemWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x120u);
  v7 = v6;
  result.m_pObject = (PgWin *)v6;
  v11 = 0;
  if ( v6 )
  {
    PgWin::PgWin((PgWin *)v6);
    *(_DWORD *)v7 = &StatTitleListItemWin::_vftable_;
    *((_DWORD *)v7 + 58) = &StatTitleListItemWin::_vftable_;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)v7 + 1);
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiAVObject *, int, int, unsigned int, StatTitleListItemWin::CreateSpec *, PgWin *))(*(_DWORD *)v7 + 452))(
                          v7,
                          pkGeom,
                          iXPos,
                          iYPos,
                          uiListIndex,
                          rkSpec,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = (StatTitleListItemWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}
// 9AE270: using guessed type int (__stdcall *StatTitleListItemWin___vftable_)(int uiFlags);
// 9AE28C: using guessed type int (__thiscall *StatTitleListItemWin___vftable_)(void *p, char);

//----- (0059F0F0) --------------------------------------------------------
StatTitleWin *__cdecl StatTitleWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  StatTitleWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x174u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &StatTitleWin::_vftable_;
    *((_DWORD *)v2 + 58) = &StatTitleWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 91) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (StatTitleWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9AE458: using guessed type int (__stdcall *StatTitleWin___vftable_)(int uiFlags);
// 9AE474: using guessed type int (__thiscall *StatTitleWin___vftable_)(void *p, char);

//----- (0059F250) --------------------------------------------------------
bool __thiscall StatTitleWin::Create(StatTitleWin *this, PgFrameWork *pkFrameWork)
{
  StatTitleWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  D3DXCOLOR v8; // ST2C_16@10
  PgWin *v9; // edi@10
  D3DXCOLOR v10; // ST34_16@10
  char *v11; // eax@10
  PgWin *v12; // edi@10
  D3DXCOLOR v13; // ST34_16@10
  char *v14; // eax@10
  D3DXCOLOR v15; // ST34_16@10
  char *v16; // eax@10
  PgSprData *v17; // eax@10
  StatTitleListItemWin *v18; // eax@10
  int v19; // ecx@10
  NiNode *v20; // edx@10
  StatTitleListItemWin *v21; // eax@10
  int v22; // ecx@10
  int v23; // edx@10
  StatTitleListItemWin *v24; // eax@10
  int v25; // edx@10
  NiNode *v26; // ecx@10
  StatTitleListItemWin *v27; // eax@10
  void *(__thiscall *v28)(NiRefObject *, unsigned int); // edx@10
  NiNode *v29; // esi@11
  int rkSpec; // [sp+14h] [bp-4Ch]@10
  int v31; // [sp+18h] [bp-48h]@10
  int v32; // [sp+1Ch] [bp-44h]@10
  int v33; // [sp+20h] [bp-40h]@10
  int v34; // [sp+24h] [bp-3Ch]@10
  int v35; // [sp+28h] [bp-38h]@10
  UIUtil ui; // [sp+2Ch] [bp-34h]@10
  int uiLeft; // [sp+40h] [bp-20h]@10
  int uiTop; // [sp+44h] [bp-1Ch]@10
  int uiXOff; // [sp+48h] [bp-18h]@4
  int uiYOff; // [sp+4Ch] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+50h] [bp-10h]@1
  int v42; // [sp+5Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v42 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\StatTitle.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiXOff, &uiYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "StatTitleWin", 0) )
  {
    v6 = spNode.m_pObject;
    v42 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v42) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, uiXOff, uiYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Plane02", 0);
  UIUtil::CreateBtnNoSpr(&ui, 0xBu, "SelectionName");
  *(_QWORD *)&v8.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v8.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkSelectedStatTitle = UIUtil::CreateText(&ui, "SelectionName", byte_9AE035, 0, COERCE_D3DXCOLOR(v8.r), 5u, 0, 0);
  v9 = (PgWin *)UIUtil::CreateBtn(&ui, 9u, "OkNor", "OkOver", "OkClick", 0, 0);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v11 = TextData::Get(0xA6B4A8DAu);
  UIUtil::CreateAttachedText(&ui, v9, v11, COERCE_D3DXCOLOR(v10.r), 5u);
  v12 = (PgWin *)UIUtil::CreateBtn(&ui, 0xAu, "CancelNor", "CancelOver", "CancelClick", 0, 0);
  *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v14 = TextData::Get(0xE0E7EBE3u);
  UIUtil::CreateAttachedText(&ui, v12, v14, COERCE_D3DXCOLOR(v13.r), 5u);
  UIUtil::CreateBtn(&ui, 0xAu, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  *(_QWORD *)&v15.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v15.b = qword_A746E8;
  v16 = TextData::Get(0x31554C23u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v16, COERCE_D3DXCOLOR(v15.r), 5u);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SelectIcon", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkStatTitleIconWin = IconWin::CreateWin(uiLeft + 3, uiTop + 3, 32, 32, &v2->baseclass_0.baseclass_0.baseclass_0);
  rkSpec = (int)"Title1Icon";
  v31 = (int)"Title1Name";
  v32 = (int)"Title1Rank";
  v33 = (int)"Title1Desc";
  v34 = (int)"Title1NextTxt";
  v35 = (int)"Title1NextDesc";
  v18 = StatTitleListItemWin::CreateWin(
          &spNode.m_pObject->baseclass_0,
          uiXOff,
          uiYOff,
          0,
          (StatTitleListItemWin::CreateSpec *)&rkSpec,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v19 = uiXOff;
  v20 = spNode.m_pObject;
  v2->m_apkListItemWin[0] = v18;
  rkSpec = (int)"Title2Icon";
  v31 = (int)"Title2Name01";
  v32 = (int)"Title2Rank01";
  v33 = (int)"Title2Desc01";
  v34 = (int)"Title2NextTxt01";
  v35 = (int)"Title2NextDesc01";
  v21 = StatTitleListItemWin::CreateWin(
          &v20->baseclass_0,
          v19,
          uiYOff,
          1u,
          (StatTitleListItemWin::CreateSpec *)&rkSpec,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v22 = uiYOff;
  v23 = uiXOff;
  v2->m_apkListItemWin[1] = v21;
  rkSpec = (int)"Title3Icon";
  v31 = (int)"Title3Name02";
  v32 = (int)"Title3Rank02";
  v33 = (int)"Title3Desc02";
  v34 = (int)"Title3NextTxt02";
  v35 = (int)"Title3NextDesc02";
  v24 = StatTitleListItemWin::CreateWin(
          &spNode.m_pObject->baseclass_0,
          v23,
          v22,
          2u,
          (StatTitleListItemWin::CreateSpec *)&rkSpec,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v25 = uiYOff;
  v26 = spNode.m_pObject;
  v2->m_apkListItemWin[2] = v24;
  rkSpec = (int)"Title4Icon";
  v31 = (int)"Title4Name03";
  v32 = (int)"Title4Rank03";
  v33 = (int)"Title4Desc03";
  v34 = (int)"Title4NextTxt03";
  v35 = (int)"Title4NextDesc03";
  v27 = StatTitleListItemWin::CreateWin(
          &v26->baseclass_0,
          uiXOff,
          v25,
          3u,
          (StatTitleListItemWin::CreateSpec *)&rkSpec,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v28 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
  v2->m_apkListItemWin[3] = v27;
  ((void (__thiscall *)(StatTitleWin *, unsigned int, unsigned int, _DWORD, _DWORD))v28)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.79000002,
    0.5);
  LOBYTE(v42) = 0;
  UIUtil::_UIUtil(&ui);
  v42 = -1;
  if ( spNode.m_pObject )
  {
    v29 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v29 )
        v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0059F6E0) --------------------------------------------------------
void *__thiscall StatTitleListItemWin::_vector_deleting_destructor_(StatTitleListItemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatTitleListItemWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatTitleListItemWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AE270: using guessed type int (__stdcall *StatTitleListItemWin___vftable_)(int uiFlags);
// 9AE28C: using guessed type int (__thiscall *StatTitleListItemWin___vftable_)(void *p, char);

//----- (0059F720) --------------------------------------------------------
void *__thiscall StatTitleWin::_vector_deleting_destructor_(StatTitleWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatTitleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatTitleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AE458: using guessed type int (__stdcall *StatTitleWin___vftable_)(int uiFlags);
// 9AE474: using guessed type int (__thiscall *StatTitleWin___vftable_)(void *p, char);

//----- (0059F760) --------------------------------------------------------
void __thiscall StatusWin::StatusWin(StatusWin *this)
{
  StatusWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatusWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatusWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kHpTimer);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kSpTimer);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kHPStoneAlarmTimer);
  v1->m_fStoneAlarmRate = 0.30000001;
  *(_WORD *)&v1->m_bHPStoneAlarmTimer = 256;
  v1->m_uiStoneAlarmLevel = 5;
  v1->m_fLastHPUsedTime = -1.0;
  v1->m_pkNameText = 0;
  v1->m_fLastSPUsedTime = -1.0;
  *(_DWORD *)&v1->m_bHpTimer = 0;
  v1->m_pkPortrait = 0;
  v1->m_pkHPGauge_kr = 0;
  v1->m_pkSPGauge_kr = 0;
  v1->m_pkEXPGauge_kr = 0;
  v1->m_pkHPCoolTimeGauge_kr = 0;
  v1->m_pkSPCoolTimeGauge_kr = 0;
  v1->m_pkHPBarStart = 0;
  v1->m_pkHPBarEnd = 0;
  v1->m_pkSPBarStart = 0;
  v1->m_pkSPBarEnd = 0;
  v1->m_pkLPBarStart = 0;
  v1->m_pkLPBarEnd = 0;
  v1->m_pkLPGauge = 0;
  v1->m_pkLPGauge_kr = 0;
  v1->m_pkLPText = 0;
  v1->m_bUseLP = 0;
}
// 9AE8C4: using guessed type int (__stdcall *StatusWin___vftable_)(int uiFlags);
// 9AE8E4: using guessed type int (__thiscall *StatusWin___vftable_)(void *p, char);

//----- (0059F880) --------------------------------------------------------
void __thiscall StatusWin::_StatusWin(StatusWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatusWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatusWin::_vftable_;
  this->m_pkPortrait = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9AE8C4: using guessed type int (__stdcall *StatusWin___vftable_)(int uiFlags);
// 9AE8E4: using guessed type int (__thiscall *StatusWin___vftable_)(void *p, char);

//----- (0059F8A0) --------------------------------------------------------
void __thiscall StatusWin::OnMouseEvent(StatusWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin)
{
  StatusWin *v3; // esi@1
  unsigned int v4; // eax@3

  v3 = this;
  if ( eMouseEvent == 4 )
  {
    if ( g_pkMainChar )
    {
      v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
      PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0x80u, v4, 0);
    }
  }
  else
  {
    if ( eMouseEvent == 2
      && g_pkMainChar
      && (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) )
      GameFrameWork::TargetCharReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, g_pkMainChar);
  }
}

//----- (0059F920) --------------------------------------------------------
void __thiscall StatusWin::UseHPSoulStone(StatusWin *this)
{
  GameFrameWork::NcSoulStoneHPUseReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0059F930) --------------------------------------------------------
void __thiscall StatusWin::UseSPSoulStone(StatusWin *this)
{
  GameFrameWork::NcSoulStoneSPUseReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (0059F940) --------------------------------------------------------
void __thiscall StatusWin::SetStoneAlarmEnable(StatusWin *this, const bool bEnable)
{
  this->m_bStoneAlarmEnable = bEnable;
}

//----- (0059F950) --------------------------------------------------------
void __thiscall StatusWin::ApplyCharInfo(StatusWin *this)
{
  StatusWin *v1; // esi@1
  NiTexture *v2; // eax@1
  Name5 *v3; // eax@1
  PgWinText *v4; // ecx@1
  char acName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v2 = PortraitTextureBuffer::GetMainCharPortrait(g_pkMainChar);
  MaskedWin::SetBaseTexture(v1->m_pkPortrait, v2);
  v3 = User::GetMainCharID(&g_kUser);
  *(_DWORD *)acName = *(_DWORD *)&v3->n5_name[0];
  *(_DWORD *)&acName[4] = *(_DWORD *)&v3->n5_name[4];
  *(_DWORD *)&acName[8] = *(_DWORD *)&v3->n5_name[8];
  v4 = v1->m_pkNameText;
  *(_DWORD *)&acName[12] = *(_DWORD *)&v3->n5_name[12];
  *(_DWORD *)&acName[16] = *(_DWORD *)&v3->n5_name[16];
  acName[20] = 0;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acName);
}
// A85C00: using guessed type int __security_cookie;

//----- (0059F9D0) --------------------------------------------------------
void __thiscall StatusWin::HPSoulStoneCoolTimeStart(StatusWin *this)
{
  StatusWin *v1; // esi@1
  PgWinCircleGauge *v2; // ecx@1

  v1 = this;
  v2 = this->m_pkHPCoolTimeGauge_kr;
  v1->m_fLastHPUsedTime = Timer::ms_fCurTime;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  PgWinCircleGauge::SetValue(v1->m_pkHPCoolTimeGauge_kr, 1.0, 0.0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059FA10) --------------------------------------------------------
void __thiscall StatusWin::SPSoulStoneCoolTimeStart(StatusWin *this)
{
  StatusWin *v1; // esi@1
  bool v2; // zf@1

  v1 = this;
  v2 = this->m_bUseLP == 0;
  this->m_fLastSPUsedTime = Timer::ms_fCurTime;
  if ( v2 )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkSPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    PgWinCircleGauge::SetValue(v1->m_pkSPCoolTimeGauge_kr, 1.0, 0.0);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0059FA60) --------------------------------------------------------
void __thiscall StatusWin::UpdateStoneAlarm(StatusWin *this, float fCurTime)
{
  StatusWin *v2; // ebx@1
  double v3; // ST10_8@2
  int v4; // esi@4
  signed int v5; // edi@4
  int v6; // esi@10
  int v7; // edi@11
  char v8; // al@11
  signed int fCurTimea; // [sp+24h] [bp+8h]@10

  v2 = this;
  if ( User::Lv(&g_kUser) <= this->m_uiStoneAlarmLevel )
  {
    v3 = (double)User::HP(&g_kUser);
    if ( v2->m_fStoneAlarmRate > v3 / (double)User::MaxHP(&g_kUser) )
    {
      if ( !v2->m_bHPStoneAlarmTimer )
      {
        CNSTimer_Interval::ReSet(&v2->m_kHPStoneAlarmTimer, fCurTime);
        v2->m_kHPStoneAlarmTimer.m_fCheckTime = 1.0;
        v2->m_bHPStoneAlarmTimer = 1;
      }
      if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kHPStoneAlarmTimer, fCurTime) )
      {
        v6 = (int)v2->m_pkHPStoneAlarmText;
        fCurTimea = 2;
        do
        {
          v7 = **(_DWORD **)v6;
          v8 = (*(int (**)(void))(**(_DWORD **)v6 + 260))();
          (*(void (__thiscall **)(_DWORD, _DWORD))(v7 + 256))(*(_DWORD *)v6, v8 == 0);
          if ( v2->m_bStoneAlarmEnable )
            (*(void (**)(void))(**(_DWORD **)v6 + 268))();
          v6 += 4;
          --fCurTimea;
        }
        while ( fCurTimea );
      }
    }
    else
    {
      if ( v2->m_bHPStoneAlarmTimer == 1 )
      {
        v2->m_bHPStoneAlarmTimer = 0;
        v4 = (int)v2->m_pkHPStoneAlarmText;
        v5 = 2;
        do
        {
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0);
          v4 += 4;
          --v5;
        }
        while ( v5 );
      }
    }
  }
}

//----- (0059FB90) --------------------------------------------------------
bool __thiscall StatusWin::CreateKoreaMainGauge(StatusWin *this, PgFrameWork *pkFrameWork)
{
  StatusWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  NiRefObjectVtbl *v8; // edx@16
  int v9; // ebx@16
  NiAVObject *v10; // eax@16
  void *v11; // eax@16
  int v12; // eax@18
  NiSourceTexture *v13; // eax@19
  PgSprData *v14; // eax@20
  PgWinSpr *v15; // eax@20
  PgSprData *v16; // eax@20
  NiShader *v17; // eax@20
  NiShader *v18; // eax@20
  MaskedWin *v19; // eax@20
  NiNode *v20; // ecx@20
  PgSprData *v21; // eax@20
  PgWinSpr *v22; // eax@20
  char v23; // al@20
  PgSprData *v24; // eax@22
  PgWinSpr *v25; // eax@22
  PgFont *v26; // eax@25
  PgWinText *v27; // eax@25
  PgFont *v28; // eax@26
  PgWinText *v29; // eax@26
  int v30; // eax@26
  char *v31; // eax@27
  PgSprData *v32; // eax@27
  PgWinSpr *v33; // eax@27
  NiTexturePalette *v34; // ecx@27
  NiShader *v35; // eax@28
  NiShader *v36; // eax@28
  PgWinCircleGauge *v37; // eax@28
  NiNode *v38; // ecx@28
  PgSprData *v39; // eax@28
  PgSprData *v40; // eax@28
  PgSprData *v41; // eax@31
  char *v42; // eax@31
  PgWinSpr *v43; // eax@33
  NiNode *v44; // ecx@33
  NiShader *v45; // eax@33
  NiShader *v46; // eax@33
  PgWinCircleGauge *v47; // eax@33
  PgWin *v48; // ST54_4@33
  PgFont *v49; // ST50_4@33
  unsigned int v50; // ST4C_4@33
  unsigned int v51; // eax@33
  PgWinText *v52; // eax@33
  PgSprData *v53; // eax@34
  PgSprData *v54; // eax@34
  char *v55; // eax@34
  PgSprData *v56; // eax@34
  PgWinSpr *v57; // eax@34
  NiShader *v58; // eax@34
  NiShader *v59; // eax@34
  PgWinCircleGauge *v60; // eax@34
  PgWin *v61; // ST50_4@34
  PgFont *v62; // ST4C_4@34
  unsigned int v63; // ST48_4@34
  unsigned int v64; // eax@34
  PgWinText *v65; // eax@34
  PgSprData *v66; // eax@34
  PgSprData *v67; // eax@34
  PgWinBar *v68; // eax@34
  PgSprData *v69; // eax@34
  PgWinBar *v70; // eax@34
  PgSprData *v71; // eax@34
  PgWinBar *v72; // eax@34
  PgSprData *v73; // eax@34
  PgWinBar *v74; // eax@34
  NiShader *v75; // eax@34
  PgSprData *v76; // eax@34
  PgWinBar *v77; // eax@34
  NiNode *v78; // ecx@34
  NiShader *v79; // eax@34
  PgSprData *v80; // eax@34
  PgWinBar *v81; // eax@34
  NiNode *v82; // ecx@34
  PgSprData *v83; // eax@34
  PgWinBar *v84; // eax@34
  PgSprData *v85; // eax@34
  PgWinBar *v86; // eax@34
  NiShader *v87; // eax@34
  PgSprData *v88; // eax@34
  PgFont *v89; // eax@35
  PgFont *v90; // eax@35
  PgWinText *v91; // eax@35
  PgWinText *v92; // ecx@35
  PgFont *v93; // eax@36
  PgWinText *v94; // eax@36
  int v95; // eax@36
  PgWinText *v96; // ecx@36
  int v97; // eax@36
  bool v98; // zf@36
  int v99; // eax@37
  PgWinText *v100; // ecx@37
  int v101; // edi@44
  int v102; // edi@47
  PgWinBut *v103; // edi@50
  PgWin *v104; // ST50_4@50
  PgFont *v105; // ST4C_4@50
  unsigned int v106; // ST48_4@50
  unsigned int v107; // ST44_4@50
  int v108; // ST40_4@50
  int v109; // eax@50
  PgWinText *v110; // eax@50
  PgWinBut *v111; // edi@50
  PgWin *v112; // ST50_4@50
  PgFont *v113; // ST4C_4@50
  unsigned int v114; // ST48_4@50
  unsigned int v115; // ST44_4@50
  int v116; // ST40_4@50
  int v117; // eax@50
  PgWinText *v118; // eax@50
  NiRefObjectVtbl *v119; // edi@50
  char *v120; // eax@50
  NiRefObjectVtbl *v121; // edi@50
  char *v122; // eax@50
  NiRefObjectVtbl *v123; // edi@50
  char *v124; // eax@50
  NiRefObjectVtbl *v125; // edi@50
  char *v126; // eax@50
  char *v127; // [sp+58h] [bp-90h]@29
  unsigned int v128; // [sp+5Ch] [bp-8Ch]@1
  int v129; // [sp+5Ch] [bp-8Ch]@39
  int v130; // [sp+5Ch] [bp-8Ch]@42
  int v131; // [sp+5Ch] [bp-8Ch]@45
  int v132; // [sp+5Ch] [bp-8Ch]@48
  tagSIZE kSize; // [sp+6Ch] [bp-7Ch]@50
  NiAVObject *pkObject; // [sp+74h] [bp-74h]@27
  int v135; // [sp+78h] [bp-70h]@27
  UIUtil ui; // [sp+7Ch] [bp-6Ch]@20
  NiPointer<NiTexturingProperty> spTexProp; // [sp+90h] [bp-58h]@16
  unsigned int uiHeight; // [sp+94h] [bp-54h]@22
  unsigned int uiWidth; // [sp+98h] [bp-50h]@22
  int iOffY; // [sp+9Ch] [bp-4Ch]@16
  NiTexturePalette *pkSprData; // [sp+A0h] [bp-48h]@7
  int uiOrgX; // [sp+A4h] [bp-44h]@10
  int uiOrgY; // [sp+A8h] [bp-40h]@10
  NiPointer<NiNode> spNode; // [sp+ACh] [bp-3Ch]@1
  int uiTop; // [sp+B0h] [bp-38h]@20
  int uiLeft; // [sp+B4h] [bp-34h]@20
  char acText[32]; // [sp+B8h] [bp-30h]@50
  unsigned int v148; // [sp+D8h] [bp-10h]@1
  int v149; // [sp+E4h] [bp-4h]@1
  int v150; // [sp+E8h] [bp+0h]@1

  v148 = (unsigned int)&v150 ^ __security_cookie;
  v128 = (unsigned int)&v150 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v149 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v149 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  pkSprData = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\MainGauge.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, pkSprData);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiOrgX, &uiOrgY, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, uiOrgX, uiOrgY, v6, 0, pkFrameWork, "StatusWin", 0) )
  {
    v7 = spNode.m_pObject;
    v149 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    return 0;
  }
  v8 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = uiOrgX;
  iOffY = uiOrgY;
  v10 = (NiAVObject *)((int (__stdcall *)(_DWORD))v8[18].__vecDelDtor)("EventPanel");
  v11 = NiAVObject::GetProperty(v10, 8);
  spTexProp.m_pObject = (NiTexturingProperty *)v11;
  if ( v11 )
  {
    InterlockedIncrement((volatile LONG *)v11 + 1);
    v11 = spTexProp.m_pObject;
  }
  v12 = **((_DWORD **)v11 + 10);
  LOBYTE(v149) = 1;
  if ( !v12 || (v13 = *(NiSourceTexture **)(v12 + 4)) == 0 )
  {
LABEL_24:
    LOBYTE(v149) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v149 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EventPanel", &uiLeft, &uiTop, v13);
  v15 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    v15,
    0,
    v128);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Face_panel", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(-uiOrgX, -uiOrgY, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v17 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("FaceCut_Mask");
  v18 = CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v17);
  v19 = MaskedWin::CreateWin(-uiOrgX, -uiOrgY, (NiTriShape *)v18, &v2->baseclass_0.baseclass_0.baseclass_0);
  v20 = spNode.m_pObject;
  v2->m_pkPortrait = v19;
  v21 = PgSprData::Create(&v20->baseclass_0, "FaceCut_Mon", &uiLeft, &uiTop, v3);
  v22 = PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMobPortrait = v22;
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  pkSprData = (NiTexturePalette *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  UIUtil::UIUtil(&ui);
  LOBYTE(v149) = 2;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, uiOrgX, uiOrgY);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v23 = User::GetMainCharClass(&g_kUser);
  if ( CharClass::GetBaseClassID(v23) == 26 )
    v2->m_bUseLP = 1;
  PgWinBut::CreateWin(
    uiLeft - v9,
    uiTop - iOffY,
    (PgSprData *)pkSprData,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    0xBu,
    0,
    0);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "LPground", &uiLeft, &uiTop, 0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Chief_Party", &uiLeft, &uiTop, v3);
  v25 = PgWinSpr::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkPtyChiefWin = v25;
  ((void (__thiscall *)(PgWinSpr *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v25);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Num_Level", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_53;
  v26 = Font::Get(SMALL);
  v27 = PgWinText::CreateWin(
          uiLeft - uiOrgX,
          uiTop - uiOrgY - 2,
          uiWidth,
          uiHeight,
          v26,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkLevelText = v27;
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v27,
    (unsigned int)&unk_9AE6A7);
  ((void (__stdcall *)(signed int))v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  ((void (__stdcall *)(_DWORD))v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CharName", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_53;
  v28 = Font::Get(SMALL);
  v29 = PgWinText::CreateWin(
          uiLeft - uiOrgX,
          uiTop - uiOrgY,
          uiWidth,
          uiHeight,
          v28,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkNameText = v29;
  ((void (__thiscall *)(PgWinText *, _UNKNOWN *, _DWORD))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
    v29,
    &unk_9AE6AE,
    0);
  ((void (__stdcall *)(signed int))v2->m_pkNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(4);
  ((void (__stdcall *)(_DWORD))v2->m_pkNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v30 = 0;
  pkSprData = (NiTexturePalette *)v2->m_apkHigherExpWin;
  do
  {
    pkObject = (NiAVObject *)spNode.m_pObject;
    v135 = v30 + 1;
    v31 = fs("Exp%02d");
    v32 = PgSprData::Create(pkObject, v31, &uiLeft, &uiTop, v3);
    v33 = PgWinSpr::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkSprData->baseclass_0.vfptr = (NiRefObjectVtbl *)v33;
    v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v33,
      1u);
    PgWin::SetToolTipWinText((PgWin *)pkSprData->baseclass_0.vfptr, &byte_9AE6AF);
    v34 = pkSprData;
    pkSprData->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkToolTipWin;
    v30 = v135;
    pkSprData = (NiTexturePalette *)((char *)v34 + 4);
  }
  while ( v135 < 9 );
  v35 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Fill_Exp");
  v36 = CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v35);
  v37 = PgWinCircleGauge::CreateWin(
          -uiOrgX,
          -uiOrgY,
          (NiTriShape *)v36,
          0,
          0.0,
          360.0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v38 = spNode.m_pObject;
  v2->m_pkEXPGauge_kr = v37;
  v39 = PgSprData::Create(&v38->baseclass_0, "Panel05", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v127 = v2->m_bUseLP ? "LPground" : "SPground";
  UIUtil::CreateSpr(&ui, v127, 0);
  v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SP_Panel", &uiLeft, &uiTop, v3);
  v2->m_pkSPStonBut = PgWinBut::CreateWin(
                        uiLeft - uiOrgX,
                        uiTop - uiOrgY,
                        v41,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0xAu,
                        0,
                        0);
  v42 = TextData::Get(0xF206404Fu);
  PgWin::SetToolTipWinText(&v2->m_pkSPStonBut->baseclass_0.baseclass_0, v42);
  v2->m_pkSPStonBut->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  if ( v2->m_bUseLP )
  {
    v2->m_apkLPLight = UIUtil::CreateSpr(&ui, "LPLight", 0);
  }
  else
  {
    v43 = UIUtil::CreateSpr(&ui, "SPLight", 0);
    v44 = spNode.m_pObject;
    v2->m_apkSPLight = v43;
    v45 = (NiShader *)((int (__stdcall *)(_DWORD))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SPCoolTime");
    v46 = CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v45);
    v47 = PgWinCircleGauge::CreateWin(
            -uiLeft,
            -uiTop,
            (NiTriShape *)v46,
            0,
            0.0,
            360.0,
            &v2->m_pkSPStonBut->baseclass_0.baseclass_0);
    v2->m_pkSPCoolTimeGauge_kr = v47;
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v47,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkSprData = (NiTexturePalette *)v2->m_pkSPStonBut;
    v48 = (PgWin *)pkSprData;
    v49 = Font::Get(MENU);
    v50 = ((int (*)(void))pkSprData->baseclass_0.vfptr[37].__vecDelDtor)();
    v51 = ((int (*)(void))pkSprData->baseclass_0.vfptr[36].__vecDelDtor)();
    v52 = PgWinText::CreateWin(0, 0, v51, v50, v49, v48, 0, 0);
    v2->m_pkSPSoulStoneText = v52;
    v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v52,
      5u);
    SpScreenText::SetShadowOffset(&v2->m_pkSPSoulStoneText->m_spTextGeom.m_pObject->baseclass_0, 1u);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v53 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v53, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HP_Panel", &uiLeft, &uiTop, v3);
  v2->m_pkHPStonBut = PgWinBut::CreateWin(
                        uiLeft - uiOrgX,
                        uiTop - uiOrgY,
                        v54,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        9u,
                        0,
                        0);
  v55 = TextData::Get(0xF2FB404Fu);
  PgWin::SetToolTipWinText(&v2->m_pkHPStonBut->baseclass_0.baseclass_0, v55);
  v2->m_pkHPStonBut->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v56 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HPLight", &uiLeft, &uiTop, v3);
  v57 = PgWinSpr::CreateWin(0, 0, v56, &v2->m_pkHPStonBut->baseclass_0.baseclass_0, 0, 0);
  v2->m_apkHPLight = v57;
  ((void (__thiscall *)(PgWinSpr *))v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v57);
  v58 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HPCoolTime");
  v59 = CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v58);
  v60 = PgWinCircleGauge::CreateWin(
          -uiLeft,
          -uiTop,
          (NiTriShape *)v59,
          0,
          0.0,
          360.0,
          &v2->m_pkHPStonBut->baseclass_0.baseclass_0);
  v2->m_pkHPCoolTimeGauge_kr = v60;
  v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v60,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkSprData = (NiTexturePalette *)v2->m_pkHPStonBut;
  v61 = (PgWin *)pkSprData;
  v62 = Font::Get(MENU);
  v63 = ((int (*)(void))pkSprData->baseclass_0.vfptr[37].__vecDelDtor)();
  v64 = ((int (*)(void))pkSprData->baseclass_0.vfptr[36].__vecDelDtor)();
  v65 = PgWinText::CreateWin(0, 0, v64, v63, v62, v61, 0, 0);
  v2->m_pkHPSoulStoneText = v65;
  v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v65,
    5u);
  SpScreenText::SetShadowOffset(&v2->m_pkHPSoulStoneText->m_spTextGeom.m_pObject->baseclass_0, 1u);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v66 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v66, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v67 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_03", &uiLeft, &uiTop, v3);
  v68 = PgWinBar::CreateWin(uiLeft - v9, uiTop - iOffY, v67, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkSPBarEnd = (PgWinSpr *)v68;
  v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v68,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_01", &uiLeft, &uiTop, v3);
  v70 = PgWinBar::CreateWin(uiLeft - v9, uiTop - iOffY, v69, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkSPBarStart = (PgWinSpr *)v70;
  v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v70,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v71 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_01", &uiLeft, &uiTop, v3);
  v72 = PgWinBar::CreateWin(uiLeft - v9, uiTop - iOffY, v71, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkHPBarStart = (PgWinSpr *)v72;
  v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v72,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v73 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_03", &uiLeft, &uiTop, v3);
  v74 = PgWinBar::CreateWin(uiLeft - v9, uiTop - iOffY, v73, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkHPBarEnd = (PgWinSpr *)v74;
  v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v74,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v75 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Fill_SP");
  CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v75);
  v76 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_02", &uiLeft, &uiTop, 0);
  v77 = PgWinBar::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v76, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v78 = spNode.m_pObject;
  v2->m_pkSPGauge_kr = v77;
  v79 = (NiShader *)((int (__stdcall *)(_DWORD))v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Fill_HP");
  CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v79);
  v80 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_02", &uiLeft, &uiTop, 0);
  v81 = PgWinBar::CreateWin(uiLeft - uiOrgX, uiTop - uiOrgY, v80, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v82 = spNode.m_pObject;
  v2->m_pkHPGauge_kr = v81;
  v83 = PgSprData::Create(&v82->baseclass_0, "Fill_LP_03", &uiLeft, &uiTop, v3);
  v84 = PgWinBar::CreateWin(uiLeft - v9, uiTop - iOffY, v83, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkLPBarEnd = (PgWinSpr *)v84;
  v84->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v84,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v85 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_01", &uiLeft, &uiTop, v3);
  v86 = PgWinBar::CreateWin(uiLeft - v9, uiTop - iOffY, v85, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkLPBarStart = (PgWinSpr *)v86;
  v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v86,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v87 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Fill_LP");
  CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v87);
  v88 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_02", &uiLeft, &uiTop, 0);
  v2->m_pkLPGauge_kr = PgWinBar::CreateWin(
                         uiLeft - uiOrgX,
                         uiTop - uiOrgY,
                         v88,
                         &v2->baseclass_0.baseclass_0.baseclass_0,
                         BGT_RIGHT);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Num_SP", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v89 = Font::Get(SMALL),
        v2->m_pkSPText = PgWinText::CreateWin(
                           uiLeft - uiOrgX,
                           uiTop - uiOrgY,
                           uiWidth,
                           uiHeight,
                           v89,
                           &v2->baseclass_0.baseclass_0.baseclass_0,
                           0,
                           0),
        v90 = Font::Get(SMALL),
        v91 = PgWinText::CreateWin(
                uiLeft - uiOrgX,
                uiTop - uiOrgY,
                uiWidth,
                uiHeight,
                v90,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v92 = v2->m_pkSPText,
        v2->m_pkLPText = v91,
        ((void (__stdcall *)(signed int))v92->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5),
        ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor),
        ((void (__stdcall *)(signed int))v2->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5),
        ((void (__stdcall *)(_DWORD))v2->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)("Ÿžž>¡  >�€€="),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Num_HP", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_53:
    LOBYTE(v149) = 1;
    UIUtil::_UIUtil(&ui);
    goto LABEL_24;
  }
  v93 = Font::Get(SMALL);
  v94 = PgWinText::CreateWin(
          uiLeft - uiOrgX,
          uiTop - uiOrgY - 2,
          uiWidth,
          uiHeight,
          v93,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkHPText = v94;
  ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v94->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v94,
    5,
    0);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  v95 = ((int (*)(void))v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v96 = v2->m_pkHPSoulStoneText;
  v2->m_bHpTextPosX = v95;
  v97 = ((int (*)(void))v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v98 = v2->m_bUseLP == 0;
  v2->m_bHpTextPosY = v97;
  if ( v98 )
  {
    v99 = ((int (*)(void))v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v100 = v2->m_pkSPSoulStoneText;
    v2->m_bSpTextPosX = v99;
    v2->m_bSpTextPosY = ((int (*)(void))v100->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  }
  v129 = User::HP(&g_kUser) > 0;
  ((void (__stdcall *)(int))v2->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v129);
  v130 = User::SP(&g_kUser) > 0;
  ((void (__stdcall *)(int))v2->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v130);
  v101 = User::HP(&g_kUser);
  v131 = v101 == User::MaxHP(&g_kUser);
  ((void (__stdcall *)(int))v2->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v131);
  v102 = User::SP(&g_kUser);
  v132 = v102 == User::MaxSP(&g_kUser);
  ((void (__cdecl *)(int))v2->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v132);
  v103 = v2->m_pkHPStonBut;
  v104 = (PgWin *)v2->m_pkHPStonBut;
  v105 = Font::Get(LARGEBOLD);
  v106 = ((int (__thiscall *)(PgWinBut *))v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v103);
  v107 = ((int (__thiscall *)(PgWinBut *))v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v103);
  v108 = ((int (__thiscall *)(PgWinBut *))v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v103);
  v109 = ((int (__thiscall *)(PgWinBut *))v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v103);
  v110 = PgWinText::CreateWin(v109, v108, v107, v106, v105, v104, 0, 0);
  v2->m_pkHPStoneAlarmText[0] = v110;
  v110->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v110,
    (unsigned int)&unk_9AE6BA);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkHPStoneAlarmText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGreenColor);
  ((void (__stdcall *)(signed int))v2->m_pkHPStoneAlarmText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(8);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPStoneAlarmText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPStoneAlarmText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(tagSIZE *))v2->m_pkHPStoneAlarmText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(&kSize);
  v111 = v2->m_pkHPStonBut;
  v112 = (PgWin *)v2->m_pkHPStonBut;
  v113 = Font::Get(GTFONT);
  v114 = ((int (__thiscall *)(PgWinBut *))v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v111);
  v115 = ((int (__thiscall *)(PgWinBut *))v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v111);
  v116 = ((int (__thiscall *)(PgWinBut *))v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v111);
  v117 = ((int (__thiscall *)(PgWinBut *))v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v111);
  v118 = PgWinText::CreateWin(kSize.cx + v117, v116, v115, v114, v113, v112, 0, 0);
  v2->m_pkHPStoneAlarmText[1] = v118;
  v119 = v118->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v120 = TextData2::Get(0x30553DAEu);
  v119[118].__vecDelDtor((NiRefObject *)v2->m_pkHPStoneAlarmText[1], (unsigned int)v120);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkHPStoneAlarmText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  ((void (__stdcall *)(signed int))v2->m_pkHPStoneAlarmText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(8);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPStoneAlarmText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPStoneAlarmText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  User::HP(&g_kUser);
  sprintf(acText, "%u");
  v121 = v2->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::MaxHP(&g_kUser);
  User::HP(&g_kUser);
  v122 = fs("%d/%d");
  v121[118].__vecDelDtor((NiRefObject *)v2->m_pkHPText, (unsigned int)v122);
  User::SP(&g_kUser);
  sprintf(acText, "%u");
  v123 = v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::MaxSP(&g_kUser);
  User::SP(&g_kUser);
  v124 = fs("%d/%d");
  v123[118].__vecDelDtor((NiRefObject *)v2->m_pkSPText, (unsigned int)v124);
  v125 = v2->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::MaxLP(&g_kUser);
  User::LP(&g_kUser);
  v126 = fs("%d/%d");
  v125[118].__vecDelDtor((NiRefObject *)v2->m_pkLPText, (unsigned int)v126);
  LOBYTE(v149) = 1;
  UIUtil::_UIUtil(&ui);
  LOBYTE(v149) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
  v149 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005A0D30) --------------------------------------------------------
void __thiscall StatusWin::ProcessMeInput(StatusWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1
  signed int v3; // edi@2
  PgWin **v4; // esi@6
  __int64 v5; // qax@8
  __int64 v6; // kr00_8@8
  __int64 v7; // qax@8
  __int64 v8; // kr08_8@8
  char *v9; // eax@8
  char *v10; // eax@8
  bool v11; // zf@10
  signed int v12; // [sp+14h] [bp-8h]@6
  PgWin **bHita; // [sp+24h] [bp+8h]@6

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    v3 = 1;
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    v4 = (PgWin **)&v2[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
    bHita = v4;
    v12 = 9;
    do
    {
      if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                              PgWin::ms_iMsX.x,
                              PgWin::ms_iMsY) )
      {
        v5 = User::NextExp(&g_kUser);
        v6 = v5 - User::PrevExp(&g_kUser);
        v7 = User::CurExp(&g_kUser);
        v8 = v7 - User::PrevExp(&g_kUser);
        v9 = TextData2::Get(0x124B393Cu);
        v10 = fs(v9);
        PgWin::SetToolTipWinText(*bHita, v10);
        v4 = bHita;
        v3 = 1;
      }
      else
      {
        PgWin::SetToolTipWinText(*v4, &byte_9AE6BB);
      }
      ++v4;
      v11 = v12 == v3;
      v12 -= v3;
      bHita = v4;
    }
    while ( !v11 );
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      PgWin::ms_kbRbutPressed.m_iBool -= v3;
    byte_B7034C = 0;
    if ( dword_B70350 )
      dword_B70350 -= v3;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (005A0EA0) --------------------------------------------------------
void __thiscall StatusWin::UpdateMeWin_kr(StatusWin *this, float fCurTime)
{
  StatusWin *v2; // esi@1
  __int64 v3; // qax@1
  __int64 v4; // qax@1
  __int64 v5; // kr08_8@1
  float v6; // ST5C_4@2
  float v7; // ST58_4@8
  long double v8; // st7@5
  signed int v9; // ebx@5
  float v10; // ST58_4@8
  signed int v11; // eax@8
  int v12; // edi@9
  int v13; // edi@13
  int v14; // ebx@13
  PgSpr *v15; // edi@16
  NiTexture *v16; // eax@16
  NiTexture *v17; // eax@17
  Name5 *v18; // eax@18
  PgWinText *v19; // ecx@18
  PgWinSpr *v20; // ecx@19
  void *(__thiscall *v21)(NiRefObject *, unsigned int); // edx@19
  PgWinSpr *v22; // ecx@23
  bool v23; // al@23
  void *(__thiscall *v24)(NiRefObject *, unsigned int); // edx@23
  PgWinSpr *v25; // ecx@30
  void *(__thiscall *v26)(NiRefObject *, unsigned int); // edx@30
  PgWinSpr *v27; // ecx@34
  bool v28; // al@34
  void *(__thiscall *v29)(NiRefObject *, unsigned int); // edx@34
  Name5 *v30; // eax@43
  PgWinCircleGauge *v31; // ecx@50
  float v32; // ST58_4@51
  float v33; // ST58_4@55
  signed int v34; // [sp+3Ch] [bp-74h]@40
  int v35; // [sp+40h] [bp-70h]@0
  signed int v36; // [sp+40h] [bp-70h]@16
  int v37; // [sp+40h] [bp-70h]@18
  int v38; // [sp+40h] [bp-70h]@19
  D3DXCOLOR *v39; // [sp+40h] [bp-70h]@24
  int v40; // [sp+40h] [bp-70h]@30
  D3DXCOLOR *v41; // [sp+40h] [bp-70h]@35
  __int64 fExpRateTmp; // [sp+54h] [bp-5Ch]@1
  float fExpRateTmp_4; // [sp+58h] [bp-58h]@49
  float fExpRateTmp_4a; // [sp+58h] [bp-58h]@50
  float fExpRateTmp_4b; // [sp+58h] [bp-58h]@54
  float fExpRate; // [sp+5Ch] [bp-54h]@2
  signed int fExpRatea; // [sp+5Ch] [bp-54h]@9
  Name5 kMasterID; // [sp+60h] [bp-50h]@39
  char acName[21]; // [sp+74h] [bp-3Ch]@18
  char acText[32]; // [sp+8Ch] [bp-24h]@1
  unsigned int v51; // [sp+ACh] [bp-4h]@1
  int v52; // [sp+B0h] [bp+0h]@1

  v51 = (unsigned int)&v52 ^ __security_cookie;
  v2 = this;
  User::Lv(&g_kUser);
  sprintf(acText, "%u");
  ((void (__stdcall *)(_DWORD))v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acText);
  v3 = User::NextExp(&g_kUser);
  fExpRateTmp = v3 - User::PrevExp(&g_kUser);
  v4 = User::CurExp(&g_kUser);
  v5 = v4 - User::PrevExp(&g_kUser);
  if ( fExpRateTmp )
  {
    v6 = (double)v5 * 100.0;
    fExpRate = v6 / (double)fExpRateTmp;
  }
  else
  {
    fExpRate = 0.0;
  }
  if ( fExpRate > 0.0 )
  {
    v8 = 10.0;
    v9 = (signed __int64)(fExpRate / 10.0);
    if ( (unsigned int)v9 > 9 )
      v9 = 9;
  }
  else
  {
    v8 = 10.0;
    v9 = 0;
  }
  v7 = fExpRate + 0.0;
  v10 = fmod(v7, v8);
  PgWinCircleGauge::SetValue(v2->m_pkEXPGauge_kr, 10.0, v10);
  v11 = 0;
  if ( v9 )
  {
    v12 = (int)v2->m_apkHigherExpWin;
    fExpRatea = v9;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 276))(1.0);
      v12 += 4;
      --fExpRatea;
    }
    while ( fExpRatea );
    if ( (unsigned int)v9 >= 9 )
      goto LABEL_15;
    v11 = v9;
  }
  v13 = (int)&v2->m_apkHigherExpWin[v11];
  v14 = 9 - v11;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v13 + 276))(0.0);
    v13 += 4;
    --v14;
  }
  while ( v14 );
LABEL_15:
  if ( (unsigned __int8)((int (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)(v35) )
  {
    v15 = v2->m_pkMobPortrait->m_spSpr.m_pObject;
    v16 = PortraitTextureBuffer::GetMainCharPortrait(g_pkMainChar);
    PgSpr::SetTexture(v15, v16);
    ((void (__stdcall *)(signed int))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v36 = 0;
  }
  else
  {
    v17 = PortraitTextureBuffer::GetMainCharPortrait(g_pkMainChar);
    MaskedWin::SetBaseTexture(v2->m_pkPortrait, v17);
    ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v36 = 1;
  }
  ((void (__cdecl *)(signed int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v36);
  v18 = User::GetMainCharID(&g_kUser);
  *(_DWORD *)acName = *(_DWORD *)&v18->n5_name[0];
  *(_DWORD *)&acName[4] = *(_DWORD *)&v18->n5_name[4];
  *(_DWORD *)&acName[8] = *(_DWORD *)&v18->n5_name[8];
  v19 = v2->m_pkNameText;
  *(_DWORD *)&acName[12] = *(_DWORD *)&v18->n5_name[12];
  *(_DWORD *)&acName[16] = *(_DWORD *)&v18->n5_name[16];
  acName[20] = 0;
  ((void (__stdcall *)(_DWORD))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acName);
  if ( User::HPStone(&g_kUser) > 1 )
  {
    User::HPStone(&g_kUser);
    sprintf(acText, "%d");
    ((void (__stdcall *)(D3DXCOLOR *, int))v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
      &Color::m_kDxWhiteColor,
      v37);
    SpScreenText::SetShadowOffset(&v2->m_pkHPSoulStoneText->m_spTextGeom.m_pObject->baseclass_0, 1u);
    ((void (__stdcall *)(_DWORD))v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acText);
    ((void (__stdcall *)(int))v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v2->m_bHpTextPosX);
    ((void (__stdcall *)(int))v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v2->m_bHpTextPosY);
    v20 = v2->m_apkHPLight;
    v2->m_bHpTimerStart = 0;
    v21 = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v38 = 0;
LABEL_27:
    ((void (__cdecl *)(int))v21)(v37);
    goto LABEL_28;
  }
  if ( !v2->m_bHpTimerStart )
  {
    CNSTimer_Interval::ReSet(&v2->m_kHpTimer, Timer::ms_fCurTime);
    v2->m_kHpTimer.m_fCheckTime = 0.5;
    v2->m_bHpTimerStart = 1;
  }
  if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kHpTimer, fCurTime) )
  {
    v22 = v2->m_apkHPLight;
    v23 = v2->m_bHpTimer == 0;
    v2->m_bHpTimer = v23;
    v24 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( v23 )
    {
      ((void (__stdcall *)(signed int, int))v24)(1, v37);
      User::HPStone(&g_kUser);
      sprintf(acText, "%d");
      v39 = &Color::m_kDxRedColor;
    }
    else
    {
      ((void (__stdcall *)(_DWORD, int))v24)(0, v37);
      User::HPStone(&g_kUser);
      sprintf(acText, "%d");
      v39 = &Color::m_kDxYellowColor;
    }
    ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v39);
    SpScreenText::SetShadowOffset(&v2->m_pkHPSoulStoneText->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v21 = v2->m_pkHPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v38 = (int)acText;
    goto LABEL_27;
  }
LABEL_28:
  if ( v2->m_bUseLP )
    goto LABEL_39;
  if ( User::SPStone(&g_kUser) > 1 )
  {
    User::SPStone(&g_kUser);
    sprintf(acText, "%d");
    ((void (__stdcall *)(D3DXCOLOR *, int))v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
      &Color::m_kDxWhiteColor,
      v37);
    SpScreenText::SetShadowOffset(&v2->m_pkSPSoulStoneText->m_spTextGeom.m_pObject->baseclass_0, 1u);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acText);
    ((void (__stdcall *)(int))v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v2->m_bHpTextPosX);
    ((void (__stdcall *)(int))v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v2->m_bHpTextPosY);
    v25 = v2->m_apkSPLight;
    v2->m_bSpTimerStart = 0;
    v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v40 = 0;
LABEL_38:
    ((void (__cdecl *)(int))v26)(v40);
    goto LABEL_39;
  }
  if ( !v2->m_bSpTimerStart )
  {
    CNSTimer_Interval::ReSet(&v2->m_kSpTimer, Timer::ms_fCurTime);
    v2->m_kSpTimer.m_fCheckTime = 0.5;
    v2->m_bSpTimerStart = 1;
  }
  if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kSpTimer, fCurTime) )
  {
    v27 = v2->m_apkSPLight;
    v28 = v2->m_bSpTimer == 0;
    v2->m_bSpTimer = v28;
    v29 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( v28 )
    {
      ((void (__stdcall *)(signed int, int))v29)(1, v37);
      User::SPStone(&g_kUser);
      sprintf(acText, "%d");
      SpScreenText::SetShadowOffset(&v2->m_pkSPSoulStoneText->m_spTextGeom.m_pObject->baseclass_0, 1u);
      v41 = &Color::m_kDxRedColor;
    }
    else
    {
      ((void (__stdcall *)(_DWORD, int))v29)(0, v37);
      User::SPStone(&g_kUser);
      sprintf(acText, "%d");
      SpScreenText::SetShadowOffset(&v2->m_pkSPSoulStoneText->m_spTextGeom.m_pObject->baseclass_0, 1u);
      v41 = &Color::m_kDxYellowColor;
    }
    ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v41);
    v26 = v2->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v40 = (int)acText;
    goto LABEL_38;
  }
LABEL_39:
  StatusWin::UpdateStoneAlarm(v2, fCurTime);
  Party::GetPartyMasterID(&g_kParty, &kMasterID);
  if ( g_kRaidinfo.m_bIsMeRaidLeader )
    v34 = 1;
  else
    v34 = g_kParty.m_uiTotalMember
       && !RaidInfo::IsMeRaidMember(&g_kRaidinfo)
       && (v30 = User::GetMainCharID(&g_kUser), *(_QWORD *)&kMasterID == *(_QWORD *)&v30->n5_name[0])
       && *(_QWORD *)&kMasterID.n5_name[8] == *(_QWORD *)&v30->n5_name[8]
       && *(_DWORD *)&kMasterID.n5_name[16] == *(_DWORD *)&v30->n5_name[16];
  ((void (__stdcall *)(signed int))v2->m_pkPtyChiefWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v34);
  if ( !v2->m_bUseLP )
  {
    fExpRateTmp_4 = Timer::ms_fCurTime;
    if ( (unsigned __int8)((int (*)(void))v2->m_pkSPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v31 = v2->m_pkSPCoolTimeGauge_kr;
      fExpRateTmp_4a = (fExpRateTmp_4 - v2->m_fLastSPUsedTime) / 7.0;
      if ( fExpRateTmp_4a > 1.0 )
      {
        ((void (__stdcall *)(_DWORD))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
      else
      {
        v32 = 1.0 - fExpRateTmp_4a;
        PgWinCircleGauge::SetValue(v31, 1.0, v32);
      }
    }
  }
  if ( (unsigned __int8)((int (*)(void))v2->m_pkHPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    fExpRateTmp_4b = (fCurTime - v2->m_fLastHPUsedTime) / 7.0;
    if ( fExpRateTmp_4b > 1.0 )
    {
      v2->m_pkHPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2->m_pkHPCoolTimeGauge_kr,
        0);
    }
    else
    {
      v33 = 1.0 - fExpRateTmp_4b;
      PgWinCircleGauge::SetValue(v2->m_pkHPCoolTimeGauge_kr, 1.0, v33);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005A15F0) --------------------------------------------------------
bool __thiscall StatusWin::TryHPSoulStoneUse(StatusWin *this)
{
  StatusWin *v1; // esi@1
  int v2; // edi@3
  char *v3; // eax@5
  bool result; // al@6
  char *v5; // eax@8

  v1 = this;
  if ( Char::CheckActState(g_pkMainChar, 500000)
    || g_pkMainChar->m_bWillDead
    || (v2 = User::HP(&g_kUser), v2 >= User::MaxHP(&g_kUser)) )
    return 0;
  if ( v1->m_fLastHPUsedTime + 7.0 - 2.0 > Timer::ms_fCurTime )
  {
    v3 = TextData::Get(0xD9132D26u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v3);
    return 0;
  }
  if ( User::HPStone(&g_kUser) )
  {
    result = 1;
  }
  else
  {
    v5 = TextData::Get(0x3A4B3F55u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v5);
    result = 0;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005A16A0) --------------------------------------------------------
bool __thiscall StatusWin::TrySPSoulStoneUse(StatusWin *this)
{
  StatusWin *v1; // esi@1
  int v2; // edi@3
  char *v3; // eax@5
  bool result; // al@6
  char *v5; // eax@8

  v1 = this;
  if ( Char::CheckActState(g_pkMainChar, 500000)
    || g_pkMainChar->m_bWillDead
    || (v2 = User::SP(&g_kUser), v2 >= User::MaxSP(&g_kUser)) )
    return 0;
  if ( v1->m_fLastSPUsedTime + 7.0 - 2.0 > Timer::ms_fCurTime )
  {
    v3 = TextData::Get(0xE4132D26u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v3);
    return 0;
  }
  if ( User::SPStone(&g_kUser) )
  {
    result = 1;
  }
  else
  {
    v5 = TextData::Get(0x4F4C4F99u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v5);
    result = 0;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005A1750) --------------------------------------------------------
void __thiscall StatusWin::OnCmdHPSoul(StatusWin *this)
{
  StatusWin *v1; // esi@1

  v1 = this;
  if ( StatusWin::TryHPSoulStoneUse(this) )
    GameFrameWork::NcSoulStoneHPUseReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (005A1770) --------------------------------------------------------
void __thiscall StatusWin::OnCmdSPSoul(StatusWin *this)
{
  StatusWin *v1; // esi@1

  v1 = this;
  if ( StatusWin::TrySPSoulStoneUse(this) )
    GameFrameWork::NcSoulStoneSPUseReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (005A1790) --------------------------------------------------------
void __thiscall StatusWin::OnCommand(StatusWin *this, unsigned int wParam, int lParam)
{
  StatusWin *v3; // esi@1

  v3 = this;
  switch ( wParam )
  {
    case 9u:
      if ( StatusWin::TryHPSoulStoneUse(this) )
        GameFrameWork::NcSoulStoneHPUseReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      break;
    case 0xAu:
      if ( StatusWin::TrySPSoulStoneUse(this) )
        GameFrameWork::NcSoulStoneSPUseReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      break;
    case 0xBu:
      GameFrameWork::TargetCharReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, g_pkMainChar);
      break;
  }
}

//----- (005A17F0) --------------------------------------------------------
void __thiscall StatusWin::SetStoneAlarmShortcutText(StatusWin *this, const char *pcText)
{
  StatusWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@1
  char *v5; // eax@1
  NiRefObjectVtbl *v6; // edi@1
  int v7; // eax@1
  tagSIZE kSize; // [sp+8h] [bp-8h]@1

  v2 = this;
  v3 = this->m_pkHPStoneAlarmText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = TextData2::Get(0x31947EAFu);
  v5 = fs(v4);
  v3[118].__vecDelDtor((NiRefObject *)v2->m_pkHPStoneAlarmText[0], (unsigned int)v5);
  ((void (__stdcall *)(tagSIZE *))v2->m_pkHPStoneAlarmText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(&kSize);
  v6 = v2->m_pkHPStoneAlarmText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = ((int (*)(void))v2->m_pkHPStonBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v6[43].__vecDelDtor((NiRefObject *)v2->m_pkHPStoneAlarmText[1], kSize.cx + v7);
}

//----- (005A1880) --------------------------------------------------------
bool __thiscall StatusWin::Create(StatusWin *this, PgFrameWork *pkFrameWork)
{
  StatusWin::CreateKoreaMainGauge(this, pkFrameWork);
  return 1;
}

//----- (005A18A0) --------------------------------------------------------
void __thiscall StatusWin::UpdateMeWin(StatusWin *this, float fCurTime)
{
  StatusWin::UpdateMeWin_kr(this, fCurTime);
}

//----- (005A18C0) --------------------------------------------------------
void __thiscall StatusWin::UpdateBars(StatusWin *this)
{
  StatusWin *v1; // esi@1
  int v2; // ST08_4@1
  int v3; // eax@1
  int v4; // ST08_4@1
  int v5; // eax@1
  int v6; // ST08_4@1
  int v7; // eax@1
  NiRefObjectVtbl *v8; // edi@1
  char *v9; // eax@1
  int v10; // edi@6
  bool v11; // bl@9
  int v12; // edi@15
  NiRefObjectVtbl *v13; // edi@20
  char *v14; // eax@20
  int v15; // edi@24
  NiRefObjectVtbl *v16; // edi@27
  char *v17; // eax@27
  int v18; // [sp-4h] [bp-14h]@4
  int v19; // [sp-4h] [bp-14h]@7
  int v20; // [sp-4h] [bp-14h]@13
  int v21; // [sp-4h] [bp-14h]@16
  int v22; // [sp-4h] [bp-14h]@22
  int v23; // [sp-4h] [bp-14h]@25
  int bUseLP; // [sp+Ch] [bp-4h]@0

  v1 = this;
  v2 = User::HP(&g_kUser);
  v3 = User::MaxHP(&g_kUser);
  StatusWin::SetHP(v1, v3, v2);
  v4 = User::SP(&g_kUser);
  v5 = User::MaxSP(&g_kUser);
  StatusWin::SetSP(v1, v5, v4);
  v6 = User::LP(&g_kUser);
  v7 = User::MaxLP(&g_kUser);
  StatusWin::SetLP(v1, v7, v6);
  v8 = v1->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  User::MaxHP(&g_kUser);
  User::HP(&g_kUser);
  v9 = fs("%d/%d");
  v8[118].__vecDelDtor((NiRefObject *)v1->m_pkHPText, (unsigned int)v9);
  LOBYTE(bUseLP) = 0;
  switch ( Char::GetClass(g_pkMainChar) )
  {
    case 0x1A:
    case 0x1B:
      LOBYTE(bUseLP) = 1;
      break;
    default:
      break;
  }
  v18 = User::HP(&g_kUser) > 0;
  ((void (__stdcall *)(int))v1->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v18);
  v10 = User::HP(&g_kUser);
  v19 = v10 == User::MaxHP(&g_kUser);
  ((void (__stdcall *)(int))v1->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v19);
  ((void (__stdcall *)(int))v1->m_pkLPGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP);
  ((void (__stdcall *)(int))v1->m_pkLPGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP);
  ((void (__stdcall *)(int))v1->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP);
  ((void (__stdcall *)(int))v1->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP);
  ((void (__stdcall *)(int))v1->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP);
  ((void (__stdcall *)(int))v1->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP);
  v11 = bUseLP == 0;
  ((void (__stdcall *)(bool))v1->m_pkSPGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP == 0);
  ((void (__stdcall *)(bool))v1->m_pkSPGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP == 0);
  ((void (__stdcall *)(bool))v1->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP == 0);
  ((void (__stdcall *)(bool))v1->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP == 0);
  ((void (__stdcall *)(bool))v1->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP == 0);
  ((void (__stdcall *)(bool))v1->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP == 0);
  ((void (__stdcall *)(bool))v1->m_pkSPStonBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP == 0);
  ((void (__stdcall *)(bool))v1->m_pkSPStonBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP == 0);
  if ( !v1->m_bUseLP )
  {
    ((void (__stdcall *)(bool))v1->m_pkSPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v11);
    ((void (__stdcall *)(bool))v1->m_pkSPCoolTimeGauge_kr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v11);
  }
  ((void (__stdcall *)(bool))v1->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v11);
  ((void (__stdcall *)(bool))v1->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v11);
  ((void (__stdcall *)(int))v1->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bUseLP);
  ((void (__stdcall *)(int))v1->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bUseLP);
  if ( (_BYTE)bUseLP )
  {
    v20 = User::LP(&g_kUser) > 0;
    ((void (__stdcall *)(int))v1->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v20);
    v12 = User::LP(&g_kUser);
    v21 = v12 == User::MaxLP(&g_kUser);
    ((void (__stdcall *)(int))v1->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v21);
    if ( !v1->m_bUseLP )
    {
      ((void (__stdcall *)(bool))v1->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v11);
      ((void (__stdcall *)(bool))v1->m_pkSPSoulStoneText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v11);
    }
    v13 = v1->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::MaxLP(&g_kUser);
    User::LP(&g_kUser);
    v14 = fs("%d/%d");
    v13[118].__vecDelDtor((NiRefObject *)v1->m_pkLPText, (unsigned int)v14);
  }
  else
  {
    v22 = User::SP(&g_kUser) > 0;
    ((void (__stdcall *)(int))v1->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v22);
    v15 = User::SP(&g_kUser);
    v23 = v15 == User::MaxSP(&g_kUser);
    ((void (__stdcall *)(int))v1->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v23);
    v16 = v1->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    User::MaxSP(&g_kUser);
    User::SP(&g_kUser);
    v17 = fs("%d/%d");
    v16[118].__vecDelDtor((NiRefObject *)v1->m_pkSPText, (unsigned int)v17);
  }
}

//----- (005A1CC0) --------------------------------------------------------
StatusWin *__cdecl StatusWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  StatusWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x288u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    StatusWin::StatusWin((StatusWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (StatusWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005A1DF0) --------------------------------------------------------
void __thiscall PgWinCircleGauge::SetValue(PgWinCircleGauge *this, float fMaxVal, float fCurVal)
{
  double v3; // st6@1
  double v4; // st7@4
  float fCurVala; // [sp+Ch] [bp+Ch]@8

  v3 = fMaxVal;
  if ( fMaxVal < 0.0 )
    v3 = (float)0.0;
  if ( fCurVal >= 0.0 )
    v4 = fCurVal;
  else
    v4 = (float)0.0;
  if ( v3 != this->m_fMaxValue || v4 != this->m_fCurValue )
  {
    if ( v3 < v4 )
    {
      fCurVala = v3;
      v4 = fCurVala;
    }
    this->m_fMaxValue = v3;
    this->m_fCurValue = v4;
    PgWinCircleGauge::OnChangeValue(this);
  }
}

//----- (005A1E80) --------------------------------------------------------
void *__thiscall StatusWin::_scalar_deleting_destructor_(StatusWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StatusWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StatusWin::_vftable_;
  this->m_pkPortrait = 0;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AE8C4: using guessed type int (__stdcall *StatusWin___vftable_)(int uiFlags);
// 9AE8E4: using guessed type int (__thiscall *StatusWin___vftable_)(void *p, char);

//----- (005A1EC0) --------------------------------------------------------
void __thiscall StatusWin::SetHP(StatusWin *this, unsigned int uiMax, unsigned int uiCur)
{
  PgWinBar *v3; // ecx@1
  double v4; // st7@3
  float uiMaxa; // [sp+8h] [bp+8h]@1
  float uiCura; // [sp+Ch] [bp+Ch]@1

  v3 = this->m_pkHPGauge_kr;
  uiMaxa = (double)uiMax;
  uiCura = (double)uiCur;
  if ( uiMaxa != v3->m_fMaxValue || uiCura != v3->m_fCurValue )
  {
    v4 = uiCura;
    v3->m_fMaxValue = uiMaxa;
    v3->m_fCurValue = v4;
    PgWinBar::OnChangeValue(v3);
  }
}

//----- (005A1F40) --------------------------------------------------------
void __thiscall StatusWin::SetSP(StatusWin *this, unsigned int uiMax, unsigned int uiCur)
{
  PgWinBar *v3; // ecx@1
  double v4; // st7@3
  float uiMaxa; // [sp+8h] [bp+8h]@1
  float uiCura; // [sp+Ch] [bp+Ch]@1

  v3 = this->m_pkSPGauge_kr;
  uiMaxa = (double)uiMax;
  uiCura = (double)uiCur;
  if ( uiMaxa != v3->m_fMaxValue || uiCura != v3->m_fCurValue )
  {
    v4 = uiCura;
    v3->m_fMaxValue = uiMaxa;
    v3->m_fCurValue = v4;
    PgWinBar::OnChangeValue(v3);
  }
}

//----- (005A1FC0) --------------------------------------------------------
void __thiscall StatusWin::SetLP(StatusWin *this, unsigned int uiMax, unsigned int uiCur)
{
  PgWinBar *v3; // ecx@1
  double v4; // st7@3
  float uiMaxa; // [sp+8h] [bp+8h]@1
  float uiCura; // [sp+Ch] [bp+Ch]@1

  v3 = this->m_pkLPGauge_kr;
  uiMaxa = (double)uiMax;
  uiCura = (double)uiCur;
  if ( uiMaxa != v3->m_fMaxValue || uiCura != v3->m_fCurValue )
  {
    v4 = uiCura;
    v3->m_fMaxValue = uiMaxa;
    v3->m_fCurValue = v4;
    PgWinBar::OnChangeValue(v3);
  }
}

//----- (005A2040) --------------------------------------------------------
void __thiscall StorageTabButWin::StorageTabButWin(StorageTabButWin *this)
{
  StorageTabButWin *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageTabButWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageTabButWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
}
// 9AED88: using guessed type int (__stdcall *StorageTabButWin___vftable_)(int uiFlags);
// 9AEDA4: using guessed type int (__thiscall *StorageTabButWin___vftable_)(void *p, char);

//----- (005A2070) --------------------------------------------------------
void __thiscall StorageTabButWin::_StorageTabButWin(StorageTabButWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9AED88: using guessed type int (__stdcall *StorageTabButWin___vftable_)(int uiFlags);
// 9AEDA4: using guessed type int (__thiscall *StorageTabButWin___vftable_)(void *p, char);

//----- (005A2090) --------------------------------------------------------
bool __thiscall StorageTabButWin::Create(StorageTabButWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  return PgWinBut::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, uiCmdMsg, 0, 0) != 0;
}

//----- (005A20C0) --------------------------------------------------------
void __thiscall StorageInvWin::StorageInvWin(StorageInvWin *this)
{
  StorageInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}
// 9AEFDC: using guessed type int (__stdcall *StorageInvWin___vftable_)(int uiFlags);
// 9AEFFC: using guessed type int (__thiscall *StorageInvWin___vftable_)(void *p, char);

//----- (005A2130) --------------------------------------------------------
void __thiscall StorageInvWin::_StorageInvWin(StorageInvWin *this)
{
  ItemIcon *v1; // esi@1

  v1 = (ItemIcon *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageInvWin::_vftable_;
  Bank::RemoveExtraInv();
  ItemIcon::_ItemIcon(v1);
}
// 9AEFDC: using guessed type int (__stdcall *StorageInvWin___vftable_)(int uiFlags);
// 9AEFFC: using guessed type int (__thiscall *StorageInvWin___vftable_)(void *p, char);

//----- (005A21A0) --------------------------------------------------------
bool __thiscall StorageInvWin::Create(StorageInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  StorageInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (005A21E0) --------------------------------------------------------
void __thiscall StorageInvWin::OnFirstHitWin(StorageInvWin *this)
{
  StorageInvWin *v1; // esi@1
  ItemInfoWin *v2; // edi@2
  Item *v3; // eax@3

  v1 = this;
  if ( ItemIcon::GetItem(&this->baseclass_0) )
  {
    v2 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v2 )
    {
      v3 = ItemIcon::GetItem(&v1->baseclass_0);
      ItemInfoWin::SetItemInfo(v2, v3);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (005A2260) --------------------------------------------------------
void __thiscall StorageWin::OnDrawingMoneyWinOk(StorageWin *this, __int64 i64Money)
{
  PROTO_NC_ITEM_WITHDRAW_REQ kProto; // [sp+0h] [bp-8h]@1

  kProto.cen = i64Money;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x1Eu, &kProto, 8);
}

//----- (005A2290) --------------------------------------------------------
void __thiscall StorageWin::OnDepositMoneyWinOk(StorageWin *this, __int64 i64Money)
{
  PROTO_NC_ITEM_DEPOSIT_REQ kProto; // [sp+0h] [bp-8h]@1

  kProto.cen = i64Money;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x1Cu, &kProto, 8);
}

//----- (005A22C0) --------------------------------------------------------
void __thiscall StorageWin::ResetContents(StorageWin *this)
{
  StorageWin *v1; // ebx@1
  ItemIcon **v2; // esi@1
  signed int v3; // edi@2
  unsigned int v4; // esi@4
  ItemIcon **v5; // edi@4
  Item *v6; // eax@5

  v1 = this;
  v2 = (ItemIcon **)this->m_apkInvWin;
  if ( this->m_apkInvWin[0] )
  {
    v3 = 36;
    do
    {
      ItemIcon::SetItem(*v2, 0, 1);
      ++v2;
      --v3;
    }
    while ( v3 );
    v4 = 0;
    v5 = (ItemIcon **)v1->m_apkInvWin;
    do
    {
      v6 = Bank::Get(v4 + 36 * v1->m_uiCurPage);
      ItemIcon::SetItem(*v5, v6, 1);
      ++v4;
      ++v5;
    }
    while ( v4 < 0x24 );
  }
}

//----- (005A2330) --------------------------------------------------------
void __thiscall StorageWin::OnHelpLink(StorageWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NPCBank");
}

//----- (005A2360) --------------------------------------------------------
bool __thiscall StorageTabButWin::EatDropInstance(StorageTabButWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PgCursor::ms_bKeepDrop = 1;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)();
  return 1;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (005A2380) --------------------------------------------------------
void __thiscall StorageWin::StorageWin(StorageWin *this)
{
  StorageWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageWin::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_uiCurPage = 0;
  v1->m_pkTitleTextWin = 0;
  v1->m_pkMoneyWin = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_apkInvWin[0] = 0;
  v1->m_apkInvWin[1] = 0;
  v1->m_apkInvWin[2] = 0;
  v1->m_apkInvWin[3] = 0;
  v1->m_apkInvWin[4] = 0;
  v1->m_apkInvWin[5] = 0;
  v1->m_apkInvWin[6] = 0;
  v1->m_apkInvWin[7] = 0;
  v1->m_apkInvWin[8] = 0;
  v1->m_apkInvWin[9] = 0;
  v1->m_apkInvWin[10] = 0;
  v1->m_apkInvWin[11] = 0;
  v1->m_apkInvWin[12] = 0;
  v1->m_apkInvWin[13] = 0;
  v1->m_apkInvWin[14] = 0;
  v1->m_apkInvWin[15] = 0;
  v1->m_apkInvWin[16] = 0;
  v1->m_apkInvWin[17] = 0;
  v1->m_apkInvWin[18] = 0;
  v1->m_apkInvWin[19] = 0;
  v1->m_apkInvWin[20] = 0;
  v1->m_apkInvWin[21] = 0;
  v1->m_apkInvWin[22] = 0;
  v1->m_apkInvWin[23] = 0;
  v1->m_apkInvWin[24] = 0;
  v1->m_apkInvWin[25] = 0;
  v1->m_apkInvWin[26] = 0;
  v1->m_apkInvWin[27] = 0;
  v1->m_apkInvWin[28] = 0;
  v1->m_apkInvWin[29] = 0;
  v1->m_apkInvWin[30] = 0;
  v1->m_apkInvWin[31] = 0;
  v1->m_apkInvWin[32] = 0;
  v1->m_apkInvWin[33] = 0;
  v1->m_apkInvWin[34] = 0;
  v1->m_apkInvWin[35] = 0;
  v1->m_pkCopperText = 0;
  v1->m_pkSilverText = 0;
  v1->m_pkGoldText = 0;
  v1->m_pkGemText = 0;
  v1->m_uiCurServerTab = 0;
  v1->m_pkServerNumText = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AF26C: using guessed type int (__stdcall *StorageWin___vftable_)(int uiFlags);
// 9AF28C: using guessed type int (__thiscall *StorageWin___vftable_)(void *p, char);

//----- (005A24F0) --------------------------------------------------------
void __thiscall StorageWin::_StorageWin(StorageWin *this)
{
  StorageWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageWin::_vftable_;
  v2 = (PgWin *)this->m_pkMoneyWin;
  if ( v2 )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v2);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AF26C: using guessed type int (__stdcall *StorageWin___vftable_)(int uiFlags);
// 9AF28C: using guessed type int (__thiscall *StorageWin___vftable_)(void *p, char);

//----- (005A2580) --------------------------------------------------------
void __thiscall StorageWin::ResetPage(StorageWin *this)
{
  this->m_uiCurPage = 0;
  this->m_uiCurServerTab = 0;
  StorageWin::ResetContents(this);
}

//----- (005A25A0) --------------------------------------------------------
void __thiscall StorageWin::OnOk(StorageWin *this)
{
  GameFrameWork::CloseStorageMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005A25B0) --------------------------------------------------------
void __thiscall StorageWin::OnCancel(StorageWin *this)
{
  GameFrameWork::CloseStorageMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005A25C0) --------------------------------------------------------
void __thiscall StorageWin::OnTab1(StorageWin *this)
{
  StorageWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_uiCurPage = 0;
  StorageWin::ResetContents(v1);
}

//----- (005A2620) --------------------------------------------------------
void __thiscall StorageWin::OnTab2(StorageWin *this)
{
  StorageWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_uiCurPage = 1;
  StorageWin::ResetContents(v1);
}

//----- (005A2680) --------------------------------------------------------
void __thiscall StorageWin::OnTab3(StorageWin *this)
{
  StorageWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_uiCurPage = 2;
  StorageWin::ResetContents(v1);
}

//----- (005A26E0) --------------------------------------------------------
void __thiscall StorageWin::OnTab4(StorageWin *this)
{
  StorageWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v1->m_uiCurPage = 3;
  StorageWin::ResetContents(v1);
}

//----- (005A2740) --------------------------------------------------------
void __thiscall StorageWin::OnShowWin(StorageWin *this)
{
  StorageWin *v1; // esi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  StorageWin::OnTab1(v1);
}

//----- (005A2750) --------------------------------------------------------
void __thiscall StorageInvWin::DoAction(StorageInvWin *this)
{
  StorageInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (005A2780) --------------------------------------------------------
void __thiscall StorageInvWin::DoRAction(StorageInvWin *this)
{
  StorageInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (005A27B0) --------------------------------------------------------
void __thiscall StorageWin::RefreshPage(StorageWin *this, char byTargetPage)
{
  StorageWin *v2; // esi@1
  int v3; // eax@5

  v2 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v2->m_uiCurPage = 0;
    v2->m_uiCurServerTab = 0;
LABEL_3:
    StorageWin::ResetContents(v2);
    return;
  }
  if ( (unsigned __int8)byTargetPage < 4u )
    goto LABEL_3;
  v3 = byTargetPage & 3;
  if ( v3 < 0 )
    v3 = ((v3 - 1) | 0xFFFFFFFC) + 1;
  switch ( v3 )
  {
    case 0:
      StorageWin::OnTab1(v2);
      break;
    case 1:
      StorageWin::OnTab2(v2);
      break;
    case 2:
      StorageWin::OnTab3(v2);
      break;
    case 3:
      StorageWin::OnTab4(v2);
      break;
    default:
      return;
  }
}

//----- (005A2840) --------------------------------------------------------
void __thiscall StorageWin::OnInvShiftLClick(StorageWin *this, unsigned int uiInvIndex)
{
  StorageWin *v2; // esi@1
  Item *v3; // edi@1
  GameFrameWork *v4; // ebx@3
  char *v5; // ST0C_4@3
  int v6; // eax@3

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  if ( v3 )
  {
    if ( (unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3) > 1 )
    {
      LOWORD(StorageWin::ms_kFrom) = StorageWin::ms_kFrom & 0x3FF | 0x1800;
      LOWORD(StorageWin::ms_kFrom) = (StorageWin::ms_kFrom ^ (unsigned __int16)((_WORD)uiInvIndex
                                                                              + 36
                                                                              * (LOWORD(v2->m_uiCurPage)
                                                                               + 4 * LOWORD(v2->m_uiCurServerTab)))) & 0x3FF ^ StorageWin::ms_kFrom;
      v4 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
      v5 = TextData::Get(0xFBF1412Eu);
      v6 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      GameFrameWork::OnOpenDivideWin(v4, &v2->baseclass_0.baseclass_0.baseclass_0, 0x19u, v6 - 1, v5, 2u);
    }
  }
}
// A99DCC: using guessed type int StorageWin__ms_kFrom;

//----- (005A2900) --------------------------------------------------------
void __thiscall StorageWin::OnInvRClick(StorageWin *this, unsigned int uiInvIndex)
{
  StorageWin *v2; // edi@1
  Item *v3; // eax@1
  int v4; // ebx@3
  int v5; // esi@3
  unsigned int v6; // eax@6
  char *v7; // eax@7
  __int16 v8; // cx@8
  Item *pkItem; // [sp+4h] [bp-Ch]@1
  ITEM_INVEN kTo; // [sp+8h] [bp-8h]@8
  ITEM_INVEN kFrom; // [sp+Ch] [bp-4h]@8

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  pkItem = v3;
  if ( v3 )
  {
    if ( !PgCursor::ms_pkDrop )
    {
      v4 = v3->m_kStruct.itemid;
      v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v4) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) && *(_DWORD *)(*(_DWORD *)(v5 + 196) + 4 * v4) )
        {
          v6 = Inventory::GetInvIdxLotIsNotMax(&g_kInventory, pkItem);
          if ( v6 == -1 )
          {
            v7 = TextData::Get(0x91A8CDCEu);
            GameFrameWork::AddSysMsg((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v7);
          }
          else
          {
            v8 = ((_WORD)uiInvIndex + 36 * (LOWORD(v2->m_uiCurPage) + 4 * LOWORD(v2->m_uiCurServerTab))) & 0x3FF;
            kTo.Inven = v6 & 0x3FF | 0x2400;
            kFrom.Inven = v8 | 0x1800;
            if ( ((v6 & 0x3FF | 0x2400) & 0x3FF) != -1 )
            {
              GameFrameWork::NcItemRelocReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, &kFrom, &kTo);
              SoundMgr::PlayItemPutSound(&g_kSoundMgr, pkItem->m_kStruct.itemid);
            }
          }
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005A2A30) --------------------------------------------------------
void __thiscall StorageWin::OnDeposit(StorageWin *this)
{
  StorageWin *v1; // esi@1
  MoneyWin *v2; // ecx@1
  char *v3; // eax@2
  char *v4; // eax@2

  v1 = this;
  v2 = this->m_pkMoneyWin;
  if ( v2 )
  {
    MoneyWin::Open(v2, &v1->baseclass_0.baseclass_0.baseclass_0, 0x16u, 0, &byte_9AEB1F);
    v3 = TextData::Get(0x2CB89180u);
    MoneyWin::SetTitle1(v1->m_pkMoneyWin, v3);
    v4 = TextData::Get(0x382C423Du);
    MoneyWin::SetTitle2(v1->m_pkMoneyWin, v4);
  }
}

//----- (005A2A80) --------------------------------------------------------
void __thiscall StorageWin::OnDrawing(StorageWin *this)
{
  StorageWin *v1; // esi@1
  MoneyWin *v2; // ecx@1
  char *v3; // eax@2
  char *v4; // eax@2

  v1 = this;
  v2 = this->m_pkMoneyWin;
  if ( v2 )
  {
    MoneyWin::Open(v2, &v1->baseclass_0.baseclass_0.baseclass_0, 0x17u, 0, &byte_9AEB2B);
    v3 = TextData::Get(0x89B68F88u);
    MoneyWin::SetTitle1(v1->m_pkMoneyWin, v3);
    v4 = TextData::Get(0xD5F0EF45u);
    MoneyWin::SetTitle2(v1->m_pkMoneyWin, v4);
  }
}

//----- (005A2AD0) --------------------------------------------------------
bool __thiscall StorageWin::DropOnInv(StorageWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents::SenderType v3; // edx@1
  StorageWin *v4; // edi@1
  char *v5; // esi@2
  char *v6; // ebx@2
  unsigned int v8; // esi@9
  __int16 v9; // bx@9
  unsigned __int16 v10; // bx@10
  PgFrameWork *v11; // eax@12
  unsigned int v12; // ecx@12
  InventoryWin *v13; // eax@15
  InvWin *v14; // eax@16
  ItemIcon *v15; // ecx@17
  Item *v16; // eax@19
  __int16 v17; // dx@19
  __int16 v18; // ax@24
  void *v19; // ebx@25
  int v20; // eax@26
  E_BelongType v21; // ST10_4@27
  GameFrameWork *v22; // edi@30
  char *v23; // eax@30
  SHINE_PUT_ON_BELONGED_ITEM v24; // eax@31
  int v25; // eax@35
  int v26; // eax@36
  Item *v27; // esi@40
  Item *v28; // eax@43
  unsigned int v29; // [sp-4h] [bp-24h]@29
  unsigned __int16 v30; // [sp-4h] [bp-24h]@41
  unsigned int pkDivideWin; // [sp+Ch] [bp-14h]@12
  DropContents::SenderType eSenderType; // [sp+10h] [bp-10h]@1
  Item *pkTargetItem; // [sp+14h] [bp-Ch]@19
  ITEM_INVEN kTo; // [sp+18h] [bp-8h]@24
  ITEM_INVEN kFrom; // [sp+1Ch] [bp-4h]@9
  int pkInfo; // [sp+28h] [bp+8h]@26

  v3 = pkContents->m_eSenderType;
  v4 = this;
  eSenderType = v3;
  if ( v3 == 21 )
  {
    v5 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v6 = TextData2::Get(0x91F6E0D8u);
    if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v6,
        &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v6,
          &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    (*(void (__thiscall **)(IDirectMessenger *, signed int, char *, IDirectMessenger *))(*(_DWORD *)v5 + 20))(
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      25,
      v6,
      &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    return 0;
  }
  if ( v3 && v3 != 6 )
    return 0;
  v8 = pkContents->m_uiSenderIndex;
  v9 = kFrom.Inven & 0x3FF;
  if ( v3 )
    v10 = v9 | 0x1800;
  else
    v10 = v9 | 0x2400;
  v11 = this->baseclass_0.m_pkFrameWork;
  kFrom.Inven = v10;
  v12 = v11[20].m_kMsgQ.m_uiHead;
  pkDivideWin = v12;
  if ( v12 && *(_DWORD *)(v12 + 348) )
  {
    if ( (kFrom.Inven & 0xFC00) == 9216 )
    {
      v13 = (InventoryWin *)v11[19].m_BackFrameID;
      if ( !v13 )
        goto LABEL_24;
      v14 = InventoryWin::GetInvWin(v13, v8);
      if ( !v14 )
        goto LABEL_23;
      v15 = (ItemIcon *)v14;
    }
    else
    {
      v15 = (ItemIcon *)v4->m_apkInvWin[v8 % 0x24];
    }
    v16 = ItemIcon::GetItem(v15);
    pkTargetItem = v16;
    v17 = (kFrom.Inven ^ v8) & 0x3FF;
    v10 = v17 ^ kFrom.Inven;
    kFrom.Inven ^= v17;
    if ( v16 )
    {
      if ( (unsigned int)((int (__thiscall *)(Item *))v16->baseclass_0.vfptr[3].__vecDelDtor)(v16) > 1 )
      {
        LOWORD(uiReceiverInvIndex) = ((_WORD)uiReceiverInvIndex
                                    + 36 * (LOWORD(v4->m_uiCurPage) + 4 * LOWORD(v4->m_uiCurServerTab))) & 0x3FF | 0x1800;
        GameFrameWork::NcItemSplitReq(
          (GameFrameWork *)v4->baseclass_0.m_pkFrameWork,
          &kFrom,
          (ITEM_INVEN *)&uiReceiverInvIndex,
          *(_DWORD *)(pkDivideWin + 348));
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, pkTargetItem->m_kStruct.itemid);
        return 1;
      }
      v10 = kFrom.Inven;
    }
LABEL_23:
    v3 = eSenderType;
  }
LABEL_24:
  v18 = LOWORD(v4->m_uiCurPage) + 4 * LOWORD(v4->m_uiCurServerTab);
  kFrom.Inven = (kFrom.Inven ^ v8) & 0x3FF ^ v10;
  kTo.Inven = ((_WORD)uiReceiverInvIndex + 36 * v18) & 0x3FF | 0x1800;
  if ( v3 )
  {
    if ( v3 == 6 )
    {
      v28 = ItemIcon::GetItem(&v4->m_apkInvWin[v8 % 0x24]->baseclass_0);
      if ( v28 )
      {
        v30 = v28->m_kStruct.itemid;
        goto LABEL_45;
      }
    }
  }
  else
  {
    v19 = pkContents->m_apvParam[0];
    if ( v19 )
    {
      v20 = *((_DWORD *)v19 + 28);
      pkInfo = v20;
      if ( v20 )
      {
        v21 = *(_DWORD *)(v20 + 274);
        uiReceiverInvIndex = 0;
        if ( CItemAuthorityBase::IA_IsDataChrBelonged(&g_kItemAuthority, v21) )
        {
          if ( Item::GetPutOnBelongState((Item *)v19) == 1 )
          {
LABEL_29:
            v29 = -857857511;
LABEL_30:
            v22 = (GameFrameWork *)v4->baseclass_0.m_pkFrameWork;
            v23 = TextData::Get(v29);
            GameFrameWork::AddSysMsg(v22, v23);
            return 0;
          }
        }
        else
        {
          v24 = Item::GetPutOnBelongState((Item *)v19);
          if ( !CItemAuthorityBase::IA_CanInvenReloc(
                  &g_kItemAuthority,
                  *(E_BelongType *)(pkInfo + 274),
                  v24,
                  kFrom.Inven >> 10,
                  kTo.Inven >> 10,
                  (E_RELOC_ERR *)&uiReceiverInvIndex) )
          {
            if ( Item::GetPutOnBelongState((Item *)v19) == 1 )
              goto LABEL_29;
            if ( !uiReceiverInvIndex )
            {
              v29 = -2102363671;
              goto LABEL_30;
            }
          }
        }
      }
      v25 = (*(int (__thiscall **)(void *))(*(_DWORD *)v19 + 44))(v19);
      if ( v25 )
      {
        v26 = *(_DWORD *)v25 & 0xFF;
        if ( v26 )
        {
          if ( v26 != 255 )
          {
            v29 = -1634432127;
            goto LABEL_30;
          }
        }
      }
    }
    if ( v8 < 0xC0 )
    {
      v27 = g_kInventory.m_aspInv[v8].m_pObject;
      if ( v27 )
      {
        v30 = v27->m_kStruct.itemid;
LABEL_45:
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, v30);
        goto LABEL_46;
      }
    }
  }
LABEL_46:
  if ( !((*(_DWORD *)&kFrom.Inven ^ *(_DWORD *)&kTo.Inven) & 0xFC00)
    && !((*(_DWORD *)&kFrom.Inven ^ *(_DWORD *)&kTo.Inven) & 0x3FF) )
    return 0;
  GameFrameWork::NcItemRelocReq((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, &kFrom, &kTo);
  return 1;
}

//----- (005A2E70) --------------------------------------------------------
void __thiscall StorageWin::UpdateMeWin(StorageWin *this, float fCurTime)
{
  StorageWin *v2; // ebx@1
  __int64 v3; // qax@1
  __int64 v4; // qax@1
  __int64 v5; // qax@1
  __int64 v6; // qax@1
  signed int v7; // edi@1
  int *v8; // eax@1
  PgWin **v9; // esi@3
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // edx@4
  char *v11; // eax@16
  signed int v12; // [sp-4h] [bp-A4h]@5
  unsigned int v13; // [sp-4h] [bp-A4h]@8
  int v14; // [sp+Ch] [bp-94h]@1
  int dwValue; // [sp+10h] [bp-90h]@1
  int iUsing; // [sp+14h] [bp-8Ch]@1
  int nMaxPage; // [sp+18h] [bp-88h]@1
  char acStr[128]; // [sp+1Ch] [bp-84h]@1
  unsigned int v19; // [sp+9Ch] [bp-4h]@1
  int v20; // [sp+A0h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v2 = this;
  v3 = Bank::GetMoney();
  User::GetGem(v3);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v4 = Bank::GetMoney();
  User::GetGold(v4);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v5 = Bank::GetMoney();
  User::GetSilver(v5);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v6 = Bank::GetMoney();
  User::GetCopper(v6);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ChargedItemList::GetTotalEffectingValue(EE_MORESTORAGE, (unsigned int *)&dwValue);
  iUsing = dwValue - 4 * v2->m_uiCurServerTab + 2;
  v7 = 0;
  nMaxPage = (unsigned __int8)Bank::GetMaxPage() - 4 * v2->m_uiCurServerTab;
  v14 = 0;
  v8 = &v14;
  if ( nMaxPage >= 0 )
    v8 = &nMaxPage;
  nMaxPage = *v8;
  v9 = (PgWin **)v2->m_apkTabBtn;
  do
  {
    ((void (__stdcall *)(_DWORD))v9[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7 >= iUsing);
    v10 = (*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( nMaxPage > v7 )
    {
      v12 = 1;
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v10)(0);
      v10 = v9[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
      v12 = 0;
    }
    ((void (__stdcall *)(signed int))v10)(v12);
    if ( v7 < iUsing )
    {
      if ( v7 == v2->m_uiCurPage )
      {
        if ( v7 < 2 )
          v13 = 1094882428;
        else
          v13 = 844332920;
      }
      else
      {
        if ( v7 < 2 )
          v13 = -453449421;
        else
          v13 = -521536994;
      }
    }
    else
    {
      v13 = -470466502;
    }
    v11 = TextData::Get(v13);
    PgWin::SetToolTipWinText(*v9, v11);
    ++v7;
    ++v9;
  }
  while ( v7 < 4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005A3090) --------------------------------------------------------
bool __thiscall StorageInvWin::EatDropInstance(StorageInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  StorageInvWin *v4; // edi@1
  bool result; // al@2
  void *v6; // esi@3
  PgWin *v7; // eax@5

  v4 = this;
  if ( *pkDrop )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( v6 )
    {
      v7 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      result = StorageWin::DropOnInv((StorageWin *)v7, (DropContents *)v6, v4->m_uiInvIndex);
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005A30D0) --------------------------------------------------------
void __thiscall StorageWin::OnInvLClick(StorageWin *this, unsigned int uiInvIndex)
{
  StorageWin *v2; // esi@1
  Item *v3; // eax@3
  Item *v4; // edi@3
  int v5; // edx@4

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
  {
    StorageWin::OnInvShiftLClick(this, uiInvIndex);
  }
  else
  {
    v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
    v4 = v3;
    if ( v3 )
    {
      v5 = 9 * (v2->m_uiCurPage + 4 * v2->m_uiCurServerTab);
      v2->m_kDropContents.m_eType = 0;
      v2->m_kDropContents.m_eSenderType = 6;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_apvParam[0] = v3;
      v2->m_kDropContents.m_uiSenderIndex = uiInvIndex + 4 * v5;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      v2->m_kDrop.m_pkSender = (PgWin *)v2;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, v4->m_kStruct.itemid);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005A3180) --------------------------------------------------------
void __thiscall StorageWin::OnCommand(StorageWin *this, unsigned int wParam, int lParam)
{
  StorageWin *v3; // esi@1
  char v4; // di@6
  Item *v5; // eax@27
  int v6; // ecx@28

  v3 = this;
  switch ( wParam )
  {
    case 0xAu:
      StorageWin::OnInvLClick(this, lParam);
      return;
    case 0xBu:
      StorageWin::OnInvRClick(this, lParam);
      return;
    case 0xEu:
    case 0xFu:
      GameFrameWork::CloseStorageMenu((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      return;
    case 0x10u:
      if ( this->m_uiCurServerTab )
      {
        v4 = 4 * LOBYTE(this->m_uiCurServerTab);
        if ( !Bank::IsPageDataExist(4 * LOBYTE(this->m_uiCurServerTab)) )
          goto LABEL_21;
        this = v3;
      }
      StorageWin::OnTab1(this);
      return;
    case 0x11u:
      if ( this->m_uiCurServerTab )
      {
        v4 = 4 * LOBYTE(this->m_uiCurServerTab) + 1;
        if ( !Bank::IsPageDataExist(4 * LOBYTE(this->m_uiCurServerTab) + 1) )
          goto LABEL_21;
        this = v3;
      }
      StorageWin::OnTab2(this);
      return;
    case 0x12u:
      if ( this->m_uiCurServerTab )
      {
        v4 = 4 * LOBYTE(this->m_uiCurServerTab) + 2;
        if ( !Bank::IsPageDataExist(4 * LOBYTE(this->m_uiCurServerTab) + 2) )
          goto LABEL_21;
        this = v3;
      }
      StorageWin::OnTab3(this);
      return;
    case 0x13u:
      if ( !this->m_uiCurServerTab )
        goto LABEL_20;
      v4 = 4 * LOBYTE(this->m_uiCurServerTab) + 3;
      if ( Bank::IsPageDataExist(4 * LOBYTE(this->m_uiCurServerTab) + 3) )
      {
        this = v3;
LABEL_20:
        StorageWin::OnTab4(this);
      }
      else
      {
LABEL_21:
        GameFrameWork::NcItemOpenStoragePageReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v4);
      }
      break;
    case 0x14u:
      StorageWin::OnDeposit(this);
      break;
    case 0x15u:
      StorageWin::OnDrawing(this);
      break;
    case 0x16u:
      StorageWin::OnDepositMoneyWinOk(this, *(_QWORD *)lParam);
      break;
    case 0x17u:
      StorageWin::OnDrawingMoneyWinOk(this, *(_QWORD *)lParam);
      break;
    case 0x19u:
      if ( lParam )
      {
        v5 = ItemIcon::GetItem(&this->m_apkInvWin[(StorageWin::ms_kFrom & 0x3FF) % 36]->baseclass_0);
        if ( v5 )
        {
          v3->m_kDropContents.m_eSenderType = 6;
          v3->m_kDropContents.m_eType = 0;
          v6 = StorageWin::ms_kFrom & 0x3FF;
          v3->m_kDropContents.m_apvParam[0] = v5;
          v3->m_kDropContents.m_uiSenderIndex = v6;
          v3->m_kDropContents.m_apvParam[1] = 0;
          ((void (__thiscall *)(_DWORD))v5->baseclass_0.vfptr[3].__vecDelDtor)(v5);
          v3->m_kDropContents.m_uiLot = lParam;
          v3->m_kDrop.m_pkSender = (PgWin *)v3;
          PgCursor::ms_pkDrop = (int)&v3->m_kDrop;
        }
      }
      break;
    case 0x1Au:
      StorageWin::OnHelpLink(this);
      break;
    case 0xCu:
    case 0xDu:
    case 0x18u:
      return;
  }
}
// A99DCC: using guessed type int StorageWin__ms_kFrom;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005A33D0) --------------------------------------------------------
StorageTabButWin *__cdecl StorageTabButWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  StorageTabButWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x144u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v5);
    *(_DWORD *)v6 = &StorageTabButWin::_vftable_;
    *((_DWORD *)v6 + 58) = &StorageTabButWin::_vftable_;
    *((_BYTE *)v6 + 254) = 1;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int))(*(_DWORD *)v6 + 560))(
                          v6,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (StorageTabButWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 9AED88: using guessed type int (__stdcall *StorageTabButWin___vftable_)(int uiFlags);
// 9AEDA4: using guessed type int (__thiscall *StorageTabButWin___vftable_)(void *p, char);

//----- (005A3530) --------------------------------------------------------
StorageInvWin *__cdecl StorageInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  StorageInvWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1C4u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v4);
    LOBYTE(v9) = 1;
    *(_DWORD *)v5 = &StorageInvWin::_vftable_;
    *((_DWORD *)v5 + 58) = &StorageInvWin::_vftable_;
    *((_DWORD *)v5 + 112) = -1;
    ItemIcon::SetItem((ItemIcon *)v5, 0, 1);
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 616))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (StorageInvWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9AEFDC: using guessed type int (__stdcall *StorageInvWin___vftable_)(int uiFlags);
// 9AEFFC: using guessed type int (__thiscall *StorageInvWin___vftable_)(void *p, char);

//----- (005A3690) --------------------------------------------------------
StorageWin *__cdecl StorageWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  StorageWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x2A0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    StorageWin::StorageWin((StorageWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (StorageWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005A37C0) --------------------------------------------------------
bool __thiscall StorageWin::Create(StorageWin *this, PgFrameWork *pkFrameWork)
{
  StorageWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool result; // al@6
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@16
  PgWinSpr *v13; // eax@16
  PgSprData *v14; // eax@16
  PgFont *v15; // eax@18
  PgWinText *v16; // eax@18
  NiRefObjectVtbl *v17; // edx@18
  char *v18; // eax@18
  PgSprData *v19; // eax@18
  PgSprData *v20; // eax@19
  ItemIcon *v21; // eax@19
  IconWin **v22; // ecx@19
  PgSprData *v23; // eax@20
  StorageTabButWin *v24; // eax@20
  NiSourceTexture *v25; // edx@20
  PgSprData *v26; // eax@20
  PgWinSpr *v27; // eax@20
  PgSprData *v28; // eax@20
  PgWinSpr *v29; // eax@20
  PgSprData *v30; // eax@20
  PgWinSpr *v31; // eax@20
  PgSprData *v32; // eax@20
  StorageTabButWin *v33; // eax@20
  NiSourceTexture *v34; // edx@20
  PgSprData *v35; // eax@20
  PgWinSpr *v36; // eax@20
  PgSprData *v37; // eax@20
  PgWinSpr *v38; // eax@20
  PgSprData *v39; // eax@20
  PgWinSpr *v40; // eax@20
  PgSprData *v41; // eax@20
  StorageTabButWin *v42; // eax@20
  NiSourceTexture *v43; // edx@20
  PgSprData *v44; // eax@20
  PgWinSpr *v45; // eax@20
  PgSprData *v46; // eax@20
  PgWinSpr *v47; // eax@20
  PgSprData *v48; // eax@20
  PgWinSpr *v49; // eax@20
  PgSprData *v50; // eax@20
  StorageTabButWin *v51; // eax@20
  NiSourceTexture *v52; // edx@20
  PgSprData *v53; // eax@20
  PgWinSpr *v54; // eax@20
  PgSprData *v55; // eax@20
  PgWinSpr *v56; // eax@20
  PgSprData *v57; // eax@20
  PgWinSpr *v58; // eax@20
  void *v59; // STB8_4@20
  PgFont *v60; // STB4_4@20
  unsigned int v61; // STB0_4@20
  unsigned int v62; // eax@20
  PgWinText *v63; // eax@20
  NiRefObjectVtbl *v64; // edx@20
  char *v65; // eax@20
  void *v66; // STB8_4@20
  PgFont *v67; // STB4_4@20
  unsigned int v68; // STB0_4@20
  unsigned int v69; // eax@20
  PgWinText *v70; // eax@20
  NiRefObjectVtbl *v71; // edx@20
  char *v72; // eax@20
  PgSprData *v73; // eax@20
  void *v74; // STB8_4@20
  PgFont *v75; // STB4_4@20
  unsigned int v76; // STB0_4@20
  unsigned int v77; // eax@20
  PgWinText *v78; // eax@20
  NiRefObjectVtbl *v79; // edx@20
  NiSourceTexture *v80; // STC0_4@20
  NiNode *v81; // edx@20
  PgSprData *v82; // eax@20
  void *v83; // STB8_4@20
  PgFont *v84; // STB4_4@20
  unsigned int v85; // STB0_4@20
  unsigned int v86; // eax@20
  PgWinText *v87; // eax@20
  NiRefObjectVtbl *v88; // edx@20
  NiSourceTexture *v89; // STC0_4@20
  NiNode *v90; // edx@20
  PgSprData *v91; // eax@20
  void *v92; // STB8_4@20
  PgFont *v93; // STB4_4@20
  unsigned int v94; // STB0_4@20
  unsigned int v95; // eax@20
  PgWinText *v96; // eax@20
  NiRefObjectVtbl *v97; // edx@20
  NiSourceTexture *v98; // STC0_4@20
  NiNode *v99; // edx@20
  PgSprData *v100; // eax@20
  void *v101; // STB8_4@20
  PgFont *v102; // STB4_4@20
  unsigned int v103; // STB0_4@20
  unsigned int v104; // eax@20
  PgWinText *v105; // eax@20
  NiRefObjectVtbl *v106; // edx@20
  NiSourceTexture *v107; // STC0_4@20
  NiNode *v108; // edx@20
  NiNode *v109; // esi@21
  const char *v110; // [sp+B4h] [bp-7Ch]@12
  int *v111; // [sp+B8h] [bp-78h]@12
  int *v112; // [sp+BCh] [bp-74h]@12
  NiSourceTexture *v113; // [sp+C0h] [bp-70h]@12
  unsigned int v114; // [sp+C4h] [bp-6Ch]@1
  unsigned int uiHeight; // [sp+D4h] [bp-5Ch]@16
  unsigned int uiWidth; // [sp+D8h] [bp-58h]@16
  PgFrameWork *v117; // [sp+DCh] [bp-54h]@1
  unsigned int v118; // [sp+E0h] [bp-50h]@19
  unsigned int i; // [sp+E4h] [bp-4Ch]@7
  NiSourceTexture *pkTexture; // [sp+E8h] [bp-48h]@1
  NiPointer<NiNode> spNode; // [sp+ECh] [bp-44h]@1
  int uiTop; // [sp+F0h] [bp-40h]@10
  int uiLeft; // [sp+F4h] [bp-3Ch]@10
  PgSprData *pkTextWin; // [sp+F8h] [bp-38h]@14
  char acShapeName[33]; // [sp+FCh] [bp-34h]@19
  unsigned int v126; // [sp+120h] [bp-10h]@1
  int v127; // [sp+12Ch] [bp-4h]@1
  int v128; // [sp+130h] [bp+0h]@1

  v126 = (unsigned int)&v128 ^ __security_cookie;
  v114 = (unsigned int)&v128 ^ __security_cookie;
  v2 = this;
  v117 = pkFrameWork;
  spNode.m_pObject = 0;
  v127 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
    goto LABEL_27;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCBank.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, (NiTexturePalette *)i);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "NPCBankWin", 0) )
  {
LABEL_27:
    v4 = spNode.m_pObject;
    v127 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v113 = v10;
    v112 = &uiTop;
    v111 = &uiLeft;
    v110 = "Theme";
  }
  else
  {
    v113 = 0;
    v112 = &uiTop;
    v111 = &uiLeft;
    v110 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v110, v111, v112, v113);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
  i = (unsigned int)MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v114) )
  {
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)i);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x1Au, 0, 0);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v15 = Font::Get(0);
    v16 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 2,
            uiWidth,
            uiHeight,
            v15,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v16;
    ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v17[122].__vecDelDtor)(v16, 5, 0);
    ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v18 = TextData::Get(0x378CA581u);
    (*(void (__thiscall **)(PgSprData *, char *))i)(pkTextWin, v18);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    i = 0;
    pkTextWin = (PgSprData *)v2->m_apkInvWin;
    do
    {
      v118 = i + 1;
      sprintf(acShapeName, "IconSlot%03d");
      v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v21 = (ItemIcon *)StorageInvWin::CreateWin(
                          uiLeft - v8 + 1,
                          uiTop - v9 + 1,
                          i,
                          &v2->baseclass_0.baseclass_0.baseclass_0);
      pkTextWin->baseclass_0.vfptr = (NiRefObjectVtbl *)v21;
      ItemIcon::SetItem(v21, 0, 1);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 129))(10);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 140))(11);
      v22 = (IconWin **)pkTextWin;
      pkTextWin->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkItemInfoWin;
      IconWin::ShowFocus(*v22, 1);
      pkTextWin = (PgSprData *)((char *)pkTextWin + 4);
      i = v118;
    }
    while ( (signed int)v118 < 36 );
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, pkTexture);
    v24 = StorageTabButWin::CreateWin(uiLeft - v8, uiTop - v9, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u);
    v25 = pkTexture;
    v2->m_apkTabBtn[0] = (PgWinBut *)v24;
    v24->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Dis", &uiLeft, &uiTop, v25);
    v27 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabDisableSpr[0] = v27;
    ((void (__thiscall *)(PgWinSpr *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v27);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabDisableSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_On", &uiLeft, &uiTop, pkTexture);
    v29 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabOnSpr[0] = v29;
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num01", &uiLeft, &uiTop, 0);
    v31 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, pkTexture);
    v33 = StorageTabButWin::CreateWin(uiLeft - v8, uiTop - v9, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u);
    v34 = pkTexture;
    v2->m_apkTabBtn[1] = (PgWinBut *)v33;
    v33->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Dis", &uiLeft, &uiTop, v34);
    v36 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabDisableSpr[1] = v36;
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v36,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabDisableSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_On", &uiLeft, &uiTop, pkTexture);
    v38 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabOnSpr[1] = v38;
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v38,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num02", &uiLeft, &uiTop, 0);
    v40 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v40,
      0);
    v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_Off", &uiLeft, &uiTop, pkTexture);
    v42 = StorageTabButWin::CreateWin(uiLeft - v8, uiTop - v9, v41, &v2->baseclass_0.baseclass_0.baseclass_0, 0x12u);
    v43 = pkTexture;
    v2->m_apkTabBtn[2] = (PgWinBut *)v42;
    v42->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_Dis", &uiLeft, &uiTop, v43);
    v45 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v44, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabDisableSpr[2] = v45;
    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v45,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabDisableSpr[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_On", &uiLeft, &uiTop, pkTexture);
    v47 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v46, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabOnSpr[2] = v47;
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v47,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabOnSpr[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num03", &uiLeft, &uiTop, 0);
    v49 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v49,
      0);
    v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab04_Off", &uiLeft, &uiTop, pkTexture);
    v51 = StorageTabButWin::CreateWin(uiLeft - v8, uiTop - v9, v50, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u);
    v52 = pkTexture;
    v2->m_apkTabBtn[3] = (PgWinBut *)v51;
    v51->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v53 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab04_Dis", &uiLeft, &uiTop, v52);
    v54 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v53, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabDisableSpr[3] = v54;
    v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v54,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabDisableSpr[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v55 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab04_On", &uiLeft, &uiTop, pkTexture);
    v56 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v55, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabOnSpr[3] = v56;
    v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v56,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabOnSpr[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num04", &uiLeft, &uiTop, 0);
    v58 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v57, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v58,
      0);
    ((void (__stdcall *)(signed int))v2->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DrawNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "DrawClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "DrawOver");
    v59 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x15u, 0, 0);
    pkTextWin = (PgSprData *)v59;
    v60 = Font::Get(0);
    v61 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v62 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v63 = PgWinText::CreateWin(0, 1, v62, v61, v60, (PgWin *)v59, 0, 0);
    v64 = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v63;
    v64[122].__vecDelDtor((NiRefObject *)v63, 5u);
    v118 = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v65 = TextData::Get(0x89B68F88u);
    (*(void (__thiscall **)(PgSprData *, char *))v118)(pkTextWin, v65);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PayNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PayClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PayOver");
    v66 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x14u, 0, 0);
    pkTextWin = (PgSprData *)v66;
    v67 = Font::Get(0);
    v68 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v69 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v70 = PgWinText::CreateWin(0, 1, v69, v68, v67, (PgWin *)v66, 0, 0);
    v71 = v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v70;
    v71[122].__vecDelDtor((NiRefObject *)v70, 5u);
    v118 = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v72 = TextData::Get(0x2CB89180u);
    (*(void (__thiscall **)(PgSprData *, char *))v118)(pkTextWin, v72);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v73 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GemInput", &uiLeft, &uiTop, pkTexture);
    v74 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v73, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v74;
    v75 = Font::Get(0);
    v76 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v77 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v78 = PgWinText::CreateWin(0, 1, v77, v76, v75, (PgWin *)v74, 0, 0);
    v79 = v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v78;
    v79[122].__vecDelDtor((NiRefObject *)v78, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AEB15);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v80 = pkTexture;
    v81 = spNode.m_pObject;
    v2->m_pkGemText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v81->baseclass_0, "GemBtn", &uiLeft, &uiTop, v80);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GemBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GemBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v82 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GoldInput", &uiLeft, &uiTop, pkTexture);
    v83 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v82, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v83;
    v84 = Font::Get(0);
    v85 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v86 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v87 = PgWinText::CreateWin(0, 1, v86, v85, v84, (PgWin *)v83, 0, 0);
    v88 = v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v87;
    v88[122].__vecDelDtor((NiRefObject *)v87, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AEB16);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v89 = pkTexture;
    v90 = spNode.m_pObject;
    v2->m_pkGoldText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v90->baseclass_0, "GoldBtn", &uiLeft, &uiTop, v89);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GoldBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GoldBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v91 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SilverInput", &uiLeft, &uiTop, pkTexture);
    v92 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v91, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v92;
    v93 = Font::Get(0);
    v94 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v95 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v96 = PgWinText::CreateWin(0, 1, v95, v94, v93, (PgWin *)v92, 0, 0);
    v97 = v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v96;
    v97[122].__vecDelDtor((NiRefObject *)v96, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AEB17);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v98 = pkTexture;
    v99 = spNode.m_pObject;
    v2->m_pkSilverText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v99->baseclass_0, "SilverBtn", &uiLeft, &uiTop, v98);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "SilverBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "SilverBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v100 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CopperInput", &uiLeft, &uiTop, pkTexture);
    v101 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v100, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v101;
    v102 = Font::Get(0);
    v103 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v104 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v105 = PgWinText::CreateWin(0, 1, v104, v103, v102, (PgWin *)v101, 0, 0);
    v106 = v105->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v105;
    v106[122].__vecDelDtor((NiRefObject *)v105, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AEB1E);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v107 = pkTexture;
    v108 = spNode.m_pObject;
    v2->m_pkCopperText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v108->baseclass_0, "CopperBtn", &uiLeft, &uiTop, v107);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CopperBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CopperBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    ((void (__thiscall *)(StorageWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v2->m_pkMoneyWin = MoneyWin::CreateWin(v117);
    v127 = -1;
    if ( spNode.m_pObject )
    {
      v109 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v109 )
          v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v109, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v127 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005A4770) --------------------------------------------------------
void *__thiscall StorageTabButWin::_vector_deleting_destructor_(StorageTabButWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageTabButWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageTabButWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AED88: using guessed type int (__stdcall *StorageTabButWin___vftable_)(int uiFlags);
// 9AEDA4: using guessed type int (__thiscall *StorageTabButWin___vftable_)(void *p, char);

//----- (005A47B0) --------------------------------------------------------
void *__thiscall StorageInvWin::_scalar_deleting_destructor_(StorageInvWin *this, unsigned int a2)
{
  ItemIcon *v2; // esi@1

  v2 = (ItemIcon *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageInvWin::_vftable_;
  Bank::RemoveExtraInv();
  ItemIcon::_ItemIcon(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AEFDC: using guessed type int (__stdcall *StorageInvWin___vftable_)(int uiFlags);
// 9AEFFC: using guessed type int (__thiscall *StorageInvWin___vftable_)(void *p, char);

//----- (005A4830) --------------------------------------------------------
void *__thiscall StorageWin::_scalar_deleting_destructor_(StorageWin *this, unsigned int a2)
{
  StorageWin *v2; // esi@1
  PgWin *v3; // eax@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StorageWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&StorageWin::_vftable_;
  v3 = (PgWin *)this->m_pkMoneyWin;
  if ( v3 )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v3);
  v2->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v2->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9AF26C: using guessed type int (__stdcall *StorageWin___vftable_)(int uiFlags);
// 9AF28C: using guessed type int (__thiscall *StorageWin___vftable_)(void *p, char);

//----- (005A48D0) --------------------------------------------------------
bool __thiscall SysMsgDisplayWin::IsAutoHideOptionSetted(SysMsgDisplayWin *this)
{
  return 0;
}

//----- (005A48E0) --------------------------------------------------------
void __thiscall SysMsgDisplayWin::DirectMessage(SysMsgDisplayWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  SysMsgDisplayWin *v4; // esi@1
  signed int v5; // ecx@3
  ChatDisplayWin *v6; // ecx@7
  unsigned int v7; // [sp-4h] [bp-8h]@7

  v4 = this;
  if ( iMsgTag == 15 )
  {
    v5 = 0;
    if ( *(_DWORD *)pvBody == 25 )
    {
      v5 = 4;
    }
    else
    {
      if ( *(_DWORD *)pvBody == 26 )
        v5 = 256;
    }
    v7 = v5;
    v6 = (ChatDisplayWin *)((char *)v4 - 232);
    if ( *((_BYTE *)pvBody + 4) )
      ChatDisplayWin::AddOption(v6, v7);
    else
      ChatDisplayWin::RemoveOption(v6, v7);
    MachineOpt::SetSysMsgWinFilter(*(_DWORD *)(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.x)
                                             + 512));
  }
  else
  {
    ChatDisplayWin::DirectMessage(&this->baseclass_0, iMsgTag, pvBody, pkFrom);
  }
}

//----- (005A4950) --------------------------------------------------------
bool __thiscall SysMsgDisplayWin::Create(SysMsgDisplayWin *this, PgFrameWork *pkFrameWork)
{
  SysMsgDisplayWin *v2; // esi@1
  int v3; // ebx@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  EditWin *v6; // edi@4
  void *v7; // eax@9
  int v8; // eax@10
  NiMaterialProperty *v9; // edi@11
  NiMaterialProperty *v10; // eax@18
  NiMaterialProperty *v11; // eax@18
  int v12; // edx@18
  NiMaterialProperty *v13; // eax@18
  int v14; // ecx@18
  NiMaterialProperty *v15; // eax@18
  void *v16; // eax@18
  int v17; // eax@19
  NiMaterialProperty *v18; // edi@21
  NiMaterialProperty *v19; // eax@29
  int v20; // ecx@29
  NiMaterialProperty *v21; // eax@29
  int v22; // edx@29
  NiMaterialProperty *v23; // eax@29
  int v24; // ecx@29
  NiMaterialProperty *v25; // eax@29
  PgSprData *v26; // eax@29
  NiNode *v27; // esi@30
  bool result; // al@34
  int v29; // ebx@35
  NiNode *v30; // esi@36
  int v31; // edx@41
  NiSourceTexture *v32; // eax@41
  FrameBoxWin *v33; // eax@41
  int v34; // ST38_4@41
  int v35; // ecx@41
  PgFont *v36; // eax@41
  unsigned int v37; // eax@43
  FrameBoxWin *v38; // ecx@43
  FrameBoxWin *v39; // edi@44
  int v40; // eax@44
  unsigned int v41; // ecx@44
  FrameBoxWin *v42; // edi@44
  unsigned int v43; // ebx@44
  int v44; // eax@44
  unsigned int v45; // ecx@44
  FrameBoxWin *v46; // edi@44
  FrameBoxWin *v47; // eax@44
  unsigned int v48; // ST50_4@44
  unsigned int v49; // ST4C_4@44
  PgFont *v50; // ST30_4@44
  int v51; // ST24_4@44
  int v52; // eax@44
  ChatBoardFlex *v53; // eax@44
  ChatBoardFlex *v54; // ebx@44
  bool v55; // zf@52
  int v56; // edi@53
  int v57; // eax@53
  PgWinProxy *v58; // eax@53
  int v59; // edi@53
  int v60; // ebx@53
  NiAVObject *v61; // eax@53
  NiProperty *v62; // ST38_4@53
  char *v63; // eax@53
  int v64; // ST2C_4@53
  int v65; // eax@53
  PgWinProxy *v66; // eax@53
  int v67; // edi@53
  int v68; // ebx@53
  NiAVObject *v69; // eax@53
  NiProperty *v70; // ST38_4@53
  NiAVObject *v71; // eax@53
  NiProperty *v72; // ST38_4@53
  NiAVObject *v73; // eax@53
  NiProperty *v74; // ST38_4@53
  char *v75; // eax@53
  NiSourceTexture *v76; // eax@53
  PopupMenuWin *v77; // eax@53
  PopupMenuWin *v78; // edi@53
  PopupMenuWin *v79; // ebx@53
  char *v80; // eax@60
  PopupMenuTextCheck *v81; // eax@60
  char *v82; // eax@60
  PopupMenuTextCheck *v83; // eax@60
  NiNode *v84; // esi@61
  int iOrgX; // [sp+54h] [bp-30h]@35
  signed int v86; // [sp+58h] [bp-2Ch]@43
  ChatBoardFlex **v87; // [sp+5Ch] [bp-28h]@43
  unsigned int uiWidth; // [sp+60h] [bp-24h]@35
  int uiHeight; // [sp+64h] [bp-20h]@35
  int iOrgY; // [sp+68h] [bp-1Ch]@19
  int uiLeft; // [sp+6Ch] [bp-18h]@29
  int uiTop; // [sp+70h] [bp-14h]@29
  NiPointer<NiNode> spNode; // [sp+74h] [bp-10h]@1
  int v94; // [sp+80h] [bp-4h]@1
  unsigned int pkSprDataa; // [sp+8Ch] [bp+8h]@44
  ChatBoardFlex *pkSprData; // [sp+8Ch] [bp+8h]@44
  PgSprData *pkSprDatab; // [sp+8Ch] [bp+8h]@53
  PgSprData *pkSprDatac; // [sp+8Ch] [bp+8h]@53
  PgSprData *pkSprDatad; // [sp+8Ch] [bp+8h]@53
  PgSprData *pkSprDatae; // [sp+8Ch] [bp+8h]@53
  PgSprData *pkSprDataf; // [sp+8Ch] [bp+8h]@53

  v2 = this;
  v3 = 0;
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v94 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\SystemMessage.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v2->baseclass_0.m_pkChatEditBox = 0;
  v2->baseclass_0.m_pkFilterBtn = 0;
  v6 = v2->baseclass_0.m_spEdit.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v2->baseclass_0.m_spEdit.m_pObject = 0;
  }
  v2->baseclass_0.m_pkChatKorMode = 0;
  v2->baseclass_0.m_pkChatEngMode = 0;
  v2->baseclass_0.m_pkTabText = 0;
  v2->baseclass_0.m_pkTabBtn = 0;
  v7 = operator new(0x60u);
  LOBYTE(v94) = 1;
  if ( v7 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v7);
    v3 = v8;
  }
  v9 = v2->baseclass_0.m_spMtrlProp.m_pObject;
  LOBYTE(v94) = 0;
  if ( v9 != (NiMaterialProperty *)v3 )
  {
    if ( v9
      && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    v2->baseclass_0.m_spMtrlProp.m_pObject = (NiMaterialProperty *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v10 = v2->baseclass_0.m_spMtrlProp.m_pObject;
  LODWORD(v10->m_amb.r) = NiColor::WHITE;
  LODWORD(v10->m_amb.g) = dword_A88D90;
  LODWORD(v10->m_amb.b) = dword_A88D94;
  ++v10->m_uiRevID;
  v11 = v2->baseclass_0.m_spMtrlProp.m_pObject;
  LODWORD(v11->m_diff.r) = NiColor::WHITE;
  LODWORD(v11->m_diff.g) = dword_A88D90;
  v12 = dword_A88D94;
  ++v11->m_uiRevID;
  LODWORD(v11->m_diff.b) = v12;
  v13 = v2->baseclass_0.m_spMtrlProp.m_pObject;
  LODWORD(v13->m_emit.r) = NiColor::WHITE;
  LODWORD(v13->m_emit.g) = dword_A88D90;
  v14 = dword_A88D94;
  ++v13->m_uiRevID;
  LODWORD(v13->m_emit.b) = v14;
  v15 = v2->baseclass_0.m_spMtrlProp.m_pObject;
  ++v15->m_uiRevID;
  v15->m_fAlpha = 1.0;
  v16 = operator new(0x60u);
  LOBYTE(v94) = 2;
  if ( v16 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v16);
    iOrgY = v17;
  }
  else
  {
    iOrgY = 0;
    v17 = 0;
  }
  v18 = v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
  LOBYTE(v94) = 0;
  if ( v18 != (NiMaterialProperty *)v17 )
  {
    if ( v18 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v18 )
        v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
      v17 = iOrgY;
    }
    v2->baseclass_0.m_spFixedMtrlProp.m_pObject = (NiMaterialProperty *)v17;
    if ( v17 )
      InterlockedIncrement((volatile LONG *)(v17 + 4));
  }
  v19 = v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
  LODWORD(v19->m_amb.r) = NiColor::WHITE;
  LODWORD(v19->m_amb.g) = dword_A88D90;
  v20 = dword_A88D94;
  ++v19->m_uiRevID;
  LODWORD(v19->m_amb.b) = v20;
  v21 = v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
  LODWORD(v21->m_diff.r) = NiColor::WHITE;
  LODWORD(v21->m_diff.g) = dword_A88D90;
  v22 = dword_A88D94;
  ++v21->m_uiRevID;
  LODWORD(v21->m_diff.b) = v22;
  v23 = v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
  LODWORD(v23->m_emit.r) = NiColor::WHITE;
  LODWORD(v23->m_emit.g) = dword_A88D90;
  v24 = dword_A88D94;
  ++v23->m_uiRevID;
  LODWORD(v23->m_emit.b) = v24;
  v25 = v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
  ++v25->m_uiRevID;
  v25->m_fAlpha = 1.0;
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0.baseclass_0, uiLeft, uiTop, v26, 0, pkFrameWork, "SysMsgDisplayWin", 0) )
  {
    v27 = spNode.m_pObject;
    v94 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v27 )
        v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
    }
    return 0;
  }
  NiAVObject::AttachProperty(
    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v2->baseclass_0.m_spMtrlProp.m_pObject->baseclass_0);
  v29 = uiLeft;
  iOrgY = uiTop;
  iOrgX = uiLeft;
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "ChaBox",
         &uiLeft,
         &uiTop,
         &uiWidth,
         (unsigned int *)&uiHeight) )
  {
    v31 = uiHeight;
    v2->baseclass_0.m_uiDefaultWidth = uiWidth;
    v2->baseclass_0.m_uiDefaultHeight = v31;
    v32 = MenuTexMgr::GetTexture(0xBu);
    v33 = FrameBoxWin::CreateWin(
            v32,
            7u,
            7u,
            uiLeft - v29,
            uiTop - iOrgY,
            &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            pkFrameWork);
    v34 = uiHeight;
    v35 = uiWidth;
    v2->baseclass_0.m_pkChattingBox = v33;
    ((void (__thiscall *)(FrameBoxWin *, int, int))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
      v33,
      v35,
      v34);
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
    v2->baseclass_0.m_pkChattingBox->m_bSizeDraggable = 1;
    ((void (__stdcall *)(signed int))v2->baseclass_0.m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v36 = Font::Get(BOLD);
    if ( v36 )
    {
      v37 = v36->baseclass_0.m_dwFontSizeInPixel;
      v38 = v2->baseclass_0.m_pkChattingBox;
      v38->m_iSizeDragMinHeight = 4 * v37 + 8;
      v38->m_iSizeDragMaxHeight = 40 * v37 + 88;
      ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v87 = (ChatBoardFlex **)v2->baseclass_0.m_aspChatBD;
      v86 = 4;
      do
      {
        v39 = v2->baseclass_0.m_pkChattingBox;
        v40 = ((int (__thiscall *)(FrameBoxWin *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2->baseclass_0.m_pkChattingBox);
        v41 = v39->m_uiEdgeHeight;
        v42 = v2->baseclass_0.m_pkChattingBox;
        v43 = v40 - 2 * v41;
        v44 = ((int (__thiscall *)(FrameBoxWin *))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2->baseclass_0.m_pkChattingBox);
        v45 = v42->m_uiEdgeWidth;
        v46 = v2->baseclass_0.m_pkChattingBox;
        pkSprDataa = v44 - 2 * v45;
        v47 = v2->baseclass_0.m_pkChattingBox;
        v48 = v47->m_uiEdgeHeight;
        v49 = v47->m_uiEdgeWidth;
        v50 = Font::Get(BOLD);
        v51 = v48
            + ((int (__thiscall *)(FrameBoxWin *))v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v46);
        v52 = ((int (__thiscall *)(FrameBoxWin *))v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v46);
        v53 = ChatBoardFlex::CreateWin(
                v49 + v52,
                v51,
                pkSprDataa,
                v43,
                v50,
                0,
                &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        v54 = *v87;
        pkSprData = v53;
        if ( *v87 != v53 )
        {
          if ( v54 )
          {
            if ( !InterlockedDecrement((volatile LONG *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
              && v54 )
              v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                (NiRefObject *)v54,
                1u);
            v53 = pkSprData;
          }
          *v87 = v53;
          if ( v53 )
            InterlockedIncrement((volatile LONG *)&v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        ChatBoardFlex::SetMaxTextLine(*v87, 100);
        (*v87)->m_MaxTextViewLine = 100;
        ((void (__stdcall *)(_DWORD))(*v87)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v55 = v86-- == 1;
        ++v87;
      }
      while ( !v55 );
      ChatDisplayWin::OnActive(&v2->baseclass_0, 0);
      v56 = ((int (*)(void))v2->baseclass_0.m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      v57 = ((int (__thiscall *)(SysMsgDisplayWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
      v58 = PgWinProxy::CreateWin(v57 - v56, 0, 0, 0, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      v2->baseclass_0.m_pkLTSocketWin = v58;
      v59 = iOrgX
          + ((int (__thiscall *)(PgWinProxy *))v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v58);
      v60 = iOrgY
          + ((int (*)(void))v2->baseclass_0.m_pkLTSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      pkSprDatab = PgSprData::Create(&spNode.m_pObject->baseclass_0, "UnlockNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkSprDatab, &spNode.m_pObject->baseclass_0, "lockNor");
      v61 = (NiAVObject *)ColumnBut::CreateWin(
                            uiLeft - v59,
                            uiTop - v60,
                            pkSprDatab,
                            &v2->baseclass_0.m_pkLTSocketWin->baseclass_0,
                            0x13u,
                            0);
      v62 = (NiProperty *)v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
      v2->baseclass_0.m_pkCheckBox = (ColumnBut *)v61;
      NiAVObject::AttachProperty(v61, v62);
      v2->baseclass_0.m_pkCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v63 = TextData2::Get(0x10D7C7C8u);
      PgWin::SetToolTipWinText(&v2->baseclass_0.m_pkCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v63);
      v64 = ((int (*)(void))v2->baseclass_0.m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v65 = ((int (__thiscall *)(SysMsgDisplayWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
      v66 = PgWinProxy::CreateWin(v65, v64, 0, 0, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      v2->baseclass_0.m_pkRBSocketWin = v66;
      v67 = iOrgX
          + ((int (__thiscall *)(PgWinProxy *))v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v66);
      v68 = iOrgY
          + ((int (*)(void))v2->baseclass_0.m_pkRBSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      pkSprDatac = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PreUpNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkSprDatac, &spNode.m_pObject->baseclass_0, "PreUpOver");
      PgSprData::Add(pkSprDatac, &spNode.m_pObject->baseclass_0, "PreUpClick");
      v69 = (NiAVObject *)PgWinBut::CreateWin(
                            uiLeft - v67,
                            uiTop - v68,
                            pkSprDatac,
                            &v2->baseclass_0.m_pkRBSocketWin->baseclass_0,
                            0,
                            0,
                            0);
      v70 = (NiProperty *)v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
      v2->baseclass_0.m_pkScrollUpBtn = (PgWinBut *)v69;
      NiAVObject::AttachProperty(v69, v70);
      pkSprDatad = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextDownNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkSprDatad, &spNode.m_pObject->baseclass_0, "NextDownOver");
      PgSprData::Add(pkSprDatad, &spNode.m_pObject->baseclass_0, "NextDownClick");
      v71 = (NiAVObject *)PgWinBut::CreateWin(
                            uiLeft - v67,
                            uiTop - v68,
                            pkSprDatad,
                            &v2->baseclass_0.m_pkRBSocketWin->baseclass_0,
                            1u,
                            0,
                            0);
      v72 = (NiProperty *)v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
      v2->baseclass_0.m_pkScrollDnBtn = (PgWinBut *)v71;
      NiAVObject::AttachProperty(v71, v72);
      pkSprDatae = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DownNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkSprDatae, &spNode.m_pObject->baseclass_0, "DownOver");
      PgSprData::Add(pkSprDatae, &spNode.m_pObject->baseclass_0, "DownClick");
      v73 = (NiAVObject *)PgWinBut::CreateWin(
                            uiLeft - v67,
                            uiTop - v68,
                            pkSprDatae,
                            &v2->baseclass_0.m_pkRBSocketWin->baseclass_0,
                            2u,
                            0,
                            0);
      v74 = (NiProperty *)v2->baseclass_0.m_spFixedMtrlProp.m_pObject;
      v2->baseclass_0.m_pkScrollMostDnBtn = (PgWinBut *)v73;
      NiAVObject::AttachProperty(v73, v74);
      pkSprDataf = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FillterNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkSprDataf, &spNode.m_pObject->baseclass_0, "FillterOver");
      PgSprData::Add(pkSprDataf, &spNode.m_pObject->baseclass_0, "FillterClick");
      v2->baseclass_0.m_pkFilterBtn = PgWinBut::CreateWin(
                                        uiLeft - v67,
                                        uiTop - v68,
                                        pkSprDataf,
                                        &v2->baseclass_0.m_pkRBSocketWin->baseclass_0,
                                        8u,
                                        0,
                                        0);
      v75 = TextData::Get(0xD812DC42u);
      PgWin::SetToolTipWinText(&v2->baseclass_0.m_pkFilterBtn->baseclass_0.baseclass_0, v75);
      v2->baseclass_0.m_pkFilterBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v76 = MenuTexMgr::GetTexture(1u);
      v77 = PopupMenuWin::CreateWin(v76, 4u, 4u, 0);
      v78 = v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject;
      v79 = v77;
      if ( v78 != v77 )
      {
        if ( v78
          && !InterlockedDecrement((volatile LONG *)&v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v78 )
          v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v78,
            1u);
        v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject = v79;
        if ( v79 )
          InterlockedIncrement((volatile LONG *)&v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
        &v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      PopupMenuWin::Clear(v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject);
      v80 = TextData::Get(0xF6063034u);
      v81 = PopupMenuTextCheck::CreateWin(v80, 0, 0, 0, 0, 0);
      v81->baseclass_0.m_ePopupMenuID = 25;
      PopupMenuWin::AddMenu(v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject, &v81->baseclass_0);
      v82 = TextData::Get(0xF607102Au);
      v83 = PopupMenuTextCheck::CreateWin(v82, 0, 0, 0, 0, 0);
      v83->baseclass_0.m_ePopupMenuID = 26;
      PopupMenuWin::AddMenu(v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject, &v83->baseclass_0);
      PopupMenuWin::FinishMenu(v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject, 0);
      ((void (__stdcall *)(_DWORD))v2->baseclass_0.m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      PgWin::InitPosRightTop(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        1.0,
        0.80000001);
      v94 = -1;
      if ( spNode.m_pObject )
      {
        v84 = spNode.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v84 )
            v84->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v84, 1u);
        }
      }
      result = 1;
    }
    else
    {
      v94 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v30 = spNode.m_pObject;
    v94 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v30 )
      v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
    result = 0;
  }
  return result;
}
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005A53A0) --------------------------------------------------------
SysMsgDisplayWin *__cdecl SysMsgDisplayWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SysMsgDisplayWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x26Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    ChatDisplayWin::ChatDisplayWin((ChatDisplayWin *)v1);
    *(_DWORD *)v2 = &SysMsgDisplayWin::_vftable_;
    *((_DWORD *)v2 + 58) = &SysMsgDisplayWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 544))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SysMsgDisplayWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9AF598: using guessed type int (__stdcall *SysMsgDisplayWin___vftable_)(int uiFlags);
// 9AF5B4: using guessed type int (__thiscall *SysMsgDisplayWin___vftable_)(void *p, char);

//----- (005A54E0) --------------------------------------------------------
void __thiscall SystemWin::SystemWin(SystemWin *this)
{
  SystemWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SystemWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SystemWin::_vftable_;
}
// 9AF9F0: using guessed type int (__stdcall *SystemWin___vftable_)(int uiFlags);
// 9AFA0C: using guessed type int (__thiscall *SystemWin___vftable_)(void *p, char);

//----- (005A5500) --------------------------------------------------------
void __thiscall SystemWin::_SystemWin(SystemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SystemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SystemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9AF9F0: using guessed type int (__stdcall *SystemWin___vftable_)(int uiFlags);
// 9AFA0C: using guessed type int (__thiscall *SystemWin___vftable_)(void *p, char);

//----- (005A5520) --------------------------------------------------------
void __thiscall SystemWin::OnCmdOption(SystemWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x17u, 0, 0);
}

//----- (005A5540) --------------------------------------------------------
void __thiscall SystemWin::OnCmdGoCharSelect(SystemWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x19u, 0, 0);
}

//----- (005A5560) --------------------------------------------------------
void __thiscall SystemWin::OnCmdLogout(SystemWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x18u, 0, 0);
}

//----- (005A5580) --------------------------------------------------------
void __thiscall SystemWin::OnCmdExit(SystemWin *this)
{
  PgFrameWork *v1; // ecx@1

  v1 = this->baseclass_0.m_pkFrameWork;
  if ( v1 )
    PgFrameWork::AddMsg(v1, 0x1Au, 0, 0);
}

//----- (005A55A0) --------------------------------------------------------
void __thiscall SystemWin::OnCancel(SystemWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005A55B0) --------------------------------------------------------
void __thiscall SystemWin::OnHelpLink(SystemWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "SystemWin");
}

//----- (005A55E0) --------------------------------------------------------
void __thiscall SystemWin::OnCommand(SystemWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // ecx@2
  PgFrameWork *v4; // ecx@4
  PgFrameWork *v5; // ecx@6

  switch ( wParam )
  {
    case 6u:
      v3 = this->baseclass_0.m_pkFrameWork;
      if ( v3 )
        PgFrameWork::AddMsg(v3, 0x19u, 0, 0);
      break;
    case 7u:
      v4 = this->baseclass_0.m_pkFrameWork;
      if ( v4 )
        PgFrameWork::AddMsg(v4, 0x18u, 0, 0);
      break;
    case 8u:
      v5 = this->baseclass_0.m_pkFrameWork;
      if ( v5 )
        PgFrameWork::AddMsg(v5, 0x1Au, 0, 0);
      break;
    case 9u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 3u:
      GameFrameWork::OpenGraphicOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 2u:
      GameFrameWork::OpenGameOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 4u:
      GameFrameWork::OpenSoundOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 5u:
      GameFrameWork::OpenKeyRemappingOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 1u:
      GameFrameWork::OpenHelpWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xAu:
      SystemWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005A56E0) --------------------------------------------------------
bool __thiscall SystemWin::Create(SystemWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // ebx@10
  int v9; // edi@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // ebx@13
  NiSourceTexture *v15; // ebx@13
  PgSprData *v16; // ebx@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // ebx@21
  char *v20; // eax@21
  PgSprData *v21; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v22; // edx@21
  unsigned int v23; // ebx@21
  PgFont *v24; // eax@21
  PgWinText *v25; // ebx@21
  char *v26; // eax@21
  PgSprData *v27; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v28; // edx@21
  unsigned int v29; // ebx@21
  PgFont *v30; // eax@21
  PgWinText *v31; // ebx@21
  char *v32; // eax@21
  PgSprData *v33; // ebx@21
  PgWinBut *v34; // eax@21
  NiPointer<PgSprData::PgHitTester> *v35; // ecx@23
  unsigned int v36; // ebx@23
  PgFont *v37; // eax@23
  PgWinText *v38; // ebx@23
  char *v39; // eax@23
  PgSprData *v40; // ebx@23
  NiPointer<PgSprData::PgHitTester> *v41; // edx@23
  unsigned int v42; // ebx@23
  PgFont *v43; // eax@23
  PgWinText *v44; // ebx@23
  char *v45; // eax@23
  PgSprData *v46; // ebx@23
  NiPointer<PgSprData::PgHitTester> *v47; // edx@23
  unsigned int v48; // ebx@23
  PgFont *v49; // eax@23
  PgWinText *v50; // ebx@23
  char *v51; // eax@23
  PgSprData *v52; // ebx@23
  PgWinBut *v53; // eax@23
  NiPointer<PgSprData::PgHitTester> *v54; // ecx@23
  unsigned int v55; // ebx@23
  PgFont *v56; // eax@23
  PgWinText *v57; // ebx@23
  char *v58; // eax@23
  PgSprData *v59; // ebx@23
  NiPointer<PgSprData::PgHitTester> *v60; // edx@23
  unsigned int v61; // ebx@23
  PgFont *v62; // eax@23
  PgWinText *v63; // ebx@23
  char *v64; // eax@23
  PgSprData *v65; // ebx@23
  NiPointer<PgSprData::PgHitTester> *v66; // edx@23
  unsigned int v67; // ebx@23
  PgFont *v68; // eax@23
  PgWinText *v69; // ebx@23
  char *v70; // eax@23
  PgSprData *v71; // ebx@23
  NiPointer<PgSprData::PgHitTester> *v72; // edx@23
  unsigned int v73; // ebx@23
  PgFont *v74; // eax@23
  PgWinText *v75; // edi@23
  NiRefObjectVtbl *v76; // ebx@23
  char *v77; // eax@23
  NiNode *v78; // esi@24
  const char *v79; // [sp+80h] [bp-40h]@11
  int *v80; // [sp+84h] [bp-3Ch]@11
  int *v81; // [sp+88h] [bp-38h]@11
  NiSourceTexture *v82; // [sp+8Ch] [bp-34h]@11
  unsigned int uiWidth; // [sp+A0h] [bp-20h]@15
  unsigned int uiHeight; // [sp+A4h] [bp-1Ch]@15
  int uiLeft; // [sp+A8h] [bp-18h]@4
  int uiTop; // [sp+ACh] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+B0h] [bp-10h]@1
  int v88; // [sp+BCh] [bp-4h]@1
  int iYOff; // [sp+C8h] [bp+8h]@10
  NiRefObjectVtbl *iYOffa; // [sp+C8h] [bp+8h]@21
  unsigned int iYOffb; // [sp+C8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffc; // [sp+C8h] [bp+8h]@21
  unsigned int iYOffd; // [sp+C8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffe; // [sp+C8h] [bp+8h]@21
  unsigned int iYOfff; // [sp+C8h] [bp+8h]@23
  NiRefObjectVtbl *iYOffg; // [sp+C8h] [bp+8h]@23
  unsigned int iYOffh; // [sp+C8h] [bp+8h]@23
  NiRefObjectVtbl *iYOffi; // [sp+C8h] [bp+8h]@23
  unsigned int iYOffj; // [sp+C8h] [bp+8h]@23
  NiRefObjectVtbl *iYOffk; // [sp+C8h] [bp+8h]@23
  unsigned int iYOffl; // [sp+C8h] [bp+8h]@23
  NiRefObjectVtbl *iYOffm; // [sp+C8h] [bp+8h]@23
  unsigned int iYOffn; // [sp+C8h] [bp+8h]@23
  NiRefObjectVtbl *iYOffo; // [sp+C8h] [bp+8h]@23
  unsigned int iYOffp; // [sp+C8h] [bp+8h]@23
  NiRefObjectVtbl *iYOffq; // [sp+C8h] [bp+8h]@23
  unsigned int iYOffr; // [sp+C8h] [bp+8h]@23

  v2 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v88 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\SystemWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v5, 0, pkFrameWork, "SystemWin", 0) )
  {
    v6 = spNode.m_pObject;
    v88 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v82 = v10;
    v81 = &uiTop;
    v80 = &uiLeft;
    v79 = "Theme";
  }
  else
  {
    v82 = 0;
    v81 = &uiTop;
    v80 = &uiLeft;
    v79 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v79, v80, v81, v82);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0, 0xAu, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(MAIN_MENU);
    v19 = PgWinText::CreateWin(uiLeft - v9, uiTop, uiWidth, uiHeight, v18, &v2->baseclass_0.baseclass_0, 0, 0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    iYOffa = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData::Get(0xF1FDF101u);
    iYOffa[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v20);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "HelpClick");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "HelpOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v21, &v2->baseclass_0.baseclass_0, 1u, 0, 0);
    v22 = v21->m_akHitTester.m_pBase;
    v23 = v22->m_pObject->m_uiHeight;
    iYOffb = v22->m_pObject->m_uiWidth;
    v24 = Font::Get(MAIN_MENU);
    v25 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffb, v23, v24, &v2->baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    iYOffc = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData::Get(0x98A7F8F9u);
    iYOffc[118].__vecDelDtor((NiRefObject *)v25, (unsigned int)v26);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GameNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "GameClick");
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "GameOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v27, &v2->baseclass_0.baseclass_0, 2u, 0, 0);
    v28 = v27->m_akHitTester.m_pBase;
    v29 = v28->m_pObject->m_uiHeight;
    iYOffd = v28->m_pObject->m_uiWidth;
    v30 = Font::Get(MAIN_MENU);
    v31 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffd, v29, v30, &v2->baseclass_0.baseclass_0, 0, 0);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v31,
      5u);
    iYOffe = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v32 = TextData::Get(0xD9F94C4Eu);
    iYOffe[118].__vecDelDtor((NiRefObject *)v31, (unsigned int)v32);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GraphicNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v33, &spNode.m_pObject->baseclass_0, "GraphicClick");
    PgSprData::Add(v33, &spNode.m_pObject->baseclass_0, "GraphicOver");
    v34 = PgWinBut::CreateWin(uiLeft - v9, uiTop, v33, &v2->baseclass_0.baseclass_0, 3u, 0, 0);
    if ( GameFrameWork::ms_bSpawnApps == 1 )
      v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v34,
        0);
    v35 = v33->m_akHitTester.m_pBase;
    v36 = v35->m_pObject->m_uiHeight;
    iYOfff = v35->m_pObject->m_uiWidth;
    v37 = Font::Get(MAIN_MENU);
    v38 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOfff, v36, v37, &v2->baseclass_0.baseclass_0, 0, 0);
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v38,
      5u);
    iYOffg = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v39 = TextData::Get(0x33414E85u);
    iYOffg[118].__vecDelDtor((NiRefObject *)v38, (unsigned int)v39);
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v38,
      0);
    v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SoundNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v40, &spNode.m_pObject->baseclass_0, "SoundClick");
    PgSprData::Add(v40, &spNode.m_pObject->baseclass_0, "SoundOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v40, &v2->baseclass_0.baseclass_0, 4u, 0, 0);
    v41 = v40->m_akHitTester.m_pBase;
    v42 = v41->m_pObject->m_uiHeight;
    iYOffh = v41->m_pObject->m_uiWidth;
    v43 = Font::Get(MAIN_MENU);
    v44 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffh, v42, v43, &v2->baseclass_0.baseclass_0, 0, 0);
    v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v44,
      5u);
    iYOffi = v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v45 = TextData::Get(0xE7495556u);
    iYOffi[118].__vecDelDtor((NiRefObject *)v44, (unsigned int)v45);
    v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v44,
      0);
    v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "KeyRemappingNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v46, &spNode.m_pObject->baseclass_0, "KeyRemappingClick");
    PgSprData::Add(v46, &spNode.m_pObject->baseclass_0, "KeyRemappingOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v46, &v2->baseclass_0.baseclass_0, 5u, 0, 0);
    v47 = v46->m_akHitTester.m_pBase;
    v48 = v47->m_pObject->m_uiHeight;
    iYOffj = v47->m_pObject->m_uiWidth;
    v49 = Font::Get(MAIN_MENU);
    v50 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffj, v48, v49, &v2->baseclass_0.baseclass_0, 0, 0);
    v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v50,
      5u);
    iYOffk = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v51 = TextData::Get(0x2C4566AEu);
    iYOffk[118].__vecDelDtor((NiRefObject *)v50, (unsigned int)v51);
    v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v50,
      0);
    v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SelectCharNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v52, &spNode.m_pObject->baseclass_0, "SelectCharClick");
    PgSprData::Add(v52, &spNode.m_pObject->baseclass_0, "SelectCharOver");
    v53 = PgWinBut::CreateWin(uiLeft - v9, uiTop, v52, &v2->baseclass_0.baseclass_0, 6u, 0, 0);
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v53,
      1u);
    v54 = v52->m_akHitTester.m_pBase;
    v55 = v54->m_pObject->m_uiHeight;
    iYOffl = v54->m_pObject->m_uiWidth;
    v56 = Font::Get(MAIN_MENU);
    v57 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffl, v55, v56, &v2->baseclass_0.baseclass_0, 0, 0);
    v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v57,
      5u);
    iYOffm = v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v58 = TextData::Get(0x9F808694u);
    iYOffm[118].__vecDelDtor((NiRefObject *)v57, (unsigned int)v58);
    v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v57,
      0);
    v59 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LogoutNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v59, &spNode.m_pObject->baseclass_0, "LogoutClick");
    PgSprData::Add(v59, &spNode.m_pObject->baseclass_0, "LogoutOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v59, &v2->baseclass_0.baseclass_0, 7u, 0, 0);
    v60 = v59->m_akHitTester.m_pBase;
    v61 = v60->m_pObject->m_uiHeight;
    iYOffn = v60->m_pObject->m_uiWidth;
    v62 = Font::Get(MAIN_MENU);
    v63 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffn, v61, v62, &v2->baseclass_0.baseclass_0, 0, 0);
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v63,
      5u);
    iYOffo = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v64 = TextData::Get(0xE9F54255u);
    iYOffo[118].__vecDelDtor((NiRefObject *)v63, (unsigned int)v64);
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v63,
      0);
    v65 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "QuitNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v65, &spNode.m_pObject->baseclass_0, "QuitClick");
    PgSprData::Add(v65, &spNode.m_pObject->baseclass_0, "QuitOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v65, &v2->baseclass_0.baseclass_0, 8u, 0, 0);
    v66 = v65->m_akHitTester.m_pBase;
    v67 = v66->m_pObject->m_uiHeight;
    iYOffp = v66->m_pObject->m_uiWidth;
    v68 = Font::Get(MAIN_MENU);
    v69 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffp, v67, v68, &v2->baseclass_0.baseclass_0, 0, 0);
    v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v69,
      5u);
    iYOffq = v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v70 = TextData::Get(0xE2EB4C3Eu);
    iYOffq[118].__vecDelDtor((NiRefObject *)v69, (unsigned int)v70);
    v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v69,
      0);
    v71 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v71, &spNode.m_pObject->baseclass_0, "CancelClick");
    PgSprData::Add(v71, &spNode.m_pObject->baseclass_0, "CancelOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v71, &v2->baseclass_0.baseclass_0, 9u, 0, 0);
    v72 = v71->m_akHitTester.m_pBase;
    v73 = v72->m_pObject->m_uiHeight;
    iYOffr = v72->m_pObject->m_uiWidth;
    v74 = Font::Get(MAIN_MENU);
    v75 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffr, v73, v74, &v2->baseclass_0.baseclass_0, 0, 0);
    v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v75,
      5u);
    v76 = v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v77 = TextData::Get(0x9FE7FBFCu);
    v76[118].__vecDelDtor((NiRefObject *)v75, (unsigned int)v77);
    v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v75,
      0);
    ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v88 = -1;
    if ( spNode.m_pObject )
    {
      v78 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v78 )
          v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v78, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v88 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;
// A987CC: using guessed type bool GameFrameWork__ms_bSpawnApps;

//----- (005A61D0) --------------------------------------------------------
SystemWin *__cdecl SystemWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SystemWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &SystemWin::_vftable_;
    *((_DWORD *)v2 + 58) = &SystemWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SystemWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9AF9F0: using guessed type int (__stdcall *SystemWin___vftable_)(int uiFlags);
// 9AFA0C: using guessed type int (__thiscall *SystemWin___vftable_)(void *p, char);

//----- (005A6310) --------------------------------------------------------
void *__thiscall SystemWin::_scalar_deleting_destructor_(SystemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SystemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SystemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AF9F0: using guessed type int (__stdcall *SystemWin___vftable_)(int uiFlags);
// 9AFA0C: using guessed type int (__thiscall *SystemWin___vftable_)(void *p, char);

//----- (005A6350) --------------------------------------------------------
void __thiscall MobIconWin::MobIconWin(MobIconWin *this)
{
  MobIconWin *v1; // esi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MobIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MobIconWin::_vftable_;
  IconWin::CreateGeometry(&v1->baseclass_0, 0x10u, 0x10u);
}
// 9AFFE4: using guessed type int (__stdcall *MobIconWin___vftable_)(int uiFlags);
// 9B0004: using guessed type int (__thiscall *MobIconWin___vftable_)(void *p, char);

//----- (005A63C0) --------------------------------------------------------
void __thiscall MobIconWin::_MobIconWin(MobIconWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MobIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MobIconWin::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
}
// 9AFFE4: using guessed type int (__stdcall *MobIconWin___vftable_)(int uiFlags);
// 9B0004: using guessed type int (__thiscall *MobIconWin___vftable_)(void *p, char);

//----- (005A63E0) --------------------------------------------------------
bool __thiscall MobIconWin::Create(MobIconWin *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x10u, 0x10u, pkParent, 0, 0) != 0;
}

//----- (005A6410) --------------------------------------------------------
void __thiscall AbStateIconWin::AbStateIconWin(AbStateIconWin *this)
{
  AbStateIconWin *v1; // esi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AbStateIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AbStateIconWin::_vftable_;
  IconWin::CreateGeometry(&v1->baseclass_0, 0x14u, 0x14u);
}
// 9B026C: using guessed type int (__stdcall *AbStateIconWin___vftable_)(int uiFlags);
// 9B028C: using guessed type int (__thiscall *AbStateIconWin___vftable_)(void *p, char);

//----- (005A6480) --------------------------------------------------------
void __thiscall AbStateIconWin::_AbStateIconWin(AbStateIconWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AbStateIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AbStateIconWin::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
}
// 9B026C: using guessed type int (__stdcall *AbStateIconWin___vftable_)(int uiFlags);
// 9B028C: using guessed type int (__thiscall *AbStateIconWin___vftable_)(void *p, char);

//----- (005A64A0) --------------------------------------------------------
bool __thiscall AbStateIconWin::Create(AbStateIconWin *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x14u, 0x14u, pkParent, 0, 0) != 0;
}

//----- (005A64D0) --------------------------------------------------------
void __thiscall TargetWin::ShowTOT(TargetWin *this)
{
  if ( this->m_bEnableTOT )
    ((void (__stdcall *)(_DWORD))this->m_pkTargetOfTheTargetWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (005A6510) --------------------------------------------------------
void __thiscall TargetWin::SetSoulDefault(TargetWin *this, bool bShowCount)
{
  signed int v2; // edi@2
  signed int v3; // esi@2
  int i; // ebx@2
  TargetWin *v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( this->m_apkSoulWin[0][0] )
  {
    v2 = 0;
    v3 = 0;
    for ( i = (int)this->m_apkSoulWin; ; i = (int)v5->m_apkSoulWin )
    {
      while ( 1 )
      {
        if ( v2 || bShowCount != 1 )
          ((void (__stdcall *)(_DWORD))this->m_apkSoulWin[0][v3 + 7 * v2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        else
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)i + 256))(1);
        ++v3;
        i += 4;
        if ( v3 >= 7 )
          break;
        this = v5;
      }
      ++v2;
      if ( v2 >= 2 )
        break;
      this = v5;
      v3 = 0;
    }
  }
}

//----- (005A65A0) --------------------------------------------------------
int __thiscall TargetWin::GetSouldCount(TargetWin *this)
{
  int v1; // esi@1
  char *v2; // edi@1

  v1 = 0;
  v2 = (char *)this->m_apkSoulWin[1];
  do
  {
    if ( !(unsigned __int8)(*(int (**)(void))(**(_DWORD **)v2 + 260))() )
      break;
    ++v1;
    v2 += 4;
  }
  while ( v1 < 7 );
  return v1;
}

//----- (005A65D0) --------------------------------------------------------
void __thiscall TargetOfTheTargetWin::TargetOfTheTargetWin(TargetOfTheTargetWin *this)
{
  TargetOfTheTargetWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkLevelOver = 0;
  v1->m_pkLevelText = 0;
  v1->m_pkCharNameText = 0;
  v1->m_bEnable = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TargetOfTheTargetWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TargetOfTheTargetWin::_vftable_;
  v1->m_iLevel = -1;
}
// 9B04F4: using guessed type int (__stdcall *TargetOfTheTargetWin___vftable_)(int uiFlags);
// 9B0514: using guessed type int (__thiscall *TargetOfTheTargetWin___vftable_)(void *p, char);

//----- (005A6610) --------------------------------------------------------
void __thiscall TargetOfTheTargetWin::_TargetOfTheTargetWin(TargetOfTheTargetWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TargetOfTheTargetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TargetOfTheTargetWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B04F4: using guessed type int (__stdcall *TargetOfTheTargetWin___vftable_)(int uiFlags);
// 9B0514: using guessed type int (__thiscall *TargetOfTheTargetWin___vftable_)(void *p, char);

//----- (005A6630) --------------------------------------------------------
void __thiscall TargetOfTheTargetWin::SetTargetLv(TargetOfTheTargetWin *this, int iLv)
{
  this->m_iLevel = iLv;
}

//----- (005A6640) --------------------------------------------------------
void __thiscall TargetOfTheTargetWin::AbbreviateText(TargetOfTheTargetWin *this, char *pResult, char *pTarget, int nAbbreviationSize)
{
  char *v4; // edi@1
  int v5; // eax@1
  int v6; // ebx@3
  char *v7; // esi@3
  int v8; // esi@8
  char v9; // al@9
  char *v10; // eax@11
  char v11; // cl@12

  v4 = pTarget;
  v5 = strlen(pTarget);
  if ( v5 && v5 >= nAbbreviationSize )
  {
    v6 = 0;
    v7 = pResult;
    while ( v6 < nAbbreviationSize )
    {
      if ( IsDBCSLeadByte(*v4) )
      {
        *v7 = *v4;
        v6 += 2;
        v7[1] = v4[1];
        v4 += 2;
        v7 += 2;
      }
      else
      {
        ++v6;
        *v7++ = *v4++;
      }
    }
    v8 = (int)(v7 - 1);
    do
      v9 = *(_BYTE *)(v8++ + 1);
    while ( v9 );
    *(_DWORD *)v8 = dword_9AFFDC;
  }
  else
  {
    v10 = pTarget;
    do
    {
      v11 = *v10;
      v10[pResult - pTarget] = *v10;
      ++v10;
    }
    while ( v11 );
  }
}
// 9AFFDC: using guessed type int dword_9AFFDC;

//----- (005A66E0) --------------------------------------------------------
void __thiscall TargetOfTheTargetWin::SetEnable(TargetOfTheTargetWin *this, bool b)
{
  this->m_bEnable = b;
}

//----- (005A66F0) --------------------------------------------------------
void __thiscall TargetWin::ShowBarWin(TargetWin *this, bool b)
{
  TargetWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkHPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  if ( b )
  {
    switch ( v2->m_kTargetClassID )
    {
      case 0x1A:
      case 0x1B:
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v2->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v2->m_pkSPBarEnd,
          0);
        break;
      default:
        ((void (__stdcall *)(_DWORD))v2->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        v2->m_pkSPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v2->m_pkSPBar,
          b);
        break;
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkLPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkLPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v2->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2->m_pkLPBarEnd,
      0);
  }
}

//----- (005A6920) --------------------------------------------------------
void __thiscall TargetWin::OnMouseEvent(TargetWin *this, PgWin::PG_MOUSE_EVENT eMouseEvent, PgWin *pkWin)
{
  TargetWin *v3; // esi@1
  unsigned int v4; // ecx@2
  unsigned int v5; // eax@4

  v3 = this;
  if ( eMouseEvent == 4 )
  {
    v4 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
    if ( v4 )
    {
      if ( *(_BYTE *)(v4 + 2672) )
      {
        v5 = (*(int (**)(void))(*(_DWORD *)v4 + 84))();
        PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0x80u, v5, 0);
      }
    }
  }
}

//----- (005A6970) --------------------------------------------------------
void __thiscall TargetWin::Show(TargetWin *this, bool b)
{
  if ( b )
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  else
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (005A6990) --------------------------------------------------------
void __thiscall TargetWin::SetTOTLv(TargetWin *this, int iLv)
{
  this->m_pkTargetOfTheTargetWin->m_iLevel = iLv;
}

//----- (005A69B0) --------------------------------------------------------
void __thiscall TargetWin::SetSoulCount(TargetWin *this, int Count, bool bShow, bool bShowEff)
{
  TargetWin *v4; // esi@1
  char *v5; // ebx@1
  signed int v6; // edi@1
  int v7; // ebx@4
  char *v8; // esi@5
  SpEffect **v9; // esi@11
  int v10; // ebx@11
  SpEffect **v11; // esi@16
  int v12; // edi@16
  TargetWin *v13; // [sp+Ch] [bp-8h]@1
  char *v14; // [sp+10h] [bp-4h]@1

  v4 = this;
  v5 = (char *)this->m_apkSoulWin[1];
  v13 = this;
  v6 = 0;
  v14 = (char *)this->m_apkSoulWin[1];
  do
  {
    if ( !(unsigned __int8)(*(int (**)(void))(**(_DWORD **)v5 + 260))() )
      break;
    ++v6;
    v5 += 4;
  }
  while ( v6 < 7 );
  TargetWin::SetSoulDefault(v4, bShow);
  v7 = Count;
  if ( Count > 0 )
  {
    v8 = v14;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v8 - 7) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(bShow);
      v8 += 4;
      --Count;
    }
    while ( Count );
    v4 = v13;
  }
  if ( bShow == 1 && bShowEff == 1 )
  {
    if ( v6 >= v7 )
    {
      if ( v6 > v7 && v7 < v6 )
      {
        v11 = (SpEffect **)((char *)v4->m_apkSoulWinEffect + 4 * v7);
        v12 = v6 - v7;
        do
        {
          SpEffect::Start(*v11, (NiNode *)&(*(v11 - 14))->m_spEffect.m_pObject);
          ++v11;
          --v12;
        }
        while ( v12 );
      }
    }
    else
    {
      v9 = &v4->m_apkSoulWinEffect[1][v6];
      v10 = v7 - v6;
      do
      {
        SpEffect::Start(*v9, (NiNode *)&(*(v9 - 14))->m_spEffect.m_pObject);
        ++v9;
        --v10;
      }
      while ( v10 );
    }
  }
}

//----- (005A6A90) --------------------------------------------------------
void __thiscall TargetWin::OnMinButClick(TargetWin *this)
{
  TargetWin *v1; // esi@1
  PgFrameWork *v2; // eax@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMinButton->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkMaxButton->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v2 = v1->baseclass_0.m_pkFrameWork;
  v1->m_bEnableTOT = 0;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v2[17].m_kMsgQ.m_uiTail);
  MachineOpt::ms_kUserLoginOption.bTargetOfTerget = v1->m_bEnableTOT;
}

//----- (005A6AF0) --------------------------------------------------------
void __thiscall TargetWin::OnMaxButClick(TargetWin *this)
{
  TargetWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMinButton->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkMaxButton->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_bEnableTOT = 1;
  if ( CharMgr::GetChar(
         &g_kCharMgr,
         HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0])) )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v1->baseclass_0.m_pkFrameWork[17].m_kMsgQ.m_uiTail);
    MachineOpt::ms_kUserLoginOption.bTargetOfTerget = v1->m_bEnableTOT;
  }
  else
  {
    MachineOpt::ms_kUserLoginOption.bTargetOfTerget = v1->m_bEnableTOT;
  }
}

//----- (005A6B70) --------------------------------------------------------
void __thiscall TargetWin::ReSetTOT(TargetWin *this, bool bTOT)
{
  if ( bTOT == 1 )
    TargetWin::OnMaxButClick(this);
  else
    TargetWin::OnMinButClick(this);
}

//----- (005A6B90) --------------------------------------------------------
void __thiscall TargetWin::PlayerTargetBaseTexture(TargetWin *this, Char *pkTargetChar)
{
  TargetWin *v2; // esi@1
  NiTexture *v3; // edi@1
  signed int v4; // [sp+0h] [bp-Ch]@2

  v2 = this;
  v3 = PortraitTextureBuffer::GetOtherCharPortrait(pkTargetChar);
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkTargetChar->baseclass_0.vfptr[20].SetAbStateProperty)(pkTargetChar) )
  {
    PgSpr::SetTexture(v2->m_pkMobPortrait->m_spSpr.m_pObject, v3);
    ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v4 = 0;
  }
  else
  {
    MaskedWin::SetBaseTexture(v2->m_pkPortrait, v3);
    ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v4 = 1;
  }
  ((void (__cdecl *)(_DWORD))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4);
}

//----- (005A6C20) --------------------------------------------------------
void __thiscall TargetWin::OnCommand(TargetWin *this, unsigned int wParam, int lParam)
{
  if ( wParam == 10001 )
  {
    TargetWin::OnMinButClick(this);
  }
  else
  {
    if ( wParam == 10002 )
      TargetWin::OnMaxButClick(this);
  }
}

//----- (005A6C50) --------------------------------------------------------
void __thiscall TargetWin::SetBuffUI(TargetWin *this, Char *pkMember, StateType type, int *AbstateNums)
{
  signed int v4; // ebx@0
  signed int v5; // edi@0
  TargetWin *v6; // esi@1
  NiTListItem<AbStateInst *> *v7; // ecx@1
  signed int v8; // eax@1
  AbstateIcon **v9; // edi@2
  AbstateIcon **v10; // esi@2
  AbStateInst *v11; // ebx@5
  int v12; // eax@9
  bool v13; // zf@9
  int v14; // eax@9
  int v15; // eax@15
  NiTListItem<unsigned short> *v16; // edx@15
  int v17; // eax@21
  int v18; // eax@21
  int v19; // eax@22
  int v20; // eax@26
  NiTListItem<unsigned short> *v21; // edx@26
  int v22; // eax@32
  int v23; // eax@32
  int v24; // eax@33
  signed int v25; // [sp-8h] [bp-24h]@2
  signed int v26; // [sp-4h] [bp-20h]@2
  int v27; // [sp+4h] [bp-18h]@5
  unsigned __int16 v28; // [sp+4h] [bp-18h]@19
  unsigned __int16 v29; // [sp+4h] [bp-18h]@30
  NiTListItem<AbStateInst *> *kIter; // [sp+8h] [bp-14h]@5
  TargetWin *v31; // [sp+Ch] [bp-10h]@1
  unsigned __int16 pkInfo; // [sp+10h] [bp-Ch]@5
  int pkInfoa; // [sp+10h] [bp-Ch]@6
  GameFrameWork *pkInfob; // [sp+10h] [bp-Ch]@19
  GameFrameWork *pkInfoc; // [sp+10h] [bp-Ch]@30
  int v36; // [sp+14h] [bp-8h]@2
  int v37; // [sp+18h] [bp-4h]@2
  int i; // [sp+24h] [bp+8h]@1

  v6 = this;
  v31 = this;
  v7 = AbStateInfectee::GetAbStateList(&pkMember->baseclass_0)->baseclass_0.baseclass_0.m_pkHead;
  v8 = *AbstateNums;
  i = *AbstateNums;
  if ( v7 )
  {
    v26 = v4;
    v36 = (int)&v6->m_apkAbstateBuffWin[v8];
    v25 = v5;
    v9 = (AbstateIcon **)&v6->m_apkAbstateBufIconWin[v8];
    v37 = (int)&v6->m_apkAbstateDBuffWin[v8];
    v10 = (AbstateIcon **)&v6->m_apkAbstateDeBufIconWin[v8];
    while ( v8 < 15 )
    {
      v11 = v7->m_element;
      kIter = v7->m_pkNext;
      pkInfo = v11->kID;
      v27 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                         + 16))(v11->kID) )
      {
        if ( pkInfo <= *(_WORD *)(v27 + 200) )
        {
          v12 = *(_DWORD *)(v27 + 196);
          v13 = *(_DWORD *)(v12 + 4 * pkInfo) == 0;
          v14 = v12 + 4 * pkInfo;
          if ( v13 )
            pkInfoa = 0;
          else
            pkInfoa = *(_DWORD *)v14;
        }
        else
        {
          pkInfoa = 0;
        }
      }
      else
      {
        pkInfoa = 0;
      }
      if ( *(_BYTE *)(pkInfoa + 526) )
      {
        if ( type != 4 || *(_DWORD *)(pkInfoa + 522) != 4 )
        {
          if ( *(_DWORD *)(pkInfoa + 522) == type )
          {
            v20 = ((int (__thiscall *)(NiTList<unsigned short> *, signed int, signed int))v31->m_kAbStateList.baseclass_0.baseclass_0.vfptr->NewItem)(
                    &v31->m_kAbStateList,
                    v25,
                    v26);
            *(_WORD *)(v20 + 8) = v11->kID;
            *(_DWORD *)v20 = 0;
            *(_DWORD *)(v20 + 4) = v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail;
            v21 = v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail;
            if ( v21 )
              v21->m_pkNext = (NiTListItem<unsigned short> *)v20;
            else
              v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<unsigned short> *)v20;
            ++*(_DWORD *)&v31->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
            v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<unsigned short> *)v20;
            AbstateIcon::SetAbstate(*v9, v11->kID);
            PgWin::SetToolTipWinText(
              &(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              (char *)(pkInfoa + 70));
            (*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
            v26 = 1;
            ((void (*)(void))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
            v25 = 1;
            ((void (*)(void))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)();
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v36 + 256))(1);
            ++i;
            v37 += 4;
            v36 += 4;
            ++v10;
            ++v9;
            if ( v11->uiSubStateStr )
            {
              v29 = v11->kID;
              pkInfoc = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
              if ( (unsigned __int8)((int (__stdcall *)(_DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(v11->kID) )
              {
                if ( v29 <= LOWORD(pkInfoc->m_ResList[2].m_eAspect) )
                {
                  v22 = *(_DWORD *)&pkInfoc->m_ResList[2].m_bCheckAdd;
                  v13 = *(_DWORD *)(v22 + 4 * v29) == 0;
                  v23 = v22 + 4 * v29;
                  if ( !v13 )
                  {
                    v24 = *(_DWORD *)v23;
                    if ( v24 )
                    {
                      if ( *(_BYTE *)(v24 + 288) )
                      {
                        AbstateIcon::SetDuplicate(*v9, v11->uiSubStateStr);
                        ((void (__stdcall *)(signed int))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                        ((void (__stdcall *)(signed int))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                        ((void (__stdcall *)(signed int))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
                        (*(void (__stdcall **)(signed int))(**(_DWORD **)v36 + 256))(1);
                        ++i;
                        v37 += 4;
                        ++v10;
                        ++v9;
                        v36 += 4;
                      }
                    }
                  }
                }
              }
            }
          }
        }
        else
        {
          v15 = ((int (__thiscall *)(NiTList<unsigned short> *, signed int, signed int))v31->m_kAbStateList.baseclass_0.baseclass_0.vfptr->NewItem)(
                  &v31->m_kAbStateList,
                  v25,
                  v26);
          *(_WORD *)(v15 + 8) = v11->kID;
          *(_DWORD *)v15 = 0;
          *(_DWORD *)(v15 + 4) = v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail;
          v16 = v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail;
          if ( v16 )
            v16->m_pkNext = (NiTListItem<unsigned short> *)v15;
          else
            v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<unsigned short> *)v15;
          ++*(_DWORD *)&v31->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
          v31->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<unsigned short> *)v15;
          AbstateIcon::SetAbstate(*v10, v11->kID);
          PgWin::SetToolTipWinText(
            &(*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            (char *)(pkInfoa + 70));
          (*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
          v26 = 1;
          ((void (*)(void))(*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
          v25 = 1;
          ((void (*)(void))(*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)();
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v37 + 256))(1);
          ++i;
          v37 += 4;
          v36 += 4;
          ++v10;
          ++v9;
          if ( v11->uiSubStateStr )
          {
            v28 = v11->kID;
            pkInfob = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
            if ( (unsigned __int8)((int (__stdcall *)(_DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(v11->kID) )
            {
              if ( v28 <= LOWORD(pkInfob->m_ResList[2].m_eAspect) )
              {
                v17 = *(_DWORD *)&pkInfob->m_ResList[2].m_bCheckAdd;
                v13 = *(_DWORD *)(v17 + 4 * v28) == 0;
                v18 = v17 + 4 * v28;
                if ( !v13 )
                {
                  v19 = *(_DWORD *)v18;
                  if ( v19 )
                  {
                    if ( *(_BYTE *)(v19 + 288) )
                    {
                      AbstateIcon::SetDuplicate(*v10, v11->uiSubStateStr);
                      ((void (__stdcall *)(signed int))(*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                      ((void (__stdcall *)(signed int))(*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                      ((void (__stdcall *)(signed int))(*v10)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
                      (*(void (__stdcall **)(signed int))(**(_DWORD **)v37 + 256))(1);
                      ++i;
                      ++v10;
                      ++v9;
                      v36 += 4;
                      v37 += 4;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if ( !kIter )
      {
        *AbstateNums = i;
        return;
      }
      v8 = i;
      v7 = kIter;
    }
    *AbstateNums = v8;
  }
  else
  {
    *AbstateNums = v8;
  }
}
// 5A6C50: could not find valid save-restore pair for ebx
// 5A6C50: could not find valid save-restore pair for edi
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (005A7060) --------------------------------------------------------
bool __thiscall TargetOfTheTargetWin::Create(TargetOfTheTargetWin *this, PgFrameWork *pkFrameWork)
{
  TargetOfTheTargetWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  NiTexturePalette *v6; // ebx@11
  char *v7; // eax@13
  PgSprData *v8; // eax@14
  NiAVObject *v9; // eax@15
  NiProperty *v10; // ebx@15
  NiRefObjectVtbl *v11; // eax@17
  NiSourceTexture *v12; // eax@18
  PgSprData *v13; // eax@21
  PgWinSpr *v14; // eax@21
  PgSprData *v15; // eax@21
  NiShader *v16; // eax@21
  NiShader *v17; // ebx@21
  MaskedWin *v18; // eax@21
  NiNode *v19; // ecx@21
  PgSprData *v20; // eax@21
  PgWinSpr *v21; // eax@21
  PgSprData *v22; // eax@21
  PgWinSpr *v23; // eax@21
  PgSprData *v24; // eax@23
  PgWinSpr *v25; // eax@23
  PgSprData *v26; // eax@25
  PgWinSpr *v27; // eax@25
  PgSprData *v28; // eax@28
  PgWinBar *v29; // eax@28
  PgSprData *v30; // eax@28
  PgWinBar *v31; // eax@28
  PgSprData *v32; // eax@28
  PgWinBar *v33; // eax@28
  PgFont *v34; // eax@28
  PgWinText *v35; // eax@28
  PgWin *v36; // ST28_4@28
  PgFont *v37; // eax@28
  PgWinAbbreviateText *v38; // eax@28
  PgSprData *v39; // eax@28
  volatile LONG *v40; // [sp-14h] [bp-38h]@3
  NiSourceTexture *pkMainTexture; // [sp+0h] [bp-24h]@8
  unsigned int uiWidth; // [sp+4h] [bp-20h]@27
  unsigned int uiHeight; // [sp+8h] [bp-1Ch]@27
  NiPointer<NiNode> spNode; // [sp+Ch] [bp-18h]@1
  int uiLeft; // [sp+10h] [bp-14h]@14
  int uiTop; // [sp+14h] [bp-10h]@14
  int v47; // [sp+20h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v47 = 0;
  v3 = MenuTexMgr::GetTexture(0x12u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v47 = -1;
    if ( spNode.m_pObject )
    {
      v40 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_4;
    }
    return 0;
  }
  pkMainTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkMainTexture )
  {
    v4 = spNode.m_pObject;
    v47 = -1;
    if ( spNode.m_pObject )
    {
      v40 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_4:
      if ( !InterlockedDecrement(v40) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    return 0;
  }
  v6 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\TargetOppositeWin.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, v6);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "TargetOfTheTargetWin", 0) )
  {
LABEL_20:
    v47 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v9 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EventPanel");
  v10 = NiAVObject::GetProperty(v9, 8);
  pkFrameWork = (PgFrameWork *)v10;
  if ( v10 )
    InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v11 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v47) = 1;
  if ( !v11 || (v12 = (NiSourceTexture *)v11[1].__vecDelDtor) == 0 )
    goto LABEL_31;
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EventPanel", &uiLeft, &uiTop, v12);
  v14 = PgWinSpr::CreateWin(uiLeft, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v14,
    0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Face_Mask", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("FaceCut_Mask");
  v17 = CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v16);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_Mask", &uiLeft, &uiTop, 0);
  v18 = MaskedWin::CreateWin(uiLeft, uiTop, (NiTriShape *)v17, &v2->baseclass_0.baseclass_0.baseclass_0);
  v19 = spNode.m_pObject;
  v2->m_pkPortrait = v18;
  v20 = PgSprData::Create(&v19->baseclass_0, "FaceCut_Mon", &uiLeft, &uiTop, 0);
  v21 = PgWinSpr::CreateWin(uiLeft, uiTop, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMobPortrait = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  v23 = PgWinSpr::CreateWin(uiLeft, uiTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v23 )
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v3);
  v25 = PgWinSpr::CreateWin(uiLeft, uiTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, v3);
  v27 = PgWinSpr::CreateWin(uiLeft, uiTop, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v27 )
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v27,
      0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Fill_HP_02", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_31:
    LOBYTE(v47) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFrameWork);
    goto LABEL_20;
  }
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_02", &uiLeft, &uiTop, v3);
  v29 = PgWinBar::CreateWin(uiLeft, uiTop, v28, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkHPBar = v29;
  ((void (__thiscall *)(PgWinBar *))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v29);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_01", &uiLeft, &uiTop, v3);
  v31 = PgWinBar::CreateWin(uiLeft, uiTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkHPBarEnd = (PgWinSpr *)v31;
  ((void (__thiscall *)(PgWinBar *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v31);
  ((void (__cdecl *)(_DWORD, signed int, _DWORD))v2->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    0,
    1,
    0);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_03", &uiLeft, &uiTop, v3);
  v33 = PgWinBar::CreateWin(uiLeft, uiTop, v32, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
  v2->m_pkHPBarStart = (PgWinSpr *)v33;
  ((void (__thiscall *)(PgWinBar *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v33);
  ((void (__stdcall *)(_DWORD))v2->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Level", &uiLeft, &uiTop, 0);
  v34 = Font::Get(SMALL);
  v35 = PgWinText::CreateWin(uiLeft - 5, uiTop, uiWidth, uiHeight, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkLevelText = v35;
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v35,
    4u);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "CharName", &uiLeft, &uiTop, 0);
  v36 = g_pkToolTipWin;
  v37 = Font::Get(SMALL);
  v38 = PgWinAbbreviateText::CreateWin(
          uiLeft,
          uiTop + 2,
          uiWidth,
          uiHeight,
          v37,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0,
          0,
          1,
          v36,
          0x1Eu);
  v2->m_pkCharNameText = v38;
  v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v38,
    4u);
  v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Level_over", &uiLeft, &uiTop, pkMainTexture);
  v2->m_pkLevelOver = PgWinSpr::CreateWin(uiLeft, uiTop, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  LOBYTE(v47) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFrameWork);
  v47 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005A75C0) --------------------------------------------------------
void __thiscall TargetOfTheTargetWin::PlayerTargetBaseTexture(TargetOfTheTargetWin *this, Char *pkTargetChar)
{
  TargetOfTheTargetWin *v2; // esi@1
  NiTexture *v3; // edi@1
  signed int v4; // [sp+0h] [bp-Ch]@2

  v2 = this;
  v3 = PortraitTextureBuffer::GetOtherCharPortrait(pkTargetChar);
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkTargetChar->baseclass_0.vfptr[20].SetAbStateProperty)(pkTargetChar) )
  {
    PgSpr::SetTexture(v2->m_pkMobPortrait->m_spSpr.m_pObject, v3);
    ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v4 = 0;
  }
  else
  {
    MaskedWin::SetBaseTexture(v2->m_pkPortrait, v3);
    ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v4 = 1;
  }
  ((void (__cdecl *)(_DWORD))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4);
}

//----- (005A7650) --------------------------------------------------------
void __thiscall TargetWin::TargetWin(TargetWin *this)
{
  TargetWin *v1; // esi@1
  int v2; // edi@1
  int v3; // eax@2
  int v4; // eax@12
  int v5; // eax@17
  int v6; // eax@23
  signed int v7; // edx@23
  signed int v8; // ecx@24
  int v9; // [sp+4h] [bp-14h]@2
  int v10; // [sp+4h] [bp-14h]@7
  int v11; // [sp+4h] [bp-14h]@12
  int v12; // [sp+4h] [bp-14h]@17
  signed int v13; // [sp+8h] [bp-10h]@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TargetWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TargetWin::_vftable_;
  *(_DWORD *)&v1->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kAbStateList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<unsigned short>,unsigned short>Vtbl *)&NiTList<unsigned_short>::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v2 = (int)v1->m_apkAbstateDeBufIconWin;
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateDeBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateDBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_pkHPBar = 0;
  v1->m_pkHPCircleGauge = 0;
  v1->m_pkLevelText = 0;
  v1->m_pkMinButton = 0;
  v1->m_pkMaxButton = 0;
  v1->m_bEnableTOT = 1;
  v1->m_bShowMobHP = 0;
  v13 = 15;
  do
  {
    v3 = *(_DWORD *)(v2 - 60);
    v9 = v3;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v9 )
        (**(void (__stdcall ***)(_DWORD))v9)(1);
      *(_DWORD *)(v2 - 60) = 0;
    }
    v10 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v2 + 4)) && v10 )
        (**(void (__stdcall ***)(_DWORD))v10)(1);
      *(_DWORD *)v2 = 0;
    }
    v4 = *(_DWORD *)(v2 + 60);
    v11 = v4;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v11 )
        (**(void (__stdcall ***)(_DWORD))v11)(1);
      *(_DWORD *)(v2 + 60) = 0;
    }
    v5 = *(_DWORD *)(v2 + 120);
    v12 = v5;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v12 )
        (**(void (__stdcall ***)(_DWORD))v12)(1);
      *(_DWORD *)(v2 + 120) = 0;
    }
    v2 += 4;
    --v13;
  }
  while ( v13 );
  v6 = (int)v1->m_apkSoulWinEffect;
  v7 = 2;
  do
  {
    v8 = 7;
    do
    {
      *(_DWORD *)(v6 - 56) = 0;
      *(_DWORD *)v6 = 0;
      v6 += 4;
      --v8;
    }
    while ( v8 );
    --v7;
  }
  while ( v7 );
  v1->m_pkLPBar = 0;
  v1->m_pkLPCircleGauge = 0;
  v1->m_pkLPBarStart = 0;
  v1->m_pkLPBarEnd = 0;
  v1->m_kTargetClassID = 0;
  v1->m_pkLPGround = 0;
  v1->m_pkSPGround = 0;
}
// 9B0758: using guessed type int (__thiscall *NiTList_unsigned short____vftable_)(void *p, char);
// 9B0768: using guessed type int (__stdcall *TargetWin___vftable_)(int uiFlags);
// 9B0784: using guessed type int (__thiscall *TargetWin___vftable_)(void *p, char);

//----- (005A7880) --------------------------------------------------------
void __thiscall TargetWin::_TargetWin(TargetWin *this)
{
  TargetWin *v1; // edi@1
  char *v2; // ebx@1
  int v3; // esi@3
  int v4; // edi@4
  int v5; // esi@11
  NiTListItem<unsigned short> *v6; // edi@11
  NiTListItem<unsigned short> *v7; // ST0C_4@12
  PgWinFrame *thisa; // [sp+4h] [bp-18h]@1
  signed int v9; // [sp+8h] [bp-14h]@1
  signed int v10; // [sp+Ch] [bp-10h]@2

  v1 = this;
  thisa = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TargetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TargetWin::_vftable_;
  v2 = (char *)this->m_apkSoulWinEffect;
  v9 = 2;
  do
  {
    v10 = 7;
    do
    {
      v3 = *(_DWORD *)v2;
      if ( *(_DWORD *)v2 )
      {
        NsEffect::_NsEffect((NsEffect *)(v3 + 28));
        ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v3 + 4));
        v4 = *(_DWORD *)v3;
        if ( *(_DWORD *)v3 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        operator delete((void *)v3);
        v1 = (TargetWin *)thisa;
        *(_DWORD *)v2 = 0;
      }
      v2 += 4;
      --v10;
    }
    while ( v10 );
    --v9;
  }
  while ( v9 );
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateDBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBuffWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateDeBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_apkAbstateBufIconWin,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v5 = (int)&v1->m_kAbStateList;
  v1->m_kAbStateList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<unsigned short>,unsigned short>Vtbl *)&NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
  v6 = v1->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  while ( v6 )
  {
    v7 = v6;
    v6 = v6->m_pkNext;
    (*(void (__thiscall **)(int, NiTListItem<unsigned short> *))(*(_DWORD *)v5 + 8))(v5, v7);
  }
  *(_DWORD *)(v5 + 12) = 0;
  *(_DWORD *)(v5 + 4) = 0;
  *(_DWORD *)(v5 + 8) = 0;
  *(_DWORD *)v5 = &NiTListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
  PgWinFrame::_PgWinFrame(thisa);
}
// 9B0738: using guessed type int (__thiscall *NiTListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);
// 9B0748: using guessed type int (__thiscall *NiTPointerListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);
// 9B0768: using guessed type int (__stdcall *TargetWin___vftable_)(int uiFlags);
// 9B0784: using guessed type int (__thiscall *TargetWin___vftable_)(void *p, char);

//----- (005A7A00) --------------------------------------------------------
void __thiscall TargetWin::SetTargetClassInfo(TargetWin *this, Char *pkTargetChar)
{
  int v2; // ebx@0
  Char *v3; // edi@1
  TargetWin *v4; // esi@1
  int v5; // ST10_4@2
  signed int v6; // ebx@2
  int v7; // edi@3
  int v8; // eax@5
  int v9; // edi@6
  char *v10; // eax@8
  char *v11; // eax@9
  char *v12; // eax@10
  char *v13; // eax@11
  char *v14; // eax@12
  char *v15; // eax@15
  char *v16; // eax@23
  bool v17; // zf@28
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // eax@28
  unsigned int v19; // eax@31
  char v20; // al@37
  char v21; // al@37
  NiSourceTexture *v22; // edi@47
  int v23; // [sp+8h] [bp-8h]@3
  int iMGIndex; // [sp+Ch] [bp-4h]@2
  int nDiffLV; // [sp+18h] [bp+8h]@31

  v3 = pkTargetChar;
  v4 = this;
  if ( pkTargetChar )
  {
    v5 = v2;
    v6 = 54;
    iMGIndex = 54;
    ((void (__stdcall *)(signed int, int))this->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      1,
      v5);
    ((void (__stdcall *)(signed int))v4->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    if ( (unsigned __int8)((int (__thiscall *)(Char *))pkTargetChar->baseclass_0.vfptr[1].Affect)(pkTargetChar) )
    {
      v7 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
      v23 = pkTargetChar->m_kCharShape.m_kMobID;
      if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                               ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                               v23)
        || (unsigned __int16)v23 > *(_WORD *)(v7 + 200)
        || (v8 = *(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v23, !*(_DWORD *)v8)
        || (v9 = *(_DWORD *)v8) == 0 )
        goto LABEL_47;
      switch ( *(_DWORD *)(v9 + 95) )
      {
        case 0:
          iMGIndex = 16;
          v10 = TextData::Get(0x23B3846u);
          PgWin::SetToolTipWinText(
            &v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            v10);
          break;
        case 4:
          iMGIndex = 17;
          v11 = TextData::Get(0xFF2B4B41u);
          PgWin::SetToolTipWinText(
            &v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            v11);
          break;
        case 3:
          iMGIndex = 18;
          v12 = TextData::Get(0xE606394Cu);
          PgWin::SetToolTipWinText(
            &v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            v12);
          break;
        case 1:
          iMGIndex = 19;
          v13 = TextData::Get(0xFB2A3C41u);
          PgWin::SetToolTipWinText(
            &v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            v13);
          break;
        case 2:
          iMGIndex = 20;
          v14 = TextData::Get(0xF0003D4Du);
          PgWin::SetToolTipWinText(
            &v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            v14);
          break;
        default:
          ((void (__stdcall *)(_DWORD))v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          break;
      }
      switch ( *(_DWORD *)(v9 + 99) )
      {
        case 5:
          v6 = 0;
          v15 = TextData::Get(0xE6F5EDEFu);
          goto LABEL_46;
        case 0:
          v6 = 1;
          v15 = TextData::Get(0xA9F5E9F8u);
          goto LABEL_46;
        case 3:
          v6 = 2;
          v15 = TextData::Get(0x99F5FBECu);
          goto LABEL_46;
        case 4:
          v6 = 3;
          v15 = TextData::Get(0xEE353644u);
          goto LABEL_46;
        case 1:
          v6 = 4;
          v15 = TextData::Get(0xE134373Bu);
          goto LABEL_46;
        case 2:
          v6 = 5;
          v15 = TextData::Get(0xF8FBFAF4u);
          goto LABEL_46;
        case 0x10:
          v6 = 8;
          v15 = TextData2::Get(0x99EFF101u);
          goto LABEL_46;
        case 6:
          if ( Char::IsNPC(pkTargetChar) == 1 )
          {
            v6 = 7;
            v16 = TextData2::Get(0xF3FA0730u);
            PgWin::SetToolTipWinText(
              &v4->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              v16);
            v4->m_kTargetClassID = 0;
          }
          goto LABEL_47;
        case 8:
        case 9:
        case 0xA:
        case 0x15:
        case 0x16:
          v6 = 6;
          v15 = TextData2::Get(0xE6062C4Cu);
          goto LABEL_46;
        default:
          break;
      }
    }
    else
    {
      if ( !(unsigned __int8)((int (__thiscall *)(Char *))pkTargetChar->baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(pkTargetChar) )
      {
        v17 = (int)pkTargetChar->baseclass_0.vfptr[20].GetAbstateColor((AbStateInfectee *)pkTargetChar) == 0;
        v18 = v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
        if ( v17 )
        {
          ((void (__cdecl *)(_DWORD))v18)(0);
          if ( v4->m_kTempLV )
          {
            v19 = User::Lv(&g_kUser);
            nDiffLV = v19 - v4->m_kTempLV;
            if ( v19 != v4->m_kTempLV )
            {
              ((void (__stdcall *)(signed int))v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              if ( nDiffLV >= -20 )
              {
                if ( nDiffLV >= -2 )
                  iMGIndex = ((unsigned int)(nDiffLV - 3) > 0x11) + 51;
                else
                  iMGIndex = 48;
              }
              else
              {
                iMGIndex = 49;
              }
            }
          }
          v20 = Char::GetClass(v3);
          v21 = CharClass::GetBaseClassID(v20);
          v4->m_kTargetClassID = v21;
          switch ( v21 )
          {
            case 1:
              v6 = 32;
              break;
            case 6:
              v6 = 33;
              break;
            case 0x10:
              v6 = 34;
              break;
            case 0xB:
              v6 = 35;
              break;
            case 0x15:
              v6 = 36;
              break;
            case 0x1A:
              v6 = 37;
              break;
            default:
              ((void (__stdcall *)(_DWORD))v4->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              break;
          }
          v15 = CharClass::GetLocalName(v4->m_kTargetClassID);
        }
        else
        {
          ((void (__cdecl *)(_DWORD))v18)(0);
          v6 = 10;
          v15 = TextData3::Get(0xA9AFA8FBu);
        }
LABEL_46:
        PgWin::SetToolTipWinText(&v4->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v15);
        goto LABEL_47;
      }
      ((void (__stdcall *)(_DWORD))v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    }
    ((void (__stdcall *)(_DWORD))v4->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
LABEL_47:
    v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v4->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v22 = MenuTexMgr::GetTexture(0x12u);
    ((void (__stdcall *)(NiSourceTexture *, int, signed int))v4->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v22,
      iMGIndex,
      16);
    ((void (__stdcall *)(NiSourceTexture *, signed int, signed int, signed int))v4->m_pkCbResWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v22,
      v6,
      16,
      16);
  }
}
// 5A7A00: could not find valid save-restore pair for ebx
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (005A7EC0) --------------------------------------------------------
void __thiscall TargetOfTheTargetWin::UpdateMeWin(TargetOfTheTargetWin *this, float fCurTime)
{
  TargetOfTheTargetWin *v2; // esi@1
  Char *v3; // edi@1
  Char *v4; // eax@4
  Char *v5; // ebx@4
  MobInfo *v6; // eax@5
  MobType v7; // eax@6
  NiRefObjectVtbl *v8; // ebx@13
  int v9; // eax@13
  unsigned int v10; // ebx@13
  char *v11; // eax@17
  float v12; // ST1C_4@21
  float v13; // ST18_4@21
  int v14; // ebx@24
  int v15; // eax@25
  bool v16; // zf@26
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // eax@26
  signed int v18; // eax@28
  AbStateInfecteeVtbl *v19; // edx@28
  float v20; // ST1C_4@28
  float v21; // ST18_4@28
  int v22; // ebx@31
  MobViewInfo *v23; // eax@37
  unsigned __int16 v24; // ax@38
  CharNPC_ViewInfo *v25; // ebx@39
  NiTexture *v26; // eax@41
  NiTexture *v27; // eax@42
  NiTexture *v28; // ebx@46
  NiTexture *v29; // eax@52
  int v30; // [sp+1Ch] [bp-14h]@22
  signed int v31; // [sp+1Ch] [bp-14h]@27
  int v32; // [sp+1Ch] [bp-14h]@29
  Char *v33; // [sp+1Ch] [bp-14h]@44
  signed int v34; // [sp+20h] [bp-10h]@47
  PROTO_NC_BAT_TARGET_REQ kProto; // [sp+2Ch] [bp-4h]@10

  v2 = this;
  v3 = CharMgr::GetChar(
         &g_kCharMgr,
         HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]));
  if ( (unsigned __int8)((int (__stdcall *)(int, int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY) )
  {
    if ( !*(_BYTE *)(g_pkMouse + 129) )
    {
      if ( *(_BYTE *)(g_pkMouse + 131) )
      {
        v4 = CharMgr::GetChar(
               &g_kCharMgr,
               HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]));
        v5 = v4;
        if ( v4 )
        {
          v6 = Char::GetMobInfo(v4);
          if ( !v6 || (v7 = v6->Type, v7 != 12) && v7 != 27 && v7 != 29 && v7 != 13 )
          {
            MainChar::SetTargetChar((MainChar *)g_pkMainChar, v5);
            kProto.target = HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]);
            NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 9u, 1u, &kProto, 2);
          }
          return;
        }
      }
    }
  }
  if ( !v3 || Char::IsLinkGate(v3) )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
    return;
  }
  v8 = v2->m_pkCharNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v3);
  v8[118].__vecDelDtor((NiRefObject *)v2->m_pkCharNameText, v9);
  v10 = v2->m_iLevel;
  if ( User::Lv(&g_kUser) + 10 >= v10 )
  {
    if ( v10 )
    {
      *(_DWORD *)&kProto.target = v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = fs("%d");
      (*(void (__thiscall **)(PgWinText *, char *))(*(_DWORD *)&kProto.target + 472))(v2->m_pkLevelText, v11);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
    }
    ((void (__stdcall *)(signed int))v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkLevelOver->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  else
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AFC52);
    ((void (__stdcall *)(signed int))v2->m_pkLevelOver->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
  if ( v2->m_pkHPBar )
  {
    if ( g_pkMainChar->m_kHandle == HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) )
    {
      v12 = (double)User::HP(&g_kUser);
      *(_DWORD *)&kProto.target = User::MaxHP(&g_kUser);
      v13 = (double)*(_DWORD *)&kProto.target;
      PgWinBar::SetValue(v2->m_pkHPBar, v13, v12);
      v30 = User::HP(&g_kUser) > 0;
      ((void (__stdcall *)(int))v2->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v30);
      v14 = User::MaxHP(&g_kUser);
      if ( v14 == User::HP(&g_kUser) )
      {
        v15 = User::MaxHP(&g_kUser);
        goto LABEL_26;
      }
    }
    else
    {
      v18 = ((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[5].SetAbStateProperty)(v3);
      v19 = v3->baseclass_0.vfptr;
      *(_DWORD *)&kProto.target = v18;
      v20 = (double)v18;
      *(_DWORD *)&kProto.target = v19[5].IsVisible((AbStateInfectee *)v3);
      v21 = (double)*(_DWORD *)&kProto.target;
      PgWinBar::SetValue(v2->m_pkHPBar, v21, v20);
      v32 = ((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[5].SetAbStateProperty)(v3) > 0;
      ((void (__stdcall *)(int))v2->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v32);
      v22 = v3->baseclass_0.vfptr[5].IsVisible((AbStateInfectee *)v3);
      if ( ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[5].SetAbStateProperty)(v3) == v22 )
      {
        v15 = v3->baseclass_0.vfptr[5].IsVisible((AbStateInfectee *)v3);
LABEL_26:
        v16 = v15 == 0;
        v17 = v2->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
        if ( !v16 )
        {
          v31 = 1;
LABEL_35:
          ((void (__stdcall *)(signed int))v17)(v31);
          goto LABEL_36;
        }
LABEL_34:
        v31 = 0;
        goto LABEL_35;
      }
    }
    v17 = v2->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    goto LABEL_34;
  }
LABEL_36:
  if ( (unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[1].Affect)(v3) )
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v23 = IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(v3->m_kCharShape.m_kMobID, 1);
    if ( v23 && (v24 = v23->NpcViewIndex) != 0 )
    {
      v25 = IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::GetByID(v24, 1);
      if ( v25->Class == 5 )
      {
        ((void (__stdcall *)(signed int))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v26 = PortraitTextureBuffer::GetMobPortrait(v25->Gender);
        PgSpr::SetTexture(v2->m_pkMobPortrait->m_spSpr.m_pObject, v26);
      }
      else
      {
        ((void (__stdcall *)(signed int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        TargetOfTheTargetWin::PlayerTargetBaseTexture(v2, v3);
      }
    }
    else
    {
      ((void (__stdcall *)(signed int))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v27 = PortraitTextureBuffer::GetMobPortrait(v3->m_kCharShape.m_kMobID);
      PgSpr::SetTexture(v2->m_pkMobPortrait->m_spSpr.m_pObject, v27);
    }
  }
  else
  {
    if ( v3 == g_pkMainChar )
      v33 = g_pkMainChar;
    else
      v33 = v3;
    v28 = PortraitTextureBuffer::GetOtherCharPortrait(v33);
    if ( (unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[20].SetAbStateProperty)(v3) )
    {
      PgSpr::SetTexture(v2->m_pkMobPortrait->m_spSpr.m_pObject, v28);
      ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v34 = 0;
    }
    else
    {
      MaskedWin::SetBaseTexture(v2->m_pkPortrait, v28);
      ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v34 = 1;
    }
    ((void (__cdecl *)(signed int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v34);
  }
  if ( PgWin::IsVisible(&v2->baseclass_0.baseclass_0.baseclass_0) && Char::IsLinkGate(v3) )
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(signed int))v2->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v29 = PortraitTextureBuffer::GetDefaultTexture();
    MaskedWin::SetBaseTexture(v2->m_pkPortrait, v29);
  }
}
// A98170: using guessed type int g_pkMouse;

//----- (005A83E0) --------------------------------------------------------
MobIconWin *__cdecl MobIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  MobIconWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x17Cu);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    IconWin::IconWin((IconWin *)v3);
    LOBYTE(v8) = 1;
    *(_DWORD *)v4 = &MobIconWin::_vftable_;
    *((_DWORD *)v4 + 58) = &MobIconWin::_vftable_;
    IconWin::CreateGeometry((IconWin *)v4, 0x10u, 0x10u);
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 608))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (MobIconWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9AFFE4: using guessed type int (__stdcall *MobIconWin___vftable_)(int uiFlags);
// 9B0004: using guessed type int (__thiscall *MobIconWin___vftable_)(void *p, char);

//----- (005A8540) --------------------------------------------------------
AbStateIconWin *__cdecl AbStateIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  AbStateIconWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x17Cu);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    IconWin::IconWin((IconWin *)v3);
    LOBYTE(v8) = 1;
    *(_DWORD *)v4 = &AbStateIconWin::_vftable_;
    *((_DWORD *)v4 + 58) = &AbStateIconWin::_vftable_;
    IconWin::CreateGeometry((IconWin *)v4, 0x14u, 0x14u);
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 608))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (AbStateIconWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9B026C: using guessed type int (__stdcall *AbStateIconWin___vftable_)(int uiFlags);
// 9B028C: using guessed type int (__thiscall *AbStateIconWin___vftable_)(void *p, char);

//----- (005A86A0) --------------------------------------------------------
TargetWin *__cdecl TargetWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  TargetWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x350u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    TargetWin::TargetWin((TargetWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (TargetWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005A87D0) --------------------------------------------------------
bool __thiscall TargetWin::CreateKoreaUI(TargetWin *this, PgFrameWork *pkFrameWork)
{
  TargetWin *v2; // esi@1
  void *v3; // edi@1
  bool result; // al@6
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  int v8; // edi@16
  int v9; // ebx@16
  NiAVObject *v10; // eax@16
  void *v11; // eax@16
  int v12; // eax@18
  NiSourceTexture *v13; // eax@19
  PgSprData *v14; // eax@20
  PgWinSpr *v15; // eax@20
  PgSprData *v16; // eax@20
  NiShader *v17; // eax@20
  MaskedWin *v18; // eax@20
  NiSourceTexture *v19; // edx@20
  PgSprData *v20; // eax@20
  PgWinSpr *v21; // eax@20
  PgSprData *v22; // eax@20
  PgWinSpr *v23; // eax@20
  PgSprData *v24; // eax@20
  PgWinSpr *v25; // eax@20
  PgSprData *v26; // eax@20
  PgWinSpr *v27; // eax@20
  PgSprData *v28; // eax@20
  PgWinSpr *v29; // eax@20
  PgSprData *v30; // eax@20
  PgWinSpr *v31; // eax@20
  PgSprData *v32; // eax@20
  PgWinSpr *v33; // eax@20
  NiSourceTexture *v34; // edx@20
  PgSprData *v35; // eax@20
  PgWinBar *v36; // eax@20
  PgSprData *v37; // eax@20
  PgWinBar *v38; // eax@20
  PgSprData *v39; // eax@20
  PgWinBar *v40; // eax@20
  PgSprData *v41; // eax@20
  PgWinBar *v42; // eax@20
  PgSprData *v43; // eax@20
  PgWinBar *v44; // eax@20
  PgSprData *v45; // eax@20
  PgWinBar *v46; // eax@20
  PgSprData *v47; // eax@23
  PgWinBar *v48; // eax@23
  PgFont *v49; // eax@23
  PgWinText *v50; // eax@23
  PgSprData *v51; // eax@24
  PgWinBar *v52; // eax@24
  PgSprData *v53; // eax@24
  PgWinBar *v54; // eax@24
  PgFont *v55; // eax@24
  PgFont *v56; // eax@24
  PgWinText *v57; // eax@24
  PgWinText *v58; // ecx@24
  PgSprData *v59; // eax@26
  PgWinSpr *v60; // eax@26
  AbstateIcon *v61; // eax@26
  PgSprData *v62; // eax@26
  PgWinSpr *v63; // eax@26
  AbstateIcon *v64; // eax@26
  PgFont *v65; // eax@28
  PgWinText *v66; // eax@28
  MobIconWin *v67; // eax@30
  MobIconWin *v68; // eax@31
  NiPointer<PgSprData::PgHitTester> *v69; // ecx@31
  void *v70; // eax@31
  PgFont *v71; // eax@31
  PgWinText *v72; // eax@31
  PgWinBut *v73; // eax@31
  char *v74; // eax@31
  PgWinBut *v75; // eax@31
  char *v76; // eax@31
  PgSprData *v77; // eax@31
  PgWinSpr *v78; // eax@31
  char *v79; // eax@31
  char *v80; // eax@31
  char *v81; // eax@31
  char *v82; // eax@31
  void *v83; // eax@31
  PgSprData *v84; // ecx@31
  NiTexturePalette *v85; // ebx@33
  PgWin **v86; // edi@33
  PgSprData *v87; // eax@38
  PgWinSpr *v88; // eax@38
  char *v89; // eax@38
  void *v90; // eax@41
  SpEffect *v91; // ebx@42
  NiObject *v92; // eax@43
  SpEffect *v93; // eax@43
  NiObject *v94; // eax@46
  NiTexturingProperty *v95; // esi@52
  NiNode *v96; // esi@54
  char *v97; // [sp+E4h] [bp-D4h]@36
  const char *v98; // [sp+E8h] [bp-D0h]@36
  unsigned int v99; // [sp+ECh] [bp-CCh]@1
  int v100; // [sp+FCh] [bp-BCh]@33
  UIUtil ui; // [sp+100h] [bp-B8h]@20
  NiObject *SoulUse; // [sp+114h] [bp-A4h]@31
  SpEffect *thisa; // [sp+118h] [bp-A0h]@42
  NiObject *SoulAdd; // [sp+11Ch] [bp-9Ch]@31
  NiPointer<NiTexturingProperty> spTexProp; // [sp+120h] [bp-98h]@16
  NiTexturePalette *pkTriShape; // [sp+124h] [bp-94h]@7
  SpEffect *(*i)[7]; // [sp+128h] [bp-90h]@24
  unsigned int uiHeight; // [sp+12Ch] [bp-8Ch]@20
  unsigned int uiWidth; // [sp+130h] [bp-88h]@20
  NiSourceTexture *pkTexture; // [sp+134h] [bp-84h]@1
  PgSprData *pkSprData; // [sp+138h] [bp-80h]@24
  NiPointer<NiNode> spNode; // [sp+13Ch] [bp-7Ch]@1
  int uiTop; // [sp+140h] [bp-78h]@10
  int uiLeft; // [sp+144h] [bp-74h]@10
  char acShapeName[64]; // [sp+148h] [bp-70h]@25
  char pcTriShapeName; // [sp+188h] [bp-30h]@33
  int v117; // [sp+189h] [bp-2Fh]@33
  int v118; // [sp+18Dh] [bp-2Bh]@33
  int v119; // [sp+191h] [bp-27h]@33
  int v120; // [sp+195h] [bp-23h]@33
  int v121; // [sp+199h] [bp-1Fh]@33
  int v122; // [sp+19Dh] [bp-1Bh]@33
  int v123; // [sp+1A1h] [bp-17h]@33
  __int16 v124; // [sp+1A5h] [bp-13h]@33
  char v125; // [sp+1A7h] [bp-11h]@33
  unsigned int v126; // [sp+1A8h] [bp-10h]@1
  int v127; // [sp+1B4h] [bp-4h]@1
  int v128; // [sp+1B8h] [bp+0h]@1

  v126 = (unsigned int)&v128 ^ __security_cookie;
  v99 = (unsigned int)&v128 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v127 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v127 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  pkTriShape = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\TargetWin.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, pkTriShape);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( PgWinFrame::Create(&v2->baseclass_0, uiLeft, uiTop, v6, 0, pkFrameWork, "TargetWin", 0) )
  {
    v8 = uiLeft;
    v9 = uiTop;
    v10 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EventPanel");
    v11 = NiAVObject::GetProperty(v10, 8);
    spTexProp.m_pObject = (NiTexturingProperty *)v11;
    if ( v11 )
    {
      InterlockedIncrement((volatile LONG *)v11 + 1);
      v11 = spTexProp.m_pObject;
    }
    v12 = **((_DWORD **)v11 + 10);
    LOBYTE(v127) = 1;
    if ( v12 )
    {
      v13 = *(NiSourceTexture **)(v12 + 4);
      if ( v13 )
      {
        v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EventPanel", &uiLeft, &uiTop, v13);
        v15 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v15,
          0);
        v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Face_Mask", &uiLeft, &uiTop, pkTexture);
        PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v17 = (NiShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("FaceCut_Mask");
        pkTriShape = (NiTexturePalette *)CPostProcessEffect::DynamicCast(&NiTriShape::m_RTTI, v17);
        PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_Mask", &uiLeft, &uiTop, pkTexture);
        v18 = MaskedWin::CreateWin(
                uiLeft - v8,
                uiTop - v9 - 2,
                (NiTriShape *)pkTriShape,
                &v2->baseclass_0.baseclass_0.baseclass_0);
        v19 = pkTexture;
        v2->m_pkPortrait = v18;
        v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MonLevelYellow", &uiLeft, &uiTop, v19);
        v21 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v2->m_pkMobLevYellow = v21;
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v21,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobLevYellow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MonLevelOrange", &uiLeft, &uiTop, pkTexture);
        v23 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v2->m_pkMobLevOrange = v23;
        v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v23,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobLevOrange->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MonLevelRed", &uiLeft, &uiTop, pkTexture);
        v25 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v2->m_pkMobLevRed = v25;
        v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v25,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobLevRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MonLevelGreen", &uiLeft, &uiTop, pkTexture);
        v27 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v2->m_pkMobLevGreen = v27;
        v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v27,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobLevGreen->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MonLevelGray", &uiLeft, &uiTop, pkTexture);
        v29 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v2->m_pkMobLevGray = v29;
        v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v29,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkMobLevGray->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FaceCut_Mon", &uiLeft, &uiTop, 0);
        v31 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v2->m_pkMobPortrait = v31;
        v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v31,
          0);
        v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
        PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        UIUtil::UIUtil(&ui);
        LOBYTE(v127) = 2;
        UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
        UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
        UIUtil::SetOffset(&ui, v8, v9);
        UIUtil::CreateSpr(&ui, "Panel02", 0);
        v2->m_pkSPGround = UIUtil::CreateSpr(&ui, "SPground", 0);
        v33 = UIUtil::CreateSpr(&ui, "LPground", 0);
        v34 = pkTexture;
        v2->m_pkLPGround = v33;
        v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_03", &uiLeft, &uiTop, v34);
        v36 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v35, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v2->m_pkSPBarStart = (PgWinSpr *)v36;
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v36,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_03", &uiLeft, &uiTop, 0);
        v38 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v37, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v2->m_pkLPBarStart = (PgWinSpr *)v38;
        v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v38,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_01", &uiLeft, &uiTop, pkTexture);
        v40 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v39, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v2->m_pkSPBarEnd = (PgWinSpr *)v40;
        v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v40,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_01", &uiLeft, &uiTop, 0);
        v42 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v41, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v2->m_pkLPBarEnd = (PgWinSpr *)v42;
        v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v42,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_01", &uiLeft, &uiTop, pkTexture);
        v44 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v43, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v2->m_pkHPBarStart = (PgWinSpr *)v44;
        v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v44,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_03", &uiLeft, &uiTop, pkTexture);
        v46 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v45, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
        v2->m_pkHPBarEnd = (PgWinSpr *)v46;
        v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v46,
          0);
        ((void (__stdcall *)(_DWORD))v2->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Fill_HP_02", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
        {
          v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_HP_02", &uiLeft, &uiTop, pkTexture);
          v48 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0);
          v2->m_pkHPBar = v48;
          v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v48,
            0);
          v49 = Font::Get(SMALL);
          v50 = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  uiWidth,
                  uiHeight,
                  v49,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
          v2->m_pkHPText = v50;
          v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
            (NiRefObject *)v50,
            5u);
          ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
          ((void (__stdcall *)(char[4]))v2->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0/0");
          if ( PgUtil::GetTriShapeRect(
                 &spNode.m_pObject->baseclass_0,
                 "Fill_SP_02",
                 &uiLeft,
                 &uiTop,
                 &uiWidth,
                 &uiHeight) )
          {
            v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_SP_02", &uiLeft, &uiTop, pkTexture);
            v52 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v51, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
            v2->m_pkSPBar = v52;
            v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
              (NiRefObject *)v52,
              0);
            ((void (__stdcall *)(_DWORD))v2->m_pkSPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            v53 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Fill_LP_02", &uiLeft, &uiTop, 0);
            v54 = PgWinBar::CreateWin(uiLeft - v8, uiTop - v9, v53, &v2->baseclass_0.baseclass_0.baseclass_0, BGT_RIGHT);
            v2->m_pkLPBar = v54;
            v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
              (NiRefObject *)v54,
              0);
            ((void (__stdcall *)(_DWORD))v2->m_pkLPBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            v55 = Font::Get(SMALL);
            v2->m_pkSPText = PgWinText::CreateWin(
                               uiLeft - v8,
                               uiTop - v9,
                               uiWidth,
                               uiHeight,
                               v55,
                               &v2->baseclass_0.baseclass_0.baseclass_0,
                               0,
                               0);
            v56 = Font::Get(SMALL);
            v57 = PgWinText::CreateWin(
                    uiLeft - v8,
                    uiTop - v9,
                    uiWidth,
                    uiHeight,
                    v56,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            v58 = v2->m_pkSPText;
            v2->m_pkLPText = v57;
            ((void (__stdcall *)(signed int))v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
            ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
            ((void (__stdcall *)(char[4]))v2->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0/0");
            ((void (__stdcall *)(signed int))v2->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
            ((void (__stdcall *)(_DWORD))v2->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)("Ÿžž>¡  >�€€=");
            ((void (__stdcall *)(char[4]))v2->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0/0");
            i = 0;
            pkSprData = (PgSprData *)v2->m_apkAbstateBufIconWin;
            while ( 1 )
            {
              sprintf(acShapeName, "CharBuffBox%02d");
              if ( !PgUtil::GetTriShapeRect(
                      &spNode.m_pObject->baseclass_0,
                      acShapeName,
                      &uiLeft,
                      &uiTop,
                      &uiWidth,
                      &uiHeight) )
                break;
              v59 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
              v60 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v59, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&pkSprData[1].m_akHitTester.m_pBase,
                (NiD3DDefaultShader *)v60);
              ((void (__stdcall *)(_DWORD))pkSprData[1].m_akHitTester.m_pBase->m_pObject[3].m_uiHeight)(0);
              LODWORD(pkSprData[1].m_akHitTester.m_pBase->m_pObject[3].m_akUVs[0].y)(0);
              v61 = AbstateIcon::CreateWin(
                      uiLeft + 2,
                      uiTop + 2,
                      uiWidth - 4,
                      uiHeight - 4,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0);
              NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)pkSprData, (NiD3DDefaultShader *)v61);
              (*((void (__stdcall **)(_DWORD))pkSprData->baseclass_0.vfptr->__vecDelDtor + 60))(0);
              (*((void (__stdcall **)(_DWORD))pkSprData->baseclass_0.vfptr->__vecDelDtor + 64))(0);
              sprintf(acShapeName, "CharDBuffBox%02d");
              v62 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
              v63 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v62, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&pkSprData[2].m_akGeomData.m_pBase,
                (NiD3DDefaultShader *)v63);
              LODWORD(pkSprData[2].m_akGeomData.m_pBase->m_pObject[2].baseclass_0.baseclass_0.baseclass_0.m_kBound.m_kCenter.x)(0);
              ((void (__stdcall *)(_DWORD))pkSprData[2].m_akGeomData.m_pBase->m_pObject[2].baseclass_0.baseclass_0.baseclass_0.m_pkVertex)(0);
              v64 = AbstateIcon::CreateWin(
                      uiLeft + 2,
                      uiTop + 2,
                      uiWidth - 4,
                      uiHeight - 4,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0);
              NiPointer<PopupMenuWin>::operator_(
                (NiPointer<NiD3DDefaultShader> *)&pkSprData->m_akAlphaPropertyData,
                (NiD3DDefaultShader *)v64);
              (*((void (__stdcall **)(_DWORD))pkSprData->m_akAlphaPropertyData.vfptr->__vecDelDtor + 60))(0);
              (*((void (__stdcall **)(_DWORD))pkSprData->m_akAlphaPropertyData.vfptr->__vecDelDtor + 64))(0);
              pkSprData = (PgSprData *)((char *)pkSprData + 4);
              i = (SpEffect *(*)[7])((char *)i + 1);
              if ( (signed int)i >= 15 )
              {
                if ( PgUtil::GetTriShapeRect(
                       &spNode.m_pObject->baseclass_0,
                       "CharName",
                       &uiLeft,
                       &uiTop,
                       &uiWidth,
                       &uiHeight) )
                {
                  v65 = Font::Get(0);
                  v66 = PgWinText::CreateWin(
                          uiLeft - v8,
                          uiTop - v9,
                          uiWidth,
                          uiHeight,
                          v65,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0);
                  v2->m_pkCharNameTextWin = v66;
                  v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
                    (NiRefObject *)v66,
                    1u);
                  ((void (__stdcall *)(_DWORD))v2->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
                }
                if ( PgUtil::GetTriShapeRect(
                       &spNode.m_pObject->baseclass_0,
                       "MonLev_Mask",
                       &uiLeft,
                       &uiTop,
                       &uiWidth,
                       &uiHeight) )
                {
                  v67 = MobIconWin::CreateWin(uiLeft - v8, uiTop - v9, &v2->baseclass_0.baseclass_0.baseclass_0);
                  v2->m_pkMobGradeWin = v67;
                  v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                    (NiRefObject *)v67,
                    0);
                  ((void (__stdcall *)(_DWORD))v2->m_pkMobGradeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
                  if ( PgUtil::GetTriShapeRect(
                         &spNode.m_pObject->baseclass_0,
                         "MonClass_Mask",
                         &uiLeft,
                         &uiTop,
                         &uiWidth,
                         &uiHeight) )
                  {
                    v68 = MobIconWin::CreateWin(uiLeft - v8, uiTop - v9, &v2->baseclass_0.baseclass_0.baseclass_0);
                    v2->m_pkCbResWin = v68;
                    ((void (__thiscall *)(MobIconWin *, _DWORD, unsigned int))v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
                      v68,
                      0,
                      v99);
                    v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Level", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
                    v70 = (void *)v69->m_pObject->m_uiWidth;
                    pkTriShape = (NiTexturePalette *)v69->m_pObject->m_uiHeight;
                    SoulAdd = (NiObject *)v70;
                    v71 = Font::Get(BOLD);
                    v72 = PgWinText::CreateWin(
                            uiLeft,
                            uiTop,
                            (unsigned int)SoulAdd,
                            (unsigned int)pkTriShape,
                            v71,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    v2->m_pkLevelText = v72;
                    v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
                      (NiRefObject *)v72,
                      5u);
                    pkSprData = PgSprData::Create(
                                  &spNode.m_pObject->baseclass_0,
                                  "MinBtnNor",
                                  &uiLeft,
                                  &uiTop,
                                  pkTexture);
                    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "MinBtnClick");
                    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "MinBtnOver");
                    v73 = PgWinBut::CreateWin(
                            uiLeft,
                            uiTop,
                            pkSprData,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0x2711u,
                            0,
                            0);
                    v2->m_pkMinButton = v73;
                    v73->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                    v74 = TextData2::Get(0xB8A2C5E9u);
                    PgWin::SetToolTipWinText(&v2->m_pkMinButton->baseclass_0.baseclass_0, v74);
                    pkSprData = PgSprData::Create(
                                  &spNode.m_pObject->baseclass_0,
                                  "MaxBtnNor",
                                  &uiLeft,
                                  &uiTop,
                                  pkTexture);
                    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "MaxBtnClick");
                    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, "MaxBtnOver");
                    v75 = PgWinBut::CreateWin(
                            uiLeft,
                            uiTop,
                            pkSprData,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0x2712u,
                            0,
                            0);
                    v2->m_pkMaxButton = v75;
                    v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                      (NiRefObject *)v75,
                      0);
                    v2->m_pkMaxButton->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                    v76 = TextData2::Get(0xB8A2C5E9u);
                    PgWin::SetToolTipWinText(&v2->m_pkMaxButton->baseclass_0.baseclass_0, v76);
                    v77 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Level_over", &uiLeft, &uiTop, pkTexture);
                    v78 = PgWinSpr::CreateWin(
                            uiLeft - v8,
                            uiTop - v9,
                            v77,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
                    v2->m_pkLevelOver = v78;
                    v78->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                      (NiRefObject *)v78,
                      0);
                    v79 = Folder::Effect();
                    v80 = Folder::Merge(v79, "Soul_Add.nif");
                    SoulAdd = (NiObject *)Ns_LoadNifFile(v80, 0);
                    v81 = Folder::Effect();
                    v82 = Folder::Merge(v81, "Soul_Use.nif");
                    v83 = Ns_LoadNifFile(v82, 0);
                    v84 = 0;
                    SoulUse = (NiObject *)v83;
                    for ( pkSprData = 0; ; v84 = pkSprData )
                    {
                      v117 = 0;
                      v118 = 0;
                      v119 = 0;
                      v120 = 0;
                      v121 = 0;
                      v122 = 0;
                      v123 = 0;
                      v124 = 0;
                      v125 = 0;
                      v85 = 0;
                      pcTriShapeName = 0;
                      v100 = 7 * (_DWORD)v84;
                      i = v2->m_apkSoulWinEffect;
                      v86 = (PgWin **)v2->m_apkSoulWin[(_DWORD)v84];
                      while ( 1 )
                      {
                        pkTriShape = (NiTexturePalette *)((char *)v85 + 1);
                        if ( v84 )
                        {
                          v98 = "SoulOn%02d";
                          v97 = &pcTriShapeName;
                        }
                        else
                        {
                          v98 = "SoulOff%02d";
                          v97 = &pcTriShapeName;
                        }
                        sprintf(v97, v98);
                        v87 = PgSprData::Create(
                                &spNode.m_pObject->baseclass_0,
                                &pcTriShapeName,
                                &uiLeft,
                                &uiTop,
                                pkTexture);
                        v88 = PgWinSpr::CreateWin(uiLeft, uiTop, v87, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
                        *v86 = (PgWin *)v88;
                        v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                          (NiRefObject *)v88,
                          1u);
                        (*v86)->m_pkToolTipWin = g_pkToolTipWin;
                        v89 = TextData2::Get(0x5E50304Au);
                        PgWin::SetToolTipWinText(*v86, v89);
                        if ( SoulUse && SoulAdd && *v86 )
                        {
                          v90 = operator new(0x44u);
                          if ( pkSprData )
                          {
                            thisa = (SpEffect *)v90;
                            LOBYTE(v127) = 4;
                            if ( v90 )
                            {
                              v94 = NiObject::Clone(SoulAdd);
                              SpEffect::SpEffect(thisa, (NiNode *)v94);
                            }
                            else
                            {
                              v94 = 0;
                            }
                            v2->m_apkSoulWinEffect[0][(_DWORD)((char *)v85 + v100)] = (SpEffect *)v94;
                          }
                          else
                          {
                            v91 = (SpEffect *)v90;
                            thisa = (SpEffect *)v90;
                            LOBYTE(v127) = 3;
                            if ( v90 )
                            {
                              v92 = NiObject::Clone(SoulUse);
                              SpEffect::SpEffect(v91, (NiNode *)v92);
                              (*i)[0] = v93;
                            }
                            else
                            {
                              (*i)[0] = 0;
                            }
                          }
                          LOBYTE(v127) = 2;
                        }
                        v85 = pkTriShape;
                        i = (SpEffect *(*)[7])((char *)i + 4);
                        ++v86;
                        if ( (signed int)pkTriShape >= 7 )
                          break;
                        v84 = pkSprData;
                      }
                      pkSprData = (PgSprData *)((char *)pkSprData + 1);
                      if ( (signed int)pkSprData >= 2 )
                        break;
                    }
                    TargetWin::SetSoulDefault(v2, 1);
                    TargetWin::ShowBarWin(v2, 0);
                    ((void (__thiscall *)(TargetWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
                      v2,
                      PgWin::ms_uiScreenWidth,
                      PgWin::ms_uiScreenHeight,
                      0.52999997);
                    LOBYTE(v127) = 1;
                    UIUtil::_UIUtil(&ui);
                    v95 = spTexProp.m_pObject;
                    LOBYTE(v127) = 0;
                    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
                      v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v95, 1u);
                    v96 = spNode.m_pObject;
                    v127 = -1;
                    if ( spNode.m_pObject
                      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
                      && v96 )
                      v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v96, 1u);
                    return 1;
                  }
                }
                break;
              }
            }
          }
        }
        LOBYTE(v127) = 1;
        UIUtil::_UIUtil(&ui);
      }
    }
    LOBYTE(v127) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v127 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  else
  {
    v7 = spNode.m_pObject;
    v127 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005A99E0) --------------------------------------------------------
void __thiscall TargetWin::UpdateKoreaUI(TargetWin *this, float fCurTime)
{
  unsigned int v2; // ebx@1
  TargetWin *v3; // esi@1
  SpEffect **v4; // edi@1
  signed int v5; // eax@1
  unsigned int v6; // ecx@8
  MobInfo *v7; // edi@13
  float v8; // ST1C_4@18
  float v9; // ST18_4@18
  int v10; // edi@21
  float v11; // ST1C_4@26
  float v12; // ST18_4@26
  int v13; // edi@29
  bool v14; // zf@30
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@30
  float v16; // ST1C_4@36
  float v17; // ST18_4@36
  int v18; // edi@39
  NiRefObjectVtbl *v19; // edi@43
  char *v20; // eax@43
  NiRefObjectVtbl *v21; // edi@43
  char *v22; // eax@43
  NiRefObjectVtbl *v23; // edi@43
  char *v24; // eax@43
  NiRefObjectVtbl *v25; // edi@46
  char *v26; // eax@46
  float v27; // ST1C_4@48
  float v28; // ST18_4@48
  int v29; // edi@51
  float v30; // ST1C_4@58
  float v31; // ST18_4@58
  int v32; // edi@61
  int v33; // eax@62
  void *(__thiscall *v34)(NiRefObject *, unsigned int); // edx@62
  float v35; // ST1C_4@68
  float v36; // ST18_4@68
  int v37; // edi@71
  int v38; // eax@72
  void *(__thiscall *v39)(NiRefObject *, unsigned int); // edx@72
  char v40; // al@77
  PgWinText *v41; // ecx@77
  NiRefObjectVtbl *v42; // edi@80
  char *v43; // eax@80
  NiRefObjectVtbl *v44; // edi@80
  char *v45; // eax@80
  NiRefObjectVtbl *v46; // edi@80
  char *v47; // eax@80
  bool v48; // cf@80
  void *(__thiscall *v49)(NiRefObject *, unsigned int); // eax@80
  PgWinText *v50; // ecx@81
  void *(__thiscall *v51)(NiRefObject *, unsigned int); // eax@81
  NiRefObjectVtbl *v52; // edi@85
  char *v53; // eax@85
  void *(__thiscall *v54)(NiRefObject *, unsigned int); // eax@88
  int v55; // edi@88
  int v56; // edx@88
  int v57; // eax@90
  int v58; // edi@91
  unsigned __int16 v59; // ax@92
  CharNPC_ViewInfo *v60; // eax@93
  PgSpr *v61; // ecx@97
  void *(__thiscall *v62)(NiRefObject *, unsigned int); // eax@98
  NiTexture *v63; // eax@100
  CGuildMonster *v64; // edi@102
  int v65; // edi@103
  NiRefObjectVtbl *v66; // edi@106
  D3DXCOLOR *v67; // eax@110
  NiRefObjectVtbl *v68; // edi@117
  D3DXCOLOR *v69; // eax@117
  int v70; // eax@118
  PgWinSpr *v71; // edi@119
  char *v72; // ecx@119
  D3DXCOLOR *v73; // eax@124
  PgWinText *v74; // ecx@124
  PgSpr *v75; // edi@127
  NiTexture *v76; // eax@127
  PgSpr *v77; // edi@129
  NiTexture *v78; // eax@129
  NiRefObjectVtbl *v79; // edi@132
  D3DXCOLOR *v80; // eax@132
  CClientGuild *v81; // eax@132
  NiRefObjectVtbl *v82; // edi@136
  D3DXCOLOR *v83; // eax@136
  char v84; // al@137
  void *(__thiscall *v85)(NiRefObject *, unsigned int); // edx@137
  NiTList<AbStateInst *> *v86; // eax@141
  NiTListItem<AbStateInst *> *v87; // eax@142
  NiTListItem<unsigned short> *v88; // ecx@142
  unsigned __int16 v89; // dx@143
  AbStateInst *v90; // edi@143
  int v91; // edi@146
  NiRefObjectVtbl *v92; // edi@149
  int v93; // eax@149
  void *v94; // ecx@149
  void *(__thiscall *v95)(NiRefObject *, unsigned int); // edx@149
  double v96; // st7@150
  PgWinBar *v97; // ecx@150
  PgWinBar *v98; // ecx@153
  PgWinBar *v99; // ecx@155
  NiTexture *v100; // eax@157
  D3DXCOLOR *v101; // [sp+Ch] [bp-A0h]@106
  char v102; // [sp+10h] [bp-9Ch]@106
  char v103; // [sp+10h] [bp-9Ch]@114
  char v104; // [sp+10h] [bp-9Ch]@119
  char v105; // [sp+10h] [bp-9Ch]@131
  char v106; // [sp+14h] [bp-98h]@106
  char v107; // [sp+14h] [bp-98h]@114
  char v108; // [sp+14h] [bp-98h]@119
  char v109; // [sp+14h] [bp-98h]@131
  char v110; // [sp+18h] [bp-94h]@106
  char v111; // [sp+18h] [bp-94h]@114
  char v112; // [sp+18h] [bp-94h]@119
  char v113; // [sp+18h] [bp-94h]@131
  int v114; // [sp+1Ch] [bp-90h]@19
  int v115; // [sp+1Ch] [bp-90h]@22
  int v116; // [sp+1Ch] [bp-90h]@27
  signed int v117; // [sp+1Ch] [bp-90h]@31
  int v118; // [sp+1Ch] [bp-90h]@37
  int v119; // [sp+1Ch] [bp-90h]@40
  int v120; // [sp+1Ch] [bp-90h]@49
  int v121; // [sp+1Ch] [bp-90h]@54
  int v122; // [sp+1Ch] [bp-90h]@59
  signed int v123; // [sp+1Ch] [bp-90h]@63
  int v124; // [sp+1Ch] [bp-90h]@69
  signed int v125; // [sp+1Ch] [bp-90h]@73
  char *v126; // [sp+1Ch] [bp-90h]@81
  unsigned __int16 v127; // [sp+1Ch] [bp-90h]@96
  NiTexture *v128; // [sp+1Ch] [bp-90h]@97
  char v129; // [sp+1Ch] [bp-90h]@106
  char v130; // [sp+1Ch] [bp-90h]@114
  char v131; // [sp+1Ch] [bp-90h]@119
  char v132; // [sp+1Ch] [bp-90h]@130
  signed int v133; // [sp+1Ch] [bp-90h]@149
  signed int v134; // [sp+20h] [bp-8Ch]@138
  char v135; // [sp+2Ch] [bp-80h]@120
  char v136; // [sp+3Ch] [bp-70h]@121
  char v137; // [sp+4Ch] [bp-60h]@122
  D3DXCOLOR result; // [sp+5Ch] [bp-50h]@119
  D3DXCOLOR kTextColor; // [sp+6Ch] [bp-40h]@106
  int BufNum; // [sp+7Ch] [bp-30h]@2
  char bHaveCharFace; // [sp+83h] [bp-29h]@88
  int DBufNum; // [sp+84h] [bp-28h]@1
  char acText[32]; // [sp+88h] [bp-24h]@43
  unsigned int v144; // [sp+A8h] [bp-4h]@1
  int v145; // [sp+ACh] [bp+0h]@1

  v144 = (unsigned int)&v145 ^ __security_cookie;
  v2 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  v3 = this;
  v4 = (SpEffect **)this->m_apkSoulWinEffect;
  DBufNum = 2;
  v5 = 1;
  do
  {
    BufNum = 7;
    do
    {
      if ( (*v4)->m_bLive )
      {
        SpEffect::Update(*v4, fCurTime);
        v5 = 1;
      }
      ++v4;
      BufNum -= v5;
    }
    while ( BufNum );
    DBufNum -= v5;
  }
  while ( DBufNum );
  if ( !(unsigned __int8)((int (__thiscall *)(TargetWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
  {
    v6 = v3->baseclass_0.m_pkFrameWork[17].m_kMsgQ.m_uiTail;
    if ( v6 )
    {
      if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v6 + 260))() )
      {
        MainChar::SetTOTChar((MainChar *)g_pkMainChar, 0xFFFFu);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3->baseclass_0.m_pkFrameWork[17].m_kMsgQ.m_uiTail + 256))(0);
      }
    }
  }
  ((void (__stdcall *)(_UNKNOWN *))v3->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AFC3F);
  if ( PgWin::IsVisible(&v3->baseclass_0.baseclass_0.baseclass_0) )
  {
    if ( v2 )
    {
      v7 = Char::GetMobInfo((Char *)v2);
      if ( !Char::IsLinkGate((Char *)v2) )
      {
        if ( !v7 || v7->Type != 29 )
        {
          if ( (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] == g_pkMainChar )
          {
            if ( v3->m_pkHPBar )
            {
              v8 = (double)User::HP(&g_kUser);
              DBufNum = User::MaxHP(&g_kUser);
              v9 = (double)DBufNum;
              PgWinBar::SetValue(v3->m_pkHPBar, v9, v8);
              v114 = User::HP(&g_kUser) > 0;
              ((void (__stdcall *)(int))v3->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v114);
              v10 = User::HP(&g_kUser);
              v115 = v10 == User::MaxHP(&g_kUser);
              ((void (__stdcall *)(int))v3->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v115);
            }
            if ( !v3->m_pkLPBar )
              goto LABEL_35;
            v11 = (double)User::LP(&g_kUser);
            DBufNum = User::MaxLP(&g_kUser);
            v12 = (double)DBufNum;
            PgWinBar::SetValue(v3->m_pkLPBar, v12, v11);
            v116 = User::LP(&g_kUser) > 0;
            ((void (__stdcall *)(int))v3->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v116);
            v13 = User::LP(&g_kUser);
            if ( v13 == User::MaxLP(&g_kUser) )
            {
              v14 = User::MaxLP(&g_kUser) == 0;
              v15 = v3->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
              if ( !v14 )
              {
                v117 = 1;
LABEL_34:
                ((void (__stdcall *)(signed int))v15)(v117);
LABEL_35:
                if ( v3->m_pkSPBar )
                {
                  v16 = (double)User::SP(&g_kUser);
                  DBufNum = User::MaxSP(&g_kUser);
                  v17 = (double)DBufNum;
                  PgWinBar::SetValue(v3->m_pkSPBar, v17, v16);
                  v118 = User::SP(&g_kUser) > 0;
                  ((void (__stdcall *)(int))v3->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v118);
                  v18 = User::SP(&g_kUser);
                  v119 = v18 == User::MaxSP(&g_kUser);
                  ((void (__stdcall *)(int))v3->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v119);
                }
                ((void (__stdcall *)(signed int))v3->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                ((void (__stdcall *)(signed int))v3->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                User::HP(&g_kUser);
                sprintf(acText, "%u");
                v19 = v3->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                User::MaxHP(&g_kUser);
                v20 = fs("%s/%d");
                v19[118].__vecDelDtor((NiRefObject *)v3->m_pkHPText, (unsigned int)v20);
                User::SP(&g_kUser);
                sprintf(acText, "%u");
                v21 = v3->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                User::MaxSP(&g_kUser);
                v22 = fs("%s/%d");
                v21[118].__vecDelDtor((NiRefObject *)v3->m_pkSPText, (unsigned int)v22);
                ((void (__stdcall *)(signed int))v3->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                User::LP(&g_kUser);
                sprintf(acText, "%u");
                v23 = v3->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                User::MaxLP(&g_kUser);
                v24 = fs("%s/%d");
                v23[118].__vecDelDtor((NiRefObject *)v3->m_pkLPText, (unsigned int)v24);
                ((void (__stdcall *)(_DWORD))v3->m_pkLevelOver->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                if ( v3->m_pkLevelText )
                {
                  ((void (__stdcall *)(signed int))v3->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                  if ( User::Lv(&g_kUser) )
                  {
                    v25 = v3->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                    User::Lv(&g_kUser);
                    v26 = fs("%d");
                    v25[118].__vecDelDtor((NiRefObject *)v3->m_pkLevelText, (unsigned int)v26);
                  }
                  else
                  {
                    ((void (__stdcall *)(_DWORD))v3->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
                  }
                }
                goto LABEL_87;
              }
            }
            else
            {
              v15 = v3->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
            }
            v117 = 0;
            goto LABEL_34;
          }
          if ( v3->m_pkHPBar )
          {
            DBufNum = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 92))(v2);
            v27 = (double)DBufNum;
            DBufNum = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 100))(v2);
            v28 = (double)DBufNum;
            PgWinBar::SetValue(v3->m_pkHPBar, v28, v27);
            v120 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 92))(v2) > 0;
            ((void (__stdcall *)(int))v3->m_pkHPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v120);
            v29 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 100))(v2);
            v121 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 92))(v2) == v29
                && (!(unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 32))(v2)
                 || (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 100))(v2));
            ((void (__stdcall *)(int))v3->m_pkHPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v121);
          }
          if ( !v3->m_pkLPBar )
          {
LABEL_67:
            if ( !v3->m_pkSPBar )
            {
LABEL_77:
              v40 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 32))(v2);
              v41 = v3->m_pkHPText;
              if ( v40 )
              {
                ((void (__stdcall *)(_DWORD))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3->m_bShowMobHP);
                ((void (__stdcall *)(_DWORD))v3->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3->m_bShowMobHP);
                ((void (__stdcall *)(_DWORD))v3->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3->m_bShowMobHP);
              }
              else
              {
                ((void (__stdcall *)(_DWORD))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3->m_bShowMobHP == 0);
                ((void (__stdcall *)(_DWORD))v3->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3->m_bShowMobHP == 0);
                ((void (__stdcall *)(_DWORD))v3->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3->m_bShowMobHP == 0);
              }
              (*(void (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 92))(v2);
              sprintf(acText, "%u");
              v42 = v3->m_pkHPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              (*(void (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 100))(v2);
              v43 = fs("%s/%d");
              v42[118].__vecDelDtor((NiRefObject *)v3->m_pkHPText, (unsigned int)v43);
              (*(void (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 104))(v2);
              sprintf(acText, "%u");
              v44 = v3->m_pkSPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              (*(void (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 108))(v2);
              v45 = fs("%s/%d");
              v44[118].__vecDelDtor((NiRefObject *)v3->m_pkSPText, (unsigned int)v45);
              (*(void (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 120))(v2);
              sprintf(acText, "%u");
              v46 = v3->m_pkLPText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              (*(void (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 124))(v2);
              v47 = fs("%s/%d");
              v46[118].__vecDelDtor((NiRefObject *)v3->m_pkLPText, (unsigned int)v47);
              v48 = User::Lv(&g_kUser) + 10 < v3->m_kTempLV;
              v49 = v3->m_pkLevelOver->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
              if ( v48 )
              {
                ((void (__stdcall *)(signed int))v49)(1);
                ((void (__stdcall *)(_DWORD))v3->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                v50 = v3->m_pkLevelText;
                v51 = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
                v126 = (char *)&unk_9AFC47;
              }
              else
              {
                ((void (__stdcall *)(_DWORD))v49)(0);
                ((void (__stdcall *)(signed int))v3->m_pkLevelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                if ( !v3->m_pkLevelText )
                  goto LABEL_87;
                v50 = v3->m_pkLevelText;
                if ( v3->m_kTempLV )
                {
                  v52 = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                  v53 = fs("%d");
                  v50 = v3->m_pkLevelText;
                  v126 = v53;
                  v51 = v52[118].__vecDelDtor;
                }
                else
                {
                  v51 = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
                  v126 = "-";
                }
              }
              v51(&v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)v126);
LABEL_87:
              ((void (__stdcall *)(_DWORD))v3->m_pkMobLevYellow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v3->m_pkMobLevOrange->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v3->m_pkMobLevRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v3->m_pkMobLevGreen->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v3->m_pkMobLevGray->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              TargetWin::SetTargetClassInfo(v3, (Char *)v2);
              if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 32))(v2) )
              {
                TargetWin::ShowBarWin(v3, 1);
                v54 = v3->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
                bHaveCharFace = 0;
                ((void (__stdcall *)(_DWORD))v54)(0);
                ((void (__stdcall *)(_DWORD))v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                v55 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
                v56 = *(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
                DBufNum = *(_WORD *)(v2 + 942);
                if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v56 + 16))(
                                        ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                                        DBufNum)
                  && (unsigned __int16)DBufNum <= *(_WORD *)(v55 + 200)
                  && (v57 = *(_DWORD *)(v55 + 196) + 4 * (unsigned __int16)DBufNum, *(_DWORD *)v57)
                  && (v58 = *(_DWORD *)v57) != 0
                  && (v59 = *(_WORD *)(v58 + 174)) != 0 )
                {
                  v60 = IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::GetByID(v59, 1);
                  v14 = v60->Class == 5;
                  DBufNum = (int)v60;
                  if ( v14 )
                  {
                    ((void (__stdcall *)(signed int))v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                    v127 = *(_WORD *)(DBufNum + 6);
                  }
                  else
                  {
                    if ( *(_BYTE *)(v58 + 180) != 1 || *(_WORD *)(v58 + 174) )
                    {
                      v62 = v3->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
                      bHaveCharFace = 1;
                      ((void (__stdcall *)(signed int))v62)(1);
                      TargetWin::PlayerTargetBaseTexture(v3, (Char *)v2);
LABEL_102:
                      DBufNum = *(_WORD *)(v2 + 548);
                      v64 = CGuildMonster::GetInstance();
                      std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
                        (std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *)v64,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&BufNum,
                        (const unsigned __int16 *)&DBufNum);
                      if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)BufNum == v64->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead )
                        v65 = 0;
                      else
                        v65 = *(_DWORD *)(BufNum + 16);
                      DBufNum = (int)GuildTask::GetGuild();
                      if ( Char::IsNPC((Char *)v2) )
                      {
                        v66 = v3->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                        v129 = -1;
                        v110 = 50;
                        v106 = -13;
                        v102 = -1;
                        v101 = &kTextColor;
LABEL_110:
                        v67 = Color::GetDxColor(v101, v102, v106, v110, v129);
                        v66[117].__vecDelDtor((NiRefObject *)v3->m_pkCharNameTextWin, (unsigned int)v67);
                        goto LABEL_141;
                      }
                      if ( v65 && v65 == g_pkMainChar->m_dwGuildRegNum )
                      {
                        v66 = v3->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                        v129 = -1;
                        v110 = -1;
                        v106 = -1;
                        v102 = -1;
                        v101 = &kTextColor;
                        goto LABEL_110;
                      }
                      if ( DBufNum && *(_DWORD *)(DBufNum + 2700) == 2 )
                      {
                        if ( g_pkMainChar->m_dwGuildRegNum == *(_DWORD *)(v2 + 676) )
                          goto LABEL_141;
                        v130 = -1;
                        v111 = 0;
                        v107 = 0;
                        v103 = -1;
                        goto LABEL_117;
                      }
                      if ( Char::IsResource((Char *)v2) )
                      {
                        v130 = -1;
                        v111 = -18;
                        v107 = -126;
                        v103 = -18;
LABEL_117:
                        v68 = v3->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                        v69 = Color::GetDxColor(&kTextColor, v103, v107, v111, v130);
                        v68[117].__vecDelDtor((NiRefObject *)v3->m_pkCharNameTextWin, (unsigned int)v69);
                        goto LABEL_141;
                      }
                      v70 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 164))(v2);
                      switch ( Char::GetLvGapIndex(g_pkMainChar, v70) )
                      {
                        case 0u:
                          v71 = v3->m_pkMobLevRed;
                          v131 = -1;
                          v112 = 29;
                          v108 = 37;
                          v104 = -66;
                          v72 = (char *)&result;
                          break;
                        case 1u:
                          v71 = v3->m_pkMobLevOrange;
                          v131 = -1;
                          v112 = 37;
                          v108 = -96;
                          v104 = -1;
                          v72 = &v135;
                          break;
                        case 2u:
                          v71 = v3->m_pkMobLevYellow;
                          v131 = -1;
                          v112 = 50;
                          v108 = -13;
                          v104 = -1;
                          v72 = &v136;
                          break;
                        case 3u:
                          v71 = v3->m_pkMobLevGreen;
                          v131 = -1;
                          v112 = 86;
                          v108 = -25;
                          v104 = 90;
                          v72 = &v137;
                          break;
                        default:
                          v71 = v3->m_pkMobLevGray;
                          v131 = -1;
                          v112 = -64;
                          v108 = -64;
                          v104 = -64;
                          v72 = &acText[16];
                          break;
                      }
                      v73 = Color::GetDxColor((D3DXCOLOR *)v72, v104, v108, v112, v131);
                      kTextColor.r = v73->r;
                      kTextColor.g = v73->g;
                      v74 = v3->m_pkCharNameTextWin;
                      kTextColor.b = v73->b;
                      kTextColor.a = v73->a;
                      ((void (__stdcall *)(D3DXCOLOR *))v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&kTextColor);
                      if ( !bHaveCharFace )
                        v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
                          (NiRefObject *)v71,
                          1u);
LABEL_141:
                      v86 = AbStateInfectee::GetAbStateList((AbStateInfectee *)v2);
                      if ( *(_DWORD *)&v3->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] == *(_DWORD *)&v86->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
                      {
                        v87 = v86->baseclass_0.baseclass_0.m_pkHead;
                        v88 = v3->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
                        if ( !v87 )
                        {
LABEL_149:
                          v92 = v3->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                          v93 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 84))(v2);
                          v94 = v3->m_pkCharNameTextWin;
                          v95 = v92[118].__vecDelDtor;
                          v133 = v93;
LABEL_162:
                          v95((NiRefObject *)v94, v133);
                          return;
                        }
                        while ( 1 )
                        {
                          v89 = v88->m_element;
                          v88 = v88->m_pkNext;
                          v90 = v87->m_element;
                          v87 = v87->m_pkNext;
                          if ( v90->kID != v89 )
                            break;
                          if ( !v87 )
                            goto LABEL_149;
                        }
                      }
                      NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)&v3->m_kAbStateList);
                      v91 = (int)v3->m_apkAbstateBufIconWin;
                      DBufNum = 15;
                      do
                      {
                        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v91 + 256))(0);
                        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v91 + 60) + 256))(0);
                        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v91 + 120) + 256))(0);
                        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v91 + 180) + 256))(0);
                        AbstateIcon::ClearDuplicateText(*(AbstateIcon **)v91);
                        AbstateIcon::ClearDuplicateText(*(AbstateIcon **)(v91 + 60));
                        v91 += 4;
                        --DBufNum;
                      }
                      while ( DBufNum );
                      DBufNum = 0;
                      BufNum = 0;
                      TargetWin::SetBuffUI(v3, (Char *)v2, Skill, &BufNum);
                      TargetWin::SetBuffUI(v3, (Char *)v2, Scroll, &BufNum);
                      TargetWin::SetBuffUI(v3, (Char *)v2, Potion, &BufNum);
                      TargetWin::SetBuffUI(v3, (Char *)v2, 0, &BufNum);
                      TargetWin::SetBuffUI(v3, (Char *)v2, Debuff, &DBufNum);
                      goto LABEL_149;
                    }
                    ((void (__stdcall *)(signed int))v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                    v127 = *(_WORD *)(v2 + 942);
                  }
                  v128 = PortraitTextureBuffer::GetMobPortrait(v127);
                  v61 = v3->m_pkMobPortrait->m_spSpr.m_pObject;
                }
                else
                {
                  ((void (__stdcall *)(_DWORD))v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                  v63 = PortraitTextureBuffer::GetMobPortrait(*(_WORD *)(v2 + 942));
                  v61 = v3->m_pkMobPortrait->m_spSpr.m_pObject;
                  v128 = v63;
                }
                PgSpr::SetTexture(v61, v128);
                goto LABEL_102;
              }
              if ( (unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 660))(v2) )
              {
                ((void (__stdcall *)(_DWORD))v3->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                ((void (__stdcall *)(_DWORD))v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                v75 = v3->m_pkMobPortrait->m_spSpr.m_pObject;
                v76 = PortraitTextureBuffer::GetMoverPortrait(*(_DWORD *)(v2 + 2964));
                PgSpr::SetTexture(v75, v76);
                TargetWin::ShowBarWin(v3, 1);
                goto LABEL_141;
              }
              if ( (unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 664))(v2) )
              {
                ((void (__stdcall *)(_DWORD))v3->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                ((void (__stdcall *)(_DWORD))v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                v77 = v3->m_pkMobPortrait->m_spSpr.m_pObject;
                v78 = PortraitTextureBuffer::GetPetPortrait(*(_DWORD *)(v2 + 2948));
                PgSpr::SetTexture(v77, v78);
                TargetWin::ShowBarWin(v3, 1);
                goto LABEL_141;
              }
              v132 = -1;
              if ( (Char *)v2 == g_pkMainChar )
              {
                v113 = 31;
                v109 = -58;
                v105 = -31;
              }
              else
              {
                v79 = v3->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                v80 = Color::GetDxColor((D3DXCOLOR *)&acText[16], -1, -1, -1, -1);
                v79[117].__vecDelDtor((NiRefObject *)v3->m_pkCharNameTextWin, (unsigned int)v80);
                v81 = GuildTask::GetGuild();
                if ( !v81 || v81->m_GttEnemyInfo.uiStatus != 2 || g_pkMainChar->m_dwGuildRegNum == *(_DWORD *)(v2 + 676) )
                {
LABEL_137:
                  TargetWin::ShowBarWin(v3, 1);
                  v84 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 48))(v2);
                  v85 = v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
                  if ( v84 )
                  {
                    ((void (__stdcall *)(_DWORD))v85)(0);
                    v134 = 0;
                  }
                  else
                  {
                    ((void (__stdcall *)(_DWORD))v85)(0);
                    v134 = 1;
                  }
                  ((void (__cdecl *)(signed int))v3->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v134);
                  TargetWin::PlayerTargetBaseTexture(v3, (Char *)v2);
                  goto LABEL_141;
                }
                v132 = -1;
                v113 = 0;
                v109 = 0;
                v105 = -1;
              }
              v82 = v3->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v83 = Color::GetDxColor((D3DXCOLOR *)&acText[16], v105, v109, v113, v132);
              v82[117].__vecDelDtor((NiRefObject *)v3->m_pkCharNameTextWin, (unsigned int)v83);
              goto LABEL_137;
            }
            DBufNum = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 104))(v2);
            v35 = (double)DBufNum;
            DBufNum = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 108))(v2);
            v36 = (double)DBufNum;
            PgWinBar::SetValue(v3->m_pkSPBar, v36, v35);
            v124 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 104))(v2) > 0;
            ((void (__stdcall *)(int))v3->m_pkSPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v124);
            v37 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 108))(v2);
            if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 104))(v2) == v37 )
            {
              v38 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 108))(v2);
              v39 = v3->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
              if ( v38 )
              {
                v125 = 1;
LABEL_76:
                ((void (__stdcall *)(signed int))v39)(v125);
                goto LABEL_77;
              }
            }
            else
            {
              v39 = v3->m_pkSPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
            }
            v125 = 0;
            goto LABEL_76;
          }
          DBufNum = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 120))(v2);
          v30 = (double)DBufNum;
          DBufNum = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 124))(v2);
          v31 = (double)DBufNum;
          PgWinBar::SetValue(v3->m_pkLPBar, v31, v30);
          v122 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 120))(v2) > 0;
          ((void (__stdcall *)(int))v3->m_pkLPBarEnd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v122);
          v32 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v2 + 124))(v2);
          if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 120))(v2) == v32 )
          {
            v33 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 124))(v2);
            v34 = v3->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
            if ( v33 )
            {
              v123 = 1;
LABEL_66:
              ((void (__stdcall *)(signed int))v34)(v123);
              goto LABEL_67;
            }
          }
          else
          {
            v34 = v3->m_pkLPBarStart->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
          }
          v123 = 0;
          goto LABEL_66;
        }
      }
    }
    ((void (__stdcall *)(_UNKNOWN *))v3->m_pkCharNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9AFC46);
    v96 = 0.0;
    v97 = v3->m_pkHPBar;
    if ( v97 && 0.0 != v97->m_fCurValue )
    {
      v97->m_fCurValue = 0.0;
      PgWinBar::OnChangeValue(v97);
      v96 = 0.0;
    }
    v98 = v3->m_pkSPBar;
    if ( v96 != v98->m_fCurValue )
    {
      v98->m_fCurValue = v96;
      PgWinBar::OnChangeValue(v98);
      v96 = 0.0;
    }
    v99 = v3->m_pkLPBar;
    if ( v96 != v99->m_fCurValue )
    {
      v99->m_fCurValue = v96;
      PgWinBar::OnChangeValue(v99);
    }
    ((void (__stdcall *)(_DWORD))v3->m_pkMobPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(signed int))v3->m_pkPortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v100 = PortraitTextureBuffer::GetDefaultTexture();
    MaskedWin::SetBaseTexture(v3->m_pkPortrait, v100);
    v133 = 0;
LABEL_161:
    v95 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v94 = v3;
    goto LABEL_162;
  }
  if ( v2 && !Char::IsLinkGate((Char *)v2) )
  {
    v133 = 1;
    goto LABEL_161;
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (005AAAA0) --------------------------------------------------------
TargetOfTheTargetWin *__cdecl TargetOfTheTargetWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  TargetOfTheTargetWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x180u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &TargetOfTheTargetWin::_vftable_;
    *((_DWORD *)v2 + 58) = &TargetOfTheTargetWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 94) = -1;
    *((_BYTE *)v2 + 380) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (TargetOfTheTargetWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B04F4: using guessed type int (__stdcall *TargetOfTheTargetWin___vftable_)(int uiFlags);
// 9B0514: using guessed type int (__thiscall *TargetOfTheTargetWin___vftable_)(void *p, char);

//----- (005AAC00) --------------------------------------------------------
bool __thiscall TargetWin::Create(TargetWin *this, PgFrameWork *pkFrameWork)
{
  TargetWin *v2; // esi@1

  v2 = this;
  TargetWin::CreateKoreaUI(this, pkFrameWork);
  v2->m_kTempLV = 0;
  return 1;
}

//----- (005AAC20) --------------------------------------------------------
void __thiscall TargetWin::UpdateMeWin(TargetWin *this, float fCurTime)
{
  Char *v2; // esi@1

  v2 = (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  TargetWin::UpdateKoreaUI(this, fCurTime);
  if ( v2
    && (!v2->baseclass_0.vfptr->IsVisible((AbStateInfectee *)v2)
     || (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].Affect)(v2)
     && Char::CheckActState(v2, 500000)) )
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
}

//----- (005AAC80) --------------------------------------------------------
CharNPC_ViewInfo *__cdecl IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::GetByID(unsigned __int16 uiId, bool bViewError)
{
  int v2; // esi@1
  CharNPC_ViewInfo *result; // eax@2
  int v4; // ecx@4

  v2 = ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable,
                          uiId)
    && uiId <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * uiId)) )
    result = *(CharNPC_ViewInfo **)(v4 + 4 * uiId);
  else
    result = 0;
  return result;
}
// A97F60: using guessed type int ITableBase_CharNPC_ViewInfo_NPCViewInfoTab___ms_pkTable;

//----- (005AACD0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<unsigned_short>_unsigned_short>::_NiTListBase<DFALL<unsigned_short>_unsigned_short>(NiTListBase<DFALL<unsigned short>,unsigned short> *this)
{
  this->vfptr = (NiTListBase<DFALL<unsigned short>,unsigned short>Vtbl *)&NiTListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
}
// 9B0738: using guessed type int (__thiscall *NiTListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);

//----- (005AACE0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<unsigned_short>_unsigned_short>::_scalar_deleting_destructor_(NiTListBase<DFALL<unsigned short>,unsigned short> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<unsigned short>,unsigned short>Vtbl *)&NiTListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9B0738: using guessed type int (__thiscall *NiTListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);

//----- (005AAD10) --------------------------------------------------------
void *__thiscall MobIconWin::_scalar_deleting_destructor_(MobIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MobIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MobIconWin::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9AFFE4: using guessed type int (__stdcall *MobIconWin___vftable_)(int uiFlags);
// 9B0004: using guessed type int (__thiscall *MobIconWin___vftable_)(void *p, char);

//----- (005AAD50) --------------------------------------------------------
void *__thiscall AbStateIconWin::_vector_deleting_destructor_(AbStateIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AbStateIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AbStateIconWin::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B026C: using guessed type int (__stdcall *AbStateIconWin___vftable_)(int uiFlags);
// 9B028C: using guessed type int (__thiscall *AbStateIconWin___vftable_)(void *p, char);

//----- (005AAD90) --------------------------------------------------------
void __thiscall NiTList<unsigned_short>::_NiTList<unsigned_short>(NiTList<unsigned short> *this)
{
  NiTList<unsigned short> *v1; // edi@1
  NiTListItem<unsigned short> *v2; // esi@1
  NiTListItem<unsigned short> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<unsigned short>,unsigned short>Vtbl *)&NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<unsigned short>,unsigned short> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<unsigned short>,unsigned short>Vtbl *)&NiTListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
}
// 9B0738: using guessed type int (__thiscall *NiTListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);
// 9B0748: using guessed type int (__thiscall *NiTPointerListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);

//----- (005AAE10) --------------------------------------------------------
void *__thiscall NiTList<unsigned_short>::_vector_deleting_destructor_(NiTList<unsigned short> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<unsigned short> *v3; // esi@1
  NiTListItem<unsigned short> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<unsigned short>,unsigned short>Vtbl *)&NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<unsigned_short>_unsigned_short>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B0738: using guessed type int (__thiscall *NiTListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);
// 9B0748: using guessed type int (__thiscall *NiTPointerListBase_DFALL_unsigned short__unsigned short____vftable_)(void *p, char);

//----- (005AAEA0) --------------------------------------------------------
void *__thiscall TargetOfTheTargetWin::_scalar_deleting_destructor_(TargetOfTheTargetWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TargetOfTheTargetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TargetOfTheTargetWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B04F4: using guessed type int (__stdcall *TargetOfTheTargetWin___vftable_)(int uiFlags);
// 9B0514: using guessed type int (__thiscall *TargetOfTheTargetWin___vftable_)(void *p, char);

//----- (005AAEE0) --------------------------------------------------------
NiTListItem<unsigned short> *__thiscall NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::NewItem(NiTPointerListBase<DFALL<unsigned short>,unsigned short> *this)
{
  NiTListItem<unsigned short> *result; // eax@1

  result = (NiTListItem<unsigned short> *)operator new(0xCu);
  result->m_element = 0;
  return result;
}

//----- (005AAF00) --------------------------------------------------------
void __thiscall NiTPointerListBase<DFALL<unsigned_short>_unsigned_short>::DeleteItem(NiTPointerListBase<DFALL<unsigned short>,unsigned short> *this, NiTListItem<unsigned short> *pkItem)
{
  pkItem->m_element = 0;
  operator delete(pkItem);
}

//----- (005AAF20) --------------------------------------------------------
void *__thiscall TargetWin::_vector_deleting_destructor_(TargetWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  TargetWin::_TargetWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005AAF50) --------------------------------------------------------
void __thiscall ToolTipWin::ToolTipWin(ToolTipWin *this)
{
  ToolTipWin *v1; // esi@1

  v1 = this;
  FrameBoxWin::FrameBoxWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ToolTipWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ToolTipWin::_vftable_;
  v1->m_bMultiLine = 0;
}
// 9B09AC: using guessed type int (__stdcall *ToolTipWin___vftable_)(int uiFlags);
// 9B09CC: using guessed type int (__thiscall *ToolTipWin___vftable_)(void *p, char);

//----- (005AAF80) --------------------------------------------------------
void __thiscall ToolTipWin::_ToolTipWin(ToolTipWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ToolTipWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ToolTipWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
}
// 9B09AC: using guessed type int (__stdcall *ToolTipWin___vftable_)(int uiFlags);
// 9B09CC: using guessed type int (__thiscall *ToolTipWin___vftable_)(void *p, char);

//----- (005AAFA0) --------------------------------------------------------
void __thiscall ToolTipWin::ClearTipText(ToolTipWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_apkTextWin;
  v2 = 20;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 472))(&unk_9B09A4);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (005AAFD0) --------------------------------------------------------
void __thiscall ToolTipWin::SetTipText(ToolTipWin *this, char *pcText)
{
  char *v2; // ebx@1
  char *v3; // esi@1
  signed int v4; // edi@1

  v2 = (char *)this->m_apkTextWin;
  v3 = (char *)this->m_apkTextWin;
  v4 = 20;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 472))(&unk_9B09A5);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( pcText )
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 472))(pcText);
}

//----- (005AB020) --------------------------------------------------------
bool __thiscall ToolTipWin::SetTipText(ToolTipWin *this, int nLine, char *pcText, int r, int g, int b, Font::Type font)
{
  ToolTipWin *v7; // esi@1
  bool result; // al@2
  NiRefObjectVtbl *v9; // ebx@3
  PgFont *v10; // eax@3

  v7 = this;
  if ( nLine < 20 )
  {
    v9 = this->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v10 = Font::Get(font);
    v9[113].__vecDelDtor((NiRefObject *)v7->m_apkTextWin[nLine], (unsigned int)v10);
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v7->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      r,
      g,
      b,
      255);
    ((void (__stdcall *)(_DWORD))v7->m_apkTextWin[nLine]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005AB0A0) --------------------------------------------------------
void __thiscall ToolTipWin::AdjustSizeIfIamToolTipWin(ToolTipWin *this)
{
  int v1; // edi@1
  int v2; // eax@1
  CSpFont *v3; // esi@1
  int v4; // ebx@2
  char *v5; // eax@3
  bool v6; // zf@7
  tagSIZE kSize; // [sp+8h] [bp-18h]@4
  ToolTipWin *v8; // [sp+10h] [bp-10h]@1
  int v9; // [sp+14h] [bp-Ch]@2
  int v10; // [sp+18h] [bp-8h]@2
  int uiCy; // [sp+1Ch] [bp-4h]@2

  v1 = (int)this->m_apkTextWin;
  v8 = this;
  v2 = ((int (*)(void))this->m_apkTextWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
  v3 = (CSpFont *)v2;
  if ( v2 )
  {
    SelectObject(*(HDC *)(v2 + 192), *(HGDIOBJ *)(v2 + 184));
    v4 = 0;
    uiCy = 0;
    v10 = v1;
    v9 = 20;
    do
    {
      v5 = (char *)(*(int (**)(void))(**(_DWORD **)v1 + 484))();
      if ( v5 )
      {
        CSpFont::GetTextSize(v3, v5, strlen(v5), &kSize, 0, 0, 1, 0);
        if ( (unsigned int)kSize.cx > v4 )
          v4 = kSize.cx;
        uiCy += kSize.cy + 2;
      }
      v1 = v10 + 4;
      v6 = v9-- == 1;
      v10 += 4;
    }
    while ( !v6 );
    if ( v4 )
      ((void (__stdcall *)(unsigned int, unsigned int))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
        v4 + 2 * v8->baseclass_0.m_uiEdgeWidth,
        uiCy + 2 * v8->baseclass_0.m_uiEdgeHeight);
  }
}

//----- (005AB180) --------------------------------------------------------
void __thiscall ToolTipWin::ShowToolTip(ToolTipWin *this, PgWin *pkParent)
{
  PgWin *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@2

  v2 = (PgWin *)this;
  if ( pkParent )
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[109].__vecDelDtor;
    v2->m_pkToolTipParentWin = pkParent;
    ((void (__thiscall *)(_DWORD))v3)(v2);
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, v2);
    unk_B70440 = v2;
  }
}

//----- (005AB1D0) --------------------------------------------------------
void __thiscall ToolTipWin::ShowToolTip(ToolTipWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[109].__vecDelDtor)(v1);
  PgWinMgr::SetTopWin(&Pgg_kWinMgr, v1);
  unk_B70440 = v1;
}

//----- (005AB200) --------------------------------------------------------
bool __thiscall ToolTipWin::Create(ToolTipWin *this, NiSourceTexture *pkTexture, unsigned int uiEdgeWidth, unsigned int uiEdgeHeight)
{
  ToolTipWin *v4; // esi@1
  bool result; // al@1
  signed int v6; // ebx@2
  int v7; // edi@2
  PgFont *v8; // eax@3
  PgWinText *v9; // eax@3
  int v10; // eax@3

  v4 = this;
  result = FrameBoxWin::Create(&this->baseclass_0, pkTexture, uiEdgeWidth, uiEdgeHeight, 0, 0, 0, 0);
  if ( result )
  {
    v6 = 0;
    v7 = (int)v4->m_apkTextWin;
    do
    {
      v8 = Font::Get(0);
      v9 = PgWinText::CreateWin(
             v4->baseclass_0.m_uiEdgeWidth,
             v4->baseclass_0.m_uiEdgeHeight + v6 + 2,
             0x100u,
             0x10u,
             v8,
             &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
      *(_DWORD *)v7 = v9;
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v9,
        0);
      v10 = *(_DWORD *)(*(_DWORD *)v7 + 288);
      if ( v10 )
        *(_BYTE *)(v10 + 285) = 1;
      v6 += 14;
      v7 += 4;
    }
    while ( v6 < 280 );
    ((void (__thiscall *)(ToolTipWin *, unsigned int, unsigned int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
      v4,
      2 * v4->baseclass_0.m_uiEdgeWidth + 128,
      2 * v4->baseclass_0.m_uiEdgeHeight + 12);
    result = 1;
  }
  return result;
}

//----- (005AB2D0) --------------------------------------------------------
ToolTipWin *__cdecl ToolTipWin::CreateWin(NiSourceTexture *pkTexture, unsigned int uiEdgeHeight, unsigned int uiEdgeWidth)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  ToolTipWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1F4u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    FrameBoxWin::FrameBoxWin((FrameBoxWin *)v3);
    *(_DWORD *)v4 = &ToolTipWin::_vftable_;
    *((_DWORD *)v4 + 58) = &ToolTipWin::_vftable_;
    *((_BYTE *)v4 + 496) = 0;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiSourceTexture *, unsigned int, unsigned int))(*(_DWORD *)v4 + 560))(
                          v4,
                          pkTexture,
                          uiEdgeHeight,
                          uiEdgeWidth) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (ToolTipWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9B09AC: using guessed type int (__stdcall *ToolTipWin___vftable_)(int uiFlags);
// 9B09CC: using guessed type int (__thiscall *ToolTipWin___vftable_)(void *p, char);

//----- (005AB420) --------------------------------------------------------
void *__thiscall ToolTipWin::_scalar_deleting_destructor_(ToolTipWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ToolTipWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ToolTipWin::_vftable_;
  FrameBoxWin::_FrameBoxWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B09AC: using guessed type int (__stdcall *ToolTipWin___vftable_)(int uiFlags);
// 9B09CC: using guessed type int (__thiscall *ToolTipWin___vftable_)(void *p, char);

//----- (005AB470) --------------------------------------------------------
void __thiscall UserTradeInvWin::UserTradeInvWin(UserTradeInvWin *this)
{
  UserTradeInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UserTradeInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UserTradeInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  v1->m_uiInvType = 1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}
// 9B101C: using guessed type int (__stdcall *UserTradeInvWin___vftable_)(int uiFlags);
// 9B103C: using guessed type int (__thiscall *UserTradeInvWin___vftable_)(void *p, char);

//----- (005AB4F0) --------------------------------------------------------
void __thiscall UserTradeInvWin::_UserTradeInvWin(UserTradeInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UserTradeInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UserTradeInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 9B101C: using guessed type int (__stdcall *UserTradeInvWin___vftable_)(int uiFlags);
// 9B103C: using guessed type int (__thiscall *UserTradeInvWin___vftable_)(void *p, char);

//----- (005AB510) --------------------------------------------------------
void __thiscall UserTradeInvWin::UpdateMeWin(UserTradeInvWin *this, float fCurTime)
{
  ItemIcon *v2; // esi@1
  unsigned int v3; // eax@1
  Item *v4; // edi@1
  Item *v5; // eax@2

  v2 = (ItemIcon *)this;
  v3 = this->m_uiInvType;
  v4 = 0;
  if ( v3 )
  {
    if ( v3 != 1 )
      goto LABEL_6;
    v5 = UserTrade::GetMy(this->m_uiInvIndex);
  }
  else
  {
    v5 = UserTrade::GetOpp(this->m_uiInvIndex);
  }
  v4 = v5;
LABEL_6:
  if ( v4 != ItemIcon::GetItem(v2) )
    ItemIcon::SetItem(v2, v4, 1);
  IconWin::UpdateMeWin(&v2->baseclass_0, fCurTime);
}

//----- (005AB570) --------------------------------------------------------
bool __thiscall UserTradeInvWin::Create(UserTradeInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  UserTradeInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (005AB5B0) --------------------------------------------------------
void __thiscall UserTradeInvWin::SetInvType(UserTradeInvWin *this, unsigned int uiInvType)
{
  this->m_uiInvType = uiInvType;
}

//----- (005AB5C0) --------------------------------------------------------
void __thiscall UserTradeInvWin::OnFirstHitWin(UserTradeInvWin *this)
{
  UserTradeInvWin *v1; // esi@1
  Item *v2; // eax@1
  ItemInfoWin *v3; // ecx@2

  v1 = this;
  v2 = ItemIcon::GetItem(&this->baseclass_0);
  if ( v2 )
  {
    v3 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v3 )
    {
      ItemInfoWin::SetItemInfo(v3, v2);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (005AB5F0) --------------------------------------------------------
void __thiscall UserTradeWin::SetOtherLock(UserTradeWin *this, bool b)
{
  ((void (__stdcall *)(_DWORD))this->m_pkOtherLock->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
}

//----- (005AB610) --------------------------------------------------------
void __thiscall UserTradeWin::SetOtherOk(UserTradeWin *this, bool b)
{
  ((void (__stdcall *)(_DWORD))this->m_pkOtherOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(b);
}

//----- (005AB630) --------------------------------------------------------
void __thiscall UserTradeWin::SetOtherName(UserTradeWin *this, char *pkName)
{
  ((void (__stdcall *)(_DWORD))this->m_pkOtherNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkName);
}

//----- (005AB650) --------------------------------------------------------
void __thiscall UserTradeWin::SetMyName(UserTradeWin *this, char *pkName)
{
  ((void (__stdcall *)(_DWORD))this->m_pkMyNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkName);
}

//----- (005AB680) --------------------------------------------------------
void __thiscall UserTradeWin::OnCmdOk(UserTradeWin *this)
{
  UserTradeWin *v1; // esi@1

  v1 = this;
  GameFrameWork::NcTradeDecideReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
}

//----- (005AB6B0) --------------------------------------------------------
void __thiscall UserTradeWin::OnCmdCancel(UserTradeWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GameFrameWork::NcTradeCancelReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
}

//----- (005AB6D0) --------------------------------------------------------
void __thiscall UserTradeWin::OnClose(UserTradeWin *this)
{
  UserTradeWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMyCopperEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9B0C13);
  ((void (__stdcall *)(_DWORD))v1->m_pkMySilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9B0C1A);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9B0C1B);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9B0C29);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyCopperEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkMySilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkOtherCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v1->m_pkOtherSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v1->m_pkOtherGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v1->m_pkOtherGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  EditWin::SetEnable(v1->m_pkMyCopperEdit, 1);
  EditWin::SetEnable(v1->m_pkMyGemEdit, 1);
  EditWin::SetEnable(v1->m_pkMyGoldEdit, 1);
  EditWin::SetEnable(v1->m_pkMySilverEdit, 1);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyLock->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
}

//----- (005AB810) --------------------------------------------------------
void __thiscall UserTradeWin::SetOtherMoney(UserTradeWin *this, __int64 i64Money)
{
  UserTradeWin *v2; // esi@1
  int v3; // ST38_4@1
  int v4; // ST40_4@1
  int v5; // ST3C_4@1
  int v6; // edi@1
  char acTemp[64]; // [sp+18h] [bp-44h]@1
  unsigned int v8; // [sp+58h] [bp-4h]@1
  int v9; // [sp+5Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  v3 = User::GetCopper(i64Money);
  v4 = User::GetSilver(i64Money);
  v5 = User::GetGold(i64Money);
  v6 = User::GetGem(i64Money);
  _itoa(v3, acTemp, 10);
  ((void (__stdcall *)(_DWORD))v2->m_pkOtherCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acTemp);
  _itoa(v4, acTemp, 10);
  ((void (__stdcall *)(_DWORD))v2->m_pkOtherSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acTemp);
  _itoa(v5, acTemp, 10);
  ((void (__stdcall *)(_DWORD))v2->m_pkOtherGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acTemp);
  _itoa(v6, acTemp, 10);
  ((void (__stdcall *)(_DWORD))v2->m_pkOtherGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acTemp);
}
// A85C00: using guessed type int __security_cookie;

//----- (005AB900) --------------------------------------------------------
void __thiscall UserTradeWin::UnlockMyLock(UserTradeWin *this)
{
  UserTradeWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMyLock->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v2 = v1->m_pkMyCopperEdit;
  v1->m_bBothLocked = 0;
  EditWin::SetEnable(v2, 1);
  EditWin::SetEnable(v1->m_pkMyGemEdit, 1);
  EditWin::SetEnable(v1->m_pkMyGoldEdit, 1);
  EditWin::SetEnable(v1->m_pkMySilverEdit, 1);
}

//----- (005AB970) --------------------------------------------------------
void __thiscall UserTradeWin::OnShowWin(UserTradeWin *this)
{
  UserTradeWin *v1; // esi@1
  PgFrameWork *v2; // eax@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  v1->m_bBothLocked = 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v2, BIL_ITEM_18);
}

//----- (005AB9B0) --------------------------------------------------------
__int64 __thiscall UserTradeWin::GetInputMoney(UserTradeWin *this, bool *bBounded)
{
  UserTradeWin *v2; // esi@1
  const char *v3; // eax@1
  const char *v4; // eax@1
  const char *v5; // eax@1
  const char *v6; // eax@1
  int v7; // ebx@1
  __int64 v8; // qax@1
  __int64 v9; // qax@1
  __int64 v10; // qax@1
  __int64 v11; // qax@1
  int v12; // eax@1
  int iRealSilver; // [sp+Ch] [bp-3Ch]@1
  int iRealCopper; // [sp+10h] [bp-38h]@1
  int iRealGold; // [sp+14h] [bp-34h]@1
  int iGold; // [sp+18h] [bp-30h]@1
  int iCopper; // [sp+1Ch] [bp-2Ch]@1
  int iSilver; // [sp+20h] [bp-28h]@1
  char acTemp[32]; // [sp+24h] [bp-24h]@3
  unsigned int v21; // [sp+44h] [bp-4h]@1
  int v22; // [sp+48h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v2 = this;
  v3 = (const char *)((int (*)(void))this->m_pkMyCopperEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  iCopper = atoi(v3);
  v4 = (const char *)((int (*)(void))v2->m_pkMySilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  iSilver = atoi(v4);
  v5 = (const char *)((int (*)(void))v2->m_pkMyGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  iGold = atoi(v5);
  v6 = (const char *)((int (*)(void))v2->m_pkMyGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v7 = atoi(v6);
  v8 = User::GetMoney(&g_kUser);
  iRealCopper = User::GetCopper(v8);
  v9 = User::GetMoney(&g_kUser);
  iRealSilver = User::GetSilver(v9);
  v10 = User::GetMoney(&g_kUser);
  iRealGold = User::GetGold(v10);
  v11 = User::GetMoney(&g_kUser);
  v12 = User::GetGem(v11);
  if ( v7 >= v12 )
  {
    if ( v7 != v12 )
    {
      v7 = v12;
      _itoa(v12, acTemp, 10);
      ((void (__stdcall *)(_DWORD))v2->m_pkMyGemEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(acTemp);
      *bBounded = 1;
    }
    if ( iGold >= iRealGold )
    {
      if ( iGold != iRealGold )
      {
        iGold = iRealGold;
        _itoa(iRealGold, acTemp, 10);
        ((void (__stdcall *)(_DWORD))v2->m_pkMyGoldEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(acTemp);
        *bBounded = 1;
      }
      if ( iSilver >= iRealSilver )
      {
        if ( iSilver != iRealSilver )
        {
          iSilver = iRealSilver;
          _itoa(iRealSilver, acTemp, 10);
          ((void (__stdcall *)(_DWORD))v2->m_pkMySilverEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(acTemp);
          *bBounded = 1;
        }
        if ( iCopper >= iRealCopper && iCopper != iRealCopper )
        {
          iCopper = iRealCopper;
          _itoa(iRealCopper, acTemp, 10);
          v2->m_pkMyCopperEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor(
            (NiRefObject *)v2->m_pkMyCopperEdit,
            (unsigned int)acTemp);
          *bBounded = 1;
        }
      }
    }
  }
  return User::ConvertMoney(iCopper, iSilver, iGold, v7);
}
// A85C00: using guessed type int __security_cookie;

//----- (005ABBA0) --------------------------------------------------------
void __thiscall UserTradeWin::OnHelpLink(UserTradeWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "UserTrade");
}

//----- (005ABBD0) --------------------------------------------------------
void __thiscall UserTradeWin::UserTradeWin(UserTradeWin *this)
{
  UserTradeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UserTradeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UserTradeWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_kCenboardingPacket.bNeedToSend = 0;
  LODWORD(v1->m_kCenboardingPacket.i64PrevMoney) = 0;
  HIDWORD(v1->m_kCenboardingPacket.i64PrevMoney) = 0;
  v1->m_bBothLocked = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9B12AC: using guessed type int (__stdcall *UserTradeWin___vftable_)(int uiFlags);
// 9B12CC: using guessed type int (__thiscall *UserTradeWin___vftable_)(void *p, char);

//----- (005ABC40) --------------------------------------------------------
void __thiscall UserTradeWin::_UserTradeWin(UserTradeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UserTradeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UserTradeWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9B12AC: using guessed type int (__stdcall *UserTradeWin___vftable_)(int uiFlags);
// 9B12CC: using guessed type int (__thiscall *UserTradeWin___vftable_)(void *p, char);

//----- (005ABC70) --------------------------------------------------------
void __thiscall UserTradeWin::OnCmdMyInvLClick(UserTradeWin *this, unsigned int uiInvIndex)
{
  UserTradeWin *v2; // esi@1
  Item *v3; // eax@2

  v2 = this;
  if ( !UserTrade::GetLockMy() )
  {
    v3 = ItemIcon::GetItem(&v2->m_apkMyInvWin[uiInvIndex]->baseclass_0);
    if ( v3 )
    {
      v2->m_kDropContents.m_eType = 0;
      v2->m_kDropContents.m_eSenderType = 7;
      v2->m_kDropContents.m_apvParam[0] = v3;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      v2->m_kDrop.m_pkSender = (PgWin *)v2;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005ABCE0) --------------------------------------------------------
void __thiscall UserTradeInvWin::DoAction(UserTradeInvWin *this)
{
  UserTradeInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (005ABD10) --------------------------------------------------------
void __thiscall UserTradeInvWin::DoRAction(UserTradeInvWin *this)
{
  UserTradeInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (005ABD40) --------------------------------------------------------
void __thiscall UserTradeWin::OnCmdLock(UserTradeWin *this)
{
  UserTradeWin *v1; // esi@1
  __int64 v2; // kr00_8@2
  char *v3; // eax@3
  char bBounded; // [sp+7h] [bp-1h]@2

  v1 = this;
  if ( this->m_kCenboardingPacket.bNeedToSend )
  {
    bBounded = 0;
    v2 = UserTradeWin::GetInputMoney(this, (bool *)&bBounded);
    if ( bBounded )
    {
      v3 = TextData::Get(0xD4DAF036u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v3);
    }
    GameFrameWork::NcTradeCenboardingReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v2);
    v1->m_kCenboardingPacket.bNeedToSend = 0;
  }
  GameFrameWork::NcTradeBoardlockReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyLock->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  EditWin::SetEnable(v1->m_pkMyCopperEdit, 0);
  EditWin::SetEnable(v1->m_pkMyGemEdit, 0);
  EditWin::SetEnable(v1->m_pkMyGoldEdit, 0);
  EditWin::SetEnable(v1->m_pkMySilverEdit, 0);
}

//----- (005ABDF0) --------------------------------------------------------
bool __thiscall UserTradeWin::DropOnMyInv(UserTradeWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  UserTradeWin *v3; // ebx@1
  DropContents *v5; // ecx@3
  DropContents::SenderType v6; // eax@3
  char *v7; // edi@4
  void *v8; // esi@9
  int v9; // edi@10
  SHINE_PUT_ON_BELONGED_ITEM v10; // eax@13
  SHINE_PUT_ON_BELONGED_ITEM v11; // eax@16
  SHINE_PUT_ON_BELONGED_ITEM v12; // eax@17
  int v13; // eax@20
  int v14; // eax@21
  GameFrameWork *v15; // esi@24
  char *v16; // eax@24
  unsigned int v17; // [sp-Ch] [bp-10h]@14

  v3 = this;
  if ( UserTrade::GetLockMy() )
    return 0;
  v5 = pkContents;
  v6 = pkContents->m_eSenderType;
  if ( v6 != 21 )
  {
    if ( v6 )
      return 0;
    v8 = pkContents->m_apvParam[0];
    if ( v8 )
    {
      v9 = *((_DWORD *)v8 + 28);
      if ( v9 )
      {
        if ( CItemAuthorityBase::IA_IsDataAccBelonged(&g_kItemAuthority, *(E_BelongType *)(v9 + 274))
          || CItemAuthorityBase::IA_IsDataChrBelonged(&g_kItemAuthority, *(E_BelongType *)(v9 + 274)) )
        {
          if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, *(E_BelongType *)(v9 + 274)) != 1
            || (v11 = Item::GetPutOnBelongState((Item *)v8),
                CItemAuthorityBase::IA_IsWorkAccBelonged(&g_kItemAuthority, *(E_BelongType *)(v9 + 274), v11))
            || (v12 = Item::GetPutOnBelongState((Item *)v8),
                CItemAuthorityBase::IA_IsWorkChrBelonged(&g_kItemAuthority, *(E_BelongType *)(v9 + 274), v12)) )
            goto LABEL_19;
        }
        else
        {
          v10 = Item::GetPutOnBelongState((Item *)v8);
          if ( !CItemAuthorityBase::IA_CanPlayerTrade(&g_kItemAuthority, *(E_BelongType *)(v9 + 274), v10) )
          {
            v17 = -2086507545;
LABEL_24:
            v15 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
            v16 = TextData::Get(v17);
            GameFrameWork::AddSysMsg(v15, v16);
            return 0;
          }
        }
        if ( Item::GetPutOnBelongState((Item *)v8) == 1 )
        {
LABEL_19:
          v17 = -857857511;
          goto LABEL_24;
        }
      }
      v13 = (*(int (__thiscall **)(void *))(*(_DWORD *)v8 + 44))(v8);
      if ( v13 )
      {
        v14 = *(_DWORD *)v13 & 0xFF;
        if ( v14 )
        {
          if ( v14 != 255 )
          {
            v17 = -1634432127;
            goto LABEL_24;
          }
        }
      }
      v5 = pkContents;
    }
    GameFrameWork::NcTradeUpboardReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, LOBYTE(v5->m_uiSenderIndex));
    return 1;
  }
  v7 = TextData2::Get(0xD8EBD9EBu);
  if ( v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v7,
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v7,
        &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    25,
    v7,
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  return 0;
}

//----- (005ABFA0) --------------------------------------------------------
void __thiscall UserTradeWin::UpdateMeWin(UserTradeWin *this, float fCurTime)
{
  UserTradeWin *v2; // esi@1
  PgWinBut *v3; // ecx@10
  __int64 v4; // kr00_8@11
  char *v5; // eax@12
  double v6; // st7@13
  int v7; // [sp-4h] [bp-14h]@2
  int v8; // [sp-4h] [bp-14h]@5
  char bBounded; // [sp+Fh] [bp-1h]@11

  v2 = this;
  v7 = UserTrade::GetLockOpp() != 0;
  ((void (__stdcall *)(int))v2->m_pkOtherLock->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(v7);
  v8 = !UserTrade::GetAgreeOpp();
  ((void (__stdcall *)(int))v2->m_pkOtherOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(v8);
  if ( !v2->m_bBothLocked && UserTrade::GetLockMy() && UserTrade::GetLockOpp() )
  {
    v3 = v2->m_pkMyOk;
    v2->m_bBothLocked = 1;
    ((void (__stdcall *)(signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  }
  bBounded = 0;
  v4 = UserTradeWin::GetInputMoney(v2, (bool *)&bBounded);
  if ( bBounded )
  {
    v5 = TextData::Get(0xD4DAF036u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v5);
  }
  v6 = fCurTime;
  if ( v2->m_kCenboardingPacket.i64PrevMoney != v4 )
  {
    v2->m_kCenboardingPacket.i64PrevMoney = v4;
    v2->m_kCenboardingPacket.bNeedToSend = 1;
    v2->m_kCenboardingPacket.fSendTime = v6 + 0.699999988079071;
  }
  if ( v2->m_kCenboardingPacket.bNeedToSend )
  {
    if ( v2->m_kCenboardingPacket.fSendTime <= v6 )
    {
      GameFrameWork::NcTradeCenboardingReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v4);
      v2->m_kCenboardingPacket.bNeedToSend = 0;
    }
  }
}

//----- (005AC0D0) --------------------------------------------------------
bool __thiscall UserTradeInvWin::EatDropInstance(UserTradeInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  UserTradeInvWin *v4; // esi@1
  void *v5; // edi@4
  PgWin *v6; // eax@6
  bool result; // al@7

  v4 = this;
  if ( !*pkDrop
    || ItemIcon::GetItem(&this->baseclass_0)
    || !v4->m_uiInvType
    || (v5 = (*pkDrop)->m_pkContents, *((_DWORD *)v5 + 4))
    || *((_DWORD *)v5 + 2)
    || (v6 = PgWin::GetParentWin(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0),
        v4->m_uiInvType != 1) )
    result = 0;
  else
    result = UserTradeWin::DropOnMyInv((UserTradeWin *)v6, (DropContents *)v5, v4->m_uiInvIndex);
  return result;
}

//----- (005AC130) --------------------------------------------------------
void __thiscall UserTradeWin::OnCommand(UserTradeWin *this, unsigned int wParam, int lParam)
{
  UserTradeWin *v3; // esi@1

  v3 = this;
  switch ( wParam )
  {
    case 0xFu:
      UserTradeWin::OnCmdLock(this);
      break;
    case 0x10u:
      GameFrameWork::NcTradeDecideReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      ((void (__stdcall *)(_DWORD))v3->m_pkMyOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      break;
    case 0x11u:
    case 0x12u:
      GameFrameWork::NcTradeCancelReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      PgWin::PostMsg(&v3->baseclass_0.baseclass_0.baseclass_0, &v3->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xAu:
      UserTradeWin::OnCmdMyInvLClick(this, lParam);
      break;
    case 0x13u:
      UserTradeWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005AC1E0) --------------------------------------------------------
UserTradeInvWin *__cdecl UserTradeInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  UserTradeInvWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1C8u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v4);
    LOBYTE(v9) = 1;
    *(_DWORD *)v5 = &UserTradeInvWin::_vftable_;
    *((_DWORD *)v5 + 58) = &UserTradeInvWin::_vftable_;
    *((_DWORD *)v5 + 112) = -1;
    *((_DWORD *)v5 + 113) = 1;
    ItemIcon::SetItem((ItemIcon *)v5, 0, 1);
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 616))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (UserTradeInvWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9B101C: using guessed type int (__stdcall *UserTradeInvWin___vftable_)(int uiFlags);
// 9B103C: using guessed type int (__thiscall *UserTradeInvWin___vftable_)(void *p, char);

//----- (005AC350) --------------------------------------------------------
UserTradeWin *__cdecl UserTradeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  UserTradeWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x288u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    UserTradeWin::UserTradeWin((UserTradeWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (UserTradeWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005AC480) --------------------------------------------------------
bool __thiscall UserTradeWin::Create(UserTradeWin *this, PgFrameWork *pkFrameWork)
{
  UserTradeWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@15
  PgWinSpr *v13; // eax@15
  PgSprData *v14; // eax@15
  NiNode *v15; // esi@16
  PgFont *v16; // eax@21
  PgWinText *v17; // eax@21
  NiRefObjectVtbl *v18; // edx@21
  char *v19; // eax@21
  PgSprData *v20; // eax@22
  ItemIcon *v21; // eax@22
  signed int v22; // eax@22
  PgSprData *v23; // eax@24
  ItemIcon *v24; // eax@24
  unsigned int v25; // ecx@24
  unsigned int v26; // eax@24
  PgFont *v27; // eax@26
  PgWinText *v28; // eax@26
  NiNode *v29; // edx@26
  PgFont *v30; // eax@27
  PgWinText *v31; // eax@27
  NiNode *v32; // ecx@27
  PgSprData *v33; // eax@27
  PgSprData *v34; // eax@27
  PgWinSpr *v35; // eax@27
  PgWinSpr *v36; // eax@27
  unsigned int v37; // edx@27
  int v38; // eax@27
  unsigned int v39; // edx@27
  PgFont *v40; // eax@27
  PgWinText *v41; // eax@27
  NiRefObjectVtbl *v42; // edx@27
  PgWinSpr *v43; // eax@27
  unsigned int v44; // edx@27
  int v45; // eax@27
  unsigned int v46; // edx@27
  PgFont *v47; // eax@27
  PgWinText *v48; // eax@27
  NiRefObjectVtbl *v49; // edx@27
  char *v50; // eax@27
  PgWinBut *v51; // eax@27
  unsigned int v52; // ecx@27
  int v53; // eax@27
  unsigned int v54; // edx@27
  PgFont *v55; // eax@27
  PgWinText *v56; // eax@27
  NiRefObjectVtbl *v57; // edx@27
  PgWinBut *v58; // eax@27
  int v59; // eax@27
  unsigned int v60; // edx@27
  PgFont *v61; // eax@27
  PgWinText *v62; // eax@27
  NiRefObjectVtbl *v63; // edx@27
  char *v64; // eax@27
  PgWinBut *v65; // eax@27
  unsigned int v66; // ecx@27
  int v67; // eax@27
  unsigned int v68; // edx@27
  PgFont *v69; // eax@27
  PgWinText *v70; // eax@27
  NiRefObjectVtbl *v71; // edx@27
  char *v72; // eax@27
  D3DXCOLOR v73; // ST48_16@27
  D3DXCOLOR v74; // ST48_16@27
  D3DXCOLOR v75; // ST48_16@27
  D3DXCOLOR v76; // ST48_16@27
  PgWinText *v77; // eax@27
  void *(__thiscall *v78)(NiRefObject *, unsigned int); // edx@27
  NiNode *v79; // esi@28
  const char *v80; // [sp+54h] [bp-84h]@11
  int *v81; // [sp+58h] [bp-80h]@11
  int *v82; // [sp+5Ch] [bp-7Ch]@11
  NiSourceTexture *v83; // [sp+60h] [bp-78h]@11
  unsigned int v84; // [sp+64h] [bp-74h]@1
  UIUtil ui; // [sp+74h] [bp-64h]@27
  unsigned int uiWidth; // [sp+88h] [bp-50h]@15
  unsigned int uiHeight; // [sp+8Ch] [bp-4Ch]@15
  signed int pkTexture8; // [sp+90h] [bp-48h]@13
  NiPointer<NiNode> spNode; // [sp+94h] [bp-44h]@1
  int uiTop; // [sp+98h] [bp-40h]@4
  int uiLeft; // [sp+9Ch] [bp-3Ch]@4
  unsigned int i; // [sp+A0h] [bp-38h]@13
  char acShapeName[33]; // [sp+A4h] [bp-34h]@22
  unsigned int v94; // [sp+C8h] [bp-10h]@1
  int v95; // [sp+D4h] [bp-4h]@1
  int v96; // [sp+D8h] [bp+0h]@1

  v94 = (unsigned int)&v96 ^ __security_cookie;
  v84 = (unsigned int)&v96 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v95 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\UserTrade.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "UserTradeWin", 0) )
  {
LABEL_5:
    v6 = spNode.m_pObject;
    v95 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v83 = v10;
    v82 = &uiTop;
    v81 = &uiLeft;
    v80 = "Theme";
  }
  else
  {
    v83 = 0;
    v82 = &uiTop;
    v81 = &uiLeft;
    v80 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v80, v81, v82, v83);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "ClsOver");
  v2->m_pkCloseBtn = PgWinBut::CreateWin(
                       uiLeft - v8,
                       uiTop - v9,
                       (PgSprData *)i,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0x12u,
                       0,
                       0);
  pkTexture8 = (signed int)MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v84) )
  {
    i = (unsigned int)PgSprData::Create(
                        &spNode.m_pObject->baseclass_0,
                        "HelpLinkNor",
                        &uiLeft,
                        &uiTop,
                        (NiSourceTexture *)pkTexture8);
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)i, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u, 0, 0);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_34;
  v16 = Font::Get(0);
  v17 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          uiWidth,
          uiHeight,
          v16,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  i = (unsigned int)v17;
  v18[122].__vecDelDtor((NiRefObject *)v17, 1u);
  (*(void (__stdcall **)(__int64 *))(*(_DWORD *)i + 468))(&Color::m_kDxWinTitleColor);
  pkTexture8 = *(_DWORD *)i + 472;
  v19 = TextData::Get(0xA7F8ECE9u);
  (*(void (__thiscall **)(unsigned int, char *))pkTexture8)(i, v19);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
  i = 0;
  pkTexture8 = (signed int)v2->m_apkOtherInvWin;
  do
  {
    sprintf(acShapeName, "OtherSlot%03d");
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v21 = (ItemIcon *)UserTradeInvWin::CreateWin(
                        uiLeft - v8 + 1,
                        uiTop - v9 + 1,
                        i,
                        &v2->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)pkTexture8 = v21;
    ItemIcon::SetItem(v21, 0, 1);
    v22 = pkTexture8;
    *(_DWORD *)(*(_DWORD *)pkTexture8 + 452) = 0;
    *(_DWORD *)(*(_DWORD *)v22 + 272) = g_pkItemInfoWin;
    ++i;
    pkTexture8 = v22 + 4;
  }
  while ( (signed int)i < 12 );
  pkTexture8 = 0;
  i = (unsigned int)v2->m_apkMyInvWin;
  do
  {
    sprintf(acShapeName, "MySlot%03d");
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v24 = (ItemIcon *)UserTradeInvWin::CreateWin(
                        uiLeft - v8 + 1,
                        uiTop - v9 + 1,
                        pkTexture8,
                        &v2->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)i = v24;
    ItemIcon::SetItem(v24, 0, 1);
    v25 = i;
    *(_DWORD *)(*(_DWORD *)i + 452) = 1;
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v25 + 516))(10);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)i + 560))(11);
    v26 = i;
    *(_DWORD *)(*(_DWORD *)i + 272) = g_pkItemInfoWin;
    *(_BYTE *)(*(_DWORD *)v26 + 254) = 1;
    ++pkTexture8;
    i = v26 + 4;
  }
  while ( pkTexture8 < 12 );
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "OtherName", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v27 = Font::Get(0);
    v28 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            uiWidth,
            uiHeight,
            v27,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v29 = spNode.m_pObject;
    v2->m_pkOtherNameWin = v28;
    if ( !PgUtil::GetTriShapeRect(&v29->baseclass_0, "MyName", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      goto LABEL_5;
    v30 = Font::Get(0);
    v31 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            uiWidth,
            uiHeight,
            v30,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v32 = spNode.m_pObject;
    v2->m_pkMyNameWin = v31;
    v33 = PgSprData::Create(&v32->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object01", &uiLeft, &uiTop, 0);
    v35 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v35,
      0);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "OtherLockNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "OtherLockLock");
    v36 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)i, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v37 = i;
    v2->m_pkOtherLock = v36;
    v38 = **(_DWORD **)(v37 + 36);
    v39 = *(_DWORD *)(v38 + 20);
    pkTexture8 = *(_DWORD *)(v38 + 24);
    i = v39;
    v40 = Font::Get(0);
    v41 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            i,
            pkTexture8,
            v40,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v42 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v41;
    v42[122].__vecDelDtor((NiRefObject *)v41, 5u);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "OtherOKNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "OtherOKOff");
    v43 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)i, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v44 = i;
    v2->m_pkOtherOk = v43;
    v45 = **(_DWORD **)(v44 + 36);
    v46 = *(_DWORD *)(v45 + 20);
    pkTexture8 = *(_DWORD *)(v45 + 24);
    i = v46;
    v47 = Font::Get(0);
    v48 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            i,
            pkTexture8,
            v47,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v48;
    v49[122].__vecDelDtor((NiRefObject *)v48, 5u);
    pkTexture8 = *(_DWORD *)i + 472;
    v50 = TextData::Get(0x2D37918Eu);
    (*(void (__thiscall **)(unsigned int, char *))pkTexture8)(i, v50);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyLockNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyLockOver");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyLockClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyLockLock");
    v51 = PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)i,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0xFu,
            0,
            0);
    v52 = i;
    v2->m_pkMyLock = v51;
    v53 = **(_DWORD **)(v52 + 36);
    v54 = *(_DWORD *)(v53 + 20);
    pkTexture8 = *(_DWORD *)(v53 + 24);
    i = v54;
    v55 = Font::Get(0);
    v56 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            i,
            pkTexture8,
            v55,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v57 = v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v56;
    v57[122].__vecDelDtor((NiRefObject *)v56, 5u);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyOKNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyOKClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyOKClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyOKOff");
    v58 = PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)i,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x10u,
            0,
            0);
    v2->m_pkMyOk = v58;
    v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v58,
      0);
    v59 = **(_DWORD **)(i + 36);
    v60 = *(_DWORD *)(v59 + 20);
    pkTexture8 = *(_DWORD *)(v59 + 24);
    i = v60;
    v61 = Font::Get(0);
    v62 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            i,
            pkTexture8,
            v61,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v63 = v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v62;
    v63[122].__vecDelDtor((NiRefObject *)v62, 5u);
    pkTexture8 = *(_DWORD *)i + 472;
    v64 = TextData::Get(0x2D37918Eu);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(i, v64);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    i = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyCancelNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyCancelClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyCancelClick");
    PgSprData::Add((PgSprData *)i, &spNode.m_pObject->baseclass_0, "MyCancelOff");
    v65 = PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)i,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x11u,
            0,
            0);
    v66 = i;
    v2->m_pkMyCancel = v65;
    v67 = **(_DWORD **)(v66 + 36);
    v68 = *(_DWORD *)(v67 + 20);
    pkTexture8 = *(_DWORD *)(v67 + 24);
    i = v68;
    v69 = Font::Get(0);
    v70 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            i,
            pkTexture8,
            v69,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v71 = v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (unsigned int)v70;
    v71[122].__vecDelDtor((NiRefObject *)v70, 5u);
    pkTexture8 = *(_DWORD *)i + 472;
    v72 = TextData::Get(0xE2E7EBF6u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(i, v72);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)i + 240))(0);
    UIUtil::UIUtil(&ui);
    LOBYTE(v95) = 1;
    UIUtil::SetOffset(&ui, v8, v9);
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    v2->m_pkMyCopperBtn = UIUtil::CreateBtn(&ui, 0, "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", 0);
    v2->m_pkMySilverBtn = UIUtil::CreateBtn(&ui, 0, "MySilverBtn", "MySilverBtn", "MySilverBtn", "MySilverBtn", 0);
    v2->m_pkMyGoldBtn = UIUtil::CreateBtn(&ui, 0, "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", 0);
    v2->m_pkMyGemBtn = UIUtil::CreateBtn(&ui, 0, "MyGemBtn", "MyGemBtn", "MyGemBtn", "MyGemBtn", 0);
    v2->m_pkMyCopperEdit = UIUtil::CreateEdit(&ui, "MyCopperInput", 3, NUMBER, 0, 1);
    v2->m_pkMySilverEdit = UIUtil::CreateEdit(&ui, "MySilverInput", 3, NUMBER, 0, 1);
    v2->m_pkMyGoldEdit = UIUtil::CreateEdit(&ui, "MyGoldInput", 3, NUMBER, 0, 1);
    v2->m_pkMyGemEdit = UIUtil::CreateEdit(&ui, "MyGemInput", 3, NUMBER, 0, 1);
    v2->m_pkOtherCopperBtn = UIUtil::CreateBtn(
                               &ui,
                               0,
                               "OtherCopperBtn",
                               "OtherCopperBtn",
                               "OtherCopperBtn",
                               "OtherCopperBtn",
                               0);
    v2->m_pkOtherSilverBtn = UIUtil::CreateBtn(
                               &ui,
                               0,
                               "OtherSilverBtn",
                               "OtherSilverBtn",
                               "OtherSilverBtn",
                               "OtherSilverBtn",
                               0);
    v2->m_pkOtherGoldBtn = UIUtil::CreateBtn(&ui, 0, "OtherGoldBtn", "OtherGoldBtn", "OtherGoldBtn", "OtherGoldBtn", 0);
    v2->m_pkOtherGemBtn = UIUtil::CreateBtn(&ui, 0, "OtherGemBtn", "OtherGemBtn", "OtherGemBtn", "OtherGemBtn", 0);
    *(_QWORD *)&v73.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v73.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v2->m_pkOtherCopperText = UIUtil::CreateText(&ui, "OtherCopperInput", "0", 0, COERCE_D3DXCOLOR(v73.r), 5u, 0, 0);
    *(_QWORD *)&v74.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v74.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v2->m_pkOtherSilverText = UIUtil::CreateText(&ui, "OtherSilverInput", "0", 0, COERCE_D3DXCOLOR(v74.r), 5u, 0, 0);
    *(_QWORD *)&v75.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v75.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v2->m_pkOtherGoldText = UIUtil::CreateText(&ui, "OtherGoldInput", "0", 0, COERCE_D3DXCOLOR(v75.r), 5u, 0, 0);
    *(_QWORD *)&v76.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v76.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v77 = UIUtil::CreateText(&ui, "OtherGemInput", "0", 0, COERCE_D3DXCOLOR(v76.r), 5u, 0, 0);
    v78 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
    v2->m_pkOtherGemText = v77;
    ((void (__thiscall *)(UserTradeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v78)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v95) = 0;
    UIUtil::_UIUtil(&ui);
    v95 = -1;
    if ( spNode.m_pObject )
    {
      v79 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v79 )
          v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v79, 1u);
      }
    }
    result = 1;
  }
  else
  {
LABEL_34:
    v15 = spNode.m_pObject;
    v95 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v15 )
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005AD250) --------------------------------------------------------
void *__thiscall UserTradeInvWin::_scalar_deleting_destructor_(UserTradeInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UserTradeInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UserTradeInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B101C: using guessed type int (__stdcall *UserTradeInvWin___vftable_)(int uiFlags);
// 9B103C: using guessed type int (__thiscall *UserTradeInvWin___vftable_)(void *p, char);

//----- (005AD290) --------------------------------------------------------
void *__thiscall UserTradeWin::_vector_deleting_destructor_(UserTradeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&UserTradeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&UserTradeWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9B12AC: using guessed type int (__stdcall *UserTradeWin___vftable_)(int uiFlags);
// 9B12CC: using guessed type int (__thiscall *UserTradeWin___vftable_)(void *p, char);

//----- (005AD2F0) --------------------------------------------------------
void __thiscall VoteWin::OnShowWin(VoteWin *this)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (005AD300) --------------------------------------------------------
void __thiscall VoteWin::OnReason(VoteWin *this)
{
  VoteWin *v1; // esi@1
  VoteReasonWin *v2; // eax@2
  NiRefObjectVtbl *v3; // edi@2
  char v4; // al@2

  v1 = this;
  if ( this->m_pkReasonWin )
  {
    v2 = this->m_pkReasonWin;
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
    v3[64].__vecDelDtor((NiRefObject *)v1->m_pkReasonWin, v4 == 0);
  }
}

//----- (005AD340) --------------------------------------------------------
void __thiscall VoteWin::OnHelpLink(VoteWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "KQVote");
}

//----- (005AD370) --------------------------------------------------------
void __thiscall VoteWin::SetProposerText(VoteWin *this, const char *pcProposer)
{
  VoteWin *v2; // esi@1

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() != 1 )
  {
    if ( v2->m_pkProposerText )
      ((void (__stdcall *)(_DWORD))v2->m_pkProposerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcProposer);
  }
}

//----- (005AD3B0) --------------------------------------------------------
const char *__thiscall VoteWin::GetProposer(VoteWin *this)
{
  const char *result; // eax@2

  if ( this->m_pkProposerText )
    result = (const char *)((int (*)(void))this->m_pkProposerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (005AD3D0) --------------------------------------------------------
void __thiscall VoteWin::SetTargetText(VoteWin *this, const char *pcTarget)
{
  VoteWin *v2; // esi@1

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() != 1 )
  {
    if ( v2->m_pkTargetText )
      ((void (__stdcall *)(_DWORD))v2->m_pkTargetText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcTarget);
  }
}

//----- (005AD410) --------------------------------------------------------
const char *__thiscall VoteWin::GetTarget(VoteWin *this)
{
  const char *result; // eax@2

  if ( this->m_pkTargetText )
    result = (const char *)((int (*)(void))this->m_pkTargetText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (005AD430) --------------------------------------------------------
void __thiscall VoteWin::SetReasonText(VoteWin *this, const char *pcText)
{
  if ( this->m_pkReasonText )
    ((void (__stdcall *)(_DWORD))this->m_pkReasonText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
}

//----- (005AD460) --------------------------------------------------------
const char *__thiscall VoteWin::GetReasonText(VoteWin *this)
{
  const char *result; // eax@2

  if ( this->m_pkReasonText )
    result = (const char *)((int (*)(void))this->m_pkReasonText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (005AD480) --------------------------------------------------------
int __usercall mktime_2<eax>(tm *_Tm<eax>)
{
  return _mktime32(_Tm);
}

//----- (005AD490) --------------------------------------------------------
void __thiscall VoteWin::OnCloseWin(VoteWin *this)
{
  VoteWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_spReasonEditWin.m_pObject;
  v1->m_bTimer = 0;
  v1->m_bChangeReasonType = 0;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005AD4D0) --------------------------------------------------------
void __thiscall VoteWin::OnCancel(VoteWin *this)
{
  VoteWin *v1; // esi@1
  PgFrameWork *v2; // eax@2

  v1 = this;
  if ( !this->m_bSuggestion )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
    {
      v1->m_eVoteType = 2;
      GameFrameWork::NcKqVoteVotingReq((GameFrameWork *)v2, KVT_NO);
    }
  }
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v1,
    0);
  ((void (__stdcall *)(_DWORD))v1->m_spReasonEditWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  ((void (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)(v1);
}

//----- (005AD530) --------------------------------------------------------
void __thiscall VoteWin::SetReasonEditText(VoteWin *this, const char *pcText)
{
  EditWin *v2; // ecx@1

  v2 = this->m_spReasonEditWin.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pcText);
}

//----- (005AD550) --------------------------------------------------------
const char *__thiscall VoteWin::GetReasonEditText(VoteWin *this)
{
  EditWin *v1; // ecx@1
  const char *result; // eax@2

  v1 = this->m_spReasonEditWin.m_pObject;
  if ( v1 )
    result = (const char *)((int (*)(void))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (005AD570) --------------------------------------------------------
void __thiscall VoteWin::OnSelected(VoteWin *this)
{
  VoteWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_spReasonEditWin.m_pObject;
  v1->m_bChangeReasonType = 0;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9B1513);
  ((void (*)(void))v1->m_spReasonEditWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (005AD5A0) --------------------------------------------------------
void __thiscall VoteWin::SetReasonType(VoteWin *this, unsigned int uiType)
{
  this->m_uiReasonType = uiType;
  this->m_bChangeReasonType = 1;
  ((void (__stdcall *)(_DWORD))this->m_spReasonEditWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (005AD5D0) --------------------------------------------------------
void __thiscall VoteWin::VoteWin(VoteWin *this)
{
  VoteWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkProposerText = 0;
  v1->m_pkTargetText = 0;
  v1->m_pkTimerText = 0;
  v1->m_pkReasonText = 0;
  v1->m_pkReasonList = 0;
  v1->m_pkReasonWin = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&VoteWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&VoteWin::_vftable_;
  v1->m_spReasonEditWin.m_pObject = 0;
  v1->m_bTimer = 0;
  v1->m_uiReasonType = 0;
  v1->m_eVoteType = 0;
  v1->m_pkOKText = 0;
  v1->m_pkCancelText = 0;
  v1->m_pkReasonArrowBut = 0;
  v1->m_pkReasonTextBut = 0;
  v1->m_pkReasonBut = 0;
  *(_WORD *)&v1->m_bSuggestion = 1;
}
// 9B15D8: using guessed type int (__stdcall *VoteWin___vftable_)(int uiFlags);
// 9B15F4: using guessed type int (__thiscall *VoteWin___vftable_)(void *p, char);

//----- (005AD660) --------------------------------------------------------
void __thiscall VoteWin::_VoteWin(VoteWin *this)
{
  PgWinFrame *v1; // esi@1
  EditWin *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&VoteWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&VoteWin::_vftable_;
  v2 = this->m_spReasonEditWin.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9B15D8: using guessed type int (__stdcall *VoteWin___vftable_)(int uiFlags);
// 9B15F4: using guessed type int (__thiscall *VoteWin___vftable_)(void *p, char);

//----- (005AD6F0) --------------------------------------------------------
void __thiscall VoteWin::UpdateTimer(VoteWin *this, float fTime)
{
  VoteWin *v2; // ebx@1
  int v3; // esi@2
  int v4; // eax@2
  float v5; // ST14_4@2
  float v6; // ST14_4@2
  NiRefObjectVtbl *v7; // esi@4
  char *v8; // eax@4
  char *v9; // eax@4
  tm NowTime; // [sp+8h] [bp-28h]@2
  unsigned int v11; // [sp+2Ch] [bp-4h]@1
  int v12; // [sp+30h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  if ( this->m_bTimer )
  {
    memcpy(&NowTime, &Timer::ms_dLastServerTime, sizeof(NowTime));
    v3 = _mktime32(&this->m_tEndTime);
    v4 = _mktime32(&NowTime);
    v5 = Timer::ms_fCurTime - Timer::ms_fLastRecordServerTime;
    v6 = (double)(v3 - v4) - v5;
    if ( v6 <= 0.0 )
    {
      ((void (__thiscall *)(VoteWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)(v2);
    }
    else
    {
      if ( v2->m_pkTimerText )
      {
        v7 = v2->m_pkTimerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v8 = TextData2::Get(0x89B7C9DCu);
        v9 = fs(v8);
        v7[118].__vecDelDtor((NiRefObject *)v2->m_pkTimerText, (unsigned int)v9);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97648: using guessed type float Timer__ms_fLastRecordServerTime;

//----- (005AD7F0) --------------------------------------------------------
void __thiscall VoteWin::SetVoteWinType(VoteWin *this, bool bSuggestion)
{
  VoteWin *v2; // esi@1
  KQVoteDesc *v3; // edi@2
  PgWinText *v4; // ecx@3
  NiRefObjectVtbl *v5; // edi@4
  char *v6; // eax@4
  NiRefObjectVtbl *v7; // edi@4
  char *v8; // eax@4
  const int v9; // ST00_4@5
  KQVoteDesc *v10; // eax@5
  NiRefObjectVtbl *v11; // edi@7
  char *v12; // eax@7
  NiRefObjectVtbl *v13; // edi@7
  char *v14; // eax@7
  signed int v15; // [sp+0h] [bp-8h]@4

  v2 = this;
  this->m_bSuggestion = bSuggestion;
  if ( bSuggestion )
  {
    this->m_bChangeReasonType = 1;
    v3 = KQVoteDescTable::GetByID(1);
    if ( v3 )
    {
      v4 = v2->m_pkReasonText;
      v2->m_uiReasonType = 1;
      ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v3->KQVoteTitle);
      ((void (__stdcall *)(_DWORD))v2->m_spReasonEditWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v3->KQVoteDescription);
    }
    v5 = v2->m_pkOKText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = TextData2::Get(0xBAEAE224u);
    v5[118].__vecDelDtor((NiRefObject *)v2->m_pkOKText, (unsigned int)v6);
    v7 = v2->m_pkCancelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = TextData2::Get(0xA6E6DFD7u);
    v7[118].__vecDelDtor((NiRefObject *)v2->m_pkCancelText, (unsigned int)v8);
    ((void (__stdcall *)(_DWORD))v2->m_pkTimerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkTimerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonArrowBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonArrowBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonTextBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonTextBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    v15 = 1;
  }
  else
  {
    v9 = this->m_uiReasonType + 1;
    this->m_bChangeReasonType = 0;
    this->m_bTimer = 1;
    v10 = KQVoteDescTable::GetByID(v9);
    if ( v10 )
      ((void (__stdcall *)(_DWORD))v2->m_pkReasonText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v10->KQVoteTitle);
    v11 = v2->m_pkOKText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v12 = TextData2::Get(0x7999D1F1u);
    v11[118].__vecDelDtor((NiRefObject *)v2->m_pkOKText, (unsigned int)v12);
    v13 = v2->m_pkCancelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v14 = TextData2::Get(0xBFEDD632u);
    v13[118].__vecDelDtor((NiRefObject *)v2->m_pkCancelText, (unsigned int)v14);
    ((void (__stdcall *)(_DWORD))v2->m_pkTimerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkTimerText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonArrowBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonArrowBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonTextBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonTextBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v15 = 0;
  }
  ((void (__cdecl *)(_DWORD))v2->m_pkReasonBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v15);
}

//----- (005ADA30) --------------------------------------------------------
void __thiscall VoteReasonWin::OnReasonSelect(VoteReasonWin *this, VoteReasonWin::eVoteReasonType eType)
{
  VoteReasonWin *v2; // esi@1
  NiNode *v3; // eax@2
  int v4; // eax@2
  NiNode *v5; // ecx@4
  KQVoteDesc *v6; // eax@6
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v7; // ecx@7

  v2 = this;
  if ( PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID) )
  {
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
    BYTE2(v3[1].m_kChildren.m_uiGrowBy) = 1;
    v3[1].m_kEffectList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiDynamicEffect *> *)eType;
    (*((void (__thiscall **)(_DWORD, _DWORD))v3[1].baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->__vecDelDtor
     + 121))(
      v3[1].baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr,
      1);
    v4 = (int)&v2->m_kReasonString[eType];
    if ( v2->m_kReasonString[eType].baseclass_0._Myres >= 0x10 )
      v4 = *(_DWORD *)v4;
    v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
    if ( LODWORD(v5[1].baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) )
      (*(void (__stdcall **)(_DWORD))(*LODWORD(v5[1].baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) + 472))(v4);
    v6 = KQVoteDescTable::GetByID(eType + 1);
    if ( v6 )
    {
      v7 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent[1].baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr;
      if ( v7 )
        (*((void (__stdcall **)(_DWORD))v7->__vecDelDtor + 115))(v6->KQVoteDescription);
    }
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      0);
  }
}

//----- (005ADAF0) --------------------------------------------------------
void __thiscall VoteWin::UpdateMeWin(VoteWin *this, float fTime)
{
  VoteWin *v2; // esi@1
  PgFrameWork *v3; // eax@2

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
      BYTE3(v3[73].m_kMsgQ.m_uiAlloced) = 0;
    ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)(v2);
  }
  VoteWin::UpdateTimer(v2, fTime);
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (005ADB40) --------------------------------------------------------
void __thiscall VoteReasonWin::VoteReasonWin(VoteReasonWin *this)
{
  VoteReasonWin *v1; // esi@1

  v1 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&VoteReasonWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&VoteReasonWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_kReasonString,
    0x1Cu,
    5,
    (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
}
// 9B181C: using guessed type int (__stdcall *VoteReasonWin___vftable_)(int uiFlags);
// 9B183C: using guessed type int (__thiscall *VoteReasonWin___vftable_)(void *p, char);

//----- (005ADBC0) --------------------------------------------------------
void __thiscall VoteReasonWin::_VoteReasonWin(VoteReasonWin *this)
{
  PgWinSpr *v1; // esi@1

  v1 = (PgWinSpr *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&VoteReasonWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&VoteReasonWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_kReasonString,
    0x1Cu,
    5,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  PgWinSpr::_PgWinSpr(v1);
}
// 9B181C: using guessed type int (__stdcall *VoteReasonWin___vftable_)(int uiFlags);
// 9B183C: using guessed type int (__thiscall *VoteReasonWin___vftable_)(void *p, char);

//----- (005ADC40) --------------------------------------------------------
void __thiscall VoteReasonWin::OnCommand(VoteReasonWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    VoteReasonWin::OnReasonSelect(this, (VoteReasonWin::eVoteReasonType)lParam);
}

//----- (005ADC60) --------------------------------------------------------
VoteWin *__cdecl VoteWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  VoteWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1B8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    VoteWin::VoteWin((VoteWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (VoteWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005ADD90) --------------------------------------------------------
VoteReasonWin *__cdecl VoteReasonWin::CreateWin(NiPointer<NiNode> spNode, PgWin *pkParent)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@10
  VoteReasonWin *result; // eax@19
  void *v6; // [sp-18h] [bp-28h]@2
  void *v7; // [sp-14h] [bp-24h]@2
  NiPointer<VoteReasonWin> pkWin; // [sp+0h] [bp-10h]@1
  int v9; // [sp+Ch] [bp-4h]@1

  v9 = 0;
  v2 = operator new(0x1B4u);
  v3 = v2;
  pkWin.m_pObject = (VoteReasonWin *)v2;
  LOBYTE(v9) = 1;
  if ( v2 )
  {
    PgWinSpr::PgWinSpr((PgWinSpr *)v2);
    v7 = std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>;
    v6 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>;
    LOBYTE(v9) = 2;
    *(_DWORD *)v3 = &VoteReasonWin::_vftable_;
    *((_DWORD *)v3 + 58) = &VoteReasonWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v3 + 296,
      0x1Cu,
      5,
      (void (__thiscall *)(void *))v6,
      (void (__thiscall *)(void *))v7);
  }
  else
  {
    v3 = 0;
  }
  pkWin.m_pObject = (VoteReasonWin *)v3;
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  LOBYTE(v9) = 3;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  v7 = pkParent;
  v6 = spNode.m_pObject;
  pkParent = (PgWin *)&v6;
  if ( spNode.m_pObject )
    InterlockedIncrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, void *, void *))(*(_DWORD *)v3 + 516))(v3, v6, v7) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    LOBYTE(v9) = 0;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v9 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spNode.m_pObject )
      spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spNode.m_pObject,
        1u);
    result = (VoteReasonWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, (NiPointer<PgWin> *)&pkParent, (PgWin *)v3);
    if ( pkParent )
    {
      v4 = pkParent;
      if ( !InterlockedDecrement((volatile LONG *)&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    LOBYTE(v9) = 0;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v9 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    result = 0;
  }
  return result;
}
// 9B181C: using guessed type int (__stdcall *VoteReasonWin___vftable_)(int uiFlags);
// 9B183C: using guessed type int (__thiscall *VoteReasonWin___vftable_)(void *p, char);

//----- (005ADF50) --------------------------------------------------------
bool __thiscall VoteWin::Create(VoteWin *this, PgFrameWork *pkFrameWork)
{
  VoteWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  NiSourceTexture *v8; // eax@10
  PgWinSpr *v9; // eax@10
  D3DXCOLOR v10; // ST38_16@10
  char *v11; // eax@10
  PgWinText *v12; // ebx@10
  NiRefObjectVtbl *v13; // edi@10
  PgFont *v14; // eax@10
  NiSourceTexture *v15; // eax@10
  D3DXCOLOR v16; // ST30_16@10
  char *v17; // eax@10
  PgWinText *v18; // ebx@10
  NiRefObjectVtbl *v19; // edi@10
  PgFont *v20; // eax@10
  D3DXCOLOR v21; // ST38_16@10
  PgWinText *v22; // eax@10
  NiRefObjectVtbl *v23; // edi@10
  PgFont *v24; // eax@10
  D3DXCOLOR v25; // ST30_16@10
  char *v26; // eax@10
  PgWinText *v27; // ebx@10
  NiRefObjectVtbl *v28; // edi@10
  PgFont *v29; // eax@10
  D3DXCOLOR v30; // ST38_16@10
  PgWinText *v31; // eax@10
  NiRefObjectVtbl *v32; // edi@10
  PgFont *v33; // eax@10
  KQVoteDesc *v34; // edi@10
  NiNode *v35; // esi@11
  PgWin *v36; // ST40_4@16
  PgWinBut *v37; // ebx@16
  PgFont *v38; // ST3C_4@16
  unsigned int v39; // ST38_4@16
  unsigned int v40; // eax@16
  PgWinText *v41; // eax@16
  EditWin *v42; // eax@18
  PgWinBut *v43; // eax@18
  char *v44; // eax@18
  VoteReasonWin *v45; // eax@20
  VoteReasonWin *v46; // ecx@20
  void *(__thiscall *v47)(NiRefObject *, unsigned int); // eax@20
  D3DXCOLOR v48; // ST3C_16@20
  PgWinText *v49; // eax@20
  PgWinBut *v50; // eax@20
  PgWinBut *v51; // edi@20
  PgWin *v52; // ST44_4@20
  PgFont *v53; // ST40_4@20
  unsigned int v54; // ST3C_4@20
  unsigned int v55; // eax@20
  PgWinText *v56; // eax@20
  PgWinText *v57; // ecx@20
  void *(__thiscall *v58)(NiRefObject *, unsigned int); // eax@20
  NiRefObjectVtbl *v59; // edi@20
  char *v60; // ST48_4@20
  PgWinBut *v61; // eax@20
  PgWinBut *v62; // edi@20
  PgWin *v63; // ST38_4@20
  PgFont *v64; // ST34_4@20
  unsigned int v65; // ST30_4@20
  unsigned int v66; // eax@20
  PgWinText *v67; // eax@20
  NiRefObjectVtbl *v68; // edi@20
  NiPointer<NiNode> v69; // [sp+4Ch] [bp-44h]@18
  PgWin *v70; // [sp+50h] [bp-40h]@18
  UIUtil ui; // [sp+5Ch] [bp-34h]@10
  unsigned int uiWidth; // [sp+70h] [bp-20h]@1
  unsigned int uiHeight; // [sp+74h] [bp-1Ch]@1
  int iLeft; // [sp+78h] [bp-18h]@1
  int iTop; // [sp+7Ch] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+80h] [bp-10h]@1
  int v77; // [sp+8Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v77 = 0;
  uiWidth = 0;
  uiHeight = 0;
  iLeft = 0;
  iTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\KQVote.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "VoteWin", 0) )
  {
    v6 = spNode.m_pObject;
    v77 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v77) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  v9 = UIUtil::CreateSpr(&ui, "Theme", v8);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v11 = TextData2::Get(0x93958BA1u);
  v12 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v11, COERCE_D3DXCOLOR(v10.r), 5u);
  v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = Font::Get(0);
  v13[113].__vecDelDtor((NiRefObject *)v12, (unsigned int)v14);
  UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
  v15 = MenuTexMgr::GetTexture(4u);
  UIUtil::CreateButton(&ui, 4u, "HelpLink", v15, 3);
  *(_QWORD *)&v16.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v16.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v17 = TextData2::Get(0xE5F5C8E0u);
  v18 = UIUtil::CreateText(&ui, "User", v17, 0, COERCE_D3DXCOLOR(v16.r), 5u, 0, 0);
  v19 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = Font::Get(0);
  v19[113].__vecDelDtor((NiRefObject *)v18, (unsigned int)v20);
  *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v22 = UIUtil::CreateTextNoSpr(&ui, "Text01", &byte_9B1502, COERCE_D3DXCOLOR(v21.r), 5u);
  v2->m_pkProposerText = v22;
  v23 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = Font::Get(0);
  v23[113].__vecDelDtor((NiRefObject *)v2->m_pkProposerText, (unsigned int)v24);
  *(_QWORD *)&v25.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v25.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v26 = TextData2::Get(0x94B07FCDu);
  v27 = UIUtil::CreateText(&ui, "TargetName", v26, 0, COERCE_D3DXCOLOR(v25.r), 5u, 0, 0);
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = Font::Get(0);
  v28[113].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
  *(_QWORD *)&v30.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v30.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v31 = UIUtil::CreateTextNoSpr(&ui, "Text02", &byte_9B1503, COERCE_D3DXCOLOR(v30.r), 5u);
  v2->m_pkTargetText = v31;
  v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v33 = Font::Get(0);
  v32[113].__vecDelDtor((NiRefObject *)v2->m_pkTargetText, (unsigned int)v33);
  v2->m_pkReasonArrowBut = UIUtil::CreateButton(&ui, 2u, "Reason01", 0, 3);
  v2->m_pkReasonTextBut = UIUtil::CreateButton(&ui, 2u, "Reason", 0, 3);
  v34 = KQVoteDescTable::GetByID(1);
  if ( v34 )
  {
    v36 = (PgWin *)v2->m_pkReasonTextBut;
    v37 = v2->m_pkReasonTextBut;
    v38 = Font::Get(0);
    v39 = ((int (__thiscall *)(PgWinBut *))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v37);
    v40 = ((int (__thiscall *)(PgWinBut *))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v37);
    v41 = PgWinText::CreateWin(0, 0, v40, v39, v38, v36, 0, 0);
    v2->m_pkReasonText = v41;
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v41,
      5u);
    ((void (__stdcall *)(char *))v2->m_pkReasonText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v34->KQVoteTitle);
    ((void (__stdcall *)(_DWORD))v2->m_pkReasonText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text04", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v42 = EditWin::CreateWin(
              iLeft,
              iTop + 2,
              uiWidth,
              uiHeight,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              MULTILINE,
              0x32u,
              0,
              1,
              0,
              1);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v2->m_spReasonEditWin,
        (NiD3DDefaultShader *)v42);
      EditWin::SetImeStatus(v2->m_spReasonEditWin.m_pObject, IS_KOREAN);
      ((void (__thiscall *)(EditWin *, char *, NiNode *, PgWin *))v2->m_spReasonEditWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(
        v2->m_spReasonEditWin.m_pObject,
        v34->KQVoteDescription,
        v69.m_pObject,
        v70);
      v43 = PgWinBut::CreateWin(iLeft, iTop + 2, uiWidth, uiHeight, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
      v2->m_pkReasonBut = v43;
      v43->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v44 = TextData2::Get(0xDAFAF0C3u);
      PgWin::SetToolTipWinText(&v2->m_pkReasonBut->baseclass_0.baseclass_0, v44);
      v70 = (PgWin *)v2;
      v69.m_pObject = spNode.m_pObject;
      if ( spNode.m_pObject )
        InterlockedIncrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v45 = VoteReasonWin::CreateWin(v69, v70);
      v2->m_pkReasonWin = v45;
      v46 = v45;
      v47 = v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
      v70 = 0;
      ((void (__thiscall *)(VoteReasonWin *))v47)(v46);
      *(_QWORD *)&v48.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v48.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v49 = UIUtil::CreateTextNoSpr(&ui, "Text07", &byte_9B1512, COERCE_D3DXCOLOR(v48.r), 5u);
      v69.m_pObject = (NiNode *)3;
      v2->m_pkTimerText = v49;
      v50 = UIUtil::CreateButton(&ui, 0, "Btn01", 0, (int)v69.m_pObject);
      v69.m_pObject = 0;
      v51 = v50;
      v52 = (PgWin *)v50;
      v53 = Font::Get(0);
      v54 = ((int (__thiscall *)(PgWinBut *))v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v51);
      v55 = ((int (__thiscall *)(PgWinBut *))v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v51);
      v56 = PgWinText::CreateWin(0, 0, v55, v54, v53, v52, 0, (unsigned int)v69.m_pObject);
      v2->m_pkOKText = v56;
      v57 = v56;
      v58 = v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor;
      v69.m_pObject = (NiNode *)5;
      ((void (__thiscall *)(PgWinText *))v58)(v57);
      v59 = v2->m_pkOKText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v60 = TextData2::Get(0xBAEAE224u);
      ((void (__thiscall *)(PgWinText *))v59[118].__vecDelDtor)(v2->m_pkOKText);
      ((void (__cdecl *)(_DWORD, char *, NiNode *, PgWin *))v2->m_pkOKText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
        0,
        v60,
        v69.m_pObject,
        v70);
      v61 = UIUtil::CreateButton(&ui, 1u, "Btn02", 0, 3);
      v62 = v61;
      v63 = (PgWin *)v61;
      v64 = Font::Get(0);
      v65 = ((int (__thiscall *)(PgWinBut *))v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v62);
      v66 = ((int (__thiscall *)(PgWinBut *))v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v62);
      v67 = PgWinText::CreateWin(0, 0, v66, v65, v64, v63, 0, 0);
      v2->m_pkCancelText = v67;
      ((void (__thiscall *)(PgWinText *))v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v67);
      v68 = v2->m_pkCancelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      TextData2::Get(0xA6E6DFD7u);
      ((void (__thiscall *)(PgWinText *))v68[118].__vecDelDtor)(v2->m_pkCancelText);
      ((void (__stdcall *)(_DWORD))v2->m_pkCancelText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__thiscall *)(VoteWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        1.0,
        0.5);
      LOBYTE(v77) = 0;
      UIUtil::_UIUtil(&ui);
      v77 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v77) = 0;
      UIUtil::_UIUtil(&ui);
      v77 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v77) = 0;
    UIUtil::_UIUtil(&ui);
    v35 = spNode.m_pObject;
    v77 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v35 )
      v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005AE6B0) --------------------------------------------------------
void __thiscall VoteWin::OnOK(VoteWin *this)
{
  VoteWin *v1; // esi@1
  void *v2; // eax@1
  char *v3; // eax@3
  char *v4; // edi@3
  char *v5; // edx@3
  char v6; // al@4
  int (*v7)(void); // eax@5
  char *v8; // eax@5
  Name5 v9; // [sp-44h] [bp-5Ch]@5
  int v10; // [sp-40h] [bp-58h]@5
  int v11; // [sp-3Ch] [bp-54h]@5
  int v12; // [sp-38h] [bp-50h]@5
  int v13; // [sp-34h] [bp-4Ch]@5
  unsigned int v14; // [sp-30h] [bp-48h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v15; // [sp-2Ch] [bp-44h]@3
  int v16; // [sp-1Ch] [bp-34h]@3
  signed int v17; // [sp-18h] [bp-30h]@3
  KQ_VOTING_TYPE v18; // [sp-14h] [bp-2Ch]@6
  void *v19; // [sp+0h] [bp-18h]@3
  GameFrameWork *pkGame; // [sp+4h] [bp-14h]@1
  char *v21; // [sp+8h] [bp-10h]@3
  int v22; // [sp+14h] [bp-4h]@5

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  pkGame = (GameFrameWork *)v2;
  if ( v2 )
  {
    if ( v1->m_bSuggestion )
    {
      v3 = (char *)((int (*)(void))v1->m_spReasonEditWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
      v4 = TextFilterTable::FilterSlander(v3);
      v5 = v4;
      v17 = 15;
      v16 = 0;
      v19 = &v15;
      v15.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v21 = v4 + 1;
      do
        v6 = *v5++;
      while ( v6 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v15, v4, v5 - v21);
      v14 = v1->m_uiReasonType;
      v7 = (int (*)(void))v1->m_pkTargetText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor;
      v22 = 0;
      v8 = (char *)v7();
      v19 = &v9;
      v13 = 0;
      v12 = 0;
      v11 = 0;
      v10 = 0;
      *(_DWORD *)&v9.n5_name[0] = 0;
      strncpy(v9.n5_name, v8, 0x14u);
      v22 = -1;
      GameFrameWork::NcKqVoteStartReq(pkGame, v9, v14, v15);
    }
    else
    {
      v18 = 1;
      v1->m_eVoteType = 1;
      GameFrameWork::NcKqVoteVotingReq((GameFrameWork *)v2, v18);
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      0);
    ((void (*)(void))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)();
  }
}

//----- (005AE7E0) --------------------------------------------------------
bool __thiscall VoteReasonWin::Create(VoteReasonWin *this, NiPointer<NiNode> spNode, PgWin *pkParent)
{
  PgWin *v3; // esi@1
  PgSprData *v4; // eax@1
  bool result; // al@6
  signed int v6; // edi@7
  int v7; // eax@8
  unsigned int v8; // ebx@9
  unsigned int v9; // esi@11
  void *v10; // eax@14
  const char *v11; // ecx@15
  int v12; // eax@15
  int v13; // esi@15
  char v14; // dl@16
  unsigned int v15; // edi@18
  int v16; // ebx@19
  char *v17; // eax@19
  PgWin *v18; // esi@19
  PgFont *v19; // ST10_4@19
  unsigned int v20; // ST0C_4@19
  unsigned int v21; // eax@19
  PgWinText *v22; // esi@19
  int v23; // eax@19
  UIUtil ui; // [sp+0h] [bp-2Ch]@7
  int v25; // [sp+14h] [bp-18h]@7
  int iLeft; // [sp+18h] [bp-14h]@1
  int iTop; // [sp+1Ch] [bp-10h]@1
  int v28; // [sp+28h] [bp-4h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *pkParenta; // [sp+38h] [bp+Ch]@7
  int pkParentb; // [sp+38h] [bp+Ch]@18

  v3 = (PgWin *)this;
  v28 = 0;
  iLeft = 0;
  iTop = 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ReasonPulldown", &iLeft, &iTop, 0);
  if ( PgWinSpr::Create((PgWinSpr *)v3, iLeft, iTop, v4, pkParent, 0, 0) )
  {
    UIUtil::UIUtil(&ui);
    LOBYTE(v28) = 1;
    UIUtil::SetParent(&ui, v3);
    UIUtil::SetOffset(&ui, iLeft, iTop);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    v6 = 1;
    v25 = (int)&v3[1].baseclass_0.baseclass_0.baseclass_0.m_pcName;
    pkParenta = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v3[1].baseclass_0.baseclass_0.baseclass_0.m_pcName;
    do
    {
      v7 = *(_DWORD *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 56);
      if ( v7 )
        v8 = *(_DWORD *)(v7 + 40);
      else
        v8 = 0;
      v9 = 0;
      if ( v8 )
      {
        while ( *(_BYTE *)CDataReader::GetRecord(
                            (CDataReader *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 4),
                            v9) != v6 )
        {
          ++v9;
          if ( v9 >= v8 )
            goto LABEL_14;
        }
        v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 4), v9);
      }
      else
      {
LABEL_14:
        v10 = 0;
      }
      v11 = (char *)v10 + 1;
      v12 = (int)((char *)v10 + 1);
      v13 = v12 + 1;
      do
        v14 = *(_BYTE *)v12++;
      while ( v14 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(pkParenta, v11, v12 - v13);
      ++v6;
      ++pkParenta;
    }
    while ( v6 < 5 );
    v15 = 0;
    pkParentb = v25;
    do
    {
      v16 = v15 + 1;
      v17 = fs("Text_ReasonList%02d");
      v18 = (PgWin *)UIUtil::CreateButton(&ui, 0, v17, 0, 3);
      v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor((NiRefObject *)v18, v15);
      v19 = Font::Get(0);
      v20 = ((int (__thiscall *)(PgWin *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v18);
      v21 = ((int (__thiscall *)(PgWin *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v18);
      v22 = PgWinText::CreateWin(0, 0, v21, v20, v19, v18, 0, 0);
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v22,
        5u);
      v23 = pkParentb;
      if ( *(_DWORD *)(pkParentb + 20) >= 0x10u )
        v23 = *(_DWORD *)pkParentb;
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
        (NiRefObject *)v22,
        v23);
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v22,
        0);
      pkParentb += 28;
      ++v15;
    }
    while ( (unsigned int)v16 < 4 );
    LOBYTE(v28) = 0;
    UIUtil::_UIUtil(&ui);
    v28 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spNode.m_pObject )
      spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spNode.m_pObject,
        1u);
    result = 1;
  }
  else
  {
    v28 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    result = 0;
  }
  return result;
}
// A97EF8: using guessed type int ITableBase_KQVoteDesc_KQVoteDescTable___ms_pkTable;

//----- (005AEA50) --------------------------------------------------------
void __thiscall VoteWin::OnCommand(VoteWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@7

  switch ( wParam )
  {
    case 0u:
      VoteWin::OnOK(this);
      break;
    case 1u:
      VoteWin::OnCancel(this);
      break;
    case 2u:
      VoteWin::OnReason(this);
      break;
    case 3u:
      if ( this->m_bChangeReasonType == 1 )
        VoteWin::OnSelected(this);
      break;
    case 4u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "KQVote");
      break;
    default:
      return;
  }
}

//----- (005AEAD0) --------------------------------------------------------
KQVoteDesc *__cdecl KQVoteDescTable::GetByID(const int iID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  KQVoteDesc *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( *(_BYTE *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 4),
                        v3) != iID )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (KQVoteDesc *)CDataReader::GetRecord(
                             (CDataReader *)(ITableBase<KQVoteDesc_KQVoteDescTable>::ms_pkTable + 4),
                             v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97EF8: using guessed type int ITableBase_KQVoteDesc_KQVoteDescTable___ms_pkTable;

//----- (005AEB30) --------------------------------------------------------
void *__thiscall VoteWin::_scalar_deleting_destructor_(VoteWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  EditWin *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&VoteWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&VoteWin::_vftable_;
  v3 = this->m_spReasonEditWin.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B15D8: using guessed type int (__stdcall *VoteWin___vftable_)(int uiFlags);
// 9B15F4: using guessed type int (__thiscall *VoteWin___vftable_)(void *p, char);

//----- (005AEBD0) --------------------------------------------------------
void *__thiscall VoteReasonWin::_vector_deleting_destructor_(VoteReasonWin *this, unsigned int a2)
{
  PgWinSpr *v2; // esi@1

  v2 = (PgWinSpr *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&VoteReasonWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&VoteReasonWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_kReasonString,
    0x1Cu,
    5,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  PgWinSpr::_PgWinSpr(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B181C: using guessed type int (__stdcall *VoteReasonWin___vftable_)(int uiFlags);
// 9B183C: using guessed type int (__thiscall *VoteReasonWin___vftable_)(void *p, char);

//----- (005AEC60) --------------------------------------------------------
void __thiscall LogoutAfterMinutesWin::SetStartTime(LogoutAfterMinutesWin *this, float fStart)
{
  this->m_fStartTime = fStart;
}

//----- (005AEC70) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::ProcessMeInput(WaitingForLogoutWin *this, bool *bHit)
{
  PgWin::ProcessMeInput(&this->baseclass_0, bHit);
}

//----- (005AEC80) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::WaitingForLogoutWin(WaitingForLogoutWin *this)
{
  WaitingForLogoutWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->m_eLogoutType = 0;
  v1->m_bIsShow = 0;
  v1->m_pkKeyMap = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WaitingForLogoutWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WaitingForLogoutWin::_vftable_;
}
// 9B1AB0: using guessed type int (__stdcall *WaitingForLogoutWin___vftable_)(int uiFlags);
// 9B1ACC: using guessed type int (__thiscall *WaitingForLogoutWin___vftable_)(void *p, char);

//----- (005AECB0) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::_WaitingForLogoutWin(WaitingForLogoutWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WaitingForLogoutWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WaitingForLogoutWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9B1AB0: using guessed type int (__stdcall *WaitingForLogoutWin___vftable_)(int uiFlags);
// 9B1ACC: using guessed type int (__thiscall *WaitingForLogoutWin___vftable_)(void *p, char);

//----- (005AECD0) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::OnClose(WaitingForLogoutWin *this)
{
  this->m_bIsShow = 0;
}

//----- (005AECE0) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::SetLogoutType(WaitingForLogoutWin *this, WaitingForLogoutWin::LogoutType eType)
{
  this->m_eLogoutType = eType;
}

//----- (005AECF0) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::SetKeyMap(WaitingForLogoutWin *this, KeyMap *pkMap)
{
  this->m_pkKeyMap = pkMap;
}

//----- (005AED10) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::OnShowWin(WaitingForLogoutWin *this)
{
  WaitingForLogoutWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkLogoutAfterWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  v1->m_pkLogoutAfterWin->m_fStartTime = Timer::ms_fCurTime;
  v1->m_bIsShow = 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005AED70) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::OnCloseBut(WaitingForLogoutWin *this)
{
  PgWin *v1; // esi@1
  PgFrameWork *v2; // eax@1

  v1 = (PgWin *)this;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x72u, 0, 0);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    StatusWin::SetStoneAlarmEnable((StatusWin *)v2[15].m_kMsgQ.m_pBase, 1);
}

//----- (005AEDC0) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::OnTimeOver(WaitingForLogoutWin *this)
{
  WaitingForLogoutWin *v1; // edi@1
  WaitingForLogoutWin::LogoutType v2; // eax@1
  PgFrameWork *v3; // eax@2
  char *v4; // esi@8
  PgFrameWork *v5; // edx@11
  MiniMapWin *v6; // esi@11

  v1 = this;
  QuestPigeonEffect::ms_bGameStart = 0;
  GameFrameWork::ms_bGameFrameStart = 0;
  v2 = this->m_eLogoutType;
  if ( v2 )
  {
    if ( v2 == 2 )
    {
      Skill::ClearLearnSkill();
      Skill::ClearLearnPassiveSkill();
      AbStateInfectee::ClearAbState(&g_pkMainChar->baseclass_0, 0);
      NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
      PgFrameMgr::PostQuitMsg(&Pgg_kFrameMgr, 0);
    }
    else
    {
      if ( v2 == 1 )
      {
        v4 = (char *)&this->baseclass_0.baseclass_e8;
        if ( this->baseclass_0.baseclass_e8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            54,
            0,
            &this->baseclass_0.baseclass_e8);
          if ( v1->baseclass_0.baseclass_e8.m_pkMsgHooker )
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              54,
              0,
              &v1->baseclass_0.baseclass_e8);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(
          &v1->baseclass_0.baseclass_e8,
          54,
          0,
          &v1->baseclass_0.baseclass_e8);
        LOBYTE(g_pkMainChar[1].m_uiSkillActStep) = 0;
        DecalMgr::RemoveAllDecal(&stru_B31F08);
        v5 = v1->m_pkFrameWork;
        v6 = *(MiniMapWin **)&v5[15].m_bInit;
        if ( v6 )
        {
          MiniMapWin::RemoveAllMapMark(*(MiniMapWin **)&v5[15].m_bInit);
          MiniMapWin::RemoveAllKQTeamMark(v6);
        }
      }
    }
  }
  else
  {
    Skill::ClearLearnSkill();
    Skill::ClearLearnPassiveSkill();
    LOBYTE(g_pkMainChar[1].m_uiSkillActStep) = 0;
    AbStateInfectee::ClearAbState(&g_pkMainChar->baseclass_0, 0);
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, AccountFrameWorkID);
    if ( v3 )
    {
      v3[2].m_BackFrameID = 0;
      *(_DWORD *)&v3[2].m_bInit = 0;
      v3[3].baseclass_0.vfptr = 0;
      v3[3].baseclass_0.m_pkMsgHooker = 0;
      v3[3].baseclass_0.m_uiMessageNum = 0;
      v3[3].m_kMsgQ.m_pBase = 0;
      v3[3].m_kMsgQ.m_uiAlloced = 0;
      v3[3].m_kMsgQ.m_uiHead = 0;
    }
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 3u, 0x33u, 0, 0);
  }
}
// A987C7: using guessed type bool GameFrameWork__ms_bGameFrameStart;
// A9A760: using guessed type bool QuestPigeonEffect__ms_bGameStart;

//----- (005AEF00) --------------------------------------------------------
void __thiscall WaitingForLogoutWin::Cancel(WaitingForLogoutWin *this)
{
  PgWin *v1; // esi@1
  PgFrameWork *v2; // eax@2

  v1 = (PgWin *)this;
  QuestPigeonEffect::ms_bGameStart = 1;
  if ( this->m_bIsShow )
  {
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x72u, 0, 0);
    PgWin::PostMsg(v1, v1, 1u, 0, 0);
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
      StatusWin::SetStoneAlarmEnable((StatusWin *)v2[15].m_kMsgQ.m_pBase, 1);
  }
}
// A9A760: using guessed type bool QuestPigeonEffect__ms_bGameStart;

//----- (005AEF60) --------------------------------------------------------
void __thiscall LogoutAfterMinutesWin::LogoutAfterMinutesWin(LogoutAfterMinutesWin *this)
{
  LogoutAfterMinutesWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LogoutAfterMinutesWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&LogoutAfterMinutesWin::_vftable_;
  v1->m_spTextWin.m_pObject = 0;
}
// 9B1C98: using guessed type int (__stdcall *LogoutAfterMinutesWin___vftable_)(int uiFlags);
// 9B1CB4: using guessed type int (__thiscall *LogoutAfterMinutesWin___vftable_)(void *p, char);

//----- (005AEF90) --------------------------------------------------------
void __thiscall LogoutAfterMinutesWin::_LogoutAfterMinutesWin(LogoutAfterMinutesWin *this)
{
  PgWinFrame *v1; // esi@1
  PgWinText *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LogoutAfterMinutesWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&LogoutAfterMinutesWin::_vftable_;
  v2 = this->m_spTextWin.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9B1C98: using guessed type int (__stdcall *LogoutAfterMinutesWin___vftable_)(int uiFlags);
// 9B1CB4: using guessed type int (__thiscall *LogoutAfterMinutesWin___vftable_)(void *p, char);

//----- (005AF020) --------------------------------------------------------
bool __thiscall LogoutAfterMinutesWin::Create(LogoutAfterMinutesWin *this, PgFrameWork *pkFrameWork)
{
  LogoutAfterMinutesWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  PgWinSpr *v10; // eax@13
  PgSprData *v11; // edi@15
  PgWin *v12; // ST14_4@15
  PgWin *v13; // edi@15
  PgFont *v14; // ST10_4@15
  unsigned int v15; // ST0C_4@15
  unsigned int v16; // eax@15
  PgWinText *v17; // edi@15
  NiRefObjectVtbl *v18; // ebx@15
  char *v19; // eax@15
  unsigned int v20; // edi@15
  PgFont *v21; // ST10_4@15
  unsigned int v22; // eax@15
  PgWinText *v23; // eax@15
  PgWinText *v24; // edi@15
  PgWinText *v25; // ebx@15
  NiNode *v26; // eax@22
  NiNode *v27; // esi@23
  const char *v28; // [sp-20h] [bp-38h]@11
  int *v29; // [sp-1Ch] [bp-34h]@11
  int *v30; // [sp-18h] [bp-30h]@11
  NiSourceTexture *v31; // [sp-14h] [bp-2Ch]@11
  int uiLeft; // [sp+0h] [bp-18h]@4
  int uiTop; // [sp+4h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+8h] [bp-10h]@1
  int v35; // [sp+14h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v35 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "LogoutAfterMinutesWin", 0) )
  {
    v6 = spNode.m_pObject;
    v35 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v31 = v8;
    v30 = &uiTop;
    v29 = &uiLeft;
    v28 = "Theme";
  }
  else
  {
    v31 = 0;
    v30 = &uiTop;
    v29 = &uiLeft;
    v28 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v28, v29, v30, v31);
  v10 = PgWinSpr::CreateWin(uiLeft, uiTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor01", &uiLeft, &uiTop, 0);
  PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "BtnClick01");
  PgSprData::Add(v11, &spNode.m_pObject->baseclass_0, "BtnOver01");
  v12 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkCancelBut = (PgWinBut *)v12;
  v13 = v12;
  v14 = Font::Get(0);
  v15 = ((int (__thiscall *)(PgWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v13);
  v16 = ((int (__thiscall *)(PgWin *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v13);
  v17 = PgWinText::CreateWin(0, 2, v16, v15, v14, v12, 0, 0);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v19 = TextData::Get(0x88A297E1u);
  v18[118].__vecDelDtor((NiRefObject *)v17, (unsigned int)v19);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v20 = Font::Get(0)->m_uiDefHeight;
  v21 = Font::Get(0);
  v22 = ((int (__thiscall *)(LogoutAfterMinutesWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v23 = PgWinText::CreateWin(0, 20, v22, v20, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v24 = v2->m_spTextWin.m_pObject;
  v25 = v23;
  if ( v24 != v23 )
  {
    if ( v24
      && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v24 )
      v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v24,
        1u);
    v2->m_spTextWin.m_pObject = v25;
    if ( v25 )
      InterlockedIncrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__stdcall *)(signed int))v2->m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  ((void (__stdcall *)(_DWORD))v2->m_spTextWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v26 = spNode.m_pObject;
  v2->m_bTimeIsOver = 0;
  v35 = -1;
  if ( v26 )
  {
    v27 = v26;
    if ( !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v27 )
        v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005AF300) --------------------------------------------------------
void __thiscall LogoutAfterMinutesWin::OnCancelBut(LogoutAfterMinutesWin *this)
{
  NiNode *v1; // esi@1
  PgFrameWork *v2; // eax@1

  v1 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x72u, 0, 0);
  PgWin::PostMsg((PgWin *)v1, (PgWin *)v1, 1u, 0, 0);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    StatusWin::SetStoneAlarmEnable((StatusWin *)v2[15].m_kMsgQ.m_pBase, 1);
}

//----- (005AF350) --------------------------------------------------------
void __thiscall LogoutAfterMinutesWin::UpdateMeWin(LogoutAfterMinutesWin *this, float fCurTime)
{
  LogoutAfterMinutesWin *v2; // edi@1
  PgWinText *v3; // ebx@4
  NiRefObjectVtbl *v4; // edi@4
  char *v5; // eax@4
  char *v6; // eax@4

  v2 = this;
  if ( (signed int)(this->m_fStartTime - fCurTime) + 10 <= 0 && !this->m_bTimeIsOver )
  {
    WaitingForLogoutWin::OnTimeOver((WaitingForLogoutWin *)this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent);
    v2->m_bTimeIsOver = 1;
  }
  v3 = v2->m_spTextWin.m_pObject;
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = TextData::Get(0x3F543D74u);
  v6 = fs(v5);
  v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v6);
}

//----- (005AF3C0) --------------------------------------------------------
void __thiscall LogoutAfterMinutesWin::OnCommand(LogoutAfterMinutesWin *this, unsigned int wParam, int lParam)
{
  NiNode *v3; // esi@2
  PgFrameWork *v4; // eax@2

  if ( !wParam )
  {
    v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkParent;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x72u, 0, 0);
    PgWin::PostMsg((PgWin *)v3, (PgWin *)v3, 1u, 0, 0);
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
      StatusWin::SetStoneAlarmEnable((StatusWin *)v4[15].m_kMsgQ.m_pBase, 1);
  }
}

//----- (005AF420) --------------------------------------------------------
LogoutAfterMinutesWin *__cdecl LogoutAfterMinutesWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  LogoutAfterMinutesWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &LogoutAfterMinutesWin::_vftable_;
    *((_DWORD *)v2 + 58) = &LogoutAfterMinutesWin::_vftable_;
    *((_DWORD *)v2 + 89) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (LogoutAfterMinutesWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B1C98: using guessed type int (__stdcall *LogoutAfterMinutesWin___vftable_)(int uiFlags);
// 9B1CB4: using guessed type int (__thiscall *LogoutAfterMinutesWin___vftable_)(void *p, char);

//----- (005AF560) --------------------------------------------------------
WaitingForLogoutWin *__cdecl WaitingForLogoutWin::CreateWin(unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  WaitingForLogoutWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x134u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    PgWin::PgWin((PgWin *)v3);
    *(_DWORD *)v4 = &WaitingForLogoutWin::_vftable_;
    *((_DWORD *)v4 + 58) = &WaitingForLogoutWin::_vftable_;
    *((_DWORD *)v4 + 74) = 0;
    *((_BYTE *)v4 + 300) = 0;
    *((_DWORD *)v4 + 76) = 0;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, unsigned int, unsigned int, PgFrameWork *))(*(_DWORD *)v4 + 452))(
                          v4,
                          dwScrWidth,
                          dwScrHeight,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (WaitingForLogoutWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9B1AB0: using guessed type int (__stdcall *WaitingForLogoutWin___vftable_)(int uiFlags);
// 9B1ACC: using guessed type int (__thiscall *WaitingForLogoutWin___vftable_)(void *p, char);

//----- (005AF6C0) --------------------------------------------------------
bool __thiscall WaitingForLogoutWin::Create(WaitingForLogoutWin *this, unsigned int dwScrWidth, unsigned int dwScrHeight, PgFrameWork *pkFrameWork)
{
  WaitingForLogoutWin *v4; // edi@1
  int v5; // esi@1
  bool result; // al@1
  void *v7; // ebx@2
  void *v8; // eax@3
  int v9; // eax@4
  float v10; // ST20_4@9
  float v11; // ST1C_4@9
  void *v12; // eax@9
  void *v13; // ebx@9
  void *v14; // eax@12
  void *v15; // ebx@12
  void *(__thiscall *v16)(NiRefObject *, unsigned int); // eax@15
  void *v17; // eax@15
  void *v18; // ebx@15
  void *v19; // eax@16
  LogoutAfterMinutesWin *v20; // eax@18
  void (__thiscall *v21)(IDirectMessenger *, IDirectMessenger *); // eax@18
  NiColorA kCommonValue; // [sp+20h] [bp-28h]@9
  void *v23; // [sp+30h] [bp-18h]@3
  void *v24; // [sp+34h] [bp-14h]@2
  NiPointer<NiScreenElements> m_spDecoPlane; // [sp+38h] [bp-10h]@2
  int v26; // [sp+44h] [bp-4h]@2

  v4 = this;
  v5 = 0;
  result = PgWin::Create(&this->baseclass_0, 0, 0, dwScrWidth, dwScrHeight, 0, 0, 0);
  if ( result )
  {
    m_spDecoPlane.m_pObject = 0;
    v26 = 0;
    v7 = operator new(0xC4u);
    v24 = v7;
    LOBYTE(v26) = 1;
    if ( v7 )
    {
      v8 = operator new(0x70u);
      v23 = v8;
      LOBYTE(v26) = 2;
      if ( v8 )
      {
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v8, 0, 1, 0, 1, 1, 4, 1, 2, 1);
        LOBYTE(v26) = 1;
        NiScreenElements::NiScreenElements((NiScreenElements *)v7, (NiScreenElementsData *)v9);
      }
      else
      {
        LOBYTE(v26) = 1;
        NiScreenElements::NiScreenElements((NiScreenElements *)v7, 0);
      }
    }
    else
    {
      v9 = 0;
    }
    LOBYTE(v26) = 0;
    if ( v9 )
    {
      v5 = v9;
      m_spDecoPlane.m_pObject = (NiScreenElements *)v9;
      InterlockedIncrement((volatile LONG *)(v9 + 4));
    }
    NiScreenElementsData::Insert(*(NiScreenElementsData **)(v5 + 184), 4u, 0, 0);
    v10 = (double)dwScrHeight;
    v11 = (double)dwScrWidth;
    NiScreenElementsData::SetRectangle(*(NiScreenElementsData **)(v5 + 184), 0, 0.0, 0.0, v11, v10);
    kCommonValue.r = 0.0;
    kCommonValue.g = 0.0;
    kCommonValue.b = 0.0;
    kCommonValue.a = 0.5;
    NiScreenElementsData::SetColors(*(NiScreenElementsData **)(v5 + 184), 0, &kCommonValue);
    v12 = operator new(0x28u);
    v13 = v12;
    LOBYTE(v26) = 3;
    if ( v12 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v12);
      *(_DWORD *)v13 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v13 + 14) = 0;
      *((_DWORD *)v13 + 8) = 0;
      *((_DWORD *)v13 + 9) = 1;
    }
    else
    {
      v13 = 0;
    }
    LOBYTE(v26) = 0;
    *((_DWORD *)v13 + 8) = 1;
    *((_DWORD *)v13 + 9) = 0;
    NiAVObject::AttachProperty((NiAVObject *)v5, (NiProperty *)v13);
    NiScreenElementsData::UpdateBound(*(NiScreenElementsData **)(v5 + 184));
    NiAVObject::UpdateProperties((NiAVObject *)v5);
    NiAVObject::Update((NiAVObject *)v5, 0.0, 1);
    v14 = operator new(0x28u);
    v15 = v14;
    LOBYTE(v26) = 4;
    if ( v14 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v14);
      *(_DWORD *)v15 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v15 + 14) = 0;
      *((_DWORD *)v15 + 8) = 0;
      *((_DWORD *)v15 + 9) = 1;
    }
    else
    {
      v15 = 0;
    }
    *((_DWORD *)v15 + 8) = 1;
    *((_DWORD *)v15 + 9) = 0;
    v16 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
    LOBYTE(v26) = 0;
    ((void (__thiscall *)(WaitingForLogoutWin *, int, _DWORD))v16)(v4, v5, 0);
    v17 = operator new(0x20u);
    v18 = v17;
    LOBYTE(v26) = 5;
    if ( v17 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v17);
      *(_DWORD *)v18 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v18 + 14) = 236;
      *((_BYTE *)v18 + 30) = 0;
      v19 = v18;
    }
    else
    {
      v19 = 0;
    }
    *((_WORD *)v19 + 14) |= 1u;
    LOBYTE(v26) = 0;
    NiAVObject::AttachProperty((NiAVObject *)v5, (NiProperty *)v19);
    NiAVObject::UpdateProperties(&v4->baseclass_0.baseclass_0.baseclass_0);
    v20 = LogoutAfterMinutesWin::CreateWin(pkFrameWork);
    v4->m_pkLogoutAfterWin = v20;
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    PgWin::AttachChildWin(&v4->baseclass_0, &v4->m_pkLogoutAfterWin->baseclass_0.baseclass_0.baseclass_0);
    ((void (__stdcall *)(signed int))v4->m_pkLogoutAfterWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v21 = v4->baseclass_0.baseclass_e8.vfptr->SetMsgHooker;
    v4->m_pkFrameWork = pkFrameWork;
    v21(&v4->baseclass_0.baseclass_e8, &pkFrameWork->baseclass_0);
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v4,
      1u);
    v26 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    result = 1;
  }
  return result;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (005AF9D0) --------------------------------------------------------
void *__thiscall WaitingForLogoutWin::_scalar_deleting_destructor_(WaitingForLogoutWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WaitingForLogoutWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WaitingForLogoutWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B1AB0: using guessed type int (__stdcall *WaitingForLogoutWin___vftable_)(int uiFlags);
// 9B1ACC: using guessed type int (__thiscall *WaitingForLogoutWin___vftable_)(void *p, char);

//----- (005AFA10) --------------------------------------------------------
void *__thiscall LogoutAfterMinutesWin::_scalar_deleting_destructor_(LogoutAfterMinutesWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  PgWinText *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LogoutAfterMinutesWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&LogoutAfterMinutesWin::_vftable_;
  v3 = this->m_spTextWin.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B1C98: using guessed type int (__stdcall *LogoutAfterMinutesWin___vftable_)(int uiFlags);
// 9B1CB4: using guessed type int (__thiscall *LogoutAfterMinutesWin___vftable_)(void *p, char);

//----- (005AFAB0) --------------------------------------------------------
void __thiscall WeaponTitleWin::WeaponTitleWin(WeaponTitleWin *this)
{
  WeaponTitleWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeaponTitleWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeaponTitleWin::_vftable_;
}
// 9B2200: using guessed type int (__stdcall *WeaponTitleWin___vftable_)(int uiFlags);
// 9B221C: using guessed type int (__thiscall *WeaponTitleWin___vftable_)(void *p, char);

//----- (005AFAD0) --------------------------------------------------------
void __thiscall WeaponTitleWin::_WeaponTitleWin(WeaponTitleWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeaponTitleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeaponTitleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B2200: using guessed type int (__stdcall *WeaponTitleWin___vftable_)(int uiFlags);
// 9B221C: using guessed type int (__thiscall *WeaponTitleWin___vftable_)(void *p, char);

//----- (005AFAF0) --------------------------------------------------------
void __thiscall WeaponTitleWin::OnQuit(WeaponTitleWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (005AFB00) --------------------------------------------------------
void __thiscall WeaponTitleWin::ResetContents(WeaponTitleWin *this)
{
  WeaponTitleWin *v1; // esi@1
  int v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  IconSlotWin::Clear(this->m_pkWeaponIconWin);
  v2 = (int)&v1->m_akWeaponTitleFrame[0].pkBtn;
  v3 = 3;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 4) + 472))(&unk_9B1F0E);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 240))(1);
    IconSlotWin::Clear(*(IconSlotWin **)(v2 - 8));
    v2 += 12;
    --v3;
  }
  while ( v3 );
}

//----- (005AFB60) --------------------------------------------------------
void __thiscall WeaponTitleWin::SignTitleFailed(WeaponTitleWin *this, ITEM_INVEN *rkLicenseInven)
{
  signed int v2; // edi@1
  char *v3; // esi@1
  int v4; // ecx@2
  __int16 v5; // ax@2
  signed int v6; // eax@3

  v2 = 0;
  v3 = (char *)this->m_akWeaponTitleFrame;
  do
  {
    v4 = *(_DWORD *)v3;
    v5 = rkLicenseInven->Inven >> 10;
    if ( v5 == 9 )
    {
      v6 = 0;
    }
    else
    {
      if ( v5 != 8 )
        return;
      v6 = 1;
    }
    if ( *(_DWORD *)(v4 + 308) == v6 )
    {
      if ( *(_DWORD *)(v4 + 304) == (rkLicenseInven->Inven & 0x3FF) )
        IconSlotWin::Clear((IconSlotWin *)v4);
    }
    ++v2;
    v3 += 12;
  }
  while ( v2 < 3 );
}

//----- (005AFBC0) --------------------------------------------------------
void __thiscall WeaponTitleDeleteWin::SetClearItemInven(WeaponTitleDeleteWin *this, ITEM_INVEN *rkInven)
{
  this->m_kClearInven.Inven = rkInven->Inven;
}

//----- (005AFBE0) --------------------------------------------------------
void __thiscall WeaponTitleWin::OnCommand(WeaponTitleWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam <= 3 )
    {
      ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)(wParam - 1);
    }
    else
    {
      if ( wParam == 5 )
        PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    }
  }
}

//----- (005AFC30) --------------------------------------------------------
void __thiscall WeaponTitleWin::OnClose(WeaponTitleWin *this)
{
  WeaponTitleWin *v1; // esi@1
  int v2; // esi@1
  bool v3; // zf@1
  DirectUserMsgBody_SendPacket kPacket; // [sp+4h] [bp-Ch]@1

  v1 = this;
  WeaponTitleWin::ResetContents(this);
  v2 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  v3 = *(_DWORD *)(v2 + 4) == 0;
  *(_DWORD *)&kPacket.wDepartment = 720904;
  kPacket.pvPacket = 0;
  if ( !v3 )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v2 + 4) + 4))(
      23,
      &kPacket,
      v2);
    if ( *(_DWORD *)(v2 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v2 + 4) + 20))(
        23,
        &kPacket,
        v2);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_SendPacket *, int))(*(_DWORD *)v2 + 20))(
    v2,
    23,
    &kPacket,
    v2);
}

//----- (005AFCA0) --------------------------------------------------------
void __thiscall WeaponTitleWin::SignTitleSuccess(WeaponTitleWin *this, ITEM_INVEN *rkLicenseInven, Item *pkWeapon)
{
  if ( !this->m_pkWeaponIconWin->m_eType )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
      &pkWeapon->m_kStruct.itemattr,
      pkWeapon->m_kStruct.itemid);
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, WEAPONTITLE);
  }
}

//----- (005AFCE0) --------------------------------------------------------
bool __thiscall WeaponTitleWin::Create(WeaponTitleWin *this, PgFrameWork *pkFrameWork)
{
  WeaponTitleWin *v2; // ebx@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  D3DXCOLOR v10; // ST1C_16@13
  char *v11; // eax@13
  D3DXCOLOR v12; // ST20_16@13
  char *v13; // eax@13
  PgWin *v14; // esi@13
  D3DXCOLOR v15; // ST28_16@13
  char *v16; // eax@13
  D3DXCOLOR v17; // ST20_16@13
  char *v18; // eax@13
  PgSprData *v19; // eax@13
  PgWin *v20; // eax@13
  char *v21; // eax@13
  unsigned int v22; // esi@13
  int v23; // edi@13
  D3DXCOLOR v24; // ST20_16@14
  char *v25; // eax@14
  char *v26; // ST34_4@14
  char *v27; // ST30_4@14
  char *v28; // ST2C_4@14
  char *v29; // eax@14
  char *v30; // eax@14
  PgWin *v31; // eax@14
  char *v32; // eax@14
  PgWinBut *v33; // eax@15
  D3DXCOLOR v34; // ST20_16@15
  char *v35; // eax@15
  D3DXCOLOR v36; // ST20_16@15
  NiNode *v37; // esi@16
  const char *v38; // [sp+4h] [bp-54h]@11
  int *v39; // [sp+8h] [bp-50h]@11
  int *v40; // [sp+Ch] [bp-4Ch]@11
  NiSourceTexture *v41; // [sp+10h] [bp-48h]@11
  UIUtil ui; // [sp+24h] [bp-34h]@10
  int iXOff; // [sp+38h] [bp-20h]@4
  int iYOff; // [sp+3Ch] [bp-1Ch]@4
  int iLeft; // [sp+40h] [bp-18h]@11
  int iTop; // [sp+44h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+48h] [bp-10h]@1
  int v48; // [sp+54h] [bp-4h]@1
  signed int pkFrameWorka; // [sp+60h] [bp+8h]@13

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v48 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\WTitleWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "WeaponTitleWin", 0) )
  {
    v6 = spNode.m_pObject;
    v48 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v48) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v41 = v8;
    v40 = &iTop;
    v39 = &iLeft;
    v38 = "Theme";
  }
  else
  {
    v41 = 0;
    v40 = &iTop;
    v39 = &iLeft;
    v38 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v38, v39, v40, v41);
  PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v11 = TextData2::Get(0x80A583D6u);
  UIUtil::CreateTextEx(&ui, "NPCText", v11, 0, COERCE_D3DXCOLOR(v10.r), 5u, 0, -16, -10);
  *(_QWORD *)&v12.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v12.b = qword_A746E8;
  v13 = TextData2::Get(0xDCEBE03Au);
  UIUtil::CreateText(&ui, "ItemName", v13, 0, COERCE_D3DXCOLOR(v12.r), 4u, 0, 0);
  UIUtil::CreateBtn(&ui, 5u, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  v14 = (PgWin *)UIUtil::CreateBtn(&ui, 5u, "QuitBtnNor", "QuitBtnOver", "QuitBtnClick", 0, 0);
  *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v16 = TextData2::Get(0xA5A4A8EFu);
  UIUtil::CreateAttachedText(&ui, v14, v16, COERCE_D3DXCOLOR(v15.r), 5u);
  *(_QWORD *)&v17.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v17.b = qword_A746E8;
  v18 = TextData2::Get(0x3E4E9197u);
  UIUtil::CreateTextNoSprEx(&ui, "WinTitle", v18, COERCE_D3DXCOLOR(v17.r), 5u, 0, 2u);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TgetSlot", &iLeft, &iTop, 0);
  v20 = (PgWin *)PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkWeaponIconWin = IconSlotWin::CreateWin(3, 3, v20);
  v21 = TextData2::Get(0xEBFFD741u);
  PgWin::SetToolTipWinText(&v2->m_pkWeaponIconWin->baseclass_0, v21);
  v2->m_pkWeaponIconWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(signed int))v2->m_pkWeaponIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v22 = 1;
  v23 = (int)v2->m_akWeaponTitleFrame;
  pkFrameWorka = 3;
  do
  {
    *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v25 = fs("TitleName%02d");
    *(_DWORD *)(v23 + 4) = UIUtil::CreateText(&ui, v25, &byte_9B1EE7, 0, COERCE_D3DXCOLOR(v24.r), 5u, 0, 0);
    v26 = fs("RegBtnLock%02d");
    v27 = fs("RegBtnClick%02d");
    v28 = fs("RegBtnOver%02d");
    v29 = fs("RegBtnNor%02d");
    *(_DWORD *)(v23 + 8) = UIUtil::CreateBtn(&ui, v22, v29, v28, v27, v26, 0);
    v30 = fs("Slot%02d");
    v31 = (PgWin *)UIUtil::CreateSpr(&ui, v30, 0);
    *(_DWORD *)v23 = IconSlotWin::CreateWin(3, 3, v31);
    v32 = TextData2::Get(0x2E472839u);
    PgWin::SetToolTipWinText(*(PgWin **)v23, v32);
    *(_DWORD *)(*(_DWORD *)v23 + 272) = g_pkToolTipWin;
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v23 + 240))(1);
    ++v22;
    v23 += 12;
    --pkFrameWorka;
  }
  while ( pkFrameWorka );
  v33 = UIUtil::CreateBtn(&ui, 4u, "RegBtnNor04", "RegBtnOver04", "RegBtnClick04", "RegBtnLock04", 0);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v35 = TextData2::Get(0x98FEEDF6u);
  UIUtil::CreateText(&ui, "MakerNameText", v35, 0, COERCE_D3DXCOLOR(v34.r), 5u, 0, 0);
  *(_QWORD *)&v36.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v36.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkMakerNameText = UIUtil::CreateText(&ui, "MakerName", &byte_9B1EFF, 0, COERCE_D3DXCOLOR(v36.r), 4u, 0, 0);
  ((void (__thiscall *)(WeaponTitleWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  LOBYTE(v48) = 0;
  UIUtil::_UIUtil(&ui);
  v48 = -1;
  if ( spNode.m_pObject )
  {
    v37 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v37 )
        v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B0280) --------------------------------------------------------
void __thiscall WeaponTitleWin::DirectMessage(WeaponTitleWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  WeaponTitleWin *v4; // ebx@1
  float v5; // eax@2
  IDirectMessenger *v6; // eax@3
  bool v7; // zf@5
  int v8; // eax@5
  int v9; // ecx@7
  void (__thiscall *v10)(_DWORD, _DWORD, _DWORD); // edx@10
  int v11; // esi@10
  int v12; // ebx@15
  int v13; // eax@16
  IDirectMessenger *v14; // eax@17
  char *v15; // esi@26
  unsigned int v16; // [sp-4h] [bp-80h]@11
  signed int v17; // [sp+Ch] [bp-70h]@15
  int v18; // [sp+10h] [bp-6Ch]@10
  __int16 v19; // [sp+74h] [bp-8h]@10
  char v20; // [sp+76h] [bp-6h]@10
  unsigned int v21; // [sp+78h] [bp-4h]@1
  int v22; // [sp+7Ch] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag != 22 )
    return;
  v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale;
  if ( LODWORD(v5) )
    v6 = (IDirectMessenger *)(LODWORD(v5) + 232);
  else
    v6 = 0;
  v7 = pkFrom == v6;
  v8 = *(_DWORD *)pvBody;
  if ( v7 )
  {
    if ( *(_DWORD *)(v8 + 16) || (v9 = *(_DWORD *)(v8 + 8)) != 0 && v9 != 1 )
      return;
    if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v8 + 20) + 4))(*(_DWORD *)(v8 + 20)) == 5 )
    {
      v10 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)v4 - 58) + 548);
      v11 = *(_DWORD *)(*(_DWORD *)pvBody + 20) + 8;
      memcpy(&v18, (const void *)v11, 0x64u);
      v11 += 100;
      v19 = *(_WORD *)v11;
      v20 = *(_BYTE *)(v11 + 2);
      v10((char *)v4 - 232, (char *)&v18 + 2, v18);
      *((_BYTE *)pvBody + 12) = 1;
      return;
    }
    v16 = -1913391614;
    goto LABEL_26;
  }
  if ( *(_DWORD *)(v8 + 16) || *(_DWORD *)(v8 + 8) )
    return;
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v8 + 20) + 4))(*(_DWORD *)(v8 + 20)) != 16 )
  {
    v16 = -721622281;
LABEL_26:
    v15 = TextData2::Get(v16);
    if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
    {
      (*(void (__stdcall **)(signed int, char *, WeaponTitleWin *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                  + 4))(
        25,
        v15,
        v4);
      if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
        (*(void (__stdcall **)(signed int, char *, WeaponTitleWin *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                    + 20))(
          25,
          v15,
          v4);
    }
    ((void (__thiscall *)(WeaponTitleWin *, signed int, char *, WeaponTitleWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
      v4,
      25,
      v15,
      v4);
    return;
  }
  v12 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][1];
  v17 = 3;
  do
  {
    v13 = *(_DWORD *)(v12 - 8);
    if ( v13 )
      v14 = (IDirectMessenger *)(v13 + 232);
    else
      v14 = 0;
    if ( pkFrom == v14 && (unsigned __int8)(*(int (**)(void))(**(_DWORD **)v12 + 244))() && pkFrom )
    {
      (*(void (__thiscall **)(char *, signed int))(*((_DWORD *)&pkFrom[-19] - 1) + 256))((char *)&pkFrom[-19] - 4, 1);
      *((_BYTE *)pvBody + 12) = 1;
    }
    v12 += 12;
    --v17;
  }
  while ( v17 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005B0430) --------------------------------------------------------
void __thiscall WeaponTitleWin::OnRegBtn(WeaponTitleWin *this, int iIndex)
{
  WeaponTitleWin *v2; // esi@1
  IconSlotWin *v3; // ecx@1
  IconSlotWin *v4; // edx@2
  unsigned int v5; // eax@3
  __int16 v6; // ax@4
  int v7; // esi@8
  bool v8; // zf@8
  int v9; // esi@12
  char *v10; // edi@12
  DirectUserMsgBody_SendPacket kPacket; // [sp+8h] [bp-14h]@8
  PROTO_NC_WT_LICENSE_REQ kLicense; // [sp+14h] [bp-8h]@4

  v2 = this;
  v3 = this->m_pkWeaponIconWin;
  if ( v3->m_eType || (v4 = v2->m_akWeaponTitleFrame[iIndex].pkSlot, v4->m_eType) )
  {
    v9 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v10 = TextData2::Get(0xA896FCE2u);
    if ( *(_DWORD *)(v9 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 4))(25, v10, v9);
      if ( *(_DWORD *)(v9 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 20))(25, v10, v9);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
  }
  else
  {
    v5 = v3->m_kContentsDetail.kItem.uiSenderType;
    if ( v5 == 1 )
    {
      v6 = kLicense.weaponitem.Inven & 0x3FF | 0x2000;
      kLicense.weaponitem.Inven = kLicense.weaponitem.Inven & 0x3FF | 0x2000;
    }
    else
    {
      if ( v5 )
      {
        v6 = kLicense.weaponitem.Inven;
      }
      else
      {
        v6 = kLicense.weaponitem.Inven & 0x3FF | 0x2400;
        kLicense.weaponitem.Inven = kLicense.weaponitem.Inven & 0x3FF | 0x2400;
      }
    }
    kLicense.weaponitem.Inven = (v6 ^ LOWORD(v3->m_kContentsDetail.kItem.uiSenderIndex)) & 0x3FF ^ v6;
    kLicense.licenseitem.Inven = kLicense.licenseitem.Inven & 0x3FF | 0x2400;
    v7 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v8 = *(_DWORD *)(v7 + 4) == 0;
    kLicense.licenseitem.Inven ^= (kLicense.licenseitem.Inven ^ LOWORD(v4->m_kContentsDetail.kItem.uiSenderIndex)) & 0x3FF;
    kLicense.bSet = 1;
    *(_DWORD *)&kPacket.wDepartment = 65559;
    kPacket.pvPacket = &kLicense;
    kPacket.uiPacketSize = 7;
    if ( !v8 )
    {
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v7 + 4) + 4))(
        23,
        &kPacket,
        v7);
      if ( *(_DWORD *)(v7 + 4) )
        (*(void (__stdcall **)(signed int, DirectUserMsgBody_SendPacket *, int))(**(_DWORD **)(v7 + 4) + 20))(
          23,
          &kPacket,
          v7);
    }
    (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_SendPacket *, int))(*(_DWORD *)v7 + 20))(
      v7,
      23,
      &kPacket,
      v7);
  }
}

//----- (005B05A0) --------------------------------------------------------
bool __thiscall WeaponTitleDeleteWin::Create(WeaponTitleDeleteWin *this, PgFrameWork *pkFrameWork)
{
  WeaponTitleDeleteWin *v2; // ebx@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  NiSourceTexture *v8; // eax@10
  PgSprData *v9; // eax@13
  D3DXCOLOR v10; // ST20_16@13
  char *v11; // eax@13
  D3DXCOLOR v12; // ST20_16@13
  char *v13; // eax@13
  PgWin *v14; // esi@13
  D3DXCOLOR v15; // ST28_16@13
  char *v16; // eax@13
  D3DXCOLOR v17; // ST28_16@13
  char *v18; // eax@13
  PgSprData *v19; // eax@13
  PgWin *v20; // eax@13
  char *v21; // eax@13
  unsigned int v22; // esi@13
  int v23; // edi@13
  D3DXCOLOR v24; // ST20_16@14
  char *v25; // eax@14
  char *v26; // ST34_4@14
  char *v27; // ST30_4@14
  char *v28; // ST2C_4@14
  char *v29; // eax@14
  char *v30; // eax@14
  PgWin *v31; // eax@14
  char *v32; // eax@14
  PgWinBut *v33; // eax@15
  D3DXCOLOR v34; // ST20_16@15
  char *v35; // eax@15
  D3DXCOLOR v36; // ST20_16@15
  NiNode *v37; // esi@16
  const char *v38; // [sp+4h] [bp-54h]@11
  int *v39; // [sp+8h] [bp-50h]@11
  int *v40; // [sp+Ch] [bp-4Ch]@11
  NiSourceTexture *v41; // [sp+10h] [bp-48h]@11
  UIUtil ui; // [sp+24h] [bp-34h]@10
  int iXOff; // [sp+38h] [bp-20h]@4
  int iYOff; // [sp+3Ch] [bp-1Ch]@4
  int iLeft; // [sp+40h] [bp-18h]@11
  int iTop; // [sp+44h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+48h] [bp-10h]@1
  int v48; // [sp+54h] [bp-4h]@1
  signed int pkFrameWorka; // [sp+60h] [bp+8h]@13

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v48 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\WTitleWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0.baseclass_0, 0, 0, v5, 0, pkFrameWork, "WeaponTitleDeleteWin", 0) )
  {
    v6 = spNode.m_pObject;
    v48 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v48) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = MenuTexMgr::GetTexture(0x13u);
  if ( v8 )
  {
    v41 = v8;
    v40 = &iTop;
    v39 = &iLeft;
    v38 = "Theme";
  }
  else
  {
    v41 = 0;
    v40 = &iTop;
    v39 = &iLeft;
    v38 = "Theme";
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v38, v39, v40, v41);
  PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v9, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v11 = TextData2::Get(0x80A583D6u);
  UIUtil::CreateText(&ui, "NPCText", v11, 0, COERCE_D3DXCOLOR(v10.r), 5u, 0, 0);
  *(_QWORD *)&v12.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v12.b = qword_A746E8;
  v13 = TextData2::Get(0xDCEBE03Au);
  UIUtil::CreateText(&ui, "ItemName", v13, 0, COERCE_D3DXCOLOR(v12.r), 4u, 0, 0);
  UIUtil::CreateBtn(&ui, 5u, "ClsNor", "ClsOver", "ClsClick", 0, 0);
  v14 = (PgWin *)UIUtil::CreateBtn(&ui, 5u, "QuitBtnNor", "QuitBtnOver", "QuitBtnClick", 0, 0);
  *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v16 = TextData2::Get(0xA5A4A8EFu);
  UIUtil::CreateAttachedText(&ui, v14, v16, COERCE_D3DXCOLOR(v15.r), 5u);
  *(_QWORD *)&v17.r = Color::m_kDxWinTitleColor;
  *(_QWORD *)&v17.b = qword_A746E8;
  v18 = TextData2::Get(0xD6F2DD21u);
  UIUtil::CreateTextNoSpr(&ui, "WinTitle", v18, COERCE_D3DXCOLOR(v17.r), 5u);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TgetSlot", &iLeft, &iTop, 0);
  v20 = (PgWin *)PgWinSpr::CreateWin(
                   iLeft - iXOff,
                   iTop - iYOff,
                   v19,
                   &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                   0,
                   0);
  v2->baseclass_0.m_pkWeaponIconWin = IconSlotWin::CreateWin(3, 3, v20);
  v21 = TextData2::Get(0xEBFFD741u);
  PgWin::SetToolTipWinText(&v2->baseclass_0.m_pkWeaponIconWin->baseclass_0, v21);
  v2->baseclass_0.m_pkWeaponIconWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(signed int))v2->baseclass_0.m_pkWeaponIconWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v22 = 1;
  v23 = (int)v2->baseclass_0.m_akWeaponTitleFrame;
  pkFrameWorka = 3;
  do
  {
    *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v25 = fs("TitleName%02d");
    *(_DWORD *)(v23 + 4) = UIUtil::CreateText(&ui, v25, &byte_9B1F0F, 0, COERCE_D3DXCOLOR(v24.r), 5u, 0, 0);
    v26 = fs("RegCancelBtnLock%02d");
    v27 = fs("RegCancelBtnClick%02d");
    v28 = fs("RegCancelBtnOver%02d");
    v29 = fs("RegCancelBtnNor%02d");
    *(_DWORD *)(v23 + 8) = UIUtil::CreateBtn(&ui, v22, v29, v28, v27, v26, 0);
    v30 = fs("Slot%02d");
    v31 = (PgWin *)UIUtil::CreateSpr(&ui, v30, 0);
    *(_DWORD *)v23 = IconSlotWin::CreateWin(3, 3, v31);
    v32 = TextData2::Get(0x2E472839u);
    PgWin::SetToolTipWinText(*(PgWin **)v23, v32);
    *(_DWORD *)(*(_DWORD *)v23 + 272) = g_pkToolTipWin;
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v23 + 240))(1);
    ++v22;
    v23 += 12;
    --pkFrameWorka;
  }
  while ( pkFrameWorka );
  v33 = UIUtil::CreateBtn(
          &ui,
          4u,
          "RegCancelBtnNor04",
          "RegCancelBtnOver04",
          "RegCancelBtnClick04",
          "RegCancelBtnLock04",
          0);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v35 = TextData2::Get(0x98FEEDF6u);
  UIUtil::CreateText(&ui, "MakerNameText", v35, 0, COERCE_D3DXCOLOR(v34.r), 5u, 0, 0);
  *(_QWORD *)&v36.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v36.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->baseclass_0.m_pkMakerNameText = UIUtil::CreateText(
                                        &ui,
                                        "MakerName",
                                        &byte_9B1F31,
                                        0,
                                        COERCE_D3DXCOLOR(v36.r),
                                        5u,
                                        0,
                                        0);
  ((void (__thiscall *)(WeaponTitleDeleteWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  LOBYTE(v48) = 0;
  UIUtil::_UIUtil(&ui);
  v48 = -1;
  if ( spNode.m_pObject )
  {
    v37 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v37 )
        v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A746E8: using guessed type __int64 qword_A746E8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B0B40) --------------------------------------------------------
void __thiscall WeaponTitleDeleteWin::OnRegBtn(WeaponTitleDeleteWin *this, int iIndex)
{
  WeaponTitleDeleteWin *v2; // esi@1
  IconSlotWin *v3; // ecx@1
  int v4; // esi@2
  char *v5; // edi@2
  unsigned int v6; // eax@7
  __int16 v7; // ax@8
  Item *v8; // eax@12
  unsigned int v9; // ecx@13
  unsigned int v10; // ecx@17
  int v11; // esi@22
  char *v12; // edi@22
  PROTO_NC_WT_LICENSE_REQ kLicense; // [sp+8h] [bp-8h]@8

  v2 = this;
  v3 = this->baseclass_0.m_pkWeaponIconWin;
  if ( v3->m_eType )
  {
    v4 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v5 = TextData2::Get(0xA896FCE2u);
    if ( *(_DWORD *)(v4 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
      if ( *(_DWORD *)(v4 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  }
  else
  {
    if ( v2->baseclass_0.m_akWeaponTitleFrame[iIndex].pkSlot->m_eType )
    {
      v11 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v12 = TextData2::Get(0xA896FCE2u);
      if ( *(_DWORD *)(v11 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v11 + 4) + 4))(25, v12, v11);
        if ( *(_DWORD *)(v11 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v11 + 4) + 20))(25, v12, v11);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v11 + 20))(v11, 25, v12, v11);
    }
    else
    {
      v6 = v3->m_kContentsDetail.kItem.uiSenderType;
      if ( v6 == 1 )
      {
        v7 = kLicense.weaponitem.Inven & 0x3FF | 0x2000;
        kLicense.weaponitem.Inven = kLicense.weaponitem.Inven & 0x3FF | 0x2000;
      }
      else
      {
        if ( v6 )
        {
          v7 = kLicense.weaponitem.Inven;
        }
        else
        {
          v7 = kLicense.weaponitem.Inven & 0x3FF | 0x2400;
          kLicense.weaponitem.Inven = kLicense.weaponitem.Inven & 0x3FF | 0x2400;
        }
      }
      kLicense.weaponitem.Inven = (v7 ^ LOWORD(v3->m_kContentsDetail.kItem.uiSenderIndex)) & 0x3FF ^ v7;
      v8 = (Item *)v3->m_kContentsDetail.kItem.uiSenderType;
      if ( v8 == (Item *)1 )
      {
        v9 = v3->m_kContentsDetail.kItem.uiSenderIndex;
        if ( v9 < 0x1E )
          v8 = g_kInventory.m_aspEquip[v9].m_pObject;
        else
          v8 = 0;
      }
      else
      {
        if ( v8 )
        {
          v8 = (Item *)iIndex;
        }
        else
        {
          v10 = v3->m_kContentsDetail.kItem.uiSenderIndex;
          if ( v10 < 0xC0 )
            v8 = g_kInventory.m_aspInv[v10].m_pObject;
        }
      }
      kLicense.mobid = *(_WORD *)((char *)&v8->m_kStruct.itemattr.amulet.IsPutOnBelonged + 6 * iIndex + 3);
      if ( Inventory::FindWeaponTitleRemoveInven(&g_kInventory, &kLicense.licenseitem) )
      {
        kLicense.bSet = 0;
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x17u, 1u, &kLicense, 7);
      }
    }
  }
}

//----- (005B0CF0) --------------------------------------------------------
void __thiscall WeaponTitleWin::OnShowWin(WeaponTitleWin *this)
{
  WeaponTitleWin *v1; // esi@1
  char *v2; // eax@1
  PgWin **v3; // ebx@1
  int v4; // eax@2
  unsigned int v5; // eax@3
  void *v6; // eax@5
  void *v7; // edi@5
  char *v8; // eax@6
  PgWin *v9; // edx@12
  bool v10; // zf@12
  PgFrameWork *v11; // eax@13
  int key; // [sp+Ch] [bp-14h]@2
  char *v13; // [sp+10h] [bp-10h]@2
  char *v14; // [sp+14h] [bp-Ch]@2
  char *v15; // [sp+18h] [bp-8h]@2
  int v16; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v2 = TextData2::Get(0xEBFFD741u);
  PgWin::SetToolTipWinText(&v1->m_pkWeaponIconWin->baseclass_0, v2);
  v1->m_pkWeaponIconWin->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v3 = (PgWin **)v1->m_akWeaponTitleFrame;
  v16 = 3;
  do
  {
    v13 = &byte_9788EB;
    v14 = &byte_9788EB;
    v15 = &byte_9788EB;
    key = 776415289;
    v4 = *(_DWORD *)(ITableBase<TextDataType2_TextData2>::ms_pkTable + 56);
    if ( v4 )
      v5 = *(_DWORD *)(v4 + 40);
    else
      v5 = 0;
    v6 = bsearch(&key, TextData2::ms_apkNode, v5, 0x10u, TextDataNodeComp);
    v7 = v6;
    if ( v6 )
    {
      if ( strcmp(*((const char **)v6 + 2), "None") )
        SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v7 + 2));
      if ( strcmp(*((const char **)v7 + 3), "None") )
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v7 + 3));
      v8 = (char *)*((_DWORD *)v7 + 1);
    }
    else
    {
      v8 = &byte_9788EB;
    }
    PgWin::SetToolTipWinText(*v3, v8);
    v9 = *v3;
    v3 += 3;
    v10 = v16-- == 1;
    v9->m_pkToolTipWin = g_pkToolTipWin;
  }
  while ( !v10 );
  v11 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v11 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v11, BIL_WEAPONTITLE_2);
}
// A94344: using guessed type int ITableBase_TextDataType2_TextData2___ms_pkTable;

//----- (005B0E60) --------------------------------------------------------
WeaponTitleWin *__cdecl WeaponTitleWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WeaponTitleWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x184u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WeaponTitleWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WeaponTitleWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WeaponTitleWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B2200: using guessed type int (__stdcall *WeaponTitleWin___vftable_)(int uiFlags);
// 9B221C: using guessed type int (__thiscall *WeaponTitleWin___vftable_)(void *p, char);

//----- (005B0FA0) --------------------------------------------------------
WeaponTitleDeleteWin *__cdecl WeaponTitleDeleteWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WeaponTitleDeleteWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WeaponTitleDeleteWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WeaponTitleDeleteWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WeaponTitleDeleteWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B2448: using guessed type int (__stdcall *WeaponTitleDeleteWin___vftable_)(int uiFlags);
// 9B2464: using guessed type int (__thiscall *WeaponTitleDeleteWin___vftable_)(void *p, char);

//----- (005B10E0) --------------------------------------------------------
void __thiscall WeaponTitleWin::SetWeaponTitle(WeaponTitleWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID)
{
  signed int v3; // esi@0
  WeaponTitleWin *v4; // ebx@1
  int v5; // esi@2
  char *v6; // edi@2
  char *v7; // eax@3
  int v8; // eax@3
  int v9; // ebx@4
  int v10; // eax@6
  char *v11; // eax@8
  ItemInfo *v12; // eax@8
  Item *v13; // eax@9
  char *v14; // eax@9
  void (*v15)(void); // eax@11
  signed int v16; // [sp-4h] [bp-90h]@2
  WeaponTitleWin *v17; // [sp+Ch] [bp-80h]@1
  unsigned __int16 v18; // [sp+14h] [bp-78h]@4
  signed int v19; // [sp+18h] [bp-74h]@2
  char bDisableLastBtn; // [sp+1Eh] [bp-6Eh]@2
  char bWeaponTitled; // [sp+1Fh] [bp-6Dh]@2
  unsigned __int16 kStruct; // [sp+20h] [bp-6Ch]@9
  unsigned int v23; // [sp+88h] [bp-4h]@1
  int v24; // [sp+8Ch] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v4 = this;
  v17 = this;
  if ( pkWeapon )
  {
    v16 = v3;
    bWeaponTitled = 0;
    bDisableLastBtn = 0;
    ((void (__stdcall *)(_UNKNOWN *))this->m_pkMakerNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B1F06);
    v5 = (int)&v4->m_akWeaponTitleFrame[0].pkTitleText;
    v6 = (char *)pkWeapon->mobkills;
    v19 = 3;
    do
    {
      (*(void (__stdcall **)(_UNKNOWN *, signed int))(**(_DWORD **)v5 + 472))(&unk_9B1F07, v16);
      IconSlotWin::Clear(*(IconSlotWin **)(v5 - 4));
      v7 = TextData2::Get(0x2E472839u);
      PgWin::SetToolTipWinText(*(PgWin **)(v5 - 4), v7);
      *(_DWORD *)(*(_DWORD *)(v5 - 4) + 272) = g_pkToolTipWin;
      v8 = *(_WORD *)v6;
      if ( (_WORD)v8 == -1 )
      {
        v15 = *(void (**)(void))(**(_DWORD **)(v5 + 4) + 240);
        if ( bDisableLastBtn )
        {
          v16 = 0;
          v15();
        }
        else
        {
          v16 = 1;
          v15();
          bDisableLastBtn = 1;
        }
      }
      else
      {
        v9 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
        v18 = *(_WORD *)v6;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                                v8) )
        {
          if ( v18 <= *(_WORD *)(v9 + 200) )
          {
            v10 = *(_DWORD *)(v9 + 196) + 4 * v18;
            if ( *(_DWORD *)v10 )
            {
              if ( *(_DWORD *)v10 )
              {
                v11 = fs("WTL_%s");
                v12 = ItemInfoTab::GetByInxName(v11);
                if ( v12 )
                {
                  kStruct = v12->ID;
                  v13 = Item::Create((SHINE_ITEM_STRUCT *)&kStruct);
                  IconSlotWin::SetItem(*(IconSlotWin **)(v5 - 4), v13, 1, 1);
                  v14 = WeaponTitleTab::GetWeaponTitleString(*(_WORD *)v6, *(_DWORD *)(v6 + 2) & 0xFFFFFFF, wepID);
                  (*(void (__stdcall **)(char *))(**(_DWORD **)v5 + 472))(v14);
                }
              }
            }
          }
        }
        v16 = 0;
        bWeaponTitled = 1;
        (*(void (**)(void))(**(_DWORD **)(v5 + 4) + 240))();
        v4 = v17;
      }
      v6 += 6;
      v5 += 12;
      --v19;
    }
    while ( v19 );
    if ( bWeaponTitled )
      ((void (__stdcall *)(char *))v4->m_pkMakerNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkWeapon->usertitle);
  }
}
// 5B10E0: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (005B12B0) --------------------------------------------------------
void __thiscall WeaponTitleDeleteWin::SetWeaponTitle(WeaponTitleDeleteWin *this, ShineItemAttr_Weapon *pkWeapon, unsigned __int16 wepID)
{
  signed int v3; // ebx@0
  WeaponTitleDeleteWin *v4; // esi@1
  char v5; // bl@2
  int v6; // esi@2
  char *v7; // edi@2
  int v8; // eax@3
  int v9; // ebx@4
  int v10; // edx@4
  int v11; // eax@6
  char *v12; // eax@8
  ItemInfo *v13; // eax@8
  Item *v14; // eax@9
  char *v15; // eax@9
  void (*v16)(void); // eax@10
  signed int v17; // [sp-4h] [bp-94h]@2
  ITEM_INVEN kInven; // [sp+8h] [bp-88h]@2
  int v19; // [sp+Ch] [bp-84h]@1
  ShineItemAttr_Weapon *v20; // [sp+10h] [bp-80h]@1
  WeaponTitleDeleteWin *v21; // [sp+14h] [bp-7Ch]@1
  int v22; // [sp+18h] [bp-78h]@4
  int v23; // [sp+1Ch] [bp-74h]@2
  bool bRemoveItemFound; // [sp+23h] [bp-6Dh]@2
  unsigned __int16 kStruct; // [sp+24h] [bp-6Ch]@9
  unsigned int v26; // [sp+8Ch] [bp-4h]@1
  int v27; // [sp+90h] [bp+0h]@1

  v26 = (unsigned int)&v27 ^ __security_cookie;
  v4 = this;
  v21 = this;
  v20 = pkWeapon;
  v19 = wepID;
  if ( pkWeapon )
  {
    v17 = v3;
    v5 = 0;
    ((void (__stdcall *)(_UNKNOWN *))this->baseclass_0.m_pkMakerNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B1F32);
    v6 = (int)&v4->baseclass_0.m_akWeaponTitleFrame[0].pkBtn;
    bRemoveItemFound = Inventory::FindWeaponTitleRemoveInven(&g_kInventory, &kInven);
    v7 = (char *)pkWeapon->mobkills;
    v23 = 3;
    while ( 1 )
    {
      (*(void (__stdcall **)(_UNKNOWN *, signed int))(**(_DWORD **)(v6 - 4) + 472))(&unk_9B1F33, v17);
      IconSlotWin::Clear(*(IconSlotWin **)(v6 - 8));
      v8 = *(_WORD *)v7;
      if ( (_WORD)v8 == -1 )
        break;
      v9 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
      v10 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
      v22 = *(_WORD *)v7;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v10 + 16))(ITableBase<MobInfo_MobInfoTab>::ms_pkTable, v8) )
      {
        if ( (unsigned __int16)v22 <= *(_WORD *)(v9 + 200) )
        {
          v11 = *(_DWORD *)(v9 + 196) + 4 * (unsigned __int16)v22;
          if ( *(_DWORD *)v11 )
          {
            if ( *(_DWORD *)v11 )
            {
              v12 = fs("WTL_%s");
              v13 = ItemInfoTab::GetByInxName(v12);
              if ( v13 )
              {
                kStruct = v13->ID;
                v14 = Item::Create((SHINE_ITEM_STRUCT *)&kStruct);
                IconSlotWin::SetItem(*(IconSlotWin **)(v6 - 8), v14, 1, 1);
                v15 = WeaponTitleTab::GetWeaponTitleString(*(_WORD *)v7, *(_DWORD *)(v7 + 2) & 0xFFFFFFF, v19);
                (*(void (__stdcall **)(char *))(**(_DWORD **)(v6 - 4) + 472))(v15);
              }
            }
          }
        }
      }
      v16 = *(void (**)(void))(**(_DWORD **)v6 + 240);
      v5 = 1;
      if ( !bRemoveItemFound )
        goto LABEL_13;
      v17 = 1;
LABEL_14:
      v16();
      v7 += 6;
      v6 += 12;
      --v23;
      if ( !v23 )
      {
        if ( v5 )
          ((void (__stdcall *)(char *))v21->baseclass_0.m_pkMakerNameText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v20->usertitle);
        return;
      }
    }
    v16 = *(void (**)(void))(**(_DWORD **)v6 + 240);
LABEL_13:
    v17 = 0;
    goto LABEL_14;
  }
}
// 5B12B0: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (005B1460) --------------------------------------------------------
void *__thiscall WeaponTitleDeleteWin::_vector_deleting_destructor_(WeaponTitleDeleteWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeaponTitleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeaponTitleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B2200: using guessed type int (__stdcall *WeaponTitleWin___vftable_)(int uiFlags);
// 9B221C: using guessed type int (__thiscall *WeaponTitleWin___vftable_)(void *p, char);

//----- (005B14A0) --------------------------------------------------------
void __thiscall WingStoneMapWin::SetMapViewRect(WingStoneMapWin *this, unsigned int dwLeft, unsigned int dwTop, unsigned int dwRight, unsigned int dwBottom)
{
  this->m_kMapViewRect.left = dwLeft;
  this->m_kMapViewRect.right = dwRight;
  this->m_kMapViewRect.top = dwTop;
  this->m_kMapViewRect.bottom = dwBottom;
}

//----- (005B14D0) --------------------------------------------------------
void __thiscall WingStoneMapWin::OnClose(WingStoneMapWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (005B1500) --------------------------------------------------------
void __thiscall WingStoneMapWin::OnHelpLink(WingStoneMapWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MinimapFull");
}

//----- (005B1530) --------------------------------------------------------
void __thiscall WingStoneMapWin::OnFly(WingStoneMapWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  WingStoneWin::OnCmdFlying(*(WingStoneWin **)&this->baseclass_0.m_pkFrameWork[16].m_bInit);
  PgWin::PostMsg(v1, v1, 1u, 0, 0);
}

//----- (005B1560) --------------------------------------------------------
void __thiscall WingStoneMapWin::SetWinPos(WingStoneMapWin *this, float fCharWorldX, float fCharWorldY)
{
  MainCharMarkWin *v3; // eax@1
  float v4; // edx@1
  float v5; // ST00_4@1
  double v6; // st7@1
  float v7; // ST04_4@1

  v3 = this->m_pkMainCharMarkWin;
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
  v5 = (fCharWorldX * 0.01999999955296516 / this->m_fMiniMapScale - this->m_fMapOffsetX) * this->m_fMapScaleX;
  v6 = (512.0 - 0.01999999955296516 * fCharWorldY / this->m_fMiniMapScale - this->m_fMapOffsetY) * this->m_fMapScaleY;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v5;
  v7 = v6;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v7;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v4;
}

//----- (005B15E0) --------------------------------------------------------
void __thiscall WingStoneMapWin::WingStoneMapWin(WingStoneMapWin *this)
{
  WingStoneMapWin *v1; // esi@1
  PgSprData *v2; // ebx@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WingStoneMapWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WingStoneMapWin::_vftable_;
  v1->m_spSavePlace.m_pObject = 0;
  v1->m_spFullMapGeom.m_pObject = 0;
  v1->m_spFullMapTexProp.m_pObject = 0;
  v1->m_spMiniMapTexture.m_pObject = 0;
  v2 = v1->m_spSavePlace.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spSavePlace.m_pObject = 0;
  }
  v1->m_pkMapNameTextWin = 0;
  v1->m_fMiniMapScale = 0.0;
  v1->m_pkFullMapViewWin = 0;
  v1->m_pkMainCharMarkWin = 0;
  v1->m_pkMiniMapWin = 0;
  v1->m_pkFlyMapBut = 0;
}
// 9B2760: using guessed type int (__stdcall *WingStoneMapWin___vftable_)(int uiFlags);
// 9B277C: using guessed type int (__thiscall *WingStoneMapWin___vftable_)(void *p, char);

//----- (005B16B0) --------------------------------------------------------
void __thiscall WingStoneMapWin::_WingStoneMapWin(WingStoneMapWin *this)
{
  WingStoneMapWin *v1; // esi@1
  PgSprData *v2; // edi@1
  NiSourceTexture *v3; // edi@6
  NiTexturingProperty *v4; // edi@10
  NiScreenElements *v5; // edi@14
  PgSprData *v6; // edi@18

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WingStoneMapWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WingStoneMapWin::_vftable_;
  v2 = this->m_spSavePlace.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spSavePlace.m_pObject = 0;
  }
  v1->m_pkMapNameTextWin = 0;
  v1->m_fMiniMapScale = 0.0;
  v1->m_pkFullMapViewWin = 0;
  v1->m_pkMainCharMarkWin = 0;
  v1->m_pkMiniMapWin = 0;
  v1->m_pkFlyMapBut = 0;
  v3 = v1->m_spMiniMapTexture.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spFullMapTexProp.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v1->m_spFullMapGeom.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v6 = v1->m_spSavePlace.m_pObject;
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
    v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B2760: using guessed type int (__stdcall *WingStoneMapWin___vftable_)(int uiFlags);
// 9B277C: using guessed type int (__thiscall *WingStoneMapWin___vftable_)(void *p, char);

//----- (005B1810) --------------------------------------------------------
void __thiscall WingStoneMapWin::ReSetView(WingStoneMapWin *this)
{
  WingStoneMapWin *v1; // esi@1
  NiSourceTexture *v2; // ecx@1
  int v3; // edi@2
  int v4; // ebx@2
  NiTexturingProperty *v5; // ecx@2
  NiTexture *v6; // ST14_4@2

  v1 = this;
  v2 = this->m_spMiniMapTexture.m_pObject;
  if ( v2 )
  {
    ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)();
    ((void (*)(void))v1->m_spMiniMapTexture.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)();
    v3 = v1->m_kMapViewRect.right - v1->m_kMapViewRect.left + 1;
    v4 = v1->m_kMapViewRect.bottom - v1->m_kMapViewRect.top + 1;
    NiScreenElementsData::SetTextures(
      (NiScreenElementsData *)v1->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      0,
      0.0,
      0.0,
      1.0,
      1.0);
    NiScreenElementsData::SetRectangle(
      (NiScreenElementsData *)v1->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      0.0,
      0.0,
      512.0,
      512.0);
    v1->m_fMapOffsetX = (double)v1->m_kMapViewRect.left;
    v1->m_fMapOffsetY = (double)v1->m_kMapViewRect.top;
    v1->m_fMapScaleX = 512.0 / (double)(unsigned int)v3;
    v5 = v1->m_spFullMapTexProp.m_pObject;
    v6 = (NiTexture *)v1->m_spMiniMapTexture.m_pObject;
    v1->m_fMapScaleY = 512.0 / (double)(unsigned int)v4;
    NiTexturingProperty::SetBaseTexture(v5, v6);
    v1->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject->m_usDirtyFlags |= 9u;
    NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (005B1930) --------------------------------------------------------
void __thiscall WingStoneMapWin::OnCommand(WingStoneMapWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // eax@4

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
    }
    else
    {
      if ( wParam == 2 )
      {
        v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v4 )
          GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "MinimapFull");
      }
    }
  }
  else
  {
    WingStoneWin::OnCmdFlying(*(WingStoneWin **)&this->baseclass_0.m_pkFrameWork[16].m_bInit);
    PgWin::PostMsg(v3, v3, 1u, 0, 0);
  }
}

//----- (005B19A0) --------------------------------------------------------
bool __thiscall WingStoneMapWin::Create(WingStoneMapWin *this, PgFrameWork *pkFrameWork)
{
  WingStoneMapWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  PgSprData *v6; // edi@4
  PgSprData *v7; // ebx@4
  PgSprData *v8; // eax@11
  NiNode *v9; // esi@12
  PgSprData *v11; // eax@17
  PgSprData *v12; // edi@17
  NiSourceTexture *v13; // edi@17
  PgSprData *v14; // edi@18
  PgFont *v15; // eax@19
  PgWinText *v16; // eax@19
  NiScreenElementsData *v17; // edi@19
  void *v18; // eax@19
  int v19; // eax@20
  int v20; // ebx@20
  NiScreenElements *v21; // edi@22
  void *v22; // eax@29
  int v23; // eax@30
  int v24; // ebx@30
  NiTexturingProperty *v25; // edi@32
  NiNode *v26; // esi@40
  unsigned int uiWidth; // [sp+40h] [bp-20h]@19
  unsigned int uiHeight; // [sp+44h] [bp-1Ch]@19
  int uiLeft; // [sp+48h] [bp-18h]@4
  int uiTop; // [sp+4Ch] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+50h] [bp-10h]@1
  int v32; // [sp+5Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v32 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MinimapFull.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCGuild", &uiLeft, &uiTop, 0);
  v6 = v2->m_spSavePlace.m_pObject;
  v7 = v5;
  if ( v6 != v5 )
  {
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v2->m_spSavePlace.m_pObject = v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "WingStoneMapWin", 0) )
  {
    v9 = spNode.m_pObject;
    v32 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
    return 0;
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v12, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v13 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v13);
    PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  }
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v15 = Font::Get(0);
  v16 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMapNameTextWin = v16;
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v16,
    1u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B26A1);
  ((void (__stdcall *)(_DWORD))v2->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(__int64 *))v2->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "fullmap", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v2->m_pkFullMapViewWin = PgWin::CreateWin(
                             uiLeft,
                             uiTop,
                             uiWidth,
                             uiHeight,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0,
                             0);
  v17 = PgUtil::CreateScreenGeometryData(1u, 1u, 0, 0, 1u, 1u);
  v18 = operator new(0xC4u);
  LOBYTE(v32) = 1;
  if ( v18 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v18, v17);
    v20 = v19;
  }
  else
  {
    v20 = 0;
  }
  v21 = v2->m_spFullMapGeom.m_pObject;
  LOBYTE(v32) = 0;
  if ( v21 != (NiScreenElements *)v20 )
  {
    if ( v21
      && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v21 )
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v21,
        1u);
    v2->m_spFullMapGeom.m_pObject = (NiScreenElements *)v20;
    if ( v20 )
      InterlockedIncrement((volatile LONG *)(v20 + 4));
  }
  v22 = operator new(0x44u);
  LOBYTE(v32) = 2;
  if ( v22 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v22);
    v24 = v23;
  }
  else
  {
    v24 = 0;
  }
  v25 = v2->m_spFullMapTexProp.m_pObject;
  LOBYTE(v32) = 0;
  if ( v25 != (NiTexturingProperty *)v24 )
  {
    if ( v25
      && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v25 )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    v2->m_spFullMapTexProp.m_pObject = (NiTexturingProperty *)v24;
    if ( v24 )
      InterlockedIncrement((volatile LONG *)(v24 + 4));
  }
  NiTexturingProperty::SetBaseTexture(v2->m_spFullMapTexProp.m_pObject, 0);
  NiTexturingProperty::SetBaseFilterMode(v2->m_spFullMapTexProp.m_pObject, FILTER_BILERP);
  v2->m_spFullMapTexProp.m_pObject->m_eApply = 0;
  NiTexturingProperty::SetBaseClampMode(v2->m_spFullMapTexProp.m_pObject, 0);
  NiAVObject::AttachProperty(
    &v2->m_spFullMapGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v2->m_spFullMapTexProp.m_pObject->baseclass_0);
  ((void (__stdcall *)(NiScreenElements *, _DWORD))v2->m_pkFullMapViewWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v2->m_spFullMapGeom.m_pObject,
    0);
  v2->m_pkMainCharMarkWin = MainCharMarkWin::CreateWin(0, 0, v2->m_spSavePlace.m_pObject, v2->m_pkFullMapViewWin);
  NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  ((void (__thiscall *)(WingStoneMapWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v32 = -1;
  if ( spNode.m_pObject )
  {
    v26 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v26 )
        v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B1E90) --------------------------------------------------------
bool __thiscall WingStoneMapWin::SetLoadMap(WingStoneMapWin *this, unsigned __int16 kMapID, float fX, float fY)
{
  WingStoneMapWin *v4; // esi@1
  MapInfo *v5; // eax@1
  Name3 *v6; // edi@1
  NiImageConverter *v7; // eax@3
  int v8; // eax@3
  NiSourceTexture *v9; // ebx@5
  NiSourceTexture *v10; // eax@14
  NiSourceTexture *v11; // edi@14
  NiSourceTexture *v12; // ebx@14
  bool result; // al@21
  MapViewInfo *v14; // eax@22
  int v15; // edx@22
  int v16; // ecx@22
  int v17; // ebx@22
  int v18; // edx@22
  MapInfo *v19; // eax@22
  NiTexture::FormatPrefs kPrefs; // [sp+24h] [bp-128h]@4
  int v21; // [sp+30h] [bp-11Ch]@5
  char acFileName[260]; // [sp+34h] [bp-118h]@3
  char acMapName[13]; // [sp+138h] [bp-14h]@1
  unsigned int v24; // [sp+148h] [bp-4h]@1
  int v25; // [sp+14Ch] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v4 = this;
  v5 = MapInfoTab::GetByMapName(kMapID);
  v6 = &v5->MapName;
  *(_DWORD *)acMapName = *(_DWORD *)&v5->MapName.n3_name[0];
  *(_DWORD *)&acMapName[4] = *(_DWORD *)&v5->MapName.n3_name[4];
  *(_DWORD *)&acMapName[8] = *(_DWORD *)&v5->MapName.n3_name[8];
  acMapName[12] = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%sminimap\\%s.dds");
  v7 = NiImageConverter::GetImageConverter();
  v8 = ((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v7->baseclass_0.vfptr[2].__vecDelDtor)(
         v7,
         acFileName,
         0);
  if ( v8 )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    v8 = (int)NiSourceTexture::Create((NiPixelData *)v8, &kPrefs);
  }
  v9 = v4->m_spMiniMapTexture.m_pObject;
  v21 = v8;
  if ( v9 != (NiSourceTexture *)v8 )
  {
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v8 = v21;
    }
    v4->m_spMiniMapTexture.m_pObject = (NiSourceTexture *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)(v8 + 4));
  }
  if ( v4->m_spMiniMapTexture.m_pObject )
  {
    v14 = MapViewInfoTab::GetByMapName(v6);
    v15 = v14->EndX;
    v16 = v14->EndY;
    v21 = v14->StartY;
    v17 = v14->StartX;
    v4->m_kMapViewRect.right = v15;
    v18 = v21;
    v4->m_kMapViewRect.left = v17;
    v4->m_kMapViewRect.top = v18;
    v4->m_kMapViewRect.bottom = v16;
    v4->m_fMiniMapScale = v14->MiniMapScale;
    v19 = MapInfoTab::GetByMapName(v6);
    ((void (__stdcall *)(char *))v4->m_pkMapNameTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v19->Name);
    WingStoneMapWin::ReSetView(v4);
    WingStoneMapWin::SetWinPos(v4, fX, fY);
    result = 1;
  }
  else
  {
    v10 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
    v11 = v4->m_spMiniMapTexture.m_pObject;
    v12 = v10;
    if ( v11 != v10 )
    {
      if ( v11
        && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      v4->m_spMiniMapTexture.m_pObject = v12;
      if ( v12 )
        InterlockedIncrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B20A0) --------------------------------------------------------
WingStoneMapWin *__cdecl WingStoneMapWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  WingStoneMapWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    WingStoneMapWin::WingStoneMapWin((WingStoneMapWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (WingStoneMapWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005B21D0) --------------------------------------------------------
void *__thiscall WingStoneMapWin::_scalar_deleting_destructor_(WingStoneMapWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  WingStoneMapWin::_WingStoneMapWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005B2200) --------------------------------------------------------
void __thiscall WingStoneWin::OnCmdPlaceMemoryList(WingStoneWin *this)
{
  PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xECu, 0, 0);
}

//----- (005B2220) --------------------------------------------------------
void __thiscall WingStoneWin::SetFirstGoddessWingUse(WingStoneWin *this, bool b)
{
  this->m_bFirstGoddessWingUse = b;
}

//----- (005B2230) --------------------------------------------------------
void __thiscall WingStoneWin::OnCmdClose(WingStoneWin *this)
{
  WingStoneWin *v1; // esi@1

  v1 = this;
  InvWin::SetLock(*((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + this->m_uiLockInvPos + 87), 0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
  if ( (unsigned __int8)(*((int (**)(void))v1->baseclass_0.m_pkFrameWork[17].baseclass_0.vfptr->SetMsgHooker + 65))() )
    GameFrameWork::CloseWingStoneMapWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (005B2290) --------------------------------------------------------
void __thiscall WingStoneWin::SetLockInvPos(WingStoneWin *this, unsigned int uiInvPos)
{
  this->m_uiLockInvPos = uiInvPos;
  InvWin::SetLock(*((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + uiInvPos + 87), 1);
}

//----- (005B22C0) --------------------------------------------------------
void __thiscall WingStoneWin::CloseWingStoneWin(WingStoneWin *this)
{
  InvWin::SetLock(*((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + this->m_uiLockInvPos + 87), 0);
}

//----- (005B22F0) --------------------------------------------------------
void __thiscall WingStoneWin::_WingStoneWin(WingStoneWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WingStoneWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WingStoneWin::_vftable_;
  this->m_pkItemUseExposition = 0;
  this->m_pkChoicePlace = 0;
  this->m_pkPopupMenuWin = 0;
  this->m_pkEditWin = 0;
  this->m_pkItemIconWin = 0;
  this->m_pkPgWinCloseBut = 0;
  this->m_pkItemInfo = 0;
  this->m_uiDescript = 0;
  _eh_vector_destructor_iterator_(
    this->m_apkTextWin,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 9B2B9C: using guessed type int (__stdcall *WingStoneWin___vftable_)(int uiFlags);
// 9B2BBC: using guessed type int (__thiscall *WingStoneWin___vftable_)(void *p, char);

//----- (005B23A0) --------------------------------------------------------
void __thiscall WingStoneWin::OnCmdFlying(WingStoneWin *this)
{
  WingStoneWin *v1; // ebx@1
  char *v2; // edi@7

  v1 = this;
  if ( this->m_bCheckMemory == 1 )
  {
    if ( *TextData::Get(0x3E4F2E49u) )
    {
      v2 = TextData::Get(0x3E4F2E49u);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v2,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v2,
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        v2,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      v1->m_bCheckMemory = 0;
    }
    else
    {
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          "Unknown Text",
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            "Unknown Text",
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        "Unknown Text",
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      v1->m_bCheckMemory = 0;
    }
  }
  else
  {
    GameFrameWork::On_NC_MAP_WING_FLY_REQ((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
    InvWin::SetLock(*((InvWin **)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v1->m_uiLockInvPos + 87), 0);
    if ( v1->m_bCheckOpenMap )
      GameFrameWork::CloseWingStoneMapWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (005B24C0) --------------------------------------------------------
void __thiscall WingStoneWin::OnCmdPosiotionMemory(WingStoneWin *this)
{
  WingStoneWin *v1; // esi@1
  Name3 *v2; // eax@1
  int v3; // esi@3
  int v4; // esi@7
  char *v5; // edi@7

  v1 = this;
  v2 = User::GetMainCharLoginMapName(&g_kUser);
  if ( MapInfoTab::GetByMapName(v2)->KingdomMap == 1 )
  {
    if ( *TextData::Get(0x68A78683u) )
    {
      v4 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v5 = TextData::Get(0x68A78683u);
      if ( *(_DWORD *)(v4 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
        if ( *(_DWORD *)(v4 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
    }
    else
    {
      v3 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      if ( *(_DWORD *)(v3 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v3 + 4) + 4))(25, "Unknown Text", v3);
        if ( *(_DWORD *)(v3 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v3 + 4) + 20))(25, "Unknown Text", v3);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, "Unknown Text", v3);
    }
  }
  else
  {
    GameFrameWork::On_NC_MAP_WING_SAVE_REQ((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
    InvWin::SetLock(*((InvWin **)v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID + v1->m_uiLockInvPos + 87), 0);
  }
}

//----- (005B25C0) --------------------------------------------------------
void __thiscall WingStoneWin::ChoiceList(WingStoneWin *this, unsigned int uiParam)
{
  WingStoneWin *v2; // esi@1
  int v3; // eax@2
  char v4; // cl@3
  char *v5; // eax@4
  int v6; // ecx@4
  bool v7; // cf@5
  unsigned __int8 v8; // dl@7
  int v9; // eax@9
  int v10; // eax@11
  char v11; // cl@12
  char *v12; // eax@13
  int v13; // ecx@13
  unsigned __int8 v14; // dl@16
  int v15; // eax@20
  char v16; // cl@21
  char *v17; // eax@22
  int v18; // ecx@22
  unsigned __int8 v19; // dl@25
  int v20; // eax@29
  char v21; // cl@30
  char *v22; // eax@31
  int v23; // ecx@31
  unsigned __int8 v24; // dl@34
  int v25; // eax@38
  char v26; // cl@39
  char *v27; // eax@40
  int v28; // ecx@40
  unsigned __int8 v29; // dl@43
  char temp[256]; // [sp+8h] [bp-104h]@3
  unsigned int v31; // [sp+108h] [bp-4h]@1
  int v32; // [sp+10Ch] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v2 = this;
  if ( uiParam )
  {
    switch ( uiParam )
    {
      case 1u:
        this->m_uiMemorySlot = PopupMenuTemplate::ms_uiWingStoneMemorySlot1;
        v10 = 0;
        do
        {
          v11 = LOBYTE((&PopupMenuTemplate::ms_acChoiceMapNameSlot1)[v10]);
          temp[v10++] = v11;
        }
        while ( v11 );
        ((void (__stdcall *)(_DWORD))v2->m_pkChoicePlace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(temp);
        v2->m_bFirstGoddessWingUse = 1;
        v2->m_smiMapID = PopupMenuTemplate::ms_smiMapID1;
        v12 = TextData::Get(0x9BEBE5D9u);
        v13 = (int)temp;
        while ( 1 )
        {
          v7 = *(_BYTE *)v13 < (unsigned __int8)*v12;
          if ( *(_BYTE *)v13 != *v12 )
            break;
          if ( *(_BYTE *)v13 )
          {
            v14 = *(_BYTE *)(v13 + 1);
            v7 = v14 < v12[1];
            if ( v14 != v12[1] )
              goto LABEL_46;
            v13 += 2;
            v12 += 2;
            if ( v14 )
              continue;
          }
          v9 = 0;
          goto LABEL_47;
        }
        break;
      case 2u:
        this->m_uiMemorySlot = PopupMenuTemplate::ms_uiWingStoneMemorySlot2;
        v15 = 0;
        do
        {
          v16 = LOBYTE((&PopupMenuTemplate::ms_acChoiceMapNameSlot2)[v15]);
          temp[v15++] = v16;
        }
        while ( v16 );
        ((void (__stdcall *)(_DWORD))v2->m_pkChoicePlace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(temp);
        v2->m_bFirstGoddessWingUse = 1;
        v2->m_smiMapID = PopupMenuTemplate::ms_smiMapID2;
        v17 = TextData::Get(0x9BEBE5D9u);
        v18 = (int)temp;
        while ( 1 )
        {
          v7 = *(_BYTE *)v18 < (unsigned __int8)*v17;
          if ( *(_BYTE *)v18 != *v17 )
            break;
          if ( *(_BYTE *)v18 )
          {
            v19 = *(_BYTE *)(v18 + 1);
            v7 = v19 < v17[1];
            if ( v19 != v17[1] )
              goto LABEL_46;
            v18 += 2;
            v17 += 2;
            if ( v19 )
              continue;
          }
          v9 = 0;
          goto LABEL_47;
        }
        break;
      case 3u:
        this->m_uiMemorySlot = PopupMenuTemplate::ms_uiWingStoneMemorySlot3;
        v20 = 0;
        do
        {
          v21 = LOBYTE((&PopupMenuTemplate::ms_acChoiceMapNameSlot3)[v20]);
          temp[v20++] = v21;
        }
        while ( v21 );
        ((void (__stdcall *)(_DWORD))v2->m_pkChoicePlace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(temp);
        v2->m_bFirstGoddessWingUse = 1;
        v2->m_smiMapID = PopupMenuTemplate::ms_smiMapID3;
        v22 = TextData::Get(0x9BEBE5D9u);
        v23 = (int)temp;
        while ( 1 )
        {
          v7 = *(_BYTE *)v23 < (unsigned __int8)*v22;
          if ( *(_BYTE *)v23 != *v22 )
            break;
          if ( *(_BYTE *)v23 )
          {
            v24 = *(_BYTE *)(v23 + 1);
            v7 = v24 < v22[1];
            if ( v24 != v22[1] )
              goto LABEL_46;
            v23 += 2;
            v22 += 2;
            if ( v24 )
              continue;
          }
          v9 = 0;
          goto LABEL_47;
        }
        break;
      default:
        if ( uiParam != 4 )
          return;
        this->m_uiMemorySlot = PopupMenuTemplate::ms_uiWingStoneMemorySlot4;
        v25 = 0;
        do
        {
          v26 = LOBYTE((&PopupMenuTemplate::ms_acChoiceMapNameSlot4)[v25]);
          temp[v25++] = v26;
        }
        while ( v26 );
        ((void (__stdcall *)(_DWORD))v2->m_pkChoicePlace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(temp);
        v2->m_bFirstGoddessWingUse = 1;
        v2->m_smiMapID = PopupMenuTemplate::ms_smiMapID4;
        v27 = TextData::Get(0x9BEBE5D9u);
        v28 = (int)temp;
        while ( 1 )
        {
          v7 = *(_BYTE *)v28 < (unsigned __int8)*v27;
          if ( *(_BYTE *)v28 != *v27 )
            break;
          if ( *(_BYTE *)v28 )
          {
            v29 = *(_BYTE *)(v28 + 1);
            v7 = v29 < v27[1];
            if ( v29 != v27[1] )
              goto LABEL_46;
            v28 += 2;
            v27 += 2;
            if ( v29 )
              continue;
          }
          v9 = 0;
          goto LABEL_47;
        }
        break;
    }
  }
  else
  {
    this->m_uiMemorySlot = PopupMenuTemplate::ms_uiWingStoneMemorySlot0;
    v3 = 0;
    do
    {
      v4 = LOBYTE((&PopupMenuTemplate::ms_acChoiceMapNameSlot0)[v3]);
      temp[v3++] = v4;
    }
    while ( v4 );
    ((void (__stdcall *)(_DWORD))v2->m_pkChoicePlace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(temp);
    v2->m_bFirstGoddessWingUse = 1;
    v2->m_smiMapID = PopupMenuTemplate::ms_smiMapID0;
    v5 = TextData::Get(0x9BEBE5D9u);
    v6 = (int)temp;
    while ( 1 )
    {
      v7 = *(_BYTE *)v6 < (unsigned __int8)*v5;
      if ( *(_BYTE *)v6 != *v5 )
        break;
      if ( *(_BYTE *)v6 )
      {
        v8 = *(_BYTE *)(v6 + 1);
        v7 = v8 < v5[1];
        if ( v8 != v5[1] )
          break;
        v6 += 2;
        v5 += 2;
        if ( v8 )
          continue;
      }
      v9 = 0;
      goto LABEL_47;
    }
  }
LABEL_46:
  v9 = -v7 - (v7 - 1);
LABEL_47:
  if ( !v9 )
    v2->m_bCheckMemory = 1;
}
// A7CE28: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot0;
// A7CE2C: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot1;
// A7CE30: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot2;
// A7CE34: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot3;
// A7CE38: using guessed type unsigned int PopupMenuTemplate__ms_uiWingStoneMemorySlot4;
// A7CE3C: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID0;
// A7CE40: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID1;
// A7CE44: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID2;
// A7CE48: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID3;
// A7CE4C: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID4;
// A85C00: using guessed type int __security_cookie;
// A98B40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot4;
// A98C40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot3;
// A98D40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot2;
// A98E40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot1;
// A98F40: using guessed type char *PopupMenuTemplate__ms_acChoiceMapNameSlot0;

//----- (005B2910) --------------------------------------------------------
void __thiscall WingStoneWin::WingStoneWin(WingStoneWin *this)
{
  WingStoneWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WingStoneWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WingStoneWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_apkTextWin,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_dMapX = 0.0;
  v1->m_dMapY = 0.0;
  v1->m_pkItemUseExposition = 0;
  v1->m_pkItemIconWin = 0;
  v1->m_pkChoicePlace = 0;
  v1->m_pkPopupMenuWin = 0;
  v1->m_pkEditWin = 0;
  v1->m_pkPgWinCloseBut = 0;
  v1->m_pkItemInfo = 0;
  v1->m_uiLockInvPos = 0;
  *(_DWORD *)&v1->m_bCheckPossibility = 0;
  v1->m_uiMemorySlot = 0;
  v1->WingStoneID = 30068;
  v1->m_smiMapID = 0;
}
// 9B2B9C: using guessed type int (__stdcall *WingStoneWin___vftable_)(int uiFlags);
// 9B2BBC: using guessed type int (__thiscall *WingStoneWin___vftable_)(void *p, char);

//----- (005B29E0) --------------------------------------------------------
WingStoneWin *__cdecl WingStoneWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  WingStoneWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A0u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    WingStoneWin::WingStoneWin((WingStoneWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (WingStoneWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005B2B10) --------------------------------------------------------
bool __thiscall WingStoneWin::Create(WingStoneWin *this, PgFrameWork *pkFrameWork)
{
  WingStoneWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@10
  PgSprData *v9; // eax@10
  PgFont *v10; // eax@11
  PgWinText *v11; // ebx@11
  NiRefObjectVtbl *v12; // edx@12
  char *v13; // eax@13
  PgSprData *v14; // ebx@14
  PgSprData *v15; // ST40_4@14
  unsigned int v16; // ebx@14
  PgSprData *v17; // eax@14
  unsigned __int16 *v18; // eax@14
  char *v19; // eax@14
  int v20; // eax@18
  unsigned int v21; // ebx@18
  PgFont *v22; // eax@18
  PgWinText *v23; // eax@18
  char *v24; // eax@19
  PgWinText *v25; // ecx@19
  NiRefObjectVtbl *v26; // ebx@21
  PgWinText *v27; // ecx@23
  void *(__thiscall *v28)(NiRefObject *, unsigned int); // edx@23
  char *v29; // eax@25
  NiRefObjectVtbl *v30; // ebx@27
  D3DXCOLOR *v31; // eax@27
  PgSprData *v32; // ebx@27
  NiPointer<PgSprData::PgHitTester> *v33; // ecx@27
  unsigned int v34; // ebx@27
  PgFont *v35; // eax@27
  PgWinText *v36; // eax@27
  PgSprData *v37; // ebx@27
  NiPointer<PgSprData::PgHitTester> *v38; // edx@27
  unsigned int v39; // ebx@27
  PgFont *v40; // eax@27
  PgWinText *v41; // ebx@27
  NiRefObjectVtbl *v42; // edx@28
  char *v43; // eax@29
  PgSprData *v44; // ebx@30
  NiPointer<PgSprData::PgHitTester> *v45; // edx@30
  unsigned int v46; // ebx@30
  PgFont *v47; // eax@30
  PgWinText *v48; // ebx@30
  NiRefObjectVtbl *v49; // edx@31
  char *v50; // eax@32
  PgSprData *v51; // ebx@33
  NiPointer<PgSprData::PgHitTester> *v52; // edx@33
  unsigned int v53; // ebx@33
  PgFont *v54; // eax@33
  PgWinText *v55; // edi@33
  NiRefObjectVtbl *v56; // ebx@35
  char *v57; // eax@35
  char *v58; // [sp+50h] [bp-48h]@12
  unsigned int v59; // [sp+50h] [bp-48h]@21
  char *v60; // [sp+50h] [bp-48h]@23
  char v61[4]; // [sp+50h] [bp-48h]@28
  char *v62; // [sp+50h] [bp-48h]@31
  D3DXCOLOR result; // [sp+64h] [bp-34h]@27
  unsigned int iYOff; // [sp+74h] [bp-24h]@10
  unsigned int uiWidth; // [sp+78h] [bp-20h]@10
  unsigned int uiHeight; // [sp+7Ch] [bp-1Ch]@10
  NiPointer<NiNode> spNode; // [sp+80h] [bp-18h]@1
  int uiLeft; // [sp+84h] [bp-14h]@4
  unsigned int uiTop; // [sp+88h] [bp-10h]@4
  int v70; // [sp+94h] [bp-4h]@1
  NiRefObjectVtbl *pkItema; // [sp+A0h] [bp+8h]@13
  Item *pkItem; // [sp+A0h] [bp+8h]@14
  unsigned int pkItemb; // [sp+A0h] [bp+8h]@27
  unsigned int pkItemc; // [sp+A0h] [bp+8h]@27
  NiRefObjectVtbl *pkItemd; // [sp+A0h] [bp+8h]@29
  unsigned int pkIteme; // [sp+A0h] [bp+8h]@30
  NiRefObjectVtbl *pkItemf; // [sp+A0h] [bp+8h]@32
  unsigned int pkItemg; // [sp+A0h] [bp+8h]@33

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v70 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GoddessWing.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, (int *)&uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "WingStoneWin", 0)
    || (v8 = uiLeft,
        iYOff = uiTop,
        v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, (int *)&uiTop, 0),
        PgWinSpr::CreateWin(uiLeft - v8, uiTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        !PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "WinTitle",
           &uiLeft,
           (int *)&uiTop,
           &uiWidth,
           &uiHeight)) )
  {
    v6 = spNode.m_pObject;
    v70 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v10 = Font::Get(0);
  v11 = PgWinText::CreateWin(uiLeft - v8, uiTop, uiWidth, uiHeight, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v11,
    5u);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v11,
    (unsigned int)&Color::m_kDxWinTitleColor);
  if ( TextData::Get(0xF00AF4F0u) )
  {
    pkItema = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = TextData::Get(0xF00AF4F0u);
    v12 = pkItema;
    v58 = v13;
  }
  else
  {
    v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v58 = "GoddessWingWin";
  }
  v12[118].__vecDelDtor((NiRefObject *)v11, (unsigned int)v58);
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v11,
    0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  v15 = v14;
  v16 = iYOff;
  PgWinBut::CreateWin(uiLeft - v8, uiTop - iYOff, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 5u, 0, 0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Slot00", &uiLeft, (int *)&uiTop, &uiWidth, &uiHeight);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Slot00", &uiLeft, (int *)&uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - iYOff, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkItemIconWin = ItemIcon::CreateWin(uiLeft - v8, uiTop - iYOff, &v2->baseclass_0.baseclass_0.baseclass_0);
  v18 = (unsigned __int16 *)ItemInfoTab::GetByInxName("WingStone01_1");
  v2->m_pkItemInfo = (ItemInfo *)v18;
  pkItem = Inventory::GetItemByID(&g_kInventory, *v18);
  ItemIcon::SetItemAsID(v2->m_pkItemIconWin, v2->WingStoneID);
  v19 = fs("%d\n");
  iYOff = (unsigned int)v2->m_pkItemIconWin;
  (*(void (__stdcall **)(char *))(**(_DWORD **)(iYOff + 380) + 472))(v19);
  (*(void (__stdcall **)(signed int))(**(_DWORD **)(iYOff + 380) + 256))(1);
  if ( pkItem )
    ItemIcon::SetItem(v2->m_pkItemIconWin, pkItem, 1);
  if ( !PgUtil::GetTriShapeRect(
          &spNode.m_pObject->baseclass_0,
          "Textbox_Exp",
          &uiLeft,
          (int *)&uiTop,
          &uiWidth,
          &uiHeight) )
  {
    v70 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  iYOff = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Textbox_Exp", &uiLeft, (int *)&uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v16, (PgSprData *)iYOff, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v20 = **(_DWORD **)(iYOff + 36);
  v21 = *(_DWORD *)(v20 + 24);
  iYOff = *(_DWORD *)(v20 + 20);
  v22 = Font::Get(0);
  v23 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, iYOff, v21, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkItemUseExposition = v23;
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v23,
    5u);
  if ( !pkItem )
  {
    if ( !*TextData::Get(0x37388C78u) )
    {
      v27 = v2->m_pkItemUseExposition;
      v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
      v60 = "Unknown Text";
LABEL_26:
      v28(&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)v60);
      goto LABEL_27;
    }
    v26 = v2->m_pkItemUseExposition->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v59 = 926452856;
LABEL_25:
    v29 = TextData::Get(v59);
    v27 = v2->m_pkItemUseExposition;
    v28 = v26[118].__vecDelDtor;
    v60 = v29;
    goto LABEL_26;
  }
  v24 = TextData::Get(0x91A78CD3u);
  v25 = v2->m_pkItemUseExposition;
  if ( *v24 )
  {
    v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v59 = -1851290413;
    goto LABEL_25;
  }
  ((void (__stdcall *)(_DWORD))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("Unknown Text");
LABEL_27:
  v30 = v2->m_pkItemUseExposition->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = Color::GetDxColor(&result, -1, -1, -1, -1);
  v30[117].__vecDelDtor((NiRefObject *)v2->m_pkItemUseExposition, (unsigned int)v31);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ListNor", &uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "ListClick");
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "ListOver");
  PgWinBut::CreateWin(uiLeft, uiTop, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v33 = v32->m_akHitTester.m_pBase;
  v34 = v33->m_pObject->m_uiHeight;
  pkItemb = v33->m_pObject->m_uiWidth;
  v35 = Font::Get(0);
  v36 = PgWinText::CreateWin(uiLeft, uiTop + 3, pkItemb, v34, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkChoicePlace = v36;
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v36,
    0);
  v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v37, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v37, &spNode.m_pObject->baseclass_0, "BtnOver02");
  PgWinBut::CreateWin(uiLeft - v8, uiTop, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  v38 = v37->m_akHitTester.m_pBase;
  v39 = v38->m_pObject->m_uiHeight;
  pkItemc = v38->m_pObject->m_uiWidth;
  v40 = Font::Get(0);
  v41 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, pkItemc, v39, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v41,
    5u);
  if ( *TextData::Get(0x9DBEF9F3u) )
  {
    pkItemd = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v43 = TextData::Get(0x9DBEF9F3u);
    v42 = pkItemd;
    *(_DWORD *)v61 = v43;
  }
  else
  {
    v42 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    *(_DWORD *)v61 = "Fly";
  }
  v42[118].__vecDelDtor((NiRefObject *)v41, *(_DWORD *)v61);
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v41,
    0);
  v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor01", &uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v44, &spNode.m_pObject->baseclass_0, "BtnClick01");
  PgSprData::Add(v44, &spNode.m_pObject->baseclass_0, "BtnOver01");
  PgWinBut::CreateWin(uiLeft - v8, uiTop, v44, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
  v45 = v44->m_akHitTester.m_pBase;
  v46 = v45->m_pObject->m_uiHeight;
  pkIteme = v45->m_pObject->m_uiWidth;
  v47 = Font::Get(0);
  v48 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, pkIteme, v46, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v48,
    5u);
  if ( *TextData::Get(0xA9A2E0DEu) )
  {
    pkItemf = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v50 = TextData::Get(0xA9A2E0DEu);
    v49 = pkItemf;
    v62 = v50;
  }
  else
  {
    v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v62 = "Save Position";
  }
  v49[118].__vecDelDtor((NiRefObject *)v48, (unsigned int)v62);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v48,
    0);
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v51, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v51, &spNode.m_pObject->baseclass_0, "BtnOver03");
  PgWinBut::CreateWin(uiLeft - v8, uiTop, v51, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
  v52 = v51->m_akHitTester.m_pBase;
  v53 = v52->m_pObject->m_uiHeight;
  pkItemg = v52->m_pObject->m_uiWidth;
  v54 = Font::Get(0);
  v55 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, pkItemg, v53, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v55,
    5u);
  if ( *TextData::Get(0xF2073F2Eu) )
  {
    v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v57 = TextData::Get(0xF2073F2Eu);
    v56[118].__vecDelDtor((NiRefObject *)v55, (unsigned int)v57);
  }
  else
  {
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v55,
      (unsigned int)"cancel");
  }
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v55,
    0);
  ((void (__thiscall *)(WingStoneWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
  v70 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B3350) --------------------------------------------------------
void __thiscall WingStoneWin::InitInformation(WingStoneWin *this)
{
  WingStoneWin *v1; // ebx@1
  unsigned __int16 *v2; // eax@2
  Item *v3; // eax@2
  const unsigned __int16 v4; // si@4
  PgWinText *v5; // esi@5
  NiRefObjectVtbl *v6; // edi@5
  char *v7; // eax@5
  char *v8; // eax@5
  char *v9; // eax@6
  char *v10; // edx@6
  char v11; // cl@7
  char *v12; // eax@8
  char *v13; // edx@8
  char v14; // cl@9
  unsigned int v15; // eax@10
  void *v16; // edi@10
  char v17; // cl@11
  unsigned __int16 id; // [sp+4h] [bp-ACh]@3
  const unsigned __int16 v19; // [sp+7h] [bp-A9h]@4
  __int16 v20; // [sp+68h] [bp-48h]@3
  char v21; // [sp+6Ah] [bp-46h]@3
  char acText[32]; // [sp+6Ch] [bp-44h]@6
  char acText2[32]; // [sp+8Ch] [bp-24h]@8
  unsigned int v24; // [sp+ACh] [bp-4h]@1
  int v25; // [sp+B0h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v1 = this;
  if ( !this->m_bFirstGoddessWingUse )
  {
    v2 = (unsigned __int16 *)ItemInfoTab::GetByInxName("GoddessWing");
    v3 = Inventory::GetItemByID(&g_kInventory, *v2);
    if ( v3 )
    {
      memcpy(&id, &v3->m_kStruct, 0x64u);
      v20 = *(_WORD *)((char *)&v3->m_kStruct.itemattr.binditem.portal[9].y + 1);
      v21 = BYTE3(v3->m_kStruct.itemattr.binditem.portal[9].y);
      if ( (unsigned __int8)(*(_DWORD *)&id >> 16) )
      {
        v4 = v19;
        if ( v19 == -1 )
        {
          v5 = v1->m_pkChoicePlace;
          v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v7 = TextData::Get(0x4E3E2E25u);
          v8 = fs(v7);
          v6[118].__vecDelDtor((NiRefObject *)v5, (unsigned int)v8);
          v1->m_smiMapID = -1;
        }
        else
        {
          v9 = MapInfoTab::GetByMapName(v19)->Name;
          v10 = (char *)(acText - v9);
          do
          {
            v11 = *v9;
            v9[(_DWORD)v10] = *v9;
            ++v9;
          }
          while ( v11 );
          v1->m_smiMapID = v4;
          v12 = fs(" %d. ");
          v13 = (char *)(acText2 - v12);
          do
          {
            v14 = *v12;
            v12[(_DWORD)v13] = *v12;
            ++v12;
          }
          while ( v14 );
          v15 = strlen(acText) + 1;
          v16 = &acText[31];
          do
          {
            v17 = *((_BYTE *)v16 + 1);
            v16 = (char *)v16 + 1;
          }
          while ( v17 );
          memcpy(v16, acText, v15);
          ((void (__stdcall *)(_DWORD))v1->m_pkChoicePlace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acText2);
        }
        v1->m_uiMemorySlot = 0;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005B34B0) --------------------------------------------------------
void __thiscall WingStoneWin::SetMapCoordinate(WingStoneWin *this, unsigned __int16 id)
{
  WingStoneWin *v2; // ebx@1
  unsigned __int16 *v3; // eax@1
  Item *v4; // eax@1
  signed int v5; // eax@2
  char *v6; // ecx@3
  int v7; // eax@8
  double v8; // st7@8
  unsigned int v9; // eax@8
  unsigned int v10; // [sp+8h] [bp-6Ch]@2
  int v11; // [sp+Dh] [bp-67h]@8
  int v12; // [sp+11h] [bp-63h]@8
  __int16 v13; // [sp+6Ch] [bp-8h]@2
  char v14; // [sp+6Eh] [bp-6h]@2
  unsigned int v15; // [sp+70h] [bp-4h]@1
  int v16; // [sp+74h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v2 = this;
  v3 = (unsigned __int16 *)ItemInfoTab::GetByInxName("GoddessWing");
  v4 = Inventory::GetItemByID(&g_kInventory, *v3);
  if ( v4 )
  {
    memcpy(&v10, &v4->m_kStruct, 0x64u);
    v13 = *(_WORD *)((char *)&v4->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v14 = BYTE3(v4->m_kStruct.itemattr.binditem.portal[9].y);
    v5 = 0;
    if ( (unsigned __int8)(v10 >> 16) )
    {
      v6 = (char *)&v10 + 3;
      while ( v5 != v2->m_uiMemorySlot || id != *(_WORD *)v6 )
      {
        ++v5;
        v6 += 10;
        if ( v5 >= BYTE2(v10) )
          return;
      }
      v7 = 10 * v5;
      v8 = (double)*(unsigned int *)((char *)&v11 + v7);
      v9 = *(int *)((char *)&v12 + v7);
      v2->m_dMapX = v8;
      v2->m_dMapY = (double)v9;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005B3590) --------------------------------------------------------
void __thiscall WingStoneWin::SearchMapID(WingStoneWin *this, unsigned int MemorySlot)
{
  WingStoneWin *v2; // ebx@1
  unsigned __int16 *v3; // eax@1
  Item *v4; // eax@1
  signed int v5; // eax@2
  unsigned __int16 v6; // cx@3
  unsigned __int16 v7; // dx@3
  unsigned __int16 v8; // si@3
  unsigned int v9; // [sp+4h] [bp-6Ch]@2
  unsigned __int16 v10; // [sp+11h] [bp-5Fh]@7
  unsigned __int16 v11; // [sp+1Bh] [bp-55h]@3
  unsigned __int16 v12; // [sp+25h] [bp-4Bh]@3
  unsigned __int16 v13; // [sp+2Fh] [bp-41h]@3
  __int16 v14; // [sp+68h] [bp-8h]@2
  char v15; // [sp+6Ah] [bp-6h]@2
  unsigned int v16; // [sp+6Ch] [bp-4h]@1
  int v17; // [sp+70h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  v3 = (unsigned __int16 *)ItemInfoTab::GetByInxName("GoddessWing");
  v4 = Inventory::GetItemByID(&g_kInventory, *v3);
  if ( v4 )
  {
    memcpy(&v9, &v4->m_kStruct, 0x64u);
    v14 = *(_WORD *)((char *)&v4->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v15 = BYTE3(v4->m_kStruct.itemattr.binditem.portal[9].y);
    v5 = 0;
    if ( (unsigned __int8)(v9 >> 16) )
    {
      v6 = v13;
      v7 = v12;
      v8 = v11;
      do
      {
        if ( v5 == MemorySlot )
        {
          switch ( v5 )
          {
            case 0:
              PopupMenuTemplate::ms_smiMapID0 = *(_WORD *)((char *)&v9 + 3);
              v2->m_smiMapID = *(_WORD *)((char *)&v9 + 3);
              break;
            case 1:
              PopupMenuTemplate::ms_smiMapID1 = v10;
              v2->m_smiMapID = v10;
              break;
            case 2:
              PopupMenuTemplate::ms_smiMapID2 = v8;
              v2->m_smiMapID = v8;
              break;
            case 3:
              PopupMenuTemplate::ms_smiMapID3 = v7;
              v2->m_smiMapID = v7;
              break;
            case 4:
              PopupMenuTemplate::ms_smiMapID4 = v6;
              v2->m_smiMapID = v6;
              break;
            default:
              break;
          }
        }
        ++v5;
      }
      while ( v5 < BYTE2(v9) );
    }
  }
}
// A7CE3C: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID0;
// A7CE40: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID1;
// A7CE44: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID2;
// A7CE48: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID3;
// A7CE4C: using guessed type unsigned __int16 PopupMenuTemplate__ms_smiMapID4;
// A85C00: using guessed type int __security_cookie;

//----- (005B3690) --------------------------------------------------------
void __thiscall WingStoneWin::OnCmdMapInfo(WingStoneWin *this)
{
  WingStoneWin *v1; // esi@1
  unsigned __int16 v2; // ax@1
  char *v3; // esi@2
  char *v4; // edi@2

  v1 = this;
  v2 = this->m_smiMapID;
  if ( v2 == -1 )
  {
    v3 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v4 = TextData::Get(0x3E4F2E49u);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
  else
  {
    WingStoneWin::SetMapCoordinate(this, v2);
    WingStoneMapWin::SetLoadMap(
      (WingStoneMapWin *)v1->baseclass_0.m_pkFrameWork[17].baseclass_0.vfptr,
      v1->m_smiMapID,
      v1->m_dMapX,
      v1->m_dMapY);
    if ( GameFrameWork::OpenWingStoneMapWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork) )
      v1->m_bCheckOpenMap = 1;
  }
}

//----- (005B3750) --------------------------------------------------------
void __thiscall WingStoneWin::UpdateMeWin(WingStoneWin *this, float fCurTime)
{
  WingStoneWin *v2; // ebx@1
  unsigned __int16 *v3; // edx@1
  Item *v4; // eax@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@3
  char *v6; // eax@6
  ItemIcon *v7; // esi@6
  Name3 *v8; // eax@10
  char *v9; // eax@10
  char *v10; // edx@10
  char v11; // cl@11
  char *v12; // eax@12
  char *v13; // edx@12
  char v14; // cl@13
  unsigned int v15; // eax@14
  void *v16; // edi@14
  char v17; // cl@15
  PgFrameWork *v18; // edx@16
  signed int v19; // [sp-4h] [bp-50h]@3
  char acText[32]; // [sp+8h] [bp-44h]@10
  char acText2[32]; // [sp+28h] [bp-24h]@12
  unsigned int v22; // [sp+48h] [bp-4h]@1
  int v23; // [sp+4Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  v3 = (unsigned __int16 *)this->m_pkItemInfo;
  this->m_pkPopupMenuWin = (PopupMenuWin *)this->baseclass_0.m_pkFrameWork[26].m_kMsgQ.m_uiTail;
  v4 = Inventory::GetItemByID(&g_kInventory, *v3);
  if ( !v4 )
  {
    if ( !*TextData::Get(0x37388C78u) )
      ((void (__stdcall *)(_DWORD))v2->m_pkItemUseExposition->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("Unknown Text");
    ItemIcon::SetItemAsID(v2->m_pkItemIconWin, v2->WingStoneID);
    v6 = fs("%d\n");
    v7 = v2->m_pkItemIconWin;
    ((void (__stdcall *)(char *))v7->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v6);
    v5 = v7->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v19 = 1;
    goto LABEL_7;
  }
  ItemIcon::SetItem(v2->m_pkItemIconWin, v4, 1);
  if ( !*TextData::Get(0x91A78CD3u) )
  {
    v5 = v2->m_pkItemUseExposition->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
    v19 = (signed int)"Unknown Text";
LABEL_7:
    ((void (__stdcall *)(signed int))v5)(v19);
  }
  if ( v2->m_bCheckPossibility == 1 && LOBYTE(v2->baseclass_0.m_pkFrameWork[4].baseclass_0.vfptr) )
  {
    v8 = User::GetMainCharLoginMapName(&g_kUser);
    v9 = MapInfoTab::GetByMapName(v8)->Name;
    v10 = (char *)(acText - v9);
    do
    {
      v11 = *v9;
      v9[(_DWORD)v10] = *v9;
      ++v9;
    }
    while ( v11 );
    v12 = fs(" %d. ");
    v13 = (char *)(acText2 - v12);
    do
    {
      v14 = *v12;
      v12[(_DWORD)v13] = *v12;
      ++v12;
    }
    while ( v14 );
    v15 = strlen(acText) + 1;
    v16 = &acText[31];
    do
    {
      v17 = *((_BYTE *)v16 + 1);
      v16 = (char *)v16 + 1;
    }
    while ( v17 );
    memcpy(v16, acText, v15);
    ((void (__stdcall *)(_DWORD))v2->m_pkChoicePlace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acText2);
    WingStoneWin::SearchMapID(v2, v2->m_uiMemorySlot);
    v18 = v2->baseclass_0.m_pkFrameWork;
    v2->m_bCheckPossibility = 0;
    LOBYTE(v18[4].baseclass_0.vfptr) = 0;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005B3920) --------------------------------------------------------
void __thiscall WingStoneWin::OnCommand(WingStoneWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 1u:
      PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xECu, 0, 0);
      break;
    case 2u:
      WingStoneWin::OnCmdFlying(this);
      break;
    case 3u:
      WingStoneWin::OnCmdPosiotionMemory(this);
      break;
    case 4u:
      WingStoneWin::OnCmdMapInfo(this);
      break;
    case 5u:
      WingStoneWin::OnCmdClose(this);
      break;
    default:
      return;
  }
}

//----- (005B3990) --------------------------------------------------------
void *__thiscall WingStoneWin::_scalar_deleting_destructor_(WingStoneWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  WingStoneWin::_WingStoneWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005B39D0) --------------------------------------------------------
void __thiscall WorldMapWin::DirectMessage(WorldMapWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  WorldMapWin *v4; // esi@1
  GameFrameWork *v5; // ecx@1

  v4 = this;
  v5 = (GameFrameWork *)LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]);
  if ( v5
    && SLODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) <= 36
    && iMsgTag == 27
    && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
      GameFrameWork::NcItemMaplinkScrollReq(
        v5,
        SLODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]));
    v4->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
  }
}

//----- (005B3A10) --------------------------------------------------------
bool __thiscall WorldMapWin::Create(WorldMapWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // edi@1
  PgFrameWork *v3; // ebx@1
  NiTexturePalette *v4; // esi@1
  char *v5; // eax@3
  NiNode *v6; // eax@3
  PgSprData *v7; // eax@4
  unsigned int v8; // esi@5
  int v9; // edi@5
  signed int v10; // ebx@5
  char *v11; // ST10_4@6
  char *v12; // ST0C_4@6
  char *v13; // eax@6
  D3DXCOLOR v14; // ST08_16@7
  PgWinText *v15; // eax@7
  PgWin *v16; // ebx@7
  NiNode *v17; // esi@11
  signed int v19; // esi@15
  int v20; // edi@15
  PgWinSpr *v21; // eax@17
  char *v22; // ST10_4@19
  char *v23; // eax@19
  char *v24; // eax@19
  void *v25; // ebx@20
  NiObject *v26; // eax@21
  NiRefObjectVtbl *v27; // eax@24
  UIUtil ui; // [sp+18h] [bp-40h]@5
  float v29; // [sp+2Ch] [bp-2Ch]@24
  float v30; // [sp+30h] [bp-28h]@24
  float v31; // [sp+34h] [bp-24h]@24
  int uiLeft; // [sp+38h] [bp-20h]@4
  int uiTop; // [sp+3Ch] [bp-1Ch]@4
  NiPointer<NiPixelData> ptr; // [sp+40h] [bp-18h]@17
  PgWin *pkParent; // [sp+44h] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+48h] [bp-10h]@1
  int v37; // [sp+54h] [bp-4h]@1

  v2 = (PgWinFrame *)this;
  pkParent = (PgWin *)this;
  spNode.m_pObject = 0;
  v3 = pkFrameWork;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v4 = dword_B70448;
  v37 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\WorldMap.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  v6 = spNode.m_pObject;
  if ( !spNode.m_pObject )
    goto LABEL_10;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v7, 0, v3, "WorldMapWin", 0) )
  {
LABEL_9:
    v6 = spNode.m_pObject;
LABEL_10:
    v37 = -1;
    if ( v6 )
    {
      v17 = v6;
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v17 )
          v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
      }
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v37) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, uiLeft, uiTop);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Plane01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  v8 = 1;
  v9 = (int)&v2[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_ppkExtra;
  v10 = 36;
  do
  {
    v11 = fs("WM%.2dClick");
    v12 = fs("WM%.2dOver");
    v13 = fs("WM%.2dNor");
    *(_DWORD *)v9 = UIUtil::CreateBtn(&ui, v8, v13, v12, v11, 0, 0);
    v9 += 4;
    ++v8;
    --v10;
  }
  while ( v10 );
  UIUtil::CreateCloseBtn(&ui, "ClsNor", "ClsOver", "ClsClick");
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = UIUtil::CreateTextNoSpr(&ui, "MapName", &byte_9B2DEE, COERCE_D3DXCOLOR(v14.r), 5u);
  v16 = pkParent;
  LODWORD(pkParent[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][1]) = v15;
  if ( !v15 )
  {
    LOBYTE(v37) = 0;
    UIUtil::_UIUtil(&ui);
    goto LABEL_9;
  }
  LODWORD(v16[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][2]) = UIUtil::CreateSpr(&ui, "Avatar01", 0);
  LODWORD(v16[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]) = UIUtil::CreateSpr(&ui, "Avatar02", 0);
  v19 = 0;
  v20 = (int)&v16[1].baseclass_0.m_kBound.m_kCenter.y;
  while ( 1 )
  {
    v21 = PgWinSpr::CreateWin(0, 0, 1u, 1u, v16, 0, 0);
    ptr.m_pObject = (NiPixelData *)v21;
    if ( v21 )
      InterlockedIncrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v37) = 2;
    NiPointer<NiActorManager>::operator_((NiPointer<NiPixelData> *)(v20 + 144), &ptr);
    LOBYTE(v37) = 1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&ptr);
    pkFrameWork = 0;
    ++v19;
    LOBYTE(v37) = 3;
    v22 = fs("WM%.2d.nif");
    v23 = Folder::Effect();
    v24 = Folder::Merge(v23, v22);
    PgUtil::LoadNodeNifFile(v24, (NiPointer<NiNode> *)&pkFrameWork, 0);
    if ( !pkFrameWork )
      break;
    v25 = operator new(0x44u);
    ptr.m_pObject = (NiPixelData *)v25;
    LOBYTE(v37) = 4;
    if ( v25 )
    {
      v26 = NiObject::Clone((NiObject *)pkFrameWork);
      SpEffect::SpEffect((SpEffect *)v25, (NiNode *)v26);
    }
    else
    {
      v26 = 0;
    }
    *(_DWORD *)v20 = v26;
    if ( v26 )
    {
      v27 = v26->baseclass_0.vfptr;
      v29 = 0.0;
      v30 = 0.0;
      *(float *)&v27[22].__vecDelDtor = 0.0;
      v31 = 1000.0;
      *(float *)&v27[23].__vecDelDtor = 0.0;
      *(float *)&v27[24].__vecDelDtor = 1000.0;
      *(_BYTE *)(*(_DWORD *)v20 + 66) = 1;
    }
    LOBYTE(v37) = 1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFrameWork);
    v20 += 4;
    if ( v19 >= 36 )
    {
      ((void (__cdecl *)(unsigned int, unsigned int, _DWORD, _DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.5);
      LOBYTE(v37) = 0;
      UIUtil::_UIUtil(&ui);
      v37 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      return 1;
    }
    v16 = pkParent;
  }
  LOBYTE(v37) = 1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkFrameWork);
  LOBYTE(v37) = 0;
  UIUtil::_UIUtil(&ui);
  v37 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 0;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B3DE0) --------------------------------------------------------
void __thiscall WorldMapWin::WorldMapLinkFail(WorldMapWin *this, unsigned __int16 nError, char nLevel)
{
  WorldMapWin *v3; // esi@1
  GameFrameWork *v4; // esi@5
  char *v5; // eax@5
  GameFrameWork *v6; // esi@6
  char *v7; // eax@6
  GameFrameWork *v8; // esi@8
  char *v9; // eax@8
  char *v10; // eax@8
  GameFrameWork *v11; // esi@10
  char *v12; // eax@10
  char *v13; // eax@10
  GameFrameWork *v14; // esi@13
  char *v15; // eax@13
  GameFrameWork *v16; // esi@15
  char *v17; // eax@15
  unsigned int v18; // [sp-8h] [bp-10h]@9
  unsigned int v19; // [sp-4h] [bp-Ch]@4

  v3 = this;
  MapInfoTab::GetByLinkIndex(this->m_TargetMap);
  if ( v3->m_TargetMap )
    SpEffect::Start(
      *((SpEffect **)&v3->m_pkMsgBox + v3->m_TargetMap),
      (NiNode *)&v3->m_apkEffect[v3->m_TargetMap + 35]->m_spEffect.m_pObject);
  switch ( nError )
  {
    case 0x3749u:
      v19 = -237123612;
      goto LABEL_15;
    case 0x374Au:
      v4 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v5 = TextData::Get(0x7FFED6DEu);
      GameFrameWork::AddSysMsg(v4, v5);
      return;
    case 0x374Bu:
      v6 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v7 = TextData::Get(0x85F7D6D1u);
      GameFrameWork::AddSysMsg(v6, v7);
      return;
    case 0x374Cu:
      v19 = -572080927;
      goto LABEL_15;
    case 0x374Du:
      v8 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v9 = TextData3::Get(0xF2DD093Fu);
      v10 = fs(v9);
      GameFrameWork::AddSysMsg(v8, v10);
      return;
    case 0x374Eu:
      v18 = -1900295449;
      goto LABEL_10;
    case 0x374Fu:
      v18 = -1900229913;
LABEL_10:
      v11 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v12 = TextData3::Get(v18);
      v13 = fs(v12);
      GameFrameWork::AddSysMsg(v11, v13);
      return;
    case 0x3750u:
      v19 = -421590220;
      goto LABEL_15;
    case 0x3751u:
      v14 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v15 = TextData::Get(0x226625A6u);
      GameFrameWork::AddSysMsg(v14, v15);
      break;
    case 0x3752u:
      v19 = -554973122;
LABEL_15:
      v16 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
      v17 = TextData3::Get(v19);
      GameFrameWork::AddSysMsg(v16, v17);
      break;
    default:
      return;
  }
}

//----- (005B3F70) --------------------------------------------------------
void __thiscall WorldMapWin::OnShowWin(WorldMapWin *this)
{
  WorldMapWin *v1; // esi@1
  Name3 *v2; // eax@1
  MapViewInfo *v3; // eax@1
  Name3 *v4; // eax@3
  Name3 *v5; // eax@4
  NiPoint2 *v6; // eax@4
  Name3 *v7; // eax@7
  NiPoint2 *v8; // eax@7
  PgFrameWork *v9; // eax@10
  Name3 result; // [sp+10h] [bp-Ch]@1

  v1 = this;
  v2 = World::GetMapName(&g_kWorld, &result);
  v3 = MapViewInfoTab::GetByMapName(v2);
  if ( v3 )
  {
    if ( v3->WorldMapView )
    {
      v4 = World::GetMapName(&g_kWorld, &result);
      if ( WorldMapAvatarInfoTab::GetByNormalDungeon(v4) )
      {
        ((void (__stdcall *)(_DWORD))v1->m_pkNormalAvatar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v5 = World::GetMapName(&g_kWorld, &result);
        v6 = WorldMapAvatarInfoTab::GetByAvatarPosition(v5);
        if ( v6 )
          PgUtil::SetXYTranslate(&v1->m_pkDungeonAvatar->baseclass_0.baseclass_0.baseclass_0, v6->x, v6->y);
        ((void (__stdcall *)(_DWORD))v1->m_pkDungeonAvatar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      else
      {
        ((void (__stdcall *)(_DWORD))v1->m_pkDungeonAvatar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v7 = World::GetMapName(&g_kWorld, &result);
        v8 = WorldMapAvatarInfoTab::GetByAvatarPosition(v7);
        if ( v8 )
          PgUtil::SetXYTranslate(&v1->m_pkNormalAvatar->baseclass_0.baseclass_0.baseclass_0, v8->x, v8->y);
        ((void (__stdcall *)(_DWORD))v1->m_pkNormalAvatar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
    }
    v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v9 )
      GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v9, BIL_MAP_5);
  }
}

//----- (005B40A0) --------------------------------------------------------
void __thiscall WorldMapWin::_WorldMapWin(WorldMapWin *this)
{
  WorldMapWin *v1; // ebx@1
  SpEffect *v2; // esi@2
  NiNode *v3; // edi@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // ST0C_4@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v5; // ST08_4@9
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+8h] [bp-14h]@1
  SpEffect **v7; // [sp+Ch] [bp-10h]@1
  int v8; // [sp+18h] [bp-4h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldMapWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldMapWin::_vftable_;
  v8 = 0;
  v7 = this->m_apkEffect;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)36;
  do
  {
    v2 = *v7;
    if ( *v7 )
    {
      NsEffect::_NsEffect(&v2->m_kEffect);
      LOBYTE(v8) = 3;
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
      v3 = v2->m_spEffect.m_pObject;
      LOBYTE(v8) = 2;
      if ( v3
        && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      operator delete(v2);
      *v7 = 0;
    }
    ++v7;
    --*(_DWORD *)&result;
  }
  while ( result );
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v8) = 5;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapUserLocationView,
    &result,
    v5,
    v4);
  operator delete(v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead);
  LOBYTE(v8) = 0;
  _eh_vector_destructor_iterator_(
    v1->m_pAttachEffect,
    4u,
    36,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v8 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B2EB0: using guessed type int (__stdcall *WorldMapWin___vftable_)(int uiFlags);
// 9B2ECC: using guessed type int (__thiscall *WorldMapWin___vftable_)(void *p, char);

//----- (005B41C0) --------------------------------------------------------
void __thiscall WorldMapWin::OnCommand(WorldMapWin *this, unsigned int wParam, int lParam)
{
  WorldMapWin *v3; // esi@1
  unsigned __int16 *v4; // edi@1
  MsgBox *v5; // eax@2
  char *v6; // eax@4
  char *v7; // eax@4

  v3 = this;
  this->m_TargetMap = wParam;
  v4 = (unsigned __int16 *)ItemInfoTab::GetByInxName("WorldLink");
  if ( v4 )
  {
    v5 = MsgBox::Modal(MSGBOX_RANDOMOPTION, &byte_9B2DEF);
    v3->m_pkMsgBox = v5;
    ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( MapInfoTab::GetByLinkIndex(v3->m_TargetMap) )
    {
      v6 = TextData3::Get(0x898D669Bu);
      v7 = fs(v6);
      MsgBox::SetUnderSlotText(v3->m_pkMsgBox, v7);
      MsgBox::SetItemIconByID(v3->m_pkMsgBox, *v4);
    }
    else
    {
      MsgBox::SetUnderSlotText(v3->m_pkMsgBox, "Map is currently not available!");
    }
  }
}

//----- (005B4280) --------------------------------------------------------
void __thiscall WorldMapWin::WorldMapWin(WorldMapWin *this)
{
  WorldMapWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  WorldMapWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v6 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WorldMapWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WorldMapWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_pAttachEffect,
    4u,
    36,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  LOBYTE(v6) = 1;
  v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,WorldMapWin::UserLocationView *,std::less<int>,std::allocator<std::pair<int const ,WorldMapWin::UserLocationView *> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapUserLocationView.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_pkUserLocationView = 0;
  v1->m_uiUserLocationViewCount = 0;
  v1->m_pkMsgBox = 0;
  v1->m_apkEffect[0] = 0;
  v1->m_apkEffect[1] = 0;
  v1->m_apkEffect[2] = 0;
  v1->m_apkEffect[3] = 0;
  v1->m_apkEffect[4] = 0;
  v1->m_apkEffect[5] = 0;
  v1->m_apkEffect[6] = 0;
  v1->m_apkEffect[7] = 0;
  v1->m_apkEffect[8] = 0;
  v1->m_apkEffect[9] = 0;
  v1->m_apkEffect[10] = 0;
  v1->m_apkEffect[11] = 0;
  v1->m_apkEffect[12] = 0;
  v1->m_apkEffect[13] = 0;
  v1->m_apkEffect[14] = 0;
  v1->m_apkEffect[15] = 0;
  v1->m_apkEffect[16] = 0;
  v1->m_apkEffect[17] = 0;
  v1->m_apkEffect[18] = 0;
  v1->m_apkEffect[19] = 0;
  v1->m_apkEffect[20] = 0;
  v1->m_apkEffect[21] = 0;
  v1->m_apkEffect[22] = 0;
  v1->m_apkEffect[23] = 0;
  v1->m_apkEffect[24] = 0;
  v1->m_apkEffect[25] = 0;
  v1->m_apkEffect[26] = 0;
  v1->m_apkEffect[27] = 0;
  v1->m_apkEffect[28] = 0;
  v1->m_apkEffect[29] = 0;
  v1->m_apkEffect[30] = 0;
  v1->m_apkEffect[31] = 0;
  v1->m_apkEffect[32] = 0;
  v1->m_apkEffect[33] = 0;
  v1->m_apkEffect[34] = 0;
  v1->m_apkEffect[35] = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9B2EB0: using guessed type int (__stdcall *WorldMapWin___vftable_)(int uiFlags);
// 9B2ECC: using guessed type int (__thiscall *WorldMapWin___vftable_)(void *p, char);

//----- (005B4450) --------------------------------------------------------
WorldMapWin *__cdecl WorldMapWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  WorldMapWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x334u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    WorldMapWin::WorldMapWin((WorldMapWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (WorldMapWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005B4580) --------------------------------------------------------
unsigned int __cdecl ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E4C: using guessed type int ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab___ms_pkTable;

//----- (005B45A0) --------------------------------------------------------
MapInfo *__cdecl MapInfoTab::GetByLinkIndex(WM_Link LinkIndex)
{
  unsigned int v1; // esi@1
  MapInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<MapInfo_MapInfoTab>::GetTotal() )
  {
    while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4),
                                  v1)
                      + 46) != LinkIndex )
    {
      ++v1;
      if ( v1 >= ITableBase<MapInfo_MapInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (MapInfo *)CDataReader::GetRecord((CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4), v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (005B45F0) --------------------------------------------------------
bool __cdecl WorldMapAvatarInfoTab::GetByNormalDungeon(Name3 *kMapName)
{
  unsigned int v1; // esi@1
  void *v2; // eax@2
  bool result; // al@6

  v1 = 0;
  if ( ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 4),
             v1);
      if ( *(_DWORD *)v2 == *(_DWORD *)&kMapName->n3_name[0] )
      {
        if ( *((_DWORD *)v2 + 1) == *(_DWORD *)&kMapName->n3_name[4]
          && *((_DWORD *)v2 + 2) == *(_DWORD *)&kMapName->n3_name[8] )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::GetTotal() )
        goto LABEL_6;
    }
    result = *((_BYTE *)CDataReader::GetRecord(
                          (CDataReader *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 4),
                          v1)
             + 20) == 1;
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}
// A97E4C: using guessed type int ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab___ms_pkTable;

//----- (005B4660) --------------------------------------------------------
NiPoint2 *__cdecl WorldMapAvatarInfoTab::GetByAvatarPosition(Name3 *kMapName)
{
  unsigned int v1; // esi@3
  void *v2; // eax@4
  NiPoint2 *result; // eax@8

  if ( !(_local_static_guard_ & 1) )
    _local_static_guard_ |= 1u;
  v1 = 0;
  if ( ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::GetTotal() )
  {
    while ( 1 )
    {
      v2 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable + 4),
             v1);
      if ( *(_DWORD *)v2 == *(_DWORD *)&kMapName->n3_name[0] )
      {
        if ( *((_DWORD *)v2 + 1) == *(_DWORD *)&kMapName->n3_name[4]
          && *((_DWORD *)v2 + 2) == *(_DWORD *)&kMapName->n3_name[8] )
          break;
      }
      ++v1;
      if ( v1 >= ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::GetTotal() )
        goto LABEL_8;
    }
    kAvatarPosition.x = (double)*((unsigned int *)CDataReader::GetRecord(
                                                    (CDataReader *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable
                                                                  + 4),
                                                    v1)
                                + 3);
    kAvatarPosition.y = (double)*((unsigned int *)CDataReader::GetRecord(
                                                    (CDataReader *)(ITableBase<WorldMapAvatarInfo_WorldMapAvatarInfoTab>::ms_pkTable
                                                                  + 4),
                                                    v1)
                                + 4);
    result = &kAvatarPosition;
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A97E4C: using guessed type int ITableBase_WorldMapAvatarInfo_WorldMapAvatarInfoTab___ms_pkTable;
// A99DDC: using guessed type int _local static guard_;

//----- (005B4710) --------------------------------------------------------
void *__thiscall WorldMapWin::_scalar_deleting_destructor_(WorldMapWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  WorldMapWin::_WorldMapWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005B4750) --------------------------------------------------------
void __thiscall OptionBaseWin::OptionBaseWin(OptionBaseWin *this)
{
  OptionBaseWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionBaseWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionBaseWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_ApplyInitDelayed);
  *(_WORD *)&v1->m_bGameOption = 0;
  v1->m_bSoundOption = 0;
}
// 9B3238: using guessed type int (__stdcall *OptionBaseWin___vftable_)(int uiFlags);
// 9B3254: using guessed type int (__thiscall *OptionBaseWin___vftable_)(void *p, char);

//----- (005B47C0) --------------------------------------------------------
void __thiscall OptionBaseWin::_OptionBaseWin(OptionBaseWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionBaseWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionBaseWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B3238: using guessed type int (__stdcall *OptionBaseWin___vftable_)(int uiFlags);
// 9B3254: using guessed type int (__thiscall *OptionBaseWin___vftable_)(void *p, char);

//----- (005B4810) --------------------------------------------------------
void __thiscall OptionBaseWin::OnHelpLink(OptionBaseWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "Option_common");
}

//----- (005B4840) --------------------------------------------------------
void __thiscall OptionBaseWin::ProcessMeInput(OptionBaseWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (005B48C0) --------------------------------------------------------
void __thiscall OptionBaseWin::UpdateMeWin(OptionBaseWin *this, float fCurTime)
{
  OptionBaseWin *v2; // esi@1
  PgWinBut *v3; // ecx@4

  v2 = this;
  if ( !(unsigned __int8)((int (*)(void))this->m_pkApply->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)()
    || !(unsigned __int8)((int (*)(void))v2->m_pkDefaultSetting->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_ApplyInitDelayed, fCurTime) )
    {
      CNSTimer_Interval::ReSet(&v2->m_ApplyInitDelayed, fCurTime);
      v3 = v2->m_pkApply;
      v2->m_ApplyInitDelayed.m_fCheckTime = 2.0;
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkDefaultSetting->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    }
  }
}

//----- (005B4950) --------------------------------------------------------
void __thiscall OptionBaseWin::OnWinClose(OptionBaseWin *this)
{
  GameFrameWork::CloseOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005B4960) --------------------------------------------------------
void __thiscall OptionBaseWin::OnApply(OptionBaseWin *this)
{
  OptionBaseWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkApply->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkDefaultSetting->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( v1->m_bGameOption )
  {
    GameFrameWork::OnOptionWinApply((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 0);
  }
  else
  {
    if ( v1->m_bGraphicOption )
    {
      GameFrameWork::OnOptionWinApply((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 1);
    }
    else
    {
      if ( v1->m_bSoundOption )
        GameFrameWork::OnOptionWinApply((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 2);
    }
  }
}

//----- (005B49D0) --------------------------------------------------------
void __thiscall OptionBaseWin::OnDefaultSetting(OptionBaseWin *this)
{
  OptionBaseWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkApply->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkDefaultSetting->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( v1->m_bGameOption )
  {
    GameFrameWork::OnOptionWinDefaultSetting((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 0);
  }
  else
  {
    if ( v1->m_bGraphicOption )
    {
      GameFrameWork::OnOptionWinDefaultSetting((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 1);
    }
    else
    {
      if ( v1->m_bSoundOption )
        GameFrameWork::OnOptionWinDefaultSetting((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 2);
    }
  }
}

//----- (005B4A40) --------------------------------------------------------
void __thiscall OptionBaseWin::OnGame(OptionBaseWin *this)
{
  *(_WORD *)&this->m_bGameOption = 1;
  this->m_bSoundOption = 0;
  GameFrameWork::OpenGameOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005B4A60) --------------------------------------------------------
void __thiscall OptionBaseWin::OnGraphic(OptionBaseWin *this)
{
  *(_WORD *)&this->m_bGameOption = 256;
  this->m_bSoundOption = 0;
  GameFrameWork::OpenGraphicOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005B4A80) --------------------------------------------------------
void __thiscall OptionBaseWin::OnSound(OptionBaseWin *this)
{
  *(_WORD *)&this->m_bGameOption = 0;
  this->m_bSoundOption = 1;
  GameFrameWork::OpenSoundOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005B4AA0) --------------------------------------------------------
bool __thiscall OptionBaseWin::Create(OptionBaseWin *this, PgFrameWork *pkFrameWork)
{
  OptionBaseWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  PgFont *v18; // eax@27
  NiRefObjectVtbl *v19; // ST80_4@27
  char *v20; // ST6C_4@27
  PgSprData *v21; // eax@27
  PgSprData *v22; // eax@27
  PgSprData *v23; // eax@27
  PgWinBut *v24; // eax@29
  PgSprData::PgHitTester *v25; // eax@29
  unsigned int v26; // ST80_4@29
  PgFont *v27; // eax@29
  NiRefObjectVtbl *v28; // ST80_4@29
  char *v29; // ST64_4@29
  PgWinBut *v30; // eax@29
  PgSprData::PgHitTester *v31; // eax@29
  unsigned int v32; // ST80_4@29
  PgFont *v33; // eax@29
  NiRefObjectVtbl *v34; // ST80_4@29
  char *v35; // ST5C_4@29
  NiPointer<PgSprData::PgHitTester> *v36; // ecx@29
  unsigned int v37; // ST80_4@29
  PgFont *v38; // eax@29
  NiRefObjectVtbl *v39; // ST80_4@29
  char *v40; // ST5C_4@29
  NiPointer<PgSprData::PgHitTester> *v41; // ecx@29
  unsigned int v42; // ST80_4@29
  PgFont *v43; // eax@29
  PgWinText *v44; // eax@29
  char *v45; // eax@29
  NiPointer<PgSprData::PgHitTester> *v46; // ecx@29
  unsigned int v47; // ST80_4@29
  PgFont *v48; // eax@29
  PgWinText *v49; // eax@29
  NiRefObjectVtbl *v50; // edi@29
  char *v51; // eax@29
  const char *v52; // [sp+60h] [bp-4Ch]@23
  int *v53; // [sp+64h] [bp-48h]@23
  int *v54; // [sp+68h] [bp-44h]@23
  NiSourceTexture *v55; // [sp+6Ch] [bp-40h]@23
  unsigned int uiWidth; // [sp+84h] [bp-28h]@25
  unsigned int uiHeight; // [sp+88h] [bp-24h]@25
  NiPointer<NiTexturingProperty> spTexProp; // [sp+8Ch] [bp-20h]@4
  NiSourceTexture *pkTexture; // [sp+90h] [bp-1Ch]@7
  int uiLeft; // [sp+94h] [bp-18h]@15
  int uiTop; // [sp+98h] [bp-14h]@15
  NiPointer<NiNode> spNode; // [sp+9Ch] [bp-10h]@1
  int v63; // [sp+A8h] [bp-4h]@1
  PgWinText *pkTextWina; // [sp+B4h] [bp+8h]@27
  PgSprData *pkTextWinb; // [sp+B4h] [bp+8h]@27
  NiSourceTexture *pkTextWin; // [sp+B4h] [bp+8h]@27
  PgSprData *pkTextWinc; // [sp+B4h] [bp+8h]@28
  PgSprData *pkTextWind; // [sp+B4h] [bp+8h]@29
  unsigned int pkTextWine; // [sp+B4h] [bp+8h]@29
  PgWinText *pkTextWinf; // [sp+B4h] [bp+8h]@29
  PgSprData *pkTextWing; // [sp+B4h] [bp+8h]@29
  unsigned int pkTextWinh; // [sp+B4h] [bp+8h]@29
  PgWinText *pkTextWini; // [sp+B4h] [bp+8h]@29
  PgSprData *pkTextWinj; // [sp+B4h] [bp+8h]@29
  unsigned int pkTextWink; // [sp+B4h] [bp+8h]@29
  PgWinText *pkTextWinl; // [sp+B4h] [bp+8h]@29
  unsigned int pkTextWinm; // [sp+B4h] [bp+8h]@29
  NiRefObjectVtbl *pkTextWinn; // [sp+B4h] [bp+8h]@29
  unsigned int pkTextWino; // [sp+B4h] [bp+8h]@29

  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v63 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\Option_common.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v63) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v63) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v63 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "OptionBaseWin", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v55 = v16;
      v54 = &uiTop;
      v53 = &uiLeft;
      v52 = "Theme";
    }
    else
    {
      v55 = 0;
      v54 = &uiTop;
      v53 = &uiLeft;
      v52 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v52, v53, v54, v55);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v18 = Font::Get(MAIN_MENU);
      pkTextWina = PgWinText::CreateWin(
                     uiLeft - v14,
                     uiTop - v15,
                     uiWidth,
                     uiHeight,
                     v18,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0);
      pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWina,
        1u);
      ((void (__stdcall *)(__int64 *))pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
      v19 = pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v20 = TextData::Get(0xE2F70740u);
      v19[118].__vecDelDtor((NiRefObject *)pkTextWina, (unsigned int)v20);
      ((void (__stdcall *)(_DWORD))pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      pkTextWinb = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWinb, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
      pkTextWin = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        pkTextWinc = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTextWin);
        PgSprData::Add(pkTextWinc, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add(pkTextWinc, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(
          uiLeft - v14,
          uiTop - v15,
          pkTextWinc,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x11u,
          0,
          0);
      }
      pkTextWind = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "OkClick");
      PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "OkOver");
      v24 = PgWinBut::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              pkTextWind,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0xEu,
              0,
              0);
      v2->m_pkDefaultSetting = v24;
      ((void (__thiscall *)(PgWinBut *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v24);
      v25 = pkTextWind->m_akHitTester.m_pBase->m_pObject;
      pkTextWine = v25->m_uiHeight;
      v26 = v25->m_uiWidth;
      v27 = Font::Get(0);
      pkTextWinf = PgWinText::CreateWin(
                     uiLeft - v14,
                     uiTop - v15 + 1,
                     v26,
                     pkTextWine,
                     v27,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0);
      ((void (__thiscall *)(PgWinText *))pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(pkTextWinf);
      v28 = pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v29 = TextData::Get(0x47A08085u);
      ((void (__thiscall *)(PgWinText *))v28[118].__vecDelDtor)(pkTextWinf);
      ((void (__cdecl *)(_DWORD, char *, signed int, signed int))pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
        0,
        v29,
        5,
        1);
      pkTextWing = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CreatNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWing, &spNode.m_pObject->baseclass_0, "CreatClick");
      PgSprData::Add(pkTextWing, &spNode.m_pObject->baseclass_0, "CreatOver");
      v30 = PgWinBut::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              pkTextWing,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0xFu,
              0,
              0);
      v2->m_pkApply = v30;
      v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v30,
        1u);
      v31 = pkTextWing->m_akHitTester.m_pBase->m_pObject;
      pkTextWinh = v31->m_uiHeight;
      v32 = v31->m_uiWidth;
      v33 = Font::Get(0);
      pkTextWini = PgWinText::CreateWin(
                     uiLeft - v14,
                     uiTop - v15 + 1,
                     v32,
                     pkTextWinh,
                     v33,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0);
      pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWini,
        5u);
      v34 = pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v35 = TextData::Get(0x9FF9F4E6u);
      v34[118].__vecDelDtor((NiRefObject *)pkTextWini, (unsigned int)v35);
      ((void (__stdcall *)(_DWORD))pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkTextWinj = PgSprData::Create(&spNode.m_pObject->baseclass_0, "QuitNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWinj, &spNode.m_pObject->baseclass_0, "QuitClick");
      PgSprData::Add(pkTextWinj, &spNode.m_pObject->baseclass_0, "QuitOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWinj, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
      v36 = pkTextWinj->m_akHitTester.m_pBase;
      pkTextWink = v36->m_pObject->m_uiHeight;
      v37 = v36->m_pObject->m_uiWidth;
      v38 = Font::Get(0);
      pkTextWinl = PgWinText::CreateWin(
                     uiLeft - v14,
                     uiTop - v15 + 1,
                     v37,
                     pkTextWink,
                     v38,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0);
      pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWinl,
        5u);
      v39 = pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v40 = TextData::Get(0x9BE7FBE5u);
      v39[118].__vecDelDtor((NiRefObject *)pkTextWinl, (unsigned int)v40);
      ((void (__stdcall *)(_DWORD))pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubTitle01", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase;
      pkTextWinm = v41->m_pObject->m_uiHeight;
      v42 = v41->m_pObject->m_uiWidth;
      v43 = Font::Get(0);
      v44 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              v42,
              pkTextWinm,
              v43,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_Grop01TextWin = v44;
      v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v44,
        5u);
      pkTextWinn = v2->m_Grop01TextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v45 = TextData::Get(0xDD594F31u);
      pkTextWinn[118].__vecDelDtor((NiRefObject *)v2->m_Grop01TextWin, (unsigned int)v45);
      ((void (__stdcall *)(_DWORD))v2->m_Grop01TextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubTitle02", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase;
      pkTextWino = v46->m_pObject->m_uiHeight;
      v47 = v46->m_pObject->m_uiWidth;
      v48 = Font::Get(0);
      v49 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              v47,
              pkTextWino,
              v48,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_Grop02TextWin = v49;
      v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v49,
        5u);
      v50 = v2->m_Grop02TextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v51 = TextData::Get(0x2E3A4C30u);
      v50[118].__vecDelDtor((NiRefObject *)v2->m_Grop02TextWin, (unsigned int)v51);
      ((void (__stdcall *)(_DWORD))v2->m_Grop02TextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__thiscall *)(OptionBaseWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.0,
        0.5);
      CNSTimer_Interval::ReSet(&v2->m_ApplyInitDelayed, Timer::ms_fCurTime);
      v2->m_ApplyInitDelayed.m_fCheckTime = 2.0;
      LOBYTE(v63) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v63 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v63) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v63 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v63) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v63 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005B5390) --------------------------------------------------------
void __thiscall OptionBaseWin::OnCommand(OptionBaseWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      *(_WORD *)&this->m_bGameOption = 1;
      this->m_bSoundOption = 0;
      GameFrameWork::OpenGameOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xCu:
      *(_WORD *)&this->m_bGameOption = 256;
      this->m_bSoundOption = 0;
      GameFrameWork::OpenGraphicOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xDu:
      *(_WORD *)&this->m_bGameOption = 0;
      this->m_bSoundOption = 1;
      GameFrameWork::OpenSoundOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xEu:
      OptionBaseWin::OnDefaultSetting(this);
      break;
    case 0xFu:
      OptionBaseWin::OnApply(this);
      break;
    case 0x10u:
      GameFrameWork::CloseOptionWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0x11u:
      OptionBaseWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005B5450) --------------------------------------------------------
void __thiscall OptionBaseWin::SetMode(OptionBaseWin *this, int nMode)
{
  OptionBaseWin *v2; // esi@1
  PgWinText *v3; // eax@4
  NiRefObjectVtbl *v4; // edi@4
  char *v5; // eax@4
  PgWinText *v6; // eax@5
  NiRefObjectVtbl *v7; // edi@5
  char *v8; // eax@5
  PgWinText *v9; // eax@6
  NiRefObjectVtbl *v10; // edi@6
  char *v11; // eax@6
  NiRefObjectVtbl *v12; // edi@7
  unsigned int v13; // [sp+0h] [bp-8h]@5

  v2 = this;
  *(_WORD *)&this->m_bGameOption = 0;
  this->m_bSoundOption = 0;
  if ( !nMode )
  {
    v9 = this->m_Grop01TextWin;
    this->m_bGameOption = 1;
    v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v11 = TextData::Get(0xD9EFF842u);
    v10[118].__vecDelDtor((NiRefObject *)v2->m_Grop01TextWin, (unsigned int)v11);
    v13 = -168297239;
    goto LABEL_7;
  }
  if ( nMode == 1 )
  {
    v6 = this->m_Grop01TextWin;
    this->m_bGraphicOption = 1;
    v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = TextData::Get(0xDD594F31u);
    v7[118].__vecDelDtor((NiRefObject *)v2->m_Grop01TextWin, (unsigned int)v8);
    v13 = 775572528;
LABEL_7:
    v12 = v2->m_Grop02TextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(v13);
    ((void (__thiscall *)(_DWORD))v12[118].__vecDelDtor)(v2->m_Grop02TextWin);
    return;
  }
  if ( nMode == 2 )
  {
    v3 = this->m_Grop01TextWin;
    this->m_bSoundOption = 1;
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = TextData::Get(0x9EF6F6EBu);
    v4[118].__vecDelDtor((NiRefObject *)v2->m_Grop01TextWin, (unsigned int)v5);
    ((void (__stdcall *)(_DWORD))v2->m_Grop02TextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B3103);
  }
}

//----- (005B5550) --------------------------------------------------------
OptionBaseWin *__cdecl OptionBaseWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  OptionBaseWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &OptionBaseWin::_vftable_;
    *((_DWORD *)v2 + 58) = &OptionBaseWin::_vftable_;
    CNSTimer_Interval::CNSTimer_Interval((CNSTimer_Interval *)((char *)v2 + 356));
    *((_WORD *)v2 + 172) = 0;
    *((_BYTE *)v2 + 346) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (OptionBaseWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B3238: using guessed type int (__stdcall *OptionBaseWin___vftable_)(int uiFlags);
// 9B3254: using guessed type int (__thiscall *OptionBaseWin___vftable_)(void *p, char);

//----- (005B56B0) --------------------------------------------------------
void *__thiscall OptionBaseWin::_vector_deleting_destructor_(OptionBaseWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionBaseWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionBaseWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B3238: using guessed type int (__stdcall *OptionBaseWin___vftable_)(int uiFlags);
// 9B3254: using guessed type int (__thiscall *OptionBaseWin___vftable_)(void *p, char);

//----- (005B56F0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OptionGraphicWin(OptionGraphicWin *this)
{
  OptionGraphicWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionGraphicWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionGraphicWin::_vftable_;
  MachineOpt::GraphicOption::GraphicOption(&v1->m_kOpenGraphicOption);
  v1->m_pkOptionBaseWin = 0;
  v1->m_bChangeOption = 0;
  v1->m_pkResolutionTextWin = 0;
  v1->m_pkScreenShotCheck = 0;
}
// 9B3700: using guessed type int (__stdcall *OptionGraphicWin___vftable_)(int uiFlags);
// 9B371C: using guessed type int (__thiscall *OptionGraphicWin___vftable_)(void *p, char);

//----- (005B5770) --------------------------------------------------------
void __thiscall OptionGraphicWin::_OptionGraphicWin(OptionGraphicWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionGraphicWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionGraphicWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9B3700: using guessed type int (__stdcall *OptionGraphicWin___vftable_)(int uiFlags);
// 9B371C: using guessed type int (__thiscall *OptionGraphicWin___vftable_)(void *p, char);

//----- (005B5790) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnGamma(OptionGraphicWin *this, int nPos)
{
  float nPosa; // [sp+Ch] [bp+8h]@1

  nPosa = (double)(nPos + 1) / 10.0;
  MachineOpt::SetCurGama(nPosa);
}

//----- (005B57C0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnApply(OptionGraphicWin *this)
{
  PgWin *v1; // eax@1

  v1 = (PgWin *)this->m_pkOptionBaseWin;
  this->m_bChangeOption = 0;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (005B57E0) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetViewLength(OptionGraphicWin *this, float fRate)
{
  float fRatea; // [sp+8h] [bp+8h]@1

  fRatea = fRate * -100.0;
  switch ( -60 - (signed int)fRatea )
  {
    case 0:
      SlideBar::SetCurPos(this->m_pkSlides[0], 0);
      break;
    case 10:
      SlideBar::SetCurPos(this->m_pkSlides[0], 1);
      break;
    case 20:
      SlideBar::SetCurPos(this->m_pkSlides[0], 2);
      break;
    case 30:
      SlideBar::SetCurPos(this->m_pkSlides[0], 3);
      break;
    case 40:
      SlideBar::SetCurPos(this->m_pkSlides[0], 4);
      break;
    default:
      return;
  }
}

//----- (005B58C0) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetCharShadowCnt(OptionGraphicWin *this, int nCnt)
{
  switch ( nCnt )
  {
    case 1:
      SlideBar::SetCurPos(this->m_pkSlides[2], 1);
      break;
    case 10:
      SlideBar::SetCurPos(this->m_pkSlides[2], 2);
      break;
    case 50:
      SlideBar::SetCurPos(this->m_pkSlides[2], 3);
      break;
    default:
      SlideBar::SetCurPos(this->m_pkSlides[2], 0);
      break;
  }
}

//----- (005B5980) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetLodAdjust(OptionGraphicWin *this, float fVal)
{
  SlideBar::SetCurPos(this->m_pkSlides[1], (signed int)((1.0 - fVal) * 10.0 + 5.0));
}

//----- (005B59B0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnResolutionClick(OptionGraphicWin *this)
{
  PgFrameWork::AddMsg(this->m_pkFrameWork, 0x8Du, 0, 0);
}

//----- (005B59F0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnViewLength(OptionGraphicWin *this, int nPos)
{
  switch ( nPos )
  {
    case 0:
      MachineOpt::ms_kGraphicOption.fViewTerrainRate = 0.60000002;
      if ( !byte_AA5149 )
        flt_B30B8C = MachineOpt::ms_kGraphicOption.fViewTerrainLength * 0.6000000238418579;
      break;
    case 1:
      MachineOpt::ms_kGraphicOption.fViewTerrainRate = 0.69999999;
      if ( !byte_AA5149 )
        flt_B30B8C = MachineOpt::ms_kGraphicOption.fViewTerrainLength * 0.699999988079071;
      break;
    case 2:
      MachineOpt::ms_kGraphicOption.fViewTerrainRate = 0.80000001;
      if ( !byte_AA5149 )
        flt_B30B8C = MachineOpt::ms_kGraphicOption.fViewTerrainLength * 0.800000011920929;
      break;
    case 3:
      MachineOpt::ms_kGraphicOption.fViewTerrainRate = 0.89999998;
      if ( !byte_AA5149 )
        flt_B30B8C = MachineOpt::ms_kGraphicOption.fViewTerrainLength * 0.8999999761581421;
      break;
    case 4:
      MachineOpt::ms_kGraphicOption.fViewTerrainRate = 1.0;
      if ( !byte_AA5149 )
        flt_B30B8C = MachineOpt::ms_kGraphicOption.fViewTerrainLength;
      break;
    default:
      return;
  }
}
// AA5149: using guessed type char byte_AA5149;
// B30B8C: using guessed type float flt_B30B8C;

//----- (005B5AF0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnCharShadowCnt(OptionGraphicWin *this, int nPos)
{
  switch ( nPos )
  {
    case 0:
      dword_B30C20 = 0;
      MachineOpt::ms_kGraphicOption.nCharShadowLevel = 0;
      break;
    case 1:
      dword_B30C20 = 1;
      MachineOpt::ms_kGraphicOption.nCharShadowLevel = 1;
      break;
    case 2:
      dword_B30C20 = 10;
      MachineOpt::ms_kGraphicOption.nCharShadowLevel = 10;
      break;
    case 3:
      dword_B30C20 = 50;
      MachineOpt::ms_kGraphicOption.nCharShadowLevel = 50;
      break;
    default:
      return;
  }
}
// B30C20: using guessed type int dword_B30C20;

//----- (005B5B60) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnOutLineCheck(OptionGraphicWin *this)
{
  this->m_pkOutLineCheck->m_bCheck = this->m_pkOutLineCheck->m_bCheck == 0;
  MachineOpt::SetViewOutLine(this->m_pkOutLineCheck->m_bCheck);
}

//----- (005B5B90) --------------------------------------------------------
void __thiscall OptionGraphicWin::CloseWin(OptionGraphicWin *this)
{
  OptionGraphicWin *v1; // esi@1
  int v2; // edi@3
  int v3; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkOptionBaseWin )
  {
    GameFrameWork::ms_bRecreatingDisplay = 0;
    ((void (__stdcall *)(int *, OptionGraphicWin *))this->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &v3,
      this);
    if ( v3 )
    {
      v2 = v3;
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      0);
  }
}
// A987C6: using guessed type char GameFrameWork__ms_bRecreatingDisplay;

//----- (005B5C00) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetOutLineCheck(OptionGraphicWin *this, bool bLine)
{
  this->m_pkOutLineCheck->m_bCheck = bLine;
}

//----- (005B5C20) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetResoulution(OptionGraphicWin *this, unsigned int uiWidth, unsigned int uiHeight)
{
  OptionGraphicWin *v3; // esi@1
  char temp[256]; // [sp+4h] [bp-104h]@1
  unsigned int v5; // [sp+104h] [bp-4h]@1
  int v6; // [sp+108h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v3 = this;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = uiWidth;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = uiHeight;
  sprintf(temp, "%i x %i");
  ((void (__stdcall *)(_DWORD))v3->m_pkResolutionTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(temp);
}
// A85C00: using guessed type int __security_cookie;

//----- (005B5C90) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetWindowFullModeCheck(OptionGraphicWin *this, bool bCheck)
{
  this->m_pkWindowFullModeCheck->m_bCheck = bCheck;
}

//----- (005B5CB0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnGlowEffectToggle(OptionGraphicWin *this)
{
  bool v1; // al@1

  this->m_pkGlowEffectCheck->m_bCheck = this->m_pkGlowEffectCheck->m_bCheck == 0;
  v1 = MachineOpt::GetGlowEffect();
  MachineOpt::SetGlowEffect(v1 == 0);
}

//----- (005B5CE0) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetGlowEffectEnable(OptionGraphicWin *this, bool bEnable)
{
  this->m_pkGlowEffectCheck->m_bCheck = bEnable;
  MachineOpt::SetGlowEffect(bEnable);
}

//----- (005B5D00) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnShakeEffectToggle(OptionGraphicWin *this)
{
  this->m_pkScreenShakeEffectCheck->m_bCheck = this->m_pkScreenShakeEffectCheck->m_bCheck == 0;
  MachineOpt::ms_kGraphicOption.bScreenShakeEnable = MachineOpt::ms_kGraphicOption.bScreenShakeEnable == 0;
}

//----- (005B5D30) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetScreenShakeEffectEnable(OptionGraphicWin *this, bool bEnable)
{
  this->m_pkScreenShakeEffectCheck->m_bCheck = bEnable;
  MachineOpt::ms_kGraphicOption.bScreenShakeEnable = bEnable;
}

//----- (005B5D50) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnCharAuraEffectToggle(OptionGraphicWin *this)
{
  Effect *v1; // eax@2

  this->m_pkCharAuraEffectCheck->m_bCheck = this->m_pkCharAuraEffectCheck->m_bCheck == 0;
  MachineOpt::ms_kGraphicOption.bCharAuraEffectEnable = MachineOpt::ms_kGraphicOption.bCharAuraEffectEnable == 0;
  EffectMgr::AuraEffectEnable(&g_kEffectMgr, MachineOpt::ms_kGraphicOption.bCharAuraEffectEnable);
  if ( g_pkMainChar->m_kCharShape.m_kEquip.Equ_CosEff != -1 )
  {
    v1 = EffectMgr::FindAuraEffect(&g_kEffectMgr, g_pkMainChar->m_kHandle);
    if ( v1 )
      v1->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v1, 0);
  }
}

//----- (005B5DD0) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetCharAuraEffectEnable(OptionGraphicWin *this, bool bEnable)
{
  Effect *v2; // eax@2

  this->m_pkCharAuraEffectCheck->m_bCheck = bEnable;
  MachineOpt::ms_kGraphicOption.bCharAuraEffectEnable = bEnable;
  EffectMgr::AuraEffectEnable(&g_kEffectMgr, bEnable);
  if ( g_pkMainChar->m_kCharShape.m_kEquip.Equ_CosEff != -1 )
  {
    v2 = EffectMgr::FindAuraEffect(&g_kEffectMgr, g_pkMainChar->m_kHandle);
    if ( v2 )
      v2->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v2, 0);
  }
}

//----- (005B5E30) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnScreenShotToggle(OptionGraphicWin *this)
{
  this->m_pkScreenShotCheck->m_bCheck = this->m_pkScreenShotCheck->m_bCheck == 0;
  MachineOpt::ms_kGraphicOption.bScreenShotEnable = MachineOpt::ms_kGraphicOption.bScreenShotEnable == 0;
}

//----- (005B5E60) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetScreenShotEnable(OptionGraphicWin *this, bool bEnable)
{
  this->m_pkScreenShotCheck->m_bCheck = bEnable;
  MachineOpt::ms_kGraphicOption.bScreenShotEnable = bEnable;
}

//----- (005B5E80) --------------------------------------------------------
bool __thiscall OptionGraphicWin::Create(OptionGraphicWin *this, PgFrameWork *pkFrameWork)
{
  OptionGraphicWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edx@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  NiAVObject *v6; // eax@4
  NiProperty *v7; // eax@4
  NiProperty *v8; // ebx@4
  NiRefObjectVtbl *v9; // eax@6
  NiSourceTexture *v10; // edi@7
  NiNode *v11; // esi@10
  PgSprData *v13; // eax@15
  PgWinSpr *v14; // eax@15
  NiPointer<PgSprData::PgHitTester> *v15; // ecx@15
  unsigned int v16; // ebx@15
  unsigned int v17; // ST44_4@15
  PgFont *v18; // eax@15
  PgWinText *v19; // ebx@15
  NiRefObjectVtbl *v20; // ST44_4@15
  char *v21; // eax@15
  NiPointer<PgSprData::PgHitTester> *v22; // ecx@15
  unsigned int v23; // ebx@15
  unsigned int v24; // ST44_4@15
  PgFont *v25; // eax@15
  PgWinText *v26; // ebx@15
  NiRefObjectVtbl *v27; // ST44_4@15
  char *v28; // eax@15
  NiPointer<PgSprData::PgHitTester> *v29; // ecx@15
  unsigned int v30; // ebx@15
  unsigned int v31; // ST44_4@15
  PgFont *v32; // eax@15
  PgWinText *v33; // ebx@15
  NiRefObjectVtbl *v34; // ST44_4@15
  char *v35; // eax@15
  NiPointer<PgSprData::PgHitTester> *v36; // ecx@15
  unsigned int v37; // ebx@15
  unsigned int v38; // ST44_4@15
  PgFont *v39; // eax@15
  PgWinText *v40; // ebx@15
  NiRefObjectVtbl *v41; // ST44_4@15
  char *v42; // eax@15
  PgSprData *v43; // eax@15
  PgSprData *v44; // ebx@15
  SlideBar *v45; // eax@15
  SlideBar *v46; // eax@15
  SlideBar *v47; // eax@15
  PgSprData *v48; // ebx@15
  PgSprData *v49; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v50; // edx@15
  unsigned int v51; // ebx@15
  unsigned int v52; // ST44_4@15
  PgFont *v53; // eax@15
  PgWinText *v54; // eax@15
  NiPointer<PgSprData::PgHitTester> *v55; // ecx@15
  unsigned int v56; // ebx@15
  unsigned int v57; // ST44_4@15
  PgFont *v58; // eax@15
  PgWinText *v59; // ebx@15
  NiRefObjectVtbl *v60; // ST44_4@15
  char *v61; // eax@15
  NiPointer<PgSprData::PgHitTester> *v62; // ecx@15
  unsigned int v63; // ebx@15
  unsigned int v64; // ST44_4@15
  PgFont *v65; // eax@15
  PgWinText *v66; // eax@15
  NiRefObjectVtbl *v67; // ebx@15
  char *v68; // eax@15
  PgSprData *v69; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v70; // ecx@15
  unsigned int v71; // ebx@15
  unsigned int v72; // ST44_4@15
  PgFont *v73; // eax@15
  PgWinText *v74; // eax@15
  NiRefObjectVtbl *v75; // ebx@15
  char *v76; // eax@15
  PgSprData *v77; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v78; // ecx@15
  unsigned int v79; // ebx@15
  unsigned int v80; // ST44_4@15
  PgFont *v81; // eax@15
  PgWinText *v82; // eax@15
  NiRefObjectVtbl *v83; // ebx@15
  char *v84; // eax@15
  PgSprData *v85; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v86; // ecx@15
  unsigned int v87; // ebx@15
  unsigned int v88; // ST44_4@15
  PgFont *v89; // eax@15
  PgWinText *v90; // eax@15
  NiRefObjectVtbl *v91; // ebx@15
  char *v92; // eax@15
  PgSprData *v93; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v94; // ecx@15
  unsigned int v95; // ebx@15
  unsigned int v96; // ST44_4@15
  PgFont *v97; // eax@15
  PgWinText *v98; // eax@15
  NiRefObjectVtbl *v99; // ebx@15
  char *v100; // eax@15
  PgSprData *v101; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v102; // ecx@15
  unsigned int v103; // ebx@15
  unsigned int v104; // ST44_4@15
  PgFont *v105; // eax@15
  PgWinText *v106; // ebx@15
  NiRefObjectVtbl *v107; // ST44_4@15
  char *v108; // eax@15
  NiPointer<PgSprData::PgHitTester> *v109; // ecx@15
  unsigned int v110; // ebx@15
  unsigned int v111; // ST44_4@15
  PgFont *v112; // eax@15
  PgWinText *v113; // ebx@15
  NiRefObjectVtbl *v114; // ST44_4@15
  char *v115; // eax@15
  PgSprData *v116; // edi@15
  ColumnBut *v117; // eax@15
  NiNode *v118; // edi@17
  NiProperty *spTexProp; // [sp+0h] [bp-1Ch]@4
  NiPointer<NiNode> spNode; // [sp+8h] [bp-14h]@1
  int uiLeft; // [sp+Ch] [bp-10h]@15
  int v122; // [sp+18h] [bp-4h]@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  this->m_pkFrameWork = pkFrameWork;
  ((void (__stdcall *)(signed int))v3[43].__vecDelDtor)(-15);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[35].__vecDelDtor(
    (NiRefObject *)v2,
    (unsigned int)&unk_9B3474);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[75].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2,
    1u);
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v122 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\Option_Graphic.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel_Graphic");
  v7 = NiAVObject::GetProperty(v6, 8);
  v8 = v7;
  spTexProp = v7;
  if ( v7 )
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v9 = v8[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v122) = 1;
  if ( !v9 || (v10 = (NiSourceTexture *)v9[1].__vecDelDtor) == 0 )
  {
    LOBYTE(v122) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v11 = spNode.m_pObject;
    v122 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    return 0;
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel_Graphic", &uiLeft, (int *)&pkFrameWork, v10);
  v14 = PgWinSpr::CreateWin(uiLeft, (int)pkFrameWork, v13, &v2->baseclass_0, 0, 0);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v14,
    0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LongGround", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v16 = v15->m_pObject->m_uiHeight;
  v17 = v15->m_pObject->m_uiWidth;
  v18 = Font::Get(0);
  v19 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v17,
          v16,
          v18,
          &v2->baseclass_0,
          0,
          0);
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData::Get(0x2931AD8Eu);
  v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "LongObject", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v23 = v22->m_pObject->m_uiHeight;
  v24 = v22->m_pObject->m_uiWidth;
  v25 = Font::Get(0);
  v26 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v24,
          v23,
          v25,
          &v2->baseclass_0,
          0,
          0);
  v27 = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = TextData::Get(0x3530A075u);
  v27[118].__vecDelDtor((NiRefObject *)v26, (unsigned int)v28);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrShadow", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v30 = v29->m_pObject->m_uiHeight;
  v31 = v29->m_pObject->m_uiWidth;
  v32 = Font::Get(0);
  v33 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v31,
          v30,
          v32,
          &v2->baseclass_0,
          0,
          0);
  v34 = v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v35 = TextData::Get(0x39453B7Bu);
  v34[118].__vecDelDtor((NiRefObject *)v33, (unsigned int)v35);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrOline", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v37 = v36->m_pObject->m_uiHeight;
  v38 = v36->m_pObject->m_uiWidth;
  v39 = Font::Get(0);
  v40 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v38,
          v37,
          v39,
          &v2->baseclass_0,
          0,
          0);
  v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v42 = TextData::Get(0xEDFA4C3Du);
  v41[118].__vecDelDtor((NiRefObject *)v40, (unsigned int)v42);
  v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v40,
    0);
  v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MovingPoint", &uiLeft, (int *)&pkFrameWork, v10);
  v44 = v43;
  v45 = SlideBar::CreateWin(
          spNode.m_pObject,
          "LongGroundBar",
          "LongGroundBarLow",
          "LongGroundBarHigh",
          v43,
          0,
          &v2->baseclass_0);
  v2->m_pkSlides[0] = v45;
  v45->m_uiClickMsg = 11;
  SlideBar::SetSplitCnt(v2->m_pkSlides[0], 5);
  SlideBar::SetCurPos(v2->m_pkSlides[0], 4);
  v46 = SlideBar::CreateWin(
          spNode.m_pObject,
          "LongObjectBar",
          "LongObjectBarLow",
          "LongObjectBarHigh",
          v44,
          1u,
          &v2->baseclass_0);
  v2->m_pkSlides[1] = v46;
  v46->m_uiClickMsg = 11;
  SlideBar::SetSplitCnt(v2->m_pkSlides[1], 10);
  SlideBar::SetCurPos(v2->m_pkSlides[1], 5);
  v47 = SlideBar::CreateWin(
          spNode.m_pObject,
          "ChrShadowBar",
          "ChrShadowBarLow",
          "ChrShadowBarHigh",
          v44,
          2u,
          &v2->baseclass_0);
  v2->m_pkSlides[2] = v47;
  v47->m_uiClickMsg = 11;
  SlideBar::SetSplitCnt(v2->m_pkSlides[2], 4);
  SlideBar::SetCurPos(v2->m_pkSlides[2], 2);
  v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrOlineChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v48, &spNode.m_pObject->baseclass_0, "ChrOlineChClick");
  v2->m_pkOutLineCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v48, &v2->baseclass_0, 0xCu, 0);
  v49 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ResolutionNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v49, &spNode.m_pObject->baseclass_0, "ResolutionClick");
  PgSprData::Add(v49, &spNode.m_pObject->baseclass_0, "ResolutionOver");
  PgWinBut::CreateWin(uiLeft, (int)pkFrameWork, v49, &v2->baseclass_0, 0xDu, 0, 0);
  v50 = v49->m_akHitTester.m_pBase;
  v51 = v50->m_pObject->m_uiHeight;
  v52 = v50->m_pObject->m_uiWidth;
  v53 = Font::Get(0);
  v54 = PgWinText::CreateWin(uiLeft, (int)pkFrameWork, v52, v51, v53, &v2->baseclass_0, 0, 0);
  v2->m_pkResolutionTextWin = v54;
  v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v54,
    0);
  v55 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Resolution", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v56 = v55->m_pObject->m_uiHeight;
  v57 = v55->m_pObject->m_uiWidth;
  v58 = Font::Get(0);
  v59 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v57,
          v56,
          v58,
          &v2->baseclass_0,
          0,
          0);
  v60 = v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v61 = TextData::Get(0xCDB7D5D8u);
  v60[118].__vecDelDtor((NiRefObject *)v59, (unsigned int)v61);
  v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v59,
    0);
  v62 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WindowMod", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v63 = v62->m_pObject->m_uiHeight;
  v64 = v62->m_pObject->m_uiWidth;
  v65 = Font::Get(0);
  v66 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v64,
          v63,
          v65,
          &v2->baseclass_0,
          0,
          0);
  v2->m_pkWindowFullModeTextWin = v66;
  v67 = v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v68 = TextData::Get(0x3354398Du);
  v67[118].__vecDelDtor((NiRefObject *)v2->m_pkWindowFullModeTextWin, (unsigned int)v68);
  ((void (__stdcall *)(_DWORD))v2->m_pkWindowFullModeTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WindowModNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v69, &spNode.m_pObject->baseclass_0, "WindowModClick");
  v2->m_pkWindowFullModeCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v69, &v2->baseclass_0, 0xEu, 0);
  v70 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MultiSample", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v71 = v70->m_pObject->m_uiHeight;
  v72 = v70->m_pObject->m_uiWidth;
  v73 = Font::Get(0);
  v74 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v72,
          v71,
          v73,
          &v2->baseclass_0,
          0,
          0);
  v2->m_pkMultiSampleTextWin = v74;
  v75 = v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v76 = TextData::Get(0x32347986u);
  v75[118].__vecDelDtor((NiRefObject *)v2->m_pkMultiSampleTextWin, (unsigned int)v76);
  ((void (__stdcall *)(_DWORD))v2->m_pkMultiSampleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v77 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MultiSampleNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v77, &spNode.m_pObject->baseclass_0, "MultiSampleClick");
  v2->m_pkMultiSampleCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v77, &v2->baseclass_0, 0xFu, 0);
  v78 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GlowEffect", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v79 = v78->m_pObject->m_uiHeight;
  v80 = v78->m_pObject->m_uiWidth;
  v81 = Font::Get(0);
  v82 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v80,
          v79,
          v81,
          &v2->baseclass_0,
          0,
          0);
  v2->m_pkGlowEffectWin = v82;
  v83 = v82->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v84 = TextData::Get(0x352E4430u);
  v83[118].__vecDelDtor((NiRefObject *)v2->m_pkGlowEffectWin, (unsigned int)v84);
  ((void (__stdcall *)(_DWORD))v2->m_pkGlowEffectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v85 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GlowEffectNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v85, &spNode.m_pObject->baseclass_0, "GlowEffectClick");
  v2->m_pkGlowEffectCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v85, &v2->baseclass_0, 0x10u, 0);
  v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CameraShake", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v87 = v86->m_pObject->m_uiHeight;
  v88 = v86->m_pObject->m_uiWidth;
  v89 = Font::Get(0);
  v90 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v88,
          v87,
          v89,
          &v2->baseclass_0,
          0,
          0);
  v2->m_pkScreenShakeEffectWin = v90;
  v91 = v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v92 = TextData2::Get(0xF0D1C8CAu);
  v91[118].__vecDelDtor((NiRefObject *)v2->m_pkScreenShakeEffectWin, (unsigned int)v92);
  ((void (__stdcall *)(_DWORD))v2->m_pkScreenShakeEffectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v93 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CameraShakeNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v93, &spNode.m_pObject->baseclass_0, "CameraShaketClick");
  v2->m_pkScreenShakeEffectCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v93, &v2->baseclass_0, 0x12u, 0);
  v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrAura", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v95 = v94->m_pObject->m_uiHeight;
  v96 = v94->m_pObject->m_uiWidth;
  v97 = Font::Get(0);
  v98 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v96,
          v95,
          v97,
          &v2->baseclass_0,
          0,
          0);
  v2->m_pkCharAuraEffectWin = v98;
  v99 = v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v100 = TextData2::Get(0xA4A0E9EDu);
  v99[118].__vecDelDtor((NiRefObject *)v2->m_pkCharAuraEffectWin, (unsigned int)v100);
  ((void (__stdcall *)(_DWORD))v2->m_pkCharAuraEffectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v101 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChrAuraNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v101, &spNode.m_pObject->baseclass_0, "ChrAuraClick");
  v2->m_pkCharAuraEffectCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v101, &v2->baseclass_0, 0x13u, 0);
  v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HideUITitle", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v103 = v102->m_pObject->m_uiHeight;
  v104 = v102->m_pObject->m_uiWidth;
  v105 = Font::Get(0);
  v106 = PgWinText::CreateWin(uiLeft, (int)pkFrameWork, v104, v103, v105, &v2->baseclass_0, 0, 0);
  v107 = v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v108 = TextData3::Get(0x7F936B6Au);
  v107[118].__vecDelDtor((NiRefObject *)v106, (unsigned int)v108);
  v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v106,
    0);
  v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v106,
    1u);
  v109 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HideUI", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v110 = v109->m_pObject->m_uiHeight;
  v111 = v109->m_pObject->m_uiWidth;
  v112 = Font::Get(0);
  v113 = PgWinText::CreateWin(uiLeft, (int)pkFrameWork, v111, v110, v112, &v2->baseclass_0, 0, 0);
  v114 = v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v115 = TextData3::Get(0x989EAFBEu);
  v114[118].__vecDelDtor((NiRefObject *)v113, (unsigned int)v115);
  v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v113,
    0);
  v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v113,
    1u);
  v116 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HideUINor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v116, &spNode.m_pObject->baseclass_0, "HideUIClick");
  v117 = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v116, &v2->baseclass_0, 0x14u, 0);
  v2->m_pkScreenShotCheck = v117;
  v117->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v117,
    1u);
  v2->m_pkScreenShotCheck->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2->m_pkScreenShotCheck,
    1u);
  LOBYTE(v122) = 0;
  if ( !InterlockedDecrement((volatile LONG *)&spTexProp->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    spTexProp->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spTexProp, 1u);
  v118 = spNode.m_pObject;
  v122 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v118 )
    v118->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v118, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B6A30) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnLodAdjust(OptionGraphicWin *this, int nPos)
{
  MachineOpt::ms_kGraphicOption.fLODAdjust = 1.0 - (double)(nPos - 5) / 10.0;
  pkCamera->m_fLODAdjust = MachineOpt::ms_kGraphicOption.fLODAdjust;
}

//----- (005B6A70) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnWindowModCheck(OptionGraphicWin *this)
{
  bool v1; // zf@1

  this->m_pkWindowFullModeCheck->m_bCheck = this->m_pkWindowFullModeCheck->m_bCheck == 0;
  v1 = this->m_pkWindowFullModeCheck->m_bCheck == 0;
  GameFrameWork::ms_bWindowSizeChanged = 1;
  MachineOpt::ms_kGraphicOption.bWindowFullMode = v1;
}
// A987C5: using guessed type bool GameFrameWork__ms_bWindowSizeChanged;

//----- (005B6AB0) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetWindowFullMode(OptionGraphicWin *this, bool bWinFullMode)
{
  MachineOpt::ms_kGraphicOption.bWindowFullMode = bWinFullMode;
  this->m_pkWindowFullModeCheck->m_bCheck = bWinFullMode;
}

//----- (005B6AD0) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetMultiSampleCheck(OptionGraphicWin *this, bool bCheck)
{
  OptionGraphicWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@4
  unsigned int v5; // [sp-4h] [bp-Ch]@2

  v2 = this;
  this->m_pkMultiSampleCheck->m_bCheck = bCheck;
  v3 = this->m_pkMultiSampleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( this->m_pkMultiSampleCheck->m_bCheck )
    v5 = -2121041452;
  else
    v5 = -2121023540;
  v4 = TextData::Get(v5);
  v3[118].__vecDelDtor((NiRefObject *)v2->m_pkMultiSampleTextWin, (unsigned int)v4);
}

//----- (005B6B30) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnSlideClick(OptionGraphicWin *this, unsigned int uiID)
{
  int v2; // edx@1

  v2 = this->m_pkSlides[uiID]->m_nCurPos;
  if ( uiID )
  {
    if ( uiID == 1 )
    {
      MachineOpt::ms_kGraphicOption.fLODAdjust = 1.0 - (double)(v2 - 5) / 10.0;
      pkCamera->m_fLODAdjust = MachineOpt::ms_kGraphicOption.fLODAdjust;
    }
    else
    {
      if ( uiID == 2 )
        OptionGraphicWin::OnCharShadowCnt(this, this->m_pkSlides[uiID]->m_nCurPos);
    }
  }
  else
  {
    OptionGraphicWin::OnViewLength(this, v2);
  }
}

//----- (005B6B90) --------------------------------------------------------
void __thiscall OptionGraphicWin::SetInfo(OptionGraphicWin *this, MachineOpt::GraphicOption *kOption)
{
  OptionGraphicWin *v2; // edi@1
  char v3; // al@1
  NiRefObjectVtbl *v4; // ebx@4
  char *v5; // eax@6
  unsigned int v6; // ST08_4@6
  bool v7; // ST1C_1@6
  bool v8; // al@6
  bool v9; // al@6
  Effect *v10; // eax@7
  bool v11; // al@9
  unsigned int v12; // [sp-4h] [bp-118h]@4
  char string; // [sp+10h] [bp-104h]@6
  unsigned int v14; // [sp+110h] [bp-4h]@1
  int v15; // [sp+114h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  this->m_pkOutLineCheck->m_bCheck = kOption->bViewOutLine;
  OptionGraphicWin::SetViewLength(this, kOption->fViewTerrainRate);
  OptionGraphicWin::SetCharShadowCnt(v2, kOption->nCharShadowLevel);
  SlideBar::SetCurPos(v2->m_pkSlides[1], (signed int)((1.0 - kOption->fLODAdjust) * 10.0 + 5.0));
  v2->m_pkWindowFullModeCheck->m_bCheck = kOption->bWindowFullMode;
  v3 = 0;
  if ( kOption->ui_DisplayMultisample )
    v3 = 1;
  v2->m_pkMultiSampleCheck->m_bCheck = v3;
  if ( v2->m_pkMultiSampleCheck->m_bCheck )
  {
    v4 = v2->m_pkMultiSampleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v12 = -2121041452;
  }
  else
  {
    v4 = v2->m_pkMultiSampleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v12 = -2121023540;
  }
  v5 = TextData::Get(v12);
  v4[118].__vecDelDtor((NiRefObject *)v2->m_pkMultiSampleTextWin, (unsigned int)v5);
  v6 = kOption->ui_DisplayResolutionWidth;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionHeight = kOption->ui_DisplayResolutionHeight;
  MachineOpt::ms_kGraphicOption.ui_DisplayResolutionWidth = v6;
  sprintf(&string, "%i x %i");
  ((void (__stdcall *)(char *))v2->m_pkResolutionTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&string);
  GameFrameWork::ms_uiDisResWidth = kOption->ui_DisplayResolutionWidth;
  GameFrameWork::ms_uiDisResHeight = kOption->ui_DisplayResolutionHeight;
  v7 = kOption->bGlowEnable;
  v2->m_pkGlowEffectCheck->m_bCheck = v7;
  MachineOpt::SetGlowEffect(v7);
  v8 = kOption->bScreenShakeEnable;
  v2->m_pkScreenShakeEffectCheck->m_bCheck = v8;
  MachineOpt::ms_kGraphicOption.bScreenShakeEnable = v8;
  v9 = kOption->bCharAuraEffectEnable;
  v2->m_pkCharAuraEffectCheck->m_bCheck = v9;
  MachineOpt::ms_kGraphicOption.bCharAuraEffectEnable = v9;
  EffectMgr::AuraEffectEnable(&g_kEffectMgr, v9);
  if ( g_pkMainChar->m_kCharShape.m_kEquip.Equ_CosEff != -1 )
  {
    v10 = EffectMgr::FindAuraEffect(&g_kEffectMgr, g_pkMainChar->m_kHandle);
    if ( v10 )
      v10->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v10, 0);
  }
  v11 = kOption->bScreenShotEnable;
  v2->m_pkScreenShotCheck->m_bCheck = v11;
  MachineOpt::ms_kGraphicOption.bScreenShotEnable = v11;
}
// A85C00: using guessed type int __security_cookie;

//----- (005B6D70) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnMultiSampleCheck(OptionGraphicWin *this)
{
  OptionGraphicWin *v1; // esi@1
  ColumnBut *v2; // eax@1
  unsigned int v3; // edi@1
  NiRefObjectVtbl *v4; // ebx@3
  char *v5; // eax@6
  unsigned int v6; // [sp-4h] [bp-10h]@4

  v1 = this;
  v2 = this->m_pkMultiSampleCheck;
  v3 = 0;
  if ( !v2->m_bCheck )
    v3 = 1;
  v2->m_bCheck = v2->m_bCheck == 0;
  v4 = this->m_pkMultiSampleTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( this->m_pkMultiSampleCheck->m_bCheck )
    v6 = -2121041452;
  else
    v6 = -2121023540;
  v5 = TextData::Get(v6);
  v4[118].__vecDelDtor((NiRefObject *)v1->m_pkMultiSampleTextWin, (unsigned int)v5);
  MachineOpt::ms_kGraphicOption.ui_DisplayMultisample = v3;
  GameFrameWork::ms_bWindowSizeChanged = 1;
}
// A987C5: using guessed type bool GameFrameWork__ms_bWindowSizeChanged;

//----- (005B6DE0) --------------------------------------------------------
void __thiscall OptionGraphicWin::ResetInfo(OptionGraphicWin *this)
{
  MachineOpt::SetGraphicOption(&this->m_kOpenGraphicOption);
}

//----- (005B6E10) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnCommand(OptionGraphicWin *this, unsigned int wParam, int lParam)
{
  bool v3; // dl@1

  v3 = this->m_bChangeOption;
  this->m_bChangeOption = 1;
  switch ( wParam )
  {
    case 0xBu:
      OptionGraphicWin::OnSlideClick(this, lParam);
      break;
    case 0xCu:
      OptionGraphicWin::OnOutLineCheck(this);
      break;
    case 0xDu:
      PgFrameWork::AddMsg(this->m_pkFrameWork, 0x8Du, 0, 0);
      break;
    case 0xEu:
      OptionGraphicWin::OnWindowModCheck(this);
      break;
    case 0xFu:
      OptionGraphicWin::OnMultiSampleCheck(this);
      break;
    case 0x10u:
      OptionGraphicWin::OnGlowEffectToggle(this);
      break;
    case 0x12u:
      OptionGraphicWin::OnShakeEffectToggle(this);
      break;
    case 0x13u:
      OptionGraphicWin::OnCharAuraEffectToggle(this);
      break;
    case 0x14u:
      OptionGraphicWin::OnScreenShotToggle(this);
      break;
    case 0x11u:
      return;
    default:
      this->m_bChangeOption = v3;
      break;
  }
}

//----- (005B6ED0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnWinClose(OptionGraphicWin *this)
{
  if ( this->m_bChangeOption )
    MachineOpt::SetGraphicOption(&this->m_kOpenGraphicOption);
  this->m_bChangeOption = 0;
}

//----- (005B6F10) --------------------------------------------------------
void __thiscall OptionGraphicWin::OpenWin(OptionGraphicWin *this)
{
  OptionGraphicWin *v1; // ebx@1

  v1 = this;
  if ( this->m_pkOptionBaseWin )
  {
    memcpy(&this->m_kOpenGraphicOption, &MachineOpt::ms_kGraphicOption, sizeof(this->m_kOpenGraphicOption));
    OptionGraphicWin::SetInfo(this, &this->m_kOpenGraphicOption);
    v1->m_pkWindowFullModeCheck->m_bCheck = MachineOpt::ms_kGraphicOption.bWindowFullMode == 0;
    OptionBaseWin::SetMode(v1->m_pkOptionBaseWin, 1);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v1,
      1);
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      1u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (005B6FA0) --------------------------------------------------------
void __thiscall OptionGraphicWin::OnDefaultSetting(OptionGraphicWin *this)
{
  MachineOpt::GraphicOption::SetDefault(&MachineOpt::ms_kGraphicOption);
  MachineOpt::SetGraphicOption(&MachineOpt::ms_kGraphicOption);
}

//----- (005B6FF0) --------------------------------------------------------
OptionGraphicWin *__cdecl OptionGraphicWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  OptionGraphicWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1B8u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWin::PgWin((PgWin *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &OptionGraphicWin::_vftable_;
    *((_DWORD *)v2 + 58) = &OptionGraphicWin::_vftable_;
    MachineOpt::GraphicOption::GraphicOption((MachineOpt::GraphicOption *)((char *)v2 + 341));
    *((_DWORD *)v2 + 101) = 0;
    *((_BYTE *)v2 + 340) = 0;
    *((_DWORD *)v2 + 103) = 0;
    *((_DWORD *)v2 + 84) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 452))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (OptionGraphicWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B3700: using guessed type int (__stdcall *OptionGraphicWin___vftable_)(int uiFlags);
// 9B371C: using guessed type int (__thiscall *OptionGraphicWin___vftable_)(void *p, char);

//----- (005B7160) --------------------------------------------------------
void *__thiscall OptionGraphicWin::_vector_deleting_destructor_(OptionGraphicWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionGraphicWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionGraphicWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B3700: using guessed type int (__stdcall *OptionGraphicWin___vftable_)(int uiFlags);
// 9B371C: using guessed type int (__thiscall *OptionGraphicWin___vftable_)(void *p, char);

//----- (005B71A0) --------------------------------------------------------
void __thiscall OptionSoundWin::OptionSoundWin(OptionSoundWin *this)
{
  OptionSoundWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->m_pkOptionBaseWin = 0;
  v1->m_bChangeOption = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionSoundWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionSoundWin::_vftable_;
}
// 9B3A00: using guessed type int (__stdcall *OptionSoundWin___vftable_)(int uiFlags);
// 9B3A1C: using guessed type int (__thiscall *OptionSoundWin___vftable_)(void *p, char);

//----- (005B71D0) --------------------------------------------------------
void __thiscall OptionSoundWin::_OptionSoundWin(OptionSoundWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionSoundWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionSoundWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9B3A00: using guessed type int (__stdcall *OptionSoundWin___vftable_)(int uiFlags);
// 9B3A1C: using guessed type int (__thiscall *OptionSoundWin___vftable_)(void *p, char);

//----- (005B71F0) --------------------------------------------------------
void __thiscall OptionSoundWin::OnClose(OptionSoundWin *this)
{
  OptionSoundWin *v1; // ebx@1
  MachineOpt::SoundOption kOpt; // [sp+10h] [bp-20h]@1
  float v3; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  memcpy(&kOpt, MachineOpt::GetSoundOption(), sizeof(kOpt));
  v3 = (double)kOpt.uiMasterVolume / 50.0;
  SoundMgr::SetMasterVolume(&g_kSoundMgr, v3);
  v3 = (double)kOpt.uiBgVolume / 50.0;
  SoundMgr::SetBgVolume(&g_kSoundMgr, v3);
  v3 = (double)kOpt.uiEffectVolume / 50.0;
  SoundMgr::SetEffectVolume(&g_kSoundMgr, v3);
  v3 = (double)kOpt.uiEnvEffectVolume / 50.0;
  SoundMgr::SetEnvEffectVolume(&g_kSoundMgr, v3);
  v1->m_bChangeOption = 0;
}

//----- (005B72D0) --------------------------------------------------------
void __thiscall OptionSoundWin::SetInfo(OptionSoundWin *this, MachineOpt::SoundOption *kOption)
{
  OptionSoundWin *v2; // esi@1

  v2 = this;
  SlideBar::SetCurPos(this->m_pkSlides[0], kOption->uiMasterVolume);
  SlideBar::SetCurPos(v2->m_pkSlides[1], kOption->uiBgVolume);
  SlideBar::SetCurPos(v2->m_pkSlides[2], kOption->uiEffectVolume);
  SlideBar::SetCurPos(v2->m_pkSlides[3], kOption->uiEnvEffectVolume);
}

//----- (005B7320) --------------------------------------------------------
void __thiscall OptionSoundWin::OnMasterVolume(OptionSoundWin *this, unsigned int uiVol)
{
  OptionSoundWin *v2; // ebx@1
  int v3; // edi@1
  signed int v4; // esi@1
  SlideBar *v5; // ecx@2
  float uiVola; // [sp+18h] [bp+8h]@1

  v2 = this;
  uiVola = (double)uiVol / 50.0;
  SoundMgr::SetMasterVolume(&g_kSoundMgr, uiVola);
  v3 = v2->m_pkSlides[0]->m_nCurPos;
  v4 = 1;
  do
  {
    v5 = v2->m_pkSlides[v4];
    if ( v3 < v5->m_nCurPos )
    {
      SlideBar::SetCurPos(v5, v3);
      switch ( v4 )
      {
        case 1:
          SoundMgr::SetBgVolume(&g_kSoundMgr, uiVola);
          break;
        case 2:
          SoundMgr::SetEffectVolume(&g_kSoundMgr, uiVola);
          break;
        case 3:
          SoundMgr::SetEnvEffectVolume(&g_kSoundMgr, uiVola);
          break;
      }
    }
    ++v4;
  }
  while ( v4 < 4 );
}

//----- (005B73E0) --------------------------------------------------------
void __thiscall OptionSoundWin::OnBgVolume(OptionSoundWin *this, unsigned int uiVol)
{
  OptionSoundWin *v2; // esi@1
  double v3; // [sp+8h] [bp-8h]@1
  float uiVola; // [sp+18h] [bp+8h]@3

  v2 = this;
  v3 = (double)uiVol / 50.0;
  if ( SoundGroup::GetMasterGain() < v3 )
    SlideBar::SetCurPos(v2->m_pkSlides[1], v2->m_pkSlides[0]->m_nCurPos);
  uiVola = v3;
  SoundMgr::SetBgVolume(&g_kSoundMgr, uiVola);
}

//----- (005B7450) --------------------------------------------------------
void __thiscall OptionSoundWin::OnEffectVolume(OptionSoundWin *this, unsigned int uiVol)
{
  OptionSoundWin *v2; // esi@1
  double v3; // [sp+8h] [bp-8h]@1
  float uiVola; // [sp+18h] [bp+8h]@3

  v2 = this;
  v3 = (double)uiVol / 50.0;
  if ( SoundGroup::GetMasterGain() < v3 )
    SlideBar::SetCurPos(v2->m_pkSlides[2], v2->m_pkSlides[0]->m_nCurPos);
  uiVola = v3;
  SoundMgr::SetEffectVolume(&g_kSoundMgr, uiVola);
}

//----- (005B74C0) --------------------------------------------------------
void __thiscall OptionSoundWin::OnEnvEffectVolume(OptionSoundWin *this, unsigned int uiVol)
{
  OptionSoundWin *v2; // esi@1
  double v3; // [sp+8h] [bp-8h]@1
  float uiVola; // [sp+18h] [bp+8h]@3

  v2 = this;
  v3 = (double)uiVol / 50.0;
  if ( SoundGroup::GetMasterGain() < v3 )
    SlideBar::SetCurPos(v2->m_pkSlides[3], v2->m_pkSlides[0]->m_nCurPos);
  uiVola = v3;
  SoundMgr::SetEnvEffectVolume(&g_kSoundMgr, uiVola);
}

//----- (005B7530) --------------------------------------------------------
void __thiscall OptionSoundWin::OnApply(OptionSoundWin *this)
{
  OptionSoundWin *v1; // esi@1
  SlideBar *v2; // edx@1
  SlideBar *v3; // ecx@1
  SlideBar *v4; // eax@1
  MachineOpt::SoundOption kOpt; // [sp+4h] [bp-1Ch]@1

  v1 = this;
  this->m_bChangeOption = 0;
  MachineOpt::SoundOption::SoundOption(&kOpt);
  v2 = v1->m_pkSlides[1];
  kOpt.uiMasterVolume = v1->m_pkSlides[0]->m_nCurPos;
  v3 = v1->m_pkSlides[2];
  kOpt.uiBgVolume = v2->m_nCurPos;
  v4 = v1->m_pkSlides[3];
  kOpt.uiEffectVolume = v3->m_nCurPos;
  kOpt.uiEnvEffectVolume = v4->m_nCurPos;
  MachineOpt::SetSoundOption(&kOpt);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005B75B0) --------------------------------------------------------
void __thiscall OptionSoundWin::CloseWin(OptionSoundWin *this)
{
  OptionSoundWin *v1; // esi@1
  int v2; // edi@3
  int v3; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkOptionBaseWin )
  {
    ((void (__stdcall *)(int *, OptionSoundWin *))this->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &v3,
      this);
    if ( v3 )
    {
      v2 = v3;
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      0);
  }
}

//----- (005B7610) --------------------------------------------------------
void __thiscall OptionSoundWin::OpenWin(OptionSoundWin *this)
{
  OptionSoundWin *v1; // esi@1
  MachineOpt::SoundOption *v2; // edi@2

  v1 = this;
  if ( this->m_pkOptionBaseWin )
  {
    v2 = MachineOpt::GetSoundOption();
    SlideBar::SetCurPos(v1->m_pkSlides[0], v2->uiMasterVolume);
    SlideBar::SetCurPos(v1->m_pkSlides[1], v2->uiBgVolume);
    SlideBar::SetCurPos(v1->m_pkSlides[2], v2->uiEffectVolume);
    SlideBar::SetCurPos(v1->m_pkSlides[3], v2->uiEnvEffectVolume);
    OptionBaseWin::SetMode(v1->m_pkOptionBaseWin, 2);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v1,
      1);
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      1u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (005B76B0) --------------------------------------------------------
void __thiscall OptionSoundWin::OnDefaultSetting(OptionSoundWin *this)
{
  OptionSoundWin *v1; // ebx@1
  MachineOpt::SoundOption *v2; // esi@1
  MachineOpt::SoundOption kOpt; // [sp+10h] [bp-20h]@1
  float v4; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  MachineOpt::SetDefaultSoundOption();
  v2 = MachineOpt::GetSoundOption();
  SlideBar::SetCurPos(v1->m_pkSlides[0], v2->uiMasterVolume);
  SlideBar::SetCurPos(v1->m_pkSlides[1], v2->uiBgVolume);
  SlideBar::SetCurPos(v1->m_pkSlides[2], v2->uiEffectVolume);
  SlideBar::SetCurPos(v1->m_pkSlides[3], v2->uiEnvEffectVolume);
  memcpy(&kOpt, MachineOpt::GetSoundOption(), sizeof(kOpt));
  v4 = (double)kOpt.uiMasterVolume / 50.0;
  SoundMgr::SetMasterVolume(&g_kSoundMgr, v4);
  v4 = (double)kOpt.uiBgVolume / 50.0;
  SoundMgr::SetBgVolume(&g_kSoundMgr, v4);
  v4 = (double)kOpt.uiEffectVolume / 50.0;
  SoundMgr::SetEffectVolume(&g_kSoundMgr, v4);
  v4 = (double)kOpt.uiEnvEffectVolume / 50.0;
  SoundMgr::SetEnvEffectVolume(&g_kSoundMgr, v4);
  v1->m_bChangeOption = 1;
}

//----- (005B77D0) --------------------------------------------------------
bool __thiscall OptionSoundWin::Create(OptionSoundWin *this, PgFrameWork *pkFrameWork)
{
  OptionSoundWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edx@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  bool result; // al@4
  PgSprData *v7; // eax@5
  PgWinSpr *v8; // eax@5
  NiPointer<PgSprData::PgHitTester> *v9; // ecx@5
  unsigned int v10; // edi@5
  unsigned int v11; // ebx@5
  PgFont *v12; // eax@5
  PgWinText *v13; // edi@5
  NiRefObjectVtbl *v14; // ebx@5
  char *v15; // eax@5
  PgSprData::PgHitTester *v16; // eax@5
  unsigned int v17; // edi@5
  unsigned int v18; // ebx@5
  PgFont *v19; // eax@5
  PgWinText *v20; // edi@5
  NiRefObjectVtbl *v21; // ebx@5
  char *v22; // eax@5
  NiPointer<PgSprData::PgHitTester> *v23; // ecx@5
  unsigned int v24; // edi@5
  unsigned int v25; // ebx@5
  PgFont *v26; // eax@5
  PgWinText *v27; // edi@5
  NiRefObjectVtbl *v28; // ebx@5
  char *v29; // eax@5
  PgSprData::PgHitTester *v30; // eax@5
  unsigned int v31; // edi@5
  unsigned int v32; // ebx@5
  PgFont *v33; // eax@5
  PgWinText *v34; // edi@5
  NiRefObjectVtbl *v35; // ebx@5
  char *v36; // eax@5
  PgSprData *v37; // eax@5
  PgSprData *v38; // edi@5
  SlideBar *v39; // eax@5
  SlideBar *v40; // eax@5
  SlideBar *v41; // eax@5
  SlideBar *v42; // eax@5
  PgFrameWork *v43; // esi@6
  int uiLeft; // [sp+0h] [bp-14h]@5
  int uiTop; // [sp+4h] [bp-10h]@5
  int v46; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  this->m_pkFrameWork = pkFrameWork;
  ((void (__stdcall *)(signed int))v3[43].__vecDelDtor)(-15);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[35].__vecDelDtor(
    (NiRefObject *)v2,
    (unsigned int)&unk_9B38F8);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[75].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2,
    1u);
  pkFrameWork = 0;
  v4 = dword_B70448;
  v46 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\Option_Sound.nif");
  PgUtil::LoadNodeNifFile(v5, (NiPointer<NiNode> *)&pkFrameWork, v4);
  if ( pkFrameWork )
  {
    v7 = PgSprData::Create((NiAVObject *)pkFrameWork, "Panel_Sound", &uiLeft, &uiTop, 0);
    v8 = PgWinSpr::CreateWin(uiLeft, uiTop, v7, &v2->baseclass_0, 0, 0);
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v8,
      0);
    v9 = PgSprData::Create((NiAVObject *)pkFrameWork, "ToSdOpt", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v10 = v9->m_pObject->m_uiHeight;
    v11 = v9->m_pObject->m_uiWidth;
    v12 = Font::Get(0);
    v13 = PgWinText::CreateWin(uiLeft, uiTop + 1, v11, v10, v12, &v2->baseclass_0, 0, 0);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v13,
      4u);
    v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v15 = TextData::Get(0x2A7B899Cu);
    v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v13,
      0);
    v16 = PgSprData::Create((NiAVObject *)pkFrameWork, "BaGdOpt", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v17 = v16->m_uiHeight;
    v18 = v16->m_uiWidth;
    v19 = Font::Get(0);
    v20 = PgWinText::CreateWin(uiLeft, uiTop + 1, v18, v17, v19, &v2->baseclass_0, 0, 0);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v20,
      4u);
    v21 = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v22 = TextData::Get(0xDE2B3549u);
    v21[118].__vecDelDtor((NiRefObject *)v20, (unsigned int)v22);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v20,
      0);
    v23 = PgSprData::Create((NiAVObject *)pkFrameWork, "EfSdOpt", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v24 = v23->m_pObject->m_uiHeight;
    v25 = v23->m_pObject->m_uiWidth;
    v26 = Font::Get(0);
    v27 = PgWinText::CreateWin(uiLeft, uiTop + 1, v25, v24, v26, &v2->baseclass_0, 0, 0);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v27,
      4u);
    v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v29 = TextData::Get(0x31717A8Fu);
    v28[118].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v27,
      0);
    v30 = PgSprData::Create((NiAVObject *)pkFrameWork, "EnEfOpt", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v31 = v30->m_uiHeight;
    v32 = v30->m_uiWidth;
    v33 = Font::Get(0);
    v34 = PgWinText::CreateWin(uiLeft, uiTop + 1, v32, v31, v33, &v2->baseclass_0, 0, 0);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v34,
      4u);
    v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v36 = TextData::Get(0x9380AED3u);
    v35[118].__vecDelDtor((NiRefObject *)v34, (unsigned int)v36);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v34,
      0);
    v37 = PgSprData::Create((NiAVObject *)pkFrameWork, "MovingPoint", &uiLeft, &uiTop, 0);
    v38 = v37;
    v39 = SlideBar::CreateWin(
            (NiNode *)pkFrameWork,
            "ToSdOptBar",
            "ToSdOptBarLow",
            "ToSdOptBarHigh",
            v37,
            0,
            &v2->baseclass_0);
    v2->m_pkSlides[0] = v39;
    v39->m_uiClickMsg = 11;
    SlideBar::SetSplitCnt(v2->m_pkSlides[0], 51);
    SlideBar::SetCurPos(v2->m_pkSlides[0], 4);
    v40 = SlideBar::CreateWin(
            (NiNode *)pkFrameWork,
            "BaGdOptBar",
            "BaGdOptBarLow",
            "BaGdOptBarHigh",
            v38,
            1u,
            &v2->baseclass_0);
    v2->m_pkSlides[1] = v40;
    v40->m_uiClickMsg = 11;
    SlideBar::SetSplitCnt(v2->m_pkSlides[1], 51);
    SlideBar::SetCurPos(v2->m_pkSlides[1], 4);
    v41 = SlideBar::CreateWin(
            (NiNode *)pkFrameWork,
            "EfSdOptBar",
            "EfSdOptBarLow",
            "EfSdOptBarHigh",
            v38,
            2u,
            &v2->baseclass_0);
    v2->m_pkSlides[2] = v41;
    v41->m_uiClickMsg = 11;
    SlideBar::SetSplitCnt(v2->m_pkSlides[2], 51);
    SlideBar::SetCurPos(v2->m_pkSlides[2], 4);
    v42 = SlideBar::CreateWin(
            (NiNode *)pkFrameWork,
            "EnEfOptBar",
            "EnEfOptBarLow",
            "EnEfOptBarHigh",
            v38,
            3u,
            &v2->baseclass_0);
    v2->m_pkSlides[3] = v42;
    v42->m_uiClickMsg = 11;
    SlideBar::SetSplitCnt(v2->m_pkSlides[3], 51);
    SlideBar::SetCurPos(v2->m_pkSlides[3], 4);
    v46 = -1;
    if ( pkFrameWork )
    {
      v43 = pkFrameWork;
      if ( !InterlockedDecrement((volatile LONG *)&pkFrameWork->baseclass_0.m_pkMsgHooker) )
      {
        if ( v43 )
          v43->baseclass_0.vfptr->SetMsgHooker((IDirectMessenger *)v43, (IDirectMessenger *)1);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B7C80) --------------------------------------------------------
void __thiscall OptionSoundWin::OnSlideClick(OptionSoundWin *this, unsigned int uiID)
{
  switch ( uiID )
  {
    case 0u:
      OptionSoundWin::OnMasterVolume(this, this->m_pkSlides[uiID]->m_nCurPos);
      break;
    case 1u:
      OptionSoundWin::OnBgVolume(this, this->m_pkSlides[uiID]->m_nCurPos);
      break;
    case 2u:
      OptionSoundWin::OnEffectVolume(this, this->m_pkSlides[uiID]->m_nCurPos);
      break;
    case 3u:
      OptionSoundWin::OnEnvEffectVolume(this, this->m_pkSlides[uiID]->m_nCurPos);
      break;
    default:
      return;
  }
}

//----- (005B7CE0) --------------------------------------------------------
void __thiscall OptionSoundWin::OnCommand(OptionSoundWin *this, unsigned int wParam, int lParam)
{
  bool v3; // al@1

  v3 = this->m_bChangeOption;
  this->m_bChangeOption = 1;
  if ( wParam == 11 )
  {
    switch ( lParam )
    {
      case 0:
        OptionSoundWin::OnMasterVolume(this, this->m_pkSlides[lParam]->m_nCurPos);
        break;
      case 1:
        OptionSoundWin::OnBgVolume(this, this->m_pkSlides[lParam]->m_nCurPos);
        break;
      case 2:
        OptionSoundWin::OnEffectVolume(this, this->m_pkSlides[lParam]->m_nCurPos);
        break;
      case 3:
        OptionSoundWin::OnEnvEffectVolume(this, this->m_pkSlides[lParam]->m_nCurPos);
        break;
      default:
        return;
    }
  }
  else
  {
    this->m_bChangeOption = v3;
  }
}

//----- (005B7D60) --------------------------------------------------------
OptionSoundWin *__cdecl OptionSoundWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  OptionSoundWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x13Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWin::PgWin((PgWin *)v1);
    *(_DWORD *)v2 = &OptionSoundWin::_vftable_;
    *((_DWORD *)v2 + 58) = &OptionSoundWin::_vftable_;
    *((_DWORD *)v2 + 77) = 0;
    *((_BYTE *)v2 + 304) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 452))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (OptionSoundWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B3A00: using guessed type int (__stdcall *OptionSoundWin___vftable_)(int uiFlags);
// 9B3A1C: using guessed type int (__thiscall *OptionSoundWin___vftable_)(void *p, char);

//----- (005B7EB0) --------------------------------------------------------
void *__thiscall OptionSoundWin::_vector_deleting_destructor_(OptionSoundWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionSoundWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionSoundWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B3A00: using guessed type int (__stdcall *OptionSoundWin___vftable_)(int uiFlags);
// 9B3A1C: using guessed type int (__thiscall *OptionSoundWin___vftable_)(void *p, char);

//----- (005B7EF0) --------------------------------------------------------
void __thiscall OptionSystemWin::OptionSystemWin(OptionSystemWin *this)
{
  OptionSystemWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionSystemWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionSystemWin::_vftable_;
  MachineOpt::GameOption::GameOption(&v1->m_kOpenGameOption);
  v1->m_pkOptionBaseWin = 0;
  v1->m_bChangeOption = 0;
}
// 9B3FE0: using guessed type int (__stdcall *OptionSystemWin___vftable_)(int uiFlags);
// 9B3FFC: using guessed type int (__thiscall *OptionSystemWin___vftable_)(void *p, char);

//----- (005B7F70) --------------------------------------------------------
void __thiscall OptionSystemWin::_OptionSystemWin(OptionSystemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionSystemWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionSystemWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9B3FE0: using guessed type int (__stdcall *OptionSystemWin___vftable_)(int uiFlags);
// 9B3FFC: using guessed type int (__thiscall *OptionSystemWin___vftable_)(void *p, char);

//----- (005B7F90) --------------------------------------------------------
void __thiscall OptionSystemWin::OnApply(OptionSystemWin *this)
{
  OptionSystemWin *v1; // esi@1
  PgWin *v2; // ST00_4@1

  v1 = this;
  v2 = (PgWin *)this->m_pkOptionBaseWin;
  this->m_bChangeOption = 0;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
  GameFrameWork::OnSaveServerGameOption((GameFrameWork *)v1->m_pkFrameWork);
}

//----- (005B7FC0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnDefaultSetting(OptionSystemWin *this)
{
  OptionSystemWin *v1; // esi@1

  v1 = this;
  GameFrameWork::SendDefaultGameOpt((GameFrameWork *)this->m_pkFrameWork);
  v1->m_bChangeOption = 1;
}

//----- (005B7FE0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnMyNameCheck(OptionSystemWin *this)
{
  this->m_pkMyNameCheck->m_bCheck = this->m_pkMyNameCheck->m_bCheck == 0;
  byte_B5BB1E = this->m_pkMyNameCheck->m_bCheck;
}
// B5BB1E: using guessed type char byte_B5BB1E;

//----- (005B8010) --------------------------------------------------------
void __thiscall OptionSystemWin::OnOtherCharNameCheck(OptionSystemWin *this)
{
  this->m_pkOtherCharNameCheck->m_bCheck = this->m_pkOtherCharNameCheck->m_bCheck == 0;
  byte_B5BB1F = this->m_pkOtherCharNameCheck->m_bCheck;
}
// B5BB1F: using guessed type char byte_B5BB1F;

//----- (005B8040) --------------------------------------------------------
void __thiscall OptionSystemWin::OnNpcNameCheck(OptionSystemWin *this)
{
  this->m_pkNpcNameCheck->m_bCheck = this->m_pkNpcNameCheck->m_bCheck == 0;
  byte_B5BB20 = this->m_pkNpcNameCheck->m_bCheck;
}
// B5BB20: using guessed type char byte_B5BB20;

//----- (005B8070) --------------------------------------------------------
void __thiscall OptionSystemWin::OnMonsterNameCheck(OptionSystemWin *this)
{
  this->m_pkMonsterNameCheck->m_bCheck = this->m_pkMonsterNameCheck->m_bCheck == 0;
  byte_B5BB21 = this->m_pkMonsterNameCheck->m_bCheck;
}
// B5BB21: using guessed type char byte_B5BB21;

//----- (005B80A0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnItemNameCheck(OptionSystemWin *this)
{
  this->m_pkItemNameCheck->m_bCheck = this->m_pkItemNameCheck->m_bCheck == 0;
  byte_B5BB22 = this->m_pkItemNameCheck->m_bCheck;
}
// B5BB22: using guessed type char byte_B5BB22;

//----- (005B80D0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnHPCheck(OptionSystemWin *this)
{
  this->m_pkHPCheck->m_bCheck = this->m_pkHPCheck->m_bCheck == 0;
  byte_B5BB23 = this->m_pkHPCheck->m_bCheck;
}
// B5BB23: using guessed type char byte_B5BB23;

//----- (005B8100) --------------------------------------------------------
void __thiscall OptionSystemWin::OnSPCheck(OptionSystemWin *this)
{
  this->m_pkSPCheck->m_bCheck = this->m_pkSPCheck->m_bCheck == 0;
  byte_B5BB24 = this->m_pkSPCheck->m_bCheck;
}
// B5BB24: using guessed type char byte_B5BB24;

//----- (005B8130) --------------------------------------------------------
void __thiscall OptionSystemWin::OnInterfaceCheck(OptionSystemWin *this)
{
  this->m_pkInterfaceCheck->m_bCheck = this->m_pkInterfaceCheck->m_bCheck == 0;
  byte_B5BB25 = this->m_pkInterfaceCheck->m_bCheck;
}
// B5BB25: using guessed type char byte_B5BB25;

//----- (005B8160) --------------------------------------------------------
void __thiscall OptionSystemWin::OnSpeechCheck(OptionSystemWin *this)
{
  this->m_pkSpeechCheck->m_bCheck = this->m_pkSpeechCheck->m_bCheck == 0;
  byte_B5BB26 = this->m_pkSpeechCheck->m_bCheck;
}
// B5BB26: using guessed type char byte_B5BB26;

//----- (005B8190) --------------------------------------------------------
void __thiscall OptionSystemWin::OnInterfacePosCheck(OptionSystemWin *this)
{
  this->m_pkInterfacePosCheck->m_bCheck = this->m_pkInterfacePosCheck->m_bCheck == 0;
  byte_B5BB27 = this->m_pkInterfacePosCheck->m_bCheck;
  if ( this->m_pkInterfacePosCheck->m_bCheck )
    GameFrameWork::ChangeWinDefaultPos((GameFrameWork *)this->m_pkFrameWork);
}
// B5BB27: using guessed type char byte_B5BB27;

//----- (005B81E0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnChattingHideCheck(OptionSystemWin *this)
{
  this->m_pkChattingHideCheck->m_bCheck = this->m_pkChattingHideCheck->m_bCheck == 0;
  byte_B5BB46 = this->m_pkChattingHideCheck->m_bCheck;
}
// B5BB46: using guessed type char byte_B5BB46;

//----- (005B8210) --------------------------------------------------------
void __thiscall OptionSystemWin::OnWisCheck(OptionSystemWin *this)
{
  this->m_pkWisRejCheck->m_bCheck = this->m_pkWisRejCheck->m_bCheck == 0;
  byte_B5BB28 = this->m_pkWisRejCheck->m_bCheck;
}
// B5BB28: using guessed type char byte_B5BB28;

//----- (005B8240) --------------------------------------------------------
void __thiscall OptionSystemWin::OnTrdCheck(OptionSystemWin *this)
{
  this->m_pkTrdRejCheck->m_bCheck = this->m_pkTrdRejCheck->m_bCheck == 0;
  byte_B5BB29 = this->m_pkTrdRejCheck->m_bCheck;
}
// B5BB29: using guessed type char byte_B5BB29;

//----- (005B8270) --------------------------------------------------------
void __thiscall OptionSystemWin::OnParCheck(OptionSystemWin *this)
{
  this->m_pkParRejCheck->m_bCheck = this->m_pkParRejCheck->m_bCheck == 0;
  byte_B5BB2A = this->m_pkParRejCheck->m_bCheck;
}
// B5BB2A: using guessed type char byte_B5BB2A;

//----- (005B82A0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnAgCheck(OptionSystemWin *this)
{
  this->m_pkAgRejCheck->m_bCheck = this->m_pkAgRejCheck->m_bCheck == 0;
  byte_B5BB2B = this->m_pkAgRejCheck->m_bCheck;
}
// B5BB2B: using guessed type char byte_B5BB2B;

//----- (005B82D0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnSystemMsgCheck(OptionSystemWin *this)
{
  this->m_pkSystemMsgCheck->m_bCheck = this->m_pkSystemMsgCheck->m_bCheck == 0;
  byte_B5BB2C = this->m_pkSystemMsgCheck->m_bCheck;
}
// B5BB2C: using guessed type char byte_B5BB2C;

//----- (005B8300) --------------------------------------------------------
void __thiscall OptionSystemWin::OnOKMsgBoxCheck(OptionSystemWin *this)
{
  this->m_pkOKMsgBoxCheck->m_bCheck = this->m_pkOKMsgBoxCheck->m_bCheck == 0;
  byte_B5BB2D = this->m_pkOKMsgBoxCheck->m_bCheck;
}
// B5BB2D: using guessed type char byte_B5BB2D;

//----- (005B8330) --------------------------------------------------------
void __thiscall OptionSystemWin::OnChatInputCheck(OptionSystemWin *this)
{
  this->m_pkChatInputCheck->m_bCheck = this->m_pkChatInputCheck->m_bCheck == 0;
  byte_B5BB48 = this->m_pkChatInputCheck->m_bCheck;
}
// B5BB48: using guessed type char byte_B5BB48;

//----- (005B8360) --------------------------------------------------------
void __thiscall OptionSystemWin::OnNamePanelCheck(OptionSystemWin *this)
{
  this->m_pkNamePanelCheck->m_bCheck = this->m_pkNamePanelCheck->m_bCheck == 0;
  byte_B5BB4B = this->m_pkNamePanelCheck->m_bCheck;
  ScreenBDMgr::InitCharBD(&g_kScrnBDMgr, byte_B5BB4B);
}
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (005B83A0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnBasicInfoTipCheck(OptionSystemWin *this)
{
  this->m_pkBasicInfoTipCheck->m_bCheck = this->m_pkBasicInfoTipCheck->m_bCheck == 0;
  byte_B5BB4C = this->m_pkBasicInfoTipCheck->m_bCheck;
}
// B5BB4C: using guessed type char byte_B5BB4C;

//----- (005B83D0) --------------------------------------------------------
void __thiscall OptionSystemWin::OnPlayGuideCheck(OptionSystemWin *this)
{
  bool v1; // al@1
  PgFrameWork *v2; // ecx@1

  this->m_pkPlayGuideCheck->m_bCheck = this->m_pkPlayGuideCheck->m_bCheck == 0;
  v1 = this->m_pkPlayGuideCheck->m_bCheck;
  byte_B5BB4D = this->m_pkPlayGuideCheck->m_bCheck;
  v2 = this->m_pkFrameWork;
  if ( v2 )
  {
    if ( v1 )
      GameFrameWork::OpenPlayGuideMinWin((GameFrameWork *)v2);
    else
      GameFrameWork::ClosePlayGuideMinWin((GameFrameWork *)v2);
  }
}
// B5BB4D: using guessed type char byte_B5BB4D;

//----- (005B8410) --------------------------------------------------------
void __thiscall OptionSystemWin::OnAutoStack(OptionSystemWin *this)
{
  OptionSystemWin *v1; // eax@1
  PgFrameWork *v2; // ecx@1
  InventoryWin *v3; // ecx@2

  v1 = this;
  this->m_pkAutoStack->m_bCheck = this->m_pkAutoStack->m_bCheck == 0;
  byte_B5BB4E = this->m_pkAutoStack->m_bCheck;
  v2 = this->m_pkFrameWork;
  if ( v2 )
  {
    v3 = (InventoryWin *)v2[19].m_BackFrameID;
    if ( v3 )
      InventoryWin::SetEnableAutoArrange(v3, v1->m_pkAutoStack->m_bCheck);
  }
}
// B5BB4E: using guessed type char byte_B5BB4E;

//----- (005B8470) --------------------------------------------------------
void __thiscall OptionSystemWin::CloseWin(OptionSystemWin *this)
{
  OptionSystemWin *v1; // esi@1
  int v2; // edi@3
  int v3; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkOptionBaseWin )
  {
    ((void (__stdcall *)(int *, OptionSystemWin *))this->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &v3,
      this);
    if ( v3 )
    {
      v2 = v3;
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      0);
  }
}

//----- (005B84D0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetMyNameCheck(OptionSystemWin *this, bool b)
{
  this->m_pkMyNameCheck->m_bCheck = b;
}

//----- (005B84F0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetOtherCharNameCheck(OptionSystemWin *this, bool b)
{
  this->m_pkOtherCharNameCheck->m_bCheck = b;
}

//----- (005B8510) --------------------------------------------------------
void __thiscall OptionSystemWin::SetNpcNameCheck(OptionSystemWin *this, bool b)
{
  this->m_pkNpcNameCheck->m_bCheck = b;
}

//----- (005B8530) --------------------------------------------------------
void __thiscall OptionSystemWin::SetMonsterNameCheck(OptionSystemWin *this, bool b)
{
  this->m_pkMonsterNameCheck->m_bCheck = b;
}

//----- (005B8550) --------------------------------------------------------
void __thiscall OptionSystemWin::SetItemNameCheck(OptionSystemWin *this, bool b)
{
  this->m_pkItemNameCheck->m_bCheck = b;
}

//----- (005B8570) --------------------------------------------------------
void __thiscall OptionSystemWin::SetHPCheck(OptionSystemWin *this, bool b)
{
  this->m_pkHPCheck->m_bCheck = b;
}

//----- (005B8590) --------------------------------------------------------
void __thiscall OptionSystemWin::SetSPCheck(OptionSystemWin *this, bool b)
{
  this->m_pkSPCheck->m_bCheck = b;
}

//----- (005B85B0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetInterfaceCheck(OptionSystemWin *this, bool b)
{
  this->m_pkInterfaceCheck->m_bCheck = b;
}

//----- (005B85D0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetSpeechCheck(OptionSystemWin *this, bool b)
{
  this->m_pkSpeechCheck->m_bCheck = b;
}

//----- (005B85F0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetInterfacePosCheck(OptionSystemWin *this, bool b)
{
  this->m_pkInterfacePosCheck->m_bCheck = b;
}

//----- (005B8610) --------------------------------------------------------
void __thiscall OptionSystemWin::SetChattingHideCheck(OptionSystemWin *this, bool b)
{
  this->m_pkChattingHideCheck->m_bCheck = b;
}

//----- (005B8630) --------------------------------------------------------
void __thiscall OptionSystemWin::SetWisCheck(OptionSystemWin *this, bool b)
{
  this->m_pkWisRejCheck->m_bCheck = b;
}

//----- (005B8650) --------------------------------------------------------
void __thiscall OptionSystemWin::SetTrdCheck(OptionSystemWin *this, bool b)
{
  this->m_pkTrdRejCheck->m_bCheck = b;
}

//----- (005B8670) --------------------------------------------------------
void __thiscall OptionSystemWin::SetParCheck(OptionSystemWin *this, bool b)
{
  this->m_pkParRejCheck->m_bCheck = b;
}

//----- (005B8690) --------------------------------------------------------
void __thiscall OptionSystemWin::SetAgCheck(OptionSystemWin *this, bool b)
{
  this->m_pkAgRejCheck->m_bCheck = b;
}

//----- (005B86B0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetSystemMsgCheck(OptionSystemWin *this, bool b)
{
  this->m_pkSystemMsgCheck->m_bCheck = b;
}

//----- (005B86D0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetOKMsgBoxCheck(OptionSystemWin *this, bool b)
{
  this->m_pkOKMsgBoxCheck->m_bCheck = b;
}

//----- (005B86F0) --------------------------------------------------------
void __thiscall OptionSystemWin::SetChatInputCheck(OptionSystemWin *this, bool b)
{
  this->m_pkChatInputCheck->m_bCheck = b;
}

//----- (005B8710) --------------------------------------------------------
void __thiscall OptionSystemWin::SetNamePanelCheck(OptionSystemWin *this, bool b)
{
  this->m_pkNamePanelCheck->m_bCheck = b;
}

//----- (005B8730) --------------------------------------------------------
void __thiscall OptionSystemWin::SetBasicInfoTipCheck(OptionSystemWin *this, bool b)
{
  this->m_pkBasicInfoTipCheck->m_bCheck = b;
}

//----- (005B8750) --------------------------------------------------------
void __thiscall OptionSystemWin::SetPlayGuideCheck(OptionSystemWin *this, bool b)
{
  this->m_pkPlayGuideCheck->m_bCheck = b;
}

//----- (005B8770) --------------------------------------------------------
void __thiscall OptionSystemWin::SetAutoStack(OptionSystemWin *this, bool b)
{
  this->m_pkAutoStack->m_bCheck = b;
}

//----- (005B8790) --------------------------------------------------------
void __thiscall OptionSystemWin::SetInfo(OptionSystemWin *this, MachineOpt::GameOption *kOption)
{
  OptionSystemWin *v2; // esi@1

  v2 = this;
  this->m_pkMyNameCheck->m_bCheck = kOption->bMyNameCheck;
  this->m_pkOtherCharNameCheck->m_bCheck = kOption->bOtherCharNameCheck;
  this->m_pkNpcNameCheck->m_bCheck = kOption->bNpcNameCheck;
  this->m_pkMonsterNameCheck->m_bCheck = kOption->bMonsterNameCheck;
  this->m_pkItemNameCheck->m_bCheck = kOption->bItemNameCheck;
  this->m_pkHPCheck->m_bCheck = kOption->bHPCheck;
  this->m_pkSPCheck->m_bCheck = kOption->bSPCheck;
  this->m_pkInterfaceCheck->m_bCheck = kOption->bInterfaceCheck;
  this->m_pkSpeechCheck->m_bCheck = kOption->bSpeechCheck;
  this->m_pkInterfacePosCheck->m_bCheck = kOption->bInterfacePosCheck;
  this->m_pkChattingHideCheck->m_bCheck = kOption->bChattingHideCheck;
  this->m_pkWisRejCheck->m_bCheck = kOption->bWisCheck;
  this->m_pkTrdRejCheck->m_bCheck = kOption->bTrdCheck;
  this->m_pkParRejCheck->m_bCheck = kOption->bParCheck;
  this->m_pkAgRejCheck->m_bCheck = kOption->bAgCheck;
  this->m_pkSystemMsgCheck->m_bCheck = kOption->bSystemMsgCheck;
  this->m_pkOKMsgBoxCheck->m_bCheck = kOption->bOKMsgBoxCheck;
  this->m_pkChatInputCheck->m_bCheck = kOption->bChatInputCheck;
  this->m_pkNamePanelCheck->m_bCheck = kOption->bNamePanelCheck;
  this->m_pkBasicInfoTipCheck->m_bCheck = kOption->bBasicInfoTipCheck;
  this->m_pkPlayGuideCheck->m_bCheck = kOption->bPlayGuideCheck;
  ScreenBDMgr::InitCharBD(&g_kScrnBDMgr, byte_B5BB4B);
  v2->m_pkAutoStack->m_bCheck = kOption->bAutoStack;
}
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (005B8920) --------------------------------------------------------
bool __thiscall OptionSystemWin::Create(OptionSystemWin *this, PgFrameWork *pkFrameWork)
{
  OptionSystemWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edx@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  NiAVObject *v6; // eax@4
  NiProperty *v7; // eax@4
  NiProperty *v8; // ebx@4
  NiRefObjectVtbl *v9; // eax@6
  NiSourceTexture *v10; // edi@7
  NiNode *v11; // esi@10
  PgSprData *v13; // eax@15
  PgWinSpr *v14; // eax@15
  NiPointer<PgSprData::PgHitTester> *v15; // ecx@15
  unsigned int v16; // ebx@15
  unsigned int v17; // ST40_4@15
  PgFont *v18; // eax@15
  PgWinText *v19; // ebx@15
  NiRefObjectVtbl *v20; // ST40_4@15
  char *v21; // eax@15
  PgSprData *v22; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v23; // ecx@15
  unsigned int v24; // ebx@15
  unsigned int v25; // ST40_4@15
  PgFont *v26; // eax@15
  PgWinText *v27; // ebx@15
  NiRefObjectVtbl *v28; // ST40_4@15
  char *v29; // eax@15
  PgSprData *v30; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v31; // ecx@15
  unsigned int v32; // ebx@15
  unsigned int v33; // ST40_4@15
  PgFont *v34; // eax@15
  PgWinText *v35; // ebx@15
  NiRefObjectVtbl *v36; // ST40_4@15
  char *v37; // eax@15
  PgSprData *v38; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v39; // ecx@15
  unsigned int v40; // ebx@15
  unsigned int v41; // ST40_4@15
  PgFont *v42; // eax@15
  PgWinText *v43; // ebx@15
  NiRefObjectVtbl *v44; // ST40_4@15
  char *v45; // eax@15
  PgSprData *v46; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v47; // ecx@15
  unsigned int v48; // ebx@15
  unsigned int v49; // ST40_4@15
  PgFont *v50; // eax@15
  PgWinText *v51; // ebx@15
  NiRefObjectVtbl *v52; // ST40_4@15
  char *v53; // eax@15
  PgSprData *v54; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v55; // ecx@15
  unsigned int v56; // ebx@15
  unsigned int v57; // ST40_4@15
  PgFont *v58; // eax@15
  PgWinText *v59; // ebx@15
  NiRefObjectVtbl *v60; // ST40_4@15
  char *v61; // eax@15
  PgSprData *v62; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v63; // ecx@15
  unsigned int v64; // ebx@15
  unsigned int v65; // ST40_4@15
  PgFont *v66; // eax@15
  PgWinText *v67; // ebx@15
  NiRefObjectVtbl *v68; // ST40_4@15
  char *v69; // eax@15
  PgSprData *v70; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v71; // ecx@15
  unsigned int v72; // ebx@15
  unsigned int v73; // ST40_4@15
  PgFont *v74; // eax@15
  PgWinText *v75; // ebx@15
  NiRefObjectVtbl *v76; // ST40_4@15
  char *v77; // eax@15
  PgSprData *v78; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v79; // ecx@15
  unsigned int v80; // ebx@15
  unsigned int v81; // ST40_4@15
  PgFont *v82; // eax@15
  PgWinText *v83; // ebx@15
  NiRefObjectVtbl *v84; // ST40_4@15
  char *v85; // eax@15
  PgSprData *v86; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v87; // ecx@15
  unsigned int v88; // ebx@15
  unsigned int v89; // ST40_4@15
  PgFont *v90; // eax@15
  PgWinText *v91; // ebx@15
  NiRefObjectVtbl *v92; // ST40_4@15
  char *v93; // eax@15
  PgSprData *v94; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v95; // ecx@15
  unsigned int v96; // ebx@15
  unsigned int v97; // ST40_4@15
  PgFont *v98; // eax@15
  PgWinText *v99; // ebx@15
  NiRefObjectVtbl *v100; // ST40_4@15
  char *v101; // eax@15
  PgSprData *v102; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v103; // ecx@15
  unsigned int v104; // ebx@15
  unsigned int v105; // ST40_4@15
  PgFont *v106; // eax@15
  PgWinText *v107; // ebx@15
  NiRefObjectVtbl *v108; // ST40_4@15
  char *v109; // eax@15
  PgSprData *v110; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v111; // ecx@15
  unsigned int v112; // ebx@15
  unsigned int v113; // ST40_4@15
  PgFont *v114; // eax@15
  PgWinText *v115; // ebx@15
  NiRefObjectVtbl *v116; // ST40_4@15
  char *v117; // eax@15
  PgSprData *v118; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v119; // ecx@15
  unsigned int v120; // ebx@15
  unsigned int v121; // ST40_4@15
  PgFont *v122; // eax@15
  PgWinText *v123; // ebx@15
  NiRefObjectVtbl *v124; // ST40_4@15
  char *v125; // eax@15
  PgSprData *v126; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v127; // ecx@15
  unsigned int v128; // ebx@15
  unsigned int v129; // ST40_4@15
  PgFont *v130; // eax@15
  PgWinText *v131; // ebx@15
  NiRefObjectVtbl *v132; // ST40_4@15
  char *v133; // eax@15
  PgSprData *v134; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v135; // ecx@15
  unsigned int v136; // ebx@15
  unsigned int v137; // ST40_4@15
  PgFont *v138; // eax@15
  PgWinText *v139; // ebx@15
  NiRefObjectVtbl *v140; // ST40_4@15
  char *v141; // eax@15
  PgSprData *v142; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v143; // ecx@15
  unsigned int v144; // ebx@15
  unsigned int v145; // ST40_4@15
  PgFont *v146; // eax@15
  PgWinText *v147; // ebx@15
  NiRefObjectVtbl *v148; // ST40_4@15
  char *v149; // eax@15
  PgSprData *v150; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v151; // ecx@15
  unsigned int v152; // ebx@15
  unsigned int v153; // ST40_4@15
  PgFont *v154; // eax@15
  PgWinText *v155; // ebx@15
  NiRefObjectVtbl *v156; // ST40_4@15
  char *v157; // eax@15
  PgSprData *v158; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v159; // ecx@15
  unsigned int v160; // ebx@15
  unsigned int v161; // ST40_4@15
  PgFont *v162; // eax@15
  PgWinText *v163; // ebx@15
  NiRefObjectVtbl *v164; // ST40_4@15
  char *v165; // eax@15
  PgSprData *v166; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v167; // ecx@15
  unsigned int v168; // ebx@15
  unsigned int v169; // ST40_4@15
  PgFont *v170; // eax@15
  PgWinText *v171; // ebx@15
  NiRefObjectVtbl *v172; // ST40_4@15
  char *v173; // eax@15
  PgSprData *v174; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v175; // ecx@15
  unsigned int v176; // ebx@15
  unsigned int v177; // ST40_4@15
  PgFont *v178; // eax@15
  PgWinText *v179; // ebx@15
  NiRefObjectVtbl *v180; // ST40_4@15
  char *v181; // eax@15
  PgSprData *v182; // ebx@15
  NiPointer<PgSprData::PgHitTester> *v183; // ecx@15
  unsigned int v184; // ebx@15
  unsigned int v185; // ST40_4@15
  PgFont *v186; // eax@15
  PgWinText *v187; // ebx@15
  NiRefObjectVtbl *v188; // ST40_4@15
  char *v189; // eax@15
  PgSprData *v190; // edi@15
  NiNode *v191; // edi@17
  NiProperty *spTexProp; // [sp+0h] [bp-1Ch]@4
  NiPointer<NiNode> spNode; // [sp+8h] [bp-14h]@1
  int uiLeft; // [sp+Ch] [bp-10h]@15
  int v195; // [sp+18h] [bp-4h]@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  this->m_pkFrameWork = pkFrameWork;
  ((void (__stdcall *)(signed int))v3[43].__vecDelDtor)(-15);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[35].__vecDelDtor(
    (NiRefObject *)v2,
    (unsigned int)&unk_9B3BE4);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[75].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2,
    1u);
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v195 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\Option_System.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel_System");
  v7 = NiAVObject::GetProperty(v6, 8);
  v8 = v7;
  spTexProp = v7;
  if ( v7 )
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v9 = v8[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v195) = 1;
  if ( !v9 || (v10 = (NiSourceTexture *)v9[1].__vecDelDtor) == 0 )
  {
    LOBYTE(v195) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v11 = spNode.m_pObject;
    v195 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    return 0;
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel_System", &uiLeft, (int *)&pkFrameWork, v10);
  v14 = PgWinSpr::CreateWin(uiLeft, (int)pkFrameWork, v13, &v2->baseclass_0, 0, 0);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v14,
    0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyChrName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v16 = v15->m_pObject->m_uiHeight;
  v17 = v15->m_pObject->m_uiWidth;
  v18 = Font::Get(0);
  v19 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v17,
          v16,
          v18,
          &v2->baseclass_0,
          0,
          0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v19,
    4u);
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData::Get(0x2A428FA5u);
  v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "MyNmChClick");
  v2->m_pkMyNameCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v22, &v2->baseclass_0, 0xBu, 0);
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OtChrName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v24 = v23->m_pObject->m_uiHeight;
  v25 = v23->m_pObject->m_uiWidth;
  v26 = Font::Get(0);
  v27 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v25,
          v24,
          v26,
          &v2->baseclass_0,
          0,
          0);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    4u);
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData::Get(0xA18283D6u);
  v28[118].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v27,
    0);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OtNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "OtNmChClick");
  v2->m_pkOtherCharNameCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v30, &v2->baseclass_0, 0xCu, 0);
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NpcName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v32 = v31->m_pObject->m_uiHeight;
  v33 = v31->m_pObject->m_uiWidth;
  v34 = Font::Get(0);
  v35 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v33,
          v32,
          v34,
          &v2->baseclass_0,
          0,
          0);
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v35,
    4u);
  v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v37 = TextData::Get(0xE0FB4C37u);
  v36[118].__vecDelDtor((NiRefObject *)v35, (unsigned int)v37);
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v35,
    0);
  v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v38, &spNode.m_pObject->baseclass_0, "NPCNmChClick");
  v2->m_pkNpcNameCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v38, &v2->baseclass_0, 0xDu, 0);
  v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MonName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v40 = v39->m_pObject->m_uiHeight;
  v41 = v39->m_pObject->m_uiWidth;
  v42 = Font::Get(0);
  v43 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v41,
          v40,
          v42,
          &v2->baseclass_0,
          0,
          0);
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v43,
    4u);
  v44 = v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v45 = TextData::Get(0xDFFA4C36u);
  v44[118].__vecDelDtor((NiRefObject *)v43, (unsigned int)v45);
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v43,
    0);
  v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MonNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v46, &spNode.m_pObject->baseclass_0, "MonNmChClick");
  v2->m_pkMonsterNameCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v46, &v2->baseclass_0, 0xEu, 0);
  v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ItName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v48 = v47->m_pObject->m_uiHeight;
  v49 = v47->m_pObject->m_uiWidth;
  v50 = Font::Get(0);
  v51 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v49,
          v48,
          v50,
          &v2->baseclass_0,
          0,
          0);
  v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v51,
    4u);
  v52 = v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v53 = TextData::Get(0x6B8AE5EFu);
  v52[118].__vecDelDtor((NiRefObject *)v51, (unsigned int)v53);
  v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v51,
    0);
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ItNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v54, &spNode.m_pObject->baseclass_0, "ItNmChClick");
  v2->m_pkItemNameCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v54, &v2->baseclass_0, 0xFu, 0);
  v55 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HpName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v56 = v55->m_pObject->m_uiHeight;
  v57 = v55->m_pObject->m_uiWidth;
  v58 = Font::Get(0);
  v59 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v57,
          v56,
          v58,
          &v2->baseclass_0,
          0,
          0);
  v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v59,
    4u);
  v60 = v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v61 = TextData::Get(0x393C4A58u);
  v60[118].__vecDelDtor((NiRefObject *)v59, (unsigned int)v61);
  v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v59,
    0);
  v62 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HPNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v62, &spNode.m_pObject->baseclass_0, "HPNmChClick");
  v2->m_pkHPCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v62, &v2->baseclass_0, 0x10u, 0);
  v63 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v64 = v63->m_pObject->m_uiHeight;
  v65 = v63->m_pObject->m_uiWidth;
  v66 = Font::Get(0);
  v67 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v65,
          v64,
          v66,
          &v2->baseclass_0,
          0,
          0);
  v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v67,
    4u);
  v68 = v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v69 = TextData::Get(0x39479AA4u);
  v68[118].__vecDelDtor((NiRefObject *)v67, (unsigned int)v69);
  v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v67,
    0);
  v70 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SPNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v70, &spNode.m_pObject->baseclass_0, "SPNmChClick");
  v2->m_pkSPCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v70, &v2->baseclass_0, 0x11u, 0);
  v71 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InterfaceName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v72 = v71->m_pObject->m_uiHeight;
  v73 = v71->m_pObject->m_uiWidth;
  v74 = Font::Get(0);
  v75 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v73,
          v72,
          v74,
          &v2->baseclass_0,
          0,
          0);
  v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v75,
    4u);
  v76 = v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v77 = TextData::Get(0xE33F303Cu);
  v76[118].__vecDelDtor((NiRefObject *)v75, (unsigned int)v77);
  v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v75,
    0);
  v78 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InterfaceNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v78, &spNode.m_pObject->baseclass_0, "InterfaceNmChClick");
  v2->m_pkInterfaceCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v78, &v2->baseclass_0, 0x12u, 0);
  v79 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpeechName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v80 = v79->m_pObject->m_uiHeight;
  v81 = v79->m_pObject->m_uiWidth;
  v82 = Font::Get(0);
  v83 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v81,
          v80,
          v82,
          &v2->baseclass_0,
          0,
          0);
  v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v83,
    4u);
  v84 = v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v85 = TextData::Get(0x2844739Du);
  v84[118].__vecDelDtor((NiRefObject *)v83, (unsigned int)v85);
  v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v83,
    0);
  v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpeechNmChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v86, &spNode.m_pObject->baseclass_0, "SpeechNmChClick");
  v2->m_pkSpeechCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v86, &v2->baseclass_0, 0x13u, 0);
  v87 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InterfacePosName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v88 = v87->m_pObject->m_uiHeight;
  v89 = v87->m_pObject->m_uiWidth;
  v90 = Font::Get(0);
  v91 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v89,
          v88,
          v90,
          &v2->baseclass_0,
          0,
          0);
  v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v91,
    4u);
  v92 = v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v93 = TextData::Get(0x333F838Bu);
  v92[118].__vecDelDtor((NiRefObject *)v91, (unsigned int)v93);
  v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v91,
    0);
  v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InterfacePosChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v94, &spNode.m_pObject->baseclass_0, "InterfacePosChClick");
  v2->m_pkInterfacePosCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v94, &v2->baseclass_0, 0x14u, 0);
  v95 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChattingHideName", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v96 = v95->m_pObject->m_uiHeight;
  v97 = v95->m_pObject->m_uiWidth;
  v98 = Font::Get(0);
  v99 = PgWinText::CreateWin(
          uiLeft,
          (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
          v97,
          v96,
          v98,
          &v2->baseclass_0,
          0,
          0);
  v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v99,
    4u);
  v100 = v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v101 = TextData::Get(0x83C9EEDDu);
  v100[118].__vecDelDtor((NiRefObject *)v99, (unsigned int)v101);
  v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v99,
    0);
  v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChattingHideChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "ChattingHideChClick");
  v2->m_pkChattingHideCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v102, &v2->baseclass_0, 0x15u, 0);
  v103 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WisRej", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v104 = v103->m_pObject->m_uiHeight;
  v105 = v103->m_pObject->m_uiWidth;
  v106 = Font::Get(0);
  v107 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v105,
           v104,
           v106,
           &v2->baseclass_0,
           0,
           0);
  v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v107,
    4u);
  v108 = v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v109 = TextData::Get(0x838194A3u);
  v108[118].__vecDelDtor((NiRefObject *)v107, (unsigned int)v109);
  v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v107,
    0);
  v110 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WisRejChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v110, &spNode.m_pObject->baseclass_0, "WisRejChClick");
  v2->m_pkWisRejCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v110, &v2->baseclass_0, 0x16u, 0);
  v111 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TrdRej", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v112 = v111->m_pObject->m_uiHeight;
  v113 = v111->m_pObject->m_uiWidth;
  v114 = Font::Get(0);
  v115 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v113,
           v112,
           v114,
           &v2->baseclass_0,
           0,
           0);
  v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v115,
    4u);
  v116 = v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v117 = TextData::Get(0x29468694u);
  v116[118].__vecDelDtor((NiRefObject *)v115, (unsigned int)v117);
  v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v115,
    0);
  v118 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TrdRejChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v118, &spNode.m_pObject->baseclass_0, "TrdRejChClick");
  v2->m_pkTrdRejCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v118, &v2->baseclass_0, 0x17u, 0);
  v119 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ParRej", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v120 = v119->m_pObject->m_uiHeight;
  v121 = v119->m_pObject->m_uiWidth;
  v122 = Font::Get(0);
  v123 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v121,
           v120,
           v122,
           &v2->baseclass_0,
           0,
           0);
  v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v123,
    4u);
  v124 = v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v125 = TextData::Get(0xF1D9CB42u);
  v124[118].__vecDelDtor((NiRefObject *)v123, (unsigned int)v125);
  v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v123,
    0);
  v126 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ParRejChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v126, &spNode.m_pObject->baseclass_0, "ParRejChClick");
  v2->m_pkParRejCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v126, &v2->baseclass_0, 0x18u, 0);
  v127 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AgRej", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v128 = v127->m_pObject->m_uiHeight;
  v129 = v127->m_pObject->m_uiWidth;
  v130 = Font::Get(0);
  v131 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v129,
           v128,
           v130,
           &v2->baseclass_0,
           0,
           0);
  v131->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v131,
    4u);
  v132 = v131->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v133 = TextData::Get(0xE9D0DF24u);
  v132[118].__vecDelDtor((NiRefObject *)v131, (unsigned int)v133);
  v131->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v131,
    0);
  v134 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AgRejChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v134, &spNode.m_pObject->baseclass_0, "AgRejChClick");
  v2->m_pkAgRejCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v134, &v2->baseclass_0, 0x19u, 0);
  v135 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SystemMsgRej", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v136 = v135->m_pObject->m_uiHeight;
  v137 = v135->m_pObject->m_uiWidth;
  v138 = Font::Get(0);
  v139 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v137,
           v136,
           v138,
           &v2->baseclass_0,
           0,
           0);
  v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v139,
    4u);
  v140 = v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v141 = TextData::Get(0x9CA5E9DBu);
  v140[118].__vecDelDtor((NiRefObject *)v139, (unsigned int)v141);
  v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v139,
    0);
  v142 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SystemMsgChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v142, &spNode.m_pObject->baseclass_0, "SystemMsgChClick");
  v2->m_pkSystemMsgCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v142, &v2->baseclass_0, 0x1Au, 0);
  v143 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKMsgBoxRej", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v144 = v143->m_pObject->m_uiHeight;
  v145 = v143->m_pObject->m_uiWidth;
  v146 = Font::Get(0);
  v147 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v145,
           v144,
           v146,
           &v2->baseclass_0,
           0,
           0);
  v147->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v147,
    4u);
  v148 = v147->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v149 = TextData::Get(0x91A8DFDAu);
  v148[118].__vecDelDtor((NiRefObject *)v147, (unsigned int)v149);
  v147->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v147,
    0);
  v150 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKMsgBoxChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v150, &spNode.m_pObject->baseclass_0, "OKMsgBoxChClick");
  v2->m_pkOKMsgBoxCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v150, &v2->baseclass_0, 0x1Bu, 0);
  v151 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChatInputRej", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v152 = v151->m_pObject->m_uiHeight;
  v153 = v151->m_pObject->m_uiWidth;
  v154 = Font::Get(0);
  v155 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v153,
           v152,
           v154,
           &v2->baseclass_0,
           0,
           0);
  v155->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v155,
    4u);
  v156 = v155->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v157 = TextData::Get(0xA48492D0u);
  v156[118].__vecDelDtor((NiRefObject *)v155, (unsigned int)v157);
  v155->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v155,
    0);
  v158 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChatInputChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v158, &spNode.m_pObject->baseclass_0, "ChatInputChClick");
  v2->m_pkChatInputCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v158, &v2->baseclass_0, 0x1Cu, 0);
  v159 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NamePanel3D", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v160 = v159->m_pObject->m_uiHeight;
  v161 = v159->m_pObject->m_uiWidth;
  v162 = Font::Get(0);
  v163 = PgWinText::CreateWin(
           uiLeft,
           (int)((char *)&pkFrameWork->baseclass_0.vfptr + 1),
           v161,
           v160,
           v162,
           &v2->baseclass_0,
           0,
           0);
  v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v163,
    4u);
  v164 = v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v165 = TextData2::Get(0x78797F75u);
  v164[118].__vecDelDtor((NiRefObject *)v163, (unsigned int)v165);
  v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v163,
    0);
  v166 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NamePanel3DNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v166, &spNode.m_pObject->baseclass_0, "NamePanel3DClick");
  v2->m_pkNamePanelCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v166, &v2->baseclass_0, 0x1Du, 0);
  v167 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GameTipOn", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v168 = v167->m_pObject->m_uiHeight;
  v169 = v167->m_pObject->m_uiWidth;
  v170 = Font::Get(0);
  v171 = PgWinText::CreateWin(uiLeft, (int)pkFrameWork, v169, v168, v170, &v2->baseclass_0, 0, 0);
  v171->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v171,
    4u);
  v172 = v171->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v173 = TextData2::Get(0xECEED61Bu);
  v172[118].__vecDelDtor((NiRefObject *)v171, (unsigned int)v173);
  v171->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v171,
    0);
  v174 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GameTipOnChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v174, &spNode.m_pObject->baseclass_0, "GameTipOnChClick");
  v2->m_pkBasicInfoTipCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v174, &v2->baseclass_0, 0x1Eu, 0);
  v175 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PlayGuideOn", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v176 = v175->m_pObject->m_uiHeight;
  v177 = v175->m_pObject->m_uiWidth;
  v178 = Font::Get(0);
  v179 = PgWinText::CreateWin(uiLeft, (int)pkFrameWork, v177, v176, v178, &v2->baseclass_0, 0, 0);
  v179->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v179,
    4u);
  v180 = v179->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v181 = TextData2::Get(0xE0EC2B54u);
  v180[118].__vecDelDtor((NiRefObject *)v179, (unsigned int)v181);
  v179->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v179,
    0);
  v182 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PlayGuideOnChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v182, &spNode.m_pObject->baseclass_0, "PlayGuideOnChClick");
  v2->m_pkPlayGuideCheck = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v182, &v2->baseclass_0, 0x1Fu, 0);
  v183 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvAutoStack", &uiLeft, (int *)&pkFrameWork, v10)->m_akHitTester.m_pBase;
  v184 = v183->m_pObject->m_uiHeight;
  v185 = v183->m_pObject->m_uiWidth;
  v186 = Font::Get(0);
  v187 = PgWinText::CreateWin(uiLeft, (int)pkFrameWork, v185, v184, v186, &v2->baseclass_0, 0, 0);
  v187->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v187,
    4u);
  v188 = v187->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v189 = TextData3::Get(0x2A597F77u);
  v188[118].__vecDelDtor((NiRefObject *)v187, (unsigned int)v189);
  v187->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v187,
    0);
  v190 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvAutoStackChNor", &uiLeft, (int *)&pkFrameWork, v10);
  PgSprData::Add(v190, &spNode.m_pObject->baseclass_0, "InvAutoStackChClick");
  v2->m_pkAutoStack = ColumnBut::CreateWin(uiLeft, (int)pkFrameWork, v190, &v2->baseclass_0, 0x20u, 0);
  LOBYTE(v195) = 0;
  if ( !InterlockedDecrement((volatile LONG *)&spTexProp->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    spTexProp->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spTexProp, 1u);
  v191 = spNode.m_pObject;
  v195 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v191 )
    v191->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v191, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005B9D30) --------------------------------------------------------
void __thiscall OptionSystemWin::OnCommand(OptionSystemWin *this, unsigned int wParam, int lParam)
{
  bool v3; // dl@1

  v3 = this->m_bChangeOption;
  this->m_bChangeOption = 1;
  switch ( wParam )
  {
    case 0xBu:
      OptionSystemWin::OnMyNameCheck(this);
      break;
    case 0xCu:
      OptionSystemWin::OnOtherCharNameCheck(this);
      break;
    case 0xDu:
      OptionSystemWin::OnNpcNameCheck(this);
      break;
    case 0xEu:
      OptionSystemWin::OnMonsterNameCheck(this);
      break;
    case 0xFu:
      OptionSystemWin::OnItemNameCheck(this);
      break;
    case 0x10u:
      OptionSystemWin::OnHPCheck(this);
      break;
    case 0x11u:
      OptionSystemWin::OnSPCheck(this);
      break;
    case 0x12u:
      OptionSystemWin::OnInterfaceCheck(this);
      break;
    case 0x13u:
      OptionSystemWin::OnSpeechCheck(this);
      break;
    case 0x14u:
      OptionSystemWin::OnInterfacePosCheck(this);
      break;
    case 0x16u:
      OptionSystemWin::OnWisCheck(this);
      break;
    case 0x17u:
      OptionSystemWin::OnTrdCheck(this);
      break;
    case 0x18u:
      OptionSystemWin::OnParCheck(this);
      break;
    case 0x19u:
      OptionSystemWin::OnAgCheck(this);
      break;
    case 0x1Au:
      OptionSystemWin::OnSystemMsgCheck(this);
      break;
    case 0x1Bu:
      OptionSystemWin::OnOKMsgBoxCheck(this);
      break;
    case 0x15u:
      OptionSystemWin::OnChattingHideCheck(this);
      break;
    case 0x1Cu:
      OptionSystemWin::OnChatInputCheck(this);
      break;
    case 0x1Du:
      OptionSystemWin::OnNamePanelCheck(this);
      break;
    case 0x1Eu:
      OptionSystemWin::OnBasicInfoTipCheck(this);
      break;
    case 0x1Fu:
      OptionSystemWin::OnPlayGuideCheck(this);
      break;
    case 0x20u:
      OptionSystemWin::OnAutoStack(this);
      break;
    default:
      this->m_bChangeOption = v3;
      break;
  }
}

//----- (005B9E80) --------------------------------------------------------
void __thiscall OptionSystemWin::OnWinClose(OptionSystemWin *this)
{
  OptionSystemWin *v1; // ebx@1

  v1 = this;
  if ( this->m_bChangeOption )
  {
    memcpy(&MachineOpt::ms_kGameOption, &this->m_kOpenGameOption, 0x37u);
    byte_B5BB1E = *(_DWORD *)&byte_B5BB1C >> 16;
    OptionSystemWin::SetInfo(this, &this->m_kOpenGameOption);
    ScreenBDMgr::InitCharBD(&g_kScrnBDMgr, byte_B5BB4B);
  }
  v1->m_bChangeOption = 0;
}
// B5BB1C: using guessed type char byte_B5BB1C;
// B5BB1E: using guessed type char byte_B5BB1E;
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (005B9EE0) --------------------------------------------------------
void __thiscall OptionSystemWin::OpenWin(OptionSystemWin *this)
{
  OptionSystemWin *v1; // ebx@1

  v1 = this;
  if ( this->m_pkOptionBaseWin )
  {
    memcpy(&this->m_kOpenGameOption, &MachineOpt::ms_kGameOption, sizeof(this->m_kOpenGameOption));
    OptionSystemWin::SetInfo(this, &this->m_kOpenGameOption);
    OptionBaseWin::SetMode(v1->m_pkOptionBaseWin, 0);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v1,
      1);
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1,
      1u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkOptionBaseWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (005B9F50) --------------------------------------------------------
OptionSystemWin *__cdecl OptionSystemWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  OptionSystemWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1B8u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWin::PgWin((PgWin *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &OptionSystemWin::_vftable_;
    *((_DWORD *)v2 + 58) = &OptionSystemWin::_vftable_;
    MachineOpt::GameOption::GameOption((MachineOpt::GameOption *)((char *)v2 + 289));
    *((_DWORD *)v2 + 86) = 0;
    *((_BYTE *)v2 + 288) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 452))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (OptionSystemWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B3FE0: using guessed type int (__stdcall *OptionSystemWin___vftable_)(int uiFlags);
// 9B3FFC: using guessed type int (__thiscall *OptionSystemWin___vftable_)(void *p, char);

//----- (005BA0B0) --------------------------------------------------------
void *__thiscall OptionSystemWin::_vector_deleting_destructor_(OptionSystemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&OptionSystemWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&OptionSystemWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B3FE0: using guessed type int (__stdcall *OptionSystemWin___vftable_)(int uiFlags);
// 9B3FFC: using guessed type int (__thiscall *OptionSystemWin___vftable_)(void *p, char);

//----- (005BA0F0) --------------------------------------------------------
void __thiscall AbstateIcon::SetIconFile(AbstateIcon *this, char *FileName, int IconIndex)
{
  AbstateIcon *v3; // esi@1
  NiRefObjectVtbl *v4; // edi@2
  NiSourceTexture *v5; // eax@2

  v3 = this;
  if ( FileName )
  {
    v4 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = IconMgr::GetTexture(FileName);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v4[146].__vecDelDtor)(v3, v5, IconIndex, 16, 16);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  }
}

//----- (005BA130) --------------------------------------------------------
unsigned __int16 __thiscall AbstateIcon::GetAbstate(AbstateIcon *this)
{
  return this->m_kAbstateID;
}

//----- (005BA140) --------------------------------------------------------
void __thiscall AbstateIcon::SetDuplicate(AbstateIcon *this, unsigned int uiDuplicate)
{
  AbstateIcon *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  NiSourceTexture *v4; // eax@1
  NiRefObjectVtbl *v5; // edi@1
  char *v6; // eax@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = IconMgr::GetTexture("AbState01");
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v3[146].__vecDelDtor)(v2, v4, 49, 16, 16);
  v5 = v2->m_pkDuplicateText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = fs("x%d");
  v5[118].__vecDelDtor((NiRefObject *)v2->m_pkDuplicateText, (unsigned int)v6);
  ((void (__stdcall *)(_DWORD))v2->m_pkDuplicateText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2,
    1u);
}

//----- (005BA1C0) --------------------------------------------------------
void __thiscall AbstateIcon::ClearDuplicateText(AbstateIcon *this)
{
  AbstateIcon *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkDuplicateText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B41CE);
  ((void (__stdcall *)(_DWORD))v1->m_pkDuplicateText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (005BA1F0) --------------------------------------------------------
void __thiscall AbstateIcon::SetAbstate(AbstateIcon *this, unsigned __int16 kAbstateID)
{
  int v2; // edi@1
  AbstateIcon *v3; // esi@1
  int v4; // ecx@3
  int v5; // eax@4
  NiRefObjectVtbl *v6; // edi@6
  int v7; // ST04_4@6
  NiSourceTexture *v8; // eax@6
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@6

  v2 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
  v3 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                          kAbstateID)
    && kAbstateID <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * kAbstateID))
    && (v5 = *(_DWORD *)(v4 + 4 * kAbstateID)) != 0
    && *(_BYTE *)(v5 + 38) != 45 )
  {
    v6 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = *(_DWORD *)(v5 + 34);
    v8 = IconMgr::GetTexture((char *)(v5 + 38));
    ((void (__thiscall *)(AbstateIcon *, NiSourceTexture *, int, signed int, signed int))v6[146].__vecDelDtor)(
      v3,
      v8,
      v7,
      16,
      16);
    v9 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v3->m_kAbstateID = kAbstateID;
    v9(
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u);
  }
  else
  {
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v3,
      0);
  }
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (005BA290) --------------------------------------------------------
void __thiscall AbstateIcon::Show(AbstateIcon *this, bool b)
{
  AbstateIcon *v2; // esi@1
  NiScreenElements *v3; // eax@2
  NiScreenElements *v4; // esi@5

  v2 = this;
  IconWin::Show(&this->baseclass_0, b);
  if ( v2->m_bShowSubIcon )
  {
    v3 = v2->m_spSubImagePlane.m_pObject;
    if ( b )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v4 = v2->m_spBackPlane.m_pObject;
  if ( v4 )
  {
    if ( b )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (005BA2F0) --------------------------------------------------------
void __thiscall AbstateIcon::AbstateIcon(AbstateIcon *this)
{
  AbstateIcon *v1; // esi@1
  PopupMenuWin *v2; // edi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AbstateIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AbstateIcon::_vftable_;
  v1->m_spPopupMenu.m_pObject = 0;
  v1->m_spBackPlane.m_pObject = 0;
  v1->m_spSubImagePlane.m_pObject = 0;
  v1->m_spSubImageTexProp.m_pObject = 0;
  v1->m_bEraseEnable = 0;
  v2 = v1->m_spPopupMenu.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spPopupMenu.m_pObject = 0;
  }
  v1->IsRButtonClicked = 0;
  v1->m_uiSubIconIndex = -1;
  v1->m_bShowSubIcon = 0;
  v1->m_pkDuplicateText = 0;
  v1->m_bCharged = 0;
  v1->m_pkChargedBuffInfo = 0;
}
// 9B41D8: using guessed type int (__stdcall *AbstateIcon___vftable_)(int uiFlags);
// 9B41F4: using guessed type int (__thiscall *AbstateIcon___vftable_)(void *p, char);

//----- (005BA3C0) --------------------------------------------------------
void __thiscall AbstateIcon::_AbstateIcon(AbstateIcon *this)
{
  AbstateIcon *v1; // esi@1
  NiTexturingProperty *v2; // edi@1
  NiScreenElements *v3; // edi@5
  NiScreenElements *v4; // edi@9
  PopupMenuWin *v5; // edi@13

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AbstateIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AbstateIcon::_vftable_;
  v2 = this->m_spSubImageTexProp.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spSubImagePlane.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_spBackPlane.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->m_spPopupMenu.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  IconWin::_IconWin(&v1->baseclass_0);
}
// 9B41D8: using guessed type int (__stdcall *AbstateIcon___vftable_)(int uiFlags);
// 9B41F4: using guessed type int (__thiscall *AbstateIcon___vftable_)(void *p, char);

//----- (005BA4C0) --------------------------------------------------------
bool __thiscall AbstateIcon::Create(AbstateIcon *this, int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent, bool EraseEnable)
{
  AbstateIcon *v7; // esi@1
  bool result; // al@1
  PgFont *v9; // eax@2
  PgWinText *v10; // eax@2
  NiSourceTexture *v11; // eax@2
  PopupMenuWin *v12; // eax@2
  PopupMenuWin *v13; // edi@2
  PopupMenuWin *v14; // ebx@2
  char *v15; // eax@9
  PopupMenuText *v16; // eax@9

  v7 = this;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, iWidth, iHeight, pkParent, 0, 0);
  if ( result )
  {
    v9 = Font::Get(0);
    v10 = PgWinText::CreateWin(
            1,
            2,
            0xEu,
            0xCu,
            v9,
            &v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v7->m_pkDuplicateText = v10;
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v10,
      5u);
    SpScreenText::SetShadowOffset(&v7->m_pkDuplicateText->m_spTextGeom.m_pObject->baseclass_0, 1u);
    ((void (__stdcall *)(_DWORD))v7->m_pkDuplicateText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v7->m_pkDuplicateText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    PgWin::AttachChildWin(
      &v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &v7->m_pkDuplicateText->baseclass_0);
    v7->m_bEraseEnable = EraseEnable;
    v11 = MenuTexMgr::GetTexture(1u);
    v12 = PopupMenuWin::CreateWin(v11, 4u, 4u, 0);
    v13 = v7->m_spPopupMenu.m_pObject;
    v14 = v12;
    if ( v13 != v12 )
    {
      if ( v13
        && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v13 )
        v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v13,
          1u);
      v7->m_spPopupMenu.m_pObject = v14;
      if ( v14 )
        InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__thiscall *)(_DWORD))v7->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v7->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v7->m_spPopupMenu.m_pObject);
    v15 = TextData2::Get(0xDA03DB33u);
    v16 = PopupMenuText::CreateWin(v15, 0, 0, 0, 0, 0, 0);
    v16->baseclass_0.m_ePopupMenuID = 1014;
    PopupMenuWin::AddMenu(v7->m_spPopupMenu.m_pObject, &v16->baseclass_0);
    PopupMenuWin::FinishMenu(v7->m_spPopupMenu.m_pObject, 0);
    ((void (__cdecl *)(_DWORD))v7->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    result = 1;
  }
  return result;
}
// 5BA4C0: could not find valid save-restore pair for ebx
// 5BA4C0: could not find valid save-restore pair for edi

//----- (005BA660) --------------------------------------------------------
void __thiscall AbstateIcon::SetBackPlaneColor(AbstateIcon *this, float rad, float green, float blue, float alpha)
{
  AbstateIcon *v5; // esi@1
  NiScreenElements *v6; // eax@1
  NiColorA kCommonValue; // [sp+Ch] [bp-10h]@2

  v5 = this;
  v6 = this->m_spBackPlane.m_pObject;
  if ( v6 )
  {
    kCommonValue.r = rad / 255.0;
    kCommonValue.g = green / 255.0;
    kCommonValue.b = blue / 255.0;
    kCommonValue.a = alpha / 255.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    NiAVObject::UpdateProperties(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  }
}

//----- (005BA700) --------------------------------------------------------
void __thiscall AbstateIcon::CreateSubIconImg(AbstateIcon *this, char *pcFn, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight)
{
  AbstateIcon *v5; // esi@1
  NiTexture *v6; // eax@6
  NiTexture *v7; // edi@6
  unsigned int v8; // eax@10
  unsigned int v9; // ST14_4@10
  unsigned int v10; // ST10_4@10
  unsigned int v11; // ST0C_4@10
  unsigned int v12; // eax@10
  NiScreenElements *pcFna; // [sp+1Ch] [bp+8h]@10

  v5 = this;
  if ( pcFn && *pcFn != 45 )
  {
    if ( uiIndex == -1 )
    {
      this->m_bShowSubIcon = 0;
      this->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      v6 = (NiTexture *)IconMgr::GetTexture(pcFn);
      v7 = v6;
      if ( v6 )
      {
        NiTexturingProperty::SetBaseTexture(v5->m_spSubImageTexProp.m_pObject, v6);
        v5->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
        v5->m_bShowSubIcon = 1;
        if ( uiIndex != v5->m_uiSubIconIndex )
        {
          if ( v5->m_spSubImageTexProp.m_pObject )
          {
            v8 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v7);
            pcFna = v5->m_spSubImagePlane.m_pObject;
            v9 = uiIconHeight * uiIndex / (v8 / uiIconWidth);
            v10 = uiIconWidth * uiIndex % (v8 / uiIconWidth);
            v11 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v7);
            v12 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v7);
            PgUtil::SetTextureCoord(pcFna, 0, v12, v11, v10, v9, uiIconWidth, uiIconHeight);
            NiAVObject::Update(
              &v5->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              0.0,
              1);
            v5->m_uiSubIconIndex = uiIndex;
          }
        }
      }
      else
      {
        v5->m_bShowSubIcon = 0;
        v5->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      }
    }
  }
  else
  {
    this->m_bShowSubIcon = 0;
    this->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (005BA820) --------------------------------------------------------
void __thiscall AbstateIcon::OnHide(AbstateIcon *this)
{
  AbstateIcon *v1; // ebx@1
  PROTO_CHARGEDBUFF_INFO *v2; // edi@2
  char *v3; // esi@2
  int v4; // esi@6
  int v5; // edi@6
  int v6; // edi@7
  int v7; // ecx@10
  GameFrameWork *v8; // esi@13
  int v9; // ebx@13
  int v10; // esi@14
  int v11; // edx@17
  PgFrameWork *v12; // ebx@22
  int v13; // eax@22
  char *v14; // eax@25

  v1 = this;
  if ( this->m_bCharged )
  {
    v2 = this->m_pkChargedBuffInfo;
    v3 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, PROTO_CHARGEDBUFF_INFO *, IDirectMessenger *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        82,
        v2,
        &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, PROTO_CHARGEDBUFF_INFO *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          82,
          v2,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    (*(void (__thiscall **)(IDirectMessenger *, signed int, PROTO_CHARGEDBUFF_INFO *, IDirectMessenger *))(*(_DWORD *)v3 + 20))(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      82,
      v2,
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  else
  {
    v4 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
    v5 = this->m_kAbstateID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                            this->m_kAbstateID) )
    {
      if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
      {
        v7 = *(_DWORD *)(v4 + 196);
        if ( *(_DWORD *)(v7 + 4 * v5) )
          v6 = *(_DWORD *)(v7 + 4 * v5);
        else
          v6 = 0;
      }
      else
      {
        v6 = 0;
      }
    }
    else
    {
      v6 = 0;
    }
    v8 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
    v9 = v1->m_kAbstateID;
    if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, int))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                            ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                            v9) )
    {
      if ( (unsigned __int16)v9 <= LOWORD(v8->m_ResList[2].m_eAspect) )
      {
        v11 = *(_DWORD *)&v8->m_ResList[2].m_bCheckAdd;
        if ( *(_DWORD *)(v11 + 4 * v9) )
          v10 = *(_DWORD *)(v11 + 4 * v9);
        else
          v10 = 0;
      }
      else
      {
        v10 = 0;
      }
    }
    else
    {
      v10 = 0;
    }
    if ( v6 && v10 )
    {
      v12 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v13 = *(_DWORD *)(v6 + 522);
      if ( v13 && v13 != 4 )
      {
        GameFrameWork::NcBatAbastateEraseReq((GameFrameWork *)v12, *(_WORD *)(v10 + 34));
      }
      else
      {
        v14 = TextData2::Get(0x9FEDBEC2u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v12, v14);
      }
    }
  }
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (005BA950) --------------------------------------------------------
void __thiscall AbstateIcon::DirectMessage(AbstateIcon *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  AbstateIcon *v4; // esi@1

  v4 = this;
  if ( BYTE2(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z) )
  {
    switch ( iMsgTag )
    {
      case 5:
        if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)this - 58) + 348))(
                                (char *)this - 232,
                                PgWin::ms_iMsX.x,
                                PgWin::ms_iMsY)
          && (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*((_DWORD *)v4 - 58) + 260))((char *)v4 - 232) )
          BYTE3(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z) = 1;
        break;
      case 6:
        if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)this - 58) + 348))(
                                (char *)this - 232,
                                PgWin::ms_iMsX.x,
                                PgWin::ms_iMsY)
          && (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*((_DWORD *)v4 - 58) + 260))((char *)v4 - 232) )
        {
          if ( BYTE3(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z) )
          {
            (*(void (__stdcall **)(_DWORD, _DWORD))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale)
                                                  + 308))(
              PgWin::ms_iMsX.x,
              PgWin::ms_iMsY);
            PgWinMgr::OpenPopupWin(
              &Pgg_kWinMgr,
              0,
              LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale));
          }
          BYTE3(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z) = 0;
        }
        break;
      case 15:
        if ( *(_DWORD *)pvBody == 1014 )
          AbstateIcon::OnHide((AbstateIcon *)((char *)this - 232));
        break;
    }
  }
}

//----- (005BAA80) --------------------------------------------------------
void __thiscall AbstateIcon::CreateSubImagePlane(AbstateIcon *this, unsigned int uiWidth, unsigned int uiHeight)
{
  NiAVObject *v3; // esi@1
  float v4; // ebx@1
  NiScreenElementsData *v5; // edi@1
  void *v6; // eax@1
  float v7; // eax@2
  float v8; // edi@3
  void *v9; // eax@10
  float v10; // eax@11
  float v11; // ebx@11
  float v12; // edi@13
  float v13; // ebx@20
  unsigned int v14; // edi@20
  void *v15; // eax@21
  unsigned int v16; // eax@22
  int v17; // ebx@25
  unsigned int v18; // edi@30
  float v19; // ebx@30
  void *v20; // eax@35
  unsigned int v21; // edi@35
  float uiWidtha; // [sp+14h] [bp+8h]@38

  v3 = (NiAVObject *)this;
  LODWORD(v4) = 0;
  v5 = PgUtil::CreateScreenGeometryData(uiWidth, uiHeight, 0, 0, uiWidth, uiHeight);
  v6 = operator new(0xC4u);
  uiHeight = (unsigned int)v6;
  if ( v6 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v6, v5);
    v4 = v7;
  }
  v8 = v3[2].m_kWorldBound.m_fRadius;
  if ( LODWORD(v8) != LODWORD(v4) )
  {
    if ( LODWORD(v8) && !InterlockedDecrement((volatile LONG *)(LODWORD(v8) + 4)) && LODWORD(v8) )
      (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v8))(LODWORD(v8), 1);
    v3[2].m_kWorldBound.m_fRadius = v4;
    if ( LODWORD(v4) )
      InterlockedIncrement((volatile LONG *)(LODWORD(v4) + 4));
  }
  v9 = operator new(0x44u);
  uiHeight = (unsigned int)v9;
  if ( v9 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v9);
    v11 = v10;
  }
  else
  {
    LODWORD(v11) = 0;
  }
  v12 = v3[2].m_kLocal.m_Rotate.m_pEntry[0][0];
  if ( LODWORD(v12) != LODWORD(v11) )
  {
    if ( LODWORD(v12) && !InterlockedDecrement((volatile LONG *)(LODWORD(v12) + 4)) && LODWORD(v12) )
      (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v12))(LODWORD(v12), 1);
    v3[2].m_kLocal.m_Rotate.m_pEntry[0][0] = v11;
    if ( LODWORD(v11) )
      InterlockedIncrement((volatile LONG *)(LODWORD(v11) + 4));
  }
  v13 = v3[2].m_kLocal.m_Rotate.m_pEntry[0][0];
  v14 = **(_DWORD **)(LODWORD(v13) + 40);
  if ( !v14 )
  {
    v15 = operator new(0x18u);
    uiHeight = (unsigned int)v15;
    if ( v15 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v15);
    else
      v16 = 0;
    v14 = v16;
    uiHeight = v16;
    NiTArray<NiCollisionGroup::Record__>::SetAt(
      (NiTArray<NiVBChip *> *)(LODWORD(v13) + 36),
      0,
      (NiVBChip *const *)&uiHeight);
  }
  v17 = *(_DWORD *)(v14 + 4);
  if ( v17 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v17)(v17, 1);
    *(_DWORD *)(v14 + 4) = 0;
  }
  NiTexturingProperty::SetBaseFilterMode(LODWORD(v3[2].m_kLocal.m_Rotate.m_pEntry[0][0]), 0);
  *(_DWORD *)(LODWORD(v3[2].m_kLocal.m_Rotate.m_pEntry[0][0]) + 28) = 2;
  NiTexturingProperty::SetBaseClampMode(LODWORD(v3[2].m_kLocal.m_Rotate.m_pEntry[0][0]), 0);
  v18 = LODWORD(v3[2].m_kLocal.m_Rotate.m_pEntry[0][0]);
  v19 = v3[2].m_kWorldBound.m_fRadius;
  uiHeight = v18;
  if ( v18 )
    InterlockedIncrement((volatile LONG *)(v18 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(v19) + 156),
    (NiPointer<NiRoom> *)&uiHeight);
  if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  v20 = operator new(0x20u);
  v21 = (unsigned int)v20;
  uiHeight = (unsigned int)v20;
  if ( v20 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v20);
    *(_DWORD *)v21 = &NiAlphaProperty::_vftable_;
    *(_WORD *)(v21 + 28) = 236;
    *(_BYTE *)(v21 + 30) = 0;
  }
  else
  {
    v21 = 0;
  }
  *(_WORD *)(v21 + 28) |= 1u;
  uiWidtha = v3[2].m_kWorldBound.m_fRadius;
  uiHeight = v21;
  InterlockedIncrement((volatile LONG *)(v21 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(uiWidtha) + 156),
    (NiPointer<NiRoom> *)&uiHeight);
  if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
  ((void (__thiscall *)(NiAVObject *, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v3,
    LODWORD(v3[2].m_kWorldBound.m_fRadius),
    0);
  NiAVObject::UpdateProperties(v3);
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (005BAD40) --------------------------------------------------------
AbstateIcon *__cdecl AbstateIcon::CreateWin(int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent, bool EraseEnable)
{
  void *v6; // eax@1
  int v7; // eax@2
  int v8; // esi@2
  PgWin *v9; // edi@8
  AbstateIcon *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x1A4u);
  result.m_pObject = (PgWin *)v6;
  v12 = 0;
  if ( v6 )
  {
    AbstateIcon::AbstateIcon((AbstateIcon *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, int, int, PgWin *, _DWORD))(*(_DWORD *)v8 + 608))(
                          v8,
                          iXPos,
                          iYPos,
                          iWidth,
                          iHeight,
                          pkParent,
                          EraseEnable) )
  {
    (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v8 + 596))(v8, iWidth, iHeight);
    (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = (AbstateIcon *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}

//----- (005BAE90) --------------------------------------------------------
void __cdecl PgUtil::SetTextureCoord(NiScreenElements *pkScreenGeom, int nPoly, unsigned int uiTextureWidht, unsigned int uiTextureHeight, unsigned int uiXPos, unsigned int uiYPos, unsigned int uiWidth, unsigned int uiHeight)
{
  double v8; // st7@1
  float v9; // ST14_4@1
  float v10; // ST10_4@1
  float v11; // ST0C_4@1
  float uiTextureWidhta; // [sp+24h] [bp+10h]@1
  float uiTextureHeighta; // [sp+28h] [bp+14h]@1
  float uiTextureHeightb; // [sp+28h] [bp+14h]@1
  float uiTextureHeightc; // [sp+28h] [bp+14h]@1
  float uiTextureHeightd; // [sp+28h] [bp+14h]@1
  float uiTextureHeighte; // [sp+28h] [bp+14h]@1

  uiTextureHeighta = (double)uiTextureHeight;
  uiTextureWidhta = (double)uiTextureWidht;
  v8 = uiTextureHeighta;
  uiTextureHeightb = (double)(uiYPos + uiHeight) / uiTextureHeighta;
  v9 = uiTextureHeightb;
  uiTextureHeightc = (double)(uiXPos + uiWidth) / uiTextureWidhta;
  v10 = uiTextureHeightc;
  uiTextureHeightd = (double)uiYPos / v8;
  v11 = uiTextureHeightd;
  uiTextureHeighte = (double)uiXPos / uiTextureWidhta;
  NiScreenElementsData::SetTextures(
    (NiScreenElementsData *)pkScreenGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    nPoly,
    0,
    uiTextureHeighte,
    v11,
    v10,
    v9);
  pkScreenGeom->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject->m_usDirtyFlags |= 8u;
}

//----- (005BAF70) --------------------------------------------------------
void *__thiscall AbstateIcon::_vector_deleting_destructor_(AbstateIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AbstateIcon::_AbstateIcon(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005BAFA0) --------------------------------------------------------
void __thiscall ActionIcon::ActionIcon(ActionIcon *this)
{
  ActionIcon *v1; // esi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionIcon::_vftable_;
  IconWin::CreateGeometry(&v1->baseclass_0, 0x20u, 0x20u);
}
// 9B445C: using guessed type int (__stdcall *ActionIcon___vftable_)(int uiFlags);
// 9B447C: using guessed type int (__thiscall *ActionIcon___vftable_)(void *p, char);

//----- (005BB010) --------------------------------------------------------
void __thiscall ActionIcon::_ActionIcon(ActionIcon *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionIcon::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
}
// 9B445C: using guessed type int (__stdcall *ActionIcon___vftable_)(int uiFlags);
// 9B447C: using guessed type int (__thiscall *ActionIcon___vftable_)(void *p, char);

//----- (005BB030) --------------------------------------------------------
bool __thiscall ActionIcon::Create(ActionIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0) != 0;
}

//----- (005BB060) --------------------------------------------------------
void __thiscall ActionIcon::SetAction(ActionIcon *this, unsigned int uiTableIndex)
{
  int v2; // edi@1
  ActionIcon *v3; // esi@1
  int v4; // ecx@3
  int v5; // eax@4
  NiRefObjectVtbl *v6; // edi@5
  int v7; // ST04_4@5
  NiSourceTexture *v8; // eax@5
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // eax@5
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // eax@6

  v2 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
  v3 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                 + 16))(
                          ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                          uiTableIndex)
    && (unsigned __int16)uiTableIndex <= *(_WORD *)(v2 + 200)
    && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * (unsigned __int16)uiTableIndex))
    && (v5 = *(_DWORD *)(v4 + 4 * (unsigned __int16)uiTableIndex)) != 0 )
  {
    v6 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = *(_WORD *)(v5 + 99);
    v8 = IconMgr::GetTexture((char *)(v5 + 67));
    ((void (__thiscall *)(ActionIcon *, NiSourceTexture *, int, signed int, signed int))v6[146].__vecDelDtor)(
      v3,
      v8,
      v7,
      32,
      32);
    v9 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v9(
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u);
  }
  else
  {
    ((void (__thiscall *)(ActionIcon *, _DWORD, signed int, signed int, signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v3,
      0,
      -1,
      32,
      32);
    v10 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v10(
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
  }
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (005BB110) --------------------------------------------------------
ActionIcon *__cdecl ActionIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  ActionIcon *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x180u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    IconWin::IconWin((IconWin *)v3);
    LOBYTE(v8) = 1;
    *(_DWORD *)v4 = &ActionIcon::_vftable_;
    *((_DWORD *)v4 + 58) = &ActionIcon::_vftable_;
    IconWin::CreateGeometry((IconWin *)v4, 0x20u, 0x20u);
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 608))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (ActionIcon *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9B445C: using guessed type int (__stdcall *ActionIcon___vftable_)(int uiFlags);
// 9B447C: using guessed type int (__thiscall *ActionIcon___vftable_)(void *p, char);

//----- (005BB270) --------------------------------------------------------
void *__thiscall ActionIcon::_vector_deleting_destructor_(ActionIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ActionIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ActionIcon::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B445C: using guessed type int (__stdcall *ActionIcon___vftable_)(int uiFlags);
// 9B447C: using guessed type int (__thiscall *ActionIcon___vftable_)(void *p, char);

//----- (005BB2B0) --------------------------------------------------------
void __thiscall AniIconWin::AniIconWin(AniIconWin *this)
{
  AniIconWin *v1; // esi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AniIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AniIconWin::_vftable_;
}
// 9B46E4: using guessed type int (__stdcall *AniIconWin___vftable_)(int uiFlags);
// 9B4704: using guessed type int (__thiscall *AniIconWin___vftable_)(void *p, char);

//----- (005BB2D0) --------------------------------------------------------
void __thiscall AniIconWin::_AniIconWin(AniIconWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AniIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AniIconWin::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
}
// 9B46E4: using guessed type int (__stdcall *AniIconWin___vftable_)(int uiFlags);
// 9B4704: using guessed type int (__thiscall *AniIconWin___vftable_)(void *p, char);

//----- (005BB2F0) --------------------------------------------------------
bool __thiscall AniIconWin::Create(AniIconWin *this, int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent)
{
  AniIconWin *v6; // esi@1
  bool result; // al@1

  v6 = this;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, iWidth, iHeight, pkParent, 0, 0);
  if ( result )
  {
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[149].__vecDelDtor)(
      v6,
      iWidth,
      iHeight);
    result = 1;
  }
  return result;
}

//----- (005BB350) --------------------------------------------------------
bool __thiscall AniIconWin::CreateItemIconTexture(AniIconWin *this, unsigned __int16 itemID)
{
  return 0;
}

//----- (005BB360) --------------------------------------------------------
NiScreenElements *__thiscall AniIconWin::GetGeometry(AniIconWin *this)
{
  return this->baseclass_0.m_spGeom.m_pObject;
}

//----- (005BB370) --------------------------------------------------------
bool __thiscall AniIconWin::CreateAniTexture(AniIconWin *this, const char *pkName)
{
  AniIconWin *v2; // esi@1
  NiProperty *v3; // eax@2
  NiProperty *v5; // eax@4
  const char *v6; // esi@7

  v2 = this;
  if ( pkName )
  {
    IconMgr::GetAniTextureProperty((NiPointer<NiTexturingProperty> *)&pkName, pkName);
    v5 = NiAVObject::GetProperty(
           &v2->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           8);
    if ( v5 )
      NiAVObject::DetachProperty(
        &v2->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v5);
    NiAVObject::AttachProperty(
      &v2->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      (NiProperty *)pkName);
    NiAVObject::UpdateEffects(&v2->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::UpdateProperties(&v2->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( pkName )
    {
      v6 = pkName;
      if ( !InterlockedDecrement((volatile LONG *)pkName + 1) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
  }
  else
  {
    v3 = NiAVObject::GetProperty(
           &this->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           8);
    if ( v3 )
    {
      NiAVObject::DetachProperty(
        &v2->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v3);
      return 1;
    }
  }
  return 1;
}

//----- (005BB470) --------------------------------------------------------
AniIconWin *__cdecl AniIconWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  AniIconWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x17Cu);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    IconWin::IconWin((IconWin *)v3);
    *(_DWORD *)v4 = &AniIconWin::_vftable_;
    *((_DWORD *)v4 + 58) = &AniIconWin::_vftable_;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, signed int, signed int, PgWin *))(*(_DWORD *)v4 + 608))(
                          v4,
                          iXPos,
                          iYPos,
                          32,
                          32,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (AniIconWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9B46E4: using guessed type int (__stdcall *AniIconWin___vftable_)(int uiFlags);
// 9B4704: using guessed type int (__thiscall *AniIconWin___vftable_)(void *p, char);

//----- (005BB5C0) --------------------------------------------------------
AniIconWin *__cdecl AniIconWin::CreateWin(int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  AniIconWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x17Cu);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    IconWin::IconWin((IconWin *)v5);
    *(_DWORD *)v6 = &AniIconWin::_vftable_;
    *((_DWORD *)v6 + 58) = &AniIconWin::_vftable_;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, int, int, PgWin *))(*(_DWORD *)v6 + 608))(
                          v6,
                          iXPos,
                          iYPos,
                          iWidth,
                          iHeight,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (AniIconWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 9B46E4: using guessed type int (__stdcall *AniIconWin___vftable_)(int uiFlags);
// 9B4704: using guessed type int (__thiscall *AniIconWin___vftable_)(void *p, char);

//----- (005BB710) --------------------------------------------------------
NiPointer<AniIconWin> *__cdecl AniIconWin::CreateWin(NiPointer<AniIconWin> *result, const char *pkName, int iWidth, int iHeight)
{
  void *v4; // eax@1
  void *v5; // esi@1

  v4 = operator new(0x17Cu);
  v5 = v4;
  if ( v4 )
  {
    IconWin::IconWin((IconWin *)v4);
    *(_DWORD *)v5 = &AniIconWin::_vftable_;
    *((_DWORD *)v5 + 58) = &AniIconWin::_vftable_;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  result->m_pObject = (AniIconWin *)v5;
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  ((void (__stdcall *)(_DWORD, _DWORD))result->m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[149].__vecDelDtor)(
    iWidth,
    iHeight);
  AniIconWin::CreateAniTexture(result->m_pObject, pkName);
  if ( v5 && !InterlockedDecrement((volatile LONG *)v5 + 1) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
  return result;
}
// 9B46E4: using guessed type int (__stdcall *AniIconWin___vftable_)(int uiFlags);
// 9B4704: using guessed type int (__thiscall *AniIconWin___vftable_)(void *p, char);

//----- (005BB810) --------------------------------------------------------
void *__thiscall AniIconWin::_scalar_deleting_destructor_(AniIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AniIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AniIconWin::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B46E4: using guessed type int (__stdcall *AniIconWin___vftable_)(int uiFlags);
// 9B4704: using guessed type int (__thiscall *AniIconWin___vftable_)(void *p, char);

//----- (005BB860) --------------------------------------------------------
Item *__thiscall IconSlotWin::GetItem(IconSlotWin *this)
{
  IconWin *v1; // ecx@2
  Item *result; // eax@3

  if ( this->m_eType || (v1 = this->m_spIcon.m_pObject) == 0 )
    result = 0;
  else
    result = ItemIcon::GetItem((ItemIcon *)v1);
  return result;
}

//----- (005BB880) --------------------------------------------------------
void __thiscall IconSlotWin::OnFirstHitWin(IconSlotWin *this)
{
  PgWin *v1; // esi@1
  PgWin *v2; // edi@2
  IconWin *v3; // ecx@3
  Item *v4; // eax@4

  v1 = (PgWin *)this;
  if ( !this->m_eType )
  {
    v2 = this->baseclass_0.m_pkToolTipWin;
    if ( !v2 )
      return;
    v3 = this->m_spIcon.m_pObject;
    if ( v3 )
    {
      v4 = ItemIcon::GetItem((ItemIcon *)v3);
      ItemInfoWin::SetItemInfo((ItemInfoWin *)v2, v4);
      PgWin::OnFirstHitWin(v1);
      return;
    }
    ItemInfoWin::SetItemInfo((ItemInfoWin *)v2, 0);
  }
  PgWin::OnFirstHitWin(v1);
}

//----- (005BB8D0) --------------------------------------------------------
unsigned __int16 __thiscall IconSlotWin::GetSkill(IconSlotWin *this)
{
  unsigned __int16 result; // ax@2

  if ( this->m_eType == 1 )
    result = SkillIcon::GetSkill((SkillIcon *)this->m_spIcon.m_pObject);
  else
    result = -1;
  return result;
}

//----- (005BB8F0) --------------------------------------------------------
void __thiscall IconSlotWin::IconSlotWin(IconSlotWin *this)
{
  IconSlotWin *v1; // esi@1
  IconWin *v2; // edi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IconSlotWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IconSlotWin::_vftable_;
  v1->m_spIcon.m_pObject = 0;
  v1->m_iIconOffsetX = 0;
  v1->m_iIconOffsetY = 0;
  v1->m_bKeepDropWhenFailed = 0;
  v2 = v1->m_spIcon.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spIcon.m_pObject = 0;
  }
  v1->m_eType = -1;
}
// 9B496C: using guessed type int (__stdcall *IconSlotWin___vftable_)(int uiFlags);
// 9B498C: using guessed type int (__thiscall *IconSlotWin___vftable_)(void *p, char);

//----- (005BB9A0) --------------------------------------------------------
void __thiscall IconSlotWin::_IconSlotWin(IconSlotWin *this)
{
  IconSlotWin *v1; // esi@1
  IconWin *v2; // edi@1
  IconWin *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IconSlotWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IconSlotWin::_vftable_;
  v2 = this->m_spIcon.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spIcon.m_pObject = 0;
  }
  v3 = v1->m_spIcon.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWin::_PgWin(&v1->baseclass_0);
}
// 9B496C: using guessed type int (__stdcall *IconSlotWin___vftable_)(int uiFlags);
// 9B498C: using guessed type int (__thiscall *IconSlotWin___vftable_)(void *p, char);

//----- (005BBA60) --------------------------------------------------------
void __thiscall IconSlotWin::SetItem(IconSlotWin *this, Item *pkItem, bool bShowLotText, bool bEnable)
{
  Item *v4; // ebx@1
  IconSlotWin *v5; // esi@1
  ItemIcon *v6; // edi@2
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@2
  Item *v8; // ebx@4
  IconWin *v9; // ebx@7
  IconWin *v10; // ebx@12

  v4 = pkItem;
  v5 = this;
  if ( pkItem )
  {
    v6 = ItemIcon::CreateWin(this->m_iIconOffsetX, this->m_iIconOffsetY, &this->baseclass_0);
    ItemIcon::SetItem(v6, v4, bEnable);
    ItemIcon::ShowLotText(v6, bShowLotText);
    v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
    v7(
      &v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    if ( v5->m_spIcon.m_pObject )
    {
      PgWin::DetachChildWin(
        &v5->baseclass_0,
        (NiPointer<PgWin> *)&pkItem,
        &v5->m_spIcon.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      if ( pkItem )
      {
        v8 = pkItem;
        if ( !InterlockedDecrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount) )
        {
          if ( v8 )
            v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
        }
      }
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v5->m_spIcon.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      v9 = v5->m_spIcon.m_pObject;
      if ( v9 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v9,
            1u);
        v5->m_spIcon.m_pObject = 0;
      }
    }
    v10 = v5->m_spIcon.m_pObject;
    if ( (ItemIcon *)v10 != v6 )
    {
      if ( v10
        && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v10,
            1u);
      }
      v5->m_spIcon.m_pObject = (IconWin *)v6;
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v5->baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    v5->m_eType = 0;
  }
}

//----- (005BBB90) --------------------------------------------------------
void __thiscall IconSlotWin::Clear(IconSlotWin *this)
{
  IconSlotWin *v1; // esi@1
  PgWin *v2; // eax@1
  PgWin *v3; // edi@3
  IconWin *v4; // edi@6
  NiPointer<PgWin> result; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = (PgWin *)this->m_spIcon.m_pObject;
  if ( v2 )
  {
    PgWin::DetachChildWin(&this->baseclass_0, &result, v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_spIcon.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v4 = v1->m_spIcon.m_pObject;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v4,
            1u);
      }
      v1->m_spIcon.m_pObject = 0;
    }
    v1->m_eType = -1;
  }
  else
  {
    this->m_eType = -1;
  }
}

//----- (005BBC40) --------------------------------------------------------
void __thiscall IconSlotWin::SetSkill(IconSlotWin *this, unsigned __int16 kSkillID)
{
  IconSlotWin *v2; // edi@1
  SkillIcon *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@1
  IconWin *v5; // ebx@1

  v2 = this;
  v3 = SkillIcon::CreateWin(this->m_iIconOffsetX, this->m_iIconOffsetY, &this->baseclass_0);
  SkillIcon::SetSkill(v3, kSkillID);
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  v4(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    0);
  v5 = v2->m_spIcon.m_pObject;
  if ( (SkillIcon *)v5 != v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v2->m_spIcon.m_pObject = (IconWin *)v3;
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v2->m_eType = 1;
}

//----- (005BBCD0) --------------------------------------------------------
void __thiscall IconSlotWin::SetAction(IconSlotWin *this, unsigned int uiTableIndex)
{
  IconSlotWin *v2; // edi@1
  ActionIcon *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@1
  IconWin *v5; // ebx@1

  v2 = this;
  v3 = ActionIcon::CreateWin(this->m_iIconOffsetX, this->m_iIconOffsetY, &this->baseclass_0);
  ActionIcon::SetAction(v3, uiTableIndex);
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  v4(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    0);
  v5 = v2->m_spIcon.m_pObject;
  if ( (ActionIcon *)v5 != v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v2->m_spIcon.m_pObject = (IconWin *)v3;
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v2->m_eType = 3;
}

//----- (005BBD60) --------------------------------------------------------
void __thiscall IconSlotWin::SetItemSell(IconSlotWin *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkItemSellInfo)
{
  IconSlotWin *v2; // edi@1
  ItemIcon *v3; // esi@1
  IconWin *v4; // ebx@1

  v2 = this;
  v3 = ItemIcon::CreateWin(this->m_iIconOffsetX, this->m_iIconOffsetY, &this->baseclass_0);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  ItemIcon::SetItemSellInfo(v3, pkItemSellInfo);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v3,
    0);
  v4 = v2->m_spIcon.m_pObject;
  if ( (ItemIcon *)v4 != v3 )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v4,
          1u);
    }
    v2->m_spIcon.m_pObject = (IconWin *)v3;
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (005BBDF0) --------------------------------------------------------
void __thiscall IconSlotWin::SetItemByID(IconSlotWin *this, unsigned __int16 kItemID)
{
  IconSlotWin *v2; // esi@1
  ItemIcon *v3; // edi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@1
  IconWin *v5; // ebx@1

  v2 = this;
  v3 = ItemIcon::CreateWin(this->m_iIconOffsetX, this->m_iIconOffsetY, &this->baseclass_0);
  ItemIcon::SetItemAsID(v3, kItemID);
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  v4(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    0);
  v5 = v2->m_spIcon.m_pObject;
  if ( (ItemIcon *)v5 == v3 )
  {
    v2->baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    v2->m_eType = 6;
  }
  else
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v5,
          1u);
    }
    v2->m_spIcon.m_pObject = (IconWin *)v3;
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v2->baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
    v2->m_eType = 6;
  }
}

//----- (005BBEB0) --------------------------------------------------------
void __thiscall IconSlotWin::SetDropContents(IconSlotWin *this, DropContents *pkDropContents)
{
  IconSlotWin *v2; // edi@1

  v2 = this;
  if ( pkDropContents )
  {
    switch ( pkDropContents->m_eType )
    {
      case 0:
        IconSlotWin::SetItem(this, (Item *)pkDropContents->m_apvParam[0], 0, 1);
        v2->m_kContentsDetail.kItem.uiSenderType = pkDropContents->m_eSenderType;
        v2->m_kContentsDetail.kItem.uiSenderIndex = pkDropContents->m_uiSenderIndex;
        break;
      case 6:
        if ( pkDropContents->m_kItemID != -1 )
          IconSlotWin::SetItemByID(this, pkDropContents->m_kItemID);
        break;
      case 1:
        IconSlotWin::SetSkill(this, LOWORD(pkDropContents->m_apvParam[0]));
        break;
      case 3:
        IconSlotWin::SetAction(this, pkDropContents->nTableIndexNum);
        break;
      case 2:
        IconSlotWin::SetItemSell(this, (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)pkDropContents->m_apvParam[0]);
        break;
      default:
        return;
    }
  }
}

//----- (005BBF60) --------------------------------------------------------
bool __thiscall IconSlotWin::EatDropInstance(IconSlotWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  IconSlotWin *v4; // ebx@1
  void *v6; // edi@3
  bool v7; // zf@4
  char *v8; // esi@4
  DirectUserMsgBody_DroppedOnSlot kDrop; // [sp+4h] [bp-10h]@4

  v4 = this;
  if ( !*pkDrop )
    return 0;
  v6 = (*pkDrop)->m_pkContents;
  if ( v6 )
  {
    v7 = this->baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
    v8 = (char *)&this->baseclass_0.baseclass_e8;
    kDrop.pkDropContents = (DropContents *)(*pkDrop)->m_pkContents;
    kDrop.iDropXPos = iDropXPos;
    kDrop.iDropYPos = iDropYPos;
    kDrop.bRetDropable = 0;
    if ( !v7 )
    {
      ((void (__stdcall *)(signed int, DirectUserMsgBody_DroppedOnSlot *, IDirectMessenger *))this->baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        22,
        &kDrop,
        &this->baseclass_0.baseclass_e8);
      if ( v4->baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, DirectUserMsgBody_DroppedOnSlot *, IDirectMessenger *))v4->baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          22,
          &kDrop,
          &v4->baseclass_0.baseclass_e8);
    }
    (*(void (__thiscall **)(IDirectMessenger *, signed int, DirectUserMsgBody_DroppedOnSlot *, IDirectMessenger *))(*(_DWORD *)v8 + 20))(
      &v4->baseclass_0.baseclass_e8,
      22,
      &kDrop,
      &v4->baseclass_0.baseclass_e8);
    if ( kDrop.bRetDropable )
    {
      IconSlotWin::Clear(v4);
      IconSlotWin::SetDropContents(v4, (DropContents *)v6);
      return 1;
    }
    if ( v4->m_bKeepDropWhenFailed )
      PgCursor::ms_bKeepDrop = 1;
  }
  return 0;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (005BC020) --------------------------------------------------------
IconSlotWin *__cdecl IconSlotWin::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  IconSlotWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x13Cu);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    IconSlotWin::IconSlotWin((IconSlotWin *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, signed int, signed int, PgWin *, _DWORD, _DWORD))(*(_DWORD *)v5 + 336))(
                          v5,
                          iXPos,
                          iYPos,
                          32,
                          32,
                          pkParent,
                          0,
                          0) )
  {
    *(_BYTE *)(v5 + 254) = 1;
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (IconSlotWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (005BC170) --------------------------------------------------------
void *__thiscall IconSlotWin::_scalar_deleting_destructor_(IconSlotWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  IconSlotWin::_IconSlotWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005BC1A0) --------------------------------------------------------
void __thiscall IconWin::SetIconImg(IconWin *this, NiSourceTexture *pkTexture, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight)
{
  IconWin *v5; // esi@1

  v5 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[150].__vecDelDtor)(pkTexture);
  if ( uiIndex != v5->m_uiIconIndex )
  {
    if ( uiIndex != -1 )
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[151].__vecDelDtor)(
        v5,
        pkTexture,
        uiIndex,
        uiIconWidth,
        uiIconHeight);
    v5->m_uiIconIndex = uiIndex;
  }
}

//----- (005BC1F0) --------------------------------------------------------
std::vector<IconWin *,std::allocator<IconWin *> > *__cdecl IconWin::GetCoolTimeIconList()
{
  return (std::vector<IconWin *,std::allocator<IconWin *> > *)&IconWin::ms_kCoolTimeIconList;
}

//----- (005BC200) --------------------------------------------------------
void __thiscall DecoPlaneTex::Show(DecoPlaneTex *this, bool bShow)
{
  NiScreenElements *v2; // eax@2

  if ( this->m_bShowDeco )
  {
    v2 = this->m_spDecoPlane.m_pObject;
    if ( bShow )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (005BC230) --------------------------------------------------------
void __thiscall DecoPlaneColor::Show(DecoPlaneColor *this, bool bShow)
{
  NiScreenElements *v2; // eax@2
  NiScreenElements *v3; // ecx@6

  if ( this->m_bShowDeco )
  {
    v2 = this->m_spDecoPlane.m_pObject;
    if ( bShow )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  if ( this->m_bShowSub )
  {
    v3 = this->m_spSubPlane.m_pObject;
    if ( bShow )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (005BC280) --------------------------------------------------------
void __thiscall IconWin::ProcessMeInput(IconWin *this, bool *bHit)
{
  IconWin *v2; // esi@1
  bool v3; // bl@1
  bool v4; // al@1
  NiAVObject *v5; // eax@3

  v2 = this;
  v3 = dword_B70344 >= 1;
  v4 = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[87].__vecDelDtor)(
         PgWin::ms_iMsX.x,
         PgWin::ms_iMsY);
  *bHit = v4;
  if ( v4 && v2->m_bShowFocus )
  {
    v5 = v2->m_spClickGeom.m_pObject;
    if ( !v3 )
    {
      v5->m_uFlags |= 1u;
      v2->m_spOverGeom.m_pObject->m_uFlags &= 0xFFFEu;
      PgWinLRBut::ProcessMeInput(&v2->baseclass_0, bHit);
      return;
    }
    v5->m_uFlags &= 0xFFFEu;
  }
  else
  {
    v2->m_spClickGeom.m_pObject->m_uFlags |= 1u;
  }
  v2->m_spOverGeom.m_pObject->m_uFlags |= 1u;
  PgWinLRBut::ProcessMeInput(&v2->baseclass_0, bHit);
}
// B70344: using guessed type int dword_B70344;

//----- (005BC320) --------------------------------------------------------
void __thiscall IconWin::ReleaseMeInput(IconWin *this)
{
  this->m_spClickGeom.m_pObject->m_uFlags |= 1u;
  this->m_spOverGeom.m_pObject->m_uFlags |= 1u;
}

//----- (005BC340) --------------------------------------------------------
void __thiscall IconWin::Show(IconWin *this, bool b)
{
  NiScreenElements *v2; // eax@1
  ClockShadowWin *v3; // ecx@5

  v2 = this->m_spGeom.m_pObject;
  if ( v2 )
  {
    if ( b )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v3 = this->m_spClockShadowWin.m_pObject;
  if ( v3 )
    v3->b_show = b;
}

//----- (005BC380) --------------------------------------------------------
bool __thiscall IconWin::GetShow(IconWin *this)
{
  NiScreenElements *v1; // eax@1
  bool result; // al@2

  v1 = this->m_spGeom.m_pObject;
  if ( v1 )
    result = ~LOBYTE(v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags) & 1;
  else
    result = 0;
  return result;
}

//----- (005BC3A0) --------------------------------------------------------
void __thiscall IconWin::ShowFocus(IconWin *this, bool bFocus)
{
  this->m_bShowFocus = bFocus;
  if ( !bFocus )
  {
    this->m_spClickGeom.m_pObject->m_uFlags |= 1u;
    this->m_spOverGeom.m_pObject->m_uFlags |= 1u;
  }
}

//----- (005BC3D0) --------------------------------------------------------
void __thiscall IconWin::UpdateMeWin(IconWin *this, float fCurTime)
{
  IconWin *v2; // esi@1
  ClockShadowWin *v3; // eax@1
  NiObject *v4; // ebx@5
  void *v5; // eax@6
  SpEffect *v6; // edi@6
  void *v7; // ST14_4@6
  NiObject *v8; // eax@6
  SpEffect *v9; // ecx@9
  ClockShadowWin *v10; // eax@11
  SpEffect *v11; // ecx@14

  v2 = this;
  v3 = this->m_spClockShadowWin.m_pObject;
  if ( v3 && this->m_bClockShadowWinActive && !v3->m_bStart )
  {
    if ( !this->m_pkCoolTimeOverEffect )
    {
      v4 = (NiObject *)EffectMgr::GetEffectNode(&g_kEffectMgr, "WeaponTitle");
      if ( v4 )
      {
        v5 = operator new(0x44u);
        v6 = (SpEffect *)v5;
        v7 = v5;
        v8 = 0;
        if ( v7 )
        {
          v8 = NiObject::Clone(v4);
          SpEffect::SpEffect(v6, (NiNode *)v8);
        }
        v2->m_pkCoolTimeOverEffect = (SpEffect *)v8;
      }
    }
    v9 = v2->m_pkCoolTimeOverEffect;
    if ( v9 )
      SpEffect::Start(v9, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  v10 = v2->m_spClockShadowWin.m_pObject;
  if ( v10 )
    v2->m_bClockShadowWinActive = v10->m_bStart;
  else
    v2->m_bClockShadowWinActive = 0;
  v11 = v2->m_pkCoolTimeOverEffect;
  if ( v11 )
    SpEffect::Update(v11, fCurTime);
}

//----- (005BC4C0) --------------------------------------------------------
void __thiscall IconWin::SetCoolTimeID(IconWin *this, unsigned __int16 id)
{
  IconWin *v2; // esi@1
  ClockShadowWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_spClockShadowWin.m_pObject;
  if ( v3 )
  {
    ClockShadowWin::StopClockShadow(v3);
    v2->m_bClockShadowWinActive = 0;
  }
  v2->m_coolTimeID = id;
  if ( id != -1 )
    v2->m_bCoolTimeCheckNeeded = 1;
}

//----- (005BC500) --------------------------------------------------------
void __thiscall IconWin::SetCoolTimeIDByItemAction(IconWin *this, unsigned __int16 id)
{
  IconWin *v2; // esi@1
  ClockShadowWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_spClockShadowWin.m_pObject;
  if ( v3 )
  {
    ClockShadowWin::StopClockShadow(v3);
    v2->m_bClockShadowWinActive = 0;
  }
  v2->m_CoolGroupItemActionID = id;
  if ( id != -1 )
    v2->m_bCoolTimeCheckNeeded = 1;
}

//----- (005BC540) --------------------------------------------------------
bool __thiscall IconWin::IsStartCoolTime(IconWin *this)
{
  ClockShadowWin *v1; // eax@1

  v1 = this->m_spClockShadowWin.m_pObject;
  return v1 && v1->m_bStart;
}

//----- (005BC560) --------------------------------------------------------
void __thiscall IconWin::CooltimeDecrease(IconWin *this, unsigned __int16 kID)
{
  ClockShadowWin::CoolTimeDecrease(this->m_spClockShadowWin.m_pObject, kID);
}

//----- (005BC570) --------------------------------------------------------
void __thiscall IconWin::SelectIcon(IconWin *this)
{
  this->m_spClickGeom.m_pObject->m_uFlags &= 0xFFFEu;
  this->m_spOverGeom.m_pObject->m_uFlags |= 1u;
}

//----- (005BC590) --------------------------------------------------------
void __thiscall DecoPlaneTex::DecoPlaneTex(DecoPlaneTex *this)
{
  this->m_spDecoPlane.m_pObject = 0;
  this->m_spDecoTexProp.m_pObject = 0;
  this->m_uiDecoImageIndex = -1;
  this->m_bShowDeco = 0;
}

//----- (005BC5B0) --------------------------------------------------------
void __thiscall DecoPlaneTex::SetImage(DecoPlaneTex *this, char *pcFn, unsigned int uiIndex)
{
  DecoPlaneTex *v3; // esi@1
  NiTexture *v4; // eax@6
  NiTexture *v5; // edi@6
  unsigned int v6; // eax@10
  unsigned int v7; // ST14_4@10
  unsigned int v8; // ST10_4@10
  unsigned int v9; // ST0C_4@10
  unsigned int v10; // eax@10
  NiScreenElements *pcFna; // [sp+1Ch] [bp+8h]@10

  v3 = this;
  if ( pcFn && *pcFn != 45 )
  {
    if ( uiIndex == -1 )
    {
      this->m_bShowDeco = 0;
      this->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      v4 = (NiTexture *)IconMgr::GetTexture(pcFn);
      v5 = v4;
      if ( v4 )
      {
        NiTexturingProperty::SetBaseTexture(v3->m_spDecoTexProp.m_pObject, v4);
        v3->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
        v3->m_bShowDeco = 1;
        if ( uiIndex != v3->m_uiDecoImageIndex )
        {
          if ( v3->m_spDecoTexProp.m_pObject )
          {
            v6 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v5);
            pcFna = v3->m_spDecoPlane.m_pObject;
            v7 = 32 * uiIndex / (v6 >> 5);
            v8 = 32 * uiIndex % (v6 >> 5);
            v9 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v5);
            v10 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v5);
            PgUtil::SetTextureCoord(pcFna, 0, v10, v9, v8, v7, 0x20u, 0x20u);
            NiAVObject::Update(&v3->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
            v3->m_uiDecoImageIndex = uiIndex;
          }
        }
      }
      else
      {
        v3->m_bShowDeco = 0;
        v3->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      }
    }
  }
  else
  {
    this->m_bShowDeco = 0;
    this->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (005BC690) --------------------------------------------------------
void __thiscall DecoPlaneColor::DecoPlaneColor(DecoPlaneColor *this)
{
  this->m_spDecoPlane.m_pObject = 0;
  this->m_spSubPlane.m_pObject = 0;
}

//----- (005BC6A0) --------------------------------------------------------
void __thiscall DecoPlaneColor::SetColor(DecoPlaneColor *this, char byR, char byG, char byB, char bySubR, char bySubG, char bySubB)
{
  double v7; // st7@1
  DecoPlaneColor *v8; // esi@1
  NiScreenElements *v9; // eax@4
  char v10; // bl@4
  NiScreenElements *v11; // edx@5
  NiScreenElements *v12; // ecx@5
  NiScreenElements *v13; // eax@9
  NiScreenElements *v14; // ecx@9
  NiColorA kCommonValue; // [sp+8h] [bp-10h]@5

  v7 = 255.0;
  v8 = this;
  if ( byR || byG || byB )
  {
    v11 = this->m_spDecoPlane.m_pObject;
    *(_WORD *)&this->m_bShowDeco = 257;
    v10 = 1;
    kCommonValue.r = (double)(unsigned __int8)byR / 255.0;
    kCommonValue.g = (double)(unsigned __int8)byG / 255.0;
    kCommonValue.b = (double)(unsigned __int8)byB / 255.0;
    kCommonValue.a = 1.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v11->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    v12 = v8->m_spSubPlane.m_pObject;
    kCommonValue.r = 0.0;
    kCommonValue.g = 0.0;
    kCommonValue.b = 0.0;
    kCommonValue.a = 1.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v12->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    v7 = 255.0;
    v8->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v8->m_spSubPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
  else
  {
    v9 = this->m_spDecoPlane.m_pObject;
    v10 = 1;
    *(_WORD *)&this->m_bShowDeco = 0;
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    this->m_spSubPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  if ( bySubR || bySubG || bySubB )
  {
    v13 = v8->m_spSubPlane.m_pObject;
    v8->m_bShowSub = v10;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v14 = v8->m_spSubPlane.m_pObject;
    kCommonValue.r = (double)(unsigned __int8)bySubR / v7;
    kCommonValue.g = (double)(unsigned __int8)bySubG / v7;
    kCommonValue.b = (double)(unsigned __int8)bySubB / v7;
    kCommonValue.a = 1.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v14->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
  }
}

//----- (005BC7F0) --------------------------------------------------------
void __thiscall IconWin::IconWin(IconWin *this)
{
  IconWin *v1; // esi@1
  NiAVObject *v2; // edi@1
  NiAVObject *v3; // edi@6
  ClockShadowWin *v4; // edi@11

  v1 = this;
  PgWinLRBut::PgWinLRBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IconWin::_vftable_;
  v1->m_spGeom.m_pObject = 0;
  v1->m_spTexProp.m_pObject = 0;
  v1->m_spOverGeomForRefCount.m_pObject = 0;
  v1->m_spClickGeomForRefCount.m_pObject = 0;
  v1->m_spOverGeom.m_pObject = 0;
  v1->m_spClickGeom.m_pObject = 0;
  v1->m_spClockShadowWin.m_pObject = 0;
  v1->m_uiIconIndex = -1;
  v2 = v1->m_spOverGeom.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spOverGeom.m_pObject = 0;
  }
  v3 = v1->m_spClickGeom.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spClickGeom.m_pObject = 0;
  }
  v1->m_bShowFocus = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
  v1->baseclass_0.baseclass_0.m_bEnableClickSound = 0;
  v1->m_bClockShadowWinActive = 0;
  v4 = v1->m_spClockShadowWin.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spClockShadowWin.m_pObject = 0;
  }
  v1->m_pkCoolTimeOverEffect = 0;
  v1->m_bCoolTimeCheckNeeded = 0;
  *(_DWORD *)&v1->m_coolTimeID = -1;
}
// 9B4BAC: using guessed type int (__stdcall *IconWin___vftable_)(int uiFlags);
// 9B4BCC: using guessed type int (__thiscall *IconWin___vftable_)(void *p, char);

//----- (005BC940) --------------------------------------------------------
void __thiscall IconWin::ResetUVs(IconWin *this, NiSourceTexture *pkTexture, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight)
{
  NiSourceTexture *v5; // esi@1
  IconWin *v6; // edi@1
  __int64 v7; // qax@3
  unsigned int v8; // ST14_4@3
  unsigned int v9; // ST10_4@3
  unsigned int v10; // ST0C_4@3
  unsigned int v11; // eax@3
  NiScreenElements *pkTexturea; // [sp+1Ch] [bp+8h]@3

  v5 = pkTexture;
  v6 = this;
  if ( pkTexture )
  {
    if ( this->m_spGeom.m_pObject )
    {
      v7 = ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture)
         / uiIconWidth;
      pkTexturea = v6->m_spGeom.m_pObject;
      v8 = uiIconHeight * __PAIR__(HIDWORD(v7), uiIndex) / (unsigned int)v7;
      v9 = uiIconWidth * __PAIR__(HIDWORD(v7), uiIndex) % (unsigned int)v7;
      v10 = ((int (__thiscall *)(NiSourceTexture *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v5);
      v11 = ((int (__thiscall *)(NiSourceTexture *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v5);
      PgUtil::SetTextureCoord(pkTexturea, 0, v11, v10, v9, v8, uiIconWidth, uiIconHeight);
      NiAVObject::Update(&v6->m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    }
  }
}

//----- (005BC9D0) --------------------------------------------------------
void __thiscall IconWin::StartCoolTime(IconWin *this, float fCurTime, float fDlyTime, float fStartTime)
{
  IconWin *v4; // esi@1
  ClockShadowWin *v5; // eax@2
  ClockShadowWin *v6; // edi@2
  ClockShadowWin *v7; // ebx@2
  ClockShadowWin *v8; // esi@10

  v4 = this;
  if ( !this->m_spClockShadowWin.m_pObject )
  {
    v5 = ClockShadowWin::CreateWin(0, 0, &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v6 = v4->m_spClockShadowWin.m_pObject;
    v7 = v5;
    if ( v6 != v5 )
    {
      if ( v6
        && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v6,
          1u);
      v4->m_spClockShadowWin.m_pObject = v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v4->m_spClockShadowWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    NiAVObject::UpdateProperties(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  v8 = v4->m_spClockShadowWin.m_pObject;
  if ( v8 )
    ClockShadowWin::Start(v8, fCurTime, fDlyTime, fStartTime);
}

//----- (005BCA80) --------------------------------------------------------
void __cdecl IconWin::StartCoolTimebyItemUse(unsigned __int16 id, float fCurTime, float fDlyTime, float fStartTime)
{
  ItemAction *v4; // ebx@1
  int v5; // eax@2
  unsigned int v6; // edi@2
  int v7; // esi@3
  ItemAction *v8; // eax@5
  unsigned __int16 v9; // cx@6

  v4 = ItemActionTab::GetByItemActionID(id);
  if ( v4 )
  {
    v5 = *(_DWORD *)&IconWin::ms_kCoolTimeIconList;
    v6 = 0;
    if ( (signed int)((char *)IconWin::ms_kCoolTimeIconList.baseclass_0._Mylast
                    - *(_DWORD *)&IconWin::ms_kCoolTimeIconList) >> 2 )
    {
      do
      {
        v7 = *(_DWORD *)(v5 + 4 * v6);
        if ( v7 )
        {
          if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 260))(v7) )
          {
            v8 = ItemActionTab::GetByItemActionID(*(_WORD *)(v7 + 364));
            if ( v8 )
            {
              v9 = v8->CoolGroupActionID;
              if ( v9 == v4->CoolGroupActionID )
              {
                if ( v9 || v8->ItemActionID == v4->ItemActionID )
                  IconWin::StartCoolTime((IconWin *)v7, fCurTime, fDlyTime, fStartTime);
              }
            }
          }
        }
        v5 = *(_DWORD *)&IconWin::ms_kCoolTimeIconList;
        ++v6;
      }
      while ( v6 < (signed int)((char *)IconWin::ms_kCoolTimeIconList.baseclass_0._Mylast
                              - *(_DWORD *)&IconWin::ms_kCoolTimeIconList) >> 2 );
    }
  }
}

//----- (005BCB30) --------------------------------------------------------
void __cdecl IconWin::StartCoolTime(unsigned __int16 id, float fCurTime, float fDlyTime, float fStartTime)
{
  int v4; // eax@1
  unsigned int v5; // edi@1
  int v6; // esi@2

  v4 = *(_DWORD *)&IconWin::ms_kCoolTimeIconList;
  v5 = 0;
  if ( (signed int)((char *)IconWin::ms_kCoolTimeIconList.baseclass_0._Mylast - *(_DWORD *)&IconWin::ms_kCoolTimeIconList) >> 2 )
  {
    do
    {
      v6 = *(_DWORD *)(v4 + 4 * v5);
      if ( v6 && *(_WORD *)(v6 + 362) == id )
      {
        if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 260))(v6) )
          IconWin::StartCoolTime((IconWin *)v6, fCurTime, fDlyTime, fStartTime);
      }
      v4 = *(_DWORD *)&IconWin::ms_kCoolTimeIconList;
      ++v5;
    }
    while ( v5 < (signed int)((char *)IconWin::ms_kCoolTimeIconList.baseclass_0._Mylast
                            - *(_DWORD *)&IconWin::ms_kCoolTimeIconList) >> 2 );
  }
}

//----- (005BCBB0) --------------------------------------------------------
void __thiscall DecoPlaneTex::Create(DecoPlaneTex *this, PgWin *pkParent)
{
  DecoPlaneTex *v2; // edi@1
  int v3; // ebx@1
  NiScreenElementsData *v4; // esi@1
  void *v5; // eax@1
  int v6; // eax@2
  NiScreenElements *v7; // esi@3
  void *v8; // eax@10
  int v9; // eax@11
  int v10; // ebx@11
  NiTexturingProperty *v11; // esi@13
  NiTexturingProperty *v12; // ebx@20
  NiVBChip *v13; // esi@20
  void *v14; // eax@21
  NiVBChip *v15; // eax@22
  NiVBBlock *v16; // ebx@25
  NiTexturingProperty *v17; // esi@30
  NiScreenElements *v18; // ebx@30
  void *v19; // eax@35
  void *v20; // esi@35
  NiScreenElements *v21; // ST2C_4@38
  NiVBChip *element; // [sp+4h] [bp-10h]@24
  int v23; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = 0;
  v4 = PgUtil::CreateScreenGeometryData(0x20u, 0x20u, 0, 0, 0x20u, 0x20u);
  v5 = operator new(0xC4u);
  v23 = 0;
  if ( v5 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v5, v4);
    v3 = v6;
  }
  v7 = v2->m_spDecoPlane.m_pObject;
  v23 = -1;
  if ( v7 != (NiScreenElements *)v3 )
  {
    if ( v7
      && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v2->m_spDecoPlane.m_pObject = (NiScreenElements *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v8 = operator new(0x44u);
  v23 = 1;
  if ( v8 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v8);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  v11 = v2->m_spDecoTexProp.m_pObject;
  v23 = -1;
  if ( v11 != (NiTexturingProperty *)v10 )
  {
    if ( v11
      && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v2->m_spDecoTexProp.m_pObject = (NiTexturingProperty *)v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)(v10 + 4));
  }
  v12 = v2->m_spDecoTexProp.m_pObject;
  v13 = (NiVBChip *)*v12->m_kMaps.m_pBase;
  if ( !v13 )
  {
    v14 = operator new(0x18u);
    v23 = 2;
    if ( v14 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v14);
    else
      v15 = 0;
    v13 = v15;
    v23 = -1;
    element = v15;
    NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)&v12->m_kMaps, 0, &element);
  }
  v16 = v13->___u1.m_pkBlock;
  if ( v16 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v16->m_uiIndex) && v16 )
      ((void (__thiscall *)(NiVBBlock *, signed int))v16->m_pkSet->m_uiIndex)(v16, 1);
    v13->___u1.m_pkBlock = 0;
  }
  NiTexturingProperty::SetBaseFilterMode(v2->m_spDecoTexProp.m_pObject, 0);
  v2->m_spDecoTexProp.m_pObject->m_eApply = 2;
  NiTexturingProperty::SetBaseClampMode(v2->m_spDecoTexProp.m_pObject, 0);
  v17 = v2->m_spDecoTexProp.m_pObject;
  v18 = v2->m_spDecoPlane.m_pObject;
  element = (NiVBChip *)v17;
  if ( v17 )
    InterlockedIncrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v23 = 3;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&element);
  v23 = -1;
  if ( v17 && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
  v19 = operator new(0x20u);
  v20 = v19;
  v23 = 4;
  if ( v19 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v19);
    *(_DWORD *)v20 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v20 + 14) = 236;
    *((_BYTE *)v20 + 30) = 0;
  }
  else
  {
    v20 = 0;
  }
  *((_WORD *)v20 + 14) |= 1u;
  v21 = v2->m_spDecoPlane.m_pObject;
  element = (NiVBChip *)v20;
  InterlockedIncrement((volatile LONG *)v20 + 1);
  v23 = 5;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&element);
  v23 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v20 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v20)(v20, 1);
  ((void (__thiscall *)(PgWin *, NiScreenElements *, _DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    pkParent,
    v2->m_spDecoPlane.m_pObject,
    0);
  NiAVObject::UpdateProperties(&pkParent->baseclass_0.baseclass_0);
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (005BCE40) --------------------------------------------------------
void __thiscall DecoPlaneColor::Create(DecoPlaneColor *this, PgWin *pkParent)
{
  DecoPlaneColor *v2; // esi@1
  void *v3; // edi@1
  int v4; // ebx@1
  void *v5; // eax@2
  NiScreenElementsData *v6; // eax@3
  int v7; // eax@5
  NiScreenElements *v8; // edi@6
  NiScreenElements *v9; // eax@13
  void *v10; // eax@13
  void *v11; // edi@13
  void *v12; // edi@18
  void *v13; // eax@19
  NiScreenElementsData *v14; // eax@20
  int v15; // eax@20
  int v16; // ebx@20
  int v17; // eax@21
  NiScreenElements *v18; // edi@23
  void *v19; // eax@30
  int v20; // edi@30
  NiColorA kCommonValue; // [sp+2Ch] [bp-24h]@13
  void *v22; // [sp+3Ch] [bp-14h]@1
  NiPointer<NiRoom> element; // [sp+40h] [bp-10h]@2
  int v24; // [sp+4Ch] [bp-4h]@1

  v2 = this;
  v3 = operator new(0xC4u);
  v22 = v3;
  v4 = 0;
  v24 = 0;
  if ( v3 )
  {
    v5 = operator new(0x70u);
    element.m_pObject = (NiRoom *)v5;
    LOBYTE(v24) = 1;
    if ( v5 )
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v5, 0, 1, 0, 1, 1, 4, 1, 2, 1);
    else
      v6 = 0;
    LOBYTE(v24) = 0;
    NiScreenElements::NiScreenElements((NiScreenElements *)v3, v6);
    v4 = v7;
  }
  v8 = v2->m_spDecoPlane.m_pObject;
  v24 = -1;
  if ( v8 != (NiScreenElements *)v4 )
  {
    if ( v8
      && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v8,
        1u);
    v2->m_spDecoPlane.m_pObject = (NiScreenElements *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)(v4 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v2->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  NiScreenElementsData::SetRectangle(
    (NiScreenElementsData *)v2->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    -1.0,
    -1.0,
    34.0,
    34.0);
  v9 = v2->m_spDecoPlane.m_pObject;
  kCommonValue.r = 0.0;
  kCommonValue.g = 0.0;
  kCommonValue.b = 0.0;
  kCommonValue.a = 1.0;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v9->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v10 = operator new(0x28u);
  v11 = v10;
  v22 = v10;
  v24 = 2;
  if ( v10 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v10);
    *(_DWORD *)v11 = &NiVertexColorProperty::_vftable_;
    *((_WORD *)v11 + 14) = 0;
    *((_DWORD *)v11 + 8) = 0;
    *((_DWORD *)v11 + 9) = 1;
  }
  else
  {
    v11 = 0;
  }
  *((_DWORD *)v11 + 9) = 0;
  *((_DWORD *)v11 + 8) = 1;
  v22 = v2->m_spDecoPlane.m_pObject;
  element.m_pObject = (NiRoom *)v11;
  InterlockedIncrement((volatile LONG *)v11 + 1);
  v24 = 3;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v22 + 156),
    &element);
  v24 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v2->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiAVObject::UpdateProperties(&v2->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v2->m_spDecoPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  v12 = operator new(0xC4u);
  v22 = v12;
  v24 = 4;
  if ( v12 )
  {
    v13 = operator new(0x70u);
    element.m_pObject = (NiRoom *)v13;
    LOBYTE(v24) = 5;
    if ( v13 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v13, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      LOBYTE(v24) = 4;
      NiScreenElements::NiScreenElements((NiScreenElements *)v12, v14);
      v16 = v15;
    }
    else
    {
      LOBYTE(v24) = 4;
      NiScreenElements::NiScreenElements((NiScreenElements *)v12, 0);
      v16 = v17;
    }
  }
  else
  {
    v16 = 0;
  }
  v18 = v2->m_spSubPlane.m_pObject;
  v24 = -1;
  if ( v18 != (NiScreenElements *)v16 )
  {
    if ( v18
      && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v18 )
      v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v18,
        1u);
    v2->m_spSubPlane.m_pObject = (NiScreenElements *)v16;
    if ( v16 )
      InterlockedIncrement((volatile LONG *)(v16 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v2->m_spSubPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  NiScreenElementsData::SetRectangle(
    (NiScreenElementsData *)v2->m_spSubPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    0.0,
    0.0,
    32.0,
    32.0);
  v19 = operator new(0x28u);
  v20 = (int)v19;
  v22 = v19;
  v24 = 6;
  if ( v19 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v19);
    *(_DWORD *)v20 = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(v20 + 28) = 0;
    *(_DWORD *)(v20 + 32) = 0;
    *(_DWORD *)(v20 + 36) = 1;
  }
  else
  {
    v20 = 0;
  }
  *(_DWORD *)(v20 + 36) = 0;
  *(_DWORD *)(v20 + 32) = 1;
  element.m_pObject = (NiRoom *)v2->m_spSubPlane.m_pObject;
  v22 = (void *)v20;
  InterlockedIncrement((volatile LONG *)(v20 + 4));
  v24 = 7;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&element.m_pObject->baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v22);
  v24 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v20)(v20, 1);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v2->m_spSubPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiAVObject::UpdateProperties(&v2->m_spSubPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v2->m_spSubPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  ((void (__thiscall *)(PgWin *))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(pkParent);
  ((void (__thiscall *)(PgWin *))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(pkParent);
  NiAVObject::UpdateProperties(&pkParent->baseclass_0.baseclass_0);
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (005BD1F0) --------------------------------------------------------
void __thiscall IconWin::_IconWin(IconWin *this)
{
  IconWin *v1; // esi@1
  NiAVObject *v2; // eax@1
  LONG (__stdcall *v3)(volatile LONG *); // edi@2
  NiAVObject *v4; // ebx@3
  NiAVObject *v5; // ebx@6
  NiAVObject *v6; // ebx@14
  NiAVObject *v7; // ebx@17
  NiScreenElements *v8; // ebx@22
  NiTexturingProperty *v9; // ebx@27
  NiAVObject *v10; // ebx@32
  NiAVObject *v11; // ebx@37
  NiD3DDefaultShader *v12; // ebx@42
  NiD3DDefaultShader *v13; // ebx@48
  SpEffect *v14; // ebx@54
  NiNode *v15; // edi@55
  ClockShadowWin *v16; // ebx@60
  NiAVObject *v17; // ebx@64
  NiAVObject *v18; // ebx@68
  NiAVObject *v19; // ebx@72
  NiAVObject *v20; // ebx@76
  NiTexturingProperty *v21; // edi@80
  NiScreenElements *v22; // edi@84
  NiPointer<NiAVObject> result; // [sp+8h] [bp-10h]@2
  int v24; // [sp+14h] [bp-4h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&IconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&IconWin::_vftable_;
  v2 = this->m_spOverGeom.m_pObject;
  v24 = 7;
  if ( v2 )
  {
    NiNode::DetachChild(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, &result, v2);
    v3 = InterlockedDecrement;
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v5 = v1->m_spOverGeom.m_pObject;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spOverGeom.m_pObject = 0;
    }
  }
  else
  {
    v3 = InterlockedDecrement;
  }
  if ( v1->m_spClickGeom.m_pObject )
  {
    NiNode::DetachChild(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &result,
      v1->m_spClickGeom.m_pObject);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !v3((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v7 = v1->m_spClickGeom.m_pObject;
    if ( v7 )
    {
      if ( !v3((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      v1->m_spClickGeom.m_pObject = 0;
    }
  }
  v8 = v1->m_spGeom.m_pObject;
  if ( v8 )
  {
    if ( !v3((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v8,
        1u);
    v1->m_spGeom.m_pObject = 0;
  }
  v9 = v1->m_spTexProp.m_pObject;
  if ( v9 )
  {
    if ( !v3((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    v1->m_spTexProp.m_pObject = 0;
  }
  v10 = v1->m_spOverGeomForRefCount.m_pObject;
  if ( v10 )
  {
    if ( !v3((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v1->m_spOverGeomForRefCount.m_pObject = 0;
  }
  v11 = v1->m_spClickGeomForRefCount.m_pObject;
  if ( v11 )
  {
    if ( !v3((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v1->m_spClickGeomForRefCount.m_pObject = 0;
  }
  v12 = IconWin::ms_spOverGeom.m_pObject;
  if ( IconWin::ms_spOverGeom.m_pObject
    && IconWin::ms_spOverGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount == 1 )
  {
    if ( !v3((volatile LONG *)&IconWin::ms_spOverGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    IconWin::ms_spOverGeom.m_pObject = 0;
  }
  v13 = IconWin::ms_spClickGeom.m_pObject;
  if ( IconWin::ms_spClickGeom.m_pObject
    && IconWin::ms_spClickGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount == 1 )
  {
    if ( !v3((volatile LONG *)&IconWin::ms_spClickGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v13 )
      v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    IconWin::ms_spClickGeom.m_pObject = 0;
  }
  v14 = v1->m_pkCoolTimeOverEffect;
  if ( v14 )
  {
    LOBYTE(v24) = 9;
    NsEffect::_NsEffect(&v14->m_kEffect);
    LOBYTE(v24) = 8;
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v14->m_kMarkCheck);
    v15 = v14->m_spEffect.m_pObject;
    LOBYTE(v24) = 7;
    if ( v15
      && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v15 )
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    operator delete(v14);
    v3 = InterlockedDecrement;
  }
  v16 = v1->m_spClockShadowWin.m_pObject;
  LOBYTE(v24) = 6;
  if ( v16
    && !v3((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v16 )
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v16,
      1u);
  v17 = v1->m_spClickGeom.m_pObject;
  LOBYTE(v24) = 5;
  if ( v17 && !v3((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v17 )
    v17->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
  v18 = v1->m_spOverGeom.m_pObject;
  LOBYTE(v24) = 4;
  if ( v18 && !v3((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v18 )
    v18->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
  v19 = v1->m_spClickGeomForRefCount.m_pObject;
  LOBYTE(v24) = 3;
  if ( v19 && !v3((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v19 )
    v19->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
  v20 = v1->m_spOverGeomForRefCount.m_pObject;
  LOBYTE(v24) = 2;
  if ( v20 && !v3((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v20 )
    v20->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
  v21 = v1->m_spTexProp.m_pObject;
  LOBYTE(v24) = 1;
  if ( v21
    && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v21 )
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
  v22 = v1->m_spGeom.m_pObject;
  LOBYTE(v24) = 0;
  if ( v22
    && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v22 )
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v22,
      1u);
  v24 = -1;
  PgWinLRBut::_PgWinLRBut(&v1->baseclass_0);
}
// 9B4BAC: using guessed type int (__stdcall *IconWin___vftable_)(int uiFlags);
// 9B4BCC: using guessed type int (__thiscall *IconWin___vftable_)(void *p, char);

//----- (005BD5B0) --------------------------------------------------------
void __thiscall IconWin::CreateGeometry(IconWin *this, unsigned int uiWidth, unsigned int uiHeight)
{
  NiAVObject *v3; // esi@1
  int v4; // ebx@1
  NiScreenElementsData *v5; // edi@1
  void *v6; // eax@1
  int v7; // eax@2
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v8; // edi@3
  void *v9; // eax@10
  int v10; // eax@11
  int v11; // ebx@11
  NiTListItem<NiPointer<NiProperty> > *v12; // edi@13
  NiTListItem<NiPointer<NiProperty> > *v13; // ebx@20
  unsigned int v14; // edi@20
  void *v15; // eax@21
  unsigned int v16; // eax@22
  int v17; // ebx@25
  unsigned int v18; // edi@30
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v19; // ebx@30
  void *v20; // eax@35
  unsigned int v21; // edi@35
  NiTexturePalette *v22; // edi@42
  char *v23; // eax@44
  NiD3DDefaultShader *v24; // eax@45
  NiD3DDefaultShader *v25; // eax@45
  unsigned int v26; // edi@45
  NiCollisionObject *v27; // edi@49
  NiD3DDefaultShader *v28; // eax@54
  int v29; // edi@56
  NiD3DDefaultShader *v30; // eax@61
  NiObject *v31; // eax@65
  NiObject *v32; // eax@68
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *uiWidtha; // [sp+6Ch] [bp+8h]@38

  v3 = (NiAVObject *)this;
  v4 = 0;
  v5 = PgUtil::CreateScreenGeometryData(uiWidth, uiHeight, 0, 0, uiWidth, uiHeight);
  v6 = operator new(0xC4u);
  uiHeight = (unsigned int)v6;
  if ( v6 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v6, v5);
    v4 = v7;
  }
  v8 = v3[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr;
  if ( v8 != (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)v4 )
  {
    if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->NewItem) && v8 )
      (*(void (__thiscall **)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *, signed int))v8->__vecDelDtor)(
        v8,
        1);
    v3[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)(v4 + 4));
  }
  v9 = operator new(0x44u);
  uiHeight = (unsigned int)v9;
  if ( v9 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v9);
    v11 = v10;
  }
  else
  {
    v11 = 0;
  }
  v12 = v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v12 != (NiTListItem<NiPointer<NiProperty> > *)v11 )
  {
    if ( v12 && !InterlockedDecrement((volatile LONG *)&v12->m_pkPrev) && v12 )
      ((void (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, signed int))v12->m_pkNext->m_pkNext)(v12, 1);
    v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)(v11 + 4));
  }
  v13 = v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v14 = (unsigned int)v13[3].m_pkPrev->m_pkNext;
  if ( !v14 )
  {
    v15 = operator new(0x18u);
    uiHeight = (unsigned int)v15;
    if ( v15 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v15);
    else
      v16 = 0;
    v14 = v16;
    uiHeight = v16;
    NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)&v13[3], 0, (NiVBChip *const *)&uiHeight);
  }
  v17 = *(_DWORD *)(v14 + 4);
  if ( v17 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v17)(v17, 1);
    *(_DWORD *)(v14 + 4) = 0;
  }
  NiTexturingProperty::SetBaseFilterMode(
    (NiTexturingProperty *)v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
    0);
  v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead[2].m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)2;
  NiTexturingProperty::SetBaseClampMode(
    (NiTexturingProperty *)v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
    0);
  v18 = (unsigned int)v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v19 = v3[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr;
  uiHeight = v18;
  if ( v18 )
    InterlockedIncrement((volatile LONG *)(v18 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v19[13],
    (NiPointer<NiRoom> *)&uiHeight);
  if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  v20 = operator new(0x20u);
  v21 = (unsigned int)v20;
  uiHeight = (unsigned int)v20;
  if ( v20 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v20);
    *(_DWORD *)v21 = &NiAlphaProperty::_vftable_;
    *(_WORD *)(v21 + 28) = 236;
    *(_BYTE *)(v21 + 30) = 0;
  }
  else
  {
    v21 = 0;
  }
  *(_WORD *)(v21 + 28) |= 1u;
  uiWidtha = v3[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr;
  uiHeight = v21;
  InterlockedIncrement((volatile LONG *)(v21 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&uiWidtha[13],
    (NiPointer<NiRoom> *)&uiHeight);
  if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
  ((void (__thiscall *)(NiAVObject *, NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v3,
    v3[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr,
    0);
  if ( IconWin::ms_spClickGeom.m_pObject || IconWin::ms_spOverGeom.m_pObject )
    goto LABEL_49;
  uiHeight = 0;
  v22 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v23 = Folder::Merge(&Folder::m_acMenu, "Game\\ItemPick.nif");
  PgUtil::LoadNodeNifFile(v23, (NiPointer<NiNode> *)&uiHeight, v22);
  if ( uiHeight )
  {
    v24 = (NiD3DDefaultShader *)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)uiHeight + 72))("ItemClick");
    NiPointer<PopupMenuWin>::operator_(&IconWin::ms_spClickGeom, v24);
    v25 = (NiD3DDefaultShader *)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)uiHeight + 72))("ItemOver");
    NiPointer<PopupMenuWin>::operator_(&IconWin::ms_spOverGeom, v25);
    v26 = uiHeight;
    if ( uiHeight && !InterlockedDecrement((volatile LONG *)(uiHeight + 4)) && v26 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v26)(v26, 1);
LABEL_49:
    v27 = v3[1].m_spCollisionObject.m_pObject;
    if ( v27 != (NiCollisionObject *)IconWin::ms_spClickGeom.m_pObject )
    {
      if ( v27 && !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.baseclass_0.m_uiRefCount) && v27 )
        v27->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
      v28 = IconWin::ms_spClickGeom.m_pObject;
      v3[1].m_spCollisionObject.m_pObject = (NiCollisionObject *)IconWin::ms_spClickGeom.m_pObject;
      if ( v28 )
        InterlockedIncrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v29 = *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (NiD3DDefaultShader *)v29 != IconWin::ms_spOverGeom.m_pObject )
    {
      if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) && v29 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v29)(v29, 1);
      v30 = IconWin::ms_spOverGeom.m_pObject;
      *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = IconWin::ms_spOverGeom.m_pObject;
      if ( v30 )
        InterlockedIncrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    if ( !v3[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount && IconWin::ms_spClickGeom.m_pObject )
    {
      v31 = NiObject::Clone((NiObject *)IconWin::ms_spClickGeom.m_pObject);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v3[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
        (NiD3DDefaultShader *)v31);
      ((void (__thiscall *)(NiAVObject *, unsigned int, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v3,
        v3[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
        0);
      *(_WORD *)(v3[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 28) |= 1u;
    }
    if ( !v3[2].baseclass_0.baseclass_0.baseclass_0.vfptr )
    {
      if ( IconWin::ms_spOverGeom.m_pObject )
      {
        v32 = NiObject::Clone((NiObject *)IconWin::ms_spOverGeom.m_pObject);
        NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3[2], (NiD3DDefaultShader *)v32);
        ((void (__thiscall *)(NiAVObject *, NiRefObjectVtbl *, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v3,
          v3[2].baseclass_0.baseclass_0.baseclass_0.vfptr,
          0);
        LOWORD(v3[2].baseclass_0.baseclass_0.baseclass_0.vfptr[7].__vecDelDtor) |= 1u;
      }
    }
    NiAVObject::UpdateProperties(v3);
    NiAVObject::Update(v3, 0.0, 1);
  }
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;

//----- (005BDA40) --------------------------------------------------------
void __thiscall IconWin::CreateGeometry(IconWin *this, NiSourceTexture *pkTexture, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight)
{
  NiAVObject *v5; // esi@1
  __int64 v6; // qax@2
  unsigned int v7; // ST10_4@2
  unsigned int v8; // ST0C_4@2
  unsigned int v9; // ST08_4@2
  unsigned int v10; // eax@2
  NiScreenElementsData *v11; // edi@2
  void *v12; // eax@2
  int v13; // ebx@2
  int v14; // eax@3
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v15; // edi@4
  void *v16; // eax@11
  int v17; // eax@12
  int v18; // ebx@12
  NiTListItem<NiPointer<NiProperty> > *v19; // edi@14
  void *v20; // eax@21
  void *v21; // edi@21

  v5 = (NiAVObject *)this;
  if ( pkTexture )
  {
    v6 = ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture)
       / uiIconWidth;
    v7 = uiIconHeight * __PAIR__(HIDWORD(v6), uiIndex) / (unsigned int)v6;
    v8 = __PAIR__(HIDWORD(v6), uiIndex) % (unsigned int)v6;
    v9 = ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(pkTexture);
    v10 = ((int (__thiscall *)(NiSourceTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture);
    v11 = PgUtil::CreateScreenGeometryData(v10, v9, v8, v7, uiIconWidth, uiIconHeight);
    v12 = operator new(0xC4u);
    v13 = 0;
    if ( v12 )
    {
      NiScreenElements::NiScreenElements((NiScreenElements *)v12, v11);
      v13 = v14;
    }
    v15 = v5[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr;
    if ( v15 != (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)v13 )
    {
      if ( v15 && !InterlockedDecrement((volatile LONG *)&v15->NewItem) && v15 )
        (*(void (__thiscall **)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *, signed int))v15->__vecDelDtor)(
          v15,
          1);
      v5[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)v13;
      if ( v13 )
        InterlockedIncrement((volatile LONG *)(v13 + 4));
    }
    v16 = operator new(0x44u);
    if ( v16 )
    {
      NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v16);
      v18 = v17;
    }
    else
    {
      v18 = 0;
    }
    v19 = v5[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
    if ( v19 != (NiTListItem<NiPointer<NiProperty> > *)v18 )
    {
      if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->m_pkPrev) && v19 )
        ((void (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, signed int))v19->m_pkNext->m_pkNext)(v19, 1);
      v5[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v18;
      if ( v18 )
        InterlockedIncrement((volatile LONG *)(v18 + 4));
    }
    NiTexturingProperty::SetBaseTexture(
      (NiTexturingProperty *)v5[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
      0);
    NiTexturingProperty::SetBaseFilterMode(
      (NiTexturingProperty *)v5[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
      0);
    v5[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead[2].m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)2;
    NiTexturingProperty::SetBaseClampMode(
      (NiTexturingProperty *)v5[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
      0);
    NiAVObject::AttachProperty(
      (NiAVObject *)v5[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr,
      (NiProperty *)v5[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead);
    v20 = operator new(0x20u);
    v21 = v20;
    if ( v20 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v20);
      *(_DWORD *)v21 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v21 + 14) = 236;
      *((_BYTE *)v21 + 30) = 0;
    }
    else
    {
      v21 = 0;
    }
    *((_WORD *)v21 + 14) |= 1u;
    NiAVObject::AttachProperty((NiAVObject *)v5[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr, (NiProperty *)v21);
    ((void (__thiscall *)(NiAVObject *, NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v5,
      v5[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr,
      0);
    NiAVObject::UpdateProperties(v5);
    NiAVObject::Update(v5, 0.0, 1);
  }
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (005BDC60) --------------------------------------------------------
void __thiscall IconWin::IconDisable(IconWin *this, bool b)
{
  NiAVObject *v2; // ebx@1
  NiProperty *v3; // edi@1
  void *v4; // eax@2
  void *v5; // esi@2
  NiProperty *v6; // esi@6
  char *v7; // eax@6
  void *v8; // eax@7
  NiProperty *v9; // eax@8
  double v10; // st7@12
  float v11; // ST14_4@14
  float v12; // ST18_4@14
  float v13; // ST1C_4@14

  v2 = (NiAVObject *)this;
  v3 = NiAVObject::GetProperty(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 9);
  if ( !v3 )
  {
    v4 = operator new(0x28u);
    v5 = v4;
    if ( v4 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v4);
      *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v5 + 14) = 0;
      *((_DWORD *)v5 + 8) = 0;
      *((_DWORD *)v5 + 9) = 1;
    }
    else
    {
      v5 = 0;
    }
    v3 = (NiProperty *)v5;
    NiAVObject::AttachProperty(v2, (NiProperty *)v5);
  }
  v6 = NiAVObject::GetProperty(v2, 3);
  v7 = 0;
  if ( !v6 )
  {
    v8 = operator new(0x60u);
    if ( v8 )
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v8);
    else
      v9 = 0;
    v6 = v9;
    NiAVObject::AttachProperty(v2, v9);
    v7 = 0;
  }
  v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = (unsigned int)v7;
  v3[1].baseclass_0.m_pcName = v7;
  ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  if ( b )
    v10 = 0.40000001;
  else
    v10 = 1.0;
  v11 = v10;
  v12 = v10;
  v6[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(v11);
  v13 = v10;
  v6[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(v12);
  v6[2].baseclass_0.m_uiExtraDataSize = LODWORD(v13);
  NiAVObject::UpdateProperties(v2);
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (005BDD80) --------------------------------------------------------
void __thiscall IconWin::IconDisable(IconWin *this, float fR, float fG, float fB)
{
  NiAVObject *v4; // edi@1
  NiProperty *v5; // ebx@1
  void *v6; // eax@2
  void *v7; // esi@2
  NiProperty *v8; // esi@6
  void *v9; // eax@7
  NiProperty *v10; // eax@8

  v4 = (NiAVObject *)this;
  v5 = NiAVObject::GetProperty(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 9);
  if ( !v5 )
  {
    v6 = operator new(0x28u);
    v7 = v6;
    if ( v6 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v6);
      *(_DWORD *)v7 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v7 + 14) = 0;
      *((_DWORD *)v7 + 8) = 0;
      *((_DWORD *)v7 + 9) = 1;
    }
    else
    {
      v7 = 0;
    }
    v5 = (NiProperty *)v7;
    NiAVObject::AttachProperty(v4, (NiProperty *)v7);
  }
  v8 = NiAVObject::GetProperty(v4, 3);
  if ( !v8 )
  {
    v9 = operator new(0x60u);
    if ( v9 )
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v9);
    else
      v10 = 0;
    v8 = v10;
    NiAVObject::AttachProperty(v4, v10);
  }
  v5[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
  v5[1].baseclass_0.m_pcName = 0;
  ++v8[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  v8[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(fR);
  v8[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(fG);
  v8[2].baseclass_0.m_uiExtraDataSize = LODWORD(fB);
  NiAVObject::UpdateProperties(v4);
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (005BDE90) --------------------------------------------------------
void __thiscall IconWin::CreateGeometry(IconWin *this, unsigned int uiWidth, unsigned int uiHeight, char *pPickFileName)
{
  NiAVObject *v4; // esi@1
  NiScreenElementsData *v5; // edi@1
  void *v6; // eax@1
  int v7; // eax@2
  int v8; // edi@2
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v9; // ebx@4
  void *v10; // eax@11
  int v11; // eax@12
  int v12; // edi@12
  NiTListItem<NiPointer<NiProperty> > *v13; // ebx@14
  NiTListItem<NiPointer<NiProperty> > *v14; // edi@21
  NiNode *v15; // ebx@21
  void *v16; // eax@22
  NiNode *v17; // eax@23
  unsigned int v18; // edi@26
  NiTListItem<NiPointer<NiProperty> > *v19; // ebx@31
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v20; // edi@31
  void *v21; // eax@36
  void *v22; // ebx@36
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v23; // ST74_4@39
  NiCollisionObject *v24; // ebx@41
  NiD3DDefaultShader *v25; // eax@46
  int v26; // ebx@48
  NiD3DDefaultShader *v27; // eax@53
  NiD3DDefaultShader *v28; // eax@60
  unsigned int v29; // eax@60
  int v30; // ST70_4@60
  float v31; // ST74_4@60
  float v32; // ST78_4@60
  NiD3DDefaultShader *v33; // eax@60
  NiRefObjectVtbl *v34; // eax@60
  float v35; // ST68_4@60
  float v36; // ST6C_4@60
  void *(__thiscall *v37)(NiRefObject *, unsigned int); // ST70_4@60
  float v38; // ST78_4@60
  float v39; // ST74_4@60
  NiNode *v40; // edi@61
  unsigned int v41; // [sp+48h] [bp-148h]@1
  NiPointer<NiNode> spNode; // [sp+7Ch] [bp-114h]@25
  char acName[256]; // [sp+80h] [bp-110h]@59
  unsigned int v44; // [sp+180h] [bp-10h]@1
  int v45; // [sp+18Ch] [bp-4h]@1
  int v46; // [sp+190h] [bp+0h]@1

  v44 = (unsigned int)&v46 ^ __security_cookie;
  v41 = (unsigned int)&v46 ^ __security_cookie;
  v4 = (NiAVObject *)this;
  v5 = PgUtil::CreateScreenGeometryData(uiWidth, uiHeight, 0, 0, uiWidth, uiHeight);
  v6 = operator new(0xC4u);
  v45 = 0;
  if ( v6 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v6, v5);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  v9 = v4[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr;
  v45 = -1;
  if ( v9 != (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)v8 )
  {
    if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->NewItem) && v9 )
      (*(void (__thiscall **)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *, signed int))v9->__vecDelDtor)(
        v9,
        1);
    v4[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)(v8 + 4));
  }
  v10 = operator new(0x44u);
  v45 = 1;
  if ( v10 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v10);
    v12 = v11;
  }
  else
  {
    v12 = 0;
  }
  v13 = v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v45 = -1;
  if ( v13 != (NiTListItem<NiPointer<NiProperty> > *)v12 )
  {
    if ( v13 && !InterlockedDecrement((volatile LONG *)&v13->m_pkPrev) && v13 )
      ((void (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, signed int))v13->m_pkNext->m_pkNext)(v13, 1);
    v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v12;
    if ( v12 )
      InterlockedIncrement((volatile LONG *)(v12 + 4));
  }
  v14 = v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v15 = (NiNode *)v14[3].m_pkPrev->m_pkNext;
  if ( !v15 )
  {
    v16 = operator new(0x18u);
    v45 = 2;
    if ( v16 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v16);
    else
      v17 = 0;
    v15 = v17;
    v45 = -1;
    spNode.m_pObject = v17;
    NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)&v14[3], 0, (NiVBChip *const *)&spNode);
  }
  v18 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  if ( v18 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
  }
  NiTexturingProperty::SetBaseFilterMode(
    (NiTexturingProperty *)v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
    0);
  v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead[2].m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)2;
  NiTexturingProperty::SetBaseClampMode(
    (NiTexturingProperty *)v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
    0);
  v19 = v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v20 = v4[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr;
  spNode.m_pObject = (NiNode *)v19;
  if ( v19 )
    InterlockedIncrement((volatile LONG *)&v19->m_pkPrev);
  v45 = 3;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v20[13],
    (NiPointer<NiRoom> *)&spNode);
  v45 = -1;
  if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->m_pkPrev) )
    ((void (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, signed int))v19->m_pkNext->m_pkNext)(v19, 1);
  v21 = operator new(0x20u);
  v22 = v21;
  v45 = 4;
  if ( v21 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v21);
    *(_DWORD *)v22 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v22 + 14) = 236;
    *((_BYTE *)v22 + 30) = 0;
  }
  else
  {
    v22 = 0;
  }
  *((_WORD *)v22 + 14) |= 1u;
  v23 = v4[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr;
  spNode.m_pObject = (NiNode *)v22;
  InterlockedIncrement((volatile LONG *)v22 + 1);
  v45 = 5;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v23[13],
    (NiPointer<NiRoom> *)&spNode);
  v45 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v22 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v22)(v22, 1);
  ((void (__thiscall *)(NiAVObject *, NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *, _DWORD, unsigned int))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v4,
    v4[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr,
    0,
    v41);
  v24 = v4[1].m_spCollisionObject.m_pObject;
  if ( v24 != (NiCollisionObject *)IconWin::ms_spClickGeom.m_pObject )
  {
    if ( v24 && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.m_uiRefCount) && v24 )
      v24->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
    v25 = IconWin::ms_spClickGeom.m_pObject;
    v4[1].m_spCollisionObject.m_pObject = (NiCollisionObject *)IconWin::ms_spClickGeom.m_pObject;
    if ( v25 )
      InterlockedIncrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v26 = *(_DWORD *)&v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( (NiD3DDefaultShader *)v26 != IconWin::ms_spOverGeom.m_pObject )
  {
    if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v26)(v26, 1);
    v27 = IconWin::ms_spOverGeom.m_pObject;
    *(_DWORD *)&v4[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = IconWin::ms_spOverGeom.m_pObject;
    if ( v27 )
      InterlockedIncrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v4[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount || v4[2].baseclass_0.baseclass_0.baseclass_0.vfptr )
    goto LABEL_64;
  spNode.m_pObject = 0;
  v45 = 6;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acName, "%sGame\\%s.nif");
  PgUtil::LoadNodeNifFile(acName, &spNode, dword_B70448);
  if ( spNode.m_pObject )
  {
    sprintf(acName, "%sClick");
    v28 = (NiD3DDefaultShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(acName);
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v4[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
      v28);
    ((void (__thiscall *)(NiAVObject *, unsigned int, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v4,
      v4[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
      0);
    *(_WORD *)(v4[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 28) |= 1u;
    v29 = v4[2].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    v30 = *(_DWORD *)(v29 + 96);
    v31 = *(float *)(v29 + 88) - 2.0;
    v32 = *(float *)(v29 + 92) - 2.0;
    *(_DWORD *)(v29 + 88) = LODWORD(v31);
    *(_DWORD *)(v29 + 92) = LODWORD(v32);
    *(_DWORD *)(v29 + 96) = v30;
    sprintf(acName, "%sOver");
    v33 = (NiD3DDefaultShader *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(acName);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v4[2], v33);
    ((void (__thiscall *)(NiAVObject *, NiRefObjectVtbl *, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v4,
      v4[2].baseclass_0.baseclass_0.baseclass_0.vfptr,
      0);
    LOWORD(v4[2].baseclass_0.baseclass_0.baseclass_0.vfptr[7].__vecDelDtor) |= 1u;
    v34 = v4[2].baseclass_0.baseclass_0.baseclass_0.vfptr;
    LODWORD(v35) = v34[22].__vecDelDtor;
    LODWORD(v36) = v34[23].__vecDelDtor;
    v37 = v34[24].__vecDelDtor;
    v45 = -1;
    v38 = v35 - 2.0;
    v39 = v36 - 2.0;
    v34[22].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v38);
    v34[23].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))LODWORD(v39);
    v34[24].__vecDelDtor = v37;
    if ( spNode.m_pObject )
    {
      v40 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v40 )
          v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v40, 1u);
      }
    }
LABEL_64:
    NiAVObject::UpdateProperties(v4);
    NiAVObject::Update(v4, 0.0, 1);
  }
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005BE490) --------------------------------------------------------
IconWin *__cdecl IconWin::CreateWin(int iXPos, int iYPos, int iWidth, int iHeight, PgWin *pkParent)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  IconWin *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x17Cu);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    IconWin::IconWin((IconWin *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, int, int, PgWin *, _DWORD, _DWORD))(*(_DWORD *)v7 + 572))(
                          v7,
                          iXPos,
                          iYPos,
                          iWidth,
                          iHeight,
                          pkParent,
                          0,
                          0) )
  {
    (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v7 + 596))(v7, iWidth, iHeight);
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (IconWin *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (005BE5E0) --------------------------------------------------------
void __cdecl IconWin::ClearRegisteredCoolTime()
{
  unsigned int *v0; // edi@1

  v0 = *(unsigned int **)&IconWin::ms_kCoolTimeIconList;
  if ( *(unsigned int **)&IconWin::ms_kCoolTimeIconList != IconWin::ms_kCoolTimeIconList.baseclass_0._Mylast )
  {
    memmove(*(char **)&IconWin::ms_kCoolTimeIconList, (char *)IconWin::ms_kCoolTimeIconList.baseclass_0._Mylast, 0);
    IconWin::ms_kCoolTimeIconList.baseclass_0._Mylast = v0;
  }
}

//----- (005BE620) --------------------------------------------------------
void *__thiscall IconWin::_scalar_deleting_destructor_(IconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  IconWin::_IconWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005BE660) --------------------------------------------------------
void __thiscall ItemIcon::ShowLotText(ItemIcon *this, bool b)
{
  ItemIcon *v2; // esi@1
  PgWinText *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkLotText;
  if ( v3 )
  {
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
    v2->m_bShowLotText = b;
  }
}

//----- (005BE690) --------------------------------------------------------
void __thiscall ItemIcon::ProcessMeInput(ItemIcon *this, bool *bHit)
{
  if ( this->m_bInputProcess )
    IconWin::ProcessMeInput(&this->baseclass_0, bHit);
}

//----- (005BE6B0) --------------------------------------------------------
Item *__thiscall ItemIcon::GetItem(ItemIcon *this)
{
  return this->m_spItem.m_pObject;
}

//----- (005BE6C0) --------------------------------------------------------
char *__cdecl GetAmountString(Item *pkItem)
{
  char *result; // eax@2

  if ( pkItem )
    result = fs("%d%%");
  else
    result = (char *)&unk_9B4E30;
  return result;
}

//----- (005BE740) --------------------------------------------------------
void __thiscall ItemIcon::Show(ItemIcon *this, bool b)
{
  ItemIcon *v2; // esi@1
  NiScreenElements *v3; // eax@5

  v2 = this;
  IconWin::Show(&this->baseclass_0, b);
  if ( v2->m_pkLotText && v2->m_bShowLotText )
    ((void (__stdcall *)(_DWORD))v2->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  if ( v2->m_bShowSubIcon )
  {
    v3 = v2->m_spSubImagePlane.m_pObject;
    if ( b )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  DecoPlaneTex::Show(&v2->m_kTermDeco, b);
  DecoPlaneColor::Show(&v2->m_kGradeDeco, b);
}

//----- (005BE7C0) --------------------------------------------------------
bool __thiscall ItemIcon::CheckQuestDoing(ItemIcon *this, unsigned __int16 kId)
{
  CQuest *v2; // eax@1
  CQuest *v3; // ebx@1
  CQuestData *v4; // edi@2
  unsigned int v5; // esi@2
  QUEST_DATA *v6; // eax@3
  PLAYER_QUEST_STATUS v7; // eax@7
  bool result; // al@10

  v2 = QuestDataMgr::GetQuest();
  v3 = v2;
  if ( v2 && (v4 = v2->m_pQuestData, v5 = 0, CQuestData::GetNumOfQuestData(v2->m_pQuestData) > 0u) )
  {
    while ( 1 )
    {
      v6 = CQuestData::GetQuestDataByIndex(v4, v5);
      if ( v6 )
      {
        if ( v6->Start.bItem )
        {
          if ( !v6->Start.bNPC )
          {
            if ( v6->Start.ItemID == kId )
            {
              v7 = CQuest::GetNewQuestStatus(v3, v6->ID);
              if ( v7 == 6 )
                break;
              if ( v7 == 8 )
                break;
            }
          }
        }
      }
      ++v5;
      if ( (signed int)v5 >= CQuestData::GetNumOfQuestData(v4) )
        goto LABEL_10;
    }
    result = 1;
  }
  else
  {
LABEL_10:
    result = 0;
  }
  return result;
}

//----- (005BE840) --------------------------------------------------------
unsigned __int16 __thiscall ItemIcon::GetItemID(ItemIcon *this)
{
  Item *v1; // eax@1
  unsigned __int16 result; // ax@2

  v1 = this->m_spItem.m_pObject;
  if ( v1 )
    result = v1->m_kStruct.itemid;
  else
    result = -1;
  return result;
}

//----- (005BE860) --------------------------------------------------------
void __thiscall ItemIcon::OnFirstHitWin(ItemIcon *this)
{
  ItemIcon *v1; // esi@1
  PgWin *v2; // ecx@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
  if ( v2 )
  {
    if ( v1->m_spItem.m_pObject )
    {
      ItemInfoWin::SetItemInfo((ItemInfoWin *)v2, v1->m_spItem.m_pObject);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (005BE890) --------------------------------------------------------
void __thiscall ItemIcon::_ItemIcon(ItemIcon *this)
{
  ItemIcon *v1; // edi@1
  Item *v2; // esi@1
  NiScreenElements *v3; // esi@6
  NiScreenElements *v4; // esi@10
  int v5; // ebx@14
  NiTexturingProperty *v6; // esi@14
  int v7; // esi@18
  NiScreenElements *v8; // esi@22
  NiScreenElements *v9; // esi@26
  NiTexturingProperty *v10; // esi@30
  NiScreenElements *v11; // esi@34
  Item *v12; // esi@38

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemIcon::_vftable_;
  v2 = this->m_spItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spItem.m_pObject = 0;
  }
  v1->m_bgray = 0;
  v3 = v1->m_spTopPlane.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_spBackPlane.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = (int)&v1->m_kTermDeco;
  v6 = v1->m_kTermDeco.m_spDecoTexProp.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = *(_DWORD *)v5;
  if ( *(_DWORD *)v5 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  v8 = v1->m_kGradeDeco.m_spSubPlane.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  v9 = v1->m_kGradeDeco.m_spDecoPlane.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  v10 = v1->m_spSubImageTexProp.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_spSubImagePlane.m_pObject;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v11,
      1u);
  v12 = v1->m_spItem.m_pObject;
  if ( v12 && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.m_uiRefCount) && v12 )
    v12->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  IconWin::_IconWin(&v1->baseclass_0);
}
// 9B4E78: using guessed type int (__stdcall *ItemIcon___vftable_)(int uiFlags);
// 9B4E94: using guessed type int (__thiscall *ItemIcon___vftable_)(void *p, char);

//----- (005BEAA0) --------------------------------------------------------
bool __thiscall ItemIcon::Create(ItemIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  ItemIcon *v4; // esi@1
  bool result; // al@1
  PgFont *v6; // eax@2
  PgWinText *v7; // eax@2

  v4 = this;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    v6 = Font::Get(0);
    v7 = PgWinText::CreateWin(
           18,
           20,
           0xEu,
           0xCu,
           v6,
           &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
    v4->m_pkLotText = v7;
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v7,
      2u);
    SpScreenText::SetShadowOffset(&v4->m_pkLotText->m_spTextGeom.m_pObject->baseclass_0, 1u);
    ((void (__stdcall *)(_DWORD))v4->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    result = 1;
  }
  return result;
}

//----- (005BEB30) --------------------------------------------------------
void __thiscall ItemIcon::SetSubIconImage(ItemIcon *this, char *pcFn, unsigned int uiIndex, unsigned int uiIconWidth, unsigned int uiIconHeight)
{
  ItemIcon *v5; // esi@1
  NiTexture *v6; // eax@6
  NiTexture *v7; // edi@6
  unsigned int v8; // eax@10
  unsigned int v9; // ST14_4@10
  unsigned int v10; // ST10_4@10
  unsigned int v11; // ST0C_4@10
  unsigned int v12; // eax@10
  NiScreenElements *pcFna; // [sp+1Ch] [bp+8h]@10

  v5 = this;
  if ( pcFn && *pcFn != 45 )
  {
    if ( uiIndex == -1 )
    {
      this->m_bShowSubIcon = 0;
      this->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      v6 = (NiTexture *)IconMgr::GetTexture(pcFn);
      v7 = v6;
      if ( v6 )
      {
        NiTexturingProperty::SetBaseTexture(v5->m_spSubImageTexProp.m_pObject, v6);
        v5->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
        v5->m_bShowSubIcon = 1;
        if ( uiIndex != v5->m_uiSubIconIndex )
        {
          if ( v5->m_spSubImageTexProp.m_pObject )
          {
            v8 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v7);
            pcFna = v5->m_spSubImagePlane.m_pObject;
            v9 = uiIconHeight * uiIndex / (v8 / uiIconWidth);
            v10 = uiIconWidth * uiIndex % (v8 / uiIconWidth);
            v11 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v7);
            v12 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v7);
            PgUtil::SetTextureCoord(pcFna, 0, v12, v11, v10, v9, uiIconWidth, uiIconHeight);
            NiAVObject::Update(
              &v5->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              0.0,
              1);
            v5->m_uiSubIconIndex = uiIndex;
          }
        }
      }
      else
      {
        v5->m_bShowSubIcon = 0;
        v5->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      }
    }
  }
  else
  {
    this->m_bShowSubIcon = 0;
    this->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (005BEC50) --------------------------------------------------------
void __thiscall ItemIcon::SetBackPlaneColor(ItemIcon *this, float rad, float green, float blue, float alpha)
{
  ItemIcon *v5; // esi@1
  NiScreenElements *v6; // eax@1
  NiColorA kCommonValue; // [sp+Ch] [bp-10h]@2

  v5 = this;
  v6 = this->m_spBackPlane.m_pObject;
  if ( v6 )
  {
    kCommonValue.r = rad / 255.0;
    kCommonValue.g = green / 255.0;
    kCommonValue.b = blue / 255.0;
    kCommonValue.a = alpha / 255.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    NiAVObject::UpdateProperties(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  }
}

//----- (005BECF0) --------------------------------------------------------
void __thiscall ItemIcon::SetTopPlaneColor(ItemIcon *this, float rad, float green, float blue, float alpha)
{
  ItemIcon *v5; // esi@1
  NiScreenElements *v6; // eax@1
  NiColorA kCommonValue; // [sp+Ch] [bp-10h]@2

  v5 = this;
  v6 = this->m_spTopPlane.m_pObject;
  if ( v6 )
  {
    kCommonValue.r = rad / 255.0;
    kCommonValue.g = green / 255.0;
    kCommonValue.b = blue / 255.0;
    kCommonValue.a = alpha / 255.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  }
}

//----- (005BED70) --------------------------------------------------------
void __thiscall ItemIcon::DoingQuest(ItemIcon *this)
{
  this->m_bShowSubIcon = 0;
  this->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (005BED90) --------------------------------------------------------
void __thiscall ItemIcon::GiveUpQuest(ItemIcon *this)
{
  ItemIcon::SetSubIconImage(this, "VarItem000", 0x39u, 0x20u, 0x20u);
}

//----- (005BEDB0) --------------------------------------------------------
void __thiscall ItemIcon::SetItem(ItemIcon *this, Item *pkItem, bool bEnable)
{
  ItemIcon *v3; // esi@1
  ItemViewInfo *v4; // edi@2
  NiRefObjectVtbl *v5; // ebx@3
  unsigned int v6; // ST0C_4@3
  NiSourceTexture *v7; // eax@3
  int v8; // ebx@3
  int v9; // eax@5
  int v10; // eax@6
  NiScreenElements *v11; // eax@9
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@13
  PgWinText *v13; // ecx@14
  NiRefObjectVtbl *v14; // ebx@16
  char *v15; // eax@16
  PgWinText *v16; // eax@19
  NiRefObjectVtbl *v17; // edi@21
  char *v18; // eax@21
  PgWinText *v19; // ecx@22
  NiScreenElements *v20; // eax@25
  Item *v21; // edi@30
  char *v22; // [sp-10h] [bp-20h]@10
  unsigned int v23; // [sp-Ch] [bp-1Ch]@10
  unsigned int v24; // [sp-8h] [bp-18h]@10
  unsigned int v25; // [sp-4h] [bp-14h]@10
  _UNKNOWN *v26; // [sp-4h] [bp-14h]@24
  int v27; // [sp+0h] [bp-10h]@0
  signed int v28; // [sp+0h] [bp-10h]@21
  unsigned __int16 v29; // [sp+Ch] [bp-4h]@3

  v3 = this;
  if ( !pkItem )
  {
    DecoPlaneColor::SetColor(&this->m_kGradeDeco, 0, 0, 0, 0, 0, 0);
    ((void (__thiscall *)(ItemIcon *, _DWORD, signed int, signed int, signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v3,
      0,
      -1,
      32,
      32);
    v20 = v3->m_spSubImagePlane.m_pObject;
    v3->m_bShowSubIcon = 0;
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    DecoPlaneTex::SetImage(&v3->m_kTermDeco, 0, 0xFFFFFFFFu);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v3,
      0);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v3,
      0);
    v19 = v3->m_pkLotText;
    if ( !v19 || !v3->m_bShowLotText )
      goto LABEL_30;
    v26 = &unk_9B4E39;
    goto LABEL_28;
  }
  v4 = pkItem->m_pkViewInfo;
  if ( !v4 )
    return;
  DecoPlaneColor::SetColor(
    &this->m_kGradeDeco,
    LOBYTE(v4->R),
    LOBYTE(v4->G),
    LOBYTE(v4->B),
    LOBYTE(v4->SUB_R),
    LOBYTE(v4->SUB_G),
    LOBYTE(v4->SUB_B));
  v5 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = v4->IconIndex;
  v7 = IconMgr::GetTexture(v4->IconFile);
  ((void (__thiscall *)(ItemIcon *, NiSourceTexture *, unsigned int, signed int, signed int))v5[146].__vecDelDtor)(
    v3,
    v7,
    v6,
    32,
    32);
  v8 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v29 = pkItem->m_kStruct.itemid;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          pkItem->m_kStruct.itemid) )
  {
    if ( v29 <= *(_WORD *)(v8 + 200) )
    {
      v9 = *(_DWORD *)(v8 + 196) + 4 * v29;
      if ( *(_DWORD *)v9 )
      {
        v10 = *(_DWORD *)v9;
        if ( v10 )
        {
          if ( *(_DWORD *)(v10 + 98) == 4 )
          {
            if ( ItemIcon::CheckQuestDoing(v3, *(_WORD *)v10) )
            {
              v11 = v3->m_spSubImagePlane.m_pObject;
              v3->m_bShowSubIcon = 0;
              v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              goto LABEL_13;
            }
            v25 = 32;
            v24 = 32;
            v23 = 57;
            v22 = "VarItem000";
          }
          else
          {
            v25 = 32;
            v24 = 32;
            v23 = v4->SubIconIndex;
            v22 = v4->SubIconFile;
          }
          ItemIcon::SetSubIconImage(v3, v22, v23, v24, v25);
        }
      }
    }
  }
LABEL_13:
  DecoPlaneTex::SetImage(&v3->m_kTermDeco, v4->PeriodIconFile, v4->PeriodIconIndex);
  v12 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  v12(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    1u);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v3,
    1u);
  v3->m_bInputProcess = bEnable;
  if ( (unsigned __int8)((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[1].__vecDelDtor)(pkItem) != 24 )
  {
    if ( (unsigned int)((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[4].__vecDelDtor)(pkItem) > 1 )
    {
      v16 = v3->m_pkLotText;
      if ( !v16 || !v3->m_bShowLotText )
        goto LABEL_30;
      v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      ((void (__stdcall *)(int))pkItem->baseclass_0.vfptr[3].__vecDelDtor)(v27);
      v18 = fs("%d");
      v17[118].__vecDelDtor((NiRefObject *)v3->m_pkLotText, (unsigned int)v18);
      v28 = 1;
LABEL_29:
      ((void (__cdecl *)(signed int))v3->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v28);
      goto LABEL_30;
    }
    v19 = v3->m_pkLotText;
    if ( !v19 || !v3->m_bShowLotText )
      goto LABEL_30;
    v26 = &unk_9B4E33;
LABEL_28:
    ((void (__stdcall *)(_UNKNOWN *, int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
      v26,
      v27);
    v28 = 0;
    goto LABEL_29;
  }
  v13 = v3->m_pkLotText;
  if ( v13 && v3->m_bShowLotText )
  {
    v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v15 = GetAmountString(pkItem);
    v14[118].__vecDelDtor((NiRefObject *)v3->m_pkLotText, (unsigned int)v15);
    ((void (__stdcall *)(signed int))v3->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
  else
  {
    ((void (__stdcall *)(_UNKNOWN *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B4E32);
    ((void (__stdcall *)(_DWORD))v3->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
LABEL_30:
  v21 = v3->m_spItem.m_pObject;
  if ( v21 != pkItem )
  {
    if ( v21 && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.m_uiRefCount) && v21 )
      v21->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    v3->m_spItem.m_pObject = pkItem;
    if ( pkItem )
      InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (005BF0E0) --------------------------------------------------------
void __thiscall ItemIcon::SetItemAsID(ItemIcon *this, unsigned __int16 itemID)
{
  int v2; // edi@0
  ItemIcon *v3; // esi@1
  int v4; // ST14_4@2
  int v5; // edi@2
  int v6; // edi@3
  int v7; // edx@6
  NiRefObjectVtbl *v8; // ebx@9
  int v9; // ST0C_4@9
  NiSourceTexture *v10; // eax@9
  int v11; // ebx@9
  int v12; // eax@11
  int v13; // eax@12
  NiScreenElements *v14; // eax@15
  NiScreenElements *v15; // eax@20
  PgWinText *v16; // ecx@21
  char *v17; // [sp-10h] [bp-18h]@16
  unsigned int v18; // [sp-Ch] [bp-14h]@16
  unsigned int v19; // [sp-8h] [bp-10h]@16
  unsigned int v20; // [sp-4h] [bp-Ch]@16

  v3 = this;
  if ( itemID != -1 )
  {
    v4 = v2;
    v5 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, int))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                                  + 16))(
                            ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                            itemID,
                            v4) )
    {
      if ( itemID <= *(_WORD *)(v5 + 200) )
      {
        v7 = *(_DWORD *)(v5 + 196);
        if ( *(_DWORD *)(v7 + 4 * itemID) )
          v6 = *(_DWORD *)(v7 + 4 * itemID);
        else
          v6 = 0;
      }
      else
      {
        v6 = 0;
      }
    }
    else
    {
      v6 = 0;
    }
    DecoPlaneColor::SetColor(
      &v3->m_kGradeDeco,
      *(_BYTE *)(v6 + 142),
      *(_BYTE *)(v6 + 146),
      *(_BYTE *)(v6 + 150),
      *(_BYTE *)(v6 + 154),
      *(_BYTE *)(v6 + 158),
      *(_BYTE *)(v6 + 162));
    v8 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v9 = *(_DWORD *)(v6 + 34);
    v10 = IconMgr::GetTexture((char *)(v6 + 38));
    ((void (__thiscall *)(ItemIcon *, NiSourceTexture *, int, signed int, signed int))v8[146].__vecDelDtor)(
      v3,
      v10,
      v9,
      32,
      32);
    v11 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                              + 16))(
                             ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                             itemID)
      || itemID > *(_WORD *)(v11 + 200)
      || (v12 = *(_DWORD *)(v11 + 196) + 4 * itemID, !*(_DWORD *)v12)
      || (v13 = *(_DWORD *)v12) == 0 )
      goto LABEL_19;
    if ( *(_DWORD *)(v13 + 98) == 4 )
    {
      if ( ItemIcon::CheckQuestDoing(v3, *(_WORD *)v13) )
      {
        v14 = v3->m_spSubImagePlane.m_pObject;
        v3->m_bShowSubIcon = 0;
        v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
LABEL_19:
        DecoPlaneTex::SetImage(&v3->m_kTermDeco, (char *)(v6 + 110), *(_DWORD *)(v6 + 106));
        ((void (__thiscall *)(ItemIcon *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3);
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v3,
          1u);
        goto LABEL_21;
      }
      v20 = 32;
      v19 = 32;
      v18 = 57;
      v17 = "VarItem000";
    }
    else
    {
      v20 = 32;
      v19 = 32;
      v18 = *(_DWORD *)(v6 + 70);
      v17 = (char *)(v6 + 74);
    }
    ItemIcon::SetSubIconImage(v3, v17, v18, v19, v20);
    goto LABEL_19;
  }
  DecoPlaneColor::SetColor(&this->m_kGradeDeco, 0, 0, 0, 0, 0, 0);
  ((void (__thiscall *)(ItemIcon *, _DWORD, signed int, signed int, signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
    v3,
    0,
    -1,
    32,
    32);
  v15 = v3->m_spSubImagePlane.m_pObject;
  v3->m_bShowSubIcon = 0;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  DecoPlaneTex::SetImage(&v3->m_kTermDeco, 0, 0xFFFFFFFFu);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v3,
    0);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v3,
    0);
LABEL_21:
  v16 = v3->m_pkLotText;
  if ( v16 )
  {
    if ( v3->m_bShowLotText )
    {
      ((void (__stdcall *)(_UNKNOWN *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B4E3A);
      v3->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v3->m_pkLotText,
        0);
    }
  }
}
// 5BF0E0: could not find valid save-restore pair for edi
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (005BF2F0) --------------------------------------------------------
void __thiscall ItemIcon::SetChargedItem(ItemIcon *this, unsigned int dwShopItemID)
{
  ItemIcon *v2; // esi@1
  PgWinText *v3; // ecx@1
  ItemShopView *v4; // eax@5
  ItemShopView *v5; // edi@5
  NiRefObjectVtbl *v6; // ebx@6
  unsigned int v7; // ST0C_4@6
  NiSourceTexture *v8; // eax@6
  NiScreenElements *v9; // eax@7

  v2 = this;
  v3 = this->m_pkLotText;
  if ( v3 && v2->m_bShowLotText )
  {
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B4E3B);
    ((void (__stdcall *)(_DWORD))v2->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  if ( dwShopItemID != -1 && (v4 = ItemShopViewTable::GetByShopID(dwShopItemID), (v5 = v4) != 0) )
  {
    DecoPlaneColor::SetColor(&v2->m_kGradeDeco, LOBYTE(v4->R), LOBYTE(v4->G), LOBYTE(v4->B), 0, 0, 0);
    v6 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = v5->IconIndex;
    v8 = IconMgr::GetTexture(v5->IconFile);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v6[146].__vecDelDtor)(v2, v8, v7, 32, 32);
    ItemIcon::SetSubIconImage(v2, v5->SubIconFile, v5->SubIconIndex, 0x20u, 0x20u);
    DecoPlaneTex::SetImage(&v2->m_kTermDeco, v5->PeriodIconFile, v5->PeriodIconIndex);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      1u);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  }
  else
  {
    DecoPlaneColor::SetColor(&v2->m_kGradeDeco, 0, 0, 0, 0, 0, 0);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v2,
      0,
      -1,
      32,
      32);
    v9 = v2->m_spSubImagePlane.m_pObject;
    v2->m_bShowSubIcon = 0;
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    DecoPlaneTex::SetImage(&v2->m_kTermDeco, 0, 0xFFFFFFFFu);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2,
      0);
  }
}

//----- (005BF460) --------------------------------------------------------
void __thiscall ItemIcon::SetItemSellInfo(ItemIcon *this, PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *pkItemSellInfo)
{
  int v2; // ebx@0
  int v3; // edi@0
  ItemIcon *v4; // esi@1
  int v5; // eax@2
  int v6; // edi@3
  int v7; // ebx@3
  int v8; // eax@5
  int v9; // edi@6
  NiRefObjectVtbl *v10; // ebx@7
  int v11; // ST0C_4@7
  NiSourceTexture *v12; // eax@7
  ItemInfo *v13; // eax@7
  NiScreenElements *v14; // eax@10
  unsigned int v15; // eax@14
  PgWinText *v16; // ecx@14
  NiRefObjectVtbl *v17; // edi@17
  char *v18; // eax@17
  NiScreenElements *v19; // eax@22
  PgWinText *v20; // ecx@22
  char *v21; // [sp-10h] [bp-14h]@11
  unsigned int v22; // [sp-Ch] [bp-10h]@11
  int v23; // [sp-8h] [bp-Ch]@3
  unsigned int v24; // [sp-8h] [bp-Ch]@11
  int v25; // [sp-4h] [bp-8h]@3
  unsigned int v26; // [sp-4h] [bp-8h]@11

  v4 = this;
  if ( pkItemSellInfo )
  {
    v5 = pkItemSellInfo->item;
    if ( (_WORD)v5 != -1 )
    {
      v25 = v2;
      v23 = v3;
      v6 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
      v7 = pkItemSellInfo->item;
      if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                             + 16))(
                               ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                               v5)
        || (unsigned __int16)v7 > *(_WORD *)(v6 + 200)
        || (v8 = *(_DWORD *)(v6 + 196) + 4 * v7, !*(_DWORD *)v8)
        || (v9 = *(_DWORD *)v8) == 0 )
        return;
      DecoPlaneColor::SetColor(
        &v4->m_kGradeDeco,
        *(_BYTE *)(v9 + 142),
        *(_BYTE *)(v9 + 146),
        *(_BYTE *)(v9 + 150),
        *(_BYTE *)(v9 + 154),
        *(_BYTE *)(v9 + 158),
        *(_BYTE *)(v9 + 162));
      v10 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = *(_DWORD *)(v9 + 34);
      v12 = IconMgr::GetTexture((char *)(v9 + 38));
      ((void (__thiscall *)(ItemIcon *, NiSourceTexture *, int, signed int, signed int, int, int))v10[146].__vecDelDtor)(
        v4,
        v12,
        v11,
        32,
        32,
        v23,
        v25);
      v13 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(pkItemSellInfo->item);
      if ( !v13 )
        goto LABEL_14;
      if ( v13->Type == 4 )
      {
        if ( ItemIcon::CheckQuestDoing(v4, v13->ID) )
        {
          v14 = v4->m_spSubImagePlane.m_pObject;
          v4->m_bShowSubIcon = 0;
          v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
          goto LABEL_14;
        }
        v26 = 32;
        v24 = 32;
        v22 = 57;
        v21 = "VarItem000";
      }
      else
      {
        v26 = 32;
        v24 = 32;
        v22 = *(_DWORD *)(v9 + 70);
        v21 = (char *)(v9 + 74);
      }
      ItemIcon::SetSubIconImage(v4, v21, v22, v24, v26);
LABEL_14:
      DecoPlaneTex::SetImage(&v4->m_kTermDeco, (char *)(v9 + 110), *(_DWORD *)(v9 + 106));
      ((void (__thiscall *)(ItemIcon *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4);
      ((void (__thiscall *)(ItemIcon *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v4);
      v15 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(pkItemSellInfo->item)->MaxLot;
      v16 = v4->m_pkLotText;
      if ( v15 <= 1 )
      {
        if ( v16 && v4->m_bShowLotText )
        {
          ((void (__stdcall *)(_UNKNOWN *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B4E47);
          v4->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v4->m_pkLotText,
            0);
        }
      }
      else
      {
        if ( v16 )
        {
          if ( v4->m_bShowLotText )
          {
            v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v18 = fs("%d");
            v17[118].__vecDelDtor((NiRefObject *)v4->m_pkLotText, (unsigned int)v18);
            ((void (__stdcall *)(signed int))v4->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          }
        }
      }
      return;
    }
  }
  DecoPlaneColor::SetColor(&this->m_kGradeDeco, 0, 0, 0, 0, 0, 0);
  ((void (__thiscall *)(ItemIcon *, _DWORD, signed int, signed int, signed int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
    v4,
    0,
    -1,
    32,
    32);
  v19 = v4->m_spSubImagePlane.m_pObject;
  v4->m_bShowSubIcon = 0;
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  DecoPlaneTex::SetImage(&v4->m_kTermDeco, 0, 0xFFFFFFFFu);
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v4,
    0);
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v4,
    0);
  v20 = v4->m_pkLotText;
  if ( v20 && v4->m_bShowLotText )
  {
    ((void (__stdcall *)(_UNKNOWN *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B4E4B);
    v4->m_pkLotText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v4->m_pkLotText,
      0);
  }
}
// 5BF460: could not find valid save-restore pair for ebx
// 5BF460: could not find valid save-restore pair for edi
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (005BF700) --------------------------------------------------------
void __thiscall ItemIcon::CreateSubImagePlane(ItemIcon *this, unsigned int uiWidth, unsigned int uiHeight)
{
  NiAVObject *v3; // esi@1
  float v4; // ebx@1
  NiScreenElementsData *v5; // edi@1
  void *v6; // eax@1
  float v7; // eax@2
  float v8; // edi@3
  void *v9; // eax@10
  float v10; // eax@11
  float v11; // ebx@11
  float v12; // edi@13
  float v13; // ebx@20
  unsigned int v14; // edi@20
  void *v15; // eax@21
  unsigned int v16; // eax@22
  int v17; // ebx@25
  unsigned int v18; // edi@30
  float v19; // ebx@30
  void *v20; // eax@35
  unsigned int v21; // edi@35
  float uiWidtha; // [sp+14h] [bp+8h]@38

  v3 = (NiAVObject *)this;
  LODWORD(v4) = 0;
  v5 = PgUtil::CreateScreenGeometryData(uiWidth, uiHeight, 0, 0, uiWidth, uiHeight);
  v6 = operator new(0xC4u);
  uiHeight = (unsigned int)v6;
  if ( v6 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v6, v5);
    v4 = v7;
  }
  v8 = v3[2].m_kWorldBound.m_kCenter.z;
  if ( LODWORD(v8) != LODWORD(v4) )
  {
    if ( LODWORD(v8) && !InterlockedDecrement((volatile LONG *)(LODWORD(v8) + 4)) && LODWORD(v8) )
      (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v8))(LODWORD(v8), 1);
    v3[2].m_kWorldBound.m_kCenter.z = v4;
    if ( LODWORD(v4) )
      InterlockedIncrement((volatile LONG *)(LODWORD(v4) + 4));
  }
  v9 = operator new(0x44u);
  uiHeight = (unsigned int)v9;
  if ( v9 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v9);
    v11 = v10;
  }
  else
  {
    LODWORD(v11) = 0;
  }
  v12 = v3[2].m_kWorldBound.m_fRadius;
  if ( LODWORD(v12) != LODWORD(v11) )
  {
    if ( LODWORD(v12) && !InterlockedDecrement((volatile LONG *)(LODWORD(v12) + 4)) && LODWORD(v12) )
      (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v12))(LODWORD(v12), 1);
    v3[2].m_kWorldBound.m_fRadius = v11;
    if ( LODWORD(v11) )
      InterlockedIncrement((volatile LONG *)(LODWORD(v11) + 4));
  }
  v13 = v3[2].m_kWorldBound.m_fRadius;
  v14 = **(_DWORD **)(LODWORD(v13) + 40);
  if ( !v14 )
  {
    v15 = operator new(0x18u);
    uiHeight = (unsigned int)v15;
    if ( v15 )
      NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v15);
    else
      v16 = 0;
    v14 = v16;
    uiHeight = v16;
    NiTArray<NiCollisionGroup::Record__>::SetAt(
      (NiTArray<NiVBChip *> *)(LODWORD(v13) + 36),
      0,
      (NiVBChip *const *)&uiHeight);
  }
  v17 = *(_DWORD *)(v14 + 4);
  if ( v17 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v17)(v17, 1);
    *(_DWORD *)(v14 + 4) = 0;
  }
  NiTexturingProperty::SetBaseFilterMode(LODWORD(v3[2].m_kWorldBound.m_fRadius), 0);
  *(_DWORD *)(LODWORD(v3[2].m_kWorldBound.m_fRadius) + 28) = 2;
  NiTexturingProperty::SetBaseClampMode(LODWORD(v3[2].m_kWorldBound.m_fRadius), 0);
  v18 = LODWORD(v3[2].m_kWorldBound.m_fRadius);
  v19 = v3[2].m_kWorldBound.m_kCenter.z;
  uiHeight = v18;
  if ( v18 )
    InterlockedIncrement((volatile LONG *)(v18 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(v19) + 156),
    (NiPointer<NiRoom> *)&uiHeight);
  if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  v20 = operator new(0x20u);
  v21 = (unsigned int)v20;
  uiHeight = (unsigned int)v20;
  if ( v20 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v20);
    *(_DWORD *)v21 = &NiAlphaProperty::_vftable_;
    *(_WORD *)(v21 + 28) = 236;
    *(_BYTE *)(v21 + 30) = 0;
  }
  else
  {
    v21 = 0;
  }
  *(_WORD *)(v21 + 28) |= 1u;
  uiWidtha = v3[2].m_kWorldBound.m_kCenter.z;
  uiHeight = v21;
  InterlockedIncrement((volatile LONG *)(v21 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(uiWidtha) + 156),
    (NiPointer<NiRoom> *)&uiHeight);
  if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
  ((void (__thiscall *)(NiAVObject *, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v3,
    LODWORD(v3[2].m_kWorldBound.m_kCenter.z),
    0);
  NiAVObject::UpdateProperties(v3);
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (005BF9C0) --------------------------------------------------------
void __thiscall ItemIcon::PlaneInit(ItemIcon *this)
{
  ItemIcon *v1; // esi@1
  void *v2; // edi@1
  int v3; // ebx@1
  void *v4; // eax@2
  NiScreenElementsData *v5; // eax@3
  int v6; // eax@5
  NiScreenElements *v7; // edi@6
  NiScreenElements *v8; // eax@13
  void *v9; // eax@13
  float v10; // edi@13
  void *v11; // eax@18
  float v12; // edi@18
  void *v13; // edi@23
  void *v14; // eax@24
  NiScreenElementsData *v15; // eax@25
  int v16; // eax@25
  int v17; // ebx@25
  int v18; // eax@26
  NiScreenElements *v19; // edi@28
  NiScreenElements *v20; // eax@35
  void *v21; // eax@35
  float v22; // edi@35
  void *v23; // eax@40
  float v24; // edi@40
  NiColorA kCommonValue; // [sp+40h] [bp-34h]@13
  void *v26; // [sp+50h] [bp-24h]@24
  void *v27; // [sp+54h] [bp-20h]@23
  float alpha; // [sp+58h] [bp-1Ch]@1
  float rad; // [sp+5Ch] [bp-18h]@2
  float green; // [sp+60h] [bp-14h]@1
  float blue; // [sp+64h] [bp-10h]@1
  int v32; // [sp+70h] [bp-4h]@1

  v1 = this;
  green = 0.0 / 255.0;
  blue = green;
  v2 = operator new(0xC4u);
  LODWORD(alpha) = v2;
  v3 = 0;
  v32 = 0;
  if ( v2 )
  {
    v4 = operator new(0x70u);
    LODWORD(rad) = v4;
    LOBYTE(v32) = 1;
    if ( v4 )
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v4, 0, 1, 0, 1, 1, 4, 1, 2, 1);
    else
      v5 = 0;
    LOBYTE(v32) = 0;
    NiScreenElements::NiScreenElements((NiScreenElements *)v2, v5);
    v3 = v6;
  }
  v7 = v1->m_spBackPlane.m_pObject;
  v32 = -1;
  if ( v7 != (NiScreenElements *)v3 )
  {
    if ( v7
      && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v1->m_spBackPlane.m_pObject = (NiScreenElements *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  NiScreenElementsData::SetRectangle(
    (NiScreenElementsData *)v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    0.0,
    0.0,
    32.0,
    32.0);
  v8 = v1->m_spBackPlane.m_pObject;
  kCommonValue.r = 1.0;
  kCommonValue.g = 1.0;
  kCommonValue.b = blue;
  kCommonValue.a = 0.50196081;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v8->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v9 = operator new(0x20u);
  LODWORD(v10) = v9;
  LODWORD(alpha) = v9;
  v32 = 2;
  if ( v9 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v9);
    *LODWORD(v10) = &NiAlphaProperty::_vftable_;
    *(_WORD *)(LODWORD(v10) + 28) = 236;
    *(_BYTE *)(LODWORD(v10) + 30) = 0;
  }
  else
  {
    LODWORD(v10) = 0;
  }
  *(_WORD *)(LODWORD(v10) + 28) |= 1u;
  LODWORD(rad) = v1->m_spBackPlane.m_pObject;
  blue = v10;
  InterlockedIncrement((volatile LONG *)(LODWORD(v10) + 4));
  v32 = 3;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(rad) + 156),
    (NiPointer<NiRoom> *)&blue);
  v32 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v10) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v10))(LODWORD(v10), 1);
  v11 = operator new(0x28u);
  LODWORD(v12) = v11;
  LODWORD(alpha) = v11;
  v32 = 4;
  if ( v11 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v11);
    *LODWORD(v12) = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(LODWORD(v12) + 28) = 0;
    *(_DWORD *)(LODWORD(v12) + 32) = 0;
    *(_DWORD *)(LODWORD(v12) + 36) = 1;
  }
  else
  {
    LODWORD(v12) = 0;
  }
  *(_DWORD *)(LODWORD(v12) + 36) = 0;
  *(_DWORD *)(LODWORD(v12) + 32) = 1;
  LODWORD(blue) = v1->m_spBackPlane.m_pObject;
  rad = v12;
  InterlockedIncrement((volatile LONG *)(LODWORD(v12) + 4));
  v32 = 5;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(blue) + 156),
    (NiPointer<NiRoom> *)&rad);
  v32 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v12) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v12))(LODWORD(v12), 1);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiAVObject::UpdateProperties(&v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  ((void (__thiscall *)(ItemIcon *, NiScreenElements *, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1,
    v1->m_spBackPlane.m_pObject,
    0);
  NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  rad = green;
  blue = green;
  alpha = green;
  v13 = operator new(0xC4u);
  v27 = v13;
  v32 = 6;
  if ( v13 )
  {
    v14 = operator new(0x70u);
    v26 = v14;
    LOBYTE(v32) = 7;
    if ( v14 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v14, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      LOBYTE(v32) = 6;
      NiScreenElements::NiScreenElements((NiScreenElements *)v13, v15);
      v17 = v16;
    }
    else
    {
      LOBYTE(v32) = 6;
      NiScreenElements::NiScreenElements((NiScreenElements *)v13, 0);
      v17 = v18;
    }
  }
  else
  {
    v17 = 0;
  }
  v19 = v1->m_spTopPlane.m_pObject;
  v32 = -1;
  if ( v19 != (NiScreenElements *)v17 )
  {
    if ( v19
      && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v19 )
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v19,
        1u);
    v1->m_spTopPlane.m_pObject = (NiScreenElements *)v17;
    if ( v17 )
      InterlockedIncrement((volatile LONG *)(v17 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  NiScreenElementsData::SetRectangle(
    (NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    0.0,
    0.0,
    32.0,
    32.0);
  v20 = v1->m_spTopPlane.m_pObject;
  kCommonValue.r = rad;
  kCommonValue.g = green;
  kCommonValue.b = blue;
  kCommonValue.a = alpha;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v20->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v21 = operator new(0x20u);
  LODWORD(v22) = v21;
  v26 = v21;
  v32 = 8;
  if ( v21 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v21);
    *LODWORD(v22) = &NiAlphaProperty::_vftable_;
    *(_WORD *)(LODWORD(v22) + 28) = 236;
    *(_BYTE *)(LODWORD(v22) + 30) = 0;
  }
  else
  {
    LODWORD(v22) = 0;
  }
  *(_WORD *)(LODWORD(v22) + 28) |= 1u;
  LODWORD(rad) = v1->m_spTopPlane.m_pObject;
  alpha = v22;
  InterlockedIncrement((volatile LONG *)(LODWORD(v22) + 4));
  v32 = 9;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(rad) + 156),
    (NiPointer<NiRoom> *)&alpha);
  v32 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v22) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v22))(LODWORD(v22), 1);
  v23 = operator new(0x28u);
  LODWORD(v24) = v23;
  v26 = v23;
  v32 = 10;
  if ( v23 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v23);
    *LODWORD(v24) = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(LODWORD(v24) + 28) = 0;
    *(_DWORD *)(LODWORD(v24) + 32) = 0;
    *(_DWORD *)(LODWORD(v24) + 36) = 1;
  }
  else
  {
    LODWORD(v24) = 0;
  }
  *(_DWORD *)(LODWORD(v24) + 36) = 0;
  *(_DWORD *)(LODWORD(v24) + 32) = 1;
  LODWORD(rad) = v1->m_spTopPlane.m_pObject;
  alpha = v24;
  InterlockedIncrement((volatile LONG *)(LODWORD(v24) + 4));
  v32 = 11;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(LODWORD(rad) + 156),
    (NiPointer<NiRoom> *)&alpha);
  v32 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v24) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v24))(LODWORD(v24), 1);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiAVObject::UpdateProperties(&v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  ((void (__thiscall *)(ItemIcon *, NiScreenElements *, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1,
    v1->m_spTopPlane.m_pObject,
    0);
  NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (005BFF40) --------------------------------------------------------
void __thiscall ItemIcon::ItemIcon(ItemIcon *this)
{
  ItemIcon *v1; // esi@1
  Item *v2; // edi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemIcon::_vftable_;
  v1->m_spItem.m_pObject = 0;
  v1->m_spSubImagePlane.m_pObject = 0;
  v1->m_spSubImageTexProp.m_pObject = 0;
  DecoPlaneColor::DecoPlaneColor(&v1->m_kGradeDeco);
  DecoPlaneTex::DecoPlaneTex(&v1->m_kTermDeco);
  v1->m_spBackPlane.m_pObject = 0;
  v1->m_spTopPlane.m_pObject = 0;
  DecoPlaneColor::Create(&v1->m_kGradeDeco, &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  IconWin::CreateGeometry(&v1->baseclass_0, 0x20u, 0x20u);
  ItemIcon::CreateSubImagePlane(v1, 0x20u, 0x20u);
  DecoPlaneTex::Create(&v1->m_kTermDeco, &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v1->m_bgray = 0;
  v1->m_pkLotText = 0;
  v2 = v1->m_spItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spItem.m_pObject = 0;
  }
  v1->m_uiSubIconIndex = -1;
  *(_WORD *)&v1->m_bShowLotText = 1;
  v1->m_bInputProcess = 1;
}
// 9B4E78: using guessed type int (__stdcall *ItemIcon___vftable_)(int uiFlags);
// 9B4E94: using guessed type int (__thiscall *ItemIcon___vftable_)(void *p, char);

//----- (005C0060) --------------------------------------------------------
ItemIcon *__cdecl ItemIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  ItemIcon *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x1C0u);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, PgWin *))(*(_DWORD *)v5 + 612))(
                          v5,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (ItemIcon *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (005C01A0) --------------------------------------------------------
void __thiscall DecoPlaneColor::_DecoPlaneColor(DecoPlaneTex *this)
{
  DecoPlaneTex *v1; // edi@1
  NiTexturingProperty *v2; // esi@1
  NiScreenElements *v3; // esi@5

  v1 = this;
  v2 = this->m_spDecoTexProp.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spDecoPlane.m_pObject;
  if ( v1->m_spDecoPlane.m_pObject
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
  }
}

//----- (005C0230) --------------------------------------------------------
Skill::EmpowerInfo *__thiscall SkillIcon::GetEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo *result)
{
  Skill::EmpowerInfo *v2; // eax@1

  v2 = result;
  *(_DWORD *)&result->cDamageUp = *(_DWORD *)&this->m_kEmpowerInfo.cDamageUp;
  return v2;
}

//----- (005C0250) --------------------------------------------------------
unsigned __int16 __thiscall SkillIcon::GetSkill(SkillIcon *this)
{
  return this->m_kSkillID;
}

//----- (005C0260) --------------------------------------------------------
Skill::EmpowerInfo *__thiscall SkillIcon::GetAccumulatedEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo *result)
{
  int v2; // esi@1
  SkillIcon *v3; // edi@1
  int v4; // ebx@1
  int v5; // eax@3
  int v6; // ecx@4
  Skill::EmpowerInfo *v7; // eax@5
  int v8; // eax@6
  char v9; // dl@7
  int v10; // esi@8
  char v11; // bl@9
  Skill::LearnSkillInfo *v12; // eax@10
  int kEmpowerInfo; // [sp+Ch] [bp-4h]@6

  v2 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v3 = this;
  v4 = this->m_kSkillID;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          this->m_kSkillID)
    && (unsigned __int16)v4 <= *(_WORD *)(v2 + 200)
    && (v5 = *(_DWORD *)(v2 + 196) + 4 * v4, *(_DWORD *)v5)
    && (v6 = *(_DWORD *)v5) != 0 )
  {
    kEmpowerInfo = *(_DWORD *)&v3->m_kEmpowerInfo.cDamageUp;
    v8 = v6 + 2;
    do
      v9 = *(_BYTE *)v8++;
    while ( v9 );
    v10 = *(_BYTE *)(v8 - (v6 + 3) + v6 + 1) - 49;
    if ( *(_BYTE *)(v8 - (v6 + 3) + v6 + 1) != 49 )
    {
      v11 = *(_DWORD *)&v3->m_kEmpowerInfo.cDamageUp;
      do
      {
        v12 = Skill::GetLearnActSkillInfo(v3->m_kSkillID - v10);
        v11 += v12->kEmpowerInfo.cDamageUp;
        BYTE1(kEmpowerInfo) += v12->kEmpowerInfo.cSmallSp;
        BYTE2(kEmpowerInfo) += v12->kEmpowerInfo.cLongKeepTime;
        BYTE3(kEmpowerInfo) += v12->kEmpowerInfo.cShortCoolTime;
        --v10;
      }
      while ( v10 );
      LOBYTE(kEmpowerInfo) = v11;
    }
    v7 = result;
    *(_DWORD *)&result->cDamageUp = kEmpowerInfo;
  }
  else
  {
    v7 = result;
    *(_DWORD *)&result->cDamageUp = *(_DWORD *)&v3->m_kEmpowerInfo.cDamageUp;
  }
  return v7;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (005C0330) --------------------------------------------------------
Skill::EmpowerInfo *__thiscall SkillIcon::GetTotalAccumulatedEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo *result)
{
  Skill::GetAccumulatedEmpowerInfo(result, this->m_kSkillID);
  return result;
}

//----- (005C0350) --------------------------------------------------------
void __thiscall SkillIcon::ShowSkillPowerBar(SkillIcon *this, bool b)
{
  PgWinBar *v2; // eax@1
  PgWinBar *v3; // eax@5
  PgWinBar *v4; // eax@9
  PgWinBar *v5; // eax@13

  v2 = this->m_apkSkillPowerBar[0];
  if ( v2 )
  {
    if ( b )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v3 = this->m_apkSkillPowerBar[1];
  if ( v3 )
  {
    if ( b )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v4 = this->m_apkSkillPowerBar[2];
  if ( v4 )
  {
    if ( b )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v5 = this->m_apkSkillPowerBar[3];
  if ( v5 )
  {
    if ( b )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (005C03E0) --------------------------------------------------------
void __thiscall SkillIcon::SetBackPlaneColor(SkillIcon *this, float rad, float green, float blue, float alpha)
{
  SkillIcon *v5; // esi@1
  NiScreenElements *v6; // eax@1
  NiColorA kCommonValue; // [sp+Ch] [bp-10h]@2

  v5 = this;
  v6 = this->m_spBackPlane.m_pObject;
  if ( v6 )
  {
    kCommonValue.r = rad / 255.0;
    kCommonValue.g = green / 255.0;
    kCommonValue.b = blue / 255.0;
    kCommonValue.a = alpha / 255.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    NiAVObject::UpdateProperties(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  }
}

//----- (005C0480) --------------------------------------------------------
void __thiscall SkillIcon::SetTopPlaneColor(SkillIcon *this, float rad, float green, float blue, float alpha)
{
  SkillIcon *v5; // esi@1
  NiScreenElements *v6; // eax@1
  NiColorA kCommonValue; // [sp+Ch] [bp-10h]@2

  v5 = this;
  v6 = this->m_spTopPlane.m_pObject;
  if ( v6 )
  {
    kCommonValue.r = rad / 255.0;
    kCommonValue.g = green / 255.0;
    kCommonValue.b = blue / 255.0;
    kCommonValue.a = alpha / 255.0;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v5->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  }
}

//----- (005C0500) --------------------------------------------------------
void __thiscall SkillIcon::Show(SkillIcon *this, bool b)
{
  SkillIcon *v2; // esi@1
  NiScreenElements *v3; // eax@1
  NiScreenElements *v4; // eax@5

  v2 = this;
  IconWin::Show(&this->baseclass_0, b);
  v3 = v2->m_spBackPlane.m_pObject;
  if ( v3 )
  {
    if ( b )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  v4 = v2->m_spTopPlane.m_pObject;
  if ( v4 )
  {
    if ( !b )
    {
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      SkillIcon::ShowSkillPowerBar(v2, 0);
      return;
    }
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
  SkillIcon::ShowSkillPowerBar(v2, b);
}

//----- (005C0570) --------------------------------------------------------
bool __thiscall SkillIcon::GraySkillTexture(SkillIcon *this, NiTexture *pkGrayTexture, NiD3DPass *pkD3DPass)
{
  NiTexturingProperty::Map *v3; // eax@1
  NiTexture *v4; // edi@2
  NiD3DTextureStage *v5; // ebx@4
  NiTexture *v6; // esi@4
  NiD3DTextureStage *v7; // edi@11
  NiTexture *v8; // esi@11
  NiTexturePalette *v9; // esi@18
  char *v10; // eax@20
  NiAVObject *v11; // esi@21
  NiNode *v12; // esi@22
  NiD3DTextureStage *v13; // eax@25
  NiD3DTextureStage *v14; // eax@28
  NiAVObject *thisa; // [sp+24h] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+28h] [bp-18h]@18
  NiPointer<NiD3DTextureStage> spStage2; // [sp+2Ch] [bp-14h]@11
  NiPointer<NiD3DTextureStage> spStage; // [sp+30h] [bp-10h]@4
  int v20; // [sp+3Ch] [bp-4h]@4

  thisa = (NiAVObject *)this;
  v3 = *this->baseclass_0.m_spTexProp.m_pObject->m_kMaps.m_pBase;
  if ( v3 )
    v4 = v3->m_spTexture.m_pObject;
  else
    v4 = 0;
  NiD3DTextureStage::CreateNewStage(&spStage);
  spStage.m_pObject->m_uiStage = 0;
  v5 = spStage.m_pObject;
  v6 = spStage.m_pObject->m_spTexture.m_pObject;
  v20 = 0;
  if ( v6 != v4 )
  {
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v5->m_spTexture.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 2u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 1u, 2u, 0);
  NiD3DTextureStage::CreateNewStage(&spStage2);
  spStage2.m_pObject->m_uiStage = 1;
  v7 = spStage2.m_pObject;
  v8 = spStage2.m_pObject->m_spTexture.m_pObject;
  LOBYTE(v20) = 1;
  if ( v8 != pkGrayTexture )
  {
    if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v7->m_spTexture.m_pObject = pkGrayTexture;
    if ( pkGrayTexture )
      InterlockedIncrement((volatile LONG *)&pkGrayTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 2u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 3u, 1u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 1u, 4u, 0);
  spNode.m_pObject = 0;
  v9 = dword_B70448;
  LOBYTE(v20) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  v10 = Folder::Merge(&Folder::m_acMenu, "Game\\IconMaterial.nif");
  PgUtil::LoadNodeNifFile(v10, &spNode, v9);
  if ( spNode.m_pObject )
  {
    v11 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Plane01");
    NiAVObject::UpdateProperties(v11);
    NiAVObject::Update(v11, 0.0, 1);
    NiAVObject::UpdateProperties(thisa);
    NiAVObject::Update(thisa, 0.0, 1);
    LOBYTE(v20) = 1;
    if ( spNode.m_pObject )
    {
      v12 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v12 )
          v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      }
    }
  }
  v13 = spStage2.m_pObject;
  LOBYTE(v20) = 0;
  if ( spStage2.m_pObject )
  {
    --spStage2.m_pObject->m_uiRefCount;
    if ( !v13->m_uiRefCount )
      NiD3DTextureStage::ReturnStageToPool(v13);
  }
  v14 = spStage.m_pObject;
  v20 = -1;
  if ( spStage.m_pObject )
  {
    --spStage.m_pObject->m_uiRefCount;
    if ( !v14->m_uiRefCount )
      NiD3DTextureStage::ReturnStageToPool(v14);
  }
  return 0;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C07C0) --------------------------------------------------------
void __thiscall SkillIcon::_SkillIcon(SkillIcon *this)
{
  SkillIcon *v1; // edi@1
  NiTListItem<NiD3DShaderInterface *> *v2; // eax@1
  int v3; // ecx@2
  void *v4; // edx@2
  NiScreenElements *v5; // esi@7
  NiScreenElements *v6; // esi@11
  void *kPos; // [sp+4h] [bp-10h]@5
  int v8; // [sp+10h] [bp-4h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillIcon::_vftable_;
  v2 = SkillIcon::ms_kSkillIconList.baseclass_0.m_pkHead;
  v8 = 2;
  if ( SkillIcon::ms_kSkillIconList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v3 = (int)&v2->m_element;
      v4 = v2;
      v2 = v2->m_pkNext;
      if ( v1 == *(SkillIcon **)v3 )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v4 = 0;
  }
  kPos = v4;
  if ( v4 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(&SkillIcon::ms_kSkillIconList, &kPos);
  v5 = v1->m_spTopPlane.m_pObject;
  LOBYTE(v8) = 1;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v6 = v1->m_spBackPlane.m_pObject;
  LOBYTE(v8) = 0;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v8 = -1;
  IconWin::_IconWin(&v1->baseclass_0);
}
// 9B5194: using guessed type int (__stdcall *SkillIcon___vftable_)(int uiFlags);
// 9B51B4: using guessed type int (__thiscall *SkillIcon___vftable_)(void *p, char);

//----- (005C08B0) --------------------------------------------------------
bool __thiscall SkillIcon::Create(SkillIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  SkillIcon *v4; // esi@1
  bool result; // al@1
  NiSourceTexture *v6; // eax@2
  NiSourceTexture *v7; // edi@2
  PgWinBar *v8; // eax@4
  PgWinBar *v9; // ecx@4
  NiTListItem<NiD3DShaderInterface *> *v10; // eax@4

  v4 = this;
  result = PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0);
  if ( result )
  {
    v6 = MenuTexMgr::GetTexture(7u);
    v7 = v6;
    if ( v6 )
    {
      v4->m_apkSkillPowerBar[0] = PgWinBar::CreateWin(
                                    0,
                                    0,
                                    v6,
                                    0,
                                    0,
                                    0,
                                    0x10u,
                                    4u,
                                    &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                                    BGT_RIGHT,
                                    0,
                                    0);
      v4->m_apkSkillPowerBar[1] = PgWinBar::CreateWin(
                                    28,
                                    0,
                                    v7,
                                    0,
                                    0x10u,
                                    0,
                                    4u,
                                    0x10u,
                                    &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                                    BGT_BOTTOM,
                                    0,
                                    0);
      v4->m_apkSkillPowerBar[2] = PgWinBar::CreateWin(
                                    0,
                                    16,
                                    v7,
                                    0,
                                    0x14u,
                                    0,
                                    4u,
                                    0x10u,
                                    &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                                    BGT_TOP,
                                    0,
                                    0);
      v8 = PgWinBar::CreateWin(
             16,
             28,
             v7,
             0,
             0,
             4u,
             0x10u,
             4u,
             &v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
             0,
             0,
             0);
      v9 = v4->m_apkSkillPowerBar[0];
      v4->m_apkSkillPowerBar[3] = v8;
      PgWinBar::SetValue(v9, 1.0, 0.0);
      PgWinBar::SetValue(v4->m_apkSkillPowerBar[1], 1.0, 0.0);
      PgWinBar::SetValue(v4->m_apkSkillPowerBar[2], 1.0, 0.0);
      PgWinBar::SetValue(v4->m_apkSkillPowerBar[3], 1.0, 0.0);
      ((void (__stdcall *)(_DWORD))v4->m_apkSkillPowerBar[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v4->m_apkSkillPowerBar[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v4->m_apkSkillPowerBar[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v4->m_apkSkillPowerBar[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v10 = SkillIcon::ms_kSkillIconList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&SkillIcon::ms_kSkillIconList);
      v10->m_element = (NiD3DShaderInterface *)v4;
      v10->m_pkNext = 0;
      v10->m_pkPrev = SkillIcon::ms_kSkillIconList.baseclass_0.m_pkTail;
      if ( SkillIcon::ms_kSkillIconList.baseclass_0.m_pkTail )
      {
        SkillIcon::ms_kSkillIconList.baseclass_0.m_pkTail->m_pkNext = v10;
        ++*(_DWORD *)&SkillIcon::ms_kSkillIconList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        SkillIcon::ms_kSkillIconList.baseclass_0.m_pkTail = v10;
        result = 1;
      }
      else
      {
        ++*(_DWORD *)&SkillIcon::ms_kSkillIconList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        SkillIcon::ms_kSkillIconList.baseclass_0.m_pkHead = v10;
        SkillIcon::ms_kSkillIconList.baseclass_0.m_pkTail = v10;
        result = 1;
      }
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (005C0A90) --------------------------------------------------------
void __thiscall SkillIcon::SetEmpowerInfo(SkillIcon *this, Skill::EmpowerInfo kInfo)
{
  char v2; // dh@1
  SkillIcon *v3; // esi@1
  PgWinBar *v4; // ecx@1
  double v5; // st7@1
  double v6; // st7@3
  PgWinBar *v7; // ecx@4
  double v8; // st6@6
  double v9; // st7@6
  PgWinBar *v10; // ecx@7
  double v11; // st6@9
  double v12; // st7@9
  PgWinBar *v13; // ecx@10
  double v14; // st6@12
  double v15; // st7@12
  float v16; // [sp+4h] [bp-4h]@1
  float v17; // [sp+4h] [bp-4h]@4
  float v18; // [sp+4h] [bp-4h]@7
  float v19; // [sp+4h] [bp-4h]@10

  v2 = kInfo.cSmallSp;
  v3 = this;
  this->m_kEmpowerInfo.cLongKeepTime = *(unsigned int *)&kInfo >> 16;
  this->m_kEmpowerInfo.cSmallSp = kInfo.cSmallSp;
  this->m_kEmpowerInfo.cDamageUp = kInfo.cDamageUp;
  this->m_kEmpowerInfo.cShortCoolTime = kInfo.cShortCoolTime;
  v4 = this->m_apkSkillPowerBar[0];
  v16 = (double)(kInfo.cDamageUp != 0) + (double)kInfo.cDamageUp * 3.0;
  v5 = 16.0;
  if ( 16.0 != v4->m_fMaxValue || v16 != v4->m_fCurValue )
  {
    v6 = v16;
    v4->m_fMaxValue = 16.0;
    v4->m_fCurValue = v6;
    PgWinBar::OnChangeValue(v4);
    v2 = kInfo.cSmallSp;
    v5 = 16.0;
  }
  v7 = v3->m_apkSkillPowerBar[1];
  v17 = (double)(v2 != 0) + (double)v2 * 3.0;
  if ( v5 != v7->m_fMaxValue || v17 != v7->m_fCurValue )
  {
    v8 = v5;
    v9 = v17;
    v7->m_fMaxValue = v8;
    v7->m_fCurValue = v9;
    PgWinBar::OnChangeValue(v7);
    v5 = 16.0;
  }
  v10 = v3->m_apkSkillPowerBar[2];
  v18 = (double)(kInfo.cLongKeepTime != 0) + (double)kInfo.cLongKeepTime * 3.0;
  if ( v5 != v10->m_fMaxValue || v18 != v10->m_fCurValue )
  {
    v11 = v5;
    v12 = v18;
    v10->m_fMaxValue = v11;
    v10->m_fCurValue = v12;
    PgWinBar::OnChangeValue(v10);
    v5 = 16.0;
  }
  v13 = v3->m_apkSkillPowerBar[3];
  v19 = (double)(kInfo.cShortCoolTime != 0) + (double)kInfo.cShortCoolTime * 3.0;
  if ( v5 != v13->m_fMaxValue || v19 != v13->m_fCurValue )
  {
    v14 = v5;
    v15 = v19;
    v13->m_fMaxValue = v14;
    v13->m_fCurValue = v15;
    PgWinBar::OnChangeValue(v13);
  }
}

//----- (005C0C80) --------------------------------------------------------
void __thiscall SkillIcon::RefreshSkillInfo(SkillIcon *this)
{
  SkillIcon *v1; // esi@1
  Skill::EmpowerInfo kInfo; // [sp+4h] [bp-4h]@1

  v1 = this;
  Skill::GetAccumulatedEmpowerInfo(&kInfo, this->m_kSkillID);
  SkillIcon::SetEmpowerInfo(v1, kInfo);
}

//----- (005C0CB0) --------------------------------------------------------
void __cdecl SkillIcon::RefreshSkillInfoAll()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // esi@1
  NiD3DShaderInterface *v1; // edi@2
  Skill::EmpowerInfo result; // [sp+4h] [bp-4h]@2

  v0 = SkillIcon::ms_kSkillIconList.baseclass_0.m_pkHead;
  if ( SkillIcon::ms_kSkillIconList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = v0->m_element;
      v0 = v0->m_pkNext;
      Skill::GetAccumulatedEmpowerInfo(&result, LOWORD(v1[12].m_pkD3DDevice));
      SkillIcon::SetEmpowerInfo((SkillIcon *)v1, result);
    }
    while ( v0 );
  }
}

//----- (005C0D00) --------------------------------------------------------
void __thiscall SkillIcon::SkillIcon(SkillIcon *this)
{
  SkillIcon *v1; // esi@1
  void *v2; // edi@1
  void *v3; // eax@2
  int v4; // eax@3
  NiScreenElements *v5; // edi@6
  NiScreenElements *v6; // eax@14
  void *v7; // eax@14
  float v8; // edi@14
  void *v9; // eax@19
  float v10; // edi@19
  NiProperty *v11; // eax@24
  NiTexturePalette *v12; // edi@24
  char *v13; // eax@26
  NiAVObject *v14; // eax@27
  NiProperty *v15; // eax@27
  void *v16; // eax@29
  void *v17; // edi@29
  NiAVObject *v18; // ecx@34
  void *v19; // edi@36
  void *v20; // eax@37
  int v21; // eax@38
  NiScreenElements *v22; // edi@41
  NiScreenElements *v23; // eax@49
  void *v24; // eax@49
  void *v25; // edi@49
  NiAVObject *v26; // ecx@52
  void *v27; // eax@52
  void *v28; // edi@52
  void *v29; // eax@53
  NiAVObject *v30; // ecx@55
  NiNode *v31; // edi@56
  NiColorA kCommonValue; // [sp+38h] [bp-3Ch]@14
  void *v33; // [sp+48h] [bp-2Ch]@37
  SkillIcon *v34; // [sp+4Ch] [bp-28h]@1
  NiPointer<NiAlphaProperty> spAlphaProp; // [sp+50h] [bp-24h]@1
  float green; // [sp+54h] [bp-20h]@2
  float rad; // [sp+58h] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-18h]@24
  float blue; // [sp+60h] [bp-14h]@1
  void *v40; // [sp+64h] [bp-10h]@3
  int v41; // [sp+70h] [bp-4h]@1

  v1 = this;
  v34 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SkillIcon::_vftable_;
  v41 = 0;
  v1->m_spBackPlane.m_pObject = 0;
  v1->m_spTopPlane.m_pObject = 0;
  v1->m_apkSkillPowerBar[0] = 0;
  v1->m_apkSkillPowerBar[1] = 0;
  v1->m_apkSkillPowerBar[2] = 0;
  v1->m_apkSkillPowerBar[3] = 0;
  v1->m_kSkillID = -1;
  *(_DWORD *)&v1->m_kEmpowerInfo.cDamageUp = 0;
  rad = 0.0 / 255.0;
  blue = rad;
  v2 = operator new(0xC4u);
  spAlphaProp.m_pObject = (NiAlphaProperty *)v2;
  LOBYTE(v41) = 3;
  if ( v2 )
  {
    v3 = operator new(0x70u);
    LODWORD(green) = v3;
    LOBYTE(v41) = 4;
    if ( v3 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v3, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      LOBYTE(v41) = 3;
      NiScreenElements::NiScreenElements((NiScreenElements *)v2, (NiScreenElementsData *)v4);
      v40 = (void *)v4;
    }
    else
    {
      LOBYTE(v41) = 3;
      NiScreenElements::NiScreenElements((NiScreenElements *)v2, 0);
      v40 = (void *)v4;
    }
  }
  else
  {
    v40 = 0;
    v4 = 0;
  }
  v5 = v1->m_spBackPlane.m_pObject;
  LOBYTE(v41) = 2;
  if ( v5 != (NiScreenElements *)v4 )
  {
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v5,
          1u);
      v4 = (int)v40;
    }
    v1->m_spBackPlane.m_pObject = (NiScreenElements *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)(v4 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  NiScreenElementsData::SetRectangle(
    (NiScreenElementsData *)v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    0.0,
    0.0,
    32.0,
    32.0);
  v6 = v1->m_spBackPlane.m_pObject;
  kCommonValue.r = 1.0;
  kCommonValue.g = 1.0;
  kCommonValue.b = blue;
  kCommonValue.a = 0.50196081;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v6->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v7 = operator new(0x20u);
  LODWORD(v8) = v7;
  spAlphaProp.m_pObject = (NiAlphaProperty *)v7;
  LOBYTE(v41) = 5;
  if ( v7 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v7);
    *LODWORD(v8) = &NiAlphaProperty::_vftable_;
    *(_WORD *)(LODWORD(v8) + 28) = 236;
    *(_BYTE *)(LODWORD(v8) + 30) = 0;
  }
  else
  {
    LODWORD(v8) = 0;
  }
  *(_WORD *)(LODWORD(v8) + 28) |= 1u;
  v40 = v1->m_spBackPlane.m_pObject;
  blue = v8;
  InterlockedIncrement((volatile LONG *)(LODWORD(v8) + 4));
  LOBYTE(v41) = 6;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v40 + 156),
    (NiPointer<NiRoom> *)&blue);
  LOBYTE(v41) = 2;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v8) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v8))(LODWORD(v8), 1);
  v9 = operator new(0x28u);
  LODWORD(v10) = v9;
  spAlphaProp.m_pObject = (NiAlphaProperty *)v9;
  LOBYTE(v41) = 7;
  if ( v9 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v9);
    *LODWORD(v10) = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(LODWORD(v10) + 28) = 0;
    *(_DWORD *)(LODWORD(v10) + 32) = 0;
    *(_DWORD *)(LODWORD(v10) + 36) = 1;
  }
  else
  {
    LODWORD(v10) = 0;
  }
  *(_DWORD *)(LODWORD(v10) + 32) = 1;
  *(_DWORD *)(LODWORD(v10) + 36) = 0;
  v40 = v1->m_spBackPlane.m_pObject;
  blue = v10;
  InterlockedIncrement((volatile LONG *)(LODWORD(v10) + 4));
  LOBYTE(v41) = 8;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v40 + 156),
    (NiPointer<NiRoom> *)&blue);
  LOBYTE(v41) = 2;
  if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v10) + 4)) )
    (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v10))(LODWORD(v10), 1);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiAVObject::UpdateProperties(&v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  NiNode::AttachChild(
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v1->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    0);
  NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  IconWin::CreateGeometry(&v1->baseclass_0, 0x20u, 0x20u);
  v11 = NiAVObject::GetProperty(&v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0);
  NiAVObject::DetachProperty(&v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v11);
  spNode.m_pObject = 0;
  v12 = dword_B70448;
  LOBYTE(v41) = 9;
  if ( !Folder::m_bInit )
    Folder::Init();
  v13 = Folder::Merge(&Folder::m_acMenu, "Game\\IconMaterial.nif");
  PgUtil::LoadNodeNifFile(v13, &spNode, v12);
  if ( spNode.m_pObject )
  {
    v14 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Plane01");
    v15 = NiAVObject::GetProperty(v14, 0);
    if ( v15 )
    {
      NiAVObject::AttachProperty(
        &v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v15);
    }
    else
    {
      v16 = operator new(0x20u);
      v17 = v16;
      spAlphaProp.m_pObject = (NiAlphaProperty *)v16;
      LOBYTE(v41) = 10;
      if ( v16 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v16);
        *(_DWORD *)v17 = &NiAlphaProperty::_vftable_;
        *((_WORD *)v17 + 14) = 236;
        *((_BYTE *)v17 + 30) = 0;
      }
      else
      {
        v17 = 0;
      }
      spAlphaProp.m_pObject = (NiAlphaProperty *)v17;
      if ( v17 )
        InterlockedIncrement((volatile LONG *)v17 + 1);
      *((_WORD *)v17 + 14) |= 1u;
      v18 = (NiAVObject *)v1->baseclass_0.m_spGeom.m_pObject;
      LOBYTE(v41) = 11;
      NiAVObject::AttachProperty(v18, (NiProperty *)v17);
      LOBYTE(v41) = 9;
      if ( !InterlockedDecrement((volatile LONG *)v17 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v17)(v17, 1);
    }
    green = rad;
    blue = rad;
    *(float *)&spAlphaProp.m_pObject = rad;
    v19 = operator new(0xC4u);
    v40 = v19;
    LOBYTE(v41) = 12;
    if ( v19 )
    {
      v20 = operator new(0x70u);
      v33 = v20;
      LOBYTE(v41) = 13;
      if ( v20 )
      {
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v20, 0, 1, 0, 1, 1, 4, 1, 2, 1);
        LOBYTE(v41) = 12;
        NiScreenElements::NiScreenElements((NiScreenElements *)v19, (NiScreenElementsData *)v21);
        v40 = (void *)v21;
      }
      else
      {
        LOBYTE(v41) = 12;
        NiScreenElements::NiScreenElements((NiScreenElements *)v19, 0);
        v40 = (void *)v21;
      }
    }
    else
    {
      v40 = 0;
      v21 = 0;
    }
    v22 = v1->m_spTopPlane.m_pObject;
    LOBYTE(v41) = 9;
    if ( v22 != (NiScreenElements *)v21 )
    {
      if ( v22 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v22 )
          v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v22,
            1u);
        v21 = (int)v40;
      }
      v1->m_spTopPlane.m_pObject = (NiScreenElements *)v21;
      if ( v21 )
        InterlockedIncrement((volatile LONG *)(v21 + 4));
    }
    NiScreenElementsData::Insert(
      (NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      4u,
      0,
      0);
    NiScreenElementsData::SetRectangle(
      (NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      0.0,
      0.0,
      32.0,
      32.0);
    v23 = v1->m_spTopPlane.m_pObject;
    kCommonValue.r = rad;
    kCommonValue.g = green;
    kCommonValue.b = blue;
    kCommonValue.a = *(float *)&spAlphaProp.m_pObject;
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v23->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &kCommonValue);
    v24 = operator new(0x20u);
    v25 = v24;
    v33 = v24;
    LOBYTE(v41) = 14;
    if ( v24 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v24);
      *(_DWORD *)v25 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v25 + 14) = 236;
      *((_BYTE *)v25 + 30) = 0;
    }
    else
    {
      v25 = 0;
    }
    *((_WORD *)v25 + 14) |= 1u;
    v26 = (NiAVObject *)v1->m_spTopPlane.m_pObject;
    LOBYTE(v41) = 9;
    NiAVObject::AttachProperty(v26, (NiProperty *)v25);
    v27 = operator new(0x28u);
    v28 = v27;
    v33 = v27;
    LOBYTE(v41) = 15;
    if ( v27 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v27);
      *((_WORD *)v28 + 14) = 0;
      *(_DWORD *)v28 = &NiVertexColorProperty::_vftable_;
      *((_DWORD *)v28 + 8) = 0;
      *((_DWORD *)v28 + 9) = 1;
      v29 = v28;
    }
    else
    {
      v29 = 0;
    }
    *((_DWORD *)v29 + 8) = 1;
    *((_DWORD *)v29 + 9) = 0;
    v30 = (NiAVObject *)v1->m_spTopPlane.m_pObject;
    LOBYTE(v41) = 9;
    NiAVObject::AttachProperty(v30, (NiProperty *)v29);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    NiNode::AttachChild(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &v1->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    LOBYTE(v41) = 2;
    if ( spNode.m_pObject )
    {
      v31 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v31 )
          v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
      }
    }
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 9B5194: using guessed type int (__stdcall *SkillIcon___vftable_)(int uiFlags);
// 9B51B4: using guessed type int (__thiscall *SkillIcon___vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C1380) --------------------------------------------------------
void __thiscall SkillIcon::UsingSkillAlphaProperty(SkillIcon *this)
{
  SkillIcon *v1; // edi@1
  NiProperty *v2; // eax@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  void *v7; // eax@6
  void *v8; // esi@6
  NiAVObject *v9; // ecx@11
  NiNode *v10; // esi@14
  NiPointer<NiNode> spNode; // [sp+24h] [bp-10h]@1
  int v12; // [sp+30h] [bp-4h]@1

  v1 = this;
  v2 = NiAVObject::GetProperty(
         &this->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
         0);
  NiAVObject::DetachProperty(&v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v2);
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v12 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\IconMaterial.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( spNode.m_pObject )
  {
    v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Plane01");
    v6 = NiAVObject::GetProperty(v5, 0);
    if ( v6 )
    {
      NiAVObject::AttachProperty(
        &v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v6);
    }
    else
    {
      v7 = operator new(0x20u);
      v8 = v7;
      LOBYTE(v12) = 1;
      if ( v7 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v7);
        *(_DWORD *)v8 = &NiAlphaProperty::_vftable_;
        *((_WORD *)v8 + 14) = 236;
        *((_BYTE *)v8 + 30) = 0;
      }
      else
      {
        v8 = 0;
      }
      if ( v8 )
        InterlockedIncrement((volatile LONG *)v8 + 1);
      *((_WORD *)v8 + 14) |= 1u;
      v9 = (NiAVObject *)v1->baseclass_0.m_spGeom.m_pObject;
      LOBYTE(v12) = 2;
      NiAVObject::AttachProperty(v9, (NiProperty *)v8);
      LOBYTE(v12) = 0;
      if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    }
    NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    v12 = -1;
    if ( spNode.m_pObject )
    {
      v10 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
  }
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C1500) --------------------------------------------------------
void __thiscall SkillIcon::UsingItemAlphaProperty(SkillIcon *this)
{
  SkillIcon *v1; // edi@1
  NiProperty *v2; // eax@1
  void *v3; // eax@1
  void *v4; // esi@1
  NiScreenElements *v5; // ST1C_4@4
  NiPointer<NiRoom> element; // [sp+20h] [bp-10h]@4
  int v7; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  v2 = NiAVObject::GetProperty(
         &this->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
         0);
  NiAVObject::DetachProperty(&v1->baseclass_0.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v2);
  v3 = operator new(0x20u);
  v4 = v3;
  v7 = 0;
  if ( v3 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v3);
    *(_DWORD *)v4 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v4 + 14) = 236;
    *((_BYTE *)v4 + 30) = 0;
  }
  else
  {
    v4 = 0;
  }
  *((_WORD *)v4 + 14) |= 1u;
  v5 = v1->baseclass_0.m_spGeom.m_pObject;
  element.m_pObject = (NiRoom *)v4;
  InterlockedIncrement((volatile LONG *)v4 + 1);
  v7 = 1;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    &element);
  v7 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
  NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (005C15F0) --------------------------------------------------------
void __thiscall SkillIcon::SetSkill(SkillIcon *this, unsigned __int16 kSkillID)
{
  int v2; // ebx@1
  SkillIcon *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // eax@2
  int v5; // edi@3
  int v6; // eax@5
  int v7; // edi@6
  float v8; // ST0C_4@7
  float v9; // ST08_4@7
  float v10; // ST04_4@7
  int v11; // ST08_4@7
  NiSourceTexture *v12; // eax@7
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@7

  v2 = kSkillID;
  v3 = this;
  this->m_kSkillID = kSkillID;
  if ( (_WORD)v2 == -1 )
  {
    ((void (__stdcall *)(_DWORD, signed int, signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      0,
      -1,
      32,
      32);
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    v4(
      &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
  }
  else
  {
    v5 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                            v2) )
    {
      if ( (unsigned __int16)v2 <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)v2;
        if ( *(_DWORD *)v6 )
        {
          v7 = *(_DWORD *)v6;
          if ( *(_DWORD *)v6 )
          {
            v10 = (double)*(unsigned int *)(v7 + 75);
            v9 = (double)*(unsigned int *)(v7 + 79);
            v8 = (double)*(unsigned int *)(v7 + 83);
            SkillIcon::SetBackPlaneColor(v3, v10, v9, v8, 255.0);
            v11 = *(_DWORD *)(v7 + 39);
            *(_DWORD *)&kSkillID = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v12 = IconMgr::GetTexture((char *)(v7 + 43));
            (*(void (__thiscall **)(SkillIcon *, NiSourceTexture *, int, signed int, signed int))(kSkillID + 584))(
              v3,
              v12,
              v11,
              32,
              32);
            v13 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
            v13(
              &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              1u);
            if ( (unsigned __int16)v2 < 0x4E20u )
            {
              SkillIcon::UsingSkillAlphaProperty(v3);
              v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
              v3->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
              Skill::GetAccumulatedEmpowerInfo((Skill::EmpowerInfo *)&kSkillID, v2);
              SkillIcon::SetEmpowerInfo(v3, (Skill::EmpowerInfo)kSkillID);
            }
            else
            {
              v3->m_spBackPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              v3->m_spTopPlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              SkillIcon::UsingItemAlphaProperty(v3);
            }
          }
        }
      }
    }
  }
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (005C1780) --------------------------------------------------------
SkillIcon *__cdecl SkillIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  SkillIcon *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x19Cu);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    SkillIcon::SkillIcon((SkillIcon *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, PgWin *))(*(_DWORD *)v5 + 608))(
                          v5,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (SkillIcon *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (005C18C0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_NiTListBase<DFALL<SkillIcon__>_SkillIcon__>(NiTListBase<DFALL<SkillIcon *>,SkillIcon *> *this)
{
  this->vfptr = (NiTListBase<DFALL<SkillIcon *>,SkillIcon *>Vtbl *)&NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_vftable_;
}
// 9B5164: using guessed type int (__thiscall *NiTListBase_DFALL_SkillIcon ___SkillIcon _____vftable_)(void *p, char);

//----- (005C18D0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_vector_deleting_destructor_(NiTListBase<DFALL<SkillIcon *>,SkillIcon *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<SkillIcon *>,SkillIcon *>Vtbl *)&NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9B5164: using guessed type int (__thiscall *NiTListBase_DFALL_SkillIcon ___SkillIcon _____vftable_)(void *p, char);

//----- (005C1900) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<SkillIcon__>_SkillIcon__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<SkillIcon *>,SkillIcon *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<SkillIcon *> *v3; // esi@1
  NiTListItem<SkillIcon *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<SkillIcon *>,SkillIcon *>Vtbl *)&NiTPointerListBase<DFALL<SkillIcon__>_SkillIcon__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<SkillIcon__>_SkillIcon__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B5164: using guessed type int (__thiscall *NiTListBase_DFALL_SkillIcon ___SkillIcon _____vftable_)(void *p, char);
// 9B5174: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SkillIcon ___SkillIcon _____vftable_)(void *p, char);

//----- (005C1990) --------------------------------------------------------
void *__thiscall SkillIcon::_scalar_deleting_destructor_(SkillIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SkillIcon::_SkillIcon(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005C19C0) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::SetTitle(GuildCombatPropensityChangeWin *this, const char *pkTitle)
{
  ((void (__stdcall *)(_DWORD))this->m_pTitleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkTitle);
}

//----- (005C19E0) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::OnCmdCancel(GuildCombatPropensityChangeWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
}

//----- (005C19F0) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::SetTextMsg(GuildCombatPropensityChangeWin *this, const char *pkMainMessage, const char *pkOkMessage, const char *pkCancelMessage)
{
  GuildCombatPropensityChangeWin *v4; // esi@1

  v4 = this;
  ((void (__stdcall *)(_DWORD))this->m_pMainWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkMainMessage);
  ((void (__stdcall *)(_DWORD))v4->m_pOKWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkOkMessage);
  ((void (__stdcall *)(_DWORD))v4->m_pCancelWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkCancelMessage);
}

//----- (005C1A40) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::OnHelpLink(GuildCombatPropensityChangeWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildChangeAttribute");
}

//----- (005C1A70) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::CheckButtonUpdate(GuildCombatPropensityChangeWin *this, int nIndex)
{
  ColumnBut *v2; // eax@1

  this->m_nChoice = nIndex;
  v2 = this->m_RadoiButLeft;
  if ( nIndex == 1 )
  {
    v2->m_bCheck = 1;
    this->m_RadoiButRight->m_bCheck = 0;
  }
  else
  {
    v2->m_bCheck = 0;
    this->m_RadoiButRight->m_bCheck = 1;
  }
}

//----- (005C1AC0) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::_GuildCombatPropensityChangeWin(GuildCombatPropensityChangeWin *this)
{
  GuildCombatPropensityChangeWin *v1; // esi@1
  PgWinBut *v2; // edi@1
  PgWinBut *v3; // edi@6
  PgWinBut *v4; // edi@11
  PgWinBut *v5; // edi@18
  PgWinBut *v6; // edi@22
  PgWinBut *v7; // edi@26
  int v8; // [sp+Ch] [bp-4h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildCombatPropensityChangeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildCombatPropensityChangeWin::_vftable_;
  v2 = this->m_spQuitButton.m_pObject;
  v8 = 4;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spQuitButton.m_pObject = 0;
  }
  v3 = v1->m_spOKButton.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spOKButton.m_pObject = 0;
  }
  v4 = v1->m_spCancleButton.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spCancleButton.m_pObject = 0;
  }
  LOBYTE(v8) = 3;
  if ( v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager )
    v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.functor.obj_ptr = (void *)v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager(
                                                                              (boost::detail::function::any_pointer)v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                                                                              destroy_functor_tag);
  v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.invoker = 0;
  v5 = v1->m_spCancleButton.m_pObject;
  LOBYTE(v8) = 2;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v6 = v1->m_spOKButton.m_pObject;
  LOBYTE(v8) = 1;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spQuitButton.m_pObject;
  LOBYTE(v8) = 0;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  v8 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B5538: using guessed type int (__stdcall *GuildCombatPropensityChangeWin___vftable_)(int uiFlags);
// 9B5554: using guessed type int (__thiscall *GuildCombatPropensityChangeWin___vftable_)(void *p, char);

//----- (005C1C60) --------------------------------------------------------
bool __thiscall GuildCombatPropensityChangeWin::Create(GuildCombatPropensityChangeWin *this)
{
  GuildCombatPropensityChangeWin *v1; // esi@1
  NiTexturePalette *v2; // edi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  NiSourceTexture *v7; // eax@10
  PgSprData *v8; // eax@13
  D3DXCOLOR v9; // ST14_16@13
  PgWin *v10; // edi@13
  D3DXCOLOR v11; // ST14_16@13
  char *v12; // eax@13
  PgWin *v13; // edi@13
  D3DXCOLOR v14; // ST14_16@13
  char *v15; // eax@13
  NiSourceTexture *v16; // edi@13
  D3DXCOLOR v17; // ST0C_16@15
  D3DXCOLOR v18; // ST0C_16@15
  D3DXCOLOR v19; // ST0C_16@15
  NiNode *v20; // esi@16
  const char *v21; // [sp-4h] [bp-4Ch]@11
  int *v22; // [sp+0h] [bp-48h]@11
  int *v23; // [sp+4h] [bp-44h]@11
  NiSourceTexture *v24; // [sp+8h] [bp-40h]@11
  UIUtil ui; // [sp+1Ch] [bp-2Ch]@10
  int iTop; // [sp+30h] [bp-18h]@4
  int iLeft; // [sp+34h] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+38h] [bp-10h]@1
  int v29; // [sp+44h] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v2 = dword_B70448;
  v29 = 0;
  iLeft = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildChangeAttribute.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, v2);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v1->baseclass_0, 0, 0, v4, 0, 0, "GuildCombatPropensityChangeWin", 0) )
  {
    v5 = spNode.m_pObject;
    v29 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v29) = 1;
  UIUtil::SetParent(&ui, &v1->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iLeft, iTop);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  v7 = MenuTexMgr::GetTexture(0x13u);
  if ( v7 )
  {
    v24 = v7;
    v23 = &iTop;
    v22 = &iLeft;
    v21 = "Theme";
  }
  else
  {
    v24 = 0;
    v23 = &iTop;
    v22 = &iLeft;
    v21 = "Theme";
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v21, v22, v23, v24);
  PgWinSpr::CreateWin(iLeft, iTop, v8, &v1->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  *(_QWORD *)&v9.r = *(_QWORD *)&Color::m_kDxYellowColor;
  *(_QWORD *)&v9.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
  v1->m_pTitleWin = UIUtil::CreateTextNoSpr(&ui, "WinTitle", byte_9B5436, COERCE_D3DXCOLOR(v9.r), 5u);
  v1->m_RadoiButLeft = UIUtil::CreateCheckButton(&ui, 2u, "RadioBox01", 0, 2);
  v1->m_RadoiButRight = UIUtil::CreateCheckButton(&ui, 3u, "RadioBox02", 0, 2);
  v10 = (PgWin *)UIUtil::CreateButton(&ui, 0, "Btn01", 0, 3);
  *(_QWORD *)&v11.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v11.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v12 = TextData::Get(0x4F5F499Fu);
  UIUtil::CreateAttachedText(&ui, v10, v12, COERCE_D3DXCOLOR(v11.r), 5u);
  v13 = (PgWin *)UIUtil::CreateButton(&ui, 1u, "Btn02", 0, 3);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = TextData::Get(0x88A297E1u);
  UIUtil::CreateAttachedText(&ui, v13, v15, COERCE_D3DXCOLOR(v14.r), 5u);
  v16 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    UIUtil::CreateBtn(&ui, 4u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v16);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v1->m_pMainWin = UIUtil::CreateText(&ui, "Text01", "test", 0, COERCE_D3DXCOLOR(v17.r), 5u, 0, 0);
  *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v1->m_pOKWin = UIUtil::CreateText(&ui, "Text02", "test2", 0, COERCE_D3DXCOLOR(v18.r), 5u, 0, 0);
  *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v1->m_pCancelWin = UIUtil::CreateText(&ui, "Text03", "test3", 0, COERCE_D3DXCOLOR(v19.r), 5u, 0, 0);
  ((void (__thiscall *)(GuildCombatPropensityChangeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v1,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v29) = 0;
  UIUtil::_UIUtil(&ui);
  v29 = -1;
  if ( spNode.m_pObject )
  {
    v20 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v20 )
        v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C2070) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::GuildCombatPropensityChangeWin(GuildCombatPropensityChangeWin *this)
{
  GuildCombatPropensityChangeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildCombatPropensityChangeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildCombatPropensityChangeWin::_vftable_;
  v1->m_spQuitButton.m_pObject = 0;
  v1->m_spOKButton.m_pObject = 0;
  v1->m_spCancleButton.m_pObject = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.invoker = 0;
  v1->m_nChoice = 0;
}
// 9B5538: using guessed type int (__stdcall *GuildCombatPropensityChangeWin___vftable_)(int uiFlags);
// 9B5554: using guessed type int (__thiscall *GuildCombatPropensityChangeWin___vftable_)(void *p, char);

//----- (005C20C0) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::OnCmdOk(GuildCombatPropensityChangeWin *this)
{
  GuildCombatPropensityChangeWin *v1; // esi@1
  bool v2; // zf@1
  boost::function1<void,int,std::allocator<void> > *v3; // ecx@1

  v1 = this;
  v2 = this->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager == 0;
  v3 = (boost::function1<void,int,std::allocator<void> > *)&this->m_OKButtonMsgFunc;
  if ( !v2 && v1->m_nChoice )
    boost::function1<void_int_std::allocator<void>>::operator__(v3, v1->m_nChoice);
  PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
}

//----- (005C2100) --------------------------------------------------------
GuildCombatPropensityChangeWin *__cdecl GuildCombatPropensityChangeWin::CreateWin()
{
  void *v0; // eax@1
  void *v1; // esi@1
  PgWin *v2; // edi@8
  GuildCombatPropensityChangeWin *v3; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x190u);
  v1 = v0;
  result.m_pObject = (PgWin *)v0;
  v5 = 0;
  if ( v0 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v0);
    *(_DWORD *)v1 = &GuildCombatPropensityChangeWin::_vftable_;
    *((_DWORD *)v1 + 58) = &GuildCombatPropensityChangeWin::_vftable_;
    *((_DWORD *)v1 + 86) = 0;
    *((_DWORD *)v1 + 87) = 0;
    *((_DWORD *)v1 + 88) = 0;
    *((_DWORD *)v1 + 97) = 0;
    *((_DWORD *)v1 + 98) = 0;
    *((_DWORD *)v1 + 99) = 0;
    *((_DWORD *)v1 + 96) = 0;
  }
  else
  {
    v1 = 0;
  }
  if ( v1 )
    InterlockedIncrement((volatile LONG *)v1 + 1);
  v5 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v1);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 540))(v1) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v1 + 356))(v1);
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = (GuildCombatPropensityChangeWin *)v1;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v1);
    if ( result.m_pObject )
    {
      v2 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v2 )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
    }
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = 0;
  }
  return v3;
}
// 9B5538: using guessed type int (__stdcall *GuildCombatPropensityChangeWin___vftable_)(int uiFlags);
// 9B5554: using guessed type int (__thiscall *GuildCombatPropensityChangeWin___vftable_)(void *p, char);

//----- (005C2270) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::RegisterCallBack(GuildCombatPropensityChangeWin *this, boost::function<void __cdecl(int),std::allocator<void> > CallBackFunc)
{
  int v2; // eax@1
  char *v3; // esi@1
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ecx@1
  boost::detail::function::any_pointer (__cdecl *v5)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edi@1
  boost::detail::function::unusable *(__cdecl *v6)(boost::detail::function::unusable *, boost::detail::function::any_pointer, int); // ebx@1
  boost::detail::function::any_pointer (__cdecl *v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edx@4
  int v8; // edx@4
  char v9; // [sp+0h] [bp-18h]@3
  int v10; // [sp+14h] [bp-4h]@1

  v2 = 0;
  v3 = (char *)&this->m_OKButtonMsgFunc;
  v4 = CallBackFunc.baseclass_0.baseclass_0.manager;
  v5 = 0;
  v6 = 0;
  v10 = 0;
  if ( (_DWORD)CallBackFunc.baseclass_0.baseclass_0.manager )
  {
    v6 = CallBackFunc.baseclass_0.invoker;
    v5 = CallBackFunc.baseclass_0.baseclass_0.manager;
    v2 = (int)CallBackFunc.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)CallBackFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
    v4 = CallBackFunc.baseclass_0.baseclass_0.manager;
  }
  if ( v3 != &v9 )
  {
    v7 = v5;
    v5 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v3;
    *(_DWORD *)v3 = v7;
    v8 = v2;
    v2 = *((_DWORD *)v3 + 1);
    *((_DWORD *)v3 + 1) = v8;
    *((_DWORD *)v3 + 2) = v6;
  }
  if ( v5 )
  {
    v5((boost::detail::function::any_pointer)v2, destroy_functor_tag);
    v4 = CallBackFunc.baseclass_0.baseclass_0.manager;
  }
  v10 = -1;
  if ( v4 )
    v4(CallBackFunc.baseclass_0.baseclass_0.functor, destroy_functor_tag);
}

//----- (005C2320) --------------------------------------------------------
void __thiscall GuildCombatPropensityChangeWin::OnCommand(GuildCombatPropensityChangeWin *this, unsigned int wParam, int lParam)
{
  ColumnBut *v3; // edx@4
  ColumnBut *v4; // edx@5
  PgFrameWork *v5; // eax@6

  switch ( wParam )
  {
    case 0u:
      GuildCombatPropensityChangeWin::OnCmdOk(this);
      break;
    case 1u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
      break;
    case 2u:
      v3 = this->m_RadoiButLeft;
      this->m_nChoice = 1;
      v3->m_bCheck = 1;
      this->m_RadoiButRight->m_bCheck = 0;
      break;
    case 3u:
      v4 = this->m_RadoiButLeft;
      this->m_nChoice = 2;
      v4->m_bCheck = 0;
      this->m_RadoiButRight->m_bCheck = 1;
      break;
    case 4u:
      v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v5 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v5, "GuildChangeAttribute");
      break;
    default:
      return;
  }
}

//----- (005C23E0) --------------------------------------------------------
GuildCombatPropensityChangeWin *__cdecl GuildCombatPropensityChangeWin::Modal(const char *pkTitleName)
{
  GuildCombatPropensityChangeWin *result; // eax@1
  PgWin *v2; // esi@1

  result = GuildCombatPropensityChangeWin::CreateWin();
  v2 = (PgWin *)result;
  if ( result )
  {
    ((void (__stdcall *)(_DWORD))result->m_pTitleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkTitleName);
    PgWinMgr::DoModal(&Pgg_kWinMgr, v2, 0, 0, 0);
    result = (GuildCombatPropensityChangeWin *)v2;
  }
  return result;
}

//----- (005C2420) --------------------------------------------------------
GuildCombatPropensityChangeWin *__cdecl GuildCombatPropensityChangeWin::Modeless(const char *pkTitleName)
{
  GuildCombatPropensityChangeWin *result; // eax@1
  PgWin *v2; // esi@1

  result = GuildCombatPropensityChangeWin::CreateWin();
  v2 = (PgWin *)result;
  if ( result )
  {
    ((void (__stdcall *)(_DWORD))result->m_pTitleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkTitleName);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    result = (GuildCombatPropensityChangeWin *)v2;
  }
  return result;
}

//----- (005C2460) --------------------------------------------------------
void *__thiscall GuildCombatPropensityChangeWin::_vector_deleting_destructor_(GuildCombatPropensityChangeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildCombatPropensityChangeWin::_GuildCombatPropensityChangeWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005C2490) --------------------------------------------------------
void __thiscall boost::function1<void_int_std::allocator<void>>::operator__(boost::function1<void,int,std::allocator<void> > *this, int a0)
{
  std::exception thisa; // [sp+0h] [bp-1Ch]@2
  char *_What; // [sp+Ch] [bp-10h]@2
  int v4; // [sp+18h] [bp-4h]@3

  if ( !this->baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    v4 = 0;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&thisa);
  }
  this->invoker(
    (boost::detail::function::unusable *)((char *)&a0 + 3),
    (boost::detail::function::any_pointer)this->baseclass_0.functor.obj_ptr,
    a0);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (005C2510) --------------------------------------------------------
void __thiscall GuildFoundWin::OnCancel(GuildFoundWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005C2530) --------------------------------------------------------
void __thiscall GuildFoundWin::OnHelpLink(GuildFoundWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildCreate");
}

//----- (005C2560) --------------------------------------------------------
void __thiscall GuildFoundWin::OnWarCheckBox(GuildFoundWin *this)
{
  this->m_pkWarCheckBox->m_bCheck = 1;
  this->m_pkNoWarCheckBox->m_bCheck = 0;
}

//----- (005C2580) --------------------------------------------------------
void __thiscall GuildFoundWin::OnNoWarCheckBox(GuildFoundWin *this)
{
  this->m_pkWarCheckBox->m_bCheck = 0;
  this->m_pkNoWarCheckBox->m_bCheck = 1;
}

//----- (005C25A0) --------------------------------------------------------
void __thiscall GuildFoundWin::OnShowWin(GuildFoundWin *this)
{
  GuildFoundWin *v1; // esi@1
  EditWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_spIDEdit.m_pObject;
  v1->m_eFocusStatus = 0;
  ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
  ((void (*)(void))v1->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
  ((void (*)(void))v1->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (005C25E0) --------------------------------------------------------
void __thiscall GuildFoundWin::GuildFoundWin(GuildFoundWin *this)
{
  GuildFoundWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildFoundWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildFoundWin::_vftable_;
  v1->m_spIDEdit.m_pObject = 0;
  v1->m_spPasswdEdit.m_pObject = 0;
}
// 9B5910: using guessed type int (__stdcall *GuildFoundWin___vftable_)(int uiFlags);
// 9B592C: using guessed type int (__thiscall *GuildFoundWin___vftable_)(void *p, char);

//----- (005C2610) --------------------------------------------------------
void __thiscall GuildFoundWin::_GuildFoundWin(GuildFoundWin *this)
{
  GuildFoundWin *v1; // esi@1
  EditWin *v2; // edi@1
  EditWin *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildFoundWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildFoundWin::_vftable_;
  v2 = this->m_spPasswdEdit.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_spIDEdit.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B5910: using guessed type int (__stdcall *GuildFoundWin___vftable_)(int uiFlags);
// 9B592C: using guessed type int (__thiscall *GuildFoundWin___vftable_)(void *p, char);

//----- (005C26C0) --------------------------------------------------------
bool __thiscall GuildFoundWin::Create(GuildFoundWin *this, PgFrameWork *pkFrameWork)
{
  GuildFoundWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool v7; // zf@7
  int v9; // ebx@11
  int v10; // edi@11
  NiSourceTexture *v11; // eax@11
  PgSprData *v12; // eax@14
  PgSprData *v13; // eax@14
  PgSprData *v14; // eax@14
  PgFont *v15; // eax@18
  PgWinText *v16; // ebx@18
  NiRefObjectVtbl *v17; // ST54_4@18
  char *v18; // eax@18
  PgSprData *v19; // ebx@18
  NiSourceTexture *v20; // ebx@18
  PgSprData *v21; // ebx@19
  PgSprData *v22; // ebx@20
  PgSprData::PgHitTester *v23; // eax@20
  unsigned int v24; // ebx@20
  unsigned int v25; // ST54_4@20
  PgFont *v26; // eax@20
  PgWinText *v27; // ebx@20
  NiRefObjectVtbl *v28; // ST54_4@20
  char *v29; // eax@20
  PgSprData *v30; // ebx@20
  NiPointer<PgSprData::PgHitTester> *v31; // edx@20
  unsigned int v32; // ebx@20
  unsigned int v33; // ST54_4@20
  PgFont *v34; // eax@20
  PgWinText *v35; // ebx@20
  NiRefObjectVtbl *v36; // ST54_4@20
  char *v37; // eax@20
  PgSprData *v38; // ebx@20
  PgSprData *v39; // ebx@20
  ColumnBut *v40; // eax@20
  NiNode *v41; // edx@20
  PgFont *v42; // eax@22
  int v43; // ebx@22
  NiRefObjectVtbl *v44; // ST54_4@22
  char *v45; // eax@22
  PgFont *v46; // eax@23
  NiRefObjectVtbl *v47; // ST54_4@23
  char *v48; // eax@23
  PgFont *v49; // eax@24
  NiRefObjectVtbl *v50; // ST54_4@24
  char *v51; // eax@24
  PgFont *v52; // eax@25
  NiRefObjectVtbl *v53; // ST54_4@25
  char *v54; // eax@25
  PgFont *v55; // eax@26
  NiRefObjectVtbl *v56; // ST54_4@26
  char *v57; // eax@26
  PgFont *v58; // eax@27
  PgWinText *v59; // edi@27
  NiRefObjectVtbl *v60; // ebx@27
  char *v61; // eax@27
  PgSprData *v62; // eax@27
  EditWin *v63; // eax@28
  bool v64; // bl@29
  PgSprData *v65; // eax@29
  EditWin *v66; // eax@30
  const char *v67; // [sp-20h] [bp-44h]@12
  int *v68; // [sp-1Ch] [bp-40h]@12
  int *v69; // [sp-18h] [bp-3Ch]@12
  NiSourceTexture *v70; // [sp-14h] [bp-38h]@12
  unsigned int uiWidth; // [sp+4h] [bp-20h]@14
  unsigned int uiHeight; // [sp+8h] [bp-1Ch]@14
  NiPointer<NiNode> spNode; // [sp+Ch] [bp-18h]@1
  int uiLeft; // [sp+10h] [bp-14h]@4
  int uiTop; // [sp+14h] [bp-10h]@4
  int v76; // [sp+20h] [bp-4h]@1
  int pkTextWin; // [sp+2Ch] [bp+8h]@11
  PgWinText *pkTextWina; // [sp+2Ch] [bp+8h]@22
  PgWinText *pkTextWinb; // [sp+2Ch] [bp+8h]@23
  PgWinText *pkTextWinc; // [sp+2Ch] [bp+8h]@24
  PgWinText *pkTextWind; // [sp+2Ch] [bp+8h]@25
  PgWinText *pkTextWine; // [sp+2Ch] [bp+8h]@26

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v76 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildCreate.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildCreateWin", 0) )
  {
    v6 = spNode.m_pObject;
    v76 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_8;
  }
  v9 = uiTop;
  v10 = uiLeft;
  pkTextWin = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v70 = v11;
    v69 = &uiTop;
    v68 = &uiLeft;
    v67 = "Theme";
  }
  else
  {
    v70 = 0;
    v69 = &uiTop;
    v68 = &uiLeft;
    v67 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v67, v68, v69, v70);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v76 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
LABEL_8:
    if ( !v7 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    return 0;
  }
  v15 = Font::Get(0);
  v16 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop,
          uiWidth,
          uiHeight,
          v15,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v16,
    1u);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v16,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData::Get(0x8DD4E1DBu);
  v17[118].__vecDelDtor((NiRefObject *)v16, (unsigned int)v18);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v10, uiTop - pkTextWin, v19, &v2->baseclass_0.baseclass_0.baseclass_0);
  v20 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v20);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - pkTextWin, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
  }
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddFrndNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "AddFrndClick");
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "AddFrndOver");
  PgWinBut::CreateWin(uiLeft - v10, uiTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  v23 = v22->m_akHitTester.m_pBase->m_pObject;
  v24 = v23->m_uiHeight;
  v25 = v23->m_uiWidth;
  v26 = Font::Get(0);
  v27 = PgWinText::CreateWin(uiLeft - v10, uiTop + 1, v25, v24, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    5u);
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData::Get(0x4F5F499Fu);
  v28[118].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v27,
    0);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddFrndNor01", &uiLeft, &uiTop, 0);
  PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "AddFrndClick01");
  PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "AddFrndOver01");
  PgWinBut::CreateWin(uiLeft - v10, uiTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  v31 = v30->m_akHitTester.m_pBase;
  v32 = v31->m_pObject->m_uiHeight;
  v33 = v31->m_pObject->m_uiWidth;
  v34 = Font::Get(0);
  v35 = PgWinText::CreateWin(uiLeft - v10, uiTop + 1, v33, v32, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v35,
    5u);
  v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v37 = TextData::Get(0x88A297E1u);
  v36[118].__vecDelDtor((NiRefObject *)v35, (unsigned int)v37);
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v35,
    0);
  v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyNmChNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v38, &spNode.m_pObject->baseclass_0, "MyNmChClick");
  v2->m_pkWarCheckBox = ColumnBut::CreateWin(uiLeft, uiTop, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0);
  v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyNmChNor01", &uiLeft, &uiTop, 0);
  PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "MyNmChClick01");
  v40 = ColumnBut::CreateWin(uiLeft, uiTop, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0);
  v41 = spNode.m_pObject;
  v2->m_pkNoWarCheckBox = v40;
  if ( !PgUtil::GetTriShapeRect(&v41->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v42 = Font::Get(SMALL),
        v43 = pkTextWin,
        pkTextWina = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - pkTextWin,
                       uiWidth,
                       uiHeight,
                       v42,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v44 = pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v45 = TextData::Get(0x381C213Cu),
        v44[118].__vecDelDtor((NiRefObject *)pkTextWina, (unsigned int)v45),
        ((void (__stdcall *)(_DWORD))pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v46 = Font::Get(SMALL),
        pkTextWinb = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v43,
                       uiWidth,
                       uiHeight,
                       v46,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v47 = pkTextWinb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v48 = TextData::Get(0x2A3A5E67u),
        v47[118].__vecDelDtor((NiRefObject *)pkTextWinb, (unsigned int)v48),
        ((void (__stdcall *)(_DWORD))pkTextWinb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text05", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v49 = Font::Get(SMALL),
        pkTextWinc = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v43,
                       uiWidth,
                       uiHeight,
                       v49,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v50 = pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v51 = TextData::Get(0x829378A1u),
        v50[118].__vecDelDtor((NiRefObject *)pkTextWinc, (unsigned int)v51),
        ((void (__stdcall *)(_DWORD))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text09", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v52 = Font::Get(SMALL),
        pkTextWind = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v43,
                       uiWidth,
                       uiHeight,
                       v52,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v53 = pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v54 = TextData::Get(0x7B8DCCF0u),
        v53[118].__vecDelDtor((NiRefObject *)pkTextWind, (unsigned int)v54),
        ((void (__stdcall *)(_DWORD))pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text06", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v55 = Font::Get(SMALL),
        pkTextWine = PgWinText::CreateWin(
                       uiLeft - v10,
                       uiTop - v43,
                       uiWidth,
                       uiHeight,
                       v55,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        v56 = pkTextWine->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v57 = TextData::Get(0x8A747095u),
        v56[118].__vecDelDtor((NiRefObject *)pkTextWine, (unsigned int)v57),
        ((void (__stdcall *)(_DWORD))pkTextWine->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text08", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
    v76 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v58 = Font::Get(SMALL);
  v59 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop - v43,
          uiWidth,
          uiHeight,
          v58,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v60 = v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v61 = TextData::Get(0x2C676292u);
  v60[118].__vecDelDtor((NiRefObject *)v59, (unsigned int)v61);
  v59->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
  v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v59,
    0);
  LOBYTE(v60) = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v62 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, v62, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( (_BYTE)v60 )
  {
    v63 = EditWin::CreateWin(
            uiLeft + 2,
            uiTop + 2,
            uiWidth,
            uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            NORMAL,
            0x10u,
            3u,
            0,
            0,
            1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spIDEdit, (NiD3DDefaultShader *)v63);
  }
  v64 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text07", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v65 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text07", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft, uiTop, v65, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v64 )
  {
    v66 = EditWin::CreateWin(
            uiLeft + 2,
            uiTop + 2,
            uiWidth,
            uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            PASSWD,
            8u,
            3u,
            0,
            0,
            1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spPasswdEdit, (NiD3DDefaultShader *)v66);
  }
  v2->m_pkWarCheckBox->m_bCheck = 1;
  v2->m_pkNoWarCheckBox->m_bCheck = 0;
  v76 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C3090) --------------------------------------------------------
void __thiscall GuildFoundWin::OnOk(GuildFoundWin *this)
{
  GuildFoundWin *v1; // esi@1
  EditWin *v2; // ecx@1
  int v3; // eax@1
  char *v4; // edx@1
  char v5; // cl@2
  EditWin *v6; // ecx@5
  int v7; // eax@5
  char *v8; // edx@5
  char v9; // cl@6
  int v10; // eax@7
  char v11; // cl@8
  int v12; // esi@14
  char *v13; // eax@18
  DirectUserMsgBody_DelegatePacket kBody; // [sp+8h] [bp-50h]@14
  PROTO_NC_GUILD_MAKE_REQ kReq; // [sp+14h] [bp-44h]@1
  char acTitle[17]; // [sp+34h] [bp-24h]@1
  char acPassword[9]; // [sp+48h] [bp-10h]@5
  unsigned int v18; // [sp+54h] [bp-4h]@1
  int v19; // [sp+58h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v1 = this;
  v2 = this->m_spIDEdit.m_pObject;
  *(_QWORD *)&kReq.Name.n4_name[8] = 0i64;
  *(_QWORD *)&kReq.Name.n4_name[0] = 0i64;
  *(_QWORD *)&kReq.Password.n3_name[4] = 0i64;
  *(_DWORD *)&kReq.Password.n3_name[0] = 0;
  *(_DWORD *)acTitle = 0;
  *(_DWORD *)&acTitle[4] = 0;
  *(_DWORD *)&acTitle[8] = 0;
  *(_DWORD *)&acTitle[12] = 0;
  acTitle[16] = 0;
  v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v4 = &acTitle[-v3];
  do
  {
    v5 = *(_BYTE *)v3;
    v4[v3] = *(_BYTE *)v3;
    ++v3;
  }
  while ( v5 );
  if ( TextFilterTable::IsBadName(acTitle) || TextFilterTable::IsForbiddenGuildName(acTitle) )
  {
    v13 = TextData::Get(0x329D7E83u);
    MsgBox::Modeless(MSGBOX_OK, v13);
  }
  else
  {
    *(_QWORD *)&kReq.Name.n4_name[8] = 0i64;
    *(_QWORD *)&kReq.Name.n4_name[0] = 0i64;
    strncpy(kReq.Name.n4_name, acTitle, 0x10u);
    v6 = v1->m_spPasswdEdit.m_pObject;
    *(_DWORD *)acPassword = 0;
    *(_DWORD *)&acPassword[4] = 0;
    acPassword[8] = 0;
    v7 = ((int (*)(void))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v8 = &acPassword[-v7];
    do
    {
      v9 = *(_BYTE *)v7;
      v8[v7] = *(_BYTE *)v7;
      ++v7;
    }
    while ( v9 );
    *(_QWORD *)&kReq.Password.n3_name[4] = 0i64;
    *(_DWORD *)&kReq.Password.n3_name[0] = 0;
    strncpy(kReq.Password.n3_name, acPassword, 0xCu);
    v10 = (int)acPassword;
    do
      v11 = *(_BYTE *)v10++;
    while ( v11 );
    if ( (unsigned int)(v10 - (_DWORD)&acPassword[1] - 1) <= 7 )
    {
      if ( v1->m_pkWarCheckBox->m_bCheck )
        kReq.Type = 1;
      if ( v1->m_pkNoWarCheckBox->m_bCheck )
        kReq.Type = 0;
      v12 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      *(_DWORD *)&kBody.wDepartment = 327709;
      kBody.pvProto = &kReq;
      kBody.dwPacketSize = 29;
      if ( *(_DWORD *)(v12 + 4) )
      {
        (*(void (__stdcall **)(signed int, DirectUserMsgBody_DelegatePacket *, int))(**(_DWORD **)(v12 + 4) + 4))(
          44,
          &kBody,
          v12);
        if ( *(_DWORD *)(v12 + 4) )
          (*(void (__stdcall **)(signed int, DirectUserMsgBody_DelegatePacket *, int))(**(_DWORD **)(v12 + 4) + 20))(
            44,
            &kBody,
            v12);
      }
      (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_DelegatePacket *, int))(*(_DWORD *)v12 + 20))(
        v12,
        44,
        &kBody,
        v12);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005C3250) --------------------------------------------------------
void __thiscall GuildFoundWin::OnEditEnd(GuildFoundWin *this, unsigned int wParam, int lParam)
{
  GuildFoundWin *v3; // esi@1
  GuildFoundWin::EDIT_FOCUS_STATUS v4; // eax@2

  v3 = this;
  if ( wParam != 4 )
  {
    v4 = this->m_eFocusStatus;
    if ( v4 )
    {
      if ( v4 == 1 )
      {
        if ( wParam == 2 )
        {
          ((void (*)(void))this->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
          ((void (__stdcall *)(_DWORD))v3->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
        }
        else
        {
          if ( wParam == 1 )
            GuildFoundWin::OnOk(this);
        }
      }
    }
    else
    {
      ((void (__stdcall *)(_DWORD))this->m_spIDEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
      ((void (*)(void))v3->m_spPasswdEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
    }
  }
}

//----- (005C32D0) --------------------------------------------------------
void __thiscall GuildFoundWin::OnCommand(GuildFoundWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@6

  switch ( wParam )
  {
    case 0xCu:
      this->m_pkWarCheckBox->m_bCheck = 1;
      this->m_pkNoWarCheckBox->m_bCheck = 0;
      break;
    case 0xDu:
      this->m_pkWarCheckBox->m_bCheck = 0;
      this->m_pkNoWarCheckBox->m_bCheck = 1;
      break;
    case 0xAu:
      GuildFoundWin::OnOk(this);
      break;
    case 0xBu:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 0xEu:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "GuildCreate");
      break;
    default:
      return;
  }
}

//----- (005C3380) --------------------------------------------------------
void __thiscall GuildFoundWin::UpdateMeWin(GuildFoundWin *this, float fCurTime)
{
  GuildFoundWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (005C33E0) --------------------------------------------------------
GuildFoundWin *__cdecl GuildFoundWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildFoundWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x16Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildFoundWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildFoundWin::_vftable_;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildFoundWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B5910: using guessed type int (__stdcall *GuildFoundWin___vftable_)(int uiFlags);
// 9B592C: using guessed type int (__thiscall *GuildFoundWin___vftable_)(void *p, char);

//----- (005C3530) --------------------------------------------------------
void *__thiscall GuildFoundWin::_scalar_deleting_destructor_(GuildFoundWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildFoundWin::_GuildFoundWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005C3560) --------------------------------------------------------
void __thiscall GuildMasterMenuWin::GuildMasterMenuWin(GuildMasterMenuWin *this)
{
  GuildMasterMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildMasterMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildMasterMenuWin::_vftable_;
}
// 9B5CE4: using guessed type int (__stdcall *GuildMasterMenuWin___vftable_)(int uiFlags);
// 9B5D04: using guessed type int (__thiscall *GuildMasterMenuWin___vftable_)(void *p, char);

//----- (005C3580) --------------------------------------------------------
void __thiscall GuildMasterMenuWin::_GuildMasterMenuWin(GuildMasterMenuWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildMasterMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildMasterMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B5CE4: using guessed type int (__stdcall *GuildMasterMenuWin___vftable_)(int uiFlags);
// 9B5D04: using guessed type int (__thiscall *GuildMasterMenuWin___vftable_)(void *p, char);

//----- (005C3600) --------------------------------------------------------
void __thiscall GuildMasterMenuWin::OnHelpLink(GuildMasterMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildMenu");
}

//----- (005C3630) --------------------------------------------------------
void __thiscall GuildMasterMenuWin::OnCommand(GuildMasterMenuWin *this, unsigned int wParam, int lParam)
{
  char *v3; // esi@2

  switch ( wParam )
  {
    case 6u:
      v3 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          45,
          0,
          v3);
        if ( *((_DWORD *)v3 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(45, 0, v3);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 45, 0, v3);
      break;
    case 0xCu:
      GuildMasterMenuWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005C36C0) --------------------------------------------------------
bool __thiscall GuildMasterMenuWin::Create(GuildMasterMenuWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // ebx@10
  int v9; // edi@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // ebx@13
  NiSourceTexture *v15; // ebx@13
  PgSprData *v16; // ebx@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // ebx@21
  char *v20; // eax@21
  PgSprData *v21; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v22; // edx@21
  unsigned int v23; // ebx@21
  PgFont *v24; // eax@21
  PgWinText *v25; // ebx@21
  char *v26; // eax@21
  PgSprData *v27; // ebx@21
  PgWinBut *v28; // eax@21
  NiPointer<PgSprData::PgHitTester> *v29; // ecx@21
  unsigned int v30; // ebx@21
  PgFont *v31; // eax@21
  PgWinText *v32; // ebx@21
  char *v33; // eax@21
  PgSprData *v34; // ebx@21
  PgWinBut *v35; // eax@21
  NiPointer<PgSprData::PgHitTester> *v36; // ecx@21
  unsigned int v37; // ebx@21
  PgFont *v38; // eax@21
  PgWinText *v39; // ebx@21
  char *v40; // eax@21
  PgSprData *v41; // ebx@21
  PgWinBut *v42; // eax@21
  NiPointer<PgSprData::PgHitTester> *v43; // ecx@21
  unsigned int v44; // ebx@21
  PgFont *v45; // eax@21
  PgWinText *v46; // ebx@21
  char *v47; // eax@21
  PgSprData *v48; // ebx@21
  PgWinBut *v49; // eax@21
  NiPointer<PgSprData::PgHitTester> *v50; // ecx@21
  unsigned int v51; // ebx@21
  PgFont *v52; // eax@21
  PgWinText *v53; // ebx@21
  char *v54; // eax@21
  PgSprData *v55; // ebx@21
  PgWinBut *v56; // eax@21
  NiPointer<PgSprData::PgHitTester> *v57; // ecx@21
  unsigned int v58; // ebx@21
  PgFont *v59; // eax@21
  PgWinText *v60; // edi@21
  NiRefObjectVtbl *v61; // ebx@21
  char *v62; // eax@21
  NiNode *v63; // esi@22
  const char *v64; // [sp+68h] [bp-40h]@11
  int *v65; // [sp+6Ch] [bp-3Ch]@11
  int *v66; // [sp+70h] [bp-38h]@11
  NiSourceTexture *v67; // [sp+74h] [bp-34h]@11
  unsigned int uiWidth; // [sp+88h] [bp-20h]@15
  unsigned int uiHeight; // [sp+8Ch] [bp-1Ch]@15
  int uiLeft; // [sp+90h] [bp-18h]@4
  int uiTop; // [sp+94h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+98h] [bp-10h]@1
  int v73; // [sp+A4h] [bp-4h]@1
  int iYOff; // [sp+B0h] [bp+8h]@10
  NiRefObjectVtbl *iYOffa; // [sp+B0h] [bp+8h]@21
  unsigned int iYOffb; // [sp+B0h] [bp+8h]@21
  NiRefObjectVtbl *iYOffc; // [sp+B0h] [bp+8h]@21
  unsigned int iYOffd; // [sp+B0h] [bp+8h]@21
  NiRefObjectVtbl *iYOffe; // [sp+B0h] [bp+8h]@21
  unsigned int iYOfff; // [sp+B0h] [bp+8h]@21
  NiRefObjectVtbl *iYOffg; // [sp+B0h] [bp+8h]@21
  unsigned int iYOffh; // [sp+B0h] [bp+8h]@21
  NiRefObjectVtbl *iYOffi; // [sp+B0h] [bp+8h]@21
  unsigned int iYOffj; // [sp+B0h] [bp+8h]@21
  NiRefObjectVtbl *iYOffk; // [sp+B0h] [bp+8h]@21
  unsigned int iYOffl; // [sp+B0h] [bp+8h]@21

  v2 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v73 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v5, 0, pkFrameWork, "GuildMasterMenuWin", 0) )
  {
    v6 = spNode.m_pObject;
    v73 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v67 = v10;
    v66 = &uiTop;
    v65 = &uiLeft;
    v64 = "Theme";
  }
  else
  {
    v67 = 0;
    v66 = &uiTop;
    v65 = &uiLeft;
    v64 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v64, v65, v66, v67);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0, 0xCu, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(0);
    v19 = PgWinText::CreateWin(uiLeft - v9, uiTop, uiWidth, uiHeight, v18, &v2->baseclass_0.baseclass_0, 0, 0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    iYOffa = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData::Get(0x363D3C93u);
    iYOffa[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v20);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v21, &v2->baseclass_0.baseclass_0, 6u, 0, 0);
    v22 = v21->m_akHitTester.m_pBase;
    v23 = v22->m_pObject->m_uiHeight;
    iYOffb = v22->m_pObject->m_uiWidth;
    v24 = Font::Get(0);
    v25 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffb, v23, v24, &v2->baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    iYOffc = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData::Get(0xC9253B46u);
    iYOffc[118].__vecDelDtor((NiRefObject *)v25, (unsigned int)v26);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "Btn03Over");
    v28 = PgWinBut::CreateWin(uiLeft - v9, uiTop, v27, &v2->baseclass_0.baseclass_0, 7u, 0, 0);
    v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v28,
      0);
    v29 = v27->m_akHitTester.m_pBase;
    v30 = v29->m_pObject->m_uiHeight;
    iYOffd = v29->m_pObject->m_uiWidth;
    v31 = Font::Get(0);
    v32 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffd, v30, v31, &v2->baseclass_0.baseclass_0, 0, 0);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v32,
      5u);
    iYOffe = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v33 = TextData::Get(0x7D7EEFDCu);
    iYOffe[118].__vecDelDtor((NiRefObject *)v32, (unsigned int)v33);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v32,
      0);
    v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v34, &spNode.m_pObject->baseclass_0, "Btn03Click");
    PgSprData::Add(v34, &spNode.m_pObject->baseclass_0, "Btn03Over");
    v35 = PgWinBut::CreateWin(uiLeft - v9, uiTop, v34, &v2->baseclass_0.baseclass_0, 8u, 0, 0);
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v35,
      0);
    v36 = v34->m_akHitTester.m_pBase;
    v37 = v36->m_pObject->m_uiHeight;
    iYOfff = v36->m_pObject->m_uiWidth;
    v38 = Font::Get(0);
    v39 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOfff, v37, v38, &v2->baseclass_0.baseclass_0, 0, 0);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v39,
      5u);
    iYOffg = v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v40 = TextData::Get(0x8AD5E9E2u);
    iYOffg[118].__vecDelDtor((NiRefObject *)v39, (unsigned int)v40);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v39,
      0);
    v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "Btn04Click");
    PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "Btn04Over");
    v42 = PgWinBut::CreateWin(uiLeft - v9, uiTop, v41, &v2->baseclass_0.baseclass_0, 9u, 0, 0);
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v42,
      0);
    v43 = v41->m_akHitTester.m_pBase;
    v44 = v43->m_pObject->m_uiHeight;
    iYOffh = v43->m_pObject->m_uiWidth;
    v45 = Font::Get(0);
    v46 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffh, v44, v45, &v2->baseclass_0.baseclass_0, 0, 0);
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v46,
      5u);
    iYOffi = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v47 = TextData::Get(0x82CBDCE2u);
    iYOffi[118].__vecDelDtor((NiRefObject *)v46, (unsigned int)v47);
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v46,
      0);
    v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn05Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v48, &spNode.m_pObject->baseclass_0, "Btn05Click");
    PgSprData::Add(v48, &spNode.m_pObject->baseclass_0, "Btn05Over");
    v49 = PgWinBut::CreateWin(uiLeft - v9, uiTop, v48, &v2->baseclass_0.baseclass_0, 0xAu, 0, 0);
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v49,
      0);
    v50 = v48->m_akHitTester.m_pBase;
    v51 = v50->m_pObject->m_uiHeight;
    iYOffj = v50->m_pObject->m_uiWidth;
    v52 = Font::Get(0);
    v53 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffj, v51, v52, &v2->baseclass_0.baseclass_0, 0, 0);
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v53,
      5u);
    iYOffk = v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v54 = TextData::Get(0xD2C9E4E6u);
    iYOffk[118].__vecDelDtor((NiRefObject *)v53, (unsigned int)v54);
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v53,
      0);
    v55 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn06Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v55, &spNode.m_pObject->baseclass_0, "Btn06Click");
    PgSprData::Add(v55, &spNode.m_pObject->baseclass_0, "Btn06Over");
    v56 = PgWinBut::CreateWin(uiLeft - v9, uiTop, v55, &v2->baseclass_0.baseclass_0, 0xBu, 0, 0);
    v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v56,
      0);
    v57 = v55->m_akHitTester.m_pBase;
    v58 = v57->m_pObject->m_uiHeight;
    iYOffl = v57->m_pObject->m_uiWidth;
    v59 = Font::Get(0);
    v60 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffl, v58, v59, &v2->baseclass_0.baseclass_0, 0, 0);
    v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v60,
      5u);
    v61 = v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v62 = TextData::Get(0xD4EB2F17u);
    v61[118].__vecDelDtor((NiRefObject *)v60, (unsigned int)v62);
    v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v60,
      0);
    ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v73 = -1;
    if ( spNode.m_pObject )
    {
      v63 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v63 )
          v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v63, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v73 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C3F70) --------------------------------------------------------
GuildMasterMenuWin *__cdecl GuildMasterMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildMasterMenuWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildMasterMenuWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildMasterMenuWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildMasterMenuWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B5CE4: using guessed type int (__stdcall *GuildMasterMenuWin___vftable_)(int uiFlags);
// 9B5D04: using guessed type int (__thiscall *GuildMasterMenuWin___vftable_)(void *p, char);

//----- (005C40B0) --------------------------------------------------------
void *__thiscall GuildMasterMenuWin::_scalar_deleting_destructor_(GuildMasterMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildMasterMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildMasterMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B5CE4: using guessed type int (__stdcall *GuildMasterMenuWin___vftable_)(int uiFlags);
// 9B5D04: using guessed type int (__thiscall *GuildMasterMenuWin___vftable_)(void *p, char);

//----- (005C4100) --------------------------------------------------------
void __thiscall GuildMenuWin::OnHelpLink(GuildMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildMenu");
}

//----- (005C4130) --------------------------------------------------------
void __thiscall GuildMenuWin::GuildMenuWin(GuildMenuWin *this)
{
  GuildMenuWin *v1; // esi@1
  GuildFoundWin *v2; // edi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildMenuWin::_vftable_;
  v1->m_spGuildFoundWin.m_pObject = 0;
  v1->m_spGuildMasterMenuWin.m_pObject = 0;
  v2 = v1->m_spGuildFoundWin.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v2,
          1u);
    }
    v1->m_spGuildFoundWin.m_pObject = 0;
  }
}
// 9B6018: using guessed type int (__stdcall *GuildMenuWin___vftable_)(int uiFlags);
// 9B6034: using guessed type int (__thiscall *GuildMenuWin___vftable_)(void *p, char);

//----- (005C41D0) --------------------------------------------------------
void __thiscall GuildMenuWin::_GuildMenuWin(GuildMenuWin *this)
{
  GuildMenuWin *v1; // esi@1
  GuildMasterMenuWin *v2; // edi@1
  GuildFoundWin *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildMenuWin::_vftable_;
  v2 = this->m_spGuildMasterMenuWin.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_spGuildFoundWin.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B6018: using guessed type int (__stdcall *GuildMenuWin___vftable_)(int uiFlags);
// 9B6034: using guessed type int (__thiscall *GuildMenuWin___vftable_)(void *p, char);

//----- (005C4280) --------------------------------------------------------
void __thiscall GuildMenuWin::CloseFoundWin(GuildMenuWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_spGuildFoundWin.m_pObject->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005C42A0) --------------------------------------------------------
GuildMasterMenuWin *__thiscall GuildMenuWin::GetMasterMenuWin(GuildMenuWin *this)
{
  return this->m_spGuildMasterMenuWin.m_pObject;
}

//----- (005C42B0) --------------------------------------------------------
void __thiscall GuildMenuWin::UpdateInformGuildMemberLoginText(GuildMenuWin *this)
{
  GuildMenuWin *v1; // edi@1
  NiRefObjectVtbl *v2; // esi@1
  char *v3; // eax@1

  v1 = this;
  v2 = this->m_pkMemberLoginInformText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0x1A757781u);
  v3 = fs("%s%s");
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkMemberLoginInformText, (unsigned int)v3);
}

//----- (005C4300) --------------------------------------------------------
void __thiscall GuildMenuWin::OnCmdGuildMasterMenu(GuildMenuWin *this)
{
  GuildMenuWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  char *v3; // eax@2

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMaster(v2) )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_spGuildMasterMenuWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_spGuildMasterMenuWin.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    v3 = TextData::Get(0x28233E34u);
    MsgBox::Modal(MSGBOX_OK, v3);
  }
}

//----- (005C4380) --------------------------------------------------------
void __thiscall GuildMenuWin::GuildStateBtnSetting(GuildMenuWin *this)
{
  GuildMenuWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  CClientGuild *v3; // eax@3
  NiRefObjectVtbl *v4; // edi@5
  int v5; // [sp+0h] [bp-8h]@0
  unsigned int v6; // [sp+0h] [bp-8h]@2

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMaster(v2) == 1 )
  {
    ((void (__stdcall *)(signed int, int))v1->m_pkMenuBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(
      10,
      v5);
    v6 = 739451169;
  }
  else
  {
    v3 = GuildTask::GetGuild();
    if ( CClientGuild::AmIGuildMember(v3) != 1 )
      return;
    ((void (__stdcall *)(signed int, int))v1->m_pkMenuBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(
      6,
      v5);
    v6 = -1782523934;
  }
  v4 = v1->m_pkMenuText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(v6);
  ((void (__thiscall *)(PgWinText *))v4[118].__vecDelDtor)(v1->m_pkMenuText[1]);
  ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkMenuText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkMenuText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (005C4440) --------------------------------------------------------
bool __thiscall GuildMenuWin::Create(GuildMenuWin *this, PgFrameWork *pkFrameWork)
{
  GuildMenuWin *v2; // ebx@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // esi@10
  int v9; // edi@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // edi@13
  NiSourceTexture *v15; // edi@13
  PgSprData *v16; // edi@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // esi@21
  NiRefObjectVtbl *v20; // edi@21
  char *v21; // eax@21
  int v22; // esi@21
  NiNode *v23; // edi@22
  char *v24; // eax@22
  PgSprData *v25; // edi@22
  NiNode *v26; // ST58_4@22
  char *v27; // eax@22
  NiNode *v28; // ST58_4@22
  char *v29; // eax@22
  PgWinBut *v30; // eax@22
  NiPointer<PgSprData::PgHitTester> *v31; // ecx@22
  unsigned int v32; // edi@22
  unsigned int v33; // ST58_4@22
  PgFont *v34; // eax@22
  PgWinText *v35; // eax@22
  PgWinText *v36; // eax@23
  NiRefObjectVtbl *v37; // esi@23
  char *v38; // eax@23
  GuildFoundWin *v39; // eax@23
  GuildFoundWin *v40; // esi@23
  GuildFoundWin *v41; // edi@23
  GuildMasterMenuWin *v42; // eax@30
  GuildMasterMenuWin *v43; // esi@30
  GuildMasterMenuWin *v44; // edi@30
  NiNode *v45; // esi@38
  const char *v46; // [sp+38h] [bp-4Ch]@11
  int *v47; // [sp+3Ch] [bp-48h]@11
  int *v48; // [sp+40h] [bp-44h]@11
  NiSourceTexture *v49; // [sp+44h] [bp-40h]@11
  unsigned int uiWidth; // [sp+5Ch] [bp-28h]@15
  unsigned int uiHeight; // [sp+60h] [bp-24h]@15
  int v52; // [sp+64h] [bp-20h]@21
  int iXOff; // [sp+68h] [bp-1Ch]@10
  int uiLeft; // [sp+6Ch] [bp-18h]@4
  int uiTop; // [sp+70h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+74h] [bp-10h]@1
  int v57; // [sp+80h] [bp-4h]@1
  int iYOff; // [sp+8Ch] [bp+8h]@10
  signed int iYOffa; // [sp+8Ch] [bp+8h]@21

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v57 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildMenuWin", 0) )
  {
    v6 = spNode.m_pObject;
    v57 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  iXOff = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v49 = v10;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  else
  {
    v49 = 0;
    v48 = &uiTop;
    v47 = &uiLeft;
    v46 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v46, v47, v48, v49);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v8, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0.baseclass_0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(0);
    v19 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v21 = TextData::Get(0x363D3C93u);
    v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    iYOffa = 1;
    v22 = (int)v2->m_pkMenuText;
    v52 = 7;
    do
    {
      v23 = spNode.m_pObject;
      v24 = fs("Btn%02dNor");
      v25 = PgSprData::Create(&v23->baseclass_0, v24, &uiLeft, &uiTop, 0);
      v26 = spNode.m_pObject;
      v27 = fs("Btn%02dClick");
      PgSprData::Add(v25, &v26->baseclass_0, v27);
      v28 = spNode.m_pObject;
      v29 = fs("Btn%02dOVer");
      PgSprData::Add(v25, &v28->baseclass_0, v29);
      v30 = PgWinBut::CreateWin(uiLeft - iXOff, uiTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
      *(_DWORD *)(v22 - 28) = v30;
      v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v30,
        0);
      v31 = v25->m_akHitTester.m_pBase;
      v32 = v31->m_pObject->m_uiHeight;
      v33 = v31->m_pObject->m_uiWidth;
      v34 = Font::Get(0);
      v35 = PgWinText::CreateWin(
              uiLeft - iXOff,
              uiTop + 1,
              v33,
              v32,
              v34,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      *(_DWORD *)v22 = v35;
      v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v35,
        5u);
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v22 + 472))(&unk_9B5F37);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 256))(0);
      ++iYOffa;
      v22 += 4;
      --v52;
    }
    while ( v52 );
    ((void (__stdcall *)(signed int))v2->m_pkMenuBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(7);
    v36 = v2->m_pkMenuText[0];
    v2->m_pkMemberLoginInformText = v36;
    v37 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0x1A757781u);
    v38 = fs("%s%s");
    v37[118].__vecDelDtor((NiRefObject *)v2->m_pkMemberLoginInformText, (unsigned int)v38);
    v39 = GuildFoundWin::CreateWin(0);
    v40 = v2->m_spGuildFoundWin.m_pObject;
    v41 = v39;
    if ( v40 != v39 )
    {
      if ( v40
        && !InterlockedDecrement((volatile LONG *)&v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v40 )
        v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v40,
          1u);
      v2->m_spGuildFoundWin.m_pObject = v41;
      if ( v41 )
        InterlockedIncrement((volatile LONG *)&v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spGuildFoundWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spGuildFoundWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v42 = GuildMasterMenuWin::CreateWin(0);
    v43 = v2->m_spGuildMasterMenuWin.m_pObject;
    v44 = v42;
    if ( v43 != v42 )
    {
      if ( v43
        && !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v43 )
        v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v43,
          1u);
      v2->m_spGuildMasterMenuWin.m_pObject = v44;
      if ( v44 )
        InterlockedIncrement((volatile LONG *)&v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spGuildMasterMenuWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spGuildMasterMenuWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    ((void (__thiscall *)(GuildMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v57 = -1;
    if ( spNode.m_pObject )
    {
      v45 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v45 )
          v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v57 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C4A50) --------------------------------------------------------
GuildMenuWin *__cdecl GuildMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildMenuWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x19Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildMenuWin::GuildMenuWin((GuildMenuWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildMenuWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005C4B80) --------------------------------------------------------
void __thiscall GuildMenuWin::OnCmdGuildAddMember(GuildMenuWin *this)
{
  CClientGuild *v1; // eax@1
  char *v2; // eax@2
  CClientGuild *v3; // eax@3
  char *v4; // eax@4

  v1 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v1) )
  {
    v3 = GuildTask::GetGuild();
    if ( CClientGuild::CanIInvite(v3) )
    {
      ISingletonTask<GuildJoinReqTask>::Run();
    }
    else
    {
      v4 = TextData::Get(0x80D5CBDBu);
      MsgBox::Modal(MSGBOX_OK, v4);
    }
  }
  else
  {
    v2 = TextData::Get(0x76816B99u);
    MsgBox::Modal(MSGBOX_OK, v2);
  }
}

//----- (005C4BE0) --------------------------------------------------------
void __thiscall GuildMenuWin::OnCmdGuildLeave(GuildMenuWin *this)
{
  GuildMenuWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  char *v3; // eax@2
  CClientGuild *v4; // eax@3
  char *v5; // eax@4
  GuildLeaveTask *v6; // eax@5

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v2) )
  {
    v4 = GuildTask::GetGuild();
    if ( CClientGuild::AmIGuildMaster(v4) )
    {
      v5 = TextData::Get(0x363B0D6Cu);
      MsgBox::Modal(MSGBOX_OK, v5);
    }
    else
    {
      v6 = ISingletonTask<GuildLeaveTask>::Run();
      ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_8.vfptr->SetMsgHooker)(v1->baseclass_0.m_pkFrameWork);
    }
  }
  else
  {
    v3 = TextData::Get(0x76816B99u);
    MsgBox::Modal(MSGBOX_OK, v3);
  }
}

//----- (005C4C50) --------------------------------------------------------
void __thiscall GuildMenuWin::OnCommand(GuildMenuWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@5

  switch ( wParam )
  {
    case 6u:
      GuildMenuWin::OnCmdGuildLeave(this);
      break;
    case 8u:
      GuildMenuWin::OnCmdGuildMasterMenu(this);
      break;
    case 7u:
      byte_B5BB47 = byte_B5BB47 == 0;
      GuildMenuWin::UpdateInformGuildMemberLoginText(this);
      break;
    case 9u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "GuildMenu");
      break;
    case 0xAu:
      GuildMenuWin::OnCmdGuildAddMember(this);
      break;
    default:
      return;
  }
}
// B5BB47: using guessed type char byte_B5BB47;

//----- (005C4CE0) --------------------------------------------------------
void *__thiscall GuildMenuWin::_vector_deleting_destructor_(GuildMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildMenuWin::_GuildMenuWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005C4D10) --------------------------------------------------------
void __thiscall GuildLeaveTask::OnStart(GuildLeaveTask *this)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x1Cu, 0, 0);
}

//----- (005C4D30) --------------------------------------------------------
GuildLeaveTask *__cdecl ISingletonTask<GuildLeaveTask>::Run()
{
  GuildLeaveTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildLeaveTask *)ISingletonTask<GuildLeaveTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildLeaveTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x40u);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildLeaveTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildLeaveTask::_vftable_;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildLeaveTask *)v2;
    ISingletonTask<GuildLeaveTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9B628C: using guessed type int (__stdcall *GuildLeaveTask___vftable_)(int uiFlags);
// 9B62A8: using guessed type int (__thiscall *GuildLeaveTask___vftable_)(void *p, char);
// A99DF8: using guessed type int ISingletonTask_GuildLeaveTask___ms_pkSingletonTask;

//----- (005C4DB0) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildLeaveTask>::_vector_deleting_destructor_(GuildLeaveTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildLeaveTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildLeaveTask>::_vftable_;
  ISingletonTask<GuildLeaveTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B6258: using guessed type int (__stdcall *ISingletonTask_GuildLeaveTask____vftable_)(int uiFlags);
// 9B6274: using guessed type int (__thiscall *ISingletonTask_GuildLeaveTask____vftable_)(void *p, char);
// A99DF8: using guessed type int ISingletonTask_GuildLeaveTask___ms_pkSingletonTask;

//----- (005C4DF0) --------------------------------------------------------
bool __thiscall GuildLeaveTask::OnProcessNetMsg(GuildLeaveTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildLeaveTask *v5; // esi@1
  int v6; // eax@3
  char *v7; // eax@6
  CClientGuild *v8; // eax@7
  int v9; // edx@7
  char *v10; // eax@7
  int v11; // esi@7
  char *v12; // edi@7
  CClientGuild *v13; // eax@10
  CClientGuildAcademy *v14; // eax@10
  CClientGuildAcademy *v15; // eax@11
  CClientGuildAcademy *v16; // eax@12
  PgFrameWork *v17; // eax@12
  PgFrameWork *v18; // eax@12
  PgFrameWork *v19; // eax@14
  char *v20; // eax@17
  char *v21; // eax@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v23; // [sp-1Ch] [bp-40h]@17
  int v24; // [sp-4h] [bp-28h]@7
  GuildLeaveTask *v25; // [sp+8h] [bp-1Ch]@1
  char acMyGuildName[17]; // [sp+Ch] [bp-18h]@7
  unsigned int v27; // [sp+20h] [bp-4h]@1
  int v28; // [sp+24h] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v5 = this;
  v25 = this;
  if ( iDepart == 29 && iCommand == 29 )
  {
    v6 = *(_WORD *)pvData;
    if ( v6 == 3302 )
    {
      v7 = TextData2::Get(0x6D72B4D4u);
    }
    else
    {
      if ( v6 == 12688 )
      {
        v25 = (GuildLeaveTask *)&v23;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &v23,
          "Guild_CannotLeaveTime");
        v24 = CSingleDataMap::GetValue(&g_kSingleDataMap, v23);
        v20 = TextData2::Get(0xFD4F187Eu);
        v21 = fs(v20);
        MsgBox::Modal(MSGBOX_OK, v21);
LABEL_20:
        v5->baseclass_0.baseclass_0.m_eTaskState = 2;
        return 0;
      }
      if ( *(_WORD *)pvData == 3137 )
      {
        v8 = GuildTask::GetGuild();
        *(_DWORD *)acMyGuildName = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[0];
        *(_DWORD *)&acMyGuildName[4] = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[4];
        *(_DWORD *)&acMyGuildName[8] = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[8];
        v9 = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[12];
        v24 = (int)acMyGuildName;
        *(_DWORD *)&acMyGuildName[12] = v9;
        acMyGuildName[16] = 0;
        v10 = TextData::Get(0x5ED0E9E9u);
        v11 = (int)&v5->baseclass_0.baseclass_0.baseclass_8;
        v12 = fs(v10);
        if ( *(_DWORD *)(v11 + 4) )
        {
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v11 + 4) + 4))(25, v12, v11);
          if ( *(_DWORD *)(v11 + 4) )
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v11 + 4) + 20))(25, v12, v11);
        }
        (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v11 + 20))(v11, 25, v12, v11);
        GuildTask::GetGuild()->baseclass_0.m_bIsGuild = 0;
        GuildMemberTask::GetGuildMember()->baseclass_0.m_NumOfMembers = 0;
        v13 = GuildTask::GetGuild();
        CClientGuild::ClearHistoryList(v13);
        GuildTask::InvalidateGuildWindow();
        GuildAcademyMemberTask::GetGuildAcademyMember()->baseclass_0.m_NumOfAcademyMembers = 0;
        GuildAcademyTask::GetGuildAcademy()->m_bIsGuildAcademyMember = 0;
        v14 = GuildAcademyTask::GetGuildAcademy();
        if ( CClientGuildAcademy::AmIGuildAcademyMaster(v14) )
        {
          v15 = GuildAcademyTask::GetGuildAcademy();
          Name5::operator_(&v15->baseclass_0.m_GuildAcademy.sAcademyMasterName, &byte_9788EB);
        }
        v16 = GuildAcademyTask::GetGuildAcademy();
        CClientGuildAcademy::ClearHistoryList(v16);
        v17 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        GuildAcademyWin::InvalidateAcademy((GuildAcademyWin *)v17[24].m_kMsgQ.m_uiTail);
        v18 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v18 )
          GuildWin::ClearGTInfo((GuildWin *)v18[24].baseclass_0.vfptr);
        v19 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v19 )
          GuildWin::ClearEmblem((GuildWin *)v19[24].baseclass_0.vfptr);
        v5 = v25;
        goto LABEL_20;
      }
      v7 = TextData::Get(0xD3A3898u);
    }
    MsgBox::Modal(MSGBOX_OK, v7);
    goto LABEL_20;
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (005C5010) --------------------------------------------------------
void __thiscall GuildNameChangeWin::SetTitle(GuildNameChangeWin *this, const char *pkTitle)
{
  ((void (__stdcall *)(_DWORD))this->m_pTitleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkTitle);
}

//----- (005C5030) --------------------------------------------------------
void __thiscall GuildNameChangeWin::SetCommentText(GuildNameChangeWin *this, const char *pkComment)
{
  ((void (__stdcall *)(_DWORD))this->m_pComment->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkComment);
}

//----- (005C5050) --------------------------------------------------------
void __thiscall GuildNameChangeWin::OnCmdCancel(GuildNameChangeWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
}

//----- (005C5060) --------------------------------------------------------
void __thiscall GuildNameChangeWin::OnHelpLink(GuildNameChangeWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildChangeName");
}

//----- (005C5090) --------------------------------------------------------
void __thiscall GuildNameChangeWin::_GuildNameChangeWin(GuildNameChangeWin *this)
{
  GuildNameChangeWin *v1; // esi@1
  PgWinBut *v2; // edi@1
  PgWinBut *v3; // edi@6
  PgWinBut *v4; // edi@11
  PgWinBut *v5; // edi@18
  PgWinBut *v6; // edi@22
  PgWinBut *v7; // edi@26
  int v8; // [sp+Ch] [bp-4h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNameChangeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNameChangeWin::_vftable_;
  v2 = this->m_spQuitButton.m_pObject;
  v8 = 4;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spQuitButton.m_pObject = 0;
  }
  v3 = v1->m_spOKButton.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spOKButton.m_pObject = 0;
  }
  v4 = v1->m_spCancleButton.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spCancleButton.m_pObject = 0;
  }
  LOBYTE(v8) = 3;
  if ( v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager )
    v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.functor.obj_ptr = (void *)v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager(
                                                                              (boost::detail::function::any_pointer)v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                                                                              destroy_functor_tag);
  v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.invoker = 0;
  v5 = v1->m_spCancleButton.m_pObject;
  LOBYTE(v8) = 2;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v6 = v1->m_spOKButton.m_pObject;
  LOBYTE(v8) = 1;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spQuitButton.m_pObject;
  LOBYTE(v8) = 0;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  v8 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B63A8: using guessed type int (__stdcall *GuildNameChangeWin___vftable_)(int uiFlags);
// 9B63C4: using guessed type int (__thiscall *GuildNameChangeWin___vftable_)(void *p, char);

//----- (005C5230) --------------------------------------------------------
bool __thiscall GuildNameChangeWin::Create(GuildNameChangeWin *this)
{
  GuildNameChangeWin *v1; // esi@1
  NiTexturePalette *v2; // edi@1
  char *v3; // eax@3
  PgSprData *v4; // eax@4
  NiNode *v5; // esi@5
  NiSourceTexture *v7; // eax@10
  PgSprData *v8; // eax@13
  D3DXCOLOR v9; // ST08_16@13
  D3DXCOLOR v10; // ST08_16@13
  PgWinBut *v11; // eax@13
  PgWinBut *v12; // edi@13
  PgWinBut *v13; // ebx@13
  PgWinBut *v14; // eax@20
  PgWinBut *v15; // edi@20
  PgWinBut *v16; // ebx@20
  PgWin *v17; // edi@27
  D3DXCOLOR v18; // ST08_16@27
  char *v19; // eax@27
  NiSourceTexture *v20; // edi@27
  PgWinBut *v21; // eax@29
  PgWinBut *v22; // edi@29
  PgWinBut *v23; // ebx@29
  PgWin *v24; // edi@36
  D3DXCOLOR v25; // ST08_16@36
  char *v26; // eax@36
  EditWin *v27; // eax@36
  NiNode *v28; // esi@37
  const char *v29; // [sp+8h] [bp-4Ch]@11
  int *v30; // [sp+Ch] [bp-48h]@11
  int *v31; // [sp+10h] [bp-44h]@11
  NiSourceTexture *v32; // [sp+14h] [bp-40h]@11
  UIUtil ui; // [sp+28h] [bp-2Ch]@10
  int iLeft; // [sp+3Ch] [bp-18h]@1
  int iTop; // [sp+40h] [bp-14h]@1
  NiPointer<NiNode> spNode; // [sp+44h] [bp-10h]@1
  int v37; // [sp+50h] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v2 = dword_B70448;
  v37 = 0;
  iLeft = 0;
  iTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildChangeName.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, v2);
  if ( !spNode.m_pObject )
    return 0;
  v4 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v1->baseclass_0, 0, 0, v4, 0, 0, "GuildNameChangeWin", 0) )
  {
    v5 = spNode.m_pObject;
    v37 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v37) = 1;
  UIUtil::SetParent(&ui, &v1->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iLeft, iTop);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  v7 = MenuTexMgr::GetTexture(0x13u);
  if ( v7 )
  {
    v32 = v7;
    v31 = &iTop;
    v30 = &iLeft;
    v29 = "Theme";
  }
  else
  {
    v32 = 0;
    v31 = &iTop;
    v30 = &iLeft;
    v29 = "Theme";
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v29, v30, v31, v32);
  PgWinSpr::CreateWin(iLeft, iTop, v8, &v1->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  *(_QWORD *)&v9.r = *(_QWORD *)&Color::m_kDxYellowColor;
  *(_QWORD *)&v9.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
  v1->m_pTitleWin = UIUtil::CreateTextNoSpr(&ui, "WinTitle", &byte_9B62ED, COERCE_D3DXCOLOR(v9.r), 5u);
  *(_QWORD *)&v10.r = *(_QWORD *)&Color::m_kDxYellowColor;
  *(_QWORD *)&v10.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
  v1->m_pComment = UIUtil::CreateTextNoSpr(&ui, "Text01", byte_9B62EE, COERCE_D3DXCOLOR(v10.r), 5u);
  v11 = UIUtil::CreateButton(&ui, 1u, "Cls", 0, 3);
  v12 = v1->m_spQuitButton.m_pObject;
  v13 = v11;
  if ( v12 != v11 )
  {
    if ( v12
      && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v12,
        1u);
    v1->m_spQuitButton.m_pObject = v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v14 = UIUtil::CreateButton(&ui, 0, "Btn01", 0, 3);
  v15 = v1->m_spOKButton.m_pObject;
  v16 = v14;
  if ( v15 != v14 )
  {
    if ( v15
      && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v15 )
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v15,
        1u);
    v1->m_spOKButton.m_pObject = v16;
    if ( v16 )
      InterlockedIncrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v17 = (PgWin *)v1->m_spOKButton.m_pObject;
  *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v19 = TextData::Get(0x4F5F499Fu);
  UIUtil::CreateAttachedText(&ui, v17, v19, COERCE_D3DXCOLOR(v18.r), 5u);
  v20 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    UIUtil::CreateBtn(&ui, 2u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v20);
  v21 = UIUtil::CreateButton(&ui, 1u, "Btn02", 0, 3);
  v22 = v1->m_spCancleButton.m_pObject;
  v23 = v21;
  if ( v22 != v21 )
  {
    if ( v22
      && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v22 )
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v22,
        1u);
    v1->m_spCancleButton.m_pObject = v23;
    if ( v23 )
      InterlockedIncrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v24 = (PgWin *)v1->m_spCancleButton.m_pObject;
  *(_QWORD *)&v25.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v25.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v26 = TextData::Get(0x88A297E1u);
  UIUtil::CreateAttachedText(&ui, v24, v26, COERCE_D3DXCOLOR(v25.r), 5u);
  v27 = UIUtil::CreateEdit(&ui, "Panel03", 33, NORMAL, 0, 1);
  v1->m_pEditWin = v27;
  ((void (__thiscall *)(EditWin *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)(v27);
  ((void (__thiscall *)(GuildNameChangeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v1,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v37) = 0;
  UIUtil::_UIUtil(&ui);
  v37 = -1;
  if ( spNode.m_pObject )
  {
    v28 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v28 )
        v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C5690) --------------------------------------------------------
void __thiscall GuildNameChangeWin::GuildNameChangeWin(GuildNameChangeWin *this)
{
  GuildNameChangeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNameChangeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNameChangeWin::_vftable_;
  v1->m_spQuitButton.m_pObject = 0;
  v1->m_spOKButton.m_pObject = 0;
  v1->m_spCancleButton.m_pObject = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v1->m_OKButtonMsgFunc.baseclass_0.invoker = 0;
}
// 9B63A8: using guessed type int (__stdcall *GuildNameChangeWin___vftable_)(int uiFlags);
// 9B63C4: using guessed type int (__thiscall *GuildNameChangeWin___vftable_)(void *p, char);

//----- (005C56E0) --------------------------------------------------------
void __thiscall GuildNameChangeWin::OnCmdOk(GuildNameChangeWin *this)
{
  GuildNameChangeWin *v1; // edi@1
  char *v2; // eax@2
  char *v3; // esi@2
  PgFrameWork *v4; // esi@3
  char *v5; // eax@4
  int v6; // eax@5

  v1 = this;
  if ( !this->m_OKButtonMsgFunc.baseclass_0.baseclass_0.manager )
    goto LABEL_6;
  v2 = (char *)((int (*)(void))this->m_pEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = TextFilterTable::FilterSlander(v2);
  if ( !strcmp(
          (const char *)((int (*)(void))v1->m_pEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(),
          v3) )
  {
    v6 = ((int (*)(void))v1->m_pEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    boost::function1<void_int_std::allocator<void>>::operator__(
      (boost::function1<void,int,std::allocator<void> > *)&v1->m_OKButtonMsgFunc,
      v6);
LABEL_6:
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    return;
  }
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 )
  {
    v5 = TextData::Get(0x24663F86u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
  }
}

//----- (005C57B0) --------------------------------------------------------
GuildNameChangeWin *__cdecl GuildNameChangeWin::CreateWin()
{
  void *v0; // eax@1
  void *v1; // esi@1
  PgWin *v2; // edi@8
  GuildNameChangeWin *v3; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v0 = operator new(0x17Cu);
  v1 = v0;
  result.m_pObject = (PgWin *)v0;
  v5 = 0;
  if ( v0 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v0);
    *(_DWORD *)v1 = &GuildNameChangeWin::_vftable_;
    *((_DWORD *)v1 + 58) = &GuildNameChangeWin::_vftable_;
    *((_DWORD *)v1 + 86) = 0;
    *((_DWORD *)v1 + 87) = 0;
    *((_DWORD *)v1 + 88) = 0;
    *((_DWORD *)v1 + 92) = 0;
    *((_DWORD *)v1 + 93) = 0;
    *((_DWORD *)v1 + 94) = 0;
  }
  else
  {
    v1 = 0;
  }
  if ( v1 )
    InterlockedIncrement((volatile LONG *)v1 + 1);
  v5 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v1);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 540))(v1) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v1 + 356))(v1);
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = (GuildNameChangeWin *)v1;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v1);
    if ( result.m_pObject )
    {
      v2 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v2 )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
    }
    v5 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v1 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v1)(v1, 1);
    v3 = 0;
  }
  return v3;
}
// 9B63A8: using guessed type int (__stdcall *GuildNameChangeWin___vftable_)(int uiFlags);
// 9B63C4: using guessed type int (__thiscall *GuildNameChangeWin___vftable_)(void *p, char);

//----- (005C5910) --------------------------------------------------------
void __thiscall GuildNameChangeWin::RegisterCallBack(GuildNameChangeWin *this, boost::function<void __cdecl(char const *),std::allocator<void> > CallBackFunc)
{
  int v2; // eax@1
  char *v3; // esi@1
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ecx@1
  boost::detail::function::any_pointer (__cdecl *v5)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edi@1
  boost::detail::function::unusable *(__cdecl *v6)(boost::detail::function::unusable *, boost::detail::function::any_pointer, const char *); // ebx@1
  boost::detail::function::any_pointer (__cdecl *v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edx@4
  int v8; // edx@4
  char v9; // [sp+0h] [bp-18h]@3
  int v10; // [sp+14h] [bp-4h]@1

  v2 = 0;
  v3 = (char *)&this->m_OKButtonMsgFunc;
  v4 = CallBackFunc.baseclass_0.baseclass_0.manager;
  v5 = 0;
  v6 = 0;
  v10 = 0;
  if ( (_DWORD)CallBackFunc.baseclass_0.baseclass_0.manager )
  {
    v6 = CallBackFunc.baseclass_0.invoker;
    v5 = CallBackFunc.baseclass_0.baseclass_0.manager;
    v2 = (int)CallBackFunc.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)CallBackFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
    v4 = CallBackFunc.baseclass_0.baseclass_0.manager;
  }
  if ( v3 != &v9 )
  {
    v7 = v5;
    v5 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v3;
    *(_DWORD *)v3 = v7;
    v8 = v2;
    v2 = *((_DWORD *)v3 + 1);
    *((_DWORD *)v3 + 1) = v8;
    *((_DWORD *)v3 + 2) = v6;
  }
  if ( v5 )
  {
    v5((boost::detail::function::any_pointer)v2, destroy_functor_tag);
    v4 = CallBackFunc.baseclass_0.baseclass_0.manager;
  }
  v10 = -1;
  if ( v4 )
    v4(CallBackFunc.baseclass_0.baseclass_0.functor, destroy_functor_tag);
}

//----- (005C59C0) --------------------------------------------------------
void __thiscall GuildNameChangeWin::OnCommand(GuildNameChangeWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    }
    else
    {
      if ( wParam == 2 )
      {
        v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v3 )
          GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "GuildChangeName");
      }
    }
  }
  else
  {
    GuildNameChangeWin::OnCmdOk(this);
  }
}

//----- (005C5A10) --------------------------------------------------------
GuildNameChangeWin *__cdecl GuildNameChangeWin::Modal(const char *pkTitleName)
{
  GuildNameChangeWin *result; // eax@1
  PgWin *v2; // esi@1

  result = GuildNameChangeWin::CreateWin();
  v2 = (PgWin *)result;
  if ( result )
  {
    ((void (__stdcall *)(_DWORD))result->m_pTitleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkTitleName);
    PgWinMgr::DoModal(&Pgg_kWinMgr, v2, 0, 0, 0);
    result = (GuildNameChangeWin *)v2;
  }
  return result;
}

//----- (005C5A50) --------------------------------------------------------
GuildNameChangeWin *__cdecl GuildNameChangeWin::Modeless(const char *pkTitleName)
{
  GuildNameChangeWin *result; // eax@1
  PgWin *v2; // esi@1

  result = GuildNameChangeWin::CreateWin();
  v2 = (PgWin *)result;
  if ( result )
  {
    ((void (__stdcall *)(_DWORD))result->m_pTitleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkTitleName);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
    result = (GuildNameChangeWin *)v2;
  }
  return result;
}

//----- (005C5A90) --------------------------------------------------------
void __thiscall boost::function<void___cdecl__char_const____std::allocator<void>>::_function<void___cdecl__char_const____std::allocator<void>>(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *this)
{
  boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *v1; // esi@1

  v1 = this;
  if ( this->baseclass_0.baseclass_0.manager )
    this->baseclass_0.baseclass_0.functor.obj_ptr = (void *)this->baseclass_0.baseclass_0.manager(
                                                              this->baseclass_0.baseclass_0.functor.obj_ptr,
                                                              1);
  v1->baseclass_0.invoker = 0;
  v1->baseclass_0.baseclass_0.manager = 0;
}

//----- (005C5AC0) --------------------------------------------------------
void *__thiscall GuildNameChangeWin::_vector_deleting_destructor_(GuildNameChangeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildNameChangeWin::_GuildNameChangeWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005C5AF0) --------------------------------------------------------
void __thiscall GuildNoticeEditorWin::GuildNoticeEditorWin(GuildNoticeEditorWin *this)
{
  GuildNoticeEditorWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNoticeEditorWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNoticeEditorWin::_vftable_;
}
// 9B670C: using guessed type int (__stdcall *GuildNoticeEditorWin___vftable_)(int uiFlags);
// 9B672C: using guessed type int (__thiscall *GuildNoticeEditorWin___vftable_)(void *p, char);

//----- (005C5B10) --------------------------------------------------------
void __thiscall GuildNoticeEditorWin::_GuildNoticeEditorWin(GuildNoticeEditorWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNoticeEditorWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNoticeEditorWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B670C: using guessed type int (__stdcall *GuildNoticeEditorWin___vftable_)(int uiFlags);
// 9B672C: using guessed type int (__thiscall *GuildNoticeEditorWin___vftable_)(void *p, char);

//----- (005C5B30) --------------------------------------------------------
void __thiscall GuildNoticeEditorWin::OnClose(GuildNoticeEditorWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (005C5B50) --------------------------------------------------------
void __thiscall GuildNoticeEditorWin::OnShowWin(GuildNoticeEditorWin *this)
{
  GuildNoticeEditorWin *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
  ((void (*)(void))v1->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (005C5B80) --------------------------------------------------------
void __thiscall GuildNoticeEditorWin::OnHelpLink(GuildNoticeEditorWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildEditor");
}

//----- (005C5BB0) --------------------------------------------------------
void __thiscall GuildNotifyTask::OnStart(GuildNotifyTask *this)
{
  GuildNotifyTask *v1; // esi@1
  int v2; // edi@1
  void *v3; // eax@1
  void *v4; // ebx@1
  int v5; // eax@1
  int v6; // edx@3
  char v7; // cl@4

  v1 = this;
  v2 = this->m_kNoticeMsg.baseclass_0._Mysize + 3;
  v3 = operator new__(this->m_kNoticeMsg.baseclass_0._Mysize + 3);
  v4 = v3;
  *(_WORD *)v3 = LOWORD(v1->m_kNoticeMsg.baseclass_0._Mysize) + 1;
  v5 = (int)&v1->m_kNoticeMsg;
  if ( v1->m_kNoticeMsg.baseclass_0._Myres >= 0x10 )
    v5 = *(_DWORD *)v5;
  v6 = (int)((char *)v4 + -v5 + 2);
  do
  {
    v7 = *(_BYTE *)v5;
    *(_BYTE *)(v6 + v5) = *(_BYTE *)v5;
    ++v5;
  }
  while ( v7 );
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x10u, v4, v2);
  operator delete__(v4);
}

//----- (005C5C10) --------------------------------------------------------
bool __thiscall GuildNotifyTask::OnProcessNetMsg(GuildNotifyTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildNotifyTask *v5; // esi@1
  char *v6; // eax@4

  v5 = this;
  if ( iDepart == 29 && iCommand == 17 )
  {
    if ( *(_WORD *)pvData != 3137 )
    {
      v6 = TextData::Get(0x237746A2u);
      MsgBox::Modal(MSGBOX_OK, v6);
    }
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
  }
  return 0;
}

//----- (005C5C60) --------------------------------------------------------
bool __thiscall GuildNoticeEditorWin::Create(GuildNoticeEditorWin *this, PgFrameWork *pkFrameWork)
{
  GuildNoticeEditorWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // edi@13
  NiSourceTexture *v15; // edi@13
  PgSprData *v16; // edi@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // edi@21
  char *v20; // eax@21
  PgSprData *v21; // edi@21
  NiPointer<PgSprData::PgHitTester> *v22; // edx@21
  unsigned int v23; // edi@21
  PgFont *v24; // eax@21
  PgWinText *v25; // edi@21
  char *v26; // eax@21
  PgSprData *v27; // edi@21
  NiPointer<PgSprData::PgHitTester> *v28; // edx@21
  unsigned int v29; // edi@21
  PgFont *v30; // eax@21
  PgWinText *v31; // edi@21
  NiRefObjectVtbl *v32; // ebx@21
  char *v33; // eax@21
  NiNode *v34; // esi@22
  const char *v35; // [sp+24h] [bp-40h]@11
  int *v36; // [sp+28h] [bp-3Ch]@11
  int *v37; // [sp+2Ch] [bp-38h]@11
  NiSourceTexture *v38; // [sp+30h] [bp-34h]@11
  unsigned int uiWidth; // [sp+44h] [bp-20h]@15
  unsigned int uiHeight; // [sp+48h] [bp-1Ch]@15
  int uiLeft; // [sp+4Ch] [bp-18h]@4
  int uiTop; // [sp+50h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+54h] [bp-10h]@1
  int v44; // [sp+60h] [bp-4h]@1
  int iYOff; // [sp+6Ch] [bp+8h]@10
  NiRefObjectVtbl *iYOffa; // [sp+6Ch] [bp+8h]@21
  unsigned int iYOffb; // [sp+6Ch] [bp+8h]@21
  NiRefObjectVtbl *iYOffc; // [sp+6Ch] [bp+8h]@21
  unsigned int iYOffd; // [sp+6Ch] [bp+8h]@21

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v44 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildEditor.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildNoticeEditorWin", 0) )
  {
    v6 = spNode.m_pObject;
    v44 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v38 = v10;
    v37 = &uiTop;
    v36 = &uiLeft;
    v35 = "Theme";
  }
  else
  {
    v38 = 0;
    v37 = &uiTop;
    v36 = &uiLeft;
    v35 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v35, v36, v37, v38);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0.baseclass_0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(0);
    v19 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    iYOffa = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData::Get(0x3D25058Eu);
    iYOffa[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v20);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddFrndNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "AddFrndClick");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "AddFrndOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v22 = v21->m_akHitTester.m_pBase;
    v23 = v22->m_pObject->m_uiHeight;
    iYOffb = v22->m_pObject->m_uiWidth;
    v24 = Font::Get(0);
    v25 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffb, v23, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    iYOffc = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData::Get(0x4F5F499Fu);
    iYOffc[118].__vecDelDtor((NiRefObject *)v25, (unsigned int)v26);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddFrndNor01", &uiLeft, &uiTop, 0);
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "AddFrndClick01");
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "AddFrndOver01");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v28 = v27->m_akHitTester.m_pBase;
    v29 = v28->m_pObject->m_uiHeight;
    iYOffd = v28->m_pObject->m_uiWidth;
    v30 = Font::Get(0);
    v31 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffd, v29, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v31,
      5u);
    v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v33 = TextData::Get(0x88A297E1u);
    v32[118].__vecDelDtor((NiRefObject *)v31, (unsigned int)v33);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v2->m_pkEditWin = EditWin::CreateWin(
                        uiLeft,
                        uiTop,
                        uiWidth,
                        uiHeight,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        MULTILINE,
                        0x190u,
                        4u,
                        0,
                        0,
                        1);
    ((void (__thiscall *)(GuildNoticeEditorWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v44 = -1;
    if ( spNode.m_pObject )
    {
      v34 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v34 )
          v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v44 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C61F0) --------------------------------------------------------
GuildNoticeEditorWin *__cdecl GuildNoticeEditorWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildNoticeEditorWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildNoticeEditorWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildNoticeEditorWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildNoticeEditorWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B670C: using guessed type int (__stdcall *GuildNoticeEditorWin___vftable_)(int uiFlags);
// 9B672C: using guessed type int (__thiscall *GuildNoticeEditorWin___vftable_)(void *p, char);

//----- (005C6330) --------------------------------------------------------
void __thiscall GuildNotifyTask::SetInfo(GuildNotifyTask *this, char *pcNotice)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_kNoticeMsg,
    pcNotice,
    strlen(pcNotice));
}

//----- (005C6360) --------------------------------------------------------
void __thiscall GuildNoticeEditorWin::OnCommand(GuildNoticeEditorWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // ebx@1
  PgFrameWork *v4; // eax@4
  int v5; // eax@7
  const char *v6; // esi@7
  char v7; // cl@9
  GuildNotifyTask *v8; // eax@10

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( wParam == 2 )
      {
        v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v4 )
          GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "GuildEditor");
      }
    }
  }
  else
  {
    v5 = ((int (*)(void))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v6 = (const char *)v5;
    if ( v5 && *(_BYTE *)v5 )
    {
      do
        v7 = *(_BYTE *)v5++;
      while ( v7 );
      v8 = ISingletonTask<GuildNotifyTask>::Run();
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v8->m_kNoticeMsg, v6, strlen(v6));
    }
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  }
}

//----- (005C6440) --------------------------------------------------------
void *__thiscall GuildNoticeEditorWin::_scalar_deleting_destructor_(GuildNoticeEditorWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNoticeEditorWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNoticeEditorWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B670C: using guessed type int (__stdcall *GuildNoticeEditorWin___vftable_)(int uiFlags);
// 9B672C: using guessed type int (__thiscall *GuildNoticeEditorWin___vftable_)(void *p, char);

//----- (005C6480) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildNotifyTask>::_vector_deleting_destructor_(ISingletonTask<GuildNotifyTask> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildNotifyTask>::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildNotifyTask>::_vftable_;
  ISingletonTask<GuildNotifyTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B6950: using guessed type int (__stdcall *ISingletonTask_GuildNotifyTask____vftable_)(int uiFlags);
// 9B696C: using guessed type int (__thiscall *ISingletonTask_GuildNotifyTask____vftable_)(void *p, char);
// A99DFC: using guessed type int ISingletonTask_GuildNotifyTask___ms_pkSingletonTask;

//----- (005C64C0) --------------------------------------------------------
GuildNotifyTask *__cdecl ISingletonTask<GuildNotifyTask>::Run()
{
  GuildNotifyTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildNotifyTask *)ISingletonTask<GuildNotifyTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildNotifyTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildNotifyTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildNotifyTask::_vftable_;
      *(_DWORD *)(v2 + 84) = 15;
      *(_DWORD *)(v2 + 80) = 0;
      *(_BYTE *)(v2 + 64) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildNotifyTask *)v2;
    ISingletonTask<GuildNotifyTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9B6984: using guessed type int (__stdcall *GuildNotifyTask___vftable_)(int uiFlags);
// 9B69A0: using guessed type int (__thiscall *GuildNotifyTask___vftable_)(void *p, char);
// A99DFC: using guessed type int ISingletonTask_GuildNotifyTask___ms_pkSingletonTask;

//----- (005C6550) --------------------------------------------------------
void *__thiscall GuildNotifyTask::_scalar_deleting_destructor_(GuildNotifyTask *this, unsigned int a2)
{
  GuildNotifyTask *v2; // esi@1

  v2 = this;
  if ( this->m_kNoticeMsg.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kNoticeMsg.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_kNoticeMsg.baseclass_0._Myres = 15;
  v2->m_kNoticeMsg.baseclass_0._Mysize = 0;
  v2->m_kNoticeMsg.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildNotifyTask>::_vftable_;
  v2->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildNotifyTask>::_vftable_;
  ISingletonTask<GuildNotifyTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&v2->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B6950: using guessed type int (__stdcall *ISingletonTask_GuildNotifyTask____vftable_)(int uiFlags);
// 9B696C: using guessed type int (__thiscall *ISingletonTask_GuildNotifyTask____vftable_)(void *p, char);
// A99DFC: using guessed type int ISingletonTask_GuildNotifyTask___ms_pkSingletonTask;

//----- (005C65B0) --------------------------------------------------------
void __thiscall GuildDismissTask::OnFinish(GuildDismissTask *this)
{
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005C65C0) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::Close(GuildNpcMenuWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  this->m_bDuplicationCheck = 1;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0xBu, 0, 0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (005C65F0) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnClose(GuildNpcMenuWin *this)
{
  if ( !this->m_bDuplicationCheck )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0xBu, 0, 0);
}

//----- (005C6610) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnShowWin(GuildNpcMenuWin *this)
{
  this->m_bDuplicationCheck = 0;
}

//----- (005C6620) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnClickGuildAcademyMenuBtn(GuildNpcMenuWin *this)
{
  PgWin *v1; // edi@1
  GuildAcademyMenuWin *v2; // eax@1
  GuildAcademyMenuWin *v3; // esi@2
  PgWin *v4; // eax@2
  unsigned int YPos; // [sp+4h] [bp-8h]@2
  unsigned int XPos; // [sp+8h] [bp-4h]@2

  v1 = (PgWin *)this;
  v2 = GuildAcademyTask::GetGuildAcademyMenuWin();
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
    v3 = GuildAcademyTask::GetGuildAcademyMenuWin();
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
      v1,
      &XPos,
      &YPos);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
      (NiRefObject *)v3,
      XPos);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
      (NiRefObject *)v3,
      YPos);
    v4 = (PgWin *)GuildAcademyTask::GetGuildAcademyMenuWin();
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
  }
}

//----- (005C66A0) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnHelpLink(GuildNpcMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildMenu");
}

//----- (005C66D0) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnClickPrevMenuBtn(GuildNpcMenuWin *this)
{
  GuildNpcMenuWin *v1; // esi@1
  PgWin *v2; // esi@1
  unsigned int YPos; // [sp+4h] [bp-8h]@1
  unsigned int XPos; // [sp+8h] [bp-4h]@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
    v1,
    &XPos,
    &YPos);
  v2 = (PgWin *)GuildTask::GetGuildSelectWin();
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor((NiRefObject *)v2, XPos);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor((NiRefObject *)v2, YPos);
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
}

//----- (005C6740) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::MenuBtnSetting(GuildNpcMenuWin *this, unsigned int BtnType, unsigned int PGWM_CMD_TYPE, char *pkText)
{
  GuildNpcMenuWin *v4; // esi@1

  v4 = this;
  if ( this->m_pkMenuBtn[BtnType] )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkMenuBtn[BtnType]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(PGWM_CMD_TYPE);
    ((void (__stdcall *)(_DWORD))v4->m_pkMenuBtn[BtnType]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
  if ( v4->m_pkMenuTxt[BtnType] )
  {
    ((void (__stdcall *)(_DWORD))v4->m_pkMenuTxt[BtnType]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkText);
    ((void (__stdcall *)(_DWORD))v4->m_pkMenuTxt[BtnType]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  }
}

//----- (005C67C0) --------------------------------------------------------
void __thiscall GuildDismissTask::SetInfo(GuildDismissTask *this, Name4 *rkName)
{
  *(_QWORD *)&this->m_kGuildName.n4_name[0] = *(_QWORD *)&rkName->n4_name[0];
  *(_QWORD *)&this->m_kGuildName.n4_name[8] = *(_QWORD *)&rkName->n4_name[8];
}

//----- (005C67F0) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::GuildNpcMenuWin(GuildNpcMenuWin *this)
{
  GuildNpcMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNpcMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNpcMenuWin::_vftable_;
  v1->m_spGuildFoundWin.m_pObject = 0;
  *(_WORD *)&v1->m_bGradeChange = 0;
  v1->m_bGuildDissmiss = 0;
}
// 9B6A98: using guessed type int (__stdcall *GuildNpcMenuWin___vftable_)(int uiFlags);
// 9B6AB4: using guessed type int (__thiscall *GuildNpcMenuWin___vftable_)(void *p, char);

//----- (005C6890) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::_GuildNpcMenuWin(GuildNpcMenuWin *this)
{
  PgWinFrame *v1; // esi@1
  GuildFoundWin *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNpcMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNpcMenuWin::_vftable_;
  v2 = this->m_spGuildFoundWin.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9B6A98: using guessed type int (__stdcall *GuildNpcMenuWin___vftable_)(int uiFlags);
// 9B6AB4: using guessed type int (__thiscall *GuildNpcMenuWin___vftable_)(void *p, char);

//----- (005C6920) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::CloseFoundWin(GuildNpcMenuWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_spGuildFoundWin.m_pObject->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005C6940) --------------------------------------------------------
void __thiscall GuildDismissTask::OnStart(GuildDismissTask *this)
{
  GuildDismissTask *v1; // esi@1
  char *v2; // eax@1

  v1 = this;
  this->m_eState = 0;
  this->m_pkInputBox = InputBox::CreateWin();
  v2 = TextData::Get(0x82EFD4EDu);
  InputBox::SetText(v1->m_pkInputBox, v2);
  InputBox::SetActionAfterInputEnd(v1->m_pkInputBox, 0);
  v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    &v1->baseclass_0.baseclass_0.baseclass_8);
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0);
}

//----- (005C69D0) --------------------------------------------------------
void __thiscall GuildDismissTask::DirectMessage(GuildDismissTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildDismissTask *v4; // esi@1
  int v5; // eax@2
  IDirectMessenger *v6; // edx@3
  GuildDismissTask::State v7; // edx@7
  char *v8; // ecx@7
  int v9; // edx@7
  PROTO_NC_GUILD_DISMISS_REQ kProto; // [sp+4h] [bp-20h]@7
  unsigned int v11; // [sp+20h] [bp-4h]@1
  int v12; // [sp+24h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 28 )
  {
    v5 = *(_DWORD *)&this->m_kGuildName.n4_name[8];
    if ( v5 )
      v6 = (IDirectMessenger *)(v5 + 232);
    else
      v6 = 0;
    if ( pkFrom == v6 )
    {
      if ( *(_DWORD *)pvBody )
      {
        PgWinMgr::CloseWin(&Pgg_kWinMgr, *(PgWin **)&this->m_kGuildName.n4_name[8]);
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
      else
      {
        v7 = this->m_eState;
        v8 = (char *)*((_DWORD *)pvBody + 1);
        *(_DWORD *)&kProto.Name.n4_name[0] = *(_DWORD *)&v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        *(_DWORD *)&kProto.Name.n4_name[8] = *(_DWORD *)&v4->m_kGuildName.n4_name[0];
        *(_DWORD *)&kProto.Name.n4_name[4] = v7;
        v9 = *(_DWORD *)&v4->m_kGuildName.n4_name[4];
        *(_QWORD *)&kProto.Password.n3_name[4] = 0i64;
        *(_DWORD *)&kProto.Password.n3_name[0] = 0;
        *(_DWORD *)&kProto.Name.n4_name[12] = v9;
        STRING_TO_NAME(v8, &kProto.Password);
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 7u, &kProto, 28);
        v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005C6AA0) --------------------------------------------------------
bool __thiscall GuildDismissTask::OnProcessNetMsg(GuildDismissTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildDismissTask *v5; // esi@1
  char *v6; // eax@4
  char *v7; // eax@5
  unsigned int v9; // [sp-4h] [bp-8h]@7

  v5 = this;
  if ( iDepart == 29 && iCommand == 8 )
  {
    switch ( *(_WORD *)pvData )
    {
      case 0xD00:
      case 0xD01:
      case 0xD02:
      case 0xD04:
      case 0xD06:
      case 0xD07:
        v6 = TextData::Get(0x22748095u);
        goto LABEL_10;
      case 0xD03:
        v7 = TextData::Get(0x33431998u);
        InputBox::SetText(v5->m_pkInputBox, v7);
        InputBox::SetFocus(v5->m_pkInputBox);
        v5->m_eState = 0;
        return 0;
      case 0xD05:
        v6 = TextData::Get(0x747245E1u);
        goto LABEL_10;
      case 0xD09:
        v9 = -1343513032;
        goto LABEL_9;
      case 0xD0A:
        v9 = 1257408000;
LABEL_9:
        v6 = TextData2::Get(v9);
LABEL_10:
        MsgBox::Modeless(MSGBOX_OK, v6);
        break;
      case 0xC41:
        break;
      default:
        return 0;
    }
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
  }
  return 0;
}

//----- (005C6C30) --------------------------------------------------------
bool __thiscall GuildNpcMenuWin::Create(GuildNpcMenuWin *this, PgFrameWork *pkFrameWork)
{
  GuildNpcMenuWin *v2; // ebx@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // esi@10
  int v9; // edi@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // edi@13
  NiSourceTexture *v15; // edi@13
  PgSprData *v16; // edi@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // esi@21
  NiRefObjectVtbl *v20; // edi@21
  char *v21; // eax@21
  int v22; // esi@21
  NiNode *v23; // edi@22
  char *v24; // eax@22
  PgSprData *v25; // edi@22
  NiNode *v26; // ST54_4@22
  char *v27; // eax@22
  NiNode *v28; // ST54_4@22
  char *v29; // eax@22
  PgWinBut *v30; // eax@22
  NiPointer<PgSprData::PgHitTester> *v31; // ecx@22
  unsigned int v32; // edi@22
  unsigned int v33; // ST54_4@22
  PgFont *v34; // eax@22
  PgWinText *v35; // eax@22
  char *v36; // eax@23
  char *v37; // eax@23
  char *v38; // eax@23
  char *v39; // eax@23
  char *v40; // eax@23
  GuildFoundWin *v41; // eax@23
  GuildFoundWin *v42; // esi@23
  GuildFoundWin *v43; // edi@23
  NiNode *v44; // esi@31
  const char *v45; // [sp+20h] [bp-4Ch]@11
  int *v46; // [sp+24h] [bp-48h]@11
  int *v47; // [sp+28h] [bp-44h]@11
  NiSourceTexture *v48; // [sp+2Ch] [bp-40h]@11
  unsigned int uiWidth; // [sp+44h] [bp-28h]@15
  unsigned int uiHeight; // [sp+48h] [bp-24h]@15
  int v51; // [sp+4Ch] [bp-20h]@21
  int iXOff; // [sp+50h] [bp-1Ch]@10
  int uiLeft; // [sp+54h] [bp-18h]@4
  int uiTop; // [sp+58h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-10h]@1
  int v56; // [sp+68h] [bp-4h]@1
  int iYOff; // [sp+74h] [bp+8h]@10
  signed int iYOffa; // [sp+74h] [bp+8h]@21

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v56 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildNpcMenuWin", 0) )
  {
    v6 = spNode.m_pObject;
    v56 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  iXOff = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v48 = v10;
    v47 = &uiTop;
    v46 = &uiLeft;
    v45 = "Theme";
  }
  else
  {
    v48 = 0;
    v47 = &uiTop;
    v46 = &uiLeft;
    v45 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v45, v46, v47, v48);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(0);
    v19 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v21 = TextData::Get(0x363D3C93u);
    v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    iYOffa = 1;
    v22 = (int)v2->m_pkMenuTxt;
    v51 = 5;
    do
    {
      v23 = spNode.m_pObject;
      v24 = fs("Btn%02dNor");
      v25 = PgSprData::Create(&v23->baseclass_0, v24, &uiLeft, &uiTop, 0);
      v26 = spNode.m_pObject;
      v27 = fs("Btn%02dClick");
      PgSprData::Add(v25, &v26->baseclass_0, v27);
      v28 = spNode.m_pObject;
      v29 = fs("Btn%02dOver");
      PgSprData::Add(v25, &v28->baseclass_0, v29);
      v30 = PgWinBut::CreateWin(uiLeft - iXOff, uiTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
      *(_DWORD *)(v22 - 20) = v30;
      v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v30,
        0);
      v31 = v25->m_akHitTester.m_pBase;
      v32 = v31->m_pObject->m_uiHeight;
      v33 = v31->m_pObject->m_uiWidth;
      v34 = Font::Get(0);
      v35 = PgWinText::CreateWin(
              uiLeft - iXOff,
              uiTop + 1,
              v33,
              v32,
              v34,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      *(_DWORD *)v22 = v35;
      v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v35,
        5u);
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v22 + 472))(&unk_9B69C7);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 256))(0);
      ++iYOffa;
      v22 += 4;
      --v51;
    }
    while ( v51 );
    v36 = TextData::Get(0x8DD4E1DBu);
    GuildNpcMenuWin::MenuBtnSetting(v2, 0, 5u, v36);
    v37 = TextData::Get(0x898688E7u);
    GuildNpcMenuWin::MenuBtnSetting(v2, 1u, 9u, v37);
    v38 = TextData::Get(0xE2E3D820u);
    GuildNpcMenuWin::MenuBtnSetting(v2, 2u, 8u, v38);
    v39 = TextData::Get(0x1F46265Au);
    GuildNpcMenuWin::MenuBtnSetting(v2, 3u, 0xEu, v39);
    v40 = TextData2::Get(0x4D562842u);
    GuildNpcMenuWin::MenuBtnSetting(v2, 4u, 0x11u, v40);
    ((void (__thiscall *)(GuildNpcMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v41 = GuildFoundWin::CreateWin(0);
    v42 = v2->m_spGuildFoundWin.m_pObject;
    v43 = v41;
    if ( v42 != v41 )
    {
      if ( v42
        && !InterlockedDecrement((volatile LONG *)&v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v42 )
        v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v42,
          1u);
      v2->m_spGuildFoundWin.m_pObject = v43;
      if ( v43 )
        InterlockedIncrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spGuildFoundWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spGuildFoundWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v56 = -1;
    if ( spNode.m_pObject )
    {
      v44 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v44 )
          v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v44, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v56 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005C71F0) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnCmdFoundGuild(GuildNpcMenuWin *this)
{
  GuildNpcMenuWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  char *v3; // eax@2

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v2) )
  {
    v3 = TextData::Get(0x6E784590u);
    MsgBox::Modal(MSGBOX_OK, v3);
  }
  else
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_spGuildFoundWin.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (005C7230) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnClickGuildAcademyStorageBtn(GuildNpcMenuWin *this)
{
  GuildNpcMenuWin *v1; // esi@1
  GuildAcademyStorageWin *v2; // eax@1
  CClientGuild *v3; // eax@2
  GuildAcademyStorageWin *v4; // eax@3
  int v5; // esi@5
  char *v6; // edi@5
  PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_REQ kProto; // [sp+7h] [bp-1h]@4

  v1 = this;
  v2 = GuildAcademyTask::GetGuildAcademyStorageWin();
  if ( !(unsigned __int8)((int (__thiscall *)(GuildAcademyStorageWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    v3 = GuildTask::GetGuild();
    if ( CClientGuild::AmIGuildMember(v3) )
    {
      v4 = GuildAcademyTask::GetGuildAcademyStorageWin();
      if ( !(unsigned __int8)((int (__thiscall *)(GuildAcademyStorageWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v4) )
      {
        kProto.nOpenType = 0;
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Du, &kProto, 1);
      }
    }
    else
    {
      v5 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v6 = TextData::Get(0x7290F5A0u);
      if ( *(_DWORD *)(v5 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v5 + 4) + 4))(25, v6, v5);
        if ( *(_DWORD *)(v5 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v5 + 4) + 20))(25, v6, v5);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
    }
  }
}

//----- (005C72F0) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnClickGuildDissmissBtn(GuildNpcMenuWin *this)
{
  GuildNpcMenuWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  char *v3; // eax@2
  CClientGuild *v4; // eax@3
  char *v5; // eax@4
  char *v6; // eax@5
  MsgBox *v7; // eax@5
  int v8; // edx@6

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v2) )
  {
    v4 = GuildTask::GetGuild();
    if ( CClientGuild::CanIDismissGuild(v4) )
    {
      v6 = TextData2::Get(0x328E9279u);
      v7 = MsgBox::Modal(MSGBOX_OKCANCEL, v6);
      if ( v1 )
        v8 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      else
        v8 = 0;
      ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v8);
      v1->m_bGuildDissmiss = 1;
    }
    else
    {
      v5 = TextData::Get(0xDFE80C1Eu);
      MsgBox::Modeless(MSGBOX_OK, v5);
    }
  }
  else
  {
    v3 = TextData::Get(0x76816B99u);
    MsgBox::Modeless(MSGBOX_OK, v3);
  }
}

//----- (005C7380) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::OnCommand(GuildNpcMenuWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // eax@3

  switch ( wParam )
  {
    case 5u:
      GuildNpcMenuWin::OnCmdFoundGuild(this);
      break;
    case 0xCu:
      v3 = (PgWin *)GuildTask::GetGuildTournamnetBaseWin();
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
      break;
    case 8u:
      GuildNpcMenuWin::OnClickGuildDissmissBtn(this);
      break;
    case 9u:
      GuildListTask::ShowGuildListWin();
      break;
    case 0xBu:
      GuildNpcMenuWin::Close(this);
      break;
    case 0xEu:
      GuildNpcMenuWin::OnClickGuildAcademyStorageBtn(this);
      break;
    case 0xFu:
      GuildNpcMenuWin::OnClickGuildAcademyMenuBtn(this);
      break;
    case 0x10u:
      GuildNpcMenuWin::OnHelpLink(this);
      break;
    case 0x11u:
      GuildNpcMenuWin::OnClickPrevMenuBtn(this);
      break;
    default:
      return;
  }
}

//----- (005C7430) --------------------------------------------------------
GuildNpcMenuWin *__cdecl GuildNpcMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildNpcMenuWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x18Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildNpcMenuWin::GuildNpcMenuWin((GuildNpcMenuWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildNpcMenuWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005C7560) --------------------------------------------------------
void __thiscall GuildNpcMenuWin::DirectMessage(GuildNpcMenuWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildNpcMenuWin *v4; // edi@1
  void *v5; // eax@2
  GuildDismissTask *v6; // esi@5
  CClientGuild *v7; // eax@5
  int v8; // edx@5

  v4 = this;
  if ( iMsgTag == 27 )
  {
    v5 = pvBody;
    if ( pvBody )
    {
      if ( !*(_DWORD *)pvBody
        && LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead) )
      {
        v6 = ISingletonTask<GuildDismissTask>::Run();
        v7 = GuildTask::GetGuild();
        *(_DWORD *)&v6->m_kGuildName.n4_name[0] = *(_DWORD *)&v7->baseclass_0.m_Guild.sName.n4_name[0];
        *(_DWORD *)&v6->m_kGuildName.n4_name[4] = *(_DWORD *)&v7->baseclass_0.m_Guild.sName.n4_name[4];
        *(_DWORD *)&v6->m_kGuildName.n4_name[8] = *(_DWORD *)&v7->baseclass_0.m_Guild.sName.n4_name[8];
        v8 = *(_DWORD *)&v7->baseclass_0.m_Guild.sName.n4_name[12];
        v5 = pvBody;
        *(_DWORD *)&v6->m_kGuildName.n4_name[12] = v8;
        LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead) = 0;
      }
      if ( *(_DWORD *)v5 == 1 )
        LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead) = 0;
    }
  }
}

//----- (005C75D0) --------------------------------------------------------
void __cdecl STRING_TO_NAME(char *pcString, Name3 *kName3)
{
  char *v2; // eax@1
  char v3; // cl@3
  char acTemp[12]; // [sp+8h] [bp-10h]@2
  unsigned int v5; // [sp+14h] [bp-4h]@1
  int v6; // [sp+18h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = pcString;
  if ( strlen(pcString) < 0xB )
  {
    *(_DWORD *)acTemp = 0;
    *(_DWORD *)&acTemp[4] = 0;
    *(_DWORD *)&acTemp[8] = 0;
    do
    {
      v3 = *v2;
      v2[acTemp - pcString] = *v2;
      ++v2;
    }
    while ( v3 );
    *(_QWORD *)&kName3->n3_name[4] = 0i64;
    *(_DWORD *)&kName3->n3_name[0] = 0;
    strncpy(kName3->n3_name, acTemp, 0xCu);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005C7650) --------------------------------------------------------
void *__thiscall GuildNpcMenuWin::_vector_deleting_destructor_(GuildNpcMenuWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  GuildFoundWin *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNpcMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildNpcMenuWin::_vftable_;
  v3 = this->m_spGuildFoundWin.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B6A98: using guessed type int (__stdcall *GuildNpcMenuWin___vftable_)(int uiFlags);
// 9B6AB4: using guessed type int (__thiscall *GuildNpcMenuWin___vftable_)(void *p, char);

//----- (005C76F0) --------------------------------------------------------
GuildDismissTask *__cdecl ISingletonTask<GuildDismissTask>::Run()
{
  GuildDismissTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildDismissTask *)ISingletonTask<GuildDismissTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildDismissTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x58u);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildDismissTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildDismissTask::_vftable_;
      *(_DWORD *)(v2 + 80) = 0;
      *(_DWORD *)(v2 + 76) = 0;
      *(_DWORD *)(v2 + 72) = 0;
      *(_DWORD *)(v2 + 68) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildDismissTask *)v2;
    ISingletonTask<GuildDismissTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9B6D0C: using guessed type int (__stdcall *GuildDismissTask___vftable_)(int uiFlags);
// 9B6D28: using guessed type int (__thiscall *GuildDismissTask___vftable_)(void *p, char);
// A99E00: using guessed type int ISingletonTask_GuildDismissTask___ms_pkSingletonTask;

//----- (005C7780) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildDismissTask>::_scalar_deleting_destructor_(GuildDismissTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildDismissTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildDismissTask>::_vftable_;
  ISingletonTask<GuildDismissTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B6CD8: using guessed type int (__stdcall *ISingletonTask_GuildDismissTask____vftable_)(int uiFlags);
// 9B6CF4: using guessed type int (__thiscall *ISingletonTask_GuildDismissTask____vftable_)(void *p, char);
// A99E00: using guessed type int ISingletonTask_GuildDismissTask___ms_pkSingletonTask;

//----- (005C77C0) --------------------------------------------------------
void __thiscall GuildWarInformWin::SetText(GuildWarInformWin *this, char *pcText)
{
  GuildWarInformWin *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_spTextGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  PgFadeTextGeometry::SetLifeTime(v2->m_spTextGeom.m_pObject, 3.0);
}

//----- (005C7800) --------------------------------------------------------
void __thiscall GuildWarInformWin::SetColor(GuildWarInformWin *this, D3DXCOLOR *kColor)
{
  ((void (__stdcall *)(_DWORD))this->m_spTextGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(kColor);
}

//----- (005C7820) --------------------------------------------------------
void __thiscall GuildWarInformWin::GuildWarInformWin(GuildWarInformWin *this)
{
  GuildWarInformWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarInformWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarInformWin::_vftable_;
  v1->m_spTextGeom.m_pObject = 0;
}
// 9B6D58: using guessed type int (__stdcall *GuildWarInformWin___vftable_)(int uiFlags);
// 9B6D74: using guessed type int (__thiscall *GuildWarInformWin___vftable_)(void *p, char);

//----- (005C7850) --------------------------------------------------------
void __thiscall GuildWarInformWin::_GuildWarInformWin(GuildWarInformWin *this)
{
  PgWinFrame *v1; // esi@1
  PgFadeTextGeometry *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarInformWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarInformWin::_vftable_;
  v2 = this->m_spTextGeom.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9B6D58: using guessed type int (__stdcall *GuildWarInformWin___vftable_)(int uiFlags);
// 9B6D74: using guessed type int (__thiscall *GuildWarInformWin___vftable_)(void *p, char);

//----- (005C78E0) --------------------------------------------------------
bool __thiscall GuildWarInformWin::Create(GuildWarInformWin *this, PgFrameWork *pkFrameWork)
{
  int v2; // ebx@1
  NiAVObject *v3; // esi@1
  bool v4; // al@2
  PgFont *v5; // eax@3
  PgFont *v6; // edi@3
  void *v7; // eax@4
  int v8; // eax@5
  int v9; // edi@6
  int v10; // eax@13
  int v11; // ebx@15
  int v12; // edi@15
  int v13; // eax@15
  int v14; // ecx@15
  int v15; // edx@15
  unsigned int v16; // [sp+24h] [bp-58h]@1
  D3DXCOLOR result; // [sp+34h] [bp-48h]@15
  void *v18; // [sp+44h] [bp-38h]@4
  float v19; // [sp+4Ch] [bp-30h]@15
  tagSIZE kSize; // [sp+54h] [bp-28h]@4
  tagRECT kDrawRect; // [sp+5Ch] [bp-20h]@4
  unsigned int v22; // [sp+6Ch] [bp-10h]@1
  int v23; // [sp+78h] [bp-4h]@4
  int v24; // [sp+7Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v16 = (unsigned int)&v24 ^ __security_cookie;
  v2 = 0;
  v3 = (NiAVObject *)this;
  if ( PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFrameWork, "GuildWarInformWin", 0)
    && (v5 = Font::Get(LARGEBOLD), (v6 = v5) != 0) )
  {
    SelectObject(v5->baseclass_0.m_kFontRenderStuff.hDC, v5->baseclass_0.m_hFont);
    PgFont::GetTextSize(v6, "W", 1, &kSize);
    SetRect(&kDrawRect, 0, 0, 900, kSize.cy);
    v7 = operator new(0x158u);
    v18 = v7;
    v23 = 0;
    if ( v7 )
    {
      PgFadeTextGeometry::PgFadeTextGeometry((PgFadeTextGeometry *)v7, v6);
      v2 = v8;
    }
    v9 = *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v23 = -1;
    if ( v9 != v2 )
    {
      if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
      *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    SpScreenText::SetShadowOffset(
      *(SpScreenText **)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0],
      3u);
    (*(void (__stdcall **)(tagRECT *, unsigned int))(**(_DWORD **)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0]
                                                   + 136))(
      &kDrawRect,
      v16);
    v10 = *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    *(_DWORD *)(v10 + 308) = 1;
    if ( *(_DWORD *)(v10 + 280) != 18 )
    {
      *(_DWORD *)(v10 + 280) = 18;
      *(_BYTE *)(v10 + 300) = 1;
    }
    v11 = *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v12 = *(_DWORD *)v11;
    ColorInfoTable::GetDxColor(&result, 0);
    (*(void (__thiscall **)(int))(v12 + 176))(v11);
    v13 = *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v14 = *(_DWORD *)(v13 + 88);
    v19 = -2.0;
    v15 = *(_DWORD *)(v13 + 96);
    *(_DWORD *)(v13 + 88) = v14;
    *(_DWORD *)(v13 + 92) = LODWORD(v19);
    *(_DWORD *)(v13 + 96) = v15;
    ((void (__thiscall *)(NiAVObject *, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v3,
      *(_DWORD *)&v3[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0],
      0);
    NiAVObject::UpdateProperties(v3);
    v3->baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor((NiRefObject *)v3, 900u);
    v3->baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor((NiRefObject *)v3, kSize.cy);
    ((void (__thiscall *)(NiAVObject *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v3,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.2);
    v3->baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v3, 0);
    v4 = 1;
  }
  else
  {
    v4 = 0;
  }
  return v4;
}
// A85C00: using guessed type int __security_cookie;

//----- (005C7B10) --------------------------------------------------------
GuildWarInformWin *__cdecl GuildWarInformWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildWarInformWin *v4; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildWarInformWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildWarInformWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( GuildWarInformWin::Create((GuildWarInformWin *)v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildWarInformWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    }
    v4 = 0;
  }
  return v4;
}
// 9B6D58: using guessed type int (__stdcall *GuildWarInformWin___vftable_)(int uiFlags);
// 9B6D74: using guessed type int (__thiscall *GuildWarInformWin___vftable_)(void *p, char);

//----- (005C7C50) --------------------------------------------------------
void *__thiscall GuildWarInformWin::_vector_deleting_destructor_(GuildWarInformWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  PgFadeTextGeometry *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarInformWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarInformWin::_vftable_;
  v3 = this->m_spTextGeom.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B6D58: using guessed type int (__stdcall *GuildWarInformWin___vftable_)(int uiFlags);
// 9B6D74: using guessed type int (__thiscall *GuildWarInformWin___vftable_)(void *p, char);

//----- (005C7CF0) --------------------------------------------------------
void __thiscall GuildWarKillCountWin::SetText(GuildWarKillCountWin *this, float fLifeTime, char *pcText1, char *pcText2)
{
  GuildWarKillCountWin *v4; // esi@1

  v4 = this;
  if ( 0.0 == fLifeTime )
  {
    ((void (__stdcall *)(_DWORD))this->m_aspTextGeoGuildName[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText1);
    ((void (__stdcall *)(_DWORD))v4->m_aspTextGeoGuildName[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText2);
  }
  if ( fLifeTime > 0.0 )
  {
    ((void (__stdcall *)(_DWORD))v4->m_aspTextGeoGuildName[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText1);
    ((void (__stdcall *)(_DWORD))v4->m_aspTextGeoGuildName[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText2);
    PgFadeTextGeometry::SetLifeTime(v4->m_aspTextGeoGuildName[0].m_pObject, fLifeTime);
    PgFadeTextGeometry::SetLifeTime(v4->m_aspTextGeoGuildName[1].m_pObject, fLifeTime);
  }
}

//----- (005C7D90) --------------------------------------------------------
void __thiscall GuildWarKillCountWin::_GuildWarKillCountWin(GuildWarKillCountWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarKillCountWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarKillCountWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_aspTextGeoGuildName,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 9B6FB0: using guessed type int (__stdcall *GuildWarKillCountWin___vftable_)(int uiFlags);
// 9B6FCC: using guessed type int (__thiscall *GuildWarKillCountWin___vftable_)(void *p, char);

//----- (005C7E10) --------------------------------------------------------
void __thiscall GuildWarKillCountWin::GuildWarKillCountWin(GuildWarKillCountWin *this)
{
  GuildWarKillCountWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarKillCountWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarKillCountWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_aspTextGeoGuildName,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9B6FB0: using guessed type int (__stdcall *GuildWarKillCountWin___vftable_)(int uiFlags);
// 9B6FCC: using guessed type int (__thiscall *GuildWarKillCountWin___vftable_)(void *p, char);

//----- (005C7E90) --------------------------------------------------------
bool __thiscall GuildWarKillCountWin::Create(GuildWarKillCountWin *this, PgFrameWork *pkFramework)
{
  GuildWarKillCountWin *v2; // esi@1
  bool v3; // al@2
  PgFont *v4; // eax@3
  PgFont *v5; // ebx@3
  signed int v6; // edi@4
  void *v7; // eax@6
  int v8; // eax@7
  PgFadeTextGeometry *v9; // ebx@9
  PgFadeTextGeometry *v10; // eax@17
  NiRefObjectVtbl *v11; // ebx@20
  D3DXCOLOR *v12; // eax@20
  int v13; // ecx@20
  PgFadeTextGeometry *v14; // eax@22
  float v15; // ecx@22
  float v16; // edx@22
  PgFadeTextGeometry *v17; // eax@22
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // edx@22
  unsigned int v19; // [sp+20h] [bp-70h]@1
  char v20; // [sp+30h] [bp-60h]@21
  D3DXCOLOR result; // [sp+40h] [bp-50h]@20
  float v22; // [sp+54h] [bp-3Ch]@22
  tagSIZE kSize; // [sp+5Ch] [bp-34h]@4
  PgFont *pkFont; // [sp+64h] [bp-2Ch]@3
  int iLineYPos; // [sp+68h] [bp-28h]@4
  void *v26; // [sp+6Ch] [bp-24h]@6
  tagRECT kDrawRect; // [sp+70h] [bp-20h]@4
  unsigned int v28; // [sp+80h] [bp-10h]@1
  int v29; // [sp+8Ch] [bp-4h]@6
  int v30; // [sp+90h] [bp+0h]@1

  v28 = (unsigned int)&v30 ^ __security_cookie;
  v19 = (unsigned int)&v30 ^ __security_cookie;
  v2 = this;
  if ( PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFramework, "GuildWarKillCountWin", 0)
    && (v4 = Font::Get(MENU), v5 = v4, (pkFont = v4) != 0) )
  {
    SelectObject(v4->baseclass_0.m_kFontRenderStuff.hDC, v4->baseclass_0.m_hFont);
    PgFont::GetTextSize(v5, "W", 1, &kSize);
    iLineYPos = -2;
    SetRect(&kDrawRect, 0, 0, 500, kSize.cy);
    v6 = 0;
    while ( 1 )
    {
      v7 = operator new(0x158u);
      v26 = v7;
      v29 = 0;
      if ( v7 )
      {
        PgFadeTextGeometry::PgFadeTextGeometry((PgFadeTextGeometry *)v7, v5);
        v26 = (void *)v8;
      }
      else
      {
        v26 = 0;
        v8 = 0;
      }
      v9 = v2->m_aspTextGeoGuildName[v6].m_pObject;
      v29 = -1;
      if ( v9 != (PgFadeTextGeometry *)v8 )
      {
        if ( v9 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v9 )
            v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
              (NiRefObject *)v9,
              1u);
          v8 = (int)v26;
        }
        v2->m_aspTextGeoGuildName[v6].m_pObject = (PgFadeTextGeometry *)v8;
        if ( v8 )
          InterlockedIncrement((volatile LONG *)(v8 + 4));
      }
      SpScreenText::SetShadowOffset(&v2->m_aspTextGeoGuildName[v6].m_pObject->baseclass_0.baseclass_0, 1u);
      ((void (__stdcall *)(tagRECT *, unsigned int))v2->m_aspTextGeoGuildName[v6].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(
        &kDrawRect,
        v19);
      v10 = v2->m_aspTextGeoGuildName[v6].m_pObject;
      v10->baseclass_0.m_uiDrawFormat = 1;
      if ( v10->baseclass_0.baseclass_0.m_iAlignOption != 18 )
      {
        v10->baseclass_0.baseclass_0.m_iAlignOption = 18;
        v10->baseclass_0.baseclass_0.m_bInvalidate = 1;
      }
      if ( v6 == 1 )
      {
        v11 = v2->m_aspTextGeoGuildName[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v26 = v2->m_aspTextGeoGuildName[1].m_pObject;
        v12 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v20, yellow);
        v13 = (int)v26;
      }
      else
      {
        v11 = v2->m_aspTextGeoGuildName[v6].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v26 = v2->m_aspTextGeoGuildName[v6].m_pObject;
        v12 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
        v13 = (int)v26;
      }
      v19 = (unsigned int)v12;
      ((void (__thiscall *)(int))v11[44].__vecDelDtor)(v13);
      v14 = v2->m_aspTextGeoGuildName[v6].m_pObject;
      v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
      v22 = (double)iLineYPos;
      v16 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v15;
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v22;
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v16;
      v17 = v2->m_aspTextGeoGuildName[v6].m_pObject;
      v18 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
      iLineYPos += kSize.cy + 2;
      ((void (__thiscall *)(GuildWarKillCountWin *, PgFadeTextGeometry *, _DWORD))v18)(v2, v17, 0);
      ++v6;
      if ( v6 >= 2 )
        break;
      v5 = pkFont;
    }
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
      (NiRefObject *)v2,
      45u);
    ((void (__thiscall *)(GuildWarKillCountWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.63999999,
      0.31999999);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2,
      0);
    v3 = 1;
  }
  else
  {
    v3 = 0;
  }
  return v3;
}
// A85C00: using guessed type int __security_cookie;

//----- (005C8110) --------------------------------------------------------
GuildWarKillCountWin *__cdecl GuildWarKillCountWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildWarKillCountWin *v4; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &GuildWarKillCountWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildWarKillCountWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 344,
      4u,
      2,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( GuildWarKillCountWin::Create((GuildWarKillCountWin *)v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildWarKillCountWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    }
    v4 = 0;
  }
  return v4;
}
// 9B6FB0: using guessed type int (__stdcall *GuildWarKillCountWin___vftable_)(int uiFlags);
// 9B6FCC: using guessed type int (__thiscall *GuildWarKillCountWin___vftable_)(void *p, char);

//----- (005C8270) --------------------------------------------------------
void *__thiscall GuildWarKillCountWin::_vector_deleting_destructor_(GuildWarKillCountWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarKillCountWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarKillCountWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_aspTextGeoGuildName,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B6FB0: using guessed type int (__stdcall *GuildWarKillCountWin___vftable_)(int uiFlags);
// 9B6FCC: using guessed type int (__thiscall *GuildWarKillCountWin___vftable_)(void *p, char);

//----- (005C8300) --------------------------------------------------------
void __thiscall GuildWarStateWin::SortWarListBy(GuildWarStateWin *this, int iIndex)
{
  GuildWarStateWin *v2; // esi@1
  SlideListWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pListWinGuildWar;
  if ( v3 )
  {
    v2->m_nWarSortColumn = iIndex;
    SlideListWin::Sort(v3, iIndex, 0, 0);
    SlideListWin::UpdateViewList(v2->m_pListWinGuildWar);
  }
}

//----- (005C8340) --------------------------------------------------------
void __thiscall GuildWarStateWin::SortWarableListBy(GuildWarStateWin *this, int iIndex)
{
  GuildWarStateWin *v2; // esi@1
  SlideListWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pListWinGuildWarable;
  if ( v3 )
  {
    v2->m_nWarableSortColumn = iIndex;
    SlideListWin::Sort(v3, iIndex, 0, 0);
    SlideListWin::UpdateViewList(v2->m_pListWinGuildWarable);
  }
}

//----- (005C83B0) --------------------------------------------------------
unsigned int __cdecl SumKillScore(SHINE_GUILD_SCORE *rkGuildScore)
{
  return rkGuildScore->nKillScore[0]
       + rkGuildScore->nKillScore[1]
       + rkGuildScore->nKillScore[2]
       + rkGuildScore->nKillScore[3]
       + rkGuildScore->nKillScore[4]
       + rkGuildScore->nKillScore[5]
       + rkGuildScore->nKillScore[6];
}

//----- (005C83D0) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnClose(GuildWarStateWin *this)
{
  GuildTask::SetListRefreshEnable(0);
}

//----- (005C83E0) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnHelpLink(GuildWarStateWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildWarMenu");
}

//----- (005C8410) --------------------------------------------------------
void __thiscall GuildWarStateWin::SortWarAbleListNum(GuildWarStateWin *this, int iIndex)
{
  GuildWarStateWin *v2; // esi@1
  SlideListWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pListWinGuildWarable;
  if ( v3 )
  {
    if ( iIndex >= 0 )
    {
      v2->m_nWarableSortColumn = iIndex;
      SlideListWin::Sort(v3, iIndex, 0, 1);
      SlideListWin::UpdateViewList(v2->m_pListWinGuildWarable);
    }
  }
}

//----- (005C8450) --------------------------------------------------------
void __thiscall GuildWarStateWin::UpdateTimer(GuildWarStateWin *this, float fTime)
{
  float fTimea; // [sp+8h] [bp+8h]@2

  if ( this->m_bTimer != 1 )
  {
    fTimea = fTime - this->m_fOldTime;
    if ( fTimea >= 5.0 )
      this->m_bTimer = 1;
  }
}

//----- (005C8490) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnCmdWarSlideBar(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkSlideBarGuildWarList;
  if ( v2 )
  {
    v3 = v1->m_pListWinGuildWar;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinGuildWar->m_nViewStartPos = v1->m_pkSlideBarGuildWarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinGuildWar);
    }
  }
}

//----- (005C84E0) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnClick2(GuildWarStateWin *this)
{
  int v1; // eax@2

  if ( this->m_pListWinGuildWarable )
  {
    v1 = this->m_pkSlideBarGuildWarableList->m_nCurPos;
    if ( v1 >= 0 )
    {
      this->m_pListWinGuildWarable->m_nViewStartPos = v1;
      SlideListWin::UpdateViewList(this->m_pListWinGuildWarable);
    }
  }
}

//----- (005C8520) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnClick1(GuildWarStateWin *this)
{
  int v1; // eax@2

  if ( this->m_pListWinGuildWarable )
  {
    v1 = this->m_pkSlideBarGuildWarableList->m_nCurPos;
    if ( v1 >= 0 )
    {
      this->m_pListWinGuildWarable->m_nViewStartPos = v1;
      SlideListWin::UpdateViewList(this->m_pListWinGuildWarable);
    }
  }
}

//----- (005C8560) --------------------------------------------------------
void __thiscall GuildWarStateWin::ViewSeachList(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  int v3; // eax@4
  int v4; // [sp-Ch] [bp-10h]@7
  bool v5; // [sp-8h] [bp-Ch]@7
  bool v6; // [sp-4h] [bp-8h]@7

  v1 = this;
  v2 = this->m_pkSlideBarGuildWarableList;
  if ( v2 && v1->m_pListWinGuildWarable && v1->m_nWarableSortColumn >= 0 )
  {
    v3 = ((signed int)((char *)v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast
                     - *(_DWORD *)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
       - 9;
    if ( v3 < 0 )
      v3 = 0;
    SlideBar::SetSplitCnt(v2, v3);
    SlideBar::SetCurPos(v1->m_pkSlideBarGuildWarableList, 0);
    if ( v1->m_nWarableSortColumn )
    {
      v6 = 0;
      v5 = 0;
      v4 = v1->m_nWarableSortColumn;
    }
    else
    {
      v6 = 1;
      v5 = 0;
      v4 = 0;
    }
    SlideListWin::Sort(v1->m_pListWinGuildWarable, v4, v5, v6);
    v1->m_pListWinGuildWarable->m_nViewStartPos = 0;
    SlideListWin::AlignText(v1->m_pListWinGuildWarable, 5u);
    SlideListWin::UpdateViewList(v1->m_pListWinGuildWarable);
  }
}

//----- (005C8600) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnCmdApplyGuildWar(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  int v3; // esi@2
  char *v4; // edi@2
  int v5; // edi@6
  int v6; // esi@8
  char *v7; // edi@8
  void *v8; // eax@13
  char v9; // cl@13
  bool v10; // zf@14
  int v11; // esi@21
  char *v12; // edi@21
  unsigned int v13; // [sp-4h] [bp-24h]@16
  void *pkInfo; // [sp+8h] [bp-18h]@12
  PROTO_NC_GUILD_WAR_REQ kReq; // [sp+Ch] [bp-14h]@19
  unsigned int v16; // [sp+1Ch] [bp-4h]@1
  int v17; // [sp+20h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( !CClientGuild::CanIApplyGuildWar(v2) )
  {
    v3 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v4 = TextData::Get(0x6B8371C7u);
    if ( *(_DWORD *)(v3 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 4) + 4))(25, v4, v3);
      if ( *(_DWORD *)(v3 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 4) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
    return;
  }
  v5 = SlideListWin::GetCurSelIndex(v1->m_pListWinGuildWarable);
  if ( v5 >= 0 )
  {
    if ( GuildTask::GetGuild()->baseclass_0.m_Guild.nWarStatus )
    {
      v6 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v7 = TextData::Get(0xACE3043Bu);
      if ( *(_DWORD *)(v6 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
        if ( *(_DWORD *)(v6 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
      return;
    }
    SlideListWin::GetData(v1->m_pListWinGuildWarable, v5, (unsigned int *)&pkInfo);
    if ( GuildTask::GetGuild()->baseclass_0.m_Guild.nType )
    {
      v10 = GuildTask::GetGuild()->baseclass_0.m_Guild.nType == 1;
      v8 = pkInfo;
      if ( !v10 )
        goto LABEL_19;
      v10 = *((_BYTE *)pkInfo + 20) == 0;
    }
    else
    {
      v8 = pkInfo;
      v9 = *((_BYTE *)pkInfo + 20);
      if ( !v9 )
      {
LABEL_16:
        v13 = -1003216093;
        goto LABEL_21;
      }
      v10 = v9 == 1;
    }
    if ( v10 )
      goto LABEL_16;
LABEL_19:
    *(_QWORD *)&kReq.TargetName.n4_name[8] = 0i64;
    *(_QWORD *)&kReq.TargetName.n4_name[0] = 0i64;
    *(_QWORD *)&kReq.TargetName.n4_name[0] = *(_QWORD *)((char *)v8 + 4);
    *(_QWORD *)&kReq.TargetName.n4_name[8] = *((_DWORD *)v8 + 3);
    *(_DWORD *)&kReq.TargetName.n4_name[12] = *((_DWORD *)v8 + 4);
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x22u, &kReq, 16);
    return;
  }
  v13 = (unsigned int)((char *)loc_825A97 + 1);
LABEL_21:
  v11 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  v12 = TextData::Get(v13);
  if ( *(_DWORD *)(v11 + 4) )
  {
    (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v11 + 4) + 4))(25, v12, v11);
    if ( *(_DWORD *)(v11 + 4) )
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v11 + 4) + 20))(25, v12, v11);
  }
  (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v11 + 20))(v11, 25, v12, v11);
}
// 825A97: using guessed type int __stdcall(int box, int t, int p);
// A85C00: using guessed type int __security_cookie;

//----- (005C87F0) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnCmdWarableSlideBar(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  int v2; // edi@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkSlideBarGuildWarableList->m_nCurPos;
  if ( this->m_pkSlideBarCurPos != v2 )
  {
    v3 = this->m_pListWinGuildWarable;
    if ( v3 )
    {
      if ( v2 >= 0 )
      {
        v3->m_nViewStartPos = v2;
        SlideListWin::UpdateViewList(this->m_pListWinGuildWarable);
      }
    }
    v1->m_pkSlideBarCurPos = v2;
  }
}

//----- (005C8840) --------------------------------------------------------
char *__cdecl GetGuildWarTimeLeftStr(unsigned int dwLeftTime, unsigned int dwPassedTime)
{
  char *v2; // eax@2
  char *v3; // ecx@2
  char v4; // dl@3
  unsigned int v5; // eax@4
  const void *v6; // esi@4
  void *v7; // edi@4
  char v8; // cl@5
  char *v9; // eax@8
  char *v10; // ecx@8
  char v11; // dl@9
  unsigned int v12; // eax@10
  const void *v13; // esi@10
  void *v14; // edi@10
  char v15; // cl@11
  char *v16; // eax@13
  char *v17; // ecx@13
  char v18; // dl@14
  unsigned int v19; // eax@15
  const void *v20; // esi@15
  void *v21; // edi@15
  char v22; // cl@16

  s_acTimeStr[0] = 0;
  if ( (dwLeftTime - dwPassedTime) / 0xE10 )
  {
    TextData::Get(0x48B19EA3u);
    v2 = fs("%d %s ");
    v3 = v2;
    do
      v4 = *v2++;
    while ( v4 );
    v5 = v2 - v3;
    v6 = v3;
    v7 = &s_acTimeStr[-1];
    do
    {
      v8 = *((_BYTE *)v7 + 1);
      v7 = (char *)v7 + 1;
    }
    while ( v8 );
    memcpy(v7, v6, v5);
  }
  if ( (dwLeftTime - dwPassedTime) / 0x3C % 0x3C )
  {
    TextData::Get(0xA1B497E2u);
    v9 = fs("%d %s");
    v10 = v9;
    do
      v11 = *v9++;
    while ( v11 );
    v12 = v9 - v10;
    v13 = v10;
    v14 = &s_acTimeStr[-1];
    do
    {
      v15 = *((_BYTE *)v14 + 1);
      v14 = (char *)v14 + 1;
    }
    while ( v15 );
    memcpy(v14, v13, v12);
  }
  TextData::Get(0x535F8C99u);
  v16 = fs("%d %s");
  v17 = v16;
  do
    v18 = *v16++;
  while ( v18 );
  v19 = v16 - v17;
  v20 = v17;
  v21 = &s_acTimeStr[-1];
  do
  {
    v22 = *((_BYTE *)v21 + 1);
    v21 = (char *)v21 + 1;
  }
  while ( v22 );
  memcpy(v21, v20, v19);
  return s_acTimeStr;
}

//----- (005C8970) --------------------------------------------------------
char *__cdecl GetGuildWarStatusStr(Name4 *rkName)
{
  char *result; // eax@2

  *(_QWORD *)acStr_1 = *(_QWORD *)&rkName->n4_name[0];
  *(_QWORD *)&acStr_1[8] = *(_QWORD *)&rkName->n4_name[8];
  acStr_1[16] = 0;
  if ( acStr_1[0] )
    result = acStr_1;
  else
    result = TextData::Get(0x6D738A94u);
  return result;
}

//----- (005C89C0) --------------------------------------------------------
char *__cdecl GetGuildWarStatusStr(char eStatus)
{
  char *result; // eax@2

  switch ( eStatus )
  {
    case 0:
      result = TextData::Get(0x6D738A94u);
      break;
    case 1:
      result = TextData::Get(0x7CB5CAE6u);
      break;
    case 2:
      result = TextData::Get(0xB0BAD2D2u);
      break;
    case 3:
      result = TextData::Get(0xC4B9C9EBu);
      break;
    default:
      result = ".";
      break;
  }
  return result;
}

//----- (005C8A30) --------------------------------------------------------
char *__cdecl GetGuildTypeStr(char type)
{
  char *result; // eax@3

  if ( type )
  {
    if ( type == 1 )
      result = TextData::Get(0x3E486D96u);
    else
      result = ".";
  }
  else
  {
    result = TextData::Get(0x3E3D34A2u);
  }
  return result;
}

//----- (005C8A70) --------------------------------------------------------
char *__cdecl GetGuildMemberCount(unsigned __int16 wCount)
{
  char *result; // eax@2

  if ( wCount == -1 )
    result = TextData::Get(0x5081E30u);
  else
    result = fs("%d");
  return result;
}

//----- (005C8AB0) --------------------------------------------------------
char *__cdecl GetWarableStr(char byWarable)
{
  char *result; // eax@2

  if ( byWarable )
    result = TextData::Get(0xD4C0D437u);
  else
    result = TextData::Get(0xC9113434u);
  return result;
}

//----- (005C8AE0) --------------------------------------------------------
void __thiscall GuildWarStateWin::AddGuildWarListItem(GuildWarStateWin *this, SHINE_GUILD_WAR_INFO *pkData)
{
  GuildWarStateWin *v2; // ebx@1
  SlideListWin *v3; // ecx@1
  int v4; // eax@2
  int v5; // ecx@2
  int v6; // edx@2
  unsigned int v7; // edi@2
  int v8; // eax@2
  char *v9; // eax@2
  signed __int64 v10; // ST1C_8@2
  char *v11; // eax@2
  char *v12; // eax@2
  char *v13; // eax@2
  char *v14; // eax@5
  unsigned int v15; // [sp-8h] [bp-34h]@3
  char acGuildName[17]; // [sp+14h] [bp-18h]@2
  unsigned int v17; // [sp+28h] [bp-4h]@1
  int v18; // [sp+2Ch] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinGuildWar;
  if ( v3 )
  {
    v4 = SlideListWin::AddText(v3, 0);
    v5 = *(_DWORD *)&pkData->sName.n4_name[4];
    v6 = *(_DWORD *)&pkData->sName.n4_name[8];
    v7 = v4;
    *(_DWORD *)acGuildName = *(_DWORD *)&pkData->sName.n4_name[0];
    v8 = *(_DWORD *)&pkData->sName.n4_name[12];
    *(_DWORD *)&acGuildName[4] = v5;
    *(_DWORD *)&acGuildName[8] = v6;
    *(_DWORD *)&acGuildName[12] = v8;
    acGuildName[16] = 0;
    v9 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuildWar, v7, 0, v9);
    SlideListWin::SetText(v2->m_pListWinGuildWar, v7, 1u, acGuildName);
    v10 = (signed __int64)GuildTask::GetPassedTimeSinceRefresh();
    v11 = GetGuildWarTimeLeftStr(pkData->nWarStatusRemainSec, v10);
    SlideListWin::SetText(v2->m_pListWinGuildWar, v7, 2u, v11);
    v12 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuildWar, v7, 3u, v12);
    v13 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuildWar, v7, 4u, v13);
    if ( pkData->nRequestNo == GuildTask::GetGuild()->baseclass_0.m_Guild.nNo )
      v15 = -353235157;
    else
      v15 = -1560537305;
    TextData::Get(v15);
    GetGuildWarStatusStr(pkData->nWarStatus);
    v14 = fs("%s/%s");
    SlideListWin::SetText(v2->m_pListWinGuildWar, v7, 5u, v14);
    SlideListWin::SetData(v2->m_pListWinGuildWar, v7, 0xFFFFFFFFu);
    SlideListWin::SetFontSize(v2->m_pListWinGuildWar, v7, 1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005C8CB0) --------------------------------------------------------
void __thiscall GuildWarStateWin::AddGuildWarableListItem(GuildWarStateWin *this, SHINE_GUILD_WAR_ABLE_INFO *pkData)
{
  GuildWarStateWin *v2; // ebx@1
  int v3; // eax@2
  int v4; // ecx@2
  int v5; // edx@2
  unsigned int v6; // edi@2
  int v7; // eax@2
  char *v8; // eax@2
  char *v9; // eax@2
  char *v10; // eax@4
  char *v11; // eax@9
  unsigned int v12; // [sp-8h] [bp-28h]@5
  char acGuildName[17]; // [sp+8h] [bp-18h]@2
  unsigned int v14; // [sp+1Ch] [bp-4h]@1
  int v15; // [sp+20h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  if ( !this->m_pListWinGuildWar )
    return;
  v3 = SlideListWin::AddText(this->m_pListWinGuildWarable, 0);
  v4 = *(_DWORD *)&pkData->sName.n4_name[4];
  v5 = *(_DWORD *)&pkData->sName.n4_name[8];
  v6 = v3;
  *(_DWORD *)acGuildName = *(_DWORD *)&pkData->sName.n4_name[0];
  v7 = *(_DWORD *)&pkData->sName.n4_name[12];
  *(_DWORD *)&acGuildName[4] = v4;
  *(_DWORD *)&acGuildName[8] = v5;
  *(_DWORD *)&acGuildName[12] = v7;
  acGuildName[16] = 0;
  GuildTask::GetGuild();
  v8 = fs("%d");
  SlideListWin::SetText(v2->m_pListWinGuildWarable, v6, 0, v8);
  SlideListWin::SetText(v2->m_pListWinGuildWarable, v6, 1u, acGuildName);
  v9 = GetGuildWarStatusStr(&pkData->sTargetName);
  SlideListWin::SetText(v2->m_pListWinGuildWarable, v6, 2u, v9);
  if ( !pkData->nType )
  {
    v12 = 1044198562;
    goto LABEL_7;
  }
  if ( pkData->nType == 1 )
  {
    v12 = 1044934038;
LABEL_7:
    v10 = TextData::Get(v12);
    goto LABEL_8;
  }
  v10 = ".";
LABEL_8:
  SlideListWin::SetText(v2->m_pListWinGuildWarable, v6, 3u, v10);
  if ( pkData->nNumMembers == -1 )
    v11 = TextData::Get(0x5081E30u);
  else
    v11 = fs("%d");
  SlideListWin::SetText(v2->m_pListWinGuildWarable, v6, 4u, v11);
  SlideListWin::SetData(v2->m_pListWinGuildWarable, v6, (unsigned int)pkData);
}
// A85C00: using guessed type int __security_cookie;

//----- (005C8DF0) --------------------------------------------------------
void __thiscall GuildWarStateWin::UpdateMeWin(GuildWarStateWin *this, float fCurTime)
{
  GuildWarStateWin *v2; // esi@1
  CGuildWar::GUILD_WAR_LIST *v3; // ebx@1
  unsigned int v4; // edi@1
  char *v5; // eax@4
  PgFrameWork *v6; // edi@6
  unsigned int dwLastTime; // [sp+Ch] [bp-10h]@3
  unsigned int thisa[2]; // [sp+10h] [bp-Ch]@1
  float fCurTimea; // [sp+24h] [bp+8h]@9

  v2 = this;
  *(_QWORD *)thisa = (signed __int64)GuildTask::GetPassedTimeSinceRefresh();
  thisa[1] = thisa[0];
  v3 = GuildTask::GetGuild()->baseclass_0.m_GuildWar.m_pGuildWarListTop;
  v4 = 0;
  if ( SlideListWin::GetItemSize(v2->m_pListWinGuildWar) )
  {
    do
    {
      if ( !v3 )
        break;
      SlideListWin::GetData(v2->m_pListWinGuildWar, v4, &dwLastTime);
      if ( v3->WarInfo.nWarStatusRemainSec - thisa[1] < dwLastTime )
      {
        v5 = GetGuildWarTimeLeftStr(v3->WarInfo.nWarStatusRemainSec, thisa[1]);
        SlideListWin::SetText(v2->m_pListWinGuildWar, v4, 2u, v5);
        SlideListWin::SetData(v2->m_pListWinGuildWar, v4, v3->WarInfo.nWarStatusRemainSec);
      }
      v3 = v3->pLinkDn;
      ++v4;
    }
    while ( v4 < SlideListWin::GetItemSize(v2->m_pListWinGuildWar) );
  }
  SlideListWin::UpdateViewList(v2->m_pListWinGuildWar);
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v6 )
  {
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v6, v2->m_pListWinGuildWar, v2->m_pkSlideBarGuildWarList);
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v6, v2->m_pListWinGuildWarable, v2->m_pkSlideBarGuildWarableList);
  }
  if ( v2->m_bTimer != 1 )
  {
    fCurTimea = fCurTime - v2->m_fOldTime;
    if ( fCurTimea >= 5.0 )
      v2->m_bTimer = 1;
  }
}

//----- (005C8F30) --------------------------------------------------------
bool __thiscall GuildWarStateWin::IsSeachNameSize(GuildWarStateWin *this, char *pSearchName)
{
  unsigned int v3; // edi@3
  PgFrameWork *v4; // esi@3
  char *v5; // eax@6
  char *v6; // eax@8
  char dbcs; // [sp+8h] [bp+8h]@3

  if ( !pSearchName )
    return 0;
  v3 = strlen(pSearchName);
  dbcs = *pSearchName;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v4 )
    return 0;
  if ( IsDBCSLeadByte(dbcs) )
  {
    if ( v3 < 2 )
    {
      v5 = TextData3::Get(0x96D0CDB6u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
      return 0;
    }
    return 1;
  }
  if ( v3 < 1 )
  {
    v6 = TextData3::Get(0x96D0CDB6u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4, v6);
    return 0;
  }
  return 1;
}

//----- (005C8FD0) --------------------------------------------------------
void __thiscall GuildWarStateWin::InvalidateGuildWarList(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // ebx@1
  CGuildWar::GUILD_WAR_LIST *i; // esi@1
  SlideListWin *v3; // ecx@2
  int v4; // eax@3
  int v5; // ecx@3
  int v6; // edx@3
  unsigned int v7; // edi@3
  int v8; // eax@3
  char *v9; // eax@3
  signed __int64 v10; // ST18_8@3
  char *v11; // eax@3
  char *v12; // eax@3
  char *v13; // eax@3
  char *v14; // eax@11
  unsigned int v15; // [sp-8h] [bp-34h]@4
  char szText[4]; // [sp+14h] [bp-18h]@3
  int v17; // [sp+18h] [bp-14h]@3
  int v18; // [sp+1Ch] [bp-10h]@3
  int v19; // [sp+20h] [bp-Ch]@3
  char v20; // [sp+24h] [bp-8h]@3
  unsigned int v21; // [sp+28h] [bp-4h]@1
  int v22; // [sp+2Ch] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v1 = this;
  SlideListWin::RemoveAllList(this->m_pListWinGuildWar);
  for ( i = GuildTask::GetGuild()->baseclass_0.m_GuildWar.m_pGuildWarListTop; i; i = i->pLinkDn )
  {
    v3 = v1->m_pListWinGuildWar;
    if ( v3 )
    {
      v4 = SlideListWin::AddText(v3, 0);
      v5 = *(_DWORD *)&i->WarInfo.sName.n4_name[4];
      v6 = *(_DWORD *)&i->WarInfo.sName.n4_name[8];
      v7 = v4;
      *(_DWORD *)szText = *(_DWORD *)&i->WarInfo.sName.n4_name[0];
      v8 = *(_DWORD *)&i->WarInfo.sName.n4_name[12];
      v17 = v5;
      v18 = v6;
      v19 = v8;
      v20 = 0;
      v9 = fs("%d");
      SlideListWin::SetText(v1->m_pListWinGuildWar, v7, 0, v9);
      SlideListWin::SetText(v1->m_pListWinGuildWar, v7, 1u, szText);
      v10 = (signed __int64)GuildTask::GetPassedTimeSinceRefresh();
      v11 = GetGuildWarTimeLeftStr(i->WarInfo.nWarStatusRemainSec, v10);
      SlideListWin::SetText(v1->m_pListWinGuildWar, v7, 2u, v11);
      v12 = fs("%d");
      SlideListWin::SetText(v1->m_pListWinGuildWar, v7, 3u, v12);
      v13 = fs("%d");
      SlideListWin::SetText(v1->m_pListWinGuildWar, v7, 4u, v13);
      if ( i->WarInfo.nRequestNo == GuildTask::GetGuild()->baseclass_0.m_Guild.nNo )
        v15 = -353235157;
      else
        v15 = -1560537305;
      TextData::Get(v15);
      switch ( i->WarInfo.nWarStatus )
      {
        case 0:
          TextData::Get(0x6D738A94u);
          break;
        case 1:
          TextData::Get(0x7CB5CAE6u);
          break;
        case 2:
          TextData::Get(0xB0BAD2D2u);
          break;
        case 3:
          TextData::Get(0xC4B9C9EBu);
          break;
        default:
          break;
      }
      v14 = fs("%s/%s");
      SlideListWin::SetText(v1->m_pListWinGuildWar, v7, 5u, v14);
      SlideListWin::SetData(v1->m_pListWinGuildWar, v7, 0xFFFFFFFFu);
      SlideListWin::SetFontSize(v1->m_pListWinGuildWar, v7, 1);
    }
  }
  SlideListWin::Sort(v1->m_pListWinGuildWar, v1->m_nWarSortColumn, 0, 0);
  SlideListWin::AlignText(v1->m_pListWinGuildWar, 5u);
  SlideListWin::UpdateViewList(v1->m_pListWinGuildWar);
  SlideBar::SetSplitCnt(v1->m_pkSlideBarGuildWarList, v1->m_pListWinGuildWar->m_nSlideSplitCnt);
}
// A85C00: using guessed type int __security_cookie;

//----- (005C9270) --------------------------------------------------------
void __thiscall GuildWarStateWin::InvalidateGuildWarableList(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // edi@1
  CGuildWarAble::GUILD_WAR_ABLE_LIST *v2; // esi@1
  int v3; // eax@3
  int v4; // ecx@3
  int v5; // edx@3
  unsigned int v6; // ebx@3
  int v7; // eax@3
  char *v8; // eax@3
  char *v9; // eax@4
  char *v10; // eax@8
  char *v11; // eax@13
  CClientGuild *v12; // eax@20
  CClientGuild *v13; // eax@21
  int v14; // [sp-Ch] [bp-2Ch]@18
  unsigned int v15; // [sp-8h] [bp-28h]@9
  bool v16; // [sp-8h] [bp-28h]@18
  bool v17; // [sp-4h] [bp-24h]@18
  char szText[4]; // [sp+8h] [bp-18h]@3
  int v19; // [sp+Ch] [bp-14h]@3
  int v20; // [sp+10h] [bp-10h]@3
  int v21; // [sp+14h] [bp-Ch]@3
  char v22; // [sp+18h] [bp-8h]@3
  unsigned int v23; // [sp+1Ch] [bp-4h]@1
  int v24; // [sp+20h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v1 = this;
  SlideListWin::RemoveAllList(this->m_pListWinGuildWarable);
  v2 = GuildTask::GetGuild()->m_GuildWarAble.m_pGuildWarAbleListTop;
  if ( v2 )
  {
    while ( !v1->m_pListWinGuildWar )
    {
LABEL_16:
      v2 = v2->pLinkDn;
      if ( !v2 )
        goto LABEL_17;
    }
    v3 = SlideListWin::AddText(v1->m_pListWinGuildWarable, 0);
    v4 = *(_DWORD *)&v2->WarInfo.sName.n4_name[4];
    v5 = *(_DWORD *)&v2->WarInfo.sName.n4_name[8];
    v6 = v3;
    *(_DWORD *)szText = *(_DWORD *)&v2->WarInfo.sName.n4_name[0];
    v7 = *(_DWORD *)&v2->WarInfo.sName.n4_name[12];
    v19 = v4;
    v20 = v5;
    v21 = v7;
    v22 = 0;
    GuildTask::GetGuild();
    v8 = fs("%d");
    SlideListWin::SetText(v1->m_pListWinGuildWarable, v6, 0, v8);
    SlideListWin::SetText(v1->m_pListWinGuildWarable, v6, 1u, szText);
    *(_DWORD *)acStr_1 = *(_DWORD *)&v2->WarInfo.sTargetName.n4_name[0];
    *(_DWORD *)&acStr_1[4] = *(_DWORD *)&v2->WarInfo.sTargetName.n4_name[4];
    *(_DWORD *)&acStr_1[8] = *(_DWORD *)&v2->WarInfo.sTargetName.n4_name[8];
    *(_DWORD *)&acStr_1[12] = *(_DWORD *)&v2->WarInfo.sTargetName.n4_name[12];
    acStr_1[16] = 0;
    if ( acStr_1[0] )
      v9 = acStr_1;
    else
      v9 = TextData::Get(0x6D738A94u);
    SlideListWin::SetText(v1->m_pListWinGuildWarable, v6, 2u, v9);
    if ( v2->WarInfo.nType )
    {
      if ( v2->WarInfo.nType != 1 )
      {
        v10 = ".";
LABEL_12:
        SlideListWin::SetText(v1->m_pListWinGuildWarable, v6, 3u, v10);
        if ( v2->WarInfo.nNumMembers == -1 )
          v11 = TextData::Get(0x5081E30u);
        else
          v11 = fs("%d");
        SlideListWin::SetText(v1->m_pListWinGuildWarable, v6, 4u, v11);
        SlideListWin::SetData(v1->m_pListWinGuildWarable, v6, (unsigned int)v2);
        goto LABEL_16;
      }
      v15 = 1044934038;
    }
    else
    {
      v15 = 1044198562;
    }
    v10 = TextData::Get(v15);
    goto LABEL_12;
  }
LABEL_17:
  if ( v1->m_nWarableSortColumn )
  {
    v17 = 0;
    v16 = 0;
    v14 = v1->m_nWarableSortColumn;
  }
  else
  {
    v17 = 1;
    v16 = 0;
    v14 = 0;
  }
  SlideListWin::Sort(v1->m_pListWinGuildWarable, v14, v16, v17);
  SlideListWin::AlignText(v1->m_pListWinGuildWarable, 5u);
  SlideListWin::UpdateViewList(v1->m_pListWinGuildWarable);
  v12 = GuildTask::GetGuild();
  if ( v12 )
  {
    v1->m_pkSlideBarCurPos = v12->m_iCurrPage;
    v13 = GuildTask::GetGuild();
    SlideBar::SetSplitCnt(v1->m_pkSlideBarGuildWarableList, v13->m_GuildWarAble.m_NumOfWarAbleList - 9);
    SlideBar::SetCurPos(v1->m_pkSlideBarGuildWarableList, v1->m_pkSlideBarCurPos);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005C9490) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnShowWin(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  PgFrameWork *v2; // esi@2
  char *v3; // eax@3
  CClientGuild *v4; // eax@4
  CClientGuild *v5; // eax@4

  v1 = this;
  if ( this->m_bTimer )
  {
    this->m_bTimer = 0;
    this->m_fOldTime = Timer::ms_fCurTime;
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x24u, 0, 0);
    v4 = GuildTask::GetGuild();
    CGuildWar::Clear(&v4->baseclass_0.m_GuildWar);
    v5 = GuildTask::GetGuild();
    CGuildWarAble::Clear(&v5->m_GuildWarAble);
    GuildWarStateWin::InvalidateGuildWarList(v1);
    GuildWarStateWin::InvalidateGuildWarableList(v1);
    GuildTask::SetListRefreshEnable(1);
  }
  else
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
    {
      v3 = TextData3::Get(0x32D6F69u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v2, v3);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005C9530) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnFirstPage(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinGuildWarable;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    v1->m_pListWinGuildWarable->m_nViewStartPos = 0;
    SlideListWin::UpdateViewList(v1->m_pListWinGuildWarable);
    GuildWarStateWin::InvalidateGuildWarableList(v1);
  }
}

//----- (005C9570) --------------------------------------------------------
bool __thiscall GuildWarStateWin::IsSeachHaveList(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  PgFrameWork *v2; // edi@1
  SHINE_GUILD_WAR_ABLE_INFO **i; // edi@3
  char *v5; // eax@6

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v2 )
    return 0;
  if ( !((unsigned int)((char *)v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast
                      - *(_DWORD *)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFC) )
  {
    v5 = TextData3::Get(0xB5D1D1A8u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v2, v5);
    return 0;
  }
  SlideListWin::RemoveAllList(v1->m_pListWinGuildWarable);
  SlideListWin::UpdateViewList(v1->m_pListWinGuildWarable);
  for ( i = *(SHINE_GUILD_WAR_ABLE_INFO ***)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0];
        i != v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast;
        ++i )
    GuildWarStateWin::AddGuildWarableListItem(v1, *i);
  return 1;
}

//----- (005C9600) --------------------------------------------------------
void __thiscall GuildWarStateWin::GuildWarStateWin(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarStateWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarStateWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
  *(_DWORD *)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast = 0;
  v1->m_vecSeachAbleGuildWar.baseclass_0._Myend = 0;
  v1->m_fOldTime = 0.0;
  v1->m_pListWinGuildWar = 0;
  v1->m_pkSlideBarGuildWarList = 0;
  v1->m_nWarSortColumn = 0;
  v1->m_nWarableSortColumn = 0;
  v1->m_pkSlideBarCurPos = 0;
  v1->m_bTimer = 1;
}
// 9B76FC: using guessed type int (__stdcall *GuildWarStateWin___vftable_)(int uiFlags);
// 9B771C: using guessed type int (__thiscall *GuildWarStateWin___vftable_)(void *p, char);

//----- (005C9670) --------------------------------------------------------
void __thiscall GuildWarStateWin::_GuildWarStateWin(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  void *v2; // eax@1
  EditWin *v3; // edi@3

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWarStateWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWarStateWin::_vftable_;
  v2 = *(void **)&this->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
    operator delete(v2);
  *(_DWORD *)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast = 0;
  v1->m_vecSeachAbleGuildWar.baseclass_0._Myend = 0;
  v3 = v1->m_spEdit.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B76FC: using guessed type int (__stdcall *GuildWarStateWin___vftable_)(int uiFlags);
// 9B771C: using guessed type int (__thiscall *GuildWarStateWin___vftable_)(void *p, char);

//----- (005C9720) --------------------------------------------------------
GuildWarStateWin *__cdecl GuildWarStateWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildWarStateWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x190u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildWarStateWin::GuildWarStateWin((GuildWarStateWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildWarStateWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005C9850) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnSearch(GuildWarStateWin *this)
{
  GuildWarStateWin *v1; // esi@1
  char *v2; // eax@1
  char *v3; // ebx@1
  char *v4; // ecx@3
  char *v5; // edi@3
  CGuildWarAble::GUILD_WAR_ABLE_LIST *i; // edi@5
  unsigned int v7; // eax@7
  unsigned int v8; // ecx@8
  signed int v9; // ebx@9
  SHINE_GUILD_WAR_ABLE_INFO **v10; // eax@11
  SHINE_GUILD_WAR_ABLE_INFO **v11; // eax@16
  char *kSearchGuildName; // [sp+Ch] [bp-40h]@1
  CGuildWarAble::GUILD_WAR_ABLE_LIST *v13; // [sp+10h] [bp-3Ch]@7
  char strGuildName[32]; // [sp+14h] [bp-38h]@6
  char acname[17]; // [sp+34h] [bp-18h]@6
  unsigned int v16; // [sp+48h] [bp-4h]@1
  int v17; // [sp+4Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v1 = this;
  v2 = (char *)((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = v2;
  kSearchGuildName = v2;
  if ( v2 && GuildWarStateWin::IsSeachNameSize(v1, v2) )
  {
    v4 = (char *)v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast;
    v5 = *(char **)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v5 != v4 )
    {
      memmove(v5, v4, 0);
      v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast = (SHINE_GUILD_WAR_ABLE_INFO **)v5;
      v3 = kSearchGuildName;
    }
    for ( i = GuildTask::GetGuild()->m_GuildWarAble.m_pGuildWarAbleListTop; i; i = i->pLinkDn )
    {
      *(_DWORD *)strGuildName = 0;
      *(_DWORD *)&strGuildName[4] = 0;
      *(_DWORD *)&strGuildName[8] = 0;
      *(_DWORD *)&strGuildName[12] = 0;
      *(_DWORD *)&strGuildName[16] = 0;
      *(_DWORD *)&strGuildName[20] = 0;
      *(_DWORD *)&strGuildName[24] = 0;
      *(_DWORD *)&strGuildName[28] = 0;
      *(_DWORD *)acname = *(_DWORD *)&i->WarInfo.sName.n4_name[0];
      *(_DWORD *)&acname[4] = *(_DWORD *)&i->WarInfo.sName.n4_name[4];
      *(_DWORD *)&acname[8] = *(_DWORD *)&i->WarInfo.sName.n4_name[8];
      *(_DWORD *)&acname[12] = *(_DWORD *)&i->WarInfo.sName.n4_name[12];
      acname[16] = 0;
      strncpy(strGuildName, acname, 0x12u);
      _strlwr(strGuildName);
      _strlwr(v3);
      if ( _mbsstr(strGuildName, v3) )
      {
        v7 = (unsigned int)v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast;
        v13 = i;
        if ( (unsigned int)&v13 >= v7
          || (v8 = *(_DWORD *)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0], v8 > (unsigned int)&v13) )
        {
          if ( (SHINE_GUILD_WAR_ABLE_INFO **)v7 == v1->m_vecSeachAbleGuildWar.baseclass_0._Myend )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v1->m_vecSeachAbleGuildWar,
              1u);
          v11 = v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast;
          if ( v11 )
            *v11 = (SHINE_GUILD_WAR_ABLE_INFO *)i;
        }
        else
        {
          v9 = (signed int)((char *)&v13 - v8) >> 2;
          if ( (SHINE_GUILD_WAR_ABLE_INFO **)v7 == v1->m_vecSeachAbleGuildWar.baseclass_0._Myend )
            std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
              (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&v1->m_vecSeachAbleGuildWar,
              1u);
          v10 = v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast;
          if ( v10 )
            *v10 = *(SHINE_GUILD_WAR_ABLE_INFO **)(*(_DWORD *)&v1->m_vecSeachAbleGuildWar.baseclass_0.___u0.baseclass_0.dummy[0]
                                                 + 4 * v9);
          v3 = kSearchGuildName;
        }
        ++v1->m_vecSeachAbleGuildWar.baseclass_0._Mylast;
      }
    }
    if ( GuildWarStateWin::IsSeachHaveList(v1) )
      GuildWarStateWin::ViewSeachList(v1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005C99F0) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnCommand(GuildWarStateWin *this, unsigned int wParam, int lParam)
{
  GuildWarStateWin *v3; // esi@1
  CClientGuild *v4; // eax@8
  CClientGuild *v5; // eax@9

  v3 = this;
  switch ( wParam )
  {
    case 2u:
      GuildWarStateWin::OnCmdWarSlideBar(this);
      break;
    case 5u:
      GuildWarStateWin::OnCmdWarableSlideBar(this);
      break;
    case 8u:
      GuildWarStateWin::OnCmdApplyGuildWar(this);
      break;
    case 9u:
    case 0xAu:
    case 0xBu:
    case 0xCu:
    case 0xDu:
    case 0xEu:
      GuildWarStateWin::SortWarListBy(this, wParam - 9);
      break;
    case 0xFu:
      GuildWarStateWin::SortWarAbleListNum(this, 0);
      break;
    case 0x10u:
    case 0x11u:
    case 0x12u:
    case 0x13u:
    case 0x14u:
      GuildWarStateWin::SortWarableListBy(this, wParam - 15);
      break;
    case 6u:
      v4 = GuildTask::GetGuild();
      CClientGuild::ReqNextPage(v4);
      break;
    case 7u:
      v5 = GuildTask::GetGuild();
      CClientGuild::ReqPrevPage(v5);
      break;
    case 0x17u:
      GuildWarStateWin::OnSearch(this);
      break;
    case 0x18u:
      GuildTask::SetListRefreshEnable(1);
      ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)(v3);
      break;
    case 0x16u:
      GuildWarStateWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005C9B10) --------------------------------------------------------
void __thiscall GuildWarStateWin::OnEditEnd(GuildWarStateWin *this, unsigned int wParam, int lParam)
{
  GuildWarStateWin *v3; // esi@1
  EditWin *v4; // edi@1
  NiRefObjectVtbl *v5; // ebx@1
  int v6; // eax@1

  v3 = this;
  v4 = this->m_spEdit.m_pObject;
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)(this->m_spEdit.m_pObject);
  v5[115].__vecDelDtor((NiRefObject *)v4, v6);
  ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  GuildWarStateWin::OnSearch(v3);
}

//----- (005C9B50) --------------------------------------------------------
bool __thiscall GuildWarStateWin::Create(GuildWarStateWin *this, PgFrameWork *pkFrameWork)
{
  GuildWarStateWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  NiNode *v12; // esi@14
  PgFont *v13; // eax@19
  PgWinText *v14; // eax@19
  NiRefObjectVtbl *v15; // edx@19
  char *v16; // eax@19
  PgSprData *v17; // eax@21
  PgSprData *v18; // eax@21
  SLWCreateInfo::Item *v19; // eax@21
  void *v20; // eax@31
  PgSprData *v21; // eax@39
  SlideListWin *v22; // eax@39
  PgSprData *v23; // eax@39
  SlideBar *v24; // eax@39
  int v25; // ecx@39
  void *v26; // eax@39
  PgFont *v27; // eax@39
  PgWinText *v28; // eax@39
  NiRefObjectVtbl *v29; // edx@39
  char *v30; // eax@39
  int v31; // ecx@39
  void *v32; // eax@39
  PgFont *v33; // eax@39
  PgWinText *v34; // eax@39
  NiRefObjectVtbl *v35; // edx@39
  char *v36; // eax@39
  int v37; // ecx@39
  void *v38; // eax@39
  PgFont *v39; // eax@39
  PgWinText *v40; // eax@39
  NiRefObjectVtbl *v41; // edx@39
  char *v42; // eax@39
  int v43; // ecx@39
  void *v44; // eax@39
  PgFont *v45; // eax@39
  PgWinText *v46; // eax@39
  NiRefObjectVtbl *v47; // edx@39
  char *v48; // eax@39
  int v49; // ecx@39
  void *v50; // eax@39
  PgFont *v51; // eax@39
  PgWinText *v52; // eax@39
  NiRefObjectVtbl *v53; // edx@39
  char *v54; // eax@39
  int v55; // ecx@39
  void *v56; // eax@39
  PgFont *v57; // eax@39
  PgWinText *v58; // eax@39
  NiRefObjectVtbl *v59; // edx@39
  char *v60; // eax@39
  PgFont *v61; // eax@41
  PgWinText *v62; // eax@41
  NiRefObjectVtbl *v63; // edx@41
  char *v64; // eax@41
  SLWCreateInfo::Item *v65; // eax@41
  void *v66; // eax@41
  PgSprData *v67; // eax@41
  SlideListWin *v68; // eax@41
  PgSprData *v69; // eax@41
  SlideBar *v70; // eax@41
  int v71; // ecx@41
  void *v72; // eax@41
  PgFont *v73; // eax@41
  PgWinText *v74; // eax@41
  NiRefObjectVtbl *v75; // edx@41
  char *v76; // eax@41
  int v77; // ecx@41
  void *v78; // eax@41
  PgFont *v79; // eax@41
  PgWinText *v80; // eax@41
  NiRefObjectVtbl *v81; // edx@41
  char *v82; // eax@41
  int v83; // ecx@41
  void *v84; // eax@41
  PgFont *v85; // eax@41
  PgWinText *v86; // eax@41
  NiRefObjectVtbl *v87; // edx@41
  char *v88; // eax@41
  int v89; // ecx@41
  void *v90; // eax@41
  PgFont *v91; // eax@41
  PgWinText *v92; // eax@41
  NiRefObjectVtbl *v93; // edx@41
  char *v94; // eax@41
  int v95; // ecx@41
  void *v96; // eax@41
  PgFont *v97; // eax@41
  PgWinText *v98; // eax@41
  NiRefObjectVtbl *v99; // edx@41
  char *v100; // eax@41
  PgFont *v101; // eax@42
  PgWinText *v102; // eax@42
  NiRefObjectVtbl *v103; // edx@42
  char *v104; // eax@42
  int v105; // ecx@42
  int v106; // eax@42
  PgFont *v107; // eax@42
  PgWinText *v108; // eax@42
  NiRefObjectVtbl *v109; // edx@42
  char *v110; // eax@42
  PgSprData::PgHitTester *v111; // eax@42
  void *v112; // edx@42
  PgFont *v113; // eax@42
  PgWinText *v114; // eax@42
  NiRefObjectVtbl *v115; // edx@42
  char *v116; // eax@42
  EditWin *v117; // eax@42
  int v118; // ecx@42
  void *v119; // eax@42
  PgFont *v120; // eax@42
  PgWinText *v121; // eax@42
  NiRefObjectVtbl *v122; // edx@42
  char *v123; // eax@42
  int v124; // ecx@42
  void *v125; // eax@42
  PgFont *v126; // eax@42
  PgWinText *v127; // edi@42
  NiRefObjectVtbl *v128; // ebx@42
  char *v129; // eax@42
  const char *v130; // [sp+D8h] [bp-84h]@11
  int *v131; // [sp+DCh] [bp-80h]@11
  int *v132; // [sp+E0h] [bp-7Ch]@11
  NiSourceTexture *v133; // [sp+E4h] [bp-78h]@11
  unsigned int v134; // [sp+E8h] [bp-74h]@1
  SLWCreateInfo kCreateInfo; // [sp+F8h] [bp-64h]@21
  unsigned int uiWidth; // [sp+114h] [bp-48h]@13
  unsigned int uiHeight; // [sp+118h] [bp-44h]@13
  NiSourceTexture *pkTexture8; // [sp+11Ch] [bp-40h]@19
  int uiTop; // [sp+120h] [bp-3Ch]@4
  int uiLeft; // [sp+124h] [bp-38h]@4
  NiPointer<NiNode> spNode; // [sp+128h] [bp-34h]@1
  void *pkTextWin; // [sp+12Ch] [bp-30h]@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+130h] [bp-2Ch]@21
  unsigned int v144; // [sp+14Ch] [bp-10h]@1
  int v145; // [sp+158h] [bp-4h]@1
  int v146; // [sp+15Ch] [bp+0h]@1

  v144 = (unsigned int)&v146 ^ __security_cookie;
  v134 = (unsigned int)&v146 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v145 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildWarMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildWarStateWin", 0) )
  {
    v6 = spNode.m_pObject;
    v145 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v133 = v10;
    v132 = &uiTop;
    v131 = &uiLeft;
    v130 = "Theme";
  }
  else
  {
    v133 = 0;
    v132 = &uiTop;
    v131 = &uiLeft;
    v130 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v130, v131, v132, v133);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v13 = Font::Get(0);
    v14 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            uiWidth,
            uiHeight,
            v13,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v15 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v14;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v15[122].__vecDelDtor)(v14, 1, v134);
    (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
    pkTexture8 = *(NiSourceTexture **)pkTextWin;
    v16 = TextData::Get(0xC9253B46u);
    (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v16);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0);
    pkTexture8 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x16u,
        0,
        0);
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v145) = 1;
    v19 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v19->nItemType = 1;
    v19->pNode = spNode.m_pObject;
    pkTextWin = v19;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    LOBYTE(v145) = 2;
    pkTextWin = (char *)pkTextWin + 72;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v145) = 3;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v145) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
    LOBYTE(v145) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
    LOBYTE(v145) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v20 = pkTextWin;
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    *((_BYTE *)v20 + 88) = 1;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
    LOBYTE(v145) = 7;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
    LOBYTE(v145) = 8;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column05", 8u);
    LOBYTE(v145) = 9;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column06", 8u);
    LOBYTE(v145) = 10;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v145) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    kCreateInfo.m_nOffX = 5;
    kCreateInfo.m_nOffY = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, 0);
    v22 = SlideListWin::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            v21,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pListWinGuildWar = v22;
    v22->m_uiRClickMsg = 0;
    v2->m_pListWinGuildWar->m_uiLClickMsg = 1;
    SlideListWin::AlignText(v2->m_pListWinGuildWar, 5u);
    SlideListWin::UpdateViewList(v2->m_pListWinGuildWar);
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
    v24 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            v23,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkSlideBarGuildWarList = v24;
    v24->m_uiClickMsg = 2;
    v2->m_pkSlideBarGuildWarList->m_eType = 1;
    SlideBar::SetSplitCnt(v2->m_pkSlideBarGuildWarList, v2->m_pListWinGuildWar->m_nSlideSplitCnt);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
    PgWinBut::CreateWin(
      uiLeft - v8,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      9u,
      0,
      0);
    v25 = *((_DWORD *)pkTextWin + 9);
    v26 = *(void **)(*(_DWORD *)v25 + 20);
    pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v25 + 24);
    pkTextWin = v26;
    v27 = Font::Get(MAIN_MENU);
    v28 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            (unsigned int)pkTexture8,
            v27,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v29 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v28;
    ((void (__thiscall *)(PgWinText *))v29[122].__vecDelDtor)(v28);
    pkTexture8 = *(NiSourceTexture **)pkTextWin;
    v30 = TextData::Get(0x88CBE8E1u);
    (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v30);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
    PgWinBut::CreateWin(
      uiLeft - v8,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xAu,
      0,
      0);
    v31 = *((_DWORD *)pkTextWin + 9);
    v32 = *(void **)(*(_DWORD *)v31 + 20);
    pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v31 + 24);
    pkTextWin = v32;
    v33 = Font::Get(MAIN_MENU);
    v34 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            (unsigned int)pkTexture8,
            v33,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v34;
    v35[122].__vecDelDtor((NiRefObject *)v34, 5u);
    pkTexture8 = *(NiSourceTexture **)pkTextWin;
    v36 = TextData::Get(0x86D1C8EAu);
    (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v36);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
    PgWinBut::CreateWin(
      uiLeft - v8,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xBu,
      0,
      0);
    v37 = *((_DWORD *)pkTextWin + 9);
    v38 = *(void **)(*(_DWORD *)v37 + 20);
    pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v37 + 24);
    pkTextWin = v38;
    v39 = Font::Get(MAIN_MENU);
    v40 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            (unsigned int)pkTexture8,
            v39,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v40;
    v41[122].__vecDelDtor((NiRefObject *)v40, 5u);
    pkTexture8 = *(NiSourceTexture **)pkTextWin;
    v42 = TextData::Get(0x838775A8u);
    (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v42);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
    PgWinBut::CreateWin(
      uiLeft - v8,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xCu,
      0,
      0);
    v43 = *((_DWORD *)pkTextWin + 9);
    v44 = *(void **)(*(_DWORD *)v43 + 20);
    pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v43 + 24);
    pkTextWin = v44;
    v45 = Font::Get(MAIN_MENU);
    v46 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            (unsigned int)pkTexture8,
            v45,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v46;
    v47[122].__vecDelDtor((NiRefObject *)v46, 5u);
    pkTexture8 = *(NiSourceTexture **)pkTextWin;
    v48 = TextData::Get(0x79D5EDE2u);
    (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v48);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Over");
    PgWinBut::CreateWin(
      uiLeft - v8,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xDu,
      0,
      0);
    v49 = *((_DWORD *)pkTextWin + 9);
    v50 = *(void **)(*(_DWORD *)v49 + 20);
    pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v49 + 24);
    pkTextWin = v50;
    v51 = Font::Get(MAIN_MENU);
    v52 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            (unsigned int)pkTexture8,
            v51,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v52;
    v53[122].__vecDelDtor((NiRefObject *)v52, 5u);
    pkTexture8 = *(NiSourceTexture **)pkTextWin;
    v54 = TextData::Get(0xCDDB185Bu);
    (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v54);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title06Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title06Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title06Over");
    PgWinBut::CreateWin(
      uiLeft - v8,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xEu,
      0,
      0);
    v55 = *((_DWORD *)pkTextWin + 9);
    v56 = *(void **)(*(_DWORD *)v55 + 20);
    pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v55 + 24);
    pkTextWin = v56;
    v57 = Font::Get(MAIN_MENU);
    v58 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pkTextWin,
            (unsigned int)pkTexture8,
            v57,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v59 = v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v58;
    v59[122].__vecDelDtor((NiRefObject *)v58, 5u);
    pkTexture8 = *(NiSourceTexture **)pkTextWin;
    v60 = TextData::Get(0x887C7E8Du);
    (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v60);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GuildList", &uiLeft, &uiTop, &uiWidth, &uiHeight)
      && (v61 = Font::Get(SMALL),
          v62 = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  uiWidth,
                  uiHeight,
                  v61,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0),
          v63 = v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
          pkTextWin = v62,
          v63[122].__vecDelDtor((NiRefObject *)v62, 1u),
          pkTexture8 = *(NiSourceTexture **)pkTextWin,
          v64 = TextData::Get(0xC9253B46u),
          (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v64),
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
          SLWCreateInfo::Clear(&kCreateInfo),
          v65 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1),
          v65->nItemType = 1,
          v65->pNode = spNode.m_pObject,
          pkTextWin = v65,
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "ColumnBarNor01"),
          LOBYTE(v145) = 11,
          pkTextWin = (char *)pkTextWin + 72,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "ColumnBarClick01"),
          LOBYTE(v145) = 12,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "ColumnBarOver01"),
          LOBYTE(v145) = 13,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2),
          *(_DWORD *)pkTextWin = 2,
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "Column07"),
          LOBYTE(v145) = 14,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          *((_DWORD *)pkTextWin + 1) = spNode.m_pObject,
          pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2),
          *(_DWORD *)pkTextWin = 2,
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "Column08"),
          LOBYTE(v145) = 15,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          v66 = pkTextWin,
          *((_DWORD *)pkTextWin + 1) = spNode.m_pObject,
          *((_BYTE *)v66 + 88) = 1,
          pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2),
          *(_DWORD *)pkTextWin = 2,
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "Column09"),
          LOBYTE(v145) = 16,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          *((_DWORD *)pkTextWin + 1) = spNode.m_pObject,
          pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2),
          *(_DWORD *)pkTextWin = 2,
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "Column10"),
          LOBYTE(v145) = 17,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          *((_DWORD *)pkTextWin + 1) = spNode.m_pObject,
          pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2),
          *(_DWORD *)pkTextWin = 2,
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &thisa,
            "Column11"),
          LOBYTE(v145) = 18,
          std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
            (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
            &thisa),
          LOBYTE(v145) = 1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa),
          *((_DWORD *)pkTextWin + 1) = spNode.m_pObject,
          kCreateInfo.m_nOffX = 5,
          kCreateInfo.m_nOffY = 0,
          SLWCreateInfo::MakeTempData(&kCreateInfo, 0),
          v67 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, 0),
          v68 = SlideListWin::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  v67,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  &kCreateInfo,
                  0,
                  0),
          v2->m_pListWinGuildWarable = v68,
          v68->m_uiRClickMsg = 3,
          v2->m_pListWinGuildWarable->m_uiLClickMsg = 4,
          SlideListWin::AlignText(v2->m_pListWinGuildWarable, 5u),
          SlideListWin::UpdateViewList(v2->m_pListWinGuildWarable),
          v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0),
          v70 = SlideBar::CreateWin(
                  spNode.m_pObject,
                  "SlideBar01",
                  "SlideBar01_UpBtn",
                  "SlideBar01_DnBtn",
                  v69,
                  0,
                  &v2->baseclass_0.baseclass_0.baseclass_0),
          v2->m_pkSlideBarGuildWarableList = v70,
          v70->m_uiClickMsg = 5,
          v2->m_pkSlideBarGuildWarableList->m_eType = 1,
          SlideBar::SetSplitCnt(v2->m_pkSlideBarGuildWarableList, v2->m_pListWinGuildWarable->m_nSlideSplitCnt),
          pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title07Nor", &uiLeft, &uiTop, 0),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title07Click"),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title07Over"),
          PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0xFu,
            0,
            0),
          v71 = *((_DWORD *)pkTextWin + 9),
          v72 = *(void **)(*(_DWORD *)v71 + 20),
          pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v71 + 24),
          pkTextWin = v72,
          v73 = Font::Get(MAIN_MENU),
          v74 = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9 + 1,
                  (unsigned int)pkTextWin,
                  (unsigned int)pkTexture8,
                  v73,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0),
          v75 = v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
          pkTextWin = v74,
          v75[122].__vecDelDtor((NiRefObject *)v74, 5u),
          pkTexture8 = *(NiSourceTexture **)pkTextWin,
          v76 = TextData::Get(0x88CBE8E1u),
          (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v76),
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
          pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title08Nor", &uiLeft, &uiTop, 0),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title08Click"),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title08Over"),
          PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x10u,
            0,
            0),
          v77 = *((_DWORD *)pkTextWin + 9),
          v78 = *(void **)(*(_DWORD *)v77 + 20),
          pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v77 + 24),
          pkTextWin = v78,
          v79 = Font::Get(MAIN_MENU),
          v80 = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9 + 1,
                  (unsigned int)pkTextWin,
                  (unsigned int)pkTexture8,
                  v79,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0),
          v81 = v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
          pkTextWin = v80,
          v81[122].__vecDelDtor((NiRefObject *)v80, 5u),
          pkTexture8 = *(NiSourceTexture **)pkTextWin,
          v82 = TextData::Get(0x86D1C8EAu),
          (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v82),
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
          pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title09Nor", &uiLeft, &uiTop, 0),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title09Click"),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title09Over"),
          PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x11u,
            0,
            0),
          v83 = *((_DWORD *)pkTextWin + 9),
          v84 = *(void **)(*(_DWORD *)v83 + 20),
          pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v83 + 24),
          pkTextWin = v84,
          v85 = Font::Get(MAIN_MENU),
          v86 = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9 + 1,
                  (unsigned int)pkTextWin,
                  (unsigned int)pkTexture8,
                  v85,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0),
          v87 = v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
          pkTextWin = v86,
          v87[122].__vecDelDtor((NiRefObject *)v86, 5u),
          pkTexture8 = *(NiSourceTexture **)pkTextWin,
          v88 = TextData::Get(0xC9253B46u),
          (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v88),
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
          pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title10Nor", &uiLeft, &uiTop, 0),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title10Click"),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title10Over"),
          PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x12u,
            0,
            0),
          v89 = *((_DWORD *)pkTextWin + 9),
          v90 = *(void **)(*(_DWORD *)v89 + 20),
          pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v89 + 24),
          pkTextWin = v90,
          v91 = Font::Get(MAIN_MENU),
          v92 = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9 + 1,
                  (unsigned int)pkTextWin,
                  (unsigned int)pkTexture8,
                  v91,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0),
          v93 = v92->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
          pkTextWin = v92,
          v93[122].__vecDelDtor((NiRefObject *)v92, 5u),
          pkTexture8 = *(NiSourceTexture **)pkTextWin,
          v94 = TextData::Get(0x88C9DFD4u),
          (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v94),
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
          pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title11Nor", &uiLeft, &uiTop, 0),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title11Click"),
          PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title11Over"),
          PgWinBut::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x13u,
            0,
            0),
          v95 = *((_DWORD *)pkTextWin + 9),
          v96 = *(void **)(*(_DWORD *)v95 + 20),
          pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v95 + 24),
          pkTextWin = v96,
          v97 = Font::Get(MAIN_MENU),
          v98 = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9 + 1,
                  (unsigned int)pkTextWin,
                  (unsigned int)pkTexture8,
                  v97,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0),
          v99 = v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
          pkTextWin = v98,
          v99[122].__vecDelDtor((NiRefObject *)v98, 5u),
          pkTexture8 = *(NiSourceTexture **)pkTextWin,
          v100 = TextData::Get(0x1B242C77u),
          (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v100),
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
          PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GuildWarList", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
    {
      v101 = Font::Get(SMALL);
      v102 = PgWinText::CreateWin(
               uiLeft - v8,
               uiTop - v9,
               uiWidth,
               uiHeight,
               v101,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v103 = v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v102;
      v103[122].__vecDelDtor((NiRefObject *)v102, 1u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v104 = TextData::Get(0x20132187u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v104);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildWarApplyNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildWarApplyClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildWarApplyOver");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        8u,
        0,
        0);
      v105 = *((_DWORD *)pkTextWin + 9);
      v106 = *(_DWORD *)v105;
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v105 + 24);
      pkTextWin = *(void **)(v106 + 20);
      v107 = Font::Get(0);
      v108 = PgWinText::CreateWin(
               uiLeft - v8,
               uiTop - v9 + 1,
               (unsigned int)pkTextWin,
               (unsigned int)pkTexture8,
               v107,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v109 = v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v108;
      v109[122].__vecDelDtor((NiRefObject *)v108, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v110 = TextData::Get(0xE2CF342Cu);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v110);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      v111 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
      v112 = (void *)v111->m_uiWidth;
      pkTexture8 = (NiSourceTexture *)v111->m_uiHeight;
      pkTextWin = v112;
      v113 = Font::Get(0);
      v114 = PgWinText::CreateWin(
               uiLeft - v8,
               uiTop - v9,
               (unsigned int)pkTextWin,
               (unsigned int)pkTexture8,
               v113,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v115 = v114->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v114;
      v115[122].__vecDelDtor((NiRefObject *)v114, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v116 = TextData3::Get(0xB306566u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v116);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Search_Input", &uiLeft, &uiTop, 0);
      PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v117 = EditWin::CreateWin(
               uiLeft,
               uiTop + 2,
               *(_DWORD *)(**((_DWORD **)pkTextWin + 9) + 20),
               *(_DWORD *)(**((_DWORD **)pkTextWin + 9) + 24),
               &v2->baseclass_0.baseclass_0.baseclass_0,
               NORMAL,
               0x10u,
               1u,
               1,
               0,
               1);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v117);
      EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SearchBtnNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "SearchBtnClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "SearchBtnOver");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x17u,
        0,
        0);
      v118 = *((_DWORD *)pkTextWin + 9);
      v119 = *(void **)(*(_DWORD *)v118 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v118 + 24);
      pkTextWin = v119;
      v120 = Font::Get(0);
      v121 = PgWinText::CreateWin(
               uiLeft - v8,
               uiTop - v9 + 1,
               (unsigned int)pkTextWin,
               (unsigned int)pkTexture8,
               v120,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v122 = v121->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v121;
      v122[122].__vecDelDtor((NiRefObject *)v121, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v123 = TextData3::Get(0x67775F79u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v123);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x18u,
        0,
        0);
      v124 = *((_DWORD *)pkTextWin + 9);
      v125 = *(void **)(*(_DWORD *)v124 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v124 + 24);
      pkTextWin = v125;
      v126 = Font::Get(0);
      v127 = PgWinText::CreateWin(
               uiLeft - v8,
               uiTop - v9 + 1,
               (unsigned int)pkTextWin,
               (unsigned int)pkTexture8,
               v126,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v127,
        5u);
      v128 = v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v129 = TextData3::Get(0x7272A2EDu);
      v128[118].__vecDelDtor((NiRefObject *)v127, (unsigned int)v129);
      v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v127,
        0);
      ((void (__thiscall *)(GuildWarStateWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.30000001,
        0.5);
      LOBYTE(v145) = 0;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      v145 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v145) = 0;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      v145 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v12 = spNode.m_pObject;
    v145 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005CB530) --------------------------------------------------------
void *__thiscall GuildWarStateWin::_scalar_deleting_destructor_(GuildWarStateWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildWarStateWin::_GuildWarStateWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005CB560) --------------------------------------------------------
tm *__usercall localtime<eax>(const int *_Time<eax>)
{
  return _localtime32(_Time);
}

//----- (005CB590) --------------------------------------------------------
void __thiscall GuildWin::OnSortByTitle01(GuildWin *this)
{
  GuildWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v1->m_nSortColumn = 0;
    SlideListWin::Sort(v2, 0, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (005CB5C0) --------------------------------------------------------
void __thiscall GuildWin::OnSortByTitle02(GuildWin *this)
{
  GuildWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v1->m_nSortColumn = 1;
    SlideListWin::Sort(v2, 1, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (005CB5F0) --------------------------------------------------------
void __thiscall GuildWin::OnSortByTitle03(GuildWin *this)
{
  GuildWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v1->m_nSortColumn = 2;
    SlideListWin::Sort(v2, 2, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (005CB620) --------------------------------------------------------
void __thiscall GuildWin::OnSortByTitle04(GuildWin *this)
{
  GuildWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v1->m_nSortColumn = 3;
    SlideListWin::Sort(v2, 3, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (005CB650) --------------------------------------------------------
void __thiscall GuildWin::OnSortByTitle05(GuildWin *this)
{
  GuildWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v1->m_nSortColumn = 4;
    SlideListWin::Sort(v2, 4, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (005CB680) --------------------------------------------------------
void __thiscall GuildWin::OnGuildMenu(GuildWin *this)
{
  ITask::DirectDispatchAll(42, 0);
}

//----- (005CB6E0) --------------------------------------------------------
void __thiscall GuildWin::SetNextJoinTime(GuildWin *this, char *pkJoinTime)
{
  if ( this->m_pkNextJoinTime )
    ((void (__stdcall *)(_DWORD))this->m_pkNextJoinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkJoinTime);
}

//----- (005CB710) --------------------------------------------------------
void __thiscall GuildWin::ClearGTInfo(GuildWin *this)
{
  GuildWin *v1; // esi@1

  v1 = this;
  if ( this->m_pkGuildToken )
    ((void (__stdcall *)(_DWORD))this->m_pkGuildToken->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B7967);
  if ( v1->m_pkNextJoinTime )
    ((void (__stdcall *)(_DWORD))v1->m_pkNextJoinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B796E);
}

//----- (005CB760) --------------------------------------------------------
void __thiscall GuildWin::OnHelpLink(GuildWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildWin");
}

//----- (005CB790) --------------------------------------------------------
void __thiscall GuildWin::OnGuildTournamentMenu(GuildWin *this)
{
  PgWin *v1; // eax@2

  if ( GuildTask::GetGuildTournamnetBaseWin() )
  {
    v1 = (PgWin *)GuildTask::GetGuildTournamnetBaseWin();
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v1);
  }
}

//----- (005CB7B0) --------------------------------------------------------
void __thiscall GuildWin::OnShowEmblemWin(GuildWin *this)
{
  GuildWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  char v3; // al@5
  GameFrameWork *v4; // ecx@7

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( v2 )
  {
    if ( CClientGuild::AmIGuildMaster(v2) )
    {
      if ( !v1->m_kTabIndex )
      {
        if ( !v1->m_bDisableEmblem )
        {
          v3 = v1->m_EmblemState;
          if ( !v3 || v3 == -1 )
          {
            v4 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
            if ( v4 )
              GameFrameWork::NcGuildEmblemCheckAvailabilityReq(v4);
          }
        }
      }
    }
  }
}

//----- (005CB800) --------------------------------------------------------
bool __thiscall GuildWin::SetEmblemIconInfo(GuildWin *this)
{
  GuildWin *v1; // eax@1
  GuildEmblemIcon *v2; // ecx@1
  bool result; // al@2

  v1 = this;
  v2 = this->m_pkEmblemIcon;
  if ( v2 )
    result = GuildEmblemIcon::SetEmblemIcon(v2, &v1->m_GuildEmblemInfo.nPTFileNo, &v1->m_GuildEmblemInfo.nPTIconNo, 1);
  else
    result = 0;
  return result;
}

//----- (005CB830) --------------------------------------------------------
void __thiscall GuildWin::SetEmblemDisable(GuildWin *this, bool bDisable)
{
  GuildWin *v2; // esi@1
  IconWin *v3; // ecx@1

  v2 = this;
  v3 = (IconWin *)this->m_pkEmblemIcon;
  if ( v3 )
  {
    IconWin::IconDisable(v3, bDisable);
    v2->m_bDisableEmblem = bDisable;
  }
}

//----- (005CB860) --------------------------------------------------------
void __thiscall GuildMemberVanishTask::SetInfo(GuildMemberVanishTask *this, Name5 *rkTargetName)
{
  *(_QWORD *)&this->m_kTargetName.n5_name[0] = *(_QWORD *)&rkTargetName->n5_name[0];
  *(_QWORD *)&this->m_kTargetName.n5_name[8] = *(_QWORD *)&rkTargetName->n5_name[8];
  *(_DWORD *)&this->m_kTargetName.n5_name[16] = *(_DWORD *)&rkTargetName->n5_name[16];
}

//----- (005CB890) --------------------------------------------------------
void __thiscall GuildMemberGradeSetupTask::SetInfo(GuildMemberGradeSetupTask *this, Name5 *rkTargetName, char grade, char TargetLevel)
{
  *(_QWORD *)&this->m_kTargetName.n5_name[0] = *(_QWORD *)&rkTargetName->n5_name[0];
  *(_QWORD *)&this->m_kTargetName.n5_name[8] = *(_QWORD *)&rkTargetName->n5_name[8];
  *(_DWORD *)&this->m_kTargetName.n5_name[16] = *(_DWORD *)&rkTargetName->n5_name[16];
  this->m_grade = grade;
  this->m_TargetLevel = TargetLevel;
}

//----- (005CB8D0) --------------------------------------------------------
void __thiscall GuildWin::ProcessMeInput(GuildWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (005CB950) --------------------------------------------------------
void __thiscall GuildWin::UpdateMeWin(GuildWin *this, float fCurTime)
{
  GuildWin *v2; // esi@1
  PgFrameWork *v3; // eax@1
  GameFrameWork *v4; // edi@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v4 = (GameFrameWork *)v3;
  if ( v3 )
  {
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinNotice, v2->m_pkSlideBarGuildNotice);
    GameFrameWork::UpdateUIScroll(v4, v2->m_pListWinGuild, v2->m_pkSlideBarGuildList);
    GameFrameWork::UpdateUIScroll(v4, v2->m_pListWinHistory, v2->m_pkSlideBarGuildHistory);
  }
}

//----- (005CB9B0) --------------------------------------------------------
void __thiscall GuildWin::OnLClick(GuildWin *this, int nItemIndex)
{
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (005CB9D0) --------------------------------------------------------
void __thiscall GuildWin::OnRClick(GuildWin *this, int nItemIndex)
{
  GuildWin *v2; // esi@1
  int v3; // edi@3
  int v4; // ebx@3
  int v5; // eax@3
  Name5 *v6; // eax@4
  CClientGuild *v7; // eax@9
  Name5 *v8; // eax@11
  CClientGuild *v9; // eax@16
  CClientGuild *v10; // eax@18
  CClientGuildAcademy *v11; // eax@20
  CClientGuild *v12; // eax@22
  CClientGuild *v13; // eax@24
  PopupMenuWin *v14; // ecx@26
  void *pkMemberClient; // [sp+Ch] [bp-4h]@3

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = PgWin::ms_iMsX.x;
  v4 = PgWin::ms_iMsY;
  v5 = SlideListWin::GetCurSelIndex(v2->m_pListWinGuild);
  SlideListWin::GetData(v2->m_pListWinGuild, v5, (unsigned int *)&pkMemberClient);
  if ( pkMemberClient )
  {
    v6 = User::GetMainCharID(&g_kUser);
    if ( *(_DWORD *)pkMemberClient != *(_DWORD *)&v6->n5_name[0]
      || *((_DWORD *)pkMemberClient + 1) != *(_DWORD *)&v6->n5_name[4]
      || *((_DWORD *)pkMemberClient + 2) != *(_DWORD *)&v6->n5_name[8]
      || *((_DWORD *)pkMemberClient + 3) != *(_DWORD *)&v6->n5_name[12]
      || *((_DWORD *)pkMemberClient + 4) != *(_DWORD *)&v6->n5_name[16]
      || (v7 = GuildTask::GetGuild(), CClientGuild::AmIGuildMaster(v7)) )
    {
      v8 = User::GetMainCharID(&g_kUser);
      if ( *(_DWORD *)pkMemberClient == *(_DWORD *)&v8->n5_name[0]
        && *((_DWORD *)pkMemberClient + 1) == *(_DWORD *)&v8->n5_name[4]
        && *((_DWORD *)pkMemberClient + 2) == *(_DWORD *)&v8->n5_name[8]
        && *((_DWORD *)pkMemberClient + 3) == *(_DWORD *)&v8->n5_name[12]
        && *((_DWORD *)pkMemberClient + 4) == *(_DWORD *)&v8->n5_name[16]
        && (v9 = GuildTask::GetGuild(), CClientGuild::AmIGuildMaster(v9)) )
      {
        ((void (__stdcall *)(int, int))v2->m_pkGuildMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
          v3,
          v4);
        PopupMenuWin::Clear(v2->m_pkGuildMemberPopupMenu);
        PopupMenuWin::AddMenu(
          v2->m_pkGuildMemberPopupMenu,
          &v2->m_spPopupInitializeAcademyMaster.m_pObject->baseclass_0);
        PopupMenuWin::FinishMenu(v2->m_pkGuildMemberPopupMenu, 0);
        PgWinMgr::OpenPopupWin(
          &Pgg_kWinMgr,
          0,
          &v2->m_pkGuildMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        ((void (__stdcall *)(signed int))v2->m_pkGuildMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      }
      else
      {
        ((void (__stdcall *)(int, int))v2->m_pkGuildMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
          v3,
          v4);
        PopupMenuWin::Clear(v2->m_pkGuildMemberPopupMenu);
        v10 = GuildTask::GetGuild();
        if ( CClientGuild::CanIAppoint(v10) )
        {
          PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupAppointMaster.m_pObject->baseclass_0);
          PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupAppointSubMaster.m_pObject->baseclass_0);
          PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupAppointSenior.m_pObject->baseclass_0);
          PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupAppointKnight.m_pObject->baseclass_0);
          PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupFireAppointment.m_pObject->baseclass_0);
        }
        v11 = GuildAcademyTask::GetGuildAcademy();
        if ( CClientGuildAcademy::AmIGuildAcademyMaster(v11) )
          PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupAppointAcademyMaster.m_pObject->baseclass_0);
        v12 = GuildTask::GetGuild();
        if ( CClientGuild::AmIGuildMaster(v12) )
          PopupMenuWin::AddMenu(
            v2->m_pkGuildMemberPopupMenu,
            &v2->m_spPopupInitializeAcademyMaster.m_pObject->baseclass_0);
        v13 = GuildTask::GetGuild();
        if ( CClientGuild::CanIVanishMember(v13) )
          PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupVanish.m_pObject->baseclass_0);
        PopupMenuWin::AddMenu(v2->m_pkGuildMemberPopupMenu, &v2->m_spPopupWhisperChat.m_pObject->baseclass_0);
        v14 = v2->m_pkGuildMemberPopupMenu;
        if ( v14->m_dwMenuCount )
        {
          PopupMenuWin::FinishMenu(v14, 0);
          PgWinMgr::OpenPopupWin(
            &Pgg_kWinMgr,
            0,
            &v2->m_pkGuildMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          ((void (__stdcall *)(signed int))v2->m_pkGuildMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        }
        else
        {
          PopupMenuWin::Clear(v14);
        }
      }
    }
    else
    {
      PopupMenuWin::Clear(v2->m_pkGuildMemberPopupMenu);
      PgWinMgr::ClosePopupWin(
        &Pgg_kWinMgr,
        &v2->m_pkGuildMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (005CBCA0) --------------------------------------------------------
void __thiscall GuildWin::OnDetailInfo(GuildWin *this)
{
  char *v1; // esi@1

  v1 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      45,
      0,
      v1);
    if ( *((_DWORD *)v1 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v1 + 1) + 20))(45, 0, v1);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v1 + 20))(v1, 45, 0, v1);
}

//----- (005CBCF0) --------------------------------------------------------
void __thiscall GuildWin::OnChangeTab(GuildWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab)
{
  char *v2; // esi@1

  v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      40,
      &eTab,
      v2);
    if ( *((_DWORD *)v2 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(40, &eTab, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 40, &eTab, v2);
}

//----- (005CBD50) --------------------------------------------------------
void __thiscall GuildWin::OnWinClose(GuildWin *this)
{
  GuildWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GameFrameWork::CloseCommunityWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (005CBD80) --------------------------------------------------------
void __thiscall GuildWin::OnSlideBar(GuildWin *this, SlideBar *pkSlideBar, SlideListWin *pkSlideListWin)
{
  if ( pkSlideBar )
  {
    if ( pkSlideListWin )
    {
      SlideBar::SetSplitCnt(pkSlideBar, pkSlideListWin->m_nSlideSplitCnt);
      pkSlideListWin->m_nViewStartPos = pkSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(pkSlideListWin);
    }
  }
}

//----- (005CBDC0) --------------------------------------------------------
void __thiscall GuildWin::OnTopWin(GuildWin *this)
{
  GameFrameWork::SetTopFriendAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005CBDD0) --------------------------------------------------------
void __thiscall GuildMemberVanishTask::OnStart(GuildMemberVanishTask *this)
{
  GuildMemberVanishTask *v1; // esi@1
  int v2; // eax@1
  int v3; // edx@1
  int v4; // ecx@1
  int v5; // eax@1
  int v6; // ecx@1
  char *v7; // eax@1
  char *v8; // eax@1
  MsgBox *v9; // eax@1
  char pcTargetName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v11; // [sp+1Ch] [bp-4h]@1
  int v12; // [sp+20h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  v2 = *(_DWORD *)&this->m_kTargetName.n5_name[0];
  v3 = *(_DWORD *)&this->m_kTargetName.n5_name[8];
  v4 = *(_DWORD *)&this->m_kTargetName.n5_name[4];
  *(_DWORD *)pcTargetName = v2;
  v5 = *(_DWORD *)&v1->m_kTargetName.n5_name[12];
  *(_DWORD *)&pcTargetName[8] = v3;
  *(_DWORD *)&pcTargetName[4] = v4;
  v6 = *(_DWORD *)&v1->m_kTargetName.n5_name[16];
  *(_DWORD *)&pcTargetName[12] = v5;
  *(_DWORD *)&pcTargetName[16] = v6;
  pcTargetName[20] = 0;
  v1->m_eState = 0;
  v7 = TextData::Get(0x103CFDA7u);
  v8 = fs(v7);
  v9 = MsgBox::Modal(MSGBOX_OKCANCEL, v8);
  v1->m_pkMsgBox = v9;
  ((void (__stdcall *)(IDirectMessenger *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_8);
}
// A85C00: using guessed type int __security_cookie;

//----- (005CBE50) --------------------------------------------------------
void __thiscall GuildMemberVanishTask::DirectMessage(GuildMemberVanishTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildMemberVanishTask *v4; // esi@1
  int v5; // eax@2
  IDirectMessenger *v6; // eax@3
  unsigned int v7; // eax@7
  GuildMemberVanishTask::State v8; // edx@7
  unsigned int v9; // ecx@7
  PROTO_NC_GUILD_MEMBER_VANISH_REQ kProto; // [sp+4h] [bp-18h]@7
  unsigned int v11; // [sp+18h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 27 )
  {
    v5 = *(_DWORD *)&this->m_kTargetName.n5_name[12];
    if ( v5 )
      v6 = (IDirectMessenger *)(v5 + 232);
    else
      v6 = 0;
    if ( pkFrom == v6 )
    {
      if ( !*(_DWORD *)pvBody )
      {
        v7 = *(_DWORD *)&this->m_kTargetName.n5_name[0];
        v8 = this->m_eState;
        *(_DWORD *)&kProto.CharID.n5_name[0] = *(_DWORD *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        v9 = *(_DWORD *)&this->m_kTargetName.n5_name[4];
        *(_QWORD *)&kProto.CharID.n5_name[4] = __PAIR__(v7, v8);
        *(_QWORD *)&kProto.CharID.n5_name[12] = __PAIR__(*(_DWORD *)&v4->m_kTargetName.n5_name[8], v9);
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xEu, &kProto, 20);
        v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005CBED0) --------------------------------------------------------
void __thiscall GuildMemberGradeSetupTask::OnStart(GuildMemberGradeSetupTask *this)
{
  GuildMemberGradeSetupTask *v1; // esi@1
  int v2; // edx@1
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // eax@1
  int v6; // ecx@1
  bool v7; // zf@1
  char *v8; // eax@2
  char *v9; // eax@2
  MsgBox *v10; // eax@2
  char *v11; // eax@3
  char *v12; // eax@3
  char pcTargetName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v14; // [sp+1Ch] [bp-4h]@1
  int v15; // [sp+20h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  v2 = *(_DWORD *)&this->m_kTargetName.n5_name[8];
  v3 = *(_DWORD *)&this->m_kTargetName.n5_name[0];
  v4 = *(_DWORD *)&this->m_kTargetName.n5_name[4];
  *(_DWORD *)&pcTargetName[8] = v2;
  LOBYTE(v2) = v1->m_grade;
  *(_DWORD *)pcTargetName = v3;
  v5 = *(_DWORD *)&v1->m_kTargetName.n5_name[12];
  *(_DWORD *)&pcTargetName[4] = v4;
  v6 = *(_DWORD *)&v1->m_kTargetName.n5_name[16];
  *(_DWORD *)&pcTargetName[12] = v5;
  *(_DWORD *)&pcTargetName[16] = v6;
  pcTargetName[20] = 0;
  Guild::GetMemberGradeString(v2);
  v7 = v1->m_grade == 6;
  v1->m_eState = 0;
  if ( v7 )
  {
    v8 = TextData::Get(0x728B3FA8u);
    v9 = fs(v8);
    v10 = MsgBox::Modal(MSGBOX_OKCANCEL, v9);
  }
  else
  {
    v11 = TextData::Get(0x84F1C5F1u);
    v12 = fs(v11);
    v10 = MsgBox::Modal(MSGBOX_OKCANCEL, v12);
  }
  v1->m_pkMsgBox = v10;
  v1->m_pkMsgBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v1->m_pkMsgBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    &v1->baseclass_0.baseclass_0.baseclass_8);
}
// A85C00: using guessed type int __security_cookie;

//----- (005CBF90) --------------------------------------------------------
bool __thiscall GuildMemberGradeSetupTask::OnProcessNetMsg(GuildMemberGradeSetupTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildMemberGradeSetupTask *v5; // edi@1
  PgFrameWork *v6; // esi@3
  char *v7; // eax@4
  char *v9; // eax@6
  char *v10; // eax@7
  char *v11; // eax@7
  char *v12; // eax@8

  v5 = this;
  if ( iDepart == 29 && iCommand == 23 )
  {
    v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    switch ( *(_WORD *)((char *)pvData + 21) )
    {
      case 0xCE8:
      case 0xCE9:
      case 0xCEA:
      case 0xCEB:
      case 0xCEC:
        v7 = TextData::Get(0xBDDE1046u);
        MsgBox::Modal(MSGBOX_OK, v7);
        v5->baseclass_0.baseclass_0.m_eTaskState = 2;
        return 0;
      case 0xCEE:
        if ( !v6 )
          break;
        v9 = TextData::Get(0x9DB4B64Fu);
        goto LABEL_11;
      case 0xCFB:
        v10 = TextData2::Get(0x407D757Au);
        v11 = fs(v10);
        MsgBox::Modal(MSGBOX_OK, v11);
        v5->baseclass_0.baseclass_0.m_eTaskState = 2;
        return 0;
      case 0xC8A:
        v12 = TextData2::Get(0x4A02B0B7u);
        MsgBox::Modal(MSGBOX_OK, v12);
        v5->baseclass_0.baseclass_0.m_eTaskState = 2;
        return 0;
      case 0xCEF:
        if ( v6 )
        {
          v9 = TextData3::Get(0xDF8C517Bu);
LABEL_11:
          GameFrameWork::AddSysMsg((GameFrameWork *)v6, v9);
        }
        break;
      default:
        break;
    }
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
  }
  return 0;
}

//----- (005CC120) --------------------------------------------------------
bool __thiscall GuildMemberGradeSetupTask::ConfirmMasterChange(GuildMemberGradeSetupTask *this)
{
  GuildMemberGradeSetupTask *v1; // esi@1
  char *v2; // eax@2
  char *v3; // eax@2
  bool result; // al@2

  v1 = this;
  if ( __PAIR__(this->m_grade, this->m_TargetLevel) >= 0x14u )
  {
    result = 1;
  }
  else
  {
    v2 = TextData2::Get(0x407D757Au);
    v3 = fs(v2);
    MsgBox::Modal(MSGBOX_OK, v3);
    v1->baseclass_0.baseclass_0.m_eTaskState = 2;
    result = 0;
  }
  return result;
}

//----- (005CC160) --------------------------------------------------------
void __thiscall GuildWin::OnEditNotice(GuildWin *this)
{
  GuildWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  char *v3; // eax@2

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::CanIWriteNotice(v2) )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkNoticeEditor->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    v3 = TextData::Get(0x43C1E7Au);
    MsgBox::Modal(MSGBOX_OK, v3);
  }
}

//----- (005CC1A0) --------------------------------------------------------
void __thiscall GuildWin::OnSlideBar(GuildWin *this)
{
  SlideListWin *v1; // esi@1
  SlideBar *v2; // edi@1

  v1 = this->m_pListWinGuild;
  v2 = this->m_pkSlideBarGuildList;
  if ( v2 )
  {
    if ( v1 )
    {
      SlideBar::SetSplitCnt(v2, v1->m_nSlideSplitCnt);
      v1->m_nViewStartPos = v2->m_nCurPos;
      SlideListWin::UpdateViewList(v1);
    }
  }
}

//----- (005CC1E0) --------------------------------------------------------
void __thiscall GuildWin::OnSlideBarNotice(GuildWin *this)
{
  SlideListWin *v1; // esi@1
  SlideBar *v2; // edi@1

  v1 = this->m_pListWinNotice;
  v2 = this->m_pkSlideBarGuildNotice;
  if ( v2 )
  {
    if ( v1 )
    {
      SlideBar::SetSplitCnt(v2, v1->m_nSlideSplitCnt);
      v1->m_nViewStartPos = v2->m_nCurPos;
      SlideListWin::UpdateViewList(v1);
    }
  }
}

//----- (005CC220) --------------------------------------------------------
void __thiscall GuildWin::OnSlideBarHistory(GuildWin *this)
{
  SlideListWin *v1; // esi@1
  SlideBar *v2; // edi@1

  v1 = this->m_pListWinHistory;
  v2 = this->m_pkSlideBarGuildHistory;
  if ( v2 )
  {
    if ( v1 )
    {
      SlideBar::SetSplitCnt(v2, v1->m_nSlideSplitCnt);
      v1->m_nViewStartPos = v2->m_nCurPos;
      SlideListWin::UpdateViewList(v1);
    }
  }
}

//----- (005CC260) --------------------------------------------------------
char *__thiscall GuildWin::GetHistoryText(GuildWin *this, GUILD_HISTORY_MSG_TYPE hisType)
{
  char *result; // eax@2

  switch ( hisType )
  {
    case 0:
      result = TextData3::Get(0x23184472u);
      break;
    case 1:
      result = TextData3::Get(0xDED84422u);
      break;
    case 2:
      result = TextData3::Get(0xD41F4C1Au);
      break;
    case 3:
      result = TextData3::Get(0x2D284170u);
      break;
    case 10:
      result = TextData3::Get(0x676EA983u);
      break;
    case 11:
      result = TextData3::Get(0xBCC108C5u);
      break;
    case 12:
      result = TextData3::Get(0x6B7E9E7Eu);
      break;
    case 13:
      result = TextData3::Get(0x766F9C79u);
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (005CC340) --------------------------------------------------------
void __thiscall GuildWin::SetEmblemState(GuildWin *this, const char *eEmblemState)
{
  GuildWin *v2; // esi@1
  ColumnBut *v3; // edx@1
  GuildEmblemIcon *v4; // eax@2
  signed int v5; // ecx@3
  char *v6; // eax@9
  char *v7; // eax@14
  char *v8; // eax@17
  bool v9; // [sp-4h] [bp-Ch]@9

  v2 = this;
  v3 = this->m_pkEmblemCheckBox;
  if ( v3 )
  {
    v4 = this->m_pkEmblemIcon;
    if ( v4 )
    {
      v5 = (unsigned __int8)*eEmblemState;
      if ( v5 <= 255 )
      {
        if ( v5 == 255 )
        {
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
          v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
          ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          v2->m_pkEmblemCheckBox->m_bCheck = 1;
        }
        else
        {
          switch ( v5 )
          {
            case 0:
              v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = 0;
              ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              GuildWin::SetEmblemDisable(v2, 0);
              break;
            case 3:
              if ( !v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin )
                v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              v6 = TextData3::Get(0x4FA1A77Au);
              PgWin::SetToolTipWinText(
                &v2->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                v6);
              v9 = 0;
              goto LABEL_10;
            case 1:
              if ( v2->m_bGuildEmblem )
              {
                if ( !v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin )
                  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
                v7 = TextData3::Get(0xC0EE4A29u);
                PgWin::SetToolTipWinText(
                  &v2->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                  v7);
                v9 = 1;
LABEL_10:
                GuildWin::SetEmblemDisable(v2, v9);
                ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
                ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              }
              break;
            case 4:
              if ( !v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin )
                v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
              v8 = TextData3::Get(0xC0EE4A29u);
              PgWin::SetToolTipWinText(&v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v8);
              ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              v2->m_pkEmblemCheckBox->m_bCheck = 0;
              break;
            default:
              return;
          }
        }
      }
    }
  }
}

//----- (005CC520) --------------------------------------------------------
void __thiscall GuildMemberGradeSetupTask::DirectMessage(GuildMemberGradeSetupTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildMemberGradeSetupTask *v4; // esi@1
  int v5; // eax@2
  IDirectMessenger *v6; // eax@3
  unsigned int v7; // edx@8
  GuildMemberGradeSetupTask::State v8; // eax@8
  PROTO_NC_GUILD_MEMBER_GRADE_REQ kProto; // [sp+4h] [bp-1Ch]@8
  unsigned int v10; // [sp+1Ch] [bp-4h]@1
  int v11; // [sp+20h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 27 )
  {
    v5 = *(_DWORD *)&this->m_kTargetName.n5_name[16];
    if ( v5 )
      v6 = (IDirectMessenger *)(v5 + 232);
    else
      v6 = 0;
    if ( pkFrom == v6 )
    {
      if ( *(_DWORD *)pvBody )
      {
        this->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
      else
      {
        if ( GuildMemberGradeSetupTask::ConfirmMasterChange((GuildMemberGradeSetupTask *)((char *)this - 8)) )
        {
          v7 = *(_DWORD *)&v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
          v8 = v4->m_eState;
          kProto.MemberGrade = v4->m_kTargetName.n5_name[13];
          *(_DWORD *)&kProto.CharID.n5_name[8] = *(_DWORD *)&v4->m_kTargetName.n5_name[0];
          *(_QWORD *)&kProto.CharID.n5_name[0] = __PAIR__(v8, v7);
          *(_QWORD *)&kProto.CharID.n5_name[12] = *(_QWORD *)&v4->m_kTargetName.n5_name[4];
          NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x16u, &kProto, 21);
          v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005CC5D0) --------------------------------------------------------
void __thiscall GuildWin::AddListItem_DefInfo(GuildWin *this, GUILD_MEMBER_CLIENT *pkData)
{
  GuildWin *v2; // edi@1
  SlideListWin *v3; // ecx@1
  int v4; // eax@5
  int v5; // edx@5
  int v6; // eax@5
  int v7; // ebx@5
  void *v8; // eax@5
  const char *v9; // eax@6
  char *v10; // eax@8
  char *v11; // eax@8
  char *v12; // eax@8
  int v13; // [sp-10h] [bp-34h]@9
  int v14; // [sp-Ch] [bp-30h]@9
  int v15; // [sp-8h] [bp-2Ch]@9
  char acname[21]; // [sp+8h] [bp-1Ch]@5
  unsigned int v17; // [sp+20h] [bp-4h]@1
  int v18; // [sp+24h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinGuild;
  if ( v3 && (!v2->m_bShowOnlineOnly || pkData->dLogonInfo._bf0 & 1) && pkData->nLevel )
  {
    v4 = *(_DWORD *)&pkData->sName.n5_name[0];
    *(_DWORD *)&acname[4] = *(_DWORD *)&pkData->sName.n5_name[4];
    v5 = *(_DWORD *)&pkData->sName.n5_name[12];
    *(_DWORD *)acname = v4;
    v6 = *(_DWORD *)&pkData->sName.n5_name[8];
    *(_DWORD *)&acname[12] = v5;
    *(_DWORD *)&acname[8] = v6;
    *(_DWORD *)&acname[16] = *(_DWORD *)&pkData->sName.n5_name[16];
    acname[20] = 0;
    v7 = SlideListWin::AddText(v3, acname);
    v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pkData->nClassID);
    if ( v8 )
      v9 = (char *)v8 + 21;
    else
      v9 = &byte_9788EB;
    SlideListWin::SetText(v2->m_pListWinGuild, v7, 1u, v9);
    v10 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuild, v7, 2u, v10);
    v11 = Guild::GetMemberGradeString(pkData->nGrade);
    SlideListWin::SetText(v2->m_pListWinGuild, v7, 3u, v11);
    v12 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuild, v7, 4u, v12);
    SlideListWin::SetData(v2->m_pListWinGuild, v7, (unsigned int)pkData);
    SlideListWin::SetFontSize(v2->m_pListWinGuild, v7, 1);
    if ( pkData->dLogonInfo._bf0 & 1 )
    {
      v15 = 0;
      v14 = 255;
      v13 = 255;
    }
    else
    {
      v15 = 200;
      v14 = 200;
      v13 = 200;
    }
    SlideListWin::SetFontColor(v2->m_pListWinGuild, v7, v13, v14, v15);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (005CC730) --------------------------------------------------------
void __thiscall GuildWin::ViewAllInfo(GuildWin *this, PROTO_FRIEND_INFO *pdata)
{
  GuildWin *v2; // edi@1
  int v3; // ecx@1
  int v4; // edx@1
  int v5; // eax@1
  int v6; // ecx@1
  char *v7; // eax@1
  char *v8; // eax@4
  int v9; // eax@4
  char *v10; // eax@7
  char *v11; // eax@9
  char *v12; // [sp-Ch] [bp-B0h]@2
  char *v13; // [sp-8h] [bp-ACh]@2
  unsigned int v14; // [sp-4h] [bp-A8h]@5
  char szdata[128]; // [sp+8h] [bp-9Ch]@1
  char acname[21]; // [sp+88h] [bp-1Ch]@1
  unsigned int v17; // [sp+A0h] [bp-4h]@1
  int v18; // [sp+A4h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  ToolTipWin::ClearTipText((ToolTipWin *)g_pkToolTipWin);
  v3 = *(_DWORD *)&pdata->charid.n5_name[4];
  v4 = *(_DWORD *)&pdata->charid.n5_name[8];
  *(_DWORD *)acname = *(_DWORD *)&pdata->charid.n5_name[0];
  v5 = *(_DWORD *)&pdata->charid.n5_name[12];
  *(_DWORD *)&acname[4] = v3;
  v6 = *(_DWORD *)&pdata->charid.n5_name[16];
  *(_DWORD *)&acname[12] = v5;
  *(_DWORD *)&acname[16] = v6;
  *(_DWORD *)&acname[8] = v4;
  acname[20] = 0;
  ((void (__stdcall *)(_DWORD, _DWORD, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    0,
    acname,
    1,
    255,
    255,
    0);
  ((void (__stdcall *)(signed int, _UNKNOWN *, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    1,
    &unk_9B7956,
    255,
    255,
    255,
    0);
  CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pdata->classid);
  v7 = TextData::Get(0x95A9DAEDu);
  sprintf(szdata, v7);
  ((void (__stdcall *)(signed int, _DWORD, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    2,
    szdata,
    255,
    255,
    255,
    0);
  sprintf(szdata, "LV : %d");
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    3,
    szdata,
    255,
    255,
    255,
    0);
  if ( pdata->isparty )
  {
    v13 = TextData::Get(0xEFE6FA48u);
    v12 = szdata;
  }
  else
  {
    v13 = TextData::Get(0xA0989BF4u);
    v12 = szdata;
  }
  sprintf(v12, v13);
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    4,
    szdata,
    255,
    255,
    255,
    0);
  MapInfoTab::GetByMapName(&pdata->map);
  v8 = TextData::Get(0xDE353F4Du);
  sprintf(szdata, v8);
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    5,
    szdata,
    255,
    255,
    255,
    0);
  v9 = pdata->logininfo._bf0;
  if ( pdata->logininfo._bf0 & 1 )
  {
    v14 = -1886347311;
LABEL_9:
    v11 = TextData::Get(v14);
    sprintf(szdata, v11);
    goto LABEL_10;
  }
  if ( !(v9 & 0xFFE) )
  {
    v14 = -1797065253;
    goto LABEL_9;
  }
  v10 = TextData2::Get(0xF1ECBD28u);
  sprintf(szdata, v10);
LABEL_10:
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    6,
    szdata,
    255,
    255,
    255,
    0);
  ((void (__stdcall *)(signed int, char *, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    7,
    pdata->statustitle,
    255,
    255,
    255,
    0);
  ((void (__stdcall *)(GuildWin *))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[139].__vecDelDtor)(v2);
  ((void (__stdcall *)(int, int))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (005CCA20) --------------------------------------------------------
void __thiscall GuildWin::InvalidateGuildHistoryList(GuildWin *this)
{
  GuildWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  CClientGuild *v3; // eax@2
  NiTListItem<GUILD_HISTORY *> *v4; // ecx@3
  int v5; // eax@3
  unsigned int v6; // esi@6
  NiTListItem<GUILD_HISTORY *> *v7; // ecx@6
  char *v8; // eax@7
  int v9; // ebx@7
  char *pkHistoryText; // [sp+4h] [bp-28h]@6
  NiTListItem<GUILD_HISTORY *> *kIter; // [sp+8h] [bp-24h]@6
  int v12; // [sp+Ch] [bp-20h]@4
  char acName[21]; // [sp+10h] [bp-1Ch]@6
  unsigned int v14; // [sp+28h] [bp-4h]@1
  int v15; // [sp+2Ch] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pListWinHistory;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    v3 = GuildTask::GetGuild();
    if ( v3 )
    {
      v4 = v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v5 = *(_DWORD *)&v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v5 )
      {
        v12 = v5;
        while ( 1 )
        {
          v6 = (unsigned int)v4->m_element;
          v7 = v4->m_pkNext;
          *(_DWORD *)acName = *(_DWORD *)(v6 + 8);
          *(_DWORD *)&acName[4] = *(_DWORD *)(v6 + 12);
          kIter = v7;
          *(_DWORD *)&acName[8] = *(_DWORD *)(v6 + 16);
          *(_DWORD *)&acName[12] = *(_DWORD *)(v6 + 20);
          *(_DWORD *)&acName[16] = *(_DWORD *)(v6 + 24);
          acName[20] = 0;
          pkHistoryText = GuildWin::GetHistoryText(v1, *(GUILD_HISTORY_MSG_TYPE *)(v6 + 28));
          if ( pkHistoryText )
          {
            v8 = fs("%d-%d-%d");
            v9 = SlideListWin::AddText(v1->m_pListWinHistory, v8);
            SlideListWin::SetText(v1->m_pListWinHistory, v9, 1u, acName);
            SlideListWin::SetText(v1->m_pListWinHistory, v9, 2u, pkHistoryText);
            SlideListWin::SetData(v1->m_pListWinHistory, v9, v6);
            SlideListWin::SetFontSize(v1->m_pListWinHistory, v9, 1);
          }
          --v12;
          if ( !v12 )
            break;
          v4 = kIter;
        }
      }
      SlideListWin::AlignText(v1->m_pListWinHistory, 4u);
      SlideListWin::AlignText(v1->m_pListWinHistory, 0, 5u);
      SlideListWin::AlignText(v1->m_pListWinHistory, 1u, 4u);
      SlideListWin::AlignText(v1->m_pListWinHistory, 2u, 4u);
      SlideListWin::UpdateViewList(v1->m_pListWinHistory);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005CCB80) --------------------------------------------------------
void __thiscall GuildWin::ShowEmblem(GuildWin *this, bool bShow)
{
  GuildWin *v2; // esi@1
  GuildEmblemIcon *v3; // ecx@4
  CClientGuild *v4; // eax@7
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@10
  int v6; // [sp+0h] [bp-4h]@0
  int v7; // [sp+0h] [bp-4h]@10

  v2 = this;
  if ( this->m_pkEmblemCheckBox )
  {
    if ( bShow )
    {
      if ( !this->m_kTabIndex )
      {
        ((void (__stdcall *)(_DWORD))this->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v3 = v2->m_pkEmblemIcon;
        if ( v3 )
          GuildEmblemIcon::SetEmblemIcon(v3, &v2->m_GuildEmblemInfo.nPTFileNo, &v2->m_GuildEmblemInfo.nPTIconNo, 1);
        GuildWin::SetEmblemState(v2, &v2->m_EmblemState);
      }
    }
    else
    {
      v4 = GuildTask::GetGuild();
      if ( v4 )
      {
        if ( v2->m_kTabIndex || !CClientGuild::AmIGuildMember(v4) )
        {
          ((void (__stdcall *)(_DWORD, int))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
            0,
            v6);
          v5 = v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
          v7 = 0;
        }
        else
        {
          ((void (__stdcall *)(_DWORD, int))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
            v2->m_bGuildEmblem == 0,
            v6);
          v5 = v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
          v7 = v2->m_bGuildEmblem == 0;
        }
        ((void (__cdecl *)(int))v5)(v7);
        if ( v2->m_pkEmblemIcon )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v2->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        }
      }
    }
  }
}

//----- (005CCCB0) --------------------------------------------------------
void __thiscall GuildWin::SetEmblem(GuildWin *this, GUILD_EMBLEM_INFO *pEmblemInfo, char eEmblemState)
{
  char v3; // bl@1
  GuildWin *v4; // esi@1
  const char *v5; // eax@1
  GuildEmblemIcon *v6; // ecx@1
  Name5 *v7; // eax@3
  _BYTE v8[20]; // ST00_20@3
  Char *v9; // eax@3
  unsigned int v10; // eax@5
  unsigned int v11; // [sp-8h] [bp-14h]@5
  GUILD_EMBLEM_INFO *v12; // [sp-4h] [bp-10h]@5

  v3 = eEmblemState;
  v4 = this;
  v5 = (const char *)&this->m_GuildEmblemInfo;
  *(_WORD *)&this->m_GuildEmblemInfo.nPTFileNo = *(_WORD *)&pEmblemInfo->nPTFileNo;
  v6 = this->m_pkEmblemIcon;
  v4->m_EmblemState = v3;
  if ( v6 && GuildEmblemIcon::SetEmblemIcon(v6, v5, &v4->m_GuildEmblemInfo.nPTIconNo, 1) )
  {
    v4->m_bGuildEmblem = 1;
    v7 = User::GetMainCharID(&g_kUser);
    *(_DWORD *)v8 = *(_DWORD *)&v7->n5_name[0];
    *(_QWORD *)&v8[4] = *(_QWORD *)&v7->n5_name[4];
    *(_QWORD *)&v8[12] = *(_QWORD *)&v7->n5_name[12];
    v9 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v8);
    if ( v9 )
    {
      if ( v3 == 1 )
      {
        v10 = v9->m_dwGuildRegNum;
        v12 = (GUILD_EMBLEM_INFO *)&eEmblemState;
        *(_WORD *)&eEmblemState = -1;
        v11 = v10;
      }
      else
      {
        v12 = pEmblemInfo;
        v11 = v9->m_dwGuildRegNum;
      }
      GuildTask::SetGuildEmblem(v11, v12);
      if ( v4->m_kTabIndex )
        GuildWin::ShowEmblem(v4, 0);
      else
        GuildWin::ShowEmblem(v4, v4->m_bGuildEmblem);
    }
  }
  else
  {
    v4->m_bGuildEmblem = 0;
  }
}

//----- (005CCDA0) --------------------------------------------------------
void __thiscall GuildWin::ClearEmblem(GuildWin *this)
{
  this->m_bGuildEmblem = 0;
  GuildWin::ShowEmblem(this, 0);
}

//----- (005CCDB0) --------------------------------------------------------
void __thiscall GuildWin::UpdateViewList(GuildWin *this)
{
  GuildWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  CClientGuildMember *v3; // ebx@3
  signed int v4; // edi@3
  GUILD_MEMBER_CLIENT *pkData; // [sp+4h] [bp-4h]@4

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    if ( (unsigned __int8)((int (*)(void))v1->m_pListWinGuild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      v3 = GuildMemberTask::GetGuildMember();
      v4 = 0;
      if ( v3->baseclass_0.m_NumOfMembers > 0u )
      {
        pkData = v3->baseclass_0.m_Members;
        do
        {
          if ( v1->m_bDefaultView )
            GuildWin::AddListItem_DefInfo(v1, pkData);
          ++pkData;
          ++v4;
        }
        while ( v4 < v3->baseclass_0.m_NumOfMembers );
      }
      SlideListWin::Sort(v1->m_pListWinGuild, v1->m_nSortColumn, 0, 0);
      SlideListWin::AlignText(v1->m_pListWinGuild, 4u);
      SlideListWin::AlignText(v1->m_pListWinGuild, 0, 5u);
      SlideListWin::AlignText(v1->m_pListWinGuild, 1u, 5u);
      SlideListWin::AlignText(v1->m_pListWinGuild, 2u, 5u);
      SlideListWin::AlignText(v1->m_pListWinGuild, 3u, 5u);
      SlideListWin::AlignText(v1->m_pListWinGuild, 4u, 5u);
      SlideListWin::UpdateViewList(v1->m_pListWinGuild);
      SlideBar::SetSplitCnt(v1->m_pkSlideBarGuildList, v1->m_pListWinGuild->m_nSlideSplitCnt);
    }
  }
}

//----- (005CCEC0) --------------------------------------------------------
void __thiscall GuildWin::ChangeUserName(GuildWin *this, Name5 *OldName, Name5 *NewName)
{
  CClientGuildMember *v3; // eax@1
  int v4; // edi@1
  int v5; // edx@1
  int v6; // ecx@2
  int v7; // eax@10
  GuildWin *thisa; // [sp+4h] [bp-4h]@1

  thisa = this;
  v3 = GuildMemberTask::GetGuildMember();
  v4 = v3->baseclass_0.m_NumOfMembers;
  v5 = 0;
  if ( v4 > 0 )
  {
    v6 = (int)&v3->baseclass_0.m_Members[0].sName.n5_name[8];
    while ( *(_DWORD *)(v6 - 8) != *(_DWORD *)&OldName->n5_name[0]
         || *(_DWORD *)(v6 - 4) != *(_DWORD *)&OldName->n5_name[4]
         || *(_DWORD *)v6 != *(_DWORD *)&OldName->n5_name[8]
         || *(_DWORD *)(v6 + 4) != *(_DWORD *)&OldName->n5_name[12]
         || *(_DWORD *)(v6 + 8) != *(_DWORD *)&OldName->n5_name[16] )
    {
      ++v5;
      v6 += 110;
      if ( v5 >= v4 )
        return;
    }
    v7 = (int)&v3->baseclass_0.m_Members[v5];
    *(_QWORD *)v7 = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)(v7 + 8) = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)(v7 + 16) = *(_DWORD *)&NewName->n5_name[16];
    GuildWin::UpdateViewList(thisa);
  }
}

//----- (005CCF50) --------------------------------------------------------
void __thiscall GuildWin::OnAddGuildMember(GuildWin *this)
{
  CClientGuild *v1; // eax@1
  char *v2; // eax@2
  CClientGuild *v3; // eax@3
  char *v4; // eax@4

  v1 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v1) )
  {
    v3 = GuildTask::GetGuild();
    if ( CClientGuild::CanIInvite(v3) )
    {
      ISingletonTask<GuildJoinReqTask>::Run();
    }
    else
    {
      v4 = TextData::Get(0x80D5CBDBu);
      MsgBox::Modal(MSGBOX_OK, v4);
    }
  }
  else
  {
    v2 = TextData::Get(0x76816B99u);
    MsgBox::Modal(MSGBOX_OK, v2);
  }
}

//----- (005CCFB0) --------------------------------------------------------
bool __thiscall GuildMemberVanishTask::OnProcessNetMsg(GuildMemberVanishTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildMemberVanishTask *v5; // ebx@1
  int v6; // edx@3
  int v7; // ecx@3
  int v8; // edx@3
  int v9; // ecx@3
  int v10; // eax@3
  char *v11; // eax@6
  char *v12; // eax@7
  char *v13; // eax@8
  CClientGuild *v14; // eax@9
  CClientGuildAcademy *v15; // eax@9
  char *v16; // eax@9
  char *v17; // edi@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v19; // [sp-1Ch] [bp-48h]@7
  int v20; // [sp-4h] [bp-30h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // [sp+Ch] [bp-20h]@7
  char acCharName[21]; // [sp+10h] [bp-1Ch]@3
  unsigned int v23; // [sp+28h] [bp-4h]@1
  int v24; // [sp+2Ch] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v5 = this;
  if ( iDepart == 29 && iCommand == 15 )
  {
    v6 = *((_DWORD *)pvData + 1);
    *(_DWORD *)acCharName = *(_DWORD *)pvData;
    v7 = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acCharName[4] = v6;
    v8 = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acCharName[8] = v7;
    v9 = *((_DWORD *)pvData + 4);
    v10 = *((_WORD *)pvData + 10);
    *(_DWORD *)&acCharName[12] = v8;
    *(_DWORD *)&acCharName[16] = v9;
    acCharName[20] = 0;
    if ( (_WORD)v10 == 3137 )
    {
      v14 = GuildTask::GetGuild();
      CClientGuild::ClearHistoryList(v14);
      v15 = GuildAcademyTask::GetGuildAcademy();
      CClientGuildAcademy::ClearHistoryList(v15);
      GuildTask::InvalidateGuildWindow();
      GuildAcademyTask::InvalidateGuildAcademyWin();
      v20 = (int)acCharName;
      v16 = TextData::Get(0xC4D5ADF3u);
      v17 = fs(v16);
      if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v17,
          &v5->baseclass_0.baseclass_0.baseclass_8);
        if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v17,
            &v5->baseclass_0.baseclass_0.baseclass_8);
      }
      v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v5->baseclass_0.baseclass_0.baseclass_8,
        25,
        v17,
        &v5->baseclass_0.baseclass_0.baseclass_8);
    }
    else
    {
      if ( v10 == 3321 )
      {
        v13 = TextData2::Get(0x55E8A6E0u);
        MsgBox::Modeless(MSGBOX_OK, v13);
      }
      else
      {
        if ( v10 == 12695 )
        {
          v21 = &v19;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
            &v19,
            "Guild_CannotLeaveTime");
          v20 = CSingleDataMap::GetValue(&g_kSingleDataMap, v19);
          v12 = TextData3::Get(0x37804387u);
          MsgBox::Modeless(MSGBOX_OK, v12);
        }
        else
        {
          v11 = TextData::Get(0x736A5B7Eu);
          MsgBox::Modeless(MSGBOX_OK, v11);
        }
      }
    }
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (005CD120) --------------------------------------------------------
void __thiscall GuildWin::InvalidateGuildList(GuildWin *this)
{
  GuildWin *v1; // esi@1
  CClientGuild *v2; // eax@2
  CClientGuild *v3; // eax@5
  CClientGuild *v4; // ebx@6
  CClientGuildMember *v5; // eax@7
  Name5 *v6; // eax@7
  tm *v7; // eax@9
  NiRefObjectVtbl *v8; // edi@9
  char *v9; // eax@9
  char *v10; // eax@9
  char v11; // al@10
  char v12; // al@16
  NiRefObjectVtbl *v13; // edi@23
  char *v14; // eax@23
  NiRefObjectVtbl *v15; // edi@24
  char *v16; // eax@24
  char *v17; // eax@24
  NiRefObjectVtbl *v18; // edi@24
  char *v19; // eax@24
  char *v20; // eax@24
  NiRefObjectVtbl *v21; // edi@24
  char *v22; // eax@24
  char *v23; // eax@24
  signed __int64 v24; // kr00_8@24
  NiRefObjectVtbl *v25; // edi@24
  char *v26; // eax@24
  char *v27; // eax@24
  NiRefObjectVtbl *v28; // edi@24
  char *v29; // eax@24
  char *v30; // eax@24
  int v31; // edi@25
  signed int v32; // ebx@25
  CClientGuild *v33; // edi@27
  int v34; // eax@29
  int v35; // ecx@29
  int v36; // eax@29
  int v37; // ecx@29
  char *v38; // eax@29
  char *v39; // eax@29
  char *v40; // eax@29
  char *v41; // eax@29
  int v42; // eax@29
  char v43; // cl@30
  SlideListWin *v44; // eax@31
  int v45; // eax@33
  void *v46; // eax@34
  int v47; // eax@37
  char v48; // cl@38
  char *v49; // edi@40
  int v50; // eax@42
  int v51; // edi@42
  unsigned int v52; // eax@42
  unsigned int v53; // ebx@46
  const void *v54; // eax@48
  SlideListWin *v55; // ecx@50
  const char *v56; // eax@53
  CClientGuild *v57; // eax@58
  ColumnBut *v58; // eax@61
  char *v59; // eax@63
  PgWin *v60; // ecx@63
  GuildEmblemIcon *v61; // eax@64
  int v62; // [sp-14h] [bp-4A8h]@3
  unsigned int v63; // [sp-14h] [bp-4A8h]@12
  unsigned int v64; // [sp-10h] [bp-4A4h]@1
  HDC__ *hDC; // [sp+0h] [bp-494h]@37
  __int64 found; // [sp+4h] [bp-490h]@9
  signed int pkTestWin; // [sp+Ch] [bp-488h]@9
  char _Ptr; // [sp+10h] [bp-484h]@39
  CClientGuildMember *lengthSize; // [sp+14h] [bp-480h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNotice; // [sp+18h] [bp-47Ch]@37
  char pcTemp[512]; // [sp+34h] [bp-460h]@29
  char acStr[256]; // [sp+234h] [bp-260h]@37
  char buffer[256]; // [sp+334h] [bp-160h]@46
  char acDateTime[32]; // [sp+434h] [bp-60h]@29
  char acGuildMaster[21]; // [sp+454h] [bp-40h]@9
  char acAuthor[21]; // [sp+46Ch] [bp-28h]@29
  unsigned int v77; // [sp+484h] [bp-10h]@1
  int v78; // [sp+490h] [bp-4h]@9
  int v79; // [sp+494h] [bp+0h]@1

  v77 = (unsigned int)&v79 ^ __security_cookie;
  v64 = (unsigned int)&v79 ^ __security_cookie;
  v1 = this;
  GuildWin::UpdateViewList(this);
  if ( v1->m_kTabIndex )
    goto LABEL_69;
  v2 = GuildTask::GetGuild();
  v62 = CClientGuild::CanIWriteNotice(v2) != 0;
  ((void (__stdcall *)(int))v1->m_pkEditNoticeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v62);
  lengthSize = GuildMemberTask::GetGuildMember();
  v3 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v3) )
  {
    v4 = GuildTask::GetGuild();
    if ( v4 )
    {
      v5 = GuildMemberTask::GetGuildMember();
      v6 = (Name5 *)CClientGuildMember::GetGuildMaster(v5);
      if ( v6 && v4->baseclass_0.m_Guild.dCreateDate )
      {
        Name5::n_string(v6, acGuildMaster);
        acGuildMaster[20] = 0;
        v7 = _localtime32(&v4->baseclass_0.m_Guild.dCreateDate);
        ATL::CTime::CTime((ATL::CTime *)&found, v7->tm_year + 1900, v7->tm_mon + 1, v7->tm_mday, 0, 0, 0, -1);
        ATL::CTime::Format(
          (ATL::CTime *)&found,
          (ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *)&pkTestWin,
          "%Y-%m-%d");
        v8 = v1->m_pkGuildInfoTxt[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v78 = 0;
        v9 = TextData3::Get(0x171B0262u);
        v10 = fs(v9);
        v8[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildInfoTxt[0], (unsigned int)v10);
        v78 = -1;
        ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::_CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>((ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *)&pkTestWin);
        ((void (__stdcall *)(signed int))v1->m_pkGuildInfoTxt[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      v11 = v4->baseclass_0.m_Guild.nType;
      if ( v11 || v4->baseclass_0.m_Guild.nGrade != 1 )
      {
        if ( v11 != 1 || v4->baseclass_0.m_Guild.nGrade != 1 )
        {
          v12 = v4->baseclass_0.m_Guild.nGrade;
          if ( v12 == 2 )
          {
            v63 = 1587899366;
          }
          else
          {
            if ( v12 == 3 )
            {
              v63 = 1420849369;
            }
            else
            {
              if ( v12 != 4 )
              {
LABEL_24:
                v15 = v1->m_pkGuildInfoTxt[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                v16 = TextData3::Get(0xC0D2B71Eu);
                v17 = fs(v16);
                v15[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildInfoTxt[2], (unsigned int)v17);
                ((void (__stdcall *)(signed int))v1->m_pkGuildInfoTxt[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                v18 = v1->m_pkGuildInfoTxt[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                v19 = TextData3::Get(0xDADCD821u);
                v20 = fs(v19);
                v18[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildInfoTxt[3], (unsigned int)v20);
                ((void (__stdcall *)(signed int))v1->m_pkGuildInfoTxt[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                v21 = v1->m_pkGuildInfoTxt[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                CClientGuildMember::GetNumOfOnlineMembers(lengthSize);
                v22 = TextData::Get(0xCCA32130u);
                v23 = fs(v22);
                v21[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildInfoTxt[4], (unsigned int)v23);
                ((void (__stdcall *)(signed int))v1->m_pkGuildInfoTxt[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                v24 = GuildAcademyTask::GetGuildAcademy()->baseclass_0.m_GuildAcademy.dAcademyBuffUntilTime;
                pkTestWin = (signed int)((double)v24 / 3600.0);
                found = v24 % 3600;
                v25 = v1->m_pkGuildInfoTxt[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                v26 = TextData2::Get(0xEFCFDD01u);
                v27 = fs(v26);
                v25[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildInfoTxt[5], (unsigned int)v27);
                ((void (__stdcall *)(signed int))v1->m_pkGuildInfoTxt[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                v28 = v1->m_pkGuildInfoTxt[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                v29 = TextData2::Get(0x809BDFE9u);
                v30 = fs(v29);
                v28[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildInfoTxt[6], (unsigned int)v30);
                ((void (__stdcall *)(signed int))v1->m_pkGuildInfoTxt[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                goto LABEL_27;
              }
              v63 = 1873504154;
            }
          }
        }
        else
        {
          v63 = 593260685;
        }
      }
      else
      {
        v63 = -1444300238;
      }
      if ( TextData::Get(v63) )
      {
        v13 = v1->m_pkGuildInfoTxt[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xDDC9DF24u);
        v14 = fs("%s : %s");
        v13[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildInfoTxt[1], (unsigned int)v14);
        ((void (__stdcall *)(signed int))v1->m_pkGuildInfoTxt[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      goto LABEL_24;
    }
  }
  else
  {
    v31 = (int)v1->m_pkGuildInfoTxt;
    v32 = 7;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v31 + 256))(0);
      v31 += 4;
      --v32;
    }
    while ( v32 );
  }
LABEL_27:
  SlideListWin::RemoveAllList(v1->m_pListWinNotice);
  v33 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v33) && v33->baseclass_0.m_Guild.sNotify[0] )
  {
    v34 = *(_DWORD *)&v33->baseclass_0.m_Guild.sNotifyCharID.n5_name[0];
    v35 = *(_DWORD *)&v33->baseclass_0.m_Guild.sNotifyCharID.n5_name[4];
    *(_DWORD *)&acAuthor[8] = *(_DWORD *)&v33->baseclass_0.m_Guild.sNotifyCharID.n5_name[8];
    *(_DWORD *)acAuthor = v34;
    v36 = *(_DWORD *)&v33->baseclass_0.m_Guild.sNotifyCharID.n5_name[12];
    *(_DWORD *)&acAuthor[4] = v35;
    v37 = *(_DWORD *)&v33->baseclass_0.m_Guild.sNotifyCharID.n5_name[16];
    *(_DWORD *)&acAuthor[12] = v36;
    *(_DWORD *)&acAuthor[16] = v37;
    acAuthor[20] = 0;
    pcTemp[0] = 0;
    memset(&pcTemp[1], 0, 0x1FFu);
    TextData2::Get(0x1A2B4123u);
    sprintf(pcTemp, "%s");
    strftime(acDateTime, 0x1Fu, pcTemp, &v33->baseclass_0.m_Guild.tm_dNotifyDate);
    SlideListWin::AddText(v1->m_pListWinNotice, &byte_9B7957);
    v38 = TextData::Get(0xDF3F2351u);
    SlideListWin::AddText(v1->m_pListWinNotice, v38);
    SlideListWin::AddText(v1->m_pListWinNotice, &byte_9B795E);
    TextData::Get(0x8693CAE1u);
    v39 = fs("%s : %s");
    SlideListWin::AddText(v1->m_pListWinNotice, v39);
    TextData::Get(0x83936495u);
    v40 = fs("%s : %s");
    SlideListWin::AddText(v1->m_pListWinNotice, v40);
    SlideListWin::AddText(v1->m_pListWinNotice, &byte_9B795F);
    TextData::Get(0xE5E1C0D9u);
    v41 = fs("%s :");
    SlideListWin::AddText(v1->m_pListWinNotice, v41);
    SlideListWin::AddText(v1->m_pListWinNotice, &byte_9B7966);
    v42 = (int)v33->baseclass_0.m_Guild.sNotify;
    do
    {
      v43 = *(_BYTE *)v42;
      *(_BYTE *)(pcTemp - v33->baseclass_0.m_Guild.sNotify + v42) = *(_BYTE *)v42;
      ++v42;
    }
    while ( v43 );
    v44 = v1->m_pListWinNotice;
    if ( (signed int)((char *)v44->m_vecButList.baseclass_0._Mylast
                    - *(_DWORD *)&v44->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
    {
      v45 = **(_DWORD **)&v44->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( (*(_DWORD *)(v45 + 336) - *(_DWORD *)(v45 + 332)) >> 2 )
        v46 = (void *)**(_DWORD **)(v45 + 332);
      else
        v46 = 0;
      pkTestWin = (signed int)v46;
    }
    else
    {
      pkTestWin = 0;
    }
    hDC = *(HDC__ **)(*(_DWORD *)(*(_DWORD *)(pkTestWin + 288) + 312) + 192);
    acStr[0] = 0;
    memset(&acStr[1], 0, 0xFFu);
    v47 = (int)pcTemp;
    strNotice.baseclass_0._Myres = 15;
    strNotice.baseclass_0._Mysize = 0;
    strNotice.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v48 = *(_BYTE *)v47++;
    while ( v48 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &strNotice,
      pcTemp,
      v47 - (_DWORD)&pcTemp[1]);
    v78 = 1;
    _Ptr = 10;
    while ( 1 )
    {
      memset(acStr, 0, 0x100u);
      v49 = *(char **)&strNotice;
      if ( strNotice.baseclass_0._Myres < 0x10 )
        v49 = (char *)&strNotice;
      v50 = (*(int (__cdecl **)(unsigned int))(*(_DWORD *)pkTestWin + 144))(v64);
      v51 = PgUtil::StringPixelCopy(acStr, v49, hDC, v50 - 10);
      v52 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strNotice, &_Ptr, 0, 1u);
      HIDWORD(found) = v52;
      if ( !v51 )
        break;
      if ( v52 > v51 || (lengthSize = (CClientGuildMember *)v52, v52 == -1) )
        lengthSize = (CClientGuildMember *)v51;
      buffer[0] = 0;
      memset(&buffer[1], 0, 0xFFu);
      v53 = (unsigned int)lengthSize;
      if ( strNotice.baseclass_0._Mysize < (unsigned int)lengthSize )
        v53 = strNotice.baseclass_0._Mysize;
      v54 = *(const void **)&strNotice;
      if ( strNotice.baseclass_0._Myres < 0x10 )
        v54 = &strNotice;
      memcpy_s(buffer, 0x100u, v54, v53);
      v55 = v1->m_pListWinNotice;
      buffer[v53] = 0;
      SlideListWin::AddText(v55, buffer);
      if ( HIDWORD(found) > v51 )
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
          &strNotice,
          0,
          (unsigned int)lengthSize);
      else
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
          &strNotice,
          0,
          (unsigned int)((char *)&lengthSize->baseclass_0.vfptr + 1));
    }
    v56 = *(const char **)&strNotice;
    if ( strNotice.baseclass_0._Myres < 0x10 )
      v56 = (const char *)&strNotice;
    SlideListWin::AddText(v1->m_pListWinNotice, v56);
    SlideListWin::AlignText(v1->m_pListWinNotice, 4u);
    SlideListWin::UpdateViewList(v1->m_pListWinNotice);
    SlideBar::SetSplitCnt(v1->m_pkSlideBarGuildNotice, v1->m_pListWinGuild->m_nSlideSplitCnt);
    v78 = -1;
    if ( strNotice.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strNotice);
    strNotice.baseclass_0._Myres = 15;
    strNotice.baseclass_0._Mysize = 0;
    strNotice.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  v57 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMaster(v57) )
  {
    GuildWin::SetEmblemState(v1, &v1->m_EmblemState);
  }
  else
  {
    if ( v1->m_bGuildEmblem )
    {
      v61 = v1->m_pkEmblemIcon;
      if ( !v61 )
        return;
      if ( !v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin )
        v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v59 = TextData3::Get(0x6E9EAD92u);
      v60 = (PgWin *)v1->m_pkEmblemIcon;
    }
    else
    {
      v58 = v1->m_pkEmblemCheckBox;
      if ( !v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin )
        v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v59 = TextData3::Get(0x6E9EAD92u);
      v60 = (PgWin *)v1->m_pkEmblemCheckBox;
    }
    PgWin::SetToolTipWinText(v60, v59);
  }
LABEL_69:
  GuildWin::InvalidateGuildHistoryList(v1);
}
// A85C00: using guessed type int __security_cookie;

//----- (005CDA30) --------------------------------------------------------
void __thiscall GuildWin::DeleteUser(GuildWin *this, Name5 *kName)
{
  GuildWin *v2; // edi@1
  CClientGuildMember *v3; // eax@1
  unsigned int v4; // edx@1
  _BYTE v5[20]; // ST00_20@3
  CClientGuildAcademy *v6; // eax@3
  CClientGuildAcademy *v7; // eax@4
  PROTO_NC_GUILD_MEMBER_LEAVE_CMD pkProto; // [sp+8h] [bp-18h]@1
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = GuildMemberTask::GetGuildMember();
  v4 = *(_DWORD *)&kName->n5_name[4];
  *(_DWORD *)&pkProto.CharID.n5_name[0] = *(_DWORD *)&kName->n5_name[0];
  *(_QWORD *)&pkProto.CharID.n5_name[4] = __PAIR__(*(_DWORD *)&kName->n5_name[8], v4);
  *(_QWORD *)&pkProto.CharID.n5_name[12] = *(_QWORD *)&kName->n5_name[12];
  if ( !v3 || v3->baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_LEAVE_CMD((CGuildMember *)v3, &pkProto) )
  {
    *(_QWORD *)v5 = *(_QWORD *)&pkProto;
    *(_QWORD *)&v5[8] = *(_QWORD *)&pkProto.CharID.n5_name[8];
    *(_DWORD *)&v5[16] = *(_DWORD *)&pkProto.CharID.n5_name[16];
    v6 = GuildAcademyTask::GetGuildAcademy();
    if ( CClientGuildAcademy::IsGuildAcademyMaster(v6, *(Name5 *)v5) )
    {
      v7 = GuildAcademyTask::GetGuildAcademy();
      *(_DWORD *)&v7->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] = 0;
      *(_DWORD *)&v7->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[12] = 0;
      *(_DWORD *)&v7->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8] = 0;
      *(_DWORD *)&v7->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[4] = 0;
      *(_DWORD *)&v7->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] = 0;
      strncpy(v7->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name, &byte_9B796F, 0x14u);
    }
    GuildWin::InvalidateGuildList(v2);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005CDB00) --------------------------------------------------------
void __thiscall GuildWin::_GuildWin(GuildWin *this)
{
  GuildWin *v1; // esi@1
  PopupMenuText *v2; // edi@1
  PopupMenuText *v3; // edi@5
  PopupMenuText *v4; // edi@9
  PopupMenuText *v5; // edi@13
  PopupMenuText *v6; // edi@17
  PopupMenuText *v7; // edi@21
  PopupMenuText *v8; // edi@25
  PopupMenuText *v9; // edi@29
  PopupMenuText *v10; // edi@33
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v11; // ST08_4@37
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v12; // ST04_4@37
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@37
  std::map<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> > > *v14; // [sp+4h] [bp-14h]@37
  GuildWin *v15; // [sp+8h] [bp-10h]@1
  int v16; // [sp+14h] [bp-4h]@1

  v1 = this;
  v15 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWin::_vftable_;
  v2 = this->m_spPopupInitializeAcademyMaster.m_pObject;
  v16 = 9;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_spPopupAppointAcademyMaster.m_pObject;
  LOBYTE(v16) = 8;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_spPopupWhisperChat.m_pObject;
  LOBYTE(v16) = 7;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->m_spPopupVanish.m_pObject;
  LOBYTE(v16) = 6;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v6 = v1->m_spPopupFireAppointment.m_pObject;
  LOBYTE(v16) = 5;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spPopupAppointKnight.m_pObject;
  LOBYTE(v16) = 4;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  v8 = v1->m_spPopupAppointSenior.m_pObject;
  LOBYTE(v16) = 3;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  v9 = v1->m_spPopupAppointSubMaster.m_pObject;
  LOBYTE(v16) = 2;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  v10 = v1->m_spPopupAppointMaster.m_pObject;
  LOBYTE(v16) = 1;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v10,
      1u);
  v14 = &v1->map_WinIndex;
  v11 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v12 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v16) = 10;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->map_WinIndex,
    &result,
    v12,
    v11);
  operator delete(v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v16 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B82DC: using guessed type int (__stdcall *GuildWin___vftable_)(int uiFlags);
// 9B82FC: using guessed type int (__thiscall *GuildWin___vftable_)(void *p, char);

//----- (005CDCF0) --------------------------------------------------------
void __thiscall GuildWin::DirectMessage(GuildWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildWin *v4; // esi@1
  float v5; // ecx@1
  int v6; // eax@2
  int v7; // eax@7
  GuildMemberGradeSetupTask *v8; // eax@10
  GuildMemberGradeSetupTask *v9; // eax@11
  GuildMemberGradeSetupTask *v10; // eax@12
  GuildMemberGradeSetupTask *v11; // eax@13
  GuildMemberGradeSetupTask *v12; // eax@14
  GuildMemberGradeSetupTask *v13; // eax@15
  GuildMemberVanishTask *v14; // eax@16
  void *v15; // edi@17
  CClientGuildAcademy *v16; // eax@18
  GuildAcademyMasterAppointTask *v17; // eax@21
  CClientGuild *v18; // eax@24
  GuildAcademyMasterInitializeTask *v19; // esi@25
  Name5 *v20; // eax@25
  char *v21; // edi@27
  unsigned int v22; // [sp-8h] [bp-2Ch]@20
  void *pkMemberClient; // [sp+4h] [bp-20h]@7
  char acname[21]; // [sp+8h] [bp-1Ch]@17
  unsigned int v25; // [sp+20h] [bp-4h]@1
  int v26; // [sp+24h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v4 = this;
  v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale;
  if ( LODWORD(v5) )
  {
    v6 = SlideListWin::GetCurSelIndex(LODWORD(v5));
    if ( v6 >= 0 )
    {
      switch ( iMsgTag )
      {
        case 9:
        case 12:
          if ( (PgWin *)((char *)v4 - 232) == g_pkToolTipWin->m_pkToolTipParentWin )
            ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          return;
        case 41:
          GuildWin::InvalidateGuildList((GuildWin *)((char *)v4 - 232));
          return;
        case 15:
          SlideListWin::GetData(
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale),
            v6,
            (unsigned int *)&pkMemberClient);
          v7 = *(_DWORD *)pvBody;
          if ( *(_DWORD *)pvBody > 1011 )
          {
            if ( v7 != 1012 )
              return;
            v18 = GuildTask::GetGuild();
            if ( CClientGuild::AmIGuildMaster(v18) )
            {
              v19 = ISingletonTask<GuildAcademyMasterInitializeTask>::Run();
              v20 = User::GetMainCharID(&g_kUser);
              GuildAcademyMasterInitializeTask::SetInfo(v19, v20);
              return;
            }
            v22 = 673398324;
          }
          else
          {
            if ( *(_DWORD *)pvBody != 1011 )
            {
              switch ( v7 )
              {
                case 34:
                  v8 = ISingletonTask<GuildMemberGradeSetupTask>::Run();
                  GuildMemberGradeSetupTask::SetInfo(v8, (Name5 *)pkMemberClient, 0, *((_BYTE *)pkMemberClient + 96));
                  break;
                case 35:
                  v9 = ISingletonTask<GuildMemberGradeSetupTask>::Run();
                  GuildMemberGradeSetupTask::SetInfo(v9, (Name5 *)pkMemberClient, 1, 0);
                  break;
                case 36:
                  v10 = ISingletonTask<GuildMemberGradeSetupTask>::Run();
                  GuildMemberGradeSetupTask::SetInfo(v10, (Name5 *)pkMemberClient, 2, 0);
                  break;
                case 37:
                  v11 = ISingletonTask<GuildMemberGradeSetupTask>::Run();
                  GuildMemberGradeSetupTask::SetInfo(v11, (Name5 *)pkMemberClient, 3, 0);
                  break;
                case 38:
                  v12 = ISingletonTask<GuildMemberGradeSetupTask>::Run();
                  GuildMemberGradeSetupTask::SetInfo(v12, (Name5 *)pkMemberClient, 4, 0);
                  break;
                case 39:
                  v13 = ISingletonTask<GuildMemberGradeSetupTask>::Run();
                  GuildMemberGradeSetupTask::SetInfo(v13, (Name5 *)pkMemberClient, 6, 0);
                  break;
                case 40:
                  v14 = ISingletonTask<GuildMemberVanishTask>::Run();
                  GuildMemberVanishTask::SetInfo(v14, (Name5 *)pkMemberClient);
                  break;
                case 41:
                  v15 = pkMemberClient;
                  Name5::n_string((Name5 *)pkMemberClient, acname);
                  acname[20] = 0;
                  *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)v15;
                  *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *((_QWORD *)v15 + 1);
                  *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *((_DWORD *)v15 + 4);
                  GameFrameWork::OnWhisperChatStart(
                    LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
                    acname);
                  break;
                default:
                  return;
              }
              return;
            }
            v16 = GuildAcademyTask::GetGuildAcademy();
            if ( CClientGuildAcademy::AmIGuildAcademyMaster(v16) )
            {
              if ( *((_BYTE *)pkMemberClient + 20) <= 3u )
              {
                v17 = ISingletonTask<GuildAcademyMasterAppointTask>::Run();
                GuildAcademyMasterAppointTask::SetInfo(v17, (Name5 *)pkMemberClient);
                return;
              }
              v22 = -1118937508;
            }
            else
            {
              v22 = 1723173574;
            }
          }
          v21 = TextData::Get(v22);
          if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
          {
            (*(void (__stdcall **)(signed int, char *, GuildWin *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                  + 4))(
              25,
              v21,
              v4);
            if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
              (*(void (__stdcall **)(signed int, char *, GuildWin *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                    + 20))(
                25,
                v21,
                v4);
          }
          ((void (__thiscall *)(GuildWin *, signed int, char *, GuildWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
            v4,
            25,
            v21,
            v4);
          break;
        default:
          return;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005CE060) --------------------------------------------------------
void __thiscall GuildWin::OnTab01(GuildWin *this)
{
  GuildWin *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v3; // esi@1
  PgWin *const v4; // ecx@2
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v5; // eax@8
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *j; // eax@9
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *i; // eax@12
  CClientGuild *v8; // eax@17
  CClientGuild *v9; // esi@17
  ColumnBut *v10; // eax@23
  char *v11; // eax@25
  GuildEmblemIcon *v12; // eax@26
  char *v13; // eax@29
  signed int v14; // [sp-4h] [bp-10h]@4
  bool v15; // [sp-4h] [bp-10h]@19

  v1 = this;
  v2 = this->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  this->m_kTabIndex = 0;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      v4 = v3->_Myval.baseclass_0.first;
      if ( v4 )
      {
        if ( v3->_Myval.baseclass_0.second )
          v14 = 0;
        else
          v14 = 1;
        ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v14);
      }
      if ( !v3->_Isnil )
      {
        v5 = v3->_Right;
        if ( v5->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  GuildWin::InvalidateGuildList(v1);
  v1->m_pkTab01->m_bCheck = 1;
  v1->m_pkTab02->m_bCheck = 0;
  v1->m_pkTab03->m_bCheck = 0;
  v8 = GuildTask::GetGuild();
  v9 = v8;
  if ( v8 )
  {
    v15 = CClientGuild::AmIGuildMember(v8) ? v1->m_bGuildEmblem : 0;
    GuildWin::ShowEmblem(v1, v15);
    if ( !CClientGuild::AmIGuildMaster(v9) )
    {
      if ( v1->m_bGuildEmblem )
      {
        v12 = v1->m_pkEmblemIcon;
        if ( v12 )
        {
          if ( !v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin )
            v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
          v13 = TextData3::Get(0x6E9EAD92u);
          PgWin::SetToolTipWinText(
            &v1->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            v13);
        }
      }
      else
      {
        v10 = v1->m_pkEmblemCheckBox;
        if ( !v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
        v11 = TextData3::Get(0x6E9EAD92u);
        PgWin::SetToolTipWinText(&v1->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v11);
        v1->m_pkEmblemCheckBox->m_bCheck = 0;
      }
    }
  }
}

//----- (005CE1D0) --------------------------------------------------------
void __thiscall GuildWin::OnTab02(GuildWin *this)
{
  GuildWin *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v4; // eax@6
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *j; // eax@7
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *i; // eax@10
  int v7; // [sp-4h] [bp-Ch]@3

  v1 = this;
  v2 = this->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  this->m_kTabIndex = 1;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      v7 = v3->_Myval.baseclass_0.second == 1;
      ((void (__stdcall *)(int))v3->_Myval.baseclass_0.first->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7);
      if ( !v3->_Isnil )
      {
        v4 = v3->_Right;
        if ( v4->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  GuildWin::InvalidateGuildList(v1);
  v1->m_pkTab01->m_bCheck = 0;
  v1->m_pkTab02->m_bCheck = 1;
  v1->m_pkTab03->m_bCheck = 0;
  GuildWin::ShowEmblem(v1, 0);
}

//----- (005CE290) --------------------------------------------------------
void __thiscall GuildWin::OnTab03(GuildWin *this)
{
  GuildWin *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v4; // eax@6
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *j; // eax@7
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *i; // eax@10
  int v7; // [sp-4h] [bp-Ch]@3

  v1 = this;
  v2 = this->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  this->m_kTabIndex = 2;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      v7 = v3->_Myval.baseclass_0.second == 2;
      ((void (__stdcall *)(int))v3->_Myval.baseclass_0.first->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7);
      if ( !v3->_Isnil )
      {
        v4 = v3->_Right;
        if ( v4->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  GuildWin::InvalidateGuildList(v1);
  v1->m_pkTab01->m_bCheck = 0;
  v1->m_pkTab02->m_bCheck = 0;
  v1->m_pkTab03->m_bCheck = 1;
  GuildWin::ShowEmblem(v1, 0);
}

//----- (005CE350) --------------------------------------------------------
void __thiscall GuildWin::GuildWin(GuildWin *this)
{
  GuildWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  GuildWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildWin::_vftable_;
  v6 = 0;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_spPopupAppointMaster.m_pObject = 0;
  v1->m_spPopupAppointSubMaster.m_pObject = 0;
  v1->m_spPopupAppointSenior.m_pObject = 0;
  v1->m_spPopupAppointKnight.m_pObject = 0;
  v1->m_spPopupFireAppointment.m_pObject = 0;
  v1->m_spPopupVanish.m_pObject = 0;
  v1->m_spPopupWhisperChat.m_pObject = 0;
  v1->m_spPopupAppointAcademyMaster.m_pObject = 0;
  v1->m_spPopupInitializeAcademyMaster.m_pObject = 0;
  *(_WORD *)&v1->m_bShowOnlineOnly = 256;
  v1->m_nSortColumn = 0;
  v1->m_pkSlideBarGuildList = 0;
  v1->m_pkSlideBarGuildNotice = 0;
  v1->m_pkSlideBar = 0;
  v1->m_pListWinGuild = 0;
  v1->m_pListWinNotice = 0;
  v1->m_pkInfoType = 0;
  v1->m_pkTitle1 = 0;
  v1->m_pkTitle2 = 0;
  v1->m_pkTitle3 = 0;
  v1->m_pkMemberOnlineStatus = 0;
  v1->m_pkGuildGrade_Fame = 0;
  v1->m_pkGuildAcademyInfo = 0;
  v1->m_pkRemainingBuffTime = 0;
  v1->m_pkShowOnlineOnly = 0;
  v1->m_pkGuildMemberPopupMenu = 0;
  v1->m_pkCorpsSetupSubMenu = 0;
  v1->m_pkCorpsCommanderSetupSubMenu = 0;
  v1->m_pkGuildToken = 0;
  v1->m_pkNextJoinTime = 0;
  v1->m_kTabIndex = 0;
  *(_WORD *)&v1->m_bGuildEmblem = 0;
  v1->m_EmblemState = 4;
  v1->m_pkEmblemCheckBox = 0;
  v1->m_pkEmblemIcon = 0;
  *(_WORD *)&v1->m_GuildEmblemInfo.nPTFileNo = -1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9B82DC: using guessed type int (__stdcall *GuildWin___vftable_)(int uiFlags);
// 9B82FC: using guessed type int (__thiscall *GuildWin___vftable_)(void *p, char);

//----- (005CE500) --------------------------------------------------------
GuildWin *__cdecl GuildWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x22Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildWin::GuildWin((GuildWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005CE630) --------------------------------------------------------
void __thiscall GuildWin::OnCommand(GuildWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      GuildWin::OnWinClose(this);
      break;
    case 0xCu:
      GuildWin::OnDetailInfo(this);
      break;
    case 0xDu:
      GuildWin::OnAddGuildMember(this);
      break;
    case 0xEu:
      ITask::DirectDispatchAll(42, 0);
      break;
    case 0x11u:
      GuildWin::OnSlideBar(this);
      break;
    case 0x12u:
      GuildWin::OnSlideBarNotice(this);
      break;
    case 0x13u:
      GuildWin::OnSortByTitle01(this);
      break;
    case 0x14u:
      GuildWin::OnSortByTitle02(this);
      break;
    case 0x15u:
      GuildWin::OnSortByTitle03(this);
      break;
    case 0x16u:
      GuildWin::OnSortByTitle04(this);
      break;
    case 0x17u:
      GuildWin::OnSortByTitle05(this);
      break;
    case 0x19u:
      GuildWin::OnLClick(this, lParam);
      break;
    case 0x18u:
      GuildWin::OnRClick(this, lParam);
      break;
    case 0x1Bu:
      GuildWin::OnChangeTab(this, 0);
      break;
    case 0x1Cu:
      GuildWin::OnChangeTab(this, TE_PARTYMATCH);
      break;
    case 0x1Du:
      GuildWin::OnChangeTab(this, TE_WEDDING);
      break;
    case 0x1Eu:
      GuildWin::OnChangeTab(this, TE_HOLYPROMISE);
      break;
    case 0x1Fu:
      GuildWin::OnChangeTab(this, TE_GUILDACADEMY);
      break;
    case 0x1Au:
      GuildWin::OnEditNotice(this);
      break;
    case 0x20u:
      GuildWin::OnHelpLink(this);
      break;
    case 0x21u:
      GuildWin::OnGuildTournamentMenu(this);
      break;
    case 0x22u:
      GuildWin::OnTab01(this);
      break;
    case 0x23u:
      GuildWin::OnTab02(this);
      break;
    case 0x24u:
      GuildWin::OnTab03(this);
      break;
    case 0x28u:
      GuildWin::OnSlideBarHistory(this);
      break;
    case 0x29u:
      GuildWin::OnShowEmblemWin(this);
      break;
    default:
      return;
  }
}

//----- (005CE7D0) --------------------------------------------------------
void __thiscall GuildWin::OnShowWin(GuildWin *this)
{
  unsigned int v1; // eax@1
  int v2; // eax@2

  v1 = this->m_kTabIndex;
  if ( v1 )
  {
    v2 = v1 - 1;
    if ( v2 )
    {
      if ( v2 == 1 )
        GuildWin::OnTab03(this);
    }
    else
    {
      GuildWin::OnTab02(this);
    }
  }
  else
  {
    GuildWin::OnTab01(this);
  }
}

//----- (005CE800) --------------------------------------------------------
bool __thiscall GuildWin::Create(GuildWin *this, PgFrameWork *pkFrameWork)
{
  GuildWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool v7; // al@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@14
  PgFont *v13; // eax@17
  PgWinText *v14; // edi@17
  char *v15; // eax@17
  PgSprData *v16; // edi@17
  PgSprData *v17; // ST140_4@17
  int v18; // edi@17
  PgFont *v19; // eax@19
  PgWinText *v20; // edi@19
  char *v21; // eax@19
  PgFont *v22; // eax@19
  PgWinText *v23; // edi@19
  char *v24; // eax@19
  PgSprData *v25; // eax@19
  int v26; // edi@19
  PgSprData *v27; // eax@19
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v28; // eax@19
  PgSprData *v29; // eax@19
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v30; // eax@19
  PgSprData *v31; // eax@19
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v32; // eax@19
  SLWCreateInfo::Item *v33; // eax@19
  void *v34; // eax@27
  void *v35; // eax@29
  void *v36; // eax@33
  PgSprData *v37; // eax@35
  SlideListWin *v38; // eax@35
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v39; // eax@35
  SLWCreateInfo::Item *v40; // eax@35
  PgSprData *v41; // eax@39
  SlideListWin *v42; // eax@39
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v43; // eax@39
  SLWCreateInfo::Item *v44; // eax@39
  void *v45; // eax@47
  void *v46; // eax@49
  void *v47; // eax@51
  PgSprData *v48; // eax@51
  SlideListWin *v49; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v50; // eax@51
  void *v51; // eax@51
  SlideBar *v52; // eax@51
  const int v53; // edx@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v54; // eax@51
  SlideBar *v55; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v56; // eax@51
  PgSprData *v57; // eax@51
  SlideBar *v58; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v59; // eax@51
  ColumnBut *v60; // eax@51
  void *v61; // edx@51
  int v62; // eax@51
  void *v63; // edx@51
  PgFont *v64; // eax@51
  PgWinText *v65; // eax@51
  NiRefObjectVtbl *v66; // edx@51
  char *v67; // eax@51
  ColumnBut *v68; // eax@51
  void *v69; // edx@51
  int v70; // eax@51
  void *v71; // edx@51
  PgFont *v72; // eax@51
  PgWinText *v73; // eax@51
  NiRefObjectVtbl *v74; // edx@51
  char *v75; // eax@51
  ColumnBut *v76; // eax@51
  void *v77; // edx@51
  int v78; // eax@51
  void *v79; // edx@51
  PgFont *v80; // eax@51
  PgWinText *v81; // eax@51
  NiRefObjectVtbl *v82; // edx@51
  char *v83; // eax@51
  int v84; // ecx@51
  void *v85; // eax@51
  PgFont *v86; // eax@51
  PgWinText *v87; // eax@51
  NiRefObjectVtbl *v88; // edx@51
  char *v89; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v90; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v91; // eax@51
  int v92; // ecx@51
  void *v93; // eax@51
  PgFont *v94; // eax@51
  PgWinText *v95; // eax@51
  char *v96; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v97; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v98; // eax@51
  int v99; // ecx@51
  void *v100; // eax@51
  PgFont *v101; // eax@51
  PgWinText *v102; // eax@51
  char *v103; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v104; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v105; // eax@51
  int v106; // ecx@51
  void *v107; // eax@51
  PgFont *v108; // eax@51
  PgWinText *v109; // eax@51
  char *v110; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v111; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v112; // eax@51
  int v113; // ecx@51
  void *v114; // eax@51
  PgFont *v115; // eax@51
  PgWinText *v116; // eax@51
  NiRefObjectVtbl *v117; // edx@51
  char *v118; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v119; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v120; // eax@51
  int v121; // ecx@51
  void *v122; // eax@51
  PgFont *v123; // eax@51
  PgWinText *v124; // eax@51
  NiRefObjectVtbl *v125; // edx@51
  char *v126; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v127; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v128; // eax@51
  int v129; // ecx@51
  void *v130; // eax@51
  PgFont *v131; // eax@51
  PgWinText *v132; // eax@51
  NiRefObjectVtbl *v133; // edx@51
  char *v134; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v135; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v136; // eax@51
  int v137; // ecx@51
  void *v138; // eax@51
  PgFont *v139; // eax@51
  PgWinText *v140; // eax@51
  NiRefObjectVtbl *v141; // edx@51
  char *v142; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v143; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v144; // eax@51
  PgFont *v145; // eax@54
  PgWinText *v146; // eax@54
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v147; // eax@54
  PgFont *v148; // eax@56
  PgWinText *v149; // eax@56
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v150; // eax@56
  char *v151; // eax@56
  int v152; // eax@56
  int v153; // edx@56
  PgFont *v154; // eax@56
  PgWinText *v155; // eax@56
  NiRefObjectVtbl *v156; // edx@56
  char *v157; // eax@56
  int v158; // ecx@56
  int v159; // eax@56
  PgFont *v160; // eax@56
  PgWinText *v161; // eax@56
  char *v162; // eax@56
  int v163; // ecx@56
  int v164; // eax@56
  PgFont *v165; // eax@56
  PgWinText *v166; // eax@56
  char *v167; // eax@56
  PgWinBut *v168; // eax@56
  void *v169; // ecx@56
  int v170; // ecx@56
  int v171; // edx@56
  int v172; // ecx@56
  PgWin *v173; // ST148_4@56
  PgFont *v174; // eax@56
  PgWinText *v175; // eax@56
  NiRefObjectVtbl *v176; // edx@56
  char *v177; // eax@56
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v178; // eax@56
  PgSprData *v179; // eax@56
  int v180; // edi@56
  char *v181; // eax@56
  char *v182; // eax@56
  char *v183; // eax@56
  char *v184; // eax@56
  char *v185; // eax@56
  char *v186; // eax@56
  PgSprData::PgHitTester *v187; // eax@56
  int v188; // edx@56
  PgFont *v189; // eax@56
  char *v190; // eax@56
  NiPointer<PgSprData::PgHitTester> *v191; // ecx@56
  int v192; // eax@56
  PgFont *v193; // eax@56
  PgWinText *v194; // eax@56
  NiRefObjectVtbl *v195; // edx@56
  char *v196; // eax@56
  NiPointer<PgSprData::PgHitTester> *v197; // ecx@56
  int v198; // eax@56
  PgFont *v199; // eax@56
  PgWinText *v200; // eax@56
  NiRefObjectVtbl *v201; // edx@56
  char *v202; // eax@56
  NiPointer<PgSprData::PgHitTester> *v203; // ecx@56
  int v204; // eax@56
  PgFont *v205; // eax@56
  PgWinText *v206; // eax@56
  NiRefObjectVtbl *v207; // edx@56
  char *v208; // eax@56
  NiPointer<PgSprData::PgHitTester> *v209; // ecx@56
  int v210; // eax@56
  PgFont *v211; // eax@56
  PgWinText *v212; // eax@56
  NiRefObjectVtbl *v213; // edx@56
  char *v214; // eax@56
  NiPointer<PgSprData::PgHitTester> *v215; // ecx@56
  int v216; // eax@56
  PgFont *v217; // eax@56
  PgWinText *v218; // eax@56
  NiRefObjectVtbl *v219; // edx@56
  char *v220; // eax@56
  NiSourceTexture *v221; // eax@56
  PopupMenuWin *v222; // eax@56
  char *v223; // eax@56
  PopupMenuText *v224; // eax@56
  char *v225; // eax@56
  PopupMenuText *v226; // eax@56
  char *v227; // eax@56
  PopupMenuText *v228; // eax@56
  char *v229; // eax@56
  PopupMenuText *v230; // eax@56
  char *v231; // eax@56
  PopupMenuText *v232; // eax@56
  char *v233; // eax@56
  PopupMenuText *v234; // eax@56
  char *v235; // eax@56
  PopupMenuText *v236; // eax@56
  char *v237; // eax@56
  PopupMenuText *v238; // eax@56
  char *v239; // eax@56
  PopupMenuText *v240; // eax@56
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v241; // eax@56
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> > > v242; // ecx@56
  int v243; // ecx@57
  ColumnBut *v244; // eax@60
  NiNode *v245; // ecx@60
  GuildEmblemIcon *v246; // eax@60
  NiNode *v247; // esi@61
  const char *v248; // [sp+140h] [bp-A8h]@12
  int *v249; // [sp+144h] [bp-A4h]@12
  int *v250; // [sp+148h] [bp-A0h]@12
  volatile LONG *v251; // [sp+14Ch] [bp-9Ch]@6
  NiSourceTexture *v252; // [sp+14Ch] [bp-9Ch]@12
  unsigned int v253; // [sp+150h] [bp-98h]@1
  char v254; // [sp+160h] [bp-88h]@54
  PgFrameWork *v255; // [sp+168h] [bp-80h]@1
  SLWCreateInfo kCreateInfo; // [sp+16Ch] [bp-7Ch]@19
  unsigned int uiWidth; // [sp+188h] [bp-60h]@14
  unsigned int uiHeight; // [sp+18Ch] [bp-5Ch]@14
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> result; // [sp+190h] [bp-58h]@19
  int iOffY; // [sp+198h] [bp-50h]@11
  std::pair<int const ,int> _Val; // [sp+19Ch] [bp-4Ch]@19
  int iter; // [sp+1A4h] [bp-44h]@17
  void *pCIItem; // [sp+1A8h] [bp-40h]@19
  int uiTop; // [sp+1ACh] [bp-3Ch]@4
  int uiLeft; // [sp+1B0h] [bp-38h]@4
  NiPointer<NiNode> spNode; // [sp+1B4h] [bp-34h]@1
  void *pkTextWin; // [sp+1B8h] [bp-30h]@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+1BCh] [bp-2Ch]@19
  unsigned int v269; // [sp+1D8h] [bp-10h]@1
  int v270; // [sp+1E4h] [bp-4h]@1
  int v271; // [sp+1E8h] [bp+0h]@1

  v269 = (unsigned int)&v271 ^ __security_cookie;
  v253 = (unsigned int)&v271 ^ __security_cookie;
  v2 = this;
  v255 = pkFrameWork;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v270 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildWin", 0) )
  {
    v6 = spNode.m_pObject;
    v270 = -1;
    if ( spNode.m_pObject )
    {
      v251 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_7;
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iOffY = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v252 = v10;
    v250 = &uiTop;
    v249 = &uiLeft;
    v248 = "Theme";
  }
  else
  {
    v252 = 0;
    v250 = &uiTop;
    v249 = &uiLeft;
    v248 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v248, v249, v250, v252);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v270 = -1;
    if ( spNode.m_pObject )
    {
      v251 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_7:
      if ( !InterlockedDecrement(v251) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v13 = Font::Get(MAIN_MENU);
  v14 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - v8,
          uiWidth,
          uiHeight,
          v13,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v14,
    1,
    v253);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v14,
    (unsigned int)&Color::m_kDxWinTitleColor);
  iter = (int)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v15 = TextData::Get(0xE3504941u);
  (*(void (__thiscall **)(PgWinText *, char *))iter)(v14, v15);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v14,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "ClsOver");
  v17 = v16;
  v18 = iOffY;
  PgWinBut::CreateWin(uiLeft - v9, uiTop - iOffY, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(
      uiLeft - v9,
      uiTop - v18,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0x20u,
      0,
      0);
  }
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text04", &uiLeft, &uiTop, 0);
  v19 = Font::Get(TITLEBOLD);
  v20 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - v18,
          uiWidth,
          uiHeight,
          v19,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v20,
    5u);
  iter = (int)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v21 = TextData::Get(0x9BEAF4F4u);
  (*(void (__thiscall **)(PgWinText *, char *))iter)(v20, v21);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Category", &uiLeft, &uiTop, 0);
  v22 = Font::Get(TITLEBOLD);
  v23 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          uiWidth,
          uiHeight,
          v22,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v23,
    5u);
  iter = (int)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v24 = TextData3::Get(0x2E4A1B0Bu);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(v23, v24);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v23,
    0);
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v26 = iOffY;
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  _Val.baseclass_0.first = (const int)PgWinSpr::CreateWin(
                                        uiLeft - v9,
                                        uiTop - v26,
                                        v27,
                                        &v2->baseclass_0.baseclass_0.baseclass_0,
                                        0,
                                        0);
  _Val.baseclass_0.second = 1;
  v28 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v28,
    0);
  v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, 0);
  _Val.baseclass_0.first = (const int)PgWinSpr::CreateWin(
                                        uiLeft - v9,
                                        uiTop - v26,
                                        v29,
                                        &v2->baseclass_0.baseclass_0.baseclass_0,
                                        0,
                                        0);
  _Val.baseclass_0.second = 2;
  v30 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v30,
    0);
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &uiLeft, &uiTop, 0);
  _Val.baseclass_0.first = (const int)PgWinSpr::CreateWin(
                                        uiLeft - v9,
                                        uiTop - v26,
                                        v31,
                                        &v2->baseclass_0.baseclass_0.baseclass_0,
                                        0,
                                        0);
  _Val.baseclass_0.second = 0;
  v32 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v32,
    0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v270) = 1;
  v33 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v33->nItemType = 1;
  pCIItem = v33;
  v33->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  LOBYTE(v270) = 2;
  pCIItem = (char *)pCIItem + 72;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v270) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v270) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
  LOBYTE(v270) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v34 = pCIItem;
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  *((_BYTE *)v34 + 88) = 1;
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
  LOBYTE(v270) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v35 = pCIItem;
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  *((_BYTE *)v35 + 88) = 1;
  *((_DWORD *)v35 + 23) = 6;
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
  LOBYTE(v270) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
  LOBYTE(v270) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v36 = pCIItem;
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  *((_BYTE *)v36 + 88) = 1;
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column05", 8u);
  LOBYTE(v270) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, 0);
  v38 = SlideListWin::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          v37,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pListWinGuild = v38;
  v38->m_uiRClickMsg = 24;
  v2->m_pListWinGuild->m_uiLClickMsg = 25;
  SlideListWin::UpdateViewList(v2->m_pListWinGuild);
  _Val.baseclass_0.first = (const int)v2->m_pListWinGuild;
  _Val.baseclass_0.second = 1;
  v39 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v39,
    0);
  SLWCreateInfo::Clear(&kCreateInfo);
  v40 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v40->nItemType = 1;
  v40->pNode = spNode.m_pObject;
  pCIItem = v40;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor01", 0xEu);
  LOBYTE(v270) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column06", 8u);
  LOBYTE(v270) = 11;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText02", &uiLeft, &uiTop, 0);
  v42 = SlideListWin::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          v41,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pListWinNotice = v42;
  v42->m_bCheckEnable = 0;
  SlideListWin::UpdateViewList(v2->m_pListWinNotice);
  _Val.baseclass_0.first = (const int)v2->m_pListWinNotice;
  _Val.baseclass_0.second = 0;
  v43 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v43,
    0);
  SLWCreateInfo::Clear(&kCreateInfo);
  v44 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v44->nItemType = 1;
  pCIItem = v44;
  v44->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Nor", 0xEu);
  LOBYTE(v270) = 12;
  pCIItem = (char *)pCIItem + 72;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Click", 0x10u);
  LOBYTE(v270) = 13;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Over", 0xFu);
  LOBYTE(v270) = 14;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnHis01", 0xBu);
  LOBYTE(v270) = 15;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v45 = pCIItem;
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  *((_BYTE *)v45 + 88) = 1;
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnHis02", 0xBu);
  LOBYTE(v270) = 16;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v46 = pCIItem;
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  *((_BYTE *)v46 + 88) = 1;
  pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pCIItem = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnHis03", 0xBu);
  LOBYTE(v270) = 17;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
    &thisa);
  LOBYTE(v270) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v47 = pCIItem;
  *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
  *((_BYTE *)v47 + 88) = 1;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText03", &uiLeft, &uiTop, 0);
  v49 = SlideListWin::CreateWin(uiLeft, uiTop, v48, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
  v2->m_pListWinHistory = v49;
  _Val.baseclass_0.first = (const int)v49;
  _Val.baseclass_0.second = 2;
  v50 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v50,
    0);
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  pkTextWin = v51;
  v52 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar02",
          "SlideBar_UpBtn02",
          "SlideBar_DnBtn02",
          (PgSprData *)v51,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarGuildList = v52;
  v52->m_uiClickMsg = 17;
  v2->m_pkSlideBarGuildList->m_eType = 1;
  v53 = (const int)v2->m_pkSlideBarGuildList;
  _Val.baseclass_0.second = 1;
  _Val.baseclass_0.first = v53;
  v54 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v54,
    0);
  v55 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar01",
          "SlideBar_UpBtn01",
          "SlideBar_DnBtn01",
          (PgSprData *)pkTextWin,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarGuildNotice = v55;
  v55->m_uiClickMsg = 18;
  v2->m_pkSlideBarGuildNotice->m_eType = 1;
  _Val.baseclass_0.first = (const int)v2->m_pkSlideBarGuildNotice;
  _Val.baseclass_0.second = 0;
  v56 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v56,
    0);
  v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  v58 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar03",
          "SlideBar_UpBtn03",
          "SlideBar_DnBtn03",
          v57,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarGuildHistory = v58;
  v58->m_uiClickMsg = 40;
  v2->m_pkSlideBarGuildHistory->m_eType = 1;
  _Val.baseclass_0.first = (const int)v2->m_pkSlideBarGuildHistory;
  _Val.baseclass_0.second = 2;
  v59 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v59,
    0);
  SlideBar::SetSplitCnt(v2->m_pkSlideBarGuildList, v2->m_pListWinGuild->m_nSlideSplitCnt);
  SlideBar::SetSplitCnt(v2->m_pkSlideBarGuildNotice, v2->m_pListWinNotice->m_nSlideSplitCnt);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab01_On");
  v60 = ColumnBut::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x22u,
          0);
  v61 = pkTextWin;
  v2->m_pkTab01 = v60;
  v62 = **((_DWORD **)v61 + 9);
  v63 = *(void **)(v62 + 20);
  iter = *(_DWORD *)(v62 + 24);
  pCIItem = v63;
  v64 = Font::Get(MAIN_MENU);
  v65 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY + 1,
          (unsigned int)pCIItem,
          iter,
          v64,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v66 = v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v65;
  ((void (__thiscall *)(PgWinText *))v66[122].__vecDelDtor)(v65);
  iter = *(_DWORD *)pkTextWin + 472;
  v67 = TextData3::Get(0x25581D98u);
  (*(void (__thiscall **)(void *, char *))iter)(pkTextWin, v67);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab02_On");
  v68 = ColumnBut::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x23u,
          0);
  v69 = pkTextWin;
  v2->m_pkTab02 = v68;
  v70 = **((_DWORD **)v69 + 9);
  v71 = *(void **)(v70 + 20);
  iter = *(_DWORD *)(v70 + 24);
  pCIItem = v71;
  v72 = Font::Get(MAIN_MENU);
  v73 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY + 1,
          (unsigned int)pCIItem,
          iter,
          v72,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v74 = v73->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v73;
  v74[122].__vecDelDtor((NiRefObject *)v73, 5u);
  iter = *(_DWORD *)pkTextWin + 472;
  v75 = TextData3::Get(0x2CA1668Bu);
  (*(void (__thiscall **)(void *, _DWORD))iter)(pkTextWin, v75);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab03_On");
  v76 = ColumnBut::CreateWin(
          uiLeft - v9,
          uiTop - iOffY,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x24u,
          0);
  v77 = pkTextWin;
  v2->m_pkTab03 = v76;
  v78 = **((_DWORD **)v77 + 9);
  v79 = *(void **)(v78 + 20);
  iter = *(_DWORD *)(v78 + 24);
  pCIItem = v79;
  v80 = Font::Get(MAIN_MENU);
  v81 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY + 1,
          (unsigned int)pCIItem,
          iter,
          v80,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v82 = v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v81;
  v82[122].__vecDelDtor((NiRefObject *)v81, 5u);
  iter = *(_DWORD *)pkTextWin + 472;
  v83 = TextData3::Get(0x8BA56B9Du);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(pkTextWin, v83);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  v2->m_pkTab01->m_bCheck = 1;
  v2->m_pkTab02->m_bCheck = 0;
  v2->m_pkTab03->m_bCheck = 0;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x13u,
              0,
              0);
  v84 = *((_DWORD *)pkTextWin + 9);
  v85 = *(void **)(*(_DWORD *)v84 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v84 + 24);
  pkTextWin = v85;
  v86 = Font::Get(MAIN_MENU);
  v87 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY + 1,
          (unsigned int)pkTextWin,
          iter,
          v86,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v88 = v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v87;
  v88[122].__vecDelDtor((NiRefObject *)v87, 5u);
  iter = *(_DWORD *)pkTextWin + 472;
  v89 = TextData::Get(0x4EA49695u);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(pkTextWin, v89);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 1;
  v90 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v90,
    0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 1;
  v91 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v91,
    0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x14u,
              0,
              0);
  v92 = *((_DWORD *)pkTextWin + 9);
  v93 = *(void **)(*(_DWORD *)v92 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v92 + 24);
  pkTextWin = v93;
  v94 = Font::Get(MAIN_MENU);
  v95 = PgWinText::CreateWin(
          uiLeft - v9,
          uiTop - iOffY + 1,
          (unsigned int)pkTextWin,
          iter,
          v94,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkTitle1 = v95;
  v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v95,
    5u);
  iter = (int)&v2->m_pkTitle1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v96 = TextData::Get(0x4A5F8BA3u);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(v2->m_pkTitle1, v96);
  ((void (__stdcall *)(_DWORD))v2->m_pkTitle1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  _Val.baseclass_0.first = (const int)v2->m_pkTitle1;
  _Val.baseclass_0.second = 1;
  v97 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v97,
    0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 1;
  v98 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v98,
    0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x15u,
              0,
              0);
  v99 = *((_DWORD *)pkTextWin + 9);
  v100 = *(void **)(*(_DWORD *)v99 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v99 + 24);
  pkTextWin = v100;
  v101 = Font::Get(MAIN_MENU);
  v102 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY + 1,
           (unsigned int)pkTextWin,
           iter,
           v101,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkTitle2 = v102;
  v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v102,
    5u);
  iter = (int)&v2->m_pkTitle2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v103 = TextData::Get(0x8BF7ED01u);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(v2->m_pkTitle2, v103);
  ((void (__stdcall *)(_DWORD))v2->m_pkTitle2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  _Val.baseclass_0.first = (const int)v2->m_pkTitle2;
  _Val.baseclass_0.second = 1;
  v104 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v104,
    0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 1;
  v105 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v105,
    0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x16u,
              0,
              0);
  v106 = *((_DWORD *)pkTextWin + 9);
  v107 = *(void **)(*(_DWORD *)v106 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v106 + 24);
  pkTextWin = v107;
  v108 = Font::Get(MAIN_MENU);
  v109 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY + 1,
           (unsigned int)pkTextWin,
           iter,
           v108,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v2->m_pkTitle3 = v109;
  v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v109,
    5u);
  iter = (int)&v2->m_pkTitle3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v110 = TextData::Get(0xB8E4BFECu);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(v2->m_pkTitle3, v110);
  ((void (__stdcall *)(_DWORD))v2->m_pkTitle3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  _Val.baseclass_0.first = (const int)v2->m_pkTitle3;
  _Val.baseclass_0.second = 1;
  v111 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v111,
    0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 1;
  v112 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v112,
    0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0x17u,
              0,
              0);
  v113 = *((_DWORD *)pkTextWin + 9);
  v114 = *(void **)(*(_DWORD *)v113 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v113 + 24);
  pkTextWin = v114;
  v115 = Font::Get(MAIN_MENU);
  v116 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY + 1,
           (unsigned int)pkTextWin,
           iter,
           v115,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v117 = v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v116;
  v117[122].__vecDelDtor((NiRefObject *)v116, 5u);
  iter = *(_DWORD *)pkTextWin + 472;
  v118 = TextData::Get(0x398A90A7u);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(pkTextWin, v118);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 1;
  v119 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v119,
    0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 1;
  v120 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v120,
    0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TitleHis01Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitleHis01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TItleHis01Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0);
  v121 = *((_DWORD *)pkTextWin + 9);
  v122 = *(void **)(*(_DWORD *)v121 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v121 + 24);
  pkTextWin = v122;
  v123 = Font::Get(MAIN_MENU);
  v124 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY + 1,
           (unsigned int)pkTextWin,
           iter,
           v123,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v125 = v124->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v124;
  v125[122].__vecDelDtor((NiRefObject *)v124, 5u);
  iter = *(_DWORD *)pkTextWin + 472;
  v126 = TextData3::Get(0x8D927778u);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(pkTextWin, v126);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 2;
  v127 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v127,
    0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 2;
  v128 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v128,
    0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TitleHis02Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitleHis02Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TItleHis02Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0);
  v129 = *((_DWORD *)pkTextWin + 9);
  v130 = *(void **)(*(_DWORD *)v129 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v129 + 24);
  pkTextWin = v130;
  v131 = Font::Get(MAIN_MENU);
  v132 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY + 1,
           (unsigned int)pkTextWin,
           iter,
           v131,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v133 = v132->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v132;
  v133[122].__vecDelDtor((NiRefObject *)v132, 5u);
  iter = *(_DWORD *)pkTextWin + 472;
  v134 = TextData3::Get(0xE7C0CC1Bu);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(pkTextWin, v134);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 2;
  v135 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v135,
    0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 2;
  v136 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v136,
    0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TitleHis03Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitleHis03Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TItleHis03Over");
  pCIItem = PgWinBut::CreateWin(
              uiLeft - v9,
              uiTop - iOffY,
              (PgSprData *)pkTextWin,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0);
  v137 = *((_DWORD *)pkTextWin + 9);
  v138 = *(void **)(*(_DWORD *)v137 + 20);
  iter = *(_DWORD *)(*(_DWORD *)v137 + 24);
  pkTextWin = v138;
  v139 = Font::Get(MAIN_MENU);
  v140 = PgWinText::CreateWin(
           uiLeft - v9,
           uiTop - iOffY + 1,
           (unsigned int)pkTextWin,
           iter,
           v139,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v141 = v140->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v140;
  v141[122].__vecDelDtor((NiRefObject *)v140, 5u);
  iter = *(_DWORD *)pkTextWin + 472;
  v142 = TextData3::Get(0x9B957B82u);
  (*(void (__thiscall **)(_DWORD, _DWORD))iter)(pkTextWin, v142);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 2;
  v143 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v143,
    0);
  _Val.baseclass_0.first = (const int)pCIItem;
  _Val.baseclass_0.second = 2;
  v144 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v144,
    0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_67;
  _Val.baseclass_0.second = (signed int)((double)uiHeight * 0.1428571492433548);
  *(_DWORD *)&result.baseclass_0.second = 0;
  pkTextWin = (void *)-iOffY;
  pCIItem = v2->m_pkGuildInfoTxt;
  iter = 7;
  do
  {
    v145 = Font::Get(MAIN_MENU);
    v146 = PgWinText::CreateWin(
             uiLeft - v9,
             (int)((char *)pkTextWin + uiTop),
             uiWidth,
             uiHeight,
             v145,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    *(_DWORD *)pCIItem = v146;
    v146->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v146,
      0);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)pCIItem + 472))(&unk_9B7952);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)pCIItem + 240))(0);
    *(_DWORD *)&result.baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)pCIItem;
    v147 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
             (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
             (std::pair<int const ,int> *)&result);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&v254,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v147,
      0);
    pCIItem = (char *)pCIItem + 4;
    pkTextWin = (char *)pkTextWin + _Val.baseclass_0.second;
    --iter;
  }
  while ( iter );
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v148 = Font::Get(MAIN_MENU);
    v149 = PgWinText::CreateWin(
             uiLeft - v9,
             uiTop - iOffY,
             uiWidth,
             uiHeight,
             v148,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkNextJoinTime = v149;
    ((void (__thiscall *)(PgWinText *, signed int, signed int))v149->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v149,
      5,
      5);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkNextJoinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B7953);
    ((void (__stdcall *)(_DWORD))v2->m_pkNextJoinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    *(_DWORD *)&result.baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v2->m_pkNextJoinTime;
    *(_DWORD *)&result.baseclass_0.second = 0;
    v150 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
             (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
             (std::pair<int const ,int> *)&result);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&v254,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v150,
      0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
    pCIItem = PgWinBut::CreateWin(
                uiLeft - v9,
                uiTop - iOffY,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xCu,
                0,
                0);
    *((_DWORD *)pCIItem + 68) = g_pkToolTipWin;
    v151 = TextData2::Get(0xF12C3535u);
    PgWin::SetToolTipWinText((PgWin *)pCIItem, v151);
    v152 = **((_DWORD **)pkTextWin + 9);
    v153 = *(_DWORD *)(v152 + 20);
    _Val.baseclass_0.second = *(_DWORD *)(v152 + 24);
    iter = v153;
    v154 = Font::Get(MAIN_MENU);
    v155 = PgWinText::CreateWin(
             uiLeft - v9,
             uiTop - iOffY + 1,
             iter,
             _Val.baseclass_0.second,
             v154,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v156 = v155->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v155;
    v156[122].__vecDelDtor((NiRefObject *)v155, 5u);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v157 = TextData::Get(0xC9253B46u);
    (*(void (__thiscall **)(void *, char *))_Val.baseclass_0.second)(pkTextWin, v157);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Over");
    PgWinBut::CreateWin(
      uiLeft - v9,
      uiTop - iOffY,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0x21u,
      0,
      0);
    v158 = *((_DWORD *)pkTextWin + 9);
    v159 = *(_DWORD *)(*(_DWORD *)v158 + 20);
    _Val.baseclass_0.second = *(_DWORD *)(*(_DWORD *)v158 + 24);
    iter = v159;
    v160 = Font::Get(MAIN_MENU);
    v161 = PgWinText::CreateWin(
             uiLeft - v9,
             uiTop - iOffY + 1,
             iter,
             _Val.baseclass_0.second,
             v160,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkInfoType = v161;
    v161->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v161,
      5u);
    _Val.baseclass_0.second = (int)&v2->m_pkInfoType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v162 = TextData::Get(0x2D8F829Fu);
    (*(void (__thiscall **)(PgWinText *, char *))_Val.baseclass_0.second)(v2->m_pkInfoType, v162);
    ((void (__stdcall *)(_DWORD))v2->m_pkInfoType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Over");
    PgWinBut::CreateWin(
      uiLeft - v9,
      uiTop - iOffY,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xEu,
      0,
      0);
    v163 = *((_DWORD *)pkTextWin + 9);
    v164 = *(_DWORD *)(*(_DWORD *)v163 + 20);
    _Val.baseclass_0.second = *(_DWORD *)(*(_DWORD *)v163 + 24);
    iter = v164;
    v165 = Font::Get(MAIN_MENU);
    v166 = PgWinText::CreateWin(
             uiLeft - v9,
             uiTop - iOffY + 1,
             iter,
             _Val.baseclass_0.second,
             v165,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkShowOnlineOnly = v166;
    v166->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v166,
      5u);
    _Val.baseclass_0.second = (int)&v2->m_pkShowOnlineOnly->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v167 = TextData::Get(0x848289E8u);
    (*(void (__thiscall **)(PgWinText *, char *))_Val.baseclass_0.second)(v2->m_pkShowOnlineOnly, v167);
    ((void (__stdcall *)(_DWORD))v2->m_pkShowOnlineOnly->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn05Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn05Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn05Over");
    v168 = PgWinBut::CreateWin(
             uiLeft - v9,
             uiTop - iOffY,
             (PgSprData *)pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x1Au,
             0,
             0);
    v169 = pkTextWin;
    v2->m_pkEditNoticeBtn = v168;
    v170 = **((_DWORD **)v169 + 9);
    v171 = *(_DWORD *)(v170 + 24);
    v172 = *(_DWORD *)(v170 + 20);
    v173 = (PgWin *)v168;
    _Val.baseclass_0.second = v171;
    iter = v172;
    v174 = Font::Get(MAIN_MENU);
    v175 = PgWinText::CreateWin(0, 0, iter, _Val.baseclass_0.second, v174, v173, 0, 0);
    v176 = v175->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v175;
    v176[122].__vecDelDtor((NiRefObject *)v175, 5u);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v177 = TextData::Get(0x92D1BCF5u);
    (*(void (__thiscall **)(void *, _DWORD))_Val.baseclass_0.second)(pkTextWin, v177);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkEditNoticeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    *(_DWORD *)&result.baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v2->m_pkEditNoticeBtn;
    *(_DWORD *)&result.baseclass_0.second = 0;
    v178 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
             (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
             (std::pair<int const ,int> *)&result);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&v254,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v178,
      0);
    v179 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Base", &uiLeft, &uiTop, 0);
    v180 = iOffY;
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v179, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FriendNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "FriendClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "FriendOver");
    pCIItem = PgWinBut::CreateWin(
                uiLeft - v9,
                uiTop - v180,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x1Bu,
                0,
                0);
    v181 = TextData::Get(0xDCF3EDF4u);
    PgWin::SetToolTipWinText((PgWin *)pCIItem, v181);
    *((_DWORD *)pCIItem + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MasterNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "MasterClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "MasterOver");
    pCIItem = PgWinBut::CreateWin(
                uiLeft - v9,
                uiTop - v180,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x1Eu,
                0,
                0);
    v182 = TextData::Get(0xF44C3A3Cu);
    PgWin::SetToolTipWinText((PgWin *)pCIItem, v182);
    *((_DWORD *)pCIItem + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildOver");
    pCIItem = PgWinBut::CreateWin(
                uiLeft - v9,
                uiTop - v180,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0xAu,
                0,
                0);
    v183 = TextData::Get(0x9BEAF4F4u);
    PgWin::SetToolTipWinText((PgWin *)pCIItem, v183);
    *((_DWORD *)pCIItem + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademyNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyOver");
    pCIItem = PgWinBut::CreateWin(
                uiLeft - v9,
                uiTop - v180,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x1Fu,
                0,
                0);
    v184 = TextData::Get(0x253B184Cu);
    PgWin::SetToolTipWinText((PgWin *)pCIItem, v184);
    *((_DWORD *)pCIItem + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WeddingNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingOver");
    pCIItem = PgWinBut::CreateWin(
                uiLeft - v9,
                uiTop - v180,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x1Du,
                0,
                0);
    v185 = TextData::Get(0xC8F53F44u);
    PgWin::SetToolTipWinText((PgWin *)pCIItem, v185);
    *((_DWORD *)pCIItem + 68) = g_pkToolTipWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatchNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchOver");
    pCIItem = PgWinBut::CreateWin(
                uiLeft - v9,
                uiTop - v180,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x1Cu,
                0,
                0);
    v186 = TextData::Get(0x1C4B503Eu);
    PgWin::SetToolTipWinText((PgWin *)pCIItem, v186);
    *((_DWORD *)pCIItem + 68) = g_pkToolTipWin;
    v187 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Friend", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v188 = v187->m_uiWidth;
    _Val.baseclass_0.second = v187->m_uiHeight;
    iter = v188;
    v189 = Font::Get(TITLEBOLD);
    pkTextWin = PgWinText::CreateWin(
                  uiLeft,
                  uiTop,
                  iter,
                  _Val.baseclass_0.second,
                  v189,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
    (*(void (__thiscall **)(void *, signed int))(*(_DWORD *)pkTextWin + 488))(pkTextWin, 1);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v190 = TextData::Get(0xDCF3EDF4u);
    (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v190);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v191 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HolyPromise", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v192 = v191->m_pObject->m_uiWidth;
    _Val.baseclass_0.second = v191->m_pObject->m_uiHeight;
    iter = v192;
    v193 = Font::Get(TITLEBOLD);
    v194 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             iter,
             _Val.baseclass_0.second,
             v193,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v195 = v194->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v194;
    v195[122].__vecDelDtor((NiRefObject *)v194, 1u);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v196 = TextData::Get(0xF44C3A3Cu);
    (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v196);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v197 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v198 = v197->m_pObject->m_uiWidth;
    _Val.baseclass_0.second = v197->m_pObject->m_uiHeight;
    iter = v198;
    v199 = Font::Get(TITLEBOLD);
    v200 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             iter,
             _Val.baseclass_0.second,
             v199,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v201 = v200->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v200;
    v201[122].__vecDelDtor((NiRefObject *)v200, 1u);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v202 = TextData::Get(0x9BEAF4F4u);
    (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v202);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v203 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademy", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v204 = v203->m_pObject->m_uiWidth;
    _Val.baseclass_0.second = v203->m_pObject->m_uiHeight;
    iter = v204;
    v205 = Font::Get(TITLEBOLD);
    v206 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             iter,
             _Val.baseclass_0.second,
             v205,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v207 = v206->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v206;
    v207[122].__vecDelDtor((NiRefObject *)v206, 1u);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v208 = TextData::Get(0x253B184Cu);
    (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v208);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v209 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Wedding", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v210 = v209->m_pObject->m_uiWidth;
    _Val.baseclass_0.second = v209->m_pObject->m_uiHeight;
    iter = v210;
    v211 = Font::Get(TITLEBOLD);
    v212 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             iter,
             _Val.baseclass_0.second,
             v211,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v213 = v212->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v212;
    v213[122].__vecDelDtor((NiRefObject *)v212, 1u);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v214 = TextData::Get(0xC8F53F44u);
    (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v214);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v215 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatch", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    v216 = v215->m_pObject->m_uiWidth;
    _Val.baseclass_0.second = v215->m_pObject->m_uiHeight;
    iter = v216;
    v217 = Font::Get(TITLEBOLD);
    v218 = PgWinText::CreateWin(
             uiLeft,
             uiTop,
             iter,
             _Val.baseclass_0.second,
             v217,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v219 = v218->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v218;
    v219[122].__vecDelDtor((NiRefObject *)v218, 1u);
    _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
    v220 = TextData::Get(0x1C4B503Eu);
    (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v220);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v221 = MenuTexMgr::GetTexture(1u);
    v222 = PopupMenuWin::CreateWin(v221, 4u, 4u, 0);
    v2->m_pkGuildMemberPopupMenu = v222;
    ((void (__stdcall *)(IDirectMessenger *))v222->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    TextData::Get(0x39988592u);
    TextData::Get(0xE152929u);
    v223 = fs("%s %s");
    v224 = PopupMenuText::CreateWin(v223, 0, 0, 0, 0, 0, 0);
    v224->baseclass_0.m_ePopupMenuID = 34;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupAppointMaster,
      (NiD3DDefaultShader *)v224);
    TextData::Get(0x39988592u);
    TextData::Get(0x6368886Bu);
    v225 = fs("%s %s");
    v226 = PopupMenuText::CreateWin(v225, 0, 0, 0, 0, 0, 0);
    v226->baseclass_0.m_ePopupMenuID = 35;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupAppointSubMaster,
      (NiD3DDefaultShader *)v226);
    TextData::Get(0x39988592u);
    TextData::Get(0x12251E24u);
    v227 = fs("%s %s");
    v228 = PopupMenuText::CreateWin(v227, 0, 0, 0, 0, 0, 0);
    v228->baseclass_0.m_ePopupMenuID = 37;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupAppointSenior,
      (NiD3DDefaultShader *)v228);
    TextData::Get(0x39988592u);
    TextData::Get(0x1D161C1Fu);
    v229 = fs("%s %s");
    v230 = PopupMenuText::CreateWin(v229, 0, 0, 0, 0, 0, 0);
    v230->baseclass_0.m_ePopupMenuID = 38;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupAppointKnight,
      (NiD3DDefaultShader *)v230);
    TextData::Get(0x39988592u);
    TextData::Get(0x63A9B4C9u);
    v231 = fs("%s %s");
    v232 = PopupMenuText::CreateWin(v231, 0, 0, 0, 0, 0, 0);
    v232->baseclass_0.m_ePopupMenuID = 39;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupFireAppointment,
      (NiD3DDefaultShader *)v232);
    v233 = TextData::Get(0x334270B1u);
    v234 = PopupMenuText::CreateWin(v233, 0, 0, 0, 0, 0, 0);
    v234->baseclass_0.m_ePopupMenuID = 40;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupVanish,
      (NiD3DDefaultShader *)v234);
    v235 = TextData::Get(0xBEEF0012u);
    v236 = PopupMenuText::CreateWin(v235, 0, 0, 0, 0, 0, 0);
    v236->baseclass_0.m_ePopupMenuID = 41;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupWhisperChat,
      (NiD3DDefaultShader *)v236);
    v237 = TextData::Get(0xA204DA15u);
    v238 = PopupMenuText::CreateWin(v237, 0, 0, 0, 0, 0, 0);
    v238->baseclass_0.m_ePopupMenuID = 1011;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupAppointAcademyMaster,
      (NiD3DDefaultShader *)v238);
    v239 = TextData::Get(0x9FA0B5BAu);
    v240 = PopupMenuText::CreateWin(v239, 0, 0, 0, 0, 0, 0);
    v240->baseclass_0.m_ePopupMenuID = 1012;
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupInitializeAcademyMaster,
      (NiD3DDefaultShader *)v240);
    v2->m_pkNoticeEditor = GuildNoticeEditorWin::CreateWin(0);
    ((void (__thiscall *)(GuildWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.40000001,
      0.5);
    v241 = v2->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v242 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> > >)v241->_Left;
    iter = (int)v242;
    if ( (std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *)v242 != v241 )
    {
      do
      {
        v243 = *(_DWORD *)(*(_DWORD *)&v242 + 12);
        if ( v243 )
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v243 + 256))(0);
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&iter);
        v242 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> > >)iter;
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *)iter != v2->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildEmblemDis", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildEmblemActive");
    v244 = ColumnBut::CreateWin(
             uiLeft - v9,
             uiTop - v180,
             (PgSprData *)pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x29u,
             0);
    v245 = spNode.m_pObject;
    v2->m_pkEmblemCheckBox = v244;
    PgSprData::Create(&v245->baseclass_0, "GuildEmblem", &uiLeft, &uiTop, 0);
    v246 = GuildEmblemIcon::CreateWin(
             uiLeft - v9,
             uiTop - v180,
             0,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             v255,
             0x40u,
             0x40u);
    v2->m_pkEmblemIcon = v246;
    ((void (__thiscall *)(GuildEmblemIcon *))v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v246);
    ((void (__stdcall *)(_DWORD))v2->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v2->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.m_eType = 1;
    ((void (__stdcall *)(signed int))v2->m_pkEmblemIcon->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(41);
    v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    ((void (__stdcall *)(_DWORD))v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v2->m_pkEmblemCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v2->m_pkEmblemCheckBox,
      0);
    LOBYTE(v270) = 0;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    v270 = -1;
    if ( spNode.m_pObject )
    {
      v247 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v247 )
          v247->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v247, 1u);
      }
    }
    v7 = 1;
  }
  else
  {
LABEL_67:
    LOBYTE(v270) = 0;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    v270 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    v7 = 0;
  }
  return v7;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005D1520) --------------------------------------------------------
ATL::ATLSTRINGRESOURCEIMAGE *__cdecl ATL::_AtlGetStringResourceImage(HINSTANCE__ *hInstance, HRSRC__ *hResource, unsigned int id)
{
  ATL::ATLSTRINGRESOURCEIMAGE *result; // eax@1
  LPVOID v4; // esi@2
  unsigned int v5; // eax@3
  unsigned int v6; // ecx@3

  result = (ATL::ATLSTRINGRESOURCEIMAGE *)LoadResource(hInstance, hResource);
  if ( result )
  {
    v4 = LockResource(result);
    if ( !v4 )
      return 0;
    v5 = (unsigned int)((char *)v4 + SizeofResource(hInstance, hResource));
    v6 = id & 0xF;
    if ( id & 0xF )
    {
      while ( (unsigned int)v4 < v5 )
      {
        --v6;
        v4 = (char *)v4 + 2 * *(_WORD *)v4 + 2;
        if ( !v6 )
          goto LABEL_6;
      }
      return 0;
    }
LABEL_6:
    if ( (unsigned int)v4 >= v5 )
      return 0;
    result = (ATL::ATLSTRINGRESOURCEIMAGE *)(*(_WORD *)v4 != 0 ? (int)v4 : 0);
  }
  return result;
}

//----- (005D1590) --------------------------------------------------------
HINSTANCE__ *__cdecl ATL::AtlFindStringResourceInstance(unsigned int nID, unsigned __int16 wLanguage)
{
  ATL::ATLSTRINGRESOURCEIMAGE *v2; // edi@1
  HINSTANCE__ *v3; // esi@1
  HRSRC__ *v4; // eax@3
  HINSTANCE__ *v5; // eax@5
  signed int i; // [sp+Ch] [bp-4h]@1

  v2 = 0;
  v3 = ATL::CAtlBaseModule::GetHInstanceAt(&ATL::_AtlBaseModule, 0);
  i = 1;
  if ( v3 )
  {
    while ( !v2 )
    {
      v4 = FindResourceExW(v3, (LPCWSTR)6, (LPCWSTR)(unsigned __int16)((nID >> 4) + 1), wLanguage);
      if ( v4 )
      {
        v2 = ATL::_AtlGetStringResourceImage(v3, v4, nID);
        if ( v2 )
          return v3;
      }
      v5 = ATL::CAtlBaseModule::GetHInstanceAt(&ATL::_AtlBaseModule, i++);
      v3 = v5;
      if ( !v5 )
        return 0;
    }
  }
  return 0;
}

//----- (005D1610) --------------------------------------------------------
void __cdecl ATL::CSimpleStringT<char_0>::ThrowMemoryException()
{
  ATL::AtlThrowImpl(-2147024882);
}

//----- (005D1620) --------------------------------------------------------
void __thiscall ATL::CSimpleStringT<char_0>::Fork(ATL::CSimpleStringT<char,0> *this, int nLength)
{
  int v2; // ebx@1
  char *v3; // esi@1
  int v4; // eax@1
  int v5; // edi@1
  int v6; // eax@3
  ATL::CSimpleStringT<char,0> *v7; // [sp+Ch] [bp-4h]@1

  v2 = *((_DWORD *)this->m_pszData - 3);
  v3 = this->m_pszData - 16;
  v7 = this;
  v4 = (*(int (**)(void))(**(_DWORD **)v3 + 16))();
  v5 = (**(int (__thiscall ***)(_DWORD, _DWORD, _DWORD))v4)(v4, nLength, 1);
  if ( !v5 )
    ATL::CSimpleStringT<char_0>::ThrowMemoryException();
  v6 = nLength;
  if ( v2 < nLength )
    v6 = v2;
  memcpy_s((void *)(v5 + 16), v6 + 1, v3 + 16, v6 + 1);
  *(_DWORD *)(v5 + 4) = v2;
  if ( _InterlockedDecrement((signed __int32 *)v3 + 3) <= 0 )
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 4))(v3);
  v7->m_pszData = (char *)(v5 + 16);
}

//----- (005D16A0) --------------------------------------------------------
void __thiscall ATL::CSimpleStringT<char_0>::Reallocate(ATL::CSimpleStringT<char,0> *this, int nLength)
{
  ATL::CSimpleStringT<char,0> *v2; // esi@1
  char *v3; // eax@1
  int v4; // ecx@1
  int v5; // eax@1
  int v6; // eax@3

  v2 = this;
  v3 = this->m_pszData;
  v4 = *((_DWORD *)this->m_pszData - 4);
  v5 = (int)(v3 - 16);
  if ( *(_DWORD *)(v5 + 8) >= nLength
    || nLength <= 0
    || (v6 = (*(int (__stdcall **)(int, int, signed int))(*(_DWORD *)v4 + 8))(v5, nLength, 1)) == 0 )
    ATL::CSimpleStringT<char_0>::ThrowMemoryException();
  v2->m_pszData = (char *)(v6 + 16);
}

//----- (005D16E0) --------------------------------------------------------
void __thiscall ATL::CSimpleStringT<char_0>::Empty(ATL::CSimpleStringT<char,0> *this)
{
  ATL::CSimpleStringT<char,0> *v1; // esi@1
  char *v2; // ecx@1
  int v3; // eax@1
  int v4; // edi@1

  v1 = this;
  v2 = this->m_pszData;
  v3 = (int)(v2 - 16);
  v4 = *((_DWORD *)v2 - 4);
  if ( *((_DWORD *)v2 - 3) )
  {
    if ( *(_DWORD *)(v3 + 12) >= 0 )
    {
      if ( _InterlockedDecrement((signed __int32 *)(v3 + 12)) <= 0 )
        (*(void (__stdcall **)(int))(**(_DWORD **)v3 + 4))(v3);
      v1->m_pszData = (char *)((*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) + 16);
    }
    else
    {
      if ( *((_DWORD *)v2 - 2) < 0 )
        ATL::AtlThrowImpl(-2147024809);
      *((_DWORD *)v2 - 3) = 0;
      *v1->m_pszData = 0;
    }
  }
}

//----- (005D1740) --------------------------------------------------------
void __thiscall ATL::CSimpleStringT<char_0>::PrepareWrite2(ATL::CSimpleStringT<char,0> *this, int nLength)
{
  char *v2; // eax@1
  int v3; // edi@1
  signed int v4; // eax@5
  int v5; // esi@7

  v2 = this->m_pszData;
  v3 = nLength;
  if ( *((_DWORD *)this->m_pszData - 3) > nLength )
    v3 = *((_DWORD *)this->m_pszData - 3);
  if ( *((_DWORD *)v2 - 1) <= 1 )
  {
    v4 = *((_DWORD *)v2 - 2);
    if ( v4 < v3 )
    {
      if ( v4 <= 1073741824 )
        v5 = v4 / 2 + v4;
      else
        v5 = v4 + 1048576;
      if ( v5 < v3 )
        v5 = v3;
      ATL::CSimpleStringT<char_0>::Reallocate(this, v5);
    }
  }
  else
  {
    ATL::CSimpleStringT<char_0>::Fork(this, v3);
  }
}

//----- (005D17A0) --------------------------------------------------------
char *__cdecl Guild::GetMemberGradeString(char grade)
{
  char *result; // eax@2

  switch ( grade )
  {
    case 0:
      result = TextData::Get(0xE152929u);
      break;
    case 1:
      result = TextData::Get(0x6368886Bu);
      break;
    case 2:
      result = TextData::Get(0xD08FF05u);
      break;
    case 3:
      result = TextData::Get(0x12251E24u);
      break;
    case 4:
      result = TextData::Get(0x1D161C1Fu);
      break;
    case 6:
      result = TextData::Get(0x63A9B4C9u);
      break;
    default:
      result = "default";
      break;
  }
  return result;
}

//----- (005D1830) --------------------------------------------------------
void __thiscall ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::_CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>(ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *this)
{
  char *v1; // eax@1

  v1 = this->baseclass_0.m_pszData - 16;
  if ( _InterlockedDecrement((signed __int32 *)v1 + 3) <= 0 )
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 4))(v1);
}

//----- (005D1850) --------------------------------------------------------
void __thiscall ATL::CSimpleStringT<char_0>::SetString(ATL::CSimpleStringT<char,0> *this, const char *pszSrc, int nLength)
{
  int v3; // esi@1
  ATL::CSimpleStringT<char,0> *v4; // ebx@1
  const void *v5; // ecx@3
  const char *v6; // edi@5
  ATL::CSimpleStringT<char,0> v7; // eax@9
  unsigned int nOldLength; // [sp+14h] [bp+Ch]@5

  v3 = nLength;
  v4 = this;
  if ( nLength )
  {
    v5 = pszSrc;
    if ( !pszSrc )
      goto LABEL_16;
    v6 = (const char *)(pszSrc - v4->m_pszData);
    nOldLength = *((_DWORD *)v4->m_pszData - 3);
    if ( v3 < 0 )
      ATL::AtlThrowImpl(-2147024809);
    if ( ((*((_DWORD *)v4->m_pszData - 2) - v3) | (1 - *((_DWORD *)v4->m_pszData - 1))) < 0 )
    {
      ATL::CSimpleStringT<char_0>::PrepareWrite2(v4, v3);
      v5 = pszSrc;
    }
    v7.m_pszData = v4->m_pszData;
    if ( (unsigned int)v6 > nOldLength )
      memcpy_s(v7.m_pszData, *((_DWORD *)v7.m_pszData - 2), v5, v3);
    else
      memmove_s(v7.m_pszData, *((_DWORD *)v7.m_pszData - 2), &v7.m_pszData[(unsigned int)v6], v3);
    if ( v3 > *((_DWORD *)v4->m_pszData - 2) )
LABEL_16:
      ATL::AtlThrowImpl(-2147024809);
    *((_DWORD *)v4->m_pszData - 3) = v3;
    v4->m_pszData[v3] = 0;
  }
  else
  {
    ATL::CSimpleStringT<char_0>::Empty(this);
  }
}

//----- (005D18F0) --------------------------------------------------------
int __thiscall ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::LoadStringA(ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *this, HINSTANCE__ *hInstance, unsigned int nID)
{
  ATL::CSimpleStringT<char,0> *v3; // ebx@1
  HRSRC__ *v4; // eax@1
  ATL::ATLSTRINGRESOURCEIMAGE *v5; // eax@2
  ATL::ATLSTRINGRESOURCEIMAGE *v6; // edi@2
  int result; // eax@3
  int v8; // eax@4
  int v9; // esi@4

  v3 = (ATL::CSimpleStringT<char,0> *)this;
  v4 = FindResourceW(hInstance, (LPCWSTR)(unsigned __int16)((nID >> 4) + 1), (LPCWSTR)6);
  if ( v4 && (v5 = ATL::_AtlGetStringResourceImage(hInstance, v4, nID), (v6 = v5) != 0) )
  {
    v8 = WideCharToMultiByte(3u, 0, &v5[1].nLength, v5->nLength, 0, 0, 0, 0);
    v9 = v8;
    if ( v8 < 0 )
      goto LABEL_12;
    if ( ((*((_DWORD *)v3->m_pszData - 2) - v8) | (1 - *((_DWORD *)v3->m_pszData - 1))) < 0 )
      ATL::CSimpleStringT<char_0>::PrepareWrite2(v3, v8);
    WideCharToMultiByte(3u, 0, &v6[1].nLength, v6->nLength, v3->m_pszData, v9, 0, 0);
    if ( v9 > *((_DWORD *)v3->m_pszData - 2) )
LABEL_12:
      ATL::AtlThrowImpl(-2147024809);
    *((_DWORD *)v3->m_pszData - 3) = v9;
    v3->m_pszData[v9] = 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005D19B0) --------------------------------------------------------
void *__thiscall GuildMemberVanishTask::_vector_deleting_destructor_(GuildMemberVanishTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildMemberVanishTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildMemberVanishTask>::_vftable_;
  ISingletonTask<GuildMemberVanishTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B813C: using guessed type int (__stdcall *ISingletonTask_GuildMemberVanishTask____vftable_)(int uiFlags);
// 9B8158: using guessed type int (__thiscall *ISingletonTask_GuildMemberVanishTask____vftable_)(void *p, char);
// A99E5C: using guessed type int ISingletonTask_GuildMemberVanishTask___ms_pkSingletonTask;

//----- (005D19F0) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildMemberGradeSetupTask>::_vector_deleting_destructor_(GuildMemberGradeSetupTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildMemberGradeSetupTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildMemberGradeSetupTask>::_vftable_;
  ISingletonTask<GuildMemberGradeSetupTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B8170: using guessed type int (__stdcall *ISingletonTask_GuildMemberGradeSetupTask____vftable_)(int uiFlags);
// 9B818C: using guessed type int (__thiscall *ISingletonTask_GuildMemberGradeSetupTask____vftable_)(void *p, char);
// A99E60: using guessed type int ISingletonTask_GuildMemberGradeSetupTask___ms_pkSingletonTask;

//----- (005D1A30) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const unsigned int v10; // edi@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                          (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (005D1B10) --------------------------------------------------------
GuildMemberVanishTask *__cdecl ISingletonTask<GuildMemberVanishTask>::Run()
{
  GuildMemberVanishTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildMemberVanishTask *)ISingletonTask<GuildMemberVanishTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildMemberVanishTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildMemberVanishTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildMemberVanishTask::_vftable_;
      *(_DWORD *)(v2 + 84) = 0;
      *(_DWORD *)(v2 + 80) = 0;
      *(_DWORD *)(v2 + 76) = 0;
      *(_DWORD *)(v2 + 72) = 0;
      *(_DWORD *)(v2 + 68) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildMemberVanishTask *)v2;
    ISingletonTask<GuildMemberVanishTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9B820C: using guessed type int (__stdcall *GuildMemberVanishTask___vftable_)(int uiFlags);
// 9B8228: using guessed type int (__thiscall *GuildMemberVanishTask___vftable_)(void *p, char);
// A99E5C: using guessed type int ISingletonTask_GuildMemberVanishTask___ms_pkSingletonTask;

//----- (005D1BA0) --------------------------------------------------------
GuildMemberGradeSetupTask *__cdecl ISingletonTask<GuildMemberGradeSetupTask>::Run()
{
  GuildMemberGradeSetupTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildMemberGradeSetupTask *)ISingletonTask<GuildMemberGradeSetupTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildMemberGradeSetupTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x60u);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildMemberGradeSetupTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildMemberGradeSetupTask::_vftable_;
      *(_DWORD *)(v2 + 84) = 0;
      *(_DWORD *)(v2 + 80) = 0;
      *(_DWORD *)(v2 + 76) = 0;
      *(_DWORD *)(v2 + 72) = 0;
      *(_DWORD *)(v2 + 68) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildMemberGradeSetupTask *)v2;
    ISingletonTask<GuildMemberGradeSetupTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9B8240: using guessed type int (__stdcall *GuildMemberGradeSetupTask___vftable_)(int uiFlags);
// 9B825C: using guessed type int (__thiscall *GuildMemberGradeSetupTask___vftable_)(void *p, char);
// A99E60: using guessed type int ISingletonTask_GuildMemberGradeSetupTask___ms_pkSingletonTask;

//----- (005D1C30) --------------------------------------------------------
GuildAcademyMasterAppointTask *__cdecl ISingletonTask<GuildAcademyMasterAppointTask>::Run()
{
  GuildAcademyMasterAppointTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildAcademyMasterAppointTask *)ISingletonTask<GuildAcademyMasterAppointTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildAcademyMasterAppointTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildAcademyMasterAppointTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildAcademyMasterAppointTask::_vftable_;
      *(_DWORD *)(v2 + 84) = 0;
      *(_DWORD *)(v2 + 80) = 0;
      *(_DWORD *)(v2 + 76) = 0;
      *(_DWORD *)(v2 + 72) = 0;
      *(_DWORD *)(v2 + 68) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildAcademyMasterAppointTask *)v2;
    ISingletonTask<GuildAcademyMasterAppointTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9B8274: using guessed type int (__stdcall *GuildAcademyMasterAppointTask___vftable_)(int uiFlags);
// 9B8290: using guessed type int (__thiscall *GuildAcademyMasterAppointTask___vftable_)(void *p, char);
// A99E64: using guessed type int ISingletonTask_GuildAcademyMasterAppointTask___ms_pkSingletonTask;

//----- (005D1CC0) --------------------------------------------------------
GuildAcademyMasterInitializeTask *__cdecl ISingletonTask<GuildAcademyMasterInitializeTask>::Run()
{
  GuildAcademyMasterInitializeTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildAcademyMasterInitializeTask *)ISingletonTask<GuildAcademyMasterInitializeTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildAcademyMasterInitializeTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildAcademyMasterInitializeTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildAcademyMasterInitializeTask::_vftable_;
      *(_DWORD *)(v2 + 84) = 0;
      *(_DWORD *)(v2 + 80) = 0;
      *(_DWORD *)(v2 + 76) = 0;
      *(_DWORD *)(v2 + 72) = 0;
      *(_DWORD *)(v2 + 68) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildAcademyMasterInitializeTask *)v2;
    ISingletonTask<GuildAcademyMasterInitializeTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9B82A8: using guessed type int (__stdcall *GuildAcademyMasterInitializeTask___vftable_)(int uiFlags);
// 9B82C4: using guessed type int (__thiscall *GuildAcademyMasterInitializeTask___vftable_)(void *p, char);
// A99E68: using guessed type int ISingletonTask_GuildAcademyMasterInitializeTask___ms_pkSingletonTask;

//----- (005D1D50) --------------------------------------------------------
void __thiscall ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>(ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *this, const char *pszSrc)
{
  ATL::CSimpleStringT<char,0> *v2; // esi@1
  HINSTANCE__ *v3; // eax@3
  int v4; // eax@5

  v2 = (ATL::CSimpleStringT<char,0> *)this;
  this->baseclass_0.m_pszData = (char *)(((int (__thiscall *)(_DWORD))ATL::g_strmgr[3])(&ATL::g_strmgr) + 16);
  if ( !pszSrc )
  {
    v4 = 0;
LABEL_7:
    ATL::CSimpleStringT<char_0>::SetString(v2, pszSrc, v4);
    return;
  }
  if ( (unsigned int)pszSrc & 0xFFFF0000 )
  {
    v4 = strlen(pszSrc);
    goto LABEL_7;
  }
  v3 = ATL::AtlFindStringResourceInstance((unsigned __int16)pszSrc, 0);
  if ( v3 )
    ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::LoadStringA(
      (ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *)v2,
      v3,
      (unsigned __int16)pszSrc);
}
// A90170: using guessed type int (__stdcall **ATL__g_strmgr)(int nTotalSize, int nCharSize);

//----- (005D1E00) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildAcademyMasterAppointTask>::_scalar_deleting_destructor_(GuildAcademyMasterAppointTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildAcademyMasterAppointTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildAcademyMasterAppointTask>::_vftable_;
  ISingletonTask<GuildAcademyMasterAppointTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B81A4: using guessed type int (__stdcall *ISingletonTask_GuildAcademyMasterAppointTask____vftable_)(int uiFlags);
// 9B81C0: using guessed type int (__thiscall *ISingletonTask_GuildAcademyMasterAppointTask____vftable_)(void *p, char);
// A99E64: using guessed type int ISingletonTask_GuildAcademyMasterAppointTask___ms_pkSingletonTask;

//----- (005D1E40) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildAcademyMasterInitializeTask>::_scalar_deleting_destructor_(GuildAcademyMasterInitializeTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildAcademyMasterInitializeTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildAcademyMasterInitializeTask>::_vftable_;
  ISingletonTask<GuildAcademyMasterInitializeTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B81D8: using guessed type int (__stdcall *ISingletonTask_GuildAcademyMasterInitializeTask____vftable_)(int uiFlags);
// 9B81F4: using guessed type int (__thiscall *ISingletonTask_GuildAcademyMasterInitializeTask____vftable_)(void *p, char);
// A99E68: using guessed type int ISingletonTask_GuildAcademyMasterInitializeTask___ms_pkSingletonTask;

//----- (005D1E80) --------------------------------------------------------
ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *__thiscall ATL::CTime::Format(ATL::CTime *this, ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > > *result, const char *pFormat)
{
  const char *v4; // [sp-4h] [bp-B8h]@2
  tm ptmTemp; // [sp+Ch] [bp-A8h]@3
  char szBuffer[128]; // [sp+30h] [bp-84h]@5
  unsigned int v7; // [sp+B0h] [bp-4h]@1
  int v8; // [sp+B4h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  if ( pFormat )
  {
    if ( _localtime64_s(&ptmTemp, &this->m_time) )
      ATL::AtlThrowImpl(-2147024809);
    if ( !strftime(szBuffer, 0x80u, pFormat, &ptmTemp) )
      szBuffer[0] = 0;
    v4 = szBuffer;
  }
  else
  {
    v4 = 0;
  }
  ATL::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>::CStringT<char_ATL::StrTraitATL<char_ATL::ChTraitsCRT<char>>>(
    result,
    v4);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (005D1F20) --------------------------------------------------------
void *__thiscall GuildWin::_scalar_deleting_destructor_(GuildWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildWin::_GuildWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005D1F50) --------------------------------------------------------
void __thiscall GTIFlagWin::GTIFlagWin(GTIFlagWin *this)
{
  GTIFlagWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTIFlagWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTIFlagWin::_vftable_;
}
// 9B8554: using guessed type int (__stdcall *GTIFlagWin___vftable_)(int uiFlags);
// 9B8574: using guessed type int (__thiscall *GTIFlagWin___vftable_)(void *p, char);

//----- (005D1F70) --------------------------------------------------------
void __thiscall GTIFlagWin::_GTIFlagWin(GTIFlagWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTIFlagWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTIFlagWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B8554: using guessed type int (__stdcall *GTIFlagWin___vftable_)(int uiFlags);
// 9B8574: using guessed type int (__thiscall *GTIFlagWin___vftable_)(void *p, char);

//----- (005D1FB0) --------------------------------------------------------
bool __thiscall GTIFlagWin::Create(GTIFlagWin *this, PgFrameWork *pkFrameWork, unsigned int uiFlagType)
{
  PgWinFrame *v3; // edi@1
  NiSourceTexture *v4; // esi@4
  NiNode *v5; // esi@5
  bool v6; // zf@7
  NiTexturePalette *v8; // ebx@11
  char *v9; // eax@13
  PgSprData *v10; // eax@14
  NiNode *v11; // esi@21
  unsigned int v12; // [sp+4h] [bp-2Ch]@2
  int uiLeft; // [sp+18h] [bp-18h]@14
  int uiTop; // [sp+1Ch] [bp-14h]@14
  NiPointer<NiNode> spNode; // [sp+20h] [bp-10h]@1
  int v16; // [sp+2Ch] [bp-4h]@1

  v3 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v16 = 0;
  if ( uiFlagType )
    v12 = 23;
  else
    v12 = 22;
  v4 = MenuTexMgr::GetTexture(v12);
  if ( !v4 )
  {
    v5 = spNode.m_pObject;
    v16 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v6 = spNode.m_pObject == 0;
LABEL_8:
    if ( !v6 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    return 0;
  }
  v8 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v9 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildTFlag.nif");
  PgUtil::LoadNodeNifFile(v9, &spNode, v8);
  if ( !spNode.m_pObject )
    return 0;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, v4);
  if ( !PgWinFrame::Create(v3, 0, 0, v10, 0, pkFrameWork, "GTIFlagWin", 0) )
  {
    v5 = spNode.m_pObject;
    v16 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v6 = v5 == 0;
    goto LABEL_8;
  }
  if ( uiFlagType )
    ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v3,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.69999999,
      0.15000001);
  else
    ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v3,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.69999999,
      0.25);
  v11 = spNode.m_pObject;
  v16 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005D2180) --------------------------------------------------------
GTIFlagWin *__cdecl GTIFlagWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int uiFlagType)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@8
  GTIFlagWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x158u);
  v3 = v2;
  result.m_pObject = (PgWin *)v2;
  v7 = 0;
  if ( v2 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v2);
    *(_DWORD *)v3 = &GTIFlagWin::_vftable_;
    *((_DWORD *)v3 + 58) = &GTIFlagWin::_vftable_;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *, unsigned int))(*(_DWORD *)v3 + 540))(
                          v3,
                          pkFrameWork,
                          uiFlagType) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = (GTIFlagWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}
// 9B8554: using guessed type int (__stdcall *GTIFlagWin___vftable_)(int uiFlags);
// 9B8574: using guessed type int (__thiscall *GTIFlagWin___vftable_)(void *p, char);

//----- (005D22C0) --------------------------------------------------------
void *__thiscall GTIFlagWin::_vector_deleting_destructor_(GTIFlagWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTIFlagWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTIFlagWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B8554: using guessed type int (__stdcall *GTIFlagWin___vftable_)(int uiFlags);
// 9B8574: using guessed type int (__thiscall *GTIFlagWin___vftable_)(void *p, char);

//----- (005D2300) --------------------------------------------------------
void __thiscall GTInformWin::AddText(GTInformWin *this, char *pcText, D3DXCOLOR TextColor, bool bSingleLine, float fLifeTime)
{
  GTInformWin *v5; // ebx@1
  char *v6; // esi@3
  signed int v7; // edi@4
  signed int v8; // edi@7

  v5 = this;
  if ( 0.0 == fLifeTime )
    fLifeTime = 3.0;
  v6 = (char *)this->m_aspTextGeom;
  if ( bSingleLine )
  {
    v8 = 5;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 148))(&unk_9B8794);
      PgFadeTextGeometry::SetLifeTime(*(PgFadeTextGeometry **)v6, -1.0);
      v6 += 4;
      --v8;
    }
    while ( v8 );
  }
  else
  {
    v7 = 4;
    do
    {
      PgFadeTextGeometry::CopyFrom(*(PgFadeTextGeometry **)v6, *((PgFadeTextGeometry **)v6 + 1));
      v6 += 4;
      --v7;
    }
    while ( v7 );
  }
  ((void (__stdcall *)(_DWORD))v5->m_aspTextGeom[4].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(&TextColor);
  ((void (__stdcall *)(_DWORD))v5->m_aspTextGeom[4].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pcText);
  PgFadeTextGeometry::SetLifeTime(v5->m_aspTextGeom[4].m_pObject, fLifeTime);
}

//----- (005D23C0) --------------------------------------------------------
void __thiscall GTInformWin::AddText(GTInformWin *this, unsigned int uiMaxViewLine, char *pcText, D3DXCOLOR TextColor, float fLifeTime)
{
  GTInformWin *v5; // edi@1
  unsigned int v6; // ebx@3
  char *v7; // esi@4

  v5 = this;
  if ( 0.0 == fLifeTime )
    fLifeTime = 3.0;
  v6 = uiMaxViewLine - 1;
  if ( uiMaxViewLine != 1 )
  {
    v7 = (char *)this->m_aspTextGeom;
    do
    {
      PgFadeTextGeometry::CopyFrom(*(PgFadeTextGeometry **)v7, *((PgFadeTextGeometry **)v7 + 1));
      v7 += 4;
      --v6;
    }
    while ( v6 );
  }
  (*(void (__stdcall **)(_DWORD))(**((_DWORD **)&v5->baseclass_0.m_fInitYPos + uiMaxViewLine) + 176))(&TextColor);
  (*(void (__stdcall **)(_DWORD))(**((_DWORD **)&v5->baseclass_0.m_fInitYPos + uiMaxViewLine) + 148))(pcText);
  PgFadeTextGeometry::SetLifeTime(*((PgFadeTextGeometry **)&v5->baseclass_0.m_fInitYPos + uiMaxViewLine), fLifeTime);
}

//----- (005D2450) --------------------------------------------------------
void __thiscall GTInformWin::Clear(GTInformWin *this)
{
  PgFadeTextGeometry **v1; // esi@1
  signed int v2; // edi@1

  v1 = (PgFadeTextGeometry **)this->m_aspTextGeom;
  v2 = 5;
  do
  {
    ((void (__stdcall *)(_DWORD))(*v1)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(&unk_9B8795);
    PgFadeTextGeometry::SetLifeTime(*v1, -1.0);
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (005D2490) --------------------------------------------------------
void __thiscall GTInformWin::_GTInformWin(GTInformWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTInformWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTInformWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_aspTextGeom,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 9B87AC: using guessed type int (__stdcall *GTInformWin___vftable_)(int uiFlags);
// 9B87CC: using guessed type int (__thiscall *GTInformWin___vftable_)(void *p, char);

//----- (005D2510) --------------------------------------------------------
void __thiscall GTInformWin::GTInformWin(GTInformWin *this)
{
  GTInformWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTInformWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTInformWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_aspTextGeom,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9B87AC: using guessed type int (__stdcall *GTInformWin___vftable_)(int uiFlags);
// 9B87CC: using guessed type int (__thiscall *GTInformWin___vftable_)(void *p, char);

//----- (005D2590) --------------------------------------------------------
bool __thiscall GTInformWin::Create(GTInformWin *this, PgFrameWork *pkFrameWork)
{
  NiAVObject *v2; // edi@1
  PgFont *v4; // eax@3
  PgFont *v5; // ebx@3
  SpScreenText **v6; // esi@4
  void *v7; // eax@6
  int v8; // eax@7
  SpScreenText *v9; // ebx@9
  SpScreenText *v10; // eax@17
  SpScreenText *v11; // ebx@19
  void *v12; // eax@21
  SpScreenText *v13; // eax@25
  float v14; // ST38_4@25
  float v15; // edx@25
  SpScreenText *v16; // eax@25
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // edx@25
  D3DXCOLOR *v18; // [sp+14h] [bp-74h]@22
  char v19; // [sp+18h] [bp-70h]@20
  char v20; // [sp+1Ch] [bp-6Ch]@20
  char v21; // [sp+20h] [bp-68h]@20
  unsigned int v22; // [sp+24h] [bp-64h]@1
  char v23; // [sp+24h] [bp-64h]@20
  D3DXCOLOR result; // [sp+40h] [bp-48h]@22
  tagSIZE kSize; // [sp+50h] [bp-38h]@4
  PgFont *pkFont; // [sp+58h] [bp-30h]@3
  int v27; // [sp+5Ch] [bp-2Ch]@4
  int iLineYPos; // [sp+60h] [bp-28h]@4
  void *v29; // [sp+64h] [bp-24h]@6
  tagRECT kDrawRect; // [sp+68h] [bp-20h]@4
  unsigned int v31; // [sp+78h] [bp-10h]@1
  int v32; // [sp+84h] [bp-4h]@6
  int v33; // [sp+88h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v22 = (unsigned int)&v33 ^ __security_cookie;
  v2 = (NiAVObject *)this;
  if ( !PgWinFrame::Create(&this->baseclass_0, 0, 0, 0, pkFrameWork, "GTInformWin", 0)
    || (v4 = Font::Get(GTFONT), v5 = v4, (pkFont = v4) == 0) )
    return 0;
  SelectObject(v4->baseclass_0.m_kFontRenderStuff.hDC, v4->baseclass_0.m_hFont);
  PgFont::GetTextSize(v5, "W", 1, &kSize);
  iLineYPos = -2;
  SetRect(&kDrawRect, 0, 0, 500, kSize.cy);
  v6 = (SpScreenText **)&v2[1].m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator;
  v27 = 5;
  while ( 1 )
  {
    v7 = operator new(0x158u);
    v29 = v7;
    v32 = 0;
    if ( v7 )
    {
      PgFadeTextGeometry::PgFadeTextGeometry((PgFadeTextGeometry *)v7, v5);
      v29 = (void *)v8;
    }
    else
    {
      v29 = 0;
      v8 = 0;
    }
    v9 = *v6;
    v32 = -1;
    if ( v9 != (SpScreenText *)v8 )
    {
      if ( v9 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
        v8 = (int)v29;
      }
      *v6 = (SpScreenText *)v8;
      if ( v8 )
        InterlockedIncrement((volatile LONG *)(v8 + 4));
    }
    SpScreenText::SetShadowOffset(*v6, 3u);
    ((void (__stdcall *)(tagRECT *, unsigned int))(*v6)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(
      &kDrawRect,
      v22);
    v10 = *v6;
    (*v6)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)1;
    if ( v10->m_iAlignOption != 18 )
    {
      v10->m_iAlignOption = 18;
      v10->m_bInvalidate = 1;
    }
    v11 = *v6;
    if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
    {
      v12 = CDataReader::GetRecord(
              (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
              0x23u);
      v23 = -1;
      if ( !v12 )
      {
        v21 = -1;
        v20 = 0;
        v19 = -1;
        v18 = &result;
        goto LABEL_25;
      }
      v21 = *((_BYTE *)v12 + 6);
      v20 = *((_BYTE *)v12 + 5);
      v19 = *((_BYTE *)v12 + 4);
    }
    else
    {
      v23 = -1;
      v21 = -1;
      v20 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
      v19 = -1;
    }
    v18 = &result;
LABEL_25:
    Color::GetDxColor(v18, v19, v20, v21, v23);
    v22 = (unsigned int)&result;
    ((void (__thiscall *)(SpScreenText *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v11);
    v13 = *v6;
    v14 = (double)iLineYPos;
    v15 = (*v6)->baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    (*v6)->baseclass_0.baseclass_0.m_kLocal.m_Translate.x = (*v6)->baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v13->baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v14;
    v13->baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v15;
    v16 = *v6;
    v17 = v2->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
    iLineYPos += kSize.cy + 2;
    ((void (__thiscall *)(NiAVObject *, SpScreenText *, _DWORD))v17)(v2, v16, 0);
    ++v6;
    --v27;
    if ( !v27 )
      break;
    v5 = pkFont;
  }
  NiAVObject::UpdateProperties(v2);
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor((NiRefObject *)v2, 500u);
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor((NiRefObject *)v2, 45u);
  ((void (__thiscall *)(NiAVObject *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.2);
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v2, 0);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (005D2840) --------------------------------------------------------
GTInformWin *__cdecl GTInformWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GTInformWin *v4; // eax@14
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x16Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &GTInformWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GTInformWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 344,
      4u,
      5,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( GTInformWin::Create((GTInformWin *)v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GTInformWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    }
    v4 = 0;
  }
  return v4;
}
// 9B87AC: using guessed type int (__stdcall *GTInformWin___vftable_)(int uiFlags);
// 9B87CC: using guessed type int (__thiscall *GTInformWin___vftable_)(void *p, char);

//----- (005D29A0) --------------------------------------------------------
void *__thiscall GTInformWin::_vector_deleting_destructor_(GTInformWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTInformWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTInformWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_aspTextGeom,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B87AC: using guessed type int (__stdcall *GTInformWin___vftable_)(int uiFlags);
// 9B87CC: using guessed type int (__thiscall *GTInformWin___vftable_)(void *p, char);

//----- (005D2A30) --------------------------------------------------------
bool __cdecl PkRealTiemRankWin::RankInfo::greater_Score(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw)
{
  return rhw->m_unScore < lhw->m_unScore;
}

//----- (005D2A50) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::Low_IncreaseScore(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return lhw->m_unIncreaseScore < rhw->m_unIncreaseScore;
}

//----- (005D2A70) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::Low_DecreaseScore(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return lhw->m_unDecreaseScore < rhw->m_unDecreaseScore;
}

//----- (005D2A90) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::Low_DieCount(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return lhw->m_unDieCount < rhw->m_unDieCount;
}

//----- (005D2AB0) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::High_KillCount(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return rhw->m_unKillCount < lhw->m_unKillCount;
}

//----- (005D2AD0) --------------------------------------------------------
bool __cdecl PkRealTiemRankWin::RankInfo::Less_Rank(PkRealTiemRankWin::RankInfo *lhw, PkRealTiemRankWin::RankInfo *rhw)
{
  return lhw->m_unRank < rhw->m_unRank;
}

//----- (005D2AF0) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::High_Grade(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return rhw->m_unGrade < lhw->m_unGrade;
}

//----- (005D2B10) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::Low_Grade(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return lhw->m_unGrade < rhw->m_unGrade;
}

//----- (005D2B30) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::High_CaptureFlag(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return rhw->m_unCaptureFlag < lhw->m_unCaptureFlag;
}

//----- (005D2B50) --------------------------------------------------------
bool __cdecl GTStatusWin::RankInfo::Low_CaptureFlag(GTStatusWin::RankInfo *lhw, GTStatusWin::RankInfo *rhw)
{
  return lhw->m_unCaptureFlag < rhw->m_unCaptureFlag;
}

//----- (005D2B70) --------------------------------------------------------
void __thiscall GTStatusWin::UpdateMeWin(GTStatusWin *this, float fCurTime)
{
  GTStatusWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pkGTScoreList, v2->m_pkSlideBarScoreList);
}

//----- (005D2BA0) --------------------------------------------------------
void __thiscall GTStatusWin::EndGame(GTStatusWin *this, bool b)
{
  this->m_bGame = b;
}

//----- (005D2BB0) --------------------------------------------------------
void __thiscall GTStatusWin::OnHelpLink(GTStatusWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildTBattleStatus");
}

//----- (005D2BE0) --------------------------------------------------------
void __thiscall GTStatusMiniWin::GTStatusMiniWin(GTStatusMiniWin *this)
{
  GTStatusMiniWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStatusMiniWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStatusMiniWin::_vftable_;
  v1->m_GTStatus.m_uiMyScore = 0;
  v1->m_GTStatus.m_uiEnemyScore = 0;
  v1->m_GTStatus.m_uiMyCaptureFlag = 0;
  v1->m_GTStatus.m_uiEnemyCaptureFlag = 0;
  v1->m_bOpserver = 0;
  v1->m_FirstGuildReg = 0;
}
// 9B8E10: using guessed type int (__stdcall *GTStatusMiniWin___vftable_)(int uiFlags);
// 9B8E2C: using guessed type int (__thiscall *GTStatusMiniWin___vftable_)(void *p, char);

//----- (005D2C30) --------------------------------------------------------
void __thiscall GTStatusMiniWin::_GTStatusMiniWin(GTStatusMiniWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStatusMiniWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStatusMiniWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B8E10: using guessed type int (__stdcall *GTStatusMiniWin___vftable_)(int uiFlags);
// 9B8E2C: using guessed type int (__thiscall *GTStatusMiniWin___vftable_)(void *p, char);

//----- (005D2C60) --------------------------------------------------------
void __thiscall GTStatusMiniWin::Clear(GTStatusMiniWin *this)
{
  GTStatusMiniWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A4B);
  ((void (__stdcall *)(_DWORD))v1->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A56);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A57);
  ((void (__stdcall *)(_DWORD))v1->m_pkEnemyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A5E);
  ((void (__stdcall *)(_DWORD))v1->m_pkMyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A5F);
  ((void (__stdcall *)(_DWORD))v1->m_pkEnemyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A6A);
}

//----- (005D2CF0) --------------------------------------------------------
void __thiscall GTStatusMiniWin::EndGame(GTStatusMiniWin *this, bool b)
{
  this->m_bOpserver = b;
  this->m_FirstGuildReg = 0;
}

//----- (005D2D10) --------------------------------------------------------
void __thiscall GTStatusMiniWin::OnHelpLink(GTStatusMiniWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildTBattleStatusMin");
}

//----- (005D2D40) --------------------------------------------------------
void __thiscall GTStatusWin::SetGuildInfo(GTStatusWin *this, unsigned int Reg, unsigned int TotalScore)
{
  int v3; // ebx@0
  GTStatusWin *v4; // esi@1
  CClientGuild *v5; // eax@2
  NiRefObjectVtbl *v6; // ebx@5
  CClientGuild *v7; // eax@5
  char *v8; // eax@5
  NiRefObjectVtbl *v9; // edi@5
  char *v10; // eax@5
  NiRefObjectVtbl *v11; // ebx@7
  CClientGuild *v12; // eax@7
  char *v13; // eax@7
  NiRefObjectVtbl *v14; // edi@7
  char *v15; // eax@7
  NiRefObjectVtbl *v16; // ebx@11
  CClientGuild *v17; // eax@11
  char *v18; // eax@11
  NiRefObjectVtbl *v19; // edi@11
  char *v20; // eax@11
  unsigned int v21; // edi@11
  GuildTournamentImprove *v22; // eax@11
  NiRefObjectVtbl *v23; // edx@11
  NiRefObjectVtbl *v24; // ebx@14
  CClientGuild *v25; // eax@14
  char *v26; // eax@14
  NiRefObjectVtbl *v27; // ebx@14
  char *v28; // eax@14
  int v29; // [sp-4h] [bp-Ch]@2

  v4 = this;
  if ( Reg )
  {
    v29 = v3;
    v5 = GuildTask::GetGuild();
    if ( v5 && v5->m_bOpserver )
    {
      if ( GuildTask::GetGuildTournamentImprove()->m_RedTeam == Reg )
      {
        v6 = v4->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v7 = GuildTask::GetGuild();
        v8 = CClientGuild::FindGttEnemyInfo(v7, Reg);
        v6[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildName, (unsigned int)v8);
        v9 = v4->m_pkMyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v10 = fs("%d");
        v9[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildScore, (unsigned int)v10);
        ((void (__stdcall *)(D3DXCOLOR *))v4->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
        return;
      }
      if ( GuildTask::GetGuildTournamentImprove()->m_BlueTeam == Reg )
      {
        v11 = v4->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v12 = GuildTask::GetGuild();
        v13 = CClientGuild::FindGttEnemyInfo(v12, Reg);
        ((void (__thiscall *)(PgWinText *, char *, int))v11[118].__vecDelDtor)(v4->m_pkEnemyGuildName, v13, v29);
        v14 = v4->m_pkEnemyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v15 = fs("%d");
        v14[118].__vecDelDtor((NiRefObject *)v4->m_pkEnemyGuildScore, (unsigned int)v15);
LABEL_8:
        ((void (__stdcall *)(signed int, signed int, signed int))v4->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
          62,
          158,
          255);
        return;
      }
    }
    else
    {
      if ( g_pkMainChar->m_dwGuildRegNum != Reg )
      {
        v24 = v4->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v25 = GuildTask::GetGuild();
        v26 = CClientGuild::FindGttEnemyInfo(v25, Reg);
        ((void (__thiscall *)(PgWinText *, char *, int))v24[118].__vecDelDtor)(v4->m_pkEnemyGuildName, v26, v29);
        v27 = v4->m_pkEnemyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v28 = fs("%d");
        v27[118].__vecDelDtor((NiRefObject *)v4->m_pkEnemyGuildScore, (unsigned int)v28);
        if ( GuildTask::GetGuildTournamentImprove()->m_RedTeam == Reg )
        {
          ((void (__cdecl *)(D3DXCOLOR *))v4->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
          return;
        }
        goto LABEL_8;
      }
      v16 = v4->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v17 = GuildTask::GetGuild();
      v18 = CClientGuild::FindGttEnemyInfo(v17, Reg);
      ((void (__thiscall *)(PgWinText *, char *, int))v16[118].__vecDelDtor)(v4->m_pkMyGuildName, v18, v29);
      v19 = v4->m_pkMyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v20 = fs("%d");
      v19[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildScore, (unsigned int)v20);
      v21 = g_pkMainChar->m_dwGuildRegNum;
      v22 = GuildTask::GetGuildTournamentImprove();
      v23 = v4->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      if ( v22->m_RedTeam == v21 )
        ((void (__cdecl *)(D3DXCOLOR *))v23[117].__vecDelDtor)(&Color::m_kDxRedColor);
      else
        ((void (__stdcall *)(signed int, signed int, signed int))v23[116].__vecDelDtor)(62, 158, 255);
    }
  }
}
// 5D2D40: could not find valid save-restore pair for ebx

//----- (005D2F80) --------------------------------------------------------
void __thiscall GTStatusWin::OnSlideBar(GTStatusWin *this)
{
  GTStatusWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pkGTScoreList;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarScoreList;
    if ( v3 )
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
    v1->m_pkGTScoreList->m_nViewStartPos = v1->m_pkSlideBarScoreList->m_nCurPos;
    SlideListWin::UpdateViewList(v1->m_pkGTScoreList);
  }
}

//----- (005D2FD0) --------------------------------------------------------
void __thiscall GTStatusMiniWin::OnCommand(GTStatusMiniWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@3
  PgWin *v4; // eax@5

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "GuildTBattleStatusMin");
    }
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    v4 = (PgWin *)GuildTask::GetGTStatusWin();
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
  }
}

//----- (005D3030) --------------------------------------------------------
void __thiscall GTStatusMiniWin::SetGTStatus(GTStatusMiniWin *this, PROTO_NC_GUILD_TOURNAMENT_SCORE_CMD *pkCmd)
{
  int v2; // ebx@0
  PROTO_NC_GUILD_TOURNAMENT_SCORE_CMD *v3; // edi@1
  GTStatusMiniWin *v4; // esi@1
  CClientGuild *v5; // eax@2
  NiRefObjectVtbl *v6; // ebx@5
  CClientGuild *v7; // eax@5
  char *v8; // eax@5
  NiRefObjectVtbl *v9; // ebx@5
  char *v10; // eax@5
  NiRefObjectVtbl *v11; // ebx@5
  char *v12; // eax@5
  NiRefObjectVtbl *v13; // ebx@7
  CClientGuild *v14; // eax@7
  char *v15; // eax@7
  NiRefObjectVtbl *v16; // ebx@7
  char *v17; // eax@7
  NiRefObjectVtbl *v18; // ebx@7
  char *v19; // eax@7
  unsigned int v20; // eax@8
  NiRefObjectVtbl *v21; // ebx@10
  unsigned int v22; // ST0C_4@10
  CClientGuild *v23; // eax@10
  char *v24; // eax@10
  NiRefObjectVtbl *v25; // ebx@10
  char *v26; // eax@10
  NiRefObjectVtbl *v27; // ebx@10
  char *v28; // eax@10
  unsigned int v29; // edi@10
  GuildTournamentImprove *v30; // eax@10
  PgWinText *v31; // ecx@10
  bool v32; // zf@10
  NiRefObjectVtbl *v33; // ebx@13
  unsigned int v34; // ST0C_4@13
  CClientGuild *v35; // eax@13
  char *v36; // eax@13
  NiRefObjectVtbl *v37; // ebx@13
  char *v38; // eax@13
  NiRefObjectVtbl *v39; // ebx@13
  char *v40; // eax@13
  NiRefObjectVtbl *v41; // edx@14
  int v42; // [sp-4h] [bp-Ch]@2
  unsigned int pkCmda; // [sp+10h] [bp+8h]@4
  unsigned int pkCmdb; // [sp+10h] [bp+8h]@6

  v3 = pkCmd;
  v4 = this;
  if ( pkCmd )
  {
    v42 = v2;
    v5 = GuildTask::GetGuild();
    if ( v5 && v5->m_bOpserver )
    {
      pkCmda = pkCmd->regNumber;
      if ( GuildTask::GetGuildTournamentImprove()->m_RedTeam == v3->regNumber )
      {
        v6 = v4->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v7 = GuildTask::GetGuild();
        v8 = CClientGuild::FindGttEnemyInfo(v7, pkCmda);
        v6[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildName, (unsigned int)v8);
        v9 = v4->m_pkMyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v10 = fs("%d");
        v9[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildTotalScore, (unsigned int)v10);
        v11 = v4->m_pkMyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v12 = fs("%d");
        v11[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildCaptureFlag, (unsigned int)v12);
        ((void (__stdcall *)(D3DXCOLOR *))v4->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
      }
      else
      {
        pkCmdb = v3->regNumber;
        if ( GuildTask::GetGuildTournamentImprove()->m_BlueTeam == v3->regNumber )
        {
          v13 = v4->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v14 = GuildTask::GetGuild();
          v15 = CClientGuild::FindGttEnemyInfo(v14, pkCmdb);
          v13[118].__vecDelDtor((NiRefObject *)v4->m_pkEnemyGuildName, (unsigned int)v15);
          v16 = v4->m_pkEnemyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v17 = fs("%d");
          v16[118].__vecDelDtor((NiRefObject *)v4->m_pkEnemyGuildTotalScore, (unsigned int)v17);
          v18 = v4->m_pkEnemyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v19 = fs("%d");
          v18[118].__vecDelDtor((NiRefObject *)v4->m_pkEnemyGuildCaptureFlag, (unsigned int)v19);
          ((void (__stdcall *)(signed int, signed int, signed int, signed int))v4->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
            62,
            158,
            255,
            255);
        }
      }
      return;
    }
    v20 = pkCmd->regNumber;
    if ( !v20 )
      return;
    if ( g_pkMainChar->m_dwGuildRegNum == v20 )
    {
      v21 = v4->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v22 = pkCmd->regNumber;
      v23 = GuildTask::GetGuild();
      v24 = CClientGuild::FindGttEnemyInfo(v23, v22);
      ((void (__thiscall *)(PgWinText *, char *, int))v21[118].__vecDelDtor)(v4->m_pkMyGuildName, v24, v42);
      v25 = v4->m_pkMyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v26 = fs("%d");
      v25[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildTotalScore, (unsigned int)v26);
      v27 = v4->m_pkMyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v28 = fs("%d");
      v27[118].__vecDelDtor((NiRefObject *)v4->m_pkMyGuildCaptureFlag, (unsigned int)v28);
      v29 = g_pkMainChar->m_dwGuildRegNum;
      v30 = GuildTask::GetGuildTournamentImprove();
      v31 = v4->m_pkMyGuildName;
      v32 = v29 == v30->m_RedTeam;
      goto LABEL_14;
    }
    if ( v20 && g_pkMainChar->m_dwGuildRegNum != v20 )
    {
      v33 = v4->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v34 = pkCmd->regNumber;
      v35 = GuildTask::GetGuild();
      v36 = CClientGuild::FindGttEnemyInfo(v35, v34);
      ((void (__thiscall *)(PgWinText *, char *, int))v33[118].__vecDelDtor)(v4->m_pkEnemyGuildName, v36, v42);
      v37 = v4->m_pkEnemyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v38 = fs("%d");
      v37[118].__vecDelDtor((NiRefObject *)v4->m_pkEnemyGuildTotalScore, (unsigned int)v38);
      v39 = v4->m_pkEnemyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v40 = fs("%d");
      v39[118].__vecDelDtor((NiRefObject *)v4->m_pkEnemyGuildCaptureFlag, (unsigned int)v40);
      v32 = pkCmd->regNumber == GuildTask::GetGuildTournamentImprove()->m_RedTeam;
      v31 = v4->m_pkEnemyGuildName;
LABEL_14:
      v41 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      if ( v32 )
        ((void (__cdecl *)(D3DXCOLOR *))v41[117].__vecDelDtor)(&Color::m_kDxRedColor);
      else
        ((void (__stdcall *)(signed int, signed int, signed int))v41[116].__vecDelDtor)(62, 158, 255);
      return;
    }
  }
}
// 5D3030: could not find valid save-restore pair for ebx

//----- (005D3340) --------------------------------------------------------
bool __thiscall GTStatusMiniWin::Create(GTStatusMiniWin *this, PgFrameWork *pkFrameWork)
{
  GTStatusMiniWin *v2; // esi@1
  NiNode *v3; // esi@2
  NiTexturePalette *v5; // edi@7
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData::PgHitTester *v12; // eax@14
  unsigned int v13; // ST8C_4@14
  PgFont *v14; // eax@14
  NiRefObjectVtbl *v15; // ST8C_4@14
  char *v16; // ST78_4@14
  PgSprData *v17; // eax@14
  PgSprData *v18; // eax@14
  PgSprData::PgHitTester *v19; // eax@14
  unsigned int v20; // ST8C_4@14
  PgFont *v21; // eax@14
  NiRefObjectVtbl *v22; // ST8C_4@14
  char *v23; // ST78_4@14
  NiPointer<PgSprData::PgHitTester> *v24; // ecx@14
  unsigned int v25; // ST8C_4@14
  PgFont *v26; // eax@14
  NiRefObjectVtbl *v27; // ST8C_4@14
  char *v28; // ST78_4@14
  NiPointer<PgSprData::PgHitTester> *v29; // ecx@14
  unsigned int v30; // ST8C_4@14
  PgFont *v31; // eax@14
  NiRefObjectVtbl *v32; // ST8C_4@14
  char *v33; // ST78_4@14
  PgSprData::PgHitTester *v34; // eax@14
  PgWin *v35; // ST74_4@14
  unsigned int v36; // ST8C_4@14
  PgFont *v37; // eax@14
  PgWinAbbreviateText *v38; // eax@14
  PgSprData::PgHitTester *v39; // eax@14
  PgWin *v40; // ST74_4@14
  unsigned int v41; // ST8C_4@14
  PgFont *v42; // eax@14
  PgWinAbbreviateText *v43; // eax@14
  NiPointer<PgSprData::PgHitTester> *v44; // ecx@14
  unsigned int v45; // ST8C_4@14
  PgFont *v46; // eax@14
  PgWinText *v47; // eax@14
  NiPointer<PgSprData::PgHitTester> *v48; // ecx@14
  unsigned int v49; // ST8C_4@14
  PgFont *v50; // eax@14
  PgWinText *v51; // eax@14
  NiPointer<PgSprData::PgHitTester> *v52; // ecx@14
  unsigned int v53; // ST8C_4@14
  PgFont *v54; // eax@14
  PgWinText *v55; // eax@14
  NiPointer<PgSprData::PgHitTester> *v56; // ecx@14
  unsigned int v57; // ST8C_4@14
  PgFont *v58; // eax@14
  PgWinText *v59; // eax@14
  NiNode *v60; // esi@16
  const char *v61; // [sp+6Ch] [bp-40h]@12
  int *v62; // [sp+70h] [bp-3Ch]@12
  int *v63; // [sp+74h] [bp-38h]@12
  NiSourceTexture *v64; // [sp+78h] [bp-34h]@12
  NiSourceTexture *pkTexture; // [sp+90h] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+94h] [bp-18h]@1
  int uiLeft; // [sp+98h] [bp-14h]@10
  int uiTop; // [sp+9Ch] [bp-10h]@10
  int v69; // [sp+A8h] [bp-4h]@1
  unsigned int pkTexture8a; // [sp+B4h] [bp+8h]@14
  PgWinText *pkTexture8b; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8c; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8d; // [sp+B4h] [bp+8h]@14
  PgWinText *pkTexture8e; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8f; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8g; // [sp+B4h] [bp+8h]@14
  PgWinText *pkTexture8h; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8i; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8j; // [sp+B4h] [bp+8h]@14
  PgWinText *pkTexture8k; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8l; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8m; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8n; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8o; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8p; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8q; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8r; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8s; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8t; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8u; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8v; // [sp+B4h] [bp+8h]@14
  unsigned int pkTexture8w; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8x; // [sp+B4h] [bp+8h]@14
  NiSourceTexture *pkTexture8; // [sp+B4h] [bp+8h]@14
  PgSprData *pkTexture8y; // [sp+B4h] [bp+8h]@15

  v2 = this;
  spNode.m_pObject = 0;
  v69 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
    goto LABEL_23;
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildTBattleStatusMin.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "GTStatusMiniWin", 0) )
  {
LABEL_23:
    v3 = spNode.m_pObject;
    v69 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v64 = v10;
    v63 = &uiTop;
    v62 = &uiLeft;
    v61 = "Theme";
  }
  else
  {
    v64 = 0;
    v63 = &uiTop;
    v62 = &uiLeft;
    v61 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v61, v62, v63, v64);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  pkTexture8a = v12->m_uiHeight;
  v13 = v12->m_uiWidth;
  v14 = Font::Get(0);
  pkTexture8b = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  v13,
                  pkTexture8a,
                  v14,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
  pkTexture8b->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTexture8b,
    5u);
  v15 = pkTexture8b->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v16 = TextData2::Get(0x34A29797u);
  v15[118].__vecDelDtor((NiRefObject *)pkTexture8b, (unsigned int)v16);
  ((void (__stdcall *)(_DWORD))pkTexture8b->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTexture8c = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8c, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19 = pkTexture8c->m_akHitTester.m_pBase->m_pObject;
  pkTexture8d = v19->m_uiHeight;
  v20 = v19->m_uiWidth;
  v21 = Font::Get(0);
  pkTexture8e = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  v20,
                  pkTexture8d,
                  v21,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
  pkTexture8e->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTexture8e,
    5u);
  v22 = pkTexture8e->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData2::Get(0xDAEC3E0Eu);
  v22[118].__vecDelDtor((NiRefObject *)pkTexture8e, (unsigned int)v23);
  ((void (__stdcall *)(_DWORD))pkTexture8e->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8f = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8f, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v24 = pkTexture8f->m_akHitTester.m_pBase;
  pkTexture8g = v24->m_pObject->m_uiHeight;
  v25 = v24->m_pObject->m_uiWidth;
  v26 = Font::Get(0);
  pkTexture8h = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  v25,
                  pkTexture8g,
                  v26,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
  pkTexture8h->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTexture8h,
    5u);
  v27 = pkTexture8h->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = TextData2::Get(0xDD4D411Fu);
  v27[118].__vecDelDtor((NiRefObject *)pkTexture8h, (unsigned int)v28);
  ((void (__stdcall *)(_DWORD))pkTexture8h->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8i, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v29 = pkTexture8i->m_akHitTester.m_pBase;
  pkTexture8j = v29->m_pObject->m_uiHeight;
  v30 = v29->m_pObject->m_uiWidth;
  v31 = Font::Get(0);
  pkTexture8k = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  v30,
                  pkTexture8j,
                  v31,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
  pkTexture8k->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTexture8k,
    5u);
  v32 = pkTexture8k->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v33 = TextData2::Get(0xCFDBDA42u);
  v32[118].__vecDelDtor((NiRefObject *)pkTexture8k, (unsigned int)v33);
  ((void (__stdcall *)(_DWORD))pkTexture8k->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8l = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildName01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkTexture8l, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v34 = pkTexture8l->m_akHitTester.m_pBase->m_pObject;
  v35 = g_pkToolTipWin;
  pkTexture8m = v34->m_uiHeight;
  v36 = v34->m_uiWidth;
  v37 = Font::Get(0);
  v38 = PgWinAbbreviateText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v36,
          pkTexture8m,
          v37,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0,
          0,
          1,
          v35,
          0x1Eu);
  v2->m_pkMyGuildName = (PgWinText *)v38;
  v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v38,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A26);
  pkTexture8n = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildName02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkTexture8n, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v39 = pkTexture8n->m_akHitTester.m_pBase->m_pObject;
  v40 = g_pkToolTipWin;
  pkTexture8o = v39->m_uiHeight;
  v41 = v39->m_uiWidth;
  v42 = Font::Get(0);
  v43 = PgWinAbbreviateText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v41,
          pkTexture8o,
          v42,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0,
          0,
          1,
          v40,
          0x1Eu);
  v2->m_pkEnemyGuildName = (PgWinText *)v43;
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v43,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A27);
  pkTexture8p = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Score01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkTexture8p, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v44 = pkTexture8p->m_akHitTester.m_pBase;
  pkTexture8q = v44->m_pObject->m_uiHeight;
  v45 = v44->m_pObject->m_uiWidth;
  v46 = Font::Get(0);
  v47 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v45,
          pkTexture8q,
          v46,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkMyGuildTotalScore = v47;
  v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v47,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A31);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8r = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Score02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkTexture8r, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v48 = pkTexture8r->m_akHitTester.m_pBase;
  pkTexture8s = v48->m_pObject->m_uiHeight;
  v49 = v48->m_pObject->m_uiWidth;
  v50 = Font::Get(0);
  v51 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v49,
          pkTexture8s,
          v50,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkEnemyGuildTotalScore = v51;
  v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v51,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkEnemyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A32);
  ((void (__stdcall *)(_DWORD))v2->m_pkEnemyGuildTotalScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8t = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Flag01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkTexture8t, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v52 = pkTexture8t->m_akHitTester.m_pBase;
  pkTexture8u = v52->m_pObject->m_uiHeight;
  v53 = v52->m_pObject->m_uiWidth;
  v54 = Font::Get(0);
  v55 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v53,
          pkTexture8u,
          v54,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkMyGuildCaptureFlag = v55;
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v55,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A33);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8v = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Flag02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkTexture8v, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v56 = pkTexture8v->m_akHitTester.m_pBase;
  pkTexture8w = v56->m_pObject->m_uiHeight;
  v57 = v56->m_pObject->m_uiWidth;
  v58 = Font::Get(0);
  v59 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          v57,
          pkTexture8w,
          v58,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkEnemyGuildCaptureFlag = v59;
  v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v59,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkEnemyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A4A);
  ((void (__stdcall *)(_DWORD))v2->m_pkEnemyGuildCaptureFlag->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8x = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MaxNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8x, &spNode.m_pObject->baseclass_0, "MaxClick");
  PgSprData::Add(pkTexture8x, &spNode.m_pObject->baseclass_0, "MaxOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8x, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  pkTexture8 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTexture8y = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
    PgSprData::Add(pkTexture8y, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTexture8y, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8y, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  ((void (__thiscall *)(GTStatusMiniWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.80000001,
    0.40000001);
  v60 = spNode.m_pObject;
  v69 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v60 )
    v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v60, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005D3D10) --------------------------------------------------------
GTStatusMiniWin *__cdecl GTStatusMiniWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GTStatusMiniWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GTStatusMiniWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GTStatusMiniWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_BYTE *)v2 + 384) = 0;
    *((_DWORD *)v2 + 97) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GTStatusMiniWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B8E10: using guessed type int (__stdcall *GTStatusMiniWin___vftable_)(int uiFlags);
// 9B8E2C: using guessed type int (__thiscall *GTStatusMiniWin___vftable_)(void *p, char);

//----- (005D3E70) --------------------------------------------------------
void __thiscall GTStatusWin::AddRankPlayerInfo(GTStatusWin *this, GTStatusWin::RankInfo *rInfo)
{
  const char *v2; // eax@1
  std::basic_ostream<char,std::char_traits<char> > *v3; // eax@1
  GTStatusWin::RankInfo *v4; // eax@2
  int v5; // ecx@4
  char *v6; // eax@4
  unsigned int v7; // ST1C_4@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // eax@4
  int v9; // eax@8
  unsigned int v10; // ST18_4@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@8
  int v12; // edx@12
  unsigned int v13; // ST14_4@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // eax@12
  int v15; // ecx@16
  unsigned int v16; // ST10_4@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@16
  int v18; // eax@20
  unsigned int v19; // ST0C_4@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v20; // eax@20
  int v21; // edx@24
  unsigned int v22; // edi@24
  GTStatusWin::RankInfo *v23; // edx@25
  unsigned int v24; // eax@27
  const char *v25; // ecx@29
  int v26; // eax@34
  int v27; // ecx@34
  int v28; // edx@34
  CClientGuild *v29; // eax@35
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > osstream; // [sp+0h] [bp-ECh]@1
  int iLastIndex; // [sp+98h] [bp-54h]@4
  int b; // [sp+9Ch] [bp-50h]@4
  GTStatusWin *v33; // [sp+A0h] [bp-4Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMainName; // [sp+A4h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+C0h] [bp-2Ch]@4
  unsigned int v36; // [sp+DCh] [bp-10h]@1
  int v37; // [sp+E8h] [bp-4h]@1
  int v38; // [sp+ECh] [bp+0h]@1

  v36 = (unsigned int)&v38 ^ __security_cookie;
  v33 = this;
  v2 = (const char *)((int (__stdcall *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)((unsigned int)&v38 ^ __security_cookie);
  strMainName.baseclass_0._Myres = 15;
  strMainName.baseclass_0._Mysize = 0;
  strMainName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strMainName, v2, strlen(v2));
  v37 = 0;
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  LOBYTE(v37) = 1;
  v3 = std::operator<<<std::char_traits<char>>(&osstream.___u0.baseclass_0, " ");
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(v3, &rInfo->m_strName);
  if ( rInfo->m_strName.baseclass_0._Myres < 0x10 )
    v4 = rInfo;
  else
    v4 = *(GTStatusWin::RankInfo **)&rInfo->m_strName.baseclass_0.___u0.baseclass_0.dummy[0];
  iLastIndex = SlideListWin::AddText(v33->m_pkGTScoreList, v4->m_strName.baseclass_0.___u0.baseclass_0.dummy);
  v5 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  b = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v5] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v37) = 2;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v37) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  v6 = Guild::GetMemberGradeString(LOBYTE(rInfo->m_unGrade));
  SlideListWin::SetText(v33->m_pkGTScoreList, iLastIndex, 1u, v6);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v7 = rInfo->m_unIncreaseScore;
  LOBYTE(v37) = 3;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v7);
  v8 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v37) = 4;
  if ( v8->baseclass_0._Myres >= 0x10 )
    v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v8->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v33->m_pkGTScoreList, iLastIndex, 2u, v8->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v9 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  b = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v9] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v37) = 5;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v37) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v10 = rInfo->m_unDecreaseScore;
  LOBYTE(v37) = 6;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v10);
  v11 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v37) = 7;
  if ( v11->baseclass_0._Myres >= 0x10 )
    v11 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v11->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v33->m_pkGTScoreList, iLastIndex, 3u, v11->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v12 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  b = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v12] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v37) = 8;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v37) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v13 = rInfo->m_unKillCount;
  LOBYTE(v37) = 9;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v13);
  v14 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v37) = 10;
  if ( v14->baseclass_0._Myres >= 0x10 )
    v14 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v14->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v33->m_pkGTScoreList, iLastIndex, 4u, v14->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v15 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  b = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v15] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v37) = 11;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v37) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v16 = rInfo->m_unDieCount;
  LOBYTE(v37) = 12;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v16);
  v17 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v37) = 13;
  if ( v17->baseclass_0._Myres >= 0x10 )
    v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v17->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v33->m_pkGTScoreList, iLastIndex, 5u, v17->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v18 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  b = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v18] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v37) = 14;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v37) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v19 = rInfo->m_unCaptureFlag;
  LOBYTE(v37) = 15;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v19);
  v20 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v37) = 16;
  if ( v20->baseclass_0._Myres >= 0x10 )
    v20 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v20->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v33->m_pkGTScoreList, iLastIndex, 6u, v20->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v21 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  b = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v21] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  LOBYTE(v37) = 17;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  LOBYTE(v37) = 0;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  v22 = rInfo->m_strName.baseclass_0._Mysize;
  if ( rInfo->m_strName.baseclass_0._Myres < 0x10 )
    v23 = rInfo;
  else
    v23 = *(GTStatusWin::RankInfo **)&rInfo->m_strName.baseclass_0.___u0.baseclass_0.dummy[0];
  v24 = strMainName.baseclass_0._Mysize;
  if ( strMainName.baseclass_0._Mysize >= v22 )
    v24 = rInfo->m_strName.baseclass_0._Mysize;
  v25 = *(const char **)&strMainName;
  if ( strMainName.baseclass_0._Myres < 0x10 )
    v25 = (const char *)&strMainName;
  if ( !std::char_traits<char>::compare(v25, v23->m_strName.baseclass_0.___u0.baseclass_0.dummy, v24)
    && strMainName.baseclass_0._Mysize >= v22
    && strMainName.baseclass_0._Mysize == v22 )
  {
    v26 = (strMainName.baseclass_0._Mysize != v22) + 116;
    v27 = 245;
    v28 = 250;
    goto LABEL_44;
  }
  v29 = GuildTask::GetGuild();
  if ( v29 && v29->m_bOpserver )
  {
    if ( v33->m_uiTabNum )
      goto LABEL_48;
    if ( GuildTask::GetGuildTournamentImprove()->m_RedTeam == rInfo->m_kGuildReg )
    {
      v27 = 0;
      v26 = 255;
      v28 = 0;
      goto LABEL_44;
    }
    if ( GuildTask::GetGuildTournamentImprove()->m_BlueTeam != rInfo->m_kGuildReg )
    {
LABEL_48:
      v26 = b;
      v27 = b;
      v28 = b;
    }
    else
    {
      v26 = 62;
      v27 = 158;
      v28 = 255;
    }
  }
  else
  {
    v26 = 255;
    v27 = 255;
    v28 = 0;
  }
LABEL_44:
  SlideListWin::SetFontColor(v33->m_pkGTScoreList, iLastIndex, v26, v27, v28);
  if ( strMainName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strMainName);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// A85C00: using guessed type int __security_cookie;

//----- (005D44D0) --------------------------------------------------------
void __thiscall GTStatusWin::DisplayInfoSetting(GTStatusWin *this)
{
  unsigned int v1; // ST08_4@1
  GTStatusWin *v2; // edi@1
  const char *v3; // eax@1
  unsigned int v4; // ebx@1
  int v5; // esi@1
  signed int v6; // ecx@1
  unsigned int v7; // eax@3
  GTStatusWin::RankInfo *v8; // ebx@3
  unsigned int v9; // esi@3
  const char *v10; // edx@4
  unsigned int v11; // ecx@6
  const char *v12; // eax@8
  int v13; // eax@10
  unsigned int v14; // ecx@10
  const char *v15; // edx@15
  const char *v16; // eax@19
  int v17; // esi@28
  signed int v18; // edx@28
  int v19; // ebx@30
  int v20; // ecx@31
  unsigned int v21; // edx@33
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // esi@35
  signed int v23; // eax@41
  int v24; // eax@48
  unsigned int v25; // eax@52
  unsigned int v26; // eax@54
  signed int v27; // edx@61
  unsigned int v28; // [sp+0h] [bp-38h]@3
  unsigned int v29; // [sp+0h] [bp-38h]@28
  unsigned int i; // [sp+4h] [bp-34h]@1
  unsigned int ia; // [sp+4h] [bp-34h]@29
  int rInfo; // [sp+8h] [bp-30h]@2
  int rInfoa; // [sp+8h] [bp-30h]@30
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMainName; // [sp+Ch] [bp-2Ch]@1
  unsigned int v35; // [sp+28h] [bp-10h]@1
  int v36; // [sp+34h] [bp-4h]@1
  int v37; // [sp+38h] [bp+0h]@1

  v35 = (unsigned int)&v37 ^ __security_cookie;
  v1 = (unsigned int)&v37 ^ __security_cookie;
  v2 = this;
  SlideListWin::RemoveAllList(this->m_pkGTScoreList);
  v3 = (const char *)((int (__stdcall *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v1);
  v4 = 0;
  strMainName.baseclass_0._Myres = 15;
  strMainName.baseclass_0._Mysize = 0;
  strMainName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strMainName, v3, strlen(v3));
  v5 = *(_DWORD *)&v2->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = (signed int)((char *)v2->m_vecRankInfos.baseclass_0._Mylast - v5);
  v36 = 0;
  i = 0;
  if ( v6 / 56 )
  {
    rInfo = 0;
    do
    {
      v7 = *(_DWORD *)(v5 + rInfo + 20);
      v8 = (GTStatusWin::RankInfo *)(v5 + rInfo);
      v9 = *(_DWORD *)(v5 + rInfo + 16);
      v28 = v7;
      if ( v7 < 0x10 )
        v10 = (const char *)v8;
      else
        v10 = *(const char **)&v8->m_strName.baseclass_0.___u0.baseclass_0.dummy[0];
      v11 = strMainName.baseclass_0._Mysize;
      if ( strMainName.baseclass_0._Mysize >= v9 )
        v11 = v9;
      v12 = *(const char **)&strMainName;
      if ( strMainName.baseclass_0._Myres < 0x10 )
        v12 = (const char *)&strMainName;
      v13 = std::char_traits<char>::compare(v12, v10, v11);
      v14 = strMainName.baseclass_0._Mysize;
      if ( !v13 )
      {
        if ( strMainName.baseclass_0._Mysize >= v9 )
        {
          LOBYTE(v13) = strMainName.baseclass_0._Mysize != v9;
          if ( !v13 )
          {
            if ( !v2->m_uiTabNum )
              goto LABEL_66;
          }
        }
      }
      if ( v28 < 0x10 )
        v15 = (const char *)v8;
      else
        v15 = *(const char **)&v8->m_strName.baseclass_0.___u0.baseclass_0.dummy[0];
      if ( strMainName.baseclass_0._Mysize >= v9 )
        v14 = v9;
      v16 = *(const char **)&strMainName;
      if ( strMainName.baseclass_0._Myres < 0x10 )
        v16 = (const char *)&strMainName;
      if ( !std::char_traits<char>::compare(v16, v15, v14)
        && strMainName.baseclass_0._Mysize >= v9
        && strMainName.baseclass_0._Mysize == v9
        && v2->m_uiTabNum == 1 )
LABEL_66:
        GTStatusWin::AddRankPlayerInfo(v2, v8);
      v5 = *(_DWORD *)&v2->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      rInfo += 56;
      ++i;
    }
    while ( i < (signed int)((char *)v2->m_vecRankInfos.baseclass_0._Mylast - v5) / 56 );
    v4 = 0;
  }
  v17 = *(_DWORD *)&v2->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  v18 = (signed int)((char *)v2->m_vecRankInfos.baseclass_0._Mylast
                   + ((unsigned __int64)(-1840700269i64
                                       * (unsigned int)((char *)v2->m_vecRankInfos.baseclass_0._Mylast - v17)) >> 32)
                   - v17) >> 5;
  v29 = v4;
  if ( v18 + ((unsigned int)v18 >> 31) )
  {
    ia = v4;
    do
    {
      v19 = v17 + ia;
      rInfoa = v17 + ia;
      if ( *(_DWORD *)(v17 + ia + 20) < 0x10u )
        v20 = v17 + ia;
      else
        v20 = *(_DWORD *)v19;
      v21 = strMainName.baseclass_0._Mysize;
      if ( strMainName.baseclass_0._Mysize >= *(_DWORD *)(v17 + ia + 16) )
        v21 = *(_DWORD *)(v17 + ia + 16);
      v22 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strMainName;
      if ( strMainName.baseclass_0._Myres < 0x10 )
        v22 = &strMainName;
      if ( v21 < 4 )
      {
LABEL_40:
        if ( !v21 )
          goto LABEL_50;
      }
      else
      {
        while ( *(_DWORD *)&v22->baseclass_0.___u0.baseclass_0.dummy[0] == *(_DWORD *)v20 )
        {
          v21 -= 4;
          v20 += 4;
          v22 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v22 + 4);
          if ( v21 < 4 )
            goto LABEL_40;
        }
      }
      v23 = v22->baseclass_0.___u0.baseclass_0.dummy[0] - *(_BYTE *)v20;
      if ( v22->baseclass_0.___u0.baseclass_0.dummy[0] == *(_BYTE *)v20 )
      {
        if ( v21 <= 1 )
          goto LABEL_49;
        v23 = v22->baseclass_0.___u0._Bx._Buf[1] - *(_BYTE *)(v20 + 1);
        if ( v22->baseclass_0.___u0._Bx._Buf[1] == *(_BYTE *)(v20 + 1) )
        {
          if ( v21 <= 2 )
            goto LABEL_49;
          v23 = v22->baseclass_0.___u0._Bx._Buf[2] - *(_BYTE *)(v20 + 2);
          if ( v22->baseclass_0.___u0._Bx._Buf[2] == *(_BYTE *)(v20 + 2) )
          {
            if ( v21 <= 3 )
            {
LABEL_49:
              v19 = rInfoa;
LABEL_50:
              v24 = 0;
              goto LABEL_51;
            }
            v23 = v22->baseclass_0.___u0._Bx._Buf[3] - *(_BYTE *)(v20 + 3);
          }
        }
      }
      v19 = rInfoa;
      v24 = (v23 >> 31) | 1;
LABEL_51:
      if ( !v24 )
      {
        v25 = *(_DWORD *)(v19 + 16);
        if ( strMainName.baseclass_0._Mysize >= v25 )
        {
          if ( !(strMainName.baseclass_0._Mysize != v25) )
            goto LABEL_61;
        }
      }
      v26 = v2->m_uiTabNum;
      if ( !v26 )
        goto LABEL_60;
      if ( v26 != 1 )
      {
        if ( v26 != 2 || *(_DWORD *)(v19 + 52) == g_pkMainChar->m_dwGuildRegNum )
          goto LABEL_61;
LABEL_60:
        GTStatusWin::AddRankPlayerInfo(v2, (GTStatusWin::RankInfo *)v19);
        goto LABEL_61;
      }
      if ( *(_DWORD *)(v19 + 52) == g_pkMainChar->m_dwGuildRegNum )
        goto LABEL_60;
LABEL_61:
      v17 = *(_DWORD *)&v2->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
      ia += 56;
      v27 = (signed int)((char *)v2->m_vecRankInfos.baseclass_0._Mylast
                       + ((unsigned __int64)(-1840700269i64
                                           * (unsigned int)((char *)v2->m_vecRankInfos.baseclass_0._Mylast - v17)) >> 32)
                       - v17) >> 5;
      ++v29;
    }
    while ( v29 < v27 + ((unsigned int)v27 >> 31) );
  }
  SlideListWin::UpdateViewList(v2->m_pkGTScoreList);
  if ( strMainName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strMainName);
}
// A85C00: using guessed type int __security_cookie;

//----- (005D47E0) --------------------------------------------------------
void __thiscall GTStatusWin::GTStatusWin(GTStatusWin *this)
{
  GTStatusWin *v1; // esi@1
  int *v2; // edi@1
  void *v3; // eax@1
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ecx@1
  int v5; // edx@4
  void *v6; // ecx@4
  boost::detail::function::any_pointer (__cdecl *v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-1Ch]@2
  bool (__cdecl *v8)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp+8h] [bp-14h]@1
  GTStatusWin *v9; // [sp+Ch] [bp-10h]@1
  int v10; // [sp+18h] [bp-4h]@1

  v1 = this;
  v9 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStatusWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStatusWin::_vftable_;
  v1->m_strPlayerName.baseclass_0._Myres = 15;
  v1->m_strPlayerName.baseclass_0._Mysize = 0;
  v10 = 0;
  v1->m_strPlayerName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecRankInfos.baseclass_0._Mylast = 0;
  v1->m_vecRankInfos.baseclass_0._Myend = 0;
  v2 = (int *)&v1->m_SortPradicationFunc;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v3 = 0;
  v4 = 0;
  LOBYTE(v10) = 3;
  v1->m_uiTabNum = 0;
  v8 = 0;
  if ( PkRealTiemRankWin::RankInfo::greater_Score )
  {
    v8 = boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke;
    v7 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage;
    v3 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage(
           (boost::detail::function::any_pointer)PkRealTiemRankWin::RankInfo::greater_Score,
           0).obj_ptr;
    v4 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage;
  }
  if ( (boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v2 != &v7 )
  {
    v5 = *v2;
    *v2 = (int)v4;
    v6 = v3;
    v3 = v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr;
    v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = v6;
    v1->m_SortPradicationFunc.baseclass_0.invoker = (bool (__cdecl *)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))v8;
    v7 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v5;
    v4 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v5;
  }
  if ( v4 )
    v4((boost::detail::function::any_pointer)v3, destroy_functor_tag);
  v1->m_bGame = 0;
}
// 9B9050: using guessed type int (__stdcall *GTStatusWin___vftable_)(int uiFlags);
// 9B906C: using guessed type int (__thiscall *GTStatusWin___vftable_)(void *p, char);

//----- (005D48E0) --------------------------------------------------------
void __thiscall GTStatusWin::_GTStatusWin(GTStatusWin *this)
{
  GTStatusWin *v1; // esi@1
  GTStatusWin::RankInfo *v2; // eax@3
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+0h] [bp-10h]@1

  v1 = this;
  __formal.dummy[0] = (char)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStatusWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStatusWin::_vftable_;
  if ( this->m_SortPradicationFunc.baseclass_0.baseclass_0.manager )
    this->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = (void *)this->m_SortPradicationFunc.baseclass_0.baseclass_0.manager(
                                                                                    (boost::detail::function::any_pointer)this->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                                                                                    destroy_functor_tag);
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v2 = *(GTStatusWin::RankInfo **)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
  {
    std::_Destroy_range<std::allocator<GTStatusWin::RankInfo>>(
      v2,
      v1->m_vecRankInfos.baseclass_0._Mylast,
      &v1->m_vecRankInfos.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecRankInfos.baseclass_0._Mylast = 0;
  v1->m_vecRankInfos.baseclass_0._Myend = 0;
  if ( v1->m_strPlayerName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_strPlayerName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_strPlayerName.baseclass_0._Myres = 15;
  v1->m_strPlayerName.baseclass_0._Mysize = 0;
  v1->m_strPlayerName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9B9050: using guessed type int (__stdcall *GTStatusWin___vftable_)(int uiFlags);
// 9B906C: using guessed type int (__thiscall *GTStatusWin___vftable_)(void *p, char);

//----- (005D49F0) --------------------------------------------------------
GTStatusWin *__cdecl GTStatusWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GTStatusWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GTStatusWin::GTStatusWin((GTStatusWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GTStatusWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005D4B20) --------------------------------------------------------
void __thiscall GTStatusWin::Clear(GTStatusWin *this)
{
  GTStatusWin *v1; // esi@1
  GTStatusWin::RankInfo *v2; // eax@1
  GTStatusWin::RankInfo *v3; // ecx@1
  GTStatusWin::RankInfo *v4; // edi@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = this->m_vecRankInfos.baseclass_0._Mylast;
  v3 = *(GTStatusWin::RankInfo **)&this->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    v4 = std::_Move<GTStatusWin::RankInfo___GTStatusWin::RankInfo__>(v2, v2, v3, __formal);
    std::_Destroy_range<std::allocator<GTStatusWin::RankInfo>>(
      v4,
      v1->m_vecRankInfos.baseclass_0._Mylast,
      &v1->m_vecRankInfos.baseclass_0._Alval,
      __formal);
    v1->m_vecRankInfos.baseclass_0._Mylast = v4;
  }
  SlideListWin::RemoveAllList(v1->m_pkGTScoreList);
  SlideListWin::UpdateViewList(v1->m_pkGTScoreList);
}

//----- (005D4B90) --------------------------------------------------------
bool __thiscall GTStatusWin::Create(GTStatusWin *this, PgFrameWork *pkFrameWork)
{
  GTStatusWin *v2; // esi@1
  bool result; // al@6
  NiTexturePalette *v4; // ebx@7
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  int v8; // edi@16
  int v9; // ebx@16
  NiSourceTexture *v10; // eax@16
  PgSprData *v11; // eax@19
  PgSprData::PgHitTester *v12; // eax@19
  void *v13; // edx@19
  PgFont *v14; // eax@19
  PgWinText *v15; // eax@19
  NiRefObjectVtbl *v16; // edx@19
  char *v17; // eax@19
  PgSprData *v18; // eax@19
  PgSprData *v19; // eax@19
  ColumnBut *v20; // eax@19
  PgSprData *v21; // edx@19
  PgSprData::PgHitTester *v22; // eax@19
  void *v23; // edx@19
  PgFont *v24; // eax@19
  PgWinText *v25; // eax@19
  char *v26; // eax@19
  NiPointer<PgSprData::PgHitTester> *v27; // ecx@19
  void *v28; // eax@19
  PgFont *v29; // eax@19
  PgWinText *v30; // eax@19
  char *v31; // eax@19
  NiPointer<PgSprData::PgHitTester> *v32; // ecx@19
  void *v33; // eax@19
  PgFont *v34; // eax@19
  PgWinText *v35; // eax@19
  char *v36; // eax@19
  SLWCreateInfo::Item *v37; // eax@19
  void *v38; // eax@26
  char *v39; // eax@26
  char *v40; // ecx@26
  char v41; // dl@27
  unsigned int v42; // eax@30
  PgSprData *v43; // ecx@30
  PgSprData *v44; // eax@33
  SlideListWin *v45; // eax@33
  PgSprData *v46; // eax@33
  SlideBar *v47; // eax@33
  unsigned int v48; // eax@33
  void *v49; // ecx@33
  int (*v50)(void); // eax@33
  int v51; // eax@33
  int v52; // eax@33
  PgSprData::PgHitTester *v53; // eax@33
  unsigned int v54; // edx@33
  PgFont *v55; // eax@33
  PgWinText *v56; // eax@33
  NiRefObjectVtbl *v57; // edx@33
  char *v58; // eax@33
  PgSprData::PgHitTester *v59; // eax@33
  unsigned int v60; // edx@33
  PgFont *v61; // eax@33
  PgWinText *v62; // eax@33
  NiRefObjectVtbl *v63; // edx@33
  char *v64; // eax@33
  PgSprData::PgHitTester *v65; // eax@33
  unsigned int v66; // edx@33
  PgFont *v67; // eax@33
  PgWinText *v68; // eax@33
  NiRefObjectVtbl *v69; // edx@33
  char *v70; // eax@33
  PgSprData::PgHitTester *v71; // eax@33
  unsigned int v72; // edx@33
  PgFont *v73; // eax@33
  PgWinText *v74; // eax@33
  NiRefObjectVtbl *v75; // edx@33
  char *v76; // eax@33
  PgSprData::PgHitTester *v77; // eax@33
  unsigned int v78; // edx@33
  PgFont *v79; // eax@33
  PgWinText *v80; // eax@33
  NiRefObjectVtbl *v81; // edx@33
  char *v82; // eax@33
  PgSprData::PgHitTester *v83; // eax@33
  unsigned int v84; // edx@33
  PgFont *v85; // eax@33
  PgWinText *v86; // eax@33
  NiRefObjectVtbl *v87; // edx@33
  char *v88; // eax@33
  PgSprData::PgHitTester *v89; // eax@33
  unsigned int v90; // edx@33
  PgFont *v91; // eax@33
  PgWinText *v92; // eax@33
  NiRefObjectVtbl *v93; // edx@33
  char *v94; // eax@33
  void *v95; // eax@33
  NiRefObjectVtbl *v96; // edx@33
  PgSprData::PgHitTester *v97; // eax@35
  unsigned int v98; // edx@35
  PgFont *v99; // eax@35
  PgWinText *v100; // eax@35
  PgSprData::PgHitTester *v101; // eax@35
  unsigned int v102; // edx@35
  PgFont *v103; // eax@35
  PgWinText *v104; // eax@35
  PgSprData::PgHitTester *v105; // eax@35
  unsigned int v106; // edx@35
  PgFont *v107; // eax@35
  PgWinText *v108; // eax@35
  PgSprData::PgHitTester *v109; // eax@35
  unsigned int v110; // edx@35
  PgFont *v111; // eax@35
  PgWinText *v112; // eax@35
  NiNode *v113; // esi@37
  const char *v114; // [sp+BCh] [bp-84h]@17
  int *v115; // [sp+C0h] [bp-80h]@17
  int *v116; // [sp+C4h] [bp-7Ch]@17
  NiSourceTexture *v117; // [sp+C8h] [bp-78h]@17
  unsigned int v118; // [sp+CCh] [bp-74h]@1
  SLWCreateInfo kCreateInfo; // [sp+DCh] [bp-64h]@19
  NiSourceTexture *pkTexture; // [sp+F8h] [bp-48h]@1
  NiSourceTexture *pkTexture8; // [sp+FCh] [bp-44h]@26
  unsigned int i; // [sp+100h] [bp-40h]@19
  NiPointer<NiNode> spNode; // [sp+104h] [bp-3Ch]@1
  int uiLeft; // [sp+108h] [bp-38h]@10
  int uiTop; // [sp+10Ch] [bp-34h]@10
  PgSprData *pCIItem; // [sp+110h] [bp-30h]@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+114h] [bp-2Ch]@19
  unsigned int v128; // [sp+130h] [bp-10h]@1
  int v129; // [sp+13Ch] [bp-4h]@1
  int v130; // [sp+140h] [bp+0h]@1

  v128 = (unsigned int)&v130 ^ __security_cookie;
  v118 = (unsigned int)&v130 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v129 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v129 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildTBattleStatus.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, pkFrameWork, "GTStatusWin", 0) )
  {
    v8 = uiLeft;
    v9 = uiTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v117 = v10;
      v116 = &uiTop;
      v115 = &uiLeft;
      v114 = "Theme";
    }
    else
    {
      v117 = 0;
      v116 = &uiTop;
      v115 = &uiLeft;
      v114 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v114, v115, v116, v117);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v13 = (void *)v12->m_uiWidth;
    i = v12->m_uiHeight;
    pCIItem = (PgSprData *)v13;
    v14 = Font::Get(0);
    v15 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            (unsigned int)pCIItem,
            i,
            v14,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v15;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v16[122].__vecDelDtor)(v15, 5, v118);
    i = (unsigned int)&pCIItem->baseclass_0.vfptr[118];
    v17 = TextData2::Get(0x34A29797u);
    (*(void (__thiscall **)(PgSprData *, char *))i)(pCIItem, v17);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Tab01Text");
    v20 = ColumnBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v21 = pCIItem;
    v2->m_pkTabAll = v20;
    v22 = v21->m_akHitTester.m_pBase->m_pObject;
    v23 = (void *)v22->m_uiWidth;
    i = v22->m_uiHeight;
    pCIItem = (PgSprData *)v23;
    v24 = Font::Get(MAIN_MENU);
    v25 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pCIItem,
            i,
            v24,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkTextTabAll = v25;
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    i = (unsigned int)&v2->m_pkTextTabAll->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v26 = TextData2::Get(0x3A533D48u);
    (*(void (__thiscall **)(PgWinText *, char *))i)(v2->m_pkTextTabAll, v26);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextTabAll->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkTextTabAll->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Tab02Text");
    v2->m_pkTabMy = ColumnBut::CreateWin(
                      uiLeft - v8,
                      uiTop - v9,
                      pCIItem,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      1u,
                      0);
    v27 = pCIItem->m_akHitTester.m_pBase;
    v28 = (void *)v27->m_pObject->m_uiWidth;
    i = v27->m_pObject->m_uiHeight;
    pCIItem = (PgSprData *)v28;
    v29 = Font::Get(MAIN_MENU);
    v30 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pCIItem,
            i,
            v29,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkTextTabMy = v30;
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v30,
      5u);
    i = (unsigned int)&v2->m_pkTextTabMy->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v31 = TextData2::Get(0xEE604948u);
    (*(void (__thiscall **)(PgWinText *, char *))i)(v2->m_pkTextTabMy, v31);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextTabMy->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Tab03Text");
    v2->m_pkTabEnemy = ColumnBut::CreateWin(
                         uiLeft - v8,
                         uiTop - v9,
                         pCIItem,
                         &v2->baseclass_0.baseclass_0.baseclass_0,
                         2u,
                         0);
    v32 = pCIItem->m_akHitTester.m_pBase;
    v33 = (void *)v32->m_pObject->m_uiWidth;
    i = v32->m_pObject->m_uiHeight;
    pCIItem = (PgSprData *)v33;
    v34 = Font::Get(MAIN_MENU);
    v35 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)pCIItem,
            i,
            v34,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkTextEnemy = v35;
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v35,
      5u);
    i = (unsigned int)&v2->m_pkTextEnemy->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v36 = TextData2::Get(0x33559A95u);
    (*(void (__thiscall **)(_DWORD, _DWORD))i)(v2->m_pkTextEnemy, v36);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextEnemy->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v129) = 1;
    v37 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v37->nItemType = 1;
    v37->pNode = spNode.m_pObject;
    pCIItem = (PgSprData *)v37;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Nor", 0xEu);
    LOBYTE(v129) = 2;
    i = (unsigned int)&pCIItem->m_akAlphaPropertyData.m_uiSize;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)&pCIItem->m_akAlphaPropertyData.m_uiSize,
      &thisa);
    LOBYTE(v129) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Click", 0x10u);
    LOBYTE(v129) = 3;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)i,
      &thisa);
    LOBYTE(v129) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Over", 0xFu);
    LOBYTE(v129) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)i,
      &thisa);
    LOBYTE(v129) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    i = 1;
    do
    {
      v38 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pCIItem = (PgSprData *)v38;
      *(_DWORD *)v38 = 2;
      v39 = fs("Column0%d");
      v40 = v39;
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      pkTexture8 = (NiSourceTexture *)(v39 + 1);
      do
        v41 = *v40++;
      while ( v41 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v39, v40 - (char *)pkTexture8);
      LOBYTE(v129) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)&pCIItem->m_akAlphaPropertyData.m_uiSize,
        &thisa);
      LOBYTE(v129) = 1;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      v42 = i;
      v43 = pCIItem;
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      pCIItem->baseclass_0.m_uiRefCount = (unsigned int)spNode.m_pObject;
      if ( v42 == 1 )
        LOBYTE(v43[1].baseclass_0.m_uiRefCount) = 1;
      i = v42 + 1;
    }
    while ( (signed int)(v42 + 1) < 8 );
    kCreateInfo.m_nOffX = 7;
    kCreateInfo.m_nOffY = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, pkTexture);
    v45 = SlideListWin::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            v44,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pkGTScoreList = v45;
    SlideListWin::UpdateViewList(v45);
    v46 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
    v47 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            v46,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkSlideBarScoreList = v47;
    v47->m_uiClickMsg = 3;
    v2->m_pkSlideBarScoreList->m_eType = 1;
    v48 = (unsigned int)v2->m_pkSlideBarScoreList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v49 = v2->m_pkSlideBarScoreList;
    i = v48;
    v50 = *(int (**)(void))(v48 + 168);
    pkTexture8 = (NiSourceTexture *)v49;
    v51 = v50();
    v52 = ((int (__stdcall *)(int))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v51);
    (*(void (__thiscall **)(SlideBar *, int))(i + 308))(v2->m_pkSlideBarScoreList, v52 - 4);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title01Click");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title01Over");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
    v53 = pCIItem->m_akHitTester.m_pBase->m_pObject;
    v54 = v53->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v53->m_uiHeight;
    i = v54;
    v55 = Font::Get(MAIN_MENU);
    v56 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            i,
            (unsigned int)pkTexture8,
            v55,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v57 = v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v56;
    v57[122].__vecDelDtor((NiRefObject *)v56, 5u);
    pkTexture8 = (NiSourceTexture *)&pCIItem->baseclass_0.vfptr[118];
    v58 = TextData2::Get(0x2F4F3F9Au);
    ((void (__thiscall *)(PgSprData *, char *))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pCIItem,
      v58);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title02Click");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title02Over");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 5u, 0, 0);
    v59 = pCIItem->m_akHitTester.m_pBase->m_pObject;
    v60 = v59->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v59->m_uiHeight;
    i = v60;
    v61 = Font::Get(MAIN_MENU);
    v62 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            i,
            (unsigned int)pkTexture8,
            v61,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v63 = v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v62;
    v63[122].__vecDelDtor((NiRefObject *)v62, 5u);
    pkTexture8 = (NiSourceTexture *)&pCIItem->baseclass_0.vfptr[118];
    v64 = TextData2::Get(0x2F59888Cu);
    ((void (__thiscall *)(PgSprData *, char *))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pCIItem,
      v64);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title03Click");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title03Over");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 6u, 0, 0);
    v65 = pCIItem->m_akHitTester.m_pBase->m_pObject;
    v66 = v65->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v65->m_uiHeight;
    i = v66;
    v67 = Font::Get(MAIN_MENU);
    v68 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            i,
            (unsigned int)pkTexture8,
            v67,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v69 = v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v68;
    v69[122].__vecDelDtor((NiRefObject *)v68, 5u);
    pkTexture8 = (NiSourceTexture *)&pCIItem->baseclass_0.vfptr[118];
    v70 = TextData2::Get(0x80948CECu);
    ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pCIItem,
      v70);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title04Click");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title04Over");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
    v71 = pCIItem->m_akHitTester.m_pBase->m_pObject;
    v72 = v71->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v71->m_uiHeight;
    i = v72;
    v73 = Font::Get(MAIN_MENU);
    v74 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            i,
            (unsigned int)pkTexture8,
            v73,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v75 = v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v74;
    v75[122].__vecDelDtor((NiRefObject *)v74, 5u);
    pkTexture8 = (NiSourceTexture *)&pCIItem->baseclass_0.vfptr[118];
    v76 = TextData2::Get(0xC1ECEAF0u);
    ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pCIItem,
      v76);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title05Click");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title05Over");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 8u, 0, 0);
    v77 = pCIItem->m_akHitTester.m_pBase->m_pObject;
    v78 = v77->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v77->m_uiHeight;
    i = v78;
    v79 = Font::Get(MAIN_MENU);
    v80 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            i,
            (unsigned int)pkTexture8,
            v79,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v81 = v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v80;
    v81[122].__vecDelDtor((NiRefObject *)v80, 5u);
    pkTexture8 = (NiSourceTexture *)&pCIItem->baseclass_0.vfptr[118];
    v82 = TextData2::Get(0x89F4F4DDu);
    ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pCIItem,
      v82);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title06Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title06Click");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title06Over");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0, 0);
    v83 = pCIItem->m_akHitTester.m_pBase->m_pObject;
    v84 = v83->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v83->m_uiHeight;
    i = v84;
    v85 = Font::Get(MAIN_MENU);
    v86 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            i,
            (unsigned int)pkTexture8,
            v85,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v87 = v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v86;
    v87[122].__vecDelDtor((NiRefObject *)v86, 5u);
    pkTexture8 = (NiSourceTexture *)&pCIItem->baseclass_0.vfptr[118];
    v88 = TextData2::Get(0x7C9FE4F5u);
    ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pCIItem,
      v88);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title07Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title07Click");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "Title07Over");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
    v89 = pCIItem->m_akHitTester.m_pBase->m_pObject;
    v90 = v89->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v89->m_uiHeight;
    i = v90;
    v91 = Font::Get(MAIN_MENU);
    v92 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            i,
            (unsigned int)pkTexture8,
            v91,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v93 = v92->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = (PgSprData *)v92;
    v93[122].__vecDelDtor((NiRefObject *)v92, 5u);
    pkTexture8 = (NiSourceTexture *)&pCIItem->baseclass_0.vfptr[118];
    v94 = TextData2::Get(0xCFDBDA42u);
    ((void (__thiscall *)(_DWORD, _DWORD))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
      pCIItem,
      v94);
    ((void (__stdcall *)(_DWORD))pCIItem->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MinNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "MinClick");
    PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "MinOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
    v95 = MenuTexMgr::GetTexture(4u);
    v96 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTexture8 = (NiSourceTexture *)v95;
    if ( ((int (__stdcall *)(_DWORD))v96[18].__vecDelDtor)("HelpLinkNor") )
    {
      pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
      PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    }
    v97 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildName01", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    v98 = v97->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v97->m_uiHeight;
    i = v98;
    v99 = Font::Get(0);
    v100 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             i,
             (unsigned int)pkTexture8,
             v99,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkMyGuildName = v100;
    ((void (__thiscall *)(PgWinText *))v100->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v100);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A0A);
    ((void (__stdcall *)(_DWORD))v2->m_pkMyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v101 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Score01", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    v102 = v101->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v101->m_uiHeight;
    i = v102;
    v103 = Font::Get(0);
    v104 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             i,
             (unsigned int)pkTexture8,
             v103,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkMyGuildScore = v104;
    v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v104,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A0B);
    ((void (__stdcall *)(_DWORD))v2->m_pkMyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v105 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildName02", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    v106 = v105->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v105->m_uiHeight;
    i = v106;
    v107 = Font::Get(0);
    v108 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             i,
             (unsigned int)pkTexture8,
             v107,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkEnemyGuildName = v108;
    v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v108,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A1E);
    ((void (__stdcall *)(_DWORD))v2->m_pkEnemyGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v109 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Score02", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    v110 = v109->m_uiWidth;
    pkTexture8 = (NiSourceTexture *)v109->m_uiHeight;
    i = v110;
    v111 = Font::Get(0);
    v112 = PgWinText::CreateWin(
             uiLeft - v8,
             uiTop - v9,
             i,
             (unsigned int)pkTexture8,
             v111,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkEnemyGuildScore = v112;
    v112->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v112,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkEnemyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B8A1F);
    ((void (__stdcall *)(_DWORD))v2->m_pkEnemyGuildScore->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__thiscall *)(GTStatusWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v129) = 0;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)pkTexture8);
      operator delete(*(void **)&kCreateInfo);
    }
    v113 = spNode.m_pObject;
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    v129 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v113 )
      v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v113, 1u);
    result = 1;
  }
  else
  {
    v7 = spNode.m_pObject;
    v129 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005D5DA0) --------------------------------------------------------
void __thiscall GTStatusWin::OnCommand(GTStatusWin *this, unsigned int wParam, int lParam)
{
  GTStatusWin *v3; // esi@1
  CClientGuild *v4; // eax@1
  PgWin *v5; // eax@34
  boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > v6; // [sp-Ch] [bp-14h]@14
  void *v7; // [sp-4h] [bp-Ch]@13
  D3DXCOLOR *v8; // [sp+0h] [bp-8h]@2

  v3 = this;
  v4 = GuildTask::GetGuild();
  switch ( wParam )
  {
    case 0u:
      v3->m_uiTabNum = 0;
      GTStatusWin::DisplayInfoSetting(v3);
      ((void (__stdcall *)(_DWORD, _DWORD))v3->m_pkTextTabAll->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
        &Color::m_kDxYellowColor,
        v8);
      v8 = &Color::m_kDxWhiteColor;
      goto LABEL_3;
    case 1u:
      if ( v4 && v4->m_bOpserver )
        return;
      v3->m_uiTabNum = 1;
      GTStatusWin::DisplayInfoSetting(v3);
      ((void (__stdcall *)(_DWORD, _DWORD))v3->m_pkTextTabAll->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
        &Color::m_kDxWhiteColor,
        v8);
      v8 = &Color::m_kDxYellowColor;
LABEL_3:
      ((void (__stdcall *)(_DWORD))v3->m_pkTextTabMy->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v8);
      v8 = &Color::m_kDxWhiteColor;
      goto LABEL_4;
    case 2u:
      if ( !v4 || !v4->m_bOpserver )
      {
        v3->m_uiTabNum = 2;
        GTStatusWin::DisplayInfoSetting(v3);
        ((void (__stdcall *)(_DWORD, _DWORD))v3->m_pkTextTabAll->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
          &Color::m_kDxWhiteColor,
          v8);
        ((void (__stdcall *)(_DWORD))v3->m_pkTextTabMy->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
        v8 = &Color::m_kDxYellowColor;
LABEL_4:
        ((void (__cdecl *)(_DWORD))v3->m_pkTextEnemy->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v8);
      }
      return;
    case 3u:
      GTStatusWin::OnSlideBar(v3);
      return;
    case 4u:
      if ( bTitle01 )
      {
        bTitle01 = 0;
        v7 = GuildListWin::GuildInfo::Low_GuildName;
      }
      else
      {
        bTitle01 = 1;
        v7 = GTRequestListWin::GuildInfo::High_GuildName;
      }
      goto LABEL_14;
    case 5u:
      if ( bTitle02 )
      {
        bTitle02 = 0;
        v7 = GTStatusWin::RankInfo::Low_Grade;
      }
      else
      {
        bTitle02 = 1;
        v7 = GTStatusWin::RankInfo::High_Grade;
      }
      goto LABEL_14;
    case 6u:
      if ( bTitle03 )
      {
        bTitle03 = 0;
        v7 = GTStatusWin::RankInfo::Low_IncreaseScore;
      }
      else
      {
        bTitle03 = 1;
        v7 = PkRealTiemRankWin::RankInfo::greater_Score;
      }
      goto LABEL_14;
    case 7u:
      if ( bTitle04 )
      {
        bTitle04 = 0;
        v7 = GTStatusWin::RankInfo::Low_DecreaseScore;
      }
      else
      {
        bTitle04 = 1;
        v7 = GTStatusWin::RankInfo::High_DecreaseScore;
      }
      goto LABEL_14;
    case 8u:
      if ( bTitle05 )
      {
        bTitle05 = 0;
        v7 = PkRealTiemRankWin::RankInfo::Less_Rank;
      }
      else
      {
        bTitle05 = 1;
        v7 = GTStatusWin::RankInfo::High_KillCount;
      }
      goto LABEL_14;
    case 9u:
      if ( bTitle06 )
      {
        bTitle06 = 0;
        v7 = GTStatusWin::RankInfo::Low_DieCount;
      }
      else
      {
        bTitle06 = 1;
        v7 = GTStatusWin::RankInfo::High_DieCount;
      }
      goto LABEL_14;
    case 0xAu:
      if ( bTitle07 )
      {
        bTitle07 = 0;
        v7 = GTStatusWin::RankInfo::Low_CaptureFlag;
      }
      else
      {
        bTitle07 = 1;
        v7 = GTStatusWin::RankInfo::High_CaptureFlag;
      }
LABEL_14:
      boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v3->m_SortPradicationFunc,
        (bool (__cdecl *)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))v7);
      boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>(
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v6,
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v3->m_SortPradicationFunc);
      std::sort<std::_Vector_iterator<std::_Vector_val<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>>_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
        *(std::_Vector_iterator<std::_Vector_val<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > > *)&v3->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0],
        (std::_Vector_iterator<std::_Vector_val<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > >)v3->m_vecRankInfos.baseclass_0._Mylast,
        v6);
      GTStatusWin::DisplayInfoSetting(v3);
      break;
    case 0xBu:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
      v5 = (PgWin *)GuildTask::GetGTStatusMiniWin();
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v5);
      break;
    case 0xCu:
      GTStatusWin::OnHelpLink(v3);
      break;
    default:
      return;
  }
}

//----- (005D6080) --------------------------------------------------------
bool __thiscall GTStatusWin::SetRankInfo(GTStatusWin *this, TOURNAMENT_PLAYER_SCORE *pkCmd, unsigned int Reg)
{
  int v3; // ecx@1
  int v4; // edx@1
  int v5; // eax@1
  int v6; // ecx@1
  int v7; // eax@1
  char v8; // dl@2
  unsigned int v9; // ecx@3
  unsigned int v10; // edx@3
  unsigned int v11; // ecx@3
  unsigned int v12; // edx@3
  int v13; // esi@3
  signed int v14; // ecx@3
  unsigned int v15; // ebx@3
  int v16; // esi@5
  const char *v17; // edx@5
  unsigned int v18; // ecx@7
  const char *v19; // eax@10
  unsigned int v20; // eax@13
  GTStatusWin *thisa; // [sp+0h] [bp-6Ch]@1
  int v23; // [sp+4h] [bp-68h]@4
  char bEqualData; // [sp+Bh] [bp-61h]@3
  GTStatusWin::RankInfo kRankInfo; // [sp+Ch] [bp-60h]@1
  char acName[21]; // [sp+44h] [bp-28h]@1
  unsigned int v27; // [sp+5Ch] [bp-10h]@1
  int v28; // [sp+68h] [bp-4h]@1
  int v29; // [sp+6Ch] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  thisa = this;
  kRankInfo.m_strName.baseclass_0._Myres = 15;
  kRankInfo.m_strName.baseclass_0._Mysize = 0;
  kRankInfo.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v28 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kRankInfo.m_strName, &byte_9788EB, 0);
  v3 = *(_DWORD *)&pkCmd->CharID.n5_name[4];
  v4 = *(_DWORD *)&pkCmd->CharID.n5_name[8];
  *(_DWORD *)acName = *(_DWORD *)&pkCmd->CharID.n5_name[0];
  v5 = *(_DWORD *)&pkCmd->CharID.n5_name[12];
  *(_DWORD *)&acName[4] = v3;
  v6 = *(_DWORD *)&pkCmd->CharID.n5_name[16];
  *(_DWORD *)&acName[12] = v5;
  v7 = (int)acName;
  *(_DWORD *)&acName[16] = v6;
  kRankInfo.m_unIncreaseScore = 0;
  kRankInfo.m_unDecreaseScore = 0;
  kRankInfo.m_unDieCount = 0;
  kRankInfo.m_unKillCount = 0;
  kRankInfo.m_unGrade = 0;
  kRankInfo.m_unCaptureFlag = 0;
  kRankInfo.m_kGuildReg = 0;
  *(_DWORD *)&acName[8] = v4;
  acName[20] = 0;
  do
    v8 = *(_BYTE *)v7++;
  while ( v8 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kRankInfo.m_strName,
    acName,
    v7 - (_DWORD)&acName[1]);
  v9 = pkCmd->unDecreaseScore;
  v10 = pkCmd->unDieCount;
  kRankInfo.m_unIncreaseScore = pkCmd->unIncreaseScore;
  kRankInfo.m_unKillCount = pkCmd->unKillCount;
  kRankInfo.m_unDecreaseScore = v9;
  v11 = pkCmd->unGuildGreade;
  kRankInfo.m_unDieCount = v10;
  v12 = pkCmd->unCaptureFlag;
  v13 = *(_DWORD *)&thisa->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
  kRankInfo.m_kGuildReg = Reg;
  kRankInfo.m_unGrade = v11;
  v14 = (signed int)((char *)thisa->m_vecRankInfos.baseclass_0._Mylast - v13);
  kRankInfo.m_unCaptureFlag = v12;
  v15 = 0;
  bEqualData = 0;
  if ( !(v14 / 56) )
    goto LABEL_27;
  v23 = 0;
  if ( (unsigned int)(v14 / 56) <= 0 )
    std::_Xout_of_range("invalid vector<T> subscript");
  do
  {
    v16 = v23 + v13;
    v17 = *(const char **)&kRankInfo;
    if ( kRankInfo.m_strName.baseclass_0._Myres < 0x10 )
      v17 = (const char *)&kRankInfo;
    v18 = kRankInfo.m_strName.baseclass_0._Mysize;
    if ( *(_DWORD *)(v16 + 16) < kRankInfo.m_strName.baseclass_0._Mysize )
      v18 = *(_DWORD *)(v16 + 16);
    if ( *(_DWORD *)(v16 + 20) < 0x10u )
      v19 = (const char *)v16;
    else
      v19 = *(const char **)v16;
    if ( !std::char_traits<char>::compare(v19, v17, v18) )
    {
      v20 = *(_DWORD *)(v16 + 16);
      if ( v20 >= kRankInfo.m_strName.baseclass_0._Mysize )
      {
        if ( v20 == kRankInfo.m_strName.baseclass_0._Mysize )
        {
          bEqualData = 1;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v16,
            &kRankInfo.m_strName,
            v20 != kRankInfo.m_strName.baseclass_0._Mysize,
            0xFFFFFFFFu);
          *(_DWORD *)(v16 + 28) = kRankInfo.m_unIncreaseScore;
          *(_DWORD *)(v16 + 32) = kRankInfo.m_unDecreaseScore;
          *(_DWORD *)(v16 + 36) = kRankInfo.m_unDieCount;
          *(_DWORD *)(v16 + 40) = kRankInfo.m_unKillCount;
          *(_DWORD *)(v16 + 44) = kRankInfo.m_unGrade;
          *(_DWORD *)(v16 + 48) = kRankInfo.m_unCaptureFlag;
          *(_DWORD *)(v16 + 52) = kRankInfo.m_kGuildReg;
        }
      }
    }
    v13 = *(_DWORD *)&thisa->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0];
    v23 += 56;
    ++v15;
  }
  while ( (signed int)((char *)thisa->m_vecRankInfos.baseclass_0._Mylast - v13) / 56 > v15 );
  if ( !bEqualData )
LABEL_27:
    std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::push_back(
      &thisa->m_vecRankInfos,
      &kRankInfo);
  if ( !thisa->m_bGame )
  {
    std::_Sort<GTStatusWin::RankInfo___int_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
      *(GTStatusWin::RankInfo **)&thisa->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0],
      thisa->m_vecRankInfos.baseclass_0._Mylast,
      (signed int)((char *)thisa->m_vecRankInfos.baseclass_0._Mylast
                 - *(_DWORD *)&thisa->m_vecRankInfos.baseclass_0.___u0.baseclass_0.dummy[0])
    / 56,
      (bool (__cdecl *)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))PkRealTiemRankWin::RankInfo::greater_Score);
    thisa->m_bGame = 1;
  }
  GTStatusWin::DisplayInfoSetting(thisa);
  if ( kRankInfo.m_strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kRankInfo);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (005D62E0) --------------------------------------------------------
void *__thiscall GTStatusMiniWin::_vector_deleting_destructor_(GTStatusMiniWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStatusMiniWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStatusMiniWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B8E10: using guessed type int (__stdcall *GTStatusMiniWin___vftable_)(int uiFlags);
// 9B8E2C: using guessed type int (__thiscall *GTStatusMiniWin___vftable_)(void *p, char);

//----- (005D6320) --------------------------------------------------------
GTStatusWin::RankInfo *__thiscall std::allocator<GTStatusWin::RankInfo>::allocate(std::allocator<GTStatusWin::RankInfo> *this, unsigned int _Count)
{
  GTStatusWin::RankInfo *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x4924924 || (result = (GTStatusWin::RankInfo *)operator new(56 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (005D6390) --------------------------------------------------------
void __thiscall boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *this, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *f)
{
  this->baseclass_0.baseclass_0.manager = 0;
  this->baseclass_0.baseclass_0.functor.obj_ptr = 0;
  this->baseclass_0.invoker = 0;
  if ( f->baseclass_0.baseclass_0.manager )
  {
    this->baseclass_0.invoker = f->baseclass_0.invoker;
    this->baseclass_0.baseclass_0.manager = f->baseclass_0.baseclass_0.manager;
    this->baseclass_0.baseclass_0.functor.obj_ptr = (void *)f->baseclass_0.baseclass_0.manager(
                                                              f->baseclass_0.baseclass_0.functor.obj_ptr,
                                                              0);
  }
}

//----- (005D63D0) --------------------------------------------------------
bool __cdecl GTRequestListWin::GuildInfo::High_GuildName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  GuildListWin::GuildInfo *v2; // eax@1

  v2 = lhw;
  if ( lhw->m_strGuildName.baseclass_0._Myres >= 0x10 )
    v2 = *(GuildListWin::GuildInfo **)&lhw->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &rhw->m_strGuildName,
           0,
           rhw->m_strGuildName.baseclass_0._Mysize,
           v2->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy,
           lhw->m_strGuildName.baseclass_0._Mysize) < 0;
}

//----- (005D6400) --------------------------------------------------------
GTStatusWin::RankInfo *__cdecl std::_Move<GTStatusWin::RankInfo___GTStatusWin::RankInfo__>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  GTStatusWin::RankInfo *v4; // edi@2
  char *v5; // esi@2
  unsigned int v6; // ecx@3
  GTStatusWin::RankInfo *result; // eax@4

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = _Dest;
    v5 = (char *)&_First->m_unDecreaseScore;
    do
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v5 - 32),
        0,
        0xFFFFFFFFu);
      v4->m_unIncreaseScore = *((_DWORD *)v5 - 1);
      v4->m_unDecreaseScore = *(_DWORD *)v5;
      v4->m_unDieCount = *((_DWORD *)v5 + 1);
      v4->m_unKillCount = *((_DWORD *)v5 + 2);
      v4->m_unGrade = *((_DWORD *)v5 + 3);
      v4->m_unCaptureFlag = *((_DWORD *)v5 + 4);
      v6 = *((_DWORD *)v5 + 5);
      v5 += 56;
      v4->m_kGuildReg = v6;
      ++v4;
    }
    while ( (GTStatusWin::RankInfo *)(v5 - 32) != _Last );
    result = v4;
  }
  return result;
}

//----- (005D6470) --------------------------------------------------------
void __cdecl std::_Destroy_range<std::allocator<GTStatusWin::RankInfo>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, std::allocator<GTStatusWin::RankInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  GTStatusWin::RankInfo *i; // esi@1

  for ( i = _First; i != _Last; ++i )
  {
    if ( i->m_strName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&i->m_strName.baseclass_0.___u0.baseclass_0.dummy[0]);
    i->m_strName.baseclass_0._Myres = 15;
    i->m_strName.baseclass_0._Mysize = 0;
    i->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
}

//----- (005D64B0) --------------------------------------------------------
void __cdecl std::_Construct<GTStatusWin::RankInfo_GTStatusWin::RankInfo_const__>(GTStatusWin::RankInfo *_Ptr, GTStatusWin::RankInfo *_Val)
{
  if ( _Ptr )
  {
    _Ptr->m_strName.baseclass_0._Myres = 15;
    _Ptr->m_strName.baseclass_0._Mysize = 0;
    _Ptr->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &_Ptr->m_strName,
      &_Val->m_strName,
      0,
      0xFFFFFFFFu);
    _Ptr->m_unIncreaseScore = _Val->m_unIncreaseScore;
    _Ptr->m_unDecreaseScore = _Val->m_unDecreaseScore;
    _Ptr->m_unDieCount = _Val->m_unDieCount;
    _Ptr->m_unKillCount = _Val->m_unKillCount;
    _Ptr->m_unGrade = _Val->m_unGrade;
    _Ptr->m_unCaptureFlag = _Val->m_unCaptureFlag;
    _Ptr->m_kGuildReg = _Val->m_kGuildReg;
  }
}

//----- (005D6540) --------------------------------------------------------
void __cdecl std::swap<GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_Left, GTStatusWin::RankInfo *_Right)
{
  unsigned int v2; // ecx@1
  unsigned int v3; // edx@1
  unsigned int v4; // eax@1
  unsigned int v5; // ecx@1
  unsigned int v6; // edx@1
  unsigned int v7; // eax@1
  bool v8; // cf@1
  unsigned int v9; // ecx@1
  unsigned int v10; // edx@1
  unsigned int v11; // eax@1
  unsigned int v12; // ecx@1
  unsigned int v13; // edx@1
  unsigned int v14; // eax@1
  GTStatusWin::RankInfo _Tmp; // [sp+0h] [bp-48h]@1
  unsigned int v16; // [sp+38h] [bp-10h]@1
  int v17; // [sp+44h] [bp-4h]@1
  int v18; // [sp+48h] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  _Tmp.m_strName.baseclass_0._Myres = 15;
  _Tmp.m_strName.baseclass_0._Mysize = 0;
  _Tmp.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Tmp.m_strName,
    &_Left->m_strName,
    0,
    0xFFFFFFFFu);
  v2 = _Left->m_unDecreaseScore;
  v3 = _Left->m_unDieCount;
  _Tmp.m_unIncreaseScore = _Left->m_unIncreaseScore;
  v4 = _Left->m_unKillCount;
  _Tmp.m_unDecreaseScore = v2;
  v5 = _Left->m_unGrade;
  _Tmp.m_unDieCount = v3;
  v6 = _Left->m_unCaptureFlag;
  _Tmp.m_unKillCount = v4;
  v7 = _Left->m_kGuildReg;
  _Tmp.m_unGrade = v5;
  _Tmp.m_unCaptureFlag = v6;
  _Tmp.m_kGuildReg = v7;
  v17 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Left->m_strName,
    &_Right->m_strName,
    0,
    0xFFFFFFFFu);
  _Left->m_unIncreaseScore = _Right->m_unIncreaseScore;
  _Left->m_unDecreaseScore = _Right->m_unDecreaseScore;
  _Left->m_unDieCount = _Right->m_unDieCount;
  _Left->m_unKillCount = _Right->m_unKillCount;
  _Left->m_unGrade = _Right->m_unGrade;
  _Left->m_unCaptureFlag = _Right->m_unCaptureFlag;
  _Left->m_kGuildReg = _Right->m_kGuildReg;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Right->m_strName,
    &_Tmp.m_strName,
    0,
    0xFFFFFFFFu);
  v8 = _Tmp.m_strName.baseclass_0._Myres < 0x10;
  v9 = _Tmp.m_unDecreaseScore;
  v10 = _Tmp.m_unDieCount;
  _Right->m_unIncreaseScore = _Tmp.m_unIncreaseScore;
  v11 = _Tmp.m_unKillCount;
  _Right->m_unDecreaseScore = v9;
  v12 = _Tmp.m_unGrade;
  _Right->m_unDieCount = v10;
  v13 = _Tmp.m_unCaptureFlag;
  _Right->m_unKillCount = v11;
  v14 = _Tmp.m_kGuildReg;
  _Right->m_unGrade = v12;
  _Right->m_unCaptureFlag = v13;
  _Right->m_kGuildReg = v14;
  if ( !v8 )
    operator delete(*(void **)&_Tmp);
}
// A85C00: using guessed type int __security_cookie;

//----- (005D6660) --------------------------------------------------------
void __cdecl std::_Push_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, int _Hole, int _Top, GTStatusWin::RankInfo *_Val, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred)
{
  int v5; // edi@1
  int v6; // ebx@1
  GTStatusWin::RankInfo *v7; // esi@3
  GTStatusWin::RankInfo *v8; // edi@4
  int v9; // eax@5
  GTStatusWin::RankInfo *v10; // edi@5
  GTStatusWin::RankInfo *v11; // esi@5
  boost::detail::function::any_pointer (__cdecl *v12)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // eax@5
  std::exception this; // [sp+0h] [bp-18h]@8
  int i; // [sp+14h] [bp-4h]@1

  v5 = _Hole;
  v6 = (_Hole - 1) / 2;
  for ( i = 0; _Top < v5; v6 = (v6 - 1) / 2 )
  {
    if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      _Hole = (int)"call to empty boost::function";
      std::exception::exception(&this, (const char *const *)&_Hole);
      this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
      LOBYTE(i) = 1;
      boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
    }
    v7 = &_First[v6];
    if ( !_Pred.baseclass_0.invoker(
            (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
            &_First[v6],
            _Val) )
      break;
    v8 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_strName,
      &v7->m_strName,
      0,
      0xFFFFFFFFu);
    v8->m_unIncreaseScore = v7->m_unIncreaseScore;
    v8->m_unDecreaseScore = v7->m_unDecreaseScore;
    v8->m_unDieCount = v7->m_unDieCount;
    v8->m_unKillCount = v7->m_unKillCount;
    v8->m_unGrade = v7->m_unGrade;
    v8->m_unCaptureFlag = v7->m_unCaptureFlag;
    v8->m_kGuildReg = v7->m_kGuildReg;
    v5 = v6;
  }
  v9 = 7 * v5;
  v10 = _Val;
  v11 = &_First[8 * v9 / 0x38u];
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_First[8 * v9 / 0x38u].m_strName,
    &_Val->m_strName,
    0,
    0xFFFFFFFFu);
  v11->m_unIncreaseScore = v10->m_unIncreaseScore;
  v11->m_unDecreaseScore = v10->m_unDecreaseScore;
  v11->m_unDieCount = v10->m_unDieCount;
  v11->m_unKillCount = v10->m_unKillCount;
  v11->m_unGrade = v10->m_unGrade;
  v12 = _Pred.baseclass_0.baseclass_0.manager;
  v11->m_unCaptureFlag = v10->m_unCaptureFlag;
  v11->m_kGuildReg = v10->m_kGuildReg;
  i = -1;
  if ( v12 )
    v12(_Pred.baseclass_0.baseclass_0.functor, destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (005D67D0) --------------------------------------------------------
GTStatusWin::RankInfo *__cdecl std::_Move_backward<GTStatusWin::RankInfo___GTStatusWin::RankInfo__>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  GTStatusWin::RankInfo *v4; // edi@2
  char *v5; // esi@2
  GTStatusWin::RankInfo *result; // eax@4

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = _Dest;
    v5 = (char *)&_Last->m_unDecreaseScore;
    do
    {
      v5 -= 56;
      --v4;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v5 - 32),
        0,
        0xFFFFFFFFu);
      v4->m_unIncreaseScore = *((_DWORD *)v5 - 1);
      v4->m_unDecreaseScore = *(_DWORD *)v5;
      v4->m_unDieCount = *((_DWORD *)v5 + 1);
      v4->m_unKillCount = *((_DWORD *)v5 + 2);
      v4->m_unGrade = *((_DWORD *)v5 + 3);
      v4->m_unCaptureFlag = *((_DWORD *)v5 + 4);
      v4->m_kGuildReg = *((_DWORD *)v5 + 5);
    }
    while ( (GTStatusWin::RankInfo *)(v5 - 32) != _First );
    result = v4;
  }
  return result;
}

//----- (005D6840) --------------------------------------------------------
void __cdecl std::_Push_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, int _Hole, int _Top, GTStatusWin::RankInfo *_Val, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))
{
  int v5; // edi@1
  int i; // ebx@1
  GTStatusWin::RankInfo *v7; // esi@2
  GTStatusWin::RankInfo *v8; // edi@3
  GTStatusWin::RankInfo *v9; // esi@4

  v5 = _Hole;
  for ( i = (_Hole - 1) / 2; _Top < v5; i = (i - 1) / 2 )
  {
    v7 = &_First[i];
    if ( !_Pred(&_First[i], _Val) )
      break;
    v8 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_strName,
      &v7->m_strName,
      0,
      0xFFFFFFFFu);
    v8->m_unIncreaseScore = v7->m_unIncreaseScore;
    v8->m_unDecreaseScore = v7->m_unDecreaseScore;
    v8->m_unDieCount = v7->m_unDieCount;
    v8->m_unKillCount = v7->m_unKillCount;
    v8->m_unGrade = v7->m_unGrade;
    v8->m_unCaptureFlag = v7->m_unCaptureFlag;
    v8->m_kGuildReg = v7->m_kGuildReg;
    v5 = i;
  }
  v9 = &_First[v5];
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v9->m_strName,
    &_Val->m_strName,
    0,
    0xFFFFFFFFu);
  v9->m_unIncreaseScore = _Val->m_unIncreaseScore;
  v9->m_unDecreaseScore = _Val->m_unDecreaseScore;
  v9->m_unDieCount = _Val->m_unDieCount;
  v9->m_unKillCount = _Val->m_unKillCount;
  v9->m_unGrade = _Val->m_unGrade;
  v9->m_unCaptureFlag = _Val->m_unCaptureFlag;
  v9->m_kGuildReg = _Val->m_kGuildReg;
}

//----- (005D6930) --------------------------------------------------------
void __cdecl std::_Cons_val<std::allocator<GTStatusWin::RankInfo>_GTStatusWin::RankInfo_GTStatusWin::RankInfo__>(std::allocator<GTStatusWin::RankInfo> *_Alval, GTStatusWin::RankInfo *_Pdest, GTStatusWin::RankInfo *_Src)
{
  if ( _Pdest )
  {
    _Pdest->m_strName.baseclass_0._Myres = 15;
    _Pdest->m_strName.baseclass_0._Mysize = 0;
    _Pdest->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &_Pdest->m_strName,
      &_Src->m_strName,
      0,
      0xFFFFFFFFu);
    _Pdest->m_unIncreaseScore = _Src->m_unIncreaseScore;
    _Pdest->m_unDecreaseScore = _Src->m_unDecreaseScore;
    _Pdest->m_unDieCount = _Src->m_unDieCount;
    _Pdest->m_unKillCount = _Src->m_unKillCount;
    _Pdest->m_unGrade = _Src->m_unGrade;
    _Pdest->m_unCaptureFlag = _Src->m_unCaptureFlag;
    _Pdest->m_kGuildReg = _Src->m_kGuildReg;
  }
}

//----- (005D69C0) --------------------------------------------------------
GTStatusWin::RankInfo *__cdecl std::_Uninit_move<GTStatusWin::RankInfo___GTStatusWin::RankInfo___std::allocator<GTStatusWin::RankInfo>_GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, std::allocator<GTStatusWin::RankInfo> *_Al, GTStatusWin::RankInfo *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  GTStatusWin::RankInfo *v6; // esi@1
  GTStatusWin::RankInfo *v7; // edi@1
  int v9; // [sp-10h] [bp-24h]@1
  GTStatusWin::RankInfo *_Next; // [sp+0h] [bp-14h]@1
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v11 = &v9;
  v6 = _Dest;
  v7 = _First;
  _Next = _Dest;
  v12 = 0;
  while ( v7 != _Last )
  {
    LOBYTE(v12) = 1;
    if ( v6 )
    {
      v6->m_strName.baseclass_0._Myres = 15;
      v6->m_strName.baseclass_0._Mysize = 0;
      v6->m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v6->m_strName,
        &v7->m_strName,
        0,
        0xFFFFFFFFu);
      v6->m_unIncreaseScore = v7->m_unIncreaseScore;
      v6->m_unDecreaseScore = v7->m_unDecreaseScore;
      v6->m_unDieCount = v7->m_unDieCount;
      v6->m_unKillCount = v7->m_unKillCount;
      v6->m_unGrade = v7->m_unGrade;
      v6->m_unCaptureFlag = v7->m_unCaptureFlag;
      v6->m_kGuildReg = v7->m_kGuildReg;
    }
    ++v6;
    LOBYTE(v12) = 0;
    ++v7;
  }
  return v6;
}

//----- (005D6AA0) --------------------------------------------------------
void __cdecl std::_Med3<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Mid, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred)
{
  std::exception this; // [sp+0h] [bp-1Ch]@2
  char *_What; // [sp+Ch] [bp-10h]@2
  int v6; // [sp+18h] [bp-4h]@1

  v6 = 0;
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 1;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Mid,
         _First) )
    std::swap<GTStatusWin::RankInfo>(_Mid, _First);
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 2;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Last,
         _Mid) )
    std::swap<GTStatusWin::RankInfo>(_Last, _Mid);
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 3;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Mid,
         _First) )
    std::swap<GTStatusWin::RankInfo>(_Mid, _First);
  v6 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (005D6BE0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, int _Hole, int _Bottom, GTStatusWin::RankInfo *_Val, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred)
{
  int v5; // edi@1
  int v6; // esi@1
  int v7; // ebx@1
  bool v8; // zf@1
  GTStatusWin::RankInfo *v9; // esi@5
  GTStatusWin::RankInfo *v10; // edi@5
  GTStatusWin::RankInfo *v11; // ebx@8
  GTStatusWin::RankInfo *v12; // edi@8
  boost::detail::function::any_pointer (__cdecl *v13)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-38h]@9
  int v14; // [sp-18h] [bp-34h]@9
  bool (__cdecl *v15)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-14h] [bp-30h]@9
  std::exception this; // [sp+0h] [bp-1Ch]@14
  int _Top; // [sp+Ch] [bp-10h]@1
  int v18; // [sp+18h] [bp-4h]@1

  v5 = _Hole;
  v6 = _Bottom;
  v7 = 2 * _Hole + 2;
  v18 = 0;
  _Top = _Hole;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        _Hole = (int)"call to empty boost::function";
        std::exception::exception(&this, (const char *const *)&_Hole);
        this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
        LOBYTE(v18) = 1;
        boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
      }
      if ( _Pred.baseclass_0.invoker(
             (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
             &_First[v7],
             &_First[v7 - 1]) )
        --v7;
      v9 = &_First[v7];
      v10 = &_First[v5];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v10->m_strName,
        &v9->m_strName,
        0,
        0xFFFFFFFFu);
      v10->m_unIncreaseScore = v9->m_unIncreaseScore;
      v10->m_unDecreaseScore = v9->m_unDecreaseScore;
      v10->m_unDieCount = v9->m_unDieCount;
      v10->m_unKillCount = v9->m_unKillCount;
      v10->m_unGrade = v9->m_unGrade;
      v10->m_unCaptureFlag = v9->m_unCaptureFlag;
      v10->m_kGuildReg = v9->m_kGuildReg;
      v5 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v6 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    v11 = &_First[v6 - 1];
    v12 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_strName,
      &_First[v6 - 1].m_strName,
      0,
      0xFFFFFFFFu);
    v12->m_unIncreaseScore = v11->m_unIncreaseScore;
    v12->m_unDecreaseScore = v11->m_unDecreaseScore;
    v12->m_unDieCount = v11->m_unDieCount;
    v12->m_unKillCount = v11->m_unKillCount;
    v12->m_unGrade = v11->m_unGrade;
    v12->m_unCaptureFlag = v11->m_unCaptureFlag;
    v12->m_kGuildReg = v11->m_kGuildReg;
    v5 = v6 - 1;
  }
  v13 = 0;
  v14 = 0;
  v15 = 0;
  _Bottom = (int)&v13;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v15 = _Pred.baseclass_0.invoker;
    v13 = _Pred.baseclass_0.baseclass_0.manager;
    v14 = (int)_Pred.baseclass_0.baseclass_0.manager(
                 (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                 0);
  }
  std::_Push_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
    _First,
    v5,
    _Top,
    _Val,
    *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v13);
  v18 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (005D6DB0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, int _Hole, int _Bottom, GTStatusWin::RankInfo *_Val, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))
{
  int v5; // esi@1
  int v6; // edi@1
  int v7; // ebx@1
  bool v8; // zf@1
  GTStatusWin::RankInfo *v9; // esi@4
  GTStatusWin::RankInfo *v10; // edi@4
  GTStatusWin::RankInfo *v11; // ebx@7
  GTStatusWin::RankInfo *v12; // edi@7

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( _Pred(&_First[v7], &_First[v7 - 1]) )
        --v7;
      v9 = &_First[v7];
      v10 = &_First[v6];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v10->m_strName,
        &v9->m_strName,
        0,
        0xFFFFFFFFu);
      v10->m_unIncreaseScore = v9->m_unIncreaseScore;
      v10->m_unDecreaseScore = v9->m_unDecreaseScore;
      v10->m_unDieCount = v9->m_unDieCount;
      v10->m_unKillCount = v9->m_unKillCount;
      v10->m_unGrade = v9->m_unGrade;
      v10->m_unCaptureFlag = v9->m_unCaptureFlag;
      v10->m_kGuildReg = v9->m_kGuildReg;
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    v11 = &_First[v5 - 1];
    v12 = &_First[v6];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_strName,
      &_First[v5 - 1].m_strName,
      0,
      0xFFFFFFFFu);
    v12->m_unIncreaseScore = v11->m_unIncreaseScore;
    v12->m_unDecreaseScore = v11->m_unDecreaseScore;
    v12->m_unDieCount = v11->m_unDieCount;
    v12->m_unKillCount = v11->m_unKillCount;
    v12->m_unGrade = v11->m_unGrade;
    v12->m_unCaptureFlag = v11->m_unCaptureFlag;
    v12->m_kGuildReg = v11->m_kGuildReg;
    v6 = v5 - 1;
  }
  std::_Push_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
    _First,
    v6,
    _Hole,
    _Val,
    _Pred);
}

//----- (005D6ED0) --------------------------------------------------------
void __cdecl std::_Pop_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, GTStatusWin::RankInfo *_Val, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal)
{
  boost::detail::function::any_pointer (__cdecl *v6)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-18h] [bp-24h]@1
  int v7; // [sp-14h] [bp-20h]@1
  bool (__cdecl *v8)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-10h] [bp-1Ch]@1
  int v9; // [sp+8h] [bp-4h]@1

  v9 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Dest->m_strName,
    &_First->m_strName,
    0,
    0xFFFFFFFFu);
  _Dest->m_unIncreaseScore = _First->m_unIncreaseScore;
  _Dest->m_unDecreaseScore = _First->m_unDecreaseScore;
  _Dest->m_unDieCount = _First->m_unDieCount;
  _Dest->m_unKillCount = _First->m_unKillCount;
  _Dest->m_unGrade = _First->m_unGrade;
  _Dest->m_unCaptureFlag = _First->m_unCaptureFlag;
  _Dest->m_kGuildReg = _First->m_kGuildReg;
  v6 = 0;
  v7 = 0;
  v8 = 0;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v8 = _Pred.baseclass_0.invoker;
    v6 = _Pred.baseclass_0.baseclass_0.manager;
    v7 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
    _First,
    0,
    _Last - _First,
    _Val,
    *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v6);
  v9 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005D6FD0) --------------------------------------------------------
void __cdecl std::_Pop_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, GTStatusWin::RankInfo *_Dest, GTStatusWin::RankInfo *_Val, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), int *__formal)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Dest->m_strName,
    &_First->m_strName,
    0,
    0xFFFFFFFFu);
  _Dest->m_unIncreaseScore = _First->m_unIncreaseScore;
  _Dest->m_unDecreaseScore = _First->m_unDecreaseScore;
  _Dest->m_unDieCount = _First->m_unDieCount;
  _Dest->m_unKillCount = _First->m_unKillCount;
  _Dest->m_unGrade = _First->m_unGrade;
  _Dest->m_unCaptureFlag = _First->m_unCaptureFlag;
  _Dest->m_kGuildReg = _First->m_kGuildReg;
  std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
    _First,
    0,
    _Last - _First,
    _Val,
    _Pred);
}

//----- (005D7050) --------------------------------------------------------
#error "5D7221: positive sp value has been found (funcsize=184)"

//----- (005D7230) --------------------------------------------------------
void __cdecl std::_Make_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, int *__formal, GTStatusWin::RankInfo *a5)
{
  int v5; // ebx@1
  char *v6; // esi@2
  unsigned int v7; // eax@3
  unsigned int v8; // ecx@3
  unsigned int v9; // edx@3
  unsigned int v10; // eax@3
  unsigned int v11; // ecx@3
  unsigned int v12; // edx@3
  boost::detail::function::any_pointer (__cdecl *v13)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-70h]@3
  int v14; // [sp-18h] [bp-6Ch]@3
  bool (__cdecl *v15)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-14h] [bp-68h]@3
  unsigned int v16; // [sp-10h] [bp-64h]@1
  boost::detail::function::any_pointer (__cdecl **v17)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-54h]@3
  int _Bottom; // [sp+4h] [bp-50h]@1
  GTStatusWin::RankInfo *v19; // [sp+8h] [bp-4Ch]@1
  GTStatusWin::RankInfo _Val; // [sp+Ch] [bp-48h]@3
  unsigned int v21; // [sp+44h] [bp-10h]@1
  int v22; // [sp+50h] [bp-4h]@1
  int v23; // [sp+54h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v16 = (unsigned int)&v23 ^ __security_cookie;
  v19 = _First;
  _Bottom = _Last - _First;
  v5 = _Bottom / 2;
  v22 = 0;
  if ( _Bottom / 2 > 0 )
  {
    v6 = (char *)&_First[v5].m_unDecreaseScore;
    do
    {
      v6 -= 56;
      --v5;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 - 32),
        0,
        0xFFFFFFFFu);
      v7 = *(_DWORD *)v6;
      v8 = *((_DWORD *)v6 + 1);
      _Val.m_unIncreaseScore = *((_DWORD *)v6 - 1);
      v9 = *((_DWORD *)v6 + 2);
      _Val.m_unDecreaseScore = v7;
      v10 = *((_DWORD *)v6 + 3);
      _Val.m_unDieCount = v8;
      v11 = *((_DWORD *)v6 + 4);
      _Val.m_unKillCount = v9;
      v12 = *((_DWORD *)v6 + 5);
      _Val.m_unGrade = v10;
      _Val.m_unCaptureFlag = v11;
      _Val.m_kGuildReg = v12;
      v13 = 0;
      v14 = 0;
      v15 = 0;
      LOBYTE(v22) = 1;
      v17 = &v13;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v15 = _Pred.baseclass_0.invoker;
        v13 = _Pred.baseclass_0.baseclass_0.manager;
        v14 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
        v19,
        v5,
        _Bottom,
        &_Val,
        *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v13);
      LOBYTE(v22) = 0;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    while ( v5 > 0 );
  }
  v22 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// A85C00: using guessed type int __security_cookie;

//----- (005D73A0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>_GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, GTStatusWin::RankInfo *__formal)
{
  GTStatusWin::RankInfo *v4; // edi@1
  GTStatusWin::RankInfo *i; // ebx@2
  int v6; // esi@3
  unsigned int v7; // ecx@3
  unsigned int v8; // edx@3
  unsigned int v9; // eax@3
  unsigned int v10; // ecx@3
  unsigned int v11; // edx@3
  unsigned int v12; // eax@3
  unsigned int v13; // ecx@5
  unsigned int v14; // edx@5
  unsigned int v15; // eax@5
  unsigned int v16; // ecx@5
  unsigned int v17; // edx@5
  unsigned int v18; // eax@5
  int j; // edi@6
  unsigned int v20; // eax@10
  unsigned int v21; // ecx@10
  unsigned int v22; // edx@10
  unsigned int v23; // eax@10
  unsigned int v24; // ecx@10
  unsigned int v25; // edx@10
  boost::bad_function_call e; // [sp+0h] [bp-6Ch]@19
  std::exception this; // [sp+Ch] [bp-60h]@17
  GTStatusWin::RankInfo *v28; // [sp+18h] [bp-54h]@1
  char *_What; // [sp+1Ch] [bp-50h]@17
  int v30; // [sp+20h] [bp-4Ch]@5
  GTStatusWin::RankInfo _Val; // [sp+24h] [bp-48h]@3
  unsigned int v32; // [sp+5Ch] [bp-10h]@1
  int v33; // [sp+68h] [bp-4h]@1
  int v34; // [sp+6Ch] [bp+0h]@1

  v32 = (unsigned int)&v34 ^ __security_cookie;
  v4 = _First;
  v28 = _First;
  v33 = 0;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0 )
    {
      v6 = (int)i;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        &i->m_strName,
        0,
        0xFFFFFFFFu);
      v7 = i->m_unDecreaseScore;
      v8 = i->m_unDieCount;
      _Val.m_unIncreaseScore = i->m_unIncreaseScore;
      v9 = i->m_unKillCount;
      _Val.m_unDecreaseScore = v7;
      v10 = i->m_unGrade;
      _Val.m_unDieCount = v8;
      v11 = i->m_unCaptureFlag;
      _Val.m_unKillCount = v9;
      v12 = i->m_kGuildReg;
      _Val.m_unGrade = v10;
      _Val.m_unCaptureFlag = v11;
      _Val.m_kGuildReg = v12;
      LOBYTE(v33) = 1;
      if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        _What = "call to empty boost::function";
        std::exception::exception(&this, (const char *const *)&_What);
        this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
        LOBYTE(v33) = 2;
        boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
      }
      if ( _Pred.baseclass_0.invoker(
             (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
             &_Val,
             v4) )
      {
        std::_Move_backward<GTStatusWin::RankInfo___GTStatusWin::RankInfo__>(
          v4,
          i,
          i + 1,
          (std::_Nonscalar_ptr_iterator_tag)v30);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_strName,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v13 = _Val.m_unDecreaseScore;
        v14 = _Val.m_unDieCount;
        v4->m_unIncreaseScore = _Val.m_unIncreaseScore;
        v15 = _Val.m_unKillCount;
        v4->m_unDecreaseScore = v13;
        v16 = _Val.m_unGrade;
        v4->m_unDieCount = v14;
        v17 = _Val.m_unCaptureFlag;
        v4->m_unKillCount = v15;
        v18 = _Val.m_kGuildReg;
        v4->m_unGrade = v16;
        v4->m_unCaptureFlag = v17;
        v4->m_kGuildReg = v18;
      }
      else
      {
        for ( j = (int)&i->m_unDecreaseScore; ; v6 = j - 32 )
        {
          j -= 56;
          if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
          {
            v30 = (int)"call to empty boost::function";
            std::exception::exception(&e.baseclass_0.baseclass_0, (const char *const *)&v30);
            e.baseclass_0.baseclass_0.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
            LOBYTE(v33) = 3;
            boost::throw_exception<boost::bad_function_call>(&e);
          }
          if ( !_Pred.baseclass_0.invoker(
                  (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                  &_Val,
                  (GTStatusWin::RankInfo *)(j - 32)) )
            break;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(j - 32),
            0,
            0xFFFFFFFFu);
          *(_DWORD *)(v6 + 28) = *(_DWORD *)(j - 4);
          *(_DWORD *)(v6 + 32) = *(_DWORD *)j;
          *(_DWORD *)(v6 + 36) = *(_DWORD *)(j + 4);
          *(_DWORD *)(v6 + 40) = *(_DWORD *)(j + 8);
          *(_DWORD *)(v6 + 44) = *(_DWORD *)(j + 12);
          *(_DWORD *)(v6 + 48) = *(_DWORD *)(j + 16);
          *(_DWORD *)(v6 + 52) = *(_DWORD *)(j + 20);
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v20 = _Val.m_unDecreaseScore;
        v21 = _Val.m_unDieCount;
        v4 = v28;
        *(_DWORD *)(v6 + 28) = _Val.m_unIncreaseScore;
        v22 = _Val.m_unKillCount;
        *(_DWORD *)(v6 + 32) = v20;
        v23 = _Val.m_unGrade;
        *(_DWORD *)(v6 + 36) = v21;
        v24 = _Val.m_unCaptureFlag;
        *(_DWORD *)(v6 + 40) = v22;
        v25 = _Val.m_kGuildReg;
        *(_DWORD *)(v6 + 44) = v23;
        *(_DWORD *)(v6 + 48) = v24;
        *(_DWORD *)(v6 + 52) = v25;
      }
      LOBYTE(v33) = 0;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
      ++i;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
    }
  }
  v33 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (005D7600) --------------------------------------------------------
void __cdecl std::_Median<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Mid, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))
{
  unsigned int v4; // eax@1
  int v5; // eax@2
  unsigned int v6; // esi@2
  GTStatusWin::RankInfo *v7; // eax@14
  GTStatusWin::RankInfo *v8; // esi@14
  int v9; // [sp+Ch] [bp-8h]@2
  GTStatusWin::RankInfo *_Right; // [sp+10h] [bp-4h]@2
  GTStatusWin::RankInfo *_Firsta; // [sp+1Ch] [bp+8h]@8
  GTStatusWin::RankInfo *_Firstb; // [sp+1Ch] [bp+8h]@14

  v4 = _Last - _First;
  if ( (signed int)v4 <= 40 )
  {
    if ( _Pred(_Mid, _First) )
      std::swap<GTStatusWin::RankInfo>(_Mid, _First);
    if ( _Pred(_Last, _Mid) )
      std::swap<GTStatusWin::RankInfo>(_Last, _Mid);
    if ( _Pred(_Mid, _First) )
      std::swap<GTStatusWin::RankInfo>(_Mid, _First);
  }
  else
  {
    v5 = (signed int)(v4 + 1) / 8;
    v6 = 56 * v5;
    v9 = 2 * v5;
    _Right = &_First[v5];
    if ( _Pred(_Right, _First) )
      std::swap<GTStatusWin::RankInfo>(_Right, _First);
    if ( _Pred(&_First[v9], _Right) )
      std::swap<GTStatusWin::RankInfo>(&_First[v9], _Right);
    if ( _Pred(_Right, _First) )
      std::swap<GTStatusWin::RankInfo>(_Right, _First);
    _Firsta = &_Mid[-v6 / 0x38u];
    if ( _Pred(_Mid, &_Mid[-v6 / 0x38u]) )
      std::swap<GTStatusWin::RankInfo>(_Mid, _Firsta);
    if ( _Pred(&_Mid[v6 / 0x38], _Mid) )
      std::swap<GTStatusWin::RankInfo>(&_Mid[v6 / 0x38], _Mid);
    if ( _Pred(_Mid, _Firsta) )
      std::swap<GTStatusWin::RankInfo>(_Mid, _Firsta);
    v7 = &_Last[-v6 / 0x38u];
    v8 = &_Last[-(v9 * 56) / 0x38u];
    _Firstb = v7;
    if ( _Pred(v7, &_Last[-(v9 * 56) / 0x38u]) )
      std::swap<GTStatusWin::RankInfo>(_Firstb, v8);
    if ( _Pred(_Last, _Firstb) )
      std::swap<GTStatusWin::RankInfo>(_Last, _Firstb);
    if ( _Pred(_Firstb, v8) )
      std::swap<GTStatusWin::RankInfo>(_Firstb, v8);
    if ( _Pred(_Mid, _Right) )
      std::swap<GTStatusWin::RankInfo>(_Mid, _Right);
    if ( _Pred(_Firstb, _Mid) )
      std::swap<GTStatusWin::RankInfo>(_Firstb, _Mid);
    if ( _Pred(_Mid, _Right) )
      std::swap<GTStatusWin::RankInfo>(_Mid, _Right);
  }
}

//----- (005D7810) --------------------------------------------------------
void __cdecl std::_Make_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), int *__formal, GTStatusWin::RankInfo *a5)
{
  int v5; // edi@1
  char *v6; // esi@2
  unsigned int v7; // edx@3
  unsigned int v8; // eax@3
  unsigned int v9; // ecx@3
  unsigned int v10; // edx@3
  unsigned int v11; // eax@3
  unsigned int v12; // ecx@3
  GTStatusWin::RankInfo _Val; // [sp+8h] [bp-48h]@3
  unsigned int v14; // [sp+40h] [bp-10h]@1
  int v15; // [sp+4Ch] [bp-4h]@3
  int v16; // [sp+50h] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v5 = (signed int)(_Last - _First) / 2;
  if ( v5 > 0 )
  {
    v6 = (char *)&_First[v5].m_unDecreaseScore;
    do
    {
      v6 -= 56;
      --v5;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 - 32),
        0,
        0xFFFFFFFFu);
      v7 = *(_DWORD *)v6;
      v8 = *((_DWORD *)v6 + 1);
      _Val.m_unIncreaseScore = *((_DWORD *)v6 - 1);
      v9 = *((_DWORD *)v6 + 2);
      _Val.m_unDecreaseScore = v7;
      v10 = *((_DWORD *)v6 + 3);
      _Val.m_unDieCount = v8;
      v11 = *((_DWORD *)v6 + 4);
      _Val.m_unKillCount = v9;
      v12 = *((_DWORD *)v6 + 5);
      _Val.m_unGrade = v10;
      _Val.m_unCaptureFlag = v11;
      _Val.m_kGuildReg = v12;
      v15 = 0;
      std::_Adjust_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
        _First,
        v5,
        _Last - _First,
        &_Val,
        _Pred);
      v15 = -1;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
    }
    while ( v5 > 0 );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005D7930) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____GTStatusWin::RankInfo>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), GTStatusWin::RankInfo *__formal)
{
  GTStatusWin::RankInfo *v4; // esi@1
  GTStatusWin::RankInfo *i; // ebx@2
  GTStatusWin::RankInfo *v6; // edi@3
  unsigned int v7; // edx@3
  unsigned int v8; // eax@3
  unsigned int v9; // ecx@3
  unsigned int v10; // edx@3
  unsigned int v11; // eax@3
  unsigned int v12; // ecx@3
  unsigned int v13; // ecx@4
  unsigned int v14; // edx@4
  unsigned int v15; // eax@4
  unsigned int v16; // ecx@4
  unsigned int v17; // edx@4
  unsigned int v18; // eax@4
  int j; // esi@5
  unsigned int v20; // eax@7
  unsigned int v21; // ecx@7
  unsigned int v22; // edx@7
  unsigned int v23; // eax@7
  unsigned int v24; // ecx@7
  unsigned int v25; // edx@7
  GTStatusWin::RankInfo _Val; // [sp+8h] [bp-48h]@3
  unsigned int v27; // [sp+40h] [bp-10h]@1
  int v28; // [sp+4Ch] [bp-4h]@3
  int v29; // [sp+50h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v4 = _First;
  if ( _First != _Last )
  {
    for ( i = _First + 1; i != _Last; ++i )
    {
      v6 = i;
      _Val.m_strName.baseclass_0._Myres = 15;
      _Val.m_strName.baseclass_0._Mysize = 0;
      _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strName,
        &i->m_strName,
        0,
        0xFFFFFFFFu);
      v7 = i->m_unDecreaseScore;
      v8 = i->m_unDieCount;
      _Val.m_unIncreaseScore = i->m_unIncreaseScore;
      v9 = i->m_unKillCount;
      _Val.m_unDecreaseScore = v7;
      v10 = i->m_unGrade;
      _Val.m_unDieCount = v8;
      v11 = i->m_unCaptureFlag;
      _Val.m_unKillCount = v9;
      v12 = i->m_kGuildReg;
      _Val.m_unGrade = v10;
      _Val.m_unCaptureFlag = v11;
      _Val.m_kGuildReg = v12;
      v28 = 0;
      if ( _Pred(&_Val, v4) )
      {
        std::_Move_backward<GTStatusWin::RankInfo___GTStatusWin::RankInfo__>(
          v4,
          i,
          i + 1,
          (std::_Nonscalar_ptr_iterator_tag)_First);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v4->m_strName,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v13 = _Val.m_unDecreaseScore;
        v14 = _Val.m_unDieCount;
        v4->m_unIncreaseScore = _Val.m_unIncreaseScore;
        v15 = _Val.m_unKillCount;
        v4->m_unDecreaseScore = v13;
        v16 = _Val.m_unGrade;
        v4->m_unDieCount = v14;
        v17 = _Val.m_unCaptureFlag;
        v4->m_unKillCount = v15;
        v18 = _Val.m_kGuildReg;
        v4->m_unGrade = v16;
        v4->m_unCaptureFlag = v17;
        v4->m_kGuildReg = v18;
      }
      else
      {
        for ( j = (int)&i[-1]; _Pred(&_Val, (GTStatusWin::RankInfo *)j); j -= 56 )
        {
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &v6->m_strName,
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)j,
            0,
            0xFFFFFFFFu);
          v6->m_unIncreaseScore = *(_DWORD *)(j + 28);
          v6->m_unDecreaseScore = *(_DWORD *)(j + 32);
          v6->m_unDieCount = *(_DWORD *)(j + 36);
          v6->m_unKillCount = *(_DWORD *)(j + 40);
          v6->m_unGrade = *(_DWORD *)(j + 44);
          v6->m_unCaptureFlag = *(_DWORD *)(j + 48);
          v6->m_kGuildReg = *(_DWORD *)(j + 52);
          v6 = (GTStatusWin::RankInfo *)j;
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v6->m_strName,
          &_Val.m_strName,
          0,
          0xFFFFFFFFu);
        v20 = _Val.m_unDecreaseScore;
        v21 = _Val.m_unDieCount;
        v4 = _First;
        v6->m_unIncreaseScore = _Val.m_unIncreaseScore;
        v22 = _Val.m_unKillCount;
        v6->m_unDecreaseScore = v20;
        v23 = _Val.m_unGrade;
        v6->m_unDieCount = v21;
        v24 = _Val.m_unCaptureFlag;
        v6->m_unKillCount = v22;
        v25 = _Val.m_kGuildReg;
        v6->m_unGrade = v23;
        v6->m_unCaptureFlag = v24;
        v6->m_kGuildReg = v25;
      }
      v28 = -1;
      if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005D7B10) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<GTStatusWin::RankInfo___GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred, GTStatusWin::RankInfo *__formal)
{
  unsigned int v4; // edx@1
  unsigned int v5; // eax@1
  unsigned int v6; // ecx@1
  unsigned int v7; // edx@1
  unsigned int v8; // eax@1
  unsigned int v9; // ecx@1
  boost::detail::function::any_pointer (__cdecl *v10)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-20h] [bp-70h]@1
  int v11; // [sp-1Ch] [bp-6Ch]@1
  bool (__cdecl *v12)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-18h] [bp-68h]@1
  int *v13; // [sp-14h] [bp-64h]@1
  unsigned int v14; // [sp-10h] [bp-60h]@1
  boost::detail::function::any_pointer (__cdecl **v15)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-50h]@1
  GTStatusWin::RankInfo *v16; // [sp+4h] [bp-4Ch]@1
  GTStatusWin::RankInfo _Val; // [sp+8h] [bp-48h]@1
  unsigned int v18; // [sp+40h] [bp-10h]@1
  int v19; // [sp+4Ch] [bp-4h]@1
  int v20; // [sp+50h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v14 = (unsigned int)&v20 ^ __security_cookie;
  v16 = _First;
  v19 = 0;
  _Val.m_strName.baseclass_0._Myres = 15;
  _Val.m_strName.baseclass_0._Mysize = 0;
  _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Val.m_strName,
    &_Last[-1].m_strName,
    0,
    0xFFFFFFFFu);
  v4 = *(&_Last->m_unDecreaseScore - 14);
  v5 = *(&_Last->m_unDieCount - 14);
  _Val.m_unIncreaseScore = *(&_Last->m_unIncreaseScore - 14);
  v6 = *(&_Last->m_unKillCount - 14);
  _Val.m_unDecreaseScore = v4;
  v7 = *(&_Last->m_unGrade - 14);
  _Val.m_unDieCount = v5;
  v8 = *(&_Last->m_unCaptureFlag - 14);
  _Val.m_unKillCount = v6;
  v9 = *(&_Last->m_kGuildReg - 14);
  _Val.m_unGrade = v7;
  _Val.m_unCaptureFlag = v8;
  _Val.m_kGuildReg = v9;
  v13 = 0;
  v10 = 0;
  v11 = 0;
  v12 = 0;
  LOBYTE(v19) = 1;
  v15 = &v10;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v12 = _Pred.baseclass_0.invoker;
    v10 = _Pred.baseclass_0.baseclass_0.manager;
    v11 = (int)_Pred.baseclass_0.baseclass_0.manager(
                 (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                 0);
  }
  std::_Pop_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
    v16,
    _Last - 1,
    _Last - 1,
    &_Val,
    *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v10,
    v13);
  if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.m_strName.baseclass_0._Myres = 15;
  _Val.m_strName.baseclass_0._Mysize = 0;
  _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v19 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// A85C00: using guessed type int __security_cookie;

//----- (005D7C30) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<GTStatusWin::RankInfo___GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *), GTStatusWin::RankInfo *__formal)
{
  unsigned int v4; // ecx@1
  unsigned int v5; // edx@1
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@1
  unsigned int v8; // edx@1
  unsigned int v9; // eax@1
  GTStatusWin::RankInfo _Val; // [sp+0h] [bp-48h]@1
  unsigned int v11; // [sp+38h] [bp-10h]@1
  int v12; // [sp+44h] [bp-4h]@1
  int v13; // [sp+48h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  _Val.m_strName.baseclass_0._Myres = 15;
  _Val.m_strName.baseclass_0._Mysize = 0;
  _Val.m_strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Val.m_strName,
    &_Last[-1].m_strName,
    0,
    0xFFFFFFFFu);
  v4 = *(&_Last->m_unDecreaseScore - 14);
  v5 = *(&_Last->m_unDieCount - 14);
  _Val.m_unIncreaseScore = *(&_Last->m_unIncreaseScore - 14);
  v6 = *(&_Last->m_unKillCount - 14);
  _Val.m_unDecreaseScore = v4;
  v7 = *(&_Last->m_unGrade - 14);
  _Val.m_unDieCount = v5;
  v8 = *(&_Last->m_unCaptureFlag - 14);
  _Val.m_unKillCount = v6;
  v9 = *(&_Last->m_kGuildReg - 14);
  _Val.m_unGrade = v7;
  _Val.m_unCaptureFlag = v8;
  _Val.m_kGuildReg = v9;
  v12 = 0;
  std::_Pop_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
    _First,
    _Last - 1,
    _Last - 1,
    &_Val,
    _Pred,
    0);
  if ( _Val.m_strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
}
// A85C00: using guessed type int __security_cookie;

//----- (005D7D00) --------------------------------------------------------
#error "5D80EA: positive sp value has been found (funcsize=334)"

//----- (005D80F0) --------------------------------------------------------
void __cdecl std::make_heap<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred)
{
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-24h] [bp-30h]@2
  int v4; // [sp-20h] [bp-2Ch]@2
  bool (__cdecl *v5)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-1Ch] [bp-28h]@2
  int *v6; // [sp-18h] [bp-24h]@2
  GTStatusWin::RankInfo *v7; // [sp-14h] [bp-20h]@2
  int v8; // [sp+8h] [bp-4h]@1

  v8 = 0;
  if ( (signed int)(_Last - _First) > 1 )
  {
    v7 = 0;
    v6 = 0;
    v3 = 0;
    v4 = 0;
    v5 = 0;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      v5 = _Pred.baseclass_0.invoker;
      v3 = _Pred.baseclass_0.baseclass_0.manager;
      v4 = (int)_Pred.baseclass_0.baseclass_0.manager(
                  (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                  0);
    }
    std::_Make_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
      _First,
      _Last,
      *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v3,
      v6,
      v7);
  }
  v8 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005D81B0) --------------------------------------------------------
void __cdecl std::_Insertion_sort<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred)
{
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-18h] [bp-28h]@1
  int v4; // [sp-14h] [bp-24h]@1
  bool (__cdecl *v5)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-10h] [bp-20h]@1
  GTStatusWin::RankInfo *v6; // [sp-Ch] [bp-1Ch]@1
  boost::detail::function::any_pointer (__cdecl **v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-10h]@1
  int v8; // [sp+Ch] [bp-4h]@1

  v6 = 0;
  v3 = 0;
  v4 = 0;
  v5 = 0;
  v8 = 0;
  v7 = &v3;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v5 = _Pred.baseclass_0.invoker;
    v3 = _Pred.baseclass_0.baseclass_0.manager;
    v4 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Insertion_sort1<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>_GTStatusWin::RankInfo>(
    _First,
    _Last,
    *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v3,
    v6);
  v8 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005D8260) --------------------------------------------------------
std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> *__cdecl std::_Unguarded_partition<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> *result, GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))
{
  int v4; // eax@1
  GTStatusWin::RankInfo *v5; // esi@1
  int v6; // ebx@1
  unsigned int v7; // eax@10
  GTStatusWin::RankInfo *v8; // edi@10
  GTStatusWin::RankInfo *v9; // ST08_4@14
  bool v10; // zf@17
  GTStatusWin::RankInfo *v11; // ebx@18
  GTStatusWin::RankInfo *v12; // ST0C_4@28
  GTStatusWin::RankInfo *v13; // ST08_4@28
  GTStatusWin::RankInfo *v14; // eax@29
  std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> *v15; // eax@34
  int _Plast; // [sp+Ch] [bp-8h]@1
  int _Glast; // [sp+10h] [bp-4h]@2
  unsigned int _Glasta; // [sp+10h] [bp-4h]@10

  v4 = (signed int)(_Last - _First) / 2;
  v5 = &_First[v4];
  std::_Median<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
    _First,
    &_First[v4],
    _Last - 1,
    _Pred);
  v6 = (int)&v5[1];
  _Plast = (int)&v5[1];
  if ( _First < v5 )
  {
    do
    {
      _Glast = (int)&v5[-1];
      if ( _Pred(v5 - 1, v5) )
        break;
      if ( _Pred(v5, (GTStatusWin::RankInfo *)_Glast) )
        break;
      --v5;
    }
    while ( (unsigned int)_First < _Glast );
  }
  if ( v6 < (unsigned int)_Last )
  {
    do
    {
      if ( _Pred((GTStatusWin::RankInfo *)v6, v5) )
        break;
      if ( _Pred(v5, (GTStatusWin::RankInfo *)v6) )
        break;
      v6 += 56;
    }
    while ( v6 < (unsigned int)_Last );
    _Plast = v6;
  }
  v7 = (unsigned int)v5;
  v8 = (GTStatusWin::RankInfo *)v6;
  for ( _Glasta = (unsigned int)v5; ; v7 = _Glasta )
  {
    while ( 1 )
    {
      if ( v8 < _Last )
      {
        do
        {
          if ( !_Pred(v5, v8) )
          {
            if ( _Pred(v8, v5) )
              break;
            v9 = (GTStatusWin::RankInfo *)v6;
            v6 += 56;
            std::swap<GTStatusWin::RankInfo>(v9, v8);
          }
          ++v8;
        }
        while ( v8 < _Last );
        v7 = _Glasta;
        _Plast = v6;
      }
      v10 = v7 == (_DWORD)_First;
      if ( v7 > (unsigned int)_First )
      {
        v11 = (GTStatusWin::RankInfo *)(v7 - 56);
        do
        {
          if ( !_Pred(v11, v5) )
          {
            if ( _Pred(v5, v11) )
              break;
            --v5;
            std::swap<GTStatusWin::RankInfo>(v5, v11);
          }
          --v11;
          _Glasta -= 56;
        }
        while ( (unsigned int)_First < _Glasta );
        v7 = _Glasta;
        v6 = _Plast;
        v10 = _Glasta == (_DWORD)_First;
      }
      if ( v10 )
        break;
      v14 = (GTStatusWin::RankInfo *)(v7 - 56);
      _Glasta = (unsigned int)v14;
      if ( v8 == _Last )
      {
        --v5;
        if ( v14 != v5 )
          std::swap<GTStatusWin::RankInfo>(v14, v5);
        v6 -= 56;
        _Plast = v6;
        std::swap<GTStatusWin::RankInfo>(v5, (GTStatusWin::RankInfo *)v6);
        v7 = _Glasta;
      }
      else
      {
        std::swap<GTStatusWin::RankInfo>(v8, v14);
        v7 = _Glasta;
        ++v8;
      }
    }
    if ( v8 == _Last )
      break;
    if ( (GTStatusWin::RankInfo *)v6 != v8 )
      std::swap<GTStatusWin::RankInfo>(v5, (GTStatusWin::RankInfo *)v6);
    v12 = v8;
    v6 += 56;
    v13 = v5;
    _Plast = v6;
    ++v5;
    ++v8;
    std::swap<GTStatusWin::RankInfo>(v13, v12);
  }
  v15 = result;
  result->baseclass_0.first = v5;
  result->baseclass_0.second = (GTStatusWin::RankInfo *)v6;
  return v15;
}

//----- (005D8420) --------------------------------------------------------
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::_vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this)
{
  std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *v1; // esi@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    std::_Destroy_range<std::allocator<GTStatusWin::RankInfo>>(
      *(GTStatusWin::RankInfo **)&this->baseclass_0.___u0.baseclass_0.dummy[0],
      this->baseclass_0._Mylast,
      &this->baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0._Mylast = 0;
  v1->baseclass_0._Myend = 0;
}

//----- (005D8470) --------------------------------------------------------
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::reserve(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this, unsigned int _Count)
{
  std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *v2; // esi@1
  void *v3; // eax@4
  GTStatusWin::RankInfo *v4; // ST04_4@4
  GTStatusWin::RankInfo *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // eax@6
  int v9; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@4

  v11 = &v9;
  v2 = this;
  if ( _Count > 0x4924924 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 56 < _Count )
  {
    v3 = std::allocator<GTStatusWin::RankInfo>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(GTStatusWin::RankInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v12 = 0;
    std::_Uninit_move<GTStatusWin::RankInfo___GTStatusWin::RankInfo___std::allocator<GTStatusWin::RankInfo>_GTStatusWin::RankInfo>(
      v5,
      v4,
      (GTStatusWin::RankInfo *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((char *)v2->baseclass_0._Mylast
                    + ((unsigned __int64)(-1840700269i64
                                        * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                       - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32)
                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 5;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      std::_Destroy_range<std::allocator<GTStatusWin::RankInfo>>(
        *(GTStatusWin::RankInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0],
        v2->baseclass_0._Mylast,
        &v2->baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)_Count);
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v8 = _Ptr;
    v2->baseclass_0._Myend = (GTStatusWin::RankInfo *)&_Ptr[56 * _Count];
    v2->baseclass_0._Mylast = (GTStatusWin::RankInfo *)&v8[56 * v7];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (005D8590) --------------------------------------------------------
void __cdecl std::_Sort_heap<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred)
{
  int v3; // ebx@3
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edi@3
  signed int v5; // edx@9
  boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > v6; // [sp-20h] [bp-40h]@5
  int v7; // [sp-1Ch] [bp-3Ch]@5
  bool (__cdecl *v8)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-18h] [bp-38h]@5
  GTStatusWin::RankInfo *v9; // [sp-14h] [bp-34h]@5
  int v10; // [sp+0h] [bp-20h]@3
  int v11; // [sp+4h] [bp-1Ch]@3
  bool (__cdecl *v12)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp+8h] [bp-18h]@3
  boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *v13; // [sp+Ch] [bp-14h]@5
  unsigned int v14; // [sp+10h] [bp-10h]@2
  int v15; // [sp+1Ch] [bp-4h]@1

  v15 = 0;
  if ( (signed int)(_Last - _First) > 1 )
  {
    v14 = (char *)_Last - (char *)_First;
    do
    {
      v3 = 0;
      v4 = 0;
      v10 = 0;
      v11 = 0;
      v12 = 0;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v4 = _Pred.baseclass_0.baseclass_0.manager;
        v12 = _Pred.baseclass_0.invoker;
        v10 = (signed int)_Pred.baseclass_0.baseclass_0.manager;
        v3 = (int)_Pred.baseclass_0.baseclass_0.manager(
                    (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                    0);
        v11 = v3;
      }
      v9 = 0;
      LOBYTE(v15) = 1;
      v13 = &v6;
      v6.baseclass_0.baseclass_0.manager = 0;
      v7 = 0;
      v8 = 0;
      if ( v4 )
      {
        v8 = v12;
        v6.baseclass_0.baseclass_0.manager = v4;
        v7 = (int)v4((boost::detail::function::any_pointer)v3, 0).obj_ptr;
      }
      std::_Pop_heap_0<GTStatusWin::RankInfo___GTStatusWin::RankInfo_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
        _First,
        _Last,
        v6,
        v9);
      LOBYTE(v15) = 0;
      if ( v4 )
        v11 = (int)v4((boost::detail::function::any_pointer)v3, destroy_functor_tag).obj_ptr;
      --_Last;
      v5 = (signed int)(v14 - 56 + ((unsigned __int64)(-1840700269i64 * (signed int)(v14 - 56)) >> 32)) >> 5;
      v14 -= 56;
      v10 = 0;
      v12 = 0;
    }
    while ( (signed int)(v5 + ((unsigned int)v5 >> 31)) > 1 );
  }
  v15 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005D86C0) --------------------------------------------------------
void __cdecl std::_Sort_heap<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))
{
  GTStatusWin::RankInfo *v3; // edi@1
  signed int i; // esi@1

  v3 = _Last;
  for ( i = (char *)_Last - (char *)_First; i / 56 > 1; --v3 )
  {
    std::_Pop_heap_0<GTStatusWin::RankInfo___GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
      _First,
      v3,
      _Pred,
      0);
    i -= 56;
  }
}

//----- (005D8720) --------------------------------------------------------
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::_Reserve(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 56;
  if ( 76695844 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 56;
  if ( v3 > v4 )
  {
    if ( 76695844 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::reserve(this, v5);
  }
}

//----- (005D87A0) --------------------------------------------------------
#error "5D883E: positive sp value has been found (funcsize=52)"

//----- (005D8840) --------------------------------------------------------
void *__thiscall GTStatusWin::_vector_deleting_destructor_(GTStatusWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GTStatusWin::_GTStatusWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005D8870) --------------------------------------------------------
void __thiscall std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::push_back(std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *this, GTStatusWin::RankInfo *_Val)
{
  std::vector<GTStatusWin::RankInfo,std::allocator<GTStatusWin::RankInfo> > *v2; // esi@1
  GTStatusWin::RankInfo *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // edi@3

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::_Reserve(v2, 1u);
    std::_Construct<GTStatusWin::RankInfo_GTStatusWin::RankInfo_const__>(v2->baseclass_0._Mylast, _Val);
    ++v2->baseclass_0._Mylast;
  }
  else
  {
    v4 = (signed int)((char *)_Val
                    + ((unsigned __int64)(-1840700269i64
                                        * (signed int)((char *)_Val
                                                     - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32)
                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 5;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<GTStatusWin::RankInfo_std::allocator<GTStatusWin::RankInfo>>::_Reserve(v2, 1u);
    std::_Cons_val<std::allocator<GTStatusWin::RankInfo>_GTStatusWin::RankInfo_GTStatusWin::RankInfo__>(
      &v2->baseclass_0._Alval,
      v2->baseclass_0._Mylast,
      (GTStatusWin::RankInfo *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 56 * v5));
    ++v2->baseclass_0._Mylast;
  }
}

//----- (005D8900) --------------------------------------------------------
void __cdecl std::_Sort<GTStatusWin::RankInfo___int_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, int _Ideal, boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > _Pred)
{
  GTStatusWin::RankInfo *v4; // edi@1
  GTStatusWin::RankInfo *v5; // ebx@1
  boost::detail::function::functor_manager_operation_type v6; // ecx@1
  int v7; // eax@1
  signed int v8; // esi@2
  boost::detail::function::any_pointer (__cdecl *v9)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-30h]@4
  int v10; // [sp-18h] [bp-2Ch]@4
  bool (__cdecl *v11)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *); // [sp-14h] [bp-28h]@4
  std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> _Mid; // [sp+0h] [bp-14h]@6
  int v13; // [sp+10h] [bp-4h]@1

  v4 = _Last;
  v5 = _First;
  v6 = 0;
  v7 = _Last - _First;
  v13 = 0;
  if ( v7 <= 32 )
    goto LABEL_14;
  v8 = _Ideal;
  while ( v8 > v6 )
  {
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::_Unguarded_partition<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
      &_Mid,
      v5,
      v4,
      *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v9);
    v8 = v8 / 2 / 2 + v8 / 2;
    if ( ((signed int)_Mid.baseclass_0.first - (signed int)v5) / 56 >= (signed int)(v4 - _Mid.baseclass_0.second) )
    {
      v9 = 0;
      v10 = 0;
      v11 = 0;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v11 = _Pred.baseclass_0.invoker;
        v9 = _Pred.baseclass_0.baseclass_0.manager;
        v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Sort<GTStatusWin::RankInfo___int_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
        _Mid.baseclass_0.second,
        v4,
        v8,
        *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v9);
      v4 = _Mid.baseclass_0.first;
      v5 = _First;
    }
    else
    {
      v9 = 0;
      v10 = 0;
      v11 = 0;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v11 = _Pred.baseclass_0.invoker;
        v9 = _Pred.baseclass_0.baseclass_0.manager;
        v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Sort<GTStatusWin::RankInfo___int_boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
        _First,
        _Mid.baseclass_0.first,
        v8,
        *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v9);
      v5 = _Mid.baseclass_0.second;
      _First = _Mid.baseclass_0.second;
    }
    v7 = v4 - v5;
    v6 = 0;
    if ( v7 <= 32 )
      goto LABEL_14;
  }
  if ( v7 <= 32 )
  {
LABEL_14:
    if ( v7 <= 1 )
      goto LABEL_19;
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::_Insertion_sort<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v9);
  }
  else
  {
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::make_heap<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v9);
    v9 = 0;
    v10 = 0;
    v11 = 0;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   0);
    }
    std::sort_heap<GTStatusWin::RankInfo___boost::function<bool___cdecl__GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &),std::allocator<void> > *)&v9);
  }
  v6 = 0;
LABEL_19:
  v13 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005D8B70) --------------------------------------------------------
void __cdecl std::_Sort<GTStatusWin::RankInfo___int_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(GTStatusWin::RankInfo *_First, GTStatusWin::RankInfo *_Last, int _Ideal, bool (__cdecl *_Pred)(GTStatusWin::RankInfo *, GTStatusWin::RankInfo *))
{
  GTStatusWin::RankInfo *v4; // ebx@1
  GTStatusWin::RankInfo *v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<GTStatusWin::RankInfo *,GTStatusWin::RankInfo *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
      &_Mid,
      v4,
      v5,
      _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( ((signed int)_Mid.baseclass_0.first - (signed int)v4) / 56 >= (signed int)(v5 - _Mid.baseclass_0.second) )
    {
      std::_Sort<GTStatusWin::RankInfo___int_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
        _Mid.baseclass_0.second,
        v5,
        v7,
        _Pred);
      v5 = _Mid.baseclass_0.first;
      v4 = _First;
    }
    else
    {
      std::_Sort<GTStatusWin::RankInfo___int_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
        _First,
        _Mid.baseclass_0.first,
        v7,
        _Pred);
      v4 = _Mid.baseclass_0.second;
      _First = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const____GTStatusWin::RankInfo>(
        v4,
        v5,
        _Pred,
        0);
  }
  else
  {
    if ( (signed int)(v5 - v4) > 1 )
      std::_Make_heap<GTStatusWin::RankInfo___int_GTStatusWin::RankInfo_bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
        v4,
        v5,
        _Pred,
        0,
        0);
    std::_Sort_heap<GTStatusWin::RankInfo___bool____cdecl____GTStatusWin::RankInfo_const___GTStatusWin::RankInfo_const___>(
      v4,
      v5,
      _Pred);
  }
}

//----- (005D8CC0) --------------------------------------------------------
#error "5D8D78: positive sp value has been found (funcsize=64)"

//----- (005D8D80) --------------------------------------------------------
void __thiscall GTTDiceWin::GTTDiceWin(GTTDiceWin *this)
{
  GTTDiceWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTDiceWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTDiceWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerIntervalCount);
  v1->m_uiDiceCount = 1;
  v1->m_bEnemyRolling = 1;
  v1->m_pkMyguild = 0;
  v1->m_uiCount = 0;
  *(_WORD *)&v1->m_bRolling = 256;
  v1->m_bCount = 0;
}
// 9B9334: using guessed type int (__stdcall *GTTDiceWin___vftable_)(int uiFlags);
// 9B9354: using guessed type int (__thiscall *GTTDiceWin___vftable_)(void *p, char);

//----- (005D8E20) --------------------------------------------------------
void __thiscall GTTDiceWin::_GTTDiceWin(GTTDiceWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTDiceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTDiceWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B9334: using guessed type int (__stdcall *GTTDiceWin___vftable_)(int uiFlags);
// 9B9354: using guessed type int (__thiscall *GTTDiceWin___vftable_)(void *p, char);

//----- (005D8E40) --------------------------------------------------------
void __thiscall GTTDiceWin::RollingDice(GTTDiceWin *this, bool b)
{
  this->m_bRolling = b;
}

//----- (005D8E50) --------------------------------------------------------
void __thiscall GTTDiceWin::InitDice(GTTDiceWin *this)
{
  GTTDiceWin *v1; // ebx@1
  int v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMyDice[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v2 = (int)v1->m_pkEnemyDice;
  ((void (__stdcall *)(_DWORD))v1->m_pkEnemyDice[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v3 = 0;
  do
  {
    if ( v3 )
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 24) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0);
    }
    ++v3;
    v2 += 4;
  }
  while ( v3 < 6 );
  *(_WORD *)&v1->m_bMyRolling = 257;
}

//----- (005D8EC0) --------------------------------------------------------
void __thiscall GTTDiceWin::SetCount(GTTDiceWin *this, bool b)
{
  this->m_bCount = b;
}

//----- (005D8ED0) --------------------------------------------------------
void __thiscall GTTDiceWin::UpdateMeWin(GTTDiceWin *this, float fCurTime)
{
  GTTDiceWin *v2; // esi@1
  signed int v3; // ebx@8
  int v4; // edi@8
  char *v5; // ebx@26

  v2 = this;
  if ( this->m_bRolling )
  {
    if ( this->m_uiCount > 5 )
      this->m_uiCount = 0;
    if ( this->m_bMyRolling )
      ((void (__stdcall *)(_DWORD))this->m_pkMyDice[this->m_uiCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    if ( v2->m_bEnemyRolling )
      ((void (__stdcall *)(_DWORD))v2->m_pkEnemyDice[v2->m_uiCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v3 = 0;
    v4 = (int)v2->m_pkEnemyDice;
    do
    {
      if ( v3 != v2->m_uiCount )
      {
        if ( v2->m_bMyRolling )
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 - 24) + 256))(0);
        if ( v2->m_bEnemyRolling )
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0);
      }
      ++v3;
      v4 += 4;
    }
    while ( v3 < 6 );
    if ( !(v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1)
      && CNSTimer_Interval::IsRun_GetCount(&v2->m_kTimerInterval, fCurTime) )
    {
      CNSTimer_Interval::ReSet(&v2->m_kTimerInterval, Timer::ms_fCurTime);
      ++v2->m_uiCount;
      v2->m_kTimerInterval.m_fCheckTime = 0.2;
    }
  }
  if ( v2->m_bCount
    && !(v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1)
    && CNSTimer_Interval::IsRun_GetCount(&v2->m_kTimerIntervalCount, fCurTime) )
  {
    if ( v2->m_uiDiceCount <= 5 )
    {
      CNSTimer_Interval::ReSet(&v2->m_kTimerIntervalCount, Timer::ms_fCurTime);
      if ( v2->m_uiDiceCount == 5 )
        v2->m_kTimerInterval.m_fCheckTime = 0.1;
      else
        v2->m_kTimerIntervalCount.m_fCheckTime = 1.0;
      v5 = fs("%d");
      if ( v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          46,
          v5,
          &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            46,
            v5,
            &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        46,
        v5,
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      ++v2->m_uiCount;
    }
    else
    {
      v2->m_bCount = 0;
      v2->m_uiDiceCount = 1;
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005D90B0) --------------------------------------------------------
void __thiscall GTTDiceWin::OnClickDice(GTTDiceWin *this)
{
  GTTDiceWin *v1; // esi@1
  bool v2; // zf@2

  v1 = this;
  if ( g_pkMainChar->m_dwGuildRegNum == GuildTask::GetGuildTournamentImprove()->m_DiceInfo.AGuild )
  {
    v2 = g_pkMainChar->m_kHandle == GuildTask::GetGuildTournamentImprove()->m_DiceInfo.AGuildDelegate;
  }
  else
  {
    if ( g_pkMainChar->m_dwGuildRegNum != GuildTask::GetGuildTournamentImprove()->m_DiceInfo.BGuild )
      return;
    v2 = g_pkMainChar->m_kHandle == GuildTask::GetGuildTournamentImprove()->m_DiceInfo.BGuildDelegate;
  }
  if ( v2 )
  {
    v1->m_bRolling = 1;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xD3u, 0, 0);
  }
}

//----- (005D9130) --------------------------------------------------------
void __thiscall GTTDiceWin::SetReseultDice(GTTDiceWin *this, unsigned int uiType, bool b)
{
  GTTDiceWin *v3; // esi@1
  GuildTournamentImprove *v4; // eax@7
  GuildTournamentImprove *v5; // eax@9
  signed int v6; // edi@10
  int v7; // ebx@10
  GuildTournamentImprove *v8; // eax@21
  GuildTournamentImprove *v9; // eax@23
  signed int v10; // edi@24
  int v11; // ebx@24
  GuildTournamentImprove *v12; // eax@36
  GuildTournamentImprove *v13; // eax@38
  signed int v14; // edi@39
  int v15; // ebx@39
  GuildTournamentImprove *v16; // eax@50
  GuildTournamentImprove *v17; // eax@52
  signed int v18; // edi@53
  int v19; // ebx@53

  v3 = this;
  if ( uiType )
  {
    if ( uiType == 1 )
    {
      this->m_bEnemyRolling = b;
      this->m_bMyRolling = b;
    }
  }
  else
  {
    this->m_bCount = 0;
  }
  if ( g_pkMainChar->m_dwGuildRegNum == GuildTask::GetGuildTournamentImprove()->m_GTTScore.AGuild )
  {
    if ( !v3->m_bMyRolling )
    {
      v4 = GuildTask::GetGuildTournamentImprove();
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)&v3->m_pkEnemyGuild + v4->m_GTTScore.AGuildScore) + 256))(1);
    }
    if ( !v3->m_bEnemyRolling )
    {
      v5 = GuildTask::GetGuildTournamentImprove();
      ((void (__stdcall *)(_DWORD))v3->m_pkMyDice[v5->m_GTTScore.BGuildScore + 5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    v6 = 0;
    v7 = (int)v3->m_pkEnemyDice;
    do
    {
      if ( v6 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.AGuildScore - 1 && !v3->m_bMyRolling )
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7 - 24) + 256))(0);
      if ( v6 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.BGuildScore - 1 )
      {
        if ( !v3->m_bEnemyRolling )
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0);
      }
      ++v6;
      v7 += 4;
    }
    while ( v6 < 6 );
  }
  else
  {
    if ( g_pkMainChar->m_dwGuildRegNum == GuildTask::GetGuildTournamentImprove()->m_GTTScore.BGuild )
    {
      if ( !v3->m_bMyRolling )
      {
        v8 = GuildTask::GetGuildTournamentImprove();
        (*(void (__stdcall **)(_DWORD))(**((_DWORD **)&v3->m_pkEnemyGuild + v8->m_GTTScore.BGuildScore) + 256))(1);
      }
      if ( !v3->m_bEnemyRolling )
      {
        v9 = GuildTask::GetGuildTournamentImprove();
        ((void (__stdcall *)(_DWORD))v3->m_pkMyDice[v9->m_GTTScore.AGuildScore + 5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      v10 = 0;
      v11 = (int)v3->m_pkEnemyDice;
      do
      {
        if ( v10 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.BGuildScore - 1 && !v3->m_bMyRolling )
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v11 - 24) + 256))(0);
        if ( v10 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.AGuildScore - 1 && !v3->m_bEnemyRolling )
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v11 + 256))(0);
        ++v10;
        v11 += 4;
      }
      while ( v10 < 6 );
    }
    else
    {
      if ( !v3->m_bEnemyRolling )
      {
        if ( GuildTask::GetGuildTournamentImprove()->m_GTTScore.AGuild )
        {
          if ( !v3->m_bMyRolling )
          {
            v12 = GuildTask::GetGuildTournamentImprove();
            (*(void (__stdcall **)(_DWORD))(**((_DWORD **)&v3->m_pkEnemyGuild + v12->m_GTTScore.BGuildScore) + 256))(1);
          }
          if ( !v3->m_bEnemyRolling )
          {
            v13 = GuildTask::GetGuildTournamentImprove();
            ((void (__stdcall *)(_DWORD))v3->m_pkMyDice[v13->m_GTTScore.AGuildScore + 5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          }
          v14 = 0;
          v15 = (int)v3->m_pkEnemyDice;
          do
          {
            if ( v14 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.BGuildScore - 1 && !v3->m_bMyRolling )
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v15 - 24) + 256))(0);
            if ( v14 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.AGuildScore - 1 && !v3->m_bEnemyRolling )
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v15 + 256))(0);
            ++v14;
            v15 += 4;
          }
          while ( v14 < 6 );
        }
        else
        {
          if ( GuildTask::GetGuildTournamentImprove()->m_GTTScore.BGuild )
          {
            if ( !v3->m_bMyRolling )
            {
              v16 = GuildTask::GetGuildTournamentImprove();
              (*(void (__stdcall **)(_DWORD))(**((_DWORD **)&v3->m_pkEnemyGuild + v16->m_GTTScore.AGuildScore) + 256))(1);
            }
            if ( !v3->m_bEnemyRolling )
            {
              v17 = GuildTask::GetGuildTournamentImprove();
              ((void (__stdcall *)(_DWORD))v3->m_pkMyDice[v17->m_GTTScore.BGuildScore + 5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
            }
            v18 = 0;
            v19 = (int)v3->m_pkEnemyDice;
            do
            {
              if ( v18 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.AGuildScore - 1 && !v3->m_bMyRolling )
                (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v19 - 24) + 256))(0);
              if ( v18 != GuildTask::GetGuildTournamentImprove()->m_GTTScore.BGuildScore - 1 && !v3->m_bEnemyRolling )
                (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v19 + 256))(0);
              ++v18;
              v19 += 4;
            }
            while ( v18 < 6 );
          }
        }
      }
    }
  }
}

//----- (005D9470) --------------------------------------------------------
void __thiscall GTTDiceWin::OnShowWin(GTTDiceWin *this)
{
  GTTDiceWin *v1; // ebx@1
  unsigned int v2; // ST00_4@2
  CClientGuild *v3; // eax@2
  char *v4; // edi@2
  unsigned int v5; // ST00_4@2
  CClientGuild *v6; // eax@2
  char *v7; // eax@2
  char *v8; // ecx@3
  char v9; // dl@4
  char *v10; // edx@6
  char v11; // cl@7
  unsigned int v12; // ST00_4@10
  CClientGuild *v13; // eax@10
  char *v14; // edi@10
  unsigned int v15; // ST00_4@10
  CClientGuild *v16; // eax@10
  char *v17; // eax@10
  char *v18; // ecx@11
  char v19; // dl@12
  char *v20; // edx@14
  char v21; // cl@15
  char acEnemyGuildName[32]; // [sp+Ch] [bp-44h]@1
  char acMyGuildName[32]; // [sp+2Ch] [bp-24h]@1
  unsigned int v24; // [sp+4Ch] [bp-4h]@1
  int v25; // [sp+50h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  *(_DWORD *)acMyGuildName = 0;
  *(_DWORD *)&acMyGuildName[4] = 0;
  *(_DWORD *)&acMyGuildName[8] = 0;
  *(_DWORD *)&acMyGuildName[12] = 0;
  *(_DWORD *)&acMyGuildName[16] = 0;
  *(_DWORD *)&acMyGuildName[20] = 0;
  *(_DWORD *)&acMyGuildName[24] = 0;
  *(_DWORD *)&acMyGuildName[28] = 0;
  *(_DWORD *)acEnemyGuildName = 0;
  *(_DWORD *)&acEnemyGuildName[4] = 0;
  *(_DWORD *)&acEnemyGuildName[8] = 0;
  *(_DWORD *)&acEnemyGuildName[12] = 0;
  *(_DWORD *)&acEnemyGuildName[16] = 0;
  *(_DWORD *)&acEnemyGuildName[20] = 0;
  *(_DWORD *)&acEnemyGuildName[24] = 0;
  *(_DWORD *)&acEnemyGuildName[28] = 0;
  v1 = this;
  if ( g_pkMainChar->m_dwGuildRegNum == GuildTask::GetGuildTournamentImprove()->m_DiceInfo.AGuild )
  {
    v2 = GuildTask::GetGuildTournamentImprove()->m_DiceInfo.AGuild;
    v3 = GuildTask::GetGuild();
    v4 = CClientGuild::FindGttEnemyInfo(v3, v2);
    v5 = GuildTask::GetGuildTournamentImprove()->m_DiceInfo.BGuild;
    v6 = GuildTask::GetGuild();
    v7 = CClientGuild::FindGttEnemyInfo(v6, v5);
    if ( v4 )
    {
      v8 = v4;
      do
      {
        v9 = *v8;
        v8[acMyGuildName - v4] = *v8;
        ++v8;
      }
      while ( v9 );
    }
    if ( v7 )
    {
      v10 = (char *)(acEnemyGuildName - v7);
      do
      {
        v11 = *v7;
        v7[(_DWORD)v10] = *v7;
        ++v7;
      }
      while ( v11 );
    }
  }
  else
  {
    if ( g_pkMainChar->m_dwGuildRegNum != GuildTask::GetGuildTournamentImprove()->m_DiceInfo.BGuild )
      return;
    v12 = GuildTask::GetGuildTournamentImprove()->m_DiceInfo.BGuild;
    v13 = GuildTask::GetGuild();
    v14 = CClientGuild::FindGttEnemyInfo(v13, v12);
    v15 = GuildTask::GetGuildTournamentImprove()->m_DiceInfo.AGuild;
    v16 = GuildTask::GetGuild();
    v17 = CClientGuild::FindGttEnemyInfo(v16, v15);
    if ( v14 )
    {
      v18 = v14;
      do
      {
        v19 = *v18;
        v18[acMyGuildName - v14] = *v18;
        ++v18;
      }
      while ( v19 );
    }
    if ( v17 )
    {
      v20 = (char *)(acEnemyGuildName - v17);
      do
      {
        v21 = *v17;
        v17[(_DWORD)v20] = *v17;
        ++v17;
      }
      while ( v21 );
    }
  }
  ((void (__stdcall *)(_DWORD))v1->m_pkMyguild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acMyGuildName);
  ((void (__stdcall *)(_DWORD))v1->m_pkEnemyGuild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acEnemyGuildName);
}
// A85C00: using guessed type int __security_cookie;

//----- (005D95D0) --------------------------------------------------------
bool __thiscall GTTDiceWin::Create(GTTDiceWin *this, PgFrameWork *pkFrameWork)
{
  GTTDiceWin *v2; // esi@1
  NiNode *v3; // esi@2
  NiTexturePalette *v5; // edi@7
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // ebx@11
  int v9; // edi@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@14
  PgSprData *v13; // eax@14
  PgSprData *v14; // eax@14
  PgSprData *v15; // eax@14
  PgSprData *v16; // eax@14
  PgWin *v17; // ebx@14
  PgFont *v18; // ST34_4@14
  unsigned int v19; // ST30_4@14
  unsigned int v20; // eax@14
  PgWinText *v21; // eax@14
  PgSprData *v22; // eax@14
  PgWin *v23; // ebx@14
  PgFont *v24; // ST34_4@14
  unsigned int v25; // ST30_4@14
  unsigned int v26; // eax@14
  PgWinText *v27; // eax@14
  signed int v28; // ebx@14
  NiNode *v29; // ST54_4@15
  char *v30; // eax@15
  PgSprData *v31; // eax@15
  NiNode *v32; // ST54_4@16
  NiNode *v33; // ST54_4@17
  PgSprData *v34; // eax@18
  bool v35; // zf@18
  PgSprData *v36; // ebx@19
  NiNode *v37; // eax@19
  NiNode *v38; // esi@20
  NiAVObject *v39; // [sp+18h] [bp-4Ch]@16
  const char *v40; // [sp+1Ch] [bp-48h]@12
  char *v41; // [sp+1Ch] [bp-48h]@16
  int *v42; // [sp+20h] [bp-44h]@12
  int *v43; // [sp+20h] [bp-44h]@16
  int *v44; // [sp+24h] [bp-40h]@12
  int *v45; // [sp+24h] [bp-40h]@16
  NiSourceTexture *v46; // [sp+28h] [bp-3Ch]@12
  int iYOff; // [sp+40h] [bp-24h]@11
  signed int v48; // [sp+44h] [bp-20h]@14
  NiSourceTexture *pkTexture; // [sp+48h] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+4Ch] [bp-18h]@1
  int uiLeft; // [sp+50h] [bp-14h]@10
  int uiTop; // [sp+54h] [bp-10h]@10
  int v53; // [sp+60h] [bp-4h]@1
  int pkFrameWorka; // [sp+6Ch] [bp+8h]@14

  v2 = this;
  spNode.m_pObject = 0;
  v53 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
    goto LABEL_26;
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildTDiceWin.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "GTTDiceWin", 0) )
  {
LABEL_26:
    v3 = spNode.m_pObject;
    v53 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v46 = v10;
    v44 = &uiTop;
    v42 = &uiLeft;
    v40 = "Theme";
  }
  else
  {
    v46 = 0;
    v44 = &uiTop;
    v42 = &uiLeft;
    v40 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v40, v42, v44, v46);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel05", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, pkTexture);
  v17 = (PgWin *)PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v18 = Font::Get(0);
  v19 = ((int (__thiscall *)(PgWin *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v17);
  v20 = ((int (__thiscall *)(PgWin *))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v17);
  v21 = PgWinText::CreateWin(0, 1, v20, v19, v18, v17, 0, 0);
  v2->m_pkMyguild = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    6u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkMyguild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B92A3);
  ((void (__stdcall *)(_DWORD))v2->m_pkMyguild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, pkTexture);
  v23 = (PgWin *)PgWinSpr::CreateWin(uiLeft - v9, uiTop - iYOff, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v24 = Font::Get(0);
  v25 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v23);
  v26 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v23);
  v27 = PgWinText::CreateWin(0, 1, v26, v25, v24, v23, 0, 0);
  v2->m_pkEnemyGuild = v27;
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    6u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkEnemyGuild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B92AA);
  ((void (__stdcall *)(_DWORD))v2->m_pkEnemyGuild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v28 = 7;
  pkFrameWorka = (int)v2->m_pkEnemyDice;
  v48 = 6;
  do
  {
    v29 = spNode.m_pObject;
    v30 = fs("Dice0%d");
    v31 = PgSprData::Create(&v29->baseclass_0, v30, &uiLeft, &uiTop, 0);
    *(_DWORD *)(pkFrameWorka - 24) = PgWinSpr::CreateWin(
                                       uiLeft - v9,
                                       uiTop,
                                       v31,
                                       &v2->baseclass_0.baseclass_0.baseclass_0,
                                       0,
                                       0);
    if ( v28 >= 10 )
    {
      v45 = &uiTop;
      v43 = &uiLeft;
      v33 = spNode.m_pObject;
      v41 = fs("Dice%d");
      v39 = (NiAVObject *)v33;
    }
    else
    {
      v45 = &uiTop;
      v43 = &uiLeft;
      v32 = spNode.m_pObject;
      v41 = fs("Dice0%d");
      v39 = (NiAVObject *)v32;
    }
    v34 = PgSprData::Create(v39, v41, v43, v45, 0);
    *(_DWORD *)pkFrameWorka = PgWinSpr::CreateWin(
                                uiLeft - v9,
                                uiTop,
                                v34,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0);
    ++v28;
    v35 = v48-- == 1;
    pkFrameWorka += 4;
  }
  while ( !v35 );
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v36, &spNode.m_pObject->baseclass_0, "BtnClick");
  PgSprData::Add(v36, &spNode.m_pObject->baseclass_0, "BtnOver");
  PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  ((void (__thiscall *)(GTTDiceWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.60000002);
  CNSTimer_Interval::ReSet(&v2->m_kTimerInterval, Timer::ms_fCurTime);
  v2->m_kTimerInterval.m_fCheckTime = 0.2;
  CNSTimer_Interval::ReSet(&v2->m_kTimerIntervalCount, Timer::ms_fCurTime);
  v37 = spNode.m_pObject;
  v2->m_kTimerIntervalCount.m_fCheckTime = 1.0;
  v53 = -1;
  if ( v37 )
  {
    v38 = v37;
    if ( !InterlockedDecrement((volatile LONG *)&v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v38 )
        v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005D9B10) --------------------------------------------------------
void __thiscall GTTDiceWin::OnCommand(GTTDiceWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    GTTDiceWin::OnClickDice(this);
}

//----- (005D9B30) --------------------------------------------------------
GTTDiceWin *__cdecl GTTDiceWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GTTDiceWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1D8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GTTDiceWin::GTTDiceWin((GTTDiceWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GTTDiceWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005D9C60) --------------------------------------------------------
void *__thiscall GTTDiceWin::_scalar_deleting_destructor_(GTTDiceWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTDiceWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTDiceWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B9334: using guessed type int (__stdcall *GTTDiceWin___vftable_)(int uiFlags);
// 9B9354: using guessed type int (__thiscall *GTTDiceWin___vftable_)(void *p, char);

//----- (005D9CA0) --------------------------------------------------------
void __thiscall GTTSkillWin::GTTSkillWin(GTTSkillWin *this)
{
  GTTSkillWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkMinimize = 0;
  v1->m_uiSkillPoint = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTSkillWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTSkillWin::_vftable_;
  v1->m_uiPageNum = 1;
  v1->m_uiCurSelTab = 10;
  v1->m_iRecordData = -1;
}
// 9B9758: using guessed type int (__stdcall *GTTSkillWin___vftable_)(int uiFlags);
// 9B9774: using guessed type int (__thiscall *GTTSkillWin___vftable_)(void *p, char);

//----- (005D9CF0) --------------------------------------------------------
void __thiscall GTTSkillWin::_GTTSkillWin(GTTSkillWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTSkillWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTSkillWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B9758: using guessed type int (__stdcall *GTTSkillWin___vftable_)(int uiFlags);
// 9B9774: using guessed type int (__thiscall *GTTSkillWin___vftable_)(void *p, char);

//----- (005D9D20) --------------------------------------------------------
void __thiscall GTTSkillWin::SetSkillPoint(GTTSkillWin *this, unsigned int uiSkillPoint)
{
  GTTSkillWin *v2; // esi@1
  PgWinText *v3; // ecx@1
  NiRefObjectVtbl *v4; // edi@1
  char *v5; // eax@1

  v2 = this;
  v3 = this->m_pkTotalDeadedCount;
  v2->m_uiSkillPoint = uiSkillPoint;
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = fs("%d");
  v4[118].__vecDelDtor((NiRefObject *)v2->m_pkTotalDeadedCount, (unsigned int)v5);
}

//----- (005D9D60) --------------------------------------------------------
void __thiscall GTTSkillWin::ReSetPage(GTTSkillWin *this)
{
  GTTSkillWin *v1; // ebx@1
  unsigned int v2; // eax@1
  int v3; // edi@1
  char *v4; // esi@2

  v1 = this;
  v2 = 9 * this->m_uiPageNum;
  v3 = v2 - 9;
  if ( v2 - 9 < v2 )
  {
    v4 = (char *)&this->m_pkDeathPoint[v3];
    do
    {
      SkillInvWin::SetSkill(*((SkillInvWin **)v4 - 18), 0xFFFFu, 0);
      SkillInvWin::SetSkill(*((SkillInvWin **)v4 - 9), 0xFFFFu, 0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 472))(&unk_9B958E);
      ++v3;
      v4 += 4;
    }
    while ( v3 < 9 * v1->m_uiPageNum );
  }
}

//----- (005D9DD0) --------------------------------------------------------
void __thiscall GTTSkillWin::OnHelpLink(GTTSkillWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildSkill");
}

//----- (005D9E00) --------------------------------------------------------
void __thiscall GTTMiniSkillWin::GTTMiniSkillWin(GTTMiniSkillWin *this)
{
  GTTMiniSkillWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTMiniSkillWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTMiniSkillWin::_vftable_;
  v1->m_uiSkillPoint = 0;
}
// 9B9998: using guessed type int (__stdcall *GTTMiniSkillWin___vftable_)(int uiFlags);
// 9B99B4: using guessed type int (__thiscall *GTTMiniSkillWin___vftable_)(void *p, char);

//----- (005D9E30) --------------------------------------------------------
void __thiscall GTTMiniSkillWin::_GTTMiniSkillWin(GTTMiniSkillWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTMiniSkillWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTMiniSkillWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9B9998: using guessed type int (__stdcall *GTTMiniSkillWin___vftable_)(int uiFlags);
// 9B99B4: using guessed type int (__thiscall *GTTMiniSkillWin___vftable_)(void *p, char);

//----- (005D9E60) --------------------------------------------------------
void __thiscall GTTMiniSkillWin::SetSkillPoint(GTTMiniSkillWin *this, unsigned int uiSkillPoint)
{
  GTTMiniSkillWin *v2; // esi@1
  PgWinText *v3; // ecx@1
  NiRefObjectVtbl *v4; // edi@1
  char *v5; // eax@1

  v2 = this;
  v3 = this->m_pkDeadCount;
  v2->m_uiSkillPoint = uiSkillPoint;
  v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = fs("%d");
  v4[118].__vecDelDtor((NiRefObject *)v2->m_pkDeadCount, (unsigned int)v5);
}

//----- (005D9EA0) --------------------------------------------------------
void __thiscall GTTMiniSkillWin::UpdateMeWin(GTTMiniSkillWin *this, float fCurTime)
{
  PgWin *v2; // esi@1
  PgWin *v3; // eax@4

  v2 = (PgWin *)this;
  if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->m_pkIconSlot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    && !*(_BYTE *)(g_pkMouse + 129) )
  {
    if ( *(_BYTE *)(g_pkMouse + 131) )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v2);
      v3 = (PgWin *)GuildTask::GetGTTSkillWin();
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
    }
  }
}
// A98170: using guessed type int g_pkMouse;

//----- (005D9F00) --------------------------------------------------------
void __thiscall GTTSkillWin::InitPage(GTTSkillWin *this)
{
  GTTSkillWin *v1; // esi@1
  int v2; // eax@1
  int v3; // ebx@2
  unsigned int v4; // eax@3
  SkillInvWin *v5; // ecx@4
  unsigned int v6; // edi@8
  int v7; // edi@14
  char *v8; // eax@14
  int v9; // [sp-Ch] [bp-1Ch]@4
  unsigned int v10; // [sp-8h] [bp-18h]@4
  int i; // [sp+8h] [bp-8h]@1
  int uiNeedPoint; // [sp+Ch] [bp-4h]@1

  v1 = this;
  this->m_iRecordData = -1;
  GTTSkillWin::ReSetPage(this);
  v2 = 9 * v1->m_uiPageNum;
  i = v2 - 9;
  uiNeedPoint = -1;
  if ( v2 - 9 < (unsigned int)v2 )
  {
    v3 = (int)&v1->m_pkDeathPoint[v2 - 9];
    do
    {
      v4 = v1->m_uiCurSelTab;
      if ( v4 == 10 )
      {
        v5 = *(SkillInvWin **)(v3 - 72);
        v10 = 10;
        v9 = v1->m_iRecordData;
      }
      else
      {
        if ( v4 != 9 )
          goto LABEL_8;
        v10 = 9;
        v9 = v1->m_iRecordData;
        v5 = *(SkillInvWin **)(v3 - 36);
      }
      uiNeedPoint = SkillInvWin::SetSkill(v5, v9, v10);
LABEL_8:
      v6 = uiNeedPoint;
      if ( uiNeedPoint >= 0 )
      {
        v1->m_iRecordData = uiNeedPoint;
        if ( uiNeedPoint < GuildTournamentStateTab::GetTotal() )
        {
          while ( !CDataReader::GetRecord(
                     (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                     v6) )
          {
            ++v6;
            if ( v6 >= GuildTournamentStateTab::GetTotal() )
              goto LABEL_15;
          }
          if ( CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                 v6) )
          {
            v7 = **(_DWORD **)v3;
            v8 = fs("%d");
            (*(void (__thiscall **)(_DWORD, char *))(v7 + 472))(*(_DWORD *)v3, v8);
          }
        }
      }
LABEL_15:
      v3 += 4;
      ++i;
    }
    while ( i < 9 * v1->m_uiPageNum );
  }
}
// A97E78: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab___ms_pkTable;

//----- (005DA000) --------------------------------------------------------
void __thiscall GTTSkillWin::OnInvLClick(GTTSkillWin *this, unsigned int uiIndex)
{
  GTTSkillWin *v2; // esi@1
  unsigned int v3; // eax@1
  unsigned int v4; // edi@2
  SkillInvWin *v5; // eax@2
  GUILD_TOURNAMENT_SKILL *v6; // eax@5
  unsigned int v7; // eax@7

  v2 = this;
  v3 = this->m_uiCurSelTab;
  if ( v3 == 10 )
  {
    v4 = uiIndex;
    v5 = this->m_apkBuffInvWin[uiIndex];
  }
  else
  {
    if ( v3 != 9 )
      return;
    v4 = uiIndex;
    v5 = this->m_apkDeBuffInvWin[uiIndex];
  }
  v6 = GuildTournamentStateTab::GetByMapIndex(v5->m_iStaNum, v5->m_uiMapType);
  if ( v6 && v2->m_uiSkillPoint >= v6->DeathPoint )
  {
    v7 = v2->m_uiCurSelTab;
    LOWORD(uiIndex) = 0;
    if ( v7 == 10 )
    {
      LOWORD(uiIndex) = LOWORD(v2->m_apkBuffInvWin[v4]->m_iStaNum);
    }
    else
    {
      if ( v7 == 9 )
        LOWORD(uiIndex) = LOWORD(v2->m_apkDeBuffInvWin[v4]->m_iStaNum);
    }
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xCFu, &uiIndex, 2);
  }
}

//----- (005DA0B0) --------------------------------------------------------
void __thiscall GTTSkillWin::StartCoolTime(GTTSkillWin *this, unsigned int uiIndex)
{
  IconWin **v2; // ebx@1
  unsigned int v3; // eax@3
  unsigned int v4; // edi@5
  unsigned int v5; // esi@6
  void *v6; // eax@10
  float v7; // ST18_4@12
  unsigned int v8; // edi@17
  unsigned int v9; // esi@18
  void *v10; // eax@22
  float v11; // ST18_4@24
  GTTSkillWin *v12; // [sp+1Ch] [bp-8h]@1
  signed int v13; // [sp+20h] [bp-4h]@1

  v12 = this;
  v2 = (IconWin **)this->m_apkDeBuffInvWin;
  v13 = 9;
  while ( 1 )
  {
    v3 = this->m_uiCurSelTab;
    if ( v3 == 10 )
    {
      if ( uiIndex == LODWORD((*(v2 - 9))[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.y) )
      {
        v4 = 0;
        if ( GuildTournamentStateTab::GetTotal() )
        {
          do
          {
            v5 = v4;
            if ( v4 < GuildTournamentStateTab::GetTotal() )
            {
              while ( !CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                         v5) )
              {
                ++v5;
                if ( v5 >= GuildTournamentStateTab::GetTotal() )
                  goto LABEL_13;
              }
              v6 = CDataReader::GetRecord(
                     (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                     v5);
              if ( v6 )
              {
                if ( *((_WORD *)v6 + 1) == uiIndex )
                {
                  v7 = (double)*(unsigned int *)((char *)v6 + 42) / 1000.0;
                  IconWin::StartCoolTime(*(v2 - 9), Timer::ms_fCurTime, v7, 0.0);
                }
              }
            }
LABEL_13:
            ++v4;
          }
          while ( v4 < GuildTournamentStateTab::GetTotal() );
        }
      }
    }
    else
    {
      if ( v3 == 9 )
      {
        if ( uiIndex == LODWORD((*v2)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.y) )
        {
          v8 = 0;
          if ( GuildTournamentStateTab::GetTotal() )
          {
            do
            {
              v9 = v8;
              if ( v8 < GuildTournamentStateTab::GetTotal() )
              {
                while ( !CDataReader::GetRecord(
                           (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                           v9) )
                {
                  ++v9;
                  if ( v9 >= GuildTournamentStateTab::GetTotal() )
                    goto LABEL_25;
                }
                v10 = CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                        v9);
                if ( v10 && *((_WORD *)v10 + 1) == uiIndex )
                {
                  v11 = (double)*(unsigned int *)((char *)v10 + 42) / 1000.0;
                  IconWin::StartCoolTime(*v2, Timer::ms_fCurTime, v11, 0.0);
                }
              }
LABEL_25:
              ++v8;
            }
            while ( v8 < GuildTournamentStateTab::GetTotal() );
          }
        }
      }
    }
    ++v2;
    --v13;
    if ( !v13 )
      break;
    this = v12;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97E78: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab___ms_pkTable;

//----- (005DA270) --------------------------------------------------------
bool __thiscall GTTMiniSkillWin::Create(GTTMiniSkillWin *this, PgFrameWork *pkFrameWork)
{
  GTTMiniSkillWin *v2; // esi@1
  NiNode *v3; // esi@2
  NiTexturePalette *v5; // edi@7
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ST50_4@11
  PgSprData *v10; // eax@11
  PgSprData *v11; // ebx@11
  PgSprData::PgHitTester *v12; // eax@11
  unsigned int v13; // ebx@11
  PgFont *v14; // eax@11
  PgWinText *v15; // eax@11
  NiNode *v16; // esi@12
  int uiLeft; // [sp+28h] [bp-18h]@10
  int uiTop; // [sp+2Ch] [bp-14h]@10
  NiPointer<NiNode> spNode; // [sp+30h] [bp-10h]@1
  int v20; // [sp+3Ch] [bp-4h]@1
  unsigned int pkFrameWorka; // [sp+48h] [bp+8h]@11

  v2 = this;
  spNode.m_pObject = 0;
  v20 = 0;
  if ( !MenuTexMgr::GetTexture(4u) )
    goto LABEL_18;
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildSkill_Min.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "GTTMiniSkillWin", 0) )
  {
LABEL_18:
    v3 = spNode.m_pObject;
    v20 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  v2->m_pkIconSlot = PgWinSpr::CreateWin(uiLeft - v8, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DeathCount01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = v11->m_akHitTester.m_pBase->m_pObject;
  v13 = v12->m_uiHeight;
  pkFrameWorka = v12->m_uiWidth;
  v14 = Font::Get(0);
  v15 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          pkFrameWorka,
          v13,
          v14,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkDeadCount = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v15,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkDeadCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v2->m_pkDeadCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__thiscall *)(GTTMiniSkillWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.80000001,
    0.69999999);
  v20 = -1;
  if ( spNode.m_pObject )
  {
    v16 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v16 )
        v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005DA4B0) --------------------------------------------------------
bool __thiscall GTTSkillWin::Create(GTTSkillWin *this, PgFrameWork *pkFrameWork)
{
  GTTSkillWin *v2; // esi@1
  NiNode *v3; // esi@2
  NiTexturePalette *v5; // edi@7
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@14
  PgSprData *v13; // eax@14
  PgSprData *v14; // eax@14
  NiPointer<PgSprData::PgHitTester> *v15; // ecx@14
  unsigned int v16; // ST74_4@14
  PgFont *v17; // eax@14
  int v18; // ST74_4@14
  char *v19; // eax@14
  ColumnBut *v20; // eax@14
  NiPointer<PgSprData::PgHitTester> *v21; // ecx@14
  unsigned int v22; // ST74_4@14
  PgFont *v23; // eax@14
  PgWinText *v24; // eax@14
  char *v25; // eax@14
  NiPointer<PgSprData::PgHitTester> *v26; // ecx@14
  unsigned int v27; // ST74_4@14
  PgFont *v28; // eax@14
  PgWinText *v29; // eax@14
  char *v30; // eax@14
  NiPointer<PgSprData::PgHitTester> *v31; // ecx@14
  unsigned int v32; // ST74_4@14
  PgFont *v33; // eax@14
  PgWinText *v34; // eax@14
  char *v35; // eax@14
  NiPointer<PgSprData::PgHitTester> *v36; // ecx@14
  unsigned int v37; // ST74_4@14
  PgFont *v38; // eax@14
  PgWinText *v39; // eax@14
  NiNode *v40; // ST78_4@17
  char *v41; // eax@17
  PgSprData *v42; // eax@17
  PgWin *v43; // ST78_4@17
  PgFont *v44; // ST54_4@17
  unsigned int v45; // ST50_4@17
  unsigned int v46; // eax@17
  PgWinText *v47; // eax@17
  NiNode *v48; // ST78_4@17
  char *v49; // eax@17
  PgSprData *v50; // eax@17
  SkillInvWin *v51; // eax@17
  SkillInvWin *v52; // eax@17
  NiNode *v53; // esi@18
  const char *v54; // [sp+54h] [bp-48h]@12
  int *v55; // [sp+58h] [bp-44h]@12
  int *v56; // [sp+5Ch] [bp-40h]@12
  NiSourceTexture *v57; // [sp+60h] [bp-3Ch]@12
  unsigned int i; // [sp+7Ch] [bp-20h]@16
  NiSourceTexture *pkTexture; // [sp+80h] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+84h] [bp-18h]@1
  int uiLeft; // [sp+88h] [bp-14h]@10
  int uiTop; // [sp+8Ch] [bp-10h]@10
  int v63; // [sp+98h] [bp-4h]@1
  PgSprData *pkTexture8b; // [sp+A4h] [bp+8h]@14
  unsigned int pkTexture8c; // [sp+A4h] [bp+8h]@14
  PgWinText *pkTexture8d; // [sp+A4h] [bp+8h]@14
  PgSprData *pkTexture8e; // [sp+A4h] [bp+8h]@14
  unsigned int pkTexture8f; // [sp+A4h] [bp+8h]@14
  int pkTexture8g; // [sp+A4h] [bp+8h]@14
  PgSprData *pkTexture8h; // [sp+A4h] [bp+8h]@14
  unsigned int pkTexture8i; // [sp+A4h] [bp+8h]@14
  int pkTexture8j; // [sp+A4h] [bp+8h]@14
  unsigned int pkTexture8k; // [sp+A4h] [bp+8h]@14
  int pkTexture8l; // [sp+A4h] [bp+8h]@14
  PgSprData *pkTexture8m; // [sp+A4h] [bp+8h]@14
  unsigned int pkTexture8n; // [sp+A4h] [bp+8h]@14
  PgSprData *pkTexture8o; // [sp+A4h] [bp+8h]@14
  NiSourceTexture *pkTexture8; // [sp+A4h] [bp+8h]@14
  PgSprData *pkTexture8p; // [sp+A4h] [bp+8h]@15
  PgSprData *pkTexture8q; // [sp+A4h] [bp+8h]@16
  PgSprData *pkTexture8r; // [sp+A4h] [bp+8h]@16
  int pkTexture8a; // [sp+A4h] [bp+8h]@16

  v2 = this;
  spNode.m_pObject = 0;
  v63 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
    goto LABEL_25;
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildSkill.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "GTTSkillWin", 0) )
  {
LABEL_25:
    v3 = spNode.m_pObject;
    v63 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v57 = v10;
    v56 = &uiTop;
    v55 = &uiLeft;
    v54 = "Theme";
  }
  else
  {
    v57 = 0;
    v56 = &uiTop;
    v55 = &uiLeft;
    v54 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v54, v55, v56, v57);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTexture8b = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8b, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = pkTexture8b->m_akHitTester.m_pBase;
  pkTexture8c = v15->m_pObject->m_uiHeight;
  v16 = v15->m_pObject->m_uiWidth;
  v17 = Font::Get(0);
  pkTexture8d = PgWinText::CreateWin(
                  uiLeft - v8,
                  uiTop - v9,
                  v16,
                  pkTexture8c,
                  v17,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  0,
                  0);
  pkTexture8d->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTexture8d,
    5u);
  v18 = (int)&pkTexture8d->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v19 = TextData2::Get(0xBDF42A3Au);
  (*(void (__thiscall **)(PgWinText *, char *))v18)(pkTexture8d, v19);
  ((void (__stdcall *)(_DWORD))pkTexture8d->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8e = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8e, &spNode.m_pObject->baseclass_0, "Tab01_On");
  v20 = ColumnBut::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8e, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0);
  v2->m_pkBuff = v20;
  v20->m_bCheck = 1;
  v21 = pkTexture8e->m_akHitTester.m_pBase;
  pkTexture8f = v21->m_pObject->m_uiHeight;
  v22 = v21->m_pObject->m_uiWidth;
  v23 = Font::Get(MAIN_MENU);
  v24 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          v22,
          pkTexture8f,
          v23,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkBuffText = v24;
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v24,
    5u);
  pkTexture8g = (int)&v2->m_pkBuffText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v25 = TextData2::Get(0xBAFECD34u);
  (*(void (__thiscall **)(PgWinText *, char *))pkTexture8g)(v2->m_pkBuffText, v25);
  ((void (__stdcall *)(_DWORD))v2->m_pkBuffText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8h = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8h, &spNode.m_pObject->baseclass_0, "Tab02_On");
  v2->m_pkDeBuff = ColumnBut::CreateWin(
                     uiLeft - v8,
                     uiTop - v9,
                     pkTexture8h,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0xFu,
                     0);
  v26 = pkTexture8h->m_akHitTester.m_pBase;
  pkTexture8i = v26->m_pObject->m_uiHeight;
  v27 = v26->m_pObject->m_uiWidth;
  v28 = Font::Get(MAIN_MENU);
  v29 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          v27,
          pkTexture8i,
          v28,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkDebuffText = v29;
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v29,
    5u);
  pkTexture8j = (int)&v2->m_pkDebuffText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v30 = TextData2::Get(0xB6341543u);
  (*(void (__thiscall **)(PgWinText *, char *))pkTexture8j)(v2->m_pkDebuffText, v30);
  ((void (__stdcall *)(_DWORD))v2->m_pkDebuffText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  pkTexture8k = v31->m_pObject->m_uiHeight;
  v32 = v31->m_pObject->m_uiWidth;
  v33 = Font::Get(MAIN_MENU);
  v34 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          v32,
          pkTexture8k,
          v33,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkDeadedCountText = v34;
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v34,
    5u);
  pkTexture8l = (int)&v2->m_pkDeadedCountText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v35 = TextData2::Get(0xC40ADCD2u);
  (*(void (__thiscall **)(PgWinText *, char *))pkTexture8l)(v2->m_pkDeadedCountText, v35);
  ((void (__stdcall *)(_DWORD))v2->m_pkDeadedCountText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8m = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DeathCount10", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8m, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v36 = pkTexture8m->m_akHitTester.m_pBase;
  pkTexture8n = v36->m_pObject->m_uiHeight;
  v37 = v36->m_pObject->m_uiWidth;
  v38 = Font::Get(MAIN_MENU);
  v39 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9 + 1,
          v37,
          pkTexture8n,
          v38,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkTotalDeadedCount = v39;
  v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v39,
    5u);
  ((void (__stdcall *)(_DWORD))v2->m_pkTotalDeadedCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("0");
  ((void (__stdcall *)(_DWORD))v2->m_pkTotalDeadedCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8o = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8o, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTexture8o, &spNode.m_pObject->baseclass_0, "ClsOver");
  v2->m_pkMinimize = PgWinBut::CreateWin(
                       uiLeft - v8,
                       uiTop - v9,
                       pkTexture8o,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0xBu,
                       0,
                       0);
  pkTexture8 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTexture8p = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
    PgSprData::Add(pkTexture8p, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTexture8p, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8p, &v2->baseclass_0.baseclass_0.baseclass_0, 0x12u, 0, 0);
  }
  pkTexture8q = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8q, &spNode.m_pObject->baseclass_0, "PrePageClick");
  PgSprData::Add(pkTexture8q, &spNode.m_pObject->baseclass_0, "PrePageOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8q, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
  pkTexture8r = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextPageNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTexture8r, &spNode.m_pObject->baseclass_0, "NextPageClick");
  PgSprData::Add(pkTexture8r, &spNode.m_pObject->baseclass_0, "NextPageOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTexture8r, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, 0, 0);
  i = 0;
  pkTexture8a = (int)v2->m_apkDeBuffInvWin;
  do
  {
    v40 = spNode.m_pObject;
    v41 = fs("DeathCount0%d");
    v42 = PgSprData::Create(&v40->baseclass_0, v41, &uiLeft, &uiTop, pkTexture);
    v43 = (PgWin *)PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v44 = Font::Get(0);
    v45 = ((int (*)(void))v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v46 = ((int (*)(void))v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v47 = PgWinText::CreateWin(0, 1, v46, v45, v44, v43, 0, 0);
    *(_DWORD *)(pkTexture8a + 36) = v47;
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v47,
      5u);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(pkTexture8a + 36) + 472))("0");
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(pkTexture8a + 36) + 240))(0);
    v48 = spNode.m_pObject;
    v49 = fs("IconSlot00%d");
    v50 = PgSprData::Create(&v48->baseclass_0, v49, &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v50, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v51 = SkillInvWin::CreateWin(uiLeft - v8, uiTop - v9, i, &v2->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)pkTexture8a = v51;
    SkillInvWin::SetSkill(v51, 0xFFFFu, 0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)pkTexture8a + 516))(12);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)pkTexture8a + 560))(13);
    *(_DWORD *)(*(_DWORD *)pkTexture8a + 272) = g_pkToolTipWin;
    v52 = SkillInvWin::CreateWin(uiLeft - v8, uiTop - v9, i, &v2->baseclass_0.baseclass_0.baseclass_0);
    *(_DWORD *)(pkTexture8a - 36) = v52;
    SkillInvWin::SetSkill(v52, 0xFFFFu, 0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)(pkTexture8a - 36) + 516))(12);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)(pkTexture8a - 36) + 560))(13);
    *(_DWORD *)(*(_DWORD *)(pkTexture8a - 36) + 272) = g_pkToolTipWin;
    ++i;
    pkTexture8a += 4;
  }
  while ( (signed int)i < 9 );
  ((void (__thiscall *)(GTTSkillWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  GTTSkillWin::ReSetPage(v2);
  GTTSkillWin::InitPage(v2);
  v53 = spNode.m_pObject;
  v63 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v53 )
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v53, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005DAE70) --------------------------------------------------------
void __thiscall GTTSkillWin::OnCommand(GTTSkillWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // eax@5
  PgFrameWork *v4; // eax@6

  switch ( wParam )
  {
    case 0xFu:
      this->m_pkBuff->m_bCheck = 0;
      this->m_pkDeBuff->m_bCheck = 1;
      this->m_uiCurSelTab = 9;
      GTTSkillWin::InitPage(this);
      break;
    case 0xEu:
      this->m_pkBuff->m_bCheck = 1;
      this->m_pkDeBuff->m_bCheck = 0;
      this->m_uiCurSelTab = 10;
      GTTSkillWin::InitPage(this);
      break;
    case 0xCu:
      GTTSkillWin::OnInvLClick(this, lParam);
      break;
    case 0xBu:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      v3 = (PgWin *)GuildTask::GetGTTMiniSkillWin();
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v3);
      break;
    case 0x12u:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "GuildSkill");
      break;
    default:
      return;
  }
}

//----- (005DAF60) --------------------------------------------------------
GTTSkillWin *__cdecl GTTSkillWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GTTSkillWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x214u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GTTSkillWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GTTSkillWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 129) = 0;
    *((_DWORD *)v2 + 130) = 1;
    *((_DWORD *)v2 + 131) = 10;
    *((_DWORD *)v2 + 132) = -1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GTTSkillWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B9758: using guessed type int (__stdcall *GTTSkillWin___vftable_)(int uiFlags);
// 9B9774: using guessed type int (__thiscall *GTTSkillWin___vftable_)(void *p, char);

//----- (005DB0D0) --------------------------------------------------------
GTTMiniSkillWin *__cdecl GTTMiniSkillWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GTTMiniSkillWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x164u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GTTMiniSkillWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GTTMiniSkillWin::_vftable_;
    *((_DWORD *)v2 + 88) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GTTMiniSkillWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9B9998: using guessed type int (__stdcall *GTTMiniSkillWin___vftable_)(int uiFlags);
// 9B99B4: using guessed type int (__thiscall *GTTMiniSkillWin___vftable_)(void *p, char);

//----- (005DB210) --------------------------------------------------------
void *__thiscall GTTSkillWin::_scalar_deleting_destructor_(GTTSkillWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTSkillWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTSkillWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B9758: using guessed type int (__stdcall *GTTSkillWin___vftable_)(int uiFlags);
// 9B9774: using guessed type int (__thiscall *GTTSkillWin___vftable_)(void *p, char);

//----- (005DB250) --------------------------------------------------------
void *__thiscall GTTMiniSkillWin::_vector_deleting_destructor_(GTTMiniSkillWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTTMiniSkillWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTTMiniSkillWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9B9998: using guessed type int (__stdcall *GTTMiniSkillWin___vftable_)(int uiFlags);
// 9B99B4: using guessed type int (__thiscall *GTTMiniSkillWin___vftable_)(void *p, char);

//----- (005DB290) --------------------------------------------------------
GUILD_TOURNAMENT_SKILL *__cdecl GuildTournamentStateTab::GetByMapIndex(unsigned int uiIndex, unsigned int uiMapType)
{
  unsigned int v2; // esi@1
  GUILD_TOURNAMENT_SKILL *result; // eax@5

  v2 = 0;
  if ( GuildTournamentStateTab::GetTotal() )
  {
    while ( *((_WORD *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                         v2)
            + 1) != uiIndex
         || *(_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable + 4),
                        v2) != uiMapType )
    {
      ++v2;
      if ( v2 >= GuildTournamentStateTab::GetTotal() )
        goto LABEL_5;
    }
    result = (GUILD_TOURNAMENT_SKILL *)CDataReader::GetRecord(
                                         (CDataReader *)(ITableBase<GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab>::ms_pkTable
                                                       + 4),
                                         v2);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A97E78: using guessed type int ITableBase_GUILD_TOURNAMENT_SKILL_GuildTournamentStateTab___ms_pkTable;

//----- (005DB310) --------------------------------------------------------
bool __cdecl GuildListWin::GuildInfo::High_GuildType(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  return rhw->m_unGuildType < lhw->m_unGuildType;
}

//----- (005DB330) --------------------------------------------------------
bool __cdecl GuildListWin::GuildInfo::Low_GuildType(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  return lhw->m_unGuildType < rhw->m_unGuildType;
}

//----- (005DB350) --------------------------------------------------------
bool __cdecl GTRequestListWin::GuildInfo::High_GuildGrade(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  return rhw->m_unGuildGrade < lhw->m_unGuildGrade;
}

//----- (005DB370) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::GuildTournamentBaseWin(GuildTournamentBaseWin *this)
{
  GuildTournamentBaseWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentBaseWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentBaseWin::_vftable_;
  v1->m_pkGTRequestListWin = 0;
}
// 9BA0A0: using guessed type int (__stdcall *GuildTournamentBaseWin___vftable_)(int uiFlags);
// 9BA0BC: using guessed type int (__thiscall *GuildTournamentBaseWin___vftable_)(void *p, char);

//----- (005DB3A0) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::_GuildTournamentBaseWin(GuildTournamentBaseWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentBaseWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentBaseWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9BA0A0: using guessed type int (__stdcall *GuildTournamentBaseWin___vftable_)(int uiFlags);
// 9BA0BC: using guessed type int (__thiscall *GuildTournamentBaseWin___vftable_)(void *p, char);

//----- (005DB3E0) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::OnShowWin(GuildTournamentBaseWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v1, BIL_GUILDWAR_3);
}

//----- (005DB400) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::DirectMessage(GuildTournamentBaseWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
    {
      iMsgTag = GuildTask::GetGuild()->baseclass_0.m_Guild.nNo;
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x7Au, &iMsgTag, 4);
    }
  }
}

//----- (005DB440) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::On_NC_GUILD_TOURNAMENT_LIST_REQ(GuildTournamentBaseWin *this)
{
  GuildTask::SetListReq(1);
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x7Eu, 0, 0);
}

//----- (005DB460) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::On_NC_GUILD_TOURNAMENT_STORAGEOPEN_REQ(GuildTournamentBaseWin *this)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0x91u, 0, 0);
}

//----- (005DB480) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::OnHelpLink(GuildTournamentBaseWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildMenu");
}

//----- (005DB4B0) --------------------------------------------------------
void __thiscall GTRequestListWin::UpdateMeWin(GTRequestListWin *this, float fCurTime)
{
  GTRequestListWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pkGuildLIst, v2->m_pkSlideBarGuild);
}

//----- (005DB4E0) --------------------------------------------------------
void __thiscall GTRequestListWin::OnHelpLink(GTRequestListWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildList");
}

//----- (005DB510) --------------------------------------------------------
void __thiscall GTRequestListWin::OnSlideBar(GTRequestListWin *this)
{
  GTRequestListWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pkGuildLIst;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarGuild;
    if ( v3 )
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
    v1->m_pkGuildLIst->m_nViewStartPos = v1->m_pkSlideBarGuild->m_nCurPos;
    SlideListWin::UpdateViewList(v1->m_pkGuildLIst);
  }
}

//----- (005DB560) --------------------------------------------------------
void __thiscall GTRequestListWin::OnSearchChoice(GTRequestListWin *this)
{
  GTRequestListWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
  PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, &v1->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  ((void (__stdcall *)(_DWORD))v1->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
}

//----- (005DB5D0) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::On_NC_GUILD_TOURNAMENT_JOIN_REQ(GuildTournamentBaseWin *this)
{
  void *v1; // eax@2
  unsigned int v2; // ebx@3
  int v3; // eax@5
  char v4; // cl@6
  char *v5; // eax@7
  const void *v6; // edx@7
  char v7; // cl@8
  unsigned int v8; // eax@9
  void *v9; // edi@9
  char v10; // cl@10
  char *v11; // edi@11
  char v12; // al@12
  unsigned int v13; // eax@15
  void *v14; // edi@15
  char v15; // cl@16
  char *v16; // eax@17
  char *v17; // ecx@17
  char v18; // dl@18
  unsigned int v19; // eax@19
  const void *v20; // esi@19
  void *v21; // edi@19
  char v22; // cl@20
  char *v23; // edi@21
  char v24; // al@22
  unsigned int v25; // eax@25
  void *v26; // edi@25
  char v27; // cl@26
  char *v28; // eax@27
  char *v29; // ecx@27
  char v30; // dl@28
  unsigned int v31; // eax@29
  const void *v32; // esi@29
  void *v33; // edi@29
  char v34; // cl@30
  char *v35; // edi@31
  char v36; // al@32
  unsigned int v37; // eax@35
  void *v38; // edi@35
  char v39; // cl@36
  char *v40; // eax@37
  char *v41; // ecx@37
  char v42; // dl@38
  unsigned int v43; // eax@39
  const void *v44; // esi@39
  void *v45; // edi@39
  char v46; // cl@40
  char *v47; // edi@41
  char v48; // al@42
  char *v49; // eax@44
  char *v50; // eax@44
  MsgBox *v51; // eax@44
  int v52; // edx@45
  GuildTournamentBaseWin *v53; // [sp+0h] [bp-208h]@1
  char acStr1[256]; // [sp+4h] [bp-204h]@3
  char acStr2[256]; // [sp+104h] [bp-104h]@3
  unsigned int v56; // [sp+204h] [bp-4h]@1
  int v57; // [sp+208h] [bp+0h]@1

  v56 = (unsigned int)&v57 ^ __security_cookie;
  v53 = this;
  if ( CDataReader::GetRecord((CDataReader *)(ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 4), 0) )
  {
    v1 = CDataReader::GetRecord((CDataReader *)(ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 4), 0);
    if ( v1 )
    {
      v2 = *(_DWORD *)((char *)v1 + 3);
      memset(acStr1, 0, 0x100u);
      memset(acStr2, 0, 0x100u);
      if ( v2 )
      {
        if ( User::GetGem(v2) )
        {
          User::GetGem(v2);
          sprintf(acStr1, "%I64d");
          v3 = 0;
          do
          {
            v4 = acStr1[v3];
            acStr2[v3++] = v4;
          }
          while ( v4 );
          v5 = TextData::Get(0x475F9699u);
          v6 = v5;
          do
            v7 = *v5++;
          while ( v7 );
          v8 = v5 - v6;
          v9 = &acStr1[255];
          do
          {
            v10 = *((_BYTE *)v9 + 1);
            v9 = (char *)v9 + 1;
          }
          while ( v10 );
          memcpy(v9, v6, v8);
          v11 = &acStr1[255];
          do
            v12 = (v11++)[1];
          while ( v12 );
          *v11 = byte_9B9D20;
        }
        if ( User::GetGold(v2) )
        {
          User::GetGold(v2);
          sprintf(acStr1, "%I64d");
          v13 = strlen(acStr1) + 1;
          v14 = &acStr1[255];
          do
          {
            v15 = *((_BYTE *)v14 + 1);
            v14 = (char *)v14 + 1;
          }
          while ( v15 );
          memcpy(v14, acStr1, v13);
          v16 = TextData::Get(0x47A395A3u);
          v17 = v16;
          do
            v18 = *v16++;
          while ( v18 );
          v19 = v16 - v17;
          v20 = v17;
          v21 = &acStr1[255];
          do
          {
            v22 = *((_BYTE *)v21 + 1);
            v21 = (char *)v21 + 1;
          }
          while ( v22 );
          memcpy(v21, v20, v19);
          v23 = &acStr1[255];
          do
            v24 = (v23++)[1];
          while ( v24 );
          *v23 = byte_9B9D2C;
        }
        if ( User::GetSilver(v2) )
        {
          User::GetSilver(v2);
          sprintf(acStr1, "%I64d");
          v25 = strlen(acStr1) + 1;
          v26 = &acStr1[255];
          do
          {
            v27 = *((_BYTE *)v26 + 1);
            v26 = (char *)v26 + 1;
          }
          while ( v27 );
          memcpy(v26, acStr1, v25);
          v28 = TextData::Get(0x98B595EFu);
          v29 = v28;
          do
            v30 = *v28++;
          while ( v30 );
          v31 = v28 - v29;
          v32 = v29;
          v33 = &acStr1[255];
          do
          {
            v34 = *((_BYTE *)v33 + 1);
            v33 = (char *)v33 + 1;
          }
          while ( v34 );
          memcpy(v33, v32, v31);
          v35 = &acStr1[255];
          do
            v36 = (v35++)[1];
          while ( v36 );
          *v35 = byte_9B9D38;
        }
        if ( User::GetCopper(v2) )
        {
          User::GetCopper(v2);
          sprintf(acStr1, "%I64d");
          v37 = strlen(acStr1) + 1;
          v38 = &acStr1[255];
          do
          {
            v39 = *((_BYTE *)v38 + 1);
            v38 = (char *)v38 + 1;
          }
          while ( v39 );
          memcpy(v38, acStr1, v37);
          v40 = TextData::Get(0x88AF99F5u);
          v41 = v40;
          do
            v42 = *v40++;
          while ( v42 );
          v43 = v40 - v41;
          v44 = v41;
          v45 = &acStr1[255];
          do
          {
            v46 = *((_BYTE *)v45 + 1);
            v45 = (char *)v45 + 1;
          }
          while ( v46 );
          memcpy(v45, v44, v43);
          v47 = &acStr1[255];
          do
            v48 = (v47++)[1];
          while ( v48 );
          *v47 = byte_9B9D44;
        }
      }
      v49 = TextData2::Get(0x2D555492u);
      v50 = fs(v49);
      v51 = MsgBox::Modal(MSGBOX_OKCANCEL, v50);
      if ( v53 )
        v52 = (int)&v53->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      else
        v52 = 0;
      ((void (__stdcall *)(int))v51->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v52);
    }
  }
}
// 9B9D20: using guessed type char byte_9B9D20;
// 9B9D2C: using guessed type char byte_9B9D2C;
// 9B9D38: using guessed type char byte_9B9D38;
// 9B9D44: using guessed type char byte_9B9D44;
// A85C00: using guessed type int __security_cookie;
// A97E7C: using guessed type int ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab___ms_pkTable;

//----- (005DB980) --------------------------------------------------------
void __thiscall GTRequestListWin::DirectMessage(GTRequestListWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GTRequestListWin *v4; // esi@1
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v5; // eax@3
  void *(__thiscall *v6)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *, unsigned int); // edi@4
  char *v7; // eax@4
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v8; // eax@5
  void *(__thiscall *v9)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *, unsigned int); // edi@6
  char *v10; // eax@6

  v4 = this;
  if ( iMsgTag == 74 )
  {
    v8 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr;
    this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)11;
    if ( v8 )
    {
      v9 = v8->__vecDelDtor;
      v10 = TextData2::Get(0xD90AE9EEu);
      (*((void (__thiscall **)(_DWORD, _DWORD))v9 + 118))(
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr,
        v10);
    }
  }
  else
  {
    if ( iMsgTag == 75 )
    {
      v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr;
      this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)12;
      if ( v5 )
      {
        v6 = v5->__vecDelDtor;
        v7 = TextData2::Get(0xE012F32Cu);
        (*((void (__thiscall **)(_DWORD, _DWORD))v6 + 118))(
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr,
          v7);
      }
    }
  }
}

//----- (005DBA10) --------------------------------------------------------
void __thiscall GTRequestListWin::OnClose(GTRequestListWin *this)
{
  GTRequestListWin *v1; // esi@1
  PgWinText *v2; // eax@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  SlideListWin *v5; // edi@3

  v1 = this;
  this->m_bFirstSort = 0;
  *(_DWORD *)&this->m_acSearchName[0] = 0;
  *(_DWORD *)&this->m_acSearchName[4] = 0;
  *(_DWORD *)&this->m_acSearchName[8] = 0;
  *(_DWORD *)&this->m_acSearchName[12] = 0;
  *(_DWORD *)&this->m_acSearchName[16] = 0;
  *(_DWORD *)&this->m_acSearchName[20] = 0;
  *(_DWORD *)&this->m_acSearchName[24] = 0;
  *(_DWORD *)&this->m_acSearchName[28] = 0;
  v2 = this->m_pkSearchType;
  this->m_iSearchTyepe = 11;
  if ( v2 )
  {
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = TextData2::Get(0xD90AE9EEu);
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkSearchType, (unsigned int)v4);
  }
  SlideBar::SetSplitCnt(v1->m_pkSlideBarGuild, 0);
  v1->m_pkGuildLIst->m_nSlideSplitCnt = 0;
  v5 = v1->m_pkGuildLIst;
  v5->m_fCurSlideBtnPos = 0.0;
  v5->m_nViewStartPos = (signed int)((double)v5->m_nSlideSplitCnt * 0.0);
  v1->m_pkGuildLIst->m_nViewStartPos = 0;
  ((void (__stdcall *)(_DWORD))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9B9C07);
}

//----- (005DBAF0) --------------------------------------------------------
void __thiscall GuildTournamentBaseWin::OnCommand(GuildTournamentBaseWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@6

  switch ( wParam )
  {
    case 0u:
      GuildTournamentBaseWin::On_NC_GUILD_TOURNAMENT_JOIN_REQ(this);
      break;
    case 1u:
      GuildTask::SetListReq(1);
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x7Eu, 0, 0);
      break;
    case 2u:
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0x91u, 0, 0);
      break;
    case 3u:
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xE9u, 0, 0);
      break;
    case 4u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "GuildMenu");
      break;
    default:
      return;
  }
}

//----- (005DBBA0) --------------------------------------------------------
GuildTournamentBaseWin *__cdecl GuildTournamentBaseWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildTournamentBaseWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildTournamentBaseWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildTournamentBaseWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildTournamentBaseWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9BA0A0: using guessed type int (__stdcall *GuildTournamentBaseWin___vftable_)(int uiFlags);
// 9BA0BC: using guessed type int (__thiscall *GuildTournamentBaseWin___vftable_)(void *p, char);

//----- (005DBCE0) --------------------------------------------------------
void __thiscall GTRequestListWin::AddGuildInfo(GTRequestListWin *this, GTRequestListWin::GuildInfo *kGuildInfo)
{
  GTRequestListWin::GuildInfo *v2; // esi@1
  GTRequestListWin *v3; // edi@1
  unsigned int v4; // ST34_4@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@1
  int v6; // edx@5
  std::basic_ostream<char,std::char_traits<char> > *v7; // eax@5
  unsigned int v8; // ecx@7
  int v9; // eax@10
  char v10; // dl@11
  GTRequestListWin::GuildInfo *v11; // eax@13
  int v12; // edx@15
  char v13; // cl@16
  char *v14; // esi@18
  GTRequestListWin::GuildInfo *v15; // ebx@19
  BOOL v16; // eax@19
  const char *v17; // edi@19
  int v18; // ebx@22
  void *v19; // eax@22
  const char *v20; // ebx@23
  unsigned int v21; // eax@26
  void *v22; // edi@26
  char v23; // cl@27
  unsigned int v24; // edx@28
  void *v25; // edi@28
  char v26; // cl@29
  unsigned int v27; // eax@30
  void *v28; // edi@30
  char v29; // cl@31
  unsigned int v30; // kr00_4@32
  char *v31; // eax@32
  char v32; // dl@33
  unsigned int v33; // eax@34
  const void *v34; // esi@34
  void *v35; // edi@34
  char v36; // cl@35
  int v37; // edx@36
  const char v38; // bl@43
  int v39; // ebx@45
  void *v40; // eax@45
  const char *v41; // ebx@46
  unsigned int v42; // eax@49
  void *v43; // edi@49
  char v44; // cl@50
  unsigned int v45; // edx@51
  void *v46; // edi@51
  char v47; // cl@52
  unsigned int v48; // eax@53
  void *v49; // edi@53
  char v50; // cl@54
  unsigned int v51; // kr04_4@55
  char *v52; // eax@55
  char v53; // dl@56
  char v54; // cl@58
  GTRequestListWin::GuildInfo *v55; // edi@65
  const char *v56; // eax@69
  unsigned int v57; // eax@70
  void *v58; // edi@70
  char v59; // cl@71
  unsigned int v60; // eax@72
  void *v61; // edi@72
  char v62; // cl@73
  unsigned int v63; // kr08_4@74
  char *v64; // eax@74
  char v65; // dl@75
  unsigned int v66; // eax@76
  const void *v67; // esi@76
  void *v68; // edi@76
  char v69; // cl@77
  void *v70; // edi@78
  const void *v71; // esi@78
  char v72; // cl@78
  int v73; // eax@78
  GTRequestListWin *v74; // edi@79
  unsigned int v75; // eax@80
  void *v76; // edi@80
  char v77; // cl@81
  unsigned int v78; // eax@82
  void *v79; // edi@82
  char v80; // cl@83
  unsigned int v81; // kr0C_4@84
  char *v82; // eax@84
  char v83; // dl@85
  char v84; // cl@87
  int v85; // eax@91
  char *v86; // esi@91
  std::basic_ostream<char,std::char_traits<char> > *v87; // eax@91
  unsigned int v88; // ecx@93
  int v89; // eax@96
  char v90; // dl@97
  char *v91; // eax@99
  int v92; // edx@101
  char v93; // cl@102
  char *v94; // esi@104
  const char *v95; // ebx@106
  int v96; // edi@108
  void *v97; // eax@108
  unsigned int v98; // eax@112
  void *v99; // edi@112
  char v100; // cl@113
  const char *v101; // ebx@114
  unsigned int v102; // edx@114
  void *v103; // edi@114
  char v104; // cl@115
  unsigned int v105; // eax@116
  void *v106; // edi@116
  char v107; // cl@117
  unsigned int v108; // kr10_4@118
  char *v109; // eax@118
  char v110; // dl@119
  unsigned int v111; // eax@120
  const void *v112; // esi@120
  void *v113; // edi@120
  char v114; // cl@121
  unsigned int v115; // edi@122
  GTRequestListWin::GuildInfo *v116; // edi@128
  int v117; // edi@128
  char v118; // bl@129
  const char *v119; // edi@129
  int v120; // ebx@131
  const char *v121; // eax@131
  const char *v122; // ebx@132
  unsigned int v123; // eax@135
  void *v124; // edi@135
  char v125; // cl@136
  unsigned int v126; // edx@137
  void *v127; // edi@137
  char v128; // cl@138
  unsigned int v129; // eax@139
  void *v130; // edi@139
  char v131; // cl@140
  unsigned int v132; // kr14_4@141
  char *v133; // eax@141
  char v134; // dl@142
  char v135; // cl@144
  GTRequestListWin::GuildInfo *v136; // edi@151
  GTRequestListWin *v137; // esi@158
  int v138; // edx@159
  unsigned int v139; // eax@159
  unsigned int v140; // eax@161
  void *v141; // edi@161
  char v142; // cl@162
  unsigned int v143; // eax@163
  void *v144; // edi@163
  char v145; // cl@164
  void *v146; // edi@165
  const void *v147; // esi@165
  char v148; // cl@165
  void *v149; // eax@165
  int v150; // edx@165
  char v151; // cl@166
  char *v152; // eax@167
  char *v153; // ecx@167
  char v154; // dl@168
  unsigned int v155; // eax@169
  const void *v156; // esi@169
  void *v157; // edi@169
  char v158; // cl@170
  unsigned int v159; // eax@172
  void *v160; // edi@172
  char v161; // cl@173
  unsigned int v162; // eax@174
  void *v163; // edi@174
  char v164; // cl@175
  unsigned int v165; // kr18_4@176
  char *v166; // eax@176
  char v167; // dl@177
  char v168; // cl@179
  char *v169; // eax@183
  unsigned int v170; // ST28_4@184
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v171; // eax@184
  int v172; // ecx@188
  unsigned int v173; // ST24_4@188
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v174; // eax@188
  int v175; // edx@192
  unsigned int v176; // [sp-24h] [bp-51Ch]@36
  char *v177; // [sp-24h] [bp-51Ch]@125
  char *v178; // [sp-24h] [bp-51Ch]@148
  unsigned int v179; // [sp-20h] [bp-518h]@36
  char *v180; // [sp-20h] [bp-518h]@39
  char *v181; // [sp-20h] [bp-518h]@62
  unsigned int v182; // [sp-20h] [bp-518h]@125
  unsigned int v183; // [sp-20h] [bp-518h]@148
  unsigned int v184; // [sp-20h] [bp-518h]@160
  const char *v185; // [sp-1Ch] [bp-514h]@36
  unsigned int v186; // [sp-1Ch] [bp-514h]@39
  unsigned int v187; // [sp-1Ch] [bp-514h]@62
  char TextCmd2[256]; // [sp+0h] [bp-4F8h]@7
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > osstream; // [sp+100h] [bp-3F8h]@1
  int v190; // [sp+198h] [bp-360h]@103
  GTRequestListWin::GuildInfo *GuildNamelen; // [sp+19Ch] [bp-35Ch]@17
  BYTE TestChar[4]; // [sp+1A0h] [bp-358h]@43
  int Searchlen; // [sp+1A4h] [bp-354h]@12
  int c2; // [sp+1A8h] [bp-350h]@20
  void *pChar; // [sp+1ACh] [bp-34Ch]@22
  GTRequestListWin::GuildInfo *v196; // [sp+1B0h] [bp-348h]@1
  char *v197; // [sp+1B4h] [bp-344h]@5
  int iLastIndex; // [sp+1B8h] [bp-340h]@3
  int c1; // [sp+1BCh] [bp-33Ch]@19
  GTRequestListWin *v200; // [sp+1C0h] [bp-338h]@1
  GTRequestListWin::GuildInfo *i; // [sp+1C4h] [bp-334h]@17
  GTRequestListWin::GuildInfo *pkCharClone; // [sp+1C8h] [bp-330h]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+1CCh] [bp-32Ch]@1
  char TextCmd3[256]; // [sp+1E8h] [bp-310h]@7
  char TextCmd4[256]; // [sp+2E8h] [bp-210h]@7
  char TextCmd1[256]; // [sp+3E8h] [bp-110h]@7
  unsigned int v207; // [sp+4E8h] [bp-10h]@1
  int v208; // [sp+4F4h] [bp-4h]@1
  int v209; // [sp+4F8h] [bp+0h]@1

  v207 = (unsigned int)&v209 ^ __security_cookie;
  v2 = kGuildInfo;
  v3 = this;
  v200 = this;
  v196 = kGuildInfo;
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v4 = v3->m_uiNo;
  v208 = 0;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v4);
  v5 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v208) = 1;
  if ( v5->baseclass_0._Myres >= 0x10 )
    v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
  iLastIndex = SlideListWin::AddText(v3->m_pkGuildLIst, v5->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v6 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v6] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 2;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v208 = 3;
  v7 = std::operator<<<std::char_traits<char>>(&osstream.___u0.baseclass_0, " ");
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(v7, &kGuildInfo->m_strGuildName);
  if ( !strcmp(v3->m_acSearchName, (const char *)&unk_9B9BE7) || v3->m_iSearchTyepe != 11 )
    goto LABEL_68;
  *(_DWORD *)&TextCmd1[4] = dword_9B9D64;
  *(_DWORD *)TextCmd1 = dword_9B9D60;
  *(_DWORD *)&TextCmd1[8] = dword_9B9D68;
  *(_DWORD *)&TextCmd1[12] = dword_9B9D6C;
  memset(&TextCmd1[16], 0, 0xF0u);
  strcpy(TextCmd2, "}");
  TextCmd2[2] = byte_9B9D72;
  memset(&TextCmd2[3], 0, 0xFDu);
  memset(TextCmd3, 0, 0x100u);
  memset(TextCmd4, 0, 0x100u);
  v8 = kGuildInfo->m_strGuildName.baseclass_0._Myres;
  pkCharClone = v8 < 0x10 ? kGuildInfo : *(_DWORD *)&kGuildInfo->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
  v9 = (int)v3->m_acSearchName;
  do
    v10 = *(_BYTE *)v9++;
  while ( v10 );
  Searchlen = v9 - (_DWORD)((char *)v3 + 409);
  v11 = v8 < 0x10 ? kGuildInfo : *(_DWORD *)&kGuildInfo->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = (int)&v11->m_strGuildName.baseclass_0.___u0._Bx._Buf[1];
  do
  {
    v13 = v11->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    v11 = (GTRequestListWin::GuildInfo *)((char *)v11 + 1);
  }
  while ( v13 );
  GuildNamelen = (GTRequestListWin::GuildInfo *)((char *)v11 - v12);
  i = 0;
  if ( (signed int)((char *)v11 - v12) <= 0 )
  {
LABEL_68:
    if ( v2->m_strGuildName.baseclass_0._Myres < 0x10 )
      v56 = (const char *)v2;
    else
      v56 = *(const char **)&v2->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    SlideListWin::SetText(v3->m_pkGuildLIst, iLastIndex, 1u, v56);
    v74 = v200;
    goto LABEL_91;
  }
  v14 = TextCmd4;
  while ( 1 )
  {
    v15 = pkCharClone;
    LOBYTE(c1) = pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    v16 = IsDBCSLeadByte(c1);
    v17 = v200->m_acSearchName;
    if ( !v16 )
      break;
    LOBYTE(c2) = *v17;
    if ( !IsDBCSLeadByte(c2) )
    {
      strncpy(v14, v15->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GTRequestListWin::GuildInfo *)((char *)i + 2);
      v14 += 2;
      pkCharClone = (GTRequestListWin::GuildInfo *)((char *)v15 + 2);
      goto LABEL_66;
    }
    if ( (_BYTE)c1 != (_BYTE)c2 )
    {
      v186 = 2;
      v180 = (char *)v15;
      goto LABEL_41;
    }
    v18 = Searchlen;
    strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, Searchlen);
    v19 = (void *)_mbsstr(TextCmd3, v17);
    pChar = v19;
    if ( !v19 )
    {
      v186 = v18;
      v180 = (char *)pkCharClone;
LABEL_41:
      strncpy(v14, v180, v186);
      i = (GTRequestListWin::GuildInfo *)((char *)i + 2);
      v14 += 2;
      pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 2);
      goto LABEL_66;
    }
    v20 = (const char *)v19;
    if ( strcmp((const char *)v19, v17) )
    {
      strncpy(v14, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GTRequestListWin::GuildInfo *)((char *)i + 2);
      v14 += 2;
    }
    else
    {
      if ( !i )
      {
        v57 = strlen(TextCmd3) + 1;
        v58 = &TextCmd4[255];
        do
        {
          v59 = *((_BYTE *)v58 + 1);
          v58 = (char *)v58 + 1;
        }
        while ( v59 );
        memcpy(v58, TextCmd3, v57);
        v60 = strlen(TextCmd2) + 1;
        v61 = &TextCmd4[255];
        do
        {
          v62 = *((_BYTE *)v61 + 1);
          v61 = (char *)v61 + 1;
        }
        while ( v62 );
        memcpy(v61, TextCmd2, v60);
        v63 = strlen(v20);
        v64 = (char *)pkCharClone + v63;
        do
          v65 = *v64++;
        while ( v65 );
        v66 = v64 - ((char *)pkCharClone + v63);
        v67 = (char *)pkCharClone + v63;
        v68 = &TextCmd4[255];
        do
        {
          v69 = *((_BYTE *)v68 + 1);
          v68 = (char *)v68 + 1;
        }
        while ( v69 );
        goto LABEL_78;
      }
      if ( (signed int)i > 0 )
      {
        v21 = strlen(TextCmd1) + 1;
        v22 = &TextCmd3[255];
        do
        {
          v23 = *((_BYTE *)v22 + 1);
          v22 = (char *)v22 + 1;
        }
        while ( v23 );
        memcpy(v22, TextCmd1, v21);
        v24 = strlen(v20) + 1;
        v25 = &TextCmd3[255];
        do
        {
          v26 = *((_BYTE *)v25 + 1);
          v25 = (char *)v25 + 1;
        }
        while ( v26 );
        memcpy(v25, v20, v24);
        v27 = strlen(TextCmd2) + 1;
        v28 = &TextCmd3[255];
        do
        {
          v29 = *((_BYTE *)v28 + 1);
          v28 = (char *)v28 + 1;
        }
        while ( v29 );
        memcpy(v28, TextCmd2, v27);
        v30 = strlen(v20);
        v31 = (char *)pkCharClone + v30;
        do
          v32 = *v31++;
        while ( v32 );
        v33 = v31 - ((char *)pkCharClone + v30);
        v34 = (char *)pkCharClone + v30;
        v35 = &TextCmd3[255];
        do
        {
          v36 = *((_BYTE *)v35 + 1);
          v35 = (char *)v35 + 1;
        }
        while ( v36 );
LABEL_36:
        v37 = iLastIndex;
        memcpy(v35, v34, v33);
        v185 = TextCmd4;
        v179 = 1;
        v176 = v37;
        goto LABEL_79;
      }
    }
    memset(TextCmd3, 0, 0x100u);
    pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 2);
LABEL_66:
    if ( (signed int)i >= (signed int)GuildNamelen )
    {
      v2 = v196;
      v3 = v200;
      goto LABEL_68;
    }
  }
  v38 = *v17;
  TestChar[0] = *v17;
  if ( IsDBCSLeadByte(TestChar[0]) )
  {
    v55 = pkCharClone;
    strncpy(v14, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
    i = (GTRequestListWin::GuildInfo *)((char *)i + 1);
    ++v14;
    pkCharClone = (GTRequestListWin::GuildInfo *)((char *)v55 + 1);
    goto LABEL_66;
  }
  if ( (_BYTE)c1 != v38 )
  {
    v187 = 1;
    v181 = (char *)pkCharClone;
    goto LABEL_64;
  }
  v39 = Searchlen;
  strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, Searchlen);
  v40 = (void *)_mbsstr(TextCmd3, v17);
  pChar = v40;
  if ( !v40 )
  {
    v187 = v39;
    v181 = (char *)pkCharClone;
LABEL_64:
    strncpy(v14, v181, v187);
    i = (GTRequestListWin::GuildInfo *)((char *)i + 1);
    ++v14;
    pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 1);
    goto LABEL_66;
  }
  v41 = (const char *)v40;
  if ( strcmp((const char *)v40, v17) )
  {
    strncpy(v14, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
    i = (GTRequestListWin::GuildInfo *)((char *)i + 1);
    ++v14;
LABEL_61:
    memset(TextCmd3, 0, 0x100u);
    pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 1);
    goto LABEL_66;
  }
  if ( i )
  {
    if ( (signed int)i > 0 )
    {
      v42 = strlen(TextCmd1) + 1;
      v43 = &TextCmd3[255];
      do
      {
        v44 = *((_BYTE *)v43 + 1);
        v43 = (char *)v43 + 1;
      }
      while ( v44 );
      memcpy(v43, TextCmd1, v42);
      v45 = strlen(v41) + 1;
      v46 = &TextCmd3[255];
      do
      {
        v47 = *((_BYTE *)v46 + 1);
        v46 = (char *)v46 + 1;
      }
      while ( v47 );
      memcpy(v46, v41, v45);
      v48 = strlen(TextCmd2) + 1;
      v49 = &TextCmd3[255];
      do
      {
        v50 = *((_BYTE *)v49 + 1);
        v49 = (char *)v49 + 1;
      }
      while ( v50 );
      memcpy(v49, TextCmd2, v48);
      v51 = strlen(v41);
      v52 = (char *)pkCharClone + v51;
      do
        v53 = *v52++;
      while ( v53 );
      v33 = v52 - ((char *)pkCharClone + v51);
      v34 = (char *)pkCharClone + v51;
      v35 = &TextCmd3[255];
      do
      {
        v54 = *((_BYTE *)v35 + 1);
        v35 = (char *)v35 + 1;
      }
      while ( v54 );
      goto LABEL_36;
    }
    goto LABEL_61;
  }
  v75 = strlen(TextCmd3) + 1;
  v76 = &TextCmd4[255];
  do
  {
    v77 = *((_BYTE *)v76 + 1);
    v76 = (char *)v76 + 1;
  }
  while ( v77 );
  memcpy(v76, TextCmd3, v75);
  v78 = strlen(TextCmd2) + 1;
  v79 = &TextCmd4[255];
  do
  {
    v80 = *((_BYTE *)v79 + 1);
    v79 = (char *)v79 + 1;
  }
  while ( v80 );
  memcpy(v79, TextCmd2, v78);
  v81 = strlen(v41);
  v82 = (char *)pkCharClone + v81;
  do
    v83 = *v82++;
  while ( v83 );
  v66 = v82 - ((char *)pkCharClone + v81);
  v67 = (char *)pkCharClone + v81;
  v68 = &TextCmd4[255];
  do
  {
    v84 = *((_BYTE *)v68 + 1);
    v68 = (char *)v68 + 1;
  }
  while ( v84 );
LABEL_78:
  memcpy(v68, v67, 4 * (v66 >> 2));
  v71 = (char *)v67 + 4 * (v66 >> 2);
  v70 = (char *)v68 + 4 * (v66 >> 2);
  v72 = v66;
  v73 = iLastIndex;
  v185 = TextCmd1;
  v179 = 1;
  memcpy(v70, v71, v72 & 3);
  v176 = v73;
LABEL_79:
  v74 = v200;
  SlideListWin::SetText(v200->m_pkGuildLIst, v176, v179, v185);
  v2 = v196;
LABEL_91:
  v85 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v85] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 4;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v86 = (char *)&v2->m_MasterName;
  v208 = 5;
  v197 = v86;
  v87 = std::operator<<<std::char_traits<char>>(&osstream.___u0.baseclass_0, " ");
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(
    v87,
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v86);
  if ( !strcmp(v74->m_acSearchName, (const char *)&unk_9B9BEE) || v74->m_iSearchTyepe != 12 )
    goto LABEL_155;
  *(_DWORD *)&TextCmd1[4] = dword_9B9D7C;
  *(_DWORD *)TextCmd1 = dword_9B9D78;
  *(_DWORD *)&TextCmd1[8] = dword_9B9D80;
  *(_DWORD *)&TextCmd1[12] = dword_9B9D84;
  memset(&TextCmd1[16], 0, 0xF0u);
  strcpy(TextCmd2, "}");
  TextCmd2[2] = byte_9B9D8A;
  memset(&TextCmd2[3], 0, 0xFDu);
  memset(TextCmd3, 0, 0x100u);
  memset(TextCmd4, 0, 0x100u);
  v88 = *((_DWORD *)v86 + 5);
  pkCharClone = (GTRequestListWin::GuildInfo *)(v88 < 0x10 ? v86 : *(_DWORD *)v86);
  v89 = (int)v74->m_acSearchName;
  do
    v90 = *(_BYTE *)v89++;
  while ( v90 );
  c2 = v89 - (_DWORD)((char *)v74 + 409);
  v91 = v88 < 0x10 ? v86 : *(_DWORD *)v86;
  v92 = (int)(v91 + 1);
  do
    v93 = *v91++;
  while ( v93 );
  v190 = (int)&v91[-v92];
  i = 0;
  if ( (signed int)&v91[-v92] <= 0 )
    goto LABEL_155;
  v94 = TextCmd4;
  while ( 2 )
  {
    LOBYTE(c1) = pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( !IsDBCSLeadByte(c1) )
    {
      v118 = v200->m_acSearchName[0];
      v119 = v200->m_acSearchName;
      LOBYTE(GuildNamelen) = v200->m_acSearchName[0];
      if ( !IsDBCSLeadByte((BYTE)GuildNamelen) )
      {
        if ( (_BYTE)c1 == v118 )
        {
          v120 = c2;
          strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, c2);
          v121 = _mbsstr(TextCmd3, v119);
          *(_DWORD *)TestChar = v121;
          if ( v121 )
          {
            v122 = v121;
            if ( strcmp(v121, v119) )
            {
              strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
              i = (GTRequestListWin::GuildInfo *)((char *)i + 1);
              ++v94;
            }
            else
            {
              if ( !i )
              {
                v159 = strlen(TextCmd3) + 1;
                v160 = &TextCmd4[255];
                do
                {
                  v161 = *((_BYTE *)v160 + 1);
                  v160 = (char *)v160 + 1;
                }
                while ( v161 );
                memcpy(v160, TextCmd3, v159);
                v162 = strlen(TextCmd2) + 1;
                v163 = &TextCmd4[255];
                do
                {
                  v164 = *((_BYTE *)v163 + 1);
                  v163 = (char *)v163 + 1;
                }
                while ( v164 );
                memcpy(v163, TextCmd2, v162);
                v165 = strlen(v122);
                v166 = (char *)pkCharClone + v165;
                do
                  v167 = *v166++;
                while ( v167 );
                v155 = v166 - ((char *)pkCharClone + v165);
                v156 = (char *)pkCharClone + v165;
                v157 = &TextCmd4[255];
                do
                {
                  v168 = *((_BYTE *)v157 + 1);
                  v157 = (char *)v157 + 1;
                }
                while ( v168 );
                goto LABEL_171;
              }
              if ( (signed int)i > 0 )
              {
                v123 = strlen(TextCmd1) + 1;
                v124 = &TextCmd3[255];
                do
                {
                  v125 = *((_BYTE *)v124 + 1);
                  v124 = (char *)v124 + 1;
                }
                while ( v125 );
                memcpy(v124, TextCmd1, v123);
                v126 = strlen(v122) + 1;
                v127 = &TextCmd3[255];
                do
                {
                  v128 = *((_BYTE *)v127 + 1);
                  v127 = (char *)v127 + 1;
                }
                while ( v128 );
                memcpy(v127, v122, v126);
                v129 = strlen(TextCmd2) + 1;
                v130 = &TextCmd3[255];
                do
                {
                  v131 = *((_BYTE *)v130 + 1);
                  v130 = (char *)v130 + 1;
                }
                while ( v131 );
                memcpy(v130, TextCmd2, v129);
                v132 = strlen(v122);
                v133 = (char *)pkCharClone + v132;
                do
                  v134 = *v133++;
                while ( v134 );
                v111 = v133 - ((char *)pkCharClone + v132);
                v112 = (char *)pkCharClone + v132;
                v113 = &TextCmd3[255];
                do
                {
                  v135 = *((_BYTE *)v113 + 1);
                  v113 = (char *)v113 + 1;
                }
                while ( v135 );
                goto LABEL_122;
              }
            }
            memset(TextCmd3, 0, 0x100u);
            pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 1);
            goto LABEL_153;
          }
          v183 = v120;
          v178 = (char *)pkCharClone;
        }
        else
        {
          v183 = 1;
          v178 = (char *)pkCharClone;
        }
        strncpy(v94, v178, v183);
        i = (GTRequestListWin::GuildInfo *)((char *)i + 1);
        ++v94;
        pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 1);
        goto LABEL_153;
      }
      v136 = pkCharClone;
      strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 1u);
      i = (GTRequestListWin::GuildInfo *)((char *)i + 1);
      ++v94;
      v117 = (int)&v136->m_strGuildName.baseclass_0.___u0._Bx._Buf[1];
LABEL_152:
      pkCharClone = (GTRequestListWin::GuildInfo *)v117;
      goto LABEL_153;
    }
    v95 = v200->m_acSearchName;
    LOBYTE(Searchlen) = v200->m_acSearchName[0];
    if ( !IsDBCSLeadByte(Searchlen) )
    {
      v116 = pkCharClone;
      strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GTRequestListWin::GuildInfo *)((char *)i + 2);
      v94 += 2;
      v117 = (int)&v116->m_strGuildName.baseclass_0.___u0._Bx._Buf[2];
      goto LABEL_152;
    }
    if ( (_BYTE)c1 != (_BYTE)Searchlen )
    {
      v182 = 2;
      v177 = (char *)pkCharClone;
      goto LABEL_127;
    }
    v96 = c2;
    strncpy(TextCmd3, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, c2);
    v97 = (void *)_mbsstr(TextCmd3, v95);
    pChar = v97;
    if ( !v97 )
    {
      v182 = v96;
      v177 = (char *)pkCharClone;
LABEL_127:
      strncpy(v94, v177, v182);
      i = (GTRequestListWin::GuildInfo *)((char *)i + 2);
      v94 += 2;
      pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 2);
      goto LABEL_153;
    }
    if ( strcmp((const char *)v97, v95) )
    {
      strncpy(v94, pkCharClone->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy, 2u);
      i = (GTRequestListWin::GuildInfo *)((char *)i + 2);
      v94 += 2;
      goto LABEL_124;
    }
    if ( !i )
    {
      v140 = strlen(TextCmd3) + 1;
      v141 = &TextCmd4[255];
      do
      {
        v142 = *((_BYTE *)v141 + 1);
        v141 = (char *)v141 + 1;
      }
      while ( v142 );
      memcpy(v141, TextCmd3, v140);
      v143 = strlen(TextCmd2) + 1;
      v144 = &TextCmd4[255];
      do
      {
        v145 = *((_BYTE *)v144 + 1);
        v144 = (char *)v144 + 1;
      }
      while ( v145 );
      memcpy(v144, TextCmd2, 4 * (v143 >> 2));
      v147 = &TextCmd2[4 * (v143 >> 2)];
      v146 = (char *)v144 + 4 * (v143 >> 2);
      v148 = v143;
      v149 = pChar;
      memcpy(v146, v147, v148 & 3);
      v150 = (int)((char *)v149 + 1);
      do
      {
        v151 = *(_BYTE *)v149;
        v149 = (char *)v149 + 1;
      }
      while ( v151 );
      v152 = (char *)v149 + (_DWORD)pkCharClone - v150;
      v153 = v152;
      do
        v154 = *v152++;
      while ( v154 );
      v155 = v152 - v153;
      v156 = v153;
      v157 = &TextCmd4[255];
      do
      {
        v158 = *((_BYTE *)v157 + 1);
        v157 = (char *)v157 + 1;
      }
      while ( v158 );
LABEL_171:
      memcpy(v157, v156, v155);
      v115 = iLastIndex;
      v137 = v200;
      SlideListWin::SetText(v200->m_pkGuildLIst, iLastIndex, 2u, TextCmd1);
      goto LABEL_159;
    }
    if ( (signed int)i > 0 )
    {
      v98 = strlen(TextCmd1) + 1;
      v99 = &TextCmd3[255];
      do
      {
        v100 = *((_BYTE *)v99 + 1);
        v99 = (char *)v99 + 1;
      }
      while ( v100 );
      v101 = (const char *)pChar;
      memcpy(v99, TextCmd1, v98);
      v102 = strlen(v101) + 1;
      v103 = &TextCmd3[255];
      do
      {
        v104 = *((_BYTE *)v103 + 1);
        v103 = (char *)v103 + 1;
      }
      while ( v104 );
      memcpy(v103, v101, v102);
      v105 = strlen(TextCmd2) + 1;
      v106 = &TextCmd3[255];
      do
      {
        v107 = *((_BYTE *)v106 + 1);
        v106 = (char *)v106 + 1;
      }
      while ( v107 );
      memcpy(v106, TextCmd2, v105);
      v108 = strlen(v101);
      v109 = (char *)pkCharClone + v108;
      do
        v110 = *v109++;
      while ( v110 );
      v111 = v109 - ((char *)pkCharClone + v108);
      v112 = (char *)pkCharClone + v108;
      v113 = &TextCmd3[255];
      do
      {
        v114 = *((_BYTE *)v113 + 1);
        v113 = (char *)v113 + 1;
      }
      while ( v114 );
LABEL_122:
      memcpy(v113, v112, v111);
      v115 = iLastIndex;
      SlideListWin::SetText(v200->m_pkGuildLIst, iLastIndex, 2u, TextCmd4);
      goto LABEL_158;
    }
LABEL_124:
    memset(TextCmd3, 0, 0x100u);
    pkCharClone = (GTRequestListWin::GuildInfo *)((char *)pkCharClone + 2);
LABEL_153:
    if ( (signed int)i < v190 )
      continue;
    break;
  }
  v86 = v197;
  v74 = v200;
LABEL_155:
  if ( *((_DWORD *)v86 + 5) >= 0x10u )
    v86 = *(char **)v86;
  SlideListWin::SetText(v74->m_pkGuildLIst, iLastIndex, 2u, v86);
  v115 = iLastIndex;
LABEL_158:
  v137 = v200;
LABEL_159:
  v138 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v138] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 6;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  v139 = v196->m_unGuildType;
  if ( !v139 )
  {
    v184 = 1044198562;
    goto LABEL_183;
  }
  if ( v139 == 1 )
  {
    v184 = 1044934038;
LABEL_183:
    v169 = TextData::Get(v184);
    SlideListWin::SetText(v137->m_pkGuildLIst, v115, 3u, v169);
  }
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v170 = v196->m_unGuildGrade;
  v208 = 7;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v170);
  v171 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v208) = 8;
  if ( v171->baseclass_0._Myres >= 0x10 )
    v171 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v171->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v137->m_pkGuildLIst, v115, 4u, v171->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v172 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v197 = osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v172] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 9;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    (std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *)&TextCmd1[104],
    2);
  v173 = v196->m_unGuildTotalMember;
  v208 = 10;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(
    (std::basic_ostream<char,std::char_traits<char> > *)&TextCmd1[104],
    v173);
  v174 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(
           (std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > *)&TextCmd1[104],
           &result);
  LOBYTE(v208) = 11;
  if ( v174->baseclass_0._Myres >= 0x10 )
    v174 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v174->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v137->m_pkGuildLIst, v115, 5u, v174->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v175 = *(_DWORD *)(*(_DWORD *)&TextCmd1[104] + 4);
  result.baseclass_0._Myres = 15;
  result.baseclass_0._Mysize = 0;
  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v197 = &TextCmd1[184];
  *(_DWORD *)&TextCmd1[v175 + 104] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v208 = 12;
  *(_DWORD *)&TextCmd1[108] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&TextCmd1[108]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&TextCmd1[108]);
  *(_DWORD *)&TextCmd1[*(_DWORD *)(*(_DWORD *)&TextCmd1[104] + 4) + 104] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v208 = -1;
  *(_DWORD *)&TextCmd1[184] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)&TextCmd1[184]);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// 9B9D60: using guessed type int dword_9B9D60;
// 9B9D64: using guessed type int dword_9B9D64;
// 9B9D68: using guessed type int dword_9B9D68;
// 9B9D6C: using guessed type int dword_9B9D6C;
// 9B9D72: using guessed type char byte_9B9D72;
// 9B9D78: using guessed type int dword_9B9D78;
// 9B9D7C: using guessed type int dword_9B9D7C;
// 9B9D80: using guessed type int dword_9B9D80;
// 9B9D84: using guessed type int dword_9B9D84;
// 9B9D8A: using guessed type char byte_9B9D8A;
// A85C00: using guessed type int __security_cookie;

//----- (005DD070) --------------------------------------------------------
#error "5DD3DB: positive sp value has been found (funcsize=230)"

//----- (005DD3E0) --------------------------------------------------------
void __thiscall GTRequestListWin::GTRequestListWin(GTRequestListWin *this)
{
  GTRequestListWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTRequestListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTRequestListWin::_vftable_;
  *(_DWORD *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuildInfo.baseclass_0._Mylast = 0;
  v1->m_vecGuildInfo.baseclass_0._Myend = 0;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v1->m_spEdit.m_pObject = 0;
  *(_WORD *)&v1->m_bFirstSort = 0;
  v1->m_spPopupMenu = 0;
  v1->m_uiNo = 0;
  v1->m_iSearchTyepe = 11;
  *(_DWORD *)&v1->m_acSearchName[0] = 0;
  *(_DWORD *)&v1->m_acSearchName[4] = 0;
  *(_DWORD *)&v1->m_acSearchName[8] = 0;
  *(_DWORD *)&v1->m_acSearchName[12] = 0;
  *(_DWORD *)&v1->m_acSearchName[16] = 0;
  *(_DWORD *)&v1->m_acSearchName[20] = 0;
  *(_DWORD *)&v1->m_acSearchName[24] = 0;
  *(_DWORD *)&v1->m_acSearchName[28] = 0;
}
// 9BA2E0: using guessed type int (__stdcall *GTRequestListWin___vftable_)(int uiFlags);
// 9BA2FC: using guessed type int (__thiscall *GTRequestListWin___vftable_)(void *p, char);

//----- (005DD480) --------------------------------------------------------
void __thiscall GTRequestListWin::_GTRequestListWin(GTRequestListWin *this)
{
  GTRequestListWin *v1; // esi@1
  EditWin *v2; // edi@1
  GuildListWin::GuildInfo *v3; // eax@7
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+0h] [bp-10h]@1
  int v5; // [sp+Ch] [bp-4h]@1

  v1 = this;
  __formal.dummy[0] = (char)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTRequestListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTRequestListWin::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  v5 = 2;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  LOBYTE(v5) = 1;
  if ( v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager )
    v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = (void *)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager(
                                                                                  (boost::detail::function::any_pointer)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                                                                                  destroy_functor_tag);
  v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager = 0;
  v1->m_SortPradicationFunc.baseclass_0.invoker = 0;
  v3 = *(GuildListWin::GuildInfo **)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 )
  {
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v3,
      (GuildListWin::GuildInfo *)v1->m_vecGuildInfo.baseclass_0._Mylast,
      (std::allocator<GuildListWin::GuildInfo> *)&v1->m_vecGuildInfo.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuildInfo.baseclass_0._Mylast = 0;
  v1->m_vecGuildInfo.baseclass_0._Myend = 0;
  v5 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9BA2E0: using guessed type int (__stdcall *GTRequestListWin___vftable_)(int uiFlags);
// 9BA2FC: using guessed type int (__thiscall *GTRequestListWin___vftable_)(void *p, char);

//----- (005DD580) --------------------------------------------------------
void __thiscall GTRequestListWin::Clear(GTRequestListWin *this)
{
  GTRequestListWin *v1; // esi@1
  GTRequestListWin::GuildInfo *v2; // eax@1
  GuildListWin::GuildInfo *v3; // ecx@1
  GuildListWin::GuildInfo *v4; // edi@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  *(_DWORD *)&this->m_acSearchName[0] = 0;
  *(_DWORD *)&this->m_acSearchName[4] = 0;
  *(_DWORD *)&this->m_acSearchName[8] = 0;
  *(_DWORD *)&this->m_acSearchName[12] = 0;
  *(_DWORD *)&this->m_acSearchName[16] = 0;
  *(_DWORD *)&this->m_acSearchName[20] = 0;
  *(_DWORD *)&this->m_acSearchName[24] = 0;
  *(_DWORD *)&this->m_acSearchName[28] = 0;
  v2 = this->m_vecGuildInfo.baseclass_0._Mylast;
  v3 = *(GuildListWin::GuildInfo **)&this->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (GTRequestListWin::GuildInfo *)v3 != v2 )
  {
    v4 = std::_Move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo__>(
           (GuildListWin::GuildInfo *)v2,
           (GuildListWin::GuildInfo *)v2,
           v3,
           __formal);
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v4,
      (GuildListWin::GuildInfo *)v1->m_vecGuildInfo.baseclass_0._Mylast,
      (std::allocator<GuildListWin::GuildInfo> *)&v1->m_vecGuildInfo.baseclass_0._Alval,
      __formal);
    v1->m_vecGuildInfo.baseclass_0._Mylast = (GTRequestListWin::GuildInfo *)v4;
  }
  SlideListWin::RemoveAllList(v1->m_pkGuildLIst);
  SlideListWin::UpdateViewList(v1->m_pkGuildLIst);
}

//----- (005DD620) --------------------------------------------------------
GTRequestListWin *__cdecl GTRequestListWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GTRequestListWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1B8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GTRequestListWin::GTRequestListWin((GTRequestListWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GTRequestListWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005DD750) --------------------------------------------------------
bool __thiscall GuildTournamentBaseWin::Create(GuildTournamentBaseWin *this, PgFrameWork *pkFrameWork)
{
  GuildTournamentBaseWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // ebx@10
  int v9; // edi@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // ebx@13
  NiSourceTexture *v15; // ebx@13
  PgSprData *v16; // ebx@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // ebx@21
  char *v20; // eax@21
  PgSprData *v21; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v22; // edx@21
  unsigned int v23; // ebx@21
  PgFont *v24; // eax@21
  PgWinText *v25; // ebx@21
  char *v26; // eax@21
  PgSprData *v27; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v28; // edx@21
  unsigned int v29; // ebx@21
  PgFont *v30; // eax@21
  PgWinText *v31; // ebx@21
  char *v32; // eax@21
  PgSprData *v33; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v34; // edx@21
  unsigned int v35; // ebx@21
  PgFont *v36; // eax@21
  PgWinText *v37; // ebx@21
  char *v38; // eax@21
  PgSprData *v39; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v40; // edx@21
  unsigned int v41; // ebx@21
  PgFont *v42; // eax@21
  PgWinText *v43; // edi@21
  NiRefObjectVtbl *v44; // ebx@21
  char *v45; // eax@21
  GTRequestListWin *v46; // eax@21
  void *(__thiscall *v47)(NiRefObject *, unsigned int); // edx@21
  NiNode *v48; // esi@22
  const char *v49; // [sp+3Ch] [bp-44h]@11
  int *v50; // [sp+40h] [bp-40h]@11
  int *v51; // [sp+44h] [bp-3Ch]@11
  NiSourceTexture *v52; // [sp+48h] [bp-38h]@11
  unsigned int uiWidth; // [sp+5Ch] [bp-24h]@15
  unsigned int uiHeight; // [sp+60h] [bp-20h]@15
  unsigned int iYOff; // [sp+64h] [bp-1Ch]@10
  int uiLeft; // [sp+68h] [bp-18h]@4
  unsigned int uiTop; // [sp+6Ch] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+70h] [bp-10h]@1
  int v59; // [sp+7Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v59 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, (int *)&uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildTournamentBaseWin", 0) )
  {
    v6 = spNode.m_pObject;
    v59 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v52 = v10;
    v51 = (int *)&uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  else
  {
    v52 = 0;
    v51 = (int *)&uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v49, v50, v51, v52);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, (int *)&uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, (int *)&uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, (int *)&uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0.baseclass_0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, (int *)&uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, (int *)&uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(0);
    v19 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    iYOff = (unsigned int)v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData::Get(0x2D8F829Fu);
    (*(void (__thiscall **)(PgWinText *, char *))(iYOff + 472))(v19, v20);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, (int *)&uiTop, 0);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v22 = v21->m_akHitTester.m_pBase;
    v23 = v22->m_pObject->m_uiHeight;
    iYOff = v22->m_pObject->m_uiWidth;
    v24 = Font::Get(0);
    v25 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOff, v23, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    iYOff = (unsigned int)v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData::Get(0xDAD8D1E9u);
    (*(void (__thiscall **)(PgWinText *, char *))(iYOff + 472))(v25, v26);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, (int *)&uiTop, 0);
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "Btn02Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0, 0);
    v28 = v27->m_akHitTester.m_pBase;
    v29 = v28->m_pObject->m_uiHeight;
    iYOff = v28->m_pObject->m_uiWidth;
    v30 = Font::Get(0);
    v31 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOff, v29, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v31,
      5u);
    iYOff = (unsigned int)v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v32 = TextData2::Get(0x76A107E5u);
    (*(void (__thiscall **)(_DWORD, _DWORD))(iYOff + 472))(v31, v32);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, (int *)&uiTop, 0);
    PgSprData::Add(v33, &spNode.m_pObject->baseclass_0, "Btn03Click");
    PgSprData::Add(v33, &spNode.m_pObject->baseclass_0, "Btn03Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v34 = v33->m_akHitTester.m_pBase;
    v35 = v34->m_pObject->m_uiHeight;
    iYOff = v34->m_pObject->m_uiWidth;
    v36 = Font::Get(0);
    v37 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOff, v35, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v37,
      5u);
    iYOff = (unsigned int)v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v38 = TextData::Get(0x16231A36u);
    (*(void (__thiscall **)(_DWORD, _DWORD))(iYOff + 472))(v37, v38);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v37,
      0);
    v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, (int *)&uiTop, 0);
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Btn04Click");
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Btn04Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v40 = v39->m_akHitTester.m_pBase;
    v41 = v40->m_pObject->m_uiHeight;
    iYOff = v40->m_pObject->m_uiWidth;
    v42 = Font::Get(0);
    v43 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOff, v41, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v43,
      5u);
    v44 = v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v45 = TextData::Get(0xE6D8D434u);
    v44[118].__vecDelDtor((NiRefObject *)v43, (unsigned int)v45);
    v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v43,
      0);
    v46 = GTRequestListWin::CreateWin(pkFrameWork);
    v47 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
    v2->m_pkGTRequestListWin = v46;
    ((void (__thiscall *)(GuildTournamentBaseWin *, unsigned int, unsigned int, _DWORD, _DWORD))v47)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.60000002,
      0.60000002);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v59 = -1;
    if ( spNode.m_pObject )
    {
      v48 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v48 )
          v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v59 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005DDE40) --------------------------------------------------------
void __thiscall GTRequestListWin::OnSearch(GTRequestListWin *this)
{
  GTRequestListWin *v1; // esi@1
  int v2; // eax@2
  int v3; // edi@2
  char v4; // cl@3
  int v5; // eax@4
  SlideBar *v6; // ecx@11
  SlideListWin *v7; // edi@11
  boost::detail::function::any_pointer (__cdecl *v8)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-Ch] [bp-1Ch]@9
  int v9; // [sp-8h] [bp-18h]@9
  bool (__cdecl *v10)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-4h] [bp-14h]@5
  boost::detail::function::any_pointer (__cdecl **v11)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+Ch] [bp-4h]@9

  v1 = this;
  if ( !((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)() )
    return;
  *(_DWORD *)&v1->m_acSearchName[0] = 0;
  *(_DWORD *)&v1->m_acSearchName[4] = 0;
  *(_DWORD *)&v1->m_acSearchName[8] = 0;
  *(_DWORD *)&v1->m_acSearchName[12] = 0;
  *(_DWORD *)&v1->m_acSearchName[16] = 0;
  *(_DWORD *)&v1->m_acSearchName[20] = 0;
  *(_DWORD *)&v1->m_acSearchName[24] = 0;
  *(_DWORD *)&v1->m_acSearchName[28] = 0;
  v2 = ((int (*)(void))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = (int)&v1->m_acSearchName[-v2];
  do
  {
    v4 = *(_BYTE *)v2;
    *(_BYTE *)(v3 + v2) = *(_BYTE *)v2;
    ++v2;
  }
  while ( v4 );
  v5 = v1->m_iSearchTyepe;
  if ( v5 == 11 )
  {
    v10 = GTRequestListWin::GuildInfo::High_GuildName;
LABEL_8:
    boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
      (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v1->m_SortPradicationFunc,
      v10);
    goto LABEL_9;
  }
  if ( v5 == 12 )
  {
    v10 = GTRequestListWin::GuildInfo::High_GuildMasterName;
    goto LABEL_8;
  }
LABEL_9:
  v8 = 0;
  v9 = 0;
  v10 = 0;
  v11 = &v8;
  if ( v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager )
  {
    v10 = (bool (__cdecl *)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))v1->m_SortPradicationFunc.baseclass_0.invoker;
    v8 = v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager;
    v9 = (int)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)v1->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::sort<std::_Vector_iterator<std::_Vector_val<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>>_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
    *(std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0],
    (std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > >)v1->m_vecGuildInfo.baseclass_0._Mylast,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v8);
  v6 = v1->m_pkSlideBarGuild;
  v10 = 0;
  v1->m_bSearchStart = 1;
  SlideBar::SetSplitCnt(v6, (int)v10);
  v1->m_pkGuildLIst->m_nSlideSplitCnt = 0;
  v7 = v1->m_pkGuildLIst;
  v7->m_fCurSlideBtnPos = 0.0;
  v7->m_nViewStartPos = (signed int)((double)v7->m_nSlideSplitCnt * 0.0);
  v1->m_pkGuildLIst->m_nViewStartPos = 0;
  GTRequestListWin::DisplayInfoSetting(v1, 1);
}

//----- (005DDF80) --------------------------------------------------------
void __thiscall GTRequestListWin::OnEditEnd(GTRequestListWin *this, unsigned int wParam, int lParam)
{
  GTRequestListWin *v3; // esi@1
  EditWin *v4; // edi@1
  NiRefObjectVtbl *v5; // ebx@1
  int v6; // eax@1

  v3 = this;
  v4 = this->m_spEdit.m_pObject;
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)(this->m_spEdit.m_pObject);
  v5[115].__vecDelDtor((NiRefObject *)v4, v6);
  ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  GTRequestListWin::OnSearch(v3);
}

//----- (005DDFC0) --------------------------------------------------------
void __thiscall GTRequestListWin::SetGuildList(GTRequestListWin *this, SHINE_GUILD_LIST_NEW *pkList, unsigned int uiTotalGuild)
{
  GTRequestListWin *v3; // edi@1
  int v4; // eax@2
  int v5; // edx@2
  int v6; // ecx@2
  int v7; // eax@2
  char v8; // cl@3
  int v9; // ecx@4
  int v10; // edx@4
  int v11; // eax@4
  int v12; // ecx@4
  int v13; // eax@4
  char v14; // cl@5
  unsigned int v15; // ecx@6
  unsigned int v16; // edx@6
  NiRefObjectVtbl *v17; // esi@7
  char *v18; // eax@7
  char *v19; // eax@7
  GuildListWin::GuildInfo *v20; // esi@9
  GuildListWin::GuildInfo *v21; // ST20_4@9
  signed int v22; // edx@9
  GTRequestListWin::GuildInfo kGuildInfo; // [sp+4h] [bp-80h]@1
  char acName[17]; // [sp+48h] [bp-3Ch]@2
  char acName2[17]; // [sp+5Ch] [bp-28h]@4
  char v26; // [sp+70h] [bp-14h]@4
  unsigned int v27; // [sp+74h] [bp-10h]@1
  int v28; // [sp+80h] [bp-4h]@1
  int v29; // [sp+84h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v3 = this;
  kGuildInfo.m_strGuildName.baseclass_0._Myres = 15;
  kGuildInfo.m_strGuildName.baseclass_0._Mysize = 0;
  kGuildInfo.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kGuildInfo.m_MasterName.baseclass_0._Myres = 15;
  kGuildInfo.m_MasterName.baseclass_0._Mysize = 0;
  kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v28 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kGuildInfo.m_strGuildName,
    &byte_9788EB,
    0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGuildInfo.m_MasterName, &byte_9788EB, 0);
  if ( pkList )
  {
    v4 = *(_DWORD *)&pkList->sGuildName.n4_name[8];
    v5 = *(_DWORD *)&pkList->sGuildName.n4_name[4];
    *(_DWORD *)acName = *(_DWORD *)&pkList->sGuildName.n4_name[0];
    v6 = *(_DWORD *)&pkList->sGuildName.n4_name[12];
    *(_DWORD *)&acName[8] = v4;
    v7 = (int)acName;
    *(_DWORD *)&acName[4] = v5;
    *(_DWORD *)&acName[12] = v6;
    acName[16] = 0;
    do
      v8 = *(_BYTE *)v7++;
    while ( v8 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kGuildInfo.m_strGuildName,
      acName,
      v7 - (_DWORD)&acName[1]);
    v9 = *(_DWORD *)&pkList->sMasterCharID.n5_name[4];
    v10 = *(_DWORD *)&pkList->sMasterCharID.n5_name[8];
    *(_DWORD *)acName2 = *(_DWORD *)&pkList->sMasterCharID.n5_name[0];
    v11 = *(_DWORD *)&pkList->sMasterCharID.n5_name[12];
    *(_DWORD *)&acName2[4] = v9;
    v12 = *(_DWORD *)&pkList->sMasterCharID.n5_name[16];
    *(_DWORD *)&acName2[12] = v11;
    v13 = (int)acName2;
    *(_DWORD *)&acName2[8] = v10;
    *(_DWORD *)&acName2[16] = v12;
    v26 = 0;
    acName2[16] = 0;
    do
      v14 = *(_BYTE *)v13++;
    while ( v14 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kGuildInfo.m_MasterName,
      acName2,
      v13 - (_DWORD)&acName2[1]);
    v15 = pkList->nType;
    v16 = pkList->nMemberCnt;
    kGuildInfo.m_unGuildGrade = pkList->nGrade;
    kGuildInfo.m_unGuildType = v15;
    kGuildInfo.m_unGuildTotalMember = v16;
    if ( uiTotalGuild > 0 )
    {
      v17 = v3->m_pkTotalGuildNum->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v18 = TextData2::Get(0x3B544247u);
      v19 = fs(v18);
      v17[118].__vecDelDtor((NiRefObject *)v3->m_pkTotalGuildNum, (unsigned int)v19);
    }
    std::vector<GuildAcademySelectWin::GuildInfo_std::allocator<GuildAcademySelectWin::GuildInfo>>::push_back(
      (std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *)&v3->m_vecGuildInfo,
      (GuildListWin::GuildInfo *)&kGuildInfo);
    if ( !v3->m_bFirstSort )
    {
      v20 = (GuildListWin::GuildInfo *)v3->m_vecGuildInfo.baseclass_0._Mylast;
      v21 = *(GuildListWin::GuildInfo **)&v3->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
      v22 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)((char *)v20 - (char *)v21)) >> 32) >> 5;
      std::_Sort<GTRequestListWin::GuildInfo___int_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
        v21,
        v20,
        v22 + ((unsigned int)v22 >> 31),
        GTRequestListWin::GuildInfo::High_GuildName);
      v3->m_bFirstSort = 1;
    }
    GTRequestListWin::DisplayInfoSetting(v3, 0);
  }
  if ( kGuildInfo.m_MasterName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
  kGuildInfo.m_MasterName.baseclass_0._Myres = 15;
  kGuildInfo.m_MasterName.baseclass_0._Mysize = 0;
  kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( kGuildInfo.m_strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kGuildInfo);
}
// A85C00: using guessed type int __security_cookie;

//----- (005DE1C0) --------------------------------------------------------
void __thiscall GTRequestListWin::ShowFormerList(GTRequestListWin *this)
{
  void *v1; // eax@1
  GTRequestListWin *v2; // esi@1
  boost::detail::function::any_pointer (__cdecl *v3)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ebx@1
  bool (__cdecl *v4)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // ecx@1
  char *v5; // edi@1
  boost::detail::function::any_pointer (__cdecl *v6)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edx@4
  void *v7; // edx@4
  boost::detail::function::any_pointer (__cdecl *v8)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-Ch] [bp-28h]@7
  int v9; // [sp-8h] [bp-24h]@7
  bool (__cdecl *v10)(boost::detail::function::any_pointer, GTRequestListWin::GuildInfo *, GTRequestListWin::GuildInfo *); // [sp-4h] [bp-20h]@7
  char v11; // [sp+Ch] [bp-10h]@3
  bool (__cdecl *v12)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp+14h] [bp-8h]@2
  boost::detail::function::any_pointer (__cdecl **v13)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+18h] [bp-4h]@7

  v1 = 0;
  v2 = this;
  this->m_bSearchStart = 0;
  *(_DWORD *)&this->m_acSearchName[0] = 0;
  *(_DWORD *)&this->m_acSearchName[4] = 0;
  *(_DWORD *)&this->m_acSearchName[8] = 0;
  *(_DWORD *)&this->m_acSearchName[12] = 0;
  *(_DWORD *)&this->m_acSearchName[16] = 0;
  *(_DWORD *)&this->m_acSearchName[20] = 0;
  v3 = 0;
  v4 = 0;
  *(_DWORD *)&v2->m_acSearchName[24] = 0;
  *(_DWORD *)&v2->m_acSearchName[28] = 0;
  v5 = (char *)&v2->m_SortPradicationFunc;
  if ( GTRequestListWin::GuildInfo::High_GuildName )
  {
    v12 = boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke;
    v3 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage;
    v1 = boost::detail::function::functor_manager<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::manage(
           (boost::detail::function::any_pointer)GTRequestListWin::GuildInfo::High_GuildName,
           0).obj_ptr;
    v4 = boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke;
  }
  if ( v5 != &v11 )
  {
    v6 = v3;
    v3 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v5;
    *(_DWORD *)v5 = v6;
    v7 = v1;
    v1 = v2->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr;
    v2->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr = v7;
    v2->m_SortPradicationFunc.baseclass_0.invoker = (bool (__cdecl *)(boost::detail::function::any_pointer, GTRequestListWin::GuildInfo *, GTRequestListWin::GuildInfo *))v4;
  }
  if ( v3 )
    v3((boost::detail::function::any_pointer)v1, destroy_functor_tag);
  v8 = 0;
  v9 = 0;
  v10 = 0;
  v13 = &v8;
  if ( *(_DWORD *)v5 )
  {
    v10 = v2->m_SortPradicationFunc.baseclass_0.invoker;
    v8 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v5;
    v9 = (*(int (__cdecl **)(void *, _DWORD))v5)(v2->m_SortPradicationFunc.baseclass_0.baseclass_0.functor.obj_ptr, 0);
  }
  std::sort<std::_Vector_iterator<std::_Vector_val<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>>_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
    *(std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > *)&v2->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0],
    (std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > >)v2->m_vecGuildInfo.baseclass_0._Mylast,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v8);
  GTRequestListWin::DisplayInfoSetting(v2, 0);
}

//----- (005DE2B0) --------------------------------------------------------
void __thiscall GTRequestListWin::OnCommand(GTRequestListWin *this, unsigned int wParam, int lParam)
{
  GTRequestListWin *v3; // esi@1
  SlideListWin *v4; // edi@23
  boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > v5; // [sp-Ch] [bp-14h]@5
  bool (__cdecl *v6)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-4h] [bp-Ch]@4

  v3 = this;
  switch ( wParam )
  {
    case 1u:
      GTRequestListWin::OnSlideBar(this);
      return;
    case 3u:
      if ( bSGuildName_0 )
      {
        bSGuildName_0 = 0;
        v6 = GuildListWin::GuildInfo::Low_GuildName;
      }
      else
      {
        bSGuildName_0 = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildName;
      }
      goto LABEL_5;
    case 4u:
      if ( bSMasterName_0 )
      {
        bSMasterName_0 = 0;
        v6 = GTRequestListWin::GuildInfo::Low_GuildMasterName;
      }
      else
      {
        bSMasterName_0 = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildMasterName;
      }
      goto LABEL_5;
    case 5u:
      if ( bSGuildType_0 )
      {
        bSGuildType_0 = 0;
        v6 = GuildListWin::GuildInfo::Low_GuildType;
      }
      else
      {
        bSGuildType_0 = 1;
        v6 = GuildListWin::GuildInfo::High_GuildType;
      }
      goto LABEL_5;
    case 6u:
      if ( bSGuildGrade_0 )
      {
        bSGuildGrade_0 = 0;
        v6 = GuildListWin::GuildInfo::Low_GuildGrade;
      }
      else
      {
        bSGuildGrade_0 = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildGrade;
      }
      goto LABEL_5;
    case 7u:
      if ( bSTotalMember_0 )
      {
        bSTotalMember_0 = 0;
        v6 = GTRequestListWin::GuildInfo::Low_GuildTotalMember;
      }
      else
      {
        bSTotalMember_0 = 1;
        v6 = GTRequestListWin::GuildInfo::High_GuildTotalMember;
      }
LABEL_5:
      boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>::operator_<bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&this->m_SortPradicationFunc,
        v6);
      boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>(
        &v5,
        (boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v3->m_SortPradicationFunc);
      std::sort<std::_Vector_iterator<std::_Vector_val<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>>_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
        *(std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > > *)&v3->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0],
        (std::_Vector_iterator<std::_Vector_val<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > >)v3->m_vecGuildInfo.baseclass_0._Mylast,
        v5);
      if ( v3->m_bSearchStart )
        GTRequestListWin::DisplayInfoSetting(v3, 1);
      else
        GTRequestListWin::DisplayInfoSetting(v3, 0);
      break;
    case 8u:
      GTRequestListWin::OnSearchChoice(this);
      break;
    case 9u:
      GTRequestListWin::OnSearch(this);
      break;
    case 0xAu:
      this->m_bSearchStart = 0;
      *(_DWORD *)&this->m_acSearchName[0] = 0;
      *(_DWORD *)&this->m_acSearchName[4] = 0;
      *(_DWORD *)&this->m_acSearchName[8] = 0;
      *(_DWORD *)&this->m_acSearchName[12] = 0;
      *(_DWORD *)&this->m_acSearchName[16] = 0;
      *(_DWORD *)&this->m_acSearchName[20] = 0;
      *(_DWORD *)&this->m_acSearchName[24] = 0;
      *(_DWORD *)&this->m_acSearchName[28] = 0;
      SlideBar::SetSplitCnt(this->m_pkSlideBarGuild, 0);
      v3->m_pkGuildLIst->m_nSlideSplitCnt = 0;
      v4 = v3->m_pkGuildLIst;
      v4->m_fCurSlideBtnPos = 0.0;
      v4->m_nViewStartPos = (signed int)((double)v4->m_nSlideSplitCnt * 0.0);
      v3->m_pkGuildLIst->m_nViewStartPos = 0;
      GTRequestListWin::ShowFormerList(v3);
      break;
    case 0xDu:
      GTRequestListWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (005DE4F0) --------------------------------------------------------
bool __thiscall GTRequestListWin::Create(GTRequestListWin *this, PgFrameWork *pkFrameWork)
{
  GTRequestListWin *v2; // esi@1
  bool result; // al@6
  NiTexturePalette *v4; // ebx@7
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  int v8; // edi@16
  int v9; // ebx@16
  NiSourceTexture *v10; // eax@16
  PgSprData *v11; // eax@19
  PgSprData *v12; // eax@21
  PgWinSpr *v13; // eax@21
  PgFont *v14; // eax@23
  PgWinText *v15; // eax@23
  NiRefObjectVtbl *v16; // edx@23
  char *v17; // eax@23
  PgSprData *v18; // eax@23
  SLWCreateInfo::Item *v19; // eax@23
  void *v20; // eax@23
  void *v21; // eax@23
  void *v22; // eax@23
  void *v23; // eax@23
  void *v24; // eax@23
  void *v25; // eax@23
  void *v26; // eax@23
  PgSprData *v27; // eax@23
  SlideListWin *v28; // eax@23
  PgSprData *v29; // eax@23
  SlideBar *v30; // eax@23
  NiRefObjectVtbl *v31; // eax@23
  unsigned int v32; // ecx@23
  void *(__thiscall *v33)(NiRefObject *, unsigned int); // eax@23
  int v34; // eax@23
  int v35; // eax@23
  int v36; // eax@23
  void *v37; // edx@23
  PgFont *v38; // eax@23
  PgWinText *v39; // eax@23
  NiRefObjectVtbl *v40; // edx@23
  char *v41; // eax@23
  int v42; // ecx@23
  void *v43; // eax@23
  PgFont *v44; // eax@23
  PgWinText *v45; // eax@23
  NiRefObjectVtbl *v46; // edx@23
  char *v47; // eax@23
  int v48; // ecx@23
  void *v49; // eax@23
  PgFont *v50; // eax@23
  PgWinText *v51; // eax@23
  NiRefObjectVtbl *v52; // edx@23
  char *v53; // eax@23
  int v54; // ecx@23
  void *v55; // eax@23
  PgFont *v56; // eax@23
  PgWinText *v57; // eax@23
  NiRefObjectVtbl *v58; // edx@23
  char *v59; // eax@23
  int v60; // ecx@23
  void *v61; // eax@23
  PgFont *v62; // eax@23
  char *v63; // eax@23
  int v64; // ecx@23
  void *v65; // eax@23
  PgFont *v66; // eax@23
  PgWinText *v67; // eax@23
  NiRefObjectVtbl *v68; // edx@23
  char *v69; // eax@23
  int v70; // ecx@23
  void *v71; // eax@23
  PgFont *v72; // eax@23
  PgWinText *v73; // eax@23
  int v74; // eax@23
  void *v75; // edx@23
  PgFont *v76; // eax@23
  PgWinText *v77; // eax@23
  char *v78; // eax@23
  PgSprData *v79; // eax@23
  EditWin *v80; // eax@23
  NiSourceTexture *v81; // eax@23
  PopupMenuWin *v82; // eax@23
  char *v83; // eax@23
  char *v84; // eax@23
  int v85; // eax@23
  void *v86; // edx@23
  PgFont *v87; // eax@23
  PgWinText *v88; // edi@23
  NiRefObjectVtbl *v89; // ebx@23
  char *v90; // eax@23
  const char *v91; // [sp+8Ch] [bp-88h]@17
  int *v92; // [sp+90h] [bp-84h]@17
  int *v93; // [sp+94h] [bp-80h]@17
  NiSourceTexture *v94; // [sp+98h] [bp-7Ch]@17
  unsigned int v95; // [sp+9Ch] [bp-78h]@1
  SLWCreateInfo kCreateInfo; // [sp+ACh] [bp-68h]@23
  unsigned int uiHeight; // [sp+C8h] [bp-4Ch]@21
  unsigned int uiWidth; // [sp+CCh] [bp-48h]@21
  NiSourceTexture *pkTexture; // [sp+D0h] [bp-44h]@1
  unsigned int v100; // [sp+D4h] [bp-40h]@23
  int uiTop; // [sp+D8h] [bp-3Ch]@10
  int uiLeft; // [sp+DCh] [bp-38h]@10
  NiPointer<NiNode> spNode; // [sp+E0h] [bp-34h]@1
  void *pkMenu; // [sp+E4h] [bp-30h]@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+E8h] [bp-2Ch]@23
  unsigned int v106; // [sp+104h] [bp-10h]@1
  int v107; // [sp+110h] [bp-4h]@1
  int v108; // [sp+114h] [bp+0h]@1

  v106 = (unsigned int)&v108 ^ __security_cookie;
  v95 = (unsigned int)&v108 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v107 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v107 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildList.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, pkFrameWork, "GuildListWin", 0) )
  {
    v8 = uiLeft;
    v9 = uiTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v94 = v10;
      v93 = &uiTop;
      v92 = &uiLeft;
      v91 = "Theme";
    }
    else
    {
      v94 = 0;
      v93 = &uiTop;
      v92 = &uiLeft;
      v91 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v91, v92, v93, v94);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinCloseBut::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0);
    pkMenu = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "HelpLinkNor",
           v95) )
    {
      pkMenu = PgSprData::Create(
                 &spNode.m_pObject->baseclass_0,
                 "HelpLinkNor",
                 &uiLeft,
                 &uiTop,
                 (NiSourceTexture *)pkMenu);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xDu,
        0,
        0);
    }
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v14 = Font::Get(MAIN_MENU);
      v15 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 2,
              uiWidth,
              uiHeight,
              v14,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v15;
      v16[122].__vecDelDtor((NiRefObject *)v15, 5u);
      (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkMenu + 468))(&Color::m_kDxWinTitleColor);
      v100 = *(_DWORD *)pkMenu;
      v17 = TextData2::Get(0x2C5335A1u);
      (*(void (__thiscall **)(void *, char *))(v100 + 472))(pkMenu, v17);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v107) = 1;
      v19 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v19->nItemType = 1;
      v19->pNode = spNode.m_pObject;
      pkMenu = v19;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      LOBYTE(v107) = 2;
      pkMenu = (char *)pkMenu + 72;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkMenu,
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarClick");
      LOBYTE(v107) = 3;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkMenu,
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v107) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkMenu,
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v20 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v20;
      *(_DWORD *)v20 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column01");
      LOBYTE(v107) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v21 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v21;
      *(_DWORD *)v21 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column02");
      LOBYTE(v107) = 6;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v22 = pkMenu;
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      *((_BYTE *)v22 + 88) = 1;
      v23 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v23;
      *(_DWORD *)v23 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column03");
      LOBYTE(v107) = 7;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v24 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v24;
      *(_DWORD *)v24 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column04");
      LOBYTE(v107) = 8;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v25 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v25;
      *(_DWORD *)v25 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column05");
      LOBYTE(v107) = 9;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      v26 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkMenu = v26;
      *(_DWORD *)v26 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column06");
      LOBYTE(v107) = 10;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkMenu + 72),
        &thisa);
      LOBYTE(v107) = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkMenu + 1) = spNode.m_pObject;
      kCreateInfo.m_nOffX = 6;
      kCreateInfo.m_nOffY = 0;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, pkTexture);
      v28 = SlideListWin::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              v27,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              0);
      v2->m_pkGuildLIst = v28;
      SlideListWin::UpdateViewList(v28);
      v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
      v30 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v29,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkSlideBarGuild = v30;
      v30->m_uiClickMsg = 1;
      v2->m_pkSlideBarGuild->m_eType = 1;
      v31 = v2->m_pkSlideBarGuild->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v32 = (unsigned int)v2->m_pkSlideBarGuild;
      pkMenu = v31;
      v33 = v31[42].__vecDelDtor;
      v100 = v32;
      v34 = ((int (__cdecl *)(_DWORD))v33)(0);
      v35 = (*(int (__stdcall **)(int))(*(_DWORD *)v100 + 164))(v34);
      (*(void (__thiscall **)(SlideBar *, int))((void (__thiscall **)(_DWORD, _DWORD))pkMenu + 77))(
        v2->m_pkSlideBarGuild,
        v35 - 18);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title01Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title01Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        2u,
        0,
        0);
      v36 = **((_DWORD **)pkMenu + 9);
      v37 = *(void **)(v36 + 20);
      v100 = *(_DWORD *)(v36 + 24);
      pkMenu = v37;
      v38 = Font::Get(MAIN_MENU);
      v39 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v100,
              v38,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v40 = v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v39;
      v40[122].__vecDelDtor((NiRefObject *)v39, 5u);
      v100 = *(_DWORD *)pkMenu;
      v41 = TextData2::Get(0x26B17C8Fu);
      (*(void (__thiscall **)(void *, char *))(v100 + 472))(pkMenu, v41);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title02Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title02Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        3u,
        0,
        0);
      v42 = *((_DWORD *)pkMenu + 9);
      v43 = *(void **)(*(_DWORD *)v42 + 20);
      v100 = *(_DWORD *)(*(_DWORD *)v42 + 24);
      pkMenu = v43;
      v44 = Font::Get(MAIN_MENU);
      v45 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v100,
              v44,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v46 = v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v45;
      v46[122].__vecDelDtor((NiRefObject *)v45, 5u);
      v100 = *(_DWORD *)pkMenu;
      v47 = TextData2::Get(0xD90AE9EEu);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v100 + 472))(pkMenu, v47);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title03Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title03Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        4u,
        0,
        0);
      v48 = *((_DWORD *)pkMenu + 9);
      v49 = *(void **)(*(_DWORD *)v48 + 20);
      v100 = *(_DWORD *)(*(_DWORD *)v48 + 24);
      pkMenu = v49;
      v50 = Font::Get(MAIN_MENU);
      v51 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v100,
              v50,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v52 = v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v51;
      v52[122].__vecDelDtor((NiRefObject *)v51, 5u);
      v100 = *(_DWORD *)pkMenu;
      v53 = TextData2::Get(0xE012F32Cu);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v100 + 472))(pkMenu, v53);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title04Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title04Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        5u,
        0,
        0);
      v54 = *((_DWORD *)pkMenu + 9);
      v55 = *(void **)(*(_DWORD *)v54 + 20);
      v100 = *(_DWORD *)(*(_DWORD *)v54 + 24);
      pkMenu = v55;
      v56 = Font::Get(MAIN_MENU);
      v57 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v100,
              v56,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v58 = v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v57;
      v58[122].__vecDelDtor((NiRefObject *)v57, 5u);
      v100 = *(_DWORD *)pkMenu;
      v59 = TextData2::Get(0x29633D92u);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v100 + 472))(pkMenu, v59);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title05Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title05Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        6u,
        0,
        0);
      v60 = *((_DWORD *)pkMenu + 9);
      v61 = *(void **)(*(_DWORD *)v60 + 20);
      v100 = *(_DWORD *)(*(_DWORD *)v60 + 24);
      pkMenu = v61;
      v62 = Font::Get(MAIN_MENU);
      pkMenu = PgWinText::CreateWin(
                 uiLeft - v8,
                 uiTop - v9 + 1,
                 (unsigned int)pkMenu,
                 v100,
                 v62,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
      (*(void (__thiscall **)(void *, signed int))(*(_DWORD *)pkMenu + 488))(pkMenu, 5);
      v100 = *(_DWORD *)pkMenu;
      v63 = TextData::Get(0x88C9DFD4u);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v100 + 472))(pkMenu, v63);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title06Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title06Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Title06Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        7u,
        0,
        0);
      v64 = *((_DWORD *)pkMenu + 9);
      v65 = *(void **)(*(_DWORD *)v64 + 20);
      v100 = *(_DWORD *)(*(_DWORD *)v64 + 24);
      pkMenu = v65;
      v66 = Font::Get(MAIN_MENU);
      v67 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v100,
              v66,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v68 = v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkMenu = v67;
      v68[122].__vecDelDtor((NiRefObject *)v67, 5u);
      v100 = *(_DWORD *)pkMenu;
      v69 = TextData2::Get(0xBFFAD625u);
      (*(void (__thiscall **)(_DWORD, _DWORD))(v100 + 472))(pkMenu, v69);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkMenu + 240))(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Count_total", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v70 = *((_DWORD *)pkMenu + 9);
      v71 = *(void **)(*(_DWORD *)v70 + 20);
      v100 = *(_DWORD *)(*(_DWORD *)v70 + 24);
      pkMenu = v71;
      v72 = Font::Get(MAIN_MENU);
      v73 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 1,
              (unsigned int)pkMenu,
              v100,
              v72,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkTotalGuildNum = v73;
      v73->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v73,
        5u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTotalGuildNum->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9B9BEF);
      ((void (__stdcall *)(_DWORD))v2->m_pkTotalGuildNum->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SearchChoiceNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchChoiceClick");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchChoiceOver");
      PgWinBut::CreateWin(uiLeft, uiTop, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0, 8u, 0, 0);
      v74 = **((_DWORD **)pkMenu + 9);
      v75 = *(void **)(v74 + 20);
      v100 = *(_DWORD *)(v74 + 24);
      pkMenu = v75;
      v76 = Font::Get(0);
      v77 = PgWinText::CreateWin(
              uiLeft,
              uiTop + 1,
              (unsigned int)pkMenu,
              v100,
              v76,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkSearchType = v77;
      v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v77,
        5u);
      v100 = (unsigned int)v2->m_pkSearchType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v78 = TextData2::Get(0xD90AE9EEu);
      (*(void (__thiscall **)(PgWinText *, char *))(v100 + 472))(v2->m_pkSearchType, v78);
      ((void (__stdcall *)(_DWORD))v2->m_pkSearchType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v79 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Search_Input", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft, uiTop, v79, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v80 = EditWin::CreateWin(
              uiLeft,
              uiTop + 2,
              uiWidth,
              uiHeight,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              NORMAL,
              0x10u,
              1u,
              1,
              0,
              1);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v80);
      EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SearchNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchClick");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "SearchOver");
      PgWinBut::CreateWin(uiLeft, uiTop, (PgSprData *)pkMenu, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0, 0);
      v81 = MenuTexMgr::GetTexture(1u);
      v82 = PopupMenuWin::CreateWin(v81, 4u, 4u, 0);
      v2->m_spPopupMenu = v82;
      ((void (__stdcall *)(IDirectMessenger *))v82->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      PopupMenuWin::Clear(v2->m_spPopupMenu);
      v83 = TextData2::Get(0xD90AE9EEu);
      pkMenu = PopupMenuText::CreateWin(v83, 0, 0, 0, 0, 0, 0);
      PopupMenu::SetClickEvent((PopupMenu *)pkMenu, 74, 0);
      PopupMenuWin::AddMenu(v2->m_spPopupMenu, (PopupMenu *)pkMenu);
      v84 = TextData2::Get(0xE012F32Cu);
      pkMenu = PopupMenuText::CreateWin(v84, 0, 0, 0, 0, 0, 0);
      PopupMenu::SetClickEvent((PopupMenu *)pkMenu, 75, 0);
      PopupMenuWin::AddMenu(v2->m_spPopupMenu, (PopupMenu *)pkMenu);
      PopupMenuWin::FinishMenu(v2->m_spPopupMenu, 0);
      ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      pkMenu = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add((PgSprData *)pkMenu, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(
        uiLeft - v8,
        uiTop - v9,
        (PgSprData *)pkMenu,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xAu,
        0,
        0);
      v85 = **((_DWORD **)pkMenu + 9);
      v86 = *(void **)(v85 + 20);
      v100 = *(_DWORD *)(v85 + 24);
      pkTexture = (NiSourceTexture *)v86;
      v87 = Font::Get(MAIN_MENU);
      v88 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9,
              (unsigned int)pkTexture,
              v100,
              v87,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v88,
        5u);
      v89 = v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v90 = TextData2::Get(0x4A8E7A8Au);
      v89[118].__vecDelDtor((NiRefObject *)v88, (unsigned int)v90);
      v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v88,
        0);
      ((void (__thiscall *)(GTRequestListWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.5,
        0.5);
      LOBYTE(v107) = 0;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      v107 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      v107 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v7 = spNode.m_pObject;
    v107 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005DF5A0) --------------------------------------------------------
bool __cdecl boost::detail::function::function_invoker2<bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____bool_GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const__>::invoke(boost::detail::function::any_pointer function_ptr, GuildListWin::GuildInfo *a0, GuildListWin::GuildInfo *a1)
{
  return ((int (__cdecl *)(_DWORD, _DWORD))function_ptr.obj_ptr)(a0, a1);
}

//----- (005DF5C0) --------------------------------------------------------
void *__thiscall GuildTournamentBaseWin::_vector_deleting_destructor_(GuildTournamentBaseWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentBaseWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentBaseWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BA0A0: using guessed type int (__stdcall *GuildTournamentBaseWin___vftable_)(int uiFlags);
// 9BA0BC: using guessed type int (__thiscall *GuildTournamentBaseWin___vftable_)(void *p, char);

//----- (005DF600) --------------------------------------------------------
bool __cdecl GuildListWin::GuildInfo::Low_GuildName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  GuildListWin::GuildInfo *v2; // eax@1

  v2 = rhw;
  if ( rhw->m_strGuildName.baseclass_0._Myres >= 0x10 )
    v2 = *(GuildListWin::GuildInfo **)&rhw->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &lhw->m_strGuildName,
           0,
           lhw->m_strGuildName.baseclass_0._Mysize,
           v2->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy,
           rhw->m_strGuildName.baseclass_0._Mysize) < 0;
}

//----- (005DF630) --------------------------------------------------------
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>(NsPathMaker *this)
{
  NsPathMaker *v1; // esi@1

  v1 = this;
  if ( this->m_strTempPath.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_strTempPath.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_strTempPath.baseclass_0._Myres = 15;
  v1->m_strTempPath.baseclass_0._Mysize = 0;
  v1->m_strTempPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->m_strDefaultPath.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_strDefaultPath.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_strDefaultPath.baseclass_0._Myres = 15;
  v1->m_strDefaultPath.baseclass_0._Mysize = 0;
  v1->m_strDefaultPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (005DF680) --------------------------------------------------------
bool __cdecl GTRequestListWin::GuildInfo::High_GuildMasterName(GuildListWin::GuildInfo *lhw, GuildListWin::GuildInfo *rhw)
{
  char *v2; // eax@1

  v2 = (char *)&lhw->m_MasterName;
  if ( lhw->m_MasterName.baseclass_0._Myres >= 0x10 )
    v2 = *(char **)v2;
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &rhw->m_MasterName,
           0,
           rhw->m_MasterName.baseclass_0._Mysize,
           v2,
           lhw->m_MasterName.baseclass_0._Mysize) < 0;
}

//----- (005DF6B0) --------------------------------------------------------
void __thiscall GuildListWin::GuildInfo::GuildInfo(GuildListWin::GuildInfo *this, GuildListWin::GuildInfo *__that)
{
  GuildListWin::GuildInfo *v2; // esi@1

  v2 = this;
  this->m_strGuildName.baseclass_0._Myres = 15;
  this->m_strGuildName.baseclass_0._Mysize = 0;
  this->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_strGuildName,
    &__that->m_strGuildName,
    0,
    0xFFFFFFFFu);
  v2->m_MasterName.baseclass_0._Myres = 15;
  v2->m_MasterName.baseclass_0._Mysize = 0;
  v2->m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v2->m_MasterName,
    &__that->m_MasterName,
    0,
    0xFFFFFFFFu);
  v2->m_unGuildType = __that->m_unGuildType;
  v2->m_unGuildGrade = __that->m_unGuildGrade;
  v2->m_unGuildTotalMember = __that->m_unGuildTotalMember;
}

//----- (005DF750) --------------------------------------------------------
void __cdecl std::_Dest_val<std::allocator<GTRequestListWin::GuildInfo>_GTRequestListWin::GuildInfo>(std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *_Alval, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *_Pdest)
{
  if ( _Pdest->baseclass_0.second.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Pdest->baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Pdest->baseclass_0.second.baseclass_0._Myres = 15;
  _Pdest->baseclass_0.second.baseclass_0._Mysize = 0;
  _Pdest->baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( _Pdest->baseclass_0.first.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Pdest->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Pdest->baseclass_0.first.baseclass_0._Myres = 15;
  _Pdest->baseclass_0.first.baseclass_0._Mysize = 0;
  _Pdest->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (005DF7A0) --------------------------------------------------------
void __cdecl std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, std::allocator<GuildListWin::GuildInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  char *v4; // esi@2

  if ( _First != _Last )
  {
    v4 = (char *)&_First->m_MasterName.baseclass_0._Myres;
    do
    {
      if ( *(_DWORD *)v4 >= 0x10u )
        operator delete(*((void **)v4 - 5));
      *(_DWORD *)v4 = 15;
      *((_DWORD *)v4 - 1) = 0;
      *(v4 - 20) = 0;
      if ( *((_DWORD *)v4 - 7) >= 0x10u )
        operator delete(*((void **)v4 - 12));
      *((_DWORD *)v4 - 7) = 15;
      *((_DWORD *)v4 - 8) = 0;
      *(v4 - 48) = 0;
      v4 += 68;
    }
    while ( (GuildListWin::GuildInfo *)(v4 - 48) != _Last );
  }
}

//----- (005DF800) --------------------------------------------------------
void __cdecl std::swap<GTRequestListWin::GuildInfo>(GuildListWin::GuildInfo *_Left, GuildListWin::GuildInfo *_Right)
{
  unsigned int v2; // eax@1
  unsigned int v3; // ecx@1
  GuildListWin::GuildInfo _Tmp; // [sp+0h] [bp-54h]@1
  unsigned int v5; // [sp+44h] [bp-10h]@1
  int v6; // [sp+50h] [bp-4h]@1
  int v7; // [sp+54h] [bp+0h]@1

  v5 = (unsigned int)&v7 ^ __security_cookie;
  GuildListWin::GuildInfo::GuildInfo(&_Tmp, _Left);
  v6 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Left->m_strGuildName,
    &_Right->m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Left->m_MasterName,
    &_Right->m_MasterName,
    0,
    0xFFFFFFFFu);
  _Left->m_unGuildType = _Right->m_unGuildType;
  _Left->m_unGuildGrade = _Right->m_unGuildGrade;
  _Left->m_unGuildTotalMember = _Right->m_unGuildTotalMember;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Right->m_strGuildName,
    &_Tmp.m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Right->m_MasterName,
    &_Tmp.m_MasterName,
    0,
    0xFFFFFFFFu);
  v2 = _Tmp.m_unGuildGrade;
  v3 = _Tmp.m_unGuildTotalMember;
  _Right->m_unGuildType = _Tmp.m_unGuildType;
  _Right->m_unGuildGrade = v2;
  _Right->m_unGuildTotalMember = v3;
  if ( _Tmp.m_MasterName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Tmp.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Tmp.m_MasterName.baseclass_0._Myres = 15;
  _Tmp.m_MasterName.baseclass_0._Mysize = 0;
  _Tmp.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( _Tmp.m_strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Tmp);
}
// A85C00: using guessed type int __security_cookie;

//----- (005DF900) --------------------------------------------------------
void __cdecl std::_Push_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, int _Hole, int _Top, GuildListWin::GuildInfo *_Val, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred)
{
  int v5; // edi@1
  int v6; // ebx@1
  GuildListWin::GuildInfo *v7; // esi@3
  GuildListWin::GuildInfo *v8; // edi@4
  int v9; // eax@5
  GuildListWin::GuildInfo *v10; // edi@5
  GuildListWin::GuildInfo *v11; // esi@5
  boost::detail::function::any_pointer (__cdecl *v12)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // eax@5
  std::exception this; // [sp+0h] [bp-18h]@8
  int i; // [sp+14h] [bp-4h]@1

  v5 = _Hole;
  v6 = (_Hole - 1) / 2;
  for ( i = 0; _Top < v5; v6 = (v6 - 1) / 2 )
  {
    if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      _Hole = (int)"call to empty boost::function";
      std::exception::exception(&this, (const char *const *)&_Hole);
      this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
      LOBYTE(i) = 1;
      boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
    }
    v7 = &_First[v6];
    if ( !_Pred.baseclass_0.invoker(
            (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
            &_First[v6],
            _Val) )
      break;
    v8 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_strGuildName,
      &v7->m_strGuildName,
      0,
      0xFFFFFFFFu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_MasterName,
      &v7->m_MasterName,
      0,
      0xFFFFFFFFu);
    v8->m_unGuildType = v7->m_unGuildType;
    v8->m_unGuildGrade = v7->m_unGuildGrade;
    v8->m_unGuildTotalMember = v7->m_unGuildTotalMember;
    v5 = v6;
  }
  v9 = 17 * v5;
  v10 = _Val;
  v11 = &_First[4 * v9 / 0x44u];
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_First[4 * v9 / 0x44u].m_strGuildName,
    &_Val->m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v11->m_MasterName,
    &v10->m_MasterName,
    0,
    0xFFFFFFFFu);
  v11->m_unGuildType = v10->m_unGuildType;
  v12 = _Pred.baseclass_0.baseclass_0.manager;
  v11->m_unGuildGrade = v10->m_unGuildGrade;
  v11->m_unGuildTotalMember = v10->m_unGuildTotalMember;
  i = -1;
  if ( v12 )
    v12(_Pred.baseclass_0.baseclass_0.functor, destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (005DFA50) --------------------------------------------------------
void __cdecl std::_Push_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, int _Hole, int _Top, GuildListWin::GuildInfo *_Val, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))
{
  int v5; // edi@1
  int i; // ebx@1
  GuildListWin::GuildInfo *v7; // esi@2
  GuildListWin::GuildInfo *v8; // edi@3
  GuildListWin::GuildInfo *v9; // esi@4

  v5 = _Hole;
  for ( i = (_Hole - 1) / 2; _Top < v5; i = (i - 1) / 2 )
  {
    v7 = &_First[i];
    if ( !_Pred(&_First[i], _Val) )
      break;
    v8 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_strGuildName,
      &v7->m_strGuildName,
      0,
      0xFFFFFFFFu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v8->m_MasterName,
      &v7->m_MasterName,
      0,
      0xFFFFFFFFu);
    v8->m_unGuildType = v7->m_unGuildType;
    v8->m_unGuildGrade = v7->m_unGuildGrade;
    v8->m_unGuildTotalMember = v7->m_unGuildTotalMember;
    v5 = i;
  }
  v9 = &_First[v5];
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v9->m_strGuildName,
    &_Val->m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v9->m_MasterName,
    &_Val->m_MasterName,
    0,
    0xFFFFFFFFu);
  v9->m_unGuildType = _Val->m_unGuildType;
  v9->m_unGuildGrade = _Val->m_unGuildGrade;
  v9->m_unGuildTotalMember = _Val->m_unGuildTotalMember;
}

//----- (005DFB20) --------------------------------------------------------
void __cdecl std::_Med3<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Mid, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred)
{
  std::exception this; // [sp+0h] [bp-1Ch]@2
  char *_What; // [sp+Ch] [bp-10h]@2
  int v6; // [sp+18h] [bp-4h]@1

  v6 = 0;
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 1;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Mid,
         _First) )
    std::swap<GTRequestListWin::GuildInfo>(_Mid, _First);
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 2;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Last,
         _Mid) )
    std::swap<GTRequestListWin::GuildInfo>(_Last, _Mid);
  if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v6) = 3;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
  }
  if ( _Pred.baseclass_0.invoker(
         (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
         _Mid,
         _First) )
    std::swap<GTRequestListWin::GuildInfo>(_Mid, _First);
  v6 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (005DFC60) --------------------------------------------------------
void __cdecl std::_Adjust_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, int _Hole, int _Bottom, GuildListWin::GuildInfo *_Val, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred)
{
  int v5; // ebx@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1
  GuildListWin::GuildInfo *v9; // edi@5
  GuildListWin::GuildInfo *v10; // ebx@5
  GuildListWin::GuildInfo *v11; // esi@8
  GuildListWin::GuildInfo *v12; // ebx@8
  boost::detail::function::any_pointer (__cdecl *v13)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-38h]@9
  int v14; // [sp-18h] [bp-34h]@9
  bool (__cdecl *v15)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-14h] [bp-30h]@9
  std::exception this; // [sp+0h] [bp-1Ch]@14
  int _Top; // [sp+Ch] [bp-10h]@1
  int v18; // [sp+18h] [bp-4h]@1

  v5 = _Hole;
  v6 = _Bottom;
  v7 = 2 * _Hole + 2;
  v18 = 0;
  _Top = _Hole;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( !(_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        _Hole = (int)"call to empty boost::function";
        std::exception::exception(&this, (const char *const *)&_Hole);
        this.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
        LOBYTE(v18) = 1;
        boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&this);
      }
      if ( _Pred.baseclass_0.invoker(
             (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
             &_First[v7],
             &_First[v7 - 1]) )
        --v7;
      v9 = &_First[v7];
      v10 = &_First[v5];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v10->m_strGuildName,
        &v9->m_strGuildName,
        0,
        0xFFFFFFFFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v10->m_MasterName,
        &v9->m_MasterName,
        0,
        0xFFFFFFFFu);
      v10->m_unGuildType = v9->m_unGuildType;
      v10->m_unGuildGrade = v9->m_unGuildGrade;
      v10->m_unGuildTotalMember = v9->m_unGuildTotalMember;
      v5 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v6 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    v11 = &_First[v6 - 1];
    v12 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_strGuildName,
      &_First[v6 - 1].m_strGuildName,
      0,
      0xFFFFFFFFu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_MasterName,
      &v11->m_MasterName,
      0,
      0xFFFFFFFFu);
    v12->m_unGuildType = v11->m_unGuildType;
    v12->m_unGuildGrade = v11->m_unGuildGrade;
    v12->m_unGuildTotalMember = v11->m_unGuildTotalMember;
    v5 = v6 - 1;
  }
  v13 = 0;
  v14 = 0;
  v15 = 0;
  _Bottom = (int)&v13;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v15 = _Pred.baseclass_0.invoker;
    v13 = _Pred.baseclass_0.baseclass_0.manager;
    v14 = (int)_Pred.baseclass_0.baseclass_0.manager(
                 (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                 0);
  }
  std::_Push_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
    _First,
    v5,
    _Top,
    _Val,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v13);
  v18 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (005DFE10) --------------------------------------------------------
void __cdecl std::_Adjust_heap<GuildListWin::GuildInfo___int_GuildListWin::GuildInfo_bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, int _Hole, int _Bottom, GuildListWin::GuildInfo *_Val, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))
{
  int v5; // ebx@1
  int v6; // edi@1
  int v7; // esi@1
  bool v8; // zf@1
  GuildListWin::GuildInfo *v9; // edi@4
  GuildListWin::GuildInfo *v10; // ebx@4
  GuildListWin::GuildInfo *v11; // esi@7
  GuildListWin::GuildInfo *v12; // ebx@7

  v5 = _Hole;
  v6 = _Bottom;
  v7 = 2 * _Hole + 2;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      if ( _Pred(&_First[v7], &_First[v7 - 1]) )
        --v7;
      v9 = &_First[v7];
      v10 = &_First[v5];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v10->m_strGuildName,
        &v9->m_strGuildName,
        0,
        0xFFFFFFFFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v10->m_MasterName,
        &v9->m_MasterName,
        0,
        0xFFFFFFFFu);
      v10->m_unGuildType = v9->m_unGuildType;
      v10->m_unGuildGrade = v9->m_unGuildGrade;
      v10->m_unGuildTotalMember = v9->m_unGuildTotalMember;
      v5 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v6 = _Bottom;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    v11 = &_First[v6 - 1];
    v12 = &_First[v5];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_strGuildName,
      &_First[v6 - 1].m_strGuildName,
      0,
      0xFFFFFFFFu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v12->m_MasterName,
      &v11->m_MasterName,
      0,
      0xFFFFFFFFu);
    v12->m_unGuildType = v11->m_unGuildType;
    v12->m_unGuildGrade = v11->m_unGuildGrade;
    v12->m_unGuildTotalMember = v11->m_unGuildTotalMember;
    v5 = v6 - 1;
  }
  std::_Push_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
    _First,
    v5,
    _Hole,
    _Val,
    _Pred);
}

//----- (005DFF10) --------------------------------------------------------
void __cdecl std::_Pop_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, GuildListWin::GuildInfo *_Val, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, int *__formal)
{
  boost::detail::function::any_pointer (__cdecl *v6)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-18h] [bp-24h]@1
  int v7; // [sp-14h] [bp-20h]@1
  bool (__cdecl *v8)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-10h] [bp-1Ch]@1
  int v9; // [sp+8h] [bp-4h]@1

  v9 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Dest->m_strGuildName,
    &_First->m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Dest->m_MasterName,
    &_First->m_MasterName,
    0,
    0xFFFFFFFFu);
  _Dest->m_unGuildType = _First->m_unGuildType;
  _Dest->m_unGuildGrade = _First->m_unGuildGrade;
  _Dest->m_unGuildTotalMember = _First->m_unGuildTotalMember;
  v6 = 0;
  v7 = 0;
  v8 = 0;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v8 = _Pred.baseclass_0.invoker;
    v6 = _Pred.baseclass_0.baseclass_0.manager;
    v7 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Adjust_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
    _First,
    0,
    _Last - _First,
    _Val,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v6);
  v9 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005E0000) --------------------------------------------------------
#error "5E01CE: positive sp value has been found (funcsize=183)"

//----- (005E01D0) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<GuildListWin::GuildInfo___GuildListWin::GuildInfo_boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred, GuildListWin::GuildInfo *__formal)
{
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-20h] [bp-7Ch]@1
  int v5; // [sp-1Ch] [bp-78h]@1
  bool (__cdecl *v6)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-18h] [bp-74h]@1
  int *v7; // [sp-14h] [bp-70h]@1
  unsigned int v8; // [sp-10h] [bp-6Ch]@1
  boost::detail::function::any_pointer (__cdecl **v9)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp+0h] [bp-5Ch]@1
  GuildListWin::GuildInfo *v10; // [sp+4h] [bp-58h]@1
  GuildListWin::GuildInfo _Val; // [sp+8h] [bp-54h]@1
  unsigned int v12; // [sp+4Ch] [bp-10h]@1
  int v13; // [sp+58h] [bp-4h]@1
  int v14; // [sp+5Ch] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v8 = (unsigned int)&v14 ^ __security_cookie;
  v10 = _First;
  v13 = 0;
  GuildListWin::GuildInfo::GuildInfo(&_Val, _Last - 1);
  v7 = 0;
  v4 = 0;
  v5 = 0;
  v6 = 0;
  LOBYTE(v13) = 1;
  v9 = &v4;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
  {
    v6 = _Pred.baseclass_0.invoker;
    v4 = _Pred.baseclass_0.baseclass_0.manager;
    v5 = (int)_Pred.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
  }
  std::_Pop_heap<GTRequestListWin::GuildInfo___int_GTRequestListWin::GuildInfo_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
    v10,
    _Last - 1,
    _Last - 1,
    &_Val,
    *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v4,
    v7);
  if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Val.m_MasterName.baseclass_0._Myres = 15;
  _Val.m_MasterName.baseclass_0._Mysize = 0;
  _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
  _Val.m_strGuildName.baseclass_0._Myres = 15;
  _Val.m_strGuildName.baseclass_0._Mysize = 0;
  _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v13 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E02D0) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<GTRequestListWin::GuildInfo___GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *), GuildListWin::GuildInfo *__formal)
{
  signed int v4; // edx@1
  GuildListWin::GuildInfo _Val; // [sp+4h] [bp-54h]@1
  unsigned int v6; // [sp+48h] [bp-10h]@1
  int v7; // [sp+54h] [bp-4h]@1
  int v8; // [sp+58h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  GuildListWin::GuildInfo::GuildInfo(&_Val, _Last - 1);
  v7 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Last[-1].m_strGuildName,
    &_First->m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&_Last->m_MasterName - 68),
    &_First->m_MasterName,
    0,
    0xFFFFFFFFu);
  *(&_Last->m_unGuildType - 17) = _First->m_unGuildType;
  *(&_Last->m_unGuildGrade - 17) = _First->m_unGuildGrade;
  *(&_Last->m_unGuildTotalMember - 17) = _First->m_unGuildTotalMember;
  v4 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)((char *)_Last - (char *)_First - 68)) >> 32) >> 5;
  std::_Adjust_heap<GuildListWin::GuildInfo___int_GuildListWin::GuildInfo_bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(
    _First,
    0,
    v4 + ((unsigned int)v4 >> 31),
    &_Val,
    _Pred);
  if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Val.m_MasterName.baseclass_0._Myres = 15;
  _Val.m_MasterName.baseclass_0._Mysize = 0;
  _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E03D0) --------------------------------------------------------
#error "5E07BA: positive sp value has been found (funcsize=334)"

//----- (005E07C0) --------------------------------------------------------
void __thiscall std::vector<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>::_vector<GTRequestListWin::GuildInfo_std::allocator<GTRequestListWin::GuildInfo>>(std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *this)
{
  std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *v1; // esi@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  if ( *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      *(GuildListWin::GuildInfo **)&this->baseclass_0.___u0.baseclass_0.dummy[0],
      this->baseclass_0._Mylast,
      &this->baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0._Mylast = 0;
  v1->baseclass_0._Myend = 0;
}

//----- (005E0810) --------------------------------------------------------
void __cdecl std::_Sort_heap<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred)
{
  int v3; // ebx@3
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edi@3
  signed int v5; // edx@9
  boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > v6; // [sp-20h] [bp-40h]@5
  int v7; // [sp-1Ch] [bp-3Ch]@5
  bool (__cdecl *v8)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-18h] [bp-38h]@5
  GuildListWin::GuildInfo *v9; // [sp-14h] [bp-34h]@5
  int v10; // [sp+0h] [bp-20h]@3
  int v11; // [sp+4h] [bp-1Ch]@3
  bool (__cdecl *v12)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp+8h] [bp-18h]@3
  boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *v13; // [sp+Ch] [bp-14h]@5
  unsigned int v14; // [sp+10h] [bp-10h]@2
  int v15; // [sp+1Ch] [bp-4h]@1

  v15 = 0;
  if ( (signed int)(_Last - _First) > 1 )
  {
    v14 = (char *)_Last - (char *)_First;
    do
    {
      v3 = 0;
      v4 = 0;
      v10 = 0;
      v11 = 0;
      v12 = 0;
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v4 = _Pred.baseclass_0.baseclass_0.manager;
        v12 = _Pred.baseclass_0.invoker;
        v10 = (signed int)_Pred.baseclass_0.baseclass_0.manager;
        v3 = (int)_Pred.baseclass_0.baseclass_0.manager(
                    (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                    0);
        v11 = v3;
      }
      v9 = 0;
      LOBYTE(v15) = 1;
      v13 = &v6;
      v6.baseclass_0.baseclass_0.manager = 0;
      v7 = 0;
      v8 = 0;
      if ( v4 )
      {
        v8 = v12;
        v6.baseclass_0.baseclass_0.manager = v4;
        v7 = (int)v4((boost::detail::function::any_pointer)v3, 0).obj_ptr;
      }
      std::_Pop_heap_0<GuildListWin::GuildInfo___GuildListWin::GuildInfo_boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(
        _First,
        _Last,
        v6,
        v9);
      LOBYTE(v15) = 0;
      if ( v4 )
        v11 = (int)v4((boost::detail::function::any_pointer)v3, destroy_functor_tag).obj_ptr;
      --_Last;
      v5 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)(v14 - 68)) >> 32) >> 5;
      v14 -= 68;
      v10 = 0;
      v12 = 0;
    }
    while ( (signed int)(v5 + ((unsigned int)v5 >> 31)) > 1 );
  }
  v15 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005E0940) --------------------------------------------------------
void __cdecl std::_Sort_heap<GuildListWin::GuildInfo___bool____cdecl____GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const___>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, bool (__cdecl *_Pred)(GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))
{
  GuildListWin::GuildInfo *v3; // esi@1
  signed int i; // edi@1

  v3 = _Last;
  for ( i = (char *)_Last - (char *)_First; i / 68 > 1; --v3 )
  {
    std::_Pop_heap_0<GTRequestListWin::GuildInfo___GTRequestListWin::GuildInfo_bool____cdecl____GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const___>(
      _First,
      v3,
      _Pred,
      0);
    i -= 68;
  }
}

//----- (005E09A0) --------------------------------------------------------
#error "5E0A3E: positive sp value has been found (funcsize=52)"

//----- (005E0A40) --------------------------------------------------------
void *__thiscall GTRequestListWin::_vector_deleting_destructor_(GTRequestListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GTRequestListWin::_GTRequestListWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005E0A70) --------------------------------------------------------
void __cdecl std::_Sort<GTRequestListWin::GuildInfo___int_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, int _Ideal, boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > _Pred)
{
  GuildListWin::GuildInfo *v4; // edi@1
  GuildListWin::GuildInfo *v5; // ebx@1
  boost::detail::function::functor_manager_operation_type v6; // ecx@1
  int v7; // eax@1
  signed int v8; // esi@2
  boost::detail::function::any_pointer (__cdecl *v9)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // [sp-1Ch] [bp-30h]@4
  int v10; // [sp-18h] [bp-2Ch]@4
  bool (__cdecl *v11)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *); // [sp-14h] [bp-28h]@4
  std::pair<GuildListWin::GuildInfo *,GuildListWin::GuildInfo *> _Mid; // [sp+0h] [bp-14h]@6
  int v13; // [sp+10h] [bp-4h]@1

  v4 = _Last;
  v5 = _First;
  v6 = 0;
  v7 = _Last - _First;
  v13 = 0;
  if ( v7 <= 32 )
    goto LABEL_14;
  v8 = _Ideal;
  while ( v8 > v6 )
  {
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::_Unguarded_partition<GuildListWin::GuildInfo___boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(
      &_Mid,
      v5,
      v4,
      *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v9);
    v8 = v8 / 2 / 2 + v8 / 2;
    v9 = 0;
    v10 = 0;
    v11 = 0;
    if ( ((signed int)_Mid.baseclass_0.first - (signed int)v5) / 68 >= (signed int)(v4 - _Mid.baseclass_0.second) )
    {
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v11 = _Pred.baseclass_0.invoker;
        v9 = _Pred.baseclass_0.baseclass_0.manager;
        v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Sort<GTRequestListWin::GuildInfo___int_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
        _Mid.baseclass_0.second,
        v4,
        v8,
        *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v9);
      v4 = _Mid.baseclass_0.first;
    }
    else
    {
      if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
      {
        v11 = _Pred.baseclass_0.invoker;
        v9 = _Pred.baseclass_0.baseclass_0.manager;
        v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                     (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                     0);
      }
      std::_Sort<GTRequestListWin::GuildInfo___int_boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
        v5,
        _Mid.baseclass_0.first,
        v8,
        *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v9);
      v5 = _Mid.baseclass_0.second;
    }
    v7 = v4 - v5;
    v6 = 0;
    if ( v7 <= 32 )
      goto LABEL_14;
  }
  if ( v7 <= 32 )
  {
LABEL_14:
    if ( v7 <= 1 )
      goto LABEL_19;
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::_Insertion_sort<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v9);
  }
  else
  {
    v9 = (boost::detail::function::any_pointer (__cdecl *)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v6;
    v10 = v6;
    v11 = (bool (__cdecl *)(boost::detail::function::any_pointer, GuildListWin::GuildInfo *, GuildListWin::GuildInfo *))v6;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   v6);
    }
    std::make_heap<GuildListWin::GuildInfo___boost::function<bool___cdecl__GuildListWin::GuildInfo_const___GuildListWin::GuildInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v9);
    v9 = 0;
    v10 = 0;
    v11 = 0;
    if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager )
    {
      v11 = _Pred.baseclass_0.invoker;
      v9 = _Pred.baseclass_0.baseclass_0.manager;
      v10 = (int)_Pred.baseclass_0.baseclass_0.manager(
                   (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
                   0);
    }
    std::sort_heap<GTRequestListWin::GuildInfo___boost::function<bool___cdecl__GTRequestListWin::GuildInfo_const___GTRequestListWin::GuildInfo_const____std::allocator<void>>>(
      v5,
      v4,
      *(boost::function<bool __cdecl(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &),std::allocator<void> > *)&v9);
  }
  v6 = 0;
LABEL_19:
  v13 = -1;
  if ( (_DWORD)_Pred.baseclass_0.baseclass_0.manager != v6 )
    _Pred.baseclass_0.baseclass_0.manager(
      (boost::detail::function::any_pointer)_Pred.baseclass_0.baseclass_0.functor.obj_ptr,
      destroy_functor_tag);
}

//----- (005E0CD0) --------------------------------------------------------
#error "5E0D86: positive sp value has been found (funcsize=63)"

//----- (005E0D90) --------------------------------------------------------
void __thiscall GuildTournamentScheduleWin::GuildTournamentScheduleWin(GuildTournamentScheduleWin *this)
{
  GuildTournamentScheduleWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentScheduleWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentScheduleWin::_vftable_;
  v1->m_p16Preliminary[0] = 0;
  v1->m_p16Preliminary[1] = 0;
  v1->m_p16Preliminary[2] = 0;
  v1->m_p16Preliminary[3] = 0;
  v1->m_p16Preliminary[4] = 0;
  v1->m_p16Preliminary[5] = 0;
  v1->m_p16Preliminary[6] = 0;
  v1->m_p16Preliminary[7] = 0;
  v1->m_p16Preliminary[8] = 0;
  v1->m_p16Preliminary[9] = 0;
  v1->m_p16Preliminary[10] = 0;
  v1->m_p16Preliminary[11] = 0;
  v1->m_p16Preliminary[12] = 0;
  v1->m_p16Preliminary[13] = 0;
  v1->m_p16Preliminary[14] = 0;
  v1->m_p16Preliminary[15] = 0;
  v1->m_p8Preliminary[0] = 0;
  v1->m_p8Preliminary[1] = 0;
  v1->m_p8Preliminary[2] = 0;
  v1->m_p8Preliminary[3] = 0;
  v1->m_p8Preliminary[4] = 0;
  v1->m_p8Preliminary[5] = 0;
  v1->m_p8Preliminary[6] = 0;
  v1->m_p8Preliminary[7] = 0;
  v1->m_pSemiFinal[0] = 0;
  v1->m_pSemiFinal[1] = 0;
  v1->m_pSemiFinal[2] = 0;
  v1->m_pSemiFinal[3] = 0;
  v1->m_pFinal[0] = 0;
  v1->m_pFinal[1] = 0;
  v1->m_pChampion = 0;
  v1->m_uiDuringMatchIndex = -1;
  v1->m_iSeedNum = -1;
}
// 9BA6E0: using guessed type int (__stdcall *GuildTournamentScheduleWin___vftable_)(int uiFlags);
// 9BA6FC: using guessed type int (__thiscall *GuildTournamentScheduleWin___vftable_)(void *p, char);

//----- (005E0E80) --------------------------------------------------------
void __thiscall GuildTournamentScheduleWin::_GuildTournamentScheduleWin(GuildTournamentScheduleWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentScheduleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentScheduleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9BA6E0: using guessed type int (__stdcall *GuildTournamentScheduleWin___vftable_)(int uiFlags);
// 9BA6FC: using guessed type int (__thiscall *GuildTournamentScheduleWin___vftable_)(void *p, char);

//----- (005E0EC0) --------------------------------------------------------
void __thiscall GuildTournamentScheduleWin::OnCommand(GuildTournamentScheduleWin *this, unsigned int wParam, int lParam)
{
  this->m_iSeedNum = wParam;
  BYTE3(wParam) = wParam;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xD7u, (char *)&wParam + 3, 1);
}

//----- (005E0EF0) --------------------------------------------------------
void __thiscall GuildTournamentScheduleWin::ClearList(GuildTournamentScheduleWin *this)
{
  GuildTournamentScheduleWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  v2 = (char *)this->m_pMatchList;
  v3 = 31;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 472))(&unk_9BA60D);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 468))(&Color::m_kDxWhiteColor);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  ((void (__stdcall *)(_DWORD))v1->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA60E);
  ((void (__stdcall *)(_DWORD))v1->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA60F);
}

//----- (005E0F60) --------------------------------------------------------
bool __thiscall GuildTournamentScheduleWin::Create(GuildTournamentScheduleWin *this, PgFrameWork *pkFrameWork)
{
  GuildTournamentScheduleWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // ebx@10
  int v9; // edi@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // ebx@13
  NiPointer<PgSprData::PgHitTester> *v14; // edx@13
  unsigned int v15; // ebx@13
  PgFont *v16; // eax@13
  PgWinText *v17; // eax@13
  NiPointer<PgSprData::PgHitTester> *v18; // ecx@13
  unsigned int v19; // ebx@13
  PgFont *v20; // eax@13
  PgWinText *v21; // eax@13
  NiPointer<PgSprData::PgHitTester> *v22; // ecx@13
  unsigned int v23; // ebx@13
  PgFont *v24; // eax@13
  PgWinText *v25; // eax@13
  NiRefObjectVtbl *v26; // ebx@13
  char *v27; // eax@13
  unsigned int v28; // ebx@13
  char *v29; // eax@16
  NiNode *v30; // ST54_4@16
  char *v31; // eax@16
  char *v32; // eax@17
  NiNode *v33; // ST54_4@17
  char *v34; // eax@17
  char *v35; // eax@18
  PgSprData::PgHitTester *v36; // eax@18
  PgWin *v37; // ST3C_4@18
  unsigned int v38; // ST54_4@18
  PgFont *v39; // eax@18
  PgWinAbbreviateText *v40; // eax@18
  char *v41; // eax@20
  NiNode *v42; // ST54_4@20
  char *v43; // eax@20
  NiNode *v44; // ST54_4@20
  char *v45; // eax@20
  PgSprData::PgHitTester *v46; // eax@20
  PgWin *v47; // ST3C_4@20
  unsigned int v48; // ST54_4@20
  PgFont *v49; // eax@20
  PgWinAbbreviateText *v50; // eax@20
  char *v51; // eax@22
  NiNode *v52; // ST54_4@22
  char *v53; // eax@22
  NiNode *v54; // ST54_4@22
  char *v55; // eax@22
  PgSprData::PgHitTester *v56; // eax@22
  PgWin *v57; // ST3C_4@22
  unsigned int v58; // ST54_4@22
  PgFont *v59; // eax@22
  PgWinAbbreviateText *v60; // eax@22
  char *v61; // eax@24
  NiNode *v62; // ST54_4@24
  char *v63; // eax@24
  NiNode *v64; // ST54_4@24
  char *v65; // eax@24
  PgSprData::PgHitTester *v66; // eax@24
  PgWin *v67; // ST3C_4@24
  unsigned int v68; // ST54_4@24
  PgFont *v69; // eax@24
  PgWinAbbreviateText *v70; // eax@24
  PgSprData::PgHitTester *v71; // eax@26
  PgWin *v72; // ST3C_4@26
  unsigned int v73; // ST54_4@26
  PgFont *v74; // eax@26
  PgSprData *v75; // ebx@29
  PgSprData::PgHitTester *v76; // eax@29
  unsigned int v77; // edi@29
  PgFont *v78; // eax@29
  NiPointer<PgSprData::PgHitTester> *v79; // edx@29
  unsigned int v80; // edi@29
  PgFont *v81; // eax@29
  NiPointer<PgSprData::PgHitTester> *v82; // ecx@29
  unsigned int v83; // edi@29
  unsigned int v84; // ebx@29
  PgFont *v85; // eax@29
  PgWinText *v86; // eax@29
  PgWinText *v87; // ebx@29
  NiRefObjectVtbl *v88; // edi@29
  char *v89; // eax@29
  signed int v90; // ecx@29
  signed int v91; // eax@29
  int v92; // esi@29
  NiNode *v93; // esi@38
  const char *v94; // [sp+2Ch] [bp-4Ch]@11
  int *v95; // [sp+30h] [bp-48h]@11
  int *v96; // [sp+34h] [bp-44h]@11
  char *v97; // [sp+34h] [bp-44h]@16
  NiSourceTexture *v98; // [sp+38h] [bp-40h]@11
  NiNode *uiWidth; // [sp+4Ch] [bp-2Ch]@16
  signed int istep4; // [sp+50h] [bp-28h]@13
  signed int istep3; // [sp+54h] [bp-24h]@13
  signed int istep2; // [sp+58h] [bp-20h]@13
  int iYOff; // [sp+5Ch] [bp-1Ch]@10
  NiPointer<NiNode> spNode; // [sp+60h] [bp-18h]@1
  int uiLeft; // [sp+64h] [bp-14h]@4
  int uiTop; // [sp+68h] [bp-10h]@4
  int v107; // [sp+74h] [bp-4h]@1
  unsigned int pkSprDataa; // [sp+80h] [bp+8h]@13
  unsigned int pkSprDatab; // [sp+80h] [bp+8h]@13
  unsigned int pkSprDatac; // [sp+80h] [bp+8h]@13
  NiNode *pkSprDatad; // [sp+80h] [bp+8h]@16
  PgSprData *pkSprData; // [sp+80h] [bp+8h]@16
  NiNode *pkSprDatae; // [sp+80h] [bp+8h]@17
  unsigned int pkSprDataf; // [sp+80h] [bp+8h]@18
  NiNode *pkSprDatag; // [sp+80h] [bp+8h]@20
  PgSprData *pkSprDatah; // [sp+80h] [bp+8h]@20
  unsigned int pkSprDatai; // [sp+80h] [bp+8h]@20
  NiNode *pkSprDataj; // [sp+80h] [bp+8h]@22
  PgSprData *pkSprDatak; // [sp+80h] [bp+8h]@22
  unsigned int pkSprDatal; // [sp+80h] [bp+8h]@22
  NiNode *pkSprDatam; // [sp+80h] [bp+8h]@24
  PgSprData *pkSprDatan; // [sp+80h] [bp+8h]@24
  unsigned int pkSprDatao; // [sp+80h] [bp+8h]@24
  PgSprData *pkSprDatap; // [sp+80h] [bp+8h]@26
  unsigned int pkSprDataq; // [sp+80h] [bp+8h]@26
  unsigned int pkSprDatar; // [sp+80h] [bp+8h]@29
  unsigned int pkSprDatas; // [sp+80h] [bp+8h]@29

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v107 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildTornament.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildTournamentScheduleWin", 0) )
  {
    v6 = spNode.m_pObject;
    v107 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v98 = v10;
    v96 = &uiTop;
    v95 = &uiLeft;
    v94 = "Theme";
  }
  else
  {
    v98 = 0;
    v96 = &uiTop;
    v95 = &uiLeft;
    v94 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v94, v95, v96, v98);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v13, &v2->baseclass_0.baseclass_0.baseclass_0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v15 = v14->m_pObject->m_uiHeight;
  pkSprDataa = v14->m_pObject->m_uiWidth;
  v16 = Font::Get(0);
  v17 = PgWinText::CreateWin(uiLeft - v9, uiTop, pkSprDataa, v15, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pGTMatchTypeText = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA557);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
  ((void (__stdcall *)(_DWORD))v2->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v19 = v18->m_pObject->m_uiHeight;
  pkSprDatab = v18->m_pObject->m_uiWidth;
  v20 = Font::Get(0);
  v21 = PgWinText::CreateWin(uiLeft - v9, uiTop, pkSprDatab, v19, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pGTJoinPossibleTime = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA55E);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  istep2 = 1;
  istep3 = 1;
  istep4 = 1;
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v23 = v22->m_pObject->m_uiHeight;
  pkSprDatac = v22->m_pObject->m_uiWidth;
  v24 = Font::Get(0);
  v25 = PgWinText::CreateWin(uiLeft - v9, uiTop, pkSprDatac, v23, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkHelpMsg = v25;
  v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v25,
    5u);
  v26 = v2->m_pkHelpMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = TextData2::Get(0x94F6DED2u);
  v26[118].__vecDelDtor((NiRefObject *)v2->m_pkHelpMsg, (unsigned int)v27);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkHelpMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkHelpMsg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v28 = 0;
  do
  {
    if ( (signed int)v28 < 16 )
    {
      if ( (signed int)v28 >= 9 )
      {
        pkSprDatae = spNode.m_pObject;
        v32 = fs("Step1_%dNor");
        pkSprData = PgSprData::Create(&pkSprDatae->baseclass_0, v32, &uiLeft, &uiTop, 0);
        v33 = spNode.m_pObject;
        v34 = fs("Step1_%dClick");
        PgSprData::Add(pkSprData, &v33->baseclass_0, v34);
        uiWidth = spNode.m_pObject;
        v97 = "Step1_%dOver";
      }
      else
      {
        pkSprDatad = spNode.m_pObject;
        v29 = fs("Step1_0%dNor");
        pkSprData = PgSprData::Create(&pkSprDatad->baseclass_0, v29, &uiLeft, &uiTop, 0);
        v30 = spNode.m_pObject;
        v31 = fs("Step1_0%dClick");
        PgSprData::Add(pkSprData, &v30->baseclass_0, v31);
        uiWidth = spNode.m_pObject;
        v97 = (char *)"Step1_0%dOver";
      }
      v35 = fs(v97);
      PgSprData::Add(pkSprData, &uiWidth->baseclass_0, v35);
      PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, v28, 0, 0);
      v36 = pkSprData->m_akHitTester.m_pBase->m_pObject;
      v37 = g_pkToolTipWin;
      pkSprDataf = v36->m_uiHeight;
      v38 = v36->m_uiWidth;
      v39 = Font::Get(0);
      v40 = PgWinAbbreviateText::CreateWin(
              uiLeft - v9,
              uiTop + 2,
              v38,
              pkSprDataf,
              v39,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0,
              1,
              v37,
              0xCu);
      v2->m_pMatchList[v28] = (PgWinText *)v40;
      goto LABEL_27;
    }
    if ( (signed int)v28 < 24 )
    {
      pkSprDatag = spNode.m_pObject;
      v41 = fs("Step2_0%dNor");
      pkSprDatah = PgSprData::Create(&pkSprDatag->baseclass_0, v41, &uiLeft, &uiTop, 0);
      v42 = spNode.m_pObject;
      v43 = fs("Step2_0%dClick");
      PgSprData::Add(pkSprDatah, &v42->baseclass_0, v43);
      v44 = spNode.m_pObject;
      v45 = fs("Step2_0%dOver");
      PgSprData::Add(pkSprDatah, &v44->baseclass_0, v45);
      PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, pkSprDatah, &v2->baseclass_0.baseclass_0.baseclass_0, v28, 0, 0);
      v46 = pkSprDatah->m_akHitTester.m_pBase->m_pObject;
      v47 = g_pkToolTipWin;
      pkSprDatai = v46->m_uiHeight;
      v48 = v46->m_uiWidth;
      v49 = Font::Get(0);
      v50 = PgWinAbbreviateText::CreateWin(
              uiLeft - v9,
              uiTop + 2,
              v48,
              pkSprDatai,
              v49,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0,
              1,
              v47,
              0xCu);
      v2->m_pMatchList[v28] = (PgWinText *)v50;
      v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v50,
        5u);
      ++istep2;
      goto LABEL_28;
    }
    if ( (signed int)v28 < 28 )
    {
      pkSprDataj = spNode.m_pObject;
      v51 = fs("Step3_0%dNor");
      pkSprDatak = PgSprData::Create(&pkSprDataj->baseclass_0, v51, &uiLeft, &uiTop, 0);
      v52 = spNode.m_pObject;
      v53 = fs("Step3_0%dClick");
      PgSprData::Add(pkSprDatak, &v52->baseclass_0, v53);
      v54 = spNode.m_pObject;
      v55 = fs("Step3_0%dOver");
      PgSprData::Add(pkSprDatak, &v54->baseclass_0, v55);
      PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, pkSprDatak, &v2->baseclass_0.baseclass_0.baseclass_0, v28, 0, 0);
      v56 = pkSprDatak->m_akHitTester.m_pBase->m_pObject;
      v57 = g_pkToolTipWin;
      pkSprDatal = v56->m_uiHeight;
      v58 = v56->m_uiWidth;
      v59 = Font::Get(0);
      v60 = PgWinAbbreviateText::CreateWin(
              uiLeft - v9,
              uiTop + 2,
              v58,
              pkSprDatal,
              v59,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0,
              1,
              v57,
              0xCu);
      v2->m_pMatchList[v28] = (PgWinText *)v60;
      v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v60,
        5u);
      ++istep3;
      goto LABEL_28;
    }
    if ( (signed int)v28 < 30 )
    {
      pkSprDatam = spNode.m_pObject;
      v61 = fs("Step4_0%dNor");
      pkSprDatan = PgSprData::Create(&pkSprDatam->baseclass_0, v61, &uiLeft, &uiTop, 0);
      v62 = spNode.m_pObject;
      v63 = fs("Step4_0%dClick");
      PgSprData::Add(pkSprDatan, &v62->baseclass_0, v63);
      v64 = spNode.m_pObject;
      v65 = fs("Step4_0%dOver");
      PgSprData::Add(pkSprDatan, &v64->baseclass_0, v65);
      PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, pkSprDatan, &v2->baseclass_0.baseclass_0.baseclass_0, v28, 0, 0);
      v66 = pkSprDatan->m_akHitTester.m_pBase->m_pObject;
      v67 = g_pkToolTipWin;
      pkSprDatao = v66->m_uiHeight;
      v68 = v66->m_uiWidth;
      v69 = Font::Get(0);
      v70 = PgWinAbbreviateText::CreateWin(
              uiLeft - v9,
              uiTop + 2,
              v68,
              pkSprDatao,
              v69,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0,
              1,
              v67,
              0xCu);
      v2->m_pMatchList[v28] = (PgWinText *)v70;
      v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v70,
        5u);
      ++istep4;
      goto LABEL_28;
    }
    if ( v28 == 30 )
    {
      pkSprDatap = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Step5_01Nor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkSprDatap, &spNode.m_pObject->baseclass_0, "Step5_01Click");
      PgSprData::Add(pkSprDatap, &spNode.m_pObject->baseclass_0, "Step5_01Over");
      PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, pkSprDatap, &v2->baseclass_0.baseclass_0.baseclass_0, 0x1Eu, 0, 0);
      v71 = pkSprDatap->m_akHitTester.m_pBase->m_pObject;
      v72 = g_pkToolTipWin;
      pkSprDataq = v71->m_uiHeight;
      v73 = v71->m_uiWidth;
      v74 = Font::Get(0);
      v40 = PgWinAbbreviateText::CreateWin(
              uiLeft - v9,
              uiTop + 2,
              v73,
              pkSprDataq,
              v74,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0,
              1,
              v72,
              0xCu);
      v2->m_pMatchList[30] = (PgWinText *)v40;
LABEL_27:
      v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v40,
        5u);
    }
LABEL_28:
    ++v28;
  }
  while ( (signed int)v28 < 31 );
  v75 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - iYOff, v75, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v76 = v75->m_akHitTester.m_pBase->m_pObject;
  v77 = v76->m_uiWidth;
  pkSprDatar = v76->m_uiHeight;
  v78 = Font::Get(0);
  v2->m_pGTJoinTime = PgWinText::CreateWin(
                        uiLeft + 6,
                        uiTop + 8,
                        pkSprDatar,
                        v77,
                        v78,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
  v79 = v75->m_akHitTester.m_pBase;
  v80 = v79->m_pObject->m_uiWidth;
  pkSprDatas = v79->m_pObject->m_uiHeight;
  v81 = Font::Get(0);
  v2->m_pGTNextJoinTime = PgWinText::CreateWin(
                            uiLeft + 6,
                            uiTop + 28,
                            pkSprDatas,
                            v80,
                            v81,
                            &v2->baseclass_0.baseclass_0.baseclass_0,
                            0,
                            0);
  v82 = v75->m_akHitTester.m_pBase;
  v83 = v82->m_pObject->m_uiWidth;
  v84 = v82->m_pObject->m_uiHeight;
  v85 = Font::Get(0);
  v86 = PgWinText::CreateWin(uiLeft + 6, uiTop + 58, v84, v83, v85, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v87 = v86;
  v88 = v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v89 = TextData::Get(0x29966E75u);
  v88[118].__vecDelDtor((NiRefObject *)v87, (unsigned int)v89);
  ((void (__thiscall *)(GuildTournamentScheduleWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v90 = 0;
  v91 = 1;
  v92 = (int)&v2->m_uiScheduleTable[0].RightChild;
  do
  {
    if ( v90 >= 8 )
    {
      if ( v90 >= 12 )
      {
        if ( v90 >= 15 )
        {
          *(_DWORD *)(v92 - 4) = v91 - 3;
          *(_DWORD *)v92 = v91 - 2;
          *(_DWORD *)(v92 - 8) = 2;
        }
        else
        {
          *(_DWORD *)(v92 - 4) = v91 - 1;
          *(_DWORD *)v92 = v91;
          *(_DWORD *)(v92 - 8) = 4;
        }
      }
      else
      {
        *(_DWORD *)(v92 - 4) = v91 - 1;
        *(_DWORD *)v92 = v91;
        *(_DWORD *)(v92 - 8) = 8;
      }
    }
    else
    {
      *(_DWORD *)(v92 - 4) = v91 - 1;
      *(_DWORD *)v92 = v91;
      *(_DWORD *)(v92 - 8) = 16;
    }
    v91 += 2;
    ++v90;
    v92 += 12;
  }
  while ( v91 < 33 );
  v93 = spNode.m_pObject;
  v107 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v93 )
    v93->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v93, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005E1A20) --------------------------------------------------------
void __thiscall GuildTournamentScheduleWin::CheckMatchType(GuildTournamentScheduleWin *this, PROTO_NC_GUILD_TOURNAMENT_LIST_ACK *pkProto)
{
  char v2; // dl@1
  char v3; // dl@2
  signed int v4; // esi@2
  char v5; // dl@5
  char v6; // dl@8
  char v7; // dl@11
  char v8; // dl@14
  char v9; // dl@17
  char v10; // dl@20
  char v11; // al@23
  char v12; // dl@29
  signed int v13; // esi@29
  char v14; // dl@32
  char v15; // dl@35
  char v16; // dl@38
  char v17; // dl@41
  char v18; // dl@44
  char v19; // dl@47
  char v20; // al@50
  char v21; // dl@56
  signed int v22; // esi@56
  char v23; // dl@59
  char v24; // dl@62
  char v25; // dl@65
  char v26; // dl@68
  char v27; // dl@71
  char v28; // dl@74
  char v29; // al@77
  char v30; // dl@83
  signed int v31; // esi@83
  char v32; // dl@86
  char v33; // dl@89
  char v34; // al@92
  PgWinText *v35; // esi@97
  NiRefObjectVtbl *v36; // edi@97
  char *v37; // eax@97
  char v38; // dl@99
  signed int v39; // esi@99
  char v40; // al@102
  PgWinText *v41; // esi@107
  NiRefObjectVtbl *v42; // edi@107
  char *v43; // eax@107
  unsigned int v44; // [sp-4h] [bp-Ch]@27
  unsigned int v45; // [sp-4h] [bp-Ch]@54

  v2 = pkProto->nMatchType;
  if ( v2 == 4 )
  {
    v3 = pkProto->TournamentList[0].baseclass_0.nResult;
    v4 = 0;
    if ( v3 != 4 && v3 )
      v4 = 1;
    v5 = pkProto->TournamentList[1].baseclass_0.nResult;
    if ( v5 != 4 && v5 )
      ++v4;
    v6 = pkProto->TournamentList[2].baseclass_0.nResult;
    if ( v6 != 4 && v6 )
      ++v4;
    v7 = pkProto->TournamentList[3].baseclass_0.nResult;
    if ( v7 != 4 && v7 )
      ++v4;
    v8 = pkProto->TournamentList[4].baseclass_0.nResult;
    if ( v8 != 4 && v8 )
      ++v4;
    v9 = pkProto->TournamentList[5].baseclass_0.nResult;
    if ( v9 != 4 && v9 )
      ++v4;
    v10 = pkProto->TournamentList[6].baseclass_0.nResult;
    if ( v10 != 4 && v10 )
      ++v4;
    v11 = pkProto->TournamentList[7].baseclass_0.nResult;
    if ( v11 != 4 )
    {
      if ( v11 )
        ++v4;
    }
    if ( v4 == 8 )
    {
      v44 = 1147615635;
LABEL_107:
      v41 = this->m_pGTMatchTypeText;
      v42 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v43 = TextData::Get(v44);
      v42[118].__vecDelDtor((NiRefObject *)v41, (unsigned int)v43);
      return;
    }
    return;
  }
  if ( v2 == 5 )
  {
    v12 = pkProto->TournamentList[8].baseclass_0.nResult;
    v13 = 0;
    if ( v12 != 4 && v12 )
      v13 = 1;
    v14 = pkProto->TournamentList[9].baseclass_0.nResult;
    if ( v14 != 4 && v14 )
      ++v13;
    v15 = pkProto->TournamentList[10].baseclass_0.nResult;
    if ( v15 != 4 && v15 )
      ++v13;
    v16 = pkProto->TournamentList[11].baseclass_0.nResult;
    if ( v16 != 4 && v16 )
      ++v13;
    v17 = pkProto->TournamentList[12].baseclass_0.nResult;
    if ( v17 != 4 && v17 )
      ++v13;
    v18 = pkProto->TournamentList[13].baseclass_0.nResult;
    if ( v18 != 4 && v18 )
      ++v13;
    v19 = pkProto->TournamentList[14].baseclass_0.nResult;
    if ( v19 != 4 && v19 )
      ++v13;
    v20 = pkProto->TournamentList[15].baseclass_0.nResult;
    if ( v20 != 4 && v20 )
      ++v13;
    if ( v13 != 8 )
      return;
    v45 = 1164392851;
    goto LABEL_97;
  }
  if ( v2 != 6 )
  {
    if ( v2 != 7 )
    {
      if ( v2 == 8 )
      {
        v38 = pkProto->TournamentList[28].baseclass_0.nResult;
        v39 = 0;
        if ( v38 != 4 && v38 )
          v39 = 1;
        v40 = pkProto->TournamentList[29].baseclass_0.nResult;
        if ( v40 != 4 && v40 )
          ++v39;
        if ( v39 == 2 )
        {
          v44 = 339884418;
          goto LABEL_107;
        }
      }
      return;
    }
    v30 = pkProto->TournamentList[24].baseclass_0.nResult;
    v31 = 0;
    if ( v30 != 4 && v30 )
      v31 = 1;
    v32 = pkProto->TournamentList[25].baseclass_0.nResult;
    if ( v32 != 4 && v32 )
      ++v31;
    v33 = pkProto->TournamentList[26].baseclass_0.nResult;
    if ( v33 != 4 && v33 )
      ++v31;
    v34 = pkProto->TournamentList[27].baseclass_0.nResult;
    if ( v34 != 4 && v34 )
      ++v31;
    if ( v31 != 4 )
      return;
    v45 = 339884930;
LABEL_97:
    v35 = this->m_pGTMatchTypeText;
    v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v37 = TextData::Get(v45);
    v36[118].__vecDelDtor((NiRefObject *)v35, (unsigned int)v37);
    return;
  }
  v21 = pkProto->TournamentList[16].baseclass_0.nResult;
  v22 = 0;
  if ( v21 != 4 && v21 )
    v22 = 1;
  v23 = pkProto->TournamentList[17].baseclass_0.nResult;
  if ( v23 != 4 && v23 )
    ++v22;
  v24 = pkProto->TournamentList[18].baseclass_0.nResult;
  if ( v24 != 4 && v24 )
    ++v22;
  v25 = pkProto->TournamentList[19].baseclass_0.nResult;
  if ( v25 != 4 && v25 )
    ++v22;
  v26 = pkProto->TournamentList[20].baseclass_0.nResult;
  if ( v26 != 4 && v26 )
    ++v22;
  v27 = pkProto->TournamentList[21].baseclass_0.nResult;
  if ( v27 != 4 && v27 )
    ++v22;
  v28 = pkProto->TournamentList[22].baseclass_0.nResult;
  if ( v28 != 4 && v28 )
    ++v22;
  v29 = pkProto->TournamentList[23].baseclass_0.nResult;
  if ( v29 != 4 && v29 )
    ++v22;
  if ( v22 == 8 )
  {
    v44 = 339885954;
    goto LABEL_107;
  }
}

//----- (005E1CE0) --------------------------------------------------------
bool __thiscall GuildTournamentScheduleWin::SetGuildTournamentList(GuildTournamentScheduleWin *this, PROTO_NC_GUILD_TOURNAMENT_LIST_ACK *pkProto)
{
  D3DXCOLOR *v2; // ebx@0
  GuildTournamentScheduleWin *v3; // edi@1
  char *v4; // eax@2
  int v5; // ecx@2
  char *v6; // eax@5
  signed int v7; // esi@5
  int v8; // ebx@5
  char *v9; // eax@7
  char v10; // cl@8
  int v11; // edx@10
  int v12; // ecx@10
  int v13; // edx@10
  PgWinText *v14; // ecx@10
  int v15; // edx@12
  int v16; // ecx@12
  int v17; // edx@12
  PgWinText *v18; // ecx@12
  int v19; // edx@14
  int v20; // ecx@14
  int v21; // edx@14
  PgWinText *v22; // ecx@14
  char *v23; // eax@16
  char v24; // al@17
  unsigned int v25; // eax@18
  char *v26; // eax@19
  char *v27; // eax@21
  char *v28; // eax@23
  char *v29; // eax@25
  char *v30; // eax@27
  char v31; // cl@31
  int v32; // edx@32
  int v33; // ecx@32
  int v34; // edx@32
  PgWinText *v35; // ecx@32
  PgWinText *v36; // ecx@33
  int v37; // edx@35
  int v38; // ecx@35
  int v39; // edx@35
  PgWinText *v40; // ecx@35
  int v41; // edx@37
  int v42; // ecx@37
  int v43; // edx@37
  PgWinText *v44; // ecx@37
  int v45; // edx@39
  int v46; // ecx@39
  int v47; // edx@39
  PgWinText *v48; // ecx@39
  D3DXCOLOR *v50; // [sp-4h] [bp-CCh]@5
  int v51; // [sp+Ch] [bp-BCh]@5
  char acNextJoinTime[64]; // [sp+10h] [bp-B8h]@2
  char acJoinTime[64]; // [sp+50h] [bp-78h]@2
  char acGuildName[17]; // [sp+90h] [bp-38h]@8
  char acDateTime[32]; // [sp+A4h] [bp-24h]@19
  unsigned int v56; // [sp+C4h] [bp-4h]@1
  int v57; // [sp+C8h] [bp+0h]@1

  v56 = (unsigned int)&v57 ^ __security_cookie;
  v3 = this;
  if ( pkProto )
  {
    memset(acJoinTime, 0, 0x40u);
    memset(acNextJoinTime, 0, 0x40u);
    v4 = TextData2::Get(0x504D8F7Cu);
    strftime(acJoinTime, 0x40u, v4, &pkProto->tm_Time_Start);
    ((void (__stdcall *)(_DWORD))v3->m_pGTJoinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acJoinTime);
    v5 = pkProto->tm_Time_Match_End.tm_min + 2;
    if ( v5 == 60 )
    {
      ++pkProto->tm_Time_Match_End.tm_hour;
      pkProto->tm_Time_Match_End.tm_min = 0;
    }
    else
    {
      pkProto->tm_Time_Match_End.tm_min = v5;
    }
    v50 = v2;
    v6 = TextData2::Get(0x4BA58B78u);
    strftime(acNextJoinTime, 0x40u, v6, &pkProto->tm_Time_Match_End);
    ((void (__stdcall *)(_DWORD))v3->m_pGTNextJoinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acNextJoinTime);
    GuildTournamentScheduleWin::CheckMatchType(v3, pkProto);
    v3->m_tJoinTime = pkProto->Time_Start;
    v7 = 0;
    v8 = (int)&v3->m_uiScheduleTable[0].RightChild;
    v51 = (int)&v3->m_uiScheduleTable[0].LeftChild;
    while ( 1 )
    {
      if ( v7 >= 16 )
      {
        v23 = (char *)pkProto + 21 * v7;
        if ( *((_DWORD *)v23 + 91) )
        {
          v31 = v23[363];
          if ( !v31 )
          {
            v32 = *((_DWORD *)v23 + 93);
            *(_DWORD *)acGuildName = *((_DWORD *)v23 + 92);
            v33 = *((_DWORD *)v23 + 94);
            *(_DWORD *)&acGuildName[4] = v32;
            v34 = *((_DWORD *)v23 + 95);
            *(_DWORD *)&acGuildName[8] = v33;
            v35 = v3->m_pMatchList[v7];
            *(_DWORD *)&acGuildName[12] = v34;
            acGuildName[16] = 0;
            ((void (__stdcall *)(_DWORD, D3DXCOLOR *))v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
              acGuildName,
              v50);
            if ( v7 != 31 )
              goto LABEL_40;
            v36 = v3->m_pGTMatchTypeText;
            v50 = &Color::m_kDxYellowColor;
            goto LABEL_42;
          }
          if ( v31 == 2 )
          {
            v37 = *((_DWORD *)v23 + 93);
            *(_DWORD *)acGuildName = *((_DWORD *)v23 + 92);
            v38 = *((_DWORD *)v23 + 94);
            *(_DWORD *)&acGuildName[4] = v37;
            v39 = *((_DWORD *)v23 + 95);
            *(_DWORD *)&acGuildName[8] = v38;
            v40 = v3->m_pMatchList[v7];
            *(_DWORD *)&acGuildName[12] = v39;
            acGuildName[16] = 0;
            ((void (__stdcall *)(_DWORD, D3DXCOLOR *))v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
              acGuildName,
              v50);
            v50 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
            goto LABEL_41;
          }
          if ( v31 == 1 )
          {
            v41 = *((_DWORD *)v23 + 93);
            *(_DWORD *)acGuildName = *((_DWORD *)v23 + 92);
            v42 = *((_DWORD *)v23 + 94);
            *(_DWORD *)&acGuildName[4] = v41;
            v43 = *((_DWORD *)v23 + 95);
            *(_DWORD *)&acGuildName[8] = v42;
            v44 = v3->m_pMatchList[v7];
            *(_DWORD *)&acGuildName[12] = v43;
            acGuildName[16] = 0;
            ((void (__stdcall *)(_DWORD, D3DXCOLOR *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
              acGuildName,
              v50);
            v50 = &Color::m_kDxYellowColor;
            goto LABEL_41;
          }
          if ( v31 == 4 )
          {
            v45 = *((_DWORD *)v23 + 93);
            *(_DWORD *)acGuildName = *((_DWORD *)v23 + 92);
            v46 = *((_DWORD *)v23 + 94);
            *(_DWORD *)&acGuildName[4] = v45;
            v47 = *((_DWORD *)v23 + 95);
            *(_DWORD *)&acGuildName[8] = v46;
            v48 = v3->m_pMatchList[v7];
            *(_DWORD *)&acGuildName[12] = v47;
            acGuildName[16] = 0;
            ((void (__stdcall *)(_DWORD, D3DXCOLOR *))v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
              acGuildName,
              v50);
LABEL_40:
            v50 = &Color::m_kDxWhiteColor;
LABEL_41:
            v36 = v3->m_pMatchList[v7];
LABEL_42:
            ((void (*)(void))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
            goto LABEL_43;
          }
        }
        else
        {
          v24 = pkProto->TournamentList[*(_DWORD *)v51].baseclass_0.nResult;
          if ( v24 && v24 != 4 && v24 != 2 )
            goto LABEL_44;
          v25 = *(_DWORD *)v8;
          if ( *(_DWORD *)v8 < 8u )
          {
            *(_DWORD *)acDateTime = 0;
            *(_DWORD *)&acDateTime[4] = 0;
            *(_DWORD *)&acDateTime[8] = 0;
            *(_DWORD *)&acDateTime[12] = 0;
            *(_DWORD *)&acDateTime[16] = 0;
            *(_DWORD *)&acDateTime[20] = 0;
            *(_DWORD *)&acDateTime[24] = 0;
            *(_DWORD *)&acDateTime[28] = 0;
            v26 = TextData2::Get(0xD8DB2709u);
            strftime(acDateTime, 0x1Fu, v26, &pkProto->tm_Time_Match_161);
            ((void (__stdcall *)(_DWORD))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDateTime);
LABEL_43:
            v51 += 12;
            v8 += 12;
            goto LABEL_44;
          }
          if ( v25 < 0x10 )
          {
            *(_DWORD *)acDateTime = 0;
            *(_DWORD *)&acDateTime[4] = 0;
            *(_DWORD *)&acDateTime[8] = 0;
            *(_DWORD *)&acDateTime[12] = 0;
            *(_DWORD *)&acDateTime[16] = 0;
            *(_DWORD *)&acDateTime[20] = 0;
            *(_DWORD *)&acDateTime[24] = 0;
            *(_DWORD *)&acDateTime[28] = 0;
            v27 = TextData2::Get(0xD8DB2709u);
            strftime(acDateTime, 0x1Fu, v27, &pkProto->tm_Time_Match_162);
            ((void (__stdcall *)(_DWORD))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDateTime);
            goto LABEL_43;
          }
          if ( v25 < 0x18 )
          {
            *(_DWORD *)acDateTime = 0;
            *(_DWORD *)&acDateTime[4] = 0;
            *(_DWORD *)&acDateTime[8] = 0;
            *(_DWORD *)&acDateTime[12] = 0;
            *(_DWORD *)&acDateTime[16] = 0;
            *(_DWORD *)&acDateTime[20] = 0;
            *(_DWORD *)&acDateTime[24] = 0;
            *(_DWORD *)&acDateTime[28] = 0;
            v28 = TextData2::Get(0xD8DB2709u);
            strftime(acDateTime, 0x1Fu, v28, &pkProto->tm_Time_Match_8);
            ((void (__stdcall *)(_DWORD))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDateTime);
            goto LABEL_43;
          }
          if ( v25 < 0x1C )
          {
            *(_DWORD *)acDateTime = 0;
            *(_DWORD *)&acDateTime[4] = 0;
            *(_DWORD *)&acDateTime[8] = 0;
            *(_DWORD *)&acDateTime[12] = 0;
            *(_DWORD *)&acDateTime[16] = 0;
            *(_DWORD *)&acDateTime[20] = 0;
            *(_DWORD *)&acDateTime[24] = 0;
            *(_DWORD *)&acDateTime[28] = 0;
            v29 = TextData2::Get(0xD8DB2709u);
            strftime(acDateTime, 0x1Fu, v29, &pkProto->tm_Time_Match_4);
            ((void (__stdcall *)(_DWORD))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDateTime);
            goto LABEL_43;
          }
          if ( v25 < 0x1E )
          {
            *(_DWORD *)acDateTime = 0;
            *(_DWORD *)&acDateTime[4] = 0;
            *(_DWORD *)&acDateTime[8] = 0;
            *(_DWORD *)&acDateTime[12] = 0;
            *(_DWORD *)&acDateTime[16] = 0;
            *(_DWORD *)&acDateTime[20] = 0;
            *(_DWORD *)&acDateTime[24] = 0;
            *(_DWORD *)&acDateTime[28] = 0;
            v30 = TextData2::Get(0xD8DB2709u);
            strftime(acDateTime, 0x1Fu, v30, &pkProto->tm_Time_Match_2);
            ((void (__stdcall *)(_DWORD))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDateTime);
            goto LABEL_43;
          }
        }
      }
      else
      {
        v9 = (char *)pkProto + 21 * v7;
        if ( !*((_DWORD *)v9 + 91) )
        {
          ((void (__stdcall *)(_UNKNOWN *))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA55F);
          goto LABEL_44;
        }
        v10 = v9[363];
        acGuildName[16] = 0;
        if ( !v10 )
          goto LABEL_14;
        if ( v10 == 2 )
        {
          v11 = *((_DWORD *)v9 + 93);
          *(_DWORD *)acGuildName = *((_DWORD *)v9 + 92);
          v12 = *((_DWORD *)v9 + 94);
          *(_DWORD *)&acGuildName[4] = v11;
          v13 = *((_DWORD *)v9 + 95);
          *(_DWORD *)&acGuildName[8] = v12;
          v14 = v3->m_pMatchList[v7];
          *(_DWORD *)&acGuildName[12] = v13;
          ((void (__stdcall *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acGuildName);
          ((void (__stdcall *)(_UNKNOWN *))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGrayColor);
        }
        else
        {
          if ( v10 != 1 )
          {
            v9[363] = 4;
LABEL_14:
            v19 = *((_DWORD *)v9 + 93);
            *(_DWORD *)acGuildName = *((_DWORD *)v9 + 92);
            v20 = *((_DWORD *)v9 + 94);
            *(_DWORD *)&acGuildName[4] = v19;
            v21 = *((_DWORD *)v9 + 95);
            *(_DWORD *)&acGuildName[8] = v20;
            v22 = v3->m_pMatchList[v7];
            *(_DWORD *)&acGuildName[12] = v21;
            ((void (__stdcall *)(_DWORD))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acGuildName);
            ((void (__stdcall *)(D3DXCOLOR *))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
            goto LABEL_44;
          }
          v15 = *((_DWORD *)v9 + 93);
          *(_DWORD *)acGuildName = *((_DWORD *)v9 + 92);
          v16 = *((_DWORD *)v9 + 94);
          *(_DWORD *)&acGuildName[4] = v15;
          v17 = *((_DWORD *)v9 + 95);
          *(_DWORD *)&acGuildName[8] = v16;
          v18 = v3->m_pMatchList[v7];
          *(_DWORD *)&acGuildName[12] = v17;
          ((void (__stdcall *)(_DWORD))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acGuildName);
          ((void (__stdcall *)(D3DXCOLOR *))v3->m_pMatchList[v7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
        }
      }
LABEL_44:
      ++v7;
      if ( v7 >= 31 )
        return 1;
    }
  }
  return 0;
}
// 5E1CE0: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (005E22F0) --------------------------------------------------------
void __thiscall GuildTournamentScheduleWin::SetGuildTournamentMatchType(GuildTournamentScheduleWin *this, PROTO_NC_GUILD_TOURNAMENT_LIST_ACK *pkProto)
{
  GuildTournamentScheduleWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  char *v5; // edi@3
  signed int v6; // ebx@3
  NiRefObjectVtbl *v7; // edi@5
  char *v8; // eax@5
  NiRefObjectVtbl *v9; // edi@6
  char *v10; // eax@6
  NiRefObjectVtbl *v11; // edi@7
  char *v12; // eax@7
  NiRefObjectVtbl *v13; // edi@8
  char *v14; // eax@8
  NiRefObjectVtbl *v15; // edi@9
  char *v16; // eax@9
  NiRefObjectVtbl *v17; // edi@10
  char *v18; // eax@10
  NiRefObjectVtbl *v19; // edi@11
  char *v20; // eax@11
  NiRefObjectVtbl *v21; // edi@12
  char *v22; // eax@12
  NiRefObjectVtbl *v23; // edi@13
  char *v24; // eax@13

  v2 = this;
  switch ( pkProto->nMatchType )
  {
    case 0:
      v3 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v4 = TextData::Get(0x75776984u);
      v3[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v4);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA566);
      return;
    case 1:
      v5 = (char *)this->m_pMatchList;
      v6 = 31;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 472))(&unk_9BA567);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 468))(&Color::m_kDxWhiteColor);
        v5 += 4;
        --v6;
      }
      while ( v6 );
      v7 = v2->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData::Get(0x645558BCu);
      v7[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v8);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA577);
      return;
    case 2:
      v9 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = TextData::Get(0x5BA6B3E3u);
      v9[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v10);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA581);
      return;
    case 3:
      v11 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v12 = TextData::Get(0x5BA6B3E3u);
      v11[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v12);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA582);
      return;
    case 4:
      v13 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v14 = TextData::Get(0xC0AEB512u);
      v13[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v14);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA583);
      return;
    case 5:
      v15 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v16 = TextData::Get(0xC0AEB513u);
      v15[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v16);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA593);
      return;
    case 6:
      v17 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v18 = TextData::Get(0x7E70B8D6u);
      v17[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v18);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA59B);
      return;
    case 7:
      v19 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v20 = TextData::Get(0x23785992u);
      v19[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v20);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5A3);
      return;
    case 8:
      v21 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v22 = TextData::Get(0xCDDD1E31u);
      v21[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v22);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5B1);
      return;
    case 9:
      v23 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = TextData::Get(0xEB181838u);
      break;
    case 0xA:
      v23 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = TextData::Get(0xCFDD0F27u);
      break;
    default:
      v23 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = fs("Type : %d");
      break;
  }
  v23[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v24);
}

//----- (005E2610) --------------------------------------------------------
void __thiscall GuildTournamentScheduleWin::SetGuildTournamentMatchType(GuildTournamentScheduleWin *this, unsigned int uiMsg)
{
  GuildTournamentScheduleWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  char *v5; // edi@3
  signed int v6; // ebx@3
  NiRefObjectVtbl *v7; // edi@5
  char *v8; // eax@5
  NiRefObjectVtbl *v9; // edi@6
  char *v10; // eax@6
  NiRefObjectVtbl *v11; // edi@7
  char *v12; // eax@7
  NiRefObjectVtbl *v13; // edi@8
  char *v14; // eax@8
  NiRefObjectVtbl *v15; // edi@9
  char *v16; // eax@9
  NiRefObjectVtbl *v17; // edi@10
  char *v18; // eax@10
  NiRefObjectVtbl *v19; // edi@11
  char *v20; // eax@11
  NiRefObjectVtbl *v21; // edi@12
  char *v22; // eax@12
  NiRefObjectVtbl *v23; // edi@13
  char *v24; // eax@13

  v2 = this;
  switch ( uiMsg )
  {
    case 0u:
      v3 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v4 = TextData::Get(0x75776984u);
      v3[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v4);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5B2);
      return;
    case 1u:
      v5 = (char *)this->m_pMatchList;
      v6 = 31;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 472))(&unk_9BA5B3);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 468))(&Color::m_kDxWhiteColor);
        v5 += 4;
        --v6;
      }
      while ( v6 );
      v7 = v2->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData::Get(0x645558BCu);
      v7[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v8);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5C3);
      return;
    case 2u:
      v9 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v10 = TextData::Get(0x5BA6B3E3u);
      v9[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v10);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5D2);
      return;
    case 3u:
      v11 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v12 = TextData::Get(0x5BA6B3E3u);
      v11[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v12);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5D3);
      return;
    case 4u:
      v13 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v14 = TextData::Get(0xC0AEB512u);
      v13[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v14);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5EE);
      return;
    case 5u:
      v15 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v16 = TextData::Get(0xC0AEB513u);
      v15[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v16);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5EF);
      return;
    case 6u:
      v17 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v18 = TextData::Get(0x7E70B8D6u);
      v17[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v18);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5FD);
      return;
    case 7u:
      v19 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v20 = TextData::Get(0x23785992u);
      v19[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v20);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5FE);
      return;
    case 8u:
      v21 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v22 = TextData::Get(0xCDDD1E31u);
      v21[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v22);
      ((void (__stdcall *)(_DWORD))v2->m_pGTJoinPossibleTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA5FF);
      return;
    case 9u:
      v23 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = TextData::Get(0xEB181838u);
      break;
    case 0xAu:
      v23 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = TextData::Get(0xCFDD0F27u);
      break;
    default:
      v23 = this->m_pGTMatchTypeText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = fs("Type : %d");
      break;
  }
  v23[118].__vecDelDtor((NiRefObject *)v2->m_pGTMatchTypeText, (unsigned int)v24);
}

//----- (005E2920) --------------------------------------------------------
GuildTournamentScheduleWin *__cdecl GuildTournamentScheduleWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildTournamentScheduleWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x330u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildTournamentScheduleWin::GuildTournamentScheduleWin((GuildTournamentScheduleWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildTournamentScheduleWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005E2A50) --------------------------------------------------------
void *__thiscall GuildTournamentScheduleWin::_scalar_deleting_destructor_(GuildTournamentScheduleWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentScheduleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentScheduleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BA6E0: using guessed type int (__stdcall *GuildTournamentScheduleWin___vftable_)(int uiFlags);
// 9BA6FC: using guessed type int (__thiscall *GuildTournamentScheduleWin___vftable_)(void *p, char);

//----- (005E2A90) --------------------------------------------------------
void __thiscall GTStorageInvWin::GTStorageInvWin(GTStorageInvWin *this)
{
  GTStorageInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStorageInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStorageInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}
// 9BAB10: using guessed type int (__stdcall *GTStorageInvWin___vftable_)(int uiFlags);
// 9BAB2C: using guessed type int (__thiscall *GTStorageInvWin___vftable_)(void *p, char);

//----- (005E2B00) --------------------------------------------------------
void __thiscall GTStorageInvWin::_GTStorageInvWin(GTStorageInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStorageInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStorageInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 9BAB10: using guessed type int (__stdcall *GTStorageInvWin___vftable_)(int uiFlags);
// 9BAB2C: using guessed type int (__thiscall *GTStorageInvWin___vftable_)(void *p, char);

//----- (005E2B20) --------------------------------------------------------
bool __thiscall GTStorageInvWin::Create(GTStorageInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  GTStorageInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (005E2B60) --------------------------------------------------------
void __thiscall GTStorageInvWin::OnFirstHitWin(GTStorageInvWin *this)
{
  GTStorageInvWin *v1; // esi@1
  ItemInfoWin *v2; // edi@2
  Item *v3; // eax@3

  v1 = this;
  if ( ItemIcon::GetItem(&this->baseclass_0) )
  {
    v2 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v2 )
    {
      v3 = ItemIcon::GetItem(&v1->baseclass_0);
      ItemInfoWin::SetItemInfo(v2, v3);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (005E2BC0) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::ResetContents(GuildTournamentStorageWin *this)
{
  ItemIcon **v1; // edi@1
  ItemIcon **v2; // esi@2
  signed int v3; // ebx@2
  unsigned int v4; // esi@4
  Item *v5; // eax@5

  v1 = (ItemIcon **)this->m_apkInvWin;
  if ( this->m_apkInvWin[0] )
  {
    v2 = (ItemIcon **)this->m_apkInvWin;
    v3 = 36;
    do
    {
      ItemIcon::SetItem(*v2, 0, 1);
      ++v2;
      --v3;
    }
    while ( v3 );
    v4 = 0;
    do
    {
      v5 = GuildTournamentStorage::Get(v4);
      ItemIcon::SetItem(*v1, v5, 1);
      ++v4;
      ++v1;
    }
    while ( v4 < 0x24 );
  }
}

//----- (005E2C20) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::GTTInvenItemRemoval(GuildTournamentStorageWin *this, unsigned int uiInvIndex)
{
  if ( !this->m_apkInvWin[uiInvIndex] )
    ItemIcon::SetItem(0, 0, 1);
}

//----- (005E2C40) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnDrawingMoneyWinOk(GuildTournamentStorageWin *this, __int64 i64Money)
{
  PROTO_NC_ITEM_GUILD_STORAGE_WITHDRAW_REQ kProto; // [sp+0h] [bp-8h]@1

  kProto.cen = i64Money;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x26u, &kProto, 8);
}

//----- (005E2C70) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::UpdateMeWin(GuildTournamentStorageWin *this, float fCurTime)
{
  GuildTournamentStorageWin *v2; // esi@1
  __int64 v3; // qax@1
  __int64 v4; // qax@1
  __int64 v5; // qax@1
  __int64 v6; // qax@1
  int dwValue; // [sp+4h] [bp-88h]@1
  char acStr[128]; // [sp+8h] [bp-84h]@1
  unsigned int v9; // [sp+88h] [bp-4h]@1
  int v10; // [sp+8Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = GuildTournamentStorage::GetMoney();
  User::GetGem(v3);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v4 = GuildTournamentStorage::GetMoney();
  User::GetGold(v4);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v5 = GuildTournamentStorage::GetMoney();
  User::GetSilver(v5);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v6 = GuildTournamentStorage::GetMoney();
  User::GetCopper(v6);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ChargedItemList::GetTotalEffectingValue(EE_MORESTORAGE, (unsigned int *)&dwValue);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E2D90) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnHelpLink(GuildTournamentStorageWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildTStore");
}

//----- (005E2DC0) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::GuildTournamentStorageWin(GuildTournamentStorageWin *this)
{
  GuildTournamentStorageWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentStorageWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentStorageWin::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_apkTabBtn = 0;
  v1->m_apkTabOnSpr = 0;
  v1->m_apkTabDisableSpr = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_apkInvWin[0] = 0;
  v1->m_apkInvWin[1] = 0;
  v1->m_apkInvWin[2] = 0;
  v1->m_apkInvWin[3] = 0;
  v1->m_apkInvWin[4] = 0;
  v1->m_apkInvWin[5] = 0;
  v1->m_apkInvWin[6] = 0;
  v1->m_apkInvWin[7] = 0;
  v1->m_apkInvWin[8] = 0;
  v1->m_apkInvWin[9] = 0;
  v1->m_apkInvWin[10] = 0;
  v1->m_apkInvWin[11] = 0;
  v1->m_apkInvWin[12] = 0;
  v1->m_apkInvWin[13] = 0;
  v1->m_apkInvWin[14] = 0;
  v1->m_apkInvWin[15] = 0;
  v1->m_apkInvWin[16] = 0;
  v1->m_apkInvWin[17] = 0;
  v1->m_apkInvWin[18] = 0;
  v1->m_apkInvWin[19] = 0;
  v1->m_apkInvWin[20] = 0;
  v1->m_apkInvWin[21] = 0;
  v1->m_apkInvWin[22] = 0;
  v1->m_apkInvWin[23] = 0;
  v1->m_apkInvWin[24] = 0;
  v1->m_apkInvWin[25] = 0;
  v1->m_apkInvWin[26] = 0;
  v1->m_apkInvWin[27] = 0;
  v1->m_apkInvWin[28] = 0;
  v1->m_apkInvWin[29] = 0;
  v1->m_apkInvWin[30] = 0;
  v1->m_apkInvWin[31] = 0;
  v1->m_apkInvWin[32] = 0;
  v1->m_apkInvWin[33] = 0;
  v1->m_apkInvWin[34] = 0;
  v1->m_apkInvWin[35] = 0;
  v1->m_pkCopperText = 0;
  v1->m_pkSilverText = 0;
  v1->m_pkGoldText = 0;
  v1->m_pkGemText = 0;
  v1->m_pkMoneyWin = 0;
  v1->m_bDivide = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9BAD9C: using guessed type int (__stdcall *GuildTournamentStorageWin___vftable_)(int uiFlags);
// 9BADBC: using guessed type int (__thiscall *GuildTournamentStorageWin___vftable_)(void *p, char);

//----- (005E2F30) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::_GuildTournamentStorageWin(GuildTournamentStorageWin *this)
{
  GuildTournamentStorageWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentStorageWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentStorageWin::_vftable_;
  v2 = (PgWin *)this->m_pkMoneyWin;
  if ( v2 )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v2);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9BAD9C: using guessed type int (__stdcall *GuildTournamentStorageWin___vftable_)(int uiFlags);
// 9BADBC: using guessed type int (__thiscall *GuildTournamentStorageWin___vftable_)(void *p, char);

//----- (005E2FC0) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnClose(GuildTournamentStorageWin *this)
{
  InventoryWin::ms_uiMode = 0;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0xA0u, 0, 0);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (005E2FE0) --------------------------------------------------------
void __thiscall GTStorageInvWin::DoAction(GTStorageInvWin *this)
{
  GTStorageInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (005E3010) --------------------------------------------------------
void __thiscall GTStorageInvWin::DoRAction(GTStorageInvWin *this)
{
  GTStorageInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (005E3040) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnInvShiftLClick(GuildTournamentStorageWin *this, unsigned int uiInvIndex)
{
  GuildTournamentStorageWin *v2; // edi@1
  Item *v3; // esi@1
  PgFrameWork *v4; // ebx@3
  char *v5; // ST0C_4@3
  int v6; // eax@3

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  if ( v3 )
  {
    v2->m_bDivide = 0;
    if ( (unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3) > 1 )
    {
      v2->m_bDivide = 1;
      GuildTournamentStorageWin::ms_kFrom.Inven = uiInvIndex & 0x3FF | 0x1000;
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v5 = TextData::Get(0xFBF1412Eu);
      v6 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      GameFrameWork::OnOpenDivideWin(
        (GameFrameWork *)v4,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x10u,
        v6 - 1,
        v5,
        3u);
    }
  }
}

//----- (005E30D0) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnInvRClick(GuildTournamentStorageWin *this, unsigned int uiInvIndex)
{
  Item *v2; // ebx@1
  void *v3; // eax@2
  int v4; // esi@2
  int v5; // edi@2
  int v6; // edx@2
  unsigned int v7; // eax@5
  char *v8; // eax@7
  ITEM_INVEN kTo; // [sp+4h] [bp-Ch]@8
  GameFrameWork *pkGame; // [sp+8h] [bp-8h]@2
  ITEM_INVEN kFrom; // [sp+Ch] [bp-4h]@8

  v2 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  if ( v2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v5 = v2->m_kStruct.itemid;
    v6 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    pkGame = (GameFrameWork *)v3;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v6 + 16))(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable, v5) )
    {
      if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) && *(_DWORD *)(*(_DWORD *)(v4 + 196) + 4 * v5) )
      {
        v7 = Inventory::GetInvIdxLotIsNotMax(&g_kInventory, v2);
        if ( v7 == -1 )
        {
          if ( pkGame )
          {
            v8 = TextData::Get(0x91A8CDCEu);
            GameFrameWork::AddSysMsg(pkGame, v8);
          }
        }
        else
        {
          kTo.Inven = v7 & 0x3FF | 0x2400;
          kFrom.Inven = uiInvIndex & 0x3FF | 0x1000;
          if ( (kTo.Inven & 0x3FF) != -1 && pkGame )
          {
            GameFrameWork::NcItemRelocReq(pkGame, &kFrom, &kTo);
            SoundMgr::PlayItemPutSound(&g_kSoundMgr, v2->m_kStruct.itemid);
          }
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (005E31E0) --------------------------------------------------------
bool __thiscall GuildTournamentStorageWin::DropOnInv(GuildTournamentStorageWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents::SenderType v3; // ebx@1
  GuildTournamentStorageWin *v4; // esi@1
  void *v5; // eax@2
  unsigned int v6; // edi@5
  PgFrameWork *v7; // eax@5
  unsigned int v8; // ebx@6
  Item *v9; // eax@8
  Item *v10; // esi@8
  void *v12; // edi@12
  ItemInfo *v13; // ebx@13
  PgFrameWork *v14; // edi@14
  char *v15; // eax@15
  PgFrameWork *v16; // eax@16
  int v17; // esi@19
  char *v18; // edi@19
  GameFrameWork *pkGame; // [sp+14h] [bp+8h]@5

  v3 = pkContents->m_eSenderType;
  v4 = this;
  if ( !pkContents->m_eType )
  {
    v5 = pkContents->m_apvParam[0];
    if ( v5 )
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, *((_WORD *)v5 + 4));
  }
  if ( v3 == 13 )
  {
    v6 = pkContents->m_uiSenderIndex;
    v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    pkGame = (GameFrameWork *)v7;
    if ( !v4->m_bDivide )
      return 1;
    v4->m_bDivide = 0;
    v8 = v7[20].m_kMsgQ.m_uiHead;
    if ( !v8 || *(_DWORD *)(v8 + 376) == 3 )
    {
      v9 = ItemIcon::GetItem(&v4->m_apkInvWin[v6]->baseclass_0);
      v10 = v9;
      if ( v9 && (unsigned int)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[3].__vecDelDtor)(v9) > 1 )
      {
        GuildTournamentStorageWin::ms_kTo.Inven = uiReceiverInvIndex & 0x3FF | 0x1000;
        GuildTournamentStorageWin::ms_kFrom.Inven = v6 & 0x3FF | 0x1000;
        GameFrameWork::NcItemSplitReq(
          pkGame,
          &GuildTournamentStorageWin::ms_kFrom,
          &GuildTournamentStorageWin::ms_kTo,
          *(_DWORD *)(v8 + 348));
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, v10->m_kStruct.itemid);
        return 1;
      }
      return 1;
    }
  }
  else
  {
    if ( v3 == 5 )
    {
      v12 = pkContents->m_apvParam[0];
      if ( v12 )
      {
        v13 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(*(_WORD *)((char *)v12 + 1));
        if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
        {
          v4->m_TargetItemID = *(_WORD *)((char *)v12 + 1);
          v14 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v14 )
          {
            v15 = TextData::Get(0x2C588E90u);
            GameFrameWork::OnOpenDivideWin(
              (GameFrameWork *)v14,
              &v4->baseclass_0.baseclass_0.baseclass_0,
              0x11u,
              v13->MaxLot,
              v15,
              3u);
            return 1;
          }
        }
        else
        {
          v16 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v16 )
            GameFrameWork::NcItemBuyReq((GameFrameWork *)v16, *(_WORD *)((char *)v12 + 1), v13->MaxLot);
        }
        return 1;
      }
    }
    else
    {
      v17 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v18 = TextData::Get(0xE2F1C6Eu);
      if ( *(_DWORD *)(v17 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v17 + 4) + 4))(25, v18, v17);
        if ( *(_DWORD *)(v17 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v17 + 4) + 20))(25, v18, v17);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v17 + 20))(v17, 25, v18, v17);
    }
  }
  return 0;
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (005E33E0) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnDrawing(GuildTournamentStorageWin *this)
{
  GuildTournamentStorageWin *v1; // esi@1
  MoneyWin *v2; // ecx@1
  char *v3; // eax@2
  char *v4; // eax@2

  v1 = this;
  v2 = this->m_pkMoneyWin;
  if ( v2 )
  {
    MoneyWin::Open(v2, &v1->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, &byte_9BA93B);
    v3 = TextData::Get(0x89B68F88u);
    MoneyWin::SetTitle1(v1->m_pkMoneyWin, v3);
    v4 = TextData::Get(0xD5F0EF45u);
    MoneyWin::SetTitle2(v1->m_pkMoneyWin, v4);
  }
}

//----- (005E3430) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::SetToken(GuildTournamentStorageWin *this, unsigned __int64 uiToken)
{
  GuildTournamentStorageWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@1
  char *v5; // eax@1

  v2 = this;
  v3 = this->m_pkToken->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = TextData2::Get(0x809BDFE9u);
  v5 = fs(v4);
  v3[118].__vecDelDtor((NiRefObject *)v2->m_pkToken, (unsigned int)v5);
}

//----- (005E3480) --------------------------------------------------------
bool __thiscall GTStorageInvWin::EatDropInstance(GTStorageInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  GTStorageInvWin *v4; // edi@1
  bool result; // al@2
  void *v6; // esi@3
  PgWin *v7; // eax@5

  v4 = this;
  if ( *pkDrop )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( v6 )
    {
      v7 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      result = GuildTournamentStorageWin::DropOnInv(
                 (GuildTournamentStorageWin *)v7,
                 (DropContents *)v6,
                 v4->m_uiInvIndex);
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005E34C0) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnInvLClick(GuildTournamentStorageWin *this, unsigned int uiInvIndex)
{
  GuildTournamentStorageWin *v2; // esi@1
  Item *v3; // edi@3

  v2 = this;
  this->m_bDivide = 0;
  if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
  {
    GuildTournamentStorageWin::OnInvShiftLClick(this, uiInvIndex);
  }
  else
  {
    v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
    if ( v3 )
    {
      v2->m_kDropContents.m_eType = 0;
      v2->m_kDropContents.m_eSenderType = 13;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_apvParam[0] = v3;
      v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      v2->m_kDrop.m_pkSender = (PgWin *)v2;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, v3->m_kStruct.itemid);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005E3560) --------------------------------------------------------
void __thiscall GuildTournamentStorageWin::OnCommand(GuildTournamentStorageWin *this, unsigned int wParam, int lParam)
{
  GuildTournamentStorageWin *v3; // esi@1
  Item *v4; // eax@7
  int v5; // ecx@8
  PgFrameWork *v6; // eax@10

  v3 = this;
  switch ( wParam )
  {
    case 0xAu:
      GuildTournamentStorageWin::OnInvLClick(this, lParam);
      break;
    case 0xBu:
      GuildTournamentStorageWin::OnInvRClick(this, lParam);
      break;
    case 0xEu:
      GuildTournamentStorageWin::OnDrawing(this);
      break;
    case 0xFu:
      GuildTournamentStorageWin::OnDrawingMoneyWinOk(this, *(_QWORD *)lParam);
      break;
    case 0x10u:
      if ( lParam )
      {
        v4 = ItemIcon::GetItem(&this->m_apkInvWin[GuildTournamentStorageWin::ms_kFrom.Inven & 0x3FF]->baseclass_0);
        if ( v4 )
        {
          v3->m_kDropContents.m_eSenderType = 13;
          v3->m_kDropContents.m_eType = 0;
          v5 = GuildTournamentStorageWin::ms_kFrom.Inven & 0x3FF;
          v3->m_kDropContents.m_apvParam[0] = v4;
          v3->m_kDropContents.m_uiSenderIndex = v5;
          v3->m_kDropContents.m_apvParam[1] = 0;
          ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
          v3->m_kDropContents.m_uiLot = lParam;
          v3->m_kDrop.m_pkSender = (PgWin *)v3;
          PgCursor::ms_pkDrop = (int)&v3->m_kDrop;
        }
      }
      break;
    default:
      return;
    case 0xCu:
      v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      GameFrameWork::OnCloseGTStorageWin((GameFrameWork *)v6);
      break;
    case 0x11u:
      if ( lParam )
        GameFrameWork::NcItemBuyReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_TargetItemID, lParam);
      break;
    case 0x12u:
      GuildTournamentStorageWin::OnHelpLink(this);
      break;
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (005E36B0) --------------------------------------------------------
GTStorageInvWin *__cdecl GTStorageInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  GTStorageInvWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1C4u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v4);
    LOBYTE(v9) = 1;
    *(_DWORD *)v5 = &GTStorageInvWin::_vftable_;
    *((_DWORD *)v5 + 58) = &GTStorageInvWin::_vftable_;
    *((_DWORD *)v5 + 112) = -1;
    ItemIcon::SetItem((ItemIcon *)v5, 0, 1);
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 616))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (GTStorageInvWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9BAB10: using guessed type int (__stdcall *GTStorageInvWin___vftable_)(int uiFlags);
// 9BAB2C: using guessed type int (__thiscall *GTStorageInvWin___vftable_)(void *p, char);

//----- (005E3810) --------------------------------------------------------
GuildTournamentStorageWin *__cdecl GuildTournamentStorageWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildTournamentStorageWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x270u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildTournamentStorageWin::GuildTournamentStorageWin((GuildTournamentStorageWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildTournamentStorageWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005E3940) --------------------------------------------------------
bool __thiscall GuildTournamentStorageWin::Create(GuildTournamentStorageWin *this, PgFrameWork *pkFrameWork)
{
  GuildTournamentStorageWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool result; // al@6
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  NiRefObjectVtbl *v11; // edx@11
  PgSprData *v12; // eax@13
  PgWinSpr *v13; // eax@13
  PgSprData *v14; // eax@13
  PgFont *v15; // eax@15
  PgWinText *v16; // eax@15
  NiRefObjectVtbl *v17; // edx@15
  char *v18; // eax@15
  PgSprData *v19; // eax@15
  PgSprData *v20; // eax@16
  ItemIcon *v21; // eax@16
  IconWin **v22; // ecx@16
  PgWinBut *v23; // eax@17
  char *v24; // eax@17
  PgSprData *v25; // eax@17
  PgWinSpr *v26; // eax@17
  PgWin *v27; // ST6C_4@17
  PgFont *v28; // ST68_4@17
  unsigned int v29; // ST64_4@17
  unsigned int v30; // eax@17
  PgWinText *v31; // eax@17
  NiRefObjectVtbl *v32; // edx@17
  char *v33; // eax@17
  PgSprData *v34; // eax@17
  void *v35; // ST6C_4@17
  PgFont *v36; // ST68_4@17
  unsigned int v37; // ST64_4@17
  unsigned int v38; // eax@17
  PgWinText *v39; // eax@17
  NiRefObjectVtbl *v40; // edx@17
  NiSourceTexture *v41; // ST74_4@17
  NiNode *v42; // edx@17
  PgSprData *v43; // eax@17
  void *v44; // ST6C_4@17
  PgFont *v45; // ST68_4@17
  unsigned int v46; // ST64_4@17
  unsigned int v47; // eax@17
  PgWinText *v48; // eax@17
  NiRefObjectVtbl *v49; // edx@17
  NiSourceTexture *v50; // ST74_4@17
  NiNode *v51; // edx@17
  PgSprData *v52; // eax@17
  void *v53; // ST6C_4@17
  PgFont *v54; // ST68_4@17
  unsigned int v55; // ST64_4@17
  unsigned int v56; // eax@17
  PgWinText *v57; // eax@17
  NiRefObjectVtbl *v58; // edx@17
  NiSourceTexture *v59; // ST74_4@17
  NiNode *v60; // edx@17
  PgSprData *v61; // eax@17
  void *v62; // ST6C_4@17
  PgFont *v63; // ST68_4@17
  unsigned int v64; // ST64_4@17
  unsigned int v65; // eax@17
  PgWinText *v66; // eax@17
  NiRefObjectVtbl *v67; // edx@17
  NiSourceTexture *v68; // ST74_4@17
  NiNode *v69; // edx@17
  NiNode *v70; // esi@18
  PgFont *v71; // eax@23
  PgWinText *v72; // eax@23
  NiRefObjectVtbl *v73; // edi@23
  char *v74; // eax@23
  char *v75; // eax@23
  NiNode *v76; // esi@24
  unsigned int v77; // [sp+78h] [bp-6Ch]@1
  unsigned int uiWidth; // [sp+8Ch] [bp-58h]@13
  unsigned int uiHeight; // [sp+90h] [bp-54h]@13
  unsigned int v80; // [sp+94h] [bp-50h]@16
  unsigned int i; // [sp+98h] [bp-4Ch]@7
  NiSourceTexture *pkTexture; // [sp+9Ch] [bp-48h]@1
  int uiTop; // [sp+A0h] [bp-44h]@10
  int uiLeft; // [sp+A4h] [bp-40h]@10
  NiPointer<NiNode> spNode; // [sp+A8h] [bp-3Ch]@1
  PgSprData *pkTextWin; // [sp+ACh] [bp-38h]@11
  char acShapeName[33]; // [sp+B0h] [bp-34h]@16
  unsigned int v88; // [sp+D4h] [bp-10h]@1
  int v89; // [sp+E0h] [bp-4h]@1
  int v90; // [sp+E4h] [bp+0h]@1

  v88 = (unsigned int)&v90 ^ __security_cookie;
  v77 = (unsigned int)&v90 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v89 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
    goto LABEL_30;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildTStore.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, (NiTexturePalette *)i);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "GuildTournamentStorageWin", 0) )
  {
LABEL_30:
    v4 = spNode.m_pObject;
    v89 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
  v10 = MenuTexMgr::GetTexture(0x18u);
  v11 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  i = (unsigned int)v10;
  if ( ((int (__stdcall *)(_DWORD, unsigned int))v11[18].__vecDelDtor)("HelpLinkNor", v77) )
  {
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)i);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x12u, 0, 0);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v15 = Font::Get(0);
    v16 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 2,
            uiWidth,
            uiHeight,
            v15,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v16;
    ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v17[122].__vecDelDtor)(v16, 5, 0);
    ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v18 = TextData::Get(0x378CA581u);
    (*(void (__thiscall **)(PgSprData *, char *))i)(pkTextWin, v18);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    i = 0;
    pkTextWin = (PgSprData *)v2->m_apkInvWin;
    do
    {
      v80 = i + 1;
      sprintf(acShapeName, "IconSlot%03d");
      v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v21 = (ItemIcon *)GTStorageInvWin::CreateWin(
                          uiLeft - v8 + 1,
                          uiTop - v9 + 1,
                          i,
                          &v2->baseclass_0.baseclass_0.baseclass_0);
      pkTextWin->baseclass_0.vfptr = (NiRefObjectVtbl *)v21;
      ItemIcon::SetItem(v21, 0, 1);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 129))(10);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 140))(11);
      v22 = (IconWin **)pkTextWin;
      pkTextWin->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkItemInfoWin;
      IconWin::ShowFocus(*v22, 1);
      pkTextWin = (PgSprData *)((char *)pkTextWin + 4);
      i = v80;
    }
    while ( (signed int)v80 < 36 );
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab01_Dis");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "Tab01_On");
    v23 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
    v2->m_apkTabBtn = v23;
    v23->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v24 = TextData::Get(0x89C2B5DBu);
    PgWin::SetToolTipWinText(&v2->m_apkTabBtn->baseclass_0.baseclass_0, v24);
    v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num01", &uiLeft, &uiTop, 0);
    v26 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinSpr *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v26);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DrawNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "DrawClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "DrawOver");
    v27 = (PgWin *)PgWinBut::CreateWin(
                     uiLeft - v8 + 60,
                     uiTop - v9,
                     pkTextWin,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0xEu,
                     0,
                     0);
    i = (unsigned int)v27;
    v28 = Font::Get(0);
    v29 = (*(int (**)(void))(*(_DWORD *)i + 148))();
    v30 = (*(int (**)(void))(*(_DWORD *)i + 144))();
    v31 = PgWinText::CreateWin(0, 1, v30, v29, v28, v27, 0, 0);
    v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v31;
    v32[122].__vecDelDtor((NiRefObject *)v31, 5u);
    v80 = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v33 = TextData::Get(0x89B68F88u);
    (*(void (__thiscall **)(PgSprData *, char *))v80)(pkTextWin, v33);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GemInput", &uiLeft, &uiTop, pkTexture);
    v35 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v35;
    v36 = Font::Get(0);
    v37 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v38 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v39 = PgWinText::CreateWin(0, 1, v38, v37, v36, (PgWin *)v35, 0, 0);
    v40 = v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v39;
    v40[122].__vecDelDtor((NiRefObject *)v39, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA931);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v41 = pkTexture;
    v42 = spNode.m_pObject;
    v2->m_pkGemText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v42->baseclass_0, "GemBtn", &uiLeft, &uiTop, v41);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GemBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GemBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GoldInput", &uiLeft, &uiTop, pkTexture);
    v44 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v43, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v44;
    v45 = Font::Get(0);
    v46 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v47 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v48 = PgWinText::CreateWin(0, 1, v47, v46, v45, (PgWin *)v44, 0, 0);
    v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v48;
    v49[122].__vecDelDtor((NiRefObject *)v48, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA932);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v50 = pkTexture;
    v51 = spNode.m_pObject;
    v2->m_pkGoldText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v51->baseclass_0, "GoldBtn", &uiLeft, &uiTop, v50);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GoldBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GoldBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SilverInput", &uiLeft, &uiTop, pkTexture);
    v53 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v52, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v53;
    v54 = Font::Get(0);
    v55 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v56 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v57 = PgWinText::CreateWin(0, 1, v56, v55, v54, (PgWin *)v53, 0, 0);
    v58 = v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v57;
    v58[122].__vecDelDtor((NiRefObject *)v57, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA933);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v59 = pkTexture;
    v60 = spNode.m_pObject;
    v2->m_pkSilverText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v60->baseclass_0, "SilverBtn", &uiLeft, &uiTop, v59);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "SilverBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "SilverBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v61 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CopperInput", &uiLeft, &uiTop, pkTexture);
    v62 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v61, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v62;
    v63 = Font::Get(0);
    v64 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v65 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v66 = PgWinText::CreateWin(0, 1, v65, v64, v63, (PgWin *)v62, 0, 0);
    v67 = v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v66;
    v67[122].__vecDelDtor((NiRefObject *)v66, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BA93A);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v68 = pkTexture;
    v69 = spNode.m_pObject;
    v2->m_pkCopperText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v69->baseclass_0, "CopperBtn", &uiLeft, &uiTop, v68);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CopperBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CopperBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v71 = Font::Get(0);
      v72 = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop - v9 + 2,
              uiWidth,
              uiHeight,
              v71,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkToken = v72;
      v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v72,
        5u);
      ((void (__stdcall *)(__int64 *))v2->m_pkToken->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
      v73 = v2->m_pkToken->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v74 = TextData2::Get(0x809BDFE9u);
      v75 = fs(v74);
      v73[118].__vecDelDtor((NiRefObject *)v2->m_pkToken, (unsigned int)v75);
      ((void (__stdcall *)(_DWORD))v2->m_pkToken->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__thiscall *)(GuildTournamentStorageWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.2,
        0.5);
      v2->m_pkMoneyWin = MoneyWin::CreateWin(pkFrameWork);
      v89 = -1;
      if ( spNode.m_pObject )
      {
        v76 = spNode.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v76 )
            v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v76, 1u);
        }
      }
      result = 1;
    }
    else
    {
      v70 = spNode.m_pObject;
      v89 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v70 )
        v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v70, 1u);
      result = 0;
    }
  }
  else
  {
    v89 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005E44A0) --------------------------------------------------------
void *__thiscall GTStorageInvWin::_scalar_deleting_destructor_(GTStorageInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GTStorageInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GTStorageInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BAB10: using guessed type int (__stdcall *GTStorageInvWin___vftable_)(int uiFlags);
// 9BAB2C: using guessed type int (__thiscall *GTStorageInvWin___vftable_)(void *p, char);

//----- (005E44E0) --------------------------------------------------------
void *__thiscall GuildTournamentStorageWin::_vector_deleting_destructor_(GuildTournamentStorageWin *this, unsigned int a2)
{
  GuildTournamentStorageWin *v2; // esi@1
  PgWin *v3; // eax@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTournamentStorageWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildTournamentStorageWin::_vftable_;
  v3 = (PgWin *)this->m_pkMoneyWin;
  if ( v3 )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v3);
  v2->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v2->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9BAD9C: using guessed type int (__stdcall *GuildTournamentStorageWin___vftable_)(int uiFlags);
// 9BADBC: using guessed type int (__thiscall *GuildTournamentStorageWin___vftable_)(void *p, char);

//----- (005E4580) --------------------------------------------------------
ChatBoard::Type __thiscall ChatBoard::ParseUserChat(ChatBoard *this, char **pcText)
{
  return 1;
}

//----- (005E4590) --------------------------------------------------------
bool __thiscall ChatBoard::ViewLineUp(ChatBoard *this)
{
  int v1; // eax@1
  bool result; // al@2
  int v3; // eax@3

  v1 = this->m_iViewIndex;
  if ( v1 == this->m_iBottomIndex )
  {
    result = 0;
  }
  else
  {
    v3 = v1 - 1;
    this->m_iViewIndex = v3;
    if ( v3 < 0 )
      this->m_iViewIndex = 49;
    result = 1;
  }
  return result;
}

//----- (005E45C0) --------------------------------------------------------
bool __thiscall ChatBoard::ViewLineDown(ChatBoard *this)
{
  bool result; // al@2
  int v2; // esi@3

  if ( this->m_uiTotal > 8 )
  {
    v2 = this->m_iViewIndex;
    if ( (v2 + 8) % 50 != this->m_iTopIndex )
    {
      this->m_iViewIndex = v2 + 1;
      if ( v2 + 1 >= 50 )
        this->m_iViewIndex = 0;
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005E4610) --------------------------------------------------------
bool __thiscall ChatBoard::ViewLineMostDown(ChatBoard *this)
{
  bool result; // al@2
  int v2; // eax@3
  bool v3; // sf@3
  int v4; // eax@3

  if ( this->m_uiTotal > 8 )
  {
    v2 = this->m_iTopIndex;
    v3 = v2 - 8 < 0;
    v4 = v2 - 8;
    this->m_iViewIndex = v4;
    if ( v3 )
      this->m_iViewIndex = v4 + 50;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005E4640) --------------------------------------------------------
void __thiscall ChatBoard::SetText(ChatBoard *this, ChatBoard::Type eType, char *pcText, unsigned int uiTextLen)
{
  ChatBoard *v4; // esi@1
  int v5; // eax@1
  bool v6; // zf@5
  int v7; // ecx@12

  v4 = this;
  this->m_aeType[this->m_iTopIndex] = eType;
  v5 = this->m_iTopIndex;
  if ( this->m_auiTextAlloc[v5] < uiTextLen )
  {
    operator delete(this->m_apcText[v5]);
    v4->m_apcText[v4->m_iTopIndex] = (char *)operator new__(uiTextLen + 1);
    v4->m_auiTextAlloc[v4->m_iTopIndex] = uiTextLen;
  }
  strncpy(v4->m_apcText[v4->m_iTopIndex], pcText, uiTextLen);
  v4->m_apcText[v4->m_iTopIndex++][uiTextLen] = 0;
  if ( v4->m_iTopIndex >= 50 )
    v4->m_iTopIndex = 0;
  ++v4->m_uiTotal;
  v6 = v4->m_uiTotal == 50;
  if ( v4->m_uiTotal > 0x32 )
  {
    v4->m_uiTotal = 50;
    v6 = 1;
  }
  if ( v6 )
  {
    ++v4->m_iViewIndex;
    if ( v4->m_iViewIndex >= 50 )
      v4->m_iViewIndex = 0;
    ++v4->m_iBottomIndex;
    if ( v4->m_iBottomIndex >= 50 )
      v4->m_iBottomIndex = 0;
  }
  else
  {
    v7 = v4->m_iViewIndex;
    if ( (v7 + 9) % 50 == v4->m_iTopIndex )
    {
      v4->m_iViewIndex = v7 + 1;
      if ( v7 + 1 >= 50 )
        v4->m_iViewIndex = 0;
    }
  }
}

//----- (005E4770) --------------------------------------------------------
void __thiscall ChatBoard::UpdateMeWin(ChatBoard *this, float fCurTime)
{
  ChatBoard *v2; // ebx@1
  int v3; // edi@1
  char *v4; // esi@1
  signed int v5; // eax@4
  D3DXCOLOR *v6; // [sp-4h] [bp-14h]@7
  signed int v7; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = this->m_iViewIndex;
  v4 = (char *)this->m_aspTextGeom;
  v7 = 8;
  do
  {
    if ( !v2->m_apcText[v3] || !*(_DWORD *)v4 )
      goto LABEL_20;
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 148))(v2->m_apcText[v3]);
    v5 = v2->m_aeType[v3];
    if ( v5 > 16 )
    {
      if ( v5 > 128 )
      {
        if ( v5 != 4096 )
          goto LABEL_20;
      }
      else
      {
        if ( v5 == 128 )
        {
          v6 = &Color::m_kDxYellowColor;
          goto LABEL_19;
        }
        if ( v5 != 32 )
        {
          if ( v5 != 64 )
            goto LABEL_20;
LABEL_15:
          v6 = (D3DXCOLOR *)&Color::m_kDxBlueColor;
LABEL_19:
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 176))(v6);
          goto LABEL_20;
        }
      }
      v6 = &Color::m_kDxGreenColor;
      goto LABEL_19;
    }
    if ( v5 == 16 )
      goto LABEL_15;
    switch ( v5 )
    {
      case 1:
        v6 = &Color::m_kDxWhiteColor;
        goto LABEL_19;
      case 2:
        v6 = &Color::m_kDxRedColor;
        goto LABEL_19;
      case 4:
        v6 = (D3DXCOLOR *)&Color::m_kDxOrangeColor;
        goto LABEL_19;
      case 8:
        v6 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
        goto LABEL_19;
      default:
        break;
    }
LABEL_20:
    ++v3;
    if ( (unsigned int)v3 >= 0x32 )
      v3 = 0;
    v4 += 4;
    --v7;
  }
  while ( v7 );
}
// A745F0: using guessed type int Color__m_kDxBlueColor;

//----- (005E4860) --------------------------------------------------------
void __thiscall ChatBoard::_ChatBoard(ChatBoard *this)
{
  ChatBoard *v1; // ebx@1
  void **v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatBoard::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatBoard::_vftable_;
  v2 = (void **)this->m_apcText;
  v3 = 50;
  do
  {
    operator delete__(*v2);
    ++v2;
    --v3;
  }
  while ( v3 );
  _eh_vector_destructor_iterator_(
    v1->m_aspTextGeom,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWin::_PgWin(&v1->baseclass_0);
}
// 9BAFE4: using guessed type int (__stdcall *ChatBoard___vftable_)(int uiFlags);
// 9BB004: using guessed type int (__thiscall *ChatBoard___vftable_)(void *p, char);

//----- (005E4900) --------------------------------------------------------
void __thiscall ChatBoard::Add(ChatBoard *this, ChatBoard::Type eType, char *pcText)
{
  char *v3; // esi@1
  ChatBoard *v4; // edi@1
  unsigned int v5; // eax@3
  unsigned int v6; // ebx@3

  v3 = pcText;
  v4 = this;
  if ( pcText && *pcText )
  {
    do
    {
      v5 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4);
      v6 = PgFont::GetTextLenInWidth(v4->m_pkFont, v3, v5);
      ChatBoard::SetText(v4, eType, v3, v6);
      v3 += v6;
    }
    while ( *v3 );
  }
}

//----- (005E4950) --------------------------------------------------------
void __thiscall ChatBoard::CreateTextGeometry(ChatBoard *this)
{
  NiAVObject *v1; // edi@1
  int v2; // ebx@1
  float v3; // eax@3
  int v4; // esi@4
  void *v5; // eax@6
  int v6; // eax@7
  int v7; // ebx@9
  int v8; // eax@17
  float v9; // ST20_4@17
  int v10; // edx@17
  int v11; // eax@17
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // edx@17
  tagSIZE kSize; // [sp+8h] [bp-20h]@4
  int v14; // [sp+10h] [bp-18h]@4
  int iLineYPos; // [sp+14h] [bp-14h]@4
  void *v16; // [sp+18h] [bp-10h]@6
  int v17; // [sp+24h] [bp-4h]@6

  v1 = (NiAVObject *)this;
  v2 = 0;
  if ( !this->m_pkFont )
    this->m_pkFont = Font::Get(0);
  v3 = v1[1].m_kWorld.m_Rotate.m_pEntry[0][2];
  if ( LODWORD(v3) )
  {
    SelectObject(*(HDC *)(LODWORD(v3) + 192), *(HGDIOBJ *)(LODWORD(v3) + 184));
    PgFont::GetTextSize(LODWORD(v1[1].m_kWorld.m_Rotate.m_pEntry[0][2]), "W", 1, &kSize);
    iLineYPos = 0;
    v4 = (int)&v1[5].m_pkParent;
    v14 = 8;
    while ( 1 )
    {
      v5 = operator new(0x14Cu);
      v16 = v5;
      v17 = v2;
      if ( v5 == (void *)v2 )
      {
        v16 = (void *)v2;
        v6 = v2;
      }
      else
      {
        PgTextGeometry::PgTextGeometry((PgTextGeometry *)v5, LODWORD(v1[1].m_kWorld.m_Rotate.m_pEntry[0][2]));
        v16 = (void *)v6;
      }
      v7 = *(_DWORD *)v4;
      v17 = -1;
      if ( v7 != v6 )
      {
        if ( v7 )
        {
          if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
          v6 = (int)v16;
        }
        *(_DWORD *)v4 = v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)(v6 + 4));
      }
      v8 = *(_DWORD *)v4;
      v9 = (double)iLineYPos;
      v10 = *(_DWORD *)(*(_DWORD *)v4 + 96);
      *(_DWORD *)(*(_DWORD *)v4 + 88) = *(_DWORD *)(*(_DWORD *)v4 + 88);
      *(_DWORD *)(v8 + 92) = LODWORD(v9);
      *(_DWORD *)(v8 + 96) = v10;
      v11 = *(_DWORD *)v4;
      v12 = v1->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
      iLineYPos += kSize.cy + 2;
      ((void (__thiscall *)(NiAVObject *, int, _DWORD))v12)(v1, v11, 0);
      v4 += 4;
      --v14;
      if ( !v14 )
        break;
      v2 = 0;
    }
    NiAVObject::UpdateProperties(v1);
  }
}

//----- (005E4AC0) --------------------------------------------------------
void __thiscall ChatBoard::ChatBoard(ChatBoard *this)
{
  ChatBoard *v1; // esi@1
  int v2; // eax@1
  signed int v3; // ecx@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatBoard::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatBoard::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_aspTextGeom,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_pkFont = 0;
  v1->m_uiTotal = 0;
  v1->m_iTopIndex = 0;
  v1->m_iBottomIndex = 0;
  v1->m_iViewIndex = 0;
  v2 = (int)v1->m_apcText;
  v3 = 50;
  do
  {
    *(_DWORD *)(v2 - 200) = 0;
    *(_DWORD *)v2 = 0;
    v2 += 4;
    --v3;
  }
  while ( v3 );
}
// 9BAFE4: using guessed type int (__stdcall *ChatBoard___vftable_)(int uiFlags);
// 9BB004: using guessed type int (__thiscall *ChatBoard___vftable_)(void *p, char);

//----- (005E4B80) --------------------------------------------------------
void __thiscall ChatBoard::AddUserChat(ChatBoard *this, char *pcText)
{
  char *v2; // eax@1
  char v3; // dl@2
  char cTmp[512]; // [sp+4h] [bp-204h]@2
  unsigned int v5; // [sp+204h] [bp-4h]@1
  int v6; // [sp+208h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = pcText;
  do
  {
    v3 = *v2;
    v2[cTmp - pcText] = *v2;
    ++v2;
  }
  while ( v3 );
  ChatBoard::Add(this, ITEM, cTmp);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E4BD0) --------------------------------------------------------
bool __thiscall ChatBoard::Create(ChatBoard *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent)
{
  ChatBoard *v6; // esi@1
  bool result; // al@1

  v6 = this;
  result = PgWin::Create(&this->baseclass_0, iXPos, iYPos, uiWidth, uiHeight, pkParent, 0, 0);
  if ( result )
  {
    ChatBoard::CreateTextGeometry(v6);
    result = 1;
  }
  return result;
}

//----- (005E4C10) --------------------------------------------------------
ChatBoard *__cdecl ChatBoard::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent)
{
  void *v5; // eax@1
  int v6; // eax@2
  int v7; // esi@2
  PgWin *v8; // edi@8
  ChatBoard *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x3B0u);
  result.m_pObject = (PgWin *)v5;
  v11 = 0;
  if ( v5 )
  {
    ChatBoard::ChatBoard((ChatBoard *)v5);
    v7 = v6;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, unsigned int, PgWin *))(*(_DWORD *)v7 + 452))(
                          v7,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = (ChatBoard *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}

//----- (005E4D50) --------------------------------------------------------
unsigned int __thiscall PgFont::GetTextLenInWidth(PgFont *this, char *pcText, unsigned int uiWidth)
{
  char *v3; // ebx@1
  unsigned int v4; // esi@1
  char v5; // dl@2
  signed int v6; // edi@5
  BYTE *v7; // esi@7
  unsigned int v8; // eax@15
  int v9; // eax@16
  unsigned int v10; // ecx@16
  tagSIZE kSize; // [sp+8h] [bp-18h]@5
  unsigned int uiTextLen; // [sp+10h] [bp-10h]@3
  unsigned int uiTextCx; // [sp+14h] [bp-Ch]@3
  unsigned int iStrLen; // [sp+18h] [bp-8h]@3
  CSpFont *thisa; // [sp+1Ch] [bp-4h]@1
  int pcTexta; // [sp+28h] [bp+8h]@7

  v3 = pcText;
  v4 = 0;
  thisa = (CSpFont *)this;
  if ( !pcText || (v5 = *pcText) == 0 )
    return 0;
  uiTextLen = 0;
  uiTextCx = 0;
  iStrLen = strlen(pcText);
  while ( IsDBCSLeadByte(v5) )
  {
    v6 = 2;
    if ( !CSpFont::GetTextSize(thisa, v3, 2, &kSize, 0, 0, 0, 0) )
    {
      GetTextExtentPoint32A(thisa->m_kFontRenderStuff.hDC, v3, 2, &kSize);
      if ( thisa->m_dwOutlineOffset )
      {
        pcTexta = 0;
        v7 = v3;
        while ( *v7 )
        {
          if ( v6 <= 0 )
            break;
          if ( *v7 == 32 )
          {
            --v6;
            ++v7;
          }
          else
          {
            ++pcTexta;
            if ( IsDBCSLeadByte(*v7) )
            {
              v7 += 2;
              v6 -= 2;
            }
            else
            {
              ++v7;
              --v6;
            }
          }
        }
        v8 = thisa->m_dwOutlineOffset;
        v4 = uiTextLen;
        kSize.cy += 2 * v8;
        kSize.cx += 2 * pcTexta * v8;
      }
    }
    v9 = kSize.cx + uiTextCx;
    v10 = uiWidth;
    iStrLen -= 2;
    v4 += 2;
    v3 += 2;
    uiTextLen = v4;
    if ( kSize.cx + uiTextCx > uiWidth )
    {
      v4 -= 2;
      goto LABEL_24;
    }
LABEL_19:
    if ( v9 <= v10 )
    {
      v5 = *v3;
      uiTextCx = v9;
      if ( v5 )
      {
        if ( (signed int)iStrLen > 0 )
          continue;
      }
    }
    goto LABEL_24;
  }
  PgFont::GetTextSize((PgFont *)thisa, v3, 1, &kSize);
  v9 = uiTextCx + kSize.cx;
  v10 = uiWidth;
  --iStrLen;
  ++v4;
  ++v3;
  uiTextLen = v4;
  if ( uiTextCx + kSize.cx <= uiWidth )
    goto LABEL_19;
  --v4;
LABEL_24:
  if ( uiTextCx > v10 )
    --v4;
  return v4;
}

//----- (005E4EC0) --------------------------------------------------------
void *__thiscall ChatBoard::_scalar_deleting_destructor_(ChatBoard *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ChatBoard::_ChatBoard(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005E4EF0) --------------------------------------------------------
void __thiscall ChatBoardFlex::ClearViewedLineInfo(ChatBoardFlex *this)
{
  this->m_ViewedIndex[0] = -1;
  this->m_ViewedIndex[1] = -1;
  this->m_ViewedIndex[2] = -1;
  this->m_ViewedIndex[3] = -1;
  this->m_ViewedIndex[4] = -1;
  this->m_ViewedIndex[5] = -1;
  this->m_ViewedIndex[6] = -1;
  this->m_ViewedIndex[7] = -1;
  this->m_ViewedIndex[8] = -1;
  this->m_ViewedIndex[9] = -1;
  this->m_ViewedIndex[10] = -1;
  this->m_ViewedIndex[11] = -1;
  this->m_ViewedIndex[12] = -1;
  this->m_ViewedIndex[13] = -1;
  this->m_ViewedIndex[14] = -1;
  this->m_ViewedIndex[15] = -1;
  this->m_ViewedIndex[16] = -1;
  this->m_ViewedIndex[17] = -1;
  this->m_ViewedIndex[18] = -1;
  this->m_ViewedIndex[19] = -1;
  this->m_ViewedIndex[20] = -1;
  this->m_ViewedIndex[21] = -1;
  this->m_ViewedIndex[22] = -1;
  this->m_ViewedIndex[23] = -1;
  this->m_ViewedIndex[24] = -1;
  this->m_ViewedIndex[25] = -1;
  this->m_ViewedIndex[26] = -1;
  this->m_ViewedIndex[27] = -1;
  this->m_ViewedIndex[28] = -1;
  this->m_ViewedIndex[29] = -1;
  this->m_ViewedIndex[30] = -1;
  this->m_ViewedIndex[31] = -1;
  this->m_ViewedIndex[32] = -1;
  this->m_ViewedIndex[33] = -1;
  this->m_ViewedIndex[34] = -1;
  this->m_ViewedIndex[35] = -1;
  this->m_ViewedIndex[36] = -1;
  this->m_ViewedIndex[37] = -1;
  this->m_ViewedIndex[38] = -1;
  this->m_ViewedIndex[39] = -1;
}

//----- (005E4FF0) --------------------------------------------------------
void __thiscall ChatBoardFlex::DecViewIndex(ChatBoardFlex *this)
{
  bool v1; // sf@1
  int v2; // eax@2

  v1 = this->m_iViewIndex-- - 1 < 0;
  if ( v1 )
  {
    v2 = this->m_MaxTextLine;
    if ( v2 <= 0 )
      this->m_iViewIndex = 0;
    else
      this->m_iViewIndex = v2 - 1;
  }
}

//----- (005E5020) --------------------------------------------------------
ChatBoardFlex::Type __thiscall ChatBoardFlex::ParseUserChat(ChatBoardFlex *this, char **pcText)
{
  return 1;
}

//----- (005E5030) --------------------------------------------------------
bool __thiscall ChatBoardFlex::ViewLineDown(ChatBoardFlex *this)
{
  int v1; // eax@1
  bool result; // al@2
  int v3; // eax@3

  v1 = this->m_iViewIndex;
  if ( v1 == this->m_iTopIndex - 1 )
  {
    result = 0;
  }
  else
  {
    v3 = v1 + 1;
    this->m_iViewIndex = v3;
    if ( v3 >= this->m_MaxTextLine )
      this->m_iViewIndex = 0;
    result = 1;
  }
  return result;
}

//----- (005E5060) --------------------------------------------------------
bool __thiscall ChatBoardFlex::ViewLineMostDown(ChatBoardFlex *this)
{
  int v1; // eax@1
  int v2; // edx@2

  v1 = this->m_iTopIndex - 1;
  this->m_iViewIndex = v1;
  if ( v1 < 0 )
  {
    v2 = this->m_MaxTextLine;
    if ( v2 > 0 )
    {
      this->m_iViewIndex = v1 + v2;
      return 1;
    }
    this->m_iViewIndex = 0;
  }
  return 1;
}

//----- (005E50A0) --------------------------------------------------------
void __thiscall ChatBoardFlex::SetGameFrameWork(ChatBoardFlex *this, PgFrameWork *pkFrameWork)
{
  this->m_pkFrameWork = pkFrameWork;
}

//----- (005E50B0) --------------------------------------------------------
void __thiscall ChatBoardFlex::SetSystemWindow(ChatBoardFlex *this, bool b)
{
  this->m_bSystemWindow = b;
}

//----- (005E50C0) --------------------------------------------------------
bool __thiscall ChatBoardFlex::IsNewLineColoring(ChatBoardFlex *this, char *pcText, char *pcColorText, char *pMainText)
{
  char *v4; // esi@1
  signed int v5; // edi@1
  const char v6; // al@5
  int v7; // ecx@6
  char bColoringText; // [sp+12h] [bp-106h]@1
  char bEndColoring; // [sp+13h] [bp-105h]@1
  char acTemp[256]; // [sp+14h] [bp-104h]@1
  unsigned int v12; // [sp+114h] [bp-4h]@1
  int v13; // [sp+118h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v4 = pcText;
  memset(acTemp, 0, 0x100u);
  v5 = 0;
  bColoringText = 0;
  bEndColoring = 0;
  if ( !*pcText )
    return 0;
  do
  {
    if ( strncmp(v4, "{color,", 7u) )
    {
      if ( !bColoringText )
        goto LABEL_15;
    }
    else
    {
      bColoringText = 1;
      if ( bEndColoring == 1 )
      {
        v4 = &pMainText[v5];
        bEndColoring = 0;
      }
      v4 += 7;
      v5 += 7;
      memset(acTemp, 0, 0x100u);
      v6 = *v4;
      if ( *v4 )
      {
        v7 = (int)acTemp;
        while ( v6 != 44 )
        {
          ++v4;
          *(_BYTE *)v7 = v6;
          v6 = *v4;
          ++v7;
          ++v5;
          if ( !*v4 )
            goto LABEL_9;
        }
      }
      else
      {
LABEL_9:
        if ( *v4 != 44 )
        {
          bColoringText = 0;
          goto LABEL_15;
        }
      }
      sprintf(pcColorText, "{color,%s,");
    }
    if ( *v4 == 125 )
      bEndColoring = 1;
LABEL_15:
    ++v4;
    ++v5;
  }
  while ( v5 < (signed int)strlen(pcText) && *v4 );
  if ( bColoringText == 1 && !bEndColoring )
    return 1;
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (005E5220) --------------------------------------------------------
char *__thiscall ChatBoardFlex::GetChatText(ChatBoardFlex *this, int iIndex)
{
  char **v2; // eax@3
  char *result; // eax@4

  if ( iIndex >= 0 && iIndex < this->m_MaxTextLine && (v2 = &this->m_apcText[iIndex], *v2) )
    result = *v2;
  else
    result = 0;
  return result;
}

//----- (005E5250) --------------------------------------------------------
void __thiscall ChatBoardFlex::SetMaxTextLine(ChatBoardFlex *this, int MaxLine)
{
  ChatBoardFlex *v2; // esi@1
  int v3; // edi@2
  int i; // edi@4

  v2 = this;
  if ( MaxLine > 0 )
  {
    this->m_aeType = (ChatBoardFlex::Type *)operator new__(4 * MaxLine);
    v2->m_auiTextAlloc = (unsigned int *)operator new__(4 * MaxLine);
    v2->m_apcText = (char **)operator new__(16 * MaxLine);
    v2->m_apcSetTextTime = (float *)operator new__(4 * MaxLine);
    v2->m_kChatID = (char *)operator new__(MaxLine);
    v3 = 0;
    for ( v2->m_apkFont = (PgFont **)operator new__(4 * MaxLine); v3 < MaxLine; ++v3 )
      v2->m_apcText[v3] = (char *)operator new__(0x100u);
    for ( i = 0; i < MaxLine; ++i )
    {
      strncpy(v2->m_apcText[i], "  ", 0xFFu);
      v2->m_apcSetTextTime[i] = 0.0;
      v2->m_auiTextAlloc[i] = 0;
      v2->m_kChatID[i] = 0;
      v2->m_apkFont[i] = v2->m_pkFont;
    }
    v2->m_MaxTextLine = MaxLine;
  }
}

//----- (005E53A0) --------------------------------------------------------
float __thiscall ChatBoardFlex::GetSetTextTime(ChatBoardFlex *this, int TextLineNum)
{
  float *v2; // ecx@3
  double v3; // st7@3
  int v4; // ecx@3
  bool v5; // c3@3
  double v6; // st7@3
  float result; // st7@6

  if ( TextLineNum < 0 || TextLineNum >= this->m_MaxTextLine )
  {
    v6 = 0.0;
  }
  else
  {
    v2 = this->m_apcSetTextTime;
    v3 = v2[TextLineNum];
    v4 = (int)&v2[TextLineNum];
    v5 = 0.0 == v3;
    v6 = 0.0;
    if ( !v5 )
      v6 = *(float *)v4;
  }
  LODWORD(result) = LODWORD(v6);
  return result;
}

//----- (005E53E0) --------------------------------------------------------
bool __thiscall ChatBoardFlex::FindStrInBoard(ChatBoardFlex *this, int TextRowIndex)
{
  signed int v2; // eax@1
  char *v3; // ecx@1

  v2 = 0;
  v3 = (char *)this->m_ViewedIndex;
  while ( *(_DWORD *)v3 != TextRowIndex )
  {
    ++v2;
    v3 += 4;
    if ( v2 >= 40 )
      return 0;
  }
  return 1;
}

//----- (005E5410) --------------------------------------------------------
ChatBoardFlex::eWisperTokenType __thiscall ChatBoardFlex::GetWhisperTokenType(ChatBoardFlex *this, const char *pcStr)
{
  ChatBoardFlex::eWisperTokenType v2; // ebx@1
  const char **v3; // edi@1
  const char *v4; // eax@2
  char v5; // cl@3

  v2 = 0;
  v3 = (const char **)this->m_pcWhisperToken;
  while ( 1 )
  {
    v4 = *v3;
    do
      v5 = *v4++;
    while ( v5 );
    if ( !strncmp(pcStr, *v3, v4 - (*v3 + 1)) )
      break;
    ++v2;
    ++v3;
    if ( (unsigned int)v2 >= 2 )
      return 2;
  }
  return v2;
}

//----- (005E5460) --------------------------------------------------------
int __thiscall ChatBoardFlex::ColorCommandCheck(ChatBoardFlex *this, int nTextLen, char *pText)
{
  int result; // eax@2
  int v4; // ebx@4
  const char *v5; // esi@4
  signed int v6; // edi@4
  int v7; // eax@10
  int v8; // esi@12
  char bIsLineColor; // [sp+7h] [bp-1h]@4

  if ( nTextLen >= 0 && pText )
  {
    v4 = 0;
    bIsLineColor = 0;
    v5 = &pText[nTextLen - 7];
    v6 = 0;
    while ( *v5 )
    {
      if ( !strncmp(v5, "{color,", 7u) )
      {
        bIsLineColor = 1;
        break;
      }
      ++v6;
      ++v4;
      ++v5;
      if ( v6 >= 7 )
        break;
    }
    v7 = 0;
    if ( bIsLineColor )
      v7 = 7 - v4;
    v8 = nTextLen - v7;
    if ( IsDBCSLeadByte(pText[nTextLen - v7]) )
    {
      if ( bIsLineColor == 1 )
        --v8;
    }
    result = v8;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005E54F0) --------------------------------------------------------
int __thiscall ChatBoardFlex::FindItemLinkToken(ChatBoardFlex *this, char *pLinkText, int nCliclkIndex)
{
  ChatBoardFlex *v3; // ebx@1
  int result; // eax@2
  GameFrameWork *v5; // ecx@4
  const char *v6; // esi@6
  int v7; // ebx@6
  int v8; // edi@6
  char chRemoveColorText[256]; // [sp+Ch] [bp-104h]@4
  unsigned int v10; // [sp+10Ch] [bp-4h]@1
  int v11; // [sp+110h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = this;
  if ( pLinkText && nCliclkIndex >= 0 )
  {
    memset(chRemoveColorText, 0, 0x100u);
    v5 = (GameFrameWork *)v3->m_pkFrameWork;
    if ( v5 )
      GameFrameWork::RemoveColorText(v5, pLinkText, chRemoveColorText, nCliclkIndex);
    v6 = &chRemoveColorText[nCliclkIndex];
    v7 = 0;
    v8 = nCliclkIndex;
    do
    {
      if ( !v6 )
        break;
      if ( strncmp(v6, "<\t", 2u) )
      {
        if ( !strncmp(v6, "\t>", 2u) && !v7 )
          goto LABEL_2;
      }
      else
      {
        ++v7;
      }
      --v6;
      --v8;
    }
    while ( v8 >= 0 );
    result = v7;
  }
  else
  {
LABEL_2:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (005E55C0) --------------------------------------------------------
unsigned int __thiscall ChatBoardFlex::GetViewLineCount(ChatBoardFlex *this)
{
  return (((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
        + 2 * this->m_iLineGap)
       / (this->m_pkFont->baseclass_0.m_dwFontSizeInPixel + this->m_iLineGap);
}

//----- (005E55F0) --------------------------------------------------------
void __thiscall ChatBoardFlex::SetText(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, unsigned int uiTextLen)
{
  ChatBoardFlex *v4; // esi@1
  int v5; // eax@6
  int v6; // eax@10

  v4 = this;
  this->m_aeType[this->m_iTopIndex] = eType;
  strncpy(this->m_apcText[this->m_iTopIndex], byte_9BB1EC, 0xFFu);
  v4->m_auiTextAlloc[v4->m_iTopIndex] = uiTextLen;
  v4->m_apcSetTextTime[v4->m_iTopIndex] = Timer::ms_fCurTime;
  strncpy(v4->m_apcText[v4->m_iTopIndex], pcText, uiTextLen);
  if ( eType == 1024 || eType == 2048 || eType == 4106 )
    v4->m_apkFont[v4->m_iTopIndex] = Font::Get(GMCHAT);
  else
    v4->m_apkFont[v4->m_iTopIndex] = v4->m_pkFont;
  v5 = v4->m_MaxTextLine;
  ++v4->m_iTopIndex;
  if ( v4->m_iTopIndex >= v5 )
    v4->m_iTopIndex = 0;
  ++v4->m_uiTotal;
  if ( v4->m_uiTotal > v5 )
    v4->m_uiTotal = v5;
  v6 = v4->m_iTopIndex;
  if ( v6 <= 0 )
  {
    v4->m_iViewIndex = -1;
  }
  else
  {
    if ( v4->m_iViewIndex == v6 - 2 )
      v4->m_iViewIndex = v6 - 1;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005E5720) --------------------------------------------------------
void __thiscall ChatBoardFlex::SetText(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, unsigned int uiTextLen, char kChatID)
{
  ChatBoardFlex *v5; // esi@1
  int v6; // eax@1
  int v7; // edi@2
  int v8; // eax@5
  int v9; // eax@9

  v5 = this;
  v6 = this->m_iTopIndex;
  if ( v6 > this->m_MaxTextLine - 40 )
  {
    v7 = 0;
    if ( v6 - 1 > 0 )
    {
      do
      {
        strncpy(v5->m_apcText[v7], v5->m_apcText[v7 + 1], 0xFFu);
        v5->m_apcSetTextTime[v7] = v5->m_apcSetTextTime[v7 + 1];
        v5->m_auiTextAlloc[v7] = v5->m_auiTextAlloc[v7 + 1];
        v5->m_kChatID[v7] = v5->m_kChatID[v7 + 1];
        v5->m_apkFont[v7] = v5->m_apkFont[v7 + 1];
        ++v7;
      }
      while ( v7 < v5->m_iTopIndex - 1 );
    }
    --v5->m_iTopIndex;
  }
  v5->m_aeType[v5->m_iTopIndex] = eType;
  strncpy(v5->m_apcText[v5->m_iTopIndex], byte_9BB1F0, 0xFFu);
  v5->m_auiTextAlloc[v5->m_iTopIndex] = uiTextLen;
  v5->m_apcSetTextTime[v5->m_iTopIndex] = Timer::ms_fCurTime;
  strncpy(v5->m_apcText[v5->m_iTopIndex], pcText, uiTextLen);
  v5->m_kChatID[v5->m_iTopIndex] = kChatID;
  v5->m_apkFont[v5->m_iTopIndex] = v5->m_pkFont;
  v8 = v5->m_MaxTextLine;
  ++v5->m_iTopIndex;
  if ( v5->m_iTopIndex >= v8 )
    v5->m_iTopIndex = 0;
  ++v5->m_uiTotal;
  if ( v5->m_uiTotal > v8 )
    v5->m_uiTotal = v8;
  v9 = v5->m_iTopIndex;
  if ( v9 <= 0 )
  {
    v5->m_iViewIndex = -1;
  }
  else
  {
    if ( v5->m_iViewIndex == v9 - 2 )
      v5->m_iViewIndex = v9 - 1;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005E58B0) --------------------------------------------------------
void __thiscall ChatBoardFlex::CreateTextGeometry(ChatBoardFlex *this)
{
  ChatBoardFlex *v1; // edi@1
  int v2; // ebx@1
  PgFont *v3; // eax@2
  void *v4; // eax@3
  int v5; // eax@4
  NiNode *v6; // esi@5
  NiRefObjectVtbl *v7; // edx@12
  int v8; // eax@12
  SpScreenText **v9; // esi@12
  void *v10; // eax@13
  int v11; // eax@14
  SpScreenText *v12; // ebx@16
  SpScreenText *v13; // eax@24
  double v14; // st7@26
  SpScreenText *v15; // eax@26
  float v16; // ST28_4@26
  float v17; // edx@26
  NiNode *v18; // ecx@26
  unsigned int v19; // [sp-14h] [bp-50h]@1
  tagSIZE kSize; // [sp+8h] [bp-34h]@12
  int iLineYPos; // [sp+10h] [bp-2Ch]@12
  void *v22; // [sp+14h] [bp-28h]@3
  void *v23; // [sp+18h] [bp-24h]@13
  tagRECT kDrawRect; // [sp+1Ch] [bp-20h]@12
  unsigned int v25; // [sp+2Ch] [bp-10h]@1
  int v26; // [sp+38h] [bp-4h]@3
  int v27; // [sp+3Ch] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v19 = (unsigned int)&v27 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  if ( this->m_pkFont || (v3 = Font::Get(BOLD), (v1->m_pkFont = v3) != 0) )
  {
    v4 = operator new(0xE8u);
    v22 = v4;
    v26 = 0;
    if ( v4 )
    {
      NiNode::NiNode((NiNode *)v4, 0);
      v2 = v5;
    }
    v6 = v1->m_spTextOffset.m_pObject;
    v26 = -1;
    if ( v6 != (NiNode *)v2 )
    {
      if ( v6
        && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v1->m_spTextOffset.m_pObject = (NiNode *)v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor(
      (NiRefObject *)v1,
      (unsigned int)v1->m_spTextOffset.m_pObject);
    SelectObject(v1->m_pkFont->baseclass_0.m_kFontRenderStuff.hDC, v1->m_pkFont->baseclass_0.m_hFont);
    PgFont::GetTextSize(v1->m_pkFont, "W", 1, &kSize);
    v7 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    iLineYPos = -v1->m_iLineGap;
    v8 = (int)v7[36].__vecDelDtor((NiRefObject *)v1, kSize.cy);
    SetRect(&kDrawRect, 0, 0, v8, 0);
    v9 = (SpScreenText **)v1->m_aspTextGeom;
    v22 = (void *)40;
    do
    {
      v10 = operator new(0x14Cu);
      v23 = v10;
      v26 = 1;
      if ( v10 )
      {
        PgTextGeometry::PgTextGeometry((PgTextGeometry *)v10, v1->m_pkFont);
        v23 = (void *)v11;
      }
      else
      {
        v23 = 0;
        v11 = 0;
      }
      v12 = *v9;
      v26 = -1;
      if ( v12 != (SpScreenText *)v11 )
      {
        if ( v12 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v12 )
            v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
          v11 = (int)v23;
        }
        *v9 = (SpScreenText *)v11;
        if ( v11 )
          InterlockedIncrement((volatile LONG *)(v11 + 4));
      }
      SpScreenText::SetShadowOffset(*v9, 1u);
      ((void (__stdcall *)(tagRECT *, unsigned int))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(
        &kDrawRect,
        v19);
      v13 = *v9;
      (*v9)[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = 0;
      if ( v13->m_iAlignOption != 17 )
      {
        v13->m_iAlignOption = 17;
        v13->m_bInvalidate = 1;
      }
      v14 = (double)iLineYPos;
      (*v9)->m_bTextCmdOn = 1;
      v15 = *v9;
      v16 = v14;
      v17 = (*v9)->baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      (*v9)->baseclass_0.baseclass_0.m_kLocal.m_Translate.x = (*v9)->baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
      v15->baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v16;
      v15->baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v17;
      v18 = v1->m_spTextOffset.m_pObject;
      iLineYPos += kSize.cy + v1->m_iLineGap;
      v19 = 0;
      ((void (__stdcall *)(SpScreenText *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(*v9);
      ++v9;
      v22 = (char *)v22 - 1;
    }
    while ( v22 );
    NiAVObject::UpdateProperties(&v1->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005E5B10) --------------------------------------------------------
void __thiscall ChatBoardFlex::SetDrawFormat(ChatBoardFlex *this, unsigned int uiDrawFormat)
{
  char *v2; // esi@2
  int v3; // edx@3
  unsigned int v4; // eax@4
  int v5; // eax@7
  int i; // [sp+8h] [bp-4h]@1

  i = 0;
  if ( this->m_MaxTextViewLine > 0 )
  {
    v2 = (char *)this->m_aspTextGeom;
    do
    {
      v3 = *(_DWORD *)v2;
      *(_DWORD *)(*(_DWORD *)v2 + 308) = uiDrawFormat;
      if ( uiDrawFormat & 1 )
        v4 = 2;
      else
        v4 = uiDrawFormat & 2 | 1;
      if ( uiDrawFormat & 4 )
      {
        v5 = v4 | 0x20;
      }
      else
      {
        if ( uiDrawFormat & 8 )
          v5 = v4 | 0x30;
        else
          v5 = v4 | 0x10;
      }
      if ( v5 != *(_DWORD *)(v3 + 280) )
      {
        *(_DWORD *)(v3 + 280) = v5;
        *(_BYTE *)(v3 + 300) = 1;
      }
      v2 += 4;
      ++i;
    }
    while ( i < this->m_MaxTextViewLine );
  }
}

//----- (005E5BB0) --------------------------------------------------------
void __thiscall ChatBoardFlex::RoarAdd(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText)
{
  char *v3; // ebx@1
  ChatBoardFlex *v4; // esi@1
  char *v5; // eax@2
  unsigned int v6; // edi@2
  PgFont *v7; // eax@8
  int v8; // eax@10
  int v9; // eax@14

  v3 = pcText;
  v4 = this;
  if ( pcText )
  {
    v5 = pcText;
    v6 = 0;
    if ( *pcText )
    {
      while ( 1 )
      {
        if ( *v5 != 10 )
        {
          ++v5;
          ++v6;
          goto LABEL_20;
        }
        if ( !v6 )
          goto LABEL_18;
        v4->m_aeType[v4->m_iTopIndex] = eType;
        strncpy(v4->m_apcText[v4->m_iTopIndex], byte_9BB1EC, 0xFFu);
        v4->m_auiTextAlloc[v4->m_iTopIndex] = v6;
        v4->m_apcSetTextTime[v4->m_iTopIndex] = Timer::ms_fCurTime;
        strncpy(v4->m_apcText[v4->m_iTopIndex], v3, v6);
        if ( eType == 1024 || eType == 2048 || eType == 4106 )
          v7 = Font::Get(GMCHAT);
        else
          v7 = v4->m_pkFont;
        v4->m_apkFont[v4->m_iTopIndex] = v7;
        v8 = v4->m_MaxTextLine;
        ++v4->m_iTopIndex;
        if ( v4->m_iTopIndex >= v8 )
          v4->m_iTopIndex = 0;
        ++v4->m_uiTotal;
        if ( v4->m_uiTotal > v8 )
          v4->m_uiTotal = v8;
        v9 = v4->m_iTopIndex;
        if ( v9 <= 0 )
          break;
        if ( v4->m_iViewIndex != v9 - 2 )
          goto LABEL_18;
        v4->m_iViewIndex = v9 - 1;
        v5 = pcText + 1;
        v6 = 0;
        v3 = pcText + 1;
LABEL_20:
        pcText = v5;
        if ( !*v5 )
        {
          if ( v6 )
            ChatBoardFlex::SetText(v4, eType, v3, v6);
          return;
        }
      }
      v4->m_iViewIndex = -1;
LABEL_18:
      v5 = pcText + 1;
      v6 = 0;
      v3 = pcText + 1;
      goto LABEL_20;
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005E5D30) --------------------------------------------------------
bool __thiscall ChatBoardFlex::IsColorTextLine(ChatBoardFlex *this, char *pcText, tagSIZE *kSize)
{
  char *v3; // esi@1
  bool v4; // bl@1
  int v5; // eax@3
  int v6; // ecx@4
  char *v7; // eax@11
  const char *v8; // edi@11
  int v9; // edx@11
  char v10; // cl@12
  int v11; // esi@13
  int v12; // ebx@15
  tagSIZE *v13; // eax@24
  ChatBoardFlex *v15; // [sp+10h] [bp-118h]@1
  PgFont *v16; // [sp+14h] [bp-114h]@13
  tagSIZE ColokTextSize; // [sp+18h] [bp-110h]@13
  char *pcSubText; // [sp+20h] [bp-108h]@3
  char acTemp[256]; // [sp+24h] [bp-104h]@1
  unsigned int v20; // [sp+124h] [bp-4h]@1
  int v21; // [sp+128h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v3 = pcText;
  v15 = this;
  memset(acTemp, 0, 0x100u);
  v4 = 0;
  kSize->cx = 0;
  kSize->cy = 0;
  if ( *pcText )
  {
    do
    {
      if ( !strncmp(v3, "{color,", 7u) )
      {
        v5 = (unsigned __int8)v3[7];
        v3 += 7;
        pcSubText = v3;
        if ( (_BYTE)v5 )
        {
          v6 = (int)acTemp;
          while ( (_BYTE)v5 != 44 )
          {
            ++v3;
            *(_BYTE *)v6 = v5;
            LOBYTE(v5) = *v3;
            ++v6;
            if ( !*v3 )
            {
              pcSubText = v3;
              goto LABEL_8;
            }
          }
          pcSubText = v3;
LABEL_11:
          v7 = fs("{color,%s");
          v8 = v7;
          v9 = (int)(v7 + 1);
          do
            v10 = *v7++;
          while ( v10 );
          v11 = (int)&v7[-v9];
          v16 = v15->m_pkFont;
          if ( !CSpFont::GetTextSize(&v16->baseclass_0, (char *)v8, (int)&v7[-v9], &ColokTextSize, 0, 0, 0, 0) )
          {
            GetTextExtentPoint32A(v16->baseclass_0.m_kFontRenderStuff.hDC, v8, v11, &ColokTextSize);
            if ( v16->baseclass_0.m_dwOutlineOffset )
            {
              v12 = 0;
              while ( *v8 )
              {
                if ( v11 <= 0 )
                  break;
                if ( *v8 == 32 )
                {
                  --v11;
                  ++v8;
                }
                else
                {
                  ++v12;
                  if ( IsDBCSLeadByte(*v8) )
                  {
                    v8 += 2;
                    v11 -= 2;
                  }
                  else
                  {
                    ++v8;
                    --v11;
                  }
                }
              }
              ColokTextSize.cy += 2 * v16->baseclass_0.m_dwOutlineOffset;
              ColokTextSize.cx += 2 * v12 * v16->baseclass_0.m_dwOutlineOffset;
            }
          }
          v13 = kSize;
          v13->cx += ColokTextSize.cx;
          v13->cy += ColokTextSize.cy;
          v4 = 1;
          memset(acTemp, 0, 0x100u);
          v3 = pcSubText;
          goto LABEL_25;
        }
LABEL_8:
        if ( *v3 == 44 )
          goto LABEL_11;
      }
LABEL_25:
      ++v3;
    }
    while ( *v3 );
  }
  return v4;
}
// A85C00: using guessed type int __security_cookie;

//----- (005E5F10) --------------------------------------------------------
bool __thiscall ChatBoardFlex::IsMainTextColorText(ChatBoardFlex *this, char *pcText, tagSIZE *kSize)
{
  char *v3; // esi@1
  ChatBoardFlex *v4; // ebx@1
  int v5; // eax@4
  int v6; // ecx@5
  char *v8; // eax@11
  int v9; // eax@11
  tagSIZE ColokTextSize; // [sp+Ch] [bp-10Ch]@11
  char acTemp[256]; // [sp+14h] [bp-104h]@2
  unsigned int v12; // [sp+114h] [bp-4h]@1
  int v13; // [sp+118h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = pcText;
  v4 = this;
  if ( !pcText || (memset(acTemp, 0, 0x100u), !*pcText) )
    return 0;
  while ( 1 )
  {
    if ( strncmp(v3, "{color,", 7u) )
      goto LABEL_9;
    v5 = (unsigned __int8)v3[7];
    v3 += 7;
    if ( (_BYTE)v5 )
      break;
LABEL_8:
    if ( *v3 == 44 )
      goto LABEL_11;
LABEL_9:
    ++v3;
    if ( !*v3 )
      return 0;
  }
  v6 = (int)acTemp;
  while ( (_BYTE)v5 != 44 )
  {
    ++v3;
    *(_BYTE *)v6 = v5;
    LOBYTE(v5) = *v3;
    ++v6;
    if ( !*v3 )
      goto LABEL_8;
  }
LABEL_11:
  v8 = fs("{color,%s");
  PgFont::GetTextSize(v4->m_pkFont, v8, strlen(v8), &ColokTextSize);
  v9 = ColokTextSize.cx;
  kSize->cy -= ColokTextSize.cy;
  kSize->cx -= v9;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (005E6010) --------------------------------------------------------
int __thiscall ChatBoardFlex::FindClickTextIndex(ChatBoardFlex *this, char *pLinkText, int iX, int nLineCnt)
{
  char *v4; // esi@1
  int v5; // edi@1
  int result; // eax@2
  char *v7; // eax@3
  char v8; // bl@3
  char v9; // cl@4
  int v10; // esi@8
  int i; // edi@8
  tagSIZE kSize; // [sp+8h] [bp-10h]@15
  int nStrLen; // [sp+10h] [bp-8h]@5
  ChatBoardFlex *v14; // [sp+14h] [bp-4h]@1
  int uiTextCx; // [sp+20h] [bp+8h]@3

  v4 = pLinkText;
  v5 = 0;
  v14 = this;
  if ( pLinkText )
  {
    v7 = pLinkText;
    uiTextCx = 0;
    v8 = 0;
    do
      v9 = *v7++;
    while ( v9 );
    nStrLen = v7 - (v4 + 1);
    if ( *v4 )
    {
      while ( nStrLen > v5 )
      {
        if ( !strncmp(v4, "{color,", 7u) )
        {
          v10 = (int)(v4 + 7);
          for ( i = v5 + 7; *(_BYTE *)v10 != 44; ++i )
            ++v10;
          v5 = i + 1;
          v4 = (char *)(v10 + 1);
          v8 = 1;
        }
        if ( strncmp(v4, "}", 1u) || !v8 )
        {
          if ( IsDBCSLeadByte(*v4) )
          {
            PgFont::GetTextSize(v14->m_apkFont[nLineCnt], v4, 2, &kSize);
            v5 += 2;
            v4 += 2;
          }
          else
          {
            PgFont::GetTextSize(v14->m_apkFont[nLineCnt], v4, 1, &kSize);
            ++v5;
            ++v4;
          }
          uiTextCx += kSize.cx;
          if ( uiTextCx > iX )
            break;
        }
        else
        {
          v8 = 0;
          ++v5;
          ++v4;
        }
        if ( !*v4 )
          break;
      }
    }
    result = v5;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (005E6120) --------------------------------------------------------
void __thiscall ChatBoardFlex::Add(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText)
{
  char *v3; // esi@1
  ChatBoardFlex *v4; // edi@1
  unsigned int v5; // eax@3
  char *v6; // ecx@3

  v3 = pcText;
  v4 = this;
  if ( pcText )
  {
    if ( eType & this->m_uiOption )
    {
      v5 = 0;
      v6 = pcText;
      if ( *pcText )
      {
        do
        {
          if ( *v3 == 10 )
          {
            if ( v5 )
              ChatBoardFlex::SetText(v4, eType, v6, v5);
            ++v3;
            v5 = 0;
            v6 = v3;
          }
          else
          {
            ++v3;
            ++v5;
          }
        }
        while ( *v3 );
        if ( v5 )
          ChatBoardFlex::SetText(v4, eType, v6, v5);
      }
    }
  }
}

//----- (005E6180) --------------------------------------------------------
void __thiscall ChatBoardFlex::Add(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, char kChatID)
{
  ChatBoardFlex *v4; // edi@1
  char *v5; // ecx@1
  ChatBoardFlex::Type v6; // edx@2
  unsigned int v7; // eax@3
  char *v8; // esi@3

  v4 = this;
  v5 = pcText;
  if ( pcText )
  {
    v6 = eType;
    if ( eType & v4->m_uiOption )
    {
      v7 = 0;
      v8 = pcText;
      if ( *pcText )
      {
        do
        {
          if ( *v8 == 10 )
          {
            if ( v7 )
            {
              ChatBoardFlex::SetText(v4, v6, v5, v7, kChatID);
              v6 = eType;
            }
            ++v8;
            v7 = 0;
            v5 = v8;
          }
          else
          {
            ++v8;
            ++v7;
          }
        }
        while ( *v8 );
        if ( v7 )
          ChatBoardFlex::SetText(v4, v6, v5, v7, kChatID);
      }
    }
  }
}

//----- (005E61E0) --------------------------------------------------------
bool __thiscall ChatBoardFlex::ViewLineUp(ChatBoardFlex *this)
{
  ChatBoardFlex *v1; // esi@1
  unsigned int v2; // ebx@1
  int v3; // edi@1
  int v4; // eax@1
  unsigned int v5; // ecx@1
  int v7; // ebx@3
  char v8; // al@6
  char *v9; // edi@13
  unsigned int v10; // eax@16
  unsigned int iViewLineCount; // [sp+Ch] [bp-8h]@5
  int iLineCountPerText; // [sp+10h] [bp-4h]@15

  v1 = this;
  v2 = this->m_pkFont->baseclass_0.m_dwFontSizeInPixel;
  v3 = this->m_iLineGap;
  v4 = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v5 = v1->m_uiTotal;
  if ( v5 > (v4 + 2 * v3) / (v2 + v3) )
  {
    v7 = v1->m_iViewIndex;
    if ( v7 >= 0 )
    {
      if ( v5 >= v7 )
      {
        iViewLineCount = (((int (__thiscall *)(ChatBoardFlex *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v1)
                        + 2 * v1->m_iLineGap)
                       / (v1->m_pkFont->baseclass_0.m_dwFontSizeInPixel + v1->m_iLineGap);
        while ( 1 )
        {
          while ( 1 )
          {
            v8 = 0;
            if ( v1->m_aeType[v7] == 24576 )
              v8 = 1;
            if ( !v1->m_Filter || !v8 || v1->m_FilteredTextShow )
              break;
            --v7;
            if ( v7 < 0 )
              v7 += v1->m_MaxTextLine;
          }
          v9 = v1->m_apcText[v7];
          if ( !v9 )
            break;
          if ( v7 == v1->m_iTopIndex )
            break;
          for ( iLineCountPerText = 0; *v9; v9 += PgFont::GetTextLenInWidth(v1->m_apkFont[v7], v9, v10) )
          {
            v10 = ((int (__thiscall *)(ChatBoardFlex *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v1);
            ++iLineCountPerText;
          }
          iViewLineCount -= iLineCountPerText;
          if ( (iViewLineCount & 0x80000000u) != 0 )
          {
            ChatBoardFlex::DecViewIndex(v1);
            return 1;
          }
          --v7;
          if ( v7 < 0 )
            v7 += v1->m_MaxTextLine;
        }
      }
    }
  }
  return 0;
}

//----- (005E6310) --------------------------------------------------------
bool __thiscall ChatBoardFlex::Create(ChatBoardFlex *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, bool bLButtonEnable, PgWin *pkParent)
{
  ChatBoardFlex *v8; // esi@1
  bool result; // al@1
  NiSourceTexture *v10; // eax@2
  PopupMenuWin *v11; // eax@2

  v8 = this;
  result = PgWin::Create(&this->baseclass_0, iXPos, iYPos, uiWidth, uiHeight, pkParent, 0, 0);
  if ( result )
  {
    v8->m_pkFont = pkFont;
    ChatBoardFlex::CreateTextGeometry(v8);
    v8->m_bLButtonEnable = bLButtonEnable;
    v10 = MenuTexMgr::GetTexture(1u);
    v11 = PopupMenuWin::CreateWin(v10, 4u, 4u, 0);
    v8->m_pkPopupMenu = v11;
    ((void (__stdcall *)(_DWORD))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v8->baseclass_0.baseclass_e8);
    PopupMenuWin::FinishMenu(v8->m_pkPopupMenu, 0);
    ((void (__stdcall *)(_DWORD))v8->m_pkPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    result = 1;
  }
  return result;
}

//----- (005E63B0) --------------------------------------------------------
bool __thiscall ChatBoardFlex::IsMouseOverNameText(ChatBoardFlex *this)
{
  ChatBoardFlex *v1; // edi@1
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@1
  unsigned int v3; // ebx@1
  NiRefObjectVtbl *v4; // eax@2
  int v5; // esi@2
  int v6; // eax@2
  int v7; // ecx@2
  int v8; // eax@2
  int v9; // edx@2
  unsigned int v10; // eax@2
  double v11; // st7@2
  int v12; // esi@4
  unsigned int v13; // eax@4
  void *(__thiscall *v14)(NiRefObject *, unsigned int); // edx@4
  bool result; // al@5
  int v16; // eax@8
  int v17; // edx@8
  char v18; // cl@9
  int v19; // ebx@10
  signed int v20; // ecx@10
  char v21; // dl@10
  int v22; // ebx@14
  int v23; // eax@24
  int i; // eax@26
  int v25; // eax@28
  char v26; // dl@29
  bool v27; // zf@36
  char *v28; // eax@38
  char *v29; // esi@39
  char *v30; // eax@41
  char v31; // cl@42
  __int64 v32; // kr00_8@44
  int v33; // edx@44
  int v34; // eax@44
  int iX; // [sp+Ch] [bp-430h]@1
  int iY; // [sp+10h] [bp-42Ch]@1
  float c; // [sp+14h] [bp-428h]@2
  int iStringLen; // [sp+18h] [bp-424h]@1
  float chatDisplaywin2; // [sp+1Ch] [bp-420h]@2
  bool bResult; // [sp+23h] [bp-419h]@1
  char dest[4]; // [sp+24h] [bp-418h]@44
  __int64 v42; // [sp+28h] [bp-414h]@2
  __int64 v43; // [sp+30h] [bp-40Ch]@2
  char name[1024]; // [sp+38h] [bp-404h]@10
  unsigned int v45; // [sp+438h] [bp-4h]@1
  int v46; // [sp+43Ch] [bp+0h]@1

  v45 = (unsigned int)&v46 ^ __security_cookie;
  v1 = this;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor;
  iX = PgWin::ms_iMsX.x;
  iY = PgWin::ms_iMsY;
  bResult = 0;
  ((void (__stdcall *)(int *, int *))v2)(&iX, &iY);
  v3 = 0;
  iStringLen = (int)v1->m_aspTextGeom;
  while ( 1 )
  {
    ((void (__thiscall *)(ChatBoardFlex *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v1);
    v4 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = v1->m_iLineGap;
    LODWORD(chatDisplaywin2) = v1->m_pkFont->baseclass_0.m_dwFontSizeInPixel;
    v6 = ((int (__thiscall *)(ChatBoardFlex *))v4[37].__vecDelDtor)(v1);
    LODWORD(c) = (v6 + 2 * v5) % (unsigned int)(LODWORD(chatDisplaywin2) + v5);
    chatDisplaywin2 = (double)LODWORD(c);
    v7 = *(_DWORD *)iStringLen;
    v8 = *(_DWORD *)(*(_DWORD *)iStringLen + 88);
    LODWORD(v43) = *(_DWORD *)(*(_DWORD *)iStringLen + 92);
    v9 = *(_DWORD *)v7;
    HIDWORD(v42) = v8;
    HIDWORD(v43) = *(_DWORD *)(v7 + 96);
    chatDisplaywin2 = *(float *)&v43 + chatDisplaywin2;
    v10 = (*(int (**)(void))(v9 + 160))();
    v11 = chatDisplaywin2;
    c = (double)v10 + chatDisplaywin2;
    chatDisplaywin2 = (double)iY;
    if ( chatDisplaywin2 > v11 )
    {
      if ( c > (double)chatDisplaywin2 )
        break;
    }
    iStringLen += 4;
    ++v3;
    if ( v3 >= 0x28 )
      return bResult;
  }
  v12 = ((int (*)(void))v1->m_aspTextGeom[v3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)();
  v13 = ((int (__thiscall *)(ChatBoardFlex *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v1);
  PgFont::GetTextLenInWidth(v1->m_apkFont[v3], (char *)v12, v13);
  v14 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[56].__vecDelDtor;
  LODWORD(c) = 416;
  ((void (__thiscall *)(ChatBoardFlex *, float *, int *))v14)(v1, &c, &iY);
  if ( v12 )
  {
    v16 = v12;
    v17 = v12 + 1;
    do
      v18 = *(_BYTE *)v16++;
    while ( v18 );
    v19 = v16 - v17;
    iStringLen = v16 - v17;
    name[0] = 0;
    memset(&name[1], 0, 0x3FFu);
    v20 = 0;
    v21 = 0;
    if ( *(_BYTE *)v12 == 91 )
    {
      if ( *(_BYTE *)(v12 + 1) == 91 )
        v21 = 1;
      v20 = 0;
      if ( v19 > 0 )
      {
        v22 = 1 - v12;
        LODWORD(chatDisplaywin2) = 1 - v12;
        while ( iStringLen != v12 + v20 + v22 )
        {
          if ( *(_BYTE *)(v12 + v20) == 93 )
          {
            if ( !v21 )
              goto LABEL_35;
            name[v20] = *(_BYTE *)(v12 + v20 + 1);
            v21 = 0;
          }
          else
          {
            name[v20] = *(_BYTE *)(v12 + v20 + 1);
          }
          ++v20;
          if ( v20 >= iStringLen )
            return bResult;
          v22 = LODWORD(chatDisplaywin2);
        }
      }
    }
    else
    {
      if ( *(_BYTE *)v12 == 123 )
      {
        v23 = 0;
        do
          ++v23;
        while ( *(_BYTE *)(v23 + v12) != 44 );
        for ( i = v23 + 1; *(_BYTE *)(i + v12) != 44; ++i )
          ;
        v25 = i + 1;
        if ( v25 < v19 )
        {
          while ( 1 )
          {
            v26 = *(_BYTE *)(v25 + v12);
            if ( v26 == 125 )
              break;
            if ( v26 != 91 || *(_BYTE *)(v25 + v12 + 1) == 91 )
              name[v20++] = v26;
            ++v25;
            if ( v25 >= v19 )
              return bResult;
          }
LABEL_35:
          if ( v20 > 2 )
          {
            v27 = v1->m_bSystemWindow == 0;
            *((_BYTE *)&v43 + v20 + 7) = 0;
            if ( v27 )
            {
              LODWORD(chatDisplaywin2) = PgWin::GetParentWin(&v1->baseclass_0);
              if ( chatDisplaywin2 != 0.0 )
              {
                v28 = strtok(name, " ");
                if ( v28 )
                {
                  do
                  {
                    v29 = v28;
                    v28 = strtok(0, " ");
                  }
                  while ( v28 );
                  if ( v29 )
                  {
                    v30 = v29;
                    do
                      v31 = *v30++;
                    while ( v31 );
                    if ( v30 != v29 + 1 )
                    {
                      v43 = 0i64;
                      v42 = 0i64;
                      *(_DWORD *)dest = 0;
                      strncpy(dest, v29, 0x14u);
                      *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_DWORD *)dest;
                      *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[4] = v42;
                      *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[12] = v43;
                      v43 = 0i64;
                      v42 = 0i64;
                      *(_DWORD *)dest = 0;
                      strncpy(dest, v29, 0x14u);
                      v32 = v42;
                      *(_DWORD *)&v1->m_selectedChar.n5_name[0] = *(_DWORD *)dest;
                      v33 = v43;
                      *(_DWORD *)&v1->m_selectedChar.n5_name[4] = v32;
                      v34 = HIDWORD(v43);
                      *(_DWORD *)&v1->m_selectedChar.n5_name[8] = HIDWORD(v32);
                      *(_DWORD *)&v1->m_selectedChar.n5_name[12] = v33;
                      *(_DWORD *)&v1->m_selectedChar.n5_name[16] = v34;
                    }
                  }
                }
                ChatDisplayWin2::OnWhisperTab(LODWORD(chatDisplaywin2), 0);
                ChatBoardFlex::ms_bClickLog = 1;
                bResult = 1;
              }
            }
          }
        }
      }
    }
    result = bResult;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A99E7E: using guessed type bool ChatBoardFlex__ms_bClickLog;

//----- (005E6840) --------------------------------------------------------
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText)
{
  ChatBoardFlex *v3; // edi@1
  char *v4; // eax@2
  char v5; // cl@3
  char cTmp[512]; // [sp+8h] [bp-204h]@2
  unsigned int v7; // [sp+208h] [bp-4h]@1
  int v8; // [sp+20Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  if ( pcText )
  {
    cTmp[0] = 0;
    memset(&cTmp[1], 0, 0x1FFu);
    v4 = pcText;
    do
    {
      v5 = *v4;
      v4[cTmp - pcText] = *v4;
      ++v4;
    }
    while ( v5 );
    ChatBoardFlex::Add(v3, eType, cTmp);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005E68C0) --------------------------------------------------------
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, ChatBoardFlex::Type eType, char *pcText, char kChatID)
{
  ChatBoardFlex *v4; // edi@1
  char *v5; // eax@2
  char v6; // cl@3
  char cTmp[512]; // [sp+8h] [bp-204h]@2
  unsigned int v8; // [sp+208h] [bp-4h]@1
  int v9; // [sp+20Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v4 = this;
  if ( pcText )
  {
    cTmp[0] = 0;
    memset(&cTmp[1], 0, 0x1FFu);
    v5 = pcText;
    do
    {
      v6 = *v5;
      v5[cTmp - pcText] = *v5;
      ++v5;
    }
    while ( v6 );
    ChatBoardFlex::Add(v4, eType, cTmp, kChatID);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005E6940) --------------------------------------------------------
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, char *pcText)
{
  char *v2; // eax@1
  char v3; // dl@2
  char cTmp[512]; // [sp+4h] [bp-204h]@2
  unsigned int v5; // [sp+204h] [bp-4h]@1
  int v6; // [sp+208h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = pcText;
  do
  {
    v3 = *v2;
    v2[cTmp - pcText] = *v2;
    ++v2;
  }
  while ( v3 );
  ChatBoardFlex::Add(this, ITEM, cTmp);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E6990) --------------------------------------------------------
void __thiscall ChatBoardFlex::AddUserChat(ChatBoardFlex *this, char *pcText, char kChatID)
{
  char *v3; // eax@1
  char v4; // dl@2
  char cTmp[512]; // [sp+4h] [bp-204h]@2
  unsigned int v6; // [sp+204h] [bp-4h]@1
  int v7; // [sp+208h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v3 = pcText;
  do
  {
    v4 = *v3;
    v3[cTmp - pcText] = *v3;
    ++v3;
  }
  while ( v4 );
  ChatBoardFlex::Add(this, ITEM, cTmp, kChatID);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E69E0) --------------------------------------------------------
void __thiscall ChatBoardFlex::AddGMUserChat(ChatBoardFlex *this, char *pcText)
{
  char *v2; // eax@1
  char v3; // dl@2
  char cTmp[512]; // [sp+4h] [bp-204h]@2
  unsigned int v5; // [sp+204h] [bp-4h]@1
  int v6; // [sp+208h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = pcText;
  do
  {
    v3 = *v2;
    v2[cTmp - pcText] = *v2;
    ++v2;
  }
  while ( v3 );
  ChatBoardFlex::Add(this, (ChatBoardFlex::Type)1024, cTmp);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E6A30) --------------------------------------------------------
void __thiscall ChatBoardFlex::UpdateMeWin(ChatBoardFlex *this, float fCurTime)
{
  ChatBoardFlex *v2; // esi@1
  NiRefObjectVtbl *v3; // edx@2
  int v4; // ebx@2
  unsigned int v5; // edi@2
  unsigned int v6; // eax@2
  int v7; // edi@2
  int v8; // ebx@2
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // edx@2
  NiNode *v10; // eax@2
  float v11; // ecx@2
  float v12; // edx@2
  int v13; // edi@3
  int v14; // edi@6
  void *v15; // edi@20
  bool v16; // zf@21
  unsigned int v17; // eax@22
  unsigned int v18; // ebx@22
  int v19; // eax@24
  int v20; // eax@24
  void *v21; // edx@26
  int v22; // ebx@27
  signed int v23; // ecx@28
  int v24; // edx@28
  void *v25; // edx@31
  int v26; // eax@31
  SpScreenText **v27; // edi@32
  unsigned int v28; // eax@33
  int v29; // ebx@33
  int v30; // eax@34
  char v31; // cl@35
  signed int v32; // ebx@36
  void *v33; // ebx@41
  void *(__thiscall *v34)(NiRefObject *, unsigned int); // edx@41
  unsigned int v35; // eax@41
  unsigned int v36; // eax@41
  int v37; // eax@44
  int v38; // eax@44
  char *v39; // ST14_4@46
  bool v40; // al@46
  void *(__thiscall *v41)(NiRefObject *, unsigned int); // edx@46
  signed int v42; // eax@46
  char v43; // bl@53
  D3DXCOLOR *v44; // ecx@54
  NiRefObjectVtbl *v45; // ebx@55
  char *v46; // eax@56
  void *v47; // ecx@56
  void *(__thiscall *v48)(NiRefObject *, unsigned int); // edx@56
  ChatColor *v49; // eax@57
  NiRefObjectVtbl *v50; // ebx@58
  char v51; // dl@58
  SpScreenText *v52; // ebx@62
  void *v53; // eax@64
  void *v54; // eax@75
  unsigned int v55; // ebx@78
  void *v56; // eax@79
  NiRefObjectVtbl *v57; // ebx@82
  char v58; // ST10_1@82
  char v59; // dl@82
  void *v60; // eax@96
  NiRefObjectVtbl *v61; // ebx@102
  void *v62; // eax@105
  void *v63; // eax@110
  int v64; // ebx@125
  int v65; // edi@125
  void (__stdcall *v66)(_DWORD); // eax@126
  int v67; // edi@129
  D3DXCOLOR *v68; // [sp-1Ch] [bp-98Ch]@111
  char v69; // [sp-18h] [bp-988h]@109
  char *v70; // [sp-14h] [bp-984h]@40
  char v71; // [sp-14h] [bp-984h]@109
  char *v72; // [sp-10h] [bp-980h]@55
  char v73; // [sp-10h] [bp-980h]@109
  ColorID v74; // [sp-Ch] [bp-97Ch]@54
  char v75; // [sp-Ch] [bp-97Ch]@109
  char v76; // [sp+4h] [bp-96Ch]@68
  char v77; // [sp+14h] [bp-95Ch]@89
  char v78; // [sp+24h] [bp-94Ch]@61
  char v79; // [sp+34h] [bp-93Ch]@69
  char v80; // [sp+44h] [bp-92Ch]@60
  char v81; // [sp+54h] [bp-91Ch]@71
  D3DXCOLOR result; // [sp+64h] [bp-90Ch]@54
  char v83; // [sp+74h] [bp-8FCh]@90
  char v84; // [sp+84h] [bp-8ECh]@58
  char v85; // [sp+94h] [bp-8DCh]@82
  char v86; // [sp+A4h] [bp-8CCh]@102
  char v87; // [sp+B4h] [bp-8BCh]@70
  char v88; // [sp+C4h] [bp-8ACh]@93
  char v89; // [sp+D4h] [bp-89Ch]@91
  char v90; // [sp+E4h] [bp-88Ch]@59
  char v91; // [sp+F4h] [bp-87Ch]@74
  char v92; // [sp+104h] [bp-86Ch]@95
  char v93; // [sp+114h] [bp-85Ch]@111
  char v94; // [sp+124h] [bp-84Ch]@104
  char v95; // [sp+134h] [bp-83Ch]@63
  char v96; // [sp+144h] [bp-82Ch]@72
  unsigned int v97; // [sp+148h] [bp-828h]@2
  tagSIZE kSize; // [sp+150h] [bp-820h]@2
  bool bNewLineColoring; // [sp+15Ah] [bp-816h]@21
  char bAllScan; // [sp+15Bh] [bp-815h]@5
  int iTextRow; // [sp+15Ch] [bp-814h]@2
  int nTokenInx; // [sp+160h] [bp-810h]@2
  void *fOffset; // [sp+164h] [bp-80Ch]@2
  void *pcText; // [sp+168h] [bp-808h]@20
  char acTemp[1024]; // [sp+16Ch] [bp-804h]@22
  char pcTempSubText[256]; // [sp+56Ch] [bp-404h]@42
  char pTokenCheckText[256]; // [sp+66Ch] [bp-304h]@36
  char pcTemp[256]; // [sp+76Ch] [bp-204h]@46
  char acColorText[256]; // [sp+86Ch] [bp-104h]@21
  unsigned int v110; // [sp+96Ch] [bp-4h]@1
  int v111; // [sp+970h] [bp+0h]@1

  v110 = (unsigned int)&v111 ^ __security_cookie;
  v2 = this;
  if ( this->m_apcText )
  {
    v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = this->m_iLineGap;
    v5 = this->m_pkFont->baseclass_0.m_dwFontSizeInPixel;
    iTextRow = this->m_iViewIndex;
    v6 = (((int (__thiscall *)(ChatBoardFlex *))v3[37].__vecDelDtor)(this) + 2 * v4) / (v4 + v5);
    v7 = v2->m_iLineGap;
    fOffset = (void *)v2->m_pkFont->baseclass_0.m_dwFontSizeInPixel;
    v8 = v6 - 1;
    v9 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
    nTokenInx = v6 - 1;
    v97 = (((int (__thiscall *)(ChatBoardFlex *))v9)(v2) + 2 * v7) % (unsigned int)((char *)fOffset + v7);
    v10 = v2->m_spTextOffset.m_pObject;
    *(float *)&fOffset = (double)v97;
    v11 = v10->baseclass_0.m_kLocal.m_Translate.x;
    kSize.cx = (int)fOffset;
    v12 = v10->baseclass_0.m_kLocal.m_Translate.z;
    v10->baseclass_0.m_kLocal.m_Translate.x = v11;
    LODWORD(v10->baseclass_0.m_kLocal.m_Translate.y) = kSize.cx;
    v10->baseclass_0.m_kLocal.m_Translate.z = v12;
    if ( v8 < 39 )
    {
      v13 = (int)&v2->m_aspTextGeom[39];
      fOffset = (void *)(39 - v8);
      do
      {
        (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v13 + 148))(&unk_9BB1D2);
        v13 -= 4;
        fOffset = (char *)fOffset - 1;
      }
      while ( *(float *)&fOffset != 0.0 );
    }
    bAllScan = 0;
    if ( v8 >= 0 )
    {
      v14 = iTextRow;
      while ( 1 )
      {
        if ( v14 < 0 )
        {
          if ( v2->m_MaxTextLine != 100 )
            OutputDebugStringA(&byte_9BB1D3);
          if ( bAllScan == 1 )
          {
            if ( v8 >= 0 )
            {
              v67 = (int)&v2->m_aspTextGeom[v8];
              do
              {
                (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v67 + 148))(&unk_9BB1E9);
                v67 -= 4;
                --v8;
              }
              while ( v8 >= 0 );
            }
            goto LABEL_131;
          }
          if ( v2->m_MaxTextViewLine <= 0 )
            v14 = 0;
          else
            v14 += v2->m_MaxTextLine;
          iTextRow = v14;
          bAllScan = 1;
        }
        if ( v2->m_aeType[v14] != v2->m_FilterType )
          break;
        if ( v2->m_FilteredTextShow )
          goto LABEL_20;
        --v14;
        iTextRow = v14;
LABEL_122:
        if ( v8 < 0 )
          goto LABEL_131;
      }
      if ( v2->m_MaxTextLine != 100 )
        OutputDebugStringA(&byte_9BB1EA);
LABEL_20:
      v15 = v2->m_apcText[v14];
      pcText = v15;
      if ( v15 )
      {
        memset(acColorText, 0, 0x100u);
        v16 = *(_BYTE *)v15 == 0;
        bNewLineColoring = 0;
        *(float *)&fOffset = 0.0;
        if ( !v16 )
        {
          do
          {
            v17 = ((int (__thiscall *)(ChatBoardFlex *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
            v18 = PgFont::GetTextLenInWidth(v2->m_apkFont[iTextRow], (char *)v15, v17);
            acTemp[0] = 0;
            memset(&acTemp[1], 0, 0x3FFu);
            strncpy(acTemp, (char *)v15, v18);
            if ( ChatBoardFlex::IsColorTextLine(v2, acTemp, &kSize)
              || ChatBoardFlex::IsMainTextColorText(v2, (char *)v15, &kSize) )
            {
              v19 = ((int (__thiscall *)(ChatBoardFlex *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
              v20 = PgFont::GetTextLenInWidth(v2->m_apkFont[iTextRow], (char *)v15, kSize.cx + v19);
              v18 = ChatBoardFlex::ColorCommandCheck(v2, v20, (char *)v15);
            }
            fOffset = (char *)fOffset + 1;
            v15 = (char *)v15 + v18;
          }
          while ( *(_BYTE *)v15 );
        }
        v21 = fOffset;
        v97 = nTokenInx - (_DWORD)fOffset;
        if ( nTokenInx - (signed int)fOffset + 1 < 0 )
        {
          if ( nTokenInx >= 0 )
          {
            v64 = nTokenInx;
            v65 = (int)&v2->m_aspTextGeom[nTokenInx];
            do
            {
              v66 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)v65 + 148);
              v65 -= 4;
              v66(&unk_9BB1EB);
              --v64;
            }
            while ( v64 >= 0 );
          }
          goto LABEL_131;
        }
        fOffset = pcText;
        v22 = (int)((char *)v21 - 1);
        if ( bAllScan == 1 )
        {
          v23 = 0;
          v24 = (int)v2->m_ViewedIndex;
          while ( *(_DWORD *)v24 != iTextRow )
          {
            ++v23;
            v24 += 4;
            if ( v23 >= 40 )
              goto LABEL_31;
          }
          --iTextRow;
          goto LABEL_121;
        }
LABEL_31:
        v25 = pcText;
        v26 = nTokenInx - v22;
        v2->m_ViewedIndex[nTokenInx - v22] = iTextRow;
        if ( *(_BYTE *)v25 )
        {
          v27 = (SpScreenText **)&v2->m_aspTextGeom[v26];
          do
          {
            v28 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
            v29 = iTextRow;
            nTokenInx = PgFont::GetTextLenInWidth(v2->m_apkFont[iTextRow], (char *)fOffset, v28);
            if ( bNewLineColoring == 1 )
            {
              v30 = (int)acColorText;
              do
                v31 = *(_BYTE *)v30++;
              while ( v31 );
              PgFont::GetTextSize(v2->m_apkFont[v29], acColorText, v30 - (_DWORD)&acColorText[1], &kSize);
              nTokenInx = 0;
              strncpy(pTokenCheckText, (char *)fOffset, strlen((const char *)fOffset) + 1);
              v32 = 0;
              while ( 1 )
              {
                if ( !strncmp(&pTokenCheckText[v32], "{color,", 7u) )
                {
LABEL_40:
                  v70 = "%s%s";
                  goto LABEL_41;
                }
                if ( !strncmp(&pTokenCheckText[v32], "<\t", 2u) )
                  break;
                ++nTokenInx;
                ++v32;
                if ( v32 >= 10 )
                  goto LABEL_40;
              }
              v70 = "%s%s";
LABEL_41:
              v33 = fs(v70);
              v34 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
              fOffset = v33;
              bNewLineColoring = 0;
              v35 = ((int (__thiscall *)(ChatBoardFlex *))v34)(v2);
              v36 = PgFont::GetTextLenInWidth(v2->m_apkFont[iTextRow], (char *)v33, v35);
              v29 = iTextRow;
              nTokenInx = v36;
            }
            memset(pcTempSubText, 0, 0x100u);
            strncpy(pcTempSubText, (char *)fOffset, nTokenInx);
            if ( ChatBoardFlex::IsColorTextLine(v2, pcTempSubText, &kSize)
              || ChatBoardFlex::IsMainTextColorText(v2, (char *)fOffset, &kSize) )
            {
              v37 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
              v38 = PgFont::GetTextLenInWidth(v2->m_apkFont[v29], (char *)fOffset, kSize.cx + v37);
              nTokenInx = ChatBoardFlex::ColorCommandCheck(v2, v38, (char *)fOffset);
            }
            if ( !*v27 )
              goto LABEL_117;
            memset(pcTemp, 0, 0x100u);
            strncpy(pcTemp, (char *)fOffset, nTokenInx);
            v39 = (char *)fOffset;
            pcTemp[nTokenInx] = 0;
            v40 = ChatBoardFlex::IsNewLineColoring(v2, pcTemp, acColorText, v39);
            v41 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
            bNewLineColoring = v40;
            ((void (__stdcall *)(_DWORD))v41)(pcTemp);
            ((void (__stdcall *)(PgFont *))(*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2->m_apkFont[v29]);
            SpScreenText::SetShadowOffset(*v27, 1u);
            (*v27)[1].baseclass_0.baseclass_0.baseclass_0.m_uiExtraDataSize = v29;
            v42 = v2->m_aeType[v29];
            if ( v42 > 512 )
            {
              if ( v42 > 4112 )
              {
                if ( v42 == 8192 )
                {
                  v52 = *v27;
                  if ( !*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
                  {
                    v75 = -1;
                    v73 = -1;
                    v71 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
                    v69 = -1;
                    goto LABEL_113;
                  }
                  v63 = CDataReader::GetRecord(
                          (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
                          0x36u);
                  v75 = -1;
                  if ( v63 )
                  {
                    v73 = *((_BYTE *)v63 + 6);
                    v71 = *((_BYTE *)v63 + 5);
                    v69 = *((_BYTE *)v63 + 4);
LABEL_113:
                    v68 = (D3DXCOLOR *)&v93;
                  }
                  else
                  {
                    v73 = -1;
                    v71 = 0;
                    v69 = -1;
                    v68 = (D3DXCOLOR *)&v93;
                  }
                  Color::GetDxColor(v68, v69, v71, v73, v75);
                  v46 = &v93;
LABEL_115:
                  v48 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor;
                  v47 = v52;
                  goto LABEL_116;
                }
                if ( v42 == 16384 )
                {
                  v52 = *v27;
                  if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
                  {
                    v62 = CDataReader::GetRecord(
                            (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
                            7u);
                    if ( v62 )
                    {
                      Color::GetDxColor(
                        (D3DXCOLOR *)&v94,
                        *((_BYTE *)v62 + 4),
                        *((_BYTE *)v62 + 5),
                        *((_BYTE *)v62 + 6),
                        -1);
                      v46 = &v94;
                    }
                    else
                    {
                      Color::GetDxColor((D3DXCOLOR *)&v94, -1, 0, -1, -1);
                      v46 = &v94;
                    }
                  }
                  else
                  {
                    Color::GetDxColor(
                      (D3DXCOLOR *)&v94,
                      -1,
                      ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0],
                      -1,
                      -1);
                    v46 = &v94;
                  }
                  goto LABEL_115;
                }
                if ( v42 == 24576 )
                {
                  v61 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                  pcText = *v27;
                  v46 = (char *)Color::GetDxColor((D3DXCOLOR *)&v86, -1, -1, 0, -1);
                  v47 = pcText;
                  v48 = v61[44].__vecDelDtor;
                  goto LABEL_116;
                }
              }
              else
              {
                if ( v42 == 4112 )
                {
                  v52 = *v27;
                  if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
                  {
                    v60 = CDataReader::GetRecord(
                            (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
                            0x35u);
                    if ( v60 )
                    {
                      Color::GetDxColor(
                        (D3DXCOLOR *)&v92,
                        *((_BYTE *)v60 + 4),
                        *((_BYTE *)v60 + 5),
                        *((_BYTE *)v60 + 6),
                        -1);
                      v46 = &v92;
                    }
                    else
                    {
                      Color::GetDxColor((D3DXCOLOR *)&v92, -1, 0, -1, -1);
                      v46 = &v92;
                    }
                  }
                  else
                  {
                    Color::GetDxColor(
                      (D3DXCOLOR *)&v92,
                      -1,
                      ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0],
                      -1,
                      -1);
                    v46 = &v92;
                  }
                  goto LABEL_115;
                }
                if ( v42 > 4096 )
                {
                  if ( v42 == 4106 )
                  {
                    v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                    pcText = *v27;
                    v74 = 40;
                    v72 = &v88;
                    goto LABEL_56;
                  }
                }
                else
                {
                  if ( v42 == 4096 )
                  {
                    v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                    pcText = *v27;
                    v74 = 37;
                    v72 = &v89;
                    goto LABEL_56;
                  }
                  if ( v42 == 1024 )
                  {
                    v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                    pcText = *v27;
                    v74 = 38;
                    v72 = &v83;
                    goto LABEL_56;
                  }
                  if ( v42 == 2048 )
                  {
                    v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                    pcText = *v27;
                    v74 = 39;
                    v72 = &v77;
LABEL_56:
                    v46 = (char *)ColorInfoTable::GetDxColor((D3DXCOLOR *)v72, v74);
                    v47 = pcText;
                    v48 = v45[44].__vecDelDtor;
LABEL_116:
                    v48((NiRefObject *)v47, (unsigned int)v46);
                    goto LABEL_117;
                  }
                }
              }
            }
            else
            {
              if ( v42 != 512 )
              {
                if ( v42 > 16 )
                {
                  switch ( v42 )
                  {
                    case 32:
                      v74 = 32;
                      v44 = (D3DXCOLOR *)&v76;
LABEL_55:
                      v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pcText = *v27;
                      v72 = (char *)v44;
                      goto LABEL_56;
                    case 64:
                      v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pcText = *v27;
                      v74 = 33;
                      v72 = &v79;
                      goto LABEL_56;
                    case 128:
                      v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pcText = *v27;
                      v74 = 35;
                      v72 = &v87;
                      goto LABEL_56;
                    case 256:
                      v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pcText = *v27;
                      v74 = 14;
                      v72 = &v81;
                      goto LABEL_56;
                    default:
                      goto LABEL_117;
                  }
                  goto LABEL_117;
                }
                if ( v42 != 16 )
                {
                  switch ( v42 )
                  {
                    case 1:
                      v43 = v2->m_kChatID[v29];
                      if ( !v43 )
                      {
                        v74 = 27;
                        v44 = &result;
                        goto LABEL_55;
                      }
                      v49 = ChatColorTab::GetByID(v43);
                      if ( !v49 )
                        goto LABEL_117;
                      v50 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      v51 = v49->ColorG;
                      pcText = *v27;
                      v46 = (char *)Color::GetDxColor((D3DXCOLOR *)&v84, v49->ColorR, v51, v49->ColorB, -1);
                      v47 = pcText;
                      v48 = v50[44].__vecDelDtor;
                      break;
                    case 2:
                      v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pcText = *v27;
                      v74 = 29;
                      v72 = &v90;
                      goto LABEL_56;
                    case 4:
                      v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pcText = *v27;
                      v74 = 36;
                      v72 = &v80;
                      goto LABEL_56;
                    case 8:
                      v45 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      pcText = *v27;
                      v74 = 30;
                      v72 = &v78;
                      goto LABEL_56;
                    default:
                      goto LABEL_117;
                  }
                  goto LABEL_116;
                }
                v52 = *v27;
                if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
                {
                  v53 = CDataReader::GetRecord(
                          (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
                          0x1Fu);
                  if ( v53 )
                  {
                    Color::GetDxColor(
                      (D3DXCOLOR *)&v95,
                      *((_BYTE *)v53 + 4),
                      *((_BYTE *)v53 + 5),
                      *((_BYTE *)v53 + 6),
                      -1);
                    v46 = &v95;
                  }
                  else
                  {
                    Color::GetDxColor((D3DXCOLOR *)&v95, -1, 0, -1, -1);
                    v46 = &v95;
                  }
                }
                else
                {
                  Color::GetDxColor(
                    (D3DXCOLOR *)&v95,
                    -1,
                    ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0],
                    -1,
                    -1);
                  v46 = &v95;
                }
                goto LABEL_115;
              }
              v96 = v2->m_kChatID[v29];
              if ( !v96 )
              {
                v52 = *v27;
                if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
                {
                  v54 = CDataReader::GetRecord(
                          (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
                          0x1Cu);
                  if ( v54 )
                  {
                    Color::GetDxColor(
                      (D3DXCOLOR *)&v91,
                      *((_BYTE *)v54 + 4),
                      *((_BYTE *)v54 + 5),
                      *((_BYTE *)v54 + 6),
                      -1);
                    v46 = &v91;
                  }
                  else
                  {
                    Color::GetDxColor((D3DXCOLOR *)&v91, -1, 0, -1, -1);
                    v46 = &v91;
                  }
                }
                else
                {
                  Color::GetDxColor(
                    (D3DXCOLOR *)&v91,
                    -1,
                    ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0],
                    -1,
                    -1);
                  v46 = &v91;
                }
                goto LABEL_115;
              }
              v55 = 0;
              if ( ITableBase<ChatColor_ChatColorTab>::GetTotal() )
              {
                while ( 1 )
                {
                  v56 = CDataReader::GetRecord((CDataReader *)(ITableBase<ChatColor_ChatColorTab>::ms_pkTable + 4), v55);
                  if ( *(_BYTE *)v56 == v96 )
                    break;
                  ++v55;
                  if ( v55 >= ITableBase<ChatColor_ChatColorTab>::GetTotal() )
                    goto LABEL_117;
                }
                v57 = (*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                v58 = *((_BYTE *)v56 + 3);
                v59 = *((_BYTE *)v56 + 1);
                pcText = *v27;
                v46 = (char *)Color::GetDxColor((D3DXCOLOR *)&v85, v59, *((_BYTE *)v56 + 2), v58, -1);
                v47 = pcText;
                v48 = v57[44].__vecDelDtor;
                goto LABEL_116;
              }
            }
LABEL_117:
            ++v27;
            v16 = *((_BYTE *)fOffset + nTokenInx) == 0;
            fOffset = (char *)fOffset + nTokenInx;
          }
          while ( !v16 );
        }
        nTokenInx = v97;
      }
      else
      {
        ((void (__stdcall *)(_UNKNOWN *))v2->m_aspTextGeom[v8].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(&unk_9BB1EE);
        nTokenInx = v8 - 1;
      }
      --iTextRow;
LABEL_121:
      v14 = iTextRow;
      v8 = nTokenInx;
      goto LABEL_122;
    }
LABEL_131:
    ChatBoardFlex::ClearViewedLineInfo(v2);
  }
}
// A85C00: using guessed type int __security_cookie;
// A9439C: using guessed type int ITableBase_ChatColor_ChatColorTab___ms_pkTable;

//----- (005E77A0) --------------------------------------------------------
bool __thiscall ChatBoardFlex::FindClickItemLink(ChatBoardFlex *this, char *pcharName, int iX, int nLineIndex)
{
  ChatBoardFlex *v4; // esi@1
  int v5; // eax@1
  PgTextGeometry *v6; // edx@1
  unsigned int v7; // edi@1
  int v8; // esi@1
  int v9; // eax@1
  NiRefObjectVtbl *v10; // edx@1
  int (*v11)(void); // eax@1
  int v12; // ebx@1
  int v13; // esi@1
  char *v14; // edi@2
  int v15; // esi@7
  char *v16; // edi@8
  ChatBoardFlex *v17; // edi@14
  int v18; // eax@14
  int v19; // edx@14
  char v20; // cl@15
  unsigned int v21; // ST08_4@16
  char *v22; // eax@16
  char *v23; // edi@18
  char *v24; // esi@20
  int v25; // eax@21
  char v26; // cl@22
  bool v27; // zf@23
  char *v28; // eax@23
  int v29; // edx@23
  char v30; // cl@24
  char *v31; // eax@25
  int v32; // edx@25
  char v33; // cl@26
  char v34; // cl@28
  char v35; // cl@31
  unsigned int v36; // ebx@36
  int v37; // esi@37
  int v38; // eax@41
  int v39; // edx@41
  char v40; // cl@42
  size_t v41; // ST08_4@43
  const char *v42; // eax@43
  int v43; // eax@45
  char v44; // cl@46
  int v45; // esi@48
  int v46; // edx@49
  void *v47; // ebx@50
  int v48; // ecx@51
  int v49; // eax@51
  int *v50; // eax@59
  int v51; // ecx@61
  char *v52; // eax@62
  SHINE_ITEM_STRUCT *v54; // ecx@65
  Item *v55; // eax@67
  Item *v56; // esi@67
  int v57; // [sp+10h] [bp-420h]@18
  unsigned int nViewLinkCnt; // [sp+14h] [bp-41Ch]@1
  int nItemLinkTextIndex; // [sp+18h] [bp-418h]@1
  int nTextClinkLineIndex; // [sp+1Ch] [bp-414h]@1
  signed int pGameFrame; // [sp+20h] [bp-410h]@1
  ChatBoardFlex *thisa; // [sp+24h] [bp-40Ch]@1
  int v63; // [sp+28h] [bp-408h]@1
  char chItemLinkFullText[1024]; // [sp+2Ch] [bp-404h]@1
  unsigned int v65; // [sp+42Ch] [bp-4h]@1
  int v66; // [sp+430h] [bp+0h]@1

  v65 = (unsigned int)&v66 ^ __security_cookie;
  v4 = this;
  thisa = this;
  v63 = nLineIndex;
  v5 = ChatBoardFlex::FindClickTextIndex(this, pcharName, iX, nLineIndex);
  v6 = v4->m_aspTextGeom[nLineIndex].m_pObject;
  v7 = v4->m_pkFont->baseclass_0.m_dwFontSizeInPixel;
  v8 = v4->m_iLineGap;
  nItemLinkTextIndex = v5;
  v9 = v6->m_nTextIndex;
  v10 = thisa->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  nTextClinkLineIndex = v9;
  v11 = (int (*)(void))v10[37].__vecDelDtor;
  v12 = 0;
  pGameFrame = 0;
  nViewLinkCnt = (v11() + 2 * v8) / (v7 + v8);
  memset(chItemLinkFullText, 0, 0x400u);
  v13 = nLineIndex - 1;
  if ( nLineIndex - 1 >= 0 )
  {
    v14 = (char *)&thisa->m_aspTextGeom[v13];
    do
    {
      if ( (*(int (**)(void))(**(_DWORD **)v14 + 152))() )
      {
        if ( nTextClinkLineIndex != *(_DWORD *)(*(_DWORD *)v14 + 328) )
          break;
        ++v12;
      }
      v14 -= 4;
      --v13;
    }
    while ( v13 >= 0 );
  }
  v15 = v63 + 1;
  if ( v63 + 1 < (signed int)nViewLinkCnt )
  {
    v16 = (char *)&thisa->m_aspTextGeom[v15];
    do
    {
      if ( (*(int (**)(void))(**(_DWORD **)v16 + 152))() )
      {
        if ( nTextClinkLineIndex != *(_DWORD *)(*(_DWORD *)v16 + 328) )
          break;
        ++pGameFrame;
      }
      ++v15;
      v16 += 4;
    }
    while ( v15 < (signed int)nViewLinkCnt );
  }
  if ( v12 )
  {
    if ( v12 < 0 )
    {
LABEL_34:
      v17 = thisa;
      goto LABEL_35;
    }
    v57 = v63 - v12;
    v23 = (char *)&thisa->m_aspTextGeom[v63 - v12];
    while ( 1 )
    {
      if ( v57 < 0 )
        return 0;
      v24 = (char *)(*(int (**)(void))(**(_DWORD **)v23 + 152))();
      if ( v24 )
      {
        v25 = (int)chItemLinkFullText;
        do
          v26 = *(_BYTE *)v25++;
        while ( v26 );
        v27 = v25 == (_DWORD)&chItemLinkFullText[1];
        v28 = v24;
        v29 = (int)(v24 + 1);
        if ( v27 )
        {
          do
            v30 = *v28++;
          while ( v30 );
          strncpy(chItemLinkFullText, v24, (unsigned int)&v28[-v29]);
          v31 = v24;
          v32 = (int)(v24 + 1);
          do
            v33 = *v31++;
          while ( v33 );
        }
        else
        {
          do
            v34 = *v28++;
          while ( v34 );
          strncat(chItemLinkFullText, v24, (size_t)&v28[-v29]);
          if ( !v12 )
            goto LABEL_33;
          v31 = v24;
          v32 = (int)(v24 + 1);
          do
            v35 = *v31++;
          while ( v35 );
        }
        nItemLinkTextIndex += (int)&v31[-v32];
      }
LABEL_33:
      ++v57;
      v23 += 4;
      --v12;
      if ( v12 < 0 )
        goto LABEL_34;
    }
  }
  v17 = thisa;
  v18 = ((int (*)(void))thisa->m_aspTextGeom[v63].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)();
  v19 = v18 + 1;
  do
    v20 = *(_BYTE *)v18++;
  while ( v20 );
  v21 = v18 - v19;
  v22 = (char *)((int (*)(void))thisa->m_aspTextGeom[v63].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)();
  strncpy(chItemLinkFullText, v22, v21);
LABEL_35:
  if ( pGameFrame )
  {
    v36 = pGameFrame;
    if ( pGameFrame < (signed int)nViewLinkCnt )
    {
      v37 = (int)&v17->m_aspTextGeom[pGameFrame + v63];
      do
      {
        if ( (signed int)(v36 + v63) >= (signed int)nViewLinkCnt )
          break;
        if ( (*(int (**)(void))(**(_DWORD **)v37 + 152))() )
        {
          if ( nTextClinkLineIndex != *(_DWORD *)(*(_DWORD *)v37 + 328) )
            break;
          v38 = (*(int (**)(void))(**(_DWORD **)v37 + 152))();
          v39 = v38 + 1;
          do
            v40 = *(_BYTE *)v38++;
          while ( v40 );
          v41 = v38 - v39;
          v42 = (const char *)(*(int (**)(void))(**(_DWORD **)v37 + 152))();
          strncat(chItemLinkFullText, v42, v41);
        }
        ++v36;
        v37 += 4;
      }
      while ( (signed int)v36 < (signed int)nViewLinkCnt );
    }
  }
  v43 = (int)chItemLinkFullText;
  do
    v44 = *(_BYTE *)v43++;
  while ( v44 );
  if ( nItemLinkTextIndex >= v43 - (signed int)&chItemLinkFullText[1]
    || (v45 = ChatBoardFlex::FindItemLinkToken(v17, chItemLinkFullText, nItemLinkTextIndex)) == 0
    || (v46 = (int)v17->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead, *(_DWORD *)v46 == v46)
    || (v47 = v17->m_pkFrameWork, (pGameFrame = (signed int)v47) == 0) )
    return 0;
  v48 = v46;
  v49 = *(_DWORD *)(v46 + 4);
  if ( !*(_BYTE *)(v49 + 33) )
  {
    do
    {
      if ( *(_DWORD *)(v49 + 12) >= nTextClinkLineIndex )
      {
        v48 = v49;
        v49 = *(_DWORD *)v49;
      }
      else
      {
        v49 = *(_DWORD *)(v49 + 8);
      }
    }
    while ( !*(_BYTE *)(v49 + 33) );
    v47 = (void *)pGameFrame;
  }
  pGameFrame = v48;
  if ( v48 == v46 || nTextClinkLineIndex < *(_DWORD *)(v48 + 12) )
  {
    v57 = v46;
    v50 = &v57;
  }
  else
  {
    v50 = &pGameFrame;
  }
  v51 = *v50;
  if ( *v50 == v46 || v45 > (*(_DWORD *)(v51 + 20) - *(_DWORD *)(v51 + 16)) / 103 )
    goto LABEL_71;
  v54 = *(SHINE_ITEM_STRUCT **)(v51 + 16);
  if ( v45 - 1 > 0 )
    v54 += v45 - 1;
  v55 = Item::Create(v54);
  v56 = v55;
  if ( !v55 )
  {
LABEL_71:
    v52 = TextData3::Get(0x293B777Fu);
    GameFrameWork::AddSysMsg((GameFrameWork *)v47, v52);
    return 0;
  }
  GameFrameWork::ClickLinkItemInfo((GameFrameWork *)v47, v55, PgWin::ms_iMsX.x, PgWin::ms_iMsY);
  v56->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v56, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (005E7C00) --------------------------------------------------------
void __thiscall ChatBoardFlex::EraseWhisperToken(ChatBoardFlex *this, char *pcStr)
{
  ChatBoardFlex *v2; // edi@1
  ChatBoardFlex::eWisperTokenType v3; // eax@1
  const char *v4; // edi@2
  char *v5; // ecx@2
  unsigned int v6; // edi@2
  bool v7; // cf@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kStr; // [sp+0h] [bp-2Ch]@2
  unsigned int v9; // [sp+1Ch] [bp-10h]@1
  int v10; // [sp+28h] [bp-4h]@2
  int v11; // [sp+2Ch] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  v3 = ChatBoardFlex::GetWhisperTokenType(this, pcStr);
  if ( v3 != 2 )
  {
    v4 = v2->m_pcWhisperToken[v3];
    kStr.baseclass_0._Myres = 15;
    kStr.baseclass_0._Mysize = 0;
    kStr.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kStr, pcStr, strlen(pcStr));
    v10 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(&kStr, 0, strlen(v4));
    v5 = *(char **)&kStr;
    v6 = kStr.baseclass_0._Mysize;
    if ( kStr.baseclass_0._Myres < 0x10 )
      v5 = (char *)&kStr;
    strncpy(pcStr, v5, kStr.baseclass_0._Mysize);
    v7 = kStr.baseclass_0._Myres < 0x10;
    pcStr[v6] = 0;
    if ( !v7 )
      operator delete(*(void **)&kStr);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005E7CF0) --------------------------------------------------------
void __thiscall ChatBoardFlex::DirectMessage(ChatBoardFlex *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ChatBoardFlex *v4; // ebx@1
  PopupMenuText *v5; // eax@5
  char *v6; // eax@5
  PopupMenuText *v7; // eax@5
  char *v8; // eax@5
  PopupMenuText *v9; // eax@5
  char *v10; // eax@8
  PopupMenuText *v11; // eax@8
  char *v12; // eax@9
  char *v13; // eax@11
  PopupMenuText *v14; // eax@11
  bool v15; // zf@11
  char *v16; // eax@12
  PopupMenuText *v17; // eax@12
  char *v18; // eax@12
  PopupMenuText *v19; // eax@12
  char *v20; // eax@12
  PopupMenuText *v21; // eax@12
  char *v22; // eax@13
  char *v23; // eax@14
  PopupMenuText *v24; // eax@14
  int v25; // ecx@14
  bool v26; // sf@18
  int v27; // eax@20
  PgWin *v28; // edi@20
  int v29; // eax@20
  int v30; // ecx@20
  unsigned int v31; // eax@20
  int v32; // edx@20
  unsigned int v33; // eax@20
  double v34; // st7@20
  void *v35; // edi@22
  signed int v36; // eax@25
  unsigned int v37; // eax@34
  void *v38; // edi@34
  char v39; // cl@35
  GameFrameWork *v40; // ecx@36
  int v41; // esi@40
  signed int v42; // eax@45
  GameFrameWork *v43; // ecx@48
  void *v44; // esi@53
  char *v45; // eax@54
  char *v46; // eax@54
  MsgBox *v47; // eax@54
  PgFrameWork *v48; // eax@54
  GameFrameWork *v49; // ebx@55
  char *v50; // eax@55
  int v51; // edx@56
  int v52; // ecx@56
  unsigned int v53; // edx@56
  PgMsg::Frame *v54; // ecx@56
  void *v55; // esi@58
  char *v56; // eax@59
  char *v57; // eax@59
  MsgBox *v58; // eax@59
  PgFrameWork *v59; // eax@59
  PgWin *v60; // esi@61
  int v61; // eax@62
  int v62; // eax@63
  int v63; // eax@64
  GameFrameWork *v64; // ebx@68
  char *v65; // eax@68
  int v66; // edx@70
  int v67; // ecx@70
  unsigned int v68; // edx@70
  PgMsg::Frame *v69; // ecx@70
  int v70; // ecx@71
  char *v71; // edx@71
  unsigned int v72; // ecx@71
  PgMsg::Frame *v73; // edx@71
  GameFrameWork *v74; // ecx@71
  unsigned int v75; // [sp-14h] [bp-894h]@11
  PgWin *v76; // [sp-10h] [bp-890h]@11
  char *v77; // [sp-Ch] [bp-88Ch]@11
  unsigned int v78; // [sp-8h] [bp-888h]@11
  PgMsg::Frame *v79; // [sp-4h] [bp-884h]@11
  int iX; // [sp+Ch] [bp-874h]@2
  int iY; // [sp+10h] [bp-870h]@2
  int i; // [sp+14h] [bp-86Ch]@18
  unsigned int fYMax; // [sp+18h] [bp-868h]@20
  void *iStringLen; // [sp+1Ch] [bp-864h]@19
  float charName; // [sp+20h] [bp-860h]@20
  Name5 thisa; // [sp+24h] [bp-85Ch]@62
  PgMsg::Frame pkFrameCancelMsg; // [sp+38h] [bp-848h]@20
  char acWhisper[1024]; // [sp+4Ch] [bp-834h]@34
  char name[1024]; // [sp+44Ch] [bp-434h]@25
  PgMsg::Frame kCancelMsg; // [sp+84Ch] [bp-34h]@4
  char v91; // [sp+860h] [bp-20h]@4
  char acName[21]; // [sp+864h] [bp-1Ch]@54
  unsigned int v93; // [sp+87Ch] [bp-4h]@1
  int v94; // [sp+880h] [bp+0h]@1

  v93 = (unsigned int)&v94 ^ __security_cookie;
  v4 = this;
  if ( !(*((_BYTE *)this - 204) & 1) )
  {
    iX = PgWin::ms_iMsX.x;
    iY = PgWin::ms_iMsY;
    switch ( iMsgTag )
    {
      case 5:
        if ( !ChatBoardFlex::IsMouseOverNameText((ChatBoardFlex *)((char *)this - 232))
          || (Name5::n_string((Name5 *)&v4->m_ViewedIndex[34], (char *)&kCancelMsg),
              v91 = 0,
              !strcmp(
                 (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(),
                 (const char *)&kCancelMsg)) )
          return;
        (*(void (__stdcall **)(int, int))(*(_DWORD *)v4->m_ViewedIndex[33] + 308))(PgWin::ms_iMsX.x, PgWin::ms_iMsY);
        PopupMenuWin::Clear((PopupMenuWin *)v4->m_ViewedIndex[33]);
        v5 = PopupMenuText::CreateWin((char *)&kCancelMsg, 0, 0, 0, 0, 0, 1);
        v5->baseclass_0.m_ePopupMenuID = 9;
        PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v5->baseclass_0);
        v6 = TextData::Get(0xF54E1743u);
        v7 = PopupMenuText::CreateWin(v6, 0, 0, 0, 0, 0, 0);
        v7->baseclass_0.m_ePopupMenuID = 18;
        PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v7->baseclass_0);
        v8 = TextData::Get(0x1B50368Cu);
        v9 = PopupMenuText::CreateWin(v8, 0, 0, 0, 0, 0, 0);
        v9->baseclass_0.m_ePopupMenuID = 1001;
        PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v9->baseclass_0);
        if ( !RaidInfo::IsMeRaidMember(&g_kRaidinfo) )
        {
          v12 = TextData::Get(0x353D9AAAu);
          v11 = PopupMenuText::CreateWin(v12, 0, 0, 0, 0, 0, 0);
          v11->baseclass_0.m_ePopupMenuID = 2;
          goto LABEL_10;
        }
        if ( g_kRaidinfo.m_bIsMeRaidLeader || g_kRaidinfo.m_bIsMeRaidSubLeader )
        {
          v10 = TextData2::Get(0xFAF92532u);
          v11 = PopupMenuText::CreateWin(v10, 0, 0, 0, 0, 0, 0);
          v11->baseclass_0.m_ePopupMenuID = 1021;
LABEL_10:
          PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v11->baseclass_0);
        }
        v13 = TextData::Get(0xE42F3F31u);
        v14 = PopupMenuText::CreateWin(v13, 0, 0, 0, 0, 0, 0);
        v14->baseclass_0.m_ePopupMenuID = 1002;
        PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v14->baseclass_0);
        v15 = *(_BYTE *)(v4->m_ViewedIndex[30] + 152) == 0;
        v79 = 0;
        v78 = 0;
        v77 = 0;
        v76 = 0;
        v75 = 0;
        if ( v15 )
        {
          v22 = TextData2::Get(0xEC03F7F6u);
          v21 = PopupMenuText::CreateWin(v22, 0, v75, v76, v77, v78, (bool)v79);
          v21->baseclass_0.m_ePopupMenuID = 13;
        }
        else
        {
          v16 = TextData2::Get(0xF3F14845u);
          v17 = PopupMenuText::CreateWin(v16, 0, v75, v76, v77, v78, (bool)v79);
          v17->baseclass_0.m_ePopupMenuID = 11;
          PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v17->baseclass_0);
          v18 = TextData2::Get(0xDD014A28u);
          v19 = PopupMenuText::CreateWin(v18, 0, 0, 0, 0, 0, 0);
          v19->baseclass_0.m_ePopupMenuID = 14;
          PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v19->baseclass_0);
          v20 = TextData2::Get(0xA5F8EBE7u);
          v21 = PopupMenuText::CreateWin(v20, 0, 0, 0, 0, 0, 0);
          v21->baseclass_0.m_ePopupMenuID = 12;
        }
        PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v21->baseclass_0);
        v23 = TextData::Get(0xDDE7EBEFu);
        v24 = PopupMenuText::CreateWin(v23, 0, 0, 0, 0, 0, 0);
        v24->baseclass_0.m_ePopupMenuID = 9;
        PopupMenuWin::AddMenu((PopupMenuWin *)v4->m_ViewedIndex[33], &v24->baseclass_0);
        v25 = v4->m_ViewedIndex[33];
        if ( *(_DWORD *)(v25 + 416) )
        {
          PopupMenuWin::FinishMenu((PopupMenuWin *)v25, 0);
          PgWinMgr::OpenPopupWin(&Pgg_kWinMgr, 0, (PgWin *)v4->m_ViewedIndex[33]);
          (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4->m_ViewedIndex[33] + 240))(v4->m_ViewedIndex[33], 1);
        }
        else
        {
          PopupMenuWin::Clear((PopupMenuWin *)v25);
        }
        break;
      case 2:
        if ( LOBYTE(this->m_ViewedIndex[32]) )
        {
          (*(void (__thiscall **)(char *, int *, int *))(*((_DWORD *)this - 58) + 224))((char *)this - 232, &iX, &iY);
          v15 = LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) == 0;
          v26 = SLODWORD(v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) < 0;
          i = 0;
          if ( !(v26 | v15) )
          {
            iStringLen = &v4->m_bSystemWindow;
            while ( 1 )
            {
              (*(void (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 148))((char *)v4 - 232);
              v27 = *((_DWORD *)v4 - 58);
              v28 = v4->baseclass_0.m_pkToolTipParentWin;
              LODWORD(charName) = *(_DWORD *)(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[0][2])
                                            + 224);
              v29 = (*(int (__thiscall **)(char *))(v27 + 148))((char *)v4 - 232);
              fYMax = (v29 + 2 * (signed int)v28) % (unsigned int)((char *)v28 + LODWORD(charName));
              charName = (double)fYMax;
              v30 = *(_DWORD *)iStringLen;
              v31 = *(_DWORD *)(*(_DWORD *)iStringLen + 88);
              pkFrameCancelMsg.m_uiFrameWParam = *(_DWORD *)(*(_DWORD *)iStringLen + 92);
              v32 = *(_DWORD *)v30;
              pkFrameCancelMsg.m_uiFrameMsg = v31;
              pkFrameCancelMsg.m_uiFramelParam = *(_DWORD *)(v30 + 96);
              charName = *(float *)&pkFrameCancelMsg.m_uiFrameWParam + charName;
              v33 = (*(int (**)(void))(v32 + 160))();
              v34 = charName;
              *(float *)&fYMax = (double)v33 + charName;
              charName = (double)iY;
              if ( charName > v34 )
              {
                if ( *(float *)&fYMax > (double)charName )
                  break;
              }
              iStringLen = (char *)iStringLen + 4;
              ++i;
              if ( i >= SLODWORD(v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) )
                return;
            }
            v35 = (void *)(*(int (**)(void))(**((_DWORD **)&v4->m_bSystemWindow + i) + 152))();
            LODWORD(charName) = v35;
            if ( ChatBoardFlex::FindClickItemLink((ChatBoardFlex *)((char *)v4 - 232), (char *)v35, iX, i) )
            {
LABEL_38:
              ChatBoardFlex::ms_bClickLog = 1;
            }
            else
            {
              if ( v35 )
              {
                if ( *(_BYTE *)v35 == 91 )
                {
                  iStringLen = (void *)strlen((const char *)v35);
                  name[0] = 0;
                  memset(&name[1], 0, 0x3FFu);
                  v36 = 0;
                  if ( (signed int)iStringLen > 0 )
                  {
                    fYMax = 1 - LODWORD(charName);
                    i = (int)&name[-LODWORD(charName)];
                    while ( iStringLen != (char *)v35 + fYMax )
                    {
                      if ( *(_BYTE *)v35 == 93 )
                      {
                        if ( v36 <= 2 )
                          return;
                        acWhisper[v36 + 1023] = 0;
                        ChatBoardFlex::EraseWhisperToken((ChatBoardFlex *)((char *)v4 - 232), name);
                        strcpy(acWhisper, "/w ");
                        memset(&acWhisper[4], 0, 0x3FCu);
                        v37 = strlen(name) + 1;
                        v38 = (char *)&pkFrameCancelMsg.m_uiFramelParam + 3;
                        do
                        {
                          v39 = *((_BYTE *)v38 + 1);
                          v38 = (char *)v38 + 1;
                        }
                        while ( v39 );
                        memcpy(v38, name, v37);
                        v40 = (GameFrameWork *)v4->m_ViewedIndex[30];
                        if ( v40 )
                          GameFrameWork::OnOpenAutoWhisperChat(v40, acWhisper);
                        goto LABEL_38;
                      }
                      *((_BYTE *)v35 + i) = *(_BYTE *)(v36++ + LODWORD(charName) + 1);
                      v35 = (char *)v35 + 1;
                      if ( v36 >= (signed int)iStringLen )
                        return;
                    }
                  }
                }
              }
            }
          }
        }
        return;
      case 27:
        if ( this->m_ViewedIndex[39] )
        {
          v41 = this->m_ViewedIndex[39];
          if ( v41 )
          {
            if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) && v41 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v41)(v41, 1);
            v4->m_ViewedIndex[39] = 0;
          }
        }
        return;
      case 15:
        v42 = *(_DWORD *)pvBody;
        if ( *(_DWORD *)pvBody > 9 )
        {
          if ( v42 > 18 )
          {
            v62 = v42 - 1001;
            if ( v62 )
            {
              v63 = v62 - 1;
              if ( v63 )
              {
                if ( v63 == 19 )
                {
                  if ( g_kRaidinfo.m_bIsMeRaidSubLeader || g_kRaidinfo.m_bIsMeRaidLeader )
                  {
                    Name5::n_string((Name5 *)&this->m_ViewedIndex[34], acName);
                    fYMax = (unsigned int)&v75;
                    acName[20] = 0;
                    Name5::Name5((Name5 *)&v75, acName);
                    GameFrameWork::NcRaidInvitationReq((GameFrameWork *)v4->m_ViewedIndex[30], *(Name5 *)&v75);
                  }
                  else
                  {
                    v64 = (GameFrameWork *)this->m_ViewedIndex[30];
                    v65 = TextData2::Get(0x42A0111u);
                    GameFrameWork::AddSysMsg(v64, v65);
                  }
                }
              }
              else
              {
                v66 = this->m_ViewedIndex[35];
                v75 = this->m_ViewedIndex[34];
                v67 = this->m_ViewedIndex[36];
                v76 = (PgWin *)v66;
                v68 = v4->m_ViewedIndex[37];
                v77 = (char *)v67;
                v69 = (PgMsg::Frame *)v4->m_ViewedIndex[38];
                v78 = v68;
                v79 = v69;
                GameFrameWork::NcChatRestrictAddReq((GameFrameWork *)v4->m_ViewedIndex[30], *(Name5 *)&v75);
              }
            }
            else
            {
              v70 = this->m_ViewedIndex[35];
              v75 = v4->m_ViewedIndex[34];
              v71 = (char *)v4->m_ViewedIndex[36];
              v76 = (PgWin *)v70;
              v72 = v4->m_ViewedIndex[37];
              v77 = v71;
              v73 = (PgMsg::Frame *)v4->m_ViewedIndex[38];
              v78 = v72;
              v74 = (GameFrameWork *)v4->m_ViewedIndex[30];
              v79 = v73;
              GameFrameWork::NcFriendSetReq(v74, *(Name5 *)&v75);
            }
          }
          else
          {
            if ( v42 == 18 )
            {
              Name5::n_string((Name5 *)&this->m_ViewedIndex[34], acName);
              acName[20] = 0;
              v60 = PgWin::GetParentWin((PgWin *)((char *)v4 - 232));
              if ( v60 )
              {
                Name5::Name5(&thisa, acName);
                *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)v61;
                *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)(v61 + 8);
                *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)(v61 + 16);
                ChatDisplayWin2::OnWhisperTab((ChatDisplayWin2 *)v60, 1);
              }
            }
            else
            {
              switch ( v42 )
              {
                case 11:
                  if ( !this->m_ViewedIndex[39] )
                  {
                    v44 = operator new(0x14u);
                    if ( v44 )
                    {
                      *((_DWORD *)v44 + 4) = 0;
                      *((_DWORD *)v44 + 3) = 0;
                      *((_DWORD *)v44 + 2) = 0;
                      *((_DWORD *)v44 + 1) = 0;
                      *(_DWORD *)v44 = 0;
                      Name5::operator_((Name5 *)v44, (Name5 *)&v4->m_ViewedIndex[34]);
                      Name5::n_string((Name5 *)&v4->m_ViewedIndex[34], acName);
                      acName[20] = 0;
                      v45 = TextData2::Get(0x8303E8DAu);
                      v46 = fs(v45);
                      v47 = MsgBox::Modeless(MSGBOX_OKCANCEL, v46);
                      NiPointer<PopupMenuWin>::operator_(
                        (NiPointer<NiD3DDefaultShader> *)&v4->m_ViewedIndex[39],
                        (NiD3DDefaultShader *)v47);
                      kCancelMsg.m_uiFrameMsg = 256;
                      kCancelMsg.m_uiFramelParam = (unsigned int)v44;
                      pkFrameCancelMsg.m_uiFrameMsg = 257;
                      pkFrameCancelMsg.m_uiFramelParam = (unsigned int)v44;
                      v48 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                      v79 = &pkFrameCancelMsg;
                      MsgBox::SetFrameWorkMsgOnClose(
                        (MsgBox *)v4->m_ViewedIndex[39],
                        v48,
                        &kCancelMsg,
                        &pkFrameCancelMsg);
                      (**(void (__thiscall ***)(_DWORD, _DWORD))(v4->m_ViewedIndex[39] + 232))(
                        v4->m_ViewedIndex[39] + 232,
                        v4 != (ChatBoardFlex *)232 ? (int)v4 : 0);
                    }
                  }
                  break;
                case 12:
                  Name5::n_string((Name5 *)&this->m_ViewedIndex[34], acName);
                  v49 = (GameFrameWork *)v4->m_ViewedIndex[30];
                  acName[20] = 0;
                  v50 = fs("&pfind %s");
                  GameFrameWork::NcActChatReq(v49, v50);
                  break;
                case 13:
                  v51 = this->m_ViewedIndex[35];
                  v75 = this->m_ViewedIndex[34];
                  v52 = this->m_ViewedIndex[36];
                  v76 = (PgWin *)v51;
                  v53 = v4->m_ViewedIndex[37];
                  v77 = (char *)v52;
                  v54 = (PgMsg::Frame *)v4->m_ViewedIndex[38];
                  v78 = v53;
                  v79 = v54;
                  GameFrameWork::NcMiscSpammerReportReq((GameFrameWork *)v4->m_ViewedIndex[30], *(Name5 *)&v75);
                  break;
                case 14:
                  if ( !this->m_ViewedIndex[39] )
                  {
                    v55 = operator new(0x14u);
                    if ( v55 )
                    {
                      *((_DWORD *)v55 + 4) = 0;
                      *((_DWORD *)v55 + 3) = 0;
                      *((_DWORD *)v55 + 2) = 0;
                      *((_DWORD *)v55 + 1) = 0;
                      *(_DWORD *)v55 = 0;
                      Name5::operator_((Name5 *)v55, (Name5 *)&v4->m_ViewedIndex[34]);
                      Name5::n_string((Name5 *)&v4->m_ViewedIndex[34], acName);
                      acName[20] = 0;
                      v56 = TextData2::Get(0x1E60957Bu);
                      v57 = fs(v56);
                      v58 = MsgBox::Modeless(MSGBOX_OKCANCEL, v57);
                      NiPointer<PopupMenuWin>::operator_(
                        (NiPointer<NiD3DDefaultShader> *)&v4->m_ViewedIndex[39],
                        (NiD3DDefaultShader *)v58);
                      pkFrameCancelMsg.m_uiFrameMsg = 258;
                      pkFrameCancelMsg.m_uiFramelParam = (unsigned int)v55;
                      kCancelMsg.m_uiFrameMsg = 259;
                      kCancelMsg.m_uiFramelParam = (unsigned int)v55;
                      v59 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                      v79 = &kCancelMsg;
                      MsgBox::SetFrameWorkMsgOnClose(
                        (MsgBox *)v4->m_ViewedIndex[39],
                        v59,
                        &pkFrameCancelMsg,
                        &kCancelMsg);
                      (**(void (__thiscall ***)(_DWORD, _DWORD))(v4->m_ViewedIndex[39] + 232))(
                        v4->m_ViewedIndex[39] + 232,
                        v4 != (ChatBoardFlex *)232 ? (int)v4 : 0);
                    }
                  }
                  goto LABEL_60;
                default:
                  return;
              }
            }
          }
        }
        else
        {
          if ( *(_DWORD *)pvBody == 9 )
          {
LABEL_60:
            PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v4->m_ViewedIndex[33]);
          }
          else
          {
            if ( v42 == 2 )
            {
              Name5::n_string((Name5 *)&this->m_ViewedIndex[34], (char *)&kCancelMsg);
              v43 = (GameFrameWork *)v4->m_ViewedIndex[30];
              v91 = 0;
              GameFrameWork::NcPartyJoinReq(v43, (char *)&kCancelMsg);
            }
          }
        }
        return;
      default:
        return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A99E7E: using guessed type bool ChatBoardFlex__ms_bClickLog;

//----- (005E8930) --------------------------------------------------------
bool __thiscall ChatBoardFlex::DeleteItemLinkInfo(ChatBoardFlex *this)
{
  ChatBoardFlex *v1; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v3; // edi@1
  bool v4; // al@2
  signed int v5; // edx@3
  int v6; // esi@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > result; // [sp+8h] [bp-4h]@4

  v1 = this;
  v2 = this->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > >)v2->_Left;
  if ( v2->_Left == v2 )
  {
    v4 = 0;
  }
  else
  {
    v5 = (signed int)((unsigned __int64)(333589693i64
                                       * (*(_DWORD *)(*(_DWORD *)&v3 + 20) - *(_DWORD *)(*(_DWORD *)&v3 + 16))) >> 32) >> 3;
    v6 = v5 + ((unsigned int)v5 >> 31);
    if ( v6 )
      std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(
        &this->m_mapItemLinkInfo.baseclass_0,
        &result,
        v3);
    v1->m_nChatItemLinkCnt -= v6;
    v4 = 1;
  }
  return v4;
}

//----- (005E8990) --------------------------------------------------------
void __thiscall ChatBoardFlex::AddItemLinkInfo(ChatBoardFlex *this, ChatBoardFlex::Type eType, SHINE_ITEM_STRUCT *pItem)
{
  ChatBoardFlex *v3; // esi@1
  int v4; // eax@5
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v5; // eax@6
  std::pair<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Val; // [sp+0h] [bp-38h]@6
  std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > vecItem; // [sp+14h] [bp-24h]@6
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> result; // [sp+24h] [bp-14h]@6
  int v9; // [sp+34h] [bp-4h]@6

  v3 = this;
  if ( pItem
    && eType & this->m_uiOption
    && (this->m_nChatItemLinkCnt < this->m_nMaxItemLinkCnt || ChatBoardFlex::DeleteItemLinkInfo(this)) )
  {
    v4 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::find(
                       &v3->m_mapItemLinkInfo.baseclass_0,
                       (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)&eType,
                       &v3->m_iTopIndex)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v4 == v3->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      *(_DWORD *)&vecItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      vecItem.baseclass_0._Mylast = 0;
      vecItem.baseclass_0._Myend = 0;
      v9 = 0;
      std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::push_back(&vecItem, pItem);
      _Val.baseclass_0.first = v3->m_iTopIndex;
      std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
        &_Val.baseclass_0.second,
        &vecItem);
      LOBYTE(v9) = 1;
      v5 = std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Buynode<std::pair<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>(
             &v3->m_mapItemLinkInfo.baseclass_0.baseclass_0,
             &_Val);
      std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Linsert(
        &v3->m_mapItemLinkInfo.baseclass_0,
        &result,
        v5,
        0);
      if ( *(_DWORD *)&_Val.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] )
        operator delete(*(void **)&_Val.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
      if ( *(_DWORD *)&vecItem )
        operator delete(*(void **)&vecItem);
    }
    else
    {
      std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::push_back(
        (std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)(v4 + 16),
        pItem);
    }
    ++v3->m_nChatItemLinkCnt;
  }
}

//----- (005E8AB0) --------------------------------------------------------
void __thiscall ChatBoardFlex::_ChatBoardFlex(ChatBoardFlex *this)
{
  ChatBoardFlex *v1; // esi@1
  int i; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v3; // ST0C_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v4; // ST08_4@3
  MsgBox *v5; // edi@3
  NiNode *v6; // edi@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > result; // [sp+0h] [bp-18h]@3
  std::map<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > > > *v8; // [sp+4h] [bp-14h]@3
  ChatBoardFlex *v9; // [sp+8h] [bp-10h]@1
  int v10; // [sp+14h] [bp-4h]@1

  v1 = this;
  v9 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatBoardFlex::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatBoardFlex::_vftable_;
  v10 = 0;
  for ( i = 0; i < v1->m_MaxTextLine; ++i )
    operator delete__(v1->m_apcText[i]);
  operator delete__(v1->m_apcText);
  v8 = &v1->m_mapItemLinkInfo;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > >)v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > >)v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v10) = 4;
  std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(
    &v1->m_mapItemLinkInfo.baseclass_0,
    &result,
    v4,
    v3);
  operator delete(v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v5 = v1->m_spMsgBox.m_pObject;
  LOBYTE(v10) = 2;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  LOBYTE(v10) = 1;
  _eh_vector_destructor_iterator_(
    v1->m_aspTextGeom,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v6 = v1->m_spTextOffset.m_pObject;
  LOBYTE(v10) = 0;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v10 = -1;
  PgWin::_PgWin(&v1->baseclass_0);
}
// 9BB28C: using guessed type int (__stdcall *ChatBoardFlex___vftable_)(int uiFlags);
// 9BB2AC: using guessed type int (__thiscall *ChatBoardFlex___vftable_)(void *p, char);

//----- (005E8BE0) --------------------------------------------------------
void __thiscall ChatBoardFlex::ChatBoardFlex(ChatBoardFlex *this)
{
  ChatBoardFlex *v1; // esi@1
  void *v2; // eax@1
  NiNode *v3; // edi@2
  MsgBox *v4; // edi@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v5; // [sp-2Ch] [bp-50h]@12
  int v6; // [sp-1Ch] [bp-40h]@12
  signed int v7; // [sp-18h] [bp-3Ch]@12
  unsigned int v8; // [sp-14h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-24h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // [sp+Ch] [bp-18h]@12
  ChatBoardFlex *v11; // [sp+10h] [bp-14h]@1
  char *_What; // [sp+14h] [bp-10h]@13
  int v13; // [sp+20h] [bp-4h]@1

  v1 = this;
  v11 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatBoardFlex::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatBoardFlex::_vftable_;
  v13 = 0;
  v1->m_spTextOffset.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_aspTextGeom,
    4u,
    40,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  *(_DWORD *)&v1->m_selectedChar.n5_name[16] = 0;
  *(_DWORD *)&v1->m_selectedChar.n5_name[12] = 0;
  *(_DWORD *)&v1->m_selectedChar.n5_name[8] = 0;
  *(_DWORD *)&v1->m_selectedChar.n5_name[4] = 0;
  *(_DWORD *)&v1->m_selectedChar.n5_name[0] = 0;
  v1->m_spMsgBox.m_pObject = 0;
  v8 = 36;
  LOBYTE(v13) = 3;
  v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(v8);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapItemLinkInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v13) = 4;
  v1->m_pkFont = 0;
  v1->m_uiTotal = 0;
  v1->m_iTopIndex = 0;
  v1->m_iBottomIndex = 0;
  v1->m_iViewIndex = -1;
  v1->m_aeType = 0;
  v1->m_auiTextAlloc = 0;
  v1->m_apcText = 0;
  v1->m_apcSetTextTime = 0;
  v1->m_MaxTextLine = 0;
  v1->m_FilterType = 0;
  v1->m_MaxTextViewLine = 40;
  *(_WORD *)&v1->m_Filter = 0;
  ChatBoardFlex::ClearViewedLineInfo(v1);
  v1->m_uiViewLineCount = -1;
  v3 = v1->m_spTextOffset.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spTextOffset.m_pObject = 0;
  }
  v1->m_uiOption = -1;
  v1->m_fOldTime = 0.0;
  v1->m_iLineGap = 4;
  v1->m_bLButtonEnable = 0;
  v1->m_bSystemWindow = 0;
  v4 = v1->m_spMsgBox.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spMsgBox.m_pObject = 0;
  }
  v10 = &v5;
  v1->m_pcWhisperToken[0] = "From ";
  v1->m_pcWhisperToken[1] = "To ";
  v1->m_kTextColorID = 0;
  v1->m_kChatID = 0;
  v1->m_nChatItemLinkCnt = 0;
  v7 = 15;
  v6 = 0;
  v5.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v5, "ItemLinkTabLimit", 0x10u);
  v1->m_nMaxItemLinkCnt = CSingleDataMap::GetValue(&g_kSingleDataMap, v5);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9BB28C: using guessed type int (__stdcall *ChatBoardFlex___vftable_)(int uiFlags);
// 9BB2AC: using guessed type int (__thiscall *ChatBoardFlex___vftable_)(void *p, char);

//----- (005E8E40) --------------------------------------------------------
ChatBoardFlex *__cdecl ChatBoardFlex::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgFont *pkFont, bool bLButtonEnable, PgWin *pkParent)
{
  void *v7; // eax@1
  int v8; // eax@2
  int v9; // esi@2
  PgWin *v10; // edi@8
  ChatBoardFlex *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x2FCu);
  result.m_pObject = (PgWin *)v7;
  v13 = 0;
  if ( v7 )
  {
    ChatBoardFlex::ChatBoardFlex((ChatBoardFlex *)v7);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)(v9 + 4));
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, unsigned int, unsigned int, PgFont *, _DWORD, PgWin *))(*(_DWORD *)v9 + 452))(
                          v9,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkFont,
                          bLButtonEnable,
                          pkParent) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    v11 = (ChatBoardFlex *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}

//----- (005E8F90) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (005E8FF0) --------------------------------------------------------
SHINE_ITEM_STRUCT *__thiscall std::allocator<SHINE_ITEM_STRUCT>::allocate(std::allocator<SHINE_ITEM_STRUCT> *this, unsigned int _Count)
{
  SHINE_ITEM_STRUCT *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x27C4597 || (result = (SHINE_ITEM_STRUCT *)operator new(103 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (005E9050) --------------------------------------------------------
SHINE_ITEM_STRUCT *__cdecl std::_Uninit_move<SHINE_ITEM_STRUCT___SHINE_ITEM_STRUCT___std::allocator<SHINE_ITEM_STRUCT>_SHINE_ITEM_STRUCT>(SHINE_ITEM_STRUCT *_First, SHINE_ITEM_STRUCT *_Last, SHINE_ITEM_STRUCT *_Dest, std::allocator<SHINE_ITEM_STRUCT> *_Al, SHINE_ITEM_STRUCT *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  SHINE_ITEM_STRUCT *v6; // edx@1
  SHINE_ITEM_STRUCT *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
      memcpy(result, v6, 0x67u);
    ++v6;
  }
  return result;
}

//----- (005E9090) --------------------------------------------------------
SHINE_ITEM_STRUCT *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>_SHINE_ITEM_STRUCT___std::allocator<SHINE_ITEM_STRUCT>>(std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _First, std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > _Last, SHINE_ITEM_STRUCT *_Dest, std::allocator<SHINE_ITEM_STRUCT> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > v5; // edx@1
  SHINE_ITEM_STRUCT *result; // eax@1

  v5 = _First;
  for ( result = _Dest; v5 != _Last; ++result )
  {
    if ( result )
      memcpy(result, *(const void **)&v5, 0x67u);
    *(_DWORD *)&v5 += 103;
  }
  return result;
}

//----- (005E90D0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::find(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *result, const int *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (005E9140) --------------------------------------------------------
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::reserve(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, unsigned int _Count)
{
  std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v2; // esi@1
  void *v3; // eax@4
  SHINE_ITEM_STRUCT *v4; // ST04_4@4
  SHINE_ITEM_STRUCT *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // ecx@6
  char *v9; // edi@6
  int v10; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v12; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@4

  v12 = &v10;
  v2 = this;
  if ( _Count > 0x27C4597 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 103 < _Count )
  {
    v3 = std::allocator<SHINE_ITEM_STRUCT>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(SHINE_ITEM_STRUCT **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v13 = 0;
    std::_Uninit_move<SHINE_ITEM_STRUCT___SHINE_ITEM_STRUCT___std::allocator<SHINE_ITEM_STRUCT>_SHINE_ITEM_STRUCT>(
      v5,
      v4,
      (SHINE_ITEM_STRUCT *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((unsigned __int64)(333589693i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    v8 = _Ptr;
    v9 = &_Ptr[103 * v7];
    v2->baseclass_0._Myend = (SHINE_ITEM_STRUCT *)&_Ptr[103 * _Count];
    v2->baseclass_0._Mylast = (SHINE_ITEM_STRUCT *)v9;
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (005E9230) --------------------------------------------------------
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *_Right)
{
  std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v2; // esi@1
  int v3; // edi@1
  SHINE_ITEM_STRUCT *v4; // eax@4
  std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > v5; // ecx@4
  std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > v6; // ST00_4@4
  int v7; // [sp-10h] [bp-24h]@1
  std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *thisa; // [sp+0h] [bp-14h]@1
  int *v9; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@4

  v9 = &v7;
  v2 = this;
  thisa = (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)this;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  v3 = (signed int)((char *)_Right->baseclass_0._Mylast - *(_DWORD *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0])
     / 103;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  if ( v3 )
  {
    if ( (unsigned int)v3 > 0x27C4597 )
      std::_Xlength_error("vector<T> too long");
    v4 = std::allocator<SHINE_ITEM_STRUCT>::allocate(&this->baseclass_0._Alval, v3);
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v4;
    v2->baseclass_0._Mylast = v4;
    v2->baseclass_0._Myend = &v4[v3];
    v5 = (std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > >)_Right->baseclass_0._Mylast;
    v6 = *(std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
    v10 = 0;
    v2->baseclass_0._Mylast = std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>_SHINE_ITEM_STRUCT___std::allocator<SHINE_ITEM_STRUCT>>(
                                v6,
                                v5,
                                v4,
                                &v2->baseclass_0._Alval,
                                (std::_Nonscalar_ptr_iterator_tag)_Right);
  }
}

//----- (005E9310) --------------------------------------------------------
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Reserve(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 103;
  if ( 41698711 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 103;
  if ( v3 > v4 )
  {
    if ( 41698711 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::reserve(this, v5);
  }
}

//----- (005E9390) --------------------------------------------------------
void __thiscall std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::push_back(std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this, SHINE_ITEM_STRUCT *_Val)
{
  SHINE_ITEM_STRUCT *v2; // esi@1
  std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *v3; // ebx@1
  SHINE_ITEM_STRUCT *v4; // ecx@1
  signed int v5; // edx@3
  int v6; // esi@3
  void *v7; // edi@8
  int v8; // edi@9
  int v9; // esi@9

  v2 = _Val;
  v3 = this;
  v4 = this->baseclass_0._Mylast;
  if ( _Val >= v4 || *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v4 == v3->baseclass_0._Myend )
      std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Reserve(v3, 1u);
  }
  else
  {
    v5 = (signed int)((unsigned __int64)(333589693i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v6 = v5 + ((unsigned int)v5 >> 31);
    if ( v4 == v3->baseclass_0._Myend )
      std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Reserve(v3, 1u);
    v2 = (SHINE_ITEM_STRUCT *)(*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + 103 * v6);
  }
  v7 = v3->baseclass_0._Mylast;
  if ( v7 )
  {
    memcpy(v7, v2, 0x64u);
    v9 = (int)((char *)&v2->itemattr.binditem.portal[9].y + 1);
    v8 = (int)((char *)v7 + 100);
    *(_WORD *)v8 = *(_WORD *)v9;
    *(_BYTE *)(v8 + 2) = *(_BYTE *)(v9 + 2);
  }
  ++v3->baseclass_0._Mylast;
}

//----- (005E9400) --------------------------------------------------------
void __thiscall std::pair<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>::_pair<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>(std::pair<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *this)
{
  std::pair<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *v1; // esi@1

  v1 = this;
  if ( *(_DWORD *)&this->baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.second.baseclass_0._Mylast = 0;
  v1->baseclass_0.second.baseclass_0._Myend = 0;
}

//----- (005E9430) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v6; // edi@6
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v7; // edx@6
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v10; // eax@13
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v11; // edx@14
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v12; // esi@14
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v13; // esi@15
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v14; // edx@18
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v15; // esi@20
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v16; // esi@22
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v17; // edx@26
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v18; // esi@26
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v19; // edi@26
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v20; // edi@28
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v21; // edi@30
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v22; // esi@33
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v23; // edx@36
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v24; // esi@36
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v25; // esi@38
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v26; // esi@40
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v27; // edi@46
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v28; // edi@48
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v29; // ecx@54
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *v30; // eax@54

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0xCCCCCCB )
  {
    if ( *(_DWORD *)&_Newnode->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    *(_DWORD *)&_Newnode->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    _Newnode->_Myval.baseclass_0.second.baseclass_0._Mylast = 0;
    _Newnode->_Myval.baseclass_0.second.baseclass_0._Myend = 0;
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v6 = _Newnode;
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    v8 = this->baseclass_0.baseclass_0._Myhead;
LABEL_12:
    v8->_Right = _Newnode;
    goto LABEL_13;
  }
  if ( !_Addleft )
  {
    _Wherenode->_Right = _Newnode;
    v8 = this->baseclass_0.baseclass_0._Myhead;
    if ( _Wherenode != v8->_Right )
      goto LABEL_13;
    goto LABEL_12;
  }
  _Wherenode->_Left = _Newnode;
  v9 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v9->_Left )
    v9->_Left = _Newnode;
LABEL_13:
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_52:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_52;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (005E9670) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(...)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@61
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *v17; // eax@63
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 33) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 33) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 33) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 33) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v6;
      else
        v10->_Right = std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 33) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 32);
  *(_BYTE *)(*(_DWORD *)&v5 + 32) = *(_BYTE *)(*(_DWORD *)&v3 + 32);
  *(_BYTE *)(*(_DWORD *)&v3 + 32) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 32) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 32) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 32) )
        {
          *(_BYTE *)(v15 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 33) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 32) = 1;
            *(_BYTE *)(v15 + 32) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 32) = *(_BYTE *)(*(_DWORD *)&v6 + 32);
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 32) )
        {
          *(_BYTE *)(v15 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 33) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 32) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) = 1;
            *(_BYTE *)(v15 + 32) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 32) = *(_BYTE *)(*(_DWORD *)&v6 + 32);
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 32) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 32) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 32) = 1;
  }
  if ( *(_DWORD *)(*(_DWORD *)&_Erasednode + 16) )
    operator delete(*(void **)(*(_DWORD *)&_Erasednode + 16));
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 16) = 0;
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 20) = 0;
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 24) = 0;
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 > 0 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (005E98E0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v2; // esi@1
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *i; // edi@1
  SHINE_ITEM_STRUCT *v5; // ecx@2

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    v5 = 0;
    if ( *(_DWORD *)&v2->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      operator delete(*(void **)&v2->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
      v5 = 0;
    }
    *(_DWORD *)&v2->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
    v2->_Myval.baseclass_0.second.baseclass_0._Mylast = v5;
    v2->_Myval.baseclass_0.second.baseclass_0._Myend = v5;
    operator delete(v2);
  }
}

//----- (005E9940) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Linsert(...)
{
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *v4; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v5; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v6; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v7; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v8; // edi@1
  bool v9; // cl@1
  const int v10; // edx@2
  int v11; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> *v12; // eax@12
  int v13; // ecx@15
  int v14; // edx@18
  bool _Addleft; // [sp+18h] [bp+Ch]@1

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = v5;
  v8 = _Node;
  v9 = 1;
  _Addleft = 1;
  if ( !v6->_Isnil )
  {
    v10 = v8->_Myval.baseclass_0.first;
    do
    {
      v7 = v6;
      if ( _Leftish )
        v9 = v6->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v6->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  *(_DWORD *)&_Leftish = v7;
  if ( v9 )
  {
    if ( v7 == v4->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v11 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Insert(
                          v4,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)&_Leftish,
                          1,
                          v7,
                          v8)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v12 = result;
      result->baseclass_0.second = 1;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
      return v12;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Leftish);
  }
  if ( *(_DWORD *)(_Leftish + 12) >= v8->_Myval.baseclass_0.first )
  {
    if ( *(_DWORD *)&v8->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v8->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    *(_DWORD *)&v8->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v8->_Myval.baseclass_0.second.baseclass_0._Mylast = 0;
    v8->_Myval.baseclass_0.second.baseclass_0._Myend = 0;
    operator delete(v8);
    v12 = result;
    v14 = _Leftish;
    result->baseclass_0.second = 0;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
  }
  else
  {
    v13 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Insert(
                        v4,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)&_Leftish,
                        _Addleft,
                        v7,
                        v8)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v12 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v13;
    result->baseclass_0.second = 1;
  }
  return v12;
}

//----- (005E9A30) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Buynode<std::pair<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>(std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::pair<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > *_Val)
{
  std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *result; // eax@1
  char *v4; // edx@3
  char *v5; // ecx@3
  std::exception thisa; // [sp+0h] [bp-18h]@6

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)operator new(0x24u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)-12 )
  {
    v4 = (char *)&_Val->baseclass_0.second;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    v5 = (char *)&result->_Myval.baseclass_0.second;
    *(_DWORD *)&result->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result->_Myval.baseclass_0.second.baseclass_0._Mylast = 0;
    result->_Myval.baseclass_0.second.baseclass_0._Myend = 0;
    if ( (char *)&result->_Myval.baseclass_0.second != v4 )
    {
      *(_DWORD *)v5 = 0;
      result->_Myval.baseclass_0.second.baseclass_0._Mylast = 0;
      result->_Myval.baseclass_0.second.baseclass_0._Myend = 0;
      *(_DWORD *)v5 = *(_DWORD *)v4;
      result->_Myval.baseclass_0.second.baseclass_0._Mylast = (SHINE_ITEM_STRUCT *)*((_DWORD *)v4 + 1);
      result->_Myval.baseclass_0.second.baseclass_0._Myend = (SHINE_ITEM_STRUCT *)*((_DWORD *)v4 + 2);
      *(_DWORD *)v4 = 0;
      *((_DWORD *)v4 + 1) = 0;
      *((_DWORD *)v4 + 2) = 0;
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (005E9B00) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 33) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 33) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 33);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 33);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > >)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Erase(
      v4,
      v5->_Parent);
    v4->baseclass_0.baseclass_0._Myhead->_Parent = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Left = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Right = v4->baseclass_0.baseclass_0._Myhead;
    v7 = v4->baseclass_0.baseclass_0._Myhead;
    v8 = result;
    v4->baseclass_0.baseclass_0._Mysize = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7->_Left;
  }
  return v8;
}

//----- (005E9BC0) --------------------------------------------------------
void __thiscall std::map<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>>::_map<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>>(std::map<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > > > *this)
{
  std::map<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (005E9C20) --------------------------------------------------------
void *__thiscall ChatBoardFlex::_vector_deleting_destructor_(ChatBoardFlex *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ChatBoardFlex::_ChatBoardFlex(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005E9C50) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnUp(ChatDisplayWin *this)
{
  ChatBoardFlex::ViewLineUp(this->m_pkActiveChatBD);
}

//----- (005E9C60) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnDown(ChatDisplayWin *this)
{
  ChatBoardFlex::ViewLineDown(this->m_pkActiveChatBD);
}

//----- (005E9C70) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnMostDown(ChatDisplayWin *this)
{
  ChatBoardFlex::ViewLineMostDown(this->m_pkActiveChatBD);
}

//----- (005E9C80) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddNormalChat(ChatDisplayWin *this, char *pcFormat, char kChatID)
{
  ChatBoardFlex::AddUserChat(this->m_pkActiveChatBD, pcFormat, kChatID);
}

//----- (005E9C90) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddOtherNormalChat(ChatDisplayWin *this, char *pcFormat, char kChatID)
{
  ChatBoardFlex::Add(this->m_pkActiveChatBD, (ChatBoardFlex::Type)512, pcFormat, kChatID);
}

//----- (005E9CB0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddNormalChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatBoardFlex::AddUserChat(this->m_pkActiveChatBD, pcFormat);
}

//----- (005E9CC0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddOtherNormalChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatBoardFlex::Add(this->m_pkActiveChatBD, (ChatBoardFlex::Type)512, pcFormat);
}

//----- (005E9CE0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddGMNormalChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatBoardFlex::AddGMUserChat(this->m_pkActiveChatBD, pcFormat);
}

//----- (005E9CF0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddGMOtherNormalChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatBoardFlex::Add(this->m_pkActiveChatBD, (ChatBoardFlex::Type)1024, pcFormat);
}

//----- (005E9D10) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddGMShoutChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)2048, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E9D70) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddGMWhisperChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)4106, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E9DD0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddShoutChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, COLUMN, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E9E30) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddWhisperChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)8, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E9E90) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddPartyChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)16, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E9EF0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddGuildChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)32, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E9F50) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddOtherPartyChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)16, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005E9FB0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddOtherGuildChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)32, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA010) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddGuildAcademyChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)4096, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA070) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddOtherGuildAcademyChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)4096, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA0D0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddRaidChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)8192, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA130) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddOtherRaidChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)8192, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA190) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddSystemChat(ChatDisplayWin *this, const char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)4, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA1F0) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddAuthorChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)128, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA250) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddBattleChat(ChatDisplayWin *this, char *pcFormat)
{
  ChatDisplayWin *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)256, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA2B0) --------------------------------------------------------
void __thiscall ChatDisplayWin::GetSize(ChatDisplayWin *this, unsigned int *ruiWidth, unsigned int *ruiHeight)
{
  ChatDisplayWin *v3; // esi@1

  v3 = this;
  *ruiWidth = ((int (*)(void))this->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  *ruiHeight = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
}

//----- (005EA2F0) --------------------------------------------------------
void __thiscall ChatDisplayWin::SetSize(ChatDisplayWin *this, unsigned int uiWidth, unsigned int uiHeight)
{
  ChatDisplayWin *v3; // esi@1
  unsigned int v4; // ST18_4@1
  int v5; // edi@1
  int v6; // ebx@1
  int v7; // ST18_4@1
  int v8; // eax@1
  FrameBoxWin *v9; // ecx@1
  int v10; // eax@1
  FrameBoxWin *v11; // ecx@1
  FrameBoxWin *v12; // eax@1
  int v13; // eax@2
  DirectUserMsgBody_SizeDrag kDrag; // [sp+10h] [bp-14h]@1
  unsigned int v15; // [sp+20h] [bp-4h]@1
  int v16; // [sp+24h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = this;
  v4 = ((int (*)(void))this->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
     - uiWidth;
  v5 = v4
     + ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v6 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
     - v4;
  v7 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  ((void (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  ((void (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v8 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v9 = v3->m_pkChattingBox;
  kDrag.iDeltaWidth = v6 - v8;
  kDrag.iDeltaHeight = uiHeight
                     - ((int (*)(void))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v10 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v11 = v3->m_pkChattingBox;
  kDrag.iDeltaLeft = v5 - v10;
  kDrag.iDeltaTop = v7
                  - ((int (*)(void))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  ((void (__stdcall *)(unsigned int, unsigned int))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    uiWidth,
    uiHeight);
  v12 = v3->m_pkChattingBox;
  if ( v12 )
    v13 = (int)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  else
    v13 = 0;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectMessage(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    14,
    &kDrag,
    (IDirectMessenger *)v13);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EA430) --------------------------------------------------------
void __thiscall ChatDisplayWin::SetDefaultSize(ChatDisplayWin *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    this->m_uiDefaultWidth,
    this->m_uiDefaultHeight);
}

//----- (005EA450) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnChatCommand(ChatDisplayWin *this)
{
  ChatDisplayWin *v1; // ebx@1
  PgWinSpr *v2; // eax@2
  NiRefObjectVtbl *v3; // esi@2
  char v4; // al@2
  int v5; // edi@2
  int v6; // esi@3
  unsigned __int8 v7; // al@3
  signed int v8; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkChatCommandSprWin )
  {
    v2 = this->m_pkChatCommandSprWin;
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
    v3[64].__vecDelDtor((NiRefObject *)v1->m_pkChatCommandSprWin, v4 == 0);
    v5 = (int)v1->m_pkChatCmdBut;
    v8 = 8;
    do
    {
      v6 = **(_DWORD **)v5;
      v7 = ((int (*)(void))v1->m_pkChatCommandSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      (*(void (__thiscall **)(_DWORD, _DWORD))(v6 + 256))(*(_DWORD *)v5, v7);
      v5 += 4;
      --v8;
    }
    while ( v8 );
  }
}

//----- (005EA4E0) --------------------------------------------------------
void __thiscall ChatDisplayWin::_ChatDisplayWin(ChatDisplayWin *this)
{
  ChatDisplayWin *v1; // esi@1
  EditWin *v2; // edi@1
  PopupMenuWin *v3; // edi@6
  PopupMenuWin *v4; // edi@11
  PopupMenuWin *v5; // edi@16
  PopupMenuWin *v6; // edi@21
  PopupMenuWin *v7; // edi@25
  PopupMenuWin *v8; // edi@29
  EditWin *v9; // edi@33
  NiMaterialProperty *v10; // edi@37
  NiMaterialProperty *v11; // edi@41

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatDisplayWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatDisplayWin::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spEdit.m_pObject = 0;
  }
  PgWinMgr::DestroyWin(
    &Pgg_kWinMgr,
    &v1->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v3 = v1->m_spChatFilterPopupMenu.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spChatFilterPopupMenu.m_pObject = 0;
  }
  v4 = v1->m_spChatPopupMenu.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spChatPopupMenu.m_pObject = 0;
  }
  v5 = v1->m_spChatModePopupMenu.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spChatModePopupMenu.m_pObject = 0;
  }
  v6 = v1->m_spChatPopupMenu.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spChatModePopupMenu.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  v8 = v1->m_spChatFilterPopupMenu.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  v9 = v1->m_spEdit.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  v10 = v1->m_spFixedMtrlProp.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_spMtrlProp.m_pObject;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_aspChatBD,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9BB6F0: using guessed type int (__stdcall *ChatDisplayWin___vftable_)(int uiFlags);
// 9BB70C: using guessed type int (__thiscall *ChatDisplayWin___vftable_)(void *p, char);

//----- (005EA730) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnReport(ChatDisplayWin *this)
{
  GameFrameWork::OpenReportWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005EA740) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnTab(ChatDisplayWin *this)
{
  ChatDisplayWin *v1; // esi@1
  int v2; // eax@1
  PgWinBut *v3; // ecx@1
  PopupMenuWin *v4; // edi@1
  int v5; // ebx@1
  int v6; // eax@1
  PgWinProxy *v7; // ecx@1
  int x; // [sp+Ch] [bp-8h]@1
  int y; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = ((int (*)(void))this->m_pkTabBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v3 = v1->m_pkTabBtn;
  v4 = v1->m_spChatModePopupMenu.m_pObject;
  x = v2;
  v5 = ((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v6 = ((int (__thiscall *)(PopupMenuWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4);
  v7 = v1->m_pkLTSocketWin;
  y = v5 - v6;
  ((void (__stdcall *)(int *, int *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(
    &x,
    &y);
  ((void (__stdcall *)(int, int))v1->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    x,
    y);
  PgWinMgr::OpenPopupWin(
    &Pgg_kWinMgr,
    0,
    &v1->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
}

//----- (005EA7E0) --------------------------------------------------------
void __thiscall ChatDisplayWin::ChatStart(ChatDisplayWin *this, const char *szText)
{
  ChatDisplayWin *v2; // esi@1

  v2 = this;
  ((void (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  if ( szText )
    ((void (__stdcall *)(_DWORD))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(szText);
}

//----- (005EA830) --------------------------------------------------------
bool __thiscall ChatDisplayWin::IsDuringEdit(ChatDisplayWin *this)
{
  return ((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)();
}

//----- (005EA840) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnEditEnd(ChatDisplayWin *this, unsigned int wParam, int lParam)
{
  ChatDisplayWin *v3; // esi@1
  char *v4; // edi@1
  unsigned int v5; // eax@2
  int v6; // eax@3
  char *v7; // [sp-8h] [bp-10h]@5
  char *v8; // [sp-4h] [bp-Ch]@5

  v3 = this;
  v4 = (char *)((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
  if ( wParam != 1 )
    goto LABEL_9;
  v5 = v3->m_uiChatMode;
  if ( v5 )
  {
    v6 = v5 - 2;
    if ( v6 )
    {
      if ( v6 != 1 )
        goto LABEL_9;
      v8 = 0;
      v7 = "/g ";
    }
    else
    {
      v8 = 0;
      v7 = "/p ";
    }
  }
  else
  {
    v8 = 0;
    v7 = 0;
  }
  GameFrameWork::DecodingChat((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v4, v7, v8);
LABEL_9:
  if ( v4 )
  {
    ((void (__stdcall *)(_DWORD))v3->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkChatKorMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (005EA8E0) --------------------------------------------------------
unsigned int __thiscall ChatDisplayWin::GetOption(ChatDisplayWin *this)
{
  return this->m_aspChatBD[0].m_pObject->m_uiOption;
}

//----- (005EA8F0) --------------------------------------------------------
void __thiscall ChatDisplayWin::SetOption(ChatDisplayWin *this, unsigned int uiOpt)
{
  ChatDisplayWin *v2; // edi@1
  char *v3; // esi@1
  int v4; // esi@4
  int v5; // esi@7
  int v6; // esi@10
  int v7; // esi@13
  int v8; // esi@16
  int v9; // esi@19
  DirectUserMsgBody_PopupMenuSetCheckBox kBody; // [sp+Ch] [bp-8h]@1

  v2 = this;
  this->m_aspChatBD[0].m_pObject->m_uiOption = uiOpt;
  v3 = (char *)&this->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 17;
  kBody.bCheck = uiOpt & 1;
  if ( *((_DWORD *)v3 + 1) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v3 + 1) + 4))(
      16,
      &kBody,
      v3);
    if ( *((_DWORD *)v3 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v3 + 1) + 16))(
        16,
        &kBody,
        v3);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(*(_DWORD *)v3 + 16))(
    v3,
    16,
    &kBody,
    v3);
  v4 = (int)&v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 18;
  kBody.bCheck = (uiOpt >> 3) & 1;
  if ( *(_DWORD *)(v4 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v4 + 4) + 4))(
      16,
      &kBody,
      v4);
    if ( *(_DWORD *)(v4 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v4 + 4) + 16))(
        16,
        &kBody,
        v4);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v4 + 16))(
    v4,
    16,
    &kBody,
    v4);
  v5 = (int)&v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 19;
  kBody.bCheck = (uiOpt >> 4) & 1;
  if ( *(_DWORD *)(v5 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 4))(
      16,
      &kBody,
      v5);
    if ( *(_DWORD *)(v5 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 16))(
        16,
        &kBody,
        v5);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v5 + 16))(
    v5,
    16,
    &kBody,
    v5);
  v6 = (int)&v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 20;
  kBody.bCheck = (uiOpt >> 5) & 1;
  if ( *(_DWORD *)(v6 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 4))(
      16,
      &kBody,
      v6);
    if ( *(_DWORD *)(v6 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 16))(
        16,
        &kBody,
        v6);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v6 + 16))(
    v6,
    16,
    &kBody,
    v6);
  v7 = (int)&v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 21;
  kBody.bCheck = (uiOpt >> 12) & 1;
  if ( *(_DWORD *)(v7 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 4))(
      16,
      &kBody,
      v7);
    if ( *(_DWORD *)(v7 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 16))(
        16,
        &kBody,
        v7);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v7 + 16))(
    v7,
    16,
    &kBody,
    v7);
  v8 = (int)&v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 26;
  kBody.bCheck = BYTE1(uiOpt) & 1;
  if ( *(_DWORD *)(v8 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v8 + 4) + 4))(
      16,
      &kBody,
      v8);
    if ( *(_DWORD *)(v8 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v8 + 4) + 16))(
        16,
        &kBody,
        v8);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v8 + 16))(
    v8,
    16,
    &kBody,
    v8);
  v9 = (int)&v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 25;
  kBody.bCheck = (uiOpt >> 2) & 1;
  if ( *(_DWORD *)(v9 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v9 + 4) + 4))(
      16,
      &kBody,
      v9);
    if ( *(_DWORD *)(v9 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v9 + 4) + 16))(
        16,
        &kBody,
        v9);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v9 + 16))(
    v9,
    16,
    &kBody,
    v9);
}

//----- (005EAB90) --------------------------------------------------------
void __thiscall ChatDisplayWin::AddOption(ChatDisplayWin *this, unsigned int uiOpt)
{
  this->m_aspChatBD[0].m_pObject->m_uiOption |= uiOpt;
}

//----- (005EABB0) --------------------------------------------------------
void __thiscall ChatDisplayWin::RemoveOption(ChatDisplayWin *this, unsigned int uiOpt)
{
  this->m_aspChatBD[0].m_pObject->m_uiOption &= ~uiOpt;
}

//----- (005EABD0) --------------------------------------------------------
char *__thiscall ChatDisplayWin::GetCurrentChatText(ChatDisplayWin *this)
{
  return (char *)((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
}

//----- (005EABE0) --------------------------------------------------------
bool __thiscall ChatDisplayWin::IsAutoHideOptionSetted(ChatDisplayWin *this)
{
  return byte_B5BB46 == 0;
}
// B5BB46: using guessed type char byte_B5BB46;

//----- (005EABF0) --------------------------------------------------------
char __thiscall ChatDisplayWin::GetCursorStateOnPanel(ChatDisplayWin *this)
{
  char v1; // bl@1
  FrameBoxWin *v3; // ecx@3

  v1 = 0;
  if ( this->m_kAlphaControl.fAlphaValue < 1.0 )
    return 0;
  v3 = this->m_pkChattingBox;
  if ( v3 )
  {
    if ( v3->m_bIsDuringSizeDrag )
      return 2;
    if ( FrameBoxWin::SizeDragHitTest(v3) )
      v1 = 1;
  }
  return v1;
}

//----- (005EAC30) --------------------------------------------------------
void __thiscall ChatDisplayWin::ChatDisplayWin(ChatDisplayWin *this)
{
  ChatDisplayWin *v1; // esi@1
  PopupMenuWin *v2; // ebx@1
  PopupMenuWin *v3; // ebx@6
  PopupMenuWin *v4; // ebx@11

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatDisplayWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatDisplayWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_aspChatBD,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spMtrlProp.m_pObject = 0;
  v1->m_spFixedMtrlProp.m_pObject = 0;
  v1->m_spEdit.m_pObject = 0;
  v1->m_spChatFilterPopupMenu.m_pObject = 0;
  v1->m_spChatModePopupMenu.m_pObject = 0;
  v1->m_spChatPopupMenu.m_pObject = 0;
  v1->m_kAlphaControl.fTimeLeftToAppear = 1.0;
  v1->m_uiChattingBoxWidthMinusEditBoxWidth = 0;
  v1->m_pkLTSocketWin = 0;
  v1->m_kAlphaControl.fAlphaValue = 0.0;
  v1->m_pkLBSocketWin = 0;
  v1->m_pkRBSocketWin = 0;
  v2 = v1->m_spChatFilterPopupMenu.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spChatFilterPopupMenu.m_pObject = 0;
  }
  v3 = v1->m_spChatPopupMenu.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spChatPopupMenu.m_pObject = 0;
  }
  v4 = v1->m_spChatModePopupMenu.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spChatModePopupMenu.m_pObject = 0;
  }
  v1->m_uiChatMode = 0;
  v1->m_pkReportText = 0;
  v1->m_pkReportTabBtn = 0;
  v1->m_pkChatCommandSprWin = 0;
}
// 9BB6F0: using guessed type int (__stdcall *ChatDisplayWin___vftable_)(int uiFlags);
// 9BB70C: using guessed type int (__thiscall *ChatDisplayWin___vftable_)(void *p, char);

//----- (005EAD90) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnActive(ChatDisplayWin *this, unsigned int uiIndex)
{
  ChatDisplayWin *v2; // esi@1
  ChatBoardFlex *v3; // ecx@1
  char *v4; // eax@6
  PgWinText *v5; // ecx@6
  unsigned int v6; // [sp-4h] [bp-Ch]@2

  v2 = this;
  v3 = this->m_aspChatBD[uiIndex].m_pObject;
  v2->m_pkActiveChatBD = v3;
  ChatBoardFlex::SetSystemWindow(v3, 1);
  v2->m_uiActiveChatBoardIndex = uiIndex;
  switch ( uiIndex )
  {
    case 0u:
      v6 = -284875477;
      goto LABEL_6;
    case 1u:
      v6 = -179431613;
      goto LABEL_6;
    case 2u:
      v6 = -167392443;
      goto LABEL_6;
    case 3u:
      v6 = -285417689;
LABEL_6:
      v4 = TextData::Get(v6);
      v5 = v2->m_pkTabText;
      if ( v5 )
        ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v4);
      break;
    default:
      return;
  }
}

//----- (005EAE10) --------------------------------------------------------
void __thiscall ChatDisplayWin::UpdateMeWin(ChatDisplayWin *this, float fCurTime)
{
  signed int v2; // edi@0
  double v3; // st7@1
  double v4; // st6@1
  ChatDisplayWin *v5; // esi@1
  ChatBoardFlex *v6; // ecx@3
  bool v7; // c0@5
  double v8; // st7@5
  ChatBoardFlex *v9; // ecx@6
  FrameBoxWin *v10; // ecx@7
  PgWinBut *v11; // ecx@15
  PgWinBut *v12; // ecx@17
  PgWinBut *v13; // ecx@19
  PopupMenuWin *v14; // ecx@21
  PopupMenuWin *v15; // ecx@24
  FrameBoxWin *v16; // ecx@28
  double v17; // st7@29
  PgWinBut *v18; // ecx@31
  PgWinBut *v19; // ecx@33
  char *v20; // eax@38
  NiMaterialProperty *v21; // eax@38
  NiMaterialProperty *v22; // eax@41
  PgWinBut *v23; // ecx@45
  PgWinBut *v24; // ecx@47
  NiMaterialProperty *v25; // eax@54
  PgWinText *v26; // ecx@55
  PgWinText *v27; // ecx@57
  PgFrameWork *v28; // eax@59
  signed int v29; // [sp+4Ch] [bp-Ch]@10
  signed int v30; // [sp+50h] [bp-8h]@1
  float fSin; // [sp+60h] [bp+8h]@30
  float fSina; // [sp+60h] [bp+8h]@38
  float fSinb; // [sp+60h] [bp+8h]@50

  v3 = fCurTime;
  v4 = 0.1000000014901161;
  v5 = this;
  v30 = v2;
  if ( this->m_pkScrollUpBtn->m_eButShow == 1 && v3 - this->m_fScUpTimeWhenPushed > 0.1000000014901161 )
  {
    do
    {
      v6 = v5->m_pkActiveChatBD;
      v5->m_fScUpTimeWhenPushed = v4 + v5->m_fScUpTimeWhenPushed;
      ChatBoardFlex::ViewLineUp(v6);
      v3 = fCurTime;
      v4 = 0.1000000014901161;
    }
    while ( fCurTime - v5->m_fScUpTimeWhenPushed > 0.1000000014901161 );
  }
  if ( v5->m_pkScrollDnBtn->m_eButShow == 1 )
  {
    v7 = v4 < v3 - v5->m_fScDnTimeWhenPushed;
    v8 = v4;
    if ( v7 )
    {
      do
      {
        v9 = v5->m_pkActiveChatBD;
        v5->m_fScDnTimeWhenPushed = v8 + v5->m_fScDnTimeWhenPushed;
        ChatBoardFlex::ViewLineDown(v9);
        v8 = 0.1000000014901161;
      }
      while ( fCurTime - v5->m_fScDnTimeWhenPushed > 0.1000000014901161 );
    }
  }
  v10 = v5->m_pkChatEditBox;
  if ( v10
    && (unsigned __int8)((int (*)(void))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    if ( EditWin::GetImeStatus(v5->m_spEdit.m_pObject) == 2 )
    {
      v29 = 1;
    }
    else
    {
      v29 = 0;
      if ( EditWin::GetImeStatus(v5->m_spEdit.m_pObject) == 1 )
      {
        ((void (__stdcall *)(_DWORD, signed int))v5->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          0,
          v2);
        v30 = 1;
        goto LABEL_12;
      }
    }
    ((void (__stdcall *)(signed int, signed int))v5->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      v29,
      v2);
    v30 = 0;
LABEL_12:
    ((void (*)(void))v5->m_pkChatKorMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
  }
  if ( (unsigned __int8)((int (__stdcall *)(int, int))v5->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (unsigned __int8)((int (__thiscall *)(ChatDisplayWin *, int, int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          v5,
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v11 = v5->m_pkReportTabBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v12 = v5->m_pkTabBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v13 = v5->m_pkFilterBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v14 = v5->m_spChatFilterPopupMenu.m_pObject) != 0
    && (unsigned __int8)((int (*)(void))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    && (unsigned __int8)((int (__stdcall *)(int, int))v5->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v15 = v5->m_spChatModePopupMenu.m_pObject) != 0
    && (unsigned __int8)((int (*)(void))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || (unsigned __int8)((int (*)(void))v5->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || (unsigned __int8)((int (__thiscall *)(ChatDisplayWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(v5) )
  {
    if ( v5->m_kAlphaControl.fTimeLeftToAppear > 0.0 )
      v5->m_kAlphaControl.fTimeLeftToAppear = v5->m_kAlphaControl.fTimeLeftToAppear - Timer::ms_fDeltaTime;
    if ( v5->m_kAlphaControl.fTimeLeftToAppear <= 0.0 )
    {
      ((void (__stdcall *)(signed int, signed int))v5->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        1,
        v30);
      v23 = v5->m_pkTabBtn;
      if ( v23 )
        ((void (__stdcall *)(signed int))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v24 = v5->m_pkReportTabBtn;
      if ( v24 )
        ((void (__stdcall *)(signed int))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__thiscall *)(ChatDisplayWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v5);
      if ( v5->m_kAlphaControl.fAlphaValue < 1.0 )
      {
        fSinb = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime + v5->m_kAlphaControl.fAlphaValue;
        v5->m_kAlphaControl.fAlphaValue = fSinb;
        if ( fSinb > 1.0 )
          v5->m_kAlphaControl.fAlphaValue = 1.0;
        if ( v5->m_kAlphaControl.fAlphaValue < 1.0 )
          JUMPOUT(*(int *)loc_5EB298);
        v25 = v5->m_spMtrlProp.m_pObject;
        ++v25->m_uiRevID;
        v25->m_fAlpha = 1.0;
      }
    }
  }
  else
  {
    v16 = v5->m_pkChattingBox;
    if ( !v16->m_bIsDuringSizeDrag )
    {
      v17 = 0.0;
      if ( v5->m_kAlphaControl.fAlphaValue <= 0.0 )
      {
        ((void (__stdcall *)(_DWORD))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v5,
          0);
        v22 = v5->m_spMtrlProp.m_pObject;
        v22->m_fAlpha = 0.0;
        ++v22->m_uiRevID;
      }
      else
      {
        fSin = v5->m_kAlphaControl.fAlphaValue - (Timer::ms_fDeltaTime + Timer::ms_fDeltaTime);
        v5->m_kAlphaControl.fAlphaValue = fSin;
        if ( fSin <= 0.0 )
        {
          v5->m_kAlphaControl.fAlphaValue = 0.0;
          v5->m_kAlphaControl.fTimeLeftToAppear = 1.0;
          ((void (__stdcall *)(_DWORD, signed int))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
            0,
            v30);
          v18 = v5->m_pkTabBtn;
          if ( v18 )
            ((void (__stdcall *)(_DWORD))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          v19 = v5->m_pkReportTabBtn;
          if ( v19 )
            ((void (__stdcall *)(_DWORD))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          ((void (__thiscall *)(ChatDisplayWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v5);
          v17 = 0.0;
        }
        if ( v17 < v5->m_kAlphaControl.fAlphaValue )
          JUMPOUT(*(int *)loc_5EB12C);
        fSina = v17;
        v20 = fs("%f\n");
        OutputDebugStringA(v20);
        v21 = v5->m_spMtrlProp.m_pObject;
        ++v21->m_uiRevID;
        v21->m_fAlpha = fSina;
      }
    }
  }
  v26 = v5->m_pkTabText;
  if ( v26 )
    ((void (__stdcall *)(_DWORD))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v5->m_spMtrlProp.m_pObject->m_fAlpha);
  v27 = v5->m_pkReportText;
  if ( v27 )
    ((void (__stdcall *)(_DWORD))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v5->m_spMtrlProp.m_pObject->m_fAlpha);
  v28 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v28 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v28, v5->m_pkChattingBox, v5->m_pkActiveChatBD);
}
// 5EAE10: could not find valid save-restore pair for edi
// 5EB12C: using guessed type int __stdcall(float fSin);
// 5EB298: using guessed type int __stdcall(float fSin);
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (005EB330) --------------------------------------------------------
void __cdecl MoveChildrenWin(PgWin *pkWin, int x, int y)
{
  PgWin *v3; // esi@1
  unsigned int i; // ebx@2
  int v5; // edi@3
  int v6; // eax@3
  NiPointer<NiAVObject> *v7; // ecx@4
  int v8; // eax@5
  unsigned int uiPos; // [sp+4h] [bp-4h]@1

  uiPos = 0;
  v3 = PgWin::GetNextChildWin(pkWin, &uiPos);
  if ( v3 )
  {
    for ( i = uiPos; ; ++i )
    {
      v5 = x
         + ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
      v6 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v3,
        v5,
        y + v6);
      if ( i >= pkWin->baseclass_0.m_kChildren.m_uiSize )
        break;
      while ( 1 )
      {
        v7 = pkWin->baseclass_0.m_kChildren.m_pBase;
        v3 = (PgWin *)v7[i].m_pObject;
        if ( v3 )
        {
          v8 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v7[i].m_pObject);
          if ( v8 )
            break;
        }
LABEL_8:
        ++i;
        if ( i >= pkWin->baseclass_0.m_kChildren.m_uiSize )
          return;
      }
      while ( (NiRTTI *)v8 != &PgWin::m_RTTI )
      {
        v8 = *(_DWORD *)(v8 + 4);
        if ( !v8 )
          goto LABEL_8;
      }
    }
  }
}

//----- (005EB3E0) --------------------------------------------------------
void __thiscall ChatDisplayWin::SetChatMode(ChatDisplayWin *this, unsigned int uiChatMode)
{
  ChatDisplayWin *v2; // edi@1
  unsigned int v3; // esi@1
  char *v4; // ebx@5
  CClientGuild *v5; // eax@10
  char *v6; // ebx@11
  PgWinText *v7; // edi@17
  unsigned int v8; // [sp-4h] [bp-10h]@2
  char *pcText; // [sp+14h] [bp+8h]@5

  v2 = this;
  v3 = this->m_uiChatMode;
  this->m_uiChatMode = uiChatMode;
  switch ( uiChatMode )
  {
    case 0u:
      v8 = -284875477;
      goto LABEL_16;
    case 1u:
      v8 = -179431613;
      goto LABEL_16;
    case 2u:
      if ( g_kParty.m_uiTotalMember )
      {
        v8 = -167392443;
        goto LABEL_16;
      }
      pcText = TextData::Get(0xEF05252Bu);
      v2->m_uiChatMode = v3;
      v4 = TextData::Get(0x7D9CEEE9u);
      if ( v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v4,
          &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v4,
            &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        v4,
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      break;
    case 3u:
      v5 = GuildTask::GetGuild();
      if ( CClientGuild::AmIGuildMember(v5) )
      {
        v8 = -285417689;
LABEL_16:
        pcText = TextData::Get(v8);
      }
      else
      {
        pcText = TextData::Get(0xEF05252Bu);
        v2->m_uiChatMode = v3;
        v6 = TextData::Get(0x76816B99u);
        if ( v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            v6,
            &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
          if ( v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              v6,
              &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        }
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
          &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
          25,
          v6,
          &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      break;
    default:
      this->m_uiChatMode = 0;
      return;
  }
  v7 = v2->m_pkTabText;
  if ( v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v7,
      (unsigned int)pcText);
}

//----- (005EB550) --------------------------------------------------------
bool __thiscall ChatDisplayWin::Create(ChatDisplayWin *this, PgFrameWork *pkFrameWork)
{
  ChatDisplayWin *v2; // esi@1
  NiNode *v3; // esi@2
  bool v4; // zf@4
  bool result; // al@7
  NiTexturePalette *v6; // ebx@8
  char *v7; // eax@10
  void *v8; // eax@11
  int v9; // eax@12
  NiMaterialProperty *v10; // edi@14
  int v11; // eax@19
  NiMaterialProperty *v12; // eax@21
  int v13; // ecx@21
  NiMaterialProperty *v14; // eax@21
  int v15; // edx@21
  NiMaterialProperty *v16; // eax@21
  int v17; // ecx@21
  NiMaterialProperty *v18; // eax@21
  void *v19; // eax@21
  int v20; // eax@22
  NiMaterialProperty *v21; // edi@24
  int v22; // eax@29
  NiMaterialProperty *v23; // eax@31
  int v24; // ecx@31
  NiMaterialProperty *v25; // eax@31
  int v26; // edx@31
  NiMaterialProperty *v27; // eax@31
  int v28; // ecx@31
  NiSourceTexture *v29; // edx@31
  NiMaterialProperty *v30; // eax@31
  PgSprData *v31; // eax@31
  PgFrameWork *v32; // edi@31
  NiNode *v33; // esi@32
  int v34; // ebx@37
  int v35; // ecx@39
  NiSourceTexture *v36; // eax@39
  FrameBoxWin *v37; // eax@39
  int v38; // ST30_4@39
  int v39; // ecx@39
  PgFont *v40; // eax@39
  FrameBoxWin *v41; // ecx@40
  unsigned int v42; // eax@40
  FrameBoxWin *v43; // ecx@40
  NiPointer<NiD3DDefaultShader> *v44; // edi@40
  FrameBoxWin *v45; // ebx@41
  int v46; // eax@41
  unsigned int v47; // ecx@41
  FrameBoxWin *v48; // ebx@41
  NiRefObjectVtbl *v49; // edx@41
  int v50; // eax@41
  unsigned int v51; // ecx@41
  FrameBoxWin *v52; // ebx@41
  int v53; // eax@41
  FrameBoxWin *v54; // ecx@41
  int v55; // edx@41
  int v56; // ecx@41
  unsigned int v57; // ST20_4@41
  int v58; // ST1C_4@41
  int v59; // eax@41
  NiD3DDefaultShader *v60; // eax@41
  FrameBoxWin *v61; // edi@42
  int v62; // ebx@42
  int v63; // eax@42
  PgWinProxy *v64; // eax@42
  int v65; // ebx@42
  int (*v66)(void); // eax@42
  int v67; // eax@42
  int v68; // edi@42
  PgSprData *v69; // eax@42
  char *v70; // eax@42
  PgWin *v71; // ST28_4@42
  PgFont *v72; // ST24_4@42
  unsigned int v73; // ST20_4@42
  unsigned int v74; // eax@42
  PgWinText *v75; // eax@42
  NiAVObject *v76; // eax@42
  NiProperty *v77; // ST30_4@42
  PgSprData *v78; // eax@46
  NiAVObject *v79; // eax@46
  NiProperty *v80; // ST30_4@46
  signed int v81; // edi@46
  NiNode *v82; // ebx@47
  char *v83; // eax@47
  PgSprData *v84; // ebx@47
  char *v85; // eax@47
  char *v86; // eax@47
  NiAVObject *v87; // eax@47
  PgWinBut *v88; // ebx@47
  PgWin *v89; // ST28_4@47
  PgFont *v90; // ST24_4@47
  unsigned int v91; // ST20_4@47
  unsigned int v92; // eax@47
  PgWinText *v93; // eax@47
  NiRefObjectVtbl *v94; // ebx@47
  PgFont *v95; // eax@47
  PgWinBut *v96; // ebx@47
  PgWin *v97; // ST28_4@47
  PgFont *v98; // ST24_4@47
  unsigned int v99; // ST20_4@47
  unsigned int v100; // eax@47
  PgWinText *v101; // eax@47
  NiRefObjectVtbl *v102; // edi@48
  char *v103; // eax@48
  PgWinBut *v104; // eax@48
  NiRefObjectVtbl *v105; // edi@49
  char *v106; // eax@49
  char *v107; // eax@49
  NiRefObjectVtbl *v108; // edi@50
  char *v109; // eax@50
  char *v110; // eax@50
  NiRefObjectVtbl *v111; // edi@51
  char *v112; // eax@51
  char *v113; // eax@51
  NiRefObjectVtbl *v114; // edi@52
  char *v115; // eax@52
  char *v116; // eax@52
  NiRefObjectVtbl *v117; // edi@53
  char *v118; // eax@53
  NiRefObjectVtbl *v119; // edi@53
  char *v120; // eax@53
  char *v121; // eax@53
  NiRefObjectVtbl *v122; // edi@54
  char *v123; // eax@54
  NiRefObjectVtbl *v124; // edi@55
  char *v125; // eax@55
  PgSprData *v126; // edi@58
  NiAVObject *v127; // eax@58
  NiProperty *v128; // ST30_4@58
  int v129; // ST24_4@58
  int v130; // eax@58
  PgWinProxy *v131; // eax@58
  int v132; // eax@58
  int v133; // edi@58
  int v134; // ebx@58
  char *v135; // eax@58
  NiSourceTexture *v136; // ST30_4@58
  PgSprData *v137; // eax@58
  NiAVObject *v138; // eax@58
  NiProperty *v139; // ST30_4@58
  NiSourceTexture *v140; // eax@58
  PopupMenuWin *v141; // eax@58
  PopupMenuWin *v142; // edi@58
  PopupMenuWin *v143; // ebx@58
  char *v144; // eax@65
  PopupMenuTextCheck *v145; // eax@65
  char *v146; // eax@65
  PopupMenuTextCheck *v147; // eax@65
  char *v148; // eax@65
  PopupMenuTextCheck *v149; // eax@65
  char *v150; // eax@65
  PopupMenuTextCheck *v151; // eax@65
  NiSourceTexture *v152; // eax@65
  PopupMenuWin *v153; // eax@65
  PopupMenuWin *v154; // edi@65
  PopupMenuWin *v155; // ebx@65
  int v156; // eax@72
  unsigned int v157; // ebx@72
  signed int v158; // edi@75
  void *v159; // eax@76
  PopupMenuText *v160; // eax@80
  NiSourceTexture *v161; // eax@82
  PopupMenuWin *v162; // eax@82
  PopupMenuWin *v163; // edi@82
  PopupMenuWin *v164; // ebx@82
  char *v165; // eax@89
  PopupMenuText *v166; // eax@89
  char *v167; // eax@89
  PopupMenuText *v168; // eax@89
  char *v169; // eax@89
  PopupMenuText *v170; // eax@89
  FrameBoxWin *v171; // edi@89
  int v172; // eax@89
  int v173; // ebx@89
  int v174; // eax@89
  PgWinProxy *v175; // eax@89
  int v176; // eax@89
  int v177; // edi@89
  int v178; // ebx@89
  PgWinBut *v179; // eax@89
  int v180; // eax@89
  PgWinBut *v181; // eax@94
  int v182; // eax@94
  PgWinBut *v183; // eax@99
  int v184; // eax@99
  NiSourceTexture *v185; // eax@105
  FrameBoxWin *v186; // eax@105
  int v187; // ST30_4@105
  int v188; // ecx@105
  NiNode *v189; // eax@105
  int v190; // ecx@105
  EditWin *v191; // eax@110
  EditWin *v192; // ecx@110
  PgFont *v193; // eax@115
  PgSprData *v194; // eax@117
  PgWinSpr *v195; // eax@117
  NiNode *v196; // eax@117
  int v197; // ecx@117
  PgSprData *v198; // eax@122
  PgWinSpr *v199; // eax@122
  NiMaterialProperty *v200; // edi@122
  PgWinSpr *v201; // ebx@122
  FrameBoxWin *v202; // edi@127
  PgFrameWork *v203; // eax@127
  void *(__thiscall *v204)(NiRefObject *, unsigned int); // edx@127
  int v205; // eax@127
  char *v206; // eax@127
  PgWinText *v207; // ecx@127
  ChatBoardFlex *v208; // ecx@129
  char *v209; // eax@129
  PgWinText *v210; // ecx@129
  void *(__thiscall *v211)(NiRefObject *, unsigned int); // edx@131
  unsigned int v212; // edi@131
  NiNode *v213; // esi@132
  int v214; // [sp+0h] [bp-5Ch]@131
  int v215; // [sp+4h] [bp-58h]@131
  int v216; // [sp+8h] [bp-54h]@131
  int v217; // [sp+Ch] [bp-50h]@131
  unsigned int iPanelLeft; // [sp+10h] [bp-4Ch]@42
  int uiPanelWidth; // [sp+14h] [bp-48h]@42
  NiNode *uiEditwinWidth; // [sp+18h] [bp-44h]@11
  PgWinBut *uiPanelHeight; // [sp+1Ch] [bp-40h]@41
  int iPanelTop; // [sp+20h] [bp-3Ch]@41
  PgFont *_iOrgX; // [sp+24h] [bp-38h]@39
  unsigned int _iOrgY; // [sp+28h] [bp-34h]@41
  int iOrgX; // [sp+2Ch] [bp-30h]@37
  NiSourceTexture *pkTexture; // [sp+30h] [bp-2Ch]@1
  int uiHeight; // [sp+34h] [bp-28h]@37
  unsigned int uiWidth; // [sp+38h] [bp-24h]@37
  int iOrgY; // [sp+3Ch] [bp-20h]@12
  signed int pkSprData; // [sp+40h] [bp-1Ch]@40
  int uiLeft; // [sp+44h] [bp-18h]@31
  int uiTop; // [sp+48h] [bp-14h]@31
  NiPointer<NiNode> spNode; // [sp+4Ch] [bp-10h]@1
  int v234; // [sp+58h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v234 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v3 = spNode.m_pObject;
    v234 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v4 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v4 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    return 0;
  }
  v6 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\Chatting.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, v6);
  if ( !spNode.m_pObject )
    return 0;
  v8 = operator new(0x60u);
  uiEditwinWidth = (NiNode *)v8;
  LOBYTE(v234) = 1;
  if ( v8 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v8);
    iOrgY = v9;
  }
  else
  {
    iOrgY = 0;
  }
  v10 = v2->m_spMtrlProp.m_pObject;
  LOBYTE(v234) = 0;
  if ( v10 != (NiMaterialProperty *)iOrgY )
  {
    if ( v10
      && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v11 = iOrgY;
    v2->m_spMtrlProp.m_pObject = (NiMaterialProperty *)iOrgY;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)(v11 + 4));
  }
  v12 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v12->m_amb.r) = NiColor::WHITE;
  LODWORD(v12->m_amb.g) = dword_A88D90;
  v13 = dword_A88D94;
  ++v12->m_uiRevID;
  LODWORD(v12->m_amb.b) = v13;
  v14 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v14->m_diff.r) = NiColor::WHITE;
  LODWORD(v14->m_diff.g) = dword_A88D90;
  v15 = dword_A88D94;
  ++v14->m_uiRevID;
  LODWORD(v14->m_diff.b) = v15;
  v16 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v16->m_emit.r) = NiColor::WHITE;
  LODWORD(v16->m_emit.g) = dword_A88D90;
  v17 = dword_A88D94;
  ++v16->m_uiRevID;
  LODWORD(v16->m_emit.b) = v17;
  v18 = v2->m_spMtrlProp.m_pObject;
  ++v18->m_uiRevID;
  v18->m_fAlpha = 1.0;
  v19 = operator new(0x60u);
  uiEditwinWidth = (NiNode *)v19;
  LOBYTE(v234) = 2;
  if ( v19 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v19);
    iOrgY = v20;
  }
  else
  {
    iOrgY = 0;
  }
  v21 = v2->m_spFixedMtrlProp.m_pObject;
  LOBYTE(v234) = 0;
  if ( v21 != (NiMaterialProperty *)iOrgY )
  {
    if ( v21
      && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v21 )
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    v22 = iOrgY;
    v2->m_spFixedMtrlProp.m_pObject = (NiMaterialProperty *)iOrgY;
    if ( v22 )
      InterlockedIncrement((volatile LONG *)(v22 + 4));
  }
  v23 = v2->m_spFixedMtrlProp.m_pObject;
  LODWORD(v23->m_amb.r) = NiColor::WHITE;
  LODWORD(v23->m_amb.g) = dword_A88D90;
  v24 = dword_A88D94;
  ++v23->m_uiRevID;
  LODWORD(v23->m_amb.b) = v24;
  v25 = v2->m_spFixedMtrlProp.m_pObject;
  LODWORD(v25->m_diff.r) = NiColor::WHITE;
  LODWORD(v25->m_diff.g) = dword_A88D90;
  v26 = dword_A88D94;
  ++v25->m_uiRevID;
  LODWORD(v25->m_diff.b) = v26;
  v27 = v2->m_spFixedMtrlProp.m_pObject;
  LODWORD(v27->m_emit.r) = NiColor::WHITE;
  LODWORD(v27->m_emit.g) = dword_A88D90;
  v28 = dword_A88D94;
  ++v27->m_uiRevID;
  v29 = pkTexture;
  LODWORD(v27->m_emit.b) = v28;
  v30 = v2->m_spFixedMtrlProp.m_pObject;
  ++v30->m_uiRevID;
  v30->m_fAlpha = 1.0;
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v29);
  v32 = pkFrameWork;
  if ( PgWinFrame::Create(&v2->baseclass_0, uiLeft, uiTop, v31, 0, pkFrameWork, "ChatDisplayWin", 0) )
  {
    NiAVObject::AttachProperty(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &v2->m_spMtrlProp.m_pObject->baseclass_0);
    v34 = uiLeft;
    iOrgY = uiTop;
    iOrgX = uiLeft;
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "ChaBox",
           &uiLeft,
           &uiTop,
           &uiWidth,
           (unsigned int *)&uiHeight)
      && (v35 = uiHeight,
          v2->m_uiDefaultWidth = uiWidth,
          v2->m_uiDefaultHeight = v35,
          v36 = MenuTexMgr::GetTexture(0xBu),
          v37 = FrameBoxWin::CreateWin(
                  v36,
                  7u,
                  7u,
                  uiLeft - v34,
                  uiTop - iOrgY,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  v32),
          v38 = uiHeight,
          v39 = uiWidth,
          v2->m_pkChattingBox = v37,
          ((void (__thiscall *)(FrameBoxWin *, int, int))v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
            v37,
            v39,
            v38),
          ((void (__stdcall *)(_DWORD))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0),
          v2->m_pkChattingBox->m_bSizeDraggable = 1,
          ((void (__stdcall *)(signed int))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1),
          v40 = Font::Get(BOLD),
          (_iOrgX = v40) != 0) )
    {
      v41 = v2->m_pkChattingBox;
      v41->m_iSizeDragMinWidth = 100;
      v41->m_iSizeDragMaxWidth = 800;
      v42 = v40->baseclass_0.m_dwFontSizeInPixel;
      v43 = v2->m_pkChattingBox;
      v43->m_iSizeDragMinHeight = 4 * v42 + 8;
      v43->m_iSizeDragMaxHeight = 40 * v42 + 88;
      ((void (__stdcall *)(_DWORD))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v44 = (NiPointer<NiD3DDefaultShader> *)v2->m_aspChatBD;
      pkSprData = 4;
      do
      {
        v45 = v2->m_pkChattingBox;
        v46 = ((int (__thiscall *)(FrameBoxWin *))v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2->m_pkChattingBox);
        v47 = v45->m_uiEdgeHeight;
        v48 = v2->m_pkChattingBox;
        v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        _iOrgY = v46 - 2 * v47;
        v50 = ((int (__thiscall *)(FrameBoxWin *))v49[36].__vecDelDtor)(v48);
        v51 = v48->m_uiEdgeWidth;
        v52 = v2->m_pkChattingBox;
        v53 = v50 - 2 * v51;
        v54 = v2->m_pkChattingBox;
        v55 = v54->m_uiEdgeHeight;
        v56 = v54->m_uiEdgeWidth;
        iPanelTop = v55;
        uiPanelHeight = (PgWinBut *)v56;
        v57 = v53;
        v58 = v55
            + ((int (__thiscall *)(FrameBoxWin *))v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v52);
        v59 = ((int (__thiscall *)(FrameBoxWin *))v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v52);
        v60 = (NiD3DDefaultShader *)ChatBoardFlex::CreateWin(
                                      (int)((char *)uiPanelHeight + v59),
                                      v58,
                                      v57,
                                      _iOrgY,
                                      _iOrgX,
                                      0,
                                      &v2->baseclass_0.baseclass_0.baseclass_0);
        NiPointer<PopupMenuWin>::operator_(v44, v60);
        ChatBoardFlex::SetGameFrameWork((ChatBoardFlex *)v44->m_pObject, v2->baseclass_0.m_pkFrameWork);
        ((void (__stdcall *)(_DWORD))v44->m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ++v44;
        --pkSprData;
      }
      while ( pkSprData );
      v61 = v2->m_pkChattingBox;
      v62 = ((int (__thiscall *)(ChatDisplayWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
      v63 = ((int (__thiscall *)(FrameBoxWin *))v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v61);
      v64 = PgWinProxy::CreateWin(v62 - v63, 0, 0, 0, &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkLTSocketWin = v64;
      v65 = iOrgX
          + ((int (__thiscall *)(PgWinProxy *))v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v64);
      v66 = (int (*)(void))v2->m_pkLTSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
      _iOrgX = (PgFont *)v65;
      v67 = v66();
      v68 = iOrgY + v67;
      _iOrgY = iOrgY + v67;
      v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
      v2->m_pkTabBtn = PgWinBut::CreateWin(uiLeft - v65, uiTop - v68, v69, &v2->m_pkLTSocketWin->baseclass_0, 3u, 0, 0);
      v70 = TextData::Get(0xA2F5CBF0u);
      PgWin::SetToolTipWinText(&v2->m_pkTabBtn->baseclass_0.baseclass_0, v70);
      v2->m_pkTabBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      pkSprData = (signed int)v2->m_pkTabBtn;
      v71 = (PgWin *)pkSprData;
      v72 = Font::Get(0);
      v73 = (*(int (**)(void))(*(_DWORD *)pkSprData + 148))();
      v74 = (*(int (**)(void))(*(_DWORD *)pkSprData + 144))();
      v75 = PgWinText::CreateWin(0, 0, v74, v73, v72, v71, 0, 0);
      v2->m_pkTabText = v75;
      v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v75,
        5u);
      NiAVObject::AttachProperty(
        &v2->m_pkTabText->baseclass_0.baseclass_0.baseclass_0,
        &v2->m_spMtrlProp.m_pObject->baseclass_0);
      ((void (__stdcall *)(_DWORD))v2->m_pkTabText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkSprData = (signed int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChatCommandNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "ChatCommandOver");
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "ChatCommandClick");
      v76 = (NiAVObject *)PgWinBut::CreateWin(
                            uiLeft - v65,
                            uiTop - v68,
                            (PgSprData *)pkSprData,
                            &v2->m_pkLTSocketWin->baseclass_0,
                            0xAu,
                            0,
                            0);
      v77 = (NiProperty *)v2->m_spFixedMtrlProp.m_pObject;
      v2->m_pkChatCommandBtn = (PgWinBut *)v76;
      NiAVObject::AttachProperty(v76, v77);
      iPanelTop = 0;
      uiPanelHeight = 0;
      if ( !PgUtil::GetTriShapeRect(
              &spNode.m_pObject->baseclass_0,
              "ChatCommandPanel",
              (int *)&iPanelLeft,
              &iPanelTop,
              (unsigned int *)&uiPanelWidth,
              (unsigned int *)&uiPanelHeight) )
        goto LABEL_138;
      v78 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChatCommandPanel", &uiLeft, &uiTop, 0);
      v79 = (NiAVObject *)PgWinSpr::CreateWin(uiLeft - v65, uiTop - v68, v78, &v2->m_pkLTSocketWin->baseclass_0, 0, 0);
      v80 = (NiProperty *)v2->m_spFixedMtrlProp.m_pObject;
      v2->m_pkChatCommandSprWin = (PgWinSpr *)v79;
      NiAVObject::AttachProperty(v79, v80);
      ((void (__stdcall *)(_DWORD))v2->m_pkChatCommandSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v81 = 0;
      do
      {
        v82 = spNode.m_pObject;
        pkSprData = v81 + 1;
        v83 = fs("Chat_Cmd_Name%02d_Nor");
        v84 = PgSprData::Create(&v82->baseclass_0, v83, &uiLeft, &uiTop, 0);
        uiEditwinWidth = spNode.m_pObject;
        v85 = fs("Chat_Cmd_Name%02d_Click");
        PgSprData::Add(v84, &uiEditwinWidth->baseclass_0, v85);
        uiEditwinWidth = spNode.m_pObject;
        v86 = fs("Chat_Cmd_Name%02d_Over");
        PgSprData::Add(v84, &uiEditwinWidth->baseclass_0, v86);
        v87 = (NiAVObject *)PgWinBut::CreateWin(
                              uiLeft - (_DWORD)_iOrgX,
                              uiTop - _iOrgY,
                              v84,
                              &v2->m_pkLTSocketWin->baseclass_0,
                              v81 + 11,
                              0,
                              0);
        v2->m_pkChatCmdBut[v81] = (PgWinBut *)v87;
        NiAVObject::AttachProperty(v87, &v2->m_spFixedMtrlProp.m_pObject->baseclass_0);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdBut[v81]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v2->m_pkChatCmdBut[v81]->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
        v88 = v2->m_pkChatCmdBut[v81];
        v89 = (PgWin *)v2->m_pkChatCmdBut[v81];
        v90 = Font::Get(0);
        v91 = ((int (__thiscall *)(PgWinBut *))v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v88);
        v92 = ((int (__thiscall *)(PgWinBut *))v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v88);
        v93 = PgWinText::CreateWin(0, 0, v92, v91, v90, v89, 0, 0);
        v2->m_pkChatCmdNameText[v81] = v93;
        v93->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v93,
          4u);
        v94 = v2->m_pkChatCmdNameText[v81]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v95 = Font::Get(BOLD);
        v94[113].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[v81], (unsigned int)v95);
        ((void (__stdcall *)(__int64 *))v2->m_pkChatCmdNameText[v81]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
        v96 = v2->m_pkChatCmdBut[v81];
        v97 = (PgWin *)v2->m_pkChatCmdBut[v81];
        v98 = Font::Get(0);
        v99 = ((int (__thiscall *)(PgWinBut *))v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v96);
        v100 = ((int (__thiscall *)(PgWinBut *))v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v96);
        v101 = PgWinText::CreateWin(0, 0, v100, v99, v98, v97, 0, 0);
        v2->m_pkChatCmdKeyText[v81] = v101;
        v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v101,
          6u);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdNameText[v81]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[v81]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        switch ( v81 )
        {
          case 0:
            v102 = v2->m_pkChatCmdNameText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v103 = TextData::Get(0x3D421B33u);
            v102[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[0], (unsigned int)v103);
            ((void (__stdcall *)(_UNKNOWN *))v2->m_pkChatCmdKeyText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BB48A);
            v104 = v2->m_pkChatCmdBut[0];
            goto LABEL_56;
          case 1:
            v105 = v2->m_pkChatCmdNameText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v106 = TextData::Get(0xA1DFB4C7u);
            v105[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[1], (unsigned int)v106);
            ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/w");
            TextData::Get(0x95876FE6u);
            TextData::Get(0x4965747Du);
            v107 = fs("/w [%s] (%s)");
            PgWin::SetToolTipWinText(&v2->m_pkChatCmdBut[1]->baseclass_0.baseclass_0, v107);
            break;
          case 2:
            v108 = v2->m_pkChatCmdNameText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v109 = TextData::Get(0xEE4B1720u);
            v108[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[2], (unsigned int)v109);
            ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/s");
            TextData::Get(0x95876FE6u);
            v110 = fs("/s (%s)");
            PgWin::SetToolTipWinText(&v2->m_pkChatCmdBut[2]->baseclass_0.baseclass_0, v110);
            break;
          case 3:
            v111 = v2->m_pkChatCmdNameText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v112 = TextData::Get(0x374D0E99u);
            v111[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[3], (unsigned int)v112);
            ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/p");
            TextData::Get(0x95876FE6u);
            v113 = fs("/p (%s)");
            PgWin::SetToolTipWinText(&v2->m_pkChatCmdBut[3]->baseclass_0.baseclass_0, v113);
            break;
          case 4:
            v114 = v2->m_pkChatCmdNameText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v115 = TextData::Get(0x2F44227Bu);
            v114[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[4], (unsigned int)v115);
            ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/g");
            TextData::Get(0x95876FE6u);
            v116 = fs("/g (%s)");
            PgWin::SetToolTipWinText(&v2->m_pkChatCmdBut[4]->baseclass_0.baseclass_0, v116);
            break;
          case 5:
            v117 = v2->m_pkChatCmdNameText[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v118 = TextData::Get(0x353D9AAAu);
            v117[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[5], (unsigned int)v118);
            v119 = v2->m_pkChatCmdKeyText[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            TextData::Get(0x43706657u);
            v120 = fs("/%s");
            v119[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdKeyText[5], (unsigned int)v120);
            TextData::Get(0x9D8CC0C7u);
            TextData::Get(0x43706657u);
            v121 = fs("/%s (%s)");
            PgWin::SetToolTipWinText(&v2->m_pkChatCmdBut[5]->baseclass_0.baseclass_0, v121);
            break;
          case 6:
            v122 = v2->m_pkChatCmdNameText[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v123 = TextData::Get(0xEE03CF47u);
            v122[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[6], (unsigned int)v123);
            ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/r");
            PgWin::SetToolTipWinText(&v2->m_pkChatCmdBut[6]->baseclass_0.baseclass_0, "/r (´ëÈ­³»¿ë)");
            v104 = v2->m_pkChatCmdBut[6];
            goto LABEL_56;
          case 7:
            v124 = v2->m_pkChatCmdNameText[7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v125 = TextData::Get(0xF650262Au);
            v124[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[7], (unsigned int)v125);
            v104 = v2->m_pkChatCmdBut[7];
LABEL_56:
            v104->baseclass_0.baseclass_0.m_pkToolTipWin = 0;
            break;
          default:
            break;
        }
        v81 = pkSprData;
      }
      while ( pkSprData < 8 );
      v126 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "UnlockNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(v126, &spNode.m_pObject->baseclass_0, "lockNor");
      v127 = (NiAVObject *)ColumnBut::CreateWin(
                             uiLeft - (_DWORD)_iOrgX,
                             uiTop - _iOrgY,
                             v126,
                             &v2->m_pkLTSocketWin->baseclass_0,
                             0x13u,
                             0);
      v128 = (NiProperty *)v2->m_spFixedMtrlProp.m_pObject;
      v2->m_pkCheckBox = (ColumnBut *)v127;
      NiAVObject::AttachProperty(v127, v128);
      v129 = ((int (*)(void))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v130 = ((int (__thiscall *)(ChatDisplayWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
      v131 = PgWinProxy::CreateWin(v130, v129, 0, 0, &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkRBSocketWin = v131;
      v132 = ((int (__thiscall *)(PgWinProxy *))v131->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v131);
      v133 = iOrgX + v132;
      v134 = iOrgY
           + ((int (*)(void))v2->m_pkRBSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      pkSprData = (signed int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "FillterNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "FillterOver");
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "FillterClick");
      v2->m_pkFilterBtn = PgWinBut::CreateWin(
                            uiLeft - v133,
                            uiTop - v134,
                            (PgSprData *)pkSprData,
                            &v2->m_pkRBSocketWin->baseclass_0,
                            8u,
                            0,
                            0);
      v135 = TextData::Get(0xF6FF2527u);
      PgWin::SetToolTipWinText(&v2->m_pkFilterBtn->baseclass_0.baseclass_0, v135);
      v136 = pkTexture;
      v2->m_pkFilterBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      v137 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Emoticon", &uiLeft, &uiTop, v136);
      v138 = (NiAVObject *)PgWinBut::CreateWin(
                             uiLeft - iOrgX,
                             uiTop - iOrgY,
                             v137,
                             &v2->baseclass_0.baseclass_0.baseclass_0,
                             0,
                             0,
                             0);
      v139 = (NiProperty *)v2->m_spFixedMtrlProp.m_pObject;
      v2->m_pkEmoticonBtn = (PgWinBut *)v138;
      NiAVObject::AttachProperty(v138, v139);
      ((void (__stdcall *)(_DWORD))v2->m_pkEmoticonBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v140 = MenuTexMgr::GetTexture(1u);
      v141 = PopupMenuWin::CreateWin(v140, 4u, 4u, 0);
      v142 = v2->m_spChatFilterPopupMenu.m_pObject;
      v143 = v141;
      if ( v142 != v141 )
      {
        if ( v142
          && !InterlockedDecrement((volatile LONG *)&v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v142 )
          v142->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v142,
            1u);
        v2->m_spChatFilterPopupMenu.m_pObject = v143;
        if ( v143 )
          InterlockedIncrement((volatile LONG *)&v143->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
        &v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      PopupMenuWin::Clear(v2->m_spChatFilterPopupMenu.m_pObject);
      v144 = TextData::Get(0xEF05252Bu);
      v145 = PopupMenuTextCheck::CreateWin(v144, 0, 0, 0, 0, 0);
      v145->baseclass_0.m_ePopupMenuID = 17;
      PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu.m_pObject, &v145->baseclass_0);
      v146 = TextData::Get(0xF54E1743u);
      v147 = PopupMenuTextCheck::CreateWin(v146, 0, 0, 0, 0, 0);
      v147->baseclass_0.m_ePopupMenuID = 18;
      PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu.m_pObject, &v147->baseclass_0);
      v148 = TextData::Get(0xF605CB45u);
      v149 = PopupMenuTextCheck::CreateWin(v148, 0, 0, 0, 0, 0);
      v149->baseclass_0.m_ePopupMenuID = 19;
      PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu.m_pObject, &v149->baseclass_0);
      v150 = TextData::Get(0xEEFCDF27u);
      v151 = PopupMenuTextCheck::CreateWin(v150, 0, 0, 0, 0, 0);
      v151->baseclass_0.m_ePopupMenuID = 20;
      PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu.m_pObject, &v151->baseclass_0);
      PopupMenuWin::FinishMenu(v2->m_spChatFilterPopupMenu.m_pObject, 0);
      ((void (__stdcall *)(_DWORD))v2->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v152 = MenuTexMgr::GetTexture(1u);
      v153 = PopupMenuWin::CreateWin(v152, 4u, 4u, 0);
      v154 = v2->m_spChatPopupMenu.m_pObject;
      v155 = v153;
      if ( v154 != v153 )
      {
        if ( v154
          && !InterlockedDecrement((volatile LONG *)&v154->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v154 )
          v154->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v154,
            1u);
        v2->m_spChatPopupMenu.m_pObject = v155;
        if ( v155 )
          InterlockedIncrement((volatile LONG *)&v155->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      v2->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
        &v2->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      PopupMenuWin::Clear(v2->m_spChatPopupMenu.m_pObject);
      v156 = *(_DWORD *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 56);
      v157 = 0;
      if ( v156 )
        pkSprData = *(_DWORD *)(v156 + 40);
      else
        pkSprData = 0;
      v158 = 0;
      if ( (unsigned int)pkSprData > 0 )
      {
        do
        {
          v159 = CDataReader::GetRecord(
                   (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                   v157);
          if ( !v159 )
            break;
          if ( *(_WORD *)((char *)v159 + 65) == -1 && v158 < 17 && *(_DWORD *)((char *)v159 + 101) == 1 )
          {
            v160 = PopupMenuText::CreateWin((char *)v159 + 33, 0, 0, 0, 0, 0, 0);
            v160->baseclass_0.m_ePopupMenuID = v158 + 62;
            PopupMenuWin::AddMenu(v2->m_spChatPopupMenu.m_pObject, &v160->baseclass_0);
            ++v158;
          }
          ++v157;
        }
        while ( v157 < pkSprData );
      }
      PopupMenuWin::FinishMenu(v2->m_spChatPopupMenu.m_pObject, 0);
      ((void (__stdcall *)(_DWORD))v2->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v161 = MenuTexMgr::GetTexture(1u);
      v162 = PopupMenuWin::CreateWin(v161, 4u, 4u, 0);
      v163 = v2->m_spChatModePopupMenu.m_pObject;
      v164 = v162;
      if ( v163 != v162 )
      {
        if ( v163
          && !InterlockedDecrement((volatile LONG *)&v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v163 )
          v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v163,
            1u);
        v2->m_spChatModePopupMenu.m_pObject = v164;
        if ( v164 )
          InterlockedIncrement((volatile LONG *)&v164->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      ((void (__thiscall *)(IDirectMessenger *))v2->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      PopupMenuWin::Clear(v2->m_spChatModePopupMenu.m_pObject);
      v165 = TextData::Get(0xEF05252Bu);
      v166 = PopupMenuText::CreateWin(v165, 0, 0, 0, 0, 0, 0);
      v166->baseclass_0.m_ePopupMenuID = 27;
      PopupMenuWin::AddMenu(v2->m_spChatModePopupMenu.m_pObject, &v166->baseclass_0);
      v167 = TextData::Get(0xF605CB45u);
      v168 = PopupMenuText::CreateWin(v167, 0, 0, 0, 0, 0, 0);
      v168->baseclass_0.m_ePopupMenuID = 28;
      PopupMenuWin::AddMenu(v2->m_spChatModePopupMenu.m_pObject, &v168->baseclass_0);
      v169 = TextData::Get(0xEEFCDF27u);
      v170 = PopupMenuText::CreateWin(v169, 0, 0, 0, 0, 0, 0);
      v170->baseclass_0.m_ePopupMenuID = 29;
      PopupMenuWin::AddMenu(v2->m_spChatModePopupMenu.m_pObject, &v170->baseclass_0);
      PopupMenuWin::FinishMenu(v2->m_spChatModePopupMenu.m_pObject, 0);
      ((void (__stdcall *)(_DWORD))v2->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v171 = v2->m_pkChattingBox;
      v172 = ((int (__thiscall *)(FrameBoxWin *))v171->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2->m_pkChattingBox);
      v173 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                    (NiRefObject *)v2,
                    v172);
      v174 = ((int (__thiscall *)(FrameBoxWin *))v171->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v171);
      v175 = PgWinProxy::CreateWin(
               v173 - v174,
               0,
               0,
               (unsigned int)v2,
               (PgWin *)((char *)&v2->baseclass_0.baseclass_0.baseclass_0 + 232));
      v2->m_pkLBSocketWin = v175;
      v176 = ((int (__thiscall *)(PgWinProxy *))v175->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v175);
      v177 = iOrgX + v176;
      v178 = iOrgY
           + ((int (*)(void))v2->m_pkLBSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
      pkSprData = (signed int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "PreUpNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "PreUpOver");
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "PreUpClick");
      v179 = PgWinBut::CreateWin(
               uiLeft - v177,
               uiTop - v178,
               (PgSprData *)pkSprData,
               &v2->m_pkLBSocketWin->baseclass_0,
               0,
               0,
               0);
      uiPanelHeight = v179;
      v2->m_pkScrollUpBtn = v179;
      v180 = (int)v2->m_spFixedMtrlProp.m_pObject;
      iOrgX = v180;
      uiEditwinWidth = (NiNode *)v180;
      if ( v180 )
        InterlockedIncrement((volatile LONG *)(v180 + 4));
      LOBYTE(v234) = 3;
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&uiPanelHeight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&uiEditwinWidth);
      LOBYTE(v234) = 0;
      if ( iOrgX && !InterlockedDecrement((volatile LONG *)(iOrgX + 4)) )
        (**(void (__stdcall ***)(_DWORD))iOrgX)(1);
      pkSprData = (signed int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextDownNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "NextDownOver");
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "NextDownClick");
      v181 = PgWinBut::CreateWin(
               uiLeft - v177,
               uiTop - v178,
               (PgSprData *)pkSprData,
               &v2->m_pkLBSocketWin->baseclass_0,
               1u,
               0,
               0);
      uiPanelHeight = v181;
      v2->m_pkScrollDnBtn = v181;
      v182 = (int)v2->m_spFixedMtrlProp.m_pObject;
      iOrgX = v182;
      uiEditwinWidth = (NiNode *)v182;
      if ( v182 )
        InterlockedIncrement((volatile LONG *)(v182 + 4));
      LOBYTE(v234) = 4;
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&uiPanelHeight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&uiEditwinWidth);
      LOBYTE(v234) = 0;
      if ( iOrgX && !InterlockedDecrement((volatile LONG *)(iOrgX + 4)) )
        (**(void (__stdcall ***)(_DWORD))iOrgX)(1);
      pkSprData = (signed int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "DownNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "DownOver");
      PgSprData::Add((PgSprData *)pkSprData, &spNode.m_pObject->baseclass_0, "DownClick");
      v183 = PgWinBut::CreateWin(
               uiLeft - v177,
               uiTop - v178,
               (PgSprData *)pkSprData,
               &v2->m_pkLBSocketWin->baseclass_0,
               2u,
               0,
               0);
      uiPanelHeight = v183;
      v2->m_pkScrollMostDnBtn = v183;
      v184 = (int)v2->m_spFixedMtrlProp.m_pObject;
      iOrgX = v184;
      uiEditwinWidth = (NiNode *)v184;
      if ( v184 )
        InterlockedIncrement((volatile LONG *)(v184 + 4));
      LOBYTE(v234) = 5;
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&uiPanelHeight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&uiEditwinWidth);
      LOBYTE(v234) = 0;
      if ( iOrgX && !InterlockedDecrement((volatile LONG *)(iOrgX + 4)) )
        (**(void (__stdcall ***)(_DWORD))iOrgX)(1);
      if ( !PgUtil::GetTriShapeRect(
              &spNode.m_pObject->baseclass_0,
              "ChaMsgView",
              &uiLeft,
              &uiTop,
              &uiWidth,
              (unsigned int *)&uiHeight) )
      {
LABEL_138:
        v3 = spNode.m_pObject;
        v234 = -1;
        if ( !spNode.m_pObject
          || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          return 0;
        v4 = v3 == 0;
        goto LABEL_5;
      }
      v185 = MenuTexMgr::GetTexture(0xBu);
      v186 = FrameBoxWin::CreateWin(
               v185,
               7u,
               7u,
               uiLeft - v177,
               uiTop - v178,
               &v2->m_pkLBSocketWin->baseclass_0,
               pkFrameWork);
      v187 = uiHeight;
      v188 = uiWidth;
      v2->m_pkChatEditBox = v186;
      ((void (__thiscall *)(FrameBoxWin *, int, int))v186->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
        v186,
        v188,
        v187);
      ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
      v2->m_pkChatEditBox->m_bSizeDraggable = 0;
      ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v189 = (NiNode *)v2->m_spFixedMtrlProp.m_pObject;
      v190 = (int)v2->m_pkChatEditBox;
      pkFrameWork = (PgFrameWork *)v189;
      uiPanelHeight = (PgWinBut *)v190;
      uiEditwinWidth = v189;
      if ( v189 )
        InterlockedIncrement((volatile LONG *)&v189->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      LOBYTE(v234) = 6;
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&uiPanelHeight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&uiEditwinWidth);
      LOBYTE(v234) = 0;
      if ( pkFrameWork && !InterlockedDecrement((volatile LONG *)&pkFrameWork->baseclass_0.m_pkMsgHooker) )
        ((void (__stdcall *)(signed int))pkFrameWork->baseclass_0.vfptr->SetMsgHooker)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      uiEditwinWidth = (NiNode *)(uiWidth - 4);
      pkFrameWork = (PgFrameWork *)(uiHeight - 1);
      v191 = EditWin::CreateWin(
               uiLeft - v177 + 4,
               uiTop - v178 + 4,
               uiWidth - 4,
               uiHeight - 1,
               &v2->m_pkLBSocketWin->baseclass_0,
               NORMAL,
               0x80u,
               1u,
               1,
               0,
               0);
      v192 = v2->m_spEdit.m_pObject;
      _iOrgX = (PgFont *)v191;
      pkFrameWork = (PgFrameWork *)v192;
      if ( v192 != v191 )
      {
        if ( v192
          && !InterlockedDecrement((volatile LONG *)&v192->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && pkFrameWork )
          ((void (__stdcall *)(signed int))pkFrameWork->baseclass_0.vfptr->SetMsgHooker)(1);
        v193 = _iOrgX;
        v2->m_spEdit.m_pObject = (EditWin *)_iOrgX;
        if ( v193 )
          InterlockedIncrement((volatile LONG *)&v193->baseclass_0.baseclass_0.m_uiRefCount);
      }
      EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
      ((void (__stdcall *)(_DWORD))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v194 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChaK", &uiLeft, &uiTop, pkTexture);
      v195 = PgWinSpr::CreateWin(uiLeft - v177, uiTop - v178, v194, &v2->m_pkLBSocketWin->baseclass_0, 0, 0);
      v2->m_pkChatKorMode = v195;
      v195->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v195,
        0);
      v196 = (NiNode *)v2->m_spFixedMtrlProp.m_pObject;
      v197 = (int)v2->m_pkChatKorMode;
      pkFrameWork = (PgFrameWork *)v196;
      uiPanelHeight = (PgWinBut *)v197;
      uiEditwinWidth = v196;
      if ( v196 )
        InterlockedIncrement((volatile LONG *)&v196->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      LOBYTE(v234) = 7;
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&uiPanelHeight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&uiEditwinWidth);
      LOBYTE(v234) = 0;
      if ( pkFrameWork && !InterlockedDecrement((volatile LONG *)&pkFrameWork->baseclass_0.m_pkMsgHooker) )
        ((void (__stdcall *)(_DWORD))pkFrameWork->baseclass_0.vfptr->SetMsgHooker)(1);
      v198 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChaE", &uiLeft, &uiTop, pkTexture);
      v199 = PgWinSpr::CreateWin(uiLeft - v177, uiTop - v178, v198, &v2->m_pkLBSocketWin->baseclass_0, 0, 0);
      v2->m_pkChatEngMode = v199;
      v199->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v199,
        0);
      v200 = v2->m_spFixedMtrlProp.m_pObject;
      v201 = v2->m_pkChatEngMode;
      pkFrameWork = (PgFrameWork *)v200;
      if ( v200 )
        InterlockedIncrement((volatile LONG *)&v200->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      LOBYTE(v234) = 8;
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v201->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&pkFrameWork);
      LOBYTE(v234) = 0;
      if ( v200
        && !InterlockedDecrement((volatile LONG *)&v200->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v200->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v200, 1u);
      v202 = v2->m_pkChattingBox;
      v203 = (PgFrameWork *)((int (*)(void))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      v204 = v202->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
      pkFrameWork = v203;
      v205 = ((int (__thiscall *)(FrameBoxWin *))v204)(v202);
      v2->m_uiChattingBoxWidthMinusEditBoxWidth = v205 - (_DWORD)pkFrameWork;
      v2->m_uiChatMode = 0;
      v206 = TextData::Get(0xEF05252Bu);
      v207 = v2->m_pkTabText;
      if ( v207 )
        ((void (__stdcall *)(char *))v207->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v206);
      v208 = v2->m_aspChatBD[0].m_pObject;
      v2->m_pkActiveChatBD = v208;
      ChatBoardFlex::SetSystemWindow(v208, 1);
      v2->m_uiActiveChatBoardIndex = 0;
      v209 = TextData::Get(0xEF05252Bu);
      v210 = v2->m_pkTabText;
      if ( v210 )
        ((void (__stdcall *)(char *))v210->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v209);
      v211 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
      v212 = PgWin::ms_uiScreenWidth;
      pkFrameWork = (PgFrameWork *)PgWin::ms_uiScreenHeight;
      v214 = 0;
      v215 = 0;
      v216 = 0;
      v217 = 0;
      v211(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        (unsigned int)&v214);
      iPanelLeft = v212;
      ((void (__thiscall *)(ChatDisplayWin *, signed int, signed int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v2,
        (signed int)((double)v212 * 0.0 - (double)v214),
        (signed int)((double)(unsigned int)pkFrameWork * 0.800000011920929));
      v234 = -1;
      if ( spNode.m_pObject )
      {
        v213 = spNode.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v213 )
            v213->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v213, 1u);
        }
      }
      result = 1;
    }
    else
    {
      v234 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v33 = spNode.m_pObject;
    v234 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v33 )
      v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A9541C: using guessed type char Folder__m_bInit;
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (005ECE90) --------------------------------------------------------
void __thiscall ChatDisplayWin::OnCommand(ChatDisplayWin *this, unsigned int wParam, int lParam)
{
  ChatDisplayWin *v3; // esi@1
  ChatBoardFlex *v4; // ecx@7
  char *v5; // eax@8
  PgWinText *v6; // ecx@8
  ChatBoardFlex *v7; // ecx@10
  ChatBoardFlex *v8; // ecx@11
  ChatBoardFlex *v9; // ecx@12
  char *v10; // eax@20
  unsigned int v11; // [sp-4h] [bp-8h]@7

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      ChatBoardFlex::ViewLineUp(this->m_pkActiveChatBD);
      return;
    case 1u:
      ChatBoardFlex::ViewLineDown(this->m_pkActiveChatBD);
      return;
    case 2u:
      ChatBoardFlex::ViewLineMostDown(this->m_pkActiveChatBD);
      return;
    case 0xAu:
      ChatDisplayWin::OnChatCommand(this);
      return;
    case 3u:
      ChatDisplayWin::OnTab(this);
      return;
    case 4u:
      v4 = this->m_aspChatBD[0].m_pObject;
      v3->m_pkActiveChatBD = v4;
      ChatBoardFlex::SetSystemWindow(v4, 1);
      v3->m_uiActiveChatBoardIndex = 0;
      v11 = -284875477;
      goto LABEL_8;
    case 5u:
      v7 = this->m_aspChatBD[1].m_pObject;
      v3->m_pkActiveChatBD = v7;
      ChatBoardFlex::SetSystemWindow(v7, 1);
      v3->m_uiActiveChatBoardIndex = 1;
      v11 = -179431613;
      goto LABEL_8;
    case 6u:
      v8 = this->m_aspChatBD[2].m_pObject;
      v3->m_pkActiveChatBD = v8;
      ChatBoardFlex::SetSystemWindow(v8, 1);
      v3->m_uiActiveChatBoardIndex = 2;
      v11 = -167392443;
      goto LABEL_8;
    case 7u:
      v9 = this->m_aspChatBD[3].m_pObject;
      v3->m_pkActiveChatBD = v9;
      ChatBoardFlex::SetSystemWindow(v9, 1);
      v3->m_uiActiveChatBoardIndex = 3;
      v11 = -285417689;
LABEL_8:
      v5 = TextData::Get(v11);
      v6 = v3->m_pkTabText;
      if ( v6 )
        ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v5);
      break;
    case 8u:
      ((void (__stdcall *)(_DWORD, _DWORD))this->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        PgWin::ms_iMsX.x,
        PgWin::ms_iMsY);
      PgWinMgr::OpenPopupWin(
        &Pgg_kWinMgr,
        0,
        &v3->m_spChatFilterPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      break;
    case 9u:
      GameFrameWork::OpenReportWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xBu:
      ChatDisplayWin::ChatStart(this, &byte_9BB48B);
      break;
    case 0xCu:
      ChatDisplayWin::ChatStart(this, "/w ");
      break;
    case 0xDu:
      ChatDisplayWin::ChatStart(this, "/s ");
      break;
    case 0xEu:
      ChatDisplayWin::ChatStart(this, "/p ");
      break;
    case 0xFu:
      ChatDisplayWin::ChatStart(this, "/g ");
      break;
    case 0x10u:
      TextData::Get(0x43706657u);
      v10 = fs("/%s ");
      ChatDisplayWin::ChatStart(v3, v10);
      break;
    case 0x11u:
      ChatDisplayWin::ChatStart(this, "/r ");
      break;
    case 0x12u:
      ((void (__stdcall *)(_DWORD, _DWORD))this->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        PgWin::ms_iMsX.x,
        PgWin::ms_iMsY);
      PgWinMgr::OpenPopupWin(
        &Pgg_kWinMgr,
        0,
        &v3->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      break;
    case 0x13u:
      this->m_pkCheckBox->m_bCheck = this->m_pkCheckBox->m_bCheck == 0;
      ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(this->m_pkCheckBox->m_bCheck == 0);
      v3->m_pkChattingBox->m_bLock = v3->m_pkCheckBox->m_bCheck;
      break;
    default:
      return;
  }
}

//----- (005ED140) --------------------------------------------------------
void __thiscall ChatDisplayWin::DirectMessage(ChatDisplayWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ChatDisplayWin *v4; // esi@1
  NiTListItem<NiPointer<NiProperty> > *v5; // eax@2
  IDirectMessenger *v6; // eax@3
  int v7; // eax@6
  NiTListItem<NiPointer<NiProperty> > *v8; // ecx@6
  int v9; // eax@6
  int v10; // eax@8
  NiTListItem<NiPointer<NiProperty> > *v11; // ecx@8
  NiTListItem<NiPointer<NiProperty> > *v12; // edi@8
  int v13; // eax@8
  int v14; // edi@9
  NiTListItem<NiPointer<NiProperty> > *v15; // eax@10
  NiTListItem<NiPointer<NiProperty> > *v16; // ebx@10
  _DWORD *v17; // ST3C_4@10
  int v18; // ST38_4@10
  int v19; // eax@10
  int v20; // eax@10
  NiMaterialProperty *v21; // eax@11
  NiRefObjectVtbl *v22; // edi@12
  NiTListItem<NiPointer<NiProperty> > *v23; // ebx@12
  int v24; // eax@12
  unsigned int v25; // eax@13
  int v26; // edi@14
  NiTListItem<NiPointer<NiProperty> > *v27; // ebx@14
  int v28; // eax@14
  unsigned int v29; // eax@15
  int v30; // edi@16
  int v31; // eax@16
  unsigned int v32; // eax@17
  int v33; // edi@18
  int v34; // eax@18
  unsigned int v35; // eax@19
  int v36; // edi@20
  int v37; // eax@20
  NiTListItem<NiPointer<NiProperty> > *v38; // ecx@21
  NiTListItem<NiPointer<NiProperty> > *v39; // edi@22
  NiTListItem<NiPointer<NiProperty> > *v40; // ebx@22
  int v41; // eax@22
  int v42; // eax@22
  IDirectMessengerVtbl *v43; // ebx@22
  void (__thiscall *v44)(IDirectMessenger *, IDirectMessenger *); // edi@22
  int v45; // eax@22
  IDirectMessengerVtbl *v46; // ebx@22
  void (__thiscall *v47)(IDirectMessenger *, IDirectMessenger *); // edi@22
  int v48; // eax@22
  NiTListItem<NiPointer<NiProperty> > *v49; // edi@22
  void (__thiscall *v50)(IDirectMessenger *, IDirectMessenger *); // ebx@22
  int v51; // eax@22
  int v52; // eax@22
  NiRefObjectVtbl *v53; // edi@24
  int v54; // eax@24
  NiTListItem<NiPointer<NiProperty> > *v55; // eax@25
  IDirectMessenger *v56; // eax@26
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v57; // eax@29
  IDirectMessenger *v58; // eax@30
  int v59; // eax@33
  IDirectMessenger *v60; // eax@34
  NiPointer<NiAVObject> *v61; // eax@38
  IDirectMessenger *v62; // eax@39
  NiTListItem<NiPointer<NiProperty> > *v63; // eax@43
  IDirectMessenger *v64; // eax@44
  NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *v65; // eax@47
  IDirectMessenger *v66; // eax@48
  int v67; // eax@52
  IDirectMessenger *v68; // eax@53
  NiPointer<NiAVObject> *v69; // eax@57
  IDirectMessenger *v70; // eax@58
  signed int v71; // edi@62
  char *v72; // eax@68
  int v73; // ecx@68
  ActionWin *v74; // ecx@72
  float v75; // esi@74
  int uiHeight; // [sp+30h] [bp-10h]@6
  int uiWidth; // [sp+34h] [bp-Ch]@6
  NiProperty *iMsgTaga; // [sp+48h] [bp+8h]@10
  NiTListItem<NiPointer<NiProperty> > *pvBodya; // [sp+4Ch] [bp+Ch]@10
  int pkFromb; // [sp+50h] [bp+10h]@6
  NiTListItem<NiPointer<NiProperty> > *pkFromc; // [sp+50h] [bp+10h]@6
  int pkFromd; // [sp+50h] [bp+10h]@8
  signed int pkFroma; // [sp+50h] [bp+10h]@9
  int pkFrome; // [sp+50h] [bp+10h]@12
  int pkFromf; // [sp+50h] [bp+10h]@14
  IDirectMessengerVtbl *pkFromg; // [sp+50h] [bp+10h]@22

  v4 = this;
  switch ( iMsgTag )
  {
    case 14:
      v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
      if ( v5 )
        v6 = (IDirectMessenger *)&v5[19].m_pkPrev;
      else
        v6 = 0;
      if ( pkFrom == v6 )
      {
        pkFromb = *((_DWORD *)this - 58);
        v7 = (*(int (__thiscall **)(char *))(pkFromb + 168))((char *)this - 232);
        (*(void (__thiscall **)(char *, int))(pkFromb + 176))((char *)v4 - 232, *((_DWORD *)pvBody + 1) + v7);
        v8 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
        pkFromc = v8->m_pkNext;
        v9 = ((int (*)(void))v8->m_pkNext[13].m_element.m_pObject)();
        ((void (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, int))pkFromc[14].m_pkPrev)(
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
          *(_DWORD *)pvBody + v9);
        uiWidth = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead->m_pkNext[12].m_pkNext)()
                - 2
                * (unsigned int)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead[29].m_element.m_pObject;
        uiHeight = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead->m_pkNext[12].m_pkPrev)()
                 - 2
                 * (unsigned int)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead[29].m_pkPrev;
        if ( *((_DWORD *)pvBody + 2) && !*(_DWORD *)pvBody )
        {
          pkFromd = *((_DWORD *)v4 - 58);
          v10 = (*(int (__thiscall **)(char *))(pkFromd + 164))((char *)v4 - 232);
          (*(void (__thiscall **)(char *, int))(pkFromd + 172))((char *)v4 - 232, *((_DWORD *)pvBody + 2) + v10);
          v11 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
          v12 = v11->m_pkNext;
          v13 = ((int (*)(void))v11->m_pkNext[13].m_element.m_pObject)();
          ((void (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, int))v12[14].m_pkPrev)(
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead,
            v13 - *((_DWORD *)pvBody + 2));
        }
        v14 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate;
        pkFroma = 4;
        do
        {
          v15 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
          v16 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
          iMsgTaga = v15[29].m_element.m_pObject;
          pvBodya = v15[29].m_pkPrev;
          v17 = *(_DWORD **)v14;
          v18 = **(_DWORD **)v14 + 308;
          v19 = ((int (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *))v16->m_pkNext[14].m_pkNext)(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead);
          v20 = ((int (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, char *))v16->m_pkNext[13].m_element.m_pObject)(
                  v16,
                  (char *)pvBodya + v19);
          (*(void (__thiscall **)(_DWORD *, char *))v18)(v17, (char *)iMsgTaga + v20);
          (*(void (__stdcall **)(int))(**(_DWORD **)v14 + 152))(uiWidth);
          (*(void (__stdcall **)(int))(**(_DWORD **)v14 + 156))(uiHeight);
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v14 + 324))(LODWORD(Timer::ms_fCurTime));
          v14 += 4;
          --pkFroma;
        }
        while ( pkFroma );
        v21 = v4->baseclass_0.baseclass_0.baseclass_0.m_spMaterialProp.m_pObject;
        if ( v21 )
        {
          v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v23 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
          pkFrome = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
          v24 = ((int (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *))v23->m_pkNext[12].m_pkNext)(v23);
          v22[43].__vecDelDtor(
            (NiRefObject *)v4->baseclass_0.baseclass_0.baseclass_0.m_spMaterialProp.m_pObject,
            pkFrome - v24);
        }
        v25 = v4->baseclass_0.baseclass_0.baseclass_0.m_uiDepth;
        if ( v25 )
        {
          v26 = *(_DWORD *)v25;
          v27 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
          pkFromf = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
          v28 = ((int (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *))v27->m_pkNext[12].m_pkNext)(v27);
          (*(void (__thiscall **)(unsigned int, int))(v26 + 172))(
            v4->baseclass_0.baseclass_0.baseclass_0.m_uiDepth,
            pkFromf - v28);
        }
        v29 = v4->baseclass_0.baseclass_0.baseclass_0.m_uiExtStyle;
        if ( v29 )
        {
          v30 = *(_DWORD *)v29;
          v31 = (*(int (__thiscall **)(_DWORD))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
          (*(void (__thiscall **)(unsigned int, int))(v30 + 172))(
            v4->baseclass_0.baseclass_0.baseclass_0.m_uiExtStyle,
            v31);
        }
        v32 = v4->baseclass_0.baseclass_0.baseclass_0.m_uiDepth;
        if ( v32 )
        {
          v33 = *(_DWORD *)v32;
          v34 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead->m_pkNext[12].m_pkPrev)();
          (*(void (__thiscall **)(unsigned int, int))(v33 + 176))(
            v4->baseclass_0.baseclass_0.baseclass_0.m_uiDepth,
            v34);
        }
        v35 = v4->baseclass_0.baseclass_0.baseclass_0.m_uiExtStyle;
        if ( v35 )
        {
          v36 = *(_DWORD *)v35;
          v37 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead->m_pkNext[12].m_pkPrev)();
          (*(void (__thiscall **)(unsigned int, int))(v36 + 176))(
            v4->baseclass_0.baseclass_0.baseclass_0.m_uiExtStyle,
            v37);
        }
        v38 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail;
        if ( v38 )
        {
          v39 = v38->m_pkNext;
          v40 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
          v41 = ((int (*)(void))v38->m_pkNext[12].m_pkPrev)();
          v42 = ((int (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, int))v40->m_pkNext[12].m_pkNext)(v40, v41);
          ((void (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, int))v39[45].m_pkNext)(
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail,
            v42 - *(_DWORD *)&v4->baseclass_0.baseclass_0.baseclass_0.m_bResigterFirstHit);
          v43 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr;
          v44 = v43->SetMsgHooker;
          v45 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail->m_pkNext[12].m_pkNext)();
          (*(void (__thiscall **)(IDirectMessengerVtbl *, int))((void (__thiscall **)(_DWORD, _DWORD))v44 + 38))(
            v43,
            v45 - 4);
          v46 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr;
          v47 = v46->SetMsgHooker;
          v48 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail->m_pkNext[12].m_pkPrev)();
          (*(void (__thiscall **)(IDirectMessengerVtbl *, int))((void (__thiscall **)(_DWORD, _DWORD))v47 + 39))(
            v46,
            v48 - 1);
          v49 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail;
          v50 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker;
          pkFromg = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr;
          v51 = ((int (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *))v49->m_pkNext[14].m_pkNext)(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail);
          v52 = ((int (__thiscall *)(NiTListItem<NiPointer<NiProperty> > *, int))v49->m_pkNext[13].m_element.m_pObject)(
                  v49,
                  v51 + 4);
          (*(void (__thiscall **)(IDirectMessengerVtbl *, int))((void (__thiscall **)(_DWORD, _DWORD))v50 + 77))(
            pkFromg,
            v52 + 4);
        }
        if ( v4->baseclass_0.baseclass_0.baseclass_0.m_spMaterialProp.m_pObject )
        {
          v53 = v4->m_aspChatBD[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v54 = ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead->m_pkNext[12].m_pkNext)();
          v53[43].__vecDelDtor((NiRefObject *)v4->m_aspChatBD[3].m_pObject, v54);
        }
      }
      break;
    case 2:
      v55 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
      if ( v55 )
        v56 = (IDirectMessenger *)&v55[19].m_pkPrev;
      else
        v56 = 0;
      if ( pkFrom == v56
        || ((v57 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr) == 0 ? (v58 = 0) : (v58 = (IDirectMessenger *)&v57[19].NewItem),
            v58 == pkFrom) )
        goto LABEL_51;
      v59 = *(_DWORD *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v59 )
        v60 = (IDirectMessenger *)(v59 + 232);
      else
        v60 = 0;
      if ( v60 == pkFrom )
      {
        *(float *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.vfptr = Timer::ms_fCurTime;
        LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject) = 1;
      }
      else
      {
        v61 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_pBase;
        if ( v61 )
          v62 = (IDirectMessenger *)&v61[58];
        else
          v62 = 0;
        if ( v62 == pkFrom )
        {
          *(float *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiSize = Timer::ms_fCurTime;
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiMaxSize) = 1;
        }
      }
      break;
    case 5:
      v63 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
      if ( v63 )
        v64 = (IDirectMessenger *)&v63[19].m_pkPrev;
      else
        v64 = 0;
      if ( pkFrom == v64
        || ((v65 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr) == 0 ? (v66 = 0) : (v66 = (IDirectMessenger *)&v65[19].NewItem),
            v66 == pkFrom) )
LABEL_51:
        *(float *)&this->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText = 0.0;
      break;
    case 3:
      v67 = *(_DWORD *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v67 )
        v68 = (IDirectMessenger *)(v67 + 232);
      else
        v68 = 0;
      if ( v68 == pkFrom )
      {
        LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject) = 0;
      }
      else
      {
        v69 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_pBase;
        if ( v69 )
          v70 = (IDirectMessenger *)&v69[58];
        else
          v70 = 0;
        if ( v70 == pkFrom )
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiMaxSize) = 0;
      }
      break;
    case 15:
      v71 = 0;
      switch ( *(_DWORD *)pvBody )
      {
        case 0x11:
          v71 = 1;
          break;
        case 0x12:
          v71 = 8;
          break;
        case 0x13:
          v71 = 16;
          break;
        case 0x14:
          v71 = 32;
          break;
        case 0x15:
          v71 = 4096;
          break;
        case 0x1B:
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) = 0;
          v72 = TextData::Get(0xEF05252Bu);
          v73 = v4->baseclass_0.baseclass_0.baseclass_0.___u3.m_iHeight;
          if ( v73 )
            (*(void (__stdcall **)(char *))(*(_DWORD *)v73 + 472))(v72);
          break;
        case 0x1C:
          ChatDisplayWin::SetChatMode((ChatDisplayWin *)((char *)this - 232), 2u);
          break;
        case 0x1D:
          ChatDisplayWin::SetChatMode((ChatDisplayWin *)((char *)this - 232), 3u);
          break;
        case 0x3E:
        case 0x3F:
        case 0x40:
        case 0x41:
        case 0x42:
        case 0x43:
        case 0x44:
        case 0x45:
        case 0x46:
        case 0x47:
        case 0x48:
        case 0x49:
        case 0x4A:
        case 0x4B:
        case 0x4C:
        case 0x4D:
        case 0x4E:
          v74 = *(ActionWin **)(LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0])
                              + 768);
          if ( v74 )
            ActionWin::OnEmotionAction(v74, *(_DWORD *)pvBody - 62);
          break;
        default:
          break;
      }
      v75 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.x;
      if ( *((_BYTE *)pvBody + 4) )
        *(_DWORD *)(LODWORD(v75) + 512) |= v71;
      else
        *(_DWORD *)(LODWORD(v75) + 512) &= ~v71;
      break;
    default:
      return;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005ED7E0) --------------------------------------------------------
ChatDisplayWin *__cdecl ChatDisplayWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ChatDisplayWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x26Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ChatDisplayWin::ChatDisplayWin((ChatDisplayWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 544))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ChatDisplayWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005ED910) --------------------------------------------------------
void *__thiscall SysMsgDisplayWin::_vector_deleting_destructor_(SysMsgDisplayWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ChatDisplayWin::_ChatDisplayWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005ED940) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnUp(ChatDisplayWin2 *this)
{
  ChatBoardFlex::ViewLineUp(this->m_pkActiveChatBD);
}

//----- (005ED950) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnDown(ChatDisplayWin2 *this)
{
  ChatBoardFlex::ViewLineDown(this->m_pkActiveChatBD);
}

//----- (005ED960) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnMostDown(ChatDisplayWin2 *this)
{
  ChatBoardFlex::ViewLineMostDown(this->m_pkActiveChatBD);
}

//----- (005ED980) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::IsOnCandList(ChatDisplayWin2 *this)
{
  return 0;
}

//----- (005ED990) --------------------------------------------------------
bool __usercall IsAllSpace_0<al>(char *pcSrc<ecx>)
{
  char v1; // al@2

  if ( pcSrc )
  {
    v1 = *pcSrc;
    if ( *pcSrc )
    {
      while ( v1 == 32 )
      {
        v1 = (pcSrc++)[1];
        if ( !v1 )
          return 1;
      }
    }
  }
  return 0;
}

//----- (005ED9C0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddSystemChat(ChatDisplayWin2 *this, const char *pcFormat)
{
  char str[256]; // [sp+0h] [bp-104h]@1
  unsigned int v3; // [sp+100h] [bp-4h]@1
  int v4; // [sp+104h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  _wsprintfA(str, "%s", pcFormat);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EDA00) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddAuthorChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  char str[256]; // [sp+4h] [bp-104h]@1
  unsigned int v4; // [sp+104h] [bp-4h]@1
  int v5; // [sp+108h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  ChatBoardFlex::Add(v2->m_pkActiveChatBD, (ChatBoardFlex::Type)128, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EDA60) --------------------------------------------------------
void __thiscall ChatDisplayWin2::GetSize(ChatDisplayWin2 *this, unsigned int *ruiWidth, unsigned int *ruiHeight)
{
  ChatDisplayWin2 *v3; // esi@1

  v3 = this;
  *ruiWidth = ((int (*)(void))this->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  *ruiHeight = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
}

//----- (005EDAA0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetSize(ChatDisplayWin2 *this, unsigned int uiWidth, unsigned int uiHeight)
{
  ChatDisplayWin2 *v3; // esi@1
  unsigned int v4; // ST18_4@1
  int v5; // edi@1
  int v6; // ebx@1
  int v7; // ST18_4@1
  int v8; // eax@1
  FrameBoxWin *v9; // ecx@1
  int v10; // eax@1
  FrameBoxWin *v11; // ecx@1
  FrameBoxWin *v12; // eax@1
  int v13; // eax@2
  DirectUserMsgBody_SizeDrag kDrag; // [sp+10h] [bp-14h]@1
  unsigned int v15; // [sp+20h] [bp-4h]@1
  int v16; // [sp+24h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = this;
  v4 = ((int (*)(void))this->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
     - uiWidth;
  v5 = v4
     + ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v6 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
     - v4;
  v7 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  ((void (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  ((void (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v8 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v9 = v3->m_pkChattingBox;
  kDrag.iDeltaWidth = v6 - v8;
  kDrag.iDeltaHeight = uiHeight
                     - ((int (*)(void))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v10 = ((int (*)(void))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v11 = v3->m_pkChattingBox;
  kDrag.iDeltaLeft = v5 - v10;
  kDrag.iDeltaTop = v7
                  - ((int (*)(void))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  ((void (__stdcall *)(unsigned int, unsigned int))v3->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    uiWidth,
    uiHeight);
  v12 = v3->m_pkChattingBox;
  if ( v12 )
    v13 = (int)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  else
    v13 = 0;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectMessage(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    14,
    &kDrag,
    (IDirectMessenger *)v13);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EDBE0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetDefaultSize(ChatDisplayWin2 *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    this->m_uiDefaultWidth,
    this->m_uiDefaultHeight);
}

//----- (005EDC00) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnChatCommand(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // ebx@1
  PgWinSpr *v2; // eax@2
  NiRefObjectVtbl *v3; // esi@2
  char v4; // al@2
  int v5; // edi@2
  int v6; // esi@3
  unsigned __int8 v7; // al@3
  signed int v8; // [sp+4h] [bp-4h]@2

  v1 = this;
  if ( this->m_pkChatCommandSprWin )
  {
    v2 = this->m_pkChatCommandSprWin;
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
    v3[64].__vecDelDtor((NiRefObject *)v1->m_pkChatCommandSprWin, v4 == 0);
    v5 = (int)v1->m_pkChatCmdBut;
    v8 = 11;
    do
    {
      v6 = **(_DWORD **)v5;
      v7 = ((int (*)(void))v1->m_pkChatCommandSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      (*(void (__thiscall **)(_DWORD, _DWORD))(v6 + 256))(*(_DWORD *)v5, v7);
      v5 += 4;
      --v8;
    }
    while ( v8 );
  }
}

//----- (005EDC90) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnWhisperHotKeyTab(ChatDisplayWin2 *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
    22,
    1);
}

//----- (005EDCA0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnPartyHotKeyTab(ChatDisplayWin2 *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
    23,
    1);
}

//----- (005EDCB0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnGuildHotKeyTab(ChatDisplayWin2 *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
    24,
    1);
}

//----- (005EDCC0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnNormalHotKeyTab(ChatDisplayWin2 *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
    26,
    1);
}

//----- (005EDCD0) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::IsChatStart(ChatDisplayWin2 *this)
{
  bool result; // al@2

  if ( this->m_pkChatEditBox )
    result = ((int (*)(void))this->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  else
    result = 0;
  return result;
}

//----- (005EDCF0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetChatNameEditText(ChatDisplayWin2 *this, const char *sName)
{
  ((void (__stdcall *)(_DWORD))this->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(sName);
}

//----- (005EDD10) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetWhisperEditFocus(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // esi@1

  v1 = this;
  if ( this->m_uiChatMode == 1 )
  {
    ((void (*)(void))this->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
    EditWin::SelectAll(v1->m_pkChatNameEditBox);
  }
}

//----- (005EDD40) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnGuildAcademyHotKeyTab(ChatDisplayWin2 *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
    25,
    1);
}

//----- (005EDD50) --------------------------------------------------------
char *__thiscall ChatDisplayWin2::GetCharName(ChatDisplayWin2 *this, char *pcRetCharName, char *pcChatText)
{
  char v3; // al@2
  int v4; // esi@2
  int v5; // eax@6
  char *v6; // ecx@6
  char *v7; // esi@6
  char v8; // dl@7
  int v9; // ecx@8
  int v10; // esi@8
  char v11; // dl@9
  unsigned int v12; // ecx@10

  if ( pcChatText )
  {
    v3 = *pcChatText;
    v4 = 0;
    if ( *pcChatText == 91 )
    {
LABEL_6:
      strchr(pcChatText, 93);
      v6 = &pcChatText[v4 + 1];
      v7 = &pcChatText[v4 + 2];
      do
        v8 = *v6++;
      while ( v8 );
      v9 = v6 - v7;
      v10 = v5 + 1;
      do
        v11 = *(_BYTE *)v5++;
      while ( v11 );
      v12 = v9 - (v5 - v10);
      if ( v12 <= 0x14 )
        strncpy(pcRetCharName, pcChatText + 1, v12);
    }
    else
    {
      if ( v3 == 123 )
      {
        while ( v3 != 125 )
        {
          v3 = pcChatText[v4++ + 1];
          if ( v3 == 91 )
            goto LABEL_6;
        }
      }
    }
  }
  return 0;
}

//----- (005EDDC0) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::IsSameCharName(ChatDisplayWin2 *this, char *pcCharName, char *pcStr2)
{
  bool result; // al@2
  char acStrCharName[20]; // [sp+4h] [bp-18h]@1
  unsigned int v5; // [sp+18h] [bp-4h]@1
  int v6; // [sp+1Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  *(_DWORD *)&acStrCharName[1] = 0;
  *(_DWORD *)&acStrCharName[5] = 0;
  *(_DWORD *)&acStrCharName[9] = 0;
  *(_DWORD *)&acStrCharName[13] = 0;
  *(_WORD *)&acStrCharName[17] = 0;
  acStrCharName[19] = 0;
  acStrCharName[0] = 0;
  ChatDisplayWin2::GetCharName(this, acStrCharName, pcStr2);
  if ( acStrCharName[0] )
    result = strncmp(pcCharName, acStrCharName, 0x14u) == 0;
  else
    result = 0;
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (005EDE40) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::DoesSpamFilterWinOpen(ChatDisplayWin2 *this)
{
  bool result; // al@2

  if ( this->m_pkSpamFilterPanel )
    result = ((int (*)(void))this->m_pkSpamFilterPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  else
    result = 1;
  return result;
}

//----- (005EDE60) --------------------------------------------------------
void __thiscall ChatDisplayWin2::MoveSpamFilterWindow(ChatDisplayWin2 *this, int fX, int fY)
{
  ChatDisplayWin2 *v3; // esi@1
  NiRefObjectVtbl *v4; // ebx@1
  int v5; // eax@1
  int v6; // edi@1
  PgWinSpr *v7; // eax@1
  int v8; // eax@1
  PgWinText *v9; // ecx@1
  int v10; // eax@1
  PgWinText *v11; // eax@1
  int v12; // eax@1
  ColumnBut *v13; // ecx@1
  int v14; // eax@1
  ColumnBut *v15; // eax@1
  int v16; // eax@1
  PgWinText *v17; // ecx@1
  int v18; // eax@1
  PgWinText *v19; // eax@1
  int v20; // eax@1
  ColumnBut *v21; // ecx@1
  int v22; // eax@1
  ColumnBut *v23; // eax@1
  int v24; // eax@1
  PgWinText *v25; // ecx@1
  int v26; // eax@1
  PgWinText *v27; // eax@1
  int v28; // eax@1
  SlideBar *v29; // ecx@1
  int v30; // eax@1
  NiRefObjectVtbl *v31; // edi@1
  int v32; // eax@1
  NiRefObjectVtbl *fXa; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXb; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXc; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXd; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXe; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXf; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXg; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXh; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXi; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXj; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXk; // [sp+14h] [bp+8h]@1
  NiRefObjectVtbl *fXl; // [sp+14h] [bp+8h]@1

  v3 = this;
  v4 = this->m_pkSpamFilterPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = ((int (*)(void))this->m_pkSpamFilterPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v6 = fX;
  v4[43].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterPanel, fX + v5);
  v7 = v3->m_pkSpamFilterPanel;
  fXa = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v8 = ((int (*)(void))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  fXa[44].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterPanel, fY + v8);
  v9 = v3->m_pkTextSFOnOff;
  fXb = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v10 = ((int (*)(void))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  fXb[43].__vecDelDtor((NiRefObject *)v3->m_pkTextSFOnOff, v6 + v10);
  v11 = v3->m_pkTextSFOnOff;
  fXc = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v12 = ((int (*)(void))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  fXc[44].__vecDelDtor((NiRefObject *)v3->m_pkTextSFOnOff, fY + v12);
  v13 = v3->m_pkSpamFilterOnOff;
  fXd = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = ((int (*)(void))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  fXd[43].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterOnOff, v6 + v14);
  v15 = v3->m_pkSpamFilterOnOff;
  fXe = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v16 = ((int (*)(void))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  fXe[44].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterOnOff, fY + v16);
  v17 = v3->m_pkTextSFMsgShow;
  fXf = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = ((int (*)(void))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  fXf[43].__vecDelDtor((NiRefObject *)v3->m_pkTextSFMsgShow, v6 + v18);
  v19 = v3->m_pkTextSFMsgShow;
  fXg = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v20 = ((int (*)(void))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  fXg[44].__vecDelDtor((NiRefObject *)v3->m_pkTextSFMsgShow, fY + v20);
  v21 = v3->m_pkSpamFilterMsgShow;
  fXh = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v22 = ((int (*)(void))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  fXh[43].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterMsgShow, v6 + v22);
  v23 = v3->m_pkSpamFilterMsgShow;
  fXi = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 = ((int (*)(void))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  fXi[44].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterMsgShow, fY + v24);
  v25 = v3->m_pkTextSFSlide;
  fXj = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v26 = ((int (*)(void))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  fXj[43].__vecDelDtor((NiRefObject *)v3->m_pkTextSFSlide, v6 + v26);
  v27 = v3->m_pkTextSFSlide;
  fXk = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = ((int (*)(void))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  fXk[44].__vecDelDtor((NiRefObject *)v3->m_pkTextSFSlide, fY + v28);
  v29 = v3->m_pkSpamFilterSlide;
  fXl = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v30 = ((int (*)(void))v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  fXl[43].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterSlide, v6 + v30);
  v31 = v3->m_pkSpamFilterSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v32 = ((int (*)(void))v3->m_pkSpamFilterSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v31[44].__vecDelDtor((NiRefObject *)v3->m_pkSpamFilterSlide, fY + v32);
}

//----- (005EE0C0) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::ProcessDrop(ChatDisplayWin2 *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  return 0;
}

//----- (005EE0D0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::InsertText(ChatDisplayWin2 *this, char *pResultText, char *pCurText, char *pInserText, int nInsertPos)
{
  unsigned int v5; // eax@1
  void *v6; // edi@1
  char v7; // cl@2
  void *v8; // edi@3
  const void *v9; // esi@3
  int v10; // ecx@3
  char *v11; // eax@3
  const void *v12; // esi@3
  char v13; // cl@4
  unsigned int v14; // eax@5
  void *v15; // edi@5
  char v16; // cl@6

  strncpy(pResultText, pCurText, nInsertPos);
  v5 = strlen(pInserText) + 1;
  v6 = pResultText - 1;
  do
  {
    v7 = *((_BYTE *)v6 + 1);
    v6 = (char *)v6 + 1;
  }
  while ( v7 );
  memcpy(v6, pInserText, 4 * (v5 >> 2));
  v9 = &pInserText[4 * (v5 >> 2)];
  v8 = (char *)v6 + 4 * (v5 >> 2);
  v10 = v5 & 3;
  v11 = &pCurText[nInsertPos];
  memcpy(v8, v9, v10);
  v12 = &pCurText[nInsertPos];
  do
    v13 = *v11++;
  while ( v13 );
  v14 = v11 - v12;
  v15 = pResultText - 1;
  do
  {
    v16 = *((_BYTE *)v15 + 1);
    v15 = (char *)v15 + 1;
  }
  while ( v16 );
  memcpy(v15, v12, v14);
}

//----- (005EE150) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnChatBlockBtn(ChatDisplayWin2 *this)
{
  GameFrameWork::OpenChatBlockListWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005EE160) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnReport(ChatDisplayWin2 *this)
{
  GameFrameWork::OpenReportWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (005EE170) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnTab(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // esi@1
  NiSourceTexture *v2; // eax@1
  PopupMenuWin *v3; // eax@1
  PopupMenuWin *v4; // edi@1
  PopupMenuWin *v5; // ebx@1
  signed int v6; // ebx@8
  int v7; // edi@8
  int v8; // eax@9
  int v9; // edx@14
  int v10; // ecx@14
  int v11; // edx@14
  PopupMenuText *v12; // eax@14
  int v13; // eax@16
  PopupMenuWin *v14; // ecx@16
  PgWinBut *v15; // edi@16
  int v16; // ebx@16
  int v17; // eax@16
  PgWinProxy *v18; // ecx@16
  FrameBoxWin *v19; // edi@16
  PopupMenuWin *v20; // ebx@16
  int v21; // eax@16
  int x; // [sp+Ch] [bp-28h]@16
  int y; // [sp+10h] [bp-24h]@16
  int iCount; // [sp+14h] [bp-20h]@1
  char acName[21]; // [sp+18h] [bp-1Ch]@9
  unsigned int v26; // [sp+30h] [bp-4h]@1
  int v27; // [sp+34h] [bp+0h]@1

  v26 = (unsigned int)&v27 ^ __security_cookie;
  v1 = this;
  iCount = 0;
  v2 = MenuTexMgr::GetTexture(1u);
  v3 = PopupMenuWin::CreateWin(v2, 4u, 4u, 0);
  v4 = v1->m_spChatModePopupMenu.m_pObject;
  v5 = v3;
  if ( v4 != v3 )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spChatModePopupMenu.m_pObject = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v1->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v1->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  PopupMenuWin::Clear(v1->m_spChatModePopupMenu.m_pObject);
  v6 = 0;
  v7 = (int)&v1->baseclass_0.m_pkFrameWork[130].m_kMsgQ.m_uiTail;
  do
  {
    *(_DWORD *)&acName[16] = 0;
    *(_DWORD *)&acName[12] = 0;
    *(_DWORD *)&acName[8] = 0;
    *(_DWORD *)&acName[4] = 0;
    *(_DWORD *)acName = 0;
    strncpy(acName, &byte_9BB953, 0x14u);
    v8 = *(_DWORD *)(v7 - 8);
    if ( v8 != *(_DWORD *)acName
      || *(_DWORD *)(v7 - 4) != *(_DWORD *)&acName[4]
      || *(_DWORD *)v7 != *(_DWORD *)&acName[8]
      || *(_DWORD *)(v7 + 4) != *(_DWORD *)&acName[12]
      || *(_DWORD *)(v7 + 8) != *(_DWORD *)&acName[16] )
    {
      v9 = *(_DWORD *)(v7 - 4);
      v10 = *(_DWORD *)(v7 + 4);
      ++iCount;
      *(_DWORD *)acName = v8;
      *(_DWORD *)&acName[8] = *(_DWORD *)v7;
      *(_DWORD *)&acName[4] = v9;
      v11 = *(_DWORD *)(v7 + 8);
      *(_DWORD *)&acName[12] = v10;
      *(_DWORD *)&acName[16] = v11;
      acName[20] = 0;
      v12 = PopupMenuText::CreateWin(acName, 0, 0, 0, 0, 0, 0);
      v12->baseclass_0.m_ePopupMenuID = v6 + 79;
      PopupMenuWin::AddMenu(v1->m_spChatModePopupMenu.m_pObject, &v12->baseclass_0);
    }
    ++v6;
    v7 += 20;
  }
  while ( v6 < 6 );
  PopupMenuWin::FinishMenu(v1->m_spChatModePopupMenu.m_pObject, 0);
  ((void (__stdcall *)(_DWORD))v1->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v13 = ((int (*)(void))v1->m_pkWhisperListBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v14 = v1->m_spChatModePopupMenu.m_pObject;
  v15 = v1->m_pkWhisperListBtn;
  x = v13;
  v16 = ((int (*)(void))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v17 = ((int (__thiscall *)(PgWinBut *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v15);
  v18 = v1->m_pkLTSocketWin;
  y = v17 - v16;
  ((void (__stdcall *)(int *, int *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(
    &x,
    &y);
  v19 = v1->m_pkChattingBox;
  v20 = v1->m_spChatModePopupMenu.m_pObject;
  v21 = ((int (__thiscall *)(FrameBoxWin *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v1->m_pkChattingBox);
  ((void (__thiscall *)(PopupMenuWin *, int, unsigned int))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    v20,
    x,
    y + v21 - 2 * v19->m_uiEdgeHeight);
  if ( iCount > 0 )
    PgWinMgr::OpenPopupWin(
      &Pgg_kWinMgr,
      0,
      &v1->m_spChatModePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE3A0) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::IsDuringEdit(ChatDisplayWin2 *this)
{
  return ((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)();
}

//----- (005EE3B0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddGMNormalChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatBoardFlex **v2; // esi@1
  signed int v3; // edi@1

  v2 = (ChatBoardFlex **)this->m_aspChatBD;
  v3 = 5;
  do
  {
    ChatBoardFlex::AddGMUserChat(*v2, pcFormat);
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (005EE3E0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddGMOtherNormalChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatBoardFlex **v2; // esi@1
  signed int v3; // edi@1

  v2 = (ChatBoardFlex **)this->m_aspChatBD;
  v3 = 5;
  do
  {
    ChatBoardFlex::Add(*v2, (ChatBoardFlex::Type)1024, pcFormat);
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (005EE410) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddGMShoutChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)2048, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE480) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddGMWhisperChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)4106, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE4F0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddShoutChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, COLUMN, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE560) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOtherShoutChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, COLUMN, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE5D0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddWhisperChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)8, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE640) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddPartyChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)16, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE6B0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOtherPartyChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)16, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE720) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddRaidChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)8192, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE790) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOtherRaidChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)8192, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE800) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddRaidNoticeChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)16384, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE870) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddGuildChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)32, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE8E0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOtherGuildChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)32, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE950) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddGuildAcademyChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)4096, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EE9C0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOtherGuildAcademyChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  ChatBoardFlex **v3; // esi@1
  signed int v4; // edi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  _wsprintfA(str, "%s", pcFormat);
  v3 = (ChatBoardFlex **)v2->m_aspChatBD;
  v4 = 5;
  do
  {
    ChatBoardFlex::Add(*v3, (ChatBoardFlex::Type)4096, str);
    ++v3;
    --v4;
  }
  while ( v4 );
}
// A85C00: using guessed type int __security_cookie;

//----- (005EEA30) --------------------------------------------------------
unsigned int __thiscall ChatDisplayWin2::GetOption(ChatDisplayWin2 *this, unsigned int uiChatMode)
{
  return this->m_aspChatBD[uiChatMode].m_pObject->m_uiOption;
}

//----- (005EEA50) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetOption(ChatDisplayWin2 *this, unsigned int uiOpt, unsigned int uiChatMode)
{
  ChatDisplayWin2 *v3; // edi@1
  char *v4; // esi@1
  int v5; // esi@4
  int v6; // esi@7
  int v7; // esi@10
  int v8; // esi@13
  int v9; // esi@16
  int v10; // esi@19
  DirectUserMsgBody_PopupMenuSetCheckBox kBody; // [sp+Ch] [bp-8h]@1

  v3 = this;
  this->m_aspChatBD[uiChatMode].m_pObject->m_uiOption = uiOpt;
  v4 = (char *)&this->m_spChatFilterPopupMenu[uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 17;
  kBody.bCheck = (uiOpt >> 9) & 1;
  if ( *((_DWORD *)v4 + 1) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v4 + 1) + 4))(
      16,
      &kBody,
      v4);
    if ( *((_DWORD *)v4 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v4 + 1) + 16))(
        16,
        &kBody,
        v4);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(*(_DWORD *)v4 + 16))(
    v4,
    16,
    &kBody,
    v4);
  v5 = (int)&v3->m_spChatFilterPopupMenu[uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 18;
  kBody.bCheck = (uiOpt >> 3) & 1;
  if ( *(_DWORD *)(v5 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 4))(
      16,
      &kBody,
      v5);
    if ( *(_DWORD *)(v5 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 16))(
        16,
        &kBody,
        v5);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v5 + 16))(
    v5,
    16,
    &kBody,
    v5);
  v6 = (int)&v3->m_spChatFilterPopupMenu[uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 19;
  kBody.bCheck = (uiOpt >> 4) & 1;
  if ( *(_DWORD *)(v6 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 4))(
      16,
      &kBody,
      v6);
    if ( *(_DWORD *)(v6 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 16))(
        16,
        &kBody,
        v6);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v6 + 16))(
    v6,
    16,
    &kBody,
    v6);
  v7 = (int)&v3->m_spChatFilterPopupMenu[uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 20;
  kBody.bCheck = (uiOpt >> 5) & 1;
  if ( *(_DWORD *)(v7 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 4))(
      16,
      &kBody,
      v7);
    if ( *(_DWORD *)(v7 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 16))(
        16,
        &kBody,
        v7);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v7 + 16))(
    v7,
    16,
    &kBody,
    v7);
  v8 = (int)&v3->m_spChatFilterPopupMenu[uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 21;
  kBody.bCheck = (uiOpt >> 12) & 1;
  if ( *(_DWORD *)(v8 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v8 + 4) + 4))(
      16,
      &kBody,
      v8);
    if ( *(_DWORD *)(v8 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v8 + 4) + 16))(
        16,
        &kBody,
        v8);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v8 + 16))(
    v8,
    16,
    &kBody,
    v8);
  v9 = (int)&v3->m_spChatFilterPopupMenu[uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 24;
  kBody.bCheck = (uiOpt >> 1) & 1;
  if ( *(_DWORD *)(v9 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v9 + 4) + 4))(
      16,
      &kBody,
      v9);
    if ( *(_DWORD *)(v9 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v9 + 4) + 16))(
        16,
        &kBody,
        v9);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v9 + 16))(
    v9,
    16,
    &kBody,
    v9);
  v10 = (int)&v3->m_spChatFilterPopupMenu[uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 22;
  kBody.bCheck = (uiOpt >> 13) & 1;
  if ( *(_DWORD *)(v10 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v10 + 4) + 4))(
      16,
      &kBody,
      v10);
    if ( *(_DWORD *)(v10 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v10 + 4) + 16))(
        16,
        &kBody,
        v10);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v10 + 16))(
    v10,
    16,
    &kBody,
    v10);
}

//----- (005EED00) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOption(ChatDisplayWin2 *this, unsigned int uiOpt)
{
  ChatBoardFlex *v2; // ecx@1

  v2 = this->m_aspChatBD[this->m_uiChatMode].m_pObject;
  v2->m_uiOption |= uiOpt;
}

//----- (005EED20) --------------------------------------------------------
void __thiscall ChatDisplayWin2::RemoveOption(ChatDisplayWin2 *this, unsigned int uiOpt)
{
  ChatBoardFlex *v2; // ecx@1

  v2 = this->m_aspChatBD[this->m_uiChatMode].m_pObject;
  v2->m_uiOption &= ~uiOpt;
}

//----- (005EED40) --------------------------------------------------------
char *__thiscall ChatDisplayWin2::GetCurrentChatText(ChatDisplayWin2 *this)
{
  return (char *)((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
}

//----- (005EED50) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::IsAutoHideOptionSetted(ChatDisplayWin2 *this)
{
  return byte_B5BB46 == 0;
}
// B5BB46: using guessed type char byte_B5BB46;

//----- (005EED60) --------------------------------------------------------
char __thiscall ChatDisplayWin2::GetCursorStateOnPanel(ChatDisplayWin2 *this)
{
  char v1; // bl@1
  FrameBoxWin *v3; // ecx@3

  v1 = 0;
  if ( this->m_kAlphaControl.fAlphaValue < 1.0 )
    return 0;
  v3 = this->m_pkChattingBox;
  if ( v3 )
  {
    if ( v3->m_bIsDuringSizeDrag )
      return 2;
    if ( FrameBoxWin::SizeDragHitTest(v3) )
      v1 = 1;
  }
  return v1;
}

//----- (005EEDA0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddRoarChat(ChatDisplayWin2 *this, char *pcFormat)
{
  ChatDisplayWin2 *v2; // esi@1
  char str[256]; // [sp+8h] [bp-104h]@1
  unsigned int v4; // [sp+108h] [bp-4h]@1
  int v5; // [sp+10Ch] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  vsprintf(str, pcFormat, str);
  ChatBoardFlex::RoarAdd(v2->m_aspChatBD[0].m_pObject, (ChatBoardFlex::Type)4112, str);
}
// A85C00: using guessed type int __security_cookie;

//----- (005EEE00) --------------------------------------------------------
void __thiscall ChatDisplayWin2::ProcessMeInput(ChatDisplayWin2 *this, bool *bHit)
{
  ChatDisplayWin2 *v2; // ebx@1
  int v3; // edi@3
  int v4; // esi@4
  unsigned __int8 v5; // al@4
  signed int bHita; // [sp+Ch] [bp+8h]@3

  v2 = this;
  PgWinFrame::ProcessMeInput(&this->baseclass_0, bHit);
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2
    && (unsigned __int8)((int (*)(void))v2->m_pkChatCommandSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    ((void (__stdcall *)(_DWORD))v2->m_pkChatCommandSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v3 = (int)v2->m_pkChatCmdBut;
    bHita = 11;
    do
    {
      v4 = **(_DWORD **)v3;
      v5 = ((int (*)(void))v2->m_pkChatCommandSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      (*(void (__thiscall **)(_DWORD, _DWORD))(v4 + 256))(*(_DWORD *)v3, v5);
      v3 += 4;
      --bHita;
    }
    while ( bHita );
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (005EEEB0) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::IsSpamFilterOnBoard(ChatDisplayWin2 *this, int iChatBDIndex)
{
  ChatBoardFlex *v2; // eax@1
  bool result; // al@2

  v2 = this->m_aspChatBD[iChatBDIndex].m_pObject;
  if ( v2 )
    result = v2->m_Filter;
  else
    result = 0;
  return result;
}

//----- (005EEEE0) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::SpamFilterPass(ChatDisplayWin2 *this, int iChatBDIndex, char *pcNewStr)
{
  int v3; // ebx@1
  ChatDisplayWin2 *v4; // esi@1
  ChatBoardFlex *v5; // eax@1
  ChatBoardFlex *v7; // ecx@6
  int v8; // edi@6
  char *v9; // eax@9
  char *v10; // eax@10
  char *v11; // ebx@10
  char *v12; // eax@10
  float v13; // ST1C_4@17
  float fNowTime; // [sp+8h] [bp-2Ch]@5
  char acCharName[20]; // [sp+1Ch] [bp-18h]@5
  unsigned int v16; // [sp+30h] [bp-4h]@1
  int v17; // [sp+34h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = iChatBDIndex;
  v4 = this;
  v5 = this->m_aspChatBD[iChatBDIndex].m_pObject;
  if ( !v5 )
    return 0;
  if ( !v5->m_Filter
    || (*(_DWORD *)&acCharName[1] = 0,
        fNowTime = Timer::ms_fCurTime,
        *(_DWORD *)&acCharName[5] = 0,
        *(_DWORD *)&acCharName[9] = 0,
        *(_DWORD *)&acCharName[13] = 0,
        *(_WORD *)&acCharName[17] = 0,
        acCharName[19] = 0,
        acCharName[0] = 0,
        ChatDisplayWin2::GetCharName(this, acCharName, pcNewStr),
        !acCharName[0]) )
    return 1;
  v7 = v4->m_aspChatBD[iChatBDIndex].m_pObject;
  v8 = 0;
  if ( v7->m_MaxTextLine <= 0 )
    return 1;
  while ( 1 )
  {
    if ( 0.0 == ChatBoardFlex::GetSetTextTime(v7, v8)
      || fNowTime - ChatBoardFlex::GetSetTextTime(v4->m_aspChatBD[v3].m_pObject, v8) > 30.0
      || (v9 = ChatBoardFlex::GetChatText(v4->m_aspChatBD[v3].m_pObject, v8),
          !ChatDisplayWin2::IsSameCharName(v4, acCharName, v9)) )
      goto LABEL_19;
    strchr(pcNewStr, 58);
    v11 = v10;
    v12 = ChatBoardFlex::GetChatText(v4->m_aspChatBD[iChatBDIndex].m_pObject, v8);
    strchr(v12, 58);
    if ( v11 )
      v11 += 2;
    if ( v12 )
      v12 += 2;
    if ( strlen(v12) >= 0xA )
    {
      CLCS::LCSExecute(&v4->m_kSpamFilter, v11, v12);
      if ( pcNewStr )
        ChatBoardFlex::GetChatText(v4->m_aspChatBD[iChatBDIndex].m_pObject, v8);
      v13 = CLCS::GetCompDoubtPercentLower(&v4->m_kSpamFilter);
      if ( (double)v13 >= ChatDisplayWin2::GetSpamBlockRate(v4) )
        return 0;
    }
    v3 = iChatBDIndex;
LABEL_19:
    v7 = v4->m_aspChatBD[v3].m_pObject;
    ++v8;
    if ( v8 >= v7->m_MaxTextLine )
      return 1;
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005EF0C0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OpenSpamFilterWin(ChatDisplayWin2 *this, bool b)
{
  ChatDisplayWin2 *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkSpamFilterPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFOnOff->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterOnOff->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFMsgShow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterMsgShow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
  if ( !b )
    GameFrameWork::NcMistSetChatBlockSpamFilterCmd(
      (GameFrameWork *)v2->baseclass_0.m_pkFrameWork,
      v2->m_pkSpamFilterMsgShow->m_bCheck,
      v2->m_pkSpamFilterOnOff->m_bCheck,
      (signed int)(100.0 - (double)(5 * v2->m_pkSpamFilterSlide->m_nCurPos)));
}

//----- (005EF1B0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetSpamFilteredTextShow(ChatDisplayWin2 *this, bool b)
{
  this->m_aspChatBD[0].m_pObject->m_FilteredTextShow = b;
  this->m_pkSpamFilterMsgShow->m_bCheck = b;
}

//----- (005EF1E0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetSpamBlockRate(ChatDisplayWin2 *this, float fRate)
{
  int v2; // esi@1
  ChatDisplayWin2 *v3; // edi@1
  PgWin *v4; // edi@3
  char *v5; // eax@3

  v2 = 0;
  v3 = this;
  if ( 100.0 != fRate )
    v2 = (signed int)((fRate * -1.0 + 100.0) / 5.0);
  SlideBar::SetCurPos(this->m_pkSpamFilterSlide, v2);
  v4 = (PgWin *)v3->m_spkSpamSlideSpr.m_pObject;
  v5 = fs("%d");
  PgWin::SetToolTipWinText(v4, v5);
}

//----- (005EF250) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetEditFocus(ChatDisplayWin2 *this, const bool b)
{
  NiRefObjectVtbl *v2; // eax@1

  v2 = this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( b )
    ((void (*)(void))v2[120].__vecDelDtor)();
  else
    ((void (__stdcall *)(_DWORD))v2[121].__vecDelDtor)(1);
}

//----- (005EF280) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::IsItemLinkInfo(ChatDisplayWin2 *this)
{
  return this->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize != 0;
}

//----- (005EF290) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddChatBoardFlexIItemLink(ChatDisplayWin2 *this, ChatBoardFlex::Type eType, SHINE_ITEM_STRUCT *pItem)
{
  ChatBoardFlex **v3; // esi@2
  signed int v4; // edi@2

  if ( pItem )
  {
    v3 = (ChatBoardFlex **)this->m_aspChatBD;
    v4 = 5;
    do
    {
      ChatBoardFlex::AddItemLinkInfo(*v3, eType, pItem);
      ++v3;
      --v4;
    }
    while ( v4 );
  }
}

//----- (005EF2D0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::ChatStart(ChatDisplayWin2 *this, const char *szText)
{
  ChatDisplayWin2 *v2; // esi@1
  PgEditWin *v3; // eax@1
  PgFrameWork *v4; // eax@3

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v3 = v2->m_spEdit.m_pObject->m_spEditWin.m_pObject;
  v3->m_bStrClip = 1;
  v3->m_uiMaxEditWidth = 423;
  ((void (*)(void))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  if ( szText )
    ((void (__stdcall *)(_DWORD))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(szText);
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v4, BIL_CHAT_1);
}

//----- (005EF360) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddNormalChat(ChatDisplayWin2 *this, char *pcFormat)
{
  char *v2; // ebx@1
  ChatDisplayWin2 *v3; // edi@1
  ChatBoardFlex **v4; // esi@1
  int v5; // ebx@5
  char *v6; // eax@8
  char *v7; // eax@10
  char *v8; // edi@10
  char *v9; // eax@10
  float v10; // ST24_4@17
  float v11; // [sp+Ch] [bp-44h]@4
  signed int v12; // [sp+10h] [bp-40h]@1
  ChatDisplayWin2 *v13; // [sp+20h] [bp-30h]@1
  char last; // [sp+24h] [bp-2Ch]@8
  int v15; // [sp+25h] [bp-2Bh]@8
  int v16; // [sp+29h] [bp-27h]@8
  int v17; // [sp+2Dh] [bp-23h]@8
  int v18; // [sp+31h] [bp-1Fh]@8
  __int16 v19; // [sp+35h] [bp-1Bh]@8
  char v20; // [sp+37h] [bp-19h]@8
  char first; // [sp+38h] [bp-18h]@4
  int v22; // [sp+39h] [bp-17h]@4
  int v23; // [sp+3Dh] [bp-13h]@4
  int v24; // [sp+41h] [bp-Fh]@4
  int v25; // [sp+45h] [bp-Bh]@4
  __int16 v26; // [sp+49h] [bp-7h]@4
  char v27; // [sp+4Bh] [bp-5h]@4
  unsigned int v28; // [sp+4Ch] [bp-4h]@1
  int v29; // [sp+50h] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  v2 = pcFormat;
  v3 = this;
  v13 = this;
  v4 = (ChatBoardFlex **)this->m_aspChatBD;
  v12 = 5;
  do
  {
    if ( !*v4 )
      goto LABEL_23;
    if ( !(*v4)->m_Filter
      || (v22 = 0,
          v11 = Timer::ms_fCurTime,
          v23 = 0,
          v24 = 0,
          v25 = 0,
          v26 = 0,
          v27 = 0,
          first = 0,
          ChatDisplayWin2::GetCharName(v3, &first, v2),
          !first) )
      goto LABEL_21;
    v5 = 0;
    if ( (*v4)->m_MaxTextLine <= 0 )
    {
LABEL_20:
      v2 = pcFormat;
LABEL_21:
      ChatBoardFlex::AddUserChat(*v4, v2);
      goto LABEL_24;
    }
    while ( 1 )
    {
      if ( 0.0 == ChatBoardFlex::GetSetTextTime(*v4, v5)
        || v11 - ChatBoardFlex::GetSetTextTime(*v4, v5) > 30.0
        || (v6 = ChatBoardFlex::GetChatText(*v4, v5),
            v15 = 0,
            v16 = 0,
            v17 = 0,
            v18 = 0,
            v19 = 0,
            v20 = 0,
            last = 0,
            ChatDisplayWin2::GetCharName(v3, &last, v6),
            !last)
        || strncmp(&first, &last, 0x14u) )
        goto LABEL_19;
      strchr(pcFormat, 58);
      v8 = v7;
      v9 = ChatBoardFlex::GetChatText(*v4, v5);
      strchr(v9, 58);
      if ( v8 )
        v8 += 2;
      if ( v9 )
        v9 += 2;
      if ( strlen(v9) >= 0xA )
      {
        CLCS::LCSExecute(&v13->m_kSpamFilter, v8, v9);
        if ( pcFormat )
          ChatBoardFlex::GetChatText(*v4, v5);
        v10 = 100.0 - (double)(5 * v13->m_pkSpamFilterSlide->m_nCurPos);
        if ( (double)v10 <= CLCS::GetCompDoubtPercentLower(&v13->m_kSpamFilter) )
          break;
      }
      v3 = v13;
LABEL_19:
      ++v5;
      if ( v5 >= (*v4)->m_MaxTextLine )
        goto LABEL_20;
    }
    v3 = v13;
    v2 = pcFormat;
LABEL_23:
    ChatBoardFlex::AddUserChat(*v4, (ChatBoardFlex::Type)24576, v2);
LABEL_24:
    ++v4;
    --v12;
  }
  while ( v12 );
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005EF570) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddNormalChat(ChatDisplayWin2 *this, char *pcFormat, char kChatID)
{
  char *v3; // ebx@1
  ChatDisplayWin2 *v4; // edi@1
  ChatBoardFlex **v5; // esi@1
  int v6; // ebx@5
  char *v7; // eax@8
  char *v8; // eax@10
  char *v9; // edi@10
  char *v10; // eax@10
  float v11; // ST24_4@17
  float v12; // [sp+Ch] [bp-44h]@4
  signed int v13; // [sp+10h] [bp-40h]@1
  ChatDisplayWin2 *v14; // [sp+20h] [bp-30h]@1
  char last; // [sp+24h] [bp-2Ch]@8
  int v16; // [sp+25h] [bp-2Bh]@8
  int v17; // [sp+29h] [bp-27h]@8
  int v18; // [sp+2Dh] [bp-23h]@8
  int v19; // [sp+31h] [bp-1Fh]@8
  __int16 v20; // [sp+35h] [bp-1Bh]@8
  char v21; // [sp+37h] [bp-19h]@8
  char first; // [sp+38h] [bp-18h]@4
  int v23; // [sp+39h] [bp-17h]@4
  int v24; // [sp+3Dh] [bp-13h]@4
  int v25; // [sp+41h] [bp-Fh]@4
  int v26; // [sp+45h] [bp-Bh]@4
  __int16 v27; // [sp+49h] [bp-7h]@4
  char v28; // [sp+4Bh] [bp-5h]@4
  unsigned int v29; // [sp+4Ch] [bp-4h]@1
  int v30; // [sp+50h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = pcFormat;
  v4 = this;
  v14 = this;
  v5 = (ChatBoardFlex **)this->m_aspChatBD;
  v13 = 5;
  do
  {
    if ( !*v5 )
      goto LABEL_23;
    if ( !(*v5)->m_Filter
      || (v23 = 0,
          v12 = Timer::ms_fCurTime,
          v24 = 0,
          v25 = 0,
          v26 = 0,
          v27 = 0,
          v28 = 0,
          first = 0,
          ChatDisplayWin2::GetCharName(v4, &first, v3),
          !first) )
      goto LABEL_21;
    v6 = 0;
    if ( (*v5)->m_MaxTextLine <= 0 )
    {
LABEL_20:
      v3 = pcFormat;
LABEL_21:
      ChatBoardFlex::AddUserChat(*v5, v3, kChatID);
      goto LABEL_24;
    }
    while ( 1 )
    {
      if ( 0.0 == ChatBoardFlex::GetSetTextTime(*v5, v6)
        || v12 - ChatBoardFlex::GetSetTextTime(*v5, v6) > 30.0
        || (v7 = ChatBoardFlex::GetChatText(*v5, v6),
            v16 = 0,
            v17 = 0,
            v18 = 0,
            v19 = 0,
            v20 = 0,
            v21 = 0,
            last = 0,
            ChatDisplayWin2::GetCharName(v4, &last, v7),
            !last)
        || strncmp(&first, &last, 0x14u) )
        goto LABEL_19;
      strchr(pcFormat, 58);
      v9 = v8;
      v10 = ChatBoardFlex::GetChatText(*v5, v6);
      strchr(v10, 58);
      if ( v9 )
        v9 += 2;
      if ( v10 )
        v10 += 2;
      if ( strlen(v10) >= 0xA )
      {
        CLCS::LCSExecute(&v14->m_kSpamFilter, v9, v10);
        if ( pcFormat )
          ChatBoardFlex::GetChatText(*v5, v6);
        v11 = 100.0 - (double)(5 * v14->m_pkSpamFilterSlide->m_nCurPos);
        if ( (double)v11 <= CLCS::GetCompDoubtPercentLower(&v14->m_kSpamFilter) )
          break;
      }
      v4 = v14;
LABEL_19:
      ++v6;
      if ( v6 >= (*v5)->m_MaxTextLine )
        goto LABEL_20;
    }
    v4 = v14;
    v3 = pcFormat;
LABEL_23:
    ChatBoardFlex::AddUserChat(*v5, (ChatBoardFlex::Type)24576, v3, kChatID);
LABEL_24:
    ++v5;
    --v13;
  }
  while ( v13 );
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005EF790) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOtherNormalChat(ChatDisplayWin2 *this, char *pcFormat, char kChatID)
{
  char *v3; // ebx@1
  ChatDisplayWin2 *v4; // edi@1
  ChatBoardFlex **v5; // esi@1
  int v6; // ebx@5
  char *v7; // eax@8
  char *v8; // eax@10
  char *v9; // edi@10
  char *v10; // eax@10
  float v11; // ST24_4@17
  float v12; // [sp+Ch] [bp-44h]@4
  signed int v13; // [sp+10h] [bp-40h]@1
  ChatDisplayWin2 *v14; // [sp+20h] [bp-30h]@1
  char last; // [sp+24h] [bp-2Ch]@8
  int v16; // [sp+25h] [bp-2Bh]@8
  int v17; // [sp+29h] [bp-27h]@8
  int v18; // [sp+2Dh] [bp-23h]@8
  int v19; // [sp+31h] [bp-1Fh]@8
  __int16 v20; // [sp+35h] [bp-1Bh]@8
  char v21; // [sp+37h] [bp-19h]@8
  char first; // [sp+38h] [bp-18h]@4
  int v23; // [sp+39h] [bp-17h]@4
  int v24; // [sp+3Dh] [bp-13h]@4
  int v25; // [sp+41h] [bp-Fh]@4
  int v26; // [sp+45h] [bp-Bh]@4
  __int16 v27; // [sp+49h] [bp-7h]@4
  char v28; // [sp+4Bh] [bp-5h]@4
  unsigned int v29; // [sp+4Ch] [bp-4h]@1
  int v30; // [sp+50h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = pcFormat;
  v4 = this;
  v14 = this;
  v5 = (ChatBoardFlex **)this->m_aspChatBD;
  v13 = 5;
  do
  {
    if ( !*v5 )
      goto LABEL_23;
    if ( !(*v5)->m_Filter
      || (v23 = 0,
          v12 = Timer::ms_fCurTime,
          v24 = 0,
          v25 = 0,
          v26 = 0,
          v27 = 0,
          v28 = 0,
          first = 0,
          ChatDisplayWin2::GetCharName(v4, &first, v3),
          !first) )
      goto LABEL_21;
    v6 = 0;
    if ( (*v5)->m_MaxTextLine <= 0 )
    {
LABEL_20:
      v3 = pcFormat;
LABEL_21:
      ChatBoardFlex::Add(*v5, (ChatBoardFlex::Type)512, v3, kChatID);
      goto LABEL_24;
    }
    while ( 1 )
    {
      if ( 0.0 == ChatBoardFlex::GetSetTextTime(*v5, v6)
        || v12 - ChatBoardFlex::GetSetTextTime(*v5, v6) > 30.0
        || (v7 = ChatBoardFlex::GetChatText(*v5, v6),
            v16 = 0,
            v17 = 0,
            v18 = 0,
            v19 = 0,
            v20 = 0,
            v21 = 0,
            last = 0,
            ChatDisplayWin2::GetCharName(v4, &last, v7),
            !last)
        || strncmp(&first, &last, 0x14u) )
        goto LABEL_19;
      strchr(pcFormat, 58);
      v9 = v8;
      v10 = ChatBoardFlex::GetChatText(*v5, v6);
      strchr(v10, 58);
      if ( v9 )
        v9 += 2;
      if ( v10 )
        v10 += 2;
      if ( strlen(v10) >= 0xA )
      {
        CLCS::LCSExecute(&v14->m_kSpamFilter, v9, v10);
        if ( pcFormat )
          ChatBoardFlex::GetChatText(*v5, v6);
        v11 = 100.0 - (double)(5 * v14->m_pkSpamFilterSlide->m_nCurPos);
        if ( (double)v11 <= CLCS::GetCompDoubtPercentLower(&v14->m_kSpamFilter) )
          break;
      }
      v4 = v14;
LABEL_19:
      ++v6;
      if ( v6 >= (*v5)->m_MaxTextLine )
        goto LABEL_20;
    }
    v4 = v14;
    v3 = pcFormat;
LABEL_23:
    ChatBoardFlex::AddUserChat(*v5, (ChatBoardFlex::Type)24576, v3, kChatID);
LABEL_24:
    ++v5;
    --v13;
  }
  while ( v13 );
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005EF9B0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddOtherNormalChat(ChatDisplayWin2 *this, char *pcFormat)
{
  char *v2; // ebx@1
  ChatDisplayWin2 *v3; // edi@1
  ChatBoardFlex **v4; // esi@1
  int v5; // ebx@5
  char *v6; // eax@8
  char *v7; // eax@10
  char *v8; // edi@10
  char *v9; // eax@10
  float v10; // ST24_4@17
  float v11; // [sp+Ch] [bp-44h]@4
  signed int v12; // [sp+10h] [bp-40h]@1
  ChatDisplayWin2 *v13; // [sp+20h] [bp-30h]@1
  char last; // [sp+24h] [bp-2Ch]@8
  int v15; // [sp+25h] [bp-2Bh]@8
  int v16; // [sp+29h] [bp-27h]@8
  int v17; // [sp+2Dh] [bp-23h]@8
  int v18; // [sp+31h] [bp-1Fh]@8
  __int16 v19; // [sp+35h] [bp-1Bh]@8
  char v20; // [sp+37h] [bp-19h]@8
  char first; // [sp+38h] [bp-18h]@4
  int v22; // [sp+39h] [bp-17h]@4
  int v23; // [sp+3Dh] [bp-13h]@4
  int v24; // [sp+41h] [bp-Fh]@4
  int v25; // [sp+45h] [bp-Bh]@4
  __int16 v26; // [sp+49h] [bp-7h]@4
  char v27; // [sp+4Bh] [bp-5h]@4
  unsigned int v28; // [sp+4Ch] [bp-4h]@1
  int v29; // [sp+50h] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  v2 = pcFormat;
  v3 = this;
  v13 = this;
  v4 = (ChatBoardFlex **)this->m_aspChatBD;
  v12 = 5;
  do
  {
    if ( !*v4 )
      goto LABEL_23;
    if ( !(*v4)->m_Filter
      || (v22 = 0,
          v11 = Timer::ms_fCurTime,
          v23 = 0,
          v24 = 0,
          v25 = 0,
          v26 = 0,
          v27 = 0,
          first = 0,
          ChatDisplayWin2::GetCharName(v3, &first, v2),
          !first) )
      goto LABEL_21;
    v5 = 0;
    if ( (*v4)->m_MaxTextLine <= 0 )
    {
LABEL_20:
      v2 = pcFormat;
LABEL_21:
      ChatBoardFlex::Add(*v4, (ChatBoardFlex::Type)512, v2);
      goto LABEL_24;
    }
    while ( 1 )
    {
      if ( 0.0 == ChatBoardFlex::GetSetTextTime(*v4, v5)
        || v11 - ChatBoardFlex::GetSetTextTime(*v4, v5) > 30.0
        || (v6 = ChatBoardFlex::GetChatText(*v4, v5),
            v15 = 0,
            v16 = 0,
            v17 = 0,
            v18 = 0,
            v19 = 0,
            v20 = 0,
            last = 0,
            ChatDisplayWin2::GetCharName(v3, &last, v6),
            !last)
        || strncmp(&first, &last, 0x14u) )
        goto LABEL_19;
      strchr(pcFormat, 58);
      v8 = v7;
      v9 = ChatBoardFlex::GetChatText(*v4, v5);
      strchr(v9, 58);
      if ( v8 )
        v8 += 2;
      if ( v9 )
        v9 += 2;
      if ( strlen(v9) >= 0xA )
      {
        CLCS::LCSExecute(&v13->m_kSpamFilter, v8, v9);
        if ( pcFormat )
          ChatBoardFlex::GetChatText(*v4, v5);
        v10 = 100.0 - (double)(5 * v13->m_pkSpamFilterSlide->m_nCurPos);
        if ( (double)v10 <= CLCS::GetCompDoubtPercentLower(&v13->m_kSpamFilter) )
          break;
      }
      v3 = v13;
LABEL_19:
      ++v5;
      if ( v5 >= (*v4)->m_MaxTextLine )
        goto LABEL_20;
    }
    v3 = v13;
    v2 = pcFormat;
LABEL_23:
    ChatBoardFlex::AddUserChat(*v4, (ChatBoardFlex::Type)24576, v2);
LABEL_24:
    ++v4;
    --v12;
  }
  while ( v12 );
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005EFBC0) --------------------------------------------------------
void __cdecl MoveChildrenWin2(PgWin *pkWin, int x, int y)
{
  PgWin *v3; // esi@1
  unsigned int i; // ebx@2
  int v5; // edi@3
  int v6; // eax@3
  NiPointer<NiAVObject> *v7; // ecx@4
  int v8; // eax@5
  unsigned int uiPos; // [sp+4h] [bp-4h]@1

  uiPos = 0;
  v3 = PgWin::GetNextChildWin(pkWin, &uiPos);
  if ( v3 )
  {
    for ( i = uiPos; ; ++i )
    {
      v5 = x
         + ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
      v6 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v3,
        v5,
        y + v6);
      if ( i >= pkWin->baseclass_0.m_kChildren.m_uiSize )
        break;
      while ( 1 )
      {
        v7 = pkWin->baseclass_0.m_kChildren.m_pBase;
        v3 = (PgWin *)v7[i].m_pObject;
        if ( v3 )
        {
          v8 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v7[i].m_pObject);
          if ( v8 )
            break;
        }
LABEL_8:
        ++i;
        if ( i >= pkWin->baseclass_0.m_kChildren.m_uiSize )
          return;
      }
      while ( (NiRTTI *)v8 != &PgWin::m_RTTI )
      {
        v8 = *(_DWORD *)(v8 + 4);
        if ( !v8 )
          goto LABEL_8;
      }
    }
  }
}

//----- (005EFC70) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetChatMode(ChatDisplayWin2 *this, unsigned int uiChatMode)
{
  ChatDisplayWin2 *v2; // esi@1
  unsigned int v3; // edi@1
  int v4; // esi@5
  char *v5; // edi@5
  CClientGuild *v6; // eax@10
  int v7; // esi@11
  char *v8; // edi@11
  CClientGuildAcademy *v9; // eax@16
  int v10; // esi@17
  char *v11; // edi@17

  v2 = this;
  v3 = this->m_uiChatMode;
  this->m_uiChatMode = uiChatMode;
  switch ( uiChatMode )
  {
    case 0u:
      TextData::Get(0xEF05252Bu);
      break;
    case 1u:
      TextData::Get(0xF54E1743u);
      break;
    case 2u:
      if ( g_kParty.m_uiTotalMember )
      {
        TextData::Get(0xF605CB45u);
      }
      else
      {
        TextData::Get(0xEF05252Bu);
        v2->m_uiChatMode = v3;
        v4 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v5 = TextData::Get(0x7D9CEEE9u);
        if ( *(_DWORD *)(v4 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
          if ( *(_DWORD *)(v4 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
      }
      break;
    case 3u:
      v6 = GuildTask::GetGuild();
      if ( CClientGuild::AmIGuildMember(v6) )
      {
        TextData::Get(0xEEFCDF27u);
      }
      else
      {
        TextData::Get(0xEF05252Bu);
        v2->m_uiChatMode = v3;
        v7 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v8 = TextData::Get(0x76816B99u);
        if ( *(_DWORD *)(v7 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 4))(25, v8, v7);
          if ( *(_DWORD *)(v7 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 20))(25, v8, v7);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
      }
      break;
    case 4u:
      v9 = GuildAcademyTask::GetGuildAcademy();
      if ( !CClientGuildAcademy::AmIGuildAcademyMember(v9) )
      {
        v2->m_uiChatMode = v3;
        v10 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v11 = TextData::Get(0xB2EBE824u);
        if ( *(_DWORD *)(v10 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 4))(25, v11, v10);
          if ( *(_DWORD *)(v10 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 20))(25, v11, v10);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v10 + 20))(v10, 25, v11, v10);
      }
      break;
    default:
      this->m_uiChatMode = 0;
      break;
  }
}

//----- (005EFE50) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnWhisperTab(ChatDisplayWin2 *this, bool bChatStart)
{
  ChatDisplayWin2 *v2; // esi@1
  EditWin *v3; // ecx@1
  char acname[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v5; // [sp+1Ch] [bp-4h]@1
  int v6; // [sp+20h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)acname = *(_QWORD *)&GameFrameWork::m_kWhisperCharID;
  v3 = this->m_pkChatNameEditBox;
  *(_DWORD *)&acname[8] = *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8];
  *(_QWORD *)&acname[12] = *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[12];
  acname[20] = 0;
  ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(acname);
  if ( bChatStart )
  {
    ((void (__thiscall *)(ChatDisplayWin2 *, signed int, signed int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
      v2,
      22,
      1);
    ChatDisplayWin2::ChatStart(v2, &byte_9BB9A1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005EFEE0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnWhisperTabToTarget(ChatDisplayWin2 *this)
{
  unsigned int v1; // edi@1
  ChatDisplayWin2 *v2; // esi@1
  NiRefObjectVtbl *v3; // ST18_4@2
  int v4; // ST08_4@2
  char *v5; // eax@2
  __int64 dest; // [sp+10h] [bp-18h]@2
  __int64 v7; // [sp+18h] [bp-10h]@2
  int v8; // [sp+20h] [bp-8h]@2
  unsigned int v9; // [sp+24h] [bp-4h]@1
  int v10; // [sp+28h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
  v2 = this;
  if ( v1 )
  {
    v3 = this->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v1 + 84))(v1);
    v3[115].__vecDelDtor((NiRefObject *)v2->m_pkChatNameEditBox, v4);
    v5 = (char *)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v1 + 84))(v1);
    v8 = 0;
    v7 = 0i64;
    dest = 0i64;
    strncpy((char *)&dest, v5, 0x14u);
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = dest;
    *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = v8;
    *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = v7;
    ((void (__thiscall *)(ChatDisplayWin2 *, signed int, signed int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
      v2,
      22,
      1);
    ChatDisplayWin2::ChatStart(v2, &byte_9BB9A2);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005EFFB0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnWhisperTabToTarget(ChatDisplayWin2 *this, char *pcName)
{
  ChatDisplayWin2 *v2; // esi@1
  __int64 dest; // [sp+8h] [bp-18h]@1
  __int64 v4; // [sp+10h] [bp-10h]@1
  int v5; // [sp+18h] [bp-8h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  CharMgr::GetChar(&g_kCharMgr, pcName);
  ((void (__stdcall *)(char *))v2->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pcName);
  v5 = 0;
  v4 = 0i64;
  dest = 0i64;
  strncpy((char *)&dest, pcName, 0x14u);
  *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = dest;
  *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = v5;
  *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = v4;
  ((void (__thiscall *)(ChatDisplayWin2 *, signed int, signed int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
    v2,
    22,
    1);
  ChatDisplayWin2::ChatStart(v2, &byte_9BB9A3);
}
// A85C00: using guessed type int __security_cookie;

//----- (005F0060) --------------------------------------------------------
int __thiscall ChatDisplayWin2::PositionCarretItemLink(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // esi@1
  signed int v2; // ebx@1
  int v3; // edi@1
  int v4; // eax@1
  int i; // ecx@1

  v1 = this;
  v2 = 0;
  v3 = PgEditWin::GetCaretPos(this->m_spEdit.m_pObject->m_spEditWin.m_pObject);
  v4 = ((int (*)(void))v1->m_spEdit.m_pObject->m_spEditWin.m_pObject->baseclass_0.vfptr[4].__vecDelDtor)();
  for ( i = 0; i < v3; ++i )
  {
    if ( *(_BYTE *)(i + v4) == 9 )
      ++v2;
  }
  return v2 / 2;
}

//----- (005F00B0) --------------------------------------------------------
bool __thiscall ChatDisplayWin2::Create(ChatDisplayWin2 *this, PgFrameWork *pkFrameWork)
{
  ChatDisplayWin2 *v2; // esi@1
  PgSprData *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@5
  NiTexturePalette *v7; // ebx@9
  char *v8; // eax@11
  void *v9; // eax@12
  unsigned int v10; // eax@13
  NiMaterialProperty *v11; // edi@15
  unsigned int v12; // eax@20
  NiMaterialProperty *v13; // eax@22
  int v14; // ecx@22
  NiMaterialProperty *v15; // eax@22
  int v16; // edx@22
  NiMaterialProperty *v17; // eax@22
  int v18; // ecx@22
  NiMaterialProperty *v19; // eax@22
  void *v20; // eax@22
  unsigned int v21; // eax@23
  NiMaterialProperty *v22; // edi@25
  NiMaterialProperty *v23; // eax@33
  int v24; // ecx@33
  NiMaterialProperty *v25; // eax@33
  int v26; // edx@33
  NiMaterialProperty *v27; // eax@33
  int v28; // ecx@33
  NiSourceTexture *v29; // edx@33
  NiMaterialProperty *v30; // eax@33
  PgSprData *v31; // eax@33
  NiNode *v32; // esi@34
  char *v33; // eax@39
  int v34; // edx@39
  int v35; // ebx@39
  unsigned int v36; // eax@41
  NiSourceTexture *v37; // eax@41
  FrameBoxWin *v38; // eax@41
  unsigned int v39; // ST70_4@41
  unsigned int v40; // ecx@41
  PgFont *v41; // eax@41
  FrameBoxWin *v42; // ecx@42
  unsigned int v43; // eax@42
  FrameBoxWin *v44; // ecx@42
  NiPointer<NiD3DDefaultShader> *v45; // edi@42
  FrameBoxWin *v46; // ebx@43
  int v47; // eax@43
  unsigned int v48; // ecx@43
  FrameBoxWin *v49; // ebx@43
  NiRefObjectVtbl *v50; // edx@43
  int v51; // eax@43
  unsigned int v52; // ecx@43
  FrameBoxWin *v53; // ebx@43
  int v54; // eax@43
  FrameBoxWin *v55; // ecx@43
  int v56; // edx@43
  NiRoom *v57; // ecx@43
  unsigned int v58; // ST64_4@43
  unsigned int v59; // ST60_4@43
  int v60; // ST5C_4@43
  int v61; // eax@43
  NiD3DDefaultShader *v62; // eax@43
  int v63; // edi@44
  int v64; // eax@44
  PgWinProxy *v65; // eax@44
  int v66; // edi@44
  int (*v67)(void); // eax@44
  int v68; // eax@44
  int v69; // ebx@44
  char *v70; // eax@44
  NiSourceTexture *v71; // edx@44
  PgWinBut *v72; // eax@44
  char *v73; // eax@44
  PgSprData *v74; // ebx@44
  PgWinBut *v75; // eax@44
  char *v76; // eax@44
  PgSprData *v77; // eax@44
  NiAVObject *v78; // eax@44
  NiProperty *v79; // ST70_4@44
  PgSprData *v80; // eax@44
  PgSprData *v81; // ebx@44
  SlideBar *v82; // eax@44
  PgWinSpr *v83; // eax@44
  PgSprData::PgHitTester *v84; // eax@46
  unsigned int v85; // edi@46
  unsigned int v86; // ebx@46
  PgWin *v87; // ST68_4@46
  PgFont *v88; // eax@46
  PgWinText *v89; // eax@46
  NiRefObjectVtbl *v90; // edi@46
  char *v91; // eax@46
  PgSprData *v92; // edi@46
  ColumnBut *v93; // eax@46
  NiPointer<PgSprData::PgHitTester> *v94; // edx@46
  unsigned int v95; // edi@46
  unsigned int v96; // ebx@46
  PgWin *v97; // ST68_4@46
  PgFont *v98; // eax@46
  PgWinText *v99; // eax@46
  NiRefObjectVtbl *v100; // edi@46
  char *v101; // eax@46
  PgSprData *v102; // edi@46
  ColumnBut *v103; // eax@46
  NiPointer<PgSprData::PgHitTester> *v104; // edx@46
  unsigned int v105; // edi@46
  unsigned int v106; // ebx@46
  PgWin *v107; // ST68_4@46
  PgFont *v108; // eax@46
  PgWinText *v109; // eax@46
  NiRefObjectVtbl *v110; // edi@46
  char *v111; // eax@46
  bool v112; // al@46
  bool v113; // al@46
  PgSprData *v114; // edi@46
  NiNode *v115; // ebx@47
  char *v116; // eax@47
  PgSprData *v117; // eax@47
  PgWin *v118; // ST68_4@47
  PgWin *v119; // ebx@47
  PgFont *v120; // ST64_4@47
  unsigned int v121; // ST60_4@47
  unsigned int v122; // eax@47
  PgWinText *v123; // eax@47
  NiMaterialProperty *v124; // ebx@47
  NiRefObjectVtbl *v125; // ebx@52
  PgFont *v126; // eax@52
  NiRefObjectVtbl *v127; // edi@53
  char *v128; // eax@53
  PgWinText *v129; // ecx@53
  PgSprData *v130; // edi@60
  PgWinBut *v131; // eax@60
  unsigned int v132; // edi@60
  PgWinBut *v133; // ebx@60
  char *v134; // eax@65
  PgSprData *v135; // eax@68
  NiAVObject *v136; // eax@68
  NiProperty *v137; // ST70_4@68
  NiNode *v138; // ebx@69
  char *v139; // eax@69
  PgSprData *v140; // ebx@69
  char *v141; // eax@69
  char *v142; // eax@69
  unsigned int v143; // eax@69
  int v144; // ebx@69
  PgWinBut *v145; // ebx@74
  PgWin *v146; // ST68_4@74
  PgFont *v147; // ST64_4@74
  unsigned int v148; // ST60_4@74
  unsigned int v149; // eax@74
  PgWinText *v150; // eax@74
  NiRefObjectVtbl *v151; // ebx@74
  PgFont *v152; // eax@74
  PgWinBut *v153; // ebx@74
  PgWin *v154; // ST68_4@74
  PgFont *v155; // ST64_4@74
  unsigned int v156; // ST60_4@74
  unsigned int v157; // eax@74
  PgWinText *v158; // eax@74
  NiRefObjectVtbl *v159; // edi@75
  char *v160; // eax@75
  NiRefObjectVtbl *v161; // edi@76
  char *v162; // eax@76
  char *v163; // eax@76
  PgWin *v164; // ecx@76
  NiRefObjectVtbl *v165; // edi@77
  char *v166; // eax@77
  NiRefObjectVtbl *v167; // edi@78
  char *v168; // eax@78
  NiRefObjectVtbl *v169; // edi@79
  char *v170; // eax@79
  NiRefObjectVtbl *v171; // edi@80
  char *v172; // eax@80
  NiRefObjectVtbl *v173; // edi@80
  char *v174; // eax@80
  NiRefObjectVtbl *v175; // edi@81
  char *v176; // eax@81
  char *v177; // eax@81
  NiRefObjectVtbl *v178; // edi@82
  char *v179; // eax@82
  NiRefObjectVtbl *v180; // edi@83
  char *v181; // eax@83
  NiRefObjectVtbl *v182; // edi@84
  char *v183; // eax@84
  NiRefObjectVtbl *v184; // edi@85
  char *v185; // eax@85
  NiRefObjectVtbl *v186; // edi@85
  char *v187; // eax@85
  char *v188; // eax@85
  PgSprData *v189; // edi@88
  ColumnBut *v190; // eax@88
  unsigned int v191; // edi@88
  ColumnBut *v192; // ebx@88
  char *v193; // eax@93
  int v194; // ST64_4@93
  int v195; // eax@93
  PgWinProxy *v196; // eax@93
  signed int v197; // edi@93
  NiSourceTexture *v198; // eax@94
  PopupMenuWin *v199; // eax@94
  PopupMenuWin *v200; // ebx@94
  unsigned int v201; // eax@99
  char *v202; // eax@101
  PopupMenuTextCheck *v203; // eax@101
  char *v204; // eax@101
  PopupMenuTextCheck *v205; // eax@101
  char *v206; // eax@101
  PopupMenuTextCheck *v207; // eax@101
  char *v208; // eax@101
  PopupMenuTextCheck *v209; // eax@101
  char *v210; // eax@101
  PopupMenuTextCheck *v211; // eax@101
  char *v212; // eax@101
  PopupMenuTextCheck *v213; // eax@101
  char *v214; // eax@101
  PopupMenuTextCheck *v215; // eax@101
  char *v216; // eax@102
  PopupMenuTextCheck *v217; // eax@102
  NiSourceTexture *v218; // eax@104
  PopupMenuWin *v219; // eax@104
  PopupMenuWin *v220; // edi@104
  unsigned int v221; // eax@109
  int v222; // eax@111
  unsigned int v223; // ebx@114
  signed int v224; // edi@114
  void *v225; // eax@115
  PopupMenuText *v226; // eax@119
  FrameBoxWin *v227; // edi@121
  int v228; // eax@121
  int v229; // edi@121
  int v230; // eax@121
  PgWinProxy *v231; // eax@121
  int v232; // eax@121
  void *v233; // ebx@121
  int (*v234)(void); // eax@121
  PgSprData *v235; // edi@121
  PgWinBut *v236; // ebx@121
  int v237; // edi@121
  NiTListItem<NiPointer<NiProperty> > *(__thiscall *v238)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *); // eax@123
  int v239; // eax@123
  unsigned int v240; // eax@123
  int v241; // eax@130
  NiTListItem<NiPointer<NiProperty> > *v242; // ecx@130
  PgSprData *v243; // edi@136
  PgWinBut *v244; // eax@136
  int v245; // edi@136
  PgWinBut *v246; // ebx@136
  NiTListItem<NiPointer<NiProperty> > *(__thiscall *v247)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *); // edx@138
  int v248; // eax@138
  unsigned int v249; // eax@138
  int v250; // eax@143
  NiTListItem<NiPointer<NiProperty> > *v251; // ecx@146
  PgSprData *v252; // edi@152
  PgWinBut *v253; // eax@152
  int v254; // edi@152
  PgWinBut *v255; // ebx@152
  NiTListItem<NiPointer<NiProperty> > *(__thiscall *v256)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *); // eax@154
  int v257; // eax@154
  unsigned int v258; // eax@154
  int v259; // eax@159
  NiTListItem<NiPointer<NiProperty> > *v260; // ecx@162
  NiSourceTexture *v261; // eax@172
  int v262; // ecx@172
  PgWin *v263; // ST68_4@172
  int v264; // edx@172
  FrameBoxWin *v265; // eax@172
  unsigned int v266; // ST70_4@172
  unsigned int v267; // ecx@172
  int v268; // edi@172
  FrameBoxWin *v269; // ebx@172
  NiTListItem<NiPointer<NiProperty> > *(__thiscall *v270)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *); // eax@174
  int v271; // eax@174
  unsigned int v272; // eax@174
  int v273; // eax@179
  NiTListItem<NiPointer<NiProperty> > *v274; // ecx@182
  int v275; // ebx@188
  PgSprData *v276; // edi@188
  EditWin *v277; // eax@188
  NiSourceTexture *v278; // eax@189
  PgWin *v279; // ST68_4@189
  int v280; // ST64_4@189
  int v281; // ST60_4@189
  FrameBoxWin *v282; // eax@189
  unsigned int v283; // ST70_4@189
  unsigned int v284; // ecx@189
  int v285; // edi@189
  FrameBoxWin *v286; // ebx@189
  NiTListItem<NiPointer<NiProperty> > *(__thiscall *v287)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *); // eax@191
  int v288; // eax@191
  int v289; // eax@191
  int v290; // eax@196
  NiTListItem<NiPointer<NiProperty> > *v291; // ecx@199
  int v292; // ebx@205
  PgSprData *v293; // edi@205
  PgWinBut *v294; // eax@205
  int v295; // edi@205
  int (*v296)(void); // edx@207
  int v297; // eax@207
  int v298; // eax@207
  int v299; // ecx@212
  int v300; // eax@215
  int v301; // edx@215
  char *v302; // eax@221
  EditWin *v303; // eax@221
  EditWin *v304; // ebx@221
  EditWin *v305; // edi@221
  PgSprData *v306; // eax@228
  PgWinSpr *v307; // eax@228
  int v308; // ebx@228
  PgWinSpr *v309; // edi@228
  NiTListItem<NiPointer<NiProperty> > *(__thiscall *v310)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *); // eax@230
  int v311; // eax@230
  int v312; // eax@230
  int v313; // eax@235
  NiTListItem<NiPointer<NiProperty> > *v314; // ecx@238
  PgSprData *v315; // eax@244
  PgWinSpr *v316; // eax@244
  int v317; // ebx@244
  PgWinSpr *v318; // edi@244
  NiTListItem<NiPointer<NiProperty> > *(__thiscall *v319)(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> > *); // eax@246
  int v320; // eax@246
  int v321; // eax@246
  int v322; // eax@251
  NiTListItem<NiPointer<NiProperty> > *v323; // ecx@254
  FrameBoxWin *v324; // edi@260
  int v325; // ebx@260
  int v326; // ebx@260
  signed int v327; // edi@260
  NiNode *v328; // esi@263
  volatile LONG *v329; // [sp+70h] [bp-6Ch]@3
  int iPanelLeft; // [sp+84h] [bp-58h]@65
  int uiPanelWidth; // [sp+88h] [bp-54h]@65
  void *iPanelTop; // [sp+8Ch] [bp-50h]@12
  unsigned int uiPanelHeight; // [sp+90h] [bp-4Ch]@65
  unsigned int uiEditwinWidth; // [sp+94h] [bp-48h]@33
  int iFrameTop; // [sp+98h] [bp-44h]@33
  NiPointer<NiRoom> element; // [sp+9Ch] [bp-40h]@43
  int v337; // [sp+A0h] [bp-3Ch]@43
  int iOrgX; // [sp+A4h] [bp-38h]@39
  int iOrgY; // [sp+A8h] [bp-34h]@39
  unsigned int _iOrgX; // [sp+ACh] [bp-30h]@13
  NiSourceTexture *pkTexture; // [sp+B0h] [bp-2Ch]@1
  PgSprData *pkFont; // [sp+B4h] [bp-28h]@41
  unsigned int uiHeight; // [sp+B8h] [bp-24h]@39
  unsigned int uiWidth; // [sp+BCh] [bp-20h]@39
  int _iOrgY; // [sp+C0h] [bp-1Ch]@43
  int uiLeft; // [sp+C4h] [bp-18h]@33
  int uiTop; // [sp+C8h] [bp-14h]@33
  NiPointer<NiNode> spNode; // [sp+CCh] [bp-10h]@1
  int v349; // [sp+D8h] [bp-4h]@1
  int pkFrameWorka; // [sp+E4h] [bp+8h]@191
  PgWinBut *pkFrameWorkb; // [sp+E4h] [bp+8h]@205
  int pkFrameWorkc; // [sp+E4h] [bp+8h]@207
  int pkFrameWorkd; // [sp+E4h] [bp+8h]@230
  int pkFrameWorke; // [sp+E4h] [bp+8h]@246

  v2 = this;
  v3 = 0;
  spNode.m_pObject = 0;
  v349 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v4 = spNode.m_pObject;
    v349 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v329 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_4:
    if ( !InterlockedDecrement(v329) )
    {
      v5 = (PgSprData *)v4 == v3;
LABEL_6:
      if ( !v5 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\Chatting.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = operator new(0x60u);
  iPanelTop = v9;
  LOBYTE(v349) = 1;
  if ( v9 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v9);
    _iOrgX = v10;
  }
  else
  {
    _iOrgX = 0;
  }
  v11 = v2->m_spMtrlProp.m_pObject;
  LOBYTE(v349) = 0;
  if ( v11 != (NiMaterialProperty *)_iOrgX )
  {
    if ( v11
      && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v12 = _iOrgX;
    v2->m_spMtrlProp.m_pObject = (NiMaterialProperty *)_iOrgX;
    if ( v12 )
      InterlockedIncrement((volatile LONG *)(v12 + 4));
  }
  v13 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v13->m_amb.r) = NiColor::WHITE;
  LODWORD(v13->m_amb.g) = dword_A88D90;
  v14 = dword_A88D94;
  ++v13->m_uiRevID;
  LODWORD(v13->m_amb.b) = v14;
  v15 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v15->m_diff.r) = NiColor::WHITE;
  LODWORD(v15->m_diff.g) = dword_A88D90;
  v16 = dword_A88D94;
  ++v15->m_uiRevID;
  LODWORD(v15->m_diff.b) = v16;
  v17 = v2->m_spMtrlProp.m_pObject;
  LODWORD(v17->m_emit.r) = NiColor::WHITE;
  LODWORD(v17->m_emit.g) = dword_A88D90;
  v18 = dword_A88D94;
  ++v17->m_uiRevID;
  LODWORD(v17->m_emit.b) = v18;
  v19 = v2->m_spMtrlProp.m_pObject;
  ++v19->m_uiRevID;
  v19->m_fAlpha = 1.0;
  v20 = operator new(0x60u);
  iPanelTop = v20;
  LOBYTE(v349) = 2;
  if ( v20 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v20);
    _iOrgX = v21;
  }
  else
  {
    _iOrgX = 0;
    v21 = 0;
  }
  v22 = v2->m_spFixedMtrlProp.m_pObject;
  LOBYTE(v349) = 0;
  if ( v22 != (NiMaterialProperty *)v21 )
  {
    if ( v22 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v22 )
        v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
      v21 = _iOrgX;
    }
    v2->m_spFixedMtrlProp.m_pObject = (NiMaterialProperty *)v21;
    if ( v21 )
      InterlockedIncrement((volatile LONG *)(v21 + 4));
  }
  v23 = v2->m_spFixedMtrlProp.m_pObject;
  LODWORD(v23->m_amb.r) = NiColor::WHITE;
  LODWORD(v23->m_amb.g) = dword_A88D90;
  v24 = dword_A88D94;
  ++v23->m_uiRevID;
  LODWORD(v23->m_amb.b) = v24;
  v25 = v2->m_spFixedMtrlProp.m_pObject;
  LODWORD(v25->m_diff.r) = NiColor::WHITE;
  LODWORD(v25->m_diff.g) = dword_A88D90;
  v26 = dword_A88D94;
  ++v25->m_uiRevID;
  LODWORD(v25->m_diff.b) = v26;
  v27 = v2->m_spFixedMtrlProp.m_pObject;
  LODWORD(v27->m_emit.r) = NiColor::WHITE;
  LODWORD(v27->m_emit.g) = dword_A88D90;
  v28 = dword_A88D94;
  ++v27->m_uiRevID;
  v29 = pkTexture;
  LODWORD(v27->m_emit.b) = v28;
  v30 = v2->m_spFixedMtrlProp.m_pObject;
  ++v30->m_uiRevID;
  v30->m_fAlpha = 1.0;
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel", &uiLeft, &uiTop, v29);
  uiEditwinWidth = uiLeft - 20;
  iFrameTop = uiTop;
  if ( !PgWinFrame::Create(&v2->baseclass_0, uiLeft, uiTop, v31, 0, pkFrameWork, "ChatDisplayWin2", 0) )
  {
    v32 = spNode.m_pObject;
    v349 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v32 )
      v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
    return 0;
  }
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  NiAVObject::AttachProperty(
    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    &v2->m_spMtrlProp.m_pObject->baseclass_0);
  v33 = TextData::Get(0xA1ACEDF7u);
  PgWin::SetToolTipWinText(&v2->baseclass_0.baseclass_0.baseclass_0, v33);
  v34 = uiTop;
  v35 = uiLeft;
  v2->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  iOrgY = v34;
  iOrgX = v35;
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ChaBox", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v36 = uiHeight,
        v2->m_uiDefaultWidth = uiWidth,
        v2->m_uiDefaultHeight = v36,
        v37 = MenuTexMgr::GetTexture(0xBu),
        v38 = FrameBoxWin::CreateWin(
                v37,
                7u,
                7u,
                uiLeft - v35,
                uiTop - iOrgY,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                pkFrameWork),
        v39 = uiHeight,
        v40 = uiWidth,
        v2->m_pkChattingBox = v38,
        ((void (__thiscall *)(FrameBoxWin *, unsigned int, unsigned int))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
          v38,
          v40,
          v39),
        ((void (__stdcall *)(_DWORD))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0),
        v2->m_pkChattingBox->m_bSizeDraggable = 1,
        ((void (__stdcall *)(signed int))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1),
        v41 = Font::Get(0),
        (pkFont = (PgSprData *)v41) == 0) )
  {
    v349 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v42 = v2->m_pkChattingBox;
  v42->m_iSizeDragMinWidth = 480;
  v42->m_iSizeDragMaxWidth = 800;
  v43 = v41->baseclass_0.m_dwFontSizeInPixel;
  v44 = v2->m_pkChattingBox;
  v44->m_iSizeDragMinHeight = 4 * v43 + 8;
  v44->m_iSizeDragMaxHeight = 40 * v43 + 88;
  ((void (__stdcall *)(_DWORD))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v45 = (NiPointer<NiD3DDefaultShader> *)v2->m_aspChatBD;
  _iOrgX = 5;
  do
  {
    v46 = v2->m_pkChattingBox;
    v47 = ((int (__thiscall *)(FrameBoxWin *))v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2->m_pkChattingBox);
    v48 = v46->m_uiEdgeHeight;
    v49 = v2->m_pkChattingBox;
    v50 = v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    _iOrgY = v47 - 2 * v48;
    v51 = ((int (__thiscall *)(FrameBoxWin *))v50[36].__vecDelDtor)(v49);
    v52 = v49->m_uiEdgeWidth;
    v53 = v2->m_pkChattingBox;
    v54 = v51 - 2 * v52;
    v55 = v2->m_pkChattingBox;
    v56 = v55->m_uiEdgeHeight;
    v57 = (NiRoom *)v55->m_uiEdgeWidth;
    v337 = v56;
    element.m_pObject = v57;
    v58 = _iOrgY;
    v59 = v54;
    v60 = v56
        + ((int (__thiscall *)(FrameBoxWin *))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v53);
    v61 = ((int (__thiscall *)(FrameBoxWin *))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v53);
    v62 = (NiD3DDefaultShader *)ChatBoardFlex::CreateWin(
                                  (int)((char *)element.m_pObject + v61),
                                  v60,
                                  v59,
                                  v58,
                                  (PgFont *)pkFont,
                                  1,
                                  &v2->baseclass_0.baseclass_0.baseclass_0);
    NiPointer<PopupMenuWin>::operator_(v45, v62);
    ChatBoardFlex::SetMaxTextLine((ChatBoardFlex *)v45->m_pObject, 1500);
    v45->m_pObject[1].baseclass_0.m_spPixelConstantMap.m_pObject = (NiD3DSCM_Pixel *)40;
    v45->m_pObject[1].baseclass_0.baseclass_0.m_pkD3DRenderState = (NiD3DRenderState *)24576;
    LOBYTE(v45->m_pObject[1].baseclass_0.m_spVertexConstantMap.m_pObject) = 0;
    ChatBoardFlex::SetGameFrameWork((ChatBoardFlex *)v45->m_pObject, v2->baseclass_0.m_pkFrameWork);
    ((void (__stdcall *)(_DWORD))v45->m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ++v45;
    --_iOrgX;
  }
  while ( _iOrgX );
  v63 = ((int (*)(void))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v64 = ((int (__thiscall *)(ChatDisplayWin2 *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v65 = PgWinProxy::CreateWin(v64 - v63, 0, 0, 0, &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkLTSocketWin = v65;
  v66 = iOrgX
      + ((int (__thiscall *)(PgWinProxy *))v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v65);
  v67 = (int (*)(void))v2->m_pkLTSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
  _iOrgX = v66;
  v68 = v67();
  v69 = iOrgY + v68;
  _iOrgY = iOrgY + v68;
  pkFont = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FillterNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(pkFont, &spNode.m_pObject->baseclass_0, "FillterOver");
  PgSprData::Add(pkFont, &spNode.m_pObject->baseclass_0, "FillterClick");
  v2->m_pkFilterBtn = PgWinBut::CreateWin(
                        uiLeft - v66,
                        uiTop - v69,
                        pkFont,
                        &v2->m_pkLTSocketWin->baseclass_0,
                        8u,
                        0,
                        0);
  v70 = TextData::Get(0xF6FF2527u);
  PgWin::SetToolTipWinText(&v2->m_pkFilterBtn->baseclass_0.baseclass_0, v70);
  v71 = pkTexture;
  v2->m_pkFilterBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  pkFont = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChatBlockNor", &uiLeft, &uiTop, v71);
  PgSprData::Add(pkFont, &spNode.m_pObject->baseclass_0, "ChatBlockClick");
  PgSprData::Add(pkFont, &spNode.m_pObject->baseclass_0, "ChatBlockOver");
  v72 = PgWinBut::CreateWin(uiLeft - v66, uiTop - v69, pkFont, &v2->m_pkLTSocketWin->baseclass_0, 0x1Cu, 0, 0);
  v2->m_pkChatBlockListBtn = v72;
  v72->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v73 = TextData2::Get(0xA89379ECu);
  PgWin::SetToolTipWinText(&v2->m_pkChatBlockListBtn->baseclass_0.baseclass_0, v73);
  v74 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamBlockNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v74, &spNode.m_pObject->baseclass_0, "SpamBlockOver");
  PgSprData::Add(v74, &spNode.m_pObject->baseclass_0, "SpamBlockClick");
  v75 = PgWinBut::CreateWin(uiLeft - v66, uiTop, v74, &v2->m_pkLTSocketWin->baseclass_0, 0x1Eu, 0, 0);
  v2->m_pkSpamFilterBtn = v75;
  v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v75,
    1u);
  v2->m_pkSpamFilterBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v76 = TextData2::Get(0x5F3C838Fu);
  PgWin::SetToolTipWinText(&v2->m_pkSpamFilterBtn->baseclass_0.baseclass_0, v76);
  v77 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamBlockPanel", &uiLeft, &uiTop, 0);
  v78 = (NiAVObject *)PgWinSpr::CreateWin(uiLeft, uiTop, v77, &v2->m_pkLTSocketWin->baseclass_0, 0, 0);
  v79 = (NiProperty *)v2->m_spFixedMtrlProp.m_pObject;
  v2->m_pkSpamFilterPanel = (PgWinSpr *)v78;
  NiAVObject::AttachProperty(v78, v79);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v80 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamMovingPoint", &uiLeft, &uiTop, 0);
  v81 = v80;
  v82 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SpamBlockSlideBar",
          "SpamBlockLow",
          "SpamBlockHigh",
          v80,
          0,
          &v2->m_pkLTSocketWin->baseclass_0);
  v2->m_pkSpamFilterSlide = v82;
  v82->m_uiClickMsg = 31;
  SlideBar::SetSplitCnt(v2->m_pkSpamFilterSlide, 11);
  SlideBar::SetCurPos(v2->m_pkSpamFilterSlide, 5);
  NiAVObject::AttachProperty(
    &v2->m_pkSpamFilterSlide->baseclass_0.baseclass_0.baseclass_0,
    &v2->m_spFixedMtrlProp.m_pObject->baseclass_0);
  v83 = PgWinSpr::CreateWin(uiLeft, uiTop, v81, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spkSpamSlideSpr, (NiD3DDefaultShader *)v83);
  PgWin::SetToolTipWinText(&v2->m_spkSpamSlideSpr.m_pObject->baseclass_0, "0");
  v2->m_spkSpamSlideSpr.m_pObject->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  if ( v2->m_spkSpamSlideSpr.m_pObject )
    PgWin::AttachChildWin(
      &v2->m_pkSpamFilterSlide->m_pkSlidePoint->baseclass_0,
      &v2->m_spkSpamSlideSpr.m_pObject->baseclass_0);
  v84 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamFiltering", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v85 = v84->m_uiHeight;
  v86 = v84->m_uiWidth;
  v87 = (PgWin *)v2->m_pkLTSocketWin;
  v88 = Font::Get(0);
  v89 = PgWinText::CreateWin(uiLeft, uiTop, v86, v85, v88, v87, 0, 0);
  v2->m_pkTextSFSlide = v89;
  v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v89,
    4u);
  NiAVObject::AttachProperty(
    &v2->m_pkTextSFSlide->baseclass_0.baseclass_0.baseclass_0,
    &v2->m_spFixedMtrlProp.m_pObject->baseclass_0);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(signed int))v2->m_pkTextSFSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  v90 = v2->m_pkTextSFSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v91 = TextData2::Get(0x26544341u);
  v90[118].__vecDelDtor((NiRefObject *)v2->m_pkTextSFSlide, (unsigned int)v91);
  v92 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamOnOffNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v92, &spNode.m_pObject->baseclass_0, "SpamOnOffClick");
  v93 = ColumnBut::CreateWin(uiLeft, uiTop, v92, &v2->m_pkLTSocketWin->baseclass_0, 0x20u, 0);
  v2->m_pkSpamFilterOnOff = v93;
  v93->m_bCheck = 1;
  v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamOnOff", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v95 = v94->m_pObject->m_uiHeight;
  v96 = v94->m_pObject->m_uiWidth;
  v97 = (PgWin *)v2->m_pkLTSocketWin;
  v98 = Font::Get(0);
  v99 = PgWinText::CreateWin(uiLeft, uiTop, v96, v95, v98, v97, 0, 0);
  v2->m_pkTextSFOnOff = v99;
  v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v99,
    4u);
  NiAVObject::AttachProperty(
    &v2->m_pkTextSFOnOff->baseclass_0.baseclass_0.baseclass_0,
    &v2->m_spFixedMtrlProp.m_pObject->baseclass_0);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFOnOff->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v100 = v2->m_pkTextSFOnOff->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v101 = TextData2::Get(0x294D858Cu);
  v100[118].__vecDelDtor((NiRefObject *)v2->m_pkTextSFOnOff, (unsigned int)v101);
  v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamViewNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "SpamViewClick");
  v103 = ColumnBut::CreateWin(uiLeft, uiTop, v102, &v2->m_pkLTSocketWin->baseclass_0, 0x1Du, 0);
  v2->m_pkSpamFilterMsgShow = v103;
  v103->m_bCheck = 0;
  v104 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SpamView", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v105 = v104->m_pObject->m_uiHeight;
  v106 = v104->m_pObject->m_uiWidth;
  v107 = (PgWin *)v2->m_pkLTSocketWin;
  v108 = Font::Get(0);
  v109 = PgWinText::CreateWin(uiLeft, uiTop, v106, v105, v108, v107, 0, 0);
  v2->m_pkTextSFMsgShow = v109;
  v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v109,
    4u);
  NiAVObject::AttachProperty(
    &v2->m_pkTextSFMsgShow->baseclass_0.baseclass_0.baseclass_0,
    &v2->m_spFixedMtrlProp.m_pObject->baseclass_0);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFMsgShow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v110 = v2->m_pkTextSFMsgShow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v111 = TextData2::Get(0x6D8EA7D6u);
  v110[118].__vecDelDtor((NiRefObject *)v2->m_pkTextSFMsgShow, (unsigned int)v111);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFOnOff->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterOnOff->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFMsgShow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterMsgShow->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextSFSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkSpamFilterSlide->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v112 = v2->m_pkSpamFilterOnOff->m_bCheck;
  v2->m_aspChatBD[0].m_pObject->m_Filter = v112;
  v2->m_pkSpamFilterOnOff->m_bCheck = v112;
  *(float *)&element.m_pObject = 100.0 - (double)(5 * v2->m_pkSpamFilterSlide->m_nCurPos);
  ChatDisplayWin2::SetSpamBlockRate(v2, *(float *)&element.m_pObject);
  v113 = v2->m_pkSpamFilterMsgShow->m_bCheck;
  v2->m_aspChatBD[0].m_pObject->m_FilteredTextShow = v113;
  v2->m_pkSpamFilterMsgShow->m_bCheck = v113;
  v114 = 0;
  do
  {
    v115 = spNode.m_pObject;
    pkFont = (PgSprData *)((char *)v114 + 1);
    v116 = fs("Tab%02d");
    v117 = PgSprData::Create(&v115->baseclass_0, v116, &uiLeft, &uiTop, 0);
    v118 = (PgWin *)PgWinBut::CreateWin(
                      uiLeft - _iOrgX - uiEditwinWidth,
                      uiTop - _iOrgY - iFrameTop,
                      v117,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      (unsigned int)((char *)&v114->m_akGeomData.m_uiSize + 2),
                      0,
                      0);
    v2->m_pkTabBut[(_DWORD)v114] = (PgWinBut *)v118;
    v119 = v118;
    v120 = Font::Get(0);
    v121 = ((int (__thiscall *)(PgWin *))v119->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v119);
    v122 = ((int (__thiscall *)(PgWin *))v119->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v119);
    v123 = PgWinText::CreateWin(10, 2, v122, v121, v120, v118, 0, 0);
    v2->m_pkTabButText[(_DWORD)v114] = v123;
    v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v123,
      5u);
    v124 = v2->m_spMtrlProp.m_pObject;
    v337 = (int)v2->m_pkTabButText[(_DWORD)v114];
    element.m_pObject = (NiRoom *)v124;
    if ( v124 )
      InterlockedIncrement((volatile LONG *)&v124->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v349) = 3;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v337 + 156),
      &element);
    LOBYTE(v349) = 0;
    if ( v124
      && !InterlockedDecrement((volatile LONG *)&v124->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v124->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v124, 1u);
    ((void (__stdcall *)(_DWORD))v2->m_pkTabButText[(_DWORD)v114]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v125 = v2->m_pkTabButText[(_DWORD)v114]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v126 = Font::Get(BOLD);
    v125[113].__vecDelDtor((NiRefObject *)v2->m_pkTabButText[(_DWORD)v114], (unsigned int)v126);
    ((void (__stdcall *)(signed int, signed int, signed int, signed int))v2->m_pkTabButText[(_DWORD)v114]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      155,
      155,
      155,
      255);
    switch ( v114 )
    {
      case 0u:
        v127 = v2->m_pkTabButText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v128 = TextData::Get(0xF54E1743u);
        v129 = v2->m_pkTabButText[0];
        goto LABEL_58;
      case 1u:
        v127 = v2->m_pkTabButText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v128 = TextData::Get(0xF605CB45u);
        v129 = v2->m_pkTabButText[1];
        goto LABEL_58;
      case 2u:
        v127 = v2->m_pkTabButText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v128 = TextData::Get(0xEEFCDF27u);
        v129 = v2->m_pkTabButText[2];
        goto LABEL_58;
      case 3u:
        v127 = v2->m_pkTabButText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v128 = TextData::Get(0x86A3E3E4u);
        v129 = v2->m_pkTabButText[3];
        goto LABEL_58;
      case 4u:
        ((void (__stdcall *)(signed int, signed int, _DWORD, signed int))v2->m_pkTabButText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
          255,
          255,
          0,
          255);
        v127 = v2->m_pkTabButText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v128 = TextData::Get(0xEF05252Bu);
        v129 = v2->m_pkTabButText[4];
LABEL_58:
        v127[118].__vecDelDtor((NiRefObject *)v129, (unsigned int)v128);
        break;
      default:
        break;
    }
    v114 = pkFont;
  }
  while ( (signed int)pkFont < 5 );
  v130 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChatCommandNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v130, &spNode.m_pObject->baseclass_0, "ChatCommandOver");
  PgSprData::Add(v130, &spNode.m_pObject->baseclass_0, "ChatCommandClick");
  v131 = PgWinBut::CreateWin(uiLeft - _iOrgX, uiTop - _iOrgY, v130, &v2->m_pkLTSocketWin->baseclass_0, 0xAu, 0, 0);
  v132 = (unsigned int)v2->m_spMtrlProp.m_pObject;
  v133 = v131;
  v2->m_pkChatCommandBtn = v131;
  uiEditwinWidth = v132;
  if ( v132 )
    InterlockedIncrement((volatile LONG *)(v132 + 4));
  LOBYTE(v349) = 4;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v133->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&uiEditwinWidth);
  LOBYTE(v349) = 0;
  if ( v132 && !InterlockedDecrement((volatile LONG *)(v132 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v132)(v132, 1);
  v134 = TextData::Get(0x9AE3BFC8u);
  PgWin::SetToolTipWinText(&v2->m_pkChatCommandBtn->baseclass_0.baseclass_0, v134);
  v2->m_pkChatCommandBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v3 = 0;
  iPanelTop = 0;
  uiPanelHeight = 0;
  if ( !PgUtil::GetTriShapeRect(
          &spNode.m_pObject->baseclass_0,
          "ChatCommandPanel",
          &iPanelLeft,
          (int *)&iPanelTop,
          (unsigned int *)&uiPanelWidth,
          &uiPanelHeight) )
  {
    v4 = spNode.m_pObject;
    v349 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v329 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_4;
  }
  v135 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChatCommandPanel", &uiLeft, &uiTop, 0);
  v136 = (NiAVObject *)PgWinSpr::CreateWin(
                         uiLeft - _iOrgX,
                         uiTop - _iOrgY,
                         v135,
                         &v2->m_pkLTSocketWin->baseclass_0,
                         0,
                         0);
  v137 = (NiProperty *)v2->m_spFixedMtrlProp.m_pObject;
  v2->m_pkChatCommandSprWin = (PgWinSpr *)v136;
  NiAVObject::AttachProperty(v136, v137);
  ((void (__stdcall *)(_DWORD))v2->m_pkChatCommandSprWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  do
  {
    v138 = spNode.m_pObject;
    pkFont = (PgSprData *)((char *)v3 + 1);
    v139 = fs("Chat_Cmd_Name%02d_Nor");
    v140 = PgSprData::Create(&v138->baseclass_0, v139, &uiLeft, &uiTop, 0);
    uiEditwinWidth = (unsigned int)spNode.m_pObject;
    v141 = fs("Chat_Cmd_Name%02d_Click");
    PgSprData::Add(v140, (NiAVObject *)uiEditwinWidth, v141);
    uiEditwinWidth = (unsigned int)spNode.m_pObject;
    v142 = fs("Chat_Cmd_Name%02d_Over");
    PgSprData::Add(v140, (NiAVObject *)uiEditwinWidth, v142);
    v143 = (unsigned int)PgWinBut::CreateWin(
                           uiLeft - _iOrgX,
                           uiTop - _iOrgY,
                           v140,
                           &v2->m_pkLTSocketWin->baseclass_0,
                           (unsigned int)((char *)&v3->m_akGeomData.vfptr + 3),
                           0,
                           0);
    v2->m_pkChatCmdBut[(_DWORD)v3] = (PgWinBut *)v143;
    v144 = (int)v2->m_spFixedMtrlProp.m_pObject;
    uiEditwinWidth = v143;
    iFrameTop = v144;
    if ( v144 )
    {
      InterlockedIncrement((volatile LONG *)(v144 + 4));
      v143 = uiEditwinWidth;
    }
    LOBYTE(v349) = 5;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(v143 + 156),
      (NiPointer<NiRoom> *)&iFrameTop);
    LOBYTE(v349) = 0;
    if ( v144 && !InterlockedDecrement((volatile LONG *)(v144 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v144)(v144, 1);
    ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdBut[(_DWORD)v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v2->m_pkChatCmdBut[(_DWORD)v3]->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v145 = v2->m_pkChatCmdBut[(_DWORD)v3];
    v146 = (PgWin *)v2->m_pkChatCmdBut[(_DWORD)v3];
    v147 = Font::Get(0);
    v148 = ((int (__thiscall *)(PgWinBut *))v145->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v145);
    v149 = ((int (__thiscall *)(PgWinBut *))v145->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v145);
    v150 = PgWinText::CreateWin(0, 0, v149, v148, v147, v146, 0, 0);
    v2->m_pkChatCmdNameText[(_DWORD)v3] = v150;
    v150->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v150,
      4u);
    v151 = v2->m_pkChatCmdNameText[(_DWORD)v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v152 = Font::Get(BOLD);
    v151[113].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[(_DWORD)v3], (unsigned int)v152);
    ((void (__stdcall *)(__int64 *))v2->m_pkChatCmdNameText[(_DWORD)v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    v153 = v2->m_pkChatCmdBut[(_DWORD)v3];
    v154 = (PgWin *)v2->m_pkChatCmdBut[(_DWORD)v3];
    v155 = Font::Get(0);
    v156 = ((int (__thiscall *)(PgWinBut *))v153->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v153);
    v157 = ((int (__thiscall *)(PgWinBut *))v153->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v153);
    v158 = PgWinText::CreateWin(0, 0, v157, v156, v155, v154, 0, 0);
    v2->m_pkChatCmdKeyText[(_DWORD)v3] = v158;
    v158->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v158,
      6u);
    ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdNameText[(_DWORD)v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[(_DWORD)v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    switch ( v3 )
    {
      case 0u:
        v159 = v2->m_pkChatCmdNameText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v160 = TextData::Get(0x3D421B33u);
        v159[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[0], (unsigned int)v160);
        ((void (__stdcall *)(_UNKNOWN *))v2->m_pkChatCmdKeyText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BB94A);
        v2->m_pkChatCmdBut[0]->baseclass_0.baseclass_0.m_pkToolTipWin = 0;
        break;
      case 1u:
        v161 = v2->m_pkChatCmdNameText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v162 = TextData::Get(0xA1DFB4C7u);
        v161[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[1], (unsigned int)v162);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/w");
        TextData::Get(0x95876FE6u);
        TextData::Get(0x4965747Du);
        v163 = fs("/w [%s] (%s)");
        v164 = (PgWin *)v2->m_pkChatCmdBut[1];
        goto LABEL_86;
      case 2u:
        v165 = v2->m_pkChatCmdNameText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v166 = TextData::Get(0xEE4B1720u);
        v165[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[2], (unsigned int)v166);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/s");
        TextData::Get(0x95876FE6u);
        v163 = fs("/s (%s)");
        v164 = (PgWin *)v2->m_pkChatCmdBut[2];
        goto LABEL_86;
      case 3u:
        v167 = v2->m_pkChatCmdNameText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v168 = TextData::Get(0x374D0E99u);
        v167[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[3], (unsigned int)v168);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/p");
        TextData::Get(0x95876FE6u);
        v163 = fs("/p (%s)");
        v164 = (PgWin *)v2->m_pkChatCmdBut[3];
        goto LABEL_86;
      case 4u:
        v169 = v2->m_pkChatCmdNameText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v170 = TextData::Get(0x2F44227Bu);
        v169[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[4], (unsigned int)v170);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/g");
        TextData::Get(0x95876FE6u);
        v163 = fs("/g (%s)");
        v164 = (PgWin *)v2->m_pkChatCmdBut[4];
        goto LABEL_86;
      case 5u:
        v171 = v2->m_pkChatCmdNameText[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v172 = TextData::Get(0x353D9AAAu);
        v171[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[5], (unsigned int)v172);
        v173 = v2->m_pkChatCmdKeyText[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0x43706657u);
        v174 = fs("/%s");
        v173[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdKeyText[5], (unsigned int)v174);
        TextData::Get(0x9D8CC0C7u);
        TextData::Get(0x43706657u);
        v163 = fs("/%s (%s)");
        v164 = (PgWin *)v2->m_pkChatCmdBut[5];
        goto LABEL_86;
      case 6u:
        v175 = v2->m_pkChatCmdNameText[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v176 = TextData::Get(0xEE03CF47u);
        v175[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[6], (unsigned int)v176);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/r");
        TextData::Get(0x95876FE6u);
        v177 = fs("/r (%s)");
        PgWin::SetToolTipWinText(&v2->m_pkChatCmdBut[6]->baseclass_0.baseclass_0, v177);
        v2->m_pkChatCmdBut[6]->baseclass_0.baseclass_0.m_pkToolTipWin = 0;
        break;
      case 7u:
        v178 = v2->m_pkChatCmdNameText[7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v179 = TextData::Get(0xF650262Au);
        v178[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[7], (unsigned int)v179);
        v2->m_pkChatCmdBut[7]->baseclass_0.baseclass_0.m_pkToolTipWin = 0;
        break;
      case 8u:
        v180 = v2->m_pkChatCmdNameText[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v181 = TextData::Get(0x86A3E3E4u);
        v180[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[8], (unsigned int)v181);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/a");
        TextData::Get(0x95876FE6u);
        v163 = fs("/a (%s)");
        v164 = (PgWin *)v2->m_pkChatCmdBut[8];
        goto LABEL_86;
      case 9u:
        v182 = v2->m_pkChatCmdNameText[9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v183 = TextData2::Get(0xFDF7DB2Eu);
        v182[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[9], (unsigned int)v183);
        ((void (__stdcall *)(_DWORD))v2->m_pkChatCmdKeyText[9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("/f");
        TextData::Get(0x95876FE6u);
        v163 = fs("/f (%s)");
        v164 = (PgWin *)v2->m_pkChatCmdBut[9];
        goto LABEL_86;
      case 0xAu:
        v184 = v2->m_pkChatCmdNameText[10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v185 = TextData2::Get(0x42A6726Bu);
        v184[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdNameText[10], (unsigned int)v185);
        v186 = v2->m_pkChatCmdKeyText[10]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xFAF72626u);
        v187 = fs("/%s");
        v186[118].__vecDelDtor((NiRefObject *)v2->m_pkChatCmdKeyText[10], (unsigned int)v187);
        TextData::Get(0x95876FE6u);
        TextData::Get(0xFAF72626u);
        v188 = fs("/%s (%%s)");
        v163 = fs(v188);
        v164 = (PgWin *)v2->m_pkChatCmdBut[10];
LABEL_86:
        PgWin::SetToolTipWinText(v164, v163);
        break;
      default:
        break;
    }
    v3 = pkFont;
  }
  while ( (signed int)pkFont < 11 );
  v189 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "UnlockNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v189, &spNode.m_pObject->baseclass_0, "lockNor");
  v190 = ColumnBut::CreateWin(uiLeft - _iOrgX, uiTop - _iOrgY, v189, &v2->m_pkLTSocketWin->baseclass_0, 0x1Bu, 0);
  v191 = (unsigned int)v2->m_spFixedMtrlProp.m_pObject;
  v192 = v190;
  v2->m_pkCheckBox = v190;
  uiEditwinWidth = v191;
  if ( v191 )
    InterlockedIncrement((volatile LONG *)(v191 + 4));
  LOBYTE(v349) = 6;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v192->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&uiEditwinWidth);
  LOBYTE(v349) = 0;
  if ( v191 && !InterlockedDecrement((volatile LONG *)(v191 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v191)(v191, 1);
  v2->m_pkCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v193 = TextData2::Get(0x10D7C7C8u);
  PgWin::SetToolTipWinText(&v2->m_pkCheckBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v193);
  v2->m_pkCheckBox->m_bCheck = v2->m_pkCheckBox->m_bCheck == 0;
  v2->m_pkChattingBox->m_bLock = v2->m_pkCheckBox->m_bCheck;
  v194 = ((int (*)(void))v2->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v195 = ((int (__thiscall *)(ChatDisplayWin2 *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v196 = PgWinProxy::CreateWin(v195, v194, 0, 0, &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkRBSocketWin = v196;
  ((void (__thiscall *)(PgWinProxy *))v196->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v196);
  ((void (*)(void))v2->m_pkRBSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)();
  v197 = 0;
  do
  {
    v198 = MenuTexMgr::GetTexture(1u);
    v199 = PopupMenuWin::CreateWin(v198, 4u, 4u, 0);
    v200 = v2->m_spChatFilterPopupMenu[v197].m_pObject;
    _iOrgX = (unsigned int)v199;
    if ( v200 != v199 )
    {
      if ( v200
        && !InterlockedDecrement((volatile LONG *)&v200->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v200 )
        v200->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v200,
          1u);
      v201 = _iOrgX;
      v2->m_spChatFilterPopupMenu[v197].m_pObject = (PopupMenuWin *)_iOrgX;
      if ( v201 )
        InterlockedIncrement((volatile LONG *)(v201 + 4));
    }
    v2->m_spChatFilterPopupMenu[v197].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spChatFilterPopupMenu[v197].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spChatFilterPopupMenu[v197].m_pObject);
    v202 = TextData::Get(0xEF05252Bu);
    v203 = PopupMenuTextCheck::CreateWin(v202, 0, 0, 0, 0, 0);
    v203->baseclass_0.m_ePopupMenuID = 17;
    PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, &v203->baseclass_0);
    v204 = TextData::Get(0xF54E1743u);
    v205 = PopupMenuTextCheck::CreateWin(v204, 0, 0, 0, 0, 0);
    v205->baseclass_0.m_ePopupMenuID = 18;
    PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, &v205->baseclass_0);
    v206 = TextData::Get(0xF605CB45u);
    v207 = PopupMenuTextCheck::CreateWin(v206, 0, 0, 0, 0, 0);
    v207->baseclass_0.m_ePopupMenuID = 19;
    PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, &v207->baseclass_0);
    v208 = TextData::Get(0xEEFCDF27u);
    v209 = PopupMenuTextCheck::CreateWin(v208, 0, 0, 0, 0, 0);
    v209->baseclass_0.m_ePopupMenuID = 20;
    PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, &v209->baseclass_0);
    v210 = TextData::Get(0xEE4B1720u);
    v211 = PopupMenuTextCheck::CreateWin(v210, 0, 0, 0, 0, 0);
    v211->baseclass_0.m_ePopupMenuID = 24;
    PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, &v211->baseclass_0);
    v212 = TextData::Get(0x253B184Cu);
    v213 = PopupMenuTextCheck::CreateWin(v212, 0, 0, 0, 0, 0);
    v213->baseclass_0.m_ePopupMenuID = 21;
    PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, &v213->baseclass_0);
    v214 = TextData2::Get(0xFDF7DB2Eu);
    v215 = PopupMenuTextCheck::CreateWin(v214, 0, 0, 0, 0, 0);
    v215->baseclass_0.m_ePopupMenuID = 22;
    PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, &v215->baseclass_0);
    if ( v197 == 3 )
    {
      v216 = TextData2::Get(0x42A6726Bu);
      v217 = PopupMenuTextCheck::CreateWin(v216, 0, 0, 0, 0, 0);
      v217->baseclass_0.m_ePopupMenuID = 23;
      PopupMenuWin::AddMenu(v2->m_spChatFilterPopupMenu[3].m_pObject, &v217->baseclass_0);
    }
    PopupMenuWin::FinishMenu(v2->m_spChatFilterPopupMenu[v197].m_pObject, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spChatFilterPopupMenu[v197++].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  while ( v197 < 5 );
  v218 = MenuTexMgr::GetTexture(1u);
  v219 = PopupMenuWin::CreateWin(v218, 4u, 4u, 0);
  v220 = v2->m_spChatPopupMenu.m_pObject;
  _iOrgX = (unsigned int)v219;
  if ( v220 != v219 )
  {
    if ( v220
      && !InterlockedDecrement((volatile LONG *)&v220->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v220 )
      v220->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v220,
        1u);
    v221 = _iOrgX;
    v2->m_spChatPopupMenu.m_pObject = (PopupMenuWin *)_iOrgX;
    if ( v221 )
      InterlockedIncrement((volatile LONG *)(v221 + 4));
  }
  v2->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v2->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  PopupMenuWin::Clear(v2->m_spChatPopupMenu.m_pObject);
  v222 = *(_DWORD *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 56);
  if ( v222 )
    _iOrgX = *(_DWORD *)(v222 + 40);
  else
    _iOrgX = 0;
  v223 = 0;
  v224 = 0;
  if ( _iOrgX )
  {
    do
    {
      v225 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4), v223);
      if ( !v225 )
        break;
      if ( *(_WORD *)((char *)v225 + 65) == -1 && v224 < 17 && *(_DWORD *)((char *)v225 + 101) == 1 )
      {
        v226 = PopupMenuText::CreateWin((char *)v225 + 33, 0, 0, 0, 0, 0, 0);
        v226->baseclass_0.m_ePopupMenuID = v224 + 62;
        PopupMenuWin::AddMenu(v2->m_spChatPopupMenu.m_pObject, &v226->baseclass_0);
        ++v224;
      }
      ++v223;
    }
    while ( v223 < _iOrgX );
  }
  PopupMenuWin::FinishMenu(v2->m_spChatPopupMenu.m_pObject, 0);
  ((void (*)(void))v2->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
  v227 = v2->m_pkChattingBox;
  v228 = ((int (__thiscall *)(FrameBoxWin *))v227->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2->m_pkChattingBox);
  v229 = (int)v227->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                (NiRefObject *)v227,
                v228);
  v230 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v231 = PgWinProxy::CreateWin(v230 - v229, 0, 0, (unsigned int)v2, 0);
  v2->m_pkLBSocketWin = v231;
  v232 = ((int (__thiscall *)(PgWinProxy *))v231->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v231);
  v233 = (void *)(iOrgX + v232);
  v234 = (int (*)(void))v2->m_pkLBSocketWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
  pkFont = (PgSprData *)v233;
  _iOrgY = iOrgY + v234();
  v235 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PreUpNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v235, &spNode.m_pObject->baseclass_0, "PreUpOver");
  PgSprData::Add(v235, &spNode.m_pObject->baseclass_0, "PreUpClick");
  v236 = PgWinBut::CreateWin(uiLeft - (_DWORD)v233, uiTop - _iOrgY, v235, &v2->m_pkLBSocketWin->baseclass_0, 0, 0, 0);
  v2->m_pkScrollUpBtn = v236;
  v237 = (int)v2->m_spFixedMtrlProp.m_pObject;
  iPanelLeft = v237;
  if ( v237 )
    InterlockedIncrement((volatile LONG *)(v237 + 4));
  v238 = v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 7;
  v239 = (int)v238(&v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0);
  iOrgX = v239;
  v240 = *(_DWORD *)(v239 + 8);
  _iOrgX = v240;
  if ( v240 != v237 )
  {
    if ( v240 && !InterlockedDecrement((volatile LONG *)(v240 + 4)) && _iOrgX )
      (**(void (__stdcall ***)(_DWORD))_iOrgX)(1);
    *(_DWORD *)(iOrgX + 8) = v237;
    if ( v237 )
      InterlockedIncrement((volatile LONG *)(v237 + 4));
  }
  v241 = iOrgX;
  *(_DWORD *)(iOrgX + 4) = 0;
  *(_DWORD *)v241 = v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v242 = v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v242 )
    v242->m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)v241;
  else
    v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)v241;
  ++*(_DWORD *)&v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v236->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v241;
  LOBYTE(v349) = 0;
  if ( v237 && !InterlockedDecrement((volatile LONG *)(v237 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v237)(v237, 1);
  v243 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NextDownNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v243, &spNode.m_pObject->baseclass_0, "NextDownOver");
  PgSprData::Add(v243, &spNode.m_pObject->baseclass_0, "NextDownClick");
  v244 = PgWinBut::CreateWin(uiLeft - (_DWORD)pkFont, uiTop - _iOrgY, v243, &v2->m_pkLBSocketWin->baseclass_0, 1u, 0, 0);
  v245 = (int)v2->m_spFixedMtrlProp.m_pObject;
  v246 = v244;
  v2->m_pkScrollDnBtn = v244;
  iPanelLeft = v245;
  if ( v245 )
    InterlockedIncrement((volatile LONG *)(v245 + 4));
  v247 = v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 8;
  v248 = (int)v247(&v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0);
  iOrgY = v248;
  v249 = *(_DWORD *)(v248 + 8);
  _iOrgX = v249;
  if ( v249 == v245 )
    goto LABEL_145;
  if ( v249 && !InterlockedDecrement((volatile LONG *)(v249 + 4)) && _iOrgX )
    (**(void (__stdcall ***)(_DWORD))_iOrgX)(1);
  v250 = iOrgY;
  *(_DWORD *)(iOrgY + 8) = v245;
  if ( v245 )
  {
    InterlockedIncrement((volatile LONG *)(v245 + 4));
LABEL_145:
    v250 = iOrgY;
  }
  *(_DWORD *)(v250 + 4) = 0;
  *(_DWORD *)v250 = v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v251 = v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v251 )
    v251->m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)v250;
  else
    v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)v250;
  ++*(_DWORD *)&v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v250;
  LOBYTE(v349) = 0;
  if ( v245 && !InterlockedDecrement((volatile LONG *)(v245 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v245)(v245, 1);
  v252 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DownNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v252, &spNode.m_pObject->baseclass_0, "DownOver");
  PgSprData::Add(v252, &spNode.m_pObject->baseclass_0, "DownClick");
  v253 = PgWinBut::CreateWin(uiLeft - (_DWORD)pkFont, uiTop - _iOrgY, v252, &v2->m_pkLBSocketWin->baseclass_0, 2u, 0, 0);
  v254 = (int)v2->m_spFixedMtrlProp.m_pObject;
  v255 = v253;
  v2->m_pkScrollMostDnBtn = v253;
  iPanelLeft = v254;
  if ( v254 )
    InterlockedIncrement((volatile LONG *)(v254 + 4));
  v256 = v255->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 9;
  v257 = (int)v256(&v255->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0);
  iOrgY = v257;
  v258 = *(_DWORD *)(v257 + 8);
  _iOrgX = v258;
  if ( v258 == v254 )
    goto LABEL_161;
  if ( v258 && !InterlockedDecrement((volatile LONG *)(v258 + 4)) && _iOrgX )
    (**(void (__stdcall ***)(_DWORD))_iOrgX)(1);
  v259 = iOrgY;
  *(_DWORD *)(iOrgY + 8) = v254;
  if ( v254 )
  {
    InterlockedIncrement((volatile LONG *)(v254 + 4));
LABEL_161:
    v259 = iOrgY;
  }
  *(_DWORD *)(v259 + 4) = 0;
  *(_DWORD *)v259 = v255->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v260 = v255->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v260 )
    v260->m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)v259;
  else
    v255->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)v259;
  ++*(_DWORD *)&v255->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v255->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v259;
  LOBYTE(v349) = 0;
  if ( v254 && !InterlockedDecrement((volatile LONG *)(v254 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v254)(v254, 1);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "CharNameEdit", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_169;
  v261 = MenuTexMgr::GetTexture(0xBu);
  v262 = uiLeft - (_DWORD)pkFont;
  v263 = (PgWin *)v2->m_pkLBSocketWin;
  v264 = uiTop - _iOrgY;
  v2->m_iChatBoxPosX = uiLeft - (_DWORD)pkFont;
  v265 = FrameBoxWin::CreateWin(v261, 7u, 7u, v262, v264, v263, pkFrameWork);
  v266 = uiHeight;
  v267 = uiWidth;
  v2->m_pkChatNameEditBack = v265;
  ((void (__thiscall *)(FrameBoxWin *, unsigned int, unsigned int))v265->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v265,
    v267,
    v266);
  ((void (__stdcall *)(_DWORD))v2->m_pkChatNameEditBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
  v2->m_pkChatNameEditBack->m_bSizeDraggable = 0;
  ((void (__stdcall *)(_DWORD))v2->m_pkChatNameEditBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v268 = (int)v2->m_spFixedMtrlProp.m_pObject;
  v269 = v2->m_pkChatNameEditBack;
  iPanelLeft = v268;
  if ( v268 )
    InterlockedIncrement((volatile LONG *)(v268 + 4));
  v270 = v269->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 10;
  v271 = (int)v270(&v269->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0);
  iOrgY = v271;
  v272 = *(_DWORD *)(v271 + 8);
  _iOrgX = v272;
  if ( v272 == v268 )
    goto LABEL_181;
  if ( v272 && !InterlockedDecrement((volatile LONG *)(v272 + 4)) && _iOrgX )
    (**(void (__stdcall ***)(_DWORD))_iOrgX)(1);
  v273 = iOrgY;
  *(_DWORD *)(iOrgY + 8) = v268;
  if ( v268 )
  {
    InterlockedIncrement((volatile LONG *)(v268 + 4));
LABEL_181:
    v273 = iOrgY;
  }
  *(_DWORD *)(v273 + 4) = 0;
  *(_DWORD *)v273 = v269->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v274 = v269->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v274 )
    v274->m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)v273;
  else
    v269->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)v273;
  ++*(_DWORD *)&v269->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v269->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v273;
  LOBYTE(v349) = 0;
  if ( v268 && !InterlockedDecrement((volatile LONG *)(v268 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v268)(v268, 1);
  ((void (__stdcall *)(_DWORD))v2->m_pkChatNameEditBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v275 = _iOrgY;
  v276 = pkFont;
  v277 = EditWin::CreateWin(
           uiLeft - (_DWORD)pkFont + 3,
           uiTop - _iOrgY + 3,
           uiWidth,
           uiHeight,
           &v2->m_pkLBSocketWin->baseclass_0,
           NORMAL,
           0x10u,
           3u,
           0,
           0,
           1);
  v2->m_pkChatNameEditBox = v277;
  v277->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v277,
    0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ChaMsgView", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_169:
    v4 = spNode.m_pObject;
    v349 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_6;
  }
  v278 = MenuTexMgr::GetTexture(0xBu);
  v279 = (PgWin *)v2->m_pkLBSocketWin;
  v280 = uiTop - v275;
  v281 = uiLeft - (_DWORD)v276;
  v2->m_iChatBoxWhisperModePosX = uiLeft - (_DWORD)v276;
  v282 = FrameBoxWin::CreateWin(v278, 7u, 7u, v281, v280, v279, pkFrameWork);
  v283 = uiHeight;
  v284 = uiWidth;
  v2->m_pkChatEditBox = v282;
  ((void (__thiscall *)(FrameBoxWin *, unsigned int, unsigned int))v282->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
    v282,
    v284,
    v283);
  ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(0);
  v2->m_pkChatEditBox->m_bSizeDraggable = 0;
  ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v285 = (int)v2->m_spFixedMtrlProp.m_pObject;
  v286 = v2->m_pkChatEditBox;
  iPanelLeft = v285;
  if ( v285 )
    InterlockedIncrement((volatile LONG *)(v285 + 4));
  v287 = v286->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 11;
  v288 = (int)v287(&v286->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0);
  iOrgY = v288;
  v289 = *(_DWORD *)(v288 + 8);
  pkFrameWorka = v289;
  if ( v289 == v285 )
    goto LABEL_198;
  if ( v289 && !InterlockedDecrement((volatile LONG *)(v289 + 4)) && pkFrameWorka )
    (**(void (__stdcall ***)(_DWORD))pkFrameWorka)(1);
  v290 = iOrgY;
  *(_DWORD *)(iOrgY + 8) = v285;
  if ( v285 )
  {
    InterlockedIncrement((volatile LONG *)(v285 + 4));
LABEL_198:
    v290 = iOrgY;
  }
  *(_DWORD *)(v290 + 4) = 0;
  *(_DWORD *)v290 = v286->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v291 = v286->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v291 )
    v291->m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)v290;
  else
    v286->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)v290;
  ++*(_DWORD *)&v286->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v286->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v290;
  LOBYTE(v349) = 0;
  if ( v285 && !InterlockedDecrement((volatile LONG *)(v285 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v285)(v285, 1);
  ((void (__stdcall *)(_DWORD))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  iFrameTop = uiTop - _iOrgY + 6;
  uiEditwinWidth = uiWidth - 4;
  uiPanelHeight = uiHeight - 1;
  v292 = uiLeft - (_DWORD)pkFont + 4;
  v293 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DownNor01", &uiLeft, &uiTop, 0);
  PgSprData::Add(v293, &spNode.m_pObject->baseclass_0, "DownOver01");
  PgSprData::Add(v293, &spNode.m_pObject->baseclass_0, "DownClick01");
  v294 = PgWinBut::CreateWin(uiLeft - (_DWORD)pkFont, uiTop - _iOrgY, v293, &v2->m_pkLBSocketWin->baseclass_0, 3u, 0, 0);
  v295 = (int)v2->m_spFixedMtrlProp.m_pObject;
  pkFrameWorkb = v294;
  v2->m_pkWhisperListBtn = v294;
  iPanelLeft = v295;
  if ( v295 )
    InterlockedIncrement((volatile LONG *)(v295 + 4));
  v296 = (int (*)(void))pkFrameWorkb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 12;
  iPanelTop = &pkFrameWorkb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList;
  v297 = v296();
  iOrgY = v297;
  v298 = *(_DWORD *)(v297 + 8);
  pkFrameWorkc = v298;
  if ( v298 == v295 )
    goto LABEL_214;
  if ( v298 && !InterlockedDecrement((volatile LONG *)(v298 + 4)) && pkFrameWorkc )
    (**(void (__stdcall ***)(_DWORD))pkFrameWorkc)(1);
  v299 = iOrgY;
  *(_DWORD *)(iOrgY + 8) = v295;
  if ( v295 )
  {
    InterlockedIncrement((volatile LONG *)(v295 + 4));
LABEL_214:
    v299 = iOrgY;
  }
  v300 = (int)iPanelTop;
  *(_DWORD *)(v299 + 4) = 0;
  *(_DWORD *)v299 = *(_DWORD *)(v300 + 4);
  v301 = *(_DWORD *)(v300 + 4);
  if ( v301 )
    *(_DWORD *)(v301 + 4) = v299;
  else
    *(_DWORD *)(v300 + 8) = v299;
  ++*(_DWORD *)(v300 + 12);
  *(_DWORD *)(v300 + 4) = v299;
  LOBYTE(v349) = 0;
  if ( v295 && !InterlockedDecrement((volatile LONG *)(v295 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v295)(v295, 1);
  v302 = TextData::Get(0xA8A1608Fu);
  PgWin::SetToolTipWinText(&v2->m_pkWhisperListBtn->baseclass_0.baseclass_0, v302);
  v2->m_pkWhisperListBtn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(_DWORD))v2->m_pkWhisperListBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v303 = EditWin::CreateWin(
           v292,
           iFrameTop - 2,
           uiEditwinWidth,
           uiPanelHeight,
           &v2->m_pkLBSocketWin->baseclass_0,
           NORMAL,
           0x80u,
           5u,
           1,
           0,
           1);
  v304 = v2->m_spEdit.m_pObject;
  v305 = v303;
  if ( v304 != v303 )
  {
    if ( v304
      && !InterlockedDecrement((volatile LONG *)&v304->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v304 )
      v304->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v304,
        1u);
    v2->m_spEdit.m_pObject = v305;
    if ( v305 )
      InterlockedIncrement((volatile LONG *)&v305->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_ENGLISH);
  ((void (__stdcall *)(_DWORD))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v2->m_spEdit.m_pObject->m_bIsLinkEdit = 1;
  v306 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChaK", &uiLeft, &uiTop, pkTexture);
  v307 = PgWinSpr::CreateWin(uiLeft - (_DWORD)pkFont, uiTop - _iOrgY, v306, &v2->m_pkLBSocketWin->baseclass_0, 0, 0);
  v2->m_pkChatKorMode = v307;
  v307->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v307,
    0);
  v308 = (int)v2->m_spFixedMtrlProp.m_pObject;
  v309 = v2->m_pkChatKorMode;
  iPanelLeft = v308;
  if ( v308 )
    InterlockedIncrement((volatile LONG *)(v308 + 4));
  v310 = v309->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 13;
  v311 = (int)v310(&v309->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0);
  iOrgY = v311;
  v312 = *(_DWORD *)(v311 + 8);
  pkFrameWorkd = v312;
  if ( v312 == v308 )
    goto LABEL_237;
  if ( v312 && !InterlockedDecrement((volatile LONG *)(v312 + 4)) && pkFrameWorkd )
    (**(void (__stdcall ***)(_DWORD))pkFrameWorkd)(1);
  v313 = iOrgY;
  *(_DWORD *)(iOrgY + 8) = v308;
  if ( v308 )
  {
    InterlockedIncrement((volatile LONG *)(v308 + 4));
LABEL_237:
    v313 = iOrgY;
  }
  *(_DWORD *)(v313 + 4) = 0;
  *(_DWORD *)v313 = v309->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v314 = v309->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v314 )
    v314->m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)v313;
  else
    v309->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)v313;
  ++*(_DWORD *)&v309->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v309->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v313;
  LOBYTE(v349) = 0;
  if ( v308 && !InterlockedDecrement((volatile LONG *)(v308 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v308)(v308, 1);
  v315 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ChaE", &uiLeft, &uiTop, pkTexture);
  v316 = PgWinSpr::CreateWin(uiLeft - (_DWORD)pkFont, uiTop - _iOrgY, v315, &v2->m_pkLBSocketWin->baseclass_0, 0, 0);
  v2->m_pkChatEngMode = v316;
  v316->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v316,
    0);
  v317 = (int)v2->m_spFixedMtrlProp.m_pObject;
  v318 = v2->m_pkChatEngMode;
  iPanelLeft = v317;
  if ( v317 )
    InterlockedIncrement((volatile LONG *)(v317 + 4));
  v319 = v318->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.vfptr->NewItem;
  LOBYTE(v349) = 14;
  v320 = (int)v319(&v318->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0);
  iOrgY = v320;
  v321 = *(_DWORD *)(v320 + 8);
  pkFrameWorke = v321;
  if ( v321 != v317 )
  {
    if ( v321 && !InterlockedDecrement((volatile LONG *)(v321 + 4)) && pkFrameWorke )
      (**(void (__stdcall ***)(_DWORD))pkFrameWorke)(1);
    v322 = iOrgY;
    *(_DWORD *)(iOrgY + 8) = v317;
    if ( !v317 )
      goto LABEL_254;
    InterlockedIncrement((volatile LONG *)(v317 + 4));
  }
  v322 = iOrgY;
LABEL_254:
  *(_DWORD *)(v322 + 4) = 0;
  *(_DWORD *)v322 = v318->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v323 = v318->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  if ( v323 )
    v323->m_pkPrev = (NiTListItem<NiPointer<NiProperty> > *)v322;
  else
    v318->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<NiProperty> > *)v322;
  ++*(_DWORD *)&v318->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v318->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<NiProperty> > *)v322;
  LOBYTE(v349) = 0;
  if ( v317 && !InterlockedDecrement((volatile LONG *)(v317 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v317)(v317, 1);
  v324 = v2->m_pkChattingBox;
  v325 = ((int (*)(void))v2->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v2->m_uiChattingBoxWidthMinusEditBoxWidth = ((int (__thiscall *)(FrameBoxWin *))v324->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v324)
                                            - v325;
  v2->m_uiChatMode = 0;
  TextData::Get(0xEF05252Bu);
  v326 = (int)v2->m_aspChatBD;
  v327 = 5;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v326 + 256))(0);
    v326 += 4;
    --v327;
  }
  while ( v327 );
  ((void (__stdcall *)(signed int))v2->m_aspChatBD[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v2->m_pkActiveChatBD = v2->m_aspChatBD[0].m_pObject;
  v349 = -1;
  if ( spNode.m_pObject )
  {
    v328 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v328 )
        v328->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v328, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A9541C: using guessed type char Folder__m_bInit;
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (005F2920) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnCommand(ChatDisplayWin2 *this, unsigned int wParam, int lParam)
{
  int v3; // edi@0
  ChatDisplayWin2 *v4; // esi@1
  char *v5; // eax@15
  EditWin *v6; // ecx@16
  char *v7; // edi@23
  NiRefObjectVtbl *v8; // edi@25
  char *v9; // eax@25
  NiRefObjectVtbl *v10; // edi@25
  char *v11; // eax@25
  NiRefObjectVtbl *v12; // edi@25
  char *v13; // eax@25
  NiRefObjectVtbl *v14; // edi@25
  char *v15; // eax@25
  NiRefObjectVtbl *v16; // edi@25
  char *v17; // eax@25
  PgWinText *v18; // ecx@26
  NiRefObjectVtbl *v19; // edi@26
  char *v20; // eax@26
  PgWinText *v21; // ecx@26
  PgWinText *v22; // ecx@27
  PgWinText *v23; // ecx@28
  PgWinText *v24; // ecx@29
  PgWinText *v25; // ecx@30
  ChatBoardFlex *v26; // esi@32
  void *(__thiscall *v27)(NiRefObject *, unsigned int); // edx@33
  bool v28; // al@37
  ColumnBut *v29; // edx@37
  bool v30; // al@38
  float v31; // ST14_4@39
  char *v32; // [sp-8h] [bp-30h]@14
  int v33; // [sp-4h] [bp-2Ch]@23
  char *v34; // [sp+4h] [bp-24h]@0
  signed int v35; // [sp+8h] [bp-20h]@23
  char acName[21]; // [sp+Ch] [bp-1Ch]@16
  unsigned int v37; // [sp+24h] [bp-4h]@1
  int v38; // [sp+28h] [bp+0h]@1

  v37 = (unsigned int)&v38 ^ __security_cookie;
  v4 = this;
  switch ( wParam )
  {
    case 0u:
      ChatBoardFlex::ViewLineUp(this->m_pkActiveChatBD);
      return;
    case 1u:
      ChatBoardFlex::ViewLineDown(this->m_pkActiveChatBD);
      return;
    case 2u:
      ChatBoardFlex::ViewLineMostDown(this->m_pkActiveChatBD);
      return;
    case 0xAu:
      ChatDisplayWin2::OnChatCommand(this);
      return;
    case 3u:
      ChatDisplayWin2::OnTab(this);
      return;
    case 8u:
      ((void (__stdcall *)(int, int))this->m_spChatFilterPopupMenu[this->m_uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        PgWin::ms_iMsX.x,
        PgWin::ms_iMsY);
      PgWinMgr::OpenPopupWin(
        &Pgg_kWinMgr,
        0,
        &v4->m_spChatFilterPopupMenu[v4->m_uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      return;
    case 9u:
      GameFrameWork::OpenReportWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      return;
    case 0xBu:
      ((void (__stdcall *)(signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        26,
        1);
      ChatDisplayWin2::ChatStart(v4, &byte_9BB94B);
      return;
    case 0xCu:
      ((void (__stdcall *)(signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        22,
        1);
      ChatDisplayWin2::ChatStart(v4, "/w ");
      return;
    case 0xDu:
      ((void (__stdcall *)(signed int, signed int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        26,
        1);
      ChatDisplayWin2::ChatStart(v4, "/s ");
      return;
    case 0xEu:
      ((void (__stdcall *)(signed int, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        23,
        1);
      ChatDisplayWin2::ChatStart(v4, "/p ");
      return;
    case 0xFu:
      ((void (__stdcall *)(signed int, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        24,
        0);
      ChatDisplayWin2::ChatStart(v4, "/g ");
      return;
    case 0x10u:
      TextData::Get(0x43706657u);
      v32 = "/%s ";
      goto LABEL_15;
    case 0x11u:
      ((void (__stdcall *)(signed int, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        22,
        0);
      ChatDisplayWin2::ChatStart(v4, "/r ");
      Name5::n_string(&GameFrameWork::m_kWhisperCharID, acName);
      v6 = v4->m_pkChatNameEditBox;
      acName[20] = 0;
      ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(acName);
      return;
    case 0x12u:
      ((void (__stdcall *)(int, int))this->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        PgWin::ms_iMsX.x,
        PgWin::ms_iMsY);
      PgWinMgr::OpenPopupWin(
        &Pgg_kWinMgr,
        0,
        &v4->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      return;
    case 0x13u:
      ((void (__stdcall *)(signed int, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        25,
        1);
      ChatDisplayWin2::ChatStart(v4, "/a ");
      return;
    case 0x14u:
      ((void (__stdcall *)(signed int, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        23,
        1);
      ChatDisplayWin2::ChatStart(v4, &byte_9BB952);
      return;
    case 0x15u:
      ((void (__stdcall *)(signed int, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[95].__vecDelDtor)(
        25,
        1);
      TextData::Get(0xFAF72626u);
      v32 = "/%s ";
LABEL_15:
      v5 = fs(v32);
      ChatDisplayWin2::ChatStart(v4, v5);
      return;
    case 0x16u:
    case 0x17u:
    case 0x18u:
    case 0x19u:
    case 0x1Au:
      if ( this->m_kAlphaControl.fAlphaValue >= 1.0 || lParam )
      {
        v33 = v3;
        v7 = (char *)this->m_pkTabButText;
        v35 = 5;
        do
        {
          (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)v7 + 464))(
            155,
            155,
            155,
            255);
          (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v7 - 37) + 256))(0);
          v7 += 4;
          --v35;
        }
        while ( v35 );
        v8 = v4->m_pkTabButText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v9 = TextData::Get(0xF54E1743u);
        ((void (__thiscall *)(PgWinText *, char *, int))v8[118].__vecDelDtor)(v4->m_pkTabButText[0], v9, v33);
        v10 = v4->m_pkTabButText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v11 = TextData::Get(0xF605CB45u);
        v10[118].__vecDelDtor((NiRefObject *)v4->m_pkTabButText[1], (unsigned int)v11);
        v12 = v4->m_pkTabButText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v13 = TextData::Get(0xEEFCDF27u);
        v12[118].__vecDelDtor((NiRefObject *)v4->m_pkTabButText[2], (unsigned int)v13);
        v14 = v4->m_pkTabButText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v15 = TextData::Get(0x86A3E3E4u);
        v14[118].__vecDelDtor((NiRefObject *)v4->m_pkTabButText[3], (unsigned int)v15);
        v16 = v4->m_pkTabButText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v17 = TextData::Get(0xEF05252Bu);
        v16[118].__vecDelDtor((NiRefObject *)v4->m_pkTabButText[4], (unsigned int)v17);
        switch ( wParam )
        {
          case 0x16u:
            v18 = v4->m_pkTabButText[0];
            v4->m_pkActiveChatBD = v4->m_aspChatBD[1].m_pObject;
            v4->m_uiChatMode = 1;
            ((void (__stdcall *)(signed int, signed int, _DWORD, signed int, char *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
              255,
              255,
              0,
              255,
              v34);
            v19 = v4->m_pkTabButText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v20 = TextData::Get(0xF54E1743u);
            v21 = v4->m_pkTabButText[0];
            goto LABEL_31;
          case 0x17u:
            v22 = v4->m_pkTabButText[1];
            v4->m_pkActiveChatBD = v4->m_aspChatBD[2].m_pObject;
            v4->m_uiChatMode = 2;
            ((void (__stdcall *)(signed int, signed int, _DWORD, signed int, char *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
              255,
              255,
              0,
              255,
              v34);
            v19 = v4->m_pkTabButText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v20 = TextData::Get(0xF605CB45u);
            v21 = v4->m_pkTabButText[1];
            goto LABEL_31;
          case 0x18u:
            v23 = v4->m_pkTabButText[2];
            v4->m_pkActiveChatBD = v4->m_aspChatBD[3].m_pObject;
            v4->m_uiChatMode = 3;
            ((void (__stdcall *)(signed int, signed int, _DWORD, signed int, char *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
              255,
              255,
              0,
              255,
              v34);
            v19 = v4->m_pkTabButText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v20 = TextData::Get(0xEEFCDF27u);
            v21 = v4->m_pkTabButText[2];
            goto LABEL_31;
          case 0x19u:
            v24 = v4->m_pkTabButText[3];
            v4->m_pkActiveChatBD = v4->m_aspChatBD[4].m_pObject;
            v4->m_uiChatMode = 4;
            ((void (__stdcall *)(signed int, signed int, _DWORD, signed int, char *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
              255,
              255,
              0,
              255,
              v34);
            v19 = v4->m_pkTabButText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v20 = TextData::Get(0x86A3E3E4u);
            v21 = v4->m_pkTabButText[3];
            goto LABEL_31;
          case 0x1Au:
            v25 = v4->m_pkTabButText[4];
            v4->m_pkActiveChatBD = v4->m_aspChatBD[0].m_pObject;
            v4->m_uiChatMode = 0;
            ((void (__stdcall *)(signed int, signed int, _DWORD, signed int, char *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
              255,
              255,
              0,
              255,
              v34);
            v19 = v4->m_pkTabButText[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v20 = TextData::Get(0xEF05252Bu);
            v21 = v4->m_pkTabButText[4];
LABEL_31:
            v34 = v20;
            ((void (__thiscall *)(PgWinText *))v19[118].__vecDelDtor)(v21);
            break;
          default:
            break;
        }
        v26 = v4->m_aspChatBD[v4->m_uiChatMode].m_pObject;
        ((void (__thiscall *)(ChatBoardFlex *, signed int, char *, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          v26,
          1,
          v34,
          0,
          *(_DWORD *)acName,
          *(_DWORD *)&acName[4],
          *(_DWORD *)&acName[8],
          *(_DWORD *)&acName[12]);
      }
      return;
    case 0x1Bu:
      this->m_pkCheckBox->m_bCheck = this->m_pkCheckBox->m_bCheck == 0;
      this->m_pkChattingBox->m_bLock = this->m_pkCheckBox->m_bCheck;
      v27 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor;
      if ( this->m_pkCheckBox->m_bCheck )
        ((void (__stdcall *)(_DWORD))v27)(0);
      else
        ((void (__stdcall *)(signed int))v27)(1);
      return;
    case 0x1Cu:
      GameFrameWork::OpenChatBlockListWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      return;
    case 0x1Du:
      this->m_pkSpamFilterMsgShow->m_bCheck = this->m_pkSpamFilterMsgShow->m_bCheck == 0;
      v28 = this->m_pkSpamFilterMsgShow->m_bCheck;
      this->m_aspChatBD[0].m_pObject->m_FilteredTextShow = v28;
      v29 = this->m_pkSpamFilterMsgShow;
      goto LABEL_41;
    case 0x1Eu:
      v30 = ChatDisplayWin2::DoesSpamFilterWinOpen(this);
      ChatDisplayWin2::OpenSpamFilterWin(v4, v30 == 0);
      break;
    case 0x1Fu:
      v31 = ChatDisplayWin2::GetSpamBlockRate(this);
      ChatDisplayWin2::SetSpamBlockRate(v4, v31);
      break;
    case 0x20u:
      this->m_pkSpamFilterOnOff->m_bCheck = this->m_pkSpamFilterOnOff->m_bCheck == 0;
      v28 = this->m_pkSpamFilterOnOff->m_bCheck;
      this->m_aspChatBD[0].m_pObject->m_Filter = v28;
      v29 = this->m_pkSpamFilterOnOff;
LABEL_41:
      v29->m_bCheck = v28;
      break;
    default:
      return;
  }
}
// 5F2920: could not find valid save-restore pair for ebx
// 5F2920: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;

//----- (005F3140) --------------------------------------------------------
void __thiscall ChatDisplayWin2::DirectMessage(ChatDisplayWin2 *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ChatDisplayWin2 *v4; // esi@1
  float v5; // eax@2
  IDirectMessenger *v6; // eax@3
  int v7; // ebx@6
  int v8; // eax@6
  float v9; // ecx@6
  int v10; // ebx@6
  int v11; // eax@6
  float v12; // ebx@6
  int v13; // eax@6
  int v14; // ecx@6
  float v15; // ebx@6
  int v16; // edx@6
  int v17; // eax@6
  bool v18; // zf@6
  int (__thiscall *v19)(_DWORD); // edx@8
  int v20; // eax@8
  float v21; // ecx@8
  int v22; // edi@8
  int v23; // eax@8
  int v24; // edi@9
  float v25; // eax@10
  int v26; // edx@10
  int v27; // ecx@10
  float v28; // ebx@10
  int v29; // eax@10
  int v30; // edx@10
  int v31; // eax@10
  int v32; // eax@10
  int v33; // eax@11
  int v34; // edi@12
  float v35; // ebx@12
  int v36; // eax@12
  int (__thiscall *v37)(_DWORD); // edx@12
  int v38; // eax@12
  int v39; // eax@13
  int v40; // edi@14
  float v41; // ebx@14
  int v42; // eax@14
  int (__thiscall *v43)(_DWORD); // edx@14
  int v44; // eax@14
  int v45; // eax@15
  int v46; // edi@16
  int v47; // eax@16
  int v48; // eax@17
  int v49; // edi@18
  int v50; // eax@18
  int v51; // eax@19
  int v52; // edi@20
  int v53; // eax@20
  float v54; // ecx@21
  int v55; // edi@22
  float v56; // ebx@22
  int v57; // eax@22
  int v58; // eax@22
  IDirectMessengerVtbl *v59; // ebx@22
  void (__thiscall *v60)(IDirectMessenger *, IDirectMessenger *); // edi@22
  int v61; // eax@22
  IDirectMessengerVtbl *v62; // ebx@22
  void (__thiscall *v63)(IDirectMessenger *, IDirectMessenger *); // edi@22
  int v64; // eax@22
  IDirectMessengerVtbl *v65; // ebx@22
  float v66; // esi@22
  void (__thiscall *v67)(IDirectMessenger *, IDirectMessenger *); // edi@22
  int v68; // eax@22
  int v69; // eax@22
  float v70; // eax@23
  IDirectMessenger *v71; // eax@24
  float v72; // eax@27
  IDirectMessenger *v73; // eax@28
  int v74; // eax@31
  IDirectMessenger *v75; // eax@32
  NiPointer<NiAVObject> *v76; // eax@36
  IDirectMessenger *v77; // eax@37
  float v78; // eax@41
  IDirectMessenger *v79; // eax@42
  float v80; // eax@45
  IDirectMessenger *v81; // eax@46
  int v82; // eax@50
  IDirectMessenger *v83; // eax@51
  NiPointer<NiAVObject> *v84; // eax@55
  IDirectMessenger *v85; // eax@56
  int v86; // eax@60
  signed int v87; // ebx@60
  int v88; // ecx@60
  GTInformWin *v89; // ecx@68
  float v90; // edi@73
  CClientGuild *v91; // eax@73
  char *v92; // ebx@74
  float v93; // edi@79
  CClientGuildAcademy *v94; // eax@79
  char *v95; // ebx@80
  ActionWin *v96; // ecx@84
  int v97; // edx@86
  float v98; // eax@86
  int v99; // ecx@86
  int v100; // eax@86
  unsigned int v101; // edx@86
  NiTListItem<NiPointer<NiProperty> > *v102; // ecx@87
  float v103; // eax@89
  float v104; // eax@90
  Name5 kCharID; // [sp+30h] [bp-60h]@86
  int v106; // [sp+44h] [bp-4Ch]@10
  int uiWidth; // [sp+48h] [bp-48h]@6
  int v108; // [sp+4Ch] [bp-44h]@10
  int v109; // [sp+50h] [bp-40h]@10
  int uiHeight; // [sp+54h] [bp-3Ch]@6
  int uiOption; // [sp+58h] [bp-38h]@8
  void *v112; // [sp+5Ch] [bp-34h]@1
  Name5 thisa; // [sp+60h] [bp-30h]@86
  char acName[21]; // [sp+74h] [bp-1Ch]@87
  unsigned int v115; // [sp+8Ch] [bp-4h]@1
  int v116; // [sp+90h] [bp+0h]@1

  v115 = (unsigned int)&v116 ^ __security_cookie;
  v4 = this;
  v112 = pvBody;
  switch ( iMsgTag )
  {
    case 14:
      v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
      if ( LODWORD(v5) )
        v6 = (IDirectMessenger *)(LODWORD(v5) + 232);
      else
        v6 = 0;
      if ( pkFrom == v6 )
      {
        v7 = *((_DWORD *)this - 58);
        v8 = (*(int (__thiscall **)(char *))(v7 + 168))((char *)this - 232);
        (*(void (__thiscall **)(char *, int))(v7 + 176))((char *)v4 - 232, *((_DWORD *)v112 + 1) + v8);
        v9 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
        v10 = *LODWORD(v9);
        v11 = (*(int (**)(void))(*LODWORD(v9) + 164))();
        (*(void (__thiscall **)(_DWORD, int))(v10 + 172))(
          LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z),
          *(_DWORD *)v112 + v11);
        v12 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
        v13 = (*(int (__thiscall **)(_DWORD))(*LODWORD(v12) + 144))(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z));
        v14 = *(_DWORD *)(LODWORD(v12) + 356);
        v15 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
        v16 = *LODWORD(v15);
        uiWidth = v13 - 2 * v14;
        v17 = (*(int (__thiscall **)(_DWORD))(v16 + 148))(LODWORD(v15));
        v18 = *((_DWORD *)v112 + 2) == 0;
        uiHeight = v17 - 2 * *(_DWORD *)(LODWORD(v15) + 352);
        if ( !v18 && !*(_DWORD *)v112 )
        {
          v19 = *(int (__thiscall **)(_DWORD))(*((_DWORD *)v4 - 58) + 164);
          uiOption = *((_DWORD *)v4 - 58);
          v20 = v19((char *)v4 - 232);
          (*(void (__thiscall **)(char *, int))(uiOption + 172))((char *)v4 - 232, *((_DWORD *)v112 + 2) + v20);
          v21 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
          v22 = *LODWORD(v21);
          v23 = (*(int (**)(void))(*LODWORD(v21) + 164))();
          (*(void (__thiscall **)(_DWORD, int))(v22 + 172))(
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z),
            v23 - *((_DWORD *)v112 + 2));
        }
        v24 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
        v112 = (void *)5;
        do
        {
          v25 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
          v26 = *(_DWORD *)(LODWORD(v25) + 352);
          v27 = *(_DWORD *)v24;
          v28 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
          v106 = *(_DWORD *)(LODWORD(v25) + 356);
          v29 = *(_DWORD *)v27 + 308;
          uiOption = v26;
          v30 = *LODWORD(v28);
          v108 = v27;
          v109 = v29;
          v31 = (*(int (__thiscall **)(_DWORD))(v30 + 168))(LODWORD(v28));
          v32 = (*(int (__thiscall **)(_DWORD, int))(*LODWORD(v28) + 164))(LODWORD(v28), uiOption + v31);
          (*(void (__thiscall **)(int, int))v109)(v108, v106 + v32);
          (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 152))(uiWidth);
          (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 156))(uiHeight);
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v24 + 324))(LODWORD(Timer::ms_fCurTime));
          v24 += 4;
          v112 = (char *)v112 - 1;
        }
        while ( v112 );
        v33 = v4->baseclass_0.m_iVXPos;
        if ( v33 )
        {
          v34 = *(_DWORD *)v33;
          v35 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
          v36 = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
          v37 = *(int (__thiscall **)(_DWORD))(*LODWORD(v35) + 144);
          uiHeight = v36;
          v38 = v37(LODWORD(v35));
          (*(void (__thiscall **)(int, int))(v34 + 172))(v4->baseclass_0.m_iVXPos, uiHeight - v38);
        }
        v39 = v4->baseclass_0.m_iOldDragOffY;
        if ( v39 )
        {
          v40 = *(_DWORD *)v39;
          v41 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
          v42 = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
          v43 = *(int (__thiscall **)(_DWORD))(*LODWORD(v41) + 144);
          uiHeight = v42;
          v44 = v43(LODWORD(v41));
          (*(void (__thiscall **)(int, int))(v40 + 172))(v4->baseclass_0.m_iOldDragOffY, uiHeight - v44);
        }
        v45 = v4->baseclass_0.m_iOldDragOffX;
        if ( v45 )
        {
          v46 = *(_DWORD *)v45;
          v47 = (*(int (__thiscall **)(_DWORD))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
          (*(void (__thiscall **)(int, int))(v46 + 172))(v4->baseclass_0.m_iOldDragOffX, v47);
        }
        v48 = v4->baseclass_0.m_iOldDragOffY;
        if ( v48 )
        {
          v49 = *(_DWORD *)v48;
          v50 = (*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z)
                                 + 148))();
          (*(void (__thiscall **)(int, int))(v49 + 176))(v4->baseclass_0.m_iOldDragOffY, v50);
        }
        v51 = v4->baseclass_0.m_iOldDragOffX;
        if ( v51 )
        {
          v52 = *(_DWORD *)v51;
          v53 = (*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z)
                                 + 148))();
          (*(void (__thiscall **)(int, int))(v52 + 176))(v4->baseclass_0.m_iOldDragOffX, v53);
        }
        v54 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale;
        if ( LODWORD(v54) )
        {
          v55 = *LODWORD(v54);
          v56 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
          v57 = (*(int (**)(void))(*LODWORD(v54) + 148))();
          v58 = (*(int (__thiscall **)(_DWORD, int))(*LODWORD(v56) + 144))(LODWORD(v56), v57);
          (*(void (__thiscall **)(_DWORD, int))(v55 + 540))(
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale),
            v58 - v4->baseclass_0.m_iVYPos);
          v59 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr;
          v60 = v59->SetMsgHooker;
          v61 = (*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale)
                                 + 144))();
          (*(void (__thiscall **)(IDirectMessengerVtbl *, int))((void (__thiscall **)(_DWORD, _DWORD))v60 + 38))(
            v59,
            v61 - 4);
          v62 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr;
          v63 = v62->SetMsgHooker;
          v64 = (*(int (**)(void))(*LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale)
                                 + 148))();
          (*(void (__thiscall **)(IDirectMessengerVtbl *, int))((void (__thiscall **)(_DWORD, _DWORD))v63 + 39))(
            v62,
            v64 - 1);
          v65 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr;
          v66 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale;
          v67 = v65->SetMsgHooker;
          v68 = (*(int (__thiscall **)(_DWORD))(*LODWORD(v66) + 168))(LODWORD(v66));
          v69 = (*(int (__thiscall **)(_DWORD, int))(*LODWORD(v66) + 164))(LODWORD(v66), v68 + 4);
          (*(void (__thiscall **)(IDirectMessengerVtbl *, int))((void (__thiscall **)(_DWORD, _DWORD))v67 + 77))(
            v65,
            v69 + 4);
        }
      }
      break;
    case 2:
      v70 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
      if ( LODWORD(v70) )
        v71 = (IDirectMessenger *)(LODWORD(v70) + 232);
      else
        v71 = 0;
      if ( pkFrom == v71
        || (COERCE_SIGNED_INT(v72 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.y) == 0 ? (v73 = 0) : (v73 = (IDirectMessenger *)(LODWORD(v72) + 232)),
            v73 == pkFrom) )
        goto LABEL_49;
      v74 = *(_DWORD *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v74 )
        v75 = (IDirectMessenger *)(v74 + 232);
      else
        v75 = 0;
      if ( v75 == pkFrom )
      {
        *(float *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.vfptr = Timer::ms_fCurTime;
        LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject) = 1;
      }
      else
      {
        v76 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_pBase;
        if ( v76 )
          v77 = (IDirectMessenger *)&v76[58];
        else
          v77 = 0;
        if ( v77 == pkFrom )
        {
          *(float *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiSize = Timer::ms_fCurTime;
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiMaxSize) = 1;
        }
      }
      break;
    case 5:
      v78 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
      if ( LODWORD(v78) )
        v79 = (IDirectMessenger *)(LODWORD(v78) + 232);
      else
        v79 = 0;
      if ( pkFrom == v79
        || (COERCE_SIGNED_INT(v80 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.y) == 0 ? (v81 = 0) : (v81 = (IDirectMessenger *)(LODWORD(v80) + 232)),
            v81 == pkFrom) )
LABEL_49:
        this->baseclass_0.m_fInitXPos = 0.0;
      break;
    case 3:
      v82 = *(_DWORD *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v82 )
        v83 = (IDirectMessenger *)(v82 + 232);
      else
        v83 = 0;
      if ( v83 == pkFrom )
      {
        LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_spCollisionObject.m_pObject) = 0;
      }
      else
      {
        v84 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_pBase;
        if ( v84 )
          v85 = (IDirectMessenger *)&v84[58];
        else
          v85 = 0;
        if ( v85 == pkFrom )
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kChildren.m_uiMaxSize) = 0;
      }
      break;
    case 15:
      v86 = *(_DWORD *)pvBody;
      v87 = 0;
      v88 = *(_DWORD *)pvBody - 17;
      uiOption = 0;
      switch ( v88 )
      {
        case 0:
          v87 = 512;
          break;
        case 1:
          v87 = 8;
          break;
        case 2:
          v87 = 16;
          break;
        case 3:
          v87 = 32;
          break;
        case 4:
          v87 = 4096;
          break;
        case 5:
          v87 = 8192;
          break;
        case 6:
          g_kRaidinfo.m_bIsDisplayNotice = *((_BYTE *)pvBody + 4);
          if ( !*((_BYTE *)pvBody + 4) )
          {
            v89 = *(GTInformWin **)(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0])
                                  + 1244);
            if ( v89 )
              GTInformWin::Clear(v89);
          }
          break;
        case 7:
          v87 = 2;
          break;
        case 10:
          LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) = 0;
          TextData::Get(0xEF05252Bu);
          break;
        case 11:
          ChatDisplayWin2::SetChatMode((ChatDisplayWin2 *)((char *)v4 - 232), 2u);
          break;
        case 12:
          v90 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
          LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) = 3;
          v91 = GuildTask::GetGuild();
          if ( CClientGuild::AmIGuildMember(v91) )
          {
            TextData::Get(0xEEFCDF27u);
          }
          else
          {
            TextData::Get(0xEF05252Bu);
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0] = v90;
            v92 = TextData::Get(0x76816B99u);
            if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
            {
              (*(void (__stdcall **)(signed int, char *, ChatDisplayWin2 *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                           + 4))(
                25,
                v92,
                v4);
              if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
                (*(void (__stdcall **)(signed int, char *, ChatDisplayWin2 *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                             + 20))(
                  25,
                  v92,
                  v4);
            }
            ((void (__thiscall *)(ChatDisplayWin2 *, signed int, char *, ChatDisplayWin2 *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
              v4,
              25,
              v92,
              v4);
            v87 = uiOption;
          }
          break;
        case 13:
          v93 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
          LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) = 4;
          v94 = GuildAcademyTask::GetGuildAcademy();
          if ( !CClientGuildAcademy::AmIGuildAcademyMember(v94) )
          {
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0] = v93;
            v95 = TextData::Get(0xB2EBE824u);
            if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
            {
              (*(void (__stdcall **)(signed int, char *, ChatDisplayWin2 *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                           + 4))(
                25,
                v95,
                v4);
              if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
                (*(void (__stdcall **)(signed int, char *, ChatDisplayWin2 *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                                             + 20))(
                  25,
                  v95,
                  v4);
            }
            ((void (__thiscall *)(ChatDisplayWin2 *, signed int, char *, ChatDisplayWin2 *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
              v4,
              25,
              v95,
              v4);
            v87 = uiOption;
          }
          break;
        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:
          v96 = *(ActionWin **)(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0])
                              + 768);
          if ( v96 )
            ActionWin::OnEmotionAction(v96, v86 - 62);
          break;
        case 62:
        case 63:
        case 64:
        case 65:
        case 66:
        case 67:
          v97 = 5 * v86 - 395;
          v98 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0];
          v99 = *(_DWORD *)(LODWORD(v98) + 4 * v97 + 4696);
          v100 = LODWORD(v98) + 4 * v97 + 4696;
          v101 = *(_DWORD *)(v100 + 4);
          *(_DWORD *)&kCharID.n5_name[0] = v99;
          *(_QWORD *)&kCharID.n5_name[4] = __PAIR__(*(_DWORD *)(v100 + 8), v101);
          *(_QWORD *)&kCharID.n5_name[12] = *(_QWORD *)(v100 + 12);
          Name5::Name5(&thisa, &str);
          if ( !Name5::operator__(&kCharID, &thisa) )
          {
            Name5::n_string(&kCharID, acName);
            v102 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
            acName[20] = 0;
            ((void (__stdcall *)(_DWORD))v102->m_pkNext[38].m_pkPrev)(acName);
            (*(void (__thiscall **)(char *, signed int, _DWORD))(*((_DWORD *)v4 - 58) + 380))((char *)v4 - 232, 22, 0);
            ChatDisplayWin2::ChatStart((ChatDisplayWin2 *)((char *)v4 - 232), &byte_9BB993);
          }
          break;
        default:
          break;
      }
      if ( *((_BYTE *)v112 + 4) )
      {
        v103 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) + 2];
        *(_DWORD *)(LODWORD(v103) + 512) |= v87;
      }
      else
      {
        v104 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) + 2];
        *(_DWORD *)(LODWORD(v104) + 512) &= ~v87;
      }
      MachineOpt::SetChatWinFilter(
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
        *(_DWORD *)(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]) + 2])
                  + 512));
      break;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005F39F0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::ChatDisplayWin2(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // esi@1
  int v2; // ebx@1
  void *v3; // eax@1
  int v4; // ebx@3
  bool v5; // zf@8
  PopupMenuWin *v6; // ebx@9
  PopupMenuWin *v7; // ebx@14
  PgWinSpr *v8; // ebx@19
  std::exception thisa; // [sp+0h] [bp-28h]@25
  ChatDisplayWin2 *v10; // [sp+Ch] [bp-1Ch]@1
  char *_What; // [sp+10h] [bp-18h]@25
  int v12; // [sp+14h] [bp-14h]@2
  NiPointer<PopupMenuWin> *v13; // [sp+18h] [bp-10h]@2
  int v14; // [sp+24h] [bp-4h]@1

  v1 = this;
  v10 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v14 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatDisplayWin2::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatDisplayWin2::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_aspChatBD,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spMtrlProp.m_pObject = 0;
  v1->m_spFixedMtrlProp.m_pObject = 0;
  v1->m_spEdit.m_pObject = 0;
  v2 = (int)v1->m_spChatFilterPopupMenu;
  _eh_vector_constructor_iterator_(
    v1->m_spChatFilterPopupMenu,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spChatModePopupMenu.m_pObject = 0;
  v1->m_spChatPopupMenu.m_pObject = 0;
  CLCS::CLCS(&v1->m_kSpamFilter);
  v1->m_spkSpamSlideSpr.m_pObject = 0;
  LOBYTE(v14) = 9;
  v1->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x70u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kAlphaControl.fTimeLeftToAppear = 1.0;
  LOBYTE(v14) = 10;
  v1->m_uiChattingBoxWidthMinusEditBoxWidth = 0;
  v1->m_kAlphaControl.fAlphaValue = 0.0;
  v1->m_pkLTSocketWin = 0;
  v1->m_pkLBSocketWin = 0;
  v1->m_pkRBSocketWin = 0;
  v13 = v1->m_spChatFilterPopupMenu;
  v12 = 5;
  do
  {
    v4 = *(_DWORD *)v2;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      v13->m_pObject = 0;
    }
    v2 = (int)&v13[1];
    v5 = v12-- == 1;
    ++v13;
  }
  while ( !v5 );
  v6 = v1->m_spChatPopupMenu.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v1->m_spChatPopupMenu.m_pObject = 0;
  }
  v7 = v1->m_spChatModePopupMenu.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v1->m_spChatModePopupMenu.m_pObject = 0;
  }
  v1->m_uiChatMode = 0;
  v1->m_pkReportText = 0;
  v1->m_pkReportTabBtn = 0;
  v1->m_pkChatCommandSprWin = 0;
  v1->m_pkTabButText[0] = 0;
  v1->m_pkTabButText[1] = 0;
  v1->m_pkTabButText[2] = 0;
  v1->m_pkTabButText[3] = 0;
  v1->m_pkTabButText[4] = 0;
  v1->m_pkTabText = 0;
  v1->m_iX = 0;
  v1->m_iY = 0;
  v1->m_pkCheckBox = 0;
  v1->m_pkChatBlockListBtn = 0;
  CLCS::Init(&v1->m_kSpamFilter, 128);
  v8 = v1->m_spkSpamSlideSpr.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v8,
          1u);
    }
    v1->m_spkSpamSlideSpr.m_pObject = 0;
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9BBE24: using guessed type int (__stdcall *ChatDisplayWin2___vftable_)(int uiFlags);
// 9BBE44: using guessed type int (__thiscall *ChatDisplayWin2___vftable_)(void *p, char);

//----- (005F3C60) --------------------------------------------------------
void __thiscall ChatDisplayWin2::_ChatDisplayWin2(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // esi@1
  EditWin *v2; // edi@1
  PgWin **v3; // edi@6
  signed int v4; // ebx@6
  int v5; // ebx@8
  int v6; // edi@9
  PopupMenuWin *v7; // edi@15
  PopupMenuWin *v8; // edi@20
  void **v9; // ecx@25
  void *v10; // eax@25
  void *v11; // edi@26
  PgWinSpr *v12; // edi@27
  PopupMenuWin *v13; // edi@31
  PopupMenuWin *v14; // edi@35
  EditWin *v15; // edi@39
  NiMaterialProperty *v16; // edi@43
  NiMaterialProperty *v17; // edi@47
  signed int v18; // [sp+4h] [bp-10h]@8

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ChatDisplayWin2::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ChatDisplayWin2::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spEdit.m_pObject = 0;
  }
  v3 = (PgWin **)v1->m_spChatFilterPopupMenu;
  v4 = 5;
  do
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, *v3);
    ++v3;
    --v4;
  }
  while ( v4 );
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_spChatPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v5 = (int)v1->m_spChatFilterPopupMenu;
  v18 = 5;
  do
  {
    v6 = *(_DWORD *)v5;
    if ( *(_DWORD *)v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      *(_DWORD *)v5 = 0;
    }
    v5 += 4;
    --v18;
  }
  while ( v18 );
  v7 = v1->m_spChatPopupMenu.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v1->m_spChatPopupMenu.m_pObject = 0;
  }
  v8 = v1->m_spChatModePopupMenu.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v8,
        1u);
    v1->m_spChatModePopupMenu.m_pObject = 0;
  }
  v1->m_pkCheckBox = 0;
  v9 = *(void ***)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v10 = *v9;
  *v9 = v9;
  *(_DWORD *)(*(_DWORD *)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize = 0;
  if ( v10 != *(void **)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v11 = *(void **)v10;
      operator delete(v10);
      v10 = v11;
    }
    while ( v11 != *(void **)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  v12 = v1->m_spkSpamSlideSpr.m_pObject;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v12,
      1u);
  CLCS::_CLCS(&v1->m_kSpamFilter);
  v13 = v1->m_spChatPopupMenu.m_pObject;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v13,
      1u);
  v14 = v1->m_spChatModePopupMenu.m_pObject;
  if ( v14
    && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v14,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spChatFilterPopupMenu,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v15 = v1->m_spEdit.m_pObject;
  if ( v15
    && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v15,
      1u);
  v16 = v1->m_spFixedMtrlProp.m_pObject;
  if ( v16
    && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v16 )
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
  v17 = v1->m_spMtrlProp.m_pObject;
  if ( v17
    && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v17 )
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_aspChatBD,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9BBE24: using guessed type int (__stdcall *ChatDisplayWin2___vftable_)(int uiFlags);
// 9BBE44: using guessed type int (__thiscall *ChatDisplayWin2___vftable_)(void *p, char);

//----- (005F3F40) --------------------------------------------------------
ChatDisplayWin2 *__cdecl ChatDisplayWin2::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ChatDisplayWin2 *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x330u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ChatDisplayWin2::ChatDisplayWin2((ChatDisplayWin2 *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 544))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ChatDisplayWin2 *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005F4070) --------------------------------------------------------
void __thiscall ChatDisplayWin2::AddChatLinkItemInfo(ChatDisplayWin2 *this, char *pcChatText)
{
  char *v2; // edi@1
  int v3; // eax@2
  int v4; // esi@2
  int v5; // ebx@5
  int v6; // esi@5
  int v7; // edx@9
  unsigned int v8; // kr00_4@12
  unsigned int v9; // ebx@12
  void *v10; // esi@22
  unsigned int v11; // eax@35
  void *v12; // edi@35
  char v13; // cl@36
  void *v14; // edi@37
  const void *v15; // esi@37
  int v16; // ecx@37
  char *v17; // eax@37
  const void *v18; // esi@37
  char v19; // cl@38
  unsigned int v20; // eax@39
  void *v21; // edi@39
  char v22; // cl@40
  int v23; // eax@45
  char v24; // cl@46
  unsigned int v25; // ebx@47
  char *v26; // edi@47
  char v27; // al@48
  char *v28; // eax@49
  char v29; // dl@50
  unsigned int v30; // eax@51
  void *v31; // edi@51
  char v32; // cl@52
  char *v33; // [sp-14h] [bp-16Ch]@23
  const char *v34; // [sp-10h] [bp-168h]@23
  ChatDisplayWin2 *v35; // [sp+4h] [bp-154h]@1
  int iter; // [sp+Ch] [bp-14Ch]@2
  void *pInfo; // [sp+10h] [bp-148h]@6
  char chItemName[256]; // [sp+14h] [bp-144h]@35
  char chColorName[64]; // [sp+114h] [bp-44h]@5
  unsigned int v40; // [sp+154h] [bp-4h]@1
  int v41; // [sp+158h] [bp+0h]@1

  v40 = (unsigned int)&v41 ^ __security_cookie;
  v2 = pcChatText;
  v35 = this;
  if ( pcChatText )
  {
    v3 = *(_DWORD *)&this->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v4 = *(_DWORD *)v3;
    iter = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 != v3 )
    {
      while ( 1 )
      {
        memset(chColorName, 0, 0x40u);
        v5 = *(_WORD *)(v4 + 8);
        v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                v5) )
        {
          if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) )
          {
            v7 = *(_DWORD *)(v6 + 196);
            if ( *(_DWORD *)(v7 + 4 * v5) )
              pInfo = *(void **)(v7 + 4 * v5);
            else
              pInfo = 0;
          }
          else
          {
            pInfo = 0;
          }
        }
        else
        {
          pInfo = 0;
        }
        v8 = strlen(v2);
        v9 = 0;
        if ( (signed int)(v8 + 1) > 0 )
        {
          while ( 1 )
          {
            if ( v2[v9] == 123 && !strncmp(&v2[v9], "{color,", 7u) )
            {
              for ( ; v2[v9 + 1] != 125; ++v9 )
                ;
              ++v9;
            }
            if ( v2[v9] == 60 && v2[v9 + 1] == 9 )
              break;
            ++v9;
            if ( (signed int)v9 >= (signed int)(v8 + 1) )
              goto LABEL_54;
          }
          v10 = pInfo;
          switch ( *(_DWORD *)((char *)pInfo + 118) )
          {
            case 0:
              v34 = "{color,%s,";
              v33 = chColorName;
              break;
            case 1:
              v34 = "{color,%s,";
              goto LABEL_31;
            case 2:
            case 5:
              v34 = "{color,%s,";
              v33 = chColorName;
              break;
            case 3:
              v34 = "{color,%s,";
              v33 = chColorName;
              break;
            case 4:
              v34 = "{color,%s,";
              goto LABEL_31;
            case 6:
              v34 = "{color,%s,";
              v33 = chColorName;
              break;
            case 7:
              v34 = "{color,%s,";
              v33 = chColorName;
              break;
            default:
              v34 = "{color,%s,";
LABEL_31:
              v33 = chColorName;
              break;
          }
          sprintf(v33, v34);
          if ( *((_BYTE *)v10 + 342) != 45 && SetItemNameTab::GetByInxName((char *)v10 + 342) )
            sprintf(chColorName, "{color,%s,");
          memset(chItemName, 0, 0x100u);
          strncpy(chItemName, v2, v9);
          v11 = strlen(chColorName) + 1;
          v12 = (char *)&pInfo + 3;
          do
          {
            v13 = *((_BYTE *)v12 + 1);
            v12 = (char *)v12 + 1;
          }
          while ( v13 );
          memcpy(v12, chColorName, 4 * (v11 >> 2));
          v15 = &chColorName[4 * (v11 >> 2)];
          v14 = (char *)v12 + 4 * (v11 >> 2);
          v16 = v11 & 3;
          v17 = &pcChatText[v9];
          memcpy(v14, v15, v16);
          v18 = &pcChatText[v9];
          do
            v19 = *v17++;
          while ( v19 );
          v20 = v17 - v18;
          v21 = (char *)&pInfo + 3;
          do
          {
            v22 = *((_BYTE *)v21 + 1);
            v21 = (char *)v21 + 1;
          }
          while ( v22 );
          memcpy(v21, v18, v20);
          while ( pcChatText[v9] != 9 || pcChatText[v9 + 1] != 62 )
            ++v9;
          memset(pcChatText, 0, 0x400u);
          v23 = (int)chColorName;
          do
            v24 = *(_BYTE *)v23++;
          while ( v24 );
          v25 = v23 - (_DWORD)&chColorName[1] + v9 + 2;
          strncpy(pcChatText, chItemName, v25);
          v26 = pcChatText - 1;
          do
            v27 = (v26++)[1];
          while ( v27 );
          v28 = &chItemName[v25];
          *(_WORD *)v26 = word_9BBE14;
          do
            v29 = *v28++;
          while ( v29 );
          v30 = v28 - &chItemName[v25];
          v31 = pcChatText - 1;
          do
          {
            v32 = *((_BYTE *)v31 + 1);
            v31 = (char *)v31 + 1;
          }
          while ( v32 );
          memcpy(v31, &chItemName[v25], v30);
          v2 = pcChatText;
        }
LABEL_54:
        iter = *(_DWORD *)iter;
        if ( iter == *(_DWORD *)&v35->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
          break;
        v4 = iter;
      }
    }
  }
}
// 9BBE14: using guessed type __int16 word_9BBE14;
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (005F43D0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::ClearLinkItemList(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2
  void **v5; // ecx@5
  void *v6; // eax@5
  void *v7; // edi@6

  v1 = this;
  v2 = *(void ***)&this->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  if ( *v2 != v2 )
  {
    do
    {
      v4 = *(void **)v3;
      if ( v3 != *(void **)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
      {
        **((_DWORD **)v3 + 1) = v4;
        *(_DWORD *)(*(_DWORD *)v3 + 4) = *((_DWORD *)v3 + 1);
        operator delete(v3);
        --v1->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize;
      }
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v5 = *(void ***)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = *v5;
  *v5 = v5;
  *(_DWORD *)(*(_DWORD *)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize = 0;
  if ( v6 != *(void **)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v7 = *(void **)v6;
      operator delete(v6);
      v6 = v7;
    }
    while ( v7 != *(void **)&v1->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (005F4450) --------------------------------------------------------
void __thiscall ChatDisplayWin2::DeleteItemLink(ChatDisplayWin2 *this, bool bIsDeleteKey, bool bIsBackSpaceKey)
{
  ChatDisplayWin2 *v3; // edi@1
  void *v4; // esi@2
  int v5; // eax@2

  v3 = this;
  if ( bIsDeleteKey != bIsBackSpaceKey )
  {
    v4 = (void *)**(_DWORD **)&this->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = ChatDisplayWin2::PositionCarretItemLink(this);
    if ( v5 > 0 )
    {
      do
      {
        --v5;
        v4 = *(void **)v4;
      }
      while ( v5 );
    }
    if ( bIsBackSpaceKey )
    {
      if ( v4 == *(void **)&v3->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
        return;
      **((_DWORD **)v4 + 1) = *(_DWORD *)v4;
      *(_DWORD *)(*(_DWORD *)v4 + 4) = *((_DWORD *)v4 + 1);
      goto LABEL_10;
    }
    if ( bIsDeleteKey && v4 != *(void **)&v3->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      **((_DWORD **)v4 + 1) = *(_DWORD *)v4;
      *(_DWORD *)(*(_DWORD *)v4 + 4) = *((_DWORD *)v4 + 1);
LABEL_10:
      operator delete(v4);
      --v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize;
      return;
    }
  }
}

//----- (005F44D0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::OnEditEnd(ChatDisplayWin2 *this, unsigned int wParam, int lParam)
{
  ChatDisplayWin2 *v3; // edi@1
  GameFrameWork *v4; // esi@7
  char *v5; // eax@7
  int v6; // esi@8
  char v7; // al@9
  char v8; // al@12
  int v9; // ecx@12
  signed int v10; // edx@13
  void **v11; // ecx@25
  void *v12; // eax@25
  int v13; // esi@25
  void *v14; // edi@26
  EditWin *v15; // ecx@36
  int v16; // eax@36
  int v17; // edx@36
  char v18; // cl@37
  int v19; // eax@39
  int v20; // esi@39
  int v21; // edx@39
  char v22; // cl@40
  int v23; // eax@41
  int i; // ecx@41
  char *v25; // eax@45
  char v26; // cl@46
  char *v27; // [sp-Ch] [bp-8B8h]@30
  char *v28; // [sp-8h] [bp-8B4h]@30
  char *v29; // [sp-4h] [bp-8B0h]@30
  char resultText[1024]; // [sp+10h] [bp-89Ch]@39
  char pcChatText[1024]; // [sp+410h] [bp-49Ch]@1
  char acToken[128]; // [sp+810h] [bp-9Ch]@10
  char acName[21]; // [sp+890h] [bp-1Ch]@36
  unsigned int v34; // [sp+8A8h] [bp-4h]@1
  int v35; // [sp+8ACh] [bp+0h]@1

  v34 = (unsigned int)&v35 ^ __security_cookie;
  v3 = this;
  ((void (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)();
  sprintf(pcChatText, "%s");
  if ( wParam != 2 )
    ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
  if ( wParam != 1 )
  {
    if ( wParam == 2 )
    {
      ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
      return;
    }
    goto LABEL_52;
  }
  if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount > 0 )
  {
    v4 = (GameFrameWork *)v3->baseclass_0.m_pkFrameWork;
    v5 = TextData2::Get(0x4F19C4B8u);
    GameFrameWork::AddSysMsg(v4, v5);
  }
  v6 = (int)pcChatText;
  if ( !pcChatText[0] )
  {
LABEL_21:
    if ( v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize )
      ChatDisplayWin2::AddChatLinkItemInfo(v3, pcChatText);
    switch ( v3->m_uiChatMode )
    {
      case 0u:
        v29 = 0;
        v28 = 0;
        v27 = pcChatText;
        goto LABEL_51;
      case 2u:
        v29 = 0;
        v28 = "/p ";
        v27 = pcChatText;
        goto LABEL_51;
      case 3u:
        v29 = 0;
        v28 = "/g ";
        goto LABEL_50;
      case 4u:
        v29 = 0;
        v28 = "/a ";
        v27 = pcChatText;
        goto LABEL_51;
      case 1u:
        if ( !pcChatText[0] || IsAllSpace_0(pcChatText) )
          break;
        Name5::n_string(&GameFrameWork::m_kWhisperCharID, acName);
        v15 = v3->m_pkChatNameEditBox;
        acName[20] = 0;
        v16 = ((int (*)(void))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v17 = v16 + 1;
        do
          v18 = *(_BYTE *)v16++;
        while ( v18 );
        if ( v16 == v17 )
        {
          v25 = acName;
          do
            v26 = *v25++;
          while ( v26 );
          if ( v25 == &acName[1] )
          {
            v29 = 0;
            v28 = "/w ";
LABEL_50:
            v27 = pcChatText;
          }
          else
          {
            resultText[0] = 0;
            memset(&resultText[1], 0, 0x3FFu);
            sprintf(resultText, "%s %s");
            v29 = acName;
            v28 = "/w ";
            v27 = resultText;
          }
        }
        else
        {
          resultText[0] = 0;
          memset(&resultText[1], 0, 0x3FFu);
          v19 = ((int (*)(void))v3->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
          v20 = v19;
          v21 = v19 + 1;
          do
            v22 = *(_BYTE *)v19++;
          while ( v22 );
          v23 = v19 - v21;
          for ( i = 0; i < v23; ++i )
          {
            if ( *(_BYTE *)(i + v20) == 32 )
              return;
          }
          ((void (__cdecl *)(_DWORD))v3->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(pcChatText);
          sprintf(resultText, "%s %s");
          v29 = (char *)v20;
          v28 = "/w ";
          v27 = resultText;
        }
LABEL_51:
        GameFrameWork::DecodingChat((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v27, v28, v29);
        break;
      default:
        break;
    }
LABEL_52:
    if ( byte_B5BB48 && pcChatText[0] )
    {
      ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v3->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v3->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v3->m_pkChatKorMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
    if ( v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize )
      ChatDisplayWin2::ClearLinkItemList(v3);
    return;
  }
  while ( 1 )
  {
    v7 = *(_BYTE *)v6++;
    if ( v7 == 123 )
    {
      acToken[0] = 0;
      memset(&acToken[1], 0, 0x7Fu);
      for ( ; *(_BYTE *)v6 == 32; ++v6 )
        ;
      v8 = *(_BYTE *)v6;
      v9 = (int)acToken;
      if ( *(_BYTE *)v6 )
      {
        v10 = 0;
        do
        {
          if ( v8 == 44 || v10 >= 64 )
            break;
          if ( v8 != 32 )
          {
            *(_BYTE *)v9++ = v8;
            ++v10;
          }
          v8 = *(_BYTE *)(v6++ + 1);
        }
        while ( v8 );
      }
      *(_BYTE *)v9 = 0;
      if ( !_strcmpi(acToken, "color") )
        break;
    }
    if ( !*(_BYTE *)v6 )
      goto LABEL_21;
  }
  if ( v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize )
  {
    v11 = *(void ***)&v3->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v12 = *v11;
    v13 = (int)&v3->m_listItemLinkStruct;
    if ( *v11 != v11 )
    {
      do
      {
        v14 = *(void **)v12;
        if ( v12 != *(void **)v13 )
        {
          **((_DWORD **)v12 + 1) = v14;
          *(_DWORD *)(*(_DWORD *)v12 + 4) = *((_DWORD *)v12 + 1);
          operator delete(v12);
          --*(_DWORD *)(v13 + 4);
        }
        v12 = v14;
      }
      while ( v14 != *(void **)v13 );
    }
    std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::clear((std::list<float,std::allocator<float> > *)v13);
  }
}
// A85C00: using guessed type int __security_cookie;
// B5BB48: using guessed type char byte_B5BB48;

//----- (005F48B0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::SetItemChatLink(ChatDisplayWin2 *this, char *pLinkItemText, SHINE_ITEM_STRUCT *rItemStruct)
{
  ChatDisplayWin2 *v3; // ebx@1
  int v4; // eax@2
  char *v5; // edi@2
  int v6; // esi@2
  char v7; // cl@3
  int v8; // esi@4
  PgEditWin *v9; // eax@5
  int i; // eax@6
  int j; // eax@10
  unsigned int v12; // eax@14
  void *v13; // edi@14
  char v14; // cl@15
  void *v15; // edi@16
  const void *v16; // esi@16
  int v17; // ecx@16
  int v18; // eax@16
  char v19; // cl@17
  int v20; // eax@18
  const void *v21; // esi@18
  char v22; // cl@19
  unsigned int v23; // eax@20
  void *v24; // edi@20
  char v25; // cl@21
  void *v26; // edi@22
  const void *v27; // esi@22
  int v28; // ecx@22
  int v29; // eax@22
  char v30; // cl@23
  int v31; // edi@26
  std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *v32; // eax@26
  unsigned int v33; // ecx@26
  int v34; // esi@29
  int v35; // eax@29
  unsigned int v36; // ecx@31
  PgFrameWork *v37; // eax@34
  int pCurrentText; // [sp+8h] [bp-11Ch]@2
  int nCarretPos; // [sp+Ch] [bp-118h]@2
  int nInsertCarretPos; // [sp+14h] [bp-110h]@18
  int nNextTokenCnt; // [sp+18h] [bp-10Ch]@2
  int nPreTokenCnt; // [sp+1Ch] [bp-108h]@2
  char chInsertText[256]; // [sp+20h] [bp-104h]@2
  unsigned int v44; // [sp+120h] [bp-4h]@1
  int v45; // [sp+124h] [bp+0h]@1

  v44 = (unsigned int)&v45 ^ __security_cookie;
  v3 = this;
  if ( pLinkItemText )
  {
    nPreTokenCnt = 0;
    nNextTokenCnt = 0;
    nCarretPos = PgEditWin::GetCaretPos(this->m_spEdit.m_pObject->m_spEditWin.m_pObject);
    memset(chInsertText, 0, 0x100u);
    v4 = ((int (*)(void))v3->m_spEdit.m_pObject->m_spEditWin.m_pObject->baseclass_0.vfptr[4].__vecDelDtor)();
    v5 = (char *)v4;
    pCurrentText = v4;
    v6 = v4 + 1;
    do
      v7 = *(_BYTE *)v4++;
    while ( v7 );
    v8 = v4 - v6 + 1;
    if ( !(unsigned __int8)((int (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)() )
    {
      ((void (__stdcall *)(signed int))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v9 = v3->m_spEdit.m_pObject->m_spEditWin.m_pObject;
      v9->m_bStrClip = 1;
      v9->m_uiMaxEditWidth = 423;
      ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
      ((void (__stdcall *)(signed int))v3->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_UNKNOWN *))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(&unk_9BB9B3);
    }
    for ( i = 0; i < nCarretPos; ++i )
    {
      if ( v5[i] == 9 )
        ++nPreTokenCnt;
    }
    for ( j = nCarretPos; j < v8; ++j )
    {
      if ( v5[j] == 9 )
        ++nNextTokenCnt;
    }
    strncpy(chInsertText, v5, nCarretPos);
    v12 = strlen(pLinkItemText) + 1;
    v13 = (char *)&nPreTokenCnt + 3;
    do
    {
      v14 = *((_BYTE *)v13 + 1);
      v13 = (char *)v13 + 1;
    }
    while ( v14 );
    memcpy(v13, pLinkItemText, 4 * (v12 >> 2));
    v16 = &pLinkItemText[4 * (v12 >> 2)];
    v15 = (char *)v13 + 4 * (v12 >> 2);
    v17 = v12 & 3;
    v18 = (int)chInsertText;
    memcpy(v15, v16, v17);
    do
      v19 = *(_BYTE *)v18++;
    while ( v19 );
    nInsertCarretPos = v18 - (_DWORD)&chInsertText[1];
    v20 = pCurrentText + nCarretPos;
    v21 = (const void *)(pCurrentText + nCarretPos);
    do
      v22 = *(_BYTE *)v20++;
    while ( v22 );
    v23 = v20 - (_DWORD)v21;
    v24 = (char *)&nPreTokenCnt + 3;
    do
    {
      v25 = *((_BYTE *)v24 + 1);
      v24 = (char *)v24 + 1;
    }
    while ( v25 );
    memcpy(v24, v21, 4 * (v23 >> 2));
    v27 = (char *)v21 + 4 * (v23 >> 2);
    v26 = (char *)v24 + 4 * (v23 >> 2);
    v28 = v23 & 3;
    v29 = (int)chInsertText;
    memcpy(v26, v27, v28);
    do
      v30 = *(_BYTE *)v29++;
    while ( v30 );
    if ( (signed int)(v29 - (signed int)&chInsertText[1] + 20 * v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize) <= 128 )
    {
      if ( nNextTokenCnt )
      {
        v34 = **(_DWORD **)&v3->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        v35 = nPreTokenCnt / 2;
        if ( nPreTokenCnt / 2 > 0 )
        {
          do
          {
            --v35;
            v34 = *(_DWORD *)v34;
          }
          while ( v35 );
        }
        v32 = std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Buynode<SHINE_ITEM_STRUCT__>(
                &v3->m_listItemLinkStruct.baseclass_0,
                (std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node *)v34,
                *(std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node **)(v34 + 4),
                rItemStruct);
        v36 = v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize;
        if ( 41698710 - v36 < 1 )
          std::_Xlength_error("list<T> too long");
        v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize = v36 + 1;
        *(_DWORD *)(v34 + 4) = v32;
      }
      else
      {
        v31 = *(_DWORD *)&v3->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        v32 = std::_List_val<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::_Buynode<SHINE_ITEM_STRUCT__>(
                &v3->m_listItemLinkStruct.baseclass_0,
                *(std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node **)&v3->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
                *(std::_List_nod<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >::_Node **)(v31 + 4),
                rItemStruct);
        v33 = v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize;
        if ( 41698710 - v33 < 1 )
          std::_Xlength_error("list<T> too long");
        v3->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize = v33 + 1;
        *(_DWORD *)(v31 + 4) = v32;
      }
      v32->_Prev->_Next = v32;
      v37 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v37 )
        GameFrameWork::SetSaveChatComList((GameFrameWork *)v37, 0);
      ((void (__stdcall *)(_DWORD))v3->m_spEdit.m_pObject->m_spEditWin.m_pObject->baseclass_0.vfptr[5].__vecDelDtor)(chInsertText);
      PgEditWin::SetCaretPos(v3->m_spEdit.m_pObject->m_spEditWin.m_pObject, nInsertCarretPos);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005F4BC0) --------------------------------------------------------
void __thiscall ChatDisplayWin2::ItemLinkKeyDownCheck(ChatDisplayWin2 *this)
{
  ChatDisplayWin2 *v1; // edi@1
  const char *v2; // esi@1
  PgEditWin *v3; // edi@2
  int v4; // eax@3
  unsigned int v5; // ebx@3
  char v6; // cl@4
  int v7; // edi@7
  int v8; // ebx@15
  unsigned int v9; // edi@22
  int v10; // edi@25
  unsigned int v11; // ebx@25
  unsigned int v12; // eax@25
  void *v13; // edi@25
  char v14; // cl@26
  void *v15; // esi@27
  int v16; // eax@27
  unsigned int v17; // edi@33
  unsigned int v18; // edi@36
  unsigned int v19; // ebx@36
  int v20; // eax@36
  char v21; // cl@37
  int v22; // ebx@38
  unsigned int v23; // eax@38
  void *v24; // edi@38
  char v25; // cl@39
  char *src; // [sp+8h] [bp-314h]@32
  ChatDisplayWin2 *thisa; // [sp+Ch] [bp-310h]@1
  PgEditWin *pEditWin; // [sp+10h] [bp-30Ch]@2
  unsigned int nCaretPos; // [sp+14h] [bp-308h]@3
  char chToken[256]; // [sp+18h] [bp-304h]@10
  char chStartText[256]; // [sp+118h] [bp-204h]@22
  char chNextText[256]; // [sp+218h] [bp-104h]@22
  unsigned int v33; // [sp+318h] [bp-4h]@1
  int v34; // [sp+31Ch] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v1 = this;
  thisa = this;
  v2 = (const char *)((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v2 )
  {
    v3 = v1->m_spEdit.m_pObject->m_spEditWin.m_pObject;
    pEditWin = v3;
    if ( v3 )
    {
      v4 = PgEditWin::GetCaretPos(v3);
      nCaretPos = v4;
      v5 = strlen(v2);
      if ( v5 )
      {
        v6 = *(_BYTE *)(g_pkKeyboard + 48);
        if ( v6 & 0x10 )
        {
          if ( v2[v4 - 1] == 60 && v2[v4] == 9 )
          {
            v7 = v4;
            while ( 1 )
            {
              ++v7;
              if ( v7 >= (signed int)v5 )
                break;
              if ( v2[v7] == 62 )
              {
                memcpy(chToken, (char *)&v2[v4], v7 - v4);
                if ( strtok(chToken, "\t") )
                  PgEditWin::SetCaretPos(pEditWin, v7 + 1);
                return;
              }
            }
          }
        }
        else
        {
          if ( v6 & 8 )
          {
            if ( v2[v4] == 62 && v2[v4 - 1] == 9 )
            {
              v8 = v4;
              while ( 1 )
              {
                --v8;
                if ( v8 <= 0 )
                  break;
                if ( v2[v8 - 1] == 60 )
                {
                  memcpy(chToken, (char *)&v2[v8], v4 - v8);
                  if ( strtok(chToken, "\t") )
                    PgEditWin::SetCaretPos(v3, v8 - 1);
                  return;
                }
              }
            }
          }
          else
          {
            if ( *(_BYTE *)(g_pkKeyboard + 49) & 2 )
            {
              if ( v2[v4] == 9 )
              {
                memset(chStartText, 0, 0x100u);
                memset(chNextText, 0, 0x100u);
                v9 = nCaretPos;
                while ( 1 )
                {
                  ++v9;
                  if ( (signed int)v9 >= (signed int)v5 )
                    break;
                  if ( v2[v9] == 62 )
                  {
                    v10 = v9 + 1;
                    memcpy(chStartText, (char *)v2, nCaretPos);
                    v11 = v5 - v10;
                    memcpy(chNextText, (char *)&v2[v10], v11);
                    chNextText[v11] = 0;
                    v12 = strlen(chNextText) + 1;
                    v13 = &chToken[255];
                    do
                    {
                      v14 = *((_BYTE *)v13 + 1);
                      v13 = (char *)v13 + 1;
                    }
                    while ( v14 );
                    memcpy(v13, chNextText, v12);
                    pEditWin->baseclass_0.vfptr[5].__vecDelDtor((NiRefObject *)pEditWin, (unsigned int)chStartText);
                    PgEditWin::SetCaretPos(pEditWin, nCaretPos);
                    v15 = (void *)**(_DWORD **)&thisa->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
                    v16 = ChatDisplayWin2::PositionCarretItemLink(thisa);
                    if ( v16 > 0 )
                    {
                      do
                      {
                        --v16;
                        v15 = *(void **)v15;
                      }
                      while ( v16 );
                    }
                    if ( v15 != *(void **)&thisa->m_listItemLinkStruct.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
                    {
                      **((_DWORD **)v15 + 1) = *(_DWORD *)v15;
                      *(_DWORD *)(*(_DWORD *)v15 + 4) = *((_DWORD *)v15 + 1);
                      operator delete(v15);
                      --thisa->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize;
                    }
                    return;
                  }
                }
              }
            }
            else
            {
              if ( *(_BYTE *)(g_pkKeyboard + 34) & 0x40 )
              {
                src = (char *)&v2[v4];
                if ( v2[v4 - 1] == 9 )
                {
                  memset(chNextText, 0, 0x100u);
                  memset(chStartText, 0, 0x100u);
                  v17 = nCaretPos;
                  while ( 1 )
                  {
                    --v17;
                    if ( (signed int)v17 <= 0 )
                      break;
                    if ( v2[v17 - 1] == 60 )
                    {
                      v18 = v17 - 1;
                      memcpy(chNextText, (char *)v2, v18);
                      v19 = v5 - v18;
                      memcpy(chStartText, src, v19);
                      v20 = (int)chNextText;
                      chToken[v19] = 0;
                      do
                        v21 = *(_BYTE *)v20++;
                      while ( v21 );
                      v22 = v20 - (_DWORD)&chNextText[1];
                      v23 = strlen(chStartText) + 1;
                      v24 = &chStartText[255];
                      do
                      {
                        v25 = *((_BYTE *)v24 + 1);
                        v24 = (char *)v24 + 1;
                      }
                      while ( v25 );
                      memcpy(v24, chStartText, v23);
                      pEditWin->baseclass_0.vfptr[5].__vecDelDtor((NiRefObject *)pEditWin, (unsigned int)chNextText);
                      PgEditWin::SetCaretPos(pEditWin, v22);
                      ChatDisplayWin2::DeleteItemLink(thisa, 0, 1);
                      return;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9816C: using guessed type int g_pkKeyboard;

//----- (005F4F90) --------------------------------------------------------
void __thiscall ChatDisplayWin2::UpdateMeWin(ChatDisplayWin2 *this, float fCurTime)
{
  int v2; // ebx@0
  int v3; // edi@0
  int v4; // esi@0
  double v5; // st7@1
  double v6; // st6@1
  ChatDisplayWin2 *v7; // esi@1
  signed int v8; // edi@1
  ChatBoardFlex *v9; // ecx@3
  bool v10; // c0@5
  double v11; // st7@5
  ChatBoardFlex *v12; // ecx@6
  FrameBoxWin *v13; // ecx@7
  PgWinBut *v14; // ecx@15
  PgWinBut *v15; // ecx@17
  PgWinBut *v16; // ecx@19
  ColumnBut *v17; // ecx@21
  PgWinBut *v18; // ecx@23
  PgWinBut *v19; // ecx@25
  PgWinBut *v20; // ecx@27
  PgWinBut *v21; // ecx@29
  PgWinBut *v22; // ecx@31
  PgWinBut *v23; // ecx@33
  PopupMenuWin *v24; // ecx@35
  PopupMenuWin *v25; // ecx@38
  int v26; // edi@41
  signed int v27; // ebx@41
  FrameBoxWin *v28; // ecx@51
  double v29; // st7@52
  PgWinBut *v30; // ecx@54
  char *v31; // eax@59
  NiMaterialProperty *v32; // eax@59
  NiMaterialProperty *v33; // eax@63
  PgWinBut *v34; // ecx@67
  NiMaterialProperty *v35; // eax@74
  PgWinText *v36; // ecx@75
  int v37; // edi@77
  signed int v38; // ebx@77
  PgWinText *v39; // ecx@81
  int v40; // edi@84
  signed int v41; // ebx@84
  int v42; // ecx@89
  int v43; // edx@96
  int v44; // edi@100
  NiRefObjectVtbl *v45; // ebx@106
  int v46; // edi@106
  int v47; // eax@106
  int v48; // eax@106
  EditWin *v49; // ecx@112
  int v50; // edi@114
  signed int v51; // ebx@114
  char v52; // al@120
  void *(__thiscall *v53)(NiRefObject *, unsigned int); // edx@120
  int v54; // eax@121
  FrameBoxWin *v55; // ecx@125
  NiRefObjectVtbl *v56; // edi@125
  FrameBoxWin *v57; // ebx@125
  int v58; // eax@125
  int v59; // eax@125
  FrameBoxWin *v60; // ebx@126
  FrameBoxWin *v61; // edi@126
  int v62; // eax@126
  int v63; // eax@126
  int v64; // ST9C_4@126
  EditWin *v65; // ebx@127
  NiRefObjectVtbl *v66; // edi@127
  int v67; // ST9C_4@127
  EditWin *v68; // ebx@127
  NiRefObjectVtbl *v69; // edi@127
  int v70; // eax@127
  FrameBoxWin *v71; // edi@127
  NiRefObjectVtbl *v72; // ebx@127
  int v73; // eax@127
  int v74; // eax@127
  PgFrameWork *v75; // eax@127
  PgFrameWork *v76; // eax@130
  EditWin *v77; // eax@132
  signed int v78; // [sp+90h] [bp-10h]@10
  int v79; // [sp+94h] [bp-Ch]@1
  signed int v80; // [sp+94h] [bp-Ch]@11
  int v81; // [sp+98h] [bp-8h]@1
  ChatDisplayWin2 *v82; // [sp+9Ch] [bp-4h]@1
  int v83; // [sp+9Ch] [bp-4h]@116
  float dy; // [sp+A8h] [bp+8h]@53
  float dya; // [sp+A8h] [bp+8h]@59
  float dyb; // [sp+A8h] [bp+8h]@70
  int dyc; // [sp+A8h] [bp+8h]@106
  NiRefObjectVtbl *dyd; // [sp+A8h] [bp+8h]@126
  EditWin *dye; // [sp+A8h] [bp+8h]@127
  char dy_3; // [sp+ABh] [bp+Bh]@41
  char dy_3a; // [sp+ABh] [bp+Bh]@84

  v82 = this;
  v5 = fCurTime;
  v81 = v4;
  v6 = 0.1000000014901161;
  v7 = this;
  v79 = v3;
  v8 = 1;
  if ( this->m_pkScrollUpBtn->m_eButShow == 1 && v5 - this->m_fScUpTimeWhenPushed > 0.1000000014901161 )
  {
    do
    {
      v9 = v7->m_pkActiveChatBD;
      v7->m_fScUpTimeWhenPushed = v6 + v7->m_fScUpTimeWhenPushed;
      ChatBoardFlex::ViewLineUp(v9);
      v5 = fCurTime;
      v6 = 0.1000000014901161;
    }
    while ( fCurTime - v7->m_fScUpTimeWhenPushed > 0.1000000014901161 );
  }
  if ( v7->m_pkScrollDnBtn->m_eButShow == 1 )
  {
    v10 = v6 < v5 - v7->m_fScDnTimeWhenPushed;
    v11 = v6;
    if ( v10 )
    {
      do
      {
        v12 = v7->m_pkActiveChatBD;
        v7->m_fScDnTimeWhenPushed = v11 + v7->m_fScDnTimeWhenPushed;
        ChatBoardFlex::ViewLineDown(v12);
        v11 = 0.1000000014901161;
      }
      while ( fCurTime - v7->m_fScDnTimeWhenPushed > 0.1000000014901161 );
    }
  }
  v13 = v7->m_pkChatEditBox;
  if ( v13
    && (unsigned __int8)((int (__cdecl *)(int, int, ChatDisplayWin2 *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(
                          v79,
                          v81,
                          v82) )
  {
    if ( EditWin::GetImeStatus(v7->m_spEdit.m_pObject) == 2 )
    {
      v78 = 1;
    }
    else
    {
      v78 = 0;
      if ( EditWin::GetImeStatus(v7->m_spEdit.m_pObject) == 1 )
      {
        ((void (__stdcall *)(_DWORD, int))v7->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          0,
          v79);
        v80 = 1;
        goto LABEL_12;
      }
    }
    ((void (__stdcall *)(signed int, int))v7->m_pkChatEngMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
      v78,
      v79);
    v80 = 0;
LABEL_12:
    ((void (__cdecl *)(int))v7->m_pkChatKorMode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v79);
  }
  if ( (unsigned __int8)((int (__stdcall *)(int, int, int, int, int, ChatDisplayWin2 *))v7->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY,
                          v2,
                          v79,
                          v81,
                          v82)
    || (unsigned __int8)((int (__thiscall *)(ChatDisplayWin2 *, int, int))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          v7,
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v14 = v7->m_pkChatBlockListBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v15 = v7->m_pkSpamFilterBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v16 = v7->m_pkChatCommandBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v17 = v7->m_pkCheckBox) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v18 = v7->m_pkScrollUpBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v19 = v7->m_pkScrollDnBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v20 = v7->m_pkScrollMostDnBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v21 = v7->m_pkReportTabBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v22 = v7->m_pkWhisperListBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v23 = v7->m_pkFilterBtn) != 0
    && (unsigned __int8)((int (__stdcall *)(int, int))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v24 = v7->m_spChatFilterPopupMenu[v7->m_uiChatMode].m_pObject) != 0
    && (unsigned __int8)((int (*)(void))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    && (unsigned __int8)((int (__stdcall *)(int, int))v7->m_spChatFilterPopupMenu[v7->m_uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    || (v25 = v7->m_spChatModePopupMenu.m_pObject) != 0
    && (unsigned __int8)((int (*)(void))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || bIsMove )
  {
    dy_3 = 1;
  }
  else
  {
    dy_3 = 0;
    v26 = (int)v7->m_pkTabBut;
    v27 = 5;
    do
    {
      if ( *(_DWORD *)v26
        && (unsigned __int8)(*(int (__stdcall **)(int, int))(**(_DWORD **)v26 + 332))(PgWin::ms_iMsX.x, PgWin::ms_iMsY) )
        dy_3 = 1;
      v26 += 4;
      --v27;
    }
    while ( v27 );
    v8 = 1;
  }
  if ( (unsigned __int8)((int (*)(void))v7->m_pkSpamFilterPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || dy_3
    || (unsigned __int8)((int (*)(void))v7->m_spChatFilterPopupMenu[v7->m_uiChatMode].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || (unsigned __int8)((int (__thiscall *)(ChatDisplayWin2 *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(v7) )
  {
    if ( v7->m_kAlphaControl.fTimeLeftToAppear > 0.0 )
      v7->m_kAlphaControl.fTimeLeftToAppear = v7->m_kAlphaControl.fTimeLeftToAppear - Timer::ms_fDeltaTime * 10.0;
    if ( v7->m_kAlphaControl.fTimeLeftToAppear <= 0.0 )
    {
      ((void (__stdcall *)(signed int))v7->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
      v34 = v7->m_pkReportTabBtn;
      if ( v34 )
        ((void (__stdcall *)(signed int))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v7,
        v8);
      if ( v7->m_kAlphaControl.fAlphaValue < 1.0 )
      {
        dyb = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime + v7->m_kAlphaControl.fAlphaValue;
        v7->m_kAlphaControl.fAlphaValue = dyb;
        if ( dyb > 1.0 )
          v7->m_kAlphaControl.fAlphaValue = 1.0;
        if ( v7->m_kAlphaControl.fAlphaValue < 1.0 )
          JUMPOUT(*(int *)loc_5F55A0);
        v35 = v7->m_spMtrlProp.m_pObject;
        v35->m_uiRevID += v8;
        v35->m_fAlpha = 1.0;
      }
    }
  }
  else
  {
    v28 = v7->m_pkChattingBox;
    if ( !v28->m_bIsDuringSizeDrag )
    {
      v29 = 0.0;
      if ( v7->m_kAlphaControl.fAlphaValue <= 0.0 )
      {
        ((void (__stdcall *)(_DWORD))v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v7,
          0);
        v33 = v7->m_spMtrlProp.m_pObject;
        v33->m_fAlpha = 0.0;
        v33->m_uiRevID += v8;
      }
      else
      {
        dy = v7->m_kAlphaControl.fAlphaValue - (Timer::ms_fDeltaTime + Timer::ms_fDeltaTime);
        v7->m_kAlphaControl.fAlphaValue = dy;
        if ( dy <= 0.0 )
        {
          v7->m_kAlphaControl.fAlphaValue = 0.0;
          v7->m_kAlphaControl.fTimeLeftToAppear = 1.0;
          ((void (__stdcall *)(_DWORD))v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          v30 = v7->m_pkReportTabBtn;
          if ( v30 )
            ((void (__stdcall *)(_DWORD))v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
            (NiRefObject *)v7,
            0);
          v29 = 0.0;
        }
        if ( v29 < v7->m_kAlphaControl.fAlphaValue )
          JUMPOUT(*(int *)loc_5F5438);
        dya = v29;
        v31 = fs("%f\n");
        OutputDebugStringA(v31);
        v32 = v7->m_spMtrlProp.m_pObject;
        v32->m_uiRevID += v8;
        v32->m_fAlpha = dya;
      }
    }
  }
  v36 = v7->m_pkTabText;
  if ( v36 )
    ((void (__stdcall *)(_DWORD))v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v7->m_spMtrlProp.m_pObject->m_fAlpha);
  v37 = (int)v7->m_pkTabButText;
  v38 = 5;
  do
  {
    if ( *(_DWORD *)v37 )
      ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(**(_DWORD **)v37 + 276))(v7->m_spMtrlProp.m_pObject->m_fAlpha);
    v37 += 4;
    --v38;
  }
  while ( v38 );
  v39 = v7->m_pkReportText;
  if ( v39 )
    ((void (__stdcall *)(_DWORD))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v7->m_spMtrlProp.m_pObject->m_fAlpha);
  if ( !v7->m_pkCheckBox->m_bCheck )
  {
    dy_3a = 0;
    v40 = (int)v7->m_pkTabBut;
    v41 = 5;
    do
    {
      if ( *(_DWORD **)v40 == dword_B70444
        && (unsigned __int8)(*(int (__stdcall **)(int, int))(**(_DWORD **)v40 + 332))(PgWin::ms_iMsX.x, PgWin::ms_iMsY) )
        dy_3a = 1;
      v40 += 4;
      --v41;
    }
    while ( v41 );
    v42 = g_pkMouse;
    if ( v7->m_kAlphaControl.fAlphaValue >= 1.0
      && !v7->m_pkChattingBox->m_bIsDuringSizeDrag
      && !bIsMove
      && dy_3a
      && *(_BYTE *)(g_pkMouse + 129)
      && (!*(_BYTE *)(g_pkMouse + 131) || *(_BYTE *)(g_pkMouse + 129)) )
    {
      v43 = iYPos - *(_DWORD *)(g_pkMouse + 68);
      if ( (unsigned int)(iXPos - *(_DWORD *)(g_pkMouse + 36) + 3) > 6 || v43 > 3 || v43 < -3 )
        bIsMove = 1;
    }
    v44 = PgWin::ms_iMsX.x;
    if ( PgWin::ms_iMsY >= PgWin::ms_iScreenTopPos
      && PgWin::ms_iMsX.x >= PgWin::ms_iScreenLeftPos
      && PgWin::ms_iMsX.x <= PgWin::ms_iScreenRightPos
      && PgWin::ms_iMsY <= PgWin::ms_iScreenBottomPos )
    {
      if ( bIsMove )
      {
        v45 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v46 = PgWin::ms_iMsX.x - v7->m_iX;
        dyc = PgWin::ms_iMsY - v7->m_iY;
        v47 = ((int (__thiscall *)(ChatDisplayWin2 *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v7);
        v48 = (int)v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                     (NiRefObject *)v7,
                     dyc + v47);
        v45[77].__vecDelDtor((NiRefObject *)v7, v46 + v48);
        v44 = PgWin::ms_iMsX.x;
        v42 = g_pkMouse;
      }
    }
    else
    {
      bIsMove = 0;
    }
    if ( !*(_BYTE *)(v42 + 129) && *(_BYTE *)(v42 + 131) )
      bIsMove = 0;
    iXPos = *(_DWORD *)(v42 + 36);
    iYPos = *(_DWORD *)(v42 + 68);
    iZPos = *(_DWORD *)(v42 + 100);
    v7->m_iX = v44;
    v7->m_iY = PgWin::ms_iMsY;
  }
  if ( !(unsigned __int8)((int (*)(void))v7->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v49 = v7->m_spEdit.m_pObject;
    if ( v49 )
      ((void (__stdcall *)(signed int))v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  }
  v50 = (int)v7->m_pkTabBut;
  v51 = 5;
  do
  {
    v83 = !bIsMove;
    (*(void (__stdcall **)(int))(**(_DWORD **)v50 + 240))(v83);
    v50 += 4;
    --v51;
  }
  while ( v51 );
  if ( v7->m_uiChatMode == 1 )
  {
    v52 = ((int (*)(void))v7->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
    v53 = v7->m_pkChatNameEditBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    if ( v52 )
    {
      ((void (__stdcall *)(signed int))v53)(1);
      ((void (__stdcall *)(signed int))v7->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v7->m_pkWhisperListBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(int))v7->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v7->m_iChatBoxWhisperModePosX);
      v54 = v7->m_iChatBoxWhisperModePosX;
      goto LABEL_124;
    }
  }
  else
  {
    v53 = v7->m_pkChatNameEditBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  }
  ((void (__stdcall *)(_DWORD))v53)(0);
  ((void (__stdcall *)(_DWORD))v7->m_pkChatNameEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v7->m_pkWhisperListBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(int))v7->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v7->m_iChatBoxPosX);
  v54 = v7->m_iChatBoxPosX;
LABEL_124:
  ((void (__stdcall *)(int))v7->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v54 + 3);
  if ( v7->m_uiChatMode == 1 )
  {
    v55 = v7->m_pkChatEditBox;
    v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v57 = v7->m_pkChattingBox;
    v58 = ((int (*)(void))v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v59 = (int)v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                 (NiRefObject *)v57,
                 v58);
    v56[135].__vecDelDtor((NiRefObject *)v7->m_pkChatEditBox, v59 - v7->m_uiChattingBoxWidthMinusEditBoxWidth);
  }
  else
  {
    v60 = v7->m_pkChatEditBox;
    dyd = v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ((void (*)(void))v7->m_pkChattingBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    ((void (*)(void))v7->m_pkWhisperListBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v61 = v7->m_pkChatNameEditBack;
    v62 = ((int (__thiscall *)(FrameBoxWin *))dyd[37].__vecDelDtor)(v60);
    v63 = (int)v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor(
                 (NiRefObject *)v61,
                 v62);
    dyd[135].__vecDelDtor((NiRefObject *)v7->m_pkChatEditBox, v64 + v63);
  }
  v65 = v7->m_spEdit.m_pObject;
  v66 = v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v67 = ((int (*)(void))v7->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
      - 4;
  ((void (__thiscall *)(EditWin *))v66[38].__vecDelDtor)(v65);
  v68 = v7->m_spEdit.m_pObject;
  v69 = v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v70 = ((int (*)(void))v7->m_pkChatEditBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v69[39].__vecDelDtor((NiRefObject *)v68, v70 - 1);
  v71 = v7->m_pkChatEditBox;
  v72 = v7->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  dye = v7->m_spEdit.m_pObject;
  v73 = ((int (__thiscall *)(FrameBoxWin *))v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v7->m_pkChatEditBox);
  v74 = (int)v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
               (NiRefObject *)v71,
               v73 + 4);
  v72[77].__vecDelDtor((NiRefObject *)dye, v74 + 4);
  v75 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v75 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v75, v7->m_pkChattingBox, v7->m_pkActiveChatBD);
  if ( (unsigned __int8)((int (__thiscall *)(ChatDisplayWin2 *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(v7) )
  {
    v76 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v76 )
      GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v76, BIL_CHAT_3);
  }
  v77 = v7->m_spEdit.m_pObject;
  if ( v77 && v77->m_bIsLinkEdit )
  {
    if ( v7->m_listItemLinkStruct.baseclass_0.baseclass_0._Mysize )
      ChatDisplayWin2::ItemLinkKeyDownCheck(v7);
  }
}
// 5F4F90: could not find valid save-restore pair for edi
// 5F4F90: could not find valid save-restore pair for esi
// 5F5438: using guessed type int __thiscall(ChatDisplayWin2 *this, int dy);
// 5F55A0: using guessed type int __thiscall(ChatDisplayWin2 *this, int dy);
// A8E7CC: using guessed type int PgWin__ms_iScreenRightPos;
// A8E7D0: using guessed type int PgWin__ms_iScreenBottomPos;
// A97640: using guessed type float Timer__ms_fDeltaTime;
// A98170: using guessed type int g_pkMouse;
// B70328: using guessed type int PgWin__ms_iScreenLeftPos;
// B7032C: using guessed type int PgWin__ms_iScreenTopPos;

//----- (005F5AB0) --------------------------------------------------------
std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *__thiscall ChatDisplayWin2::GetLinkItemList(ChatDisplayWin2 *this, std::list<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *result)
{
  std::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>::list<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>(
    result,
    &this->m_listItemLinkStruct);
  return result;
}

//----- (005F5AE0) --------------------------------------------------------
float __thiscall ChatDisplayWin2::GetSpamBlockRate(ChatDisplayWin2 *this)
{
  float v1; // ST00_4@1
  double v2; // st7@1
  float result; // st7@2

  v1 = 100.0 - (double)(5 * this->m_pkSpamFilterSlide->m_nCurPos);
  v2 = v1;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (005F5B10) --------------------------------------------------------
void *__thiscall ChatDisplayWin2::_vector_deleting_destructor_(ChatDisplayWin2 *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ChatDisplayWin2::_ChatDisplayWin2(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005F5B40) --------------------------------------------------------
void __thiscall CLCS::CLCS(CLCS *this)
{
  this->f_CompDoubtPercentA = 0.0;
  this->f_CompDoubtPercentB = 0.0;
  this->i_DoubtCnt = 0;
  this->i_MaxStringLen = 0;
  this->m_pCompStrA = 0;
  this->m_pCompStrB = 0;
  this->m_CompStrALen = 0;
  this->m_CompStrBLen = 0;
  this->LCSCalData1 = 0;
  this->LCSCalData2 = 0;
}

//----- (005F5B80) --------------------------------------------------------
bool __thiscall CLCS::Init(CLCS *this, int nMaxStringLen)
{
  int v2; // ebx@1
  CLCS *v3; // esi@1
  void *v5; // eax@3
  void *v6; // edi@3
  void *v7; // eax@3
  void *v8; // eax@6
  void *v9; // eax@6
  void *v10; // ST10_4@7
  void *v11; // ST10_4@9
  void *v12; // ST0C_4@9
  int v13; // edi@11
  char **v14; // eax@12
  void *nMaxStringLena; // [sp+10h] [bp+8h]@6

  v2 = nMaxStringLen;
  v3 = this;
  if ( nMaxStringLen <= 0 )
    return 0;
  this->i_MaxStringLen = nMaxStringLen;
  v5 = malloc(2 * nMaxStringLen);
  v6 = v5;
  v3->m_pCompStrA = (unsigned __int16 *)v5;
  v7 = malloc(2 * nMaxStringLen);
  v3->m_pCompStrB = (unsigned __int16 *)v7;
  if ( !v6 )
    return 0;
  if ( !v7 )
  {
    free(v6);
    v3->m_pCompStrA = 0;
    return 0;
  }
  v8 = malloc(4 * nMaxStringLen);
  nMaxStringLena = v8;
  v3->LCSCalData1 = (int **)v8;
  v9 = malloc(4 * v2);
  v3->LCSCalData2 = (int **)v9;
  if ( !nMaxStringLena )
  {
    free(v6);
    v10 = v3->m_pCompStrB;
    v3->m_pCompStrA = 0;
    free(v10);
    v3->m_pCompStrB = 0;
    return 0;
  }
  if ( !v9 )
  {
    free(v6);
    v11 = v3->m_pCompStrB;
    v3->m_pCompStrA = 0;
    free(v11);
    v12 = v3->LCSCalData1;
    v3->m_pCompStrB = 0;
    free(v12);
    v3->LCSCalData1 = 0;
    return 0;
  }
  v13 = 0;
  if ( v2 > 0 )
  {
    while ( 1 )
    {
      v3->LCSCalData1[v13] = (int *)malloc(4 * v3->i_MaxStringLen);
      v3->LCSCalData2[v13] = (int *)malloc(4 * v3->i_MaxStringLen);
      v14 = (char **)&v3->LCSCalData1[v13];
      if ( !*v14 )
        break;
      if ( !v3->LCSCalData2[v13] )
        break;
      memset(*v14, 0, 4 * v3->i_MaxStringLen);
      memset((char *)v3->LCSCalData2[v13++], 0, 4 * v3->i_MaxStringLen);
      if ( v13 >= v3->i_MaxStringLen )
        return 1;
    }
    return 0;
  }
  return 1;
}

//----- (005F5CE0) --------------------------------------------------------
float __thiscall CLCS::GetCompDoubtPercentA(CLCS *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->f_CompDoubtPercentA;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (005F5CF0) --------------------------------------------------------
float __thiscall CLCS::GetCompDoubtPercentB(CLCS *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->f_CompDoubtPercentB;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (005F5D00) --------------------------------------------------------
void __thiscall CLCS::printLCS(CLCS *this, int i, int j, unsigned __int16 *pWordStr)
{
  int v4; // esi@1
  unsigned __int16 *v5; // edi@3
  int v6; // edx@4
  BYTE v7; // cl@5
  char *v8; // esi@5

  v4 = i;
  if ( i )
  {
    if ( j )
    {
      v5 = pWordStr;
      if ( pWordStr )
      {
        v6 = this->LCSCalData2[i][j];
        if ( v6 == 1 )
        {
          CLCS::printLCS(this, i - 1, j - 1, pWordStr);
          v7 = LOBYTE(v5[v4 - 1]);
          v8 = (char *)&v5[v4 - 1];
          if ( IsDBCSLeadByte(v7) == 1 )
          {
            strncpy((char *)&i, v8, 2u);
            BYTE2(i) = 0;
            printf("%s");
          }
          else
          {
            printf("%c");
          }
        }
        else
        {
          if ( v6 == 2 )
            CLCS::printLCS(this, i - 1, j, pWordStr);
          else
            CLCS::printLCS(this, i, j - 1, pWordStr);
        }
      }
    }
  }
}

//----- (005F5DC0) --------------------------------------------------------
bool __thiscall CLCS::CharToMultyByte(CLCS *this, unsigned __int16 *pWordStr, int *pWordStrLen, char *pCharStr)
{
  bool result; // al@2
  char *v5; // ebx@4
  unsigned int v6; // eax@6
  int v7; // ecx@6
  signed int v8; // esi@10
  int v9; // edi@10
  unsigned int nCharStrLen; // [sp+10h] [bp+10h]@6

  if ( pWordStr && pWordStrLen )
  {
    v5 = pCharStr;
    if ( pCharStr )
    {
      v6 = strlen(pCharStr);
      v7 = this->i_MaxStringLen;
      nCharStrLen = v6;
      if ( (signed int)v6 > v7 )
      {
        nCharStrLen = v7;
        v6 = v7;
      }
      if ( (signed int)v6 > 0 )
      {
        v8 = 0;
        v9 = 0;
        if ( (signed int)v6 > 0 )
        {
          do
          {
            if ( IsDBCSLeadByte(v5[v8]) == 1 )
              pWordStr[v9] = *(_WORD *)&v5[v8++];
            else
              pWordStr[v9] = v5[v8];
            ++v8;
            ++v9;
          }
          while ( v8 < (signed int)nCharStrLen );
        }
        *pWordStrLen = v9;
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005F5E60) --------------------------------------------------------
float __thiscall CLCS::GetCompDoubtPercentLower(CLCS *this)
{
  double v1; // st7@2
  float result; // st7@4

  if ( this->f_CompDoubtPercentB >= (double)this->f_CompDoubtPercentA )
    v1 = this->f_CompDoubtPercentA;
  else
    v1 = this->f_CompDoubtPercentB;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (005F5E90) --------------------------------------------------------
bool __thiscall CLCS::LCSExecute(CLCS *this, char *pCompStrA, char *pCompStrB)
{
  CLCS *v3; // esi@1
  char *v4; // edi@3
  bool result; // al@5
  signed int i; // eax@6
  int *v7; // ecx@7
  int j; // eax@8
  signed int k; // ecx@10
  signed int l; // eax@11
  int v11; // edx@12
  int v12; // ebx@14
  int v13; // eax@19
  signed int v14; // ecx@19
  signed int pCompStrAa; // [sp+14h] [bp+8h]@19
  signed int pCompStrBa; // [sp+18h] [bp+Ch]@19

  v3 = this;
  if ( pCompStrA && pCompStrB )
  {
    v4 = (char *)&this->m_CompStrALen;
    if ( CLCS::CharToMultyByte(this, this->m_pCompStrA, &this->m_CompStrALen, pCompStrA)
      && CLCS::CharToMultyByte(v3, v3->m_pCompStrB, &v3->m_CompStrBLen, pCompStrB) )
    {
      for ( i = 1; i <= *(_DWORD *)v4; *v7 = 0 )
        v7 = v3->LCSCalData1[i++];
      for ( j = 0; j <= v3->m_CompStrBLen; ++j )
        (*v3->LCSCalData1)[j] = 0;
      for ( k = 1; k <= v3->m_CompStrALen; ++k )
      {
        for ( l = 1; l <= v3->m_CompStrBLen; ++l )
        {
          v11 = (int)&v3->LCSCalData1[k];
          if ( v3->m_pCompStrA[k - 1] == v3->m_pCompStrB[l - 1] )
          {
            *(_DWORD *)(*(_DWORD *)v11 + 4 * l) = *(_DWORD *)(*(_DWORD *)(v11 - 4) + 4 * l - 4) + 1;
            v3->LCSCalData2[k][l] = 1;
          }
          else
          {
            v12 = *(_DWORD *)(*(_DWORD *)(v11 - 4) + 4 * l);
            if ( v12 < *(_DWORD *)(*(_DWORD *)v11 + 4 * l - 4) )
            {
              *(_DWORD *)(*(_DWORD *)v11 + 4 * l) = *(_DWORD *)(*(_DWORD *)v11 + 4 * l - 4);
              v3->LCSCalData2[k][l] = 3;
            }
            else
            {
              *(_DWORD *)(*(_DWORD *)v11 + 4 * l) = v12;
              v3->LCSCalData2[k][l] = 2;
            }
          }
        }
      }
      v13 = v3->m_CompStrALen;
      v14 = v3->m_CompStrBLen;
      pCompStrBa = v13;
      pCompStrAa = v3->LCSCalData1[v13][v14];
      v3->i_DoubtCnt = pCompStrAa;
      result = 1;
      v3->f_CompDoubtPercentA = (double)pCompStrAa / (double)pCompStrBa * 100.0;
      v3->f_CompDoubtPercentB = 100.0 * (double)v3->i_DoubtCnt / (double)v14;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005F6010) --------------------------------------------------------
void __thiscall CLCS::PrintSubString(CLCS *this)
{
  CLCS::printLCS(this, this->m_CompStrALen, this->m_CompStrBLen, this->m_pCompStrA);
}

//----- (005F6030) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnSortByTitle(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  bool v2; // [sp-8h] [bp-Ch]@2
  bool v3; // [sp-4h] [bp-8h]@2

  v1 = this;
  this->m_nSortColumn = 0;
  if ( bSortByTltle )
  {
    v3 = 0;
    bSortByTltle = 0;
    v2 = 1;
  }
  else
  {
    v3 = 0;
    bSortByTltle = 1;
    v2 = 0;
  }
  SlideListWin::Sort(this->m_pListWinTime, 0, v2, v3);
  SlideListWin::UpdateViewList(v1->m_pListWinTime);
}

//----- (005F6070) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnSortByUsercnt(KingdomQuestWin *this)
{
  bool v1; // al@1
  KingdomQuestWin *v2; // esi@1
  SlideListWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pListWinTime;
  bSortByUserCnt = bSortByUserCnt == 0;
  v1 = bSortByUserCnt;
  v2->m_nSortColumn = 1;
  if ( v1 )
  {
    SlideListWin::Sort(v3, 1, 0, 1);
    SlideListWin::UpdateViewList(v2->m_pListWinTime);
  }
  else
  {
    SlideListWin::Sort(v3, 1, 1, 1);
    SlideListWin::UpdateViewList(v2->m_pListWinTime);
  }
}

//----- (005F60D0) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnSortByStarttime(KingdomQuestWin *this)
{
  bool v1; // zf@1
  KingdomQuestWin *v2; // esi@1
  bool v3; // [sp-8h] [bp-Ch]@2
  bool v4; // [sp-4h] [bp-8h]@2

  v1 = bSortByStarttime == 0;
  v2 = this;
  this->m_nSortColumn = 2;
  if ( v1 )
  {
    v4 = 0;
    bSortByStarttime = 1;
    v3 = 0;
  }
  else
  {
    v4 = 0;
    bSortByStarttime = 0;
    v3 = 1;
  }
  SlideListWin::Sort(this->m_pListWinTime, 2, v3, v4);
  SlideListWin::UpdateViewList(v2->m_pListWinTime);
}

//----- (005F6120) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnSortBYState(KingdomQuestWin *this)
{
  bool v1; // zf@1
  KingdomQuestWin *v2; // esi@1
  bool v3; // [sp-8h] [bp-Ch]@2
  bool v4; // [sp-4h] [bp-8h]@2

  v1 = bSortByState == 0;
  v2 = this;
  this->m_nSortColumn = 3;
  if ( v1 )
  {
    v4 = 0;
    bSortByState = 1;
    v3 = 0;
  }
  else
  {
    v4 = 0;
    bSortByState = 0;
    v3 = 1;
  }
  SlideListWin::Sort(this->m_pListWinTime, 3, v3, v4);
  SlideListWin::UpdateViewList(v2->m_pListWinTime);
}

//----- (005F6170) --------------------------------------------------------
void __thiscall KingdomQuestWin::JoinResult(KingdomQuestWin *this, unsigned int Handle, bool bResult)
{
  if ( !bResult )
  {
    this->m_JoinHandle = -1;
    this->m_bSendJoinMsg = 0;
    this->m_nJoinIndex = 0;
  }
}

//----- (005F61A0) --------------------------------------------------------
void __thiscall KingdomQuestWin::RemoveAllKQuestInfo(KingdomQuestWin *this)
{
  CKQ::Clear(&this->m_kKindomQuestData);
}

//----- (005F61B0) --------------------------------------------------------
void __thiscall KingdomQuestWin::DeleteKQuestInfo(KingdomQuestWin *this, unsigned int Handle)
{
  CKQ::Del(&this->m_kKindomQuestData, Handle);
}

//----- (005F61C0) --------------------------------------------------------
PROTO_KQ_INFO_CLIENT *__thiscall KingdomQuestWin::GetQuestInfo(KingdomQuestWin *this, unsigned int Handle)
{
  return (PROTO_KQ_INFO_CLIENT *)CKQ::Get(&this->m_kKindomQuestData, Handle);
}

//----- (005F61D0) --------------------------------------------------------
tm *__usercall localtime_0<eax>(const int *_Time<eax>)
{
  return _localtime32(_Time);
}

//----- (005F61E0) --------------------------------------------------------
int __usercall time<eax>(int *_Time<eax>)
{
  return _time32(_Time);
}

//----- (005F61F0) --------------------------------------------------------
void __thiscall KingdomQuestWin::SetView(KingdomQuestWin *this, bool bView)
{
  KingdomQuestWin *v2; // esi@1

  v2 = this;
  if ( this->m_pJoinOk )
  {
    if ( this->m_pJoinCancel )
    {
      ((void (__stdcall *)(_DWORD))this->m_pJoinOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bView);
      ((void (__stdcall *)(_DWORD))v2->m_pJoinCancel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bView);
      ((void (__stdcall *)(_DWORD))v2->m_pJoinOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bView);
      ((void (__stdcall *)(_DWORD))v2->m_pJoinCancel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bView);
      if ( v2->m_pTexJoinOk )
      {
        if ( v2->m_pTexJoinCancel )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pTexJoinOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bView);
          ((void (__stdcall *)(_DWORD))v2->m_pTexJoinCancel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bView);
        }
      }
    }
  }
}

//----- (005F6290) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnHelpLink(KingdomQuestWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NPCKDQuest");
}

//----- (005F62C0) --------------------------------------------------------
bool __thiscall KingdomQuestWin::IsStarted(KingdomQuestWin *this)
{
  int v1; // edi@1
  int v2; // esi@1
  char *v3; // eax@2
  char v4; // dl@4
  bool v5; // dl@6
  bool result; // al@11

  v1 = this->m_kKindomQuestData.m_NumOfSchedule;
  v2 = 0;
  if ( v1 <= 0 )
  {
LABEL_11:
    result = 0;
  }
  else
  {
    v3 = (char *)this->m_kKindomQuestData.m_Schedule;
    while ( 1 )
    {
      if ( v3 )
      {
        v5 = (v4 = v3[4], v4 == 3) || v4 == 4;
        if ( *(_DWORD *)v3 == this->m_JoinHandle && v5 )
          break;
      }
      ++v2;
      v3 += 377;
      if ( v2 >= v1 )
        goto LABEL_11;
    }
    result = 1;
  }
  return result;
}

//----- (005F6320) --------------------------------------------------------
unsigned int __thiscall KingdomQuestWin::GetJoinQuestHandle(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  Name5 *v2; // eax@2
  PROTO_AVATARINFORMATION *v3; // eax@2
  unsigned int result; // eax@3

  v1 = this;
  if ( this->m_JoinHandle == -1 && (v2 = User::GetMainCharID(&g_kUser), (v3 = User::GetAvatarInfo(&g_kUser, v2)) != 0) )
    result = v3->nKQHandle;
  else
    result = v1->m_JoinHandle;
  return result;
}

//----- (005F6360) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::KingdomQuestPlayerList(KingdomQuestPlayerList *this)
{
  KingdomQuestPlayerList *v1; // esi@1

  v1 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->m_fOldTime = 0.0;
  v1->m_pkListWin = 0;
  v1->m_pkSlideBar = 0;
  v1->m_pkFrameWork = 0;
  v1->m_acName[0] = 0;
  v1->m_pkJoinPlyaerListText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestPlayerList::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestPlayerList::_vftable_;
  *(_DWORD *)&v1->m_bSortReverse[0] = 16777216;
}
// 9BCC8C: using guessed type int (__stdcall *KingdomQuestPlayerList___vftable_)(int uiFlags);
// 9BCCAC: using guessed type int (__thiscall *KingdomQuestPlayerList___vftable_)(void *p, char);

//----- (005F63B0) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::_KingdomQuestPlayerList(KingdomQuestPlayerList *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestPlayerList::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestPlayerList::_vftable_;
  this->m_kQuestHandle = -1;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
}
// 9BCC8C: using guessed type int (__stdcall *KingdomQuestPlayerList___vftable_)(int uiFlags);
// 9BCCAC: using guessed type int (__thiscall *KingdomQuestPlayerList___vftable_)(void *p, char);

//----- (005F63D0) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::OnClose(KingdomQuestPlayerList *this)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (005F63E0) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::OnSort(KingdomQuestPlayerList *this, KingdomQuestPlayerList::eSortType eType)
{
  KingdomQuestPlayerList *v2; // esi@1
  int v3; // [sp-Ch] [bp-14h]@2
  bool v4; // [sp-8h] [bp-10h]@2
  bool v5; // [sp-4h] [bp-Ch]@2

  v2 = this;
  if ( eType )
  {
    v5 = 0;
    v4 = this->m_bSortReverse[eType];
    v3 = eType;
  }
  else
  {
    v5 = 1;
    v4 = this->m_bSortReverse[0];
    v3 = 0;
  }
  SlideListWin::Sort(this->m_pkListWin, v3, v4, v5);
  SlideListWin::UpdateViewList(v2->m_pkListWin);
  v2->m_bSortReverse[eType] = v2->m_bSortReverse[eType] == 0;
}

//----- (005F6440) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::ReSetList(KingdomQuestPlayerList *this)
{
  SlideListWin::RemoveAllList(this->m_pkListWin);
}

//----- (005F6450) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::OnRClick(KingdomQuestPlayerList *this)
{
  KingdomQuestPlayerList *v1; // esi@1
  int v2; // eax@1
  const char *v3; // eax@1
  unsigned int v4; // esi@2
  int v5; // edx@2
  const char v6; // cl@3
  PgFrameWork *v7; // eax@4

  v1 = this;
  v2 = SlideListWin::GetCurSelIndex(this->m_pkListWin);
  v3 = SlideListWin::GetText(v1->m_pkListWin, v2, 2u);
  if ( strcmp(v3, (const char *)&unk_9BC0B7) )
  {
    v4 = (unsigned int)v1->m_acName;
    v5 = v4 - (_DWORD)v3;
    do
    {
      v6 = *v3;
      v3[v5] = *v3;
      ++v3;
    }
    while ( v6 );
    v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v7 )
      PgFrameWork::AddMsg(v7, 0x80u, v4, 0);
  }
}

//----- (005F64E0) --------------------------------------------------------
bool __thiscall KingdomQuestPlayerList::IsPlayerName(KingdomQuestPlayerList *this, const char *pcName)
{
  KingdomQuestPlayerList *v2; // edi@1
  bool result; // al@2
  unsigned int v4; // esi@3
  const char *v5; // eax@4

  v2 = this;
  if ( pcName )
  {
    v4 = 0;
    if ( (signed int)SlideListWin::GetItemSize(this->m_pkListWin) <= 0 )
    {
LABEL_7:
      result = 0;
    }
    else
    {
      while ( 1 )
      {
        v5 = SlideListWin::GetText(v2->m_pkListWin, v4, 2u);
        if ( v5 )
        {
          if ( !strcmp(pcName, v5) )
            break;
        }
        ++v4;
        if ( (signed int)v4 >= (signed int)SlideListWin::GetItemSize(v2->m_pkListWin) )
          goto LABEL_7;
      }
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005F6580) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::KingdomQuestTeamList(KingdomQuestTeamList *this)
{
  KingdomQuestTeamList *v1; // esi@1

  v1 = this;
  PgWinSpr::PgWinSpr(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestTeamList::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestTeamList::_vftable_;
  *(_DWORD *)&v1->m_bSortReverse[0] = 0;
  *(_WORD *)&v1->m_bSortReverse[4] = 0;
  v1->m_fOldTime = 0.0;
  v1->m_pkFrameWork = 0;
  v1->m_acName[0] = 0;
  v1->m_pkJoinTeamListText = 0;
  v1->m_bTimer = 1;
}
// 9BCEB8: using guessed type int (__stdcall *KingdomQuestTeamList___vftable_)(int uiFlags);
// 9BCED4: using guessed type int (__thiscall *KingdomQuestTeamList___vftable_)(void *p, char);

//----- (005F65D0) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::_KingdomQuestTeamList(KingdomQuestTeamList *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestTeamList::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestTeamList::_vftable_;
  this->m_kQuestHandle = -1;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
}
// 9BCEB8: using guessed type int (__stdcall *KingdomQuestTeamList___vftable_)(int uiFlags);
// 9BCED4: using guessed type int (__thiscall *KingdomQuestTeamList___vftable_)(void *p, char);

//----- (005F65F0) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnClose(KingdomQuestTeamList *this)
{
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (005F6600) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnSort(KingdomQuestTeamList *this, KingdomQuestTeamList::eSortType eType)
{
  KingdomQuestTeamList *v2; // edi@1
  SlideListWin *v3; // ebx@10
  bool bNumber; // [sp+Ch] [bp-4h]@1

  v2 = this;
  bNumber = 0;
  if ( !eType || eType == 3 )
    bNumber = 1;
  if ( eType && eType != 1 && eType != 2 )
  {
    if ( eType != 3 && eType != 4 && eType != 5 )
      v3 = (SlideListWin *)eType;
    else
      v3 = this->m_pkListWin[1];
  }
  else
  {
    v3 = this->m_pkListWin[0];
  }
  SlideListWin::Sort(v3, eType, this->m_bSortReverse[eType], bNumber);
  SlideListWin::UpdateViewList(v3);
  v2->m_bSortReverse[eType] = v2->m_bSortReverse[eType] == 0;
}

//----- (005F6690) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnSelect(KingdomQuestTeamList *this, unsigned int uiTeamType)
{
  PgFrameWork *v2; // eax@1

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    GameFrameWork::NcKqTeamSelectReq((GameFrameWork *)v2, uiTeamType);
}

//----- (005F66C0) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::SetSelectedTeam(KingdomQuestTeamList *this, char kKQTeamInfo)
{
  KingdomQuestTeamList *v2; // esi@1
  signed int v3; // [sp-4h] [bp-8h]@2
  int v4; // [sp+0h] [bp-4h]@0
  signed int v5; // [sp+0h] [bp-4h]@3

  v2 = this;
  if ( kKQTeamInfo )
  {
    v3 = 0;
    if ( kKQTeamInfo == 1 )
    {
      ((void (__stdcall *)(_DWORD, int))this->m_pkSelectedRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
        0,
        v4);
      v5 = 1;
      goto LABEL_4;
    }
  }
  else
  {
    v3 = 1;
  }
  ((void (__stdcall *)(signed int, int))this->m_pkSelectedRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
    v3,
    v4);
  v5 = 0;
LABEL_4:
  ((void (__cdecl *)(signed int))v2->m_pkSelectedBlue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v5);
}

//----- (005F6710) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::ReSetList(KingdomQuestTeamList *this)
{
  KingdomQuestTeamList *v1; // ebx@1
  SlideListWin **v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  v2 = this->m_pkListWin;
  v3 = 2;
  do
  {
    SlideListWin::RemoveAllList(*v2);
    ++v2;
    --v3;
  }
  while ( v3 );
  ((void (__stdcall *)(_DWORD))v1->m_pkSelectedRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkSelectedBlue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (005F6760) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnRClick(KingdomQuestTeamList *this, SlideListWin *pkSlideListWin)
{
  KingdomQuestTeamList *v2; // edi@1
  int v3; // eax@2
  const char *v4; // eax@2
  int v5; // edx@3
  const char v6; // cl@4
  PgFrameWork *v7; // eax@5

  v2 = this;
  if ( pkSlideListWin )
  {
    v3 = SlideListWin::GetCurSelIndex(pkSlideListWin);
    v4 = SlideListWin::GetText(pkSlideListWin, v3, 2u);
    if ( strcmp(v4, (const char *)&unk_9BC0C1) )
    {
      v5 = v2->m_acName - v4;
      do
      {
        v6 = *v4;
        v4[v5] = *v4;
        ++v4;
      }
      while ( v6 );
      v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v7 )
        PgFrameWork::AddMsg(v7, 0x82u, (unsigned int)v2->m_acName, 0);
    }
  }
}

//----- (005F6800) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnRClickRed(KingdomQuestTeamList *this)
{
  if ( this->m_pkListWin[0] )
    KingdomQuestTeamList::OnRClick(this, this->m_pkListWin[0]);
}

//----- (005F6820) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnRClickBlue(KingdomQuestTeamList *this)
{
  if ( this->m_pkListWin[1] )
    KingdomQuestTeamList::OnRClick(this, this->m_pkListWin[1]);
}

//----- (005F6840) --------------------------------------------------------
bool __thiscall KingdomQuestTeamList::IsPlayerName(KingdomQuestTeamList *this, const char *pcName)
{
  bool result; // al@2
  unsigned int v3; // ebx@3
  SlideListWin **v4; // esi@3
  unsigned int v5; // edi@4
  const char *v6; // eax@5

  if ( pcName )
  {
    v3 = 0;
    v4 = this->m_pkListWin;
    while ( 1 )
    {
      v5 = 0;
      if ( SlideListWin::GetItemSize(*v4) )
        break;
LABEL_8:
      ++v3;
      ++v4;
      if ( v3 >= 2 )
        return 0;
    }
    while ( 1 )
    {
      v6 = SlideListWin::GetText(*v4, v5, 2u);
      if ( v6 )
      {
        if ( !strcmp(pcName, v6) )
          break;
      }
      ++v5;
      if ( v5 >= SlideListWin::GetItemSize(*v4) )
        goto LABEL_8;
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005F68E0) --------------------------------------------------------
void __thiscall KingdomQuestWin::_KingdomQuestWin(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestWin::_vftable_;
  CKQ::_CKQ(&this->m_kKindomQuestData);
  _eh_vector_destructor_iterator_(
    v1->m_kKQJoiner.kJoiner,
    0x14u,
    100,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9BD0E0: using guessed type int (__stdcall *KingdomQuestWin___vftable_)(int uiFlags);
// 9BD0FC: using guessed type int (__thiscall *KingdomQuestWin___vftable_)(void *p, char);

//----- (005F6980) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnSlideBarContent(KingdomQuestWin *this)
{
  this->m_pListWinContent->m_nViewStartPos = this->m_pSlideBarContentEx->m_nCurPos;
  SlideListWin::UpdateViewList(this->m_pListWinContent);
}

//----- (005F69B0) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnSlideBarTime(KingdomQuestWin *this)
{
  this->m_pListWinTime->m_nViewStartPos = this->m_pSlideBarTimeEx->m_nCurPos;
  SlideListWin::UpdateViewList(this->m_pListWinTime);
}

//----- (005F69E0) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnWinClose(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  PgWinText *v2; // eax@1
  NiRefObjectVtbl *v3; // edi@1
  D3DXCOLOR *v4; // eax@1
  NiRefObjectVtbl *v5; // edi@1
  D3DXCOLOR *v6; // eax@1
  D3DXCOLOR result; // [sp+8h] [bp-10h]@1

  v1 = this;
  GameFrameWork::CloseKDQuestWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
  v2 = v1->m_pTexMyList;
  *(_WORD *)&v1->m_bMyList = 1;
  v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = Color::GetDxColor(&result, -1, -1, 0, -1);
  v3[117].__vecDelDtor((NiRefObject *)v1->m_pTexMyList, (unsigned int)v4);
  v5 = v1->m_pTexAllList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = Color::GetDxColor(&result, -1, -1, -1, -1);
  v5[117].__vecDelDtor((NiRefObject *)v1->m_pTexAllList, (unsigned int)v6);
}

//----- (005F6A70) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnOK(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  int v2; // eax@3
  SlideListWin *v3; // ecx@5
  int v4; // eax@6
  PgWinBut *v5; // ecx@6
  int dwData; // [sp+8h] [bp-4h]@3

  v1 = this;
  if ( !this->m_bRequestJoin )
  {
    if ( SlideListWin::GetCurSelIndex(this->m_pListWinTime) >= 0 )
    {
      v2 = SlideListWin::GetCurSelIndex(v1->m_pListWinTime);
      SlideListWin::GetData(v1->m_pListWinTime, v2, (unsigned int *)&dwData);
      if ( dwData < v1->m_kKindomQuestData.m_NumOfSchedule )
      {
        if ( v1->m_kKindomQuestData.m_Schedule[dwData].baseclass_0.Status == 2 )
        {
          v1->m_JoinHandle = v1->m_kKindomQuestData.m_Schedule[dwData].baseclass_0.Handle;
          v3 = v1->m_pListWinTime;
          v1->m_bSendJoinMsg = 1;
          v1->m_nJoinIndex = SlideListWin::GetCurSelIndex(v3);
        }
        GameFrameWork::NcKqJoinReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v1->m_JoinHandle);
        v4 = SlideListWin::GetCurSelIndex(v1->m_pListWinTime);
        SlideListWin::SetFontColor(v1->m_pListWinTime, v4, 255, 255, 0);
        CNSTimer_Interval::ReSet(&v1->m_kKQDelay, Timer::ms_fCurTime);
        v5 = v1->m_pJoinOk;
        v1->m_kKQDelay.m_fCheckTime = 5.0;
        v1->m_bRequestJoin = 1;
        ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005F6B70) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnCancel(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  SlideListWin *v2; // ecx@3

  v1 = this;
  if ( this->m_bSendJoinMsg && this->m_JoinHandle != -1 )
  {
    GameFrameWork::NcKqJoinCancelReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork, this->m_JoinHandle);
    v2 = v1->m_pListWinTime;
    v1->m_JoinHandle = -1;
    v1->m_bSendJoinMsg = 0;
    v1->m_nJoinIndex = 0;
    SlideListWin::SetFontColor(v2, 0, 0, 0, 0);
  }
  v1->m_bSendJoinMsg = 0;
}

//----- (005F6BD0) --------------------------------------------------------
void __thiscall KingdomQuestWin::SetServerTime(KingdomQuestWin *this, int *pkKQ_Time)
{
  KingdomQuestWin *v2; // esi@1
  int v3; // ecx@1
  int lTime; // [sp+4h] [bp-4h]@1

  v2 = this;
  _time32(&lTime);
  v3 = lTime - *pkKQ_Time;
  v2->m_bGetServerTime = 1;
  v2->m_tTimeGap = v3;
}

//----- (005F6C00) --------------------------------------------------------
void __thiscall KingdomQuestWin::CheckButtonEnableSetting(KingdomQuestWin *this)
{
  if ( byte_B30C4C == 1 || byte_B30C4C == 2 || g_pkMainChar->m_byMode == 5 )
    KingdomQuestWin::SetView(this, 0);
  else
    KingdomQuestWin::SetView(this, 1);
}
// B30C4C: using guessed type char byte_B30C4C;

//----- (005F6C30) --------------------------------------------------------
void __thiscall KingdomQuestWin::SetTimer(KingdomQuestWin *this, bool bTimer)
{
  this->m_bTimer = bTimer;
  if ( !bTimer )
    this->m_fOldTime = Timer::ms_fCurTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005F6C50) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::OnSlide(KingdomQuestPlayerList *this)
{
  SlideBar *v1; // eax@1
  int v2; // edx@1

  v1 = this->m_pkSlideBar;
  v2 = 0;
  if ( v1 )
    v2 = v1->m_nCurPos;
  if ( this->m_pkListWin )
  {
    this->m_pkListWin->m_nViewStartPos = v2;
    SlideListWin::UpdateViewList(this->m_pkListWin);
  }
}

//----- (005F6C90) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::OnReflash(KingdomQuestPlayerList *this)
{
  KingdomQuestPlayerList *v1; // esi@1
  PgFrameWork *v2; // eax@4

  v1 = this;
  if ( this->m_kQuestHandle == -1 )
  {
    SlideListWin::RemoveAllList(this->m_pkListWin);
  }
  else
  {
    if ( this->m_bTimer )
    {
      v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v2 )
        GameFrameWork::NcKqJoinListReq((GameFrameWork *)v2, v1->m_kQuestHandle);
    }
  }
}

//----- (005F6CE0) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::SetTimer(KingdomQuestPlayerList *this, bool bTimer)
{
  this->m_bTimer = bTimer;
  if ( !bTimer )
    this->m_fOldTime = Timer::ms_fCurTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005F6D00) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnSlide(KingdomQuestTeamList *this, SlideBar *pkSlideBar, SlideListWin *pkSlideListWin)
{
  if ( pkSlideBar )
  {
    if ( pkSlideListWin )
    {
      pkSlideListWin->m_nViewStartPos = pkSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(pkSlideListWin);
    }
  }
}

//----- (005F6D30) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnSlideBlue(KingdomQuestTeamList *this)
{
  KingdomQuestTeamList *v1; // eax@1
  SlideListWin *v2; // ecx@1
  SlideBar *v3; // eax@1

  v1 = this;
  v2 = this->m_pkListWin[1];
  v3 = v1->m_pkSlideBarBlue;
  if ( v3 )
  {
    if ( v2 )
    {
      v2->m_nViewStartPos = v3->m_nCurPos;
      SlideListWin::UpdateViewList(v2);
    }
  }
}

//----- (005F6D60) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnSlideRed(KingdomQuestTeamList *this)
{
  KingdomQuestTeamList *v1; // eax@1
  SlideListWin *v2; // ecx@1
  SlideBar *v3; // eax@1

  v1 = this;
  v2 = this->m_pkListWin[0];
  v3 = v1->m_pkSlideBarRed;
  if ( v3 )
  {
    if ( v2 )
    {
      v2->m_nViewStartPos = v3->m_nCurPos;
      SlideListWin::UpdateViewList(v2);
    }
  }
}

//----- (005F6D90) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnReflash(KingdomQuestTeamList *this)
{
  KingdomQuestTeamList *v1; // esi@1
  PgFrameWork *v2; // eax@4

  v1 = this;
  if ( this->m_kQuestHandle == -1 )
  {
    KingdomQuestTeamList::ReSetList(this);
  }
  else
  {
    if ( this->m_bTimer )
    {
      v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v2 )
        GameFrameWork::NcKqJoinListReq((GameFrameWork *)v2, v1->m_kQuestHandle);
    }
  }
}

//----- (005F6DD0) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::SetTimer(KingdomQuestTeamList *this, bool bTimer)
{
  this->m_bTimer = bTimer;
  if ( !bTimer )
    this->m_fOldTime = Timer::ms_fCurTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005F6DF0) --------------------------------------------------------
void __thiscall KingdomQuestWin::KingdomQuestWin(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkContents = 0;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  _eh_vector_constructor_iterator_(
    v1->m_kKQJoiner.kJoiner,
    0x14u,
    100,
    (void (__thiscall *)(void *))Name5::Name5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  CKQ::CKQ(&v1->m_kKindomQuestData);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kKQDelay);
  v1->m_fOldTime = 0.0;
  v1->m_JoinHandle = -1;
  v1->m_SelectedKQHandle = -1;
  v1->m_kKQJoiner.Handle = -1;
  v1->m_bTimer = 1;
  v1->m_nSortColumn = 3;
  v1->m_nJoinIndex = 0;
  v1->m_bSendJoinMsg = 0;
  v1->m_kKQJoiner.nJoinCnt = 0;
  v1->m_pJoinOk = 0;
  v1->m_pTexJoinOk = 0;
  v1->m_pMyList = 0;
  v1->m_pAllList = 0;
  v1->m_pkKQPresentTimeWin = 0;
  v1->m_tTimeGap = 0;
  v1->m_pTexMyList = 0;
  v1->m_pTexAllList = 0;
  *(_DWORD *)&v1->m_bMyList = 16777217;
  v1->m_bRequestJoin = 0;
  v1->m_pkKingdomQuestPlayerList = 0;
  v1->m_pkKingdomQuestTeamList = 0;
  v1->m_pkPlayerListBtn = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9BD0E0: using guessed type int (__stdcall *KingdomQuestWin___vftable_)(int uiFlags);
// 9BD0FC: using guessed type int (__thiscall *KingdomQuestWin___vftable_)(void *p, char);

//----- (005F6F60) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateKQTime(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  char *v2; // eax@4
  const int *v3; // [sp-4h] [bp-34h]@2
  int lCalcedServerTime; // [sp+4h] [bp-2Ch]@2
  int lTime; // [sp+8h] [bp-28h]@1
  char acDateTime[32]; // [sp+Ch] [bp-24h]@4
  unsigned int v7; // [sp+2Ch] [bp-4h]@1
  int v8; // [sp+30h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  _time32(&lTime);
  if ( v1->m_bGetServerTime == 1 )
  {
    lCalcedServerTime = lTime - v1->m_tTimeGap;
    v3 = &lCalcedServerTime;
  }
  else
  {
    v3 = &lTime;
  }
  _localtime32(v3);
  v2 = TextData::Get(0x34489F8Bu);
  sprintf(acDateTime, v2);
  ((void (__stdcall *)(_DWORD))v1->m_pkKQPresentTimeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDateTime);
}
// A85C00: using guessed type int __security_cookie;

//----- (005F7000) --------------------------------------------------------
const char *__thiscall KingdomQuestWin::GetKQState(KingdomQuestWin *this, int nState)
{
  const char *result; // eax@2

  switch ( nState )
  {
    case 0:
      result = TextData::Get(0x9FB2A8D5u);
      break;
    case 1:
      result = TextData::Get(0x9FB2A8D6u);
      break;
    case 2:
      result = TextData::Get(0x9FB2A8D7u);
      break;
    case 3:
      result = TextData::Get(0x9FB2A8D8u);
      break;
    case 4:
      result = TextData::Get(0x9FB2A8D9u);
      break;
    case 5:
      result = TextData::Get(0x9FB2A8DAu);
      break;
    case 6:
      result = TextData::Get(0x9FB2A8DBu);
      break;
    case 7:
      result = TextData::Get(0x9FB2A8DCu);
      break;
    case 8:
      result = TextData::Get(0x9FB2A8DDu);
      break;
    case 9:
      result = TextData::Get(0x9FB2A8DEu);
      break;
    case 10:
      result = TextData::Get(0x9FB2D8D6u);
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (005F7110) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::OnCommand(KingdomQuestPlayerList *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
      break;
    case 1u:
      KingdomQuestPlayerList::OnSlide(this);
      break;
    case 2u:
      KingdomQuestPlayerList::OnReflash(this);
      break;
    case 3u:
      KingdomQuestPlayerList::OnSort(this, (KingdomQuestPlayerList::eSortType)lParam);
      break;
    case 4u:
      KingdomQuestPlayerList::OnRClick(this);
      break;
    default:
      return;
  }
}

//----- (005F7170) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::UpdateList(KingdomQuestPlayerList *this)
{
  KingdomQuestPlayerList *v1; // esi@1
  PgFrameWork *v2; // eax@1
  NiRefObjectVtbl *v3; // edi@3
  char *v4; // eax@5
  unsigned int v5; // [sp-8h] [bp-Ch]@3

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v2[140].m_BackFrameID == (void *)1 )
    {
      v3 = v1->m_pkJoinPlyaerListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = -254923213;
    }
    else
    {
      v3 = v1->m_pkJoinPlyaerListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = 696021910;
    }
    v4 = TextData2::Get(v5);
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkJoinPlyaerListText, (unsigned int)v4);
    SlideListWin::UpdateViewList(v1->m_pkListWin);
  }
}

//----- (005F71E0) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::OnCommand(KingdomQuestTeamList *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4
  PgFrameWork *v4; // eax@9

  switch ( wParam )
  {
    case 0u:
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[90].__vecDelDtor)();
      break;
    case 1u:
      KingdomQuestTeamList::OnSlideRed(this);
      break;
    case 2u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::NcKqTeamSelectReq((GameFrameWork *)v3, 0);
      break;
    case 3u:
      if ( this->m_pkListWin[0] )
        KingdomQuestTeamList::OnRClick(this, this->m_pkListWin[0]);
      break;
    case 4u:
      KingdomQuestTeamList::OnSlideBlue(this);
      break;
    case 5u:
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::NcKqTeamSelectReq((GameFrameWork *)v4, 1);
      break;
    case 6u:
      if ( this->m_pkListWin[1] )
        KingdomQuestTeamList::OnRClick(this, this->m_pkListWin[1]);
      break;
    case 7u:
      KingdomQuestTeamList::OnReflash(this);
      break;
    case 8u:
      KingdomQuestTeamList::OnSort(this, (KingdomQuestTeamList::eSortType)lParam);
      break;
    default:
      return;
  }
}

//----- (005F72C0) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::UpdateList(KingdomQuestTeamList *this)
{
  KingdomQuestTeamList *v1; // esi@1
  PgFrameWork *v2; // eax@1
  NiRefObjectVtbl *v3; // edi@3
  char *v4; // eax@5
  SlideListWin **v5; // esi@5
  signed int v6; // edi@5
  unsigned int v7; // [sp-8h] [bp-Ch]@3

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v2[140].m_BackFrameID == (void *)1 )
    {
      v3 = v1->m_pkJoinTeamListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = -254923213;
    }
    else
    {
      v3 = v1->m_pkJoinTeamListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = 696021910;
    }
    v4 = TextData2::Get(v7);
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkJoinTeamListText, (unsigned int)v4);
    v5 = v1->m_pkListWin;
    v6 = 2;
    do
    {
      SlideListWin::UpdateViewList(*v5);
      ++v5;
      --v6;
    }
    while ( v6 );
  }
}

//----- (005F7330) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateMyList(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // ebx@1
  SlideListWin *v2; // ecx@1
  SlideListWin *v3; // esi@3
  int v4; // edi@4
  unsigned int v5; // esi@4
  unsigned int v6; // eax@4
  bool v7; // zf@4
  bool v8; // sf@4
  int v9; // edi@5
  int v10; // esi@10
  int v11; // ST08_4@10
  char *v12; // eax@10
  int v13; // esi@12
  int v14; // edi@12
  int v15; // esi@12
  int v16; // eax@16
  const char *v17; // eax@20
  PgFrameWork *v18; // eax@20
  SlideListWin *v19; // ecx@21
  PgFrameWork *v20; // eax@27
  PgFrameWork *v21; // eax@31
  int v22; // [sp-14h] [bp-158h]@22
  int v23; // [sp-10h] [bp-154h]@22
  int v24; // [sp-Ch] [bp-150h]@22
  tm StartTM; // [sp+4h] [bp-140h]@12
  unsigned int nMainLv; // [sp+28h] [bp-11Ch]@4
  int ni; // [sp+2Ch] [bp-118h]@10
  int nJoinIndex; // [sp+30h] [bp-114h]@4
  int nCheckIndex; // [sp+34h] [bp-110h]@4
  unsigned int i; // [sp+38h] [bp-10Ch]@4
  char *v31; // [sp+3Ch] [bp-108h]@5
  char szTemp[256]; // [sp+40h] [bp-104h]@10
  unsigned int v33; // [sp+140h] [bp-4h]@1
  int v34; // [sp+144h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pListWinTime;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    if ( !v1->m_bUpdateListCheck )
    {
      SlideBar::SetSplitCnt(v1->m_pSlideBarTimeEx, 0);
      v3 = v1->m_pListWinTime;
      v3->m_fCurSlideBtnPos = 0.0;
      v3->m_nViewStartPos = (signed int)((double)v3->m_nSlideSplitCnt * 0.0);
      v1->m_pListWinTime->m_nViewStartPos = 0;
    }
    v4 = -1;
    v5 = -1;
    nCheckIndex = -1;
    nJoinIndex = -1;
    v6 = User::Lv(&g_kUser);
    v7 = v1->m_kKindomQuestData.m_NumOfSchedule == 0;
    v8 = v1->m_kKindomQuestData.m_NumOfSchedule < 0;
    nMainLv = v6;
    i = 0;
    if ( !(v8 | v7) )
    {
      v9 = (int)&v1->m_kKindomQuestData.m_Schedule[0].baseclass_0.MaxLevel;
      v31 = &v1->m_kKindomQuestData.m_Schedule[0].baseclass_0.MaxLevel;
      while ( 1 )
      {
        if ( v9 != 118 && (signed int)v6 >= *(_BYTE *)(v9 - 1) && (signed int)v6 <= *(_BYTE *)v9 )
        {
          v10 = SlideListWin::AddText(v1->m_pListWinTime, (const char *)(v9 - 109));
          v11 = *(_WORD *)(v9 - 113);
          ni = v10;
          v12 = _itoa(v11, szTemp, 10);
          SlideListWin::SetText(v1->m_pListWinTime, v10, 1u, v12);
          if ( *(_DWORD *)(v9 - 43) == -1 )
          {
            sprintf(szTemp, "%02d:%02d");
          }
          else
          {
            memcpy(&StartTM, (const void *)(v9 - 39), sizeof(StartTM));
            v13 = StartTM.tm_min;
            v14 = StartTM.tm_hour;
            sprintf(szTemp, "%02d:%02d");
            v15 = *(_WORD *)(v31 - 3) + v13;
            StartTM.tm_min = v15;
            if ( v15 > 59 )
            {
              StartTM.tm_min = v15
                             + 60
                             * (((signed int)(((unsigned __int64)(2004318071i64 * v15) >> 32) - v15) >> 5)
                              + ((unsigned int)(((unsigned __int64)(2004318071i64 * v15) >> 32) - v15) >> 31));
              StartTM.tm_hour = v14 + 1;
              if ( v14 == 24 )
                StartTM.tm_hour = 1;
            }
            sprintf(szTemp, "%s ~ %02d:%02d");
            v9 = (int)v31;
            v10 = ni;
          }
          v16 = *(_DWORD *)(v9 - 118);
          if ( v16 == v1->m_SelectedKQHandle )
            nCheckIndex = v10;
          if ( v16 == v1->m_JoinHandle )
            nJoinIndex = v10;
          SlideListWin::SetText(v1->m_pListWinTime, v10, 2u, szTemp);
          v17 = KingdomQuestWin::GetKQState(v1, *(_BYTE *)(v9 - 114));
          SlideListWin::SetText(v1->m_pListWinTime, v10, 3u, v17);
          SlideListWin::SetData(v1->m_pListWinTime, v10, i);
          v18 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v18 )
          {
            v19 = v1->m_pListWinTime;
            if ( v18[140].m_BackFrameID == (void *)1 )
            {
              SlideListWin::SetCurSelIndex(v19, -1);
              ((void (__stdcall *)(_DWORD))v1->m_pListWinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              v24 = 128;
              v23 = 128;
              v22 = 128;
            }
            else
            {
              ((void (__stdcall *)(signed int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              v24 = 255;
              v23 = 255;
              v22 = 255;
            }
            SlideListWin::SetFontColor(v1->m_pListWinTime, v10, v22, v23, v24);
          }
        }
        v9 += 377;
        ++i;
        v31 = (char *)v9;
        if ( (signed int)i >= v1->m_kKindomQuestData.m_NumOfSchedule )
          break;
        v6 = nMainLv;
      }
      v5 = nJoinIndex;
      v4 = nCheckIndex;
    }
    v20 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v20 && v20[140].m_BackFrameID != (void *)1 && v4 > -1 )
      SlideListWin::SetCurSelIndex(v1->m_pListWinTime, v4);
    v1->m_bSendJoinMsg = 0;
    v21 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v21 && v21[140].m_BackFrameID != (void *)1 )
    {
      if ( (signed int)v5 > -1 )
      {
        SlideListWin::SetFontColor(v1->m_pListWinTime, v5, 255, 255, 0);
        v1->m_bSendJoinMsg = 1;
        v1->m_nJoinIndex = v5;
      }
    }
    SlideListWin::Sort(v1->m_pListWinTime, v1->m_nSortColumn, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinTime);
    SlideBar::SetSplitCnt(v1->m_pSlideBarTimeEx, v1->m_pListWinTime->m_nSlideSplitCnt);
    v1->m_bUpdateListCheck = 1;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005F7700) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateAllList(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // ebx@1
  SlideListWin *v2; // ecx@3
  SlideListWin *v3; // esi@5
  unsigned int v4; // edi@6
  bool v5; // zf@6
  bool v6; // sf@6
  int v7; // esi@7
  int v8; // edi@9
  int v9; // ST08_4@9
  char *v10; // eax@9
  int v11; // esi@11
  int v12; // edi@11
  int v13; // esi@11
  int v14; // eax@15
  const char *v15; // eax@19
  tm StartTM; // [sp+4h] [bp-13Ch]@11
  int ni; // [sp+28h] [bp-118h]@9
  int nJoinIndex; // [sp+2Ch] [bp-114h]@6
  int nCheckIndex; // [sp+30h] [bp-110h]@6
  unsigned int i; // [sp+34h] [bp-10Ch]@6
  unsigned __int16 *v21; // [sp+38h] [bp-108h]@7
  char szTemp[256]; // [sp+3Ch] [bp-104h]@9
  unsigned int v23; // [sp+13Ch] [bp-4h]@1
  int v24; // [sp+140h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v1 = this;
  if ( this->m_bMyList )
  {
    KingdomQuestWin::UpdateMyList(this);
  }
  else
  {
    v2 = this->m_pListWinTime;
    if ( v2 )
    {
      SlideListWin::RemoveAllList(v2);
      if ( !v1->m_bUpdateListCheck )
      {
        SlideBar::SetSplitCnt(v1->m_pSlideBarTimeEx, 0);
        v3 = v1->m_pListWinTime;
        v3->m_fCurSlideBtnPos = 0.0;
        v3->m_nViewStartPos = (signed int)((double)v3->m_nSlideSplitCnt * 0.0);
        v1->m_pListWinTime->m_nViewStartPos = 0;
      }
      v4 = -1;
      v5 = v1->m_kKindomQuestData.m_NumOfSchedule == 0;
      v6 = v1->m_kKindomQuestData.m_NumOfSchedule < 0;
      nCheckIndex = -1;
      nJoinIndex = -1;
      i = 0;
      if ( !(v6 | v5) )
      {
        v7 = (int)&v1->m_kKindomQuestData.m_Schedule[0].baseclass_0.NumOfJoiner;
        v21 = &v1->m_kKindomQuestData.m_Schedule[0].baseclass_0.NumOfJoiner;
        do
        {
          if ( v7 != 5 )
          {
            v8 = SlideListWin::AddText(v1->m_pListWinTime, (const char *)(v7 + 4));
            v9 = *(_WORD *)v7;
            ni = v8;
            v10 = _itoa(v9, szTemp, 10);
            SlideListWin::SetText(v1->m_pListWinTime, v8, 1u, v10);
            if ( *(_DWORD *)(v7 + 70) == -1 )
            {
              sprintf(szTemp, "%02d:%02d");
            }
            else
            {
              memcpy(&StartTM, (const void *)(v7 + 74), sizeof(StartTM));
              v11 = StartTM.tm_min;
              v12 = StartTM.tm_hour;
              sprintf(szTemp, "%02d:%02d");
              v13 = v21[55] + v11;
              StartTM.tm_min = v13;
              if ( v13 > 59 )
              {
                StartTM.tm_min = v13
                               + 60
                               * (((signed int)(((unsigned __int64)(2004318071i64 * v13) >> 32) - v13) >> 5)
                                + ((unsigned int)(((unsigned __int64)(2004318071i64 * v13) >> 32) - v13) >> 31));
                StartTM.tm_hour = v12 + 1;
                if ( v12 == 24 )
                  StartTM.tm_hour = 1;
              }
              sprintf(szTemp, "%s ~ %02d:%02d");
              v7 = (int)v21;
              v8 = ni;
            }
            v14 = *(_DWORD *)(v7 - 5);
            if ( v14 == v1->m_SelectedKQHandle )
              nCheckIndex = v8;
            if ( v14 == v1->m_JoinHandle )
              nJoinIndex = v8;
            SlideListWin::SetText(v1->m_pListWinTime, v8, 2u, szTemp);
            v15 = KingdomQuestWin::GetKQState(v1, *(_BYTE *)(v7 - 1));
            SlideListWin::SetText(v1->m_pListWinTime, v8, 3u, v15);
            SlideListWin::SetData(v1->m_pListWinTime, v8, i);
            v4 = nJoinIndex;
          }
          v7 += 377;
          ++i;
          v21 = (unsigned __int16 *)v7;
        }
        while ( (signed int)i < v1->m_kKindomQuestData.m_NumOfSchedule );
        if ( nCheckIndex > -1 )
          SlideListWin::SetCurSelIndex(v1->m_pListWinTime, nCheckIndex);
      }
      v1->m_bSendJoinMsg = 0;
      if ( (signed int)v4 > -1 )
      {
        SlideListWin::SetFontColor(v1->m_pListWinTime, v4, 255, 255, 0);
        v1->m_bSendJoinMsg = 1;
        v1->m_nJoinIndex = v4;
      }
      SlideListWin::Sort(v1->m_pListWinTime, v1->m_nSortColumn, 0, 0);
      SlideListWin::UpdateViewList(v1->m_pListWinTime);
      SlideBar::SetSplitCnt(v1->m_pSlideBarTimeEx, v1->m_pListWinTime->m_nSlideSplitCnt);
      v1->m_bUpdateListCheck = 1;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005F7A00) --------------------------------------------------------
void __thiscall KingdomQuestWin::OpenSideWin(KingdomQuestWin *this, unsigned int uiTeamType)
{
  KingdomQuestWin *v2; // esi@1
  char v3; // bl@5
  char v4; // bl@8

  v2 = this;
  if ( this->m_pkKingdomQuestTeamList && this->m_pkKingdomQuestPlayerList )
  {
    if ( uiTeamType <= 1 )
    {
      v4 = ((int (*)(void))this->m_pkKingdomQuestPlayerList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      ((void (__stdcall *)(_DWORD))v2->m_pkKingdomQuestTeamList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkKingdomQuestPlayerList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v4 == 0);
      if ( !v4
        && (unsigned __int8)((int (*)(void))v2->m_pkKingdomQuestPlayerList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
        && v2->m_bTimer )
      {
        GameFrameWork::NcKqJoinListReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v2->m_SelectedKQHandle);
        KingdomQuestPlayerList::UpdateList(v2->m_pkKingdomQuestPlayerList);
      }
    }
    else
    {
      if ( uiTeamType == 2 )
      {
        v3 = ((int (*)(void))this->m_pkKingdomQuestTeamList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
        ((void (__stdcall *)(_DWORD))v2->m_pkKingdomQuestPlayerList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkKingdomQuestTeamList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v3 == 0);
        if ( !v3 )
        {
          if ( v2->m_bTimer )
          {
            GameFrameWork::NcKqJoinListReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v2->m_SelectedKQHandle);
            KingdomQuestTeamList::UpdateList(v2->m_pkKingdomQuestTeamList);
          }
        }
      }
    }
  }
}

//----- (005F7B30) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnPlayerList(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  unsigned int v2; // edi@3
  PROTO_KQ_INFO *v3; // eax@3
  KQTeam *v4; // eax@4

  v1 = this;
  if ( this->m_pkKingdomQuestPlayerList && this->m_pkKingdomQuestTeamList )
  {
    v2 = 0;
    v3 = CKQ::Get(&this->m_kKindomQuestData, this->m_SelectedKQHandle);
    if ( v3 )
    {
      v4 = KQTeamTable::GetByID(v3->baseclass_0.ID);
      if ( v4 )
        v2 = v4->KQTeamDivideType;
    }
    KingdomQuestWin::OpenSideWin(v1, v2);
  }
}

//----- (005F7B80) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::AddElement(KingdomQuestPlayerList *this, KQ_JOIN_CHAR_INFO *pkCharInfo)
{
  KingdomQuestPlayerList *v2; // edi@1
  Name5 *v3; // eax@2
  int v4; // edx@2
  int v5; // ecx@2
  int v6; // edx@2
  int v7; // eax@2
  int v8; // ecx@2
  int v9; // edx@2
  int v10; // eax@2
  int v11; // ecx@2
  int v12; // edx@2
  int v13; // eax@3
  unsigned int v14; // esi@5
  char *v15; // eax@5
  void *v16; // eax@5
  const char *v17; // eax@6
  char *v18; // eax@8
  char acMainCharID[21]; // [sp+8h] [bp-34h]@2
  char acName[21]; // [sp+20h] [bp-1Ch]@2
  unsigned int v21; // [sp+38h] [bp-4h]@1
  int v22; // [sp+3Ch] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v2 = this;
  if ( this->m_pkListWin )
  {
    v3 = User::GetMainCharID(&g_kUser);
    v4 = *(_DWORD *)&v3->n5_name[4];
    *(_DWORD *)acMainCharID = *(_DWORD *)&v3->n5_name[0];
    v5 = *(_DWORD *)&v3->n5_name[8];
    *(_DWORD *)&acMainCharID[4] = v4;
    v6 = *(_DWORD *)&v3->n5_name[12];
    v7 = *(_DWORD *)&v3->n5_name[16];
    *(_DWORD *)&acMainCharID[8] = v5;
    v8 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[0];
    *(_DWORD *)&acMainCharID[12] = v6;
    v9 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[4];
    *(_DWORD *)&acMainCharID[16] = v7;
    v10 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[8];
    *(_DWORD *)acName = v8;
    v11 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[12];
    *(_DWORD *)&acName[4] = v9;
    v12 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[16];
    *(_DWORD *)&acName[8] = v10;
    acMainCharID[20] = 0;
    *(_DWORD *)&acName[12] = v11;
    *(_DWORD *)&acName[16] = v12;
    acName[20] = 0;
    if ( strcmp(acName, acMainCharID) )
      v13 = SlideListWin::AddText(v2->m_pkListWin, acName);
    else
      v13 = SlideListWin::AddHeadText(v2->m_pkListWin, acName);
    v14 = v13;
    v15 = fs("%d");
    SlideListWin::SetText(v2->m_pkListWin, v14, 0, v15);
    v16 = CDataReader::GetRecord(
            (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
            pkCharInfo->nCharClass);
    if ( v16 )
      v17 = (char *)v16 + 21;
    else
      v17 = &byte_9788EB;
    SlideListWin::SetText(v2->m_pkListWin, v14, 1u, v17);
    SlideListWin::SetText(v2->m_pkListWin, v14, 2u, acName);
    SlideListWin::SetFontColor(v2->m_pkListWin, v14, 255, 255, 255);
    SlideListWin::SetFontSize(v2->m_pkListWin, v14, 1);
    v18 = TextData2::Get(0xDC604216u);
    SlideListWin::SetToolTipWinText(v2->m_pkListWin, v14, v18);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (005F7D00) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::AddElement(KingdomQuestTeamList *this, KQ_JOIN_CHAR_INFO *pkCharInfo)
{
  KingdomQuestTeamList *v2; // esi@1
  unsigned int v3; // eax@1
  char *v4; // ecx@1
  char v5; // al@4
  signed int v6; // ebx@4
  Name5 *v7; // eax@9
  int v8; // edx@9
  int v9; // ecx@9
  int v10; // edx@9
  int v11; // eax@9
  int v12; // ecx@9
  int v13; // edx@9
  int v14; // eax@9
  int v15; // ecx@9
  int v16; // edx@9
  int v17; // edi@10
  char v18; // al@10
  NiRefObjectVtbl *v19; // edx@10
  void *(__thiscall *v20)(NiRefObject *, unsigned int); // eax@11
  bool v21; // zf@13
  char *v22; // eax@16
  void *v23; // eax@16
  const char *v24; // eax@17
  char *v25; // eax@19
  signed int v26; // [sp-8h] [bp-48h]@11
  char acMainCharID[21]; // [sp+Ch] [bp-34h]@9
  char acName[21]; // [sp+24h] [bp-1Ch]@9
  unsigned int v29; // [sp+3Ch] [bp-4h]@1
  int v30; // [sp+40h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v2 = this;
  v3 = 0;
  v4 = (char *)this->m_pkListWin;
  while ( *(_DWORD *)v4 )
  {
    ++v3;
    v4 += 4;
    if ( v3 >= 2 )
    {
      v5 = pkCharInfo->nTeamType;
      v6 = -1;
      if ( v5 == 2 )
        return;
      if ( v5 == 1 )
      {
        v6 = 0;
      }
      else
      {
        if ( !v5 )
          v6 = 1;
      }
      v7 = User::GetMainCharID(&g_kUser);
      v8 = *(_DWORD *)&v7->n5_name[4];
      *(_DWORD *)acMainCharID = *(_DWORD *)&v7->n5_name[0];
      v9 = *(_DWORD *)&v7->n5_name[8];
      *(_DWORD *)&acMainCharID[4] = v8;
      v10 = *(_DWORD *)&v7->n5_name[12];
      v11 = *(_DWORD *)&v7->n5_name[16];
      *(_DWORD *)&acMainCharID[8] = v9;
      v12 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[0];
      *(_DWORD *)&acMainCharID[12] = v10;
      v13 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[4];
      *(_DWORD *)&acMainCharID[16] = v11;
      v14 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[8];
      *(_DWORD *)acName = v12;
      v15 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[12];
      *(_DWORD *)&acName[4] = v13;
      v16 = *(_DWORD *)&pkCharInfo->sCharID.n5_name[16];
      *(_DWORD *)&acName[8] = v14;
      acMainCharID[20] = 0;
      *(_DWORD *)&acName[12] = v15;
      *(_DWORD *)&acName[16] = v16;
      acName[20] = 0;
      if ( strcmp(acName, acMainCharID) )
      {
        v17 = SlideListWin::AddText(v2->m_pkListWin[v6], acName);
      }
      else
      {
        v17 = SlideListWin::AddHeadText(v2->m_pkListWin[v6], acName);
        v18 = pkCharInfo->nTeamType;
        v19 = v2->m_pkSelectedRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        if ( !v18 )
        {
          v20 = v19[64].__vecDelDtor;
          v26 = 1;
          goto LABEL_12;
        }
        v21 = v18 == 1;
        v20 = v19[64].__vecDelDtor;
        v26 = 0;
        if ( v21 )
        {
          ((void (__stdcall *)(_DWORD))v20)(0);
          ((void (__stdcall *)(signed int))v2->m_pkSelectedBlue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        }
        else
        {
LABEL_12:
          ((void (__stdcall *)(signed int))v20)(v26);
          ((void (__stdcall *)(_DWORD))v2->m_pkSelectedBlue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        }
      }
      v22 = fs("%d");
      SlideListWin::SetText(v2->m_pkListWin[v6], v17, 0, v22);
      v23 = CDataReader::GetRecord(
              (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
              pkCharInfo->nCharClass);
      if ( v23 )
        v24 = (char *)v23 + 21;
      else
        v24 = &byte_9788EB;
      SlideListWin::SetText(v2->m_pkListWin[v6], v17, 1u, v24);
      SlideListWin::SetText(v2->m_pkListWin[v6], v17, 2u, acName);
      SlideListWin::SetFontColor(v2->m_pkListWin[v6], v17, 255, 255, 255);
      SlideListWin::SetFontSize(v2->m_pkListWin[v6], v17, 1);
      v25 = TextData2::Get(0xDC604216u);
      SlideListWin::SetToolTipWinText(v2->m_pkListWin[v6], v17, v25);
      return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (005F7F10) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::SetElement(KingdomQuestTeamList *this, PROTO_NC_KQ_TEAM_SELECT_CMD *pkTeamSelectInfo)
{
  char *v2; // edx@1
  signed int v3; // eax@1
  char *v4; // ecx@1
  int v5; // ecx@4
  int v6; // eax@4
  int v7; // ecx@4
  int v8; // eax@4
  SlideListWin **v9; // edi@4
  unsigned int v10; // esi@5
  const char *v11; // eax@6
  char *v12; // edx@6
  const char v13; // cl@7
  int v14; // eax@8
  SlideListWin *v15; // ecx@8
  const char *v16; // eax@11
  char v17; // al@11
  SlideListWin *v18; // ecx@11
  char *v19; // eax@11
  char v20; // al@11
  SlideListWin *v21; // ecx@11
  const char *v22; // eax@11
  char *v23; // edx@12
  const char v24; // cl@13
  SlideListWin *v25; // ecx@15
  KingdomQuestTeamList *thisa; // [sp+8h] [bp-ECh]@1
  KQ_JOIN_CHAR_INFO GetData; // [sp+10h] [bp-E4h]@4
  int v28; // [sp+28h] [bp-CCh]@4
  unsigned int j; // [sp+2Ch] [bp-C8h]@11
  Name5 kName; // [sp+30h] [bp-C4h]@11
  char tempName[128]; // [sp+44h] [bp-B0h]@4
  char acName[21]; // [sp+C4h] [bp-30h]@4
  char source[4]; // [sp+DCh] [bp-18h]@12
  int v34; // [sp+E0h] [bp-14h]@12
  int v35; // [sp+E4h] [bp-10h]@12
  int v36; // [sp+E8h] [bp-Ch]@12
  int v37; // [sp+ECh] [bp-8h]@12
  unsigned int v38; // [sp+F0h] [bp-4h]@1
  int v39; // [sp+F4h] [bp+0h]@1

  v38 = (unsigned int)&v39 ^ __security_cookie;
  v2 = (char *)this->m_pkListWin;
  thisa = this;
  v3 = 0;
  v4 = (char *)this->m_pkListWin;
  while ( *(_DWORD *)v4 )
  {
    ++v3;
    v4 += 4;
    if ( v3 >= 2 )
    {
      v5 = *(_DWORD *)&pkTeamSelectInfo->sCharID.n5_name[4];
      *(_DWORD *)acName = *(_DWORD *)&pkTeamSelectInfo->sCharID.n5_name[0];
      v6 = *(_DWORD *)&pkTeamSelectInfo->sCharID.n5_name[8];
      *(_DWORD *)&acName[4] = v5;
      v7 = *(_DWORD *)&pkTeamSelectInfo->sCharID.n5_name[12];
      *(_DWORD *)&acName[8] = v6;
      v8 = *(_DWORD *)&pkTeamSelectInfo->sCharID.n5_name[16];
      *(_QWORD *)&GetData.sCharID.n5_name[12] = 0i64;
      *(_QWORD *)&GetData.sCharID.n5_name[4] = 0i64;
      *(_DWORD *)&GetData.sCharID.n5_name[0] = 0;
      *(_DWORD *)&acName[12] = v7;
      *(_DWORD *)&acName[16] = v8;
      acName[20] = 0;
      tempName[0] = 0;
      v9 = (SlideListWin **)v2;
      v28 = 2;
      do
      {
        v10 = 0;
        if ( SlideListWin::GetItemSize(*v9) )
        {
          while ( 1 )
          {
            v11 = SlideListWin::GetText(*v9, v10, 2u);
            v12 = (char *)(tempName - v11);
            do
            {
              v13 = *v11;
              v11[(_DWORD)v12] = *v11;
              ++v11;
            }
            while ( v13 );
            v14 = strcmp(tempName, acName);
            v15 = *v9;
            if ( !v14 )
              break;
            ++v10;
            if ( v10 >= SlideListWin::GetItemSize(v15) )
              goto LABEL_16;
          }
          j = v10;
          v16 = SlideListWin::GetText(v15, v10, 0);
          v17 = atoi(v16);
          v18 = *v9;
          GetData.nCharLevel = v17;
          v19 = (char *)SlideListWin::GetText(v18, v10, 1u);
          v20 = CharClass::GetClassIDByLocalName(v19);
          v21 = *v9;
          GetData.nCharClass = v20;
          *(_QWORD *)&kName.n5_name[12] = 0i64;
          *(_QWORD *)&kName.n5_name[4] = 0i64;
          *(_DWORD *)&kName.n5_name[0] = 0;
          v22 = SlideListWin::GetText(v21, v10, 2u);
          if ( strlen(v22) < 0x13 )
          {
            *(_DWORD *)source = 0;
            v34 = 0;
            v35 = 0;
            v36 = 0;
            v37 = 0;
            v23 = (char *)(source - v22);
            do
            {
              v24 = *v22;
              v22[(_DWORD)v23] = *v22;
              ++v22;
            }
            while ( v24 );
            *(_QWORD *)&kName.n5_name[12] = 0i64;
            *(_QWORD *)&kName.n5_name[4] = 0i64;
            *(_DWORD *)&kName.n5_name[0] = 0;
            strncpy(kName.n5_name, source, 0x14u);
          }
          *(_QWORD *)&GetData.sCharID.n5_name[0] = *(_QWORD *)&kName;
          *(_DWORD *)&GetData.sCharID.n5_name[8] = *(_DWORD *)&kName.n5_name[8];
          *(_QWORD *)&GetData.sCharID.n5_name[12] = *(_QWORD *)&kName.n5_name[12];
          v25 = *v9;
          GetData.nTeamType = pkTeamSelectInfo->nTeamType;
          SlideListWin::RemoveItem(v25, j);
        }
LABEL_16:
        ++v9;
        --v28;
      }
      while ( v28 );
      KingdomQuestTeamList::AddElement(thisa, &GetData);
      return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (005F8170) --------------------------------------------------------
void __thiscall KingdomQuestWin::AddKQuest(KingdomQuestWin *this, PROTO_NC_KQ_LIST_ADD_ACK *pkAddAck)
{
  KingdomQuestWin *v2; // esi@1

  v2 = this;
  if ( pkAddAck )
  {
    CKQ::Add(&this->m_kKindomQuestData, pkAddAck);
    KingdomQuestWin::UpdateAllList(v2);
  }
}

//----- (005F81A0) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateListState(KingdomQuestWin *this, PROTO_NC_KQ_LIST_UPDATE_ACK *pkUpdateAck)
{
  KingdomQuestWin *v2; // esi@1

  v2 = this;
  if ( pkUpdateAck )
  {
    CKQ::Update(&this->m_kKindomQuestData, pkUpdateAck);
    KingdomQuestWin::UpdateAllList(v2);
  }
}

//----- (005F81D0) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnMyList(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  NiRefObjectVtbl *v3; // edi@1
  D3DXCOLOR *v4; // eax@1
  NiRefObjectVtbl *v5; // edi@1
  D3DXCOLOR *v6; // eax@1
  D3DXCOLOR result; // [sp+8h] [bp-10h]@1

  v1 = this;
  v2 = this->m_pTexMyList;
  *(_WORD *)&v1->m_bMyList = 1;
  v1->m_bUpdateListCheck = 0;
  v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = Color::GetDxColor(&result, -1, -1, 0, -1);
  v3[117].__vecDelDtor((NiRefObject *)v1->m_pTexMyList, (unsigned int)v4);
  v5 = v1->m_pTexAllList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = Color::GetDxColor(&result, -1, -1, -1, -1);
  v5[117].__vecDelDtor((NiRefObject *)v1->m_pTexAllList, (unsigned int)v6);
  KingdomQuestWin::UpdateMyList(v1);
}

//----- (005F8270) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnAllList(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  PgWinText *v2; // ecx@1
  NiRefObjectVtbl *v3; // edi@1
  D3DXCOLOR *v4; // eax@1
  NiRefObjectVtbl *v5; // edi@1
  D3DXCOLOR *v6; // eax@1
  D3DXCOLOR result; // [sp+8h] [bp-10h]@1

  v1 = this;
  v2 = this->m_pTexAllList;
  *(_WORD *)&v1->m_bMyList = 256;
  v1->m_bUpdateListCheck = 0;
  v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = Color::GetDxColor(&result, -1, -1, 0, -1);
  v3[117].__vecDelDtor((NiRefObject *)v1->m_pTexAllList, (unsigned int)v4);
  v5 = v1->m_pTexMyList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = Color::GetDxColor(&result, -1, -1, -1, -1);
  v5[117].__vecDelDtor((NiRefObject *)v1->m_pTexMyList, (unsigned int)v6);
  KingdomQuestWin::UpdateAllList(v1);
}

//----- (005F8310) --------------------------------------------------------
KingdomQuestWin *__cdecl KingdomQuestWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  KingdomQuestWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C408u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    KingdomQuestWin::KingdomQuestWin((KingdomQuestWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (KingdomQuestWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (005F8440) --------------------------------------------------------
KingdomQuestPlayerList *__cdecl KingdomQuestPlayerList::CreateWin(NiPointer<NiNode> spNode, PgWin *pkParent)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@10
  KingdomQuestPlayerList *result; // eax@19
  NiNode *v7; // [sp-18h] [bp-28h]@6
  PgWin *v8; // [sp-14h] [bp-24h]@6
  NiPointer<KingdomQuestPlayerList> pkWin; // [sp+0h] [bp-10h]@1
  int v10; // [sp+Ch] [bp-4h]@1

  v10 = 0;
  v2 = operator new(0x16Cu);
  pkWin.m_pObject = (KingdomQuestPlayerList *)v2;
  LOBYTE(v10) = 1;
  if ( v2 )
  {
    KingdomQuestPlayerList::KingdomQuestPlayerList((KingdomQuestPlayerList *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  pkWin.m_pObject = (KingdomQuestPlayerList *)v4;
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  LOBYTE(v10) = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  v8 = pkParent;
  v7 = spNode.m_pObject;
  pkParent = (PgWin *)&v7;
  if ( spNode.m_pObject )
    InterlockedIncrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiNode *, PgWin *))(*(_DWORD *)v4 + 516))(v4, v7, v8) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    LOBYTE(v10) = 0;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v10 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spNode.m_pObject )
      spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spNode.m_pObject,
        1u);
    result = (KingdomQuestPlayerList *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, (NiPointer<PgWin> *)&pkParent, (PgWin *)v4);
    if ( pkParent )
    {
      v5 = pkParent;
      if ( !InterlockedDecrement((volatile LONG *)&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    LOBYTE(v10) = 0;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v10 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    result = 0;
  }
  return result;
}

//----- (005F85D0) --------------------------------------------------------
KingdomQuestTeamList *__cdecl KingdomQuestTeamList::CreateWin(NiPointer<NiNode> spNode, PgWin *pkParent)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@10
  KingdomQuestTeamList *result; // eax@19
  NiNode *v6; // [sp-18h] [bp-28h]@6
  PgWin *v7; // [sp-14h] [bp-24h]@6
  NiPointer<KingdomQuestTeamList> pkWin; // [sp+0h] [bp-10h]@1
  int v9; // [sp+Ch] [bp-4h]@1

  v9 = 0;
  v2 = operator new(0x180u);
  v3 = v2;
  pkWin.m_pObject = (KingdomQuestTeamList *)v2;
  LOBYTE(v9) = 1;
  if ( v2 )
  {
    PgWinSpr::PgWinSpr((PgWinSpr *)v2);
    *(_DWORD *)v3 = &KingdomQuestTeamList::_vftable_;
    *((_DWORD *)v3 + 58) = &KingdomQuestTeamList::_vftable_;
    *((_DWORD *)v3 + 93) = 0;
    *((_WORD *)v3 + 188) = 0;
    *((float *)v3 + 95) = 0.0;
    *((_DWORD *)v3 + 74) = 0;
    *((_BYTE *)v3 + 300) = 0;
    *((_DWORD *)v3 + 89) = 0;
    *((_BYTE *)v3 + 378) = 1;
  }
  else
  {
    v3 = 0;
  }
  pkWin.m_pObject = (KingdomQuestTeamList *)v3;
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  LOBYTE(v9) = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  v7 = pkParent;
  v6 = spNode.m_pObject;
  pkParent = (PgWin *)&v6;
  if ( spNode.m_pObject )
    InterlockedIncrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiNode *, PgWin *))(*(_DWORD *)v3 + 516))(v3, v6, v7) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    LOBYTE(v9) = 0;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v9 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spNode.m_pObject )
      spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spNode.m_pObject,
        1u);
    result = (KingdomQuestTeamList *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, (NiPointer<PgWin> *)&pkParent, (PgWin *)v3);
    if ( pkParent )
    {
      v4 = pkParent;
      if ( !InterlockedDecrement((volatile LONG *)&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    LOBYTE(v9) = 0;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v9 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    result = 0;
  }
  return result;
}
// 9BCEB8: using guessed type int (__stdcall *KingdomQuestTeamList___vftable_)(int uiFlags);
// 9BCED4: using guessed type int (__thiscall *KingdomQuestTeamList___vftable_)(void *p, char);

//----- (005F87A0) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateTimer(KingdomQuestWin *this, float fTime)
{
  KingdomQuestWin *v2; // esi@1
  double v3; // st7@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v4; // [sp-1Ch] [bp-24h]@2
  int v5; // [sp-Ch] [bp-14h]@2
  signed int v6; // [sp-8h] [bp-10h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // [sp+4h] [bp-4h]@2
  float fDeltaTime; // [sp+10h] [bp+8h]@2

  v2 = this;
  if ( this->m_bTimer != 1 )
  {
    v3 = fTime - this->m_fOldTime;
    v7 = &v4;
    v6 = 15;
    fDeltaTime = v3;
    v5 = 0;
    v4.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v4,
      "KQPlayerList_ResetListCoolTime",
      0x1Eu);
    if ( (double)CSingleDataMap::GetValue(&g_kSingleDataMap, v4) <= fDeltaTime )
      v2->m_bTimer = 1;
  }
}

//----- (005F8810) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::UpdateTimer(KingdomQuestPlayerList *this, float fTime)
{
  KingdomQuestPlayerList *v2; // esi@1
  double v3; // st7@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v4; // [sp-1Ch] [bp-24h]@2
  int v5; // [sp-Ch] [bp-14h]@2
  signed int v6; // [sp-8h] [bp-10h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // [sp+4h] [bp-4h]@2
  float fDeltaTime; // [sp+10h] [bp+8h]@2

  v2 = this;
  if ( this->m_bTimer != 1 )
  {
    v3 = fTime - this->m_fOldTime;
    v7 = &v4;
    v6 = 15;
    fDeltaTime = v3;
    v5 = 0;
    v4.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v4,
      "KQPlayerList_ResetListCoolTime",
      0x1Eu);
    if ( (double)CSingleDataMap::GetValue(&g_kSingleDataMap, v4) <= fDeltaTime )
      v2->m_bTimer = 1;
  }
}

//----- (005F8880) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::UpdateTimer(KingdomQuestTeamList *this, float fTime)
{
  KingdomQuestTeamList *v2; // esi@1
  double v3; // st7@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v4; // [sp-1Ch] [bp-24h]@2
  int v5; // [sp-Ch] [bp-14h]@2
  signed int v6; // [sp-8h] [bp-10h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // [sp+4h] [bp-4h]@2
  float fDeltaTime; // [sp+10h] [bp+8h]@2

  v2 = this;
  if ( this->m_bTimer != 1 )
  {
    v3 = fTime - this->m_fOldTime;
    v7 = &v4;
    v6 = 15;
    fDeltaTime = v3;
    v5 = 0;
    v4.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v4,
      "KQPlayerList_ResetListCoolTime",
      0x1Eu);
    if ( (double)CSingleDataMap::GetValue(&g_kSingleDataMap, v4) <= fDeltaTime )
      v2->m_bTimer = 1;
  }
}

//----- (005F88F0) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateContentView(KingdomQuestWin *this, int nIndex)
{
  KingdomQuestWin *v2; // ebx@1
  SlideListWin *v3; // ecx@1
  int v4; // eax@4
  unsigned int v5; // edx@5
  int v6; // esi@5
  char *v7; // eax@5
  void *v8; // esi@5
  char *v9; // eax@5
  int v10; // edi@5
  char *v11; // eax@5
  char *v12; // eax@5
  int v13; // edi@5
  char *v14; // eax@5
  char *v15; // eax@5
  char v16; // al@5
  int v17; // edi@7
  unsigned int v18; // ecx@7
  int v19; // esi@9
  int v20; // edx@10
  int v21; // ecx@10
  unsigned int v22; // eax@10
  unsigned int v23; // edx@10
  char *v24; // eax@10
  char v25; // cl@11
  char *v26; // edi@14
  char *v27; // eax@14
  PgWinText *v28; // eax@16
  void *v29; // ecx@16
  void *v30; // eax@17
  int v31; // esi@20
  int v32; // eax@20
  signed int v33; // ecx@22
  double v34; // st7@28
  void *v35; // eax@28
  NiRefObjectVtbl *v36; // edx@28
  double v37; // st7@28
  char *v38; // eax@37
  void *v39; // edi@37
  char v40; // al@38
  int v41; // edi@38
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v42; // eax@40
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v43; // eax@42
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v44; // eax@47
  PgFrameWork *v45; // edi@52
  SlideListWin *v46; // eax@53
  int v47; // esi@53
  SlideListWin *v48; // ecx@54
  int v49; // [sp-1Ch] [bp-388h]@55
  int v50; // [sp-18h] [bp-384h]@55
  int v51; // [sp-14h] [bp-380h]@55
  int dwData; // [sp+4h] [bp-368h]@4
  void *pData; // [sp+8h] [bp-364h]@5
  CSpFont *pkFont; // [sp+Ch] [bp-360h]@16
  int pPosEndTest; // [sp+10h] [bp-35Ch]@17
  PgWinText *c; // [sp+14h] [bp-358h]@16
  char *pPosEnd; // [sp+18h] [bp-354h]@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strResult; // [sp+1Ch] [bp-350h]@5
  unsigned int v59; // [sp+38h] [bp-334h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+40h] [bp-32Ch]@10
  char szTemp2[256]; // [sp+5Ch] [bp-310h]@14
  char szTemp[256]; // [sp+15Ch] [bp-210h]@5
  char dest; // [sp+25Ch] [bp-110h]@14
  char dst; // [sp+25Dh] [bp-10Fh]@14
  char szTest[128]; // [sp+2DCh] [bp-90h]@51
  unsigned int v66; // [sp+35Ch] [bp-10h]@1
  int v67; // [sp+368h] [bp-4h]@7
  int v68; // [sp+36Ch] [bp+0h]@1

  v66 = (unsigned int)&v68 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinTime;
  if ( v3 )
  {
    if ( nIndex < v2->m_kKindomQuestData.m_NumOfSchedule )
    {
      if ( SlideListWin::GetCurSelIndex(v3) >= 0 )
      {
        SlideListWin::RemoveAllList(v2->m_pListWinContent);
        v4 = SlideListWin::GetCurSelIndex(v2->m_pListWinTime);
        SlideListWin::GetData(v2->m_pListWinTime, v4, (unsigned int *)&dwData);
        if ( dwData < v2->m_kKindomQuestData.m_NumOfSchedule )
        {
          v5 = v2->m_kKindomQuestData.m_Schedule[dwData].baseclass_0.Handle;
          v6 = (int)&v2->m_kKindomQuestData.m_Schedule[dwData];
          pData = &v2->m_kKindomQuestData.m_Schedule[dwData];
          v2->m_SelectedKQHandle = v5;
          v7 = TextData::Get(0x9A9A9181u);
          sprintf(szTemp, v7);
          SlideListWin::AddText(v2->m_pListWinContent, szTemp);
          SlideListWin::AddText(v2->m_pListWinContent, &byte_9BC097);
          memcpy(&strResult, (const void *)(v6 + 79), 0x24u);
          v8 = pData;
          v9 = TextData2::Get(0x5A55283Cu);
          sprintf(szTemp, v9);
          v10 = SlideListWin::AddText(v2->m_pListWinContent, szTemp);
          v11 = TextData::Get(0x3841364Fu);
          sprintf(szTemp, v11);
          SlideListWin::SetText(v2->m_pListWinContent, v10, 1u, szTemp);
          v12 = TextData::Get(0xE608F644u);
          sprintf(szTemp, v12);
          v13 = SlideListWin::AddText(v2->m_pListWinContent, szTemp);
          v14 = TextData::Get(0xC2EADB35u);
          SlideListWin::AddText(v2->m_pListWinContent, v14);
          v15 = TextData::Get(0x2D4A4395u);
          sprintf(szTemp, v15);
          SlideListWin::SetText(v2->m_pListWinContent, v13, 1u, szTemp);
          v16 = *((_BYTE *)v8 + 4);
          if ( v16 == 2 || v16 == 4 )
          {
            v17 = 0;
            v59 = 15;
            *(_DWORD *)&strResult.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
            strResult.baseclass_0.___u0._Bx._Buf[8] = 0;
            v18 = v2->m_SelectedKQHandle;
            v67 = 0;
            if ( v18 == v2->m_kKQJoiner.Handle && v2->m_kKQJoiner.nJoinCnt > 0 )
            {
              v19 = (int)&v2->m_kKQJoiner.kJoiner[0].n5_name[8];
              do
              {
                v20 = *(_DWORD *)(v19 - 8);
                v21 = *(_DWORD *)v19;
                *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[8] = *(_DWORD *)(v19 - 4);
                v22 = *(_DWORD *)(v19 + 8);
                *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[4] = v20;
                v23 = *(_DWORD *)(v19 + 4);
                thisa.baseclass_0._Myres = v22;
                v24 = &thisa.baseclass_0.___u0._Bx._Buf[4];
                thisa.baseclass_0._Mysize = v23;
                *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] = v21;
                thisa.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
                do
                  v25 = *v24++;
                while ( v25 );
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strResult + 8),
                  &thisa.baseclass_0.___u0._Bx._Buf[4],
                  v24 - &thisa.baseclass_0.___u0._Bx._Buf[5]);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strResult + 8),
                  ", ",
                  2u);
                ++v17;
                v19 += 20;
              }
              while ( v17 < v2->m_kKQJoiner.nJoinCnt );
              v8 = pData;
            }
            dest = 0;
            memset(&dst, 0, 0xFFu);
            szTemp2[0] = 0;
            memset(&szTemp2[1], 0, 0xFFu);
            v26 = fs(0);
            v27 = *(char **)&strResult.baseclass_0.___u0._Bx._Buf[8];
            if ( v59 < 0x10 )
              v27 = &strResult.baseclass_0.___u0._Bx._Buf[8];
            strncpy(v26, v27, *(unsigned int *)&strResult.baseclass_0._Alval.baseclass_0.dummy[0]);
            v26[*(_DWORD *)&strResult.baseclass_0._Alval.baseclass_0.dummy[0]] = 0;
            v28 = SlideListWin::GetTextWin(v2->m_pListWinContent, 0, 0);
            v29 = v28->m_spTextGeom.m_pObject->m_spPgFont.m_pObject;
            c = v28;
            pkFont = (CSpFont *)v29;
            if ( v29 )
            {
              pPosEndTest = 2
                          * ((int (__thiscall *)(PgWinText *))v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v28);
              v30 = CSpFont::SplitStrByPixelSize(
                      pkFont,
                      v26,
                      (signed int)((double)(unsigned int)pPosEndTest / 1.049999952316284),
                      0);
              pPosEnd = (char *)v30;
              pPosEndTest = (int)v30;
              if ( v30 )
              {
                while ( 1 )
                {
                  v31 = v30 - v26;
                  strncpy(&dest, v26, v30 - v26);
                  v32 = v31 - 2;
                  *(&dest + v31) = 0;
                  if ( v31 - 2 > 0 && *(&dest + v32) != 44 )
                  {
                    v33 = 2;
                    while ( *(&dest + v32) != 44 )
                    {
                      --v32;
                      ++v33;
                      if ( v32 <= 0 )
                        goto LABEL_27;
                    }
                    *(&dest + v32) = 0;
LABEL_27:
                    pPosEnd -= v33;
                  }
                  v26 = pPosEnd;
                  v34 = (double)(unsigned int)(2
                                             * ((int (*)(void))c->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)());
                  v35 = CSpFont::SplitStrByPixelSize(pkFont, pPosEnd, (signed int)(v34 / 1.049999952316284), 0);
                  v36 = c->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                  pPosEnd = (char *)v35;
                  v37 = (double)(unsigned int)(2 * ((int (*)(void))v36[36].__vecDelDtor)());
                  if ( CSpFont::SplitStrByPixelSize(
                         pkFont,
                         (char *)pPosEndTest,
                         (signed int)(v37 / 1.049999952316284),
                         0) )
                  {
                    pPosEndTest = (int)pPosEnd;
                  }
                  else
                  {
                    if ( v31 - 2 > 0 )
                      szTemp[v31 + 254] = 0;
                    pPosEndTest = 0;
                  }
                  sprintf(szTemp2, "  %s");
                  SlideListWin::AddText(v2->m_pListWinContent, szTemp2);
                  if ( !pPosEndTest )
                    break;
                  v30 = pPosEnd;
                }
                v8 = pData;
              }
            }
            v67 = -1;
            if ( v59 >= 0x10 )
              operator delete(*(void **)&strResult.baseclass_0.___u0._Bx._Buf[8]);
          }
          SlideListWin::AddText(v2->m_pListWinContent, &byte_9BC0AE);
          v38 = TextData::Get(0xA6A69872u);
          SlideListWin::AddText(v2->m_pListWinContent, v38);
          v39 = CDataReader::GetRecord(
                  (CDataReader *)(ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable + 4),
                  *(_WORD *)((char *)v8 + 7));
          if ( v39 )
          {
            thisa.baseclass_0._Myres = 15;
            thisa.baseclass_0._Mysize = 0;
            thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            v67 = 1;
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "   ", 3u);
            v40 = *((_BYTE *)v39 + 2);
            v41 = (int)((char *)v39 + 2);
            for ( LOBYTE(c) = v40; v40; LOBYTE(c) = v40 )
            {
              if ( v40 == 10 )
              {
                v42 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
                if ( thisa.baseclass_0._Myres < 0x10 )
                  v42 = &thisa;
                SlideListWin::AddText(v2->m_pListWinContent, v42->baseclass_0.___u0.baseclass_0.dummy);
                v43 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
                thisa.baseclass_0._Mysize = 0;
                if ( thisa.baseclass_0._Myres < 0x10 )
                  v43 = &thisa;
                v43->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "   ", 3u);
              }
              else
              {
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&thisa, 1u, (char)c);
              }
              v40 = *(_BYTE *)(v41++ + 1);
            }
            v44 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
            if ( thisa.baseclass_0._Myres < 0x10 )
              v44 = &thisa;
            SlideListWin::AddText(v2->m_pListWinContent, v44->baseclass_0.___u0.baseclass_0.dummy);
            SlideListWin::AlignText(v2->m_pListWinContent, 4u);
            v67 = -1;
            if ( thisa.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&thisa);
          }
          else
          {
            sprintf(szTest, "%d KQDesc Not Found");
            SlideListWin::AddText(v2->m_pListWinContent, szTest);
          }
          SlideListWin::UpdateViewList(v2->m_pListWinContent);
          v45 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v45 )
          {
            v46 = v2->m_pListWinTime;
            v47 = v46->m_nViewStartPos;
            if ( v47 < v46->m_nMaxViewListCnt )
            {
              do
              {
                v48 = v2->m_pListWinTime;
                if ( v45[140].m_BackFrameID == (void *)1 )
                {
                  SlideListWin::SetCurSelIndex(v48, -1);
                  ((void (__stdcall *)(_DWORD))v2->m_pListWinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
                  v51 = 128;
                  v50 = 128;
                  v49 = 128;
                }
                else
                {
                  ((void (__stdcall *)(signed int))v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                  v51 = 255;
                  v50 = 255;
                  v49 = 255;
                }
                SlideListWin::SetFontColor(v2->m_pListWinTime, v47++, v49, v50, v51);
              }
              while ( v47 < v2->m_pListWinTime->m_nMaxViewListCnt );
            }
          }
          SlideBar::SetSplitCnt(v2->m_pSlideBarContentEx, v2->m_pListWinContent->m_nSlideSplitCnt);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97E30: using guessed type int ITableBase_KINGDOM_QUEST_DESC_KQDescTable___ms_pkTable;

//----- (005F9100) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateMeWin(KingdomQuestWin *this, float fCurTime)
{
  KingdomQuestWin *v2; // esi@1
  GameFrameWork *v3; // ecx@3
  PgFrameWork *v4; // eax@10
  GameFrameWork *v5; // edi@10
  signed int v6; // [sp+4h] [bp-Ch]@7

  v2 = this;
  if ( !(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1)
    && CNSTimer_Interval::IsRun_GetCount(&this->m_kTimerInterval, fCurTime) )
  {
    v3 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
    v2->m_bUpdateListCheck = 1;
    GameFrameWork::NcKqListRefreshReq(v3);
  }
  KingdomQuestWin::UpdateKQTime(v2);
  if ( v2->m_bRequestJoin )
  {
    if ( v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1
      || !CNSTimer_Interval::IsRun_GetCount(&v2->m_kKQDelay, fCurTime) )
    {
      v6 = 0;
    }
    else
    {
      v2->m_bRequestJoin = 0;
      v6 = 1;
    }
    ((void (__stdcall *)(_DWORD))v2->m_pJoinOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v6);
  }
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v5 = (GameFrameWork *)v4;
  if ( v4 )
  {
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v4, v2->m_pListWinContent, v2->m_pSlideBarContentEx);
    GameFrameWork::UpdateUIScroll(v5, v2->m_pListWinTime, v2->m_pSlideBarTimeEx);
  }
  KingdomQuestWin::UpdateTimer(v2, fCurTime);
}

//----- (005F91E0) --------------------------------------------------------
void __thiscall KingdomQuestWin::UpdateContentView(KingdomQuestWin *this, unsigned int kQuestHandle)
{
  KingdomQuestWin *v2; // ebx@1
  PROTO_KQ_INFO *v3; // eax@2
  PROTO_KQ_INFO *v4; // esi@3
  char *v5; // eax@3
  char *v6; // eax@3
  int v7; // edi@3
  char *v8; // eax@3
  char *v9; // eax@3
  int v10; // edi@3
  char *v11; // eax@3
  char *v12; // eax@3
  char v13; // al@3
  unsigned int v14; // ecx@5
  int v15; // edi@6
  int v16; // esi@7
  int v17; // edx@8
  int v18; // ecx@8
  unsigned int v19; // eax@8
  unsigned int v20; // edx@8
  char *v21; // eax@8
  char v22; // cl@9
  char *v23; // esi@11
  char *v24; // eax@11
  SlideListWin *v25; // eax@13
  int v26; // eax@14
  int v27; // edx@15
  double v28; // st7@19
  char *v29; // edi@19
  int v30; // esi@20
  int v31; // eax@20
  signed int v32; // ecx@22
  double v33; // st7@28
  double v34; // st7@28
  char *v35; // eax@36
  void *v36; // esi@36
  char v37; // cl@37
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v38; // eax@41
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v39; // eax@43
  unsigned int v40; // esi@47
  bool v41; // zf@50
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v42; // eax@51
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v43; // eax@56
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v44; // eax@58
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v45; // eax@62
  PgFrameWork *v46; // edi@68
  SlideListWin *v47; // eax@69
  int v48; // esi@69
  SlideListWin *v49; // ecx@70
  int v50; // [sp-1Ch] [bp-388h]@71
  int v51; // [sp-18h] [bp-384h]@71
  int v52; // [sp-14h] [bp-380h]@71
  char *pcTemp; // [sp+4h] [bp-368h]@11
  int pkTestWin; // [sp+8h] [bp-364h]@18
  PROTO_KQ_INFO *pData; // [sp+Ch] [bp-360h]@2
  char *pPosEndTest; // [sp+10h] [bp-35Ch]@19
  CSpFont *pkFont; // [sp+14h] [bp-358h]@18
  int pkFonta; // [sp+14h] [bp-358h]@38
  char c; // [sp+1Bh] [bp-351h]@37
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strResult; // [sp+1Ch] [bp-350h]@3
  unsigned int v61; // [sp+38h] [bp-334h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+40h] [bp-32Ch]@8
  char szTemp2[256]; // [sp+5Ch] [bp-310h]@11
  char szTemp[256]; // [sp+15Ch] [bp-210h]@3
  char dest; // [sp+25Ch] [bp-110h]@11
  char dst; // [sp+25Dh] [bp-10Fh]@11
  char szTest[128]; // [sp+2DCh] [bp-90h]@67
  unsigned int v68; // [sp+35Ch] [bp-10h]@1
  int v69; // [sp+368h] [bp-4h]@5
  int v70; // [sp+36Ch] [bp+0h]@1

  v68 = (unsigned int)&v70 ^ __security_cookie;
  v2 = this;
  if ( kQuestHandle != -1 )
  {
    SlideListWin::RemoveAllList(this->m_pListWinContent);
    v3 = CKQ::Get(&v2->m_kKindomQuestData, kQuestHandle);
    pData = v3;
    if ( v3 )
    {
      v4 = v3;
      v2->m_SelectedKQHandle = v3->baseclass_0.Handle;
      v5 = TextData::Get(0x9A9A9181u);
      sprintf(szTemp, v5);
      SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      SlideListWin::AddText(v2->m_pListWinContent, &byte_9BC0AF);
      memcpy(&strResult, &v4->baseclass_0.tm_StartTime, 0x24u);
      v6 = TextData2::Get(0x5A55283Cu);
      sprintf(szTemp, v6);
      v7 = SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      v8 = TextData::Get(0x3841364Fu);
      sprintf(szTemp, v8);
      SlideListWin::SetText(v2->m_pListWinContent, v7, 1u, szTemp);
      v9 = TextData::Get(0xE608F644u);
      sprintf(szTemp, v9);
      v10 = SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      v11 = TextData::Get(0xC2EADB35u);
      SlideListWin::AddText(v2->m_pListWinContent, v11);
      v12 = TextData::Get(0x2D4A4395u);
      sprintf(szTemp, v12);
      SlideListWin::SetText(v2->m_pListWinContent, v10, 1u, szTemp);
      v13 = pData->baseclass_0.Status;
      if ( v13 == 2 || v13 == 4 )
      {
        v61 = 15;
        *(_DWORD *)&strResult.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
        strResult.baseclass_0.___u0._Bx._Buf[8] = 0;
        v14 = v2->m_SelectedKQHandle;
        v69 = 0;
        if ( v14 == v2->m_kKQJoiner.Handle )
        {
          v15 = 0;
          if ( v2->m_kKQJoiner.nJoinCnt > 0 )
          {
            v16 = (int)&v2->m_kKQJoiner.kJoiner[0].n5_name[8];
            do
            {
              v17 = *(_DWORD *)(v16 - 8);
              v18 = *(_DWORD *)v16;
              *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[8] = *(_DWORD *)(v16 - 4);
              v19 = *(_DWORD *)(v16 + 8);
              *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[4] = v17;
              v20 = *(_DWORD *)(v16 + 4);
              thisa.baseclass_0._Myres = v19;
              v21 = &thisa.baseclass_0.___u0._Bx._Buf[4];
              thisa.baseclass_0._Mysize = v20;
              *(_DWORD *)&thisa.baseclass_0.___u0._Bx._Buf[12] = v18;
              thisa.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
              do
                v22 = *v21++;
              while ( v22 );
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strResult + 8),
                &thisa.baseclass_0.___u0._Bx._Buf[4],
                v21 - &thisa.baseclass_0.___u0._Bx._Buf[5]);
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strResult + 8),
                ", ",
                2u);
              ++v15;
              v16 += 20;
            }
            while ( v15 < v2->m_kKQJoiner.nJoinCnt );
          }
        }
        dest = 0;
        memset(&dst, 0, 0xFFu);
        szTemp2[0] = 0;
        memset(&szTemp2[1], 0, 0xFFu);
        v23 = fs(0);
        v24 = *(char **)&strResult.baseclass_0.___u0._Bx._Buf[8];
        pcTemp = v23;
        if ( v61 < 0x10 )
          v24 = &strResult.baseclass_0.___u0._Bx._Buf[8];
        strncpy(v23, v24, *(unsigned int *)&strResult.baseclass_0._Alval.baseclass_0.dummy[0]);
        v23[*(_DWORD *)&strResult.baseclass_0._Alval.baseclass_0.dummy[0]] = 0;
        v25 = v2->m_pListWinContent;
        if ( (signed int)((char *)v25->m_vecButList.baseclass_0._Mylast
                        - *(_DWORD *)&v25->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
        {
          v27 = *(_DWORD *)&v25->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
          if ( (*(_DWORD *)(*(_DWORD *)v27 + 336) - *(_DWORD *)(*(_DWORD *)v27 + 332)) >> 2 )
            v26 = **(_DWORD **)(*(_DWORD *)v27 + 332);
          else
            v26 = 0;
        }
        else
        {
          v26 = 0;
        }
        pkTestWin = v26;
        pkFont = *(CSpFont **)(*(_DWORD *)(v26 + 288) + 312);
        if ( pkFont )
        {
          v28 = (double)(unsigned int)(2 * (*(int (**)(void))(*(_DWORD *)v26 + 144))());
          v29 = CSpFont::SplitStrByPixelSize(pkFont, v23, (signed int)(v28 / 1.049999952316284), 0);
          pPosEndTest = v29;
          while ( pPosEndTest )
          {
            v30 = v29 - pcTemp;
            strncpy(&dest, pcTemp, v29 - pcTemp);
            v31 = v29 - pcTemp - 2;
            *(&dest + v29 - pcTemp) = 0;
            if ( (signed int)(v29 - pcTemp - 2) > 0 && *(&dest + v31) != 44 )
            {
              v32 = 2;
              while ( *(&dest + v31) != 44 )
              {
                --v31;
                ++v32;
                if ( v31 <= 0 )
                  goto LABEL_27;
              }
              *(&dest + v31) = 0;
LABEL_27:
              v29 -= v32;
            }
            pcTemp = v29;
            v33 = (double)(unsigned int)(2 * (*(int (**)(void))(*(_DWORD *)pkTestWin + 144))());
            v29 = CSpFont::SplitStrByPixelSize(pkFont, v29, (signed int)(v33 / 1.049999952316284), 0);
            v34 = (double)(unsigned int)(2 * (*(int (**)(void))(*(_DWORD *)pkTestWin + 144))());
            if ( CSpFont::SplitStrByPixelSize(pkFont, pPosEndTest, (signed int)(v34 / 1.049999952316284), 0) )
            {
              pPosEndTest = v29;
            }
            else
            {
              if ( v30 - 2 > 0 )
                szTemp[v30 + 254] = 0;
              pPosEndTest = 0;
            }
            sprintf(szTemp2, "  %s");
            SlideListWin::AddText(v2->m_pListWinContent, szTemp2);
          }
        }
        v69 = -1;
        if ( v61 >= 0x10 )
          operator delete(*(void **)&strResult.baseclass_0.___u0._Bx._Buf[8]);
      }
      SlideListWin::AddText(v2->m_pListWinContent, &byte_9BC0B6);
      v35 = TextData::Get(0xA6A69872u);
      SlideListWin::AddText(v2->m_pListWinContent, v35);
      v36 = CDataReader::GetRecord(
              (CDataReader *)(ITableBase<KINGDOM_QUEST_DESC_KQDescTable>::ms_pkTable + 4),
              pData->baseclass_0.ID);
      if ( v36 )
      {
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v69 = 1;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "   ", 3u);
        v37 = *((_BYTE *)v36 + 2);
        c = v37;
        if ( v37 )
        {
          for ( pkFonta = (int)((char *)v36 + 2); ; v37 = *(_BYTE *)pkFonta )
          {
            if ( v37 == 10 )
            {
              v38 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
              if ( thisa.baseclass_0._Myres < 0x10 )
                v38 = &thisa;
              SlideListWin::AddText(v2->m_pListWinContent, v38->baseclass_0.___u0.baseclass_0.dummy);
              v39 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
              thisa.baseclass_0._Mysize = 0;
              if ( thisa.baseclass_0._Myres < 0x10 )
                v39 = &thisa;
              v39->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "   ", 3u);
              goto LABEL_61;
            }
            if ( -1 - thisa.baseclass_0._Mysize <= 1
              || (v40 = thisa.baseclass_0._Mysize + 1, thisa.baseclass_0._Mysize + 1 > 0xFFFFFFFE) )
              std::_Xlength_error("string too long");
            if ( thisa.baseclass_0._Myres >= v40 )
            {
              v41 = v40 == 0;
              if ( thisa.baseclass_0._Mysize != -1 )
                goto LABEL_55;
              v42 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
              thisa.baseclass_0._Mysize = 0;
              if ( thisa.baseclass_0._Myres < 0x10 )
                v42 = &thisa;
              v42->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            }
            else
            {
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(
                &thisa,
                thisa.baseclass_0._Mysize + 1,
                thisa.baseclass_0._Mysize);
              v37 = c;
            }
            v41 = v40 == 0;
LABEL_55:
            if ( !v41 )
            {
              v43 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
              if ( thisa.baseclass_0._Myres < 0x10 )
                v43 = &thisa;
              v43->baseclass_0.___u0.baseclass_0.dummy[thisa.baseclass_0._Mysize] = v37;
              v44 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
              thisa.baseclass_0._Mysize = v40;
              if ( thisa.baseclass_0._Myres < 0x10 )
                v44 = &thisa;
              v44->baseclass_0.___u0.baseclass_0.dummy[v40] = 0;
            }
LABEL_61:
            ++pkFonta;
            c = *(_BYTE *)pkFonta;
            if ( !*(_BYTE *)pkFonta )
              break;
          }
        }
        v45 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
        if ( thisa.baseclass_0._Myres < 0x10 )
          v45 = &thisa;
        SlideListWin::AddText(v2->m_pListWinContent, v45->baseclass_0.___u0.baseclass_0.dummy);
        SlideListWin::AlignText(v2->m_pListWinContent, 4u);
        v69 = -1;
        if ( thisa.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&thisa);
      }
      else
      {
        sprintf(szTest, "%d KQDesc Not Found");
        SlideListWin::AddText(v2->m_pListWinContent, szTest);
      }
      SlideListWin::UpdateViewList(v2->m_pListWinContent);
      v46 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v46 )
      {
        v47 = v2->m_pListWinTime;
        v48 = v47->m_nViewStartPos;
        if ( v48 < v47->m_nMaxViewListCnt )
        {
          do
          {
            v49 = v2->m_pListWinTime;
            if ( v46[140].m_BackFrameID == (void *)1 )
            {
              SlideListWin::SetCurSelIndex(v49, -1);
              ((void (__stdcall *)(_DWORD))v2->m_pListWinTime->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              v52 = 128;
              v51 = 128;
              v50 = 128;
            }
            else
            {
              ((void (__stdcall *)(signed int))v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              v52 = 255;
              v51 = 255;
              v50 = 255;
            }
            SlideListWin::SetFontColor(v2->m_pListWinTime, v48++, v50, v51, v52);
          }
          while ( v48 < v2->m_pListWinTime->m_nMaxViewListCnt );
        }
      }
      SlideBar::SetSplitCnt(v2->m_pSlideBarContentEx, v2->m_pListWinContent->m_nSlideSplitCnt);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97E30: using guessed type int ITableBase_KINGDOM_QUEST_DESC_KQDescTable___ms_pkTable;

//----- (005F9A80) --------------------------------------------------------
void __thiscall KingdomQuestPlayerList::UpdateMeWin(KingdomQuestPlayerList *this, float fCurTime)
{
  KingdomQuestPlayerList::UpdateTimer(this, fCurTime);
}

//----- (005F9AA0) --------------------------------------------------------
void __thiscall KingdomQuestTeamList::UpdateMeWin(KingdomQuestTeamList *this, float fCurTime)
{
  KingdomQuestTeamList::UpdateTimer(this, fCurTime);
}

//----- (005F9AC0) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnListClick(KingdomQuestWin *this, int nIndex)
{
  KingdomQuestWin *v2; // esi@1
  int v3; // eax@1
  unsigned int v4; // edi@5
  PROTO_KQ_INFO *v5; // eax@5
  KQTeam *v6; // eax@6
  int dwData; // [sp+4h] [bp-4h]@2

  v2 = this;
  v3 = SlideListWin::GetCurSelIndex(this->m_pListWinTime);
  if ( v3 >= 0 )
  {
    SlideListWin::GetData(v2->m_pListWinTime, v3, (unsigned int *)&dwData);
    if ( dwData < v2->m_kKindomQuestData.m_NumOfSchedule )
    {
      GameFrameWork::NcKqStatusReq(
        (GameFrameWork *)v2->baseclass_0.m_pkFrameWork,
        v2->m_kKindomQuestData.m_Schedule[dwData].baseclass_0.Handle);
      KingdomQuestWin::UpdateContentView(v2, nIndex);
      GameFrameWork::SetJoinHandle((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v2->m_SelectedKQHandle);
      if ( (unsigned __int8)((int (*)(void))v2->m_pkKingdomQuestPlayerList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
        || (unsigned __int8)((int (*)(void))v2->m_pkKingdomQuestTeamList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        v4 = 0;
        v5 = CKQ::Get(&v2->m_kKindomQuestData, v2->m_SelectedKQHandle);
        if ( v5 )
        {
          v6 = KQTeamTable::GetByID(v5->baseclass_0.ID);
          if ( v6 )
            v4 = v6->KQTeamDivideType;
        }
        ((void (__stdcall *)(_DWORD))v2->m_pkKingdomQuestPlayerList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkKingdomQuestTeamList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        SlideListWin::RemoveAllList(v2->m_pkKingdomQuestPlayerList->m_pkListWin);
        KingdomQuestTeamList::ReSetList(v2->m_pkKingdomQuestTeamList);
        KingdomQuestWin::OpenSideWin(v2, v4);
      }
    }
  }
}

//----- (005F9BE0) --------------------------------------------------------
void __thiscall KingdomQuestWin::SetKQuestStatus(KingdomQuestWin *this, PROTO_NC_KQ_STATUS_ACK *pkInfo)
{
  unsigned int v2; // edi@2
  char *v3; // edx@3
  char *v4; // eax@3

  if ( pkInfo )
  {
    this->m_kKQJoiner.Handle = pkInfo->Handle;
    this->m_kKQJoiner.nJoinCnt = pkInfo->NumOfJoiner;
    v2 = 0;
    if ( pkInfo->NumOfJoiner > 0u )
    {
      v3 = &this->m_kKQJoiner.kJoiner[0].n5_name[8];
      v4 = (char *)&pkInfo[2].Handle + 1;
      do
      {
        *((_DWORD *)v3 - 2) = *((_DWORD *)v4 - 2);
        *((_DWORD *)v3 - 1) = *((_DWORD *)v4 - 1);
        *(_DWORD *)v3 = *(_DWORD *)v4;
        *((_DWORD *)v3 + 1) = *((_DWORD *)v4 + 1);
        *((_DWORD *)v3 + 2) = *((_DWORD *)v4 + 2);
        ++v2;
        v4 += 20;
        v3 += 20;
      }
      while ( v2 < pkInfo->NumOfJoiner );
    }
    KingdomQuestWin::UpdateContentView(this, 0);
  }
}

//----- (005F9C50) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnShowWin(KingdomQuestWin *this)
{
  KingdomQuestWin *v1; // esi@1
  PgFrameWork *v2; // eax@1
  Name5 *v3; // eax@4
  PROTO_AVATARINFORMATION *v4; // eax@4
  unsigned int v5; // eax@5
  char *v6; // eax@15
  bool v7; // [sp+0h] [bp-8h]@10
  unsigned int v8; // [sp+0h] [bp-8h]@13

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 && v2[140].m_BackFrameID == (void *)1 )
  {
    if ( v1->m_JoinHandle == -1 && (v3 = User::GetMainCharID(&g_kUser), (v4 = User::GetAvatarInfo(&g_kUser, v3)) != 0) )
      v5 = v4->nKQHandle;
    else
      v5 = v1->m_JoinHandle;
    KingdomQuestWin::UpdateContentView(v1, v5);
  }
  v7 = byte_B30C4C != 1 && byte_B30C4C != 2;
  KingdomQuestWin::SetView(v1, v7);
  v1->m_bGetServerTime = 0;
  CNSTimer_Interval::ReSet(&v1->m_kTimerInterval, Timer::ms_fCurTime);
  KingdomQuestWin::UpdateAllList(v1);
  if ( v1->baseclass_0.m_pkFrameWork[140].m_BackFrameID == (void *)1 )
  {
    v8 = -2085694304;
  }
  else
  {
    SlideListWin::SetCurSelIndex(v1->m_pListWinTime, -1);
    v8 = -2002217372;
  }
  v6 = TextData2::Get(v8);
  PgWin::SetToolTipWinText(&v1->m_pkPlayerListBtn->baseclass_0.baseclass_0, v6);
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// B30C4C: using guessed type char byte_B30C4C;

//----- (005F9D20) --------------------------------------------------------
void __thiscall KingdomQuestWin::OnCommand(KingdomQuestWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 1u:
      KingdomQuestWin::OnWinClose(this);
      break;
    case 2u:
      KingdomQuestWin::OnSortByTitle(this);
      break;
    case 3u:
      KingdomQuestWin::OnSortByUsercnt(this);
      break;
    case 4u:
      KingdomQuestWin::OnSortByStarttime(this);
      break;
    case 5u:
      KingdomQuestWin::OnSortBYState(this);
      break;
    case 6u:
      KingdomQuestWin::OnOK(this);
      break;
    case 7u:
      KingdomQuestWin::OnCancel(this);
      break;
    case 8u:
      KingdomQuestWin::OnListClick(this, lParam);
      break;
    case 9u:
      KingdomQuestWin::OnListClick(this, lParam);
      break;
    case 0xAu:
      KingdomQuestWin::OnSlideBarTime(this);
      break;
    case 0xBu:
      KingdomQuestWin::OnSlideBarContent(this);
      break;
    case 0xCu:
      KingdomQuestWin::OnMyList(this);
      break;
    case 0xDu:
      KingdomQuestWin::OnAllList(this);
      break;
    case 0xEu:
      KingdomQuestWin::OnHelpLink(this);
      break;
    case 0xFu:
      KingdomQuestWin::OnPlayerList(this);
      break;
    default:
      return;
  }
}

//----- (005F9E10) --------------------------------------------------------
bool __thiscall KingdomQuestWin::Create(KingdomQuestWin *this, PgFrameWork *pkFrameWork)
{
  KingdomQuestWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  PgSprData *v9; // eax@9
  NiNode *v10; // esi@12
  bool result; // al@16
  int v12; // edi@17
  int v13; // ebx@17
  NiSourceTexture *v14; // eax@17
  PgSprData *v15; // eax@20
  NiTexturingProperty *v16; // esi@21
  NiNode *v17; // esi@23
  PgFont *v18; // eax@27
  PgWinText *v19; // eax@27
  NiRefObjectVtbl *v20; // edx@27
  char *v21; // eax@27
  PgSprData *v22; // eax@27
  PgWinSpr *v23; // eax@27
  PgSprData *v24; // eax@27
  PgWinSpr *v25; // eax@27
  SLWCreateInfo::Item *v26; // eax@27
  PgSprData *v27; // eax@41
  SlideListWin *v28; // eax@41
  SLWCreateInfo::Item *v29; // eax@41
  PgSprData *v30; // eax@47
  SlideListWin *v31; // eax@47
  void *v32; // eax@47
  SlideBar *v33; // eax@47
  NiRefObjectVtbl *v34; // eax@47
  void *v35; // ecx@47
  int (*v36)(void); // eax@47
  int v37; // eax@47
  int v38; // eax@47
  NiObjectNET *v39; // eax@47
  NiObjectNET *v40; // eax@47
  NiObjectNET *v41; // eax@47
  NiObjectNET *v42; // eax@47
  NiObjectNET *v43; // eax@47
  NiObjectNET *v44; // eax@47
  SlideBar *v45; // eax@47
  NiRefObjectVtbl *v46; // eax@47
  void *v47; // ecx@47
  int (*v48)(void); // eax@47
  int v49; // eax@47
  int v50; // eax@47
  int v51; // eax@47
  void *v52; // edx@47
  PgFont *v53; // eax@47
  PgWinText *v54; // eax@47
  NiRefObjectVtbl *v55; // edx@47
  char *v56; // eax@47
  int v57; // eax@47
  void *v58; // edx@47
  PgFont *v59; // eax@47
  PgWinText *v60; // eax@47
  NiRefObjectVtbl *v61; // edx@47
  char *v62; // eax@47
  int v63; // eax@47
  void *v64; // edx@47
  PgFont *v65; // eax@47
  PgWinText *v66; // eax@47
  NiRefObjectVtbl *v67; // edx@47
  char *v68; // eax@47
  int v69; // eax@47
  void *v70; // edx@47
  PgFont *v71; // eax@47
  PgWinText *v72; // eax@47
  NiRefObjectVtbl *v73; // edx@47
  char *v74; // eax@47
  PgWinBut *v75; // eax@47
  void *v76; // edx@47
  int v77; // eax@47
  void *v78; // edx@47
  PgFont *v79; // eax@47
  PgWinText *v80; // eax@47
  char *v81; // eax@47
  void *v82; // eax@47
  PgWinBut *v83; // eax@47
  void *v84; // ecx@47
  int v85; // eax@47
  void *v86; // edx@47
  PgFont *v87; // eax@47
  PgWinText *v88; // eax@47
  D3DXCOLOR *v89; // eax@47
  char *v90; // eax@47
  void *v91; // eax@47
  PgWinBut *v92; // eax@47
  void *v93; // ecx@47
  int v94; // eax@47
  void *v95; // edx@47
  PgFont *v96; // eax@47
  PgWinText *v97; // eax@47
  char *v98; // eax@47
  PgWinBut *v99; // eax@47
  void *v100; // ecx@47
  int v101; // eax@47
  void *v102; // edx@47
  PgFont *v103; // eax@47
  PgWinText *v104; // eax@47
  char *v105; // eax@47
  void *v106; // eax@47
  NiRefObjectVtbl *v107; // edx@47
  char *v108; // eax@49
  PgFrameWork *v109; // ecx@49
  void *v110; // edx@49
  int v111; // eax@49
  void *v112; // edx@49
  void *v113; // eax@49
  PgWin *v114; // STDC_4@49
  PgFont *v115; // eax@49
  PgWinText *v116; // eax@49
  NiRefObjectVtbl *v117; // edx@49
  char *v118; // eax@49
  KingdomQuestPlayerList *v119; // eax@51
  KingdomQuestTeamList *v120; // eax@53
  KingdomQuestTeamList *v121; // ecx@53
  void *(__thiscall *v122)(NiRefObject *, unsigned int); // eax@53
  PgSprData::PgHitTester *v123; // eax@53
  void *v124; // ecx@53
  void *v125; // edx@53
  PgFont *v126; // eax@53
  PgWinText *v127; // eax@53
  PgWinText *v128; // ecx@53
  void *(__thiscall *v129)(NiRefObject *, unsigned int); // eax@53
  NiRefObjectVtbl *v130; // edi@53
  NiTexturingProperty *v131; // edi@53
  NiNode *v132; // edi@55
  const char *v133; // [sp+D4h] [bp-90h]@18
  int *v134; // [sp+D8h] [bp-8Ch]@18
  int *v135; // [sp+DCh] [bp-88h]@18
  NiSourceTexture *v136; // [sp+E0h] [bp-84h]@18
  unsigned int v137; // [sp+E4h] [bp-80h]@1
  unsigned int v138; // [sp+E8h] [bp-7Ch]@49
  PgWin *v139; // [sp+ECh] [bp-78h]@49
  unsigned int uiWidth; // [sp+F4h] [bp-70h]@20
  unsigned int uiHeight; // [sp+F8h] [bp-6Ch]@20
  SLWCreateInfo kCreateInfo; // [sp+FCh] [bp-68h]@27
  NiPointer<NiTexturingProperty> spTexProp; // [sp+118h] [bp-4Ch]@4
  NiSourceTexture *pkTexture; // [sp+11Ch] [bp-48h]@7
  PgFrameWork *pkButWin; // [sp+120h] [bp-44h]@1
  unsigned int pkTexture8; // [sp+124h] [bp-40h]@47
  int uiTop; // [sp+128h] [bp-3Ch]@9
  int uiLeft; // [sp+12Ch] [bp-38h]@9
  NiPointer<NiNode> spNode; // [sp+130h] [bp-34h]@1
  void *pkTextWin; // [sp+134h] [bp-30h]@27
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+138h] [bp-2Ch]@27
  unsigned int v152; // [sp+154h] [bp-10h]@1
  int v153; // [sp+160h] [bp-4h]@1
  int v154; // [sp+164h] [bp+0h]@1

  v152 = (unsigned int)&v154 ^ __security_cookie;
  v137 = (unsigned int)&v154 ^ __security_cookie;
  v2 = this;
  pkButWin = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v153 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCKDQuest.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v153) = 1;
  if ( v8 )
    pkTexture = (NiSourceTexture *)v8[1].__vecDelDtor;
  else
    pkTexture = 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, pkTexture);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkButWin, "KingdomQuestWin", 0) )
  {
    LOBYTE(v153) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v153 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = uiLeft;
  v13 = uiTop;
  v14 = MenuTexMgr::GetTexture(0x13u);
  if ( v14 )
  {
    v136 = v14;
    v135 = &uiTop;
    v134 = &uiLeft;
    v133 = "Theme";
  }
  else
  {
    v136 = 0;
    v135 = &uiTop;
    v134 = &uiLeft;
    v133 = "Theme";
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v133, v134, v135, v136);
  PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(MAIN_MENU);
    v19 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v19;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v20[122].__vecDelDtor)(v19, 1, v137);
    (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
    pkButWin = (PgFrameWork *)(*(_DWORD *)pkTextWin + 472);
    v21 = TextData::Get(0x94ABFCF8u);
    ((void (__thiscall *)(void *, char *))pkButWin->baseclass_0.vfptr)(pkTextWin, v21);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v23 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      1u);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    v25 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v153) = 2;
    v26 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v26->nItemType = 1;
    v26->pNode = spNode.m_pObject;
    pkTextWin = v26;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    LOBYTE(v153) = 3;
    pkTextWin = (char *)pkTextWin + 72;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v153) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v153) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
    LOBYTE(v153) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
    LOBYTE(v153) = 7;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
    LOBYTE(v153) = 8;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
    LOBYTE(v153) = 9;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, pkTexture);
    v28 = SlideListWin::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            v27,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            3u,
            0);
    v2->m_pListWinTime = v28;
    v28->m_uiRClickMsg = 8;
    v2->m_pListWinTime->m_uiLClickMsg = 9;
    SLWCreateInfo::Clear(&kCreateInfo);
    v29 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v29->nItemType = 1;
    v29->pNode = spNode.m_pObject;
    pkTextWin = v29;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor01", 0xEu);
    LOBYTE(v153) = 10;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column05", 8u);
    LOBYTE(v153) = 11;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column06", 8u);
    LOBYTE(v153) = 12;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText02", &uiLeft, &uiTop, pkTexture);
    v31 = SlideListWin::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            v30,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            4u,
            0);
    v2->m_pListWinContent = v31;
    SlideListWin::AlignText(v31, 4u);
    SlideListWin::UpdateViewList(v2->m_pListWinContent);
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
    pkTextWin = v32;
    v33 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            (PgSprData *)v32,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarTimeEx = v33;
    v33->m_uiClickMsg = 10;
    v2->m_pSlideBarTimeEx->m_eType = 1;
    v34 = v2->m_pSlideBarTimeEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v35 = v2->m_pSlideBarTimeEx;
    pkTexture8 = (unsigned int)v34;
    v36 = (int (*)(void))v34[42].__vecDelDtor;
    pkButWin = (PgFrameWork *)v35;
    v37 = v36();
    v38 = ((int (__stdcall *)(int))pkButWin->baseclass_0.vfptr[6].DirectDispatchToParent)(v37);
    (*(void (__thiscall **)(SlideBar *, int))(pkTexture8 + 308))(v2->m_pSlideBarTimeEx, v38);
    v39 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor01");
    NiObjectNET::SetName(v39, "SlideBar_DnBtn01Nor");
    v40 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick01");
    NiObjectNET::SetName(v40, "SlideBar_DnBtn01Click");
    v41 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver01");
    NiObjectNET::SetName(v41, "SlideBar_DnBtn01Over");
    v42 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor01");
    NiObjectNET::SetName(v42, "SlideBar_UpBtn01Nor");
    v43 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick01");
    NiObjectNET::SetName(v43, "SlideBar_UpBtn01Click");
    v44 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver01");
    NiObjectNET::SetName(v44, "SlideBar_UpBtn01Over");
    v45 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar01",
            "SlideBar_UpBtn01",
            "SlideBar_DnBtn01",
            (PgSprData *)pkTextWin,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarContentEx = v45;
    v45->m_uiClickMsg = 11;
    v2->m_pSlideBarContentEx->m_eType = 1;
    v46 = v2->m_pSlideBarContentEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v47 = v2->m_pSlideBarContentEx;
    pkButWin = (PgFrameWork *)v46;
    v48 = (int (*)(void))v46[42].__vecDelDtor;
    pkTexture8 = (unsigned int)v47;
    v49 = v48();
    v50 = (*(int (__stdcall **)(int))(*(_DWORD *)pkTexture8 + 164))(v49);
    ((void (__thiscall *)(SlideBar *, int))pkButWin[8].m_kMsgQ.m_uiHead)(v2->m_pSlideBarContentEx, v50);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      2u,
      0,
      0);
    v51 = **((_DWORD **)pkTextWin + 9);
    v52 = *(void **)(v51 + 20);
    pkTexture8 = *(_DWORD *)(v51 + 24);
    pkButWin = (PgFrameWork *)v52;
    v53 = Font::Get(MAIN_MENU);
    v54 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkButWin,
            pkTexture8,
            v53,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v55 = v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v54;
    v55[122].__vecDelDtor((NiRefObject *)v54, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v56 = TextData::Get(0x94F8F4F9u);
    (*(void (__thiscall **)(void *, char *))pkTexture8)(pkTextWin, v56);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      3u,
      0,
      0);
    v57 = **((_DWORD **)pkTextWin + 9);
    v58 = *(void **)(v57 + 20);
    pkTexture8 = *(_DWORD *)(v57 + 24);
    pkButWin = (PgFrameWork *)v58;
    v59 = Font::Get(MAIN_MENU);
    v60 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkButWin,
            pkTexture8,
            v59,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v61 = v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v60;
    v61[122].__vecDelDtor((NiRefObject *)v60, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v62 = TextData::Get(0xCE1D3A35u);
    (*(void (__thiscall **)(void *, char *))pkTexture8)(pkTextWin, v62);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      4u,
      0,
      0);
    v63 = **((_DWORD **)pkTextWin + 9);
    v64 = *(void **)(v63 + 20);
    pkTexture8 = *(_DWORD *)(v63 + 24);
    pkButWin = (PgFrameWork *)v64;
    v65 = Font::Get(MAIN_MENU);
    v66 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkButWin,
            pkTexture8,
            v65,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v67 = v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v66;
    v67[122].__vecDelDtor((NiRefObject *)v66, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v68 = TextData::Get(0x75948EF3u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(pkTextWin, v68);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      5u,
      0,
      0);
    v69 = **((_DWORD **)pkTextWin + 9);
    v70 = *(void **)(v69 + 20);
    pkTexture8 = *(_DWORD *)(v69 + 24);
    pkButWin = (PgFrameWork *)v70;
    v71 = Font::Get(MAIN_MENU);
    v72 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkButWin,
            pkTexture8,
            v71,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v73 = v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v72;
    v73[122].__vecDelDtor((NiRefObject *)v72, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v74 = TextData::Get(0xF207FCE6u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(pkTextWin, v74);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OkNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "OkClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "OkOver");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "OkDisable");
    v75 = PgWinBut::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            6u,
            0,
            0);
    v76 = pkTextWin;
    v2->m_pJoinOk = v75;
    v77 = **((_DWORD **)v76 + 9);
    v78 = *(void **)(v77 + 20);
    pkTexture8 = *(_DWORD *)(v77 + 24);
    pkButWin = (PgFrameWork *)v78;
    v79 = Font::Get(MAIN_MENU);
    v80 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkButWin,
            pkTexture8,
            v79,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pTexJoinOk = v80;
    v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v80,
      5u);
    pkTexture8 = (unsigned int)&v2->m_pTexJoinOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v81 = TextData::Get(0x8B779780u);
    (*(void (__thiscall **)(PgWinText *, char *))pkTexture8)(v2->m_pTexJoinOk, v81);
    ((void (__stdcall *)(_DWORD))v2->m_pTexJoinOk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v82 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01", &uiLeft, &uiTop, pkTexture);
    pkTextWin = v82;
    v83 = PgWinBut::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            (PgSprData *)v82,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0xCu,
            0,
            0);
    v84 = pkTextWin;
    v2->m_pMyList = v83;
    v85 = **((_DWORD **)v84 + 9);
    v86 = *(void **)(v85 + 20);
    pkTexture8 = *(_DWORD *)(v85 + 24);
    pkButWin = (PgFrameWork *)v86;
    v87 = Font::Get(MAIN_MENU);
    v88 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkButWin,
            pkTexture8,
            v87,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pTexMyList = v88;
    v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v88,
      5u);
    pkTexture8 = (unsigned int)&v2->m_pTexMyList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117];
    v89 = Color::GetDxColor((D3DXCOLOR *)&thisa.baseclass_0.___u0._Bx._Buf[12], -1, -1, 0, -1);
    (*(void (__thiscall **)(PgWinText *, D3DXCOLOR *))pkTexture8)(v2->m_pTexMyList, v89);
    pkTexture8 = (unsigned int)&v2->m_pTexMyList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v90 = TextData::Get(0xF7F5F458u);
    (*(void (__thiscall **)(PgWinText *, _DWORD))pkTexture8)(v2->m_pTexMyList, v90);
    ((void (__stdcall *)(_DWORD))v2->m_pTexMyList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v91 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02", &uiLeft, &uiTop, pkTexture);
    pkTextWin = v91;
    v92 = PgWinBut::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            (PgSprData *)v91,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0xDu,
            0,
            0);
    v93 = pkTextWin;
    v2->m_pAllList = v92;
    v94 = **((_DWORD **)v93 + 9);
    v95 = *(void **)(v94 + 20);
    pkTexture8 = *(_DWORD *)(v94 + 24);
    pkButWin = (PgFrameWork *)v95;
    v96 = Font::Get(MAIN_MENU);
    v97 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkButWin,
            pkTexture8,
            v96,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pTexAllList = v97;
    v97->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v97,
      5u);
    pkTexture8 = (unsigned int)&v2->m_pTexAllList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v98 = TextData::Get(0xE0EC5B44u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(v2->m_pTexAllList, v98);
    ((void (__stdcall *)(_DWORD))v2->m_pTexAllList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelBtnNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "OkClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "OkOver");
    v99 = PgWinBut::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            7u,
            0,
            0);
    v100 = pkTextWin;
    v2->m_pJoinCancel = v99;
    v101 = **((_DWORD **)v100 + 9);
    v102 = *(void **)(v101 + 20);
    pkTexture8 = *(_DWORD *)(v101 + 24);
    pkButWin = (PgFrameWork *)v102;
    v103 = Font::Get(MAIN_MENU);
    v104 = PgWinText::CreateWin(
             uiLeft - v12,
             uiTop - v13 + 1,
             (unsigned int)pkButWin,
             pkTexture8,
             v103,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pTexJoinCancel = v104;
    v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v104,
      5u);
    pkTexture8 = (unsigned int)&v2->m_pTexJoinCancel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v105 = TextData::Get(0x213635A0u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(v2->m_pTexJoinCancel, v105);
    ((void (__stdcall *)(_DWORD))v2->m_pTexJoinCancel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      1u,
      0,
      0);
    v106 = MenuTexMgr::GetTexture(4u);
    v107 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTexture8 = (unsigned int)v106;
    if ( ((int (__stdcall *)(_DWORD))v107[18].__vecDelDtor)("HelpLinkNor") )
    {
      pkTextWin = PgSprData::Create(
                    &spNode.m_pObject->baseclass_0,
                    "HelpLinkNor",
                    &uiLeft,
                    &uiTop,
                    (NiSourceTexture *)pkTexture8);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - v12,
        uiTop - v13,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xEu,
        0,
        0);
    }
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PlayerListBtnNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PlayerListBtnClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PlayerListBtnOver");
    pkButWin = (PgFrameWork *)PgWinBut::CreateWin(
                                uiLeft - v12,
                                uiTop - v13,
                                (PgSprData *)pkTextWin,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0xFu,
                                0,
                                0);
    pkButWin[7].m_kMsgQ.m_uiHead = (unsigned int)g_pkToolTipWin;
    v108 = TextData2::Get(0x83AED4A0u);
    PgWin::SetToolTipWinText((PgWin *)pkButWin, v108);
    v109 = pkButWin;
    v110 = pkTextWin;
    v2->m_pkPlayerListBtn = (PgWinBut *)pkButWin;
    v111 = **((_DWORD **)v110 + 9);
    v112 = *(void **)(v111 + 24);
    v113 = *(void **)(v111 + 20);
    v114 = (PgWin *)v109;
    pkTexture8 = (unsigned int)v112;
    pkButWin = (PgFrameWork *)v113;
    v115 = Font::Get(MAIN_MENU);
    v116 = PgWinText::CreateWin(0, 0, (unsigned int)pkButWin, pkTexture8, v115, v114, 0, 0);
    v117 = v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v116;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int, PgWin *))v117[122].__vecDelDtor)(v116, 5, v138, v139);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v118 = TextData2::Get(0xB444334Eu);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(pkTextWin, v118);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v139 = (PgWin *)v2;
    v138 = (unsigned int)spNode.m_pObject;
    pkTexture8 = (unsigned int)&v138;
    if ( spNode.m_pObject )
      InterlockedIncrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v119 = KingdomQuestPlayerList::CreateWin((NiPointer<NiNode>)v138, v139);
    v2->m_pkKingdomQuestPlayerList = v119;
    v119->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v119,
      0);
    v139 = (PgWin *)v2;
    v138 = (unsigned int)spNode.m_pObject;
    pkTexture8 = (unsigned int)&v138;
    if ( spNode.m_pObject )
      InterlockedIncrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v120 = KingdomQuestTeamList::CreateWin((NiPointer<NiNode>)v138, v139);
    v2->m_pkKingdomQuestTeamList = v120;
    v121 = v120;
    v122 = v120->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v139 = 0;
    ((void (__thiscall *)(KingdomQuestTeamList *))v122)(v121);
    v123 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Time", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    v124 = (void *)v123->m_uiHeight;
    v125 = (void *)v123->m_uiWidth;
    v138 = 0;
    pkTexture8 = (unsigned int)v124;
    pkButWin = (PgFrameWork *)v125;
    v126 = Font::Get(MAIN_MENU);
    v127 = PgWinText::CreateWin(
             uiLeft - v12,
             uiTop - v13 + 1,
             (unsigned int)pkButWin,
             pkTexture8,
             v126,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             v138);
    v2->m_pkKQPresentTimeWin = v127;
    v128 = v127;
    v129 = v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor;
    v138 = 5;
    ((void (__thiscall *)(PgWinText *))v129)(v128);
    v130 = v2->m_pkKQPresentTimeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData::Get(0x8B779780u);
    ((void (__thiscall *)(PgWinText *))v130[118].__vecDelDtor)(v2->m_pkKQPresentTimeWin);
    ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkKQPresentTimeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkKQPresentTimeWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BC096);
    ((void (__thiscall *)(KingdomQuestWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.0,
      0.5);
    CNSTimer_Interval::ReSet(&v2->m_kTimerInterval, Timer::ms_fCurTime);
    v2->m_kTimerInterval.m_fCheckTime = 6.0;
    LOBYTE(v153) = 1;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    v131 = spTexProp.m_pObject;
    LOBYTE(v153) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v131->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v131, 1u);
    v132 = spNode.m_pObject;
    v153 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v132 )
      v132->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v132, 1u);
    result = 1;
  }
  else
  {
    v16 = spTexProp.m_pObject;
    LOBYTE(v153) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    v17 = spNode.m_pObject;
    v153 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v17 )
      return 0;
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005FB2C0) --------------------------------------------------------
bool __thiscall KingdomQuestPlayerList::Create(KingdomQuestPlayerList *this, NiPointer<NiNode> spNode, PgWin *pkParent)
{
  PgWin *v3; // edi@1
  KingdomQuestPlayerList *v4; // esi@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@1
  int v6; // ebx@1
  char *v7; // eax@3
  PgSprData *v8; // eax@4
  NiNode *v9; // esi@5
  bool result; // al@9
  int v11; // edi@10
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // edx@10
  PgSprData *v13; // ebx@10
  PgSprData *v14; // ebx@10
  PgWinBut *v15; // edi@10
  char *v16; // eax@10
  PgSprData::PgHitTester *v17; // eax@10
  unsigned int v18; // ebx@10
  PgFont *v19; // eax@10
  PgWinText *v20; // ebx@10
  NiRefObjectVtbl *v21; // edi@10
  char *v22; // eax@10
  char *v23; // eax@10
  char *v24; // eax@10
  char *v25; // eax@10
  signed int v26; // ebx@10
  NiNode *v27; // edi@11
  char *v28; // eax@11
  PgSprData *v29; // edi@11
  char *v30; // eax@11
  char *v31; // eax@11
  void *v32; // eax@11
  void (__thiscall *v33)(_DWORD, _DWORD); // edx@11
  PgSprData::PgHitTester *v34; // eax@11
  unsigned int v35; // edi@11
  unsigned int v36; // ST3C_4@11
  PgFont *v37; // eax@11
  PgWinText *v38; // edi@11
  unsigned int v39; // eax@11
  SLWCreateInfo::Item *v40; // edi@14
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v41; // edi@14
  SLWCreateInfo::Item *v42; // edi@20
  SLWCreateInfo::Item *v43; // edi@22
  SLWCreateInfo::Item *v44; // edi@24
  PgSprData *v45; // eax@26
  SlideListWin *v46; // eax@26
  NiObjectNET *v47; // eax@26
  NiObjectNET *v48; // eax@26
  NiObjectNET *v49; // eax@26
  NiObjectNET *v50; // eax@26
  NiObjectNET *v51; // eax@26
  NiObjectNET *v52; // eax@26
  PgSprData *v53; // eax@26
  SlideBar *v54; // eax@26
  SlideBar *v55; // eax@26
  NiRefObjectVtbl *v56; // ebx@26
  SlideBar *v57; // edi@26
  int v58; // eax@26
  int v59; // eax@26
  NiTexturePalette *v60; // edi@26
  NiNode *v61; // esi@29
  PgFont *v62; // eax@34
  PgWinText *v63; // eax@34
  NiRefObjectVtbl *v64; // edi@34
  char *v65; // eax@34
  NiNode *v66; // esi@36
  unsigned int uiHeight; // [sp+4h] [bp-BCh]@26
  SLWCreateInfo kCreateInfo; // [sp+8h] [bp-B8h]@14
  unsigned int uiWidth; // [sp+24h] [bp-9Ch]@26
  NiTexturePalette *iOffX; // [sp+28h] [bp-98h]@1
  unsigned int v71; // [sp+2Ch] [bp-94h]@10
  NiNode *pkBtnWin; // [sp+30h] [bp-90h]@11
  int iOffY; // [sp+34h] [bp-8Ch]@1
  int uiTop; // [sp+38h] [bp-88h]@4
  int uiLeft; // [sp+3Ch] [bp-84h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+40h] [bp-80h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kTitleString[3]; // [sp+5Ch] [bp-64h]@10
  unsigned int v78; // [sp+B0h] [bp-10h]@1
  int v79; // [sp+BCh] [bp-4h]@1
  int v80; // [sp+C0h] [bp+0h]@1

  v78 = (unsigned int)&v80 ^ __security_cookie;
  v3 = pkParent;
  v4 = this;
  v5 = pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor;
  v79 = 0;
  v6 = (int)v5(
              &pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              (unsigned int)&v80 ^ __security_cookie);
  iOffY = ((int (__thiscall *)(PgWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
  iOffX = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCKDQuest_TeamNone.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, iOffX);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, 0);
  if ( !PgWinSpr::Create(&v4->baseclass_0, uiLeft - v6, uiTop - iOffY, v8, v3, 0, 0) )
  {
    v9 = spNode.m_pObject;
    v79 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
    return 0;
  }
  v11 = ((int (__thiscall *)(KingdomQuestPlayerList *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v4);
  v12 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
  iOffX = (NiTexturePalette *)v11;
  iOffY = ((int (__thiscall *)(KingdomQuestPlayerList *))v12)(v4);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor01", &uiLeft, &uiTop, 0);
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "ClsClick01");
  PgSprData::Add(v13, &spNode.m_pObject->baseclass_0, "ClsOver01");
  PgWinBut::CreateWin(uiLeft - v11, uiTop - iOffY, v13, &v4->baseclass_0.baseclass_0, 0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "BtnOver");
  v15 = PgWinBut::CreateWin(uiLeft - v11, uiTop - iOffY, v14, &v4->baseclass_0.baseclass_0, 2u, 0, 0);
  v15->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v16 = TextData2::Get(0x283CA263u);
  PgWin::SetToolTipWinText(&v15->baseclass_0.baseclass_0, v16);
  v17 = v14->m_akHitTester.m_pBase->m_pObject;
  v18 = v17->m_uiHeight;
  v71 = v17->m_uiWidth;
  v19 = Font::Get(MAIN_MENU);
  v20 = PgWinText::CreateWin(0, 0, v71, v18, v19, &v15->baseclass_0.baseclass_0, 0, 0);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v20,
    5u);
  v21 = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v22 = TextData2::Get(0x8332EB1u);
  v21[118].__vecDelDtor((NiRefObject *)v20, (unsigned int)v22);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  v23 = TextData::Get(0x98A49F99u);
  kTitleString[0].baseclass_0._Myres = 15;
  kTitleString[0].baseclass_0._Mysize = 0;
  kTitleString[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kTitleString, v23, strlen(v23));
  LOBYTE(v79) = 1;
  v24 = TextData::Get(0x96B28AA0u);
  kTitleString[1].baseclass_0._Myres = 15;
  kTitleString[1].baseclass_0._Mysize = 0;
  kTitleString[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kTitleString[1], v24, strlen(v24));
  LOBYTE(v79) = 2;
  v25 = TextData::Get(0x4EA49695u);
  kTitleString[2].baseclass_0._Myres = 15;
  kTitleString[2].baseclass_0._Mysize = 0;
  kTitleString[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kTitleString[2], v25, strlen(v25));
  LOBYTE(v79) = 3;
  v26 = 5;
  v71 = (unsigned int)kTitleString;
  do
  {
    v27 = spNode.m_pObject;
    v28 = fs("Title%02dNor");
    v29 = PgSprData::Create(&v27->baseclass_0, v28, &uiLeft, &uiTop, 0);
    pkBtnWin = spNode.m_pObject;
    v30 = fs("Title%02dClick");
    PgSprData::Add(v29, &pkBtnWin->baseclass_0, v30);
    pkBtnWin = spNode.m_pObject;
    v31 = fs("Title%02dOver");
    PgSprData::Add(v29, &pkBtnWin->baseclass_0, v31);
    v32 = PgWinBut::CreateWin(uiLeft - (_DWORD)iOffX, uiTop - iOffY, v29, &v4->baseclass_0.baseclass_0, 3u, 0, 0);
    v33 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v32 + 520);
    pkBtnWin = (NiNode *)v32;
    v33(v32, v26 - 5);
    v34 = v29->m_akHitTester.m_pBase->m_pObject;
    v35 = v34->m_uiHeight;
    v36 = v34->m_uiWidth;
    v37 = Font::Get(MAIN_MENU);
    v38 = PgWinText::CreateWin(0, 0, v36, v35, v37, (PgWin *)pkBtnWin, 0, 0);
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v38,
      5u);
    v39 = v71;
    if ( *(_DWORD *)(v71 + 20) >= 0x10u )
      v39 = *(_DWORD *)v71;
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v38,
      v39);
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v38,
      0);
    v71 += 28;
    ++v26;
  }
  while ( (unsigned int)(v26 - 5) < 3 );
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v79) = 4;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  v40 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v40->nItemType = 1;
  v40->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor02", 0xEu);
  v41 = &v40->vecNodeName;
  LOBYTE(v79) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v41,
    &thisa);
  LOBYTE(v79) = 4;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick02", 0x10u);
  LOBYTE(v79) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v41,
    &thisa);
  LOBYTE(v79) = 4;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver02", 0xFu);
  LOBYTE(v79) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v41,
    &thisa);
  LOBYTE(v79) = 4;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v42 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v42->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column09", 8u);
  LOBYTE(v79) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v42->vecNodeName,
    &thisa);
  LOBYTE(v79) = 4;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v42->pNode = spNode.m_pObject;
  v43 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v43->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column07", 8u);
  LOBYTE(v79) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v43->vecNodeName,
    &thisa);
  LOBYTE(v79) = 4;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v43->pNode = spNode.m_pObject;
  v43->bAbbreviatable = 1;
  v44 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v44->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column08", 8u);
  LOBYTE(v79) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v44->vecNodeName,
    &thisa);
  LOBYTE(v79) = 4;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v44->pNode = spNode.m_pObject;
  v44->bAbbreviatable = 1;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object01", &uiLeft, &uiTop, 0);
  v46 = SlideListWin::CreateWin(
          uiLeft - (_DWORD)iOffX,
          uiTop - iOffY,
          v45,
          &v4->baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v4->m_pkListWin = v46;
  v46->m_uiRClickMsg = 4;
  SlideListWin::UpdateViewList(v4->m_pkListWin);
  SlideListWin::SetToolTipWin(v4->m_pkListWin, g_pkToolTipWin);
  v47 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor02");
  NiObjectNET::SetName(v47, "SlideBar_DnBtn02Nor");
  v48 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick02");
  NiObjectNET::SetName(v48, "SlideBar_DnBtn02Click");
  v49 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver02");
  NiObjectNET::SetName(v49, "SlideBar_DnBtn02Over");
  v50 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor02");
  NiObjectNET::SetName(v50, "SlideBar_UpBtn02Nor");
  v51 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick02");
  NiObjectNET::SetName(v51, "SlideBar_UpBtn02Click");
  v52 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver02");
  NiObjectNET::SetName(v52, "SlideBar_UpBtn02Over");
  v53 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  v54 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar02",
          "SlideBar_UpBtn02",
          "SlideBar_DnBtn02",
          v53,
          0,
          &v4->baseclass_0.baseclass_0);
  v4->m_pkSlideBar = v54;
  v54->m_uiClickMsg = 1;
  v4->m_pkSlideBar->m_eType = 1;
  v55 = v4->m_pkSlideBar;
  v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v57 = v4->m_pkSlideBar;
  v58 = ((int (__thiscall *)(SlideBar *))v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4->m_pkSlideBar);
  v59 = (int)v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
               (NiRefObject *)v57,
               v58 - iOffY);
  v60 = iOffX;
  v56[77].__vecDelDtor((NiRefObject *)v4->m_pkSlideBar, v59 - (_DWORD)iOffX);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "JoinPlayerList", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v62 = Font::Get(MAIN_MENU);
    v63 = PgWinText::CreateWin(
            uiLeft - (_DWORD)v60,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v62,
            &v4->baseclass_0.baseclass_0,
            0,
            0);
    v4->m_pkJoinPlyaerListText = v63;
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v63,
      (unsigned int)&Color::m_kDxWinTitleColor);
    ((void (__stdcall *)(signed int))v4->m_pkJoinPlyaerListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1);
    v64 = v4->m_pkJoinPlyaerListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v65 = TextData2::Get(0x297C7396u);
    v64[118].__vecDelDtor((NiRefObject *)v4->m_pkJoinPlyaerListText, (unsigned int)v65);
    v4->m_pkJoinPlyaerListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v4->m_pkJoinPlyaerListText,
      0);
    LOBYTE(v79) = 3;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)uiWidth);
      operator delete(*(void **)&kCreateInfo);
    }
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    LOBYTE(v79) = 0;
    _eh_vector_destructor_iterator_(
      kTitleString,
      0x1Cu,
      3,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v66 = spNode.m_pObject;
    v79 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v66 )
      v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v66, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v79) = 3;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)uiWidth);
      operator delete(*(void **)&kCreateInfo);
    }
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    LOBYTE(v79) = 0;
    _eh_vector_destructor_iterator_(
      kTitleString,
      0x1Cu,
      3,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v61 = spNode.m_pObject;
    v79 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v61 )
      v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v61, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005FBD60) --------------------------------------------------------
bool __thiscall KingdomQuestTeamList::Create(KingdomQuestTeamList *this, NiPointer<NiNode> spNode, PgWin *pkParent)
{
  PgWin *v3; // edi@1
  KingdomQuestTeamList *v4; // esi@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@1
  int v6; // ebx@1
  char *v7; // eax@8
  PgSprData *v8; // eax@9
  NiNode *v9; // esi@10
  bool result; // al@14
  int v11; // edi@15
  int v12; // ebx@15
  PgWinBut *v13; // eax@15
  int v14; // ecx@15
  void *v15; // edx@15
  unsigned int v16; // ecx@15
  PgWin *v17; // ST24_4@15
  PgFont *v18; // eax@15
  PgWinText *v19; // eax@15
  NiRefObjectVtbl *v20; // edx@15
  char *v21; // eax@15
  PgWinBut *v22; // eax@15
  int v23; // ecx@15
  void *v24; // edx@15
  unsigned int v25; // ecx@15
  PgWin *v26; // ST24_4@15
  PgFont *v27; // eax@15
  PgWinText *v28; // eax@15
  NiRefObjectVtbl *v29; // edx@15
  char *v30; // eax@15
  PgWinBut *v31; // eax@15
  char *v32; // eax@15
  int v33; // eax@15
  void *v34; // edx@15
  PgWin *v35; // ST24_4@15
  PgFont *v36; // eax@15
  PgWinText *v37; // eax@15
  NiRefObjectVtbl *v38; // edx@15
  char *v39; // eax@15
  PgSprData *v40; // eax@15
  PgWinSpr *v41; // eax@15
  PgSprData *v42; // eax@15
  PgWinSpr *v43; // eax@15
  char *v44; // eax@15
  char *v45; // ecx@15
  char v46; // dl@16
  char *v47; // eax@17
  char *v48; // ecx@17
  char v49; // dl@18
  char *v50; // eax@19
  char *v51; // ecx@19
  char v52; // dl@20
  char *v53; // eax@22
  char *v54; // eax@22
  char *v55; // eax@22
  void *v56; // eax@22
  void (__thiscall *v57)(_DWORD, _DWORD); // edx@22
  int v58; // eax@22
  void *v59; // edx@22
  boost::shared_ptr<SLWCreateInfo::Item> *v60; // eax@22
  PgWin *v61; // ST24_4@22
  PgFont *v62; // eax@22
  PgWinText *v63; // eax@22
  NiRefObjectVtbl *v64; // edx@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v65; // eax@22
  SLWCreateInfo::Item *v66; // eax@25
  void *v67; // eax@35
  void *v68; // eax@37
  PgSprData *v69; // eax@37
  SlideListWin *v70; // eax@37
  NiObjectNET *v71; // eax@37
  NiObjectNET *v72; // eax@37
  NiObjectNET *v73; // eax@37
  NiObjectNET *v74; // eax@37
  NiObjectNET *v75; // eax@37
  NiObjectNET *v76; // eax@37
  PgSprData *v77; // eax@37
  SlideBar *v78; // eax@37
  boost::shared_ptr<SLWCreateInfo::Item> *v79; // ecx@37
  int (*v80)(void); // edx@37
  int v81; // eax@37
  int v82; // eax@37
  SLWCreateInfo::Item *v83; // eax@39
  void *v84; // eax@49
  void *v85; // eax@51
  PgSprData *v86; // eax@51
  SlideListWin *v87; // eax@51
  NiObjectNET *v88; // eax@51
  NiObjectNET *v89; // eax@51
  NiObjectNET *v90; // eax@51
  NiObjectNET *v91; // eax@51
  NiObjectNET *v92; // eax@51
  NiObjectNET *v93; // eax@51
  PgSprData *v94; // eax@51
  SlideBar *v95; // eax@51
  boost::shared_ptr<SLWCreateInfo::Item> *v96; // ecx@51
  int (*v97)(void); // edx@51
  int v98; // eax@51
  int v99; // eax@51
  NiNode *v100; // esi@55
  PgFont *v101; // eax@59
  PgWinText *v102; // eax@59
  NiRefObjectVtbl *v103; // edi@59
  char *v104; // eax@59
  NiNode *v105; // esi@62
  unsigned int uiHeight; // [sp+0h] [bp-110h]@51
  SLWCreateInfo kCreateInfo; // [sp+4h] [bp-10Ch]@25
  unsigned int uiWidth; // [sp+20h] [bp-F0h]@38
  boost::shared_ptr<SLWCreateInfo::Item> *v109; // [sp+24h] [bp-ECh]@22
  unsigned int i; // [sp+28h] [bp-E8h]@1
  int uiTop; // [sp+2Ch] [bp-E4h]@9
  int uiLeft; // [sp+30h] [bp-E0h]@9
  NiTexturePalette *pkButWin; // [sp+34h] [bp-DCh]@2
  void *pkTextWin; // [sp+38h] [bp-D8h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+3Ch] [bp-D4h]@25
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kTitleString[6]; // [sp+58h] [bp-B8h]@15
  unsigned int v117; // [sp+100h] [bp-10h]@1
  int v118; // [sp+10Ch] [bp-4h]@1
  int v119; // [sp+110h] [bp+0h]@1

  v117 = (unsigned int)&v119 ^ __security_cookie;
  v3 = pkParent;
  v4 = this;
  v5 = pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor;
  v118 = 0;
  v6 = (int)v5(
              &pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              (unsigned int)&v119 ^ __security_cookie);
  i = ((int (__thiscall *)(PgWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
  if ( spNode.m_pObject )
  {
    pkButWin = (NiTexturePalette *)spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && pkButWin )
      ((void (__stdcall *)(signed int))pkButWin->baseclass_0.vfptr->__vecDelDtor)(1);
    spNode.m_pObject = 0;
  }
  pkButWin = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCKDQuest_TeamSelect.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, pkButWin);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, 0);
  if ( !PgWinSpr::Create(&v4->baseclass_0, uiLeft - v6, uiTop - i, v8, v3, 0, 0) )
  {
    v9 = spNode.m_pObject;
    v118 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
    return 0;
  }
  v11 = ((int (__thiscall *)(KingdomQuestTeamList *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v4);
  v12 = ((int (__thiscall *)(KingdomQuestTeamList *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v4);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor01", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick01");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver01");
  PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)pkTextWin, &v4->baseclass_0.baseclass_0, 0, 0, 0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "RedNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "RedClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "RedOver");
  v13 = PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)pkTextWin, &v4->baseclass_0.baseclass_0, 2u, 0, 0);
  v14 = **((_DWORD **)pkTextWin + 9);
  v15 = *(void **)(v14 + 24);
  v16 = *(_DWORD *)(v14 + 20);
  v17 = (PgWin *)v13;
  pkButWin = (NiTexturePalette *)v15;
  i = v16;
  v18 = Font::Get(MAIN_MENU);
  v19 = PgWinText::CreateWin(0, 0, i, (unsigned int)pkButWin, v18, v17, 0, 0);
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v19;
  v20[122].__vecDelDtor((NiRefObject *)v19, 5u);
  pkButWin = (NiTexturePalette *)(*(_DWORD *)pkTextWin + 472);
  v21 = TextData3::Get(0xB90A33FFu);
  ((void (__thiscall *)(void *, char *))pkButWin->baseclass_0.vfptr)(pkTextWin, v21);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BlueNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "BlueClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "BlueOver");
  v22 = PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)pkTextWin, &v4->baseclass_0.baseclass_0, 5u, 0, 0);
  v23 = **((_DWORD **)pkTextWin + 9);
  v24 = *(void **)(v23 + 24);
  v25 = *(_DWORD *)(v23 + 20);
  v26 = (PgWin *)v22;
  pkButWin = (NiTexturePalette *)v24;
  i = v25;
  v27 = Font::Get(MAIN_MENU);
  v28 = PgWinText::CreateWin(0, 0, i, (unsigned int)pkButWin, v27, v26, 0, 0);
  v29 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v28;
  v29[122].__vecDelDtor((NiRefObject *)v28, 5u);
  pkButWin = (NiTexturePalette *)(*(_DWORD *)pkTextWin + 472);
  v30 = TextData3::Get(0xB848380Au);
  ((void (__thiscall *)(void *, char *))pkButWin->baseclass_0.vfptr)(pkTextWin, v30);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "BtnClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "BtnOver");
  v31 = PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)pkTextWin, &v4->baseclass_0.baseclass_0, 7u, 0, 0);
  pkButWin = (NiTexturePalette *)v31;
  v31->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v32 = TextData2::Get(0x283CA263u);
  PgWin::SetToolTipWinText((PgWin *)pkButWin, v32);
  v33 = **((_DWORD **)pkTextWin + 9);
  v34 = *(void **)(v33 + 20);
  v35 = (PgWin *)pkButWin;
  i = *(_DWORD *)(v33 + 24);
  pkTextWin = v34;
  v36 = Font::Get(MAIN_MENU);
  v37 = PgWinText::CreateWin(0, 0, (unsigned int)pkTextWin, i, v36, v35, 0, 0);
  v38 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = v37;
  v38[122].__vecDelDtor((NiRefObject *)v37, 5u);
  pkButWin = (NiTexturePalette *)(*(_DWORD *)pkTextWin + 472);
  v39 = TextData2::Get(0x8332EB1u);
  ((void (__thiscall *)(_DWORD, _DWORD))pkButWin->baseclass_0.vfptr)(pkTextWin, v39);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Red_Select", &uiLeft, &uiTop, 0);
  v41 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v40, &v4->baseclass_0.baseclass_0, 0, 0);
  v4->m_pkSelectedRed = v41;
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v41,
    0);
  ((void (__stdcall *)(_DWORD))v4->m_pkSelectedRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Blue_Select", &uiLeft, &uiTop, 0);
  v43 = PgWinSpr::CreateWin(uiLeft - v11, uiTop - v12, v42, &v4->baseclass_0.baseclass_0, 0, 0);
  v4->m_pkSelectedBlue = v43;
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v43,
    0);
  ((void (__stdcall *)(_DWORD))v4->m_pkSelectedBlue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v44 = TextData::Get(0x98A49F99u);
  v45 = v44;
  kTitleString[0].baseclass_0._Myres = 15;
  kTitleString[0].baseclass_0._Mysize = 0;
  kTitleString[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pkButWin = (NiTexturePalette *)(v44 + 1);
  do
    v46 = *v45++;
  while ( v46 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(kTitleString, v44, v45 - (char *)pkButWin);
  LOBYTE(v118) = 1;
  v47 = TextData::Get(0x96B28AA0u);
  v48 = v47;
  kTitleString[1].baseclass_0._Myres = 15;
  kTitleString[1].baseclass_0._Mysize = 0;
  kTitleString[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pkButWin = (NiTexturePalette *)(v47 + 1);
  do
    v49 = *v48++;
  while ( v49 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kTitleString[1],
    v47,
    v48 - (char *)pkButWin);
  LOBYTE(v118) = 2;
  v50 = TextData::Get(0x4EA49695u);
  v51 = v50;
  kTitleString[2].baseclass_0._Myres = 15;
  kTitleString[2].baseclass_0._Mysize = 0;
  kTitleString[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pkButWin = (NiTexturePalette *)(v50 + 1);
  do
    v52 = *v51++;
  while ( v52 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kTitleString[2],
    v50,
    v51 - (char *)pkButWin);
  LOBYTE(v118) = 3;
  _eh_vector_constructor_iterator_(
    &kTitleString[3],
    0x1Cu,
    3,
    (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  LOBYTE(v118) = 4;
  i = 0;
  do
  {
    pkButWin = (NiTexturePalette *)spNode.m_pObject;
    v53 = fs("Title%02dNor");
    pkTextWin = PgSprData::Create((NiAVObject *)pkButWin, v53, &uiLeft, &uiTop, 0);
    pkButWin = (NiTexturePalette *)spNode.m_pObject;
    v54 = fs("Title%02dClick");
    PgSprData::Add((PgSprData *)pkTextWin, (NiAVObject *)pkButWin, v54);
    pkButWin = (NiTexturePalette *)spNode.m_pObject;
    v55 = fs("Title%02dOver");
    PgSprData::Add((PgSprData *)pkTextWin, (NiAVObject *)pkButWin, v55);
    v56 = PgWinBut::CreateWin(uiLeft - v11, uiTop - v12, (PgSprData *)pkTextWin, &v4->baseclass_0.baseclass_0, 8u, 0, 0);
    v57 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v56 + 520);
    pkButWin = (NiTexturePalette *)v56;
    v57(v56, i);
    v58 = **((_DWORD **)pkTextWin + 9);
    v59 = *(void **)(v58 + 24);
    v60 = *(boost::shared_ptr<SLWCreateInfo::Item> **)(v58 + 20);
    v61 = (PgWin *)pkButWin;
    pkTextWin = v59;
    v109 = v60;
    v62 = Font::Get(MAIN_MENU);
    v63 = PgWinText::CreateWin(0, 0, (unsigned int)v109, (unsigned int)pkTextWin, v62, v61, 0, 0);
    v64 = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v63;
    v64[122].__vecDelDtor((NiRefObject *)v63, 5u);
    v65 = &kTitleString[i % 3];
    if ( kTitleString[i % 3].baseclass_0._Myres >= 0x10 )
      v65 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v65->baseclass_0.___u0.baseclass_0.dummy[0];
    (*(void (__stdcall **)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))(*(_DWORD *)pkTextWin
                                                                                                  + 472))(v65);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    ++i;
  }
  while ( i < 6 );
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v118) = 5;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  v66 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v66->nItemType = 1;
  v66->pNode = spNode.m_pObject;
  pkTextWin = v66;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor02", 0xEu);
  LOBYTE(v118) = 6;
  i = (unsigned int)((char *)pkTextWin + 72);
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick02", 0x10u);
  LOBYTE(v118) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)i,
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver02", 0xFu);
  LOBYTE(v118) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)i,
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column09", 8u);
  LOBYTE(v118) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column07", 8u);
  LOBYTE(v118) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v67 = pkTextWin;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  *((_BYTE *)v67 + 88) = 1;
  pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column08", 8u);
  LOBYTE(v118) = 11;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v68 = pkTextWin;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  *((_BYTE *)v68 + 88) = 1;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object01", &uiLeft, &uiTop, 0);
  v70 = SlideListWin::CreateWin(uiLeft - v11, uiTop - v12, v69, &v4->baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
  v4->m_pkListWin[0] = v70;
  v70->m_uiRClickMsg = 3;
  SlideListWin::UpdateViewList(v4->m_pkListWin[0]);
  SlideListWin::SetToolTipWin(v4->m_pkListWin[0], g_pkToolTipWin);
  v71 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor02");
  NiObjectNET::SetName(v71, "SlideBar_DnBtn02Nor");
  v72 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick02");
  NiObjectNET::SetName(v72, "SlideBar_DnBtn02Click");
  v73 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver02");
  NiObjectNET::SetName(v73, "SlideBar_DnBtn02Over");
  v74 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor02");
  NiObjectNET::SetName(v74, "SlideBar_UpBtn02Nor");
  v75 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick02");
  NiObjectNET::SetName(v75, "SlideBar_UpBtn02Click");
  v76 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver02");
  NiObjectNET::SetName(v76, "SlideBar_UpBtn02Over");
  v77 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  v78 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar02",
          "SlideBar_UpBtn02",
          "SlideBar_DnBtn02",
          v77,
          0,
          &v4->baseclass_0.baseclass_0);
  v4->m_pkSlideBarRed = v78;
  v78->m_uiClickMsg = 1;
  v4->m_pkSlideBarRed->m_eType = 1;
  v79 = (boost::shared_ptr<SLWCreateInfo::Item> *)v4->m_pkSlideBarRed;
  v80 = (int (*)(void))v4->m_pkSlideBarRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
  pkButWin = (NiTexturePalette *)v4->m_pkSlideBarRed->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v109 = v79;
  v81 = v80();
  v82 = ((int (__stdcall *)(int))v109->px[1].rect.bottom)(v81 - v12);
  ((void (__thiscall *)(SlideBar *, int))pkButWin[38].baseclass_0.m_uiRefCount)(v4->m_pkSlideBarRed, v82 - v11);
  if ( *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo != kCreateInfo.m_arrItem.baseclass_0._Mylast )
  {
    v109 = std::_Move<boost::shared_ptr<SlideListWin::ListItem>___boost::shared_ptr<SlideListWin::ListItem>__>(
             kCreateInfo.m_arrItem.baseclass_0._Mylast,
             kCreateInfo.m_arrItem.baseclass_0._Mylast,
             *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
             (std::_Nonscalar_ptr_iterator_tag)uiWidth);
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      v109,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)uiWidth);
    kCreateInfo.m_arrItem.baseclass_0._Mylast = v109;
  }
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  v83 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v83->nItemType = 1;
  v83->pNode = spNode.m_pObject;
  pkTextWin = v83;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor03", 0xEu);
  LOBYTE(v118) = 12;
  i = (unsigned int)((char *)pkTextWin + 72);
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick03", 0x10u);
  LOBYTE(v118) = 13;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)i,
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver03", 0xFu);
  LOBYTE(v118) = 14;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)i,
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column10", 8u);
  LOBYTE(v118) = 15;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column11", 8u);
  LOBYTE(v118) = 16;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v84 = pkTextWin;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  *((_BYTE *)v84 + 88) = 1;
  pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column12", 8u);
  LOBYTE(v118) = 17;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
    &thisa);
  LOBYTE(v118) = 5;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v85 = pkTextWin;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  *((_BYTE *)v85 + 88) = 1;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Object02", &uiLeft, &uiTop, 0);
  v87 = SlideListWin::CreateWin(uiLeft - v11, uiTop - v12, v86, &v4->baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
  v4->m_pkListWin[1] = v87;
  v87->m_uiRClickMsg = 6;
  SlideListWin::UpdateViewList(v4->m_pkListWin[1]);
  SlideListWin::SetToolTipWin(v4->m_pkListWin[1], g_pkToolTipWin);
  v88 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor03");
  NiObjectNET::SetName(v88, "SlideBar_DnBtn03Nor");
  v89 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick03");
  NiObjectNET::SetName(v89, "SlideBar_DnBtn03Click");
  v90 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver03");
  NiObjectNET::SetName(v90, "SlideBar_DnBtn03Over");
  v91 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor03");
  NiObjectNET::SetName(v91, "SlideBar_UpBtn03Nor");
  v92 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick03");
  NiObjectNET::SetName(v92, "SlideBar_UpBtn03Click");
  v93 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver03");
  NiObjectNET::SetName(v93, "SlideBar_UpBtn03Over");
  v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle01", &uiLeft, &uiTop, 0);
  v95 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar03",
          "SlideBar_UpBtn03",
          "SlideBar_DnBtn03",
          v94,
          0,
          &v4->baseclass_0.baseclass_0);
  v4->m_pkSlideBarBlue = v95;
  v95->m_uiClickMsg = 1;
  v4->m_pkSlideBarBlue->m_eType = 1;
  v96 = (boost::shared_ptr<SLWCreateInfo::Item> *)v4->m_pkSlideBarBlue;
  v97 = (int (*)(void))v4->m_pkSlideBarBlue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
  pkButWin = (NiTexturePalette *)v4->m_pkSlideBarBlue->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v109 = v96;
  v98 = v97();
  v99 = ((int (__stdcall *)(int))v109->px[1].rect.bottom)(v98 - v12);
  ((void (__thiscall *)(SlideBar *, int))pkButWin[38].baseclass_0.m_uiRefCount)(v4->m_pkSlideBarBlue, v99 - v11);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "JoinPlayerList", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v101 = Font::Get(MAIN_MENU);
    v102 = PgWinText::CreateWin(uiLeft - v11, uiTop - v12, uiWidth, uiHeight, v101, &v4->baseclass_0.baseclass_0, 0, 0);
    v4->m_pkJoinTeamListText = v102;
    v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v102,
      (unsigned int)&Color::m_kDxWinTitleColor);
    ((void (__stdcall *)(signed int))v4->m_pkJoinTeamListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1);
    v103 = v4->m_pkJoinTeamListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v104 = TextData2::Get(0x297C7396u);
    v103[118].__vecDelDtor((NiRefObject *)v4->m_pkJoinTeamListText, (unsigned int)v104);
    v4->m_pkJoinTeamListText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v4->m_pkJoinTeamListText,
      0);
    LOBYTE(v118) = 4;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)uiWidth);
      operator delete(*(void **)&kCreateInfo);
    }
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    LOBYTE(v118) = 0;
    _eh_vector_destructor_iterator_(
      kTitleString,
      0x1Cu,
      6,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v118 = -1;
    if ( spNode.m_pObject )
    {
      v105 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v105 )
          v105->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v105, 1u);
      }
    }
    result = 1;
  }
  else
  {
    LOBYTE(v118) = 4;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)uiWidth);
      operator delete(*(void **)&kCreateInfo);
    }
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    LOBYTE(v118) = 0;
    _eh_vector_destructor_iterator_(
      kTitleString,
      0x1Cu,
      6,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    v118 = -1;
    if ( spNode.m_pObject )
    {
      v100 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v100 )
          v100->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v100, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (005FD240) --------------------------------------------------------
void __thiscall KingdomQuestWin::KQ_Joiner::_KQ_Joiner(KingdomQuestWin::KQ_Joiner *this)
{
  _eh_vector_destructor_iterator_(
    this->kJoiner,
    0x14u,
    100,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (005FD260) --------------------------------------------------------
void *__thiscall KingdomQuestPlayerList::_scalar_deleting_destructor_(KingdomQuestPlayerList *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestPlayerList::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestPlayerList::_vftable_;
  this->m_kQuestHandle = -1;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BCC8C: using guessed type int (__stdcall *KingdomQuestPlayerList___vftable_)(int uiFlags);
// 9BCCAC: using guessed type int (__thiscall *KingdomQuestPlayerList___vftable_)(void *p, char);

//----- (005FD2A0) --------------------------------------------------------
void *__thiscall KingdomQuestTeamList::_vector_deleting_destructor_(KingdomQuestTeamList *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KingdomQuestTeamList::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KingdomQuestTeamList::_vftable_;
  this->m_kQuestHandle = -1;
  PgWinSpr::_PgWinSpr(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BCEB8: using guessed type int (__stdcall *KingdomQuestTeamList___vftable_)(int uiFlags);
// 9BCED4: using guessed type int (__thiscall *KingdomQuestTeamList___vftable_)(void *p, char);

//----- (005FD2E0) --------------------------------------------------------
KQTeam *__cdecl KQTeamTable::GetByID(const unsigned __int16 iID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  KQTeam *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<KQTeam_KQTeamTable>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( *(_WORD *)CDataReader::GetRecord((CDataReader *)(ITableBase<KQTeam_KQTeamTable>::ms_pkTable + 4), v3) != iID )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (KQTeam *)CDataReader::GetRecord((CDataReader *)(ITableBase<KQTeam_KQTeamTable>::ms_pkTable + 4), v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97F04: using guessed type int ITableBase_KQTeam_KQTeamTable___ms_pkTable;

//----- (005FD340) --------------------------------------------------------
void *__thiscall KingdomQuestWin::_vector_deleting_destructor_(KingdomQuestWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  KingdomQuestWin::_KingdomQuestWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (005FD370) --------------------------------------------------------
char __cdecl CharClass::GetClassIDByLocalName(char *pcLocalName)
{
  unsigned int v1; // edi@1

  v1 = 0;
  while ( strcmp(
            (const char *)CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), v1)
          + 21,
            pcLocalName) )
  {
    ++v1;
    if ( (signed int)v1 >= 28 )
      return 0;
  }
  return *(_BYTE *)CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), v1);
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (005FD3E0) --------------------------------------------------------
void __thiscall KQuestTimeWin::KQuestTimeWin(KQuestTimeWin *this)
{
  KQuestTimeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KQuestTimeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KQuestTimeWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimer);
  v1->m_iRestLife = 0;
  v1->m_bTextOutTimeLimit = 0;
  v1->m_iRequiredKillMonNums = 0;
}
// 9BD3AC: using guessed type int (__stdcall *KQuestTimeWin___vftable_)(int uiFlags);
// 9BD3CC: using guessed type int (__thiscall *KQuestTimeWin___vftable_)(void *p, char);

//----- (005FD460) --------------------------------------------------------
void __thiscall KQuestTimeWin::_KQuestTimeWin(KQuestTimeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KQuestTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KQuestTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9BD3AC: using guessed type int (__stdcall *KQuestTimeWin___vftable_)(int uiFlags);
// 9BD3CC: using guessed type int (__thiscall *KQuestTimeWin___vftable_)(void *p, char);

//----- (005FD4A0) --------------------------------------------------------
void __thiscall KQuestTimeWin::SetRestLife(KQuestTimeWin *this, int iLife)
{
  signed int v2; // esi@1
  char *v3; // edi@1

  this->m_iRestLife = iLife - 1;
  v2 = 0;
  v3 = (char *)this->m_apkLifeSpr;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(iLife - 1 > v2++);
    v3 += 4;
  }
  while ( v2 < 5 );
}

//----- (005FD4F0) --------------------------------------------------------
void __thiscall KQuestTimeWin::ResetTime(KQuestTimeWin *this, unsigned int second)
{
  KQuestTimeWin *v2; // esi@1

  v2 = this;
  if ( !KQuestTimeWin::m_second )
    this->m_bTextOutTimeLimit = 0;
  KQuestTimeWin::m_second = second;
  CNSTimer_Interval::ReSet(&this->m_kTimer, Timer::ms_fCurTime);
  v2->m_kTimer.m_fCheckTime = 1.0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A99E94: using guessed type unsigned int KQuestTimeWin__m_second;

//----- (005FD530) --------------------------------------------------------
bool __thiscall KQuestTimeWin::Create(KQuestTimeWin *this, PgFrameWork *pkFrameWork)
{
  KQuestTimeWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  PgSprData *v10; // edi@15
  PgWinSpr *v11; // eax@15
  PgSprData::PgHitTester *v12; // eax@15
  unsigned int v13; // edi@15
  unsigned int v14; // ebx@15
  PgFont *v15; // eax@15
  PgWinText *v16; // eax@15
  NiRefObjectVtbl *v17; // edi@15
  PgFont *v18; // eax@15
  PgSprData *v19; // eax@15
  PgWinSpr *v20; // eax@15
  PgSprData *v21; // eax@15
  PgSprData *v22; // edi@15
  PgWinSpr *v23; // eax@15
  NiPointer<PgSprData::PgHitTester> *v24; // ecx@15
  unsigned int v25; // edi@15
  unsigned int v26; // ebx@15
  PgFont *v27; // eax@15
  PgWinText *v28; // eax@15
  NiRefObjectVtbl *v29; // edi@15
  PgFont *v30; // eax@15
  int v31; // eax@15
  int v32; // ebx@15
  NiNode *v33; // edi@16
  char *v34; // eax@16
  PgSprData *v35; // eax@16
  PgWinSpr *v36; // edi@16
  NiRefObjectVtbl *v37; // edi@17
  int v38; // eax@17
  NiNode *v39; // esi@18
  NiSourceTexture *pkTexture; // [sp+4Ch] [bp-1Ch]@1
  int uiLeft; // [sp+50h] [bp-18h]@11
  int uiTop; // [sp+54h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+58h] [bp-10h]@1
  int v44; // [sp+64h] [bp-4h]@1
  int pkFrameWorka; // [sp+70h] [bp+8h]@16

  v2 = this;
  spNode.m_pObject = 0;
  v44 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v44 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\QuestTime.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "KQuestTimeWin", 0) )
  {
    v4 = spNode.m_pObject;
    v44 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "KillCount_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "KillCount_On");
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "Reward");
  v11 = PgWinSpr::CreateWin(uiLeft, uiTop, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_apkKillCount = v11;
  v11->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  ((void (__stdcall *)(signed int))v2->m_apkKillCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v12 = v10->m_akHitTester.m_pBase->m_pObject;
  v13 = v12->m_uiHeight;
  v14 = v12->m_uiWidth;
  v15 = Font::Get(0);
  v16 = PgWinText::CreateWin(uiLeft, uiTop, v14, v13, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkRemainMonNumsToKill = v16;
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v16,
    5u);
  v17 = v2->m_pkRemainMonNumsToKill->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = Font::Get(BOLD);
  v17[113].__vecDelDtor((NiRefObject *)v2->m_pkRemainMonNumsToKill, (unsigned int)v18);
  ((void (__stdcall *)(_DWORD))v2->m_pkRemainMonNumsToKill->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  PgWin::SetToolTipWinText(&v2->m_apkKillCount->baseclass_0, "-");
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkRemainMonNumsToKill->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9BD336);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  v20 = PgWinSpr::CreateWin(uiLeft, uiTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Time", &uiLeft, &uiTop, pkTexture);
  v22 = v21;
  v23 = PgWinSpr::CreateWin(uiLeft, uiTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v23,
    0);
  v24 = v22->m_akHitTester.m_pBase;
  v25 = v24->m_pObject->m_uiHeight;
  v26 = v24->m_pObject->m_uiWidth;
  v27 = Font::Get(0);
  v28 = PgWinText::CreateWin(uiLeft, uiTop + 2, v26, v25, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_minuteTxtWin = v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v28,
    5u);
  v29 = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v30 = Font::Get(LARGEBOLD);
  v29[113].__vecDelDtor((NiRefObject *)v2->m_minuteTxtWin, (unsigned int)v30);
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("00:00");
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v31 = 0;
  v32 = (int)v2->m_apkLifeSpr;
  do
  {
    v33 = spNode.m_pObject;
    pkFrameWorka = v31 + 1;
    v34 = fs("Life%02d");
    v35 = PgSprData::Create(&v33->baseclass_0, v34, &uiLeft, &uiTop, pkTexture);
    v36 = PgWinSpr::CreateWin(uiLeft, uiTop, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v36,
      0);
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v36,
      0);
    v31 = pkFrameWorka;
    *(_DWORD *)v32 = v36;
    v32 += 4;
  }
  while ( pkFrameWorka < 5 );
  ((void (__thiscall *)(KQuestTimeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.0);
  v37 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v38 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
               (NiRefObject *)v2,
               200u);
  v37[77].__vecDelDtor((NiRefObject *)v2, v38);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    1u);
  KQuestTimeWin::SetRestLife(v2, 0);
  v44 = -1;
  if ( spNode.m_pObject )
  {
    v39 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v39 )
        v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v39, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005FD980) --------------------------------------------------------
void __thiscall KQuestTimeWin::UpdateMeWin(KQuestTimeWin *this, float fCurTime)
{
  KQuestTimeWin *v2; // esi@1
  PgWinSpr *v3; // ecx@5
  NiRefObjectVtbl *v4; // edi@9
  char *v5; // eax@9
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@10
  GameFrameWork *v7; // edi@18
  char *v8; // eax@18
  D3DXCOLOR *v9; // [sp-4h] [bp-Ch]@11

  v2 = this;
  if ( !KQuestTimeWin::m_second )
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    return;
  }
  if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kTimer, fCurTime) )
  {
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2,
      1u);
    --KQuestTimeWin::m_second;
    if ( v2->m_iRequiredKillMonNums <= 0 )
    {
      ((void (__stdcall *)(_DWORD))v2->m_apkKillCount->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(2);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v2->m_pkRemainMonNumsToKill->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v3 = v2->m_apkKillCount;
      if ( KQuestTimeWin::m_second & 1 )
      {
        ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkRemainMonNumsToKill->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxYellowColor);
        SpScreenText::SetShadowOffset(&v2->m_pkRemainMonNumsToKill->m_spTextGeom.m_pObject->baseclass_0, 1u);
      }
      else
      {
        ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkRemainMonNumsToKill->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxRedColor);
        SpScreenText::SetShadowOffset(&v2->m_pkRemainMonNumsToKill->m_spTextGeom.m_pObject->baseclass_0, 1u);
      }
    }
  }
  ((void (__stdcall *)(_DWORD))v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v4 = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = fs("%02d:%02d");
  v4[118].__vecDelDtor((NiRefObject *)v2->m_minuteTxtWin, (unsigned int)v5);
  if ( KQuestTimeWin::m_second >= 0x3C )
  {
    if ( KQuestTimeWin::m_second >= 0x12C )
      goto LABEL_16;
    v6 = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
    goto LABEL_14;
  }
  v6 = v2->m_minuteTxtWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
  if ( KQuestTimeWin::m_second & 1 )
  {
LABEL_14:
    v9 = &Color::m_kDxRedColor;
    goto LABEL_15;
  }
  v9 = &Color::m_kDxWhiteColor;
LABEL_15:
  ((void (__stdcall *)(_DWORD))v6)(v9);
LABEL_16:
  if ( !v2->m_bTextOutTimeLimit && KQuestTimeWin::m_second == 300 )
  {
    v7 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
    v8 = TextData::Get(0xBAEA2A3Eu);
    GameFrameWork::AddSysMsg(v7, v8);
    v2->m_bTextOutTimeLimit = 1;
  }
  if ( KQuestTimeWin::m_second == 60 )
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_KQLast);
}
// A99E94: using guessed type unsigned int KQuestTimeWin__m_second;

//----- (005FDB70) --------------------------------------------------------
void __thiscall KQuestTimeWin::SetRequiredKillMobNums(KQuestTimeWin *this, int iNums)
{
  KQuestTimeWin *v2; // esi@1
  PgWinText *v3; // eax@1
  NiRefObjectVtbl *v4; // edi@2
  char *v5; // eax@2
  char *v6; // eax@2
  char *v7; // eax@2
  char *v8; // eax@4

  v2 = this;
  v3 = this->m_pkRemainMonNumsToKill;
  this->m_iRequiredKillMonNums = iNums;
  if ( v3 )
  {
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = fs("%d");
    v4[118].__vecDelDtor((NiRefObject *)v2->m_pkRemainMonNumsToKill, (unsigned int)v5);
    v6 = TextData2::Get(0xAFDAD647u);
    v7 = fs(v6);
    PgWin::SetToolTipWinText(&v2->m_apkKillCount->baseclass_0, v7);
  }
  if ( v2->m_iRequiredKillMonNums <= 0 )
  {
    ((void (__stdcall *)(_DWORD))v2->m_pkRemainMonNumsToKill->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v8 = TextData2::Get(0x78C0D8F8u);
    PgWin::SetToolTipWinText(&v2->m_apkKillCount->baseclass_0, v8);
  }
}

//----- (005FDC10) --------------------------------------------------------
KQuestTimeWin *__cdecl KQuestTimeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  KQuestTimeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A0u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &KQuestTimeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &KQuestTimeWin::_vftable_;
    CNSTimer_Interval::CNSTimer_Interval((CNSTimer_Interval *)((char *)v2 + 348));
    *((_DWORD *)v2 + 99) = 0;
    *((_BYTE *)v2 + 400) = 0;
    *((_DWORD *)v2 + 101) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (KQuestTimeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9BD3AC: using guessed type int (__stdcall *KQuestTimeWin___vftable_)(int uiFlags);
// 9BD3CC: using guessed type int (__thiscall *KQuestTimeWin___vftable_)(void *p, char);

//----- (005FDD70) --------------------------------------------------------
void *__thiscall KQuestTimeWin::_vector_deleting_destructor_(KQuestTimeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&KQuestTimeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&KQuestTimeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BD3AC: using guessed type int (__stdcall *KQuestTimeWin___vftable_)(int uiFlags);
// 9BD3CC: using guessed type int (__thiscall *KQuestTimeWin___vftable_)(void *p, char);

//----- (005FDDB0) --------------------------------------------------------
char *__cdecl NpcDlgScript::ActionToken()
{
  return "action";
}

//----- (005FDDC0) --------------------------------------------------------
char *__cdecl NpcDlgScript::TypeToken()
{
  return "type";
}

//----- (005FDDD0) --------------------------------------------------------
char *__cdecl NpcDlgScript::BtnToken()
{
  return "btn";
}

//----- (005FDDE0) --------------------------------------------------------
char *__cdecl NpcDlgScript::ScriptToken()
{
  return "script";
}

//----- (005FDDF0) --------------------------------------------------------
char *__cdecl NpcDlgScript::TextToken()
{
  return "text";
}

//----- (005FDE00) --------------------------------------------------------
char *__cdecl NpcDlgScript::GetText(CTextDataMem *rtd, INode *pkNode)
{
  CFieldNode *v2; // eax@1
  char *result; // eax@2

  v2 = INode::FindField(pkNode, "text");
  if ( v2 )
  {
    CTextDataMem::ReadFieldStr(rtd, v2, acText, 2047);
    result = acText;
  }
  else
  {
    result = (char *)&unk_9BD5F3;
  }
  return result;
}

//----- (005FDE40) --------------------------------------------------------
char *__cdecl NpcDlgScript::GetAction(CTextDataMem *rtd, INode *pkNode)
{
  CFieldNode *v2; // eax@1
  char *result; // eax@2

  v2 = INode::FindField(pkNode, "action");
  if ( v2 )
  {
    CTextDataMem::ReadFieldStr(rtd, v2, acText_0, 63);
    result = acText_0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005FDE70) --------------------------------------------------------
void __thiscall FlexDlgBtn::FlexDlgBtn(FlexDlgBtn *this)
{
  FlexDlgBtn *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FlexDlgBtn::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FlexDlgBtn::_vftable_;
}
// 9BDB60: using guessed type int (__stdcall *FlexDlgBtn___vftable_)(int uiFlags);
// 9BDB7C: using guessed type int (__thiscall *FlexDlgBtn___vftable_)(void *p, char);

//----- (005FDE90) --------------------------------------------------------
void __thiscall FlexDlgBtn::_FlexDlgBtn(FlexDlgBtn *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FlexDlgBtn::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FlexDlgBtn::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9BDB60: using guessed type int (__stdcall *FlexDlgBtn___vftable_)(int uiFlags);
// 9BDB7C: using guessed type int (__thiscall *FlexDlgBtn___vftable_)(void *p, char);

//----- (005FDEB0) --------------------------------------------------------
void __thiscall FlexDlgBtn::SetBtnWidth(FlexDlgBtn *this, int iWidth)
{
  FlexDlgBtn *v2; // esi@1
  PgWinSpr *v3; // edi@1
  int v4; // ebx@1
  int v5; // eax@1
  int v6; // ebx@1
  PgWinSpr *v7; // edi@2
  int v8; // ebx@2
  int v9; // edi@3
  int v10; // edi@3
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // eax@3
  PgWinSpr *v12; // ecx@3
  int v13; // eax@3
  PgWinText *v14; // ecx@3
  NiRefObjectVtbl *v15; // ebx@3
  int v16; // eax@3
  NiRefObjectVtbl *v17; // ebx@3
  int v18; // eax@3
  tagRECT kRect; // [sp+Ch] [bp-14h]@3
  unsigned int v20; // [sp+1Ch] [bp-4h]@1
  int v21; // [sp+20h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pkRight;
  v4 = ((int (*)(void))this->m_pkLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v5 = v4
     + ((int (__thiscall *)(PgWinSpr *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3)
     + 3;
  v6 = iWidth;
  if ( v5 > (unsigned int)iWidth )
  {
    v7 = v2->m_pkRight;
    v8 = ((int (*)(void))v2->m_pkLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v6 = v8
       + ((int (__thiscall *)(PgWinSpr *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v7)
       + 3;
  }
  v9 = v6
     - ((int (*)(void))v2->m_pkLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v10 = v9
      - ((int (*)(void))v2->m_pkRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v11 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor;
  v2->m_iBtnWidth = v6;
  v11(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v6);
  kRect.right = v2->m_iBtnWidth;
  v12 = v2->m_pkLeft;
  kRect.left = 0;
  kRect.top = 0;
  v13 = ((int (*)(void))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v14 = v2->m_pkText;
  kRect.bottom = v13;
  ((void (__stdcall *)(tagRECT *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&kRect);
  v15 = v2->m_pkMiddle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v16 = ((int (*)(void))v2->m_pkLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v15[43].__vecDelDtor((NiRefObject *)v2->m_pkMiddle, v16);
  ((void (__stdcall *)(int))v2->m_pkMiddle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v10);
  v17 = v2->m_pkRight->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = ((int (*)(void))v2->m_pkLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v17[43].__vecDelDtor((NiRefObject *)v2->m_pkRight, v10 + v18);
}
// A85C00: using guessed type int __security_cookie;

//----- (005FE020) --------------------------------------------------------
void __thiscall FlexDlgBtn::OnChangeButShow(FlexDlgBtn *this, PgWinBut::ButShow eShow)
{
  if ( eShow )
  {
    if ( eShow == 1 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        0,
        255,
        204,
        255);
    }
    else
    {
      if ( eShow == 2 )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
          246,
          255,
          0,
          255);
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      255,
      255,
      255,
      255);
  }
}

//----- (005FE0B0) --------------------------------------------------------
void __thiscall TextBtn::TextBtn(TextBtn *this)
{
  TextBtn *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TextBtn::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TextBtn::_vftable_;
}
// 9BDDB4: using guessed type int (__stdcall *TextBtn___vftable_)(int uiFlags);
// 9BDDD4: using guessed type int (__thiscall *TextBtn___vftable_)(void *p, char);

//----- (005FE0D0) --------------------------------------------------------
void __thiscall TextBtn::_TextBtn(TextBtn *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TextBtn::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TextBtn::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9BDDB4: using guessed type int (__stdcall *TextBtn___vftable_)(int uiFlags);
// 9BDDD4: using guessed type int (__thiscall *TextBtn___vftable_)(void *p, char);

//----- (005FE0F0) --------------------------------------------------------
void __thiscall TextBtn::OnChangeButShow(TextBtn *this, PgWinBut::ButShow eShow)
{
  TextBtn *v2; // esi@1
  int v3; // [sp+0h] [bp-4h]@0
  signed int v4; // [sp+0h] [bp-4h]@4

  v2 = this;
  if ( eShow )
  {
    if ( eShow == 1 )
    {
      ((void (__stdcall *)(_DWORD, signed int, signed int, signed int, int))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        0,
        255,
        204,
        255,
        v3);
      v4 = 1;
    }
    else
    {
      if ( eShow != 2 )
        return;
      ((void (__stdcall *)(signed int, signed int, _DWORD, signed int, int))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
        54,
        255,
        0,
        255,
        v3);
      v4 = 2;
    }
  }
  else
  {
    ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      246,
      255,
      0,
      255,
      v3);
    v4 = 0;
  }
  ((void (__cdecl *)(signed int))v2->m_pkDeco->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(v4);
}

//----- (005FE190) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::AutoSizingDialogWin(AutoSizingDialogWin *this)
{
  AutoSizingDialogWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->m_pkFont = 0;
  v1->m_dwCurrentRunningScenarioID = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoSizingDialogWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoSizingDialogWin::_vftable_;
  v1->m_uiVerticalGap = 4;
  v1->m_dwCurrQuestID = -1;
  v1->m_byCurrScriptCmd = -1;
}
// 9BE00C: using guessed type int (__stdcall *AutoSizingDialogWin___vftable_)(int uiFlags);
// 9BE02C: using guessed type int (__thiscall *AutoSizingDialogWin___vftable_)(void *p, char);

//----- (005FE1E0) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::_AutoSizingDialogWin(AutoSizingDialogWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoSizingDialogWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoSizingDialogWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
}
// 9BE00C: using guessed type int (__stdcall *AutoSizingDialogWin___vftable_)(int uiFlags);
// 9BE02C: using guessed type int (__thiscall *AutoSizingDialogWin___vftable_)(void *p, char);

//----- (005FE200) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::SetVerticalGap(AutoSizingDialogWin *this, int iGap)
{
  SpScreenText **v2; // esi@1
  signed int v3; // edi@1

  v2 = (SpScreenText **)this->m_apkTextGeoms;
  v3 = 3;
  do
  {
    SpScreenText::SetVerticalGap(*v2, iGap);
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (005FE230) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::SpeechBubbleDlgWin(SpeechBubbleDlgWin *this)
{
  SpeechBubbleDlgWin *v1; // esi@1

  v1 = this;
  SpeechBubbleWin::SpeechBubbleWin(&this->baseclass_0);
  v1->m_pkRewardWin = 0;
  v1->m_bClickPortalNPC = 0;
  v1->m_pkDlgQuestListWin = 0;
  v1->m_bShowOutLine = 0;
  v1->m_bSelectReward = 0;
  v1->m_uiDefaultRewardWinWidth = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpeechBubbleDlgWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpeechBubbleDlgWin::_vftable_;
}
// 9BE1F8: using guessed type int (__stdcall *SpeechBubbleDlgWin___vftable_)(int uiFlags);
// 9BE214: using guessed type int (__thiscall *SpeechBubbleDlgWin___vftable_)(void *p, char);

//----- (005FE280) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::_SpeechBubbleDlgWin(SpeechBubbleDlgWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpeechBubbleDlgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpeechBubbleDlgWin::_vftable_;
  SpeechBubbleWin::_SpeechBubbleWin(&this->baseclass_0);
}
// 9BE1F8: using guessed type int (__stdcall *SpeechBubbleDlgWin___vftable_)(int uiFlags);
// 9BE214: using guessed type int (__thiscall *SpeechBubbleDlgWin___vftable_)(void *p, char);

//----- (005FE2A0) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::ShowOutLineBtn(SpeechBubbleDlgWin *this, bool b)
{
  if ( this->m_bShowOutLine )
    ((void (__stdcall *)(_DWORD))this->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
}

//----- (005FE2D0) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::SetShowOutLineBtn(SpeechBubbleDlgWin *this, bool b)
{
  this->m_bShowOutLine = b;
  ((void (__stdcall *)(_DWORD))this->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
}

//----- (005FE300) --------------------------------------------------------
int __thiscall SpeechBubbleDlgWin::GetBtnCount(SpeechBubbleDlgWin *this)
{
  AutoSizingDialogWin *v1; // eax@1
  int result; // eax@2

  v1 = this->m_pkDialog;
  if ( v1 )
    result = v1->m_iBtnCount;
  else
    result = 0;
  return result;
}

//----- (005FE320) --------------------------------------------------------
void __thiscall NpcDialogWin::ShowOutLineBtn(NpcDialogWin *this, float fCurTime)
{
  NpcDialogWin *v2; // esi@1
  SpeechBubbleDlgWin *v3; // eax@3

  v2 = this;
  if ( CNSTimer_Interval::IsRun_GetCount(&this->m_kRandomTimer_Interval, fCurTime) )
    v2->m_bCheckTimer = v2->m_bCheckTimer == 0;
  v3 = v2->m_pkNpcDlgWin;
  if ( v3->m_bShowOutLine )
    ((void (__stdcall *)(_DWORD))v3->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bCheckTimer);
}

//----- (005FE380) --------------------------------------------------------
bool __cdecl DlgQuestListWin::QuestNameList::SortType(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw)
{
  unsigned int *v2; // eax@1
  unsigned int *v3; // ecx@1
  bool result; // al@2

  v2 = (&DlgQuestListWin::QuestNameList::ms_TypePriority)[lhw->m_Type];
  v3 = (&DlgQuestListWin::QuestNameList::ms_TypePriority)[rhw->m_Type];
  if ( v2 == v3 )
    result = 0;
  else
    result = v2 < v3;
  return result;
}
// A99E98: using guessed type unsigned int *DlgQuestListWin__QuestNameList__ms_TypePriority;

//----- (005FE3B0) --------------------------------------------------------
bool __cdecl DlgQuestListWin::QuestNameList::SortRepeatable(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw)
{
  return lhw->m_Repeatable & ((lhw->m_Repeatable == rhw->m_Repeatable) - 1);
}

//----- (005FE3D0) --------------------------------------------------------
bool __cdecl DlgQuestListWin::QuestNameList::SortStartItem(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw)
{
  return lhw->m_StartItem & ((lhw->m_StartItem == rhw->m_StartItem) - 1);
}

//----- (005FE3F0) --------------------------------------------------------
bool __cdecl DlgQuestListWin::QuestNameList::SortStartQuest(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw)
{
  return lhw->m_StartQuest & ((lhw->m_StartQuest == rhw->m_StartQuest) - 1);
}

//----- (005FE410) --------------------------------------------------------
bool __cdecl DlgQuestListWin::QuestNameList::SortEvent(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw)
{
  char v2; // al@1
  bool result; // al@2

  v2 = lhw->m_Type;
  if ( v2 == rhw->m_Type )
    result = 0;
  else
    result = v2 == 3;
  return result;
}

//----- (005FE430) --------------------------------------------------------
bool __cdecl DlgQuestListWin::QuestNameList::SortLevel(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw)
{
  return rhw->m_Level < lhw->m_Level;
}

//----- (005FE450) --------------------------------------------------------
bool __cdecl DlgQuestListWin::QuestNameList::SortStatus(DlgQuestListWin::QuestNameList *lhw, DlgQuestListWin::QuestNameList *rhw)
{
  unsigned int *v2; // eax@1
  unsigned int *v3; // ecx@1
  bool result; // al@2

  v2 = (&DlgQuestListWin::QuestNameList::ms_StatusPriority)[lhw->m_Status];
  v3 = (&DlgQuestListWin::QuestNameList::ms_StatusPriority)[rhw->m_Status];
  if ( v2 == v3 )
    result = 0;
  else
    result = v2 < v3;
  return result;
}
// A99EC8: using guessed type unsigned int *DlgQuestListWin__QuestNameList__ms_StatusPriority;

//----- (005FE480) --------------------------------------------------------
void __thiscall DlgQuestListWin::DlgQuestListWin(DlgQuestListWin *this)
{
  DlgQuestListWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_currTalkingNpcID = -1;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DlgQuestListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DlgQuestListWin::_vftable_;
}
// 9BE438: using guessed type int (__stdcall *DlgQuestListWin___vftable_)(int uiFlags);
// 9BE454: using guessed type int (__thiscall *DlgQuestListWin___vftable_)(void *p, char);

//----- (005FE4B0) --------------------------------------------------------
void __thiscall DlgQuestListWin::_DlgQuestListWin(DlgQuestListWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DlgQuestListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DlgQuestListWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9BE438: using guessed type int (__stdcall *DlgQuestListWin___vftable_)(int uiFlags);
// 9BE454: using guessed type int (__thiscall *DlgQuestListWin___vftable_)(void *p, char);

//----- (005FE4D0) --------------------------------------------------------
void __thiscall DlgQuestListWin::OnQuestListLClick(DlgQuestListWin *this, int nIndex)
{
  DlgQuestListWin *v2; // esi@1
  int dwQuestID; // [sp+4h] [bp-4h]@1

  v2 = this;
  if ( SlideListWin::GetData(this->m_pListWinQuestList, nIndex, (unsigned int *)&dwQuestID) )
  {
    LOWORD(nIndex) = v2->m_currTalkingNpcID;
    HIWORD(nIndex) = dwQuestID;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x11u, 0xFu, &nIndex, 4);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (005FE530) --------------------------------------------------------
void __thiscall DlgQuestListWin::UpdateMeWin(DlgQuestListWin *this, float fCurTime)
{
  DlgQuestListWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinQuestList, v2->m_pSlideBarList);
}

//----- (005FE560) --------------------------------------------------------
void __thiscall DlgQuestListWin::OnHelpLink(DlgQuestListWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "QuestList");
}

//----- (005FE590) --------------------------------------------------------
void __cdecl NpcBaseTextParsing(char *pcText, char *acResult, int iMaxStrLen)
{
  char *v3; // ebx@1
  char v4; // al@1
  int v5; // esi@1
  Name5 *v6; // eax@5
  int v7; // ecx@5
  int v8; // edx@5
  int v9; // ecx@5
  int v10; // edx@5
  char v11; // al@5
  char *v12; // ecx@6
  char acUserID[64]; // [sp+10h] [bp-44h]@5
  unsigned int v14; // [sp+50h] [bp-4h]@1
  int v15; // [sp+54h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = pcText;
  v4 = *pcText;
  v5 = 0;
  if ( *pcText )
  {
    while ( 1 )
    {
      if ( v5 >= iMaxStrLen - 1 )
        goto LABEL_12;
      if ( v4 != 37 )
        break;
      ++v3;
      if ( *v3 == 110 )
      {
        v6 = User::GetMainCharID(&g_kUser);
        v7 = *(_DWORD *)&v6->n5_name[4];
        *(_DWORD *)acUserID = *(_DWORD *)&v6->n5_name[0];
        v8 = *(_DWORD *)&v6->n5_name[8];
        *(_DWORD *)&acUserID[4] = v7;
        v9 = *(_DWORD *)&v6->n5_name[12];
        *(_DWORD *)&acUserID[8] = v8;
        v10 = *(_DWORD *)&v6->n5_name[16];
        v11 = acUserID[0];
        *(_DWORD *)&acUserID[12] = v9;
        *(_DWORD *)&acUserID[16] = v10;
        acUserID[20] = 0;
        if ( acUserID[0] )
        {
          v12 = &acUserID[-v5];
          do
          {
            acResult[v5] = v11;
            v11 = v12[v5++ + 1];
          }
          while ( v11 );
        }
        goto LABEL_10;
      }
LABEL_11:
      v4 = *v3;
      if ( !*v3 )
        goto LABEL_12;
    }
    acResult[v5++] = v4;
LABEL_10:
    ++v3;
    goto LABEL_11;
  }
LABEL_12:
  acResult[v5] = 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (005FE630) --------------------------------------------------------
bool __thiscall TextBtn::Create(TextBtn *this, int iXPos, int iYPos, PgSprData *pkDeco, PgFont *pkFont, PgWin *pkParent, unsigned int uiCmdMsg)
{
  unsigned int v7; // ebx@1
  TextBtn *v8; // esi@1
  bool result; // al@1
  PgWinSpr *v10; // eax@2
  PgWinSpr *v11; // ecx@2
  NiRefObjectVtbl *v12; // edi@2
  int v13; // eax@2
  PgWinText *v14; // eax@2
  NiRefObjectVtbl *v15; // edi@2
  int v16; // eax@2
  NiRefObjectVtbl *v17; // edi@2
  int v18; // eax@2

  v7 = pkFont->baseclass_0.m_dwFontSizeInPixel;
  v8 = this;
  result = PgWinBut::Create(&this->baseclass_0, iXPos, iYPos, 1u, v7, pkParent, uiCmdMsg, 0, 0);
  if ( result )
  {
    v10 = PgWinSpr::CreateWin(0, 0, pkDeco, &v8->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v8->m_pkDeco = v10;
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
    v11 = v8->m_pkDeco;
    v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = ((int (*)(void))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v12[44].__vecDelDtor((NiRefObject *)v8->m_pkDeco, (v7 - v13) >> 1);
    v14 = PgWinText::CreateWin(0, 0, 1u, v7, pkFont, &v8->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v8->m_pkText = v14;
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      v14,
      246,
      255,
      0,
      255);
    v15 = v8->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v16 = ((int (*)(void))v8->m_pkDeco->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v15[43].__vecDelDtor((NiRefObject *)v8->m_pkText, v16 + 3);
    ((void (__stdcall *)(_DWORD))v8->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(4);
    ((void (__stdcall *)(_DWORD))v8->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v17 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v18 = ((int (*)(void))v8->m_pkDeco->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v17[38].__vecDelDtor((NiRefObject *)v8, v18);
    result = 1;
  }
  return result;
}

//----- (005FE770) --------------------------------------------------------
unsigned int __thiscall AutoSizingDialogWin::CalculateApproximateHeight(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, unsigned int *ruiWidth)
{
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v3; // eax@1
  unsigned int v4; // edx@1
  AutoSizingDialogWin::VirtualRect *v5; // ecx@2
  unsigned int v6; // ecx@3
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v7; // ecx@8
  unsigned int result; // eax@8
  unsigned int v9; // ebx@9
  AutoSizingDialogWin::VirtualRect *v10; // esi@10
  int v11; // eax@12
  unsigned int uiHeight; // [sp+10h] [bp+8h]@8

  v3 = rkVRList->baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3->m_element;
      v3 = v3->m_pkNext;
      if ( v5->bFixed )
      {
        v6 = v5->uiWidth;
        if ( v4 < v6 )
          v4 = v6;
      }
    }
    while ( v3 );
    if ( *ruiWidth < v4 )
      *ruiWidth = v4;
  }
  v7 = rkVRList->baseclass_0.baseclass_0.m_pkHead;
  result = 0;
  uiHeight = 0;
  if ( v7 )
  {
    v9 = *ruiWidth;
    do
    {
      v10 = v7->m_element;
      v7 = v7->m_pkNext;
      if ( v10->uiWidth / v9 && v10->uiWidth != v9 )
        v11 = v10->uiHeight * (v10->uiWidth / v9 + 1);
      else
        v11 = v10->uiHeight;
      uiHeight += v11;
    }
    while ( v7 );
    result = uiHeight;
  }
  return result;
}

//----- (005FE7F0) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::AddTextGeomtry(AutoSizingDialogWin *this, unsigned int uiWidth, unsigned int *ruiYPos, char *acText)
{
  AutoSizingDialogWin *v4; // esi@1
  PgTextGeometry *v5; // eax@1
  float v6; // ST1C_4@1
  PgTextGeometry *v7; // eax@1

  v4 = this;
  v5 = this->m_apkTextGeoms[this->m_iTextGeomCount];
  v5->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  v6 = (double)*ruiYPos;
  v7 = v4->m_apkTextGeoms[v4->m_iTextGeomCount];
  v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = 0.0;
  v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v6;
  v7->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 0.0;
  SpScreenText::SetDrawRect(&v4->m_apkTextGeoms[v4->m_iTextGeomCount]->baseclass_0, 0, 0, uiWidth, 10);
  ((void (__stdcall *)(_DWORD))v4->m_apkTextGeoms[v4->m_iTextGeomCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(acText);
  *ruiYPos += ((int (*)(void))v4->m_apkTextGeoms[v4->m_iTextGeomCount++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)();
}

//----- (005FE8B0) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::Approximation(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, unsigned int *ruiWidth, unsigned int *ruiHeight)
{
  unsigned int *v4; // edi@1
  unsigned int v5; // ebx@1
  int v6; // esi@1
  unsigned int v7; // edx@3
  float v8; // ST14_4@3
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v9; // ebx@7
  int v10; // esi@7
  AutoSizingDialogWin::VirtualRect *v11; // eax@8
  int v12; // eax@9
  unsigned int uiAboutMinWidth; // [sp+10h] [bp-8h]@1
  AutoSizingDialogWin *thisa; // [sp+14h] [bp-4h]@1
  signed int i; // [sp+24h] [bp+Ch]@1

  v4 = ruiWidth;
  v5 = *ruiWidth;
  thisa = this;
  uiAboutMinWidth = 0;
  i = 0;
  v6 = v5;
  do
  {
    if ( (unsigned int)v6 <= 5 )
      break;
    v7 = *v4;
    v8 = (double)*v4 / (double)*ruiHeight;
    if ( v8 <= 2.4000001 )
    {
      v6 = v5 - v7;
      uiAboutMinWidth = *v4;
      *v4 = v7 + ((v5 - v7) >> 1);
      *ruiHeight = AutoSizingDialogWin::CalculateApproximateHeight(thisa, rkVRList, v4);
    }
    else
    {
      v5 = *v4;
      v6 = v7 - uiAboutMinWidth;
      *v4 = v7 - ((v7 - uiAboutMinWidth) >> 1);
      *ruiHeight = AutoSizingDialogWin::CalculateApproximateHeight(thisa, rkVRList, v4);
    }
    ++i;
  }
  while ( i < 50 );
  v9 = rkVRList->baseclass_0.baseclass_0.m_pkHead;
  v10 = 99999999;
  if ( v9 )
  {
    do
    {
      v11 = v9->m_element;
      v9 = v9->m_pkNext;
      if ( v11->bFixed )
      {
        v12 = v11->uiWidth;
        if ( v10 > (unsigned int)v12 )
          v10 = v12;
      }
      else
      {
        if ( *v4 && v10 > v11->uiWidth % *v4 )
          v10 = v11->uiWidth % *v4;
      }
    }
    while ( v9 );
    if ( (unsigned int)v10 < 0x3C )
    {
      *v4 += v10 + 40;
      *ruiHeight = AutoSizingDialogWin::CalculateApproximateHeight(thisa, rkVRList, v4);
    }
  }
  if ( *v4 > 0x258 )
  {
    *v4 = 600;
    *ruiHeight = AutoSizingDialogWin::CalculateApproximateHeight(thisa, rkVRList, v4);
  }
}

//----- (005FE9F0) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::ProcessMeInput(SpeechBubbleDlgWin *this, bool *bHit)
{
  SpeechBubbleDlgWin *v2; // edi@1
  AutoSizingDialogWin *v3; // eax@3
  int v4; // esi@5
  NiExtraData *v5; // eax@6
  const char *v6; // eax@7

  v2 = this;
  if ( dword_B7035C >= 1 )
  {
    if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                            PgWin::ms_iMsX.x,
                            PgWin::ms_iMsY) == 1 )
    {
      v3 = v2->m_pkDialog;
      if ( v3 )
      {
        if ( v3->m_iBtnCount == 1 )
        {
          v4 = (int)v3->m_apkBtns[0];
          if ( v4 )
          {
            v5 = NiObjectNET::GetExtraData((NiObjectNET *)v4, "action");
            if ( v5 )
            {
              v6 = (const char *)v5[1].baseclass_0.baseclass_0.vfptr;
              if ( v6 )
              {
                if ( !strncmp(v6, "quest_ack", 9u) )
                  PgWin::PostCommandMsg(
                    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                    0x12FD1u,
                    v4);
              }
            }
          }
        }
      }
    }
  }
  PgWinFrame::ProcessMeInput(&v2->baseclass_0.baseclass_0, bHit);
}
// B7035C: using guessed type int dword_B7035C;

//----- (005FEA90) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::DirectMessage(SpeechBubbleDlgWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  SpeechBubbleDlgWin *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 15 )
  {
    if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                    + 4))(
        15,
        pvBody,
        this);
      if ( v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                                                      + 20))(
          15,
          pvBody,
          v4);
    }
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
      v4,
      15,
      pvBody,
      v4);
  }
}

//----- (005FEAE0) --------------------------------------------------------
void __thiscall NpcDialogWin::NpcDialogWin(NpcDialogWin *this)
{
  NpcDialogWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NpcDialogWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NpcDialogWin::_vftable_;
  v1->m_spFaceCut.m_pObject = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kRandomTimer_Interval);
  v1->m_currTalkingNpcID = -1;
  v1->m_uiDivorceSelect = 0;
}
// 9BE69C: using guessed type int (__stdcall *NpcDialogWin___vftable_)(int uiFlags);
// 9BE6BC: using guessed type int (__thiscall *NpcDialogWin___vftable_)(void *p, char);

//----- (005FEB70) --------------------------------------------------------
void __thiscall NpcDialogWin::_NpcDialogWin(NpcDialogWin *this)
{
  PgWinFrame *v1; // esi@1
  PgWinSpr *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NpcDialogWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NpcDialogWin::_vftable_;
  v2 = this->m_spFaceCut.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9BE69C: using guessed type int (__stdcall *NpcDialogWin___vftable_)(int uiFlags);
// 9BE6BC: using guessed type int (__thiscall *NpcDialogWin___vftable_)(void *p, char);

//----- (005FEC00) --------------------------------------------------------
void __thiscall NpcDialogWin::SetCloseTime(NpcDialogWin *this, float fCloseTime)
{
  this->m_bCloseTimerEnabled = 1;
  this->m_fTimeToClose = Timer::ms_fCurTime + fCloseTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005FEC20) --------------------------------------------------------
void __thiscall NpcDialogWin::CheckCloseTimer(NpcDialogWin *this, unsigned int wDlgID)
{
  NpcDialogWin *v2; // edi@1
  CQuest *v3; // esi@1
  DialogParser::TokenType v4; // eax@1
  double v5; // st7@5
  int rkDetail; // [sp+8h] [bp-Ch]@1
  QuestDialogParser kParser; // [sp+10h] [bp-4h]@1

  v2 = this;
  this->m_bCloseTimerEnabled = 0;
  v3 = QuestDataMgr::GetQuest();
  DialogParser::DialogParser(&kParser.baseclass_0);
  QuestDialogParser::StartParsing(&kParser, v3, wDlgID);
  v4 = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
  if ( v4 != 11 )
  {
    while ( v4 != 15 )
    {
      v4 = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
      if ( v4 == 11 )
        return;
    }
    v5 = (double)rkDetail;
    v2->m_bCloseTimerEnabled = 1;
    v2->m_fTimeToClose = v5 + Timer::ms_fCurTime;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005FECA0) --------------------------------------------------------
void __thiscall NpcDialogWin::OnClose(NpcDialogWin *this)
{
  NpcDialogWin *v1; // esi@1
  SpeechBubbleDlgWin *v2; // eax@1
  PgFrameWork *v3; // eax@3
  AutoSizingDialogWin *v4; // edx@4

  v1 = this;
  v2 = this->m_pkNpcDlgWin;
  v2->m_bShowOutLine = 0;
  v2->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v2->m_apkOutLineBtns,
    0);
  if ( (unsigned __int8)((int (*)(void))v1->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
    ((void (__stdcall *)(_DWORD))v1->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
  {
    v4 = v1->m_pkNpcDlgWin->m_pkDialog;
    if ( v4 )
    {
      if ( v4->m_iBtnCount > 1 )
        GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v3, BIL_BEGINNER_1);
    }
  }
}

//----- (005FED30) --------------------------------------------------------
void __thiscall NpcDialogWin::CloseDialog(NpcDialogWin *this)
{
  NpcDialogWin *v1; // esi@1
  SpeechBubbleDlgWin *v2; // eax@1
  SpeechBubbleDlgWin *v3; // esi@3
  PgWin *v4; // esi@4
  PgFrameWork *v5; // eax@6

  v1 = this;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0xBu, 0, 0);
  ((void (__stdcall *)(_DWORD))v1->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_pkNpcDlgWin;
  if ( v2 )
    v2->m_bClickPortalNPC = 0;
  v3 = v1->m_pkNpcDlgWin;
  if ( v3 )
  {
    v4 = (PgWin *)v3->m_pkDlgQuestListWin;
    if ( v4 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
  }
  v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v5 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v5, BIL_BEGINNER_1);
}

//----- (005FEDC0) --------------------------------------------------------
void __thiscall DlgQuestListWin::UpDateListSideBar(DlgQuestListWin *this)
{
  DlgQuestListWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarList;
  if ( v2 )
  {
    v3 = v1->m_pListWinQuestList;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
    }
  }
}

//----- (005FEE10) --------------------------------------------------------
bool __thiscall FlexDlgBtn::Create(FlexDlgBtn *this, int iXPos, int iYPos, PgSprData *pkLeft, PgSprData *pkRight, PgSprData *pkMiddle, PgWin *pkParent, unsigned int uiCmdMsg)
{
  FlexDlgBtn *v8; // esi@1
  bool result; // al@4
  unsigned int v10; // eax@5
  PgWinSpr *v11; // eax@6
  PgWinSpr *v12; // eax@6
  PgWinSpr *v13; // eax@6
  PgWinSpr *v14; // edi@6
  PgFont *v15; // ST10_4@6
  unsigned int v16; // eax@6
  PgWinText *v17; // eax@6

  v8 = this;
  if ( (pkLeft || pkRight || pkMiddle)
    && (v10 = pkMiddle->m_akHitTester.m_pBase->m_pObject->m_uiWidth
            + pkRight->m_akHitTester.m_pBase->m_pObject->m_uiWidth
            + pkLeft->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
        this->m_iBtnWidth = v10,
        PgWinBut::Create(
          &this->baseclass_0,
          iXPos,
          iYPos,
          v10,
          pkLeft->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
          pkParent,
          uiCmdMsg,
          0,
          0)) )
  {
    v11 = PgWinSpr::CreateWin(0, 0, pkLeft, &v8->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v8->m_pkLeft = v11;
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v11,
      0);
    v12 = PgWinSpr::CreateWin(0, 0, pkRight, &v8->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v8->m_pkRight = v12;
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
    v13 = PgWinSpr::CreateWin(0, 0, pkMiddle, &v8->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v8->m_pkMiddle = v13;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v13,
      0);
    v14 = v8->m_pkLeft;
    v15 = Font::Get(SMALL);
    v16 = ((int (__thiscall *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v14);
    v17 = PgWinText::CreateWin(iXPos, iYPos, v8->m_iBtnWidth, v16, v15, &v8->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v8->m_pkText = v17;
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v17,
      5u);
    ((void (__stdcall *)(_DWORD))v8->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    FlexDlgBtn::SetBtnWidth(v8, v8->m_iBtnWidth);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (005FEF70) --------------------------------------------------------
unsigned int __thiscall FlexDlgBtn::EstimateBtnWidth(FlexDlgBtn *this, char *pcText)
{
  FlexDlgBtn *v2; // esi@1
  PgWinSpr *v3; // edi@1
  int v4; // esi@1
  int v5; // eax@1
  tagSIZE kSize; // [sp+8h] [bp-8h]@1

  v2 = this;
  PgFont::GetTextSize(this->m_pkText->m_spTextGeom.m_pObject->m_spPgFont.m_pObject, pcText, strlen(pcText), &kSize);
  v3 = v2->m_pkRight;
  v4 = ((int (*)(void))v2->m_pkLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v5 = ((int (__thiscall *)(PgWinSpr *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3);
  return kSize.cx + v4 + v5;
}

//----- (005FEFE0) --------------------------------------------------------
void __thiscall FlexDlgBtn::SetBtnText(FlexDlgBtn *this, char *pcText, bool bAutoScale)
{
  FlexDlgBtn *v3; // esi@1
  PgWinSpr *v4; // ebx@2
  PgTextGeometry *v5; // edi@2
  int v6; // eax@2
  int v7; // ebx@2
  int v8; // eax@2

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  if ( bAutoScale )
  {
    v4 = v3->m_pkRight;
    v5 = v3->m_pkText->m_spTextGeom.m_pObject;
    v6 = ((int (*)(void))v3->m_pkLeft->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v7 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4)
       + v6;
    v8 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor)(v5);
    FlexDlgBtn::SetBtnWidth(v3, v7 + v8);
  }
}

//----- (005FF060) --------------------------------------------------------
void __thiscall TextBtn::SetBtnText(TextBtn *this, char *pcText)
{
  char *v2; // eax@1
  TextBtn *v3; // esi@1
  char v4; // dl@2
  PgWinText *v5; // ecx@3
  NiRefObjectVtbl *v6; // edi@3
  int v7; // eax@3
  tagSIZE kSize; // [sp+8h] [bp-1Ch]@3
  tagRECT kRect; // [sp+10h] [bp-14h]@3
  unsigned int v10; // [sp+20h] [bp-4h]@1
  int v11; // [sp+24h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = pcText;
  v3 = this;
  do
    v4 = *v2++;
  while ( v4 );
  PgFont::GetTextSize(this->m_pkText->m_spTextGeom.m_pObject->m_spPgFont.m_pObject, pcText, v2 - (pcText + 1), &kSize);
  kRect.right = kSize.cx;
  v5 = v3->m_pkText;
  kRect.bottom = kSize.cy;
  kRect.left = 0;
  kRect.top = 0;
  ((void (__stdcall *)(tagRECT *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&kRect);
  ((void (__stdcall *)(char *))v3->m_pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText);
  v6 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = ((int (*)(void))v3->m_pkDeco->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  v6[38].__vecDelDtor((NiRefObject *)v3, v7 + kSize.cx + 3);
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
    (NiRefObject *)v3,
    kSize.cy);
}
// A85C00: using guessed type int __security_cookie;

//----- (005FF130) --------------------------------------------------------
unsigned int __thiscall TextBtn::EstimateBtnWidth(TextBtn *this, char *pcText)
{
  TextBtn *v2; // esi@1
  tagSIZE kSize; // [sp+8h] [bp-8h]@1

  v2 = this;
  PgFont::GetTextSize(this->m_pkText->m_spTextGeom.m_pObject->m_spPgFont.m_pObject, pcText, strlen(pcText), &kSize);
  return kSize.cx
       + ((int (*)(void))v2->m_pkDeco->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
}

//----- (005FF190) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::BuildVirtualRectOfNormalDlg(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, char *pcText, unsigned int *ruiMaxWidth, unsigned int *ruiMaxHeight)
{
  PgFont *v5; // ecx@1
  char *v6; // ebx@2
  char v7; // dl@3
  char *v8; // eax@3
  int v9; // eax@7
  void *v10; // eax@8
  void *v11; // edi@8
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v12; // eax@8
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v13; // ecx@8
  unsigned int *v14; // ecx@11
  void *v15; // eax@17
  tagSIZE kSize; // [sp+0h] [bp-10h]@6
  PgFont *pkFont; // [sp+8h] [bp-8h]@1
  AutoSizingDialogWin *v18; // [sp+Ch] [bp-4h]@1

  v18 = this;
  v5 = this->m_pkFont;
  pkFont = v5;
  if ( v5 )
  {
    v6 = pcText;
    if ( pcText )
    {
      v7 = *pcText;
      v8 = pcText;
      if ( *pcText )
      {
        do
        {
          if ( v7 == 10 )
          {
            if ( v8 >= v6 )
            {
              v9 = v5->baseclass_0.m_dwFontSizeInPixel;
              kSize.cx = 1;
              kSize.cy = v9;
            }
            else
            {
              PgFont::GetTextSize(v5, v8, v6 - v8, &kSize);
            }
            v10 = operator new(0xCu);
            v11 = v10;
            *((_DWORD *)v10 + 1) = kSize.cy + v18->m_uiVerticalGap;
            *(_DWORD *)v10 = kSize.cx;
            *((_BYTE *)v10 + 8) = 0;
            v12 = rkVRList->baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *)rkVRList);
            v12->m_element = (AutoSizingDialogWin::VirtualRect *)v11;
            v12->m_pkNext = 0;
            v12->m_pkPrev = rkVRList->baseclass_0.baseclass_0.m_pkTail;
            v13 = rkVRList->baseclass_0.baseclass_0.m_pkTail;
            if ( v13 )
              v13->m_pkNext = v12;
            else
              rkVRList->baseclass_0.baseclass_0.m_pkHead = v12;
            v14 = ruiMaxWidth;
            ++*(_DWORD *)&rkVRList->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
            rkVRList->baseclass_0.baseclass_0.m_pkTail = v12;
            if ( kSize.cx > *v14 )
              *v14 = kSize.cx;
            *ruiMaxHeight += kSize.cy;
            v5 = pkFont;
            ++v6;
            v8 = v6;
          }
          else
          {
            ++v6;
          }
          v7 = *v6;
        }
        while ( *v6 );
        if ( v8 < v6 )
        {
          PgFont::GetTextSize(v5, v8, v6 - v8, &kSize);
          v15 = operator new(0xCu);
          *((_DWORD *)v15 + 1) = kSize.cy + v18->m_uiVerticalGap;
          *(_DWORD *)v15 = kSize.cx;
          pcText = (char *)v15;
          *((_BYTE *)v15 + 8) = 0;
          NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)rkVRList,
            (NiD3DXEffectParameter *const *)&pcText);
          if ( kSize.cx > *ruiMaxWidth )
            *ruiMaxWidth = kSize.cx;
          *ruiMaxHeight += kSize.cy;
        }
      }
    }
  }
}

//----- (005FF2D0) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::BuildVirtualRectOfQuestDlg(AutoSizingDialogWin *this, NiTList<AutoSizingDialogWin::VirtualRect *> *rkVRList, unsigned __int16 questID, unsigned int wQuestDlgID, unsigned int *ruiMaxWidth, unsigned int *ruiMaxHeight)
{
  AutoSizingDialogWin *v6; // ebx@1
  CQuest *v7; // esi@1
  CQuestData *v8; // ecx@3
  const char *v9; // eax@5
  const void *v10; // ecx@5
  char v11; // dl@6
  unsigned int v12; // eax@7
  const void *v13; // esi@7
  void *v14; // edi@7
  char v15; // cl@8
  char *v16; // edi@9
  char v17; // al@10
  DialogParser::TokenType i; // eax@12
  void *v19; // eax@14
  Name5 *v20; // eax@17
  int v21; // edx@17
  int v22; // ecx@17
  int v23; // edx@17
  unsigned int v24; // eax@17
  void *v25; // edi@17
  char v26; // cl@18
  char *v27; // edi@20
  char v28; // al@21
  int v29; // eax@23
  char v30; // cl@24
  int v31; // eax@25
  void *v32; // eax@26
  unsigned int *v33; // edi@26
  void *v34; // esi@26
  unsigned int v35; // eax@26
  void *v36; // esi@30
  int (*v37)(void); // edx@30
  int v38; // eax@33
  char v39; // cl@34
  int v40; // eax@35
  void *v41; // eax@36
  unsigned int v42; // ecx@36
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *v43; // ecx@38
  int v44; // eax@39
  char v45; // cl@40
  int v46; // eax@41
  void *v47; // eax@42
  void *v48; // esi@42
  unsigned int v49; // eax@42
  int v50; // eax@47
  char v51; // cl@48
  int v52; // eax@49
  void *v53; // eax@50
  void *v54; // esi@50
  unsigned int *v55; // ecx@50
  unsigned int v56; // eax@50
  int v57; // [sp+Ch] [bp-484h]@26
  int v58; // [sp+10h] [bp-480h]@26
  int v59; // [sp+14h] [bp-47Ch]@36
  int v60; // [sp+18h] [bp-478h]@36
  tagSIZE kSize; // [sp+1Ch] [bp-474h]@14
  int v62; // [sp+24h] [bp-46Ch]@42
  int v63; // [sp+28h] [bp-468h]@42
  const char *rkDetail; // [sp+2Ch] [bp-464h]@12
  size_t iTextSize; // [sp+30h] [bp-460h]@14
  QuestDialogParser kParser; // [sp+34h] [bp-45Ch]@3
  unsigned int *v67; // [sp+38h] [bp-458h]@1
  PgFont *pkFont; // [sp+3Ch] [bp-454h]@2
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *thisa; // [sp+40h] [bp-450h]@1
  unsigned int *v70; // [sp+44h] [bp-44Ch]@1
  void *pkCurrRect; // [sp+48h] [bp-448h]@7
  char acDlgText[1024]; // [sp+4Ch] [bp-444h]@3
  char acUserID[64]; // [sp+44Ch] [bp-44h]@17
  unsigned int v74; // [sp+48Ch] [bp-4h]@1
  int v75; // [sp+490h] [bp+0h]@1

  v74 = (unsigned int)&v75 ^ __security_cookie;
  v6 = this;
  thisa = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)rkVRList;
  v67 = ruiMaxWidth;
  v70 = ruiMaxHeight;
  v7 = QuestDataMgr::GetQuest();
  if ( v7 )
  {
    pkFont = v6->m_pkFont;
    if ( pkFont )
    {
      DialogParser::DialogParser(&kParser.baseclass_0);
      QuestDialogParser::StartParsing(&kParser, v7, wQuestDlgID);
      acDlgText[0] = 0;
      v8 = v7->m_pQuestData;
      if ( v8 )
      {
        if ( questID != -1 )
        {
          v9 = CQuestData::GetQuestName(v8, questID);
          v10 = v9;
          do
            v11 = *v9++;
          while ( v11 );
          v12 = v9 - v10;
          v13 = v10;
          v14 = (char *)&pkCurrRect + 3;
          do
          {
            v15 = *((_BYTE *)v14 + 1);
            v14 = (char *)v14 + 1;
          }
          while ( v15 );
          memcpy(v14, v13, v12);
          v16 = (char *)&pkCurrRect + 3;
          do
            v17 = (v16++)[1];
          while ( v17 );
          *(_WORD *)v16 = word_9BD6BC;
        }
        for ( i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
              i != 11;
              i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail) )
        {
          switch ( i )
          {
            case 0:
              strncat(acDlgText, rkDetail, iTextSize);
              PgFont::GetTextSize(pkFont, (char *)rkDetail, iTextSize, &kSize);
              v19 = operator new(0xCu);
              *(_DWORD *)v19 += kSize.cx;
              if ( *((_DWORD *)v19 + 1) < (unsigned int)kSize.cy )
                *((_DWORD *)v19 + 1) = kSize.cy;
              *((_BYTE *)v19 + 8) = 0;
              break;
            case 1:
              v20 = User::GetMainCharID(&g_kUser);
              v21 = *(_DWORD *)&v20->n5_name[4];
              *(_DWORD *)acUserID = *(_DWORD *)&v20->n5_name[0];
              v22 = *(_DWORD *)&v20->n5_name[8];
              *(_DWORD *)&acUserID[4] = v21;
              v23 = *(_DWORD *)&v20->n5_name[12];
              *(_DWORD *)&acUserID[16] = *(_DWORD *)&v20->n5_name[16];
              *(_DWORD *)&acUserID[8] = v22;
              *(_DWORD *)&acUserID[12] = v23;
              acUserID[20] = 0;
              v24 = strlen(acUserID) + 1;
              v25 = (char *)&pkCurrRect + 3;
              do
              {
                v26 = *((_BYTE *)v25 + 1);
                v25 = (char *)v25 + 1;
              }
              while ( v26 );
              memcpy(v25, acUserID, v24);
              break;
            case 2:
              v27 = (char *)&pkCurrRect + 3;
              do
                v28 = (v27++)[1];
              while ( v28 );
              *(_WORD *)v27 = word_9BD6C0;
              break;
            case 7:
              v29 = (int)acDlgText;
              do
                v30 = *(_BYTE *)v29++;
              while ( v30 );
              v31 = v29 - (_DWORD)&acDlgText[1];
              if ( v31 )
              {
                PgFont::GetTextSize(pkFont, acDlgText, v31, (tagSIZE *)&v57);
                v32 = operator new(0xCu);
                v33 = v67;
                v34 = v32;
                *(_DWORD *)v32 = v57;
                *((_DWORD *)v32 + 1) = v58 + v6->m_uiVerticalGap;
                v35 = *(_DWORD *)v32;
                pkCurrRect = v34;
                if ( v35 > *v33 )
                  *v33 = v35;
                *v70 += *((_DWORD *)v34 + 1);
                NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
                  thisa,
                  (NiD3DXEffectParameter *const *)&pkCurrRect);
                *((_BYTE *)v34 + 8) = 0;
                acDlgText[0] = 0;
              }
              else
              {
                v33 = v67;
              }
              v36 = operator new(0xCu);
              v37 = (int (*)(void))v6->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor;
              pkCurrRect = v36;
              *((_DWORD *)v36 + 1) = v6->m_uiVerticalGap + v37();
              *(_DWORD *)v36 = TextBtn::EstimateBtnWidth(v6->m_apkBtns[0], (char *)rkDetail);
              *((_BYTE *)v36 + 8) = 1;
              if ( *(_DWORD *)v36 > *v33 )
                *v33 = *(_DWORD *)v36;
              *v70 += *((_DWORD *)v36 + 1);
              NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
                thisa,
                (NiD3DXEffectParameter *const *)&pkCurrRect);
              break;
            case 5:
              v38 = (int)acDlgText;
              do
                v39 = *(_BYTE *)v38++;
              while ( v39 );
              v40 = v38 - (_DWORD)&acDlgText[1];
              if ( v40 )
              {
                PgFont::GetTextSize(pkFont, acDlgText, v40, (tagSIZE *)&v59);
                v41 = operator new(0xCu);
                *(_DWORD *)v41 = v59;
                *((_DWORD *)v41 + 1) = v60 + v6->m_uiVerticalGap;
                v42 = *(_DWORD *)v41;
                pkCurrRect = v41;
                if ( v42 > *v67 )
                  *v67 = v42;
                *v70 += *((_DWORD *)v41 + 1);
                v43 = thisa;
                *((_BYTE *)v41 + 8) = 0;
                NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
                  v43,
                  (NiD3DXEffectParameter *const *)&pkCurrRect);
                goto LABEL_45;
              }
              break;
            case 4:
              v44 = (int)acDlgText;
              do
                v45 = *(_BYTE *)v44++;
              while ( v45 );
              v46 = v44 - (_DWORD)&acDlgText[1];
              if ( v46 )
              {
                PgFont::GetTextSize(pkFont, acDlgText, v46, (tagSIZE *)&v62);
                v47 = operator new(0xCu);
                v48 = v47;
                *(_DWORD *)v47 = v62;
                *((_DWORD *)v47 + 1) = v63 + v6->m_uiVerticalGap;
                v49 = *(_DWORD *)v47;
                pkCurrRect = v48;
                if ( v49 > *v67 )
                  *v67 = v49;
                *v70 += *((_DWORD *)v48 + 1);
                NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
                  thisa,
                  (NiD3DXEffectParameter *const *)&pkCurrRect);
                *((_BYTE *)v48 + 8) = 0;
LABEL_45:
                acDlgText[0] = 0;
              }
              break;
            default:
              continue;
          }
        }
        v50 = (int)acDlgText;
        do
          v51 = *(_BYTE *)v50++;
        while ( v51 );
        v52 = v50 - (_DWORD)&acDlgText[1];
        if ( v52 )
        {
          PgFont::GetTextSize(pkFont, acDlgText, v52, (tagSIZE *)&v62);
          v53 = operator new(0xCu);
          v54 = v53;
          *(_DWORD *)v53 = v62;
          v55 = v67;
          *((_DWORD *)v53 + 1) = v63 + v6->m_uiVerticalGap;
          v56 = *(_DWORD *)v53;
          pkCurrRect = v54;
          if ( v56 > *v55 )
            *v55 = v56;
          *v70 += *((_DWORD *)v54 + 1);
          NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
            thisa,
            (NiD3DXEffectParameter *const *)&pkCurrRect);
          *((_BYTE *)v54 + 8) = 0;
        }
      }
    }
  }
}
// 9BD6BC: using guessed type __int16 word_9BD6BC;
// 9BD6C0: using guessed type __int16 word_9BD6C0;
// A85C00: using guessed type int __security_cookie;

//----- (005FF7C0) --------------------------------------------------------
bool __thiscall SpeechBubbleDlgWin::AddBtn(SpeechBubbleDlgWin *this, const char *pcText, bool bAutoScale, NiExtraData *pkType, NiExtraData *pkAction)
{
  SpeechBubbleDlgWin *v5; // edi@1
  int v6; // eax@1
  FlexDlgBtn *v7; // esi@3
  bool result; // al@4
  NiRefObjectVtbl *v9; // eax@8
  int v10; // ebx@8
  char v11; // cl@9

  v5 = this;
  v6 = this->m_iBtnCount;
  if ( v6 < 0 || v6 >= 7 )
  {
    result = 0;
  }
  else
  {
    v7 = this->m_apkBtns[v6];
    if ( v7 )
    {
      FlexDlgBtn::SetBtnText(v7, (char *)pcText, bAutoScale);
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v7,
        1u);
      NiObjectNET::RemoveExtraData(&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, "type");
      if ( pkType )
        NiObjectNET::AddExtraData(
          &v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
          "type",
          pkType);
      NiObjectNET::RemoveExtraData(
        &v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        "action");
      if ( pkAction )
      {
        v9 = pkAction[1].baseclass_0.baseclass_0.vfptr;
        v10 = (int)((char *)&v9->__vecDelDtor + 1);
        do
        {
          v11 = LOBYTE(v9->__vecDelDtor);
          v9 = (NiRefObjectVtbl *)((char *)v9 + 1);
        }
        while ( v11 );
        if ( v9 != (NiRefObjectVtbl *)v10 )
          NiObjectNET::AddExtraData(
            &v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
            "action",
            pkAction);
      }
      ++v5->m_iBtnCount;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (005FF880) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::ParseBaseDlgAndCreateBtn(SpeechBubbleDlgWin *this, unsigned __int16 mobid, char *acBaseScript, int iMaxLen, unsigned int uiSeqID)
{
  unsigned int v5; // ST0C_4@1
  int v6; // esi@1
  int v7; // eax@3
  int v8; // eax@4
  char *v9; // eax@5
  NpcDialogData *v10; // eax@6
  char *v11; // esi@7
  char *v12; // edi@8
  DialogParser::TokenType i; // eax@10
  Name5 *v14; // eax@16
  int v15; // edx@16
  int v16; // ecx@16
  int v17; // edx@16
  int v18; // edi@18
  char v19; // al@19
  void *v20; // eax@21
  NiExtraData *v21; // eax@22
  NiExtraData *v22; // edi@22
  void *v23; // eax@24
  void *v24; // esi@24
  SpeechBubbleDlgWin *thisa; // [sp+4h] [bp-64h]@1
  const char *rkDetail; // [sp+8h] [bp-60h]@10
  size_t pString; // [sp+Ch] [bp-5Ch]@14
  DialogParser kParser; // [sp+10h] [bp-58h]@10
  char *Dest; // [sp+14h] [bp-54h]@1
  char acUserID[64]; // [sp+18h] [bp-50h]@16
  unsigned int v31; // [sp+58h] [bp-10h]@1
  int v32; // [sp+64h] [bp-4h]@21
  int v33; // [sp+68h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v5 = (unsigned int)&v33 ^ __security_cookie;
  thisa = this;
  Dest = acBaseScript;
  Font::Get(BOLD);
  v6 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, unsigned int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable
                                                                         + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          mobid,
                          v5) )
  {
    if ( mobid <= *(_WORD *)(v6 + 200) )
    {
      v7 = *(_DWORD *)(v6 + 196) + 4 * mobid;
      if ( *(_DWORD *)v7 )
      {
        v8 = *(_DWORD *)v7;
        if ( v8 )
        {
          v9 = (char *)(v8 + 2);
          if ( v9 )
          {
            v10 = NpcDialogDataTable::GetNpcDialogDataByMobIDX(v9);
            if ( v10 )
            {
              v11 = v10->Dialog;
              if ( v10 != (NpcDialogData *)-64 )
              {
                v12 = Dest;
                if ( Dest )
                  *Dest = 0;
                DialogParser::DialogParser(&kParser);
                DialogParser::StartParsing(&kParser, v11, uiSeqID);
                for ( i = DialogParser::Parse(&kParser, (DialogParser::TokenDetail *)&rkDetail);
                      i != 11;
                      i = DialogParser::Parse(&kParser, (DialogParser::TokenDetail *)&rkDetail) )
                {
                  if ( i == 16 )
                    break;
                  switch ( i )
                  {
                    case 0:
                      if ( v12 )
                        strncat(v12, rkDetail, pString);
                      break;
                    case 1:
                      if ( v12 )
                      {
                        v14 = User::GetMainCharID(&g_kUser);
                        v15 = *(_DWORD *)&v14->n5_name[4];
                        *(_DWORD *)acUserID = *(_DWORD *)&v14->n5_name[0];
                        v16 = *(_DWORD *)&v14->n5_name[8];
                        *(_DWORD *)&acUserID[4] = v15;
                        v17 = *(_DWORD *)&v14->n5_name[12];
                        *(_DWORD *)&acUserID[16] = *(_DWORD *)&v14->n5_name[16];
                        *(_DWORD *)&acUserID[8] = v16;
                        *(_DWORD *)&acUserID[12] = v17;
                        acUserID[20] = 0;
                        strcat(v12, acUserID);
                        goto LABEL_28;
                      }
                      break;
                    case 2:
                      if ( v12 )
                      {
                        v18 = (int)(v12 - 1);
                        do
                          v19 = *(_BYTE *)(v18++ + 1);
                        while ( v19 );
                        *(_WORD *)v18 = word_9BD73C;
                        goto LABEL_28;
                      }
                      break;
                    case 8:
                      v20 = operator new(0x10u);
                      v32 = 0;
                      if ( v20 )
                      {
                        NiStringExtraData::NiStringExtraData((NiStringExtraData *)v20, (const char *)pString);
                        v22 = v21;
                      }
                      else
                      {
                        v22 = 0;
                      }
                      v32 = -1;
                      v23 = operator new(0x10u);
                      v24 = v23;
                      v32 = 1;
                      if ( v23 )
                      {
                        NiExtraData::NiExtraData((NiExtraData *)v23);
                        *(_DWORD *)v24 = &NiIntegerExtraData::_vftable_;
                        *((_DWORD *)v24 + 3) = 0;
                      }
                      else
                      {
                        v24 = 0;
                      }
                      v32 = -1;
                      SpeechBubbleDlgWin::AddBtn(thisa, rkDetail, 0, (NiExtraData *)v24, v22);
LABEL_28:
                      v12 = Dest;
                      break;
                    default:
                      continue;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);
// 9BD73C: using guessed type __int16 word_9BD73C;
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (005FFAF0) --------------------------------------------------------
char *__cdecl GetQuestStateText(PLAYER_QUEST_STATUS eStatus)
{
  char *result; // eax@2

  switch ( eStatus )
  {
    case 4:
    case 5:
    case 9:
    case 20:
      result = TextData::Get(0x8988D7BAu);
      break;
    case 6:
      result = TextData::Get(0xA4FDEBBDu);
      break;
    case 8:
      result = TextData::Get(0x859CC9CDu);
      break;
    default:
      result = ".";
      break;
  }
  return result;
}

//----- (005FFB70) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::OnCommand(AutoSizingDialogWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgWin *v4; // eax@1

  v3 = (PgWin *)this;
  v4 = PgWin::GetParentWin(&this->baseclass_0);
  PgWin::PostCommandMsg(v3, v4, wParam, lParam);
}

//----- (005FFBA0) --------------------------------------------------------
void __thiscall NpcDialogWin::SetNpcFaceCut(NpcDialogWin *this, char *pcFn)
{
  NpcDialogWin *v2; // ebx@1
  char *v3; // esi@4
  NiImageConverter *v4; // eax@5
  NiPixelData *v5; // eax@5
  NiTexture *v6; // eax@6
  char *v7; // eax@9
  signed int v8; // [sp-8h] [bp-1Ch]@10
  NiTexture::FormatPrefs kPrefs; // [sp+8h] [bp-Ch]@6

  v2 = this;
  if ( pcFn )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v3 = fs("%s\\game\\NPCFaceCut\\%s.png");
    if ( v3 )
    {
      v4 = NiImageConverter::GetImageConverter();
      v5 = (NiPixelData *)((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(v4, v3, 0);
      if ( v5 )
      {
        kPrefs.m_ePixelLayout = 6;
        kPrefs.m_eAlphaFmt = 3;
        kPrefs.m_eMipMapped = 0;
        v6 = (NiTexture *)NiSourceTexture::Create(v5, &kPrefs);
        if ( v6 )
          goto LABEL_15;
      }
    }
    if ( !Folder::m_bInit )
      Folder::Init();
    v7 = fs("%s\\game\\NPCFaceCut\\%s.tga");
    v6 = (NiTexture *)PgUtil::LoadSourceTexture(v7);
    if ( v6 )
    {
LABEL_15:
      PgSpr::SetTexture(v2->m_spFaceCut.m_pObject->m_spSpr.m_pObject, v6);
      v8 = 1;
    }
    else
    {
      v8 = 0;
    }
    ((void (__stdcall *)(_DWORD))v2->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
  }
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (005FFC80) --------------------------------------------------------
void __thiscall NpcDialogWin::DirectMessage(NpcDialogWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  NpcDialogWin *v4; // esi@1
  float v5; // eax@4
  float v6; // esi@9
  PgWin *v7; // esi@10
  float v8; // esi@14
  signed int v9; // eax@18
  __int16 v10; // ax@20
  char *v11; // eax@22
  MsgBox *v12; // eax@22
  char *v13; // eax@24
  MsgBox *v14; // eax@24

  v4 = this;
  switch ( iMsgTag )
  {
    case 15:
      v9 = *(_DWORD *)pvBody;
      if ( *(_DWORD *)pvBody < 42 || v9 > 61 )
      {
        if ( v9 == 1003 )
        {
          v11 = TextData::Get(0xD78635Au);
          v12 = MsgBox::Modal(MSGBOX_OKCANCEL, v11);
          ((void (__stdcall *)(int))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v4 != (NpcDialogWin *)232 ? (int)v4 : 0);
          LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][2]) = 1;
        }
        else
        {
          if ( v9 == 1004 )
          {
            v13 = TextData::Get(0x64AB75BEu);
            v14 = MsgBox::Modal(MSGBOX_OKCANCEL, v13);
            ((void (__stdcall *)(int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v4 != (NpcDialogWin *)232 ? (int)v4 : 0);
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][2]) = 2;
          }
        }
      }
      else
      {
        v10 = *((_WORD *)pvBody + 4);
        LOWORD(pvBody) = LOWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]);
        HIWORD(pvBody) = v10;
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x11u, 0xFu, &pvBody, 4);
      }
      break;
    case 27:
      if ( pvBody && !*(_DWORD *)pvBody )
      {
        v8 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][2];
        if ( LODWORD(v8) == 1 )
        {
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x5Bu, 0, 0);
        }
        else
        {
          if ( LODWORD(v8) == 2 )
            NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x5Cu, 0, 0);
        }
      }
      break;
    case 36:
      v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
      if ( LODWORD(v5) )
        *(_BYTE *)(LODWORD(v5) + 504) = 0;
      if ( LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) )
      {
        LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2]) = 0;
      }
      else
      {
        (*(void (__stdcall **)(_DWORD))(*LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2])
                                      + 256))(0);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)((char *)v4 - 232));
      }
      v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
      if ( LODWORD(v6) )
      {
        v7 = *(PgWin **)(LODWORD(v6) + 496);
        if ( v7 )
          PgWinMgr::CloseWin(&Pgg_kWinMgr, v7);
      }
      break;
  }
}

//----- (005FFE20) --------------------------------------------------------
void __thiscall NpcDialogWin::UpdateMeWin(NpcDialogWin *this, float fCurTime)
{
  NpcDialogWin *v2; // esi@1
  SpeechBubbleDlgWin *v3; // eax@3
  PgWinSpr *v4; // edi@5
  NiRefObjectVtbl *v5; // ebx@5
  int v6; // eax@5
  PgWinSpr *v7; // edi@5
  NiRefObjectVtbl *v8; // ebx@5
  int v9; // eax@5
  SpeechBubbleDlgWin *v10; // eax@7

  v2 = this;
  if ( this->m_bCloseTimerEnabled )
  {
    if ( this->m_fTimeToClose < (double)Timer::ms_fCurTime )
    {
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0xBu, 0, 0);
      ((void (__stdcall *)(_DWORD))v2->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
      v3 = v2->m_pkNpcDlgWin;
      v2->m_bCloseTimerEnabled = 0;
      if ( v3 )
        v3->m_bClickPortalNPC = 0;
    }
  }
  v4 = v2->m_spFaceCut.m_pObject;
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2->m_spFaceCut.m_pObject);
  v5[43].__vecDelDtor((NiRefObject *)v4, PgWin::ms_uiScreenWidth - v6);
  v7 = v2->m_spFaceCut.m_pObject;
  v8 = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2->m_spFaceCut.m_pObject);
  v8[44].__vecDelDtor((NiRefObject *)v7, PgWin::ms_uiScreenHeight - v9);
  SpeechBubbleWin::Update(&v2->m_pkNpcDlgWin->baseclass_0, fCurTime, pkCamera, (PgWinCamera *)unk_B703D8);
  if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kRandomTimer_Interval, fCurTime) )
    v2->m_bCheckTimer = v2->m_bCheckTimer == 0;
  v10 = v2->m_pkNpcDlgWin;
  if ( v10->m_bShowOutLine )
    ((void (__stdcall *)(_DWORD))v10->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v2->m_bCheckTimer);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (005FFF50) --------------------------------------------------------
void __thiscall DlgQuestListWin::OnSlideBarList(DlgQuestListWin *this)
{
  DlgQuestListWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarList;
  if ( v2 )
  {
    v3 = v1->m_pListWinQuestList;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
    }
  }
}

//----- (005FFFA0) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::BuildNormalDialog(AutoSizingDialogWin *this, char *pcText, unsigned int uiMinWidth, AutoSizingDialogWin::VirtualRect *pkBaseRect)
{
  AutoSizingDialogWin *v4; // esi@1
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v5; // edi@1
  AutoSizingDialogWin::VirtualRect *v6; // ebx@1
  unsigned int v7; // eax@2
  int v8; // eax@2
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v9; // eax@7
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v10; // ecx@7
  void *v11; // edi@10
  unsigned int v12; // ebx@11
  int v13; // edi@13
  NiRefObjectVtbl *v14; // edi@15
  int v15; // eax@15
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v16; // esi@15
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v17; // ST0C_4@16
  NiTList<AutoSizingDialogWin::VirtualRect *> kVRList; // [sp+0h] [bp-24h]@1
  unsigned int uiDlgHeight; // [sp+10h] [bp-14h]@1
  unsigned int uiDlgWidth; // [sp+14h] [bp-10h]@1
  int v21; // [sp+20h] [bp-4h]@1

  v4 = this;
  v5 = 0;
  *(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  kVRList.baseclass_0.baseclass_0.m_pkHead = 0;
  kVRList.baseclass_0.baseclass_0.m_pkTail = 0;
  kVRList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTList<AutoSizingDialogWin::VirtualRect__>::_vftable_;
  v6 = pkBaseRect;
  v21 = 0;
  uiDlgWidth = 0;
  uiDlgHeight = 0;
  if ( pkBaseRect )
  {
    v7 = pkBaseRect->uiWidth;
    uiDlgHeight = pkBaseRect->uiHeight;
    uiDlgWidth = v7;
    v8 = off_9BE8E4(&kVRList);
    *(_DWORD *)(v8 + 8) = v6;
    *(_DWORD *)v8 = 0;
    *(_DWORD *)(v8 + 4) = kVRList.baseclass_0.baseclass_0.m_pkTail;
    if ( kVRList.baseclass_0.baseclass_0.m_pkTail )
      kVRList.baseclass_0.baseclass_0.m_pkTail->m_pkNext = (NiTListItem<AutoSizingDialogWin::VirtualRect *> *)v8;
    else
      kVRList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<AutoSizingDialogWin::VirtualRect *> *)v8;
    ++*(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    kVRList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<AutoSizingDialogWin::VirtualRect *> *)v8;
  }
  AutoSizingDialogWin::BuildVirtualRectOfNormalDlg(v4, &kVRList, pcText, &uiDlgWidth, &uiDlgHeight);
  AutoSizingDialogWin::Approximation(v4, &kVRList, &uiDlgWidth, &uiDlgHeight);
  for ( ; *(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]; v5 = 0 )
  {
    v9 = kVRList.baseclass_0.baseclass_0.m_pkHead;
    v10 = kVRList.baseclass_0.baseclass_0.m_pkHead->m_pkNext;
    kVRList.baseclass_0.baseclass_0.m_pkHead = v10;
    if ( v10 == v5 )
      kVRList.baseclass_0.baseclass_0.m_pkTail = v5;
    else
      v10->m_pkPrev = v5;
    v11 = v9->m_element;
    kVRList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *)&kVRList,
      v9);
    --*(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    operator delete(v11);
  }
  v12 = uiDlgWidth;
  if ( uiMinWidth < uiDlgWidth )
    v12 = uiMinWidth;
  v4->m_iTextGeomCount = (int)v5;
  v4->m_iBtnCount = (int)v5;
  v13 = (int)v4->m_apkBtns;
  pkBaseRect = (AutoSizingDialogWin::VirtualRect *)10;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v13 + 256))(0);
    v13 += 4;
    pkBaseRect = (AutoSizingDialogWin::VirtualRect *)((char *)pkBaseRect - 1);
  }
  while ( pkBaseRect );
  v4->m_apkTextGeoms[0]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v4->m_apkTextGeoms[1]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v4->m_apkTextGeoms[2]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  pkBaseRect = 0;
  AutoSizingDialogWin::AddTextGeomtry(v4, v12, (unsigned int *)&pkBaseRect, pcText);
  v14 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v15 = ((int (*)(void))v4->m_apkTextGeoms[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)();
  v14[39].__vecDelDtor((NiRefObject *)v4, v15);
  v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
    (NiRefObject *)v4,
    v12);
  kVRList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
  v16 = kVRList.baseclass_0.baseclass_0.m_pkHead;
  v21 = 1;
  if ( kVRList.baseclass_0.baseclass_0.m_pkHead )
  {
    do
    {
      v17 = v16;
      v16 = v16->m_pkNext;
      kVRList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *)&kVRList,
        v17);
    }
    while ( v16 );
  }
}
// 9BE688: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);
// 9BE8E0: using guessed type int (__thiscall *NiTList_AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);
// 9BE8E4: using guessed type int (__thiscall *off_9BE8E4)(_DWORD);

//----- (00600170) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::BuildDialog(SpeechBubbleDlgWin *this, unsigned __int16 mobid, unsigned int uiMinWidth, unsigned int uiSeqID)
{
  SpeechBubbleDlgWin *v4; // esi@1
  NiRefObjectVtbl *v5; // edx@1
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@1
  int v7; // edi@1
  signed int v8; // ebx@1
  FlexDlgBtn *v9; // ecx@3
  void *v10; // eax@3
  int v11; // edi@3
  int v12; // edx@3
  unsigned __int16 v13; // bx@3
  void *v14; // edi@4
  int v15; // edx@7
  bool v16; // zf@10
  void *v17; // eax@13
  NiExtraData *v18; // eax@14
  NiExtraData *v19; // ebx@14
  void *v20; // eax@16
  void *v21; // edi@16
  char *v22; // eax@19
  void *v23; // eax@23
  NiExtraData *v24; // eax@24
  NiExtraData *v25; // ebx@24
  void *v26; // eax@26
  void *v27; // edi@26
  char *v28; // eax@29
  PopupMenuText *v29; // ebx@29
  signed int v30; // edi@29
  char *v31; // eax@34
  int v32; // ebx@37
  int v33; // edi@39
  int v34; // ebx@40
  int (__thiscall *v35)(_DWORD, _DWORD); // eax@40
  int v36; // ecx@42
  int v37; // edi@43
  char v38; // bl@44
  Name3 *v39; // eax@46
  unsigned int v40; // esi@47
  void *v41; // eax@48
  MapInfo *v42; // ebx@48
  void *v43; // edi@48
  void *v44; // edi@50
  void *v45; // eax@51
  NiExtraData *v46; // eax@51
  NiExtraData *v47; // ebx@51
  void *v48; // eax@53
  void *v49; // edi@53
  void *v50; // eax@58
  NiExtraData *v51; // eax@59
  NiExtraData *v52; // ebx@59
  void *v53; // eax@61
  void *v54; // edi@61
  char *v55; // eax@64
  SpeechBubbleDlgWin *v56; // esi@64
  int v57; // eax@64
  void *v58; // edi@64
  int v59; // ebx@65
  int v60; // esi@65
  int (*v61)(void); // eax@66
  int v62; // eax@66
  int v63; // edi@67
  int v64; // eax@69
  int v65; // edi@69
  unsigned int v66; // ebx@69
  int v67; // edi@69
  FlexDlgBtn **v68; // esi@70
  unsigned int v69; // [sp-28h] [bp-86Ch]@31
  unsigned int v70; // [sp-24h] [bp-868h]@31
  unsigned int v71; // [sp-20h] [bp-864h]@31
  PgWin *v72; // [sp-1Ch] [bp-860h]@31
  char *v73; // [sp-18h] [bp-85Ch]@31
  unsigned int v74; // [sp-14h] [bp-858h]@31
  bool v75; // [sp-10h] [bp-854h]@31
  Name3 result; // [sp+0h] [bp-844h]@46
  void *pkMobInfo; // [sp+Ch] [bp-838h]@10
  FlexDlgBtn **v78; // [sp+10h] [bp-834h]@1
  MapInfo *pkLoginMapInfo; // [sp+14h] [bp-830h]@3
  SpeechBubbleDlgWin *thisa; // [sp+18h] [bp-82Ch]@1
  char bIsTownPortal; // [sp+1Fh] [bp-825h]@40
  void *pkMenu; // [sp+20h] [bp-824h]@13
  int iLeft; // [sp+24h] [bp-820h]@1
  char kMapName[4]; // [sp+28h] [bp-81Ch]@48
  int v85; // [sp+2Ch] [bp-818h]@48
  int v86; // [sp+30h] [bp-814h]@48
  char acBaseScript[1024]; // [sp+34h] [bp-810h]@20
  char acProcessedScript[1024]; // [sp+434h] [bp-410h]@66
  unsigned int v89; // [sp+834h] [bp-10h]@1
  int v90; // [sp+840h] [bp-4h]@13
  int v91; // [sp+844h] [bp+0h]@1

  v89 = (unsigned int)&v91 ^ __security_cookie;
  v4 = this;
  v5 = this->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  iLeft = mobid;
  v6 = v5[64].__vecDelDtor;
  thisa = this;
  ((void (__stdcall *)(_DWORD, unsigned int))v6)(0, (unsigned int)&v91 ^ __security_cookie);
  v7 = (int)v4->m_apkBtns;
  v78 = v4->m_apkBtns;
  v8 = 7;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0);
    v7 += 4;
    --v8;
  }
  while ( v8 );
  v9 = v4->m_apkOutLineBtns;
  v4->m_iBtnCount = 0;
  v4->m_bShowOutLine = 0;
  ((void (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v10 = WeddingTask::GetMarryInfo();
  v11 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v12 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v13 = iLeft;
  pkLoginMapInfo = (MapInfo *)v10;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v12 + 16))(ITableBase<MobInfo_MobInfoTab>::ms_pkTable, iLeft) )
  {
    if ( (unsigned __int16)iLeft <= *(_WORD *)(v11 + 200) )
    {
      v15 = *(_DWORD *)(v11 + 196);
      if ( *(_DWORD *)(v15 + 4 * (unsigned __int16)iLeft) )
        v14 = *(void **)(v15 + 4 * (unsigned __int16)iLeft);
      else
        v14 = 0;
    }
    else
    {
      v14 = 0;
    }
  }
  else
  {
    v14 = 0;
  }
  v16 = LOBYTE(pkLoginMapInfo->ID) == 1;
  pkMobInfo = v14;
  if ( v16 && v14 && !strcmp((const char *)v14 + 2, "WeddingDreian") )
  {
    v17 = operator new(0x10u);
    pkMenu = v17;
    v90 = 0;
    if ( v17 )
    {
      NiStringExtraData::NiStringExtraData((NiStringExtraData *)v17, "MarryRequest");
      v19 = v18;
    }
    else
    {
      v19 = 0;
    }
    v20 = operator new(0x10u);
    v21 = v20;
    pkMenu = v20;
    v90 = 1;
    if ( v20 )
    {
      NiExtraData::NiExtraData((NiExtraData *)v20);
      *(_DWORD *)v21 = &NiIntegerExtraData::_vftable_;
      *((_DWORD *)v21 + 3) = 0;
    }
    else
    {
      v21 = 0;
    }
    v90 = -1;
    v22 = TextData::Get(0xEE133231u);
    SpeechBubbleDlgWin::AddBtn(v4, v22, 0, (NiExtraData *)v21, v19);
    v13 = iLeft;
    v14 = pkMobInfo;
  }
  SpeechBubbleDlgWin::ParseBaseDlgAndCreateBtn(v4, v13, acBaseScript, 1023, uiSeqID);
  if ( LOBYTE(pkLoginMapInfo->ID) == 2 && v14 && !strcmp((const char *)v14 + 2, "WeddingDreian") )
  {
    v23 = operator new(0x10u);
    pkMenu = v23;
    v90 = 2;
    if ( v23 )
    {
      NiStringExtraData::NiStringExtraData((NiStringExtraData *)v23, "DivorceRequest");
      v25 = v24;
    }
    else
    {
      v25 = 0;
    }
    v90 = -1;
    v26 = operator new(0x10u);
    v27 = v26;
    pkMenu = v26;
    v90 = 3;
    if ( v26 )
    {
      NiExtraData::NiExtraData((NiExtraData *)v26);
      *(_DWORD *)v27 = &NiIntegerExtraData::_vftable_;
      *((_DWORD *)v27 + 3) = 0;
    }
    else
    {
      v27 = 0;
    }
    v90 = -1;
    v28 = TextData::Get(0x84C1CDBDu);
    SpeechBubbleDlgWin::AddBtn(v4, v28, 0, (NiExtraData *)v27, v25);
    PopupMenuWin::Clear(v4->m_pkDivorceMenuListPopup);
    v29 = (PopupMenuText *)pkMenu;
    v30 = 0;
    while ( v30 )
    {
      if ( v30 == 1 )
      {
        v75 = 0;
        v74 = 0;
        v73 = 0;
        v72 = 0;
        v71 = 0;
        v70 = 0;
        v69 = 206317937;
        goto LABEL_34;
      }
LABEL_35:
      v29->baseclass_0.m_ePopupMenuID = v30 + 1003;
      PopupMenuWin::AddMenu(v4->m_pkDivorceMenuListPopup, &v29->baseclass_0);
      ++v30;
      if ( v30 >= 2 )
      {
        PopupMenuWin::FinishMenu(v4->m_pkDivorceMenuListPopup, 0xC8u);
        goto LABEL_37;
      }
    }
    v75 = 0;
    v74 = 0;
    v73 = 0;
    v72 = 0;
    v71 = 0;
    v70 = 0;
    v69 = -1256646899;
LABEL_34:
    v31 = TextData::Get(v69);
    v29 = PopupMenuText::CreateWin(v31, v70, v71, v72, v73, v74, v75);
    goto LABEL_35;
  }
LABEL_37:
  v32 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          iLeft) )
  {
    if ( (unsigned __int16)iLeft <= *(_WORD *)(v32 + 200) )
    {
      v33 = 4 * (unsigned __int16)iLeft;
      if ( *(_DWORD *)(*(_DWORD *)(v32 + 196) + v33) )
      {
        v34 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
        v35 = *(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 16);
        bIsTownPortal = 0;
        if ( !(unsigned __int8)v35(ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable, iLeft)
          || (unsigned __int16)iLeft > *(_WORD *)(v34 + 200)
          || (v36 = *(_DWORD *)(v34 + 196), !*(_DWORD *)(v33 + v36))
          || (v37 = *(_DWORD *)(v33 + v36)) == 0
          || (v38 = 1, *(_DWORD *)(v37 + 170) != 23) )
          v38 = bIsTownPortal;
        v39 = World::GetMapName(&g_kWorld, &result);
        pkLoginMapInfo = MapInfoTab::GetByMapName(v39);
        if ( v38 )
        {
          thisa->m_bClickPortalNPC = 1;
          v40 = 0;
          if ( (signed int)ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() > 0 )
          {
            do
            {
              v41 = CDataReader::GetRecord(
                      (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                      v40);
              v86 = 0;
              v85 = 0;
              *(_DWORD *)kMapName = 0;
              strncpy(kMapName, (char *)v41 + 3, 0xCu);
              v42 = MapInfoTab::GetByMapName((Name3 *)kMapName);
              v43 = CDataReader::GetRecord(
                      (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                      v40);
              if ( User::Lv(&g_kUser) >= *((_BYTE *)v43 + 1) )
              {
                iLeft = (int)v42->Name;
                if ( strcmp(pkLoginMapInfo->Name, v42->Name) )
                {
                  v44 = operator new(0x10u);
                  pkMenu = v44;
                  v90 = 4;
                  if ( v44 )
                  {
                    v45 = CDataReader::GetRecord(
                            (CDataReader *)&ITableBase<TownPortal_TownPortalInfoTable>::ms_pkTable->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount,
                            v40);
                    NiStringExtraData::NiStringExtraData((NiStringExtraData *)v44, (const char *)v45 + 3);
                    v47 = v46;
                  }
                  else
                  {
                    v47 = 0;
                  }
                  v90 = -1;
                  v48 = operator new(0x10u);
                  v49 = v48;
                  pkMenu = v48;
                  v90 = 5;
                  if ( v48 )
                  {
                    NiExtraData::NiExtraData((NiExtraData *)v48);
                    *(_DWORD *)v49 = &NiIntegerExtraData::_vftable_;
                    *((_DWORD *)v49 + 3) = 0;
                  }
                  else
                  {
                    v49 = 0;
                  }
                  v90 = -1;
                  SpeechBubbleDlgWin::AddBtn(thisa, (const char *)iLeft, 0, (NiExtraData *)v49, v47);
                }
              }
              ++v40;
            }
            while ( (signed int)v40 < (signed int)ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() );
          }
        }
      }
    }
  }
  v50 = operator new(0x10u);
  pkMenu = v50;
  v90 = 6;
  if ( v50 )
  {
    NiStringExtraData::NiStringExtraData((NiStringExtraData *)v50, "close");
    v52 = v51;
  }
  else
  {
    v52 = 0;
  }
  v90 = -1;
  v53 = operator new(0x10u);
  v54 = v53;
  pkMenu = v53;
  v90 = 7;
  if ( v53 )
  {
    NiExtraData::NiExtraData((NiExtraData *)v53);
    *(_DWORD *)v54 = &NiIntegerExtraData::_vftable_;
    *((_DWORD *)v54 + 3) = 0;
  }
  else
  {
    v54 = 0;
  }
  v90 = -1;
  v55 = TextData::Get(0x9AE7FBE7u);
  v56 = thisa;
  SpeechBubbleDlgWin::AddBtn(thisa, v55, 0, (NiExtraData *)v54, v52);
  v57 = v56->m_iBtnCount;
  v58 = 0;
  if ( v57 )
  {
    v59 = 141 * v57 + 1;
    v60 = ((int (*)(void))(*v78)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v58 = operator new(0xCu);
    *((_DWORD *)v58 + 1) = v60;
    v56 = thisa;
    *((_BYTE *)v58 + 8) = 1;
    *(_DWORD *)v58 = v59;
  }
  NpcBaseTextParsing(acBaseScript, acProcessedScript, 1024);
  AutoSizingDialogWin::BuildNormalDialog(
    v56->m_pkDialog,
    acProcessedScript,
    uiMinWidth,
    (AutoSizingDialogWin::VirtualRect *)v58);
  v61 = (int (*)(void))v56->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
  iLeft = 1;
  v62 = v61();
  SpeechBubbleWin::SetBubbleWidth(&v56->baseclass_0, v62 + 10);
  if ( v56->m_iBtnCount )
    v63 = ((int (*)(void))(*v78)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
        + 10;
  else
    v63 = 0;
  v64 = ((int (*)(void))v56->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  SpeechBubbleWin::SetBubbleHeight(&v56->baseclass_0, v63 + v64);
  v65 = ((int (*)(void))(*v78)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v66 = SpeechBubbleWin::GetBubbleHeight(&v56->baseclass_0) - v65;
  v67 = 0;
  if ( v56->m_iBtnCount <= 0 )
  {
    v56->m_dwCurrQuestID = -1;
  }
  else
  {
    v68 = v78;
    do
    {
      ((void (__stdcall *)(int))(*v68)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(iLeft);
      ((void (__stdcall *)(unsigned int))(*v68)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v66);
      FlexDlgBtn::SetBtnWidth(*v68, 140);
      iLeft += 141;
      ++v67;
      ++v68;
    }
    while ( v67 < thisa->m_iBtnCount );
    thisa->m_dwCurrQuestID = -1;
  }
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (006008E0) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::BuildScriptDialog(SpeechBubbleDlgWin *this, unsigned __int16 mobid, char *pcScript, unsigned int uiMinWidth, bool bCloseBtn)
{
  SpeechBubbleDlgWin *v5; // esi@1
  int v6; // ebx@1
  NiExtraData *v7; // edi@1
  void *v8; // eax@4
  NiExtraData *v9; // eax@5
  void *v10; // eax@6
  void *v11; // ebx@6
  char *v12; // eax@9
  int v13; // ecx@10
  void *v14; // eax@10
  int v15; // ebx@11
  int v16; // edi@11
  int v17; // eax@12
  int v18; // ebx@13
  int v19; // eax@15
  FlexDlgBtn **v20; // edi@15
  int v21; // ebx@15
  unsigned int v22; // eax@15
  int v23; // ebx@15
  unsigned int iTop; // [sp+1Ch] [bp+10h]@15
  signed int iLeft; // [sp+20h] [bp+14h]@12

  v5 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v6 = (int)v5->m_apkBtns;
  v7 = (NiExtraData *)7;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0);
    v6 += 4;
    v7 = (NiExtraData *)((char *)v7 - 1);
  }
  while ( v7 );
  v5->m_iBtnCount = 0;
  if ( bCloseBtn == 1 )
  {
    v8 = operator new(0x10u);
    if ( v8 )
    {
      NiStringExtraData::NiStringExtraData((NiStringExtraData *)v8, "close");
      v7 = v9;
    }
    v10 = operator new(0x10u);
    v11 = v10;
    if ( v10 )
    {
      NiExtraData::NiExtraData((NiExtraData *)v10);
      *(_DWORD *)v11 = &NiIntegerExtraData::_vftable_;
      *((_DWORD *)v11 + 3) = 0;
    }
    else
    {
      v11 = 0;
    }
    v12 = TextData::Get(0x9AE7FBE7u);
    SpeechBubbleDlgWin::AddBtn(v5, v12, 0, (NiExtraData *)v11, v7);
  }
  v13 = v5->m_iBtnCount;
  v14 = 0;
  if ( v13 )
  {
    v15 = 141 * v13 + 1;
    v16 = ((int (*)(void))v5->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v14 = operator new(0xCu);
    *((_BYTE *)v14 + 8) = 1;
    *(_DWORD *)v14 = v15;
    *((_DWORD *)v14 + 1) = v16;
  }
  AutoSizingDialogWin::BuildNormalDialog(v5->m_pkDialog, pcScript, uiMinWidth, (AutoSizingDialogWin::VirtualRect *)v14);
  iLeft = 1;
  v17 = ((int (*)(void))v5->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  SpeechBubbleWin::SetBubbleWidth(&v5->baseclass_0, v17 + 10);
  if ( v5->m_iBtnCount )
    v18 = ((int (*)(void))v5->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
        + 10;
  else
    v18 = 0;
  v19 = ((int (*)(void))v5->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  SpeechBubbleWin::SetBubbleHeight(&v5->baseclass_0, v18 + v19);
  v20 = v5->m_apkBtns;
  v21 = ((int (*)(void))v5->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v22 = SpeechBubbleWin::GetBubbleHeight(&v5->baseclass_0) - v21;
  v23 = 0;
  for ( iTop = v22; v23 < v5->m_iBtnCount; ++v20 )
  {
    ((void (__stdcall *)(_DWORD))(*v20)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(iLeft);
    ((void (__stdcall *)(_DWORD))(*v20)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(iTop);
    FlexDlgBtn::SetBtnWidth(*v20, 140);
    iLeft += 141;
    ++v23;
  }
  v5->m_dwCurrQuestID = -1;
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);

//----- (00600B00) --------------------------------------------------------
void __thiscall NpcDialogWin::OpenNpcNormalDialog(NpcDialogWin *this, unsigned __int16 mobid, unsigned int uiSeqID)
{
  int v3; // esi@1
  NpcDialogWin *v4; // edi@1
  char *v5; // eax@7
  NiTexture *v6; // eax@7
  char *v7; // eax@10
  unsigned int v8; // esi@15
  unsigned int v9; // ebx@15
  SpeechBubbleDlgWin *v10; // ecx@15
  int v11; // eax@15
  SpeechBubbleDlgWin *v12; // ecx@15
  NiRefObjectVtbl *v13; // esi@15
  unsigned int v14; // eax@15
  float v15; // ST14_4@15
  signed int v16; // [sp+14h] [bp-1Ch]@13
  NiPoint3 kPos; // [sp+24h] [bp-Ch]@15
  NiRefObjectVtbl *mobida; // [sp+38h] [bp+8h]@15
  float mobidb; // [sp+38h] [bp+8h]@15
  float mobidc; // [sp+38h] [bp+8h]@15

  v3 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          mobid) )
  {
    if ( mobid <= *(_WORD *)(v3 + 200) )
    {
      if ( *(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * mobid) )
      {
        v4->m_bCloseTimerEnabled = 0;
        if ( NpcDialogDataTable::GetFaceCutFileNameByMobID(mobid) )
        {
          if ( !Folder::m_bInit )
            Folder::Init();
          v5 = fs("%s\\game\\NPCFaceCut\\%s.png");
          v6 = (NiTexture *)PgUtil::LoadSourceTexture(v5);
          if ( !v6 )
          {
            if ( !Folder::m_bInit )
              Folder::Init();
            v7 = fs("%s\\game\\NPCFaceCut\\%s.tga");
            v6 = (NiTexture *)PgUtil::LoadSourceTexture(v7);
          }
          if ( mobid != -1 && v6 )
          {
            PgSpr::SetTexture(v4->m_spFaceCut.m_pObject->m_spSpr.m_pObject, v6);
            v16 = 1;
          }
          else
          {
            v16 = 0;
          }
          ((void (__stdcall *)(signed int))v4->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v16);
          v8 = 650 * PgWin::ms_uiScreenWidth >> 10;
          v9 = 570 * PgWin::ms_uiScreenHeight / 0x300;
          SpeechBubbleDlgWin::BuildDialog(v4->m_pkNpcDlgWin, mobid, v8 - 30, uiSeqID);
          v10 = v4->m_pkNpcDlgWin;
          v4->m_bHold = uiSeqID != 0;
          mobida = v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = ((int (*)(void))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          mobida[43].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v8 - v11);
          v12 = v4->m_pkNpcDlgWin;
          v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v14 = ((int (*)(void))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          v13[44].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v9 - (v14 >> 1));
          v4->m_pkNpcDlgWin->baseclass_0.m_uiMode = 1;
          mobidb = (double)PgWin::ms_uiScreenHeight * 0.800000011920929;
          v15 = mobidb;
          mobidc = 0.800000011920929 * (double)PgWin::ms_uiScreenWidth;
          SpeechBubbleWin::SetNpcPos(&v4->m_pkNpcDlgWin->baseclass_0, mobidc, v15);
          ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
        }
      }
    }
  }
}
// A9541C: using guessed type char Folder__m_bInit;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (00600D10) --------------------------------------------------------
void __thiscall NpcDialogWin::OpenNpcScriptDialog(NpcDialogWin *this, unsigned __int16 mobid, char *pcScript, bool bCloseBtn)
{
  int v4; // esi@1
  NpcDialogWin *v5; // edi@1
  int v6; // ecx@3
  int v7; // eax@4
  unsigned int v8; // esi@5
  unsigned int v9; // ebx@5
  SpeechBubbleDlgWin *v10; // ecx@5
  int v11; // eax@5
  SpeechBubbleDlgWin *v12; // ecx@5
  NiRefObjectVtbl *v13; // esi@5
  unsigned int v14; // eax@5
  float v15; // ST10_4@5
  NiRefObjectVtbl *mobida; // [sp+28h] [bp+8h]@5
  float mobidb; // [sp+28h] [bp+8h]@5
  float mobidc; // [sp+28h] [bp+8h]@5

  v4 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v5 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          mobid) )
  {
    if ( mobid <= *(_WORD *)(v4 + 200) )
    {
      v6 = *(_DWORD *)(v4 + 196);
      if ( *(_DWORD *)(v6 + 4 * mobid) )
      {
        v7 = *(_DWORD *)(v6 + 4 * mobid);
        if ( v7 )
        {
          v5->m_bCloseTimerEnabled = 0;
          NpcDialogWin::SetNpcFaceCut(v5, (char *)(v7 + 2));
          v8 = 650 * PgWin::ms_uiScreenWidth >> 10;
          v9 = 570 * PgWin::ms_uiScreenHeight / 0x300;
          SpeechBubbleDlgWin::BuildScriptDialog(v5->m_pkNpcDlgWin, mobid, pcScript, v8 - 30, bCloseBtn);
          v10 = v5->m_pkNpcDlgWin;
          mobida = v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v11 = ((int (*)(void))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          mobida[43].__vecDelDtor((NiRefObject *)v5->m_pkNpcDlgWin, v8 - v11);
          v12 = v5->m_pkNpcDlgWin;
          v13 = v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v14 = ((int (*)(void))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          v13[44].__vecDelDtor((NiRefObject *)v5->m_pkNpcDlgWin, v9 - (v14 >> 1));
          v5->m_pkNpcDlgWin->baseclass_0.m_uiMode = 1;
          mobidb = (double)PgWin::ms_uiScreenHeight * 0.800000011920929;
          v15 = mobidb;
          mobidc = 0.800000011920929 * (double)PgWin::ms_uiScreenWidth;
          SpeechBubbleWin::SetNpcPos(&v5->m_pkNpcDlgWin->baseclass_0, mobidc, v15);
        }
      }
    }
  }
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (00600E70) --------------------------------------------------------
void __thiscall NpcDialogWin::OpenNpcScriptDialog(NpcDialogWin *this, char *pcFn, char *pcScript, bool bCloseBtn)
{
  NpcDialogWin *v4; // esi@1
  unsigned int v5; // edi@3
  unsigned int v6; // ebx@3
  SpeechBubbleDlgWin *v7; // ecx@3
  int v8; // eax@3
  SpeechBubbleDlgWin *v9; // ecx@3
  NiRefObjectVtbl *v10; // edi@3
  unsigned int v11; // eax@3
  float v12; // ST0C_4@3
  NiRefObjectVtbl *pcScripta; // [sp+28h] [bp+Ch]@3
  float pcScriptb; // [sp+28h] [bp+Ch]@3
  float pcScriptc; // [sp+28h] [bp+Ch]@3

  v4 = this;
  if ( pcFn )
  {
    if ( pcScript )
    {
      this->m_bCloseTimerEnabled = 0;
      NpcDialogWin::SetNpcFaceCut(this, pcFn);
      v5 = 650 * PgWin::ms_uiScreenWidth >> 10;
      v6 = 570 * PgWin::ms_uiScreenHeight / 0x300;
      SpeechBubbleDlgWin::BuildScriptDialog(v4->m_pkNpcDlgWin, 0xFFFFu, pcScript, v5 - 30, bCloseBtn);
      v7 = v4->m_pkNpcDlgWin;
      pcScripta = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = ((int (*)(void))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      pcScripta[43].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v5 - v8);
      v9 = v4->m_pkNpcDlgWin;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = ((int (*)(void))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v10[44].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v6 - (v11 >> 1));
      v4->m_pkNpcDlgWin->baseclass_0.m_uiMode = 1;
      pcScriptb = (double)PgWin::ms_uiScreenHeight * 0.800000011920929;
      v12 = pcScriptb;
      pcScriptc = 0.800000011920929 * (double)PgWin::ms_uiScreenWidth;
      SpeechBubbleWin::SetNpcPos(&v4->m_pkNpcDlgWin->baseclass_0, pcScriptc, v12);
    }
  }
}

//----- (00600FA0) --------------------------------------------------------
void __thiscall DlgQuestListWin::QuestNameList::QuestNameList(DlgQuestListWin::QuestNameList *this)
{
  this->m_QuestID = -1;
  this->m_Title.baseclass_0._Myres = 15;
  this->m_Title.baseclass_0._Mysize = 0;
  this->m_Title.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_Data = 65535;
  this->m_Level = 0;
  this->m_Status = 0;
  *(_DWORD *)&this->m_Type = 0;
  DlgQuestListWin::QuestNameList::ms_StatusPriority = (unsigned int *)21;
  dword_A99ECC = 21;
  dword_A99ED0 = 21;
  dword_A99ED4 = 21;
  dword_A99ED8 = 21;
  dword_A99EEC = 21;
  dword_A99EF0 = 21;
  dword_A99EF4 = 21;
  dword_A99EF8 = 21;
  dword_A99EFC = 21;
  dword_A99F00 = 21;
  dword_A99F04 = 21;
  dword_A99F08 = 21;
  dword_A99F0C = 21;
  dword_A99F10 = 21;
  dword_A99F14 = 21;
  dword_A99EE8 = 0;
  dword_A99EA4 = 0;
  dword_A99EDC = 1;
  dword_A99F18 = 1;
  dword_A99EE0 = 2;
  dword_A99EE4 = 2;
  dword_A99E9C = 11;
  dword_A99EA8 = 11;
  dword_A99EC0 = 11;
  dword_A99EA0 = 1;
  dword_A99EB0 = 2;
  dword_A99EB4 = 2;
  dword_A99EB8 = 2;
  dword_A99EAC = 3;
  dword_A99EBC = 4;
  DlgQuestListWin::QuestNameList::ms_TypePriority = (unsigned int *)5;
}
// A99E98: using guessed type unsigned int *DlgQuestListWin__QuestNameList__ms_TypePriority;
// A99E9C: using guessed type int dword_A99E9C;
// A99EA0: using guessed type int dword_A99EA0;
// A99EA4: using guessed type int dword_A99EA4;
// A99EA8: using guessed type int dword_A99EA8;
// A99EAC: using guessed type int dword_A99EAC;
// A99EB0: using guessed type int dword_A99EB0;
// A99EB4: using guessed type int dword_A99EB4;
// A99EB8: using guessed type int dword_A99EB8;
// A99EBC: using guessed type int dword_A99EBC;
// A99EC0: using guessed type int dword_A99EC0;
// A99EC8: using guessed type unsigned int *DlgQuestListWin__QuestNameList__ms_StatusPriority;
// A99ECC: using guessed type int dword_A99ECC;
// A99ED0: using guessed type int dword_A99ED0;
// A99ED4: using guessed type int dword_A99ED4;
// A99ED8: using guessed type int dword_A99ED8;
// A99EDC: using guessed type int dword_A99EDC;
// A99EE0: using guessed type int dword_A99EE0;
// A99EE4: using guessed type int dword_A99EE4;
// A99EE8: using guessed type int dword_A99EE8;
// A99EEC: using guessed type int dword_A99EEC;
// A99EF0: using guessed type int dword_A99EF0;
// A99EF4: using guessed type int dword_A99EF4;
// A99EF8: using guessed type int dword_A99EF8;
// A99EFC: using guessed type int dword_A99EFC;
// A99F00: using guessed type int dword_A99F00;
// A99F04: using guessed type int dword_A99F04;
// A99F08: using guessed type int dword_A99F08;
// A99F0C: using guessed type int dword_A99F0C;
// A99F10: using guessed type int dword_A99F10;
// A99F14: using guessed type int dword_A99F14;
// A99F18: using guessed type int dword_A99F18;

//----- (00601100) --------------------------------------------------------
void __thiscall DlgQuestListWin::OnCommand(DlgQuestListWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@5

  switch ( wParam )
  {
    case 0u:
      DlgQuestListWin::OnQuestListLClick(this, lParam);
      break;
    case 1u:
      DlgQuestListWin::OnSlideBarList(this);
      break;
    case 2u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 3u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "QuestList");
      break;
    default:
      return;
  }
}

//----- (00601170) --------------------------------------------------------
FlexDlgBtn *__cdecl FlexDlgBtn::CreateWin(int iXPos, int iYPos, PgSprData *pkLeft, PgSprData *pkRight, PgSprData *pkMiddle, PgWin *pkParent, unsigned int uiCmdMsg)
{
  void *v7; // eax@1
  void *v8; // esi@1
  PgWin *v9; // edi@8
  FlexDlgBtn *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x158u);
  v8 = v7;
  result.m_pObject = (PgWin *)v7;
  v12 = 0;
  if ( v7 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v7);
    *(_DWORD *)v8 = &FlexDlgBtn::_vftable_;
    *((_DWORD *)v8 + 58) = &FlexDlgBtn::_vftable_;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)v8 + 1);
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgSprData *, PgSprData *, PgWin *, unsigned int))(*(_DWORD *)v8 + 560))(
                          v8,
                          iXPos,
                          iYPos,
                          pkLeft,
                          pkRight,
                          pkMiddle,
                          pkParent,
                          uiCmdMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = (FlexDlgBtn *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}
// 9BDB60: using guessed type int (__stdcall *FlexDlgBtn___vftable_)(int uiFlags);
// 9BDB7C: using guessed type int (__thiscall *FlexDlgBtn___vftable_)(void *p, char);

//----- (006012D0) --------------------------------------------------------
TextBtn *__cdecl TextBtn::CreateWin(int iXPos, int iYPos, PgSprData *pkDeco, PgFont *pkFont, PgWin *pkParent, unsigned int uiCmdMsg)
{
  void *v6; // eax@1
  void *v7; // esi@1
  PgWin *v8; // edi@8
  TextBtn *v9; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v11; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x150u);
  v7 = v6;
  result.m_pObject = (PgWin *)v6;
  v11 = 0;
  if ( v6 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v6);
    *(_DWORD *)v7 = &TextBtn::_vftable_;
    *((_DWORD *)v7 + 58) = &TextBtn::_vftable_;
  }
  else
  {
    v7 = 0;
  }
  if ( v7 )
    InterlockedIncrement((volatile LONG *)v7 + 1);
  v11 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v7);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgFont *, PgWin *, unsigned int))(*(_DWORD *)v7 + 560))(
                          v7,
                          iXPos,
                          iYPos,
                          pkDeco,
                          pkFont,
                          pkParent,
                          uiCmdMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v7 + 356))(v7);
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = (TextBtn *)v7;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v7);
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    v11 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v7 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    v9 = 0;
  }
  return v9;
}
// 9BDDB4: using guessed type int (__stdcall *TextBtn___vftable_)(int uiFlags);
// 9BDDD4: using guessed type int (__thiscall *TextBtn___vftable_)(void *p, char);

//----- (00601420) --------------------------------------------------------
AutoSizingDialogWin *__cdecl AutoSizingDialogWin::CreateWin(unsigned int uiLeft, unsigned int uiTop, unsigned int uiActionBtnTag, PgFont *pkFont, PgWin *pkParent)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  AutoSizingDialogWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x184u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWin::PgWin((PgWin *)v5);
    *(_DWORD *)v6 = &AutoSizingDialogWin::_vftable_;
    *((_DWORD *)v6 + 58) = &AutoSizingDialogWin::_vftable_;
    *((_DWORD *)v6 + 91) = 0;
    *((_DWORD *)v6 + 92) = 4;
    *((_DWORD *)v6 + 93) = -1;
    *((_BYTE *)v6 + 376) = -1;
    *((_DWORD *)v6 + 95) = 0;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, unsigned int, unsigned int, unsigned int, PgFont *, PgWin *))(*(_DWORD *)v6 + 452))(
                          v6,
                          uiLeft,
                          uiTop,
                          uiActionBtnTag,
                          pkFont,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (AutoSizingDialogWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 9BE00C: using guessed type int (__stdcall *AutoSizingDialogWin___vftable_)(int uiFlags);
// 9BE02C: using guessed type int (__thiscall *AutoSizingDialogWin___vftable_)(void *p, char);

//----- (00601590) --------------------------------------------------------
bool __thiscall AutoSizingDialogWin::Create(AutoSizingDialogWin *this, unsigned int uiLeft, unsigned int uiTop, unsigned int uiActionBtnTag, PgFont *pkFont, PgWin *pkParent)
{
  AutoSizingDialogWin *v6; // esi@1
  bool result; // al@2
  SpScreenText **v8; // edi@4
  void *v9; // eax@5
  int v10; // eax@6
  SpScreenText *v11; // eax@8
  NiTexturePalette *v12; // edi@11
  char *v13; // eax@13
  PgSprData *v14; // ebx@14
  int v15; // edi@14
  unsigned int v16; // ST2C_4@15
  PgFont *v17; // eax@15
  TextBtn *v18; // eax@15
  NiAVObject *v19; // ST1C_4@16
  int v20; // edi@16
  signed int v21; // ebx@16
  PgWinSpr *v22; // eax@17
  RewardWin *v23; // eax@18
  RewardWin *v24; // edi@18
  int v25; // eax@19
  PgWin *v26; // esi@25
  int iLeft; // [sp+44h] [bp-10h]@14
  int v28; // [sp+50h] [bp-4h]@5

  v6 = this;
  if ( !PgWin::Create(&this->baseclass_0, uiLeft, uiTop, 1u, 1u, pkParent, 0, 0) || !pkFont )
    goto LABEL_31;
  v6->m_pkFont = pkFont;
  v8 = (SpScreenText **)v6->m_apkTextGeoms;
  uiTop = 3;
  do
  {
    v9 = operator new(0x14Cu);
    v28 = 0;
    if ( v9 )
      PgTextGeometry::PgTextGeometry((PgTextGeometry *)v9, pkFont);
    else
      v10 = 0;
    *v8 = (SpScreenText *)v10;
    *(_WORD *)(v10 + 28) |= 1u;
    (*v8)->m_bAutoWordWrap = 1;
    (*v8)->m_bTextCmdOn = 1;
    v11 = *v8;
    v28 = -1;
    v11[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = 0;
    if ( v11->m_iAlignOption != 17 )
    {
      v11->m_iAlignOption = 17;
      v11->m_bInvalidate = 1;
    }
    SpScreenText::SetVerticalGap(*v8, v6->m_uiVerticalGap);
    ((void (__thiscall *)(AutoSizingDialogWin *, SpScreenText *, _DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v6,
      *v8,
      0);
    ++v8;
    --uiTop;
  }
  while ( uiTop );
  v6->m_iTextGeomCount = 0;
  pkParent = 0;
  v12 = dword_B70448;
  v28 = 1;
  if ( !Folder::m_bInit )
    Folder::Init();
  v13 = Folder::Merge(&Folder::m_acMenu, "Game\\DialogBtn.nif");
  PgUtil::LoadNodeNifFile(v13, (NiPointer<NiNode> *)&pkParent, v12);
  if ( pkParent )
  {
    v14 = PgSprData::Create(&pkParent->baseclass_0.baseclass_0, "BtnNor", &iLeft, (int *)&uiLeft, 0);
    PgSprData::Add(v14, &pkParent->baseclass_0.baseclass_0, "BtnClick");
    PgSprData::Add(v14, &pkParent->baseclass_0.baseclass_0, "BtnOver");
    v15 = (int)v6->m_apkBtns;
    pkFont = (PgFont *)10;
    do
    {
      v16 = uiActionBtnTag;
      v17 = Font::Get(MENU);
      v18 = TextBtn::CreateWin(0, 0, v14, v17, &v6->baseclass_0, v16);
      *(_DWORD *)v15 = v18;
      v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v18,
        (unsigned int)v18);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v15 + 256))(0);
      v15 += 4;
      pkFont = (PgFont *)((char *)pkFont - 1);
    }
    while ( pkFont );
    v19 = (NiAVObject *)pkParent;
    v6->m_iBtnCount = 0;
    pkFont = (PgFont *)PgSprData::Create(v19, "Line", &iLeft, (int *)&uiLeft, 0);
    v20 = (int)v6->m_apkLines;
    v21 = 3;
    do
    {
      v22 = PgWinSpr::CreateWin(0, 0, (PgSprData *)pkFont, &v6->baseclass_0, 0, 0);
      *(_DWORD *)v20 = v22;
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v22,
        0);
      v20 += 4;
      --v21;
    }
    while ( v21 );
    v6->m_iLineCount = 0;
    v23 = RewardWin::CreateWin(0);
    v6->m_pkRewardWin = v23;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v23,
      0);
    RewardWin::SetNpcRewardMode(v6->m_pkRewardWin, 1);
    ((void (__stdcall *)(_DWORD))v6->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v24 = v6->m_pkRewardWin;
    if ( v24 )
    {
      v25 = ((int (__thiscall *)(RewardWin *))v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v6->m_pkRewardWin);
      if ( v25 )
      {
        while ( (NiRTTI *)v25 != &PgWin::m_RTTI )
        {
          v25 = *(_DWORD *)(v25 + 4);
          if ( !v25 )
            goto LABEL_24;
        }
        ((void (__thiscall *)(AutoSizingDialogWin *, RewardWin *, _DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v6,
          v24,
          0);
        NiAVObject::UpdateProperties(&v6->baseclass_0.baseclass_0.baseclass_0);
        NiAVObject::Update(&v6->baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
      }
    }
LABEL_24:
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v6,
      0);
    NiAVObject::Update(&v6->baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    NiAVObject::UpdateProperties(&v6->baseclass_0.baseclass_0.baseclass_0);
    v28 = -1;
    if ( pkParent )
    {
      v26 = pkParent;
      if ( !InterlockedDecrement((volatile LONG *)&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v26 )
          v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
      }
    }
    result = 1;
  }
  else
  {
LABEL_31:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006018D0) --------------------------------------------------------
SpeechBubbleDlgWin *__cdecl SpeechBubbleDlgWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  SpeechBubbleDlgWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x20Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    SpeechBubbleWin::SpeechBubbleWin((SpeechBubbleWin *)v1);
    *(_DWORD *)v2 = &SpeechBubbleDlgWin::_vftable_;
    *((_DWORD *)v2 + 58) = &SpeechBubbleDlgWin::_vftable_;
    *((_DWORD *)v2 + 125) = 0;
    *((_BYTE *)v2 + 504) = 0;
    *((_DWORD *)v2 + 124) = 0;
    *((_BYTE *)v2 + 512) = 0;
    *((_BYTE *)v2 + 520) = 0;
    *((_DWORD *)v2 + 129) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (SpeechBubbleDlgWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9BE1F8: using guessed type int (__stdcall *SpeechBubbleDlgWin___vftable_)(int uiFlags);
// 9BE214: using guessed type int (__thiscall *SpeechBubbleDlgWin___vftable_)(void *p, char);

//----- (00601A30) --------------------------------------------------------
NpcDialogWin *__cdecl NpcDialogWin::CreateWin(PgFrameWork *pkFrameWork, char *pcName, bool ShowWinAtAbsoluteFar)
{
  void *v3; // eax@1
  int v4; // eax@2
  int v5; // esi@2
  PgWin *v6; // edi@8
  NpcDialogWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x194u);
  result.m_pObject = (PgWin *)v3;
  v9 = 0;
  if ( v3 )
  {
    NpcDialogWin::NpcDialogWin((NpcDialogWin *)v3);
    v5 = v4;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v9 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *, char *, _DWORD))(*(_DWORD *)v5 + 540))(
                          v5,
                          pkFrameWork,
                          pcName,
                          ShowWinAtAbsoluteFar) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = (NpcDialogWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}

//----- (00601B70) --------------------------------------------------------
bool __thiscall NpcDialogWin::Create(NpcDialogWin *this, PgFrameWork *pkFrameWork, char *pcName, bool ShowWinAtAbsoluteFar)
{
  NpcDialogWin *v4; // esi@1
  NiSourceTexture *v5; // edi@1
  NiNode *v6; // esi@2
  bool v7; // zf@4
  NiTexturePalette *v9; // ebx@8
  char *v10; // eax@10
  PgSprData *v11; // eax@15
  PgWinSpr *v12; // eax@15
  PgWinSpr *v13; // ebx@15
  int v14; // eax@15
  PgWinSpr *v15; // ebx@15
  int v16; // eax@15
  SpeechBubbleDlgWin *v17; // eax@15
  NiNode *v18; // esi@16
  UIUtil ui; // [sp+0h] [bp-2Ch]@15
  int uiLeft; // [sp+14h] [bp-18h]@15
  int uiTop; // [sp+18h] [bp-14h]@15
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v23; // [sp+28h] [bp-4h]@1
  NiRefObjectVtbl *pcNamea; // [sp+38h] [bp+Ch]@15
  NiRefObjectVtbl *pcNameb; // [sp+38h] [bp+Ch]@15

  v4 = this;
  spNode.m_pObject = 0;
  v23 = 0;
  v5 = MenuTexMgr::GetTexture(4u);
  if ( !v5 )
  {
    v6 = spNode.m_pObject;
    v23 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v7 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    return 0;
  }
  v9 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v10 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCFace.nif");
  PgUtil::LoadNodeNifFile(v10, &spNode, v9);
  if ( !spNode.m_pObject )
    return 0;
  if ( !PgWinFrame::Create(&v4->baseclass_0, 0, 0, 0, pkFrameWork, pcName, 0) )
  {
    v6 = spNode.m_pObject;
    v23 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_5;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v23) = 1;
  UIUtil::SetParent(&ui, &v4->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCFace", &uiLeft, &uiTop, v5);
  v12 = PgWinSpr::CreateWin(0, 0, v11, &v4->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v4->m_spFaceCut, (NiD3DDefaultShader *)v12);
  v13 = v4->m_spFaceCut.m_pObject;
  pcNamea = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = ((int (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4->m_spFaceCut.m_pObject);
  pcNamea[43].__vecDelDtor((NiRefObject *)v13, PgWin::ms_uiScreenWidth - v14);
  v15 = v4->m_spFaceCut.m_pObject;
  pcNameb = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v16 = ((int (__thiscall *)(PgWinSpr *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4->m_spFaceCut.m_pObject);
  pcNameb[44].__vecDelDtor((NiRefObject *)v15, PgWin::ms_uiScreenHeight - v16);
  ((void (__stdcall *)(_DWORD))v4->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v4->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v4->m_spFaceCut.m_pObject,
    0);
  v17 = SpeechBubbleDlgWin::CreateWin(0);
  v4->m_pkNpcDlgWin = v17;
  v17->baseclass_0.m_uiMode = 1;
  ((void (__stdcall *)(signed int))v4->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__thiscall *)(NpcDialogWin *, SpeechBubbleDlgWin *, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v4,
    v4->m_pkNpcDlgWin,
    0);
  NiAVObject::UpdateProperties(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  PgWin::EnableOpenCloseSound(&v4->baseclass_0.baseclass_0.baseclass_0, 0);
  LOBYTE(v23) = 0;
  UIUtil::_UIUtil(&ui);
  v23 = -1;
  if ( spNode.m_pObject )
  {
    v18 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v18 )
        v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00601DE0) --------------------------------------------------------
DlgQuestListWin *__cdecl DlgQuestListWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  DlgQuestListWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x164u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &DlgQuestListWin::_vftable_;
    *((_DWORD *)v2 + 58) = &DlgQuestListWin::_vftable_;
    *((_WORD *)v2 + 176) = -1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (DlgQuestListWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9BE438: using guessed type int (__stdcall *DlgQuestListWin___vftable_)(int uiFlags);
// 9BE454: using guessed type int (__thiscall *DlgQuestListWin___vftable_)(void *p, char);

//----- (00601F30) --------------------------------------------------------
bool __thiscall SpeechBubbleDlgWin::Create(SpeechBubbleDlgWin *this, PgFrameWork *pkFrameWork)
{
  SpeechBubbleDlgWin *v2; // esi@1
  bool result; // al@2
  PgFont *v4; // eax@3
  NiTexturePalette *v5; // edi@3
  char *v6; // eax@5
  PgSprData *v7; // edi@6
  PgSprData *v8; // ebx@6
  PgSprData *v9; // eax@6
  FlexDlgBtn *v10; // eax@6
  int v11; // edi@6
  signed int v12; // ebx@6
  PgSprData *v13; // eax@7
  FlexDlgBtn *v14; // eax@7
  NiSourceTexture *v15; // eax@8
  PopupMenuWin *v16; // eax@8
  NiSourceTexture *v17; // eax@8
  PopupMenuWin *v18; // eax@8
  RewardWin *v19; // eax@8
  NiNode *v20; // esi@10
  PgSprData *pkLeft; // [sp+0h] [bp-20h]@6
  PgSprData *pkRight; // [sp+4h] [bp-1Ch]@6
  int iLeft; // [sp+8h] [bp-18h]@6
  int iTop; // [sp+Ch] [bp-14h]@6
  NiPointer<NiNode> spDlgCtrlNode; // [sp+10h] [bp-10h]@3
  int v26; // [sp+1Ch] [bp-4h]@3

  v2 = this;
  if ( !SpeechBubbleWin::Create(&this->baseclass_0, pkFrameWork) )
    goto LABEL_17;
  v4 = Font::Get(BOLD);
  v2->m_pkDialog = AutoSizingDialogWin::CreateWin(
                     5u,
                     5u,
                     0x12FD1u,
                     v4,
                     &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  spDlgCtrlNode.m_pObject = 0;
  v5 = dword_B70448;
  v26 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\DialogBtn.nif");
  PgUtil::LoadNodeNifFile(v6, &spDlgCtrlNode, v5);
  if ( spDlgCtrlNode.m_pObject )
  {
    v7 = PgSprData::Create(&spDlgCtrlNode.m_pObject->baseclass_0, "BtnLeft01", &iLeft, &iTop, 0);
    v8 = PgSprData::Create(&spDlgCtrlNode.m_pObject->baseclass_0, "BtnRight01", &iLeft, &iTop, 0);
    v9 = PgSprData::Create(&spDlgCtrlNode.m_pObject->baseclass_0, "BtnMiddle01", &iLeft, &iTop, 0);
    v10 = FlexDlgBtn::CreateWin(0, 0, v7, v8, v9, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0);
    v2->m_apkOutLineBtns = v10;
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v10,
      (unsigned int)v10);
    ((void (__stdcall *)(_DWORD))v2->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkLeft = PgSprData::Create(&spDlgCtrlNode.m_pObject->baseclass_0, "BtnLeft", &iLeft, &iTop, 0);
    pkRight = PgSprData::Create(&spDlgCtrlNode.m_pObject->baseclass_0, "BtnRight", &iLeft, &iTop, 0);
    v11 = (int)v2->m_apkBtns;
    v12 = 7;
    do
    {
      v13 = PgSprData::Create(&spDlgCtrlNode.m_pObject->baseclass_0, "BtnMiddle", &iLeft, &iTop, 0);
      v14 = FlexDlgBtn::CreateWin(
              0,
              0,
              pkLeft,
              pkRight,
              v13,
              &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              0x12FD1u);
      *(_DWORD *)v11 = v14;
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v14,
        (unsigned int)v14);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v11 + 256))(0);
      v11 += 4;
      --v12;
    }
    while ( v12 );
    v15 = MenuTexMgr::GetTexture(1u);
    v16 = PopupMenuWin::CreateWin(v15, 5u, 5u, 0);
    v2->m_pkQuestListPopup = v16;
    ((void (__stdcall *)(IDirectMessenger *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v17 = MenuTexMgr::GetTexture(1u);
    v18 = PopupMenuWin::CreateWin(v17, 5u, 5u, 0);
    v2->m_pkDivorceMenuListPopup = v18;
    ((void (__stdcall *)(IDirectMessenger *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v19 = RewardWin::CreateWin(pkFrameWork);
    v2->m_pkRewardWin = v19;
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    RewardWin::SetNpcRewardMode(v2->m_pkRewardWin, 1);
    PgWin::AttachChildWin(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      &v2->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0);
    v2->m_uiDefaultRewardWinWidth = ((int (*)(void))v2->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    if ( !v2->m_pkDlgQuestListWin )
      v2->m_pkDlgQuestListWin = DlgQuestListWin::CreateWin(0);
    v20 = spDlgCtrlNode.m_pObject;
    v26 = -1;
    if ( spDlgCtrlNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spDlgCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v20 )
        v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
    }
    result = 1;
  }
  else
  {
LABEL_17:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00602210) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::BuildScriptDialog(SpeechBubbleDlgWin *this, char *pcScript, NiTList<ScriptBtn *> *pkScriptBtnList, unsigned int uiMinWidth)
{
  SpeechBubbleDlgWin *v4; // esi@1
  int v5; // edi@1
  signed int v6; // ebx@1
  NiTListItem<ScriptBtn *> *v7; // eax@3
  ScriptBtn *v8; // edi@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@5
  NiExtraData *v10; // ecx@5
  NiExtraData *v11; // edx@5
  int v12; // ecx@13
  void *v13; // eax@13
  int v14; // edi@14
  int v15; // ebx@14
  int v16; // eax@15
  int v17; // edi@16
  int v18; // eax@18
  int v19; // edi@18
  int v20; // ebx@18
  FlexDlgBtn **v21; // edi@19
  NiTListItem<ScriptBtn *> *iter; // [sp+0h] [bp-38h]@4
  unsigned int iTop; // [sp+4h] [bp-34h]@18
  bool iLeft; // [sp+8h] [bp-30h]@5
  signed int iLefta; // [sp+8h] [bp-30h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+Ch] [bp-2Ch]@5
  unsigned int v27; // [sp+28h] [bp-10h]@1
  int v28; // [sp+34h] [bp-4h]@5
  int v29; // [sp+38h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v4 = this;
  ((void (__stdcall *)(_DWORD, unsigned int))this->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
    0,
    (unsigned int)&v29 ^ __security_cookie);
  v5 = (int)v4->m_apkBtns;
  v6 = 7;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0);
    v5 += 4;
    --v6;
  }
  while ( v6 );
  v4->m_iBtnCount = 0;
  v7 = pkScriptBtnList->baseclass_0.baseclass_0.m_pkHead;
  while ( v7 )
  {
    v8 = v7->m_element;
    v7 = v7->m_pkNext;
    iter = v7;
    if ( v8 )
    {
      v9 = ScriptBtn::GetText(v8, &result);
      v10 = v8->m_pkAction;
      v11 = v8->m_pkType;
      iLeft = v8->m_bAutoScale;
      v28 = 0;
      if ( v9->baseclass_0._Myres >= 0x10 )
        v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v9->baseclass_0.___u0.baseclass_0.dummy[0];
      SpeechBubbleDlgWin::AddBtn(v4, v9->baseclass_0.___u0.baseclass_0.dummy, iLeft, v11, v10);
      v28 = -1;
      if ( result.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&result);
      result.baseclass_0._Myres = 15;
      result.baseclass_0._Mysize = 0;
      result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( v8->m_kText.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&v8->m_kText.baseclass_0.___u0.baseclass_0.dummy[0]);
      v8->m_kText.baseclass_0._Myres = 15;
      v8->m_kText.baseclass_0._Mysize = 0;
      v8->m_kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      operator delete(v8);
      v7 = iter;
    }
  }
  v12 = v4->m_iBtnCount;
  v13 = 0;
  if ( v12 )
  {
    v14 = 141 * v12 + 1;
    v15 = ((int (*)(void))v4->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v13 = operator new(0xCu);
    *((_BYTE *)v13 + 8) = 1;
    *(_DWORD *)v13 = v14;
    *((_DWORD *)v13 + 1) = v15;
  }
  AutoSizingDialogWin::BuildNormalDialog(v4->m_pkDialog, pcScript, uiMinWidth, (AutoSizingDialogWin::VirtualRect *)v13);
  iLefta = 1;
  v16 = ((int (*)(void))v4->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  SpeechBubbleWin::SetBubbleWidth(&v4->baseclass_0, v16 + 10);
  if ( v4->m_iBtnCount )
    v17 = ((int (*)(void))v4->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
        + 10;
  else
    v17 = 0;
  v18 = ((int (*)(void))v4->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  SpeechBubbleWin::SetBubbleHeight(&v4->baseclass_0, v17 + v18);
  v19 = ((int (*)(void))v4->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v20 = 0;
  iTop = SpeechBubbleWin::GetBubbleHeight(&v4->baseclass_0) - v19;
  if ( v4->m_iBtnCount > 0 )
  {
    v21 = v4->m_apkBtns;
    do
    {
      ((void (__stdcall *)(signed int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(iLefta);
      ((void (__stdcall *)(unsigned int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(iTop);
      FlexDlgBtn::SetBtnWidth(*v21, 140);
      iLefta += 141;
      ++v20;
      ++v21;
    }
    while ( v20 < v4->m_iBtnCount );
  }
  v4->m_dwCurrQuestID = -1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00602480) --------------------------------------------------------
void __thiscall NpcDialogWin::OpenNpcScriptDialog(NpcDialogWin *this, char *pcFn, char *pcScript, NiTList<ScriptBtn *> *pkScriptBtnList)
{
  NpcDialogWin *v4; // esi@1
  unsigned int v5; // edi@3
  unsigned int v6; // ebx@3
  SpeechBubbleDlgWin *v7; // ecx@3
  int v8; // eax@3
  SpeechBubbleDlgWin *v9; // ecx@3
  NiRefObjectVtbl *v10; // edi@3
  unsigned int v11; // eax@3
  float v12; // ST0C_4@3
  NiRefObjectVtbl *pcScripta; // [sp+28h] [bp+Ch]@3
  float pcScriptb; // [sp+28h] [bp+Ch]@3
  float pcScriptc; // [sp+28h] [bp+Ch]@3

  v4 = this;
  if ( pcFn )
  {
    if ( pcScript )
    {
      this->m_bCloseTimerEnabled = 0;
      NpcDialogWin::SetNpcFaceCut(this, pcFn);
      v5 = 650 * PgWin::ms_uiScreenWidth >> 10;
      v6 = 570 * PgWin::ms_uiScreenHeight / 0x300;
      SpeechBubbleDlgWin::BuildScriptDialog(v4->m_pkNpcDlgWin, pcScript, pkScriptBtnList, v5 - 30);
      v7 = v4->m_pkNpcDlgWin;
      pcScripta = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = ((int (*)(void))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      pcScripta[43].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v5 - v8);
      v9 = v4->m_pkNpcDlgWin;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = ((int (*)(void))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v10[44].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v6 - (v11 >> 1));
      v4->m_pkNpcDlgWin->baseclass_0.m_uiMode = 1;
      pcScriptb = (double)PgWin::ms_uiScreenHeight * 0.800000011920929;
      v12 = pcScriptb;
      pcScriptc = 0.800000011920929 * (double)PgWin::ms_uiScreenWidth;
      SpeechBubbleWin::SetNpcPos(&v4->m_pkNpcDlgWin->baseclass_0, pcScriptc, v12);
    }
  }
}

//----- (006025B0) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::OnClose(AutoSizingDialogWin *this)
{
  AutoSizingDialogWin *v1; // esi@1
  unsigned __int16 v2; // ST00_2@2
  ScenarioMgr *v3; // eax@2

  v1 = this;
  if ( this->m_dwCurrentRunningScenarioID )
  {
    v2 = LOWORD(this->m_dwCurrentRunningScenarioID);
    v3 = ScenarioMgr::GetScenarioMgr();
    ScenarioMgr::StopScenario(v3, v2);
    v1->m_dwCurrentRunningScenarioID = 0;
  }
}

//----- (006025E0) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::ParseAndCreateQuestDlg(AutoSizingDialogWin *this, unsigned __int16 questID, unsigned int wQuestDlgID, unsigned int uiWidth)
{
  AutoSizingDialogWin *v4; // ebx@1
  CQuest *v5; // esi@1
  CQuestData *v6; // esi@3
  char *v7; // eax@5
  const void *v8; // esi@5
  char v9; // cl@6
  unsigned int v10; // eax@7
  void *v11; // edi@7
  char v12; // cl@8
  DialogParser::TokenType i; // eax@10
  Name5 *v14; // eax@13
  int v15; // edx@13
  int v16; // ecx@13
  int v17; // edx@13
  unsigned int v18; // eax@13
  void *v19; // edi@13
  char v20; // cl@14
  char *v21; // edi@16
  char v22; // al@17
  char *v23; // eax@19
  char v24; // cl@20
  signed int v25; // eax@23
  void *v26; // eax@24
  void *v27; // esi@24
  signed int v28; // edi@25
  NiObjectNET *v29; // ecx@27
  void *v30; // esi@27
  char *v31; // eax@28
  NiObjectNET *v32; // ecx@30
  char *v33; // eax@31
  char v34; // cl@32
  char v35; // ST08_1@35
  unsigned __int16 v36; // ST04_2@35
  unsigned __int16 v37; // ST00_2@35
  ScenarioMgr *v38; // eax@35
  char *v39; // eax@41
  char v40; // cl@42
  unsigned int v41; // [sp-10h] [bp-474h]@1
  const char *rkDetail; // [sp+0h] [bp-464h]@10
  size_t Count; // [sp+4h] [bp-460h]@12
  QuestDialogParser kParser; // [sp+8h] [bp-45Ch]@3
  void *v45; // [sp+Ch] [bp-458h]@24
  unsigned int uiYPos; // [sp+10h] [bp-454h]@3
  char acDlgText[1024]; // [sp+14h] [bp-450h]@3
  char acUserID[64]; // [sp+414h] [bp-50h]@13
  unsigned int v49; // [sp+454h] [bp-10h]@1
  int v50; // [sp+460h] [bp-4h]@24
  int v51; // [sp+464h] [bp+0h]@1

  v49 = (unsigned int)&v51 ^ __security_cookie;
  v41 = (unsigned int)&v51 ^ __security_cookie;
  v4 = this;
  v5 = QuestDataMgr::GetQuest();
  if ( v5 )
  {
    if ( v4->m_pkFont )
    {
      DialogParser::DialogParser(&kParser.baseclass_0);
      QuestDialogParser::StartParsing(&kParser, v5, wQuestDlgID);
      acDlgText[0] = 0;
      v6 = v5->m_pQuestData;
      uiYPos = 0;
      if ( v6 )
      {
        if ( questID != -1 )
        {
          CQuestData::GetQuestName(v6, questID);
          v7 = fs("< %s >\n\n");
          v8 = v7;
          do
            v9 = *v7++;
          while ( v9 );
          v10 = v7 - v8;
          v11 = (char *)&uiYPos + 3;
          do
          {
            v12 = *((_BYTE *)v11 + 1);
            v11 = (char *)v11 + 1;
          }
          while ( v12 );
          memcpy(v11, v8, v10);
        }
        for ( i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
              i != 11;
              i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail) )
        {
          switch ( i )
          {
            case 0:
              strncat(acDlgText, rkDetail, Count);
              break;
            case 1:
              v14 = User::GetMainCharID(&g_kUser);
              v15 = *(_DWORD *)&v14->n5_name[4];
              *(_DWORD *)acUserID = *(_DWORD *)&v14->n5_name[0];
              v16 = *(_DWORD *)&v14->n5_name[8];
              *(_DWORD *)&acUserID[4] = v15;
              v17 = *(_DWORD *)&v14->n5_name[12];
              *(_DWORD *)&acUserID[16] = *(_DWORD *)&v14->n5_name[16];
              *(_DWORD *)&acUserID[8] = v16;
              *(_DWORD *)&acUserID[12] = v17;
              acUserID[20] = 0;
              v18 = strlen(acUserID) + 1;
              v19 = (char *)&uiYPos + 3;
              do
              {
                v20 = *((_BYTE *)v19 + 1);
                v19 = (char *)v19 + 1;
              }
              while ( v20 );
              memcpy(v19, acUserID, v18);
              break;
            case 2:
              v21 = (char *)&uiYPos + 3;
              do
                v22 = (v21++)[1];
              while ( v22 );
              *(_WORD *)v21 = word_9BD668;
              break;
            case 7:
              v23 = acDlgText;
              do
                v24 = *v23++;
              while ( v24 );
              if ( v23 != &acDlgText[1] )
              {
                AutoSizingDialogWin::AddTextGeomtry(v4, uiWidth, &uiYPos, acDlgText);
                acDlgText[0] = 0;
              }
              v25 = v4->m_iBtnCount;
              if ( v25 < 10 )
              {
                ((void (__stdcall *)(unsigned int, unsigned int))v4->m_apkBtns[v25]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(
                  uiYPos,
                  v41);
                ((void (__stdcall *)(signed int))v4->m_apkBtns[v4->m_iBtnCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(10);
                TextBtn::SetBtnText(v4->m_apkBtns[v4->m_iBtnCount], (char *)rkDetail);
                NiObjectNET::RemoveExtraData(
                  &v4->m_apkBtns[v4->m_iBtnCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                  "type");
                v26 = operator new(0x10u);
                v27 = v26;
                v45 = v26;
                v50 = 0;
                if ( v26 )
                {
                  NiExtraData::NiExtraData((NiExtraData *)v26);
                  v28 = 1;
                  *(_DWORD *)v27 = &NiIntegerExtraData::_vftable_;
                  *((_DWORD *)v27 + 3) = 1;
                }
                else
                {
                  v27 = 0;
                  v28 = 1;
                }
                v29 = (NiObjectNET *)v4->m_apkBtns[v4->m_iBtnCount];
                v50 = -1;
                NiObjectNET::AddExtraData(v29, "type", (NiExtraData *)v27);
                NiObjectNET::RemoveExtraData(
                  &v4->m_apkBtns[v4->m_iBtnCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                  "action");
                v30 = operator new(0x10u);
                v45 = v30;
                v50 = v28;
                if ( v30 )
                {
                  v31 = fs("quest_ack %d");
                  NiStringExtraData::NiStringExtraData((NiStringExtraData *)v30, v31);
                }
                else
                {
                  v31 = 0;
                }
                v32 = (NiObjectNET *)v4->m_apkBtns[v4->m_iBtnCount];
                v50 = -1;
                NiObjectNET::AddExtraData(v32, "action", (NiExtraData *)v31);
                v41 = v28;
                ((void (*)(void))v4->m_apkBtns[v4->m_iBtnCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
                uiYPos += v4->m_uiVerticalGap
                        + ((int (*)(void))v4->m_apkBtns[v4->m_iBtnCount]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
                v4->m_iBtnCount += v28;
              }
              break;
            case 5:
              v33 = acDlgText;
              do
                v34 = *v33++;
              while ( v34 );
              if ( v33 != &acDlgText[1] )
              {
                AutoSizingDialogWin::AddTextGeomtry(v4, uiWidth, &uiYPos, acDlgText);
                acDlgText[0] = 0;
              }
              break;
            case 9:
              v35 = v4->m_byCurrScriptCmd;
              v36 = LOWORD(v4->m_dwCurrQuestID);
              v37 = (unsigned __int16)rkDetail;
              v4->m_dwCurrentRunningScenarioID = (unsigned int)rkDetail;
              v38 = ScenarioMgr::GetScenarioMgr();
              ScenarioMgr::RunScenario(v38, v37, v36, v35);
              break;
            case 13:
              if ( g_pkMainChar )
              {
                if ( g_pkMainChar->m_byMode == 1 )
                  ((void (__stdcall *)(const char *))g_pkMainChar->baseclass_0.vfptr[14].SetAbStateProperty)(rkDetail);
                else
                  OutputDebugStringA("³ë¸Ö»");
              }
              break;
            default:
              continue;
          }
        }
        v39 = acDlgText;
        do
          v40 = *v39++;
        while ( v40 );
        if ( v39 != &acDlgText[1] )
        {
          AutoSizingDialogWin::AddTextGeomtry(v4, uiWidth, &uiYPos, acDlgText);
          acDlgText[0] = 0;
        }
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
          (NiRefObject *)v4,
          uiYPos);
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor(
          (NiRefObject *)v4,
          uiWidth);
      }
    }
  }
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);
// 9BD668: using guessed type __int16 word_9BD668;
// A85C00: using guessed type int __security_cookie;

//----- (00602A90) --------------------------------------------------------
void __thiscall AutoSizingDialogWin::BuildQuestDialog(AutoSizingDialogWin *this, unsigned int wQuestDlgID, unsigned int uiMinWidth, unsigned int dwQuestID, char byScriptCmd, AutoSizingDialogWin::VirtualRect *pkBaseRect)
{
  AutoSizingDialogWin *v6; // esi@1
  unsigned int v7; // eax@2
  int v8; // eax@2
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v9; // eax@7
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v10; // ecx@7
  void *v11; // edi@10
  int v12; // edi@13
  signed int v13; // ebx@13
  unsigned int v14; // ecx@15
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v15; // esi@15
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v16; // ST10_4@16
  NiTList<AutoSizingDialogWin::VirtualRect *> kVRList; // [sp+0h] [bp-24h]@1
  unsigned int uiDlgHeight; // [sp+10h] [bp-14h]@1
  unsigned int uiDlgWidth; // [sp+14h] [bp-10h]@1
  int v20; // [sp+20h] [bp-4h]@1

  v6 = this;
  *(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  kVRList.baseclass_0.baseclass_0.m_pkHead = 0;
  kVRList.baseclass_0.baseclass_0.m_pkTail = 0;
  kVRList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTList<AutoSizingDialogWin::VirtualRect__>::_vftable_;
  v20 = 0;
  uiDlgWidth = 0;
  uiDlgHeight = 0;
  this->m_dwCurrQuestID = dwQuestID;
  this->m_byCurrScriptCmd = byScriptCmd;
  if ( pkBaseRect )
  {
    v7 = pkBaseRect->uiHeight;
    uiDlgWidth = pkBaseRect->uiWidth;
    uiDlgHeight = v7;
    v8 = off_9BE8E4(&kVRList);
    *(_DWORD *)(v8 + 8) = pkBaseRect;
    *(_DWORD *)v8 = 0;
    *(_DWORD *)(v8 + 4) = kVRList.baseclass_0.baseclass_0.m_pkTail;
    if ( kVRList.baseclass_0.baseclass_0.m_pkTail )
      kVRList.baseclass_0.baseclass_0.m_pkTail->m_pkNext = (NiTListItem<AutoSizingDialogWin::VirtualRect *> *)v8;
    else
      kVRList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<AutoSizingDialogWin::VirtualRect *> *)v8;
    ++*(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    kVRList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<AutoSizingDialogWin::VirtualRect *> *)v8;
  }
  AutoSizingDialogWin::BuildVirtualRectOfQuestDlg(v6, &kVRList, dwQuestID, wQuestDlgID, &uiDlgWidth, &uiDlgHeight);
  AutoSizingDialogWin::Approximation(v6, &kVRList, &uiDlgWidth, &uiDlgHeight);
  while ( *(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v9 = kVRList.baseclass_0.baseclass_0.m_pkHead;
    v10 = kVRList.baseclass_0.baseclass_0.m_pkHead->m_pkNext;
    kVRList.baseclass_0.baseclass_0.m_pkHead = v10;
    if ( v10 )
      v10->m_pkPrev = 0;
    else
      kVRList.baseclass_0.baseclass_0.m_pkTail = 0;
    v11 = v9->m_element;
    kVRList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *)&kVRList,
      v9);
    --*(_DWORD *)&kVRList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    operator delete(v11);
  }
  if ( uiMinWidth < uiDlgWidth )
    uiDlgWidth = uiMinWidth;
  v6->m_iTextGeomCount = 0;
  v6->m_iBtnCount = 0;
  v12 = (int)v6->m_apkBtns;
  v13 = 10;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 256))(0);
    v12 += 4;
    --v13;
  }
  while ( v13 );
  v14 = uiDlgWidth;
  v6->m_apkTextGeoms[0]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v6->m_apkTextGeoms[1]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v6->m_apkTextGeoms[2]->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  AutoSizingDialogWin::ParseAndCreateQuestDlg(v6, dwQuestID, wQuestDlgID, v14);
  kVRList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
  v15 = kVRList.baseclass_0.baseclass_0.m_pkHead;
  v20 = 1;
  if ( kVRList.baseclass_0.baseclass_0.m_pkHead )
  {
    do
    {
      v16 = v15;
      v15 = v15->m_pkNext;
      kVRList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *)&kVRList,
        v16);
    }
    while ( v15 );
  }
}
// 9BE688: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);
// 9BE8E0: using guessed type int (__thiscall *NiTList_AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);
// 9BE8E4: using guessed type int (__thiscall *off_9BE8E4)(_DWORD);

//----- (00602C40) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::BuildQuestDialog(SpeechBubbleDlgWin *this, unsigned __int16 mobid, unsigned int wID, unsigned int dwQuestID, char byScriptCmd, unsigned int uiMinWidth, bool bShowMenu)
{
  SpeechBubbleDlgWin *v7; // esi@1
  CQuest *v8; // edi@1
  char v9; // bl@1
  DialogParser::TokenType j; // eax@1
  int v11; // edi@10
  NiExtraData *v12; // ebx@10
  char v13; // al@12
  void *v14; // eax@18
  NiExtraData *v15; // eax@19
  void *v16; // eax@20
  void *v17; // edi@20
  char *v18; // eax@23
  int v19; // ecx@24
  void *v20; // eax@24
  int v21; // edi@25
  int v22; // ebx@25
  int v23; // eax@26
  int v24; // ebx@27
  int v25; // edi@30
  int v26; // eax@32
  FlexDlgBtn **v27; // edi@32
  int v28; // ebx@32
  unsigned int v29; // eax@32
  int v30; // ebx@32
  CQuest *v31; // eax@35
  CQuest *v32; // edi@35
  signed int v33; // eax@38
  char *v34; // eax@41
  char *v35; // ebx@41
  void *v36; // eax@41
  NiExtraData *v37; // eax@42
  void *v38; // eax@44
  void *v39; // edi@44
  DlgQuestListWin *v40; // eax@49
  int v41; // eax@51
  void *v42; // edi@51
  int v43; // ebx@52
  bool v44; // al@54
  RewardWin *v45; // ecx@54
  RewardWin *v46; // ecx@60
  RewardWin *v47; // ecx@66
  int v48; // eax@67
  int v49; // ebx@68
  int v50; // edi@71
  int v51; // eax@73
  int v52; // edi@73
  unsigned int v53; // ebx@73
  FlexDlgBtn **v54; // edi@74
  NiRefObjectVtbl *v55; // edi@79
  int v56; // eax@79
  char rkDetail; // [sp+0h] [bp-24h]@1
  void *v58; // [sp+8h] [bp-1Ch]@44
  int iNumOfQuest; // [sp+Ch] [bp-18h]@39
  QuestDialogParser kParser; // [sp+10h] [bp-14h]@1
  char bCreateBaseMenu; // [sp+16h] [bp-Eh]@7
  char bShowReward; // [sp+17h] [bp-Dh]@1
  int v63; // [sp+20h] [bp-4h]@18
  unsigned int i; // [sp+2Ch] [bp+8h]@32
  int ia; // [sp+2Ch] [bp+8h]@73
  signed int iLeft; // [sp+40h] [bp+1Ch]@26
  NiExtraData *iLefta; // [sp+40h] [bp+1Ch]@42
  int iLeftc; // [sp+40h] [bp+1Ch]@52
  signed int iLeftb; // [sp+40h] [bp+1Ch]@67

  v7 = this;
  bShowReward = 0;
  v8 = QuestDataMgr::GetQuest();
  v9 = 0;
  DialogParser::DialogParser(&kParser.baseclass_0);
  QuestDialogParser::StartParsing(&kParser, v8, wID);
  for ( j = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
        j != 11;
        j = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail) )
  {
    if ( j == 12 )
    {
      v9 = 1;
    }
    else
    {
      if ( j == 3 )
        bShowReward = 1;
    }
  }
  bCreateBaseMenu = v9;
  if ( v9 && mobid == -1 )
    bCreateBaseMenu = 0;
  v11 = (int)v7->m_apkBtns;
  v12 = (NiExtraData *)7;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v11 + 256))(0);
    v11 += 4;
    v12 = (NiExtraData *)((char *)v12 - 1);
  }
  while ( v12 );
  ((void (__stdcall *)(_DWORD))v7->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v7->m_bShowOutLine = 0;
  v7->m_iBtnCount = 0;
  v13 = 1;
  if ( wID != 119 )
    v13 = bCreateBaseMenu;
  if ( bShowMenu && v13 )
  {
    if ( wID != 119 )
      SpeechBubbleDlgWin::ParseBaseDlgAndCreateBtn(v7, mobid, 0, 0, 0);
    v14 = operator new(0x10u);
    v63 = 0;
    if ( v14 )
    {
      NiStringExtraData::NiStringExtraData((NiStringExtraData *)v14, "close");
      v12 = v15;
    }
    v63 = -1;
    v16 = operator new(0x10u);
    v17 = v16;
    v63 = 1;
    if ( v16 )
    {
      NiExtraData::NiExtraData((NiExtraData *)v16);
      *(_DWORD *)v17 = &NiIntegerExtraData::_vftable_;
      *((_DWORD *)v17 + 3) = 0;
    }
    else
    {
      v17 = 0;
    }
    v63 = -1;
    v18 = TextData::Get(0x9AE7FBE7u);
    SpeechBubbleDlgWin::AddBtn(v7, v18, 0, (NiExtraData *)v17, v12);
    if ( wID == 119 )
    {
      v19 = v7->m_iBtnCount;
      v20 = 0;
      if ( v19 )
      {
        v21 = 141 * v19 + 1;
        v22 = ((int (*)(void))v7->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
        v20 = operator new(0xCu);
        *((_BYTE *)v20 + 8) = 1;
        *(_DWORD *)v20 = v21;
        *((_DWORD *)v20 + 1) = v22;
      }
      AutoSizingDialogWin::BuildQuestDialog(
        v7->m_pkDialog,
        0x77u,
        uiMinWidth,
        dwQuestID,
        byScriptCmd,
        (AutoSizingDialogWin::VirtualRect *)v20);
      iLeft = 1;
      v23 = ((int (*)(void))v7->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      SpeechBubbleWin::SetBubbleWidth(&v7->baseclass_0, v23 + 10);
      if ( v7->m_iBtnCount )
        v24 = ((int (*)(void))v7->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
            + 10;
      else
        v24 = 0;
      if ( bShowReward )
        v25 = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
            + 10;
      else
        v25 = 0;
      v26 = ((int (*)(void))v7->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      SpeechBubbleWin::SetBubbleHeight(&v7->baseclass_0, v24 + v25 + v26);
      v27 = v7->m_apkBtns;
      v28 = ((int (*)(void))v7->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v29 = SpeechBubbleWin::GetBubbleHeight(&v7->baseclass_0) - v28;
      v30 = 0;
      for ( i = v29; v30 < v7->m_iBtnCount; ++v27 )
      {
        ((void (__stdcall *)(signed int))(*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(iLeft);
        ((void (__stdcall *)(unsigned int))(*v27)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(i);
        FlexDlgBtn::SetBtnWidth(*v27, 140);
        iLeft += 141;
        ++v30;
      }
      goto LABEL_78;
    }
    v31 = QuestDataMgr::GetQuest();
    v32 = v31;
    if ( v31 )
    {
      if ( v31->m_pQuestData )
      {
        if ( CQuest::GetQuestListWithNPC(v31, mobid) )
        {
          v33 = v32->m_NumOfQuestListWithNPC;
          if ( v33 >= 2 )
          {
            iNumOfQuest = v32->m_NumOfQuestListWithNPC;
            if ( v33 > 20 )
              iNumOfQuest = 20;
            v34 = TextData2::Get(0x9F8E7BA9u);
            v35 = fs(v34);
            v36 = operator new(0x10u);
            v63 = 2;
            if ( v36 )
            {
              NiStringExtraData::NiStringExtraData((NiStringExtraData *)v36, "questlist");
              iLefta = v37;
            }
            else
            {
              iLefta = 0;
            }
            v63 = -1;
            v38 = operator new(0x10u);
            v39 = v38;
            v58 = v38;
            v63 = 3;
            if ( v38 )
            {
              NiExtraData::NiExtraData((NiExtraData *)v38);
              *(_DWORD *)v39 = &NiIntegerExtraData::_vftable_;
              *((_DWORD *)v39 + 3) = 0;
            }
            else
            {
              v39 = 0;
            }
            v63 = -1;
            SpeechBubbleDlgWin::AddBtn(v7, v35, 0, (NiExtraData *)v39, iLefta);
            if ( iNumOfQuest > 0 )
              v7->m_bShowOutLine = 1;
            v40 = v7->m_pkDlgQuestListWin;
            if ( v40 )
              v40->m_currTalkingNpcID = mobid;
          }
        }
      }
    }
  }
  v41 = v7->m_iBtnCount;
  v42 = 0;
  if ( v41 )
  {
    v43 = 141 * v41 + 1;
    iLeftc = ((int (*)(void))v7->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v42 = operator new(0xCu);
    *((_BYTE *)v42 + 8) = 1;
    *(_DWORD *)v42 = v43;
    *((_DWORD *)v42 + 1) = iLeftc;
  }
  ((void (__stdcall *)(_DWORD))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  if ( bShowReward )
  {
    v44 = RewardWin::HasSelectableReward(v7->m_pkRewardWin, dwQuestID);
    v45 = v7->m_pkRewardWin;
    if ( v44 )
    {
      RewardWin::ShowSelectInvWin(v45, 1);
      ((void (__stdcall *)(unsigned int))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v7->m_uiDefaultRewardWinWidth);
      if ( v42 )
      {
        if ( *(_DWORD *)v42 < (unsigned int)((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)() )
          *(_DWORD *)v42 = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
        *((_DWORD *)v42 + 1) += ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      }
      else
      {
        v42 = operator new(0xCu);
        *((_BYTE *)v42 + 8) = 1;
        *(_DWORD *)v42 = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
        *((_DWORD *)v42 + 1) = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      }
      v46 = v7->m_pkRewardWin;
      v7->m_bSelectReward = 1;
      RewardWin::UpdateReward(v46, dwQuestID);
      ((void (__stdcall *)(signed int))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    else
    {
      RewardWin::ShowSelectInvWin(v45, 0);
      ((void (__stdcall *)(unsigned int))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v7->m_uiDefaultRewardWinWidth >> 1);
      if ( v42 )
      {
        if ( *(_DWORD *)v42 < (unsigned int)((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)() )
          *(_DWORD *)v42 = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
        *((_DWORD *)v42 + 1) += ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      }
      else
      {
        v42 = operator new(0xCu);
        *((_BYTE *)v42 + 8) = 1;
        *(_DWORD *)v42 = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
        *((_DWORD *)v42 + 1) = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      }
      v47 = v7->m_pkRewardWin;
      v7->m_bSelectReward = 0;
      RewardWin::UpdateReward(v47, dwQuestID);
      ((void (__stdcall *)(signed int))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
  }
  AutoSizingDialogWin::BuildQuestDialog(
    v7->m_pkDialog,
    wID,
    uiMinWidth,
    dwQuestID,
    byScriptCmd,
    (AutoSizingDialogWin::VirtualRect *)v42);
  iLeftb = 1;
  v48 = ((int (*)(void))v7->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  SpeechBubbleWin::SetBubbleWidth(&v7->baseclass_0, v48 + 10);
  if ( v7->m_iBtnCount )
    v49 = ((int (*)(void))v7->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
        + 10;
  else
    v49 = 0;
  if ( bShowReward )
    v50 = ((int (*)(void))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
        + 10;
  else
    v50 = 0;
  v51 = ((int (*)(void))v7->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  SpeechBubbleWin::SetBubbleHeight(&v7->baseclass_0, v49 + v50 + v51);
  v52 = ((int (*)(void))v7->m_apkBtns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v53 = SpeechBubbleWin::GetBubbleHeight(&v7->baseclass_0) - v52;
  ia = 0;
  if ( v7->m_iBtnCount > 0 )
  {
    v54 = v7->m_apkBtns;
    do
    {
      ((void (__stdcall *)(signed int))(*v54)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(iLeftb);
      ((void (__stdcall *)(unsigned int))(*v54)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v53);
      FlexDlgBtn::SetBtnWidth(*v54, 140);
      iLeftb += 141;
      ++v54;
      ++ia;
    }
    while ( ia < v7->m_iBtnCount );
  }
  if ( v7->m_bShowOutLine )
  {
    ((void (__stdcall *)(int))v7->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(iLeftb - 141);
    ((void (__stdcall *)(unsigned int))v7->m_apkOutLineBtns->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v53 - 2);
    FlexDlgBtn::SetBtnWidth(v7->m_apkOutLineBtns, 140);
  }
LABEL_78:
  if ( bShowReward )
  {
    ((void (__stdcall *)(_DWORD))v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(0);
    v55 = v7->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v56 = ((int (*)(void))v7->m_pkDialog->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v55[44].__vecDelDtor((NiRefObject *)v7->m_pkRewardWin, v56 + 10);
  }
  v7->m_byCurrScriptCmd = byScriptCmd;
  v7->m_dwCurrQuestID = dwQuestID;
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);

//----- (006033D0) --------------------------------------------------------
void __thiscall NpcDialogWin::OpenNpcQuestDialog(NpcDialogWin *this, unsigned __int16 mobid, unsigned int wID, unsigned int dwQuestID, char byScriptCmd, bool bIsShowMenu)
{
  int v6; // edi@1
  NpcDialogWin *v7; // esi@1
  char *v8; // eax@7
  NiTexture *v9; // eax@7
  char *v10; // eax@10
  unsigned int v11; // ebx@17
  unsigned int v12; // edi@17
  SpeechBubbleDlgWin *v13; // ecx@19
  int v14; // ebx@19
  SpeechBubbleDlgWin *v15; // ecx@21
  NiRefObjectVtbl *v16; // ebx@21
  unsigned int v17; // eax@21
  float v18; // ST14_4@21
  signed int v19; // [sp+14h] [bp-1Ch]@13
  NiPoint3 kPos; // [sp+24h] [bp-Ch]@21
  float mobida; // [sp+38h] [bp+8h]@21
  float mobidb; // [sp+38h] [bp+8h]@21

  v6 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v7 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          mobid) )
  {
    if ( mobid <= *(_WORD *)(v6 + 200) )
    {
      if ( *(_DWORD *)(*(_DWORD *)(v6 + 196) + 4 * mobid) )
      {
        NpcDialogWin::CheckCloseTimer(v7, wID);
        if ( NpcDialogDataTable::GetFaceCutFileNameByMobID(mobid) )
        {
          if ( !Folder::m_bInit )
            Folder::Init();
          v8 = fs("%s\\game\\NPCFaceCut\\%s.png");
          v9 = (NiTexture *)PgUtil::LoadSourceTexture(v8);
          if ( !v9 )
          {
            if ( !Folder::m_bInit )
              Folder::Init();
            v10 = fs("%s\\game\\NPCFaceCut\\%s.tga");
            v9 = (NiTexture *)PgUtil::LoadSourceTexture(v10);
          }
          if ( mobid != -1 && v9 )
          {
            PgSpr::SetTexture(v7->m_spFaceCut.m_pObject->m_spSpr.m_pObject, v9);
            v19 = 1;
          }
          else
          {
            v19 = 0;
          }
          ((void (__stdcall *)(signed int))v7->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v19);
          if ( PgWin::ms_uiScreenWidth > 0x320 || PgWin::ms_uiScreenHeight > 0x258 )
          {
            v11 = 650 * PgWin::ms_uiScreenWidth >> 10;
            v12 = 570 * PgWin::ms_uiScreenHeight / 0x300;
          }
          else
          {
            v11 = 650 * PgWin::ms_uiScreenWidth / 0x320;
            v12 = 570 * PgWin::ms_uiScreenHeight / 0x2BC;
          }
          v13 = v7->m_pkNpcDlgWin;
          v7->m_currTalkingNpcID = mobid;
          SpeechBubbleDlgWin::BuildQuestDialog(v13, mobid, wID, dwQuestID, byScriptCmd, v11 - 30, bIsShowMenu);
          v14 = v11
              - ((int (*)(void))v7->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          if ( v14 < 0 )
            v14 = 20;
          ((void (__stdcall *)(int))v7->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v14);
          v15 = v7->m_pkNpcDlgWin;
          v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v17 = ((int (*)(void))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          v16[44].__vecDelDtor((NiRefObject *)v7->m_pkNpcDlgWin, v12 - (v17 >> 1));
          v7->m_pkNpcDlgWin->baseclass_0.m_uiMode = 1;
          mobida = (double)PgWin::ms_uiScreenHeight * 0.800000011920929;
          v18 = mobida;
          mobidb = 0.800000011920929 * (double)PgWin::ms_uiScreenWidth;
          SpeechBubbleWin::SetNpcPos(&v7->m_pkNpcDlgWin->baseclass_0, mobidb, v18);
          ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
          CNSTimer_Interval::ReSet(&v7->m_kRandomTimer_Interval, Timer::ms_fCurTime);
          v7->m_kRandomTimer_Interval.m_fCheckTime = 1.0;
        }
      }
    }
  }
}
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (00603640) --------------------------------------------------------
void __thiscall NpcDialogWin::OpenUserQuestDialog(NpcDialogWin *this, unsigned int wID, unsigned int dwQuestID, char byScriptCmd)
{
  NpcDialogWin *v4; // esi@1
  unsigned int v5; // edi@1
  unsigned int v6; // ebx@1
  SpeechBubbleDlgWin *v7; // ecx@1
  int v8; // eax@1
  NiRefObjectVtbl *v9; // edi@1
  unsigned int v10; // eax@1
  NiPoint3 kPos; // [sp+Ch] [bp-Ch]@1
  NiRefObjectVtbl *wIDa; // [sp+20h] [bp+8h]@1

  v4 = this;
  ((void (__stdcall *)(_DWORD))this->m_spFaceCut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v5 = 440 * PgWin::ms_uiScreenWidth >> 10;
  v6 = 370 * PgWin::ms_uiScreenHeight / 0x300;
  NpcDialogWin::CheckCloseTimer(v4, wID);
  SpeechBubbleDlgWin::BuildQuestDialog(v4->m_pkNpcDlgWin, 0xFFFFu, wID, dwQuestID, byScriptCmd, v5 - 30, 1);
  v7 = v4->m_pkNpcDlgWin;
  wIDa = v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v8 = ((int (*)(void))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
  wIDa[43].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v5 - v8);
  v9 = v4->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v10 = ((int (*)(void))v4->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  v9[44].__vecDelDtor((NiRefObject *)v4->m_pkNpcDlgWin, v6 - (v10 >> 1));
  v4->m_pkNpcDlgWin->baseclass_0.m_uiMode = 0;
  ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
}

//----- (00603730) --------------------------------------------------------
bool __thiscall DlgQuestListWin::Create(DlgQuestListWin *this, PgFrameWork *pkFrameWork)
{
  DlgQuestListWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  PgSprData *v9; // eax@9
  NiNode *v10; // esi@12
  bool result; // al@16
  PgFrameWork *v12; // edi@17
  int v13; // ebx@17
  NiSourceTexture *v14; // eax@17
  PgSprData *v15; // eax@20
  NiTexturingProperty *v16; // esi@21
  NiNode *v17; // esi@23
  PgFont *v18; // eax@27
  PgWinText *v19; // edi@27
  char *v20; // eax@27
  NiSourceTexture *v21; // edi@27
  PgSprData *v22; // eax@27
  PgWinSpr *v23; // eax@27
  PgSprData *v24; // eax@27
  PgWinSpr *v25; // eax@27
  PgSprData *v26; // eax@27
  PgWinSpr *v27; // eax@27
  PgSprData *v28; // eax@27
  PgWinSpr *v29; // eax@27
  SLWCreateInfo::Item *v30; // eax@29
  void *v31; // eax@37
  PgSprData *v32; // eax@37
  SlideListWin *v33; // eax@37
  PgSprData *v34; // edi@37
  NiObjectNET *v35; // eax@37
  NiObjectNET *v36; // eax@37
  NiObjectNET *v37; // eax@37
  NiObjectNET *v38; // eax@37
  NiObjectNET *v39; // eax@37
  NiObjectNET *v40; // eax@37
  SlideBar *v41; // eax@37
  SlideBar *v42; // eax@37
  NiRefObjectVtbl *v43; // ebx@37
  SlideBar *v44; // edi@37
  int v45; // eax@37
  int v46; // eax@37
  NiTexturingProperty *v47; // esi@37
  NiNode *v48; // esi@39
  const char *v49; // [sp+40h] [bp-8Ch]@18
  int *v50; // [sp+44h] [bp-88h]@18
  int *v51; // [sp+48h] [bp-84h]@18
  NiSourceTexture *v52; // [sp+4Ch] [bp-80h]@18
  unsigned int v53; // [sp+50h] [bp-7Ch]@1
  SLWCreateInfo kCreateInfo; // [sp+60h] [bp-6Ch]@29
  unsigned int uiHeight; // [sp+7Ch] [bp-50h]@20
  unsigned int uiWidth; // [sp+80h] [bp-4Ch]@20
  NiPointer<NiTexturingProperty> spTexProp; // [sp+84h] [bp-48h]@4
  NiSourceTexture *pkTexture8; // [sp+88h] [bp-44h]@27
  PgFrameWork *iOffY; // [sp+8Ch] [bp-40h]@1
  void *pCIItem; // [sp+90h] [bp-3Ch]@7
  PgFrameWork *uiTop; // [sp+94h] [bp-38h]@9
  int uiLeft; // [sp+98h] [bp-34h]@9
  NiPointer<NiNode> spNode; // [sp+9Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+A0h] [bp-2Ch]@29
  unsigned int v65; // [sp+BCh] [bp-10h]@1
  int v66; // [sp+C8h] [bp-4h]@1
  int v67; // [sp+CCh] [bp+0h]@1

  v65 = (unsigned int)&v67 ^ __security_cookie;
  v53 = (unsigned int)&v67 ^ __security_cookie;
  v2 = this;
  iOffY = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v66 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\QuestList.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v66) = 1;
  if ( v8 )
    pCIItem = v8[1].__vecDelDtor;
  else
    pCIItem = 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, (int *)&uiTop, (NiSourceTexture *)pCIItem);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, iOffY, "DlgQuestListWin", 0) )
  {
    LOBYTE(v66) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v66 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = uiTop;
  v13 = uiLeft;
  iOffY = uiTop;
  v14 = MenuTexMgr::GetTexture(0x13u);
  if ( v14 )
  {
    v52 = v14;
    v51 = (int *)&uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  else
  {
    v52 = 0;
    v51 = (int *)&uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v49, v50, v51, v52);
  PgWinSpr::CreateWin(uiLeft - v13, (char *)uiTop - (char *)v12, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, (int *)&uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(MAIN_MENU);
    v19 = PgWinText::CreateWin(
            uiLeft - v13,
            (char *)uiTop - (char *)v12,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v19,
      1,
      v53);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    pkTexture8 = (NiSourceTexture *)v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData2::Get(0xF8FBDA5Cu);
    (*(void (__thiscall **)(PgWinText *, char *))&pkTexture8[6].m_bStatic)(v19, v20);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v21 = (NiSourceTexture *)pCIItem;
    v22 = PgSprData::Create(
            &spNode.m_pObject->baseclass_0,
            "Panel01",
            &uiLeft,
            (int *)&uiTop,
            (NiSourceTexture *)pCIItem);
    v23 = PgWinSpr::CreateWin(
            uiLeft - v13,
            (char *)uiTop - (char *)iOffY,
            v22,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      1u);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, (int *)&uiTop, v21);
    v25 = PgWinSpr::CreateWin(
            uiLeft - v13,
            (char *)uiTop - (char *)iOffY,
            v24,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      1u);
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, (int *)&uiTop, v21);
    v27 = PgWinSpr::CreateWin(
            uiLeft - v13,
            (char *)uiTop - (char *)iOffY,
            v26,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v27,
      0);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, (int *)&uiTop, v21);
    v29 = PgWinSpr::CreateWin(
            uiLeft - v13,
            (char *)uiTop - (char *)iOffY,
            v28,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, (int *)&uiTop, v21);
    PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(
      uiLeft - v13,
      (char *)uiTop - (char *)iOffY,
      (PgSprData *)pCIItem,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      2u,
      0,
      0);
    pkTexture8 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, (int *)&uiTop, pkTexture8);
      PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - v13,
        (char *)uiTop - (char *)iOffY,
        (PgSprData *)pCIItem,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        3u,
        0,
        0);
    }
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v66) = 2;
    v30 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v30->nItemType = 1;
    v30->pNode = spNode.m_pObject;
    pCIItem = v30;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    LOBYTE(v66) = 3;
    pCIItem = (char *)pCIItem + 72;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
      &thisa);
    LOBYTE(v66) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v66) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
      &thisa);
    LOBYTE(v66) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v66) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pCIItem,
      &thisa);
    LOBYTE(v66) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pCIItem = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
    LOBYTE(v66) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
      &thisa);
    LOBYTE(v66) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v31 = pCIItem;
    *((_BYTE *)pCIItem + 88) = 1;
    *((_DWORD *)v31 + 1) = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, (int *)&uiTop, v21);
    v33 = SlideListWin::CreateWin(
            uiLeft - v13,
            (char *)uiTop - (char *)iOffY,
            v32,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pListWinQuestList = v33;
    v33->m_uiLClickMsg = 0;
    v2->m_pListWinQuestList->m_bCheckEnable = 0;
    SlideListWin::AlignText(v2->m_pListWinQuestList, 4u);
    SlideListWin::UpdateViewList(v2->m_pListWinQuestList);
    v34 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, (int *)&uiTop, v21);
    v35 = (NiObjectNET *)((int (__cdecl *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor01");
    NiObjectNET::SetName(v35, "SlideBar_DnBtn01Nor");
    v36 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick01");
    NiObjectNET::SetName(v36, "SlideBar_DnBtn01Click");
    v37 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver01");
    NiObjectNET::SetName(v37, "SlideBar_DnBtn01Over");
    v38 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor01");
    NiObjectNET::SetName(v38, "SlideBar_UpBtn01Nor");
    v39 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick01");
    NiObjectNET::SetName(v39, "SlideBar_UpBtn01Click");
    v40 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver01");
    NiObjectNET::SetName(v40, "SlideBar_UpBtn01Over");
    v41 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar01",
            "SlideBar_UpBtn01",
            "SlideBar_DnBtn01",
            v34,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarList = v41;
    v41->m_uiClickMsg = 1;
    v2->m_pSlideBarList->m_eType = 1;
    v42 = v2->m_pSlideBarList;
    v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v44 = v2->m_pSlideBarList;
    v45 = ((int (__thiscall *)(SlideBar *))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2->m_pSlideBarList);
    v46 = (int)v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                 (NiRefObject *)v44,
                 v45);
    v43[77].__vecDelDtor((NiRefObject *)v2->m_pSlideBarList, v46 - 18);
    ((void (__thiscall *)(DlgQuestListWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v66) = 1;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    v47 = spTexProp.m_pObject;
    LOBYTE(v66) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
    v48 = spNode.m_pObject;
    v66 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v48 )
      v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
    result = 1;
  }
  else
  {
    v16 = spTexProp.m_pObject;
    LOBYTE(v66) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    v17 = spNode.m_pObject;
    v66 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v17 )
      return 0;
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00603F60) --------------------------------------------------------
void __thiscall DlgQuestListWin::SetQuestList(DlgQuestListWin *this)
{
  DlgQuestListWin *v1; // ebx@1
  CQuest *v2; // eax@1
  SlideListWin *v3; // ecx@1
  void *v4; // esi@1
  void *v5; // eax@1
  void *v6; // edi@1
  int v7; // esi@7
  const char *v8; // ebx@7
  unsigned __int16 v9; // dx@7
  std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *v10; // eax@7
  int v11; // esi@12
  char v12; // dl@13
  unsigned int v13; // eax@13
  bool v14; // cl@13
  bool v15; // dl@13
  bool v16; // cl@13
  char *v17; // eax@18
  int v18; // edi@18
  SlideListWin *v19; // ecx@21
  SlideBar *v20; // ecx@29
  SlideListWin *v21; // eax@30
  int v22; // [sp-1Ch] [bp-90h]@22
  int v23; // [sp-18h] [bp-8Ch]@22
  int v24; // [sp-14h] [bp-88h]@22
  std::exception thisa; // [sp+0h] [bp-74h]@33
  char *_What; // [sp+Ch] [bp-68h]@33
  DlgQuestListWin *v27; // [sp+10h] [bp-64h]@1
  void *pkQuest; // [sp+14h] [bp-60h]@1
  int iNumOfQuest; // [sp+18h] [bp-5Ch]@4
  CQuestData *pkQuestData; // [sp+1Ch] [bp-58h]@1
  int i; // [sp+20h] [bp-54h]@4
  int v32; // [sp+24h] [bp-50h]@5
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > kQuestNameList; // [sp+28h] [bp-4Ch]@1
  DlgQuestListWin::QuestNameList kList; // [sp+34h] [bp-40h]@7
  unsigned int v35; // [sp+64h] [bp-10h]@1
  int v36; // [sp+70h] [bp-4h]@2
  int v37; // [sp+74h] [bp+0h]@1

  v35 = (unsigned int)&v37 ^ __security_cookie;
  v1 = this;
  v27 = this;
  v2 = QuestDataMgr::GetQuest();
  v3 = v1->m_pListWinQuestList;
  v4 = v2;
  v5 = v2->m_pQuestData;
  pkQuest = v4;
  pkQuestData = (CQuestData *)v5;
  SlideListWin::RemoveAllList(v3);
  kQuestNameList.baseclass_0.baseclass_0._Mysize = 0;
  v6 = operator new(0x38u);
  if ( !v6 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v6 = v6;
  *(_DWORD *)&kQuestNameList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v6;
  *((_DWORD *)v6 + 1) = v6;
  v36 = 0;
  if ( pkQuestData && CQuest::GetQuestListWithNPC((CQuest *)v4, v1->m_currTalkingNpcID) )
  {
    iNumOfQuest = *((_DWORD *)v4 + 7);
    i = 0;
    if ( iNumOfQuest > 0 )
    {
      v32 = 0;
      while ( 1 )
      {
        v7 = v32 + *((_DWORD *)v4 + 8);
        v8 = CQuestData::GetQuestName(pkQuestData, *(_WORD *)(*(_DWORD *)(v7 + 4) + 4));
        DlgQuestListWin::QuestNameList::QuestNameList(&kList);
        v9 = *(_WORD *)(*(_DWORD *)(v7 + 4) + 4);
        LOBYTE(v36) = 1;
        kList.m_QuestID = v9;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kList.m_Title, v8, strlen(v8));
        kList.m_Data = *(_WORD *)(*(_DWORD *)(v7 + 4) + 4);
        kList.m_Level = *(_DWORD *)(v7 + 12);
        kList.m_Status = *(_DWORD *)(v7 + 8);
        kList.m_Type = *(_BYTE *)(*(_DWORD *)(v7 + 4) + 17);
        kList.m_Repeatable = *(_BYTE *)(*(_DWORD *)(v7 + 4) + 18) != 0;
        kList.m_StartItem = *(_BYTE *)(*(_DWORD *)(v7 + 4) + 32) != 0;
        kList.m_StartQuest = *(_BYTE *)(*(_DWORD *)(v7 + 4) + 56) != 0;
        v10 = std::_List_val<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Buynode(
                &kQuestNameList.baseclass_0,
                (std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *)v6,
                *((std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node **)v6
                + 1),
                &kList);
        if ( 89478484 - kQuestNameList.baseclass_0.baseclass_0._Mysize < 1 )
          std::_Xlength_error("list<T> too long");
        ++kQuestNameList.baseclass_0.baseclass_0._Mysize;
        *((_DWORD *)v6 + 1) = v10;
        v10->_Prev->_Next = v10;
        LOBYTE(v36) = 0;
        if ( kList.m_Title.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&kList.m_Title.baseclass_0.___u0.baseclass_0.dummy[0]);
        v32 += 16;
        ++i;
        if ( i >= iNumOfQuest )
          break;
        v4 = pkQuest;
      }
      v1 = v27;
    }
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
      &kQuestNameList,
      DlgQuestListWin::QuestNameList::SortType);
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
      &kQuestNameList,
      DlgQuestListWin::QuestNameList::SortRepeatable);
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
      &kQuestNameList,
      DlgQuestListWin::QuestNameList::SortStartItem);
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
      &kQuestNameList,
      DlgQuestListWin::QuestNameList::SortStartQuest);
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
      &kQuestNameList,
      DlgQuestListWin::QuestNameList::SortEvent);
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
      &kQuestNameList,
      DlgQuestListWin::QuestNameList::SortLevel);
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
      &kQuestNameList,
      DlgQuestListWin::QuestNameList::SortStatus);
    v11 = **(_DWORD **)&kQuestNameList;
    if ( **(_DWORD **)&kQuestNameList != *(_DWORD *)&kQuestNameList )
    {
      while ( 1 )
      {
        kList.m_QuestID = *(_WORD *)(v11 + 8);
        kList.m_Title.baseclass_0._Myres = 15;
        kList.m_Title.baseclass_0._Mysize = 0;
        kList.m_Title.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &kList.m_Title,
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v11 + 12),
          0,
          0xFFFFFFFFu);
        v12 = *(_BYTE *)(v11 + 52);
        v13 = *(_DWORD *)(v11 + 40);
        kList.m_Level = *(_DWORD *)(v11 + 44);
        v14 = *(_BYTE *)(v11 + 53);
        kList.m_Type = v12;
        v15 = *(_BYTE *)(v11 + 54);
        kList.m_StartItem = v14;
        v16 = *(_BYTE *)(v11 + 55);
        kList.m_Data = v13;
        kList.m_Status = *(_DWORD *)(v11 + 48);
        kList.m_StartQuest = v15;
        kList.m_Repeatable = v16;
        LOBYTE(v36) = 2;
        switch ( kList.m_Status )
        {
          case 4:
          case 5:
          case 9:
          case 0x14:
            TextData::Get(0x8988D7BAu);
            break;
          case 6:
            TextData::Get(0xA4FDEBBDu);
            break;
          case 8:
            TextData::Get(0x859CC9CDu);
            break;
          default:
            break;
        }
        v17 = fs("(%d)  %s  (%s)");
        v18 = SlideListWin::AddText(v1->m_pListWinQuestList, v17);
        SlideListWin::SetData(v1->m_pListWinQuestList, v18, kList.m_Data);
        if ( kList.m_Status == 5 )
          break;
        if ( kList.m_Status == 20 || kList.m_Status == 4 )
          break;
        v19 = v1->m_pListWinQuestList;
        if ( kList.m_Status != 6 )
        {
          v24 = 255;
LABEL_25:
          v23 = 255;
          v22 = 255;
          goto LABEL_26;
        }
        v24 = 240;
        v23 = 248;
        v22 = 0;
LABEL_26:
        SlideListWin::SetFontColor(v19, v18, v22, v23, v24);
        LOBYTE(v36) = 0;
        if ( kList.m_Title.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&kList.m_Title.baseclass_0.___u0.baseclass_0.dummy[0]);
        v11 = *(_DWORD *)v11;
        if ( v11 == *(_DWORD *)&kQuestNameList )
          goto LABEL_29;
      }
      v19 = v1->m_pListWinQuestList;
      v24 = 0;
      goto LABEL_25;
    }
LABEL_29:
    SlideListWin::AlignText(v1->m_pListWinQuestList, 4u);
    SlideListWin::AlignText(v1->m_pListWinQuestList, 1u, 5u);
    v20 = v1->m_pSlideBarList;
    if ( v20 )
    {
      v21 = v1->m_pListWinQuestList;
      if ( v21 )
      {
        SlideBar::SetSplitCnt(v20, v21->m_nSlideSplitCnt);
        v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
        SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
      }
    }
  }
  std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::clear(&kQuestNameList);
  operator delete(*(void **)&kQuestNameList);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (006043A0) --------------------------------------------------------
void __thiscall SpeechBubbleDlgWin::OnCommand(SpeechBubbleDlgWin *this, unsigned int wParam, int lParam)
{
  int v3; // edi@0
  int v4; // esi@0
  SpeechBubbleDlgWin *v5; // ebx@1
  int v6; // esi@2
  NiExtraData *v7; // eax@2
  NiExtraData *v8; // edi@2
  PgFrameWork *v9; // eax@4
  PgMsg::Frame *v10; // ecx@5
  DlgQuestListWin *v11; // ecx@9
  unsigned int v12; // edi@26
  char *v13; // edi@34
  unsigned int v14; // esi@41
  char *v15; // edi@42
  bool v16; // zf@46
  unsigned int v17; // edx@46
  char v18; // al@46
  int v19; // [sp-8h] [bp-1Ch]@2
  int v20; // [sp-4h] [bp-18h]@2
  DirectUserMsgBody_NpcDialogResponse kBody; // [sp+4h] [bp-10h]@38

  v5 = this;
  if ( wParam != 77777 )
    return;
  v20 = v4;
  v6 = lParam;
  v19 = v3;
  NiObjectNET::GetExtraData((NiObjectNET *)lParam, "type");
  v7 = NiObjectNET::GetExtraData((NiObjectNET *)v6, "action");
  v8 = v7;
  if ( !v7 )
    goto LABEL_50;
  lParam = (int)v7[1].baseclass_0.baseclass_0.vfptr;
  if ( !strcmp((const char *)lParam, "close") )
  {
    v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v9 )
    {
      v10 = v9[28].m_kMsgQ.m_pBase;
      if ( v10 )
      {
        if ( !(unsigned __int8)(*(int (**)(void))(v10->m_uiDumy[0] + 260))() )
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0xBu, 0, 0);
      }
    }
    goto LABEL_50;
  }
  if ( !strcmp((const char *)lParam, "questlist") )
  {
    v11 = v5->m_pkDlgQuestListWin;
    if ( v11 )
    {
      DlgQuestListWin::SetQuestList(v11);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->m_pkDlgQuestListWin->baseclass_0.baseclass_0.baseclass_0);
    }
    return;
  }
  if ( !strcmp((const char *)lParam, "DivorceRequest") )
  {
    ((void (__stdcall *)(int, int))v5->m_pkDivorceMenuListPopup->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      PgWin::ms_iMsX.x,
      PgWin::ms_iMsY);
    PgWinMgr::OpenPopupWin(
      &Pgg_kWinMgr,
      0,
      &v5->m_pkDivorceMenuListPopup->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    return;
  }
  if ( !strcmp((const char *)lParam, "MarryRequest") )
  {
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x53u, 0, 0);
LABEL_50:
    if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        36,
        0,
        &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          36,
          0,
          &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      36,
      0,
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    return;
  }
  if ( !strcmp((const char *)lParam, "PetSetName") )
  {
    if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        80,
        0,
        &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          80,
          0,
          &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      80,
      0,
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    goto LABEL_50;
  }
  if ( !strcmp((const char *)lParam, "PetSetNameCancel") )
  {
    if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        81,
        0,
        &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          81,
          0,
          &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      81,
      0,
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    goto LABEL_50;
  }
  if ( v5->m_bClickPortalNPC )
  {
    v12 = 0;
    if ( (signed int)ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() > 0 )
    {
      while ( strcmp(ITableBase<TownPortal_TownPortalInfoTable>::GetByIndex(v12)->MapName, (const char *)lParam) )
      {
        ++v12;
        if ( (signed int)v12 >= (signed int)ITableBase<TownPortal_TownPortalInfoTable>::GetTotal() )
          goto LABEL_50;
      }
      BYTE3(wParam) = ITableBase<TownPortal_TownPortalInfoTable>::GetByIndex(v12)->Index;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 6u, 0x1Au, (char *)&wParam + 3, 1);
      v5->m_bClickPortalNPC = 0;
    }
    goto LABEL_50;
  }
  if ( (unsigned __int8)((int (__stdcall *)(int, int))v5->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(
                          v19,
                          v20)
    && v5->m_bSelectReward )
  {
    if ( RewardWin::GetRealSelectReword(v5->m_pkRewardWin) == -1 )
    {
      v13 = TextData::Get(0x90FCD9C7u);
      if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v13,
          &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v13,
            &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      ((void (__thiscall *)(IDirectMessenger *, signed int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent)(
        &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25);
      return;
    }
    kBody.dwItemSelIndex = RewardWin::GetRealSelectReword(v5->m_pkRewardWin);
  }
  else
  {
    kBody.dwItemSelIndex = -1;
  }
  if ( !(unsigned __int8)((int (*)(void))v5->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)()
    || (v14 = RewardWin::GetRewardItemCount(v5->m_pkRewardWin, LOWORD(v5->m_dwCurrQuestID)),
        Inventory::GetEmptySlotCount(&g_kInventory) >= v14) )
  {
    v16 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
    v17 = v5->m_dwCurrQuestID;
    v18 = v5->m_byCurrScriptCmd;
    kBody.acAction = (char *)v8[1].baseclass_0.baseclass_0.vfptr;
    kBody.dwQuestID = v17;
    kBody.byScriptCmd = v18;
    if ( !v16 )
    {
      ((void (__stdcall *)(signed int, DirectUserMsgBody_NpcDialogResponse *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        37,
        &kBody,
        &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, DirectUserMsgBody_NpcDialogResponse *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          37,
          &kBody,
          &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    ((void (__thiscall *)(IDirectMessenger *, signed int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent)(
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      37);
    goto LABEL_50;
  }
  v15 = TextData::Get(0x6C7C4F96u);
  if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v15,
      &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v15,
        &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  ((void (__thiscall *)(IDirectMessenger *, signed int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent)(
    &v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    25);
}
// 6043A0: could not find valid save-restore pair for edi
// 6043A0: could not find valid save-restore pair for esi

//----- (006048D0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>(NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *this)
{
  this->vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
}
// 9BE678: using guessed type int (__thiscall *NiTListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);

//----- (006048E0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vector_deleting_destructor_(NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9BE678: using guessed type int (__thiscall *NiTListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);

//----- (00604910) --------------------------------------------------------
void *__thiscall FlexDlgBtn::_scalar_deleting_destructor_(FlexDlgBtn *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&FlexDlgBtn::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&FlexDlgBtn::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BDB60: using guessed type int (__stdcall *FlexDlgBtn___vftable_)(int uiFlags);
// 9BDB7C: using guessed type int (__thiscall *FlexDlgBtn___vftable_)(void *p, char);

//----- (00604950) --------------------------------------------------------
void *__thiscall TextBtn::_vector_deleting_destructor_(TextBtn *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&TextBtn::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&TextBtn::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BDDB4: using guessed type int (__stdcall *TextBtn___vftable_)(int uiFlags);
// 9BDDD4: using guessed type int (__thiscall *TextBtn___vftable_)(void *p, char);

//----- (00604990) --------------------------------------------------------
void *__thiscall AutoSizingDialogWin::_vector_deleting_destructor_(AutoSizingDialogWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoSizingDialogWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoSizingDialogWin::_vftable_;
  PgWin::_PgWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BE00C: using guessed type int (__stdcall *AutoSizingDialogWin___vftable_)(int uiFlags);
// 9BE02C: using guessed type int (__thiscall *AutoSizingDialogWin___vftable_)(void *p, char);

//----- (006049D0) --------------------------------------------------------
void *__thiscall SpeechBubbleDlgWin::_vector_deleting_destructor_(SpeechBubbleDlgWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SpeechBubbleDlgWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SpeechBubbleDlgWin::_vftable_;
  SpeechBubbleWin::_SpeechBubbleWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BE1F8: using guessed type int (__stdcall *SpeechBubbleDlgWin___vftable_)(int uiFlags);
// 9BE214: using guessed type int (__thiscall *SpeechBubbleDlgWin___vftable_)(void *p, char);

//----- (00604A10) --------------------------------------------------------
void *__thiscall DlgQuestListWin::_scalar_deleting_destructor_(DlgQuestListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DlgQuestListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&DlgQuestListWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BE438: using guessed type int (__stdcall *DlgQuestListWin___vftable_)(int uiFlags);
// 9BE454: using guessed type int (__thiscall *DlgQuestListWin___vftable_)(void *p, char);

//----- (00604A50) --------------------------------------------------------
NpcDialogData *__cdecl NpcDialogDataTable::GetNpcDialogDataByMobIDX(char *pcMobIDX)
{
  char *v1; // ebx@1
  int v2; // eax@3
  unsigned int v3; // edi@4
  unsigned int v4; // esi@6
  NpcDialogData *result; // eax@7

  v1 = pcMobIDX;
  if ( pcMobIDX && *pcMobIDX )
  {
    v2 = *(_DWORD *)(ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable + 56);
    if ( v2 )
      v3 = *(_DWORD *)(v2 + 40);
    else
      v3 = 0;
    v4 = 0;
    if ( v3 )
    {
      do
      {
        result = (NpcDialogData *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<NpcDialogData_NpcDialogDataTable>::ms_pkTable + 4),
                                    v4);
        if ( result )
        {
          if ( !strcmp(result->MobIDX, v1) )
            return result;
          v1 = pcMobIDX;
        }
        ++v4;
      }
      while ( v4 < v3 );
    }
    result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E38: using guessed type int ITableBase_NpcDialogData_NpcDialogDataTable___ms_pkTable;

//----- (00604AE0) --------------------------------------------------------
char *__cdecl NpcDialogDataTable::GetFaceCutFileNameByMobID(unsigned __int16 MobID)
{
  int v1; // esi@1
  int v2; // ecx@3
  int v3; // eax@4
  char *result; // eax@5
  char *v5; // eax@6
  NpcDialogData *v6; // eax@7

  v1 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          MobID)
    && MobID <= *(_WORD *)(v1 + 200)
    && (v2 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v2 + 4 * MobID))
    && (v3 = *(_DWORD *)(v2 + 4 * MobID)) != 0
    && (v5 = (char *)(v3 + 2)) != 0
    && (v6 = NpcDialogDataTable::GetNpcDialogDataByMobIDX(v5)) != 0 )
    result = v6->FaceCutFile;
  else
    result = 0;
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (00604B40) --------------------------------------------------------
void __thiscall NiTList<AutoSizingDialogWin::VirtualRect__>::_NiTList<AutoSizingDialogWin::VirtualRect__>(NiTList<AutoSizingDialogWin::VirtualRect *> *this)
{
  NiTList<AutoSizingDialogWin::VirtualRect *> *v1; // edi@1
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v2; // esi@1
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
}
// 9BE678: using guessed type int (__thiscall *NiTListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);
// 9BE688: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);

//----- (00604BC0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v3; // esi@1
  NiTListItem<AutoSizingDialogWin::VirtualRect *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect *>,AutoSizingDialogWin::VirtualRect *>Vtbl *)&NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BE678: using guessed type int (__thiscall *NiTListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);
// 9BE688: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AutoSizingDialogWin__VirtualRect ___AutoSizingDialogWin__VirtualRect _____vftable_)(void *p, char);

//----- (00604C50) --------------------------------------------------------
void *__thiscall NpcDialogWin::_vector_deleting_destructor_(NpcDialogWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  PgWinSpr *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NpcDialogWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NpcDialogWin::_vftable_;
  v3 = this->m_spFaceCut.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BE69C: using guessed type int (__stdcall *NpcDialogWin___vftable_)(int uiFlags);
// 9BE6BC: using guessed type int (__thiscall *NpcDialogWin___vftable_)(void *p, char);

//----- (00604CF0) --------------------------------------------------------
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Splice_same(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > _Where, std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *_Right, std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > _First, std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > _Last, unsigned int _Count)
{
  unsigned int v6; // edx@2
  int v7; // ecx@5

  if ( this != _Right )
  {
    v6 = this->baseclass_0.baseclass_0._Mysize;
    if ( 89478484 - v6 < _Count )
      std::_Xlength_error("list<T> too long");
    this->baseclass_0.baseclass_0._Mysize = _Count + v6;
    _Right->baseclass_0.baseclass_0._Mysize -= _Count;
  }
  **(_DWORD **)(*(_DWORD *)&_First + 4) = _Last;
  **(_DWORD **)(*(_DWORD *)&_Last + 4) = _Where;
  **(_DWORD **)(*(_DWORD *)&_Where + 4) = _First;
  v7 = *(_DWORD *)(*(_DWORD *)&_Where + 4);
  *(_DWORD *)(*(_DWORD *)&_Where + 4) = *(_DWORD *)(*(_DWORD *)&_Last + 4);
  *(_DWORD *)(*(_DWORD *)&_Last + 4) = *(_DWORD *)(*(_DWORD *)&_First + 4);
  *(_DWORD *)(*(_DWORD *)&_First + 4) = v7;
}

//----- (00604D70) --------------------------------------------------------
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this)
{
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+4h] [bp-10h]@3
  char *_What; // [sp+10h] [bp-4h]@3

  v1 = this;
  this->baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x38u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00604DD0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall ScriptBtn::GetText(ScriptBtn *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, &this->m_kText, 0, 0xFFFFFFFFu);
  return result;
}

//----- (00604E00) --------------------------------------------------------
void __thiscall DlgQuestListWin::QuestNameList::QuestNameList(DlgQuestListWin::QuestNameList *this, DlgQuestListWin::QuestNameList *__that)
{
  DlgQuestListWin::QuestNameList *v2; // esi@1
  char *v3; // ecx@1

  v2 = this;
  v3 = (char *)&this->m_Title;
  v2->m_QuestID = __that->m_QuestID;
  *((_DWORD *)v3 + 5) = 15;
  *((_DWORD *)v3 + 4) = 0;
  *v3 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v3,
    &__that->m_Title,
    0,
    0xFFFFFFFFu);
  v2->m_Data = __that->m_Data;
  v2->m_Level = __that->m_Level;
  v2->m_Status = __that->m_Status;
  v2->m_Type = __that->m_Type;
  v2->m_StartItem = __that->m_StartItem;
  v2->m_StartQuest = __that->m_StartQuest;
  v2->m_Repeatable = __that->m_Repeatable;
}

//----- (00604E70) --------------------------------------------------------
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::clear(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this)
{
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v1; // edi@1
  int v2; // esi@1
  int v3; // ebx@2

  v1 = this;
  v2 = **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  **(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_DWORD *)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  this->baseclass_0.baseclass_0._Mysize = 0;
  if ( v2 != *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v3 = *(_DWORD *)v2;
      if ( *(_DWORD *)(v2 + 32) >= 0x10u )
        operator delete(*(void **)(v2 + 12));
      *(_DWORD *)(v2 + 32) = 15;
      *(_DWORD *)(v2 + 28) = 0;
      *(_BYTE *)(v2 + 12) = 0;
      operator delete((void *)v2);
      v2 = v3;
    }
    while ( v3 != *(_DWORD *)&v1->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (00604ED0) --------------------------------------------------------
std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *__thiscall std::_List_val<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Buynode(std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *_Next, std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *_Prev, DlgQuestListWin::QuestNameList *_Val)
{
  void *v4; // esi@1
  std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *v5; // eax@2
  int v7; // [sp-10h] [bp-30h]@1
  std::exception thisa; // [sp+0h] [bp-20h]@5
  void *p; // [sp+Ch] [bp-14h]@1
  int *v10; // [sp+10h] [bp-10h]@1
  int v11; // [sp+1Ch] [bp-4h]@2

  v10 = &v7;
  v4 = operator new(0x38u);
  p = v4;
  if ( !v4 )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Next;
  *((_DWORD *)v4 + 1) = _Prev;
  v11 = 0;
  *(_DWORD *)v4 = v5;
  _Next = (std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *)((char *)v4 + 8);
  _Prev = (std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *)((char *)v4 + 8);
  LOBYTE(v11) = 1;
  if ( v4 != (void *)-8 )
    DlgQuestListWin::QuestNameList::QuestNameList((DlgQuestListWin::QuestNameList *)((char *)v4 + 8), _Val);
  return (std::_List_nod<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> >::_Node *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00604F90) --------------------------------------------------------
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this)
{
  void **v1; // esi@1

  v1 = (void **)this;
  std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::clear(this);
  operator delete(*v1);
}

//----- (00604FB0) --------------------------------------------------------
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::merge<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *_Right, bool (__cdecl *_Pred)(DlgQuestListWin::QuestNameList *, DlgQuestListWin::QuestNameList *))
{
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v3; // edx@1
  std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > v4; // eax@2
  std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > v5; // esi@2
  std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > v6; // edi@2
  std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > v7; // ebx@2
  std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > v8; // edi@5
  std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > v9; // [sp+0h] [bp-Ch]@2
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *thisa; // [sp+4h] [bp-8h]@1
  std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > v11; // [sp+8h] [bp-4h]@2

  v3 = _Right;
  thisa = this;
  if ( _Right != this )
  {
    v4 = *(std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = (std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > >)**(_DWORD **)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v6 = *(std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > >)**(_DWORD **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v9 = *(std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v11 = *(std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > *)&_Right->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v7 == *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
LABEL_9:
      if ( v5 != v4 )
        std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Splice_same(
          this,
          v6,
          v3,
          v5,
          v4,
          v3->baseclass_0.baseclass_0._Mysize);
    }
    else
    {
      while ( v5 != v4 )
      {
        if ( _Pred(
               (DlgQuestListWin::QuestNameList *)(*(_DWORD *)&v5 + 8),
               (DlgQuestListWin::QuestNameList *)(*(_DWORD *)&v7 + 8)) )
        {
          v8 = (std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > >)**(_DWORD **)&v5;
          std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Splice_same(
            thisa,
            v7,
            _Right,
            v5,
            *(std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > *)v5,
            1u);
          v5 = v8;
          v6 = v9;
        }
        else
        {
          v7 = (std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > >)**(_DWORD **)&v7;
        }
        v4 = v11;
        if ( v7 == v6 )
        {
          v3 = _Right;
          this = thisa;
          goto LABEL_9;
        }
      }
    }
  }
}

//----- (00605030) --------------------------------------------------------
void __thiscall std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::sort<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *this, bool (__cdecl *_Pred)(DlgQuestListWin::QuestNameList *, DlgQuestListWin::QuestNameList *))
{
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v2; // edi@1
  bool v3; // cf@1
  unsigned int v4; // ebx@2
  void *v5; // eax@2
  int v6; // eax@4
  int v7; // ecx@4
  int v8; // edx@4
  int v9; // esi@7
  unsigned int v10; // edi@7
  int v11; // esi@8
  int v12; // eax@11
  unsigned int v13; // edx@11
  unsigned int v14; // eax@11
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v15; // eax@15
  int v16; // ecx@16
  unsigned int v17; // ecx@16
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v18; // esi@21
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v19; // eax@23
  std::exception thisa; // [sp+0h] [bp-16Ch]@29
  char *_What; // [sp+Ch] [bp-160h]@29
  bool (__cdecl *v22)(DlgQuestListWin::QuestNameList *, DlgQuestListWin::QuestNameList *); // [sp+10h] [bp-15Ch]@1
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *v23; // [sp+14h] [bp-158h]@1
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > _Templist; // [sp+18h] [bp-154h]@2
  std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > _Binlist[26]; // [sp+24h] [bp-148h]@3
  unsigned int v26; // [sp+15Ch] [bp-10h]@1
  int v27; // [sp+168h] [bp-4h]@3
  int v28; // [sp+16Ch] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v2 = this;
  v3 = this->baseclass_0.baseclass_0._Mysize < 2;
  v23 = this;
  v22 = _Pred;
  if ( !v3 )
  {
    v4 = 0;
    _Templist.baseclass_0.baseclass_0._Mysize = 0;
    v5 = operator new(0x38u);
    if ( !v5 )
    {
      _What = 0;
      std::exception::exception(&thisa, (const char *const *)&_What);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
    *(_DWORD *)v5 = v5;
    *(_DWORD *)&_Templist.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
    *((_DWORD *)v5 + 1) = v5;
    v27 = 0;
    _eh_vector_constructor_iterator_(
      _Binlist,
      0xCu,
      26,
      (void (__thiscall *)(void *))std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>,
      (void (__thiscall *)(void *))std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>);
    LOBYTE(v27) = 1;
    if ( v2->baseclass_0.baseclass_0._Mysize )
    {
      do
      {
        v6 = ***(_DWORD ***)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        v7 = **(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        v8 = **(_DWORD **)&_Templist;
        if ( &_Templist != v2 )
        {
          if ( 89478484 - _Templist.baseclass_0.baseclass_0._Mysize < 1 )
            std::_Xlength_error("list<T> too long");
          ++_Templist.baseclass_0.baseclass_0._Mysize;
          --v2->baseclass_0.baseclass_0._Mysize;
        }
        **(_DWORD **)(v7 + 4) = v6;
        **(_DWORD **)(v6 + 4) = v8;
        **(_DWORD **)(v8 + 4) = v7;
        v9 = *(_DWORD *)(v8 + 4);
        *(_DWORD *)(v8 + 4) = *(_DWORD *)(v6 + 4);
        v10 = 0;
        *(_DWORD *)(v6 + 4) = *(_DWORD *)(v7 + 4);
        *(_DWORD *)(v7 + 4) = v9;
        if ( !v4 )
          goto LABEL_33;
        v11 = (int)_Binlist;
        do
        {
          if ( !*(_DWORD *)(v11 + 4) )
            break;
          std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::merge<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
            (std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *)v11,
            &_Templist,
            v22);
          if ( (std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *)v11 != &_Templist )
          {
            v12 = *(_DWORD *)v11;
            v13 = _Templist.baseclass_0.baseclass_0._Mysize;
            *(_DWORD *)v11 = *(_DWORD *)&_Templist;
            *(_DWORD *)&_Templist.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v12;
            v14 = *(_DWORD *)(v11 + 4);
            *(_DWORD *)(v11 + 4) = v13;
            _Templist.baseclass_0.baseclass_0._Mysize = v14;
          }
          ++v10;
          v11 += 12;
        }
        while ( v10 < v4 );
        if ( v10 == 25 )
        {
          std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::merge<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
            &_Binlist[24],
            &_Templist,
            v22);
        }
        else
        {
LABEL_33:
          v15 = &_Binlist[v10];
          if ( v15 != &_Templist )
          {
            v16 = *(_DWORD *)&v15->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v15->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&_Templist;
            *(_DWORD *)&_Templist.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v16;
            v17 = v15->baseclass_0.baseclass_0._Mysize;
            v15->baseclass_0.baseclass_0._Mysize = _Templist.baseclass_0.baseclass_0._Mysize;
            _Templist.baseclass_0.baseclass_0._Mysize = v17;
          }
          if ( v10 == v4 )
            ++v4;
        }
        v2 = v23;
      }
      while ( v23->baseclass_0.baseclass_0._Mysize );
    }
    if ( v4 > 1 )
    {
      v18 = &_Binlist[1];
      v23 = (std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *)(v4 - 1);
      do
      {
        std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::merge<bool____cdecl____DlgQuestListWin::QuestNameList_const___DlgQuestListWin::QuestNameList_const___>(
          v18,
          v18 - 1,
          v22);
        ++v18;
        v23 = (std::list<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > *)((char *)v23 - 1);
      }
      while ( v23 );
    }
    v19 = &_Templist + v4;
    if ( v2 != v19 )
    {
      if ( v19->baseclass_0.baseclass_0._Mysize )
        std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_Splice_same(
          v2,
          (std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > >)**(_DWORD **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
          v19,
          (std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > >)**(_DWORD **)&v19->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
          *(std::_List_const_iterator<std::_List_val<DlgQuestListWin::QuestNameList,std::allocator<DlgQuestListWin::QuestNameList> > > *)&v19->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
          v19->baseclass_0.baseclass_0._Mysize);
    }
    LOBYTE(v27) = 0;
    _eh_vector_destructor_iterator_(
      _Binlist,
      0xCu,
      26,
      (void (__thiscall *)(void *))std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::_list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>);
    std::list<DlgQuestListWin::QuestNameList_std::allocator<DlgQuestListWin::QuestNameList>>::clear(&_Templist);
    operator delete(*(void **)&_Templist);
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (006052E0) --------------------------------------------------------
void __thiscall NpcQuestWin::NpcQuestWin(NpcQuestWin *this)
{
  NpcQuestWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NpcQuestWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NpcQuestWin::_vftable_;
}
// 9BE9D0: using guessed type int (__stdcall *NpcQuestWin___vftable_)(int uiFlags);
// 9BE9EC: using guessed type int (__thiscall *NpcQuestWin___vftable_)(void *p, char);

//----- (00605300) --------------------------------------------------------
void __thiscall NpcQuestWin::_NpcQuestWin(NpcQuestWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NpcQuestWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NpcQuestWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9BE9D0: using guessed type int (__stdcall *NpcQuestWin___vftable_)(int uiFlags);
// 9BE9EC: using guessed type int (__thiscall *NpcQuestWin___vftable_)(void *p, char);

//----- (00605340) --------------------------------------------------------
void __thiscall NpcQuestWin::OnCmdClose(NpcQuestWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (00605350) --------------------------------------------------------
void __thiscall NpcQuestWin::OnHelpLink(NpcQuestWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NpcQuestWin");
}

//----- (00605380) --------------------------------------------------------
void __thiscall NpcQuestWin::OnCommand(NpcQuestWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@3

  switch ( wParam )
  {
    case 2u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 3u:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "NpcQuestWin");
      break;
    default:
      return;
  }
}

//----- (006053E0) --------------------------------------------------------
bool __thiscall NpcQuestWin::Create(NpcQuestWin *this, NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v3; // esi@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  NiSourceTexture *v6; // edi@4
  PgSprData *v7; // eax@4
  NiNode *v8; // esi@5
  PgFont *v10; // ST40_4@10
  unsigned int v11; // ST3C_4@10
  unsigned int v12; // eax@10
  PgWinText *v13; // ebx@10
  char *v14; // eax@10
  PgSprData *v15; // ebx@10
  PgSprData *v16; // eax@10
  PgSprData *v17; // eax@10
  PgSprData *v18; // eax@10
  PgSprData *v19; // eax@10
  PgSprData *v20; // ebx@10
  PgSprData *v21; // ebx@10
  PgSprData *v22; // edi@10
  PgWin *v23; // edi@10
  PgFont *v24; // ST40_4@10
  unsigned int v25; // ST3C_4@10
  unsigned int v26; // eax@10
  PgWinText *v27; // edi@10
  NiRefObjectVtbl *v28; // ebx@10
  char *v29; // eax@10
  NiSourceTexture *v30; // edi@10
  PgSprData *v31; // edi@11
  NiNode *v32; // esi@12
  int uiLeft; // [sp+34h] [bp-18h]@4
  int uiTop; // [sp+38h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+3Ch] [bp-10h]@1
  int v36; // [sp+48h] [bp-4h]@1
  NiRefObjectVtbl *pkTexturea; // [sp+54h] [bp+8h]@10

  v3 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v4 = dword_B70448;
  v36 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "NpcQuestWin.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = pkTexture;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, pkTexture);
  if ( !PgWinFrame::Create(v3, 0, 0, v7, 0, pkFrameWork, "NpcQuestWin", 0) )
  {
    v8 = spNode.m_pObject;
    v36 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    return 0;
  }
  v10 = Font::Get(0);
  v11 = ((int (__thiscall *)(PgWinFrame *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v3);
  v12 = ((int (__thiscall *)(PgWinFrame *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3);
  v13 = PgWinText::CreateWin(0, 0, v12, v11, v10, &v3->baseclass_0.baseclass_0, 0, 0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v13,
    5u);
  pkTexturea = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v14 = TextData::Get(0xA304FBEAu);
  pkTexturea[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v14);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CloseButton", &uiLeft, &uiTop, v6);
  PgSprData::Add(v15, &spNode.m_pObject->baseclass_0, "CloseButtonClick");
  PgWinCloseBut::CreateWin(uiLeft, uiTop, v15, &v3->baseclass_0.baseclass_0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "panel", &uiLeft, &uiTop, v6);
  PgWinSpr::CreateWin(uiLeft, uiTop, v16, &v3->baseclass_0.baseclass_0, 0, 0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "line", &uiLeft, &uiTop, v6);
  PgWinSpr::CreateWin(uiLeft, uiTop, v17, &v3->baseclass_0.baseclass_0, 0, 0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "title1", &uiLeft, &uiTop, v6);
  PgWinSpr::CreateWin(uiLeft, uiTop, v18, &v3->baseclass_0.baseclass_0, 0, 0);
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "title2", &uiLeft, &uiTop, v6);
  PgWinSpr::CreateWin(uiLeft, uiTop, v19, &v3->baseclass_0.baseclass_0, 0, 0);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "tab1", &uiLeft, &uiTop, v6);
  PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "tab1On");
  PgWinBut::CreateWin(uiLeft, uiTop, v20, &v3->baseclass_0.baseclass_0, 0, 0, 0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "tab2", &uiLeft, &uiTop, v6);
  PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "tab2On");
  PgWinBut::CreateWin(uiLeft, uiTop, v21, &v3->baseclass_0.baseclass_0, 1u, 0, 0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "button1", &uiLeft, &uiTop, v6);
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "button1Click");
  v23 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v22, &v3->baseclass_0.baseclass_0, 2u, 0, 0);
  v24 = Font::Get(0);
  v25 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v23);
  v26 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v23);
  v27 = PgWinText::CreateWin(0, 1, v26, v25, v24, v23, 0, 0);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    5u);
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData::Get(0x9AE7FBF4u);
  v28[118].__vecDelDtor((NiRefObject *)v27, (unsigned int)v29);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v27,
    0);
  v30 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v30);
    PgSprData::Add(v31, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v31, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft, uiTop, v31, &v3->baseclass_0.baseclass_0, 3u, 0, 0);
  }
  ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  v32 = spNode.m_pObject;
  v36 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v32 )
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00605830) --------------------------------------------------------
NpcQuestWin *__cdecl NpcQuestWin::CreateWin(NiSourceTexture *pkTexture, PgFrameWork *pkFrameWork)
{
  void *v2; // eax@1
  void *v3; // esi@1
  PgWin *v4; // edi@8
  NpcQuestWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x158u);
  v3 = v2;
  result.m_pObject = (PgWin *)v2;
  v7 = 0;
  if ( v2 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v2);
    *(_DWORD *)v3 = &NpcQuestWin::_vftable_;
    *((_DWORD *)v3 + 58) = &NpcQuestWin::_vftable_;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)v3 + 1);
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, NiSourceTexture *, PgFrameWork *))(*(_DWORD *)v3 + 540))(
                          v3,
                          pkTexture,
                          pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = (NpcQuestWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v3 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}
// 9BE9D0: using guessed type int (__stdcall *NpcQuestWin___vftable_)(int uiFlags);
// 9BE9EC: using guessed type int (__thiscall *NpcQuestWin___vftable_)(void *p, char);

//----- (00605970) --------------------------------------------------------
void *__thiscall NpcQuestWin::_vector_deleting_destructor_(NpcQuestWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NpcQuestWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&NpcQuestWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BE9D0: using guessed type int (__stdcall *NpcQuestWin___vftable_)(int uiFlags);
// 9BE9EC: using guessed type int (__thiscall *NpcQuestWin___vftable_)(void *p, char);

//----- (006059E0) --------------------------------------------------------
void __thiscall QuestFinishWin::UpdateMeWin(QuestFinishWin *this, float fCurTime)
{
  QuestFinishWin *v2; // esi@1
  SpEffect *v3; // ecx@1
  int v4; // edx@3
  int v5; // edi@6
  int v6; // esi@7

  v2 = this;
  v3 = this->m_apkEffect;
  if ( v3 )
    SpEffect::Update(v3, fCurTime);
  v4 = (signed int)((char *)v2->m_kmapQuestID.baseclass_0._Mylast
                  - *(_DWORD *)&v2->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0]) >> 1;
  if ( v4 <= 0 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  else
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  v2->m_pkBut[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkBut[8]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v5 = (int)v2->m_pkBut;
  v2->m_pkBut[9]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  if ( v4 > 0 )
  {
    v6 = v4;
    do
    {
      if ( v4 <= 10 )
        *(_WORD *)(*(_DWORD *)v5 + 28) &= 0xFFFEu;
      v5 += 4;
      --v6;
    }
    while ( v6 );
  }
}

//----- (00605AC0) --------------------------------------------------------
bool __thiscall QuestFinishWin::Create(QuestFinishWin *this, PgFrameWork *pkFrameWork)
{
  QuestFinishWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool result; // al@6
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  PgSprData *v10; // eax@12
  PgWinBut *v11; // eax@12
  NiTexturePalette *v12; // ecx@12
  PgSprData *v13; // eax@13
  PgWinSpr *v14; // eax@13
  void *v15; // eax@13
  int v16; // eax@15
  char v17; // al@18
  MaskedWin *v18; // eax@20
  PgWinBut *v19; // eax@20
  PgWinBut *v20; // eax@20
  PgSprData *v21; // eax@20
  PgWinSpr *v22; // eax@20
  NiTexturePalette *v23; // edi@20
  char *v24; // eax@22
  NiNode *v25; // esi@23
  void *v26; // edi@29
  NiObject *v27; // eax@30
  void *(__thiscall *v28)(NiRefObject *, unsigned int); // eax@32
  NiNode *v29; // esi@33
  NiNode *v30; // esi@36
  unsigned int v31; // [sp+20h] [bp-13Ch]@1
  NiPointer<NiNode> pkNiNodePtr; // [sp+30h] [bp-12Ch]@20
  NiSourceTexture *pkTexture; // [sp+34h] [bp-128h]@1
  NiTexturePalette *pkTriShape; // [sp+38h] [bp-124h]@7
  PgSprData *i; // [sp+3Ch] [bp-120h]@11
  int uiTop; // [sp+40h] [bp-11Ch]@10
  int uiLeft; // [sp+44h] [bp-118h]@10
  NiPointer<NiNode> spNode; // [sp+48h] [bp-114h]@1
  char acShapeName[256]; // [sp+4Ch] [bp-110h]@12
  unsigned int v40; // [sp+14Ch] [bp-10h]@1
  int v41; // [sp+158h] [bp-4h]@1
  int v42; // [sp+15Ch] [bp+0h]@1

  v40 = (unsigned int)&v42 ^ __security_cookie;
  v31 = (unsigned int)&v42 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v41 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
    goto LABEL_43;
  pkTriShape = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\QuestFinishWin.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, pkTriShape);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "QuestFinishWin", 0) )
  {
LABEL_43:
    v4 = spNode.m_pObject;
    v41 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  i = 0;
  pkTriShape = (NiTexturePalette *)v2->m_pkBut;
  do
  {
    acShapeName[0] = 0;
    memset(&acShapeName[1], 0, 0xFFu);
    i = (PgSprData *)((char *)i + 1);
    sprintf(acShapeName, "Quest%02d");
    v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
    v11 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v12 = pkTriShape;
    pkTriShape->baseclass_0.vfptr = (NiRefObjectVtbl *)v11;
    pkTriShape = (NiTexturePalette *)((char *)v12 + 4);
  }
  while ( (signed int)i < 10 );
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCFaceBack", &uiLeft, &uiTop, pkTexture);
  v14 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkFaceBackSpr = v14;
  ((void (__thiscall *)(PgWinSpr *, _DWORD, unsigned int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
    v14,
    0,
    v31);
  v15 = (void *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Face_Mask");
  pkTriShape = (NiTexturePalette *)v15;
  if ( v15 )
  {
    v16 = (*(int (__thiscall **)(void *))(*(_DWORD *)v15 + 4))(v15);
    if ( v16 )
    {
      while ( (NiRTTI *)v16 != &NiTriShape::m_RTTI )
      {
        v16 = *(_DWORD *)(v16 + 4);
        if ( !v16 )
          goto LABEL_18;
      }
      v17 = 1;
    }
    else
    {
LABEL_18:
      v17 = 0;
    }
    pkTriShape = (NiTexturePalette *)(v17 != 0 ? (int)pkTriShape : 0);
  }
  else
  {
    pkTriShape = 0;
  }
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Face_Mask", &uiLeft, &uiTop, pkTexture);
  v18 = MaskedWin::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          (NiTriShape *)pkTriShape,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkFacePortrait = v18;
  ((void (__thiscall *)(MaskedWin *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v18);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Face_Panel_Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "Face_Panel_Click");
  PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "Face_Panel_Over");
  v19 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, i, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  v2->m_pkQuestCheckPortraitBut = v19;
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  i = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NPCFaceNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "NPCFaceClick");
  PgSprData::Add(i, &spNode.m_pObject->baseclass_0, "NPCFaceOver");
  v20 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, i, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  v2->m_pkQuestCheckBut = v20;
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
  v22 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkSprTopWin = v22;
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v22,
    0);
  pkNiNodePtr.m_pObject = 0;
  v23 = dword_B70448;
  LOBYTE(v41) = 1;
  if ( !Folder::m_bInit )
    Folder::Init();
  v24 = Folder::Merge(&Folder::m_acMenu, "Game\\QuestFinishEffect.nif");
  PgUtil::LoadNodeNifFile(v24, &pkNiNodePtr, v23);
  if ( pkNiNodePtr.m_pObject )
  {
    v26 = operator new(0x44u);
    pkTriShape = (NiTexturePalette *)v26;
    LOBYTE(v41) = 2;
    if ( v26 )
    {
      v27 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      SpEffect::SpEffect((SpEffect *)v26, (NiNode *)v27);
    }
    else
    {
      v27 = 0;
    }
    v2->m_apkEffect = (SpEffect *)v27;
    v28 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
    LOBYTE(v41) = 1;
    ((void (__thiscall *)(QuestFinishWin *, unsigned int, unsigned int, _DWORD, _DWORD))v28)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      1.0,
      0.60000002);
    LOBYTE(v41) = 0;
    if ( pkNiNodePtr.m_pObject )
    {
      v29 = pkNiNodePtr.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v29 )
          v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
      }
    }
    v30 = spNode.m_pObject;
    v41 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v30 )
      v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
    result = 1;
  }
  else
  {
    v25 = spNode.m_pObject;
    v41 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v25 )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006060A0) --------------------------------------------------------
void __thiscall QuestFinishWin::ApplyTexture2Portrait(QuestFinishWin *this, NiTexture *pkTex, bool bUserCharFace)
{
  QuestFinishWin *v3; // esi@1

  v3 = this;
  if ( bUserCharFace == 1 )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkFaceBackSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkQuestCheckBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkFacePortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    MaskedWin::SetBaseTexture(v3->m_pkFacePortrait, pkTex);
    ((void (__stdcall *)(_DWORD))v3->m_pkQuestCheckPortraitBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    PgSpr::SetTexture(v3->m_pkQuestCheckPortraitBut->baseclass_0.m_spSpr.m_pObject, pkTex);
  }
  else
  {
    ((void (__stdcall *)(_DWORD))this->m_pkFacePortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkQuestCheckPortraitBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v3->m_pkFaceBackSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    PgSpr::SetTexture(v3->m_pkFaceBackSpr->m_spSpr.m_pObject, pkTex);
    ((void (__stdcall *)(_DWORD))v3->m_pkQuestCheckBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    PgSpr::SetTexture(v3->m_pkQuestCheckBut->baseclass_0.m_spSpr.m_pObject, pkTex);
  }
}

//----- (00606190) --------------------------------------------------------
// local variable allocation has failed!
void __thiscall QuestFinishWin::ChangeFace(QuestFinishWin *this, unsigned __int16 iEndQuestNpcID)
{
  QuestFinishWin *v2; // esi@1
  int v3; // ebx@3
  int v4; // eax@5
  int v5; // eax@6
  int v6; // eax@7
  int v7; // edi@8
  int v8; // ebx@8
  int v9; // eax@10
  int v10; // ecx@11
  char v11; // al@12
  unsigned int v12; // edi@17
  unsigned int v13; // ebx@17
  int v14; // edx@18
  NiTexture *v15; // eax@21
  NiTexture *v16; // eax@23
  NiTexture *v17; // edi@24
  unsigned int uiHairColor; // [sp+Ch] [bp-4h]@17
  char iEndQuestNpcID_3; // [sp+1Bh] [bp+Bh]@17

  v2 = this;
  SpEffect::Start(this->m_apkEffect, &this->m_pkSprTopWin->baseclass_0.baseclass_0);
  if ( v2->m_pkSprTopWin )
    SpEffect::Start(v2->m_apkEffect, &v2->m_pkSprTopWin->baseclass_0.baseclass_0);
  v3 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                          iEndQuestNpcID)
    && iEndQuestNpcID <= *(_WORD *)(v3 + 200)
    && (v4 = *(_DWORD *)(v3 + 196) + 4 * iEndQuestNpcID, *(_DWORD *)v4)
    && (v5 = *(_DWORD *)v4) != 0
    && (v6 = *(_WORD *)(v5 + 174), (_WORD)v6) )
  {
    v7 = ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable;
    v8 = v6;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable,
                            v6) )
    {
      if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) )
      {
        v9 = *(_DWORD *)(v7 + 196) + 4 * v8;
        if ( *(_DWORD *)v9 )
        {
          v10 = *(_DWORD *)v9;
          if ( *(_DWORD *)v9 )
          {
            v11 = 64;
            switch ( *(_DWORD *)(v10 + 2) )
            {
              case 0:
                v11 = 1;
                break;
              case 1:
                v11 = 6;
                break;
              case 2:
                v11 = 11;
                break;
              case 3:
                v11 = 16;
                break;
              default:
                break;
            }
            v12 = *(_BYTE *)(v10 + 8);
            v13 = *(_BYTE *)(v10 + 9);
            uiHairColor = *(_BYTE *)(v10 + 10);
            iEndQuestNpcID_3 = *(_BYTE *)(v10 + 6);
            if ( v11 != 64 )
              goto LABEL_21;
            v14 = *(_DWORD *)(v10 + 2);
            if ( v14 == 4 )
            {
              v11 = Char::GetClass(g_pkMainChar);
              if ( g_pkMainChar != (Char *)-776 )
              {
                v12 = g_pkMainChar->m_kCharShape.m_byFace;
                v13 = g_pkMainChar->m_kCharShape.m_byHairType;
                uiHairColor = g_pkMainChar->m_kCharShape.m_byHairColor;
                iEndQuestNpcID_3 = g_pkMainChar->m_kCharShape.m_byGender;
              }
              goto LABEL_21;
            }
            if ( v14 != 5 )
            {
LABEL_21:
              v15 = PortraitTextureBuffer::GetOtherCharPortrait(
                      (unsigned __int8)v11,
                      (unsigned __int8)iEndQuestNpcID_3,
                      v12,
                      v13,
                      uiHairColor,
                      0xFFFFu,
                      5u,
                      0);
              QuestFinishWin::ApplyTexture2Portrait(v2, v15, 1);
              return;
            }
            v16 = PortraitTextureBuffer::GetMobPortrait(*(_WORD *)(v10 + 6));
            QuestFinishWin::ApplyTexture2Portrait(v2, v16, 0);
          }
        }
      }
    }
  }
  else
  {
    v17 = PortraitTextureBuffer::GetMobPortrait(iEndQuestNpcID);
    ((void (__stdcall *)(_DWORD))v2->m_pkFacePortrait->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkQuestCheckPortraitBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(signed int))v2->m_pkFaceBackSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    PgSpr::SetTexture(v2->m_pkFaceBackSpr->m_spSpr.m_pObject, v17);
    ((void (__stdcall *)(signed int))v2->m_pkQuestCheckBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    PgSpr::SetTexture(v2->m_pkQuestCheckBut->baseclass_0.m_spSpr.m_pObject, v17);
  }
}
// 606190: variables would overlap: ST38_2/2 and ST38_3/3
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;
// A97F60: using guessed type int ITableBase_CharNPC_ViewInfo_NPCViewInfoTab___ms_pkTable;

//----- (006063D0) --------------------------------------------------------
void __thiscall QuestFinishWin::QuestFinishWin(QuestFinishWin *this)
{
  QuestFinishWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestFinishWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestFinishWin::_vftable_;
  *(_DWORD *)&v1->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kmapQuestID.baseclass_0._Mylast = 0;
  v1->m_kmapQuestID.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_kmapQuestIDClicked.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kmapQuestIDClicked.baseclass_0._Mylast = 0;
  v1->m_kmapQuestIDClicked.baseclass_0._Myend = 0;
  v1->m_pkQuestAutoFinishBut = 0;
  v1->m_pkQuestCheckBut = 0;
  v1->m_pkFaceBackSpr = 0;
  v1->m_pkFacePortrait = 0;
  v1->m_pkQuestCheckPortraitBut = 0;
  v1->m_apkEffect = 0;
  v1->m_pkSprTopWin = 0;
  v1->m_pkBut[0] = 0;
  v1->m_pkBut[1] = 0;
  v1->m_pkBut[2] = 0;
  v1->m_pkBut[3] = 0;
  v1->m_pkBut[4] = 0;
  v1->m_pkBut[5] = 0;
  v1->m_pkBut[6] = 0;
  v1->m_pkBut[7] = 0;
  v1->m_pkBut[8] = 0;
  v1->m_pkBut[9] = 0;
}
// 9BECF0: using guessed type int (__stdcall *QuestFinishWin___vftable_)(int uiFlags);
// 9BED0C: using guessed type int (__thiscall *QuestFinishWin___vftable_)(void *p, char);

//----- (00606480) --------------------------------------------------------
void __thiscall QuestFinishWin::_QuestFinishWin(QuestFinishWin *this)
{
  QuestFinishWin *v1; // esi@1
  unsigned __int16 *v2; // ebx@1
  SpEffect *v3; // edi@1
  NiNode *v4; // ebx@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestFinishWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestFinishWin::_vftable_;
  v2 = 0;
  v3 = this->m_apkEffect;
  if ( v3 )
  {
    NsEffect::_NsEffect(&v3->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v3->m_kMarkCheck);
    v4 = v3->m_spEffect.m_pObject;
    if ( v3->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    operator delete(v3);
    v2 = 0;
  }
  if ( *(unsigned __int16 **)&v1->m_kmapQuestIDClicked.baseclass_0.___u0.baseclass_0.dummy[0] != v2 )
    operator delete(*(void **)&v1->m_kmapQuestIDClicked.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kmapQuestIDClicked.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  v1->m_kmapQuestIDClicked.baseclass_0._Mylast = v2;
  v1->m_kmapQuestIDClicked.baseclass_0._Myend = v2;
  if ( *(unsigned __int16 **)&v1->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0] != v2 )
    operator delete(*(void **)&v1->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  v1->m_kmapQuestID.baseclass_0._Mylast = v2;
  v1->m_kmapQuestID.baseclass_0._Myend = v2;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9BECF0: using guessed type int (__stdcall *QuestFinishWin___vftable_)(int uiFlags);
// 9BED0C: using guessed type int (__thiscall *QuestFinishWin___vftable_)(void *p, char);

//----- (00606590) --------------------------------------------------------
QuestFinishWin *__cdecl QuestFinishWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  QuestFinishWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C4u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    QuestFinishWin::QuestFinishWin((QuestFinishWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (QuestFinishWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006066C0) --------------------------------------------------------
void __thiscall QuestFinishWin::OnQuestCheckClick(QuestFinishWin *this)
{
  QuestFinishWin *v1; // esi@1
  unsigned __int16 *v2; // ecx@2
  unsigned __int16 *v3; // eax@2
  unsigned __int16 *i; // edi@2
  int v5; // ebx@4
  unsigned __int16 *v6; // ecx@5
  unsigned __int16 *j; // eax@5
  unsigned __int16 v8; // di@7
  CQuest *v9; // eax@7
  QUEST_DATA *v10; // eax@7

  v1 = this;
  if ( (signed int)((unsigned int)((char *)this->m_kmapQuestID.baseclass_0._Mylast
                                 - *(_DWORD *)&this->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFE) > 0 )
  {
    v2 = this->m_kmapQuestID.baseclass_0._Mylast;
    v3 = *(unsigned __int16 **)&v1->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0];
    for ( i = 0; v3 != v2; ++v3 )
      i = v3;
    v5 = *i;
    memmove((char *)i, (char *)i + 2, 2 * (v2 - (i + 1)));
    --v1->m_kmapQuestID.baseclass_0._Mylast;
    GameFrameWork::OpenQuestWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v5, 1);
    v1->m_iSelectedID = v5;
    if ( (signed int)((unsigned int)((char *)v1->m_kmapQuestID.baseclass_0._Mylast
                                   - *(_DWORD *)&v1->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFE) > 0 )
    {
      v6 = v1->m_kmapQuestID.baseclass_0._Mylast;
      for ( j = *(unsigned __int16 **)&v1->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0]; j != v6; ++j )
        i = j;
      v8 = *i;
      v9 = QuestDataMgr::GetQuest();
      v10 = CQuestData::GetQuestData(v9->m_pQuestData, v8);
      QuestFinishWin::ChangeFace(v1, v10->End.NPCMobList[0].NPCMobID);
    }
  }
}

//----- (00606780) --------------------------------------------------------
void __thiscall QuestFinishWin::OnCommand(QuestFinishWin *this, unsigned int wParam, int lParam)
{
  if ( wParam == 10 )
    QuestFinishWin::OnQuestCheckClick(this);
}

//----- (006067A0) --------------------------------------------------------
void __thiscall QuestFinishWin::UpdateQuest(QuestFinishWin *this)
{
  Tutorial *v1; // eax@1
  unsigned int v2; // esi@1
  QuestFinishWin *v3; // edi@1
  void *v4; // eax@2
  CQuest *v5; // eax@7
  CQuestData *v6; // ebx@7
  QUEST_DATA *v7; // eax@10
  unsigned __int16 *v8; // ebx@10
  int v9; // esi@12
  unsigned __int16 *j; // edi@12
  unsigned __int16 *v11; // eax@17
  unsigned __int16 *v12; // ecx@17
  int v13; // esi@17
  char v14; // dl@17
  unsigned __int16 *v15; // eax@22
  int v16; // edx@23
  unsigned __int16 *v17; // ecx@24
  int v18; // edi@24
  int v19; // eax@25
  int v20; // eax@26
  int v21; // ecx@26
  unsigned int v22; // ecx@28
  int v23; // eax@33
  int v24; // edi@33
  unsigned __int16 *v25; // ecx@35
  int v26; // eax@36
  int v27; // eax@37
  int v28; // ecx@37
  unsigned int v29; // ecx@39
  unsigned __int16 *v30; // eax@44
  unsigned __int16 *v31; // eax@46
  unsigned int v32; // edx@47
  unsigned __int16 *v33; // ecx@48
  int v34; // ebx@48
  int v35; // eax@49
  int v36; // eax@50
  int v37; // ecx@50
  unsigned int v38; // ecx@52
  unsigned __int16 *v39; // eax@57
  unsigned __int16 *v40; // ecx@59
  int v41; // edx@60
  int v42; // eax@60
  int v43; // eax@61
  int v44; // ecx@61
  unsigned int v45; // ecx@63
  unsigned __int16 *v46; // eax@68
  int v47; // [sp+0h] [bp-4Ch]@10
  QUEST_DATA *lpQuest; // [sp+4h] [bp-48h]@10
  unsigned __int16 iEndQuestNpcID; // [sp+8h] [bp-44h]@0
  unsigned int i; // [sp+Ch] [bp-40h]@7
  CQuest *pQuest; // [sp+10h] [bp-3Ch]@7
  CQuestData *pQData; // [sp+14h] [bp-38h]@7
  QuestFinishWin *v53; // [sp+18h] [bp-34h]@1
  char bFind; // [sp+1Fh] [bp-2Dh]@7

  v1 = Singleton<Tutorial>::m_pInstance;
  v2 = 0;
  v3 = this;
  v53 = this;
  if ( !Singleton<Tutorial>::m_pInstance )
  {
    v4 = operator new(0xB4u);
    iEndQuestNpcID = (unsigned __int16)v4;
    if ( v4 )
      Tutorial::Tutorial(v1);
    else
      v1 = 0;
    Singleton<Tutorial>::m_pInstance = v1;
  }
  if ( !v1->m_bEnable )
  {
    v5 = QuestDataMgr::GetQuest();
    v6 = v5->m_pQuestData;
    pQuest = v5;
    pQData = v5->m_pQuestData;
    bFind = 0;
    i = 0;
    if ( CQuestData::GetNumOfQuestData(v6) > 0u )
    {
      while ( 1 )
      {
        v7 = CQuestData::GetQuestDataByIndex(v6, v2);
        v8 = &v7->ID;
        lpQuest = v7;
        v47 = (int)&v7->ID;
        if ( CQuest::IsDoingQuest(pQuest, v7->ID) )
        {
          if ( CQuest::GetNewQuestStatus(pQuest, *v8) == 8 )
          {
            v11 = *(unsigned __int16 **)&v3->m_kmapQuestIDClicked.baseclass_0.___u0.baseclass_0.dummy[0];
            v12 = v3->m_kmapQuestIDClicked.baseclass_0._Mylast;
            v13 = (int)&v3->m_kmapQuestIDClicked;
            v14 = 0;
            if ( v11 == v12 )
              goto LABEL_79;
            do
            {
              if ( *v11 == *v8 )
                v14 = 1;
              ++v11;
            }
            while ( v11 != v12 );
            if ( !v14 )
            {
LABEL_79:
              v15 = v3->m_kmapQuestIDClicked.baseclass_0._Mylast;
              if ( v8 >= v15 || (v16 = *(_DWORD *)v13, *(_DWORD *)v13 > (unsigned int)v8) )
              {
                v25 = v3->m_kmapQuestIDClicked.baseclass_0._Myend;
                if ( v15 == v25 )
                {
                  v26 = (signed int)((char *)v15 - *(_DWORD *)v13) >> 1;
                  if ( (unsigned int)v26 > 0x7FFFFFFE )
                    goto LABEL_76;
                  v27 = v26 + 1;
                  v28 = (signed int)((char *)v25 - *(_DWORD *)v13) >> 1;
                  if ( v27 > (unsigned int)v28 )
                  {
                    if ( 2147483647 - ((unsigned int)v28 >> 1) >= v28 )
                      v29 = ((unsigned int)v28 >> 1) + v28;
                    else
                      v29 = 0;
                    if ( v29 < v27 )
                      v29 = v27;
                    std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(
                      (std::vector<unsigned short,std::allocator<unsigned short> > *)v13,
                      v29);
                  }
                }
                v30 = v3->m_kmapQuestIDClicked.baseclass_0._Mylast;
                if ( v30 )
                  *v30 = *v8;
              }
              else
              {
                v17 = v3->m_kmapQuestIDClicked.baseclass_0._Myend;
                v18 = (signed int)((char *)v8 - v16) >> 1;
                if ( v15 == v17 )
                {
                  v19 = (signed int)((char *)v15 - v16) >> 1;
                  if ( (unsigned int)v19 > 0x7FFFFFFE )
                    goto LABEL_76;
                  v20 = v19 + 1;
                  v21 = (signed int)((char *)v17 - v16) >> 1;
                  if ( v20 > (unsigned int)v21 )
                  {
                    if ( 2147483647 - ((unsigned int)v21 >> 1) >= v21 )
                      v22 = ((unsigned int)v21 >> 1) + v21;
                    else
                      v22 = 0;
                    if ( v22 < v20 )
                      v22 = v20;
                    std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(
                      (std::vector<unsigned short,std::allocator<unsigned short> > *)v13,
                      v22);
                    v8 = (unsigned __int16 *)v47;
                  }
                }
                v23 = *(_DWORD *)(v13 + 4);
                v24 = *(_DWORD *)v13 + 2 * v18;
                if ( v23 )
                  *(_WORD *)v23 = *(_WORD *)v24;
              }
              *(_DWORD *)(v13 + 4) += 2;
              v31 = v53->m_kmapQuestID.baseclass_0._Mylast;
              if ( v8 >= v31
                || (v32 = *(_DWORD *)&v53->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0], v32 > (unsigned int)v8) )
              {
                v40 = v53->m_kmapQuestID.baseclass_0._Myend;
                if ( v31 == v40 )
                {
                  v41 = *(_DWORD *)&v53->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0];
                  v42 = (signed int)((char *)v31 - v41) >> 1;
                  if ( (unsigned int)v42 > 0x7FFFFFFE )
LABEL_76:
                    std::_Xlength_error("vector<T> too long");
                  v43 = v42 + 1;
                  v44 = (signed int)((char *)v40 - v41) >> 1;
                  if ( v43 > (unsigned int)v44 )
                  {
                    if ( 2147483647 - ((unsigned int)v44 >> 1) >= v44 )
                      v45 = ((unsigned int)v44 >> 1) + v44;
                    else
                      v45 = 0;
                    if ( v45 < v43 )
                      v45 = v43;
                    std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(&v53->m_kmapQuestID, v45);
                  }
                }
                v46 = v53->m_kmapQuestID.baseclass_0._Mylast;
                if ( v46 )
                  *v46 = *v8;
              }
              else
              {
                v33 = v53->m_kmapQuestID.baseclass_0._Myend;
                v34 = (signed int)((char *)v8 - v32) >> 1;
                if ( v31 == v33 )
                {
                  v35 = (signed int)((char *)v31 - v32) >> 1;
                  if ( (unsigned int)v35 > 0x7FFFFFFE )
                    goto LABEL_76;
                  v36 = v35 + 1;
                  v37 = (signed int)((char *)v33 - v32) >> 1;
                  if ( v36 > (unsigned int)v37 )
                  {
                    if ( 2147483647 - ((unsigned int)v37 >> 1) >= v37 )
                      v38 = ((unsigned int)v37 >> 1) + v37;
                    else
                      v38 = 0;
                    if ( v38 < v36 )
                      v38 = v36;
                    std::vector<unsigned_short_std::allocator<unsigned_short>>::reserve(&v53->m_kmapQuestID, v38);
                  }
                }
                v39 = v53->m_kmapQuestID.baseclass_0._Mylast;
                if ( v39 )
                  *v39 = *(_WORD *)(*(_DWORD *)&v53->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0] + 2 * v34);
              }
              ++v53->m_kmapQuestID.baseclass_0._Mylast;
              iEndQuestNpcID = lpQuest->End.NPCMobList[0].NPCMobID;
              bFind = 1;
            }
          }
          else
          {
            v9 = *(_DWORD *)&v3->m_kmapQuestID.baseclass_0.___u0.baseclass_0.dummy[0];
            for ( j = v3->m_kmapQuestID.baseclass_0._Mylast; (unsigned __int16 *)v9 != j; v9 += 2 )
            {
              if ( *(_WORD *)v9 == *v8 )
              {
                memmove(
                  (char *)v9,
                  (char *)(v9 + 2),
                  2 * ((signed int)((char *)v53->m_kmapQuestID.baseclass_0._Mylast + -v9 - 2) >> 1));
                --v53->m_kmapQuestID.baseclass_0._Mylast;
              }
            }
          }
          v3 = v53;
          v2 = i;
        }
        ++v2;
        i = v2;
        if ( (signed int)v2 >= CQuestData::GetNumOfQuestData(pQData) )
          break;
        v6 = pQData;
      }
      if ( bFind )
        QuestFinishWin::ChangeFace(v3, iEndQuestNpcID);
    }
  }
}

//----- (00606B30) --------------------------------------------------------
void *__thiscall QuestFinishWin::_scalar_deleting_destructor_(QuestFinishWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  QuestFinishWin::_QuestFinishWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00606B60) --------------------------------------------------------
void __thiscall QuestNewsWin::OnInvLClick(QuestNewsWin *this, unsigned int uiInvIndex)
{
  PgFrameWork *v2; // eax@1

  this->m_bClicked = 1;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    GameFrameWork::OpenQuestWin((GameFrameWork *)v2, 1, 2);
}

//----- (00606BC0) --------------------------------------------------------
void __thiscall QuestNewsWin::OnClose(QuestNewsWin *this)
{
  QuestNewsWin *v1; // esi@1

  v1 = this;
  PgWin::OnClose(&this->baseclass_0.baseclass_0.baseclass_0);
  v1->m_bClicked = 0;
}

//----- (00606BE0) --------------------------------------------------------
void __thiscall QuestNewsWin::OnCommand(QuestNewsWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@2

  if ( wParam == 10 )
  {
    this->m_bClicked = 1;
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
      GameFrameWork::OpenQuestWin((GameFrameWork *)v3, 1, 2);
  }
}

//----- (00606C20) --------------------------------------------------------
int __thiscall QuestNewsWin::CheckNewQuest(QuestNewsWin *this, char nPlayerLevel)
{
  CQuest *v2; // eax@1
  CQuestData *v3; // ebx@1
  unsigned int v4; // edi@1
  QUEST_DATA *v5; // esi@2
  PLAYER_QUEST_STATUS v6; // eax@2
  int result; // eax@7
  CQuest *pQuest; // [sp+Ch] [bp-4h]@1

  v2 = QuestDataMgr::GetQuest();
  v3 = v2->m_pQuestData;
  pQuest = v2;
  v4 = 0;
  if ( CQuestData::GetNumOfQuestData(v2->m_pQuestData) <= 0u )
  {
LABEL_7:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      v5 = CQuestData::GetQuestDataByIndex(v3, v4);
      v6 = CQuest::GetNewQuestStatus(pQuest, v5->ID);
      if ( v5->Start.bItem != 1 )
      {
        if ( v5->Start.bIsWaitListView && v6 == 5 && (unsigned __int8)nPlayerLevel - v5->Start.LevelMin <= 150 )
          break;
      }
      ++v4;
      if ( (signed int)v4 >= CQuestData::GetNumOfQuestData(v3) )
        goto LABEL_7;
    }
    result = 1;
  }
  return result;
}

//----- (00606CB0) --------------------------------------------------------
void __thiscall QuestNewsWin::OnShowWin(QuestNewsWin *this)
{
  QuestNewsWin *v1; // esi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  v1->m_bShowWinTimer = 1;
  CNSTimer_Interval::ReSet(&v1->m_kRandomTimerInterval, Timer::ms_fCurTime);
  v1->m_kRandomTimerInterval.m_fCheckTime = 1.5;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00606CF0) --------------------------------------------------------
void __thiscall QuestNewsWin::CreateFlexMsgBox(QuestNewsWin *this)
{
  QuestNewsWin *v1; // edi@1
  NiSourceTexture *v2; // eax@1
  FlexMsgBox *v3; // esi@1
  int v4; // eax@2
  char *v5; // eax@4
  NiRefObjectVtbl *v6; // ebx@6
  unsigned int v7; // eax@6
  NiRefObjectVtbl *v8; // ebx@6
  int v9; // eax@6
  unsigned int v10; // ebx@6
  int v11; // ST1C_4@6
  int v12; // esi@6
  FlexMsgBox *v13; // ecx@7
  NiRefObjectVtbl *v14; // ebx@7
  int v15; // eax@7

  v1 = this;
  v2 = MenuTexMgr::GetTexture(1u);
  v3 = FlexMsgBox::CreateWin(v2, 7u, 7u, 0);
  if ( v1 )
    v4 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  else
    v4 = 0;
  v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    v4);
  FlexMsgBox::SetVerticalGap(v3, 5);
  v5 = (char *)&v1->m_Text;
  if ( v1->m_Text.baseclass_0._Myres >= 0x10 )
    v5 = *(char **)v5;
  FlexMsgBox::SetText(v3, v5);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v6 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3);
  v6[43].__vecDelDtor((NiRefObject *)v3, -(v7 >> 1));
  v8 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v1);
  v8[44].__vecDelDtor((NiRefObject *)v3, v9);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1,
    v3,
    0);
  v1->m_pkFlexMsgBox = v3;
  v10 = (unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3) >> 1;
  v11 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v1)
      - v10;
  v12 = v11
      + ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v3);
  if ( PgWin::ms_uiScreenWidth < v12 )
  {
    v13 = v1->m_pkFlexMsgBox;
    v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v15 = ((int (*)(void))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v14[43].__vecDelDtor((NiRefObject *)v1->m_pkFlexMsgBox, PgWin::ms_uiScreenWidth - v12 + v15);
  }
}

//----- (00606E10) --------------------------------------------------------
void __thiscall QuestNewsWin::DirectMessage(QuestNewsWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  QuestNewsWin *v4; // esi@1
  unsigned int v5; // eax@1
  IDirectMessenger *v6; // eax@2
  bool v7; // cf@7
  int v8; // eax@7

  v4 = this;
  v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_uiMessageNum;
  if ( v5 )
    v6 = (IDirectMessenger *)(v5 + 232);
  else
    v6 = 0;
  if ( pkFrom == v6 )
  {
    if ( iMsgTag == 27 )
    {
      PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)((char *)this - 232));
      if ( LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_fRadius) )
      {
        v7 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr < (IDirectMessengerVtbl *)0x10;
        v8 = (int)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kEffectList.baseclass_0.baseclass_0.m_kAllocator;
        LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kBound.m_fRadius) = 0;
        if ( !v7 )
          v8 = *(_DWORD *)v8;
        *(_BYTE *)v8 = 0;
      }
    }
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_uiMessageNum = 0;
  }
}

//----- (00606E80) --------------------------------------------------------
void __thiscall QuestNewsWin::UpdateMeWin(QuestNewsWin *this, float fCurTime)
{
  QuestNewsWin *v2; // edi@1
  SpEffect *v3; // ecx@2
  NiNode *v4; // eax@2
  CQuest *v5; // eax@8
  void *v6; // esi@8
  QUEST_DATA *v7; // eax@11
  QUEST_DATA *v8; // esi@11
  PLAYER_QUEST_STATUS v9; // eax@11
  bool v10; // zf@11
  int v11; // ecx@11
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v12; // eax@13
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v13; // eax@16
  NiNode *v14; // eax@26
  char v15; // [sp+4h] [bp-30h]@16
  SoundIndex rkIndex; // [sp+Ch] [bp-28h]@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+14h] [bp-20h]@13
  CQuest *pQuest; // [sp+18h] [bp-1Ch]@8
  CQuestData *pQData; // [sp+1Ch] [bp-18h]@8
  PLAYER_QUEST_STATUS nStatus; // [sp+20h] [bp-14h]@11
  int Qlv; // [sp+24h] [bp-10h]@11
  unsigned int Userlv; // [sp+28h] [bp-Ch]@8
  unsigned int i; // [sp+2Ch] [bp-8h]@8
  char bResult; // [sp+33h] [bp-1h]@8

  v2 = this;
  if ( this->m_bEffectStart )
  {
    v3 = this->m_apkBlinkEffect;
    v2->m_bEffectStart = 0;
    SpEffect::Start(v3, &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    v2->m_apkBlinkEffect->m_bLoop = 1;
    v4 = v2->m_apkBlinkEffect->m_spEffect.m_pObject;
    if ( v4 )
      v4->baseclass_0.m_uFlags &= 0xFFFEu;
    rkIndex.m_dwIndex = 2;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
  }
  if ( v2->m_bShowWinTimer )
  {
    v2->m_pkQuestIconBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v2->m_bShowWinTimer = 0;
    v2->m_bEffectStart = 1;
  }
  if ( (unsigned __int8)((int (__thiscall *)(QuestNewsWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    v5 = QuestDataMgr::GetQuest();
    v6 = v5->m_pQuestData;
    pQuest = v5;
    pQData = (CQuestData *)v6;
    bResult = 0;
    Userlv = User::Lv(&g_kUser);
    i = 0;
    if ( CQuestData::GetNumOfQuestData((CQuestData *)v6) <= 0u )
      goto LABEL_32;
    while ( 1 )
    {
      v7 = CQuestData::GetQuestDataByIndex((CQuestData *)v6, i);
      v8 = v7;
      v9 = CQuest::GetNewQuestStatus(pQuest, v7->ID);
      v10 = v8->Start.bItem == 1;
      v11 = v8->Start.LevelMin;
      nStatus = v9;
      Qlv = v11;
      if ( !v10 && v8->Start.bIsWaitListView )
      {
        v12 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::find(&v2->m_setAbleQuest.baseclass_0, &result, &v8->ID)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        if ( nStatus != 5 || (signed int)(Userlv - Qlv) > 150 )
        {
          if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v12 != v2->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
            std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
              &v2->m_setAbleQuest.baseclass_0,
              (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&rkIndex.m_acFilename,
              v12);
        }
        else
        {
          if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v12 == v2->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
          {
            v13 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
                    &v2->m_setAbleQuest.baseclass_0.baseclass_0,
                    &v8->ID);
            std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
              &v2->m_setAbleQuest.baseclass_0,
              (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *)&v15,
              v13,
              0);
            v2->m_bClicked = 0;
            v2->m_bShowWinTimer = 1;
          }
        }
        if ( (signed int)(Userlv - Qlv) <= 150 && ((Userlv - Qlv) & 0x80000000u) == 0 && nStatus == 5 )
          bResult = 1;
      }
      ++i;
      if ( (signed int)i >= CQuestData::GetNumOfQuestData(pQData) )
        break;
      v6 = pQData;
    }
    if ( !bResult )
LABEL_32:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->baseclass_0.baseclass_0.baseclass_0);
    v14 = v2->m_apkBlinkEffect->m_spEffect.m_pObject;
    if ( v14 )
    {
      if ( v2->m_bClicked )
        v14->baseclass_0.m_uFlags |= 1u;
      else
        v14->baseclass_0.m_uFlags &= 0xFFFEu;
    }
  }
}

//----- (00607090) --------------------------------------------------------
int __thiscall QuestNewsWin::QuestPlayer_LevelChange(QuestNewsWin *this, char nPlayerLevel)
{
  unsigned int v2; // edi@1
  CQuest *v3; // eax@1
  void *v4; // esi@1
  QUEST_DATA *v5; // ebx@2
  const unsigned __int16 *v6; // esi@2
  PLAYER_QUEST_STATUS v7; // eax@2
  bool v8; // zf@2
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v9; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *v10; // eax@4
  signed int v11; // ecx@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v12; // eax@4
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v13; // eax@7
  QuestNewsWin *v14; // eax@7
  char v15; // bl@17
  char *v16; // eax@24
  char *v17; // eax@24
  char v19; // [sp+Ch] [bp-38h]@7
  char v20; // [sp+14h] [bp-30h]@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+18h] [bp-2Ch]@4
  CQuestData *pQData; // [sp+1Ch] [bp-28h]@1
  CQuest *pQuest; // [sp+20h] [bp-24h]@1
  int bResult; // [sp+24h] [bp-20h]@1
  unsigned int i; // [sp+28h] [bp-1Ch]@1
  int Qlv; // [sp+2Ch] [bp-18h]@2
  int nNormalQuest; // [sp+30h] [bp-14h]@1
  int nEpicQuest; // [sp+34h] [bp-10h]@1
  int nStatus; // [sp+38h] [bp-Ch]@2
  QuestNewsWin *v30; // [sp+3Ch] [bp-8h]@1
  unsigned __int8 bNewAddQuest; // [sp+43h] [bp-1h]@1

  v2 = 0;
  v30 = this;
  bResult = 0;
  v3 = QuestDataMgr::GetQuest();
  v4 = v3->m_pQuestData;
  pQuest = v3;
  pQData = (CQuestData *)v4;
  bNewAddQuest = 0;
  nNormalQuest = 0;
  nEpicQuest = 0;
  i = 0;
  if ( CQuestData::GetNumOfQuestData((CQuestData *)v4) <= 0u )
    return 0;
  do
  {
    v5 = CQuestData::GetQuestDataByIndex((CQuestData *)v4, v2);
    v6 = &v5->ID;
    v7 = CQuest::GetNewQuestStatus(pQuest, v5->ID);
    v8 = v5->Start.bItem == 1;
    nStatus = v7;
    Qlv = v5->Start.LevelMin;
    if ( v8 || !v5->Start.bIsWaitListView )
      goto LABEL_22;
    v9 = (std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *)&v30->m_setAbleQuest;
    v10 = std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::find(
            &v30->m_setAbleQuest.baseclass_0,
            &result,
            v6);
    v11 = nStatus;
    v12 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v10->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( nStatus != 5 || (unsigned __int8)nPlayerLevel - Qlv > 150 )
    {
      if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v12 != v30->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
          v9,
          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v20,
          v12);
        goto LABEL_10;
      }
    }
    else
    {
      if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v12 == v30->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        v13 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
                &v9->baseclass_0,
                (unsigned __int16 *)v6);
        std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
          v9,
          (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *)&v19,
          v13,
          0);
        v14 = v30;
        v30->m_bClicked = 0;
        v14->m_bShowWinTimer = 1;
        bNewAddQuest = 1;
LABEL_10:
        v11 = nStatus;
        goto LABEL_11;
      }
    }
LABEL_11:
    if ( (unsigned __int8)nPlayerLevel - Qlv > 150 )
      goto LABEL_22;
    if ( v11 == 5 )
    {
      bResult = 1;
    }
    else
    {
      if ( v11 < 4 || v11 > 5 && v11 != 20 )
        goto LABEL_22;
    }
    v15 = v5->Type;
    if ( v15 == 1 || (unsigned __int8)v15 > 5u && (unsigned __int8)v15 <= 7u )
      ++nEpicQuest;
    else
      ++nNormalQuest;
LABEL_22:
    v4 = pQData;
    ++i;
    v2 = i;
  }
  while ( (signed int)i < CQuestData::GetNumOfQuestData(pQData) );
  if ( bResult )
  {
    v16 = TextData2::Get(0xF9461F51u);
    v17 = fs(v16);
    PgWin::SetToolTipWinText(&v30->m_pkQuestIconBut->baseclass_0.baseclass_0, v17);
  }
  return bNewAddQuest;
}

//----- (00607240) --------------------------------------------------------
void __thiscall QuestNewsWin::_QuestNewsWin(QuestNewsWin *this)
{
  QuestNewsWin *v1; // esi@1
  SpEffect *v2; // edi@1
  NiNode *v3; // ebx@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v4; // ST08_4@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v5; // ST04_4@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+0h] [bp-18h]@7
  SpEffect *v7; // [sp+4h] [bp-14h]@2
  QuestNewsWin *v8; // [sp+8h] [bp-10h]@1
  int v9; // [sp+14h] [bp-4h]@1

  v1 = this;
  v8 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestNewsWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestNewsWin::_vftable_;
  v9 = 0;
  v2 = this->m_apkBlinkEffect;
  if ( v2 )
  {
    v7 = this->m_apkBlinkEffect;
    NsEffect::_NsEffect(&v2->m_kEffect);
    LOBYTE(v9) = 3;
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v2->m_kMarkCheck);
    v3 = v2->m_spEffect.m_pObject;
    LOBYTE(v9) = 2;
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    operator delete(v2);
  }
  v7 = (SpEffect *)&v1->m_setAbleQuest;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v9) = 5;
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
    &v1->m_setAbleQuest.baseclass_0,
    &result,
    v5,
    v4);
  operator delete(v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead);
  if ( v1->m_Text.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_Text.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_Text.baseclass_0._Myres = 15;
  v1->m_Text.baseclass_0._Mysize = 0;
  v1->m_Text.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v9 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9BEF80: using guessed type int (__stdcall *QuestNewsWin___vftable_)(int uiFlags);
// 9BEF9C: using guessed type int (__thiscall *QuestNewsWin___vftable_)(void *p, char);

//----- (00607360) --------------------------------------------------------
void __thiscall QuestNewsWin::QuestNewsWin(QuestNewsWin *this)
{
  QuestNewsWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  QuestNewsWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v6 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestNewsWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestNewsWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kDisplayTimerInterval);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kShowWinTimerInterval);
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kRandomTimerInterval);
  v1->m_Text.baseclass_0._Myres = 15;
  v1->m_Text.baseclass_0._Mysize = 0;
  v1->m_Text.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v6) = 1;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x10u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v6) = 2;
  v1->m_pkTitleTextWin = 0;
  v1->m_bClicked = 0;
  v1->m_pkFlexMsgBox = 0;
  v1->m_bShowWinTimer = 0;
  v1->m_apkBlinkEffect = 0;
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(&v1->m_setAbleQuest.baseclass_0);
  v1->m_ePigeonState = 0;
  v1->m_bEffectStart = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9BEF80: using guessed type int (__stdcall *QuestNewsWin___vftable_)(int uiFlags);
// 9BEF9C: using guessed type int (__thiscall *QuestNewsWin___vftable_)(void *p, char);

//----- (006074A0) --------------------------------------------------------
QuestNewsWin *__cdecl QuestNewsWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  QuestNewsWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1F8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    QuestNewsWin::QuestNewsWin((QuestNewsWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (QuestNewsWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006075D0) --------------------------------------------------------
bool __thiscall QuestNewsWin::Create(QuestNewsWin *this, PgFrameWork *pkFrameWork)
{
  QuestNewsWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v7; // edi@9
  int v8; // ebx@9
  PgWinBut *v9; // eax@10
  char *v10; // eax@10
  NiTexturePalette *v11; // edi@10
  char *v12; // eax@12
  void *v13; // edi@14
  NiObject *v14; // eax@15
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@17
  NiNode *v17; // esi@18
  unsigned int uiWidth; // [sp+18h] [bp-24h]@9
  unsigned int uiHeight; // [sp+1Ch] [bp-20h]@9
  int uiLeft; // [sp+20h] [bp-1Ch]@4
  int uiTop; // [sp+24h] [bp-18h]@4
  NiPointer<NiNode> pkNiNodePtr; // [sp+28h] [bp-14h]@10
  NiPointer<NiNode> spNode; // [sp+2Ch] [bp-10h]@1
  int v24; // [sp+38h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v24 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\NewQuest.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane04", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "QuestNewsWin", 0) )
  {
    v6 = spNode.m_pObject;
    v24 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v7 = uiLeft;
  v8 = uiTop;
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Picking", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v17 = spNode.m_pObject;
    v24 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    return 0;
  }
  v9 = PgWinBut::CreateWin(
         uiLeft - v7,
         uiTop - v8,
         uiWidth,
         uiHeight,
         &v2->baseclass_0.baseclass_0.baseclass_0,
         0xAu,
         0,
         0);
  v2->m_pkQuestIconBut = v9;
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  v2->m_pkQuestIconBut->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  PgWin::SetToolTipWinText(&v2->m_pkQuestIconBut->baseclass_0.baseclass_0, byte_9BEF3E);
  v10 = TextData::Get(0xE8352F40u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v2->m_Text, v10, strlen(v10));
  pkNiNodePtr.m_pObject = 0;
  v11 = dword_B70448;
  LOBYTE(v24) = 1;
  if ( !Folder::m_bInit )
    Folder::Init();
  v12 = Folder::Merge(&Folder::m_acMenu, "Game\\NewQuestEffect02.nif");
  PgUtil::LoadNodeNifFile(v12, &pkNiNodePtr, v11);
  if ( !pkNiNodePtr.m_pObject )
  {
    LOBYTE(v24) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNiNodePtr);
    v24 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v13 = operator new(0x44u);
  LOBYTE(v24) = 2;
  if ( v13 )
  {
    v14 = NiObject::Clone(&pkNiNodePtr.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    SpEffect::SpEffect((SpEffect *)v13, (NiNode *)v14);
  }
  else
  {
    v14 = 0;
  }
  v2->m_apkBlinkEffect = (SpEffect *)v14;
  v15 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
  LOBYTE(v24) = 1;
  ((void (__thiscall *)(QuestNewsWin *))v15)(v2);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  LOBYTE(v24) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNiNodePtr);
  v24 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006078A0) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Min(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (006078C0) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 15) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 15) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 15); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (00607910) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Erase(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (00607950) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v6; // esi@8
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 15) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 15) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 15) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 15) )
      {
        v9 = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Min(*(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 15) )
        v10->_Right = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v6;
      else
        v10->_Right = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Max(*(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 15) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 15) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 14);
  *(_BYTE *)(*(_DWORD *)&v5 + 14) = *(_BYTE *)(*(_DWORD *)&v3 + 14);
  *(_BYTE *)(*(_DWORD *)&v3 + 14) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 14) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 14) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 14) )
        {
          *(_BYTE *)(v15 + 14) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 14) = 0;
          std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 15) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 14) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 14) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 14) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 14) = 1;
            *(_BYTE *)(v15 + 14) = 0;
            std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Rrotate(
              i,
              (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 14) = *(_BYTE *)(*(_DWORD *)&v6 + 14);
          *(_BYTE *)(*(_DWORD *)&v6 + 14) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 14) = 1;
          std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 14) )
        {
          *(_BYTE *)(v15 + 14) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 14) = 0;
          std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 15) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 14) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 14) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 14) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 14) = 1;
            *(_BYTE *)(v15 + 14) = 0;
            std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Lrotate(
              i,
              (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 14) = *(_BYTE *)(*(_DWORD *)&v6 + 14);
          *(_BYTE *)(*(_DWORD *)&v6 + 14) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 14) = 1;
          std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 14) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 14) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (00607BA0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this)
{
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v1; // edi@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Erase(
        v1,
        v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (00607BF0) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > _Last)
{
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v6; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 15) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 15) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 15);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 15);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
        v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (00607C90) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::find(std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *result, const unsigned __int16 *_Keyval)
{
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (00607D00) --------------------------------------------------------
void __thiscall std::set<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>>::_set<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>>(std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > *this)
{
  std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v3; // ST04_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+0h] [bp-14h]@1
  std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (00607D60) --------------------------------------------------------
void *__thiscall QuestNewsWin::_vector_deleting_destructor_(QuestNewsWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  QuestNewsWin::_QuestNewsWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00607D90) --------------------------------------------------------
float __cdecl NiACos(float fValue)
{
  double v1; // st7@4
  float result; // st7@6

  if ( fValue <= -1.0 )
  {
    v1 = NI_PI;
  }
  else
  {
    if ( fValue < 1.0 )
      JUMPOUT(*(int *)loc_607DB3);
    v1 = 0.0;
  }
  LODWORD(result) = LODWORD(v1);
  return result;
}
// 607DB3: using guessed type double __cdecl(float fValue);
// B6DE8C: using guessed type const float NI_PI;

//----- (00607DD0) --------------------------------------------------------
float __cdecl NiSymmetricRandom()
{
  int v0; // eax@1
  float v1; // ST00_4@1
  double v2; // st7@1
  float result; // st7@2

  v0 = rand();
  v1 = ((double)v0 + (double)v0) / 32767.0 - 1.0;
  v2 = v1;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (00607E00) --------------------------------------------------------
NiPoint3 *__thiscall NiPoint3::Cross(NiPoint3 *this, NiPoint3 *result, NiPoint3 *pt)
{
  NiPoint3 *v3; // eax@1

  v3 = result;
  result->x = pt->z * this->y - pt->y * this->z;
  result->y = this->z * pt->x - this->x * pt->z;
  result->z = pt->y * this->x - pt->x * this->y;
  return v3;
}

//----- (00607E40) --------------------------------------------------------
NiControllerSequence *__thiscall NiActorManager::GetSequence(NiActorManager *this, unsigned int eSequenceID)
{
  bool v2; // al@1

  v2 = NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_kSequenceMap,
         eSequenceID,
         (NiVBSet **)&eSequenceID);
  return (NiControllerSequence *)(v2 != 0 ? eSequenceID : 0);
}

//----- (00607E70) --------------------------------------------------------
void __thiscall QuestPigeonEffect::SetStartPos(QuestPigeonEffect *this)
{
  QuestPigeonEffect *v1; // esi@1
  unsigned __int16 v2; // ax@1
  Char *v3; // edi@1
  float v4; // ebx@2
  float v5; // ecx@2
  float v6; // edx@2
  unsigned __int16 v7; // ax@2
  float v8; // ST14_4@3
  float v9; // ST18_4@3
  float v10; // ST1C_4@3
  float v11; // edx@3
  float v12; // eax@3
  double v13; // st7@4
  void *(__thiscall *v14)(NiRefObject *, unsigned int); // eax@6
  float v15; // edx@7
  float v16; // eax@7
  int v17; // ecx@7
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // eax@7
  double v19; // st7@10
  int v20; // eax@12
  double v21; // st7@12
  float v22; // [sp+1Ch] [bp-2Ch]@7
  NiPoint3 kPos; // [sp+20h] [bp-28h]@2
  NiPoint3 NewPos; // [sp+2Ch] [bp-1Ch]@2
  NiPoint3 kVec; // [sp+38h] [bp-10h]@2
  float value; // [sp+44h] [bp-4h]@3

  v1 = this;
  v2 = Effect::GetCasterHandle(&this->baseclass_0);
  v3 = CharMgr::GetChar(&g_kCharMgr, v2);
  if ( v3 )
  {
    *(_QWORD *)&kVec.y = (signed __int64)Timer::ms_fCurTime;
    srand((signed __int64)Timer::ms_fCurTime);
    ((void (__thiscall *)(Char *, NiPoint3 *))v3->baseclass_0.vfptr[6].SetAbStateProperty)(v3, &kPos);
    v4 = pkCamera->baseclass_0.m_kLocal.m_Translate.x;
    v5 = pkCamera->baseclass_0.m_kLocal.m_Translate.y;
    v6 = pkCamera->baseclass_0.m_kLocal.m_Translate.z;
    v7 = v3->m_kHandle;
    kVec.x = pkCamera->baseclass_0.m_kLocal.m_Translate.x;
    kVec.y = v5;
    NewPos.x = kPos.x - kVec.x;
    kVec.z = v6;
    NewPos.y = kPos.y - v5;
    NewPos.z = kPos.z - v6;
    if ( v7 == g_pkMainChar->m_kHandle )
    {
      v8 = -NewPos.x;
      NewPos.x = v8;
      v9 = -NewPos.y;
      NewPos.y = v9;
      v10 = -NewPos.z;
      NewPos.z = v10;
      NiPoint3::Unitize(&NewPos);
      v11 = kVec.y;
      v12 = kVec.z;
      v1->m_kStartPos.x = v4;
      v1->m_kStartPos.y = v11;
      v1->m_kStartPos.z = v12;
      kVec.z = (double)rand() * 2.0 / 32767.0 - 1.0;
      v1->m_kStartPos.x = (kVec.z + 2.0) * NewPos.x + v1->m_kStartPos.x;
      kVec.z = (double)rand() * 2.0 / 32767.0 - 1.0;
      v1->m_kStartPos.y = (kVec.z + 2.0) * NewPos.y + v1->m_kStartPos.y;
      kVec.x = -1.0;
      kVec.y = 0.0;
      kVec.z = 0.0;
      NiPoint3::Unitize(&kVec);
      value = kVec.y * NewPos.y + kVec.x * NewPos.x + kVec.z * NewPos.z;
      PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      kVec.z = kVec.x * NewPos.y - kVec.y * NewPos.x;
      if ( kVec.z <= 0.0 )
        v13 = 180.0 - NiACos(value) * 57.2957763671875 + 180.0;
      else
        v13 = NiACos(value) * 57.2957763671875;
      v1->m_fAngle = v13;
      LODWORD(kVec.z) = rand();
      v14 = v1->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
      kVec.z = ((double)SLODWORD(kVec.z) + (double)SLODWORD(kVec.z)) / 32767.0 - 1.0;
      v1->m_fAngle = kVec.z * 20.0 + v1->m_fAngle;
      ((void (__thiscall *)(QuestPigeonEffect *))v14)(v1);
      v1->m_bIsSucceedSettingStartPos = 1;
    }
    else
    {
      v15 = kPos.y;
      v16 = kPos.z;
      LODWORD(v1->m_kStartPos.x) = (_DWORD)kPos.x;
      v1->m_kStartPos.y = v15;
      v1->m_kStartPos.z = v16;
      LODWORD(kVec.z) = rand() % 10;
      v1->m_kStartPos.x = ((double)SLODWORD(kVec.z) * 0.25 + 2.0) * NewPos.x + v1->m_kStartPos.x;
      v17 = rand() % 10;
      v18 = v1->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
      LODWORD(kVec.z) = v17;
      v1->m_kStartPos.y = ((double)v17 * 0.25 + 2.0) * NewPos.y + v1->m_kStartPos.y;
      v18(&v1->baseclass_0.baseclass_0, (unsigned int)&v1->m_kStartPos);
      kVec.x = 1.0;
      kVec.y = 0.0;
      kVec.z = 0.0;
      NiPoint3::Unitize(&kVec);
      LODWORD(kPos.x) = (_DWORD)NewPos.x;
      kPos.z = 0.0;
      kPos.y = NewPos.y;
      NiPoint3::Unitize(&kPos);
      kVec.z = kVec.x * kPos.x + kVec.y * kPos.y + kVec.z * kPos.z;
      v22 = kPos.x * kVec.y - kVec.x * kPos.y;
      if ( kVec.z <= -1.0 )
      {
        v19 = NI_PI;
      }
      else
      {
        if ( kVec.z < 1.0 )
          JUMPOUT(*(int *)loc_6081D0);
        v19 = 0.0;
      }
      value = v19;
      v20 = rand();
      kVec.z = ((double)v20 + (double)v20) / 32767.0 - 1.0;
      kVec.z = kVec.z * 90.0 + value * 57.2957763671875;
      v21 = kVec.z;
      v1->m_fAngle = kVec.z;
      if ( v22 >= 0.0 )
      {
        v1->m_bIsSucceedSettingStartPos = 1;
      }
      else
      {
        v1->m_bIsSucceedSettingStartPos = 1;
        v1->m_fAngle = v21 + 180.0;
      }
    }
  }
  else
  {
    v1->m_bIsSucceedSettingStartPos = 0;
  }
}
// 607E70: could not find valid save-restore pair for ebx
// 6081D0: using guessed type int();
// A9763C: using guessed type float Timer__ms_fCurTime;
// B6DE8C: using guessed type const float NI_PI;

//----- (00608270) --------------------------------------------------------
void __thiscall QuestPigeonEffect::QuestPigeonEffect(QuestPigeonEffect *this, NiActorManager *pkActor, Char *pkTarget)
{
  QuestPigeonEffect *v3; // esi@1
  unsigned int v4; // edi@1
  void *v5; // eax@1
  NiActorManager *v6; // edi@3
  NiAVObject *v7; // edi@9
  void **v8; // ecx@12
  void *v9; // eax@12
  void *v10; // edi@13
  std::exception thisa; // [sp+0h] [bp-1Ch]@15
  QuestPigeonEffect *v12; // [sp+Ch] [bp-10h]@1
  int v13; // [sp+18h] [bp-4h]@1

  v3 = this;
  v12 = this;
  v4 = 0;
  Effect::Effect(&this->baseclass_0, 0, 0, pkTarget);
  v3->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestPigeonEffect::_vftable_;
  v3->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)QuestPigeonEffect::_vftable_;
  v13 = 0;
  v3->m_spActor.m_pObject = 0;
  v3->m_fAngle = 0.0;
  v3->m_bIsSucceedSettingStartPos = 1;
  v3->m_eState = 3;
  v3->m_curAniEventCode = NiActorManager::INVALID_EVENT_CODE;
  LOBYTE(v13) = 1;
  v3->m_AEEffInfo.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x14u);
  if ( !v5 )
  {
    pkTarget = 0;
    std::exception::exception(&thisa, (const char *const *)&pkTarget);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)v5 = v5;
  *(_DWORD *)(*(_DWORD *)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  LOBYTE(v13) = 2;
  if ( pkActor )
  {
    v6 = v3->m_spActor.m_pObject;
    if ( v6 != pkActor )
    {
      if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
        v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v3->m_spActor.m_pObject = pkActor;
      InterlockedIncrement((volatile LONG *)&pkActor->baseclass_0.m_uiRefCount);
    }
    v7 = v3->m_spActor.m_pObject->m_spNIFRoot.m_pObject;
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v3->baseclass_0.m_spDefaultEffect.m_pObject->m_kChildren);
    if ( v7 )
      ((void (__stdcall *)(NiAVObject *, _DWORD))v3->baseclass_0.m_spDefaultEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v7,
        0);
    v4 = 0;
  }
  v8 = *(void ***)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v9 = *v8;
  *v8 = v8;
  *(_DWORD *)(*(_DWORD *)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3->m_AEEffInfo.baseclass_0.baseclass_0._Mysize = v4;
  if ( v9 != *(void **)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v10 = *(void **)v9;
      operator delete(v9);
      v9 = v10;
    }
    while ( v10 != *(void **)&v3->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v3->baseclass_0.m_fLastUpdateTime = 0.0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9BF21C: using guessed type int (__stdcall *QuestPigeonEffect___vftable_[3])(int);
// 9BF234: using guessed type int (__thiscall *QuestPigeonEffect___vftable_)(void *p, char);

//----- (00608400) --------------------------------------------------------
void __thiscall QuestPigeonEffect::_QuestPigeonEffect(QuestPigeonEffect *this)
{
  QuestPigeonEffect *v1; // esi@1
  NiActorManager *v2; // edi@1
  void **v3; // ecx@6
  void *v4; // eax@6
  void *v5; // edi@7
  void **v6; // ecx@8
  void *v7; // eax@8
  void *v8; // edi@9
  NiActorManager *v9; // edi@10

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestPigeonEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)QuestPigeonEffect::_vftable_;
  v2 = this->m_spActor.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spActor.m_pObject = 0;
  }
  v3 = *(void ***)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *v3;
  *v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_AEEffInfo.baseclass_0.baseclass_0._Mysize = 0;
  if ( v4 != *(void **)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v5 = *(void **)v4;
      operator delete(v4);
      v4 = v5;
    }
    while ( v5 != *(void **)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v6 = *(void ***)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = *v6;
  *v6 = v6;
  *(_DWORD *)(*(_DWORD *)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_AEEffInfo.baseclass_0.baseclass_0._Mysize = 0;
  if ( v7 != *(void **)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v8 = *(void **)v7;
      operator delete(v7);
      v7 = v8;
    }
    while ( v8 != *(void **)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  v9 = v1->m_spActor.m_pObject;
  if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount) && v9 )
    v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  Effect::_Effect(&v1->baseclass_0);
}
// 9BF21C: using guessed type int (__stdcall *QuestPigeonEffect___vftable_[3])(int);
// 9BF234: using guessed type int (__thiscall *QuestPigeonEffect___vftable_)(void *p, char);

//----- (00608540) --------------------------------------------------------
void __thiscall QuestPigeonEffect::UpdateAEEff(QuestPigeonEffect *this, float fTime)
{
  QuestPigeonEffect *v2; // esi@1
  unsigned int v3; // eax@2
  NiVBSet *v4; // edi@4
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > *v5; // eax@5
  std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > v6; // ebx@5
  ActionEffectInfo *v7; // edi@10
  unsigned __int16 v8; // ax@11
  char *v9; // edi@12
  int v10; // eax@13
  float v11; // ST30_4@13
  __int64 v12; // ST34_8@13
  int v13; // eax@13
  _BYTE v14[12]; // ST10_12@13
  _BYTE v15[12]; // ST04_12@13
  Effect *v16; // edi@13
  NiPoint3 *v17; // eax@16
  int kInfo; // [sp+2Ch] [bp-18h]@10
  ActionEffectInfo *kInfo_8; // [sp+34h] [bp-10h]@10
  std::_List_iterator<std::_List_val<float,std::allocator<float> > > result; // [sp+38h] [bp-Ch]@18
  NiVBSet *val; // [sp+3Ch] [bp-8h]@3
  unsigned int fLastTime; // [sp+40h] [bp-4h]@5

  v2 = this;
  if ( this->m_AEEffInfo.baseclass_0.baseclass_0._Mysize )
  {
    v3 = this->m_curAniEventCode;
    if ( v3 != NiActorManager::INVALID_EVENT_CODE )
    {
      if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
             (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_spActor.m_pObject->m_kSequenceMap,
             v3,
             &val) )
      {
        v4 = val;
        if ( val )
        {
          PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          v5 = *(std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > **)&v2->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
          fLastTime = v4[1].m_uiIndex;
          v6 = *(std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > *)&v5->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          if ( *(std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > **)&v5->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v5 )
          {
            while ( 1 )
            {
              if ( *(float *)&fLastTime >= 0.0 && v4[1].m_uiFlags == 1 )
              {
                v7 = *(ActionEffectInfo **)(*(_DWORD *)&v6 + 16);
                kInfo = *(_DWORD *)(*(_DWORD *)&v6 + 8);
                kInfo_8 = *(ActionEffectInfo **)(*(_DWORD *)&v6 + 16);
                if ( *(float *)(*(_DWORD *)&v6 + 12) > (double)*(float *)&fLastTime )
                {
                  if ( (unsigned __int8)*(_DWORD *)(*(_DWORD *)&v6 + 8) && v2->baseclass_0.m_bLoop )
                    *(_BYTE *)(*(_DWORD *)&v6 + 8) = 0;
                }
                else
                {
                  v8 = Effect::GetCasterHandle(&v2->baseclass_0);
                  CharMgr::GetChar(&g_kCharMgr, v8);
                  if ( v7 )
                  {
                    v9 = v7->GrapicFile;
                    if ( *v9 != 45 )
                    {
                      v10 = ((int (__thiscall *)(QuestPigeonEffect *))v2->baseclass_0.baseclass_0.vfptr[12].__vecDelDtor)(v2);
                      v11 = -*(float *)v10;
                      *(float *)&v12 = -*(float *)(v10 + 4);
                      *((float *)&v12 + 1) = -*(float *)(v10 + 8);
                      ((void (__thiscall *)(QuestPigeonEffect *))v2->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)(v2);
                      v13 = ((int (__thiscall *)(QuestPigeonEffect *))v2->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)(v2);
                      *(_DWORD *)v14 = LODWORD(v11);
                      *(_QWORD *)&v14[4] = v12;
                      *(_DWORD *)v15 = *(_DWORD *)v13;
                      *(_QWORD *)&v15[4] = *(_QWORD *)(v13 + 4);
                      v16 = EffectMgr::JustCreateEffect(
                              &g_kEffectMgr,
                              v9,
                              *(NiPoint3 *)v15,
                              *(NiPoint3 *)v14,
                              Timer::ms_fCurTime,
                              1);
                      EffectMgr::AttachEffectToWorld(&g_kEffectMgr, v16);
                      v16->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v16, LODWORD(Timer::ms_fCurTime));
                    }
                    v7 = kInfo_8;
                  }
                  if ( !(_BYTE)kInfo )
                  {
                    v17 = (NiPoint3 *)((int (__thiscall *)(QuestPigeonEffect *))v2->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)(v2);
                    SoundMgr::CreateSound(&g_kSoundMgr, v7, v17);
                    *(_BYTE *)(*(_DWORD *)&v6 + 8) = 1;
                  }
                  if ( !v2->baseclass_0.m_bLoop )
                  {
                    v6 = *(std::_List_const_iterator<std::_List_val<float,std::allocator<float> > > *)&std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::erase((std::list<float,std::allocator<float> > *)&v2->m_AEEffInfo, &result, v6)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
                    goto LABEL_23;
                  }
                }
              }
              v6 = (std::_List_const_iterator<std::_List_val<float,std::allocator<float> > >)**(_DWORD **)&v6;
LABEL_23:
              if ( v6 == *(_DWORD *)&v2->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
                return;
              v4 = val;
            }
          }
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00608740) --------------------------------------------------------
void __thiscall QuestPigeonEffect::CatchAEEff(QuestPigeonEffect *this, bool bForceLoading)
{
  QuestPigeonEffect *v2; // edi@1
  void **v3; // ecx@1
  void *v4; // eax@1
  std::list<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> > *v5; // ebx@1
  void *v6; // esi@2
  NiActorManager *v7; // eax@3
  void *v8; // eax@7
  unsigned int v9; // edi@8
  int v10; // esi@9
  const char *v11; // ecx@9
  const char *v12; // eax@10
  char v13; // dl@11
  unsigned __int16 v14; // ax@14
  ActionEffectInfo *v15; // eax@14
  double v16; // st7@14
  QuestPigeonEffect::EffectInfo kInfo; // [sp+Ch] [bp-1Ch]@14
  unsigned int KeyNum; // [sp+18h] [bp-10h]@9
  Effect *thisa; // [sp+1Ch] [bp-Ch]@1
  const char *v20; // [sp+20h] [bp-8h]@10
  void *pkEx; // [sp+24h] [bp-4h]@5

  v2 = this;
  thisa = (Effect *)this;
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = *(void ***)&v2->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *v3;
  v5 = &v2->m_AEEffInfo;
  *v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v2->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v2->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v2->m_AEEffInfo.baseclass_0.baseclass_0._Mysize = 0;
  if ( v4 != *(void **)&v2->m_AEEffInfo.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v6 = *(void **)v4;
      operator delete(v4);
      v4 = v6;
    }
    while ( v6 != *(void **)&v5->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v7 = v2->m_spActor.m_pObject;
  if ( v7 )
  {
    if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
           (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v7->m_kSequenceMap,
           v2->m_curAniEventCode,
           (NiVBSet **)&pkEx) )
    {
      if ( pkEx )
      {
        v8 = (void *)*((_DWORD *)pkEx + 8);
        pkEx = v8;
        if ( v8 )
        {
          v9 = 0;
          if ( *((_DWORD *)v8 + 3) )
          {
            do
            {
              v10 = *((_DWORD *)v8 + 4);
              v11 = *(const char **)(v10 + 8 * v9 + 4);
              KeyNum = *((_DWORD *)v8 + 3);
              if ( v11 )
              {
                v12 = v11;
                v20 = v11 + 1;
                do
                  v13 = *v12++;
                while ( v13 );
                if ( v12 - v20 == 7 )
                {
                  if ( !strncmp("AE", v11, 2u) )
                  {
                    v14 = Effect::GetKeyStrToInt(thisa, *(char **)(v10 + 8 * v9 + 4));
                    v15 = ActionEffectInfoTab::GetByID(v14);
                    v16 = *(float *)(v10 + 8 * v9);
                    kInfo.pkEffectInfo = v15;
                    kInfo.fTime = v16;
                    kInfo.bPlayed = 0;
                    std::list<QuestPigeonEffect::EffectInfo_std::allocator<QuestPigeonEffect::EffectInfo>>::push_back(
                      v5,
                      &kInfo);
                  }
                }
                v8 = pkEx;
              }
              ++v9;
            }
            while ( v9 < KeyNum );
          }
        }
      }
    }
  }
  else
  {
    OutputDebugStringA("QuestPigeon Effect CatchAEEff Fail");
  }
}

//----- (00608880) --------------------------------------------------------
void __thiscall QuestPigeonEffect::Update(QuestPigeonEffect *this, float fTime)
{
  int v2; // edi@0
  QuestPigeonEffect *v3; // esi@1
  unsigned __int16 v4; // ax@1
  Char *v5; // eax@1
  Char *v6; // edi@1
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // edx@2
  int v8; // eax@2
  double v9; // st6@2
  double v10; // st7@4
  NiRefObjectVtbl *v11; // eax@4
  double v12; // st7@10
  double v13; // st6@10
  double v14; // st7@10
  double v15; // st5@11
  double v16; // st7@12
  double v17; // st7@18
  NiRefObjectVtbl *v18; // eax@18
  bool v19; // al@18
  int v20; // edi@18
  PgFrameWork *v21; // eax@20
  GameFrameWork *v22; // edi@20
  QuestNewsWin *v23; // ebx@21
  char v24; // al@22
  NiTListItem<NiPointer<Effect> > *v25; // esi@25
  void *(__thiscall *v26)(NiRefObject *, unsigned int); // eax@26
  int v27; // [sp+Ch] [bp-74h]@1
  NiPoint3 kPos; // [sp+38h] [bp-48h]@2
  NiPoint3 kD; // [sp+44h] [bp-3Ch]@2
  NiVBSet *val; // [sp+50h] [bp-30h]@17
  float fAngle; // [sp+54h] [bp-2Ch]@1
  unsigned int v32; // [sp+7Ch] [bp-4h]@1
  int v33; // [sp+80h] [bp+0h]@1

  v32 = (unsigned int)&v33 ^ __security_cookie;
  v3 = this;
  v27 = v2;
  fAngle = fTime - this->baseclass_0.m_fLastUpdateTime;
  this->baseclass_0.m_fLastUpdateTime = fTime;
  this->m_fAngle = fAngle * 7.0 + this->m_fAngle;
  v4 = Effect::GetCasterHandle(&this->baseclass_0);
  v5 = CharMgr::GetChar(&g_kCharMgr, v4);
  v6 = v5;
  if ( !v5 )
    goto LABEL_25;
  ((void (__thiscall *)(Char *, NiPoint3 *, int))v5->baseclass_0.vfptr[6].SetAbStateProperty)(v5, &kPos, v27);
  v7 = v3->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor;
  kPos.z = kPos.z + 70.0;
  v8 = ((int (__thiscall *)(QuestPigeonEffect *))v7)(v3);
  kD.x = kPos.x - *(float *)v8;
  kD.y = kPos.y - *(float *)(v8 + 4);
  kD.z = kPos.z - *(float *)(v8 + 8);
  fAngle = kD.y * kD.y + kD.x * kD.x + kD.z * kD.z;
  fAngle = sqrt(fAngle);
  v9 = fAngle;
  if ( fAngle >= 5.0 )
  {
    if ( !v3->m_eState )
    {
      if ( v9 <= 50.0 )
      {
        fAngle = v3->m_fHighSpeed * 0.8999999761581421;
        v15 = fAngle;
        v3->m_fHighSpeed = fAngle;
        if ( v15 >= 5.0 )
        {
          v16 = v9;
        }
        else
        {
          v16 = v9;
          v3->m_fHighSpeed = 5.0;
        }
        v14 = v16 - v3->m_fHighSpeed;
      }
      else
      {
        v12 = fAngle;
        fAngle = (v3->baseclass_0.m_fLastUpdateTime - v3->baseclass_0.m_fStartTime) * 2.200000047683716;
        v13 = fAngle;
        v3->m_fHighSpeed = fAngle;
        v14 = v12 - v13;
      }
      fAngle = v14;
      if ( fAngle < 0.0 )
        fAngle = 0.0;
      *(double *)&kD.y = kPos.x;
      *(float *)&val = -v3->m_fAngle * 0.01745329238474369;
      JUMPOUT(*(int *)loc_608A99);
    }
  }
  else
  {
    if ( !v3->m_eState )
    {
      ((void (__thiscall *)(Char *))v6->baseclass_0.vfptr[6].__vecDelDtor)(v6);
      v10 = *(float *)(((int (__thiscall *)(QuestPigeonEffect *))v3->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)(v3)
                     + 8);
      v11 = v3->baseclass_0.baseclass_0.vfptr;
      kPos.z = v10;
      v11[7].__vecDelDtor((NiRefObject *)v3, (unsigned int)&kPos);
      if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
             (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v3->m_spActor.m_pObject->m_kSequenceMap,
             0x7A508u,
             (NiVBSet **)&fAngle)
        && fAngle != 0.0 )
        *(float *)(LODWORD(fAngle) + 72) = -3.4028235e38;
      NiActorManager::SetTargetAnimation(v3->m_spActor.m_pObject, 0x7A508u);
      v3->baseclass_0.m_bLoop = 0;
      v3->m_eState = 1;
      v3->m_curAniEventCode = 501000;
      QuestPigeonEffect::CatchAEEff(v3, 0);
      goto LABEL_25;
    }
  }
  v17 = *(float *)(((int (__thiscall *)(QuestPigeonEffect *))v3->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)(v3) + 8);
  v18 = v3->baseclass_0.baseclass_0.vfptr;
  kPos.z = v17;
  ((void (__thiscall *)(QuestPigeonEffect *))v18[7].__vecDelDtor)(v3);
  v19 = NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
          (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v3->m_spActor.m_pObject->m_kSequenceMap,
          0x7A508u,
          &val);
  v20 = v19 != 0 ? (int)val : 0;
  if ( *(v19 != 0 ? &val[1].m_uiFlags : 68) == 1 )
  {
    PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( *(float *)(v20 + 48) == *(float *)(v20 + 60) )
    {
      v3->m_curAniEventCode = NiActorManager::INVALID_EVENT_CODE;
      v21 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v22 = (GameFrameWork *)v21;
      if ( v21 )
      {
        v23 = (QuestNewsWin *)v21[28].m_BackFrameID;
        if ( v23 )
        {
          v24 = User::Lv(&g_kUser);
          if ( QuestNewsWin::CheckNewQuest(v23, v24) )
            GameFrameWork::OpenQuestNewsWin(v22);
        }
      }
      v3->m_eState = 2;
    }
  }
LABEL_25:
  NiActorManager::Update(v3->m_spActor.m_pObject, fTime);
  QuestPigeonEffect::UpdateAEEff(v3, fTime);
  v25 = v3->baseclass_0.m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v25 )
  {
    v26 = v25->m_element.m_pObject->baseclass_0.vfptr[14].__vecDelDtor;
    v25 = v25->m_pkNext;
    ((void (__stdcall *)(_DWORD))v26)(LODWORD(fTime));
  }
}
// 608880: could not find valid save-restore pair for edi
// 608A99: using guessed type int __thiscall(QuestPigeonEffect *this, float fTime);
// A85C00: using guessed type int __security_cookie;

//----- (00608CE0) --------------------------------------------------------
void __thiscall QuestPigeonEffect::Start(QuestPigeonEffect *this, float fTime)
{
  QuestPigeonEffect *v2; // esi@1
  double v3; // st7@3
  float v4; // ST04_4@3
  NiTListItem<NiPointer<Effect> > *v5; // edi@3
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@4
  float v7; // eax@6
  PgFrameWork *v8; // eax@7
  GameFrameWork *v9; // esi@7
  QuestNewsWin *v10; // edi@8
  char v11; // al@9

  v2 = this;
  QuestPigeonEffect::SetStartPos(this);
  if ( !v2->m_bIsSucceedSettingStartPos )
    ((void (__thiscall *)(QuestPigeonEffect *))v2->baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v2);
  v3 = fTime;
  v2->baseclass_0.m_fStartTime = fTime;
  v4 = v3;
  EffectCtrl::Start(&v2->baseclass_0.m_kCtrl, v4);
  CDecalEffect::Start(&v2->baseclass_0.m_kDecalEffect, fTime);
  v5 = v2->baseclass_0.m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v2->baseclass_0.m_fLastUpdateTime = fTime;
  while ( v5 )
  {
    v6 = v5->m_element.m_pObject->baseclass_0.vfptr[15].__vecDelDtor;
    v5 = v5->m_pkNext;
    ((void (__stdcall *)(_DWORD))v6)(LODWORD(fTime));
  }
  if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_spActor.m_pObject->m_kSequenceMap,
         0x31510u,
         (NiVBSet **)&fTime) )
  {
    v7 = fTime;
    if ( fTime != 0.0 )
    {
      *(_DWORD *)(LODWORD(fTime) + 36) = 0;
      *(float *)(LODWORD(v7) + 72) = -3.4028235e38;
      NiActorManager::SetTargetAnimation(v2->m_spActor.m_pObject, 0x31510u);
      v2->m_eState = 0;
      v2->m_curAniEventCode = 202000;
      v2->baseclass_0.m_bLoop = 1;
      QuestPigeonEffect::CatchAEEff(v2, 0);
      v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v9 = (GameFrameWork *)v8;
      if ( v8 )
      {
        v10 = (QuestNewsWin *)v8[28].m_BackFrameID;
        if ( v10 )
        {
          v11 = User::Lv(&g_kUser);
          if ( QuestNewsWin::CheckNewQuest(v10, v11) )
            GameFrameWork::OpenQuestNewsWin(v9);
        }
      }
    }
  }
}

//----- (00608E00) --------------------------------------------------------
void __thiscall Effect::SetDefaultEffect(Effect *this, NiNode *pkNode)
{
  Effect *v2; // esi@1

  v2 = this;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&this->m_spDefaultEffect.m_pObject->m_kChildren);
  if ( pkNode )
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spDefaultEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      pkNode,
      0);
}

//----- (00608E30) --------------------------------------------------------
NiRTTI *__thiscall QuestPigeonEffect::GetRTTI(QuestPigeonEffect *this)
{
  return &QuestPigeonEffect::m_RTTI;
}

//----- (00608E40) --------------------------------------------------------
bool __thiscall QuestPigeonEffect::IsEnd(QuestPigeonEffect *this, float fTime)
{
  return fTime - this->baseclass_0.m_fStartTime > 60.0 || this->m_eState == 2;
}

//----- (00608E70) --------------------------------------------------------
void *__thiscall QuestPigeonEffect::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return QuestPigeonEffect::_vector_deleting_destructor_((QuestPigeonEffect *)((char *)this - 8), a2);
}

//----- (00608E80) --------------------------------------------------------
NiPoint3 *__thiscall Effect::GetCtrl(NiIntersector *this)
{
  return &this->m_kContactPoint;
}

//----- (00608E90) --------------------------------------------------------
NiPoint3 *__thiscall Effect::GetDir(Effect *this)
{
  return &this->m_kDir;
}

//----- (00608EA0) --------------------------------------------------------
Effect *__thiscall Effect::Clone(Effect *this)
{
  Effect *v1; // edi@1
  void *v2; // eax@1
  Effect *v3; // esi@1
  Effect *v4; // eax@2

  v1 = this;
  v2 = operator new(0x20Cu);
  v3 = 0;
  if ( v2 )
  {
    Effect::Effect((Effect *)v2, 0, 0, 0);
    v3 = v4;
  }
  ((void (__cdecl *)(_DWORD))v1->baseclass_0.vfptr[22].__vecDelDtor)(v3);
  return v3;
}

//----- (00608F10) --------------------------------------------------------
float __thiscall Effect::GetLifeTime(Effect *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fLifeTime;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (00608F20) --------------------------------------------------------
void __thiscall Effect::SetLifeTime(Effect *this, float fLifeTime)
{
  this->m_fLifeTime = fLifeTime;
}

//----- (00608F30) --------------------------------------------------------
void __thiscall Effect::Stop(Effect *this)
{
  this->m_bStopFlag = 1;
}

//----- (00608F40) --------------------------------------------------------
void __thiscall Effect::DeleteEffectDestoryMessengerList(Effect *this)
{
  Effect *v1; // edi@1
  IEffectDestroyMessengerVtbl *v2; // esi@2
  void (__thiscall *v3)(IEffectDestroyMessenger *, Effect *); // ecx@3

  v1 = this;
  if ( this->baseclass_8.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_pkHead )
  {
    v2 = this->baseclass_8.vfptr;
    while ( v2 )
    {
      v3 = v2->OnEffectDestory;
      v2 = (IEffectDestroyMessengerVtbl *)v2->__vecDelDtor;
      if ( v3 )
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 8))((char *)v1 - 8);
    }
    NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)&v1->baseclass_0.m_uiRefCount);
  }
}

//----- (00608F80) --------------------------------------------------------
void __thiscall Effect::SetShow(Effect *this, bool _bShow)
{
  NiNode *v2; // eax@1
  NiNode *v3; // eax@5
  NiNode *v4; // eax@9

  v2 = this->m_spNode.m_pObject;
  if ( v2 )
  {
    if ( _bShow )
      v2->baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v2->baseclass_0.m_uFlags |= 1u;
    v3 = this->m_spDefaultEffect.m_pObject;
    if ( v3 )
    {
      if ( _bShow )
        v3->baseclass_0.m_uFlags &= 0xFFFEu;
      else
        v3->baseclass_0.m_uFlags |= 1u;
    }
    v4 = this->m_spDecalEffect.m_pObject;
    if ( v4 )
    {
      if ( _bShow )
        v4->baseclass_0.m_uFlags &= 0xFFFEu;
      else
        v4->baseclass_0.m_uFlags |= 1u;
    }
  }
}

//----- (00608FE0) --------------------------------------------------------
void __thiscall Effect::SetRootNode(Effect *this, NiNode *pkNode)
{
  Effect *v2; // ebx@1
  NiNode *v3; // esi@2

  v2 = this;
  if ( pkNode )
  {
    v3 = this->m_spNode.m_pObject;
    if ( v3 != pkNode )
    {
      if ( v3
        && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
      v2->m_spNode.m_pObject = pkNode;
      InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    EffectCtrl::SetEffectNode(&v2->m_kCtrl, &pkNode->baseclass_0);
  }
}

//----- (00609040) --------------------------------------------------------
void __thiscall Effect::SetPos(Effect *this, NiPoint3 *kPos)
{
  NiNode *v2; // eax@1

  v2 = this->m_spDefaultEffect.m_pObject;
  if ( v2 )
  {
    v2->baseclass_0.m_kLocal.m_Translate.x = kPos->x;
    v2->baseclass_0.m_kLocal.m_Translate.y = kPos->y;
    v2->baseclass_0.m_kLocal.m_Translate.z = kPos->z;
  }
}

//----- (00609070) --------------------------------------------------------
NiPoint3 *__thiscall Effect::GetPos(Effect *this)
{
  NiNode *v1; // eax@1
  NiPoint3 *result; // eax@2

  v1 = this->m_spDefaultEffect.m_pObject;
  if ( v1 )
    result = &v1->baseclass_0.m_kLocal.m_Translate;
  else
    result = (NiPoint3 *)&Effect::ms_kOnePos;
  return result;
}

//----- (00609090) --------------------------------------------------------
NiPoint3 *__thiscall Effect::GetWorldPos(Effect *this)
{
  NiNode *v1; // eax@1
  NiPoint3 *result; // eax@2

  v1 = this->m_spDefaultEffect.m_pObject;
  if ( v1 )
    result = &v1->baseclass_0.m_kWorld.m_Translate;
  else
    result = (NiPoint3 *)&Effect::ms_kOnePos;
  return result;
}

//----- (006090B0) --------------------------------------------------------
void __thiscall Effect::SetRealDir(Effect *this, NiPoint3 *kDir)
{
  Effect *v2; // esi@1
  bool v3; // zf@1
  NiMatrix3 kRot; // [sp+4h] [bp-28h]@2
  unsigned int v5; // [sp+28h] [bp-4h]@1
  int v6; // [sp+2Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spDefaultEffect.m_pObject == 0;
  this->m_kDir.x = kDir->x;
  this->m_kDir.y = kDir->y;
  this->m_kDir.z = kDir->z;
  if ( !v3 )
  {
    NpNs_RotateModelToDirVector(kDir, &kRot);
    memcpy(&v2->m_spDefaultEffect.m_pObject->baseclass_0.m_kLocal, &kRot, 0x24u);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00609110) --------------------------------------------------------
void __thiscall Effect::SetDir(Effect *this, NiPoint3 *kDir)
{
  Effect *v2; // esi@1
  bool v3; // zf@1
  NiMatrix3 kRot; // [sp+4h] [bp-28h]@2
  unsigned int v5; // [sp+28h] [bp-4h]@1
  int v6; // [sp+2Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spDefaultEffect.m_pObject == 0;
  this->m_kDir.x = kDir->x;
  this->m_kDir.y = kDir->y;
  this->m_kDir.z = kDir->z;
  if ( !v3 )
  {
    NpNs_RotateModelZToVector(kDir, &kRot);
    memcpy(&v2->m_spDefaultEffect.m_pObject->baseclass_0.m_kLocal, &kRot, 0x24u);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00609170) --------------------------------------------------------
void __thiscall Effect::CopyMember(Effect *this, Effect *pkEffect)
{
  Effect *v2; // edi@1
  NiObject *v3; // ecx@1
  NiRefObjectVtbl *v4; // ebx@2
  NiObject *v5; // eax@2
  bool v6; // al@3

  v2 = this;
  v3 = (NiObject *)this->m_spNode.m_pObject;
  if ( v3 )
  {
    v4 = pkEffect->baseclass_0.vfptr;
    v5 = NiObject::Clone(v3);
    v4[3].__vecDelDtor((NiRefObject *)pkEffect, (unsigned int)v5);
  }
  pkEffect->m_fLifeTime = v2->m_fLifeTime;
  v6 = v2->m_bCreateProgramEff;
  pkEffect->m_bCreateProgramEff = v6;
  if ( v6 )
    Effect::CreateProgramEff(pkEffect);
}

//----- (006091B0) --------------------------------------------------------
void __thiscall Effect::RegisterEffectMessenger(Effect *this, IEffectDestroyMessenger *pkMessenger)
{
  char *v2; // esi@2
  int v3; // eax@2
  int v4; // ecx@2

  if ( pkMessenger )
  {
    v2 = (char *)&this->baseclass_0.m_uiRefCount;
    v3 = (*(int (__thiscall **)(unsigned int *))(this->baseclass_0.m_uiRefCount + 4))(&this->baseclass_0.m_uiRefCount);
    *(_DWORD *)(v3 + 8) = pkMessenger;
    *(_DWORD *)v3 = 0;
    *(_DWORD *)(v3 + 4) = *((_DWORD *)v2 + 2);
    v4 = *((_DWORD *)v2 + 2);
    if ( v4 )
    {
      *(_DWORD *)v4 = v3;
      ++*((_DWORD *)v2 + 3);
      *((_DWORD *)v2 + 2) = v3;
    }
    else
    {
      ++*((_DWORD *)v2 + 3);
      *((_DWORD *)v2 + 1) = v3;
      *((_DWORD *)v2 + 2) = v3;
    }
  }
}

//----- (00609200) --------------------------------------------------------
void __thiscall Effect::SetDecalEffect(Effect *this, NiNode *pkNode)
{
  Effect *v2; // esi@1

  v2 = this;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&this->m_spDecalEffect.m_pObject->m_kChildren);
  if ( pkNode )
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spDecalEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      pkNode,
      0);
}

//----- (00609230) --------------------------------------------------------
void *__thiscall QuestPigeonEffect::_vector_deleting_destructor_(QuestPigeonEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  QuestPigeonEffect::_QuestPigeonEffect(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00609260) --------------------------------------------------------
void __thiscall std::list<QuestPigeonEffect::EffectInfo_std::allocator<QuestPigeonEffect::EffectInfo>>::push_back(std::list<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> > *this, QuestPigeonEffect::EffectInfo *_Val)
{
  std::list<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> > *v2; // esi@1
  int v3; // edi@1
  std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *v4; // eax@1
  unsigned int v5; // ecx@1

  v2 = this;
  v3 = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = std::_List_val<QuestPigeonEffect::EffectInfo_std::allocator<QuestPigeonEffect::EffectInfo>>::_Buynode(
         &this->baseclass_0,
         *(std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
         *(std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node **)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4),
         _Val);
  v5 = v2->baseclass_0.baseclass_0._Mysize;
  if ( 357913940 - v5 < 1 )
    std::_Xlength_error("list<T> too long");
  v2->baseclass_0.baseclass_0._Mysize = v5 + 1;
  *(_DWORD *)(v3 + 4) = v4;
  v4->_Prev->_Next = v4;
}

//----- (006092B0) --------------------------------------------------------
void __thiscall QuestStartItemWin::QuestStartItemWin(QuestStartItemWin *this)
{
  QuestStartItemWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_kQuestID = -1;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestStartItemWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestStartItemWin::_vftable_;
}
// 9BF5D8: using guessed type int (__stdcall *QuestStartItemWin___vftable_)(int uiFlags);
// 9BF5F4: using guessed type int (__thiscall *QuestStartItemWin___vftable_)(void *p, char);

//----- (006092E0) --------------------------------------------------------
void __thiscall QuestStartItemWin::_QuestStartItemWin(QuestStartItemWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestStartItemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestStartItemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9BF5D8: using guessed type int (__stdcall *QuestStartItemWin___vftable_)(int uiFlags);
// 9BF5F4: using guessed type int (__thiscall *QuestStartItemWin___vftable_)(void *p, char);

//----- (00609300) --------------------------------------------------------
void __thiscall QuestStartItemWin::UpdateMeWin(QuestStartItemWin *this, float fCurTime)
{
  QuestStartItemWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinContent, v2->m_pSlideBarContent);
}

//----- (00609330) --------------------------------------------------------
void __thiscall QuestStartItemWin::SetRewardWin(QuestStartItemWin *this, RewardWin *pkWin)
{
  QuestStartItemWin *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  int v4; // eax@2
  RewardWin *v5; // ecx@2
  NiRefObjectVtbl *v6; // edi@2
  int v7; // ebx@2
  int v8; // ebx@2
  int v9; // eax@2

  v2 = this;
  this->m_pkRewardWin = pkWin;
  if ( pkWin )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      pkWin,
      0);
    v3 = v2->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = ((int (*)(void))v2->m_pListWinContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v3[43].__vecDelDtor((NiRefObject *)v2->m_pkRewardWin, v4);
    v5 = v2->m_pkRewardWin;
    v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = 8
       - ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v8 = ((int (*)(void))v2->m_pListWinContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)()
       + v7;
    v9 = ((int (*)(void))v2->m_pListWinContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v6[44].__vecDelDtor((NiRefObject *)v2->m_pkRewardWin, v8 + v9);
    v2->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v2->m_pkRewardWin,
      0);
  }
}

//----- (006093E0) --------------------------------------------------------
void __thiscall QuestStartItemWin::OnShowWin(QuestStartItemWin *this)
{
  PgWinMgr::SetTopWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (006093F0) --------------------------------------------------------
void __thiscall QuestStartItemWin::OnHelpLink(QuestStartItemWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "QuestWin_QuickStart");
}

//----- (00609420) --------------------------------------------------------
void __thiscall QuestStartItemWin::UpDateContentSideBar(QuestStartItemWin *this)
{
  QuestStartItemWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2
  int v4; // edi@3
  SlideBar *v5; // eax@3
  RewardWin *v6; // esi@3

  v1 = this;
  v2 = this->m_pSlideBarContent;
  if ( v2 )
  {
    v3 = v1->m_pListWinContent;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v4 = v1->m_pSlideBarContent->m_nCurPos;
      v1->m_pListWinContent->m_nViewStartPos = v4;
      SlideListWin::UpdateViewList(v1->m_pListWinContent);
      v5 = v1->m_pSlideBarContent;
      v6 = v1->m_pkRewardWin;
      if ( v4 + 1 == v5->m_nSplitCnt )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      }
      else
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      }
    }
  }
}

//----- (006094A0) --------------------------------------------------------
void __thiscall QuestStartItemWin::ResetViewPoint(QuestStartItemWin *this)
{
  QuestStartItemWin *v1; // esi@1

  v1 = this;
  SlideBar::SetSplitCnt(this->m_pSlideBarContent, 0);
  v1->m_pListWinContent->m_nSlideSplitCnt = 0;
  v1->m_pListWinContent->m_nViewStartPos = 0;
  SlideListWin::UpdateViewList(v1->m_pListWinContent);
}

//----- (006094E0) --------------------------------------------------------
void __thiscall QuestStartItemWin::OnCommand(QuestStartItemWin *this, unsigned int wParam, int lParam)
{
  QuestStartItemWin *v3; // esi@1
  PgFrameWork *v4; // ebx@1
  RewardWin *v5; // eax@2
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@2
  int v7; // edi@3
  int v8; // edi@10
  PgFrameWork *v9; // eax@17
  int v10; // [sp-4h] [bp-14h]@1
  RewardWin *v11; // [sp-4h] [bp-14h]@7
  int v12; // [sp+8h] [bp-8h]@9
  int v13; // [sp+Ch] [bp-4h]@2

  v3 = this;
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  switch ( wParam )
  {
    case 0u:
      v5 = v3->m_pkRewardWin;
      v6 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor;
      v3->m_kQuestID = -1;
      ((void (__thiscall *)(QuestStartItemWin *, int *, RewardWin *, int))v6)(v3, &v13, v5, v10);
      if ( v13 )
      {
        v7 = v13;
        if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) )
        {
          if ( v7 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
        }
      }
      if ( !v4 )
        goto LABEL_16;
      v11 = (RewardWin *)v4[16].m_kMsgQ.m_uiAlloced;
      goto LABEL_15;
    case 1u:
      QuestStartItemWin::UpDateContentSideBar(v3);
      break;
    case 2u:
      LOWORD(wParam) = v3->m_kQuestID;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x11u, 0x14u, &wParam, 2);
      ((void (__thiscall *)(QuestStartItemWin *, int *, RewardWin *, int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        v3,
        &v12,
        v3->m_pkRewardWin,
        v10);
      if ( v12 )
      {
        v8 = v12;
        if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) )
        {
          if ( v8 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
        }
      }
      if ( v4 )
      {
        v11 = (RewardWin *)v4[16].m_kMsgQ.m_uiAlloced;
LABEL_15:
        CQuestWin2::SetRewardWin((CQuestWin2 *)v4[21].m_kMsgQ.m_uiAlloced, v11);
      }
LABEL_16:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 3u:
      v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v9 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v9, "QuestWin_QuickStart");
      break;
    default:
      return;
  }
}

//----- (00609640) --------------------------------------------------------
void __thiscall QuestStartItemWin::SetQuestContentText(QuestStartItemWin *this, unsigned int hQuestID, const char *szText)
{
  CQuest *v3; // eax@1
  DialogParser::TokenType i; // eax@1
  char *v5; // ebx@3
  QuestStartItemWin *v6; // eax@3
  SlideListWin *v7; // eax@3
  int v8; // ecx@3
  int v9; // edx@5
  void *v10; // eax@6
  CSpFont *v11; // esi@9
  double v12; // st7@10
  char *j; // esi@10
  double v14; // st7@14
  CSpFont *pkFont; // [sp+8h] [bp-3A8h]@9
  char *rkDetail; // [sp+Ch] [bp-3A4h]@1
  unsigned int count; // [sp+10h] [bp-3A0h]@3
  QuestStartItemWin *v18; // [sp+14h] [bp-39Ch]@1
  QuestDialogParser kParser; // [sp+18h] [bp-398h]@1
  void *pkTestWin; // [sp+1Ch] [bp-394h]@4
  CSpFont font; // [sp+20h] [bp-390h]@1
  char szTemp2[256]; // [sp+1A0h] [bp-210h]@1
  char szTemp[256]; // [sp+2A0h] [bp-110h]@1
  unsigned int v24; // [sp+3A0h] [bp-10h]@1
  int v25; // [sp+3ACh] [bp-4h]@1
  int v26; // [sp+3B0h] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  v18 = this;
  CSpFont::CSpFont(&font);
  v25 = 0;
  szTemp[0] = 0;
  memset(&szTemp[1], 0, 0xFFu);
  szTemp2[0] = 0;
  memset(&szTemp2[1], 0, 0xFFu);
  DialogParser::DialogParser(&kParser.baseclass_0);
  v3 = QuestDataMgr::GetQuest();
  QuestDialogParser::StartParsing(&kParser, v3, hQuestID);
  for ( i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
        i != 11;
        i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail) )
  {
    if ( !i )
    {
      v5 = fs(0);
      strncpy(v5, rkDetail, count);
      v6 = v18;
      v5[count] = 0;
      v7 = v6->m_pListWinContent;
      v8 = (signed int)((char *)v7->m_vecButList.baseclass_0._Mylast
                      - *(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( v8 )
      {
        v9 = *(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
        v10 = (void *)((*(_DWORD *)(*(_DWORD *)v9 + 336) - *(_DWORD *)(*(_DWORD *)v9 + 332)) >> 2 ? **(_DWORD **)(*(_DWORD *)v9 + 332) : 0);
        pkTestWin = v10;
        v8 = (int)v10;
      }
      else
      {
        pkTestWin = 0;
      }
      v11 = *(CSpFont **)(*(_DWORD *)(v8 + 288) + 312);
      pkFont = v11;
      if ( v11 )
      {
        v12 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 144))() / 1.049999952316284;
        for ( j = CSpFont::SplitStrByPixelSize(v11, v5, (signed int)v12, 0);
              j;
              j = CSpFont::SplitStrByPixelSize(pkFont, j, (signed int)v14, 0) )
        {
          strncpy(szTemp, v5, j - v5);
          szTemp[j - v5] = 0;
          if ( szText )
            sprintf(szTemp2, "%s%s");
          else
            sprintf(szTemp2, "%s");
          SlideListWin::AddText(v18->m_pListWinContent, szTemp2);
          v5 = j;
          v14 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)pkTestWin + 144))() / 1.049999952316284;
        }
      }
    }
  }
  v25 = -1;
  CSpFont::_CSpFont(&font);
}
// A85C00: using guessed type int __security_cookie;

//----- (00609900) --------------------------------------------------------
QuestStartItemWin *__cdecl QuestStartItemWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  QuestStartItemWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &QuestStartItemWin::_vftable_;
    *((_DWORD *)v2 + 58) = &QuestStartItemWin::_vftable_;
    *((_WORD *)v2 + 178) = -1;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (QuestStartItemWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9BF5D8: using guessed type int (__stdcall *QuestStartItemWin___vftable_)(int uiFlags);
// 9BF5F4: using guessed type int (__thiscall *QuestStartItemWin___vftable_)(void *p, char);

//----- (00609A50) --------------------------------------------------------
void __thiscall QuestStartItemWin::SetQuestInfo(QuestStartItemWin *this, unsigned __int16 qID)
{
  QuestStartItemWin *v2; // ebx@1
  SlideListWin *v3; // ecx@1
  PgFrameWork *v4; // eax@1
  GameFrameWork *v5; // ecx@3
  CQuest *v6; // eax@3
  CQuestData *v7; // edi@4
  void *v8; // eax@5
  SlideListWin *v9; // ecx@5
  void *v10; // edi@5
  unsigned __int16 *v11; // edi@7
  int v12; // edx@12
  char v13; // kr04_1@12
  char *v14; // eax@12
  char v15; // kr05_1@13
  char *v16; // eax@13
  SlideListWin *v17; // ecx@13
  char v18; // kr06_1@14
  char v19; // cl@17
  unsigned __int16 *v20; // esi@29
  char v21; // kr07_1@31
  void *v22; // esi@32
  char *v23; // eax@33
  void *v24; // eax@34
  signed int v25; // edi@35
  int v26; // esi@35
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v27; // eax@38
  char *v28; // eax@40
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v29; // esi@40
  char v30; // kr08_1@41
  int v31; // eax@41
  char v32; // cl@42
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v33; // eax@44
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *k; // eax@45
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *j; // eax@48
  const char *v36; // eax@53
  QuestStartItemWin *v37; // esi@55
  RewardWin *v38; // esi@55
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v39; // ecx@59
  const char *v40; // [sp-20h] [bp-180h]@15
  const char *v41; // [sp-14h] [bp-174h]@13
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-160h]@61
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> result; // [sp+Ch] [bp-154h]@12
  std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > setNpcID; // [sp+14h] [bp-14Ch]@34
  void *lpQuest; // [sp+24h] [bp-13Ch]@5
  PLAYER_QUEST_INFO *pPlayerQuestInfo; // [sp+28h] [bp-138h]@5
  int i; // [sp+2Ch] [bp-134h]@7
  QuestStartItemWin *thisa; // [sp+30h] [bp-130h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNpc; // [sp+34h] [bp-12Ch]@40
  char szTemp[256]; // [sp+50h] [bp-110h]@5
  unsigned int v51; // [sp+150h] [bp-10h]@1
  int v52; // [sp+15Ch] [bp-4h]@35
  int v53; // [sp+160h] [bp+0h]@1

  v51 = (unsigned int)&v53 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinContent;
  thisa = v2;
  SlideListWin::RemoveAllList(v3);
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 )
    QuestStartItemWin::SetRewardWin(v2, (RewardWin *)v4[16].m_kMsgQ.m_uiAlloced);
  v5 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
  v2->m_kQuestID = qID;
  GameFrameWork::SetRewardWinQuestID(v5, qID);
  v6 = QuestDataMgr::GetQuest();
  if ( v6 )
  {
    v7 = v6->m_pQuestData;
    if ( v7 )
    {
      pPlayerQuestInfo = CQuest::GetQuestInfo(v6, qID);
      v8 = CQuestData::GetQuestData(v7, qID);
      v9 = v2->m_pListWinContent;
      v10 = v8;
      lpQuest = v8;
      SlideListWin::AddText(v9, &byte_9BF2C5);
      TextData::Get(0x9AF8F4FFu);
      sprintf(szTemp, "<%s>");
      SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      QuestStartItemWin::SetQuestContentText(v2, *((_DWORD *)v10 + 2), 0);
      SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF2C6);
      TextData::Get(0x7A95849Cu);
      sprintf(szTemp, "<%s>");
      SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      if ( *((_BYTE *)v10 + 89) )
      {
        sprintf(szTemp, "Level : %d");
        SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      }
      i = 0;
      v11 = (unsigned __int16 *)((char *)v10 + 94);
      while ( 1 )
      {
        if ( !*((_BYTE *)v11 - 2) )
        {
LABEL_29:
          i = 0;
          v20 = (unsigned __int16 *)((char *)lpQuest + 134);
          do
          {
            if ( !*((_BYTE *)v20 - 2) )
              break;
            v21 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                    ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                    *v20);
            Inventory::GetItemCnt(&g_kInventory, *v20);
            sprintf(szTemp, "%s %d/%d");
            SlideListWin::AddText(thisa->m_pListWinContent, szTemp);
            v20 += 3;
            ++i;
          }
          while ( i < 5 );
          v22 = lpQuest;
          if ( *((_BYTE *)lpQuest + 162) )
          {
            v23 = TextData::Get(0x39323D31u);
            sprintf(szTemp, v23);
            SlideListWin::AddText(thisa->m_pListWinContent, szTemp);
          }
          setNpcID.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
          v24 = operator new(0x10u);
          if ( !v24 )
          {
            pPlayerQuestInfo = 0;
            std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&pPlayerQuestInfo);
            pExceptionObject = &std::bad_alloc::_vftable_;
            _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
          }
          setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v24;
          *(_DWORD *)v24 = v24;
          setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead;
          setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead;
          setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
          setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
          v25 = 0;
          v52 = 0;
          v26 = (int)((char *)v22 + 96);
          do
          {
            if ( !*(_BYTE *)(v26 - 4) )
              break;
            if ( !*(_BYTE *)v26 )
            {
              v27 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
                      &setNpcID.baseclass_0.baseclass_0,
                      (unsigned __int16 *)(v26 - 2));
              std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
                &setNpcID.baseclass_0,
                &result,
                v27,
                0);
            }
            ++v25;
            v26 += 8;
          }
          while ( v25 < 5 );
          strNpc.baseclass_0._Myres = 15;
          strNpc.baseclass_0._Mysize = 0;
          strNpc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          LOBYTE(v52) = 1;
          v28 = TextData::Get(0xEE023049u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strNpc, v28, strlen(v28));
          v29 = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
          while ( v29 != setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead )
          {
            v30 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                    ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                    v29->_Myval);
            sprintf(szTemp, "   %s");
            v31 = (int)szTemp;
            do
              v32 = *(_BYTE *)v31++;
            while ( v32 );
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
              &strNpc,
              szTemp,
              v31 - (_DWORD)&szTemp[1]);
            if ( !v29->_Isnil )
            {
              v33 = v29->_Right;
              if ( v33->_Isnil )
              {
                for ( j = v29->_Parent; !j->_Isnil; j = j->_Parent )
                {
                  if ( v29 != j->_Right )
                    break;
                  v29 = j;
                }
                v29 = j;
              }
              else
              {
                v29 = v29->_Right;
                for ( k = v33->_Left; !k->_Isnil; k = k->_Left )
                  v29 = k;
              }
            }
          }
          v36 = *(const char **)&strNpc;
          if ( strNpc.baseclass_0._Myres < 0x10 )
            v36 = (const char *)&strNpc;
          v37 = thisa;
          SlideListWin::AddText(thisa->m_pListWinContent, v36);
          SlideListWin::AddText(v37->m_pListWinContent, &byte_9BF2E2);
          TextData::Get(0xEEE74F4Du);
          sprintf(szTemp, "<%s>");
          SlideListWin::AddText(v37->m_pListWinContent, szTemp);
          QuestStartItemWin::SetQuestContentText(v37, *((_DWORD *)lpQuest + 3), 0);
          SlideListWin::AddText(v37->m_pListWinContent, &byte_9BF2E3);
          SlideListWin::AlignText(v37->m_pListWinContent, 4u);
          SlideListWin::AddText(v37->m_pListWinContent, &byte_9BF2EA);
          SlideListWin::AddText(v37->m_pListWinContent, &byte_9BF2EB);
          SlideListWin::AddText(v37->m_pListWinContent, byte_9BF2F2);
          SlideListWin::UpdateViewList(v37->m_pListWinContent);
          v38 = v37->m_pkRewardWin;
          if ( v38 )
            v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
          if ( strNpc.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strNpc);
          strNpc.baseclass_0._Myres = 15;
          strNpc.baseclass_0._Mysize = 0;
          strNpc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          v39 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
          v52 = 2;
          std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
            &setNpcID.baseclass_0,
            (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&pPlayerQuestInfo,
            v39,
            (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead);
          operator delete(setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead);
          return;
        }
        if ( *((_BYTE *)v11 + 2) == 1 )
          break;
        if ( *((_BYTE *)v11 + 2) != 2 )
        {
          if ( *((_BYTE *)v11 + 2) == 3 )
          {
            v12 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
            *(_DWORD *)&result.baseclass_0.second = *v11;
            v13 = (*(int (__thiscall **)(int, _DWORD))(v12 + 16))(
                    ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                    *(_DWORD *)&result.baseclass_0.second);
            v14 = TextData::Get(0x8DECE4E2u);
            sprintf(szTemp, v14);
            SlideListWin::AddText(v2->m_pListWinContent, szTemp);
          }
          goto LABEL_28;
        }
        v15 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                *v11);
        v16 = TextData::Get(0x3C497E96u);
        sprintf(szTemp, v16);
        v41 = szTemp;
        v17 = thisa->m_pListWinContent;
LABEL_27:
        SlideListWin::AddText(v17, v41);
        v2 = thisa;
LABEL_28:
        v11 += 4;
        ++i;
        if ( i >= 5 )
          goto LABEL_29;
      }
      v18 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
              ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
              *v11);
      if ( !*((_BYTE *)v11 + 4) )
      {
        v40 = "%s %d/%d";
LABEL_25:
        sprintf(szTemp, v40);
        goto LABEL_26;
      }
      if ( IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(*v11, 1) )
      {
        v19 = *((_BYTE *)v11 + 4);
        if ( v19 == 1 )
        {
          v40 = "%s %d/%d";
          goto LABEL_25;
        }
        if ( v19 == 2 )
        {
          v40 = "%s %d/%d";
          goto LABEL_25;
        }
        if ( v19 == 3 )
        {
          v40 = "%s %d/%d";
          goto LABEL_25;
        }
        if ( v19 == 4 )
        {
          v40 = "%s %d/%d";
          goto LABEL_25;
        }
      }
LABEL_26:
      v17 = thisa->m_pListWinContent;
      v41 = szTemp;
      goto LABEL_27;
    }
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0060A280) --------------------------------------------------------
bool __thiscall QuestStartItemWin::Create(QuestStartItemWin *this, PgFrameWork *pkFrameWork)
{
  QuestStartItemWin *v2; // esi@1
  bool result; // al@6
  NiTexturePalette *v4; // ebx@7
  char *v5; // eax@9
  PgSprData *v6; // eax@10
  NiNode *v7; // esi@11
  int v8; // edi@16
  int v9; // ebx@16
  NiSourceTexture *v10; // eax@16
  PgSprData *v11; // eax@19
  PgSprData *v12; // eax@19
  PgSprData::PgHitTester *v13; // eax@19
  void *v14; // edx@19
  PgFont *v15; // eax@19
  PgWinText *v16; // edi@19
  char *v17; // eax@19
  NiSourceTexture *v18; // edi@19
  SLWCreateInfo::Item *v19; // eax@21
  PgSprData *v20; // eax@25
  SlideListWin *v21; // eax@25
  PgSprData *v22; // edi@25
  NiObjectNET *v23; // eax@25
  NiObjectNET *v24; // eax@25
  NiObjectNET *v25; // eax@25
  NiObjectNET *v26; // eax@25
  NiObjectNET *v27; // eax@25
  NiObjectNET *v28; // eax@25
  SlideBar *v29; // eax@25
  SlideBar *v30; // edi@25
  void *(__thiscall *v31)(NiRefObject *, unsigned int); // edx@25
  SlideBar *v32; // ecx@25
  int v33; // eax@25
  int v34; // eax@25
  PgSprData *v35; // edi@25
  PgSprData::PgHitTester *v36; // eax@25
  unsigned int v37; // edi@25
  PgFont *v38; // eax@25
  PgWinText *v39; // edi@25
  char *v40; // eax@25
  PgSprData *v41; // edi@25
  PgSprData::PgHitTester *v42; // eax@25
  unsigned int v43; // edi@25
  PgFont *v44; // eax@25
  PgWinText *v45; // edi@25
  NiRefObjectVtbl *v46; // ebx@25
  char *v47; // eax@25
  NiNode *v48; // esi@26
  const char *v49; // [sp+40h] [bp-84h]@17
  int *v50; // [sp+44h] [bp-80h]@17
  int *v51; // [sp+48h] [bp-7Ch]@17
  NiSourceTexture *v52; // [sp+4Ch] [bp-78h]@17
  unsigned int v53; // [sp+50h] [bp-74h]@1
  SLWCreateInfo kCreateInfo; // [sp+60h] [bp-64h]@21
  NiSourceTexture *pkTexture; // [sp+7Ch] [bp-48h]@1
  int iYOff; // [sp+80h] [bp-44h]@16
  unsigned int pCIItem; // [sp+84h] [bp-40h]@19
  NiSourceTexture *pkTexture8; // [sp+88h] [bp-3Ch]@19
  int uiTop; // [sp+8Ch] [bp-38h]@10
  int uiLeft; // [sp+90h] [bp-34h]@10
  NiPointer<NiNode> spNode; // [sp+94h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+98h] [bp-2Ch]@21
  unsigned int v63; // [sp+B4h] [bp-10h]@1
  int v64; // [sp+C0h] [bp-4h]@1
  int v65; // [sp+C4h] [bp+0h]@1

  v63 = (unsigned int)&v65 ^ __security_cookie;
  v53 = (unsigned int)&v65 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v64 = 0;
  pkTexture = MenuTexMgr::GetTexture(4u);
  if ( !pkTexture )
  {
    v64 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  v4 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\QuestWin_QuickStart.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v6, 0, pkFrameWork, "QuestStartItemWin", 0) )
  {
    v8 = uiTop;
    v9 = uiLeft;
    iYOff = uiTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v52 = v10;
      v51 = &uiTop;
      v50 = &uiLeft;
      v49 = "Theme";
    }
    else
    {
      v52 = 0;
      v51 = &uiTop;
      v50 = &uiLeft;
      v49 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v49, v50, v51, v52);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
    v14 = (void *)v13->m_uiWidth;
    pCIItem = v13->m_uiHeight;
    pkTexture8 = (NiSourceTexture *)v14;
    v15 = Font::Get(0);
    v16 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - v8,
            (unsigned int)pkTexture8,
            pCIItem,
            v15,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v16,
      5,
      v53);
    pkTexture8 = (NiSourceTexture *)v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = TextData::Get(0xA6A69872u);
    (*(void (__thiscall **)(PgWinText *, char *))&pkTexture8[6].m_bStatic)(v16, v17);
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v16,
      0);
    v18 = pkTexture;
    pCIItem = (unsigned int)PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(
      uiLeft - v9,
      uiTop - iYOff,
      (PgSprData *)pCIItem,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0,
      0,
      0);
    pkTexture8 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      pCIItem = (unsigned int)PgSprData::Create(
                                &spNode.m_pObject->baseclass_0,
                                "HelpLinkNor",
                                &uiLeft,
                                &uiTop,
                                pkTexture8);
      PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - v9,
        uiTop - iYOff,
        (PgSprData *)pCIItem,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        3u,
        0,
        0);
    }
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v64) = 1;
    v19 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v19->nItemType = 1;
    v19->pNode = spNode.m_pObject;
    pCIItem = (unsigned int)v19;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Nor", 0xEu);
    LOBYTE(v64) = 2;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem + 72),
      &thisa);
    LOBYTE(v64) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pCIItem = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pCIItem = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
    LOBYTE(v64) = 3;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pCIItem + 72),
      &thisa);
    LOBYTE(v64) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *(_DWORD *)(pCIItem + 4) = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText02", &uiLeft, &uiTop, v18);
    v21 = SlideListWin::CreateWin(
            uiLeft - v9,
            uiTop - iYOff,
            v20,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pListWinContent = v21;
    v21->m_bCheckEnable = 0;
    SlideListWin::AddText(v2->m_pListWinContent, ".");
    SlideListWin::AddText(v2->m_pListWinContent, "..");
    SlideListWin::AddText(v2->m_pListWinContent, "...");
    SlideListWin::AlignText(v2->m_pListWinContent, 4u);
    SlideListWin::UpdateViewList(v2->m_pListWinContent);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, v18);
    v23 = (NiObjectNET *)((int (__cdecl *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor01");
    NiObjectNET::SetName(v23, "SlideBar_DnBtn01Nor");
    v24 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick01");
    NiObjectNET::SetName(v24, "SlideBar_DnBtn01Click");
    v25 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver01");
    NiObjectNET::SetName(v25, "SlideBar_DnBtn01Over");
    v26 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor01");
    NiObjectNET::SetName(v26, "SlideBar_UpBtn01Nor");
    v27 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick01");
    NiObjectNET::SetName(v27, "SlideBar_UpBtn01Click");
    v28 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver01");
    NiObjectNET::SetName(v28, "SlideBar_UpBtn01Over");
    v29 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar01",
            "SlideBar_UpBtn01",
            "SlideBar_DnBtn01",
            v22,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarContent = v29;
    v29->m_uiClickMsg = 1;
    v2->m_pSlideBarContent->m_eType = 1;
    v30 = v2->m_pSlideBarContent;
    v31 = v2->m_pSlideBarContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    v32 = v2->m_pSlideBarContent;
    pkTexture8 = (NiSourceTexture *)v2->m_pSlideBarContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v33 = ((int (__thiscall *)(SlideBar *))v31)(v32);
    v34 = (int)v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                 (NiRefObject *)v30,
                 v33);
    ((void (__thiscall *)(SlideBar *, int))pkTexture8[4].baseclass_0.m_kFormatPrefs.m_eMipMapped)(
      v2->m_pSlideBarContent,
      v34 - 18);
    SlideBar::SetSplitCnt(v2->m_pSlideBarContent, v2->m_pListWinContent->m_nSlideSplitCnt);
    SlideBar::SetSplitCnt(v2->m_pSlideBarContent, 0);
    v2->m_pListWinContent->m_nSlideSplitCnt = 0;
    v2->m_pListWinContent->m_nViewStartPos = 0;
    SlideListWin::UpdateViewList(v2->m_pListWinContent);
    v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GiveupNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(v35, &spNode.m_pObject->baseclass_0, "GiveupClick");
    PgSprData::Add(v35, &spNode.m_pObject->baseclass_0, "GiveupOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v36 = v35->m_akHitTester.m_pBase->m_pObject;
    v37 = v36->m_uiHeight;
    pkTexture8 = (NiSourceTexture *)v36->m_uiWidth;
    v38 = Font::Get(MAIN_MENU);
    v39 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iYOff + 1,
            (unsigned int)pkTexture8,
            v37,
            v38,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v39,
      5u);
    pkTexture8 = (NiSourceTexture *)v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v40 = TextData::Get(0xDD03DFE0u);
    (*(void (__thiscall **)(PgWinText *, char *))&pkTexture8[6].m_bStatic)(v39, v40);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v39,
      0);
    v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EpicQuestNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "EpicQuestClick");
    PgSprData::Add(v41, &spNode.m_pObject->baseclass_0, "EpicQuestOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v41, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v42 = v41->m_akHitTester.m_pBase->m_pObject;
    v43 = v42->m_uiHeight;
    pkTexture8 = (NiSourceTexture *)v42->m_uiWidth;
    v44 = Font::Get(MAIN_MENU);
    v45 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iYOff + 1,
            (unsigned int)pkTexture8,
            v43,
            v44,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v45,
      5u);
    v46 = v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v47 = TextData::Get(0x9AE7FBE7u);
    v46[118].__vecDelDtor((NiRefObject *)v45, (unsigned int)v47);
    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v45,
      0);
    ((void (__thiscall *)(QuestStartItemWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v64) = 0;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    v64 = -1;
    if ( spNode.m_pObject )
    {
      v48 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v48 )
          v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v7 = spNode.m_pObject;
    v64 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0060AAC0) --------------------------------------------------------
void *__thiscall QuestStartItemWin::_scalar_deleting_destructor_(QuestStartItemWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&QuestStartItemWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&QuestStartItemWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9BF5D8: using guessed type int (__stdcall *QuestStartItemWin___vftable_)(int uiFlags);
// 9BF5F4: using guessed type int (__thiscall *QuestStartItemWin___vftable_)(void *p, char);

//----- (0060AB10) --------------------------------------------------------
void __thiscall CQuestWin2::ResetQuestStateIcon(CQuestWin2 *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_pkSprQstEpic;
  v2 = 10;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 - 10) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 - 10) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 10) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 10) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 20) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 20) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 30) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 30) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 40) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 40) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 67) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 67) + 256))(0);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0060AC10) --------------------------------------------------------
void __thiscall CQuestWin2::SetRewardWin(CQuestWin2 *this, RewardWin *pkWin)
{
  CQuestWin2 *v2; // esi@1
  NiRefObjectVtbl *v3; // edi@2
  int v4; // eax@2
  RewardWin *v5; // ecx@2
  NiRefObjectVtbl *v6; // edi@2
  int v7; // ebx@2
  int v8; // ebx@2
  int v9; // eax@2

  v2 = this;
  this->m_pkRewardWin = pkWin;
  if ( pkWin )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      pkWin,
      0);
    v3 = v2->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = ((int (*)(void))v2->m_pListWinContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
    v3[43].__vecDelDtor((NiRefObject *)v2->m_pkRewardWin, v4);
    v5 = v2->m_pkRewardWin;
    v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = 8
       - ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v8 = ((int (*)(void))v2->m_pListWinContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)()
       + v7;
    v9 = ((int (*)(void))v2->m_pListWinContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
    v6[44].__vecDelDtor((NiRefObject *)v2->m_pkRewardWin, v8 + v9);
    v2->m_pkRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
      (NiRefObject *)v2->m_pkRewardWin,
      0);
  }
}

//----- (0060ACC0) --------------------------------------------------------
void __thiscall CQuestWin2::OnHelpLink(CQuestWin2 *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "QuestWin");
}

//----- (0060ACF0) --------------------------------------------------------
void __thiscall CQuestWin2::OnEpicQuestCompleteList(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  int v2; // eax@4

  v1 = this;
  if ( this->m_pkEpicQuestWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkEpicQuestWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkEpicQuestWin->baseclass_0.baseclass_0.baseclass_0);
    v2 = v1->m_nCurSelTab;
    if ( v2 == 1 )
    {
      v1->m_pkEpicQuestWin->m_eType = 1;
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkEpicQuestWin->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      if ( v2 == 2 )
        v1->m_pkEpicQuestWin->m_eType = 0;
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkEpicQuestWin->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (0060AD80) --------------------------------------------------------
void __thiscall EpicQuestWin::UpdateMeWin(EpicQuestWin *this, float fCurTime)
{
  EpicQuestWin *v2; // esi@1
  PgFrameWork *v3; // eax@1
  GameFrameWork *v4; // edi@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v4 = (GameFrameWork *)v3;
  if ( v3 )
  {
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinContent, v2->m_pSlideBarContent);
    GameFrameWork::UpdateUIScroll(v4, v2->m_pListWinQuestList, v2->m_pSlideBarList);
  }
}

//----- (0060ADD0) --------------------------------------------------------
void __thiscall EpicQuestWin::OnQuestAccept(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1
  PgFrameWork *v2; // eax@3

  v1 = this;
  if ( this->m_nSelectedID >= 0 && SlideListWin::GetItemSize(this->m_pListWinQuestList) )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
      GameFrameWork::NcQuestStartReq((GameFrameWork *)v2, LOWORD(v1->m_nSelectedID));
  }
}

//----- (0060AE10) --------------------------------------------------------
void __thiscall EpicQuestWin::ResetQuestStateIcon(EpicQuestWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  v1 = (char *)this->m_pkSprQstEpic;
  v2 = 13;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 - 13) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 - 13) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 13) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 13) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 26) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 26) + 256))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 39) + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 39) + 256))(0);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0060AED0) --------------------------------------------------------
void __thiscall EpicQuestWin::OnHelpLink(EpicQuestWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "EpicQuestWin");
}

//----- (0060AF00) --------------------------------------------------------
void __thiscall AutoRunBut::AutoRunBut(AutoRunBut *this)
{
  AutoRunBut *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoRunBut::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoRunBut::_vftable_;
}
// 9C02C4: using guessed type int (__stdcall *AutoRunBut___vftable_)(int uiFlags);
// 9C02E4: using guessed type int (__thiscall *AutoRunBut___vftable_)(void *p, char);

//----- (0060AF20) --------------------------------------------------------
void __thiscall AutoRunBut::_AutoRunBut(AutoRunBut *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoRunBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoRunBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9C02C4: using guessed type int (__stdcall *AutoRunBut___vftable_)(int uiFlags);
// 9C02E4: using guessed type int (__thiscall *AutoRunBut___vftable_)(void *p, char);

//----- (0060AF40) --------------------------------------------------------
bool __thiscall AutoRunBut::Create(AutoRunBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle)
{
  return PgWinBut::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, uiCmdMsg, pcName, uiExtStyle) != 0;
}

//----- (0060AF70) --------------------------------------------------------
void __thiscall CQuestWin2::OnWinClose(CQuestWin2 *this)
{
  CQuestWin2 *v1; // edi@1
  PgWin *v2; // eax@1
  MsgBox *v3; // esi@2

  v1 = this;
  v2 = (PgWin *)this->ms_pkMsgBox.m_pObject;
  if ( v2 )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v2);
    v3 = v1->ms_pkMsgBox.m_pObject;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v3,
          1u);
      v1->ms_pkMsgBox.m_pObject = 0;
    }
  }
  GameFrameWork::CloseQuestWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (0060AFD0) --------------------------------------------------------
void __thiscall CQuestWin2::DirectMessage(CQuestWin2 *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  CQuestWin2 *v4; // edi@1
  PgWinSpr *v5; // esi@4

  v4 = this;
  if ( iMsgTag == 27 )
  {
    if ( pvBody )
    {
      if ( this->m_pkSprQstEpic[5] )
      {
        v5 = this->m_pkSprQstEpic[5];
        if ( v5 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v5 )
              v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                (NiRefObject *)v5,
                1u);
          }
          v4->m_pkSprQstEpic[5] = 0;
        }
      }
    }
  }
}

//----- (0060B030) --------------------------------------------------------
void __thiscall CQuestWin2::OnFullMapOpen(CQuestWin2 *this)
{
  int v1; // eax@1

  v1 = *(_DWORD *)&this->baseclass_0.m_pkFrameWork[15].m_bInit;
  if ( v1 )
    FullMapWin::LocationInfo(*(FullMapWin **)(v1 + 528), LOWORD(this->m_nSelectedID));
}

//----- (0060B060) --------------------------------------------------------
void __thiscall CQuestWin2::UpdateLocationInfo(CQuestWin2 *this, unsigned __int16 Quest_ID)
{
  QuestHelperMgr *v2; // ebx@1
  int v3; // edi@2
  QUEST_DATA **v4; // esi@3
  CQuest *pQuest; // [sp+4h] [bp-Ch]@1
  CQuestWin2 *v6; // [sp+8h] [bp-8h]@1
  int bShow; // [sp+Ch] [bp-4h]@0

  v6 = this;
  pQuest = QuestDataMgr::GetQuest();
  LOBYTE(bShow) = 0;
  v2 = QuestHelperMgr::GetInstance();
  if ( v2 )
  {
    v3 = dword_A83278;
    if ( dword_A83278 )
    {
      while ( 1 )
      {
        v4 = *(QUEST_DATA ***)(v3 + 8);
        v3 = *(_DWORD *)v3;
        if ( v4 )
        {
          if ( (*v4)->ID == Quest_ID
            && (CQuest::GetNewQuestStatus(pQuest, (*v4)->ID) == 6 || QuestHelperMgr::IsStartRewardQuest(v2, *v4) == 1) )
            break;
        }
        if ( !v3 )
          goto LABEL_10;
      }
      LOBYTE(bShow) = 1;
    }
LABEL_10:
    ((void (__stdcall *)(int))v6->m_pkLocationInfoWinBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
    ((void (__stdcall *)(int))v6->m_pkLocationInfoWinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
  }
}
// A83278: using guessed type int dword_A83278;

//----- (0060B110) --------------------------------------------------------
void __thiscall CQuestWin2::ResetContentSlideBar(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  SlideBar *v2; // ecx@1
  RewardWin *v3; // esi@3

  v1 = this;
  v2 = this->m_pSlideBarContent;
  if ( v2 && v1->m_pListWinContent )
  {
    SlideBar::SetSplitCnt(v2, 0);
    v1->m_pListWinContent->m_nViewStartPos = 0;
    SlideListWin::UpdateViewList(v1->m_pListWinContent);
    v3 = v1->m_pkRewardWin;
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}

//----- (0060B160) --------------------------------------------------------
bool __thiscall CQuestWin2::RemoveAutoBlinkBut(CQuestWin2 *this, PgWinBut *But)
{
  bool result; // al@2

  if ( But )
  {
    NiTArray<PgWinBut__>::Remove(&this->m_kAutoBlinkButList, &But);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0060B190) --------------------------------------------------------
bool __thiscall CQuestWin2::UpdateBlinkButList(CQuestWin2 *this, float fCurTime)
{
  CQuestWin2 *v2; // esi@1
  unsigned int v3; // edi@1
  PgWinBut **v4; // eax@3
  bool v5; // zf@3
  int v6; // eax@3
  PgWinBut **v7; // ecx@7

  v2 = this;
  v3 = 0;
  this->m_fBlinkTime = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime + this->m_fBlinkTime;
  if ( this->m_kAutoBlinkButList.m_uiSize )
  {
    do
    {
      if ( v2->m_fBlinkTime < 2.0 )
      {
        if ( v2->m_fBlinkTime >= 1.0 )
        {
          v7 = v2->m_kAutoBlinkButList.m_pBase;
          if ( v7[v3] )
            v7[v3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
              (NiRefObject *)v7[v3],
              2u);
        }
      }
      else
      {
        v4 = v2->m_kAutoBlinkButList.m_pBase;
        v5 = v4[v3] == 0;
        v6 = (int)&v4[v3];
        if ( !v5 )
          (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)v6 + 492))(*(_DWORD *)v6, 0);
        v2->m_fBlinkTime = 0.0;
      }
      ++v3;
    }
    while ( v3 < v2->m_kAutoBlinkButList.m_uiSize );
  }
  return 1;
}
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (0060B230) --------------------------------------------------------
void __thiscall EpicQuestWin::EpicQuestWin(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1
  int v2; // eax@1
  signed int v3; // edx@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EpicQuestWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EpicQuestWin::_vftable_;
  v1->ms_pkMsgBox.m_pObject = 0;
  v1->m_pkAcceptBtn = 0;
  v1->m_pkAcceptBtnSpr = 0;
  v1->m_pkBtnText = 0;
  v1->m_eType = 1;
  v2 = (int)v1->m_pkSprQstEpic;
  v3 = 13;
  do
  {
    *(_DWORD *)(v2 - 52) = 0;
    *(_DWORD *)v2 = 0;
    *(_DWORD *)(v2 + 52) = 0;
    *(_DWORD *)(v2 + 104) = 0;
    *(_DWORD *)(v2 + 156) = 0;
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v1->m_uiMaxEpicQuest = 0;
  v1->m_uiCompleteQuest = 0;
  v1->m_nSelectedID = -1;
}
// 9C0520: using guessed type int (__stdcall *EpicQuestWin___vftable_)(int uiFlags);
// 9C053C: using guessed type int (__thiscall *EpicQuestWin___vftable_)(void *p, char);

//----- (0060B2B0) --------------------------------------------------------
void __thiscall EpicQuestWin::_EpicQuestWin(EpicQuestWin *this)
{
  PgWinFrame *v1; // esi@1
  MsgBox *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EpicQuestWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EpicQuestWin::_vftable_;
  v2 = this->ms_pkMsgBox.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9C0520: using guessed type int (__stdcall *EpicQuestWin___vftable_)(int uiFlags);
// 9C053C: using guessed type int (__thiscall *EpicQuestWin___vftable_)(void *p, char);

//----- (0060B340) --------------------------------------------------------
int __thiscall EpicQuestWin::TotalMaxLowLevelQuest(EpicQuestWin *this)
{
  CQuest *v1; // eax@1
  CQuestData *v2; // edi@1
  unsigned int v3; // ebx@2
  QUEST_DATA *v4; // eax@3
  QUEST_DATA *v5; // esi@3
  PLAYER_QUEST_STATUS v6; // eax@3
  int result; // eax@10
  CQuest *pQuest; // [sp+8h] [bp-8h]@1
  int iTotalLowQuset; // [sp+Ch] [bp-4h]@1

  v1 = QuestDataMgr::GetQuest();
  v2 = v1->m_pQuestData;
  pQuest = v1;
  iTotalLowQuset = 0;
  if ( v2 )
  {
    v3 = 0;
    if ( CQuestData::GetNumOfQuestData(v2) <= 0u )
    {
      result = 0;
    }
    else
    {
      do
      {
        v4 = CQuestData::GetQuestDataByIndex(v2, v3);
        v5 = v4;
        v6 = CQuest::GetNewQuestStatus(pQuest, v4->ID);
        if ( v6 == 9
          || (signed int)v6 >= 4
          && ((signed int)v6 <= 5 || v6 == 20)
          && (signed int)(User::Lv(&g_kUser) - v5->Start.LevelMin) <= 5 )
          ++iTotalLowQuset;
        ++v3;
      }
      while ( (signed int)v3 < CQuestData::GetNumOfQuestData(v2) );
      result = iTotalLowQuset;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0060B3E0) --------------------------------------------------------
int __thiscall EpicQuestWin::TotalMaxEpicQuest(EpicQuestWin *this)
{
  CQuest *v1; // eax@1
  CQuestData *v2; // edi@1
  int v3; // esi@1
  unsigned int v4; // ebx@2
  QUEST_DATA *v5; // esi@3
  char v6; // al@4
  char v7; // al@7
  EpicQuestWin *v9; // [sp+8h] [bp-10h]@1
  CQuest *pQuest; // [sp+Ch] [bp-Ch]@1
  unsigned int iTotalEpic; // [sp+10h] [bp-8h]@1
  int iCompleateList; // [sp+14h] [bp-4h]@1

  v9 = this;
  v1 = QuestDataMgr::GetQuest();
  v2 = v1->m_pQuestData;
  v3 = 0;
  pQuest = v1;
  iCompleateList = 0;
  iTotalEpic = 0;
  if ( v2 )
  {
    v4 = 0;
    if ( CQuestData::GetNumOfQuestData(v2) > 0u )
    {
      do
      {
        v5 = CQuestData::GetQuestDataByIndex(v2, v4);
        if ( CQuest::GetNewQuestStatus(pQuest, v5->ID) == 2 )
        {
          v6 = v5->Type;
          if ( v6 == 6 || v6 == 7 )
            ++iCompleateList;
        }
        v7 = v5->Type;
        if ( v7 == 6 || v7 == 7 )
          ++iTotalEpic;
        ++v4;
      }
      while ( (signed int)v4 < CQuestData::GetNumOfQuestData(v2) );
      v3 = iCompleateList;
    }
  }
  v9->m_uiCompleteQuest = v3;
  v9->m_uiMaxEpicQuest = iTotalEpic;
  return v3;
}

//----- (0060B480) --------------------------------------------------------
void __thiscall EpicQuestWin::UpDateContentSideBar(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarContent;
  if ( v2 )
  {
    v3 = v1->m_pListWinContent;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinContent->m_nViewStartPos = v1->m_pSlideBarContent->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinContent);
    }
  }
}

//----- (0060B4D0) --------------------------------------------------------
void __thiscall AutoRunBut::ProcessMeInput(AutoRunBut *this, bool *bHit)
{
  AutoRunBut *v2; // esi@1

  v2 = this;
  if ( (unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2)
    && !dword_B70444 )
    dword_B70444 = v2;
  PgWinBut::ProcessMeInput(&v2->baseclass_0, bHit);
}

//----- (0060B530) --------------------------------------------------------
void __thiscall CQuestWin2::OnAutoRunBtnClick(CQuestWin2 *this, unsigned __int16 *kID)
{
  unsigned __int16 v2; // ax@1
  unsigned int v3; // eax@2
  void *v4; // eax@2
  void *v5; // ebx@2
  NiPointer<MapNavigator> *v6; // eax@4
  MapNavigator *v7; // edi@4
  MapNavigator *v8; // esi@5
  int v9; // edx@9
  double v10; // st7@9
  Name3 *v11; // eax@11
  int v12; // edx@11
  int v13; // ecx@11
  int v14; // edx@11
  PgFrameWork *v15; // eax@11
  GTInformWin *v16; // edi@11
  MapViewInfo *v17; // eax@13
  char *v18; // eax@17
  char *v19; // eax@17
  unsigned int v20; // [sp-14h] [bp-84h]@15
  D3DXCOLOR v21; // [sp-Ch] [bp-7Ch]@15
  bool v22; // [sp+4h] [bp-6Ch]@15
  float v23; // [sp+8h] [bp-68h]@15
  char v24; // [sp+18h] [bp-58h]@11
  NiPoint3 kDest; // [sp+24h] [bp-4Ch]@11
  NiPointer<MapNavigator> result; // [sp+30h] [bp-40h]@4
  MapNavigator *pkNavigater; // [sp+34h] [bp-3Ch]@4
  NiPoint3 kPos; // [sp+3Ch] [bp-34h]@9
  unsigned __int16 *pkMob; // [sp+48h] [bp-28h]@1
  char acMapName[13]; // [sp+4Ch] [bp-24h]@11
  char acDestMapName[13]; // [sp+5Ch] [bp-14h]@11
  unsigned int v32; // [sp+6Ch] [bp-4h]@1
  int v33; // [sp+70h] [bp+0h]@1

  v32 = (unsigned int)&v33 ^ __security_cookie;
  v2 = *kID;
  pkMob = kID;
  if ( v2 != -1 )
  {
    v3 = MobCoordinateTab::GetRecordNum(v2);
    v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4), v3);
    v5 = v4;
    if ( v4 )
    {
      if ( *((_WORD *)v4 + 1) == *kID )
      {
        v6 = MapNavigator::GetMapNavigator(&result);
        v7 = v6->m_pObject;
        pkNavigater = v6->m_pObject;
        if ( result.m_pObject )
        {
          v8 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v8 )
              v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
          }
        }
        if ( v7 )
        {
          v9 = *((_DWORD *)v5 + 5);
          kPos.x = (double)*((unsigned int *)v5 + 4);
          v10 = (double)*((signed int *)v5 + 5);
          if ( v9 < 0 )
            v10 = v10 + 4294967300.0;
          kPos.y = v10;
          kPos.z = 0.0;
          kDest.y = kPos.y;
          LODWORD(kDest.x) = (_DWORD)kPos.x;
          kDest.z = 0.0;
          ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
          v11 = World::GetMapName(&g_kWorld, (Name3 *)&v24);
          *(_DWORD *)acMapName = *(_DWORD *)&v11->n3_name[0];
          *(_DWORD *)&acMapName[4] = *(_DWORD *)&v11->n3_name[4];
          v12 = *(_DWORD *)&v11->n3_name[8];
          v13 = *((_DWORD *)v5 + 2);
          *(_DWORD *)acDestMapName = *((_DWORD *)v5 + 1);
          *(_DWORD *)&acMapName[8] = v12;
          v14 = *((_DWORD *)v5 + 3);
          *(_DWORD *)&acDestMapName[4] = v13;
          acMapName[12] = 0;
          *(_DWORD *)&acDestMapName[8] = v14;
          acDestMapName[12] = 0;
          v15 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          v16 = (GTInformWin *)v15[33].m_kMsgQ.m_uiHead;
          if ( v16 )
          {
            GTInformWin::Clear((GTInformWin *)v15[33].m_kMsgQ.m_uiHead);
            pkMob = (unsigned __int16 *)IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(*pkMob, 1);
            if ( pkMob )
            {
              v17 = MapViewInfoTab::GetByMapName((Name3 *)((char *)v5 + 4));
              if ( v17 && v17->MWP_IsMove == 1 )
              {
                v23 = 1000000.0;
                v22 = 0;
                *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxYellowColor;
                *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
                v20 = 1045901377;
              }
              else
              {
                v23 = 1000000.0;
                v22 = 0;
                *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxYellowColor;
                *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxYellowColor.b;
                v20 = -1617112356;
              }
              v18 = TextData2::Get(v20);
              v19 = fs(v18);
              GTInformWin::AddText(v16, v19, COERCE_D3DXCOLOR(v21.r), v22, v23);
            }
          }
          MapNavigator::FindPathAway(pkNavigater, &kPos, &kDest, acMapName, acDestMapName, *((_WORD *)v5 + 1));
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;

//----- (0060B780) --------------------------------------------------------
void __thiscall CQuestWin2::OnQuestListLClick(CQuestWin2 *this, int nIndex, bool bCheck)
{
  int v3; // ebx@0
  signed int v4; // edi@0
  CQuestWin2 *v5; // esi@1
  int v6; // eax@2
  CQuest *v7; // edi@4
  NiRefObjectVtbl *v8; // ebx@4
  char *v9; // eax@7
  CQuest *v10; // eax@17
  bool v11; // zf@17
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@17
  MsgBox *v13; // edi@22
  unsigned int v14; // [sp-Ch] [bp-14h]@5
  int v15; // [sp-8h] [bp-10h]@4
  signed int v16; // [sp-4h] [bp-Ch]@2
  int dwQuestID; // [sp+4h] [bp-4h]@1
  PLAYER_QUEST_STATUS nStatus; // [sp+10h] [bp+8h]@4

  v5 = this;
  SlideListWin::RemoveAllList(this->m_pListWinContent);
  if ( SlideListWin::GetData(v5->m_pListWinQuestList, nIndex, (unsigned int *)&dwQuestID) )
  {
    v6 = dwQuestID;
    v16 = v4;
    v5->m_nSelectedID = dwQuestID;
    if ( v6 != -1 && v5->m_nCurSelTab == 1 )
    {
      v15 = v3;
      v7 = QuestDataMgr::GetQuest();
      nStatus = CQuest::GetNewQuestStatus(v7, LOWORD(v5->m_nSelectedID));
      v8 = v5->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      if ( nStatus == 8 )
        v14 = -637277950;
      else
        v14 = -284824239;
      v9 = TextData::Get(v14);
      ((void (__thiscall *)(PgWinText *, char *, int))v8[118].__vecDelDtor)(v5->m_pkButText1, v9, v15);
      if ( CQuestData::GetQuestData(v7->m_pQuestData, LOWORD(v5->m_nSelectedID))->End.bIsWaitListProgress
        || nStatus != 8 )
      {
        ((void (__stdcall *)(signed int))v5->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v5->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v16 = 0;
      }
      else
      {
        ((void (__stdcall *)(_DWORD))v5->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v5->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        v16 = 1;
      }
      ((void (*)(void))v5->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
    }
    if ( v5->m_nCurSelTab == 2 && v5->m_nSelectedID != -1 )
    {
      if ( v5->m_bLevelUp && !bCheck )
        v5->m_bLevelUp = 0;
      v5->m_bAutoClick = bCheck;
      v10 = QuestDataMgr::GetQuest();
      v11 = CQuestData::GetQuestData(v10->m_pQuestData, LOWORD(v5->m_nSelectedID))->Start.bIsWaitListProgress == 0;
      v12 = v5->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
      if ( v11 )
      {
        ((void (__stdcall *)(_DWORD, signed int))v12)(0, v16);
        ((void (__stdcall *)(_DWORD))v5->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v5->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v5->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
      else
      {
        ((void (__stdcall *)(signed int, signed int))v12)(1, v16);
        ((void (__stdcall *)(_DWORD))v5->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v5->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(signed int))v5->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      ((void (*)(void))v5->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
    }
    if ( v5->ms_pkMsgBox.m_pObject )
    {
      PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v5->ms_pkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
      v13 = v5->ms_pkMsgBox.m_pObject;
      if ( v13 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v13 )
            v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
              (NiRefObject *)v13,
              1u);
        }
        v5->ms_pkMsgBox.m_pObject = 0;
      }
    }
    CQuestWin2::UpdateQuestData(v5);
  }
}
// 60B780: could not find valid save-restore pair for ebx
// 60B780: could not find valid save-restore pair for edi

//----- (0060B9E0) --------------------------------------------------------
bool __thiscall CQuestWin2::AddQuestListElement(CQuestWin2 *this, CQuestWin2::QData *rkQuest)
{
  CQuestWin2::QData *v2; // edi@1
  CQuestWin2 *v3; // ebx@1
  char *v4; // eax@1
  char *v5; // edx@3
  char v6; // cl@4
  int v7; // eax@5
  char *v8; // eax@6
  const void *v9; // edx@6
  char v10; // cl@7
  unsigned int v11; // eax@8
  void *v12; // edi@8
  char v13; // cl@9
  char *v14; // eax@14
  char v15; // cl@15
  char v16; // cl@17
  char *v17; // eax@20
  char v18; // cl@21
  char v19; // cl@23
  char *v20; // eax@26
  char v21; // cl@27
  char v22; // cl@29
  int v23; // esi@31
  const char *v24; // eax@31
  char *v25; // eax@34
  char *v26; // eax@34
  SlideListWin *v27; // ecx@34
  char *v28; // eax@37
  char *v29; // eax@37
  int v31; // [sp-Ch] [bp-A8h]@36
  int v32; // [sp-Ch] [bp-A8h]@38
  int v33; // [sp-8h] [bp-A4h]@36
  int v34; // [sp-8h] [bp-A4h]@38
  int v35; // [sp-8h] [bp-A4h]@44
  int v36; // [sp-4h] [bp-A0h]@36
  int v37; // [sp-4h] [bp-A0h]@38
  CQuest *pQuest; // [sp+Ch] [bp-90h]@1
  QUEST_DATA *lpQuestTitle; // [sp+10h] [bp-8Ch]@1
  CQuestWin2::QData *v40; // [sp+14h] [bp-88h]@1
  char acStrBuf[128]; // [sp+18h] [bp-84h]@1
  unsigned int v42; // [sp+98h] [bp-4h]@1
  int v43; // [sp+9Ch] [bp+0h]@1

  v42 = (unsigned int)&v43 ^ __security_cookie;
  v2 = rkQuest;
  v3 = this;
  v40 = rkQuest;
  pQuest = QuestDataMgr::GetQuest();
  lpQuestTitle = CQuestData::GetQuestData(pQuest->m_pQuestData, LOWORD(rkQuest->dwQuestID));
  memset(acStrBuf, 0, 0x80u);
  v4 = (char *)&rkQuest->strTitle;
  if ( rkQuest->strTitle.baseclass_0._Myres >= 0x10 )
    v4 = *(char **)v4;
  v5 = (char *)(acStrBuf - v4);
  do
  {
    v6 = *v4;
    v4[(_DWORD)v5] = *v4;
    ++v4;
  }
  while ( v6 );
  v7 = rkQuest->nType;
  if ( v7 == 9 )
  {
    v8 = TextData2::Get(0x2B4D79B6u);
    v9 = v8;
    do
      v10 = *v8++;
    while ( v10 );
    v11 = v8 - v9;
    v12 = (char *)&v40 + 3;
    do
    {
      v13 = *((_BYTE *)v12 + 1);
      v12 = (char *)v12 + 1;
    }
    while ( v13 );
LABEL_30:
    memcpy(v12, v9, v11);
    v2 = v40;
    goto LABEL_31;
  }
  if ( v7 != 6 )
  {
    if ( v7 == 7 )
    {
      v20 = TextData2::Get(0x3C468CBBu);
      v9 = v20;
      do
        v21 = *v20++;
      while ( v21 );
      v11 = v20 - v9;
      v12 = (char *)&v40 + 3;
      do
      {
        v22 = *((_BYTE *)v12 + 1);
        v12 = (char *)v12 + 1;
      }
      while ( v22 );
    }
    else
    {
      if ( v7 == 5 )
      {
        v14 = TextData2::Get(0x3C468CBBu);
        v9 = v14;
        do
          v15 = *v14++;
        while ( v15 );
        v11 = v14 - v9;
        v12 = (char *)&v40 + 3;
        do
        {
          v16 = *((_BYTE *)v12 + 1);
          v12 = (char *)v12 + 1;
        }
        while ( v16 );
      }
      else
      {
        if ( v7 != 8 )
          goto LABEL_31;
        v17 = TextData2::Get(0x334635ABu);
        v9 = v17;
        do
          v18 = *v17++;
        while ( v18 );
        v11 = v17 - v9;
        v12 = (char *)&v40 + 3;
        do
        {
          v19 = *((_BYTE *)v12 + 1);
          v12 = (char *)v12 + 1;
        }
        while ( v19 );
      }
    }
    goto LABEL_30;
  }
LABEL_31:
  v23 = SlideListWin::AddText(v3->m_pListWinQuestList, acStrBuf);
  v24 = (const char *)&v2->strState;
  if ( v2->strState.baseclass_0._Myres >= 0x10 )
    v24 = *(const char **)v24;
  SlideListWin::SetText(v3->m_pListWinQuestList, v23, 1u, v24);
  SlideListWin::SetData(v3->m_pListWinQuestList, v23, v2->dwData);
  SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, v2->r, v2->g, v2->b);
  if ( (signed int)User::Lv(&g_kUser) > lpQuestTitle->Start.LevelMin + 5 )
  {
    v25 = TextData2::Get(0x499B738Eu);
    v26 = fs(v25);
    SlideListWin::SetText(v3->m_pListWinQuestList, v23, 2u, v26);
    v27 = v3->m_pListWinQuestList;
    if ( v2->nType != 10 )
    {
      SlideListWin::SetFontColor(v27, v23, 212, 111, 11);
      v36 = 11;
      v33 = 111;
      v31 = 212;
LABEL_48:
      SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, 1u, v31, v33, v36);
      return v3->m_nSelectedID == v2->dwQuestID;
    }
    SlideListWin::SetFontColor(v27, v23, 68, 255, 142);
LABEL_47:
    v36 = 142;
    v33 = 255;
    v31 = 68;
    goto LABEL_48;
  }
  v28 = TextData2::Get(0x499B738Eu);
  v29 = fs(v28);
  SlideListWin::SetText(v3->m_pListWinQuestList, v23, 2u, v29);
  switch ( v2->nType )
  {
    case 9:
      v37 = 236;
      v34 = 129;
      v32 = 252;
      break;
    case 6:
    case 7:
      v37 = 255;
      v34 = 0;
      goto LABEL_42;
    case 0xA:
      v37 = 142;
      v34 = 255;
      v32 = 68;
      break;
    default:
      v37 = 0;
      v34 = 255;
LABEL_42:
      v32 = 255;
      break;
  }
  SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, v32, v34, v37);
  if ( CQuest::GetNewQuestStatus(pQuest, LOWORD(v2->dwQuestID)) == 8 )
    v35 = 0;
  else
    v35 = 255;
  SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, 1u, 255, v35, 0);
  if ( v2->nType == 10 )
    goto LABEL_47;
  return v3->m_nSelectedID == v2->dwQuestID;
}
// A85C00: using guessed type int __security_cookie;

//----- (0060BD10) --------------------------------------------------------
void __thiscall CQuestWin2::UpdateQuestStateIcon(CQuestWin2 *this)
{
  CQuestWin2 *v1; // ebx@1
  SlideListWin *v2; // ecx@1
  int v3; // eax@1
  unsigned int v4; // edi@1
  int v5; // esi@4
  int v6; // edi@4
  CQuest *v7; // eax@5
  QUEST_DATA *v8; // eax@5
  PgWin **v9; // esi@7
  char *v10; // eax@7
  PgWin **v11; // esi@8
  char *v12; // eax@8
  PgWin **v13; // esi@9
  char *v14; // eax@9
  PgWin **v15; // esi@10
  char *v16; // eax@10
  PgWin **v17; // esi@11
  char *v18; // eax@11
  PgWin **v19; // esi@12
  char *v20; // eax@12
  unsigned int v21; // esi@16
  int v22; // edi@16
  int v23; // eax@16
  int v24; // esi@16
  int v25; // ST14_4@16
  int v26; // edx@17
  CQuest *pQuest; // [sp+8h] [bp-2Ch]@5
  int dwQuestID; // [sp+Ch] [bp-28h]@4
  int v29; // [sp+10h] [bp-24h]@2
  QUEST_DATA *lpQuest; // [sp+14h] [bp-20h]@5
  PgWin **v31; // [sp+18h] [bp-1Ch]@2
  PgWin **v32; // [sp+1Ch] [bp-18h]@2
  PgWin **v33; // [sp+20h] [bp-14h]@2
  PgWin **v34; // [sp+24h] [bp-10h]@2
  PgWin **v35; // [sp+28h] [bp-Ch]@2
  PgWin **v36; // [sp+2Ch] [bp-8h]@2
  unsigned int i; // [sp+30h] [bp-4h]@1

  v1 = this;
  CQuestWin2::ResetQuestStateIcon(this);
  v2 = v1->m_pListWinQuestList;
  v3 = (int)((char *)v2->m_vecButList.baseclass_0._Mylast
           - *(_DWORD *)&v2->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]);
  v4 = 0;
  i = 0;
  if ( (v3 & 0xFFFFFFFC) > 0 )
  {
    v29 = (int)v1->m_pkNewMark;
    v31 = (PgWin **)v1->m_pkSprQstDaily;
    v32 = (PgWin **)v1->m_pkSprQstInstance;
    v33 = (PgWin **)v1->m_pkSprQstEvent;
    v34 = (PgWin **)v1->m_pkSprQstJob;
    v35 = (PgWin **)v1->m_pkSprQstEpic;
    v36 = (PgWin **)v1->m_pkSprQstNor;
    while ( 1 )
    {
      v5 = SlideListWin::GetColumPosX(v2, v4, 3u);
      v6 = SlideListWin::GetColumPosY(v1->m_pListWinQuestList, v4, 3u);
      if ( SlideListWin::GetData(
             v1->m_pListWinQuestList,
             i + v1->m_pListWinQuestList->m_nViewStartPos,
             (unsigned int *)&dwQuestID) )
      {
        v7 = QuestDataMgr::GetQuest();
        pQuest = v7;
        v8 = CQuestData::GetQuestData(v7->m_pQuestData, dwQuestID);
        lpQuest = v8;
        if ( v8 )
        {
          switch ( v8->Type )
          {
            case 0:
            case 5:
            case 8:
              ((void (__stdcall *)(signed int))(*v36)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v36)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v9 = v36;
              ((void (__stdcall *)(int))(*v36)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v9)->m_pkToolTipWin = g_pkToolTipWin;
              v10 = TextData2::Get(0xD8E4EDF6u);
              PgWin::SetToolTipWinText(*v9, v10);
              v36 = v9 + 1;
              break;
            case 1:
            case 6:
            case 7:
              ((void (__stdcall *)(signed int))(*v35)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v35)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v11 = v35;
              ((void (__stdcall *)(int))(*v35)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v11)->m_pkToolTipWin = g_pkToolTipWin;
              v12 = TextData2::Get(0x8D9AE3EDu);
              PgWin::SetToolTipWinText(*v11, v12);
              v35 = v11 + 1;
              break;
            case 2:
              ((void (__stdcall *)(signed int))(*v34)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v34)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v13 = v34;
              ((void (__stdcall *)(int))(*v34)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v13)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v13)->m_pkToolTipWin = g_pkToolTipWin;
              v14 = TextData2::Get(0x89EBF3E5u);
              PgWin::SetToolTipWinText(*v13, v14);
              v34 = v13 + 1;
              break;
            case 3:
              ((void (__stdcall *)(signed int))(*v33)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v33)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v15 = v33;
              ((void (__stdcall *)(int))(*v33)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v15)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v15)->m_pkToolTipWin = g_pkToolTipWin;
              v16 = TextData2::Get(0x93EEEEE9u);
              PgWin::SetToolTipWinText(*v15, v16);
              v33 = v15 + 1;
              break;
            case 4:
            case 9:
              ((void (__stdcall *)(signed int))(*v32)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v32)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v17 = v32;
              ((void (__stdcall *)(int))(*v32)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v17)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v17)->m_pkToolTipWin = g_pkToolTipWin;
              v18 = TextData2::Get(0x85EBEFE5u);
              PgWin::SetToolTipWinText(*v17, v18);
              v32 = v17 + 1;
              break;
            case 0xA:
              ((void (__stdcall *)(signed int))(*v31)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v31)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v19 = v31;
              ((void (__stdcall *)(int))(*v31)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v19)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v19)->m_pkToolTipWin = g_pkToolTipWin;
              v20 = TextData2::Get(0xE4E5E4E9u);
              PgWin::SetToolTipWinText(*v19, v20);
              v31 = v19 + 1;
              break;
            default:
              break;
          }
          if ( CQuest::GetNewQuestStatus(pQuest, lpQuest->ID) == 5
            && (v1->m_nSelectedID != lpQuest->ID || v1->m_bAutoClick) )
          {
            v21 = i;
            v22 = SlideListWin::GetColumPosX(v1->m_pListWinQuestList, i, 1u);
            v23 = SlideListWin::GetColumPosY(v1->m_pListWinQuestList, v21, 1u);
            v24 = v29;
            v25 = v23;
            (*(void (__stdcall **)(signed int))(**(_DWORD **)v29 + 256))(1);
            (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 172))(v22);
            (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 176))(v25);
            v29 = v24 + 4;
          }
        }
      }
      v2 = v1->m_pListWinQuestList;
      v26 = (signed int)((char *)v2->m_vecButList.baseclass_0._Mylast
                       - *(_DWORD *)&v2->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      ++i;
      if ( (signed int)i >= v26 )
        break;
      v4 = i;
    }
  }
  if ( v1->m_bLevelUp )
    ((void (__stdcall *)(signed int))v1->m_pkNewQuestReady->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  else
    v1->m_pkNewQuestReady->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1->m_pkNewQuestReady,
      0);
}

//----- (0060C190) --------------------------------------------------------
void __thiscall CQuestWin2::SetQuestContentText(CQuestWin2 *this, unsigned int hQuestID, const char *szText)
{
  CQuest *v3; // eax@1
  DialogParser::TokenType i; // eax@1
  char *v5; // ebx@3
  CQuestWin2 *v6; // eax@3
  SlideListWin *v7; // eax@3
  int v8; // ecx@3
  int v9; // edx@5
  void *v10; // eax@6
  CSpFont *v11; // esi@9
  double v12; // st7@10
  char *j; // esi@10
  double v14; // st7@14
  CSpFont *pkFont; // [sp+8h] [bp-3A8h]@9
  char *rkDetail; // [sp+Ch] [bp-3A4h]@1
  unsigned int count; // [sp+10h] [bp-3A0h]@3
  CQuestWin2 *v18; // [sp+14h] [bp-39Ch]@1
  QuestDialogParser kParser; // [sp+18h] [bp-398h]@1
  void *pkTestWin; // [sp+1Ch] [bp-394h]@4
  CSpFont font; // [sp+20h] [bp-390h]@1
  char szTemp2[256]; // [sp+1A0h] [bp-210h]@1
  char szTemp[256]; // [sp+2A0h] [bp-110h]@1
  unsigned int v24; // [sp+3A0h] [bp-10h]@1
  int v25; // [sp+3ACh] [bp-4h]@1
  int v26; // [sp+3B0h] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  v18 = this;
  CSpFont::CSpFont(&font);
  v25 = 0;
  szTemp[0] = 0;
  memset(&szTemp[1], 0, 0xFFu);
  szTemp2[0] = 0;
  memset(&szTemp2[1], 0, 0xFFu);
  DialogParser::DialogParser(&kParser.baseclass_0);
  v3 = QuestDataMgr::GetQuest();
  QuestDialogParser::StartParsing(&kParser, v3, hQuestID);
  for ( i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
        i != 11;
        i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail) )
  {
    if ( !i )
    {
      v5 = fs(0);
      strncpy(v5, rkDetail, count);
      v6 = v18;
      v5[count] = 0;
      v7 = v6->m_pListWinContent;
      v8 = (signed int)((char *)v7->m_vecButList.baseclass_0._Mylast
                      - *(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( v8 )
      {
        v9 = *(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
        v10 = (void *)((*(_DWORD *)(*(_DWORD *)v9 + 336) - *(_DWORD *)(*(_DWORD *)v9 + 332)) >> 2 ? **(_DWORD **)(*(_DWORD *)v9 + 332) : 0);
        pkTestWin = v10;
        v8 = (int)v10;
      }
      else
      {
        pkTestWin = 0;
      }
      v11 = *(CSpFont **)(*(_DWORD *)(v8 + 288) + 312);
      pkFont = v11;
      if ( v11 )
      {
        v12 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 144))() / 1.049999952316284;
        for ( j = CSpFont::SplitStrByPixelSize(v11, v5, (signed int)v12, 0);
              j;
              j = CSpFont::SplitStrByPixelSize(pkFont, j, (signed int)v14, 0) )
        {
          strncpy(szTemp, v5, j - v5);
          szTemp[j - v5] = 0;
          if ( szText )
            sprintf(szTemp2, "%s%s");
          else
            sprintf(szTemp2, "%s");
          SlideListWin::AddText(v18->m_pListWinContent, szTemp2);
          v5 = j;
          v14 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)pkTestWin + 144))() / 1.049999952316284;
        }
      }
    }
  }
  v25 = -1;
  CSpFont::_CSpFont(&font);
}
// A85C00: using guessed type int __security_cookie;

//----- (0060C450) --------------------------------------------------------
void __thiscall CQuestWin2::UpDateContentSideBar(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2
  int v4; // edi@3
  RewardWin *v5; // eax@3
  SlideListWin *v6; // eax@8
  unsigned int v7; // edi@8
  int v8; // eax@10
  int v9; // ecx@11
  int v10; // edi@14
  int v11; // ebx@14
  SlideListWin *v12; // ecx@16
  SlideListWin *v13; // ecx@18
  int v14; // edi@18
  int v15; // eax@19
  int v16; // ST18_4@21
  int v17; // ST14_4@21
  AutoRunBut *v18; // ecx@21
  int v19; // edi@21
  int v20; // eax@21
  int nViewStartIndex; // [sp+Ch] [bp-Ch]@16
  int v22; // [sp+10h] [bp-8h]@20
  int dwNum; // [sp+14h] [bp-4h]@17

  v1 = this;
  v2 = this->m_pSlideBarContent;
  if ( v2 )
  {
    v3 = v1->m_pListWinContent;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v4 = v1->m_pSlideBarContent->m_nCurPos;
      v1->m_pListWinContent->m_nViewStartPos = v4;
      SlideListWin::UpdateViewList(v1->m_pListWinContent);
      v5 = v1->m_pkRewardWin;
      if ( v4 + 1 == v1->m_pSlideBarContent->m_nSplitCnt )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
      }
      else
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
      }
      v6 = v1->m_pListWinContent;
      v7 = 0;
      if ( v6->m_nMaxViewListCnt > 0 )
      {
        do
        {
          if ( v7 < (signed int)((char *)v6->m_vecButList.baseclass_0._Mylast
                               - *(_DWORD *)&v6->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
          {
            v8 = *(_DWORD *)(*(_DWORD *)&v6->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v7);
            if ( (*(_DWORD *)(v8 + 336) - *(_DWORD *)(v8 + 332)) >> 2 )
            {
              v9 = **(_DWORD **)(v8 + 332);
              if ( v9 )
                (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v9 + 172))(0);
            }
          }
          v6 = v1->m_pListWinContent;
          ++v7;
        }
        while ( (signed int)v7 < v6->m_nMaxViewListCnt );
      }
      v10 = (int)v1->m_pkAutoRunBut;
      v11 = 10;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v10 + 256))(0);
        v10 += 4;
        --v11;
      }
      while ( v11 );
      v12 = v1->m_pListWinContent;
      nViewStartIndex = v12->m_nViewStartPos;
      if ( (signed int)((unsigned int)((char *)v12->m_vecButList.baseclass_0._Mylast
                                     - *(_DWORD *)&v12->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFC) > 0 )
      {
        do
        {
          dwNum = -1;
          SlideListWin::GetData(v12, v11 + nViewStartIndex, (unsigned int *)&dwNum);
          if ( (unsigned int)(dwNum - 1) <= 9 )
          {
            v13 = v1->m_pListWinContent;
            v14 = dwNum - 1;
            if ( v11 < (unsigned int)((signed int)((char *)v13->m_vecButList.baseclass_0._Mylast
                                                 - *(_DWORD *)&v13->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2) )
            {
              v15 = *(_DWORD *)(*(_DWORD *)&v13->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v11);
              if ( (*(_DWORD *)(v15 + 336) - *(_DWORD *)(v15 + 332)) >> 2 )
              {
                v22 = **(_DWORD **)(v15 + 332);
                if ( v22 )
                {
                  v16 = SlideListWin::GetColumPosX(v13, v11, 0);
                  v17 = SlideListWin::GetColumPosY(v1->m_pListWinContent, v11, 0);
                  ((void (__stdcall *)(_DWORD))v1->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v1->m_arryAutoButEnable[v14]);
                  ((void (__stdcall *)(signed int))v1->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                  ((void (__stdcall *)(int))v1->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v16);
                  ((void (__stdcall *)(int))v1->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v17);
                  v18 = v1->m_pkAutoRunBut[v14].m_pObject;
                  v19 = *(_DWORD *)v22;
                  v20 = ((int (*)(void))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
                  (*(void (__thiscall **)(int, int))(v19 + 172))(v22, v20);
                }
              }
            }
          }
          v12 = v1->m_pListWinContent;
          ++v11;
        }
        while ( v11 < (signed int)((char *)v12->m_vecButList.baseclass_0._Mylast
                                 - *(_DWORD *)&v12->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
      }
    }
  }
}

//----- (0060C6D0) --------------------------------------------------------
void __thiscall CQuestWin2::SetSelectedID(CQuestWin2 *this, int iSelectID)
{
  int v2; // ebx@0
  int v3; // edi@0
  CQuestWin2 *v4; // esi@1
  CQuest *v5; // edi@2
  PLAYER_QUEST_STATUS v6; // ebx@2
  char *v7; // eax@3
  char *v8; // eax@4
  int v9; // [sp-8h] [bp-Ch]@2
  int v10; // [sp-4h] [bp-8h]@2
  NiRefObjectVtbl *iSelectIDa; // [sp+Ch] [bp+8h]@3
  NiRefObjectVtbl *iSelectIDb; // [sp+Ch] [bp+8h]@4

  v4 = this;
  CQuestWin2::ms_bUpdate = 1;
  this->m_nSelectedID = iSelectID;
  if ( iSelectID != -1 )
  {
    v10 = v2;
    v9 = v3;
    v5 = QuestDataMgr::GetQuest();
    v6 = CQuest::GetNewQuestStatus(v5, LOWORD(v4->m_nSelectedID));
    if ( v6 == 8 )
    {
      iSelectIDa = v4->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = TextData::Get(0xDA03E902u);
      ((void (__thiscall *)(PgWinText *, char *, int, int))iSelectIDa[118].__vecDelDtor)(v4->m_pkButText1, v7, v9, v10);
    }
    else
    {
      iSelectIDb = v4->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData::Get(0xEF05ED51u);
      ((void (__thiscall *)(PgWinText *, char *, int, int))iSelectIDb[118].__vecDelDtor)(v4->m_pkButText1, v8, v9, v10);
    }
    if ( CQuestData::GetQuestData(v5->m_pQuestData, LOWORD(v4->m_nSelectedID))->End.bIsWaitListProgress || v6 != 8 )
    {
      ((void (__cdecl *)(signed int))v4->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v4->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    }
    else
    {
      ((void (__cdecl *)(_DWORD))v4->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(signed int))v4->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    }
    ((void (*)(void))v4->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
  }
}
// 60C6D0: could not find valid save-restore pair for ebx
// 60C6D0: could not find valid save-restore pair for edi
// A9A76C: using guessed type bool CQuestWin2__ms_bUpdate;

//----- (0060C7F0) --------------------------------------------------------
void __thiscall EpicQuestWin::OnSlideBarContent(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarContent;
  if ( v2 )
  {
    v3 = v1->m_pListWinContent;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinContent->m_nViewStartPos = v1->m_pSlideBarContent->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinContent);
    }
  }
}

//----- (0060C840) --------------------------------------------------------
bool __thiscall EpicQuestWin::AddQuestListElement(EpicQuestWin *this, EpicQuestWin::QData *rkQuest)
{
  EpicQuestWin::QData *v2; // edi@1
  EpicQuestWin *v3; // ebx@1
  char *v4; // eax@1
  char *v5; // edx@3
  char v6; // cl@4
  int v7; // eax@5
  char *v8; // eax@6
  const void *v9; // edx@6
  char v10; // cl@7
  unsigned int v11; // eax@8
  void *v12; // edi@8
  char v13; // cl@9
  char *v14; // eax@14
  char v15; // cl@15
  char v16; // cl@17
  char *v17; // eax@20
  char v18; // cl@21
  char v19; // cl@23
  char *v20; // eax@26
  char v21; // cl@27
  char v22; // cl@29
  int v23; // esi@31
  int v24; // edi@31
  char *v25; // eax@31
  char *v26; // eax@31
  int v27; // eax@31
  EpicQuestWin::eUI_TYPE v28; // ecx@33
  char *v29; // eax@35
  char *v30; // eax@35
  char *v31; // eax@36
  char *v32; // eax@36
  unsigned __int16 *v33; // edi@36
  signed int v34; // eax@36
  PLAYER_QUEST_STATUS v35; // eax@43
  SlideListWin *v36; // ecx@43
  char *v37; // eax@47
  char *v38; // eax@47
  int v40; // [sp-Ch] [bp-ACh]@39
  int v41; // [sp-8h] [bp-A8h]@39
  int v42; // [sp-4h] [bp-A4h]@39
  CQuest *pQuest; // [sp+Ch] [bp-94h]@1
  unsigned int UserLv; // [sp+10h] [bp-90h]@31
  QUEST_DATA *lpQuestTitle; // [sp+14h] [bp-8Ch]@1
  EpicQuestWin::QData *v46; // [sp+18h] [bp-88h]@1
  char acStrBuf[128]; // [sp+1Ch] [bp-84h]@1
  unsigned int v48; // [sp+9Ch] [bp-4h]@1
  int v49; // [sp+A0h] [bp+0h]@1

  v48 = (unsigned int)&v49 ^ __security_cookie;
  v2 = rkQuest;
  v3 = this;
  v46 = rkQuest;
  pQuest = QuestDataMgr::GetQuest();
  lpQuestTitle = CQuestData::GetQuestData(pQuest->m_pQuestData, LOWORD(rkQuest->dwQuestID));
  memset(acStrBuf, 0, 0x80u);
  v4 = (char *)&rkQuest->strTitle;
  if ( rkQuest->strTitle.baseclass_0._Myres >= 0x10 )
    v4 = *(char **)v4;
  v5 = (char *)(acStrBuf - v4);
  do
  {
    v6 = *v4;
    v4[(_DWORD)v5] = *v4;
    ++v4;
  }
  while ( v6 );
  v7 = rkQuest->nType;
  if ( v7 == 9 )
  {
    v8 = TextData2::Get(0x2B4D79B6u);
    v9 = v8;
    do
      v10 = *v8++;
    while ( v10 );
    v11 = v8 - v9;
    v12 = (char *)&v46 + 3;
    do
    {
      v13 = *((_BYTE *)v12 + 1);
      v12 = (char *)v12 + 1;
    }
    while ( v13 );
LABEL_30:
    memcpy(v12, v9, v11);
    v2 = v46;
    goto LABEL_31;
  }
  if ( v7 != 6 )
  {
    if ( v7 == 7 )
    {
      v20 = TextData2::Get(0x3C468CBBu);
      v9 = v20;
      do
        v21 = *v20++;
      while ( v21 );
      v11 = v20 - v9;
      v12 = (char *)&v46 + 3;
      do
      {
        v22 = *((_BYTE *)v12 + 1);
        v12 = (char *)v12 + 1;
      }
      while ( v22 );
    }
    else
    {
      if ( v7 == 5 )
      {
        v14 = TextData2::Get(0x3C468CBBu);
        v9 = v14;
        do
          v15 = *v14++;
        while ( v15 );
        v11 = v14 - v9;
        v12 = (char *)&v46 + 3;
        do
        {
          v16 = *((_BYTE *)v12 + 1);
          v12 = (char *)v12 + 1;
        }
        while ( v16 );
      }
      else
      {
        if ( v7 != 8 )
          goto LABEL_31;
        v17 = TextData2::Get(0x334635ABu);
        v9 = v17;
        do
          v18 = *v17++;
        while ( v18 );
        v11 = v17 - v9;
        v12 = (char *)&v46 + 3;
        do
        {
          v19 = *((_BYTE *)v12 + 1);
          v12 = (char *)v12 + 1;
        }
        while ( v19 );
      }
    }
    goto LABEL_30;
  }
LABEL_31:
  v23 = SlideListWin::AddText(v3->m_pListWinQuestList, acStrBuf);
  SlideListWin::SetData(v3->m_pListWinQuestList, v23, v2->dwData);
  SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, v2->r, v2->g, v2->b);
  v24 = lpQuestTitle->Start.LevelMin;
  UserLv = User::Lv(&g_kUser);
  v25 = TextData2::Get(0x499B738Eu);
  v26 = fs(v25);
  SlideListWin::SetText(v3->m_pListWinQuestList, v23, 2u, v26);
  v27 = v24 + 5;
  if ( (signed int)UserLv > v24 + 5 )
  {
    SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, 212, 111, 11);
    v27 = v24 + 5;
  }
  v28 = v3->m_eType;
  if ( v28 == 1 )
  {
    if ( (signed int)UserLv > v27 )
    {
      v29 = TextData2::Get(0x499B738Eu);
      v30 = fs(v29);
      SlideListWin::SetText(v3->m_pListWinQuestList, v23, 2u, v30);
      SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, 212, 111, 11);
      SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, 1u, 212, 111, 11);
      return v3->m_nSelectedID == v46->dwQuestID;
    }
    v31 = TextData2::Get(0x499B738Eu);
    v32 = fs(v31);
    SlideListWin::SetText(v3->m_pListWinQuestList, v23, 2u, v32);
    v33 = (unsigned __int16 *)v46;
    v34 = v46->nType;
    if ( v34 >= 6 )
    {
      if ( v34 <= 7 )
      {
        v42 = 255;
        v41 = 0;
LABEL_42:
        v40 = 255;
LABEL_43:
        SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, v40, v41, v42);
        v35 = CQuest::GetNewQuestStatus(pQuest, *v33);
        v36 = v3->m_pListWinQuestList;
        if ( v35 == 8 )
          SlideListWin::SetFontColor(v36, v23, 1u, 255, 0, 0);
        else
          SlideListWin::SetFontColor(v36, v23, 1u, 255, 255, 0);
        return v3->m_nSelectedID == v46->dwQuestID;
      }
      if ( v34 == 9 )
      {
        v42 = 236;
        v41 = 129;
        v40 = 252;
        goto LABEL_43;
      }
    }
    v42 = 0;
    v41 = 255;
    goto LABEL_42;
  }
  if ( !v28 )
  {
    v37 = TextData2::Get(0x499B738Eu);
    v38 = fs(v37);
    SlideListWin::SetText(v3->m_pListWinQuestList, v23, 2u, v38);
    if ( (signed int)UserLv > v24 + 5 )
      SlideListWin::SetFontColor(v3->m_pListWinQuestList, v23, 212, 111, 11);
  }
  return v3->m_nSelectedID == v46->dwQuestID;
}
// A85C00: using guessed type int __security_cookie;

//----- (0060CBE0) --------------------------------------------------------
void __thiscall EpicQuestWin::SetQuestContentText(EpicQuestWin *this, unsigned int hQuestID, const char *szText)
{
  CQuest *v3; // eax@1
  DialogParser::TokenType i; // eax@1
  char *v5; // ebx@3
  EpicQuestWin *v6; // eax@3
  SlideListWin *v7; // eax@3
  int v8; // ecx@3
  int v9; // edx@5
  void *v10; // eax@6
  CSpFont *v11; // esi@9
  double v12; // st7@10
  char *j; // esi@10
  double v14; // st7@14
  CSpFont *pkFont; // [sp+8h] [bp-3A8h]@9
  char *rkDetail; // [sp+Ch] [bp-3A4h]@1
  unsigned int count; // [sp+10h] [bp-3A0h]@3
  EpicQuestWin *v18; // [sp+14h] [bp-39Ch]@1
  QuestDialogParser kParser; // [sp+18h] [bp-398h]@1
  void *pkTestWin; // [sp+1Ch] [bp-394h]@4
  CSpFont font; // [sp+20h] [bp-390h]@1
  char szTemp2[256]; // [sp+1A0h] [bp-210h]@1
  char szTemp[256]; // [sp+2A0h] [bp-110h]@1
  unsigned int v24; // [sp+3A0h] [bp-10h]@1
  int v25; // [sp+3ACh] [bp-4h]@1
  int v26; // [sp+3B0h] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  v18 = this;
  CSpFont::CSpFont(&font);
  v25 = 0;
  szTemp[0] = 0;
  memset(&szTemp[1], 0, 0xFFu);
  szTemp2[0] = 0;
  memset(&szTemp2[1], 0, 0xFFu);
  DialogParser::DialogParser(&kParser.baseclass_0);
  v3 = QuestDataMgr::GetQuest();
  QuestDialogParser::StartParsing(&kParser, v3, hQuestID);
  for ( i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail);
        i != 11;
        i = DialogParser::Parse(&kParser.baseclass_0, (DialogParser::TokenDetail *)&rkDetail) )
  {
    if ( !i )
    {
      v5 = fs(0);
      strncpy(v5, rkDetail, count);
      v6 = v18;
      v5[count] = 0;
      v7 = v6->m_pListWinContent;
      v8 = (signed int)((char *)v7->m_vecButList.baseclass_0._Mylast
                      - *(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      if ( v8 )
      {
        v9 = *(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
        v10 = (void *)((*(_DWORD *)(*(_DWORD *)v9 + 336) - *(_DWORD *)(*(_DWORD *)v9 + 332)) >> 2 ? **(_DWORD **)(*(_DWORD *)v9 + 332) : 0);
        pkTestWin = v10;
        v8 = (int)v10;
      }
      else
      {
        pkTestWin = 0;
      }
      v11 = *(CSpFont **)(*(_DWORD *)(v8 + 288) + 312);
      pkFont = v11;
      if ( v11 )
      {
        v12 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 144))() / 1.049999952316284;
        for ( j = CSpFont::SplitStrByPixelSize(v11, v5, (signed int)v12, 0);
              j;
              j = CSpFont::SplitStrByPixelSize(pkFont, j, (signed int)v14, 0) )
        {
          strncpy(szTemp, v5, j - v5);
          szTemp[j - v5] = 0;
          if ( szText )
            sprintf(szTemp2, "%s%s");
          else
            sprintf(szTemp2, "%s");
          SlideListWin::AddText(v18->m_pListWinContent, szTemp2);
          v5 = j;
          v14 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)pkTestWin + 144))() / 1.049999952316284;
        }
      }
    }
  }
  v25 = -1;
  CSpFont::_CSpFont(&font);
}
// A85C00: using guessed type int __security_cookie;

//----- (0060CEA0) --------------------------------------------------------
void __thiscall EpicQuestWin::UpdateQuestStateIcon(EpicQuestWin *this)
{
  EpicQuestWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  int v3; // eax@1
  PgWin **v4; // ebx@2
  int v5; // esi@4
  int v6; // edi@4
  CQuest *v7; // eax@5
  QUEST_DATA *v8; // eax@5
  PgWin **v9; // esi@7
  char *v10; // eax@7
  PgWin **v11; // esi@8
  char *v12; // eax@8
  PgWin **v13; // esi@9
  char *v14; // eax@9
  PgWin **v15; // esi@10
  char *v16; // eax@10
  char *v17; // eax@11
  int v18; // edx@12
  int dwQuestID; // [sp+4h] [bp-1Ch]@4
  EpicQuestWin *v20; // [sp+8h] [bp-18h]@1
  PgWin **v21; // [sp+Ch] [bp-14h]@2
  PgWin **v22; // [sp+10h] [bp-10h]@2
  PgWin **v23; // [sp+14h] [bp-Ch]@2
  PgWin **v24; // [sp+18h] [bp-8h]@2
  unsigned int i; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v20 = this;
  EpicQuestWin::ResetQuestStateIcon(this);
  v2 = v1->m_pListWinQuestList;
  v3 = (int)((char *)v2->m_vecButList.baseclass_0._Mylast
           - *(_DWORD *)&v2->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]);
  i = 0;
  if ( (v3 & 0xFFFFFFFC) > 0 )
  {
    v21 = (PgWin **)v1->m_pkSprQstEvent;
    v22 = (PgWin **)v1->m_pkSprQstJob;
    v4 = (PgWin **)v1->m_pkSprQstInstance;
    v23 = (PgWin **)v1->m_pkSprQstEpic;
    v24 = (PgWin **)v1->m_pkSprQstNor;
    while ( 1 )
    {
      v5 = SlideListWin::GetColumPosX(v2, i, 1u);
      v6 = SlideListWin::GetColumPosY(v1->m_pListWinQuestList, i, 1u);
      if ( SlideListWin::GetData(
             v20->m_pListWinQuestList,
             i + v20->m_pListWinQuestList->m_nViewStartPos,
             (unsigned int *)&dwQuestID) )
      {
        v7 = QuestDataMgr::GetQuest();
        v8 = CQuestData::GetQuestData(v7->m_pQuestData, dwQuestID);
        if ( v8 )
        {
          switch ( v8->Type )
          {
            case 0:
            case 5:
            case 8:
              ((void (__stdcall *)(signed int))(*v24)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v24)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v9 = v24;
              ((void (__stdcall *)(int))(*v24)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v9)->m_pkToolTipWin = g_pkToolTipWin;
              v10 = TextData2::Get(0xD8E4EDF6u);
              PgWin::SetToolTipWinText(*v9, v10);
              v24 = v9 + 1;
              break;
            case 1:
            case 6:
            case 7:
              ((void (__stdcall *)(signed int))(*v23)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v23)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v11 = v23;
              ((void (__stdcall *)(int))(*v23)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v11)->m_pkToolTipWin = g_pkToolTipWin;
              v12 = TextData2::Get(0x8D9AE3EDu);
              PgWin::SetToolTipWinText(*v11, v12);
              v23 = v11 + 1;
              break;
            case 2:
              ((void (__stdcall *)(signed int))(*v22)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v22)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v13 = v22;
              ((void (__stdcall *)(int))(*v22)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v13)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v13)->m_pkToolTipWin = g_pkToolTipWin;
              v14 = TextData2::Get(0x89EBF3E5u);
              PgWin::SetToolTipWinText(*v13, v14);
              v22 = v13 + 1;
              break;
            case 3:
              ((void (__stdcall *)(signed int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              v15 = v21;
              ((void (__stdcall *)(int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v15)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v15)->m_pkToolTipWin = g_pkToolTipWin;
              v16 = TextData2::Get(0x93EEEEE9u);
              PgWin::SetToolTipWinText(*v15, v16);
              v21 = v15 + 1;
              break;
            case 4:
            case 9:
              ((void (__stdcall *)(signed int))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              ((void (__stdcall *)(int))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v5);
              ((void (__stdcall *)(int))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v6);
              ((void (__stdcall *)(signed int))(*v4)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              (*v4)->m_pkToolTipWin = g_pkToolTipWin;
              v17 = TextData2::Get(0x85EBEFE5u);
              PgWin::SetToolTipWinText(*v4, v17);
              ++v4;
              break;
            default:
              break;
          }
        }
      }
      v2 = v20->m_pListWinQuestList;
      v18 = (signed int)((char *)v2->m_vecButList.baseclass_0._Mylast
                       - *(_DWORD *)&v2->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      ++i;
      if ( (signed int)i >= v18 )
        break;
      v1 = v20;
    }
  }
}

//----- (0060D1F0) --------------------------------------------------------
void __thiscall CQuestWin2::UpDateListSideBar(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarList;
  if ( v2 )
  {
    v3 = v1->m_pListWinQuestList;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
      CQuestWin2::UpdateQuestStateIcon(v1);
    }
  }
}

//----- (0060D240) --------------------------------------------------------
bool __thiscall CQuestWin2::AddAutoBlinkBut(CQuestWin2 *this, PgWinBut *But)
{
  bool result; // al@2
  NiTArray<NiVBChip *> *v3; // esi@3
  unsigned int v4; // edi@3

  if ( But )
  {
    v3 = (NiTArray<NiVBChip *> *)&this->m_kAutoBlinkButList;
    v4 = this->m_kAutoBlinkButList.m_uiSize;
    if ( v4 >= this->m_kAutoBlinkButList.m_uiMaxSize )
      NiTArray<NiGeometry__>::SetSize(
        (NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *)&this->m_kAutoBlinkButList,
        v4 + this->m_kAutoBlinkButList.m_uiGrowBy);
    NiTArray<NiCollisionGroup::Record__>::SetAt(v3, v4, (NiVBChip *const *)&But);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0060D280) --------------------------------------------------------
void __thiscall EpicQuestWin::UpDateListSideBar(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarList;
  if ( v2 )
  {
    v3 = v1->m_pListWinQuestList;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
      EpicQuestWin::UpdateQuestStateIcon(v1);
    }
  }
}

//----- (0060D2D0) --------------------------------------------------------
void __thiscall CQuestWin2::OnSlideBarList(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarList;
  if ( v2 )
  {
    v3 = v1->m_pListWinQuestList;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
      CQuestWin2::UpdateQuestStateIcon(v1);
    }
  }
}

//----- (0060D320) --------------------------------------------------------
void __thiscall EpicQuestWin::OnSlideBarList(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarList;
  if ( v2 )
  {
    v3 = v1->m_pListWinQuestList;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
      EpicQuestWin::UpdateQuestStateIcon(v1);
    }
  }
}

//----- (0060D370) --------------------------------------------------------
void __thiscall CQuestWin2::OnGiveUp(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  CQuest *v2; // eax@3
  PLAYER_QUEST_STATUS v3; // eax@3
  PLAYER_QUEST_STATUS v4; // ebx@3
  char *v5; // eax@6
  MsgBox *v6; // eax@6
  unsigned int v7; // edx@6
  unsigned int v8; // eax@6
  PgFrameWork *v9; // eax@6
  int v10; // eax@7
  PgFrameWork *v11; // eax@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+4h] [bp-20h]@10
  unsigned __int16 _Keyval[2]; // [sp+8h] [bp-1Ch]@10
  PgMsg::Frame kOkMsg; // [sp+Ch] [bp-18h]@6
  unsigned int v15; // [sp+20h] [bp-4h]@1
  int v16; // [sp+24h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  if ( this->m_nSelectedID >= 0 && SlideListWin::GetItemSize(this->m_pListWinQuestList) )
  {
    v2 = QuestDataMgr::GetQuest();
    v3 = CQuest::GetNewQuestStatus(v2, LOWORD(v1->m_nSelectedID));
    v4 = v3;
    if ( !v1->ms_pkMsgBox.m_pObject && v1->m_nCurSelTab == 1 && v3 != 8 )
    {
      v5 = TextData::Get(0x8B87929Cu);
      v6 = MsgBox::Modeless(MSGBOX_OKCANCEL, v5);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->ms_pkMsgBox, (NiD3DDefaultShader *)v6);
      v7 = v1->m_nSelectedID;
      v8 = v1->m_nCurSelTab;
      kOkMsg.m_uiFrameMsg = 260;
      kOkMsg.m_uiFramelParam = v7;
      kOkMsg.m_uiFrameWParam = v8;
      v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      MsgBox::SetFrameWorkMsgOnClose(v1->ms_pkMsgBox.m_pObject, v9, &kOkMsg, 0);
      v1->ms_pkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
        &v1->ms_pkMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    v10 = v1->m_nCurSelTab;
    if ( v10 == 2 )
      goto LABEL_16;
    if ( v4 != 8 )
      return;
    if ( v10 == 2 )
    {
LABEL_16:
      *(_DWORD *)_Keyval = LOWORD(v1->m_nSelectedID);
      if ( *(std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)&std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::find(&v1->m_setAbleQuest.baseclass_0, &result, _Keyval)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
        v1->m_bLevelUp = 0;
    }
    v11 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v11 )
      GameFrameWork::NcQuestStartReq((GameFrameWork *)v11, LOWORD(v1->m_nSelectedID));
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0060D4D0) --------------------------------------------------------
EpicQuestWin *__cdecl EpicQuestWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  EpicQuestWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x290u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    EpicQuestWin::EpicQuestWin((EpicQuestWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (EpicQuestWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0060D600) --------------------------------------------------------
AutoRunBut *__cdecl AutoRunBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, char *pcName, unsigned int uiExtStyle)
{
  void *v7; // eax@1
  void *v8; // esi@1
  PgWin *v9; // edi@8
  AutoRunBut *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v7 = operator new(0x144u);
  v8 = v7;
  result.m_pObject = (PgWin *)v7;
  v12 = 0;
  if ( v7 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v7);
    *(_DWORD *)v8 = &AutoRunBut::_vftable_;
    *((_DWORD *)v8 + 58) = &AutoRunBut::_vftable_;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)v8 + 1);
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int, char *, unsigned int))(*(_DWORD *)v8 + 548))(
                          v8,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg,
                          pcName,
                          uiExtStyle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = (AutoRunBut *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}
// 9C02C4: using guessed type int (__stdcall *AutoRunBut___vftable_)(int uiFlags);
// 9C02E4: using guessed type int (__thiscall *AutoRunBut___vftable_)(void *p, char);

//----- (0060D760) --------------------------------------------------------
void __thiscall CQuestWin2::_CQuestWin2(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  char *v2; // ebx@1
  int v3; // edi@2
  void *v4; // ST0C_4@8
  NiSourceTexture *v5; // edi@8
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v6; // ST0C_4@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v7; // ST08_4@12
  MsgBox *v8; // edi@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+0h] [bp-18h]@12
  CQuestWin2 *v10; // [sp+4h] [bp-14h]@1
  std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > *v11; // [sp+8h] [bp-10h]@1
  int v12; // [sp+14h] [bp-4h]@1

  v1 = this;
  v10 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CQuestWin2::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CQuestWin2::_vftable_;
  v12 = 6;
  v2 = (char *)this->m_pkAutoRunBut;
  v11 = (std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > *)10;
  do
  {
    v3 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    v11 = (std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > *)((char *)v11 - 1);
  }
  while ( v11 );
  v4 = v1->m_kAutoBlinkButList.m_pBase;
  v1->m_kAutoBlinkButList.vfptr = (NiTArray<PgWinBut *>Vtbl *)&NiTArray<PgWinBut__>::_vftable_;
  operator delete__(v4);
  LOBYTE(v12) = 4;
  _eh_vector_destructor_iterator_(
    v1->m_pkAutoRunBut,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v5 = v1->m_ButtonspTexture.m_pObject;
  LOBYTE(v12) = 3;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v11 = &v1->m_setAbleQuest;
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v12) = 7;
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
    &v1->m_setAbleQuest.baseclass_0,
    &result,
    v7,
    v6);
  operator delete(v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v8 = v1->ms_pkMsgBox.m_pObject;
  LOBYTE(v12) = 1;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  LOBYTE(v12) = 0;
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  v12 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9C0518: using guessed type int (__thiscall *NiTArray_PgWinBut _____vftable_)(void *p, char);
// 9C0760: using guessed type int (__stdcall *CQuestWin2___vftable_)(int uiFlags);
// 9C077C: using guessed type int (__thiscall *CQuestWin2___vftable_)(void *p, char);

//----- (0060D8D0) --------------------------------------------------------
void __thiscall CQuestWin2::CQuestWin2(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  void *v2; // eax@1
  MsgBox *v3; // eax@2
  int v4; // eax@9
  signed int v5; // edi@9
  int v6; // eax@10
  void *v7; // eax@15
  std::exception thisa; // [sp+0h] [bp-24h]@17
  CQuestWin2 *v9; // [sp+Ch] [bp-18h]@1
  void *_What; // [sp+10h] [bp-14h]@2
  void *i; // [sp+14h] [bp-10h]@7
  int v12; // [sp+20h] [bp-4h]@1

  v1 = this;
  v9 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v12 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CQuestWin2::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CQuestWin2::_vftable_;
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kMarkCheck);
  v1->ms_pkMsgBox.m_pObject = 0;
  LOBYTE(v12) = 2;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x10u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_ButtonspTexture.m_pObject = 0;
  LOBYTE(v12) = 4;
  _eh_vector_constructor_iterator_(
    v1->m_pkAutoRunBut,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_kAutoBlinkButList.vfptr = (NiTArray<PgWinBut *>Vtbl *)&NiTArray<PgWinBut__>::_vftable_;
  v1->m_kAutoBlinkButList.m_uiMaxSize = 0;
  v1->m_kAutoBlinkButList.m_uiGrowBy = 1;
  v1->m_kAutoBlinkButList.m_uiSize = 0;
  v1->m_kAutoBlinkButList.m_uiESize = 0;
  v1->m_kAutoBlinkButList.m_pBase = 0;
  v1->m_fBlinkTime = 0.0;
  v1->m_pListWinContent = 0;
  v1->m_pListWinQuestList = 0;
  v1->m_pSlideBarList = 0;
  v1->m_pSlideBarContent = 0;
  v1->m_pkTab01 = 0;
  v1->m_pkTab02 = 0;
  v1->m_pkTitle1 = 0;
  v1->m_pkTitle2 = 0;
  v1->m_nSelectedID = -1;
  v1->m_nCurSelTab = -1;
  v1->m_nSortColumn = -1;
  v1->bReverseSort = 1;
  v1->m_nStateFilterType = 0;
  v1->m_pkRewardWin = 0;
  v1->m_iNumOfCompleteEpicQuest = 0;
  v1->m_pkTabText1 = 0;
  v1->m_pkTabText2 = 0;
  v1->m_pkButText1 = 0;
  v1->m_pkButText2 = 0;
  v1->m_pkAcceptBtn = 0;
  v1->m_pkAcceptBtnSpr = 0;
  v3 = v1->ms_pkMsgBox.m_pObject;
  LOBYTE(v12) = 6;
  _What = v3;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && _What )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v1->ms_pkMsgBox.m_pObject = 0;
  }
  v1->m_pkNewQuestReady = 0;
  v1->m_pkNewMark[0] = 0;
  v1->m_pkNewMark[1] = 0;
  v1->m_pkNewMark[2] = 0;
  v1->m_pkNewMark[3] = 0;
  v1->m_pkNewMark[4] = 0;
  v1->m_pkNewMark[5] = 0;
  v1->m_pkNewMark[6] = 0;
  v1->m_pkNewMark[7] = 0;
  v1->m_pkNewMark[8] = 0;
  v1->m_pkNewMark[9] = 0;
  v1->m_bLevelUp = 0;
  _What = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 15); _What = i )
  {
    std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Erase(
      &v1->m_setAbleQuest.baseclass_0,
      *((std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (int)v1->m_pkAutoRunBut;
  v1->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = 0;
  i = v1->m_pkAutoRunBut;
  do
  {
    v6 = *(_DWORD *)v4;
    _What = (void *)v6;
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      {
        if ( _What )
          (**(void (__stdcall ***)(_DWORD))_What)(1);
      }
      *(_DWORD *)i = 0;
    }
    v7 = i;
    v1->m_arryAutoButEnable[v5++] = 0;
    v4 = (int)((char *)v7 + 4);
    i = (void *)v4;
  }
  while ( v5 < 10 );
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C0518: using guessed type int (__thiscall *NiTArray_PgWinBut _____vftable_)(void *p, char);
// 9C0760: using guessed type int (__stdcall *CQuestWin2___vftable_)(int uiFlags);
// 9C077C: using guessed type int (__thiscall *CQuestWin2___vftable_)(void *p, char);

//----- (0060DBC0) --------------------------------------------------------
CQuestWin2 *__cdecl CQuestWin2::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CQuestWin2 *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x364u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CQuestWin2::CQuestWin2((CQuestWin2 *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CQuestWin2 *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0060DCF0) --------------------------------------------------------
void __thiscall CQuestWin2::UpDateViewQuesContent(CQuestWin2 *this, unsigned __int16 qID)
{
  CQuestWin2 *v2; // esi@1
  PgFrameWork *v3; // ecx@1
  SlideListWin *v4; // eax@1
  unsigned int v5; // ebx@1
  int v6; // eax@3
  int v7; // ecx@4
  CQuest *v8; // eax@10
  CQuestData *v9; // ebx@11
  void *v10; // eax@12
  SlideListWin *v11; // ecx@12
  void *v12; // edi@12
  PgFrameWork *v13; // eax@14
  QUEST_DATA *v14; // edi@17
  PLAYER_QUEST_STATUS v15; // eax@17
  int v16; // eax@24
  char *v17; // eax@24
  char v18; // kr08_1@24
  int v19; // eax@24
  char v20; // cl@25
  const char *v21; // eax@26
  int v22; // edi@28
  SlideListWin *v23; // ebx@29
  int v24; // ebx@31
  int v25; // eax@31
  void *(__thiscall *v26)(NiRefObject *, unsigned int); // edx@31
  NiRefObjectVtbl *v27; // ebx@31
  int v28; // eax@31
  PgWinText *v29; // ecx@31
  void *(__thiscall *v30)(NiRefObject *, unsigned int); // eax@31
  PgWin *v31; // ebx@34
  char *v32; // eax@37
  SlideListWin *v33; // ecx@37
  NiRefObjectVtbl *v34; // edi@42
  char *v35; // eax@45
  void *v36; // edi@45
  char v37; // kr09_1@57
  char *v38; // eax@57
  char v39; // kr0A_1@58
  char *v40; // eax@58
  char v41; // kr0B_1@59
  int v42; // ebx@61
  int v43; // edx@61
  int v44; // eax@63
  char v45; // cl@65
  int v46; // eax@76
  unsigned int v47; // ebx@76
  SlideListWin *v48; // ecx@77
  int v49; // eax@79
  int v50; // eax@81
  SlideListWin *v51; // ecx@81
  int v52; // eax@81
  int v53; // edx@81
  NiRefObjectVtbl *v54; // edi@81
  int v55; // eax@81
  unsigned int v56; // edi@82
  unsigned int v57; // edi@88
  unsigned __int16 *v58; // edx@88
  unsigned __int16 *v59; // edx@89
  char *v60; // eax@90
  SlideListWin *v61; // ecx@90
  char *v62; // eax@92
  char **v63; // edi@92
  int v64; // edx@95
  char v65; // kr0C_1@95
  int v66; // eax@95
  int v67; // ecx@95
  unsigned int v68; // ebx@95
  int v69; // eax@95
  char *v70; // edx@96
  void *v71; // eax@105
  SlideListWin *v72; // eax@108
  int v73; // ecx@110
  int v74; // edx@112
  int v75; // ecx@113
  int v76; // ebx@115
  int v77; // ebx@119
  void *v78; // ebx@119
  int (*v79)(void); // eax@119
  SlideListWin *v80; // ecx@120
  int v81; // eax@120
  int v82; // eax@121
  signed int v83; // edx@121
  int v84; // ebx@127
  int v85; // ebx@127
  void *v86; // eax@127
  char *v87; // ebx@128
  int v88; // edx@128
  int v89; // eax@128
  SlideListWin *v90; // eax@134
  int v91; // ecx@136
  int v92; // edx@138
  int v93; // ecx@139
  void *v94; // ebx@141
  int v95; // ebx@145
  int v96; // ebx@145
  int (*v97)(void); // eax@145
  SlideListWin *v98; // ecx@146
  int v99; // eax@146
  int v100; // eax@147
  signed int v101; // edx@147
  int v102; // ebx@153
  int v103; // ebx@153
  int v104; // eax@153
  int v105; // edx@154
  int v106; // eax@154
  char *v107; // eax@157
  SlideListWin *v108; // ecx@157
  void *v109; // edi@159
  char *v110; // eax@160
  signed int v111; // ebx@161
  void *v112; // eax@161
  int v113; // edi@162
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v114; // eax@165
  char *v115; // eax@167
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v116; // edi@167
  int v117; // edx@168
  char v118; // kr0D_1@168
  int v119; // eax@168
  char v120; // cl@169
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v121; // eax@171
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *k; // eax@172
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *j; // eax@175
  const char *v124; // eax@180
  int v125; // edi@182
  void *v126; // eax@182
  SlideListWin *v127; // ebx@183
  int v128; // eax@185
  int v129; // eax@187
  int v130; // edx@188
  signed int v131; // ecx@188
  int v132; // ecx@189
  int v133; // eax@194
  int v134; // ebx@194
  SlideListWin *v135; // ecx@195
  int v136; // eax@195
  int v137; // ebx@196
  char *v138; // edi@198
  int v139; // edi@202
  int v140; // eax@202
  int (__thiscall *v141)(_DWORD); // edx@202
  int v142; // eax@202
  unsigned int v143; // ebx@203
  int v144; // edi@203
  int v145; // eax@203
  PgWin *v146; // edi@209
  char *v147; // eax@209
  void *v148; // edi@210
  SlideBar *v149; // ecx@210
  RewardWin *v150; // esi@212
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v151; // ecx@216
  char *v152; // [sp-24h] [bp-1C0h]@60
  const char *v153; // [sp-20h] [bp-1BCh]@60
  unsigned int v154; // [sp-14h] [bp-1B0h]@35
  unsigned int v155; // [sp-14h] [bp-1B0h]@43
  const char *v156; // [sp-14h] [bp-1B0h]@58
  unsigned int v157; // [sp-14h] [bp-1B0h]@88
  unsigned int v158; // [sp-14h] [bp-1B0h]@131
  unsigned int v159; // [sp-14h] [bp-1B0h]@207
  unsigned int v160; // [sp-10h] [bp-1ACh]@1
  std::exception thisa; // [sp+0h] [bp-19Ch]@218
  std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > setNpcID; // [sp+Ch] [bp-190h]@161
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> result; // [sp+1Ch] [bp-180h]@122
  int bUseAutoWay; // [sp+24h] [bp-178h]@7
  PLAYER_QUEST_INFO *pPlayerQuestInfo; // [sp+28h] [bp-174h]@12
  void *lpQuest; // [sp+2Ch] [bp-170h]@12
  unsigned int iAutoRunNum; // [sp+30h] [bp-16Ch]@1
  unsigned int nPosY; // [sp+34h] [bp-168h]@10
  unsigned __int16 *i; // [sp+38h] [bp-164h]@1
  unsigned int nPosX; // [sp+3Ch] [bp-160h]@16
  unsigned int Mob_ID; // [sp+40h] [bp-15Ch]@16
  char *_What; // [sp+44h] [bp-158h]@111
  PLAYER_QUEST_STATUS nIndex; // [sp+48h] [bp-154h]@12
  PgWinText *pkText; // [sp+4Ch] [bp-150h]@30
  PLAYER_QUEST_INFO questInfo; // [sp+50h] [bp-14Ch]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNpc; // [sp+70h] [bp-12Ch]@167
  char szTemp[256]; // [sp+8Ch] [bp-110h]@12
  unsigned int v178; // [sp+18Ch] [bp-10h]@1
  int v179; // [sp+198h] [bp-4h]@24
  int v180; // [sp+19Ch] [bp+0h]@1

  v178 = (unsigned int)&v180 ^ __security_cookie;
  v160 = (unsigned int)&v180 ^ __security_cookie;
  v2 = this;
  v3 = this->baseclass_0.m_pkFrameWork;
  i = (unsigned __int16 *)qID;
  GameFrameWork::SetRewardWinQuestID((GameFrameWork *)v3, qID);
  SlideListWin::RemoveAllList(v2->m_pListWinContent);
  v4 = v2->m_pListWinContent;
  v5 = 0;
  iAutoRunNum = 0;
  if ( v4->m_nMaxViewListCnt > 0 )
  {
    do
    {
      if ( v5 < (signed int)((char *)v4->m_vecButList.baseclass_0._Mylast
                           - *(_DWORD *)&v4->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
      {
        v6 = *(_DWORD *)(*(_DWORD *)&v4->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
        if ( (*(_DWORD *)(v6 + 336) - *(_DWORD *)(v6 + 332)) >> 2 )
        {
          v7 = **(_DWORD **)(v6 + 332);
          if ( v7 )
            (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 172))(0);
        }
      }
      v4 = v2->m_pListWinContent;
      ++v5;
    }
    while ( (signed int)v5 < v4->m_nMaxViewListCnt );
  }
  LOBYTE(bUseAutoWay) = 1;
  if ( !ChargedItemList::IsEffecting(EE_AUTOPATHFIND) && User::Lv(&g_kUser) > 0x3C )
    LOBYTE(bUseAutoWay) = 0;
  v8 = QuestDataMgr::GetQuest();
  nPosY = (unsigned int)v8;
  if ( v8 )
  {
    v9 = v8->m_pQuestData;
    if ( v9 )
    {
      pPlayerQuestInfo = CQuest::GetQuestInfo(v8, qID);
      v10 = CQuestData::GetQuestData(v9, qID);
      v11 = v2->m_pListWinContent;
      v12 = v10;
      lpQuest = v10;
      SlideListWin::AddText(v11, &byte_9BF827);
      TextData::Get(0x9AF8F4FFu);
      sprintf(szTemp, "<%s>");
      SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      CQuestWin2::SetQuestContentText(v2, *((_DWORD *)v12 + 2), 0);
      SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF836);
      nIndex = CQuest::GetNewQuestStatus((CQuest *)nPosY, *((_WORD *)v12 + 2));
      if ( nIndex == 5 && !v2->m_bAutoClick )
      {
        v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v13 )
        {
          GameFrameWork::NcQuestReadReq((GameFrameWork *)v13, *((_WORD *)v12 + 2));
          questInfo.ID = *((_WORD *)v12 + 2);
          questInfo.Status = 20;
          CQuest::AddQuestInfo((CQuest *)nPosY, &questInfo);
        }
        nPosX = User::Lv(&g_kUser);
        Mob_ID = 0;
        if ( CQuestData::GetNumOfQuestData(v9) <= 0u )
        {
LABEL_21:
          ((void (__stdcall *)(_DWORD))v2->m_pkNewQuestReady->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        }
        else
        {
          while ( 1 )
          {
            v14 = CQuestData::GetQuestDataByIndex(v9, Mob_ID);
            v15 = CQuest::GetNewQuestStatus((CQuest *)nPosY, v14->ID);
            if ( v2->m_nCurSelTab != 2 || (signed int)(nPosX - v14->Start.LevelMin) <= 150 )
            {
              if ( v15 == 5 )
                break;
            }
            ++Mob_ID;
            if ( (signed int)Mob_ID >= CQuestData::GetNumOfQuestData(v9) )
              goto LABEL_21;
          }
        }
      }
      if ( *((_BYTE *)lpQuest + 25) || v2->m_nCurSelTab != 2 )
      {
LABEL_40:
        if ( (unsigned __int16)i == -1 || v2->m_nCurSelTab != 1 )
        {
          v36 = lpQuest;
        }
        else
        {
          v34 = v2->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          if ( nIndex == 8 )
            v155 = -637277950;
          else
            v155 = -284824239;
          v35 = TextData::Get(v155);
          ((void (__thiscall *)(PgWinText *, char *, unsigned int))v34[118].__vecDelDtor)(v2->m_pkButText1, v35, v160);
          v36 = lpQuest;
          if ( *((_BYTE *)lpQuest + 88) || nIndex != 8 )
          {
            ((void (__cdecl *)(signed int))v2->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
            ((void (__stdcall *)(_DWORD))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
            ((void (__stdcall *)(_DWORD))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          }
          else
          {
            ((void (__cdecl *)(_DWORD))v2->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
            ((void (__stdcall *)(signed int))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
            ((void (__stdcall *)(signed int))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          }
        }
        TextData::Get(0x7A95849Cu);
        sprintf(szTemp, "<%s>");
        SlideListWin::AddText(v2->m_pListWinContent, szTemp);
        if ( *((_BYTE *)v36 + 89) )
        {
          sprintf(szTemp, "Level : %d");
          SlideListWin::AddText(v2->m_pListWinContent, szTemp);
        }
        Mob_ID = 0;
        i = (unsigned __int16 *)&v2->m_pkAutoRunBut[iAutoRunNum];
        nIndex = (PLAYER_QUEST_STATUS)((char *)v36 + 98);
        while ( *(_BYTE *)(nIndex - 6) )
        {
          if ( *(_BYTE *)(nIndex - 2) == 1 )
          {
            v41 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                    ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                    *(_WORD *)(nIndex - 4));
            if ( !*(_BYTE *)nIndex )
            {
              v153 = "%s %d/%d";
              v152 = szTemp;
              goto LABEL_74;
            }
            v42 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
            v43 = *(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
            nPosX = *(_WORD *)(nIndex - 4);
            if ( (unsigned __int8)(*(int (__thiscall **)(int, unsigned int))(v43 + 16))(
                                    ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                                    nPosX) )
            {
              if ( (unsigned __int16)nPosX <= *(_WORD *)(v42 + 200) )
              {
                v44 = *(_DWORD *)(v42 + 196) + 4 * (unsigned __int16)nPosX;
                if ( *(_DWORD *)v44 )
                {
                  if ( *(_DWORD *)v44 )
                  {
                    v45 = *(_BYTE *)nIndex;
                    if ( *(_BYTE *)nIndex == 1 )
                    {
                      v153 = "%s %d/%d";
                      v152 = szTemp;
                      goto LABEL_74;
                    }
                    if ( v45 == 2 )
                    {
                      v153 = "%s %d/%d";
LABEL_73:
                      v152 = szTemp;
LABEL_74:
                      sprintf(v152, v153);
                    }
                    else
                    {
                      if ( v45 == 3 )
                      {
                        v153 = "%s %d/%d";
                        goto LABEL_73;
                      }
                      if ( v45 == 4 )
                      {
                        v153 = "%s %d/%d";
                        goto LABEL_73;
                      }
                    }
                  }
                }
              }
            }
LABEL_75:
            v156 = szTemp;
LABEL_76:
            v46 = SlideListWin::AddText(v2->m_pListWinContent, v156);
            v47 = v46;
            if ( v46 > 0 )
            {
              v48 = v2->m_pListWinContent;
              if ( v46 < v48->m_nMaxViewListCnt )
              {
                if ( v46 < (unsigned int)((signed int)((char *)v48->m_vecButList.baseclass_0._Mylast
                                                     - *(_DWORD *)&v48->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2) )
                {
                  v49 = *(_DWORD *)(*(_DWORD *)&v48->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v46);
                  if ( (*(_DWORD *)(v49 + 336) - *(_DWORD *)(v49 + 332)) >> 2 )
                  {
                    pkText = (PgWinText *)**(_DWORD **)(v49 + 332);
                    if ( pkText )
                    {
                      v50 = SlideListWin::GetColumPosX(v48, v47, 0);
                      v51 = v2->m_pListWinContent;
                      nPosX = v50;
                      v52 = SlideListWin::GetColumPosY(v51, v47, 0);
                      v53 = **(_DWORD **)i;
                      nPosY = v52;
                      (*(void (__stdcall **)(signed int))(v53 + 256))(1);
                      (*(void (__stdcall **)(unsigned int))(**(_DWORD **)i + 172))(nPosX);
                      (*(void (__stdcall **)(unsigned int))(**(_DWORD **)i + 176))(nPosY);
                      v54 = pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                      v55 = (*(int (__cdecl **)(unsigned int))(**(_DWORD **)i + 144))(v160);
                      v54[43].__vecDelDtor((NiRefObject *)pkText, v55);
                    }
                  }
                }
              }
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)i + 520))(*(_WORD *)(nIndex - 4));
              nPosX = *(_WORD *)(nIndex - 4);
              v56 = 0;
              if ( ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() )
              {
                do
                {
                  if ( *((_WORD *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4),
                                    v56)
                       + 1) == (_WORD)nPosX )
                    break;
                  ++v56;
                }
                while ( v56 < ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() );
              }
              if ( CDataReader::GetRecord(
                     (CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4),
                     v56)
                && v2->m_nCurSelTab != 2
                && (_BYTE)bUseAutoWay )
              {
                v57 = iAutoRunNum;
                v58 = i;
                v2->m_arryAutoButEnable[iAutoRunNum] = 1;
                (*(void (__stdcall **)(signed int))(**(_DWORD **)v58 + 240))(1);
                nPosX = *(_DWORD *)i;
                v157 = 984975493;
              }
              else
              {
                v57 = iAutoRunNum;
                v59 = i;
                v2->m_arryAutoButEnable[iAutoRunNum] = 0;
                nPosX = *(_DWORD *)v59;
                v157 = -1985051943;
              }
              v60 = TextData2::Get(v157);
              PgWin::SetToolTipWinText((PgWin *)nPosX, v60);
              v61 = v2->m_pListWinContent;
              i += 2;
              iAutoRunNum = v57 + 1;
              SlideListWin::SetData(v61, v47, v57 + 1);
            }
            goto LABEL_91;
          }
          if ( *(_BYTE *)(nIndex - 2) == 2 )
          {
            v39 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                    ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                    *(_WORD *)(nIndex - 4));
            v40 = TextData::Get(0x3C497E96u);
            sprintf(szTemp, v40);
            v156 = szTemp;
            goto LABEL_76;
          }
          if ( *(_BYTE *)(nIndex - 2) == 3 )
          {
            v37 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                    ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                    *(_WORD *)(nIndex - 4));
            v38 = TextData::Get(0x8DECE4E2u);
            sprintf(szTemp, v38);
            goto LABEL_75;
          }
LABEL_91:
          nIndex += 8;
          ++Mob_ID;
          if ( (signed int)Mob_ID >= 5 )
            break;
        }
        v62 = (char *)lpQuest + 134;
        nPosX = 0;
        v63 = (char **)&v2->m_pkAutoRunBut[iAutoRunNum];
        for ( i = (unsigned __int16 *)((char *)lpQuest + 134); ; v62 = (char *)i )
        {
          if ( !*(v62 - 2) )
          {
LABEL_159:
            v109 = lpQuest;
            if ( *((_BYTE *)lpQuest + 162) )
            {
              v110 = TextData::Get(0x39323D31u);
              sprintf(szTemp, v110);
              SlideListWin::AddText(v2->m_pListWinContent, szTemp);
            }
            v111 = 0;
            setNpcID.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
            v112 = operator new(0x10u);
            if ( !v112 )
            {
              _What = 0;
              std::exception::exception(&thisa, (const char *const *)&_What);
              thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
              _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
            }
            setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v112;
            *(_DWORD *)v112 = v112;
            setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead;
            setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead;
            setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
            setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
            v179 = 1;
            v113 = (int)((char *)v109 + 96);
            do
            {
              if ( !*(_BYTE *)(v113 - 4) )
                break;
              if ( !*(_BYTE *)v113 )
              {
                v114 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
                         &setNpcID.baseclass_0.baseclass_0,
                         (unsigned __int16 *)(v113 - 2));
                std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
                  &setNpcID.baseclass_0,
                  &result,
                  v114,
                  0);
              }
              ++v111;
              v113 += 8;
            }
            while ( v111 < 5 );
            strNpc.baseclass_0._Myres = 15;
            strNpc.baseclass_0._Mysize = 0;
            strNpc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            LOBYTE(v179) = 2;
            v115 = TextData::Get(0xEE023049u);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strNpc, v115, strlen(v115));
            v116 = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
            while ( v116 != setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead )
            {
              v117 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
              _What = (char *)v116->_Myval;
              v118 = (*(int (__thiscall **)(int, char *))(v117 + 16))(ITableBase<MobInfo_MobInfoTab>::ms_pkTable, _What);
              sprintf(szTemp, "   %s");
              v119 = (int)szTemp;
              do
                v120 = *(_BYTE *)v119++;
              while ( v120 );
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
                &strNpc,
                szTemp,
                v119 - (_DWORD)&szTemp[1]);
              if ( !v116->_Isnil )
              {
                v121 = v116->_Right;
                if ( v121->_Isnil )
                {
                  for ( j = v116->_Parent; !j->_Isnil; j = j->_Parent )
                  {
                    if ( v116 != j->_Right )
                      break;
                    v116 = j;
                  }
                  v116 = j;
                }
                else
                {
                  v116 = v116->_Right;
                  for ( k = v121->_Left; !k->_Isnil; k = k->_Left )
                    v116 = k;
                }
              }
            }
            v124 = *(const char **)&strNpc;
            if ( strNpc.baseclass_0._Myres < 0x10 )
              v124 = (const char *)&strNpc;
            v125 = SlideListWin::AddText(v2->m_pListWinContent, v124);
            v126 = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
            Mob_ID = v125;
            pPlayerQuestInfo = (PLAYER_QUEST_INFO *)v126;
            if ( v125 > 0 )
            {
              v127 = v2->m_pListWinContent;
              if ( v125 < v127->m_nMaxViewListCnt
                && v125 < (unsigned int)((signed int)((char *)v127->m_vecButList.baseclass_0._Mylast
                                                    - *(_DWORD *)&v127->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
                && (v128 = *(_DWORD *)(*(_DWORD *)&v127->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v125),
                    (*(_DWORD *)(v128 + 336) - *(_DWORD *)(v128 + 332)) >> 2)
                && (nPosX = **(_DWORD **)(v128 + 332)) != 0 )
              {
                v129 = (signed int)((char *)v127->m_vecButList.baseclass_0._Mylast
                                  - *(_DWORD *)&v127->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                if ( v125 < (unsigned int)v129
                  && (v130 = *(_DWORD *)(*(_DWORD *)&v127->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v125),
                      v131 = *(_DWORD *)(v130 + 336) - *(_DWORD *)(v130 + 332),
                      *(_DWORD *)&result.baseclass_0.second = *(_DWORD *)(*(_DWORD *)&v127->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                        + 4 * v125),
                      v131 >> 2)
                  && (v132 = **(_DWORD **)(v130 + 332)) != 0 )
                {
                  if ( v125 < v129 && v130 )
                  {
                    v133 = (*(int (__cdecl **)(unsigned int))(*(_DWORD *)v132 + 164))(v160);
                    v134 = ((int (__thiscall *)(SlideListWin *))v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v127)
                         + v133;
                    pkText = (PgWinText *)(v134 + (*(int (**)(void))(**(_DWORD **)&result.baseclass_0.second + 164))());
                  }
                  else
                  {
                    pkText = 0;
                  }
                }
                else
                {
                  pkText = 0;
                }
                v135 = v2->m_pListWinContent;
                v136 = (signed int)((char *)v135->m_vecButList.baseclass_0._Mylast
                                  - *(_DWORD *)&v135->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                if ( v125 < (unsigned int)v136
                  && (v137 = *(_DWORD *)(*(_DWORD *)&v135->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v125),
                      (*(_DWORD *)(v137 + 336) - *(_DWORD *)(v137 + 332)) >> 2)
                  && (_What = (char *)**(_DWORD **)(v137 + 332)) != 0 )
                {
                  if ( v125 < v136 && v137 )
                  {
                    v139 = ((int (__cdecl *)(unsigned int))v135->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v160);
                    v140 = (*(int (**)(void))(*(_DWORD *)_What + 168))();
                    v141 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v137 + 168);
                    _What = (char *)(v140 + v139);
                    v142 = v141(v137);
                    v138 = &_What[v142];
                  }
                  else
                  {
                    v138 = 0;
                  }
                }
                else
                {
                  v138 = 0;
                }
                v143 = iAutoRunNum;
                ((void (__stdcall *)(signed int))v2->m_pkAutoRunBut[iAutoRunNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                ((void (__stdcall *)(PgWinText *))v2->m_pkAutoRunBut[v143].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(pkText);
                ((void (__stdcall *)(char *))v2->m_pkAutoRunBut[v143].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v138);
                v144 = *(_DWORD *)nPosX;
                v145 = ((int (__cdecl *)(unsigned int))v2->m_pkAutoRunBut[v143].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v160);
                (*(void (__thiscall **)(unsigned int, int))(v144 + 172))(nPosX, v145);
              }
              else
              {
                v143 = iAutoRunNum;
              }
              ((void (__stdcall *)(_DWORD))v2->m_pkAutoRunBut[v143].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(*(_WORD *)((char *)&pPlayerQuestInfo->Data.EndTime + 1));
              if ( v2->m_nCurSelTab != 2 && (_BYTE)bUseAutoWay )
              {
                v2->m_arryAutoButEnable[v143] = 1;
                ((void (__stdcall *)(signed int))v2->m_pkAutoRunBut[v143].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
                v159 = 984975493;
              }
              else
              {
                v2->m_arryAutoButEnable[v143] = 0;
                v159 = -1985051943;
              }
              v146 = (PgWin *)v2->m_pkAutoRunBut[v143].m_pObject;
              v147 = TextData2::Get(v159);
              PgWin::SetToolTipWinText(v146, v147);
              SlideListWin::SetData(v2->m_pListWinContent, Mob_ID, v143 + 1);
            }
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF84A);
            TextData::Get(0xEEE74F4Du);
            sprintf(szTemp, "<%s>");
            SlideListWin::AddText(v2->m_pListWinContent, szTemp);
            v148 = lpQuest;
            CQuestWin2::SetQuestContentText(v2, *((_DWORD *)lpQuest + 3), 0);
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF84B);
            SlideListWin::AlignText(v2->m_pListWinContent, 4u);
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF852);
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF853);
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF85D);
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF85E);
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF85F);
            SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF871);
            CQuestWin2::UpdateLocationInfo(v2, *((_WORD *)v148 + 2));
            v149 = v2->m_pSlideBarContent;
            if ( v149 )
            {
              if ( v2->m_pListWinContent )
              {
                SlideBar::SetSplitCnt(v149, 0);
                v2->m_pListWinContent->m_nViewStartPos = 0;
                SlideListWin::UpdateViewList(v2->m_pListWinContent);
                v150 = v2->m_pkRewardWin;
                if ( v150 )
                  v150->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
              }
            }
            if ( strNpc.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&strNpc);
            strNpc.baseclass_0._Myres = 15;
            strNpc.baseclass_0._Mysize = 0;
            strNpc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            v151 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
            v179 = 3;
            std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
              &setNpcID.baseclass_0,
              (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&_What,
              v151,
              (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead);
            operator delete(setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead);
            return;
          }
          v64 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
          pPlayerQuestInfo = (PLAYER_QUEST_INFO *)*(_WORD *)v62;
          v65 = (*(int (__thiscall **)(int, PLAYER_QUEST_INFO *))(v64 + 16))(
                  ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                  pPlayerQuestInfo);
          Inventory::GetItemCnt(&g_kInventory, *i);
          sprintf(szTemp, "%s %d/%d");
          v66 = SlideListWin::AddText(v2->m_pListWinContent, szTemp);
          v67 = *((_BYTE *)lpQuest + 192);
          v68 = v66;
          v69 = 0;
          nIndex = v68;
          Mob_ID = 65535;
          if ( v67 > 0 )
          {
            v70 = (char *)lpQuest + 208;
            while ( *(v70 - 12) )
            {
              v68 = nIndex;
              if ( *(_DWORD *)v70 == *i )
              {
                Mob_ID = *((_WORD *)lpQuest + 16 * v69 + 100);
                break;
              }
              ++v69;
              v70 += 32;
              if ( v69 >= v67 )
                break;
            }
          }
          nPosY = 0;
          if ( ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() )
          {
            do
            {
              if ( *((_WORD *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4),
                                nPosY)
                   + 1) == (_WORD)Mob_ID )
                break;
              ++nPosY;
            }
            while ( nPosY < ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() );
          }
          v71 = CDataReader::GetRecord(
                  (CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4),
                  nPosY);
          if ( (_WORD)Mob_ID == -1 )
            break;
          if ( !v71 )
            break;
          if ( (signed int)v68 <= 0 )
            goto LABEL_158;
          v72 = v2->m_pListWinContent;
          pkText = (PgWinText *)v72;
          if ( (signed int)v68 < v72->m_nMaxViewListCnt )
          {
            if ( v68 < (signed int)((char *)v72->m_vecButList.baseclass_0._Mylast
                                  - *(_DWORD *)&v72->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
            {
              v73 = *(_DWORD *)(*(_DWORD *)&v72->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v68);
              if ( (*(_DWORD *)(v73 + 336) - *(_DWORD *)(v73 + 332)) >> 2 )
              {
                _What = (char *)**(_DWORD **)(v73 + 332);
                if ( _What )
                {
                  v74 = (signed int)((char *)v72->m_vecButList.baseclass_0._Mylast
                                   - *(_DWORD *)&v72->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                  if ( v68 < v74
                    && (v75 = *(_DWORD *)(*(_DWORD *)&v72->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v68),
                        (*(_DWORD *)(v75 + 336) - *(_DWORD *)(v75 + 332)) >> 2)
                    && (pPlayerQuestInfo = (PLAYER_QUEST_INFO *)**(_DWORD **)(v75 + 332)) != 0 )
                  {
                    if ( (signed int)v68 < v74 && v75 )
                    {
                      v77 = (*(int (__cdecl **)(unsigned int))(*(_DWORD *)v75 + 164))(v160);
                      v78 = (void *)(((int (*)(void))pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)()
                                   + v77);
                      v79 = *(int (**)(void))(*(_DWORD *)&pPlayerQuestInfo->ID + 164);
                      pkText = (PgWinText *)v78;
                      v76 = (int)((char *)v78 + v79());
                    }
                    else
                    {
                      v76 = 0;
                    }
                  }
                  else
                  {
                    v76 = 0;
                  }
                  v80 = v2->m_pListWinContent;
                  v81 = (signed int)((char *)v80->m_vecButList.baseclass_0._Mylast
                                   - *(_DWORD *)&v80->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                  nPosY = v76;
                  pPlayerQuestInfo = (PLAYER_QUEST_INFO *)v81;
                  if ( nIndex < (unsigned int)v81
                    && (v82 = *(_DWORD *)(*(_DWORD *)&v80->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]
                                        + 4 * nIndex),
                        v83 = *(_DWORD *)(v82 + 336) - *(_DWORD *)(v82 + 332),
                        pkText = *(PgWinText **)(*(_DWORD *)&v80->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]
                                               + 4 * nIndex),
                        v83 >> 2)
                    && (*(_DWORD *)&result.baseclass_0.second = **(_DWORD **)(v82 + 332)) != 0 )
                  {
                    if ( nIndex < (signed int)pPlayerQuestInfo && pkText )
                    {
                      v84 = ((int (__cdecl *)(unsigned int))v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v160);
                      v85 = ((int (*)(void))pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)()
                          + v84;
                      v86 = (void *)(v85 + (*(int (**)(void))(**(_DWORD **)&result.baseclass_0.second + 168))());
                      v76 = nPosY;
                      pkText = (PgWinText *)v86;
                    }
                    else
                    {
                      pkText = 0;
                    }
                  }
                  else
                  {
                    pkText = 0;
                  }
                  (*(void (__stdcall **)(signed int))(*(_DWORD *)*v63 + 256))(1);
                  (*(void (__stdcall **)(int))(*(_DWORD *)*v63 + 172))(v76);
                  (*(void (__stdcall **)(PgWinText *))(*(_DWORD *)*v63 + 176))(pkText);
                  v87 = _What;
                  v88 = *(_DWORD *)*v63;
                  _What = (char *)(*(_DWORD *)_What + 172);
                  v89 = (*(int (__cdecl **)(unsigned int))(v88 + 144))(v160);
                  (*(void (__thiscall **)(char *, int))_What)(v87, v89);
                  v68 = nIndex;
                }
              }
            }
          }
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v63 + 520))((unsigned __int16)Mob_ID);
          if ( v2->m_nCurSelTab == 2 || !(_BYTE)bUseAutoWay )
          {
            v2->m_arryAutoButEnable[iAutoRunNum] = 0;
            _What = *v63;
LABEL_156:
            v158 = -1985051943;
            goto LABEL_157;
          }
          v2->m_arryAutoButEnable[iAutoRunNum] = 1;
          (*(void (__stdcall **)(signed int))(*(_DWORD *)*v63 + 240))(1);
          _What = *v63;
          v158 = 984975493;
LABEL_157:
          v107 = TextData2::Get(v158);
          PgWin::SetToolTipWinText((PgWin *)_What, v107);
          v108 = v2->m_pListWinContent;
          ++v63;
          ++iAutoRunNum;
          SlideListWin::SetData(v108, v68, iAutoRunNum);
LABEL_158:
          i += 3;
          ++nPosX;
          if ( (signed int)nPosX >= 5 )
            goto LABEL_159;
        }
        if ( (signed int)v68 <= 0 )
          goto LABEL_158;
        v90 = v2->m_pListWinContent;
        pkText = (PgWinText *)v90;
        if ( (signed int)v68 < v90->m_nMaxViewListCnt )
        {
          if ( v68 < (signed int)((char *)v90->m_vecButList.baseclass_0._Mylast
                                - *(_DWORD *)&v90->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
          {
            v91 = *(_DWORD *)(*(_DWORD *)&v90->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v68);
            if ( (*(_DWORD *)(v91 + 336) - *(_DWORD *)(v91 + 332)) >> 2 )
            {
              pPlayerQuestInfo = (PLAYER_QUEST_INFO *)**(_DWORD **)(v91 + 332);
              if ( pPlayerQuestInfo )
              {
                v92 = (signed int)((char *)v90->m_vecButList.baseclass_0._Mylast
                                 - *(_DWORD *)&v90->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                if ( v68 < v92
                  && (v93 = *(_DWORD *)(*(_DWORD *)&v90->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v68),
                      (*(_DWORD *)(v93 + 336) - *(_DWORD *)(v93 + 332)) >> 2)
                  && (_What = (char *)**(_DWORD **)(v93 + 332)) != 0 )
                {
                  if ( (signed int)v68 < v92 && v93 )
                  {
                    v95 = (*(int (__cdecl **)(unsigned int))(*(_DWORD *)v93 + 164))(v160);
                    v96 = ((int (*)(void))pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)()
                        + v95;
                    v97 = *(int (**)(void))(*(_DWORD *)_What + 164);
                    *(_DWORD *)&result.baseclass_0.second = v96;
                    v94 = (void *)(v96 + v97());
                  }
                  else
                  {
                    v94 = 0;
                  }
                }
                else
                {
                  v94 = 0;
                }
                v98 = v2->m_pListWinContent;
                v99 = (signed int)((char *)v98->m_vecButList.baseclass_0._Mylast
                                 - *(_DWORD *)&v98->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                pkText = (PgWinText *)v94;
                _What = (char *)v99;
                if ( nIndex < (unsigned int)v99
                  && (v100 = *(_DWORD *)(*(_DWORD *)&v98->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]
                                       + 4 * nIndex),
                      v101 = *(_DWORD *)(v100 + 336) - *(_DWORD *)(v100 + 332),
                      Mob_ID = *(_DWORD *)(*(_DWORD *)&v98->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]
                                         + 4 * nIndex),
                      v101 >> 2)
                  && (*(_DWORD *)&result.baseclass_0.second = **(_DWORD **)(v100 + 332)) != 0 )
                {
                  if ( nIndex < (signed int)_What && Mob_ID )
                  {
                    v102 = ((int (__cdecl *)(unsigned int))v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v160);
                    v103 = (*(int (**)(void))(*(_DWORD *)Mob_ID + 168))() + v102;
                    v104 = v103 + (*(int (**)(void))(**(_DWORD **)&result.baseclass_0.second + 168))();
                    v94 = pkText;
                    Mob_ID = v104;
                  }
                  else
                  {
                    Mob_ID = 0;
                  }
                }
                else
                {
                  Mob_ID = 0;
                }
                (*(void (__stdcall **)(signed int))(*(_DWORD *)*v63 + 256))(1);
                (*(void (__stdcall **)(void *))(*(_DWORD *)*v63 + 172))(v94);
                (*(void (__stdcall **)(unsigned int))(*(_DWORD *)*v63 + 176))(Mob_ID);
                v105 = *(_DWORD *)*v63;
                _What = (char *)(*(_DWORD *)&pPlayerQuestInfo->ID + 172);
                v106 = (*(int (__cdecl **)(unsigned int))(v105 + 144))(v160);
                (*(void (__thiscall **)(PLAYER_QUEST_INFO *, int))_What)(pPlayerQuestInfo, v106);
                v68 = nIndex;
              }
            }
          }
        }
        (*(void (__stdcall **)(signed int))(*(_DWORD *)*v63 + 520))(65535);
        v2->m_arryAutoButEnable[iAutoRunNum] = 0;
        _What = *v63;
        goto LABEL_156;
      }
      TextData2::Get(0xEAF7DC4Cu);
      sprintf(szTemp, "<%s>");
      v16 = SlideListWin::AddText(v2->m_pListWinContent, szTemp);
      SlideListWin::SetFontColor(v2->m_pListWinContent, v16, 255, 255, 0);
      *(_DWORD *)&questInfo.Data.End_NPCMobCount[0] = 15;
      *(unsigned int *)((char *)&questInfo.Data.RepeatCount + 1) = 0;
      BYTE1(questInfo.Data.StartTime) = 0;
      v179 = 0;
      v17 = TextData2::Get(0x346578AAu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&questInfo.Data.StartTime + 1),
        v17,
        strlen(v17));
      v18 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
              ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
              *((_WORD *)lpQuest + 15));
      sprintf(szTemp, "   %s");
      v19 = (int)szTemp;
      do
        v20 = *(_BYTE *)v19++;
      while ( v20 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&questInfo.Data.StartTime + 1),
        szTemp,
        v19 - (_DWORD)&szTemp[1]);
      v21 = *(const char **)((char *)&questInfo.Data.StartTime + 1);
      if ( *(_DWORD *)&questInfo.Data.End_NPCMobCount[0] < 0x10u )
        v21 = (char *)&questInfo.Data.StartTime + 1;
      v22 = SlideListWin::AddText(v2->m_pListWinContent, v21);
      SlideListWin::SetFontColor(v2->m_pListWinContent, v22, 255, 255, 0);
      SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF837);
      if ( v22 <= 0 )
      {
LABEL_38:
        v179 = -1;
        if ( *(_DWORD *)&questInfo.Data.End_NPCMobCount[0] >= 0x10u )
          operator delete(*(void **)((char *)&questInfo.Data.StartTime + 1));
        goto LABEL_40;
      }
      v23 = v2->m_pListWinContent;
      if ( v22 >= v23->m_nMaxViewListCnt )
      {
        ((void (__stdcall *)(_DWORD, unsigned int))v2->m_pkAutoRunBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
          0,
          v160);
        v29 = (PgWinText *)v2->m_pkAutoRunBut[0].m_pObject;
        v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
        v160 = 0;
      }
      else
      {
        pkText = SlideListWin::GetTextWin(v23, v22, 0);
        if ( !pkText )
        {
LABEL_34:
          ((void (__stdcall *)(_DWORD))v2->m_pkAutoRunBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(*((_WORD *)lpQuest + 15));
          v31 = (PgWin *)v2->m_pkAutoRunBut[0].m_pObject;
          if ( (_BYTE)bUseAutoWay )
            v154 = 984975493;
          else
            v154 = -1985051943;
          v32 = TextData2::Get(v154);
          PgWin::SetToolTipWinText(v31, v32);
          v2->m_arryAutoButEnable[0] = bUseAutoWay;
          v33 = v2->m_pListWinContent;
          iAutoRunNum = 1;
          SlideListWin::SetData(v33, v22, 1u);
          goto LABEL_38;
        }
        v24 = SlideListWin::GetColumPosX(v23, v22, 0);
        v25 = SlideListWin::GetColumPosY(v2->m_pListWinContent, v22, 0);
        v26 = v2->m_pkAutoRunBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
        nPosX = v25;
        ((void (__stdcall *)(int, unsigned int))v26)(bUseAutoWay, v160);
        ((void (__stdcall *)(signed int))v2->m_pkAutoRunBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(int))v2->m_pkAutoRunBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v24);
        ((void (__stdcall *)(unsigned int))v2->m_pkAutoRunBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(nPosX);
        v27 = pkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v28 = ((int (*)(void))v2->m_pkAutoRunBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
        v29 = pkText;
        v160 = v28;
        v30 = v27[43].__vecDelDtor;
      }
      ((void (__thiscall *)(PgWinText *))v30)(v29);
      goto LABEL_34;
    }
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (0060F610) --------------------------------------------------------
void __thiscall EpicQuestWin::UpDateViewQuesContent(EpicQuestWin *this, unsigned __int16 qID)
{
  EpicQuestWin *v2; // edi@1
  SlideListWin *v3; // ecx@1
  CQuest *v4; // eax@1
  CQuestData *v5; // ebx@2
  void *v6; // eax@3
  SlideListWin *v7; // ecx@3
  void *v8; // esi@3
  int v9; // ebx@3
  int v10; // eax@5
  char *v11; // eax@5
  char *v12; // ST08_4@5
  int v13; // eax@5
  char v14; // cl@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@7
  int v16; // eax@9
  int v17; // ebx@12
  char v18; // kr08_1@17
  char *v19; // eax@17
  SlideListWin *v20; // ecx@17
  char v21; // kr09_1@18
  char *v22; // eax@18
  char v23; // kr0A_1@19
  char v24; // cl@22
  unsigned __int16 *v25; // esi@34
  char v26; // kr0B_1@36
  void *v27; // esi@37
  char *v28; // eax@38
  void *v29; // eax@39
  signed int v30; // edi@40
  int v31; // esi@40
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v32; // eax@43
  char *v33; // eax@45
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v34; // esi@45
  char v35; // kr0C_1@46
  int v36; // eax@46
  char v37; // cl@47
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v38; // eax@49
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *j; // eax@50
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *i; // eax@53
  const char *v41; // eax@58
  int v42; // esi@60
  SlideBar *v43; // ecx@60
  int v44; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v45; // ecx@65
  const char *v46; // [sp-20h] [bp-198h]@20
  const char *v47; // [sp-14h] [bp-18Ch]@17
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-178h]@67
  std::set<unsigned short,std::less<unsigned short>,std::allocator<unsigned short> > setNpcID; // [sp+Ch] [bp-16Ch]@39
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> result; // [sp+1Ch] [bp-15Ch]@12
  PLAYER_QUEST_INFO *pPlayerQuestInfo; // [sp+24h] [bp-154h]@3
  void *lpQuest; // [sp+28h] [bp-150h]@3
  int v53; // [sp+2Ch] [bp-14Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+30h] [bp-148h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNpc; // [sp+4Ch] [bp-12Ch]@45
  char szTemp[256]; // [sp+68h] [bp-110h]@3
  unsigned int v57; // [sp+168h] [bp-10h]@1
  int v58; // [sp+174h] [bp-4h]@5
  int v59; // [sp+178h] [bp+0h]@1

  v57 = (unsigned int)&v59 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinContent;
  v53 = (int)v2;
  SlideListWin::RemoveAllList(v3);
  v4 = QuestDataMgr::GetQuest();
  if ( !v4 || (v5 = v4->m_pQuestData) == 0 )
    return;
  pPlayerQuestInfo = CQuest::GetQuestInfo(v4, qID);
  v6 = CQuestData::GetQuestData(v5, qID);
  v7 = v2->m_pListWinContent;
  v8 = v6;
  lpQuest = v6;
  SlideListWin::AddText(v7, &byte_9BF872);
  TextData::Get(0x9AF8F4FFu);
  sprintf(szTemp, "<%s>");
  SlideListWin::AddText(v2->m_pListWinContent, szTemp);
  v9 = 0;
  EpicQuestWin::SetQuestContentText(v2, *((_DWORD *)v8 + 2), 0);
  SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF873);
  if ( !*((_BYTE *)v8 + 25) && !v2->m_eType )
  {
    TextData2::Get(0xEAF7DC4Cu);
    sprintf(szTemp, "<%s>");
    v10 = SlideListWin::AddText(v2->m_pListWinContent, szTemp);
    SlideListWin::SetFontColor(v2->m_pListWinContent, v10, 255, 255, 0);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v58 = 0;
    v11 = TextData2::Get(0x346578AAu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&thisa, v11, strlen(v11));
    v12 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(*((_WORD *)v8 + 15), 1)->Name;
    sprintf(szTemp, "   %s");
    v13 = (int)szTemp;
    do
      v14 = *(_BYTE *)v13++;
    while ( v14 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &thisa,
      szTemp,
      v13 - (_DWORD)&szTemp[1]);
    v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
    if ( thisa.baseclass_0._Myres < 0x10 )
      v15 = &thisa;
    v16 = SlideListWin::AddText(v2->m_pListWinContent, v15->baseclass_0.___u0.baseclass_0.dummy);
    v9 = 0;
    SlideListWin::SetFontColor(v2->m_pListWinContent, v16, 255, 255, 0);
    SlideListWin::AddText(v2->m_pListWinContent, &byte_9BF87B);
    v58 = -1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
  }
  TextData::Get(0x7A95849Cu);
  sprintf(szTemp, "<%s>");
  SlideListWin::AddText(v2->m_pListWinContent, szTemp);
  if ( *((_BYTE *)v8 + 89) )
  {
    sprintf(szTemp, "Level : %d");
    SlideListWin::AddText(v2->m_pListWinContent, szTemp);
  }
  *(_DWORD *)&result.baseclass_0.second = v9;
  v17 = (int)((char *)v8 + 94);
  while ( *(_BYTE *)(v17 - 2) )
  {
    if ( *(_BYTE *)(v17 + 2) == 1 )
    {
      v23 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
              ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
              *(_WORD *)v17);
      if ( *(_BYTE *)(v17 + 4) )
      {
        if ( !IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(*(_WORD *)v17, 1) )
          goto LABEL_31;
        v24 = *(_BYTE *)(v17 + 4);
        switch ( v24 )
        {
          case 1:
            v46 = "%s %d/%d";
            break;
          case 2:
            v46 = "%s %d/%d";
            break;
          case 3:
            v46 = "%s %d/%d";
            break;
          default:
            if ( v24 != 4 )
              goto LABEL_31;
            v46 = "%s %d/%d";
            break;
        }
      }
      else
      {
        v46 = "%s %d/%d";
      }
      sprintf(szTemp, v46);
      goto LABEL_31;
    }
    if ( *(_BYTE *)(v17 + 2) == 2 )
    {
      v21 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
              ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
              *(_WORD *)v17);
      v22 = TextData::Get(0x3C497E96u);
      sprintf(szTemp, v22);
LABEL_31:
      v20 = *(SlideListWin **)(v53 + 628);
      v47 = szTemp;
      goto LABEL_32;
    }
    if ( *(_BYTE *)(v17 + 2) == 3 )
    {
      v18 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
              ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
              *(_WORD *)v17);
      v19 = TextData::Get(0x8DECE4E2u);
      sprintf(szTemp, v19);
      v47 = szTemp;
      v20 = *(SlideListWin **)(v53 + 628);
LABEL_32:
      SlideListWin::AddText(v20, v47);
      v8 = lpQuest;
    }
    v17 += 8;
    ++*(_DWORD *)&result.baseclass_0.second;
    if ( *(_DWORD *)&result.baseclass_0.second >= 5 )
      break;
  }
  *(_DWORD *)&result.baseclass_0.second = 0;
  v25 = (unsigned __int16 *)((char *)v8 + 134);
  do
  {
    if ( !*((_BYTE *)v25 - 2) )
      break;
    v26 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
            *v25);
    Inventory::GetItemCnt(&g_kInventory, *v25);
    sprintf(szTemp, "%s %d/%d");
    SlideListWin::AddText(*(SlideListWin **)(v53 + 628), szTemp);
    v25 += 3;
    ++*(_DWORD *)&result.baseclass_0.second;
  }
  while ( *(_DWORD *)&result.baseclass_0.second < 5 );
  v27 = lpQuest;
  if ( *((_BYTE *)lpQuest + 162) )
  {
    v28 = TextData::Get(0x39323D31u);
    sprintf(szTemp, v28);
    SlideListWin::AddText(*(SlideListWin **)(v53 + 628), szTemp);
  }
  setNpcID.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v29 = operator new(0x10u);
  if ( !v29 )
  {
    pPlayerQuestInfo = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&pPlayerQuestInfo);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v29;
  *(_DWORD *)v29 = v29;
  setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead;
  setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead;
  setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v30 = 0;
  v58 = 1;
  v31 = (int)((char *)v27 + 96);
  do
  {
    if ( !*(_BYTE *)(v31 - 4) )
      break;
    if ( !*(_BYTE *)v31 )
    {
      v32 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
              &setNpcID.baseclass_0.baseclass_0,
              (unsigned __int16 *)(v31 - 2));
      std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
        &setNpcID.baseclass_0,
        &result,
        v32,
        0);
    }
    ++v30;
    v31 += 8;
  }
  while ( v30 < 5 );
  strNpc.baseclass_0._Myres = 15;
  strNpc.baseclass_0._Mysize = 0;
  strNpc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v58) = 2;
  v33 = TextData::Get(0xEE023049u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strNpc, v33, strlen(v33));
  v34 = setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  while ( v34 != setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v35 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
            ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
            v34->_Myval);
    sprintf(szTemp, "   %s");
    v36 = (int)szTemp;
    do
      v37 = *(_BYTE *)v36++;
    while ( v37 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &strNpc,
      szTemp,
      v36 - (_DWORD)&szTemp[1]);
    if ( !v34->_Isnil )
    {
      v38 = v34->_Right;
      if ( v38->_Isnil )
      {
        for ( i = v34->_Parent; !i->_Isnil; i = i->_Parent )
        {
          if ( v34 != i->_Right )
            break;
          v34 = i;
        }
        v34 = i;
      }
      else
      {
        v34 = v34->_Right;
        for ( j = v38->_Left; !j->_Isnil; j = j->_Left )
          v34 = j;
      }
    }
  }
  v41 = *(const char **)&strNpc;
  if ( strNpc.baseclass_0._Myres < 0x10 )
    v41 = (const char *)&strNpc;
  v42 = v53;
  SlideListWin::AddText(*(SlideListWin **)(v53 + 628), v41);
  SlideListWin::AddText(*(SlideListWin **)(v42 + 628), &byte_9BF8B6);
  TextData::Get(0xEEE74F4Du);
  sprintf(szTemp, "<%s>");
  SlideListWin::AddText(*(SlideListWin **)(v42 + 628), szTemp);
  EpicQuestWin::SetQuestContentText((EpicQuestWin *)v42, *((_DWORD *)lpQuest + 3), 0);
  SlideListWin::AddText(*(SlideListWin **)(v42 + 628), &byte_9BF8B7);
  SlideListWin::AlignText(*(SlideListWin **)(v42 + 628), 4u);
  SlideListWin::AddText(*(SlideListWin **)(v42 + 628), &byte_9BF8C5);
  SlideListWin::AddText(*(SlideListWin **)(v42 + 628), &byte_9BF8C6);
  SlideListWin::AddText(*(SlideListWin **)(v42 + 628), &byte_9BF8C7);
  v43 = *(SlideBar **)(v42 + 636);
  if ( v43 )
  {
    v44 = *(_DWORD *)(v42 + 628);
    if ( v44 )
    {
      SlideBar::SetSplitCnt(v43, *(_DWORD *)(v44 + 336));
      *(_DWORD *)(*(_DWORD *)(v42 + 628) + 344) = *(_DWORD *)(*(_DWORD *)(v42 + 636) + 300);
      SlideListWin::UpdateViewList(*(SlideListWin **)(v42 + 628));
    }
  }
  if ( strNpc.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strNpc);
  strNpc.baseclass_0._Myres = 15;
  strNpc.baseclass_0._Mysize = 0;
  strNpc.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v45 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v58 = 3;
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
    &setNpcID.baseclass_0,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&pPlayerQuestInfo,
    v45,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead);
  operator delete(setNpcID.baseclass_0.baseclass_0.baseclass_0._Myhead);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0060FF60) --------------------------------------------------------
void __thiscall CQuestWin2::UpDateViewQuestList(CQuestWin2 *this, bool bUseCurLevel, int iLevel)
{
  CQuest *v3; // eax@1
  void *v4; // edi@1
  void *v5; // eax@1
  QUEST_DATA *v6; // eax@3
  CQuest *v7; // edi@3
  unsigned __int16 *v8; // ebx@3
  unsigned __int16 v9; // ST24_2@3
  unsigned __int16 v10; // ST24_2@5
  PLAYER_QUEST_STATUS v11; // eax@5
  bool v12; // zf@5
  PLAYER_QUEST_STATUS v13; // esi@5
  signed int v14; // edi@7
  char *v15; // eax@10
  char *v16; // eax@13
  char *v17; // eax@14
  char *v18; // eax@17
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v19; // ecx@29
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v20; // eax@29
  std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *v21; // esi@29
  int v22; // eax@34
  int *v23; // eax@36
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v24; // eax@38
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v25; // eax@41
  int v26; // eax@44
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v27; // ecx@47
  bool v28; // ST24_1@49
  PLAYER_QUEST_STATUS v29; // ST20_4@49
  int v30; // ST1C_4@49
  int v31; // ST18_4@49
  int v32; // ST14_4@49
  unsigned int v33; // ST10_4@49
  const char *v34; // ST0C_4@49
  const char *v35; // eax@49
  void *v36; // esi@49
  char *v37; // eax@50
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v38; // esi@65
  CQuestWin2 *v39; // edi@66
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v40; // ecx@67
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *mm; // eax@70
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *ll; // eax@73
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v43; // eax@82
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *i1; // eax@83
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *nn; // eax@86
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v46; // esi@93
  CQuestWin2 *v47; // edi@94
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v48; // eax@98
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *kk; // eax@99
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *jj; // eax@102
  int v51; // esi@109
  int v52; // edi@109
  CQuestWin2 *v53; // ebx@110
  int v54; // eax@114
  int m; // eax@115
  int l; // eax@118
  int v57; // esi@123
  int v58; // edi@123
  CQuestWin2 *v59; // ebx@124
  int v60; // eax@128
  int ii; // eax@129
  int n; // eax@132
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v63; // esi@138
  CQuestWin2 *v64; // edi@139
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v65; // eax@143
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *k; // eax@144
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *j; // eax@147
  CQuestWin2 *v68; // edi@154
  SlideBar *v69; // ecx@156
  SlideListWin *v70; // eax@157
  NiRefObjectVtbl *v71; // esi@159
  char *v72; // eax@159
  char *v73; // eax@159
  int v74; // ebx@159
  NiRefObjectVtbl *v75; // esi@159
  char *v76; // eax@159
  char *v77; // eax@159
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v78; // ecx@161
  const char *v79; // [sp-18h] [bp-17Ch]@16
  unsigned int v80; // [sp-14h] [bp-178h]@16
  unsigned int v81; // [sp-10h] [bp-174h]@1
  char v82; // [sp+0h] [bp-164h]@50
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> result; // [sp+8h] [bp-15Ch]@41
  char v84; // [sp+10h] [bp-154h]@51
  int (__thiscall **pExceptionObject)(void *, char); // [sp+18h] [bp-14Ch]@162
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v86; // [sp+24h] [bp-140h]@34
  char *_What; // [sp+28h] [bp-13Ch]@162
  CQuest *pQuest; // [sp+2Ch] [bp-138h]@1
  int r; // [sp+30h] [bp-134h]@5
  PLAYER_QUEST_STATUS nStatus; // [sp+34h] [bp-130h]@5
  int b; // [sp+38h] [bp-12Ch]@5
  int g; // [sp+3Ch] [bp-128h]@5
  int uiNumQuest2; // [sp+40h] [bp-124h]@2
  QUEST_DATA *lpQuest; // [sp+44h] [bp-120h]@3
  int uiNumQuest1; // [sp+48h] [bp-11Ch]@2
  unsigned int i; // [sp+4Ch] [bp-118h]@2
  int Qlv; // [sp+50h] [bp-114h]@7
  int v98; // [sp+54h] [bp-110h]@109
  int v99; // [sp+58h] [bp-10Ch]@43
  CQuestData *pQData; // [sp+5Ch] [bp-108h]@1
  std::multimap<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> > > mapQuest; // [sp+60h] [bp-104h]@1
  unsigned int Userlv; // [sp+70h] [bp-F4h]@7
  int bCountinue; // [sp+74h] [bp-F0h]@5
  int _Keyval; // [sp+78h] [bp-ECh]@37
  CQuestWin2 *thisa; // [sp+7Ch] [bp-E8h]@1
  char bIsSelectedQuest; // [sp+83h] [bp-E1h]@1
  CQuestWin2::QData kData; // [sp+84h] [bp-E0h]@49
  std::pair<int,CQuestWin2::QData> _Val; // [sp+DCh] [bp-88h]@50
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strQuestState; // [sp+138h] [bp-2Ch]@5
  unsigned int v110; // [sp+154h] [bp-10h]@1
  int v111; // [sp+160h] [bp-4h]@2
  int v112; // [sp+164h] [bp+0h]@1

  v110 = (unsigned int)&v112 ^ __security_cookie;
  v81 = (unsigned int)&v112 ^ __security_cookie;
  thisa = this;
  SlideListWin::RemoveAllList(this->m_pListWinQuestList);
  v3 = QuestDataMgr::GetQuest();
  v4 = v3->m_pQuestData;
  pQuest = v3;
  pQData = (CQuestData *)v4;
  bIsSelectedQuest = 0;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x6Cu);
  if ( !v5 )
  {
    _What = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v111 = 0;
  uiNumQuest2 = 0;
  uiNumQuest1 = 0;
  i = 0;
  if ( CQuestData::GetNumOfQuestData((CQuestData *)v4) > 0u )
  {
    while ( 1 )
    {
      v6 = CQuestData::GetQuestDataByIndex(pQData, i);
      v7 = pQuest;
      v8 = &v6->ID;
      v9 = v6->ID;
      lpQuest = v6;
      if ( CQuest::IsDoingQuest(pQuest, v9) )
        break;
      if ( CQuest::IsDoingableQuest(v7, *v8) )
        break;
LABEL_62:
      ++i;
      if ( (signed int)i >= CQuestData::GetNumOfQuestData(pQData) )
        goto LABEL_63;
    }
    strQuestState.baseclass_0._Myres = 15;
    strQuestState.baseclass_0._Mysize = 0;
    strQuestState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v10 = *v8;
    LOBYTE(v111) = 1;
    v11 = CQuest::GetNewQuestStatus(v7, v10);
    v12 = thisa->m_nStateFilterType == 0;
    v13 = v11;
    nStatus = v11;
    b = 255;
    g = 255;
    r = 255;
    LOBYTE(bCountinue) = 1;
    if ( v12 )
      LOBYTE(bCountinue) = 0;
    v14 = 0;
    Qlv = lpQuest->Start.LevelMin;
    Userlv = User::Lv(&g_kUser);
    if ( !bUseCurLevel )
      Userlv = iLevel;
    switch ( v13 )
    {
      case 6:
        v15 = TextData::Get(0x9FB2A8D8u);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strQuestState, v15, strlen(v15));
        if ( thisa->m_nStateFilterType == 1 )
          LOBYTE(bCountinue) = 0;
        goto LABEL_12;
      case 7:
        v16 = TextData::Get(0xD6EAF4F4u);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strQuestState, v16, strlen(v16));
        v14 = 1;
        break;
      case 8:
        v17 = TextData::Get(0xDA03E902u);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strQuestState, v17, strlen(v17));
        v12 = thisa->m_nStateFilterType == 2;
        r = 64;
        g = 251;
        b = 107;
        if ( v12 )
        {
          LOBYTE(bCountinue) = 0;
          v14 = 1;
        }
        else
        {
LABEL_12:
          v14 = 1;
        }
        break;
      case 0:
        v80 = 4;
        v79 = "None";
        goto LABEL_19;
      case 4:
      case 5:
      case 20:
        v18 = TextData2::Get(0x3F4857B5u);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strQuestState, v18, strlen(v18));
        v14 = 2;
        break;
      default:
        v80 = 3;
        v79 = "...";
LABEL_19:
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strQuestState, v79, v80);
        break;
    }
    if ( lpQuest->Start.bItem != 1 && lpQuest->Start.bIsWaitListView )
    {
      if ( v14 != 1 )
      {
        if ( v14 == 2 && (signed int)(Userlv - Qlv) <= 150 )
          ++uiNumQuest2;
        goto LABEL_29;
      }
    }
    else
    {
      if ( v14 != 1 )
      {
LABEL_60:
        LOBYTE(v111) = 0;
        if ( strQuestState.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&strQuestState);
        goto LABEL_62;
      }
    }
    ++uiNumQuest1;
LABEL_29:
    v19 = thisa->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v20 = v19->_Parent;
    v21 = (std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *)&thisa->m_setAbleQuest;
    while ( !v20->_Isnil )
    {
      if ( v20->_Myval >= *v8 )
      {
        v19 = v20;
        v20 = v20->_Left;
      }
      else
      {
        v20 = v20->_Right;
      }
    }
    v22 = (int)thisa->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v86 = v19;
    if ( v19 == (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v22
      || *v8 < v19->_Myval )
    {
      _Keyval = v22;
      v23 = &_Keyval;
    }
    else
    {
      v23 = (int *)&v86;
    }
    v24 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)*v23;
    if ( nStatus != 5 || (signed int)(Userlv - Qlv) > 150 )
    {
      if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v24 != thisa->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
        std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
          &thisa->m_setAbleQuest.baseclass_0,
          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v99,
          v24);
    }
    else
    {
      if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v24 == thisa->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        v25 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
                &thisa->m_setAbleQuest.baseclass_0.baseclass_0,
                v8);
        std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
          v21,
          &result,
          v25,
          0);
        thisa->m_bLevelUp = 1;
      }
    }
    v26 = thisa->m_nCurSelTab;
    if ( (v26 != 2 || (signed int)(Userlv - Qlv) <= 150) && v26 == v14 )
    {
      v27 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strQuestState;
      if ( strQuestState.baseclass_0._Myres < 0x10 )
        v27 = &strQuestState;
      v28 = bCountinue;
      v29 = nStatus;
      v30 = b;
      v31 = g;
      v32 = r;
      v33 = *v8;
      v34 = (const char *)v27;
      v35 = CQuestData::GetQuestName(pQData, v33);
      v36 = lpQuest;
      CQuestWin2::QData::QData(&kData, *v8, lpQuest->Type, v35, v34, v33, v32, v31, v30, v29, v28);
      v12 = thisa->m_nStateFilterType == 4;
      LOBYTE(v111) = 2;
      if ( v12 )
      {
        _Val.baseclass_0.first = *((_BYTE *)v36 + 27);
        CQuestWin2::QData::QData(&_Val.baseclass_0.second, &kData);
        LOBYTE(v111) = 3;
        v37 = &v82;
      }
      else
      {
        _Val.baseclass_0.first = (_BYTE)bCountinue != 0;
        CQuestWin2::QData::QData(&_Val.baseclass_0.second, &kData);
        LOBYTE(v111) = 4;
        v37 = &v84;
      }
      std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::insert<std::pair<int_CQuestWin2::QData>>(
        &mapQuest.baseclass_0,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,bool> *)v37,
        &_Val);
      if ( _Val.baseclass_0.second.strState.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0]);
      _Val.baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      _Val.baseclass_0.second.strState.baseclass_0._Mysize = 0;
      _Val.baseclass_0.second.strState.baseclass_0._Myres = 15;
      if ( _Val.baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
      if ( kData.strState.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&kData.strState.baseclass_0.___u0.baseclass_0.dummy[0]);
      kData.strState.baseclass_0._Myres = 15;
      kData.strState.baseclass_0._Mysize = 0;
      kData.strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( kData.strTitle.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&kData.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    goto LABEL_60;
  }
LABEL_63:
  if ( thisa->m_nStateFilterType != 4 )
  {
    if ( thisa->m_nCurSelTab == 2 )
    {
      v63 = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
      if ( mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left == mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
        goto LABEL_153;
      v64 = thisa;
      do
      {
        if ( CQuestWin2::AddQuestListElement(v64, &v63->_Myval.baseclass_0.second) )
          bIsSelectedQuest = 1;
        if ( !v63->_Isnil )
        {
          v65 = v63->_Right;
          if ( v65->_Isnil )
          {
            for ( j = v63->_Parent; !j->_Isnil; j = j->_Parent )
            {
              if ( v63 != j->_Right )
                break;
              v63 = j;
            }
            v63 = j;
          }
          else
          {
            v63 = v63->_Right;
            for ( k = v65->_Left; !k->_Isnil; k = k->_Left )
              v63 = k;
          }
        }
      }
      while ( v63 != mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    else
    {
      _Keyval = 1;
      std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Eqrange(
        &mapQuest.baseclass_0,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,st *)&v98,
        &_Keyval);
      v51 = v98;
      v52 = v99;
      if ( v98 != v99 )
      {
        v53 = thisa;
        do
        {
          if ( CQuestWin2::AddQuestListElement(v53, (CQuestWin2::QData *)(v51 + 16)) )
            bIsSelectedQuest = 1;
          if ( !*(_BYTE *)(v51 + 105) )
          {
            v54 = *(_DWORD *)(v51 + 8);
            if ( *(_BYTE *)(v54 + 105) )
            {
              for ( l = *(_DWORD *)(v51 + 4); !*(_BYTE *)(l + 105); l = *(_DWORD *)(l + 4) )
              {
                if ( v51 != *(_DWORD *)(l + 8) )
                  break;
                v51 = l;
              }
              v51 = l;
            }
            else
            {
              v51 = *(_DWORD *)(v51 + 8);
              for ( m = *(_DWORD *)v54; !*(_BYTE *)(m + 105); m = *(_DWORD *)m )
                v51 = m;
            }
          }
        }
        while ( v51 != v52 );
      }
      _Keyval = 0;
      std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Eqrange(
        &mapQuest.baseclass_0,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,st *)&v98,
        &_Keyval);
      v57 = v98;
      v58 = v99;
      if ( v98 != v99 )
      {
        v59 = thisa;
        do
        {
          if ( CQuestWin2::AddQuestListElement(v59, (CQuestWin2::QData *)(v57 + 16)) )
            bIsSelectedQuest = 1;
          if ( !*(_BYTE *)(v57 + 105) )
          {
            v60 = *(_DWORD *)(v57 + 8);
            if ( *(_BYTE *)(v60 + 105) )
            {
              for ( n = *(_DWORD *)(v57 + 4); !*(_BYTE *)(n + 105); n = *(_DWORD *)(n + 4) )
              {
                if ( v57 != *(_DWORD *)(n + 8) )
                  break;
                v57 = n;
              }
              v57 = n;
            }
            else
            {
              v57 = *(_DWORD *)(v57 + 8);
              for ( ii = *(_DWORD *)v60; !*(_BYTE *)(ii + 105); ii = *(_DWORD *)ii )
                v57 = ii;
            }
          }
        }
        while ( v57 != v58 );
      }
    }
    goto LABEL_152;
  }
  if ( !thisa->bReverseSort )
  {
    v46 = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
    if ( mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left == mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
      goto LABEL_153;
    v47 = thisa;
    do
    {
      if ( CQuestWin2::AddQuestListElement(v47, &v46->_Myval.baseclass_0.second) )
        bIsSelectedQuest = 1;
      if ( !v46->_Isnil )
      {
        v48 = v46->_Right;
        if ( v48->_Isnil )
        {
          for ( jj = v46->_Parent; !jj->_Isnil; jj = jj->_Parent )
          {
            if ( v46 != jj->_Right )
              break;
            v46 = jj;
          }
          v46 = jj;
        }
        else
        {
          v46 = v46->_Right;
          for ( kk = v48->_Left; !kk->_Isnil; kk = kk->_Left )
            v46 = kk;
        }
      }
    }
    while ( v46 != mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead );
LABEL_152:
    if ( bIsSelectedQuest )
      goto LABEL_154;
    goto LABEL_153;
  }
  v38 = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  if ( v38 != v38->_Left )
  {
    v39 = thisa;
    do
    {
      v40 = v38;
      if ( v38->_Isnil )
      {
        v40 = v38->_Right;
      }
      else
      {
        if ( v38->_Left->_Isnil )
        {
          for ( ll = v38->_Parent; !ll->_Isnil; ll = ll->_Parent )
          {
            if ( v40 != ll->_Left )
              break;
            v40 = ll;
          }
          if ( !v40->_Isnil )
            v40 = ll;
        }
        else
        {
          v40 = v38->_Left;
          for ( mm = v38->_Left->_Right; !mm->_Isnil; mm = mm->_Right )
            v40 = mm;
        }
      }
      if ( CQuestWin2::AddQuestListElement(v39, &v40->_Myval.baseclass_0.second) )
        bIsSelectedQuest = 1;
      if ( v38->_Isnil )
      {
        v38 = v38->_Right;
      }
      else
      {
        v43 = v38->_Left;
        if ( v38->_Left->_Isnil )
        {
          for ( nn = v38->_Parent; !nn->_Isnil; nn = nn->_Parent )
          {
            if ( v38 != nn->_Left )
              break;
            v38 = nn;
          }
          if ( !v38->_Isnil )
            v38 = nn;
        }
        else
        {
          v38 = v38->_Left;
          for ( i1 = v43->_Right; !i1->_Isnil; i1 = i1->_Right )
            v38 = i1;
        }
      }
    }
    while ( v38 != mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left );
    goto LABEL_152;
  }
LABEL_153:
  thisa->m_nSelectedID = -1;
LABEL_154:
  v68 = thisa;
  if ( !thisa->m_nSortColumn )
    SlideListWin::Sort(thisa->m_pListWinQuestList, 0, thisa->bReverseSort, 0);
  SlideListWin::AlignText(v68->m_pListWinQuestList, 4u);
  SlideListWin::AlignText(v68->m_pListWinQuestList, 1u, 5u);
  v69 = v68->m_pSlideBarList;
  if ( v69 )
  {
    v70 = v68->m_pListWinQuestList;
    if ( v70 )
    {
      SlideBar::SetSplitCnt(v69, v70->m_nSlideSplitCnt);
      v68->m_pListWinQuestList->m_nViewStartPos = v68->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v68->m_pListWinQuestList);
      CQuestWin2::UpdateQuestStateIcon(v68);
    }
  }
  v71 = v68->m_pkTabText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v72 = TextData2::Get(0x474930A2u);
  v73 = fs(v72);
  ((void (__thiscall *)(PgWinText *, char *, unsigned int))v71[118].__vecDelDtor)(v68->m_pkTabText1, v73, v81);
  v74 = uiNumQuest2;
  v75 = v68->m_pkTabText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v76 = TextData2::Get(0x3F4856B5u);
  v77 = fs(v76);
  v75[118].__vecDelDtor((NiRefObject *)v68->m_pkTabText2, (unsigned int)v77);
  if ( !v74 )
    v68->m_bLevelUp = 0;
  v78 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >)mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v111 = 5;
  std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::erase(
    &mapQuest.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)&v99,
    v78,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >)mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead);
  operator delete(mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (006109F0) --------------------------------------------------------
void __thiscall CQuestWin2::UpdateQuestData(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  signed int v2; // edi@1
  char *v3; // ebx@1
  RewardWin *v4; // eax@7

  v1 = this;
  v2 = 0;
  v3 = (char *)this->m_pkAutoRunBut;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
    v1->m_arryAutoButEnable[v2++] = 0;
    v3 += 4;
  }
  while ( v2 < 10 );
  CQuestWin2::UpDateViewQuestList(v1, 1, 0);
  if ( v1->m_nSelectedID <= -1 )
    CQuestWin2::OnQuestListLClick(v1, 0, 1);
  else
    CQuestWin2::UpDateViewQuesContent(v1, LOWORD(v1->m_nSelectedID));
  if ( v1->m_nSelectedID == -1 )
  {
    v4 = v1->m_pkRewardWin;
    if ( v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    ((void (__stdcall *)(_DWORD))v1->m_pkLocationInfoWinBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkLocationInfoWinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  if ( !SlideListWin::GetItemSize(v1->m_pListWinQuestList) )
  {
    if ( v1->m_nCurSelTab == 2 )
    {
      ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v1->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v1->m_pkAcceptBtnSpr,
        0);
    }
  }
}

//----- (00610AF0) --------------------------------------------------------
void __thiscall EpicQuestWin::UpDateViewQuestList(EpicQuestWin *this)
{
  EpicQuestWin *v1; // edi@1
  CQuest *v2; // eax@1
  void *v3; // ebx@1
  SlideListWin *v4; // ecx@1
  unsigned int v5; // esi@1
  void *v6; // eax@1
  QUEST_DATA *v7; // esi@3
  EpicQuestWin::eUI_TYPE v8; // eax@3
  char v9; // al@5
  unsigned int v10; // edi@7
  const char *v11; // eax@7
  unsigned int v12; // ecx@7
  unsigned int v13; // edx@7
  CQuest *v14; // ebx@12
  unsigned __int16 v15; // ST18_2@13
  PLAYER_QUEST_STATUS v16; // eax@13
  int v17; // ebx@13
  char *v18; // eax@18
  unsigned int v19; // ST0C_4@18
  const char *v20; // eax@18
  std::pair<int,EpicQuestWin::QData> *v21; // eax@18
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v22; // esi@27
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v23; // ecx@28
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *k; // eax@31
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *j; // eax@34
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v26; // eax@43
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *m; // eax@44
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *l; // eax@47
  SlideBar *v29; // ecx@55
  SlideListWin *v30; // eax@56
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v31; // ST14_4@58
  void *v32; // [sp-14h] [bp-110h]@10
  char v33; // [sp+0h] [bp-FCh]@18
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >,bool> result; // [sp+8h] [bp-F4h]@7
  int (__thiscall **pExceptionObject)(void *, char); // [sp+10h] [bp-ECh]@59
  PLAYER_QUEST_STATUS nStatus; // [sp+1Ch] [bp-E0h]@13
  CQuestData *pQData; // [sp+20h] [bp-DCh]@1
  CQuest *pQuest; // [sp+24h] [bp-D8h]@1
  unsigned int i; // [sp+28h] [bp-D4h]@2
  char *_What; // [sp+2Ch] [bp-D0h]@58
  std::multimap<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> > > mapQuest; // [sp+30h] [bp-CCh]@1
  EpicQuestWin *v42; // [sp+40h] [bp-BCh]@1
  char bIsSelectedQuest; // [sp+47h] [bp-B5h]@1
  std::pair<int,EpicQuestWin::QData> thisa; // [sp+48h] [bp-B4h]@18
  std::pair<int,EpicQuestWin::QData> _Val; // [sp+80h] [bp-7Ch]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strQuestState; // [sp+B8h] [bp-44h]@7
  unsigned int v47; // [sp+D4h] [bp-28h]@7
  unsigned int v48; // [sp+DCh] [bp-20h]@7
  int v49; // [sp+E0h] [bp-1Ch]@7
  int v50; // [sp+E4h] [bp-18h]@7
  int v51; // [sp+E8h] [bp-14h]@7
  unsigned int v52; // [sp+ECh] [bp-10h]@1
  int v53; // [sp+F8h] [bp-4h]@2
  int v54; // [sp+FCh] [bp+0h]@1

  v52 = (unsigned int)&v54 ^ __security_cookie;
  v1 = this;
  v42 = this;
  v2 = QuestDataMgr::GetQuest();
  v3 = v2->m_pQuestData;
  v4 = v1->m_pListWinQuestList;
  pQuest = v2;
  pQData = (CQuestData *)v3;
  bIsSelectedQuest = 0;
  SlideListWin::RemoveAllList(v4);
  v5 = 0;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v6 = operator new(0x48u);
  if ( !v6 )
  {
    _What = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v6;
  *(_DWORD *)v6 = v6;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v53 = 0;
  i = 0;
  if ( CQuestData::GetNumOfQuestData((CQuestData *)v3) > 0u )
  {
    do
    {
      v7 = CQuestData::GetQuestDataByIndex((CQuestData *)v3, v5);
      v8 = v1->m_eType;
      if ( v8 == 1 )
      {
        if ( CQuest::GetNewQuestStatus(pQuest, v7->ID) != 2 || (v9 = v7->Type, v9 != 6) && v9 != 7 )
          goto LABEL_26;
        v10 = v7->ID;
        v11 = CQuestData::GetQuestName((CQuestData *)v3, v7->ID);
        v12 = v7->Type;
        v13 = v7->ID;
        v47 = 15;
        *(_DWORD *)&strQuestState.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
        strQuestState.baseclass_0.___u0._Bx._Buf[8] = 0;
        *(_QWORD *)&strQuestState.baseclass_0.___u0.baseclass_0.dummy[0] = __PAIR__(v12, v13);
        LOBYTE(v53) = 1;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strQuestState + 8),
          v11,
          strlen(v11));
        v48 = v10;
        v49 = 255;
        v50 = 255;
        v51 = 255;
        _Val.baseclass_0.first = v7->Start.LevelMin;
        LOBYTE(v53) = 2;
        *(_QWORD *)&_Val.baseclass_0.second.dwQuestID = *(_QWORD *)&strQuestState;
        _Val.baseclass_0.second.strTitle.baseclass_0._Myres = 15;
        _Val.baseclass_0.second.strTitle.baseclass_0._Mysize = 0;
        _Val.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &_Val.baseclass_0.second.strTitle,
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strQuestState + 8),
          0,
          0xFFFFFFFFu);
        _Val.baseclass_0.second.dwData = v48;
        _Val.baseclass_0.second.r = v49;
        _Val.baseclass_0.second.g = v50;
        _Val.baseclass_0.second.b = v51;
        LOBYTE(v53) = 3;
        std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::insert<std::pair<int_EpicQuestWin::QData>>(
          &mapQuest.baseclass_0,
          &result,
          &_Val);
        if ( _Val.baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&_Val.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
        LOBYTE(v53) = 0;
        if ( v47 >= 0x10 )
        {
          v32 = *(void **)&strQuestState.baseclass_0.___u0._Bx._Buf[8];
LABEL_24:
          operator delete(v32);
          goto LABEL_25;
        }
      }
      else
      {
        if ( v8 || (v14 = pQuest, !CQuest::IsDoingableQuest(pQuest, v7->ID)) )
          goto LABEL_26;
        v50 = 15;
        v49 = 0;
        strQuestState.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
        v15 = v7->ID;
        LOBYTE(v53) = 4;
        v16 = CQuest::GetNewQuestStatus(v14, v15);
        v17 = v7->Start.LevelMin;
        nStatus = v16;
        if ( (signed int)(User::Lv(&g_kUser) - v17) > 150 && v7->Start.bItem != 1 && v7->Start.bIsWaitListView )
        {
          switch ( nStatus )
          {
            case 0:
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strQuestState + 24),
                "None",
                4u);
              break;
            case 3:
            case 4:
            case 5:
            case 9:
            case 20:
              v18 = TextData2::Get(0x3F4857B5u);
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strQuestState + 24),
                v18);
              v19 = v7->ID;
              v20 = CQuestData::GetQuestName(pQData, v7->ID);
              EpicQuestWin::QData::QData(&_Val.baseclass_0.second, v7->ID, v7->Type, v20, v19, 255, 255, 255);
              LOBYTE(v53) = 5;
              std::pair<int_EpicQuestWin::QData>::pair<int_EpicQuestWin::QData>(
                &thisa,
                &v7->Start.LevelMin,
                &_Val.baseclass_0.second);
              LOBYTE(v53) = 6;
              std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::insert<std::pair<int_EpicQuestWin::QData>>(
                &mapQuest.baseclass_0,
                (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >,bool> *)&v33,
                v21);
              std::pair<int_EpicQuestWin::QData>::_pair<int_EpicQuestWin::QData>(&thisa);
              EpicQuestWin::QData::_QData(&_Val.baseclass_0.second);
              break;
            default:
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&strQuestState + 24),
                "...",
                3u);
              break;
          }
          LOBYTE(v53) = 0;
          if ( (unsigned int)v50 < 0x10 )
            goto LABEL_25;
          v32 = *(void **)&strQuestState.baseclass_0._Alval.baseclass_0.dummy[0];
          goto LABEL_24;
        }
        LOBYTE(v53) = 0;
        if ( (unsigned int)v50 >= 0x10 )
        {
          v32 = *(void **)&strQuestState.baseclass_0._Alval.baseclass_0.dummy[0];
          goto LABEL_24;
        }
      }
LABEL_25:
      v1 = v42;
LABEL_26:
      v3 = pQData;
      ++i;
      v5 = i;
    }
    while ( (signed int)i < CQuestData::GetNumOfQuestData(pQData) );
  }
  v22 = mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  if ( v22 == v22->_Left )
    goto LABEL_63;
  do
  {
    v23 = v22;
    if ( v22->_Isnil )
    {
      v23 = v22->_Right;
    }
    else
    {
      if ( v22->_Left->_Isnil )
      {
        for ( j = v22->_Parent; !j->_Isnil; j = j->_Parent )
        {
          if ( v23 != j->_Left )
            break;
          v23 = j;
        }
        if ( !v23->_Isnil )
          v23 = j;
      }
      else
      {
        v23 = v22->_Left;
        for ( k = v22->_Left->_Right; !k->_Isnil; k = k->_Right )
          v23 = k;
      }
    }
    if ( EpicQuestWin::AddQuestListElement(v1, &v23->_Myval.baseclass_0.second) )
      bIsSelectedQuest = 1;
    if ( v22->_Isnil )
    {
      v22 = v22->_Right;
    }
    else
    {
      v26 = v22->_Left;
      if ( v22->_Left->_Isnil )
      {
        for ( l = v22->_Parent; !l->_Isnil; l = l->_Parent )
        {
          if ( v22 != l->_Left )
            break;
          v22 = l;
        }
        if ( !v22->_Isnil )
          v22 = l;
      }
      else
      {
        v22 = v22->_Left;
        for ( m = v26->_Right; !m->_Isnil; m = m->_Right )
          v22 = m;
      }
    }
  }
  while ( v22 != mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left );
  if ( !bIsSelectedQuest )
LABEL_63:
    v1->m_nSelectedID = -1;
  SlideListWin::AlignText(v1->m_pListWinQuestList, 4u);
  SlideListWin::AlignText(v1->m_pListWinQuestList, 1u, 5u);
  v29 = v1->m_pSlideBarList;
  if ( v29 )
  {
    v30 = v1->m_pListWinQuestList;
    if ( v30 )
    {
      SlideBar::SetSplitCnt(v29, v30->m_nSlideSplitCnt);
      v1->m_pListWinQuestList->m_nViewStartPos = v1->m_pSlideBarList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
      EpicQuestWin::UpdateQuestStateIcon(v1);
    }
  }
  v31 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >)mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v53 = 7;
  std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::erase(
    &mapQuest.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)&_What,
    v31,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >)mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead);
  operator delete(mapQuest.baseclass_0.baseclass_0.baseclass_0._Myhead);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00611070) --------------------------------------------------------
void __thiscall CQuestWin2::UpdateMeWin(CQuestWin2 *this, float fCurTime)
{
  CQuestWin2 *v2; // esi@1
  PgFrameWork *v3; // eax@4
  GameFrameWork *v4; // edi@4
  int v5; // edi@8
  signed int v6; // ebx@8
  SlideListWin *v7; // eax@10
  unsigned int v8; // edi@10
  int v9; // eax@12
  int v10; // ecx@13
  SlideListWin *v11; // ecx@16
  int v12; // ebx@16
  SlideListWin *v13; // ecx@18
  int v14; // edi@18
  int v15; // eax@19
  int v16; // ST34_4@21
  int v17; // ST30_4@21
  AutoRunBut *v18; // ecx@21
  int v19; // edi@21
  int v20; // eax@21
  int nViewStartIndex; // [sp+38h] [bp-Ch]@16
  int v22; // [sp+3Ch] [bp-8h]@20
  int dwNum; // [sp+40h] [bp-4h]@17

  v2 = this;
  if ( QuestDataMgr::m_bUpdate || CQuestWin2::ms_bUpdate )
  {
    CQuestWin2::ms_bUpdate = 0;
    CQuestWin2::UpdateQuestData(this);
  }
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v4 = (GameFrameWork *)v3;
  if ( v3 )
  {
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinContent, v2->m_pSlideBarContent);
    GameFrameWork::UpdateUIScroll(v4, v2->m_pListWinQuestList, v2->m_pSlideBarList);
  }
  if ( (unsigned __int8)((int (__stdcall *)(int, int))v2->m_pListWinContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
                          PgWin::ms_iMsX.x,
                          PgWin::ms_iMsY)
    && 0.0 != (double)PgWin::ms_iMsDeltaZ )
  {
    v5 = (int)v2->m_pkAutoRunBut;
    v6 = 10;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0);
      v5 += 4;
      --v6;
    }
    while ( v6 );
    v7 = v2->m_pListWinContent;
    v8 = 0;
    if ( v7->m_nMaxViewListCnt > 0 )
    {
      do
      {
        if ( v8 < (signed int)((char *)v7->m_vecButList.baseclass_0._Mylast
                             - *(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
        {
          v9 = *(_DWORD *)(*(_DWORD *)&v7->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v8);
          if ( (*(_DWORD *)(v9 + 336) - *(_DWORD *)(v9 + 332)) >> 2 )
          {
            v10 = **(_DWORD **)(v9 + 332);
            if ( v10 )
              (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v10 + 172))(0);
          }
        }
        v7 = v2->m_pListWinContent;
        ++v8;
      }
      while ( (signed int)v8 < v7->m_nMaxViewListCnt );
    }
    v11 = v2->m_pListWinContent;
    v12 = 0;
    nViewStartIndex = v11->m_nViewStartPos;
    if ( (signed int)((unsigned int)((char *)v11->m_vecButList.baseclass_0._Mylast
                                   - *(_DWORD *)&v11->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFC) > 0 )
    {
      do
      {
        dwNum = -1;
        SlideListWin::GetData(v11, v12 + nViewStartIndex, (unsigned int *)&dwNum);
        if ( (unsigned int)(dwNum - 1) <= 9 )
        {
          v13 = v2->m_pListWinContent;
          v14 = dwNum - 1;
          if ( v12 < (unsigned int)((signed int)((char *)v13->m_vecButList.baseclass_0._Mylast
                                               - *(_DWORD *)&v13->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2) )
          {
            v15 = *(_DWORD *)(*(_DWORD *)&v13->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v12);
            if ( (*(_DWORD *)(v15 + 336) - *(_DWORD *)(v15 + 332)) >> 2 )
            {
              v22 = **(_DWORD **)(v15 + 332);
              if ( v22 )
              {
                v16 = SlideListWin::GetColumPosX(v13, v12, 0);
                v17 = SlideListWin::GetColumPosY(v2->m_pListWinContent, v12, 0);
                ((void (__stdcall *)(_DWORD))v2->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v2->m_arryAutoButEnable[v14]);
                ((void (__stdcall *)(signed int))v2->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
                ((void (__stdcall *)(int))v2->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v16);
                ((void (__stdcall *)(int))v2->m_pkAutoRunBut[v14].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor)(v17);
                v18 = v2->m_pkAutoRunBut[v14].m_pObject;
                v19 = *(_DWORD *)v22;
                v20 = ((int (*)(void))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
                (*(void (__thiscall **)(int, int))(v19 + 172))(v22, v20);
              }
            }
          }
        }
        v11 = v2->m_pListWinContent;
        ++v12;
      }
      while ( v12 < (signed int)((char *)v11->m_vecButList.baseclass_0._Mylast
                               - *(_DWORD *)&v11->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
    }
  }
  CQuestWin2::UpdateBlinkButList(v2, fCurTime);
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A9A76C: using guessed type bool CQuestWin2__ms_bUpdate;

//----- (00611320) --------------------------------------------------------
bool __thiscall CQuestWin2::Create(CQuestWin2 *this, PgFrameWork *pkFrameWork)
{
  CQuestWin2 *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  PgSprData *v9; // eax@9
  NiNode *v10; // esi@12
  bool result; // al@16
  int v12; // edi@17
  int v13; // ebx@17
  NiSourceTexture *v14; // eax@17
  PgSprData *v15; // eax@20
  NiTexturingProperty *v16; // esi@21
  NiNode *v17; // esi@23
  PgFont *v18; // eax@27
  PgWinText *v19; // eax@27
  NiRefObjectVtbl *v20; // edx@27
  char *v21; // eax@27
  PgSprData *v22; // eax@27
  PgWinSpr *v23; // eax@27
  PgSprData *v24; // eax@27
  PgWinSpr *v25; // eax@27
  void *v26; // eax@27
  NiRefObjectVtbl *v27; // edx@27
  int v28; // ecx@29
  void *v29; // eax@29
  PgFont *v30; // eax@29
  PgWinText *v31; // eax@29
  char *v32; // eax@29
  char *v33; // eax@29
  char *v34; // eax@29
  ColumnBut *v35; // eax@29
  void *v36; // edx@29
  int v37; // eax@29
  void *v38; // edx@29
  PgFont *v39; // eax@29
  PgWinText *v40; // eax@29
  char *v41; // eax@29
  char *v42; // eax@29
  char *v43; // eax@29
  PgWinBut *v44; // eax@29
  NiSourceTexture *v45; // STBC_4@29
  NiNode *v46; // ecx@29
  void *v47; // eax@29
  void *v48; // ecx@29
  PgSprData *v49; // STCC_4@29
  int v50; // STC8_4@29
  int v51; // eax@29
  PgWinSpr *v52; // eax@29
  char *v53; // eax@29
  int v54; // eax@29
  void *v55; // ecx@29
  void *v56; // edx@29
  void *v57; // eax@29
  PgFont *v58; // STCC_4@29
  unsigned int v59; // STC8_4@29
  unsigned int v60; // STC4_4@29
  int v61; // STC0_4@29
  int v62; // eax@29
  PgWinText *v63; // eax@29
  char *v64; // eax@29
  int v65; // eax@29
  void *v66; // edx@29
  PgFont *v67; // eax@29
  PgWinText *v68; // eax@29
  NiRefObjectVtbl *v69; // edx@29
  char *v70; // eax@29
  int v71; // eax@29
  void *v72; // edx@29
  PgFont *v73; // eax@29
  PgWinText *v74; // eax@29
  NiRefObjectVtbl *v75; // edx@29
  char *v76; // eax@29
  int v77; // eax@29
  void *v78; // edx@29
  PgFont *v79; // eax@29
  PgWinText *v80; // eax@29
  NiRefObjectVtbl *v81; // edx@29
  char *v82; // eax@29
  int v83; // eax@29
  void *v84; // edx@29
  PgFont *v85; // eax@29
  PgWinText *v86; // eax@29
  NiRefObjectVtbl *v87; // edx@29
  char *v88; // eax@29
  SLWCreateInfo::Item *v89; // eax@29
  void *v90; // eax@37
  PgSprData *v91; // eax@43
  SlideListWin *v92; // eax@43
  SLWCreateInfo::Item *v93; // eax@43
  PgSprData *v94; // eax@47
  SlideListWin *v95; // eax@47
  void *v96; // eax@47
  SlideBar *v97; // eax@47
  NiObjectNET *v98; // eax@47
  NiObjectNET *v99; // eax@47
  NiObjectNET *v100; // eax@47
  NiObjectNET *v101; // eax@47
  NiObjectNET *v102; // eax@47
  NiObjectNET *v103; // eax@47
  SlideBar *v104; // eax@47
  AutoRunBut *v105; // eax@48
  NiRefObjectVtbl *v106; // ecx@48
  PgWin **v107; // ecx@56
  PgSprData *v108; // eax@57
  PgWinSpr *v109; // eax@58
  PgWinSpr *v110; // eax@58
  PgWinSpr *v111; // eax@58
  PgWinSpr *v112; // eax@58
  PgWinSpr *v113; // eax@58
  PgWinSpr *v114; // eax@58
  PgWinSpr *v115; // eax@58
  PgWinBut *v116; // eax@59
  char *v117; // eax@59
  char *v118; // eax@59
  PgWinBut *v119; // eax@59
  char *v120; // eax@59
  int v121; // eax@59
  void *v122; // edx@59
  PgFont *v123; // eax@59
  PgWinText *v124; // eax@59
  NiRefObjectVtbl *v125; // edi@59
  char *v126; // eax@59
  NiTexturingProperty *v127; // esi@61
  NiNode *v128; // esi@63
  const char *v129; // [sp+C8h] [bp-A8h]@18
  int *v130; // [sp+CCh] [bp-A4h]@18
  int *v131; // [sp+D0h] [bp-A0h]@18
  NiSourceTexture *v132; // [sp+D4h] [bp-9Ch]@18
  unsigned int v133; // [sp+D8h] [bp-98h]@1
  PgSprData *pkSprQstInstance; // [sp+E8h] [bp-88h]@57
  unsigned int uiWidth; // [sp+ECh] [bp-84h]@20
  PgSprData *pkSprQstEvent; // [sp+F0h] [bp-80h]@57
  unsigned int uiHeight; // [sp+F4h] [bp-7Ch]@20
  NiPointer<NiTexturingProperty> spTexProp; // [sp+F8h] [bp-78h]@4
  SLWCreateInfo kCreateInfo; // [sp+FCh] [bp-74h]@29
  PgSprData *pkSprQstNor; // [sp+118h] [bp-58h]@48
  PgSprData *pkSprQstDaily; // [sp+11Ch] [bp-54h]@57
  PgSprData *pkNewMark; // [sp+120h] [bp-50h]@57
  PgSprData *pkSprQstJob; // [sp+124h] [bp-4Ch]@29
  PgSprData *pkSprQstEpic; // [sp+128h] [bp-48h]@29
  NiSourceTexture *pkTexture; // [sp+12Ch] [bp-44h]@7
  unsigned int pkTexture8; // [sp+130h] [bp-40h]@1
  int uiTop; // [sp+134h] [bp-3Ch]@9
  int uiLeft; // [sp+138h] [bp-38h]@9
  NiPointer<NiNode> spNode; // [sp+13Ch] [bp-34h]@1
  void *pkTextWin; // [sp+140h] [bp-30h]@27
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+144h] [bp-2Ch]@29
  unsigned int v152; // [sp+160h] [bp-10h]@1
  int v153; // [sp+16Ch] [bp-4h]@1
  int v154; // [sp+170h] [bp+0h]@1

  v152 = (unsigned int)&v154 ^ __security_cookie;
  v133 = (unsigned int)&v154 ^ __security_cookie;
  v2 = this;
  pkTexture8 = (unsigned int)pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v153 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\QuestWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v153) = 1;
  if ( v8 )
    pkTexture = (NiSourceTexture *)v8[1].__vecDelDtor;
  else
    pkTexture = 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, pkTexture);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, (PgFrameWork *)pkTexture8, "QuestWin", 0) )
  {
    LOBYTE(v153) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v153 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = uiLeft;
  v13 = uiTop;
  v14 = MenuTexMgr::GetTexture(0x13u);
  if ( v14 )
  {
    v132 = v14;
    v131 = &uiTop;
    v130 = &uiLeft;
    v129 = "Theme";
  }
  else
  {
    v132 = 0;
    v131 = &uiTop;
    v130 = &uiLeft;
    v129 = "Theme";
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v129, v130, v131, v132);
  PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(MAIN_MENU);
    v19 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v19;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v20[122].__vecDelDtor)(v19, 1, v133);
    (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v21 = TextData::Get(0xA604FBF0u);
    (*(void (__thiscall **)(void *, char *))pkTexture8)(pkTextWin, v21);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    v23 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      1u);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    v25 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - v13, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      1u,
      0,
      0);
    v26 = MenuTexMgr::GetTexture(4u);
    v27 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTexture8 = (unsigned int)v26;
    if ( ((int (__stdcall *)(_DWORD))v27[18].__vecDelDtor)("HelpLinkNor") )
    {
      pkTextWin = PgSprData::Create(
                    &spNode.m_pObject->baseclass_0,
                    "HelpLinkNor",
                    &uiLeft,
                    &uiTop,
                    (NiSourceTexture *)pkTexture8);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - v12,
        uiTop - v13,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x14u,
        0,
        0);
    }
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab01_On");
    v2->m_pkTab01 = ColumnBut::CreateWin(
                      uiLeft - v12,
                      uiTop - v13,
                      (PgSprData *)pkTextWin,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      2u,
                      0);
    v28 = *((_DWORD *)pkTextWin + 9);
    v29 = *(void **)(*(_DWORD *)v28 + 20);
    pkTexture8 = *(_DWORD *)(*(_DWORD *)v28 + 24);
    pkSprQstEpic = (PgSprData *)v29;
    v30 = Font::Get(MAIN_MENU);
    v31 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkSprQstEpic,
            pkTexture8,
            v30,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkTabText1 = v31;
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v31,
      5u);
    pkTexture8 = (unsigned int)&v2->m_pkTabText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v32 = TextData2::Get(0x474930A2u);
    v33 = fs(v32);
    (*(void (__thiscall **)(PgWinText *, char *))pkTexture8)(v2->m_pkTabText1, v33);
    ((void (__stdcall *)(_DWORD))v2->m_pkTabText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v2->m_pkTab01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v34 = TextData3::Get(0xB66C8B88u);
    PgWin::SetToolTipWinText(&v2->m_pkTab01->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v34);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab02_On");
    v35 = ColumnBut::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            3u,
            0);
    v36 = pkTextWin;
    v2->m_pkTab02 = v35;
    v37 = **((_DWORD **)v36 + 9);
    v38 = *(void **)(v37 + 20);
    pkTexture8 = *(_DWORD *)(v37 + 24);
    pkSprQstEpic = (PgSprData *)v38;
    v39 = Font::Get(MAIN_MENU);
    v40 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkSprQstEpic,
            pkTexture8,
            v39,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkTabText2 = v40;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v40,
      5u);
    pkTexture8 = (unsigned int)&v2->m_pkTabText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v41 = TextData2::Get(0x3F4856B5u);
    v42 = fs(v41);
    (*(void (__thiscall **)(PgWinText *, char *))pkTexture8)(v2->m_pkTabText2, v42);
    ((void (__stdcall *)(_DWORD))v2->m_pkTabText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v2->m_pkTab02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v43 = TextData2::Get(0xB88982FBu);
    PgWin::SetToolTipWinText(&v2->m_pkTab02->baseclass_0.baseclass_0.baseclass_0.baseclass_0, v43);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GiveupNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GiveupClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GiveupOver");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GiveupDisable");
    v44 = PgWinBut::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            (PgSprData *)pkTextWin,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            5u,
            0,
            0);
    v45 = pkTexture;
    v46 = spNode.m_pObject;
    v2->m_pkAcceptBtn = v44;
    v47 = PgSprData::Create(&v46->baseclass_0, "GiveupDisable", &uiLeft, &uiTop, v45);
    v48 = v2->m_pkAcceptBtn;
    pkTextWin = v47;
    pkSprQstJob = (PgSprData *)v48;
    v49 = (PgSprData *)v47;
    v50 = (*(int (**)(void))(*(_DWORD *)v48 + 168))();
    v51 = ((int (*)(void))pkSprQstJob->baseclass_0.vfptr[41].__vecDelDtor)();
    v52 = PgWinSpr::CreateWin(v51, v50, v49, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkAcceptBtnSpr = v52;
    v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v52,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v2->m_pkAcceptBtnSpr->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v53 = TextData2::Get(0x2889769Au);
    PgWin::SetToolTipWinText(&v2->m_pkAcceptBtnSpr->baseclass_0, v53);
    v54 = **((_DWORD **)pkTextWin + 9);
    v55 = *(void **)(v54 + 24);
    v56 = *(void **)(v54 + 20);
    v57 = v2->m_pkAcceptBtn;
    pkTexture8 = (unsigned int)v55;
    pkSprQstEpic = (PgSprData *)v56;
    pkSprQstJob = (PgSprData *)v57;
    v58 = Font::Get(MAIN_MENU);
    v59 = pkTexture8;
    v60 = (unsigned int)pkSprQstEpic;
    v61 = ((int (*)(void))pkSprQstJob->baseclass_0.vfptr[42].__vecDelDtor)();
    v62 = ((int (*)(void))pkSprQstJob->baseclass_0.vfptr[41].__vecDelDtor)();
    v63 = PgWinText::CreateWin(v62, v61, v60, v59, v58, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkButText1 = v63;
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v63,
      5u);
    pkTexture8 = (unsigned int)&v2->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v64 = TextData::Get(0xEF05ED51u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(v2->m_pkButText1, v64);
    ((void (__stdcall *)(_DWORD))v2->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xDu,
      0,
      0);
    v65 = **((_DWORD **)pkTextWin + 9);
    v66 = *(void **)(v65 + 20);
    pkTexture8 = *(_DWORD *)(v65 + 24);
    pkSprQstEpic = (PgSprData *)v66;
    v67 = Font::Get(MAIN_MENU);
    v68 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkSprQstEpic,
            pkTexture8,
            v67,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v69 = v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v68;
    v69[122].__vecDelDtor((NiRefObject *)v68, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v70 = TextData::Get(0x8BF7ED01u);
    (*(void (__thiscall **)(void *, _DWORD))pkTexture8)(pkTextWin, v70);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xBu,
      0,
      0);
    v71 = **((_DWORD **)pkTextWin + 9);
    v72 = *(void **)(v71 + 20);
    pkTexture8 = *(_DWORD *)(v71 + 24);
    pkSprQstEpic = (PgSprData *)v72;
    v73 = Font::Get(MAIN_MENU);
    v74 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkSprQstEpic,
            pkTexture8,
            v73,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v75 = v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v74;
    v75[122].__vecDelDtor((NiRefObject *)v74, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v76 = TextData::Get(0x94F8F4F9u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(pkTextWin, v76);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0xCu,
      0,
      0);
    v77 = **((_DWORD **)pkTextWin + 9);
    v78 = *(void **)(v77 + 20);
    pkTexture8 = *(_DWORD *)(v77 + 24);
    pkSprQstEpic = (PgSprData *)v78;
    v79 = Font::Get(MAIN_MENU);
    v80 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkSprQstEpic,
            pkTexture8,
            v79,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v81 = v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v80;
    v81[122].__vecDelDtor((NiRefObject *)v80, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v82 = TextData::Get(0xF807FCECu);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(pkTextWin, v82);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
    PgWinBut::CreateWin(
      uiLeft - v12,
      uiTop - v13,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0,
      0,
      0);
    v83 = **((_DWORD **)pkTextWin + 9);
    v84 = *(void **)(v83 + 20);
    pkTexture8 = *(_DWORD *)(v83 + 24);
    pkSprQstEpic = (PgSprData *)v84;
    v85 = Font::Get(MAIN_MENU);
    v86 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - v13 + 1,
            (unsigned int)pkSprQstEpic,
            pkTexture8,
            v85,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v87 = v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v86;
    v87[122].__vecDelDtor((NiRefObject *)v86, 5u);
    pkTexture8 = *(_DWORD *)pkTextWin + 472;
    v88 = TextData::Get(0xA6A69872u);
    (*(void (__thiscall **)(_DWORD, _DWORD))pkTexture8)(pkTextWin, v88);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v153) = 2;
    v89 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v89->nItemType = 1;
    v89->pNode = spNode.m_pObject;
    pkTextWin = v89;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    LOBYTE(v153) = 3;
    pkSprQstJob = (PgSprData *)((char *)pkTextWin + 72);
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v153) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkSprQstJob,
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v153) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkSprQstJob,
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
    LOBYTE(v153) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v90 = pkTextWin;
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    *((_BYTE *)v90 + 88) = 1;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
    LOBYTE(v153) = 7;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
    LOBYTE(v153) = 8;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
    LOBYTE(v153) = 9;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v91 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, pkTexture);
    v92 = SlideListWin::CreateWin(uiLeft, uiTop, v91, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
    v2->m_pListWinQuestList = v92;
    v92->m_uiRClickMsg = 7;
    v2->m_pListWinQuestList->m_uiLClickMsg = 8;
    v2->m_pListWinQuestList->m_bCheckEnable = 0;
    SlideListWin::AlignText(v2->m_pListWinQuestList, 4u);
    SlideListWin::UpdateViewList(v2->m_pListWinQuestList);
    SLWCreateInfo::Clear(&kCreateInfo);
    v93 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v93->nItemType = 1;
    v93->pNode = spNode.m_pObject;
    pkTextWin = v93;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Nor", 0xEu);
    LOBYTE(v153) = 10;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pkTextWin = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column05", 8u);
    LOBYTE(v153) = 11;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
      &thisa);
    LOBYTE(v153) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText02", &uiLeft, &uiTop, pkTexture);
    v95 = SlideListWin::CreateWin(
            uiLeft - v12,
            uiTop - v13,
            v94,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pListWinContent = v95;
    v95->m_bCheckEnable = 0;
    SlideListWin::AddText(v2->m_pListWinContent, ".");
    SlideListWin::AddText(v2->m_pListWinContent, "..");
    SlideListWin::AddText(v2->m_pListWinContent, "...");
    SlideListWin::AlignText(v2->m_pListWinContent, 4u);
    SlideListWin::UpdateViewList(v2->m_pListWinContent);
    v96 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
    pkTextWin = v96;
    v97 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            (PgSprData *)v96,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarList = v97;
    v97->m_uiClickMsg = 9;
    v2->m_pSlideBarList->m_eType = 1;
    v98 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor01");
    NiObjectNET::SetName(v98, "SlideBar_DnBtn01Nor");
    v99 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick01");
    NiObjectNET::SetName(v99, "SlideBar_DnBtn01Click");
    v100 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver01");
    NiObjectNET::SetName(v100, "SlideBar_DnBtn01Over");
    v101 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor01");
    NiObjectNET::SetName(v101, "SlideBar_UpBtn01Nor");
    v102 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick01");
    NiObjectNET::SetName(v102, "SlideBar_UpBtn01Click");
    v103 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver01");
    NiObjectNET::SetName(v103, "SlideBar_UpBtn01Over");
    v104 = SlideBar::CreateWin(
             spNode.m_pObject,
             "SlideBar01",
             "SlideBar_UpBtn01",
             "SlideBar_DnBtn01",
             (PgSprData *)pkTextWin,
             0,
             &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarContent = v104;
    v104->m_uiClickMsg = 10;
    v2->m_pSlideBarContent->m_eType = 1;
    SlideBar::SetSplitCnt(v2->m_pSlideBarList, v2->m_pListWinQuestList->m_nSlideSplitCnt);
    SlideBar::SetSplitCnt(v2->m_pSlideBarContent, v2->m_pListWinContent->m_nSlideSplitCnt);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AutoRunNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "AutoRunClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "AutoRunOver");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "AutoRunDisable");
    pkSprQstJob = (PgSprData *)v2->m_pkAutoRunBut;
    pkTexture8 = 10;
    do
    {
      v105 = AutoRunBut::CreateWin(0, 0, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u, 0, 0);
      v106 = pkSprQstJob->baseclass_0.vfptr;
      pkSprQstEpic = (PgSprData *)v105;
      pkSprQstNor = (PgSprData *)v106;
      if ( (AutoRunBut *)v106 != v105 )
      {
        if ( v106 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v106[1]) && pkSprQstNor )
            ((void (__stdcall *)(signed int))pkSprQstNor->baseclass_0.vfptr->__vecDelDtor)(1);
          v105 = (AutoRunBut *)pkSprQstEpic;
        }
        pkSprQstJob->baseclass_0.vfptr = (NiRefObjectVtbl *)v105;
        if ( v105 )
          InterlockedIncrement((volatile LONG *)&v105->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      v107 = (PgWin **)pkSprQstJob;
      pkSprQstJob->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkToolTipWin;
      PgWin::SetToolTipWinText(*v107, &byte_9BF826);
      pkSprQstJob = (PgSprData *)((char *)pkSprQstJob + 4);
      --pkTexture8;
    }
    while ( pkTexture8 );
    pkSprQstNor = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstNor", &uiLeft, &uiTop, pkTexture);
    pkSprQstEpic = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstEpic", &uiLeft, &uiTop, pkTexture);
    pkSprQstJob = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstJob", &uiLeft, &uiTop, pkTexture);
    pkSprQstEvent = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstEvent", &uiLeft, &uiTop, pkTexture);
    pkSprQstDaily = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstDaily", &uiLeft, &uiTop, pkTexture);
    pkNewMark = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NewQuest_Text", &uiLeft, &uiTop, pkTexture);
    v108 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "NewQuest_ready", &uiLeft, &uiTop, pkTexture);
    v2->m_pkNewQuestReady = PgWinSpr::CreateWin(
                              uiLeft - v12,
                              uiTop - v13,
                              v108,
                              &v2->baseclass_0.baseclass_0.baseclass_0,
                              0,
                              0);
    pkSprQstInstance = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstInDun", &uiLeft, &uiTop, pkTexture);
    pkTextWin = v2->m_pkSprQstEpic;
    pkTexture8 = 10;
    do
    {
      v109 = PgWinSpr::CreateWin(0, 0, pkSprQstNor, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *((_DWORD *)pkTextWin - 10) = v109;
      v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v109,
        0);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkTextWin - 10) + 256))(0);
      v110 = PgWinSpr::CreateWin(0, 0, pkSprQstEpic, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)pkTextWin = v110;
      v110->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v110,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)pkTextWin + 256))(0);
      v111 = PgWinSpr::CreateWin(0, 0, pkSprQstJob, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *((_DWORD *)pkTextWin + 10) = v111;
      v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v111,
        0);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkTextWin + 10) + 256))(0);
      v112 = PgWinSpr::CreateWin(0, 0, pkSprQstEvent, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *((_DWORD *)pkTextWin + 20) = v112;
      v112->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v112,
        0);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkTextWin + 20) + 256))(0);
      v113 = PgWinSpr::CreateWin(0, 0, pkSprQstInstance, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *((_DWORD *)pkTextWin + 30) = v113;
      v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v113,
        0);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkTextWin + 30) + 256))(0);
      v114 = PgWinSpr::CreateWin(0, 0, pkSprQstDaily, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *((_DWORD *)pkTextWin + 40) = v114;
      v114->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v114,
        0);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkTextWin + 40) + 256))(0);
      v115 = PgWinSpr::CreateWin(0, 0, pkNewMark, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *((_DWORD *)pkTextWin + 67) = v115;
      v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v115,
        0);
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkTextWin + 67) + 256))(0);
      pkTextWin = (char *)pkTextWin + 4;
      --pkTexture8;
    }
    while ( pkTexture8 );
    v2->m_pkTab01->m_bCheck = 1;
    v2->m_pkTab02->m_bCheck = 0;
    v2->m_kMarkCheck.m_fMarkTime = 1.0;
    v2->m_nCurSelTab = 1;
    CNSTimer_MarkCheck::ReSet(&v2->m_kMarkCheck, Timer::ms_fCurTime, OVER);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "EpicQuestNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "EpicQuestClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "EpicQuestOver");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "EpicQuestDisable");
    v116 = PgWinBut::CreateWin(
             uiLeft - v12,
             uiTop - v13,
             (PgSprData *)pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             6u,
             0,
             0);
    v2->m_pkButEpicList = v116;
    v116->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v117 = TextData2::Get(0xB88982FBu);
    PgWin::SetToolTipWinText(&v2->m_pkButEpicList->baseclass_0.baseclass_0, v117);
    ((void (__cdecl *)(_DWORD))v2->m_pkButEpicList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_pkButEpicList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v118 = TextData2::Get(0x89EAE1E9u);
    PgWin::SetToolTipWinText(&v2->m_pkButEpicList->baseclass_0.baseclass_0, v118);
    v2->m_pkEpicQuestWin = EpicQuestWin::CreateWin(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
    v119 = PgWinBut::CreateWin(
             uiLeft - v12,
             uiTop - v13 + 1,
             (PgSprData *)pkTextWin,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0x12u,
             0,
             0);
    v2->m_pkLocationInfoWinBut = v119;
    v119->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v120 = TextData2::Get(0xB1D7C3ECu);
    PgWin::SetToolTipWinText(&v2->m_pkLocationInfoWinBut->baseclass_0.baseclass_0, v120);
    v121 = **((_DWORD **)pkTextWin + 9);
    v122 = *(void **)(v121 + 20);
    pkNewMark = *(PgSprData **)(v121 + 24);
    pkSprQstDaily = (PgSprData *)v122;
    v123 = Font::Get(MAIN_MENU);
    v124 = PgWinText::CreateWin(
             uiLeft - v12,
             uiTop - v13 + 1,
             (unsigned int)pkSprQstDaily,
             (unsigned int)pkNewMark,
             v123,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v2->m_pkLocationInfoWinText = v124;
    v124->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v124,
      5u);
    v125 = v2->m_pkLocationInfoWinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v126 = TextData2::Get(0xBAD4C4E8u);
    v125[118].__vecDelDtor((NiRefObject *)v2->m_pkLocationInfoWinText, (unsigned int)v126);
    ((void (__stdcall *)(_DWORD))v2->m_pkLocationInfoWinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v2->m_pkLocationInfoWinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2->m_pkLocationInfoWinText,
      0);
    LOBYTE(v153) = 1;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)pkNewMark);
      operator delete(*(void **)&kCreateInfo);
    }
    v127 = spTexProp.m_pObject;
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    LOBYTE(v153) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v127, 1u);
    v128 = spNode.m_pObject;
    v153 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v128 )
      v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v128, 1u);
    result = 1;
  }
  else
  {
    v16 = spTexProp.m_pObject;
    LOBYTE(v153) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    v17 = spNode.m_pObject;
    v153 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v17 )
      return 0;
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00612B30) --------------------------------------------------------
void __thiscall CQuestWin2::OnTAB1(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  PgWinBut *v2; // ecx@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@1

  v1 = this;
  this->m_pkTab01->m_bCheck = 1;
  this->m_pkTab02->m_bCheck = 0;
  v2 = this->m_pkAcceptBtn;
  v1->m_nCurSelTab = 1;
  v1->m_nSelectedID = -1;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v3 = v1->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = TextData::Get(0xEF05ED51u);
  v3[118].__vecDelDtor((NiRefObject *)v1->m_pkButText1, (unsigned int)v4);
  CQuestWin2::UpdateQuestData(v1);
}

//----- (00612BD0) --------------------------------------------------------
void __thiscall CQuestWin2::OnSortByLevel(CQuestWin2 *this, bool bDown)
{
  if ( bDown )
    this->bReverseSort = 1;
  else
    this->bReverseSort = this->bReverseSort == 0;
  this->m_nSortColumn = -1;
  this->m_nStateFilterType = 4;
  CQuestWin2::UpdateQuestData(this);
}

//----- (00612C10) --------------------------------------------------------
void __thiscall CQuestWin2::OnSortByName(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  SlideListWin *v2; // ecx@4
  bool v3; // ST04_1@4

  v1 = this;
  if ( this->m_nSortColumn )
    this->bReverseSort = 0;
  else
    this->bReverseSort = this->bReverseSort == 0;
  v2 = this->m_pListWinQuestList;
  v3 = v1->bReverseSort;
  v1->m_nSortColumn = 0;
  SlideListWin::Sort(v2, 0, v3, 0);
  SlideListWin::UpdateViewList(v1->m_pListWinQuestList);
  CQuestWin2::UpdateQuestData(v1);
}

//----- (00612C70) --------------------------------------------------------
void __thiscall CQuestWin2::OnSortByState(CQuestWin2 *this)
{
  bool v1; // sf@1
  unsigned __int8 v2; // of@1

  ++this->m_nStateFilterType;
  v2 = __OFSUB__(this->m_nStateFilterType, 3);
  v1 = this->m_nStateFilterType - 3 < 0;
  this->m_nSortColumn = -1;
  if ( !(v1 ^ v2) )
    this->m_nStateFilterType = 0;
  CQuestWin2::UpdateQuestData(this);
}

//----- (00612CA0) --------------------------------------------------------
void __thiscall CQuestWin2::OnShowWin(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  bool v2; // zf@1
  EpicQuestWin *v3; // ecx@1
  int v4; // eax@2

  v1 = this;
  v2 = this->m_nCurSelTab == 2;
  v3 = this->m_pkEpicQuestWin;
  if ( v2 )
    v4 = EpicQuestWin::TotalMaxLowLevelQuest(v3);
  else
    v4 = EpicQuestWin::TotalMaxEpicQuest(v3);
  v1->m_iNumOfCompleteEpicQuest = v4;
  v1->bReverseSort = 1;
  v1->m_nSortColumn = -1;
  v1->m_nStateFilterType = 4;
  CQuestWin2::UpdateQuestData(v1);
  CQuestWin2::UpdateQuestData(v1);
  if ( !dword_A83280 )
  {
    ((void (__stdcall *)(_DWORD))v1->m_pkLocationInfoWinBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkLocationInfoWinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}
// A83280: using guessed type int dword_A83280;

//----- (00612D20) --------------------------------------------------------
void __thiscall CQuestWin2::LevelChange(CQuestWin2 *this, char nPlayerLevel)
{
  CQuestWin2 *v2; // ebx@1
  CQuest *v3; // eax@1
  void *v4; // esi@1
  QUEST_DATA *v5; // esi@4
  unsigned __int16 *v6; // edi@4
  PLAYER_QUEST_STATUS v7; // eax@6
  int v8; // edx@9
  int v9; // ecx@9
  int v10; // esi@9
  int v11; // ecx@15
  int *v12; // ecx@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v13; // ecx@19
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v14; // eax@22
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> result; // [sp+8h] [bp-2Ch]@22
  char v16; // [sp+10h] [bp-24h]@24
  int Qlv; // [sp+14h] [bp-20h]@6
  int Userlv; // [sp+18h] [bp-1Ch]@6
  int v19; // [sp+1Ch] [bp-18h]@18
  int v20; // [sp+20h] [bp-14h]@15
  CQuestData *pQData; // [sp+24h] [bp-10h]@1
  unsigned int i; // [sp+28h] [bp-Ch]@1
  CQuestWin2 *v23; // [sp+2Ch] [bp-8h]@1
  CQuest *pQuest; // [sp+30h] [bp-4h]@1

  v2 = this;
  v23 = this;
  this->m_bLevelUp = 0;
  v3 = QuestDataMgr::GetQuest();
  v4 = v3->m_pQuestData;
  pQuest = v3;
  pQData = (CQuestData *)v4;
  i = 0;
  if ( CQuestData::GetNumOfQuestData((CQuestData *)v4) > 0u )
  {
    while ( 1 )
    {
      v5 = CQuestData::GetQuestDataByIndex((CQuestData *)v4, i);
      v6 = &v5->ID;
      if ( CQuest::IsDoingQuest(pQuest, v5->ID) || CQuest::IsDoingableQuest(pQuest, *v6) )
      {
        v7 = CQuest::GetNewQuestStatus(pQuest, *v6);
        Qlv = v5->Start.LevelMin;
        Userlv = (unsigned __int8)nPlayerLevel;
        if ( v7 != 5 || v5->Start.bItem != 1 && v5->Start.bIsWaitListView )
        {
          v8 = (int)v2->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
          v9 = *(_DWORD *)(v8 + 4);
          v10 = (int)&v2->m_setAbleQuest;
          if ( !*(_BYTE *)(v9 + 15) )
          {
            do
            {
              if ( *(_WORD *)(v9 + 12) >= *v6 )
              {
                v8 = v9;
                v9 = *(_DWORD *)v9;
              }
              else
              {
                v9 = *(_DWORD *)(v9 + 8);
              }
            }
            while ( !*(_BYTE *)(v9 + 15) );
            v2 = v23;
          }
          v11 = *(_DWORD *)(v10 + 4);
          v20 = v8;
          if ( v8 == v11 || (v2 = v23, *v6 < *(_WORD *)(v8 + 12)) )
          {
            v19 = v11;
            v12 = &v19;
          }
          else
          {
            v12 = &v20;
          }
          v13 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)*v12;
          if ( v7 != 5 || Userlv - Qlv > 150 )
          {
            if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v13 != v2->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
              std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
                (std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *)v10,
                (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v16,
                v13);
          }
          else
          {
            if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v13 == v2->m_setAbleQuest.baseclass_0.baseclass_0.baseclass_0._Myhead )
            {
              v14 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
                      (std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *)v10,
                      v6);
              std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
                (std::_Tree<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > *)v10,
                &result,
                v14,
                0);
              v2->m_bLevelUp = 1;
            }
          }
        }
      }
      ++i;
      if ( (signed int)i >= CQuestData::GetNumOfQuestData(pQData) )
        break;
      v4 = pQData;
    }
  }
  CQuestWin2::UpDateViewQuestList(v2, 0, (unsigned __int8)nPlayerLevel);
}

//----- (00612EA0) --------------------------------------------------------
bool __thiscall EpicQuestWin::Create(EpicQuestWin *this, PgFrameWork *pkFrameWork)
{
  EpicQuestWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  NiSourceTexture *v9; // edi@7
  PgSprData *v10; // eax@9
  NiNode *v11; // esi@12
  bool result; // al@16
  NiSourceTexture *v13; // eax@17
  PgSprData *v14; // eax@20
  NiTexturingProperty *v15; // esi@21
  NiNode *v16; // esi@23
  PgFont *v17; // eax@27
  PgWinText *v18; // eax@27
  char *v19; // eax@27
  PgSprData *v20; // eax@27
  PgWinSpr *v21; // eax@27
  PgSprData *v22; // eax@27
  PgWinSpr *v23; // eax@27
  PgSprData *v24; // eax@27
  PgWinSpr *v25; // eax@27
  PgFont *v26; // eax@29
  PgWinText *v27; // eax@29
  NiRefObjectVtbl *v28; // edx@29
  char *v29; // eax@29
  PgWinSpr *v30; // eax@29
  SLWCreateInfo::Item *v31; // eax@29
  void *v32; // eax@37
  PgSprData *v33; // eax@41
  SlideListWin *v34; // eax@41
  SLWCreateInfo::Item *v35; // eax@41
  PgSprData *v36; // eax@45
  SlideListWin *v37; // eax@45
  void *v38; // eax@45
  NiRefObjectVtbl *v39; // edx@45
  NiObjectNET *v40; // eax@45
  NiObjectNET *v41; // eax@45
  NiObjectNET *v42; // eax@45
  NiObjectNET *v43; // eax@45
  NiObjectNET *v44; // eax@45
  NiObjectNET *v45; // eax@45
  SlideBar *v46; // eax@45
  NiObjectNET *v47; // eax@45
  NiObjectNET *v48; // eax@45
  NiObjectNET *v49; // eax@45
  NiObjectNET *v50; // eax@45
  NiObjectNET *v51; // eax@45
  NiObjectNET *v52; // eax@45
  SlideBar *v53; // eax@45
  void *v54; // ecx@45
  int (*v55)(void); // edx@45
  int v56; // eax@45
  int v57; // eax@45
  int v58; // edi@45
  PgWinSpr *v59; // eax@46
  PgWinSpr *v60; // eax@46
  PgWinSpr *v61; // eax@46
  PgWinSpr *v62; // eax@46
  PgWinSpr *v63; // eax@46
  PgSprData *v64; // edi@47
  PgWinBut *v65; // eax@47
  NiNode *v66; // edx@47
  void *v67; // eax@47
  PgWinBut *v68; // edi@47
  PgSprData *v69; // STA8_4@47
  int v70; // STA4_4@47
  int v71; // eax@47
  PgWinSpr *v72; // eax@47
  char *v73; // eax@47
  int v74; // eax@47
  void *v75; // edx@47
  PgWinBut *v76; // edi@47
  PgFont *v77; // STA4_4@47
  unsigned int v78; // STA0_4@47
  unsigned int v79; // ST9C_4@47
  int v80; // ST98_4@47
  int v81; // eax@47
  PgWinText *v82; // eax@47
  NiRefObjectVtbl *v83; // edi@47
  char *v84; // eax@47
  NiTexturingProperty *v85; // esi@49
  NiNode *v86; // esi@51
  const char *v87; // [sp+A4h] [bp-A0h]@18
  int *v88; // [sp+A8h] [bp-9Ch]@18
  int *v89; // [sp+ACh] [bp-98h]@18
  NiSourceTexture *v90; // [sp+B0h] [bp-94h]@18
  unsigned int v91; // [sp+B4h] [bp-90h]@1
  PgSprData *pkSprQstJob; // [sp+C4h] [bp-80h]@45
  unsigned int uiHeight; // [sp+C8h] [bp-7Ch]@20
  unsigned int uiWidth; // [sp+CCh] [bp-78h]@20
  SLWCreateInfo kCreateInfo; // [sp+D0h] [bp-74h]@29
  PgSprData *pkSprQstEvent; // [sp+ECh] [bp-58h]@45
  NiPointer<NiTexturingProperty> spTexProp; // [sp+F0h] [bp-54h]@4
  PgSprData *pkSprQstInstance; // [sp+F4h] [bp-50h]@45
  PgSprData *pkSprQstNor; // [sp+F8h] [bp-4Ch]@29
  int iOffX; // [sp+FCh] [bp-48h]@17
  int iOffY; // [sp+100h] [bp-44h]@17
  void *pkTextWin; // [sp+104h] [bp-40h]@1
  void *pCIItem; // [sp+108h] [bp-3Ch]@27
  int uiTop; // [sp+10Ch] [bp-38h]@9
  int uiLeft; // [sp+110h] [bp-34h]@9
  NiPointer<NiNode> spNode; // [sp+114h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+118h] [bp-2Ch]@29
  unsigned int v108; // [sp+134h] [bp-10h]@1
  int v109; // [sp+140h] [bp-4h]@1
  int v110; // [sp+144h] [bp+0h]@1

  v108 = (unsigned int)&v110 ^ __security_cookie;
  v91 = (unsigned int)&v110 ^ __security_cookie;
  v2 = this;
  pkTextWin = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v109 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\EpicQuestWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v109) = 1;
  if ( v8 )
    v9 = (NiSourceTexture *)v8[1].__vecDelDtor;
  else
    v9 = 0;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v9);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v10, 0, (PgFrameWork *)pkTextWin, "EpicQuestWin", 0) )
  {
    LOBYTE(v109) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spTexProp.m_pObject,
        1u);
    v11 = spNode.m_pObject;
    v109 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    return 0;
  }
  iOffX = uiLeft;
  iOffY = uiTop;
  v13 = MenuTexMgr::GetTexture(0x13u);
  if ( v13 )
  {
    v90 = v13;
    v89 = &uiTop;
    v88 = &uiLeft;
    v87 = "Theme";
  }
  else
  {
    v90 = 0;
    v89 = &uiTop;
    v88 = &uiLeft;
    v87 = "Theme";
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v87, v88, v89, v90);
  PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v17 = Font::Get(MAIN_MENU);
    v18 = PgWinText::CreateWin(
            uiLeft - iOffX,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v17,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkWinTitle = v18;
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v18,
      1,
      v91);
    ((void (__stdcall *)(__int64 *))v2->m_pkWinTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    pkTextWin = &v2->m_pkWinTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v19 = TextData2::Get(0x968BBFE6u);
    (*(void (__thiscall **)(PgWinText *, char *))pkTextWin)(v2->m_pkWinTitle, v19);
    ((void (__stdcall *)(_DWORD))v2->m_pkWinTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v9);
    v21 = PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v21,
      1u);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v9);
    v23 = PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      1u);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v9);
    v25 = PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v9);
    PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(
      uiLeft - iOffX,
      uiTop - iOffY,
      (PgSprData *)pCIItem,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      3u,
      0,
      0);
    pkTextWin = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      pCIItem = PgSprData::Create(
                  &spNode.m_pObject->baseclass_0,
                  "HelpLinkNor",
                  &uiLeft,
                  &uiTop,
                  (NiSourceTexture *)pkTextWin);
      PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add((PgSprData *)pCIItem, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(
        uiLeft - iOffX,
        uiTop - iOffY,
        (PgSprData *)pCIItem,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        5u,
        0,
        0);
    }
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, v9);
    v26 = Font::Get(MAIN_MENU);
    v27 = PgWinText::CreateWin(
            uiLeft - iOffX,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v26,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = v27;
    v28[122].__vecDelDtor((NiRefObject *)v27, 1u);
    (*(void (__stdcall **)(D3DXCOLOR *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWhiteColor);
    pkSprQstNor = (PgSprData *)(*(_DWORD *)pkTextWin + 472);
    v29 = TextData2::Get(0xF2F3DC4Du);
    ((void (__thiscall *)(void *, char *))pkSprQstNor->baseclass_0.vfptr)(pkTextWin, v29);
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
    v30 = PgWinSpr::CreateWin(
            uiLeft - iOffX,
            uiTop - iOffY,
            (PgSprData *)pCIItem,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v30,
      0);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v109) = 2;
    v31 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v31->nItemType = 1;
    v31->pNode = spNode.m_pObject;
    pCIItem = v31;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    LOBYTE(v109) = 3;
    pkTextWin = (char *)pCIItem + 72;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v109) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v109) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pCIItem = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
    LOBYTE(v109) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v32 = pCIItem;
    *((_BYTE *)pCIItem + 88) = 1;
    *((_DWORD *)v32 + 1) = spNode.m_pObject;
    pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pCIItem = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
    LOBYTE(v109) = 7;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
    pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pCIItem = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
    LOBYTE(v109) = 8;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, v9);
    v34 = SlideListWin::CreateWin(
            uiLeft - iOffX,
            uiTop - iOffY,
            v33,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pListWinQuestList = v34;
    v34->m_uiLClickMsg = 0;
    v2->m_pListWinQuestList->m_bCheckEnable = 0;
    SlideListWin::AlignText(v2->m_pListWinQuestList, 4u);
    SlideListWin::UpdateViewList(v2->m_pListWinQuestList);
    SLWCreateInfo::Clear(&kCreateInfo);
    v35 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v35->nItemType = 1;
    v35->pNode = spNode.m_pObject;
    pCIItem = v35;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar02Nor", 0xEu);
    LOBYTE(v109) = 9;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    pCIItem = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)pCIItem = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
    LOBYTE(v109) = 10;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pCIItem + 72),
      &thisa);
    LOBYTE(v109) = 2;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    *((_DWORD *)pCIItem + 1) = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText02", &uiLeft, &uiTop, v9);
    v37 = SlideListWin::CreateWin(
            uiLeft - iOffX,
            uiTop - iOffY,
            v36,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pListWinContent = v37;
    v37->m_bCheckEnable = 0;
    SlideListWin::AlignText(v2->m_pListWinContent, 4u);
    SlideListWin::UpdateViewList(v2->m_pListWinContent);
    v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, v9);
    v39 = spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pCIItem = v38;
    v40 = (NiObjectNET *)((int (__stdcall *)(_DWORD))v39[18].__vecDelDtor)("SlideBar_DnBtnNor01");
    NiObjectNET::SetName(v40, "SlideBar_DnBtn01Nor");
    v41 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick01");
    NiObjectNET::SetName(v41, "SlideBar_DnBtn01Click");
    v42 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver01");
    NiObjectNET::SetName(v42, "SlideBar_DnBtn01Over");
    v43 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor01");
    NiObjectNET::SetName(v43, "SlideBar_UpBtn01Nor");
    v44 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick01");
    NiObjectNET::SetName(v44, "SlideBar_UpBtn01Click");
    v45 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver01");
    NiObjectNET::SetName(v45, "SlideBar_UpBtn01Over");
    v46 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar01",
            "SlideBar_UpBtn01",
            "SlideBar_DnBtn01",
            (PgSprData *)pCIItem,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarList = v46;
    v46->m_uiClickMsg = 1;
    v2->m_pSlideBarList->m_eType = 1;
    v47 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnNor02");
    NiObjectNET::SetName(v47, "SlideBar_DnBtn02Nor");
    v48 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnClick02");
    NiObjectNET::SetName(v48, "SlideBar_DnBtn02Click");
    v49 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_DnBtnOver02");
    NiObjectNET::SetName(v49, "SlideBar_DnBtn02Over");
    v50 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnNor02");
    NiObjectNET::SetName(v50, "SlideBar_UpBtn02Nor");
    v51 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnClick02");
    NiObjectNET::SetName(v51, "SlideBar_UpBtn02Click");
    v52 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("SlideBar_UpBtnOver02");
    NiObjectNET::SetName(v52, "SlideBar_UpBtn02Over");
    v53 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar02",
            "SlideBar_UpBtn02",
            "SlideBar_DnBtn02",
            (PgSprData *)pCIItem,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBarContent = v53;
    v53->m_uiClickMsg = 2;
    v2->m_pSlideBarContent->m_eType = 1;
    v54 = v2->m_pSlideBarContent;
    v55 = (int (*)(void))v2->m_pSlideBarContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    pkTextWin = v2->m_pSlideBarContent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkSprQstNor = (PgSprData *)v54;
    v56 = v55();
    v57 = ((int (__stdcall *)(int))pkSprQstNor->baseclass_0.vfptr[41].__vecDelDtor)(v56);
    (*(void (__thiscall **)(SlideBar *, int))((void (__thiscall **)(_DWORD, _DWORD))pkTextWin + 77))(
      v2->m_pSlideBarContent,
      v57);
    pkSprQstNor = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstNor", &uiLeft, &uiTop, v9);
    pCIItem = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstEpic", &uiLeft, &uiTop, v9);
    pkSprQstJob = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstJob", &uiLeft, &uiTop, v9);
    pkSprQstEvent = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstEvent", &uiLeft, &uiTop, v9);
    pkSprQstInstance = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconQstInDun", &uiLeft, &uiTop, v9);
    v58 = (int)v2->m_pkSprQstEpic;
    pkTextWin = (void *)13;
    do
    {
      v59 = PgWinSpr::CreateWin(0, 0, pkSprQstNor, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)(v58 - 52) = v59;
      v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v59,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v58 - 52) + 256))(0);
      v60 = PgWinSpr::CreateWin(0, 0, (PgSprData *)pCIItem, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)v58 = v60;
      v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v60,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v58 + 256))(0);
      v61 = PgWinSpr::CreateWin(0, 0, pkSprQstJob, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)(v58 + 52) = v61;
      v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v61,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v58 + 52) + 256))(0);
      v62 = PgWinSpr::CreateWin(0, 0, pkSprQstEvent, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)(v58 + 104) = v62;
      v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v62,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v58 + 104) + 256))(0);
      v63 = PgWinSpr::CreateWin(0, 0, pkSprQstInstance, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)(v58 + 156) = v63;
      v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v63,
        0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v58 + 156) + 256))(0);
      v58 += 4;
      pkTextWin = (char *)pkTextWin - 1;
    }
    while ( pkTextWin );
    v64 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v64, &spNode.m_pObject->baseclass_0, "BtnOver");
    PgSprData::Add(v64, &spNode.m_pObject->baseclass_0, "BtnClick");
    PgSprData::Add(v64, &spNode.m_pObject->baseclass_0, "BtnDisable");
    v65 = PgWinBut::CreateWin(
            uiLeft - iOffX,
            uiTop - iOffY + 1,
            v64,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            4u,
            0,
            0);
    v66 = spNode.m_pObject;
    v2->m_pkAcceptBtn = v65;
    v67 = PgSprData::Create(&v66->baseclass_0, "BtnDisable", &uiLeft, &uiTop, 0);
    v68 = v2->m_pkAcceptBtn;
    pCIItem = v67;
    v69 = (PgSprData *)v67;
    v70 = ((int (__thiscall *)(PgWinBut *))v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v68);
    v71 = ((int (__thiscall *)(PgWinBut *))v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v68);
    v72 = PgWinSpr::CreateWin(v71, v70, v69, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkAcceptBtnSpr = v72;
    ((void (__thiscall *)(PgWinSpr *))v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v72);
    ((void (__stdcall *)(_DWORD))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v2->m_pkAcceptBtnSpr->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v73 = TextData2::Get(0x2889769Au);
    PgWin::SetToolTipWinText(&v2->m_pkAcceptBtnSpr->baseclass_0, v73);
    v74 = **((_DWORD **)pCIItem + 9);
    v75 = *(void **)(v74 + 20);
    v76 = v2->m_pkAcceptBtn;
    pkSprQstInstance = *(PgSprData **)(v74 + 24);
    pkSprQstEvent = (PgSprData *)v75;
    v77 = Font::Get(MAIN_MENU);
    v78 = (unsigned int)pkSprQstInstance;
    v79 = (unsigned int)pkSprQstEvent;
    v80 = ((int (__thiscall *)(PgWinBut *))v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v76);
    v81 = ((int (__thiscall *)(PgWinBut *))v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v76);
    v82 = PgWinText::CreateWin(v81, v80, v79, v78, v77, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkBtnText = v82;
    v82->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v82,
      5u);
    v83 = v2->m_pkBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v84 = TextData2::Get(0xD4E6E5E7u);
    v83[118].__vecDelDtor((NiRefObject *)v2->m_pkBtnText, (unsigned int)v84);
    ((void (__stdcall *)(_DWORD))v2->m_pkBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__thiscall *)(EpicQuestWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    LOBYTE(v109) = 1;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)pkSprQstInstance);
      operator delete(*(void **)&kCreateInfo);
    }
    v85 = spTexProp.m_pObject;
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    LOBYTE(v109) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v85, 1u);
    v86 = spNode.m_pObject;
    v109 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v86 )
      v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v86, 1u);
    result = 1;
  }
  else
  {
    v15 = spTexProp.m_pObject;
    LOBYTE(v109) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    v16 = spNode.m_pObject;
    v109 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v16 )
      return 0;
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00613D70) --------------------------------------------------------
void __thiscall EpicQuestWin::UpdateQuestData(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1

  v1 = this;
  EpicQuestWin::UpDateViewQuestList(this);
  if ( v1->m_nSelectedID <= -1 )
    EpicQuestWin::OnQuestListLClick(v1, 0);
  else
    EpicQuestWin::UpDateViewQuesContent(v1, LOWORD(v1->m_nSelectedID));
  if ( !SlideListWin::GetItemSize(v1->m_pListWinQuestList) )
  {
    if ( !v1->m_eType )
    {
      ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
  }
}

//----- (00613DF0) --------------------------------------------------------
void __thiscall EpicQuestWin::OnQuestListLClick(EpicQuestWin *this, int nIndex)
{
  EpicQuestWin *v2; // esi@1
  int v3; // eax@2
  CQuest *v4; // eax@4
  QUEST_DATA *v5; // eax@4
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@4
  int v7; // [sp+0h] [bp-8h]@0
  signed int v8; // [sp+0h] [bp-8h]@5
  int dwQuestID; // [sp+4h] [bp-4h]@1

  v2 = this;
  SlideListWin::RemoveAllList(this->m_pListWinContent);
  if ( SlideListWin::GetData(v2->m_pListWinQuestList, nIndex, (unsigned int *)&dwQuestID) )
  {
    v3 = dwQuestID;
    v2->m_nSelectedID = dwQuestID;
    if ( v3 != -1 && !v2->m_eType )
    {
      v4 = QuestDataMgr::GetQuest();
      v5 = CQuestData::GetQuestData(v4->m_pQuestData, LOWORD(v2->m_nSelectedID));
      v6 = v2->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
      if ( v5->Start.bIsWaitListProgress )
      {
        ((void (__stdcall *)(signed int, int))v6)(1, v7);
        ((void (__stdcall *)(_DWORD))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        v8 = 0;
      }
      else
      {
        ((void (__stdcall *)(_DWORD, int))v6)(0, v7);
        ((void (__stdcall *)(signed int))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        v8 = 1;
      }
      ((void (__cdecl *)(signed int))v2->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
    }
    EpicQuestWin::UpdateQuestData(v2);
  }
}

//----- (00613EB0) --------------------------------------------------------
void __thiscall CQuestWin2::OnTAB2(CQuestWin2 *this)
{
  CQuestWin2 *v1; // esi@1
  PgWinBut *v2; // ecx@1
  NiRefObjectVtbl *v3; // edi@1
  char *v4; // eax@1

  v1 = this;
  this->m_pkTab01->m_bCheck = 0;
  this->m_pkTab02->m_bCheck = 1;
  v2 = this->m_pkAcceptBtn;
  v1->m_nCurSelTab = 2;
  v1->m_nSelectedID = -1;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = v1->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v4 = TextData2::Get(0xD4E6E5E7u);
  v3[118].__vecDelDtor((NiRefObject *)v1->m_pkButText1, (unsigned int)v4);
  ((void (__stdcall *)(_DWORD))v1->m_pkButText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->bReverseSort = 1;
  v1->m_nSortColumn = -1;
  v1->m_nStateFilterType = 4;
  CQuestWin2::UpdateQuestData(v1);
  CQuestWin2::UpdateQuestData(v1);
}

//----- (00613F70) --------------------------------------------------------
void __thiscall CQuestWin2::SelectTab(CQuestWin2 *this, int TabNum)
{
  if ( TabNum == 1 )
  {
    CQuestWin2::OnTAB1(this);
  }
  else
  {
    if ( TabNum == 2 )
      CQuestWin2::OnTAB2(this);
  }
}

//----- (00613FA0) --------------------------------------------------------
void __thiscall EpicQuestWin::OnShowWin(EpicQuestWin *this)
{
  EpicQuestWin *v1; // esi@1
  EpicQuestWin::eUI_TYPE v2; // eax@1
  NiRefObjectVtbl *v3; // edi@2
  char *v4; // eax@2
  char *v5; // eax@2
  NiRefObjectVtbl *v6; // edi@4
  char *v7; // eax@4

  v1 = this;
  v2 = this->m_eType;
  if ( v2 == 1 )
  {
    ((void (__stdcall *)(_DWORD))this->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtnSpr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    EpicQuestWin::TotalMaxEpicQuest(v1);
    v3 = v1->m_pkWinTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v4 = TextData2::Get(0x292C0C8Du);
    v5 = fs(v4);
    v3[118].__vecDelDtor((NiRefObject *)v1->m_pkWinTitle, (unsigned int)v5);
    EpicQuestWin::UpdateQuestData(v1);
  }
  else
  {
    if ( !v2 )
    {
      ((void (__stdcall *)(_DWORD))this->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v1->m_pkAcceptBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v1->m_pkBtnText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v6 = v1->m_pkWinTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = TextData2::Get(0x908E7DD5u);
      v6[118].__vecDelDtor((NiRefObject *)v1->m_pkWinTitle, (unsigned int)v7);
    }
    EpicQuestWin::UpdateQuestData(v1);
  }
}

//----- (006140C0) --------------------------------------------------------
void __thiscall EpicQuestWin::OnCommand(EpicQuestWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@7

  switch ( wParam )
  {
    case 0u:
      EpicQuestWin::OnQuestListLClick(this, lParam);
      break;
    case 1u:
      EpicQuestWin::OnSlideBarList(this);
      break;
    case 2u:
      EpicQuestWin::OnSlideBarContent(this);
      break;
    case 3u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 4u:
      EpicQuestWin::OnQuestAccept(this);
      goto LABEL_7;
    case 5u:
LABEL_7:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "EpicQuestWin");
      break;
    default:
      return;
  }
}

//----- (00614150) --------------------------------------------------------
void __thiscall CQuestWin2::OnCommand(CQuestWin2 *this, unsigned int wParam, int lParam)
{
  bool v3; // zf@13

  switch ( wParam )
  {
    case 1u:
      CQuestWin2::OnWinClose(this);
      break;
    case 2u:
      CQuestWin2::OnTAB1(this);
      break;
    case 3u:
      this->m_bLevelUp = 0;
      CQuestWin2::OnTAB2(this);
      break;
    case 9u:
      CQuestWin2::OnSlideBarList(this);
      break;
    case 0xAu:
      CQuestWin2::UpDateContentSideBar(this);
      break;
    case 8u:
      CQuestWin2::OnQuestListLClick(this, lParam, 0);
      break;
    case 0xBu:
      CQuestWin2::OnSortByName(this);
      break;
    case 0xCu:
      CQuestWin2::OnSortByState(this);
      break;
    case 5u:
      CQuestWin2::OnGiveUp(this);
      break;
    case 6u:
      CQuestWin2::OnEpicQuestCompleteList(this);
      break;
    case 0x12u:
      CQuestWin2::OnFullMapOpen(this);
      break;
    case 0xDu:
      v3 = this->bReverseSort == 0;
      this->m_nSortColumn = -1;
      this->bReverseSort = v3;
      this->m_nStateFilterType = 4;
      CQuestWin2::UpdateQuestData(this);
      break;
    case 0x13u:
      lParam = (unsigned __int16)lParam;
      CQuestWin2::OnAutoRunBtnClick(this, (unsigned __int16 *)&lParam);
      break;
    case 0x14u:
      CQuestWin2::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (00614280) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Min(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (006142A0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Max(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (006142C0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (006142E0) --------------------------------------------------------
void __thiscall NiTArray<PgWinBut__>::_NiTArray<PgWinBut__>(NiTArray<PgWinBut *> *this)
{
  void *v1; // ST00_4@1

  v1 = this->m_pBase;
  this->vfptr = (NiTArray<PgWinBut *>Vtbl *)&NiTArray<PgWinBut__>::_vftable_;
  operator delete__(v1);
}
// 9C0518: using guessed type int (__thiscall *NiTArray_PgWinBut _____vftable_)(void *p, char);

//----- (00614300) --------------------------------------------------------
unsigned int __thiscall NiTArray<PgWinBut__>::Remove(NiTArray<PgWinBut *> *this, PgWinBut *const *element)
{
  unsigned int result; // eax@2
  PgWinBut **v3; // edx@3
  unsigned int v4; // edx@8
  unsigned int v5; // edx@8

  if ( *element && (result = 0, this->m_uiSize) )
  {
    v3 = this->m_pBase;
    while ( *v3 != *element )
    {
      ++result;
      ++v3;
      if ( result >= this->m_uiSize )
        goto LABEL_6;
    }
    this->m_pBase[result] = 0;
    v4 = this->m_uiSize;
    --this->m_uiESize;
    v5 = v4 - 1;
    if ( result == v5 )
      this->m_uiSize = v5;
  }
  else
  {
LABEL_6:
    result = -1;
  }
  return result;
}

//----- (00614360) --------------------------------------------------------
void *__thiscall NiTArray<PgWinBut__>::_vector_deleting_destructor_(NiTArray<PgWinBut *> *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pBase;
  this->vfptr = (NiTArray<PgWinBut *>Vtbl *)&NiTArray<PgWinBut__>::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0518: using guessed type int (__thiscall *NiTArray_PgWinBut _____vftable_)(void *p, char);

//----- (00614390) --------------------------------------------------------
void *__thiscall AutoRunBut::_vector_deleting_destructor_(AutoRunBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AutoRunBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&AutoRunBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C02C4: using guessed type int (__stdcall *AutoRunBut___vftable_)(int uiFlags);
// 9C02E4: using guessed type int (__thiscall *AutoRunBut___vftable_)(void *p, char);

//----- (006143D0) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >,std::_Iterator_base0> *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 105) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 105) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 105); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 105); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (00614420) --------------------------------------------------------
int std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__(...)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 69) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 69) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 69); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (00614470) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Lrotate(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (006144D0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Rrotate(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00614530) --------------------------------------------------------
void *__thiscall EpicQuestWin::_scalar_deleting_destructor_(EpicQuestWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  MsgBox *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EpicQuestWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EpicQuestWin::_vftable_;
  v3 = this->ms_pkMsgBox.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0520: using guessed type int (__stdcall *EpicQuestWin___vftable_)(int uiFlags);
// 9C053C: using guessed type int (__thiscall *EpicQuestWin___vftable_)(void *p, char);

//----- (006145D0) --------------------------------------------------------
void __thiscall CQuestWin2::QData::_QData(CQuestWin2::QData *this)
{
  CQuestWin2::QData *v1; // esi@1

  v1 = this;
  if ( this->strState.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->strState.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->strState.baseclass_0._Myres = 15;
  v1->strState.baseclass_0._Mysize = 0;
  v1->strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->strTitle.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->strTitle.baseclass_0._Mysize = 0;
  v1->strTitle.baseclass_0._Myres = 15;
  v1->strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (00614620) --------------------------------------------------------
void __thiscall EpicQuestWin::QData::_QData(EpicQuestWin::QData *this)
{
  EpicQuestWin::QData *v1; // esi@1

  v1 = this;
  if ( this->strTitle.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->strTitle.baseclass_0._Myres = 15;
  v1->strTitle.baseclass_0._Mysize = 0;
  v1->strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (00614650) --------------------------------------------------------
void __thiscall std::pair<int_CQuestWin2::QData>::_pair<int_CQuestWin2::QData>(std::pair<int,CQuestWin2::QData> *this)
{
  std::pair<int,CQuestWin2::QData> *v1; // esi@1

  v1 = this;
  if ( this->baseclass_0.second.strState.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->baseclass_0.second.strState.baseclass_0._Myres = 15;
  v1->baseclass_0.second.strState.baseclass_0._Mysize = 0;
  v1->baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->baseclass_0.second.strTitle.baseclass_0._Mysize = 0;
  v1->baseclass_0.second.strTitle.baseclass_0._Myres = 15;
  v1->baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (006146A0) --------------------------------------------------------
void __thiscall std::pair<int_EpicQuestWin::QData>::_pair<int_EpicQuestWin::QData>(std::pair<int,EpicQuestWin::QData> *this)
{
  std::pair<int,EpicQuestWin::QData> *v1; // esi@1

  v1 = this;
  if ( this->baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->baseclass_0.second.strTitle.baseclass_0._Myres = 15;
  v1->baseclass_0.second.strTitle.baseclass_0._Mysize = 0;
  v1->baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (006146D0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,st *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Eqrange(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,st *result, const int *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v5; // ebx@1
  const int v6; // edi@2
  const int v7; // esi@3
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v8; // eax@11
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,st *v9; // eax@18

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  if ( !v4->_Isnil )
  {
    v6 = *_Keyval;
    do
    {
      v7 = v4->_Myval.baseclass_0.first;
      if ( v7 >= v6 )
      {
        if ( v3->_Isnil && v6 < v7 )
          v3 = v4;
        v5 = v4;
        v4 = v4->_Left;
      }
      else
      {
        v4 = v4->_Right;
      }
    }
    while ( !v4->_Isnil );
  }
  if ( v3->_Isnil )
    v8 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  else
    v8 = v3->_Left;
  while ( !v8->_Isnil )
  {
    if ( *_Keyval >= v8->_Myval.baseclass_0.first )
    {
      v8 = v8->_Right;
    }
    else
    {
      v3 = v8;
      v8 = v8->_Left;
    }
  }
  v9 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)&result->baseclass_0.second.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  return v9;
}

//----- (00614760) --------------------------------------------------------
void __thiscall CQuestWin2::QData::QData(CQuestWin2::QData *this, CQuestWin2::QData *__that)
{
  CQuestWin2::QData *v2; // esi@1
  char *v3; // ecx@1

  v2 = this;
  this->dwQuestID = __that->dwQuestID;
  this->nType = __that->nType;
  v3 = (char *)&this->strTitle;
  *((_DWORD *)v3 + 5) = 15;
  *((_DWORD *)v3 + 4) = 0;
  *v3 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v3,
    &__that->strTitle,
    0,
    0xFFFFFFFFu);
  v2->strState.baseclass_0._Myres = 15;
  v2->strState.baseclass_0._Mysize = 0;
  v2->strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v2->strState,
    &__that->strState,
    0,
    0xFFFFFFFFu);
  v2->dwData = __that->dwData;
  v2->r = __that->r;
  v2->g = __that->g;
  v2->b = __that->b;
  v2->nStatus = __that->nStatus;
  v2->bIsFilterType = __that->bIsFilterType;
}

//----- (00614820) --------------------------------------------------------
void __thiscall EpicQuestWin::QData::QData(EpicQuestWin::QData *this, unsigned int _dwQuestID, int _nType, const char *_szTitle, unsigned int _dwData, int _r, int _g, int _b)
{
  EpicQuestWin::QData *v8; // esi@1
  char *v9; // ecx@1

  v8 = this;
  v9 = (char *)&this->strTitle;
  *((_DWORD *)v9 + 5) = 15;
  *((_DWORD *)v9 + 4) = 0;
  *v9 = 0;
  v8->nType = _nType;
  v8->dwQuestID = _dwQuestID;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v9,
    _szTitle,
    strlen(_szTitle));
  v8->dwData = _dwData;
  v8->b = _b;
  v8->r = _r;
  v8->g = _g;
}

//----- (006148B0) --------------------------------------------------------
void __thiscall CQuestWin2::QData::QData(CQuestWin2::QData *this, unsigned int _dwQuestID, int _nType, const char *_szTitle, const char *_szState, unsigned int _dwData, int _r, int _g, int _b, PLAYER_QUEST_STATUS _Status, bool _bFilterType)
{
  CQuestWin2::QData *v11; // esi@1
  char *v12; // ecx@1

  v11 = this;
  v12 = (char *)&this->strTitle;
  *((_DWORD *)v12 + 5) = 15;
  *((_DWORD *)v12 + 4) = 0;
  *v12 = 0;
  v11->strState.baseclass_0._Myres = 15;
  v11->strState.baseclass_0._Mysize = 0;
  v11->strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v11->dwQuestID = _dwQuestID;
  v11->nType = _nType;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v12,
    _szTitle,
    strlen(_szTitle));
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v11->strState,
    _szState,
    strlen(_szState));
  v11->dwData = _dwData;
  v11->r = _r;
  v11->g = _g;
  v11->b = _b;
  v11->nStatus = _Status;
  v11->bIsFilterType = _bFilterType;
}

//----- (00614980) --------------------------------------------------------
void *__thiscall CQuestWin2::_vector_deleting_destructor_(CQuestWin2 *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CQuestWin2::_CQuestWin2(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006149B0) --------------------------------------------------------
void __thiscall std::pair<int_const_EpicQuestWin::QData>::pair<int_const_EpicQuestWin::QData>(std::pair<int const ,EpicQuestWin::QData> *this, std::pair<int,EpicQuestWin::QData> *_Right)
{
  std::pair<int const ,EpicQuestWin::QData> *v2; // esi@1
  char *v3; // ecx@1

  v2 = this;
  this->baseclass_0.first = _Right->baseclass_0.first;
  this->baseclass_0.second.dwQuestID = _Right->baseclass_0.second.dwQuestID;
  v3 = (char *)&this->baseclass_0.second.strTitle;
  v2->baseclass_0.second.nType = _Right->baseclass_0.second.nType;
  *((_DWORD *)v3 + 5) = 15;
  *((_DWORD *)v3 + 4) = 0;
  *v3 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v3,
    &_Right->baseclass_0.second.strTitle,
    0,
    0xFFFFFFFFu);
  v2->baseclass_0.second.dwData = _Right->baseclass_0.second.dwData;
  v2->baseclass_0.second.r = _Right->baseclass_0.second.r;
  v2->baseclass_0.second.g = _Right->baseclass_0.second.g;
  v2->baseclass_0.second.b = _Right->baseclass_0.second.b;
}

//----- (00614A10) --------------------------------------------------------
void __thiscall std::pair<int_EpicQuestWin::QData>::pair<int_EpicQuestWin::QData>(std::pair<int,EpicQuestWin::QData> *this, char *_Val1, EpicQuestWin::QData *_Val2)
{
  std::pair<int,EpicQuestWin::QData> *v3; // esi@1
  char *v4; // ecx@1

  v3 = this;
  this->baseclass_0.first = (unsigned __int8)*_Val1;
  this->baseclass_0.second.dwQuestID = _Val2->dwQuestID;
  v4 = (char *)&this->baseclass_0.second.strTitle;
  v3->baseclass_0.second.nType = _Val2->nType;
  *((_DWORD *)v4 + 5) = 15;
  *((_DWORD *)v4 + 4) = 0;
  *v4 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v4,
    &_Val2->strTitle,
    0,
    0xFFFFFFFFu);
  v3->baseclass_0.second.dwData = _Val2->dwData;
  v3->baseclass_0.second.r = _Val2->r;
  v3->baseclass_0.second.g = _Val2->g;
  v3->baseclass_0.second.b = _Val2->b;
}

//----- (00614A70) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Insert(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v6; // edi@8
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v7; // edx@8
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v8; // edx@11
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v9; // edx@13
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v10; // eax@15
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v11; // edx@16
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v12; // esi@16
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v13; // esi@17
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v14; // edx@19
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v15; // esi@21
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v16; // esi@23
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v17; // edx@27
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v18; // esi@27
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v19; // edi@27
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v20; // edi@29
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v21; // edi@31
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v22; // edx@37
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v23; // esi@37
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v24; // esi@39
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v25; // esi@41
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v26; // edi@47
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v27; // edi@49
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v28; // ecx@55
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *v29; // eax@55

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0x2C8590A )
  {
    if ( _Newnode->_Myval.baseclass_0.second.strState.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Newnode->_Myval.baseclass_0.second.strState.baseclass_0._Myres = 15;
    _Newnode->_Myval.baseclass_0.second.strState.baseclass_0._Mysize = 0;
    _Newnode->_Myval.baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres = 15;
    _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0._Mysize = 0;
    _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v6 = _Newnode;
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_53:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
    }
    else
    {
      v13 = v12->_Left;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v22 = v11->_Left;
          v10->_Left = v22->_Right;
          v23 = v22->_Right;
          if ( !v23->_Isnil )
            v23->_Parent = v10;
          v22->_Parent = v10->_Parent;
          v24 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v24->_Parent )
          {
            v24->_Parent = v22;
          }
          else
          {
            v25 = v10->_Parent;
            if ( v10 == v25->_Right )
              v25->_Right = v22;
            else
              v25->_Left = v22;
          }
          v22->_Right = v10;
          v10->_Parent = v22;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v26 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v26->_Parent )
        {
          v26->_Parent = v18;
        }
        else
        {
          v27 = v17->_Parent;
          if ( v17 == v27->_Left )
            v27->_Left = v18;
          else
            v27->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_53;
      }
    }
    v11->_Color = 1;
    v13->_Color = 1;
    v10->_Parent->_Parent->_Color = 0;
    v10 = v10->_Parent->_Parent;
  }
  v28 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v29 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v28->_Color = 1;
  return v29;
}

//----- (00614CD0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Insert(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v6; // edi@6
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v7; // edx@6
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v8; // edx@9
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v9; // edx@11
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v10; // eax@13
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v11; // edx@14
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v12; // esi@14
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v13; // esi@15
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v14; // edx@18
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v15; // esi@20
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v16; // esi@22
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v17; // edx@26
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v18; // esi@26
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v19; // edi@26
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v20; // edi@28
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v21; // edi@30
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v22; // esi@33
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v23; // edx@36
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v24; // esi@36
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v25; // esi@38
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v26; // esi@40
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v27; // edi@46
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v28; // edi@48
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v29; // ecx@54
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *v30; // eax@54

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0x4924923 )
  {
    if ( _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres = 15;
    _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0._Mysize = 0;
    _Newnode->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v6 = _Newnode;
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_52:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_52;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (00614F20) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v3; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v4; // ebx@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v10; // eax@23
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  int v14; // eax@38
  unsigned int v15; // eax@63
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *v16; // eax@65
  std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *thisa; // [sp+Ch] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 105) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 105) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 105) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 105) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    if ( v7->baseclass_0.baseclass_0._Myhead->_Right == (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 105) )
      {
        v7->baseclass_0.baseclass_0._Myhead->_Right = (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v6;
      }
      else
      {
        v10 = std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node **)&v4);
        v7 = thisa;
        thisa->baseclass_0.baseclass_0._Myhead->_Right = v10;
      }
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 105) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 105) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 104);
  *(_BYTE *)(*(_DWORD *)&v5 + 104) = *(_BYTE *)(*(_DWORD *)&v3 + 104);
  *(_BYTE *)(*(_DWORD *)&v3 + 104) = v13;
  v7 = thisa;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&v3 + 104) == 1 )
  {
    for ( ;
          (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v4 != v7->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 104) != 1 )
        break;
      v14 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v14 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v14 + 104) )
        {
          *(_BYTE *)(v14 + 104) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 104) = 0;
          std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Lrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node **)&v6);
          v14 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          v7 = thisa;
        }
        if ( *(_BYTE *)(v14 + 105) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v14 + 104) != 1 || *(_BYTE *)(*(_DWORD *)(v14 + 8) + 104) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v14 + 8) + 104) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v14 + 104) = 1;
            *(_BYTE *)(v14 + 104) = 0;
            std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Rrotate(
              v7,
              (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v14);
            v14 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            v7 = thisa;
          }
          *(_BYTE *)(v14 + 104) = *(_BYTE *)(*(_DWORD *)&v6 + 104);
          *(_BYTE *)(*(_DWORD *)&v6 + 104) = 1;
          *(_BYTE *)(*(_DWORD *)(v14 + 8) + 104) = 1;
          std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Lrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v14 + 104) )
        {
          *(_BYTE *)(v14 + 104) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 104) = 0;
          std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Rrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node **)&v6);
          v14 = **(_DWORD **)&v6;
          v7 = thisa;
        }
        if ( *(_BYTE *)(v14 + 105) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v14 + 8) + 104) != 1 || *(_BYTE *)(*(_DWORD *)v14 + 104) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v14 + 104) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v14 + 8) + 104) = 1;
            *(_BYTE *)(v14 + 104) = 0;
            std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Lrotate(
              v7,
              (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v14);
            v14 = **(_DWORD **)&v6;
            v7 = thisa;
          }
          *(_BYTE *)(v14 + 104) = *(_BYTE *)(*(_DWORD *)&v6 + 104);
          *(_BYTE *)(*(_DWORD *)&v6 + 104) = 1;
          *(_BYTE *)(*(_DWORD *)v14 + 104) = 1;
          std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Rrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v14 + 104) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 104) = 1;
  }
  if ( *(_DWORD *)(*(_DWORD *)&v3 + 72) >= 0x10u )
    operator delete(*(void **)(*(_DWORD *)&v3 + 52));
  *(_DWORD *)(*(_DWORD *)&v3 + 72) = 15;
  *(_DWORD *)(*(_DWORD *)&v3 + 68) = 0;
  *(_BYTE *)(*(_DWORD *)&v3 + 52) = 0;
  if ( *(_DWORD *)(*(_DWORD *)&v3 + 44) >= 0x10u )
    operator delete(*(void **)(*(_DWORD *)&v3 + 24));
  *(_DWORD *)(*(_DWORD *)&v3 + 44) = 15;
  *(_DWORD *)(*(_DWORD *)&v3 + 40) = 0;
  *(_BYTE *)(*(_DWORD *)&v3 + 24) = 0;
  operator delete(*(void **)&v3);
  v15 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v15 > 0 )
    thisa->baseclass_0.baseclass_0._Mysize = v15 - 1;
  v16 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v16;
}

//----- (006151C0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v14; // eax@35
  std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *i; // ecx@36
  int v16; // eax@38
  unsigned int v17; // eax@61
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *v18; // eax@63
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 69) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 69) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 69) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 69) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 69) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v6;
      else
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 69) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 69) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 68);
  *(_BYTE *)(*(_DWORD *)&v5 + 68) = *(_BYTE *)(*(_DWORD *)&v3 + 68);
  *(_BYTE *)(*(_DWORD *)&v3 + 68) = v13;
LABEL_35:
  v14 = _Erasednode;
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 68) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 68) != 1 )
        break;
      v16 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v16 + 68) )
        {
          *(_BYTE *)(v16 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 0;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v16 + 69) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v16 + 68) != 1 || *(_BYTE *)(*(_DWORD *)(v16 + 8) + 68) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v16 + 8) + 68) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v16 + 68) = 1;
            *(_BYTE *)(v16 + 68) = 0;
            std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v16);
            v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v16 + 68) = *(_BYTE *)(*(_DWORD *)&v6 + 68);
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)(v16 + 8) + 68) = 1;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v16 + 68) )
        {
          *(_BYTE *)(v16 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 0;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          v16 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v16 + 69) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v16 + 8) + 68) != 1 || *(_BYTE *)(*(_DWORD *)v16 + 68) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v16 + 68) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v16 + 8) + 68) = 1;
            *(_BYTE *)(v16 + 68) = 0;
            std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v16);
            v16 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v16 + 68) = *(_BYTE *)(*(_DWORD *)&v6 + 68);
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)v16 + 68) = 1;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          break;
        }
      }
      *(_BYTE *)(v16 + 68) = 0;
LABEL_53:
      v4 = v6;
    }
    v14 = _Erasednode;
    *(_BYTE *)(*(_DWORD *)&v4 + 68) = 1;
  }
  if ( *(_DWORD *)(*(_DWORD *)&v14 + 44) >= 0x10u )
    operator delete(*(void **)(*(_DWORD *)&v14 + 24));
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 44) = 15;
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 40) = 0;
  *(_BYTE *)(*(_DWORD *)&_Erasednode + 24) = 0;
  operator delete(*(void **)&_Erasednode);
  v17 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v17 )
    thisa->baseclass_0.baseclass_0._Mysize = v17 - 1;
  v18 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v18;
}

//----- (00615440) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Erase(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *i; // edi@1
  std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *thisa; // [sp+Ch] [bp-4h]@1

  v2 = _Rootnode;
  thisa = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Erase(
      thisa,
      i->_Right);
    i = i->_Left;
    if ( v2->_Myval.baseclass_0.second.strState.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v2->_Myval.baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->_Myval.baseclass_0.second.strState.baseclass_0._Myres = 15;
    v2->_Myval.baseclass_0.second.strState.baseclass_0._Mysize = 0;
    v2->_Myval.baseclass_0.second.strState.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( v2->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v2->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres = 15;
    v2->_Myval.baseclass_0.second.strTitle.baseclass_0._Mysize = 0;
    v2->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(v2);
  }
}

//----- (006154C0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Erase(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v2; // esi@1
  std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *i; // edi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    if ( v2->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v2->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->_Myval.baseclass_0.second.strTitle.baseclass_0._Myres = 15;
    v2->_Myval.baseclass_0.second.strTitle.baseclass_0._Mysize = 0;
    v2->_Myval.baseclass_0.second.strTitle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(v2);
  }
}

//----- (00615520) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Buynode<std::pair<int_CQuestWin2::QData>>(std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::pair<int,CQuestWin2::QData> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *v2; // edi@1
  void *v3; // eax@1
  void *v4; // esi@1
  int v5; // eax@2
  CQuestWin2::QData *v6; // ST04_4@3
  int v8; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v10; // [sp+Ch] [bp-1Ch]@2
  char *v11; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v13; // [sp+18h] [bp-10h]@1
  int v14; // [sp+24h] [bp-4h]@2

  v13 = &v8;
  v2 = this;
  v3 = operator new(0x6Cu);
  v4 = v3;
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 1) = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 2) = v2->baseclass_0._Myhead;
  v5 = (int)((char *)v3 + 12);
  *((_WORD *)v4 + 52) = 0;
  v14 = 0;
  v11 = (char *)v4 + 12;
  v10 = (char *)v4 + 12;
  LOBYTE(v14) = 1;
  if ( v4 != (void *)-12 )
  {
    v6 = &_Val->baseclass_0.second;
    *(_DWORD *)v5 = _Val->baseclass_0.first;
    CQuestWin2::QData::QData((CQuestWin2::QData *)((char *)v4 + 16), v6);
  }
  return (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006155F0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Buynode<std::pair<int_EpicQuestWin::QData>>(std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::pair<int,EpicQuestWin::QData> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *v2; // edi@1
  void *v3; // esi@1
  int v5; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v7; // [sp+Ch] [bp-1Ch]@2
  char *v8; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v10; // [sp+18h] [bp-10h]@1
  int v11; // [sp+24h] [bp-4h]@2

  v10 = &v5;
  v2 = this;
  v3 = operator new(0x48u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 1) = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 2) = v2->baseclass_0._Myhead;
  *((_WORD *)v3 + 34) = 0;
  v11 = 0;
  v8 = (char *)v3 + 12;
  v7 = (char *)v3 + 12;
  LOBYTE(v11) = 1;
  if ( v3 != (void *)-12 )
    std::pair<int_const_EpicQuestWin::QData>::pair<int_const_EpicQuestWin::QData>(
      (std::pair<int const ,EpicQuestWin::QData> *)((char *)v3 + 12),
      _Val);
  return (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006156C0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > _Last)
{
  std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 105) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 105) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 105);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 105);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Erase(
      v4,
      v5->_Parent);
    v4->baseclass_0.baseclass_0._Myhead->_Parent = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Left = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Right = v4->baseclass_0.baseclass_0._Myhead;
    v7 = v4->baseclass_0.baseclass_0._Myhead;
    v8 = result;
    v4->baseclass_0.baseclass_0._Mysize = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7->_Left;
  }
  return v8;
}

//----- (00615780) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::erase(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > _Last)
{
  std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 69) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 69) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 69);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 69);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Erase(
      v4,
      v5->_Parent);
    v4->baseclass_0.baseclass_0._Myhead->_Parent = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Left = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Right = v4->baseclass_0.baseclass_0._Myhead;
    v7 = v4->baseclass_0.baseclass_0._Myhead;
    v8 = result;
    v4->baseclass_0.baseclass_0._Mysize = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7->_Left;
  }
  return v8;
}

//----- (00615840) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::insert<std::pair<int_CQuestWin2::QData>>(std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,bool> *result, std::pair<int,CQuestWin2::QData> *_Val)
{
  std::_Tree<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v5; // edx@1
  std::_Tree_nod<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> >::_Node *v6; // ecx@1
  bool v7; // zf@1
  const int v8; // edi@2
  int v9; // ecx@7
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >,bool> *v10; // eax@7

  v3 = this;
  v4 = std::_Tree_val<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Buynode<std::pair<int_CQuestWin2::QData>>(
         &this->baseclass_0,
         _Val);
  v5 = v3->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = v6->_Isnil == 0;
  LOBYTE(_Val) = 1;
  if ( v7 )
  {
    v8 = v4->_Myval.baseclass_0.first;
    do
    {
      v5 = v6;
      LOBYTE(_Val) = v8 < v6->_Myval.baseclass_0.first;
      if ( (_BYTE)_Val )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::_Insert(
                     v3,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > *)&_Val,
                     (bool)_Val,
                     v5,
                     v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v10 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  result->baseclass_0.second = 1;
  return v10;
}

//----- (006158B0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::insert<std::pair<int_EpicQuestWin::QData>>(std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >,bool> *result, std::pair<int,EpicQuestWin::QData> *_Val)
{
  std::_Tree<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v5; // edx@1
  std::_Tree_nod<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> >::_Node *v6; // ecx@1
  bool v7; // zf@1
  const int v8; // edi@2
  int v9; // ecx@7
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >,bool> *v10; // eax@7

  v3 = this;
  v4 = std::_Tree_val<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Buynode<std::pair<int_EpicQuestWin::QData>>(
         &this->baseclass_0,
         _Val);
  v5 = v3->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = v6->_Isnil == 0;
  LOBYTE(_Val) = 1;
  if ( v7 )
  {
    v8 = v4->_Myval.baseclass_0.first;
    do
    {
      v5 = v6;
      LOBYTE(_Val) = v8 < v6->_Myval.baseclass_0.first;
      if ( (_BYTE)_Val )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Insert(
                     v3,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > *)&_Val,
                     (bool)_Val,
                     v5,
                     v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v10 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  result->baseclass_0.second = 1;
  return v10;
}

//----- (00615920) --------------------------------------------------------
void __thiscall std::multimap<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>>::_multimap<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>>(std::multimap<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> > > *this)
{
  std::multimap<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > > result; // [sp+0h] [bp-14h]@1
  std::multimap<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,CQuestWin2::QData,std::less<int>,std::allocator<std::pair<int const ,CQuestWin2::QData> >,1> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<int_CQuestWin2::QData_std::less<int>_std::allocator<std::pair<int_const_CQuestWin2::QData>>_1>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (00615980) --------------------------------------------------------
void __thiscall std::multimap<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>>::_multimap<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>>(std::multimap<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> > > *this)
{
  std::multimap<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > > result; // [sp+0h] [bp-14h]@1
  std::multimap<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,EpicQuestWin::QData,std::less<int>,std::allocator<std::pair<int const ,EpicQuestWin::QData> >,1> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (006159E0) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::OnQuit(MonsterCardInventoryWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (006159F0) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::ResetPage(MonsterCardInventoryWin *this)
{
  ItemIcon **v1; // esi@1
  signed int v2; // edi@1

  v1 = this->m_pkCardListIcon;
  v2 = 20;
  do
  {
    ItemIcon::SetItem(*v1, 0, 1);
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (00615A40) --------------------------------------------------------
unsigned int __thiscall MonsterCardInventoryWin::GetSelectPageFirstIndex(MonsterCardInventoryWin *this)
{
  return 20 * (this->m_nSelectTabNumber + 10 * this->m_nSelectAttiributeTabNumber);
}

//----- (00615A60) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::UpdateMeWin(MonsterCardInventoryWin *this, float fCurTime)
{
  this->baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
}

//----- (00615A70) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::SetCardInfo(MonsterCardInventoryWin *this, unsigned __int16 test)
{
  MonsterCardInventoryWin *v2; // esi@1
  PgSpr *v3; // eax@1
  PgSprData *v4; // eax@2
  NiScreenElementsData *v5; // edi@4

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkMonFace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(this->m_spEmptyPortraitTexture.m_pObject);
  v3 = v2->m_pkMonFace->m_spSpr.m_pObject;
  if ( v3 )
    v4 = v3->m_spSprData.m_pObject;
  else
    v4 = 0;
  v5 = v4->m_akGeomData.m_pBase->m_pObject;
  NiScreenElementsData::SetTexture(v4->m_akGeomData.m_pBase->m_pObject, 0, 0, 0, &v2->m_ptLeftUp);
  NiScreenElementsData::SetTexture(v5, 0, 1, 0, &v2->m_ptLeftDown);
  NiScreenElementsData::SetTexture(v5, 0, 2, 0, &v2->m_ptRightDown);
  NiScreenElementsData::SetTexture(v5, 0, 3, 0, &v2->m_ptRightUp);
}

//----- (00615B00) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::ViewItemUpdate(MonsterCardInventoryWin *this, int nTab, int nAttributeTab)
{
  MonsterCardInventoryWin *v3; // esi@1
  ItemIcon **v4; // edi@2
  signed int v5; // ebx@2
  int v6; // edi@4
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *v7; // edx@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > > v8; // ecx@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > > v9; // eax@5
  unsigned int v10; // eax@11
  int FirstIndex; // [sp+4h] [bp-8h]@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > > iter; // [sp+8h] [bp-4h]@4

  v3 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    v4 = v3->m_pkCardListIcon;
    v5 = 20;
    do
    {
      ItemIcon::SetItem(*v4, 0, 1);
      ++v4;
      --v5;
    }
    while ( v5 );
    v6 = 20 * (v3->m_nSelectTabNumber + 10 * v3->m_nSelectAttiributeTabNumber);
    FirstIndex = 20 * (v3->m_nSelectTabNumber + 10 * v3->m_nSelectAttiributeTabNumber);
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v3->m_mapCardList,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&iter,
      (const unsigned int *)&FirstIndex);
    v7 = v3->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v8 = iter;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *)iter != v7 )
      goto LABEL_15;
    v9 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > >)v7->_Parent;
    v8 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > >)v3->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead;
    while ( !*(_BYTE *)(*(_DWORD *)&v9 + 21) )
    {
      if ( (unsigned int)v6 >= *(_DWORD *)(*(_DWORD *)&v9 + 12) )
      {
        v9 = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > > *)(*(_DWORD *)&v9 + 8);
      }
      else
      {
        v8 = v9;
        v9 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > >)**(_DWORD **)&v9;
      }
    }
    iter = v8;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *)v8 != v7 )
    {
LABEL_15:
      do
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v8 + 12);
        if ( v10 >= v6 + 20 )
          break;
        ItemIcon::SetItemAsID(v3->m_pkCardListIcon[v10 - v6], *(_WORD *)(*(_DWORD *)&v8 + 16));
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&iter);
        v8 = iter;
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *)iter != v3->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
  }
}

//----- (00615BE0) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::SelectTab(MonsterCardInventoryWin *this, int nTab)
{
  int v2; // ST04_4@1

  v2 = this->m_nSelectAttiributeTabNumber;
  this->m_nSelectTabNumber = nTab;
  MonsterCardInventoryWin::ViewItemUpdate(this, nTab, v2);
}

//----- (00615C00) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::SelectAttributeTab(MonsterCardInventoryWin *this, int nAttributeTab)
{
  this->m_nSelectAttiributeTabNumber = nAttributeTab;
  MonsterCardInventoryWin::ViewItemUpdate(this, this->m_nSelectTabNumber, nAttributeTab);
}

//----- (00615C20) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::AddItem(MonsterCardInventoryWin *this, unsigned __int16 nitemID)
{
  MonsterCardInventoryWin *v2; // esi@1
  unsigned int v3; // edi@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v4; // eax@4
  int v5; // ecx@4
  int v6; // edx@4
  int v7; // eax@4
  std::pair<unsigned int,unsigned short> _Val; // [sp+8h] [bp-8h]@3

  v2 = this;
  if ( this->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    *(_DWORD *)&_Val.baseclass_0.second = this->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead;
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Val.baseclass_0.second);
    v3 = *(_DWORD *)(*(_DWORD *)&_Val.baseclass_0.second + 12) + 1;
  }
  else
  {
    v3 = 0;
  }
  _Val.baseclass_0.first = v3;
  _Val.baseclass_0.second = nitemID;
  v4 = (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)std::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_short_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_unsigned_short>>_0>>::_Buynode<std::pair<unsigned_int_unsigned_short>>(&v2->m_mapCardList.baseclass_0.baseclass_0, &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->m_mapCardList,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&_Val,
    v4,
    0);
  v5 = v2->m_nSelectAttiributeTabNumber;
  v6 = v2->m_nSelectTabNumber;
  v7 = 20 * (v6 + 10 * v5);
  if ( v7 <= v3 )
  {
    if ( v3 < v7 + 20 )
      MonsterCardInventoryWin::ViewItemUpdate(v2, v6, v5);
  }
}

//----- (00615CC0) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::_MonsterCardInventoryWin(MonsterCardInventoryWin *this)
{
  MonsterCardInventoryWin *v1; // esi@1
  NiTexture *v2; // edi@1
  NiTexture *v3; // edi@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // ST08_4@10
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v5; // ST04_4@10
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@10
  std::map<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> > > *v7; // [sp+4h] [bp-14h]@10
  MonsterCardInventoryWin *v8; // [sp+8h] [bp-10h]@1
  int v9; // [sp+14h] [bp-4h]@1

  v1 = this;
  v8 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MonsterCardInventoryWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MonsterCardInventoryWin::_vftable_;
  v2 = this->m_spEmptyPortraitTexture.m_pObject;
  v9 = 2;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spEmptyPortraitTexture.m_pObject = 0;
  }
  v3 = v1->m_spEmptyPortraitTexture.m_pObject;
  LOBYTE(v9) = 1;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v7 = &v1->m_mapCardList;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v9) = 3;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapCardList,
    &result,
    v5,
    v4);
  operator delete(v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v9 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9C0BB4: using guessed type int (__stdcall *MonsterCardInventoryWin___vftable_)(int uiFlags);
// 9C0BD4: using guessed type int (__thiscall *MonsterCardInventoryWin___vftable_)(void *p, char);

//----- (00615DB0) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::OnShowWin(MonsterCardInventoryWin *this)
{
  MonsterCardInventoryWin *v1; // esi@1
  unsigned int v2; // edi@1

  v1 = this;
  this->m_pkMonsterCardHaveListWin->m_nViewStartPos = 0;
  v2 = 0;
  do
    MonsterCardInventoryWin::AddItem(v1, v2++ + 3);
  while ( v2 < 0x1E );
  MonsterCardInventoryWin::ViewItemUpdate(v1, v1->m_nSelectTabNumber, v1->m_nSelectAttiributeTabNumber);
  MonsterCardInventoryWin::SetCardInfo(v1, 0);
  NiAVObject::Update(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
}

//----- (00615E10) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::MonsterCardInventoryWin(MonsterCardInventoryWin *this)
{
  MonsterCardInventoryWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  MonsterCardInventoryWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MonsterCardInventoryWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MonsterCardInventoryWin::_vftable_;
  v6 = 0;
  v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_nSelectTabNumber = 0;
  v1->m_nSelectAttiributeTabNumber = 0;
  v1->m_bActiveListViewEnable = 0;
  v1->m_spEmptyPortraitTexture.m_pObject = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C0BB4: using guessed type int (__stdcall *MonsterCardInventoryWin___vftable_)(int uiFlags);
// 9C0BD4: using guessed type int (__thiscall *MonsterCardInventoryWin___vftable_)(void *p, char);

//----- (00615EF0) --------------------------------------------------------
MonsterCardInventoryWin *__cdecl MonsterCardInventoryWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MonsterCardInventoryWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x200u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MonsterCardInventoryWin::MonsterCardInventoryWin((MonsterCardInventoryWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MonsterCardInventoryWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00616020) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::ActiveListViewEnable(MonsterCardInventoryWin *this, bool bEnable)
{
  MonsterCardInventoryWin *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *v4; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *v5; // edi@2
  int v6; // edx@5
  unsigned __int16 v7; // ST10_2@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // eax@5
  bool v9; // cf@5
  unsigned int v10; // eax@9
  int v11; // ebx@12
  unsigned int v12; // eax@13
  int v13; // esi@16
  int v14; // esi@16
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *v15; // ecx@21
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *v16; // eax@22
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *i; // eax@25
  std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > sstr; // [sp+8h] [bp-E4h]@3
  std::_Lockit thisa; // [sp+B0h] [bp-3Ch]@13
  void *p; // [sp+B4h] [bp-38h]@11
  int v21; // [sp+B8h] [bp-34h]@1
  MonsterCardInventoryWin *v22; // [sp+BCh] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+C0h] [bp-2Ch]@5
  unsigned int v24; // [sp+DCh] [bp-10h]@1
  int v25; // [sp+E8h] [bp-4h]@3
  int v26; // [sp+ECh] [bp+0h]@1

  v24 = (unsigned int)&v26 ^ __security_cookie;
  v2 = this;
  v21 = 0;
  v3 = this->m_pkListViewBackGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
  v22 = this;
  ((void (__stdcall *)(_DWORD, unsigned int))v3)(bEnable, (unsigned int)&v26 ^ __security_cookie);
  ((void (__stdcall *)(_DWORD))v2->m_pkListViewBackGround->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bEnable);
  ((void (__stdcall *)(_DWORD))v2->m_pkMonsterCardHaveListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
  ((void (__stdcall *)(_DWORD))v2->m_pkMonsterCardHaveListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bEnable);
  ((void (__stdcall *)(_DWORD))v2->m_pkMonsterCardHaveListSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
  ((void (__stdcall *)(_DWORD))v2->m_pkMonsterCardHaveListSlideBar->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bEnable);
  if ( bEnable )
  {
    SlideListWin::RemoveAllList(v2->m_pkMonsterCardHaveListWin);
    v4 = v2->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v5 = v4->_Left;
    if ( v4->_Left != v4 )
    {
      do
      {
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[0] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_;
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[0] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_;
        v21 |= 1u;
        v25 = 0;
        *(_DWORD *)&sstr.gap60[0] = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
        sstr.___u0.baseclass_0.___u0.baseclass_0._Chcount = 0i64;
        std::ios_base::_Init((std::ios_base *)sstr.gap60);
        *(_DWORD *)&sstr.gap60[56] = (char *)&sstr + 24;
        *(_DWORD *)&sstr.gap60[60] = 0;
        sstr.gap60[64] = std::basic_ios<char_std::char_traits<char>>::widen(
                           (std::basic_ios<char,std::char_traits<char> > *)sstr.gap60,
                           32);
        if ( !*(_DWORD *)&sstr.gap60[56] )
          std::ios_base::clear((std::ios_base *)sstr.gap60, *(_DWORD *)&sstr.gap60[12] | 4, 0);
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[*(_DWORD *)(*(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[0]
                                                                             + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[*(_DWORD *)(*(_DWORD *)&sstr + 4)] = &std::basic_iostream<char_std::char_traits<char>>::_vftable_;
        v6 = *(_DWORD *)(*(_DWORD *)&sstr + 4);
        v25 = 5;
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[v6] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
        std::basic_streambuf<char_std::char_traits<char>>::basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[8]);
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[8] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
        *(_QWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[68] = 0i64;
        v7 = v5->_Myval.baseclass_0.second;
        v25 = 7;
        std::basic_ostream<char_std::char_traits<char>>::operator<<(
          (std::basic_ostream<char,std::char_traits<char> > *)sstr.___u0.baseclass_0.___u0.baseclass_0.gap10,
          v7);
        v8 = std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::str(&sstr, &result);
        v9 = v8->baseclass_0._Myres < 0x10;
        LOBYTE(v25) = 8;
        if ( !v9 )
          v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v8->baseclass_0.___u0.baseclass_0.dummy[0];
        SlideListWin::AddText(v2->m_pkMonsterCardHaveListWin, v8->baseclass_0.___u0.baseclass_0.dummy);
        LOBYTE(v25) = 7;
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        v10 = SlideListWin::GetItemSize(v2->m_pkMonsterCardHaveListWin);
        SlideListWin::SetFontColor(v2->m_pkMonsterCardHaveListWin, v10 - 1, 0, 0, 0, 0);
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[*(_DWORD *)(*(_DWORD *)&sstr + 4)] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
        v25 = 9;
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[8] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
        if ( sstr.___u0.baseclass_0.___u0._s1.baseclass_10.dummy[72] & 1 )
          operator delete((void *)**(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[24]);
        **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[24] = 0;
        **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[40] = 0;
        **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[56] = 0;
        **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[28] = 0;
        **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[44] = 0;
        **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[60] = 0;
        *(_QWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[68] = __PAIR__(
                                                                           *(unsigned int *)&sstr.___u0.baseclass_0.___u0._s1.baseclass_10.dummy[72],
                                                                           0) & 0xFFFFFFFE00000000ui64;
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[8] = &std::basic_streambuf<char_std::char_traits<char>>::_vftable_;
        LOBYTE(v25) = 10;
        p = *(void **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[64];
        if ( *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[64] )
        {
          v11 = **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[64];
          if ( **(_DWORD **)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[64] )
          {
            std::_Lockit::_Lockit(&thisa, 0);
            v12 = *(_DWORD *)(v11 + 4);
            if ( v12 && v12 < 0xFFFFFFFF )
              *(_DWORD *)(v11 + 4) = v12 - 1;
            v13 = -(*(_DWORD *)(v11 + 4) == 0);
            std::_Lockit::__Lockit(&thisa);
            v14 = v11 & v13;
            if ( v14 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
            v2 = v22;
          }
          operator delete(p);
        }
        LOBYTE(v25) = 9;
        std::_Mutex::__Mutex((std::_Mutex *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[12]);
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[*(_DWORD *)(*(_DWORD *)&sstr + 4)] = &std::basic_iostream<char_std::char_traits<char>>::_vftable_;
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[*(_DWORD *)(*(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[0]
                                                                             + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
        *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[*(_DWORD *)(*(_DWORD *)&sstr + 4)] = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
        v25 = -1;
        *(_DWORD *)&sstr.gap60[0] = &std::ios_base::_vftable_;
        std::ios_base::_Ios_base_dtor((std::ios_base *)sstr.gap60);
        if ( !v5->_Isnil )
        {
          v15 = v5->_Right;
          if ( v15->_Isnil )
          {
            for ( i = v5->_Parent; !i->_Isnil; i = i->_Parent )
            {
              if ( v5 != i->_Right )
                break;
              v5 = i;
            }
            v5 = i;
          }
          else
          {
            v16 = v15->_Left;
            if ( !v15->_Left->_Isnil )
            {
              do
              {
                v15 = v16;
                v16 = v16->_Left;
              }
              while ( !v16->_Isnil );
            }
            v5 = v15;
          }
        }
      }
      while ( v5 != v2->m_mapCardList.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    SlideBar::SetSplitCnt(v2->m_pkMonsterCardHaveListSlideBar, v2->m_pkMonsterCardHaveListWin->m_nSlideSplitCnt);
    SlideListWin::UpdateViewList(v2->m_pkMonsterCardHaveListWin);
  }
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);
// 98935C: using guessed type int (__thiscall *std__basic_streambuf_char_std__char_traits_char_____vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9C0B94: using guessed type int (__stdcall *std__basic_iostream_char_std__char_traits_char_____vftable_)(char);
// 9C0B9C: using guessed type int (__stdcall *std__basic_stringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// A85C00: using guessed type int __security_cookie;

//----- (00616430) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::SelectIconItem(MonsterCardInventoryWin *this, int nIndex)
{
  unsigned int v2; // ST0C_4@1
  MonsterCardInventoryWin *v3; // ebx@1
  NiRefObjectVtbl *v4; // esi@1
  NiTexture *v5; // eax@1
  PgSpr *v6; // eax@1
  PgSprData *v7; // eax@2
  NiScreenElementsData *v8; // esi@4
  int v9; // esi@4
  int v10; // edi@5
  int v11; // esi@5
  int v12; // eax@8
  int v13; // eax@14
  std::basic_ostream<char,std::char_traits<char> > *v14; // eax@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@14
  std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > sstr; // [sp+0h] [bp-DCh]@12
  NiPoint2 kValue; // [sp+A8h] [bp-34h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+B0h] [bp-2Ch]@14
  unsigned int v19; // [sp+CCh] [bp-10h]@1
  int v20; // [sp+D8h] [bp-4h]@12
  int v21; // [sp+DCh] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v2 = (unsigned int)&v21 ^ __security_cookie;
  LODWORD(kValue.y) = 0;
  v3 = this;
  v4 = this->m_pkMonFace->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = PortraitTextureBuffer::GetMainCharPortrait(g_pkMainChar);
  ((void (__thiscall *)(PgWinSpr *, NiTexture *, unsigned int))v4[113].__vecDelDtor)(v3->m_pkMonFace, v5, v2);
  v6 = v3->m_pkMonFace->m_spSpr.m_pObject;
  if ( v6 )
    v7 = v6->m_spSprData.m_pObject;
  else
    v7 = 0;
  v8 = v7->m_akGeomData.m_pBase->m_pObject;
  kValue.x = 0.0;
  kValue.y = 0.0;
  NiScreenElementsData::SetTexture(v8, 0, 0, 0, &kValue);
  kValue.x = 0.0;
  kValue.y = 1.0;
  NiScreenElementsData::SetTexture(v8, 0, 1, 0, &kValue);
  kValue.x = 1.0;
  kValue.y = 1.0;
  NiScreenElementsData::SetTexture(v8, 0, 2, 0, &kValue);
  kValue.x = 1.0;
  kValue.y = 0.0;
  NiScreenElementsData::SetTexture(v8, 0, 3, 0, &kValue);
  v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          nIndex) )
  {
    if ( (unsigned __int16)nIndex <= *(_WORD *)(v9 + 200) )
    {
      v12 = *(_DWORD *)(v9 + 196) + 4 * (unsigned __int16)nIndex;
      if ( *(_DWORD *)v12 )
        v11 = *(_DWORD *)v12;
      else
        v11 = 0;
    }
    else
    {
      v11 = 0;
    }
    v10 = 0;
  }
  else
  {
    v10 = 0;
    v11 = 0;
  }
  *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[0] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_;
  v20 = v10;
  LODWORD(kValue.y) = 1;
  *(_DWORD *)&sstr.gap60[0] = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
  LODWORD(sstr.___u0.baseclass_0.___u0.baseclass_0._Chcount) = v10;
  *(__int64 *)((char *)&sstr.___u0.baseclass_0.___u0.baseclass_0._Chcount + 4) = __PAIR__(
                                                                                   &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_,
                                                                                   v10);
  std::ios_base::_Init((std::ios_base *)sstr.gap60);
  *(_DWORD *)&sstr.gap60[56] = (char *)&sstr + 24;
  *(_DWORD *)&sstr.gap60[60] = v10;
  sstr.gap60[64] = std::basic_ios<char_std::char_traits<char>>::widen(
                     (std::basic_ios<char,std::char_traits<char> > *)sstr.gap60,
                     32);
  if ( *(_DWORD *)&sstr.gap60[56] == v10 )
    std::ios_base::clear((std::ios_base *)sstr.gap60, *(_DWORD *)&sstr.gap60[12] | 4, v10);
  *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[*(_DWORD *)(*(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[0]
                                                                       + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[*(_DWORD *)(*(_DWORD *)&sstr + 4)] = &std::basic_iostream<char_std::char_traits<char>>::_vftable_;
  v13 = *(_DWORD *)(*(_DWORD *)&sstr + 4);
  v20 = 5;
  *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap0[v13] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_streambuf<char_std::char_traits<char>>::basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[8]);
  *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[8] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  *(_DWORD *)&sstr.___u0.baseclass_0.___u0.baseclass_0.gap10[68] = v10;
  *(_DWORD *)&sstr.___u0.baseclass_0.___u0._s1.baseclass_10.dummy[72] = v10;
  v20 = 7;
  v14 = std::operator<<<std::char_traits<char>>(
          (std::basic_ostream<char,std::char_traits<char> > *)sstr.___u0.baseclass_0.___u0.baseclass_0.gap10,
          (const char *)(v11 + 34));
  std::operator<<<std::char_traits<char>>(v14, " : ¸");
  v15 = std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::str(&sstr, &result);
  LOBYTE(v20) = 8;
  if ( v15->baseclass_0._Myres >= 0x10 )
    v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v15->baseclass_0.___u0.baseclass_0.dummy[0];
  ((void (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))v3->m_pkMonsterInfo->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v15);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  result.baseclass_0._Myres = 15;
  result.baseclass_0._Mysize = v10;
  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v20 = -1;
  std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_basic_stringstream<char_std::char_traits<char>_std::allocator<char>>((std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *)((char *)&sstr + 96));
  *(_DWORD *)&sstr.gap60[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)sstr.gap60);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9C0B94: using guessed type int (__stdcall *std__basic_iostream_char_std__char_traits_char_____vftable_)(char);
// 9C0B9C: using guessed type int (__stdcall *std__basic_stringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006166E0) --------------------------------------------------------
void __thiscall MonsterCardInventoryWin::OnCommand(MonsterCardInventoryWin *this, unsigned int wParam, int lParam)
{
  bool v3; // al@4

  switch ( wParam )
  {
    case 0x16u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0x13u:
      this->m_pkMonsterCardHaveListWin->m_nViewStartPos = this->m_pkMonsterCardHaveListSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(this->m_pkMonsterCardHaveListWin);
      break;
    case 0x11u:
      v3 = this->m_bActiveListViewEnable == 0;
      this->m_bActiveListViewEnable = v3;
      MonsterCardInventoryWin::ActiveListViewEnable(this, v3);
      break;
    case 0u:
      MonsterCardInventoryWin::SelectTab(this, 0);
      break;
    case 1u:
      MonsterCardInventoryWin::SelectTab(this, 1);
      break;
    case 2u:
      MonsterCardInventoryWin::SelectTab(this, 2);
      break;
    case 3u:
      MonsterCardInventoryWin::SelectTab(this, 3);
      break;
    case 4u:
      MonsterCardInventoryWin::SelectTab(this, 4);
      break;
    case 5u:
      MonsterCardInventoryWin::SelectTab(this, 5);
      break;
    case 6u:
      MonsterCardInventoryWin::SelectTab(this, 6);
      break;
    case 7u:
      MonsterCardInventoryWin::SelectTab(this, 7);
      break;
    case 8u:
      MonsterCardInventoryWin::SelectTab(this, 8);
      break;
    case 9u:
      MonsterCardInventoryWin::SelectTab(this, 9);
      break;
    case 0xAu:
      MonsterCardInventoryWin::SelectAttributeTab(this, 0);
      break;
    case 0xBu:
      MonsterCardInventoryWin::SelectAttributeTab(this, 1);
      break;
    case 0xCu:
      MonsterCardInventoryWin::SelectAttributeTab(this, 2);
      break;
    case 0xDu:
      MonsterCardInventoryWin::SelectAttributeTab(this, 3);
      break;
    case 0xEu:
      MonsterCardInventoryWin::SelectAttributeTab(this, 4);
      break;
    case 0xFu:
      MonsterCardInventoryWin::SelectAttributeTab(this, 5);
      break;
    case 0x14u:
      MonsterCardInventoryWin::SelectIconItem(
        this,
        lParam + 20 * (this->m_nSelectTabNumber + 10 * this->m_nSelectAttiributeTabNumber));
      break;
    case 0x15u:
      MonsterCardInventoryWin::SelectIconItem(this, lParam);
      break;
    default:
      return;
  }
}

//----- (00616890) --------------------------------------------------------
bool __thiscall MonsterCardInventoryWin::Create(MonsterCardInventoryWin *this, PgFrameWork *pkFrameWork)
{
  MonsterCardInventoryWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  PgWinSpr *v8; // eax@10
  int v9; // eax@10
  NiTexture *v10; // edi@10
  int v11; // ebx@10
  PgSpr *v12; // eax@17
  PgSprData *v13; // eax@18
  D3DXCOLOR v14; // ST28_16@20
  PgWinText *v15; // eax@20
  PgWin *v16; // eax@20
  D3DXCOLOR v17; // ST30_16@20
  PgWin *v18; // eax@20
  D3DXCOLOR v19; // ST30_16@20
  signed int v20; // ebx@20
  ItemIcon **v21; // edi@20
  char *v22; // eax@21
  PgSprData *v23; // eax@21
  ItemIcon *v24; // eax@21
  SLWCreateInfo::Item *v25; // edi@22
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v26; // edi@22
  SLWCreateInfo::Item *v27; // edi@28
  PgSprData *v28; // eax@30
  SlideListWin *v29; // eax@30
  PgSprData *v30; // eax@30
  SlideBar *v31; // eax@30
  SlideBar *v32; // eax@30
  NiRefObjectVtbl *v33; // ebx@30
  SlideBar *v34; // edi@30
  int v35; // ST40_4@30
  int v36; // eax@30
  NiNode *v37; // esi@32
  unsigned int v38; // [sp+24h] [bp-84h]@1
  SLWCreateInfo kCreateInfo; // [sp+34h] [bp-74h]@22
  NiAVObject *__formal; // [sp+50h] [bp-58h]@21
  int iYOff; // [sp+54h] [bp-54h]@4
  int iXOff; // [sp+58h] [bp-50h]@4
  UIUtil ui; // [sp+5Ch] [bp-4Ch]@10
  int iTop; // [sp+70h] [bp-38h]@21
  int iLeft; // [sp+74h] [bp-34h]@21
  NiPointer<NiNode> spNode; // [sp+78h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+7Ch] [bp-2Ch]@22
  unsigned int v48; // [sp+98h] [bp-10h]@1
  int v49; // [sp+A4h] [bp-4h]@1
  int v50; // [sp+A8h] [bp+0h]@1

  v48 = (unsigned int)&v50 ^ __security_cookie;
  v38 = (unsigned int)&v50 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v49 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MonsterCardInventory.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "Frame", 0) )
  {
    v6 = spNode.m_pObject;
    v49 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v49) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, iXOff, iYOff);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel04", 0);
  v8 = UIUtil::CreateSpr(&ui, "MonFace", 0);
  v2->m_pkMonFace = v8;
  v9 = (int)v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor(
              (NiRefObject *)v8,
              v38);
  v10 = v2->m_spEmptyPortraitTexture.m_pObject;
  v11 = v9;
  if ( v10 != (NiTexture *)v9 )
  {
    if ( v10 && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v2->m_spEmptyPortraitTexture.m_pObject = (NiTexture *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)(v11 + 4));
  }
  v12 = v2->m_pkMonFace->m_spSpr.m_pObject;
  if ( v12 )
    v13 = v12->m_spSprData.m_pObject;
  else
    v13 = 0;
  NiScreenElementsData::GetTextures(
    v13->m_akGeomData.m_pBase->m_pObject,
    0,
    0,
    &v2->m_ptLeftUp,
    &v2->m_ptLeftDown,
    &v2->m_ptRightDown,
    &v2->m_ptRightUp);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = UIUtil::CreateText(&ui, "SubText01", byte_9C09BA, 3u, COERCE_D3DXCOLOR(v14.r), 0, 0, 0);
  v2->m_pkMonsterInfo = v15;
  v15->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
  UIUtil::CreateBtn(&ui, 0, "Tab01", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 1u, "Tab02", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 2u, "Tab03", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 3u, "Tab04", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 4u, "Tab05", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 5u, "Tab06", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 6u, "Tab07", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 7u, "Tab08", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 8u, "Tab09", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 9u, "Tab10", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 0xAu, "AtbTab01", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 0xBu, "AtbTab02", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 0xCu, "AtbTab03", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 0xDu, "AtbTab04", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 0xEu, "AtbTab05", 0, 0, 0, 0);
  UIUtil::CreateBtn(&ui, 0xFu, "AtbTab06", 0, 0, 0, 0);
  v16 = (PgWin *)UIUtil::CreateBtn(&ui, 0x16u, "BtnNor02", "BtnOver02", "BtnClick02", 0, 0);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  UIUtil::CreateAttachedText(&ui, v16, "You Out", COERCE_D3DXCOLOR(v17.r), 5u);
  v18 = (PgWin *)UIUtil::CreateBtn(&ui, 0x11u, "BtnNor01", "BtnOver01", "BtnClick01", 0, 0);
  *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  UIUtil::CreateAttachedText(&ui, v18, "Metamorphoisi", COERCE_D3DXCOLOR(v19.r), 5u);
  v20 = 0;
  v21 = v2->m_pkCardListIcon;
  do
  {
    __formal = (NiAVObject *)spNode.m_pObject;
    v22 = fs("IconSlot%02d");
    v23 = PgSprData::Create(__formal, v22, &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v24 = ItemIcon::CreateWin(iLeft - iXOff + 1, iTop - iYOff + 1, &v2->baseclass_0.baseclass_0.baseclass_0);
    *v21 = v24;
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
      (NiRefObject *)v24,
      20u);
    ((void (__stdcall *)(signed int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(v20);
    ((void (__stdcall *)(signed int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(21);
    ((void (__stdcall *)(signed int))(*v21)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[141].__vecDelDtor)(v20);
    ItemIcon::SetItem(*v21, 0, 1);
    IconWin::ShowFocus(&(*v21)->baseclass_0, 1);
    ++v20;
    ++v21;
  }
  while ( v20 < 20 );
  v2->m_pkListViewBackGround = UIUtil::CreateSpr(&ui, "Panel03", 0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v49) = 2;
  v25 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v25->nItemType = 1;
  v25->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  v26 = &v25->vecNodeName;
  LOBYTE(v49) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v26,
    &thisa);
  LOBYTE(v49) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v49) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v26,
    &thisa);
  LOBYTE(v49) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v49) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v26,
    &thisa);
  LOBYTE(v49) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v27 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v27->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column", 6u);
  LOBYTE(v49) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v27->vecNodeName,
    &thisa);
  LOBYTE(v49) = 2;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v27->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ListBox", &iLeft, &iTop, 0);
  v29 = SlideListWin::CreateWin(
          iLeft - iXOff,
          iTop - iYOff,
          v28,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0xAu,
          0);
  v2->m_pkMonsterCardHaveListWin = v29;
  v29->m_uiLClickMsg = 18;
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, 0);
  v31 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar",
          "SlideBar_UpBtn",
          "SlideBar_DnBtn",
          v30,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkMonsterCardHaveListSlideBar = v31;
  v31->m_uiClickMsg = 19;
  v2->m_pkMonsterCardHaveListSlideBar->m_eType = 1;
  v32 = v2->m_pkMonsterCardHaveListSlideBar;
  v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = v2->m_pkMonsterCardHaveListSlideBar;
  v35 = ((int (__thiscall *)(SlideBar *))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2->m_pkMonsterCardHaveListSlideBar)
      - 25;
  v36 = ((int (__thiscall *)(SlideBar *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v34);
  v33[77].__vecDelDtor((NiRefObject *)v2->m_pkMonsterCardHaveListSlideBar, v36 - 5);
  ((void (__thiscall *)(MonsterCardInventoryWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.1,
    0.5);
  LOBYTE(v49) = 1;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)__formal);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v49) = 0;
  UIUtil::_UIUtil(&ui);
  v37 = spNode.m_pObject;
  v49 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v37 )
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00617090) --------------------------------------------------------
void __thiscall std::basic_iostream<char_std::char_traits<char>>::_basic_iostream<char_std::char_traits<char>>(std::basic_iostream<char,std::char_traits<char> > *this)
{
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 6) + 4) - 24) = &std::basic_iostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 2) + 4) - 8) = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 6) + 4) - 24) = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
}
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 9C0B94: using guessed type int (__stdcall *std__basic_iostream_char_std__char_traits_char_____vftable_)(char);

//----- (006170C0) --------------------------------------------------------
void *__thiscall std::basic_iostream<char_std::char_traits<char>>::_vector_deleting_destructor_(std::basic_iostream<char,std::char_traits<char> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = (char *)this - 24;
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 6) + 4) - 24) = &std::basic_iostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 2) + 4) - 8) = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 6) + 4) - 24) = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)&this->___u0.baseclass_0.gap0[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 9C0B94: using guessed type int (__stdcall *std__basic_iostream_char_std__char_traits_char_____vftable_)(char);

//----- (00617120) --------------------------------------------------------
void __thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_basic_stringstream<char_std::char_traits<char>_std::allocator<char>>(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this)
{
  std::basic_streambuf<char,std::char_traits<char> > *v1; // esi@1

  *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 24) + 4) - 96) = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v1 = (std::basic_streambuf<char,std::char_traits<char> > *)((char *)this - 72);
  *((_DWORD *)this - 18) = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)this - 1);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>(v1);
  *(_DWORD *)((char *)v1 + *(_DWORD *)(*((_DWORD *)v1 - 6) + 4) - 24) = &std::basic_iostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)((char *)v1 + *(_DWORD *)(*((_DWORD *)v1 - 2) + 4) - 8) = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  *(_DWORD *)((char *)v1 + *(_DWORD *)(*((_DWORD *)v1 - 6) + 4) - 24) = &std::basic_istream<char_std::char_traits<char>>::_vftable_;
}
// 98929C: using guessed type int (__stdcall *std__basic_istream_char_std__char_traits_char_____vftable_)(char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9C0B94: using guessed type int (__stdcall *std__basic_iostream_char_std__char_traits_char_____vftable_)(char);
// 9C0B9C: using guessed type int (__stdcall *std__basic_stringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);

//----- (006171B0) --------------------------------------------------------
void __thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbase_destructor(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this)
{
  std::ios_base *v1; // esi@1

  v1 = (std::ios_base *)this->gap60;
  std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_basic_stringstream<char_std::char_traits<char>_std::allocator<char>>((std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *)((char *)this + 96));
  v1->vfptr = (std::ios_baseVtbl *)&std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor(v1);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);

//----- (006171D0) --------------------------------------------------------
void *__thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_scalar_deleting_destructor_(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int a2)
{
  void *v2; // edi@1
  std::ios_base *v3; // esi@1

  v2 = (char *)this - 96;
  v3 = (std::ios_base *)this;
  std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_basic_stringstream<char_std::char_traits<char>_std::allocator<char>>(this);
  v3->vfptr = (std::ios_baseVtbl *)&std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);

//----- (00617210) --------------------------------------------------------
#error "6173B0: positive sp value has been found (funcsize=149)"

//----- (00617400) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_int_unsigned_short_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_unsigned_short>>_0>>::_Buynode<std::pair<unsigned_int_unsigned_short>>(std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > *this, std::pair<unsigned int,unsigned short> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *result; // eax@1
  std::pair<unsigned int,unsigned short> *v4; // edx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *)operator new(0x18u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned short,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,unsigned short> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00617470) --------------------------------------------------------
void *__thiscall MonsterCardInventoryWin::_vector_deleting_destructor_(MonsterCardInventoryWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MonsterCardInventoryWin::_MonsterCardInventoryWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006174A0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::str(std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::str(
    (std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&this->___u0.baseclass_0.___u0.baseclass_0.gap10[8],
    result);
  return result;
}

//----- (006174D0) --------------------------------------------------------
__int64 __cdecl Bank::GetMoney()
{
  return Bank::ms_i64Money;
}
// A9A770: using guessed type __int64 Bank__ms_i64Money;

//----- (006174E0) --------------------------------------------------------
void __cdecl Bank::SetMoney(__int64 i64Money)
{
  Bank::ms_i64Money = i64Money;
}
// A9A770: using guessed type __int64 Bank__ms_i64Money;

//----- (00617500) --------------------------------------------------------
char __cdecl Bank::GetMaxPage()
{
  return Bank::ms_byTotalBankPage;
}
// A9A778: using guessed type char Bank__ms_byTotalBankPage;

//----- (00617510) --------------------------------------------------------
unsigned int __cdecl Bank::GetInvIdxLotIsNotMax(Item *pkItem)
{
  unsigned int v1; // ebx@1
  unsigned int v2; // edi@1
  int v3; // esi@3
  unsigned int v4; // ST14_4@5
  unsigned int result; // eax@7
  int dwValue; // [sp+10h] [bp-4h]@1

  ChargedItemList::GetTotalEffectingValue(EE_MORESTORAGE, (unsigned int *)&dwValue);
  v1 = 4 * (9 * dwValue + 18);
  v2 = 0;
  do
  {
    if ( v2 >= v1 )
      break;
    v3 = Bank::ms_aspInv[v2];
    if ( v3 )
    {
      if ( *(_WORD *)(v3 + 8) == pkItem->m_kStruct.itemid )
      {
        v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 16))(Bank::ms_aspInv[v2]);
        if ( v4 > (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 12))(v3) )
          return v2;
      }
    }
    ++v2;
  }
  while ( v2 < 0x240 );
  result = 0;
  do
  {
    if ( result >= v1 )
      break;
    if ( !Bank::ms_aspInv[result] )
      return result;
    ++result;
  }
  while ( result < 0x240 );
  return -1;
}
// A9A780: using guessed type int Bank__ms_aspInv[];

//----- (006175A0) --------------------------------------------------------
void __cdecl Bank::RemoveExtraInv()
{
  int v0; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v1; // ebx@1
  void *v2; // eax@2
  void *v3; // edi@3
  int v4; // eax@5
  int j; // eax@6
  int i; // eax@9

  v0 = **(_DWORD **)&stru_A9B084;
  v1 = stru_A9B084;
  if ( **(_DWORD **)&stru_A9B084 != stru_A9B084 )
  {
    do
    {
      v2 = *(void **)(v0 + 16);
      if ( v2 )
      {
        v3 = (char *)v2 - 4;
        _eh_vector_destructor_iterator_(
          v2,
          4u,
          *((_DWORD *)v2 - 1),
          (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
        operator delete__(v3);
      }
      if ( !*(_BYTE *)(v0 + 21) )
      {
        v4 = *(_DWORD *)(v0 + 8);
        if ( *(_BYTE *)(v4 + 21) )
        {
          for ( i = *(_DWORD *)(v0 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
          {
            if ( v0 != *(_DWORD *)(i + 8) )
              break;
            v0 = i;
          }
          v0 = i;
        }
        else
        {
          v0 = *(_DWORD *)(v0 + 8);
          for ( j = *(_DWORD *)v4; !*(_BYTE *)(j + 21); j = *(_DWORD *)j )
            v0 = j;
        }
      }
    }
    while ( v0 != v1 );
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&Bank::ms_mapExtraInv);
  }
}

//----- (00617630) --------------------------------------------------------
void __cdecl Bank::Clear(char byTargetPage)
{
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > iter; // [sp+4h] [bp-4h]@3

  if ( (unsigned __int8)byTargetPage < 0x10u )
    memset(&Bank::ms_aspInv[144 * (unsigned __int8)byTargetPage], 0, 0x90u);
  std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(
    &Bank::ms_mapExtraInv,
    &iter,
    &byTargetPage);
  if ( iter != stru_A9B084 )
    memset(*(char **)(*(_DWORD *)&iter + 16), 0, 0x90u);
  Bank::ms_i64Money = 0i64;
}
// A9A770: using guessed type __int64 Bank__ms_i64Money;

//----- (006176A0) --------------------------------------------------------
bool __cdecl Bank::IsEmpty(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > iter; // [sp+4h] [bp-4h]@6

  v1 = uiIndex;
  if ( uiIndex >= 36 * (unsigned int)(unsigned __int8)Bank::ms_byTotalBankPage )
    return 0;
  if ( uiIndex >= 0x240 )
  {
    BYTE3(uiIndex) = uiIndex / 0x24;
    std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(
      &Bank::ms_mapExtraInv,
      &iter,
      (const char *)&uiIndex + 3);
    if ( iter != stru_A9B084 && *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&iter + 16) + 4 * v1 % 0x24) )
      return 0;
  }
  else
  {
    if ( *(_DWORD *)&Bank::ms_aspInv[4 * uiIndex] )
      return 0;
  }
  return 1;
}
// A9A778: using guessed type char Bank__ms_byTotalBankPage;

//----- (00617730) --------------------------------------------------------
Item *__cdecl Bank::Get(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  Item *result; // eax@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > iter; // [sp+4h] [bp-4h]@5

  v1 = uiIndex;
  if ( uiIndex < 36 * (unsigned int)(unsigned __int8)Bank::ms_byTotalBankPage )
  {
    if ( uiIndex >= 0x240 )
    {
      BYTE3(uiIndex) = uiIndex / 0x24;
      std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(
        &Bank::ms_mapExtraInv,
        &iter,
        (const char *)&uiIndex + 3);
      if ( iter == stru_A9B084 )
        result = 0;
      else
        result = *(Item **)(*(_DWORD *)(*(_DWORD *)&iter + 16) + 4 * v1 % 0x24);
    }
    else
    {
      result = (Item *)Bank::ms_aspInv[uiIndex];
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9A778: using guessed type char Bank__ms_byTotalBankPage;
// A9A780: using guessed type int Bank__ms_aspInv[];

//----- (006177B0) --------------------------------------------------------
void __cdecl Bank::Add(Item *pkItem, unsigned int uiIndex)
{
  unsigned int v2; // esi@1
  int v3; // edi@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > iter; // [sp+4h] [bp-4h]@11

  v2 = uiIndex;
  if ( uiIndex < 36 * (unsigned int)(unsigned __int8)Bank::ms_byTotalBankPage )
  {
    if ( uiIndex >= 0x240 )
    {
      BYTE3(uiIndex) = uiIndex / 0x24;
      std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(
        &Bank::ms_mapExtraInv,
        &iter,
        (const char *)&uiIndex + 3);
      if ( iter != stru_A9B084 )
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)(*(_DWORD *)(*(_DWORD *)&iter + 16) + 4 * v2 % 0x24),
          (NiD3DDefaultShader *)pkItem);
    }
    else
    {
      v3 = *(_DWORD *)&Bank::ms_aspInv[4 * uiIndex];
      if ( (Item *)v3 != pkItem )
      {
        if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
        *(_DWORD *)&Bank::ms_aspInv[4 * v2] = pkItem;
        if ( pkItem )
          InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
      }
    }
  }
}
// A9A778: using guessed type char Bank__ms_byTotalBankPage;

//----- (00617870) --------------------------------------------------------
bool __cdecl Bank::IsPageDataExist(char byTargetPage)
{
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > v1; // ecx@0
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > iter; // [sp+0h] [bp-4h]@1

  iter = v1;
  std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(
    &Bank::ms_mapExtraInv,
    &iter,
    &byTargetPage);
  return iter != stru_A9B084;
}

//----- (006178A0) --------------------------------------------------------
bool __cdecl Bank::SetContents(PROTO_NC_MENU_OPENSTORAGE_CMD *pkProto)
{
  PROTO_NC_MENU_OPENSTORAGE_CMD *v1; // esi@1
  const char *v2; // edi@1
  char v3; // ST10_1@1
  void *v4; // eax@3
  char *v5; // edi@4
  std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *v6; // eax@6
  int v7; // eax@7
  PROTO_ITEMPACKET_INFORM *v8; // ebx@7
  Item *v9; // esi@9
  int v10; // edi@12
  int v11; // ebx@14
  int v12; // ecx@22
  int v13; // edx@22
  int v14; // edi@22
  int v15; // ebx@22
  std::pair<unsigned char const ,NiPointer<Item> *> _Val; // [sp+0h] [bp-28h]@6
  int uiBuffSize; // [sp+8h] [bp-20h]@9
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > iter; // [sp+Ch] [bp-1Ch]@21
  int v20; // [sp+10h] [bp-18h]@8
  char *pcBuff; // [sp+14h] [bp-14h]@7
  char *_Keyval; // [sp+18h] [bp-10h]@1
  int v23; // [sp+24h] [bp-4h]@3

  v1 = pkProto;
  v2 = &pkProto->curpage;
  v3 = pkProto->curpage;
  _Keyval = &pkProto->curpage;
  Bank::Clear(v3);
  Bank::ms_i64Money = v1->cen;
  Bank::ms_byTotalBankPage = v1->maxpage;
  if ( (unsigned __int8)*v2 >= 0x10u )
  {
    std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(
      &Bank::ms_mapExtraInv,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > *)&pkProto,
      v2);
    if ( pkProto == (PROTO_NC_MENU_OPENSTORAGE_CMD *)stru_A9B084 )
    {
      v4 = operator new__(0x94u);
      pkProto = (PROTO_NC_MENU_OPENSTORAGE_CMD *)v4;
      v23 = 0;
      if ( v4 )
      {
        v5 = (char *)v4 + 4;
        *(_DWORD *)v4 = 36;
        _eh_vector_constructor_iterator_(
          (char *)v4 + 4,
          4u,
          36,
          (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
          (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
      }
      else
      {
        v5 = 0;
      }
      v23 = -1;
      memset(v5, 0, 0x90u);
      _Val.baseclass_0.first = *_Keyval;
      _Val.baseclass_0.second = (NiPointer<Item> *)v5;
      v6 = std::_Tree_val<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Buynode<std::pair<unsigned_char_const_NiPointer<Item>__>>(
             &Bank::ms_mapExtraInv.baseclass_0,
             &_Val);
      std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Linsert(
        &Bank::ms_mapExtraInv,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > >,bool> *)&_Val,
        v6,
        0);
    }
  }
  v7 = v1->itemcounter;
  v8 = (PROTO_ITEMPACKET_INFORM *)&v1[1];
  pcBuff = (char *)&v1[1];
  if ( v7 )
  {
    v20 = v7;
    do
    {
      v9 = Item::Create(v8, (ITEM_INVEN *)&pkProto, (unsigned int *)&uiBuffSize);
      _Val.baseclass_0.second = (NiPointer<Item> *)v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount);
      v23 = 1;
      if ( ((unsigned __int16)pkProto & 0xFC00) != 6144
        || (v10 = (unsigned __int16)pkProto & 0x3FF, v10 >= 36 * (unsigned __int8)Bank::ms_byTotalBankPage) )
      {
        if ( v9 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount) )
            v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
          v9 = 0;
        }
      }
      else
      {
        if ( ((unsigned __int16)pkProto & 0x3FFu) >= 0x240 )
        {
          std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(
            &Bank::ms_mapExtraInv,
            &iter,
            _Keyval);
          if ( iter == stru_A9B084 )
            goto LABEL_34;
          v12 = *(_DWORD *)(*(_DWORD *)&iter + 16);
          v13 = v10 % 36;
          v14 = *(_DWORD *)(v12 + 4 * v13);
          v15 = v12 + 4 * v13;
          if ( (Item *)v14 != v9 )
          {
            if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
            *(_DWORD *)v15 = v9;
            if ( v9 )
              InterlockedIncrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount);
          }
        }
        else
        {
          v11 = *(_DWORD *)&Bank::ms_aspInv[4 * v10];
          if ( (Item *)v11 != v9 )
          {
            if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
            *(_DWORD *)&Bank::ms_aspInv[4 * v10] = v9;
            if ( v9 )
              InterlockedIncrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount);
          }
        }
      }
      v8 = (PROTO_ITEMPACKET_INFORM *)&pcBuff[uiBuffSize];
      pcBuff += uiBuffSize;
LABEL_34:
      v23 = -1;
      if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount) )
        v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      --v20;
    }
    while ( v20 );
  }
  return 1;
}
// A9A770: using guessed type __int64 Bank__ms_i64Money;
// A9A778: using guessed type char Bank__ms_byTotalBankPage;

//----- (00617B40) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *v4; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *v5; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *v6; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v7; // esi@1
  bool v8; // cl@1
  const char v9; // dl@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v10; // edi@10
  int v11; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > >,bool> *v12; // eax@12
  int v13; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5;
  v8 = 1;
  _Addleft = 1;
  if ( !v6->_Isnil )
  {
    v9 = _Node->_Myval.baseclass_0.first;
    do
    {
      v7 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6;
      if ( _Leftish )
        v8 = v6->_Myval.baseclass_0.first >= (unsigned __int8)v9;
      else
        v8 = (unsigned __int8)v9 < v6->_Myval.baseclass_0.first;
      _Addleft = v8;
      if ( v8 )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v10 = v7;
  *(_DWORD *)&_Leftish = v7;
  if ( v8 )
  {
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *)v7 == v4->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v11 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                          (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                          1,
                          v7,
                          (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v12 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
      result->baseclass_0.second = 1;
      return v12;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Leftish);
    v10 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Leftish;
  }
  if ( LOBYTE(v10->_Myval.baseclass_0.first) >= _Node->_Myval.baseclass_0.first )
  {
    operator delete(_Node);
    v12 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v10;
    result->baseclass_0.second = 0;
  }
  else
  {
    v13 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                        _Addleft,
                        v7,
                        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v12 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v13;
    result->baseclass_0.second = 1;
  }
  return v12;
}

//----- (00617C20) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > *result, const char *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= (unsigned __int8)*_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || (unsigned __int8)*_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (00617C90) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Buynode<std::pair<unsigned_char_const_NiPointer<Item>__>>(std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *this, std::pair<unsigned char const ,NiPointer<Item> *> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *result; // eax@1
  std::pair<unsigned char const ,NiPointer<Item> *> *v4; // esi@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *)operator new(0x18u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned char,NiPointer<Item> *,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,NiPointer<Item> *> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00617D00) --------------------------------------------------------
bool __thiscall ICharDeadEvent::MatchProcessingHandle(ICharDeadEvent *this, unsigned __int16 hTarget)
{
  return 0;
}

//----- (00617D10) --------------------------------------------------------
void __thiscall CharDeadEvent_DropItem::OnDead(CharDeadEvent_DropItem *this)
{
  CharDeadEvent_DropItem *v1; // esi@1
  Char *v2; // eax@1
  NiPoint3 *v3; // eax@2

  v1 = this;
  DropItemMgr::Add(&g_kDropItemMgr, &this->m_kProto);
  v2 = CharMgr::GetChar(&g_kCharMgr, v1->m_kProto.dropmobhandle);
  if ( v2 )
  {
    v3 = (NiPoint3 *)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[6].Deaffect)(v2);
    SoundMgr::PlayItemDropSound(&g_kSoundMgr, v1->m_kProto.itemid, v3);
  }
}

//----- (00617D60) --------------------------------------------------------
bool __thiscall CharDeadEvent_DropItem::MatchProcessingHandle(CharDeadEvent_DropItem *this, unsigned __int16 hTarget)
{
  return this->m_kProto.handle == hTarget;
}

//----- (00617D80) --------------------------------------------------------
bool __thiscall ICharDeadEvent::Update(ICharDeadEvent *this)
{
  ICharDeadEvent *v1; // edi@1
  Char *v2; // eax@1
  Char *v3; // esi@1
  bool result; // al@5

  v1 = this;
  v2 = CharMgr::GetChar(&g_kCharMgr, this->m_kCharHandle);
  v3 = v2;
  if ( !v2
    || v2->m_bUserCharacter
    || Char::IsNPC(v2)
    || ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[2].__vecDelDtor)(v3) <= 0 )
  {
    v1->vfptr->OnDead(v1);
    result = 0;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00617DD0) --------------------------------------------------------
void __cdecl ICharDeadEvent::TerminateAll()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // eax@2
  NiTListItem<NiD3DShaderInterface *> *v1; // ecx@2
  void *v2; // esi@5

  while ( *(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v0 = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead;
    v1 = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead->m_pkNext;
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead = v1;
    if ( v1 )
      v1->m_pkPrev = 0;
    else
      ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail = 0;
    v2 = v0->m_element;
    ICharDeadEvent::ms_kEventList.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ICharDeadEvent::ms_kEventList,
      v0);
    --*(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    operator delete(v2);
  }
}

//----- (00617E30) --------------------------------------------------------
void __thiscall ICharDeadEvent::ICharDeadEvent(ICharDeadEvent *this, PgFrameWork *pkFrameWork)
{
  ICharDeadEvent *v2; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v3; // eax@1

  v2 = this;
  this->baseclass_4.m_pkFrameWork = pkFrameWork;
  this->vfptr = (ICharDeadEventVtbl *)&ICharDeadEvent::_vftable_;
  v3 = ICharDeadEvent::ms_kEventList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ICharDeadEvent::ms_kEventList);
  v3->m_element = (NiD3DShaderInterface *)v2;
  v3->m_pkNext = 0;
  v3->m_pkPrev = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail )
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail->m_pkNext = v3;
  else
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead = v3;
  ++*(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail = v3;
  v2->m_eEventType = 0;
}
// 9C0E9C: using guessed type int (*ICharDeadEvent___vftable_)();

//----- (00617E90) --------------------------------------------------------
void __cdecl ICharDeadEvent::UpdateAll()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // esi@1
  NiD3DShaderInterface *v1; // ebx@2
  unsigned __int16 v2; // ax@2
  Char *v3; // eax@2
  Char *v4; // edi@2
  void *v5; // eax@6
  NiTListItem<NiD3DShaderInterface *> *currIter; // [sp+4h] [bp-4h]@2

  v0 = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = v0->m_element;
      v2 = LOWORD(v1->baseclass_0.m_pszName);
      currIter = v0;
      v0 = v0->m_pkNext;
      v3 = CharMgr::GetChar(&g_kCharMgr, v2);
      v4 = v3;
      if ( !v3
        || v3->m_bUserCharacter
        || Char::IsNPC(v3)
        || ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(v4) <= 0 )
      {
        ((void (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v1);
        v5 = NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
               &ICharDeadEvent::ms_kEventList,
               (void **)&currIter);
        operator delete(v5);
      }
    }
    while ( v0 );
  }
}

//----- (00617F10) --------------------------------------------------------
void __thiscall CharDeadEvent_LevelUp::CharDeadEvent_LevelUp(CharDeadEvent_LevelUp *this, PgFrameWork *pkFrameWork, PROTO_NC_BAT_LEVELUP_CMD *rkProto)
{
  CharDeadEvent_LevelUp *v3; // ebx@1
  NiTListItem<NiD3DShaderInterface *> *v4; // eax@1
  unsigned __int16 v5; // dx@4

  v3 = this;
  this->baseclass_0.baseclass_4.m_pkFrameWork = pkFrameWork;
  this->baseclass_0.vfptr = (ICharDeadEventVtbl *)&ICharDeadEvent::_vftable_;
  v4 = ICharDeadEvent::ms_kEventList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ICharDeadEvent::ms_kEventList);
  v4->m_element = (NiD3DShaderInterface *)v3;
  v4->m_pkNext = 0;
  v4->m_pkPrev = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail )
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail->m_pkNext = v4;
  else
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead = v4;
  ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail = v4;
  ++*(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v3->baseclass_0.m_eEventType = 0;
  v3->baseclass_0.vfptr = (ICharDeadEventVtbl *)&CharDeadEvent_LevelUp::_vftable_;
  memcpy(&v3->m_kProto, rkProto, sizeof(v3->m_kProto));
  v5 = v3->m_kProto.mobhandle;
  v3->baseclass_0.m_eEventType = 1;
  v3->baseclass_0.m_kCharHandle = v5;
}
// 9C0E9C: using guessed type int (*ICharDeadEvent___vftable_)();
// 9C0EA8: using guessed type int (*CharDeadEvent_LevelUp___vftable_)();

//----- (00617FA0) --------------------------------------------------------
void __thiscall CharDeadEvent_LevelUp::OnDead(CharDeadEvent_LevelUp *this)
{
  CharDeadEvent_LevelUp *v1; // esi@1
  int v2; // edi@1
  int v3; // ebx@1
  char *v4; // eax@2
  char *v5; // eax@2
  PgFrameWork *v6; // ecx@2
  char *v7; // eax@5
  char *v8; // eax@5
  PgFrameWork *v9; // ecx@5
  char *v10; // eax@8
  char *v11; // eax@8
  PgFrameWork *v12; // ecx@8
  char *v13; // eax@11
  char *v14; // eax@11
  PgFrameWork *v15; // ecx@11
  char *v16; // eax@14
  char *v17; // eax@14
  PgFrameWork *v18; // ecx@14
  int dwDummy; // [sp+14h] [bp-14h]@1
  SoundIndex rkIndex; // [sp+18h] [bp-10h]@1
  unsigned int iIntDelta; // [sp+20h] [bp-8h]@1
  unsigned int iDexDelta; // [sp+24h] [bp-4h]@1

  v1 = this;
  User::SetLv(&g_kUser, this->m_kProto.level);
  EffectMgr::CreateAttachEffect(
    &g_kEffectMgr,
    (unsigned int *)&dwDummy,
    "LevelUp",
    g_pkMainChar->m_spScene.m_pObject,
    Timer::ms_fCurTime,
    0);
  v2 = v1->m_kProto.newparam.Strength.base - User::BaseStr(&g_kUser);
  v3 = v1->m_kProto.newparam.Constitute.base - User::BaseCon(&g_kUser);
  iDexDelta = v1->m_kProto.newparam.Dexterity.base - User::BaseDex(&g_kUser);
  iIntDelta = v1->m_kProto.newparam.Intelligence.base - User::BaseInt(&g_kUser);
  rkIndex.m_acFilename = (char *)(v1->m_kProto.newparam.MentalPower.base - User::BaseMen(&g_kUser));
  if ( v2 )
  {
    v4 = TextData::Get(0xE70707EAu);
    v5 = fs(v4);
    v6 = v1->baseclass_0.baseclass_4.m_pkFrameWork;
    if ( v6 )
      ((void (__stdcall *)(signed int, char *, _DWORD))v6->baseclass_0.vfptr->SendDirectMessage)(25, v5, 0);
  }
  if ( v3 )
  {
    v7 = TextData::Get(0x93F7FDF7u);
    v8 = fs(v7);
    v9 = v1->baseclass_0.baseclass_4.m_pkFrameWork;
    if ( v9 )
      ((void (__stdcall *)(signed int, char *, _DWORD))v9->baseclass_0.vfptr->SendDirectMessage)(25, v8, 0);
  }
  if ( iDexDelta )
  {
    v10 = TextData::Get(0xD8F807F0u);
    v11 = fs(v10);
    v12 = v1->baseclass_0.baseclass_4.m_pkFrameWork;
    if ( v12 )
      ((void (__stdcall *)(signed int, char *, _DWORD))v12->baseclass_0.vfptr->SendDirectMessage)(25, v11, 0);
  }
  if ( iIntDelta )
  {
    v13 = TextData::Get(0xE1FD07ECu);
    v14 = fs(v13);
    v15 = v1->baseclass_0.baseclass_4.m_pkFrameWork;
    if ( v15 )
      ((void (__stdcall *)(signed int, char *, _DWORD))v15->baseclass_0.vfptr->SendDirectMessage)(25, v14, 0);
  }
  if ( rkIndex.m_acFilename )
  {
    v16 = TextData::Get(0xDC0B07EBu);
    v17 = fs(v16);
    v18 = v1->baseclass_0.baseclass_4.m_pkFrameWork;
    if ( v18 )
      ((void (__stdcall *)(signed int, char *, _DWORD))v18->baseclass_0.vfptr->SendDirectMessage)(25, v17, 0);
  }
  User::SetParam(&g_kUser, &v1->m_kProto.newparam);
  rkIndex.m_dwIndex = 9;
  rkIndex.m_acFilename = 0;
  SoundGroupStatic::PlaySoundA(&g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0, &rkIndex, 0, 0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00618160) --------------------------------------------------------
void __thiscall CharDeadEvent_DropItem::CharDeadEvent_DropItem(CharDeadEvent_DropItem *this, PgFrameWork *pkFrameWork, PROTO_NC_BRIEFINFO_DROPEDITEM_CMD *rkProto)
{
  CharDeadEvent_DropItem *v3; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v4; // eax@1

  v3 = this;
  this->baseclass_0.baseclass_4.m_pkFrameWork = pkFrameWork;
  this->baseclass_0.vfptr = (ICharDeadEventVtbl *)&ICharDeadEvent::_vftable_;
  v4 = ICharDeadEvent::ms_kEventList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ICharDeadEvent::ms_kEventList);
  v4->m_element = (NiD3DShaderInterface *)v3;
  v4->m_pkNext = 0;
  v4->m_pkPrev = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail )
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail->m_pkNext = v4;
  else
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead = v4;
  ++*(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail = v4;
  v3->baseclass_0.m_eEventType = 0;
  v3->baseclass_0.vfptr = (ICharDeadEventVtbl *)&CharDeadEvent_DropItem::_vftable_;
  *(_DWORD *)&v3->m_kProto.handle = *(_DWORD *)&rkProto->handle;
  v3->m_kProto.location.x = rkProto->location.x;
  v3->m_kProto.location.y = rkProto->location.y;
  v3->m_kProto.dropmobhandle = rkProto->dropmobhandle;
  v3->m_kProto.attr._bf0 = rkProto->attr._bf0;
  v3->baseclass_0.m_kCharHandle = v3->m_kProto.dropmobhandle;
  v3->baseclass_0.m_eEventType = 2;
}
// 9C0E9C: using guessed type int (*ICharDeadEvent___vftable_)();
// 9C0EB4: using guessed type int (*CharDeadEvent_DropItem___vftable_)();

//----- (00618200) --------------------------------------------------------
void __thiscall CharDeadEvent_ExpGain::CharDeadEvent_ExpGain(CharDeadEvent_ExpGain *this, PgFrameWork *pkFrameWork, PROTO_NC_BAT_EXPGAIN_CMD *rkProto)
{
  CharDeadEvent_ExpGain *v3; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v4; // eax@1
  unsigned __int16 v5; // cx@4

  v3 = this;
  this->baseclass_0.baseclass_4.m_pkFrameWork = pkFrameWork;
  this->baseclass_0.vfptr = (ICharDeadEventVtbl *)&ICharDeadEvent::_vftable_;
  v4 = ICharDeadEvent::ms_kEventList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ICharDeadEvent::ms_kEventList);
  v4->m_element = (NiD3DShaderInterface *)v3;
  v4->m_pkNext = 0;
  v4->m_pkPrev = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail )
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail->m_pkNext = v4;
  else
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead = v4;
  ++*(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail = v4;
  v3->baseclass_0.m_eEventType = 0;
  v3->baseclass_0.vfptr = (ICharDeadEventVtbl *)&CharDeadEvent_ExpGain::_vftable_;
  v3->m_kProto.expgain = rkProto->expgain;
  v5 = rkProto->mobhandle;
  v3->m_kProto.mobhandle = v5;
  v3->baseclass_0.m_kCharHandle = v5;
  v3->baseclass_0.m_eEventType = 3;
}
// 9C0E9C: using guessed type int (*ICharDeadEvent___vftable_)();
// 9C0EC0: using guessed type int (*CharDeadEvent_ExpGain___vftable_)();

//----- (00618290) --------------------------------------------------------
void __thiscall CharDeadEvent_ExpGain::OnDead(CharDeadEvent_ExpGain *this)
{
  CharDeadEvent_ExpGain *v1; // esi@1
  char *v2; // eax@2
  char *v3; // eax@2
  PgFrameWork *v4; // ecx@2

  v1 = this;
  User::AddCurExp(&g_kUser, this->m_kProto.expgain);
  if ( v1->m_kProto.expgain )
  {
    v2 = TextData::Get(0xE0EB073Cu);
    v3 = fs(v2);
    v4 = v1->baseclass_0.baseclass_4.m_pkFrameWork;
    if ( v4 )
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr->SendDirectMessage)(25, v3, 0);
  }
}

//----- (006182E0) --------------------------------------------------------
void __thiscall CharDeadEvent_SomeoneLevelUp::CharDeadEvent_SomeoneLevelUp(CharDeadEvent_SomeoneLevelUp *this, PgFrameWork *pkFrameWork, PROTO_NC_BAT_SUMEONELEVELUP_CMD *rkProto)
{
  CharDeadEvent_SomeoneLevelUp *v3; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v4; // eax@1

  v3 = this;
  this->baseclass_0.baseclass_4.m_pkFrameWork = pkFrameWork;
  this->baseclass_0.vfptr = (ICharDeadEventVtbl *)&ICharDeadEvent::_vftable_;
  v4 = ICharDeadEvent::ms_kEventList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ICharDeadEvent::ms_kEventList);
  v4->m_element = (NiD3DShaderInterface *)v3;
  v4->m_pkNext = 0;
  v4->m_pkPrev = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail )
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail->m_pkNext = v4;
  else
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead = v4;
  ++*(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail = v4;
  v3->baseclass_0.m_eEventType = 0;
  v3->baseclass_0.vfptr = (ICharDeadEventVtbl *)&CharDeadEvent_SomeoneLevelUp::_vftable_;
  *(_DWORD *)&v3->m_kProto.ply = *(_DWORD *)&rkProto->ply;
  v3->baseclass_0.m_kCharHandle = v3->m_kProto.mobhandle;
  v3->baseclass_0.m_eEventType = 4;
}
// 9C0E9C: using guessed type int (*ICharDeadEvent___vftable_)();
// 9C0ECC: using guessed type int (*CharDeadEvent_SomeoneLevelUp___vftable_)();

//----- (00618360) --------------------------------------------------------
void __thiscall CharDeadEvent_SomeoneLevelUp::OnDead(CharDeadEvent_SomeoneLevelUp *this)
{
  Char *v1; // eax@1
  CharDeadEvent_SomeoneLevelUp *dwDummy; // [sp+8h] [bp-4h]@1

  dwDummy = this;
  v1 = CharMgr::GetChar(&g_kCharMgr, this->m_kProto.ply);
  if ( v1 )
    EffectMgr::CreateAttachEffect(
      &g_kEffectMgr,
      (unsigned int *)&dwDummy,
      "LevelUp",
      v1->m_spScene.m_pObject,
      Timer::ms_fCurTime,
      0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006183B0) --------------------------------------------------------
void __thiscall CharDeadEvent_InformWhoKilledMe::OnDead(CharDeadEvent_InformWhoKilledMe *this)
{
  CharDeadEvent_InformWhoKilledMe *v1; // esi@1
  char *v2; // eax@1
  char *v3; // eax@1
  PgFrameWork *v4; // ecx@1

  v1 = this;
  v2 = TextData::Get(0xD0483643u);
  v3 = fs(v2);
  v4 = v1->baseclass_0.baseclass_4.m_pkFrameWork;
  if ( v4 )
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr->SendDirectMessage)(26, v3, 0);
}

//----- (006183F0) --------------------------------------------------------
bool __cdecl ICharDeadEvent::CheckEventExistOnQueue(DeadEventType eEventType, unsigned __int16 hTarget, bool bDelete)
{
  NiTListItem<NiD3DShaderInterface *> *v3; // edi@1
  NiD3DShaderInterface *v4; // esi@2
  NiTListItem<NiD3DShaderInterface *> *v5; // eax@6
  int v6; // ecx@7
  void *v7; // edx@7
  void *kPos; // [sp+4h] [bp-10Ch]@10
  bool re; // [sp+Bh] [bp-105h]@1
  char OutputString; // [sp+Ch] [bp-104h]@12
  char temp[128]; // [sp+8Ch] [bp-84h]@1
  unsigned int v13; // [sp+10Ch] [bp-4h]@1
  int v14; // [sp+110h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  re = 0;
  memset(temp, 0, 0x80u);
  sprintf(temp, "ItemDrop Queue Delete Start: %d \n");
  OutputDebugStringA(temp);
  v3 = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead )
  {
    do
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      if ( v4 )
      {
        if ( eEventType == v4->baseclass_0.m_uiImplementation )
        {
          if ( (unsigned __int8)v4->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor((NiRefObject *)v4, hTarget) )
          {
            re = 1;
            if ( bDelete == 1 )
            {
              v5 = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead;
              if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead )
              {
                while ( 1 )
                {
                  v6 = (int)&v5->m_element;
                  v7 = v5;
                  v5 = v5->m_pkNext;
                  if ( v4 == *(NiD3DShaderInterface **)v6 )
                    break;
                  if ( !v5 )
                    goto LABEL_9;
                }
              }
              else
              {
LABEL_9:
                v7 = 0;
              }
              kPos = v7;
              if ( v7 )
                NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
                  &ICharDeadEvent::ms_kEventList,
                  &kPos);
              operator delete(v4);
              memset(&OutputString, 0, 0x80u);
              sprintf(&OutputString, "ItemDrop Queue Delete: %d(%d) \n");
              OutputDebugStringA(&OutputString);
            }
          }
        }
      }
    }
    while ( v3 );
  }
  memset(temp, 0, 0x80u);
  sprintf(temp, "ItemDrop Queue Delete End: %d \n");
  OutputDebugStringA(temp);
  return re;
}
// A85C00: using guessed type int __security_cookie;

//----- (00618570) --------------------------------------------------------
void __thiscall CharDeadEvent_InformWhoKilledMe::CharDeadEvent_InformWhoKilledMe(CharDeadEvent_InformWhoKilledMe *this, PgFrameWork *pkFrameWork, unsigned __int16 myHandle, unsigned __int16 attacker)
{
  CharDeadEvent_InformWhoKilledMe *v4; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v5; // eax@1
  unsigned __int16 v6; // dx@4
  unsigned __int16 v7; // ST00_2@4
  Char *v8; // eax@4
  Char *v9; // edi@4
  NiTListItem<NiD3DShaderInterface *> *v10; // eax@5
  int v11; // ecx@6
  NiTListItem<NiD3DShaderInterface *> *v12; // edx@6
  NiTListItem<NiD3DShaderInterface *> *v13; // eax@13
  int v14; // ecx@14
  NiTListItem<NiD3DShaderInterface *> *v15; // edx@14
  int v16; // eax@20
  int v17; // edx@20
  char v18; // cl@21

  v4 = this;
  this->baseclass_0.baseclass_4.m_pkFrameWork = pkFrameWork;
  this->baseclass_0.vfptr = (ICharDeadEventVtbl *)&ICharDeadEvent::_vftable_;
  v5 = ICharDeadEvent::ms_kEventList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ICharDeadEvent::ms_kEventList);
  v5->m_element = (NiD3DShaderInterface *)v4;
  v5->m_pkNext = 0;
  v5->m_pkPrev = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail;
  if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail )
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail->m_pkNext = v5;
  else
    ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead = v5;
  ++*(_DWORD *)&ICharDeadEvent::ms_kEventList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v6 = myHandle;
  ICharDeadEvent::ms_kEventList.baseclass_0.m_pkTail = v5;
  v7 = attacker;
  v4->baseclass_0.m_eEventType = 0;
  v4->baseclass_0.vfptr = (ICharDeadEventVtbl *)&CharDeadEvent_InformWhoKilledMe::_vftable_;
  v4->baseclass_0.m_kCharHandle = v6;
  v8 = CharMgr::GetChar(&g_kCharMgr, v7);
  v9 = v8;
  if ( v8 )
  {
    if ( (unsigned __int8)((int (__thiscall *)(Char *))v8->baseclass_0.vfptr[1].Affect)(v8) )
    {
      v13 = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead;
      if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead )
      {
        while ( 1 )
        {
          v14 = (int)&v13->m_element;
          v15 = v13;
          v13 = v13->m_pkNext;
          if ( v4 == *(CharDeadEvent_InformWhoKilledMe **)v14 )
            break;
          if ( !v13 )
            goto LABEL_16;
        }
      }
      else
      {
LABEL_16:
        v15 = 0;
      }
      *(_DWORD *)&myHandle = v15;
      if ( v15 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          &ICharDeadEvent::ms_kEventList,
          (void **)&myHandle);
      operator delete(v4);
    }
    else
    {
      v16 = ((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v9);
      v17 = (int)&v4->m_acCharName[-v16];
      do
      {
        v18 = *(_BYTE *)v16;
        *(_BYTE *)(v17 + v16) = *(_BYTE *)v16;
        ++v16;
      }
      while ( v18 );
      v4->baseclass_0.m_eEventType = 5;
    }
  }
  else
  {
    v10 = ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead;
    if ( ICharDeadEvent::ms_kEventList.baseclass_0.m_pkHead )
    {
      while ( 1 )
      {
        v11 = (int)&v10->m_element;
        v12 = v10;
        v10 = v10->m_pkNext;
        if ( v4 == *(CharDeadEvent_InformWhoKilledMe **)v11 )
          break;
        if ( !v10 )
          goto LABEL_8;
      }
    }
    else
    {
LABEL_8:
      v12 = 0;
    }
    *(_DWORD *)&myHandle = v12;
    if ( v12 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        &ICharDeadEvent::ms_kEventList,
        (void **)&myHandle);
    operator delete(v4);
  }
}
// 9C0E9C: using guessed type int (*ICharDeadEvent___vftable_)();
// 9C0ED8: using guessed type int (*CharDeadEvent_InformWhoKilledMe___vftable_)();

//----- (006186A0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>(NiTListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *> *this)
{
  this->vfptr = (NiTListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *>Vtbl *)&NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_vftable_;
}
// 9C0E6C: using guessed type int (__thiscall *NiTListBase_DFALL_ICharDeadEvent ___ICharDeadEvent _____vftable_)(void *p, char);

//----- (006186B0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_scalar_deleting_destructor_(NiTListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *>Vtbl *)&NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C0E6C: using guessed type int (__thiscall *NiTListBase_DFALL_ICharDeadEvent ___ICharDeadEvent _____vftable_)(void *p, char);

//----- (006186E0) --------------------------------------------------------
void *__thiscall NiTList<ICharDeadEvent__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<ICharDeadEvent *> *v3; // esi@1
  NiTListItem<ICharDeadEvent *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<ICharDeadEvent *>,ICharDeadEvent *>Vtbl *)&NiTPointerListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<ICharDeadEvent__>_ICharDeadEvent__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0E6C: using guessed type int (__thiscall *NiTListBase_DFALL_ICharDeadEvent ___ICharDeadEvent _____vftable_)(void *p, char);
// 9C0E7C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_ICharDeadEvent ___ICharDeadEvent _____vftable_)(void *p, char);

//----- (00618770) --------------------------------------------------------
void __thiscall GuildTournamentStorage::GuildTournamentStorage(GuildTournamentStorage *this)
{
  ;
}

//----- (00618790) --------------------------------------------------------
unsigned int __cdecl GuildTournamentStorage::GetInvIdxLotIsNotMax(Item *pkItem)
{
  return -1;
}

//----- (006187A0) --------------------------------------------------------
__int64 __cdecl GuildTournamentStorage::GetMoney()
{
  return GuildTournamentStorage::ms_i64Money;
}
// A9B090: using guessed type __int64 GuildTournamentStorage__ms_i64Money;

//----- (006187B0) --------------------------------------------------------
void __cdecl GuildTournamentStorage::SetMoney(__int64 i64Money)
{
  GuildTournamentStorage::ms_i64Money = i64Money;
}
// A9B090: using guessed type __int64 GuildTournamentStorage__ms_i64Money;

//----- (006187D0) --------------------------------------------------------
unsigned __int64 __cdecl GuildTournamentStorage::GetToken()
{
  return GuildTournamentStorage::ms_uiToken;
}
// A9B098: using guessed type __int64 GuildTournamentStorage__ms_uiToken;

//----- (006187E0) --------------------------------------------------------
void __cdecl GuildTournamentStorage::Clear()
{
  unsigned int v0; // edi@1
  int v1; // esi@2

  v0 = 0;
  do
  {
    v1 = GuildTournamentStorage::ms_aspInv[v0];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      GuildTournamentStorage::ms_aspInv[v0] = 0;
    }
    ++v0;
  }
  while ( v0 < 36 );
  GuildTournamentStorage::ms_i64Money = 0i64;
  GuildTournamentStorage::ms_uiToken = 0i64;
}
// A9B090: using guessed type __int64 GuildTournamentStorage__ms_i64Money;
// A9B098: using guessed type __int64 GuildTournamentStorage__ms_uiToken;
// A9B0A0: using guessed type int GuildTournamentStorage__ms_aspInv[];

//----- (00618850) --------------------------------------------------------
bool __cdecl GuildTournamentStorage::IsEmpty(unsigned int uiIndex)
{
  bool result; // al@2

  if ( uiIndex < 0x24 )
    result = GuildTournamentStorage::ms_aspInv[uiIndex] == 0;
  else
    result = 0;
  return result;
}
// A9B0A0: using guessed type int GuildTournamentStorage__ms_aspInv[];

//----- (00618870) --------------------------------------------------------
Item *__cdecl GuildTournamentStorage::Get(unsigned int uiIndex)
{
  Item *result; // eax@2

  if ( uiIndex < 0x24 )
    result = (Item *)GuildTournamentStorage::ms_aspInv[uiIndex];
  else
    result = 0;
  return result;
}
// A9B0A0: using guessed type int GuildTournamentStorage__ms_aspInv[];

//----- (00618890) --------------------------------------------------------
void __cdecl GuildTournamentStorage::Add(Item *pkItem, unsigned int uiIndex)
{
  int v2; // esi@2

  if ( uiIndex < 0x24 )
  {
    v2 = GuildTournamentStorage::ms_aspInv[uiIndex];
    if ( (Item *)v2 != pkItem )
    {
      if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      GuildTournamentStorage::ms_aspInv[uiIndex] = (int)pkItem;
      if ( pkItem )
        InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
    }
  }
}
// A9B0A0: using guessed type int GuildTournamentStorage__ms_aspInv[];

//----- (006188F0) --------------------------------------------------------
void __cdecl GuildTournamentStorage::Remove(unsigned int uiIndex)
{
  int v1; // esi@2

  if ( uiIndex < 0x24 )
  {
    v1 = GuildTournamentStorage::ms_aspInv[uiIndex];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      {
        if ( v1 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      }
      GuildTournamentStorage::ms_aspInv[uiIndex] = 0;
    }
  }
}
// A9B0A0: using guessed type int GuildTournamentStorage__ms_aspInv[];

//----- (00618940) --------------------------------------------------------
unsigned int __cdecl GuildTournamentStorage::GetEmpty()
{
  unsigned int result; // eax@1

  result = 0;
  while ( GuildTournamentStorage::ms_aspInv[result] )
  {
    ++result;
    if ( result >= 0x24 )
      return -1;
  }
  return result;
}
// A9B0A0: using guessed type int GuildTournamentStorage__ms_aspInv[];

//----- (00618960) --------------------------------------------------------
bool __cdecl GuildTournamentStorage::SetContents(PROTO_NC_GUILD_STORAGEOPEN_ACK *pkProto)
{
  int v1; // ecx@1
  PROTO_ITEMPACKET_INFORM *v2; // edi@1
  Item *v3; // eax@3
  int v4; // esi@3
  int v5; // edi@7
  int *v6; // ebx@7
  int uiBuffSize; // [sp+4h] [bp-18h]@3
  int v9; // [sp+8h] [bp-14h]@2
  char *pcBuff; // [sp+Ch] [bp-10h]@1
  int v11; // [sp+18h] [bp-4h]@5

  GuildTournamentStorage::Clear();
  v1 = pkProto->itemcounter;
  GuildTournamentStorage::ms_uiToken = pkProto->nToken;
  LODWORD(GuildTournamentStorage::ms_i64Money) = LODWORD(pkProto->cen);
  v2 = (PROTO_ITEMPACKET_INFORM *)&pkProto[1];
  HIDWORD(GuildTournamentStorage::ms_i64Money) = HIDWORD(pkProto->cen);
  pcBuff = (char *)&pkProto[1];
  if ( v1 )
  {
    v9 = v1;
    do
    {
      v3 = Item::Create(v2, (ITEM_INVEN *)&pkProto, (unsigned int *)&uiBuffSize);
      v4 = (int)v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount);
      v11 = 0;
      if ( ((unsigned __int16)pkProto & 0xFC00) != 4096 || ((unsigned __int16)pkProto & 0x3FFu) >= 0x24 )
      {
        if ( v4 )
        {
          if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
          v4 = 0;
        }
      }
      else
      {
        v5 = GuildTournamentStorage::ms_aspInv[(unsigned __int16)pkProto & 0x3FF];
        v6 = &GuildTournamentStorage::ms_aspInv[(unsigned __int16)pkProto & 0x3FF];
        if ( v5 != v4 )
        {
          if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
          *v6 = v4;
          if ( v4 )
            InterlockedIncrement((volatile LONG *)(v4 + 4));
        }
      }
      v2 = (PROTO_ITEMPACKET_INFORM *)&pcBuff[uiBuffSize];
      v11 = -1;
      pcBuff += uiBuffSize;
      if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      --v9;
    }
    while ( v9 );
  }
  return 1;
}
// A9B090: using guessed type __int64 GuildTournamentStorage__ms_i64Money;
// A9B098: using guessed type __int64 GuildTournamentStorage__ms_uiToken;
// A9B0A0: using guessed type int GuildTournamentStorage__ms_aspInv[];

//----- (00618AD0) --------------------------------------------------------
void __thiscall MagicField::OnEffectDestory(MagicField *this, Effect *pkEffect)
{
  if ( pkEffect )
  {
    if ( pkEffect == this->m_pkFirstEffect )
      this->m_pkFirstEffect = 0;
    if ( pkEffect == this->m_pkLoopingEffect )
      this->m_pkLoopingEffect = 0;
    if ( pkEffect == this->m_pkLastEffect )
      this->m_pkLastEffect = 0;
  }
}

//----- (00618B00) --------------------------------------------------------
void __cdecl MagicField::DeleteMagicField(unsigned __int16 handle)
{
  NiTListItem<NiD3DShaderInterface *> *v1; // eax@1
  NiD3DShaderInterface *v2; // esi@2
  NiTListItem<NiD3DShaderInterface *> *iter; // [sp+0h] [bp-4h]@1

  v1 = MagicField::ms_kMagicFieldList.baseclass_0.m_pkHead;
  iter = MagicField::ms_kMagicFieldList.baseclass_0.m_pkHead;
  if ( MagicField::ms_kMagicFieldList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v2 = v1->m_element;
      if ( LOWORD(v2->m_pkD3DRenderer) == handle )
        break;
      v1 = v1->m_pkNext;
      if ( !v1 )
      {
        iter = 0;
        return;
      }
    }
    iter = v1;
    EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v2[1].baseclass_0.baseclass_0.m_uiRefCount);
    if ( v2[1].baseclass_0.baseclass_0.m_uiRefCount )
      (*(void (__thiscall **)(_DWORD))(*(_DWORD *)(v2[1].baseclass_0.baseclass_0.m_uiRefCount + 8) + 12))(v2[1].baseclass_0.baseclass_0.m_uiRefCount + 8);
    EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v2[1].baseclass_0.m_pszName);
    if ( v2[1].baseclass_0.m_uiImplementation )
      EffectMgr::PlayEffect(&g_kEffectMgr, (Effect *)v2[1].baseclass_0.m_uiImplementation);
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      &MagicField::ms_kMagicFieldList,
      (void **)&iter);
    v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  }
}

//----- (00618B90) --------------------------------------------------------
void __thiscall MagicField::_MagicField(MagicField *this)
{
  this->baseclass_0.vfptr = (IEffectDestroyMessengerVtbl *)&MagicField::_vftable_;
  this->m_pkFirstEffect = 0;
  this->m_pkLoopingEffect = 0;
  this->m_pkLastEffect = 0;
  IEffectDestroyMessenger::_IEffectDestroyMessenger(&this->baseclass_0);
}
// 9C0F60: using guessed type int (__thiscall *MagicField___vftable_)(void *p, char);

//----- (00618BB0) --------------------------------------------------------
void __thiscall MagicField::MagicField(MagicField *this, PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *rkProto)
{
  this->baseclass_0.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *>Vtbl *)&NiTList<IEffectDestroyMessenger__>::_vftable_;
  *(_DWORD *)&this->baseclass_0.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_pkHead = 0;
  this->baseclass_0.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_pkFirstEffect = 0;
  this->m_pkLoopingEffect = 0;
  this->m_pkLastEffect = 0;
  this->baseclass_0.vfptr = (IEffectDestroyMessengerVtbl *)&MagicField::_vftable_;
  *(_DWORD *)&this->m_kProto.handle = *(_DWORD *)&rkProto->handle;
  *(_DWORD *)&this->m_kProto.skillid = *(_DWORD *)&rkProto->skillid;
  *(unsigned int *)((char *)&this->m_kProto.location.x + 2) = *(unsigned int *)((char *)&rkProto->location.x + 2);
  *(unsigned int *)((char *)&this->m_kProto.location.y + 2) = *(unsigned int *)((char *)&rkProto->location.y + 2);
}
// 9C0F50: using guessed type int (__thiscall *NiTList_IEffectDestroyMessenger _____vftable_)(void *p, char);
// 9C0F60: using guessed type int (__thiscall *MagicField___vftable_)(void *p, char);

//----- (00618C00) --------------------------------------------------------
void __cdecl MagicField::AddMagicField(PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *rkProto, NiPoint3 *kDir, bool bSetDir)
{
  void *v3; // eax@1
  PROTO_NC_BRIEFINFO_MAGICFIELDSPREAD_CMD *v4; // ebx@1
  void *v5; // edi@1
  int v6; // esi@3
  int v7; // eax@5
  float v8; // ST18_4@7
  float v9; // ST14_4@7
  _BYTE v10[12]; // ST10_12@7
  _BYTE v11[12]; // ST04_12@7
  _BYTE v12[12]; // ST10_12@7
  _BYTE v13[12]; // ST04_12@7
  Effect *v14; // eax@7
  int v15; // esi@8
  int v16; // ebx@8
  int v17; // ecx@10
  int v18; // eax@11
  bool v19; // zf@12
  int v20; // ecx@14
  int v21; // eax@17
  int v22; // eax@19
  int v23; // eax@21
  NiTListItem<NiD3DShaderInterface *> *v24; // eax@23
  NiPoint3 kPos; // [sp+20h] [bp-14h]@7
  float fLoopKeepTime; // [sp+2Ch] [bp-8h]@12
  float fLoopWaitTime; // [sp+30h] [bp-4h]@14
  int pkInfo; // [sp+3Ch] [bp+8h]@3
  int pkInfoa; // [sp+3Ch] [bp+8h]@6

  v3 = operator new(0x30u);
  v4 = rkProto;
  v5 = 0;
  if ( v3 )
  {
    *((_DWORD *)v3 + 4) = 0;
    *((_DWORD *)v3 + 2) = 0;
    *((_DWORD *)v3 + 3) = 0;
    *((_DWORD *)v3 + 1) = &NiTList<IEffectDestroyMessenger__>::_vftable_;
    *((_DWORD *)v3 + 9) = 0;
    *((_DWORD *)v3 + 10) = 0;
    *((_DWORD *)v3 + 11) = 0;
    *(_DWORD *)v3 = &MagicField::_vftable_;
    *((_DWORD *)v3 + 5) = *(_DWORD *)&rkProto->handle;
    *((_DWORD *)v3 + 6) = *(_DWORD *)&rkProto->skillid;
    *((_DWORD *)v3 + 7) = *(unsigned int *)((char *)&rkProto->location.x + 2);
    *((_DWORD *)v3 + 8) = *(unsigned int *)((char *)&rkProto->location.y + 2);
    v5 = v3;
  }
  v6 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
  pkInfo = rkProto->skillid;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                          v4->skillid) )
  {
    if ( (unsigned __int16)pkInfo <= *(_WORD *)(v6 + 200) )
    {
      v7 = *(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)pkInfo;
      if ( *(_DWORD *)v7 )
      {
        pkInfoa = *(_DWORD *)v7;
        if ( *(_DWORD *)v7 )
        {
          v9 = (double)v4->location.x;
          v8 = (double)v4->location.y;
          World::GetGroundPos(&g_kWorld, v9, v8, &kPos, 0);
          *(_DWORD *)v10 = LODWORD(kDir->x);
          *(_QWORD *)&v10[4] = *(_QWORD *)&kDir->y;
          *(_DWORD *)v11 = (_DWORD)kPos.x;
          *(_QWORD *)&v11[4] = *(_QWORD *)&kPos.y;
          *((_DWORD *)v5 + 9) = EffectMgr::JustCreateEffect(
                                  &g_kEffectMgr,
                                  (char *)(pkInfoa + 455),
                                  *(NiPoint3 *)v11,
                                  *(NiPoint3 *)v10,
                                  Timer::ms_fCurTime,
                                  bSetDir);
          *(_DWORD *)v12 = LODWORD(kDir->x);
          *(_QWORD *)&v12[4] = *(_QWORD *)&kDir->y;
          *(_DWORD *)v13 = (_DWORD)kPos.x;
          *(_QWORD *)&v13[4] = *(_QWORD *)&kPos.y;
          v14 = EffectMgr::JustCreateEffect(
                  &g_kEffectMgr,
                  (char *)(pkInfoa + 519),
                  *(NiPoint3 *)v13,
                  *(NiPoint3 *)v12,
                  Timer::ms_fCurTime,
                  bSetDir);
          *((_DWORD *)v5 + 10) = v14;
          if ( v14 )
          {
            v15 = v4->skillid;
            v16 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
            if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                                  + 16))(
                                    ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                                    v15) )
            {
              if ( (unsigned __int16)v15 <= *(_WORD *)(v16 + 200) )
              {
                v17 = *(_DWORD *)(v16 + 196);
                if ( *(_DWORD *)(v17 + 4 * v15) )
                {
                  v18 = *(_DWORD *)(v17 + 4 * v15);
                  if ( v18 )
                  {
                    v19 = *(_DWORD *)(v18 + 539) == 14;
                    fLoopKeepTime = 0.0;
                    if ( v19 )
                      fLoopKeepTime = (double)*(unsigned int *)(v18 + 543) / 1000.0;
                    v20 = *((_DWORD *)v5 + 9);
                    fLoopWaitTime = 0.0;
                    if ( v20 )
                      fLoopWaitTime = *(float *)((*(int (**)(void))(*(_DWORD *)v20 + 16))() + 12);
                    Effect::SetLoopInfo(
                      *((Effect **)v5 + 10),
                      (const char *)(pkInfoa + 551),
                      fLoopKeepTime,
                      fLoopWaitTime,
                      Timer::ms_fCurTime);
                  }
                }
              }
            }
          }
          v21 = *((_DWORD *)v5 + 9);
          if ( v21 )
          {
            *(_DWORD *)(v21 + 144) = *((_DWORD *)v5 + 10);
            EffectMgr::PlayEffect(&g_kEffectMgr, *((Effect **)v5 + 9));
            SoundMgr::CreateSound(&g_kSoundMgr, (char *)(pkInfoa + 487), &kPos);
          }
          v22 = *((_DWORD *)v5 + 9);
          if ( v22 )
            (*(void (__thiscall **)(int, void *))(*(_DWORD *)(v22 + 8) + 4))(v22 + 8, v5);
          v23 = *((_DWORD *)v5 + 10);
          if ( v23 )
            (*(void (__thiscall **)(int, void *))(*(_DWORD *)(v23 + 8) + 4))(v23 + 8, v5);
          v24 = MagicField::ms_kMagicFieldList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&MagicField::ms_kMagicFieldList);
          v24->m_element = (NiD3DShaderInterface *)v5;
          v24->m_pkNext = 0;
          v24->m_pkPrev = MagicField::ms_kMagicFieldList.baseclass_0.m_pkTail;
          if ( MagicField::ms_kMagicFieldList.baseclass_0.m_pkTail )
          {
            MagicField::ms_kMagicFieldList.baseclass_0.m_pkTail->m_pkNext = v24;
            ++*(_DWORD *)&MagicField::ms_kMagicFieldList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
            MagicField::ms_kMagicFieldList.baseclass_0.m_pkTail = v24;
          }
          else
          {
            ++*(_DWORD *)&MagicField::ms_kMagicFieldList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
            MagicField::ms_kMagicFieldList.baseclass_0.m_pkHead = v24;
            MagicField::ms_kMagicFieldList.baseclass_0.m_pkTail = v24;
          }
        }
      }
    }
  }
}
// 9C0F50: using guessed type int (__thiscall *NiTList_IEffectDestroyMessenger _____vftable_)(void *p, char);
// 9C0F60: using guessed type int (__thiscall *MagicField___vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (00618EF0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<MagicField__>_MagicField__>::_NiTListBase<DFALL<MagicField__>_MagicField__>(NiTListBase<DFALL<MagicField *>,MagicField *> *this)
{
  this->vfptr = (NiTListBase<DFALL<MagicField *>,MagicField *>Vtbl *)&NiTListBase<DFALL<MagicField__>_MagicField__>::_vftable_;
}
// 9C0EEC: using guessed type int (__thiscall *NiTListBase_DFALL_MagicField ___MagicField _____vftable_)(void *p, char);

//----- (00618F00) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<MagicField__>_MagicField__>::_scalar_deleting_destructor_(NiTListBase<DFALL<MagicField *>,MagicField *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<MagicField *>,MagicField *>Vtbl *)&NiTListBase<DFALL<MagicField__>_MagicField__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C0EEC: using guessed type int (__thiscall *NiTListBase_DFALL_MagicField ___MagicField _____vftable_)(void *p, char);

//----- (00618F30) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>(NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *> *this)
{
  this->vfptr = (NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *>Vtbl *)&NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_;
}
// 9C0EFC: using guessed type int (__thiscall *NiTListBase_DFALL_IEffectDestroyMessenger ___IEffectDestroyMessenger _____vftable_)(void *p, char);

//----- (00618F40) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vector_deleting_destructor_(NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *>Vtbl *)&NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C0EFC: using guessed type int (__thiscall *NiTListBase_DFALL_IEffectDestroyMessenger ___IEffectDestroyMessenger _____vftable_)(void *p, char);

//----- (00618F70) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<MagicField__>_MagicField__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<MagicField *>,MagicField *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MagicField *> *v3; // esi@1
  NiTListItem<MagicField *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<MagicField *>,MagicField *>Vtbl *)&NiTPointerListBase<DFALL<MagicField__>_MagicField__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<MagicField__>_MagicField__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0EEC: using guessed type int (__thiscall *NiTListBase_DFALL_MagicField ___MagicField _____vftable_)(void *p, char);
// 9C0F1C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_MagicField ___MagicField _____vftable_)(void *p, char);

//----- (00619000) --------------------------------------------------------
void __thiscall IEffectDestroyMessenger::_IEffectDestroyMessenger(IEffectDestroyMessenger *this)
{
  char *v1; // edi@1
  NiTListItem<IEffectDestroyMessenger *> *v2; // esi@1
  NiTListItem<IEffectDestroyMessenger *> *v3; // ST00_4@2

  v1 = (char *)&this->m_pkEffectDestoryMessengerList;
  this->vfptr = (IEffectDestroyMessengerVtbl *)&IEffectDestroyMessenger::_vftable_;
  this->m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *>Vtbl *)&NiTPointerListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_;
  v2 = this->m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v1 + 8))(v1, v3);
  }
  *((_DWORD *)v1 + 3) = 0;
  *((_DWORD *)v1 + 1) = 0;
  *((_DWORD *)v1 + 2) = 0;
  *(_DWORD *)v1 = &NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_;
}
// 9C0EFC: using guessed type int (__thiscall *NiTListBase_DFALL_IEffectDestroyMessenger ___IEffectDestroyMessenger _____vftable_)(void *p, char);
// 9C0F0C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_IEffectDestroyMessenger ___IEffectDestroyMessenger _____vftable_)(void *p, char);
// 9C0F3C: using guessed type int (__thiscall *IEffectDestroyMessenger___vftable_)(void *p, char);

//----- (00619080) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vector_deleting_destructor_(NiTList<IEffectDestroyMessenger *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<IEffectDestroyMessenger *> *v3; // esi@1
  NiTListItem<IEffectDestroyMessenger *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *>Vtbl *)&NiTPointerListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<IEffectDestroyMessenger__>_IEffectDestroyMessenger__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0EFC: using guessed type int (__thiscall *NiTListBase_DFALL_IEffectDestroyMessenger ___IEffectDestroyMessenger _____vftable_)(void *p, char);
// 9C0F0C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_IEffectDestroyMessenger ___IEffectDestroyMessenger _____vftable_)(void *p, char);

//----- (00619110) --------------------------------------------------------
void *__thiscall MagicField::_vector_deleting_destructor_(MagicField *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (IEffectDestroyMessengerVtbl *)&MagicField::_vftable_;
  this->m_pkFirstEffect = 0;
  this->m_pkLoopingEffect = 0;
  this->m_pkLastEffect = 0;
  IEffectDestroyMessenger::_IEffectDestroyMessenger(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0F60: using guessed type int (__thiscall *MagicField___vftable_)(void *p, char);

//----- (00619160) --------------------------------------------------------
void __thiscall MapNavigator::MapNavigator(MapNavigator *this)
{
  MapNavigator *v1; // esi@1

  v1 = this;
  NiObject::NiObject(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MapNavigator::_vftable_;
  CWayPoint::CWayPoint(&v1->m_WayPoint);
  v1->m_kMobID = -1;
  v1->m_bIsWorking = 0;
  v1->m_pTargetDot = 0;
  v1->m_bEnableAutoWay = 0;
  *(_DWORD *)&v1->m_acRememberDestMap.n3_name[8] = 0;
  *(_DWORD *)&v1->m_acRememberDestMap.n3_name[4] = 0;
  *(_DWORD *)&v1->m_acRememberDestMap.n3_name[0] = 0;
  strncpy(v1->m_acRememberDestMap.n3_name, &byte_9C0F70, 0xCu);
}
// 9C0F7C: using guessed type int (__thiscall *MapNavigator___vftable_)(void *p, char);

//----- (006191F0) --------------------------------------------------------
void __thiscall MapNavigator::_MapNavigator(MapNavigator *this)
{
  MapNavigator *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MapNavigator::_vftable_;
  CWayPoint::_CWayPoint(&this->m_WayPoint);
  NiRefObject::_NiRefObject((CPostProcessEffect *)v1);
}
// 9C0F7C: using guessed type int (__thiscall *MapNavigator___vftable_)(void *p, char);

//----- (00619250) --------------------------------------------------------
LONG __cdecl MapNavigator::Create()
{
  LONG result; // eax@1
  void *v1; // eax@2
  int v2; // eax@3
  int v3; // esi@3
  int v4; // edi@7
  int v5; // [sp+4h] [bp-Ch]@1
  int v6; // [sp+Ch] [bp-4h]@2

  result = (LONG)&v5;
  if ( !MapNavigator::ms_spMapNavigatorTask )
  {
    v1 = operator new(0x68u);
    v6 = 0;
    if ( v1 )
    {
      MapNavigator::MapNavigator((MapNavigator *)v1);
      v3 = v2;
    }
    else
    {
      v3 = 0;
    }
    result = MapNavigator::ms_spMapNavigatorTask;
    v6 = -1;
    if ( MapNavigator::ms_spMapNavigatorTask != v3 )
    {
      if ( MapNavigator::ms_spMapNavigatorTask )
      {
        v4 = MapNavigator::ms_spMapNavigatorTask;
        result = InterlockedDecrement((volatile LONG *)(MapNavigator::ms_spMapNavigatorTask + 4));
        if ( !result )
        {
          if ( v4 )
            result = (**(int (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        }
      }
      MapNavigator::ms_spMapNavigatorTask = v3;
      if ( v3 )
        result = InterlockedIncrement((volatile LONG *)(v3 + 4));
    }
  }
  return result;
}
// A9B130: using guessed type int MapNavigator__ms_spMapNavigatorTask;

//----- (00619300) --------------------------------------------------------
void __cdecl MapNavigator::Terminate()
{
  int v0; // esi@1

  v0 = MapNavigator::ms_spMapNavigatorTask;
  if ( MapNavigator::ms_spMapNavigatorTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(MapNavigator::ms_spMapNavigatorTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    MapNavigator::ms_spMapNavigatorTask = 0;
  }
}
// A9B130: using guessed type int MapNavigator__ms_spMapNavigatorTask;

//----- (00619340) --------------------------------------------------------
bool __thiscall MapNavigator::Init(MapNavigator *this)
{
  int v1; // eax@1
  MapNavigator *v2; // ebx@1
  int v3; // eax@2
  int v4; // ecx@4
  int v5; // ecx@5
  CWayPoint *v6; // ebx@7
  unsigned int v7; // edi@7
  void *v8; // eax@8
  int *v9; // esi@8
  int v10; // ecx@9
  int v11; // edx@9
  MapViewInfo *v12; // eax@9
  unsigned int v13; // esi@12
  void *v14; // eax@13
  unsigned int v15; // esi@15
  void *v16; // eax@16
  MapNavigator *v18; // [sp+Ch] [bp-18h]@1
  char acstr[13]; // [sp+10h] [bp-14h]@9
  unsigned int v20; // [sp+20h] [bp-4h]@1
  int v21; // [sp+24h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 56);
  v2 = this;
  v18 = this;
  if ( v1 )
    v3 = *(_DWORD *)(v1 + 40);
  else
    v3 = 0;
  v4 = *(_DWORD *)(ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable + 56);
  if ( v4 )
    v5 = *(_DWORD *)(v4 + 40);
  else
    v5 = 0;
  v6 = &v2->m_WayPoint;
  CWayPoint::Init(v6, v5, v3, 4);
  v7 = 0;
  if ( (signed int)ITableBase<MapInfo_MapInfoTab>::GetTotal() > 0 )
  {
    do
    {
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 4), v7);
      v9 = (int *)v8;
      if ( v8 )
      {
        v10 = *(_DWORD *)((char *)v8 + 6);
        *(_DWORD *)acstr = *(_DWORD *)((char *)v8 + 2);
        v11 = *(_DWORD *)((char *)v8 + 10);
        *(_DWORD *)&acstr[4] = v10;
        *(_DWORD *)&acstr[8] = v11;
        acstr[12] = 0;
        v12 = MapViewInfoTab::GetByMapName((Name3 *)((char *)v8 + 2));
        if ( !v12 )
          goto LABEL_19;
        CWayPoint::Add_Map(v6, acstr, *(_WORD *)v9, v12->MWP_IsMove);
      }
      ++v7;
    }
    while ( (signed int)v7 < (signed int)ITableBase<MapInfo_MapInfoTab>::GetTotal() );
  }
  v13 = 0;
  if ( (signed int)MapWayPointTab::GetTotal() <= 0 )
  {
LABEL_15:
    v15 = 0;
    if ( (signed int)MapLinkPointTab::GetTotal() <= 0 )
    {
LABEL_18:
      v18->m_bInitialFinished = 1;
      v18->m_bEnableAutoWay = User::Lv(&g_kUser) <= 0x3C;
      return 1;
    }
    while ( 1 )
    {
      v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable + 4), v15);
      if ( !v16 )
        break;
      CWayPoint::Add_Link(
        v6,
        *(_DWORD *)v16,
        *((_DWORD *)v16 + 1),
        (LINK_TYPE)*((_WORD *)v16 + 6),
        *((_DWORD *)v16 + 2));
      ++v15;
      if ( (signed int)v15 >= (signed int)MapLinkPointTab::GetTotal() )
        goto LABEL_18;
    }
  }
  else
  {
    while ( 1 )
    {
      v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable + 4), v13);
      if ( !v14 )
        break;
      CWayPoint::Add_Dot(
        v6,
        *(_WORD *)v14,
        *(_DWORD *)((char *)v14 + 2),
        *(_DWORD *)((char *)v14 + 6),
        (DOT_TYPE)*((_BYTE *)v14 + 10));
      ++v13;
      if ( (signed int)v13 >= (signed int)MapWayPointTab::GetTotal() )
        goto LABEL_15;
    }
  }
LABEL_19:
  v18->m_bInitialFinished = 0;
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;
// A97EA0: using guessed type int ITableBase_MapWayPoint_MapWayPointTab___ms_pkTable;
// A97EA4: using guessed type int ITableBase_MapLinkPoint_MapLinkPointTab___ms_pkTable;

//----- (006194D0) --------------------------------------------------------
void __thiscall MapNavigator::Arrive(MapNavigator *this, NiPoint3 *kPos)
{
  MapNavigator *v2; // esi@1
  PgFrameWork *v3; // eax@1
  GTInformWin *v4; // edi@2
  unsigned __int16 v5; // ax@3
  D3DXCOLOR v6; // ST08_16@5
  char *v7; // eax@5
  char *v8; // eax@5
  double v9; // st6@6
  double v10; // st5@6
  double v11; // st6@6
  double v12; // st7@6
  NiPoint3 CurPos; // [sp+Ch] [bp-24h]@6
  float v14; // [sp+18h] [bp-18h]@6
  float v15; // [sp+1Ch] [bp-14h]@6
  float v16; // [sp+20h] [bp-10h]@6
  NiPoint3 V1; // [sp+24h] [bp-Ch]@6

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
  {
    v4 = (GTInformWin *)v3[33].m_kMsgQ.m_uiHead;
    if ( v4 )
    {
      GTInformWin::Clear((GTInformWin *)v3[33].m_kMsgQ.m_uiHead);
      v5 = v2->m_kMobID;
      if ( v5 != -1 )
      {
        if ( IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v5, 1) )
        {
          *(_QWORD *)&v6.r = *(_QWORD *)&Color::m_kDxGreenColor;
          *(_QWORD *)&v6.b = *(_QWORD *)&Color::m_kDxGreenColor.b;
          v7 = TextData2::Get(0x9F99D2D8u);
          v8 = fs(v7);
          GTInformWin::AddText(v4, v8, COERCE_D3DXCOLOR(v6.r), 0, 5.0);
        }
      }
    }
  }
  ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&CurPos);
  v14 = v2->m_kDestPos.x - CurPos.x;
  v9 = v2->m_kDestPos.y;
  V1.x = v14;
  v10 = v9 - CurPos.y;
  v11 = CurPos.y;
  v15 = v10;
  v16 = v2->m_kDestPos.z - CurPos.z;
  V1.x = v14 * 0.800000011920929;
  V1.y = v15 * 0.800000011920929;
  V1.z = 0.800000011920929 * v16;
  v12 = CurPos.z;
  v14 = CurPos.x + V1.x;
  kPos->x = v14;
  v15 = v11 + V1.y;
  kPos->y = v15;
  v16 = v12 + V1.z;
  kPos->z = v16;
  v2->m_bIsWorking = 0;
  v2->m_kMobID = -1;
  *(_DWORD *)&v2->m_acRememberDestMap.n3_name[8] = 0;
  *(_DWORD *)&v2->m_acRememberDestMap.n3_name[4] = 0;
  *(_DWORD *)&v2->m_acRememberDestMap.n3_name[0] = 0;
  strncpy(v2->m_acRememberDestMap.n3_name, byte_9C0F71, 0xCu);
}

//----- (00619650) --------------------------------------------------------
bool __thiscall MapNavigator::FindPathAway(MapNavigator *this, NiPoint3 *kCurPos, NiPoint3 *kDest, char *pMapName, char *pDestMap, unsigned __int16 kMobID)
{
  MapNavigator *v6; // esi@1
  PgFrameWork *v7; // eax@1
  GTInformWin *v8; // ebx@2
  char v9; // al@5
  MapViewInfo *v10; // eax@7
  D3DXCOLOR *v11; // eax@9
  D3DXCOLOR v12; // ST04_16@9
  char *v13; // eax@9
  int v14; // ebx@10
  double v15; // st7@10
  char *v16; // ST18_4@12
  int v17; // eax@14
  NiPoint3 *v18; // eax@14
  int v19; // edx@14
  bool v20; // al@15
  D3DXCOLOR *v21; // eax@17
  D3DXCOLOR v22; // ST04_16@17
  char *v23; // eax@17
  NiPoint3 *v24; // eax@20
  GTInformWin *v25; // ecx@22
  GTInformWin *pkWin; // [sp+14h] [bp-2Ch]@2
  int *kCurDot; // [sp+18h] [bp-28h]@10
  int *kDestDot; // [sp+1Ch] [bp-24h]@11
  char *nm; // [sp+20h] [bp-20h]@1
  NiPoint3 *v30; // [sp+24h] [bp-1Ch]@1
  CWayPoint *thisa; // [sp+28h] [bp-18h]@10
  D3DXCOLOR result; // [sp+2Ch] [bp-14h]@7
  unsigned int v33; // [sp+3Ch] [bp-4h]@1
  int v34; // [sp+40h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v6 = this;
  v30 = kDest;
  nm = pDestMap;
  v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v7 || (v8 = (GTInformWin *)v7[33].m_kMsgQ.m_uiHead, (pkWin = v8) == 0) )
    return 0;
  if ( !v6->m_bInitialFinished || !v6->m_bEnableAutoWay || (v9 = g_pkMainChar->m_byMode, v9 == 4) || v9 == 5 )
  {
    v25 = v8;
    goto LABEL_24;
  }
  Name3::Name3((Name3 *)&result.g, pMapName);
  v10 = MapViewInfoTab::GetByMapName((Name3 *)&result.g);
  if ( v10 && v10->MWP_IsMove == 1 )
  {
    GTInformWin::Clear(v8);
    v11 = Color::GetDxColor(&result, -1, -112, 0, -1);
    *(_QWORD *)&v12.r = *(_QWORD *)&v11->r;
    *(_QWORD *)&v12.b = *(_QWORD *)&v11->b;
    v13 = TextData2::Get(0x8D898CA0u);
    GTInformWin::AddText(v8, v13, COERCE_D3DXCOLOR(v12.r), 0, 3.0);
    return 0;
  }
  v14 = (int)&v6->m_pTargetDot;
  v6->m_kMobID = -1;
  v6->m_pTargetDot = 0;
  v6->m_eDotState = 0;
  v15 = kCurPos->y;
  thisa = &v6->m_WayPoint;
  if ( !CWayPoint::Get_NearDot(&v6->m_WayPoint, pMapName, (signed int)kCurPos->x, (signed int)v15, (MAP_DOT **)&kCurDot)
    || !CWayPoint::Get_NearDot(thisa, nm, (signed int)v30->x, (signed int)v30->y, (MAP_DOT **)&kDestDot) )
  {
    v25 = pkWin;
LABEL_24:
    GTInformWin::Clear(v25);
    return 0;
  }
  v16 = nm;
  v6->m_kMobID = kMobID;
  Name3::operator_(&v6->m_acRememberDestMap, v16);
  if ( !CWayPoint::Get_BFS_NextDot(thisa, *kCurDot, *kDestDot, &v6->m_pTargetDot) )
  {
    if ( kCurDot == kDestDot )
    {
      v6->m_kStartPos.x = kCurPos->x;
      v6->m_kStartPos.y = kCurPos->y;
      v24 = v30;
      v6->m_kStartPos.z = kCurPos->z;
      v6->m_kDestPos.x = v24->x;
      v6->m_kDestPos.y = v24->y;
      v6->m_kDestPos.z = v24->z;
      MapNavigator::Arrive(v6, (NiPoint3 *)&result.g);
      g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
      MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
      MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, (NiPoint3 *)&result.g);
      MainChar::StartMoveTarget((MainChar *)g_pkMainChar);
    }
    return 1;
  }
  if ( *(_DWORD *)v14 )
  {
    CWayPoint::Get_BFS_NextDot(thisa, *kCurDot, *kDestDot, &v6->m_pTargetDot);
    v17 = *(_DWORD *)v14;
    *(float *)&nm = (double)*(signed int *)(*(_DWORD *)v14 + 12);
    result.g = (double)*(signed int *)(v17 + 8);
    result.b = *(float *)&nm;
    result.a = 0.0;
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
    MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
    MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, (NiPoint3 *)&result.g);
    MainChar::StartMoveTarget((MainChar *)g_pkMainChar);
    v6->m_bIsWorking = 1;
    dword_B30C38->m_uFlags |= 1u;
    v6->m_kStartPos.x = kCurPos->x;
    v6->m_kStartPos.y = kCurPos->y;
    v6->m_kStartPos.z = kCurPos->z;
    v18 = v30;
    v6->m_kDestPos.x = v30->x;
    v6->m_kDestPos.y = v18->y;
    v19 = *(_DWORD *)v14;
    v6->m_kDestPos.z = v18->z;
    if ( *(_DWORD *)(v19 + 16) == 2 )
    {
      v6->m_eDotState = 1;
      return 1;
    }
    return 1;
  }
  if ( CWayPoint::Get_LastError(thisa) == 100 )
  {
    GTInformWin::Clear(pkWin);
    v21 = Color::GetDxColor(&result, -1, -112, 0, -1);
    *(_QWORD *)&v22.r = *(_QWORD *)&v21->r;
    *(_QWORD *)&v22.b = *(_QWORD *)&v21->b;
    v23 = TextData2::Get(0xACB7C7Cu);
    GTInformWin::AddText(pkWin, v23, COERCE_D3DXCOLOR(v22.r), 0, 3.0);
    v20 = 1;
  }
  else
  {
    GTInformWin::Clear(pkWin);
    v20 = 1;
  }
  return v20;
}
// A85C00: using guessed type int __security_cookie;

//----- (00619A20) --------------------------------------------------------
void __thiscall MapNavigator::OnIdle(MapNavigator *this, float fTime)
{
  MapNavigator *v2; // ebx@1
  bool v3; // zf@8
  int v4; // edi@8
  PgFrameWork *v5; // eax@12
  GTInformWin *v6; // esi@13
  D3DXCOLOR *v7; // eax@14
  D3DXCOLOR v8; // ST08_16@14
  char *v9; // eax@14
  int v10; // eax@16
  void (__thiscall *v11)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@16
  MapNavigator::DOT_STATE v12; // esi@16
  Name3 *v13; // eax@18
  unsigned int v14; // eax@19
  MobCoordinate *v15; // eax@19
  MobCoordinate *v16; // esi@19
  unsigned int v17; // eax@20
  double v18; // st7@20
  void (__thiscall *v19)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@22
  Name3 *v20; // eax@22
  int v21; // ecx@22
  float v22; // eax@22
  int v23; // edx@22
  unsigned __int16 v24; // ST1C_2@22
  int v25; // eax@22
  int v26; // edi@23
  double v27; // st7@23
  NiPoint3 *v28; // edx@25
  int v29; // edi@30
  int v30; // edi@30
  MapViewInfo *v31; // eax@31
  PgFrameWork *v32; // eax@35
  GTInformWin *v33; // esi@36
  unsigned __int16 v34; // ax@37
  D3DXCOLOR v35; // ST08_16@39
  char *v36; // eax@39
  char *v37; // eax@39
  double v38; // st7@40
  double v39; // st7@40
  AbStateInfecteeVtbl *v40; // edx@43
  void (__thiscall *v41)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@43
  float v42; // esi@43
  Char *v43; // edi@44
  signed int v44; // eax@47
  Char *v45; // eax@50
  PgFrameWork *v46; // eax@51
  const void *v47; // edi@55
  double v48; // st7@56
  const void *v49; // edi@57
  double v50; // st7@58
  const void *v51; // edi@63
  double v52; // st7@64
  NiPoint3 *v53; // [sp+4h] [bp-1A8h]@61
  char v54; // [sp+14h] [bp-198h]@30
  int v55; // [sp+18h] [bp-194h]@31
  int v56; // [sp+1Ch] [bp-190h]@40
  int v57; // [sp+20h] [bp-18Ch]@40
  NiPoint3 kCurPos; // [sp+40h] [bp-16Ch]@22
  NiPoint3 kPos; // [sp+4Ch] [bp-160h]@16
  int v60; // [sp+58h] [bp-154h]@46
  signed int hMob; // [sp+5Ch] [bp-150h]@26
  Name3 result; // [sp+60h] [bp-14Ch]@20
  int fMinLength; // [sp+6Ch] [bp-140h]@8
  NiPoint3 kTargetPos; // [sp+70h] [bp-13Ch]@16
  NiPoint3 kNewPos; // [sp+7Ch] [bp-130h]@18
  char strMapName[256]; // [sp+88h] [bp-124h]@31
  D3DXCOLOR acMapName; // [sp+188h] [bp-24h]@14
  char acDestMapName[13]; // [sp+198h] [bp-14h]@22
  unsigned int v69; // [sp+1A8h] [bp-4h]@1
  int v70; // [sp+1ACh] [bp+0h]@1

  v69 = (unsigned int)&v70 ^ __security_cookie;
  v2 = this;
  if ( this->m_bInitialFinished )
  {
    if ( ChargedItemList::IsEffecting(EE_AUTOPATHFIND) == 1 )
      v2->m_bEnableAutoWay = 1;
    if ( v2->m_bEnableAutoWay && !ChargedItemList::IsEffecting(EE_AUTOPATHFIND) )
      v2->m_bEnableAutoWay = User::Lv(&g_kUser) <= 0x3C;
    if ( v2->m_bIsWorking )
    {
      v3 = v2->m_pTargetDot == 0;
      v4 = (int)&v2->m_pTargetDot;
      fMinLength = (int)&v2->m_pTargetDot;
      if ( !v3 )
      {
        if ( Char::IsActProducing(g_pkMainChar)
          || Char::IsActGathering(g_pkMainChar)
          || Char::IsActItemCasting(g_pkMainChar) )
        {
          v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v5 )
          {
            v6 = (GTInformWin *)v5[33].m_kMsgQ.m_uiHead;
            if ( v6 )
            {
              GTInformWin::Clear((GTInformWin *)v5[33].m_kMsgQ.m_uiHead);
              v7 = Color::GetDxColor(&acMapName, -1, -112, 0, -1);
              *(_QWORD *)&v8.r = *(_QWORD *)&v7->r;
              *(_QWORD *)&v8.b = *(_QWORD *)&v7->b;
              v9 = TextData2::Get(0x3C517589u);
              GTInformWin::AddText(v6, v9, COERCE_D3DXCOLOR(v8.r), 0, 3.0);
            }
          }
          v2->m_bIsWorking = 0;
        }
        v10 = *(_DWORD *)v4;
        v11 = g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty;
        kTargetPos.x = (double)*(signed int *)(*(_DWORD *)v4 + 8);
        kTargetPos.y = (double)*(signed int *)(v10 + 12);
        ((void (__stdcall *)(NiPoint3 *))v11)(&kPos);
        v12 = v2->m_eDotState;
        kPos.x = kPos.x - kTargetPos.x;
        kPos.y = kPos.y - kTargetPos.y;
        kPos.z = 0.0 - 0.0;
        if ( v12 == 3 )
        {
          v3 = *(_DWORD *)v4 == 0;
          v2->m_eDotState = 0;
          if ( v3 )
          {
            MapNavigator::Arrive(v2, &kTargetPos);
          }
          else
          {
            v13 = World::GetMapName(&g_kWorld, (Name3 *)&kNewPos);
            if ( Name3::operator__(&v2->m_acRememberDestMap, v13) )
            {
              v14 = MobCoordinateTab::GetRecordNum(v2->m_kMobID);
              v15 = ITableBase<MobCoordinate_MobCoordinateTab>::GetByIndex(v14);
              v16 = v15;
              if ( v15 )
              {
                v17 = v15->CenterY;
                *(float *)&result.n3_name[0] = (double)v16->CenterX;
                v18 = (double)(signed int)v16->CenterY;
                if ( (v17 & 0x80000000u) != 0 )
                  v18 = v18 + 4294967300.0;
                *(float *)&result.n3_name[4] = v18;
                *(float *)&result.n3_name[8] = 0.0;
                *(_QWORD *)&kCurPos.x = *(_QWORD *)&result;
                v19 = g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty;
                kCurPos.z = 0.0;
                ((void (__stdcall *)(NiPoint3 *))v19)(&kNewPos);
                v20 = World::GetMapName(&g_kWorld, &result);
                LODWORD(acMapName.r) = *(_DWORD *)&v20->n3_name[0];
                v21 = *(_DWORD *)&v16->MapName.n3_name[0];
                LODWORD(acMapName.g) = *(_DWORD *)&v20->n3_name[4];
                LODWORD(v22) = *(_DWORD *)&v20->n3_name[8];
                v23 = *(_DWORD *)&v16->MapName.n3_name[4];
                *(_DWORD *)acDestMapName = v21;
                v24 = v2->m_kMobID;
                acMapName.b = v22;
                v25 = *(_DWORD *)&v16->MapName.n3_name[8];
                *(_DWORD *)&acDestMapName[4] = v23;
                *(_DWORD *)&acDestMapName[8] = v25;
                LOBYTE(acMapName.a) = 0;
                acDestMapName[12] = 0;
                MapNavigator::FindPathAway(v2, &kNewPos, &kCurPos, (char *)&acMapName, acDestMapName, v24);
                return;
              }
            }
            v26 = *(_DWORD *)v4;
            *(float *)&result.n3_name[0] = (double)*(signed int *)(v26 + 8);
            v27 = (double)*(signed int *)(v26 + 12);
            LODWORD(kTargetPos.x) = *(_DWORD *)&result;
            *(float *)&result.n3_name[4] = v27;
            LODWORD(kTargetPos.y) = *(_DWORD *)&result.n3_name[4];
            *(float *)&result.n3_name[8] = 0.0;
            kTargetPos.z = 0.0;
          }
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
          MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
          v28 = &kTargetPos;
        }
        else
        {
          *(float *)&hMob = kPos.z * kPos.z + kPos.x * kPos.x + kPos.y * kPos.y;
          *(float *)&hMob = sqrt(*(float *)&hMob);
          if ( *(float *)&hMob < 50.0 && v12 != 2 )
          {
            if ( v12 == 1 )
            {
              if ( *(_DWORD *)(*(_DWORD *)v4 + 16) == 2 )
              {
                memcpy(&v54, *(const void **)v4, 0x2Cu);
                v29 = fMinLength;
                CWayPoint::Get_BFS_NextDot(&v2->m_WayPoint, -1, -1, (MAP_DOT **)fMinLength);
                v30 = *(_DWORD *)v29;
                if ( v30 )
                {
                  strMapName[0] = 0;
                  memset(&strMapName[1], 0, 0xFFu);
                  CWayPoint::Get_MapName(&v2->m_WayPoint, *(_DWORD *)(v30 + 4), strMapName);
                  Name3::Name3((Name3 *)&kNewPos, strMapName);
                  v31 = MapViewInfoTab::GetByMapName((Name3 *)&kNewPos);
                  v4 = fMinLength;
                  if ( v55 == *(_DWORD *)(*(_DWORD *)fMinLength + 4) )
                  {
                    v2->m_eDotState = 0;
                  }
                  else
                  {
                    if ( v31 && v31->MWP_IsMove == 1 )
                    {
                      v2->m_eDotState = 0;
                      v32 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                      if ( v32 )
                      {
                        v33 = (GTInformWin *)v32[33].m_kMsgQ.m_uiHead;
                        if ( v33 )
                        {
                          GTInformWin::Clear((GTInformWin *)v32[33].m_kMsgQ.m_uiHead);
                          v34 = v2->m_kMobID;
                          if ( v34 != -1 )
                          {
                            if ( IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(v34, 1) )
                            {
                              *(_QWORD *)&v35.r = *(_QWORD *)&Color::m_kDxGreenColor;
                              *(_QWORD *)&v35.b = *(_QWORD *)&Color::m_kDxGreenColor.b;
                              v36 = TextData2::Get(0xDCEAC7E9u);
                              v37 = fs(v36);
                              GTInformWin::AddText(v33, v37, COERCE_D3DXCOLOR(v35.r), 0, 5.0);
                            }
                          }
                        }
                      }
                      v38 = (double)v56;
                      *(_DWORD *)v4 = 0;
                      v2->m_bIsWorking = 0;
                      kTargetPos.x = v38;
                      v39 = (double)v57;
                      *(_DWORD *)&result.n3_name[0] = (_DWORD)kTargetPos.x;
                      v2->m_kMobID = -1;
                      kTargetPos.y = v39;
                      *(_DWORD *)&result.n3_name[4] = LODWORD(kTargetPos.y);
                      kTargetPos.z = 0.0;
                      *(float *)&result.n3_name[8] = 0.0;
                    }
                  }
                }
                else
                {
                  v2->m_eDotState = 0;
                  MapNavigator::Arrive(v2, (NiPoint3 *)&result);
                  v4 = fMinLength;
                }
              }
              if ( v2->m_eDotState )
              {
                v40 = g_pkMainChar->baseclass_0.vfptr;
                *(float *)&fMinLength = 9999.0;
                v41 = v40[6].SetAbStateProperty;
                hMob = 65535;
                ((void (__stdcall *)(NiPoint3 *))v41)(&kCurPos);
                v42 = ::fTime;
                if ( LODWORD(::fTime) )
                {
                  do
                  {
                    v43 = *(Char **)(LODWORD(v42) + 8);
                    LODWORD(v42) = *LODWORD(v42);
                    if ( v43 )
                    {
                      if ( Char::IsLinkGate(v43) )
                      {
                        ((void (__thiscall *)(Char *, NiPoint3 *))v43->baseclass_0.vfptr[6].SetAbStateProperty)(
                          v43,
                          &kTargetPos);
                        kNewPos.x = kCurPos.x - kTargetPos.x;
                        kNewPos.y = kCurPos.y - kTargetPos.y;
                        kNewPos.z = kCurPos.z - kTargetPos.z;
                        *(float *)&v60 = NiPoint3::Length(&kNewPos);
                        if ( *(float *)&v60 < (double)*(float *)&fMinLength )
                        {
                          v44 = v43->m_kHandle;
                          fMinLength = v60;
                          hMob = v44;
                        }
                      }
                    }
                  }
                  while ( LODWORD(v42) );
                  if ( (_WORD)hMob != -1 )
                  {
                    v45 = CharMgr::GetChar(&g_kCharMgr, hMob);
                    ((void (__thiscall *)(Char *, Name3 *))v45->baseclass_0.vfptr[6].SetAbStateProperty)(v45, &result);
                  }
                }
                v46 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                if ( v46 )
                {
                  GameFrameWork::NcActAutoWayFindingUseGateReq((GameFrameWork *)v46);
                  if ( v2->m_bIsWorking )
                  {
                    if ( v2->m_eDotState == 1 )
                      v2->m_eDotState = 2;
                  }
                }
              }
              else
              {
                v47 = *(const void **)v4;
                if ( v47 )
                {
                  kTargetPos.x = (double)*((signed int *)v47 + 2);
                  v48 = (double)*((signed int *)v47 + 3);
                  *(_DWORD *)&result.n3_name[0] = (_DWORD)kTargetPos.x;
                  kTargetPos.y = v48;
                  *(_DWORD *)&result.n3_name[4] = LODWORD(kTargetPos.y);
                  kTargetPos.z = 0.0;
                  *(float *)&result.n3_name[8] = 0.0;
                }
              }
            }
            else
            {
              CWayPoint::Get_BFS_NextDot(&v2->m_WayPoint, -1, -1, &v2->m_pTargetDot);
              v49 = *(const void **)v4;
              v2->m_eDotState = 0;
              if ( v49 )
              {
                kTargetPos.x = (double)*((signed int *)v49 + 2);
                v50 = (double)*((signed int *)v49 + 3);
                *(_DWORD *)&result.n3_name[0] = (_DWORD)kTargetPos.x;
                kTargetPos.y = v50;
                *(_DWORD *)&result.n3_name[4] = LODWORD(kTargetPos.y);
                kTargetPos.z = 0.0;
                *(float *)&result.n3_name[8] = 0.0;
                if ( *((_DWORD *)v49 + 4) == 2 )
                  v2->m_eDotState = 1;
              }
              else
              {
                MapNavigator::Arrive(v2, (NiPoint3 *)&result);
              }
            }
            g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
            MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
            v53 = (NiPoint3 *)&result;
            goto LABEL_66;
          }
          if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)()
            || (v51 = *(const void **)v4) == 0 )
            return;
          kTargetPos.x = (double)*((signed int *)v51 + 2);
          v52 = (double)*((signed int *)v51 + 3);
          LODWORD(kNewPos.x) = (_DWORD)kTargetPos.x;
          kTargetPos.y = v52;
          kNewPos.y = kTargetPos.y;
          kTargetPos.z = 0.0;
          kNewPos.z = 0.0;
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
          MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
          v28 = &kNewPos;
        }
        v53 = v28;
LABEL_66:
        MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, v53);
        MainChar::StartMoveTarget((MainChar *)g_pkMainChar);
        return;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0061A280) --------------------------------------------------------
NiRTTI *__thiscall NiObject::GetRTTI(NiObject *this)
{
  return &NiObject::m_RTTI;
}

//----- (0061A290) --------------------------------------------------------
unsigned int __cdecl MapWayPointTab::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MapWayPoint_MapWayPointTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97EA0: using guessed type int ITableBase_MapWayPoint_MapWayPointTab___ms_pkTable;

//----- (0061A2B0) --------------------------------------------------------
unsigned int __cdecl MapLinkPointTab::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MapLinkPoint_MapLinkPointTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97EA4: using guessed type int ITableBase_MapLinkPoint_MapLinkPointTab___ms_pkTable;

//----- (0061A2D0) --------------------------------------------------------
void *__thiscall MapNavigator::_scalar_deleting_destructor_(MapNavigator *this, unsigned int a2)
{
  MapNavigator *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MapNavigator::_vftable_;
  CWayPoint::_CWayPoint(&this->m_WayPoint);
  NiRefObject::_NiRefObject((CPostProcessEffect *)v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0F7C: using guessed type int (__thiscall *MapNavigator___vftable_)(void *p, char);

//----- (0061A340) --------------------------------------------------------
int __cdecl Market::Clear()
{
  int result; // eax@1

  result = 0;
  Market::ms_uiTotalWeapon = 0;
  Market::ms_uiTotalArmor = 0;
  Market::ms_uiTotalAcc = 0;
  Market::ms_uiTotalRepurchase = 0;
  Market::ms_uiTotalFigPassiveSkill = 0;
  Market::ms_uiTotalClePassiveSkill = 0;
  Market::ms_uiTotalArcPassiveSkill = 0;
  Market::ms_uiTotalMagPassiveSkill = 0;
  Market::ms_uiTotalJokPassiveSkill = 0;
  Market::ms_uiTotalFigActiveSkill = 0;
  Market::ms_uiTotalCleActiveSkill = 0;
  Market::ms_uiTotalArcActiveSkill = 0;
  Market::ms_uiTotalMagActiveSkill = 0;
  Market::ms_uiTotalJokActiveSkill = 0;
  Market::ms_uiTotalProdSkill = 0;
  Market::ms_uiTotalEnchantItem = 0;
  Market::ms_uiTotalWeapontitleItem = 0;
  Market::ms_uiTotalSenActiveSkill = 0;
  Market::ms_uiTotalSenPassiveSkill = 0;
  return result;
}
// A9B150: using guessed type int Market__ms_uiTotalWeapontitleItem;
// A9B154: using guessed type int Market__ms_uiTotalEnchantItem;
// A9B3B0: using guessed type int Market__ms_uiTotalProdSkill;
// A9B3B4: using guessed type int Market__ms_uiTotalSenActiveSkill;
// A9D488: using guessed type int Market__ms_uiTotalSenPassiveSkill;
// A9D48C: using guessed type int Market__ms_uiTotalJokActiveSkill;
// A9D490: using guessed type int Market__ms_uiTotalJokPassiveSkill;
// A9D494: using guessed type int Market__ms_uiTotalMagActiveSkill;
// A9D498: using guessed type int Market__ms_uiTotalMagPassiveSkill;
// A9D49C: using guessed type int Market__ms_uiTotalArcActiveSkill;
// A9D4A0: using guessed type int Market__ms_uiTotalArcPassiveSkill;
// A9D4A4: using guessed type int Market__ms_uiTotalCleActiveSkill;
// A9D4A8: using guessed type int Market__ms_uiTotalClePassiveSkill;
// A9D4AC: using guessed type int Market__ms_uiTotalFigActiveSkill;
// A9D4B0: using guessed type int Market__ms_uiTotalFigPassiveSkill;
// A9D4B4: using guessed type int Market__ms_uiTotalRepurchase;
// A9E200: using guessed type int Market__ms_uiTotalAcc;
// A9E204: using guessed type int Market__ms_uiTotalArmor;
// A9E208: using guessed type int Market__ms_uiTotalWeapon;

//----- (0061A3B0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetEnchantItem(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalEnchantItem )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akEnchantItems + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9B154: using guessed type int Market__ms_uiTotalEnchantItem;

//----- (0061A3D0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalEnchantItem()
{
  return Market::ms_uiTotalEnchantItem;
}
// A9B154: using guessed type int Market__ms_uiTotalEnchantItem;

//----- (0061A3E0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetWeapontitleItem(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalWeapontitleItem )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akWeapontitleItems + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9B150: using guessed type int Market__ms_uiTotalWeapontitleItem;

//----- (0061A400) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalWeapontitleItem()
{
  return Market::ms_uiTotalWeapontitleItem;
}
// A9B150: using guessed type int Market__ms_uiTotalWeapontitleItem;

//----- (0061A410) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalWeapon()
{
  return Market::ms_uiTotalWeapon;
}
// A9E208: using guessed type int Market__ms_uiTotalWeapon;

//----- (0061A420) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalArmor()
{
  return Market::ms_uiTotalArmor;
}
// A9E204: using guessed type int Market__ms_uiTotalArmor;

//----- (0061A430) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalAcc()
{
  return Market::ms_uiTotalAcc;
}
// A9E200: using guessed type int Market__ms_uiTotalAcc;

//----- (0061A440) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetWeaopn(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalWeapon )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akWeapon + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9E208: using guessed type int Market__ms_uiTotalWeapon;

//----- (0061A460) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetArmor(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalArmor )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akArmor + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9E204: using guessed type int Market__ms_uiTotalArmor;

//----- (0061A480) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetAcc(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalAcc )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akAcc + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9E200: using guessed type int Market__ms_uiTotalAcc;

//----- (0061A4A0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalRepurchase()
{
  return Market::ms_uiTotalRepurchase;
}
// A9D4B4: using guessed type int Market__ms_uiTotalRepurchase;

//----- (0061A4B0) --------------------------------------------------------
ItemRepurchase *__cdecl Market::GetRepurchase(unsigned int uiIndex)
{
  ItemRepurchase *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalRepurchase )
    result = (ItemRepurchase *)&Market::ms_akRepurchase[2 * uiIndex];
  else
    result = 0;
  return result;
}
// A9D4B4: using guessed type int Market__ms_uiTotalRepurchase;
// A9D4B8: using guessed type int Market__ms_akRepurchase[];

//----- (0061A4D0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetFigActSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalFigActiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akFigActSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D4AC: using guessed type int Market__ms_uiTotalFigActiveSkill;

//----- (0061A4F0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetCleActSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalCleActiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akCleActSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D4A4: using guessed type int Market__ms_uiTotalCleActiveSkill;

//----- (0061A510) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetArcActSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalArcActiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akArcActSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D49C: using guessed type int Market__ms_uiTotalArcActiveSkill;

//----- (0061A530) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetMagActSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalMagActiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akMagActSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D494: using guessed type int Market__ms_uiTotalMagActiveSkill;

//----- (0061A550) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetFigPasSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalFigPassiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akFigPasSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D4B0: using guessed type int Market__ms_uiTotalFigPassiveSkill;

//----- (0061A570) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetClePasSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalClePassiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akClePasSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D4A8: using guessed type int Market__ms_uiTotalClePassiveSkill;

//----- (0061A590) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetArcPasSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalArcPassiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akArcPasSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D4A0: using guessed type int Market__ms_uiTotalArcPassiveSkill;

//----- (0061A5B0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetMagPasSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalMagPassiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akMagPasSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D498: using guessed type int Market__ms_uiTotalMagPassiveSkill;

//----- (0061A5D0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetJokActSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalJokActiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akJokActSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D48C: using guessed type int Market__ms_uiTotalJokActiveSkill;

//----- (0061A5F0) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetJokPasSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalJokPassiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akJokPasSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D490: using guessed type int Market__ms_uiTotalJokPassiveSkill;

//----- (0061A610) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetSenActSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalSenActiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akSenActSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9B3B4: using guessed type int Market__ms_uiTotalSenActiveSkill;

//----- (0061A630) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetSenPasSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalSenPassiveSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akSenPasSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9D488: using guessed type int Market__ms_uiTotalSenPassiveSkill;

//----- (0061A670) --------------------------------------------------------
void __cdecl Market::SetRepurchaseItem(PROTO_NC_ITEM_SELL_ITEM_LIST_CMD *pkItemData, char *pbyItemDataStartAddress)
{
  unsigned int v2; // edi@1
  signed int v3; // eax@1
  unsigned int v4; // ebx@4
  char *v5; // esi@5
  Item *v6; // eax@6
  int v7; // ecx@6
  __int16 v8; // cx@7
  int uiBuffSize; // [sp+4h] [bp-4h]@4

  v2 = 0;
  Market::ms_uiTotalRepurchase = 0;
  v3 = (signed int)word_A9D4BC;
  do
  {
    *(_DWORD *)(v3 - 4) = 0;
    *(_WORD *)v3 = -1;
    v3 += 8;
  }
  while ( v3 < (signed int)&unk_A9D60C );
  if ( pkItemData )
  {
    v4 = pkItemData->NumOfSellItem;
    uiBuffSize = 0;
    if ( v4 )
    {
      v5 = (char *)&pkItemData[1];
      if ( v4 > 0 )
      {
        do
        {
          v6 = Item::Create(v5, (ITEM_INVEN *)&pkItemData, (unsigned int *)&uiBuffSize);
          v7 = (int)(v5 + 1);
          v5 += uiBuffSize;
          if ( v6 )
          {
            Market::ms_akRepurchase[2 * v2] = (int)v6;
            v8 = *(_BYTE *)v7;
            ++Market::ms_uiTotalRepurchase;
            word_A9D4BC[4 * v2] = v8;
          }
          ++v2;
        }
        while ( v2 < v4 );
      }
    }
  }
}
// A9D4B4: using guessed type int Market__ms_uiTotalRepurchase;
// A9D4B8: using guessed type int Market__ms_akRepurchase[];
// A9D4BC: using guessed type __int16 word_A9D4BC[];

//----- (0061A6F0) --------------------------------------------------------
void __cdecl Market::DeleteRepurchase(unsigned int uiIndex)
{
  unsigned int v1; // ecx@2
  char *v2; // eax@3

  if ( Market::ms_akRepurchase[2 * uiIndex] )
  {
    v1 = Market::ms_uiTotalRepurchase - uiIndex;
    if ( Market::ms_uiTotalRepurchase != uiIndex )
    {
      v2 = (char *)&unk_A9D4C0 + 8 * uiIndex;
      do
      {
        *((_DWORD *)v2 - 2) = *(_DWORD *)v2;
        *((_WORD *)v2 - 2) = *((_WORD *)v2 + 2);
        *(_DWORD *)v2 = 0;
        *((_WORD *)v2 + 2) = -1;
        v2 += 8;
        --v1;
      }
      while ( v1 );
    }
    --Market::ms_uiTotalRepurchase;
  }
}
// A9D4B4: using guessed type int Market__ms_uiTotalRepurchase;
// A9D4B8: using guessed type int Market__ms_akRepurchase[];

//----- (0061A740) --------------------------------------------------------
ItemRepurchase *__cdecl Market::AddRepurchase(PROTO_NC_ITEM_SELL_ITEM_INSERT_CMD *pkRepurItem)
{
  int v1; // esi@1
  Item *v2; // eax@1
  unsigned __int16 v3; // cx@2

  v1 = Market::ms_uiTotalRepurchase;
  v2 = Item::Create(&pkRepurItem->ItemInfo);
  if ( v2 )
  {
    Market::ms_akRepurchase[2 * v1] = (int)v2;
    v3 = pkRepurItem->nHandle;
    ++Market::ms_uiTotalRepurchase;
    word_A9D4BC[4 * v1] = v3;
  }
  return (ItemRepurchase *)&Market::ms_akRepurchase[2 * v1];
}
// A9D4B4: using guessed type int Market__ms_uiTotalRepurchase;
// A9D4B8: using guessed type int Market__ms_akRepurchase[];
// A9D4BC: using guessed type __int16 word_A9D4BC[];

//----- (0061A790) --------------------------------------------------------
unsigned int __cdecl Market::FindRepurchase(unsigned __int16 nHandle)
{
  unsigned int result; // eax@1
  unsigned int v2; // ecx@1

  result = 0;
  v2 = 0;
  if ( Market::ms_uiTotalRepurchase )
  {
    while ( word_A9D4BC[4 * v2] != nHandle )
    {
      ++v2;
      if ( v2 >= Market::ms_uiTotalRepurchase )
        return result;
    }
    result = v2;
  }
  return result;
}
// A9D4B4: using guessed type int Market__ms_uiTotalRepurchase;
// A9D4BC: using guessed type __int16 word_A9D4BC[];

//----- (0061A7C0) --------------------------------------------------------
void __cdecl Market::SetSoulStone(PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD *pkProto)
{
  Market::Clear();
  Market::ms_kSoulStone = pkProto->hp.recover;
  dword_A9B13C = pkProto->hp.maxnum;
  dword_A9B140 = pkProto->hp.price;
  dword_A9B144 = pkProto->sp.recover;
  dword_A9B148 = pkProto->sp.maxnum;
  dword_A9B14C = pkProto->sp.price;
}
// A9B138: using guessed type int Market__ms_kSoulStone;
// A9B13C: using guessed type int dword_A9B13C;
// A9B140: using guessed type int dword_A9B140;
// A9B144: using guessed type int dword_A9B144;
// A9B148: using guessed type int dword_A9B148;
// A9B14C: using guessed type int dword_A9B14C;

//----- (0061A810) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *__cdecl Market::GetHPSoulStoneInfo()
{
  return (PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *)&Market::ms_kSoulStone;
}
// A9B138: using guessed type int Market__ms_kSoulStone;

//----- (0061A820) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *__cdecl Market::GetSPSoulStoneInfo()
{
  return (PROTO_NC_MENU_SHOPOPENSOULSTONE_CMD::SOULSTONEMENU *)&dword_A9B144;
}
// A9B144: using guessed type int dword_A9B144;

//----- (0061A830) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalFigPassiveSkill()
{
  return Market::ms_uiTotalFigPassiveSkill;
}
// A9D4B0: using guessed type int Market__ms_uiTotalFigPassiveSkill;

//----- (0061A840) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalClePassiveSkill()
{
  return Market::ms_uiTotalClePassiveSkill;
}
// A9D4A8: using guessed type int Market__ms_uiTotalClePassiveSkill;

//----- (0061A850) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalArcPassiveSkill()
{
  return Market::ms_uiTotalArcPassiveSkill;
}
// A9D4A0: using guessed type int Market__ms_uiTotalArcPassiveSkill;

//----- (0061A860) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalMagPassiveSkill()
{
  return Market::ms_uiTotalMagPassiveSkill;
}
// A9D498: using guessed type int Market__ms_uiTotalMagPassiveSkill;

//----- (0061A870) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalFigActiveSkill()
{
  return Market::ms_uiTotalFigActiveSkill;
}
// A9D4AC: using guessed type int Market__ms_uiTotalFigActiveSkill;

//----- (0061A880) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalCleActiveSkill()
{
  return Market::ms_uiTotalCleActiveSkill;
}
// A9D4A4: using guessed type int Market__ms_uiTotalCleActiveSkill;

//----- (0061A890) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalArcActiveSkill()
{
  return Market::ms_uiTotalArcActiveSkill;
}
// A9D49C: using guessed type int Market__ms_uiTotalArcActiveSkill;

//----- (0061A8A0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalMagActiveSkill()
{
  return Market::ms_uiTotalMagActiveSkill;
}
// A9D494: using guessed type int Market__ms_uiTotalMagActiveSkill;

//----- (0061A8B0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalJokPassiveSkill()
{
  return Market::ms_uiTotalJokPassiveSkill;
}
// A9D490: using guessed type int Market__ms_uiTotalJokPassiveSkill;

//----- (0061A8C0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalJokActiveSkill()
{
  return Market::ms_uiTotalJokActiveSkill;
}
// A9D48C: using guessed type int Market__ms_uiTotalJokActiveSkill;

//----- (0061A8D0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalSenPassiveSkill()
{
  return Market::ms_uiTotalSenPassiveSkill;
}
// A9D488: using guessed type int Market__ms_uiTotalSenPassiveSkill;

//----- (0061A8E0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalSenActiveSkill()
{
  return Market::ms_uiTotalSenActiveSkill;
}
// A9B3B4: using guessed type int Market__ms_uiTotalSenActiveSkill;

//----- (0061A8F0) --------------------------------------------------------
unsigned int __cdecl Market::GetTotalProdSkill()
{
  return Market::ms_uiTotalProdSkill;
}
// A9B3B0: using guessed type int Market__ms_uiTotalProdSkill;

//----- (0061A900) --------------------------------------------------------
PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *__cdecl Market::GetProdSkill(unsigned int uiIndex)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *result; // eax@2

  if ( uiIndex < Market::ms_uiTotalProdSkill )
    result = (PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *)((char *)&Market::ms_akProdSkill + 3 * uiIndex);
  else
    result = 0;
  return result;
}
// A9B3B0: using guessed type int Market__ms_uiTotalProdSkill;

//----- (0061A920) --------------------------------------------------------
NiTList<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *__cdecl ItemMarket::GetItemSellInfoList()
{
  return (NiTList<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *)&ItemMarket::ms_kItemSellInfoList;
}
// A7E988: using guessed type int (__thiscall **ItemMarket__ms_kItemSellInfoList)(void *p, char);

//----- (0061A930) --------------------------------------------------------
void __cdecl Market::SetWeapon(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto)
{
  char *v1; // ebx@1
  int *v2; // esi@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD *v3; // edi@2
  int v4; // eax@4
  int v5; // eax@7
  bool v6; // zf@7
  int v7; // eax@7
  int v8; // eax@11
  int v9; // eax@18
  int v10; // eax@20
  int v11; // [sp+Ch] [bp-10h]@3
  unsigned __int16 v12; // [sp+10h] [bp-Ch]@3
  signed int i; // [sp+14h] [bp-8h]@1

  Market::Clear();
  v1 = 0;
  v2 = 0;
  i = 0;
  if ( pkProto->itemnum > 0u )
  {
    v3 = pkProto + 1;
    do
    {
      v12 = *(unsigned __int16 *)((char *)&v3->itemnum + 1);
      v11 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(*(unsigned __int16 *)((char *)&v3->itemnum + 1)) )
      {
        if ( v12 <= *(_WORD *)(v11 + 200) )
        {
          v5 = *(_DWORD *)(v11 + 196);
          v6 = *(_DWORD *)(v5 + 4 * v12) == 0;
          v7 = v5 + 4 * v12;
          if ( v6 )
            v4 = 0;
          else
            v4 = *(_DWORD *)v7;
        }
        else
        {
          v4 = 0;
        }
      }
      else
      {
        v4 = 0;
      }
      if ( !LOBYTE(v3->itemnum) )
      {
        v8 = *(_DWORD *)(v4 + 102);
        if ( v8 == 5 )
        {
          v1 = (char *)&Market::ms_akWeapon;
          v2 = &Market::ms_uiTotalWeapon;
        }
        else
        {
          if ( (unsigned int)(v8 - 6) > 2 )
          {
            v1 = (char *)&Market::ms_akAcc;
            v2 = &Market::ms_uiTotalAcc;
          }
          else
          {
            v1 = (char *)&Market::ms_akArmor;
            v2 = &Market::ms_uiTotalArmor;
          }
        }
      }
      if ( *v2 >= (unsigned int)LOBYTE(v3->itemnum) )
      {
LABEL_19:
        if ( (unsigned int)*v2 < 0xC8 )
        {
          v10 = (int)(&v1[2 * *v2] + *v2);
          *(_WORD *)v10 = v3->itemnum;
          *(_BYTE *)(v10 + 2) = LOBYTE(v3->npc);
          ++*v2;
        }
      }
      else
      {
        while ( (unsigned int)*v2 < 0xC8 )
        {
          v9 = (int)(&v1[2 * *v2] + *v2);
          *(_WORD *)v9 = -256;
          *(_BYTE *)(v9 + 2) = -1;
          ++*v2;
          if ( *v2 >= (unsigned int)LOBYTE(v3->itemnum) )
            goto LABEL_19;
        }
      }
      v3 = (PROTO_NC_MENU_SHOPOPENTABLE_CMD *)((char *)v3 + 3);
      ++i;
    }
    while ( i < pkProto->itemnum );
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A9E200: using guessed type int Market__ms_uiTotalAcc;
// A9E204: using guessed type int Market__ms_uiTotalArmor;
// A9E208: using guessed type int Market__ms_uiTotalWeapon;

//----- (0061AA70) --------------------------------------------------------
void __cdecl Market::SetItemEnchant(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto)
{
  PROTO_NC_MENU_SHOPOPENTABLE_CMD *v1; // edi@1
  signed int v2; // ebx@1
  int *v3; // esi@1
  char *v4; // edi@2
  char *v5; // eax@3
  int v6; // edi@6
  int v7; // ebx@7
  int v8; // eax@8
  int v9; // eax@11
  int v10; // eax@15
  char *v11; // edx@17
  int v12; // eax@22
  int v13; // eax@24
  unsigned __int16 v14; // [sp+Ch] [bp-10h]@7
  signed int i; // [sp+10h] [bp-Ch]@5
  char *pkCurrItemSellInfoTab; // [sp+14h] [bp-8h]@1

  Market::Clear();
  v1 = pkProto;
  v2 = 0;
  v3 = 0;
  pkCurrItemSellInfoTab = 0;
  if ( pkProto->itemnum > 0u )
  {
    v4 = (char *)&pkProto[1].itemnum + 1;
    do
    {
      v5 = fs("Sell ITem = %d. Index = %d\n");
      OutputDebugStringA(v5);
      ++v2;
      v4 += 3;
    }
    while ( v2 < pkProto->itemnum );
    v1 = pkProto;
  }
  i = 0;
  if ( v1->itemnum > 0u )
  {
    v6 = (int)&v1[1];
    while ( 1 )
    {
      v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v14 = *(_WORD *)(v6 + 1);
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(v6 + 1)) )
      {
        if ( v14 <= *(_WORD *)(v7 + 200) )
        {
          v9 = *(_DWORD *)(v7 + 196) + 4 * v14;
          if ( *(_DWORD *)v9 )
            v8 = *(_DWORD *)v9;
          else
            v8 = 0;
        }
        else
        {
          v8 = 0;
        }
      }
      else
      {
        v8 = 0;
      }
      if ( *(_BYTE *)v6 )
        goto LABEL_19;
      v10 = *(_DWORD *)(v8 + 102);
      if ( v10 == 16 )
        break;
      if ( v10 != 35 )
        goto LABEL_19;
      v11 = (char *)&Market::ms_akEnchantItems;
      pkCurrItemSellInfoTab = (char *)&Market::ms_akEnchantItems;
      v3 = &Market::ms_uiTotalEnchantItem;
LABEL_20:
      if ( *v3 >= (unsigned int)*(_BYTE *)v6 )
      {
LABEL_23:
        if ( (unsigned int)*v3 < 0xC8 )
        {
          v13 = (int)(&v11[2 * *v3] + *v3);
          *(_WORD *)v13 = *(_WORD *)v6;
          *(_BYTE *)(v13 + 2) = *(_BYTE *)(v6 + 2);
          ++*v3;
        }
      }
      else
      {
        while ( (unsigned int)*v3 < 0xC8 )
        {
          v12 = (int)(&v11[2 * *v3] + *v3);
          *(_WORD *)v12 = -256;
          *(_BYTE *)(v12 + 2) = -1;
          ++*v3;
          if ( *v3 >= (unsigned int)*(_BYTE *)v6 )
            goto LABEL_23;
        }
      }
      v6 += 3;
      ++i;
      if ( i >= pkProto->itemnum )
        return;
    }
    pkCurrItemSellInfoTab = (char *)&Market::ms_akWeapontitleItems;
    v3 = &Market::ms_uiTotalWeapontitleItem;
LABEL_19:
    v11 = pkCurrItemSellInfoTab;
    goto LABEL_20;
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A9B150: using guessed type int Market__ms_uiTotalWeapontitleItem;
// A9B154: using guessed type int Market__ms_uiTotalEnchantItem;

//----- (0061ABD0) --------------------------------------------------------
bool __cdecl Market::Add(unsigned __int16 kItemID)
{
  int v1; // esi@1
  int v2; // ecx@3
  int v3; // eax@4
  int v5; // eax@6
  int v6; // eax@7
  int v7; // eax@12
  int v8; // eax@14

  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                           kItemID)
    || kItemID > *(_WORD *)(v1 + 200)
    || (v2 = *(_DWORD *)(v1 + 196), !*(_DWORD *)(v2 + 4 * kItemID))
    || (v3 = *(_DWORD *)(v2 + 4 * kItemID)) == 0 )
    return 0;
  v5 = *(_DWORD *)(v3 + 102);
  if ( v5 == 5 )
  {
    v6 = Market::ms_uiTotalWeapon;
    if ( (unsigned int)Market::ms_uiTotalWeapon < 0xC8 )
    {
      *(__int16 *)((char *)&word_A9DFA9 + 3 * Market::ms_uiTotalWeapon) = kItemID;
      Market::ms_uiTotalWeapon = v6 + 1;
      return 1;
    }
  }
  else
  {
    if ( v5 == 6 || v5 == 7 || v5 == 8 )
    {
      v8 = Market::ms_uiTotalArmor;
      if ( (unsigned int)Market::ms_uiTotalArmor < 0xC8 )
      {
        *(__int16 *)((char *)&word_A9DD51 + 3 * Market::ms_uiTotalArmor) = kItemID;
        Market::ms_uiTotalArmor = v8 + 1;
      }
    }
    else
    {
      v7 = Market::ms_uiTotalAcc;
      if ( (unsigned int)Market::ms_uiTotalAcc < 0xC8 )
      {
        *(__int16 *)((char *)&word_A9DAF9 + 3 * Market::ms_uiTotalAcc) = kItemID;
        Market::ms_uiTotalAcc = v7 + 1;
        return 1;
      }
    }
  }
  return 1;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A9DAF9: using guessed type __int16 word_A9DAF9;
// A9DD51: using guessed type __int16 word_A9DD51;
// A9DFA9: using guessed type __int16 word_A9DFA9;
// A9E200: using guessed type int Market__ms_uiTotalAcc;
// A9E204: using guessed type int Market__ms_uiTotalArmor;
// A9E208: using guessed type int Market__ms_uiTotalWeapon;

//----- (0061AC90) --------------------------------------------------------
void __cdecl ItemMarket::Clear()
{
  int v0; // eax@2
  int v1; // ecx@2
  void *v2; // esi@5

  while ( dword_A7E994 )
  {
    v0 = dword_A7E98C;
    v1 = *(_DWORD *)dword_A7E98C;
    dword_A7E98C = v1;
    if ( v1 )
      *(_DWORD *)(v1 + 4) = 0;
    else
      dword_A7E990 = 0;
    v2 = *(void **)(v0 + 8);
    ItemMarket::ms_kItemSellInfoList[2](&ItemMarket::ms_kItemSellInfoList, v0);
    --dword_A7E994;
    operator delete(v2);
  }
}
// A7E988: using guessed type int (__thiscall **ItemMarket__ms_kItemSellInfoList)(void *p, char);
// A7E98C: using guessed type int dword_A7E98C;
// A7E990: using guessed type int dword_A7E990;
// A7E994: using guessed type int dword_A7E994;

//----- (0061ACF0) --------------------------------------------------------
void __cdecl ItemMarket::SetItem(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto)
{
  int v1; // ebx@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD *v2; // edi@2
  void *v3; // esi@3
  int v4; // eax@3
  char v5; // dl@7
  signed int iItemIndex; // [sp+8h] [bp-8h]@1

  Market::Clear();
  ItemMarket::Clear();
  v1 = 0;
  iItemIndex = 0;
  if ( pkProto->itemnum > 0u )
  {
    v2 = pkProto + 1;
    do
    {
      v3 = operator new(3u);
      v4 = ((int (__thiscall *)(int (__thiscall ***)(void *, char)))ItemMarket::ms_kItemSellInfoList[1])(&ItemMarket::ms_kItemSellInfoList);
      *(_DWORD *)(v4 + 8) = v3;
      *(_DWORD *)v4 = 0;
      *(_DWORD *)(v4 + 4) = dword_A7E990;
      if ( dword_A7E990 )
        *(_DWORD *)dword_A7E990 = v4;
      else
        dword_A7E98C = v4;
      dword_A7E990 = v4;
      ++dword_A7E994;
      if ( LOBYTE(v2->itemnum) == v1 )
      {
        ++iItemIndex;
        *(_WORD *)v3 = v2->itemnum;
        v5 = LOBYTE(v2->npc);
        v2 = (PROTO_NC_MENU_SHOPOPENTABLE_CMD *)((char *)v2 + 3);
      }
      else
      {
        v5 = -1;
        *(_WORD *)v3 = -256;
      }
      ++v1;
      *((_BYTE *)v3 + 2) = v5;
    }
    while ( iItemIndex < pkProto->itemnum );
  }
}
// A7E988: using guessed type int (__thiscall **ItemMarket__ms_kItemSellInfoList)(void *p, char);
// A7E98C: using guessed type int dword_A7E98C;
// A7E990: using guessed type int dword_A7E990;
// A7E994: using guessed type int dword_A7E994;

//----- (0061ADC0) --------------------------------------------------------
void __cdecl Market::SetSkill(PROTO_NC_MENU_SHOPOPENTABLE_CMD *pkProto)
{
  char *v1; // edi@1
  int *v2; // esi@1
  int v3; // ebx@3
  int v4; // eax@5
  int v5; // ebx@6
  __int64 v6; // kr00_8@15
  int v7; // eax@41
  int v8; // eax@43
  unsigned __int16 v9; // [sp+10h] [bp-14h]@3
  signed int i; // [sp+14h] [bp-10h]@1
  PROTO_NC_MENU_SHOPOPENTABLE_CMD *v11; // [sp+18h] [bp-Ch]@2
  char bIsActiveSkillNotPassive; // [sp+23h] [bp-1h]@12

  Market::Clear();
  i = 0;
  v1 = 0;
  v2 = 0;
  if ( pkProto->itemnum > 0u )
  {
    v11 = pkProto + 1;
    do
    {
      v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v9 = *(unsigned __int16 *)((char *)&v11->itemnum + 1);
      if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                + 16))(
                               ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                               *(unsigned __int16 *)((char *)&v11->itemnum + 1))
        || v9 > *(_WORD *)(v3 + 200)
        || (v4 = *(_DWORD *)(v3 + 196) + 4 * v9, !*(_DWORD *)v4)
        || (v5 = *(_DWORD *)v4) == 0
        || *(_DWORD *)(v5 + 102) != 11 )
        goto LABEL_44;
      if ( LOBYTE(v11->itemnum) )
        goto LABEL_39;
      if ( Skill::IsProduceSkill(*(_WORD *)v5) )
      {
        v1 = (char *)&Market::ms_akProdSkill;
        v2 = &Market::ms_uiTotalProdSkill;
        goto LABEL_39;
      }
      if ( ActSkillInfoTab::GetByInxName((char *)(v5 + 2)) )
      {
        bIsActiveSkillNotPassive = 1;
      }
      else
      {
        if ( !PasSkillViewInfoTab::GetByInxName((char *)(v5 + 2)) )
          goto LABEL_44;
        bIsActiveSkillNotPassive = 0;
      }
      v6 = CharClass::GetBitbyClassType((UseClassType)*(_DWORD *)(v5 + 207));
      if ( CharClass::TestChrBaseClassMask(v6, 1) )
      {
        if ( bIsActiveSkillNotPassive )
        {
          v1 = (char *)&Market::ms_akFigActSkill;
          v2 = &Market::ms_uiTotalFigActiveSkill;
        }
        else
        {
          v1 = (char *)&Market::ms_akFigPasSkill;
          v2 = &Market::ms_uiTotalFigPassiveSkill;
        }
        goto LABEL_39;
      }
      if ( CharClass::TestChrBaseClassMask(v6, 11) )
      {
        if ( bIsActiveSkillNotPassive )
        {
          v1 = (char *)&Market::ms_akArcActSkill;
          v2 = &Market::ms_uiTotalArcActiveSkill;
        }
        else
        {
          v1 = (char *)&Market::ms_akArcPasSkill;
          v2 = &Market::ms_uiTotalArcPassiveSkill;
        }
        goto LABEL_39;
      }
      if ( CharClass::TestChrBaseClassMask(v6, 6) )
      {
        if ( bIsActiveSkillNotPassive )
        {
          v1 = (char *)&Market::ms_akCleActSkill;
          v2 = &Market::ms_uiTotalCleActiveSkill;
        }
        else
        {
          v1 = (char *)&Market::ms_akClePasSkill;
          v2 = &Market::ms_uiTotalClePassiveSkill;
        }
        goto LABEL_39;
      }
      if ( CharClass::TestChrBaseClassMask(v6, 16) )
      {
        if ( bIsActiveSkillNotPassive )
        {
          v1 = (char *)&Market::ms_akMagActSkill;
          v2 = &Market::ms_uiTotalMagActiveSkill;
        }
        else
        {
          v1 = (char *)&Market::ms_akMagPasSkill;
          v2 = &Market::ms_uiTotalMagPassiveSkill;
        }
        goto LABEL_39;
      }
      if ( CharClass::TestChrBaseClassMask(v6, 21) )
      {
        if ( bIsActiveSkillNotPassive )
        {
          v1 = (char *)&Market::ms_akJokActSkill;
          v2 = &Market::ms_uiTotalJokActiveSkill;
        }
        else
        {
          v1 = (char *)&Market::ms_akJokPasSkill;
          v2 = &Market::ms_uiTotalJokPassiveSkill;
        }
        goto LABEL_39;
      }
      if ( CharClass::TestChrBaseClassMask(v6, 26) )
      {
        if ( bIsActiveSkillNotPassive )
        {
          v1 = (char *)&Market::ms_akSenActSkill;
          v2 = &Market::ms_uiTotalSenActiveSkill;
        }
        else
        {
          v1 = (char *)&Market::ms_akSenPasSkill;
          v2 = &Market::ms_uiTotalSenPassiveSkill;
        }
LABEL_39:
        if ( *v2 >= (unsigned int)LOBYTE(v11->itemnum) )
        {
LABEL_42:
          if ( (unsigned int)*v2 < 0xC8 )
          {
            v8 = (int)(&v1[2 * *v2] + *v2);
            *(_WORD *)v8 = v11->itemnum;
            *(_BYTE *)(v8 + 2) = LOBYTE(v11->npc);
            ++*v2;
          }
        }
        else
        {
          while ( (unsigned int)*v2 < 0xC8 )
          {
            v7 = (int)(&v1[2 * *v2] + *v2);
            *(_WORD *)v7 = -256;
            *(_BYTE *)(v7 + 2) = -1;
            ++*v2;
            if ( *v2 >= (unsigned int)LOBYTE(v11->itemnum) )
              goto LABEL_42;
          }
        }
      }
LABEL_44:
      v11 = (PROTO_NC_MENU_SHOPOPENTABLE_CMD *)((char *)v11 + 3);
      ++i;
    }
    while ( i < pkProto->itemnum );
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A9B3B0: using guessed type int Market__ms_uiTotalProdSkill;
// A9B3B4: using guessed type int Market__ms_uiTotalSenActiveSkill;
// A9D488: using guessed type int Market__ms_uiTotalSenPassiveSkill;
// A9D48C: using guessed type int Market__ms_uiTotalJokActiveSkill;
// A9D490: using guessed type int Market__ms_uiTotalJokPassiveSkill;
// A9D494: using guessed type int Market__ms_uiTotalMagActiveSkill;
// A9D498: using guessed type int Market__ms_uiTotalMagPassiveSkill;
// A9D49C: using guessed type int Market__ms_uiTotalArcActiveSkill;
// A9D4A0: using guessed type int Market__ms_uiTotalArcPassiveSkill;
// A9D4A4: using guessed type int Market__ms_uiTotalCleActiveSkill;
// A9D4A8: using guessed type int Market__ms_uiTotalClePassiveSkill;
// A9D4AC: using guessed type int Market__ms_uiTotalFigActiveSkill;
// A9D4B0: using guessed type int Market__ms_uiTotalFigPassiveSkill;

//----- (0061B070) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>(NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *this)
{
  this->vfptr = (NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>Vtbl *)&NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_vftable_;
}
// 9C0FDC: using guessed type int (__thiscall *NiTListBase_DFALL_PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM ___PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM _____vftable_)(void *p, char);

//----- (0061B080) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_scalar_deleting_destructor_(NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>Vtbl *)&NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C0FDC: using guessed type int (__thiscall *NiTListBase_DFALL_PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM ___PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM _____vftable_)(void *p, char);

//----- (0061B0B0) --------------------------------------------------------
void *__thiscall NiTList<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_scalar_deleting_destructor_(NiTList<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *v3; // esi@1
  NiTListItem<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>Vtbl *)&NiTPointerListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>_PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C0FDC: using guessed type int (__thiscall *NiTListBase_DFALL_PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM ___PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM _____vftable_)(void *p, char);
// 9C0FEC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM ___PROTO_NC_MENU_SHOPOPENTABLE_CMD__MENUITEM _____vftable_)(void *p, char);

//----- (0061B140) --------------------------------------------------------
bool __thiscall SpStream::PushInt(SpStream *this, int iValue)
{
  unsigned int v2; // eax@1
  bool result; // al@2

  v2 = this->m_uiTailIndex;
  if ( this->m_uiMaxSize < v2 + 4 )
  {
    result = 0;
  }
  else
  {
    *(_DWORD *)&this->m_abyData[v2] = iValue;
    this->m_uiTailIndex += 4;
    result = 1;
  }
  return result;
}

//----- (0061B170) --------------------------------------------------------
bool __thiscall SpStream::PushShort(SpStream *this, __int16 sValue)
{
  unsigned int v2; // eax@1
  bool result; // al@2

  v2 = this->m_uiTailIndex;
  if ( this->m_uiMaxSize < v2 + 2 )
  {
    result = 0;
  }
  else
  {
    *(_WORD *)&this->m_abyData[v2] = sValue;
    this->m_uiTailIndex += 2;
    result = 1;
  }
  return result;
}

//----- (0061B1A0) --------------------------------------------------------
bool __thiscall SpStream::PushByte(SpStream *this, char byValue)
{
  unsigned int v2; // eax@1
  bool result; // al@2

  v2 = this->m_uiTailIndex;
  if ( this->m_uiMaxSize < v2 + 1 )
  {
    result = 0;
  }
  else
  {
    this->m_abyData[v2] = byValue;
    result = 1;
    ++this->m_uiTailIndex;
  }
  return result;
}

//----- (0061B1D0) --------------------------------------------------------
int __thiscall SpStream::PopInt(SpStream *this)
{
  unsigned int v1; // eax@1
  unsigned int v2; // edx@1
  int result; // eax@2

  v1 = this->m_uiHeadIndex;
  v2 = v1 + 4;
  if ( this->m_uiTailIndex < v1 + 4 )
  {
    result = 0;
  }
  else
  {
    result = *(_DWORD *)&this->m_abyData[v1];
    this->m_uiHeadIndex = v2;
  }
  return result;
}

//----- (0061B1F0) --------------------------------------------------------
__int16 __thiscall SpStream::PopShort(SpStream *this)
{
  unsigned int v1; // eax@1
  unsigned int v2; // edx@1
  __int16 result; // ax@2

  v1 = this->m_uiHeadIndex;
  v2 = v1 + 2;
  if ( this->m_uiTailIndex < v1 + 2 )
  {
    result = 0;
  }
  else
  {
    result = *(_WORD *)&this->m_abyData[v1];
    this->m_uiHeadIndex = v2;
  }
  return result;
}

//----- (0061B210) --------------------------------------------------------
char __thiscall SpStream::PopByte(SpStream *this)
{
  unsigned int v1; // eax@1
  unsigned int v2; // edx@1
  char result; // al@2

  v1 = this->m_uiHeadIndex;
  v2 = v1 + 1;
  if ( this->m_uiTailIndex < v1 + 1 )
  {
    result = 0;
  }
  else
  {
    result = this->m_abyData[v1];
    this->m_uiHeadIndex = v2;
  }
  return result;
}

//----- (0061B230) --------------------------------------------------------
bool __thiscall SpStream::PushMem(SpStream *this, void *pbyMem, unsigned int uiSize)
{
  SpStream *v3; // esi@1
  unsigned int v4; // eax@1
  bool result; // al@2

  v3 = this;
  v4 = this->m_uiTailIndex;
  if ( this->m_uiMaxSize < v4 + uiSize )
  {
    result = 0;
  }
  else
  {
    memcpy(&this->m_abyData[v4], (char *)pbyMem, uiSize);
    v3->m_uiTailIndex += uiSize;
    result = 1;
  }
  return result;
}

//----- (0061B270) --------------------------------------------------------
bool __thiscall SpStream::PopMem(SpStream *this, void *pbyMem, unsigned int uiSize)
{
  SpStream *v3; // esi@1
  unsigned int v4; // eax@1
  bool result; // al@2

  v3 = this;
  v4 = this->m_uiHeadIndex;
  if ( this->m_uiTailIndex < v4 + uiSize )
  {
    result = 0;
  }
  else
  {
    memcpy((char *)pbyMem, &this->m_abyData[v4], uiSize);
    v3->m_uiHeadIndex += uiSize;
    result = 1;
  }
  return result;
}

//----- (0061B2B0) --------------------------------------------------------
void __thiscall OptionManager::Clear(OptionManager *this)
{
  NiTListItem<IOptionBase *> *v1; // esi@1
  char *v2; // edi@1
  NiTListItem<IOptionBase *> *v3; // ST00_4@2

  v1 = this->m_kOptionList.baseclass_0.baseclass_0.m_pkHead;
  v2 = (char *)&this->m_kOptionList;
  while ( v1 )
  {
    v3 = v1;
    v1 = v1->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v3);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
}

//----- (0061B2F0) --------------------------------------------------------
bool __thiscall OptionManager::LoadOption(OptionManager *this, SpStream *rkStream)
{
  NiTListItem<IOptionBase *> *v2; // esi@1
  int (__stdcall *v3)(_DWORD); // edx@2
  bool result; // al@4

  v2 = this->m_kOptionList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = (int (__stdcall *)(_DWORD))**(_DWORD **)v2->m_element;
      v2 = v2->m_pkNext;
      if ( !(unsigned __int8)v3(rkStream) )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
    result = 0;
  }
  else
  {
LABEL_4:
    result = 1;
  }
  return result;
}

//----- (0061B330) --------------------------------------------------------
void __thiscall OptionManager::SaveOption(OptionManager *this, SpStream *rkStream)
{
  NiTListItem<IOptionBase *> *v2; // esi@1
  void (__thiscall *v3)(IOptionBase *, SpStream *); // edx@2

  v2 = this->m_kOptionList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element->vfptr->SaveOption;
    v2 = v2->m_pkNext;
    ((void (__stdcall *)(_DWORD))v3)(rkStream);
  }
}

//----- (0061B360) --------------------------------------------------------
void __thiscall OptionManager::Register(OptionManager *this, IOptionBase *pkOptionBase)
{
  char *v2; // esi@1
  NiTListItem<IOptionBase *> *v3; // eax@1
  int v4; // ecx@1

  v2 = (char *)&this->m_kOptionList;
  v3 = this->m_kOptionList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<IOptionBase *>,IOptionBase *> *)&this->m_kOptionList);
  v3->m_element = pkOptionBase;
  v3->m_pkNext = 0;
  v3->m_pkPrev = (NiTListItem<IOptionBase *> *)*((_DWORD *)v2 + 2);
  v4 = *((_DWORD *)v2 + 2);
  if ( v4 )
  {
    *(_DWORD *)v4 = v3;
    ++*((_DWORD *)v2 + 3);
    *((_DWORD *)v2 + 2) = v3;
  }
  else
  {
    ++*((_DWORD *)v2 + 3);
    *((_DWORD *)v2 + 1) = v3;
    *((_DWORD *)v2 + 2) = v3;
  }
}

//----- (0061B3B0) --------------------------------------------------------
unsigned int __thiscall ShortCut::CopyTypeToMemory(ShortCut *this, char *pucBuff)
{
  *(_DWORD *)pucBuff = ((int (*)(void))this->baseclass_0.vfptr[1].__vecDelDtor)();
  return 4;
}

//----- (0061B3D0) --------------------------------------------------------
unsigned int __cdecl ShortCut::LoadTypeToMemory(char *pucBuff, unsigned int *uiType)
{
  *uiType = *(_DWORD *)pucBuff;
  return 4;
}

//----- (0061B3F0) --------------------------------------------------------
bool __thiscall ShortCutInvPosItem::LoadFromPacket(ShortCutInvPosItem *this, SHORT_CUT_DATA *pkData)
{
  bool result; // al@2

  if ( pkData )
  {
    this->m_uiInvPos = pkData->nValue;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061B410) --------------------------------------------------------
unsigned int __thiscall ShortCutSkill::CopyToMemory(ShortCutSkill *this, char *pucBuff)
{
  *(_WORD *)pucBuff = this->m_kSkillID;
  return 2;
}

//----- (0061B430) --------------------------------------------------------
bool __thiscall ShortCutSkill::LoadFromPacket(ShortCutSkill *this, SHORT_CUT_DATA *pkData)
{
  bool result; // al@2

  if ( pkData )
  {
    this->m_kSkillID = LOWORD(pkData->nValue);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061B450) --------------------------------------------------------
unsigned int __thiscall ShortCutSkill::LoadFromMemory(ShortCutSkill *this, char *pucBuff)
{
  this->m_kSkillID = *(_WORD *)pucBuff;
  return 2;
}

//----- (0061B470) --------------------------------------------------------
bool __thiscall ShortCutSkill::ConfirmInstance(ShortCutSkill *this)
{
  return Skill::IsLearnSkill(this->m_kSkillID);
}

//----- (0061B480) --------------------------------------------------------
unsigned int __thiscall ShortCutAction::CopyToMemory(ShortCutAction *this, char *pucBuff)
{
  *(_DWORD *)pucBuff = this->m_uiTableIndexNum;
  *((_DWORD *)pucBuff + 1) = this->m_uiInvType;
  *((_DWORD *)pucBuff + 2) = this->m_uiActionNum;
  return 12;
}

//----- (0061B4A0) --------------------------------------------------------
unsigned int __thiscall ShortCutAction::LoadFromMemory(ShortCutAction *this, char *pucBuff)
{
  this->m_uiTableIndexNum = *(_DWORD *)pucBuff;
  this->m_uiInvType = *((_DWORD *)pucBuff + 1);
  this->m_uiActionNum = *((_DWORD *)pucBuff + 2);
  return 12;
}

//----- (0061B4C0) --------------------------------------------------------
bool __thiscall ShortCutItem::LoadFromPacket(ShortCutItem *this, SHORT_CUT_DATA *pkData)
{
  bool result; // al@2
  int v3; // eax@3

  if ( pkData )
  {
    v3 = LOWORD(pkData->nValue);
    this->m_kItemID = v3;
    (*(void (__stdcall **)(int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(v3);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0061B4F0) --------------------------------------------------------
unsigned int __thiscall ShortCutItem::CopyToMemory(ShortCutItem *this, char *pucBuff)
{
  unsigned int result; // eax@1
  unsigned __int16 v3; // ax@2

  result = (unsigned int)this->m_spItem.m_pObject;
  if ( result )
  {
    v3 = *(_WORD *)(result + 8);
    this->m_kItemID = v3;
    *(_WORD *)pucBuff = v3;
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(this->m_kItemID);
    result = 2;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0061B530) --------------------------------------------------------
unsigned int __thiscall ShortCutItem::LoadFromMemory(ShortCutItem *this, char *pucBuff)
{
  ShortCutItem *v2; // edi@1
  Item *v3; // esi@1
  int v4; // eax@6

  v2 = this;
  v3 = this->m_spItem.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spItem.m_pObject = 0;
  }
  v4 = *(_WORD *)pucBuff;
  v2->m_kItemID = v4;
  (*(void (__stdcall **)(int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(v4);
  return 2;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0061B590) --------------------------------------------------------
void __thiscall ShortCutItem::SetItem(ShortCutItem *this, Item *pkItem)
{
  ShortCutItem *v2; // ebx@1
  Item *v3; // esi@1

  v2 = this;
  v3 = this->m_spItem.m_pObject;
  if ( v3 != pkItem )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    v2->m_spItem.m_pObject = pkItem;
    if ( !pkItem )
      goto LABEL_9;
    InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
  if ( !pkItem )
  {
LABEL_9:
    v2->m_kItemID = -1;
    return;
  }
  v2->m_kItemID = v2->m_spItem.m_pObject->m_kStruct.itemid;
}

//----- (0061B600) --------------------------------------------------------
void __thiscall ShortCutInvPosItem::ShortCutInvPosItem(ShortCutInvPosItem *this)
{
  ShortCutInvPosItem *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutInvPosItem::_vftable_;
  v1->m_uiInvPos = 0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C100C: using guessed type int (__thiscall *ShortCutInvPosItem___vftable_)(void *p, char);

//----- (0061B630) --------------------------------------------------------
void __thiscall ShortCutInvPosItem::_ShortCutInvPosItem(ShortCutInvPosItem *this)
{
  this->m_uiInvPos = 0;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (0061B650) --------------------------------------------------------
void __thiscall ShortCutSkill::ShortCutSkill(ShortCutSkill *this)
{
  ShortCutSkill *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->m_kSkillID = -1;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutSkill::_vftable_;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C1028: using guessed type int (__thiscall *ShortCutSkill___vftable_)(void *p, char);

//----- (0061B680) --------------------------------------------------------
void __thiscall ShortCutSkill::_ShortCutSkill(ShortCutSkill *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (0061B6A0) --------------------------------------------------------
void __thiscall ShortCutAction::ShortCutAction(ShortCutAction *this)
{
  ShortCutAction *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutAction::_vftable_;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C1044: using guessed type int (__thiscall *ShortCutAction___vftable_)(void *p, char);

//----- (0061B6D0) --------------------------------------------------------
void __thiscall ShortCutAction::_ShortCutAction(ShortCutAction *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (0061B6F0) --------------------------------------------------------
void __thiscall ShortCutSoulStone::ShortCutSoulStone(ShortCutSoulStone *this)
{
  ShortCutSoulStone *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutSoulStone::_vftable_;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C1060: using guessed type int (__thiscall *ShortCutSoulStone___vftable_)(void *p, char);

//----- (0061B720) --------------------------------------------------------
void __thiscall ShortCutSoulStone::_ShortCutSoulStone(ShortCutSoulStone *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (0061B740) --------------------------------------------------------
ShortCut::ShortCutDataType __thiscall ShortCutAction::GetActionType(ShortCutAction *this)
{
  int v1; // esi@1
  int v2; // edi@1
  int v3; // ecx@3
  int v4; // eax@4
  ShortCut::ShortCutDataType result; // eax@5
  int v6; // eax@6
  int v7; // eax@7

  v1 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
  v2 = LOWORD(this->m_uiTableIndexNum);
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                            + 16))(
                           ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                           LOWORD(this->m_uiTableIndexNum))
    || (unsigned __int16)v2 > *(_WORD *)(v1 + 200)
    || (v3 = *(_DWORD *)(v1 + 196), !*(_DWORD *)(v3 + 4 * v2))
    || (v4 = *(_DWORD *)(v3 + 4 * v2)) == 0 )
    return 0;
  v6 = *(_DWORD *)(v4 + 101);
  if ( v6 )
  {
    v7 = v6 - 1;
    if ( v7 )
    {
      if ( v7 != 1 )
        return 0;
      result = 6;
    }
    else
    {
      result = 5;
    }
  }
  else
  {
    result = 4;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0061B7B0) --------------------------------------------------------
void __thiscall ShortCutItem::ShortCutItem(ShortCutItem *this)
{
  ShortCutItem *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutItem::_vftable_;
  v1->m_spItem.m_pObject = 0;
  v1->m_kItemID = -1;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C107C: using guessed type int (__thiscall *ShortCutItem___vftable_)(void *p, char);

//----- (0061B850) --------------------------------------------------------
void __thiscall ShortCutItem::_ShortCutItem(ShortCutItem *this)
{
  ShortCutItem *v1; // esi@1
  Item *v2; // edi@1
  Item *v3; // edi@6

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ShortCutItem::_vftable_;
  v2 = this->m_spItem.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spItem.m_pObject = 0;
  }
  v1->m_kItemID = -1;
  v3 = v1->m_spItem.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C107C: using guessed type int (__thiscall *ShortCutItem___vftable_)(void *p, char);

//----- (0061B900) --------------------------------------------------------
unsigned int __thiscall ShortCutInvPosItem::CopyToMemory(ShortCutInvPosItem *this, char *pucBuff)
{
  unsigned int v2; // ecx@1
  Item *v3; // eax@2

  *(_DWORD *)pucBuff = this->m_uiInvPos;
  v2 = this->m_uiInvPos;
  if ( v2 < 0xC0 )
  {
    v3 = g_kInventory.m_aspInv[v2].m_pObject;
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(v3->m_kStruct.itemid);
  }
  return 4;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0061B940) --------------------------------------------------------
unsigned int __thiscall ShortCutInvPosItem::LoadFromMemory(ShortCutInvPosItem *this, char *pucBuff)
{
  unsigned int v2; // eax@1
  Item *v3; // eax@2

  v2 = *(_DWORD *)pucBuff;
  this->m_uiInvPos = *(_DWORD *)pucBuff;
  if ( v2 < 0xC0 )
  {
    v3 = g_kInventory.m_aspInv[v2].m_pObject;
    if ( v3 )
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(v3->m_kStruct.itemid);
  }
  return 4;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0061B980) --------------------------------------------------------
bool __thiscall ShortCutAction::LoadFromPacket(ShortCutAction *this, SHORT_CUT_DATA *pkData)
{
  int v2; // esi@1
  int v3; // edi@1
  ShortCutAction *v4; // ebx@1
  int v5; // eax@3
  ActionViewInfo *v6; // ecx@4
  bool result; // al@5

  v2 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
  v3 = LOWORD(pkData->nValue);
  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                          LOWORD(pkData->nValue))
    && (unsigned __int16)v3 <= *(_WORD *)(v2 + 200)
    && (v5 = *(_DWORD *)(v2 + 196) + 4 * v3, *(_DWORD *)v5)
    && (v6 = *(ActionViewInfo **)v5) != 0 )
  {
    v4->m_uiTableIndexNum = pkData->nValue;
    switch ( pkData->nCodeNo )
    {
      case 4u:
        v4->m_uiInvType = 4;
        break;
      case 5u:
        v4->m_uiInvType = 5;
        break;
      case 6u:
        v4->m_uiInvType = 6;
        break;
    }
    v4->m_uiActionNum = ActionViewTable::GetActionNum(v6);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0061BA20) --------------------------------------------------------
bool __thiscall NiDX92DBufferData::Recreate(NiDX92DBufferData *this, IDirect3DDevice9 *pkD3DDevice9)
{
  return 0;
}

//----- (0061BA30) --------------------------------------------------------
unsigned int __cdecl ActionViewTable::GetActionNum(ActionViewInfo *pkInfo)
{
  ActionViewInfo *v1; // ebx@1
  unsigned int v2; // esi@1
  unsigned int result; // eax@2
  int v4; // eax@3
  unsigned int v5; // edi@4
  void *v6; // eax@7
  unsigned int uiNum; // [sp+10h] [bp+8h]@3

  v1 = pkInfo;
  v2 = 0;
  if ( pkInfo )
  {
    v4 = *(_DWORD *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 56);
    uiNum = 0;
    if ( v4 )
      v5 = *(_DWORD *)(v4 + 40);
    else
      v5 = 0;
    if ( v5 > 0 )
    {
      do
      {
        v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4), v2);
        if ( *(_DWORD *)((char *)v6 + 101) == v1->eActionType )
        {
          if ( v6 == v1 )
            break;
          if ( *(_WORD *)((char *)v6 + 65) >= v5 )
            ++uiNum;
        }
        ++v2;
      }
      while ( v2 < v5 );
    }
    result = uiNum;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0061BAA0) --------------------------------------------------------
void *__thiscall ShortCutItem::_scalar_deleting_destructor_(ShortCutItem *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ShortCutItem::_ShortCutItem(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0061BAD0) --------------------------------------------------------
bool __thiscall ShortCutMgr::Init(ShortCutMgr *this)
{
  return 1;
}

//----- (0061BAE0) --------------------------------------------------------
bool __thiscall ShortCutMgr::LoadFromNet(ShortCutMgr *this)
{
  return 1;
}

//----- (0061BB00) --------------------------------------------------------
bool __thiscall ShortCutMgr::LoadOption(ShortCutMgr *this, SpStream *rkStream)
{
  SpStream::PopInt(rkStream);
  return 1;
}

//----- (0061BB20) --------------------------------------------------------
ShortCut *__thiscall ShortCutMgr::CreateShortCut(ShortCutMgr *this, ShortCut::Type eType)
{
  void *v2; // eax@2
  ShortCut *result; // eax@3
  void *v4; // eax@4
  void *v5; // eax@6
  void *v6; // eax@8
  void *v7; // eax@10

  switch ( eType )
  {
    case 5:
      v2 = operator new(0xCu);
      if ( !v2 )
        goto LABEL_12;
      ShortCutInvPosItem::ShortCutInvPosItem((ShortCutInvPosItem *)v2);
      break;
    case 4:
      v4 = operator new(0x10u);
      if ( !v4 )
        goto LABEL_12;
      ShortCutItem::ShortCutItem((ShortCutItem *)result);
      break;
    case 1:
      v5 = operator new(0xCu);
      if ( !v5 )
        goto LABEL_12;
      ShortCutSkill::ShortCutSkill((ShortCutSkill *)result);
      break;
    case 2:
      v6 = operator new(0x14u);
      if ( !v6 )
        goto LABEL_12;
      ShortCutAction::ShortCutAction((ShortCutAction *)result);
      break;
    case 3:
      v7 = operator new(8u);
      if ( !v7 )
        goto LABEL_12;
      ShortCutSoulStone::ShortCutSoulStone((ShortCutSoulStone *)result);
      break;
    default:
LABEL_12:
      result = 0;
      break;
  }
  return result;
}

//----- (0061BC90) --------------------------------------------------------
bool __thiscall ShortCutMgr::ShortCutChanged(ShortCutMgr *this)
{
  return this->m_bShortCutChanged;
}

//----- (0061BCA0) --------------------------------------------------------
void __thiscall ShortCutMgr::SetShortCutChanged(ShortCutMgr *this, bool b)
{
  this->m_bShortCutChanged = b;
}

//----- (0061BCB0) --------------------------------------------------------
bool __thiscall ShortCutMgr::ShortCutSizeChanged(ShortCutMgr *this)
{
  return this->m_bShortCutSizeChanged;
}

//----- (0061BCC0) --------------------------------------------------------
void __thiscall ShortCutMgr::SetShortCutSizeChanged(ShortCutMgr *this, bool b)
{
  this->m_bShortCutSizeChanged = b;
}

//----- (0061BCD0) --------------------------------------------------------
bool __thiscall ShortCutMgr::SendOptToChange(ShortCutMgr *this)
{
  return 0;
}

//----- (0061BCE0) --------------------------------------------------------
void __thiscall ShortCutMgr::SetInvPosItem(ShortCutMgr *this, unsigned __int16 uiExchangePos, unsigned __int16 uiLocationPos, bool bOnlyLocation)
{
  char *v4; // edi@1
  int v5; // eax@4
  int v6; // ecx@4
  signed int v7; // [sp+Ch] [bp-4h]@1

  v4 = (char *)this->m_aspShortCut;
  v7 = 100;
  do
  {
    if ( *(_DWORD *)v4 && (*(int (**)(void))(**(_DWORD **)v4 + 4))() == 5 )
    {
      v5 = *(_DWORD *)v4;
      v6 = *(_DWORD *)(*(_DWORD *)v4 + 8);
      if ( v6 == uiLocationPos )
        *(_DWORD *)(v5 + 8) = uiExchangePos;
      if ( !bOnlyLocation )
      {
        if ( v6 == uiExchangePos )
          *(_DWORD *)(v5 + 8) = uiLocationPos;
      }
    }
    v4 += 4;
    --v7;
  }
  while ( v7 );
}

//----- (0061BD40) --------------------------------------------------------
bool __thiscall ShortCutMgr::SyncShortCutAndActionWinKey(ShortCutMgr *this, int nViewTableIndex, int nWinIndex)
{
  bool result; // al@2
  char *v4; // esi@5
  signed int v5; // edi@5
  int v6; // eax@8

  if ( nViewTableIndex >= 0 )
  {
    if ( nWinIndex >= 0 )
    {
      v4 = (char *)this->m_aspShortCut;
      v5 = 100;
      do
      {
        if ( *(_DWORD *)v4 )
        {
          if ( (*(int (**)(void))(**(_DWORD **)v4 + 4))() == 2 )
          {
            v6 = *(_DWORD *)v4;
            if ( *(_DWORD *)v4 )
            {
              if ( *(_DWORD *)(v6 + 8) == nViewTableIndex )
              {
                if ( *(_DWORD *)(v6 + 16) != nWinIndex )
                  *(_DWORD *)(v6 + 16) = nWinIndex;
              }
            }
          }
        }
        v4 += 4;
        --v5;
      }
      while ( v5 );
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061BDA0) --------------------------------------------------------
void __thiscall ShortCutMgr::Clear(ShortCutMgr *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspShortCut;
  v2 = 100;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0061BDF0) --------------------------------------------------------
void __thiscall ShortCutMgr::CheckContents(ShortCutMgr *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@4
  int v4; // esi@7

  v1 = (char *)this->m_aspShortCut;
  v2 = 100;
  do
  {
    if ( *(_DWORD *)v1 )
    {
      if ( (*(int (**)(void))(**(_DWORD **)v1 + 4))() == 1 )
      {
        v3 = *(_DWORD *)v1;
        if ( *(_DWORD *)v1 )
        {
          if ( !Skill::IsLearnSkill(*(_WORD *)(v3 + 8)) )
          {
            if ( !Skill::IsProduceBaseSkill(*(_WORD *)(v3 + 8)) )
            {
              v4 = *(_DWORD *)v1;
              if ( *(_DWORD *)v1 )
              {
                if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
                {
                  if ( v4 )
                    (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
                }
                *(_DWORD *)v1 = 0;
              }
            }
          }
        }
      }
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0061BE80) --------------------------------------------------------
void __thiscall ShortCutMgr::_ShortCutMgr(ShortCutMgr *this)
{
  ShortCutMgr *v1; // esi@1
  void *v2; // eax@1

  v1 = this;
  this->baseclass_0.vfptr = (IOptionBaseVtbl *)ShortCutMgr::_vftable_;
  v2 = *(void **)&this->m_vecChanged.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
    operator delete(v2);
  *(_DWORD *)&v1->m_vecChanged.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecChanged.baseclass_0._Mylast = 0;
  v1->m_vecChanged.baseclass_0._Myend = 0;
  zlibUtil2::_zlibUtil2(&v1->m_zlibUtil2);
  _eh_vector_destructor_iterator_(
    v1->m_aspShortCut,
    4u,
    100,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9C1098: using guessed type int (__stdcall *ShortCutMgr___vftable_[2])(int rkStream);

//----- (0061BF10) --------------------------------------------------------
void __thiscall ShortCutMgr::ShortCutMgr(ShortCutMgr *this)
{
  ShortCutMgr *v1; // esi@1
  char *v2; // ecx@1
  char *v3; // ebx@1
  __int16 v4; // [sp+8h] [bp-10h]@0

  v1 = this;
  this->baseclass_0.vfptr = (IOptionBaseVtbl *)ShortCutMgr::_vftable_;
  _eh_vector_constructor_iterator_(
    this->m_aspShortCut,
    4u,
    100,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  *(_DWORD *)&v1->m_kVersion.year = 0;
  v1->m_kVersion.hour = 0;
  ZlibUtil::ZlibUtil(&v1->m_zlibUtil);
  zlibUtil2::zlibUtil2(&v1->m_zlibUtil2);
  *(_DWORD *)&v1->m_vecChanged.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecChanged.baseclass_0._Mylast = 0;
  v1->m_vecChanged.baseclass_0._Myend = 0;
  LOBYTE(v4) = 0;
  *(_DWORD *)&v1->m_kVersion.year = 184879062;
  *(_WORD *)&v1->m_kVersion.hour = v4;
  *(_WORD *)&v1->m_bShortCutChanged = 0;
  v2 = (char *)v1->m_vecChanged.baseclass_0._Mylast;
  v3 = *(char **)&v1->m_vecChanged.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    memmove(v3, v2, 0);
    v1->m_vecChanged.baseclass_0._Mylast = (int *)v3;
  }
  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v1->m_vecChanged,
    0x14u);
  ShortCutMgr::Clear(v1);
}
// 9C1098: using guessed type int (__stdcall *ShortCutMgr___vftable_[2])(int rkStream);

//----- (0061C020) --------------------------------------------------------
void __thiscall ShortCutMgr::Update(ShortCutMgr *this, float fCurTime)
{
  ShortCutMgr *v2; // edi@1
  int *v3; // ebx@3
  int *v4; // esi@3
  char *v5; // esi@6
  ShortCut *v6; // eax@9
  unsigned int v7; // ecx@10
  Item *v8; // ecx@11
  unsigned __int16 v9; // cx@12
  ShortCut *v10; // eax@16
  ShortCut *v11; // eax@18
  ShortCutAction *v12; // ecx@20
  __int16 v13; // ax@21
  char *v14; // ecx@26
  char *v15; // ebx@26
  int Index; // [sp+0h] [bp-10Ch]@3
  ShortCut *pkShortCutAction; // [sp+4h] [bp-108h]@9
  ShortCutAction *pkShortCutActiona; // [sp+4h] [bp-108h]@20
  char Dummy[256]; // [sp+8h] [bp-104h]@5
  unsigned int v20; // [sp+108h] [bp-4h]@1
  int v21; // [sp+10Ch] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  if ( !(_S3_6 & 1) )
  {
    _S3_6 |= 1u;
    fLastSend = fCurTime;
  }
  v3 = *(int **)&this->m_vecChanged.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = this->m_vecChanged.baseclass_0._Mylast;
  Index = 0;
  if ( v3 != v4 && fLastSend + 1.0 < fCurTime )
  {
    fLastSend = fCurTime;
    memset(&Dummy[1], 0, 0xFFu);
    Dummy[0] = v4 - v3;
    if ( v3 != v4 )
    {
      v5 = &Dummy[2];
      do
      {
        if ( v2->m_aspShortCut[*v3].m_pObject )
        {
          switch ( ((int (*)(void))v2->m_aspShortCut[*v3].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)() )
          {
            case 5:
              *(_WORD *)v5 = 2;
              v6 = v2->m_aspShortCut[*v3].m_pObject;
              pkShortCutAction = v6;
              if ( !v6
                || (v7 = (unsigned int)v6[1].baseclass_0.vfptr, v7 >= 0xC0)
                || (v8 = g_kInventory.m_aspInv[v7].m_pObject) == 0 )
                break;
              v9 = v8->m_kStruct.itemid;
              if ( v9 == -1 )
                goto LABEL_15;
              if ( IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v9) )
              {
                v6 = pkShortCutAction;
LABEL_15:
                *(_DWORD *)(v5 + 2) = v6[1].baseclass_0.vfptr;
                *(v5 - 1) = *(_BYTE *)v3;
                goto LABEL_24;
              }
              break;
            case 4:
              *(_WORD *)v5 = 1;
              v10 = v2->m_aspShortCut[*v3].m_pObject;
              if ( v10 )
              {
                *(_DWORD *)(v5 + 2) = LOWORD(v10[1].baseclass_0.m_uiRefCount);
                *(v5 - 1) = *(_BYTE *)v3;
                goto LABEL_24;
              }
              break;
            case 1:
              *(_WORD *)v5 = 3;
              v11 = v2->m_aspShortCut[*v3].m_pObject;
              if ( v11 )
              {
                *(_DWORD *)(v5 + 2) = LOWORD(v11[1].baseclass_0.vfptr);
                *(v5 - 1) = *(_BYTE *)v3;
                goto LABEL_24;
              }
              break;
            case 2:
              v12 = (ShortCutAction *)v2->m_aspShortCut[*v3].m_pObject;
              pkShortCutActiona = v12;
              if ( v12 )
              {
                v13 = ShortCutAction::GetActionType(v12);
                *(_WORD *)v5 = v13;
                if ( v13 )
                {
                  *(_DWORD *)(v5 + 2) = pkShortCutActiona->m_uiTableIndexNum;
                  *(v5 - 1) = *(_BYTE *)v3;
                  goto LABEL_24;
                }
              }
              break;
            default:
              break;
          }
        }
        else
        {
          *(_DWORD *)(v5 + 2) = 0;
          *(_WORD *)v5 = 0;
          *(v5 - 1) = *(_BYTE *)v3;
LABEL_24:
          ++Index;
          v5 += 7;
        }
        ++v3;
      }
      while ( v3 != v2->m_vecChanged.baseclass_0._Mylast );
    }
    v14 = (char *)v2->m_vecChanged.baseclass_0._Mylast;
    v15 = *(char **)&v2->m_vecChanged.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v15 != v14 )
    {
      memmove(v15, v14, 0);
      v2->m_vecChanged.baseclass_0._Mylast = (int *)v15;
    }
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Cu, 0x37u, Dummy, 7 * Index + 4);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0061C290) --------------------------------------------------------
void __thiscall ShortCutMgr::ChangeIndex(ShortCutMgr *this, int Index)
{
  int v2; // edi@1
  int *v3; // eax@2
  char *v4; // esi@2
  int *v5; // ecx@2
  unsigned int v6; // eax@5
  int v7; // edx@6
  int v8; // ecx@7
  signed int v9; // edi@7
  int v10; // eax@8
  int v11; // eax@10
  int v12; // ecx@10
  unsigned int v13; // ecx@12
  int v14; // eax@17
  int v15; // ecx@19
  int v16; // eax@20
  int v17; // eax@22
  int v18; // ecx@22
  unsigned int v19; // ecx@24
  int v20; // eax@29

  v2 = Index;
  if ( Index < 100 )
  {
    v3 = *(int **)&this->m_vecChanged.baseclass_0.___u0.baseclass_0.dummy[0];
    v4 = (char *)&this->m_vecChanged;
    v5 = this->m_vecChanged.baseclass_0._Mylast;
    if ( v3 == v5 )
    {
LABEL_5:
      v6 = *((_DWORD *)v4 + 1);
      if ( (unsigned int)&Index >= v6 || (v7 = *(_DWORD *)v4, *(_DWORD *)v4 > (unsigned int)&Index) )
      {
        v15 = *((_DWORD *)v4 + 2);
        if ( v6 == v15 )
        {
          v16 = (signed int)(v6 - *(_DWORD *)v4) >> 2;
          if ( (unsigned int)v16 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v17 = v16 + 1;
          v18 = (v15 - *(_DWORD *)v4) >> 2;
          if ( v17 > (unsigned int)v18 )
          {
            if ( 1073741823 - ((unsigned int)v18 >> 1) >= v18 )
              v19 = ((unsigned int)v18 >> 1) + v18;
            else
              v19 = 0;
            if ( v19 < v17 )
              v19 = v17;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v4,
              v19);
          }
        }
        v20 = *((_DWORD *)v4 + 1);
        if ( v20 )
          *(_DWORD *)v20 = v2;
      }
      else
      {
        v8 = *((_DWORD *)v4 + 2);
        v9 = (signed int)((char *)&Index - v7) >> 2;
        if ( v6 == v8 )
        {
          v10 = (signed int)(v6 - v7) >> 2;
          if ( (unsigned int)v10 > 0x3FFFFFFE )
            std::_Xlength_error("vector<T> too long");
          v11 = v10 + 1;
          v12 = (v8 - v7) >> 2;
          if ( v11 > (unsigned int)v12 )
          {
            if ( 1073741823 - ((unsigned int)v12 >> 1) >= v12 )
              v13 = ((unsigned int)v12 >> 1) + v12;
            else
              v13 = 0;
            if ( v13 < v11 )
              v13 = v11;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v4,
              v13);
          }
        }
        v14 = *((_DWORD *)v4 + 1);
        if ( v14 )
        {
          *(_DWORD *)v14 = *(_DWORD *)(*(_DWORD *)v4 + 4 * v9);
          *((_DWORD *)v4 + 1) += 4;
          return;
        }
      }
      *((_DWORD *)v4 + 1) += 4;
    }
    else
    {
      while ( *v3 != Index )
      {
        ++v3;
        if ( v3 == v5 )
          goto LABEL_5;
      }
    }
  }
}

//----- (0061C3B0) --------------------------------------------------------
bool __thiscall ShortCutMgr::InitShortCutFromInventory(ShortCutMgr *this)
{
  unsigned int v1; // esi@1
  char *v2; // edi@1
  int v3; // ebx@4
  int v4; // esi@5
  Item *v5; // eax@6
  int v6; // edi@8
  Item *v7; // eax@11
  unsigned int v8; // eax@17
  Item *v9; // ecx@18
  char *v11; // [sp+Ch] [bp-78h]@1
  unsigned int i; // [sp+10h] [bp-74h]@1
  bool b_success; // [sp+17h] [bp-6Dh]@1
  char kStruct[2]; // [sp+18h] [bp-6Ch]@11
  unsigned int v15; // [sp+80h] [bp-4h]@1
  int v16; // [sp+84h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v1 = 0;
  v2 = (char *)this->m_aspShortCut;
  b_success = 1;
  i = 0;
  v11 = (char *)this->m_aspShortCut;
  while ( 1 )
  {
    if ( *(_DWORD *)v2 )
    {
      if ( (*(int (**)(void))(**(_DWORD **)v2 + 4))() != 4 )
      {
        if ( !*(_DWORD *)v2
          || (*(int (**)(void))(**(_DWORD **)v2 + 4))() != 5
          || !*(_DWORD *)v2
          || (v8 = *(_DWORD *)(*(_DWORD *)v2 + 8), v8 < 0xC0)
          && (v9 = g_kInventory.m_aspInv[v8].m_pObject) != 0
          && (unsigned __int8)((int (*)(void))v9->baseclass_0.vfptr[1].__vecDelDtor)() == 24 )
          goto LABEL_22;
        ShortCutMgr::SetShortCut(&g_kShortCutMgr, 0, v1, 0);
        goto LABEL_21;
      }
      v3 = *(_DWORD *)v2;
      if ( *(_DWORD *)v2 )
        break;
    }
LABEL_22:
    v1 = i + 1;
    v2 += 4;
    i = v1;
    v11 = v2;
    if ( (signed int)v1 >= 100 )
      return b_success;
  }
  v4 = *(_WORD *)(v3 + 12);
  if ( (_WORD)v4 == -1 )
    goto LABEL_21;
  v5 = Inventory::GetItemByID(&g_kInventory, *(_WORD *)(v3 + 12));
  if ( v5 )
  {
    ShortCutItem::SetItem((ShortCutItem *)v3, v5);
    goto LABEL_22;
  }
  v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          v4)
    && (unsigned __int16)v4 <= *(_WORD *)(v6 + 200)
    && *(_DWORD *)(*(_DWORD *)(v6 + 196) + 4 * v4) )
  {
    memset(kStruct, 0, 0x67u);
    *(_WORD *)kStruct = v4;
    v7 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
    if ( v7 )
    {
      ShortCutItem::SetItem((ShortCutItem *)v3, v7);
      v2 = v11;
      goto LABEL_22;
    }
    ShortCutMgr::SetShortCut(&g_kShortCutMgr, 0, i, 0);
    v2 = v11;
LABEL_21:
    b_success = 0;
    goto LABEL_22;
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0061C530) --------------------------------------------------------
bool __thiscall ShortCutMgr::LoadFromPacket(ShortCutMgr *this, SHORT_CUT_DATA *pkData)
{
  ShortCutMgr *v2; // ebx@1
  bool result; // al@2
  void *v4; // eax@4
  ShortCut *v5; // eax@5
  void *v6; // eax@6
  void *v7; // eax@9
  ShortCut *v8; // esi@12

  v2 = this;
  if ( pkData )
  {
    switch ( pkData->nCodeNo )
    {
      case 1u:
        v4 = operator new(0x10u);
        if ( !v4 )
          goto LABEL_11;
        ShortCutItem::ShortCutItem((ShortCutItem *)v4);
        goto LABEL_12;
      case 2u:
        v6 = operator new(0xCu);
        if ( !v6 )
          goto LABEL_11;
        ShortCutInvPosItem::ShortCutInvPosItem((ShortCutInvPosItem *)v5);
        goto LABEL_12;
      case 3u:
        v5 = ShortCutMgr::CreateShortCut(this, ITEM);
        goto LABEL_12;
      case 4u:
      case 5u:
      case 6u:
        v7 = operator new(0x14u);
        if ( v7 )
          ShortCutAction::ShortCutAction((ShortCutAction *)v5);
        else
LABEL_11:
          v5 = 0;
LABEL_12:
        v8 = v5;
        if ( v5 )
        {
          v5->baseclass_0.vfptr[4].__vecDelDtor((NiRefObject *)v5, (unsigned int)pkData);
          ShortCutMgr::SetShortCut(v2, v8, pkData->nSlotNo, 0);
        }
        break;
      default:
        break;
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061C650) --------------------------------------------------------
unsigned int __cdecl UserTrade::GetMyInvIndex(unsigned int uiIndex)
{
  unsigned int result; // eax@2

  if ( uiIndex < 0xC )
    result = UserTrade::ms_auiInventoryIndex[uiIndex];
  else
    result = -1;
  return result;
}
// AA2464: using guessed type int UserTrade__ms_auiInventoryIndex[];

//----- (0061C670) --------------------------------------------------------
void __cdecl UserTrade::LockOpp(bool b)
{
  UserTrade::ms_bOppLock = b;
}
// AA2494: using guessed type char UserTrade__ms_bOppLock;

//----- (0061C680) --------------------------------------------------------
void __cdecl UserTrade::LockMy(bool b)
{
  UserTrade::ms_bMyLock = b;
}
// AA2495: using guessed type char UserTrade__ms_bMyLock;

//----- (0061C690) --------------------------------------------------------
bool __cdecl UserTrade::GetLockOpp()
{
  return UserTrade::ms_bOppLock;
}
// AA2494: using guessed type char UserTrade__ms_bOppLock;

//----- (0061C6A0) --------------------------------------------------------
bool __cdecl UserTrade::GetLockMy()
{
  return UserTrade::ms_bMyLock;
}
// AA2495: using guessed type char UserTrade__ms_bMyLock;

//----- (0061C6B0) --------------------------------------------------------
void __cdecl UserTrade::AgreeOpp(bool b)
{
  UserTrade::ms_bOppAgree = b;
}
// AA2496: using guessed type char UserTrade__ms_bOppAgree;

//----- (0061C6C0) --------------------------------------------------------
bool __cdecl UserTrade::GetAgreeOpp()
{
  return UserTrade::ms_bOppAgree;
}
// AA2496: using guessed type char UserTrade__ms_bOppAgree;

//----- (0061C6D0) --------------------------------------------------------
bool __cdecl UserTrade::IsProposing()
{
  return UserTrade::ms_bProposing;
}
// AA2497: using guessed type char UserTrade__ms_bProposing;

//----- (0061C6E0) --------------------------------------------------------
void __cdecl UserTrade::SetProposing(bool bPropose)
{
  UserTrade::ms_bProposing = bPropose;
}
// AA2497: using guessed type char UserTrade__ms_bProposing;

//----- (0061C6F0) --------------------------------------------------------
bool __cdecl UserTrade::IsTrading()
{
  return UserTrade::ms_bTrading;
}
// AA2498: using guessed type char UserTrade__ms_bTrading;

//----- (0061C700) --------------------------------------------------------
void __cdecl UserTrade::SetTrading(bool bTrading)
{
  UserTrade::ms_bTrading = bTrading;
}
// AA2498: using guessed type char UserTrade__ms_bTrading;

//----- (0061C710) --------------------------------------------------------
void __cdecl UserTrade::Clear()
{
  unsigned int v0; // esi@1
  int v1; // edi@2
  int v2; // edi@7

  v0 = 0;
  do
  {
    v1 = UserTrade::ms_aspOppInv[v0];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      UserTrade::ms_aspOppInv[v0] = 0;
    }
    v2 = UserTrade::ms_aspMyInv[v0];
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      UserTrade::ms_aspMyInv[v0] = 0;
    }
    UserTrade::ms_auiInventoryIndex[v0] = 0;
    ++v0;
  }
  while ( v0 < 12 );
  UserTrade::ms_bOppLock = 0;
  UserTrade::ms_bMyLock = 0;
  UserTrade::ms_bOppAgree = 0;
  UserTrade::ms_bProposing = 0;
}
// AA2464: using guessed type int UserTrade__ms_auiInventoryIndex[];
// AA2494: using guessed type char UserTrade__ms_bOppLock;
// AA2495: using guessed type char UserTrade__ms_bMyLock;
// AA2496: using guessed type char UserTrade__ms_bOppAgree;
// AA2497: using guessed type char UserTrade__ms_bProposing;
// AA249C: using guessed type int UserTrade__ms_aspOppInv[];
// AA24CC: using guessed type int UserTrade__ms_aspMyInv[];

//----- (0061C7B0) --------------------------------------------------------
Item *__cdecl UserTrade::GetOpp(unsigned int uiIndex)
{
  Item *result; // eax@2

  if ( uiIndex < 0xC )
    result = (Item *)UserTrade::ms_aspOppInv[uiIndex];
  else
    result = 0;
  return result;
}
// AA249C: using guessed type int UserTrade__ms_aspOppInv[];

//----- (0061C7D0) --------------------------------------------------------
Item *__cdecl UserTrade::GetMy(unsigned int uiIndex)
{
  Item *result; // eax@2

  if ( uiIndex < 0xC )
    result = (Item *)UserTrade::ms_aspMyInv[uiIndex];
  else
    result = 0;
  return result;
}
// AA24CC: using guessed type int UserTrade__ms_aspMyInv[];

//----- (0061C7F0) --------------------------------------------------------
void __cdecl UserTrade::AddOpp(Item *pkItem, unsigned int uiIndex)
{
  int v2; // esi@2

  if ( uiIndex < 0xC )
  {
    v2 = UserTrade::ms_aspOppInv[uiIndex];
    if ( (Item *)v2 != pkItem )
    {
      if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      UserTrade::ms_aspOppInv[uiIndex] = (int)pkItem;
      if ( pkItem )
        InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
    }
  }
}
// AA249C: using guessed type int UserTrade__ms_aspOppInv[];

//----- (0061C850) --------------------------------------------------------
void __cdecl UserTrade::AddMy(Item *pkItem, unsigned int uiIndex, unsigned int uiInventoryIndex)
{
  int v3; // esi@2

  if ( uiIndex < 0xC )
  {
    v3 = UserTrade::ms_aspMyInv[uiIndex];
    if ( (Item *)v3 != pkItem )
    {
      if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      UserTrade::ms_aspMyInv[uiIndex] = (int)pkItem;
      if ( pkItem )
        InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
    }
    UserTrade::ms_auiInventoryIndex[uiIndex] = uiInventoryIndex;
  }
}
// AA2464: using guessed type int UserTrade__ms_auiInventoryIndex[];
// AA24CC: using guessed type int UserTrade__ms_aspMyInv[];

//----- (0061C8B0) --------------------------------------------------------
void __cdecl UserTrade::RemoveOpp(unsigned int uiIndex)
{
  int v1; // esi@2

  if ( uiIndex < 0xC )
  {
    v1 = UserTrade::ms_aspOppInv[uiIndex];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      {
        if ( v1 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      }
      UserTrade::ms_aspOppInv[uiIndex] = 0;
    }
  }
}
// AA249C: using guessed type int UserTrade__ms_aspOppInv[];

//----- (0061C900) --------------------------------------------------------
unsigned int __cdecl UserTrade::RemoveMy(unsigned int uiIndex)
{
  unsigned int result; // eax@2
  int v2; // esi@3

  if ( uiIndex < 0xC )
  {
    v2 = UserTrade::ms_aspMyInv[uiIndex];
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
      UserTrade::ms_aspMyInv[uiIndex] = 0;
    }
    result = UserTrade::ms_auiInventoryIndex[uiIndex];
  }
  else
  {
    result = -1;
  }
  return result;
}
// AA2464: using guessed type int UserTrade__ms_auiInventoryIndex[];
// AA24CC: using guessed type int UserTrade__ms_aspMyInv[];

//----- (0061C950) --------------------------------------------------------
unsigned int __cdecl UserTrade::GetEmptyMy()
{
  unsigned int result; // eax@1

  result = 0;
  while ( UserTrade::ms_aspMyInv[result] )
  {
    ++result;
    if ( result >= 0xC )
      return -1;
  }
  return result;
}
// AA24CC: using guessed type int UserTrade__ms_aspMyInv[];

//----- (0061C970) --------------------------------------------------------
int __thiscall CWayPoint::Init(CWayPoint *this, int nDotCnt, int nMapCnt, int nMaxCanUseGateCnt)
{
  int v4; // ebx@1
  CWayPoint *v5; // esi@1
  void *v6; // eax@5
  int v8; // eax@9
  void *nDotCnta; // [sp+14h] [bp+8h]@4

  v4 = nDotCnt;
  v5 = this;
  if ( nDotCnt <= 0
    || nMapCnt <= 0
    || nMaxCanUseGateCnt <= 0
    || (nDotCnta = malloc(44 * nDotCnt), (v5->m_pDotData = (MAP_DOT *)nDotCnta) == 0) )
    return 0;
  v6 = malloc(20 * nMapCnt);
  v5->m_pMapData = (MAP *)v6;
  if ( !v6 )
  {
    free(nDotCnta);
    return 0;
  }
  v5->m_nMaxDotCnt = v4;
  v5->m_nMaxMapCnt = nMapCnt;
  v5->m_nMaxCanUseGateCnt = nMaxCanUseGateCnt;
  v5->m_nAddDotCnt = 0;
  v5->m_nAddMapCnt = 0;
  if ( v4 > 0 )
  {
    v8 = 0;
    do
    {
      v5->m_pDotData[v8].nDotNo = -1;
      v5->m_pDotData[v8].nMapID = -1;
      v5->m_pDotData[v8].X = -1;
      v5->m_pDotData[v8].Y = -1;
      v5->m_pDotData[v8].DotType = 0;
      v5->m_pDotData[v8].BFS_Data.nSearchNo = -1;
      v5->m_pDotData[v8].BFS_Data.BFSDotStatus = 0;
      v5->m_pDotData[v8].pNextLink = 0;
      ++v8;
      --v4;
    }
    while ( v4 );
  }
  return 1;
}

//----- (0061CA40) --------------------------------------------------------
int __thiscall CWayPoint::ErrorCheck(CWayPoint *this)
{
  int result; // eax@2
  int v2; // edx@4
  int v3; // eax@5

  if ( this->m_pDotData
    && this->m_pMapData
    && (v2 = this->m_nMaxDotCnt, v2 > 0)
    && (v3 = this->m_nMaxMapCnt, v3 > 0)
    && this->m_nAddDotCnt <= v2 )
    result = this->m_nAddMapCnt <= v3;
  else
    result = 0;
  return result;
}

//----- (0061CA70) --------------------------------------------------------
int __thiscall CWayPoint::Get_LastError(CWayPoint *this)
{
  int result; // eax@1

  result = this->m_nLastError;
  this->m_nLastError = 0;
  return result;
}

//----- (0061CA80) --------------------------------------------------------
void __thiscall CMinWeightSort::CMinWeightSort(CMinWeightSort *this)
{
  this->m_pLinkSort = 0;
}

//----- (0061CA90) --------------------------------------------------------
void __thiscall CMinWeightSort::_CMinWeightSort(CMinWeightSort *this)
{
  CMinWeightSort *v1; // esi@1
  void *v2; // ST00_4@2

  v1 = this;
  while ( v1->m_pLinkSort )
  {
    v2 = v1->m_pLinkSort;
    v1->m_pLinkSort = v1->m_pLinkSort->pNext;
    free(v2);
  }
  v1->m_pLinkSort = 0;
}

//----- (0061CAC0) --------------------------------------------------------
int __thiscall CMinWeightSort::Del_SameWeightDot(CMinWeightSort *this, MAP_DOT *pDot)
{
  WeightSortLink *v3; // edx@4
  WeightSortLink *v4; // eax@4

  if ( !pDot )
    return 0;
  if ( this->m_pLinkSort )
  {
    v3 = 0;
    v4 = this->m_pLinkSort;
    while ( v4->pDot != pDot )
    {
      v3 = v4;
      v4 = v4->pNext;
      if ( !v4 )
        return 1;
    }
    if ( !v3 )
    {
      this->m_pLinkSort = this->m_pLinkSort->pNext;
      free(v4);
      return 1;
    }
    v3->pNext = v4->pNext;
    free(v4);
  }
  return 1;
}

//----- (0061CB30) --------------------------------------------------------
int __thiscall CMinWeightSort::Add_WeightDot(CMinWeightSort *this, MAP_DOT *pDot, int nFromDotNo, int nFromDotWeight, int nLinkWeight, int nSearchNo)
{
  void *v7; // eax@8
  WeightSortLink *v8; // edx@10
  WeightSortLink *v9; // ecx@12
  WeightSortLink *v10; // esi@12
  CMinWeightSort *v11; // [sp+4h] [bp-4h]@1

  v11 = this;
  if ( !pDot )
    return 0;
  if ( nFromDotWeight < 0 )
    return 0;
  if ( nLinkWeight < 0 )
    return 0;
  if ( pDot->BFS_Data.nSearchNo != nSearchNo || pDot->BFS_Data.nMinWeightSum >= nFromDotWeight + nLinkWeight )
  {
    v7 = malloc(8u);
    if ( !v7 )
      return 0;
    *((_DWORD *)v7 + 1) = 0;
    *(_DWORD *)v7 = pDot;
    pDot->BFS_Data.nSearchNo = nSearchNo;
    pDot->BFS_Data.nFromDot = nFromDotNo;
    pDot->BFS_Data.nMinWeightSum = nFromDotWeight + nLinkWeight;
    pDot->BFS_Data.BFSDotStatus = 1;
    v8 = v11->m_pLinkSort;
    if ( !v11->m_pLinkSort )
    {
      v11->m_pLinkSort = (WeightSortLink *)v7;
      return 1;
    }
    v9 = v11->m_pLinkSort;
    v10 = 0;
    if ( v8 )
    {
      do
      {
        if ( v9->pDot->BFS_Data.nMinWeightSum > nFromDotWeight + nLinkWeight )
          break;
        v10 = v9;
        v9 = v9->pNext;
      }
      while ( v9 );
    }
    if ( !v10 )
    {
      *((_DWORD *)v7 + 1) = v8;
      v11->m_pLinkSort = (WeightSortLink *)v7;
      return 1;
    }
    if ( v9 )
      *((_DWORD *)v7 + 1) = v9;
    v10->pNext = (WeightSortLink *)v7;
  }
  return 1;
}

//----- (0061CC10) --------------------------------------------------------
int __thiscall CMinWeightSort::Get_MinWeightDot(CMinWeightSort *this, MAP_DOT **pDot)
{
  int result; // eax@2
  void *v3; // eax@3

  if ( pDot )
  {
    v3 = this->m_pLinkSort;
    if ( this->m_pLinkSort )
    {
      *(_DWORD *)(*(_DWORD *)v3 + 36) = 2;
      *pDot = this->m_pLinkSort->pDot;
      this->m_pLinkSort = this->m_pLinkSort->pNext;
      free(v3);
      result = 1;
    }
    else
    {
      *pDot = 0;
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061CC60) --------------------------------------------------------
void __thiscall CMinWeightPath::CMinWeightPath(CMinWeightPath *this)
{
  this->m_pWeightPath = 0;
}

//----- (0061CC70) --------------------------------------------------------
void __thiscall CMinWeightPath::_CMinWeightPath(CMinWeightPath *this)
{
  CMinWeightPath *v1; // esi@1
  void *v2; // ST00_4@2

  v1 = this;
  while ( v1->m_pWeightPath )
  {
    v2 = v1->m_pWeightPath;
    v1->m_pWeightPath = v1->m_pWeightPath->pNext;
    free(v2);
  }
  v1->m_pWeightPath = 0;
}

//----- (0061CCA0) --------------------------------------------------------
int __thiscall CMinWeightPath::Init(CMinWeightPath *this)
{
  CMinWeightPath *v1; // esi@1
  void *v2; // ST00_4@2

  v1 = this;
  while ( v1->m_pWeightPath )
  {
    v2 = v1->m_pWeightPath;
    v1->m_pWeightPath = v1->m_pWeightPath->pNext;
    free(v2);
  }
  v1->m_pWeightPath = 0;
  return 1;
}

//----- (0061CCD0) --------------------------------------------------------
int __thiscall CMinWeightPath::Add_PathDot(CMinWeightPath *this, MAP_DOT *pDot)
{
  CMinWeightPath *v2; // esi@1
  int result; // eax@1

  v2 = this;
  result = (int)malloc(8u);
  if ( result )
  {
    *(_DWORD *)result = pDot;
    *(_DWORD *)(result + 4) = 0;
    if ( v2->m_pWeightPath )
      *(_DWORD *)(result + 4) = v2->m_pWeightPath;
    v2->m_pWeightPath = (WeightPath *)result;
    result = 1;
  }
  return result;
}

//----- (0061CD10) --------------------------------------------------------
int __thiscall CMinWeightPath::Get_PathDot(CMinWeightPath *this, MAP_DOT **pDot)
{
  int result; // eax@2
  void *v3; // ST00_4@3

  if ( this->m_pWeightPath )
  {
    *pDot = this->m_pWeightPath->pDot;
    v3 = this->m_pWeightPath;
    this->m_pWeightPath = this->m_pWeightPath->pNext;
    free(v3);
    result = 1;
  }
  else
  {
    *pDot = 0;
    result = 1;
  }
  return result;
}

//----- (0061CD50) --------------------------------------------------------
void __thiscall CWayPoint::CWayPoint(CWayPoint *this)
{
  this->m_MinWeightPath.m_pWeightPath = 0;
  this->m_nMaxDotCnt = 0;
  this->m_nMaxMapCnt = 0;
  this->m_nAddDotCnt = 0;
  this->m_nAddMapCnt = 0;
  this->m_pDotData = 0;
  this->m_pMapData = 0;
  this->m_nSearchNo = 0;
  this->m_nLastError = 0;
}

//----- (0061CD70) --------------------------------------------------------
void __thiscall CWayPoint::_CWayPoint(CWayPoint *this)
{
  CWayPoint *v1; // esi@1
  void *v2; // ST00_4@2

  v1 = this;
  while ( v1->m_MinWeightPath.m_pWeightPath )
  {
    v2 = v1->m_MinWeightPath.m_pWeightPath;
    v1->m_MinWeightPath.m_pWeightPath = v1->m_MinWeightPath.m_pWeightPath->pNext;
    free(v2);
  }
  v1->m_MinWeightPath.m_pWeightPath = 0;
}

//----- (0061CDB0) --------------------------------------------------------
int __thiscall CWayPoint::Add_Map(CWayPoint *this, char *pMapName, int nMapID, WPMType nWPMType)
{
  CWayPoint *v4; // esi@1
  MAP *v5; // eax@2
  int v6; // ecx@3
  int v7; // edx@4
  int v8; // ecx@6
  int result; // eax@7
  int v10; // edi@11
  int v11; // ebx@12

  v4 = this;
  if ( this->m_pDotData
    && (v5 = this->m_pMapData) != 0
    && (v6 = this->m_nMaxDotCnt, v6 > 0)
    && (v7 = v4->m_nMaxMapCnt, v7 > 0)
    && v4->m_nAddDotCnt <= v6
    && (v8 = v4->m_nAddMapCnt, v8 <= v7)
    && pMapName
    && nMapID >= 0
    && v8 < v7 )
  {
    v10 = 0;
    if ( v8 <= 0 )
    {
LABEL_16:
      strncpy(v4->m_pMapData[v4->m_nAddMapCnt].sMapName, pMapName, 0xCu);
      v4->m_pMapData[v10].nMapID = nMapID;
      v4->m_pMapData[v10].nWPMType = nWPMType;
      result = 1;
      ++v4->m_nAddMapCnt;
    }
    else
    {
      v11 = 0;
      while ( strncmp(pMapName, v5[v11].sMapName, 0xCu) )
      {
        v5 = v4->m_pMapData;
        if ( v5[v11].nMapID == nMapID )
          break;
        ++v10;
        ++v11;
        if ( v10 >= v4->m_nAddMapCnt )
          goto LABEL_16;
      }
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061CE80) --------------------------------------------------------
int __thiscall CWayPoint::Get_IsValid_Dot(CWayPoint *this, int nDotNo)
{
  MAP_DOT *v2; // edi@1
  int v3; // eax@3
  int v4; // edx@4
  int v5; // esi@5
  DOT_TYPE v6; // edx@9
  int result; // eax@11

  v2 = this->m_pDotData;
  if ( v2
    && this->m_pMapData
    && (v3 = this->m_nMaxDotCnt, v3 > 0)
    && (v4 = this->m_nMaxMapCnt, v4 > 0)
    && (v5 = this->m_nAddDotCnt, v5 <= v3)
    && this->m_nAddMapCnt <= v4
    && nDotNo >= 0
    && nDotNo < v5
    && ((v6 = v2[nDotNo].DotType, v6 == 1) || v6 == 2) )
    result = v2[nDotNo].nDotNo == nDotNo;
  else
    result = 0;
  return result;
}

//----- (0061CEF0) --------------------------------------------------------
int __thiscall CWayPoint::Get_IsValid_MapName(CWayPoint *this, char *pMapName)
{
  CWayPoint *v2; // esi@1
  int v3; // eax@3
  int v4; // ecx@4
  int v5; // eax@6
  int result; // eax@7
  int v7; // ebx@9
  int v8; // edi@10

  v2 = this;
  if ( this->m_pDotData
    && this->m_pMapData
    && (v3 = this->m_nMaxDotCnt, v3 > 0)
    && (v4 = this->m_nMaxMapCnt, v4 > 0)
    && v2->m_nAddDotCnt <= v3
    && (v5 = v2->m_nAddMapCnt, v5 <= v4)
    && pMapName )
  {
    v7 = 0;
    if ( v5 <= 0 )
    {
LABEL_13:
      result = 0;
    }
    else
    {
      v8 = 0;
      while ( strncmp(pMapName, v2->m_pMapData[v8].sMapName, 0xCu) )
      {
        ++v7;
        ++v8;
        if ( v7 >= v2->m_nAddMapCnt )
          goto LABEL_13;
      }
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061CF70) --------------------------------------------------------
int __thiscall CWayPoint::Get_IsValid_MapID(CWayPoint *this, int nMapID)
{
  MAP *v2; // edx@2
  int v3; // esi@3
  int v4; // eax@4
  int v5; // ecx@6
  int result; // eax@7

  if ( !this->m_pDotData
    || (v2 = this->m_pMapData) == 0
    || (v3 = this->m_nMaxDotCnt, v3 <= 0)
    || (v4 = this->m_nMaxMapCnt, v4 <= 0)
    || this->m_nAddDotCnt > v3
    || (v5 = this->m_nAddMapCnt, v5 > v4) )
    goto LABEL_11;
  result = 0;
  if ( nMapID < 0 )
    return result;
  if ( v5 > 0 )
  {
    while ( v2->nMapID != nMapID )
    {
      ++result;
      ++v2;
      if ( result >= v5 )
        goto LABEL_11;
    }
    result = 1;
  }
  else
  {
LABEL_11:
    result = 0;
  }
  return result;
}

//----- (0061CFD0) --------------------------------------------------------
int __thiscall CWayPoint::Get_Dot(CWayPoint *this, int nDotNo, MAP_DOT **pDot)
{
  MAP_DOT *v3; // edi@1
  int v4; // eax@3
  int v5; // edx@4
  int v6; // esi@5
  int result; // eax@10

  v3 = this->m_pDotData;
  if ( v3
    && this->m_pMapData
    && (v4 = this->m_nMaxDotCnt, v4 > 0)
    && (v5 = this->m_nMaxMapCnt, v5 > 0)
    && (v6 = this->m_nAddDotCnt, v6 <= v4)
    && this->m_nAddMapCnt <= v5
    && nDotNo >= 0
    && nDotNo < v6
    && pDot )
  {
    *pDot = &v3[nDotNo];
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D030) --------------------------------------------------------
int __thiscall CWayPoint::Get_MapName(CWayPoint *this, int nMapID, char *pMapName)
{
  MAP *v3; // ebx@2
  int v4; // edx@3
  int v5; // eax@4
  int v6; // ecx@6
  int result; // eax@7
  MAP *v8; // edx@11

  if ( this->m_pDotData
    && (v3 = this->m_pMapData) != 0
    && (v4 = this->m_nMaxDotCnt, v4 > 0)
    && (v5 = this->m_nMaxMapCnt, v5 > 0)
    && this->m_nAddDotCnt <= v4
    && (v6 = this->m_nAddMapCnt, v6 <= v5) )
  {
    result = 0;
    if ( nMapID >= 0 && pMapName )
    {
      if ( v6 <= 0 )
      {
LABEL_14:
        result = 0;
      }
      else
      {
        v8 = v3;
        while ( v8->nMapID != nMapID )
        {
          ++result;
          ++v8;
          if ( result >= v6 )
            goto LABEL_14;
        }
        strncpy(pMapName, v3[result].sMapName, 0xCu);
        result = 1;
      }
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D0C0) --------------------------------------------------------
int __thiscall CWayPoint::Get_MapID(CWayPoint *this, char *pMapName, int *pMapID)
{
  CWayPoint *v3; // esi@1
  int v4; // ecx@3
  int v5; // eax@4
  int v6; // ecx@6
  int result; // eax@7
  int v8; // edi@10
  int v9; // ebx@11

  v3 = this;
  if ( this->m_pDotData
    && this->m_pMapData
    && (v4 = this->m_nMaxDotCnt, v4 > 0)
    && (v5 = v3->m_nMaxMapCnt, v5 > 0)
    && v3->m_nAddDotCnt <= v4
    && (v6 = v3->m_nAddMapCnt, v6 <= v5)
    && pMapName
    && pMapID )
  {
    v8 = 0;
    if ( v6 <= 0 )
    {
LABEL_14:
      result = 0;
    }
    else
    {
      v9 = 0;
      while ( strncmp(pMapName, v3->m_pMapData[v9].sMapName, 0xCu) )
      {
        ++v8;
        ++v9;
        if ( v8 >= v3->m_nAddMapCnt )
          goto LABEL_14;
      }
      *pMapID = v3->m_pMapData[v8].nMapID;
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D160) --------------------------------------------------------
int __thiscall CWayPoint::Get_MapType(CWayPoint *this, int nMapID, WPMType *pWPMType)
{
  MAP *v3; // ebx@2
  int v4; // edx@3
  int v5; // eax@4
  int v6; // ecx@6
  int result; // eax@7
  MAP *v8; // edx@11

  if ( this->m_pDotData
    && (v3 = this->m_pMapData) != 0
    && (v4 = this->m_nMaxDotCnt, v4 > 0)
    && (v5 = this->m_nMaxMapCnt, v5 > 0)
    && this->m_nAddDotCnt <= v4
    && (v6 = this->m_nAddMapCnt, v6 <= v5) )
  {
    result = 0;
    if ( nMapID >= 0 && pWPMType )
    {
      if ( v6 <= 0 )
      {
LABEL_14:
        result = 0;
      }
      else
      {
        v8 = v3;
        while ( v8->nMapID != nMapID )
        {
          ++result;
          ++v8;
          if ( result >= v6 )
            goto LABEL_14;
        }
        *pWPMType = v3[result].nWPMType;
        result = 1;
      }
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D1E0) --------------------------------------------------------
int __thiscall CWayPoint::Get_MapType(CWayPoint *this, char *pMapName, WPMType *pWPMType)
{
  CWayPoint *v3; // esi@1
  int v4; // ecx@3
  int v5; // eax@4
  int v6; // ecx@6
  int result; // eax@7
  int v8; // edi@10
  int v9; // ebx@11

  v3 = this;
  if ( this->m_pDotData
    && this->m_pMapData
    && (v4 = this->m_nMaxDotCnt, v4 > 0)
    && (v5 = v3->m_nMaxMapCnt, v5 > 0)
    && v3->m_nAddDotCnt <= v4
    && (v6 = v3->m_nAddMapCnt, v6 <= v5)
    && pMapName
    && pWPMType )
  {
    v8 = 0;
    if ( v6 <= 0 )
    {
LABEL_14:
      result = 0;
    }
    else
    {
      v9 = 0;
      while ( strncmp(pMapName, v3->m_pMapData[v9].sMapName, 0xCu) )
      {
        ++v8;
        ++v9;
        if ( v8 >= v3->m_nAddMapCnt )
          goto LABEL_14;
      }
      *pWPMType = v3->m_pMapData[v8].nWPMType;
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D280) --------------------------------------------------------
int __thiscall CWayPoint::Make_BFS_DotList(CWayPoint *this, int nStartDot, int nEndDot)
{
  CWayPoint *v3; // edi@1
  int v4; // eax@3
  int v5; // ecx@4
  int v6; // ebx@5
  int v8; // eax@8
  int v9; // esi@8
  int v10; // eax@14
  int v11; // ecx@15
  int v12; // eax@23
  int i; // ebx@25
  int v14; // esi@26
  int v15; // ecx@28
  int v16; // eax@40
  int v17; // ebx@40
  int v18; // esi@40
  int v19; // ecx@44
  int v20; // ecx@46
  int v21; // edx@49
  bool v22; // zf@49
  bool v23; // sf@49
  unsigned __int8 v24; // of@49
  int v25; // ebx@54
  int v26; // ebx@55
  int v27; // [sp-8h] [bp-18h]@31
  int pNextDot; // [sp+8h] [bp-8h]@26
  CMinWeightSort MinWeightSort; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v22 = this->m_pDotData == 0;
  MinWeightSort.m_pLinkSort = 0;
  if ( v22
    || !this->m_pMapData
    || (v4 = this->m_nMaxDotCnt, v4 <= 0)
    || (v5 = this->m_nMaxMapCnt, v5 <= 0)
    || (v6 = v3->m_nAddDotCnt, v6 > v4)
    || v3->m_nAddMapCnt > v5 )
    return 0;
  v8 = nEndDot;
  v9 = nStartDot;
  v3->m_nLastError = 0;
  if ( v9 == v8 )
    return 0;
  if ( v9 < 0 || v8 < 0 || v9 >= v6 || v8 >= v6 )
  {
LABEL_37:
    CMinWeightSort::_CMinWeightSort(&MinWeightSort);
    return 0;
  }
  if ( !CWayPoint::Get_Dot(v3, v8, (MAP_DOT **)&nStartDot) )
    goto LABEL_36;
  v10 = nStartDot;
  if ( !*(_DWORD *)(nStartDot + 20) )
  {
    v11 = 0;
    if ( v6 > 0 )
    {
      do
      {
        if ( *(_DWORD *)(v10 + 20) == 1 )
        {
          *(_DWORD *)(v10 + 24) = v3->m_nSearchNo;
          *(_DWORD *)(v10 + 28) = 0;
        }
        ++v11;
      }
      while ( v11 < v3->m_nAddDotCnt );
    }
  }
  if ( !CWayPoint::Get_Dot(v3, v9, (MAP_DOT **)&nStartDot) )
    goto LABEL_37;
  if ( !CMinWeightSort::Add_WeightDot(&MinWeightSort, (MAP_DOT *)nStartDot, -1, 0, 0, v3->m_nSearchNo) )
  {
    ++v3->m_nSearchNo;
    CMinWeightSort::_CMinWeightSort(&MinWeightSort);
    return 0;
  }
  if ( !CMinWeightSort::Get_MinWeightDot(&MinWeightSort, (MAP_DOT **)&nStartDot) )
    goto LABEL_36;
  while ( 1 )
  {
    v12 = nStartDot;
    if ( !nStartDot )
      break;
    if ( *(_DWORD *)nStartDot == nEndDot )
      break;
    for ( i = *(_DWORD *)(nStartDot + 40); i; i = *(_DWORD *)(i + 12) )
    {
      v14 = *(_DWORD *)(i + 8);
      pNextDot = v14;
      if ( !v14 )
        goto LABEL_36;
      if ( *(_DWORD *)(v14 + 24) == v3->m_nSearchNo )
      {
        v15 = *(_DWORD *)(v14 + 36);
        if ( v15 == 2 || v15 != 1 || *(_DWORD *)(v14 + 28) <= *(_DWORD *)(v12 + 28) + *(_DWORD *)i )
          continue;
        CMinWeightSort::Del_SameWeightDot(&MinWeightSort, (MAP_DOT *)v14);
        v27 = v3->m_nSearchNo;
        v12 = nStartDot;
      }
      else
      {
        v27 = v3->m_nSearchNo;
      }
      CMinWeightSort::Add_WeightDot(
        &MinWeightSort,
        (MAP_DOT *)v14,
        *(_DWORD *)v12,
        *(_DWORD *)(v12 + 28),
        *(_DWORD *)i,
        v27);
      v12 = nStartDot;
    }
    if ( !CMinWeightSort::Get_MinWeightDot(&MinWeightSort, (MAP_DOT **)&nStartDot) )
      goto LABEL_36;
  }
  if ( !CWayPoint::Get_Dot(v3, nEndDot, (MAP_DOT **)&nStartDot) )
    goto LABEL_36;
  v16 = nStartDot;
  v17 = *(_DWORD *)(nStartDot + 4);
  v18 = 0;
  if ( *(_DWORD *)(nStartDot + 24) != v3->m_nSearchNo )
    goto LABEL_47;
  while ( 1 )
  {
    if ( v17 != *(_DWORD *)(v16 + 4) && *(_DWORD *)(v16 + 16) == 2 )
    {
      ++v18;
      v17 = *(_DWORD *)(v16 + 4);
    }
    v19 = *(_DWORD *)(v16 + 32);
    if ( v19 == -1 )
      break;
    if ( CWayPoint::Get_Dot(v3, v19, (MAP_DOT **)&pNextDot) )
    {
      v16 = pNextDot;
      v20 = *(_DWORD *)(pNextDot + 24);
      nStartDot = pNextDot;
      if ( v20 == v3->m_nSearchNo )
        continue;
    }
    goto LABEL_47;
  }
  if ( *(_DWORD *)(v16 + 20) == 1 )
  {
    v21 = v3->m_nMaxCanUseGateCnt + 1;
    v24 = __OFSUB__(v18, v21);
    v22 = v18 == v21;
    v23 = v18 - v21 < 0;
  }
  else
  {
    v24 = __OFSUB__(v18, v3->m_nMaxCanUseGateCnt);
    v22 = v18 == v3->m_nMaxCanUseGateCnt;
    v23 = v18 - v3->m_nMaxCanUseGateCnt < 0;
  }
  if ( !((unsigned __int8)(v23 ^ v24) | v22) )
  {
    ++v3->m_nSearchNo;
    v3->m_nLastError = 100;
    CMinWeightSort::_CMinWeightSort(&MinWeightSort);
    return 0;
  }
  if ( !CWayPoint::Get_Dot(v3, nEndDot, (MAP_DOT **)&nStartDot) )
  {
LABEL_47:
    ++v3->m_nSearchNo;
    CMinWeightSort::_CMinWeightSort(&MinWeightSort);
    return 0;
  }
  CMinWeightPath::Init(&v3->m_MinWeightPath);
  v25 = nStartDot;
  if ( *(_DWORD *)(nStartDot + 24) != v3->m_nSearchNo )
  {
LABEL_36:
    ++v3->m_nSearchNo;
    goto LABEL_37;
  }
  while ( 1 )
  {
    CMinWeightPath::Add_PathDot(&v3->m_MinWeightPath, (MAP_DOT *)v25);
    v26 = *(_DWORD *)(v25 + 32);
    if ( v26 == -1 )
      break;
    if ( CWayPoint::Get_Dot(v3, v26, (MAP_DOT **)&pNextDot) )
    {
      v25 = pNextDot;
      if ( *(_DWORD *)(pNextDot + 24) == v3->m_nSearchNo )
        continue;
    }
    goto LABEL_36;
  }
  ++v3->m_nSearchNo;
  CMinWeightSort::_CMinWeightSort(&MinWeightSort);
  return 1;
}

//----- (0061D560) --------------------------------------------------------
int __thiscall CWayPoint::Add_Dot(CWayPoint *this, int nMapID, int X, int Y, DOT_TYPE DotType)
{
  CWayPoint *v5; // esi@1
  int v6; // eax@3
  int v7; // ecx@4
  int v8; // edi@5
  int result; // eax@7
  int v10; // ebx@8

  v5 = this;
  if ( this->m_pDotData
    && this->m_pMapData
    && (v6 = this->m_nMaxDotCnt, v6 > 0)
    && (v7 = this->m_nMaxMapCnt, v7 > 0)
    && (v8 = v5->m_nAddDotCnt, v8 <= v6)
    && v5->m_nAddMapCnt <= v7 )
  {
    v10 = nMapID;
    if ( (__PAIR__(X, nMapID) & 0x8000000000000000ui64) == 0i64
      && Y >= 0
      && (DotType == 1 || DotType == 2)
      && CWayPoint::Get_IsValid_MapID(v5, nMapID)
      && CWayPoint::Get_MapType(v5, v10, (WPMType *)&nMapID) )
    {
      v5->m_pDotData[v8].nDotNo = v8;
      v5->m_pDotData[v5->m_nAddDotCnt].nMapID = v10;
      v5->m_pDotData[v5->m_nAddDotCnt].X = X;
      v5->m_pDotData[v5->m_nAddDotCnt].Y = Y;
      v5->m_pDotData[v5->m_nAddDotCnt].DotType = DotType;
      v5->m_pDotData[v5->m_nAddDotCnt].nWPMType = nMapID;
      result = 1;
      v5->m_pDotData[v5->m_nAddDotCnt++].pNextLink = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D660) --------------------------------------------------------
int __thiscall CWayPoint::Add_Link(CWayPoint *this, int nLinkDot_1, int nLinkDot_2, LINK_TYPE LinkType, int nWeight)
{
  CWayPoint *v5; // esi@1
  int v6; // eax@3
  int v7; // edx@4
  int v8; // ecx@5
  int result; // eax@7
  int v10; // edi@10
  int v11; // esi@15
  int v12; // ebx@15
  int v13; // ecx@17
  int v14; // eax@17
  void *v15; // eax@20
  int v16; // ecx@21
  void *v17; // edi@23
  void *v18; // eax@24
  int v19; // ecx@27

  v5 = this;
  if ( !this->m_pDotData
    || !this->m_pMapData
    || (v6 = this->m_nMaxDotCnt, v6 <= 0)
    || (v7 = this->m_nMaxMapCnt, v7 <= 0)
    || (v8 = this->m_nAddDotCnt, v8 > v6)
    || v5->m_nAddMapCnt > v7
    || nLinkDot_1 < 0
    || nLinkDot_1 >= v8 )
    return 0;
  v10 = nLinkDot_2;
  if ( nLinkDot_2 >= 0
    && nLinkDot_2 < v8
    && nLinkDot_1 != nLinkDot_2
    && CWayPoint::Get_Dot(v5, nLinkDot_1, (MAP_DOT **)&nLinkDot_1)
    && CWayPoint::Get_Dot(v5, v10, (MAP_DOT **)&nLinkDot_2) )
  {
    v11 = nLinkDot_1;
    v12 = nLinkDot_2;
    if ( nWeight < 0 )
    {
      if ( *(_DWORD *)(nLinkDot_1 + 4) == *(_DWORD *)(nLinkDot_2 + 4) )
      {
        v13 = *(_DWORD *)(nLinkDot_1 + 12) - *(_DWORD *)(nLinkDot_2 + 12);
        v14 = *(_DWORD *)(nLinkDot_1 + 8) - *(_DWORD *)(nLinkDot_2 + 8);
        nWeight = v14 * v14 + v13 * v13;
        *(float *)&nWeight = sqrt((double)nWeight);
        nWeight = (signed int)*(float *)&nWeight;
      }
      else
      {
        *(float *)&nWeight = 0.0;
      }
    }
    if ( LinkType == 1 )
    {
      v15 = malloc(0x10u);
      if ( v15 )
      {
        v16 = nWeight;
        *((_DWORD *)v15 + 2) = v12;
        *(_DWORD *)v15 = v16;
        *((_DWORD *)v15 + 3) = *(_DWORD *)(v11 + 40);
        *(_DWORD *)(v11 + 40) = v15;
        return 1;
      }
      return 0;
    }
    if ( LinkType || (v17 = malloc(0x10u)) == 0 )
      return 0;
    v18 = malloc(0x10u);
    if ( !v18 )
    {
      free(v17);
      return 0;
    }
    v19 = nWeight;
    *((_DWORD *)v17 + 2) = v12;
    *(_DWORD *)v17 = v19;
    *((_DWORD *)v17 + 3) = *(_DWORD *)(v11 + 40);
    *(_DWORD *)(v11 + 40) = v17;
    *((_DWORD *)v18 + 2) = v11;
    *(_DWORD *)v18 = v19;
    *((_DWORD *)v18 + 3) = *(_DWORD *)(v12 + 40);
    *(_DWORD *)(v12 + 40) = v18;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D7D0) --------------------------------------------------------
int __thiscall CWayPoint::Get_BFS_NextDot(CWayPoint *this, int nStartDot, int nEndDot, MAP_DOT **pNextDot)
{
  CWayPoint *v4; // esi@1
  int v5; // eax@3
  int v6; // ecx@4
  int v7; // edx@5

  v4 = this;
  if ( !this->m_pDotData
    || !this->m_pMapData
    || (v5 = this->m_nMaxDotCnt, v5 <= 0)
    || (v6 = this->m_nMaxMapCnt, v6 <= 0)
    || (v7 = v4->m_nAddDotCnt, v7 > v5)
    || v4->m_nAddMapCnt > v6
    || !pNextDot )
    return 0;
  if ( (nStartDot != nEndDot || nStartDot <= 0 || nEndDot <= 0) && nStartDot < v7 && nEndDot < v7 )
  {
    if ( nStartDot >= 0 )
    {
      if ( nEndDot >= 0 )
      {
        CMinWeightPath::Init(&v4->m_MinWeightPath);
        CWayPoint::Make_BFS_DotList(v4, nStartDot, nEndDot);
        return CMinWeightPath::Get_PathDot(&v4->m_MinWeightPath, pNextDot) != 0;
      }
    }
    else
    {
      if ( nEndDot < 0 )
        return CMinWeightPath::Get_PathDot(&v4->m_MinWeightPath, pNextDot) != 0;
    }
  }
  return 0;
}

//----- (0061D880) --------------------------------------------------------
int __thiscall CWayPoint::Add_Dot(CWayPoint *this, char *pMapName, int X, int Y, DOT_TYPE DotType)
{
  CWayPoint *v5; // esi@1
  int v6; // ecx@3
  int v7; // eax@4
  int result; // eax@7
  int v9; // ebx@10
  DOT_TYPE v10; // edi@12

  v5 = this;
  if ( this->m_pDotData
    && this->m_pMapData
    && (v6 = this->m_nMaxDotCnt, v6 > 0)
    && (v7 = v5->m_nMaxMapCnt, v7 > 0)
    && v5->m_nAddDotCnt <= v6
    && v5->m_nAddMapCnt <= v7
    && pMapName
    && X >= 0 )
  {
    v9 = Y;
    if ( Y >= 0 )
    {
      v10 = DotType;
      if ( (DotType == 1 || DotType == 2) && CWayPoint::Get_MapID(v5, pMapName, (int *)&pMapName) )
        result = CWayPoint::Add_Dot(v5, (int)pMapName, X, v9, v10);
      else
        result = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061D910) --------------------------------------------------------
int __thiscall CWayPoint::Get_NearDot(CWayPoint *this, int nMapID, int X, int Y, MAP_DOT **pNearDot)
{
  CWayPoint *v5; // esi@1
  int v6; // edi@1
  int v7; // ecx@3
  int v8; // eax@4
  int v9; // ebx@7
  Name3 *v10; // eax@11
  int v11; // eax@12
  signed int v12; // ebx@13
  int v13; // edx@13
  int v14; // edi@14
  int v15; // ecx@14
  signed int v16; // eax@16
  unsigned int v17; // ecx@16
  int v18; // eax@22
  MAP_DOT *v19; // eax@25
  signed int v21; // eax@36
  int v22; // edx@37
  int v23; // ecx@43
  const unsigned int *v24; // [sp-14h] [bp-490h]@27
  Name3 result; // [sp+0h] [bp-47Ch]@11
  NiPoint2 pos2End; // [sp+Ch] [bp-470h]@25
  std::vector<int,std::allocator<int> > vecCollusionData; // [sp+14h] [bp-468h]@12
  MAP_DOT **v28; // [sp+24h] [bp-458h]@1
  int k; // [sp+28h] [bp-454h]@12
  MAP_DOT *nResultWayCnt; // [sp+2Ch] [bp-450h]@25
  int nNearDotWeight; // [sp+30h] [bp-44Ch]@13
  int *v32; // [sp+34h] [bp-448h]@14
  int nNearDotNo; // [sp+38h] [bp-444h]@13
  char m_bIsFindEndPoint; // [sp+3Fh] [bp-43Dh]@25
  Name3 sMapName; // [sp+40h] [bp-43Ch]@11
  NiPoint2 aPos2Arr[100]; // [sp+4Ch] [bp-430h]@25
  char strMapName[256]; // [sp+36Ch] [bp-110h]@11
  unsigned int v38; // [sp+46Ch] [bp-10h]@1
  int v39; // [sp+478h] [bp-4h]@12
  int v40; // [sp+47Ch] [bp+0h]@1

  v38 = (unsigned int)&v40 ^ __security_cookie;
  v5 = this;
  v6 = 0;
  v28 = pNearDot;
  if ( !this->m_pDotData
    || !this->m_pMapData
    || (v7 = this->m_nMaxDotCnt, v7 <= 0)
    || (v8 = v5->m_nMaxMapCnt, v8 <= 0)
    || v5->m_nAddDotCnt > v7
    || v5->m_nAddMapCnt > v8
    || (v9 = nMapID, (__PAIR__(X, nMapID) & 0x8000000000000000ui64) != 0i64)
    || Y < 0
    || !pNearDot
    || !CWayPoint::Get_IsValid_MapID(v5, nMapID) )
    return 0;
  strMapName[0] = 0;
  memset(&strMapName[1], 0, 0xFFu);
  CWayPoint::Get_MapName(v5, nMapID, strMapName);
  Name3::Name3(&sMapName, strMapName);
  v10 = World::GetMapName(&g_kWorld, &result);
  if ( !Name3::operator__(v10, &sMapName) )
  {
    v21 = -1;
    nNearDotWeight = 2147483647;
    nNearDotNo = -1;
    if ( v5->m_nAddDotCnt > 0 )
    {
      v22 = 0;
      nResultWayCnt = v5->m_pDotData;
      v32 = &nResultWayCnt->nMapID;
      while ( 1 )
      {
        if ( *v32 == v9 )
        {
          if ( (v5->m_pDotData[v22].X - X) * (v5->m_pDotData[v22].X - X)
             + (v5->m_pDotData[v22].Y - Y) * (v5->m_pDotData[v22].Y - Y) >= nNearDotWeight )
          {
            v21 = nNearDotNo;
          }
          else
          {
            nNearDotWeight = (v5->m_pDotData[v22].X - X) * (v5->m_pDotData[v22].X - X)
                           + (v5->m_pDotData[v22].Y - Y) * (v5->m_pDotData[v22].Y - Y);
            v21 = v6;
            nNearDotNo = v6;
          }
        }
        v23 = v5->m_nAddDotCnt;
        v32 += 11;
        ++v6;
        ++v22;
        if ( v6 >= v23 )
          break;
        v9 = nMapID;
      }
      if ( v21 >= 0 && v21 < v23 )
      {
        *v28 = &nResultWayCnt[v21];
        return 1;
      }
    }
    return 0;
  }
  *(_DWORD *)&vecCollusionData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecCollusionData.baseclass_0._Mylast = 0;
  vecCollusionData.baseclass_0._Myend = 0;
  v11 = v5->m_nAddDotCnt;
  v39 = 0;
  k = 0;
  if ( v11 <= 0 )
  {
LABEL_30:
    __1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a((std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&vecCollusionData);
    return 0;
  }
  while ( 1 )
  {
    v12 = -1;
    v13 = 0;
    nNearDotWeight = 2147483647;
    nNearDotNo = -1;
    if ( v11 <= 0 )
    {
LABEL_34:
      if ( *(_DWORD *)&vecCollusionData )
        operator delete(*(void **)&vecCollusionData);
      return 0;
    }
    v14 = 0;
    v15 = (int)&v5->m_pDotData->nMapID;
    v32 = &v5->m_pDotData->nMapID;
    do
    {
      if ( *(_DWORD *)v15 != nMapID )
        goto LABEL_22;
      v16 = (signed int)((char *)vecCollusionData.baseclass_0._Mylast - *(_DWORD *)&vecCollusionData) >> 2;
      v17 = 0;
      if ( v16 )
      {
        while ( *(_DWORD *)(*(_DWORD *)&vecCollusionData + 4 * v17) != v13 )
        {
          ++v17;
          if ( v17 >= v16 )
            goto LABEL_19;
        }
      }
      else
      {
LABEL_19:
        if ( (v5->m_pDotData[v14].X - X) * (v5->m_pDotData[v14].X - X)
           + (v5->m_pDotData[v14].Y - Y) * (v5->m_pDotData[v14].Y - Y) < nNearDotWeight )
        {
          v12 = v13;
          nNearDotWeight = (v5->m_pDotData[v14].X - X) * (v5->m_pDotData[v14].X - X)
                         + (v5->m_pDotData[v14].Y - Y) * (v5->m_pDotData[v14].Y - Y);
          nNearDotNo = v13;
          goto LABEL_22;
        }
      }
      v12 = nNearDotNo;
LABEL_22:
      v18 = v5->m_nAddDotCnt;
      ++v13;
      v15 = (int)(v32 + 11);
      ++v14;
      v32 += 11;
    }
    while ( v13 < v18 );
    if ( v12 < 0 || v12 >= v18 )
      goto LABEL_34;
    v19 = v5->m_pDotData;
    *(float *)&result.n3_name[4] = (double)v19[v12].X;
    *(float *)&result.n3_name[8] = (double)v19[v12].Y;
    m_bIsFindEndPoint = 0;
    pos2End.x = (double)X;
    pos2End.y = (double)Y;
    World::SearchWayPointsNew(
      &g_kWorld,
      *(NiPoint2 *)&result.n3_name[4],
      pos2End,
      100,
      aPos2Arr,
      (int *)&nResultWayCnt,
      (bool *)&m_bIsFindEndPoint);
    if ( nResultWayCnt )
      break;
    v24 = (const unsigned int *)&nNearDotNo;
LABEL_29:
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&vecCollusionData,
      v24);
    v11 = v5->m_nAddDotCnt;
    ++k;
    if ( k >= v11 )
      goto LABEL_30;
  }
  if ( !m_bIsFindEndPoint )
  {
    v24 = (const unsigned int *)&nNearDotNo;
    goto LABEL_29;
  }
  *v28 = &v5->m_pDotData[v12];
  __1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a((std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)&vecCollusionData);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0061DCD0) --------------------------------------------------------
int __thiscall CWayPoint::Get_NearDot(CWayPoint *this, char *pMapName, int X, int Y, MAP_DOT **pNearDot)
{
  CWayPoint *v5; // esi@1
  int v6; // ecx@3
  int v7; // eax@4
  int result; // eax@7
  int v9; // ebx@10
  MAP_DOT **v10; // edi@12

  v5 = this;
  if ( this->m_pDotData
    && this->m_pMapData
    && (v6 = this->m_nMaxDotCnt, v6 > 0)
    && (v7 = v5->m_nMaxMapCnt, v7 > 0)
    && v5->m_nAddDotCnt <= v6
    && v5->m_nAddMapCnt <= v7
    && pMapName
    && X >= 0 )
  {
    v9 = Y;
    if ( Y >= 0 )
    {
      v10 = pNearDot;
      if ( pNearDot && CWayPoint::Get_MapID(v5, pMapName, (int *)&pMapName) )
        result = CWayPoint::Get_NearDot(v5, (int)pMapName, X, v9, v10);
      else
        result = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061DD60) --------------------------------------------------------
void __cdecl CharScreenBoardBase::SetMaxDistance(float fMaxDistance)
{
  CharScreenBoardBase::ms_fMaxDistance = fMaxDistance;
}
// A7EA84: using guessed type float CharScreenBoardBase__ms_fMaxDistance;

//----- (0061DD70) --------------------------------------------------------
void __cdecl CharScreenBoardBase::SetTransNear(float fNear)
{
  CharScreenBoardBase::ms_fTransNear = fNear;
}
// A7EA88: using guessed type float CharScreenBoardBase__ms_fTransNear;

//----- (0061DD80) --------------------------------------------------------
void __cdecl CharScreenBoardBase::SetTransFar(float fFar)
{
  CharScreenBoardBase::ms_fTransFar = fFar;
}
// A7EA8C: using guessed type float CharScreenBoardBase__ms_fTransFar;

//----- (0061DD90) --------------------------------------------------------
void __thiscall CharScreenBoardBase::SetNameBDMove(CharScreenBoardBase *this, bool b)
{
  this->m_bNameBDMove = b;
}

//----- (0061DDA0) --------------------------------------------------------
unsigned __int16 __thiscall CharScreenBoardBase::GetCharHandle(CharScreenBoardBase *this)
{
  return this->m_kCharHandle;
}

//----- (0061DDB0) --------------------------------------------------------
NiAVObject *__thiscall CharScreenBoardUserChar::GetIconGeometry(CharScreenBoardUserChar *this)
{
  return (NiAVObject *)IConBD::GetGeometry(&this->m_IconBD);
}

//----- (0061DDC0) --------------------------------------------------------
void __thiscall CharScreenBoardUserChar::CreateNameIcon(CharScreenBoardUserChar *this, const char *pkFileName)
{
  IConBD::Create(&this->m_IconBD, pkFileName);
}

//----- (0061DDD0) --------------------------------------------------------
unsigned int __thiscall CharScreenBoardUserChar::GetNickNameColor(CharScreenBoardUserChar *this)
{
  return 65535;
}

//----- (0061DDE0) --------------------------------------------------------
unsigned int __thiscall CharScreenBoardMiniHouse::GetNameColor(CharScreenBoardMiniHouse *this)
{
  return 65535;
}

//----- (0061DDF0) --------------------------------------------------------
void __thiscall CharScreenBoardBase::CharScreenBoardBase(CharScreenBoardBase *this)
{
  this->vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardBase::_vftable_;
  this->m_spNodeBoard.m_pObject = 0;
  this->m_kCharHandle = -1;
  this->m_bNameBDMove = 0;
}
// 9C10CC: using guessed type int (__thiscall *CharScreenBoardBase___vftable_)(void *p, char);

//----- (0061DE10) --------------------------------------------------------
NiAVObject *__thiscall CharScreenBoardBase::GetGeometry(CharScreenBoardBase *this)
{
  return &this->m_spNodeBoard.m_pObject->baseclass_0;
}

//----- (0061DE20) --------------------------------------------------------
bool __thiscall CharScreenBoardBase::UpDatePostion(CharScreenBoardBase *this, NiPoint3 *rPos, NiCamera *pkWorldCamera)
{
  NiPoint3 *v3; // ebx@1
  CharScreenBoardBase *v4; // esi@1
  _BYTE v5[12]; // ST0C_12@1
  float v6; // ST08_4@1
  float v7; // ST04_4@1
  bool result; // al@2
  Char *v9; // edi@3
  Mover *v10; // ecx@5
  NiNode *v11; // eax@12
  float v12; // ST28_4@14
  float v13; // ST2C_4@14
  float v14; // ST30_4@14
  void *v15; // eax@14
  NiNode *v16; // edx@16
  float v17; // ecx@17
  float v18; // edx@17
  NiPoint3 k2DOrthoPos; // [sp+30h] [bp-Ch]@1

  v3 = rPos;
  v4 = this;
  *(_DWORD *)v5 = LODWORD(rPos->x);
  *(_QWORD *)&v5[4] = *(_QWORD *)&rPos->y;
  v6 = (double)PgWin::ms_uiScreenHeight;
  v7 = (double)PgWin::ms_uiScreenWidth;
  if ( !PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v7, v6, *(NiPoint3 *)v5, &k2DOrthoPos)
    || (v9 = CharMgr::GetChar(&g_kCharMgr, v4->m_kCharHandle)) != 0
    && ((unsigned __int8)((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v9)
     || (v10 = v9->m_pkMover) != 0 && !Mover::IsSlotView(v10, v9->m_uiMoverSlot, 0)) )
  {
    v4->m_spNodeBoard.m_pObject->baseclass_0.m_uFlags |= 1u;
    result = 0;
  }
  else
  {
    v4->m_spNodeBoard.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
    if ( byte_B5BB4B == 1 )
      k2DOrthoPos.y = k2DOrthoPos.y - 15.0;
    if ( CharMgr::GetChar(&g_kCharMgr, v4->m_kCharHandle) == g_pkMainChar )
      k2DOrthoPos.y = k2DOrthoPos.y - 8.0;
    if ( !v4->m_bNameBDMove )
    {
      v11 = v4->m_spNodeBoard.m_pObject;
      LODWORD(v11->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)k2DOrthoPos.x;
      v11->baseclass_0.m_kLocal.m_Translate.y = k2DOrthoPos.y;
      v11->baseclass_0.m_kLocal.m_Translate.z = k2DOrthoPos.z;
    }
    if ( byte_B5BB4B == 1 )
    {
      v12 = pkWorldCamera->baseclass_0.m_kWorld.m_Translate.x - v3->x;
      v13 = pkWorldCamera->baseclass_0.m_kWorld.m_Translate.y - v3->y;
      v14 = pkWorldCamera->baseclass_0.m_kWorld.m_Translate.z - v3->z;
      *(float *)&pkWorldCamera = v13 * v13 + v12 * v12 + v14 * v14;
      *(float *)&pkWorldCamera = sqrt(*(float *)&pkWorldCamera);
      *(float *)&pkWorldCamera = *(float *)&pkWorldCamera / (double)StandLength;
      *(float *)&rPos = 1.0;
      v15 = &pkWorldCamera;
      if ( *(float *)&pkWorldCamera >= 1.0 )
        v15 = &rPos;
      v16 = v4->m_spNodeBoard.m_pObject;
      *(float *)&pkWorldCamera = *(float *)v15 * 0.1000000014901161;
      *(float *)&pkWorldCamera = 1.0 - *(float *)&pkWorldCamera;
      *(float *)&pkWorldCamera = fabs(*(float *)&pkWorldCamera);
      v16->baseclass_0.m_kLocal.m_fScale = *(float *)&pkWorldCamera;
    }
    v17 = k2DOrthoPos.y;
    v18 = k2DOrthoPos.z;
    LODWORD(v4->m_k2DOrthoPos.x) = (_DWORD)k2DOrthoPos.x;
    v4->m_k2DOrthoPos.y = v17;
    v4->m_k2DOrthoPos.z = v18;
    result = 1;
  }
  return result;
}
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (0061E000) --------------------------------------------------------
GUILD_EMBLEM_INFO *__thiscall CharScreenBoardUserChar::MakeEmblemInfo(CharScreenBoardUserChar *this)
{
  GUILD_EMBLEM_INFO *result; // eax@1

  result = (GUILD_EMBLEM_INFO *)CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  if ( result )
    result = GuildTask::GetEmblemInfo(*(_DWORD *)&result[338].nPTFileNo);
  return result;
}

//----- (0061E030) --------------------------------------------------------
void __thiscall CharScreenBoardUserChar::SetAlpha(CharScreenBoardUserChar *this, float fAlpha)
{
  CharScreenBoardUserChar *v2; // esi@1
  ScreenBoardGeometry *v3; // ecx@1
  ScreenBoardGeometry *v4; // ecx@3
  ScreenBoardGeometry *v5; // ecx@5
  GuildEmblemIcon *v6; // ecx@7

  v2 = this;
  v3 = this->m_spNameBoard.m_pObject;
  if ( v3 )
    ScreenBoardGeometry::SetAlpha(v3, fAlpha);
  v4 = v2->m_spGuildBoard.m_pObject;
  if ( v4 )
    ScreenBoardGeometry::SetAlpha(v4, fAlpha);
  v5 = v2->m_spNickNameBoard.m_pObject;
  if ( v5 )
    ScreenBoardGeometry::SetAlpha(v5, fAlpha);
  v6 = v2->m_spEmblemIcon.m_pObject;
  if ( v6 )
    GuildEmblemIcon::SetAlpha(v6, &fAlpha);
}

//----- (0061E090) --------------------------------------------------------
unsigned int __thiscall CharScreenBoardUserChar::GetGuildColor(CharScreenBoardUserChar *this)
{
  Char *v1; // eax@1
  Char *v2; // esi@1
  unsigned int result; // eax@2
  unsigned int v4; // ST00_4@3
  unsigned int v5; // edi@3
  CClientGuild *v6; // eax@3
  unsigned int v7; // ST00_4@5
  CClientGuild *v8; // eax@5

  v1 = CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  v2 = v1;
  if ( v1 )
  {
    v4 = v1->m_dwGuildRegNum;
    v5 = 65280;
    v6 = GuildTask::GetGuild();
    if ( CClientGuild::IsAttackableEnemyGuild(v6, v4) )
    {
      v5 = 65535;
    }
    else
    {
      v7 = v2->m_dwGuildRegNum;
      v8 = GuildTask::GetGuild();
      if ( CClientGuild::IsEnemyGuild(v8, v7) )
        v5 = 255;
    }
    GuildTask::GetGuildName(v2->m_dwGuildRegNum);
    if ( v2->m_GuildAcademyMemberFlag == 1 )
      v5 = 65280;
    result = v5;
  }
  else
  {
    result = 65280;
  }
  return result;
}

//----- (0061E110) --------------------------------------------------------
void __thiscall CharScreenBoardUserChar::CreateEmblemIcon(CharScreenBoardUserChar *this, tagSIZE BoardSize, GUILD_EMBLEM_INFO *pEmblemInfo)
{
  CharScreenBoardUserChar *v3; // esi@1
  GuildEmblemIcon *v4; // eax@1
  GuildEmblemIcon *v5; // edi@1
  GuildEmblemIcon *v6; // ebx@1
  GuildEmblemIcon *v7; // ecx@8

  v3 = this;
  v4 = GuildEmblemIcon::CreateWin(
         -(signed int)((double)BoardSize.cx * 0.5 + 32.0 + 3.0),
         -(signed int)((double)BoardSize.cy + (double)BoardSize.cy + 3.0),
         0,
         0,
         0,
         0x20u,
         0x20u);
  v5 = v3->m_spEmblemIcon.m_pObject;
  v6 = v4;
  if ( v5 != v4 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v3->m_spEmblemIcon.m_pObject = v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v7 = v3->m_spEmblemIcon.m_pObject;
  if ( v7 )
  {
    GuildEmblemIcon::SetEmblemIcon(v7, &v3->m_EmblemInfo.nPTFileNo, &v3->m_EmblemInfo.nPTIconNo, 1);
    ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.m_spNodeBoard.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v3->m_spEmblemIcon.m_pObject,
      0);
  }
}

//----- (0061E1D0) --------------------------------------------------------
void __thiscall CharScreenBoardDropItem::SetAlpha(CharScreenBoardDropItem *this, float fAlpha)
{
  ScreenBoardGeometry *v2; // ecx@1

  v2 = this->m_spNameBoard.m_pObject;
  if ( v2 )
    ScreenBoardGeometry::SetAlpha(v2, fAlpha);
}

//----- (0061E1F0) --------------------------------------------------------
void __thiscall CharScreenBoardMiniHouse::SetAlpha(CharScreenBoardMiniHouse *this, float fAlpha)
{
  ScreenBoardGeometry *v2; // ecx@1

  v2 = this->m_spNameBoard.m_pObject;
  if ( v2 )
    ScreenBoardGeometry::SetAlpha(v2, fAlpha);
}

//----- (0061E210) --------------------------------------------------------
bool __cdecl CharScreenBoardBase::IsInShowRange(NiPoint3 *kPos)
{
  float v1; // ST00_4@1
  float v2; // ST04_4@1
  float v3; // ST08_4@1
  float kPosa; // [sp+14h] [bp+8h]@1
  float kPosb; // [sp+14h] [bp+8h]@1

  v1 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - kPos->x;
  v2 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - kPos->y;
  v3 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - kPos->z;
  kPosa = v1 * v1 + v2 * v2 + v3 * v3;
  kPosb = sqrt(kPosa);
  return kPosb <= (double)CharScreenBoardBase::ms_fMaxDistance;
}
// A7EA84: using guessed type float CharScreenBoardBase__ms_fMaxDistance;

//----- (0061E290) --------------------------------------------------------
void __thiscall CharScreenBoardBase::SetAlphaByDistance(CharScreenBoardBase *this, NiPoint3 *rPos)
{
  CharScreenBoardBase *v2; // esi@1
  float v3; // ST08_4@1
  float v4; // ST0C_4@1
  float v5; // ST10_4@1
  double v6; // st7@1
  double v7; // st6@1
  Char *v8; // eax@2
  double v9; // qt1@8
  float fDistNFa; // [sp+1Ch] [bp+8h]@1
  float fDistNFb; // [sp+1Ch] [bp+8h]@1
  float fDistNF; // [sp+1Ch] [bp+8h]@7
  float fDistNFc; // [sp+1Ch] [bp+8h]@8
  float fDistNFd; // [sp+1Ch] [bp+8h]@8

  v2 = this;
  v3 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - rPos->x;
  v4 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - rPos->y;
  v5 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - rPos->z;
  fDistNFa = v3 * v3 + v4 * v4 + v5 * v5;
  fDistNFb = sqrt(fDistNFa);
  v6 = fDistNFb;
  v7 = CharScreenBoardBase::ms_fTransNear;
  if ( CharScreenBoardBase::ms_fTransNear > (double)fDistNFb )
  {
    v8 = CharMgr::GetChar(&g_kCharMgr, this->m_kCharHandle);
    if ( !v8 || !v8->m_bSS_Hide )
    {
      ((void (__thiscall *)(CharScreenBoardBase *, _DWORD))v2->vfptr->SetAlpha)(v2, 1.0);
      return;
    }
    goto LABEL_6;
  }
  if ( CharScreenBoardBase::ms_fTransFar < v6 )
  {
LABEL_6:
    ((void (__thiscall *)(CharScreenBoardBase *, _DWORD))v2->vfptr->SetAlpha)(v2, 0.0);
    return;
  }
  fDistNF = CharScreenBoardBase::ms_fTransFar - v7;
  if ( 0.0 != fDistNF )
  {
    v9 = fDistNF;
    fDistNFc = v6 - v7;
    fDistNFd = 1.0 - fDistNFc / v9;
    ((void (__thiscall *)(CharScreenBoardBase *, _DWORD))this->vfptr->SetAlpha)(this, LODWORD(fDistNFd));
  }
}
// A7EA88: using guessed type float CharScreenBoardBase__ms_fTransNear;
// A7EA8C: using guessed type float CharScreenBoardBase__ms_fTransFar;

//----- (0061E3B0) --------------------------------------------------------
void __thiscall CharScreenBoardUserChar::Update(CharScreenBoardUserChar *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  CharScreenBoardUserChar *v4; // esi@1
  Char *v5; // eax@1
  Char *v6; // edi@1
  NiPoint3 *v7; // eax@2
  _BYTE v8[12]; // ST00_12@4
  NiPoint3 result; // [sp+10h] [bp-18h]@2
  NiPoint3 kWorldPos; // [sp+1Ch] [bp-Ch]@2

  v4 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  v6 = v5;
  if ( v5 )
  {
    v7 = Char::GetHeightPos(v5, &result);
    CharScreenBoardBase::SetAlphaByDistance(&v4->baseclass_0, v7);
    Char::GetHeightPos(v6, &kWorldPos);
    kWorldPos.z = kWorldPos.z + 3.0;
    CharScreenBoardBase::UpDatePostion(&v4->baseclass_0, &kWorldPos, pkWorldCamera);
    if ( !v4->baseclass_0.m_bNameBDMove )
      NiAVObject::Update(&v4->baseclass_0.m_spNodeBoard.m_pObject->baseclass_0, fTime, 1);
    ((void (__thiscall *)(CharScreenBoardUserChar *))v4->baseclass_0.vfptr[1].Init)(v4);
    *(_DWORD *)v8 = LODWORD(v4->baseclass_0.m_k2DOrthoPos.x);
    *(_QWORD *)&v8[4] = *(_QWORD *)&v4->baseclass_0.m_k2DOrthoPos.y;
    IConBD::Update(&v4->m_IconBD, *(NiPoint3 *)v8, fTime);
  }
}

//----- (0061E460) --------------------------------------------------------
bool __cdecl CharScreenBoardUserChar::IsVisible(unsigned __int16 kHandle)
{
  Char *v1; // eax@1
  Char *v2; // esi@1
  MobType v4; // eax@21
  NiPoint3 kPos; // [sp+4h] [bp-Ch]@4

  v1 = CharMgr::GetChar(&g_kCharMgr, kHandle);
  v2 = v1;
  if ( !v1
    || !Char::IsUpdate(v1)
    || v2->m_bCulled == 1
    || (Char::GetHeightPos(v2, &kPos), !CharScreenBoardBase::IsInShowRange(&kPos))
    || v2->m_byMode == 5 )
    return 0;
  if ( (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] != v2
    && (Char *)g_pkMouseOvereMob != v2 )
  {
    if ( Char::IsNPC(v2) )
    {
      if ( !byte_B5BB20 )
        return 0;
    }
    else
    {
      if ( (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].Affect)(v2) )
      {
        if ( !byte_B5BB21 )
          return 0;
      }
      else
      {
        if ( g_pkMainChar == v2 )
        {
          if ( !byte_B5BB1E )
            return 0;
        }
        else
        {
          if ( !byte_B5BB1F )
            return 0;
        }
      }
    }
  }
  if ( !v2->baseclass_0.vfptr->IsVisible((AbStateInfectee *)v2)
    || (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].Affect)(v2)
    && ((v4 = Char::GetMobInfo(v2)->Type, v4 == 13) || v4 == 19 || v4 == 27 || v4 == 29 || v4 == 20 || v4 == 24) )
    return 0;
  return 1;
}
// AA2720: using guessed type int g_pkMouseOvereMob;
// B5BB1E: using guessed type char byte_B5BB1E;
// B5BB1F: using guessed type char byte_B5BB1F;
// B5BB20: using guessed type char byte_B5BB20;
// B5BB21: using guessed type char byte_B5BB21;

//----- (0061E580) --------------------------------------------------------
void __thiscall CharScreenBoardDropItem::Update(CharScreenBoardDropItem *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  CharScreenBoardDropItem *v4; // esi@1
  DropItem *v5; // eax@1
  DropItem *v6; // edi@1
  NiNode *v7; // eax@2
  float v8; // ecx@2
  double v9; // st7@2
  NiPoint3 kWorldPos; // [sp+10h] [bp-Ch]@2

  v4 = this;
  v5 = DropItemMgr::GetByHandle(&g_kDropItemMgr, this->baseclass_0.m_kCharHandle);
  v6 = v5;
  if ( v5 )
  {
    CharScreenBoardBase::SetAlphaByDistance(&v4->baseclass_0, &v5->m_spNode.m_pObject->baseclass_0.m_kLocal.m_Translate);
    v7 = v6->m_spNode.m_pObject;
    v8 = v7->baseclass_0.m_kLocal.m_Translate.y;
    kWorldPos.x = v7->baseclass_0.m_kLocal.m_Translate.x;
    v9 = v7->baseclass_0.m_kLocal.m_Translate.z + 12.0;
    kWorldPos.y = v8;
    kWorldPos.z = v9;
    CharScreenBoardBase::UpDatePostion(&v4->baseclass_0, &kWorldPos, pkWorldCamera);
    if ( !v4->baseclass_0.m_bNameBDMove )
      NiAVObject::Update(&v4->baseclass_0.m_spNodeBoard.m_pObject->baseclass_0, fTime, 1);
  }
}

//----- (0061E600) --------------------------------------------------------
unsigned int __thiscall CharScreenBoardDropItem::GetNameColor(CharScreenBoardDropItem *this)
{
  unsigned int result; // eax@1
  int v2; // esi@2
  int v3; // edi@2
  int v4; // edx@4
  int v5; // eax@5

  result = (unsigned int)DropItemMgr::GetByHandle(&g_kDropItemMgr, this->baseclass_0.m_kCharHandle);
  if ( result )
  {
    v2 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v3 = *(_WORD *)(result + 4);
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v3)
      && (unsigned __int16)v3 <= *(_WORD *)(v2 + 200)
      && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * v3))
      && (v5 = *(_DWORD *)(v4 + 4 * v3)) != 0 )
    {
      switch ( *(_DWORD *)(v5 + 118) )
      {
        default:
          result = 16777215;
          break;
        case 1:
          result = 65280;
          break;
        case 2:
        case 5:
          result = 16695821;
          break;
        case 3:
          result = 58623;
          break;
        case 4:
          result = 15671549;
          break;
        case 6:
          result = 33023;
          break;
        case 7:
          result = 16711935;
          break;
      }
    }
    else
    {
      result = 3339263;
    }
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0061E6C0) --------------------------------------------------------
bool __cdecl CharScreenBoardDropItem::IsVisible(unsigned __int16 kHandle)
{
  DropItem *v1; // eax@1
  DropItem *v2; // esi@1
  NiNode *v4; // eax@3
  float v5; // ecx@3
  float v6; // edx@3
  float v7; // eax@3
  NiPoint3 kPos; // [sp+4h] [bp-Ch]@3

  v1 = DropItemMgr::GetByHandle(&g_kDropItemMgr, kHandle);
  v2 = v1;
  return v1
      && (v4 = v1->m_spNode.m_pObject,
          v5 = v4->baseclass_0.m_kLocal.m_Translate.x,
          v6 = v4->baseclass_0.m_kLocal.m_Translate.y,
          v7 = v4->baseclass_0.m_kLocal.m_Translate.z,
          kPos.x = v5,
          kPos.y = v6,
          kPos.z = v7,
          CharScreenBoardBase::IsInShowRange(&kPos))
      && (byte_B5BB22 || (DropItem *)g_pkMouseOverDropItem == v2);
}
// AA3CF8: using guessed type int g_pkMouseOverDropItem;
// B5BB22: using guessed type char byte_B5BB22;

//----- (0061E720) --------------------------------------------------------
void __thiscall CharScreenBoardBase::_CharScreenBoardBase(CharScreenBoardBase *this)
{
  CharScreenBoardBase *v1; // esi@1
  NiNode *v2; // eax@1
  NiNode *v3; // edi@2
  NiNode *v4; // esi@7

  v1 = this;
  this->vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardBase::_vftable_;
  v2 = this->m_spNodeBoard.m_pObject;
  if ( v2 )
  {
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_kChildren);
    v3 = v1->m_spNodeBoard.m_pObject;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      v1->m_spNodeBoard.m_pObject = 0;
    }
  }
  v4 = v1->m_spNodeBoard.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  }
}
// 9C10CC: using guessed type int (__thiscall *CharScreenBoardBase___vftable_)(void *p, char);

//----- (0061E7D0) --------------------------------------------------------
void __thiscall CharScreenBoardUserChar::_CharScreenBoardUserChar(CharScreenBoardUserChar *this)
{
  CharScreenBoardUserChar *v1; // esi@1
  ScreenBoardGeometry *v2; // edi@1
  ScreenBoardGeometry *v3; // edi@6
  ScreenBoardGeometry *v4; // edi@11
  GuildEmblemIcon *v5; // edi@16
  GuildEmblemIcon *v6; // edi@21
  ScreenBoardGeometry *v7; // edi@25
  ScreenBoardGeometry *v8; // edi@29
  ScreenBoardGeometry *v9; // edi@33

  v1 = this;
  this->baseclass_0.vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardUserChar::_vftable_;
  v2 = this->m_spNameBoard.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spNameBoard.m_pObject = 0;
  }
  v3 = v1->m_spNickNameBoard.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spNickNameBoard.m_pObject = 0;
  }
  v4 = v1->m_spGuildBoard.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spGuildBoard.m_pObject = 0;
  }
  v5 = v1->m_spEmblemIcon.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spEmblemIcon.m_pObject = 0;
  }
  *(_WORD *)&v1->m_EmblemInfo.nPTFileNo = -1;
  IConBD::_IConBD(&v1->m_IconBD);
  v6 = v1->m_spEmblemIcon.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spGuildBoard.m_pObject;
  if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) && v7 )
    v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spNickNameBoard.m_pObject;
  if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount) && v8 )
    v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spNameBoard.m_pObject;
  if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount) && v9 )
    v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  CharScreenBoardBase::_CharScreenBoardBase(&v1->baseclass_0);
}
// 9C10FC: using guessed type int (__thiscall *CharScreenBoardUserChar___vftable_)(void *p, char);

//----- (0061E970) --------------------------------------------------------
bool __thiscall CharScreenBoardUserChar::IsAlive(CharScreenBoardUserChar *this)
{
  CharScreenBoardUserChar *v1; // esi@1
  bool result; // al@2

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].__vecDelDtor)() == 1
    || (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[1].Init)(v1) == 1 )
    result = 0;
  else
    result = CharScreenBoardUserChar::IsVisible(v1->baseclass_0.m_kCharHandle);
  return result;
}

//----- (0061E9A0) --------------------------------------------------------
void __thiscall CharScreenBoardDropItem::_CharScreenBoardDropItem(CharScreenBoardDropItem *this)
{
  CharScreenBoardDropItem *v1; // edi@1
  NiNode *v2; // esi@1
  ScreenBoardGeometry *v3; // esi@6
  ScreenBoardGeometry *v4; // esi@11

  v1 = this;
  this->baseclass_0.vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardDropItem::_vftable_;
  v2 = this->baseclass_0.m_spNodeBoard.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->baseclass_0.m_spNodeBoard.m_pObject = 0;
  }
  v3 = v1->m_spNameBoard.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spNameBoard.m_pObject = 0;
  }
  v4 = v1->m_spNameBoard.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  CharScreenBoardBase::_CharScreenBoardBase(&v1->baseclass_0);
}
// 9C111C: using guessed type int (__thiscall *CharScreenBoardDropItem___vftable_)(void *p, char);

//----- (0061EA80) --------------------------------------------------------
bool __thiscall CharScreenBoardDropItem::IsAlive(CharScreenBoardDropItem *this)
{
  DropItem *v1; // eax@1
  DropItem *v2; // esi@1
  NiNode *v4; // eax@3
  float v5; // ecx@3
  float v6; // edx@3
  float v7; // eax@3
  NiPoint3 kPos; // [sp+4h] [bp-Ch]@3

  v1 = DropItemMgr::GetByHandle(&g_kDropItemMgr, this->baseclass_0.m_kCharHandle);
  v2 = v1;
  return v1
      && (v4 = v1->m_spNode.m_pObject,
          v5 = v4->baseclass_0.m_kLocal.m_Translate.x,
          v6 = v4->baseclass_0.m_kLocal.m_Translate.y,
          v7 = v4->baseclass_0.m_kLocal.m_Translate.z,
          kPos.x = v5,
          kPos.y = v6,
          kPos.z = v7,
          CharScreenBoardBase::IsInShowRange(&kPos))
      && (byte_B5BB22 || (DropItem *)g_pkMouseOverDropItem == v2);
}
// AA3CF8: using guessed type int g_pkMouseOverDropItem;
// B5BB22: using guessed type char byte_B5BB22;

//----- (0061EAE0) --------------------------------------------------------
void __thiscall CharScreenBoardMiniHouse::_CharScreenBoardMiniHouse(CharScreenBoardMiniHouse *this)
{
  CharScreenBoardBase *v1; // edi@1
  ScreenBoardGeometry *v2; // esi@1

  v1 = (CharScreenBoardBase *)this;
  this->baseclass_0.vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardMiniHouse::_vftable_;
  v2 = this->m_spNameBoard.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  CharScreenBoardBase::_CharScreenBoardBase(v1);
}
// 9C1134: using guessed type int (__thiscall *CharScreenBoardMiniHouse___vftable_)(void *p, char);

//----- (0061EB60) --------------------------------------------------------
unsigned int __thiscall CharScreenBoardUserChar::GetNameColor(CharScreenBoardUserChar *this)
{
  Char *v1; // eax@1
  Char *v2; // esi@1
  unsigned int result; // eax@2
  CMiniHouseMgr *v4; // eax@10
  stMINIHOUSEINFO *v5; // eax@10
  CClientGuild *v6; // eax@13
  int v7; // eax@17
  unsigned int v8; // eax@17
  unsigned int v9; // edi@20
  const char *v10; // eax@20
  Name5 v11; // [sp-14h] [bp-20h]@20
  int v12; // [sp-4h] [bp-10h]@10
  Name5 *v13; // [sp+8h] [bp-4h]@20

  v1 = CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  v2 = v1;
  if ( !v1 )
    return 16711935;
  if ( v1 == g_pkMainChar )
    return 14286592;
  if ( Char::IsNPC(v1) )
    return 3342335;
  if ( Char::IsResource(v2) )
    return 16417535;
  if ( (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].Affect)(v2) )
  {
    v12 = v2->m_kHandle;
    v4 = (CMiniHouseMgr *)CGuildMonster::GetInstance();
    v5 = CGuildMonster::GetGuildEumFromMob(v4, v12);
    if ( v5 && v5 == (stMINIHOUSEINFO *)g_pkMainChar->m_dwGuildRegNum )
      return 16777215;
    v6 = GuildTask::GetGuild();
    if ( v6 && v6->m_GttEnemyInfo.uiStatus == 2 && g_pkMainChar->m_dwGuildRegNum != v2->m_dwGuildRegNum )
    {
      result = 255;
    }
    else
    {
      v7 = ((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[5].Deaffect)(v2);
      v8 = Char::GetLvGapIndex(g_pkMainChar, v7);
      if ( v8 == 5 )
        return 16711935;
      result = LevelGapColor[v8];
    }
  }
  else
  {
    if ( (unsigned __int8)v2->baseclass_0.vfptr[20].GetAbstateColor((AbStateInfectee *)v2) )
      return 16777215;
    v9 = 16777215;
    v10 = (const char *)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v2);
    v13 = &v11;
    Name5::Name5(&v11, v10);
    if ( Party::GetMemberInfo(&g_kParty, v11) )
      v9 = 16433206;
    if ( MainChar::GetTargetType((MainChar *)g_pkMainChar, v2) == 3 )
      v9 = 255;
    result = v9;
  }
  return result;
}

//----- (0061ECD0) --------------------------------------------------------
bool __thiscall CharScreenBoardUserChar::ColorCheckChange(CharScreenBoardUserChar *this)
{
  CharScreenBoardUserChar *v1; // esi@1
  bool result; // al@2
  ScreenBoardGeometry *v3; // ecx@3
  ScreenBoardGeometry::BoardInfo *v4; // edi@4
  ScreenBoardGeometry *v5; // ecx@5
  ScreenBoardGeometry *v6; // ecx@7
  ScreenBoardGeometry::BoardInfo *v7; // edi@8

  v1 = this;
  if ( CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle) )
  {
    v3 = v1->m_spNameBoard.m_pObject;
    result = v3 && (v4 = ScreenBoardGeometry::GetInfo(v3), CharScreenBoardUserChar::GetNameColor(v1) != v4->color)
          || (v5 = v1->m_spNickNameBoard.m_pObject) != 0 && ScreenBoardGeometry::GetInfo(v5)->color != 65535
          || (v6 = v1->m_spGuildBoard.m_pObject) != 0
          && (v7 = ScreenBoardGeometry::GetInfo(v6), CharScreenBoardUserChar::GetGuildColor(v1) != v7->color);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0061ED40) --------------------------------------------------------
void __thiscall CharScreenBoardMiniHouse::Update(CharScreenBoardMiniHouse *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  CharScreenBoardMiniHouse *v4; // edi@1
  int v5; // esi@2
  int v6; // eax@3
  float v7; // ecx@3
  float v8; // edx@3
  float v9; // eax@3
  int v10; // eax@3
  double v11; // st7@4
  NiPoint3 kCurPos; // [sp+20h] [bp-14h]@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > result; // [sp+2Ch] [bp-8h]@1
  unsigned __int16 _Keyval[2]; // [sp+30h] [bp-4h]@1

  v4 = this;
  *(_DWORD *)_Keyval = this->baseclass_0.m_kCharHandle;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    &g_kMiniHouseMgr,
    &result,
    _Keyval);
  if ( result != stru_B67CF0 )
  {
    v5 = *(_DWORD *)(*(_DWORD *)&result + 16);
    if ( v5 )
    {
      v6 = *(_DWORD *)(v5 + 36);
      LODWORD(v7) = *(_DWORD *)(v6 + 140);
      LODWORD(v8) = *(_DWORD *)(v6 + 144);
      LODWORD(v9) = *(_DWORD *)(v6 + 148);
      kCurPos.x = v7;
      kCurPos.y = v8;
      kCurPos.z = v9;
      CharScreenBoardBase::SetAlphaByDistance(&v4->baseclass_0, &kCurPos);
      v10 = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 36) + 72))("Name");
      if ( v10 )
        v11 = *(float *)(v10 + 148);
      else
        v11 = kCurPos.z + 56.0;
      kCurPos.z = v11;
      CharScreenBoardBase::UpDatePostion(&v4->baseclass_0, &kCurPos, pkWorldCamera);
      if ( !v4->baseclass_0.m_bNameBDMove )
        NiAVObject::Update(&v4->baseclass_0.m_spNodeBoard.m_pObject->baseclass_0, fTime, 1);
    }
  }
}

//----- (0061EE20) --------------------------------------------------------
bool __cdecl CharScreenBoardMiniHouse::IsVisible(unsigned __int16 kHandle)
{
  int v1; // eax@2
  bool v2; // al@3
  int v3; // eax@4
  float v4; // ecx@4
  float v5; // edx@4
  float v6; // eax@4
  NiPoint3 kPos; // [sp+0h] [bp-10h]@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > result; // [sp+Ch] [bp-4h]@1

  *(_DWORD *)&kHandle = kHandle;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    &g_kMiniHouseMgr,
    &result,
    &kHandle);
  if ( result != stru_B67CF0 && (v1 = *(_DWORD *)(*(_DWORD *)&result + 16)) != 0 )
  {
    v3 = *(_DWORD *)(v1 + 36);
    LODWORD(v4) = *(_DWORD *)(v3 + 140);
    LODWORD(v5) = *(_DWORD *)(v3 + 144);
    LODWORD(v6) = *(_DWORD *)(v3 + 148);
    kPos.x = v4;
    kPos.y = v5;
    kPos.z = v6;
    v2 = CharScreenBoardBase::IsInShowRange(&kPos) != 0;
  }
  else
  {
    v2 = 0;
  }
  return v2;
}

//----- (0061EE90) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CharScreenBoardUserChar::MakeGuildName(CharScreenBoardUserChar *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  Char *v2; // eax@1
  unsigned int v3; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@2
  char *v5; // eax@6

  v2 = CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  v3 = (unsigned int)v2;
  if ( v2 )
  {
    if ( GuildTask::GetGuildName(v2->m_dwGuildRegNum) )
    {
      if ( *(_BYTE *)(v3 + 680) == 1 )
      {
        TextData::Get(0x86A3E3E4u);
        v5 = fs("[%s][%s]");
      }
      else
      {
        v5 = fs("[%s]");
      }
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        result,
        v5);
      v4 = result;
    }
    else
    {
      v4 = result;
      result->baseclass_0._Mysize = 0;
      result->baseclass_0._Myres = 15;
      result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
  }
  else
  {
    v4 = result;
    result->baseclass_0._Mysize = v3;
    result->baseclass_0._Myres = 15;
    result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  return v4;
}

//----- (0061EF40) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CharScreenBoardUserChar::MakeCharName(CharScreenBoardUserChar *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  int v2; // edi@0
  Char *v3; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@2
  char *v5; // eax@4
  int v6; // eax@4
  char v7; // cl@5
  const char *v8; // eax@7
  char buffer[260]; // [sp+Ch] [bp-108h]@4
  unsigned int v10; // [sp+110h] [bp-4h]@1
  int v11; // [sp+114h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  if ( v3 )
  {
    if ( v3->m_byMode == 4 )
    {
      ((void (*)(void))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
      v5 = TextData::Get(0x93B1FCE9u);
      sprintf(buffer, v5);
      v6 = (int)buffer;
      result->baseclass_0._Myres = 15;
      result->baseclass_0._Mysize = 0;
      result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      do
        v7 = *(_BYTE *)v6++;
      while ( v7 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        result,
        buffer,
        v6 - (_DWORD)&buffer[1]);
      v4 = result;
    }
    else
    {
      v8 = (const char *)((int (__stdcall *)(int))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v2);
      result->baseclass_0._Myres = 15;
      result->baseclass_0._Mysize = 0;
      result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, v8, strlen(v8));
      v4 = result;
    }
  }
  else
  {
    result->baseclass_0._Mysize = 0;
    result->baseclass_0._Myres = 15;
    result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v4 = result;
  }
  return v4;
}
// A85C00: using guessed type int __security_cookie;

//----- (0061F050) --------------------------------------------------------
bool __thiscall CharScreenBoardDropItem::Init(CharScreenBoardDropItem *this, unsigned __int16 kHandle, ScreenBoardTexture *pBoardData)
{
  CharScreenBoardDropItem *v3; // esi@1
  int v4; // ebx@1
  bool result; // al@2
  void *v6; // eax@3
  int v7; // eax@4
  NiNode *v8; // edi@5
  void *v9; // eax@12
  int v10; // eax@13
  int v11; // ebx@13
  ScreenBoardGeometry *v12; // edi@15
  char *v13; // eax@22
  ScreenBoardGeometry *v14; // ecx@22
  NiNode *v15; // ebx@22
  NiRefObjectVtbl *v16; // edi@22
  NiScreenElements *v17; // eax@22
  DropItem *pkDropItem; // [sp+8h] [bp-3Ch]@1
  ScreenBoardGeometry::BoardInfo NameInfo; // [sp+Ch] [bp-38h]@22
  unsigned int v20; // [sp+34h] [bp-10h]@1
  int v21; // [sp+40h] [bp-4h]@3
  int v22; // [sp+44h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v3 = this;
  this->baseclass_0.m_kCharHandle = kHandle;
  v4 = 0;
  pkDropItem = DropItemMgr::GetByHandle(&g_kDropItemMgr, kHandle);
  if ( pkDropItem )
  {
    v6 = operator new(0xE8u);
    v21 = 0;
    if ( v6 )
    {
      NiNode::NiNode((NiNode *)v6, 0);
      v4 = v7;
    }
    v8 = v3->baseclass_0.m_spNodeBoard.m_pObject;
    v21 = -1;
    if ( v8 != (NiNode *)v4 )
    {
      if ( v8
        && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      v3->baseclass_0.m_spNodeBoard.m_pObject = (NiNode *)v4;
      if ( v4 )
        InterlockedIncrement((volatile LONG *)(v4 + 4));
    }
    v9 = operator new(0x70u);
    v21 = 1;
    if ( v9 )
    {
      ScreenBoardGeometry::ScreenBoardGeometry((ScreenBoardGeometry *)v9, pBoardData);
      v11 = v10;
    }
    else
    {
      v11 = 0;
    }
    v12 = v3->m_spNameBoard.m_pObject;
    v21 = -1;
    if ( v12 != (ScreenBoardGeometry *)v11 )
    {
      if ( v12 && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.m_uiRefCount) && v12 )
        v12->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      v3->m_spNameBoard.m_pObject = (ScreenBoardGeometry *)v11;
      if ( v11 )
        InterlockedIncrement((volatile LONG *)(v11 + 4));
    }
    NameInfo.Name.baseclass_0._Myres = 15;
    NameInfo.Name.baseclass_0._Mysize = 0;
    NameInfo.Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v21 = 2;
    NameInfo.color = CharScreenBoardDropItem::GetNameColor(v3);
    v13 = DropItem::GetItemName(pkDropItem);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NameInfo.Name, v13, strlen(v13));
    LODWORD(NameInfo.CorectionPos.y) = dword_B6E104;
    v14 = v3->m_spNameBoard.m_pObject;
    LODWORD(NameInfo.CorectionPos.x) = NiPoint2::ZERO;
    ScreenBoardGeometry::SetBoardInfo(v14, &NameInfo);
    v15 = v3->baseclass_0.m_spNodeBoard.m_pObject;
    v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = ScreenBoardGeometry::GetGeometry(v3->m_spNameBoard.m_pObject);
    ((void (__thiscall *)(NiNode *, NiScreenElements *, _DWORD))v16[29].__vecDelDtor)(v15, v17, 0);
    if ( NameInfo.Name.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NameInfo);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6E100: using guessed type int NiPoint2__ZERO;
// B6E104: using guessed type int dword_B6E104;

//----- (0061F220) --------------------------------------------------------
bool __thiscall CharScreenBoardMiniHouse::Init(CharScreenBoardMiniHouse *this, unsigned __int16 kHandle, ScreenBoardTexture *pBoardData)
{
  CharScreenBoardMiniHouse *v3; // esi@1
  int v4; // ebx@2
  bool result; // al@3
  void *v6; // eax@4
  int v7; // eax@5
  NiNode *v8; // edi@6
  void *v9; // eax@13
  int v10; // eax@14
  int v11; // ebx@14
  ScreenBoardGeometry *v12; // edi@16
  int v13; // eax@23
  char v14; // cl@24
  ScreenBoardGeometry *v15; // ecx@25
  NiNode *v16; // edi@25
  ScreenBoardGeometry *v17; // ecx@25
  NiRefObjectVtbl *v18; // esi@25
  NiScreenElements *v19; // eax@25
  void *pstInfo; // [sp+4h] [bp-D8h]@1
  unsigned __int16 _Keyval[2]; // [sp+8h] [bp-D4h]@1
  ScreenBoardGeometry::BoardInfo NameInfo; // [sp+Ch] [bp-D0h]@23
  char speechText[128]; // [sp+34h] [bp-A8h]@23
  char acName[21]; // [sp+B4h] [bp-28h]@23
  unsigned int v25; // [sp+CCh] [bp-10h]@1
  int v26; // [sp+D8h] [bp-4h]@4
  int v27; // [sp+DCh] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v3 = this;
  this->baseclass_0.m_kCharHandle = kHandle;
  *(_DWORD *)_Keyval = kHandle;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    &g_kMiniHouseMgr,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&pstInfo,
    _Keyval);
  if ( pstInfo != (void *)stru_B67CF0 && (v4 = 0, (pstInfo = (void *)*((_DWORD *)pstInfo + 4)) != 0) )
  {
    v6 = operator new(0xE8u);
    *(_DWORD *)_Keyval = v6;
    v26 = 0;
    if ( v6 )
    {
      NiNode::NiNode((NiNode *)v6, 0);
      v4 = v7;
    }
    v8 = v3->baseclass_0.m_spNodeBoard.m_pObject;
    v26 = -1;
    if ( v8 != (NiNode *)v4 )
    {
      if ( v8
        && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      v3->baseclass_0.m_spNodeBoard.m_pObject = (NiNode *)v4;
      if ( v4 )
        InterlockedIncrement((volatile LONG *)(v4 + 4));
    }
    v9 = operator new(0x70u);
    *(_DWORD *)_Keyval = v9;
    v26 = 1;
    if ( v9 )
    {
      ScreenBoardGeometry::ScreenBoardGeometry((ScreenBoardGeometry *)v9, pBoardData);
      v11 = v10;
    }
    else
    {
      v11 = 0;
    }
    v12 = v3->m_spNameBoard.m_pObject;
    v26 = -1;
    if ( v12 != (ScreenBoardGeometry *)v11 )
    {
      if ( v12 && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.m_uiRefCount) && v12 )
        v12->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      v3->m_spNameBoard.m_pObject = (ScreenBoardGeometry *)v11;
      if ( v11 )
        InterlockedIncrement((volatile LONG *)(v11 + 4));
    }
    speechText[0] = 0;
    memset(&speechText[1], 0, 0x7Fu);
    *(_DWORD *)acName = *(_DWORD *)((char *)pstInfo + 14);
    *(_DWORD *)&acName[4] = *(_DWORD *)((char *)pstInfo + 18);
    *(_DWORD *)&acName[8] = *(_DWORD *)((char *)pstInfo + 22);
    *(_DWORD *)&acName[12] = *(_DWORD *)((char *)pstInfo + 26);
    *(_DWORD *)&acName[16] = *(_DWORD *)((char *)pstInfo + 30);
    acName[20] = 0;
    sprintf(speechText, "[%s] %s");
    NameInfo.Name.baseclass_0._Myres = 15;
    NameInfo.Name.baseclass_0._Mysize = 0;
    NameInfo.Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v13 = (int)speechText;
    v26 = 2;
    NameInfo.color = 65535;
    do
      v14 = *(_BYTE *)v13++;
    while ( v14 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &NameInfo.Name,
      speechText,
      v13 - (_DWORD)&speechText[1]);
    v15 = v3->m_spNameBoard.m_pObject;
    LODWORD(NameInfo.CorectionPos.x) = NiPoint2::ZERO;
    LODWORD(NameInfo.CorectionPos.y) = dword_B6E104;
    ScreenBoardGeometry::SetBoardInfo(v15, &NameInfo);
    v16 = v3->baseclass_0.m_spNodeBoard.m_pObject;
    v17 = v3->m_spNameBoard.m_pObject;
    v18 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = ScreenBoardGeometry::GetGeometry(v17);
    ((void (__thiscall *)(NiNode *, NiScreenElements *, _DWORD))v18[29].__vecDelDtor)(v16, v19, 0);
    if ( NameInfo.Name.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NameInfo);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6E100: using guessed type int NiPoint2__ZERO;
// B6E104: using guessed type int dword_B6E104;

//----- (0061F4A0) --------------------------------------------------------
bool __thiscall CharScreenBoardMiniHouse::IsAlive(CharScreenBoardMiniHouse *this)
{
  return CharScreenBoardMiniHouse::IsVisible(this->baseclass_0.m_kCharHandle);
}

//----- (0061F4B0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CharScreenBoardUserChar::MakeCharTitle(CharScreenBoardUserChar *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  Char *v2; // eax@1
  const char *v3; // edi@4
  int v4; // eax@4
  int v5; // edx@4
  char v6; // cl@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NickName; // [sp+4h] [bp-2Ch]@4
  unsigned int v9; // [sp+20h] [bp-10h]@1
  int v10; // [sp+2Ch] [bp-4h]@6
  int v11; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  v2 = CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  if ( v2 && v2->m_bUseCharTitle )
  {
    v3 = v2->m_CharTitleName;
    v4 = (int)v2->m_CharTitleName;
    NickName.baseclass_0._Myres = 15;
    NickName.baseclass_0._Mysize = 0;
    NickName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v5 = v4 + 1;
    do
      v6 = *(_BYTE *)v4++;
    while ( v6 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NickName, v3, v4 - v5);
    v10 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&NickName, " ", 1u);
    result->baseclass_0._Myres = 15;
    result->baseclass_0._Mysize = 0;
    result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, &NickName);
    if ( NickName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NickName);
  }
  else
  {
    result->baseclass_0._Myres = 15;
    result->baseclass_0._Mysize = 0;
    result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0061F5A0) --------------------------------------------------------
bool __thiscall CharScreenBoardUserChar::CheckNameChange(CharScreenBoardUserChar *this)
{
  CharScreenBoardUserChar *v1; // esi@1
  Char *v2; // eax@1
  ScreenBoardGeometry *v3; // ecx@2
  ScreenBoardGeometry::BoardInfo *v4; // edi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@3
  bool v6; // cf@3
  unsigned int v7; // ecx@3
  bool v8; // bl@5
  ScreenBoardGeometry *v9; // ecx@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // edi@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@12
  bool v12; // bl@12
  ScreenBoardGeometry *v14; // ecx@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // edi@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@20
  bool v17; // bl@20
  GUILD_EMBLEM_INFO *v18; // eax@22
  Char *pkChar; // [sp+0h] [bp-4Ch]@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> thisa; // [sp+4h] [bp-48h]@3
  unsigned int v21; // [sp+34h] [bp-18h]@5
  unsigned int v22; // [sp+3Ch] [bp-10h]@1
  int v23; // [sp+48h] [bp-4h]@3
  int v24; // [sp+4Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v1 = this;
  v2 = CharMgr::GetChar(&g_kCharMgr, this->baseclass_0.m_kCharHandle);
  pkChar = v2;
  if ( !v2 )
    return 0;
  v3 = v1->m_spNameBoard.m_pObject;
  if ( v3 )
  {
    v4 = ScreenBoardGeometry::GetInfo(v3);
    v5 = CharScreenBoardUserChar::MakeCharName(
           v1,
           (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&thisa.baseclass_0.second);
    v6 = v5->baseclass_0._Myres < 0x10;
    v7 = v5->baseclass_0._Mysize;
    v23 = 0;
    if ( !v6 )
      v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
    v8 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &v4->Name,
           0,
           v4->Name.baseclass_0._Mysize,
           v5->baseclass_0.___u0.baseclass_0.dummy,
           v7) != 0;
    v23 = -1;
    if ( v21 >= 0x10 )
      operator delete(thisa.baseclass_0.second);
    if ( v8 )
      return 1;
    v2 = pkChar;
  }
  if ( v2->m_bUseCharTitle && v2->m_byMode != 4 )
  {
    v9 = v1->m_spNickNameBoard.m_pObject;
    if ( !v9
      || (v10 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)ScreenBoardGeometry::GetInfo(v9),
          v11 = CharScreenBoardUserChar::MakeCharTitle(
                  v1,
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&thisa.baseclass_0.second),
          v23 = 1,
          v12 = std::operator__<char_std::char_traits<char>_std::allocator<char>>(v10, v11),
          v23 = -1,
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)((char *)&thisa + 28)),
          v12) )
      return 1;
    v2 = pkChar;
  }
  else
  {
    if ( v1->m_spNickNameBoard.m_pObject )
      return 1;
  }
  if ( v2->m_bUserCharacter != 1 || !v2->m_dwGuildRegNum )
  {
    if ( !v1->m_spGuildBoard.m_pObject )
      return 0;
    return 1;
  }
  v14 = v1->m_spGuildBoard.m_pObject;
  if ( !v14
    || (v15 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)ScreenBoardGeometry::GetInfo(v14),
        v16 = CharScreenBoardUserChar::MakeGuildName(v1, &thisa.baseclass_0.first),
        v23 = 2,
        v17 = std::operator__<char_std::char_traits<char>_std::allocator<char>>(v15, v16),
        v23 = -1,
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>(&thisa),
        v17) )
    return 1;
  if ( byte_B5BB4B != 1 )
    return 0;
  v18 = CharScreenBoardUserChar::MakeEmblemInfo(v1);
  if ( !v18 )
    return 1;
  if ( v1->m_EmblemInfo.nPTFileNo != v18->nPTFileNo || v1->m_EmblemInfo.nPTIconNo != v18->nPTIconNo )
    return 1;
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (0061F750) --------------------------------------------------------
bool __thiscall CharScreenBoardUserChar::Init(CharScreenBoardUserChar *this, unsigned __int16 kHandle, ScreenBoardTexture *pBoardTexture)
{
  CharScreenBoardUserChar *v3; // esi@1
  int v4; // ebx@1
  void *v5; // eax@2
  int v6; // eax@3
  NiNode *v7; // edi@4
  void *v8; // eax@11
  int v9; // eax@12
  int v10; // ebx@12
  ScreenBoardGeometry *v11; // edi@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@21
  void *v13; // eax@25
  ScreenBoardTexture *v14; // ebx@25
  NiD3DDefaultShader *v15; // eax@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@28
  ScreenBoardGeometry::BoardInfo *v17; // eax@30
  ScreenBoardGeometry::BoardInfo *v18; // eax@32
  int v19; // edx@34
  double v20; // st7@34
  int v21; // edx@34
  ScreenBoardGeometry *v22; // ecx@34
  NiNode *v23; // ebx@34
  NiRefObjectVtbl *v24; // edi@34
  NiScreenElements *v25; // eax@34
  NiNode *v26; // ebx@36
  NiRefObjectVtbl *v27; // edi@36
  NiScreenElements *v28; // eax@36
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v29; // eax@39
  ScreenBoardTexture *v30; // edi@41
  void *v31; // eax@41
  NiD3DDefaultShader *v32; // eax@42
  unsigned int v33; // eax@44
  ScreenBoardGeometry *v34; // ecx@44
  NiNode *v35; // ebx@44
  NiRefObjectVtbl *v36; // edi@44
  NiScreenElements *v37; // eax@44
  GUILD_EMBLEM_INFO *v38; // eax@45
  unsigned int v40; // [sp-10h] [bp-ACh]@1
  tagSIZE NickNameSize; // [sp+0h] [bp-9Ch]@34
  tagSIZE NameSize; // [sp+8h] [bp-94h]@32
  Char *pkChar; // [sp+10h] [bp-8Ch]@1
  ScreenBoardTexture *pBoardData; // [sp+14h] [bp-88h]@1
  float v45; // [sp+18h] [bp-84h]@34
  float v46; // [sp+1Ch] [bp-80h]@2
  ScreenBoardGeometry::BoardInfo NameInfo; // [sp+20h] [bp-7Ch]@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strGuildName; // [sp+48h] [bp-54h]@21
  ScreenBoardGeometry::BoardInfo GuildNameInfo; // [sp+64h] [bp-38h]@28
  unsigned int v50; // [sp+8Ch] [bp-10h]@1
  int v51; // [sp+98h] [bp-4h]@2
  int v52; // [sp+9Ch] [bp+0h]@1

  v50 = (unsigned int)&v52 ^ __security_cookie;
  v40 = (unsigned int)&v52 ^ __security_cookie;
  v3 = this;
  pBoardData = pBoardTexture;
  this->baseclass_0.m_kCharHandle = kHandle;
  v4 = 0;
  pkChar = CharMgr::GetChar(&g_kCharMgr, kHandle);
  if ( !pkChar )
    return 0;
  v5 = operator new(0xE8u);
  LODWORD(v46) = v5;
  v51 = 0;
  if ( v5 )
  {
    NiNode::NiNode((NiNode *)v5, 0);
    v4 = v6;
  }
  v7 = v3->baseclass_0.m_spNodeBoard.m_pObject;
  v51 = -1;
  if ( v7 != (NiNode *)v4 )
  {
    if ( v7
      && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v3->baseclass_0.m_spNodeBoard.m_pObject = (NiNode *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)(v4 + 4));
  }
  v8 = operator new(0x70u);
  LODWORD(v46) = v8;
  v51 = 1;
  if ( v8 )
  {
    ScreenBoardGeometry::ScreenBoardGeometry((ScreenBoardGeometry *)v8, pBoardData);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  v11 = v3->m_spNameBoard.m_pObject;
  v51 = -1;
  if ( v11 != (ScreenBoardGeometry *)v10 )
  {
    if ( v11 && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.m_uiRefCount) && v11 )
      v11->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v3->m_spNameBoard.m_pObject = (ScreenBoardGeometry *)v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)(v10 + 4));
  }
  NameInfo.Name.baseclass_0._Myres = 15;
  NameInfo.Name.baseclass_0._Mysize = 0;
  NameInfo.Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v51 = 2;
  NameInfo.color = CharScreenBoardUserChar::GetNameColor(v3);
  v12 = CharScreenBoardUserChar::MakeCharName(v3, &strGuildName);
  LOBYTE(v51) = 3;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NameInfo.Name, v12);
  LOBYTE(v51) = 2;
  if ( strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strGuildName);
  LODWORD(NameInfo.CorectionPos.x) = NiPoint2::ZERO;
  LODWORD(NameInfo.CorectionPos.y) = dword_B6E104;
  if ( pkChar->m_bUseCharTitle && pkChar->m_byMode != 4 )
  {
    v13 = operator new(0x70u);
    LODWORD(v46) = v13;
    v14 = pBoardData;
    LOBYTE(v51) = 4;
    if ( v13 )
      ScreenBoardGeometry::ScreenBoardGeometry((ScreenBoardGeometry *)v13, pBoardData);
    else
      v15 = 0;
    LOBYTE(v51) = 2;
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spNickNameBoard, v15);
    GuildNameInfo.Name.baseclass_0._Myres = 15;
    GuildNameInfo.Name.baseclass_0._Mysize = 0;
    GuildNameInfo.Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v51) = 5;
    v16 = CharScreenBoardUserChar::MakeCharTitle(v3, &strGuildName);
    LOBYTE(v51) = 6;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&GuildNameInfo.Name, v16);
    LOBYTE(v51) = 5;
    if ( strGuildName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strGuildName);
    v17 = *(ScreenBoardGeometry::BoardInfo **)&NameInfo;
    GuildNameInfo.color = 65535;
    if ( NameInfo.Name.baseclass_0._Myres < 0x10 )
      v17 = &NameInfo;
    ((void (__thiscall *)(ScreenBoardTexture *, tagSIZE *, ScreenBoardGeometry::BoardInfo *, unsigned int))pBoardData->vfptr->GetTextRenderSize)(
      pBoardData,
      &NameSize,
      v17,
      v40);
    v18 = *(ScreenBoardGeometry::BoardInfo **)&GuildNameInfo;
    if ( GuildNameInfo.Name.baseclass_0._Myres < 0x10 )
      v18 = &GuildNameInfo;
    v40 = (unsigned int)v18;
    v14->vfptr->GetTextRenderSize(v14, (const char *)&NickNameSize);
    v19 = NickNameSize.cx / 2 + NameSize.cx / 2;
    NameSize.cx /= 2;
    v20 = (double)(NickNameSize.cx / 2);
    v21 = v19 - NickNameSize.cx / 2;
    NickNameSize.cx /= 2;
    v45 = v20;
    NameInfo.CorectionPos.x = v45;
    LODWORD(v46) = v21;
    NameInfo.CorectionPos.y = 0.0;
    v22 = v3->m_spNickNameBoard.m_pObject;
    v45 = -(double)v21;
    GuildNameInfo.CorectionPos.x = v45;
    v46 = 0.0;
    GuildNameInfo.CorectionPos.y = 0.0;
    ScreenBoardGeometry::SetBoardInfo(v22, &GuildNameInfo);
    v23 = v3->baseclass_0.m_spNodeBoard.m_pObject;
    v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v25 = ScreenBoardGeometry::GetGeometry(v3->m_spNickNameBoard.m_pObject);
    ((void (__thiscall *)(NiNode *, NiScreenElements *, _DWORD))v24[29].__vecDelDtor)(v23, v25, 0);
    LOBYTE(v51) = 2;
    if ( GuildNameInfo.Name.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&GuildNameInfo);
  }
  ScreenBoardGeometry::SetBoardInfo(v3->m_spNameBoard.m_pObject, &NameInfo);
  v26 = v3->baseclass_0.m_spNodeBoard.m_pObject;
  v27 = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v28 = ScreenBoardGeometry::GetGeometry(v3->m_spNameBoard.m_pObject);
  ((void (__thiscall *)(NiNode *, NiScreenElements *, _DWORD))v27[29].__vecDelDtor)(v26, v28, 0);
  if ( pkChar->m_bUserCharacter == 1 && pkChar->m_dwGuildRegNum )
  {
    CharScreenBoardUserChar::MakeGuildName(v3, &strGuildName);
    LOBYTE(v51) = 7;
    if ( strGuildName.baseclass_0._Mysize )
    {
      v29 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strGuildName;
      if ( strGuildName.baseclass_0._Myres < 0x10 )
        v29 = &strGuildName;
      v30 = pBoardData;
      ((void (__thiscall *)(ScreenBoardTexture *, tagSIZE *, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *, unsigned int))pBoardData->vfptr->GetTextRenderSize)(
        pBoardData,
        &NameSize,
        v29,
        v40);
      v31 = operator new(0x70u);
      LODWORD(v46) = v31;
      LOBYTE(v51) = 8;
      if ( v31 )
        ScreenBoardGeometry::ScreenBoardGeometry((ScreenBoardGeometry *)v31, v30);
      else
        v32 = 0;
      LOBYTE(v51) = 7;
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spGuildBoard, v32);
      GuildNameInfo.Name.baseclass_0._Myres = 15;
      GuildNameInfo.Name.baseclass_0._Mysize = 0;
      GuildNameInfo.Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      LOBYTE(v51) = 9;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &GuildNameInfo.Name,
        &strGuildName,
        0,
        0xFFFFFFFFu);
      v33 = CharScreenBoardUserChar::GetGuildColor(v3);
      v45 = 0.0;
      GuildNameInfo.color = v33;
      GuildNameInfo.CorectionPos.x = 0.0;
      v34 = v3->m_spGuildBoard.m_pObject;
      v46 = -((double)NameSize.cy + 2.0);
      GuildNameInfo.CorectionPos.y = v46;
      ScreenBoardGeometry::SetBoardInfo(v34, &GuildNameInfo);
      v35 = v3->baseclass_0.m_spNodeBoard.m_pObject;
      v36 = v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v37 = ScreenBoardGeometry::GetGeometry(v3->m_spGuildBoard.m_pObject);
      v36[29].__vecDelDtor((NiRefObject *)v35, (unsigned int)v37);
      if ( pkChar->m_GuildAcademyMemberFlag != 1 )
      {
        v38 = CharScreenBoardUserChar::MakeEmblemInfo(v3);
        if ( !v38 )
        {
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&GuildNameInfo);
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strGuildName);
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&NameInfo);
          return 0;
        }
        *(_WORD *)&v3->m_EmblemInfo.nPTFileNo = *(_WORD *)&v38->nPTFileNo;
        if ( byte_B5BB4B == 1 )
          CharScreenBoardUserChar::CreateEmblemIcon(v3, NameSize, v38);
      }
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&GuildNameInfo);
    }
    if ( strGuildName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strGuildName);
  }
  if ( NameInfo.Name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&NameInfo);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// B5BB4B: using guessed type char byte_B5BB4B;
// B6E100: using guessed type int NiPoint2__ZERO;
// B6E104: using guessed type int dword_B6E104;

//----- (0061FC30) --------------------------------------------------------
float __thiscall World::GetDistanceToCamera(World *this, NiPoint3 *kPos)
{
  NiCamera *v2; // eax@1
  float v3; // ST00_4@1
  float v4; // ST04_4@1
  float v5; // ST08_4@1
  double v6; // st7@1
  float result; // st7@2
  float kPosa; // [sp+14h] [bp+8h]@1
  float kPosb; // [sp+14h] [bp+8h]@1

  v2 = this->m_spCamera.m_pObject;
  v3 = v2->baseclass_0.m_kLocal.m_Translate.x - kPos->x;
  v4 = v2->baseclass_0.m_kLocal.m_Translate.y - kPos->y;
  v5 = v2->baseclass_0.m_kLocal.m_Translate.z - kPos->z;
  kPosa = v3 * v3 + v4 * v4 + v5 * v5;
  kPosb = sqrt(kPosa);
  v6 = kPosb;
  LODWORD(result) = LODWORD(v6);
  return result;
}

//----- (0061FC90) --------------------------------------------------------
void *__thiscall CharScreenBoardUserChar::_vector_deleting_destructor_(CharScreenBoardUserChar *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharScreenBoardUserChar::_CharScreenBoardUserChar(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0061FCC0) --------------------------------------------------------
void *__thiscall CharScreenBoardDropItem::_scalar_deleting_destructor_(CharScreenBoardDropItem *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharScreenBoardDropItem::_CharScreenBoardDropItem(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0061FCF0) --------------------------------------------------------
void *__thiscall CharScreenBoardMiniHouse::_vector_deleting_destructor_(CharScreenBoardMiniHouse *this, unsigned int a2)
{
  CharScreenBoardBase *v2; // edi@1
  ScreenBoardGeometry *v3; // esi@1

  v2 = (CharScreenBoardBase *)this;
  this->baseclass_0.vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardMiniHouse::_vftable_;
  v3 = this->m_spNameBoard.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  CharScreenBoardBase::_CharScreenBoardBase(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C1134: using guessed type int (__thiscall *CharScreenBoardMiniHouse___vftable_)(void *p, char);

//----- (0061FD80) --------------------------------------------------------
void *__thiscall CharScreenBoardBase::_scalar_deleting_destructor_(CharScreenBoardBase *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharScreenBoardBase::_CharScreenBoardBase(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0061FDB0) --------------------------------------------------------
void __thiscall GuildBD::ReAlloc(GuildBD *this, unsigned int uiSize)
{
  GuildBD *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  operator delete__(this->m_pcSpeech);
  v3 = operator new__(uiSize + 1);
  v2->m_uiSpeechLen = uiSize;
  v2->m_pcSpeech = (char *)v3;
}

//----- (0061FDE0) --------------------------------------------------------
bool __thiscall GuildBD::IsAlive(GuildBD *this, float fTime)
{
  return this->m_bAlive != 0;
}

//----- (0061FDF0) --------------------------------------------------------
void __thiscall GuildBD::EndDraw(GuildBD *this)
{
  GuildBD *v1; // esi@1

  v1 = this;
  if ( this->m_lpSurSrc )
    this->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)this->m_lpSurSrc);
  if ( v1->m_lpSurDest )
    v1->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_lpSurDest);
}

//----- (0061FE20) --------------------------------------------------------
void __thiscall GuildBD::DrawTextA(GuildBD *this)
{
  void **v1; // edi@0
  GuildBD *v2; // esi@1
  int v3; // edi@2
  int v4; // ebx@3
  GuildBD::EnemyStatus v5; // eax@4
  int v6; // eax@5
  HDC__ *v7; // [sp-Ch] [bp-1Ch]@7
  COLORREF v8; // [sp-8h] [bp-18h]@7
  int iTextXPos; // [sp+4h] [bp-Ch]@2
  unsigned int i; // [sp+8h] [bp-8h]@2
  HDC__ *hDC; // [sp+Ch] [bp-4h]@2

  v2 = this;
  if ( this->m_lpSurSrc )
  {
    this->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface(
      (IUnknown *)this->m_lpSurSrc,
      (_GUID *const )&hDC,
      v1);
    SetBkMode(hDC, 1);
    SetTextColor(hDC, v2->m_kColorRef);
    SelectObject(hDC, GuildBD::ms_hFont);
    v3 = v2->m_iTextYPos;
    iTextXPos = v2->m_iTextXPos;
    i = 0;
    if ( v2->m_uiTotalLine )
    {
      v4 = (int)v2->m_apcLineText;
      while ( 1 )
      {
        v5 = v2->m_eEnemyStatus;
        if ( !v5 )
          break;
        v6 = v5 - 1;
        if ( v6 )
        {
          if ( v6 != 1 )
            break;
          v8 = 255;
          v7 = hDC;
        }
        else
        {
          v8 = 65535;
          v7 = hDC;
        }
LABEL_10:
        SetTextColor(v7, v8);
        TextOutA(hDC, iTextXPos, v3, *(LPCSTR *)v4, *(_DWORD *)(v4 + 4));
        v3 += v2->m_uiLineHeight + 1;
        v4 += 4;
        ++i;
        if ( i >= v2->m_uiTotalLine )
          goto LABEL_11;
      }
      v8 = 65280;
      v7 = hDC;
      goto LABEL_10;
    }
LABEL_11:
    v2->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v2->m_lpSurSrc);
  }
}

//----- (0061FF00) --------------------------------------------------------
void __thiscall GuildBD::SetChar(GuildBD *this, unsigned __int16 kHandle)
{
  this->m_kCharHandle = kHandle;
}

//----- (0061FF10) --------------------------------------------------------
void __thiscall GuildBD::SetGuildBDMove(GuildBD *this, bool b)
{
  this->m_bGuildBDMove = b;
}

//----- (0061FF20) --------------------------------------------------------
void __usercall CalculateStrlenInWidth(char *pcText<eax>, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>, HDC__ *hDC, unsigned int dwMaxWidth)
{
  char *v5; // edi@1
  char v6; // al@2
  int v7; // eax@4
  tagSIZE kSize; // [sp+4h] [bp-8h]@4

  v5 = pcText;
  *dwStrLen = 0;
  *dwWidth = 0;
  if ( pcText )
  {
    v6 = *pcText;
    if ( v6 )
    {
      do
      {
        if ( IsDBCSLeadByte(v6) )
        {
          GetTextExtentPoint32A(hDC, v5, 2, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          v5 += 2;
          *dwStrLen += 2;
        }
        else
        {
          GetTextExtentPoint32A(hDC, v5, 1, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          ++v5;
          ++*dwStrLen;
        }
        *dwWidth += v7;
        v6 = *v5;
      }
      while ( *v5 );
    }
  }
}

//----- (0061FFA0) --------------------------------------------------------
bool __thiscall GuildBD::BeginDraw(GuildBD *this)
{
  GuildBD *v1; // edi@1
  NiTexture::RendererData *v2; // ecx@1
  bool result; // al@2
  int v4; // eax@3
  int v5; // ecx@5
  int v6; // eax@6

  v1 = this;
  v2 = this->m_pkTexture->m_pkRendererData;
  if ( v2 && (v4 = ((int (*)(void))v2->vfptr[1].GetWidth)()) != 0 )
  {
    (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v4 + 72))(v4, 0, &v1->m_lpSurDest);
    if ( v1->m_lpSurDest
      && (v5 = *(_DWORD *)(GuildBD::ms_spTempTexture + 40)) != 0
      && (v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))()) != 0 )
    {
      (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v6 + 72))(v6, 0, &v1->m_lpSurSrc);
      result = v1->m_lpSurSrc != 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// AA2504: using guessed type int GuildBD__ms_spTempTexture;

//----- (00620010) --------------------------------------------------------
void __thiscall GuildBD::CalculateLine(GuildBD *this)
{
  GuildBD *v1; // edi@1
  IDirect3DSurface9 *v2; // eax@1
  char *v3; // eax@3
  HDC__ *v4; // ST08_4@3
  int v5; // eax@6
  unsigned int v6; // esi@7
  unsigned int v7; // eax@7
  int v8; // edx@7
  void **v9; // [sp+0h] [bp-3Ch]@0
  tagSIZE kSize; // [sp+8h] [bp-34h]@2
  unsigned int dwTextWidth; // [sp+10h] [bp-2Ch]@3
  unsigned int dwStrLen; // [sp+14h] [bp-28h]@3
  int i; // [sp+18h] [bp-24h]@2
  unsigned int *v14; // [sp+1Ch] [bp-20h]@2
  char *pcText; // [sp+20h] [bp-1Ch]@2
  HDC__ *hDC; // [sp+24h] [bp-18h]@2
  tagRECT kRect; // [sp+28h] [bp-14h]@2
  unsigned int v18; // [sp+38h] [bp-4h]@1
  int v19; // [sp+3Ch] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v1 = this;
  v2 = this->m_lpSurSrc;
  if ( v2 )
  {
    this->m_uiTotalLine = 0;
    this->m_uiTextWidth = 0;
    this->m_uiTextHeight = 0;
    this->m_uiLineHeight = 0;
    v2->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface((IUnknown *)v2, (_GUID *const )&hDC, v9);
    SetRect(&kRect, 0, 0, 209, 22);
    FillRect(hDC, &kRect, GuildBD::ms_hEraseBrush);
    SelectObject(hDC, GuildBD::ms_hFont);
    pcText = v1->m_pcSpeech;
    GetTextExtentPoint32A(hDC, "W", 1, &kSize);
    v1->m_uiLineHeight = kSize.cy;
    i = 0;
    v14 = v1->m_auiLineStrLen;
    do
    {
      v3 = pcText;
      v4 = hDC;
      *(v14 - 1) = (unsigned int)pcText;
      CalculateStrlenInWidth(v3, v4, 0xC8u, &dwStrLen, &dwTextWidth);
      if ( !dwStrLen )
        break;
      pcText += dwStrLen;
      *v14 = dwStrLen;
      if ( v1->m_uiTextWidth < dwTextWidth )
        v1->m_uiTextWidth = dwTextWidth;
      v5 = i;
      ++v1->m_uiTotalLine;
      ++v14;
      i = v5 + 1;
    }
    while ( (unsigned int)(v5 + 1) < 1 );
    v6 = v1->m_uiTextWidth;
    v7 = (209 - v6) >> 1;
    v8 = v1->m_uiTotalLine * (v1->m_uiLineHeight + 1) - 1;
    v1->m_iTextXPos = v7;
    v1->m_iTextYPos = 16 - v8;
    v1->m_kTextRect.left = v7 - 1;
    v1->m_kTextRect.right = v6 + v7;
    v1->m_kTextRect.bottom = 16;
    v1->m_uiTextHeight = v8;
    v1->m_kTextRect.top = 16 - v8 - 1;
    v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v1->m_lpSurSrc);
  }
}
// 620010: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (00620160) --------------------------------------------------------
void __thiscall GuildBD::CopyTexture(GuildBD *this)
{
  GuildBD *v1; // esi@1
  IDirect3DSurface9 *v2; // eax@3
  signed int v3; // ebx@3
  int v4; // ecx@4
  IDirect3DSurface9 *v5; // eax@4
  void *v6; // edx@5
  GuildBD *v7; // edi@7
  void *v8; // esi@7
  bool v9; // zf@7
  int v10; // eax@8
  signed int v11; // ebx@9
  signed int v12; // esi@10
  void *v13; // ecx@11
  int v14; // eax@11
  int v15; // eax@11
  void *v16; // ecx@15
  int uiSrcSkipBytes; // [sp+Ch] [bp-38h]@5
  int uiDestSkipBytes; // [sp+10h] [bp-34h]@5
  _D3DLOCKED_RECT kLockRectSrc; // [sp+14h] [bp-30h]@3
  char *pSrcBytes; // [sp+1Ch] [bp-28h]@5
  _D3DLOCKED_RECT kLockRectDest; // [sp+20h] [bp-24h]@4
  GuildBD *v22; // [sp+28h] [bp-1Ch]@1
  char *pTempDest; // [sp+2Ch] [bp-18h]@5
  tagRECT rc; // [sp+30h] [bp-14h]@3
  unsigned int v25; // [sp+40h] [bp-4h]@1
  int v26; // [sp+44h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v1 = this;
  v22 = this;
  if ( this->m_lpSurSrc )
  {
    if ( this->m_lpSurDest )
    {
      v2 = this->m_lpSurSrc;
      v3 = 22;
      rc.left = 0;
      rc.top = 0;
      rc.right = 209;
      rc.bottom = 22;
      if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v2->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
              v2,
              &kLockRectSrc,
              &rc,
              0) )
      {
        v4 = v1->m_uiTextureYPos;
        rc.left = v1->m_uiTextureXPos;
        rc.top = v4;
        rc.right = rc.left + 209;
        v5 = v1->m_lpSurDest;
        rc.bottom = v4 + 22;
        if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v5->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
                v5,
                &kLockRectDest,
                &rc,
                0) )
        {
          v6 = kLockRectDest.pBits;
          pSrcBytes = (char *)kLockRectSrc.pBits;
          uiDestSkipBytes = kLockRectDest.Pitch - 836;
          uiSrcSkipBytes = kLockRectSrc.Pitch - 836;
          pTempDest = (char *)kLockRectDest.pBits;
          do
          {
            memset(pTempDest, 0, 0x344u);
            pTempDest += kLockRectDest.Pitch;
            --v3;
          }
          while ( v3 );
          v7 = v22;
          v8 = (char *)v6 + 4 * v1->m_kTextRect.left + kLockRectDest.Pitch * (v1->m_kTextRect.top - 1) - 12;
          v9 = v22->m_uiTextHeight == -4;
          pTempDest = (char *)v8;
          if ( !v9 )
          {
            do
            {
              memset32(pTempDest, -2147483648, v7->m_uiTextWidth + 8);
              v8 = (char *)v8 + kLockRectDest.Pitch;
              ++v3;
              v10 = v22->m_uiTextHeight + 4;
              pTempDest = (char *)v8;
              v7 = v22;
            }
            while ( v3 < (unsigned int)v10 );
          }
          v11 = 22;
          do
          {
            v12 = 209;
            do
            {
              v13 = pSrcBytes;
              v14 = *(_DWORD *)pSrcBytes;
              v15 = v14 & 0xFFFFFF;
              if ( v15 == 16712191 )
              {
                *((_BYTE *)v6 + 3) = -128;
              }
              else
              {
                if ( v15 != 16711935 )
                {
                  *(_DWORD *)v6 = v15;
                  *((_BYTE *)v6 + 3) = -1;
                }
              }
              v16 = (char *)v13 + 4;
              v6 = (char *)v6 + 4;
              --v12;
              pSrcBytes = (char *)v16;
            }
            while ( v12 );
            v6 = (char *)v6 + uiDestSkipBytes;
            --v11;
            pSrcBytes = (char *)v16 + uiSrcSkipBytes;
          }
          while ( v11 );
          v7->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v7->m_lpSurDest);
          v7->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v7->m_lpSurSrc);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00620300) --------------------------------------------------------
bool __cdecl GuildBD::IsInShowRange(NiPoint3 *kPos)
{
  float v1; // ST00_4@1
  float v2; // ST04_4@1
  float v3; // ST08_4@1
  float kPosa; // [sp+14h] [bp+8h]@1
  float kPosb; // [sp+14h] [bp+8h]@1

  v1 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - kPos->x;
  v2 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - kPos->y;
  v3 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - kPos->z;
  kPosa = v1 * v1 + v2 * v2 + v3 * v3;
  kPosb = sqrt(kPosa);
  return kPosb <= (double)GuildBD::ms_fMaxDistance;
}
// A7EB44: using guessed type float GuildBD__ms_fMaxDistance;

//----- (00620380) --------------------------------------------------------
void __thiscall GuildBD::_GuildBD(GuildBD *this)
{
  GuildBD *v1; // esi@1
  NiNode *v2; // edi@1
  NiScreenElements *v3; // edi@6
  NiNode *v4; // edi@11
  NiScreenElements *v5; // esi@15

  v1 = this;
  this->vfptr = (GuildBDVtbl *)&GuildBD::_vftable_;
  v2 = this->m_spNode.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spNode.m_pObject = 0;
  }
  v3 = v1->m_spScreenGeom.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spScreenGeom.m_pObject = 0;
  }
  operator delete__(v1->m_pcSpeech);
  v4 = v1->m_spNode.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v1->m_spScreenGeom.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
  }
}
// 9C116C: using guessed type int (__thiscall *GuildBD___vftable_)(void *p, char);

//----- (00620480) --------------------------------------------------------
void __thiscall GuildBD::SetSpeech(GuildBD *this, char *pcSpeech, GuildBD::EnemyStatus eEnemyStatus)
{
  GuildBD *v3; // esi@1
  char *v4; // ecx@3
  char v5; // bl@3
  unsigned int v6; // eax@8
  char *v7; // edx@10
  char *v8; // ecx@10
  char v9; // al@11
  char *v10; // eax@15

  v3 = this;
  if ( pcSpeech && *pcSpeech )
  {
    this->m_spNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
    v4 = this->m_pcSpeech;
    v5 = 0;
    if ( !v4 || strcmp(pcSpeech, v4) )
      v5 = 1;
    if ( v3->m_eEnemyStatus != eEnemyStatus || v5 )
    {
      v3->m_eEnemyStatus = eEnemyStatus;
      v6 = strlen(pcSpeech);
      if ( v3->m_uiSpeechLen < v6 )
        GuildBD::ReAlloc(v3, v6);
      v7 = v3->m_pcSpeech;
      v8 = pcSpeech;
      do
      {
        v9 = *v8;
        *v7++ = *v8++;
      }
      while ( v9 );
      if ( GuildBD::BeginDraw(v3) )
      {
        GuildBD::CalculateLine(v3);
        GuildBD::DrawTextA(v3);
        GuildBD::CopyTexture(v3);
        GuildBD::EndDraw(v3);
      }
    }
  }
  else
  {
    v10 = this->m_pcSpeech;
    if ( v10 )
    {
      *v10 = 0;
      this->m_uiTotalLine = 0;
    }
    this->m_spNode.m_pObject->baseclass_0.m_uFlags |= 1u;
  }
}

//----- (00620570) --------------------------------------------------------
void __thiscall GuildBD::Update(GuildBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  GuildBD *v4; // esi@1
  Char *v5; // eax@1
  Char *v6; // ebx@1
  NiPoint3 *v7; // eax@4
  double v8; // st7@4
  double v9; // st6@7
  NiProperty *v10; // eax@8
  NiProperty *v11; // eax@10
  double v12; // qt0@12
  _BYTE v13[12]; // ST0C_12@13
  float v14; // ST08_4@13
  float v15; // ST04_4@13
  unsigned int v16; // ST18_4@14
  CClientGuild *v17; // eax@14
  unsigned int v18; // ST18_4@16
  CClientGuild *v19; // eax@16
  char *v20; // eax@20
  char *v21; // eax@21
  char *v22; // eax@22
  NiScreenElements *v23; // eax@27
  bool v24; // zf@27
  float v25; // ecx@27
  float v26; // edx@27
  NiPoint3 kWorldPos; // [sp+24h] [bp-1Ch]@13
  NiPoint3 k2DOrthoPos; // [sp+30h] [bp-10h]@13
  float fDistNF; // [sp+3Ch] [bp-4h]@4
  GuildBD::EnemyStatus eStatus; // [sp+4Ch] [bp+Ch]@14

  v4 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, this->m_kCharHandle);
  v6 = v5;
  if ( !v5 )
    goto LABEL_31;
  if ( v5->m_byMode == 5 )
  {
LABEL_3:
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    return;
  }
  v7 = (NiPoint3 *)((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[6].Deaffect)(v5);
  fDistNF = World::GetDistanceToCamera(&g_kWorld, v7);
  v8 = fDistNF;
  if ( fDistNF <= (double)GuildBD::ms_fMaxDistance && v6->m_dwGuildRegNum )
  {
    v9 = GuildBD::ms_fTransNear;
    if ( GuildBD::ms_fTransNear <= v8 )
    {
      if ( GuildBD::ms_fTransFar >= v8 )
      {
        fDistNF = GuildBD::ms_fTransFar - v9;
        if ( 0.0 != fDistNF )
        {
          v12 = fDistNF;
          fDistNF = v8 - v9;
          fDistNF = 1.0 - fDistNF / v12;
          GuildBD::SetAlpha(v4, fDistNF);
        }
      }
      else
      {
        v11 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
        ++v11[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
        *(float *)&v11[3].baseclass_0.baseclass_0.baseclass_0.vfptr = 0.0;
      }
    }
    else
    {
      v10 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      ++v10[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      *(float *)&v10[3].baseclass_0.baseclass_0.baseclass_0.vfptr = 1.0;
    }
    Char::GetHeightPos(v6, &kWorldPos);
    kWorldPos.z = kWorldPos.z + 3.0;
    *(_DWORD *)v13 = (_DWORD)kWorldPos.x;
    *(_QWORD *)&v13[4] = *(_QWORD *)&kWorldPos.y;
    v14 = (double)PgWin::ms_uiScreenHeight;
    v15 = (double)PgWin::ms_uiScreenWidth;
    if ( !PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v15, v14, *(NiPoint3 *)v13, &k2DOrthoPos) )
      goto LABEL_3;
    v16 = v6->m_dwGuildRegNum;
    eStatus = 0;
    v17 = GuildTask::GetGuild();
    if ( CClientGuild::IsAttackableEnemyGuild(v17, v16) )
    {
      eStatus = 2;
    }
    else
    {
      v18 = v6->m_dwGuildRegNum;
      v19 = GuildTask::GetGuild();
      if ( CClientGuild::IsEnemyGuild(v19, v18) )
        eStatus = 1;
    }
    if ( GuildTask::GetGuildName(v6->m_dwGuildRegNum) )
    {
      if ( v6->m_GuildAcademyMemberFlag == 1 )
      {
        TextData::Get(0x86A3E3E4u);
        v20 = fs("[%s][%s]");
        GuildBD::SetSpeech(v4, v20, 0);
      }
      else
      {
        v21 = fs("[%s]");
        GuildBD::SetSpeech(v4, v21, eStatus);
      }
    }
    else
    {
      v22 = v4->m_pcSpeech;
      if ( v22 )
      {
        *v22 = 0;
        v4->m_uiTotalLine = 0;
      }
      v4->m_spNode.m_pObject->baseclass_0.m_uFlags |= 1u;
    }
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    k2DOrthoPos.x = k2DOrthoPos.x - 104.0;
    k2DOrthoPos.y = k2DOrthoPos.y - 22.0;
    if ( v6 == g_pkMainChar )
      k2DOrthoPos.y = k2DOrthoPos.y - 8.0;
    v23 = v4->m_spScreenGeom.m_pObject;
    k2DOrthoPos.y = k2DOrthoPos.y - 17.0;
    LODWORD(v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)k2DOrthoPos.x;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = k2DOrthoPos.y;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = k2DOrthoPos.z;
    v24 = v4->m_bGuildBDMove == 0;
    v25 = k2DOrthoPos.y;
    v26 = k2DOrthoPos.z;
    LODWORD(v4->m_k2DOrthoPos.x) = (_DWORD)k2DOrthoPos.x;
    v4->m_k2DOrthoPos.y = v25;
    v4->m_k2DOrthoPos.z = v26;
    if ( v24 )
      NiAVObject::Update(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fTime, 1);
  }
  else
  {
LABEL_31:
    v4->m_bAlive = 0;
  }
}
// A7EB44: using guessed type float GuildBD__ms_fMaxDistance;
// A7EB48: using guessed type float GuildBD__ms_fTransNear;
// A7EB4C: using guessed type float GuildBD__ms_fTransFar;

//----- (00620850) --------------------------------------------------------
void __thiscall GuildBD::CreateGeometry(GuildBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  GuildBD *v3; // esi@1
  NiTexture *v4; // ebx@1
  int v5; // edi@1
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@1
  NiTexture *v8; // ST0C_4@1
  NiScreenElementsData *v9; // edi@1
  void *v10; // eax@1
  NiTexture *v11; // eax@2
  NiScreenElements *v12; // edi@4
  void *v13; // eax@12
  NiTexture *v14; // eax@13
  NiNode *v15; // edi@15
  void *v16; // eax@23
  int v17; // eax@24
  int v18; // edi@24
  void *v19; // eax@28
  int v20; // eax@29
  int v21; // edi@29

  v3 = this;
  v4 = pkTexture;
  v5 = ((int (__thiscall *)(NiTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture);
  pkTexture = (NiTexture *)((int (__thiscall *)(NiTexture *))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
  v6 = 22 * iTexturePosIndex / (v5 / 0xD1u);
  v7 = 209 * iTexturePosIndex % (v5 / 0xD1u);
  v3->m_uiTextureYPos = v6;
  v8 = pkTexture;
  v3->m_uiTextureXPos = v7;
  v9 = PgUtil::CreateScreenGeometryData(v5, (unsigned int)v8, v7, v6, 0xD0u, 0x15u);
  v3->m_pkTexture = v4;
  v10 = operator new(0xC4u);
  pkTexture = (NiTexture *)v10;
  if ( v10 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v10, v9);
    pkTexture = v11;
  }
  else
  {
    pkTexture = 0;
    v11 = 0;
  }
  v12 = v3->m_spScreenGeom.m_pObject;
  if ( (NiTexture *)v12 != v11 )
  {
    if ( v12 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v12,
          1u);
      v11 = pkTexture;
    }
    v3->m_spScreenGeom.m_pObject = (NiScreenElements *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v13 = operator new(0xE8u);
  pkTexture = (NiTexture *)v13;
  if ( v13 )
  {
    NiNode::NiNode((NiNode *)v13, 0);
    pkTexture = v14;
  }
  else
  {
    pkTexture = 0;
    v14 = 0;
  }
  v15 = v3->m_spNode.m_pObject;
  if ( (NiTexture *)v15 != v14 )
  {
    if ( v15 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v15 )
        v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      v14 = pkTexture;
    }
    v3->m_spNode.m_pObject = (NiNode *)v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__stdcall *)(NiScreenElements *, _DWORD))v3->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v3->m_spScreenGeom.m_pObject,
    0);
  v16 = operator new(0x44u);
  pkTexture = (NiTexture *)v16;
  if ( v16 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v16);
    v18 = v17;
  }
  else
  {
    v18 = 0;
  }
  NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v18, v4);
  NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v18, 0);
  *(_DWORD *)(v18 + 28) = 2;
  NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)v18, 0);
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v18;
  InterlockedIncrement((volatile LONG *)(v18 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  v19 = operator new(0x60u);
  pkTexture = (NiTexture *)v19;
  if ( v19 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v19);
    v21 = v20;
  }
  else
  {
    v21 = 0;
  }
  ++*(_DWORD *)(v21 + 88);
  *(float *)(v21 + 68) = 1.0;
  *(float *)(v21 + 72) = 1.0;
  *(float *)(v21 + 76) = 1.0;
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v21;
  InterlockedIncrement((volatile LONG *)(v21 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
  NiAVObject::UpdateProperties(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
  v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (00620B20) --------------------------------------------------------
void __thiscall GuildBD::GuildBD(GuildBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  GuildBD *v3; // esi@1

  v3 = this;
  this->vfptr = (GuildBDVtbl *)&GuildBD::_vftable_;
  this->m_spScreenGeom.m_pObject = 0;
  this->m_spNode.m_pObject = 0;
  this->m_kCharHandle = -1;
  this->m_bAlive = 1;
  this->m_pcSpeech = 0;
  this->m_uiSpeechLen = 0;
  this->m_iTextureIndex = iTexturePosIndex;
  if ( pkTexture )
    GuildBD::CreateGeometry(this, pkTexture, iTexturePosIndex);
  v3->m_kColorRef = 16777215;
  v3->m_eEnemyStatus = 0;
  v3->m_bGuildBDMove = 0;
}
// 9C116C: using guessed type int (__thiscall *GuildBD___vftable_)(void *p, char);

//----- (00620BB0) --------------------------------------------------------
void __thiscall GuildBD::SetAlpha(GuildBD *this, float fAlpha)
{
  NiProperty *v2; // eax@1

  v2 = NiAVObject::GetProperty(&this->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
  ++v2[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v2[3].baseclass_0.baseclass_0.baseclass_0.vfptr = fAlpha;
}

//----- (00620BD0) --------------------------------------------------------
void *__thiscall GuildBD::_vector_deleting_destructor_(GuildBD *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildBD::_GuildBD(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00620C00) --------------------------------------------------------
void __thiscall IConBD::Create(IConBD *this, const char *pkFileName)
{
  IConBD *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_spIconWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  AniIconWin::CreateAniTexture(v2->m_spIconWin.m_pObject, pkFileName);
}

//----- (00620C30) --------------------------------------------------------
NiScreenElements *__thiscall IConBD::GetGeometry(IConBD *this)
{
  AniIconWin *v1; // ecx@1
  NiScreenElements *result; // eax@2

  v1 = this->m_spIconWin.m_pObject;
  if ( v1 )
    result = AniIconWin::GetGeometry(v1);
  else
    result = 0;
  return result;
}

//----- (00620C40) --------------------------------------------------------
void __thiscall IConBD::IConBD(IConBD *this)
{
  IConBD *v1; // esi@1
  AniIconWin *v2; // eax@1
  AniIconWin *v3; // edi@1
  AniIconWin *v4; // ebx@1

  v1 = this;
  this->vfptr = (IConBDVtbl *)&IConBD::_vftable_;
  this->m_spIconWin.m_pObject = 0;
  v2 = AniIconWin::CreateWin(0, 0, 16, 16, 0);
  v3 = v1->m_spIconWin.m_pObject;
  v4 = v2;
  if ( v3 != v2 )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spIconWin.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__cdecl *)(_DWORD))v1->m_spIconWin.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}
// 9C118C: using guessed type int (__thiscall *IConBD___vftable_)(void *p, char);

//----- (00620CF0) --------------------------------------------------------
void __thiscall IConBD::_IConBD(IConBD *this)
{
  IConBD *v1; // edi@1
  AniIconWin *v2; // esi@1
  AniIconWin *v3; // edi@6

  v1 = this;
  this->vfptr = (IConBDVtbl *)&IConBD::_vftable_;
  v2 = this->m_spIconWin.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spIconWin.m_pObject = 0;
  }
  v3 = v1->m_spIconWin.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
  }
}
// 9C118C: using guessed type int (__thiscall *IConBD___vftable_)(void *p, char);

//----- (00620D90) --------------------------------------------------------
void __thiscall IConBD::Update(IConBD *this, NiPoint3 WorldPos, float ftime)
{
  AniIconWin *v3; // ecx@1
  NiScreenElements *v4; // eax@2

  v3 = this->m_spIconWin.m_pObject;
  if ( v3 )
  {
    WorldPos.x = WorldPos.x - 16.0;
    v4 = AniIconWin::GetGeometry(v3);
    LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)WorldPos.x;
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = WorldPos.y;
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = WorldPos.z;
    NiAVObject::Update(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0, ftime, 1);
  }
}

//----- (00620DE0) --------------------------------------------------------
void *__thiscall IConBD::_scalar_deleting_destructor_(IConBD *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  IConBD::_IConBD(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00620E10) --------------------------------------------------------
bool __thiscall NameBD::IsAlive(NameBD *this, float fTime)
{
  return this->m_bAlive != 0;
}

//----- (00620E20) --------------------------------------------------------
void __thiscall NameBD::EndDraw(NameBD *this)
{
  NameBD *v1; // esi@1

  v1 = this;
  if ( this->m_lpSurSrc )
    this->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)this->m_lpSurSrc);
  if ( v1->m_lpSurDest )
    v1->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_lpSurDest);
}

//----- (00620E50) --------------------------------------------------------
NiScreenElements *__thiscall NameBD::GetIconGeometry(NameBD *this)
{
  return IConBD::GetGeometry(&this->m_IconBD);
}

//----- (00620E60) --------------------------------------------------------
void __thiscall NameBD::CreateNameIcon(NameBD *this, const char *pkFileName)
{
  IConBD::Create(&this->m_IconBD, pkFileName);
}

//----- (00620E70) --------------------------------------------------------
void __thiscall NameBD::SetNameBDMove(NameBD *this, bool b)
{
  this->m_bNameBDMove = b;
}

//----- (00620E80) --------------------------------------------------------
void __usercall CalculateStrlenInWidth_0(char *pcText<eax>, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>, HDC__ *hDC, unsigned int dwMaxWidth)
{
  char *v5; // edi@1
  char v6; // al@2
  int v7; // eax@4
  tagSIZE kSize; // [sp+4h] [bp-8h]@4

  v5 = pcText;
  *dwStrLen = 0;
  *dwWidth = 0;
  if ( pcText )
  {
    v6 = *pcText;
    if ( v6 )
    {
      do
      {
        if ( IsDBCSLeadByte(v6) )
        {
          GetTextExtentPoint32A(hDC, v5, 2, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          v5 += 2;
          *dwStrLen += 2;
        }
        else
        {
          GetTextExtentPoint32A(hDC, v5, 1, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          ++v5;
          ++*dwStrLen;
        }
        *dwWidth += v7;
        v6 = *v5;
      }
      while ( *v5 );
    }
  }
}

//----- (00620F00) --------------------------------------------------------
void __thiscall NameBD::_NameBD(NameBD *this)
{
  NameBD *v1; // esi@1
  NiScreenElements *v2; // edi@1
  NiScreenElements *v3; // esi@6

  v1 = this;
  this->vfptr = (NameBDVtbl *)&NameBD::_vftable_;
  v2 = this->m_spScreenGeom.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spScreenGeom.m_pObject = 0;
  }
  operator delete__(v1->m_pcSpeech);
  IConBD::_IConBD(&v1->m_IconBD);
  v3 = v1->m_spScreenGeom.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
  }
}
// 9C11E0: using guessed type int (__thiscall *NameBD___vftable_)(void *p, char);

//----- (00620FC0) --------------------------------------------------------
bool __thiscall NameBD::BeginDraw(NameBD *this)
{
  NameBD *v1; // edi@1
  NiTexture::RendererData *v2; // ecx@1
  bool result; // al@2
  int v4; // eax@3
  int v5; // ecx@5
  int v6; // eax@6

  v1 = this;
  v2 = this->m_pkTexture->m_pkRendererData;
  if ( v2 && (v4 = ((int (*)(void))v2->vfptr[1].GetWidth)()) != 0 )
  {
    (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v4 + 72))(v4, 0, &v1->m_lpSurDest);
    if ( v1->m_lpSurDest
      && (v5 = *(_DWORD *)(NameBD::ms_spTempTexture + 40)) != 0
      && (v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))()) != 0 )
    {
      (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v6 + 72))(v6, 0, &v1->m_lpSurSrc);
      result = v1->m_lpSurSrc != 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// AA2518: using guessed type int NameBD__ms_spTempTexture;

//----- (00621030) --------------------------------------------------------
void __thiscall NameBD::CalculateLine(NameBD *this)
{
  NameBD *v1; // edi@1
  IDirect3DSurface9 *v2; // eax@1
  void *v3; // ecx@2
  char *v4; // eax@3
  HDC__ *v5; // ST08_4@3
  int v6; // eax@6
  unsigned int v7; // esi@7
  unsigned int v8; // eax@7
  int v9; // edx@7
  void **v10; // [sp+0h] [bp-3Ch]@0
  unsigned int dwStrLen; // [sp+8h] [bp-34h]@3
  unsigned int dwTextWidth; // [sp+Ch] [bp-30h]@3
  tagSIZE kSize; // [sp+10h] [bp-2Ch]@2
  int i; // [sp+18h] [bp-24h]@2
  unsigned int *v15; // [sp+1Ch] [bp-20h]@2
  char *pcText; // [sp+20h] [bp-1Ch]@2
  HDC__ *hDC; // [sp+24h] [bp-18h]@2
  tagRECT kRect; // [sp+28h] [bp-14h]@2
  unsigned int v19; // [sp+38h] [bp-4h]@1
  int v20; // [sp+3Ch] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v1 = this;
  v2 = this->m_lpSurSrc;
  if ( v2 )
  {
    this->m_uiTotalLine = 0;
    this->m_uiTextWidth = 0;
    this->m_uiTextHeight = 0;
    this->m_uiLineHeight = 0;
    v2->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface((IUnknown *)v2, (_GUID *const )&hDC, v10);
    SetRect(&kRect, 0, 0, 279, 22);
    FillRect(hDC, &kRect, NameBD::ms_hEraseBrush);
    SelectObject(hDC, NameBD::ms_hFont);
    v3 = v1->m_pcSpeech;
    kSize.cx = 0;
    kSize.cy = 0;
    pcText = (char *)v3;
    GetTextExtentPoint32A(hDC, "W", 1, &kSize);
    v1->m_uiLineHeight = kSize.cy;
    i = 0;
    v15 = v1->m_auiLineStrLen;
    do
    {
      v4 = pcText;
      v5 = hDC;
      *(v15 - 1) = (unsigned int)pcText;
      CalculateStrlenInWidth_0(v4, v5, 0x10Eu, &dwStrLen, &dwTextWidth);
      if ( !dwStrLen )
        break;
      pcText += dwStrLen;
      *v15 = dwStrLen;
      if ( v1->m_uiTextWidth < dwTextWidth )
        v1->m_uiTextWidth = dwTextWidth;
      v6 = i;
      ++v1->m_uiTotalLine;
      ++v15;
      i = v6 + 1;
    }
    while ( (unsigned int)(v6 + 1) < 1 );
    v7 = v1->m_uiTextWidth;
    v8 = (279 - v7) >> 1;
    v9 = v1->m_uiTotalLine * (v1->m_uiLineHeight + 1) - 1;
    v1->m_iTextXPos = v8;
    v1->m_iTextYPos = 16 - v9;
    v1->m_kTextRect.left = v8 - 1;
    v1->m_kTextRect.right = v7 + v8;
    v1->m_kTextRect.bottom = 16;
    v1->m_uiTextHeight = v9;
    v1->m_kTextRect.top = 16 - v9 - 1;
    v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v1->m_lpSurSrc);
  }
}
// 621030: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (00621180) --------------------------------------------------------
void __thiscall NameBD::DrawTextA(NameBD *this)
{
  void **v1; // esi@0
  NameBD *v2; // edi@1
  int v3; // ecx@2
  int v4; // esi@2
  int v5; // ebx@3
  int v6; // esi@5
  unsigned int v7; // edx@6
  int v8; // edx@6
  int v9; // ebx@6
  int dwTextWidth; // [sp+4h] [bp-11Ch]@5
  int i; // [sp+8h] [bp-118h]@2
  int dwStrLen; // [sp+Ch] [bp-114h]@3
  unsigned int iTextYPos; // [sp+10h] [bp-110h]@2
  int iTextXPos; // [sp+14h] [bp-10Ch]@2
  HDC__ *hDC; // [sp+18h] [bp-108h]@2
  char characterTitleText[256]; // [sp+1Ch] [bp-104h]@5
  unsigned int v17; // [sp+11Ch] [bp-4h]@1
  int v18; // [sp+120h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  if ( this->m_lpSurSrc )
  {
    this->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface(
      (IUnknown *)this->m_lpSurSrc,
      (_GUID *const )&hDC,
      v1);
    SetBkMode(hDC, 1);
    SetTextColor(hDC, v2->m_kColorRef);
    SelectObject(hDC, NameBD::ms_hFont);
    v3 = v2->m_iTextYPos;
    v4 = 0;
    iTextXPos = v2->m_iTextXPos;
    iTextYPos = v3;
    i = 0;
    if ( v2->m_uiTotalLine )
    {
      do
      {
        v5 = 0;
        dwStrLen = 0;
        if ( v2->m_uiCharacterTitleLen )
        {
          if ( !v4 )
          {
            SetTextColor(hDC, 0xFFFFu);
            characterTitleText[0] = 0;
            memset(&characterTitleText[1], 0, 0xFFu);
            strncpy(characterTitleText, v2->m_apcLineText[0], v2->m_uiCharacterTitleLen);
            CalculateStrlenInWidth_0(
              characterTitleText,
              hDC,
              0x10Eu,
              (unsigned int *)&dwStrLen,
              (unsigned int *)&dwTextWidth);
            v5 = dwStrLen;
            v6 = iTextXPos;
            TextOutA(hDC, iTextXPos, iTextYPos, characterTitleText, dwStrLen);
            iTextXPos = dwTextWidth + v6;
            v4 = i;
          }
        }
        SetTextColor(hDC, v2->m_kColorRef);
        v7 = v2->m_auiLineStrLen[v4];
        v2->m_apcLineText[v4] += v2->m_uiCharacterTitleLen;
        v8 = v7 - v5;
        v9 = iTextYPos;
        TextOutA(hDC, iTextXPos, iTextYPos, v2->m_apcLineText[v4++], v8);
        iTextYPos = v9 + v2->m_uiLineHeight + 1;
        i = v4;
      }
      while ( v4 < v2->m_uiTotalLine );
    }
    v2->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v2->m_lpSurSrc);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00621350) --------------------------------------------------------
void __thiscall NameBD::CopyTexture(NameBD *this)
{
  NameBD *v1; // esi@1
  IDirect3DSurface9 *v2; // eax@3
  signed int v3; // ebx@3
  int v4; // ecx@4
  IDirect3DSurface9 *v5; // eax@4
  void *v6; // edx@5
  NameBD *v7; // edi@7
  void *v8; // esi@7
  bool v9; // zf@7
  int v10; // eax@8
  signed int v11; // esi@10
  void *v12; // ecx@11
  int v13; // eax@11
  int v14; // eax@11
  int v15; // eax@15
  int v16; // eax@15
  int v17; // eax@19
  int v18; // eax@19
  void *v19; // ecx@23
  int uiSrcSkipBytes; // [sp+Ch] [bp-38h]@5
  int uiDestSkipBytes; // [sp+10h] [bp-34h]@5
  _D3DLOCKED_RECT kLockRectSrc; // [sp+14h] [bp-30h]@3
  char *pSrcBytes; // [sp+1Ch] [bp-28h]@5
  _D3DLOCKED_RECT kLockRectDest; // [sp+20h] [bp-24h]@4
  char *pTempDest; // [sp+28h] [bp-1Ch]@5
  NameBD *v26; // [sp+2Ch] [bp-18h]@1
  tagRECT rc; // [sp+30h] [bp-14h]@3
  unsigned int v28; // [sp+40h] [bp-4h]@1
  int v29; // [sp+44h] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  v1 = this;
  v26 = this;
  if ( this->m_lpSurSrc )
  {
    if ( this->m_lpSurDest )
    {
      v2 = this->m_lpSurSrc;
      v3 = 22;
      rc.left = 0;
      rc.top = 0;
      rc.right = 279;
      rc.bottom = 22;
      if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v2->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
              v2,
              &kLockRectSrc,
              &rc,
              0) )
      {
        v4 = v1->m_uiTextureYPos;
        rc.left = v1->m_uiTextureXPos;
        rc.top = v4;
        rc.right = rc.left + 279;
        v5 = v1->m_lpSurDest;
        rc.bottom = v4 + 22;
        if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v5->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
                v5,
                &kLockRectDest,
                &rc,
                0) )
        {
          v6 = kLockRectDest.pBits;
          pSrcBytes = (char *)kLockRectSrc.pBits;
          uiDestSkipBytes = kLockRectDest.Pitch - 1116;
          uiSrcSkipBytes = kLockRectSrc.Pitch - 1116;
          pTempDest = (char *)kLockRectDest.pBits;
          do
          {
            memset(pTempDest, 0, 0x45Cu);
            pTempDest += kLockRectDest.Pitch;
            --v3;
          }
          while ( v3 );
          v7 = v26;
          v8 = (char *)v6 + 4 * v1->m_kTextRect.left + kLockRectDest.Pitch * (v1->m_kTextRect.top - 1) - 12;
          v9 = v26->m_uiTextHeight == -4;
          pTempDest = (char *)v8;
          if ( !v9 )
          {
            do
            {
              memset32(pTempDest, -2147483648, v7->m_uiTextWidth + 8);
              v8 = (char *)v8 + kLockRectDest.Pitch;
              ++v3;
              v10 = v26->m_uiTextHeight + 4;
              pTempDest = (char *)v8;
              v7 = v26;
            }
            while ( v3 < (unsigned int)v10 );
          }
          v26 = (NameBD *)22;
          do
          {
            v11 = 93;
            do
            {
              v12 = pSrcBytes;
              v13 = *(_DWORD *)pSrcBytes;
              v14 = v13 & 0xFFFFFF;
              if ( v14 == 16712191 )
              {
                *((_BYTE *)v6 + 3) = -128;
              }
              else
              {
                if ( v14 != 16711935 )
                {
                  *(_DWORD *)v6 = v14;
                  *((_BYTE *)v6 + 3) = -1;
                }
              }
              v15 = *((_DWORD *)v12 + 1);
              v16 = v15 & 0xFFFFFF;
              if ( v16 == 16712191 )
              {
                *((_BYTE *)v6 + 7) = -128;
              }
              else
              {
                if ( v16 != 16711935 )
                {
                  *((_DWORD *)v6 + 1) = v16;
                  *((_BYTE *)v6 + 7) = -1;
                }
              }
              v17 = *((_DWORD *)v12 + 2);
              v18 = v17 & 0xFFFFFF;
              if ( v18 == 16712191 )
              {
                *((_BYTE *)v6 + 11) = -128;
              }
              else
              {
                if ( v18 != 16711935 )
                {
                  *((_DWORD *)v6 + 2) = v18;
                  *((_BYTE *)v6 + 11) = -1;
                }
              }
              v19 = (char *)v12 + 12;
              v6 = (char *)v6 + 12;
              --v11;
              pSrcBytes = (char *)v19;
            }
            while ( v11 );
            v6 = (char *)v6 + uiDestSkipBytes;
            v9 = v26 == (NameBD *)1;
            v26 = (NameBD *)((char *)v26 - 1);
            pSrcBytes = (char *)v19 + uiSrcSkipBytes;
          }
          while ( !v9 );
          v7->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v7->m_lpSurDest);
          v7->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v7->m_lpSurSrc);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00621540) --------------------------------------------------------
bool __cdecl NameBD::IsInShowRange(NiPoint3 *kPos)
{
  float v1; // ST00_4@1
  float v2; // ST04_4@1
  float v3; // ST08_4@1
  float kPosa; // [sp+14h] [bp+8h]@1
  float kPosb; // [sp+14h] [bp+8h]@1

  v1 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - kPos->x;
  v2 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - kPos->y;
  v3 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - kPos->z;
  kPosa = v1 * v1 + v2 * v2 + v3 * v3;
  kPosb = sqrt(kPosa);
  return kPosb <= (double)NameBD::ms_fMaxDistance;
}
// A7EB80: using guessed type float NameBD__ms_fMaxDistance;

//----- (006215C0) --------------------------------------------------------
void __thiscall NameBD::SetSpeech(NameBD *this, char *pcSpeech)
{
  NameBD *v2; // esi@1
  char *v3; // eax@3
  unsigned int v4; // edx@7
  char *v5; // eax@7
  char *v6; // edx@7
  char v7; // cl@8
  int v8; // edi@9
  char *v9; // edx@11
  char *v10; // ecx@11
  char v11; // al@12
  IDirect3DSurface9 *v12; // eax@14
  IDirect3DSurface9 *v13; // esi@16
  char *v14; // eax@18

  v2 = this;
  if ( pcSpeech && *pcSpeech )
  {
    v3 = this->m_pcSpeech;
    if ( !v3
      || strcmp(v3, pcSpeech)
      || v2->m_kColorRef != v2->m_kPrevColorRef
      || v2->m_uiPreCharacterTitleLen != v2->m_uiCharacterTitleLen )
    {
      v4 = v2->m_kColorRef;
      v2->m_uiPreCharacterTitleLen = v2->m_uiCharacterTitleLen;
      v5 = pcSpeech;
      v2->m_kPrevColorRef = v4;
      v6 = pcSpeech + 1;
      do
        v7 = *v5++;
      while ( v7 );
      v8 = v5 - v6;
      if ( v2->m_uiSpeechLen < v5 - v6 )
      {
        operator delete__(v2->m_pcSpeech);
        v2->m_pcSpeech = (char *)operator new__(v8 + 1);
        v2->m_uiSpeechLen = v8;
      }
      v9 = v2->m_pcSpeech;
      v10 = pcSpeech;
      do
      {
        v11 = *v10;
        *v9++ = *v10++;
      }
      while ( v11 );
      if ( NameBD::BeginDraw(v2) )
      {
        NameBD::CalculateLine(v2);
        NameBD::DrawTextA(v2);
        NameBD::CopyTexture(v2);
        v12 = v2->m_lpSurSrc;
        if ( v12 )
          v12->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v2->m_lpSurSrc);
        v13 = v2->m_lpSurDest;
        if ( v13 )
          v13->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v13);
      }
    }
  }
  else
  {
    v14 = this->m_pcSpeech;
    if ( v14 )
    {
      *v14 = 0;
      this->m_uiTotalLine = 0;
    }
  }
}

//----- (006216E0) --------------------------------------------------------
void __thiscall NameBD::SetDropItem(NameBD *this, unsigned __int16 kHandle)
{
  NameBD *v2; // esi@1
  DropItem *v3; // eax@1
  DropItem *v4; // edi@1
  char *v5; // eax@2

  v2 = this;
  this->m_kCharHandle = kHandle;
  v3 = DropItemMgr::GetByHandle(&g_kDropItemMgr, kHandle);
  v4 = v3;
  if ( v3 )
  {
    v2->m_kColorRef = 2082559;
    v5 = DropItem::GetItemName(v3);
    NameBD::SetSpeech(v2, v5);
    DropItem::GetItemName(v4);
    sprintf(v2->m_kBDText, "%s");
  }
}

//----- (00621740) --------------------------------------------------------
void __thiscall NameBD::UpdateDropItem(NameBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  NameBD *v4; // esi@1
  DropItem *v5; // eax@1
  DropItem *v6; // edi@1
  NiNode *v7; // eax@2
  float v8; // ST28_4@2
  float v9; // ST2C_4@2
  float v10; // ST30_4@2
  double v11; // st7@2
  double v12; // st6@8
  NiProperty *v13; // eax@5
  double v14; // st7@5
  float v15; // ST34_4@9
  NiNode *v16; // eax@11
  float v17; // ST30_4@11
  _BYTE v18[12]; // ST0C_12@11
  float v19; // ST08_4@11
  float v20; // ST04_4@11
  ItemInfo *v21; // eax@13
  NiScreenElements *v22; // eax@23
  NiScreenElements *v23; // eax@23
  float v24; // eax@23
  double v25; // st5@23
  float v26; // ecx@23
  double v27; // st7@23
  NiPoint3 k2DOrthoPos; // [sp+34h] [bp-114h]@11
  float fDistNF; // [sp+40h] [bp-108h]@2
  char pkSpeechText[256]; // [sp+44h] [bp-104h]@23
  unsigned int v31; // [sp+144h] [bp-4h]@1
  int v32; // [sp+148h] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v4 = this;
  v5 = DropItemMgr::GetByHandle(&g_kDropItemMgr, this->m_kCharHandle);
  v6 = v5;
  if ( !v5
    || (v7 = v5->m_spNode.m_pObject,
        v8 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - v7->baseclass_0.m_kLocal.m_Translate.x,
        v9 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - v7->baseclass_0.m_kLocal.m_Translate.y,
        v10 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - v7->baseclass_0.m_kLocal.m_Translate.z,
        fDistNF = v9 * v9 + v8 * v8 + v10 * v10,
        fDistNF = sqrt(fDistNF),
        v11 = fDistNF,
        fDistNF > (double)NameBD::ms_fMaxDistance) )
  {
    v4->m_bAlive = 0;
    return;
  }
  if ( NameBD::ms_fTransNear <= v11 )
  {
    if ( NameBD::ms_fTransFar >= v11 )
    {
      v12 = NameBD::ms_fTransNear;
      fDistNF = NameBD::ms_fTransFar - NameBD::ms_fTransNear;
      if ( 0.0 == fDistNF )
        goto LABEL_11;
      v13 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v15 = v11 - v12;
      v14 = 1.0 - v15 / fDistNF;
    }
    else
    {
      v13 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v14 = 0.0;
    }
  }
  else
  {
    v13 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
    v14 = 1.0;
  }
  ++v13[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v13[3].baseclass_0.baseclass_0.baseclass_0.vfptr = v14;
LABEL_11:
  v16 = v6->m_spNode.m_pObject;
  v17 = v16->baseclass_0.m_kLocal.m_Translate.z + 12.0;
  *(_QWORD *)v18 = *(_QWORD *)&v16->baseclass_0.m_kLocal.m_Translate.x;
  *(_DWORD *)&v18[8] = LODWORD(v17);
  v19 = (double)PgWin::ms_uiScreenHeight;
  v20 = (double)PgWin::ms_uiScreenWidth;
  if ( PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v20, v19, *(NiPoint3 *)v18, &k2DOrthoPos) )
  {
    v21 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v6->m_kItemID);
    if ( v21 )
    {
      switch ( v21->ItemGradeType )
      {
        default:
          v4->m_kColorRef = 16777215;
          break;
        case 1:
          v4->m_kColorRef = 65280;
          break;
        case 2:
        case 5:
          v4->m_kColorRef = 16695821;
          break;
        case 3:
          v4->m_kColorRef = 58623;
          break;
        case 4:
          v4->m_kColorRef = 15671549;
          break;
        case 6:
          v4->m_kColorRef = 33023;
          break;
        case 7:
          v4->m_kColorRef = 16711935;
          break;
      }
    }
    else
    {
      v4->m_kColorRef = 3339263;
    }
    DropItem::GetItemName(v6);
    sprintf(pkSpeechText, "%s");
    NameBD::SetSpeech(v4, pkSpeechText);
    sprintf(v4->m_kBDText, "%s");
    v22 = v4->m_spScreenGeom.m_pObject;
    v4->m_uiCharacterTitleLen = 0;
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v23 = v4->m_spScreenGeom.m_pObject;
    k2DOrthoPos.x = k2DOrthoPos.x - 139.0;
    k2DOrthoPos.y = k2DOrthoPos.y - 22.0;
    LODWORD(v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)k2DOrthoPos.x;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = k2DOrthoPos.y;
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = k2DOrthoPos.z;
    v24 = k2DOrthoPos.y;
    v25 = k2DOrthoPos.x;
    v26 = k2DOrthoPos.z;
    v27 = (double)v4->m_kTextRect.left + k2DOrthoPos.x;
    LODWORD(v4->m_k2DOrthoPos.x) = (_DWORD)k2DOrthoPos.x;
    v4->m_k2DOrthoPos.y = v24;
    v4->m_k2DOrthoPos.z = v26;
    if ( PgWin::ms_iMsX.x > (signed int)v27
      && PgWin::ms_iMsX.x < (signed int)(v25 + (double)v4->m_kTextRect.right)
      && PgWin::ms_iMsY > (signed int)((double)v4->m_kTextRect.top + k2DOrthoPos.y)
      && PgWin::ms_iMsY < (signed int)(k2DOrthoPos.y + (double)v4->m_kTextRect.bottom)
      && (!g_ClickedNameBD || g_ClickedNameBD->m_k2DOrthoPos.z > (double)v4->m_k2DOrthoPos.z) )
      g_ClickedNameBD = v4;
    NiAVObject::Update(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fTime, 1);
  }
  else
  {
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}
// A7EB80: using guessed type float NameBD__ms_fMaxDistance;
// A7EB84: using guessed type float NameBD__ms_fTransNear;
// A7EB88: using guessed type float NameBD__ms_fTransFar;
// A85C00: using guessed type int __security_cookie;

//----- (00621B20) --------------------------------------------------------
void __thiscall NameBD::CreateGeometry(NameBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  NameBD *v3; // esi@1
  NiTexture *v4; // ebx@1
  int v5; // edi@1
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@1
  NiTexture *v8; // ST08_4@1
  NiScreenElementsData *v9; // edi@1
  void *v10; // eax@1
  NiTexture *v11; // eax@2
  NiScreenElements *v12; // edi@4
  void *v13; // eax@12
  int v14; // eax@13
  int v15; // edi@13
  void *v16; // eax@17
  int v17; // eax@18
  int v18; // edi@18

  v3 = this;
  v4 = pkTexture;
  v5 = ((int (__thiscall *)(NiTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture);
  pkTexture = (NiTexture *)((int (__thiscall *)(NiTexture *))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
  v6 = 22 * iTexturePosIndex / (v5 / 0x117u);
  v7 = 279 * iTexturePosIndex % (v5 / 0x117u);
  v3->m_uiTextureYPos = v6;
  v8 = pkTexture;
  v3->m_uiTextureXPos = v7;
  v9 = PgUtil::CreateScreenGeometryData(v5, (unsigned int)v8, v7, v6, 0x116u, 0x15u);
  v3->m_pkTexture = v4;
  v10 = operator new(0xC4u);
  pkTexture = (NiTexture *)v10;
  if ( v10 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v10, v9);
    pkTexture = v11;
  }
  else
  {
    pkTexture = 0;
    v11 = 0;
  }
  v12 = v3->m_spScreenGeom.m_pObject;
  if ( (NiTexture *)v12 != v11 )
  {
    if ( v12 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v12,
          1u);
      v11 = pkTexture;
    }
    v3->m_spScreenGeom.m_pObject = (NiScreenElements *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v13 = operator new(0x44u);
  pkTexture = (NiTexture *)v13;
  if ( v13 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v13);
    v15 = v14;
  }
  else
  {
    v15 = 0;
  }
  NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v15, v4);
  NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v15, 0);
  *(_DWORD *)(v15 + 28) = 2;
  NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)v15, 0);
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v15;
  InterlockedIncrement((volatile LONG *)(v15 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
  v16 = operator new(0x60u);
  pkTexture = (NiTexture *)v16;
  if ( v16 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v16);
    v18 = v17;
  }
  else
  {
    v18 = 0;
  }
  ++*(_DWORD *)(v18 + 88);
  *(float *)(v18 + 68) = 1.0;
  *(float *)(v18 + 72) = 1.0;
  *(float *)(v18 + 76) = 1.0;
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v18;
  InterlockedIncrement((volatile LONG *)(v18 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  NiAVObject::UpdateProperties(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
  v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (00621D70) --------------------------------------------------------
void __thiscall NameBD::NameBD(NameBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  NameBD *v3; // esi@1

  v3 = this;
  this->vfptr = (NameBDVtbl *)&NameBD::_vftable_;
  this->m_spScreenGeom.m_pObject = 0;
  IConBD::IConBD(&this->m_IconBD);
  v3->m_kCharHandle = -1;
  v3->m_bAlive = 1;
  v3->m_pcSpeech = 0;
  v3->m_uiSpeechLen = 0;
  v3->m_iTextureIndex = iTexturePosIndex;
  if ( pkTexture )
    NameBD::CreateGeometry(v3, pkTexture, iTexturePosIndex);
  v3->m_kColorRef = 16777215;
  v3->m_kPrevColorRef = 16777215;
  v3->m_uiCharacterTitleLen = 0;
  v3->m_uiNameBDType = 0;
  v3->m_uiPreCharacterTitleLen = 0;
  v3->m_bNameBDMove = 0;
}
// 9C11E0: using guessed type int (__thiscall *NameBD___vftable_)(void *p, char);

//----- (00621E20) --------------------------------------------------------
void __thiscall NameBD::Update(NameBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  NameBD *v4; // edi@1
  Char *v5; // eax@1
  Char *v6; // esi@1
  int v7; // eax@2
  double v8; // st7@2
  double v9; // st6@4
  NiProperty *v10; // eax@5
  double v11; // st7@5
  float v12; // ST04_4@11
  CClientGuild *v13; // ebx@16
  CMiniHouseMgr *v14; // eax@16
  stMINIHOUSEINFO *v15; // eax@16
  const char *v16; // eax@27
  CClientGuild *v17; // eax@29
  AbStateInfecteeVtbl *v18; // eax@31
  const char *v19; // eax@31
  RaidMemberInfo *v20; // eax@31
  char v21; // al@35
  unsigned int v22; // ecx@36
  CClientGuild *v23; // eax@51
  CClientGuild *v24; // eax@55
  CClientGuildAcademy *v25; // eax@59
  CClientGuildAcademy *v26; // eax@63
  CClientGuildAcademy *v27; // eax@69
  CClientGuildAcademy *v28; // eax@71
  CClientGuildAcademy *v29; // eax@73
  bool v30; // al@73
  CClientGuild *v31; // eax@74
  CClientGuild *v32; // eax@76
  CClientGuild *v33; // eax@78
  CClientGuild *v34; // eax@81
  char v35; // al@91
  int v36; // eax@93
  char v37; // cl@94
  char v38; // al@97
  char *v39; // eax@99
  NiScreenElements *v40; // eax@105
  double v41; // st7@106
  float v42; // eax@106
  float v43; // ecx@106
  double v44; // st5@106
  double v45; // st7@116
  float v46; // ecx@116
  float v47; // edx@116
  float v48; // [sp+4h] [bp-154h]@11
  int v49; // [sp+8h] [bp-150h]@11
  float v50; // [sp+Ch] [bp-14Ch]@11
  float v51; // [sp+10h] [bp-148h]@11
  int v52; // [sp+14h] [bp-144h]@14
  NiPoint3 kWorldPos; // [sp+24h] [bp-134h]@11
  NiPoint3 IconPos; // [sp+30h] [bp-128h]@2
  float *fDistance; // [sp+3Ch] [bp-11Ch]@2
  NiPoint3 k2DOrthoPos; // [sp+40h] [bp-118h]@11
  char byPkGrade; // [sp+4Fh] [bp-109h]@31
  PartyMemberInfo *fDistNF; // [sp+50h] [bp-108h]@2
  char pkSpeechText[256]; // [sp+54h] [bp-104h]@13
  unsigned int v60; // [sp+154h] [bp-4h]@1
  int v61; // [sp+158h] [bp+0h]@1

  v60 = (unsigned int)&v61 ^ __security_cookie;
  v4 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, this->m_kCharHandle);
  v6 = v5;
  if ( !v5
    || (v7 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[6].Deaffect)(v5),
        IconPos.x = pkCamera->baseclass_0.m_kLocal.m_Translate.x - *(float *)v7,
        IconPos.y = pkCamera->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v7 + 4),
        IconPos.z = pkCamera->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v7 + 8),
        *(float *)&fDistNF = IconPos.y * IconPos.y + IconPos.x * IconPos.x + IconPos.z * IconPos.z,
        *(float *)&fDistNF = sqrt(*(float *)&fDistNF),
        fDistance = (float *)fDistNF,
        v8 = *(float *)&fDistNF,
        *(float *)&fDistNF > (double)NameBD::ms_fMaxDistance) )
  {
    v4->m_bAlive = 0;
    return;
  }
  v9 = NameBD::ms_fTransNear;
  if ( NameBD::ms_fTransNear <= v8 )
  {
    if ( NameBD::ms_fTransFar >= v8 )
    {
      *(float *)&fDistance = v8 - v9;
      *(float *)&fDistNF = NameBD::ms_fTransFar - v9;
      if ( 0.0 == *(float *)&fDistNF )
        goto LABEL_11;
      v10 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v11 = 1.0 - *(float *)&fDistance / *(float *)&fDistNF;
    }
    else
    {
      v10 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v11 = 0.0;
    }
  }
  else
  {
    v10 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
    v11 = 1.0;
  }
  ++v10[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v10[3].baseclass_0.baseclass_0.baseclass_0.vfptr = v11;
LABEL_11:
  Char::GetHeightPos(v6, &kWorldPos);
  kWorldPos.z = kWorldPos.z + 3.0;
  v49 = (signed int)kWorldPos.x;
  v50 = kWorldPos.y;
  v51 = kWorldPos.z;
  v48 = (double)PgWin::ms_uiScreenHeight;
  v12 = (double)PgWin::ms_uiScreenWidth;
  if ( !PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v12, v48, *(NiPoint3 *)&v49, &k2DOrthoPos) )
  {
LABEL_12:
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
    return;
  }
  pkSpeechText[0] = 0;
  if ( Char::IsNPC(v6) )
  {
    v4->m_kColorRef = 42495;
    v52 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
    sprintf(pkSpeechText, "%s");
    v49 = (int)pkSpeechText;
    LODWORD(v48) = "%s";
LABEL_89:
    sprintf(v4->m_kBDText, LODWORD(v48));
    goto LABEL_90;
  }
  if ( !(unsigned __int8)((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[1].Affect)(v6) )
  {
    if ( (unsigned __int8)v6->baseclass_0.vfptr[20].GetAbstateColor((AbStateInfectee *)v6) )
    {
      v4->m_kColorRef = 16777215;
      v52 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
      sprintf(pkSpeechText, "%s");
      v49 = (int)pkSpeechText;
      LODWORD(v48) = "%s";
      goto LABEL_89;
    }
    if ( v6 == g_pkMainChar )
    {
      v4->m_kColorRef = 13886081;
      v52 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
      sprintf(pkSpeechText, "%s");
      v49 = (int)pkSpeechText;
      LODWORD(v48) = "%s";
      goto LABEL_89;
    }
    v4->m_kColorRef = 16777215;
    v16 = (const char *)((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
    fDistNF = (PartyMemberInfo *)&v48;
    Name5::Name5((Name5 *)&v48, v16);
    fDistNF = Party::GetMemberInfo(&g_kParty, *(Name5 *)&v48);
    if ( *(float *)&fDistNF != 0.0 )
      v4->m_kColorRef = 16433206;
    v52 = v6->m_dwGuildRegNum;
    v17 = GuildTask::GetGuild();
    if ( CClientGuild::IsAttackableEnemyGuild(v17, v52) )
      v4->m_kColorRef = 255;
    v18 = v6->baseclass_0.vfptr;
    byPkGrade = BYTE3(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]);
    v19 = (const char *)((int (__thiscall *)(Char *))v18[2].DeleteAbStateByAbstateIndex)(v6);
    fDistance = &v48;
    Name5::Name5((Name5 *)&v48, v19);
    v20 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, *(Name5 *)&v48);
    if ( *(float *)&fDistNF != 0.0 || v20 || !(byPkGrade & 3) )
      goto LABEL_66;
    if ( byte_B30C4C != 4 )
    {
LABEL_65:
      v4->m_kColorRef = 255;
      goto LABEL_66;
    }
    v21 = v6->m_GuildAcademyMemberFlag;
    if ( v21 != 1 )
    {
      v22 = v6->m_dwGuildRegNum;
      if ( g_pkMainChar->m_dwGuildRegNum == v22 )
      {
        if ( !v22 )
          goto LABEL_42;
LABEL_41:
        v4->m_kColorRef = 16777215;
LABEL_42:
        if ( !v6->m_dwGuildRegNum )
          v4->m_kColorRef = 255;
        if ( !v6->m_GuildAcademyMemberFlag && !g_pkMainChar->m_dwGuildRegNum )
          v4->m_kColorRef = 255;
        if ( v6->m_GuildAcademyMemberFlag == 1 && !g_pkMainChar->m_dwGuildRegNum )
          v4->m_kColorRef = 255;
        if ( !v6->m_GuildAcademyMemberFlag )
        {
          v52 = v6->m_dwGuildRegNum;
          v23 = GuildTask::GetGuild();
          if ( !CClientGuild::IsAttackableEnemyGuild(v23, v52) )
          {
            if ( v6->m_dwGuildRegNum != g_pkMainChar->m_dwGuildRegNum )
              v4->m_kColorRef = 255;
          }
        }
        if ( v6->m_GuildAcademyMemberFlag == 1 )
        {
          v52 = v6->m_dwGuildRegNum;
          v24 = GuildTask::GetGuild();
          if ( !CClientGuild::IsAttackableEnemyGuild(v24, v52) )
          {
            if ( v6->m_dwGuildRegNum != g_pkMainChar->m_dwGuildRegNum )
              v4->m_kColorRef = 255;
          }
        }
        if ( !v6->m_GuildAcademyMemberFlag )
        {
          v52 = v6->m_dwGuildRegNum;
          v25 = GuildAcademyTask::GetGuildAcademy();
          if ( !CClientGuildAcademy::FindEnemyGuildAcademyMember(v25, v52) )
          {
            if ( v6->m_dwGuildRegNum != g_pkMainChar->m_dwGuildRegNum )
              v4->m_kColorRef = 255;
          }
        }
        if ( v6->m_GuildAcademyMemberFlag == 1 )
        {
          v52 = v6->m_dwGuildRegNum;
          v26 = GuildAcademyTask::GetGuildAcademy();
          if ( !CClientGuildAcademy::FindEnemyGuildAcademyMember(v26, v52) )
          {
            if ( v6->m_dwGuildRegNum != g_pkMainChar->m_dwGuildRegNum )
              goto LABEL_65;
          }
        }
LABEL_66:
        if ( byte_B30C4C != 4 || !(byPkGrade & 1) || *(float *)&fDistNF == 0.0 )
          goto LABEL_81;
        v27 = GuildAcademyTask::GetGuildAcademy();
        if ( CClientGuildAcademy::IsGuildWar(v27) )
        {
          if ( v6->m_GuildAcademyMemberFlag != 1 )
          {
LABEL_73:
            v52 = v6->m_dwGuildRegNum;
            v29 = GuildAcademyTask::GetGuildAcademy();
            v30 = CClientGuildAcademy::FindEnemyGuildAcademyMember(v29, v52);
            goto LABEL_79;
          }
          v52 = v6->m_dwGuildRegNum;
          v28 = GuildAcademyTask::GetGuildAcademy();
          if ( !CClientGuildAcademy::FindEnemyGuildAcademyMember(v28, v52) )
          {
            if ( v6->m_GuildAcademyMemberFlag == 1 )
              goto LABEL_81;
            goto LABEL_73;
          }
LABEL_80:
          v4->m_kColorRef = 255;
LABEL_81:
          v34 = GuildTask::GetGuild();
          if ( v34 && v34->m_GttEnemyInfo.uiStatus == 2 && g_pkMainChar->m_dwGuildRegNum != v6->m_dwGuildRegNum )
            v4->m_kColorRef = 255;
          if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount > 0
            || v6->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount > 0 )
            v4->m_kColorRef = 255;
          v52 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
          sprintf(pkSpeechText, "%s");
          v49 = (int)pkSpeechText;
          LODWORD(v48) = "%s";
          goto LABEL_89;
        }
        v52 = v6->m_dwGuildRegNum;
        v31 = GuildTask::GetGuild();
        if ( !CClientGuild::IsEnemyGuild(v31, v52) )
          goto LABEL_81;
        if ( v6->m_GuildAcademyMemberFlag != 1 )
        {
          v52 = v6->m_dwGuildRegNum;
          v32 = GuildTask::GetGuild();
          if ( CClientGuild::IsEnemyGuild(v32, v52) )
            goto LABEL_80;
          if ( v6->m_GuildAcademyMemberFlag != 1 )
            goto LABEL_81;
        }
        v52 = v6->m_dwGuildRegNum;
        v33 = GuildTask::GetGuild();
        v30 = CClientGuild::IsAttackableEnemyGuild(v33, v52);
LABEL_79:
        if ( !v30 )
          goto LABEL_81;
        goto LABEL_80;
      }
      if ( v21 != 1 )
        goto LABEL_42;
    }
    if ( g_pkMainChar->m_dwGuildRegNum != v6->m_dwGuildRegNum )
      goto LABEL_42;
    goto LABEL_41;
  }
  v13 = GuildTask::GetGuild();
  v52 = v6->m_kHandle;
  v14 = (CMiniHouseMgr *)CGuildMonster::GetInstance();
  v15 = CGuildMonster::GetGuildEumFromMob(v14, v52);
  if ( v15 && v15 == (stMINIHOUSEINFO *)g_pkMainChar->m_dwGuildRegNum )
  {
    v4->m_kColorRef = 16777215;
  }
  else
  {
    if ( v13 && v13->m_GttEnemyInfo.uiStatus == 2 && g_pkMainChar->m_dwGuildRegNum != v6->m_dwGuildRegNum )
      v4->m_kColorRef = 255;
  }
LABEL_90:
  if ( v6->m_bUseCharTitle && (v35 = v6->m_byMode, v35 != 4) && v35 != 5 )
  {
    v36 = (int)v6->m_CharTitleName;
    do
      v37 = *(_BYTE *)v36++;
    while ( v37 );
    v4->m_uiCharacterTitleLen = v36 - (_DWORD)((char *)v6 + 210);
    v52 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
    LODWORD(v51) = (char *)v6 + 209;
    sprintf(pkSpeechText, "%s %s");
    LODWORD(v48) = pkSpeechText;
    sprintf(v4->m_kBDText, "%s");
  }
  else
  {
    v4->m_uiCharacterTitleLen = 0;
  }
  v38 = v6->m_byMode;
  if ( v38 == 5 )
    goto LABEL_12;
  if ( v38 == 4 )
  {
    v52 = ((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
    v39 = TextData::Get(0x93B1FCE9u);
    sprintf(pkSpeechText, v39);
    v49 = (int)pkSpeechText;
    sprintf(v4->m_kBDText, "%s");
  }
  if ( pkSpeechText[0] )
    NameBD::SetSpeech(v4, pkSpeechText);
  v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  k2DOrthoPos.x = k2DOrthoPos.x - 139.0;
  k2DOrthoPos.y = k2DOrthoPos.y - 22.0;
  if ( v6 == g_pkMainChar )
    k2DOrthoPos.y = k2DOrthoPos.y - 8.0;
  if ( !v4->m_bNameBDMove )
  {
    v40 = v4->m_spScreenGeom.m_pObject;
    LODWORD(v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)k2DOrthoPos.x;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = k2DOrthoPos.y;
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = k2DOrthoPos.z;
  }
  v41 = (double)v4->m_kTextRect.left;
  v42 = k2DOrthoPos.y;
  v43 = k2DOrthoPos.z;
  v44 = k2DOrthoPos.x;
  LODWORD(v4->m_k2DOrthoPos.x) = (_DWORD)k2DOrthoPos.x;
  v4->m_k2DOrthoPos.y = v42;
  v4->m_k2DOrthoPos.z = v43;
  if ( PgWin::ms_iMsX.x > (signed int)(v41 + v44)
    && PgWin::ms_iMsX.x < (signed int)(v44 + (double)v4->m_kTextRect.right)
    && PgWin::ms_iMsY > (signed int)((double)v4->m_kTextRect.top + k2DOrthoPos.y)
    && PgWin::ms_iMsY < (signed int)(k2DOrthoPos.y + (double)v4->m_kTextRect.bottom) )
  {
    if ( g_ClickedNameBD )
    {
      if ( g_ClickedNameBD->m_k2DOrthoPos.z > (double)v4->m_k2DOrthoPos.z )
        g_ClickedNameBD = v4;
    }
    else
    {
      g_ClickedNameBD = v4;
    }
  }
  if ( !v4->m_bNameBDMove )
  {
    v52 = 1;
    v51 = v43;
    NiAVObject::Update(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fTime, 1);
  }
  v45 = (double)v4->m_iTextXPos;
  v46 = v4->m_k2DOrthoPos.y;
  IconPos.x = v4->m_k2DOrthoPos.x;
  v47 = v4->m_k2DOrthoPos.z;
  IconPos.x = v45 + IconPos.x;
  v49 = (signed int)IconPos.x;
  v50 = v46;
  v51 = v47;
  IConBD::Update(&v4->m_IconBD, *(NiPoint3 *)&v49, fTime);
}
// A7EB80: using guessed type float NameBD__ms_fMaxDistance;
// A7EB84: using guessed type float NameBD__ms_fTransNear;
// A7EB88: using guessed type float NameBD__ms_fTransFar;
// A85C00: using guessed type int __security_cookie;
// B30C4C: using guessed type char byte_B30C4C;

//----- (00622740) --------------------------------------------------------
void __thiscall NameBD::SetChar(NameBD *this, unsigned __int16 kHandle)
{
  NameBD *v2; // edi@1
  Char *v3; // eax@1
  Char *v4; // esi@1
  unsigned __int16 v5; // ST08_2@9
  CMiniHouseMgr *v6; // eax@9
  stMINIHOUSEINFO *v7; // eax@9
  int v8; // eax@11
  char *v9; // eax@18

  v2 = this;
  this->m_kCharHandle = kHandle;
  v3 = CharMgr::GetChar(&g_kCharMgr, kHandle);
  v4 = v3;
  if ( v3 )
  {
    if ( v3 == g_pkMainChar )
    {
      v2->m_kColorRef = 2082559;
    }
    else
    {
      if ( Char::IsNPC(v3) )
      {
LABEL_5:
        v2->m_kColorRef = 3339263;
      }
      else
      {
        if ( !Char::IsResource(v4) )
        {
          if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[1].Affect)(v4) )
          {
            v5 = v4->m_kHandle;
            v6 = (CMiniHouseMgr *)CGuildMonster::GetInstance();
            v7 = CGuildMonster::GetGuildEumFromMob(v6, v5);
            if ( !v7 || v7 != (stMINIHOUSEINFO *)g_pkMainChar->m_dwGuildRegNum )
            {
              v8 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[5].Deaffect)(v4);
              switch ( Char::GetLvGapIndex(g_pkMainChar, v8) )
              {
                case 2u:
                  goto LABEL_5;
                case 0u:
                  v2->m_kColorRef = 1910206;
                  break;
                case 1u:
                  v2->m_kColorRef = 2466047;
                  break;
                case 3u:
                  v2->m_kColorRef = 5695322;
                  break;
                default:
                  v2->m_kColorRef = 12632256;
                  break;
              }
              goto LABEL_18;
            }
          }
          else
          {
            if ( !(unsigned __int8)v4->baseclass_0.vfptr[20].GetAbstateColor((AbStateInfectee *)v4) )
              goto LABEL_18;
          }
          v2->m_kColorRef = 16777215;
          goto LABEL_18;
        }
        v2->m_kColorRef = 15631086;
      }
    }
LABEL_18:
    v9 = (char *)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
    NameBD::SetSpeech(v2, v9);
    ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
    sprintf(v2->m_kBDText, "%s");
  }
}

//----- (00622880) --------------------------------------------------------
void __thiscall NameBD::UpdateMiniHause(NameBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  NameBD *v4; // esi@1
  int v5; // edi@2
  int v6; // eax@3
  int v7; // ebx@3
  int v8; // edx@3
  float v9; // ST38_4@3
  float v10; // ST3C_4@3
  float v11; // ST40_4@3
  double v12; // st7@3
  double v13; // st6@5
  NiProperty *v14; // eax@6
  double v15; // st7@6
  int v16; // eax@12
  double v17; // st7@13
  _BYTE v18[12]; // ST0C_12@15
  float v19; // ST08_4@15
  float v20; // ST04_4@15
  NiScreenElements *v21; // eax@17
  NiScreenElements *v22; // eax@17
  float v23; // eax@17
  double v24; // st5@17
  float v25; // ecx@17
  double v26; // st7@17
  __int64 kCurPos_4; // [sp+30h] [bp-2Ch]@3
  float fDistance; // [sp+44h] [bp-18h]@1
  NiPoint3 k2DOrthoPos; // [sp+48h] [bp-14h]@3
  float fDistNF; // [sp+54h] [bp-8h]@1
  unsigned int v31; // [sp+58h] [bp-4h]@1
  int v32; // [sp+5Ch] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v4 = this;
  LODWORD(fDistNF) = this->m_kCharHandle;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    &g_kMiniHouseMgr,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&fDistance,
    (const unsigned __int16 *)&fDistNF);
  if ( LODWORD(fDistance) == stru_B67CF0
    || (v5 = *(_DWORD *)(LODWORD(fDistance) + 16)) == 0
    || (v6 = *(_DWORD *)(v5 + 36),
        v8 = *(_DWORD *)(v6 + 148),
        LODWORD(kCurPos_4) = *(_DWORD *)(v6 + 144),
        LODWORD(k2DOrthoPos.x) = *(_DWORD *)(v6 + 140),
        v7 = (signed int)k2DOrthoPos.x,
        HIDWORD(kCurPos_4) = v8,
        LODWORD(k2DOrthoPos.y) = *(_DWORD *)(v6 + 144),
        LODWORD(k2DOrthoPos.z) = *(_DWORD *)(v6 + 148),
        v9 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - k2DOrthoPos.x,
        v10 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - k2DOrthoPos.y,
        v11 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - k2DOrthoPos.z,
        fDistNF = v10 * v10 + v9 * v9 + v11 * v11,
        fDistNF = sqrt(fDistNF),
        fDistance = fDistNF,
        v12 = fDistNF,
        fDistNF > (double)NameBD::ms_fMaxDistance) )
  {
    v4->m_bAlive = 0;
    return;
  }
  v13 = NameBD::ms_fTransNear;
  if ( NameBD::ms_fTransNear <= v12 )
  {
    if ( NameBD::ms_fTransFar >= v12 )
    {
      fDistance = v12 - v13;
      fDistNF = NameBD::ms_fTransFar - v13;
      if ( 0.0 == fDistNF )
        goto LABEL_12;
      v14 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v15 = 1.0 - fDistance / fDistNF;
    }
    else
    {
      v14 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v15 = 0.0;
    }
  }
  else
  {
    v14 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
    v15 = 1.0;
  }
  ++v14[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v14[3].baseclass_0.baseclass_0.baseclass_0.vfptr = v15;
LABEL_12:
  v16 = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 36) + 72))("Name");
  if ( v16 )
    v17 = *(float *)(v16 + 148);
  else
    v17 = *((float *)&kCurPos_4 + 1) + 56.0;
  *((float *)&kCurPos_4 + 1) = v17;
  *(_DWORD *)v18 = v7;
  *(_QWORD *)&v18[4] = kCurPos_4;
  v19 = (double)PgWin::ms_uiScreenHeight;
  v20 = (double)PgWin::ms_uiScreenWidth;
  if ( PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v20, v19, *(NiPoint3 *)v18, &k2DOrthoPos) )
  {
    v21 = v4->m_spScreenGeom.m_pObject;
    v4->m_kColorRef = 65535;
    v4->m_uiCharacterTitleLen = 0;
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    v22 = v4->m_spScreenGeom.m_pObject;
    k2DOrthoPos.x = k2DOrthoPos.x - 139.0;
    k2DOrthoPos.y = k2DOrthoPos.y - 22.0;
    LODWORD(v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)k2DOrthoPos.x;
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = k2DOrthoPos.y;
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = k2DOrthoPos.z;
    v23 = k2DOrthoPos.y;
    v24 = k2DOrthoPos.x;
    v25 = k2DOrthoPos.z;
    v26 = (double)v4->m_kTextRect.left + k2DOrthoPos.x;
    LODWORD(v4->m_k2DOrthoPos.x) = (_DWORD)k2DOrthoPos.x;
    v4->m_k2DOrthoPos.y = v23;
    v4->m_k2DOrthoPos.z = v25;
    if ( PgWin::ms_iMsX.x > (signed int)v26
      && PgWin::ms_iMsX.x < (signed int)(v24 + (double)v4->m_kTextRect.right)
      && PgWin::ms_iMsY > (signed int)((double)v4->m_kTextRect.top + k2DOrthoPos.y)
      && PgWin::ms_iMsY < (signed int)(k2DOrthoPos.y + (double)v4->m_kTextRect.bottom)
      && (!g_ClickedMiniHouseBD || g_ClickedNameBD && g_ClickedNameBD->m_k2DOrthoPos.z > (double)v4->m_k2DOrthoPos.z) )
      g_ClickedMiniHouseBD = (int)v4;
    NiAVObject::Update(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fTime, 1);
  }
  else
  {
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}
// A7EB80: using guessed type float NameBD__ms_fMaxDistance;
// A7EB84: using guessed type float NameBD__ms_fTransNear;
// A7EB88: using guessed type float NameBD__ms_fTransFar;
// A85C00: using guessed type int __security_cookie;
// AA2510: using guessed type int g_ClickedMiniHouseBD;

//----- (00622BB0) --------------------------------------------------------
void *__thiscall NameBD::_scalar_deleting_destructor_(NameBD *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NameBD::_NameBD(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00622BE0) --------------------------------------------------------
void __usercall DrawVLine(unsigned int uiPitch<esi>, unsigned int uiY1<edx>, unsigned int uiY2<eax>, unsigned int uiColor<edi>, unsigned int *puiDest, unsigned int uiX)
{
  unsigned int v6; // eax@1
  char *i; // ecx@1

  v6 = uiY2 - uiY1 + 1;
  for ( i = (char *)&puiDest[uiX] + uiY1 * uiPitch; v6; --v6 )
  {
    *(_DWORD *)i = uiColor;
    i += uiPitch;
  }
}

//----- (00622C10) --------------------------------------------------------
void __usercall FillSpr(unsigned int uiPitch<eax>, unsigned int uiSrcWidth<ebx>, unsigned int uiSrcHeight<edx>, unsigned int *puiDest, unsigned int uiX, unsigned int uiY, char *pbySrc, unsigned int uiSolidColor, unsigned int uiTransColor)
{
  char *v9; // esi@1
  char *v10; // ecx@1
  unsigned int v11; // eax@1
  unsigned int v12; // edi@4
  unsigned int v13; // edx@6
  unsigned int uiYa; // [sp+18h] [bp+10h]@2

  v9 = pbySrc;
  v10 = (char *)&puiDest[uiX] + uiY * uiPitch;
  v11 = uiPitch - 4 * uiSrcWidth;
  if ( uiSrcHeight )
  {
    uiYa = uiSrcHeight;
    while ( !uiSrcWidth )
    {
LABEL_11:
      v10 += v11;
      --uiYa;
      if ( !uiYa )
        return;
    }
    v12 = uiSrcWidth;
    while ( *v9 != 1 )
    {
      if ( *v9 == 2 )
      {
        v13 = uiTransColor;
        goto LABEL_9;
      }
LABEL_10:
      v10 += 4;
      ++v9;
      --v12;
      if ( !v12 )
        goto LABEL_11;
    }
    v13 = uiSolidColor;
LABEL_9:
    *(_DWORD *)v10 = v13;
    goto LABEL_10;
  }
}

//----- (00622C70) --------------------------------------------------------
bool __thiscall PrivateStoreBD::IsAlive(PrivateStoreBD *this, float fTime)
{
  return this->m_bAlive && fTime - this->m_fStartTime <= PrivateStoreBD::ms_fLifeTime;
}
// A7EBF4: using guessed type float PrivateStoreBD__ms_fLifeTime;

//----- (00622CA0) --------------------------------------------------------
void __thiscall PrivateStoreBD::EndDraw(PrivateStoreBD *this)
{
  PrivateStoreBD *v1; // esi@1

  v1 = this;
  if ( this->m_lpSurSrc )
    this->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)this->m_lpSurSrc);
  if ( v1->m_lpSurDest )
    v1->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_lpSurDest);
}

//----- (00622CD0) --------------------------------------------------------
void __usercall DrawHLine(unsigned int uiPitch<ecx>, unsigned int uiX1<edx>, unsigned int uiX2<eax>, unsigned int *puiDest, unsigned int uiY, unsigned int uiColor)
{
  memset32((char *)&puiDest[uiX1] + uiY * uiPitch, uiColor, uiX2 - uiX1 + 1);
}

//----- (00622D00) --------------------------------------------------------
void __usercall CalculateStrlenInWidth_1(char *pcText<eax>, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>, HDC__ *hDC, unsigned int dwMaxWidth)
{
  char *v5; // edi@1
  char v6; // al@2
  int v7; // eax@4
  tagSIZE kSize; // [sp+4h] [bp-8h]@4

  v5 = pcText;
  *dwStrLen = 0;
  *dwWidth = 0;
  if ( pcText )
  {
    v6 = *pcText;
    if ( v6 )
    {
      do
      {
        if ( IsDBCSLeadByte(v6) )
        {
          GetTextExtentPoint32A(hDC, v5, 2, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          v5 += 2;
          *dwStrLen += 2;
        }
        else
        {
          if ( *v5 == 10 )
          {
            ++*dwStrLen;
            return;
          }
          GetTextExtentPoint32A(hDC, v5, 1, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          ++v5;
          ++*dwStrLen;
        }
        *dwWidth += v7;
        v6 = *v5;
      }
      while ( *v5 );
    }
  }
}

//----- (00622D90) --------------------------------------------------------
bool __thiscall PrivateStoreBD::BeginDraw(PrivateStoreBD *this)
{
  PrivateStoreBD *v1; // edi@1
  NiTexture::RendererData *v2; // ecx@1
  bool result; // al@2
  int v4; // eax@3
  int v5; // ecx@5
  int v6; // eax@6

  v1 = this;
  v2 = this->m_pkTexture->m_pkRendererData;
  if ( v2 && (v4 = ((int (*)(void))v2->vfptr[1].GetWidth)()) != 0 )
  {
    (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v4 + 72))(v4, 0, &v1->m_lpSurDest);
    if ( v1->m_lpSurDest
      && (v5 = *(_DWORD *)(PrivateStoreBD::ms_spTempTexture + 40)) != 0
      && (v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))()) != 0 )
    {
      (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v6 + 72))(v6, 0, &v1->m_lpSurSrc);
      result = v1->m_lpSurSrc != 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// AA2528: using guessed type int PrivateStoreBD__ms_spTempTexture;

//----- (00622E00) --------------------------------------------------------
void __thiscall PrivateStoreBD::CalculateLine(PrivateStoreBD *this)
{
  void **v1; // ebx@0
  PrivateStoreBD *v2; // edi@1
  IDirect3DSurface9 *v3; // eax@1
  char *v4; // ebx@2
  char *v5; // eax@2
  char *v6; // ecx@2
  char v7; // dl@3
  HDC__ *v8; // ST0C_4@6
  int v9; // eax@6
  char *v10; // edx@7
  int v11; // eax@11
  unsigned int v12; // esi@12
  unsigned int v13; // eax@12
  int v14; // edx@12
  tagSIZE kSize; // [sp+8h] [bp-34h]@2
  unsigned int dwTextWidth; // [sp+10h] [bp-2Ch]@6
  int i; // [sp+14h] [bp-28h]@4
  int dwStrLen; // [sp+18h] [bp-24h]@6
  char *pcText; // [sp+1Ch] [bp-20h]@4
  unsigned int *v20; // [sp+20h] [bp-1Ch]@4
  HDC__ *hDC; // [sp+24h] [bp-18h]@2
  tagRECT kRect; // [sp+28h] [bp-14h]@2
  unsigned int v23; // [sp+38h] [bp-4h]@1
  int v24; // [sp+3Ch] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v2 = this;
  v3 = this->m_lpSurSrc;
  if ( v3 )
  {
    this->m_uiTotalLine = 0;
    this->m_uiTextWidth = 0;
    this->m_uiTextHeight = 0;
    this->m_uiLineHeight = 0;
    v3->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface((IUnknown *)v3, (_GUID *const )&hDC, v1);
    SetRect(&kRect, 0, 0, 228, 81);
    FillRect(hDC, &kRect, PrivateStoreBD::ms_hEraseBrush);
    SelectObject(hDC, PrivateStoreBD::ms_hFont);
    v4 = v2->m_pcSpeech;
    GetTextExtentPoint32A(hDC, "W", 1, &kSize);
    v2->m_uiLineHeight = kSize.cy;
    v5 = fs(0);
    v6 = v4;
    do
    {
      v7 = *v6;
      v6[v5 - v4] = *v6;
      ++v6;
    }
    while ( v7 );
    v5[strlen(v5) + 1] = 0;
    pcText = v5;
    i = 0;
    v20 = v2->m_auiLineStrLen;
    while ( 1 )
    {
      v8 = hDC;
      *(v20 - 4) = (unsigned int)v5;
      CalculateStrlenInWidth_1(v5, v8, 0xC8u, (unsigned int *)&dwStrLen, &dwTextWidth);
      v9 = dwStrLen;
      if ( !dwStrLen )
        break;
      v10 = v2->m_pcSpeech;
      pcText += dwStrLen;
      if ( v10[dwStrLen - 1] == 10 )
        v9 = dwStrLen-- - 1;
      *v20 = v9;
      if ( v2->m_uiTextWidth < dwTextWidth )
        v2->m_uiTextWidth = dwTextWidth;
      v11 = i;
      ++v2->m_uiTotalLine;
      ++v20;
      i = v11 + 1;
      if ( (unsigned int)(v11 + 1) >= 4 )
        break;
      v5 = pcText;
    }
    v12 = v2->m_uiTextWidth;
    v13 = (228 - v12) >> 1;
    v14 = v2->m_uiTotalLine * (v2->m_uiLineHeight + 1) - 1;
    v2->m_iTextXPos = v13;
    v2->m_iTextYPos = 69 - v14;
    v2->m_kTextRect.left = v13 - 5;
    v2->m_kTextRect.right = v13 + v12 + 4;
    v2->m_kTextRect.bottom = 73;
    v2->m_kTextRect.top = 69 - v14 - 5;
    v2->m_uiTextWidth = v12 + 9;
    v2->m_uiTextHeight = v14 + 9;
    v2->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v2->m_lpSurSrc);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00622FA0) --------------------------------------------------------
void __thiscall PrivateStoreBD::DrawFrame(PrivateStoreBD *this)
{
  PrivateStoreBD *v1; // esi@1
  IDirect3DSurface9 *v2; // eax@2
  char *v3; // edx@3
  char *v4; // eax@3
  signed int v5; // ebx@3
  signed int v6; // edi@4
  char *v7; // edx@11
  char *v8; // eax@11
  signed int v9; // ebx@11
  signed int v10; // edi@12
  char *v11; // edx@19
  char *v12; // eax@19
  signed int v13; // ebx@19
  signed int v14; // edi@20
  char *v15; // edx@27
  char *v16; // eax@27
  signed int v17; // ebx@27
  signed int v18; // edi@28
  int v19; // eax@35
  void *v20; // ST18_4@35
  int v21; // eax@35
  unsigned int v22; // edx@35
  int v23; // ecx@35
  char *v24; // edi@35
  int v25; // eax@35
  char *v26; // edx@38
  int v27; // eax@38
  _D3DLOCKED_RECT kLockRectSrc; // [sp+Ch] [bp-20h]@2
  unsigned int v29; // [sp+14h] [bp-18h]@3
  tagRECT rc; // [sp+18h] [bp-14h]@2
  unsigned int v31; // [sp+28h] [bp-4h]@1
  int v32; // [sp+2Ch] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v1 = this;
  if ( this->m_lpSurSrc )
  {
    v2 = this->m_lpSurSrc;
    rc.left = 0;
    rc.top = 0;
    rc.right = 227;
    rc.bottom = 80;
    if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v2->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
            v2,
            &kLockRectSrc,
            &rc,
            0) )
    {
      v3 = ms_abyBoardLeftTopSpr;
      v4 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.left + kLockRectSrc.Pitch * (v1->m_kTextRect.top - 3) - 12;
      v29 = kLockRectSrc.Pitch - 16;
      v5 = 4;
      do
      {
        v6 = 4;
        do
        {
          if ( *v3 == 1 )
          {
            *(_DWORD *)v4 = 16777215;
          }
          else
          {
            if ( *v3 == 2 )
              *(_DWORD *)v4 = 16712191;
          }
          v4 += 4;
          ++v3;
          --v6;
        }
        while ( v6 );
        v4 += v29;
        --v5;
      }
      while ( v5 );
      v7 = ms_abyBoardLeftBottomSpr;
      v8 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.left + kLockRectSrc.Pitch * v1->m_kTextRect.bottom - 12;
      v29 = kLockRectSrc.Pitch - 16;
      v9 = 4;
      do
      {
        v10 = 4;
        do
        {
          if ( *v7 == 1 )
          {
            *(_DWORD *)v8 = 16777215;
          }
          else
          {
            if ( *v7 == 2 )
              *(_DWORD *)v8 = 16712191;
          }
          v8 += 4;
          ++v7;
          --v10;
        }
        while ( v10 );
        v8 += v29;
        --v9;
      }
      while ( v9 );
      v11 = ms_abyBoardRightTopSpr;
      v12 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.right + kLockRectSrc.Pitch * (v1->m_kTextRect.top - 3);
      v29 = kLockRectSrc.Pitch - 16;
      v13 = 4;
      do
      {
        v14 = 4;
        do
        {
          if ( *v11 == 1 )
          {
            *(_DWORD *)v12 = 16777215;
          }
          else
          {
            if ( *v11 == 2 )
              *(_DWORD *)v12 = 16712191;
          }
          v12 += 4;
          ++v11;
          --v14;
        }
        while ( v14 );
        v12 += v29;
        --v13;
      }
      while ( v13 );
      v15 = ms_abyBoardRightBottomSpr;
      v16 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.right + kLockRectSrc.Pitch * v1->m_kTextRect.bottom;
      v29 = kLockRectSrc.Pitch - 16;
      v17 = 4;
      do
      {
        v18 = 4;
        do
        {
          if ( *v15 == 1 )
          {
            *(_DWORD *)v16 = 16777215;
          }
          else
          {
            if ( *v15 == 2 )
              *(_DWORD *)v16 = 16712191;
          }
          v16 += 4;
          ++v15;
          --v18;
        }
        while ( v18 );
        v16 += v29;
        --v17;
      }
      while ( v17 );
      v19 = v1->m_kTextRect.left;
      v20 = (char *)kLockRectSrc.pBits + 4 * v19 + kLockRectSrc.Pitch * (v1->m_kTextRect.top - 2);
      v29 = v1->m_kTextRect.right - v19 + 1;
      memset32(v20, 16777215, v29);
      v21 = v1->m_kTextRect.left;
      v22 = v1->m_kTextRect.right - v21 + 1;
      v29 = (unsigned int)((char *)kLockRectSrc.pBits + 4 * v21 + kLockRectSrc.Pitch * (v1->m_kTextRect.bottom + 2));
      memset32((void *)v29, 16777215, v22);
      v23 = kLockRectSrc.Pitch;
      v24 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.left + kLockRectSrc.Pitch * v1->m_kTextRect.top - 8;
      v25 = v1->m_kTextRect.bottom - v1->m_kTextRect.top + 1;
      if ( v1->m_kTextRect.bottom - v1->m_kTextRect.top != -1 )
      {
        do
        {
          *(_DWORD *)v24 = 16777215;
          v24 += v23;
          --v25;
        }
        while ( v25 );
        v23 = kLockRectSrc.Pitch;
      }
      v26 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.right + v23 * v1->m_kTextRect.top + 8;
      v27 = v1->m_kTextRect.bottom - v1->m_kTextRect.top + 1;
      if ( v1->m_kTextRect.bottom - v1->m_kTextRect.top != -1 )
      {
        do
        {
          *(_DWORD *)v26 = 16777215;
          v26 += v23;
          --v27;
        }
        while ( v27 );
      }
      v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v1->m_lpSurSrc);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00623210) --------------------------------------------------------
void __thiscall PrivateStoreBD::DrawTextA(PrivateStoreBD *this)
{
  void **v1; // edi@0
  PrivateStoreBD *v2; // esi@1
  Char *v3; // eax@3
  int v4; // edi@7
  int v5; // ebx@8
  int iTextXPos; // [sp+4h] [bp-Ch]@7
  unsigned int i; // [sp+8h] [bp-8h]@7
  HDC__ *hDC; // [sp+Ch] [bp-4h]@7

  v2 = this;
  if ( this->m_lpSurSrc )
  {
    if ( this->m_kCharHandle != -1 )
    {
      v3 = CharMgr::GetChar(&g_kCharMgr, this->m_kCharHandle);
      if ( v3 )
      {
        if ( g_ClickedPrivateStoreBD != v2 )
        {
          v2->m_kColorRef = 15776401;
          if ( v3->m_bIsSell )
            v2->m_kColorRef = 12436211;
        }
        v2->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface(
          (IUnknown *)v2->m_lpSurSrc,
          (_GUID *const )&hDC,
          v1);
        SetBkMode(hDC, 1);
        SetTextColor(hDC, v2->m_kColorRef);
        SelectObject(hDC, PrivateStoreBD::ms_hFont);
        v4 = v2->m_iTextYPos;
        iTextXPos = v2->m_iTextXPos;
        i = 0;
        if ( v2->m_uiTotalLine )
        {
          v5 = (int)v2->m_apcLineText;
          do
          {
            TextOutA(hDC, iTextXPos, v4, *(LPCSTR *)v5, *(_DWORD *)(v5 + 16));
            v5 += 4;
            v4 += v2->m_uiLineHeight + 1;
            ++i;
          }
          while ( i < v2->m_uiTotalLine );
        }
        v2->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v2->m_lpSurSrc);
      }
    }
  }
}

//----- (00623310) --------------------------------------------------------
void __thiscall PrivateStoreBD::CopyTexture(PrivateStoreBD *this)
{
  PrivateStoreBD *v1; // esi@1
  IDirect3DSurface9 *v2; // eax@3
  signed int v3; // ebx@3
  int v4; // ecx@4
  IDirect3DSurface9 *v5; // eax@4
  void *v6; // edx@5
  signed int v7; // ebx@7
  int v8; // eax@8
  int v9; // ecx@11
  int v10; // eax@11
  int v11; // ecx@11
  void *v12; // ebx@11
  bool v13; // zf@12
  signed int v14; // ebx@13
  signed int v15; // edi@14
  int v16; // eax@15
  int v17; // eax@15
  int v18; // ecx@19
  int uiDestSkipBytes; // [sp+8h] [bp-40h]@5
  int uiSrcSkipBytes; // [sp+Ch] [bp-3Ch]@5
  void *pSrcBytes; // [sp+14h] [bp-34h]@5
  _D3DLOCKED_RECT kLockRectSrc; // [sp+1Ch] [bp-2Ch]@3
  unsigned int v23; // [sp+24h] [bp-24h]@8
  _D3DLOCKED_RECT kLockRectDest; // [sp+28h] [bp-20h]@4
  int pTempDest; // [sp+30h] [bp-18h]@5
  tagRECT rc; // [sp+34h] [bp-14h]@3
  unsigned int v27; // [sp+44h] [bp-4h]@1
  int v28; // [sp+48h] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v1 = this;
  if ( this->m_lpSurSrc )
  {
    if ( this->m_lpSurDest )
    {
      v2 = this->m_lpSurSrc;
      v3 = 81;
      rc.left = 0;
      rc.top = 0;
      rc.right = 228;
      rc.bottom = 81;
      if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v2->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
              v2,
              &kLockRectSrc,
              &rc,
              0) )
      {
        v4 = v1->m_uiTextureYPos;
        rc.left = v1->m_uiTextureXPos;
        rc.top = v4;
        rc.right = rc.left + 228;
        v5 = v1->m_lpSurDest;
        rc.bottom = v4 + 81;
        if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v5->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
                v5,
                &kLockRectDest,
                &rc,
                0) )
        {
          v6 = kLockRectDest.pBits;
          pSrcBytes = kLockRectSrc.pBits;
          uiDestSkipBytes = kLockRectDest.Pitch - 912;
          uiSrcSkipBytes = kLockRectSrc.Pitch - 912;
          pTempDest = (int)kLockRectDest.pBits;
          if ( kLockRectDest.pBits )
          {
            do
            {
              memset((void *)pTempDest, 0, 0x390u);
              pTempDest += kLockRectDest.Pitch;
              --v3;
            }
            while ( v3 );
            pTempDest = (int)((char *)v6 + 4 * v1->m_kTextRect.left + kLockRectDest.Pitch * (v1->m_kTextRect.top - 3));
            v7 = 4;
            do
            {
              v23 = v1->m_uiTextWidth;
              memset32((void *)pTempDest, -2147483648, v23);
              v8 = kLockRectDest.Pitch;
              pTempDest += kLockRectDest.Pitch;
              --v7;
            }
            while ( v7 );
            pTempDest = (int)((char *)v6
                            + 4 * v1->m_kTextRect.left
                            + kLockRectDest.Pitch * (v1->m_kTextRect.top + 1)
                            - 12);
            if ( v1->m_uiTextHeight > 0 )
            {
              do
              {
                v23 = v1->m_uiTextWidth + 7;
                memset32((void *)pTempDest, -2147483648, v23);
                v8 = kLockRectDest.Pitch;
                pTempDest += kLockRectDest.Pitch;
                ++v7;
              }
              while ( v7 < v1->m_uiTextHeight );
            }
            v9 = v8 * v1->m_kTextRect.bottom;
            v10 = v1->m_kTextRect.left;
            v11 = (int)((char *)v6 + v9);
            v12 = (void *)(v11 + 4 * v10);
            pTempDest = v11 + 4 * v10;
            v23 = 4;
            do
            {
              memset32((void *)pTempDest, -2147483648, v1->m_uiTextWidth);
              v12 = (char *)v12 + kLockRectDest.Pitch;
              v13 = v23-- == 1;
              pTempDest = (int)v12;
            }
            while ( !v13 );
            v14 = 81;
            do
            {
              v15 = 228;
              do
              {
                v16 = *(_DWORD *)pSrcBytes;
                v17 = v16 & 0xFFFFFF;
                if ( v17 == 16712191 )
                {
                  *(_DWORD *)v6 = -2147483648;
                  *((_BYTE *)v6 + 3) = -128;
                }
                else
                {
                  if ( v17 != 16711935 )
                  {
                    *(_DWORD *)v6 = v17;
                    *((_BYTE *)v6 + 3) = -1;
                  }
                }
                v18 = (int)((char *)pSrcBytes + 4);
                v6 = (char *)v6 + 4;
                --v15;
                pSrcBytes = (char *)pSrcBytes + 4;
              }
              while ( v15 );
              v6 = (char *)v6 + uiDestSkipBytes;
              --v14;
              pSrcBytes = (void *)(uiSrcSkipBytes + v18);
            }
            while ( v14 );
            v1->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v1->m_lpSurDest);
            v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v1->m_lpSurSrc);
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00623510) --------------------------------------------------------
void __thiscall PrivateStoreBD::_PrivateStoreBD(PrivateStoreBD *this)
{
  PrivateStoreBD *v1; // esi@1
  NiScreenElements *v2; // edi@1
  NiScreenElements *v3; // esi@6

  v1 = this;
  this->vfptr = (PrivateStoreBDVtbl *)&PrivateStoreBD::_vftable_;
  v2 = this->m_spScreenGeom.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spScreenGeom.m_pObject = 0;
  }
  operator delete__(v1->m_pcSpeech);
  v3 = v1->m_spScreenGeom.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
  }
}
// 9C1200: using guessed type int (__thiscall *PrivateStoreBD___vftable_)(void *p, char);

//----- (006235C0) --------------------------------------------------------
void __thiscall PrivateStoreBD::SetSpeech(PrivateStoreBD *this, char *pcSpeech)
{
  PrivateStoreBD *v2; // esi@1
  char *v3; // eax@3
  char *v4; // edx@3
  char v5; // cl@4
  int v6; // edi@5
  char *v7; // edx@7
  char *v8; // ecx@7
  char v9; // al@8
  IDirect3DSurface9 *v10; // eax@10
  IDirect3DSurface9 *v11; // eax@12
  char *v12; // eax@15

  v2 = this;
  if ( pcSpeech && *pcSpeech )
  {
    v3 = pcSpeech;
    v4 = pcSpeech + 1;
    do
      v5 = *v3++;
    while ( v5 );
    v6 = v3 - v4;
    if ( v2->m_uiSpeechLen < v3 - v4 )
    {
      operator delete__(v2->m_pcSpeech);
      v2->m_pcSpeech = (char *)operator new__(v6 + 1);
      v2->m_uiSpeechLen = v6;
    }
    v7 = v2->m_pcSpeech;
    v8 = pcSpeech;
    do
    {
      v9 = *v8;
      *v7++ = *v8++;
    }
    while ( v9 );
    if ( PrivateStoreBD::BeginDraw(v2) )
    {
      PrivateStoreBD::CalculateLine(v2);
      PrivateStoreBD::DrawFrame(v2);
      PrivateStoreBD::DrawTextA(v2);
      PrivateStoreBD::CopyTexture(v2);
      v10 = v2->m_lpSurSrc;
      if ( v10 )
        v10->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v2->m_lpSurSrc);
      v11 = v2->m_lpSurDest;
      if ( v11 )
        v11->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v2->m_lpSurDest);
    }
    sprintf(v2->m_kBDText, "%s");
  }
  else
  {
    v12 = this->m_pcSpeech;
    if ( v12 )
    {
      *v12 = 0;
      this->m_uiTotalLine = 0;
    }
  }
}

//----- (006236A0) --------------------------------------------------------
void __thiscall PrivateStoreBD::Update(PrivateStoreBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  PrivateStoreBD *v4; // esi@1
  unsigned __int16 v5; // ST18_2@1
  Char *v6; // eax@1
  Char *v7; // edi@1
  int v8; // eax@2
  double v9; // st7@2
  double v10; // st6@4
  NiProperty *v11; // eax@5
  double v12; // st7@5
  _BYTE v13[12]; // ST0C_12@11
  float v14; // ST08_4@11
  float v15; // ST04_4@11
  NiScreenElements *v16; // eax@15
  float v17; // eax@15
  double v18; // st5@15
  float v19; // ecx@15
  double v20; // st7@15
  NiPoint3 kWorldPos; // [sp+24h] [bp-2Ch]@11
  float v22; // [sp+30h] [bp-20h]@2
  float v23; // [sp+34h] [bp-1Ch]@2
  float v24; // [sp+38h] [bp-18h]@2
  NiPoint3 k2DOrthoPos; // [sp+3Ch] [bp-14h]@11
  float fDistNF; // [sp+48h] [bp-8h]@2
  float fDistance; // [sp+4Ch] [bp-4h]@2

  v4 = this;
  v5 = this->m_kCharHandle;
  this->m_kColorRef = 16777215;
  v6 = CharMgr::GetChar(&g_kCharMgr, v5);
  v7 = v6;
  if ( !v6
    || (v8 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[6].Deaffect)(v6),
        v22 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - *(float *)v8,
        v23 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v8 + 4),
        v24 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v8 + 8),
        fDistNF = v22 * v22 + v23 * v23 + v24 * v24,
        fDistNF = sqrt(fDistNF),
        fDistance = fDistNF,
        v9 = fDistNF,
        fDistNF > (double)PrivateStoreBD::ms_fMaxDistance) )
  {
    v4->m_bAlive = 0;
    return;
  }
  v10 = PrivateStoreBD::ms_fTransNear;
  if ( PrivateStoreBD::ms_fTransNear <= v9 )
  {
    if ( PrivateStoreBD::ms_fTransFar >= v9 )
    {
      fDistance = v9 - v10;
      fDistNF = PrivateStoreBD::ms_fTransFar - v10;
      if ( 0.0 == fDistNF )
        goto LABEL_11;
      v11 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v12 = 1.0 - fDistance / fDistNF;
    }
    else
    {
      v11 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v12 = 0.0;
    }
  }
  else
  {
    v11 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
    v12 = 1.0;
  }
  ++v11[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v11[3].baseclass_0.baseclass_0.baseclass_0.vfptr = v12;
LABEL_11:
  Char::GetHeightPos(v7, &kWorldPos);
  kWorldPos.z = kWorldPos.z + 3.0;
  *(_DWORD *)v13 = (_DWORD)kWorldPos.x;
  *(_QWORD *)&v13[4] = *(_QWORD *)&kWorldPos.y;
  v14 = (double)PgWin::ms_uiScreenHeight;
  v15 = (double)PgWin::ms_uiScreenWidth;
  if ( PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v15, v14, *(NiPoint3 *)v13, &k2DOrthoPos) )
  {
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    k2DOrthoPos.x = k2DOrthoPos.x - 114.0;
    k2DOrthoPos.y = k2DOrthoPos.y - 102.0;
    if ( v7 == g_pkMainChar )
      k2DOrthoPos.y = k2DOrthoPos.y - 8.0;
    v16 = v4->m_spScreenGeom.m_pObject;
    LODWORD(v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)k2DOrthoPos.x;
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = k2DOrthoPos.y;
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = k2DOrthoPos.z;
    v17 = k2DOrthoPos.y;
    v18 = k2DOrthoPos.x;
    v19 = k2DOrthoPos.z;
    v20 = (double)v4->m_kTextRect.left + k2DOrthoPos.x;
    LODWORD(v4->m_k2DOrthoPos.x) = (_DWORD)k2DOrthoPos.x;
    v4->m_k2DOrthoPos.y = v17;
    v4->m_k2DOrthoPos.z = v19;
    if ( PgWin::ms_iMsX.x > (signed int)v20
      && PgWin::ms_iMsX.x < (signed int)(v18 + (double)v4->m_kTextRect.right)
      && PgWin::ms_iMsY > (signed int)((double)v4->m_kTextRect.top + k2DOrthoPos.y)
      && PgWin::ms_iMsY < (signed int)(k2DOrthoPos.y + (double)v4->m_kTextRect.bottom) )
    {
      if ( g_ClickedPrivateStoreBD )
      {
        if ( g_ClickedPrivateStoreBD->m_k2DOrthoPos.z > (double)v4->m_k2DOrthoPos.z )
        {
          g_ClickedPrivateStoreBD = v4;
          v4->m_bMouseOver = 1;
        }
      }
      else
      {
        g_ClickedPrivateStoreBD = v4;
        v4->m_bMouseOver = 1;
      }
    }
    NiAVObject::Update(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fTime, 1);
    if ( v4->m_bMouseOver )
    {
      if ( g_ClickedPrivateStoreBD != v4 )
      {
        PrivateStoreBD::SetSpeech(v4, v4->m_kBDText);
        v4->m_bMouseOver = 0;
      }
    }
  }
  else
  {
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}
// A7EBF8: using guessed type float PrivateStoreBD__ms_fMaxDistance;
// A7EBFC: using guessed type float PrivateStoreBD__ms_fTransNear;
// A7EC00: using guessed type float PrivateStoreBD__ms_fTransFar;

//----- (00623980) --------------------------------------------------------
void __thiscall PrivateStoreBD::CreateGeometry(PrivateStoreBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  PrivateStoreBD *v3; // esi@1
  NiTexture *v4; // edi@1
  int v5; // ebx@1
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@1
  NiTexture *v8; // ST08_4@1
  NiScreenElementsData *v9; // ebx@1
  void *v10; // eax@1
  NiTexture *v11; // eax@2
  NiScreenElements *v12; // ebx@4
  void *v13; // eax@12
  int v14; // eax@13
  int v15; // ebx@13
  void *v16; // eax@17
  int v17; // eax@18
  int v18; // edi@18

  v3 = this;
  v4 = pkTexture;
  v5 = ((int (__thiscall *)(NiTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture);
  pkTexture = (NiTexture *)((int (__thiscall *)(NiTexture *))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
  v6 = 81 * iTexturePosIndex / (v5 / 0xE4u);
  v7 = 228 * iTexturePosIndex % (v5 / 0xE4u);
  v3->m_uiTextureYPos = v6;
  v8 = pkTexture;
  v3->m_uiTextureXPos = v7;
  v9 = PgUtil::CreateScreenGeometryData(v5, (unsigned int)v8, v7, v6, 0xE4u, 0x51u);
  v3->m_pkTexture = v4;
  v10 = operator new(0xC4u);
  pkTexture = (NiTexture *)v10;
  if ( v10 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v10, v9);
    pkTexture = v11;
  }
  else
  {
    pkTexture = 0;
    v11 = 0;
  }
  v12 = v3->m_spScreenGeom.m_pObject;
  if ( (NiTexture *)v12 != v11 )
  {
    if ( v12 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v12,
          1u);
      v11 = pkTexture;
    }
    v3->m_spScreenGeom.m_pObject = (NiScreenElements *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v13 = operator new(0x44u);
  pkTexture = (NiTexture *)v13;
  if ( v13 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v13);
    v15 = v14;
  }
  else
  {
    v15 = 0;
  }
  NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v15, v4);
  NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v15, 0);
  *(_DWORD *)(v15 + 28) = 2;
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v15;
  InterlockedIncrement((volatile LONG *)(v15 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
  v16 = operator new(0x60u);
  pkTexture = (NiTexture *)v16;
  if ( v16 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v16);
    v18 = v17;
  }
  else
  {
    v18 = 0;
  }
  ++*(_DWORD *)(v18 + 88);
  *(float *)(v18 + 68) = 1.0;
  *(float *)(v18 + 72) = 1.0;
  *(float *)(v18 + 76) = 1.0;
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v18;
  InterlockedIncrement((volatile LONG *)(v18 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  NiAVObject::UpdateProperties(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
  v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (00623BC0) --------------------------------------------------------
void __thiscall PrivateStoreBD::PrivateStoreBD(PrivateStoreBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  PrivateStoreBD *v3; // esi@1

  v3 = this;
  this->vfptr = (PrivateStoreBDVtbl *)&PrivateStoreBD::_vftable_;
  this->m_spScreenGeom.m_pObject = 0;
  this->m_fStartTime = 0.0;
  this->m_kCharHandle = -1;
  this->m_bAlive = 1;
  this->m_pcSpeech = 0;
  this->m_uiSpeechLen = 0;
  this->m_iTextureIndex = iTexturePosIndex;
  if ( pkTexture )
    PrivateStoreBD::CreateGeometry(this, pkTexture, iTexturePosIndex);
  v3->m_kColorRef = 16777215;
  v3->m_bMouseOver = 0;
}
// 9C1200: using guessed type int (__thiscall *PrivateStoreBD___vftable_)(void *p, char);

//----- (00623C50) --------------------------------------------------------
void *__thiscall PrivateStoreBD::_vector_deleting_destructor_(PrivateStoreBD *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  PrivateStoreBD::_PrivateStoreBD(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00623C80) --------------------------------------------------------
ScreenBoardTexture *__thiscall ScreenBDMgr::GetScreenNameData(ScreenBDMgr *this)
{
  return &this->m_ScreenNameData;
}

//----- (00623C90) --------------------------------------------------------
void __thiscall ScreenBDMgr::Draw(ScreenBDMgr *this)
{
  NiDrawScene(
    &this->m_spScreenSpaceCamera.m_pObject->baseclass_0,
    &this->m_pkRootScene->baseclass_0,
    &this->m_kCuller,
    0);
}

//----- (00623CB0) --------------------------------------------------------
CharScreenBoardBase *__thiscall ScreenBDMgr::GetCharBD(ScreenBDMgr *this, unsigned __int16 kHandle)
{
  NiTListItem<CharScreenBoardBase *> *v2; // esi@1
  CharScreenBoardBase *v3; // edi@2
  CharScreenBoardBase *result; // eax@4

  v2 = this->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( CharScreenBoardBase::GetCharHandle(v3) == kHandle )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
    result = v3;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00623CF0) --------------------------------------------------------
CharScreenBoardBase *__thiscall ScreenBDMgr::GetMostFarCharBD(ScreenBDMgr *this, NiPoint3 *kPos)
{
  ScreenBDMgr *v2; // esi@1
  CharScreenBoardBase *v3; // ebx@1
  int v4; // eax@1
  NiTListItem<CharScreenBoardBase *> *v5; // esi@1
  float v6; // ST10_4@1
  float v7; // ST14_4@1
  float v8; // ST18_4@1
  CharScreenBoardBase *v9; // edi@2
  unsigned __int16 v10; // ax@3
  Char *v11; // eax@3
  int v12; // eax@4
  float v13; // ST28_4@4
  float v15; // [sp+8h] [bp-1Ch]@4
  float v16; // [sp+Ch] [bp-18h]@4
  float v17; // [sp+10h] [bp-14h]@4
  float kMainPos; // [sp+14h] [bp-10h]@1
  float kMainPos_4; // [sp+18h] [bp-Ch]@1
  float kMainPos_8; // [sp+1Ch] [bp-8h]@1
  float fMostFarDist; // [sp+2Ch] [bp+8h]@1

  v2 = this;
  v3 = 0;
  v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  LODWORD(kMainPos_8) = *(_DWORD *)(v4 + 8);
  LODWORD(kMainPos) = *(_DWORD *)v4;
  LODWORD(kMainPos_4) = *(_DWORD *)(v4 + 4);
  v5 = v2->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v6 = *(float *)v4 - kPos->x;
  v7 = kMainPos_4 - kPos->y;
  v8 = kMainPos_8 - kPos->z;
  fMostFarDist = v7 * v7 + v6 * v6 + v8 * v8;
  while ( v5 )
  {
    v9 = v5->m_element;
    v5 = v5->m_pkNext;
    if ( v9 )
    {
      v10 = CharScreenBoardBase::GetCharHandle(v9);
      v11 = CharMgr::GetChar(&g_kCharMgr, v10);
      if ( v11 )
      {
        v12 = ((int (__thiscall *)(_DWORD))v11->baseclass_0.vfptr[6].Deaffect)(v11);
        v15 = kMainPos - *(float *)v12;
        v16 = kMainPos_4 - *(float *)(v12 + 4);
        v17 = kMainPos_8 - *(float *)(v12 + 8);
        v13 = v16 * v16 + v15 * v15 + v17 * v17;
        if ( v13 > (double)fMostFarDist )
        {
          fMostFarDist = v16 * v16 + v15 * v15 + v17 * v17;
          v3 = v9;
        }
      }
    }
  }
  return v3;
}

//----- (00623E00) --------------------------------------------------------
bool __thiscall ScreenBDMgr::RemoveCharBD(ScreenBDMgr *this, CharScreenBoardBase *pkCharBD)
{
  CharScreenBoardBase *v2; // ebx@1
  ScreenBDMgr *v3; // edi@1
  NiTListItem<CharScreenBoardBase *> *v4; // eax@1
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v5; // ecx@1
  int v6; // edx@2
  CharScreenBoardBase *v7; // esi@2
  NiRefObjectVtbl *v8; // esi@7
  NiAVObject *v9; // eax@7
  CharScreenBoardBase *v10; // esi@8

  v2 = pkCharBD;
  v3 = this;
  v4 = this->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v5 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kCharDBList;
  if ( v4 )
  {
    while ( 1 )
    {
      v6 = (int)&v4->m_element;
      v7 = (CharScreenBoardBase *)v4;
      v4 = v4->m_pkNext;
      if ( pkCharBD == *(CharScreenBoardBase **)v6 )
        break;
      if ( !v4 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v7 = 0;
  }
  pkCharBD = v7;
  if ( v7 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v5, (void **)&pkCharBD);
  v8 = v3->m_pkNameBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v9 = CharScreenBoardBase::GetGeometry(v2);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v8[30].__vecDelDtor)(v3->m_pkNameBDScene, &pkCharBD, v9);
  if ( pkCharBD )
  {
    v10 = pkCharBD;
    if ( !InterlockedDecrement((volatile LONG *)&pkCharBD->m_kCharHandle) )
    {
      if ( v10 )
        v10->vfptr->__vecDelDtor(v10, 1u);
    }
  }
  if ( v2 )
    v2->vfptr->__vecDelDtor(v2, 1u);
  return 1;
}

//----- (00623EA0) --------------------------------------------------------
void __thiscall ScreenBDMgr::RemoveAllCharBD(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // esi@1
  NiTListItem<CharScreenBoardBase *> *v2; // ebx@1
  CharScreenBoardBase *v3; // edi@4
  void *v4; // eax@4
  int v5; // ecx@5
  void *v6; // edx@5
  NiRefObjectVtbl *v7; // esi@10
  NiAVObject *v8; // eax@10
  int v9; // esi@11
  int v10; // [sp+8h] [bp-Ch]@10
  void *kPos; // [sp+Ch] [bp-8h]@8
  ScreenBDMgr *v12; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = this->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v12 = this;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v4 = v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v2 = v2->m_pkNext;
      if ( v4 )
      {
        while ( 1 )
        {
          v5 = (int)((char *)v4 + 8);
          v6 = v4;
          v4 = *(void **)v4;
          if ( v3 == *(CharScreenBoardBase **)v5 )
            break;
          if ( !v4 )
            goto LABEL_7;
        }
      }
      else
      {
LABEL_7:
        v6 = 0;
      }
      kPos = v6;
      if ( v6 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v1->m_kCharDBList,
          &kPos);
      v7 = v1->m_pkNameBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = CharScreenBoardBase::GetGeometry(v3);
      ((void (__thiscall *)(NiNode *, int *, NiAVObject *))v7[30].__vecDelDtor)(v12->m_pkNameBDScene, &v10, v8);
      if ( v10 )
      {
        v9 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
      if ( v3 )
        v3->vfptr->__vecDelDtor(v3, 1u);
      if ( !v2 )
        break;
      v1 = v12;
    }
  }
}

//----- (00623F60) --------------------------------------------------------
void __thiscall ScreenBDMgr::TerminateCharBD(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // esi@1

  v1 = this;
  ScreenBDMgr::RemoveAllCharBD(this);
  ScreenBoardTexture::Terminate(&v1->m_ScreenNameData);
}

//----- (00623F90) --------------------------------------------------------
void __thiscall ScreenBDMgr::Terminate(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // esi@1
  PgWinCamera *v2; // edi@1

  v1 = this;
  ScreenBDMgr::TerminateSpeechBD(this);
  ScreenBDMgr::RemoveAllCharBD(v1);
  ScreenBoardTexture::Terminate(&v1->m_ScreenNameData);
  ScreenBDMgr::TerminateMainCharHPBar(v1);
  ScreenBDMgr::TerminatePrivateStoreBD(v1);
  ScreenBDMgr::TerminateGuildBD(v1);
  v2 = v1->m_spScreenSpaceCamera.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spScreenSpaceCamera.m_pObject = 0;
  }
  v1->m_pkRootScene = 0;
}

//----- (00624000) --------------------------------------------------------
void __thiscall ScreenBDMgr::Clear(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // esi@1

  v1 = this;
  ScreenBDMgr::ClearSpeechBD(this);
  ScreenBDMgr::RemoveAllCharBD(v1);
  ScreenBDMgr::ClearMainCharHPBar(v1);
  ScreenBDMgr::ClearPrivateStoreBD(v1);
  ScreenBDMgr::ClearGuildBD(v1);
}

//----- (00624030) --------------------------------------------------------
bool __thiscall ScreenBDMgr::InitCharBD(ScreenBDMgr *this, bool Is3DNamePanelEnable)
{
  ScreenBDMgr *v2; // esi@1
  signed int v3; // edi@1
  signed int v4; // ebx@1
  ScreenBoardTexture *v5; // ecx@3
  bool result; // al@5

  v2 = this;
  v3 = 510;
  v4 = 14;
  if ( Is3DNamePanelEnable == 1 )
  {
    v3 = 1020;
    v4 = 42;
  }
  ScreenBDMgr::RemoveAllCharBD(this);
  v5 = &v2->m_ScreenNameData;
  if ( Is3DNamePanelEnable == 1 )
  {
    if ( !ScreenBoardTexture::Init(v5, (tagSIZE)__PAIR__(v4, v3), NAMEPANEL3D, 100) )
      return 0;
    v2->m_ScreenNameData.m_IsRenderBackGround = 1;
    v2->m_ScreenNameData.m_kChangeDescColor = 0;
    result = 1;
  }
  else
  {
    if ( !ScreenBoardTexture::Init(v5, (tagSIZE)__PAIR__(v4, v3), 0, 190) )
      return 0;
    v2->m_ScreenNameData.m_IsRenderBackGround = 0;
    v2->m_ScreenNameData.m_kChangeDescColor = 2063597568;
    result = 1;
  }
  return result;
}

//----- (006240D0) --------------------------------------------------------
void __thiscall ScreenBDMgr::AddCharBD(ScreenBDMgr *this, unsigned __int16 kHandle, NiPoint3 *rPos, ScreenBDMgr::NameBoardType nb_type)
{
  ScreenBDMgr *v4; // ebx@1
  CharScreenBoardBase *v5; // eax@2
  NiTListItem<CharScreenBoardBase *> *v6; // esi@4
  CharScreenBoardBase *v7; // edi@5
  void *v8; // eax@12
  CharScreenBoardDropItem *v9; // eax@13
  void *v10; // eax@14
  void *v11; // eax@16
  int v12; // eax@20
  NiTListItem<CharScreenBoardBase *> *v13; // ecx@20
  NiAVObject *v14; // esi@23

  v4 = this;
  if ( ScreenBoardTexture::IsReleaseBuffer(&this->m_ScreenNameData) )
  {
LABEL_4:
    v6 = v4->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v6 )
    {
      while ( 1 )
      {
        v7 = v6->m_element;
        v6 = v6->m_pkNext;
        if ( CharScreenBoardBase::GetCharHandle(v7) == kHandle )
          break;
        if ( !v6 )
          goto LABEL_7;
      }
    }
    else
    {
LABEL_7:
      v7 = 0;
    }
    if ( v7 )
      return;
    if ( nb_type )
    {
      if ( nb_type == 1 )
      {
        v10 = operator new(0x20u);
        if ( v10 )
        {
          CharScreenBoardDropItem::CharScreenBoardDropItem(v9);
          goto LABEL_19;
        }
      }
      else
      {
        if ( nb_type != 2 )
        {
LABEL_20:
          v12 = (int)v4->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *)&v4->m_kCharDBList);
          *(_DWORD *)(v12 + 8) = v7;
          *(_DWORD *)v12 = 0;
          *(_DWORD *)(v12 + 4) = v4->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
          v13 = v4->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
          if ( v13 )
            v13->m_pkNext = (NiTListItem<CharScreenBoardBase *> *)v12;
          else
            v4->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<CharScreenBoardBase *> *)v12;
          ++*(_DWORD *)&v4->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
          v4->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<CharScreenBoardBase *> *)v12;
          v7->vfptr->Init(v7, kHandle, &v4->m_ScreenNameData);
          v14 = CharScreenBoardBase::GetGeometry(v7);
          if ( v14 )
          {
            ((void (__stdcall *)(_DWORD, _DWORD))v4->m_pkNameBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
              v14,
              1);
            NiAVObject::UpdateProperties(v14);
            NiAVObject::UpdateEffects(v14);
            NiAVObject::Update(v14, 0.0, 1);
          }
          return;
        }
        v8 = operator new(0x20u);
        if ( v8 )
        {
          CharScreenBoardMiniHouse::CharScreenBoardMiniHouse((CharScreenBoardMiniHouse *)v8);
LABEL_19:
          v7 = (CharScreenBoardBase *)v9;
          goto LABEL_20;
        }
      }
    }
    else
    {
      v11 = operator new(0x38u);
      if ( v11 )
      {
        CharScreenBoardUserChar::CharScreenBoardUserChar((CharScreenBoardUserChar *)v9);
        goto LABEL_19;
      }
    }
    v9 = 0;
    goto LABEL_19;
  }
  while ( 1 )
  {
    v5 = ScreenBDMgr::GetMostFarCharBD(v4, rPos);
    if ( !v5 )
      break;
    ScreenBDMgr::RemoveCharBD(v4, v5);
    if ( ScreenBoardTexture::IsReleaseBuffer(&v4->m_ScreenNameData) )
      goto LABEL_4;
  }
}

//----- (00624290) --------------------------------------------------------
bool __thiscall ScreenBDMgr::Init(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // esi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  PgWinCamera *v5; // edi@3
  void *v6; // eax@10
  int v7; // eax@11
  int v8; // edi@11
  void *v9; // eax@13
  NiNode *v10; // eax@14
  void *v11; // eax@16
  NiNode *v12; // eax@17
  void *v13; // eax@19
  NiNode *v14; // eax@20
  void *v15; // eax@22
  NiNode *v16; // eax@23
  void *v17; // eax@25
  NiNode *v18; // eax@26
  void (__thiscall *v19)(_DWORD, _DWORD, _DWORD); // edx@28
  NiNode *v20; // ST40_4@28
  PgWinCamera *v21; // ebx@28
  NiRenderer *v22; // edi@28
  NiRoom *v23; // ecx@28
  NiProperty *v24; // eax@36
  void *v25; // eax@36
  void *v26; // edi@36
  __int16 v27; // cx@39
  void *v28; // eax@41
  NiAVObject *v29; // eax@42
  NiAVObject *v30; // edi@42
  NiAVObject *v31; // ecx@44
  NiProperty *v32; // eax@44
  bool result; // al@47
  NiAVObject *v34; // [sp+64h] [bp-14h]@1
  NiPointer<NiRoom> element; // [sp+68h] [bp-10h]@28
  int v36; // [sp+74h] [bp-4h]@1

  v1 = this;
  v2 = operator new(0x130u);
  v34 = (NiAVObject *)v2;
  v3 = 0;
  v36 = 0;
  if ( v2 )
  {
    PgWinCamera::PgWinCamera((PgWinCamera *)v2);
    v3 = v4;
  }
  v5 = v1->m_spScreenSpaceCamera.m_pObject;
  v36 = -1;
  if ( v5 != (PgWinCamera *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spScreenSpaceCamera.m_pObject = (PgWinCamera *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v1->m_pkRootScene = v1->m_spScreenSpaceCamera.m_pObject->m_spScene.m_pObject;
  v6 = operator new(0xECu);
  v34 = (NiAVObject *)v6;
  v36 = 1;
  if ( v6 )
  {
    NiSortAdjustNode::NiSortAdjustNode((NiSortAdjustNode *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  *(_DWORD *)(v8 + 232) = 0;
  v9 = operator new(0xE8u);
  v34 = (NiAVObject *)v9;
  v36 = 2;
  if ( v9 )
    NiNode::NiNode((NiNode *)v9, 0);
  else
    v10 = 0;
  v1->m_pkSpeechBDScene = v10;
  v11 = operator new(0xE8u);
  v34 = (NiAVObject *)v11;
  v36 = 3;
  if ( v11 )
    NiNode::NiNode((NiNode *)v11, 0);
  else
    v12 = 0;
  v1->m_pkNameBDScene = v12;
  v13 = operator new(0xE8u);
  v34 = (NiAVObject *)v13;
  v36 = 4;
  if ( v13 )
    NiNode::NiNode((NiNode *)v13, 0);
  else
    v14 = 0;
  v1->m_pkHPBarScene = v14;
  v15 = operator new(0xE8u);
  v34 = (NiAVObject *)v15;
  v36 = 5;
  if ( v15 )
    NiNode::NiNode((NiNode *)v15, 0);
  else
    v16 = 0;
  v1->m_pkPrivateStoreBDScene = v16;
  v17 = operator new(0xE8u);
  v34 = (NiAVObject *)v17;
  v36 = 6;
  if ( v17 )
    NiNode::NiNode((NiNode *)v17, 0);
  else
    v18 = 0;
  v1->m_pkGuildBDScene = v18;
  v19 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 116);
  v20 = v1->m_pkSpeechBDScene;
  v36 = -1;
  v19(v8, v20, 0);
  (*(void (__thiscall **)(int, NiNode *, _DWORD))(*(_DWORD *)v8 + 116))(v8, v1->m_pkNameBDScene, 0);
  (*(void (__thiscall **)(int, NiNode *, _DWORD))(*(_DWORD *)v8 + 116))(v8, v1->m_pkHPBarScene, 0);
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 116))(v8, v1->m_pkPrivateStoreBDScene, 0);
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 116))(v8, v1->m_pkGuildBDScene, 0);
  ((void (__stdcall *)(int, _DWORD))v1->m_pkRootScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v8,
    0);
  v21 = v1->m_spScreenSpaceCamera.m_pObject;
  v22 = v21->m_spRenderer.m_pObject;
  v23 = (NiRoom *)NiRenderer::ms_pkRenderer;
  element.m_pObject = (NiRoom *)NiRenderer::ms_pkRenderer;
  if ( v22 != NiRenderer::ms_pkRenderer )
  {
    if ( v22 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.m_uiRefCount) && v22 )
        v22->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
      v23 = element.m_pObject;
    }
    v21->m_spRenderer.m_pObject = (NiRenderer *)v23;
    if ( v23 )
      InterlockedIncrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v24 = NiAVObject::GetProperty(&v1->m_pkRootScene->baseclass_0, 11);
  LOWORD(v24[1].baseclass_0.baseclass_0.baseclass_0.vfptr) = (unsigned int)v24[1].baseclass_0.baseclass_0.baseclass_0.vfptr & 0xFFFE | 2;
  v25 = operator new(0x20u);
  v26 = v25;
  v34 = (NiAVObject *)v25;
  v36 = 7;
  if ( v25 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v25);
    *(_DWORD *)v26 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v26 + 14) = 236;
    *((_BYTE *)v26 + 30) = 0;
  }
  else
  {
    v26 = 0;
  }
  v27 = *((_WORD *)v26 + 14) & 0xFBFF | 0x1A01;
  *((_BYTE *)v26 + 30) = 10;
  *((_WORD *)v26 + 14) = v27;
  v34 = (NiAVObject *)v1->m_pkRootScene;
  element.m_pObject = (NiRoom *)v26;
  InterlockedIncrement((volatile LONG *)v26 + 1);
  v36 = 8;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v34->m_kPropertyList,
    &element);
  v36 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v26 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v26)(v26, 1);
  v28 = operator new(0x60u);
  v34 = (NiAVObject *)v28;
  v36 = 9;
  if ( v28 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v28);
    v30 = v29;
  }
  else
  {
    v30 = 0;
  }
  ++LODWORD(v30->m_kLocal.m_Translate.x);
  v30->m_kLocal.m_Rotate.m_pEntry[1][1] = 1.0;
  v30->m_kLocal.m_Rotate.m_pEntry[1][2] = 1.0;
  v30->m_kLocal.m_Rotate.m_pEntry[2][0] = 1.0;
  v31 = (NiAVObject *)v1->m_pkRootScene;
  v36 = -1;
  v32 = NiAVObject::GetProperty(v31, 3);
  NiAVObject::DetachProperty(&v1->m_pkRootScene->baseclass_0, v32);
  element.m_pObject = (NiRoom *)v1->m_pkRootScene;
  v34 = v30;
  InterlockedIncrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v36 = 10;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&element.m_pObject->baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v34);
  v36 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v30->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v30, 1u);
  NiAVObject::UpdateProperties(&v1->m_pkRootScene->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_pkRootScene->baseclass_0);
  NiAVObject::Update(&v1->m_pkRootScene->baseclass_0, 0.0, 1);
  PgWinCamera::UpdateRenderTargetBounds(v1->m_spScreenSpaceCamera.m_pObject);
  NiAVObject::Update(&v1->m_spScreenSpaceCamera.m_pObject->baseclass_0.baseclass_0, 0.0, 1);
  if ( ScreenBDMgr::InitSpeechBD(v1) && ScreenBDMgr::InitCharBD(v1, byte_B5BB4B) && ScreenBDMgr::InitMainCharHPBar(v1) )
    result = ScreenBDMgr::InitPrivateStoreBD(v1) != 0;
  else
    result = 0;
  return result;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (006246E0) --------------------------------------------------------
void __thiscall ScreenBDMgr::UpdateCharBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera)
{
  ScreenBDMgr *v3; // ebx@1
  NiTListItem<CharScreenBoardBase *> *v4; // esi@1
  CharScreenBoardBase *v5; // edi@2
  float v6; // eax@5
  int v7; // edi@8
  NiTListItem<CharScreenBoardBase *> *v8; // esi@9
  CharScreenBoardBase *v9; // ebx@10
  unsigned __int16 v10; // si@18
  NiPoint3 *v11; // eax@18
  NiTListItem<DropItem *> *v12; // eax@20
  DropItem *v13; // ebx@23
  NiTListItem<CharScreenBoardBase *> *v14; // esi@24
  CharScreenBoardBase *v15; // edi@25
  int v16; // ebx@32
  int v17; // edi@33
  NiTListItem<CharScreenBoardBase *> *v18; // esi@34
  CharScreenBoardBase *v19; // edi@35
  int v20; // ecx@43
  int j; // eax@44
  int i; // eax@47
  NiTListItem<CharScreenBoardBase *> *v23; // esi@52
  void (__thiscall *v24)(CharScreenBoardBase *, float, NiCamera *, PgWinCamera *); // edx@53
  unsigned __int16 v25; // [sp+8h] [bp-1Ch]@14
  __int16 v26; // [sp+18h] [bp-Ch]@9
  unsigned __int16 v27; // [sp+18h] [bp-Ch]@24
  unsigned __int16 v28; // [sp+18h] [bp-Ch]@34
  float pstInfo; // [sp+1Ch] [bp-8h]@8
  NiTListItem<DropItem *> *pstInfoa; // [sp+1Ch] [bp-8h]@23
  int pstInfob; // [sp+1Ch] [bp-8h]@33
  ScreenBDMgr *thisa; // [sp+20h] [bp-4h]@1

  v3 = this;
  v4 = this->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  while ( v4 )
  {
    v5 = v4->m_element;
    v4 = v4->m_pkNext;
    if ( !v5->vfptr->IsAlive(v5) )
      ScreenBDMgr::RemoveCharBD(v3, v5);
  }
  v6 = ::fTime;
  if ( LODWORD(::fTime) )
  {
    while ( 1 )
    {
      v7 = *(_DWORD *)(LODWORD(v6) + 8);
      LODWORD(pstInfo) = *LODWORD(v6);
      if ( v7 )
      {
        v8 = v3->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        v26 = *(_WORD *)(v7 + 548);
        if ( !v8 )
          goto LABEL_14;
        while ( 1 )
        {
          v9 = v8->m_element;
          v8 = v8->m_pkNext;
          if ( CharScreenBoardBase::GetCharHandle(v9) == v26 )
            break;
          if ( !v8 )
            goto LABEL_14;
        }
        if ( !v9 )
        {
LABEL_14:
          v25 = *(_WORD *)(v7 + 548);
          if ( *(_BYTE *)(v7 + 1916) == 5 )
          {
            if ( !ScreenBDMgr::GetPrivateStoreBD(thisa, v25) )
              ScreenBDMgr::AddPrivateStoreBD(thisa, *(_WORD *)(v7 + 548));
          }
          else
          {
            if ( CharScreenBoardUserChar::IsVisible(v25) )
            {
              v10 = *(_WORD *)(v7 + 548);
              v11 = (NiPoint3 *)(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 196))(v7);
              ScreenBDMgr::AddCharBD(thisa, v10, v11, 0);
            }
          }
        }
      }
      if ( !LODWORD(pstInfo) )
        break;
      v6 = pstInfo;
      v3 = thisa;
    }
  }
  v12 = g_kDropItemMgr.m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( g_kDropItemMgr.m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v13 = v12->m_element;
      pstInfoa = v12->m_pkNext;
      if ( v13 )
      {
        v14 = thisa->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        v27 = v13->m_kHandle;
        if ( !v14 )
          goto LABEL_29;
        while ( 1 )
        {
          v15 = v14->m_element;
          v14 = v14->m_pkNext;
          if ( CharScreenBoardBase::GetCharHandle(v15) == v27 )
            break;
          if ( !v14 )
            goto LABEL_29;
        }
        if ( !v15 )
        {
LABEL_29:
          if ( CharScreenBoardDropItem::IsVisible(v13->m_kHandle) )
            ScreenBDMgr::AddCharBD(
              thisa,
              v13->m_kHandle,
              &v13->m_spNode.m_pObject->baseclass_0.m_kLocal.m_Translate,
              NBT_ITEM);
        }
      }
      if ( !pstInfoa )
        break;
      v12 = pstInfoa;
    }
  }
  v16 = **(_DWORD **)&stru_B67CF0;
  while ( v16 != stru_B67CF0 )
  {
    v17 = *(_DWORD *)(v16 + 16);
    pstInfob = v17;
    if ( v17 )
    {
      v18 = thisa->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v28 = *(_WORD *)v17;
      if ( v18 )
      {
        while ( 1 )
        {
          v19 = v18->m_element;
          v18 = v18->m_pkNext;
          if ( CharScreenBoardBase::GetCharHandle(v19) == v28 )
            break;
          if ( !v18 )
            goto LABEL_39;
        }
        if ( v19 )
          goto LABEL_42;
LABEL_39:
        v17 = pstInfob;
      }
      if ( CharScreenBoardMiniHouse::IsVisible(*(_WORD *)v17) )
        ScreenBDMgr::AddCharBD(thisa, *(_WORD *)v17, (NiPoint3 *)(*(_DWORD *)(v17 + 36) + 140), NBT_MINIHOUSE);
    }
LABEL_42:
    if ( !*(_BYTE *)(v16 + 21) )
    {
      v20 = *(_DWORD *)(v16 + 8);
      if ( *(_BYTE *)(v20 + 21) )
      {
        for ( i = *(_DWORD *)(v16 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
        {
          if ( v16 != *(_DWORD *)(i + 8) )
            break;
          v16 = i;
        }
        v16 = i;
      }
      else
      {
        for ( j = *(_DWORD *)v20; !*(_BYTE *)(j + 21); j = *(_DWORD *)j )
          v20 = j;
        v16 = v20;
      }
    }
  }
  v23 = thisa->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v23 )
  {
    v24 = v23->m_element->vfptr->Update;
    v23 = v23->m_pkNext;
    ((void (__stdcall *)(_DWORD, NiCamera *, PgWinCamera *))v24)(
      LODWORD(fTime),
      pkWorldCamera,
      thisa->m_spScreenSpaceCamera.m_pObject);
  }
}

//----- (00624970) --------------------------------------------------------
void __thiscall ScreenBDMgr::Update(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera)
{
  ScreenBDMgr *v3; // esi@1
  Char *v4; // eax@2
  Char *v5; // eax@6

  v3 = this;
  g_ClickedPrivateStoreBD = 0;
  g_ClickedNameBD = 0;
  g_ClickedMiniHouseBD = 0;
  ScreenBDMgr::UpdateCharBD(this, fTime, pkWorldCamera);
  ScreenBDMgr::UpdatePrivateStoreBD(v3, 0.0, pkWorldCamera);
  if ( g_ClickedNameBD )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, g_ClickedNameBD->m_kCharHandle);
    if ( v4 )
    {
      if ( v4->m_byMode == 5 )
      {
        g_ClickedNameBD->m_kColorRef = (unsigned int)loc_808080;
        NameBD::SetSpeech(g_ClickedNameBD, g_ClickedNameBD->m_kBDText);
      }
    }
  }
  if ( g_ClickedPrivateStoreBD )
  {
    v5 = CharMgr::GetChar(&g_kCharMgr, g_ClickedPrivateStoreBD->m_kCharHandle);
    if ( v5 )
    {
      if ( v5->m_byMode == 5 )
      {
        g_ClickedPrivateStoreBD->m_kColorRef = (unsigned int)loc_808080;
        PrivateStoreBD::SetSpeech(g_ClickedPrivateStoreBD, g_ClickedPrivateStoreBD->m_kBDText);
      }
    }
  }
  ScreenBDMgr::UpdateSpeechBD(v3, fTime, pkWorldCamera);
  ScreenBDMgr::UpdateMainCharHPBar(v3, fTime, pkWorldCamera);
  NiAVObject::Update(&v3->m_pkRootScene->baseclass_0, fTime, 1);
  NiAVObject::Update(&v3->m_spScreenSpaceCamera.m_pObject->baseclass_0.baseclass_0, fTime, 1);
}
// 808080: using guessed type int __cdecl loc_808080(float fTime, float fSignedDistance1, int kV0, float fSignedDistance0, int kV1, int fIntrTime, int kIntrPt, int bCalcNormals, int kNormal0, int kNormal1);
// AA2510: using guessed type int g_ClickedMiniHouseBD;

//----- (00624A80) --------------------------------------------------------
void __thiscall ScreenBDMgr::_ScreenBDMgr(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // esi@1
  NiSourceTexture *v2; // edi@1
  int v3; // edi@5
  NiTListItem<GuildBD *> *v4; // ebx@5
  NiTListItem<GuildBD *> *v5; // eax@5
  NiTListItem<GuildBD *> *v6; // ST10_4@6
  NiSourceTexture *v7; // edi@8
  int v8; // edi@12
  NiTListItem<PrivateStoreBD *> *v9; // ebx@12
  NiTListItem<PrivateStoreBD *> *v10; // eax@12
  NiTListItem<PrivateStoreBD *> *v11; // ST10_4@13
  NiPointer<PgSprData> *v12; // ecx@15
  int v13; // edi@17
  NiTListItem<CharScreenBoardBase *> *v14; // ebx@17
  NiTListItem<CharScreenBoardBase *> *v15; // eax@17
  NiTListItem<CharScreenBoardBase *> *v16; // ST10_4@18
  NiSourceTexture *v17; // edi@20
  int v18; // edi@24
  NiTListItem<NameBD *> *v19; // ebx@24
  NiTListItem<NameBD *> *v20; // eax@24
  NiTListItem<NameBD *> *v21; // ST10_4@25
  NiSourceTexture *v22; // edi@27
  int v23; // edi@31
  NiTListItem<SpeechBD *> *v24; // ebx@31
  NiTListItem<SpeechBD *> *v25; // eax@31
  NiTListItem<SpeechBD *> *v26; // ST10_4@32
  PgWinCamera *v27; // esi@34

  v1 = this;
  v2 = this->m_spGuildBDTexture.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = (int)&v1->m_kGuildBDList;
  v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&PgTList<GuildBD__>::_vftable_;
  v4 = v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v5 = 0;
  if ( v4 )
  {
    do
    {
      v6 = v4;
      v4 = v4->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 8))(&v1->m_kGuildBDList, v6);
    }
    while ( v4 );
    v5 = 0;
  }
  *(_DWORD *)&v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v5;
  v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v5;
  *(_DWORD *)v3 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
  v7 = v1->m_spPrivateStoreBDTexture.m_pObject;
  if ( (NiTListItem<GuildBD *> *)v7 != v5
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = (int)&v1->m_kPrivateStoreBDList;
  v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&PgTList<PrivateStoreBD__>::_vftable_;
  v9 = v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v10 = 0;
  if ( v9 )
  {
    do
    {
      v11 = v9;
      v9 = v9->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v8 + 8))(&v1->m_kPrivateStoreBDList, v11);
    }
    while ( v9 );
    v10 = 0;
  }
  *(_DWORD *)&v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v10;
  v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v10;
  v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v10;
  *(_DWORD *)v8 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
  v12 = *(NiPointer<PgSprData> **)&v1->m_ScreenNameData.m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (NiTListItem<PrivateStoreBD *> *)v12 != v10 )
  {
    std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
      v12,
      (NiPointer<PgSprData> *)v1->m_ScreenNameData.m_UseChecks.baseclass_0._Mylast,
      (std::allocator<NiPointer<PgSprData> > *)&v1->m_ScreenNameData.m_UseChecks.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)((_BYTE)v1 + 116));
    operator delete(*(void **)&v1->m_ScreenNameData.m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0]);
    v10 = 0;
  }
  v13 = (int)&v1->m_kCharDBList;
  *(_DWORD *)&v1->m_ScreenNameData.m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0] = v10;
  v1->m_ScreenNameData.m_UseChecks.baseclass_0._Mylast = (NiPointer<ScreenBoardTexture::DescInfo> *)v10;
  v1->m_ScreenNameData.m_UseChecks.baseclass_0._Myend = (NiPointer<ScreenBoardTexture::DescInfo> *)v10;
  v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&PgTList<CharScreenBoardBase__>::_vftable_;
  v14 = v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v15 = 0;
  if ( v14 )
  {
    do
    {
      v16 = v14;
      v14 = v14->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v13 + 8))(&v1->m_kCharDBList, v16);
    }
    while ( v14 );
    v15 = 0;
  }
  *(_DWORD *)&v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v15;
  v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v15;
  v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v15;
  *(_DWORD *)v13 = &NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
  NiCullingProcess::_NiCullingProcess(&v1->m_kCuller);
  operator delete(v1->m_kVisible.m_ppkArray);
  v17 = v1->m_spNameBDTexture.m_pObject;
  if ( v17
    && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v17 )
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
  v18 = (int)&v1->m_kNameBDList;
  v1->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&PgTList<NameBD__>::_vftable_;
  v19 = v1->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v20 = 0;
  if ( v19 )
  {
    do
    {
      v21 = v19;
      v19 = v19->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v18 + 8))(&v1->m_kNameBDList, v21);
    }
    while ( v19 );
    v20 = 0;
  }
  *(_DWORD *)&v1->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v20;
  v1->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v20;
  v1->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v20;
  *(_DWORD *)v18 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
  v22 = v1->m_spSpeechBDTexture.m_pObject;
  if ( (NiTListItem<NameBD *> *)v22 != v20
    && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v22 )
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
  v23 = (int)&v1->m_kSpeechBDList;
  v1->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&PgTList<SpeechBD__>::_vftable_;
  v24 = v1->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v25 = 0;
  if ( v24 )
  {
    do
    {
      v26 = v24;
      v24 = v24->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v23 + 8))(&v1->m_kSpeechBDList, v26);
    }
    while ( v24 );
    v25 = 0;
  }
  *(_DWORD *)&v1->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v25;
  v1->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v25;
  v1->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v25;
  *(_DWORD *)v23 = &NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
  v27 = v1->m_spScreenSpaceCamera.m_pObject;
  if ( (NiTListItem<SpeechBD *> *)v27 != v25
    && !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v27 )
      v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
  }
}
// 9C121C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);
// 9C122C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);
// 9C123C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);
// 9C124C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);
// 9C125C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);
// 9C12BC: using guessed type int (__thiscall *PgTList_SpeechBD _____vftable_)(void *p, char);
// 9C12CC: using guessed type int (__thiscall *PgTList_NameBD _____vftable_)(void *p, char);
// 9C12DC: using guessed type int (__thiscall *PgTList_CharScreenBoardBase _____vftable_)(void *p, char);
// 9C12EC: using guessed type int (__thiscall *PgTList_PrivateStoreBD _____vftable_)(void *p, char);
// 9C12FC: using guessed type int (__thiscall *PgTList_GuildBD _____vftable_)(void *p, char);

//----- (00624D20) --------------------------------------------------------
void __thiscall ScreenBDMgr::ScreenBDMgr(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // esi@1
  NiVisibleArray *v2; // ebx@1

  v1 = this;
  this->m_spScreenSpaceCamera.m_pObject = 0;
  *(_DWORD *)&this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&PgTList<SpeechBD__>::_vftable_;
  this->m_spSpeechBDTexture.m_pObject = 0;
  *(_DWORD *)&this->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kNameBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&PgTList<NameBD__>::_vftable_;
  this->m_spNameBDTexture.m_pObject = 0;
  v2 = &this->m_kVisible;
  this->m_kVisible.m_ppkArray = 0;
  this->m_kVisible.m_uiCurrentSize = 0;
  this->m_kVisible.m_uiAllocatedSize = 0;
  this->m_kVisible.m_uiGrowBy = 1024;
  NiVisibleArray::SetAllocatedSize(&this->m_kVisible, 0x400u);
  NiCullingProcess::NiCullingProcess(&v1->m_kCuller, v2);
  *(_DWORD *)&v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kCharDBList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&PgTList<CharScreenBoardBase__>::_vftable_;
  ScreenBoardTexture::ScreenBoardTexture(&v1->m_ScreenNameData);
  *(_DWORD *)&v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&PgTList<PrivateStoreBD__>::_vftable_;
  v1->m_spPrivateStoreBDTexture.m_pObject = 0;
  *(_DWORD *)&v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&PgTList<GuildBD__>::_vftable_;
  v1->m_spGuildBDTexture.m_pObject = 0;
  v1->m_iTotalSpeechBDTextureIndex = 0;
  v1->m_pabUseSpeechBD = 0;
  v1->m_iMaxPrivateStoreView = 40;
}
// 9C12BC: using guessed type int (__thiscall *PgTList_SpeechBD _____vftable_)(void *p, char);
// 9C12CC: using guessed type int (__thiscall *PgTList_NameBD _____vftable_)(void *p, char);
// 9C12DC: using guessed type int (__thiscall *PgTList_CharScreenBoardBase _____vftable_)(void *p, char);
// 9C12EC: using guessed type int (__thiscall *PgTList_PrivateStoreBD _____vftable_)(void *p, char);
// 9C12FC: using guessed type int (__thiscall *PgTList_GuildBD _____vftable_)(void *p, char);

//----- (00624E40) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
}
// 9C121C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);

//----- (00624E50) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
}
// 9C122C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);

//----- (00624E60) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>(NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
}
// 9C123C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);

//----- (00624E70) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
}
// 9C124C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);

//----- (00624E80) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>(NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
}
// 9C125C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);

//----- (00624E90) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C121C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);

//----- (00624EC0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C122C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);

//----- (00624EF0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C123C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);

//----- (00624F20) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C124C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);

//----- (00624F50) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C125C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);

//----- (00624F80) --------------------------------------------------------
void __thiscall NiTPointerList<SpeechBD__>::_NiTPointerList<SpeechBD__>(NiTPointerList<SpeechBD *> *this)
{
  NiTPointerList<SpeechBD *> *v1; // edi@1
  NiTListItem<SpeechBD *> *v2; // esi@1
  NiTListItem<SpeechBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
}
// 9C121C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);
// 9C126C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);

//----- (00625000) --------------------------------------------------------
void __thiscall NiTPointerList<NameBD__>::_NiTPointerList<NameBD__>(NiTPointerList<NameBD *> *this)
{
  NiTPointerList<NameBD *> *v1; // edi@1
  NiTListItem<NameBD *> *v2; // esi@1
  NiTListItem<NameBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
}
// 9C122C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);
// 9C127C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);

//----- (00625080) --------------------------------------------------------
void __thiscall NiTPointerList<CharScreenBoardBase__>::_NiTPointerList<CharScreenBoardBase__>(NiTPointerList<CharScreenBoardBase *> *this)
{
  NiTPointerList<CharScreenBoardBase *> *v1; // edi@1
  NiTListItem<CharScreenBoardBase *> *v2; // esi@1
  NiTListItem<CharScreenBoardBase *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
}
// 9C123C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);
// 9C128C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);

//----- (00625100) --------------------------------------------------------
void __thiscall NiTPointerList<PrivateStoreBD__>::_NiTPointerList<PrivateStoreBD__>(NiTPointerList<PrivateStoreBD *> *this)
{
  NiTPointerList<PrivateStoreBD *> *v1; // edi@1
  NiTListItem<PrivateStoreBD *> *v2; // esi@1
  NiTListItem<PrivateStoreBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
}
// 9C124C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);
// 9C129C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);

//----- (00625180) --------------------------------------------------------
void __thiscall NiTPointerList<GuildBD__>::_NiTPointerList<GuildBD__>(NiTPointerList<GuildBD *> *this)
{
  NiTPointerList<GuildBD *> *v1; // edi@1
  NiTListItem<GuildBD *> *v2; // esi@1
  NiTListItem<GuildBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
}
// 9C125C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);
// 9C12AC: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);

//----- (00625200) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<SpeechBD *> *v3; // esi@1
  NiTListItem<SpeechBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C121C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);
// 9C126C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);

//----- (00625290) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NameBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NameBD *> *v3; // esi@1
  NiTListItem<NameBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C122C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);
// 9C127C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);

//----- (00625320) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<CharScreenBoardBase *> *v3; // esi@1
  NiTListItem<CharScreenBoardBase *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C123C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);
// 9C128C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);

//----- (006253B0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PrivateStoreBD *> *v3; // esi@1
  NiTListItem<PrivateStoreBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C124C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);
// 9C129C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);

//----- (00625440) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<GuildBD *> *v3; // esi@1
  NiTListItem<GuildBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C125C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);
// 9C12AC: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);

//----- (006254D0) --------------------------------------------------------
void __thiscall CharScreenBoardUserChar::CharScreenBoardUserChar(CharScreenBoardUserChar *this)
{
  CharScreenBoardUserChar *v1; // esi@1

  v1 = this;
  CharScreenBoardBase::CharScreenBoardBase(&this->baseclass_0);
  v1->baseclass_0.vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardUserChar::_vftable_;
  v1->m_spNameBoard.m_pObject = 0;
  v1->m_spNickNameBoard.m_pObject = 0;
  v1->m_spGuildBoard.m_pObject = 0;
  v1->m_spEmblemIcon.m_pObject = 0;
  IConBD::IConBD(&v1->m_IconBD);
}
// 9C10FC: using guessed type int (__thiscall *CharScreenBoardUserChar___vftable_)(void *p, char);

//----- (00625540) --------------------------------------------------------
void __thiscall CharScreenBoardDropItem::CharScreenBoardDropItem(CharScreenBoardDropItem *this)
{
  CharScreenBoardDropItem *v1; // esi@1

  v1 = this;
  CharScreenBoardBase::CharScreenBoardBase(&this->baseclass_0);
  v1->baseclass_0.vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardDropItem::_vftable_;
  v1->m_spNameBoard.m_pObject = 0;
}
// 9C111C: using guessed type int (__thiscall *CharScreenBoardDropItem___vftable_)(void *p, char);

//----- (00625560) --------------------------------------------------------
void __thiscall CharScreenBoardMiniHouse::CharScreenBoardMiniHouse(CharScreenBoardMiniHouse *this)
{
  CharScreenBoardMiniHouse *v1; // esi@1

  v1 = this;
  CharScreenBoardBase::CharScreenBoardBase(&this->baseclass_0);
  v1->baseclass_0.vfptr = (CharScreenBoardBaseVtbl *)&CharScreenBoardMiniHouse::_vftable_;
  v1->m_spNameBoard.m_pObject = 0;
}
// 9C1134: using guessed type int (__thiscall *CharScreenBoardMiniHouse___vftable_)(void *p, char);

//----- (00625580) --------------------------------------------------------
void __thiscall PgTList<SpeechBD__>::_PgTList<SpeechBD__>(PgTList<SpeechBD *> *this)
{
  PgTList<SpeechBD *> *v1; // edi@1
  NiTListItem<SpeechBD *> *v2; // esi@1
  NiTListItem<SpeechBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&PgTList<SpeechBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
}
// 9C121C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);
// 9C12BC: using guessed type int (__thiscall *PgTList_SpeechBD _____vftable_)(void *p, char);

//----- (00625600) --------------------------------------------------------
void __thiscall PgTList<NameBD__>::_PgTList<NameBD__>(PgTList<NameBD *> *this)
{
  PgTList<NameBD *> *v1; // edi@1
  NiTListItem<NameBD *> *v2; // esi@1
  NiTListItem<NameBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&PgTList<NameBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
}
// 9C122C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);
// 9C12CC: using guessed type int (__thiscall *PgTList_NameBD _____vftable_)(void *p, char);

//----- (00625680) --------------------------------------------------------
void __thiscall PgTList<CharScreenBoardBase__>::_PgTList<CharScreenBoardBase__>(PgTList<CharScreenBoardBase *> *this)
{
  PgTList<CharScreenBoardBase *> *v1; // edi@1
  NiTListItem<CharScreenBoardBase *> *v2; // esi@1
  NiTListItem<CharScreenBoardBase *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&PgTList<CharScreenBoardBase__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
}
// 9C123C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);
// 9C12DC: using guessed type int (__thiscall *PgTList_CharScreenBoardBase _____vftable_)(void *p, char);

//----- (00625700) --------------------------------------------------------
void __thiscall PgTList<PrivateStoreBD__>::_PgTList<PrivateStoreBD__>(PgTList<PrivateStoreBD *> *this)
{
  PgTList<PrivateStoreBD *> *v1; // edi@1
  NiTListItem<PrivateStoreBD *> *v2; // esi@1
  NiTListItem<PrivateStoreBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&PgTList<PrivateStoreBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
}
// 9C124C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);
// 9C12EC: using guessed type int (__thiscall *PgTList_PrivateStoreBD _____vftable_)(void *p, char);

//----- (00625780) --------------------------------------------------------
void __thiscall PgTList<GuildBD__>::_PgTList<GuildBD__>(PgTList<GuildBD *> *this)
{
  PgTList<GuildBD *> *v1; // edi@1
  NiTListItem<GuildBD *> *v2; // esi@1
  NiTListItem<GuildBD *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&PgTList<GuildBD__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
}
// 9C125C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);
// 9C12FC: using guessed type int (__thiscall *PgTList_GuildBD _____vftable_)(void *p, char);

//----- (00625800) --------------------------------------------------------
void *__thiscall PgTList<SpeechBD__>::_scalar_deleting_destructor_(PgTList<SpeechBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<SpeechBD *> *v3; // esi@1
  NiTListItem<SpeechBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,SpeechBD *>Vtbl *)&PgTList<SpeechBD__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_SpeechBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C121C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__SpeechBD _____vftable_)(void *p, char);
// 9C12BC: using guessed type int (__thiscall *PgTList_SpeechBD _____vftable_)(void *p, char);

//----- (00625890) --------------------------------------------------------
void *__thiscall PgTList<NameBD__>::_scalar_deleting_destructor_(PgTList<NameBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NameBD *> *v3; // esi@1
  NiTListItem<NameBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NameBD *>Vtbl *)&PgTList<NameBD__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NameBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C122C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NameBD _____vftable_)(void *p, char);
// 9C12CC: using guessed type int (__thiscall *PgTList_NameBD _____vftable_)(void *p, char);

//----- (00625920) --------------------------------------------------------
void *__thiscall PgTList<CharScreenBoardBase__>::_scalar_deleting_destructor_(PgTList<CharScreenBoardBase *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<CharScreenBoardBase *> *v3; // esi@1
  NiTListItem<CharScreenBoardBase *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharScreenBoardBase *>Vtbl *)&PgTList<CharScreenBoardBase__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_CharScreenBoardBase__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C123C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharScreenBoardBase _____vftable_)(void *p, char);
// 9C12DC: using guessed type int (__thiscall *PgTList_CharScreenBoardBase _____vftable_)(void *p, char);

//----- (006259B0) --------------------------------------------------------
void *__thiscall PgTList<PrivateStoreBD__>::_scalar_deleting_destructor_(PgTList<PrivateStoreBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PrivateStoreBD *> *v3; // esi@1
  NiTListItem<PrivateStoreBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PrivateStoreBD *>Vtbl *)&PgTList<PrivateStoreBD__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PrivateStoreBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C124C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PrivateStoreBD _____vftable_)(void *p, char);
// 9C12EC: using guessed type int (__thiscall *PgTList_PrivateStoreBD _____vftable_)(void *p, char);

//----- (00625A40) --------------------------------------------------------
void *__thiscall PgTList<GuildBD__>::_scalar_deleting_destructor_(PgTList<GuildBD *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<GuildBD *> *v3; // esi@1
  NiTListItem<GuildBD *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GuildBD *>Vtbl *)&PgTList<GuildBD__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GuildBD__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C125C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GuildBD _____vftable_)(void *p, char);
// 9C12FC: using guessed type int (__thiscall *PgTList_GuildBD _____vftable_)(void *p, char);

//----- (00625AD0) --------------------------------------------------------
void __cdecl std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(NiPointer<PgSprData> *_First, NiPointer<PgSprData> *_Last, std::allocator<NiPointer<PgSprData> > *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  NiPointer<PgSprData> *i; // edi@1
  NiPointer<PgSprData> v5; // esi@2

  for ( i = _First; i != _Last; ++i )
  {
    v5.m_pObject = i->m_pObject;
    if ( i->m_pObject && !InterlockedDecrement((volatile LONG *)&v5.m_pObject->baseclass_0.m_uiRefCount) )
    {
      if ( v5.m_pObject )
        v5.m_pObject->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5.m_pObject, 1u);
    }
  }
}

//----- (00625B10) --------------------------------------------------------
void __thiscall ScreenBoardTexture::_ScreenBoardTexture(ScreenBoardTexture *this)
{
  ScreenBoardTexture *v1; // esi@1
  NiPointer<PgSprData> *v2; // eax@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  v2 = *(NiPointer<PgSprData> **)&this->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
  {
    std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
      v2,
      (NiPointer<PgSprData> *)this->m_UseChecks.baseclass_0._Mylast,
      (std::allocator<NiPointer<PgSprData> > *)&this->m_UseChecks.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_UseChecks.baseclass_0._Mylast = 0;
  v1->m_UseChecks.baseclass_0._Myend = 0;
}

//----- (00625B60) --------------------------------------------------------
ScreenBoardGeometry::BoardInfo *__thiscall ScreenBoardGeometry::GetInfo(ScreenBoardGeometry *this)
{
  return &this->m_Info;
}

//----- (00625B70) --------------------------------------------------------
void __thiscall ScreenBoardGeometry::Update(ScreenBoardGeometry *this, float fTime)
{
  NiAVObject::Update(&this->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fTime, 1);
}

//----- (00625B90) --------------------------------------------------------
NiScreenElementsData *__thiscall ScreenBoardGeometry::CreateScreenGeometryData(ScreenBoardGeometry *this, NiPoint2 RenderSize, NiPoint2 TextureStartPos)
{
  int v4; // edi@1
  int v5; // eax@1
  float v10; // ST38_4@1
  float v11; // ST3C_4@1
  float v12; // ST30_4@1
  float v13; // ST34_4@1
  float v14; // ST44_4@1
  float v15; // ST48_4@1
  float v16; // ST44_4@1
  float v17; // ST48_4@1
  int v18; // ST40_4@3
  int v20; // ST48_4@5
  float v25; // ST38_4@7
  float v26; // ST3C_4@7
  float v27; // ST30_4@7
  float v28; // ST34_4@7
  float v29; // ST44_4@7
  float v30; // ST48_4@7
  float v31; // ST44_4@7
  float v32; // ST48_4@7
  void *v33; // eax@7
  signed int v34; // esi@7
  NiScreenElementsData *v35; // eax@8
  NiScreenElementsData *v36; // ebx@8
  NiPoint2 *v37; // edi@10
  NiPoint2 pkPts[4]; // [sp+1Ch] [bp-50h]@1
  NiPoint2 pkTUVs[4]; // [sp+3Ch] [bp-30h]@7
  unsigned int v43; // [sp+5Ch] [bp-10h]@1
  int v44; // [sp+68h] [bp-4h]@7
  int v45; // [sp+6Ch] [bp+0h]@1

  v43 = (unsigned int)&v45 ^ __security_cookie;
  _ESI = this;
  v4 = ((int (__stdcall *)(unsigned int))this->m_pkTexture->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)((unsigned int)&v45 ^ __security_cookie);
  v5 = ((int (*)(void))_ESI->m_pkTexture->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)();
  __asm
  {
    fld     [ebp+RenderSize.x]
    fld     ds:__real@3fe0000000000000
    fmul    st, st(1)
    fld     dword ptr [esi+34h]
    fsub    st, st(1)
    fstp    [ebp+fLeft]
    fld     dword ptr [esi+38h]
    fsub    [ebp+RenderSize.y]
    fstp    [ebp+fTop]
    fadd    dword ptr [esi+34h]
    fstp    [ebp+fCorRectionPos]
    fld     dword ptr [esi+38h]
    fadd    ds:__real@0000000000000000
    fstp    [ebp+fBottom]
    fld     [ebp+fLeft]
    fst     [ebp+var_64]
    fld     [ebp+fTop]
  }
  pkPts[0].x = v10;
  __asm
  {
    fst     [ebp+fLeft]
    fxch    st(1)
  }
  pkPts[0].y = v11;
  __asm
  {
    fstp    [ebp+var_6C]
    fld     [ebp+fBottom]
  }
  pkPts[1].x = v12;
  __asm
  {
    fst     [ebp+fTop]
    fld     [ebp+fCorRectionPos]
  }
  pkPts[1].y = v13;
  __asm
  {
    fst     [ebp+var_58]
    fxch    st(1)
  }
  pkPts[2].x = v14;
  __asm { fstp    [ebp+fCorRectionPos] }
  pkPts[2].y = v15;
  __asm { fstp    [ebp+var_58] }
  pkPts[3].x = v16;
  __asm
  {
    fstp    [ebp+fCorRectionPos]
    fldz
  }
  pkPts[3].y = v17;
  __asm { fstp    [ebp+fCorRectionPos] }
  if ( byte_B5BB4B == 1 )
  {
    __asm
    {
      fld1
      fstp    [ebp+fCorRectionPos]
    }
  }
  v18 = v4;
  __asm { fild    [ebp+fBottom] }
  if ( v4 < 0 )
    __asm { fadd    ds:__real@4f800000 }
  __asm
  {
    fstp    [ebp+fBottom]
    fld     [ebp+TextureStartPos.x]
    fld     st
    fld     [ebp+fCorRectionPos]
  }
  v20 = v5;
  __asm
  {
    fld     st
    faddp   st(2), st
    fld     [ebp+fBottom]
    fld     st
    fdivp   st(3), st
    fxch    st(2)
    fstp    [ebp+fLeft]
    fild    [ebp+fCorRectionPos]
  }
  if ( v5 < 0 )
    __asm { fadd    ds:__real@4f800000 }
  __asm
  {
    fstp    [ebp+fCorRectionPos]
    fld     [ebp+TextureStartPos.y]
    fld     st
    fadd    st, st(2)
    fld     [ebp+fCorRectionPos]
    fld     st
    fdivp   st(2), st
    fxch    st(1)
    fstp    [ebp+fTop]
    fxch    st(4)
    faddp   st(5), st
    fld     st(1)
    fsubp   st(5), st
    fxch    st(4)
    fdivrp  st(2), st
    fxch    st(1)
    fstp    [ebp+fCorRectionPos]
    fld     [ebp+RenderSize.y]
    faddp   st(3), st
    fsubp   st(2), st
    fdivp   st(1), st
    fstp    [ebp+fBottom]
    fld     [ebp+fLeft]
    fst     [ebp+var_64]
    fld     [ebp+fTop]
    fst     [ebp+fLeft]
    fxch    st(1)
  }
  pkTUVs[0].x = v25;
  __asm
  {
    fstp    [ebp+var_6C]
    fld     [ebp+fBottom]
  }
  pkTUVs[0].y = v26;
  __asm
  {
    fst     [ebp+fTop]
    fld     [ebp+fCorRectionPos]
  }
  pkTUVs[1].x = v27;
  __asm
  {
    fst     [ebp+var_58]
    fxch    st(1)
  }
  pkTUVs[1].y = v28;
  __asm { fstp    [ebp+fCorRectionPos] }
  pkTUVs[2].x = v29;
  pkTUVs[2].y = v30;
  __asm { fstp    [ebp+var_58] }
  pkTUVs[3].x = v31;
  __asm { fstp    [ebp+fCorRectionPos] }
  pkTUVs[3].y = v32;
  v33 = operator new(0x70u);
  v34 = 0;
  v44 = 0;
  if ( v33 )
  {
    NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v33, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
    v36 = v35;
  }
  else
  {
    v36 = 0;
  }
  v44 = -1;
  NiScreenElementsData::Insert(v36, 4u, 0, 0);
  v37 = pkPts;
  do
  {
    NiScreenElementsData::SetVertex(v36, 0, v34++, v37);
    ++v37;
  }
  while ( v34 < 4 );
  NiScreenElementsData::UpdateBound(v36);
  NiScreenElementsData::SetTextures(v36, 0, 0, pkTUVs, &pkTUVs[1], &pkTUVs[2], &pkTUVs[3]);
  return v36;
}
// 625BD3: inconsistent fpu stack
// A85C00: using guessed type int __security_cookie;
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (00625DE0) --------------------------------------------------------
NiScreenElements *__thiscall ScreenBoardGeometry::GetGeometry(ScreenBoardGeometry *this)
{
  return this->m_spScreenGeom.m_pObject;
}

//----- (00625DF0) --------------------------------------------------------
void __thiscall ScreenBoardGeometry::SetAlpha(ScreenBoardGeometry *this, float fAlpha)
{
  NiProperty *v2; // eax@1

  v2 = NiAVObject::GetProperty(&this->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
  ++v2[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v2[3].baseclass_0.baseclass_0.baseclass_0.vfptr = fAlpha;
}

//----- (00625E10) --------------------------------------------------------
void __thiscall ScreenBoardGeometry::_ScreenBoardGeometry(ScreenBoardGeometry *this)
{
  ScreenBoardGeometry *v1; // esi@1
  NiScreenElements *v2; // edi@1
  ScreenBoardTexture::DescInfo *v3; // edi@6
  NiScreenElements *v4; // edi@13
  ScreenBoardTexture::DescInfo *v5; // edi@19

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&ScreenBoardGeometry::_vftable_;
  v2 = this->m_spScreenGeom.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spScreenGeom.m_pObject = 0;
  }
  v3 = v1->m_spDescInfo.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spDescInfo.m_pObject = 0;
  }
  if ( v1->m_strNameSpeech.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_strNameSpeech.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_strNameSpeech.baseclass_0._Myres = 15;
  v1->m_strNameSpeech.baseclass_0._Mysize = 0;
  v1->m_strNameSpeech.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = v1->m_spScreenGeom.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  if ( v1->m_Info.Name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_Info.Name.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_Info.Name.baseclass_0._Myres = 15;
  v1->m_Info.Name.baseclass_0._Mysize = 0;
  v1->m_Info.Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v5 = v1->m_spDescInfo.m_pObject;
  if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
    v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C130C: using guessed type int (__thiscall *ScreenBoardGeometry___vftable_)(void *p, char);

//----- (00625F50) --------------------------------------------------------
void __thiscall ScreenBoardGeometry::ScreenBoardGeometry(ScreenBoardGeometry *this, ScreenBoardTexture *pBoardData)
{
  ScreenBoardGeometry *v2; // esi@1
  ScreenBoardTexture::DescInfo *v3; // edi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&ScreenBoardGeometry::_vftable_;
  v2->m_spDescInfo.m_pObject = 0;
  v2->m_Info.Name.baseclass_0._Myres = 15;
  v2->m_Info.Name.baseclass_0._Mysize = 0;
  v2->m_Info.Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_spScreenGeom.m_pObject = 0;
  v2->m_strNameSpeech.baseclass_0._Myres = 15;
  v2->m_strNameSpeech.baseclass_0._Mysize = 0;
  v2->m_strNameSpeech.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_pBoardData = pBoardData;
  v3 = v2->m_spDescInfo.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    v2->m_spDescInfo.m_pObject = 0;
  }
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C130C: using guessed type int (__thiscall *ScreenBoardGeometry___vftable_)(void *p, char);

//----- (00626000) --------------------------------------------------------
void __thiscall ScreenBoardGeometry::SetBoardInfo(ScreenBoardGeometry *this, ScreenBoardGeometry::BoardInfo *info)
{
  ScreenBoardGeometry *v2; // esi@1
  ScreenBoardGeometry::BoardInfo *v3; // ebx@1
  char *v4; // edi@1
  char *v5; // eax@2
  ScreenBoardTexture *v6; // eax@5
  NiPointer<ScreenBoardTexture::DescInfo> *v7; // ebx@7
  ScreenBoardTexture::DescInfo *v8; // edi@7
  ScreenBoardTexture::DescInfo *v9; // ebx@12
  ScreenBoardGeometry::BoardInfo *v10; // edi@14
  ScreenBoardTexture::DescInfo *v11; // ecx@18
  NiTexture *v12; // eax@19
  ScreenBoardTexture::DescInfo *v13; // ecx@19
  double v14; // st7@19
  NiPoint2 v15; // ST34_8@19
  NiPoint2 *v16; // eax@19
  NiScreenElementsData *v17; // ebx@19
  NiScreenElements *v18; // edi@20
  void *v19; // eax@25
  int v20; // eax@26
  int v21; // ebx@26
  NiScreenElements *v22; // edi@28
  void *v23; // eax@35
  int v24; // eax@36
  int v25; // edi@36
  NiTexture *v26; // ST1C_4@38
  void *v27; // eax@40
  int v28; // eax@41
  NiAVObject *v29; // ecx@43
  tagSIZE RenderSize; // [sp+3Ch] [bp-1Ch]@4
  NiPoint2 result; // [sp+44h] [bp-14h]@19
  int v32; // [sp+54h] [bp-4h]@7

  v2 = this;
  v3 = info;
  v4 = (char *)&this->m_Info;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_Info.Name,
    &info->Name,
    0,
    0xFFFFFFFFu);
  *((_DWORD *)v4 + 7) = v3->color;
  *((_DWORD *)v4 + 8) = LODWORD(v3->CorectionPos.x);
  *((_DWORD *)v4 + 9) = LODWORD(v3->CorectionPos.y);
  if ( *((_DWORD *)v4 + 5) < 0x10u )
    v5 = v4;
  else
    v5 = *(char **)v4;
  (**(void (__stdcall ***)(tagSIZE *, char *))v2->m_pBoardData)(&RenderSize, v5);
  if ( RenderSize.cx )
  {
    v6 = v2->m_pBoardData;
    v6->m_DestCorrectionPos.cx = 0;
    v6->m_DestCorrectionPos.cy = 0;
    if ( *((_DWORD *)v4 + 5) >= 0x10u )
      v4 = *(char **)v4;
    v7 = ScreenBoardTexture::TextOutA(
           v2->m_pBoardData,
           (NiPointer<ScreenBoardTexture::DescInfo> *)&info,
           v4,
           v2->m_Info.color);
    v8 = v2->m_spDescInfo.m_pObject;
    v32 = 0;
    if ( v8 != v7->m_pObject )
    {
      if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount) && v8 )
        v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      v9 = v7->m_pObject;
      v2->m_spDescInfo.m_pObject = v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount);
    }
    v10 = info;
    v32 = -1;
    if ( *(float *)&info != 0.0
      && !InterlockedDecrement((volatile LONG *)&info->Name.baseclass_0.___u0._Bx._Buf[4])
      && v10 )
      (**(void (__thiscall ***)(ScreenBoardGeometry::BoardInfo *, signed int))&v10->Name.baseclass_0.___u0.baseclass_0.dummy[0])(
        v10,
        1);
    v11 = v2->m_spDescInfo.m_pObject;
    if ( v11 )
    {
      v12 = ScreenBoardTexture::DescInfo::GetTexture(v11);
      v13 = v2->m_spDescInfo.m_pObject;
      *(float *)&info = (double)RenderSize.cx;
      v14 = (double)RenderSize.cy;
      v2->m_pkTexture = v12;
      result.y = v14;
      v15.x = *(float *)&info;
      v15.y = result.y;
      v16 = ScreenBoardTexture::DescInfo::GetRenderStartPos(v13, &result);
      v17 = ScreenBoardGeometry::CreateScreenGeometryData(v2, v15, COERCE_NIPOINT2(v16->x));
      if ( v2->m_spScreenGeom.m_pObject )
      {
        v18 = v2->m_spScreenGeom.m_pObject;
        if ( v18 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v18 )
            v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
              (NiRefObject *)v18,
              1u);
          v2->m_spScreenGeom.m_pObject = 0;
        }
      }
      v19 = operator new(0xC4u);
      info = (ScreenBoardGeometry::BoardInfo *)v19;
      v32 = 1;
      if ( v19 )
      {
        NiScreenElements::NiScreenElements((NiScreenElements *)v19, v17);
        v21 = v20;
      }
      else
      {
        v21 = 0;
      }
      v22 = v2->m_spScreenGeom.m_pObject;
      v32 = -1;
      if ( v22 != (NiScreenElements *)v21 )
      {
        if ( v22
          && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v22 )
          v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v22,
            1u);
        v2->m_spScreenGeom.m_pObject = (NiScreenElements *)v21;
        if ( v21 )
          InterlockedIncrement((volatile LONG *)(v21 + 4));
      }
      v23 = operator new(0x44u);
      info = (ScreenBoardGeometry::BoardInfo *)v23;
      v32 = 2;
      if ( v23 )
      {
        NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v23);
        v25 = v24;
      }
      else
      {
        v25 = 0;
      }
      v26 = v2->m_pkTexture;
      v32 = -1;
      NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v25, v26);
      NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v25, FILTER_BILERP);
      if ( !byte_B5BB4B )
        NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v25, 0);
      *(_DWORD *)(v25 + 28) = 2;
      NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)v25, 0);
      NiAVObject::AttachProperty(
        &v2->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        (NiProperty *)v25);
      v27 = operator new(0x60u);
      info = (ScreenBoardGeometry::BoardInfo *)v27;
      v32 = 3;
      if ( v27 )
        NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v27);
      else
        v28 = 0;
      ++*(_DWORD *)(v28 + 88);
      *(float *)(v28 + 68) = 1.0;
      *(float *)(v28 + 72) = 1.0;
      *(float *)(v28 + 76) = 1.0;
      v29 = (NiAVObject *)v2->m_spScreenGeom.m_pObject;
      v32 = -1;
      NiAVObject::AttachProperty(v29, (NiProperty *)v28);
      NiAVObject::UpdateProperties(&v2->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      NiAVObject::Update(&v2->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
      v2->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    }
  }
}
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (006262E0) --------------------------------------------------------
void *__thiscall ScreenBoardGeometry::_vector_deleting_destructor_(ScreenBoardGeometry *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ScreenBoardGeometry::_ScreenBoardGeometry(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00626310) --------------------------------------------------------
int __thiscall ScreenBDMgr::GetNotUsedGuildBDTextureIndex(ScreenBDMgr *this)
{
  int v1; // edx@1
  int result; // eax@1
  bool *v3; // ecx@2

  v1 = this->m_iTotalGuildBDTextureIndex;
  result = 0;
  if ( v1 <= 0 )
  {
LABEL_5:
    result = -1;
  }
  else
  {
    v3 = this->m_pabUseGuildBD;
    while ( v3[result] )
    {
      ++result;
      if ( result >= v1 )
        goto LABEL_5;
    }
  }
  return result;
}

//----- (00626340) --------------------------------------------------------
GuildBD *__thiscall ScreenBDMgr::GetGuildBD(ScreenBDMgr *this, unsigned __int16 kHandle)
{
  NiTListItem<GuildBD *> *v2; // ecx@1
  GuildBD *result; // eax@2

  v2 = this->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result->m_kCharHandle == kHandle )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00626370) --------------------------------------------------------
GuildBD *__thiscall ScreenBDMgr::GetMostFarGuildBD(ScreenBDMgr *this, NiPoint3 *kPos)
{
  ScreenBDMgr *v2; // esi@1
  GuildBD *v3; // ebx@1
  int v4; // eax@1
  NiTListItem<GuildBD *> *v5; // esi@1
  float v6; // ST10_4@1
  float v7; // ST14_4@1
  float v8; // ST18_4@1
  GuildBD *v9; // edi@2
  Char *v10; // eax@3
  int v11; // eax@4
  float v12; // ST28_4@4
  float v14; // [sp+8h] [bp-1Ch]@4
  float v15; // [sp+Ch] [bp-18h]@4
  float v16; // [sp+10h] [bp-14h]@4
  float kMainPos; // [sp+14h] [bp-10h]@1
  float kMainPos_4; // [sp+18h] [bp-Ch]@1
  float kMainPos_8; // [sp+1Ch] [bp-8h]@1
  float fMostFarDist; // [sp+2Ch] [bp+8h]@1

  v2 = this;
  v3 = 0;
  v4 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  LODWORD(kMainPos_8) = *(_DWORD *)(v4 + 8);
  LODWORD(kMainPos) = *(_DWORD *)v4;
  LODWORD(kMainPos_4) = *(_DWORD *)(v4 + 4);
  v5 = v2->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v6 = *(float *)v4 - kPos->x;
  v7 = kMainPos_4 - kPos->y;
  v8 = kMainPos_8 - kPos->z;
  fMostFarDist = v7 * v7 + v6 * v6 + v8 * v8;
  while ( v5 )
  {
    v9 = v5->m_element;
    v5 = v5->m_pkNext;
    if ( v9 )
    {
      v10 = CharMgr::GetChar(&g_kCharMgr, v9->m_kCharHandle);
      if ( v10 )
      {
        v11 = ((int (__thiscall *)(_DWORD))v10->baseclass_0.vfptr[6].Deaffect)(v10);
        v14 = kMainPos - *(float *)v11;
        v15 = kMainPos_4 - *(float *)(v11 + 4);
        v16 = kMainPos_8 - *(float *)(v11 + 8);
        v12 = v15 * v15 + v14 * v14 + v16 * v16;
        if ( v12 > (double)fMostFarDist )
        {
          fMostFarDist = v15 * v15 + v14 * v14 + v16 * v16;
          v3 = v9;
        }
      }
    }
  }
  return v3;
}

//----- (00626470) --------------------------------------------------------
bool __thiscall ScreenBDMgr::InitGuildBD(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // ebx@1
  void *v2; // eax@1
  NiPixelData *v3; // eax@2
  NiSourceTexture *v4; // esi@4
  int v5; // eax@4
  int v6; // edi@6
  void *v8; // eax@13
  NiPixelData *v9; // eax@14
  NiSourceTexture *v10; // eax@16
  NiSourceTexture *v11; // esi@16
  NiSourceTexture *v12; // edi@16
  void *v13; // eax@24
  unsigned int v14; // ST0C_4@24
  Font::FontDefine *v15; // eax@25
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-60h]@1
  void *v17; // [sp+Ch] [bp-54h]@1
  char bOldbDestroyAppData; // [sp+13h] [bp-4Dh]@1
  tagLOGFONTA LogFont; // [sp+14h] [bp-4Ch]@25
  unsigned int v20; // [sp+50h] [bp-10h]@1
  int v21; // [sp+5Ch] [bp-4h]@1
  int v22; // [sp+60h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v1 = this;
  kPrefs.m_eAlphaFmt = 3;
  kPrefs.m_ePixelLayout = 2;
  kPrefs.m_eMipMapped = 0;
  bOldbDestroyAppData = NiSourceTexture::ms_bDestroyAppData;
  NiSourceTexture::ms_bDestroyAppData = 1;
  v2 = operator new(0x70u);
  v17 = v2;
  v21 = 0;
  if ( v2 )
    NiPixelData::NiPixelData((NiPixelData *)v2, 0x100u, 0x20u, &NiPixelFormat::RGB24, 1u, 1u);
  else
    v3 = 0;
  v21 = -1;
  v4 = NiSourceTexture::Create(v3, &kPrefs);
  v5 = GuildBD::ms_spTempTexture;
  if ( (NiSourceTexture *)GuildBD::ms_spTempTexture != v4 )
  {
    if ( GuildBD::ms_spTempTexture )
    {
      v6 = GuildBD::ms_spTempTexture;
      if ( !InterlockedDecrement((volatile LONG *)(GuildBD::ms_spTempTexture + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    GuildBD::ms_spTempTexture = (int)v4;
    if ( !v4 )
      return 0;
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v5 = GuildBD::ms_spTempTexture;
  }
  if ( !v5 )
    return 0;
  v8 = operator new(0x70u);
  v17 = v8;
  v21 = 1;
  if ( v8 )
    NiPixelData::NiPixelData((NiPixelData *)v8, 0x200u, 0x100u, &NiPixelFormat::RGBA32, 1u, 1u);
  else
    v9 = 0;
  v21 = -1;
  v10 = NiSourceTexture::Create(v9, &kPrefs);
  v11 = v1->m_spGuildBDTexture.m_pObject;
  v12 = v10;
  if ( v11 != v10 )
  {
    if ( v11
      && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v1->m_spGuildBDTexture.m_pObject = v12;
    if ( v12 )
      InterlockedIncrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !v1->m_spGuildBDTexture.m_pObject
    || (NiSourceTexture::ms_bDestroyAppData = bOldbDestroyAppData,
        v1->m_iTotalGuildBDTextureIndex = 22,
        v13 = operator new__(0x16u),
        v14 = v1->m_iTotalGuildBDTextureIndex,
        v1->m_pabUseGuildBD = (bool *)v13,
        memset((char *)v13, 0, v14),
        (GuildBD::ms_hEraseBrush = CreateSolidBrush(0xFF00FFu)) == 0) )
    return 0;
  v15 = Font::GetFontDefine(0);
  *(_WORD *)&LogFont.lfUnderline = 0;
  LogFont.lfItalic = 0;
  LogFont.lfEscapement = 0;
  LogFont.lfOrientation = 0;
  LogFont.lfOutPrecision = LOBYTE(v15->OutputPrecision);
  LogFont.lfClipPrecision = 0;
  LogFont.lfHeight = v15->Height;
  LogFont.lfWidth = 0;
  LogFont.lfCharSet = LOBYTE(v15->CharSet);
  LogFont.lfQuality = LOBYTE(v15->Quality);
  LogFont.lfWeight = v15->Weight;
  LogFont.lfPitchAndFamily = LOBYTE(v15->PitchAndFamily);
  lstrcpyA(LogFont.lfFaceName, v15->pFacename);
  GuildBD::ms_hFont = CreateFontIndirectA(&LogFont);
  return GuildBD::ms_hFont != 0;
}
// A85C00: using guessed type int __security_cookie;
// AA2504: using guessed type int GuildBD__ms_spTempTexture;
// B6E04C: using guessed type char NiSourceTexture__ms_bDestroyAppData;

//----- (006266C0) --------------------------------------------------------
void __thiscall ScreenBDMgr::RemoveGuildBD(ScreenBDMgr *this, GuildBD *pkGuildBD)
{
  GuildBD *v2; // esi@1
  ScreenBDMgr *v3; // edi@1
  NiTListItem<GuildBD *> *v4; // eax@1
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v5; // ecx@1
  int v6; // edx@2
  GuildBD *v7; // ebx@2
  GuildBD *v8; // edi@8

  v2 = pkGuildBD;
  v3 = this;
  this->m_pabUseGuildBD[pkGuildBD->m_iTextureIndex] = 0;
  v4 = this->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v5 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kGuildBDList;
  if ( v4 )
  {
    while ( 1 )
    {
      v6 = (int)&v4->m_element;
      v7 = (GuildBD *)v4;
      v4 = v4->m_pkNext;
      if ( v2 == *(GuildBD **)v6 )
        break;
      if ( !v4 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v7 = 0;
  }
  pkGuildBD = v7;
  if ( v7 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v5, (void **)&pkGuildBD);
  ((void (__stdcall *)(_DWORD, _DWORD))v3->m_pkGuildBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
    &pkGuildBD,
    v2->m_spNode.m_pObject);
  if ( pkGuildBD )
  {
    v8 = pkGuildBD;
    if ( !InterlockedDecrement((volatile LONG *)&pkGuildBD->m_eEnemyStatus) )
    {
      if ( v8 )
        v8->vfptr->__vecDelDtor(v8, 1u);
    }
  }
  v2->vfptr->__vecDelDtor(v2, 1u);
}

//----- (00626760) --------------------------------------------------------
void __thiscall ScreenBDMgr::RemoveAllGuildBD(ScreenBDMgr *this)
{
  signed int v1; // esi@0
  ScreenBDMgr *v2; // ebx@1
  NiTListItem<GuildBD *> *v3; // edi@1
  GuildBD *v4; // esi@3
  void *v5; // eax@3
  int v6; // ecx@4
  void *v7; // edx@4
  int v8; // ebx@10
  signed int v9; // [sp-4h] [bp-18h]@2
  int v10; // [sp+8h] [bp-Ch]@9
  void *kPos; // [sp+Ch] [bp-8h]@7
  ScreenBDMgr *v12; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v12 = this;
  if ( v3 )
  {
    v9 = v1;
    do
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      v2->m_pabUseGuildBD[v4->m_iTextureIndex] = 0;
      v5 = v2->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v5 )
      {
        while ( 1 )
        {
          v6 = (int)((char *)v5 + 8);
          v7 = v5;
          v5 = *(void **)v5;
          if ( v4 == *(GuildBD **)v6 )
            break;
          if ( !v5 )
            goto LABEL_6;
        }
      }
      else
      {
LABEL_6:
        v7 = 0;
      }
      kPos = v7;
      if ( v7 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v2->m_kGuildBDList,
          &kPos);
      ((void (__stdcall *)(int *, NiNode *, signed int))v2->m_pkGuildBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v10,
        v4->m_spNode.m_pObject,
        v9);
      if ( v10 )
      {
        v8 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v8 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
        }
        v2 = v12;
      }
      v9 = 1;
      ((void (__thiscall *)(GuildBD *))v4->vfptr->__vecDelDtor)(v4);
    }
    while ( v3 );
  }
}
// 626760: could not find valid save-restore pair for esi

//----- (00626830) --------------------------------------------------------
void __thiscall ScreenBDMgr::AddGuildBD(ScreenBDMgr *this, unsigned __int16 kHandle)
{
  ScreenBDMgr *v2; // esi@1
  Char *v3; // edi@1
  int v4; // eax@2
  int v5; // ebx@5
  NiPoint3 *v6; // eax@6
  GuildBD *v7; // eax@6
  void *v8; // eax@8
  float v9; // edi@8
  float v10; // eax@9
  NiAVObject *v11; // edi@10
  float pkGuildBD; // [sp+20h] [bp-18h]@2
  float v13; // [sp+24h] [bp-14h]@2
  float v14; // [sp+28h] [bp-10h]@2
  int v15; // [sp+34h] [bp-4h]@8

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, kHandle);
  if ( v3 )
  {
    v4 = ((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[6].Deaffect)(v3);
    v13 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - *(float *)v4;
    v14 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v4 + 4);
    pkGuildBD = pkCamera->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v4 + 8);
    pkGuildBD = v14 * v14 + v13 * v13 + pkGuildBD * pkGuildBD;
    pkGuildBD = sqrt(pkGuildBD);
    if ( GuildBD::ms_fMaxDistance >= (double)pkGuildBD )
    {
      if ( v3->m_dwGuildRegNum && !ScreenBDMgr::GetGuildBD(v2, kHandle) )
      {
        v5 = ScreenBDMgr::GetNotUsedGuildBDTextureIndex(v2);
        if ( v5 == -1 )
        {
          v6 = (NiPoint3 *)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[6].Deaffect)(v3);
          v7 = ScreenBDMgr::GetMostFarGuildBD(v2, v6);
          if ( !v7 )
            return;
          v5 = v7->m_iTextureIndex;
          ScreenBDMgr::RemoveGuildBD(v2, v7);
        }
        v2->m_pabUseGuildBD[v5] = 1;
        v8 = operator new(0x180u);
        LODWORD(pkGuildBD) = v8;
        LODWORD(v9) = 0;
        v15 = 0;
        if ( v8 )
        {
          GuildBD::GuildBD((GuildBD *)v8, &v2->m_spGuildBDTexture.m_pObject->baseclass_0, v5);
          v9 = v10;
        }
        v15 = -1;
        pkGuildBD = v9;
        GuildBD::SetChar(LODWORD(v9), kHandle);
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kGuildBDList,
          (NiD3DXEffectParameter *const *)&pkGuildBD);
        v11 = *(NiAVObject **)(LODWORD(v9) + 40);
        if ( v11 )
        {
          ((void (__stdcall *)(NiAVObject *, signed int))v2->m_pkGuildBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v11,
            1);
          NiAVObject::UpdateProperties(v11);
          NiAVObject::UpdateEffects(v11);
          NiAVObject::Update(&v2->m_pkGuildBDScene->baseclass_0, 0.0, 1);
        }
      }
    }
  }
}
// A7EB44: using guessed type float GuildBD__ms_fMaxDistance;

//----- (006269E0) --------------------------------------------------------
void __thiscall ScreenBDMgr::UpdateGuildBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera)
{
  ScreenBDMgr *v3; // ebx@1
  float v4; // ecx@1
  float v5; // edi@2
  int v6; // esi@4
  NiTListItem<GuildBD *> *v7; // eax@5
  float v8; // ecx@6
  int v9; // eax@12
  bool v10; // zf@27
  NiTListItem<GuildBD *> *v11; // esi@32
  GuildBD *v12; // edi@33
  NiTListItem<GuildBD *> *v13; // esi@36
  GuildBD **v14; // eax@37
  NiPoint3 kPos; // [sp+18h] [bp-10h]@12
  float kIter; // [sp+24h] [bp-4h]@3

  v3 = this;
  v4 = ::fTime;
  if ( LODWORD(::fTime) )
  {
    v5 = fTime;
    while ( 1 )
    {
      v6 = *(_DWORD *)(LODWORD(v4) + 8);
      LODWORD(kIter) = *LODWORD(v4);
      if ( !v6 )
        break;
      v7 = v3->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v7 )
      {
        while ( 1 )
        {
          LODWORD(v8) = v7->m_element;
          v7 = v7->m_pkNext;
          if ( *(_WORD *)(LODWORD(v8) + 12) == *(_WORD *)(v6 + 548) )
            break;
          if ( !v7 )
            goto LABEL_8;
        }
        v5 = v8;
      }
      else
      {
LABEL_8:
        LODWORD(v5) = 0;
      }
      if ( !Char::IsUpdate((Char *)v6) || *(_BYTE *)(v6 + 2132) )
        break;
      if ( !*(_BYTE *)(v6 + 2502) )
      {
        v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 196))(v6);
        LODWORD(kPos.x) = *(_DWORD *)v9;
        LODWORD(kPos.y) = *(_DWORD *)(v9 + 4);
        LODWORD(kPos.z) = *(_DWORD *)(v9 + 8);
        if ( GuildBD::IsInShowRange(&kPos) == 1 )
        {
          if ( LODWORD(v5) )
          {
            if ( (byte_B5BB1E || g_pkMainChar != (Char *)v6)
              && (byte_B5BB1F
               || g_pkMainChar == (Char *)v6
               || (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 32))(v6)) )
            {
              v10 = *(_BYTE *)(v6 + 2132) == 0;
LABEL_29:
              if ( v10 )
                goto LABEL_31;
            }
            *(_BYTE *)(LODWORD(v5) + 28) = 0;
            goto LABEL_31;
          }
          if ( byte_B5BB1E && g_pkMainChar == (Char *)v6 )
          {
            ScreenBDMgr::AddGuildBD(v3, *(_WORD *)(v6 + 548));
          }
          else
          {
            if ( byte_B5BB1F
              && g_pkMainChar != (Char *)v6
              && !(unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 32))(v6) )
              ScreenBDMgr::AddGuildBD(v3, *(_WORD *)(v6 + 548));
          }
        }
      }
LABEL_31:
      if ( !LODWORD(kIter) )
        goto LABEL_32;
      v4 = kIter;
    }
    v10 = LODWORD(v5) == 0;
    goto LABEL_29;
  }
LABEL_32:
  v11 = v3->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v11 )
  {
    v12 = v11->m_element;
    v11 = v11->m_pkNext;
    if ( !GuildBD::IsAlive(v12, fTime) )
      ScreenBDMgr::RemoveGuildBD(v3, v12);
  }
  v13 = v3->m_kGuildBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v13 )
  {
    v14 = &v13->m_element;
    v13 = v13->m_pkNext;
    GuildBD::Update(*v14, fTime, pkWorldCamera, v3->m_spScreenSpaceCamera.m_pObject);
  }
  NiAVObject::Update(&v3->m_pkGuildBDScene->baseclass_0, fTime, 1);
}
// B5BB1E: using guessed type char byte_B5BB1E;
// B5BB1F: using guessed type char byte_B5BB1F;

//----- (00626BB0) --------------------------------------------------------
void __thiscall ScreenBDMgr::TerminateGuildBD(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // edi@1
  int v2; // esi@2
  NiSourceTexture *v3; // esi@6

  v1 = this;
  ScreenBDMgr::RemoveAllGuildBD(this);
  if ( GuildBD::ms_spTempTexture )
  {
    v2 = GuildBD::ms_spTempTexture;
    if ( !InterlockedDecrement((volatile LONG *)(GuildBD::ms_spTempTexture + 4)) && v2 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    GuildBD::ms_spTempTexture = 0;
  }
  v3 = v1->m_spGuildBDTexture.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spGuildBDTexture.m_pObject = 0;
  }
  operator delete__(v1->m_pabUseGuildBD);
  v1->m_pabUseGuildBD = 0;
  DeleteObject(GuildBD::ms_hEraseBrush);
  DeleteObject(GuildBD::ms_hFont);
}
// AA2504: using guessed type int GuildBD__ms_spTempTexture;

//----- (00626C50) --------------------------------------------------------
bool __thiscall ScreenBDMgr::InitMainCharHPBar(ScreenBDMgr *this)
{
  return 1;
}

//----- (00626C90) --------------------------------------------------------
int __thiscall ScreenBDMgr::GetNotUsedPrivateStoreBDTextureIndex(ScreenBDMgr *this)
{
  int v1; // edx@1
  int result; // eax@1
  bool *v3; // ecx@2

  v1 = this->m_iTotalPrivateStoreBDTextureIndex;
  result = 0;
  if ( v1 <= 0 )
  {
LABEL_5:
    result = -1;
  }
  else
  {
    v3 = this->m_pabUsePrivateStoreBD;
    while ( v3[result] )
    {
      ++result;
      if ( result >= v1 )
        goto LABEL_5;
    }
  }
  return result;
}

//----- (00626CC0) --------------------------------------------------------
void __thiscall ScreenBDMgr::MarkAsUsePrivateStoreBD(ScreenBDMgr *this, int iTextureIndex)
{
  this->m_pabUsePrivateStoreBD[iTextureIndex] = 1;
}

//----- (00626CE0) --------------------------------------------------------
void __thiscall ScreenBDMgr::MarkAsUnusePrivateStoreBD(ScreenBDMgr *this, int iTextureIndex)
{
  this->m_pabUsePrivateStoreBD[iTextureIndex] = 0;
}

//----- (00626D00) --------------------------------------------------------
PrivateStoreBD *__thiscall ScreenBDMgr::GetPrivateStoreBD(ScreenBDMgr *this, unsigned __int16 kHandle)
{
  NiTListItem<PrivateStoreBD *> *v2; // ecx@1
  PrivateStoreBD *result; // eax@2

  v2 = this->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result->m_kCharHandle == kHandle )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00626D30) --------------------------------------------------------
PrivateStoreBD *__thiscall ScreenBDMgr::GetMostOldPrivateStoreBD(ScreenBDMgr *this)
{
  PrivateStoreBD *result; // eax@1

  result = (PrivateStoreBD *)this->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( result )
    result = (PrivateStoreBD *)result->m_iTextureIndex;
  return result;
}

//----- (00626D40) --------------------------------------------------------
bool __thiscall ScreenBDMgr::InitPrivateStoreBD(ScreenBDMgr *this)
{
  int v1; // esi@1
  void *v2; // eax@1
  int v3; // eax@2
  NiSourceTexture *v4; // edi@6
  int v5; // eax@6
  int v6; // ebx@8
  bool result; // al@17
  void *v8; // eax@18
  int v9; // eax@19
  int v10; // edi@19
  NiSourceTexture *v11; // eax@27
  ScreenBDMgr *v12; // ecx@27
  NiSourceTexture *v13; // edi@27
  NiSourceTexture *v14; // ebx@27
  unsigned int v15; // eax@39
  void *v16; // eax@39
  ScreenBDMgr *v17; // ecx@39
  Font::FontDefine *v18; // eax@44
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-68h]@1
  void *v20; // [sp+Ch] [bp-5Ch]@1
  NiPointer<NiPixelData> pkRaw; // [sp+10h] [bp-58h]@1
  ScreenBDMgr *v22; // [sp+14h] [bp-54h]@1
  char bOldbDestroyAppData; // [sp+1Bh] [bp-4Dh]@1
  tagLOGFONTA LogFont; // [sp+1Ch] [bp-4Ch]@44
  unsigned int v25; // [sp+58h] [bp-10h]@1
  int v26; // [sp+64h] [bp-4h]@1
  int v27; // [sp+68h] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v1 = 0;
  v22 = this;
  kPrefs.m_eAlphaFmt = 3;
  kPrefs.m_ePixelLayout = 2;
  kPrefs.m_eMipMapped = 0;
  bOldbDestroyAppData = NiSourceTexture::ms_bDestroyAppData;
  NiSourceTexture::ms_bDestroyAppData = 1;
  pkRaw.m_pObject = 0;
  v26 = 0;
  v2 = operator new(0x70u);
  v20 = v2;
  LOBYTE(v26) = 1;
  if ( v2 )
    NiPixelData::NiPixelData((NiPixelData *)v2, 0x200u, 0x200u, &NiPixelFormat::RGB24, 1u, 1u);
  else
    v3 = 0;
  LOBYTE(v26) = 0;
  if ( v3 )
  {
    v1 = v3;
    pkRaw.m_pObject = (NiPixelData *)v3;
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v4 = NiSourceTexture::Create((NiPixelData *)v1, &kPrefs);
  v5 = PrivateStoreBD::ms_spTempTexture;
  if ( (NiSourceTexture *)PrivateStoreBD::ms_spTempTexture != v4 )
  {
    if ( PrivateStoreBD::ms_spTempTexture )
    {
      v6 = PrivateStoreBD::ms_spTempTexture;
      if ( !InterlockedDecrement((volatile LONG *)(PrivateStoreBD::ms_spTempTexture + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    PrivateStoreBD::ms_spTempTexture = (int)v4;
    if ( !v4 )
      goto LABEL_14;
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v5 = PrivateStoreBD::ms_spTempTexture;
  }
  if ( !v5 )
  {
LABEL_14:
    v26 = -1;
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    }
    return 0;
  }
  v8 = operator new(0x70u);
  v20 = v8;
  LOBYTE(v26) = 2;
  if ( v8 )
  {
    NiPixelData::NiPixelData((NiPixelData *)v8, 0x400u, 0x400u, &NiPixelFormat::RGBA32, 1u, 1u);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  LOBYTE(v26) = 0;
  if ( v1 != v10 )
  {
    if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    v1 = v10;
    pkRaw.m_pObject = (NiPixelData *)v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)(v10 + 4));
  }
  v11 = NiSourceTexture::Create((NiPixelData *)v1, &kPrefs);
  v12 = v22;
  v13 = v22->m_spPrivateStoreBDTexture.m_pObject;
  v14 = v11;
  if ( v13 != v11 )
  {
    if ( v13 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v13 )
        v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
      v12 = v22;
    }
    v12->m_spPrivateStoreBDTexture.m_pObject = v14;
    if ( v14 )
    {
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v12 = v22;
    }
  }
  if ( v12->m_spPrivateStoreBDTexture.m_pObject )
  {
    NiSourceTexture::ms_bDestroyAppData = bOldbDestroyAppData;
    v15 = v12->m_iMaxPrivateStoreView;
    v12->m_iTotalPrivateStoreBDTextureIndex = v15;
    v16 = operator new__(v15);
    v17 = v22;
    v22->m_pabUsePrivateStoreBD = (bool *)v16;
    memset((char *)v16, 0, v17->m_iTotalPrivateStoreBDTextureIndex);
    PrivateStoreBD::ms_hEraseBrush = CreateSolidBrush(0xFF00FFu);
    if ( PrivateStoreBD::ms_hEraseBrush )
    {
      v18 = Font::GetFontDefine(BOLD);
      *(_WORD *)&LogFont.lfUnderline = 0;
      LogFont.lfItalic = 0;
      LogFont.lfEscapement = 0;
      LogFont.lfOrientation = 0;
      LogFont.lfOutPrecision = LOBYTE(v18->OutputPrecision);
      LogFont.lfClipPrecision = 0;
      LogFont.lfHeight = v18->Height;
      LogFont.lfWidth = 0;
      LogFont.lfCharSet = LOBYTE(v18->CharSet);
      LogFont.lfQuality = LOBYTE(v18->Quality);
      LogFont.lfWeight = v18->Weight;
      LogFont.lfPitchAndFamily = LOBYTE(v18->PitchAndFamily);
      lstrcpyA(LogFont.lfFaceName, v18->pFacename);
      PrivateStoreBD::ms_hFont = CreateFontIndirectA(&LogFont);
      v26 = -1;
      if ( PrivateStoreBD::ms_hFont )
      {
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkRaw);
        result = 1;
      }
      else
      {
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkRaw);
        result = 0;
      }
    }
    else
    {
      v26 = -1;
      if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      result = 0;
    }
  }
  else
  {
    v26 = -1;
    if ( !v1 || InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      return 0;
    (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// AA2528: using guessed type int PrivateStoreBD__ms_spTempTexture;
// B6E04C: using guessed type char NiSourceTexture__ms_bDestroyAppData;

//----- (00627080) --------------------------------------------------------
void __thiscall ScreenBDMgr::AddPrivateStoreBD(ScreenBDMgr *this, unsigned __int16 kHandle)
{
  ScreenBDMgr *v2; // esi@1
  Char *v3; // ebx@2
  NiPoint3 *v4; // eax@3
  unsigned int v5; // edi@5
  NiTListItem<PrivateStoreBD *> *v6; // eax@6
  void *v7; // eax@10
  int v8; // eax@11
  int v9; // edi@11
  NiAVObject *v10; // edi@15
  STREETBOOTH_SIGNBOARD *v11; // eax@17
  char v12; // cl@18
  PrivateStoreBD *v13; // esi@27
  char *v14; // [sp-4h] [bp-1DCh]@22
  char *v15; // [sp+0h] [bp-1D8h]@22
  unsigned int v16; // [sp+8h] [bp-1D0h]@21
  PrivateStoreBD *pkPrivateStoreBD; // [sp+24h] [bp-1B4h]@4
  char speechText[256]; // [sp+28h] [bp-1B0h]@22
  char nextLineText[128]; // [sp+128h] [bp-B0h]@20
  STREETBOOTH_SIGNBOARD singboardName; // [sp+1A8h] [bp-30h]@17
  unsigned int v21; // [sp+1C8h] [bp-10h]@1
  int v22; // [sp+1D4h] [bp-4h]@10
  int v23; // [sp+1D8h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  if ( *(_DWORD *)&this->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] < (unsigned int)this->m_iMaxPrivateStoreView )
  {
    v3 = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( v3 )
    {
      v4 = (NiPoint3 *)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[6].Deaffect)(v3);
      if ( (double)PrivateStoreBD::ms_fMaxDistance >= World::GetDistanceToCamera(&g_kWorld, v4) )
      {
        pkPrivateStoreBD = ScreenBDMgr::GetPrivateStoreBD(v2, kHandle);
        if ( !pkPrivateStoreBD )
        {
          v5 = ScreenBDMgr::GetNotUsedPrivateStoreBDTextureIndex(v2);
          if ( v5 == -1 )
          {
            v6 = v2->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
            if ( v6 )
              v5 = v6->m_element->m_iTextureIndex;
            else
              v5 = ::v8;
          }
          else
          {
            v2->m_pabUsePrivateStoreBD[v5] = 1;
          }
          v7 = operator new(0x190u);
          pkPrivateStoreBD = (PrivateStoreBD *)v7;
          v22 = 0;
          if ( v7 )
          {
            PrivateStoreBD::PrivateStoreBD(
              (PrivateStoreBD *)v7,
              &v2->m_spPrivateStoreBDTexture.m_pObject->baseclass_0,
              v5);
            v9 = v8;
          }
          else
          {
            v9 = 0;
          }
          *(_WORD *)(v9 + 12) = kHandle;
          v22 = -1;
          pkPrivateStoreBD = (PrivateStoreBD *)v9;
          NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kPrivateStoreBDList,
            (NiD3DXEffectParameter *const *)&pkPrivateStoreBD);
          if ( (unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[1].Affect)(v3) )
            PrivateStoreBD::ms_fLifeTime = 20.0;
          v10 = *(NiAVObject **)(v9 + 36);
          if ( v10 )
          {
            ((void (__stdcall *)(NiAVObject *, signed int))v2->m_pkPrivateStoreBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
              v10,
              1);
            NiAVObject::UpdateProperties(v10);
            NiAVObject::UpdateEffects(v10);
            NiAVObject::Update(&v2->m_pkPrivateStoreBDScene->baseclass_0, 0.0, 1);
          }
        }
        memcpy(&singboardName, &v3->m_stSignboard, 0x1Cu);
        v11 = &singboardName;
        *(_WORD *)&singboardName.signboard[28] = *(_WORD *)&v3->m_stSignboard.signboard[28];
        singboardName.signboard[29] = 0;
        do
        {
          v12 = v11->signboard[0];
          v11 = (STREETBOOTH_SIGNBOARD *)((char *)v11 + 1);
        }
        while ( v12 );
        if ( (signed int)((char *)v11 - &singboardName.signboard[1]) <= 0 )
        {
          if ( v3->m_bIsSell )
            v16 = -170593082;
          else
            v16 = -1444870987;
        }
        else
        {
          nextLineText[0] = 0;
          memset(&nextLineText[1], 0, 0x7Fu);
          sprintf(nextLineText, "\n %s");
          if ( !v3->m_bIsSell )
          {
            TextData::Get(0xA9E104B5u);
            ((void (__thiscall *)(Char *))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v3);
            v15 = TextData::Get(0x4A88AF73u);
            v14 = speechText;
LABEL_27:
            sprintf(v14, v15);
            v13 = pkPrivateStoreBD;
            PrivateStoreBD::SetSpeech(pkPrivateStoreBD, speechText);
            v13->m_fStartTime = Timer::ms_fCurTime;
            return;
          }
          v16 = -170593082;
        }
        TextData::Get(v16);
        ((void (__thiscall *)(Char *))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v3);
        v15 = TextData::Get(0x4A88AF73u);
        v14 = speechText;
        goto LABEL_27;
      }
    }
  }
}
// A7EBF4: using guessed type float PrivateStoreBD__ms_fLifeTime;
// A7EBF8: using guessed type float PrivateStoreBD__ms_fMaxDistance;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00627330) --------------------------------------------------------
void __thiscall ScreenBDMgr::RemovePrivateStoreBD(ScreenBDMgr *this, PrivateStoreBD *pkPrivateStoreBD)
{
  int v2; // edi@0
  PrivateStoreBD *v3; // esi@1
  ScreenBDMgr *v4; // ebx@1
  NiTListItem<PrivateStoreBD *> *v5; // eax@2
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v6; // ecx@2
  int v7; // edx@3
  PrivateStoreBD *v8; // edi@3
  PrivateStoreBD *v9; // edi@9
  int v10; // [sp-4h] [bp-Ch]@2

  v3 = pkPrivateStoreBD;
  v4 = this;
  if ( pkPrivateStoreBD )
  {
    this->m_pabUsePrivateStoreBD[pkPrivateStoreBD->m_iTextureIndex] = 0;
    v5 = this->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v6 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kPrivateStoreBDList;
    v10 = v2;
    if ( v5 )
    {
      while ( 1 )
      {
        v7 = (int)&v5->m_element;
        v8 = (PrivateStoreBD *)v5;
        v5 = v5->m_pkNext;
        if ( v3 == *(PrivateStoreBD **)v7 )
          break;
        if ( !v5 )
          goto LABEL_5;
      }
    }
    else
    {
LABEL_5:
      v8 = 0;
    }
    pkPrivateStoreBD = v8;
    if ( v8 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v6, (void **)&pkPrivateStoreBD);
    ((void (__stdcall *)(PrivateStoreBD **, NiScreenElements *, int))v4->m_pkPrivateStoreBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &pkPrivateStoreBD,
      v3->m_spScreenGeom.m_pObject,
      v10);
    if ( pkPrivateStoreBD )
    {
      v9 = pkPrivateStoreBD;
      if ( !InterlockedDecrement((volatile LONG *)&pkPrivateStoreBD->m_kColorRef) )
      {
        if ( v9 )
          v9->vfptr->__vecDelDtor(v9, 1u);
      }
    }
    ((void (__thiscall *)(PrivateStoreBD *))v3->vfptr->__vecDelDtor)(v3);
  }
}
// 627330: could not find valid save-restore pair for edi

//----- (006273D0) --------------------------------------------------------
void __thiscall ScreenBDMgr::RemoveAllPrivateStoreBD(ScreenBDMgr *this)
{
  signed int v1; // edi@0
  ScreenBDMgr *v2; // ebx@1
  NiTListItem<PrivateStoreBD *> *v3; // ecx@1
  PrivateStoreBD *v4; // esi@4
  void *v5; // eax@5
  int v6; // edx@6
  void *v7; // edi@6
  int v8; // edi@12
  signed int v9; // [sp-8h] [bp-18h]@2
  int v10; // [sp+4h] [bp-Ch]@11
  void *kPos; // [sp+8h] [bp-8h]@9
  NiTListItem<PrivateStoreBD *> *kIter; // [sp+Ch] [bp-4h]@3

  v2 = this;
  v3 = this->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    v9 = v1;
    while ( 1 )
    {
      v4 = v3->m_element;
      kIter = v3->m_pkNext;
      if ( v4 )
      {
        v2->m_pabUsePrivateStoreBD[v4->m_iTextureIndex] = 0;
        v5 = v2->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        if ( v5 )
        {
          while ( 1 )
          {
            v6 = (int)((char *)v5 + 8);
            v7 = v5;
            v5 = *(void **)v5;
            if ( v4 == *(PrivateStoreBD **)v6 )
              break;
            if ( !v5 )
              goto LABEL_8;
          }
        }
        else
        {
LABEL_8:
          v7 = 0;
        }
        kPos = v7;
        if ( v7 )
          NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v2->m_kPrivateStoreBDList,
            &kPos);
        ((void (__stdcall *)(int *, NiScreenElements *, signed int))v2->m_pkPrivateStoreBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
          &v10,
          v4->m_spScreenGeom.m_pObject,
          v9);
        if ( v10 )
        {
          v8 = v10;
          if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
          {
            if ( v8 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
          }
        }
        v9 = 1;
        ((void (__thiscall *)(PrivateStoreBD *))v4->vfptr->__vecDelDtor)(v4);
      }
      if ( !kIter )
        break;
      v3 = kIter;
    }
  }
}
// 6273D0: could not find valid save-restore pair for edi

//----- (006274A0) --------------------------------------------------------
void __thiscall ScreenBDMgr::UpdatePrivateStoreBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera)
{
  ScreenBDMgr *v3; // ebx@1
  NiTListItem<PrivateStoreBD *> *v4; // edi@1
  PrivateStoreBD *v5; // esi@2
  Char *v6; // eax@4
  NiTListItem<PrivateStoreBD *> *v7; // esi@8
  PrivateStoreBD **v8; // eax@9

  v3 = this;
  v4 = this->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4->m_element;
    v4 = v4->m_pkNext;
    if ( v5 )
    {
      if ( !PrivateStoreBD::IsAlive(v5, fTime)
        || (v6 = CharMgr::GetChar(&g_kCharMgr, v5->m_kCharHandle)) == 0
        || v6->m_byMode != 5 )
        ScreenBDMgr::RemovePrivateStoreBD(v3, v5);
    }
  }
  v7 = v3->m_kPrivateStoreBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v7 )
  {
    v8 = &v7->m_element;
    v7 = v7->m_pkNext;
    PrivateStoreBD::Update(*v8, fTime, pkWorldCamera, v3->m_spScreenSpaceCamera.m_pObject);
  }
  NiAVObject::Update(&v3->m_pkPrivateStoreBDScene->baseclass_0, fTime, 1);
}

//----- (00627550) --------------------------------------------------------
void __thiscall ScreenBDMgr::TerminatePrivateStoreBD(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // edi@1
  int v2; // esi@2
  NiSourceTexture *v3; // esi@6

  v1 = this;
  ScreenBDMgr::RemoveAllPrivateStoreBD(this);
  if ( PrivateStoreBD::ms_spTempTexture )
  {
    v2 = PrivateStoreBD::ms_spTempTexture;
    if ( !InterlockedDecrement((volatile LONG *)(PrivateStoreBD::ms_spTempTexture + 4)) && v2 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    PrivateStoreBD::ms_spTempTexture = 0;
  }
  v3 = v1->m_spPrivateStoreBDTexture.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spPrivateStoreBDTexture.m_pObject = 0;
  }
  operator delete__(v1->m_pabUsePrivateStoreBD);
  v1->m_pabUsePrivateStoreBD = 0;
  DeleteObject(PrivateStoreBD::ms_hEraseBrush);
  DeleteObject(PrivateStoreBD::ms_hFont);
}
// AA2528: using guessed type int PrivateStoreBD__ms_spTempTexture;

//----- (006275F0) --------------------------------------------------------
NiPointer<NiD3DDefaultShader> *__thiscall NiPointer<PopupMenuWin>::operator_(NiPointer<NiD3DDefaultShader> *this, NiD3DDefaultShader *pObject)
{
  NiPointer<NiD3DDefaultShader> *v2; // edi@1
  NiD3DDefaultShader *v3; // esi@1

  v2 = this;
  v3 = this->m_pObject;
  if ( this->m_pObject != pObject )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_pObject = pObject;
    if ( pObject )
      InterlockedIncrement((volatile LONG *)&pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  return v2;
}

//----- (00627640) --------------------------------------------------------
NiD3DShaderInterface *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *this, void **kPos)
{
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v2; // esi@1
  void *v3; // eax@1
  NiTListItem<NiD3DShaderInterface *> *v4; // ecx@2
  NiTListItem<NiD3DShaderInterface *> *v5; // eax@2
  NiD3DShaderInterface *v6; // edi@3
  NiD3DShaderInterface *result; // eax@3
  void (__thiscall *v8)(NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *, NiTListItem<NiD3DShaderInterface *> *); // eax@4
  NiD3DShaderInterface *v9; // edi@4
  NiTListItem<NiD3DShaderInterface *> *v10; // ecx@6
  NiTListItem<NiD3DShaderInterface *> *v11; // eax@6
  NiD3DShaderInterface *v12; // edi@7
  void (__thiscall *v13)(NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *, NiTListItem<NiD3DShaderInterface *> *); // eax@8
  NiD3DShaderInterface *v14; // edi@8
  int v15; // edi@9
  void *v16; // edx@9
  NiD3DShaderInterface *v17; // edi@13

  v2 = this;
  v3 = *kPos;
  if ( *kPos == this->baseclass_0.m_pkHead )
  {
    *kPos = *(void **)v3;
    v4 = this->baseclass_0.m_pkHead;
    v5 = v4->m_pkNext;
    v2->baseclass_0.m_pkHead = v4->m_pkNext;
    if ( v5 )
    {
      v5->m_pkPrev = 0;
      v6 = v4->m_element;
      v2->baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v2, v4);
      --*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      result = v6;
    }
    else
    {
      v8 = v2->baseclass_0.vfptr->DeleteItem;
      v2->baseclass_0.m_pkTail = 0;
      v9 = v4->m_element;
      v8(&v2->baseclass_0, v4);
      --*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      result = v9;
    }
  }
  else
  {
    if ( v3 == this->baseclass_0.m_pkTail )
    {
      *kPos = 0;
      v10 = this->baseclass_0.m_pkTail;
      v11 = v10->m_pkPrev;
      v2->baseclass_0.m_pkTail = v11;
      if ( v11 )
      {
        v11->m_pkNext = 0;
        v12 = v10->m_element;
        v2->baseclass_0.vfptr->DeleteItem(
          (NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v2,
          v10);
        --*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        result = v12;
      }
      else
      {
        v13 = v2->baseclass_0.vfptr->DeleteItem;
        v2->baseclass_0.m_pkHead = 0;
        v14 = v10->m_element;
        v13(&v2->baseclass_0, v10);
        --*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        result = v14;
      }
    }
    else
    {
      v15 = *((_DWORD *)v3 + 1);
      v16 = *(void **)v3;
      *kPos = *(void **)v3;
      if ( v15 )
        *(_DWORD *)v15 = v16;
      if ( v16 )
        *((_DWORD *)v16 + 1) = v15;
      v17 = (NiD3DShaderInterface *)*((_DWORD *)v3 + 2);
      this->baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)this,
        (NiTListItem<NiD3DShaderInterface *> *)v3);
      --*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      result = v17;
    }
  }
  return result;
}

//----- (00627720) --------------------------------------------------------
bool __thiscall ScreenBDMgr::InitSpeechBD(ScreenBDMgr *this)
{
  int v1; // esi@1
  void *v2; // eax@1
  int v3; // eax@2
  NiSourceTexture *v4; // edi@6
  int v5; // eax@6
  int v6; // ebx@8
  bool result; // al@17
  void *v8; // eax@18
  int v9; // eax@19
  int v10; // edi@19
  NiSourceTexture *v11; // eax@27
  NiSourceTexture *v12; // edi@27
  NiSourceTexture *v13; // ebx@27
  void *v14; // eax@39
  unsigned int v15; // ST0C_4@39
  Font::FontDefine *v16; // eax@43
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-68h]@1
  void *v18; // [sp+Ch] [bp-5Ch]@1
  ScreenBDMgr *v19; // [sp+10h] [bp-58h]@1
  NiPointer<NiPixelData> pkRaw; // [sp+14h] [bp-54h]@1
  char bOldbDestroyAppData; // [sp+1Bh] [bp-4Dh]@1
  tagLOGFONTA LogFont; // [sp+1Ch] [bp-4Ch]@43
  unsigned int v23; // [sp+58h] [bp-10h]@1
  int v24; // [sp+64h] [bp-4h]@1
  int v25; // [sp+68h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v1 = 0;
  v19 = this;
  kPrefs.m_eAlphaFmt = 3;
  kPrefs.m_ePixelLayout = 2;
  kPrefs.m_eMipMapped = 0;
  bOldbDestroyAppData = NiSourceTexture::ms_bDestroyAppData;
  NiSourceTexture::ms_bDestroyAppData = 1;
  pkRaw.m_pObject = 0;
  v24 = 0;
  v2 = operator new(0x70u);
  v18 = v2;
  LOBYTE(v24) = 1;
  if ( v2 )
    NiPixelData::NiPixelData((NiPixelData *)v2, 0x100u, 0x80u, &NiPixelFormat::RGB24, 1u, 1u);
  else
    v3 = 0;
  LOBYTE(v24) = 0;
  if ( v3 )
  {
    v1 = v3;
    pkRaw.m_pObject = (NiPixelData *)v3;
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v4 = NiSourceTexture::Create((NiPixelData *)v1, &kPrefs);
  v5 = SpeechBD::ms_spTempTexture;
  if ( (NiSourceTexture *)SpeechBD::ms_spTempTexture != v4 )
  {
    if ( SpeechBD::ms_spTempTexture )
    {
      v6 = SpeechBD::ms_spTempTexture;
      if ( !InterlockedDecrement((volatile LONG *)(SpeechBD::ms_spTempTexture + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
    }
    SpeechBD::ms_spTempTexture = (int)v4;
    if ( !v4 )
      goto LABEL_14;
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v5 = SpeechBD::ms_spTempTexture;
  }
  if ( !v5 )
  {
LABEL_14:
    v24 = -1;
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    }
    return 0;
  }
  v8 = operator new(0x70u);
  v18 = v8;
  LOBYTE(v24) = 2;
  if ( v8 )
  {
    NiPixelData::NiPixelData((NiPixelData *)v8, 0x400u, 0x200u, &NiPixelFormat::RGBA32, 1u, 1u);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  LOBYTE(v24) = 0;
  if ( v1 != v10 )
  {
    if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    v1 = v10;
    pkRaw.m_pObject = (NiPixelData *)v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)(v10 + 4));
  }
  v11 = NiSourceTexture::Create((NiPixelData *)v1, &kPrefs);
  v12 = v19->m_spSpeechBDTexture.m_pObject;
  v13 = v11;
  if ( v12 != v11 )
  {
    if ( v12
      && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    v19->m_spSpeechBDTexture.m_pObject = v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v19->m_spSpeechBDTexture.m_pObject )
  {
    NiSourceTexture::ms_bDestroyAppData = bOldbDestroyAppData;
    v19->m_iTotalSpeechBDTextureIndex = 36;
    v14 = operator new__(0x24u);
    v15 = v19->m_iTotalSpeechBDTextureIndex;
    v19->m_pabUseSpeechBD = (bool *)v14;
    memset((char *)v14, 0, v15);
    SpeechBD::ms_hEraseBrush = CreateSolidBrush(0xFF00FFu);
    if ( SpeechBD::ms_hEraseBrush )
    {
      v16 = Font::GetFontDefine(0);
      *(_WORD *)&LogFont.lfUnderline = 0;
      LogFont.lfItalic = 0;
      LogFont.lfEscapement = 0;
      LogFont.lfOrientation = 0;
      LogFont.lfOutPrecision = LOBYTE(v16->OutputPrecision);
      LogFont.lfClipPrecision = 0;
      LogFont.lfHeight = v16->Height;
      LogFont.lfWidth = 0;
      LogFont.lfCharSet = LOBYTE(v16->CharSet);
      LogFont.lfQuality = 3;
      LogFont.lfWeight = v16->Weight;
      LogFont.lfPitchAndFamily = LOBYTE(v16->PitchAndFamily);
      lstrcpyA(LogFont.lfFaceName, v16->pFacename);
      SpeechBD::ms_hFont = CreateFontIndirectA(&LogFont);
      v24 = -1;
      if ( SpeechBD::ms_hFont )
      {
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkRaw);
        result = 1;
      }
      else
      {
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkRaw);
        result = 0;
      }
    }
    else
    {
      v24 = -1;
      if ( !v1 || InterlockedDecrement((volatile LONG *)(v1 + 4)) )
        return 0;
      (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      result = 0;
    }
  }
  else
  {
    v24 = -1;
    if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// AA26F0: using guessed type int SpeechBD__ms_spTempTexture;
// B6E04C: using guessed type char NiSourceTexture__ms_bDestroyAppData;

//----- (00627A40) --------------------------------------------------------
void __thiscall ScreenBDMgr::EndSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle)
{
  NiTListItem<SpeechBD *> *v2; // eax@1
  SpeechBD *v3; // ecx@2

  v2 = this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3->m_kCharHandle == kHandle )
        break;
      if ( !v2 )
        return;
    }
    v3->m_fLifeTime = 0.0;
  }
}

//----- (00627A70) --------------------------------------------------------
void __thiscall ScreenBDMgr::AddSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle, char *pcSpeech)
{
  ScreenBDMgr *v3; // ebx@1
  Char *v4; // eax@1
  int v5; // eax@2
  NiTListItem<SpeechBD *> *v6; // eax@3
  SpeechBD *v7; // ecx@4
  float v8; // edi@7
  int v9; // ecx@8
  int v10; // eax@8
  bool *v11; // edx@9
  int v12; // esi@13
  NiTListItem<SpeechBD *> *v13; // eax@14
  void *v14; // eax@18
  float v15; // eax@19
  float v16; // esi@19
  NiAVObject *v17; // esi@23
  Char *pkChar; // [sp+20h] [bp-1Ch]@1
  float pkSpeechBD; // [sp+24h] [bp-18h]@2
  float v20; // [sp+28h] [bp-14h]@2
  float v21; // [sp+2Ch] [bp-10h]@2
  int v22; // [sp+38h] [bp-4h]@18

  v3 = this;
  v4 = CharMgr::GetChar(&g_kCharMgr, kHandle);
  pkChar = v4;
  if ( v4 )
  {
    v5 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
    v20 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - *(float *)v5;
    v21 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v5 + 4);
    pkSpeechBD = pkCamera->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v5 + 8);
    pkSpeechBD = v21 * v21 + v20 * v20 + pkSpeechBD * pkSpeechBD;
    pkSpeechBD = sqrt(pkSpeechBD);
    if ( SpeechBD::ms_fMaxDistance >= (double)pkSpeechBD )
    {
      v6 = v3->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v6 )
      {
        while ( 1 )
        {
          v7 = v6->m_element;
          v6 = v6->m_pkNext;
          if ( v7->m_kCharHandle == kHandle )
            break;
          if ( !v6 )
            goto LABEL_6;
        }
      }
      else
      {
LABEL_6:
        v7 = 0;
      }
      LODWORD(v8) = v7;
      if ( !v7 )
      {
        v9 = v3->m_iTotalSpeechBDTextureIndex;
        v10 = 0;
        if ( v9 <= 0 )
          goto LABEL_14;
        v11 = v3->m_pabUseSpeechBD;
        while ( v11[v10] )
        {
          ++v10;
          if ( v10 >= v9 )
            goto LABEL_14;
        }
        v12 = v10;
        if ( v10 != -1 )
        {
          v11[v10] = 1;
        }
        else
        {
LABEL_14:
          v13 = v3->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          if ( v13 )
            v12 = v13->m_element->m_iTextureIndex;
          else
            v12 = ::v4;
        }
        v14 = operator new(0x88u);
        LODWORD(pkSpeechBD) = v14;
        v22 = 0;
        if ( v14 )
        {
          SpeechBD::SpeechBD((SpeechBD *)v14, &v3->m_spSpeechBDTexture.m_pObject->baseclass_0, v12);
          v16 = v15;
        }
        else
        {
          LODWORD(v16) = 0;
        }
        *(_WORD *)(LODWORD(v16) + 8) = kHandle;
        v8 = v16;
        v22 = -1;
        pkSpeechBD = v16;
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kSpeechBDList,
          (NiD3DXEffectParameter *const *)&pkSpeechBD);
        if ( (unsigned __int8)((int (*)(void))pkChar->baseclass_0.vfptr[1].Affect)() )
          *(float *)(LODWORD(v16) + 24) = 20.0;
        v17 = *(NiAVObject **)(LODWORD(v16) + 36);
        if ( v17 )
        {
          ((void (__stdcall *)(NiAVObject *, signed int))v3->m_pkSpeechBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v17,
            1);
          NiAVObject::UpdateProperties(v17);
          NiAVObject::UpdateEffects(v17);
          NiAVObject::Update(&v3->m_pkSpeechBDScene->baseclass_0, 0.0, 1);
        }
      }
      SpeechBD::SetSpeech(LODWORD(v8), pcSpeech);
      *(float *)(LODWORD(v8) + 20) = Timer::ms_fCurTime;
    }
  }
}
// A7F1F0: using guessed type float SpeechBD__ms_fMaxDistance;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00627C50) --------------------------------------------------------
void __thiscall ScreenBDMgr::AddSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle, char *pcSpeech, float fLifeTime)
{
  ScreenBDMgr *v4; // esi@1
  NiTListItem<SpeechBD *> *v5; // eax@1
  SpeechBD *v6; // ecx@2

  v4 = this;
  ScreenBDMgr::AddSpeechBD(this, kHandle, pcSpeech);
  v5 = v4->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v5 )
  {
    while ( 1 )
    {
      v6 = v5->m_element;
      v5 = v5->m_pkNext;
      if ( v6->m_kCharHandle == kHandle )
        break;
      if ( !v5 )
        return;
    }
    v6->m_fLifeTime = fLifeTime;
  }
}

//----- (00627CA0) --------------------------------------------------------
void __thiscall ScreenBDMgr::AddSpeechBD(ScreenBDMgr *this, unsigned __int16 kHandle, char *pcSpeech, char kColorID, char kOutLineColorID)
{
  ScreenBDMgr *v5; // ebx@1
  Char *v6; // eax@1
  int v7; // eax@2
  NiTListItem<SpeechBD *> *v8; // eax@3
  SpeechBD *v9; // ecx@4
  float v10; // edi@7
  int v11; // ecx@8
  int v12; // eax@8
  bool *v13; // edx@9
  int v14; // esi@13
  NiTListItem<SpeechBD *> *v15; // eax@14
  void *v16; // eax@18
  float v17; // eax@19
  float v18; // esi@19
  NiAVObject *v19; // esi@23
  Char *pkChar; // [sp+20h] [bp-1Ch]@1
  float pkSpeechBD; // [sp+24h] [bp-18h]@2
  float v22; // [sp+28h] [bp-14h]@2
  float v23; // [sp+2Ch] [bp-10h]@2
  int v24; // [sp+38h] [bp-4h]@18

  v5 = this;
  v6 = CharMgr::GetChar(&g_kCharMgr, kHandle);
  pkChar = v6;
  if ( v6 )
  {
    v7 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[6].Deaffect)(v6);
    v22 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - *(float *)v7;
    v23 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v7 + 4);
    pkSpeechBD = pkCamera->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v7 + 8);
    pkSpeechBD = v23 * v23 + v22 * v22 + pkSpeechBD * pkSpeechBD;
    pkSpeechBD = sqrt(pkSpeechBD);
    if ( SpeechBD::ms_fMaxDistance >= (double)pkSpeechBD )
    {
      v8 = v5->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v8 )
      {
        while ( 1 )
        {
          v9 = v8->m_element;
          v8 = v8->m_pkNext;
          if ( v9->m_kCharHandle == kHandle )
            break;
          if ( !v8 )
            goto LABEL_6;
        }
      }
      else
      {
LABEL_6:
        v9 = 0;
      }
      LODWORD(v10) = v9;
      if ( !v9 )
      {
        v11 = v5->m_iTotalSpeechBDTextureIndex;
        v12 = 0;
        if ( v11 <= 0 )
          goto LABEL_14;
        v13 = v5->m_pabUseSpeechBD;
        while ( v13[v12] )
        {
          ++v12;
          if ( v12 >= v11 )
            goto LABEL_14;
        }
        v14 = v12;
        if ( v12 != -1 )
        {
          v13[v12] = 1;
        }
        else
        {
LABEL_14:
          v15 = v5->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          if ( v15 )
            v14 = v15->m_element->m_iTextureIndex;
          else
            v14 = v4;
        }
        v16 = operator new(0x88u);
        LODWORD(pkSpeechBD) = v16;
        v24 = 0;
        if ( v16 )
        {
          SpeechBD::SpeechBD((SpeechBD *)v16, &v5->m_spSpeechBDTexture.m_pObject->baseclass_0, v14);
          v18 = v17;
        }
        else
        {
          LODWORD(v18) = 0;
        }
        *(_WORD *)(LODWORD(v18) + 8) = kHandle;
        v10 = v18;
        v24 = -1;
        pkSpeechBD = v18;
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v5->m_kSpeechBDList,
          (NiD3DXEffectParameter *const *)&pkSpeechBD);
        if ( (unsigned __int8)((int (*)(void))pkChar->baseclass_0.vfptr[1].Affect)() )
          *(float *)(LODWORD(v18) + 24) = 20.0;
        v19 = *(NiAVObject **)(LODWORD(v18) + 36);
        if ( v19 )
        {
          ((void (__stdcall *)(NiAVObject *, signed int))v5->m_pkSpeechBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v19,
            1);
          NiAVObject::UpdateProperties(v19);
          NiAVObject::UpdateEffects(v19);
          NiAVObject::Update(&v5->m_pkSpeechBDScene->baseclass_0, 0.0, 1);
        }
      }
      SpeechBD::SetTextColorID(LODWORD(v10), kColorID);
      SpeechBD::SetOutLineColorID(LODWORD(v10), kOutLineColorID);
      SpeechBD::SetSpeech(LODWORD(v10), pcSpeech);
      *(float *)(LODWORD(v10) + 20) = Timer::ms_fCurTime;
    }
  }
}
// A7F1F0: using guessed type float SpeechBD__ms_fMaxDistance;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00627E90) --------------------------------------------------------
void __thiscall ScreenBDMgr::RemoveSpeechBD(ScreenBDMgr *this, SpeechBD *pkSpeechBD)
{
  SpeechBD *v2; // esi@1
  ScreenBDMgr *v3; // edi@1
  NiTListItem<SpeechBD *> *v4; // eax@1
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v5; // ecx@1
  int v6; // edx@2
  SpeechBD *v7; // ebx@2
  SpeechBD *v8; // edi@8

  v2 = pkSpeechBD;
  v3 = this;
  this->m_pabUseSpeechBD[pkSpeechBD->m_iTextureIndex] = 0;
  v4 = this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v5 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kSpeechBDList;
  if ( v4 )
  {
    while ( 1 )
    {
      v6 = (int)&v4->m_element;
      v7 = (SpeechBD *)v4;
      v4 = v4->m_pkNext;
      if ( v2 == *(SpeechBD **)v6 )
        break;
      if ( !v4 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v7 = 0;
  }
  pkSpeechBD = v7;
  if ( v7 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v5, (void **)&pkSpeechBD);
  ((void (__stdcall *)(_DWORD, _DWORD))v3->m_pkSpeechBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
    &pkSpeechBD,
    v2->m_spScreenGeom.m_pObject);
  if ( pkSpeechBD )
  {
    v8 = pkSpeechBD;
    if ( !InterlockedDecrement((volatile LONG *)&pkSpeechBD->m_iTextureIndex) )
    {
      if ( v8 )
        v8->vfptr->__vecDelDtor(v8, 1u);
    }
  }
  v2->vfptr->__vecDelDtor(v2, 1u);
}

//----- (00627F20) --------------------------------------------------------
void __thiscall ScreenBDMgr::RemoveAllSpeechBD(ScreenBDMgr *this)
{
  signed int v1; // esi@0
  ScreenBDMgr *v2; // ebx@1
  NiTListItem<SpeechBD *> *v3; // edi@1
  SpeechBD *v4; // esi@3
  void *v5; // eax@3
  int v6; // ecx@4
  void *v7; // edx@4
  int v8; // ebx@10
  signed int v9; // [sp-4h] [bp-18h]@2
  int v10; // [sp+8h] [bp-Ch]@9
  void *kPos; // [sp+Ch] [bp-8h]@7
  ScreenBDMgr *v12; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v12 = this;
  if ( v3 )
  {
    v9 = v1;
    do
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      v2->m_pabUseSpeechBD[v4->m_iTextureIndex] = 0;
      v5 = v2->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v5 )
      {
        while ( 1 )
        {
          v6 = (int)((char *)v5 + 8);
          v7 = v5;
          v5 = *(void **)v5;
          if ( v4 == *(SpeechBD **)v6 )
            break;
          if ( !v5 )
            goto LABEL_6;
        }
      }
      else
      {
LABEL_6:
        v7 = 0;
      }
      kPos = v7;
      if ( v7 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v2->m_kSpeechBDList,
          &kPos);
      ((void (__stdcall *)(int *, NiScreenElements *, signed int))v2->m_pkSpeechBDScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v10,
        v4->m_spScreenGeom.m_pObject,
        v9);
      if ( v10 )
      {
        v8 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v8 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
        }
        v2 = v12;
      }
      v9 = 1;
      ((void (__thiscall *)(SpeechBD *))v4->vfptr->__vecDelDtor)(v4);
    }
    while ( v3 );
  }
}
// 627F20: could not find valid save-restore pair for esi

//----- (00627FE0) --------------------------------------------------------
void __thiscall ScreenBDMgr::UpdateSpeechBD(ScreenBDMgr *this, float fTime, NiCamera *pkWorldCamera)
{
  ScreenBDMgr *v3; // edi@1
  NiTListItem<SpeechBD *> *v4; // esi@1
  SpeechBD *v5; // ebx@2
  NiTListItem<SpeechBD *> *v6; // esi@5
  SpeechBD **v7; // eax@6
  NiNode *v8; // edi@7

  v3 = this;
  v4 = this->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4->m_element;
    v4 = v4->m_pkNext;
    if ( !SpeechBD::IsAlive(v5, fTime) )
      ScreenBDMgr::RemoveSpeechBD(v3, v5);
  }
  v6 = v3->m_kSpeechBDList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v6 )
  {
    v7 = &v6->m_element;
    v6 = v6->m_pkNext;
    SpeechBD::Update(*v7, fTime, pkWorldCamera, v3->m_spScreenSpaceCamera.m_pObject);
  }
  NiAVObject::Update(&v3->m_pkSpeechBDScene->baseclass_0, fTime, 1);
  v8 = v3->m_pkSpeechBDScene;
  if ( byte_B5BB26 )
    v8->baseclass_0.m_uFlags &= 0xFFFEu;
  else
    v8->baseclass_0.m_uFlags |= 1u;
}
// B5BB26: using guessed type char byte_B5BB26;

//----- (00628090) --------------------------------------------------------
void __thiscall ScreenBDMgr::TerminateSpeechBD(ScreenBDMgr *this)
{
  ScreenBDMgr *v1; // edi@1
  int v2; // esi@2
  NiSourceTexture *v3; // esi@6

  v1 = this;
  ScreenBDMgr::RemoveAllSpeechBD(this);
  if ( SpeechBD::ms_spTempTexture )
  {
    v2 = SpeechBD::ms_spTempTexture;
    if ( !InterlockedDecrement((volatile LONG *)(SpeechBD::ms_spTempTexture + 4)) && v2 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
    SpeechBD::ms_spTempTexture = 0;
  }
  v3 = v1->m_spSpeechBDTexture.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spSpeechBDTexture.m_pObject = 0;
  }
  operator delete__(v1->m_pabUseSpeechBD);
  v1->m_pabUseSpeechBD = 0;
  DeleteObject(SpeechBD::ms_hEraseBrush);
  DeleteObject(SpeechBD::ms_hFont);
}
// AA26F0: using guessed type int SpeechBD__ms_spTempTexture;

//----- (00628130) --------------------------------------------------------
void __thiscall ScreenBoardTexture::EndDraw(ScreenBoardTexture *this)
{
  ScreenBoardTexture *v1; // esi@1
  HDC__ *v2; // eax@2
  HDC__ *v3; // eax@7
  IDirect3DSurface9 *v4; // eax@10

  v1 = this;
  if ( this->m_lpSurSrc )
  {
    v2 = this->m_hDC;
    if ( v2 )
    {
      SelectObject(v2, this->m_hFont);
      ((void (__stdcall *)(_DWORD, _DWORD))v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef)(
        v1->m_lpSurSrc,
        v1->m_hDC);
      v1->m_hDC = 0;
    }
    v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_lpSurSrc);
  }
  if ( v1->m_IsRenderBackGround == 1 && v1->m_lpSurSrcShadow )
  {
    v3 = v1->m_hShadowDC;
    if ( v3 )
    {
      SelectObject(v3, v1->m_hFont);
      ((void (__stdcall *)(_DWORD, _DWORD))v1->m_lpSurSrcShadow->baseclass_0.baseclass_0.lpVtbl[5].AddRef)(
        v1->m_lpSurSrcShadow,
        v1->m_hShadowDC);
      v1->m_hShadowDC = 0;
    }
    v1->m_lpSurSrcShadow->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_lpSurSrcShadow);
  }
  v4 = v1->m_lpSurDest;
  if ( v4 )
    v4->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_lpSurDest);
  v1->m_lpSurDest = 0;
  v1->m_lpSurSrc = 0;
}

//----- (006281C0) --------------------------------------------------------
void __thiscall ScreenBoardTexture::DrawTextA(ScreenBoardTexture *this)
{
  int v1; // ebx@0
  const char *v2; // edi@0
  ScreenBoardTexture *v3; // esi@1
  bool v4; // zf@2
  int v5; // ST10_4@3
  IDirect3DSurface9 *v6; // eax@4
  IDirect3DSurface9 *v7; // eax@8
  void *v8; // edx@11
  void *v9; // edi@11
  int v10; // eax@11
  int v11; // ecx@11
  bool v12; // sf@13
  int v13; // ebx@14
  int v14; // ecx@15
  int v15; // eax@20
  _D3DLOCKED_RECT kLockRectShadow; // [sp+4h] [bp-5Ch]@9
  _D3DLOCKED_RECT kLockRectSrc; // [sp+Ch] [bp-54h]@6
  _D3DLOCKED_RECT kLockRectDest; // [sp+14h] [bp-4Ch]@10
  int Green; // [sp+1Ch] [bp-44h]@13
  int Blue; // [sp+20h] [bp-40h]@13
  int uiDestSkipBytes; // [sp+24h] [bp-3Ch]@11
  int Red; // [sp+28h] [bp-38h]@13
  int uiShadowSrcSkipBytes; // [sp+2Ch] [bp-34h]@12
  int uiSrcSkipBytes; // [sp+30h] [bp-30h]@11
  void *pShadowSrcBytes; // [sp+34h] [bp-2Ch]@12
  int y; // [sp+38h] [bp-28h]@3
  tagRECT rc; // [sp+3Ch] [bp-24h]@10
  tagRECT kRect; // [sp+4Ch] [bp-14h]@2
  unsigned int v29; // [sp+5Ch] [bp-4h]@1
  int v30; // [sp+60h] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v3 = this;
  if ( this->m_lpSurSrc )
  {
    SetRect(&kRect, 0, 0, this->m_TextSize.cx, this->m_TextSize.cy);
    FillRect(v3->m_hDC, &kRect, v3->m_hEraseBrush);
    SetBkMode(v3->m_hDC, 1);
    SetTextColor(v3->m_hDC, 0xFFFFFFu);
    TextOutA(v3->m_hDC, v3->m_SpaceSize.cx / 2, v3->m_SpaceSize.cy / 2, v3->m_pkText, v3->m_dwMaxLength);
    SelectObject(v3->m_hDC, v3->m_hFont);
    ((void (__stdcall *)(IDirect3DSurface9 *, HDC__ *))v3->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef)(
      v3->m_lpSurSrc,
      v3->m_hDC);
    v4 = v3->m_IsRenderBackGround == 1;
    v3->m_hDC = 0;
    if ( v4 )
    {
      FillRect(v3->m_hShadowDC, &kRect, v3->m_hEraseBrush);
      SetBkMode(v3->m_hShadowDC, 1);
      SetTextColor(v3->m_hShadowDC, 0xFFFFFFu);
      v5 = v3->m_dwMaxLength;
      y = v3->m_SpaceSize.cy / 2;
      y = v3->m_SpaceSize.cx / 2;
      TextOutA(v3->m_hShadowDC, (signed int)((double)y + v3->m_ShadowScrMovePos.x), v5, v2, v1);
      SelectObject(v3->m_hShadowDC, v3->m_hFont);
      ((void (__cdecl *)(IDirect3DSurface9 *, HDC__ *))v3->m_lpSurSrcShadow->baseclass_0.baseclass_0.lpVtbl[5].AddRef)(
        v3->m_lpSurSrcShadow,
        v3->m_hShadowDC);
      v3->m_hShadowDC = 0;
    }
    v6 = v3->m_lpSurSrc;
    if ( v6 )
    {
      if ( v3->m_lpSurDest )
      {
        if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v6->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
                v6,
                &kLockRectSrc,
                &kRect,
                0) )
        {
          if ( v3->m_IsRenderBackGround != 1
            || (v7 = v3->m_lpSurSrcShadow) != 0
            && !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v7->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
                  v7,
                  &kLockRectShadow,
                  &kRect,
                  0) )
          {
            SetRect(
              &rc,
              v3->m_DestCorrectionPos.cx,
              v3->m_DestCorrectionPos.cy,
              v3->m_DestCorrectionPos.cx + v3->m_TextSize.cx,
              v3->m_DestCorrectionPos.cy + v3->m_TextSize.cy);
            if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v3->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
                    v3->m_lpSurDest,
                    &kLockRectDest,
                    &rc,
                    0) )
            {
              v8 = kLockRectDest.pBits;
              v9 = kLockRectSrc.pBits;
              v10 = 4 * v3->m_TextSize.cx;
              v11 = kLockRectDest.Pitch - v10;
              v4 = v3->m_IsRenderBackGround == 0;
              uiDestSkipBytes = kLockRectDest.Pitch - v10;
              uiSrcSkipBytes = kLockRectSrc.Pitch - v10;
              if ( !v4 )
              {
                pShadowSrcBytes = kLockRectShadow.pBits;
                uiShadowSrcSkipBytes = kLockRectShadow.Pitch - v10;
              }
              v4 = v3->m_TextSize.cy == 0;
              v12 = v3->m_TextSize.cy < 0;
              Red = BYTE2(v3->m_kColorRef);
              Green = BYTE1(v3->m_kColorRef);
              Blue = LOBYTE(v3->m_kColorRef);
              y = 0;
              if ( v12 | v4 )
                goto LABEL_26;
              while ( 1 )
              {
                v13 = 0;
                if ( v3->m_TextSize.cx <= 0 )
                  goto LABEL_25;
                do
                {
                  v14 = 0;
                  if ( v3->m_IsRenderBackGround == 1 )
                    v14 = *(_BYTE *)pShadowSrcBytes;
                  if ( *(_BYTE *)v9 )
                  {
                    v15 = Red | ((Green | ((Blue | (*(_BYTE *)v9 << 8)) << 8)) << 8);
                  }
                  else
                  {
                    if ( v14 )
                    {
                      *(_DWORD *)v8 = (unsigned int)loc_585858 | (v14 << 24);
                      goto LABEL_23;
                    }
                    v15 = v3->m_kChangeDescColor;
                  }
                  *(_DWORD *)v8 = v15;
LABEL_23:
                  pShadowSrcBytes = (char *)pShadowSrcBytes + 4;
                  ++v13;
                  v8 = (char *)v8 + 4;
                  v9 = (char *)v9 + 4;
                }
                while ( v13 < v3->m_TextSize.cx );
                v11 = uiDestSkipBytes;
LABEL_25:
                pShadowSrcBytes = (char *)pShadowSrcBytes + uiShadowSrcSkipBytes;
                v9 = (char *)v9 + uiSrcSkipBytes;
                v8 = (char *)v8 + v11;
                ++y;
                if ( y >= v3->m_TextSize.cy )
                {
LABEL_26:
                  v3->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v3->m_lpSurDest);
                  v3->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v3->m_lpSurSrc);
                  if ( v3->m_IsRenderBackGround == 1 )
                    v3->m_lpSurSrcShadow->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v3->m_lpSurSrcShadow);
                  return;
                }
              }
            }
          }
        }
      }
    }
  }
}
// 6281C0: could not find valid save-restore pair for ebx
// 6281C0: could not find valid save-restore pair for edi
// 585858: using guessed type int __thiscall loc_585858(PgWin *pkWin, int wParam, int lParam);
// A85C00: using guessed type int __security_cookie;

//----- (006284A0) --------------------------------------------------------
tagSIZE __thiscall ScreenBoardTexture::GetMaxSize(ScreenBoardTexture *this)
{
  tagSIZE result; // qax@1
  int v2; // ecx@1
  int v3; // [sp+8h] [bp+8h]@0

  result.cy = this->m_MaxSize.cx;
  result.cx = v3;
  v2 = this->m_MaxSize.cy;
  *(_DWORD *)v3 = result.cy;
  *(_DWORD *)(v3 + 4) = v2;
  return result;
}

//----- (006284C0) --------------------------------------------------------
tagSIZE __thiscall ScreenBoardTexture::GetSpaceSize(ScreenBoardTexture *this)
{
  tagSIZE result; // qax@1
  int v2; // ecx@1
  int v3; // [sp+8h] [bp+8h]@0

  result.cy = this->m_SpaceSize.cx;
  result.cx = v3;
  v2 = this->m_SpaceSize.cy;
  *(_DWORD *)v3 = result.cy;
  *(_DWORD *)(v3 + 4) = v2;
  return result;
}

//----- (006284E0) --------------------------------------------------------
tagSIZE __thiscall ScreenBoardTexture::GetDescSize(ScreenBoardTexture *this)
{
  tagSIZE result; // qax@1
  int v2; // ecx@1
  int v3; // [sp+8h] [bp+8h]@0

  result.cx = v3;
  *(_DWORD *)v3 = this->m_MaxSize.cx;
  *(_DWORD *)(v3 + 4) = this->m_MaxSize.cy;
  result.cy = this->m_SpaceSize.cx;
  v2 = this->m_SpaceSize.cy;
  *(_DWORD *)result.cx += result.cy;
  *(_DWORD *)(result.cx + 4) += v2;
  return result;
}

//----- (00628500) --------------------------------------------------------
int __thiscall ScreenBoardTexture::DescInfo::GetIndex(ScreenBoardTexture::DescInfo *this)
{
  return this->m_nIndex;
}

//----- (00628510) --------------------------------------------------------
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned long> *__thiscall ScreenBoardTexture::DescInfo::GetIndexKey(ScreenBoardTexture::DescInfo *this)
{
  return &this->m_IndexKey;
}

//----- (00628520) --------------------------------------------------------
tagSIZE __thiscall FrameScreenBoardTexture::GetDescSize(FrameScreenBoardTexture *this)
{
  tagSIZE result; // qax@1
  int v2; // ecx@1
  int v3; // [sp+8h] [bp+8h]@0

  result.cx = v3;
  *(_DWORD *)v3 = this->baseclass_0.m_MaxSize.cx;
  *(_DWORD *)(v3 + 4) = this->baseclass_0.m_MaxSize.cy;
  result.cy = this->baseclass_0.m_SpaceSize.cx;
  v2 = this->baseclass_0.m_SpaceSize.cy;
  *(_DWORD *)result.cx += result.cy;
  *(_DWORD *)(result.cx + 4) += v2;
  return result;
}

//----- (00628540) --------------------------------------------------------
void __thiscall FrameScreenBoardTexture::DrawTextA(FrameScreenBoardTexture *this)
{
  FrameScreenBoardTexture *v1; // esi@1
  char *v2; // edi@1
  HDC__ *v3; // edi@1

  v1 = this;
  v2 = (char *)&this->baseclass_0.m_hDC;
  ((void (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface)(
    this->baseclass_0.m_lpSurSrc,
    &this->baseclass_0.m_hDC);
  v3 = *(HDC__ **)v2;
  if ( v3 )
  {
    SelectObject(v3, v1->baseclass_0.m_hFont);
    ScreenBoardTexture::DrawTextA(&v1->baseclass_0);
  }
}

//----- (00628570) --------------------------------------------------------
bool __thiscall ScreenBoardTexture::CalculateStrSize(ScreenBoardTexture *this, const char *pcText, unsigned int *dwStrLen, tagSIZE *tSize)
{
  bool v4; // zf@1
  bool result; // al@2
  const char *v6; // edi@3
  BYTE v7; // al@4
  int v8; // eax@6
  int v9; // eax@10
  int v10; // [sp+8h] [bp-14h]@3
  tagSIZE kSize; // [sp+10h] [bp-Ch]@6
  ScreenBoardTexture *v12; // [sp+18h] [bp-4h]@1

  *dwStrLen = 0;
  tSize->cx = 0;
  tSize->cy = 0;
  v4 = this->m_hDC == 0;
  v12 = this;
  if ( v4 )
  {
    result = 0;
  }
  else
  {
    v6 = pcText;
    v10 = this->m_MaxSize.cx;
    if ( pcText && (v7 = *pcText) != 0 )
    {
      do
      {
        if ( IsDBCSLeadByte(v7) )
        {
          GetTextExtentPoint32A(v12->m_hDC, v6, 2, &kSize);
          v8 = kSize.cx;
          if ( kSize.cx + tSize->cx > v10 )
            goto LABEL_14;
          v6 += 2;
          *dwStrLen += 2;
        }
        else
        {
          GetTextExtentPoint32A(v12->m_hDC, v6, 1, &kSize);
          v8 = kSize.cx;
          if ( kSize.cx + tSize->cx > v10 )
            goto LABEL_14;
          ++v6;
          ++*dwStrLen;
        }
        tSize->cx += v8;
        v9 = tSize->cy;
        if ( v9 < kSize.cy )
          v9 = kSize.cy;
        tSize->cy = v9;
        v7 = *v6;
      }
      while ( *v6 );
      result = 1;
    }
    else
    {
LABEL_14:
      result = 0;
    }
  }
  return result;
}

//----- (00628650) --------------------------------------------------------
bool __thiscall ScreenBoardTexture::BeginDraw(ScreenBoardTexture *this, NiTexture *pDescTexture)
{
  ScreenBoardTexture *v2; // esi@1
  NiD3DRenderStateGroup *v3; // ecx@1
  int v5; // eax@3
  int v6; // edi@4
  HDC__ *v7; // ebx@6
  NiD3DRenderStateGroup *v8; // ecx@8
  int v9; // eax@9
  NiTexture::RendererData *v10; // ecx@13
  int v11; // eax@14
  int v12; // esi@15

  v2 = this;
  v3 = ScreenBoardTexture::sm_spSrcTexture.m_pObject->baseclass_0.m_pkRenderStateGroup;
  if ( !v3 || (v5 = (*(int (**)(void))(*(_DWORD *)&v3->m_bRendererOwned + 20))()) == 0 )
    return 0;
  v6 = (int)&v2->m_lpSurSrc;
  (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 72))(v5, 0, &v2->m_lpSurSrc);
  if ( !v2->m_lpSurSrc )
    return 0;
  (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)v6 + 60))(*(_DWORD *)v6, &v2->m_hDC);
  v7 = v2->m_hDC;
  if ( !v7 )
    return 0;
  SelectObject(v7, v2->m_hFont);
  if ( v2->m_IsRenderBackGround == 1 )
  {
    v8 = ScreenBoardTexture::sm_spShadowSrcTexture.m_pObject->baseclass_0.m_pkRenderStateGroup;
    if ( !v8
      || (v9 = (*(int (**)(void))(*(_DWORD *)&v8->m_bRendererOwned + 20))()) == 0
      || ((*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 72))(v9, 0, &v2->m_lpSurSrcShadow),
          !*(_DWORD *)v6) )
      return 0;
    ((void (__stdcall *)(_DWORD, _DWORD))v2->m_lpSurSrcShadow->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface)(
      v2->m_lpSurSrcShadow,
      &v2->m_hShadowDC);
    SelectObject(v2->m_hShadowDC, v2->m_hFont);
  }
  if ( pDescTexture )
  {
    v10 = pDescTexture->m_pkRendererData;
    if ( !v10
      || (v11 = ((int (*)(void))v10->vfptr[1].GetWidth)()) == 0
      || (v12 = (int)&v2->m_lpSurDest,
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v11 + 72))(v11, 0, v12),
          !*(_DWORD *)v12) )
      return 0;
  }
  return 1;
}

//----- (00628740) --------------------------------------------------------
NiTexture *__thiscall ScreenBoardTexture::DescInfo::GetTexture(ScreenBoardTexture::DescInfo *this)
{
  return &this->m_spTexture.m_pObject->baseclass_0;
}

//----- (00628750) --------------------------------------------------------
NiPoint2 *__thiscall ScreenBoardTexture::DescInfo::GetRenderStartPos(ScreenBoardTexture::DescInfo *this, NiPoint2 *result)
{
  ScreenBoardTexture::DescInfo *v2; // esi@1
  double v3; // st6@1
  NiPoint2 *v4; // eax@2
  float v5; // edx@2
  int v6; // edx@3
  float CurSize; // [sp+4h] [bp-18h]@1
  float CurSize_4; // [sp+8h] [bp-14h]@1
  tagSIZE DescSize; // [sp+Ch] [bp-10h]@1
  NiPoint2 RenderIndex; // [sp+14h] [bp-8h]@3

  v2 = this;
  ((void (__stdcall *)(tagSIZE *))this->m_pScreenData->vfptr->GetDescSize)(&DescSize);
  CurSize = (double)DescSize.cx;
  CurSize_4 = (double)DescSize.cy;
  DescSize.cy = ((int (*)(void))v2->m_spTexture.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)();
  v3 = (double)(unsigned int)DescSize.cy / CurSize;
  if ( (signed int)v3 )
  {
    v6 = v2->m_nIndex % (signed int)v3;
    DescSize.cy = v2->m_nIndex / (signed int)v3;
    v4 = result;
    RenderIndex.x = (double)v6;
    RenderIndex.y = (double)DescSize.cy;
    result->x = CurSize * RenderIndex.x;
    result->y = CurSize_4 * RenderIndex.y;
  }
  else
  {
    v4 = result;
    LODWORD(v5) = dword_B6E104;
    LODWORD(result->x) = NiPoint2::ZERO;
    result->y = v5;
  }
  return v4;
}
// B6E100: using guessed type int NiPoint2__ZERO;
// B6E104: using guessed type int dword_B6E104;

//----- (006287F0) --------------------------------------------------------
tagSIZE __thiscall ScreenBoardTexture::GetTextRenderSize(ScreenBoardTexture *this, const char *pkText)
{
  ScreenBoardTexture *v2; // esi@1
  char *v3; // edi@1
  tagSIZE result; // qax@2
  int v5; // ebx@3
  int v6; // edi@3
  const char *pkTexta; // [sp+14h] [bp+Ch]@0

  v2 = this;
  v3 = (char *)&this->m_TextSize;
  this->m_TextSize.cy = 0;
  this->m_TextSize.cx = 0;
  if ( ScreenBoardTexture::BeginDraw(this, 0) )
  {
    ScreenBoardTexture::CalculateStrSize(v2, pkTexta, &v2->m_dwMaxLength, (tagSIZE *)v3);
    ScreenBoardTexture::EndDraw(v2);
    v5 = v2->m_SpaceSize.cx + *(_DWORD *)v3;
    v6 = v2->m_SpaceSize.cy + *((_DWORD *)v3 + 1);
    if ( v2->m_IsRenderBackGround == 1 )
    {
      v5 += (signed int)v2->m_ShadowScrMovePos.x;
      v6 += (signed int)v2->m_ShadowScrMovePos.y;
    }
    result.cx = (int)pkText;
    *(_DWORD *)pkText = v5;
    *((_DWORD *)pkText + 1) = v6;
  }
  else
  {
    result.cy = *((_DWORD *)v3 + 1);
    result.cx = (int)pkText;
    *(_DWORD *)pkText = *(_DWORD *)v3;
    *((_DWORD *)pkText + 1) = result.cy;
  }
  return result;
}

//----- (00628880) --------------------------------------------------------
bool __thiscall ScreenBoardTexture::IsReleaseBuffer(ScreenBoardTexture *this)
{
  ScreenBoardTexture *v1; // esi@1
  unsigned int v2; // eax@1
  bool result; // al@2
  unsigned int v4; // edi@3
  int v5; // eax@4
  unsigned int v6; // edx@5

  v1 = this;
  v2 = this->m_UseCount;
  if ( v2 >= (signed int)((char *)this->m_UseChecks.baseclass_0._Mylast
                        - *(_DWORD *)&this->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    v4 = 0;
    if ( v2 )
    {
      do
      {
        v5 = *(_DWORD *)&v1->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0];
        if ( *(_DWORD *)(*(_DWORD *)(v5 + 4 * v4) + 4) == 1 )
        {
          v6 = v1->m_UseCount;
          if ( v6 )
          {
            std::swap<NiPointer<ScreenBoardTexture::DescInfo>>(
              (NiPointer<ScreenBoardTexture::DescInfo> *)(v5 + 4 * v4),
              (NiPointer<ScreenBoardTexture::DescInfo> *)(v5 + 4 * v6 - 4));
            --v1->m_UseCount;
            --v4;
          }
        }
        ++v4;
      }
      while ( v4 < v1->m_UseCount );
    }
    result = v1->m_UseCount < (signed int)((char *)v1->m_UseChecks.baseclass_0._Mylast
                                         - *(_DWORD *)&v1->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006288E0) --------------------------------------------------------
void __thiscall ScreenBoardTexture::DescInfo::_DescInfo(ScreenBoardTexture::DescInfo *this)
{
  ScreenBoardTexture::DescInfo *v1; // esi@1
  NiSourceTexture *v2; // edi@3

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&ScreenBoardTexture::DescInfo::_vftable_;
  if ( this->m_IndexKey.baseclass_0.first.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_IndexKey.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_IndexKey.baseclass_0.first.baseclass_0._Myres = 15;
  v1->m_IndexKey.baseclass_0.first.baseclass_0._Mysize = 0;
  v1->m_IndexKey.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2 = v1->m_spTexture.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C1324: using guessed type int (__thiscall *ScreenBoardTexture__DescInfo___vftable_)(void *p, char);

//----- (00628980) --------------------------------------------------------
void __thiscall ScreenBoardTexture::DescInfo::DescInfo(ScreenBoardTexture::DescInfo *this, ScreenBoardTexture *pScreenData, NiPointer<NiSourceTexture> spTexture, int nIndex)
{
  ScreenBoardTexture::DescInfo *v4; // esi@1
  NiSourceTexture *v5; // edi@1
  NiSourceTexture *v6; // eax@1
  NiSourceTexture *v7; // edi@10

  v4 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v4->baseclass_0.vfptr = (NiRefObjectVtbl *)&ScreenBoardTexture::DescInfo::_vftable_;
  v4->m_spTexture.m_pObject = 0;
  v4->m_IndexKey.baseclass_0.first.baseclass_0._Myres = 15;
  v4->m_IndexKey.baseclass_0.first.baseclass_0._Mysize = 0;
  v4->m_IndexKey.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4->m_IndexKey.baseclass_0.second = 0;
  v4->m_pScreenData = pScreenData;
  v5 = v4->m_spTexture.m_pObject;
  v6 = spTexture.m_pObject;
  if ( v5 != spTexture.m_pObject )
  {
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v6 = spTexture.m_pObject;
    }
    v4->m_spTexture.m_pObject = v6;
    if ( v6 )
    {
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v6 = spTexture.m_pObject;
    }
  }
  v4->m_nIndex = nIndex;
  if ( v6 )
  {
    v7 = v6;
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
  }
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C1324: using guessed type int (__thiscall *ScreenBoardTexture__DescInfo___vftable_)(void *p, char);

//----- (00628A70) --------------------------------------------------------
NiPointer<ScreenBoardTexture::DescInfo> *__thiscall ScreenBoardTexture::TextOutA(ScreenBoardTexture *this, NiPointer<ScreenBoardTexture::DescInfo> *result, const char *pkText, unsigned int kColorRef)
{
  ScreenBoardTexture *v4; // esi@1
  ScreenBoardTexture::DescInfo *v5; // ebx@1
  int v6; // edi@3
  unsigned int v7; // ebx@3
  const char *v8; // edx@4
  unsigned int v9; // ecx@6
  const char *v10; // eax@8
  int v11; // eax@10
  bool v12; // zf@10
  signed int v13; // eax@12
  bool v14; // cf@20
  NiPointer<ScreenBoardTexture::DescInfo> *v15; // esi@20
  NiPointer<ScreenBoardTexture::DescInfo> *v16; // eax@21
  int v17; // eax@22
  int v18; // edi@27
  int v19; // ecx@27
  int v20; // eax@27
  signed int v21; // eax@29
  NiPointer<ScreenBoardTexture::DescInfo> *v22; // esi@30
  int v23; // edi@35
  int v24; // ecx@35
  double v25; // st7@36
  NiPointer<ScreenBoardTexture::DescInfo> *v26; // edi@37
  NiPoint2 pos; // [sp+0h] [bp-4Ch]@29
  int v28; // [sp+8h] [bp-44h]@1
  int v29; // [sp+Ch] [bp-40h]@2
  unsigned int i; // [sp+10h] [bp-3Ch]@1
  NiPointer<ScreenBoardTexture::DescInfo> spInfo; // [sp+14h] [bp-38h]@1
  NiPointer<ScreenBoardTexture::DescInfo> *v32; // [sp+18h] [bp-34h]@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned long> key; // [sp+1Ch] [bp-30h]@1
  unsigned int v34; // [sp+3Ch] [bp-10h]@1
  int v35; // [sp+48h] [bp-4h]@1
  int v36; // [sp+4Ch] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v4 = this;
  v5 = 0;
  v28 = 0;
  v32 = result;
  this->m_pkText = pkText;
  this->m_kColorRef = kColorRef;
  spInfo.m_pObject = 0;
  v35 = 1;
  key.baseclass_0.first.baseclass_0._Myres = 15;
  key.baseclass_0.first.baseclass_0._Mysize = 0;
  key.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &key.baseclass_0.first,
    pkText,
    strlen(pkText));
  key.baseclass_0.second = kColorRef;
  v12 = v4->m_UseCount == 0;
  LOBYTE(v35) = 2;
  i = 0;
  if ( !v12 )
  {
    v29 = *(_DWORD *)&v4->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0];
    while ( 1 )
    {
      v6 = *(_DWORD *)v29;
      v7 = *(_DWORD *)(*(_DWORD *)v29 + 36);
      if ( *(_DWORD *)(*(_DWORD *)v29 + 40) < 0x10u )
        v8 = (const char *)(v6 + 20);
      else
        v8 = *(const char **)(v6 + 20);
      v9 = key.baseclass_0.first.baseclass_0._Mysize;
      if ( key.baseclass_0.first.baseclass_0._Mysize >= v7 )
        v9 = *(_DWORD *)(*(_DWORD *)v29 + 36);
      v10 = *(const char **)&key;
      if ( key.baseclass_0.first.baseclass_0._Myres < 0x10 )
        v10 = (const char *)&key;
      v11 = std::char_traits<char>::compare(v10, v8, v9);
      v12 = v11 == 0;
      if ( !v11 )
      {
        if ( key.baseclass_0.first.baseclass_0._Mysize >= v7 )
          v13 = key.baseclass_0.first.baseclass_0._Mysize != v7;
        else
          v13 = -1;
        v12 = v13 == 0;
      }
      if ( v12 && kColorRef == *(_DWORD *)(v6 + 48) )
        break;
      v29 += 4;
      ++i;
      if ( i >= v4->m_UseCount )
      {
        v5 = spInfo.m_pObject;
        goto LABEL_19;
      }
    }
    v17 = *(_DWORD *)(*(_DWORD *)&v4->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * i);
    v15 = v32;
    v32->m_pObject = (ScreenBoardTexture::DescInfo *)v17;
    if ( v17 )
      InterlockedIncrement((volatile LONG *)(v17 + 4));
    if ( key.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&key);
    return v15;
  }
LABEL_19:
  if ( !ScreenBoardTexture::IsReleaseBuffer(v4) )
  {
    v14 = key.baseclass_0.first.baseclass_0._Myres < 0x10;
    v15 = v32;
    v32->m_pObject = 0;
    if ( !v14 )
    {
      operator delete(*(void **)&key);
      return v15;
    }
    return v15;
  }
  v18 = *(_DWORD *)(*(_DWORD *)&v4->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4->m_UseCount);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v18 + 20),
    &key.baseclass_0.first,
    0,
    0xFFFFFFFFu);
  *(_DWORD *)(v18 + 48) = key.baseclass_0.second;
  v19 = *(_DWORD *)&v4->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0];
  v20 = *(_DWORD *)(v19 + 4 * v4->m_UseCount);
  if ( v20 )
  {
    spInfo.m_pObject = *(ScreenBoardTexture::DescInfo **)(v19 + 4 * v4->m_UseCount);
    InterlockedIncrement((volatile LONG *)(v20 + 4));
    v5 = spInfo.m_pObject;
  }
  ++v4->m_UseCount;
  ScreenBoardTexture::DescInfo::GetRenderStartPos(v5, &pos);
  v21 = (signed int)pos.y;
  v4->m_DestCorrectionPos.cx = (signed int)pos.x;
  v4->m_DestCorrectionPos.cy = v21;
  if ( ScreenBoardTexture::BeginDraw(v4, &v5->m_spTexture.m_pObject->baseclass_0) )
  {
    v23 = (int)&v4->m_TextSize;
    ScreenBoardTexture::CalculateStrSize(v4, v4->m_pkText, &v4->m_dwMaxLength, &v4->m_TextSize);
    v24 = v4->m_SpaceSize.cy;
    *(_DWORD *)v23 += v4->m_SpaceSize.cx;
    v4->m_TextSize.cy += v24;
    if ( v4->m_IsRenderBackGround == 1 )
    {
      v25 = v4->m_ShadowScrMovePos.y;
      *(_DWORD *)v23 += (signed int)v4->m_ShadowScrMovePos.x;
      v4->m_TextSize.cy += (signed int)v25;
    }
    v4->vfptr->DrawTextA(v4);
    ScreenBoardTexture::EndDraw(v4);
    v26 = v32;
    v4->m_pkText = 0;
    v26->m_pObject = v5;
    InterlockedIncrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount);
    v28 = 1;
    if ( key.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&key);
    key.baseclass_0.first.baseclass_0._Myres = 15;
    key.baseclass_0.first.baseclass_0._Mysize = 0;
    key.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v35) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v16 = v26;
  }
  else
  {
    v14 = key.baseclass_0.first.baseclass_0._Myres < 0x10;
    v22 = v32;
    v32->m_pObject = 0;
    v28 = 1;
    if ( !v14 )
      operator delete(*(void **)&key);
    key.baseclass_0.first.baseclass_0._Myres = 15;
    key.baseclass_0.first.baseclass_0._Mysize = 0;
    key.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v35) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v16 = v22;
  }
  return v16;
}
// A85C00: using guessed type int __security_cookie;

//----- (00628D70) --------------------------------------------------------
void __thiscall ScreenBoardTexture::ScreenBoardTexture(ScreenBoardTexture *this)
{
  this->vfptr = (ScreenBoardTextureVtbl *)&ScreenBoardTexture::_vftable_;
  *(_DWORD *)&this->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_UseChecks.baseclass_0._Mylast = 0;
  this->m_UseChecks.baseclass_0._Myend = 0;
  this->m_hFont = 0;
  this->m_hEraseBrush = 0;
  this->m_kChangeDescColor = 0;
  this->m_IsRenderBackGround = 0;
}
// 9C132C: using guessed type int (__thiscall *ScreenBoardTexture___vftable_)(ScreenBoardTexture *this, int);

//----- (00628D90) --------------------------------------------------------
void __thiscall ScreenBoardTexture::Clear(ScreenBoardTexture *this)
{
  ScreenBoardTexture *v1; // esi@1
  NiPointer<NiAVObject> *v2; // eax@1
  NiPointer<NiAVObject> *v3; // ecx@1
  NiPointer<NiAVObject> *v4; // edi@2
  void *v5; // eax@3
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+8h] [bp-4h]@0

  v1 = this;
  v2 = (NiPointer<NiAVObject> *)this->m_UseChecks.baseclass_0._Mylast;
  v3 = *(NiPointer<NiAVObject> **)&this->m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v2 )
  {
    v4 = std::_Move<NiPointer<NiAVObject>___NiPointer<NiAVObject>__>(v2, v2, v3, __formal);
    std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
      (NiPointer<PgSprData> *)v4,
      (NiPointer<PgSprData> *)v1->m_UseChecks.baseclass_0._Mylast,
      (std::allocator<NiPointer<PgSprData> > *)&v1->m_UseChecks.baseclass_0._Alval,
      __formal);
    v1->m_UseChecks.baseclass_0._Mylast = (NiPointer<ScreenBoardTexture::DescInfo> *)v4;
  }
  v5 = v1->m_hFont;
  v1->m_UseCount = 0;
  if ( v5 )
  {
    DeleteObject(v5);
    v1->m_hFont = 0;
  }
  if ( v1->m_hEraseBrush )
  {
    DeleteObject(v1->m_hEraseBrush);
    v1->m_hEraseBrush = 0;
  }
}

//----- (00628E00) --------------------------------------------------------
void __thiscall FrameScreenBoardTexture::_FrameScreenBoardTexture(FrameScreenBoardTexture *this)
{
  FrameScreenBoardTexture *v1; // esi@1
  NiPointer<PgSprData> *v2; // eax@1
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+4h] [bp-4h]@0

  v1 = this;
  this->baseclass_0.vfptr = (ScreenBoardTextureVtbl *)&FrameScreenBoardTexture::_vftable_;
  v2 = *(NiPointer<PgSprData> **)&this->baseclass_0.m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
  {
    std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
      v2,
      (NiPointer<PgSprData> *)this->baseclass_0.m_UseChecks.baseclass_0._Mylast,
      (std::allocator<NiPointer<PgSprData> > *)&this->baseclass_0.m_UseChecks.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->baseclass_0.m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->baseclass_0.m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_UseChecks.baseclass_0._Mylast = 0;
  v1->baseclass_0.m_UseChecks.baseclass_0._Myend = 0;
}
// 9C133C: using guessed type int (__thiscall *FrameScreenBoardTexture___vftable_)(ScreenBoardTexture *this, int);

//----- (00628E50) --------------------------------------------------------
bool __thiscall ScreenBoardTexture::Init(ScreenBoardTexture *this, tagSIZE MaxSize, Font::Type fonttype, int nBufferCount)
{
  ScreenBoardTexture *v4; // ebx@1
  float v5; // eax@1
  float v6; // ecx@1
  double v7; // st7@1
  signed int v8; // eax@1
  double v9; // st7@1
  signed int v10; // edi@1
  signed int v11; // esi@1
  void *v13; // eax@5
  NiPixelData *v14; // eax@6
  NiSourceTexture *v15; // eax@8
  void *v16; // eax@10
  NiPixelData *v17; // eax@11
  NiSourceTexture *v18; // eax@13
  int v19; // eax@14
  int v20; // edi@14
  int v21; // esi@16
  void *v22; // eax@19
  NiPixelData *v23; // eax@20
  NiSourceTexture *v24; // eax@22
  NiSourceTexture *v25; // edi@22
  void *v26; // esi@26
  int v27; // eax@27
  PgSprData *v28; // esi@31
  HBRUSH v29; // eax@39
  Font::FontDefine *v30; // eax@40
  HFONT v31; // eax@40
  NiPointer<NiSourceTexture> v32; // [sp-14h] [bp-94h]@27
  unsigned int v33; // [sp-10h] [bp-90h]@1
  NiPointer<NiSourceTexture> spDescTexture; // [sp+0h] [bp-80h]@22
  NiTexture::FormatPrefs kPrefs; // [sp+4h] [bp-7Ch]@4
  Font::Type eType; // [sp+10h] [bp-70h]@1
  float v37; // [sp+14h] [bp-6Ch]@1
  float v38; // [sp+18h] [bp-68h]@1
  int nTextureNum; // [sp+1Ch] [bp-64h]@16
  int nOneTextureBufferCount; // [sp+20h] [bp-60h]@16
  int nIndex; // [sp+24h] [bp-5Ch]@25
  NiPointer<PgSprData> _Val; // [sp+28h] [bp-58h]@19
  int i; // [sp+2Ch] [bp-54h]@5
  char bOldbDestroyAppData; // [sp+33h] [bp-4Dh]@4
  tagLOGFONTA LogFont; // [sp+34h] [bp-4Ch]@40
  unsigned int v46; // [sp+70h] [bp-10h]@1
  int v47; // [sp+7Ch] [bp-4h]@5
  int v48; // [sp+80h] [bp+0h]@1

  v46 = (unsigned int)&v48 ^ __security_cookie;
  v33 = (unsigned int)&v48 ^ __security_cookie;
  v37 = 0.0;
  v4 = this;
  v38 = 1.0;
  eType = fonttype;
  this->m_SpaceSize.cx = 2;
  this->m_SpaceSize.cy = 2;
  v5 = v37;
  this->m_MaxSize.cx = MaxSize.cx;
  v6 = v38;
  v4->m_ShadowScrMovePos.x = v5;
  v7 = v4->m_ShadowScrMovePos.x;
  v4->m_MaxSize.cy = MaxSize.cy;
  v4->m_ShadowScrMovePos.y = v6;
  v8 = (signed int)v7;
  v9 = v4->m_ShadowScrMovePos.y;
  v4->m_MaxSize.cx += v8;
  v4->m_MaxSize.cy += (signed int)v9;
  v10 = v4->m_MaxSize.cx + 2;
  v11 = v4->m_MaxSize.cy + 2;
  if ( v10 > 1024
    || v11 > 256
    || (kPrefs.m_eAlphaFmt = 3,
        kPrefs.m_ePixelLayout = 2,
        kPrefs.m_eMipMapped = 0,
        bOldbDestroyAppData = NiSourceTexture::ms_bDestroyAppData,
        NiSourceTexture::ms_bDestroyAppData = 1,
        !ScreenBoardTexture::sm_spSrcTexture.m_pObject)
    && ((v13 = operator new(0x70u), i = (int)v13, v47 = 0, !v13) ? (v14 = 0) : NiPixelData::NiPixelData(
                                                                                 (NiPixelData *)v13,
                                                                                 0x400u,
                                                                                 0x100u,
                                                                                 &NiPixelFormat::RGB24,
                                                                                 1u,
                                                                                 1u),
        v47 = -1,
        v15 = NiSourceTexture::Create(v14, &kPrefs),
        NiPointer<PopupMenuWin>::operator_(&ScreenBoardTexture::sm_spSrcTexture, (NiD3DDefaultShader *)v15),
        !ScreenBoardTexture::sm_spSrcTexture.m_pObject)
    || !ScreenBoardTexture::sm_spShadowSrcTexture.m_pObject
    && ((v16 = operator new(0x70u), i = (int)v16, v47 = 1, !v16) ? (v17 = 0) : NiPixelData::NiPixelData(
                                                                                 (NiPixelData *)v16,
                                                                                 0x400u,
                                                                                 0x100u,
                                                                                 &NiPixelFormat::RGB24,
                                                                                 1u,
                                                                                 1u),
        v47 = -1,
        v18 = NiSourceTexture::Create(v17, &kPrefs),
        NiPointer<PopupMenuWin>::operator_(&ScreenBoardTexture::sm_spShadowSrcTexture, (NiD3DDefaultShader *)v18),
        !ScreenBoardTexture::sm_spShadowSrcTexture.m_pObject)
    || (v19 = 1024 / v10, v20 = 0, !v19)
    || !(1024 / v11) )
    return 0;
  nOneTextureBufferCount = 1024 / v11 * v19;
  v21 = nBufferCount / nOneTextureBufferCount;
  nTextureNum = nBufferCount / nOneTextureBufferCount;
  if ( nBufferCount % nOneTextureBufferCount )
  {
    ++v21;
    nTextureNum = v21;
  }
  ScreenBoardTexture::Clear(v4);
  for ( i = 0; i < v21; ++i )
  {
    v22 = operator new(0x70u);
    _Val.m_pObject = (PgSprData *)v22;
    v47 = 2;
    if ( v22 == (void *)v20 )
      v23 = 0;
    else
      NiPixelData::NiPixelData((NiPixelData *)v22, 0x400u, 0x400u, &NiPixelFormat::RGBA32, 1u, 1u);
    v47 = -1;
    v24 = NiSourceTexture::Create(v23, &kPrefs);
    v25 = v24;
    spDescTexture.m_pObject = v24;
    if ( v24 )
      InterlockedIncrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v47 = 3;
    if ( !v25 )
      return 0;
    nIndex = 0;
    if ( nOneTextureBufferCount > 0 )
    {
      do
      {
        v26 = operator new(0x34u);
        _Val.m_pObject = (PgSprData *)v26;
        LOBYTE(v47) = 4;
        if ( v26 )
        {
          v33 = nIndex;
          LODWORD(v38) = &v32;
          v32.m_pObject = v25;
          InterlockedIncrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
          ScreenBoardTexture::DescInfo::DescInfo((ScreenBoardTexture::DescInfo *)v26, v4, v32, v33);
        }
        else
        {
          v27 = 0;
        }
        _Val.m_pObject = (PgSprData *)v27;
        if ( v27 )
          InterlockedIncrement((volatile LONG *)(v27 + 4));
        LOBYTE(v47) = 5;
        std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
          (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)&v4->m_UseChecks,
          &_Val);
        v28 = _Val.m_pObject;
        LOBYTE(v47) = 3;
        if ( _Val.m_pObject && !InterlockedDecrement((volatile LONG *)&_Val.m_pObject->baseclass_0.m_uiRefCount) )
          v28->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
        ++nIndex;
      }
      while ( nIndex < nOneTextureBufferCount );
      v21 = nTextureNum;
    }
    v47 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    v20 = 0;
  }
  NiSourceTexture::ms_bDestroyAppData = bOldbDestroyAppData;
  v33 = v20;
  v4->m_UseCount = v20;
  v29 = CreateSolidBrush(v33);
  v4->m_hEraseBrush = v29;
  if ( v29 == (HBRUSH)v20 )
    return 0;
  v30 = Font::GetFontDefine(eType);
  *(_WORD *)&LogFont.lfUnderline = 0;
  *(_WORD *)&LogFont.lfItalic = LOBYTE(v30->Italic);
  LogFont.lfEscapement = v20;
  LogFont.lfOrientation = v20;
  LogFont.lfOutPrecision = LOBYTE(v30->OutputPrecision);
  LogFont.lfClipPrecision = 0;
  LogFont.lfHeight = v30->Height;
  LogFont.lfWidth = v20;
  LogFont.lfCharSet = LOBYTE(v30->CharSet);
  LogFont.lfQuality = LOBYTE(v30->Quality);
  LogFont.lfWeight = v30->Weight;
  LogFont.lfPitchAndFamily = LOBYTE(v30->PitchAndFamily);
  v33 = (unsigned int)v30->pFacename;
  lstrcpyA(LogFont.lfFaceName, (LPCSTR)v33);
  v31 = CreateFontIndirectA(&LogFont);
  v4->m_hFont = v31;
  return v31 != (HFONT)v20;
}
// A85C00: using guessed type int __security_cookie;
// B6E04C: using guessed type char NiSourceTexture__ms_bDestroyAppData;

//----- (00629220) --------------------------------------------------------
void __thiscall ScreenBoardTexture::Terminate(ScreenBoardTexture *this)
{
  ScreenBoardTexture *v1; // ebx@1
  NiD3DDefaultShader *v2; // esi@2
  NiD3DDefaultShader *v3; // esi@6

  v1 = this;
  if ( ScreenBoardTexture::sm_spSrcTexture.m_pObject )
  {
    v2 = ScreenBoardTexture::sm_spSrcTexture.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&ScreenBoardTexture::sm_spSrcTexture.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    ScreenBoardTexture::sm_spSrcTexture.m_pObject = 0;
  }
  v3 = ScreenBoardTexture::sm_spShadowSrcTexture.m_pObject;
  if ( ScreenBoardTexture::sm_spShadowSrcTexture.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&ScreenBoardTexture::sm_spShadowSrcTexture.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    ScreenBoardTexture::sm_spShadowSrcTexture.m_pObject = 0;
  }
  ScreenBoardTexture::Clear(v1);
}

//----- (00629290) --------------------------------------------------------
void __thiscall FrameScreenBoardTexture::FrameScreenBoardTexture(FrameScreenBoardTexture *this)
{
  *(_DWORD *)&this->baseclass_0.m_UseChecks.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0.m_UseChecks.baseclass_0._Mylast = 0;
  this->baseclass_0.m_UseChecks.baseclass_0._Myend = 0;
  this->baseclass_0.m_hFont = 0;
  this->baseclass_0.m_hEraseBrush = 0;
  this->baseclass_0.m_kChangeDescColor = 0;
  this->baseclass_0.m_IsRenderBackGround = 0;
  this->baseclass_0.vfptr = (ScreenBoardTextureVtbl *)&FrameScreenBoardTexture::_vftable_;
}
// 9C133C: using guessed type int (__thiscall *FrameScreenBoardTexture___vftable_)(ScreenBoardTexture *this, int);

//----- (006292B0) --------------------------------------------------------
void __cdecl std::swap<NiPointer<ScreenBoardTexture::DescInfo>>(NiPointer<ScreenBoardTexture::DescInfo> *_Left, NiPointer<ScreenBoardTexture::DescInfo> *_Right)
{
  ScreenBoardTexture::DescInfo *v2; // edi@1
  ScreenBoardTexture::DescInfo *v3; // esi@3
  ScreenBoardTexture::DescInfo *v4; // eax@8
  ScreenBoardTexture::DescInfo *v5; // esi@10

  v2 = _Left->m_pObject;
  if ( _Left->m_pObject )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount);
  v3 = _Left->m_pObject;
  if ( _Left->m_pObject != _Right->m_pObject )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v4 = _Right->m_pObject;
    _Left->m_pObject = _Right->m_pObject;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount);
  }
  v5 = _Right->m_pObject;
  if ( _Right->m_pObject != v2 )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    _Right->m_pObject = v2;
    if ( v2 )
      InterlockedIncrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount);
  }
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  }
}

//----- (006293B0) --------------------------------------------------------
NiPointer<NiAVObject> *__cdecl std::_Move<NiPointer<NiAVObject>___NiPointer<NiAVObject>__>(NiPointer<NiAVObject> *_First, NiPointer<NiAVObject> *_Last, NiPointer<NiAVObject> *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  NiPointer<NiAVObject> *v4; // edi@1
  NiPointer<NiAVObject> *v5; // ebx@2
  NiPointer<NiAVObject> v6; // esi@3
  NiPointer<NiAVObject> v7; // eax@8
  NiPointer<NiAVObject> *result; // eax@11

  v4 = _First;
  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v5 = _Dest;
    do
    {
      v6.m_pObject = v5->m_pObject;
      if ( v5->m_pObject != v4->m_pObject )
      {
        if ( v6.m_pObject
          && !InterlockedDecrement((volatile LONG *)&v6.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v6.m_pObject )
          v6.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6.m_pObject, 1u);
        v7.m_pObject = v4->m_pObject;
        v5->m_pObject = v4->m_pObject;
        if ( v7.m_pObject )
          InterlockedIncrement((volatile LONG *)&v7.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      ++v4;
      ++v5;
    }
    while ( v4 != _Last );
    result = v5;
  }
  return result;
}

//----- (00629420) --------------------------------------------------------
void *__thiscall ScreenBoardTexture::DescInfo::_scalar_deleting_destructor_(ScreenBoardTexture::DescInfo *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ScreenBoardTexture::DescInfo::_DescInfo(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00629450) --------------------------------------------------------
void __thiscall std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *this, NiPointer<PgSprData> *_Val)
{
  std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *v2; // esi@1
  NiPointer<PgSprData> *v3; // eax@1
  int v4; // ecx@2
  signed int v5; // edi@3
  NiPointer<PgSprData> *v6; // ecx@5
  int v7; // eax@6
  NiPointer<PgSprData> *v8; // eax@10
  PgSprData *v9; // edi@11

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3
    || (v4 = *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0],
        *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val) )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::_Reserve(v2, 1u);
    v8 = v2->baseclass_0._Mylast;
    if ( v8 )
    {
      v9 = _Val->m_pObject;
      v8->m_pObject = _Val->m_pObject;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount);
    }
  }
  else
  {
    v5 = (signed int)((char *)_Val - v4) >> 2;
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::_Reserve(v2, 1u);
    v6 = v2->baseclass_0._Mylast;
    if ( v6 )
    {
      v7 = *(_DWORD *)(*(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
      v6->m_pObject = (PgSprData *)v7;
      if ( v7 )
      {
        InterlockedIncrement((volatile LONG *)(v7 + 4));
        ++v2->baseclass_0._Mylast;
        return;
      }
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (006294E0) --------------------------------------------------------
void __usercall DrawVLine_0(unsigned int uiPitch<esi>, unsigned int uiY1<edx>, unsigned int uiY2<eax>, unsigned int uiColor<edi>, unsigned int *puiDest, unsigned int uiX)
{
  unsigned int v6; // eax@1
  char *i; // ecx@1

  v6 = uiY2 - uiY1 + 1;
  for ( i = (char *)&puiDest[uiX] + uiY1 * uiPitch; v6; --v6 )
  {
    *(_DWORD *)i = uiColor;
    i += uiPitch;
  }
}

//----- (00629510) --------------------------------------------------------
void __usercall FillSpr_0(unsigned int uiPitch<eax>, unsigned int uiSrcWidth<ebx>, unsigned int uiSrcHeight<edx>, unsigned int *puiDest, unsigned int uiX, unsigned int uiY, char *pbySrc, unsigned int uiSolidColor, unsigned int uiTransColor)
{
  char *v9; // esi@1
  char *v10; // ecx@1
  unsigned int v11; // eax@1
  unsigned int v12; // edi@4
  unsigned int v13; // edx@6
  unsigned int uiYa; // [sp+18h] [bp+10h]@2

  v9 = pbySrc;
  v10 = (char *)&puiDest[uiX] + uiY * uiPitch;
  v11 = uiPitch - 4 * uiSrcWidth;
  if ( uiSrcHeight )
  {
    uiYa = uiSrcHeight;
    while ( !uiSrcWidth )
    {
LABEL_11:
      v10 += v11;
      --uiYa;
      if ( !uiYa )
        return;
    }
    v12 = uiSrcWidth;
    while ( *v9 != 1 )
    {
      if ( *v9 == 2 )
      {
        v13 = uiTransColor;
        goto LABEL_9;
      }
LABEL_10:
      v10 += 4;
      ++v9;
      --v12;
      if ( !v12 )
        goto LABEL_11;
    }
    v13 = uiSolidColor;
LABEL_9:
    *(_DWORD *)v10 = v13;
    goto LABEL_10;
  }
}

//----- (00629570) --------------------------------------------------------
bool __thiscall SpeechBD::IsAlive(SpeechBD *this, float fTime)
{
  return this->m_bAlive && fTime - this->m_fStartTime <= this->m_fLifeTime;
}

//----- (006295A0) --------------------------------------------------------
void __thiscall SpeechBD::EndDraw(SpeechBD *this)
{
  SpeechBD *v1; // esi@1

  v1 = this;
  if ( this->m_lpSurSrc )
    this->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)this->m_lpSurSrc);
  if ( v1->m_lpSurDest )
    v1->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v1->m_lpSurDest);
}

//----- (006295D0) --------------------------------------------------------
void __thiscall SpeechBD::DrawTextA(SpeechBD *this)
{
  void **v1; // edi@0
  SpeechBD *v2; // esi@1
  int v3; // edi@2
  int v4; // ebx@3
  int iTextXPos; // [sp+4h] [bp-Ch]@2
  unsigned int i; // [sp+8h] [bp-8h]@2
  HDC__ *hDC; // [sp+Ch] [bp-4h]@2

  v2 = this;
  if ( this->m_lpSurSrc )
  {
    this->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface(
      (IUnknown *)this->m_lpSurSrc,
      (_GUID *const )&hDC,
      v1);
    SetBkMode(hDC, 1);
    SelectObject(hDC, SpeechBD::ms_hFont);
    v3 = v2->m_iTextYPos;
    iTextXPos = v2->m_iTextXPos;
    i = 0;
    if ( v2->m_uiTotalLine )
    {
      v4 = (int)v2->m_apcLineText;
      do
      {
        TextOutA(hDC, iTextXPos, v3, *(LPCSTR *)v4, *(_DWORD *)(v4 + 16));
        v3 += v2->m_uiLineHeight + 1;
        v4 += 4;
        ++i;
      }
      while ( i < v2->m_uiTotalLine );
    }
    v2->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v2->m_lpSurSrc);
  }
}

//----- (00629680) --------------------------------------------------------
void __usercall DrawHLine_0(unsigned int uiPitch<ecx>, unsigned int uiX1<edx>, unsigned int uiX2<eax>, unsigned int *puiDest, unsigned int uiY, unsigned int uiColor)
{
  memset32((char *)&puiDest[uiX1] + uiY * uiPitch, uiColor, uiX2 - uiX1 + 1);
}

//----- (006296B0) --------------------------------------------------------
void __usercall CalculateStrlenInWidth_2(char *pcText<eax>, unsigned int *dwStrLen<ebx>, unsigned int *dwWidth<esi>, HDC__ *hDC, unsigned int dwMaxWidth)
{
  char *v5; // edi@1
  char v6; // al@2
  int v7; // eax@4
  tagSIZE kSize; // [sp+4h] [bp-8h]@4

  v5 = pcText;
  *dwStrLen = 0;
  *dwWidth = 0;
  if ( pcText )
  {
    v6 = *pcText;
    if ( v6 )
    {
      do
      {
        if ( IsDBCSLeadByte(v6) )
        {
          GetTextExtentPoint32A(hDC, v5, 2, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          v5 += 2;
          *dwStrLen += 2;
        }
        else
        {
          GetTextExtentPoint32A(hDC, v5, 1, &kSize);
          v7 = kSize.cx;
          if ( kSize.cx + *dwWidth > dwMaxWidth )
            return;
          ++v5;
          ++*dwStrLen;
        }
        *dwWidth += v7;
        v6 = *v5;
      }
      while ( *v5 );
    }
  }
}

//----- (00629730) --------------------------------------------------------
bool __thiscall SpeechBD::BeginDraw(SpeechBD *this)
{
  SpeechBD *v1; // edi@1
  NiTexture::RendererData *v2; // ecx@1
  bool result; // al@2
  int v4; // eax@3
  int v5; // ecx@5
  int v6; // eax@6

  v1 = this;
  v2 = this->m_pkTexture->m_pkRendererData;
  if ( v2 && (v4 = ((int (*)(void))v2->vfptr[1].GetWidth)()) != 0 )
  {
    (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v4 + 72))(v4, 0, &v1->m_lpSurDest);
    if ( v1->m_lpSurDest
      && (v5 = *(_DWORD *)(SpeechBD::ms_spTempTexture + 40)) != 0
      && (v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))()) != 0 )
    {
      (*(void (__stdcall **)(int, _DWORD, IDirect3DSurface9 **))(*(_DWORD *)v6 + 72))(v6, 0, &v1->m_lpSurSrc);
      result = v1->m_lpSurSrc != 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// AA26F0: using guessed type int SpeechBD__ms_spTempTexture;

//----- (006297A0) --------------------------------------------------------
void __thiscall SpeechBD::CalculateLine(SpeechBD *this)
{
  SpeechBD *v1; // edi@1
  IDirect3DSurface9 *v2; // eax@1
  char *v3; // eax@3
  HDC__ *v4; // ST08_4@3
  int v5; // eax@6
  unsigned int v6; // esi@7
  unsigned int v7; // eax@7
  int v8; // edx@7
  void **v9; // [sp+0h] [bp-3Ch]@0
  tagSIZE kSize; // [sp+8h] [bp-34h]@2
  unsigned int dwTextWidth; // [sp+10h] [bp-2Ch]@3
  unsigned int dwStrLen; // [sp+14h] [bp-28h]@3
  int i; // [sp+18h] [bp-24h]@2
  unsigned int *v14; // [sp+1Ch] [bp-20h]@2
  char *pcText; // [sp+20h] [bp-1Ch]@2
  HDC__ *hDC; // [sp+24h] [bp-18h]@2
  tagRECT kRect; // [sp+28h] [bp-14h]@2
  unsigned int v18; // [sp+38h] [bp-4h]@1
  int v19; // [sp+3Ch] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v1 = this;
  v2 = this->m_lpSurSrc;
  if ( v2 )
  {
    this->m_uiTotalLine = 0;
    this->m_uiTextWidth = 0;
    this->m_uiTextHeight = 0;
    this->m_uiLineHeight = 0;
    v2->baseclass_0.baseclass_0.lpVtbl[5].QueryInterface((IUnknown *)v2, (_GUID *const )&hDC, v9);
    SetRect(&kRect, 0, 0, 148, 81);
    FillRect(hDC, &kRect, (HBRUSH)SpeechBD::ms_hEraseBrush);
    SelectObject(hDC, SpeechBD::ms_hFont);
    pcText = v1->m_pcSpeech;
    GetTextExtentPoint32A(hDC, "W", 1, &kSize);
    v1->m_uiLineHeight = kSize.cy;
    i = 0;
    v14 = v1->m_auiLineStrLen;
    do
    {
      v3 = pcText;
      v4 = hDC;
      *(v14 - 4) = (unsigned int)pcText;
      CalculateStrlenInWidth_2(v3, v4, 0x78u, &dwStrLen, &dwTextWidth);
      if ( !dwStrLen )
        break;
      pcText += dwStrLen;
      *v14 = dwStrLen;
      if ( v1->m_uiTextWidth < dwTextWidth )
        v1->m_uiTextWidth = dwTextWidth;
      v5 = i;
      ++v1->m_uiTotalLine;
      ++v14;
      i = v5 + 1;
    }
    while ( (unsigned int)(v5 + 1) < 4 );
    v6 = v1->m_uiTextWidth;
    v7 = (148 - v6) >> 1;
    v8 = v1->m_uiTotalLine * (v1->m_uiLineHeight + 1) - 1;
    v1->m_iTextXPos = v7;
    v1->m_iTextYPos = 69 - v8;
    v1->m_kTextRect.left = v7 - 5;
    v1->m_kTextRect.right = v7 + v6 + 4;
    v1->m_kTextRect.bottom = 73;
    v1->m_kTextRect.top = 69 - v8 - 5;
    v1->m_uiTextWidth = v6 + 9;
    v1->m_uiTextHeight = v8 + 9;
    v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[5].AddRef((IUnknown *)v1->m_lpSurSrc);
  }
}
// 6297A0: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (00629900) --------------------------------------------------------
void __thiscall SpeechBD::DrawFrame(SpeechBD *this)
{
  SpeechBD *v1; // esi@1
  IDirect3DSurface9 *v2; // eax@1
  int v3; // eax@4
  char *v4; // edx@4
  char *v5; // eax@4
  signed int v6; // ebx@4
  signed int v7; // edi@5
  char *v8; // edx@12
  char *v9; // eax@12
  signed int v10; // ebx@12
  signed int v11; // edi@13
  char *v12; // edx@20
  char *v13; // eax@20
  signed int v14; // ebx@20
  signed int v15; // edi@21
  char *v16; // edx@28
  char *v17; // eax@28
  signed int v18; // ebx@28
  signed int v19; // edi@29
  int v20; // eax@36
  void *v21; // ST18_4@36
  int v22; // eax@36
  unsigned int v23; // ecx@36
  int v24; // ecx@36
  char *v25; // edi@36
  int v26; // eax@36
  char *v27; // edx@39
  int v28; // eax@39
  int dwLineColor; // [sp+Ch] [bp-24h]@4
  _D3DLOCKED_RECT kLockRectSrc; // [sp+10h] [bp-20h]@2
  unsigned int v31; // [sp+18h] [bp-18h]@4
  tagRECT rc; // [sp+1Ch] [bp-14h]@2
  unsigned int v33; // [sp+2Ch] [bp-4h]@1
  int v34; // [sp+30h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v1 = this;
  v2 = this->m_lpSurSrc;
  if ( v2 )
  {
    rc.left = 0;
    rc.top = 0;
    rc.right = 147;
    rc.bottom = 80;
    if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v2->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
            v2,
            &kLockRectSrc,
            &rc,
            0) )
    {
      if ( kLockRectSrc.pBits )
      {
        v3 = v1->m_kTextRect.top;
        BYTE3(v1->m_dwOutLineColor) = 0;
        dwLineColor = v1->m_dwOutLineColor;
        v4 = ms_abyBoardLeftTopSpr_0;
        v5 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.left + kLockRectSrc.Pitch * (v3 - 3) - 12;
        v31 = kLockRectSrc.Pitch - 16;
        v6 = 4;
        do
        {
          v7 = 4;
          do
          {
            if ( *v4 == 1 )
            {
              *(_DWORD *)v5 = dwLineColor;
            }
            else
            {
              if ( *v4 == 2 )
                *(_DWORD *)v5 = 16712191;
            }
            v5 += 4;
            ++v4;
            --v7;
          }
          while ( v7 );
          v5 += v31;
          --v6;
        }
        while ( v6 );
        v8 = ms_abyBoardLeftBottomSpr_0;
        v9 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.left + kLockRectSrc.Pitch * v1->m_kTextRect.bottom - 12;
        v31 = kLockRectSrc.Pitch - 16;
        v10 = 4;
        do
        {
          v11 = 4;
          do
          {
            if ( *v8 == 1 )
            {
              *(_DWORD *)v9 = dwLineColor;
            }
            else
            {
              if ( *v8 == 2 )
                *(_DWORD *)v9 = 16712191;
            }
            v9 += 4;
            ++v8;
            --v11;
          }
          while ( v11 );
          v9 += v31;
          --v10;
        }
        while ( v10 );
        v12 = ms_abyBoardRightTopSpr_0;
        v13 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.right + kLockRectSrc.Pitch * (v1->m_kTextRect.top - 3);
        v31 = kLockRectSrc.Pitch - 16;
        v14 = 4;
        do
        {
          v15 = 4;
          do
          {
            if ( *v12 == 1 )
            {
              *(_DWORD *)v13 = dwLineColor;
            }
            else
            {
              if ( *v12 == 2 )
                *(_DWORD *)v13 = 16712191;
            }
            v13 += 4;
            ++v12;
            --v15;
          }
          while ( v15 );
          v13 += v31;
          --v14;
        }
        while ( v14 );
        v16 = ms_abyBoardRightBottomSpr_0;
        v17 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.right + kLockRectSrc.Pitch * v1->m_kTextRect.bottom;
        v31 = kLockRectSrc.Pitch - 16;
        v18 = 4;
        do
        {
          v19 = 4;
          do
          {
            if ( *v16 == 1 )
            {
              *(_DWORD *)v17 = dwLineColor;
            }
            else
            {
              if ( *v16 == 2 )
                *(_DWORD *)v17 = 16712191;
            }
            v17 += 4;
            ++v16;
            --v19;
          }
          while ( v19 );
          v17 += v31;
          --v18;
        }
        while ( v18 );
        v20 = v1->m_kTextRect.left;
        v21 = (char *)kLockRectSrc.pBits + 4 * v20 + kLockRectSrc.Pitch * (v1->m_kTextRect.top - 2);
        v31 = v1->m_kTextRect.right - v20 + 1;
        memset32(v21, dwLineColor, v31);
        v22 = v1->m_kTextRect.left;
        v23 = v1->m_kTextRect.right - v22 + 1;
        v31 = (unsigned int)((char *)kLockRectSrc.pBits + 4 * v22 + kLockRectSrc.Pitch * (v1->m_kTextRect.bottom + 2));
        memset32((void *)v31, dwLineColor, v23);
        v24 = kLockRectSrc.Pitch;
        v25 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.left + kLockRectSrc.Pitch * v1->m_kTextRect.top - 8;
        v26 = v1->m_kTextRect.bottom - v1->m_kTextRect.top + 1;
        if ( v1->m_kTextRect.bottom - v1->m_kTextRect.top != -1 )
        {
          do
          {
            *(_DWORD *)v25 = dwLineColor;
            v25 += v24;
            --v26;
          }
          while ( v26 );
          v24 = kLockRectSrc.Pitch;
        }
        v27 = (char *)kLockRectSrc.pBits + 4 * v1->m_kTextRect.right + v24 * v1->m_kTextRect.top + 8;
        v28 = v1->m_kTextRect.bottom - v1->m_kTextRect.top + 1;
        if ( v1->m_kTextRect.bottom - v1->m_kTextRect.top != -1 )
        {
          do
          {
            *(_DWORD *)v27 = dwLineColor;
            v27 += v24;
            --v28;
          }
          while ( v28 );
        }
        v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v1->m_lpSurSrc);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00629B70) --------------------------------------------------------
void __thiscall SpeechBD::CopyTexture(SpeechBD *this)
{
  SpeechBD *v1; // ebx@1
  IDirect3DSurface9 *v2; // eax@3
  int v3; // ecx@4
  IDirect3DSurface9 *v4; // eax@4
  void *v5; // edx@5
  void *v6; // esi@5
  int v7; // eax@8
  bool v8; // zf@9
  signed int v9; // edi@14
  int v10; // eax@15
  int v11; // eax@15
  int v12; // eax@21
  int v13; // esi@21
  int v14; // eax@21
  int v15; // edx@21
  int v16; // eax@27
  int v17; // esi@27
  int v18; // eax@27
  int v19; // edx@27
  int v20; // eax@33
  int v21; // esi@33
  int v22; // eax@33
  int v23; // edx@33
  int uiSrcSkipBytes; // [sp+8h] [bp-3Ch]@5
  int uiDestSkipBytes; // [sp+Ch] [bp-38h]@5
  _D3DLOCKED_RECT kLockRectSrc; // [sp+14h] [bp-30h]@3
  unsigned int v27; // [sp+1Ch] [bp-28h]@8
  _D3DLOCKED_RECT kLockRectDest; // [sp+20h] [bp-24h]@4
  unsigned int y; // [sp+28h] [bp-1Ch]@5
  int pTempDest; // [sp+2Ch] [bp-18h]@5
  tagRECT rc; // [sp+30h] [bp-14h]@3
  unsigned int v32; // [sp+40h] [bp-4h]@1
  int v33; // [sp+44h] [bp+0h]@1

  v32 = (unsigned int)&v33 ^ __security_cookie;
  v1 = this;
  if ( this->m_lpSurSrc )
  {
    if ( this->m_lpSurDest )
    {
      v2 = this->m_lpSurSrc;
      rc.left = 0;
      rc.top = 0;
      rc.right = 148;
      rc.bottom = 81;
      if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v2->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
              v2,
              &kLockRectSrc,
              &rc,
              0) )
      {
        v3 = v1->m_uiTextureYPos;
        rc.left = v1->m_uiTextureXPos;
        rc.top = v3;
        rc.right = rc.left + 148;
        v4 = v1->m_lpSurDest;
        rc.bottom = v3 + 81;
        if ( !((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, tagRECT *, _DWORD))v4->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
                v4,
                &kLockRectDest,
                &rc,
                0) )
        {
          v5 = kLockRectDest.pBits;
          v6 = kLockRectSrc.pBits;
          uiDestSkipBytes = kLockRectDest.Pitch - 592;
          uiSrcSkipBytes = kLockRectSrc.Pitch - 592;
          pTempDest = (int)kLockRectDest.pBits;
          y = 81;
          do
          {
            memset((void *)pTempDest, 0, 0x250u);
            pTempDest += kLockRectDest.Pitch;
            --y;
          }
          while ( y );
          pTempDest = (int)((char *)v5 + 4 * v1->m_kTextRect.left + kLockRectDest.Pitch * (v1->m_kTextRect.top - 3));
          y = 4;
          do
          {
            v27 = v1->m_uiTextWidth;
            memset32((void *)pTempDest, -2147483648, v27);
            v7 = kLockRectDest.Pitch;
            pTempDest += kLockRectDest.Pitch;
            --y;
          }
          while ( y );
          v8 = v1->m_uiTextHeight == 0;
          pTempDest = (int)((char *)v5 + 4 * v1->m_kTextRect.left + kLockRectDest.Pitch * (v1->m_kTextRect.top + 1) - 12);
          y = 0;
          if ( !v8 )
          {
            do
            {
              v27 = v1->m_uiTextWidth + 7;
              memset32((void *)pTempDest, -2147483648, v27);
              v7 = kLockRectDest.Pitch;
              pTempDest += kLockRectDest.Pitch;
              ++y;
            }
            while ( y < v1->m_uiTextHeight );
          }
          pTempDest = (int)((char *)v5 + 4 * v1->m_kTextRect.left + v7 * v1->m_kTextRect.bottom);
          y = 4;
          do
          {
            v27 = v1->m_uiTextWidth;
            memset32((void *)pTempDest, -2147483648, v27);
            pTempDest += kLockRectDest.Pitch;
            --y;
          }
          while ( y );
          y = 81;
          while ( 1 )
          {
            v9 = 37;
            do
            {
              v10 = *(_DWORD *)v6;
              v11 = v10 & 0xFFFFFF;
              if ( v11 == 16712191 )
              {
                *(_DWORD *)v5 = -2147483648;
                *((_BYTE *)v5 + 3) = -128;
                goto LABEL_21;
              }
              if ( v11 != v1->m_dwOutLineColor )
              {
                if ( v11 == 16711935 )
                  goto LABEL_21;
                v11 = v1->m_dwTextColor;
              }
              *(_DWORD *)v5 = v11;
              *((_BYTE *)v5 + 3) = -1;
LABEL_21:
              v12 = *((_DWORD *)v6 + 1);
              v13 = (int)((char *)v6 + 4);
              v14 = v12 & 0xFFFFFF;
              v15 = (int)((char *)v5 + 4);
              if ( v14 == 16712191 )
              {
                *(_DWORD *)v15 = -2147483648;
                *(_BYTE *)(v15 + 3) = -128;
                goto LABEL_27;
              }
              if ( v14 != v1->m_dwOutLineColor )
              {
                if ( v14 == 16711935 )
                  goto LABEL_27;
                v14 = v1->m_dwTextColor;
              }
              *(_DWORD *)v15 = v14;
              *(_BYTE *)(v15 + 3) = -1;
LABEL_27:
              v16 = *(_DWORD *)(v13 + 4);
              v17 = v13 + 4;
              v18 = v16 & 0xFFFFFF;
              v19 = v15 + 4;
              if ( v18 == 16712191 )
              {
                *(_DWORD *)v19 = -2147483648;
                *(_BYTE *)(v19 + 3) = -128;
                goto LABEL_33;
              }
              if ( v18 != v1->m_dwOutLineColor )
              {
                if ( v18 == 16711935 )
                  goto LABEL_33;
                v18 = v1->m_dwTextColor;
              }
              *(_DWORD *)v19 = v18;
              *(_BYTE *)(v19 + 3) = -1;
LABEL_33:
              v20 = *(_DWORD *)(v17 + 4);
              v21 = v17 + 4;
              v22 = v20 & 0xFFFFFF;
              v23 = v19 + 4;
              if ( v22 == 16712191 )
              {
                *(_DWORD *)v23 = -2147483648;
                *(_BYTE *)(v23 + 3) = -128;
                goto LABEL_39;
              }
              if ( v22 != v1->m_dwOutLineColor )
              {
                if ( v22 == 16711935 )
                  goto LABEL_39;
                v22 = v1->m_dwTextColor;
              }
              *(_DWORD *)v23 = v22;
              *(_BYTE *)(v23 + 3) = -1;
LABEL_39:
              v5 = (void *)(v23 + 4);
              v6 = (void *)(v21 + 4);
              --v9;
            }
            while ( v9 );
            v5 = (char *)v5 + uiDestSkipBytes;
            v6 = (char *)v6 + uiSrcSkipBytes;
            --y;
            if ( !y )
            {
              v1->m_lpSurDest->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v1->m_lpSurDest);
              v1->m_lpSurSrc->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)v1->m_lpSurSrc);
              return;
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00629E50) --------------------------------------------------------
void __thiscall SpeechBD::_SpeechBD(SpeechBD *this)
{
  SpeechBD *v1; // esi@1
  NiScreenElements *v2; // edi@1
  NiScreenElements *v3; // esi@6

  v1 = this;
  this->vfptr = (SpeechBDVtbl *)&SpeechBD::_vftable_;
  v2 = this->m_spScreenGeom.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spScreenGeom.m_pObject = 0;
  }
  operator delete__(v1->m_pcSpeech);
  v3 = v1->m_spScreenGeom.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
  }
}
// 9C1354: using guessed type int (__thiscall *SpeechBD___vftable_)(void *p, char);

//----- (00629F00) --------------------------------------------------------
void __thiscall SpeechBD::Update(SpeechBD *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  SpeechBD *v4; // esi@1
  Char *v5; // eax@1
  Char *v6; // edi@1
  int v7; // eax@2
  float v8; // ST28_4@2
  float v9; // ST2C_4@2
  float v10; // ST30_4@2
  double v11; // st7@2
  double v12; // st6@4
  NiProperty *v13; // eax@5
  double v14; // st7@5
  _BYTE v15[12]; // ST0C_12@11
  float v16; // ST08_4@11
  NiCamera *v17; // ebx@11
  float v18; // ST04_4@11
  float v19; // ST28_4@16
  float v20; // ST2C_4@16
  float v21; // ST30_4@16
  NiCamera **v22; // eax@16
  bool v23; // zf@18
  NiScreenElements *v24; // eax@21
  NiPoint3 kWorldPos; // [sp+30h] [bp-20h]@11
  NiPoint3 k2DOrthoPos; // [sp+3Ch] [bp-14h]@11
  float AddPos; // [sp+48h] [bp-8h]@2
  float fDistance; // [sp+4Ch] [bp-4h]@2

  v4 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, this->m_kCharHandle);
  v6 = v5;
  if ( !v5
    || (v7 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[6].Deaffect)(v5),
        v8 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - *(float *)v7,
        v9 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v7 + 4),
        v10 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v7 + 8),
        AddPos = v9 * v9 + v8 * v8 + v10 * v10,
        AddPos = sqrt(AddPos),
        fDistance = AddPos,
        v11 = AddPos,
        AddPos > (double)SpeechBD::ms_fMaxDistance) )
  {
    v4->m_bAlive = 0;
    return;
  }
  v12 = SpeechBD::ms_fTransNear;
  if ( SpeechBD::ms_fTransNear <= v11 )
  {
    if ( SpeechBD::ms_fTransFar >= v11 )
    {
      fDistance = v11 - v12;
      AddPos = SpeechBD::ms_fTransFar - v12;
      if ( 0.0 == AddPos )
        goto LABEL_11;
      v13 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v14 = 1.0 - fDistance / AddPos;
    }
    else
    {
      v13 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
      v14 = 0.0;
    }
  }
  else
  {
    v13 = NiAVObject::GetProperty(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
    v14 = 1.0;
  }
  ++v13[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  *(float *)&v13[3].baseclass_0.baseclass_0.baseclass_0.vfptr = v14;
LABEL_11:
  Char::GetHeightPos(v6, &kWorldPos);
  kWorldPos.z = kWorldPos.z + 3.0;
  *(_DWORD *)v15 = (_DWORD)kWorldPos.x;
  *(_QWORD *)&v15[4] = *(_QWORD *)&kWorldPos.y;
  v16 = (double)PgWin::ms_uiScreenHeight;
  v17 = pkWorldCamera;
  v18 = (double)PgWin::ms_uiScreenWidth;
  if ( PgUtil::Get2DOrthoPosFrom3DPos(pkWorldCamera, v18, v16, *(NiPoint3 *)v15, &k2DOrthoPos) )
  {
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
    k2DOrthoPos.x = k2DOrthoPos.x - 74.0;
    k2DOrthoPos.y = k2DOrthoPos.y - 104.0;
    if ( v6->m_dwGuildRegNum )
      k2DOrthoPos.y = k2DOrthoPos.y - 21.0;
    if ( byte_B5BB4B == 1 )
    {
      v19 = v17->baseclass_0.m_kWorld.m_Translate.x - kWorldPos.x;
      v20 = v17->baseclass_0.m_kWorld.m_Translate.y - kWorldPos.y;
      v21 = v17->baseclass_0.m_kWorld.m_Translate.z - kWorldPos.z;
      *(float *)&pkWorldCamera = v20 * v20 + v19 * v19 + v21 * v21;
      *(float *)&pkWorldCamera = sqrt(*(float *)&pkWorldCamera);
      *(float *)&pkWorldCamera = *(float *)&pkWorldCamera / (double)StandLength_0;
      AddPos = 0.69999999;
      v22 = &pkWorldCamera;
      if ( *(float *)&pkWorldCamera >= 0.69999999 )
        v22 = (NiCamera **)&AddPos;
      v23 = v6->m_dwGuildRegNum == 0;
      *(float *)&pkWorldCamera = *(float *)v22;
      AddPos = 40.0;
      if ( !v23 )
        AddPos = 60.0;
      k2DOrthoPos.y = k2DOrthoPos.y - (1.0 - *(float *)&pkWorldCamera) * AddPos;
    }
    v24 = v4->m_spScreenGeom.m_pObject;
    LODWORD(v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)k2DOrthoPos.x;
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = k2DOrthoPos.y;
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = k2DOrthoPos.z;
    NiAVObject::Update(&v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fTime, 1);
  }
  else
  {
    v4->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
}
// A7F1F0: using guessed type float SpeechBD__ms_fMaxDistance;
// A7F1F4: using guessed type float SpeechBD__ms_fTransNear;
// A7F1F8: using guessed type float SpeechBD__ms_fTransFar;
// B5BB4B: using guessed type char byte_B5BB4B;

//----- (0062A1C0) --------------------------------------------------------
void __thiscall SpeechBD::SetSpeech(SpeechBD *this, char *pcSpeech)
{
  SpeechBD *v2; // esi@1
  char *v3; // eax@3
  char *v4; // edx@3
  char v5; // cl@4
  unsigned int v6; // edi@5
  char *v7; // edx@10
  char *v8; // ecx@10
  char v9; // al@11
  IDirect3DSurface9 *v10; // eax@13
  IDirect3DSurface9 *v11; // esi@15
  char *v12; // eax@17

  v2 = this;
  if ( pcSpeech && *pcSpeech )
  {
    v3 = pcSpeech;
    v4 = pcSpeech + 1;
    do
      v5 = *v3++;
    while ( v5 );
    v6 = v3 - v4;
    if ( v2->m_uiSpeechLen < v3 - v4 )
    {
      operator delete__(v2->m_pcSpeech);
      v2->m_pcSpeech = (char *)operator new__(v6 + 1);
      v2->m_uiSpeechLen = v6;
    }
    if ( g_pkMainChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount > 0 && v6 )
      memset(pcSpeech, 32, v6);
    v7 = v2->m_pcSpeech;
    v8 = pcSpeech;
    do
    {
      v9 = *v8;
      *v7++ = *v8++;
    }
    while ( v9 );
    if ( SpeechBD::BeginDraw(v2) )
    {
      SpeechBD::CalculateLine(v2);
      SpeechBD::DrawFrame(v2);
      SpeechBD::DrawTextA(v2);
      SpeechBD::CopyTexture(v2);
      v10 = v2->m_lpSurSrc;
      if ( v10 )
        v10->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v2->m_lpSurSrc);
      v11 = v2->m_lpSurDest;
      if ( v11 )
        v11->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v11);
    }
  }
  else
  {
    v12 = this->m_pcSpeech;
    if ( v12 )
    {
      *v12 = 0;
      this->m_uiTotalLine = 0;
    }
  }
}

//----- (0062A2A0) --------------------------------------------------------
void __thiscall SpeechBD::SetOutLineColorID(SpeechBD *this, char kColorID)
{
  SpeechBD *v2; // ebx@1
  ChatColor *v3; // eax@2
  D3DXCOLOR *v4; // ecx@3
  signed int v5; // edi@4
  double v6; // st4@8
  double v7; // st7@8
  signed int v8; // esi@9
  signed int v9; // edx@15
  double v10; // qtt@16
  double v11; // st4@16
  double v12; // st7@16
  double v13; // qt0@19
  signed int v14; // eax@21
  D3DXCOLOR result; // [sp+4h] [bp-18h]@3
  __int64 v16; // [sp+14h] [bp-8h]@7

  v2 = this;
  if ( kColorID )
  {
    v3 = ChatColorTab::GetByID(kColorID);
    if ( v3 )
    {
      v4 = Color::GetDxColor(&result, v3->ColorR, v3->ColorG, v3->ColorB, -1);
      if ( v4->r < 1.0 )
      {
        if ( v4->r > 0.0 )
        {
          v16 = (signed __int64)(v4->r * 255.0 + 0.5);
          v5 = v16;
        }
        else
        {
          v5 = 0;
        }
      }
      else
      {
        v5 = 255;
      }
      v6 = 1.0;
      v7 = 0.0;
      if ( v4->g < 1.0 )
      {
        if ( v4->g > 0.0 )
        {
          v16 = (signed __int64)(v4->g * 255.0 + 0.5);
          v8 = v16;
        }
        else
        {
          v8 = 0;
        }
        v6 = 1.0;
        v7 = 0.0;
      }
      else
      {
        v8 = 255;
      }
      if ( v6 > v4->b )
      {
        v10 = v6;
        v11 = v7;
        v12 = v10;
        if ( v11 < v4->b )
        {
          v16 = (signed __int64)(v4->b * 255.0 + 0.5);
          v9 = v16;
        }
        else
        {
          v9 = 0;
        }
        v13 = v11;
        v6 = v12;
        v7 = v13;
      }
      else
      {
        v9 = 255;
      }
      if ( v6 > v4->a )
      {
        if ( v7 < v4->a )
        {
          v16 = (signed __int64)(255.0 * v4->a + 0.5);
          v14 = v16;
        }
        else
        {
          v14 = 0;
        }
      }
      else
      {
        v14 = 255;
      }
      v2->m_dwOutLineColor = v9 | ((v8 | ((v5 | (v14 << 8)) << 8)) << 8);
    }
  }
}

//----- (0062A430) --------------------------------------------------------
void __thiscall SpeechBD::SetTextColorID(SpeechBD *this, char kColorID)
{
  SpeechBD *v2; // ebx@1
  ChatColor *v3; // eax@2
  D3DXCOLOR *v4; // ecx@3
  signed int v5; // edi@4
  double v6; // st4@8
  double v7; // st7@8
  signed int v8; // esi@9
  signed int v9; // edx@15
  double v10; // qtt@16
  double v11; // st4@16
  double v12; // st7@16
  double v13; // qt0@19
  signed int v14; // eax@21
  D3DXCOLOR result; // [sp+4h] [bp-18h]@3
  __int64 v16; // [sp+14h] [bp-8h]@7

  v2 = this;
  if ( kColorID )
  {
    v3 = ChatColorTab::GetByID(kColorID);
    if ( v3 )
    {
      v4 = Color::GetDxColor(&result, v3->ColorR, v3->ColorG, v3->ColorB, -1);
      if ( v4->r < 1.0 )
      {
        if ( v4->r > 0.0 )
        {
          v16 = (signed __int64)(v4->r * 255.0 + 0.5);
          v5 = v16;
        }
        else
        {
          v5 = 0;
        }
      }
      else
      {
        v5 = 255;
      }
      v6 = 1.0;
      v7 = 0.0;
      if ( v4->g < 1.0 )
      {
        if ( v4->g > 0.0 )
        {
          v16 = (signed __int64)(v4->g * 255.0 + 0.5);
          v8 = v16;
        }
        else
        {
          v8 = 0;
        }
        v6 = 1.0;
        v7 = 0.0;
      }
      else
      {
        v8 = 255;
      }
      if ( v6 > v4->b )
      {
        v10 = v6;
        v11 = v7;
        v12 = v10;
        if ( v11 < v4->b )
        {
          v16 = (signed __int64)(v4->b * 255.0 + 0.5);
          v9 = v16;
        }
        else
        {
          v9 = 0;
        }
        v13 = v11;
        v6 = v12;
        v7 = v13;
      }
      else
      {
        v9 = 255;
      }
      if ( v6 > v4->a )
      {
        if ( v7 < v4->a )
        {
          v16 = (signed __int64)(255.0 * v4->a + 0.5);
          v14 = v16;
        }
        else
        {
          v14 = 0;
        }
      }
      else
      {
        v14 = 255;
      }
      v2->m_dwTextColor = v9 | ((v8 | ((v5 | (v14 << 8)) << 8)) << 8);
    }
  }
}

//----- (0062A5C0) --------------------------------------------------------
void __thiscall SpeechBD::CreateGeometry(SpeechBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  SpeechBD *v3; // esi@1
  NiTexture *v4; // edi@1
  int v5; // ebx@1
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@1
  NiTexture *v8; // ST08_4@1
  NiScreenElementsData *v9; // ebx@1
  void *v10; // eax@1
  NiTexture *v11; // eax@2
  NiScreenElements *v12; // ebx@4
  void *v13; // eax@12
  int v14; // eax@13
  int v15; // ebx@13
  void *v16; // eax@17
  int v17; // eax@18
  int v18; // edi@18

  v3 = this;
  v4 = pkTexture;
  v5 = ((int (__thiscall *)(NiTexture *))pkTexture->baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTexture);
  pkTexture = (NiTexture *)((int (__thiscall *)(NiTexture *))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
  v6 = 81 * iTexturePosIndex / (v5 / 0x94u);
  v7 = 148 * iTexturePosIndex % (v5 / 0x94u);
  v3->m_uiTextureYPos = v6;
  v8 = pkTexture;
  v3->m_uiTextureXPos = v7;
  v9 = PgUtil::CreateScreenGeometryData(v5, (unsigned int)v8, v7, v6, 0x94u, 0x51u);
  v3->m_pkTexture = v4;
  v10 = operator new(0xC4u);
  pkTexture = (NiTexture *)v10;
  if ( v10 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v10, v9);
    pkTexture = v11;
  }
  else
  {
    pkTexture = 0;
    v11 = 0;
  }
  v12 = v3->m_spScreenGeom.m_pObject;
  if ( (NiTexture *)v12 != v11 )
  {
    if ( v12 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v12,
          1u);
      v11 = pkTexture;
    }
    v3->m_spScreenGeom.m_pObject = (NiScreenElements *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v13 = operator new(0x44u);
  pkTexture = (NiTexture *)v13;
  if ( v13 )
  {
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v13);
    v15 = v14;
  }
  else
  {
    v15 = 0;
  }
  NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v15, v4);
  NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v15, 0);
  *(_DWORD *)(v15 + 28) = 2;
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v15;
  InterlockedIncrement((volatile LONG *)(v15 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
  v16 = operator new(0x60u);
  pkTexture = (NiTexture *)v16;
  if ( v16 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v16);
    v18 = v17;
  }
  else
  {
    v18 = 0;
  }
  ++*(_DWORD *)(v18 + 88);
  *(float *)(v18 + 68) = 1.0;
  *(float *)(v18 + 72) = 1.0;
  *(float *)(v18 + 76) = 1.0;
  iTexturePosIndex = (int)v3->m_spScreenGeom.m_pObject;
  pkTexture = (NiTexture *)v18;
  InterlockedIncrement((volatile LONG *)(v18 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(iTexturePosIndex + 156),
    (NiPointer<NiRoom> *)&pkTexture);
  if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  NiAVObject::UpdateProperties(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
  v3->m_spScreenGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (0062A800) --------------------------------------------------------
void __thiscall SpeechBD::SpeechBD(SpeechBD *this, NiTexture *pkTexture, int iTexturePosIndex)
{
  SpeechBD *v3; // esi@1
  signed int v4; // edi@1
  D3DXCOLOR *v5; // ecx@3
  signed int v6; // ebx@4
  double v7; // st4@8
  double v8; // st7@8
  signed int v9; // edx@14
  double v10; // qtt@15
  double v11; // st4@15
  double v12; // st7@15
  double v13; // qt0@18
  signed int v14; // eax@20
  D3DXCOLOR *v15; // ecx@24
  double v16; // st6@25
  signed int v17; // ebx@25
  double v18; // st5@25
  double v19; // st4@25
  double v20; // st5@27
  double v21; // st4@27
  double v22; // qtt@29
  double v23; // st4@29
  double v24; // qt0@29
  double v25; // qt1@30
  double v26; // st4@30
  double v27; // st7@30
  signed int v28; // edi@31
  signed int v29; // edx@37
  double v30; // qt0@38
  double v31; // st4@38
  double v32; // st7@38
  double v33; // qt1@41
  signed int v34; // eax@43
  double v35; // qt2@44
  double v36; // st5@44
  double v37; // st7@44
  D3DXCOLOR result; // [sp+0h] [bp-28h]@3
  __int64 v39; // [sp+10h] [bp-18h]@7
  SpeechBD *v40; // [sp+18h] [bp-10h]@1
  int v41; // [sp+24h] [bp-4h]@1

  v3 = this;
  v40 = this;
  v4 = 0;
  this->vfptr = (SpeechBDVtbl *)&SpeechBD::_vftable_;
  this->m_spScreenGeom.m_pObject = 0;
  this->m_fStartTime = 0.0;
  this->m_kCharHandle = -1;
  v41 = 0;
  this->m_bAlive = 1;
  this->m_pcSpeech = 0;
  this->m_uiSpeechLen = 0;
  this->m_iTextureIndex = iTexturePosIndex;
  if ( pkTexture )
    SpeechBD::CreateGeometry(this, pkTexture, iTexturePosIndex);
  v3->m_fLifeTime = 8.0;
  v5 = Color::GetDxColor(&result, -31, -1, -1, -1);
  if ( v5->r < 1.0 )
  {
    if ( v5->r > 0.0 )
    {
      v39 = (signed __int64)(v5->r * 255.0 + 0.5);
      v6 = v39;
    }
    else
    {
      v6 = 0;
    }
  }
  else
  {
    v6 = 255;
  }
  v7 = 1.0;
  v8 = 0.0;
  if ( v5->g < 1.0 )
  {
    if ( v5->g > 0.0 )
    {
      v39 = (signed __int64)(v5->g * 255.0 + 0.5);
      v4 = v39;
    }
    v7 = 1.0;
    v8 = 0.0;
  }
  else
  {
    v4 = 255;
  }
  if ( v7 > v5->b )
  {
    v10 = v7;
    v11 = v8;
    v12 = v10;
    if ( v11 < v5->b )
    {
      v39 = (signed __int64)(v5->b * 255.0 + 0.5);
      v9 = v39;
    }
    else
    {
      v9 = 0;
    }
    v13 = v11;
    v7 = v12;
    v8 = v13;
  }
  else
  {
    v9 = 255;
  }
  if ( v7 > v5->a )
  {
    if ( v8 < v5->a )
    {
      v39 = (signed __int64)(255.0 * v5->a + 0.5);
      v14 = v39;
    }
    else
    {
      v14 = 0;
    }
  }
  else
  {
    v14 = 255;
  }
  v3->m_dwOutLineColor = v9 | ((v4 | ((v6 | (v14 << 8)) << 8)) << 8);
  v15 = Color::GetDxColor(&result, -28, -38, -78, -1);
  if ( v15->r < 1.0 )
  {
    if ( v15->r > 0.0 )
    {
      v21 = 255.0;
      v20 = 0.5;
      v39 = (signed __int64)(v15->r * 255.0 + 0.5);
      v17 = v39;
    }
    else
    {
      v20 = 0.5;
      v17 = 0;
      v21 = 255.0;
    }
    v22 = v21;
    v23 = v20;
    v18 = v22;
    v24 = v23;
    v19 = 0.0;
    v16 = v24;
  }
  else
  {
    v16 = 0.5;
    v17 = 255;
    v18 = 255.0;
    v19 = 0.0;
  }
  v25 = v19;
  v26 = 1.0;
  v27 = v25;
  if ( v15->g < 1.0 )
  {
    if ( v27 < v15->g )
    {
      v39 = (signed __int64)(v15->g * v18 + v16);
      v28 = v39;
    }
    else
    {
      v28 = 0;
    }
    v26 = 1.0;
  }
  else
  {
    v28 = 255;
  }
  if ( v26 > v15->b )
  {
    v30 = v26;
    v31 = v27;
    v32 = v30;
    if ( v31 < v15->b )
    {
      v39 = (signed __int64)(v15->b * v18 + v16);
      v29 = v39;
    }
    else
    {
      v29 = 0;
    }
    v33 = v31;
    v26 = v32;
    v27 = v33;
  }
  else
  {
    v29 = 255;
  }
  if ( v26 > v15->a )
  {
    v35 = v18;
    v36 = v27;
    v37 = v35;
    if ( v36 < v15->a )
    {
      v39 = (signed __int64)(v37 * v15->a + v16);
      v34 = v39;
    }
    else
    {
      v34 = 0;
    }
  }
  else
  {
    v34 = 255;
  }
  v3->m_dwTextColor = v29 | ((v28 | ((v17 | (v34 << 8)) << 8)) << 8);
}
// 9C1354: using guessed type int (__thiscall *SpeechBD___vftable_)(void *p, char);

//----- (0062AB60) --------------------------------------------------------
void *__thiscall SpeechBD::_vector_deleting_destructor_(SpeechBD *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SpeechBD::_SpeechBD(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0062AB90) --------------------------------------------------------
void __thiscall GMCommandWin::GMCommandWin(GMCommandWin *this)
{
  GMCommandWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GMCommandWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GMCommandWin::_vftable_;
}
// 9C1424: using guessed type int (__stdcall *GMCommandWin___vftable_)(int uiFlags);
// 9C1444: using guessed type int (__thiscall *GMCommandWin___vftable_)(void *p, char);

//----- (0062ABB0) --------------------------------------------------------
void __thiscall GMCommandWin::_GMCommandWin(GMCommandWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GMCommandWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GMCommandWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9C1424: using guessed type int (__stdcall *GMCommandWin___vftable_)(int uiFlags);
// 9C1444: using guessed type int (__thiscall *GMCommandWin___vftable_)(void *p, char);

//----- (0062ABF0) --------------------------------------------------------
bool __thiscall GMCommandWin::Create(GMCommandWin *this, PgFrameWork *pkFrameWork)
{
  PgWinFrame *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  PgSprData *v9; // eax@10
  PgSprData *v10; // ebx@10
  NiNode *v11; // esi@11
  PgFont *v12; // eax@16
  PgWinText *v13; // ebx@16
  PgSprData *v14; // ebx@16
  PgSprData::PgHitTester *v15; // eax@16
  unsigned int v16; // ebx@16
  PgFont *v17; // eax@16
  PgWinText *v18; // ebx@16
  PgSprData *v19; // ebx@16
  PgSprData::PgHitTester *v20; // eax@16
  unsigned int v21; // ebx@16
  PgFont *v22; // eax@16
  PgWinText *v23; // ebx@16
  PgSprData *v24; // ebx@16
  PgSprData::PgHitTester *v25; // eax@16
  unsigned int v26; // ebx@16
  PgFont *v27; // eax@16
  PgWinText *v28; // ebx@16
  char *v29; // eax@16
  PgSprData *v30; // ebx@16
  PgSprData::PgHitTester *v31; // eax@16
  unsigned int v32; // ebx@16
  PgFont *v33; // eax@16
  PgWinText *v34; // edi@16
  NiNode *v35; // esi@17
  unsigned int uiWidth; // [sp+58h] [bp-20h]@10
  unsigned int uiHeight; // [sp+5Ch] [bp-1Ch]@10
  NiPointer<NiNode> spNode; // [sp+60h] [bp-18h]@1
  int uiLeft; // [sp+64h] [bp-14h]@4
  int uiTop; // [sp+68h] [bp-10h]@4
  int v41; // [sp+74h] [bp-4h]@1
  int iYOff; // [sp+80h] [bp+8h]@10
  unsigned int iYOffa; // [sp+80h] [bp+8h]@16
  unsigned int iYOffb; // [sp+80h] [bp+8h]@16
  unsigned int iYOffc; // [sp+80h] [bp+8h]@16
  NiRefObjectVtbl *iYOffd; // [sp+80h] [bp+8h]@16
  unsigned int iYOffe; // [sp+80h] [bp+8h]@16

  v2 = (PgWinFrame *)this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v41 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GMCommand.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(v2, 0, 0, v5, 0, pkFrameWork, "GMCommandWin", 0) )
  {
    v6 = spNode.m_pObject;
    v41 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  iYOff = uiTop;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v9, &v2->baseclass_0.baseclass_0, 0, 0);
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v10, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v8, uiTop - iYOff, v10, &v2->baseclass_0.baseclass_0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v12 = Font::Get(0);
    v13 = PgWinText::CreateWin(uiLeft - v8, uiTop, uiWidth, uiHeight, v12, &v2->baseclass_0.baseclass_0, 0, 0);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v13,
      1u);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v13,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v13,
      (unsigned int)"GM¸í·É¾î");
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v13,
      0);
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgWinBut::CreateWin(uiLeft - v8, uiTop, v14, &v2->baseclass_0.baseclass_0, 1u, 0, 0);
    v15 = v14->m_akHitTester.m_pBase->m_pObject;
    v16 = v15->m_uiHeight;
    iYOffa = v15->m_uiWidth;
    v17 = Font::Get(0);
    v18 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, iYOffa, v16, v17, &v2->baseclass_0.baseclass_0, 0, 0);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v18,
      5u);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v18,
      (unsigned int)&unk_9C13DC);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
    PgWinBut::CreateWin(uiLeft - v8, uiTop, v19, &v2->baseclass_0.baseclass_0, 2u, 0, 0);
    v20 = v19->m_akHitTester.m_pBase->m_pObject;
    v21 = v20->m_uiHeight;
    iYOffb = v20->m_uiWidth;
    v22 = Font::Get(0);
    v23 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, iYOffb, v21, v22, &v2->baseclass_0.baseclass_0, 0, 0);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v23,
      5u);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v23,
      (unsigned int)&unk_9C13F0);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      0);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, 0);
    PgWinBut::CreateWin(uiLeft - v8, uiTop, v24, &v2->baseclass_0.baseclass_0, 3u, 0, 0);
    v25 = v24->m_akHitTester.m_pBase->m_pObject;
    v26 = v25->m_uiHeight;
    iYOffc = v25->m_uiWidth;
    v27 = Font::Get(0);
    v28 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, iYOffc, v26, v27, &v2->baseclass_0.baseclass_0, 0, 0);
    v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v28,
      5u);
    iYOffd = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v29 = TextData::Get(0x33414E85u);
    iYOffd[118].__vecDelDtor((NiRefObject *)v28, (unsigned int)v29);
    v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v28,
      0);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, &uiTop, 0);
    PgWinBut::CreateWin(uiLeft - v8, uiTop, v30, &v2->baseclass_0.baseclass_0, 4u, 0, 0);
    v31 = v30->m_akHitTester.m_pBase->m_pObject;
    v32 = v31->m_uiHeight;
    iYOffe = v31->m_uiWidth;
    v33 = Font::Get(0);
    v34 = PgWinText::CreateWin(uiLeft - v8, uiTop + 1, iYOffe, v32, v33, &v2->baseclass_0.baseclass_0, 0, 0);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v34,
      5u);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
      (NiRefObject *)v34,
      (unsigned int)&unk_9C1414);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v34,
      0);
    ((void (__thiscall *)(PgWinFrame *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      1.0,
      0.5);
    v41 = -1;
    if ( spNode.m_pObject )
    {
      v35 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v35 )
          v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v11 = spNode.m_pObject;
    v41 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0062B100) --------------------------------------------------------
GMCommandWin *__cdecl GMCommandWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GMCommandWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GMCommandWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GMCommandWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GMCommandWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9C1424: using guessed type int (__stdcall *GMCommandWin___vftable_)(int uiFlags);
// 9C1444: using guessed type int (__thiscall *GMCommandWin___vftable_)(void *p, char);

//----- (0062B240) --------------------------------------------------------
void *__thiscall GMCommandWin::_scalar_deleting_destructor_(GMCommandWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GMCommandWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GMCommandWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C1424: using guessed type int (__stdcall *GMCommandWin___vftable_)(int uiFlags);
// 9C1444: using guessed type int (__thiscall *GMCommandWin___vftable_)(void *p, char);

//----- (0062B280) --------------------------------------------------------
void __thiscall GMPrisonWin::GMPrisonWin(GMPrisonWin *this)
{
  GMPrisonWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GMPrisonWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GMPrisonWin::_vftable_;
  v1->m_pkCharNameInputEdit = 0;
}
// 9C1720: using guessed type int (__stdcall *GMPrisonWin___vftable_)(int uiFlags);
// 9C173C: using guessed type int (__thiscall *GMPrisonWin___vftable_)(void *p, char);

//----- (0062B2B0) --------------------------------------------------------
void __thiscall GMPrisonWin::_GMPrisonWin(GMPrisonWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GMPrisonWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GMPrisonWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9C1720: using guessed type int (__stdcall *GMPrisonWin___vftable_)(int uiFlags);
// 9C173C: using guessed type int (__thiscall *GMPrisonWin___vftable_)(void *p, char);

//----- (0062B2D0) --------------------------------------------------------
void __thiscall GMPrisonWin::OnCmdCancel(GMPrisonWin *this)
{
  PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0062B300) --------------------------------------------------------
void __thiscall GMPrisonWin::SetCharName(GMPrisonWin *this, const char *name)
{
  if ( this->m_pkCharNameInputEdit )
    ((void (__stdcall *)(_DWORD))this->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(name);
}

//----- (0062B340) --------------------------------------------------------
bool __thiscall GMPrisonWin::Create(GMPrisonWin *this, PgFrameWork *pkFrameWork)
{
  GMPrisonWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  int v11; // ebx@15
  PgSprData *v12; // eax@15
  PgWinSpr *v13; // eax@15
  PgFont *v14; // eax@16
  char *v15; // eax@16
  PgFont *v16; // eax@17
  char *v17; // eax@17
  EditWin *v18; // eax@17
  NiNode *v19; // edx@17
  PgFont *v20; // eax@20
  char *v21; // eax@20
  PgFont *v22; // eax@21
  char *v23; // eax@21
  EditWin *v24; // eax@21
  NiNode *v25; // edx@21
  PgSprData *v26; // eax@21
  PgSprData *v27; // eax@23
  PgWin *v28; // ST48_4@23
  PgFont *v29; // eax@23
  char *v30; // ST4C_4@23
  PgSprData *v31; // eax@23
  PgWin *v32; // ST3C_4@23
  PgFont *v33; // eax@23
  PgWinText *v34; // edi@23
  NiRefObjectVtbl *v35; // ebx@23
  char *v36; // eax@23
  UIUtil ui; // [sp+50h] [bp-3Ch]@17
  NiRefObjectVtbl *v38; // [sp+64h] [bp-28h]@16
  NiSourceTexture *pkTexture; // [sp+68h] [bp-24h]@1
  unsigned int uiWidth; // [sp+6Ch] [bp-20h]@15
  unsigned int uiHeight; // [sp+70h] [bp-1Ch]@15
  NiPointer<NiNode> spNode; // [sp+74h] [bp-18h]@1
  int uiLeft; // [sp+78h] [bp-14h]@11
  int uiTop; // [sp+7Ch] [bp-10h]@11
  int v45; // [sp+88h] [bp-4h]@1
  PgSprData *pkWinTxt; // [sp+94h] [bp+8h]@15
  PgWinText *pkWinTxta; // [sp+94h] [bp+8h]@16
  PgWinText *pkWinTxtb; // [sp+94h] [bp+8h]@17
  PgWinText *pkWinTxtc; // [sp+94h] [bp+8h]@20
  PgWinText *pkWinTxtd; // [sp+94h] [bp+8h]@21
  PgWinText *pkWinTxte; // [sp+94h] [bp+8h]@23

  v2 = this;
  spNode.m_pObject = 0;
  v45 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v45 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\GMArrest.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "PrivateStoreWin", 0) )
  {
    v4 = spNode.m_pObject;
    v45 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  v11 = uiTop;
  pkWinTxt = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkWinTxt, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkWinTxt, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, pkWinTxt, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v13,
    0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v14 = Font::Get(0),
        pkWinTxta = PgWinText::CreateWin(
                      uiLeft - v10,
                      uiTop - v11 + 1,
                      uiWidth,
                      uiHeight,
                      v14,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0),
        pkWinTxta->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkWinTxta,
          1u),
        ((void (__stdcall *)(__int64 *))pkWinTxta->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v38 = pkWinTxta->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v15 = TextData::Get(0x92A08DDAu),
        v38[118].__vecDelDtor((NiRefObject *)pkWinTxta, (unsigned int)v15),
        ((void (__stdcall *)(_DWORD))pkWinTxta->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "ID", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_19:
    v45 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v16 = Font::Get(0);
  pkWinTxtb = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v16,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
  v38 = pkWinTxtb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v17 = TextData::Get(0x464C888Au);
  v38[118].__vecDelDtor((NiRefObject *)pkWinTxtb, (unsigned int)v17);
  UIUtil::UIUtil(&ui);
  LOBYTE(v45) = 1;
  UIUtil::SetOffset(&ui, v10, v11 + 2);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v18 = UIUtil::CreateEdit(&ui, "InputID", 20, NORMAL, pkTexture, 0);
  v19 = spNode.m_pObject;
  v2->m_pkCharNameInputEdit = v18;
  if ( !PgUtil::GetTriShapeRect(&v19->baseclass_0, "Time", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v20 = Font::Get(0),
        pkWinTxtc = PgWinText::CreateWin(
                      uiLeft - v10,
                      uiTop - v11,
                      uiWidth,
                      uiHeight,
                      v20,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0),
        v38 = pkWinTxtc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v21 = TextData::Get(0x8B998D95u),
        v38[118].__vecDelDtor((NiRefObject *)pkWinTxtc, (unsigned int)v21),
        v2->m_pkTimeInputEdit = UIUtil::CreateEdit(&ui, "InputTime", 4, NUMBER, pkTexture, 0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Reason", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
    LOBYTE(v45) = 0;
    UIUtil::_UIUtil(&ui);
    goto LABEL_19;
  }
  v22 = Font::Get(0);
  pkWinTxtd = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop - v11,
                uiWidth,
                uiHeight,
                v22,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
  v38 = pkWinTxtd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0x9A8FD7D6u);
  v38[118].__vecDelDtor((NiRefObject *)pkWinTxtd, (unsigned int)v23);
  v24 = UIUtil::CreateEdit(&ui, "InputReason", 14, NORMAL, pkTexture, 0);
  v25 = spNode.m_pObject;
  v2->m_pkReasonInputEdit = v24;
  BYTE3(pkWinTxtd) = PgUtil::GetTriShapeRect(&v25->baseclass_0, "Editor", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Editor", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - v11, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( BYTE3(pkWinTxtd) )
    v2->m_pkRemarkInputEdit = EditWin::CreateWin(
                                uiLeft - v10,
                                uiTop - v11,
                                uiWidth,
                                uiHeight,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                MULTILINE,
                                0x100u,
                                4u,
                                0,
                                0,
                                1);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Ok", &uiLeft, &uiTop, pkTexture);
  v2->m_pkOk = PgWinBut::CreateWin(uiLeft - v10, uiTop - v11, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Ok", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v28 = (PgWin *)v2->m_pkOk;
  v29 = Font::Get(0);
  pkWinTxte = PgWinText::CreateWin(uiLeft - v10, uiTop - v11, uiWidth, uiHeight, v29, v28, 0, 0);
  ((void (__thiscall *)(PgWinText *))pkWinTxte->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(pkWinTxte);
  v38 = pkWinTxte->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v30 = TextData::Get(0x9995E4E0u);
  ((void (__thiscall *)(PgWinText *))v38[118].__vecDelDtor)(pkWinTxte);
  ((void (__cdecl *)(_DWORD, char *, signed int))pkWinTxte->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    0,
    v30,
    5);
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Modif", &uiLeft, &uiTop, pkTexture);
  v2->m_pkModifBut = PgWinBut::CreateWin(
                       uiLeft - v10,
                       uiTop - v11,
                       v31,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0xDu,
                       0,
                       0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Modif", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v32 = (PgWin *)v2->m_pkModifBut;
  v33 = Font::Get(0);
  v34 = PgWinText::CreateWin(uiLeft - v10, uiTop - v11, uiWidth, uiHeight, v33, v32, 0, 0);
  ((void (__thiscall *)(PgWinText *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v34);
  v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v36 = TextData::Get(0x2C3D282Fu);
  v35[118].__vecDelDtor((NiRefObject *)v34, (unsigned int)v36);
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v34,
    0);
  ((void (__thiscall *)(GMPrisonWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v45) = 0;
  UIUtil::_UIUtil(&ui);
  v45 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0062BA40) --------------------------------------------------------
void __thiscall GMPrisonWin::SendGMReq(GMPrisonWin *this, bool bAdd)
{
  GMPrisonWin *v2; // esi@1
  int v3; // edi@1
  void *v4; // eax@1
  EditWin *v5; // ecx@1
  int v6; // ebx@1
  const char *v7; // eax@1
  int v8; // ecx@2
  int v9; // edi@2
  char v10; // dl@3
  char *v11; // eax@6
  const char *v12; // ecx@7
  char v13; // dl@8
  int v14; // ecx@11
  char v15; // dl@12
  void *v16; // ecx@15
  char v17; // dl@16
  int v18; // edi@19
  int v19; // eax@19
  EditWin *v20; // ecx@19
  int v21; // eax@19
  EditWin *v22; // ecx@19
  int (*v23)(void); // edx@19
  const char *v24; // eax@19
  Name5 v25; // [sp-20h] [bp-34h]@20
  int v26; // [sp-Ch] [bp-20h]@19
  char *v27; // [sp-8h] [bp-1Ch]@19
  unsigned int v28; // [sp-4h] [bp-18h]@5
  char *remark; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = ((int (*)(void))this->m_pkCharNameInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v4 = (void *)((int (*)(void))v2->m_pkRemarkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v5 = v2->m_pkReasonInputEdit;
  remark = (char *)v4;
  v6 = ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v7 = (const char *)((int (*)(void))v2->m_pkTimeInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  if ( v3 )
  {
    v8 = v3;
    v9 = v3 + 1;
    do
      v10 = *(_BYTE *)v8++;
    while ( v10 );
    if ( v8 == v9 )
    {
      v28 = -2037871133;
LABEL_6:
      v11 = TextData::Get(v28);
      MsgBox::Modeless(MSGBOX_OK, v11);
      return;
    }
    v12 = v7;
    do
      v13 = *v12++;
    while ( v13 );
    if ( v12 == v7 + 1 )
    {
      v28 = -549244123;
      goto LABEL_6;
    }
    v14 = v6;
    do
      v15 = *(_BYTE *)v14++;
    while ( v15 );
    if ( v14 == v6 + 1 )
    {
      v28 = 542255471;
      goto LABEL_6;
    }
    v16 = remark;
    do
    {
      v17 = *(_BYTE *)v16;
      v16 = (char *)v16 + 1;
    }
    while ( v17 );
    if ( v16 == remark + 1 )
    {
      v28 = -733139926;
      goto LABEL_6;
    }
    v18 = (unsigned __int16)atoi(v7);
    v19 = ((int (*)(void))v2->m_pkRemarkInputEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v20 = v2->m_pkReasonInputEdit;
    v28 = v19;
    v21 = ((int (*)(void))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v22 = v2->m_pkCharNameInputEdit;
    v27 = (char *)v21;
    v23 = (int (*)(void))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor;
    v26 = v18;
    v24 = (const char *)v23();
    if ( bAdd )
    {
      Name5::Name5(&v25, v24);
      GameFrameWork::NcPrisonAddGMReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v25, v26, v27, (char *)v28);
    }
    else
    {
      Name5::Name5(&v25, v24);
      GameFrameWork::NcPrisonAlterGMReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v25, v26, v27, (char *)v28);
    }
  }
}

//----- (0062BBA0) --------------------------------------------------------
void __thiscall GMPrisonWin::OnModif(GMPrisonWin *this)
{
  GMPrisonWin::SendGMReq(this, 0);
}

//----- (0062BBB0) --------------------------------------------------------
void __thiscall GMPrisonWin::OnCmdOk(GMPrisonWin *this)
{
  GMPrisonWin::SendGMReq(this, 1);
}

//----- (0062BBC0) --------------------------------------------------------
void __thiscall GMPrisonWin::OnCommand(GMPrisonWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xAu:
      GMPrisonWin::SendGMReq(this, 1);
      break;
    case 0xBu:
    case 0xCu:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 0xDu:
      GMPrisonWin::SendGMReq(this, 0);
      break;
    default:
      return;
  }
}

//----- (0062BC10) --------------------------------------------------------
GMPrisonWin *__cdecl GMPrisonWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GMPrisonWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GMPrisonWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GMPrisonWin::_vftable_;
    *((_DWORD *)v2 + 88) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GMPrisonWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9C1720: using guessed type int (__stdcall *GMPrisonWin___vftable_)(int uiFlags);
// 9C173C: using guessed type int (__thiscall *GMPrisonWin___vftable_)(void *p, char);

//----- (0062BD50) --------------------------------------------------------
void *__thiscall GMPrisonWin::_scalar_deleting_destructor_(GMPrisonWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GMPrisonWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GMPrisonWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C1720: using guessed type int (__stdcall *GMPrisonWin___vftable_)(int uiFlags);
// 9C173C: using guessed type int (__thiscall *GMPrisonWin___vftable_)(void *p, char);

//----- (0062BDA0) --------------------------------------------------------
bool __thiscall LinkFrameWork::InitWindow(LinkFrameWork *this, unsigned __int16 mapid)
{
  int v2; // edi@1
  LinkFrameWork *v3; // esi@1
  int v4; // eax@3
  int v5; // eax@3
  NiSourceTexture *v6; // ebx@3
  _iobuf *v8; // eax@8
  NiImageConverter *v9; // eax@13
  NiPixelData *v10; // eax@13
  char v11; // kr00_1@18
  _iobuf *v12; // eax@20
  NiSourceTexture *v13; // eax@25
  PgWinSpr *v14; // eax@30
  PgWinSpr *v15; // eax@30
  NiAlphaController *v16; // eax@30
  NiAlphaController *v17; // edi@30
  NiAlphaController *v18; // ebx@30
  NiProperty *v19; // eax@37
  NiAlphaController *v20; // ecx@37
  PgWinSpr *v21; // eax@37
  int v22; // edi@37
  int v23; // eax@39
  int v24; // eax@40
  int v25; // ecx@41
  int v26; // edx@41
  int v27; // eax@41
  int v28; // [sp+38h] [bp-128h]@3
  NiSourceTexture *spTexture; // [sp+3Ch] [bp-124h]@15
  char acPathName[256]; // [sp+40h] [bp-120h]@8
  char acName[13]; // [sp+140h] [bp-20h]@14
  unsigned int v32; // [sp+150h] [bp-10h]@1
  int v33; // [sp+15Ch] [bp-4h]@17
  int v34; // [sp+160h] [bp+0h]@1

  v32 = (unsigned int)&v34 ^ __security_cookie;
  v2 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable;
  v3 = this;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD, unsigned int))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable
                                                                          + 16))(
                           ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
                           mapid,
                           (unsigned int)&v34 ^ __security_cookie)
    || mapid > *(_WORD *)(v2 + 200)
    || (v4 = 4 * mapid, v28 = v4, v5 = *(_DWORD *)(v2 + 196) + v4, v6 = 0, !*(_DWORD *)v5)
    || !*(_DWORD *)v5 )
    return 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sLoading\\%s.png");
  v8 = fopen(acPathName, "r");
  if ( v8 )
  {
    fclose(v8);
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acPathName, "%sLoading\\%s.tga");
  }
  v9 = NiImageConverter::GetImageConverter();
  v10 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v9->baseclass_0.vfptr[2].__vecDelDtor)(
                         v9,
                         acPathName,
                         0);
  if ( v10 )
  {
    *(_DWORD *)acName = 6;
    *(_DWORD *)&acName[4] = 3;
    *(_DWORD *)&acName[8] = 0;
    v6 = NiSourceTexture::Create(v10, (NiTexture::FormatPrefs *)acName);
  }
  spTexture = v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v33 = 0;
  if ( !v6 )
  {
    v11 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 16))(
            ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
            0);
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acPathName, "%sLoading\\%s.png");
    v12 = fopen(acPathName, "r");
    if ( v12 )
    {
      fclose(v12);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      sprintf(acPathName, "%sLoading\\%s.tga");
    }
    v13 = PgUtil::LoadSourceTexture(acPathName);
    if ( v13 )
    {
      spTexture = v13;
    }
    else
    {
      v13 = MenuTexMgr::GetTexture(2u);
      if ( 0 == v13 || (spTexture = v13) == 0 )
        goto LABEL_30;
    }
    InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
LABEL_30:
  v14 = PgWinSpr::CreateWin(0, 0, spTexture, 0, 0, 0, 0x400u, 0x300u, 0, 0, 0);
  v3->m_pkBack = v14;
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v14,
    PgWin::ms_uiScreenWidth);
  ((void (__stdcall *)(unsigned int))v3->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(PgWin::ms_uiScreenHeight);
  ((void (__stdcall *)(_DWORD))v3->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v15 = PgWinSpr::CreateWin(63, 487, spTexture, 0, 0, 0x30Cu, 0x1D1u, 0x4Du, 0, 0, 0);
  v3->m_pkRainbowBox = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  ((void (__stdcall *)(_DWORD))v3->m_pkRainbowBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(1.0);
  v16 = PgWinAnim::CreateLoopingAlphaAnim();
  v17 = v3->m_spAlphaCtrl.m_pObject;
  v18 = v16;
  if ( v17 != v16 )
  {
    if ( v17
      && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v17,
        1u);
    v3->m_spAlphaCtrl.m_pObject = v18;
    if ( v18 )
      InterlockedIncrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v19 = NiAVObject::GetProperty(&v3->m_pkRainbowBox->baseclass_0.baseclass_0.baseclass_0, 3);
  v20 = v3->m_spAlphaCtrl.m_pObject;
  v3->m_pkMaterialProp = (NiMaterialProperty *)v19;
  ((void (__stdcall *)(NiProperty *))v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v19);
  RewardInvItem::SetItem(
    &v3->m_pkMaterialProp->baseclass_0.baseclass_0,
    &v3->m_spAlphaCtrl.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v21 = PgWinSpr::CreateWin(63, 487, spTexture, 0, 0, 0x366u, 0x1D1u, 0x4Du, 0, 0, 0);
  v3->m_pkTextBox = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v21,
    0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkBack->baseclass_0);
  v22 = ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 16))(
                          ITableBase<MapInfo_MapInfoTab>::ms_pkTable,
                          mapid) )
  {
    if ( mapid <= *(_WORD *)(v22 + 200) )
    {
      v23 = *(_DWORD *)(v22 + 196);
      if ( *(_DWORD *)(v23 + v28) )
      {
        v24 = *(_DWORD *)(v23 + v28);
        if ( v24 )
        {
          v25 = *(_DWORD *)(v24 + 2);
          v26 = *(_DWORD *)(v24 + 6);
          v27 = *(_DWORD *)(v24 + 10);
          *(_DWORD *)acName = v25;
          *(_DWORD *)&acName[8] = v27;
          *(_DWORD *)&acName[4] = v26;
          acName[12] = 0;
          if ( !strcmp(acName, "EldPri") )
            v3->m_bShowToolTip = 0;
        }
      }
    }
  }
  v33 = -1;
  if ( spTexture )
  {
    if ( !InterlockedDecrement((volatile LONG *)&spTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      spTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spTexture, 1u);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (0062C200) --------------------------------------------------------
void __thiscall LinkFrameWork::TerminateWindow(LinkFrameWork *this)
{
  LinkFrameWork *v1; // esi@1
  NiAlphaController *v2; // edi@1

  v1 = this;
  v2 = this->m_spAlphaCtrl.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spAlphaCtrl.m_pObject = 0;
  }
  if ( v1->m_pkBack )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkBack->baseclass_0);
    v1->m_pkBack = 0;
  }
  if ( v1->m_pkRainbowBox )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRainbowBox->baseclass_0);
    v1->m_pkRainbowBox = 0;
  }
  if ( v1->m_pkTextBox )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkTextBox->baseclass_0);
    v1->m_pkTextBox = 0;
  }
}

//----- (0062C270) --------------------------------------------------------
bool __thiscall LinkFrameWork::InitNet(LinkFrameWork *this)
{
  LinkFrameWork *v1; // ebx@1
  Net *v2; // esi@1
  Net *v3; // edi@1

  v1 = this;
  v2 = this->m_spZoneNet.m_pObject;
  v3 = g_kNetMgr.m_spZone[g_kNetMgr.m_iNowConnectedZone].m_pObject;
  if ( v2 != v3 )
  {
    if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spZoneNet.m_pObject = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount);
  }
  return v1->m_spZoneNet.m_pObject != 0;
}

//----- (0062C2D0) --------------------------------------------------------
void __thiscall LinkFrameWork::TerminateNet(LinkFrameWork *this)
{
  LinkFrameWork *v1; // edi@1
  Net *v2; // esi@1

  v1 = this;
  v2 = this->m_spZoneNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spZoneNet.m_pObject = 0;
  }
}

//----- (0062C310) --------------------------------------------------------
bool __thiscall LinkFrameWork::InitKeyMap(LinkFrameWork *this)
{
  LinkFrameWork *v1; // ebx@1
  int v2; // edi@1
  void *v3; // eax@2
  int v4; // eax@3
  KeyMap *v5; // esi@4

  v1 = this;
  v2 = 0;
  if ( !this->m_spKeyMap.m_pObject )
  {
    v3 = operator new(0x20u);
    if ( v3 )
    {
      KeyMap::KeyMap((KeyMap *)v3);
      v2 = v4;
    }
    v5 = v1->m_spKeyMap.m_pObject;
    if ( v5 != (KeyMap *)v2 )
    {
      if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spKeyMap.m_pObject = (KeyMap *)v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    v1->m_spKeyMap.m_pObject->m_pkFrameWork = (PgFrameWork *)v1;
  }
  return 1;
}

//----- (0062C3C0) --------------------------------------------------------
void __thiscall LinkFrameWork::TerminateKeyMap(LinkFrameWork *this)
{
  LinkFrameWork *v1; // edi@1
  KeyMap *v2; // esi@1

  v1 = this;
  v2 = this->m_spKeyMap.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spKeyMap.m_pObject = 0;
  }
}

//----- (0062C400) --------------------------------------------------------
bool __thiscall LinkFrameWork::Init(LinkFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  LinkFrameWork *v2; // esi@1
  bool result; // al@2
  unsigned int v4; // eax@3
  int v5; // ecx@3
  unsigned __int16 v6; // ax@4
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@4
  unsigned int v8; // [sp+18h] [bp-4h]@1
  int v9; // [sp+1Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  if ( ptFrameMsg
    && ((v4 = ptFrameMsg->m_uiFramelParam, v5 = *(_DWORD *)v4, ptFrameMsg->m_uiFrameWParam != 1) ? (*(_DWORD *)&v2->m_kProtoNcMapLinkOtherCmd.link.mapid = v5,
                                                                                                    *(unsigned int *)((char *)&v2->m_kProtoNcMapLinkOtherCmd.link.location.x + 2) = *(_DWORD *)(v4 + 4),
                                                                                                    HIWORD(v2->m_kProtoNcMapLinkOtherCmd.link.location.y) = *(_WORD *)(v4 + 8),
                                                                                                    *(_DWORD *)&v2->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[0] = *(_DWORD *)(v4 + 10),
                                                                                                    *(_DWORD *)&v2->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[4] = *(_DWORD *)(v4 + 14),
                                                                                                    *(_DWORD *)&v2->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[8] = *(_DWORD *)(v4 + 18),
                                                                                                    *(_DWORD *)&v2->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[12] = *(_DWORD *)(v4 + 22),
                                                                                                    v2->m_kProtoNcMapLinkOtherCmd.sock.zoneport = *(_WORD *)(v4 + 26),
                                                                                                    v2->m_kProtoNcMapLinkOtherCmd.wldmanhandle = *(_WORD *)(v4 + 28),
                                                                                                    v6 = v2->m_kProtoNcMapLinkOtherCmd.link.mapid,
                                                                                                    kMsg.m_uiFrameMsg = 10) : (*(_DWORD *)&v2->m_kProtoNcMapLinkSameCmd.mapid = v5, *(unsigned int *)((char *)&v2->m_kProtoNcMapLinkSameCmd.location.x + 2) = *(_DWORD *)(v4 + 4), HIWORD(v2->m_kProtoNcMapLinkSameCmd.location.y) = *(_WORD *)(v4 + 8), v6 = v2->m_kProtoNcMapLinkSameCmd.mapid, kMsg.m_uiFrameMsg = 11),
        LinkFrameWork::InitWindow(v2, v6) && LinkFrameWork::InitNet(v2) && LinkFrameWork::InitKeyMap(v2)) )
  {
    PgFrameWork::PostMsgToMe(&v2->baseclass_0, &kMsg);
    v2->baseclass_0.m_bInit = 1;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0062C4F0) --------------------------------------------------------
void __thiscall LinkFrameWork::Terminate(LinkFrameWork *this)
{
  LinkFrameWork *v1; // edi@1
  KeyMap *v2; // esi@1
  Net *v3; // esi@6

  v1 = this;
  v2 = this->m_spKeyMap.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spKeyMap.m_pObject = 0;
  }
  v3 = v1->m_spZoneNet.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spZoneNet.m_pObject = 0;
  }
  LinkFrameWork::TerminateWindow(v1);
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.m_BackFrameID = 0;
}

//----- (0062C560) --------------------------------------------------------
void __thiscall LinkFrameWork::OnErrorMsgClose(LinkFrameWork *this)
{
  PgFrameWork::PostFrameMsgChange(&this->baseclass_0, AccountFrameWorkID, 0);
}

//----- (0062C590) --------------------------------------------------------
void __thiscall LinkFrameWork::OnMapLoginFailMsgClose(LinkFrameWork *this)
{
  PgFrameWork *v1; // esi@1

  v1 = (PgFrameWork *)this;
  Skill::ClearLearnSkill();
  Skill::ClearLearnPassiveSkill();
  NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
  PgFrameWork::PostFrameMsgChange(v1, AccountFrameWorkID, 0);
}

//----- (0062C5C0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_BASE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  Skill::SetEmpowerResetable(*((_BYTE *)pvData + 101) & 1);
  User::SetMainCharBaseData(&g_kUser, (PROTO_NC_CHAR_BASE_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C5F0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_SHAPE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  User::SetMainCharShapeData(&g_kUser, (PROTO_AVATAR_SHAPE_INFO *)pvData);
  return iRevBytes;
}

//----- (0062C610) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_OPTION_SET_SHORTCUTDATA_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0062C620) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_OPTION_SET_SHORTCUTSIZE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0062C630) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_OPTION_DB_SET_WINDOWPOS_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0062C640) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_DOING_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_DOING_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_DOING_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C660) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_DONE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_DONE_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_DONE_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C680) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_READ_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_READ_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C6A0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_QUEST_REPEAT_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  CQuest *v3; // eax@1

  v3 = QuestDataMgr::GetQuest();
  CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(v3, (PROTO_NC_CHAR_QUEST_REPEAT_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C6C0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_ABSTATE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  User::InitABState(&g_kUser, (PROTO_NC_CHAR_ABSTATE_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C6E0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_SKILL_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  Skill::InitSkill((PROTO_NC_CHAR_CLIENT_SKILL_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C700) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_PASSIVE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  Skill::InitPassiveSkill((PROTO_NC_CHAR_SKILL_PASSIVE_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C720) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_ITEM_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  Inventory::InitData(&g_kInventory, (PROTO_NC_CHAR_CLIENT_ITEM_CMD *)pvData, (char *)pvData);
  ShortCutMgr::InitShortCutFromInventory(&g_kShortCutMgr);
  return iRevBytes;
}

//----- (0062C750) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_GAME_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  return iRevBytes;
}

//----- (0062C760) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_CHARTITLE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  MainChar::InitCharactorTitle((MainChar *)g_pkMainChar, (PROTO_NC_CHAR_CLIENT_CHARTITLE_CMD *)pvData);
  return iRevBytes;
}

//----- (0062C780) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  signed int v3; // edi@1
  PROTO_CHARGEDBUFF_INFO *v4; // esi@2

  ChargedItemList::Clear();
  v3 = 0;
  if ( *(_WORD *)pvData > 0u )
  {
    v4 = (PROTO_CHARGEDBUFF_INFO *)((char *)pvData + 2);
    do
    {
      ChargedItemList::AddUsingItem(v4);
      ++v3;
      ++v4;
    }
    while ( v3 < *(_WORD *)pvData );
  }
  return iRevBytes;
}

//----- (0062C7C0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_MISC_RESTMINUTE_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_BYTE *)pvData == 1 )
    KQuestTimeWin::m_second = *(_WORD *)((char *)pvData + 1);
  return iRevBytes;
}
// A99E94: using guessed type unsigned int KQuestTimeWin__m_second;

//----- (0062C7E0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_CHAR_CLIENT_COININFO_CMD(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  User::SetCoin(&g_kUser, *(_QWORD *)pvData);
  User::SetExchangeableCoin(&g_kUser, *((_QWORD *)pvData + 1));
  return iRevBytes;
}

//----- (0062C820) --------------------------------------------------------
void __thiscall LinkFrameWork::Draw(LinkFrameWork *this)
{
  PgWinMgr::Draw(&Pgg_kWinMgr, NiRenderer::ms_pkRenderer);
}

//----- (0062C840) --------------------------------------------------------
void __thiscall LinkFrameWork::ProcessInput(LinkFrameWork *this)
{
  KeyMap::Process(this->m_spKeyMap.m_pObject);
}

//----- (0062C850) --------------------------------------------------------
void __thiscall LinkFrameWork::OnInitAtSameServer(LinkFrameWork *this)
{
  LinkFrameWork *v1; // esi@1
  int v2; // ebx@1
  int v3; // edi@1
  int v4; // esi@1
  int v5; // edx@3
  int v6; // esi@5
  int v7; // edi@5
  int v8; // eax@9
  float v9; // ST10_4@13
  Name3 *v10; // edi@14
  Name3 *v11; // eax@14
  PgFrameWork *v12; // eax@17
  PgFrameWork *v13; // esi@17
  int v14; // edx@29
  int v15; // eax@29
  LinkFrameWork *v16; // esi@31
  float v17; // ST0C_4@31
  float v18; // ST08_4@31
  float v19; // ST10_4@32
  float v20; // ST0C_4@32
  NiPoint3 *v21; // eax@34
  NiPoint3 kPos; // [sp+20h] [bp-70h]@31
  NiPoint3 kSouthDir; // [sp+2Ch] [bp-64h]@1
  int v24; // [sp+38h] [bp-58h]@1
  LinkFrameWork *v25; // [sp+3Ch] [bp-54h]@1
  float pkMapViewInfo; // [sp+40h] [bp-50h]@1
  NiMatrix3 thisa; // [sp+44h] [bp-4Ch]@1
  PgMsg::Frame kMsg; // [sp+68h] [bp-28h]@35
  char acMapName[13]; // [sp+7Ch] [bp-14h]@14
  unsigned int v30; // [sp+8Ch] [bp-4h]@1
  int v31; // [sp+90h] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  v25 = this;
  v24 = 0;
  pkMapViewInfo = (NI_PI + NI_PI) * 90.0 / 180.0;
  NiMatrix3::MakeZRotation(&thisa, pkMapViewInfo);
  NiMatrix3::operator_(&thisa, &kSouthDir, &World::ms_kNorthDir);
  ScreenBDMgr::Clear(&g_kScrnBDMgr);
  EffectMgr::RemoveAll(&g_kEffectMgr);
  LOBYTE(g_pkMainChar[1].m_uiSkillActStep) = 0;
  g_kInventory.m_bWaitingItemDropAck = 0;
  v3 = v1->m_kProtoNcMapLinkSameCmd.mapid;
  v4 = ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable + 16))(
                          ITableBase<MapInfo_MapInfoTab>::ms_pkTable,
                          v3) )
  {
    if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) )
    {
      v5 = *(_DWORD *)(v4 + 196);
      if ( *(_DWORD *)(v5 + 4 * v3) )
        v2 = *(_DWORD *)(v5 + 4 * v3);
    }
  }
  v6 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable;
  v7 = *(_WORD *)v2;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable
                                                        + 16))(
                          ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
                          *(_WORD *)v2) )
  {
    if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) )
    {
      v8 = *(_DWORD *)(v6 + 196) + 4 * v7;
      if ( *(_DWORD *)v8 )
        LODWORD(pkMapViewInfo) = *(_DWORD *)v8;
      else
        pkMapViewInfo = 0.0;
    }
    else
    {
      pkMapViewInfo = 0.0;
    }
  }
  else
  {
    pkMapViewInfo = 0.0;
  }
  *(_DWORD *)&g_pkMainChar[1].m_AttackTargetHandle = *(_DWORD *)(v2 + 72);
  g_pkMainChar->m_fMaxViewLength = (double)*(unsigned int *)(v2 + 72);
  if ( pkMapViewInfo != 0.0 )
  {
    v24 = *(_WORD *)(LODWORD(pkMapViewInfo) + 209);
    v9 = (double)v24;
    World::SetCameraZoomMax(&g_kWorld, v9);
  }
  v10 = (Name3 *)(v2 + 2);
  v11 = World::GetMapName(&g_kWorld, (Name3 *)acMapName);
  if ( *(_DWORD *)&v11->n3_name[0] == *(_DWORD *)(v2 + 2)
    && *(_DWORD *)&v11->n3_name[4] == *(_DWORD *)(v2 + 6)
    && *(_DWORD *)&v11->n3_name[8] == *(_DWORD *)(v2 + 10) )
  {
    World::LoadMap(&g_kWorld, 1);
    World::RemoveAllChar(&g_kWorld);
  }
  else
  {
    byte_B30C4C = *(_BYTE *)(v2 + 58);
    v12 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v13 = v12;
    if ( v12 )
    {
      if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v12[20].m_kMsgQ.m_uiAlloced + 260))() )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v13[20].m_kMsgQ.m_uiAlloced);
      if ( (unsigned __int8)(*(int (**)(void))(**(_DWORD **)(*(_DWORD *)&v13[15].m_bInit + 528) + 260))() )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, *(PgWin **)(*(_DWORD *)&v13[15].m_bInit + 528));
      GameFrameWork::ClosePlayGuideWin((GameFrameWork *)v13);
      GameFrameWork::OpenKQScoreWin((GameFrameWork *)v13, 0);
      GameFrameWork::OpenKDTeamScoreWin((GameFrameWork *)v13, 0);
    }
    dword_B30C3C = *(_DWORD *)&v10->n3_name[0];
    dword_B30C40 = *(_DWORD *)(v2 + 6);
    dword_B30C44 = *(_DWORD *)(v2 + 10);
    World::LoadMap(&g_kWorld, 0);
  }
  if ( pkMapViewInfo != 0.0 )
  {
    if ( *(_BYTE *)(LODWORD(pkMapViewInfo) + 130) )
      World::LoadMiniMap(&g_kWorld);
    else
      World::LoadEmptyMiniMap(&g_kWorld);
  }
  SoundMgr::StopAllSound(&g_kSoundMgr);
  v14 = *(_DWORD *)(v2 + 6);
  *(_DWORD *)acMapName = *(_DWORD *)&v10->n3_name[0];
  v15 = *(_DWORD *)(v2 + 10);
  *(_DWORD *)&acMapName[4] = v14;
  *(_DWORD *)&acMapName[8] = v15;
  acMapName[12] = 0;
  if ( g_kSoundMgr.m_pkAmbientGroup )
    SoundGroupAmbient::LoadAreaTable(g_kSoundMgr.m_pkAmbientGroup, acMapName);
  CharMgr::RemoveAllWithoutMainChar(&g_kCharMgr);
  MainChar::ResetOnLink((MainChar *)g_pkMainChar);
  v16 = v25;
  v18 = (double)v25->m_kProtoNcMapLinkSameCmd.location.x;
  v17 = (double)v25->m_kProtoNcMapLinkSameCmd.location.y;
  if ( World::GetAdvGroundPos(&g_kWorld, v18, v17, &kPos) )
  {
    v20 = (double)v16->m_kProtoNcMapLinkSameCmd.location.x;
    v19 = (double)v16->m_kProtoNcMapLinkSameCmd.location.y;
    if ( !World::IsBlock(&g_kWorld, v20, v19) )
    {
      *(_DWORD *)&acMapName[8] = 0;
      *(_DWORD *)&acMapName[4] = 0;
      *(_DWORD *)acMapName = 0;
      strncpy(acMapName, "Job1_Dn01", 0xCu);
      if ( Name3::operator__(v10, (Name3 *)acMapName) )
      {
        v21 = NetUtil::NetDir2Point3Dir((NiPoint3 *)acMapName, 0);
        kSouthDir.x = v21->x;
        kSouthDir.y = v21->y;
        kSouthDir.z = v21->z;
      }
      ((void (__stdcall *)(NiPoint3 *, NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[5].GetAbstateColor)(
        &kPos,
        &kSouthDir);
      ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[2].IsVisible)();
      World::AttachChar(&g_kWorld, g_pkMainChar);
      kMsg.m_uiFrameMsg = 10;
      PgFrameWork::PostMsgToFrameWork(&v16->baseclass_0, GameFrameWorkID, &kMsg);
      PgFrameWork::PostFrameMsgUnPop(&v16->baseclass_0);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;
// B30C3C: using guessed type int dword_B30C3C;
// B30C40: using guessed type int dword_B30C40;
// B30C44: using guessed type int dword_B30C44;
// B30C4C: using guessed type char byte_B30C4C;
// B6DE8C: using guessed type const float NI_PI;

//----- (0062CC30) --------------------------------------------------------
void __thiscall LinkFrameWork::NcMiscSeedReq(LinkFrameWork *this)
{
  PgNet *v1; // ecx@1
  LinkFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  if ( v1 )
  {
    LOWORD(netcmd) = 2054;
    PgNet::SendNetMsg(v1, &netcmd, 2);
  }
}

//----- (0062CC60) --------------------------------------------------------
void __thiscall LinkFrameWork::NcMapLoginCompleteCmd(LinkFrameWork *this)
{
  PgNet *v1; // ecx@1
  PgFrameWork *v2; // eax@3
  PgFrameWork *v3; // eax@5
  LinkFrameWork *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  if ( v1 )
  {
    LOWORD(netcmd) = 6147;
    PgNet::SendNetMsg(v1, &netcmd, 2);
    if ( AbStateInfectee::FindNomalAbstate(&g_pkMainChar->baseclass_0, STA_OBSERVERHIDEMODE) )
    {
      v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v2 )
        MiniMapWin::ShowGTQuit(*(MiniMapWin **)&v2[15].m_bInit, 1);
    }
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
      LOBYTE(v3[141].m_kMsgQ.m_pBase) = 1;
  }
}

//----- (0062CCE0) --------------------------------------------------------
void __thiscall LinkFrameWork::_LinkFrameWork(LinkFrameWork *this)
{
  LinkFrameWork *v1; // edi@1
  Net *v2; // esi@1
  KeyMap *v3; // esi@5
  NiAlphaController *v4; // esi@9
  void *v5; // ST00_4@13

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&LinkFrameWork::_vftable_;
  v2 = this->m_spZoneNet.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spKeyMap.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spAlphaCtrl.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v5);
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 9C19FC: using guessed type int (__stdcall *LinkFrameWork___vftable_)(int uiFlags);

//----- (0062CDB0) --------------------------------------------------------
void __thiscall LinkFrameWork::Update(LinkFrameWork *this, float fCurTime)
{
  LinkFrameWork *v2; // esi@1
  Net *v3; // ecx@1

  v2 = this;
  v3 = this->m_spZoneNet.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
  PgWinMgr::DispatchMessageA(&Pgg_kWinMgr);
  PgWinMgr::UpdateWin(&Pgg_kWinMgr, fCurTime);
  ((void (*)(void))v2->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)();
  if ( g_kNetMgr.m_spWorldMgr.m_pObject )
    PgNet::Flush(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0);
  PrisonTimeWin::m_second = 0;
  KQuestTimeWin::m_second = 0;
}
// A9915C: using guessed type unsigned int PrisonTimeWin__m_second;
// A99E94: using guessed type unsigned int KQuestTimeWin__m_second;

//----- (0062CE20) --------------------------------------------------------
void __thiscall LinkFrameWork::SendConnectError(LinkFrameWork *this, int nFailCount, int nType, Name4 *rLinkBeforeAddress)
{
  LinkFrameWork *v4; // edi@1
  int v5; // eax@2
  int v6; // ebx@2
  int v7; // edx@2
  int v8; // eax@3
  int v9; // eax@6
  Name3 *v10; // eax@9
  int v11; // edx@9
  int v12; // ecx@9
  int v13; // edx@9
  int v14; // eax@9
  unsigned int v15; // edx@9
  PgNet *v16; // ecx@10
  void *v17; // [sp-8h] [bp-70h]@10
  int v18; // [sp-4h] [bp-6Ch]@9
  CLBD_ErrorData ErrorData[2]; // [sp+8h] [bp-60h]@11
  Name4 *v20; // [sp+14h] [bp-54h]@1
  int v21; // [sp+18h] [bp-50h]@2
  PgNet *pkWorldNet; // [sp+1Ch] [bp-4Ch]@1
  NETCOMMAND netcmd; // [sp+20h] [bp-48h]@2
  PROTO_NC_MISC_CLIENT_LOADING_BUG_DETECT_CMD proto; // [sp+24h] [bp-44h]@2
  unsigned int v25; // [sp+64h] [bp-4h]@1
  int v26; // [sp+68h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v4 = this;
  v20 = rLinkBeforeAddress;
  pkWorldNet = (PgNet *)g_kNetMgr.m_spWorldMgr.m_pObject;
  if ( g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    netcmd.protocol = 2112;
    PgNet::AddNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &netcmd, 2);
    v5 = v4->m_kProtoNcMapLinkOtherCmd.link.mapid;
    v6 = ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
    *(_QWORD *)&proto.sLoadingMapName.n3_name[4] = 0i64;
    *(_DWORD *)&proto.sLoadingMapName.n3_name[0] = 0;
    *(_QWORD *)&proto.sFromMapName.n3_name[4] = 0i64;
    *(_DWORD *)&proto.sFromMapName.n3_name[0] = 0;
    *(_QWORD *)&proto.sFromZoneIP.n4_name[8] = 0i64;
    *(_QWORD *)&proto.sFromZoneIP.n4_name[0] = 0i64;
    *(_QWORD *)&proto.sToZoneIP.n4_name[8] = 0i64;
    *(_QWORD *)&proto.sToZoneIP.n4_name[0] = 0i64;
    v7 = *(_DWORD *)ITableBase<MapInfo_MapInfoTab>::ms_pkTable;
    v21 = v5;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v7 + 16))(ITableBase<MapInfo_MapInfoTab>::ms_pkTable, v5) )
    {
      if ( (unsigned __int16)v21 <= *(_WORD *)(v6 + 200) )
      {
        v9 = *(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v21;
        if ( *(_DWORD *)v9 )
          v8 = *(_DWORD *)v9;
        else
          v8 = 0;
      }
      else
      {
        v8 = 0;
      }
    }
    else
    {
      v8 = 0;
    }
    proto.nLoadingFailCnt = nFailCount;
    proto.nFailType = nType;
    *(_QWORD *)&proto.sLoadingMapName.n3_name[0] = *(_QWORD *)(v8 + 2);
    *(_DWORD *)&proto.sLoadingMapName.n3_name[8] = *(_DWORD *)(v8 + 10);
    v10 = User::GetMainCharLoginMapName(&g_kUser);
    *(_QWORD *)&proto.sFromMapName.n3_name[0] = *(_QWORD *)&v10->n3_name[0];
    *(_DWORD *)&proto.sFromMapName.n3_name[8] = *(_DWORD *)&v10->n3_name[8];
    v11 = *(_DWORD *)&v20->n4_name[4];
    *(_DWORD *)&proto.sFromZoneIP.n4_name[0] = *(_DWORD *)&v20->n4_name[0];
    *(_DWORD *)&proto.sFromZoneIP.n4_name[8] = *(_DWORD *)&v20->n4_name[8];
    v12 = *(_DWORD *)&v4->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[4];
    *(_DWORD *)&proto.sFromZoneIP.n4_name[4] = v11;
    v13 = *(_DWORD *)&v20->n4_name[12];
    v14 = *(_DWORD *)&v4->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[0];
    *(_DWORD *)&proto.sToZoneIP.n4_name[4] = v12;
    LOWORD(v12) = v4->m_kProtoNcMapLinkOtherCmd.sock.zoneport;
    *(_DWORD *)&proto.sFromZoneIP.n4_name[12] = v13;
    v15 = *(_DWORD *)&v4->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[8];
    *(_DWORD *)&proto.sToZoneIP.n4_name[0] = v14;
    *(_QWORD *)&proto.sToZoneIP.n4_name[8] = __PAIR__(
                                               *(_DWORD *)&v4->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[12],
                                               v15);
    proto.nToZonePort = v12;
    v18 = 64;
    if ( nType )
    {
      proto.nErrorDataCnt = 2;
      PgNet::AddNetMsg(pkWorldNet, &proto, 64);
      ErrorData[0].nErrorNo = 0;
      ErrorData[1].nErrorNo = 1;
      ErrorData[0].nErrorData = PgNet::GetConnectError(pkWorldNet);
      v18 = 12;
      ErrorData[1].nErrorData = PgNet::GetSelectError(pkWorldNet);
      v17 = ErrorData;
      v16 = pkWorldNet;
    }
    else
    {
      v16 = pkWorldNet;
      proto.nErrorDataCnt = 0;
      v17 = &proto;
    }
    PgNet::SendNetMsg(v16, v17, v18);
    PgNet::Flush(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0);
  }
}
// A85C00: using guessed type int __security_cookie;
// A959F8: using guessed type int ITableBase_MapInfo_MapInfoTab___ms_pkTable;

//----- (0062CFD0) --------------------------------------------------------
void __thiscall LinkFrameWork::OnTryConnectToZone(LinkFrameWork *this)
{
  LinkFrameWork *v1; // esi@1
  int v2; // eax@1
  PgNet *v3; // ecx@1
  int i; // ebx@1
  int v5; // eax@2
  int v6; // eax@3
  Net *v7; // edi@3
  Name4 *v8; // [sp-4h] [bp-3Ch]@16
  Name4 LinkBeforeIPAddress; // [sp+Ch] [bp-2Ch]@1
  int v10; // [sp+1Ch] [bp-1Ch]@3
  char acstr[17]; // [sp+20h] [bp-18h]@1
  unsigned int v12; // [sp+34h] [bp-4h]@1
  int v13; // [sp+38h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  *(_QWORD *)&LinkBeforeIPAddress.n4_name[0] = *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[0];
  v2 = this->m_kProtoNcMapLinkOtherCmd.sock.zoneport;
  *(_DWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[0] = *(_DWORD *)&this->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[0];
  *(_QWORD *)&LinkBeforeIPAddress.n4_name[8] = *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[8];
  *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[4] = *(_QWORD *)&this->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[4];
  *(_DWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[12] = *(_DWORD *)&this->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[12];
  g_kServer.m_kZoneAddr.m_iPort = v2;
  LOWORD(v2) = this->m_kProtoNcMapLinkOtherCmd.wldmanhandle;
  *(_QWORD *)acstr = *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[0];
  g_kServer.m_kWorldMgrHandle = v2;
  v3 = (PgNet *)this->m_spZoneNet.m_pObject;
  *(_QWORD *)&acstr[8] = *(_QWORD *)&g_kServer.m_kZoneAddr.m_kAddr.n4_name[8];
  acstr[16] = 0;
  PgNet::SetAddress(v3, acstr);
  PgNet::SetPortA(&v1->m_spZoneNet.m_pObject->baseclass_0, g_kServer.m_kZoneAddr.m_iPort);
  for ( i = 0; ; LinkFrameWork::SendConnectError(v1, i, 100, &LinkBeforeIPAddress) )
  {
    while ( 1 )
    {
      v5 = rand();
      Sleep(v5 % 200 + 300);
      if ( i <= 2 )
        break;
      v6 = (int)NetMgr::TryAnotherZone(&g_kNetMgr, acstr, g_kServer.m_kZoneAddr.m_iPort);
      v7 = v1->m_spZoneNet.m_pObject;
      v10 = v6;
      if ( v7 != (Net *)v6 )
      {
        if ( v7 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.m_uiRefCount) && v7 )
            v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
          v6 = v10;
        }
        v1->m_spZoneNet.m_pObject = (Net *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)(v6 + 4));
      }
      if ( (unsigned __int8)((int (*)(void))v1->m_spZoneNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)() )
      {
        if ( !i )
          return;
        v8 = &LinkBeforeIPAddress;
        goto LABEL_19;
      }
      ++i;
      LinkFrameWork::SendConnectError(v1, i, 100, &LinkBeforeIPAddress);
    }
    if ( (unsigned __int8)((int (*)(void))v1->m_spZoneNet.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)() )
      break;
    ++i;
  }
  if ( !i )
    return;
  v8 = &LinkBeforeIPAddress;
LABEL_19:
  LinkFrameWork::SendConnectError(v1, i + 1, 0, v8);
}
// A85C00: using guessed type int __security_cookie;

//----- (0062D160) --------------------------------------------------------
void __thiscall LinkFrameWork::OnInitAtOtherServer(LinkFrameWork *this)
{
  SoundGroupAmbient *v1; // ebx@1
  Name3 *v2; // esi@1
  Name3 *v3; // eax@1
  Name3 *v4; // eax@4
  MapInfo *v5; // eax@4
  int v6; // esi@4
  MapInfo *v7; // ebx@4
  int v8; // edi@4
  int v9; // edi@5
  int v10; // edx@8
  float v11; // ST08_4@12
  Name3 *v12; // eax@13
  PgFrameWork *v13; // eax@13
  PgFrameWork *v14; // esi@13
  SoundGroupAmbient *v15; // esi@23
  Name3 *v16; // eax@23
  PROTO_NC_CHAR_MAPLOGIN_ACK *v17; // esi@25
  float v18; // ST04_4@25
  float v19; // ST00_4@25
  float v20; // ST08_4@26
  float v21; // ST04_4@26
  Name3 *v22; // eax@27
  MapInfo *v23; // edi@27
  PgFrameWork *v24; // esi@32
  NiPoint3 kCharPos; // [sp+18h] [bp-6Ch]@25
  NiPoint3 kSouthDir; // [sp+24h] [bp-60h]@1
  PgFrameWork *v27; // [sp+30h] [bp-54h]@1
  float v28; // [sp+34h] [bp-50h]@1
  PgMsg::Frame kMsg; // [sp+38h] [bp-4Ch]@32
  NiMatrix3 thisa; // [sp+4Ch] [bp-38h]@1
  char acMapName[13]; // [sp+70h] [bp-14h]@1
  unsigned int v32; // [sp+80h] [bp-4h]@1
  int v33; // [sp+84h] [bp+0h]@1

  v32 = (unsigned int)&v33 ^ __security_cookie;
  v1 = 0;
  v27 = (PgFrameWork *)this;
  v28 = (NI_PI + NI_PI) * 90.0 / 180.0;
  NiMatrix3::MakeZRotation(&thisa, v28);
  NiMatrix3::operator_(&thisa, &kSouthDir, &World::ms_kNorthDir);
  ScreenBDMgr::Clear(&g_kScrnBDMgr);
  EffectMgr::RemoveAll(&g_kEffectMgr);
  LOBYTE(g_pkMainChar[1].m_uiSkillActStep) = 0;
  v2 = User::GetMainCharLoginMapName(&g_kUser);
  v3 = World::GetMapName(&g_kWorld, (Name3 *)acMapName);
  if ( *(_DWORD *)&v3->n3_name[0] == *(_DWORD *)&v2->n3_name[0]
    && *(_DWORD *)&v3->n3_name[4] == *(_DWORD *)&v2->n3_name[4]
    && *(_DWORD *)&v3->n3_name[8] == *(_DWORD *)&v2->n3_name[8] )
  {
    World::LoadMap(&g_kWorld, 1);
    World::RemoveAllChar(&g_kWorld);
  }
  else
  {
    v4 = User::GetMainCharLoginMapName(&g_kUser);
    v5 = MapInfoTab::GetByMapName(v4);
    v6 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable;
    v7 = v5;
    v8 = v5->ID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
                            v8) )
    {
      if ( (unsigned __int16)v8 <= *(_WORD *)(v6 + 200) )
      {
        v10 = *(_DWORD *)(v6 + 196);
        if ( *(_DWORD *)(v10 + 4 * v8) )
          v9 = *(_DWORD *)(v10 + 4 * v8);
        else
          v9 = 0;
      }
      else
      {
        v9 = 0;
      }
    }
    else
    {
      v9 = 0;
    }
    *(_DWORD *)&g_pkMainChar[1].m_AttackTargetHandle = v7->Sight;
    g_pkMainChar->m_fMaxViewLength = (double)v7->Sight;
    if ( v9 )
    {
      LODWORD(v28) = *(_WORD *)(v9 + 209);
      v11 = (double)SLODWORD(v28);
      World::SetCameraZoomMax(&g_kWorld, v11);
    }
    v12 = User::GetMainCharLoginMapName(&g_kUser);
    dword_B30C3C = *(_DWORD *)&v12->n3_name[0];
    dword_B30C40 = *(_DWORD *)&v12->n3_name[4];
    dword_B30C44 = *(_DWORD *)&v12->n3_name[8];
    byte_B30C4C = v7->KingdomMap;
    v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v14 = v13;
    if ( v13 )
    {
      if ( (unsigned __int8)(*(int (**)(void))(*(_DWORD *)v13[20].m_kMsgQ.m_uiAlloced + 260))() )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v14[20].m_kMsgQ.m_uiAlloced);
      if ( (unsigned __int8)(*(int (**)(void))(**(_DWORD **)(*(_DWORD *)&v14[15].m_bInit + 528) + 260))() )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, *(PgWin **)(*(_DWORD *)&v14[15].m_bInit + 528));
      GameFrameWork::ClosePlayGuideWin((GameFrameWork *)v14);
      GameFrameWork::OpenKQScoreWin((GameFrameWork *)v14, 0);
      GameFrameWork::OpenKDTeamScoreWin((GameFrameWork *)v14, 0);
    }
    World::LoadMap(&g_kWorld, 0);
    if ( *(_BYTE *)(v9 + 130) )
    {
      World::LoadMiniMap(&g_kWorld);
      v1 = 0;
    }
    else
    {
      World::LoadEmptyMiniMap(&g_kWorld);
      v1 = 0;
    }
  }
  SoundMgr::StopAllSound(&g_kSoundMgr);
  v15 = g_kSoundMgr.m_pkAmbientGroup;
  v16 = User::GetMainCharLoginMapName(&g_kUser);
  *(_DWORD *)acMapName = *(_DWORD *)&v16->n3_name[0];
  *(_DWORD *)&acMapName[4] = *(_DWORD *)&v16->n3_name[4];
  *(_DWORD *)&acMapName[8] = *(_DWORD *)&v16->n3_name[8];
  acMapName[12] = 0;
  if ( v15 != v1 )
    SoundGroupAmbient::LoadAreaTable(v15, acMapName);
  CharMgr::RemoveAllWithoutMainChar(&g_kCharMgr);
  MainChar::ResetOnLink((MainChar *)g_pkMainChar);
  v17 = User::GetMainCharMapLoginData(&g_kUser);
  v19 = (double)v17->logincoord.x;
  v18 = (double)v17->logincoord.y;
  if ( World::GetAdvGroundPos(&g_kWorld, v19, v18, &kCharPos) )
  {
    v21 = (double)v17->logincoord.x;
    v20 = (double)v17->logincoord.y;
    if ( !World::IsBlock(&g_kWorld, v21, v20) )
    {
      v22 = User::GetMainCharLoginMapName(&g_kUser);
      v23 = MapInfoTab::GetByMapName(v22);
      if ( (SoundGroupAmbient *)v23 != v1 )
      {
        *(_DWORD *)&acMapName[8] = v1;
        *(_DWORD *)&acMapName[4] = v1;
        *(_DWORD *)acMapName = v1;
        strncpy(acMapName, "Job1_Dn01", 0xCu);
        if ( *(_DWORD *)&v23->MapName.n3_name[0] == *(_DWORD *)acMapName )
        {
          if ( *(_DWORD *)&v23->MapName.n3_name[4] == *(_DWORD *)&acMapName[4] )
          {
            if ( *(_DWORD *)&v23->MapName.n3_name[8] == *(_DWORD *)&acMapName[8] )
            {
              v28 = (NI_PI + NI_PI) * 0.0 / 180.0;
              NiMatrix3::MakeZRotation(&thisa, v28);
              NiMatrix3::operator_(&thisa, (NiPoint3 *)acMapName, &World::ms_kNorthDir);
              LODWORD(kSouthDir.x) = *(_DWORD *)acMapName;
              LODWORD(kSouthDir.y) = *(_DWORD *)&acMapName[4];
              LODWORD(kSouthDir.z) = *(_DWORD *)&acMapName[8];
            }
          }
        }
      }
      ((void (__stdcall *)(NiPoint3 *, NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[5].GetAbstateColor)(
        &kCharPos,
        &kSouthDir);
      g_pkMainChar->m_kHandle = v17->charhandle;
      ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[2].IsVisible)();
      World::AttachChar(&g_kWorld, g_pkMainChar);
      v24 = v27;
      kMsg.m_uiFrameMsg = 10;
      PgFrameWork::PostMsgToFrameWork(v27, GameFrameWorkID, &kMsg);
      PgFrameWork::PostFrameMsgUnPop(v24);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;
// B30C3C: using guessed type int dword_B30C3C;
// B30C40: using guessed type int dword_B30C40;
// B30C44: using guessed type int dword_B30C44;
// B30C4C: using guessed type char byte_B30C4C;
// B6DE8C: using guessed type const float NI_PI;

//----- (0062D5A0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_MAP_LOGINFAIL_ACK(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  PgFrameWork *v3; // esi@1
  char *v4; // eax@2
  PgWin *v5; // eax@2

  v3 = (PgFrameWork *)this;
  if ( *(_WORD *)pvData == 327 )
  {
    CShnDataFileCheckSum::GetDataFileName(&ShnDataFile, (SHN_DATA_FILE_INDEX)*((_BYTE *)pvData + 2));
    v4 = TextData::Get(0x1B353333u);
    v5 = (PgWin *)MsgBox::Modal(MSGBOX_OK, v4);
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, v5);
  }
  Skill::ClearLearnSkill();
  Skill::ClearLearnPassiveSkill();
  NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
  PgFrameWork::PostFrameMsgChange(v3, AccountFrameWorkID, 0);
  return iRevBytes;
}

//----- (0062D610) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_MAP_LOGIN_ACK(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  LinkFrameWork *v3; // esi@1
  PgFrameWork *v4; // eax@1

  v3 = this;
  User::SetMainCharMapLoginData(&g_kUser, (PROTO_NC_CHAR_MAPLOGIN_ACK *)pvData);
  LinkFrameWork::OnInitAtOtherServer(v3);
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  GameFrameWork::InitNet((GameFrameWork *)v4);
  return iRevBytes;
}

//----- (0062D650) --------------------------------------------------------
void __thiscall LinkFrameWork::LinkFrameWork(LinkFrameWork *this)
{
  LinkFrameWork *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&LinkFrameWork::_vftable_;
  v1->m_spAlphaCtrl.m_pObject = 0;
  v1->m_spKeyMap.m_pObject = 0;
  v1->m_spZoneNet.m_pObject = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[12] = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[8] = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[4] = 0;
  *(_DWORD *)&v1->m_kProtoNcMapLinkOtherCmd.sock.zoneip.n4_name[0] = 0;
  v1->m_pkBack = 0;
  *(_WORD *)&v1->m_bShowToolTip = 1;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 9C19FC: using guessed type int (__stdcall *LinkFrameWork___vftable_)(int uiFlags);

//----- (0062D6D0) --------------------------------------------------------
void __thiscall LinkFrameWork::ProcessMsg(LinkFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  switch ( uiMsg )
  {
    case 0xAu:
      LinkFrameWork::OnTryConnectToZone(this);
      break;
    case 0xBu:
      LinkFrameWork::OnInitAtSameServer(this);
      break;
    case 0xEu:
      LinkFrameWork::OnMapLoginFailMsgClose(this);
      break;
    default:
      return;
  }
}

//----- (0062D720) --------------------------------------------------------
void __thiscall LinkFrameWork::NcMapLoginReq(LinkFrameWork *this)
{
  PgNet *v1; // ecx@1
  SHN_DATA_FILE_INDEX v2; // edi@2
  char *v3; // esi@2
  Name8 *v4; // eax@3
  PROTO_AVATARINFORMATION *v5; // eax@4
  LinkFrameWork *v6; // [sp+0h] [bp-6F0h]@1
  NETCOMMAND netcmd; // [sp+4h] [bp-6ECh]@2
  PROTO_NC_MAP_LOGIN_REQ kProto; // [sp+8h] [bp-6E8h]@2
  char Name[128]; // [sp+660h] [bp-90h]@4
  unsigned int v10; // [sp+6E0h] [bp-10h]@1
  int v11; // [sp+6ECh] [bp-4h]@2
  int v12; // [sp+6F0h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v6 = this;
  v1 = (PgNet *)this->m_spZoneNet.m_pObject;
  if ( v1 )
  {
    netcmd.protocol = 6145;
    PgNet::AddNetMsg(v1, &netcmd, 2);
    *(_QWORD *)&kProto.chardata.charid.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.chardata.charid.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.chardata.charid.n5_name[0] = 0;
    _eh_vector_constructor_iterator_(
      kProto.checksum,
      0x20u,
      50,
      (void (__thiscall *)(void *))Name8::Name8,
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
    v11 = 0;
    kProto.chardata.wldmanhandle = g_kServer.m_kWorldMgrHandle;
    v2 = 0;
    v3 = &kProto.checksum[0].n8_name[8];
    do
    {
      v4 = CShnDataFileCheckSum::GetDataFileCheckSum(&ShnDataFile, v2);
      *((_DWORD *)v3 - 2) = *(_DWORD *)&v4->n8_name[0];
      *((_DWORD *)v3 - 1) = *(_DWORD *)&v4->n8_name[4];
      *(_DWORD *)v3 = *(_DWORD *)&v4->n8_name[8];
      *((_DWORD *)v3 + 1) = *(_DWORD *)&v4->n8_name[12];
      *((_DWORD *)v3 + 2) = *(_DWORD *)&v4->n8_name[16];
      *((_DWORD *)v3 + 3) = *(_DWORD *)&v4->n8_name[20];
      *((_DWORD *)v3 + 4) = *(_DWORD *)&v4->n8_name[24];
      *((_DWORD *)v3 + 5) = *(_DWORD *)&v4->n8_name[28];
      ++v2;
      v3 += 32;
    }
    while ( (signed int)v2 < 50 );
    v5 = User::GetSelectedAvatarInfo(&g_kUser);
    *(_DWORD *)Name = *(_DWORD *)&v5->name.n5_name[0];
    *(_DWORD *)&Name[4] = *(_DWORD *)&v5->name.n5_name[4];
    *(_DWORD *)&Name[8] = *(_DWORD *)&v5->name.n5_name[8];
    *(_DWORD *)&Name[12] = *(_DWORD *)&v5->name.n5_name[12];
    *(_DWORD *)&Name[16] = *(_DWORD *)&v5->name.n5_name[16];
    Name[20] = 0;
    *(_QWORD *)&kProto.chardata.charid.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.chardata.charid.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.chardata.charid.n5_name[0] = 0;
    strncpy(kProto.chardata.charid.n5_name, Name, 0x14u);
    PgNet::SendNetMsg(&v6->m_spZoneNet.m_pObject->baseclass_0, &kProto, 1622);
    v11 = -1;
    _eh_vector_destructor_iterator_(
      kProto.checksum,
      0x20u,
      50,
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0062D8E0) --------------------------------------------------------
int __thiscall LinkFrameWork::On_NC_MISC_SEED_ACK(LinkFrameWork *this, int iRevBytes, void *pvData)
{
  LinkFrameWork *v3; // esi@1

  v3 = this;
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  PgNet::SetSendPacketMode(&v3->m_spZoneNet.m_pObject->baseclass_0, 1);
  ((void (__stdcall *)(_DWORD))v3->m_spZoneNet.m_pObject->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)(*(_WORD *)pvData);
  LinkFrameWork::NcMapLoginReq(v3);
  if ( g_kNetMgr.m_spWorldMgr.m_pObject )
    Net::NcMiscGameTimeReq(g_kNetMgr.m_spWorldMgr.m_pObject);
  return iRevBytes;
}

//----- (0062D930) --------------------------------------------------------
int __thiscall LinkFrameWork::ProcessNetMsg(LinkFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  int result; // eax@1
  CQuest *v6; // eax@13
  CQuest *v7; // eax@14
  CQuest *v8; // eax@15
  CQuest *v9; // eax@16

  result = 0;
  switch ( iDepart )
  {
    case 8:
      if ( iCommand == 17 )
$LN25_35:
        result = iRevBytes;
      break;
    case 2:
      if ( iCommand == 7 )
      {
        result = LinkFrameWork::On_NC_MISC_SEED_ACK(this, iRevBytes, pvData);
      }
      else
      {
        if ( iCommand == 16 )
        {
          if ( *(_BYTE *)pvData == 1 )
            KQuestTimeWin::m_second = *(_WORD *)((char *)pvData + 1);
          result = iRevBytes;
        }
      }
      break;
    case 4:
      switch ( iCommand )
      {
        case 16:
        case 17:
        case 42:
        case 72:
          goto $LN25_35;
        case 56:
          result = LinkFrameWork::On_NC_CHAR_CLIENT_BASE_CMD(this, iRevBytes, pvData);
          break;
        case 57:
          User::SetMainCharShapeData(&g_kUser, (PROTO_AVATAR_SHAPE_INFO *)pvData);
          result = iRevBytes;
          break;
        case 58:
          v6 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_DOING_CMD_ACK(v6, (PROTO_NC_CHAR_QUEST_DOING_CMD *)pvData);
          result = iRevBytes;
          break;
        case 59:
          v7 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_DONE_CMD_ACK(v7, (PROTO_NC_CHAR_QUEST_DONE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 206:
          v8 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(v8, (PROTO_NC_CHAR_QUEST_READ_CMD *)pvData);
          result = iRevBytes;
          break;
        case 215:
          v9 = QuestDataMgr::GetQuest();
          CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(v9, (PROTO_NC_CHAR_QUEST_REPEAT_CMD *)pvData);
          result = iRevBytes;
          break;
        case 60:
          User::InitABState(&g_kUser, (PROTO_NC_CHAR_ABSTATE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 61:
          Skill::InitSkill((PROTO_NC_CHAR_CLIENT_SKILL_CMD *)pvData);
          result = iRevBytes;
          break;
        case 71:
          result = LinkFrameWork::On_NC_CHAR_CLIENT_ITEM_CMD(this, iRevBytes, pvData);
          break;
        case 62:
          Skill::InitPassiveSkill((PROTO_NC_CHAR_SKILL_PASSIVE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 73:
          MainChar::InitCharactorTitle((MainChar *)g_pkMainChar, (PROTO_NC_CHAR_CLIENT_CHARTITLE_CMD *)pvData);
          result = iRevBytes;
          break;
        case 74:
          result = LinkFrameWork::On_NC_CHAR_CLIENT_CHARGEDBUFF_CMD(this, iRevBytes, pvData);
          break;
        case 222:
          result = LinkFrameWork::On_NC_CHAR_CLIENT_COININFO_CMD(this, iRevBytes, pvData);
          break;
        default:
          return result;
      }
      return result;
    case 6:
      if ( iCommand == 2 )
      {
        result = LinkFrameWork::On_NC_MAP_LOGIN_ACK(this, iRevBytes, pvData);
      }
      else
      {
        if ( iCommand == 4 )
          result = LinkFrameWork::On_NC_MAP_LOGINFAIL_ACK(this, iRevBytes, pvData);
      }
      break;
    default:
      return result;
  }
  return result;
}
// A99E94: using guessed type unsigned int KQuestTimeWin__m_second;

//----- (0062DC20) --------------------------------------------------------
NiRTTI *__thiscall LinkFrameWork::GetRTTI(LinkFrameWork *this)
{
  return &LinkFrameWork::m_RTTI;
}

//----- (0062DC30) --------------------------------------------------------
const char *__thiscall LinkFrameWork::GetFrameWorkName(LinkFrameWork *this)
{
  return LinkFrameWork::m_RTTI.m_pcName;
}

//----- (0062DC40) --------------------------------------------------------
void *__thiscall LinkFrameWork::_scalar_deleting_destructor_(LinkFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  LinkFrameWork::_LinkFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0062DC80) --------------------------------------------------------
bool __thiscall LoadingFrameWork::InitWindow(LoadingFrameWork *this)
{
  LoadingFrameWork *v1; // esi@1
  Name3 *v2; // eax@1
  _iobuf *v4; // eax@5
  NiImageConverter *v5; // eax@10
  NiPixelData *v6; // eax@10
  NiSourceTexture *v7; // edi@11
  char v8; // kr00_1@16
  _iobuf *v9; // eax@18
  NiSourceTexture *v10; // eax@23
  PgWinSpr *v11; // eax@28
  PgWinSpr *v12; // eax@28
  int v13; // eax@28
  NiAlphaController *v14; // ebx@28
  NiProperty *v15; // eax@36
  NiAlphaController *v16; // ecx@36
  PgWinSpr *v17; // eax@36
  unsigned int v18; // [sp+20h] [bp-134h]@1
  NiTexture::FormatPrefs kPrefs; // [sp+30h] [bp-124h]@12
  NiPointer<NiSourceTexture> spTexture; // [sp+3Ch] [bp-118h]@13
  NiSourceTexture *v21; // [sp+40h] [bp-114h]@11
  char acPathName[256]; // [sp+44h] [bp-110h]@5
  unsigned int v23; // [sp+144h] [bp-10h]@1
  int v24; // [sp+150h] [bp-4h]@15
  int v25; // [sp+154h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v18 = (unsigned int)&v25 ^ __security_cookie;
  v1 = this;
  v2 = User::GetMainCharLoginMapName(&g_kUser);
  if ( !MapViewInfoTab::GetByMapName(v2) )
    return 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acPathName, "%sLoading\\%s.png");
  v4 = fopen(acPathName, "r");
  if ( v4 )
  {
    fclose(v4);
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acPathName, "%sLoading\\%s.tga");
  }
  v5 = NiImageConverter::GetImageConverter();
  v6 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD, unsigned int))v5->baseclass_0.vfptr[2].__vecDelDtor)(
                        v5,
                        acPathName,
                        0,
                        v18);
  if ( v6 )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    v7 = NiSourceTexture::Create(v6, &kPrefs);
    v21 = v7;
  }
  else
  {
    v7 = 0;
    v21 = 0;
  }
  spTexture.m_pObject = v7;
  if ( v7 )
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v24 = 0;
  if ( !v7 )
  {
    v8 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 16))(
           ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
           0);
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acPathName, "%sLoading\\%s.png");
    v9 = fopen(acPathName, "r");
    if ( v9 )
    {
      fclose(v9);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      sprintf(acPathName, "%sLoading\\%s.tga");
    }
    v10 = PgUtil::LoadSourceTexture(acPathName);
    if ( v10 )
    {
      v7 = v10;
      spTexture.m_pObject = v10;
    }
    else
    {
      v10 = MenuTexMgr::GetTexture(2u);
      if ( v21 == v10 || (v7 = v10, (spTexture.m_pObject = v10) == 0) )
        goto LABEL_28;
    }
    InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
LABEL_28:
  v11 = PgWinSpr::CreateWin(0, 0, v7, 0, 0, 0, 0x400u, 0x300u, 0, 0, 0);
  v1->m_pkBack = v11;
  v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v11,
    PgWin::ms_uiScreenWidth);
  ((void (__stdcall *)(unsigned int))v1->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(PgWin::ms_uiScreenHeight);
  ((void (__stdcall *)(_DWORD))v1->m_pkBack->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v12 = PgWinSpr::CreateWin(63, 487, v7, 0, 0, 0x30Cu, 0x1D1u, 0x4Du, 0, 0, 0);
  v1->m_pkRainbowBox = v12;
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  ((void (__stdcall *)(_DWORD))v1->m_pkRainbowBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(1.0);
  v13 = (int)PgWinAnim::CreateLoopingAlphaAnim();
  v14 = v1->m_spAlphaCtrl.m_pObject;
  v21 = (NiSourceTexture *)v13;
  if ( v14 != (NiAlphaController *)v13 )
  {
    if ( v14 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v14 )
        v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v14,
          1u);
      v13 = (int)v21;
    }
    v1->m_spAlphaCtrl.m_pObject = (NiAlphaController *)v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)(v13 + 4));
  }
  v15 = NiAVObject::GetProperty(&v1->m_pkRainbowBox->baseclass_0.baseclass_0.baseclass_0, 3);
  v16 = v1->m_spAlphaCtrl.m_pObject;
  v1->m_pkMaterialProp = (NiMaterialProperty *)v15;
  ((void (__cdecl *)(NiProperty *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v15);
  RewardInvItem::SetItem(
    &v1->m_pkMaterialProp->baseclass_0.baseclass_0,
    &v1->m_spAlphaCtrl.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v17 = PgWinSpr::CreateWin(63, 487, v7, 0, 0, 0x366u, 0x1D1u, 0x4Du, 0, 0, 0);
  v1->m_pkTextBox = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkBack->baseclass_0);
  v24 = -1;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (0062E040) --------------------------------------------------------
void __thiscall LoadingFrameWork::TerminateWindow(LoadingFrameWork *this)
{
  LoadingFrameWork *v1; // esi@1
  NiAlphaController *v2; // edi@1

  v1 = this;
  v2 = this->m_spAlphaCtrl.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spAlphaCtrl.m_pObject = 0;
  }
  if ( v1->m_pkBack )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkBack->baseclass_0);
    v1->m_pkBack = 0;
  }
  if ( v1->m_pkRainbowBox )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkRainbowBox->baseclass_0);
    v1->m_pkRainbowBox = 0;
  }
  if ( v1->m_pkTextBox )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkTextBox->baseclass_0);
    v1->m_pkTextBox = 0;
  }
}

//----- (0062E0B0) --------------------------------------------------------
bool __thiscall LoadingFrameWork::InitKeyMap(LoadingFrameWork *this)
{
  LoadingFrameWork *v1; // ebx@1
  int v2; // edi@1
  void *v3; // eax@2
  int v4; // eax@3
  KeyMap *v5; // esi@4

  v1 = this;
  v2 = 0;
  if ( !this->m_spKeyMap.m_pObject )
  {
    v3 = operator new(0x20u);
    if ( v3 )
    {
      KeyMap::KeyMap((KeyMap *)v3);
      v2 = v4;
    }
    v5 = v1->m_spKeyMap.m_pObject;
    if ( v5 != (KeyMap *)v2 )
    {
      if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spKeyMap.m_pObject = (KeyMap *)v2;
      if ( v2 )
        InterlockedIncrement((volatile LONG *)(v2 + 4));
    }
    v1->m_spKeyMap.m_pObject->m_pkFrameWork = (PgFrameWork *)v1;
  }
  return 1;
}

//----- (0062E160) --------------------------------------------------------
void __thiscall LoadingFrameWork::TerminateKeyMap(LoadingFrameWork *this)
{
  LoadingFrameWork *v1; // edi@1
  KeyMap *v2; // esi@1

  v1 = this;
  v2 = this->m_spKeyMap.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spKeyMap.m_pObject = 0;
  }
}

//----- (0062E1A0) --------------------------------------------------------
bool __thiscall LoadingFrameWork::Init(LoadingFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  LoadingFrameWork *v2; // esi@1
  bool result; // al@2
  PgMsg::Frame kMsg; // [sp+4h] [bp-18h]@4
  unsigned int v5; // [sp+18h] [bp-4h]@1
  int v6; // [sp+1Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  if ( LoadingFrameWork::InitWindow(this) && LoadingFrameWork::InitKeyMap(v2) )
  {
    kMsg.m_uiFrameMsg = 9;
    PgFrameWork::PostMsgToMe(&v2->baseclass_0, &kMsg);
    result = 1;
    v2->baseclass_0.m_bInit = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0062E210) --------------------------------------------------------
void __thiscall LoadingFrameWork::Terminate(LoadingFrameWork *this)
{
  LoadingFrameWork *v1; // esi@1
  KeyMap *v2; // edi@1

  v1 = this;
  v2 = this->m_spKeyMap.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spKeyMap.m_pObject = 0;
  }
  LoadingFrameWork::TerminateWindow(v1);
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.m_BackFrameID = 0;
}

//----- (0062E270) --------------------------------------------------------
void __thiscall LoadingFrameWork::OnStartLoad(LoadingFrameWork *this)
{
  LoadingFrameWork::ms_bLoadDataComplete = 1;
}
// AA26FC: using guessed type bool LoadingFrameWork__ms_bLoadDataComplete;

//----- (0062E280) --------------------------------------------------------
void __thiscall LoadingFrameWork::Draw(LoadingFrameWork *this)
{
  PgWinMgr::Draw(&Pgg_kWinMgr, NiRenderer::ms_pkRenderer);
}

//----- (0062E2A0) --------------------------------------------------------
void __thiscall LoadingFrameWork::ProcessInput(LoadingFrameWork *this)
{
  KeyMap::Process(this->m_spKeyMap.m_pObject);
}

//----- (0062E2B0) --------------------------------------------------------
void __thiscall LoadingFrameWork::ProcessMsg(LoadingFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  if ( uiMsg == 9 )
    LoadingFrameWork::ms_bLoadDataComplete = 1;
}
// AA26FC: using guessed type bool LoadingFrameWork__ms_bLoadDataComplete;

//----- (0062E2D0) --------------------------------------------------------
void __thiscall LoadingFrameWork::LoadingFrameWork(LoadingFrameWork *this)
{
  LoadingFrameWork *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&LoadingFrameWork::_vftable_;
  v1->m_spAlphaCtrl.m_pObject = 0;
  v1->m_spKeyMap.m_pObject = 0;
  v1->m_pkBack = 0;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 9C1AAC: using guessed type int (__stdcall *LoadingFrameWork___vftable_)(int uiFlags);

//----- (0062E330) --------------------------------------------------------
void __thiscall LoadingFrameWork::_LoadingFrameWork(LoadingFrameWork *this)
{
  LoadingFrameWork *v1; // edi@1
  KeyMap *v2; // esi@1
  NiAlphaController *v3; // esi@5
  void *v4; // ST00_4@9

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&LoadingFrameWork::_vftable_;
  v2 = this->m_spKeyMap.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spAlphaCtrl.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v4);
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 9C1AAC: using guessed type int (__stdcall *LoadingFrameWork___vftable_)(int uiFlags);

//----- (0062E3E0) --------------------------------------------------------
void __thiscall LoadingFrameWork::Update(LoadingFrameWork *this, float fCurTime)
{
  LoadingFrameWork *v2; // esi@1

  v2 = this;
  PgFrameWork::ProcessAllMsg(&this->baseclass_0);
  PgWinMgr::ProcessInput(&Pgg_kWinMgr, 1);
  PgWinMgr::DispatchMessageA(&Pgg_kWinMgr);
  PgWinMgr::UpdateWin(&Pgg_kWinMgr, fCurTime);
  KeyMap::Process(v2->m_spKeyMap.m_pObject);
  KQuestTimeWin::m_second = 0;
  PrisonTimeWin::m_second = 0;
  if ( LoadingFrameWork::ms_bLoadDataComplete )
    PgFrameWork::PostFrameMsgChange(&v2->baseclass_0, GameFrameWorkID, 0);
}
// A9915C: using guessed type unsigned int PrisonTimeWin__m_second;
// A99E94: using guessed type unsigned int KQuestTimeWin__m_second;
// AA26FC: using guessed type bool LoadingFrameWork__ms_bLoadDataComplete;

//----- (0062E450) --------------------------------------------------------
NiRTTI *__thiscall LoadingFrameWork::GetRTTI(LoadingFrameWork *this)
{
  return &LoadingFrameWork::m_RTTI;
}

//----- (0062E460) --------------------------------------------------------
void *const __thiscall CharCreateFrameWork::GetID(CharCreateFrameWork *this)
{
  return (void *const )((int (*)(void))this->baseclass_0.baseclass_0.vfptr[1].SetMsgHooker)();
}

//----- (0062E470) --------------------------------------------------------
const char *__thiscall LoadingFrameWork::GetFrameWorkName(LoadingFrameWork *this)
{
  return LoadingFrameWork::m_RTTI.m_pcName;
}

//----- (0062E480) --------------------------------------------------------
void *__thiscall LoadingFrameWork::_scalar_deleting_destructor_(LoadingFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  LoadingFrameWork::_LoadingFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0062E4B0) --------------------------------------------------------
void __thiscall ITimer::ITimer(ITimer *this)
{
  this->m_fTriggerTime = -1.0;
  this->vfptr = (ITimerVtbl *)&ITimer::_vftable_;
}
// 9C1AF0: using guessed type int (__thiscall *ITimer___vftable_)(void *p, char);

//----- (0062E4D0) --------------------------------------------------------
void __thiscall FrameWorkTimer::OnTimer(FrameWorkTimer *this)
{
  FrameWorkTimer *v1; // esi@1

  v1 = this;
  PgFrameWork::AddMsg(this->m_pkFrameWork, this->m_dwCommand, 0, 0);
  v1->baseclass_0.vfptr->__vecDelDtor((ITimer *)v1, 1u);
}

//----- (0062E4F0) --------------------------------------------------------
int __cdecl ITimer::ClearTimer()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v1; // ST00_4@2
  int result; // eax@2

  v0 = ITimer::m_kTimerList.baseclass_0.m_pkHead;
  if ( ITimer::m_kTimerList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = v0;
      v0 = v0->m_pkNext;
      result = ((int (__thiscall *)(_DWORD, _DWORD))ITimer::m_kTimerList.baseclass_0.vfptr->DeleteItem)(
                 &ITimer::m_kTimerList,
                 v1);
    }
    while ( v0 );
  }
  *(_DWORD *)&ITimer::m_kTimerList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  ITimer::m_kTimerList.baseclass_0.m_pkHead = 0;
  ITimer::m_kTimerList.baseclass_0.m_pkTail = 0;
  return result;
}

//----- (0062E540) --------------------------------------------------------
void __thiscall ITimer::_ITimer(ITimer *this)
{
  void *v1; // eax@1
  int v2; // edx@2
  ITimer *kCurrIter; // [sp+0h] [bp-4h]@1

  kCurrIter = this;
  this->vfptr = (ITimerVtbl *)&ITimer::_vftable_;
  v1 = ITimer::m_kTimerList.baseclass_0.m_pkHead;
  if ( ITimer::m_kTimerList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v2 = (int)((char *)v1 + 8);
      kCurrIter = (ITimer *)v1;
      v1 = *(void **)v1;
      if ( *(ITimer **)v2 == this )
        break;
      if ( !v1 )
        return;
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      &ITimer::m_kTimerList,
      (void **)&kCurrIter);
  }
}
// 9C1AF0: using guessed type int (__thiscall *ITimer___vftable_)(void *p, char);

//----- (0062E580) --------------------------------------------------------
void __thiscall ITimer::SetTimer(ITimer *this, float fTime)
{
  ITimer *v2; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v3; // eax@1

  v2 = this;
  this->m_fTriggerTime = ITimer::ms_fCurrTime + fTime;
  v3 = ITimer::m_kTimerList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ITimer::m_kTimerList);
  v3->m_element = (NiD3DShaderInterface *)v2;
  v3->m_pkNext = 0;
  v3->m_pkPrev = ITimer::m_kTimerList.baseclass_0.m_pkTail;
  if ( ITimer::m_kTimerList.baseclass_0.m_pkTail )
  {
    ITimer::m_kTimerList.baseclass_0.m_pkTail->m_pkNext = v3;
    ++*(_DWORD *)&ITimer::m_kTimerList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    ITimer::m_kTimerList.baseclass_0.m_pkTail = v3;
  }
  else
  {
    ++*(_DWORD *)&ITimer::m_kTimerList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    ITimer::m_kTimerList.baseclass_0.m_pkHead = v3;
    ITimer::m_kTimerList.baseclass_0.m_pkTail = v3;
  }
}
// AA2708: using guessed type float ITimer__ms_fCurrTime;

//----- (0062E5F0) --------------------------------------------------------
void __cdecl ITimer::Update(float fTime)
{
  NiTListItem<NiD3DShaderInterface *> *v1; // edx@1
  NiTListItem<NiD3DShaderInterface *> *v2; // edi@1
  double v3; // st7@2
  int v4; // esi@2
  NiTListItem<NiD3DShaderInterface *> *v5; // ecx@2
  NiTListItem<NiD3DShaderInterface *> *v6; // ecx@4
  NiD3DShaderInterface *v7; // esi@5
  NiTListItem<NiD3DShaderInterface *> *v8; // eax@7
  NiTListItem<NiD3DShaderInterface *> *v9; // ecx@8
  NiTListItem<NiD3DShaderInterface *> *v10; // eax@11
  NiTListItem<NiD3DShaderInterface *> *v11; // edx@11
  NiTListItem<NiD3DShaderInterface *> *v12; // [sp-10h] [bp-10h]@5

  v1 = ITimer::m_kTimerList.baseclass_0.m_pkHead;
  ITimer::ms_fCurrTime = fTime;
  v2 = ITimer::m_kTimerList.baseclass_0.m_pkHead;
  if ( ITimer::m_kTimerList.baseclass_0.m_pkHead )
  {
    do
    {
      v3 = *(float *)&v2->m_element->baseclass_0.baseclass_0.m_uiRefCount;
      v4 = (int)&v2->m_element;
      v5 = v2;
      v2 = v2->m_pkNext;
      if ( fTime >= v3 )
      {
        if ( v5 == v1 )
        {
          v6 = v1->m_pkNext;
          ITimer::m_kTimerList.baseclass_0.m_pkHead = v6;
          if ( v6 )
          {
            v6->m_pkPrev = 0;
            v7 = v1->m_element;
            v12 = v1;
          }
          else
          {
            ITimer::m_kTimerList.baseclass_0.m_pkTail = 0;
            v7 = v1->m_element;
            v12 = v1;
          }
        }
        else
        {
          v8 = ITimer::m_kTimerList.baseclass_0.m_pkTail;
          if ( v5 == ITimer::m_kTimerList.baseclass_0.m_pkTail )
          {
            v9 = ITimer::m_kTimerList.baseclass_0.m_pkTail->m_pkPrev;
            ITimer::m_kTimerList.baseclass_0.m_pkTail = v9;
            if ( v9 )
            {
              v9->m_pkNext = 0;
              v7 = v8->m_element;
              v12 = v8;
            }
            else
            {
              ITimer::m_kTimerList.baseclass_0.m_pkHead = 0;
              v7 = v8->m_element;
              v12 = v8;
            }
          }
          else
          {
            v10 = v5->m_pkPrev;
            v11 = v5->m_pkNext;
            if ( v10 )
              v10->m_pkNext = v11;
            if ( v11 )
              v11->m_pkPrev = v10;
            v7 = *(NiD3DShaderInterface **)v4;
            v12 = v5;
          }
        }
        ITimer::m_kTimerList.baseclass_0.vfptr->DeleteItem(
          (NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ITimer::m_kTimerList,
          v12);
        --*(_DWORD *)&ITimer::m_kTimerList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        ((void (*)(void))v7->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
        v1 = ITimer::m_kTimerList.baseclass_0.m_pkHead;
      }
    }
    while ( v2 );
  }
}
// AA2708: using guessed type float ITimer__ms_fCurrTime;

//----- (0062E6D0) --------------------------------------------------------
void __thiscall FrameWorkTimer::FrameWorkTimer(FrameWorkTimer *this, float fTime, unsigned int dwCommand, PgFrameWork *pkFrameWork)
{
  FrameWorkTimer *v4; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v5; // eax@1

  v4 = this;
  this->baseclass_0.m_fTriggerTime = -1.0;
  this->baseclass_0.vfptr = (ITimerVtbl *)&FrameWorkTimer::_vftable_;
  this->baseclass_0.m_fTriggerTime = ITimer::ms_fCurrTime + fTime;
  v5 = ITimer::m_kTimerList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&ITimer::m_kTimerList);
  v5->m_element = (NiD3DShaderInterface *)v4;
  v5->m_pkNext = 0;
  v5->m_pkPrev = ITimer::m_kTimerList.baseclass_0.m_pkTail;
  if ( ITimer::m_kTimerList.baseclass_0.m_pkTail )
    ITimer::m_kTimerList.baseclass_0.m_pkTail->m_pkNext = v5;
  else
    ITimer::m_kTimerList.baseclass_0.m_pkHead = v5;
  ++*(_DWORD *)&ITimer::m_kTimerList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  ITimer::m_kTimerList.baseclass_0.m_pkTail = v5;
  v4->m_dwCommand = dwCommand;
  v4->m_pkFrameWork = pkFrameWork;
}
// 9C1B2C: using guessed type int (__thiscall *FrameWorkTimer___vftable_)(void *p, char);
// AA2708: using guessed type float ITimer__ms_fCurrTime;

//----- (0062E780) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<ITimer__>_ITimer__>::_NiTListBase<DFALL<ITimer__>_ITimer__>(NiTListBase<DFALL<ITimer *>,ITimer *> *this)
{
  this->vfptr = (NiTListBase<DFALL<ITimer *>,ITimer *>Vtbl *)&NiTListBase<DFALL<ITimer__>_ITimer__>::_vftable_;
}
// 9C1AFC: using guessed type int (__thiscall *NiTListBase_DFALL_ITimer ___ITimer _____vftable_)(void *p, char);

//----- (0062E790) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<ITimer__>_ITimer__>::_scalar_deleting_destructor_(NiTListBase<DFALL<ITimer *>,ITimer *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<ITimer *>,ITimer *>Vtbl *)&NiTListBase<DFALL<ITimer__>_ITimer__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C1AFC: using guessed type int (__thiscall *NiTListBase_DFALL_ITimer ___ITimer _____vftable_)(void *p, char);

//----- (0062E7C0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<ITimer__>_ITimer__>::_vector_deleting_destructor_(NiTList<ITimer *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<ITimer *> *v3; // esi@1
  NiTListItem<ITimer *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<ITimer *>,ITimer *>Vtbl *)&NiTPointerListBase<DFALL<ITimer__>_ITimer__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<ITimer__>_ITimer__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C1AFC: using guessed type int (__thiscall *NiTListBase_DFALL_ITimer ___ITimer _____vftable_)(void *p, char);
// 9C1B0C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_ITimer ___ITimer _____vftable_)(void *p, char);

//----- (0062E850) --------------------------------------------------------
void *__thiscall FrameWorkTimer::_scalar_deleting_destructor_(FrameWorkTimer *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // eax@1
  int v4; // ecx@2
  void *kPos; // [sp+4h] [bp-4h]@2

  v2 = this;
  this->baseclass_0.vfptr = (ITimerVtbl *)&ITimer::_vftable_;
  v3 = ITimer::m_kTimerList.baseclass_0.m_pkHead;
  if ( ITimer::m_kTimerList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v4 = (int)((char *)v3 + 8);
      kPos = v3;
      v3 = *(void **)v3;
      if ( *(void **)v4 == v2 )
        break;
      if ( !v3 )
        goto LABEL_6;
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(&ITimer::m_kTimerList, &kPos);
  }
LABEL_6:
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C1AF0: using guessed type int (__thiscall *ITimer___vftable_)(void *p, char);

//----- (0062E8B0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::OnErrorGotoAccount(CHairShopFrameWork *this)
{
  PgFrameWork::PostFrameMsgChange(&this->baseclass_0, AccountFrameWorkID, 0);
}

//----- (0062E8C0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ChangeAvatarHair(CHairShopFrameWork *this, char byTargetHairType)
{
  CHairShopFrameWork *v2; // eax@1
  Avatar *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkAvatar;
  if ( v3 )
  {
    if ( v2->m_kShapeData.hairtype != byTargetHairType )
    {
      v2->m_kShapeData.hairtype = byTargetHairType;
      Avatar::ChangeHairTypeShape(v3, &v2->m_kShapeData);
    }
  }
}

//----- (0062E8F0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ChangeAvatarHairColor(CHairShopFrameWork *this, char byTargetColor)
{
  CHairShopFrameWork *v2; // eax@1
  Avatar *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkAvatar;
  if ( v3 )
  {
    if ( v2->m_kShapeData.haircolor != byTargetColor )
    {
      v2->m_kShapeData.haircolor = byTargetColor;
      Avatar::ChangeHairColorShape(v3, &v2->m_kShapeData);
    }
  }
}

//----- (0062E920) --------------------------------------------------------
void __thiscall CHairShopFrameWork::Draw(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  CPostProcessEffectManager *v2; // eax@2
  CPostProcessEffectManager *v3; // eax@2
  NiVisibleArray m_kVisible; // [sp+0h] [bp-B0h]@2
  NiCullingProcess m_kCuller; // [sp+10h] [bp-A0h]@2
  unsigned int v6; // [sp+A0h] [bp-10h]@1
  int v7; // [sp+ACh] [bp-4h]@2
  int v8; // [sp+B0h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  if ( this->m_spCamera.m_pObject )
  {
    m_kVisible.m_ppkArray = 0;
    m_kVisible.m_uiCurrentSize = 0;
    m_kVisible.m_uiAllocatedSize = 0;
    m_kVisible.m_uiGrowBy = 1024;
    NiVisibleArray::SetAllocatedSize(&m_kVisible, 0x400u);
    v7 = 0;
    NiCullingProcess::NiCullingProcess(&m_kCuller, &m_kVisible);
    LOBYTE(v7) = 1;
    v2 = CPostProcessEffectManager::GetInstance();
    CPostProcessEffectManager::OnRenderSceneStart(v2);
    NiDrawScene(v1->m_spCamera.m_pObject, &v1->m_spBackgroundScene.m_pObject->baseclass_0, &m_kCuller, 0);
    v3 = CPostProcessEffectManager::GetInstance();
    CPostProcessEffectManager::OnRenderSceneEnd(v3);
    PgWinMgr::Draw(&Pgg_kWinMgr, NiRenderer::ms_pkRenderer);
    LOBYTE(v7) = 0;
    NiCullingProcess::_NiCullingProcess(&m_kCuller);
    operator delete(m_kVisible.m_ppkArray);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0062EA20) --------------------------------------------------------
void __thiscall CHairShopFrameWork::SetDefaultLooks(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  Avatar *v2; // ecx@1
  unsigned __int8 v3; // dl@2
  char v4; // al@2
  char v5; // al@6
  char v6; // dl@6

  v1 = this;
  PgWinMgr::SetTopWin(&Pgg_kWinMgr, &this->m_pkHairShopWin->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_pkAvatar;
  if ( v2 )
  {
    v3 = v1->m_kShapeData._bf0;
    v4 = v1->m_byBaseGender;
    if ( v3 >> 7 != v4
      || v1->m_kShapeData.hairtype != v1->m_byBaseHairType
      || v1->m_kShapeData.haircolor != v1->m_byBaseHairColor
      || v1->m_kShapeData.faceshape != v1->m_byBaseFaceIndex )
    {
      v5 = v3 & 0x7F | (v4 << 7);
      v1->m_kShapeData.hairtype = v1->m_byBaseHairType;
      v6 = v1->m_byBaseFaceIndex;
      v1->m_kShapeData._bf0 = v5;
      v1->m_kShapeData.haircolor = v1->m_byBaseHairColor;
      v1->m_kShapeData.faceshape = v6;
      Avatar::ChangeGenderShape(v2, &v1->m_kShapeData, 2u);
      ((void (__stdcall *)(_DWORD))v1->m_pkAvatar->baseclass_0.baseclass_0.vfptr[17].DeleteAbStateByAbstateIndex)(0.0);
      NiAVObject::Update(&v1->m_pkCharNode->baseclass_0, 0.0, 0);
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->m_pkAvatar->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(
        102010,
        0,
        0);
      CharMgr::UpdateAvatar(&g_kCharMgr, 0.0);
    }
  }
}

//----- (0062EAF0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::Exit(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  PgNet *v2; // ecx@2
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@2
  PROTO_NC_USER_AVATAR_LIST_REQ kProto; // [sp+Bh] [bp-1h]@3

  v1 = this;
  if ( this->m_bWaitPacketReply != 1 )
  {
    v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
    netcmd.protocol = 3103;
    if ( v2 )
    {
      PgNet::AddNetMsg(v2, &netcmd, 2);
      PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
    }
    v1->m_bWaitPacketReply = 1;
  }
}

//----- (0062EB40) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ApplyTerrain(CHairShopFrameWork *this, NiNode *pkGroundNode)
{
  NiTListItem<NiPointer<Shadow> > *v2; // ebx@1
  Shadow *v3; // esi@2
  NiNode *v4; // eax@2
  NiNode *v5; // edi@2
  NiCollisionGroup *v6; // ecx@9
  NiAVObject *pkObject; // [sp+4h] [bp-4h]@2

  v2 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element.m_pObject;
    v4 = v3->m_kDecal.m_spObTerrain.m_pObject;
    v2 = v2->m_pkNext;
    v5 = v4;
    pkObject = (NiAVObject *)v3->m_kDecal.m_spObTerrain.m_pObject;
    if ( v4 != pkGroundNode )
    {
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v3->m_kDecal.m_spObTerrain.m_pObject = pkGroundNode;
      if ( pkGroundNode )
        InterlockedIncrement((volatile LONG *)&pkGroundNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v6 = v3->m_kDecal.m_pkCollisionGroup;
    if ( v6 )
    {
      if ( pkObject )
        NiCollisionGroup::RemoveCollidee(v6, pkObject);
      if ( pkGroundNode )
        NiCollisionGroup::AddCollidee(
          v3->m_kDecal.m_pkCollisionGroup,
          &v3->m_kDecal.m_spObTerrain.m_pObject->baseclass_0,
          0,
          -1,
          1);
    }
  }
}

//----- (0062EBE0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::RenderShadow(CHairShopFrameWork *this)
{
  NsPgToonExtraData *v1; // edx@1
  bool v2; // al@1
  CHairShopFrameWork *v3; // ebx@1
  NiTListItem<NiPointer<Shadow> > *v4; // esi@1
  int v5; // eax@2
  Shadow *v6; // edi@3
  NiNode **v7; // ecx@4
  NiNode *v8; // eax@4
  Shadow *v9; // eax@7
  NiPoint3 kCharPos; // [sp+8h] [bp-18h]@4
  NsPgToonExtraData *pkToonExtraData; // [sp+14h] [bp-Ch]@1
  int i; // [sp+18h] [bp-8h]@2
  bool bOldToonFlag; // [sp+1Fh] [bp-1h]@1

  v1 = Engine3D::ms_spToonExtraData;
  v2 = Engine3D::ms_spToonExtraData->m_bOn;
  v3 = this;
  Engine3D::ms_spToonExtraData->m_bOn = 0;
  v4 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  pkToonExtraData = v1;
  bOldToonFlag = v2;
  if ( v4 )
  {
    v5 = 0;
    i = 0;
    if ( this->m_nMaxShadowObject )
    {
      do
      {
        v6 = v4->m_element.m_pObject;
        v4 = v4->m_pkNext;
        if ( v6 )
        {
          v7 = (NiNode **)(*(_DWORD *)&v3->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
          v8 = *v7;
          kCharPos.x = (*v7)->baseclass_0.m_kLocal.m_Translate.x;
          kCharPos.y = v8->baseclass_0.m_kLocal.m_Translate.y;
          kCharPos.z = v8->baseclass_0.m_kLocal.m_Translate.z;
          Shadow::Render(v6, *v7, &kCharPos);
          v1 = pkToonExtraData;
          v6->m_spNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
          v5 = i;
        }
        ++v5;
        i = v5;
      }
      while ( v5 < v3->m_nMaxShadowObject );
    }
    for ( ; v4; v9->m_spNode.m_pObject->baseclass_0.m_uFlags |= 1u )
    {
      v9 = v4->m_element.m_pObject;
      v4 = v4->m_pkNext;
    }
    v1->m_bOn = bOldToonFlag;
  }
}

//----- (0062EC90) --------------------------------------------------------
void __thiscall CHairShopFrameWork::TurnRight(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // ebx@1
  Avatar *v2; // eax@1
  float v3; // ST14_4@3
  NiMatrix3 result; // [sp+14h] [bp-70h]@3
  NiMatrix3 mat3OldRot; // [sp+38h] [bp-4Ch]@3
  NiMatrix3 mat3Rot; // [sp+5Ch] [bp-28h]@3
  unsigned int v7; // [sp+80h] [bp-4h]@1
  int v8; // [sp+84h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
  {
    if ( v2->baseclass_0.m_spScene.m_pObject )
    {
      v3 = Timer::ms_fDeltaTime * -2.0;
      NiMatrix3::MakeZRotation(&mat3Rot, v3);
      memcpy(&mat3OldRot, &v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, sizeof(mat3OldRot));
      memcpy(&mat3Rot, NiMatrix3::operator_(&mat3OldRot, &result, &mat3Rot), sizeof(mat3Rot));
      memcpy(&v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, &mat3Rot, 0x24u);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (0062ED20) --------------------------------------------------------
void __thiscall CHairShopFrameWork::TurnLeft(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // ebx@1
  Avatar *v2; // eax@1
  float v3; // ST14_4@3
  NiMatrix3 result; // [sp+14h] [bp-70h]@3
  NiMatrix3 mat3OldRot; // [sp+38h] [bp-4Ch]@3
  NiMatrix3 mat3Rot; // [sp+5Ch] [bp-28h]@3
  unsigned int v7; // [sp+80h] [bp-4h]@1
  int v8; // [sp+84h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pkAvatar;
  if ( v2 )
  {
    if ( v2->baseclass_0.m_spScene.m_pObject )
    {
      v3 = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime;
      NiMatrix3::MakeZRotation(&mat3Rot, v3);
      memcpy(&mat3OldRot, &v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, sizeof(mat3OldRot));
      memcpy(&mat3Rot, NiMatrix3::operator_(&mat3OldRot, &result, &mat3Rot), sizeof(mat3Rot));
      memcpy(&v1->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal, &mat3Rot, 0x24u);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (0062EDB0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ChangeAvatarFace(CHairShopFrameWork *this, char byTargetFaceType)
{
  CHairShopFrameWork *v2; // esi@1
  Avatar *v3; // ecx@3

  v2 = this;
  if ( this->m_pkAvatar )
  {
    if ( CDataReader::GetRecord(
           (CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4),
           (unsigned __int8)byTargetFaceType) )
    {
      v3 = v2->m_pkAvatar;
      v2->m_kShapeData.faceshape = byTargetFaceType;
      Avatar::ChangeFaceTextureShape(v3, &v2->m_kShapeData);
    }
  }
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;

//----- (0062EDF0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::Update(CHairShopFrameWork *this, float fCurTime)
{
  CHairShopFrameWork *v2; // esi@1
  Net *v3; // ecx@1
  PgNet *v4; // ecx@3
  NiAVObject *v5; // ecx@5
  char *v6; // eax@9
  MsgBox *v7; // eax@9
  char *v8; // eax@10
  PgMsg::Frame kMsg; // [sp+14h] [bp-18h]@11
  unsigned int v10; // [sp+28h] [bp-4h]@1
  int v11; // [sp+2Ch] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  v3 = this->m_spWorldMgrNet.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(CHairShopFrameWork *, signed int))v3->baseclass_0.baseclass_0.vfptr[4].__vecDelDtor)(v2, 100);
  PgFrameWork::ProcessAllMsg(&v2->baseclass_0);
  PgWinMgr::ProcessInput(&Pgg_kWinMgr, 1);
  PgWinMgr::DispatchMessageA(&Pgg_kWinMgr);
  PgWinMgr::UpdateWin(&Pgg_kWinMgr, fCurTime);
  CHairShopFrameWork::RenderShadow(v2);
  v4 = (PgNet *)v2->m_spWorldMgrNet.m_pObject;
  if ( v4 )
    PgNet::Flush(v4);
  v5 = (NiAVObject *)v2->m_spBackgroundScene.m_pObject;
  if ( v5 )
    NiAVObject::Update(v5, fCurTime, 1);
  if ( v2->m_spWorldMgrNet.m_pObject->baseclass_0.m_bCut )
  {
    NetMgr::SendUserLogOutMsg2AllServer(&g_kNetMgr);
    if ( g_kServer.m_bDoubleConnected == 1 )
    {
      v6 = TextData::Get(0x16526A50u);
      v7 = MsgBox::Modal(MSGBOX_OK, v6);
      g_kServer.m_bDoubleConnected = 0;
    }
    else
    {
      v8 = TextData::Get(0xCF16104Bu);
      v7 = MsgBox::Modal(MSGBOX_OK, v8);
    }
    kMsg.m_uiFrameMsg = 9;
    MsgBox::SetFrameWorkMsgOnClose(v7, &v2->baseclass_0, &kMsg, 0);
  }
  if ( v2->m_bAutoTurn )
  {
    if ( v2->m_bTurnLeft )
      CHairShopFrameWork::TurnLeft(v2);
    else
      CHairShopFrameWork::TurnRight(v2);
  }
  CharMgr::UpdateAvatar(&g_kCharMgr, fCurTime);
  SoundMgr::Update(&g_kSoundMgr, fCurTime, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (0062EF20) --------------------------------------------------------
char __thiscall CHairShopFrameWork::FindItemGrade(CHairShopFrameWork *this, bool *bChanged)
{
  CHairShopFrameWork *v2; // esi@1
  char result; // al@2
  char v4; // al@3
  unsigned __int8 v5; // bl@3
  void *v6; // eax@4
  HairInfo *v7; // eax@9
  char v8; // al@13
  void *v9; // eax@14
  char *v10; // eax@20
  unsigned __int8 v11; // al@22
  bool v12; // cf@22
  char *v13; // eax@22
  unsigned __int8 byHairGrade; // [sp+4h] [bp-4h]@3
  unsigned __int8 byHairColorGrade; // [sp+5h] [bp-3h]@3
  unsigned __int8 byFaceGrade; // [sp+6h] [bp-2h]@3
  char byChageState; // [sp+7h] [bp-1h]@3

  v2 = this;
  if ( this->m_byBaseGender == (unsigned __int8)this->m_kShapeData._bf0 >> 7 )
  {
    v4 = this->m_kShapeData.faceshape;
    v5 = 0;
    byHairGrade = 0;
    byHairColorGrade = 0;
    byFaceGrade = 0;
    byChageState = 0;
    if ( this->m_byBaseFaceIndex == v4 )
    {
      byChageState = 1;
    }
    else
    {
      v6 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4),
             (unsigned __int8)v4);
      if ( v6 )
      {
        byFaceGrade = *((_BYTE *)v6 + 33);
        if ( byFaceGrade )
          --byFaceGrade;
      }
    }
    if ( v2->m_byBaseHairType == v2->m_kShapeData.hairtype )
    {
      byChageState |= 2u;
    }
    else
    {
      v7 = HairInfoTab::GetHairInfo(v2->m_kShapeData.hairtype);
      if ( v7 )
      {
        v5 = v7->Grade;
        byHairGrade = v5;
        if ( v5 )
        {
          --v5;
          byHairGrade = v5;
        }
      }
    }
    v8 = v2->m_kShapeData.haircolor;
    if ( v2->m_byBaseHairColor == v8 )
    {
      byChageState |= 4u;
    }
    else
    {
      v9 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
             (unsigned __int8)v8);
      if ( v9 )
      {
        byHairColorGrade = *((_BYTE *)v9 + 61);
        if ( byHairColorGrade )
          --byHairColorGrade;
      }
    }
    if ( (byChageState & 7) == 7 )
    {
      *bChanged = 0;
      result = -1;
    }
    else
    {
      *bChanged = 1;
      v10 = (char *)&byHairGrade;
      if ( byFaceGrade >= v5 )
        v10 = (char *)&byFaceGrade;
      v11 = *v10;
      v12 = v11 < byHairColorGrade;
      BYTE3(bChanged) = v11;
      v13 = (char *)&byHairColorGrade;
      if ( !v12 )
        v13 = (char *)&bChanged + 3;
      result = *v13;
    }
  }
  else
  {
    *bChanged = 1;
    result = 5;
  }
  return result;
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (0062F030) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ChangeApply(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  char v2; // al@1
  char *v3; // eax@2
  char v4; // cl@4
  int v5; // edi@10
  char *v6; // eax@11
  int v7; // ebx@12
  int v8; // edx@14
  char *v9; // eax@16
  MsgBox *v10; // eax@16
  char bChanged; // [sp+7h] [bp-119h]@1
  PgMsg::Frame kMsg; // [sp+8h] [bp-118h]@16
  char temp[256]; // [sp+1Ch] [bp-104h]@16
  unsigned int v14; // [sp+11Ch] [bp-4h]@1
  int v15; // [sp+120h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  bChanged = 0;
  v2 = CHairShopFrameWork::FindItemGrade(this, (bool *)&bChanged);
  if ( bChanged )
  {
    if ( (unsigned __int8)v2 < 6u )
    {
      v4 = 6;
      if ( v1->m_byBaseGender == (unsigned __int8)v1->m_kShapeData._bf0 >> 7 )
        v4 = 5;
      if ( v2 >= (unsigned __int8)v4 )
        goto LABEL_11;
      while ( !v1->m_stItems[(unsigned __int8)v2].ItemTotalLot )
      {
        ++v2;
        if ( v2 >= (unsigned __int8)v4 )
          goto LABEL_11;
      }
      v5 = v1->m_stItems[(unsigned __int8)v2].ItemID;
      if ( (_WORD)v5 != -1 )
      {
        v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                v5) )
        {
          if ( (unsigned __int16)v5 <= *(_WORD *)(v7 + 200) )
          {
            v8 = *(_DWORD *)(v7 + 196);
            if ( *(_DWORD *)(v8 + 4 * v5) )
            {
              if ( *(_DWORD *)(v8 + 4 * v5) )
              {
                v9 = TextData::Get(0x8F9E7F6Eu);
                sprintf(temp, v9);
                v10 = MsgBox::Modal(MSGBOX_OKCANCEL, temp);
                kMsg.m_uiFrameMsg = 10;
                MsgBox::SetFrameWorkMsgOnClose(v10, &v1->baseclass_0, &kMsg, 0);
              }
            }
          }
        }
      }
      else
      {
LABEL_11:
        v6 = TextData::Get(0x9DF1C6C1u);
        MsgBox::Modal(MSGBOX_OK, v6);
      }
    }
  }
  else
  {
    v3 = TextData::Get(0x827D7D69u);
    MsgBox::Modal(MSGBOX_OK, v3);
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0062F190) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ProcessMsg(CHairShopFrameWork *this, unsigned int uiMsg, unsigned int uiwParam, unsigned int uilParam)
{
  CHairShopFrameWork *v4; // esi@1
  unsigned __int8 v5; // cl@4
  unsigned int v6; // eax@4
  unsigned int *v7; // ebx@12
  unsigned int *v8; // edi@12
  Avatar *v9; // ecx@13
  char v10; // al@13
  unsigned int *v11; // ebx@18
  unsigned int *v12; // edi@18
  Avatar *v13; // ecx@19
  char v14; // al@19
  void *v15; // edi@24
  char *v16; // eax@30
  MsgBox *v17; // eax@30
  char kBaseClassID; // [sp+0h] [bp-28h]@5
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+4h] [bp-24h]@4
  unsigned int v20; // [sp+18h] [bp-10h]@1
  int v21; // [sp+24h] [bp-4h]@4
  int v22; // [sp+28h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v4 = this;
  switch ( uiMsg )
  {
    case 9u:
      PgFrameWork::PostFrameMsgChange(&this->baseclass_0, AccountFrameWorkID, 0);
      break;
    case 0xAu:
      if ( this->m_byBaseGender == (unsigned __int8)this->m_kShapeData._bf0 >> 7 )
      {
        CHairShopFrameWork::NcCharSetStyleReq(this);
      }
      else
      {
        v16 = TextData::Get(0x6889597Fu);
        v17 = MsgBox::Modal(MSGBOX_OKCANCEL, v16);
        vecResult.baseclass_0._Myend = (unsigned int *)11;
        MsgBox::SetFrameWorkMsgOnClose(v17, &v4->baseclass_0, (PgMsg::Frame *)&vecResult, 0);
      }
      break;
    case 0xBu:
      vecResult.baseclass_0._Mylast = 0;
      vecResult.baseclass_0._Myend = 0;
      *(_DWORD *)&vecResult.baseclass_0._Alval.baseclass_0.dummy[0] = 0;
      v5 = this->m_kShapeData._bf0;
      v6 = ((unsigned int)v4->m_kShapeData._bf0 >> 2) & 0x1F;
      v21 = 0;
      switch ( v6 )
      {
        case 1u:
        case 2u:
        case 3u:
        case 4u:
        case 5u:
          kBaseClassID = 1;
          break;
        case 6u:
        case 7u:
        case 8u:
        case 9u:
        case 0xAu:
          kBaseClassID = 6;
          break;
        case 0xBu:
        case 0xCu:
        case 0xDu:
        case 0xEu:
        case 0xFu:
          kBaseClassID = 11;
          break;
        case 0x10u:
        case 0x11u:
        case 0x12u:
        case 0x13u:
        case 0x14u:
          kBaseClassID = 16;
          break;
        case 0x15u:
        case 0x16u:
        case 0x17u:
        case 0x18u:
        case 0x19u:
          kBaseClassID = 21;
          break;
        case 0x1Au:
        case 0x1Bu:
          kBaseClassID = 26;
          break;
        default:
          kBaseClassID = 0;
          break;
      }
      HairInfoTab::GetEquipableHairType(kBaseClassID, v5 >> 7, 0, &vecResult.baseclass_0._Mylast);
      v7 = vecResult.baseclass_0._Myend;
      v8 = vecResult.baseclass_0._Mylast;
      if ( ((char *)vecResult.baseclass_0._Myend - (char *)vecResult.baseclass_0._Mylast) & 0xFFFFFFFC )
      {
        v9 = v4->m_pkAvatar;
        v10 = *(_BYTE *)vecResult.baseclass_0._Mylast;
        if ( v9 )
        {
          if ( v4->m_kShapeData.hairtype != v10 )
          {
            v4->m_kShapeData.hairtype = v10;
            Avatar::ChangeHairTypeShape(v9, &v4->m_kShapeData);
          }
        }
      }
      if ( v8 != v7 )
      {
        memmove((char *)v8, (char *)v7, 0);
        vecResult.baseclass_0._Myend = v8;
      }
      HairColorInfoTab::GetEquipableHairColor(0, &vecResult.baseclass_0._Mylast);
      v11 = vecResult.baseclass_0._Myend;
      v12 = vecResult.baseclass_0._Mylast;
      if ( ((char *)vecResult.baseclass_0._Myend - (char *)vecResult.baseclass_0._Mylast) & 0xFFFFFFFC )
      {
        v13 = v4->m_pkAvatar;
        v14 = *(_BYTE *)vecResult.baseclass_0._Mylast;
        if ( v13 )
        {
          if ( v4->m_kShapeData.haircolor != v14 )
          {
            v4->m_kShapeData.haircolor = v14;
            Avatar::ChangeHairColorShape(v13, &v4->m_kShapeData);
          }
        }
      }
      if ( v12 != v11 )
      {
        memmove((char *)v12, (char *)v11, 0);
        vecResult.baseclass_0._Myend = v12;
      }
      FaceInfoTab::GetEquipableFace(0, &vecResult.baseclass_0._Mylast);
      v15 = vecResult.baseclass_0._Mylast;
      if ( ((char *)vecResult.baseclass_0._Myend - (char *)vecResult.baseclass_0._Mylast) & 0xFFFFFFFC )
        CHairShopFrameWork::ChangeAvatarFace(v4, *(_BYTE *)vecResult.baseclass_0._Mylast);
      CHairShopFrameWork::NcCharSetStyleReq(v4);
      if ( v15 )
        operator delete(v15);
      break;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0062F3F0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ChangeAvatarGender(CHairShopFrameWork *this, bool bIsMale)
{
  CHairShopFrameWork *v2; // esi@1
  unsigned __int8 v3; // al@3
  unsigned int *v4; // eax@12
  char *v5; // edi@12
  unsigned int *v6; // eax@16
  char *v7; // edi@16
  void *v8; // eax@20
  char v9; // cl@24
  char v10; // dl@24
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+24h] [bp-1Ch]@4
  int v12; // [sp+3Ch] [bp-4h]@4
  char kBaseClassID; // [sp+48h] [bp+8h]@5

  v2 = this;
  if ( this->m_pkAvatar && (unsigned __int8)this->m_kShapeData._bf0 >> 7 != bIsMale )
  {
    v3 = (bIsMale << 7) | this->m_kShapeData._bf0 & 0x7F;
    this->m_kShapeData._bf0 = v3;
    if ( v3 >> 7 == this->m_byBaseGender )
    {
      v9 = this->m_byBaseHairColor;
      v10 = v2->m_byBaseFaceIndex;
      v2->m_kShapeData.hairtype = v2->m_byBaseHairType;
      v2->m_kShapeData.haircolor = v9;
      v2->m_kShapeData.faceshape = v10;
    }
    else
    {
      *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      vecResult.baseclass_0._Mylast = 0;
      vecResult.baseclass_0._Myend = 0;
      v12 = 0;
      switch ( ((unsigned int)v3 >> 2) & 0x1F )
      {
        case 1u:
        case 2u:
        case 3u:
        case 4u:
        case 5u:
          kBaseClassID = 1;
          break;
        case 6u:
        case 7u:
        case 8u:
        case 9u:
        case 0xAu:
          kBaseClassID = 6;
          break;
        case 0xBu:
        case 0xCu:
        case 0xDu:
        case 0xEu:
        case 0xFu:
          kBaseClassID = 11;
          break;
        case 0x10u:
        case 0x11u:
        case 0x12u:
        case 0x13u:
        case 0x14u:
          kBaseClassID = 16;
          break;
        case 0x15u:
        case 0x16u:
        case 0x17u:
        case 0x18u:
        case 0x19u:
          kBaseClassID = 21;
          break;
        case 0x1Au:
        case 0x1Bu:
          kBaseClassID = 26;
          break;
        default:
          kBaseClassID = 0;
          break;
      }
      HairInfoTab::GetEquipableHairType(kBaseClassID, v3 >> 7, 0, &vecResult);
      v4 = vecResult.baseclass_0._Mylast;
      v5 = *(char **)&vecResult;
      if ( (unsigned int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) & 0xFFFFFFFC )
        v2->m_kShapeData.hairtype = **(_BYTE **)&vecResult;
      if ( (unsigned int *)v5 != v4 )
      {
        memmove(v5, (char *)v4, 0);
        vecResult.baseclass_0._Mylast = (unsigned int *)v5;
      }
      HairColorInfoTab::GetEquipableHairColor(0, &vecResult);
      v6 = vecResult.baseclass_0._Mylast;
      v7 = *(char **)&vecResult;
      if ( (unsigned int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) & 0xFFFFFFFC )
        v2->m_kShapeData.haircolor = **(_BYTE **)&vecResult;
      if ( (unsigned int *)v7 != v6 )
      {
        memmove(v7, (char *)v6, 0);
        vecResult.baseclass_0._Mylast = (unsigned int *)v7;
      }
      FaceInfoTab::GetEquipableFace(0, &vecResult);
      v8 = *(void **)&vecResult;
      if ( (unsigned int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) & 0xFFFFFFFC )
        v2->m_kShapeData.faceshape = **(_BYTE **)&vecResult;
      v12 = -1;
      if ( v8 )
        operator delete(v8);
    }
    Avatar::ChangeGenderShape(v2->m_pkAvatar, &v2->m_kShapeData, 2u);
    ((void (__stdcall *)(_DWORD))v2->m_pkAvatar->baseclass_0.baseclass_0.vfptr[17].DeleteAbStateByAbstateIndex)(0.0);
    NiAVObject::Update(&v2->m_pkCharNode->baseclass_0, 0.0, 0);
    ((void (__stdcall *)(signed int, _DWORD, _DWORD))v2->m_pkAvatar->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(
      102010,
      0,
      0);
    CharMgr::UpdateAvatar(&g_kCharMgr, 0.0);
  }
}

//----- (0062F640) --------------------------------------------------------
bool __thiscall CHairShopFrameWork::InitWindow(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  NiSourceTexture *v2; // eax@2
  PgWin *v3; // eax@3
  PgWin *v4; // eax@3
  PgWin *v5; // eax@3

  v1 = this;
  *(_WORD *)&this->m_bAutoTurn = 0;
  this->m_bWaitPacketReply = 0;
  if ( !g_pkToolTipWin )
  {
    v2 = MenuTexMgr::GetTexture(1u);
    g_pkToolTipWin = (PgWin *)ToolTipWin::CreateWin(v2, 7u, 7u);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, g_pkToolTipWin);
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  }
  v3 = (PgWin *)CHairShopOkCancelWin::CreateWin(&v1->baseclass_0);
  v1->m_pkHairShopOkCancelWin = (CHairShopOkCancelWin *)v3;
  PgWinMgr::ShowWinAtAbsoluteFar(&Pgg_kWinMgr, v3);
  v4 = (PgWin *)CHairShopViewCtrlWin::CreateWin(&v1->baseclass_0);
  v1->m_pkHairShopViewCtrlWin = (CHairShopViewCtrlWin *)v4;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
  v5 = (PgWin *)CHairShopwin::CreateWin(&v1->baseclass_0);
  v1->m_pkHairShopWin = (CHairShopwin *)v5;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v5);
  return 1;
}

//----- (0062F6F0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ClearItemInfo(CHairShopFrameWork *this)
{
  *(_DWORD *)&this->m_stItems[0].ItemID = 65535;
  *(_DWORD *)&this->m_stItems[1].ItemID = 65535;
  *(_DWORD *)&this->m_stItems[2].ItemID = 65535;
  *(_DWORD *)&this->m_stItems[3].ItemID = 65535;
  *(_DWORD *)&this->m_stItems[4].ItemID = 65535;
  *(_DWORD *)&this->m_stItems[5].ItemID = 65535;
}

//----- (0062F730) --------------------------------------------------------
void __thiscall CHairShopFrameWork::TerminateWindow(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  unsigned int v2; // eax@9

  v1 = this;
  if ( this->m_pkHairShopWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_pkHairShopWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkHairShopWin = 0;
  }
  if ( v1->m_pkHairShopViewCtrlWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkHairShopViewCtrlWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkHairShopViewCtrlWin = 0;
  }
  if ( v1->m_pkHairShopOkCancelWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_pkHairShopOkCancelWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkHairShopOkCancelWin = 0;
  }
  if ( g_pkToolTipWin )
  {
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, g_pkToolTipWin);
    g_pkToolTipWin = 0;
  }
  v2 = stru_B703FC.m_uiHead;
  if ( stru_B703FC.m_uiHead != -1 )
  {
    while ( 1 )
    {
      ++v2;
      if ( v2 == stru_B703FC.m_uiAlloced )
        v2 = 0;
      if ( v2 == stru_B703FC.m_uiTail )
        break;
      if ( v2 == -1 )
      {
        stru_B703FC.m_uiHead = -1;
        return;
      }
    }
    stru_B703FC.m_uiTail = 0;
    stru_B703FC.m_uiHead = -1;
  }
}

//----- (0062F7E0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::TerminateBackgroundScene(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  NiCamera *v2; // edi@1
  NiNode *v3; // edi@6
  NiNode *v4; // edi@11
  NiCamera *v5; // edi@17
  NiNode *v6; // edi@22

  v1 = this;
  v2 = this->m_spCamera.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spCamera.m_pObject = 0;
  }
  v3 = v1->m_spCharScene.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spCharScene.m_pObject = 0;
  }
  v4 = v1->m_spBackgroundScene.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spBackgroundScene.m_pObject = 0;
  }
  if ( v1->m_spFaceCamera.m_pObject )
  {
    v5 = v1->m_spFaceCamera.m_pObject;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spFaceCamera.m_pObject = 0;
    }
  }
  v6 = v1->m_spShadowScene.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    v1->m_spShadowScene.m_pObject = 0;
  }
}

//----- (0062F8B0) --------------------------------------------------------
bool __thiscall CHairShopFrameWork::InitAvatar(CHairShopFrameWork *this)
{
  NsPgToonExtraData *v1; // eax@1
  CHairShopFrameWork *v2; // esi@1
  double v3; // st7@1
  NiCamera *v4; // edx@1
  PROTO_AVATAR_SHAPE_INFO *v5; // edi@1
  PROTO_AVATAR_SHAPE_INFO *v6; // eax@1
  bool result; // al@2
  char v8; // al@3
  char v9; // cl@3
  char v10; // dl@3
  unsigned __int8 v11; // al@3
  Avatar *v12; // eax@3
  NiPoint3 kPos; // [sp+24h] [bp-1Ch]@3
  NiPoint3 kDir; // [sp+30h] [bp-10h]@3
  float v15; // [sp+3Ch] [bp-4h]@1

  v1 = Engine3D::ms_spToonExtraData;
  v2 = this;
  v15 = fabs(1.5);
  v3 = v15;
  v4 = this->m_spCamera.m_pObject;
  this->m_pkOldCTCamera = Engine3D::ms_spToonExtraData->m_pCamera;
  v1->m_pCamera = v4;
  this->m_spAvatarPos.m_pObject->baseclass_0.m_kLocal.m_fScale = v3;
  this->m_spFaceAvatarPos.m_pObject->baseclass_0.m_kLocal.m_fScale = v3;
  CHairShopFrameWork::fToonLineSize = Engine3D::ms_spToonExtraData->m_fLineSize;
  v5 = &this->m_kShapeData;
  Engine3D::ms_spToonExtraData->m_fLineSize = 0.00044999999;
  *(_DWORD *)&this->m_kShapeData._bf0 = 0;
  v6 = User::GetMainCharShapeData(&g_kUser);
  if ( v6
    && (*(_DWORD *)&v5->_bf0 = *(_DWORD *)&v6->_bf0,
        kPos.x = 0.0,
        v8 = v2->m_kShapeData.hairtype,
        kPos.y = 0.0,
        v9 = v2->m_kShapeData.haircolor,
        kPos.z = 0.0,
        v10 = v2->m_kShapeData.faceshape,
        kDir.x = 0.0,
        v2->m_byBaseHairType = v8,
        v11 = v5->_bf0,
        kDir.y = -1.0,
        v2->m_byBaseHairColor = v9,
        kDir.z = 0.0,
        v2->m_byBaseFaceIndex = v10,
        v2->m_byBaseGender = v11 >> 7,
        CharResMgr::RemoveAllCharActor(&g_kCharResMgr),
        v12 = CharMgr::AddAvatar(&g_kCharMgr, v5, &kPos, &kDir, 2u),
        (v2->m_pkAvatar = v12) != 0) )
  {
    v2->m_pkCharNode = v12->baseclass_0.m_spScene.m_pObject;
    v12->baseclass_0.baseclass_0.vfptr[17].DeleteAbStateByAbstateIndex((AbStateInfectee *)v12, COERCE_ABSTATEINDEX(0.0));
    NiAVObject::Update(&v2->m_pkCharNode->baseclass_0, 0.0, 0);
    ((void (__stdcall *)(NiNode *, _DWORD))v2->m_spAvatarPos.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_pkCharNode,
      0);
    NiAVObject::UpdateProperties(&v2->m_spAvatarPos.m_pObject->baseclass_0);
    NiAVObject::UpdateEffects(&v2->m_spAvatarPos.m_pObject->baseclass_0);
    NiAVObject::Update(&v2->m_spAvatarPos.m_pObject->baseclass_0, 0.0, 1);
    ((void (__stdcall *)(signed int, _DWORD, _DWORD))v2->m_pkAvatar->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty)(
      102010,
      0,
      0);
    CharMgr::UpdateAvatar(&g_kCharMgr, 0.0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// AA270C: using guessed type float CHairShopFrameWork__fToonLineSize;

//----- (0062FA10) --------------------------------------------------------
void __thiscall CHairShopFrameWork::TerminateAvatar(CHairShopFrameWork *this)
{
  NsPgToonExtraData *v1; // eax@1
  CHairShopFrameWork *v2; // edi@1
  NiNode *v3; // esi@3

  v1 = Engine3D::ms_spToonExtraData;
  v2 = this;
  if ( Engine3D::ms_spToonExtraData )
  {
    Engine3D::ms_spToonExtraData->m_fLineSize = 0.0017500001;
    v1->m_pCamera = this->m_pkOldCTCamera;
  }
  v3 = this->m_spAvatarPos.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spAvatarPos.m_pObject = 0;
  }
  v2->m_pkAvatar = 0;
  CharMgr::RemoveAllWithoutMainChar(&g_kCharMgr);
}

//----- (0062FA70) --------------------------------------------------------
bool __thiscall CHairShopFrameWork::InitNet(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // ebx@1
  Net *v2; // esi@1
  Net *v3; // edi@1

  v1 = this;
  v2 = this->m_spWorldMgrNet.m_pObject;
  v3 = g_kNetMgr.m_spWorldMgr.m_pObject;
  if ( v2 != g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spWorldMgrNet.m_pObject = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount);
  }
  return 1;
}

//----- (0062FAC0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::TerminateNet(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // edi@1
  Net *v2; // esi@1

  v1 = this;
  v2 = this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
}

//----- (0062FB00) --------------------------------------------------------
bool __thiscall CHairShopFrameWork::InitShadow(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  NiNode *v2; // ecx@1
  NiTListItem<NiPointer<Shadow> > *v3; // edi@1
  unsigned int v4; // eax@1
  NiTListItem<NiPointer<Shadow> > *v5; // ST30_4@2
  void *v6; // eax@5
  int v7; // edi@5
  int v8; // eax@6
  void *v9; // eax@12
  unsigned int v10; // edi@12
  unsigned int v11; // eax@13
  int v12; // ebx@15
  NiNode *v13; // edi@21
  Shadow *v14; // ecx@21
  int v16; // [sp+34h] [bp-34h]@0
  int v17; // [sp+38h] [bp-30h]@0
  int v18; // [sp+3Ch] [bp-2Ch]@0
  int v19; // [sp+40h] [bp-28h]@0
  NiPoint3 kDefaultDirectionalLightDir; // [sp+44h] [bp-24h]@1
  Shadow *v21; // [sp+50h] [bp-18h]@5
  NiPointer<Shadow> spShadow; // [sp+54h] [bp-14h]@7
  unsigned int i; // [sp+58h] [bp-10h]@4
  int v24; // [sp+64h] [bp-4h]@5

  v1 = this;
  v2 = this->m_spShadowScene.m_pObject;
  kDefaultDirectionalLightDir.x = 0.0;
  kDefaultDirectionalLightDir.y = 0.0;
  v1->m_nMaxShadowObject = 1;
  kDefaultDirectionalLightDir.z = 50.0;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_kChildren);
  v3 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3;
      v3 = v3->m_pkNext;
      v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *)&v1->m_kShadowList,
        v5);
    }
    while ( v3 );
    v4 = 0;
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<Shadow> > *)v4;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<Shadow> > *)v4;
  for ( i = v4; i < v1->m_nMaxShadowObject; ++i )
  {
    v6 = operator new(0x84u);
    v21 = (Shadow *)v6;
    v7 = 0;
    v24 = 0;
    if ( v6 )
    {
      Shadow::Shadow((Shadow *)v6, &kDefaultDirectionalLightDir, 0, 0, 5u);
      v7 = v8;
    }
    spShadow.m_pObject = (Shadow *)v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)(v7 + 4));
    v24 = 1;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v1->m_kShadowList,
      (NiPointer<NiDX92DBufferData> *)&spShadow);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spShadowScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *(_DWORD *)(v7 + 116),
      0);
    v24 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  }
  v9 = operator new(0xE8u);
  v21 = (Shadow *)v9;
  v10 = 0;
  v24 = 2;
  if ( v9 )
  {
    NiNode::NiNode((NiNode *)v9, 0);
    i = v11;
  }
  else
  {
    i = 0;
  }
  v24 = -1;
  NiObjectNET::SetName((NiObjectNET *)i, "ShadowNode");
  v12 = (signed int)((char *)v1->m_vecBGObjectNode.baseclass_0._Mylast
                   - *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v12 )
  {
    do
    {
      ((void (__stdcall *)(NiPointer<Shadow> *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &spShadow,
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10));
      if ( spShadow.m_pObject )
      {
        v21 = spShadow.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&spShadow.m_pObject->baseclass_0.m_uiRefCount) )
        {
          if ( v21 )
            ((void (__stdcall *)(signed int))v21->baseclass_0.vfptr->__vecDelDtor)(1);
        }
      }
      (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)i + 116))(
        *(_DWORD *)(*(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v10++),
        0);
    }
    while ( v10 < v12 );
  }
  v13 = (NiNode *)i;
  ((void (__stdcall *)(unsigned int, _DWORD, int, int, int, int, _DWORD, _DWORD, _DWORD, Shadow *, Shadow *))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    i,
    0,
    v16,
    v17,
    v18,
    v19,
    (_DWORD)kDefaultDirectionalLightDir.x,
    LODWORD(kDefaultDirectionalLightDir.y),
    LODWORD(kDefaultDirectionalLightDir.z),
    v21,
    spShadow.m_pObject);
  spShadow.m_pObject = (Shadow *)1;
  v21 = v14;
  NiAVObject::Update(&v1->m_spCharScene.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::UpdateProperties(&v1->m_spCharScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spCharScene.m_pObject->baseclass_0);
  CHairShopFrameWork::ApplyTerrain(v1, v13);
  return 1;
}

//----- (0062FD20) --------------------------------------------------------
void __thiscall CHairShopFrameWork::CHairShopFrameWork(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.m_pkMsgHooker = 0;
  this->baseclass_0.baseclass_0.m_uiMessageNum = 0;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  this->baseclass_0.m_kMsgQ.m_pBase = (PgMsg::Frame *)operator new__(0x14u);
  v1->baseclass_0.m_kMsgQ.m_uiTail = 0;
  v1->baseclass_0.m_kMsgQ.m_uiAlloced = 1;
  v1->baseclass_0.m_kMsgQ.m_uiHead = -1;
  v1->baseclass_0.m_BackFrameID = 0;
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&CHairShopFrameWork::_vftable_;
  v1->m_spFaceCamera.m_pObject = 0;
  v1->m_spCamera.m_pObject = 0;
  v1->m_spBackgroundScene.m_pObject = 0;
  v1->m_spCharScene.m_pObject = 0;
  v1->m_spAvatarPos.m_pObject = 0;
  v1->m_spFaceAvatarPos.m_pObject = 0;
  v1->m_spWorldMgrNet.m_pObject = 0;
  v1->m_spShadowScene.m_pObject = 0;
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  v1->m_pkHairShopOkCancelWin = 0;
  v1->m_pkHairShopViewCtrlWin = 0;
  v1->m_pkHairShopWin = 0;
  v1->m_pkAvatar = 0;
  *(_WORD *)&v1->m_byBaseHairColor = 0;
  v1->m_byBaseHairType = 0;
  v1->m_byBaseGender = 0;
}
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 9C1BAC: using guessed type int (__stdcall *CHairShopFrameWork___vftable_)(int uiFlags);

//----- (0062FDE0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::_CHairShopFrameWork(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // ebx@1
  int v2; // esi@5
  NiTListItem<NiPointer<Shadow> > *v3; // edi@5
  NiTListItem<NiPointer<Shadow> > *v4; // ST00_4@6
  NiNode *v5; // esi@7
  Net *v6; // esi@11
  NiNode *v7; // esi@15
  NiNode *v8; // esi@19
  NiNode *v9; // esi@23
  NiNode *v10; // esi@27
  NiCamera *v11; // esi@31
  NiCamera *v12; // esi@35
  void *v13; // ST00_4@39

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&CHairShopFrameWork::_vftable_;
  if ( *(_DWORD *)&this->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecShadowObject.baseclass_0._Mylast = 0;
  v1->m_vecShadowObject.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecBGObjectNode.baseclass_0._Mylast = 0;
  v1->m_vecBGObjectNode.baseclass_0._Myend = 0;
  v2 = (int)&v1->m_kShadowList;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v3 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(&v1->m_kShadowList, v4);
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  v5 = v1->m_spShadowScene.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spWorldMgrNet.m_pObject;
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount) && v6 )
    v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spFaceAvatarPos.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spAvatarPos.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spCharScene.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  v10 = v1->m_spBackgroundScene.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_spCamera.m_pObject;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v12 = v1->m_spFaceCamera.m_pObject;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  v13 = v1->baseclass_0.m_kMsgQ.m_pBase;
  v1->baseclass_0.baseclass_0.vfptr = (IDirectMessengerVtbl *)&PgFrameWork::_vftable_;
  operator delete__(v13);
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 979544: using guessed type int (__stdcall *PgFrameWork___vftable_)(int uiFlags);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 9C1BAC: using guessed type int (__stdcall *CHairShopFrameWork___vftable_)(int uiFlags);

//----- (0062FFF0) --------------------------------------------------------
bool __thiscall CHairShopFrameWork::InitBackgroundScene(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // edi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  NiNode *v5; // esi@3
  NiNode *v6; // esi@10
  void *v7; // eax@15
  int v8; // eax@16
  int v9; // ebx@16
  NiNode *v10; // esi@18
  void *v11; // ebx@25
  void *v12; // eax@25
  void *v13; // esi@25
  void *v14; // eax@29
  int v15; // esi@29
  void *v16; // eax@36
  void *v17; // esi@36
  void *v18; // eax@41
  unsigned int v19; // eax@42
  NiNode *v20; // esi@44
  void *v21; // eax@52
  int v22; // eax@53
  int v23; // esi@53
  int v24; // eax@55
  void *v25; // eax@55
  int v26; // eax@56
  int v27; // esi@56
  int v28; // eax@58
  NiNode *v29; // ST70_4@58
  char *v30; // eax@60
  NiNode *v31; // esi@60
  int v32; // esi@64
  int v34; // esi@68
  unsigned int v35; // eax@73
  NiCamera *v36; // ebx@73
  NiShader *v37; // eax@81
  NiShader *v38; // eax@81
  NiNode *v39; // ebx@81
  unsigned int v40; // eax@86
  NiNode *v41; // eax@88
  NiShader *v42; // eax@90
  NiShader *v43; // eax@90
  NiNode *v44; // ebx@90
  NiShader *v45; // esi@90
  NiNode *v46; // eax@97
  char *v47; // eax@99
  char *v48; // ebx@99
  char *v49; // ecx@101
  char *v50; // esi@101
  void *v51; // esi@103
  int v52; // esi@107
  void *spkAlphaProp; // [sp+98h] [bp-20h]@25
  void *pkObj; // [sp+9Ch] [bp-1Ch]@27
  unsigned int pkCamera; // [sp+A0h] [bp-18h]@61
  NiNode *v56; // [sp+A4h] [bp-14h]@27
  unsigned int _Val; // [sp+A8h] [bp-10h]@34
  int v58; // [sp+B4h] [bp-4h]@1

  v1 = this;
  v2 = operator new(0xE8u);
  v3 = 0;
  v58 = 0;
  if ( v2 )
  {
    NiNode::NiNode((NiNode *)v2, 0);
    v3 = v4;
  }
  v5 = v1->m_spBackgroundScene.m_pObject;
  v58 = -1;
  if ( v5 != (NiNode *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spBackgroundScene.m_pObject = (NiNode *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v6 = v1->m_spShadowScene.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spShadowScene.m_pObject = 0;
  }
  v7 = operator new(0xE8u);
  v58 = 1;
  if ( v7 )
  {
    NiNode::NiNode((NiNode *)v7, 0);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  v10 = v1->m_spShadowScene.m_pObject;
  v58 = -1;
  if ( v10 != (NiNode *)v9 )
  {
    if ( v10
      && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v1->m_spShadowScene.m_pObject = (NiNode *)v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)(v9 + 4));
  }
  v11 = 0;
  spkAlphaProp = 0;
  v58 = 2;
  v12 = operator new(0x20u);
  v13 = v12;
  LOBYTE(v58) = 3;
  if ( v12 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v12);
    *((_BYTE *)v13 + 30) = 0;
    *(_DWORD *)v13 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v13 + 14) = 236;
    v11 = v13;
    spkAlphaProp = v13;
    InterlockedIncrement((volatile LONG *)v13 + 1);
  }
  *((_WORD *)v11 + 14) |= 1u;
  *((_WORD *)v11 + 14) |= 0x200u;
  *((_WORD *)v11 + 14) = *((_WORD *)v11 + 14) & 0xF3FF | 0x1000;
  *((_BYTE *)v11 + 30) = 8;
  *((_WORD *)v11 + 14) = (*((_WORD *)v11 + 14) & 0xFE5F | 0x40) & 0xFFE3 | 2;
  v56 = v1->m_spShadowScene.m_pObject;
  pkObj = v11;
  InterlockedIncrement((volatile LONG *)v11 + 1);
  LOBYTE(v58) = 4;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v56->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&pkObj);
  LOBYTE(v58) = 2;
  if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
  v14 = operator new(0x28u);
  v15 = (int)v14;
  LOBYTE(v58) = 5;
  if ( v14 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v14);
    *(_DWORD *)v15 = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(v15 + 28) = 0;
    *(_DWORD *)(v15 + 32) = 0;
    *(_DWORD *)(v15 + 36) = 1;
  }
  else
  {
    v15 = 0;
  }
  v56 = (NiNode *)v15;
  if ( v15 )
    InterlockedIncrement((volatile LONG *)(v15 + 4));
  *(_DWORD *)(v15 + 32) = 1;
  *(_DWORD *)(v15 + 36) = 1;
  _Val = (unsigned int)v1->m_spShadowScene.m_pObject;
  pkObj = (void *)v15;
  InterlockedIncrement((volatile LONG *)(v15 + 4));
  LOBYTE(v58) = 7;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(_Val + 156),
    (NiPointer<NiRoom> *)&pkObj);
  LOBYTE(v58) = 6;
  if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
  v16 = operator new(0x30u);
  v17 = v16;
  LOBYTE(v58) = 8;
  if ( v16 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v16);
    *(_DWORD *)v17 = &NiFogProperty::_vftable_;
    *((float *)v17 + 9) = 0.0;
    *((float *)v17 + 10) = 0.0;
    *((float *)v17 + 11) = 0.0;
    *((_WORD *)v17 + 14) = 0;
    *((float *)v17 + 8) = 1.0;
    *((_DWORD *)v17 + 9) = NiColor::BLACK;
    *((_DWORD *)v17 + 10) = dword_B6E000;
    *((_DWORD *)v17 + 11) = dword_B6E004;
  }
  else
  {
    v17 = 0;
  }
  *((_WORD *)v17 + 14) &= 0xFFFEu;
  _Val = (unsigned int)v1->m_spShadowScene.m_pObject;
  pkObj = v17;
  InterlockedIncrement((volatile LONG *)v17 + 1);
  LOBYTE(v58) = 9;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)(_Val + 156),
    (NiPointer<NiRoom> *)&pkObj);
  LOBYTE(v58) = 6;
  if ( !InterlockedDecrement((volatile LONG *)v17 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v17)(v17, 1);
  v18 = operator new(0xE8u);
  LOBYTE(v58) = 10;
  if ( v18 )
  {
    NiNode::NiNode((NiNode *)v18, 0);
    _Val = v19;
  }
  else
  {
    _Val = 0;
    v19 = 0;
  }
  v20 = v1->m_spCharScene.m_pObject;
  LOBYTE(v58) = 6;
  if ( v20 != (NiNode *)v19 )
  {
    if ( v20 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v20 )
        v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
      v19 = _Val;
    }
    v1->m_spCharScene.m_pObject = (NiNode *)v19;
    if ( v19 )
      InterlockedIncrement((volatile LONG *)(v19 + 4));
  }
  v21 = operator new(0x10Cu);
  LOBYTE(v58) = 11;
  if ( v21 )
  {
    NiAmbientLight::NiAmbientLight((NiAmbientLight *)v21);
    v23 = v22;
  }
  else
  {
    v23 = 0;
  }
  *(_DWORD *)(v23 + 188) += 2;
  *(float *)(v23 + 224) = 1.0;
  LOBYTE(v58) = 6;
  *(float *)(v23 + 228) = 0.57999998;
  *(float *)(v23 + 232) = 0.57999998;
  *(float *)(v23 + 236) = 0.57999998;
  v24 = *(_DWORD *)(v23 + 188);
  *(_DWORD *)(v23 + 240) = NiColor::WHITE;
  *(_DWORD *)(v23 + 244) = dword_A88D90;
  *(_DWORD *)(v23 + 248) = dword_A88D94;
  ++v24;
  *(_DWORD *)(v23 + 188) = v24;
  *(_DWORD *)(v23 + 252) = NiColor::BLACK;
  *(_DWORD *)(v23 + 256) = dword_B6E000;
  *(_DWORD *)(v23 + 260) = dword_B6E004;
  *(_DWORD *)(v23 + 188) = v24 + 1;
  NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v23, v1->m_spCharScene.m_pObject);
  *(_BYTE *)(v23 + 176) = 1;
  ((void (__stdcall *)(int, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v23,
    0);
  v25 = operator new(0x118u);
  LOBYTE(v58) = 12;
  if ( v25 )
  {
    NiDirectionalLight::NiDirectionalLight((NiDirectionalLight *)v25);
    v27 = v26;
  }
  else
  {
    v27 = 0;
  }
  ++*(_DWORD *)(v27 + 188);
  v28 = *(_DWORD *)(v27 + 188);
  *(float *)(v27 + 224) = 1.0;
  *(_DWORD *)(v27 + 228) = NiColor::BLACK;
  *(_DWORD *)(v27 + 232) = dword_B6E000;
  *(_DWORD *)(v27 + 236) = dword_B6E004;
  *(float *)(v27 + 240) = 1.0;
  *(float *)(v27 + 244) = 1.0;
  v28 += 2;
  *(_DWORD *)(v27 + 188) = v28;
  *(float *)(v27 + 248) = 1.0;
  *(_DWORD *)(v27 + 252) = NiColor::BLACK;
  *(_DWORD *)(v27 + 256) = dword_B6E000;
  *(_DWORD *)(v27 + 260) = dword_B6E004;
  *(_DWORD *)(v27 + 188) = v28 + 1;
  v29 = v1->m_spCharScene.m_pObject;
  LOBYTE(v58) = 6;
  NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v27, v29);
  *(_BYTE *)(v27 + 176) = 1;
  ((void (__stdcall *)(int, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v27,
    0);
  LOBYTE(v58) = 13;
  if ( !Folder::m_bInit )
    Folder::Init();
  v30 = Folder::Merge(&Folder::m_acMenu, "\\shop\\HairShopBack.nif");
  v31 = PgUtil::LoadNifFile(v30, 0, 1);
  pkObj = v31;
  if ( !v31 )
  {
    v34 = (int)v56;
    LOBYTE(v58) = 2;
    if ( !InterlockedDecrement((volatile LONG *)&v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v34)(v34, 1);
    v58 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
    return 0;
  }
  InterlockedIncrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  pkCamera = 0;
  if ( !PgUtil::CatchCamera(&v31->baseclass_0, (NiCamera **)&pkCamera) )
  {
    LOBYTE(v58) = 6;
    if ( !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
    v32 = (int)v56;
    LOBYTE(v58) = 2;
    if ( !InterlockedDecrement((volatile LONG *)&v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v32)(v32, 1);
    v58 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
    {
      (**(void (__thiscall ***)(void *))v11)(v11);
      return 0;
    }
    return 0;
  }
  v35 = pkCamera;
  v36 = v1->m_spCamera.m_pObject;
  _Val = pkCamera;
  if ( v36 != (NiCamera *)pkCamera )
  {
    if ( v36 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v36 )
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
      v35 = _Val;
    }
    v1->m_spCamera.m_pObject = (NiCamera *)v35;
    if ( v35 )
      InterlockedIncrement((volatile LONG *)(v35 + 4));
  }
  v37 = (NiShader *)v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                      (NiRefObject *)v31,
                      (unsigned int)"Avatar01");
  v38 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v37);
  v39 = v1->m_spAvatarPos.m_pObject;
  _Val = (unsigned int)v38;
  if ( (NiShader *)v39 != v38 )
  {
    if ( v39
      && !InterlockedDecrement((volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v39 )
      v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v39, 1u);
    v40 = _Val;
    v1->m_spAvatarPos.m_pObject = (NiNode *)_Val;
    if ( v40 )
      InterlockedIncrement((volatile LONG *)(v40 + 4));
  }
  v41 = v1->m_spAvatarPos.m_pObject;
  if ( v41 )
    ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v41,
      0);
  v42 = (NiShader *)v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                      (NiRefObject *)v31,
                      (unsigned int)"Avatar_Face");
  v43 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v42);
  v44 = v1->m_spFaceAvatarPos.m_pObject;
  v45 = v43;
  if ( (NiShader *)v44 != v43 )
  {
    if ( v44
      && !InterlockedDecrement((volatile LONG *)&v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v44 )
      v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v44, 1u);
    v1->m_spFaceAvatarPos.m_pObject = (NiNode *)v45;
    if ( v45 )
      InterlockedIncrement((volatile LONG *)&v45->baseclass_0.m_uiRefCount);
  }
  v46 = v1->m_spFaceAvatarPos.m_pObject;
  if ( v46 )
    ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v46,
      0);
  ((void (__stdcall *)(void *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    pkObj,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spBackgroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCharScene.m_pObject,
    0);
  v47 = (char *)v1->m_vecShadowObject.baseclass_0._Mylast;
  v48 = *(char **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v48 != v47 )
  {
    _Val = 0;
    memmove(v48, v47, 0);
    v1->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)&v48[_Val];
  }
  _Val = (unsigned int)v1->m_spAvatarPos.m_pObject;
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecShadowObject,
    &_Val);
  v49 = (char *)v1->m_vecBGObjectNode.baseclass_0._Mylast;
  v50 = *(char **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v50 != v49 )
  {
    _Val = 0;
    memmove(v50, v49, 0);
    v1->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)&v50[_Val];
  }
  v51 = pkObj;
  pkObj = (void *)(*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)pkObj + 72))(pkObj, "Object33");
  if ( pkObj )
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v1->m_vecBGObjectNode,
      (const unsigned int *)&pkObj);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spShadowScene.m_pObject,
    0);
  NiAVObject::UpdateProperties(&v1->m_spBackgroundScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_spBackgroundScene.m_pObject->baseclass_0);
  NiAVObject::Update(&v1->m_spBackgroundScene.m_pObject->baseclass_0, 0.0, 1);
  LOBYTE(v58) = 6;
  if ( !InterlockedDecrement((volatile LONG *)v51 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v51)(v51, 1);
  v52 = (int)v56;
  LOBYTE(v58) = 2;
  if ( !InterlockedDecrement((volatile LONG *)&v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v52)(v52, 1);
  v58 = -1;
  if ( !InterlockedDecrement((volatile LONG *)spkAlphaProp + 1) )
    (**(void (__thiscall ***)(void *, signed int))spkAlphaProp)(spkAlphaProp, 1);
  return 1;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 9794FC: using guessed type int (__thiscall *NiFogProperty___vftable_)(void *p, char);
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A9541C: using guessed type char Folder__m_bInit;
// B6DFFC: using guessed type int NiColor__BLACK;
// B6E000: using guessed type int dword_B6E000;
// B6E004: using guessed type int dword_B6E004;

//----- (006308F0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::ReleaseShadow(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  NiNode **v2; // ecx@1
  char *v3; // edi@1
  char *v4; // ecx@3
  char *v5; // edi@3
  int v6; // edi@5
  NiTListItem<NiPointer<Shadow> > *v7; // esi@5
  NiTListItem<NiPointer<Shadow> > *v8; // ST08_4@6

  v1 = this;
  v2 = this->m_vecBGObjectNode.baseclass_0._Mylast;
  v3 = *(char **)&v1->m_vecBGObjectNode.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (NiNode **)v3 != v2 )
  {
    memmove(v3, (char *)v2, 0);
    v1->m_vecBGObjectNode.baseclass_0._Mylast = (NiNode **)v3;
  }
  v4 = (char *)v1->m_vecShadowObject.baseclass_0._Mylast;
  v5 = *(char **)&v1->m_vecShadowObject.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v5 != v4 )
  {
    memmove(v5, v4, 0);
    v1->m_vecShadowObject.baseclass_0._Mylast = (NiNode **)v5;
  }
  v6 = (int)&v1->m_kShadowList;
  v7 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v7 )
  {
    v8 = v7;
    v7 = v7->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 8))(v6, v8);
  }
  *(_DWORD *)(v6 + 12) = 0;
  *(_DWORD *)(v6 + 4) = 0;
  *(_DWORD *)(v6 + 8) = 0;
}

//----- (00630980) --------------------------------------------------------
bool __thiscall CHairShopFrameWork::Init(CHairShopFrameWork *this, PgMsg::Frame *ptFrameMsg)
{
  CHairShopFrameWork *v2; // esi@1
  bool result; // al@2
  CHairShopFrameWork *v4; // ecx@7
  char *v5; // eax@7
  char *v6; // ST04_4@7
  CDataDocument *v7; // eax@7

  v2 = this;
  if ( CHairShopFrameWork::InitBackgroundScene(this)
    && CHairShopFrameWork::InitAvatar(v2)
    && CHairShopFrameWork::InitWindow(v2)
    && CHairShopFrameWork::InitNet(v2)
    && CHairShopFrameWork::InitShadow(v2) )
  {
    v2->baseclass_0.m_bInit = 1;
    CHairShopFrameWork::ClearItemInfo(v2);
    CHairShopFrameWork::NcCharSetStyleItemInfoReq(v4);
    v5 = Folder::Menu();
    v6 = Folder::Merge(v5, "\\shop\\shop.conf");
    v7 = CDataDocument::Instance();
    CDataDocument::Load(v7, v6);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00630A00) --------------------------------------------------------
void __thiscall CHairShopFrameWork::Terminate(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  Net *v2; // edi@1
  NsPgToonExtraData *v3; // eax@6
  NiNode *v4; // edi@8

  v1 = this;
  CHairShopFrameWork::ReleaseShadow(this);
  v2 = v1->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spWorldMgrNet.m_pObject = 0;
  }
  CHairShopFrameWork::TerminateWindow(v1);
  v3 = Engine3D::ms_spToonExtraData;
  if ( Engine3D::ms_spToonExtraData )
  {
    Engine3D::ms_spToonExtraData->m_fLineSize = 0.0017500001;
    v3->m_pCamera = v1->m_pkOldCTCamera;
  }
  v4 = v1->m_spAvatarPos.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spAvatarPos.m_pObject = 0;
  }
  v1->m_pkAvatar = 0;
  CharMgr::RemoveAllWithoutMainChar(&g_kCharMgr);
  CHairShopFrameWork::TerminateBackgroundScene(v1);
  v1->baseclass_0.m_bInit = 0;
  v1->baseclass_0.m_BackFrameID = 0;
}

//----- (00630AA0) --------------------------------------------------------
NiRTTI *__thiscall CHairShopFrameWork::GetRTTI(CHairShopFrameWork *this)
{
  return &CHairShopFrameWork::m_RTTI;
}

//----- (00630AB0) --------------------------------------------------------
const char *__thiscall CHairShopFrameWork::GetFrameWorkName(CHairShopFrameWork *this)
{
  return CHairShopFrameWork::m_RTTI.m_pcName;
}

//----- (00630AC0) --------------------------------------------------------
void *__thiscall CHairShopFrameWork::_vector_deleting_destructor_(CHairShopFrameWork *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CHairShopFrameWork::_CHairShopFrameWork(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00630AF0) --------------------------------------------------------
int __thiscall CHairShopFrameWork::On_NC_USER_CONNECTCUT_CMD(CHairShopFrameWork *this, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = iRevBytes;
  if ( *(_WORD *)pvData == 1667 )
    g_kServer.m_bDoubleConnected = 1;
  return result;
}

//----- (00630B10) --------------------------------------------------------
int __thiscall CHairShopFrameWork::On_NC_CHAR_SET_STYLE_GET_INFO_ACK(CHairShopFrameWork *this, int iRevBytes, void *pvData)
{
  if ( *(_WORD *)pvData == 4736 )
  {
    this->m_stItems[0].ItemID = *((_WORD *)pvData + 1);
    this->m_stItems[0].ItemTotalLot = *((_WORD *)pvData + 2);
    this->m_stItems[1].ItemID = *((_WORD *)pvData + 3);
    this->m_stItems[1].ItemTotalLot = *((_WORD *)pvData + 4);
    this->m_stItems[2].ItemID = *((_WORD *)pvData + 5);
    this->m_stItems[2].ItemTotalLot = *((_WORD *)pvData + 6);
    this->m_stItems[3].ItemID = *((_WORD *)pvData + 7);
    this->m_stItems[3].ItemTotalLot = *((_WORD *)pvData + 8);
    this->m_stItems[4].ItemID = *((_WORD *)pvData + 9);
    this->m_stItems[4].ItemTotalLot = *((_WORD *)pvData + 10);
    this->m_stItems[5].ItemID = *((_WORD *)pvData + 11);
    this->m_stItems[5].ItemTotalLot = *((_WORD *)pvData + 12);
  }
  return iRevBytes;
}

//----- (00630BB0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::NcCharSetStyleReq(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  PgNet *v3; // ecx@2
  PROTO_NC_CHAR_SET_STYLE_REQ kProto; // [sp+4h] [bp-8h]@2
  NETCOMMAND netcmd; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    netcmd.protocol = 4216;
    PgNet::AddNetMsg(v2, &netcmd, 2);
    v3 = (PgNet *)v1->m_spWorldMgrNet.m_pObject;
    kProto = *(PROTO_NC_CHAR_SET_STYLE_REQ *)&v1->m_kShapeData._bf0;
    PgNet::SendNetMsg(v3, &kProto, 4);
  }
}

//----- (00630BF0) --------------------------------------------------------
void __thiscall CHairShopFrameWork::NcCharSetStyleItemInfoReq(CHairShopFrameWork *this)
{
  CHairShopFrameWork *v1; // esi@1
  PgNet *v2; // ecx@1
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@2
  PROTO_NC_CHAR_SET_STYLE_GET_INFO_REQ kProto; // [sp+Bh] [bp-1h]@2

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgrNet.m_pObject;
  if ( v2 )
  {
    netcmd.protocol = 4220;
    PgNet::AddNetMsg(v2, &netcmd, 2);
    PgNet::SendNetMsg(&v1->m_spWorldMgrNet.m_pObject->baseclass_0, &kProto, 1);
  }
}

//----- (00630C30) --------------------------------------------------------
int __thiscall CHairShopFrameWork::On_NC_USER_LOGINWORLD_ACK(CHairShopFrameWork *this, int iRevBytes, void *pvData)
{
  CHairShopFrameWork *v3; // esi@1

  v3 = this;
  g_kServer.m_kWorldMgrHandle = *(_WORD *)pvData;
  User::SetAvatarInfo(&g_kUser, (PROTO_AVATARINFORMATION *)((char *)pvData + 3), *((_BYTE *)pvData + 2));
  Net::NcMiscGameTimeReq(v3->m_spWorldMgrNet.m_pObject);
  PgFrameWork::PostFrameMsgChange(&v3->baseclass_0, CharSelectFrameWorkID, 0);
  return iRevBytes;
}

//----- (00630C80) --------------------------------------------------------
int __thiscall CHairShopFrameWork::On_NC_CHAR_SET_STYLE_ACK(CHairShopFrameWork *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  CHairShopFrameWork *v4; // esi@1
  char *v5; // eax@5
  int result; // eax@5
  char *v7; // eax@8
  char *v8; // eax@9
  char v9; // al@9
  unsigned __int16 v10; // cx@10
  int v11; // eax@10
  char v12; // dl@12
  char v13; // al@12
  char v14; // cl@12
  char *v15; // [sp-Ch] [bp-10h]@4
  unsigned int v16; // [sp-4h] [bp-8h]@3

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 == 4736 )
  {
    v8 = TextData::Get(0xA68A81BFu);
    MsgBox::Modal(MSGBOX_OK, v8);
    BYTE3(pvData) = 0;
    v9 = CHairShopFrameWork::FindItemGrade(v4, (bool *)&pvData + 3);
    if ( (unsigned __int8)v9 < 6u )
    {
      v10 = v4->m_stItems[(unsigned __int8)v9].ItemTotalLot;
      v11 = (int)&v4->m_stItems[(unsigned __int8)v9].ItemTotalLot;
      if ( v10 )
        *(_WORD *)v11 = v10 - 1;
    }
    v12 = v4->m_kShapeData.haircolor;
    v13 = v4->m_kShapeData.hairtype;
    v4->m_byBaseFaceIndex = v4->m_kShapeData.faceshape;
    v14 = (unsigned __int8)v4->m_kShapeData._bf0 >> 7;
    v4->m_byBaseHairColor = v12;
    v4->m_byBaseHairType = v13;
    v4->m_byBaseGender = v14;
LABEL_13:
    result = iRevBytes;
  }
  else
  {
    switch ( v3 )
    {
      case 4739:
        v16 = -1645099327;
        goto LABEL_8;
      case 4737:
      case 4738:
        TextData::Get(0xD4D93C40u);
        v15 = "%s(%d)";
        goto LABEL_5;
      case 4740:
        TextData::Get(0x94E7E8D1u);
        v15 = "%s(%d)";
LABEL_5:
        v5 = fs(v15);
        MsgBox::Modal(MSGBOX_OK, v5);
        result = iRevBytes;
        break;
      case 4742:
        v16 = 942497856;
LABEL_8:
        v7 = TextData::Get(v16);
        MsgBox::Modal(MSGBOX_OK, v7);
        result = iRevBytes;
        break;
      default:
        goto LABEL_13;
    }
  }
  return result;
}

//----- (00630DA0) --------------------------------------------------------
int __thiscall CHairShopFrameWork::ProcessNetMsg(CHairShopFrameWork *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  int result; // eax@1

  result = 0;
  if ( iDepart == 3 )
  {
    if ( iCommand == 20 )
    {
      result = CHairShopFrameWork::On_NC_USER_LOGINWORLD_ACK(this, iRevBytes, pvData);
    }
    else
    {
      if ( iCommand != 21 && iCommand == 23 )
      {
        if ( *(_WORD *)pvData == 1667 )
          g_kServer.m_bDoubleConnected = 1;
        result = iRevBytes;
      }
    }
  }
  else
  {
    if ( iDepart == 4 )
    {
      if ( iCommand == 121 )
      {
        result = CHairShopFrameWork::On_NC_CHAR_SET_STYLE_ACK(this, iRevBytes, pvData);
      }
      else
      {
        if ( iCommand == 125 )
          result = CHairShopFrameWork::On_NC_CHAR_SET_STYLE_GET_INFO_ACK(this, iRevBytes, pvData);
      }
    }
  }
  return result;
}

//----- (00630E20) --------------------------------------------------------
void __thiscall CHairShopOkCancelWin::CHairShopOkCancelWin(CHairShopOkCancelWin *this)
{
  CHairShopOkCancelWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopOkCancelWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopOkCancelWin::_vftable_;
}
// 9C1CBC: using guessed type int (__stdcall *CHairShopOkCancelWin___vftable_)(int uiFlags);
// 9C1CDC: using guessed type int (__thiscall *CHairShopOkCancelWin___vftable_)(void *p, char);

//----- (00630E40) --------------------------------------------------------
void __thiscall CHairShopOkCancelWin::_CHairShopOkCancelWin(CHairShopOkCancelWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopOkCancelWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopOkCancelWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9C1CBC: using guessed type int (__stdcall *CHairShopOkCancelWin___vftable_)(int uiFlags);
// 9C1CDC: using guessed type int (__thiscall *CHairShopOkCancelWin___vftable_)(void *p, char);

//----- (00630E60) --------------------------------------------------------
void __thiscall CHairShopOkCancelWin::UpdateMeWin(CHairShopOkCancelWin *this, float fCurTime)
{
  CHairShopOkCancelWin *v2; // esi@1
  PgWinBut *v3; // ecx@3

  v2 = this;
  if ( this->m_dwBtnDelay )
  {
    if ( timeGetTime() - this->m_dwBtnDelay > 0x3E8 )
    {
      v3 = v2->m_pkApplyBut;
      v2->m_dwBtnDelay = 0;
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    }
  }
}

//----- (00630EA0) --------------------------------------------------------
void __thiscall CHairShopOkCancelWin::OnCmdApply(CHairShopOkCancelWin *this)
{
  CHairShopOkCancelWin *v1; // esi@1

  v1 = this;
  if ( !this->m_dwBtnDelay )
  {
    CHairShopFrameWork::ChangeApply((CHairShopFrameWork *)this->baseclass_0.m_pkFrameWork);
    ((void (__stdcall *)(_DWORD))v1->m_pkApplyBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v1->m_dwBtnDelay = timeGetTime();
  }
}

//----- (00630EE0) --------------------------------------------------------
void __thiscall CHairShopOkCancelWin::OnCmdCancel(CHairShopOkCancelWin *this)
{
  CHairShopFrameWork::Exit((CHairShopFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00630EF0) --------------------------------------------------------
void __thiscall CHairShopOkCancelWin::OnCmdSetDefault(CHairShopOkCancelWin *this)
{
  CHairShopFrameWork::SetDefaultLooks((CHairShopFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (00630F00) --------------------------------------------------------
bool __thiscall CHairShopOkCancelWin::Create(CHairShopOkCancelWin *this, PgFrameWork *pkFrameWork)
{
  CHairShopOkCancelWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@10
  int v9; // ebx@10
  PgSprData *v10; // eax@10
  PgWin *v11; // edi@10
  PgFont *v12; // ST1C_4@10
  unsigned int v13; // ST18_4@10
  unsigned int v14; // eax@10
  PgWinText *v15; // eax@10
  NiRefObjectVtbl *v16; // edi@10
  PgFont *v17; // eax@10
  NiRefObjectVtbl *v18; // edi@10
  char *v19; // eax@10
  PgSprData *v20; // edi@10
  PgWinBut *v21; // eax@10
  PgWinBut *v22; // edi@10
  PgWin *v23; // ST20_4@10
  PgFont *v24; // ST1C_4@10
  unsigned int v25; // ST18_4@10
  unsigned int v26; // eax@10
  PgWinText *v27; // eax@10
  NiRefObjectVtbl *v28; // edi@10
  char *v29; // eax@10
  NiRefObjectVtbl *v30; // edi@10
  PgFont *v31; // eax@10
  PgSprData *v32; // edi@10
  PgWin *v33; // edi@10
  PgFont *v34; // ST1C_4@10
  unsigned int v35; // ST18_4@10
  unsigned int v36; // eax@10
  PgWinText *v37; // edi@10
  NiRefObjectVtbl *v38; // ST3C_4@10
  PgFont *v39; // eax@10
  NiRefObjectVtbl *v40; // ST3C_4@10
  char *v41; // eax@10
  PgSprData *v42; // edi@10
  PgWin *v43; // ST20_4@10
  PgWin *v44; // edi@10
  PgFont *v45; // ST1C_4@10
  unsigned int v46; // ST18_4@10
  unsigned int v47; // eax@10
  PgWinText *v48; // eax@10
  NiRefObjectVtbl *v49; // edi@10
  PgFont *v50; // eax@10
  NiRefObjectVtbl *v51; // edi@10
  char *v52; // eax@10
  NiRefObjectVtbl *v53; // edi@10
  unsigned int v54; // ST30_4@10
  NiNode *v55; // esi@10
  int uiLeft; // [sp+4h] [bp-18h]@4
  int uiTop; // [sp+8h] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+Ch] [bp-10h]@1
  int v59; // [sp+18h] [bp-4h]@1
  int iOffY; // [sp+24h] [bp+8h]@10

  v2 = this;
  this->m_dwBtnDelay = 0;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v59 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "\\shop\\ShopPanel.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "CHairShopOkCancelWin", 0) )
  {
    v6 = spNode.m_pObject;
    v59 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iOffY = uiTop;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextPanel", &uiLeft, &uiTop, 0);
  v11 = (PgWin *)PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = Font::Get(0);
  v13 = ((int (__thiscall *)(PgWin *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v11);
  v14 = ((int (__thiscall *)(PgWin *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v11);
  v15 = PgWinText::CreateWin(0, 2, v14, v13, v12, v11, 0, 0);
  v2->m_pkBeautyShopTextWin = v15;
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  ((void (__stdcall *)(_DWORD))v2->m_pkBeautyShopTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  SpScreenText::SetVerticalGap(&v2->m_pkBeautyShopTextWin->m_spTextGeom.m_pObject->baseclass_0, 6);
  v16 = v2->m_pkBeautyShopTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v17 = Font::Get(MENU);
  v16[113].__vecDelDtor((NiRefObject *)v2->m_pkBeautyShopTextWin, (unsigned int)v17);
  v18 = v2->m_pkBeautyShopTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v19 = TextData::Get(0x8097C8D5u);
  v18[118].__vecDelDtor((NiRefObject *)v2->m_pkBeautyShopTextWin, (unsigned int)v19);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PrePageNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "PrePageClick");
  PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "PrePageOver");
  v21 = PgWinBut::CreateWin(uiLeft - v9, uiTop - iOffY, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v2->m_pkApplyBut = v21;
  v21->m_bEnableClickSound = 0;
  v22 = v2->m_pkApplyBut;
  v23 = (PgWin *)v2->m_pkApplyBut;
  v24 = Font::Get(0);
  v25 = ((int (__thiscall *)(PgWinBut *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v22);
  v26 = ((int (__thiscall *)(PgWinBut *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v22);
  v27 = PgWinText::CreateWin(0, 3, v26, v25, v24, v23, 0, 0);
  v2->m_pkApplyTextWin = v27;
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v27,
    5u);
  v28 = v2->m_pkApplyTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v29 = TextData::Get(0xDA473531u);
  v28[118].__vecDelDtor((NiRefObject *)v2->m_pkApplyTextWin, (unsigned int)v29);
  v30 = v2->m_pkApplyTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = Font::Get(MENU);
  v30[113].__vecDelDtor((NiRefObject *)v2->m_pkApplyTextWin, (unsigned int)v31);
  SpScreenText::SetShadowOffset(&v2->m_pkApplyTextWin->m_spTextGeom.m_pObject->baseclass_0, 1u);
  ((void (__stdcall *)(_DWORD))v2->m_pkApplyTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CreatCharNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "CreatCharClick");
  PgSprData::Add(v32, &spNode.m_pObject->baseclass_0, "CreatCharOver");
  v33 = (PgWin *)PgWinBut::CreateWin(
                   uiLeft - v9,
                   uiTop - iOffY,
                   v32,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   2u,
                   0,
                   0);
  v34 = Font::Get(0);
  v35 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v33);
  v36 = ((int (__thiscall *)(PgWin *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v33);
  v37 = PgWinText::CreateWin(0, 3, v36, v35, v34, v33, 0, 0);
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v37,
    5u);
  v38 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v39 = Font::Get(MENU);
  v38[113].__vecDelDtor((NiRefObject *)v37, (unsigned int)v39);
  v40 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v41 = TextData::Get(0xBBE8DC30u);
  v40[118].__vecDelDtor((NiRefObject *)v37, (unsigned int)v41);
  SpScreenText::SetShadowOffset(&v37->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v37,
    0);
  v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "StartNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "StartClick");
  PgSprData::Add(v42, &spNode.m_pObject->baseclass_0, "StartOver");
  v43 = (PgWin *)PgWinBut::CreateWin(
                   uiLeft - v9,
                   uiTop - iOffY,
                   v42,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   1u,
                   0,
                   0);
  v2->m_pkCancelBut = (PgWinBut *)v43;
  v44 = v43;
  v45 = Font::Get(0);
  v46 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v44);
  v47 = ((int (__thiscall *)(PgWin *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v44);
  v48 = PgWinText::CreateWin(0, 3, v47, v46, v45, v43, 0, 0);
  v2->m_pkCancelTextWin = v48;
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v48,
    5u);
  v49 = v2->m_pkCancelTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v50 = Font::Get(MENU);
  v49[113].__vecDelDtor((NiRefObject *)v2->m_pkCancelTextWin, (unsigned int)v50);
  v51 = v2->m_pkCancelTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v52 = TextData::Get(0x45B392ACu);
  v51[118].__vecDelDtor((NiRefObject *)v2->m_pkCancelTextWin, (unsigned int)v52);
  SpScreenText::SetShadowOffset(&v2->m_pkCancelTextWin->m_spTextGeom.m_pObject->baseclass_0, 1u);
  ((void (__stdcall *)(_DWORD))v2->m_pkCancelTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v53 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v54 = PgWin::ms_uiScreenHeight
      - ((int (__thiscall *)(CHairShopOkCancelWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v2)
      + 4;
  ((void (__thiscall *)(CHairShopOkCancelWin *))v53[77].__vecDelDtor)(v2);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v55 = spNode.m_pObject;
  v59 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v55 )
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006314C0) --------------------------------------------------------
void __thiscall CHairShopOkCancelWin::OnCommand(CHairShopOkCancelWin *this, unsigned int wParam, int lParam)
{
  CHairShopOkCancelWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      CHairShopFrameWork::Exit((CHairShopFrameWork *)this->baseclass_0.m_pkFrameWork);
    }
    else
    {
      if ( wParam == 2 )
        CHairShopFrameWork::SetDefaultLooks((CHairShopFrameWork *)this->baseclass_0.m_pkFrameWork);
    }
  }
  else
  {
    if ( !this->m_dwBtnDelay )
    {
      CHairShopFrameWork::ChangeApply((CHairShopFrameWork *)this->baseclass_0.m_pkFrameWork);
      ((void (__stdcall *)(_DWORD))v3->m_pkApplyBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v3->m_dwBtnDelay = timeGetTime();
    }
  }
}

//----- (00631530) --------------------------------------------------------
CHairShopOkCancelWin *__cdecl CHairShopOkCancelWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CHairShopOkCancelWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CHairShopOkCancelWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CHairShopOkCancelWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CHairShopOkCancelWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9C1CBC: using guessed type int (__stdcall *CHairShopOkCancelWin___vftable_)(int uiFlags);
// 9C1CDC: using guessed type int (__thiscall *CHairShopOkCancelWin___vftable_)(void *p, char);

//----- (00631670) --------------------------------------------------------
void *__thiscall CHairShopOkCancelWin::_vector_deleting_destructor_(CHairShopOkCancelWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopOkCancelWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopOkCancelWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C1CBC: using guessed type int (__stdcall *CHairShopOkCancelWin___vftable_)(int uiFlags);
// 9C1CDC: using guessed type int (__thiscall *CHairShopOkCancelWin___vftable_)(void *p, char);

//----- (006316B0) --------------------------------------------------------
void __thiscall CHairShopViewCtrlWin::CHairShopViewCtrlWin(CHairShopViewCtrlWin *this)
{
  CHairShopViewCtrlWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkFrameWork = 0;
  v1->m_pkTurnLeftBtn = 0;
  v1->m_pkTurnRightBtn = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopViewCtrlWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopViewCtrlWin::_vftable_;
}
// 9C1F5C: using guessed type int (__stdcall *CHairShopViewCtrlWin___vftable_)(int uiFlags);
// 9C1F7C: using guessed type int (__thiscall *CHairShopViewCtrlWin___vftable_)(void *p, char);

//----- (006316E0) --------------------------------------------------------
void __thiscall CHairShopViewCtrlWin::_CHairShopViewCtrlWin(CHairShopViewCtrlWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopViewCtrlWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopViewCtrlWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9C1F5C: using guessed type int (__stdcall *CHairShopViewCtrlWin___vftable_)(int uiFlags);
// 9C1F7C: using guessed type int (__thiscall *CHairShopViewCtrlWin___vftable_)(void *p, char);

//----- (00631700) --------------------------------------------------------
void __thiscall CHairShopViewCtrlWin::OnCmdTurnLeft(CHairShopViewCtrlWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = this->m_pkFrameWork;
  if ( v1 )
  {
    LOBYTE(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = LOBYTE(v1[1].baseclass_0.m_uiMessageNum) == 0;
    BYTE1(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = 1;
  }
}

//----- (00631730) --------------------------------------------------------
void __thiscall CHairShopViewCtrlWin::OnCmdTurnRight(CHairShopViewCtrlWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = this->m_pkFrameWork;
  if ( v1 )
  {
    LOBYTE(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = LOBYTE(v1[1].baseclass_0.m_uiMessageNum) == 0;
    BYTE1(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = 0;
  }
}

//----- (00631760) --------------------------------------------------------
void __thiscall CHairShopViewCtrlWin::OnCommand(CHairShopViewCtrlWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@3
  PgFrameWork *v4; // eax@5

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      v3 = this->m_pkFrameWork;
      if ( v3 )
      {
        LOBYTE(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = LOBYTE(v3[1].baseclass_0.m_uiMessageNum) == 0;
        BYTE1(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = 0;
      }
    }
  }
  else
  {
    v4 = this->m_pkFrameWork;
    if ( v4 )
    {
      LOBYTE(v4[1].baseclass_0.m_uiMessageNum) = LOBYTE(v4[1].baseclass_0.m_uiMessageNum) == 0;
      BYTE1(this->m_pkFrameWork[1].baseclass_0.m_uiMessageNum) = 1;
    }
  }
}

//----- (006317C0) --------------------------------------------------------
bool __thiscall CHairShopViewCtrlWin::Create(CHairShopViewCtrlWin *this, PgFrameWork *pkFrameWork)
{
  CHairShopViewCtrlWin *v2; // esi@1
  PgFrameWork *v3; // edi@1
  NiSourceTexture *v4; // ebx@1
  NiNode *v5; // esi@2
  char *v7; // eax@10
  PgSprData *v8; // edi@14
  PgSprData *v9; // edi@14
  PgWinBut *v10; // eax@14
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@14
  NiNode *v12; // esi@15
  volatile LONG *v13; // [sp+4h] [bp-2Ch]@3
  NiTexturePalette *pTexturePalette; // [sp+18h] [bp-18h]@8
  int uiLeft; // [sp+1Ch] [bp-14h]@14
  NiPointer<NiNode> spNode; // [sp+20h] [bp-10h]@1
  int v17; // [sp+2Ch] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = pkFrameWork;
  v17 = 0;
  this->m_pkFrameWork = pkFrameWork;
  v4 = MenuTexMgr::GetTexture(5u);
  if ( !v4 )
  {
    v5 = spNode.m_pObject;
    v17 = -1;
    if ( spNode.m_pObject )
    {
      v13 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_4;
    }
    return 0;
  }
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acMenu, "\\Shop\\CreatCharTurnButton.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, 0, v3, "HairShopViewCtrlWin", 0) )
  {
    v5 = spNode.m_pObject;
    v17 = -1;
    if ( spNode.m_pObject )
    {
      v13 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_4:
      if ( !InterlockedDecrement(v13) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    return 0;
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TurnL", &uiLeft, (int *)&pkFrameWork, v4);
  PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "TurnLClick");
  v2->m_pkTurnLeftBtn = PgWinBut::CreateWin(
                          uiLeft,
                          (int)pkFrameWork,
                          v8,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0,
                          0);
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TurnR", &uiLeft, (int *)&pkFrameWork, v4);
  PgSprData::Add(v9, &spNode.m_pObject->baseclass_0, "TurnRClick");
  v10 = PgWinBut::CreateWin(uiLeft, (int)pkFrameWork, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v11 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor;
  v2->m_pkTurnRightBtn = v10;
  ((void (__thiscall *)(CHairShopViewCtrlWin *, unsigned int, unsigned int, _DWORD, _DWORD))v11)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.33000001,
    0.44);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  v17 = -1;
  if ( spNode.m_pObject )
  {
    v12 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006319D0) --------------------------------------------------------
CHairShopViewCtrlWin *__cdecl CHairShopViewCtrlWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  CHairShopViewCtrlWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x164u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &CHairShopViewCtrlWin::_vftable_;
    *((_DWORD *)v2 + 58) = &CHairShopViewCtrlWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (CHairShopViewCtrlWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9C1F5C: using guessed type int (__stdcall *CHairShopViewCtrlWin___vftable_)(int uiFlags);
// 9C1F7C: using guessed type int (__thiscall *CHairShopViewCtrlWin___vftable_)(void *p, char);

//----- (00631B20) --------------------------------------------------------
void *__thiscall CHairShopViewCtrlWin::_scalar_deleting_destructor_(CHairShopViewCtrlWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopViewCtrlWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopViewCtrlWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C1F5C: using guessed type int (__stdcall *CHairShopViewCtrlWin___vftable_)(int uiFlags);
// 9C1F7C: using guessed type int (__thiscall *CHairShopViewCtrlWin___vftable_)(void *p, char);

//----- (00631B60) --------------------------------------------------------
void __thiscall CColorIcon::CColorIcon(CColorIcon *this)
{
  CColorIcon *v1; // esi@1

  v1 = this;
  IconWin::IconWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CColorIcon::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CColorIcon::_vftable_;
  v1->m_byColorIndex = -1;
  IconWin::CreateGeometry(&v1->baseclass_0, 0x20u, 0x20u);
}
// 9C247C: using guessed type int (__stdcall *CColorIcon___vftable_)(int uiFlags);
// 9C249C: using guessed type int (__thiscall *CColorIcon___vftable_)(void *p, char);

//----- (00631BD0) --------------------------------------------------------
void __thiscall CColorIcon::_CColorIcon(CColorIcon *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CColorIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CColorIcon::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
}
// 9C247C: using guessed type int (__stdcall *CColorIcon___vftable_)(int uiFlags);
// 9C249C: using guessed type int (__thiscall *CColorIcon___vftable_)(void *p, char);

//----- (00631BF0) --------------------------------------------------------
bool __thiscall CColorIcon::Create(CColorIcon *this, int iXPos, int iYPos, PgWin *pkParent)
{
  return PgWinLRBut::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, 0x20u, 0x20u, pkParent, 0, 0) != 0;
}

//----- (00631C50) --------------------------------------------------------
void __thiscall CHairShopwin::ChangeState(CHairShopwin *this, char byDestState)
{
  if ( this->m_byTargetState != byDestState )
    this->m_byTargetState = byDestState;
}

//----- (00631C70) --------------------------------------------------------
void __thiscall CHairShopwin::OnSlideBar(CHairShopwin *this)
{
  if ( this->m_pListWinHairType )
  {
    this->m_pListWinHairType->m_nViewStartPos = this->m_pkSlideBarList.m_pObject->m_nCurPos;
    SlideListWin::UpdateViewList(this->m_pListWinHairType);
  }
}

//----- (00631CA0) --------------------------------------------------------
void __thiscall CColorIcon::DoAction(CColorIcon *this)
{
  CColorIcon *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( this->m_byColorIndex != -1 )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
        v1->m_byColorIndex);
  }
}

//----- (00631CD0) --------------------------------------------------------
void __thiscall CHairShopwin::CHairShopwin(CHairShopwin *this)
{
  CHairShopwin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopwin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopwin::_vftable_;
  v1->m_pkSlideBarList.m_pObject = 0;
  v1->m_pkFrameWork = 0;
  v1->m_pkBtn_HairType = 0;
  v1->m_pkBtn_FaceType = 0;
  v1->m_pkBtn_GenderType = 0;
  v1->m_pkBtn_BacktoPrev = 0;
  v1->m_pkChk[0] = 0;
  v1->m_pkChk[1] = 0;
  v1->m_pkChk[2] = 0;
  v1->m_pkChk[3] = 0;
  v1->m_pkChk_Add[0] = 0;
  v1->m_pkChk_Add[1] = 0;
  v1->m_pkChk_Add[2] = 0;
  v1->m_pkChk_Add[3] = 0;
  *(_WORD *)&v1->m_byState = -256;
  v1->m_pkColorIcon[0] = 0;
  v1->m_pkColorIcon[1] = 0;
  v1->m_pkColorIcon[2] = 0;
  v1->m_pkColorIcon[3] = 0;
  v1->m_pkColorIcon[4] = 0;
  v1->m_pkColorIcon[5] = 0;
  v1->m_pkColorIcon[6] = 0;
  v1->m_pkColorIcon[7] = 0;
  v1->m_pkColorIcon[8] = 0;
  v1->m_pkColorIcon[9] = 0;
  v1->m_pkColorIcon[10] = 0;
  v1->m_pkColorIcon[11] = 0;
  v1->m_pkColorIcon[12] = 0;
  v1->m_pkColorIcon[13] = 0;
  v1->m_pkColorIcon[14] = 0;
  v1->m_pkColorIcon[15] = 0;
  v1->m_pkColorIcon[16] = 0;
  v1->m_pkColorIcon[17] = 0;
  v1->m_pkColorIcon[18] = 0;
  v1->m_pkColorIcon[19] = 0;
  v1->m_pkColorIcon[20] = 0;
  v1->m_pkColorIcon[21] = 0;
  v1->m_pkColorIcon[22] = 0;
  v1->m_pkColorIcon[23] = 0;
  v1->m_pkColorIcon[24] = 0;
  v1->m_pListWinHairType = 0;
}
// 9C2704: using guessed type int (__stdcall *CHairShopwin___vftable_)(int uiFlags);
// 9C2724: using guessed type int (__thiscall *CHairShopwin___vftable_)(void *p, char);

//----- (00631DF0) --------------------------------------------------------
void __thiscall CHairShopwin::_CHairShopwin(CHairShopwin *this)
{
  PgWinFrame *v1; // esi@1
  SlideBar *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopwin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopwin::_vftable_;
  v2 = this->m_pkSlideBarList.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9C2704: using guessed type int (__stdcall *CHairShopwin___vftable_)(int uiFlags);
// 9C2724: using guessed type int (__thiscall *CHairShopwin___vftable_)(void *p, char);

//----- (00631E80) --------------------------------------------------------
void __thiscall CHairShopwin::UpdateGenderList(CHairShopwin *this)
{
  CHairShopwin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  char *v3; // eax@2
  int v4; // eax@2
  char *v5; // eax@2
  int v6; // eax@2

  v1 = this;
  v2 = this->m_pListWinHairType;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    v3 = TextData::Get(0x42527D6Fu);
    v4 = SlideListWin::AddText(v1->m_pListWinHairType, v3);
    SlideListWin::SetData(v1->m_pListWinHairType, v4, 1u);
    v5 = TextData::Get(0x9A937C7Du);
    v6 = SlideListWin::AddText(v1->m_pListWinHairType, v5);
    SlideListWin::SetData(v1->m_pListWinHairType, v6, 0);
    SlideListWin::AlignText(v1->m_pListWinHairType, 5u);
    SlideListWin::UpdateViewList(v1->m_pListWinHairType);
  }
}

//----- (00631F00) --------------------------------------------------------
void __thiscall CColorIcon::SetColorIndex(CColorIcon *this, char byTableIndex)
{
  char v2; // bl@1
  CColorIcon *v3; // esi@1
  int v4; // edi@1
  NiSourceTexture *v5; // eax@2
  NiRefObjectVtbl *byTableIndexa; // [sp+14h] [bp+8h]@2

  v2 = byTableIndex;
  v3 = this;
  v4 = (unsigned __int8)byTableIndex;
  if ( CDataReader::GetRecord(
         (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
         (unsigned __int8)byTableIndex) )
  {
    byTableIndexa = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = IconMgr::GetTexture("HairColor");
    ((void (__thiscall *)(CColorIcon *, NiSourceTexture *, int, signed int, signed int))byTableIndexa[146].__vecDelDtor)(
      v3,
      v5,
      v4,
      32,
      32);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
  }
  else
  {
    ((void (__thiscall *)(CColorIcon *, _DWORD, signed int, signed int, signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[146].__vecDelDtor)(
      v3,
      0,
      -1,
      32,
      32);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
  }
  ((void (__thiscall *)(CColorIcon *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v3);
  v3->m_byColorIndex = v2;
}
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (00631F90) --------------------------------------------------------
void __thiscall CColorIcon::OnFirstHitWin(CColorIcon *this)
{
  PgWin *v1; // esi@1
  void *v2; // eax@1

  v1 = (PgWin *)this;
  v2 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
         this->m_byColorIndex);
  if ( v2 )
    PgWin::SetToolTipWinText(v1, (char *)v2 + 16);
  PgWin::OnFirstHitWin(v1);
}
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (00631FC0) --------------------------------------------------------
CColorIcon *__cdecl CColorIcon::CreateWin(int iXPos, int iYPos, PgWin *pkParent)
{
  void *v3; // eax@1
  void *v4; // esi@1
  PgWin *v5; // edi@8
  CColorIcon *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v3 = operator new(0x180u);
  v4 = v3;
  result.m_pObject = (PgWin *)v3;
  v8 = 0;
  if ( v3 )
  {
    IconWin::IconWin((IconWin *)v3);
    LOBYTE(v8) = 1;
    *(_DWORD *)v4 = &CColorIcon::_vftable_;
    *((_DWORD *)v4 + 58) = &CColorIcon::_vftable_;
    *((_BYTE *)v4 + 380) = -1;
    IconWin::CreateGeometry((IconWin *)v4, 0x20u, 0x20u);
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)v4 + 1);
  v8 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgWin *))(*(_DWORD *)v4 + 608))(
                          v4,
                          iXPos,
                          iYPos,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = (CColorIcon *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v4 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}
// 9C247C: using guessed type int (__stdcall *CColorIcon___vftable_)(int uiFlags);
// 9C249C: using guessed type int (__thiscall *CColorIcon___vftable_)(void *p, char);

//----- (00632120) --------------------------------------------------------
CHairShopwin *__cdecl CHairShopwin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CHairShopwin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1FCu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CHairShopwin::CHairShopwin((CHairShopwin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CHairShopwin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00632250) --------------------------------------------------------
void __thiscall CHairShopwin::UpdateFaceList(CHairShopwin *this, char byEndGrade, char byStartGrade)
{
  CHairShopwin *v3; // esi@1
  SlideListWin *v4; // ecx@1
  void *v5; // edi@1
  void *v6; // ebx@5
  unsigned int v7; // esi@6
  void *v8; // eax@6
  int v9; // eax@7
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-20h]@2
  CHairShopwin *v11; // [sp+10h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-4h]@2
  signed int size; // [sp+28h] [bp+8h]@5

  v3 = this;
  v11 = this;
  v4 = this->m_pListWinHairType;
  v5 = 0;
  if ( v4 )
  {
    SlideListWin::RemoveAllList(v4);
    *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    vecResult.baseclass_0._Mylast = 0;
    vecResult.baseclass_0._Myend = 0;
    v12 = 0;
    if ( byStartGrade == -1 )
      FaceInfoTab::GetEquipableFace(byEndGrade, &vecResult);
    else
      FaceInfoTab::GetExactEquipableFace(byStartGrade, byEndGrade, &vecResult);
    v6 = *(void **)&vecResult;
    size = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
    if ( size > 0 )
    {
      do
      {
        v7 = *((_BYTE *)v6 + 4 * (_DWORD)v5);
        v8 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4),
               *((_BYTE *)v6 + 4 * (_DWORD)v5));
        if ( v8 )
        {
          v9 = SlideListWin::AddText(v11->m_pListWinHairType, (const char *)v8 + 1);
          SlideListWin::SetData(v11->m_pListWinHairType, v9, v7);
        }
        v5 = (char *)v5 + 1;
      }
      while ( (signed int)v5 < size );
      v3 = v11;
      v5 = 0;
    }
    SlideListWin::AlignText(v3->m_pListWinHairType, 5u);
    SlideListWin::UpdateViewList(v3->m_pListWinHairType);
    if ( v6 != v5 )
      operator delete(v6);
  }
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;

//----- (00632360) --------------------------------------------------------
void __thiscall CHairShopwin::UpdateHairList(CHairShopwin *this, char byEndGrade, char byStartGrade)
{
  CHairShopwin *v3; // edi@1
  SlideListWin *v4; // ecx@1
  void *v5; // ebx@1
  int v6; // eax@2
  unsigned __int8 v7; // cl@3
  char v8; // cl@11
  void *v9; // esi@14
  signed int v10; // ecx@14
  int v11; // eax@14
  unsigned __int8 v12; // bl@15
  int v13; // eax@15
  unsigned int v14; // edi@16
  unsigned int v15; // esi@18
  void *v16; // eax@19
  CHairShopwin *v17; // esi@22
  int v18; // eax@22
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-24h]@11
  CHairShopwin *v20; // [sp+10h] [bp-14h]@1
  int kBaseClassID; // [sp+14h] [bp-10h]@4
  int v22; // [sp+20h] [bp-4h]@11
  signed int size; // [sp+2Ch] [bp+8h]@14
  int i; // [sp+30h] [bp+Ch]@14

  v3 = this;
  v20 = this;
  v4 = this->m_pListWinHairType;
  v5 = 0;
  if ( v4 )
  {
    SlideListWin::RemoveAllList(v4);
    v6 = (int)&v3->m_pkFrameWork[2].m_BackFrameID;
    if ( v3->m_pkFrameWork != (PgFrameWork *)-100 )
    {
      v7 = *(_BYTE *)v6;
      switch ( ((unsigned int)*(_BYTE *)v6 >> 2) & 0x1F )
      {
        case 1u:
        case 2u:
        case 3u:
        case 4u:
        case 5u:
          LOBYTE(kBaseClassID) = 1;
          break;
        case 6u:
        case 7u:
        case 8u:
        case 9u:
        case 0xAu:
          LOBYTE(kBaseClassID) = 6;
          break;
        case 0xBu:
        case 0xCu:
        case 0xDu:
        case 0xEu:
        case 0xFu:
          LOBYTE(kBaseClassID) = 11;
          break;
        case 0x10u:
        case 0x11u:
        case 0x12u:
        case 0x13u:
        case 0x14u:
          LOBYTE(kBaseClassID) = 16;
          break;
        case 0x15u:
        case 0x16u:
        case 0x17u:
        case 0x18u:
        case 0x19u:
          LOBYTE(kBaseClassID) = 21;
          break;
        case 0x1Au:
        case 0x1Bu:
          LOBYTE(kBaseClassID) = 26;
          break;
        default:
          LOBYTE(kBaseClassID) = 0;
          break;
      }
      *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      vecResult.baseclass_0._Mylast = 0;
      vecResult.baseclass_0._Myend = 0;
      v8 = v7 >> 7;
      v22 = 0;
      if ( byStartGrade == -1 )
        HairInfoTab::GetEquipableHairType(kBaseClassID, v8, byEndGrade, &vecResult);
      else
        HairInfoTab::GetExactEquipableHairType(kBaseClassID, v8, byStartGrade, byEndGrade, &vecResult);
      v9 = *(void **)&vecResult;
      v10 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
      v11 = 0;
      size = v10;
      i = 0;
      if ( v10 > 0 )
      {
        do
        {
          v12 = *((_BYTE *)v9 + 4 * v11);
          v13 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
          if ( v13 )
            v14 = *(_DWORD *)(v13 + 40);
          else
            v14 = 0;
          v15 = 0;
          if ( v14 )
          {
            while ( 1 )
            {
              v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v15);
              if ( *(_BYTE *)v16 == v12 )
                break;
              ++v15;
              if ( v15 >= v14 )
                goto LABEL_23;
            }
            v17 = v20;
            v18 = SlideListWin::AddText(v20->m_pListWinHairType, (const char *)v16 + 33);
            SlideListWin::SetData(v17->m_pListWinHairType, v18, v12);
LABEL_23:
            v10 = size;
          }
          v9 = *(void **)&vecResult;
          v11 = i + 1;
          i = v11;
        }
        while ( v11 < v10 );
        v3 = v20;
        v5 = 0;
      }
      SlideListWin::AlignText(v3->m_pListWinHairType, 5u);
      SlideListWin::UpdateViewList(v3->m_pListWinHairType);
      if ( v9 != v5 )
        operator delete(v9);
    }
  }
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;

//----- (00632570) --------------------------------------------------------
void __thiscall CHairShopwin::RefreshColorIcon(CHairShopwin *this, char byEndGrade, char byStartGrade)
{
  CHairShopwin *v3; // esi@1
  char *v4; // edi@4
  unsigned __int8 v5; // bl@4
  CColorIcon **v6; // esi@4
  char v7; // [sp-14h] [bp-30h]@6
  std::vector<unsigned long,std::allocator<unsigned long> > vecResult; // [sp+0h] [bp-1Ch]@1
  int v9; // [sp+18h] [bp-4h]@1
  unsigned __int8 byEndGrade_3; // [sp+27h] [bp+Bh]@4

  v3 = this;
  *(_DWORD *)&vecResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecResult.baseclass_0._Mylast = 0;
  vecResult.baseclass_0._Myend = 0;
  v9 = 0;
  if ( byStartGrade == -1 )
    HairColorInfoTab::GetEquipableHairColor(byEndGrade, &vecResult);
  else
    HairColorInfoTab::GetExactEquipableHairColor(byStartGrade, byEndGrade, &vecResult);
  v4 = *(char **)&vecResult;
  v5 = 0;
  byEndGrade_3 = (signed int)((char *)vecResult.baseclass_0._Mylast - *(_DWORD *)&vecResult) >> 2;
  v6 = v3->m_pkColorIcon;
  do
  {
    if ( v5 < byEndGrade_3 )
      v7 = *v4;
    else
      v7 = -1;
    CColorIcon::SetColorIndex(*v6, v7);
    ++v5;
    v4 += 4;
    ++v6;
  }
  while ( v5 < 0x19u );
  if ( *(_DWORD *)&vecResult )
    operator delete(*(void **)&vecResult);
}

//----- (00632630) --------------------------------------------------------
void __thiscall CHairShopwin::ActivateCheckBtn(CHairShopwin *this, char byIndex)
{
  unsigned __int8 v2; // al@1
  char *v3; // esi@1
  char v4; // al@5

  v2 = 0;
  v3 = (char *)this->m_pkChk;
  do
  {
    if ( *(_DWORD *)v3 )
      *(_BYTE *)(*(_DWORD *)v3 + 380) = byIndex == v2;
    ++v2;
    v3 += 4;
  }
  while ( v2 < 4u );
  v4 = this->m_byState;
  switch ( v4 )
  {
    case 1:
      if ( byIndex )
      {
        if ( byIndex == 1 )
        {
          CHairShopwin::UpdateHairList(this, 4, 4);
        }
        else
        {
          if ( byIndex == 2 )
            CHairShopwin::UpdateHairList(this, 5, 5);
        }
      }
      else
      {
        CHairShopwin::UpdateHairList(this, 1, 0);
      }
      break;
    case 2:
      if ( byIndex )
      {
        if ( byIndex == 1 )
        {
          CHairShopwin::UpdateFaceList(this, 4, 4);
        }
        else
        {
          if ( byIndex == 2 )
            CHairShopwin::UpdateFaceList(this, 5, 5);
        }
      }
      else
      {
        CHairShopwin::UpdateFaceList(this, 1, 0);
      }
      break;
    case 3:
      CHairShopwin::UpdateGenderList(this);
      break;
  }
}

//----- (00632710) --------------------------------------------------------
void __thiscall CHairShopwin::ActivateCheckAddBtn(CHairShopwin *this, char byIndex)
{
  CHairShopwin *v2; // ebx@1
  unsigned __int8 v3; // al@1
  char *v4; // edi@1
  void *v5; // edi@10
  unsigned __int8 v6; // bl@10
  CColorIcon **v7; // esi@10
  char v8; // [sp-14h] [bp-34h]@12
  void *padwResult; // [sp+0h] [bp-20h]@10
  int v10; // [sp+4h] [bp-1Ch]@10
  int v11; // [sp+8h] [bp-18h]@10
  CHairShopwin *v12; // [sp+10h] [bp-10h]@1
  int v13; // [sp+1Ch] [bp-4h]@10
  unsigned __int8 v14; // [sp+2Bh] [bp+Bh]@10

  v2 = this;
  v12 = this;
  v3 = 0;
  v4 = (char *)this->m_pkChk_Add;
  do
  {
    if ( *(_DWORD *)v4 )
    {
      *(_BYTE *)(*(_DWORD *)v4 + 380) = byIndex == v3;
      v2 = v12;
    }
    ++v3;
    v4 += 4;
  }
  while ( v3 < 4u );
  if ( byIndex )
  {
    if ( byIndex == 1 )
    {
      CHairShopwin::RefreshColorIcon(v2, 4, 4);
    }
    else
    {
      if ( byIndex == 2 )
        CHairShopwin::RefreshColorIcon(v2, 5, 5);
    }
  }
  else
  {
    padwResult = 0;
    v10 = 0;
    v11 = 0;
    v13 = 0;
    HairColorInfoTab::GetExactEquipableHairColor(0, 1, &padwResult);
    v5 = padwResult;
    v6 = 0;
    v14 = (v10 - (signed int)padwResult) >> 2;
    v7 = v12->m_pkColorIcon;
    do
    {
      if ( v6 < v14 )
        v8 = *(_BYTE *)v5;
      else
        v8 = -1;
      CColorIcon::SetColorIndex(*v7, v8);
      ++v6;
      v5 = (char *)v5 + 4;
      ++v7;
    }
    while ( v6 < 0x19u );
    if ( padwResult )
      operator delete(padwResult);
  }
}

//----- (00632840) --------------------------------------------------------
void __thiscall CHairShopwin::UpdateMeWin(CHairShopwin *this, float fCurTime)
{
  CHairShopwin *v2; // esi@1
  char v3; // al@1
  int v4; // edi@3
  signed int v5; // ebx@3
  int v6; // edi@8
  signed int v7; // ebx@8
  int v8; // edi@13
  signed int v9; // ebx@13

  v2 = this;
  v3 = this->m_byTargetState;
  if ( v3 != -1 )
  {
    this->m_byState = v3;
    this->m_byTargetState = -1;
    switch ( v3 )
    {
      case 0:
        ((void (__stdcall *)(_DWORD))this->m_pkBtn_HairType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_HairType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_FaceType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_FaceType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_GenderType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_GenderType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v4 = (int)v2->m_pkChk;
        v5 = 4;
        do
        {
          if ( *(_DWORD *)v4 )
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 240))(0);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0);
          }
          v4 += 4;
          --v5;
        }
        while ( v5 );
        SlideListWin::RemoveAllList(v2->m_pListWinHairType);
        break;
      case 1:
      case 2:
        ((void (__stdcall *)(_DWORD))this->m_pkBtn_HairType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_HairType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_FaceType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_FaceType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_GenderType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_GenderType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v6 = (int)v2->m_pkChk;
        v7 = 4;
        do
        {
          if ( *(_DWORD *)v6 )
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 240))(1);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(1);
          }
          v6 += 4;
          --v7;
        }
        while ( v7 );
        CHairShopwin::ActivateCheckBtn(v2, 0);
        break;
      case 3:
        ((void (__stdcall *)(_DWORD))this->m_pkBtn_HairType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_HairType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_FaceType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_FaceType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_GenderType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkBtn_GenderType->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v8 = (int)v2->m_pkChk;
        v9 = 4;
        do
        {
          if ( *(_DWORD *)v8 )
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 240))(0);
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(0);
          }
          v8 += 4;
          --v9;
        }
        while ( v9 );
        CHairShopwin::ActivateCheckBtn(v2, 0);
        break;
      default:
        return;
    }
  }
}

//----- (00632AA0) --------------------------------------------------------
void __thiscall CHairShopwin::OnCommand(CHairShopwin *this, unsigned int wParam, int lParam)
{
  CHairShopwin *v3; // esi@1
  char v4; // al@6
  int v5; // eax@22
  char v6; // al@23

  v3 = this;
  if ( dwTimer )
  {
    if ( timeGetTime() - dwTimer < 0x1F4 )
      return;
    dwTimer = 0;
  }
  else
  {
    dwTimer = timeGetTime();
  }
  switch ( wParam )
  {
    case 0u:
      v4 = 1;
      goto LABEL_7;
    case 1u:
      v4 = 2;
      goto LABEL_7;
    case 2u:
      v4 = 3;
LABEL_7:
      if ( v3->m_byTargetState != v4 )
        v3->m_byTargetState = v4;
      break;
    case 3u:
      CHairShopwin::ActivateCheckBtn(v3, 0);
      break;
    case 4u:
      CHairShopwin::ActivateCheckBtn(v3, 1);
      break;
    case 5u:
      CHairShopwin::ActivateCheckBtn(v3, 2);
      break;
    case 7u:
      if ( v3->m_byState && v3->m_byTargetState )
        v3->m_byTargetState = 0;
      SlideBar::SetCurPos(v3->m_pkSlideBarList.m_pObject, 0);
      v3->m_pListWinHairType->m_nViewStartPos = 0;
      SlideListWin::UpdateViewList(v3->m_pListWinHairType);
      break;
    case 8u:
      CHairShopwin::ActivateCheckAddBtn(v3, 0);
      break;
    case 9u:
      CHairShopwin::ActivateCheckAddBtn(v3, 1);
      break;
    case 0xAu:
      CHairShopwin::ActivateCheckAddBtn(v3, 2);
      break;
    case 0xCu:
      CHairShopFrameWork::ChangeAvatarHairColor((CHairShopFrameWork *)v3->m_pkFrameWork, lParam);
      break;
    case 0xDu:
      v5 = SlideListWin::GetCurSelIndex(v3->m_pListWinHairType);
      if ( v5 >= 0 )
      {
        SlideListWin::GetData(v3->m_pListWinHairType, v5, &wParam);
        v6 = v3->m_byState;
        switch ( v6 )
        {
          case 1:
            CHairShopFrameWork::ChangeAvatarHair((CHairShopFrameWork *)v3->m_pkFrameWork, wParam);
            break;
          case 2:
            CHairShopFrameWork::ChangeAvatarFace((CHairShopFrameWork *)v3->m_pkFrameWork, wParam);
            break;
          case 3:
            CHairShopFrameWork::ChangeAvatarGender((CHairShopFrameWork *)v3->m_pkFrameWork, wParam != 0);
            break;
        }
      }
      break;
    case 0xEu:
      CHairShopwin::OnSlideBar(v3);
      break;
    default:
      return;
  }
}

//----- (00632C80) --------------------------------------------------------
bool __thiscall CHairShopwin::Create(CHairShopwin *this, PgFrameWork *pkFrameWork)
{
  CHairShopwin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool result; // al@6
  NiTexturePalette *v6; // STD0_4@9
  char *v7; // eax@9
  PgSprData *v8; // eax@10
  int v9; // ebx@11
  PgSprData *v10; // eax@11
  PgSprData *v11; // eax@11
  NiSourceTexture *v12; // eax@11
  PgSprData *v13; // eax@14
  PgFont *v14; // eax@16
  PgWinText *v15; // eax@16
  NiRefObjectVtbl *v16; // edx@16
  char *v17; // eax@16
  PgFont *v18; // eax@17
  PgWinText *v19; // ebx@17
  char *v20; // eax@17
  PgSprData *v21; // ebx@17
  PgWin *v22; // STCC_4@17
  PgWin *v23; // ebx@17
  PgFont *v24; // STC8_4@17
  unsigned int v25; // STC4_4@17
  unsigned int v26; // eax@17
  PgWinText *v27; // ebx@17
  char *v28; // eax@17
  PgFont *v29; // eax@17
  PgSprData *v30; // ebx@17
  PgWin *v31; // STCC_4@17
  PgWin *v32; // ebx@17
  PgFont *v33; // STC8_4@17
  unsigned int v34; // STC4_4@17
  unsigned int v35; // eax@17
  PgWinText *v36; // ebx@17
  char *v37; // eax@17
  PgFont *v38; // eax@17
  PgSprData *v39; // ebx@17
  PgWin *v40; // STCC_4@17
  PgWin *v41; // ebx@17
  PgFont *v42; // STC8_4@17
  unsigned int v43; // STC4_4@17
  unsigned int v44; // eax@17
  PgWinText *v45; // ebx@17
  char *v46; // eax@17
  PgFont *v47; // eax@17
  PgSprData *v48; // ebx@17
  PgWin *v49; // STCC_4@17
  PgWin *v50; // ebx@17
  PgFont *v51; // STC8_4@17
  unsigned int v52; // STC4_4@17
  unsigned int v53; // eax@17
  PgWinText *v54; // ebx@17
  char *v55; // eax@17
  PgFont *v56; // eax@17
  PgSprData *v57; // ebx@17
  PgWin *v58; // STCC_4@17
  PgWin *v59; // ebx@17
  PgFont *v60; // STC8_4@17
  unsigned int v61; // STC4_4@17
  unsigned int v62; // eax@17
  PgWinText *v63; // ebx@17
  char *v64; // eax@17
  PgFont *v65; // eax@17
  PgSprData *v66; // ebx@17
  PgWin *v67; // STCC_4@17
  PgWin *v68; // ebx@17
  PgFont *v69; // STC8_4@17
  unsigned int v70; // STC4_4@17
  unsigned int v71; // eax@17
  PgWinText *v72; // ebx@17
  char *v73; // eax@17
  PgFont *v74; // eax@17
  PgSprData *v75; // ebx@17
  PgWin *v76; // STCC_4@17
  PgWin *v77; // ebx@17
  PgFont *v78; // STC8_4@17
  unsigned int v79; // STC4_4@17
  unsigned int v80; // eax@17
  PgWinText *v81; // ebx@17
  char *v82; // eax@17
  PgFont *v83; // eax@17
  PgSprData *v84; // ebx@17
  PgWin *v85; // STCC_4@17
  PgWin *v86; // ebx@17
  PgFont *v87; // STC8_4@17
  unsigned int v88; // STC4_4@17
  unsigned int v89; // eax@17
  PgWinText *v90; // ebx@17
  char *v91; // eax@17
  PgFont *v92; // eax@17
  PgSprData *v93; // ebx@17
  PgWin *v94; // STCC_4@17
  PgWin *v95; // ebx@17
  PgFont *v96; // STC8_4@17
  unsigned int v97; // STC4_4@17
  unsigned int v98; // eax@17
  PgWinText *v99; // ebx@17
  char *v100; // eax@17
  PgFont *v101; // eax@17
  PgSprData *v102; // ebx@17
  PgWin *v103; // STCC_4@17
  PgWin *v104; // ebx@17
  PgFont *v105; // STC8_4@17
  unsigned int v106; // STC4_4@17
  unsigned int v107; // eax@17
  PgWinText *v108; // ebx@17
  char *v109; // eax@17
  PgFont *v110; // eax@17
  CColorIcon **v111; // ebx@17
  PgSprData *v112; // eax@18
  CColorIcon *v113; // eax@18
  SLWCreateInfo::Item *v114; // ebx@19
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v115; // ebx@19
  SLWCreateInfo::Item *v116; // ebx@25
  PgSprData *v117; // eax@27
  SlideListWin *v118; // eax@27
  PgSprData *v119; // eax@27
  SlideBar *v120; // eax@27
  NiTexturePalette **v121; // ebx@27
  NiRefObjectVtbl *v122; // edx@27
  SlideBar *v123; // ecx@27
  int v124; // eax@27
  NiNode *v125; // esi@29
  const char *v126; // [sp+C4h] [bp-18Ch]@12
  int *v127; // [sp+C8h] [bp-188h]@12
  int *v128; // [sp+CCh] [bp-184h]@12
  NiSourceTexture *v129; // [sp+D0h] [bp-180h]@12
  unsigned int v130; // [sp+D4h] [bp-17Ch]@1
  SLWCreateInfo kCreateInfo; // [sp+E4h] [bp-16Ch]@19
  unsigned int uiWidth; // [sp+100h] [bp-150h]@14
  int iOffX; // [sp+104h] [bp-14Ch]@11
  unsigned int uiHeight; // [sp+108h] [bp-148h]@14
  signed int pkTextWin; // [sp+10Ch] [bp-144h]@16
  int iOffY; // [sp+110h] [bp-140h]@11
  int uiTop; // [sp+114h] [bp-13Ch]@10
  int uiLeft; // [sp+118h] [bp-138h]@10
  NiPointer<NiNode> spNode; // [sp+11Ch] [bp-134h]@1
  NiTexturePalette *pTexturePalette; // [sp+120h] [bp-130h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+124h] [bp-12Ch]@19
  char acIconName[256]; // [sp+140h] [bp-110h]@18
  unsigned int v143; // [sp+240h] [bp-10h]@1
  int v144; // [sp+24Ch] [bp-4h]@1
  int v145; // [sp+250h] [bp+0h]@1

  v143 = (unsigned int)&v145 ^ __security_cookie;
  v130 = (unsigned int)&v145 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v144 = 0;
  this->m_pkFrameWork = pkFrameWork;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
    goto LABEL_36;
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = pTexturePalette;
  v7 = Folder::Merge(&Folder::m_acMenu, "\\shop\\HairShopWin.nif");
  PgUtil::LoadNodeNifFile(v7, &spNode, v6);
  if ( !spNode.m_pObject )
    return 0;
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "HairShopWin", 0) )
  {
LABEL_36:
    v4 = spNode.m_pObject;
    v144 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v9 = uiLeft;
  iOffY = uiTop;
  iOffX = uiLeft;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v10, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v129 = v12;
    v128 = &uiTop;
    v127 = &uiLeft;
    v126 = "Theme";
  }
  else
  {
    v129 = 0;
    v128 = &uiTop;
    v127 = &uiLeft;
    v126 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v126, v127, v128, v129);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - iOffY, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle01", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    && (v14 = Font::Get(MAIN_MENU),
        v15 = PgWinText::CreateWin(
                uiLeft - v9,
                uiTop - iOffY + 2,
                uiWidth,
                uiHeight,
                v14,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        pkTextWin = (signed int)v15,
        v16[122].__vecDelDtor((NiRefObject *)v15, 5u),
        (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor),
        pTexturePalette = (NiTexturePalette *)(*(_DWORD *)pkTextWin + 472),
        v17 = TextData::Get(0x304F827Bu),
        ((void (__thiscall *)(signed int, char *))pTexturePalette->baseclass_0.vfptr)(pkTextWin, v17),
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0),
        PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle02", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
    v18 = Font::Get(MAIN_MENU);
    v19 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop - iOffY + 2,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v19,
      5,
      v130);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    pTexturePalette = (NiTexturePalette *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v20 = TextData::Get(0x44553474u);
    ((void (__thiscall *)(PgWinText *, char *))pTexturePalette->baseclass_0.vfptr)(v19, v20);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Shape_Tab01_On", &uiLeft, &uiTop, v3);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Click");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Over");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Off");
    v22 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v2->m_pkBtn_HairType = (PgWinBut *)v22;
    v23 = v22;
    v24 = Font::Get(0);
    v25 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v23);
    v26 = ((int (__thiscall *)(PgWin *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v23);
    v27 = PgWinText::CreateWin(0, 3, v26, v25, v24, v22, 0, 0);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v27,
      5u);
    pTexturePalette = (NiTexturePalette *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v28 = TextData::Get(0x473C2122u);
    ((void (__thiscall *)(PgWinText *, char *))pTexturePalette->baseclass_0.vfptr)(v27, v28);
    pTexturePalette = (NiTexturePalette *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v29 = Font::Get(MENU);
    ((void (__thiscall *)(PgWinText *, PgFont *))pTexturePalette->baseclass_0.vfptr)(v27, v29);
    SpScreenText::SetShadowOffset(&v27->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v27,
      0);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Shape_Tab02_On", &uiLeft, &uiTop, v3);
    PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Click");
    PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Over");
    PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Off");
    v31 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v2->m_pkBtn_FaceType = (PgWinBut *)v31;
    v32 = v31;
    v33 = Font::Get(0);
    v34 = ((int (__thiscall *)(PgWin *))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v32);
    v35 = ((int (__thiscall *)(PgWin *))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v32);
    v36 = PgWinText::CreateWin(0, 3, v35, v34, v33, v31, 0, 0);
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v36,
      5u);
    pTexturePalette = (NiTexturePalette *)&v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v37 = TextData::Get(0x3A362120u);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v36, v37);
    pTexturePalette = (NiTexturePalette *)&v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v38 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, PgFont *))pTexturePalette->baseclass_0.vfptr)(v36, v38);
    SpScreenText::SetShadowOffset(&v36->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v36,
      0);
    v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Shape_Tab03_On", &uiLeft, &uiTop, v3);
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Click");
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Over");
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Off");
    v40 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    v2->m_pkBtn_GenderType = (PgWinBut *)v40;
    v41 = v40;
    v42 = Font::Get(0);
    v43 = ((int (__thiscall *)(PgWin *))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v41);
    v44 = ((int (__thiscall *)(PgWin *))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v41);
    v45 = PgWinText::CreateWin(0, 3, v44, v43, v42, v40, 0, 0);
    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v45,
      5u);
    pTexturePalette = (NiTexturePalette *)&v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v46 = TextData::Get(0xCFD7BBFBu);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v45, v46);
    pTexturePalette = (NiTexturePalette *)&v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v47 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v45, v47);
    SpScreenText::SetShadowOffset(&v45->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v45,
      0);
    v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Shape_Tab01_Off", &uiLeft, &uiTop, v3);
    PgSprData::Add(v48, &spNode.m_pObject->baseclass_0, "Shape_Tab01_On");
    v49 = (PgWin *)ColumnBut::CreateWin(uiLeft, uiTop, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0);
    v2->m_pkChk[0] = (ColumnBut *)v49;
    v50 = v49;
    v51 = Font::Get(0);
    v52 = ((int (__thiscall *)(PgWin *))v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v50);
    v53 = ((int (__thiscall *)(PgWin *))v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v50);
    v54 = PgWinText::CreateWin(0, 3, v53, v52, v51, v49, 0, 0);
    v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v54,
      5u);
    pTexturePalette = (NiTexturePalette *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v55 = TextData::Get(0x827E8A77u);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v54, v55);
    pTexturePalette = (NiTexturePalette *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v56 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v54, v56);
    SpScreenText::SetShadowOffset(&v54->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v54,
      0);
    v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Shape_Tab02_Off", &uiLeft, &uiTop, v3);
    PgSprData::Add(v57, &spNode.m_pObject->baseclass_0, "Shape_Tab02_On");
    v58 = (PgWin *)ColumnBut::CreateWin(uiLeft, uiTop, v57, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0);
    v2->m_pkChk[1] = (ColumnBut *)v58;
    v59 = v58;
    v60 = Font::Get(0);
    v61 = ((int (__thiscall *)(PgWin *))v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v59);
    v62 = ((int (__thiscall *)(PgWin *))v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v59);
    v63 = PgWinText::CreateWin(0, 3, v62, v61, v60, v58, 0, 0);
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v63,
      5u);
    pTexturePalette = (NiTexturePalette *)&v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v64 = TextData::Get(0x788B80B6u);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v63, v64);
    pTexturePalette = (NiTexturePalette *)&v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v65 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v63, v65);
    SpScreenText::SetShadowOffset(&v63->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v63,
      0);
    v66 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Shape_Tab03_Off", &uiLeft, &uiTop, v3);
    PgSprData::Add(v66, &spNode.m_pObject->baseclass_0, "Shape_Tab03_On");
    v67 = (PgWin *)ColumnBut::CreateWin(uiLeft, uiTop, v66, &v2->baseclass_0.baseclass_0.baseclass_0, 5u, 0);
    v2->m_pkChk[2] = (ColumnBut *)v67;
    v68 = v67;
    v69 = Font::Get(0);
    v70 = ((int (__thiscall *)(PgWin *))v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v68);
    v71 = ((int (__thiscall *)(PgWin *))v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v68);
    v72 = PgWinText::CreateWin(0, 3, v71, v70, v69, v67, 0, 0);
    v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v72,
      5u);
    pTexturePalette = (NiTexturePalette *)&v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v73 = TextData::Get(0x958D927Du);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v72, v73);
    pTexturePalette = (NiTexturePalette *)&v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v74 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v72, v74);
    SpScreenText::SetShadowOffset(&v72->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v72,
      0);
    v75 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Shape_Tab04_Nor", &uiLeft, &uiTop, v3);
    PgSprData::Add(v75, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Click");
    PgSprData::Add(v75, &spNode.m_pObject->baseclass_0, "Shape_Tab04_Over");
    v76 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v75, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
    v2->m_pkBtn_BacktoPrev = (PgWinBut *)v76;
    v77 = v76;
    v78 = Font::Get(0);
    v79 = ((int (__thiscall *)(PgWin *))v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v77);
    v80 = ((int (__thiscall *)(PgWin *))v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v77);
    v81 = PgWinText::CreateWin(0, 3, v80, v79, v78, v76, 0, 0);
    v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v81,
      5u);
    pTexturePalette = (NiTexturePalette *)&v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v82 = TextData::Get(0xD4D65134u);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v81, v82);
    pTexturePalette = (NiTexturePalette *)&v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v83 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v81, v83);
    SpScreenText::SetShadowOffset(&v81->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v81,
      0);
    v84 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Color_Tab01_Off", &uiLeft, &uiTop, v3);
    PgSprData::Add(v84, &spNode.m_pObject->baseclass_0, "Color_Tab01_On");
    v85 = (PgWin *)ColumnBut::CreateWin(uiLeft, uiTop, v84, &v2->baseclass_0.baseclass_0.baseclass_0, 8u, 0);
    v2->m_pkChk_Add[0] = (ColumnBut *)v85;
    v86 = v85;
    v87 = Font::Get(0);
    v88 = ((int (__thiscall *)(PgWin *))v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v86);
    v89 = ((int (__thiscall *)(PgWin *))v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v86);
    v90 = PgWinText::CreateWin(0, 3, v89, v88, v87, v85, 0, 0);
    v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v90,
      5u);
    pTexturePalette = (NiTexturePalette *)&v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v91 = TextData::Get(0x827E8A77u);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v90, v91);
    pTexturePalette = (NiTexturePalette *)&v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v92 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v90, v92);
    SpScreenText::SetShadowOffset(&v90->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v90,
      0);
    v93 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Color_Tab02_Off", &uiLeft, &uiTop, v3);
    PgSprData::Add(v93, &spNode.m_pObject->baseclass_0, "Color_Tab02_On");
    v94 = (PgWin *)ColumnBut::CreateWin(uiLeft, uiTop, v93, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0);
    v2->m_pkChk_Add[1] = (ColumnBut *)v94;
    v95 = v94;
    v96 = Font::Get(0);
    v97 = ((int (__thiscall *)(PgWin *))v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v95);
    v98 = ((int (__thiscall *)(PgWin *))v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v95);
    v99 = PgWinText::CreateWin(0, 3, v98, v97, v96, v94, 0, 0);
    v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v99,
      5u);
    pTexturePalette = (NiTexturePalette *)&v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v100 = TextData::Get(0x788B80B6u);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v99, v100);
    pTexturePalette = (NiTexturePalette *)&v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v101 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v99, v101);
    SpScreenText::SetShadowOffset(&v99->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v99,
      0);
    v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Color_Tab03_Off", &uiLeft, &uiTop, v3);
    PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Color_Tab03_On");
    v103 = (PgWin *)ColumnBut::CreateWin(uiLeft, uiTop, v102, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0);
    v2->m_pkChk_Add[2] = (ColumnBut *)v103;
    v104 = v103;
    v105 = Font::Get(0);
    v106 = ((int (__thiscall *)(PgWin *))v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v104);
    v107 = ((int (__thiscall *)(PgWin *))v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v104);
    v108 = PgWinText::CreateWin(0, 3, v107, v106, v105, v103, 0, 0);
    v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v108,
      5u);
    pTexturePalette = (NiTexturePalette *)&v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v109 = TextData::Get(0x958D927Du);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v108, v109);
    pTexturePalette = (NiTexturePalette *)&v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113];
    v110 = Font::Get(MENU);
    ((void (__thiscall *)(_DWORD, _DWORD))pTexturePalette->baseclass_0.vfptr)(v108, v110);
    SpScreenText::SetShadowOffset(&v108->m_spTextGeom.m_pObject->baseclass_0, 1u);
    v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v108,
      0);
    pkTextWin = 1;
    v111 = v2->m_pkColorIcon;
    pTexturePalette = (NiTexturePalette *)25;
    do
    {
      sprintf(acIconName, "IconSlot%02d");
      v112 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acIconName, &uiLeft, &uiTop, v3);
      PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v112, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v113 = CColorIcon::CreateWin(uiLeft - iOffX + 1, uiTop - iOffY + 1, &v2->baseclass_0.baseclass_0.baseclass_0);
      *v111 = v113;
      v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor(
        (NiRefObject *)v113,
        12u);
      CColorIcon::SetColorIndex(*v111, -1);
      (*v111)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      ++pkTextWin;
      ++v111;
      pTexturePalette = (NiTexturePalette *)((char *)pTexturePalette - 1);
    }
    while ( pTexturePalette );
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v144) = 1;
    v114 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v114->nItemType = 1;
    v114->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    v115 = &v114->vecNodeName;
    LOBYTE(v144) = 2;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v115,
      &thisa);
    LOBYTE(v144) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v144) = 3;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v115,
      &thisa);
    LOBYTE(v144) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v144) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v115,
      &thisa);
    LOBYTE(v144) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v116 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    v116->nItemType = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
    LOBYTE(v144) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      &v116->vecNodeName,
      &thisa);
    LOBYTE(v144) = 1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v116->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_nOffX = 1;
    kCreateInfo.m_nOffY = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, v3);
    v117 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, v3);
    v118 = SlideListWin::CreateWin(
             uiLeft - iOffX,
             uiTop - iOffY,
             v117,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             &kCreateInfo,
             0,
             0);
    v2->m_pListWinHairType = v118;
    v118->m_uiLClickMsg = 13;
    SlideListWin::UpdateViewList(v2->m_pListWinHairType);
    v119 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, v3);
    v120 = SlideBar::CreateWin(
             spNode.m_pObject,
             "SlideBar",
             "SlideBar_UpBtn",
             "SlideBar_DnBtn",
             v119,
             0,
             &v2->baseclass_0.baseclass_0.baseclass_0);
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v2->m_pkSlideBarList,
      (NiD3DDefaultShader *)v120);
    v2->m_pkSlideBarList.m_pObject->m_uiClickMsg = 14;
    v2->m_pkSlideBarList.m_pObject->m_eType = 1;
    v121 = (NiTexturePalette **)v2->m_pkSlideBarList.m_pObject;
    v122 = (*v121)[21].baseclass_0.vfptr;
    v123 = v2->m_pkSlideBarList.m_pObject;
    pTexturePalette = *v121;
    ((void (__thiscall *)(SlideBar *))v122)(v123);
    v124 = ((int (__thiscall *)(NiTexturePalette **))(*v121)[20].baseclass_0.m_uiRefCount)(v121);
    ((void (__thiscall *)(NiTexturePalette **, int))pTexturePalette[38].baseclass_0.m_uiRefCount)(v121, v124);
    SlideBar::SetSplitCnt(v2->m_pkSlideBarList.m_pObject, 9);
    ((void (__thiscall *)(CHairShopwin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.80000001,
      0.40000001);
    if ( v2->m_byTargetState )
      v2->m_byTargetState = 0;
    CHairShopwin::ActivateCheckAddBtn(v2, 0);
    LOBYTE(v144) = 0;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    v125 = spNode.m_pObject;
    v144 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v125 )
      v125->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v125, 1u);
    result = 1;
  }
  else
  {
    v144 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00633FF0) --------------------------------------------------------
void *__thiscall CColorIcon::_scalar_deleting_destructor_(CColorIcon *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CColorIcon::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CColorIcon::_vftable_;
  IconWin::_IconWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C247C: using guessed type int (__stdcall *CColorIcon___vftable_)(int uiFlags);
// 9C249C: using guessed type int (__thiscall *CColorIcon___vftable_)(void *p, char);

//----- (00634030) --------------------------------------------------------
void *__thiscall CHairShopwin::_scalar_deleting_destructor_(CHairShopwin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  SlideBar *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CHairShopwin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CHairShopwin::_vftable_;
  v3 = this->m_pkSlideBarList.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2704: using guessed type int (__stdcall *CHairShopwin___vftable_)(int uiFlags);
// 9C2724: using guessed type int (__thiscall *CHairShopwin___vftable_)(void *p, char);

//----- (006340D0) --------------------------------------------------------
void __cdecl FaceInfoTab::GetExactEquipableFace(char ucStartGrade, char ucEndGrade, void *padwResult)
{
  int v3; // eax@1
  unsigned int v4; // edi@2
  unsigned int v5; // esi@4
  void *v6; // eax@5
  unsigned __int8 v7; // al@6
  unsigned int _Val; // [sp+8h] [bp-4h]@8

  v3 = *(_DWORD *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 56);
  if ( v3 )
    v4 = *(_DWORD *)(v3 + 40);
  else
    v4 = 0;
  v5 = 0;
  if ( v4 )
  {
    do
    {
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4), v5);
      if ( v6 )
      {
        v7 = *((_BYTE *)v6 + 33);
        if ( v7 >= ucStartGrade )
        {
          if ( v7 <= ucEndGrade )
          {
            _Val = v5;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
              &_Val);
          }
        }
      }
      ++v5;
    }
    while ( v5 < v4 );
  }
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;

//----- (00634130) --------------------------------------------------------
void __cdecl HairInfoTab::GetExactEquipableHairType(char kClassID, char ucGender, char ucStartGrade, char ucEndGrade, void *padwResult)
{
  char v5; // al@2
  int v6; // ecx@9
  unsigned int v7; // esi@9
  unsigned int v8; // ecx@10
  char v9; // bl@14
  unsigned int v10; // edi@14
  void *v11; // eax@15
  int v12; // ecx@15
  unsigned __int8 v13; // al@20
  char v14; // bl@26
  unsigned int v15; // edi@26
  void *v16; // eax@27
  int v17; // ecx@27
  unsigned __int8 v18; // al@32
  char v19; // bl@38
  unsigned int v20; // edi@38
  void *v21; // eax@39
  int v22; // ecx@39
  unsigned __int8 v23; // al@44
  char v24; // bl@50
  unsigned int v25; // edi@50
  void *v26; // eax@51
  int v27; // ecx@51
  unsigned __int8 v28; // al@56
  char v29; // bl@62
  unsigned int v30; // edi@62
  void *v31; // eax@63
  int v32; // ecx@63
  unsigned __int8 v33; // al@68
  void *v34; // edi@74
  char v35; // bl@74
  void *v36; // eax@75
  int v37; // ecx@75
  unsigned __int8 v38; // al@80

  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v5 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v5 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v5 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v5 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v5 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v5 = 26;
      break;
    default:
      v5 = 0;
      break;
  }
  v6 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
  v7 = 0;
  if ( v6 )
  {
    v8 = *(_DWORD *)(v6 + 40);
    *(_DWORD *)&kClassID = v8;
  }
  else
  {
    *(_DWORD *)&kClassID = 0;
    v8 = 0;
  }
  switch ( v5 )
  {
    case 1:
      if ( v8 > 0 )
      {
        v9 = ucGender;
        v10 = kClassID;
        do
        {
          v11 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v7);
          v12 = *(_DWORD *)((char *)v11 + 66);
          if ( v12 == 3 || v12 == 1 && v9 == 1 || v12 == 2 && !v9 )
          {
            v13 = *((_BYTE *)v11 + 65);
            if ( v13 <= ucEndGrade )
            {
              if ( v13 >= ucStartGrade )
              {
                *(_DWORD *)&kClassID = v7;
                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                  (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
                  (const unsigned int *)&kClassID);
              }
            }
          }
          ++v7;
        }
        while ( v7 < v10 );
      }
      break;
    case 6:
      if ( v8 > 0 )
      {
        v14 = ucGender;
        v15 = kClassID;
        do
        {
          v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v7);
          v17 = *(_DWORD *)((char *)v16 + 74);
          if ( v17 == 3 || v17 == 1 && v14 == 1 || v17 == 2 && !v14 )
          {
            v18 = *((_BYTE *)v16 + 65);
            if ( v18 <= ucEndGrade )
            {
              if ( v18 >= ucStartGrade )
              {
                *(_DWORD *)&kClassID = v7;
                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                  (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
                  (const unsigned int *)&kClassID);
              }
            }
          }
          ++v7;
        }
        while ( v7 < v15 );
      }
      break;
    case 0xB:
      if ( v8 > 0 )
      {
        v19 = ucGender;
        v20 = kClassID;
        do
        {
          v21 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v7);
          v22 = *(_DWORD *)((char *)v21 + 70);
          if ( v22 == 3 || v22 == 1 && v19 == 1 || v22 == 2 && !v19 )
          {
            v23 = *((_BYTE *)v21 + 65);
            if ( v23 <= ucEndGrade )
            {
              if ( v23 >= ucStartGrade )
              {
                *(_DWORD *)&kClassID = v7;
                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                  (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
                  (const unsigned int *)&kClassID);
              }
            }
          }
          ++v7;
        }
        while ( v7 < v20 );
      }
      break;
    case 0x10:
      if ( v8 > 0 )
      {
        v24 = ucGender;
        v25 = kClassID;
        do
        {
          v26 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v7);
          v27 = *(_DWORD *)((char *)v26 + 78);
          if ( v27 == 3 || v27 == 1 && v24 == 1 || v27 == 2 && !v24 )
          {
            v28 = *((_BYTE *)v26 + 65);
            if ( v28 <= ucEndGrade )
            {
              if ( v28 >= ucStartGrade )
              {
                *(_DWORD *)&kClassID = v7;
                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                  (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
                  (const unsigned int *)&kClassID);
              }
            }
          }
          ++v7;
        }
        while ( v7 < v25 );
      }
      break;
    case 0x15:
      if ( v8 > 0 )
      {
        v29 = ucGender;
        v30 = kClassID;
        do
        {
          v31 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v7);
          v32 = *(_DWORD *)((char *)v31 + 78);
          if ( v32 == 3 || v32 == 1 && v29 == 1 || v32 == 2 && !v29 )
          {
            v33 = *((_BYTE *)v31 + 65);
            if ( v33 <= ucEndGrade )
            {
              if ( v33 >= ucStartGrade )
              {
                *(_DWORD *)&kClassID = v7;
                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                  (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
                  (const unsigned int *)&kClassID);
              }
            }
          }
          ++v7;
        }
        while ( v7 < v30 );
      }
      break;
    case 0x1A:
      if ( v8 > 0 )
      {
        v34 = padwResult;
        v35 = ucGender;
        do
        {
          v36 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v7);
          v37 = *(_DWORD *)((char *)v36 + 78);
          if ( v37 == 3 || v37 == 1 && v35 == 1 || v37 == 2 && !v35 )
          {
            v38 = *((_BYTE *)v36 + 65);
            if ( v38 <= ucEndGrade )
            {
              if ( v38 >= ucStartGrade )
              {
                padwResult = (void *)v7;
                std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
                  (std::vector<unsigned long,std::allocator<unsigned long> > *)v34,
                  (const unsigned int *)&padwResult);
              }
            }
          }
          ++v7;
        }
        while ( v7 < kClassID );
      }
      break;
    default:
      return;
  }
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;

//----- (00634480) --------------------------------------------------------
void __cdecl HairColorInfoTab::GetExactEquipableHairColor(char ucStartGrade, char ucEndGrade, void *padwResult)
{
  int v3; // eax@1
  unsigned int v4; // edi@2
  unsigned int v5; // esi@4
  void *v6; // eax@5
  unsigned __int8 v7; // al@6
  unsigned int _Val; // [sp+8h] [bp-4h]@8

  v3 = *(_DWORD *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 56);
  if ( v3 )
    v4 = *(_DWORD *)(v3 + 40);
  else
    v4 = 0;
  v5 = 0;
  if ( v4 )
  {
    do
    {
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4), v5);
      if ( v6 )
      {
        v7 = *((_BYTE *)v6 + 61);
        if ( v7 >= ucStartGrade )
        {
          if ( v7 <= ucEndGrade )
          {
            _Val = v5;
            std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
              (std::vector<unsigned long,std::allocator<unsigned long> > *)padwResult,
              &_Val);
          }
        }
      }
      ++v5;
    }
    while ( v5 < v4 );
  }
}
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (006344E0) --------------------------------------------------------
unsigned int __cdecl ParseWeaponDemandMask(char *pcStr, char *pcFileName)
{
  char *v2; // edi@1
  unsigned int v3; // esi@1
  int v4; // ecx@1
  char v5; // al@2
  char acSubStr[32]; // [sp+8h] [bp-24h]@4
  unsigned int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = pcStr;
  v3 = 0;
  v4 = 0;
  while ( 1 )
  {
    while ( 1 )
    {
      v5 = *v2;
      if ( *v2 == 38 )
        break;
      if ( !v5 )
        break;
      acSubStr[v4++] = v5;
      ++v2;
    }
    acSubStr[v4] = 0;
    if ( _strcmpi(acSubStr, "Sword") )
    {
      if ( _strcmpi(acSubStr, "TwoHand") )
      {
        if ( _strcmpi(acSubStr, "TwoHandAxe") )
        {
          if ( _strcmpi(acSubStr, "Hammer") )
          {
            if ( _strcmpi(acSubStr, "Mace") )
            {
              if ( _strcmpi(acSubStr, "Bow") )
              {
                if ( _strcmpi(acSubStr, "CrossBow") )
                {
                  if ( _strcmpi(acSubStr, "Staff") )
                  {
                    if ( _strcmpi(acSubStr, "Wand") )
                    {
                      if ( _strcmpi(acSubStr, "Pickaxe") )
                      {
                        if ( _strcmpi(acSubStr, "Axe") )
                        {
                          if ( _strcmpi(acSubStr, "Hoe") )
                          {
                            if ( _strcmpi(acSubStr, "InvincibleHammer") )
                            {
                              if ( _strcmpi(acSubStr, "Claw") )
                              {
                                if ( _strcmpi(acSubStr, "DSword") )
                                {
                                  if ( _strcmpi(acSubStr, "Blade") )
                                  {
                                    if ( _strcmpi(acSubStr, "None")
                                      && (!_strcmpi(acSubStr, "All") || !_strcmpi(acSubStr, "-")) )
                                      v3 = -1;
                                  }
                                  else
                                  {
                                    v3 |= 0x60000u;
                                  }
                                }
                                else
                                {
                                  v3 |= 0x20000u;
                                }
                              }
                              else
                              {
                                v3 |= 0x40000u;
                              }
                            }
                            else
                            {
                              v3 |= 0x10000u;
                            }
                          }
                          else
                          {
                            v3 |= 0x800u;
                          }
                        }
                        else
                        {
                          v3 |= 0x400u;
                        }
                      }
                      else
                      {
                        v3 |= 0x200u;
                      }
                    }
                    else
                    {
                      v3 |= 0x100u;
                    }
                  }
                  else
                  {
                    v3 |= 0x80u;
                  }
                }
                else
                {
                  v3 |= 0x10u;
                }
              }
              else
              {
                v3 |= 8u;
              }
            }
            else
            {
              v3 |= 0x40u;
            }
          }
          else
          {
            v3 |= 0x20u;
          }
        }
        else
        {
          v3 |= 4u;
        }
      }
      else
      {
        v3 |= 2u;
      }
    }
    else
    {
      v3 |= 1u;
    }
    v4 = 0;
    if ( !*v2 )
      break;
    ++v2;
  }
  return v3;
}
// A85C00: using guessed type int __security_cookie;

//----- (00634760) --------------------------------------------------------
unsigned int __cdecl MapEquipWeaponToActionWeaponDemandMask(ItemInfo *pkEquipItemInfo)
{
  unsigned int result; // eax@3

  if ( pkEquipItemInfo )
  {
    switch ( pkEquipItemInfo->WeaponType )
    {
      default:
        goto $LN29_25;
      case 1:
        if ( pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 1;
      case 0x15:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 2;
      case 2:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 8;
      case 0xA:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 16;
      case 4:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 4;
      case 5:
        if ( pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 64;
      case 0xD:
        if ( pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 32;
      case 0xB:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 256;
      case 3:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 128;
      case 0xF:
        if ( _strcmpi(pkEquipItemInfo->InxName, "Hoe") )
          result = _strcmpi(pkEquipItemInfo->InxName, "Axe") != 0 ? 512 : 1024;
        else
          result = 2048;
        return result;
      case 0x10:
        return 65536;
      case 0x12:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 262144;
      case 0x11:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        return 131072;
      case 0x13:
        if ( !pkEquipItemInfo->TwoHand )
          goto $LN29_25;
        result = 393216;
        break;
    }
  }
  else
  {
$LN29_25:
    result = 0;
  }
  return result;
}

//----- (006348C0) --------------------------------------------------------
void __thiscall ActionInfoSet::ActionInfoSet(ActionInfoSet *this, unsigned int uiInfoNum)
{
  this->vfptr = (ActionInfoSetVtbl *)&ActionInfoSet::_vftable_;
  this->m_uiTotal = uiInfoNum;
  if ( uiInfoNum )
    this->m_pkInfo = (ActionInfo *)operator new__(352 * uiInfoNum);
  else
    this->m_pkInfo = 0;
}
// 9C2B50: using guessed type int (__thiscall *ActionInfoSet___vftable_)(void *p, char);

//----- (00634910) --------------------------------------------------------
void __thiscall ActionInfoSet::_ActionInfoSet(ActionInfoSet *this)
{
  void *v1; // ST00_4@1

  v1 = this->m_pkInfo;
  this->vfptr = (ActionInfoSetVtbl *)&ActionInfoSet::_vftable_;
  operator delete__(v1);
}
// 9C2B50: using guessed type int (__thiscall *ActionInfoSet___vftable_)(void *p, char);

//----- (00634930) --------------------------------------------------------
ActionInfo *__thiscall ActionInfoSet::GetByEventCode(ActionInfoSet *this, unsigned int dwEventCode)
{
  unsigned int v2; // edx@1
  unsigned int v3; // eax@1
  ActionInfo *v4; // esi@2
  int v5; // ecx@2
  ActionInfo *result; // eax@5

  v2 = this->m_uiTotal;
  v3 = 0;
  if ( v2 )
  {
    v4 = this->m_pkInfo;
    v5 = (int)&v4->uiEventCode;
    while ( *(_DWORD *)v5 != dwEventCode )
    {
      ++v3;
      v5 += 352;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    result = &v4[v3];
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00634970) --------------------------------------------------------
ActionInfo *__thiscall ActionInfoSet::GetByInxName(ActionInfoSet *this, const char *pkInxName)
{
  unsigned int v2; // edi@1
  unsigned int v3; // eax@1
  const char *v4; // esi@2
  ActionInfo *result; // eax@5
  ActionInfo *v6; // [sp+Ch] [bp-4h]@2

  v2 = this->m_uiTotal;
  v3 = 0;
  if ( v2 )
  {
    v6 = this->m_pkInfo;
    v4 = v6->InxName;
    while ( strcmp(v4, pkInxName) )
    {
      ++v3;
      v4 += 352;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    result = &v6[v3];
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006349F0) --------------------------------------------------------
ActionInfo *__thiscall ActionInfoSet::GetProperActionInfo(ActionInfoSet *this, char *acActionName, ItemInfo *pkEquipItemInfo, bool bNoWeaponCheck)
{
  unsigned int v4; // esi@1
  ActionInfoSet *v5; // ebx@1
  signed int v6; // eax@8
  unsigned int v7; // ecx@36
  ActionInfo *result; // eax@41
  unsigned int i; // [sp+Ch] [bp-8h]@1
  int v10; // [sp+10h] [bp-4h]@2

  v4 = 0;
  v5 = this;
  i = 0;
  if ( this->m_uiTotal )
  {
    v10 = 0;
    while ( 1 )
    {
      if ( !_strcmpi(v5->m_pkInfo[v10].ActionName, acActionName) )
      {
        if ( !bNoWeaponCheck )
          break;
        if ( pkEquipItemInfo )
        {
          switch ( pkEquipItemInfo->WeaponType )
          {
            case 1:
              if ( pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 1;
              break;
            case 0x15:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 2;
              break;
            case 2:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 8;
              break;
            case 0xA:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 16;
              break;
            case 4:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 4;
              break;
            case 5:
              if ( pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 64;
              break;
            case 0xD:
              if ( pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 32;
              break;
            case 0xB:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 256;
              break;
            case 3:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 128;
              break;
            case 0xF:
              if ( _strcmpi(pkEquipItemInfo->InxName, "Hoe") )
              {
                v4 = i;
                v6 = _strcmpi(pkEquipItemInfo->InxName, "Axe") != 0 ? 512 : 1024;
              }
              else
              {
                v4 = i;
                v6 = 2048;
              }
              break;
            case 0x10:
              v6 = 65536;
              break;
            case 0x12:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 262144;
              break;
            case 0x11:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 131072;
              break;
            case 0x13:
              if ( !pkEquipItemInfo->TwoHand )
                goto $LN15_56;
              v6 = 393216;
              break;
            default:
              goto $LN15_56;
          }
        }
        else
        {
$LN15_56:
          v6 = 0;
        }
        v7 = v5->m_pkInfo[v10].dwWeaponDemandMask;
        if ( v7 == -1 )
          break;
        if ( !v7 && !v6 )
          break;
        if ( v7 & v6 )
          break;
      }
      ++v10;
      ++v4;
      i = v4;
      if ( v4 >= v5->m_uiTotal )
        goto LABEL_41;
    }
    result = &v5->m_pkInfo[v4];
  }
  else
  {
LABEL_41:
    result = 0;
  }
  return result;
}

//----- (00634C00) --------------------------------------------------------
bool __thiscall ActionInfoSet::IsActionExist(ActionInfoSet *this, char *acActionName)
{
  ActionInfoSet *v2; // esi@1
  unsigned int v3; // edi@1
  int v4; // ebx@2
  bool result; // al@5

  v2 = this;
  v3 = 0;
  if ( this->m_uiTotal )
  {
    v4 = 0;
    while ( _strcmpi(v2->m_pkInfo[v4].ActionName, acActionName) )
    {
      ++v3;
      ++v4;
      if ( v3 >= v2->m_uiTotal )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00634C50) --------------------------------------------------------
ActionInfo *__thiscall ActionInfoSet::GetByID(ActionInfoSet *this, unsigned __int16 ID)
{
  unsigned int v2; // edx@1
  unsigned int v3; // eax@1
  ActionInfo *v4; // esi@2
  ActionInfo *v5; // ecx@2
  ActionInfo *result; // eax@5

  v2 = this->m_uiTotal;
  v3 = 0;
  if ( v2 )
  {
    v4 = this->m_pkInfo;
    v5 = this->m_pkInfo;
    while ( v5->ID != ID )
    {
      ++v3;
      ++v5;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    result = &v4[v3];
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00634C90) --------------------------------------------------------
ActionInfo::EFF_POS __cdecl ActionInfoTable::GetEffPos(char *pcStr, char *pcFn)
{
  ActionInfo::EFF_POS result; // eax@1

  result = strcmp(pcStr, "HairLink");
  if ( result )
  {
    if ( !strcmp(pcStr, "Chest") )
      return 1;
    if ( !strcmp(pcStr, "LeftHand") )
      return 2;
    if ( !strcmp(pcStr, "RightHand") )
      return 3;
    if ( !strcmp(pcStr, "LeftShoesAcc") )
      return 4;
    if ( !strcmp(pcStr, "RightShoesAcc") )
      return 5;
    if ( !strcmp(pcStr, "BC_ChestParallel") )
      return 6;
    if ( !strcmp(pcStr, "BC_ChestToChest") )
      return 7;
    if ( !strcmp(pcStr, "Ground") )
      return 8;
    if ( !strcmp(pcStr, "Op_Ground") )
      return 9;
    if ( strcmp(pcStr, "Op_Chest") )
    {
      if ( strcmp(pcStr, "World") )
      {
        if ( strcmp(pcStr, "Op_World") )
        {
          if ( strcmp(pcStr, "Spot") )
          {
            if ( strcmp(pcStr, "OP_HairLink") )
            {
              if ( strcmp(pcStr, "TopLink") )
              {
                if ( strcmp(pcStr, "OP_TopLink") )
                {
                  if ( !strcmp(pcStr, "-") )
                    return 9;
                  if ( strcmp(pcStr, "0") )
                    result = 8;
                  else
                    result = 9;
                }
                else
                {
                  result = 16;
                }
              }
              else
              {
                result = 15;
              }
            }
            else
            {
              result = 14;
            }
          }
          else
          {
            result = 13;
          }
        }
        else
        {
          result = 12;
        }
      }
      else
      {
        result = 11;
      }
    }
    else
    {
      result = 10;
    }
  }
  return result;
}

//----- (006350D0) --------------------------------------------------------
unsigned int __cdecl ActionInfoTable::ClearMobActionInfo()
{
  unsigned int v0; // eax@1
  unsigned int result; // eax@4
  NiTMapItem<unsigned int,NiVBSet *> *v2; // esi@5
  NiVBSet *v3; // edi@6

  v0 = 0;
  if ( ActionInfoTable::m_kCharMap.m_uiHashSize )
  {
    while ( !ActionInfoTable::m_kCharMap.m_ppkHashTable[v0] )
    {
      ++v0;
      if ( v0 >= ActionInfoTable::m_kCharMap.m_uiHashSize )
        goto LABEL_4;
    }
    result = (unsigned int)ActionInfoTable::m_kCharMap.m_ppkHashTable[v0];
  }
  else
  {
LABEL_4:
    result = 0;
  }
  v2 = (NiTMapItem<unsigned int,NiVBSet *> *)result;
  if ( result )
  {
    do
    {
      result = (unsigned int)v2->m_pkNext;
      v3 = v2->m_val;
      if ( v2->m_pkNext )
      {
        v2 = v2->m_pkNext;
      }
      else
      {
        result = ActionInfoTable::m_kCharMap.vfptr->KeyToHashIndex(&ActionInfoTable::m_kCharMap, v2->m_key) + 1;
        if ( result >= ActionInfoTable::m_kCharMap.m_uiHashSize )
        {
LABEL_12:
          v2 = 0;
        }
        else
        {
          while ( 1 )
          {
            v2 = ActionInfoTable::m_kCharMap.m_ppkHashTable[result];
            if ( v2 )
              break;
            ++result;
            if ( result >= ActionInfoTable::m_kCharMap.m_uiHashSize )
              goto LABEL_12;
          }
        }
      }
      if ( v3 )
        result = (*(int (__thiscall **)(_DWORD, _DWORD))v3->m_uiIndex)(v3, 1);
    }
    while ( v2 );
  }
  return result;
}

//----- (00635160) --------------------------------------------------------
unsigned int __cdecl ActionInfoTable::ClearCharActionInfo()
{
  unsigned int v0; // eax@1
  unsigned int result; // eax@4
  NiTMapItem<unsigned int,NiVBSet *> *v2; // esi@5
  NiVBSet *v3; // edi@6

  v0 = 0;
  if ( ActionInfoTable::m_kMobMap.m_uiHashSize )
  {
    while ( !ActionInfoTable::m_kMobMap.m_ppkHashTable[v0] )
    {
      ++v0;
      if ( v0 >= ActionInfoTable::m_kMobMap.m_uiHashSize )
        goto LABEL_4;
    }
    result = (unsigned int)ActionInfoTable::m_kMobMap.m_ppkHashTable[v0];
  }
  else
  {
LABEL_4:
    result = 0;
  }
  v2 = (NiTMapItem<unsigned int,NiVBSet *> *)result;
  if ( result )
  {
    do
    {
      result = (unsigned int)v2->m_pkNext;
      v3 = v2->m_val;
      if ( v2->m_pkNext )
      {
        v2 = v2->m_pkNext;
      }
      else
      {
        result = ActionInfoTable::m_kMobMap.vfptr->KeyToHashIndex(&ActionInfoTable::m_kMobMap, v2->m_key) + 1;
        if ( result >= ActionInfoTable::m_kMobMap.m_uiHashSize )
        {
LABEL_12:
          v2 = 0;
        }
        else
        {
          while ( 1 )
          {
            v2 = ActionInfoTable::m_kMobMap.m_ppkHashTable[result];
            if ( v2 )
              break;
            ++result;
            if ( result >= ActionInfoTable::m_kMobMap.m_uiHashSize )
              goto LABEL_12;
          }
        }
      }
      if ( v3 )
        result = (*(int (__thiscall **)(_DWORD, _DWORD))v3->m_uiIndex)(v3, 1);
    }
    while ( v2 );
  }
  return result;
}

//----- (006351F0) --------------------------------------------------------
unsigned int __cdecl ActionInfoTable::ClearRidePetActionInfo()
{
  unsigned int v0; // eax@1
  unsigned int result; // eax@4
  NiTMapItem<unsigned int,NiVBSet *> *v2; // esi@5
  NiVBSet *v3; // edi@6

  v0 = 0;
  if ( ActionInfoTable::m_kRidePetMap.m_uiHashSize )
  {
    while ( !ActionInfoTable::m_kRidePetMap.m_ppkHashTable[v0] )
    {
      ++v0;
      if ( v0 >= ActionInfoTable::m_kRidePetMap.m_uiHashSize )
        goto LABEL_4;
    }
    result = (unsigned int)ActionInfoTable::m_kRidePetMap.m_ppkHashTable[v0];
  }
  else
  {
LABEL_4:
    result = 0;
  }
  v2 = (NiTMapItem<unsigned int,NiVBSet *> *)result;
  if ( result )
  {
    do
    {
      result = (unsigned int)v2->m_pkNext;
      v3 = v2->m_val;
      if ( v2->m_pkNext )
      {
        v2 = v2->m_pkNext;
      }
      else
      {
        result = ActionInfoTable::m_kRidePetMap.vfptr->KeyToHashIndex(&ActionInfoTable::m_kRidePetMap, v2->m_key) + 1;
        if ( result >= ActionInfoTable::m_kRidePetMap.m_uiHashSize )
        {
LABEL_12:
          v2 = 0;
        }
        else
        {
          while ( 1 )
          {
            v2 = ActionInfoTable::m_kRidePetMap.m_ppkHashTable[result];
            if ( v2 )
              break;
            ++result;
            if ( result >= ActionInfoTable::m_kRidePetMap.m_uiHashSize )
              goto LABEL_12;
          }
        }
      }
      if ( v3 )
        result = (*(int (__thiscall **)(_DWORD, _DWORD))v3->m_uiIndex)(v3, 1);
    }
    while ( v2 );
  }
  return result;
}

//----- (00635280) --------------------------------------------------------
unsigned int __cdecl ActionInfoTable::ClearMoverActionInfo()
{
  unsigned int v0; // eax@1
  unsigned int result; // eax@4
  NiTMapItem<unsigned int,NiVBSet *> *v2; // esi@5
  NiVBSet *v3; // edi@6

  v0 = 0;
  if ( ActionInfoTable::m_kMoverMap.m_uiHashSize )
  {
    while ( !ActionInfoTable::m_kMoverMap.m_ppkHashTable[v0] )
    {
      ++v0;
      if ( v0 >= ActionInfoTable::m_kMoverMap.m_uiHashSize )
        goto LABEL_4;
    }
    result = (unsigned int)ActionInfoTable::m_kMoverMap.m_ppkHashTable[v0];
  }
  else
  {
LABEL_4:
    result = 0;
  }
  v2 = (NiTMapItem<unsigned int,NiVBSet *> *)result;
  if ( result )
  {
    do
    {
      result = (unsigned int)v2->m_pkNext;
      v3 = v2->m_val;
      if ( v2->m_pkNext )
      {
        v2 = v2->m_pkNext;
      }
      else
      {
        result = ActionInfoTable::m_kMoverMap.vfptr->KeyToHashIndex(&ActionInfoTable::m_kMoverMap, v2->m_key) + 1;
        if ( result >= ActionInfoTable::m_kMoverMap.m_uiHashSize )
        {
LABEL_12:
          v2 = 0;
        }
        else
        {
          while ( 1 )
          {
            v2 = ActionInfoTable::m_kMoverMap.m_ppkHashTable[result];
            if ( v2 )
              break;
            ++result;
            if ( result >= ActionInfoTable::m_kMoverMap.m_uiHashSize )
              goto LABEL_12;
          }
        }
      }
      if ( v3 )
        result = (*(int (__thiscall **)(_DWORD, _DWORD))v3->m_uiIndex)(v3, 1);
    }
    while ( v2 );
  }
  return result;
}

//----- (00635310) --------------------------------------------------------
unsigned int __cdecl ActionInfoTable::ClearPetActionInfo()
{
  unsigned int v0; // eax@1
  unsigned int result; // eax@4
  NiTMapItem<unsigned int,NiVBSet *> *v2; // esi@5
  NiVBSet *v3; // edi@6

  v0 = 0;
  if ( ActionInfoTable::m_kPetMap.m_uiHashSize )
  {
    while ( !ActionInfoTable::m_kPetMap.m_ppkHashTable[v0] )
    {
      ++v0;
      if ( v0 >= ActionInfoTable::m_kPetMap.m_uiHashSize )
        goto LABEL_4;
    }
    result = (unsigned int)ActionInfoTable::m_kPetMap.m_ppkHashTable[v0];
  }
  else
  {
LABEL_4:
    result = 0;
  }
  v2 = (NiTMapItem<unsigned int,NiVBSet *> *)result;
  if ( result )
  {
    do
    {
      result = (unsigned int)v2->m_pkNext;
      v3 = v2->m_val;
      if ( v2->m_pkNext )
      {
        v2 = v2->m_pkNext;
      }
      else
      {
        result = ActionInfoTable::m_kPetMap.vfptr->KeyToHashIndex(&ActionInfoTable::m_kPetMap, v2->m_key) + 1;
        if ( result >= ActionInfoTable::m_kPetMap.m_uiHashSize )
        {
LABEL_12:
          v2 = 0;
        }
        else
        {
          while ( 1 )
          {
            v2 = ActionInfoTable::m_kPetMap.m_ppkHashTable[result];
            if ( v2 )
              break;
            ++result;
            if ( result >= ActionInfoTable::m_kPetMap.m_uiHashSize )
              goto LABEL_12;
          }
        }
      }
      if ( v3 )
        result = (*(int (__thiscall **)(_DWORD, _DWORD))v3->m_uiIndex)(v3, 1);
    }
    while ( v2 );
  }
  return result;
}

//----- (006353A0) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::GetCharActionInfo(char kClass, char ucGender)
{
  char v2; // al@2

  switch ( kClass )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v2 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v2 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v2 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v2 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v2 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v2 = 26;
      break;
    default:
      v2 = 0;
      break;
  }
  *(_DWORD *)&kClass = 0;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    &ActionInfoTable::m_kCharMap,
    (unsigned __int8)ucGender | ((unsigned __int8)v2 << 8),
    (NiVBSet **)&kClass);
  return (ActionInfoSet *)kClass;
}

//----- (00635470) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::LoadData(char *pcFileName)
{
  ActionInfoSet *result; // eax@3
  ActionInfoSet *v2; // edi@3
  void *v3; // esi@4
  int v4; // eax@5
  int uiTotal; // [sp+4h] [bp-118h]@4
  char acFileName[260]; // [sp+8h] [bp-114h]@3
  unsigned int v7; // [sp+10Ch] [bp-10h]@1
  int v8; // [sp+118h] [bp-4h]@4
  int v9; // [sp+11Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%sAction\\%s.dat");
  result = (ActionInfoSet *)fopen(acFileName, "rb");
  v2 = result;
  if ( result )
  {
    fread(&uiTotal, 4u, 1u, (_iobuf *)result);
    v3 = operator new(0x8Cu);
    v8 = 0;
    if ( v3 )
    {
      v4 = uiTotal;
      *(_DWORD *)v3 = &ActionInfoSet::_vftable_;
      *((_DWORD *)v3 + 1) = v4;
      if ( v4 )
        *((_DWORD *)v3 + 2) = operator new__(352 * v4);
      else
        *((_DWORD *)v3 + 2) = 0;
    }
    else
    {
      v3 = 0;
    }
    fread(*((void **)v3 + 2), 352 * *((_DWORD *)v3 + 1), 1u, (_iobuf *)v2);
    fclose((_iobuf *)v2);
    result = (ActionInfoSet *)v3;
  }
  return result;
}
// 9C2B50: using guessed type int (__thiscall *ActionInfoSet___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00635590) --------------------------------------------------------
unsigned int __cdecl ActionInfoTable::Terminate()
{
  ActionInfoTable::ClearMobActionInfo();
  ActionInfoTable::ClearCharActionInfo();
  ActionInfoTable::ClearRidePetActionInfo();
  ActionInfoTable::ClearMoverActionInfo();
  return ActionInfoTable::ClearPetActionInfo();
}

//----- (006355B0) --------------------------------------------------------
bool __cdecl ActionInfoTable::LoadChar()
{
  signed int v0; // edi@1
  NiVBSet *v1; // eax@2
  char *v2; // edx@2
  int v3; // esi@2
  char v4; // cl@3

  v0 = 0;
  do
  {
    v1 = (NiVBSet *)ActionInfoTable::LoadData(apcFileName_0[v0]);
    v2 = apcFileName_0[v0];
    v3 = (int)&v1->m_uiBlockSize;
    do
    {
      v4 = *v2;
      *(_BYTE *)v3++ = *v2++;
    }
    while ( v4 );
    if ( v1 )
      NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
        &ActionInfoTable::m_kCharMap,
        (unsigned __int8)aucGener[v0] | ((unsigned __int8)akClass[v0] << 8),
        v1);
    ++v0;
  }
  while ( v0 < 12 );
  return 1;
}

//----- (00635620) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::LoadRidePet(unsigned int kID)
{
  unsigned int v1; // esi@1
  void *v2; // eax@2
  ActionInfoSet *result; // eax@4
  NiVBSet *v4; // eax@5
  ActionInfoSet *v5; // esi@5

  v1 = 0;
  if ( !ITableBase<RIDING_RidePetTable>::GetTotal() )
    goto LABEL_4;
  while ( 1 )
  {
    v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4), v1);
    if ( *(_WORD *)v2 == kID )
      break;
    ++v1;
    if ( v1 >= ITableBase<RIDING_RidePetTable>::GetTotal() )
      goto LABEL_4;
  }
  v4 = (NiVBSet *)ActionInfoTable::LoadData((char *)v2 + 98);
  v5 = (ActionInfoSet *)v4;
  if ( v4 )
  {
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
      &ActionInfoTable::m_kRidePetMap,
      kID,
      v4);
    result = v5;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97F38: using guessed type int ITableBase_RIDING_RidePetTable___ms_pkTable;

//----- (00635680) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::LoadMob(unsigned __int16 kID)
{
  int v1; // esi@1
  ActionInfoSet *result; // eax@4
  int v3; // esi@5
  int v4; // ecx@7
  int v5; // eax@8
  NiVBSet *v6; // eax@9
  ActionInfoSet *v7; // esi@9

  v1 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          kID)
    && kID <= *(_WORD *)(v1 + 200)
    && *(_DWORD *)(*(_DWORD *)(v1 + 196) + 4 * kID)
    && (v3 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
        (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                           kID))
    && kID <= *(_WORD *)(v3 + 200)
    && (v4 = *(_DWORD *)(v3 + 196), *(_DWORD *)(v4 + 4 * kID))
    && (v5 = *(_DWORD *)(v4 + 4 * kID)) != 0
    && (v6 = (NiVBSet *)ActionInfoTable::LoadData((char *)(v5 + 34)), (v7 = (ActionInfoSet *)v6) != 0) )
  {
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
      &ActionInfoTable::m_kMobMap,
      kID,
      v6);
    result = v7;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (00635730) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::GetMobActionInfo(unsigned __int16 kID)
{
  ActionInfoSet *result; // eax@1
  ActionInfoSet *pkSet; // [sp+4h] [bp-4h]@1

  pkSet = 0;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    &ActionInfoTable::m_kMobMap,
    kID,
    (NiVBSet **)&pkSet);
  result = pkSet;
  if ( !pkSet )
    result = ActionInfoTable::LoadMob(kID);
  return result;
}

//----- (00635770) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::GetRidePetActionInfo(unsigned int kID)
{
  ActionInfoSet *result; // eax@1
  ActionInfoSet *pkSet; // [sp+4h] [bp-4h]@1

  pkSet = 0;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    &ActionInfoTable::m_kRidePetMap,
    kID,
    (NiVBSet **)&pkSet);
  result = pkSet;
  if ( !pkSet )
    result = ActionInfoTable::LoadRidePet(kID);
  return result;
}

//----- (006357B0) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::LoadMover(unsigned int kID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  void *v4; // eax@5
  ActionInfoSet *result; // eax@8
  MoverView *v6; // eax@9
  NiVBSet *v7; // esi@10

  v1 = *(_DWORD *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( !v2 )
    goto LABEL_8;
  while ( 1 )
  {
    v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 4), v3);
    if ( v4 )
    {
      if ( *(_DWORD *)v4 == kID )
        break;
    }
    ++v3;
    if ( v3 >= v2 )
      goto LABEL_8;
  }
  v6 = MoverViewTab::GetByMoverIdx((const char *)v4 + 4);
  if ( v6 )
  {
    v7 = (NiVBSet *)ActionInfoTable::LoadData(v6->FolderName);
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
      &ActionInfoTable::m_kMoverMap,
      kID,
      v7);
    result = (ActionInfoSet *)v7;
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A959E4: using guessed type int ITableBase_MoverMain_MoverMainTab___ms_pkTable;

//----- (00635830) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::LoadPet(unsigned int kID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  void *v4; // eax@5
  ActionInfoSet *result; // eax@8
  PupView *v6; // eax@9
  NiVBSet *v7; // esi@10

  v1 = *(_DWORD *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( !v2 )
    goto LABEL_8;
  while ( 1 )
  {
    v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<PupMain_PetMainTab>::ms_pkTable + 4), v3);
    if ( v4 )
    {
      if ( *(_DWORD *)v4 == kID )
        break;
    }
    ++v3;
    if ( v3 >= v2 )
      goto LABEL_8;
  }
  v6 = PetViewTab::GetByPetIdx((const char *)v4 + 4);
  if ( v6 )
  {
    v7 = (NiVBSet *)ActionInfoTable::LoadData(v6->FileName);
    NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
      &ActionInfoTable::m_kPetMap,
      kID,
      v7);
    result = (ActionInfoSet *)v7;
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A959F0: using guessed type int ITableBase_PupMain_PetMainTab___ms_pkTable;

//----- (006358B0) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::GetMoverActionInfo(unsigned int kID)
{
  ActionInfoSet *result; // eax@1
  ActionInfoSet *pkSet; // [sp+4h] [bp-4h]@1

  pkSet = 0;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    &ActionInfoTable::m_kMoverMap,
    kID,
    (NiVBSet **)&pkSet);
  result = pkSet;
  if ( !pkSet )
    result = ActionInfoTable::LoadMover(kID);
  return result;
}

//----- (006358F0) --------------------------------------------------------
ActionInfoSet *__cdecl ActionInfoTable::GetPetActionInfo(unsigned int kID)
{
  ActionInfoSet *result; // eax@1
  ActionInfoSet *pkSet; // [sp+4h] [bp-4h]@1

  pkSet = 0;
  NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
    &ActionInfoTable::m_kPetMap,
    kID,
    (NiVBSet **)&pkSet);
  result = pkSet;
  if ( !pkSet )
    result = ActionInfoTable::LoadPet(kID);
  return result;
}

//----- (00635930) --------------------------------------------------------
void *__thiscall ActionInfoSet::_scalar_deleting_destructor_(ActionInfoSet *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pkInfo;
  this->vfptr = (ActionInfoSetVtbl *)&ActionInfoSet::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2B50: using guessed type int (__thiscall *ActionInfoSet___vftable_)(void *p, char);

//----- (00635960) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>(NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *> *this)
{
  NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *> *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *>Vtbl *)&NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C2B58: using guessed type int (__thiscall *NiTMapBase_DFALL_ActionInfoSet ___unsigned long_ActionInfoSet _____vftable_)(void *p, char);

//----- (00635980) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_scalar_deleting_destructor_(NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *> *this, unsigned int a2)
{
  NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *> *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *>Vtbl *)&NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2B58: using guessed type int (__thiscall *NiTMapBase_DFALL_ActionInfoSet ___unsigned long_ActionInfoSet _____vftable_)(void *p, char);

//----- (006359C0) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_long_ActionInfoSet__>::_scalar_deleting_destructor_(NiTMap<unsigned long,ActionInfoSet *> *this, unsigned int a2)
{
  NiTMap<unsigned long,ActionInfoSet *> *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *>Vtbl *)&NiTMap<unsigned_long_ActionInfoSet__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<ActionInfoSet *>,unsigned long,ActionInfoSet *>Vtbl *)&NiTMapBase<DFALL<ActionInfoSet__>_unsigned_long_ActionInfoSet__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2B58: using guessed type int (__thiscall *NiTMapBase_DFALL_ActionInfoSet ___unsigned long_ActionInfoSet _____vftable_)(void *p, char);
// 9C2B78: using guessed type int (__thiscall *NiTMap_unsigned long_ActionInfoSet _____vftable_)(void *p, char);

//----- (00635A40) --------------------------------------------------------
void __thiscall ActorCallBack::_ActorCallBack(ActorCallBack *this)
{
  this->baseclass_0.vfptr = (NiActorManager::CallbackObjectVtbl *)ActorCallBack::_vftable_;
}
// 9C2B9C: using guessed type int (__stdcall *ActorCallBack___vftable_[2])(int, int pkManager, int eEventCode, float fCurrentTime);

//----- (00635A70) --------------------------------------------------------
char __cdecl GenIdUnique(unsigned __int16 ID)
{
  return ((_BYTE)ID + HIBYTE(ID) + ((char)ID >> 4) + (SHIBYTE(ID) >> 4)) & 0xF;
}

//----- (00635AC0) --------------------------------------------------------
void __thiscall ActorCallBack::TextKeyEvent(ActorCallBack *this, NiActorManager *pkManager, unsigned int eSequenceID, const char *pcTextKey, NiTextKeyMatch *pkMatchObject, float fCurrentTime, float fEventTime)
{
  ActorCallBack *v7; // esi@1
  const char v8; // al@3
  char v9; // al@4
  const char v10; // cl@7
  char v11; // al@7

  v7 = this;
  if ( pcTextKey && *pcTextKey == 33 )
  {
    v8 = pcTextKey[1];
    if ( v8 < 97 )
      v9 = v8 - 48;
    else
      v9 = v8 - 87;
    if ( v9 == (((unsigned __int8)this->m_pkCurrActionInfo->ID
               + (this->m_pkCurrActionInfo->ID >> 8)
               + ((char)this->m_pkCurrActionInfo->ID >> 4)
               + (this->m_pkCurrActionInfo->ID >> 8 >> 4)) & 0xF) )
    {
      v10 = pcTextKey[2];
      v11 = pcTextKey[3] - 48;
      if ( v10 == 69 )
      {
        ((void (__thiscall *)(ActorCallBack *, _DWORD, ActionInfo *))v7->baseclass_0.vfptr[1].EndOfSequence)(
          v7,
          v11,
          v7->m_pkCurrActionInfo);
      }
      else
      {
        if ( v10 == 83 )
          ((void (__thiscall *)(ActorCallBack *, _DWORD, ActionInfo *))v7->baseclass_0.vfptr[2].AnimActivated)(
            v7,
            v11,
            v7->m_pkCurrActionInfo);
      }
    }
  }
}

//----- (00635B50) --------------------------------------------------------
void __thiscall ActorCallBack::ActorCallBack(ActorCallBack *this)
{
  this->baseclass_0.vfptr = (NiActorManager::CallbackObjectVtbl *)ActorCallBack::_vftable_;
}
// 9C2B9C: using guessed type int (__stdcall *ActorCallBack___vftable_[2])(int, int pkManager, int eEventCode, float fCurrentTime);

//----- (00635B60) --------------------------------------------------------
void __cdecl CopyTextKey(NiTextKey *pkDest, NiTextKey *pkSrc)
{
  NiTextKey::SetText(pkDest, pkSrc->m_pText);
  pkDest->m_fTime = pkSrc->m_fTime;
}

//----- (00635B90) --------------------------------------------------------
void __cdecl AddTextKeys(NiControllerSequence *pkSeq, AddingTextKeys *pkAdding)
{
  NiTextKeyExtraData *v2; // eax@1
  int v3; // ecx@2
  void *v4; // eax@2
  int v5; // esi@4
  int v6; // ebx@7
  int v7; // edi@7
  const char **v8; // esi@8
  int v9; // eax@12
  int v10; // ebx@14
  int v11; // esi@14
  int v12; // eax@14
  int v13; // ecx@14
  void *v14; // eax@14
  int v15; // edi@15
  NiTextKey *v16; // esi@18
  float **v17; // ebx@18
  float *v18; // edi@19
  int v19; // esi@21
  NiTextKey *v20; // edi@22
  int v21; // ebx@25
  NiTextKey *v22; // esi@26
  char *v23; // edi@26
  void *v24; // esi@30
  void *v25; // eax@31
  void *apkShouldBeKeeps[128]; // [sp+0h] [bp-228h]@12
  char *pkOldKeys; // [sp+200h] [bp-28h]@2
  void *pkExtra; // [sp+204h] [bp-24h]@1
  const char *v29; // [sp+208h] [bp-20h]@8
  int uiNewKeyCount; // [sp+20Ch] [bp-1Ch]@2
  int uiShouldBeKeepsCount; // [sp+210h] [bp-18h]@2
  unsigned int ui; // [sp+214h] [bp-14h]@2
  int v33; // [sp+218h] [bp-10h]@3
  int v34; // [sp+224h] [bp-4h]@14
  void *iNewKeyLast; // [sp+230h] [bp+8h]@3
  int iNewKeyLasta; // [sp+230h] [bp+8h]@17

  v2 = pkSeq->m_spTextKeys.m_pObject;
  pkExtra = v2;
  if ( v2 )
  {
    v3 = v2->m_uiNumKeys;
    v4 = v2->m_pKeys;
    uiShouldBeKeepsCount = 0;
    uiNewKeyCount = v3;
    pkOldKeys = (char *)v4;
    ui = 0;
    if ( (unsigned int)v3 > 0 )
    {
      v33 = pkAdding->iEffTextKeyCount;
      iNewKeyLast = v4;
      do
      {
        v5 = 0;
        if ( v33 <= 0 )
        {
LABEL_7:
          v6 = pkAdding->iSndTextKeyCount;
          v7 = 0;
          if ( v6 <= 0 )
          {
LABEL_11:
            if ( (unsigned int)uiShouldBeKeepsCount >= 0x80 )
              break;
            v9 = uiShouldBeKeepsCount;
            apkShouldBeKeeps[uiShouldBeKeepsCount] = iNewKeyLast;
            uiShouldBeKeepsCount = v9 + 1;
          }
          else
          {
            v29 = (const char *)*((_DWORD *)iNewKeyLast + 1);
            v8 = (const char **)pkAdding->apcSndTextKey;
            while ( strcmp(v29, *v8) )
            {
              ++v7;
              ++v8;
              if ( v7 >= v6 )
                goto LABEL_11;
            }
          }
        }
        else
        {
          while ( strcmp(*((const char **)iNewKeyLast + 1), pkAdding->apcEffTextKey[v5]) )
          {
            ++v5;
            if ( v5 >= v33 )
              goto LABEL_7;
          }
        }
        iNewKeyLast = (char *)iNewKeyLast + 8;
        ++ui;
      }
      while ( ui < uiNewKeyCount );
    }
    v10 = uiShouldBeKeepsCount;
    v11 = uiShouldBeKeepsCount + pkAdding->iEffTextKeyCount + pkAdding->iSndTextKeyCount + 1;
    v12 = 8 * (uiShouldBeKeepsCount + pkAdding->iEffTextKeyCount + pkAdding->iSndTextKeyCount + 1);
    v13 = (unsigned __int64)(unsigned int)(uiShouldBeKeepsCount
                                         + pkAdding->iEffTextKeyCount
                                         + pkAdding->iSndTextKeyCount
                                         + 1) >> 29 != 0;
    uiNewKeyCount = uiShouldBeKeepsCount + pkAdding->iEffTextKeyCount + pkAdding->iSndTextKeyCount + 1;
    v14 = operator new__(((v12 | -v13) + 4) | -__CFADD__(v12 | -v13, 4));
    v34 = 0;
    if ( v14 )
    {
      v15 = (int)((char *)v14 + 4);
      *(_DWORD *)v14 = v11;
      _eh_vector_constructor_iterator_(
        (char *)v14 + 4,
        8u,
        v11,
        (void (__thiscall *)(void *))NiTextKey::NiTextKey,
        (void (__thiscall *)(void *))NiTextKey::_NiTextKey);
      v33 = v15;
    }
    else
    {
      v33 = 0;
      v15 = 0;
    }
    v34 = -1;
    NiTextKey::SetText((NiTextKey *)v15, "#AR");
    *(float *)v15 = 1.0;
    iNewKeyLasta = 1;
    if ( v10 )
    {
      ui = uiShouldBeKeepsCount;
      v16 = (NiTextKey *)(v15 + 8);
      v17 = (float **)apkShouldBeKeeps;
      iNewKeyLasta = uiShouldBeKeepsCount + 1;
      do
      {
        v18 = *v17;
        NiTextKey::SetText(v16, *((char **)*v17 + 1));
        v16->m_fTime = *v18;
        ++v17;
        ++v16;
        --ui;
      }
      while ( ui );
      v15 = v33;
    }
    v19 = 0;
    if ( pkAdding->iEffTextKeyCount > 0 )
    {
      v20 = (NiTextKey *)(v15 + 8 * iNewKeyLasta);
      do
      {
        NiTextKey::SetText(v20, pkAdding->apcEffTextKey[v19]);
        ++iNewKeyLasta;
        v20->m_fTime = pkAdding->afEffTextKeyNote[v19++];
        ++v20;
      }
      while ( v19 < pkAdding->iEffTextKeyCount );
      v15 = v33;
    }
    v21 = 0;
    if ( pkAdding->iSndTextKeyCount > 0 )
    {
      v22 = (NiTextKey *)(v15 + 8 * iNewKeyLasta);
      v23 = (char *)pkAdding->afSndTextKeyNote;
      do
      {
        NiTextKey::SetText(v22, *((char **)v23 - 2));
        v22->m_fTime = *(float *)v23;
        ++v21;
        ++v22;
        v23 += 4;
      }
      while ( v21 < pkAdding->iSndTextKeyCount );
      v15 = v33;
    }
    if ( pkOldKeys )
    {
      v24 = pkOldKeys - 4;
      _eh_vector_destructor_iterator_(
        pkOldKeys,
        8u,
        *((_DWORD *)pkOldKeys - 1),
        (void (__thiscall *)(void *))NiTextKey::_NiTextKey);
      operator delete(v24);
    }
    v25 = pkExtra;
    *((_DWORD *)pkExtra + 3) = uiNewKeyCount;
    *((_DWORD *)v25 + 4) = v15;
  }
}

//----- (00635E30) --------------------------------------------------------
void __thiscall NiTextKey::NiTextKey(NiTextKey *this)
{
  this->m_pText = 0;
}

//----- (00635E40) --------------------------------------------------------
void *__thiscall ActorCallBack::_scalar_deleting_destructor_(ActorCallBack *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiActorManager::CallbackObjectVtbl *)ActorCallBack::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C2B9C: using guessed type int (__stdcall *ActorCallBack___vftable_[2])(int, int pkManager, int eEventCode, float fCurrentTime);

//----- (00635E70) --------------------------------------------------------
AttackSequence *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::RemoveHead(NiTPointerListBase<DFALL<AttackSequence *>,AttackSequence *> *this)
{
  NiTPointerListBase<DFALL<AttackSequence *>,AttackSequence *> *v1; // esi@1
  NiTListItem<AttackSequence *> *v2; // ecx@1
  NiTListItem<AttackSequence *> *v3; // eax@1
  AttackSequence *v4; // edi@4

  v1 = this;
  v2 = this->baseclass_0.m_pkHead;
  v3 = v2->m_pkNext;
  v1->baseclass_0.m_pkHead = v2->m_pkNext;
  if ( v3 )
    v3->m_pkPrev = 0;
  else
    v1->baseclass_0.m_pkTail = 0;
  v4 = v2->m_element;
  v1->baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *)v1, v2);
  --*(_DWORD *)&v1->baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
  return v4;
}

//----- (00635EA0) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetChestPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[5];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 30.0;
  }
  return v3;
}

//----- (00635F00) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetRightHandPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[12];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 25.0;
  }
  return v3;
}

//----- (00635F60) --------------------------------------------------------
bool __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *this, unsigned int key, NiVBSet **val)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *v3; // esi@1
  NiTMapItem<unsigned int,NiVBSet *> *v4; // edi@1
  bool result; // al@4

  v3 = this;
  v4 = this->m_ppkHashTable[((int (__stdcall *)(_DWORD))this->vfptr->KeyToHashIndex)(key)];
  if ( v4 )
  {
    while ( !v3->vfptr->IsKeysEqual(v3, key, v4->m_key) )
    {
      v4 = v4->m_pkNext;
      if ( !v4 )
        goto LABEL_4;
    }
    *val = v4->m_val;
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00635FC0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_NiTListBase<DFALL<AttackSequence__>_AttackSequence__>(NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *this)
{
  this->vfptr = (NiTListBase<DFALL<AttackSequence *>,AttackSequence *>Vtbl *)&NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
}
// 9C2C38: using guessed type int (__thiscall *NiTListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);

//----- (00635FD0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_NiTListBase<DFALL<SkillSequence__>_SkillSequence__>(NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *this)
{
  this->vfptr = (NiTListBase<DFALL<SkillSequence *>,SkillSequence *>Vtbl *)&NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
}
// 9C2C48: using guessed type int (__thiscall *NiTListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);

//----- (00635FE0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_scalar_deleting_destructor_(NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<AttackSequence *>,AttackSequence *>Vtbl *)&NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C2C38: using guessed type int (__thiscall *NiTListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);

//----- (00636010) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vector_deleting_destructor_(NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<SkillSequence *>,SkillSequence *>Vtbl *)&NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C2C48: using guessed type int (__thiscall *NiTListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);

//----- (00636040) --------------------------------------------------------
bool __thiscall AttackSequenceManager::IsSeqFinished(AttackSequenceManager *this, NiControllerSequence *pkSequence)
{
  bool result; // al@2

  if ( pkSequence )
  {
    if ( pkSequence->m_eState == 1 )
      result = pkSequence->m_fEndKeyTime <= (double)pkSequence->m_fLastTime;
    else
      result = 0;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00636080) --------------------------------------------------------
void __thiscall AttackSequenceManager::StopAttack(AttackSequenceManager *this)
{
  AttackSequence *v1; // eax@2

  if ( *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v1 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail->m_element;
    if ( v1 )
      v1->bLastSequence = 1;
  }
  this->m_bInDuringAttackInServer = 0;
}

//----- (006360A0) --------------------------------------------------------
int __thiscall AttackSequenceManager::GetAttSeqCount(AttackSequenceManager *this)
{
  return *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
}

//----- (006360B0) --------------------------------------------------------
bool __thiscall AttackSequenceManager::IsDuringAttackInServer(AttackSequenceManager *this)
{
  return *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] > 0;
}

//----- (006360C0) --------------------------------------------------------
bool __thiscall AttackSequenceManager::IsSkillSequenceEmpty(AttackSequenceManager *this)
{
  return *(_DWORD *)&this->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] == 0;
}

//----- (006360D0) --------------------------------------------------------
DamageInfoSet *__thiscall AttackSequenceManager::GetSkillDmgInfoSetbyIndex(AttackSequenceManager *this, unsigned __int16 Index)
{
  NiTListItem<SkillSequence *> *v2; // eax@2
  SkillSequence *v3; // ecx@3
  DamageInfoSet *result; // eax@5

  if ( *(_DWORD *)&this->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
    && (v2 = this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead) != 0 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3->m_Index == Index )
        break;
      if ( !v2 )
        goto LABEL_5;
    }
    result = &v3->kDamageInfoSet;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00636110) --------------------------------------------------------
DamageInfo *__thiscall DamageInfoSet::GetLastInvalidDmgInfo(DamageInfoSet *this)
{
  NiTListItem<DamageInfo *> *v1; // ecx@1
  DamageInfo *result; // eax@2

  v1 = this->kDamageList.baseclass_0.baseclass_0.m_pkTail;
  if ( v1 )
  {
    while ( 1 )
    {
      result = v1->m_element;
      v1 = v1->m_pkPrev;
      if ( result )
      {
        if ( result->SeqNum == -1 )
          break;
      }
      if ( !v1 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00636140) --------------------------------------------------------
DamageInfoSet *__thiscall AttackSequenceManager::GetAttDmgInfoSetbySeqNum(AttackSequenceManager *this, __int16 SeqNum)
{
  NiTListItem<AttackSequence *> *v2; // eax@2
  AttackSequence *v3; // ecx@3
  DamageInfoSet *result; // eax@5

  if ( *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
    && (v2 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead) != 0 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3->m_SeqNum == SeqNum )
        break;
      if ( !v2 )
        goto LABEL_5;
    }
    result = &v3->kDamageInfoSet;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00636180) --------------------------------------------------------
AttackSequence *__thiscall AttackSequenceManager::GetAttSeqbySeqNum(AttackSequenceManager *this, __int16 SeqNum)
{
  NiTListItem<AttackSequence *> *v2; // ecx@2
  AttackSequence *result; // eax@3

  if ( *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
    && (v2 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead) != 0 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result->m_SeqNum == SeqNum )
        break;
      if ( !v2 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006361B0) --------------------------------------------------------
AttackSequence *__thiscall AttackSequenceManager::GetInvalidSeq(AttackSequenceManager *this)
{
  NiTListItem<AttackSequence *> *v1; // ecx@2
  AttackSequence *result; // eax@3

  if ( *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
    && (v1 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead) != 0 )
  {
    while ( 1 )
    {
      result = v1->m_element;
      v1 = v1->m_pkNext;
      if ( result->m_SeqNum == -1 )
        break;
      if ( !v1 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006361E0) --------------------------------------------------------
SkillSequence *__thiscall AttackSequenceManager::FindSkillSequence(AttackSequenceManager *this, unsigned __int16 Index, unsigned __int16 kID)
{
  NiTListItem<SkillSequence *> *v3; // ecx@1
  SkillSequence *result; // eax@2

  v3 = this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      result = v3->m_element;
      v3 = v3->m_pkNext;
      if ( result->m_Index == Index )
      {
        if ( result->kSkillID == kID )
          break;
      }
      if ( !v3 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00636210) --------------------------------------------------------
void __thiscall DamageInfoSet::AddDamage(DamageInfoSet *this, unsigned int uiDamage, unsigned __int16 kTarget, unsigned int dwHpChangeSeqNo, unsigned int kTargetRestHP, bool bViewDamage, bool bRange, __int16 DmgSeqNum)
{
  DamageInfoSet *v8; // esi@1
  DamageInfo *v9; // eax@2
  unsigned int v10; // edi@4
  unsigned int v11; // ebx@4
  void *v12; // edi@6
  int v13; // eax@8
  NiTListItem<DamageInfo *> *v14; // ecx@8
  Char *v15; // eax@12
  Char *v16; // esi@15
  CClientGuild *v17; // eax@16
  CClientGuild *v18; // eax@20

  v8 = this;
  if ( *(_DWORD *)&this->kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v9 = this->kDamageList.baseclass_0.baseclass_0.m_pkTail->m_element;
    if ( v9 )
    {
      if ( DmgSeqNum == -1 )
      {
        v10 = kTargetRestHP;
        v11 = dwHpChangeSeqNo;
        v9->uiDamage = uiDamage;
        v9->kTargetHandle = kTarget;
        v9->kTargetRestHP = kTargetRestHP;
        v9->dwHpChangeSeqNo = dwHpChangeSeqNo;
        v9->bViewDamage = bViewDamage;
        goto LABEL_12;
      }
      goto LABEL_7;
    }
  }
  if ( bRange != 1 || (v12 = DamageInfoSet::GetLastInvalidDmgInfo(this)) == 0 )
LABEL_7:
    v12 = operator new(0x18u);
  v11 = dwHpChangeSeqNo;
  *((_DWORD *)v12 + 1) = uiDamage;
  *((_WORD *)v12 + 4) = kTarget;
  *((_DWORD *)v12 + 3) = kTargetRestHP;
  *((_DWORD *)v12 + 4) = dwHpChangeSeqNo;
  *(_BYTE *)v12 = bViewDamage;
  *((_WORD *)v12 + 11) = DmgSeqNum;
  v13 = (int)v8->kDamageList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *)v8);
  *(_DWORD *)(v13 + 8) = v12;
  *(_DWORD *)v13 = 0;
  *(_DWORD *)(v13 + 4) = v8->kDamageList.baseclass_0.baseclass_0.m_pkTail;
  v14 = v8->kDamageList.baseclass_0.baseclass_0.m_pkTail;
  if ( v14 )
    v14->m_pkNext = (NiTListItem<DamageInfo *> *)v13;
  else
    v8->kDamageList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<DamageInfo *> *)v13;
  v10 = kTargetRestHP;
  ++*(_DWORD *)&v8->kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
  v8->kDamageList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<DamageInfo *> *)v13;
LABEL_12:
  v15 = CharMgr::GetChar(&g_kCharMgr, kTarget);
  if ( v15 && v15->m_kHandle == HIWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[0]) )
    Char::TOTHpUpdate(v15, v11, v10);
  v16 = CharMgr::GetChar(&g_kCharMgr, kTarget);
  if ( v16 )
  {
    v17 = GuildTask::GetGuild();
    if ( CClientGuild::IsWarEngaging(v17) && v11 != -65536 && v11 != -131072 )
      Char::HpUpdate(v16, v11, v10);
    v18 = GuildTask::GetGuild();
    if ( CClientGuild::IsGttEngaging(v18) && v11 != -65536 && v11 != -131072 )
      Char::HpUpdate(v16, v11, v10);
    if ( !(uiDamage & 0x20000000) )
      Char::HpUpdate(v16, v11, v10);
  }
}

//----- (00636370) --------------------------------------------------------
void __thiscall AttackSequenceManager::AddSkillSeq(AttackSequenceManager *this, SkillSequence *pkSeq)
{
  char *v2; // esi@2
  NiTListItem<SkillSequence *> *v3; // eax@2
  int v4; // ecx@2

  if ( pkSeq )
  {
    v2 = (char *)&this->m_kSkillSeqList;
    this->m_bInDuringAttackInServer = 1;
    v3 = this->m_kSkillSeqList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *)&this->m_kSkillSeqList);
    v3->m_element = pkSeq;
    v3->m_pkNext = 0;
    v3->m_pkPrev = (NiTListItem<SkillSequence *> *)*((_DWORD *)v2 + 2);
    v4 = *((_DWORD *)v2 + 2);
    if ( v4 )
    {
      *(_DWORD *)v4 = v3;
      ++*((_DWORD *)v2 + 3);
      *((_DWORD *)v2 + 2) = v3;
    }
    else
    {
      ++*((_DWORD *)v2 + 3);
      *((_DWORD *)v2 + 1) = v3;
      *((_DWORD *)v2 + 2) = v3;
    }
  }
}

//----- (006363C0) --------------------------------------------------------
void __thiscall DamageInfo::Applicate(DamageInfo *this, Char *pkAttacker)
{
  DamageInfo *v2; // edi@1
  Char *v3; // eax@2
  Char *v4; // esi@2
  int v5; // ebx@3
  AbStateInfecteeVtbl *v6; // ebx@4
  int v7; // eax@4
  char v8; // al@8
  unsigned int v9; // eax@12
  unsigned int v10; // eax@15
  unsigned int v11; // ST04_4@18
  unsigned int v12; // eax@18
  char *v13; // ebx@18
  EffectViewInfo *v14; // eax@25
  unsigned int v15; // edi@27
  NiPoint3 kPos; // [sp+4h] [bp-Ch]@19

  v2 = this;
  if ( pkAttacker )
  {
    v3 = CharMgr::GetChar(&g_kCharMgr, this->kTargetHandle);
    v4 = v3;
    if ( v3 )
    {
      ((void (__thiscall *)(Char *))v3->baseclass_0.vfptr[3].Affect)(v3);
      ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].__vecDelDtor)(v4);
      v5 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[3].Deaffect)(v4);
      if ( ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].__vecDelDtor)(v4) == v5 )
      {
        v6 = v4->baseclass_0.vfptr;
        v7 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].__vecDelDtor)(v4);
        ((void (__thiscall *)(Char *, int))v6[4].Deaffect)(v4, v7);
      }
      if ( !(v2->uiDamage & 0x34000000) && !Char::CheckActState(v4, 500000) )
        ((void (__thiscall *)(Char *, unsigned int, _DWORD))v4->baseclass_0.vfptr[12].__vecDelDtor)(v4, v2->uiDamage, 0);
      v8 = (v2->uiDamage >> 31) & 1;
      if ( !v8 )
        v8 = Char::CheckActState(v4, 500000) == 0;
      if ( v2->bViewDamage )
      {
        if ( v8 )
        {
          v9 = v2->uiDamage;
          if ( !(v9 & 0x4000000) || v9 & 0x21000000 )
            TextEffMgr::AddDamage(&g_kTextEffMgr, v2->kTargetHandle, v9 & 0x77D0FFFF);
        }
      }
      v10 = v2->uiDamage;
      if ( v2->uiDamage & 0x10000000 || (unsigned int)((char *)loc_7FFFFF + 1) & v10 )
      {
        if ( v2->uiDamage & 0x10000000 )
          TextEffMgr::AddDamage(&g_kTextEffMgr, v2->kTargetHandle, v10 & 0x1000FFFF);
      }
      else
      {
        if ( !(v10 & 0x24000000) )
        {
          v11 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[17].Affect)(v4);
          v12 = Char::GetWeaponType(pkAttacker);
          v13 = DmgSndTab::Get(v12, v11);
          if ( v13 )
          {
            Char::GetChestPos(v4, &kPos);
            SoundMgr::CreateSound(&g_kSoundMgr, v13, &kPos);
          }
        }
      }
      if ( v2->uiDamage & 0x40000000 && pkAttacker == g_pkMainChar && MachineOpt::ms_kGraphicOption.bScreenShakeEnable )
      {
        v14 = ShakeEffectViewInfoTab::GetByID(1u);
        World::ImpactCamera(&g_kWorld, v14);
      }
      if ( v4->m_byMode != 3 )
      {
        v15 = v2->uiDamage;
        if ( (v15 & 0x80000000u) != 0 )
        {
          if ( !(v15 & 0x4000000) )
            ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[20].Deaffect)(v4);
        }
      }
    }
  }
}
// 7FFFFF: using guessed type int loc_7FFFFF();

//----- (00636580) --------------------------------------------------------
void __thiscall AttackSequenceManager::AttackSequenceManager(AttackSequenceManager *this)
{
  this->vfptr = (AttackSequenceManagerVtbl *)AttackSequenceManager::_vftable_;
  *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kAttSeqList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttackSequence *>,AttackSequence *>Vtbl *)&NiTList<AttackSequence__>::_vftable_;
  *(_DWORD *)&this->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kSkillSeqList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SkillSequence *>,SkillSequence *>Vtbl *)&NiTList<SkillSequence__>::_vftable_;
  this->m_fLastSequenceEndTime = 100.0;
  this->m_fCurrFrequency = 1.0;
  this->m_bHardStopAttSeq = 0;
  this->m_fTargetFrequency = 1.0;
  this->m_bInDuringAttackInServer = 0;
  this->m_kLastTargetHandle = -1;
  this->m_iCurrAttSeqCode = 0;
  this->m_iLastAttSeqCode = 0;
  *(_WORD *)&this->m_bSequenceStarted = 0;
}
// 9C2C88: using guessed type int (__thiscall *NiTList_AttackSequence _____vftable_)(void *p, char);
// 9C2C98: using guessed type int (__thiscall *NiTList_SkillSequence _____vftable_)(void *p, char);
// 9C2CA8: using guessed type int (*AttackSequenceManager___vftable_[6])();

//----- (006365E0) --------------------------------------------------------
bool __thiscall DamageInfoSet::Applicate(DamageInfoSet *this, Char *pkAttacker, bool bAllApplicate)
{
  NiTListItem<DamageInfo *> *v3; // edi@1
  DamageInfo *v4; // esi@3
  NiTListItem<DamageInfo *> *v5; // eax@3
  int v6; // ecx@4
  NiTListItem<DamageInfo *> *v7; // edx@4
  bool result; // al@10
  DamageInfo *v9; // esi@12
  NiTListItem<DamageInfo *> *v10; // eax@14
  int v11; // ecx@15
  NiTListItem<DamageInfo *> *v12; // edx@15
  DamageInfoSet *thisa; // [sp+Ch] [bp-4h]@1

  v3 = this->kDamageList.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  if ( bAllApplicate == 1 )
  {
    while ( v3 )
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      DamageInfo::Applicate(v4, pkAttacker);
      operator delete(v4);
      v5 = thisa->kDamageList.baseclass_0.baseclass_0.m_pkHead;
      if ( v5 )
      {
        while ( 1 )
        {
          v6 = (int)&v5->m_element;
          v7 = v5;
          v5 = v5->m_pkNext;
          if ( v4 == *(DamageInfo **)v6 )
            break;
          if ( !v5 )
            goto LABEL_6;
        }
      }
      else
      {
LABEL_6:
        v7 = 0;
      }
      *(_DWORD *)&bAllApplicate = v7;
      if ( v7 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)thisa,
          (void **)&bAllApplicate);
    }
    result = 1;
  }
  else
  {
    if ( v3 )
    {
      while ( 1 )
      {
        v9 = v3->m_element;
        v3 = v3->m_pkNext;
        *(_DWORD *)&bAllApplicate = v9;
        DamageInfo::Applicate(v9, pkAttacker);
        if ( v9->bViewDamage )
          break;
        if ( v9->dwHpChangeSeqNo != -131072 )
          break;
        operator delete(v9);
        v10 = thisa->kDamageList.baseclass_0.baseclass_0.m_pkHead;
        if ( v10 )
        {
          while ( 1 )
          {
            v11 = (int)&v10->m_element;
            v12 = v10;
            v10 = v10->m_pkNext;
            if ( v9 == *(DamageInfo **)v11 )
              break;
            if ( !v10 )
              goto LABEL_17;
          }
        }
        else
        {
LABEL_17:
          v12 = 0;
        }
        *(_DWORD *)&bAllApplicate = v12;
        if ( v12 )
          NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)thisa,
            (void **)&bAllApplicate);
        if ( !v3 )
          goto LABEL_21;
      }
      operator delete(v9);
      NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)thisa,
        (NiLight *const *)&bAllApplicate);
      result = 1;
    }
    else
    {
LABEL_21:
      result = 0;
    }
  }
  return result;
}

//----- (006366F0) --------------------------------------------------------
void __thiscall SkillSequence::ApplicateImmediatelyDamageOnly(SkillSequence *this, Char *pkCaster, bool bAllApplicate)
{
  DamageInfoSet *v3; // esi@3

  if ( pkCaster )
  {
    if ( *(_DWORD *)&this->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
    {
      v3 = &this->kDamageInfoSet;
      DamageInfoSet::Applicate(&this->kDamageInfoSet, pkCaster, 0);
      DamageInfoSet::Clear(v3);
    }
  }
}

//----- (00636720) --------------------------------------------------------
bool __thiscall SkillSequence::ApplicateImmediately(SkillSequence *this, Char *pkCaster, bool bAllApplicate)
{
  int v3; // edi@0
  int v4; // esi@0
  SkillSequence *v5; // ebx@1
  int v7; // ST24_4@4
  int v8; // ST20_4@4
  void *v9; // eax@4
  int v10; // esi@4
  int v11; // edi@4
  int v12; // edx@4
  int v13; // eax@6
  int v14; // esi@7
  float v15; // ST18_4@10
  NiPoint3 kPos; // [sp+24h] [bp-10h]@11
  Char *pkTarget; // [sp+30h] [bp-4h]@4

  v5 = this;
  if ( !pkCaster
    || !*(_DWORD *)&this->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
    return 0;
  v7 = v4;
  v8 = v3;
  v9 = CharMgr::GetChar(
         &g_kCharMgr,
         this->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead->m_element->kTargetHandle);
  v10 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
  v11 = v5->kSkillID;
  v12 = *(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
  pkTarget = (Char *)v9;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, int, int, int))(v12 + 16))(
                           ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                           v11,
                           v8,
                           v7)
    || (unsigned __int16)v11 > *(_WORD *)(v10 + 200)
    || (v13 = *(_DWORD *)(v10 + 196) + 4 * v11, !*(_DWORD *)v13)
    || (v14 = *(_DWORD *)v13) == 0 )
    return 0;
  if ( *(_DWORD *)(v14 + 91) == 1 )
  {
    if ( strcmp((const char *)(v14 + 195), (const char *)&unk_9C2BC0) )
    {
      v15 = (double)*(unsigned int *)(v14 + 191);
      EffectMgr::CreateShootEff(
        &g_kEffectMgr,
        (char *)(v14 + 195),
        (char *)(v14 + 291),
        (char *)(v14 + 327),
        pkCaster,
        pkTarget,
        Timer::ms_fCurTime,
        v15,
        &v5->kDamageInfoSet,
        *(LastEffPos *)(v14 + 323),
        1);
    }
    Char::GetRightHandPos(pkCaster, &kPos);
    SoundMgr::CreateSound(&g_kSoundMgr, (char *)(v14 + 227), &kPos);
    return 0;
  }
  return DamageInfoSet::Applicate(&v5->kDamageInfoSet, pkCaster, bAllApplicate);
}
// 636720: could not find valid save-restore pair for edi
// 636720: could not find valid save-restore pair for esi
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (00636880) --------------------------------------------------------
bool __thiscall AttackSequenceManager::AddAttMultiDmg(AttackSequenceManager *this, __int16 SeqNum, __int16 DmgNum, unsigned int uiDamage, unsigned __int16 kTarget, unsigned int dwHpChangeSeqNo, unsigned int kTargetRestHP, bool bViewDamage)
{
  AttackSequenceManager *v8; // esi@1
  int v9; // edx@1
  NiTListItem<DamageInfo *> *v10; // edi@1
  bool v11; // zf@1
  NiTListItem<AttackSequence *> *v12; // eax@2
  AttackSequence *v13; // ecx@3
  __int16 v14; // bx@6
  NiTListItem<AttackSequence *> *v15; // eax@7
  AttackSequence *v16; // edi@8
  Char *v17; // eax@12
  int v18; // eax@13
  ArrowEff *v19; // eax@13
  ArrowEff *v20; // edi@13
  int v21; // eax@14
  bool result; // al@15
  Char *v23; // eax@17
  int v24; // eax@18
  DamageInfoSet *v25; // eax@20
  Char *v26; // eax@21
  int v27; // eax@22
  ArrowEff *v28; // eax@22
  ArrowEff *v29; // esi@22
  DamageInfo *v30; // eax@23
  void *v31; // eax@27
  Char *v32; // eax@31
  DamageInfoSet pkDmgDummyInfoSet; // [sp+0h] [bp-1Ch]@31
  NiTListItem<DamageInfo *> *v34; // [sp+18h] [bp-4h]@31
  DamageInfoSet *pkInfoSet; // [sp+24h] [bp+8h]@20

  v8 = this;
  v9 = *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
  v10 = 0;
  v11 = v9 == 0;
  if ( !v9 )
  {
LABEL_6:
    v14 = SeqNum;
    if ( v11 || (v15 = v8->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead) == 0 )
    {
LABEL_11:
      if ( v8->vfptr->GetChar(v8) )
      {
        v17 = v8->vfptr->GetChar(v8);
        if ( Char::IsRangeAttChar(v17) )
        {
          v18 = (int)v8->vfptr->GetChar(v8);
          v19 = EffectMgr::GetArrowEffectInList(&g_kEffectMgr, SeqNum, *(_WORD *)(v18 + 548));
          v20 = v19;
          if ( v19 )
          {
            v21 = ((int (__thiscall *)(ArrowEff *))v19->baseclass_0.baseclass_0.vfptr[35].__vecDelDtor)(v19);
            if ( v21 )
            {
              *(_DWORD *)(v21 + 4) = uiDamage;
              *(_WORD *)(v21 + 8) = kTarget;
              *(_DWORD *)(v21 + 12) = kTargetRestHP;
              *(_DWORD *)(v21 + 16) = dwHpChangeSeqNo;
              *(_BYTE *)v21 = bViewDamage;
              result = 1;
            }
            else
            {
              ((void (__cdecl *)(unsigned int))v20->baseclass_0.baseclass_0.vfptr[32].__vecDelDtor)(uiDamage);
              result = 1;
            }
            return result;
          }
          v10 = 0;
        }
      }
      *(_DWORD *)&pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = v10;
      pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead = v10;
      pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail = v10;
      pkDmgDummyInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTList<DamageInfo__>::_vftable_;
      v34 = v10;
      DamageInfoSet::Clear(&pkDmgDummyInfoSet);
      DamageInfoSet::AddDamage(
        &pkDmgDummyInfoSet,
        uiDamage,
        kTarget,
        dwHpChangeSeqNo,
        kTargetRestHP,
        bViewDamage,
        DmgNum != (_WORD)v10,
        -1);
      v32 = v8->vfptr->GetChar(v8);
      DamageInfoSet::Applicate(&pkDmgDummyInfoSet, v32, (bool)v10);
      v34 = (NiTListItem<DamageInfo *> *)-1;
      DamageInfoSet::_DamageInfoSet(&pkDmgDummyInfoSet);
    }
    else
    {
      while ( 1 )
      {
        v16 = v15->m_element;
        v15 = v15->m_pkNext;
        if ( v16->m_SeqNum == SeqNum )
          break;
        if ( !v15 )
        {
          v10 = 0;
          goto LABEL_11;
        }
      }
      v25 = AttackSequenceManager::GetAttDmgInfoSetbySeqNum(v8, SeqNum);
      v16->bDamageRecved = 1;
      pkInfoSet = v25;
      if ( v8->vfptr->GetChar(v8) )
      {
        v26 = v8->vfptr->GetChar(v8);
        if ( Char::IsRangeAttChar(v26) )
        {
          v27 = (int)v8->vfptr->GetChar(v8);
          v28 = EffectMgr::GetArrowEffectInList(&g_kEffectMgr, v14, *(_WORD *)(v27 + 548));
          v29 = v28;
          if ( v28 )
          {
            v30 = (DamageInfo *)((int (__thiscall *)(ArrowEff *))v28->baseclass_0.baseclass_0.vfptr[35].__vecDelDtor)(v28);
            if ( !v30 )
            {
              ((void (__cdecl *)(unsigned int))v29->baseclass_0.baseclass_0.vfptr[32].__vecDelDtor)(uiDamage);
              return 1;
            }
          }
          else
          {
            v30 = DamageInfoSet::GetLastInvalidDmgInfo(&v16->kDamageInfoSet);
            if ( !v30 )
            {
              v31 = operator new(0x18u);
              *((_DWORD *)v31 + 1) = uiDamage;
              *((_WORD *)v31 + 4) = kTarget;
              *((_DWORD *)v31 + 3) = kTargetRestHP;
              *((_DWORD *)v31 + 4) = dwHpChangeSeqNo;
              *(_BYTE *)v31 = bViewDamage;
              DamageInfoSet::AddDamage(
                &v16->kDamageInfoSet,
                uiDamage,
                kTarget,
                dwHpChangeSeqNo,
                kTargetRestHP,
                bViewDamage,
                DmgNum != 0,
                -1);
              return 1;
            }
          }
          v30->uiDamage = uiDamage;
          v30->kTargetHandle = kTarget;
          v30->kTargetRestHP = kTargetRestHP;
          v30->dwHpChangeSeqNo = dwHpChangeSeqNo;
          v30->bViewDamage = bViewDamage;
          return 1;
        }
        DamageInfoSet::AddDamage(pkInfoSet, uiDamage, kTarget, dwHpChangeSeqNo, kTargetRestHP, bViewDamage, 1, DmgNum);
      }
    }
    return 0;
  }
  v12 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead;
  if ( !v12 )
  {
LABEL_5:
    v11 = v9 == 0;
    goto LABEL_6;
  }
  while ( 1 )
  {
    v13 = v12->m_element;
    v12 = v12->m_pkNext;
    if ( v13->m_SeqNum == -1 )
      break;
    if ( !v12 )
      goto LABEL_5;
  }
  v13->m_SeqNum = SeqNum;
  v13->bDamageRecved = 1;
  if ( v8->vfptr->GetChar(v8) )
  {
    v23 = v8->vfptr->GetChar(v8);
    if ( Char::IsRangeAttChar(v23) == 1 )
    {
      v24 = (int)v8->vfptr->GetChar(v8);
      EffectMgr::GetArrowEffectInList(&g_kEffectMgr, SeqNum, *(_WORD *)(v24 + 548));
    }
  }
  return 1;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);

//----- (00636C20) --------------------------------------------------------
void __thiscall AttackSequenceManager::StartHeadSeq(AttackSequenceManager *this)
{
  AttackSequenceManager *v1; // edi@1
  AttackSequence *v2; // ebx@2
  Char *v3; // eax@5
  Char *v4; // esi@5
  void *v5; // eax@10
  char v6; // dl@10
  char v7; // al@10
  NiControllerSequence *v8; // eax@14
  double v9; // st7@17
  NiKFMTool *pkKFM; // [sp+4h] [bp-10h]@11
  float pkKFMa; // [sp+4h] [bp-10h]@19
  float *pkTransition; // [sp+8h] [bp-Ch]@2
  int fNextAttTime; // [sp+Ch] [bp-8h]@4
  unsigned int fEndSeqTime; // [sp+10h] [bp-4h]@10

  v1 = this;
  if ( !*(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
    || (v2 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead->m_element, (pkTransition = (float *)v2) == 0)
    || v2->bStarted
    || (fNextAttTime = ((int (*)(void))this->vfptr->GetActor)(), *(float *)&fNextAttTime == 0.0)
    || (v3 = v1->vfptr->GetChar(v1), (v4 = v3) == 0) )
    return;
  Char::UpdateWeaponEquipState(v3);
  if ( !*(_DWORD *)&v2->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    if ( Char::IsRangeAttChar(v4) != 1 )
      goto LABEL_11;
    if ( !*(_DWORD *)&v2->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
    {
      NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v1->m_kAttSeqList,
        (NiLight *const *)&pkTransition);
      DamageInfoSet::_DamageInfoSet(&v2->kDamageInfoSet);
      operator delete(v2);
      return;
    }
  }
  v5 = CharMgr::GetChar(
         &g_kCharMgr,
         v2->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead->m_element->kTargetHandle);
  v6 = v2->byActionCode;
  fEndSeqTime = (unsigned int)v4->baseclass_0.vfptr;
  pkTransition = (float *)v5;
  v7 = Char::GetAttackActionCode(v4, v6);
  (*(void (__thiscall **)(Char *, float *, _DWORD))(fEndSeqTime + 292))(v4, pkTransition, (unsigned __int8)v7);
LABEL_11:
  pkKFM = *(NiKFMTool **)(fNextAttTime + 8);
  if ( pkKFM )
  {
    fEndSeqTime = Char::GetAniCode(v4, 0, 0, 0);
    pkTransition = 0;
    if ( fEndSeqTime == Char::GetAniCode(v4, 1, 0, 0) )
      pkTransition = (float *)NiKFMTool::GetTransition(
                                pkKFM,
                                *(_DWORD *)(fNextAttTime + 64),
                                *(_DWORD *)(fNextAttTime + 28));
    v8 = Char::GetSequence(v4, fEndSeqTime);
    if ( v8 )
    {
      *(float *)&fEndSeqTime = v8->m_fEndKeyTime;
      if ( pkTransition )
        *(float *)&fEndSeqTime = pkTransition[1] + *(float *)&fEndSeqTime;
      *(float *)&fNextAttTime = v2->fCoolTime - (Timer::ms_fCurTime - v2->fRecvTime);
      v9 = 0.1;
      if ( *(float *)&fNextAttTime < 0.0 )
        *(float *)&fNextAttTime = 0.1;
      pkKFMa = (*(float *)&fEndSeqTime + 0.0) / (*(float *)&fNextAttTime + 0.0);
      v1->m_fTargetFrequency = pkKFMa;
      if ( pkKFMa < 0.1000000014901161 || (v9 = 3.0, pkKFMa > 3.0) )
        v1->m_fTargetFrequency = v9;
      v1->m_fCurrFrequency = v1->m_fTargetFrequency;
      v2->bStarted = 1;
      v1->m_uiTargetAniCode = Char::GetAniCode(v4, 0, 0, 0);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00636E00) --------------------------------------------------------
void __thiscall AttackSequenceManager::ClearAttSeq(AttackSequenceManager *this)
{
  AttackSequenceManager *v1; // ebx@1
  NiTListItem<AttackSequence *> *v2; // edi@1
  NiTListItem<AttackSequence *> *v3; // eax@2
  NiTListItem<AttackSequence *> *v4; // ecx@2
  AttackSequence *v5; // esi@5
  int v6; // esi@6
  int v7; // edi@6
  int v8; // eax@6
  int v9; // ST08_4@7
  void (__thiscall *v10)(AttackSequenceManager *, float); // edx@12
  void *p; // [sp+20h] [bp-14h]@5
  AttackSequenceManager *v12; // [sp+24h] [bp-10h]@1

  v1 = this;
  v12 = this;
  v2 = 0;
  if ( *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v3 = v1->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead;
      v4 = v3->m_pkNext;
      v1->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
      if ( v4 == v2 )
        v1->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail = v2;
      else
        v4->m_pkPrev = v2;
      v5 = v3->m_element;
      p = v3->m_element;
      v1->m_kAttSeqList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *)&v1->m_kAttSeqList,
        v3);
      --*(_DWORD *)&v1->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      if ( (NiTListItem<AttackSequence *> *)v5 != v2 )
      {
        v6 = (int)&v5->kDamageInfoSet;
        DamageInfoSet::Clear((DamageInfoSet *)v6);
        *(_DWORD *)v6 = &NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
        v7 = *(_DWORD *)(v6 + 4);
        v8 = 0;
        if ( v7 )
        {
          do
          {
            v9 = v7;
            v7 = *(_DWORD *)v7;
            (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 8))(v6, v9);
          }
          while ( v7 );
          v8 = 0;
        }
        *(_DWORD *)(v6 + 12) = v8;
        *(_DWORD *)(v6 + 4) = v8;
        *(_DWORD *)(v6 + 8) = v8;
        *(_DWORD *)v6 = &NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
        operator delete(p);
        v2 = 0;
      }
    }
    while ( *(NiTListItem<AttackSequence *> **)&v12->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] != v2 );
    v1 = v12;
  }
  v10 = v1->vfptr->SetAnimationSpeed;
  v1->m_bInDuringAttackInServer = 0;
  ((void (__cdecl *)(_DWORD))v10)(1.0);
  v1->m_bAnimationStopWhenHitTime = 0;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (00636F00) --------------------------------------------------------
void __thiscall AttackSequenceManager::ClearSkillSeq(AttackSequenceManager *this)
{
  AttackSequenceManager *v1; // ebx@1
  NiTListItem<SkillSequence *> *v2; // edi@1
  NiTListItem<SkillSequence *> *v3; // eax@2
  NiTListItem<SkillSequence *> *v4; // ecx@2
  NiTListItem<SkillSequence *> *v5; // esi@5
  int v6; // esi@6
  int v7; // edi@6
  int v8; // eax@6
  int v9; // ST08_4@7
  void (__thiscall *v10)(AttackSequenceManager *, float); // edx@12
  void *p; // [sp+20h] [bp-14h]@5
  AttackSequenceManager *v12; // [sp+24h] [bp-10h]@1

  v1 = this;
  v12 = this;
  v2 = 0;
  if ( *(_DWORD *)&this->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v3 = v1->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
      v4 = v3->m_pkNext;
      v1->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
      if ( v4 == v2 )
        v1->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkTail = v2;
      else
        v4->m_pkPrev = v2;
      v5 = (NiTListItem<SkillSequence *> *)v3->m_element;
      p = v3->m_element;
      v1->m_kSkillSeqList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *)&v1->m_kSkillSeqList,
        v3);
      --*(_DWORD *)&v1->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      if ( v5 != v2 )
      {
        v6 = (int)&v5->m_pkPrev;
        DamageInfoSet::Clear((DamageInfoSet *)v6);
        *(_DWORD *)v6 = &NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
        v7 = *(_DWORD *)(v6 + 4);
        v8 = 0;
        if ( v7 )
        {
          do
          {
            v9 = v7;
            v7 = *(_DWORD *)v7;
            (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 8))(v6, v9);
          }
          while ( v7 );
          v8 = 0;
        }
        *(_DWORD *)(v6 + 12) = v8;
        *(_DWORD *)(v6 + 4) = v8;
        *(_DWORD *)(v6 + 8) = v8;
        *(_DWORD *)v6 = &NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
        operator delete(p);
        v2 = 0;
      }
    }
    while ( *(NiTListItem<SkillSequence *> **)&v12->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] != v2 );
    v1 = v12;
  }
  v10 = v1->vfptr->SetAnimationSpeed;
  v1->m_bInDuringAttackInServer = 0;
  ((void (__cdecl *)(_DWORD))v10)(1.0);
  v1->m_bAnimationStopWhenHitTime = 0;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (00637000) --------------------------------------------------------
bool __thiscall AttackSequenceManager::ApplicateSkillSeqImmediately(AttackSequenceManager *this, Char *pkCaster, bool bAllApplicate, bool bLastHitTime)
{
  AttackSequenceManager *v4; // edi@1
  bool v5; // zf@2
  SkillSequence *v6; // esi@3
  bool result; // al@4
  bool v8; // al@5
  SkillSequence *pkSeq; // [sp+4h] [bp-8h]@3
  bool b; // [sp+Bh] [bp-1h]@2

  v4 = this;
  if ( ((int (*)(void))this->vfptr->GetChar)() )
  {
    v5 = *(_DWORD *)&v4->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] == 0;
    b = 1;
    if ( !v5 )
    {
      v6 = v4->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead->m_element;
      pkSeq = v6;
      if ( !v6 )
        return 0;
      v8 = SkillSequence::ApplicateImmediately(v6, pkCaster, bAllApplicate);
      if ( bAllApplicate == 1 )
      {
        NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v4->m_kSkillSeqList,
          (NiLight *const *)&pkSeq);
        DamageInfoSet::_DamageInfoSet(&v6->kDamageInfoSet);
        operator delete(v6);
        return b;
      }
      if ( bLastHitTime == 1
        && (v8 != 1
         || *(_DWORD *)&v6->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]) )
        b = 0;
    }
    result = b;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006370A0) --------------------------------------------------------
void __thiscall AttackSequenceManager::ApplicateAttackSeqImmediately(AttackSequenceManager *this, bool bAllApplicate)
{
  AttackSequenceManager *v2; // edi@1
  int v3; // edx@1
  char *v4; // ebx@2
  int v5; // eax@4
  int v6; // ecx@4
  int v7; // esi@7
  int v8; // esi@9
  int v9; // edi@9
  int v10; // eax@9
  int v11; // ST04_4@10
  void *p; // [sp+4h] [bp-14h]@7
  AttackSequenceManager *v13; // [sp+8h] [bp-10h]@1

  v2 = this;
  v13 = this;
  v3 = 0;
  if ( *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v4 = (char *)&this->m_kAttSeqList;
    while ( 1 )
    {
      v5 = *((_DWORD *)v4 + 1);
      v6 = *(_DWORD *)v5;
      *((_DWORD *)v4 + 1) = *(_DWORD *)v5;
      if ( v6 == v3 )
        *((_DWORD *)v4 + 2) = v3;
      else
        *(_DWORD *)(v6 + 4) = v3;
      v7 = *(_DWORD *)(v5 + 8);
      p = *(void **)(v5 + 8);
      (*(void (__thiscall **)(char *, int))(*(_DWORD *)v4 + 8))(v4, v5);
      --*((_DWORD *)v4 + 3);
      ++v2->m_iCurrAttSeqCode;
      if ( *(_BYTE *)(v7 + 36) )
        v2->vfptr->ApplicateAttackSeq(v2, (AttackSequence *)v7, bAllApplicate);
      v8 = v7 + 16;
      DamageInfoSet::Clear((DamageInfoSet *)v8);
      *(_DWORD *)v8 = &NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
      v9 = *(_DWORD *)(v8 + 4);
      v10 = 0;
      if ( v9 )
      {
        do
        {
          v11 = v9;
          v9 = *(_DWORD *)v9;
          (*(void (__thiscall **)(int, int))(*(_DWORD *)v8 + 8))(v8, v11);
        }
        while ( v9 );
        v10 = 0;
      }
      *(_DWORD *)(v8 + 12) = v10;
      *(_DWORD *)(v8 + 4) = v10;
      *(_DWORD *)(v8 + 8) = v10;
      *(_DWORD *)v8 = &NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
      operator delete(p);
      if ( !*(_DWORD *)&v13->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
        break;
      v2 = v13;
      v3 = 0;
    }
  }
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);

//----- (006371B0) --------------------------------------------------------
bool __thiscall AttackSequenceManager::ApplicateLastSkillSeqImmediately(AttackSequenceManager *this, Char *pkCaster, bool bAllApplicate)
{
  AttackSequenceManager *v3; // edi@1
  bool result; // al@2
  SkillSequence *v5; // esi@3
  bool v6; // bl@3
  NiTListItem<SkillSequence *> *v7; // ecx@5
  NiTListItem<SkillSequence *> *v8; // eax@5

  v3 = this;
  if ( *(_DWORD *)&this->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v5 = this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkTail->m_element;
    v6 = SkillSequence::ApplicateImmediately(v5, pkCaster, bAllApplicate);
    if ( v5 )
    {
      DamageInfoSet::_DamageInfoSet(&v5->kDamageInfoSet);
      operator delete(v5);
    }
    v7 = v3->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkTail;
    v8 = v7->m_pkPrev;
    v3->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkTail = v8;
    if ( v8 )
      v8->m_pkNext = 0;
    else
      v3->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead = 0;
    v3->m_kSkillSeqList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *)&v3->m_kSkillSeqList,
      v7);
    --*(_DWORD *)&v3->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    result = v6;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00637230) --------------------------------------------------------
bool __thiscall AttackSequenceManager::DeleteMissAttSeq(AttackSequenceManager *this)
{
  NiTListItem<AttackSequence *> *v1; // eax@1
  AttackSequence *v2; // esi@2
  bool result; // al@5
  NiTListItem<AttackSequence *> *v4; // eax@6
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v5; // ecx@6
  int v6; // edx@7
  void *v7; // edi@7
  void *kPos; // [sp+4h] [bp-4h]@10

  v1 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->m_element;
      v1 = v1->m_pkNext;
      if ( v2 )
      {
        if ( !v2->bDamageRecved )
          break;
      }
      if ( !v1 )
        goto LABEL_5;
    }
    v4 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead;
    v5 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kAttSeqList;
    if ( v4 )
    {
      while ( 1 )
      {
        v6 = (int)&v4->m_element;
        v7 = v4;
        v4 = v4->m_pkNext;
        if ( v2 == *(AttackSequence **)v6 )
          break;
        if ( !v4 )
          goto LABEL_9;
      }
    }
    else
    {
LABEL_9:
      v7 = 0;
    }
    kPos = v7;
    if ( v7 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v5, &kPos);
    DamageInfoSet::_DamageInfoSet(&v2->kDamageInfoSet);
    operator delete(v2);
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006372B0) --------------------------------------------------------
void __thiscall AttackSequenceManager::DeleteSkillSequence(AttackSequenceManager *this, unsigned __int16 Index, unsigned __int16 kID)
{
  NiTListItem<SkillSequence *> *v3; // ebx@1
  SkillSequence *v4; // esi@2
  NiTListItem<SkillSequence *> *v5; // eax@4
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v6; // ecx@4
  int v7; // edx@5
  void *v8; // edi@5
  AttackSequenceManager *v9; // [sp+4h] [bp-8h]@1
  void *kPos; // [sp+8h] [bp-4h]@8

  v3 = this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
  v9 = this;
  while ( v3 )
  {
    v4 = v3->m_element;
    v3 = v3->m_pkNext;
    if ( v4->m_Index == Index && v4->kSkillID == kID )
    {
      this->m_bInDuringAttackInServer = 0;
      v5 = this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
      v6 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kSkillSeqList;
      if ( v5 )
      {
        while ( 1 )
        {
          v7 = (int)&v5->m_element;
          v8 = v5;
          v5 = v5->m_pkNext;
          if ( v4 == *(SkillSequence **)v7 )
            break;
          if ( !v5 )
            goto LABEL_7;
        }
      }
      else
      {
LABEL_7:
        v8 = 0;
      }
      kPos = v8;
      if ( v8 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v6, &kPos);
      DamageInfoSet::_DamageInfoSet(&v4->kDamageInfoSet);
      operator delete(v4);
      this = v9;
    }
  }
}

//----- (00637340) --------------------------------------------------------
void __thiscall AttackSequenceManager::Update(AttackSequenceManager *this, float fTime)
{
  AttackSequenceManager *v2; // esi@1
  bool v3; // zf@1
  int v4; // edi@2
  int v5; // eax@2
  Char *v6; // ebx@2
  unsigned __int16 v7; // ax@5
  AttackSequence *v8; // edi@5
  Char *v9; // eax@6
  unsigned int v10; // ebx@13
  NiControllerSequence *v11; // edi@13
  void *v12; // ecx@14
  unsigned int v13; // eax@25
  Char *v14; // eax@27
  bool v15; // al@27
  double v16; // st7@28
  void (__thiscall *v17)(AttackSequenceManager *, float); // edx@31
  AttackSequence *v18; // edi@31
  Char *v19; // eax@34
  float v20; // ST18_4@40
  double v21; // st7@40
  void *v22; // ebx@43
  Char *v23; // eax@44
  AttackSequence *v24; // edi@47
  Char *v25; // eax@48
  Char *(__thiscall *v26)(AttackSequenceManager *); // eax@53
  void *v27; // [sp+0h] [bp-18h]@45
  Char *fEndSeqTime; // [sp+10h] [bp-8h]@2
  float fEndSeqTimea; // [sp+10h] [bp-8h]@26
  void *pkAttSeq; // [sp+14h] [bp-4h]@5
  float fNextAttTime; // [sp+20h] [bp+8h]@37
  float fNextAttTimea; // [sp+20h] [bp+8h]@53

  v2 = this;
  v3 = *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] == 0;
  this->m_bAnimationStopWhenHitTime = 0;
  if ( !v3 )
  {
    v4 = ((int (*)(void))this->vfptr->GetActor)();
    v5 = (int)v2->vfptr->GetChar(v2);
    v6 = (Char *)v5;
    fEndSeqTime = (Char *)v5;
    if ( v4 )
    {
      if ( v5 && !(unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 500))(v5) )
      {
        v7 = v2->m_kLastTargetHandle;
        v8 = v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail->m_element;
        pkAttSeq = v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead->m_element;
        if ( v7 == -1 )
        {
          v8->bLastSequence = 1;
          v2->m_kLastTargetHandle = -1;
        }
        else
        {
          v9 = CharMgr::GetChar(&g_kCharMgr, v7);
          if ( v9 )
          {
            if ( v9->m_bWillDead )
            {
              v8->bLastSequence = 1;
              v2->m_kLastTargetHandle = -1;
            }
          }
          else
          {
            v8->bLastSequence = 1;
            v2->m_kLastTargetHandle = -1;
          }
        }
        if ( *(_DWORD *)&v2->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] <= 0 )
        {
          v8->bLastSequence = 1;
          v2->m_kLastTargetHandle = -1;
        }
        v2->vfptr->GetChar(v2);
        v10 = Char::GetAniCode(v6, 0, 0, 0);
        v11 = Char::GetSequence(fEndSeqTime, v10);
        if ( v11 )
        {
          v12 = pkAttSeq;
          if ( !*((_BYTE *)pkAttSeq + 12) )
          {
            AttackSequenceManager::StartHeadSeq(v2);
            v12 = pkAttSeq;
          }
          if ( !v2->m_bSequenceStarted )
          {
            if ( v11->m_fLastTime < (double)v2->m_fLastSequenceEndTime )
              v2->m_bSequenceStarted = 1;
            goto LABEL_19;
          }
          if ( v11->m_eState != 1 )
          {
LABEL_19:
            v2->m_fTargetFrequency = 1.0;
            v2->m_fCurrFrequency = 1.0;
LABEL_53:
            v26 = v2->vfptr->GetChar;
            fNextAttTimea = v2->m_fTargetFrequency - v2->m_fCurrFrequency;
            v2->m_fCurrFrequency = fNextAttTimea * 0.1000000014901161 + v2->m_fCurrFrequency;
            v26(v2);
            ((void (__thiscall *)(_DWORD, _DWORD))v2->vfptr->SetAnimationSpeed)(v2, v2->m_fCurrFrequency);
            return;
          }
          if ( v10 != v2->m_uiTargetAniCode )
          {
            if ( *((_BYTE *)v12 + 12) )
              *((_BYTE *)v12 + 12) = 0;
            AttackSequenceManager::StartHeadSeq(v2);
            goto LABEL_53;
          }
          v13 = *(_DWORD *)&v2->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
          if ( v13 != 1 )
          {
            if ( v13 <= 1 )
              goto LABEL_53;
            v2->vfptr->GetChar(v2);
            v22 = pkAttSeq;
            if ( *((_BYTE *)pkAttSeq + 36) || (v23 = v2->vfptr->GetChar(v2), Char::IsRangeAttChar(v23)) )
            {
              if ( !AttackSequenceManager::IsSeqFinished(v2, v11) )
              {
                v21 = 5.0;
LABEL_52:
                v2->m_fTargetFrequency = v21;
                goto LABEL_53;
              }
              v2->m_bSequenceStarted = 0;
              v2->m_fLastSequenceEndTime = v11->m_fLastTime;
              v24 = NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::RemoveHead(&v2->m_kAttSeqList.baseclass_0);
              if ( *(_DWORD *)&v24->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
              {
                v25 = v2->vfptr->GetChar(v2);
                DamageInfoSet::Applicate(&v24->kDamageInfoSet, v25, 1);
              }
              DamageInfoSet::_DamageInfoSet(&v24->kDamageInfoSet);
              v27 = v24;
            }
            else
            {
              OutputDebugStringA("µ¥¹ÌÁ");
              NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
                (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&v2->m_kAttSeqList,
                (NiLight *const *)&pkAttSeq);
              DamageInfoSet::_DamageInfoSet((DamageInfoSet *)v22 + 1);
              v27 = v22;
            }
            operator delete(v27);
            ++v2->m_iCurrAttSeqCode;
            AttackSequenceManager::StartHeadSeq(v2);
            return;
          }
          fEndSeqTimea = v11->m_fEndKeyTime - v11->m_fLastTime;
          if ( !*((_BYTE *)v12 + 36) )
          {
            v14 = v2->vfptr->GetChar(v2);
            v15 = Char::IsRangeAttChar(v14);
            v12 = pkAttSeq;
            if ( !v15 )
            {
              v16 = 0.0;
              v2->m_bAnimationStopWhenHitTime = 1;
LABEL_37:
              fNextAttTime = *((float *)v12 + 2) - (fTime - *((float *)v12 + 1));
              if ( fNextAttTime < 0.1000000014901161 )
                fNextAttTime = 0.1;
              if ( v16 <= fEndSeqTimea )
              {
                v21 = (fEndSeqTimea + 0.0) / (fNextAttTime + 0.0);
              }
              else
              {
                v20 = v16;
                v21 = (v20 + 0.0) / (fNextAttTime + 0.0);
              }
              goto LABEL_52;
            }
          }
          v16 = 0.0;
          if ( fEndSeqTimea >= 0.0 )
            goto LABEL_37;
          if ( !*((_BYTE *)v12 + 14) )
          {
            v16 = 0.0;
            ++v2->m_iCurrAttSeqCode;
            fEndSeqTimea = 0.0;
            goto LABEL_37;
          }
          v17 = v2->vfptr->SetAnimationSpeed;
          v2->m_fLastSequenceEndTime = 1000.0;
          v2->m_bSequenceStarted = 0;
          ((void (__thiscall *)(AttackSequenceManager *, _DWORD))v17)(v2, 1.0);
          v18 = NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::RemoveHead(&v2->m_kAttSeqList.baseclass_0);
          if ( *(_DWORD *)&v18->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
          {
            if ( *(_WORD *)((int)v2->vfptr->GetChar(v2) + 548) == g_pkMainChar->m_kHandle )
              OutputDebugStringA("last sequence -applicate\n");
            v19 = v2->vfptr->GetChar(v2);
            DamageInfoSet::Applicate(&v18->kDamageInfoSet, v19, 1);
          }
          DamageInfoSet::_DamageInfoSet(&v18->kDamageInfoSet);
          operator delete(v18);
        }
      }
    }
  }
}

//----- (006376C0) --------------------------------------------------------
void __thiscall AttackSequenceManager::AddAttSeq(AttackSequenceManager *this, AttackSequence *pkSeq)
{
  AttackSequenceManager *v2; // esi@1
  Char *v3; // edi@1
  Char *(__thiscall *v4)(AttackSequenceManager *); // eax@10
  int v5; // eax@10
  DamageInfo *v6; // eax@13
  unsigned int v7; // eax@16
  int v8; // eax@21
  NiTListItem<AttackSequence *> *v9; // ecx@21
  int uiFirstCode; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = (Char *)((int (*)(void))this->vfptr->GetChar)();
  if ( v3
    && (Char::GetAniCode(v3, 0, (unsigned int *)&uiFirstCode, 0), uiFirstCode != 300000)
    && uiFirstCode != 100000
    && uiFirstCode != 600000
    && uiFirstCode != 700000
    && uiFirstCode != 400000
    && uiFirstCode != 200000 )
  {
    DamageInfoSet::Applicate(&pkSeq->kDamageInfoSet, v3, 1);
    if ( pkSeq )
    {
      DamageInfoSet::_DamageInfoSet(&pkSeq->kDamageInfoSet);
      operator delete(pkSeq);
    }
  }
  else
  {
    v4 = v2->vfptr->GetChar;
    v2->m_bInDuringAttackInServer = 1;
    v5 = (int)v4(v2);
    if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 32))(v5) )
      pkSeq->bLastSequence = 1;
    if ( *(_DWORD *)&pkSeq->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
    {
      v6 = pkSeq->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead->m_element;
      v2->m_kLastTargetHandle = v6->kTargetHandle;
      if ( v6->uiDamage & 0x80000000 )
      {
        pkSeq->bLastSequence = 1;
        if ( v2->vfptr->GetChar(v2) == g_pkMainChar )
          v2->vfptr->GetChar(v2);
      }
    }
    v7 = *(_DWORD *)&v2->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    if ( v7 )
    {
      if ( v7 > 4 && !AttackSequenceManager::DeleteMissAttSeq(v2) )
      {
        DamageInfoSet::_DamageInfoSet(&pkSeq->kDamageInfoSet);
        operator delete(pkSeq);
        return;
      }
    }
    else
    {
      v2->m_fLastSequenceEndTime = 1000.0;
    }
    v8 = (int)v2->m_kAttSeqList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *)&v2->m_kAttSeqList);
    *(_DWORD *)(v8 + 8) = pkSeq;
    *(_DWORD *)v8 = 0;
    *(_DWORD *)(v8 + 4) = v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail;
    v9 = v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail;
    if ( v9 )
      v9->m_pkNext = (NiTListItem<AttackSequence *> *)v8;
    else
      v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<AttackSequence *> *)v8;
    v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<AttackSequence *> *)v8;
    ++*(_DWORD *)&v2->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    pkSeq->iAttSeqCode = v2->m_iLastAttSeqCode++;
  }
}

//----- (00637820) --------------------------------------------------------
void __thiscall AttackSequenceManager::SetDamageToLastAttSeq(AttackSequenceManager *this, DamageInfoSet *rkSet)
{
  AttackSequenceManager *v2; // esi@1
  AttackSequence *v3; // esi@2
  void *v4; // eax@4
  void *v5; // edi@5
  int v6; // eax@7
  NiTListItem<AttackSequence *> *v7; // ecx@7

  v2 = this;
  if ( *(_DWORD *)&this->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v3 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail->m_element;
    if ( v3 )
    {
      DamageInfoSet::Clear(&v3->kDamageInfoSet);
      DamageInfoSet::CopyFrom(&v3->kDamageInfoSet, rkSet);
      v3->bDamageRecved = 1;
    }
  }
  else
  {
    v4 = operator new(0x28u);
    if ( v4 )
    {
      *((_DWORD *)v4 + 7) = 0;
      *((_DWORD *)v4 + 5) = 0;
      *((_DWORD *)v4 + 6) = 0;
      *((_DWORD *)v4 + 4) = &NiTList<DamageInfo__>::_vftable_;
      *((_WORD *)v4 + 6) = 0;
      *((_BYTE *)v4 + 14) = 0;
      *((_DWORD *)v4 + 8) = -1;
      *((_BYTE *)v4 + 36) = 0;
      *((_WORD *)v4 + 19) = -1;
      v5 = v4;
    }
    else
    {
      v5 = 0;
    }
    *((_BYTE *)v5 + 36) = 1;
    DamageInfoSet::CopyFrom((DamageInfoSet *)v5 + 1, rkSet);
    v6 = (int)v2->m_kAttSeqList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *)&v2->m_kAttSeqList);
    *(_DWORD *)(v6 + 8) = v5;
    *(_DWORD *)v6 = 0;
    *(_DWORD *)(v6 + 4) = v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail;
    v7 = v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail;
    if ( v7 )
      v7->m_pkNext = (NiTListItem<AttackSequence *> *)v6;
    else
      v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<AttackSequence *> *)v6;
    ++*(_DWORD *)&v2->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v2->m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<AttackSequence *> *)v6;
    AttackSequenceManager::ApplicateAttackSeqImmediately(v2, 1);
  }
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);

//----- (006378F0) --------------------------------------------------------
void __thiscall AttackSequenceManager::_AttackSequenceManager(AttackSequenceManager *this)
{
  NiTListItem<AttackSequence *> *v1; // eax@2
  char *v2; // esi@2
  NiTListItem<AttackSequence *> *v3; // ecx@2
  AttackSequence *v4; // edi@5
  int v5; // esi@6
  NiTListItem<DamageInfo *> *v6; // edi@6
  NiTListItem<DamageInfo *> *v7; // ST00_4@7
  NiTListItem<SkillSequence *> *v8; // eax@11
  char *v9; // esi@11
  NiTListItem<SkillSequence *> *v10; // ecx@11
  SkillSequence *v11; // edi@14
  int v12; // esi@15
  NiTListItem<DamageInfo *> *v13; // edi@15
  NiTListItem<DamageInfo *> *v14; // ST00_4@16
  char *v15; // esi@19
  NiTListItem<SkillSequence *> *v16; // edi@19
  NiTListItem<SkillSequence *> *v17; // ST00_4@20
  char *v18; // edi@22
  NiTListItem<AttackSequence *> *v19; // esi@22
  NiTListItem<AttackSequence *> *v20; // ST00_4@23
  void *p; // [sp+4h] [bp-14h]@5
  void *pa; // [sp+4h] [bp-14h]@14
  AttackSequenceManager *v23; // [sp+8h] [bp-10h]@1

  v23 = this;
  for ( this->vfptr = (AttackSequenceManagerVtbl *)AttackSequenceManager::_vftable_;
        *(_DWORD *)&v23->m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        this = v23 )
  {
    v1 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead;
    v2 = (char *)&this->m_kAttSeqList;
    v3 = v1->m_pkNext;
    *((_DWORD *)v2 + 1) = v1->m_pkNext;
    if ( v3 )
      v3->m_pkPrev = 0;
    else
      *((_DWORD *)v2 + 2) = 0;
    v4 = v1->m_element;
    p = v1->m_element;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v1);
    --*((_DWORD *)v2 + 3);
    if ( v4 )
    {
      v5 = (int)&v4->kDamageInfoSet;
      DamageInfoSet::Clear(&v4->kDamageInfoSet);
      v4->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
      v6 = v4->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead;
      while ( v6 )
      {
        v7 = v6;
        v6 = v6->m_pkNext;
        (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v5 + 8))(v5, v7);
      }
      *(_DWORD *)(v5 + 12) = 0;
      *(_DWORD *)(v5 + 4) = 0;
      *(_DWORD *)(v5 + 8) = 0;
      *(_DWORD *)v5 = &NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
      operator delete(p);
    }
  }
  if ( *(_DWORD *)&this->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v8 = this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
      v9 = (char *)&this->m_kSkillSeqList;
      v10 = v8->m_pkNext;
      *((_DWORD *)v9 + 1) = v8->m_pkNext;
      if ( v10 )
        v10->m_pkPrev = 0;
      else
        *((_DWORD *)v9 + 2) = 0;
      v11 = v8->m_element;
      pa = v8->m_element;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v9 + 8))(v9, v8);
      --*((_DWORD *)v9 + 3);
      if ( v11 )
      {
        v12 = (int)&v11->kDamageInfoSet;
        DamageInfoSet::Clear(&v11->kDamageInfoSet);
        v11->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTPointerListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
        v13 = v11->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead;
        while ( v13 )
        {
          v14 = v13;
          v13 = v13->m_pkNext;
          (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v12 + 8))(v12, v14);
        }
        *(_DWORD *)(v12 + 12) = 0;
        *(_DWORD *)(v12 + 4) = 0;
        *(_DWORD *)(v12 + 8) = 0;
        *(_DWORD *)v12 = &NiTListBase<DFALL<DamageInfo__>_DamageInfo__>::_vftable_;
        operator delete(pa);
      }
      this = v23;
    }
    while ( *(_DWORD *)&v23->m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] );
  }
  v15 = (char *)&this->m_kSkillSeqList;
  this->m_kSkillSeqList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SkillSequence *>,SkillSequence *>Vtbl *)&NiTPointerListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
  v16 = this->m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
  if ( v16 )
  {
    do
    {
      v17 = v16;
      v16 = v16->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v15 + 8))(v15, v17);
    }
    while ( v16 );
    this = v23;
  }
  v18 = (char *)&this->m_kAttSeqList;
  *((_DWORD *)v15 + 3) = 0;
  *((_DWORD *)v15 + 1) = 0;
  *((_DWORD *)v15 + 2) = 0;
  *(_DWORD *)v15 = &NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
  this->m_kAttSeqList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttackSequence *>,AttackSequence *>Vtbl *)&NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
  v19 = this->m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead;
  while ( v19 )
  {
    v20 = v19;
    v19 = v19->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v18 + 8))(v18, v20);
  }
  *((_DWORD *)v18 + 3) = 0;
  *((_DWORD *)v18 + 1) = 0;
  *((_DWORD *)v18 + 2) = 0;
  *(_DWORD *)v18 = &NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
}
// 97CDCC: using guessed type int (__thiscall *NiTListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 97CDFC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_DamageInfo ___DamageInfo _____vftable_)(void *p, char);
// 9C2C38: using guessed type int (__thiscall *NiTListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);
// 9C2C48: using guessed type int (__thiscall *NiTListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);
// 9C2C64: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);
// 9C2C74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);
// 9C2CA8: using guessed type int (*AttackSequenceManager___vftable_[6])();

//----- (00637AF0) --------------------------------------------------------
void __thiscall AttackSequenceManager::HardStopAttack(AttackSequenceManager *this)
{
  AttackSequenceManager *v1; // esi@1
  Char *v2; // eax@3
  ActiveSkillInfo *v3; // eax@3
  Char *v4; // eax@6
  Char *v5; // eax@8
  NiControllerSequence *v6; // edi@8
  Char *v7; // eax@8
  char v8; // [sp+0h] [bp-10h]@4

  v1 = this;
  if ( ((int (*)(void))this->vfptr->GetChar)() )
  {
    v1->vfptr->GetChar(v1);
    AttackSequenceManager::ApplicateAttackSeqImmediately(v1, 1);
    if ( v1->vfptr->GetChar(v1) )
    {
      v2 = v1->vfptr->GetChar(v1);
      v3 = Char::GetCurPlayActiiveSkillInfo(v2);
      if ( v3 )
        v8 = v3->HitID == 0;
      else
        v8 = 1;
      v4 = v1->vfptr->GetChar(v1);
      AttackSequenceManager::ApplicateSkillSeqImmediately(v1, v4, v8, 0);
    }
    if ( v1->vfptr->GetChar(v1) )
    {
      v5 = v1->vfptr->GetChar(v1);
      v6 = Char::GetNowSequence(v5);
      v7 = v1->vfptr->GetChar(v1);
      if ( Char::IsAbStateAction(v7) != 1 || !v6 || !v6->m_eCycleType )
        ((void (__thiscall *)(_DWORD, _DWORD))v1->vfptr->SetAnimationSpeed)(v1, 1.0);
    }
    v1->m_bAnimationStopWhenHitTime = 0;
  }
}

//----- (00637BC0) --------------------------------------------------------
void *__thiscall NiTList<AttackSequence__>::_vector_deleting_destructor_(NiTList<AttackSequence *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<AttackSequence *> *v3; // esi@1
  NiTListItem<AttackSequence *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttackSequence *>,AttackSequence *>Vtbl *)&NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2C38: using guessed type int (__thiscall *NiTListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);
// 9C2C64: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);

//----- (00637C50) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<SkillSequence__>_SkillSequence__>::_vector_deleting_destructor_(NiTList<SkillSequence *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<SkillSequence *> *v3; // esi@1
  NiTListItem<SkillSequence *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SkillSequence *>,SkillSequence *>Vtbl *)&NiTPointerListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2C48: using guessed type int (__thiscall *NiTListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);
// 9C2C74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);

//----- (00637CE0) --------------------------------------------------------
char *__cdecl DmgSndTab::Get(unsigned int uiWType, unsigned int uiAType)
{
  void *v2; // eax@5
  char *v3; // esi@6
  char *result; // eax@6

  if ( uiWType < 0x16
    && uiAType < 0xC
    && uiWType
    && uiAType
    && (v2 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<DmgSndMapByArmorType_DmgSndTab>::ms_pkTable + 4),
               uiWType - 1)) != 0 )
  {
    v3 = (char *)v2 + 32 * (uiAType - 1);
    result = (char *)strcmp((const char *)v2 + 32 * (uiAType - 1), "-");
    if ( result )
      result = v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97E24: using guessed type int ITableBase_DmgSndMapByArmorType_DmgSndTab___ms_pkTable;

//----- (00637D60) --------------------------------------------------------
void __thiscall NiTList<AttackSequence__>::_NiTList<AttackSequence__>(NiTList<AttackSequence *> *this)
{
  NiTList<AttackSequence *> *v1; // edi@1
  NiTListItem<AttackSequence *> *v2; // esi@1
  NiTListItem<AttackSequence *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttackSequence *>,AttackSequence *>Vtbl *)&NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<AttackSequence *>,AttackSequence *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttackSequence *>,AttackSequence *>Vtbl *)&NiTListBase<DFALL<AttackSequence__>_AttackSequence__>::_vftable_;
}
// 9C2C38: using guessed type int (__thiscall *NiTListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);
// 9C2C64: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AttackSequence ___AttackSequence _____vftable_)(void *p, char);

//----- (00637DE0) --------------------------------------------------------
void __thiscall NiTList<SkillSequence__>::_NiTList<SkillSequence__>(NiTList<SkillSequence *> *this)
{
  NiTList<SkillSequence *> *v1; // edi@1
  NiTListItem<SkillSequence *> *v2; // esi@1
  NiTListItem<SkillSequence *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SkillSequence *>,SkillSequence *>Vtbl *)&NiTPointerListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SkillSequence *>,SkillSequence *>Vtbl *)&NiTListBase<DFALL<SkillSequence__>_SkillSequence__>::_vftable_;
}
// 9C2C48: using guessed type int (__thiscall *NiTListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);
// 9C2C74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SkillSequence ___SkillSequence _____vftable_)(void *p, char);

//----- (00637E60) --------------------------------------------------------
NiKFMTool::Transition *__thiscall NiKFMTool::GetTransition(NiKFMTool *this, unsigned int uiSrcID, unsigned int uiDesID)
{
  NiKFMTool::Transition *result; // eax@3
  bool v4; // al@4

  if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_mapSequences,
         uiSrcID,
         (NiVBSet **)&uiSrcID)
    && uiSrcID )
  {
    v4 = NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
           (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)(uiSrcID + 12),
           uiDesID,
           (NiVBSet **)&uiSrcID);
    result = (NiKFMTool::Transition *)(v4 != 0 ? uiSrcID : 0);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00637EB0) --------------------------------------------------------
void __thiscall DamageInfoSet::CopyFrom(DamageInfoSet *this, DamageInfoSet *rkSet)
{
  DamageInfoSet *v2; // ebx@1
  NiTListItem<DamageInfo *> *v3; // ecx@1
  DamageInfo *v4; // edi@4
  void *v5; // eax@4
  void *v6; // esi@4
  int v7; // eax@4
  NiTListItem<DamageInfo *> *v8; // ecx@4
  NiTListItem<DamageInfo *> *kIter; // [sp+Ch] [bp+8h]@4

  v2 = this;
  v3 = rkSet->kDamageList.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      kIter = v3->m_pkNext;
      v5 = operator new(0x18u);
      v6 = v5;
      *(_DWORD *)v5 = *(_DWORD *)&v4->bViewDamage;
      *((_DWORD *)v5 + 1) = v4->uiDamage;
      *((_DWORD *)v5 + 2) = *(_DWORD *)&v4->kTargetHandle;
      *((_DWORD *)v5 + 3) = v4->kTargetRestHP;
      *((_DWORD *)v5 + 4) = v4->dwHpChangeSeqNo;
      *((_DWORD *)v5 + 5) = *(_DWORD *)&v4->SeqNum;
      v7 = (int)v2->kDamageList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<DamageInfo *>,DamageInfo *> *)v2);
      *(_DWORD *)(v7 + 8) = v6;
      *(_DWORD *)v7 = 0;
      *(_DWORD *)(v7 + 4) = v2->kDamageList.baseclass_0.baseclass_0.m_pkTail;
      v8 = v2->kDamageList.baseclass_0.baseclass_0.m_pkTail;
      if ( v8 )
        v8->m_pkNext = (NiTListItem<DamageInfo *> *)v7;
      else
        v2->kDamageList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<DamageInfo *> *)v7;
      ++*(_DWORD *)&v2->kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v2->kDamageList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<DamageInfo *> *)v7;
      if ( !kIter )
        break;
      v3 = kIter;
    }
  }
}

//----- (00637F40) --------------------------------------------------------
void *__thiscall AttackSequenceManager::_scalar_deleting_destructor_(AttackSequenceManager *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AttackSequenceManager::_AttackSequenceManager(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00637F80) --------------------------------------------------------
void __thiscall Avatar::_Avatar(Avatar *this)
{
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Avatar::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Avatar::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Avatar::_vftable_;
  Char::_Char(&this->baseclass_0);
}
// 9C2CC8: using guessed type int (*Avatar___vftable_[2])();
// 9C2CE8: using guessed type int (__stdcall *Avatar___vftable_)(int);
// 9C2CF4: using guessed type int (__thiscall *Avatar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00637FA0) --------------------------------------------------------
void __thiscall Avatar::AddCartoonLine(Avatar *this, NiNode *pkNode)
{
  CarToonShader *v2; // eax@3
  CarToonShader *v3; // eax@4

  if ( !Char::ms_bEnableCarToon || (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[16].Deaffect)() )
  {
    v3 = CarToonShader::GetInstance();
    CarToonShader::SetExceptOutLineCartoonShader(v3, pkNode);
  }
  else
  {
    v2 = CarToonShader::GetInstance();
    CarToonShader::SetCartoonShader(v2, pkNode);
  }
}
// A7F85E: using guessed type char Char__ms_bEnableCarToon;

//----- (00637FF0) --------------------------------------------------------
void __thiscall Avatar::Avatar(Avatar *this)
{
  Avatar *v1; // esi@1
  NiNode *v2; // eax@1

  v1 = this;
  Char::Char(&this->baseclass_0);
  v2 = v1->baseclass_0.m_spScene.m_pObject;
  v1->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Avatar::_vftable_;
  v1->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Avatar::_vftable_;
  v1->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Avatar::_vftable_;
  v2->baseclass_0.m_uFlags &= 0xFFFEu;
}
// 9C2CC8: using guessed type int (*Avatar___vftable_[2])();
// 9C2CE8: using guessed type int (__stdcall *Avatar___vftable_)(int);
// 9C2CF4: using guessed type int (__thiscall *Avatar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00638020) --------------------------------------------------------
void __thiscall Avatar::Update(Avatar *this, float fTime)
{
  Avatar *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.vfptr[18].IsVisible)(LODWORD(fTime));
  if ( v2->baseclass_0.m_spActor.m_pObject )
  {
    if ( v2->baseclass_0.m_spScene.m_pObject )
    {
      Char::UpdateEyeBlinking(&v2->baseclass_0);
      NiActorManager::Update(v2->baseclass_0.m_spActor.m_pObject, fTime);
      NiAVObject::Update(&v2->baseclass_0.m_spScene.m_pObject->baseclass_0, fTime, 1);
      ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.baseclass_0.vfptr[18].Deaffect)(v2, LODWORD(fTime));
    }
  }
}

//----- (00638090) --------------------------------------------------------
void __thiscall Avatar::EquipAll(Avatar *this)
{
  Avatar *v1; // esi@1
  LODNodeInActivate lod; // [sp+0h] [bp-18h]@1
  int v3; // [sp+14h] [bp-4h]@1

  v1 = this;
  CharShape::EquipAllAvatar(&this->baseclass_0.m_kCharShape);
  lod.baseclass_0.m_pCallBack = 0;
  lod.baseclass_0.m_nCurLevel = -1;
  lod.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&LODNodeInActivate::_vftable_;
  v3 = 0;
  Ns_TourScene::TourScene(&lod.baseclass_0, v1->baseclass_0.m_spScene.m_pObject, &NiAVObject::m_RTTI, 0);
}
// 9C2FB8: using guessed type int (__stdcall *LODNodeInActivate___vftable_)(float fNear, int _pData);

//----- (00638100) --------------------------------------------------------
void __thiscall Avatar::UpdateLod(Avatar *this, float fTime)
{
  NiActorManager *v2; // eax@1
  NiBoneLODController *v3; // eax@2

  v2 = this->baseclass_0.m_spActor.m_pObject;
  if ( v2 )
  {
    v3 = v2->m_spBoneLOD.m_pObject;
    if ( v3 )
      NiBoneLODController::SetBoneLOD(v3, 0);
  }
}

//----- (00638120) --------------------------------------------------------
bool __thiscall Avatar::ResetView(Avatar *this, PROTO_AVATAR_SHAPE_INFO *p, unsigned int uiFrame)
{
  Avatar *v3; // esi@1
  bool v4; // bl@1
  NiNode *v5; // eax@1
  LODNodeInActivate lod; // [sp+0h] [bp-18h]@1
  int v8; // [sp+14h] [bp-4h]@1

  v3 = this;
  CharShape::SetShapeInfo(&this->baseclass_0.m_kCharShape, p);
  v4 = ((int (__thiscall *)(Avatar *, _DWORD, unsigned int))v3->baseclass_0.baseclass_0.vfptr[18].GetAbstateColor)(
         v3,
         0,
         uiFrame);
  lod.baseclass_0.m_pCallBack = 0;
  lod.baseclass_0.m_nCurLevel = -1;
  lod.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&LODNodeInActivate::_vftable_;
  v5 = v3->baseclass_0.m_spScene.m_pObject;
  v8 = 0;
  Ns_TourScene::TourScene(&lod.baseclass_0, v5, &NiAVObject::m_RTTI, 0);
  return v4;
}
// 9C2FB8: using guessed type int (__stdcall *LODNodeInActivate___vftable_)(float fNear, int _pData);

//----- (006381C0) --------------------------------------------------------
bool __thiscall Avatar::ChangeClassShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo, unsigned int uiFrame)
{
  bool result; // al@2

  if ( pkInfo )
    result = Avatar::ResetView(this, pkInfo, uiFrame);
  else
    result = 0;
  return result;
}

//----- (006381E0) --------------------------------------------------------
bool __thiscall Avatar::ChangeGenderShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo, unsigned int uiFrame)
{
  bool result; // al@2

  if ( pkInfo )
    result = Avatar::ResetView(this, pkInfo, uiFrame);
  else
    result = 0;
  return result;
}

//----- (00638200) --------------------------------------------------------
bool __thiscall Avatar::ChangeFaceTextureShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo)
{
  Avatar *v2; // esi@1
  PROTO_AVATAR_SHAPE_INFO *v3; // edx@1
  bool result; // al@2
  unsigned __int8 v5; // cl@3
  NiNode *v6; // ST08_4@15
  LODNodeInActivate lod; // [sp+0h] [bp-1Ch]@15
  char byFTIndex; // [sp+Fh] [bp-Dh]@11
  int v9; // [sp+18h] [bp-4h]@15

  v2 = this;
  v3 = pkInfo;
  if ( pkInfo )
  {
    v5 = pkInfo->_bf0;
    switch ( ((unsigned int)pkInfo->_bf0 >> 2) & 0x1F )
    {
      case 1u:
      case 2u:
      case 3u:
      case 4u:
      case 5u:
        LOBYTE(pkInfo) = 1;
        break;
      case 6u:
      case 7u:
      case 8u:
      case 9u:
      case 0xAu:
        LOBYTE(pkInfo) = 6;
        break;
      case 0xBu:
      case 0xCu:
      case 0xDu:
      case 0xEu:
      case 0xFu:
        LOBYTE(pkInfo) = 11;
        break;
      case 0x10u:
      case 0x11u:
      case 0x12u:
      case 0x13u:
      case 0x14u:
        LOBYTE(pkInfo) = 16;
        break;
      case 0x15u:
      case 0x16u:
      case 0x17u:
      case 0x18u:
      case 0x19u:
        LOBYTE(pkInfo) = 21;
        break;
      case 0x1Au:
      case 0x1Bu:
        LOBYTE(pkInfo) = 26;
        break;
      default:
        LOBYTE(pkInfo) = 0;
        break;
    }
    FaceInfoTab::GetIndex(v3->faceshape, (char)pkInfo, v5 >> 7, (char *)&pkInfo + 3, &byFTIndex);
    if ( BYTE3(pkInfo) != -1 )
      v2->baseclass_0.m_kCharShape.m_byFaceShapeType = BYTE3(pkInfo);
    if ( byFTIndex != -1 )
      v2->baseclass_0.m_kCharShape.m_byFace = byFTIndex;
    CharShape::UpdateFaceShape(&v2->baseclass_0.m_kCharShape);
    lod.baseclass_0.m_pCallBack = 0;
    lod.baseclass_0.m_nCurLevel = -1;
    lod.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&LODNodeInActivate::_vftable_;
    v6 = v2->baseclass_0.m_spScene.m_pObject;
    v9 = 0;
    Ns_TourScene::TourScene(&lod.baseclass_0, v6, &NiAVObject::m_RTTI, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9C2FB8: using guessed type int (__stdcall *LODNodeInActivate___vftable_)(float fNear, int _pData);

//----- (00638390) --------------------------------------------------------
bool __thiscall Avatar::ChangeHairTypeShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo)
{
  PROTO_AVATAR_SHAPE_INFO *v2; // edi@1
  int v3; // eax@2
  unsigned int v4; // ebx@3
  unsigned int v5; // esi@5
  bool result; // al@8
  NiNode *v7; // ST00_4@10
  LODNodeInActivate lod; // [sp+0h] [bp-1Ch]@10
  Avatar *v9; // [sp+Ch] [bp-10h]@1
  int v10; // [sp+18h] [bp-4h]@10
  char pkInfoa; // [sp+24h] [bp+8h]@2

  v9 = this;
  v2 = pkInfo;
  if ( !pkInfo
    || ((pkInfoa = pkInfo->hairtype, (v3 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56)) == 0) ? (v4 = 0) : (v4 = *(_DWORD *)(v3 + 40)),
        v5 = 0,
        !v4) )
    goto LABEL_8;
  while ( *(_BYTE *)CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v5) != pkInfoa )
  {
    ++v5;
    if ( v5 >= v4 )
      goto LABEL_8;
  }
  if ( CDataReader::GetRecord(
         (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
         v2->haircolor) )
  {
    CharShape::MakeHairSet(&v9->baseclass_0.m_kCharShape, v2->hairtype);
    CharShape::SetHairDetailMap(&v9->baseclass_0.m_kCharShape, v2->haircolor);
    lod.baseclass_0.m_pCallBack = 0;
    lod.baseclass_0.m_nCurLevel = -1;
    lod.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&LODNodeInActivate::_vftable_;
    v7 = v9->baseclass_0.m_spScene.m_pObject;
    v10 = 0;
    Ns_TourScene::TourScene(&lod.baseclass_0, v7, &NiAVObject::m_RTTI, 0);
    result = 1;
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// 9C2FB8: using guessed type int (__stdcall *LODNodeInActivate___vftable_)(float fNear, int _pData);
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (00638490) --------------------------------------------------------
bool __thiscall Avatar::ChangeHairColorShape(Avatar *this, PROTO_AVATAR_SHAPE_INFO *pkInfo)
{
  Avatar *v2; // edi@1
  bool result; // al@2

  v2 = this;
  if ( pkInfo
    && CDataReader::GetRecord(
         (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
         pkInfo->haircolor) )
  {
    CharShape::SetHairDetailMap(&v2->baseclass_0.m_kCharShape, pkInfo->haircolor);
    v2->baseclass_0.m_kCharShape.m_byHairColor = pkInfo->haircolor;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (006384E0) --------------------------------------------------------
void *__thiscall Avatar::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Avatar::_scalar_deleting_destructor_((Avatar *)((char *)this - 84), a2);
}

//----- (006384F0) --------------------------------------------------------
void *__thiscall Avatar::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Avatar::_scalar_deleting_destructor_((Avatar *)((char *)this - 60), a2);
}

//----- (00638500) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall Ns_TourScene::ProcessData(Ns_TourScene *this, NiAVObject *_pkObject, void *_pData)
{
  Ns_TourScene::TS_RESULT (__cdecl *v3)(NiAVObject *, void *); // eax@1
  Ns_TourScene::TS_RESULT result; // eax@2

  v3 = this->m_pCallBack;
  if ( v3 )
  {
    result = (int)v3(_pkObject, _pData);
  }
  else
  {
    OutputDebugStringA("Is not CallBack Function");
    result = 0;
  }
  return result;
}

//----- (00638530) --------------------------------------------------------
void *__thiscall Avatar::_scalar_deleting_destructor_(Avatar *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Avatar::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Avatar::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Avatar::_vftable_;
  Char::_Char(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2CC8: using guessed type int (*Avatar___vftable_[2])();
// 9C2CE8: using guessed type int (__stdcall *Avatar___vftable_)(int);
// 9C2CF4: using guessed type int (__thiscall *Avatar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00638570) --------------------------------------------------------
void __cdecl FaceInfoTab::GetIndex(unsigned int uiIndex, char kBaseClassID, char ucGender, char *byResultFaceModelInx, char *byResultFaceTexInx)
{
  void *v5; // eax@1

  *byResultFaceModelInx = -1;
  *byResultFaceTexInx = -1;
  v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4), uiIndex);
  if ( v5 )
  {
    switch ( kBaseClassID )
    {
      case 1:
        if ( ucGender )
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 34);
          *byResultFaceTexInx = *((_BYTE *)v5 + 35);
        }
        else
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 36);
          *byResultFaceTexInx = *((_BYTE *)v5 + 37);
        }
        break;
      case 6:
        if ( ucGender )
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 38);
          *byResultFaceTexInx = *((_BYTE *)v5 + 39);
        }
        else
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 40);
          *byResultFaceTexInx = *((_BYTE *)v5 + 41);
        }
        break;
      case 0xB:
        if ( ucGender )
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 42);
          *byResultFaceTexInx = *((_BYTE *)v5 + 43);
        }
        else
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 44);
          *byResultFaceTexInx = *((_BYTE *)v5 + 45);
        }
        break;
      case 0x10:
        if ( ucGender )
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 46);
          *byResultFaceTexInx = *((_BYTE *)v5 + 47);
        }
        else
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 48);
          *byResultFaceTexInx = *((_BYTE *)v5 + 49);
        }
        break;
      case 0x15:
        if ( ucGender )
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 50);
          *byResultFaceTexInx = *((_BYTE *)v5 + 51);
        }
        else
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 52);
          *byResultFaceTexInx = *((_BYTE *)v5 + 53);
        }
        break;
      case 0x1A:
        if ( ucGender )
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 54);
          *byResultFaceTexInx = *((_BYTE *)v5 + 55);
        }
        else
        {
          *byResultFaceModelInx = *((_BYTE *)v5 + 56);
          *byResultFaceTexInx = *((_BYTE *)v5 + 57);
        }
        break;
      default:
        return;
    }
  }
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;

//----- (006386C0) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall LODNodeInActivate::ProcessData(LODNodeInActivate *this, NiAVObject *_pkObject, void *_pData)
{
  Ns_TourScene::TS_RESULT result; // eax@2
  int v4; // eax@3
  NiShader *v5; // eax@7
  NiShader *v6; // esi@7
  NiRefObjectVtbl *v7; // edi@8
  int v8; // ebx@9
  double v9; // st7@13
  NiRefObjectVtbl *iNumRanges; // [sp+4h] [bp-4h]@8
  float fNear; // [sp+10h] [bp+8h]@10

  if ( _pkObject )
  {
    v4 = ((int (__thiscall *)(NiAVObject *))_pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(_pkObject);
    if ( v4 )
    {
      while ( (NiRTTI *)v4 != &NiLODNode::m_RTTI )
      {
        v4 = *(_DWORD *)(v4 + 4);
        if ( !v4 )
          return 1;
      }
      v5 = CPostProcessEffect::DynamicCast(&NiRangeLODData::m_RTTI, LODWORD(_pkObject[1].m_kLocal.m_fScale));
      v6 = v5;
      if ( v5 )
      {
        v7 = 0;
        iNumRanges = v5[2].baseclass_0.vfptr;
        if ( (signed int)iNumRanges > 0 )
        {
          v8 = 0;
          do
          {
            fNear = *(float *)(v8 + v6[2].baseclass_0.m_uiRefCount);
            if ( 0.0 == fNear )
            {
              if ( v7 >= v6[2].baseclass_0.vfptr )
                NiRangeLODData::SetNumRanges((NiRangeLODData *)v6, (unsigned int)((char *)&v7->__vecDelDtor + 1));
              *(float *)(v8 + v6[2].baseclass_0.m_uiRefCount) = fNear;
              v9 = 100000000.0;
            }
            else
            {
              if ( v7 >= v6[2].baseclass_0.vfptr )
                NiRangeLODData::SetNumRanges((NiRangeLODData *)v6, (unsigned int)((char *)&v7->__vecDelDtor + 1));
              *(float *)(v8 + v6[2].baseclass_0.m_uiRefCount) = 1.0;
              v9 = 0.0;
            }
            *(float *)(v6[2].baseclass_0.m_uiRefCount + v8 + 4) = v9;
            v7 = (NiRefObjectVtbl *)((char *)v7 + 1);
            v8 += 16;
          }
          while ( (signed int)v7 < (signed int)iNumRanges );
        }
      }
    }
    result = 1;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (006387A0) --------------------------------------------------------
void __thiscall AbStateInst::OnEffectDestory(AbStateInst *this, Effect *pkEffect)
{
  if ( pkEffect )
  {
    if ( pkEffect == this->pkFirstEffect )
      this->pkFirstEffect = 0;
    if ( pkEffect == this->pkLoopingEffect )
      this->pkLoopingEffect = 0;
  }
}

//----- (006387C0) --------------------------------------------------------
AbStateInfectee::AbstateColor __thiscall AbStateInfectee::GetAbstateColor(AbStateInfectee *this)
{
  AbStateInfectee::AbstateColor result; // eax@1
  unsigned int v2; // [sp+8h] [bp+8h]@0

  result.dwRGB = v2;
  *(_DWORD *)v2 = this->m_kAbstateColor.dwRGB;
  return result;
}

//----- (006387D0) --------------------------------------------------------
void __thiscall AbStateInfectee::SetAbStateProperty(AbStateInfectee *this, ABSTATEINDEX eAbstateIndex, bool bVisible, int iCount)
{
  if ( (signed int)eAbstateIndex > 336 )
  {
    if ( eAbstateIndex == 337 )
    {
      this->m_kAbStateProperty.iCantChatStateCount += iCount;
      return;
    }
    if ( eAbstateIndex == 485 )
    {
LABEL_15:
      this->m_kAbStateProperty.bVisible = bVisible;
      return;
    }
    if ( eAbstateIndex != 558 )
      return;
LABEL_14:
    this->m_kAbStateProperty.iKarenCaptivateStateCount += iCount;
    return;
  }
  if ( eAbstateIndex == 336 )
  {
    this->m_kAbStateProperty.iCantHealStateCount += iCount;
    return;
  }
  if ( (signed int)eAbstateIndex > 199 )
  {
    if ( eAbstateIndex != 335 )
      return;
    goto LABEL_14;
  }
  if ( eAbstateIndex == 199 || eAbstateIndex == 75 )
    goto LABEL_15;
  if ( eAbstateIndex == 77 )
    this->m_kAbStateProperty.bTrapVisible = bVisible;
}

//----- (00638850) --------------------------------------------------------
NiTList<AbStateInst *> *__thiscall AbStateInfectee::GetAbStateList(AbStateInfectee *this)
{
  return &this->m_kAbStateList;
}

//----- (00638860) --------------------------------------------------------
int __thiscall AbStateInfectee::IsVisible(AbStateInfectee *this)
{
  int result; // eax@2

  if ( this->m_kAbStateProperty.bVisible )
  {
    if ( this->m_kAbStateProperty.bTrapVisible )
      result = 1;
    else
      result = Char::GetClass(g_pkMainChar) == 15;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00638890) --------------------------------------------------------
void __thiscall AbStateInfectee::Update(AbStateInfectee *this, float fTime)
{
  double v2; // st6@1
  double v3; // st6@2
  double v4; // st7@2
  double v5; // qt1@3
  NiTListItem<AbStateInst *> *v6; // edx@4
  double v7; // st5@5
  double v8; // qt2@6
  AbStateInst *v9; // esi@7
  double v10; // qtt@7
  double v11; // st5@7
  double v12; // st6@7
  float fDT; // [sp+8h] [bp+8h]@2

  v2 = fTime;
  if ( this->m_fPrevTime >= 0.0 )
  {
    fDT = v2 - this->m_fPrevTime;
    v5 = v2;
    v3 = 0.0;
    v4 = v5;
  }
  else
  {
    v3 = 0.0;
    v4 = fTime;
    fDT = 0.0;
  }
  v6 = this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v6 )
  {
    v7 = fDT;
    while ( 1 )
    {
      v9 = v6->m_element;
      v10 = v7;
      v11 = v3;
      v12 = v10;
      v6 = v6->m_pkNext;
      if ( v11 <= v9->fLifeTime )
        v9->fLifeTime = v9->fLifeTime - v12;
      if ( !v6 )
        break;
      v8 = v11;
      v7 = v12;
      v3 = v8;
    }
  }
  this->m_fPrevTime = v4;
}

//----- (006388F0) --------------------------------------------------------
bool __thiscall AbStateInfectee::IsInList(AbStateInfectee *this, ABSTATEINDEX wIndex)
{
  NiTListItem<AbStateInst *> *v2; // ebx@1
  AbStateInst *v3; // eax@2
  int v4; // edi@3
  GameFrameWork *v5; // esi@3
  int v6; // ecx@5
  int v7; // eax@6
  bool result; // al@9

  v2 = this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        v4 = v3->kID;
        v5 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
        if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                                ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                                v3->kID) )
        {
          if ( (unsigned __int16)v4 <= LOWORD(v5->m_ResList[2].m_eAspect) )
          {
            v6 = *(_DWORD *)&v5->m_ResList[2].m_bCheckAdd;
            if ( *(_DWORD *)(v6 + 4 * v4) )
            {
              v7 = *(_DWORD *)(v6 + 4 * v4);
              if ( v7 )
              {
                if ( wIndex == *(_DWORD *)(v7 + 34) )
                  break;
              }
            }
          }
        }
      }
      if ( !v2 )
        goto LABEL_9;
    }
    result = 1;
  }
  else
  {
LABEL_9:
    result = 0;
  }
  return result;
}

//----- (00638970) --------------------------------------------------------
void __thiscall AbStateInfectee::ClearAbState(AbStateInfectee *this, bool bSudden)
{
  AbStateInfectee *v2; // ebx@1
  NiTListItem<AbStateInst *> *v3; // edx@1
  NiTListItem<AbStateInst *> *v4; // eax@4
  NiTListItem<AbStateInst *> *v5; // ecx@4
  AbStateInst *v6; // edi@7

  v2 = this;
  v3 = 0;
  if ( *(_DWORD *)&this->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    while ( 1 )
    {
      v4 = v2->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
      v5 = v4->m_pkNext;
      v2->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead = v4->m_pkNext;
      if ( v5 == v3 )
        v2->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail = v3;
      else
        v5->m_pkPrev = v3;
      v6 = v4->m_element;
      v2->m_kAbStateList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<AbStateInst *>,AbStateInst *> *)&v2->m_kAbStateList,
        v4);
      --*(_DWORD *)&v2->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v2->vfptr->Deaffect(v2, v6, bSudden);
      if ( v6 )
        v6->baseclass_0.vfptr->__vecDelDtor((IEffectDestroyMessenger *)v6, 1u);
      if ( !*(_DWORD *)&v2->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
        break;
      v3 = 0;
    }
    v2->m_kAbstateColor.dwRGB = 0;
  }
  else
  {
    this->m_kAbstateColor.dwRGB = 0;
  }
}

//----- (006389F0) --------------------------------------------------------
bool __thiscall AbStateInfectee::FindNomalAbstate(AbStateInfectee *this, ABSTATEINDEX wIndex)
{
  NiTListItem<AbStateInst *> *v2; // ebx@1
  GameFrameWork *v3; // esi@2
  int v4; // edi@2
  int v5; // edx@4
  int v6; // eax@5
  bool result; // al@7

  v2 = this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
      v4 = v2->m_element->kID;
      v2 = v2->m_pkNext;
      if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, int))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                              ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                              v4) )
      {
        if ( (unsigned __int16)v4 <= LOWORD(v3->m_ResList[2].m_eAspect) )
        {
          v5 = *(_DWORD *)&v3->m_ResList[2].m_bCheckAdd;
          if ( *(_DWORD *)(v5 + 4 * v4) )
          {
            v6 = *(_DWORD *)(v5 + 4 * v4);
            if ( v6 )
              break;
          }
        }
      }
      if ( !v2 )
        goto LABEL_7;
    }
    result = *(_DWORD *)(v6 + 34) == wIndex;
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}

//----- (00638A60) --------------------------------------------------------
void __thiscall AbStateInfectee::_AbStateInfectee(AbStateInfectee *this)
{
  AbStateInfectee *v1; // esi@1
  int v2; // edi@1
  NiTListItem<AbStateInst *> *v3; // esi@1
  NiTListItem<AbStateInst *> *v4; // ST00_4@2

  v1 = this;
  this->vfptr = (AbStateInfecteeVtbl *)AbStateInfectee::_vftable_;
  AbStateInfectee::ClearAbState(this, 0);
  v2 = (int)&v1->m_kAbStateList;
  v1->m_kAbStateList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AbStateInst *>,AbStateInst *>Vtbl *)&NiTPointerListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
  v3 = v1->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 4) = 0;
  *(_DWORD *)(v2 + 8) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
}
// 9C2FD8: using guessed type int (__thiscall *NiTListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);
// 9C2FE8: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);
// 9C3008: using guessed type int (__stdcall *AbStateInfectee___vftable_[2])(int pkAbState, char bNoVisual);

//----- (00638AF0) --------------------------------------------------------
void __thiscall AbStateInfectee::DeleteAbState(AbStateInfectee *this, unsigned __int16 kID, bool bSudden)
{
  unsigned __int16 v3; // bx@1
  GameFrameWork *v4; // esi@1
  AbStateInfectee *v5; // edi@1
  int v6; // ecx@3
  int v7; // eax@4
  PgFrameWork *v8; // eax@6
  CClientGuild *v9; // eax@8
  NiTListItem<AbStateInst *> *v10; // eax@10
  AbStateInst *v11; // esi@11
  NiTListItem<AbStateInst *> *v12; // ebx@15
  int v13; // edi@16
  int v14; // esi@16
  int v15; // edx@18
  int v16; // eax@19
  char v17; // cl@20
  char v18; // dl@20
  char v19; // al@20
  AbStateInfectee *v20; // [sp+Ch] [bp-4h]@1

  v3 = kID;
  v4 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  v5 = this;
  v20 = this;
  if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                          ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                          kID) )
  {
    if ( v3 <= LOWORD(v4->m_ResList[2].m_eAspect) )
    {
      v6 = *(_DWORD *)&v4->m_ResList[2].m_bCheckAdd;
      if ( *(_DWORD *)(v6 + 4 * v3) )
      {
        v7 = *(_DWORD *)(v6 + 4 * v3);
        if ( v7 )
        {
          if ( *(_DWORD *)(v7 + 34) == 289 )
          {
            v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
            if ( v8 )
              MiniMapWin::ShowGTQuit(*(MiniMapWin **)&v8[15].m_bInit, 0);
            v9 = GuildTask::GetGuild();
            if ( v9 )
              v9->m_bOpserver = 0;
          }
        }
      }
    }
  }
  v10 = v5->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v10 )
  {
    while ( 1 )
    {
      v11 = v10->m_element;
      *(_DWORD *)&kID = v10;
      v10 = v10->m_pkNext;
      if ( v11->kID == v3 )
        break;
      if ( !v10 )
        goto LABEL_15;
    }
    v5->vfptr->Deaffect(v5, v11, bSudden);
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v5->m_kAbStateList,
      (void **)&kID);
    v11->baseclass_0.vfptr->__vecDelDtor((IEffectDestroyMessenger *)v11, 1u);
  }
LABEL_15:
  v12 = v5->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v12 )
  {
    while ( 1 )
    {
      v13 = v12->m_element->kID;
      v14 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
      v12 = v12->m_pkNext;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                              v13) )
      {
        if ( (unsigned __int16)v13 <= *(_WORD *)(v14 + 200) )
        {
          v15 = *(_DWORD *)(v14 + 196);
          if ( *(_DWORD *)(v15 + 4 * v13) )
          {
            v16 = *(_DWORD *)(v15 + 4 * v13);
            if ( v16 )
            {
              v17 = *(_BYTE *)(v16 + 326);
              v18 = *(_BYTE *)(v16 + 327);
              v19 = *(_BYTE *)(v16 + 328);
              *(_DWORD *)&kID = 0;
              LOBYTE(kID) = v17;
              HIBYTE(kID) = v18;
              *((_BYTE *)&kID + 2) = v19;
              if ( kID )
                break;
            }
          }
        }
      }
      if ( !v12 )
      {
        v5 = v20;
        goto LABEL_23;
      }
    }
    v20->m_kAbstateColor.dwRGB = kID;
  }
  else
  {
LABEL_23:
    v5->m_kAbstateColor.dwRGB = 0;
  }
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (00638C50) --------------------------------------------------------
void __thiscall AbStateInfectee::AbStateInfectee(AbStateInfectee *this)
{
  this->vfptr = (AbStateInfecteeVtbl *)AbStateInfectee::_vftable_;
  *(_DWORD *)&this->m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kAbStateList.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kAbStateList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AbStateInst *>,AbStateInst *>Vtbl *)&NiTList<AbStateInst__>::_vftable_;
  this->m_fPrevTime = -1.0;
  this->m_kAbStateProperty.iUnAttackableCount = 0;
  this->m_kAbStateProperty.iUnMovableCount = 0;
  this->m_kAbStateProperty.iFearCount = 0;
  this->m_kAbStateProperty.bVisible = 1;
  this->m_kAbStateProperty.bTrapVisible = 1;
  this->m_kAbStateProperty.iKarenCaptivateStateCount = 0;
  this->m_kAbStateProperty.iCantChatStateCount = 0;
  this->m_kAbStateProperty.iCantHealStateCount = 0;
  this->m_kAbstateColor.dwRGB = 0;
}
// 9C2FF8: using guessed type int (__thiscall *NiTList_AbStateInst _____vftable_)(void *p, char);
// 9C3008: using guessed type int (__stdcall *AbStateInfectee___vftable_[2])(int pkAbState, char bNoVisual);

//----- (00638CA0) --------------------------------------------------------
bool __thiscall AbStateInfectee::IsInList(AbStateInfectee *this, SubAbstateAction wSAA)
{
  NiTListItem<AbStateInst *> *v2; // ebx@1
  AbStateInst *v3; // eax@2
  int v4; // edi@3
  GameFrameWork *v5; // esi@3
  int v6; // eax@4
  int v7; // ecx@7
  SubAbStateInfo *v8; // eax@10
  bool result; // al@16

  v2 = this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        v4 = v3->kID;
        v5 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
        if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                                ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                                v3->kID) )
        {
          if ( (unsigned __int16)v4 <= LOWORD(v5->m_ResList[2].m_eAspect) )
          {
            v7 = *(_DWORD *)&v5->m_ResList[2].m_bCheckAdd;
            v6 = *(_DWORD *)(v7 + 4 * v4) ? *(_DWORD *)(v7 + 4 * v4) : 0;
          }
          else
          {
            v6 = 0;
          }
        }
        else
        {
          v6 = 0;
        }
        v8 = SubAbStateInfoTab::GetByInxName((char *)(v6 + 212));
        if ( v8 )
        {
          if ( wSAA == v8->ActionIndexA
            || wSAA == v8->ActionIndexB
            || wSAA == v8->ActionIndexC
            || wSAA == v8->ActionIndexD )
            break;
        }
      }
      if ( !v2 )
        goto LABEL_16;
    }
    result = 1;
  }
  else
  {
LABEL_16:
    result = 0;
  }
  return result;
}

//----- (00638D40) --------------------------------------------------------
void __thiscall AbStateInfectee::Affect(AbStateInfectee *this, AbStateInst *pkAbState, bool bNoVisual)
{
  GameFrameWork *v3; // esi@1
  int v4; // edi@1
  AbStateInfectee *v5; // ebx@1
  int v6; // eax@3
  int v7; // esi@4
  SubAbStateInfo *v8; // eax@6
  SubState v9; // ecx@11

  v3 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  v4 = pkAbState->kID;
  v5 = this;
  if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                          ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                          pkAbState->kID) )
  {
    if ( (unsigned __int16)v4 <= LOWORD(v3->m_ResList[2].m_eAspect) )
    {
      v6 = *(_DWORD *)&v3->m_ResList[2].m_bCheckAdd + 4 * v4;
      if ( *(_DWORD *)v6 )
      {
        v7 = *(_DWORD *)v6;
        if ( *(_DWORD *)v6 )
        {
          v5->vfptr->SetAbStateProperty(v5, *(ABSTATEINDEX *)(v7 + 34), 0, 1);
          if ( *(_BYTE *)(v7 + 212) != 45 )
          {
            v8 = SubAbStateInfoTab::GetByInxName((char *)(v7 + 212));
            if ( v8 )
            {
              if ( v8->ActionIndexA == 19
                || v8->ActionIndexB == 19
                || v8->ActionIndexC == 19
                || v8->ActionIndexD == 19
                || (v9 = v8->Type, v9 == 67)
                || v9 == 68 )
                ++v5->m_kAbStateProperty.iUnMovableCount;
              if ( v8->ActionIndexA == 25
                || v8->ActionIndexB == 25
                || v8->ActionIndexC == 25
                || v8->ActionIndexD == 25
                || v8->Type == 67 )
                ++v5->m_kAbStateProperty.iUnAttackableCount;
              if ( v8->ActionIndexA == 38 || v8->ActionIndexB == 38 || v8->ActionIndexC == 38 || v8->ActionIndexD == 38 )
                ++v5->m_kAbStateProperty.iFearCount;
            }
          }
        }
      }
    }
  }
}

//----- (00638E40) --------------------------------------------------------
void __thiscall AbStateInfectee::Deaffect(AbStateInfectee *this, AbStateInst *pkAbState, bool bSudden)
{
  GameFrameWork *v3; // esi@1
  int v4; // edi@1
  AbStateInfectee *v5; // ebx@1
  int v6; // eax@3
  int v7; // esi@4
  SubAbStateInfo *v8; // eax@6
  SubState v9; // ecx@11

  v3 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  v4 = pkAbState->kID;
  v5 = this;
  if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                          ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                          pkAbState->kID) )
  {
    if ( (unsigned __int16)v4 <= LOWORD(v3->m_ResList[2].m_eAspect) )
    {
      v6 = *(_DWORD *)&v3->m_ResList[2].m_bCheckAdd + 4 * v4;
      if ( *(_DWORD *)v6 )
      {
        v7 = *(_DWORD *)v6;
        if ( *(_DWORD *)v6 )
        {
          v5->vfptr->SetAbStateProperty(v5, *(ABSTATEINDEX *)(v7 + 34), 1, -1);
          if ( *(_BYTE *)(v7 + 212) != 45 )
          {
            v8 = SubAbStateInfoTab::GetByInxName((char *)(v7 + 212));
            if ( v8 )
            {
              if ( v8->ActionIndexA == 19
                || v8->ActionIndexB == 19
                || v8->ActionIndexC == 19
                || v8->ActionIndexD == 19
                || (v9 = v8->Type, v9 == 67)
                || v9 == 68 )
                --v5->m_kAbStateProperty.iUnMovableCount;
              if ( v8->ActionIndexA == 25
                || v8->ActionIndexB == 25
                || v8->ActionIndexC == 25
                || v8->ActionIndexD == 25
                || v8->Type == 67 )
                --v5->m_kAbStateProperty.iUnAttackableCount;
              if ( v8->ActionIndexA == 38 || v8->ActionIndexB == 38 || v8->ActionIndexC == 38 || v8->ActionIndexD == 38 )
                --v5->m_kAbStateProperty.iFearCount;
            }
          }
        }
      }
    }
  }
}

//----- (00638F30) --------------------------------------------------------
AbStateInst *__thiscall AbStateInfectee::FindAbstateInstBySubAbstateType(AbStateInfectee *this, SubState eType)
{
  NiTListItem<AbStateInst *> *v2; // ebx@1
  GameFrameWork *v3; // esi@2
  AbStateInst *v4; // eax@2
  int v5; // edi@2
  int v6; // ecx@4
  int v7; // eax@5
  char *v8; // esi@6
  SubAbStateInfo *v9; // eax@7
  AbStateInst *result; // eax@10
  AbStateInst *pkState; // [sp+Ch] [bp-4h]@2

  v2 = this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
      v4 = v2->m_element;
      v5 = v4->kID;
      v2 = v2->m_pkNext;
      pkState = v4;
      if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                              ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                              v4->kID) )
      {
        if ( (unsigned __int16)v5 <= LOWORD(v3->m_ResList[2].m_eAspect) )
        {
          v6 = *(_DWORD *)&v3->m_ResList[2].m_bCheckAdd;
          if ( *(_DWORD *)(v6 + 4 * v5) )
          {
            v7 = *(_DWORD *)(v6 + 4 * v5);
            if ( v7 )
            {
              v8 = (char *)(v7 + 212);
              if ( strcmp((const char *)(v7 + 212), "-") )
              {
                v9 = SubAbStateInfoTab::GetByInxName(v8);
                if ( v9 )
                {
                  if ( v9->Type == eType )
                    break;
                }
              }
            }
          }
        }
      }
      if ( !v2 )
        goto LABEL_10;
    }
    result = pkState;
  }
  else
  {
LABEL_10:
    result = 0;
  }
  return result;
}

//----- (00638FF0) --------------------------------------------------------
bool __thiscall AbStateInfectee::SubAbIsInList(AbStateInfectee *this, SubState subType)
{
  NiTListItem<AbStateInst *> *v2; // ebx@1
  GameFrameWork *v3; // esi@2
  int v4; // edi@2
  int v5; // edx@4
  int v6; // eax@5
  SubAbStateInfo *v7; // eax@6
  bool result; // al@10

  v2 = this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
      v4 = v2->m_element->kID;
      v2 = v2->m_pkNext;
      if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, int))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                              ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                              v4) )
      {
        if ( (unsigned __int16)v4 <= LOWORD(v3->m_ResList[2].m_eAspect) )
        {
          v5 = *(_DWORD *)&v3->m_ResList[2].m_bCheckAdd;
          if ( *(_DWORD *)(v5 + 4 * v4) )
          {
            v6 = *(_DWORD *)(v5 + 4 * v4);
            if ( v6 )
            {
              v7 = SubAbStateInfoTab::GetByInxName((char *)(v6 + 212));
              if ( v7 )
              {
                if ( v7->InxName[0] != 45 && v7->Type == subType )
                  break;
              }
            }
          }
        }
      }
      if ( !v2 )
        goto LABEL_10;
    }
    result = 1;
  }
  else
  {
LABEL_10:
    result = 0;
  }
  return result;
}

//----- (00639080) --------------------------------------------------------
bool __thiscall AbStateInfectee::AddAbState(AbStateInfectee *this, unsigned __int16 kID, float fLifeTime, bool bNoVisual)
{
  int v4; // ebx@1
  GameFrameWork *v5; // esi@1
  void (__thiscall *v6)(IDirectMessenger *, int, void *, IDirectMessenger *); // edx@1
  void *v7; // edi@1
  int v8; // eax@5
  int v9; // edi@5
  int v10; // esi@8
  int v11; // ecx@10
  NiTListItem<AbStateInst *> *v12; // eax@14
  AbStateInst *v13; // esi@15
  void *v14; // eax@17
  void *v15; // esi@17
  PgFrameWork *v16; // eax@21
  CClientGuild *v17; // eax@23
  AbStateInfectee *v19; // [sp+Ch] [bp-8h]@1
  void *pkState; // [sp+10h] [bp-4h]@1
  int pkAbstateInfo; // [sp+1Ch] [bp+8h]@2
  unsigned int kColor; // [sp+20h] [bp+Ch]@26

  v4 = kID;
  v5 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  v6 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren;
  v19 = this;
  v7 = 0;
  pkState = 0;
  if ( !(unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))v6)(
                           ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                           kID) )
  {
    pkAbstateInfo = 0;
    goto LABEL_14;
  }
  if ( kID > LOWORD(v5->m_ResList[2].m_eAspect) )
  {
    pkAbstateInfo = 0;
    goto LABEL_14;
  }
  v8 = *(_DWORD *)&v5->m_ResList[2].m_bCheckAdd;
  v9 = 4 * kID;
  if ( *(_DWORD *)(v8 + v9) )
  {
    pkAbstateInfo = *(_DWORD *)(v8 + v9);
    if ( pkAbstateInfo )
    {
      v10 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                              v4) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v10 + 200) )
        {
          v11 = *(_DWORD *)(v10 + 196);
          if ( *(_DWORD *)(v9 + v11) )
          {
            v7 = *(void **)(v9 + v11);
            goto LABEL_14;
          }
        }
      }
      pkState = 0;
    }
  }
  else
  {
    pkAbstateInfo = 0;
  }
  v7 = pkState;
LABEL_14:
  v12 = v19->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v12 )
  {
    while ( 1 )
    {
      v13 = v12->m_element;
      v12 = v12->m_pkNext;
      if ( v13->kID == (_WORD)v4 )
        break;
      if ( !v12 )
        goto LABEL_17;
    }
    v13->fLifeTime = fLifeTime;
    if ( v7 && *((_BYTE *)v7 + 397) == 1 )
    {
      v19->vfptr->Deaffect(v19, v13, 0);
      v19->vfptr->Affect(v19, v13, bNoVisual);
      return 1;
    }
  }
  else
  {
LABEL_17:
    v14 = operator new(0x74u);
    v15 = 0;
    if ( v14 )
    {
      *((_DWORD *)v14 + 4) = 0;
      *((_DWORD *)v14 + 2) = 0;
      *((_DWORD *)v14 + 3) = 0;
      *((_DWORD *)v14 + 1) = &NiTList<IEffectDestroyMessenger__>::_vftable_;
      *((_DWORD *)v14 + 10) = 0;
      *((_DWORD *)v14 + 11) = 0;
      *(_DWORD *)v14 = &AbStateInst::_vftable_;
      v15 = v14;
    }
    *((_WORD *)v15 + 10) = v4;
    *((float *)v15 + 9) = fLifeTime;
    *((_DWORD *)v15 + 10) = 0;
    *((_DWORD *)v15 + 11) = 0;
    *((_BYTE *)v15 + 48) = 0;
    pkState = v15;
    *((_DWORD *)v15 + 28) = 0;
    if ( pkAbstateInfo && *(_DWORD *)(pkAbstateInfo + 34) == 289 )
    {
      v16 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v16 )
        MiniMapWin::ShowGTQuit(*(MiniMapWin **)&v16[15].m_bInit, 1);
      v17 = GuildTask::GetGuild();
      if ( v17 )
        v17->m_bOpserver = 1;
    }
    v19->vfptr->Affect(v19, (AbStateInst *)v15, bNoVisual);
    if ( v7 )
    {
      kColor = *((_BYTE *)v7 + 326);
      BYTE1(kColor) = *((_BYTE *)v7 + 327);
      HIWORD(kColor) = *((_BYTE *)v7 + 328);
      if ( kColor )
        v19->m_kAbstateColor.dwRGB = kColor;
      if ( !strcmp((const char *)v7 + 506, "BUFF") )
      {
        NiTPointerListBase<DFALL<AbStateInst__>_AbStateInst__>::AddHead(
          &v19->m_kAbStateList.baseclass_0,
          (AbStateInst *const *)&pkState);
        return 1;
      }
      if ( !strcmp((const char *)v7 + 506, "DEBUFF") )
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v19->m_kAbStateList,
          (NiD3DXEffectParameter *const *)&pkState);
    }
  }
  return 1;
}
// 9C0F50: using guessed type int (__thiscall *NiTList_IEffectDestroyMessenger _____vftable_)(void *p, char);
// 9C302C: using guessed type int (__thiscall *AbStateInst___vftable_)(void *p, char);
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (006392F0) --------------------------------------------------------
void __thiscall AbStateInfectee::HasAbStateAction(AbStateInfectee *this, std::list<AbnormalStateViewInfo *,std::allocator<AbnormalStateViewInfo *> > *lstAAction)
{
  NiTListItem<AbStateInst *> *v2; // eax@1
  std::list<AbnormalStateViewInfo *,std::allocator<AbnormalStateViewInfo *> > *v3; // ebx@2
  AbStateInst *v4; // eax@4
  int v5; // edi@5
  int v6; // esi@5
  int v7; // eax@6
  int v8; // edx@9
  int v9; // esi@14
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v10; // eax@14
  unsigned int v11; // ecx@14
  AbStateInfectee *pkInfo; // [sp+0h] [bp-4h]@1
  NiTListItem<AbStateInst *> *kIter; // [sp+Ch] [bp+8h]@4

  pkInfo = this;
  v2 = this->m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    v3 = lstAAction;
    while ( 1 )
    {
      kIter = v2->m_pkNext;
      v4 = v2->m_element;
      if ( v4 )
      {
        v5 = v4->kID;
        v6 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                                v5) )
        {
          if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) )
          {
            v8 = *(_DWORD *)(v6 + 196);
            v7 = *(_DWORD *)(v8 + 4 * v5) ? *(_DWORD *)(v8 + 4 * v5) : 0;
          }
          else
          {
            v7 = 0;
          }
        }
        else
        {
          v7 = 0;
        }
        pkInfo = (AbStateInfectee *)v7;
        if ( v7 )
        {
          if ( *(_BYTE *)(v7 + 329) != 45 )
          {
            v9 = *(_DWORD *)&v3->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
            v10 = std::_List_val<char___std::allocator<char__>>::_Buynode(
                    (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)v3,
                    *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)&v3->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
                    *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)&v3->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                                + 4),
                    (ItemViewDummy *const *)&pkInfo);
            v11 = v3->baseclass_0.baseclass_0._Mysize;
            if ( 1073741822 - v11 < 1 )
              std::_Xlength_error("list<T> too long");
            v3->baseclass_0.baseclass_0._Mysize = v11 + 1;
            *(_DWORD *)(v9 + 4) = v10;
            v10->_Prev->_Next = v10;
          }
        }
      }
      if ( !kIter )
        break;
      v2 = kIter;
    }
  }
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (006393C0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_NiTListBase<DFALL<AbStateInst__>_AbStateInst__>(NiTListBase<DFALL<AbStateInst *>,AbStateInst *> *this)
{
  this->vfptr = (NiTListBase<DFALL<AbStateInst *>,AbStateInst *>Vtbl *)&NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
}
// 9C2FD8: using guessed type int (__thiscall *NiTListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);

//----- (006393D0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vector_deleting_destructor_(NiTListBase<DFALL<AbStateInst *>,AbStateInst *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<AbStateInst *>,AbStateInst *>Vtbl *)&NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C2FD8: using guessed type int (__thiscall *NiTListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);

//----- (00639400) --------------------------------------------------------
void __thiscall NiTPointerListBase<DFALL<AbStateInst__>_AbStateInst__>::AddHead(NiTPointerListBase<DFALL<AbStateInst *>,AbStateInst *> *this, AbStateInst *const *element)
{
  NiTPointerListBase<DFALL<AbStateInst *>,AbStateInst *> *v2; // esi@1
  int v3; // eax@1
  NiTListItem<AbStateInst *> *v4; // ecx@1

  v2 = this;
  v3 = ((int (*)(void))this->baseclass_0.vfptr->NewItem)();
  *(_DWORD *)(v3 + 8) = *element;
  *(_DWORD *)(v3 + 4) = 0;
  *(_DWORD *)v3 = v2->baseclass_0.m_pkHead;
  v4 = v2->baseclass_0.m_pkHead;
  if ( v4 )
  {
    v4->m_pkPrev = (NiTListItem<AbStateInst *> *)v3;
    ++*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v2->baseclass_0.m_pkHead = (NiTListItem<AbStateInst *> *)v3;
  }
  else
  {
    ++*(_DWORD *)&v2->baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    v2->baseclass_0.m_pkTail = (NiTListItem<AbStateInst *> *)v3;
    v2->baseclass_0.m_pkHead = (NiTListItem<AbStateInst *> *)v3;
  }
}

//----- (00639450) --------------------------------------------------------
void __thiscall NiTList<AbStateInst__>::_NiTList<AbStateInst__>(NiTList<AbStateInst *> *this)
{
  NiTList<AbStateInst *> *v1; // edi@1
  NiTListItem<AbStateInst *> *v2; // esi@1
  NiTListItem<AbStateInst *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AbStateInst *>,AbStateInst *>Vtbl *)&NiTPointerListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<AbStateInst *>,AbStateInst *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AbStateInst *>,AbStateInst *>Vtbl *)&NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
}
// 9C2FD8: using guessed type int (__thiscall *NiTListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);
// 9C2FE8: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);

//----- (006394D0) --------------------------------------------------------
void *__thiscall NiTList<AbStateInst__>::_scalar_deleting_destructor_(NiTList<AbStateInst *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<AbStateInst *> *v3; // esi@1
  NiTListItem<AbStateInst *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AbStateInst *>,AbStateInst *>Vtbl *)&NiTPointerListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<AbStateInst__>_AbStateInst__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C2FD8: using guessed type int (__thiscall *NiTListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);
// 9C2FE8: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AbStateInst ___AbStateInst _____vftable_)(void *p, char);

//----- (00639560) --------------------------------------------------------
void *__thiscall AbStateInfectee::_scalar_deleting_destructor_(AbStateInfectee *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AbStateInfectee::_AbStateInfectee(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00639590) --------------------------------------------------------
void *__thiscall AbStateInst::_scalar_deleting_destructor_(IEffectDestroyMessenger *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  IEffectDestroyMessenger::_IEffectDestroyMessenger(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006395C0) --------------------------------------------------------
void __cdecl Char::SetDefWalkSpeed(float fSpeed)
{
  Char::ms_fDefaultWalkSpeed = fSpeed;
}
// AA2724: using guessed type float Char__ms_fDefaultWalkSpeed;

//----- (006395D0) --------------------------------------------------------
void __cdecl Char::SetDefRunSpeed(float fSpeed)
{
  Char::ms_fDefaultRunSpeed = fSpeed;
}
// AA2728: using guessed type float Char__ms_fDefaultRunSpeed;

//----- (006395E0) --------------------------------------------------------
float __cdecl Char::GetDefWalkSpeed()
{
  double v0; // st7@1
  float result; // st7@2

  v0 = Char::ms_fDefaultWalkSpeed;
  LODWORD(result) = LODWORD(v0);
  return result;
}
// AA2724: using guessed type float Char__ms_fDefaultWalkSpeed;

//----- (006395F0) --------------------------------------------------------
float __cdecl Char::GetDefRunSpeed()
{
  double v0; // st7@1
  float result; // st7@2

  v0 = Char::ms_fDefaultRunSpeed;
  LODWORD(result) = LODWORD(v0);
  return result;
}
// AA2728: using guessed type float Char__ms_fDefaultRunSpeed;

//----- (00639600) --------------------------------------------------------
void __thiscall Char::InitViewInfo(Char *this, PROTO_AVATAR_SHAPE_INFO *pkShape, PROTO_EQUIPMENT *pkEquip)
{
  Char *v3; // esi@1

  v3 = this;
  if ( pkShape )
    CharShape::SetShapeInfo(&this->m_kCharShape, pkShape);
  if ( pkEquip )
    CharShape::SetEquipInfo(&v3->m_kCharShape, pkEquip);
}

//----- (00639660) --------------------------------------------------------
int __thiscall Char::CheckOscillationTime(Char *this, float fLastTime)
{
  return -1;
}

//----- (00639670) --------------------------------------------------------
NiControllerSequence *__thiscall Char::GetNowSequence(Char *this)
{
  Char *v1; // esi@1
  unsigned int v2; // edi@1
  NiControllerSequence *result; // eax@2

  v1 = this;
  v2 = Char::GetAniCode(this, 0, 0, 0);
  if ( (int)v1->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v1) == 4 )
    result = Char::GetSequence(v1, v1->m_uiLayerAniCode[0]);
  else
    result = Char::GetSequence(v1, v2);
  return result;
}

//----- (006396B0) --------------------------------------------------------
float __thiscall Char::GetHitTime(Char *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = 1.0;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (006396C0) --------------------------------------------------------
void __thiscall Char::EquipAll(Char *this)
{
  CharShape::EquipAll(&this->m_kCharShape);
}

//----- (006396D0) --------------------------------------------------------
void __thiscall Char::ResetEquip(Char *this)
{
  CharShape::EquipAll(&this->m_kCharShape);
}

//----- (006396E0) --------------------------------------------------------
bool __thiscall Char::ResetView(Char *this)
{
  return ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[18].GetAbstateColor)(1, 0);
}

//----- (006396F0) --------------------------------------------------------
int __thiscall Char::GetEmotionState(Char *this)
{
  return this->m_eEmotionState;
}

//----- (00639700) --------------------------------------------------------
void __thiscall Char::SetEmotionState(Char *this, Char::EmotionState eState)
{
  Char *v2; // esi@1

  v2 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  v2->m_eEmotionState = eState;
}

//----- (00639720) --------------------------------------------------------
bool __thiscall Char::PauseEmotion(Char *this, bool bSetTime, float fPauseTime)
{
  double v3; // st7@0
  Char::EmotionState v4; // edx@1
  bool result; // al@5

  v4 = this->m_eEmotionState;
  if ( !v4 || v4 == 4 )
    goto LABEL_12;
  if ( bSetTime )
  {
    v3 = fPauseTime;
    if ( fPauseTime >= 0.0 )
      return ((int (__stdcall *)(_DWORD))this->baseclass_0.vfptr[13].IsVisible)(LODWORD(fPauseTime)) != 0;
  }
  if ( v4 != 2 && (((void (*)(void))this->baseclass_0.vfptr[13].Affect)(), v3 >= 0.0) )
    result = 1;
  else
LABEL_12:
    result = 0;
  return result;
}

//----- (00639790) --------------------------------------------------------
Char *__thiscall Char::GetAttackTargetChar(Char *this)
{
  return CharMgr::GetChar(&g_kCharMgr, this->m_AttackTargetHandle);
}

//----- (006397C0) --------------------------------------------------------
Char::WeaponEquipType __thiscall Char::GetEquipWeaponType(Char *this)
{
  Char::WeaponEquipType result; // eax@2

  switch ( CharShape::Get3thAniEventCodeByWeapon(&this->m_kCharShape) )
  {
    case 0x14u:
    case 0x1Eu:
    case 0x28u:
    case 0x3Cu:
    case 0x46u:
    case 0x50u:
      result = 3;
      break;
    case 0xAu:
    case 0x32u:
      result = 2;
      break;
    case 0x5Au:
      result = 4;
      break;
    default:
      result = 6;
      break;
  }
  return result;
}

//----- (00639870) --------------------------------------------------------
bool __thiscall Char::GetReserveSkillSmash(Char *this)
{
  return this->m_bReserveSkillSmash;
}

//----- (00639880) --------------------------------------------------------
Char *__thiscall Char::GetChar(Char *this)
{
  return (Char *)((char *)this - 84);
}

//----- (00639890) --------------------------------------------------------
void __thiscall Char::SetAnimationSpeed(Char *this, float fSpeed)
{
  *(float *)&this->m_kCharShape.m_SpactralGlowEffect.m_kShaderName1.baseclass_0.___u0._Bx._Buf[12] = fSpeed;
}

//----- (006398A0) --------------------------------------------------------
unsigned __int16 __thiscall AttackSequenceManager::GetLastTargetHandle(AttackSequenceManager *this)
{
  return this->m_kLastTargetHandle;
}

//----- (006398B0) --------------------------------------------------------
ItemInfo *__thiscall Char::GetEquippedWeaponItemInfo(Char *this)
{
  return CharShape::GetEquippedWeaponItemInfo(&this->m_kCharShape);
}

//----- (006398C0) --------------------------------------------------------
void __thiscall Char::SetCharTitleName(Char *this, const char *cName)
{
  sprintf(this->m_CharTitleName, "%s");
}

//----- (006398E0) --------------------------------------------------------
bool __thiscall Char::GetSkillTargetGroundPoint(Char *this, unsigned int *x, unsigned int *y)
{
  *x = this->m_dwGroundSkillTargetPointX;
  *y = this->m_dwGroundSkillTargetPointY;
  return this->m_bGroundSkillTargetPointSetted != 0;
}

//----- (00639910) --------------------------------------------------------
void __thiscall Char::SetSkillTargetGroundPoint(Char *this, unsigned int x, unsigned int y, bool bPosSetting)
{
  this->m_dwGroundSkillTargetPointX = x;
  this->m_dwGroundSkillTargetPointY = y;
  this->m_bGroundSkillTargetPointSetted = bPosSetting;
}

//----- (00639940) --------------------------------------------------------
void __thiscall Char::ResetSkillTargetGroundPoint(Char *this)
{
  this->m_bGroundSkillTargetPointSetted = 0;
}

//----- (00639950) --------------------------------------------------------
void __thiscall Char::RestoreEquipState(Char *this)
{
  Char *v1; // esi@1
  unsigned __int16 v2; // ax@13
  unsigned __int16 v3; // ax@15

  v1 = this;
  if ( this->m_kTargetResourceHandle != -1 )
  {
    if ( this->m_kEquippedBackup.bUnEquipLeftHand )
      CharShape::UnEquip(&this->m_kCharShape, 0xAu);
    if ( v1->m_kEquippedBackup.bUnEquipRightHand )
      CharShape::UnEquip(&v1->m_kCharShape, 0xCu);
    if ( v1->m_kEquippedBackup.bUnEquipLeftHandAcc )
      CharShape::UnEquip(&v1->m_kCharShape, 0xBu);
    if ( v1->m_kEquippedBackup.bUnEquipRightHandAcc )
      CharShape::UnEquip(&v1->m_kCharShape, 0xDu);
    if ( v1->m_kEquippedBackup.bUnEquipShieldAcc )
      CharShape::UnEquip(&v1->m_kCharShape, 0x1Du);
    if ( v1->m_kEquippedBackup.iBackupCase == 1 )
    {
      v2 = v1->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID;
      if ( v2 != -1 )
      {
        CharShape::Equip(&v1->m_kCharShape, v2, v1->m_kEquippedBackup.kCase1.byPrevRightHandUpgrade);
        v1->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = -1;
      }
      v3 = v1->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID;
      if ( v3 != -1 )
      {
        CharShape::Equip(&v1->m_kCharShape, v3, v1->m_kEquippedBackup.kCase1.byPrevLeftHandUpgrade);
        v1->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = -1;
      }
      if ( v1->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID != -1 )
      {
        CharShape::Equip(&v1->m_kCharShape, v1->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID);
        v1->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID = -1;
      }
      if ( v1->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID != -1 )
      {
        CharShape::Equip(&v1->m_kCharShape, v1->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID);
        v1->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID = -1;
      }
      if ( v1->m_kEquippedBackup.kCase1.kPrevShieldAccItemID != -1 )
      {
        CharShape::Equip(&v1->m_kCharShape, v1->m_kEquippedBackup.kCase1.kPrevShieldAccItemID);
        v1->m_kEquippedBackup.kCase1.kPrevShieldAccItemID = -1;
      }
    }
    v1->m_kTargetResourceHandle = -1;
  }
}

//----- (00639AD0) --------------------------------------------------------
bool __thiscall Char::IsResource(Char *this)
{
  Char *v1; // esi@1
  MobInfo *v2; // eax@2
  MobType v3; // eax@3

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].Affect)()
      && (v2 = v1->m_pMobinfo) != 0
      && ((v3 = v2->Type, v3 == 8) || v3 == 10 || v3 == 9 || v3 == 22 || v3 == 21);
}

//----- (00639B10) --------------------------------------------------------
void __thiscall Char::SetCampSignBoard(Char *this, STREETBOOTH_SIGNBOARD stBoard, bool bIsSell)
{
  Char *v3; // eax@1
  char *v4; // edi@1
  bool v5; // cl@1

  v3 = this;
  stBoard.signboard[29] = 0;
  memcpy(&this->m_stSignboard, &stBoard, 0x1Cu);
  v4 = &this->m_stSignboard.signboard[28];
  v5 = bIsSell;
  *(_WORD *)v4 = *(_WORD *)&stBoard.signboard[28];
  v3->m_bIsSell = v5;
}

//----- (00639B40) --------------------------------------------------------
void __thiscall Char::SetCharTitleUse(Char *this, bool bUse)
{
  this->m_bUseCharTitle = bUse;
}

//----- (00639B50) --------------------------------------------------------
void __thiscall Char::HpUpdate(Char *this, unsigned __int16 wHpUpdateSeqNo, unsigned int dwHp)
{
  Char *v3; // esi@1
  unsigned int v4; // ecx@1
  int v5; // edi@2
  bool v6; // zf@2

  v3 = this;
  v4 = this->m_dwCurrHpUpdateSeqNo;
  if ( v4 == -65536 )
  {
    v5 = dwHp;
    v3->m_dwCurrHpUpdateSeqNo = wHpUpdateSeqNo;
    v6 = v3 == g_pkMainChar;
    goto LABEL_10;
  }
  if ( v4 > 0xEA60 && wHpUpdateSeqNo < 0x2710u )
  {
    v5 = dwHp;
    v3->m_dwCurrHpUpdateSeqNo = wHpUpdateSeqNo;
    v6 = v3 == g_pkMainChar;
    goto LABEL_10;
  }
  if ( wHpUpdateSeqNo > v4 || (++v3->m_dwHpUpdateSkipCount, v3->m_dwHpUpdateSkipCount > 4) )
  {
    v5 = dwHp;
    v3->m_dwCurrHpUpdateSeqNo = wHpUpdateSeqNo;
    if ( v3 != g_pkMainChar )
    {
LABEL_12:
      ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[4].Affect)(v3, v5);
      goto LABEL_13;
    }
    v6 = Char::CheckActState(v3, 500000) == 0;
LABEL_10:
    if ( v6 )
      User::SetHP(&g_kUser, v5);
    goto LABEL_12;
  }
LABEL_13:
  v3->m_dwHpUpdateSkipCount = 0;
}

//----- (00639C10) --------------------------------------------------------
void __thiscall Char::InitHpUpdate(Char *this)
{
  this->m_dwCurrHpUpdateSeqNo = -65536;
}

//----- (00639C20) --------------------------------------------------------
bool __thiscall Char::CheckEyelidByAction(Char *this)
{
  Char *v1; // esi@1
  bool result; // al@3
  int ui1stCode; // [sp+8h] [bp-4h]@1

  v1 = this;
  Char::GetAniCode(this, 0, (unsigned int *)&ui1stCode, 0);
  if ( ui1stCode != 400000 && ui1stCode != 500000 )
  {
    result = 0;
  }
  else
  {
    CharShape::EnableEyeShape(&v1->m_kCharShape, 17);
    result = 1;
    v1->m_stBlinkingInfo.byState = 1;
  }
  return result;
}

//----- (00639C70) --------------------------------------------------------
bool __thiscall Char::IsEnableSpectral(Char *this)
{
  return CharShape::IsSpactralGlowEnable(&this->m_kCharShape);
}

//----- (00639C80) --------------------------------------------------------
bool __thiscall Char::SetEnanleSpectral(Char *this, bool bEnable)
{
  return CharShape::SetSPactralGlowEnable(&this->m_kCharShape, bEnable);
}

//----- (00639CA0) --------------------------------------------------------
MobInfo *__thiscall Char::GetMobInfo(Char *this)
{
  return this->m_pMobinfo;
}

//----- (00639CB0) --------------------------------------------------------
void __thiscall Char::TOTHpUpdate(Char *this, unsigned __int16 wHpUpdateSeqNo, unsigned int dwHp)
{
  Char *v3; // esi@1
  unsigned int v4; // ecx@1
  unsigned int v5; // eax@2
  bool (__thiscall *v6)(AbStateInfectee *, ABSTATEINDEX, float, bool); // edx@3

  v3 = this;
  v4 = this->m_dwTOTCurrHpUpdateSeqNo;
  if ( v4 == -65536 )
  {
    v5 = wHpUpdateSeqNo;
LABEL_3:
    v6 = v3->baseclass_0.vfptr[5].AddAbStateByAbstateIndex;
    v3->m_dwTOTCurrHpUpdateSeqNo = v5;
    ((void (__thiscall *)(_DWORD, _DWORD))v6)(v3, dwHp);
    v3->m_dwTOTHpUpdateSkipCount = 0;
    return;
  }
  if ( v4 > 0xEA60 && wHpUpdateSeqNo < 0x2710u )
  {
    v5 = wHpUpdateSeqNo;
    goto LABEL_3;
  }
  if ( wHpUpdateSeqNo > v4 || (++v3->m_dwTOTHpUpdateSkipCount, v3->m_dwHpUpdateSkipCount > 4) )
  {
    v3->m_dwTOTCurrHpUpdateSeqNo = wHpUpdateSeqNo;
    ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[5].AddAbStateByAbstateIndex)(v3, dwHp);
  }
  v3->m_dwTOTHpUpdateSkipCount = 0;
}

//----- (00639D50) --------------------------------------------------------
void __thiscall Char::InitTOTHpUpdate(Char *this)
{
  this->m_dwTOTCurrHpUpdateSeqNo = -65536;
}

//----- (00639D60) --------------------------------------------------------
void __thiscall Char::SetHP(Char *this, int iHP)
{
  Char *v2; // esi@1
  int v3; // eax@3
  int v4; // eax@8

  v2 = this;
  if ( !Char::CheckActState(this, 500000) )
  {
    if ( v2 == g_pkMainChar )
      v3 = User::MaxHP(&g_kUser);
    else
      v3 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[3].Deaffect)(v2);
    if ( iHP && (iHP != v3 || v2->m_iHP != v3) )
    {
      v4 = v2->m_iHP;
      if ( v4 != iHP )
      {
        v2->m_iPrevHP = v4;
        v2->m_iHP = iHP;
      }
    }
    else
    {
      v2->m_iPrevHP = iHP;
      v2->m_iHP = iHP;
    }
  }
}

//----- (00639DD0) --------------------------------------------------------
bool __thiscall Char::IsDash(Char *this)
{
  return 0.0 != this->m_fSaveCharSpeed;
}

//----- (00639DF0) --------------------------------------------------------
void __thiscall Char::EnablePolymorph(Char *this, bool b)
{
  this->m_bPolymorph = b;
}

//----- (00639E00) --------------------------------------------------------
float __thiscall Char::GetCharZPos(Char *this, float fSec)
{
  float v2; // ST00_4@1
  double v3; // st7@1
  double v4; // st6@1
  double v5; // st7@2
  float result; // st7@8
  float fSeca; // [sp+Ch] [bp+8h]@4
  float fSecb; // [sp+Ch] [bp+8h]@6
  float fSecc; // [sp+Ch] [bp+8h]@7

  v2 = this->m_fSpeed / this->m_fAcceleration;
  v3 = v2;
  v4 = fSec;
  if ( fSec < v3 + v3 )
  {
    if ( v4 >= v3 )
    {
      if ( v4 <= v3 )
      {
        fSecc = v3 * this->m_fAcceleration * 0.5 * v3;
        v5 = fSecc;
      }
      else
      {
        fSecb = v3 * v3 * this->m_fAcceleration * 0.5 - (v3 - v4) * this->m_fAcceleration * 0.5 * (v3 - v4);
        v5 = fSecb;
      }
    }
    else
    {
      fSeca = v4 * this->m_fSpeed - fSec * this->m_fAcceleration * 0.5 * fSec;
      v5 = fSeca;
    }
  }
  else
  {
    v5 = 0.0;
  }
  LODWORD(result) = LODWORD(v5);
  return result;
}

//----- (00639EC0) --------------------------------------------------------
float __thiscall Char::GetJustSideDistance(Char *this, Char *pkTargetChar)
{
  int v2; // edi@3
  int v3; // esi@3
  int v4; // ecx@5
  int v5; // eax@6
  double v6; // st7@7
  float result; // st7@9
  float pkTargetChara; // [sp+10h] [bp+8h]@7

  if ( pkTargetChar
    && (unsigned __int8)((int (__thiscall *)(Char *))pkTargetChar->baseclass_0.vfptr[1].Affect)(pkTargetChar)
    && (v2 = pkTargetChar->m_kCharShape.m_kMobID,
        v3 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
        (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                           ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                           v2))
    && (unsigned __int16)v2 <= *(_WORD *)(v3 + 200)
    && (v4 = *(_DWORD *)(v3 + 196), *(_DWORD *)(v4 + 4 * v2))
    && (v5 = *(_DWORD *)(v4 + 4 * v2)) != 0 )
  {
    pkTargetChara = (double)*(unsigned int *)(v5 + 104) * 50.0 / 1000.0;
    v6 = pkTargetChara;
  }
  else
  {
    v6 = 50.0;
  }
  LODWORD(result) = LODWORD(v6);
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (00639F50) --------------------------------------------------------
float __thiscall Char::GetSkillableDistance(Char *this, Char *pkTargetChar, unsigned __int16 kSkillID)
{
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edi@4
  MobInfo *v6; // eax@7
  double v7; // st7@8
  float result; // st7@12
  float kSkillIDa; // [sp+14h] [bp+Ch]@8
  float kSkillIDb; // [sp+14h] [bp+Ch]@9

  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                           kSkillID)
    || kSkillID > *(_WORD *)(v3 + 200)
    || (v4 = *(_DWORD *)(v3 + 196) + 4 * kSkillID, !*(_DWORD *)v4)
    || (v5 = *(_DWORD *)v4) == 0 )
  {
    v7 = 50.0;
    goto LABEL_12;
  }
  if ( !pkTargetChar )
    goto LABEL_15;
  if ( !(unsigned __int8)((int (__thiscall *)(Char *))pkTargetChar->baseclass_0.vfptr[1].Affect)(pkTargetChar) )
  {
    kSkillIDb = (double)*(unsigned int *)(v5 + 180) + 50.0;
    v7 = kSkillIDb;
    goto LABEL_12;
  }
  v6 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(pkTargetChar->m_kCharShape.m_kMobID, 1);
  if ( !v6 )
  {
LABEL_15:
    v7 = (double)*(unsigned int *)(v5 + 180);
    goto LABEL_12;
  }
  kSkillIDa = (double)v6->AbsoluteSize * 50.0 / 1000.0 + (double)*(unsigned int *)(v5 + 180);
  v7 = kSkillIDa;
LABEL_12:
  LODWORD(result) = LODWORD(v7);
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (0063A060) --------------------------------------------------------
bool __thiscall Char::IsUpdate(Char *this)
{
  bool result; // al@1

  result = 1;
  if ( !this->m_bIsUpdate )
  {
    if ( this->m_spScene.m_pObject->baseclass_0.m_uFlags & 1 )
      result = 0;
  }
  return result;
}

//----- (0063A080) --------------------------------------------------------
void __thiscall Char::UpdateDirection(Char *this, float fTime)
{
  Char *v2; // ebx@1
  NiPoint3 *v3; // eax@3
  NiMatrix3 kRot; // [sp+Ch] [bp-24h]@3

  v2 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() )
  {
    NpNs_SmoothRotateControler::Update(&v2->m_kSmoothRotater, fTime);
    if ( (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) != 4 )
    {
      v3 = (NiPoint3 *)Wml::Segment3<double>::Direction((Wml::Segment3<double> *)&v2->m_kSmoothRotater);
      if ( Math3D::VectToZRot(v3, &kRot) )
        memcpy(&v2->m_spScene.m_pObject->baseclass_0.m_kLocal, &kRot, 0x24u);
      memcpy(&v2->m_spScene.m_pObject->baseclass_0.m_kLocal, &kRot, 0x24u);
    }
    DirectionControllers::Update(v2->m_spDirectionCtrls.m_pObject, fTime);
  }
}

//----- (0063A120) --------------------------------------------------------
bool __thiscall Char::IsOscillationTime(Char *this)
{
  Char *v1; // esi@1
  bool result; // al@2
  unsigned int v3; // eax@3
  NiControllerSequence *v4; // eax@3
  double v5; // st7@5
  void (__thiscall *v6)(AbStateInfectee *, AbStateInst *, bool); // eax@5
  int uiFirstCode; // [sp+8h] [bp-8h]@3
  float v8; // [sp+Ch] [bp-4h]@5

  v1 = this;
  if ( this->m_spActor.m_pObject
    && (v3 = Char::GetAniCode(this, 0, (unsigned int *)&uiFirstCode, 0), (v4 = Char::GetSequence(v1, v3)) != 0)
    && v4->m_eState == 1 )
  {
    v5 = v4->m_fLastTime;
    v6 = v1->baseclass_0.vfptr[20].Affect;
    v8 = v5;
    result = ((int (__thiscall *)(Char *, _DWORD))v6)(v1, LODWORD(v8)) != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0063A180) --------------------------------------------------------
bool __thiscall Char::IsAniState(Char *this, NiControllerSequence::AnimState e)
{
  Char *v2; // esi@1
  unsigned int v3; // edi@1
  NiControllerSequence *v4; // eax@4
  bool result; // al@5
  unsigned int v6; // [sp-4h] [bp-Ch]@2

  v2 = this;
  v3 = Char::GetAniCode(this, 0, 0, 0);
  if ( (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 4 )
    v6 = v2->m_uiLayerAniCode[0];
  else
    v6 = v3;
  v4 = Char::GetSequence(v2, v6);
  if ( v4 )
    result = e == v4->m_eState;
  else
    result = 0;
  return result;
}

//----- (0063A1D0) --------------------------------------------------------
bool __thiscall Char::IsShakeCondition(Char *this, OscTarget eCondition)
{
  Char *v2; // esi@1
  bool result; // al@8

  v2 = this;
  switch ( eCondition )
  {
    case 1:
    case 5:
      if ( this->m_bUserCharacter != 1
        || (Party::GetMemberInfo(&g_kParty, this->m_kHandle) || !g_kParty.m_uiTotalMember)
        && (!Party::GetMemberInfo(&g_kParty, v2->m_kHandle) || g_kParty.m_uiTotalMember)
        && v2->m_kHandle != g_pkMainChar->m_kHandle )
        goto LABEL_12;
      result = 0;
      break;
    case 2:
    case 6:
      if ( Party::GetMemberInfo(&g_kParty, this->m_kHandle) && g_kParty.m_uiTotalMember )
        goto LABEL_12;
      result = v2->m_kHandle == g_pkMainChar->m_kHandle;
      break;
    default:
LABEL_12:
      result = 1;
      break;
  }
  return result;
}

//----- (0063A2B0) --------------------------------------------------------
unsigned __int16 __thiscall Char::FindShnIndex(Char *this, NiTextKey *pkKey, unsigned int KeyNum, float fEffectTime)
{
  unsigned int v4; // ebx@1
  unsigned int v5; // ecx@1
  double v6; // st7@2
  char *v7; // eax@3
  int v8; // esi@3
  char v9; // dl@4
  double v10; // st4@7
  unsigned __int16 result; // ax@11
  float TimeGap; // [sp+18h] [bp+Ch]@9

  v4 = KeyNum;
  v5 = 0;
  if ( KeyNum )
  {
    v6 = fEffectTime;
    while ( 1 )
    {
      v7 = pkKey[v5].m_pText;
      v8 = (int)(v7 + 1);
      do
        v9 = *v7++;
      while ( v9 );
      if ( &v7[-v8] == (char *)2 )
      {
        v10 = pkKey[v5].m_fTime >= v6 ? pkKey[v5].m_fTime - v6 : v6 - pkKey[v5].m_fTime;
        TimeGap = v10;
        if ( TimeGap >= 0.0 )
        {
          if ( TimeGap <= 0.00009999999747378752 )
            break;
        }
      }
      ++v5;
      if ( v5 >= v4 )
        goto LABEL_13;
    }
    result = atoi(pkKey[v5].m_pText);
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}

//----- (0063A350) --------------------------------------------------------
void __thiscall Char::ResetView(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p)
{
  Char *v2; // esi@1
  NiNode *v3; // eax@4
  char v4; // al@4
  ActionViewInfo *v5; // eax@5
  AbStateInfecteeVtbl *v6; // edx@7
  AbStateInfecteeVtbl *v7; // eax@8
  char v8; // [sp+4h] [bp-Ch]@2
  float pa; // [sp+18h] [bp+8h]@6

  v2 = this;
  if ( p )
  {
    v8 = p->mode;
    if ( p->mode == 4 )
    {
      Char::SetMode(this, 4);
      v7 = v2->baseclass_0.vfptr;
      v2->m_bIsChangeCampMode = 1;
      v2->m_byMiniHouseSkinID = p->shapedata.notcamp.equip.Equ_Head;
      ((void (__thiscall *)(Char *, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *))v7[1].GetAbstateColor)(v2, p);
    }
    else
    {
      if ( p->mode == 5 )
      {
        Char::SetMode(this, v8);
        v6 = v2->baseclass_0.vfptr;
        v2->m_bIsChangeCampMode = 1;
        v2->m_byMiniHouseSkinID = p->shapedata.notcamp.equip.Equ_Head;
        ((void (__thiscall *)(Char *, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *))v6[1].GetAbstateColor)(v2, p);
        v2->m_bIsSell = LOBYTE(p->shapedata.notcamp.equip.Equ_Boot) != 0;
      }
      else
      {
        Char::SetMode(this, v8);
        v3 = v2->m_spScene.m_pObject;
        v2->m_bIsChangeCampMode = 1;
        v3->baseclass_0.m_uFlags |= 1u;
        v4 = p->emoticon.emoticonid;
        if ( v4 != -1 )
        {
          v5 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID((unsigned __int8)v4, 1);
          if ( v5 )
          {
            ((void (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[14].SetAbStateProperty)(v2, v5->nIndex);
            pa = (double)p->emoticon.emoticonframe / 1000.0;
            ((void (__thiscall *)(Char *, signed int, _DWORD))v2->baseclass_0.vfptr[14].AddAbStateByAbstateIndex)(
              v2,
              1,
              LODWORD(pa));
          }
        }
      }
    }
  }
}

//----- (0063A450) --------------------------------------------------------
void __thiscall Char::StartFadeIn(Char *this)
{
  Char *v1; // esi@1
  NiNode *v2; // ecx@1
  int v3; // eax@2

  v1 = this;
  v2 = this->m_spScene.m_pObject;
  if ( v2 )
  {
    v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v3 )
    {
      while ( (NiRTTI *)v3 != &NsFadeNode::m_RTTI )
      {
        v3 = *(_DWORD *)(v3 + 4);
        if ( !v3 )
        {
          v1->m_pOldParent = 0;
          return;
        }
      }
      NsFadeNode::Start((NsFadeNode *)v1->m_spScene.m_pObject, v1->m_fAnimationUpdateTime, 0);
    }
  }
  v1->m_pOldParent = 0;
}

//----- (0063A4B0) --------------------------------------------------------
void __thiscall Char::StartFadeOut(Char *this)
{
  Char *v1; // esi@1
  NiNode *v2; // ecx@1
  int v3; // eax@2

  v1 = this;
  v2 = this->m_spScene.m_pObject;
  if ( v2 )
  {
    v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v3 )
    {
      while ( (NiRTTI *)v3 != &NsFadeNode::m_RTTI )
      {
        v3 = *(_DWORD *)(v3 + 4);
        if ( !v3 )
        {
          v1->m_pOldParent = 0;
          return;
        }
      }
      NsFadeNode::Start((NsFadeNode *)v1->m_spScene.m_pObject, v1->m_fAnimationUpdateTime, 1);
    }
  }
  v1->m_pOldParent = 0;
}

//----- (0063A510) --------------------------------------------------------
bool __thiscall Char::IsFade(Char *this)
{
  Char *v1; // esi@1
  NiNode *v2; // ecx@1
  int v3; // eax@2
  bool result; // al@5

  v1 = this;
  v2 = this->m_spScene.m_pObject;
  if ( v2 && (v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)()) != 0 )
  {
    while ( (NiRTTI *)v3 != &NsFadeNode::m_RTTI )
    {
      v3 = *(_DWORD *)(v3 + 4);
      if ( !v3 )
        goto LABEL_5;
    }
    result = LODWORD(v1->m_spScene.m_pObject[1].baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) != 0;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (0063A550) --------------------------------------------------------
bool __thiscall Char::IsFadeIn(Char *this)
{
  Char *v1; // esi@1
  NiNode *v2; // ecx@1
  int v3; // eax@2
  bool result; // al@5

  v1 = this;
  v2 = this->m_spScene.m_pObject;
  if ( v2 && (v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)()) != 0 )
  {
    while ( (NiRTTI *)v3 != &NsFadeNode::m_RTTI )
    {
      v3 = *(_DWORD *)(v3 + 4);
      if ( !v3 )
        goto LABEL_5;
    }
    result = LODWORD(v1->m_spScene.m_pObject[1].baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) == 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (0063A590) --------------------------------------------------------
bool __thiscall Char::IsFadeOut(Char *this)
{
  Char *v1; // esi@1
  NiNode *v2; // ecx@1
  int v3; // eax@2
  bool result; // al@5

  v1 = this;
  v2 = this->m_spScene.m_pObject;
  if ( v2 && (v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)()) != 0 )
  {
    while ( (NiRTTI *)v3 != &NsFadeNode::m_RTTI )
    {
      v3 = *(_DWORD *)(v3 + 4);
      if ( !v3 )
        goto LABEL_5;
    }
    result = LODWORD(v1->m_spScene.m_pObject[1].baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]) == 2;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (0063A5D0) --------------------------------------------------------
void __thiscall Char::FadeInfoReset(Char *this)
{
  Char *v1; // esi@1
  NiNode *v2; // ecx@1
  int v3; // eax@2

  v1 = this;
  v2 = this->m_spScene.m_pObject;
  if ( v2 )
  {
    v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v3 )
    {
      while ( (NiRTTI *)v3 != &NsFadeNode::m_RTTI )
      {
        v3 = *(_DWORD *)(v3 + 4);
        if ( !v3 )
          return;
      }
      LOBYTE(v1->m_spScene.m_pObject[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr) = 0;
    }
  }
}

//----- (0063A610) --------------------------------------------------------
bool __thiscall Char::IsMob(Char *this)
{
  bool result; // al@2
  char v2; // al@3

  if ( this->m_bUserCharacter || (v2 = this->m_byMode, v2 == 4) )
    result = 0;
  else
    result = v2 != 5;
  return result;
}

//----- (0063A630) --------------------------------------------------------
bool __thiscall Char::IsNPC(Char *this)
{
  bool result; // al@2
  char v2; // al@5
  MobInfo *v3; // ecx@7

  if ( this->m_byType == 4 )
  {
    result = 1;
  }
  else
  {
    if ( this->m_bUserCharacter || (v2 = this->m_byMode, v2 == 4) || v2 == 5 || (v3 = this->m_pMobinfo) == 0 )
      result = 0;
    else
      result = v3->IsNPC != 0;
  }
  return result;
}

//----- (0063A670) --------------------------------------------------------
bool __thiscall Char::IsLinkGate(Char *this)
{
  Char *v1; // esi@1
  char v2; // al@3
  MobInfo *v3; // eax@5
  MobViewInfo *v4; // esi@8

  v1 = this;
  return (this->m_byType == 4
       || !this->m_bUserCharacter
       && (v2 = this->m_byMode, v2 != 4)
       && v2 != 5
       && (v3 = this->m_pMobinfo) != 0
       && v3->IsNPC)
      && (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].Affect)()
      && (v4 = v1->m_pMobViewInfo) != 0
      && v4->MiniMapIcon == 5;
}

//----- (0063A6D0) --------------------------------------------------------
int __thiscall Char::GetLv(Char *this)
{
  Char *v1; // esi@1
  MobInfo *v2; // eax@2
  int result; // eax@3

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].Affect)() && (v2 = v1->m_pMobinfo) != 0 )
    result = v2->Level;
  else
    result = 1;
  return result;
}

//----- (0063A700) --------------------------------------------------------
void __thiscall Char::ChangeWalkAnimationSpeed(Char *this, float fFreq)
{
  Char *v2; // esi@1
  int v3; // eax@2
  NiControllerSequence *v4; // eax@2

  v2 = this;
  if ( this->m_spActor.m_pObject )
  {
    v3 = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(200000, 1000);
    v4 = Char::GetSequence(v2, v3 + 201000);
    if ( v4 )
      v4->m_fFrequency = fFreq;
  }
}

//----- (0063A740) --------------------------------------------------------
void __thiscall Char::ChangeRunAnimationSpeed(Char *this, float fFreq)
{
  Char *v2; // esi@1
  int v3; // eax@2
  NiControllerSequence *v4; // eax@2

  v2 = this;
  if ( this->m_spActor.m_pObject )
  {
    v3 = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(200000, 2000);
    v4 = Char::GetSequence(v2, v3 + 202000);
    if ( v4 )
      v4->m_fFrequency = fFreq;
  }
}

//----- (0063A780) --------------------------------------------------------
int __thiscall Char::GetCurEmotionCode(Char *this)
{
  NiActorManager *v1; // edx@2
  int result; // eax@3

  if ( !this->m_eEmotionState
    || (v1 = this->m_spActor.m_pObject) == 0
    || (result = this->m_uiCurEmotionCode, result != v1->m_eCurID) )
    result = -1;
  return result;
}

//----- (0063A7B0) --------------------------------------------------------
float __thiscall Char::GetPausedEmotionFrame(Char *this)
{
  NiActorManager *v1; // edx@1
  double v2; // st7@2
  NiControllerSequence *v3; // eax@5
  float result; // st7@7

  v1 = this->m_spActor.m_pObject;
  if ( v1
    && this->m_uiCurEmotionCode == v1->m_eCurID
    && this->m_eEmotionState == 2
    && (v3 = Char::GetSequence(this, this->m_uiCurEmotionCode)) != 0 )
    v2 = v3->m_fLastTime;
  else
    v2 = -3.4028235e38;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (0063A7F0) --------------------------------------------------------
WeaponTypeEnum __thiscall Char::GetWeaponType(Char *this)
{
  Char *v1; // esi@1
  MobInfo *v2; // esi@2
  WeaponTypeEnum result; // eax@3
  ItemInfo *v4; // eax@5

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].Affect)() )
  {
    v2 = v1->m_pMobinfo;
    if ( v2 )
      result = v2->WeaponType;
    else
      result = 1;
  }
  else
  {
    v4 = CharShape::GetEquippedWeaponItemInfo(&v1->m_kCharShape);
    if ( v4 )
      result = v4->WeaponType;
    else
      result = 7;
  }
  return result;
}

//----- (0063A840) --------------------------------------------------------
NiActorManager *__thiscall Char::GetActor(Char *this)
{
  return *(NiActorManager **)&this->m_acLinkGateName[22];
}

//----- (0063A850) --------------------------------------------------------
void __thiscall Char::SetAnimationOffset(Char *this, float fOffset)
{
  Char *v2; // edi@1
  unsigned int v3; // eax@2
  NiControllerSequence *v4; // eax@2

  v2 = this;
  if ( *(_DWORD *)&this->m_acLinkGateName[22] )
  {
    v3 = Char::GetAniCode((Char *)((char *)this - 84), 0, 0, 0);
    v4 = Char::GetSequence((Char *)((char *)v2 - 84), v3);
    if ( v4 )
      v4->m_fOffset = fOffset - *(float *)&v2->m_kCharShape.m_SpactralGlowEffect.m_kShaderName1.baseclass_0._Mysize;
  }
}

//----- (0063A890) --------------------------------------------------------
void __thiscall Char::AddPrivateStoreBD(Char *this)
{
  ScreenBDMgr::AddPrivateStoreBD(&g_kScrnBDMgr, this->m_kHandle);
}

//----- (0063A8B0) --------------------------------------------------------
void __thiscall Char::RemovePrivateStoreBD(Char *this)
{
  PrivateStoreBD *v1; // eax@1

  v1 = ScreenBDMgr::GetPrivateStoreBD(&g_kScrnBDMgr, this->m_kHandle);
  ScreenBDMgr::RemovePrivateStoreBD(&g_kScrnBDMgr, v1);
}

//----- (0063A8D0) --------------------------------------------------------
char *__thiscall Char::GetLinkGateName(Char *this)
{
  Char *v1; // esi@1
  bool v2; // zf@1
  char *result; // eax@1

  v1 = this;
  v2 = Char::IsLinkGate(this) == 0;
  result = v1->m_acLinkGateName;
  if ( v2 )
    result = (char *)&unk_9C3047;
  return result;
}

//----- (0063A8F0) --------------------------------------------------------
void __thiscall Char::SetLinkGateName(Char *this, char *pcLinkGateName)
{
  Char *v2; // esi@1
  char *v3; // eax@2
  char v4; // cl@3

  v2 = this;
  if ( Char::IsLinkGate(this) )
  {
    v3 = pcLinkGateName;
    do
    {
      v4 = *v3;
      v3[v2->m_acLinkGateName - pcLinkGateName] = *v3;
      ++v3;
    }
    while ( v4 );
  }
}

//----- (0063A920) --------------------------------------------------------
void __thiscall Char::UpdateWeaponEquipState(Char *this)
{
  Char *v1; // esi@1
  unsigned __int16 v2; // ax@12
  int v3; // eax@14
  int v4; // edi@15
  int v5; // ebx@15
  int v6; // edi@16
  int v7; // edx@19
  int v8; // edi@22

  v1 = this;
  if ( this->m_kAttackEquipBackup.iBackupCase )
  {
    if ( this->m_kAttackEquipBackup.bUnEquipLeftHand )
      CharShape::UnEquip(&this->m_kCharShape, 0xAu);
    if ( v1->m_kAttackEquipBackup.bUnEquipRightHand )
      CharShape::UnEquip(&v1->m_kCharShape, 0xCu);
    if ( v1->m_kAttackEquipBackup.bUnEquipLeftHandAcc )
      CharShape::UnEquip(&v1->m_kCharShape, 0xBu);
    if ( v1->m_kAttackEquipBackup.bUnEquipRightHandAcc )
      CharShape::UnEquip(&v1->m_kCharShape, 0xDu);
    if ( v1->m_kAttackEquipBackup.bUnEquipShieldAcc )
      CharShape::UnEquip(&v1->m_kCharShape, 0x1Du);
    v2 = v1->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID;
    if ( v2 != -1 )
    {
      CharShape::Equip(&v1->m_kCharShape, v2, v1->m_kAttackEquipBackup.kCase1.byPrevRightHandUpgrade);
      v1->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
      CharShape::ReEquipWeaponCostume(&v1->m_kCharShape);
    }
    v3 = v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID;
    if ( (_WORD)v3 != -1 )
    {
      v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v5 = v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v3) )
      {
        if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
        {
          v7 = *(_DWORD *)(v4 + 196);
          if ( *(_DWORD *)(v7 + 4 * v5) )
            v6 = *(_DWORD *)(v7 + 4 * v5);
          else
            v6 = 0;
        }
        else
        {
          v6 = 0;
        }
      }
      else
      {
        v6 = 0;
      }
      CharShape::Equip(
        &v1->m_kCharShape,
        v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID,
        v1->m_kAttackEquipBackup.kCase1.byPrevLeftHandUpgrade);
      v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
      v8 = *(_DWORD *)(v6 + 102) - 5;
      if ( v8 )
      {
        if ( v8 == 2 )
          CharShape::ReEquipShieldCostume(&v1->m_kCharShape);
      }
      else
      {
        CharShape::ReEquipWeaponCostume(&v1->m_kCharShape);
      }
    }
    if ( v1->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID != -1 )
    {
      CharShape::Equip(&v1->m_kCharShape, v1->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID);
      v1->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID = -1;
    }
    if ( v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandAccItemID != -1 )
    {
      CharShape::Equip(&v1->m_kCharShape, v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandAccItemID);
      v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandAccItemID = -1;
    }
    if ( v1->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID != -1 )
    {
      CharShape::Equip(&v1->m_kCharShape, v1->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID);
      v1->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID = -1;
      CharShape::ReEquipShieldCostume(&v1->m_kCharShape);
    }
    v1->m_kAttackEquipBackup.iBackupCase = 0;
    v1->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
    v1->m_kAttackEquipBackup.kCase1.byPrevRightHandUpgrade = 0;
    v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
    v1->m_kAttackEquipBackup.kCase1.byPrevLeftHandUpgrade = 0;
    *(_DWORD *)&v1->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID = -1;
    *(_DWORD *)&v1->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
    v1->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID = -1;
    v1->m_kAttackEquipBackup.bUnEquipShieldAcc = 0;
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0063AB60) --------------------------------------------------------
void __thiscall Char::UpdateActbyEquip(Char *this)
{
  Char *v1; // esi@1
  int v2; // eax@4
  int ui2ndCode; // [sp+4h] [bp-8h]@3
  int ui1stCode; // [sp+8h] [bp-4h]@3

  v1 = this;
  if ( this->m_spActor.m_pObject && !(unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].SetAbStateProperty)() )
  {
    Char::GetAniCode(v1, 0, (unsigned int *)&ui1stCode, (unsigned int *)&ui2ndCode);
    if ( v1->m_uiLayerAniCode[1] == NiActorManager::INVALID_SEQUENCE_ID )
    {
      v2 = ((int (__thiscall *)(Char *, int, int))v1->baseclass_0.vfptr[15].Deaffect)(v1, ui1stCode, ui2ndCode);
      v1->baseclass_0.vfptr[10].SetAbStateProperty(
        (AbStateInfectee *)v1,
        (ABSTATEINDEX)(ui2ndCode + ui1stCode + v2),
        0,
        0);
    }
  }
}
// 9EEF00: using guessed type const unsigned int NiActorManager__INVALID_SEQUENCE_ID;

//----- (0063ABD0) --------------------------------------------------------
void __thiscall Char::UpdateActionEventByNet(Char *this, unsigned int dwEventActionCode, char byFlag)
{
  if ( this->m_spActor.m_pObject->m_eTargetID != dwEventActionCode )
  {
    this->m_fActionTimer = 0.0;
    this->m_byCharNPCActionState = 2;
    this->m_byEventActionFlag = byFlag;
    Char::ActNonWeightAction(this, dwEventActionCode);
  }
}

//----- (0063AC10) --------------------------------------------------------
bool __thiscall Char::IsCharNPC(Char *this)
{
  char v1; // al@3
  MobInfo *v2; // eax@5
  bool result; // al@7
  MobViewInfo *v4; // ecx@8
  bool v5; // bl@8
  unsigned __int16 v6; // ax@9

  if ( this->m_byType == 4
    || !this->m_bUserCharacter && (v1 = this->m_byMode, v1 != 4) && v1 != 5 && (v2 = this->m_pMobinfo) != 0 && v2->IsNPC )
  {
    v4 = this->m_pMobViewInfo;
    v5 = 0;
    if ( v4 )
    {
      v6 = v4->NpcViewIndex;
      if ( v6 )
      {
        if ( IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::GetByID(v6, 1) )
          v5 = 1;
      }
    }
    result = v5;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0063AC80) --------------------------------------------------------
bool __thiscall Char::IsCharMob(Char *this)
{
  MobInfo *v1; // eax@1
  MobViewInfo *v2; // ecx@2
  unsigned __int16 v3; // ax@4

  v1 = this->m_pMobinfo;
  return v1
      && (v2 = this->m_pMobViewInfo) != 0
      && !v1->IsNPC
      && (v3 = v2->NpcViewIndex) != 0
      && IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::GetByID(v3, 1);
}

//----- (0063ACC0) --------------------------------------------------------
bool __thiscall Char::HaveEventNPCAction(Char *this)
{
  int v1; // esi@1
  int v2; // edi@1
  bool result; // al@2
  int v4; // edx@4

  v1 = ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable;
  v2 = this->m_pMobViewInfo->NpcViewIndex;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable,
                          this->m_pMobViewInfo->NpcViewIndex)
    && (unsigned __int16)v2 <= *(_WORD *)(v1 + 200)
    && (v4 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v4 + 4 * v2)) )
    result = *(_BYTE *)(*(_DWORD *)(v4 + 4 * v2) + 23) != 0;
  else
    result = v17 != 0;
  return result;
}
// A97F60: using guessed type int ITableBase_CharNPC_ViewInfo_NPCViewInfoTab___ms_pkTable;

//----- (0063AD20) --------------------------------------------------------
char __thiscall Char::MakeCharNpcShape(Char *this, CharNPC_ViewInfo *pViewInfo)
{
  CharNPC_ViewInfo *v2; // esi@1
  CharNPC_ViewInfo::BaseCharClass v3; // eax@1
  Char *v4; // edi@1
  char v5; // bl@1
  char v7; // cl@3
  char v8; // al@9
  char v9; // cl@10
  char v10; // dl@10
  char v11; // cl@10
  char v12; // al@10
  unsigned __int8 v13; // al@12
  unsigned __int16 v14; // si@13

  v2 = pViewInfo;
  v3 = pViewInfo->Class;
  v4 = this;
  v5 = 64;
  if ( v3 == 5 )
    return 64;
  v7 = 0;
  switch ( v3 )
  {
    case 0:
      v5 = 1;
      break;
    case 1:
      v5 = 6;
      break;
    case 2:
      v5 = 11;
      break;
    case 3:
      v5 = 16;
      break;
    case 4:
      v7 = 1;
      break;
    default:
      break;
  }
  v8 = (unsigned __int8)pViewInfo & 0xFC;
  LOBYTE(pViewInfo) = (unsigned __int8)pViewInfo & 0xFC;
  if ( v7 )
  {
    if ( g_pkMainChar == (Char *)-776 )
      return 64;
    v13 = (v8 ^ 4 * g_pkMainChar->m_kCharShape.m_kClassID) & 0x7C ^ v8;
    LOBYTE(pViewInfo) = v13;
    BYTE3(pViewInfo) = g_pkMainChar->m_kCharShape.m_byFace;
    v5 = (v13 >> 2) & 0x1F;
    LOBYTE(pViewInfo) = v13 & 0x7F | (g_pkMainChar->m_kCharShape.m_byGender << 7);
    BYTE2(pViewInfo) = g_pkMainChar->m_kCharShape.m_byHairColor;
    v12 = g_pkMainChar->m_kCharShape.m_byHairType;
  }
  else
  {
    v9 = LOBYTE(v2->Gender);
    BYTE3(pViewInfo) = v2->FaceShape;
    v10 = v2->HairColor;
    v11 = ((v8 ^ 4 * v5) & 0x7C ^ v8) & 0x7F | (v9 << 7);
    v12 = v2->HairType;
    LOBYTE(pViewInfo) = v11;
    BYTE2(pViewInfo) = v10;
  }
  v14 = v4->m_kCharShape.m_kMobID;
  BYTE1(pViewInfo) = v12;
  CharShape::SetShapeInfo(&v4->m_kCharShape, (PROTO_AVATAR_SHAPE_INFO *)&pViewInfo);
  v4->m_kCharShape.m_kMobID = v14;
  return v5;
}

//----- (0063AE30) --------------------------------------------------------
void __thiscall Char::ClearBlinkingInfo(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  this->m_stBlinkingInfo.byState = 0;
  this->m_stBlinkingInfo.dwTime = 0;
  this->m_kCharShape.m_byEyeState = 17;
  CharShape::EnableEyeShape(&this->m_kCharShape, 0);
  v1->m_stBlinkingInfo.dwTime = timeGetTime();
}

//----- (0063AE70) --------------------------------------------------------
void __thiscall Char::UpdateEyeBlinking(Char *this)
{
  Char *v1; // esi@1
  DWORD v2; // edi@4
  char v3; // [sp-Ch] [bp-14h]@7
  unsigned int puiFirstCode; // [sp+4h] [bp-4h]@1

  v1 = this;
  Char::GetAniCode(this, 0, &puiFirstCode, 0);
  if ( puiFirstCode == 400000 || puiFirstCode == 500000 )
  {
    CharShape::EnableEyeShape(&v1->m_kCharShape, 17);
    v1->m_stBlinkingInfo.byState = 1;
    return;
  }
  v2 = timeGetTime();
  if ( !v1->m_stBlinkingInfo.byState )
  {
    if ( !v1->m_stBlinkingInfo.dwTime )
    {
LABEL_12:
      v1->m_stBlinkingInfo.dwTime = timeGetTime();
      return;
    }
    if ( v2 - v1->m_stBlinkingInfo.dwTime <= 500 * (rand() % 5 + 4) )
      return;
    v1->m_stBlinkingInfo.byState = 1;
    v3 = 17;
LABEL_11:
    CharShape::EnableEyeShape(&v1->m_kCharShape, v3);
    goto LABEL_12;
  }
  if ( v1->m_stBlinkingInfo.byState == 1 && v2 - v1->m_stBlinkingInfo.dwTime > 0x78 )
  {
    v1->m_stBlinkingInfo.byState = 0;
    v3 = 0;
    goto LABEL_11;
  }
}

//----- (0063AF30) --------------------------------------------------------
bool __thiscall Char::ModifyExistDyingSeq(Char *this, unsigned __int16 hTargetHandle)
{
  NiTListItem<AttackSequence *> *v2; // edi@1
  AttackSequence *v3; // eax@2
  NiTListItem<DamageInfo *> *v4; // eax@3
  DamageInfo *v5; // esi@4
  unsigned int v6; // edx@6
  NiTListItem<SkillSequence *> *v7; // edx@10
  SkillSequence *v8; // eax@11
  NiTListItem<DamageInfo *> *v9; // eax@12
  unsigned int v10; // ecx@15
  unsigned __int16 v12; // [sp-4h] [bp-Ch]@20

  v2 = this->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_pkTail;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkPrev;
      if ( v3 )
      {
        v4 = v3->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail;
        if ( v4 )
          break;
      }
LABEL_9:
      if ( !v2 )
        goto LABEL_10;
    }
    while ( 1 )
    {
      v5 = v4->m_element;
      v4 = v4->m_pkPrev;
      if ( v5 )
      {
        if ( v5->kTargetHandle == hTargetHandle )
        {
          v6 = v5->uiDamage;
          if ( (v6 & 0x80000000u) != 0 )
            return 0;
          if ( v6 & 0x4080FFFF )
            break;
        }
      }
      if ( !v4 )
        goto LABEL_9;
    }
    v12 = v5->kTargetHandle;
  }
  else
  {
LABEL_10:
    v7 = this->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_pkTail;
    if ( !v7 )
      return 1;
    while ( 1 )
    {
      v8 = v7->m_element;
      v7 = v7->m_pkPrev;
      if ( v8 )
      {
        v9 = v8->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail;
        if ( v9 )
          break;
      }
LABEL_18:
      if ( !v7 )
        return 1;
    }
    while ( 1 )
    {
      v5 = v9->m_element;
      v9 = v9->m_pkPrev;
      if ( v5 )
      {
        if ( v5->kTargetHandle == hTargetHandle )
        {
          v10 = v5->uiDamage;
          if ( (v10 & 0x80000000u) != 0 )
            return 0;
          if ( v10 & 0x4080FFFF )
            break;
        }
      }
      if ( !v9 )
        goto LABEL_18;
    }
    v12 = v5->kTargetHandle;
  }
  CharMgr::GetChar(&g_kCharMgr, v12)->m_bWillDead = 1;
  v5->uiDamage |= 0x80000000u;
  v5->kTargetRestHP = 0;
  return 0;
}

//----- (0063B010) --------------------------------------------------------
char __thiscall Char::GetClass(Char *this)
{
  char result; // al@1

  result = this->m_BeforeMetamorphosisClass;
  if ( !result )
    result = this->m_kCharShape.m_kClassID;
  return result;
}

//----- (0063B030) --------------------------------------------------------
bool __thiscall Char::IsMetamorphosis(Char *this)
{
  return this->m_bUserCharacter
      && -1 != this->m_kCharShape.m_kMobID
      && (this->m_BeforeMetamorphosisClass || this->m_kCharShape.m_kClassID);
}

//----- (0063B070) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetPos(Char *this)
{
  return &this->m_spScene.m_pObject->baseclass_0.m_kLocal.m_Translate;
}

//----- (0063B080) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetMapHeigthPos(Char *this)
{
  return &this->m_spScene.m_pObject->baseclass_0.m_kLocal.m_Translate;
}

//----- (0063B090) --------------------------------------------------------
void __thiscall Char::SaveSkillSwingStartCurTime(Char *this)
{
  this->m_fSkillActstep_Swing_Time = Timer::ms_fCurTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063B0A0) --------------------------------------------------------
bool __thiscall Char::IsRunSkillSequence(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  if ( 0.0 != this->m_fSkillActstep_Swing_Time )
  {
    if ( AttackSequenceManager::IsSkillSequenceEmpty(&this->baseclass_54)
      && Timer::ms_fCurTime < v1->m_fSkillActstep_Swing_Time + 3.0 )
      return 0;
    v1->m_fSkillActstep_Swing_Time = 0.0;
  }
  return 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063B0F0) --------------------------------------------------------
void __thiscall Char::SetMobID(Char *this, unsigned __int16 kMobID)
{
  Char *v2; // ebx@1
  int v3; // esi@1
  MobInfo *v4; // eax@2
  int v5; // ecx@5
  int v6; // esi@8
  int v7; // edx@11

  v2 = this;
  this->m_kCharShape.m_kMobID = kMobID;
  v3 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          kMobID) )
  {
    if ( kMobID <= *(_WORD *)(v3 + 200) )
    {
      v5 = *(_DWORD *)(v3 + 196);
      if ( *(_DWORD *)(v5 + 4 * kMobID) )
        v4 = *(MobInfo **)(v5 + 4 * kMobID);
      else
        v4 = 0;
    }
    else
    {
      v4 = 0;
    }
  }
  else
  {
    v4 = 0;
  }
  v2->m_pMobinfo = v4;
  v6 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                          kMobID)
    && kMobID <= *(_WORD *)(v6 + 200)
    && (v7 = *(_DWORD *)(v6 + 196), *(_DWORD *)(v7 + 4 * kMobID)) )
    v2->m_pMobViewInfo = *(MobViewInfo **)(v7 + 4 * kMobID);
  else
    v2->m_pMobViewInfo = 0;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (0063B1A0) --------------------------------------------------------
bool __thiscall Char::IsRangeAttChar(Char *this)
{
  Char *v1; // esi@1
  char v2; // al@2
  bool result; // al@5

  v1 = this;
  if ( this->m_bUserCharacter )
  {
    v2 = this->m_BeforeMetamorphosisClass;
    if ( !v2 )
      v2 = this->m_kCharShape.m_kClassID;
    switch ( v2 )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        result = 0;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        result = 0;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        result = 1;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        result = 0;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        result = 0;
        break;
      case 0x1A:
      case 0x1B:
        result = 0;
        break;
      default:
        result = 0;
        break;
    }
  }
  else
  {
    if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].Affect)() && v1->m_pMobinfo )
      result = v1->m_pMobViewInfo->AttackType == 1;
    else
      result = 0;
  }
  return result;
}

//----- (0063B2C0) --------------------------------------------------------
int __thiscall Char::GetHitTimeCount(Char *this, unsigned int uiEventCode)
{
  int result; // eax@2
  int v3; // ecx@4
  unsigned int v4; // esi@5
  unsigned int v5; // eax@5
  int v6; // edi@6
  const char *v7; // edx@7
  int HitCount; // [sp+8h] [bp+8h]@4

  if ( uiEventCode )
  {
    result = (int)Char::GetSequence(this, uiEventCode);
    if ( result )
    {
      v3 = *(_DWORD *)(result + 32);
      HitCount = 0;
      if ( v3 )
      {
        v4 = *(_DWORD *)(v3 + 12);
        v5 = 0;
        if ( v4 )
        {
          v6 = *(_DWORD *)(v3 + 16);
          do
          {
            v7 = *(const char **)(v6 + 8 * v5 + 4);
            if ( v7 )
            {
              if ( !strcmp("Hit", v7) )
                ++HitCount;
            }
            ++v5;
          }
          while ( v5 < v4 );
        }
      }
      result = HitCount;
    }
  }
  else
  {
    result = this->m_lstfHitTime.baseclass_0.baseclass_0._Mysize;
  }
  return result;
}

//----- (0063B350) --------------------------------------------------------
unsigned int __thiscall Char::GetEventCodebyAttackNO(Char *this, char byActionCode)
{
  unsigned int result; // eax@1

  result = 0;
  switch ( byActionCode )
  {
    case 0:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 1000) + 301000;
      break;
    case 1:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 2000) + 302000;
      break;
    case 2:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 3000) + 303000;
      break;
    case 3:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 1500) + 301500;
      break;
    case 4:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 2500) + 302500;
      break;
    case 5:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 3500) + 303500;
      break;
    case 6:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 7000) + 307000;
      break;
    case 7:
      result = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(300000, 8000) + 308000;
      break;
    default:
      return result;
  }
  return result;
}

//----- (0063B480) --------------------------------------------------------
void __thiscall Char::SetItemAutoPickState(Char *this, bool bAutoPickItem)
{
  this->m_kCharShape.m_bAutoPickItem = bAutoPickItem;
  CharShape::SetMiniMonEffect(&this->m_kCharShape, bAutoPickItem);
}

//----- (0063B4A0) --------------------------------------------------------
void __thiscall Char::SetItemAutoUseState(Char *this, bool bAutoUseItem)
{
  this->m_kCharShape.m_bAutoUseItem = bAutoUseItem;
  CharShape::SetMinimonAutoUseEff(&this->m_kCharShape, bAutoUseItem);
}

//----- (0063B4C0) --------------------------------------------------------
void __thiscall Char::SetAniMationStop(Char *this, bool b)
{
  Char *v2; // esi@1

  v2 = this;
  if ( b == 1 )
  {
    if ( JumpProcessor::IsJump(&this->m_kJumpProcessor) )
      *(_WORD *)&v2->m_bAniStop = 256;
    else
      v2->m_bAniStop = 1;
  }
  else
  {
    if ( !b )
    {
      if ( Char::IsActRunning(this) && !Char::CheckActState(v2, 500000) )
        ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
      if ( JumpProcessor::IsJump(&v2->m_kJumpProcessor) )
        ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
      v2->m_bAniStop = 0;
    }
  }
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
}

//----- (0063B550) --------------------------------------------------------
void __thiscall Char::SetAbstateDeaffect(Char *this, AbStateInst *pkAbState)
{
  int v2; // ebx@1
  GameFrameWork *v3; // esi@1
  Char *v4; // edi@1
  int v5; // edx@3
  int v6; // eax@4
  NiTListItem<AbStateInst *> *v7; // edi@14
  AbStateInst *v8; // esi@15
  PgFrameWork *v9; // eax@24
  PgFrameWork *v10; // esi@24
  void (__thiscall *v11)(AttackSequenceManager *, float); // eax@27
  NiTListItem<AbStateInst *> *v12; // eax@31
  AbStateInst *v13; // esi@34
  AbnormalStateViewInfo *v14; // ebx@35
  Effect *v15; // eax@38
  unsigned int *v16; // esi@38
  AbnormalStateInfo *pkAbstateInfo; // [sp+24h] [bp-4h]@35
  NiTListItem<AbStateInst *> *kIter; // [sp+30h] [bp+8h]@34

  v2 = pkAbState->kID;
  v3 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                          ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                          pkAbState->kID) )
  {
    if ( (unsigned __int16)v2 <= LOWORD(v3->m_ResList[2].m_eAspect) )
    {
      v5 = *(_DWORD *)&v3->m_ResList[2].m_bCheckAdd;
      if ( *(_DWORD *)(v5 + 4 * v2) )
      {
        v6 = *(_DWORD *)(v5 + 4 * v2);
        if ( v6 )
        {
          switch ( *(_DWORD *)(v6 + 34) )
          {
            case 0x173:
              if ( !v4->m_bClearChar )
              {
                v4->baseclass_0.m_kAbStateProperty.bVisible = 1;
                CharShape::SetSPactralGlowEnable(&v4->m_kCharShape, 0);
                if ( (unsigned __int8)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[15].SetAbStateProperty)(v4)
                  && CSpactralGlow_Shader_Controller::IsEnable(&v4->m_kRidePetCtl.m_kShaderCtrl) )
                  CSpactralGlow_Shader_Controller::SetEnable(&v4->m_kRidePetCtl.m_kShaderCtrl, 0);
                if ( (unsigned __int8)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v4) )
                  CSpactralGlow_Shader_Controller::SetEnable(&v4->m_kRestHouseShader, 0);
                if ( v4 != g_pkMainChar )
                {
                  if ( *(_DWORD *)&v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] > 0 )
                  {
                    v7 = v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
                    while ( v7 )
                    {
                      v8 = v7->m_element;
                      v7 = v7->m_pkNext;
                      if ( v8 && v8->pkLoopingEffect )
                      {
                        if ( !(unsigned __int8)((int (__stdcall *)(_DWORD))v8->pkLoopingEffect->baseclass_0.vfptr[19].__vecDelDtor)(LODWORD(Timer::ms_fCurTime)) )
                          ((void (__stdcall *)(signed int))v8->pkLoopingEffect->baseclass_0.vfptr[21].__vecDelDtor)(1);
                      }
                    }
                  }
                }
              }
              break;
            case 0x176:
              CharShape::SetGTIBomb(&v4->m_kCharShape, 0);
              if ( !v4->m_bClearChar )
                CharShape::RestoreHatAcc(&v4->m_kCharShape);
              break;
            case 0x174:
              if ( v4 == g_pkMainChar )
              {
                v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                v10 = v9;
                if ( v9 )
                {
                  if ( !v4->m_bClearChar )
                  {
                    MiniMapWin::ClearGTEnemyPos(*(MiniMapWin **)&v9[15].m_bInit);
                    MiniMapWin::StopScanEffect(*(MiniMapWin **)&v10[15].m_bInit);
                  }
                }
              }
              break;
            case 0x16D:
              v11 = v4->baseclass_54.vfptr->SetAnimationSpeed;
              v4->m_bGtiSpeed = 0;
              ((void (__stdcall *)(_DWORD))v11)(1.0);
              break;
            case 0x172:
              if ( !v4->m_bClearChar )
              {
                if ( AbStateInfectee::IsInList(&v4->baseclass_0, STA_GTIBOMB1) )
                {
                  if ( *(_DWORD *)&v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
                  {
                    v12 = v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
                    if ( v12 )
                    {
                      while ( 1 )
                      {
                        v13 = v12->m_element;
                        kIter = v12->m_pkNext;
                        if ( v13 )
                        {
                          pkAbstateInfo = IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::GetByID(
                                            v13->kID,
                                            1);
                          v14 = IIDTableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned_short>::GetByID(
                                  v13->kID,
                                  1);
                          if ( pkAbstateInfo )
                          {
                            if ( v14 )
                            {
                              if ( pkAbstateInfo->AbStataIndex == 374 )
                              {
                                v15 = v13->pkLoopingEffect;
                                v16 = (unsigned int *)&v13->pkLoopingEffect;
                                if ( v15 )
                                {
                                  EffectMgr::RemoveEffect(&g_kEffectMgr, v15);
                                  *v16 = 0;
                                  EffectMgr::CreateAttachEffect(
                                    &g_kEffectMgr,
                                    v16,
                                    v14->LoopEffect,
                                    v4,
                                    v14->LoopEffPos,
                                    Timer::ms_fCurTime,
                                    1,
                                    0,
                                    0,
                                    1);
                                  *(_BYTE *)(*v16 + 140) = 1;
                                }
                              }
                            }
                          }
                        }
                        if ( !kIter )
                          break;
                        v12 = kIter;
                      }
                    }
                  }
                }
              }
              break;
            default:
              return;
          }
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063B840) --------------------------------------------------------
void __thiscall Char::GaleOfRun(Char *this, float fTime)
{
  Char *v2; // esi@1

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[7].GetAbstateColor)() && v2->m_bGtiSpeed )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kGtiSpeedInterval, fTime) )
    {
      EffectMgr::CreateAttachEffect(
        &g_kEffectMgr,
        (unsigned int *)&fTime,
        "Sta_GTI_Speed",
        v2,
        None,
        Timer::ms_fCurTime,
        0,
        0,
        1,
        1);
      CNSTimer_Interval::ReSet(&v2->m_kGtiSpeedInterval, Timer::ms_fCurTime);
      v2->m_kGtiSpeedInterval.m_fCheckTime = 0.039999999;
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063B8D0) --------------------------------------------------------
void __thiscall Char::RisingChar(Char *this, float fTime)
{
  Char *v2; // esi@1
  double v3; // st7@1
  int v4; // eax@2
  double v5; // st6@3
  float v6; // edi@10
  float v7; // ST04_4@10
  double v8; // st7@10
  NiNode *v9; // esi@10
  float v10; // edx@10
  NiPoint3 CharPos; // [sp+10h] [bp-10h]@2
  float fMoveTime; // [sp+1Ch] [bp-4h]@1
  float fTimea; // [sp+28h] [bp+8h]@3

  v2 = this;
  fMoveTime = this->m_fSpeed / this->m_fAcceleration;
  v3 = fMoveTime;
  if ( fMoveTime + fMoveTime >= this->m_fCountTime )
  {
    fMoveTime = this->m_RisingTimer.m_fObjectTime;
    v5 = fTime;
    fTimea = fTime - this->m_RisingTimer.m_fStartTime;
    this->m_RisingTimer.m_fObjectTime = fTimea;
    this->m_RisingTimer.m_fElapsedTime = fTimea - fMoveTime;
    if ( this->m_bAirTime )
    {
      if ( this->m_RisingTimer.m_fObjectTime > this->m_fGroudStrikeKeepTime - v3 )
      {
        this->m_bAirTime = 0;
        this->m_bDownTime = 1;
        this->m_RisingTimer.m_fStartTime = v5;
        this->m_RisingTimer.m_fObjectTime = 0.0;
        this->m_RisingTimer.m_fElapsedTime = 0.0;
      }
    }
    else
    {
      if ( this->m_RisingTimer.m_fObjectTime > v3 )
      {
        if ( !this->m_bDownTime )
          this->m_bAirTime = 1;
      }
      this->m_fCountTime = this->m_RisingTimer.m_fElapsedTime + this->m_fCountTime;
    }
    v6 = this->m_MovePoint.y;
    v7 = this->m_fCountTime;
    CharPos.z = this->m_MovePoint.z;
    v8 = Char::GetCharZPos(this, v7) + CharPos.z;
    v9 = v2->m_spScene.m_pObject;
    v9->baseclass_0.m_kLocal.m_Translate.x = v10;
    v9->baseclass_0.m_kLocal.m_Translate.y = v6;
    CharPos.z = v8;
    v9->baseclass_0.m_kLocal.m_Translate.z = CharPos.z;
  }
  else
  {
    v4 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    LODWORD(CharPos.x) = *(_DWORD *)v4;
    LODWORD(CharPos.y) = *(_DWORD *)(v4 + 4);
    LODWORD(CharPos.z) = *(_DWORD *)(v4 + 8);
    World::GetAdvGroundPos(&g_kWorld, CharPos.x, CharPos.y, &CharPos);
    v2->baseclass_0.vfptr[5].__vecDelDtor((AbStateInfectee *)v2, (unsigned int)&CharPos);
    v2->m_fCountTime = 0.0;
    v2->m_bShockWave = 0;
    *(_WORD *)&v2->m_bAirTime = 0;
  }
}

//----- (0063BA60) --------------------------------------------------------
unsigned int __thiscall Char::GetLvGapIndex(Char *this, int iLv)
{
  AbStateInfecteeVtbl *v2; // eax@1
  int (*v3)(void); // edx@2
  int v4; // ecx@4
  unsigned int result; // eax@4

  v2 = this->baseclass_0.vfptr;
  if ( this->m_bUserCharacter )
    v3 = (int (*)(void))v2[20].AddAbStateByAbstateIndex;
  else
    v3 = (int (*)(void))v2[5].Deaffect;
  v4 = iLv - v3();
  result = 0;
  while ( v4 < LevelGapValue[result] )
  {
    ++result;
    if ( result >= 5 )
      return 5;
  }
  return result;
}

//----- (0063BAA0) --------------------------------------------------------
void __thiscall Char::SetActionEffectStartTime(Char *this)
{
  Char *v1; // esi@1
  unsigned int v2; // edi@1
  NiControllerSequence *v3; // eax@4
  unsigned int v4; // [sp-4h] [bp-Ch]@2

  v1 = this;
  v2 = Char::GetAniCode(this, 0, 0, 0);
  if ( (int)v1->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v1) == 4 )
    v4 = v1->m_uiLayerAniCode[0];
  else
    v4 = v2;
  v3 = Char::GetSequence(v1, v4);
  if ( v3 && v1->m_uiSkillActStep )
    v1->m_kActionMgr.m_fEffectStartTime = v3->m_fEndKeyTime + Timer::ms_fCurTime - v3->m_fLastScaledTime;
  else
    v1->m_kActionMgr.m_fEffectStartTime = Timer::ms_fCurTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063BB10) --------------------------------------------------------
bool __thiscall Char::Init(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p)
{
  Char *v2; // ebx@1
  int v3; // edx@2
  int v4; // eax@2
  int v5; // ecx@2
  int v6; // edx@2
  AbStateInfecteeVtbl *v7; // eax@2
  AbStateInfectee::AbstateColor (__thiscall *v8)(AbStateInfectee *); // edx@2
  char v9; // dl@2
  Name3 *v10; // eax@2
  MapInfo *v11; // eax@2
  char v12; // al@4
  int v14; // eax@7
  char v15; // al@8
  STREETBOOTH_SIGNBOARD v16; // [sp-18h] [bp-5Ch]@11
  __int16 v17; // [sp+4h] [bp-40h]@11
  Name3 *v18; // [sp+8h] [bp-3Ch]@2
  Name3 result; // [sp+18h] [bp-2Ch]@2
  char acName[21]; // [sp+28h] [bp-1Ch]@2
  unsigned int v21; // [sp+40h] [bp-4h]@1
  int v22; // [sp+44h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v2 = this;
  this->m_BeforeMetamorphosisClass = 0;
  if ( !p )
    return 0;
  this->m_kHandle = p->handle;
  v3 = *(_DWORD *)&p->charid.n5_name[4];
  v4 = *(_DWORD *)&p->charid.n5_name[8];
  *(_DWORD *)acName = *(_DWORD *)&p->charid.n5_name[0];
  v5 = *(_DWORD *)&p->charid.n5_name[12];
  *(_DWORD *)&acName[4] = v3;
  v6 = *(_DWORD *)&p->charid.n5_name[16];
  *(_DWORD *)&acName[12] = v5;
  *(_DWORD *)&acName[8] = v4;
  v7 = v2->baseclass_0.vfptr;
  *(_DWORD *)&acName[16] = v6;
  v8 = v7[2].GetAbstateColor;
  acName[20] = 0;
  ((void (__thiscall *)(Char *, _DWORD))v8)(v2, acName);
  ((void (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[8].Deaffect)(v2, LODWORD(Char::ms_fDefaultWalkSpeed));
  ((void (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[8].SetAbStateProperty)(
    v2,
    LODWORD(Char::ms_fDefaultRunSpeed));
  v2->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&v2->m_kMoveToTarget);
  Char::SetMode(v2, p->mode);
  v2->m_byType = p->type;
  v2->m_kMoverHandle = p->nMoverHnd;
  v2->m_uiMoverSlot = p->nMoverSlot;
  v2->m_byKQTeamType = p->nKQTeamType;
  v9 = p->chrclass;
  v2->m_dwCurrHpUpdateSeqNo = -65536;
  v2->m_dwTOTCurrHpUpdateSeqNo = -65536;
  v18 = &result;
  v2->m_kCharShape.m_kClassID = v9;
  v2->m_bConnectServer = 1;
  v10 = World::GetMapName(&g_kWorld, v18);
  v11 = MapInfoTab::GetByMapName(v10);
  if ( v11 )
    v2->m_fMaxViewLength = (double)v11->Sight;
  v12 = p->chrclass;
  if ( v12 != (((unsigned __int8)p->shape._bf0 >> 2) & 0x1F) )
  {
    p->shape._bf0 ^= (p->shape._bf0 ^ 4 * v12) & 0x7C;
    return 0;
  }
  v2->baseclass_0.vfptr[2].Affect((AbStateInfectee *)v2, (AbStateInst *)&p->shape, 0);
  v14 = ((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v2);
  if ( (_BYTE)v14 )
  {
    v15 = v2->m_byMode;
    if ( v15 == 4 )
    {
      v2->m_byMiniHouseSkinID = p->shapedata.notcamp.equip.Equ_Head;
    }
    else
    {
      if ( v15 == 5 )
      {
        v2->m_byMiniHouseSkinID = p->shapedata.notcamp.equip.Equ_Head;
        LOBYTE(v14) = LOBYTE(p->shapedata.notcamp.equip.Equ_Boot) != 0;
        v2->m_bIsSell = v14;
        v18 = (Name3 *)v14;
        memcpy(&v16, (char *)&p->shapedata.notcamp.equip.Equ_Boot + 1, 0x1Cu);
        v17 = *(_WORD *)&p->shapedata.notcamp.equip.upgrade.gap0[1];
        Char::SetCampSignBoard(v2, v16, v14);
      }
    }
  }
  else
  {
    Char::GetoutOfPet(v2);
    if ( v2->m_byMode == 6 )
      CharShape::SetRidePetID(&v2->m_kCharShape, p->shapedata.ride.rideinfo.horse);
    v2->baseclass_0.vfptr[2].Affect((AbStateInfectee *)v2, 0, (bool)&p->shapedata);
    v2->m_dwGuildRegNum = p->myguild;
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// AA2724: using guessed type float Char__ms_fDefaultWalkSpeed;
// AA2728: using guessed type float Char__ms_fDefaultRunSpeed;

//----- (0063BD30) --------------------------------------------------------
bool __thiscall Char::Init(Char *this, unsigned __int16 kMobID, unsigned __int16 kHandle)
{
  int v3; // edi@1
  Char *v4; // esi@1
  int v5; // eax@3
  int v6; // edi@4
  bool v7; // al@5
  AbStateInfecteeVtbl *v8; // eax@6
  float v9; // ST10_4@6
  float v10; // ST10_4@6
  Name3 *v11; // eax@6
  MapInfo *v12; // eax@6
  Name3 result; // [sp+20h] [bp-Ch]@6

  v3 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                          ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                          kMobID)
    && kMobID <= *(_WORD *)(v3 + 200)
    && (v5 = *(_DWORD *)(v3 + 196) + 4 * kMobID, *(_DWORD *)v5)
    && (v6 = *(_DWORD *)v5) != 0 )
  {
    v8 = v4->baseclass_0.vfptr;
    v4->m_kHandle = kHandle;
    ((void (__thiscall *)(Char *, int))v8[2].GetAbstateColor)(v4, v6 + 34);
    ((void (__thiscall *)(Char *, _DWORD))v4->baseclass_0.vfptr[4].SetAbStateProperty)(v4, *(_DWORD *)(v6 + 70));
    v9 = (double)*(unsigned int *)(v6 + 74);
    ((void (__thiscall *)(Char *, _DWORD))v4->baseclass_0.vfptr[8].Deaffect)(v4, LODWORD(v9));
    v10 = (double)*(unsigned int *)(v6 + 78);
    ((void (__thiscall *)(Char *, _DWORD))v4->baseclass_0.vfptr[8].SetAbStateProperty)(v4, LODWORD(v10));
    v4->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&v4->m_kMoveToTarget);
    Char::SetMode(v4, 1);
    ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v4);
    v4->m_kCharShape.m_kClassID = 0;
    Char::SetMobID(v4, kMobID);
    v4->m_dwCurrHpUpdateSeqNo = -65536;
    v4->m_dwTOTCurrHpUpdateSeqNo = -65536;
    v4->m_bConnectServer = 1;
    v11 = World::GetMapName(&g_kWorld, &result);
    v12 = MapInfoTab::GetByMapName(v11);
    if ( v12 )
      v4->m_fMaxViewLength = (double)v12->Sight;
    v4->m_bUserCharacter = 0;
    v7 = 1;
  }
  else
  {
    v7 = 0;
  }
  return v7;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (0063BE80) --------------------------------------------------------
bool __thiscall Char::Init(Char *this, PROTO_AVATARINFORMATION *p)
{
  Char *v2; // esi@1
  char v3; // bl@1
  bool (__thiscall *v4)(AbStateInfectee *, ABSTATEINDEX, float, bool); // edx@1
  MapInfo *v5; // eax@3

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[8].Deaffect)(LODWORD(Char::ms_fDefaultWalkSpeed));
  ((void (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[8].SetAbStateProperty)(
    v2,
    LODWORD(Char::ms_fDefaultRunSpeed));
  v2->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&v2->m_kMoveToTarget);
  v3 = ((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v2);
  v4 = v2->baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
  v2->m_byMode = 1;
  v2->m_eStandMode = 0;
  if ( v3 != (unsigned __int8)((int (__thiscall *)(Char *))v4)(v2) )
    v2->m_bIsChangeCampMode = 1;
  v5 = MapInfoTab::GetByMapName(&p->loginmap);
  if ( v5 )
    v2->m_fMaxViewLength = (double)v5->Sight;
  ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v2);
  v2->baseclass_0.vfptr[2].Affect((AbStateInfectee *)v2, (AbStateInst *)&p->shape, (bool)&p->equip);
  v2->m_dwCurrHpUpdateSeqNo = -65536;
  v2->m_dwTOTCurrHpUpdateSeqNo = -65536;
  return 1;
}
// AA2724: using guessed type float Char__ms_fDefaultWalkSpeed;
// AA2728: using guessed type float Char__ms_fDefaultRunSpeed;

//----- (0063BF50) --------------------------------------------------------
float __thiscall Char::GetAttackableDistance(Char *this, Char *pkTargetChar)
{
  Char *v2; // ebx@1
  MobInfo *v3; // eax@3
  MobType v4; // eax@4
  double v5; // st7@9
  int v6; // edi@11
  int v7; // esi@11
  int v8; // eax@13
  int v9; // esi@14
  unsigned int v10; // edx@19
  unsigned int v11; // edx@27
  float result; // st7@31
  char pkTargetChara; // [sp+14h] [bp+8h]@16
  float pkTargetCharc; // [sp+14h] [bp+8h]@21
  float pkTargetChard; // [sp+14h] [bp+8h]@22
  char pkTargetCharb; // [sp+14h] [bp+8h]@24

  v2 = this;
  if ( !pkTargetChar )
    goto LABEL_30;
  if ( (unsigned __int8)((int (__thiscall *)(Char *))pkTargetChar->baseclass_0.vfptr[1].Affect)(pkTargetChar) )
  {
    v3 = pkTargetChar->m_pMobinfo;
    if ( v3 )
    {
      v4 = v3->Type;
      if ( v4 == 8 || v4 == 10 || v4 == 9 || v4 == 22 || v4 == 21 )
      {
        v5 = 10.0;
        goto LABEL_31;
      }
    }
  }
  if ( !(unsigned __int8)((int (__thiscall *)(Char *))pkTargetChar->baseclass_0.vfptr[1].Affect)(pkTargetChar) )
  {
    if ( v2->m_BeforeMetamorphosisClass )
      pkTargetCharb = v2->m_BeforeMetamorphosisClass;
    else
      pkTargetCharb = v2->m_kCharShape.m_kClassID;
    if ( CharClass::IsKindOf(pkTargetCharb, 11) )
    {
      v11 = Char::GetAniCode(v2, 0, 0, 0) % 0x64;
      if ( v11 )
      {
        if ( v11 != 80 )
        {
          v5 = 450.0;
          goto LABEL_31;
        }
      }
    }
LABEL_30:
    v5 = 50.0;
    goto LABEL_31;
  }
  v6 = pkTargetChar->m_kCharShape.m_kMobID;
  v7 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                           ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                           v6)
    || (unsigned __int16)v6 > *(_WORD *)(v7 + 200)
    || (v8 = *(_DWORD *)(v7 + 196) + 4 * v6, !*(_DWORD *)v8)
    || (v9 = *(_DWORD *)v8) == 0 )
    goto LABEL_30;
  if ( v2->m_BeforeMetamorphosisClass )
    pkTargetChara = v2->m_BeforeMetamorphosisClass;
  else
    pkTargetChara = v2->m_kCharShape.m_kClassID;
  if ( CharClass::IsKindOf(pkTargetChara, 11) && (v10 = Char::GetAniCode(v2, 0, 0, 0) % 0x64) != 0 && v10 != 80 )
  {
    pkTargetCharc = (double)*(unsigned int *)(v9 + 104) * 50.0 / 1000.0 + 450.0;
    v5 = pkTargetCharc;
  }
  else
  {
    pkTargetChard = (double)*(unsigned int *)(v9 + 104) * 50.0 / 1000.0;
    v5 = pkTargetChard;
  }
LABEL_31:
  LODWORD(result) = LODWORD(v5);
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (0063C110) --------------------------------------------------------
void __thiscall Char::UpdatePosition(Char *this, float fTime)
{
  double v2; // st7@0
  Char *v3; // esi@1
  NiActorManager *v4; // eax@2
  unsigned int v5; // ecx@2
  char v6; // dl@4
  Char::MoveMode v7; // eax@12
  NpNs_MoveToTargetVtbl *v8; // ebx@14
  float v9; // ST14_4@14
  NpNs_MoveToTargetVtbl *v10; // ebx@15
  float v11; // ST14_4@15
  NiPoint3 *v12; // eax@17
  NiPoint3 *v13; // eax@18
  double v14; // st7@23
  AbStateInfecteeVtbl *v15; // eax@24
  int v16; // eax@25
  double v17; // st7@27
  float v18; // edx@29
  float v19; // ecx@35
  float v20; // edx@35
  bool v21; // zf@36
  float v22; // ecx@36
  float v23; // edx@36
  NiNode *v24; // eax@39
  float kCharPos; // [sp+30h] [bp-1Ch]@25
  float kCharPos_4; // [sp+34h] [bp-18h]@25
  float kCharPos_8; // [sp+38h] [bp-14h]@25
  NiPoint3 kPos; // [sp+3Ch] [bp-10h]@27
  const float v29; // [sp+48h] [bp-4h]@17
  float fJumpHeight; // [sp+54h] [bp+8h]@18

  v3 = this;
  if ( !Char::IsLinkGate(this) )
  {
    v4 = v3->m_spActor.m_pObject;
    v5 = 0;
    if ( v4 )
      v5 = v4->m_eCurID;
    v6 = 0;
    if ( !v4 || v5 == 801700 || v5 == 801000 || v5 == 801100 && !v4->m_eTransitionState )
      v6 = 1;
    if ( v3->m_eEmotionState || v6 )
    {
      v3->m_kSmoothRotater.m_fSpeed = 0.0;
      v29 = Timer::ms_fCurTime;
      v12 = (NiPoint3 *)NpNs_SmoothRotateControler::GetTargetDirection((NiDX9TextureData *)&v3->m_kSmoothRotater);
      NpNs_SmoothRotateControler::SetTargetDirection(&v3->m_kSmoothRotater, v29, v12);
      MoveToTarget::ChangeSpeed(&v3->m_kMoveToTarget, 0.0);
    }
    else
    {
      v7 = v3->m_eMoveMode;
      if ( v7 )
      {
        if ( v7 == 1 )
        {
          v8 = v3->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr;
          ((void (__thiscall *)(Char *))v3->baseclass_0.vfptr[8].AddAbStateByAbstateIndex)(v3);
          v9 = v2;
          ((void (__thiscall *)(MoveToTarget *, _DWORD))v8->SetSpeed)(&v3->m_kMoveToTarget, LODWORD(v9));
        }
      }
      else
      {
        v10 = v3->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr;
        v3->baseclass_0.vfptr[8].IsVisible((AbStateInfectee *)v3);
        v11 = v2;
        ((void (__thiscall *)(MoveToTarget *, _DWORD))v10->SetSpeed)(&v3->m_kMoveToTarget, LODWORD(v11));
      }
      v3->m_kSmoothRotater.m_fSpeed = NI_PI * 4.0;
    }
    ((void (__thiscall *)(MoveToTarget *, _DWORD))v3->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Update)(
      &v3->m_kMoveToTarget,
      LODWORD(fTime));
    v13 = v3->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCurrentPos((NpNs_MoveToTarget *)&v3->m_kMoveToTarget);
    JumpProcessor::SetCurPos(&v3->m_kJumpProcessor, v13);
    fJumpHeight = JumpProcessor::Update(&v3->m_kJumpProcessor, Timer::ms_fCurTime);
    if ( !(unsigned __int8)v3->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v3)
      && !v3->m_bOldDuringMove
      && !JumpProcessor::IsJump(&v3->m_kJumpProcessor) )
      goto LABEL_40;
    if ( (unsigned __int8)v3->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v3) )
    {
      v3->m_bOldDuringMove = 1;
    }
    else
    {
      v14 = v3->m_fSaveCharSpeed;
      v3->m_bOldDuringMove = 0;
      if ( v14 > 0.0 )
      {
        ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[8].SetAbStateProperty)(v3, v3->m_fSaveCharSpeed);
        v15 = v3->baseclass_0.vfptr;
        v3->m_fSaveCharSpeed = 0.0;
        ((void (__thiscall *)(Char *, signed int))v15[7].AddAbStateByAbstateIndex)(v3, 1);
      }
    }
    v16 = (int)v3->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCurrentPos((NpNs_MoveToTarget *)&v3->m_kMoveToTarget);
    LODWORD(kCharPos) = *(_DWORD *)v16;
    LODWORD(kCharPos_4) = *(_DWORD *)(v16 + 4);
    LODWORD(kCharPos_8) = *(_DWORD *)(v16 + 8);
    if ( v3->m_kJumpProcessor.m_bJumpFlyStart && JumpProcessor::IsJump(&v3->m_kJumpProcessor) )
    {
      kPos.x = kCharPos;
      kPos.y = kCharPos_4;
      v17 = fJumpHeight;
    }
    else
    {
      if ( World::GetAdvGroundPos(&g_kWorld, kCharPos, kCharPos_4, &kPos) )
      {
LABEL_31:
        if ( v3->m_eEmotionState == 4 )
          kPos.z = kCharPos_8;
        if ( !v3->m_kJumpProcessor.m_bJumpFlyStart && JumpProcessor::IsJump(&v3->m_kJumpProcessor) )
        {
          v19 = kPos.y;
          v20 = kPos.z;
          LODWORD(v3->m_kJumpProcessor.m_pos3StartPos.x) = (_DWORD)kPos.x;
          v3->m_kJumpProcessor.m_pos3StartPos.y = v19;
          v3->m_kJumpProcessor.m_pos3StartPos.z = v20;
        }
        v21 = v3->m_kJumpProcessor.m_bJumpFlyStart == 0;
        v22 = kPos.y;
        v23 = kPos.z;
        LODWORD(v3->m_pos3CameraPos.x) = (_DWORD)kPos.x;
        v3->m_pos3CameraPos.y = v22;
        v3->m_pos3CameraPos.z = v23;
        if ( !v21 && JumpProcessor::IsJump(&v3->m_kJumpProcessor) )
          v3->m_pos3CameraPos.z = JumpProcessor::GetCameraPos(&v3->m_kJumpProcessor);
        v24 = v3->m_spScene.m_pObject;
        LODWORD(v24->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
        v24->baseclass_0.m_kLocal.m_Translate.y = kPos.y;
        v24->baseclass_0.m_kLocal.m_Translate.z = kPos.z;
LABEL_40:
        if ( JumpProcessor::OnEnd(&v3->m_kJumpProcessor) )
        {
          Char::UpdateWeaponEquipState(v3);
          Char::UpdateActbyEquip(v3);
        }
        return;
      }
      v18 = v3->m_spScene.m_pObject->baseclass_0.m_kLocal.m_Translate.z;
      kPos.x = kCharPos;
      kPos.y = kCharPos_4;
      v17 = v18;
    }
    kPos.z = v17;
    goto LABEL_31;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// B6DE8C: using guessed type const float NI_PI;

//----- (0063C450) --------------------------------------------------------
void __thiscall Char::UpdateLod(Char *this, float fTime)
{
  Char *v2; // esi@1
  NiActorManager *v3; // eax@1
  NiBoneLODController *v4; // ebx@2
  NiNode *v5; // eax@3
  float v6; // ST0C_4@3
  float v7; // ST10_4@3
  float v8; // ST14_4@3
  float v9; // ST18_4@3
  float v10; // ST18_4@3
  int v11; // ecx@3
  double v12; // st7@3

  v2 = this;
  v3 = this->m_spActor.m_pObject;
  if ( v3 )
  {
    v4 = v3->m_spBoneLOD.m_pObject;
    if ( v4 )
    {
      v5 = this->m_spScene.m_pObject;
      v6 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - v5->baseclass_0.m_kLocal.m_Translate.x;
      v7 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - v5->baseclass_0.m_kLocal.m_Translate.y;
      v8 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - v5->baseclass_0.m_kLocal.m_Translate.z;
      v9 = v7 * v7 + v6 * v6 + v8 * v8;
      v10 = sqrt(v9);
      v11 = 0;
      v12 = pkCamera->m_fLODAdjust * v10;
      if ( v2->m_fLodLength[0] < v12 )
      {
        v11 = 1;
        if ( v2->m_fLodLength[1] < v12 )
          v11 = 2;
      }
      if ( v2->m_nCurrLODLevel != v11 )
      {
        v2->m_nCurrLODLevel = v11;
        NiBoneLODController::SetBoneLOD(v4, v11);
      }
    }
  }
}

//----- (0063C520) --------------------------------------------------------
void __thiscall Char::UpdateQuestMark(Char *this)
{
  Char *v1; // esi@1
  char v2; // al@3
  MobInfo *v3; // eax@5
  NiNode *v4; // eax@8
  double v5; // st7@8
  float v6; // ST18_4@8

  v1 = this;
  if ( this->m_byType == 4
    || !this->m_bUserCharacter && (v2 = this->m_byMode, v2 != 4) && v2 != 5 && (v3 = this->m_pMobinfo) != 0 && v3->IsNPC )
  {
    if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].Affect)() )
    {
      v4 = v1->m_kQuestInfoView.m_spQuestInfo.m_pObject;
      v5 = v1->m_kCharShape.m_fHeight;
      v4->baseclass_0.m_kLocal.m_Translate.x = 0.0;
      v6 = v5;
      v4->baseclass_0.m_kLocal.m_Translate.y = 0.0;
      v4->baseclass_0.m_kLocal.m_Translate.z = v6;
      if ( QuestDataMgr::m_bUpdate )
      {
        QuestDataMgr::GetQuest();
        CQuestInfoViewMgr::MakeQuestView(&v1->m_kQuestInfoView, v1->m_kCharShape.m_kMobID);
        ((void (__stdcall *)(NiNode *, signed int))v1->m_spScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v1->m_kQuestInfoView.m_spQuestInfo.m_pObject,
          1);
        v1->m_pOldParent = 0;
      }
    }
  }
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (0063C5F0) --------------------------------------------------------
bool __thiscall Char::IsNeverCarToon(Char *this)
{
  return this->m_bIsDoor || !this->m_kCharShape.m_kClassID && Char::IsLinkGate(this);
}

//----- (0063C620) --------------------------------------------------------
bool __thiscall Char::IsNeverShadow(Char *this)
{
  Char *v1; // esi@1
  MobInfo *v3; // esi@6

  v1 = this;
  return this->m_bIsDoor
      || !this->m_kCharShape.m_kClassID && Char::IsLinkGate(this)
      || (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[1].Affect)(v1)
      && (v3 = v1->m_pMobinfo) != 0
      && v3->Type == 11;
}

//----- (0063C670) --------------------------------------------------------
void __thiscall Char::AddIceEffect(Char *this)
{
  Char *v1; // esi@1
  NiNode *v2; // edi@1

  v1 = this;
  v2 = (NiNode *)this->m_spActor.m_pObject->m_spNIFRoot.m_pObject;
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    this->m_spActor.m_pObject->m_spNIFRoot.m_pObject,
    this->m_kAbStateVisual.spIceLight.m_pObject,
    0);
  NiDynamicEffect::AttachAffectedNode(&v1->m_kAbStateVisual.spIceLight.m_pObject->baseclass_0, v2);
}

//----- (0063C6A0) --------------------------------------------------------
unsigned __int16 __thiscall Char::GetEmotionIndex(Char *this, unsigned int uiEventCode)
{
  Char *v2; // esi@1
  unsigned __int16 result; // ax@2
  unsigned int v4; // eax@3
  unsigned __int16 *v5; // eax@4

  v2 = this;
  if ( ((int (*)(void))this->baseclass_0.vfptr[13].GetAbstateColor)() != 4
    && (v4 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[14].Affect)(v2), (v4 & 0x80000000u) == 0)
    && (v5 = (unsigned __int16 *)ActionViewTable::GetByEventCode(v4)) != 0 )
    result = *(_BYTE *)v5;
  else
    result = -1;
  return result;
}

//----- (0063C6E0) --------------------------------------------------------
unsigned int __thiscall Char::GetArmorType(Char *this)
{
  Char *v1; // esi@1
  MobInfo *v2; // eax@2
  int v4; // edi@5
  int v5; // esi@5
  int v6; // ecx@7
  int v7; // eax@8

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].Affect)() )
  {
    v2 = v1->m_pMobinfo;
    if ( v2 )
      return v2->ArmorType;
  }
  else
  {
    if ( g_kInventory.m_aspEquip[7].m_pObject )
    {
      v4 = g_kInventory.m_aspEquip[7].m_pObject->m_kStruct.itemid;
      v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              g_kInventory.m_aspEquip[7].m_pObject->m_kStruct.itemid) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
        {
          v6 = *(_DWORD *)(v5 + 196);
          if ( *(_DWORD *)(v6 + 4 * v4) )
          {
            v7 = *(_DWORD *)(v6 + 4 * v4);
            if ( v7 )
              return *(_DWORD *)(v7 + 236);
          }
        }
      }
    }
  }
  return 1;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0063C760) --------------------------------------------------------
void __thiscall Char::OnRangeHitTime(Char *this, char *pcEffName)
{
  Char *v2; // edi@1
  ActionInfo *v3; // ebx@1
  AttackSequence *v4; // esi@5
  Char *v5; // eax@7
  DamageInfoSet *v6; // esi@8

  v2 = this;
  v3 = this->m_kActionMgr.m_pkCurPlayActInfo;
  if ( v3 )
  {
    if ( !pcEffName )
      pcEffName = "Arrow";
    if ( !*(_DWORD *)&this->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
      goto LABEL_9;
    v4 = this->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead->m_element;
    if ( v4 )
    {
      if ( *(_DWORD *)&v4->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
      {
        v5 = CharMgr::GetChar(
               &g_kCharMgr,
               v4->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead->m_element->kTargetHandle);
        if ( v5 )
        {
          v6 = &v4->kDamageInfoSet;
          EffectMgr::CreateShootEff(
            &g_kEffectMgr,
            pcEffName,
            (char *)v3->EffFile,
            v3->SndFile[1],
            v2,
            v5,
            Timer::ms_fCurTime,
            800.0,
            v6,
            0,
            0);
          DamageInfoSet::Clear(v6);
LABEL_9:
          v2->m_bActionHit = 1;
          return;
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063C810) --------------------------------------------------------
void __thiscall Char::OnMeleeHitTime(Char *this)
{
  AttackSequence *v1; // eax@2
  DamageInfoSet *v2; // esi@3

  if ( *(_DWORD *)&this->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v1 = this->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead->m_element;
    if ( v1 )
    {
      v2 = &v1->kDamageInfoSet;
      DamageInfoSet::Applicate(&v1->kDamageInfoSet, this, 0);
      DamageInfoSet::Clear(v2);
    }
  }
}

//----- (0063C840) --------------------------------------------------------
void __thiscall Char::Deaffect(Char *this, AbStateInst *pkAbState, bool bSudden)
{
  Char *v3; // edi@1
  int v4; // edi@7
  int v5; // ebx@7
  int v6; // edx@9
  int v7; // eax@10
  Char *pkTarget; // [sp+24h] [bp-4h]@1

  v3 = this;
  pkTarget = this;
  AbStateInfectee::Deaffect(&this->baseclass_0, pkAbState, bSudden);
  if ( pkAbState->pkLoopingEffect )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, pkAbState->pkLoopingEffect);
    pkAbState->pkLoopingEffect = 0;
  }
  if ( pkAbState->pkFirstEffect )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, pkAbState->pkFirstEffect);
    pkAbState->pkFirstEffect = 0;
  }
  if ( bSudden || pkAbState->acLastEffectName[0] == 45 )
    goto LABEL_12;
  v4 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
  v5 = pkAbState->kID;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                          pkAbState->kID) )
  {
    if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
    {
      v6 = *(_DWORD *)(v4 + 196);
      if ( *(_DWORD *)(v6 + 4 * v5) )
      {
        v7 = *(_DWORD *)(v6 + 4 * v5);
        if ( v7 )
        {
          EffectMgr::CreateAttachEffect(
            &g_kEffectMgr,
            (unsigned int *)&bSudden,
            pkAbState->acLastEffectName,
            pkTarget,
            *(AbnormalStateViewInfo::EffPosEnum *)(v7 + 466),
            Timer::ms_fCurTime,
            0,
            0,
            0,
            1);
          v3 = pkTarget;
LABEL_12:
          Char::SetAbstateDeaffect(v3, pkAbState);
          return;
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (0063C910) --------------------------------------------------------
char __thiscall Char::GetAttackActionCode(Char *this, char byActionCode)
{
  Char *v2; // esi@1
  char result; // al@4
  char v4; // bl@5
  char kClassID; // [sp+4h] [bp-4h]@6
  char kClassIDa; // [sp+4h] [bp-4h]@10
  char kClassIDb; // [sp+4h] [bp-4h]@14
  char kClassIDc; // [sp+4h] [bp-4h]@18
  char kClassIDd; // [sp+4h] [bp-4h]@24
  char kClassIDe; // [sp+4h] [bp-4h]@28

  v2 = this;
  if ( this->m_BeforeMetamorphosisClass || this->m_kCharShape.m_kClassID )
  {
    switch ( CharShape::Get3thAniEventCodeByWeapon(&this->m_kCharShape) )
    {
      default:
        goto $LN22_39;
      case 0xAu:
      case 0x14u:
      case 0x1Eu:
      case 0x28u:
      case 0x32u:
      case 0x3Cu:
      case 0x46u:
      case 0x50u:
      case 0x5Au:
        v4 = v2->m_BeforeMetamorphosisClass;
        if ( v4 )
          kClassID = v2->m_BeforeMetamorphosisClass;
        else
          kClassID = v2->m_kCharShape.m_kClassID;
        if ( CharClass::IsKindOf(kClassID, 11) )
          goto LABEL_21;
        if ( v4 )
          kClassIDa = v4;
        else
          kClassIDa = v2->m_kCharShape.m_kClassID;
        if ( CharClass::IsKindOf(kClassIDa, 1)
          || (v4 ? (kClassIDb = v4) : (kClassIDb = v2->m_kCharShape.m_kClassID), CharClass::IsKindOf(kClassIDb, 6)) )
          goto LABEL_31;
        if ( v4 )
          kClassIDc = v4;
        else
          kClassIDc = v2->m_kCharShape.m_kClassID;
        if ( CharClass::IsKindOf(kClassIDc, 16) )
        {
LABEL_21:
          result = byActionCode & 1;
          if ( (byActionCode & 1) < 0 )
            result = ((unsigned __int8)(result - 1) | 0xFE) + 1;
        }
        else
        {
          if ( v4 )
            kClassIDd = v4;
          else
            kClassIDd = v2->m_kCharShape.m_kClassID;
          if ( CharClass::IsKindOf(kClassIDd, 21)
            || (v4 ? (kClassIDe = v4) : (kClassIDe = v2->m_kCharShape.m_kClassID), CharClass::IsKindOf(kClassIDe, 26)) )
LABEL_31:
            result = (unsigned __int8)byActionCode % 6;
          else
            result = 0;
        }
        break;
    }
  }
  else
  {
$LN22_39:
    result = 0;
  }
  return result;
}

//----- (0063CAE0) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetHeightPos(Char *this, NiPoint3 *result)
{
  Char *v2; // edi@1
  int v3; // eax@1
  float v4; // ecx@1
  NiPoint3 *v5; // esi@1
  float v6; // edx@1
  float v7; // eax@1
  char v8; // al@1
  NiActorManager *v9; // eax@3
  int v10; // eax@4
  NiPoint3 *v11; // eax@5
  int v12; // eax@7
  int v13; // ebx@8
  char *v14; // eax@10
  int v15; // eax@12
  float v16; // ecx@13
  float v17; // edx@13
  float v18; // eax@13
  NiActorManager *v19; // eax@15
  NiAVObject *v20; // ecx@16
  int v21; // eax@17
  float v22; // ecx@18
  float v23; // edx@18
  float v24; // eax@18
  float resulta; // [sp+1Ch] [bp+8h]@5
  float resultb; // [sp+1Ch] [bp+8h]@14
  float resultc; // [sp+1Ch] [bp+8h]@19

  v2 = this;
  v3 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
  LODWORD(v4) = *(_DWORD *)v3;
  v5 = result;
  LODWORD(v6) = *(_DWORD *)(v3 + 4);
  LODWORD(v7) = *(_DWORD *)(v3 + 8);
  result->x = v4;
  result->y = v6;
  result->z = v7;
  v8 = v2->m_byMode;
  if ( v8 == 4 || v8 == 5 )
  {
    v10 = ((int (__stdcall *)(_DWORD))v2->m_spHouseNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Name");
    if ( v10 )
    {
LABEL_21:
      result->z = *(float *)(v10 + 148);
      return result;
    }
    v11 = result;
    result->z = result->z + 56.0;
  }
  else
  {
    v9 = v2->m_kRidePetCtl.m_spPetActor.m_pObject;
    if ( v9 )
    {
      v10 = ((int (__stdcall *)(_DWORD))v9->m_spNIFRoot.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("#Name");
      if ( !v10 )
      {
        v11 = result;
        resulta = v2->m_kCharShape.m_fHeight * 0.5 + result->z;
        v5->z = resulta + v2->m_fChairHeight;
        return v11;
      }
      goto LABEL_21;
    }
    if ( v2->m_pkMover )
    {
      v12 = v2->m_pkMover->baseclass_0.baseclass_54.vfptr->GetActor(&v2->m_pkMover->baseclass_0.baseclass_54);
      if ( v12
        && (v13 = *(_DWORD *)(v12 + 12)) != 0
        && (v2->m_uiMoverSlot ? (v14 = fs("#Name%02d")) : (v14 = "#Name"),
            (v15 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)v13 + 72))(v13, v14)) != 0) )
      {
        LODWORD(v16) = *(_DWORD *)(v15 + 140);
        LODWORD(v17) = *(_DWORD *)(v15 + 144);
        LODWORD(v18) = *(_DWORD *)(v15 + 148);
        result->x = v16;
        result->y = v17;
        result->z = v18;
        v11 = result;
      }
      else
      {
        v11 = result;
        resultb = v2->m_kCharShape.m_fHeight + result->z;
        v5->z = resultb + v2->m_fChairHeight;
      }
    }
    else
    {
      v19 = v2->m_spActor.m_pObject;
      if ( v19
        && (v20 = v19->m_spNIFRoot.m_pObject) != 0
        && (v21 = ((int (__stdcall *)(_DWORD))v20->baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("#Name")) != 0 )
      {
        LODWORD(v22) = *(_DWORD *)(v21 + 140);
        LODWORD(v23) = *(_DWORD *)(v21 + 144);
        LODWORD(v24) = *(_DWORD *)(v21 + 148);
        result->x = v22;
        result->y = v23;
        result->z = v24;
        v11 = result;
      }
      else
      {
        v11 = result;
        resultc = v2->m_kCharShape.m_fHeight + result->z;
        v5->z = resultc + v2->m_fChairHeight;
      }
    }
  }
  return v11;
}

//----- (0063CCD0) --------------------------------------------------------
bool __thiscall Char::Equip(Char *this, unsigned __int16 kItemID)
{
  int v2; // edi@1
  Char *v3; // esi@1
  int v4; // eax@3
  int v5; // edi@4
  int v6; // eax@5
  char v7; // bl@5
  int v8; // eax@13
  bool result; // al@14
  int v10; // eax@28
  bool v11; // zf@30
  int v12; // eax@37
  int uiFirstCode; // [sp+Ch] [bp-8h]@24
  bool re; // [sp+13h] [bp-1h]@24

  v2 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v3 = this;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                           kItemID)
    || kItemID > *(_WORD *)(v2 + 200)
    || (v4 = *(_DWORD *)(v2 + 196) + 4 * kItemID, !*(_DWORD *)v4)
    || (v5 = *(_DWORD *)v4) == 0 )
    return 0;
  v6 = *(_DWORD *)(v5 + 110);
  v7 = 0;
  if ( v6 == 10 || v6 == 12 || v6 == 11 || v6 == 13 || v6 == 29 )
    v7 = 1;
  if ( v3->m_kTargetResourceHandle != -1 && v7 == 1 )
  {
    v3->m_kEquippedBackup.iBackupCase = 1;
    v8 = *(_DWORD *)(v5 + 110);
    if ( v8 == 12 )
    {
      v3->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = *(_WORD *)v5;
      v3->m_kEquippedBackup.kCase1.byPrevRightHandUpgrade = 0;
      v3->m_kEquippedBackup.bUnEquipRightHand = 0;
      return 0;
    }
    if ( v8 == 10 )
    {
      v3->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = *(_WORD *)v5;
      v3->m_kEquippedBackup.kCase1.byPrevLeftHandUpgrade = 0;
      v3->m_kEquippedBackup.bUnEquipLeftHand = 0;
      return 0;
    }
    if ( v8 == 13 )
    {
      v3->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID = *(_WORD *)v5;
      v3->m_kEquippedBackup.bUnEquipRightHandAcc = 0;
      return 0;
    }
    if ( v8 == 11 )
    {
      v3->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID = *(_WORD *)v5;
      v3->m_kEquippedBackup.bUnEquipLeftHand = 0;
      return 0;
    }
    if ( v8 == 29 )
    {
      v3->m_kEquippedBackup.kCase1.kPrevShieldAccItemID = *(_WORD *)v5;
      v3->m_kEquippedBackup.bUnEquipShieldAcc = 0;
    }
    return 0;
  }
  Char::GetAniCode(v3, 0, (unsigned int *)&uiFirstCode, 0);
  re = 0;
  if ( v7 )
  {
    if ( uiFirstCode != 300000 && uiFirstCode != 600000 && uiFirstCode != 700000 )
    {
      re = CharShape::Equip(&v3->m_kCharShape, kItemID);
      v10 = *(_DWORD *)(v5 + 110);
      if ( v10 == 10 || v10 == 12 )
      {
        if ( *(_DWORD *)(v5 + 232) )
        {
          CharShape::ReEquipWeaponCostume(&v3->m_kCharShape);
LABEL_36:
          Char::UpdateActbyEquip(v3);
          result = re;
          v3->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
          v3->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
          v3->m_kAttackEquipBackup.iBackupCase = 0;
          *(_WORD *)&v3->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
          return result;
        }
        v11 = *(_DWORD *)(v5 + 102) == 7;
      }
      else
      {
        v11 = v10 == 29;
      }
      if ( v11 )
        CharShape::ReEquipShieldCostume(&v3->m_kCharShape);
      goto LABEL_36;
    }
    v3->m_kAttackEquipBackup.iBackupCase = 1;
    v12 = *(_DWORD *)(v5 + 110);
    if ( v12 == 12 )
    {
      v3->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = *(_WORD *)v5;
      result = re;
      v3->m_kAttackEquipBackup.kCase1.byPrevRightHandUpgrade = 0;
      v3->m_kAttackEquipBackup.bUnEquipRightHand = 0;
      return result;
    }
    if ( v12 == 10 )
    {
      result = re;
      v3->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = *(_WORD *)v5;
      v3->m_kAttackEquipBackup.kCase1.byPrevLeftHandUpgrade = 0;
      v3->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
      return result;
    }
    if ( v12 == 13 )
    {
      result = re;
      v3->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID = *(_WORD *)v5;
      v3->m_kAttackEquipBackup.bUnEquipRightHandAcc = 0;
      return result;
    }
    if ( v12 == 11 )
    {
      v3->m_kAttackEquipBackup.kCase1.kPrevLeftHandAccItemID = *(_WORD *)v5;
      result = re;
      v3->m_kAttackEquipBackup.bUnEquipLeftHandAcc = 0;
      return result;
    }
    if ( v12 == 29 )
    {
      result = re;
      v3->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID = *(_WORD *)v5;
      v3->m_kAttackEquipBackup.bUnEquipShieldAcc = 0;
      return result;
    }
  }
  else
  {
    re = CharShape::Equip(&v3->m_kCharShape, kItemID);
  }
  return re;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0063CFD0) --------------------------------------------------------
bool __thiscall Char::Equip(Char *this, unsigned __int16 kItemID, char byUpgrade)
{
  int v3; // edi@1
  Char *v4; // esi@1
  int v5; // edi@2
  int v6; // eax@5
  char v7; // bl@8
  int v8; // eax@9
  bool result; // al@15
  unsigned __int16 v10; // dx@16
  int v11; // eax@21
  bool v12; // zf@23
  unsigned __int16 v13; // dx@32
  int uiFirstCode; // [sp+Ch] [bp-8h]@17
  bool re; // [sp+13h] [bp-1h]@17

  v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          kItemID) )
  {
    if ( kItemID <= *(_WORD *)(v3 + 200) )
    {
      v6 = *(_DWORD *)(v3 + 196) + 4 * kItemID;
      if ( *(_DWORD *)v6 )
        v5 = *(_DWORD *)v6;
      else
        v5 = 0;
    }
    else
    {
      v5 = 0;
    }
  }
  else
  {
    v5 = 0;
  }
  v7 = 0;
  if ( v5 )
  {
    v8 = *(_DWORD *)(v5 + 110);
    if ( v8 == 10 || v8 == 12 )
      v7 = 1;
  }
  if ( v4->m_kTargetResourceHandle != -1 && v7 == 1 )
  {
    v4->m_kEquippedBackup.iBackupCase = 1;
    if ( *(_DWORD *)(v5 + 110) == 12 )
    {
      v4->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = *(_WORD *)v5;
      v4->m_kEquippedBackup.kCase1.byPrevRightHandUpgrade = byUpgrade;
      v4->m_kEquippedBackup.bUnEquipRightHand = 0;
      result = 0;
    }
    else
    {
      v10 = *(_WORD *)v5;
      v4->m_kEquippedBackup.kCase1.byPrevLeftHandUpgrade = byUpgrade;
      v4->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = v10;
      v4->m_kEquippedBackup.bUnEquipLeftHand = 0;
      result = 0;
    }
    return result;
  }
  Char::GetAniCode(v4, 0, (unsigned int *)&uiFirstCode, 0);
  re = 0;
  if ( !v7 )
    return CharShape::Equip(&v4->m_kCharShape, kItemID, byUpgrade);
  if ( uiFirstCode != 300000 && uiFirstCode != 600000 && uiFirstCode != 700000 )
  {
    re = CharShape::Equip(&v4->m_kCharShape, kItemID, byUpgrade);
    v11 = *(_DWORD *)(v5 + 110);
    if ( v11 == 10 || v11 == 12 )
    {
      if ( *(_DWORD *)(v5 + 232) )
      {
        CharShape::ReEquipWeaponCostume(&v4->m_kCharShape);
LABEL_29:
        Char::UpdateActbyEquip(v4);
        result = re;
        v4->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
        v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
        v4->m_kAttackEquipBackup.iBackupCase = 0;
        *(_WORD *)&v4->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
        return result;
      }
      v12 = *(_DWORD *)(v5 + 102) == 7;
    }
    else
    {
      v12 = v11 == 29;
    }
    if ( v12 )
      CharShape::ReEquipShieldCostume(&v4->m_kCharShape);
    goto LABEL_29;
  }
  v4->m_kAttackEquipBackup.iBackupCase = 1;
  if ( *(_DWORD *)(v5 + 110) == 12 )
  {
    v4->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = *(_WORD *)v5;
    result = re;
    v4->m_kAttackEquipBackup.kCase1.byPrevRightHandUpgrade = byUpgrade;
    v4->m_kAttackEquipBackup.bUnEquipRightHand = 0;
  }
  else
  {
    v13 = *(_WORD *)v5;
    v4->m_kAttackEquipBackup.kCase1.byPrevLeftHandUpgrade = byUpgrade;
    result = re;
    v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = v13;
    v4->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0063D1F0) --------------------------------------------------------
bool __thiscall Char::Equip(Char *this, Item *_pItem)
{
  ItemInfo *v2; // edi@1
  char v3; // al@1
  Char *v4; // esi@1
  ItemEquipEnum v5; // ecx@2
  ItemEquipEnum v6; // ecx@4
  ItemEquipEnum v7; // eax@10
  bool result; // al@11
  bool v9; // al@25
  ItemInfo *v10; // ebx@25
  ItemEquipEnum v11; // eax@25
  bool v12; // zf@27
  ItemEquipEnum v13; // eax@34
  int v14; // edi@37
  int uiFirstCode; // [sp+Ch] [bp-4h]@22
  bool re_3; // [sp+1Bh] [bp+Bh]@25

  v2 = _pItem->m_pkInfo;
  v3 = 0;
  v4 = this;
  if ( v2 && ((v5 = v2->Equip, v5 == 10) || v5 == 12) || (v6 = v2->Equip, v6 == 11) || v6 == 13 || v6 == 29 )
    v3 = 1;
  if ( v4->m_kTargetResourceHandle != -1 && v3 == 1 )
  {
    v4->m_kEquippedBackup.iBackupCase = 1;
    v7 = v2->Equip;
    switch ( v7 )
    {
      case 12:
        v4->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = v2->ID;
        v4->m_kEquippedBackup.kCase1.byPrevRightHandUpgrade = _pItem->m_kStruct.itemattr.blot.lot;
        v4->m_kEquippedBackup.bUnEquipRightHand = 0;
        result = 0;
        break;
      case 10:
        v4->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = v2->ID;
        v4->m_kEquippedBackup.kCase1.byPrevLeftHandUpgrade = 0;
        v4->m_kEquippedBackup.bUnEquipLeftHand = 0;
        result = 0;
        break;
      case 13:
        v4->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID = v2->ID;
        v4->m_kEquippedBackup.bUnEquipRightHandAcc = 0;
        result = 0;
        break;
      case 11:
        v4->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID = v2->ID;
        v4->m_kEquippedBackup.bUnEquipLeftHandAcc = 0;
        result = 0;
        break;
      default:
        if ( v7 == 29 )
        {
          v4->m_kEquippedBackup.kCase1.kPrevShieldAccItemID = v2->ID;
          v4->m_kEquippedBackup.bUnEquipShieldAcc = 0;
        }
        result = 0;
        break;
    }
    return result;
  }
  if ( !v3 )
    return CharShape::Equip(&v4->m_kCharShape, _pItem);
  Char::GetAniCode(v4, 0, (unsigned int *)&uiFirstCode, 0);
  if ( uiFirstCode != 300000 && uiFirstCode != 600000 && uiFirstCode != 700000 )
  {
    v9 = CharShape::Equip(&v4->m_kCharShape, _pItem);
    v10 = _pItem->m_pkInfo;
    re_3 = v9;
    v11 = v10->Equip;
    if ( v11 == 10 || v11 == 12 )
    {
      if ( v10->WeaponType )
      {
        CharShape::ReEquipWeaponCostume(&v4->m_kCharShape);
LABEL_33:
        Char::UpdateActbyEquip(v4);
        v4->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
        result = re_3;
        v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
        v4->m_kAttackEquipBackup.iBackupCase = 0;
        *(_WORD *)&v4->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
        return result;
      }
      v12 = v2->Class == 7;
    }
    else
    {
      v12 = v11 == 29;
    }
    if ( v12 )
      CharShape::ReEquipShieldCostume(&v4->m_kCharShape);
    goto LABEL_33;
  }
  v4->m_kAttackEquipBackup.iBackupCase = 1;
  v13 = v2->Equip;
  if ( v13 == 12 )
  {
    v4->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = v2->ID;
    v4->m_kAttackEquipBackup.kCase1.byPrevRightHandUpgrade = _pItem->m_kStruct.itemattr.blot.lot;
    v4->m_kAttackEquipBackup.bUnEquipRightHand = 0;
    return 0;
  }
  switch ( v13 )
  {
    case 10:
      v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = v2->ID;
      v14 = v2->Class - 5;
      if ( v14 )
      {
        if ( v14 == 2 )
        {
          v4->m_kAttackEquipBackup.kCase1.byPrevLeftHandUpgrade = _pItem->m_kStruct.itemattr.blot.lot;
          v4->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
          return 0;
        }
      }
      else
      {
        v4->m_kAttackEquipBackup.kCase1.byPrevLeftHandUpgrade = _pItem->m_kStruct.itemattr.blot.lot;
      }
      v4->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
      result = 0;
      break;
    case 13:
      v4->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID = v2->ID;
      v4->m_kAttackEquipBackup.bUnEquipRightHandAcc = 0;
      result = 0;
      break;
    case 11:
      v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandAccItemID = v2->ID;
      v4->m_kAttackEquipBackup.bUnEquipLeftHandAcc = 0;
      result = 0;
      break;
    default:
      if ( v13 == 29 )
      {
        v4->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID = v2->ID;
        v4->m_kAttackEquipBackup.bUnEquipShieldAcc = 0;
      }
      result = 0;
      break;
  }
  return result;
}

//----- (0063D4F0) --------------------------------------------------------
bool __thiscall Char::UnEquip(Char *this, unsigned int uiEquipPos)
{
  unsigned int v2; // edi@1
  char v3; // al@1
  Char *v4; // esi@1
  bool result; // al@10
  bool v6; // bl@24

  v2 = uiEquipPos;
  v3 = 0;
  v4 = this;
  if ( uiEquipPos == 10 || uiEquipPos == 12 || uiEquipPos == 11 || uiEquipPos == 13 || uiEquipPos == 29 )
    v3 = 1;
  if ( this->m_kTargetResourceHandle == -1 || v3 != 1 )
  {
    if ( v3 )
    {
      Char::GetAniCode(this, 0, &uiEquipPos, 0);
      if ( uiEquipPos == 300000 || uiEquipPos == 600000 || uiEquipPos == 700000 )
      {
        v4->m_kAttackEquipBackup.iBackupCase = 1;
        switch ( v2 )
        {
          case 0xAu:
            v4->m_kAttackEquipBackup.bUnEquipLeftHand = 1;
            v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
            v4->m_kAttackEquipBackup.kCase1.byPrevLeftHandUpgrade = 0;
            result = 0;
            break;
          case 0xCu:
            v4->m_kAttackEquipBackup.bUnEquipRightHand = 1;
            v4->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
            v4->m_kAttackEquipBackup.kCase1.byPrevRightHandUpgrade = 0;
            result = 0;
            break;
          case 0xDu:
            v4->m_kAttackEquipBackup.bUnEquipRightHandAcc = 1;
            v4->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID = -1;
            result = 0;
            break;
          case 0xBu:
            v4->m_kAttackEquipBackup.bUnEquipLeftHandAcc = 1;
            v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandAccItemID = -1;
            result = 0;
            break;
          default:
            if ( v2 == 29 )
            {
              v4->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID = -1;
              v4->m_kAttackEquipBackup.bUnEquipShieldAcc = 1;
            }
            result = 0;
            break;
        }
      }
      else
      {
        v6 = CharShape::UnEquip(&v4->m_kCharShape, v2);
        Char::UpdateActbyEquip(v4);
        v4->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
        v4->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
        v4->m_kAttackEquipBackup.iBackupCase = 0;
        *(_WORD *)&v4->m_kAttackEquipBackup.bUnEquipLeftHand = 0;
        result = v6;
      }
    }
    else
    {
      result = CharShape::UnEquip(&this->m_kCharShape, uiEquipPos);
    }
  }
  else
  {
    switch ( uiEquipPos )
    {
      case 0xAu:
        this->m_kEquippedBackup.bUnEquipLeftHand = 1;
        this->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = -1;
        this->m_kEquippedBackup.kCase1.byPrevLeftHandUpgrade = 0;
        result = 0;
        break;
      case 0xCu:
        this->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = -1;
        this->m_kEquippedBackup.bUnEquipRightHand = 1;
        this->m_kEquippedBackup.kCase1.byPrevRightHandUpgrade = 0;
        result = 0;
        break;
      case 0xBu:
        this->m_kEquippedBackup.bUnEquipLeftHandAcc = 1;
        this->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID = -1;
        result = 0;
        break;
      case 0xDu:
        this->m_kEquippedBackup.bUnEquipRightHandAcc = 1;
        this->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID = -1;
        result = 0;
        break;
      default:
        if ( uiEquipPos == 29 )
        {
          this->m_kEquippedBackup.kCase1.kPrevShieldAccItemID = -1;
          this->m_kEquippedBackup.bUnEquipShieldAcc = 1;
        }
        result = 0;
        break;
    }
  }
  return result;
}

//----- (0063D720) --------------------------------------------------------
bool __thiscall Char::ApplyCharNpcBaseAction(Char *this, bool bFirstCall)
{
  int v2; // esi@1
  Char *v3; // edi@1
  int v4; // ebx@1
  int v5; // esi@2
  int v6; // edx@5
  NiActorManager *v7; // eax@10
  unsigned int v8; // ecx@10
  bool result; // al@15
  void (__thiscall *v10)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@16

  v2 = ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable;
  v3 = this;
  v4 = this->m_pMobViewInfo->NpcViewIndex;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable,
                          this->m_pMobViewInfo->NpcViewIndex) )
  {
    if ( (unsigned __int16)v4 <= *(_WORD *)(v2 + 200) )
    {
      v6 = *(_DWORD *)(v2 + 196);
      if ( *(_DWORD *)(v6 + 4 * v4) )
        v5 = *(_DWORD *)(v6 + 4 * v4);
      else
        v5 = 0;
    }
    else
    {
      v5 = 0;
    }
  }
  else
  {
    v5 = 0;
  }
  if ( !*(_DWORD *)(v5 + 11) || ((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[11].DeleteAbStateByAbstateIndex)(v3) )
  {
    result = 0;
  }
  else
  {
    v7 = v3->m_spActor.m_pObject;
    v8 = *(_DWORD *)(v5 + 11);
    if ( v7->m_eTargetID != v8 || bFirstCall == 1 )
    {
      v10 = v3->baseclass_0.vfptr[10].SetAbStateProperty;
      v3->m_fActionTimer = 0.0;
      v3->m_byCharNPCActionState = 0;
      v10(&v3->baseclass_0, *(ABSTATEINDEX *)(v5 + 11), 0, 0);
    }
    else
    {
      if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
             (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v7->m_kSequenceMap,
             v8,
             (NiVBSet **)&bFirstCall)
        && bFirstCall
        && *(_DWORD *)(bFirstCall + 36) )
      {
        NiActorManager::Reset(v3->m_spActor.m_pObject);
        return 1;
      }
    }
    result = 1;
  }
  return result;
}
// A97F60: using guessed type int ITableBase_CharNPC_ViewInfo_NPCViewInfoTab___ms_pkTable;

//----- (0063D810) --------------------------------------------------------
void __thiscall Char::ExecuteDyingProcess(Char *this)
{
  Char *v1; // esi@1
  char v2; // bl@6
  bool (__thiscall *v3)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@6

  v1 = this;
  if ( Char::IsActRunning(this) && !Char::CheckActState(v1, 500000) )
    ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
  if ( JumpProcessor::IsJump(&v1->m_kJumpProcessor) )
    ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
  v1->m_bAniStop = 0;
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  ((void (__thiscall *)(Char *, _DWORD, signed int))v1->baseclass_0.vfptr[1].SetAbStateProperty)(v1, 0, 4);
  AttackSequenceManager::ClearAttSeq(&v1->baseclass_54);
  AttackSequenceManager::ClearSkillSeq(&v1->baseclass_54);
  v2 = ((int (__thiscall *)(Char *))v1->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v1);
  v1->m_byMode = 3;
  Char::OnDead(v1);
  v3 = v1->baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
  v1->m_eStandMode = 0;
  if ( v2 != (unsigned __int8)((int (__thiscall *)(Char *))v3)(v1) )
    v1->m_bIsChangeCampMode = 1;
  ((void (__thiscall *)(Char *, _DWORD))v1->baseclass_0.vfptr[4].Affect)(v1, 0);
  ((void (__thiscall *)(Char *, signed int))v1->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(v1, 1);
  ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[14].DeleteAbStateByAbstateIndex)(v1);
  DecalMgr::RemoveCharDecal(&stru_B31F08, v1->m_kHandle);
}

//----- (0063D900) --------------------------------------------------------
void __thiscall Char::CorrectAniSequence(Char *this)
{
  Char *v1; // esi@1
  NiActorManager *v2; // eax@1
  NiControllerManager *v3; // ebx@2
  unsigned int v4; // ecx@3
  signed int v5; // edi@3
  NiControllerSequence *v6; // eax@4
  unsigned int ncnt; // [sp+4h] [bp-4h]@3

  v1 = this;
  v2 = this->m_spActor.m_pObject;
  if ( v2 )
  {
    v3 = v2->m_spManager.m_pObject;
    if ( v3 )
    {
      v4 = v3->m_kSequenceArray.m_uiSize;
      v5 = 0;
      for ( ncnt = v4; v5 < (signed int)v4; ++v5 )
      {
        v6 = v3->m_kSequenceArray.m_pBase[v5].m_pObject;
        if ( v6 && v6->m_eState == 1 && v1->m_pkLeftSeq != v6 && v1->m_pkRightSeq != v6 && v1->m_pkUpSeq != v6 )
        {
          if ( v1->m_pkDownSeq != v6 )
          {
            NiActorManager::FindSequenceID(v1->m_spActor.m_pObject, v6->m_pcName);
            v4 = ncnt;
          }
        }
      }
    }
  }
}

//----- (0063D980) --------------------------------------------------------
bool __thiscall Char::ImmediatelyMetamorphosis(Char *this, unsigned __int16 monsterid)
{
  Char *v2; // esi@1
  unsigned __int16 v3; // bx@3
  NiActorManager *v4; // eax@3
  NiActorManager *v5; // edi@3
  char v6; // al@6
  bool result; // al@10
  int uiFirstCode; // [sp+0h] [bp-10h]@3
  int v9; // [sp+Ch] [bp-4h]@5

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[20].SetAbStateProperty)()
    || DirectionControllers::IsRunDirection(v2->m_spDirectionCtrls.m_pObject) )
    goto LABEL_14;
  Char::ResetSkillAction(v2);
  Char::ResetAction(v2);
  AttackSequenceManager::ClearAttSeq(&v2->baseclass_54);
  CharShape::StopWeaponAfterImgEff(&v2->m_kCharShape);
  Char::GetAniCode(v2, 1, (unsigned int *)&uiFirstCode, 0);
  v3 = monsterid;
  v4 = CharResMgr::GetMobActor(&g_kCharResMgr, monsterid);
  v5 = v4;
  *(_DWORD *)&monsterid = v4;
  if ( v4 )
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount);
  v9 = 0;
  if ( !v5 )
  {
LABEL_14:
    result = 0;
  }
  else
  {
    NiPointer<NiActorManager>::operator_((NiPointer<NiPixelData> *)&v2->m_spActor, (NiPointer<NiPixelData> *)&monsterid);
    v6 = v2->m_BeforeMetamorphosisClass;
    if ( !v6 )
      v6 = v2->m_kCharShape.m_kClassID;
    v2->m_BeforeMetamorphosisClass = v6;
    v2->m_kActionMgr_Metamor.m_pkActInfoSet = ActionInfoTable::GetMobActionInfo(v3);
    v2->m_kCharShape.m_kClassID = 0;
    Char::SetMobID(v2, v3);
    v2->baseclass_0.vfptr[18].__vecDelDtor((AbStateInfectee *)v2, 0);
    ((void (__thiscall *)(Char *, signed int))v2->baseclass_0.vfptr[10].AddAbStateByAbstateIndex)(v2, 1);
    v2->baseclass_0.vfptr[20].IsVisible((AbStateInfectee *)v2);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    result = 1;
  }
  return result;
}

//----- (0063DAF0) --------------------------------------------------------
bool __thiscall Char::Shape_UnMetamorphosis(Char *this, const char *ptemp)
{
  Char *v2; // esi@1
  bool result; // al@1
  char v4; // ST1C_1@2
  char v5; // ST18_1@2
  NiActorManager *v6; // eax@2
  NiActorManager *v7; // edi@2
  NiActorManager *v8; // ebx@2
  AbStateInfectee::AbstateColor (__thiscall *v9)(AbStateInfectee *); // eax@9

  v2 = this;
  result = ((int (*)(void))this->baseclass_0.vfptr[20].SetAbStateProperty)();
  if ( result )
  {
    v4 = v2->m_kCharShape.m_byGender;
    v5 = v2->m_BeforeMetamorphosisClass;
    v2->m_kCharShape.m_kClassID = v5;
    v6 = CharResMgr::GetCharActor(&g_kCharResMgr, v5, v4, 1u);
    v7 = v2->m_spActor.m_pObject;
    v8 = v6;
    if ( v7 != v6 )
    {
      if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) && v7 )
        v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      v2->m_spActor.m_pObject = v8;
      if ( v8 )
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount);
    }
    v2->m_kActionMgr_Metamor.m_pkActInfoSet = 0;
    Char::SetMobID(v2, 0xFFFFu);
    v2->baseclass_0.vfptr[18].__vecDelDtor((AbStateInfectee *)v2, 1u);
    ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr[10].AddAbStateByAbstateIndex)(v2, 0);
    v2->m_BeforeMetamorphosisClass = 0;
    Char::ResetSkillAction(v2);
    Char::ResetAction(v2);
    v9 = v2->baseclass_0.vfptr[10].GetAbstateColor;
    v2->m_eStandMode = 0;
    v9(&v2->baseclass_0);
    result = 1;
  }
  return result;
}

//----- (0063DBF0) --------------------------------------------------------
void __thiscall Char::ActNormalStand(Char *this)
{
  Char *v1; // esi@1
  NiActorManager *v2; // ecx@3
  char v3; // al@11
  MobInfo *v4; // eax@13
  void *(__thiscall *v5)(AbStateInfectee *, unsigned int); // eax@16
  Char *v6; // ecx@16
  MobInfo *v7; // eax@23

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].SetAbStateProperty)() )
  {
    if ( v1->m_kRidePetCtl.m_spPetActor.m_pObject )
    {
      ((void (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[12].Affect)(v1);
      v2 = v1->m_kRidePetCtl.m_spPetActor.m_pObject;
      if ( v1->m_kRidePetCtl.m_uiStandEventCode != v2->m_eTargetID )
      {
        if ( v2 )
          NiActorManager::SetTargetAnimation(v2, v1->m_kRidePetCtl.m_uiStandEventCode);
        CRidePetCtl::StartAction(&v1->m_kRidePetCtl, v1->m_kRidePetCtl.m_uiStandEventCode);
      }
    }
    return;
  }
  if ( !v1->m_BeforeMetamorphosisClass && !v1->m_kCharShape.m_kClassID )
  {
    if ( v1->m_byType != 4 )
    {
      if ( v1->m_bUserCharacter || (v3 = v1->m_byMode, v3 == 4) || v3 == 5 || (v4 = v1->m_pMobinfo) == 0 || !v4->IsNPC )
      {
        if ( !v1->m_bIsDoor )
        {
          v5 = v1->baseclass_0.vfptr[10].__vecDelDtor;
          v6 = v1;
LABEL_26:
          ((void (__thiscall *)(_DWORD))v5)(v6);
          return;
        }
      }
    }
    goto LABEL_27;
  }
  if ( v1->m_bUserCharacter != 1 )
  {
    if ( !Char::IsNPC(v1) )
    {
      if ( !v1->m_bIsDoor )
      {
        v7 = v1->m_pMobinfo;
        if ( !v7 || v7->Type != 24 )
        {
          v5 = v1->baseclass_0.vfptr[10].__vecDelDtor;
          v6 = v1;
          goto LABEL_26;
        }
      }
    }
LABEL_27:
    Char::ActAction(v1, STAND, NORMALSTAND);
    return;
  }
  if ( !Char::ActAction(v1, STAND, NORMALSTAND)
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[20].SetAbStateProperty)(v1) )
    Char::ActAction(v1, STAND, COMBATSTAND);
}

//----- (0063DD30) --------------------------------------------------------
void __thiscall Char::SetItemAutoUseBuff(Char *this, bool bUse)
{
  char v2; // al@1

  v2 = bUse;
  this->m_bBuffItemAutoUse = bUse;
  if ( bUse || this->m_bChargedItemAutoUse )
    v2 = 1;
  this->m_kCharShape.m_bAutoUseItem = v2;
  CharShape::SetMinimonAutoUseEff(&this->m_kCharShape, v2);
}

//----- (0063DD70) --------------------------------------------------------
void __thiscall Char::SetItemAutoUseCharged(Char *this, bool bUse)
{
  bool v2; // zf@1
  char v3; // al@1

  v2 = this->m_bBuffItemAutoUse == 0;
  v3 = bUse;
  this->m_bChargedItemAutoUse = bUse;
  if ( !v2 || bUse )
    v3 = 1;
  this->m_kCharShape.m_bAutoUseItem = v3;
  CharShape::SetMinimonAutoUseEff(&this->m_kCharShape, v3);
}

//----- (0063DDB0) --------------------------------------------------------
void __thiscall LinkedEffect::Show(LinkedEffect *this, bool bShow)
{
  LinkedEffect *v2; // esi@1
  char *v3; // eax@2
  int v4; // edi@2
  Effect *v5; // eax@4

  v2 = this;
  if ( this->m_bShowLinkEffect != bShow )
  {
    v3 = (char *)this->m_vecEffectHandle.baseclass_0._Mylast
       - *(_DWORD *)&this->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0];
    v4 = 0;
    this->m_bShowLinkEffect = bShow;
    if ( (signed int)((unsigned int)v3 & 0xFFFFFFFC) > 0 )
    {
      do
      {
        if ( v4 < (signed int)((char *)v2->m_vecEffectHandle.baseclass_0._Mylast
                             - *(_DWORD *)&v2->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
          v5 = *(Effect **)(*(_DWORD *)&v2->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4);
        else
          v5 = 0;
        EffectMgr::SetShow(&g_kEffectMgr, v5, bShow, 0);
        ++v4;
      }
      while ( v4 < (signed int)((char *)v2->m_vecEffectHandle.baseclass_0._Mylast
                              - *(_DWORD *)&v2->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
    }
  }
}

//----- (0063DE10) --------------------------------------------------------
void __thiscall Char::Update(Char *this, NiAVObject *pParent)
{
  NiAVObject *v2; // edi@1
  Char *v3; // esi@1
  char v4; // bl@3
  NiActorManager *v5; // eax@5
  NiActorManager *v6; // ecx@15
  int ui1stBaseCode; // [sp+14h] [bp-4h]@3

  v2 = pParent;
  v3 = this;
  if ( this->m_pOldParent != pParent )
  {
    NiAVObject::UpdateEffects(&this->m_spScene.m_pObject->baseclass_0);
    NiAVObject::UpdateProperties(&v3->m_spScene.m_pObject->baseclass_0);
    v3->m_pOldParent = v2;
  }
  v4 = 1;
  Char::GetAniCode(v3, 1, (unsigned int *)&ui1stBaseCode, 0);
  Char::GetAniCode(v3, 0, (unsigned int *)&pParent, 0);
  if ( pParent == (NiAVObject *)100000 )
  {
    if ( ui1stBaseCode == 100000 )
    {
      v5 = v3->m_spActor.m_pObject;
      if ( v5 )
      {
        if ( v5->m_eCurID == v5->m_eTargetID )
          v4 = 0;
      }
    }
  }
  if ( v3->m_bCulledOld != v3->m_bCulled
    || v3->m_bIsUpdateScene
    || v4
    || (unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[7].__vecDelDtor)(v3)
    || Char::IsFade(v3)
    || CQuestInfoViewMgr::IsHaveQuestState(&v3->m_kQuestInfoView)
    || JumpProcessor::IsJump(&v3->m_kJumpProcessor) )
  {
    v6 = v3->m_spActor.m_pObject;
    if ( v6 )
    {
      if ( v3->m_bAniStop )
        return;
      NiActorManager::Update(v6, v3->m_fAnimationUpdateTime);
    }
    if ( !v3->m_bAniStop )
    {
      CRidePetCtl::Update(&v3->m_kRidePetCtl, v3->m_fAnimationUpdateTime);
      NiAVObject::Update(&v3->m_spScene.m_pObject->baseclass_0, v3->m_fAnimationUpdateTime, 1);
    }
  }
}

//----- (0063DF40) --------------------------------------------------------
bool __thiscall Char::RefreshNPCAction(Char *this)
{
  Char *v1; // esi@1
  char v2; // cl@1
  bool result; // al@1

  v1 = this;
  v2 = this->m_byCharNPCActionState;
  result = 0;
  if ( (unsigned __int8)v2 <= 1u )
  {
    result = Char::ApplyCharNpcBaseAction(v1, 0);
  }
  else
  {
    if ( v2 == 2 )
    {
      if ( v1->m_byEventActionFlag > 0u )
      {
        result = Char::ApplyCharNpcBaseAction(v1, 0);
        v1->m_byEventActionFlag = 0;
      }
    }
  }
  return result;
}

//----- (0063DF80) --------------------------------------------------------
float __thiscall Char::GetAniSpeedFromAbstate(Char *this, AbnormalStateInfo *pkInfo, unsigned int uiActionEventCode)
{
  AbnormalStateInfo *v3; // esi@1
  NiControllerSequence *v4; // eax@2
  SubAbStateInfo *v5; // eax@4
  double v6; // st7@8
  float result; // st7@10
  float fKeepTime; // [sp+Ch] [bp+8h]@4
  float fKeepTimea; // [sp+Ch] [bp+8h]@8
  float fEndTime; // [sp+10h] [bp+Ch]@4

  v3 = pkInfo;
  if ( !pkInfo || (v4 = Char::GetSequence(this, uiActionEventCode)) == 0 || !v4->m_eCycleType )
    goto LABEL_13;
  fEndTime = v4->m_fEndKeyTime;
  fKeepTime = 0.001;
  v5 = SubAbStateInfoTab::GetByInxName(v3->SubAbState);
  if ( v5 )
    fKeepTime = (double)v5->KeepTime * 0.001000000047497451;
  if ( 0.0 == fEndTime || 0.0 == fKeepTime || (fKeepTimea = fEndTime / fKeepTime, v6 = fKeepTimea, fKeepTimea <= 0.0) )
LABEL_13:
    v6 = 1.0;
  LODWORD(result) = LODWORD(v6);
  return result;
}

//----- (0063E030) --------------------------------------------------------
bool __thiscall Char::AddAbStateByAbstateIndex(Char *this, ABSTATEINDEX wIndex, float fLifeTime, bool bNoVisual)
{
  Char *v4; // esi@1
  AbnormalStateInfo *v5; // eax@1
  AbnormalStateInfo *v6; // edi@1
  SubAbStateInfo *v7; // eax@2
  int v8; // ebx@17
  int v9; // edi@17
  int v10; // ecx@19
  int v11; // eax@20
  char v12; // cl@22
  const char *v13; // eax@22
  ActionInfoSet *v14; // ecx@24
  ActionInfo *v15; // ebx@25
  ActiveSkillViewInfo *v16; // eax@28
  const char *v17; // edi@29
  unsigned int v19; // eax@37
  AttackSequenceManagerVtbl *v20; // ebx@39
  float v21; // ST08_4@39
  void *v22; // [sp+4h] [bp-14h]@4
  AbnormalStateInfo *pkInfo; // [sp+14h] [bp-4h]@1
  int pkViewInfo; // [sp+20h] [bp+8h]@20

  v4 = this;
  v5 = AbnormalStateInfoTab::GetByAbstateIndex(wIndex);
  v6 = v5;
  pkInfo = v5;
  if ( !v5 )
    return 0;
  v7 = SubAbStateInfoTab::GetByInxName(v5->SubAbState);
  if ( v6->AbStataIndex == 358 )
  {
    if ( JumpProcessor::IsJump(&v4->m_kJumpProcessor) )
    {
      *(_WORD *)&v4->m_bAniStop = 256;
      v22 = GameFrameWorkID;
    }
    else
    {
      v4->m_bAniStop = 1;
      v22 = GameFrameWorkID;
    }
LABEL_15:
    PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, v22);
    goto LABEL_16;
  }
  if ( v7 && (v7->ActionIndexA == 110 || v7->ActionIndexB == 110 || v7->ActionIndexC == 110 || v7->ActionIndexD == 110) )
  {
    if ( JumpProcessor::IsJump(&v4->m_kJumpProcessor) )
      *(_WORD *)&v4->m_bAniStop = 256;
    else
      v4->m_bAniStop = 1;
    v22 = GameFrameWorkID;
    goto LABEL_15;
  }
LABEL_16:
  if ( AbStateInfectee::AddAbState(&v4->baseclass_0, v6->ID, fLifeTime, bNoVisual) != 1
    || (v8 = v6->ID,
        v9 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
        !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                            v8))
    || (unsigned __int16)v8 > *(_WORD *)(v9 + 200)
    || (v10 = *(_DWORD *)(v9 + 196), !*(_DWORD *)(v10 + 4 * v8))
    || (v11 = *(_DWORD *)(v10 + 4 * v8), (pkViewInfo = v11) == 0)
    || v4->m_bWillDead
    || (v12 = *(_BYTE *)(v11 + 329), v13 = (const char *)(v11 + 329), v12 == 45)
    || v12 == 32 )
    return 0;
  v14 = v4->m_kActionMgr.m_pkActInfoSet;
  if ( !v14 || (v15 = ActionInfoSet::GetByInxName(v14, v13)) == 0 )
  {
    ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v4);
    return 0;
  }
  Char::GetAniCode(v4, 0, (unsigned int *)&bNoVisual, 0);
  if ( bNoVisual == 600000 || bNoVisual == 700000 )
  {
    v16 = v4->m_kActionMgr.m_pkCurPlaySkillViewInfo;
    if ( !v16 )
      return 0;
    v17 = v16->InxName;
    if ( !strncmp(v16->InxName, "FatalShadow", 0xBu) )
    {
      if ( strncmp((const char *)(pkViewInfo + 2), "StaShadowBinding", 0x10u) )
        return 0;
      goto LABEL_34;
    }
    if ( strncmp(v17, "SD_KingCrabSkill07_N", 0x14u)
      || strncmp((const char *)(pkViewInfo + 2), "StaSDVale01_Wheel", 0x11u) )
      return 0;
  }
LABEL_34:
  if ( JumpProcessor::IsJump(&v4->m_kJumpProcessor) == 1 )
    JumpProcessor::ForceEnd(&v4->m_kJumpProcessor, 1);
  Char::UpdateForceAni(v4);
  if ( Char::ActAction(v4, v15->InxName, 0) == 1 )
  {
    v19 = v15->uiEventCode;
    if ( v19 == 45 )
    {
      ((void (__stdcall *)(_DWORD))v4->baseclass_54.vfptr->SetAnimationSpeed)(1.0);
      return 1;
    }
    v20 = v4->baseclass_54.vfptr;
    v21 = Char::GetAniSpeedFromAbstate(v4, pkInfo, v19);
    ((void (__thiscall *)(AttackSequenceManager *, _DWORD))v20->SetAnimationSpeed)(&v4->baseclass_54, LODWORD(v21));
  }
  return 1;
}
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (0063E2E0) --------------------------------------------------------
void __thiscall Char::DeleteAbStateByAbstateIndex(Char *this, ABSTATEINDEX wIndex)
{
  Char *v2; // esi@1
  AbnormalStateInfo *v3; // eax@1
  AbnormalStateInfo *v4; // edi@1
  SubAbStateInfo *v5; // eax@2

  v2 = this;
  v3 = AbnormalStateInfoTab::GetByAbstateIndex(wIndex);
  v4 = v3;
  if ( v3 )
  {
    v5 = SubAbStateInfoTab::GetByInxName(v3->SubAbState);
    if ( v4->AbStataIndex == 358
      || v5
      && (v5->ActionIndexA == 110 || v5->ActionIndexB == 110 || v5->ActionIndexC == 110 || v5->ActionIndexD == 110) )
    {
      if ( Char::IsActRunning(v2) && !Char::CheckActState(v2, 500000) )
        ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
      if ( JumpProcessor::IsJump(&v2->m_kJumpProcessor) )
        ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
      v2->m_bAniStop = 0;
      PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    }
    AbStateInfectee::DeleteAbState(&v2->baseclass_0, v4->ID, 0);
  }
}

//----- (0063E3A0) --------------------------------------------------------
ActionEffectInfo *__thiscall Char::GetSEFromLastAtk(Char *this, ActionInfo *LastAtkInfo)
{
  Char *v2; // esi@1
  ActionEffectInfo *result; // eax@2
  NiControllerSequence *v4; // eax@3

  v2 = this;
  if ( LastAtkInfo )
  {
    v4 = Char::GetSequence(this, LastAtkInfo->uiEventCode);
    result = ActionMgr::GetSE(&v2->m_kActionMgr, v4);
    if ( !result )
      result = ActionEffectInfoTab::GetByID(0);
  }
  else
  {
    OutputDebugStringA("shoot! Use Default\n");
    result = ActionEffectInfoTab::GetByID(0);
  }
  return result;
}

//----- (0063E3F0) --------------------------------------------------------
void __thiscall Char::SetAbstateAffect(Char *this, AbStateInst *pkAbState)
{
  int v2; // ebx@1
  GameFrameWork *v3; // esi@1
  Char *v4; // edi@1
  int v5; // edx@3
  int v6; // eax@4
  signed int v7; // eax@5
  CSpactralGlow_Shader_Controller *v8; // eax@9
  NiTListItem<AbStateInst *> *v9; // esi@14
  AbStateInst *v10; // eax@15
  unsigned int v11; // ST20_4@21
  CClientGuild *v12; // eax@21
  NiTListItem<AbStateInst *> *v13; // edi@24
  AbStateInst *v14; // eax@25
  CharShape *v15; // edi@30
  PgFrameWork *v16; // eax@32
  NiTListItem<AbStateInst *> *v17; // eax@37
  AbStateInst *v18; // esi@40
  AbnormalStateViewInfo *v19; // ebx@41
  Effect *v20; // eax@44
  unsigned int *v21; // esi@44
  AbnormalStateInfo *v22; // eax@51
  SubAbStateInfo *v23; // eax@52
  double v24; // st7@53
  bool v25; // sf@53
  AbnormalStateInfo *v26; // eax@54
  SubAbStateInfo *v27; // eax@55
  AbnormalStateInfo *v28; // eax@58
  unsigned __int16 v29; // [sp+14h] [bp-14h]@50
  AbnormalStateInfo *pkAbstateInfo; // [sp+24h] [bp-4h]@41
  NiTListItem<AbStateInst *> *kIter; // [sp+30h] [bp+8h]@40
  signed int kItera; // [sp+30h] [bp+8h]@53

  v2 = pkAbState->kID;
  v3 = ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)((int (__thiscall *)(GameFrameWork *, _DWORD))ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable->baseclass_0.baseclass_0.vfptr->DirectDispatchToChildren)(
                          ITableBase<AbnormalStateInfo_AbnormalStateInfoTab>::ms_pkTable,
                          pkAbState->kID) )
  {
    if ( (unsigned __int16)v2 <= LOWORD(v3->m_ResList[2].m_eAspect) )
    {
      v5 = *(_DWORD *)&v3->m_ResList[2].m_bCheckAdd;
      if ( *(_DWORD *)(v5 + 4 * v2) )
      {
        v6 = *(_DWORD *)(v5 + 4 * v2);
        if ( v6 )
        {
          v7 = *(_DWORD *)(v6 + 34);
          if ( v7 > 461 )
          {
            switch ( v7 )
            {
              case 554:
                goto $LN14_54;
              case 625:
                v22 = AbnormalStateInfoTab::GetByAbstateIndex(0x271u);
                if ( !v22 || (v23 = SubAbStateInfoTab::GetByInxName(v22->SubAbState)) == 0 )
                  return;
                kItera = v23->KeepTime;
                v24 = (double)kItera;
                v25 = kItera < 0;
                goto LABEL_62;
              case 626:
                v26 = AbnormalStateInfoTab::GetByAbstateIndex(0x272u);
                if ( !v26 || (v27 = SubAbStateInfoTab::GetByInxName(v26->SubAbState)) == 0 )
                  return;
                v25 = (v27->KeepTime & 0x80000000u) != 0;
                goto LABEL_61;
              case 744:
                v29 = 744;
                goto LABEL_58;
              default:
                return;
            }
          }
          else
          {
            if ( v7 == 461 )
            {
$LN14_54:
              if ( !v4->m_bShockWave )
              {
                v29 = 461;
LABEL_58:
                v28 = AbnormalStateInfoTab::GetByAbstateIndex(v29);
                if ( v28 )
                {
                  v27 = SubAbStateInfoTab::GetByInxName(v28->SubAbState);
                  if ( v27 )
                  {
                    v25 = (v27->KeepTime & 0x80000000u) != 0;
LABEL_61:
                    v24 = (double)(signed int)v27->KeepTime;
LABEL_62:
                    if ( v25 )
                      v24 = v24 + 4294967300.0;
                    v4->m_fGroudStrikeKeepTime = v24 / 1000.0;
                    Char::SetShockWave(v4, 1);
                  }
                }
              }
            }
            else
            {
              switch ( v7 )
              {
                case 371:
                  if ( v4->m_dwGuildRegNum == g_pkMainChar->m_dwGuildRegNum )
                  {
                    v8 = CharShape::GetShader_Ctrl(&v4->m_kCharShape);
                    CSpactralGlow_Shader_Controller::SetUseShaderName(
                      v8,
                      "FxSkinning_SpactralGlow",
                      "FxNoSkinning_SpactralGlow");
                    CharShape::SetSPactralGlowEnable(&v4->m_kCharShape, 1);
                    if ( (unsigned __int8)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[15].SetAbStateProperty)(v4)
                      && !CSpactralGlow_Shader_Controller::IsEnable(&v4->m_kRidePetCtl.m_kShaderCtrl) )
                    {
                      CSpactralGlow_Shader_Controller::SetUseShaderName(
                        &v4->m_kRidePetCtl.m_kShaderCtrl,
                        "FxSkinning_SpactralGlow",
                        "FxNoSkinning_SpactralGlow");
                      CSpactralGlow_Shader_Controller::SetEnable(&v4->m_kRidePetCtl.m_kShaderCtrl, 1);
                    }
                    CSpactralGlow_Shader_Controller::SetUseShaderName(
                      &v4->m_kRestHouseShader,
                      "FxSkinning_SpactralGlow",
                      "FxNoSkinning_SpactralGlow");
                    CSpactralGlow_Shader_Controller::SetEnable(&v4->m_kRestHouseShader, 1);
                    if ( v4 == g_pkMainChar )
                      goto LABEL_67;
                    if ( *(_DWORD *)&v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
                    {
                      v9 = v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
                      while ( v9 )
                      {
                        v10 = v9->m_element;
                        v9 = v9->m_pkNext;
                        if ( v10 && v10->pkLoopingEffect )
                          v10->pkLoopingEffect->baseclass_0.vfptr[21].__vecDelDtor(
                            (NiRefObject *)v10->pkLoopingEffect,
                            0);
                      }
                    }
                    v4->baseclass_0.m_kAbStateProperty.bVisible = 1;
                    if ( v4 == g_pkMainChar )
LABEL_67:
                      v4->baseclass_0.m_kAbStateProperty.bVisible = 0;
                  }
                  v11 = v4->m_dwGuildRegNum;
                  v12 = GuildTask::GetGuild();
                  if ( CClientGuild::IsGttAttackableEnemyGuild(v12, v11) )
                  {
                    v4->baseclass_0.m_kAbStateProperty.bVisible = 0;
                    if ( v4 != g_pkMainChar )
                    {
                      if ( *(_DWORD *)&v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
                      {
                        v13 = v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
                        while ( v13 )
                        {
                          v14 = v13->m_element;
                          v13 = v13->m_pkNext;
                          if ( v14 )
                          {
                            if ( v14->pkLoopingEffect )
                              v14->pkLoopingEffect->baseclass_0.vfptr[21].__vecDelDtor(
                                (NiRefObject *)v14->pkLoopingEffect,
                                0);
                          }
                        }
                      }
                    }
                  }
                  break;
                case 374:
                  v15 = &v4->m_kCharShape;
                  CharShape::SetGTIBomb(v15, 1);
                  CharShape::Link(v15, LINK_EYE, 0, 0x1Au);
                  CharShape::SetHairPartsVisible(v15, 1);
                  CharShape::Link(v15, 0, 0, 0x1Bu);
                  break;
                case 372:
                  if ( v4 == g_pkMainChar )
                  {
                    v16 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                    if ( v16 )
                      MiniMapWin::StartScanEffect(*(MiniMapWin **)&v16[15].m_bInit);
                  }
                  break;
                case 365:
                  v4->m_bGtiSpeed = 1;
                  CNSTimer_Interval::ReSet(&v4->m_kGtiSpeedInterval, Timer::ms_fCurTime);
                  v4->m_kGtiSpeedInterval.m_fCheckTime = 0.039999999;
                  break;
                case 370:
                  Char::CancelSkillAction(v4, 1);
                  if ( AbStateInfectee::IsInList(&v4->baseclass_0, STA_GTIBOMB1) )
                  {
                    if ( *(_DWORD *)&v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
                    {
                      v17 = v4->baseclass_0.m_kAbStateList.baseclass_0.baseclass_0.m_pkHead;
                      if ( v17 )
                      {
                        while ( 1 )
                        {
                          v18 = v17->m_element;
                          kIter = v17->m_pkNext;
                          if ( v18 )
                          {
                            pkAbstateInfo = IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::GetByID(
                                              v18->kID,
                                              1);
                            v19 = IIDTableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab_unsigned_short>::GetByID(
                                    v18->kID,
                                    1);
                            if ( pkAbstateInfo )
                            {
                              if ( v19 )
                              {
                                if ( pkAbstateInfo->AbStataIndex == 374 )
                                {
                                  v20 = v18->pkLoopingEffect;
                                  v21 = (unsigned int *)&v18->pkLoopingEffect;
                                  if ( v20 )
                                  {
                                    EffectMgr::RemoveEffect(&g_kEffectMgr, v20);
                                    *v21 = 0;
                                    EffectMgr::CreateAttachEffect(
                                      &g_kEffectMgr,
                                      v21,
                                      v19->LoopEffect,
                                      v4,
                                      v19->LoopEffPos,
                                      Timer::ms_fCurTime,
                                      1,
                                      0,
                                      0,
                                      1);
                                    *(_BYTE *)(*v21 + 140) = 1;
                                  }
                                }
                              }
                            }
                          }
                          if ( !kIter )
                            break;
                          v17 = kIter;
                        }
                      }
                    }
                  }
                  break;
                default:
                  return;
              }
            }
          }
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063E930) --------------------------------------------------------
bool __thiscall Char::ApplicateAttackSeq(Char *this, AttackSequence *pkAttSeq, bool bAllApplicate)
{
  int v3; // esi@0
  AttackSequence *v4; // ebx@1
  Char *v5; // edi@1
  char v7; // al@3
  Char *v8; // esi@3
  int v9; // eax@11
  int v10; // eax@16
  int v11; // eax@24
  ActionEffectInfo *v12; // edi@25
  char *v13; // [sp-Ch] [bp-3Ch]@28
  ActionEffectInfo *v14; // [sp-8h] [bp-38h]@28
  Char *v15; // [sp-4h] [bp-34h]@28
  Char *v16; // [sp+0h] [bp-30h]@28
  float v17; // [sp+4h] [bp-2Ch]@28
  float v18; // [sp+8h] [bp-28h]@28
  __int16 v19; // [sp+Ch] [bp-24h]@28
  DamageInfoSet *v20; // [sp+10h] [bp-20h]@28
  LastEffPos v21; // [sp+14h] [bp-1Ch]@28
  int v22; // [sp+18h] [bp-18h]@3
  Char *pkAttacker; // [sp+28h] [bp-8h]@3
  int pcShootEffName; // [sp+2Ch] [bp-4h]@3
  Char *pkTargetChar; // [sp+38h] [bp+8h]@22
  char pkTargetChar_3; // [sp+3Bh] [bp+Bh]@3
  ActionInfo *pkActionInfo; // [sp+3Ch] [bp+Ch]@19

  v4 = pkAttSeq;
  v5 = this;
  if ( !pkAttSeq )
    return 0;
  v7 = LOBYTE(this->m_kRidePetCtl.m_kShaderCtrl.m_kArryChildGeometry.m_uiGrowBy);
  v22 = v3;
  v8 = (Char *)((char *)this - 84);
  pkTargetChar_3 = 0;
  pcShootEffName = 0;
  pkAttacker = (Char *)((char *)this - 84);
  if ( !v7 )
    v7 = v8->m_kCharShape.m_kClassID;
  if ( !CharClass::IsKindOf(v7, 11) )
  {
    if ( !v8->m_BeforeMetamorphosisClass && !v8->m_kCharShape.m_kClassID )
    {
      v9 = *(_DWORD *)&v5->m_kRidePetCtl.m_kShaderCtrl.m_kShaderName1.baseclass_0.___u0._Bx._Buf[12];
      if ( !v9 )
        goto LABEL_15;
      if ( *(_DWORD *)(v9 + 98) == 1 )
      {
        pkTargetChar_3 = 0;
        pcShootEffName = v9 + 102;
        goto LABEL_15;
      }
    }
LABEL_14:
    pkTargetChar_3 = 1;
    goto LABEL_15;
  }
  if ( Char::GetWeaponType((Char *)((char *)v5 - 84)) != 10 && Char::GetWeaponType((Char *)((char *)v5 - 84)) != 2 )
    goto LABEL_14;
  pkTargetChar_3 = 0;
LABEL_15:
  if ( !(unsigned __int8)((int (__thiscall *)(char *, int))v8->baseclass_0.vfptr[20].SetAbStateProperty)(
                           (char *)v5 - 84,
                           v22)
    || (v10 = *(_DWORD *)&v5->m_kRidePetCtl.m_kShaderCtrl.m_kShaderName1.baseclass_0.___u0._Bx._Buf[12]) == 0 )
  {
    if ( !pkTargetChar_3 )
      goto LABEL_19;
    return DamageInfoSet::Applicate(&v4->kDamageInfoSet, (Char *)((char *)v5 - 84), bAllApplicate);
  }
  if ( *(_DWORD *)(v10 + 98) != 1 )
    return DamageInfoSet::Applicate(&v4->kDamageInfoSet, (Char *)((char *)v5 - 84), bAllApplicate);
  pcShootEffName = v10 + 102;
LABEL_19:
  pkActionInfo = v5->m_kActionMgr.baseclass_0.m_pkCurrActionInfo;
  if ( !pcShootEffName )
    pcShootEffName = (int)"Arrow";
  if ( *(_DWORD *)&v4->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    pkTargetChar = CharMgr::GetChar(
                     &g_kCharMgr,
                     v4->kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead->m_element->kTargetHandle);
    if ( pkTargetChar )
    {
      if ( v4->m_SeqNum != -1 )
      {
        v11 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr->Deaffect)(v5);
        if ( !EffectMgr::GetArrowEffectInList(&g_kEffectMgr, v4->m_SeqNum, *(_WORD *)(v11 + 548)) )
        {
          v12 = ActionMgr::GetFirstAE(
                  (ActionMgr *)&v5->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize,
                  RANGE_AE,
                  1);
          if ( !v12 )
            v12 = Char::GetSEFromLastAtk(v8, pkActionInfo);
          if ( ActionInfoTable::GetEffPos(v12->GEffectPos, 0) == 9 )
          {
            v21 = 1;
            v20 = &v4->kDamageInfoSet;
            v19 = v4->m_SeqNum;
            v18 = 800.0;
            v17 = Timer::ms_fCurTime;
            v16 = pkTargetChar;
            v15 = pkAttacker;
            v14 = v12;
            v13 = (char *)pcShootEffName;
          }
          else
          {
            v21 = 0;
            v20 = &v4->kDamageInfoSet;
            v19 = v4->m_SeqNum;
            v18 = 800.0;
            v17 = Timer::ms_fCurTime;
            v16 = pkTargetChar;
            v15 = pkAttacker;
            v14 = v12;
            v13 = (char *)pcShootEffName;
          }
          if ( !EffectMgr::CreateShootEff(&g_kEffectMgr, v13, v14, v15, v16, v17, v18, v19, v20, v21, 0) )
            DamageInfoSet::Applicate(&v4->kDamageInfoSet, pkAttacker, 1);
          DamageInfoSet::Clear(&v4->kDamageInfoSet);
        }
      }
    }
  }
  return 0;
}
// 63E930: could not find valid save-restore pair for esi
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063EB60) --------------------------------------------------------
void __thiscall Char::Affect(Char *this, AbStateInst *pkAbState, bool bNoVisual)
{
  AbStateInst *v3; // ebx@1
  Char *v4; // esi@1
  int v5; // edi@1
  int v6; // edx@1
  int v7; // eax@3
  int v8; // edi@4
  MapNavigator *v9; // eax@17
  PgFrameWork *v10; // ecx@24
  void *v11; // ecx@24
  D3DXCOLOR *v12; // eax@25
  D3DXCOLOR v13; // ST0C_16@25
  char *v14; // eax@25
  int v15; // eax@27
  char v16; // cl@28
  char v17; // cl@29
  bool v18; // zf@30
  Effect *v19; // eax@36
  bool v20; // al@38
  Effect *v21; // eax@43
  Effect *v22; // eax@44
  AbStateInst *v23; // eax@57
  Effect *v24; // eax@61
  Effect *v25; // eax@65
  Effect *v26; // eax@67
  Effect *v27; // eax@69
  Effect *v28; // eax@71
  AbnormalStateViewInfo::EffPosEnum v29; // [sp+4h] [bp-44h]@58
  char *v30; // [sp+8h] [bp-40h]@33
  char *v31; // [sp+8h] [bp-40h]@41
  float v32; // [sp+8h] [bp-40h]@58
  Char *v33; // [sp+Ch] [bp-3Ch]@33
  Char *v34; // [sp+Ch] [bp-3Ch]@41
  bool v35; // [sp+Ch] [bp-3Ch]@58
  AbnormalStateViewInfo::EffPosEnum v36; // [sp+10h] [bp-38h]@33
  AbnormalStateViewInfo::EffPosEnum v37; // [sp+10h] [bp-38h]@41
  bool v38; // [sp+10h] [bp-38h]@58
  float v39; // [sp+14h] [bp-34h]@33
  float v40; // [sp+14h] [bp-34h]@41
  bool v41; // [sp+14h] [bp-34h]@58
  bool v42; // [sp+18h] [bp-30h]@33
  bool v43; // [sp+18h] [bp-30h]@41
  bool v44; // [sp+18h] [bp-30h]@58
  char v45; // [sp+28h] [bp-20h]@25
  PgFrameWork *pkWin; // [sp+38h] [bp-10h]@16
  MapNavigator *v47; // [sp+3Ch] [bp-Ch]@18
  NiPointer<MapNavigator> result; // [sp+40h] [bp-8h]@17
  void *pkMapNavi; // [sp+44h] [bp-4h]@1
  char *bNoVisuala; // [sp+54h] [bp+Ch]@29

  v3 = pkAbState;
  v4 = this;
  AbStateInfectee::Affect(&this->baseclass_0, pkAbState, bNoVisual);
  Char::SetAbstateAffect(v4, pkAbState);
  v5 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
  v6 = *(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
  pkMapNavi = (void *)pkAbState->kID;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, void *))(v6 + 16))(
                           ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                           pkMapNavi)
    || (unsigned __int16)pkMapNavi > *(_WORD *)(v5 + 200)
    || (v7 = *(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)pkMapNavi, !*(_DWORD *)v7)
    || (v8 = *(_DWORD *)v7) == 0 )
    return;
  if ( pkAbState->pkFirstEffect )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, pkAbState->pkFirstEffect);
    pkAbState->pkFirstEffect = 0;
  }
  if ( pkAbState->pkLoopingEffect )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, pkAbState->pkLoopingEffect);
    pkAbState->pkLoopingEffect = 0;
  }
  if ( v4->baseclass_0.m_kAbStateProperty.iUnMovableCount
    && (unsigned __int8)v4->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v4)
    && !v4->m_bWillDead )
    ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v4);
  if ( g_pkMainChar->m_kHandle == v4->m_kHandle
    && (g_pkMainChar->baseclass_0.m_kAbStateProperty.iUnMovableCount
     || g_pkMainChar->baseclass_0.m_kAbStateProperty.iFearCount > 0) )
  {
    pkWin = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( pkWin )
    {
      v9 = MapNavigator::GetMapNavigator(&result)->m_pObject;
      pkMapNavi = v9;
      if ( result.m_pObject )
      {
        v47 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) && v47 )
          ((void (__stdcall *)(signed int))v47->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
        v9 = (MapNavigator *)pkMapNavi;
      }
      if ( v9 )
      {
        if ( v9->m_bIsWorking )
        {
          v10 = pkWin;
          v9->m_bIsWorking = 0;
          v11 = (void *)v10[33].m_kMsgQ.m_uiHead;
          pkWin = (PgFrameWork *)v11;
          if ( v11 )
          {
            GTInformWin::Clear((GTInformWin *)v11);
            v12 = Color::GetDxColor((D3DXCOLOR *)&v45, -1, -112, 0, -1);
            *(_QWORD *)&v13.r = *(_QWORD *)&v12->r;
            *(_QWORD *)&v13.b = *(_QWORD *)&v12->b;
            v14 = TextData2::Get(0x3C517589u);
            GTInformWin::AddText((GTInformWin *)pkWin, v14, COERCE_D3DXCOLOR(v13.r), 0, 3.0);
          }
        }
      }
    }
  }
  pkAbState->acLastEffectName[0] = 45;
  pkAbState->acLastEffectName[1] = 0;
  if ( bNoVisual )
    return;
  v15 = v8 + 434;
  do
  {
    v16 = *(_BYTE *)v15;
    *((_BYTE *)&pkAbState[-3] + v15 - v8 - 38) = *(_BYTE *)v15;
    ++v15;
  }
  while ( v16 );
  v17 = *(_BYTE *)(v8 + 361);
  bNoVisuala = (char *)(v8 + 361);
  if ( v17 == 45 )
  {
LABEL_55:
    if ( *(_BYTE *)(v8 + 398) != 45 )
    {
      if ( v4 == g_pkMainChar )
      {
        v44 = 1;
        v41 = 0;
        v38 = 0;
        v35 = 1;
        v32 = Timer::ms_fCurTime;
        v29 = *(_DWORD *)(v8 + 430);
        v23 = pkAbState;
      }
      else
      {
        v18 = AbStateInfectee::FindNomalAbstate(&v4->baseclass_0, STA_GTIHIDE) == 0;
        v23 = pkAbState;
        if ( v18 )
        {
          v44 = 1;
          v41 = 0;
          v38 = 0;
          v35 = 1;
          v32 = Timer::ms_fCurTime;
          v29 = *(_DWORD *)(v8 + 430);
        }
        else
        {
          v44 = 0;
          v41 = 0;
          v38 = 0;
          v35 = 1;
          v32 = Timer::ms_fCurTime;
          v29 = *(_DWORD *)(v8 + 430);
        }
      }
      EffectMgr::CreateAttachEffect(
        &g_kEffectMgr,
        (unsigned int *)&v23->pkLoopingEffect,
        (char *)(v8 + 398),
        v4,
        v29,
        v32,
        v35,
        v38,
        v41,
        v44);
      v24 = pkAbState->pkLoopingEffect;
      if ( v24 )
        v24->m_bLoop = 1;
    }
    v3 = pkAbState;
    goto LABEL_64;
  }
  v18 = *(_BYTE *)(v8 + 398) == 45;
  pkMapNavi = (void *)(v8 + 398);
  if ( v18 )
  {
    if ( v17 != 45 )
    {
      if ( strcmp((const char *)(v8 + 2), "StaTimeAttack") && strcmp((const char *)(v8 + 2), "StaTimeAttackMini") )
      {
        if ( v4 == g_pkMainChar )
        {
          EffectMgr::CreateAttachEffect(
            &g_kEffectMgr,
            (unsigned int *)&pkAbState->pkFirstEffect,
            bNoVisuala,
            v4,
            *(AbnormalStateViewInfo::EffPosEnum *)(v8 + 393),
            Timer::ms_fCurTime,
            0,
            0,
            0,
            1);
        }
        else
        {
          if ( AbStateInfectee::FindNomalAbstate(&v4->baseclass_0, STA_GTIHIDE) )
            EffectMgr::CreateAttachEffect(
              &g_kEffectMgr,
              (unsigned int *)&pkAbState->pkFirstEffect,
              bNoVisuala,
              v4,
              *(AbnormalStateViewInfo::EffPosEnum *)(v8 + 393),
              Timer::ms_fCurTime,
              0,
              0,
              0,
              0);
          else
            EffectMgr::CreateAttachEffect(
              &g_kEffectMgr,
              (unsigned int *)&pkAbState->pkFirstEffect,
              bNoVisuala,
              v4,
              *(AbnormalStateViewInfo::EffPosEnum *)(v8 + 393),
              Timer::ms_fCurTime,
              0,
              0,
              0,
              1);
        }
      }
      else
      {
        EffectMgr::CreateAniCtrlEffect(
          &g_kEffectMgr,
          (unsigned int *)&pkAbState->pkFirstEffect,
          bNoVisuala,
          v4,
          *(AbnormalStateViewInfo::EffPosEnum *)(v8 + 393),
          Timer::ms_fCurTime,
          0,
          pkAbState->kID);
      }
LABEL_64:
      if ( !AbStateInfectee::IsVisible(&v4->baseclass_0) )
      {
        v25 = v3->pkFirstEffect;
        if ( v25 )
          EffectMgr::SetShow(&g_kEffectMgr, v25, 0, 1);
        v26 = v3->pkLoopingEffect;
        if ( v26 )
          EffectMgr::SetShow(&g_kEffectMgr, v26, 0, 1);
      }
      v27 = v3->pkFirstEffect;
      if ( v27 )
        v27->baseclass_8.vfptr->RegisterEffectMessenger(&v27->baseclass_8, (IEffectDestroyMessenger *)v3);
      v28 = v3->pkLoopingEffect;
      if ( v28 )
        v28->baseclass_8.vfptr->RegisterEffectMessenger(&v28->baseclass_8, (IEffectDestroyMessenger *)v3);
      return;
    }
    goto LABEL_55;
  }
  if ( v4 == g_pkMainChar )
  {
    v42 = 1;
    v39 = Timer::ms_fCurTime;
    v36 = *(_DWORD *)(v8 + 393);
    v33 = v4;
    v30 = (char *)(v8 + 361);
  }
  else
  {
    if ( AbStateInfectee::FindNomalAbstate(&v4->baseclass_0, STA_GTIHIDE) )
    {
      v42 = 0;
      v39 = Timer::ms_fCurTime;
      v36 = *(_DWORD *)(v8 + 393);
      v33 = v4;
      v30 = (char *)(v8 + 361);
    }
    else
    {
      v42 = 1;
      v39 = Timer::ms_fCurTime;
      v36 = *(_DWORD *)(v8 + 393);
      v33 = v4;
      v30 = (char *)(v8 + 361);
    }
  }
  v19 = EffectMgr::JustCreateAttachEffect(&g_kEffectMgr, v30, v33, v36, v39, v42);
  pkAbState->pkFirstEffect = v19;
  if ( v19 )
  {
    if ( v4 == g_pkMainChar || (v20 = AbStateInfectee::FindNomalAbstate(&v4->baseclass_0, STA_GTIHIDE)) != 0 )
    {
      v43 = 0;
      v40 = Timer::ms_fCurTime;
      v37 = *(_DWORD *)(v8 + 430);
      v34 = v4;
      v31 = (char *)pkMapNavi;
    }
    else
    {
      if ( pkAbState->pkFirstEffect )
        v20 = 1;
      v43 = v20 == 0;
      v40 = Timer::ms_fCurTime;
      v37 = *(_DWORD *)(v8 + 430);
      v34 = v4;
      v31 = (char *)pkMapNavi;
    }
    v21 = EffectMgr::JustCreateAttachEffect(&g_kEffectMgr, v31, v34, v37, v40, v43);
    pkAbState->pkLoopingEffect = v21;
    if ( v21 )
    {
      v21->m_bLoop = 1;
      v22 = pkAbState->pkFirstEffect;
      if ( v22 )
      {
        v22->m_pkChainEffect = pkAbState->pkLoopingEffect;
        EffectMgr::PlayEffect(&g_kEffectMgr, pkAbState->pkFirstEffect);
      }
      goto LABEL_64;
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (0063F0E0) --------------------------------------------------------
void __thiscall Char::UpdateNPCAction(Char *this, float fTime)
{
  Char *v2; // esi@1
  char v3; // al@2
  bool v4; // al@5
  int v5; // ebx@10
  int v6; // edi@10
  int v7; // ecx@11
  int v8; // edx@14
  float v9; // ST18_4@18
  void (__thiscall *v10)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@19

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].IsVisible)() )
  {
    v3 = v2->m_byCharNPCActionState;
    if ( (unsigned __int8)v3 <= 1u )
    {
      v4 = Char::ApplyCharNpcBaseAction(v2, 0);
    }
    else
    {
      if ( v3 != 2 || !v2->m_byEventActionFlag )
      {
LABEL_8:
        ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
        goto LABEL_9;
      }
      v4 = Char::ApplyCharNpcBaseAction(v2, 0);
      v2->m_byEventActionFlag = 0;
    }
    if ( v4 )
      goto LABEL_9;
    goto LABEL_8;
  }
LABEL_9:
  if ( !v2->m_byCharNPCActionState )
  {
    v5 = v2->m_pMobViewInfo->NpcViewIndex;
    v6 = ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<CharNPC_ViewInfo_NPCViewInfoTab>::ms_pkTable,
                            v2->m_pMobViewInfo->NpcViewIndex) )
    {
      if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) )
      {
        v8 = *(_DWORD *)(v6 + 196);
        if ( *(_DWORD *)(v8 + 4 * v5) )
          v7 = *(_DWORD *)(v8 + 4 * v5);
        else
          v7 = 0;
      }
      else
      {
        v7 = 0;
      }
    }
    else
    {
      v7 = 0;
    }
    if ( *(_DWORD *)(v7 + 15) )
    {
      v9 = Timer::ms_fDeltaTime + v2->m_fActionTimer;
      v2->m_fActionTimer = v9;
      if ( *(_DWORD *)(v7 + 19) < (unsigned int)(signed __int64)(v9 * 1000.0) )
      {
        v10 = v2->baseclass_0.vfptr[10].SetAbStateProperty;
        v2->m_fActionTimer = 0.0;
        v2->m_byCharNPCActionState = 1;
        v10(&v2->baseclass_0, *(ABSTATEINDEX *)(v7 + 15), 0, 0);
      }
    }
  }
}
// A97640: using guessed type float Timer__ms_fDeltaTime;
// A97F60: using guessed type int ITableBase_CharNPC_ViewInfo_NPCViewInfoTab___ms_pkTable;

//----- (0063F210) --------------------------------------------------------
void __thiscall LinkedEffect::LinkedEffect(LinkedEffect *this)
{
  *(_DWORD *)&this->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_vecEffectHandle.baseclass_0._Mylast = 0;
  this->m_vecEffectHandle.baseclass_0._Myend = 0;
  this->m_bShowLinkEffect = 0;
}

//----- (0063F220) --------------------------------------------------------
bool __thiscall Char::IsHitTime(Char *this, bool bdelHitTimeInfo)
{
  Char *v2; // esi@1
  unsigned int v3; // edi@1
  NiControllerSequence *v4; // edi@6
  ABSTATEINDEX v5; // ecx@10
  int uiFirstCode; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = Char::GetAniCode(this, 0, (unsigned int *)&uiFirstCode, 0);
  if ( uiFirstCode != 300000 && uiFirstCode != 600000 && uiFirstCode != 700000 && !Char::IsActGathering(v2)
    || !v2->m_spActor.m_pObject
    || (v4 = Char::GetSequence(v2, v3)) == 0 )
    return 0;
  if ( !Char::IsActGathering(v2) )
  {
    if ( Char::IsAniState(v2, ANIMATING) == 1 )
      goto LABEL_9;
    return 0;
  }
  if ( !Char::IsAniState(v2, ANIMATING) )
    return 0;
LABEL_9:
  if ( !v2->m_lstfHitTime.baseclass_0.baseclass_0._Mysize
    || (v5 = **(_DWORD **)&v2->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
        *(float *)(v5 + 8) > (double)v4->m_fLastScaledTime) )
    return 0;
  if ( bdelHitTimeInfo == 1 )
    v2->baseclass_0.vfptr[19].DeleteAbStateByAbstateIndex((AbStateInfectee *)v2, v5);
  return 1;
}

//----- (0063F2E0) --------------------------------------------------------
void __thiscall Char::DoOscillation(Char *this, OscTarget e)
{
  Char *v2; // edi@1
  unsigned int v3; // esi@2
  NiControllerSequence *v4; // eax@5
  unsigned int v5; // esi@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *v6; // eax@11
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const v7; // ebx@11
  void *v8; // ecx@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v9; // eax@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v10; // esi@12
  OscTarget v11; // eax@15
  int v12; // eax@30
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > j; // eax@31
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // eax@34
  unsigned int v15; // [sp+4h] [bp-20h]@3
  unsigned int v16; // [sp+4h] [bp-20h]@8
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+10h] [bp-14h]@28
  void *kMap; // [sp+14h] [bp-10h]@12
  float TimeGap; // [sp+18h] [bp-Ch]@13
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const MapItr; // [sp+1Ch] [bp-8h]@11
  float *pkSequence; // [sp+20h] [bp-4h]@10

  v2 = this;
  if ( MachineOpt::ms_kGraphicOption.bScreenShakeEnable )
  {
    v3 = Char::GetAniCode(this, 0, 0, 0);
    v15 = (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 4 ? v2->m_uiLayerAniCode[0] : v3;
    v4 = Char::GetSequence(v2, v15);
    if ( v4 && v4->m_eState == 1 )
    {
      v5 = Char::GetAniCode(v2, 0, 0, 0);
      v16 = (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 4 ? v2->m_uiLayerAniCode[0] : v5;
      pkSequence = (float *)Char::GetSequence(v2, v16);
      if ( pkSequence )
      {
        v6 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)*((_DWORD *)&v2->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
        v7 = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&v6->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        MapItr = v7;
        if ( (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)v7 != v6 )
        {
          do
          {
            v8 = *(void **)(*(_DWORD *)&v7 + 16);
            v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)*((_DWORD *)v8 + 1);
            v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v9->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
            kMap = *(void **)(*(_DWORD *)&v7 + 16);
            if ( (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v10 != v9 )
            {
              do
              {
                TimeGap = pkSequence[15] - *(float *)(*(_DWORD *)&v10 + 12);
                if ( TimeGap < 0.0 || TimeGap >= 0.1000000014901161 )
                {
                  if ( !*(_BYTE *)(*(_DWORD *)&v10 + 21) )
                  {
                    v12 = *(_DWORD *)(*(_DWORD *)&v10 + 8);
                    if ( *(_BYTE *)(v12 + 21) )
                    {
                      for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v10 + 4);
                            !*(_BYTE *)(*(_DWORD *)&i + 21);
                            i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&i + 4) )
                      {
                        if ( v10 != *(_DWORD *)(*(_DWORD *)&i + 8) )
                          break;
                        v10 = i;
                      }
                      v10 = i;
                    }
                    else
                    {
                      v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v10 + 8);
                      for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v12;
                            !*(_BYTE *)(*(_DWORD *)&j + 21);
                            j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&j )
                        v10 = j;
                    }
                  }
                }
                else
                {
                  v11 = *(_DWORD *)(*(_DWORD *)&v7 + 12);
                  switch ( v11 )
                  {
                    case 4:
                      if ( (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].Affect)(v2) )
                      {
                        if ( !Oscillation::IsImpacting(&stru_B30B98) )
                        {
                          v11 = *(_DWORD *)(*(_DWORD *)&v7 + 12);
                          goto LABEL_19;
                        }
                      }
                      else
                      {
                        if ( v2->m_kHandle == g_pkMainChar->m_kHandle )
                          World::ImpactCamera(&g_kWorld, *(EffectViewInfo **)(*(_DWORD *)&v10 + 16));
                      }
                      break;
                    case 0:
                    case 1:
                    case 2:
                    case 3:
LABEL_19:
                      if ( Char::IsShakeCondition(v2, v11) == 1 )
                        World::ImpactCamera(&g_kWorld, *(EffectViewInfo **)(*(_DWORD *)&v10 + 16));
                      break;
                    case 5:
                    case 6:
                    case 7:
                      if ( !Oscillation::IsImpacting(&stru_B30B98)
                        && Char::IsShakeCondition(v2, *(OscTarget *)(*(_DWORD *)&v7 + 12)) == 1 )
                        World::ImpactCamera(&g_kWorld, *(EffectViewInfo **)(*(_DWORD *)&v10 + 16));
                      break;
                    case 8:
                      ((void (__thiscall *)(Char *, _DWORD, _DWORD))v2->baseclass_0.vfptr[12].DeleteAbStateByAbstateIndex)(
                        v2,
                        *(_DWORD *)(*(_DWORD *)&v10 + 16),
                        LODWORD(Timer::ms_fCurTime));
                      break;
                    default:
                      OutputDebugStringA("¾Ë¼");
                      break;
                  }
                  v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(*(std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > **)(*(_DWORD *)&v7 + 16), &result, v10)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
                  v8 = kMap;
                }
              }
              while ( v10 != *((_DWORD *)v8 + 1) );
            }
            std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&MapItr);
            v7 = MapItr;
          }
          while ( MapItr != *((_DWORD *)&v2->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) );
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0063F550) --------------------------------------------------------
void __thiscall LinkedEffect::Clear(LinkedEffect *this)
{
  LinkedEffect *v1; // esi@1
  int v2; // edi@1
  Effect *v3; // eax@3
  char *v4; // ecx@6
  char *v5; // edi@6

  v1 = this;
  v2 = 0;
  if ( (signed int)((unsigned int)((char *)this->m_vecEffectHandle.baseclass_0._Mylast
                                 - *(_DWORD *)&this->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFC) > 0 )
  {
    do
    {
      if ( v2 < (signed int)((char *)v1->m_vecEffectHandle.baseclass_0._Mylast
                           - *(_DWORD *)&v1->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
        v3 = *(Effect **)(*(_DWORD *)&v1->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v2);
      else
        v3 = 0;
      EffectMgr::RemoveEffect(&g_kEffectMgr, v3);
      ++v2;
    }
    while ( v2 < (signed int)((char *)v1->m_vecEffectHandle.baseclass_0._Mylast
                            - *(_DWORD *)&v1->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
  }
  v4 = (char *)v1->m_vecEffectHandle.baseclass_0._Mylast;
  v5 = *(char **)&v1->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (signed int)((char *)v1->m_vecEffectHandle.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    if ( v5 != v4 )
    {
      memmove(v5, v4, 0);
      v1->m_vecEffectHandle.baseclass_0._Mylast = (unsigned int *)v5;
    }
  }
}

//----- (0063F5D0) --------------------------------------------------------
void __thiscall Char::ClearOscTimeMmap(Char *this)
{
  Char *v1; // edi@1
  int v2; // eax@1
  int v3; // esi@1
  int v4; // eax@3
  int j; // eax@4
  int i; // eax@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = *((_DWORD *)&this->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  v3 = *(_DWORD *)v2;
  if ( *(_DWORD *)v2 != v2 )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
        *(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > **)(v3 + 16),
        &result,
        **(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > **)(*(_DWORD *)(v3 + 16) + 4),
        *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)(v3 + 16) + 4));
      if ( !*(_BYTE *)(v3 + 21) )
      {
        v4 = *(_DWORD *)(v3 + 8);
        if ( *(_BYTE *)(v4 + 21) )
        {
          for ( i = *(_DWORD *)(v3 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
          {
            if ( v3 != *(_DWORD *)(i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(_DWORD *)(v3 + 8);
          for ( j = *(_DWORD *)v4; !*(_BYTE *)(j + 21); j = *(_DWORD *)j )
            v3 = j;
        }
      }
    }
    while ( v3 != *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) );
  }
}

//----- (0063F650) --------------------------------------------------------
void __thiscall Char::CatchHitTime(Char *this)
{
  Char *v1; // edi@1
  unsigned int v2; // eax@2
  NiControllerSequence *v3; // esi@2
  NiTextKeyExtraData *v4; // ebx@3
  unsigned int v5; // edi@4
  NiTextKey *v6; // esi@5
  const char *v7; // ecx@5
  unsigned int KeyNum; // [sp+4h] [bp-Ch]@5
  Char *v9; // [sp+8h] [bp-8h]@1
  float _Val; // [sp+Ch] [bp-4h]@7

  v1 = this;
  v9 = this;
  if ( this->m_spActor.m_pObject )
  {
    v2 = Char::GetAniCode(this, 0, 0, 0);
    v3 = Char::GetSequence(v1, v2);
    if ( v3 )
    {
      v1->baseclass_0.vfptr[19].GetAbstateColor((AbStateInfectee *)v1);
      v4 = v3->m_spTextKeys.m_pObject;
      if ( v4 )
      {
        v5 = 0;
        if ( v4->m_uiNumKeys )
        {
          do
          {
            v6 = v4->m_pKeys;
            v7 = v6[v5].m_pText;
            KeyNum = v4->m_uiNumKeys;
            if ( v7 )
            {
              if ( !strcmp((const char *)&unk_9C309C, v7) )
              {
                _Val = v6[v5].m_fTime;
                std::list<float_std::allocator<float>>::push_back(&v9->m_lstfHitTime, &_Val);
              }
            }
            ++v5;
          }
          while ( v5 < KeyNum );
        }
      }
    }
  }
}

//----- (0063F710) --------------------------------------------------------
void __thiscall Char::ViewNotCampMode(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p)
{
  Char *v2; // esi@1

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].IsVisible)() )
  {
    Char::CulledTent(v2, 1);
    if ( v2->m_BeforeMetamorphosisClass || v2->m_kCharShape.m_kClassID )
      LinkedEffect::Clear(&v2->kLinkedEffect);
    if ( !v2->m_spActor.m_pObject )
    {
      if ( p )
        v2->baseclass_0.vfptr[2].Affect((AbStateInfectee *)v2, (AbStateInst *)&p->shape, (bool)&p->shapedata);
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.vfptr[18].GetAbstateColor)(v2, 1, 0);
    }
  }
}

//----- (0063F780) --------------------------------------------------------
void __thiscall Char::ClearHitTime(Char *this)
{
  Char *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2

  v1 = this;
  v2 = *(void ***)&this->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  if ( *v2 != v2 )
  {
    do
    {
      v4 = *(void **)v3;
      if ( v3 != *(void **)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
      {
        **((_DWORD **)v3 + 1) = v4;
        *(_DWORD *)(*(_DWORD *)v3 + 4) = *((_DWORD *)v3 + 1);
        operator delete(v3);
        --v1->m_lstfHitTime.baseclass_0.baseclass_0._Mysize;
      }
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (0063F7D0) --------------------------------------------------------
void __thiscall Char::DelHitTime(Char *this, std::_List_iterator<std::_List_val<float,std::allocator<float> > > it)
{
  Char *v2; // esi@1

  v2 = this;
  if ( it != *(_DWORD *)&this->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    **(_DWORD **)(*(_DWORD *)&it + 4) = **(_DWORD **)&it;
    *(_DWORD *)(**(_DWORD **)&it + 4) = *(_DWORD *)(*(_DWORD *)&it + 4);
    operator delete(*(void **)&it);
    --v2->m_lstfHitTime.baseclass_0.baseclass_0._Mysize;
  }
}

//----- (0063F810) --------------------------------------------------------
bool __thiscall Char::IsAbStateAction(Char *this)
{
  Char *v1; // ebx@1
  unsigned int v2; // esi@1
  void *v3; // eax@1
  void **v4; // edx@2
  void *v5; // edi@3
  ActionInfoSet *v6; // ecx@4
  ActionInfo *v7; // esi@5
  void *v8; // eax@9
  void *v9; // ecx@9
  void *v10; // esi@10
  std::exception thisa; // [sp+0h] [bp-28h]@13
  std::list<AbnormalStateViewInfo *,std::allocator<AbnormalStateViewInfo *> > lstAbstateAction; // [sp+Ch] [bp-1Ch]@1
  char *_What; // [sp+18h] [bp-10h]@13
  int v15; // [sp+24h] [bp-4h]@2

  v1 = this;
  v2 = 0;
  lstAbstateAction.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0xCu);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&lstAbstateAction.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&lstAbstateAction + 4) = *(_DWORD *)&lstAbstateAction;
  v15 = 0;
  AbStateInfectee::HasAbStateAction(&v1->baseclass_0, &lstAbstateAction);
  v4 = *(void ***)&lstAbstateAction;
  if ( lstAbstateAction.baseclass_0.baseclass_0._Mysize )
  {
    v5 = (void *)**(_DWORD **)&lstAbstateAction;
    if ( **(_DWORD **)&lstAbstateAction != *(_DWORD *)&lstAbstateAction )
    {
      do
      {
        v6 = v1->m_kActionMgr.m_pkActInfoSet;
        if ( v6 != (ActionInfoSet *)v2 )
        {
          v7 = ActionInfoSet::GetByInxName(v6, (const char *)(*((_DWORD *)v5 + 2) + 329));
          if ( v7 && v7->uiEventCode == Char::GetAniCode(v1, 0, 0, 0) )
          {
            std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&lstAbstateAction);
            return 1;
          }
          v4 = *(void ***)&lstAbstateAction;
          v2 = 0;
        }
        v5 = *(void **)v5;
      }
      while ( v5 != v4 );
    }
  }
  v8 = *v4;
  *v4 = v4;
  *(_DWORD *)(*(_DWORD *)&lstAbstateAction + 4) = *(_DWORD *)&lstAbstateAction;
  v9 = *(void **)&lstAbstateAction;
  lstAbstateAction.baseclass_0.baseclass_0._Mysize = v2;
  if ( v8 != *(void **)&lstAbstateAction )
  {
    do
    {
      v10 = *(void **)v8;
      operator delete(v8);
      v9 = *(void **)&lstAbstateAction;
      v8 = v10;
    }
    while ( v10 != *(void **)&lstAbstateAction );
  }
  operator delete(v9);
  return 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0063F950) --------------------------------------------------------
void __thiscall Char::ClearTraceMove(Char *this)
{
  Char *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2

  v1 = this;
  v2 = *(void ***)&this->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  if ( *v2 != v2 )
  {
    do
    {
      v4 = *(void **)v3;
      if ( v3 != *(void **)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
      {
        **((_DWORD **)v3 + 1) = v4;
        *(_DWORD *)(*(_DWORD *)v3 + 4) = *((_DWORD *)v3 + 1);
        operator delete(v3);
        --v1->m_lstTraceMove.baseclass_0.baseclass_0._Mysize;
      }
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (0063F9A0) --------------------------------------------------------
unsigned int __thiscall Char::GetIdleCode(Char *this)
{
  unsigned int v1; // esi@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@3
  void *v4; // eax@7
  void *v5; // esi@7
  void *v6; // edi@11
  std::vector<unsigned int,std::allocator<unsigned int> > vecAniCode; // [sp+0h] [bp-24h]@2
  unsigned int _Val; // [sp+10h] [bp-14h]@9
  MobInfo *pkInfo; // [sp+14h] [bp-10h]@1
  int v11; // [sp+20h] [bp-4h]@2

  v1 = 0;
  pkInfo = this->m_pMobinfo;
  if ( !pkInfo )
    return v1;
  *(_DWORD *)&vecAniCode.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecAniCode.baseclass_0._Mylast = 0;
  vecAniCode.baseclass_0._Myend = 0;
  v11 = 0;
  v2 = 0;
  if ( ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::GetTotal() )
  {
    do
    {
      v3 = v2;
      if ( v2 < ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::GetTotal() )
      {
        while ( !CDataReader::GetRecord(
                   (CDataReader *)(ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable + 4),
                   v3) )
        {
          ++v3;
          if ( v3 >= ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::GetTotal() )
            goto LABEL_10;
        }
        v4 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable + 4),
               v3);
        v5 = v4;
        if ( v4 && !strcmp(pkInfo->InxName, (const char *)v4) )
        {
          _Val = *((_DWORD *)v5 + 8);
          std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
            (std::vector<unsigned long,std::allocator<unsigned long> > *)&vecAniCode,
            &_Val);
        }
      }
LABEL_10:
      ++v2;
    }
    while ( v2 < ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::GetTotal() );
    v6 = *(void **)&vecAniCode;
    if ( *(unsigned int **)&vecAniCode != vecAniCode.baseclass_0._Mylast )
    {
      v1 = *(_DWORD *)(*(_DWORD *)&vecAniCode
                     + 4
                     * rand()
                     % (unsigned int)((signed int)((char *)vecAniCode.baseclass_0._Mylast - *(_DWORD *)&vecAniCode) >> 2));
      if ( v6 )
        operator delete(v6);
      return v1;
    }
    if ( *(_DWORD *)&vecAniCode )
      operator delete(*(void **)&vecAniCode);
  }
  return 0;
}
// A97E8C: using guessed type int ITableBase_MobRandomIdleAni_MobRandomIdleAniTab___ms_pkTable;

//----- (0063FB00) --------------------------------------------------------
void __thiscall Char::_Char(Char *this)
{
  Char *v1; // esi@1
  NiActorManager *v2; // edi@1
  NiNode *v3; // edi@6
  NiNode *v4; // edi@11
  NiNode *v5; // edi@16
  NiNode *v6; // edi@21
  NiNode *v7; // edi@26
  NiNode *v8; // edi@31
  NiNode *v9; // edi@36
  NiLight *v10; // edi@41
  NiLight *v11; // edi@46
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v12; // eax@51
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v13; // edi@51
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v14; // ecx@52
  int v15; // eax@53
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > j; // eax@54
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // eax@57
  DirectionControllers *v18; // edi@62
  NiActorManager *v19; // edi@66
  NiLight *v20; // edi@70
  NiLight *v21; // edi@74
  unsigned int *v22; // ebx@75
  void **v23; // ecx@79
  void *v24; // eax@79
  void *v25; // edi@80
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v26; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v27; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v28; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v29; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v30; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v31; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v32; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v33; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v34; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v35; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v36; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v37; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v38; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v39; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v40; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v41; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v42; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v43; // ST04_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v44; // ST08_4@81
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v45; // ST04_4@81
  NiNode *v46; // edi@81
  NiMaterialProperty *v47; // edi@85
  NiNode *v48; // edi@89
  NiNode *v49; // edi@93
  NiNode *v50; // edi@97
  NiNode *v51; // edi@101
  NiNode *v52; // edi@105
  NiNode *v53; // edi@109
  NiNode *v54; // edi@113
  NiActorManager *v55; // edi@117
  void **v56; // ecx@121
  void *v57; // eax@121
  void *v58; // edi@122
  void *v59; // [sp+0h] [bp-18h]@81
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-14h]@61
  Char *v61; // [sp+8h] [bp-10h]@1
  int v62; // [sp+14h] [bp-4h]@1

  v1 = this;
  v61 = this;
  this->baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Char::_vftable_;
  this->baseclass_3c.vfptr = (IEffectHolderVtbl *)&Char::_vftable_;
  this->baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Char::_vftable_;
  v2 = this->m_spActor.m_pObject;
  v62 = 37;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spActor.m_pObject = 0;
  }
  v3 = v1->m_spCtrlNode.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spCtrlNode.m_pObject = 0;
  }
  v4 = v1->m_spScene.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spScene.m_pObject = 0;
  }
  v5 = v1->m_spHouseNode.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spHouseNode.m_pObject = 0;
  }
  v6 = v1->m_spCharNode.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spCharNode.m_pObject = 0;
  }
  v7 = v1->m_spCarrierNode.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v1->m_spCarrierNode.m_pObject = 0;
  }
  v8 = v1->m_spCharShakeNode.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v1->m_spCharShakeNode.m_pObject = 0;
  }
  v9 = v1->m_spCharShakeTranslateNode.m_pObject;
  if ( v9 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    v1->m_spCharShakeTranslateNode.m_pObject = 0;
  }
  LinkedEffect::Clear(&v1->kLinkedEffect);
  JumpProcessor::clear(&v1->m_kJumpProcessor);
  v10 = v1->m_kAbStateVisual.spIceLight.m_pObject;
  if ( v10 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v1->m_kAbStateVisual.spIceLight.m_pObject = 0;
  }
  v11 = v1->m_kAbStateVisual.spPoisonLight.m_pObject;
  if ( v11 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v1->m_kAbStateVisual.spPoisonLight.m_pObject = 0;
  }
  v1->m_bClearChar = 1;
  AbStateInfectee::ClearAbState(&v1->baseclass_0, 1);
  Char::ClearOscTimeMmap(v1);
  v12 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  v13 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v12->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > **)&v12->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v12 )
  {
    do
    {
      v14 = v13;
      if ( !*(_BYTE *)(*(_DWORD *)&v13 + 21) )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v13 + 8);
        if ( *(_BYTE *)(v15 + 21) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v13 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 21);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v13 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v13 = i;
          }
          v13 = i;
        }
        else
        {
          v13 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v13 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v15;
                !*(_BYTE *)(*(_DWORD *)&j + 21);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&j )
            v13 = j;
        }
      }
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->m_mapShakeInfo,
        &result,
        v14);
    }
    while ( v13 != *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) );
  }
  v1->m_iCharLevel = -1;
  LOBYTE(v62) = 36;
  CSpactralGlow_Shader_Controller::_CSpactralGlow_Shader_Controller(&v1->m_kRestHouseShader);
  v18 = v1->m_spDirectionCtrls.m_pObject;
  LOBYTE(v62) = 35;
  if ( v18 && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.m_uiRefCount) && v18 )
    v18->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v1->m_kRidePetCtl;
  LOBYTE(v62) = 38;
  CSpactralGlow_Shader_Controller::_CSpactralGlow_Shader_Controller(&v1->m_kRidePetCtl.m_kShaderCtrl);
  v19 = v1->m_kRidePetCtl.m_spPetActor.m_pObject;
  LOBYTE(v62) = 34;
  if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.m_uiRefCount) && v19 )
    v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
  LOBYTE(v62) = 33;
  ActionMgr::_ActionMgr(&v1->m_kRidePetAction);
  LOBYTE(v62) = 32;
  ActionMgr::_ActionMgr(&v1->m_kActionMgr_Metamor);
  LOBYTE(v62) = 31;
  ActionMgr::_ActionMgr(&v1->m_kActionMgr);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v1->m_kAbStateVisual;
  v20 = v1->m_kAbStateVisual.spPoisonLight.m_pObject;
  LOBYTE(v62) = 39;
  if ( v20
    && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v20 )
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
  v21 = v1->m_kAbStateVisual.spIceLight.m_pObject;
  LOBYTE(v62) = 30;
  if ( v21 )
  {
    v22 = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v21 )
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
  }
  else
  {
    v22 = 0;
  }
  v23 = *(void ***)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v24 = *v23;
  *v23 = v23;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_lstfHitTime.baseclass_0.baseclass_0._Mysize = (unsigned int)v22;
  if ( v24 != *(void **)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v25 = *(void **)v24;
      operator delete(v24);
      v24 = v25;
    }
    while ( v25 != *(void **)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v1->m_mapForceAllCamShake;
  v26 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v27 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 40;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceAllCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&v59,
    v27,
    v26);
  operator delete(v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapAllCamShake;
  v28 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v29 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 41;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapAllCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v29,
    v28);
  operator delete(v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapForcePartyCamShake;
  v30 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v31 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 42;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForcePartyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v31,
    v30);
  operator delete(v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapPartyCamShake;
  v32 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v33 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 43;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapPartyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v33,
    v32);
  operator delete(v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapForceEnemeyCamShake;
  v34 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v35 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 44;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceEnemeyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v35,
    v34);
  operator delete(v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapEnemyCamShake;
  v36 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v37 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 45;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapEnemyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v37,
    v36);
  operator delete(v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapForceMyCamShake;
  v38 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v39 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 46;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceMyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v39,
    v38);
  operator delete(v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapMyCamShake;
  v40 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v41 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 47;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapMyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v41,
    v40);
  operator delete(v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapDamShake;
  v42 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v43 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v62) = 48;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapDamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v43,
    v42);
  operator delete(v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v59 = &v1->m_mapShakeInfo;
  v44 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  v45 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**((_DWORD **)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  LOBYTE(v62) = 49;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapShakeInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v45,
    v44);
  operator delete(*((void **)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1));
  LOBYTE(v62) = 18;
  CQuestInfoViewMgr::_CQuestInfoViewMgr(&v1->m_kQuestInfoView);
  v59 = &v1->m_kJumpProcessor;
  LOBYTE(v62) = 50;
  NsEffect::_NsEffect(&v1->m_kJumpProcessor.m_kEffect);
  v46 = v1->m_kJumpProcessor.m_spJumpInfo.m_pObject;
  LOBYTE(v62) = 17;
  if ( (unsigned int *)v46 != v22
    && !InterlockedDecrement((volatile LONG *)&v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v46 != v22 )
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
  LOBYTE(v62) = 16;
  MoveToTarget::_MoveToTarget(&v1->m_kMoveToTarget);
  LOBYTE(v62) = 15;
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kSmoothRotater);
  LOBYTE(v62) = 14;
  CharShape::_CharShape(&v1->m_kCharShape);
  v47 = v1->m_spMaterialProp.m_pObject;
  LOBYTE(v62) = 13;
  if ( (unsigned int *)v47 != v22
    && !InterlockedDecrement((volatile LONG *)&v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v47 != v22 )
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
  LOBYTE(v62) = 12;
  OscillationEx::_OscillationEx(&v1->m_kDamageOscillation);
  v48 = v1->m_spCharShakeTranslateNode.m_pObject;
  LOBYTE(v62) = 11;
  if ( (unsigned int *)v48 != v22
    && !InterlockedDecrement((volatile LONG *)&v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v48 != v22 )
    v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
  v49 = v1->m_spCharShakeNode.m_pObject;
  LOBYTE(v62) = 10;
  if ( (unsigned int *)v49 != v22
    && !InterlockedDecrement((volatile LONG *)&v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v49 != v22 )
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v49, 1u);
  v50 = v1->m_spCtrlNode.m_pObject;
  LOBYTE(v62) = 9;
  if ( (unsigned int *)v50 != v22
    && !InterlockedDecrement((volatile LONG *)&v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v50 != v22 )
    v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v50, 1u);
  v51 = v1->m_spHouseNode.m_pObject;
  LOBYTE(v62) = 8;
  if ( (unsigned int *)v51 != v22
    && !InterlockedDecrement((volatile LONG *)&v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v51 != v22 )
    v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v51, 1u);
  v52 = v1->m_spCharNode.m_pObject;
  LOBYTE(v62) = 7;
  if ( (unsigned int *)v52 != v22
    && !InterlockedDecrement((volatile LONG *)&v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v52 != v22 )
    v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
  v53 = v1->m_spCarrierNode.m_pObject;
  LOBYTE(v62) = 6;
  if ( (unsigned int *)v53 != v22
    && !InterlockedDecrement((volatile LONG *)&v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v53 != v22 )
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v53, 1u);
  v54 = v1->m_spScene.m_pObject;
  LOBYTE(v62) = 5;
  if ( (unsigned int *)v54 != v22
    && !InterlockedDecrement((volatile LONG *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && (unsigned int *)v54 != v22 )
    v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v54, 1u);
  v55 = v1->m_spActor.m_pObject;
  LOBYTE(v62) = 4;
  if ( (unsigned int *)v55 != v22
    && !InterlockedDecrement((volatile LONG *)&v55->baseclass_0.m_uiRefCount)
    && (unsigned int *)v55 != v22 )
    v55->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
  v56 = *(void ***)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v57 = *v56;
  *v56 = v56;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_lstTraceMove.baseclass_0.baseclass_0._Mysize = (unsigned int)v22;
  if ( v57 != *(void **)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v58 = *(void **)v57;
      operator delete(v57);
      v57 = v58;
    }
    while ( v58 != *(void **)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  if ( *(unsigned int **)&v1->kLinkedEffect.m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] != v22 )
    operator delete(*(void **)&v1->kLinkedEffect.m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->kLinkedEffect.m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] = v22;
  v1->kLinkedEffect.m_vecEffectHandle.baseclass_0._Mylast = v22;
  v1->kLinkedEffect.m_vecEffectHandle.baseclass_0._Myend = v22;
  LOBYTE(v62) = 1;
  AttackSequenceManager::_AttackSequenceManager(&v1->baseclass_54);
  LOBYTE(v62) = 0;
  IEffectHolder::_IEffectHolder(&v1->baseclass_3c);
  v62 = -1;
  AbStateInfectee::_AbStateInfectee(&v1->baseclass_0);
}
// 9C3364: using guessed type int (*Char___vftable_[2])();
// 9C3384: using guessed type int (__stdcall *Char___vftable_)(int);
// 9C338C: using guessed type int (__thiscall *Char___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00640340) --------------------------------------------------------
bool __thiscall Char::UpdateCulling(Char *this, float fTime)
{
  Char *v2; // esi@1
  NiNode *v3; // edi@1
  NiPoint3 *v4; // eax@1
  float v5; // ST10_4@1
  float v6; // ST14_4@1
  float v7; // ST18_4@1
  float v8; // ST20_4@1
  char v9; // al@2
  AbStateInfecteeVtbl *v10; // edx@5
  void *v11; // eax@6
  bool v12; // bl@8
  bool v13; // zf@9
  bool v14; // cl@18
  AbStateInfecteeVtbl *v15; // edx@19
  void *v16; // eax@20
  MobInfo *v17; // eax@33
  NiNode *v18; // ecx@38
  char v19; // al@48
  MobInfo *v20; // eax@50
  bool result; // al@54
  float fLengthServer; // [sp+1Ch] [bp-8h]@1
  float fLengthToMainChar; // [sp+20h] [bp-4h]@1

  v2 = this;
  v3 = this->m_spScene.m_pObject;
  v4 = World::GetCameraLookAtPos(&g_kWorld);
  v5 = v4->x - v3->baseclass_0.m_kLocal.m_Translate.x;
  v6 = v4->y - v3->baseclass_0.m_kLocal.m_Translate.y;
  v7 = v4->z - v3->baseclass_0.m_kLocal.m_Translate.z;
  v8 = v6 * v6 + v5 * v5 + v7 * v7;
  fLengthToMainChar = sqrt(v8);
  v13 = v2->baseclass_0.m_kAbStateProperty.bTrapVisible == 0;
  fLengthServer = (double)*(unsigned int *)&g_pkMainChar[1].m_AttackTargetHandle;
  v2->m_bIsUpdateScene = 0;
  if ( v13 )
  {
    v9 = g_pkMainChar->m_BeforeMetamorphosisClass;
    if ( !v9 )
      v9 = g_pkMainChar->m_kCharShape.m_kClassID;
    if ( v9 != 15 )
    {
      v10 = v2->baseclass_0.vfptr;
      if ( v2->m_kActionMgr.m_pkCurPlaySkillViewInfo )
        v11 = v10[18].DeleteAbStateByAbstateIndex;
      else
        v11 = v10[18].AddAbStateByAbstateIndex;
      ((void (__thiscall *)(_DWORD, _DWORD))v11)(v2, v2->m_fAnimationUpdateTime);
      v12 = 1;
      v2->m_spScene.m_pObject->baseclass_0.m_uFlags |= 1u;
      if ( !v2->m_spActor.m_pObject )
      {
        v13 = v2->m_spHouseNode.m_pObject->m_kChildren.m_uiESize == 0;
        goto LABEL_43;
      }
      goto LABEL_44;
    }
  }
  if ( v2->m_bNeverCullingFlag
    || Char::IsLinkGate(v2)
    || v2->m_bIsDoor
    || (double)fLengthToMainChar < Char::GetMaxViewLength(v2)
    && v2->m_bConnectServer
    && v2->baseclass_0.vfptr->IsVisible((AbStateInfectee *)v2) )
  {
    v15 = v2->baseclass_0.vfptr;
    if ( v2->m_kActionMgr.m_pkCurPlaySkillViewInfo )
      v16 = v15[18].DeleteAbStateByAbstateIndex;
    else
      v16 = v15[18].AddAbStateByAbstateIndex;
    ((void (__thiscall *)(_DWORD, _DWORD))v16)(v2, v2->m_fAnimationUpdateTime);
    v12 = 1;
    if ( v2->m_bVisibleWeapon == 1 )
    {
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[20].SetAbStateProperty)(v2)
        || CharShape::IsSpactralGlowEnable(&v2->m_kCharShape)
        || v2->m_bCulled )
      {
        CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 0);
        IEffectHolder::AttachEffectShow(&v2->baseclass_3c, 0);
        LinkedEffect::Show(&v2->kLinkedEffect, 0);
      }
      else
      {
        CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 1);
        LinkedEffect::Show(&v2->kLinkedEffect, 1);
        IEffectHolder::AttachEffectShow(&v2->baseclass_3c, 1);
      }
    }
    if ( v2->m_pkMover )
      v2->m_bIsUpdate = 1;
    if ( !v2->m_bIsUpdate )
    {
      if ( !Char::IsLinkGate(v2) )
      {
        if ( !v2->m_bIsDoor )
        {
          v17 = v2->m_pMobinfo;
          if ( !v17 || !MobNoFadeInTab::IsNoFadeIn(v17->InxName) )
            Char::StartFadeIn(v2);
        }
      }
    }
    if ( g_pkMainChar != v2 )
    {
      if ( v2->m_bIsUpdate )
      {
        v18 = v2->m_spScene.m_pObject;
        if ( v18->baseclass_0.m_uFlags & 1 )
        {
          if ( fLengthToMainChar < 500.0 )
            v18->baseclass_0.m_uFlags &= 0xFFFEu;
        }
      }
    }
    v13 = v2->m_spActor.m_pObject == 0;
    v2->m_bIsUpdateScene = 1;
    if ( v13 )
    {
      v13 = v2->m_spHouseNode.m_pObject->m_kChildren.m_uiESize == 0;
LABEL_43:
      if ( v13 )
        goto LABEL_45;
    }
LABEL_44:
    v2->m_bIsUpdate = v12;
    goto LABEL_45;
  }
  if ( v2->m_bIsUpdate )
  {
    Char::StartFadeOut(v2);
    CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 0);
    LinkedEffect::Show(&v2->kLinkedEffect, 0);
    IEffectHolder::AttachEffectShow(&v2->baseclass_3c, 0);
  }
  v14 = v2->m_bCulled;
  v12 = 1;
  v2->m_bIsUpdate = 0;
  v2->m_bCulledOld = v14;
  v2->m_bCulled = 1;
LABEL_45:
  if ( v2->baseclass_0.vfptr->IsVisible((AbStateInfectee *)v2)
    && (v2->m_byType == 4
     || !v2->m_bUserCharacter && (v19 = v2->m_byMode, v19 != 4) && v19 != 5 && (v20 = v2->m_pMobinfo) != 0 && v20->IsNPC
     || fLengthToMainChar <= (double)fLengthServer)
    || !v2->baseclass_0.m_kAbStateProperty.bTrapVisible )
  {
    result = v12;
  }
  else
  {
    CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 0);
    LinkedEffect::Show(&v2->kLinkedEffect, 0);
    IEffectHolder::AttachEffectShow(&v2->baseclass_3c, 0);
    result = 0;
  }
  return result;
}

//----- (006406C0) --------------------------------------------------------
void __thiscall Char::CatchOscillationTime(Char *this)
{
  Char *v1; // ebx@1
  unsigned int v2; // eax@1
  NiControllerSequence *v3; // esi@1
  OscTarget v4; // edi@2
  NiTextKeyExtraData *v5; // esi@4
  NiTextKey *v6; // edi@8
  int v7; // eax@8
  const char *v8; // ecx@9
  char *v9; // eax@10
  char v10; // dl@11
  const char *v11; // edx@12
  unsigned int v12; // ebx@14
  unsigned int v13; // esi@14
  unsigned int v14; // ecx@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@16
  int v16; // eax@18
  bool v17; // zf@18
  signed int v18; // eax@20
  bool v19; // bl@23
  int v20; // esi@26
  unsigned __int16 v21; // ax@26
  EffectViewInfo *v22; // eax@26
  double v23; // st7@26
  std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *v24; // esi@26
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *v25; // eax@26
  void *v26; // [sp+0h] [bp-8Ch]@7
  char v27; // [sp+14h] [bp-78h]@26
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+1Ch] [bp-70h]@5
  std::pair<float,EffectViewInfo *> _Val; // [sp+20h] [bp-6Ch]@26
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const itmap; // [sp+28h] [bp-64h]@5
  NiControllerSequence *pkSequence; // [sp+2Ch] [bp-60h]@1
  float v32; // [sp+30h] [bp-5Ch]@26
  Char *v33; // [sp+34h] [bp-58h]@1
  OscTarget i; // [sp+38h] [bp-54h]@2
  int ui; // [sp+3Ch] [bp-50h]@8
  unsigned int KeyNum; // [sp+40h] [bp-4Ch]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+44h] [bp-48h]@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NoteName; // [sp+60h] [bp-2Ch]@4
  unsigned int v39; // [sp+7Ch] [bp-10h]@1
  int v40; // [sp+88h] [bp-4h]@4
  int v41; // [sp+8Ch] [bp+0h]@1

  v39 = (unsigned int)&v41 ^ __security_cookie;
  v1 = this;
  v33 = this;
  v2 = Char::GetAniCode(this, 0, 0, 0);
  v3 = Char::GetSequence(v1, v2);
  pkSequence = v3;
  if ( v3 )
  {
    Char::ClearOscTimeMmap(v1);
    v4 = 0;
    i = 0;
    while ( 1 )
    {
      NoteName.baseclass_0._Myres = 15;
      NoteName.baseclass_0._Mysize = 0;
      NoteName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NoteName, &byte_9C3046, 0);
      v40 = 0;
      OscillationEx::GetOscillationStr(&NoteName, v4);
      v5 = v3->m_spTextKeys.m_pObject;
      if ( v5 )
      {
        KeyNum = v4;
        itmap = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(&v1->m_mapShakeInfo.baseclass_0, &result, (OscTarget *)&KeyNum)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        if ( itmap == *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) )
        {
          v40 = -1;
          if ( NoteName.baseclass_0._Myres < 0x10 )
            goto LABEL_33;
          v26 = *(void **)&NoteName;
          goto LABEL_32;
        }
        v6 = v5->m_pKeys;
        v7 = 0;
        KeyNum = v5->m_uiNumKeys;
        ui = 0;
        if ( KeyNum )
        {
          do
          {
            v8 = v6[v7].m_pText;
            if ( v8 )
            {
              v9 = v6[v7].m_pText;
              thisa.baseclass_0._Myres = 15;
              thisa.baseclass_0._Mysize = 0;
              thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
              do
                v10 = *v9++;
              while ( v10 );
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v8, v9 - (v8 + 1));
              v11 = *(const char **)&NoteName;
              if ( NoteName.baseclass_0._Myres < 0x10 )
                v11 = (const char *)&NoteName;
              v12 = thisa.baseclass_0._Mysize;
              v13 = NoteName.baseclass_0._Mysize;
              v14 = thisa.baseclass_0._Mysize;
              if ( thisa.baseclass_0._Mysize >= NoteName.baseclass_0._Mysize )
                v14 = NoteName.baseclass_0._Mysize;
              v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
              if ( thisa.baseclass_0._Myres < 0x10 )
                v15 = &thisa;
              v16 = std::char_traits<char>::compare(v15->baseclass_0.___u0.baseclass_0.dummy, v11, v14);
              v17 = v16 == 0;
              if ( !v16 )
              {
                if ( v12 >= v13 )
                  v18 = v12 != v13;
                else
                  v18 = -1;
                v17 = v18 == 0;
              }
              v19 = v17;
              LOBYTE(v40) = 0;
              if ( thisa.baseclass_0._Myres >= 0x10 )
                operator delete(*(void **)&thisa);
              if ( v19 )
              {
                v20 = ui;
                v32 = v6[ui].m_fTime;
                v21 = Char::FindShnIndex(v33, v6, KeyNum, v32);
                v22 = ShakeEffectViewInfoTab::GetByID(v21);
                v23 = v6[v20].m_fTime;
                v24 = *(std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > **)(*(_DWORD *)&itmap + 16);
                _Val.baseclass_0.first = v23;
                _Val.baseclass_0.second = v22;
                v25 = std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(
                        v24,
                        &_Val);
                std::_Tree<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Linsert(
                  (std::_Tree<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *)v24,
                  (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *)&v27,
                  v25,
                  0);
              }
            }
            v7 = ui + 1;
            ui = v7;
          }
          while ( v7 < KeyNum );
          v1 = v33;
        }
        v4 = i;
      }
      v40 = -1;
      if ( NoteName.baseclass_0._Myres < 0x10 )
        goto LABEL_33;
      v26 = *(void **)&NoteName;
LABEL_32:
      operator delete(v26);
LABEL_33:
      ++v4;
      i = v4;
      if ( (signed int)v4 >= 9 )
        return;
      v3 = pkSequence;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00640910) --------------------------------------------------------
bool __thiscall Char::Metamorphosis(Char *this, unsigned __int16 monsterid)
{
  Char *v2; // esi@1
  bool result; // al@1
  DirectionControllers *v4; // ecx@2
  bool v5; // bl@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@2
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@2
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  result = Char::ImmediatelyMetamorphosis(this, monsterid);
  if ( result )
  {
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Metamorphosis", 0xDu);
    v4 = v2->m_spDirectionCtrls.m_pObject;
    v8 = 0;
    v5 = DirectionControllers::DoRunDirection(v4, &thisa) == 0;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    result = v5 == 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006409C0) --------------------------------------------------------
bool __thiscall Char::UnMetamorphosis(Char *this)
{
  Char *v1; // esi@1
  DirectionControllers *v2; // ecx@3
  bool result; // al@5
  bool v4; // [sp+1h] [bp-2Dh]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+2h] [bp-2Ch]@3
  unsigned int v6; // [sp+1Eh] [bp-10h]@1
  int v7; // [sp+2Ah] [bp-4h]@3
  int v8; // [sp+2Eh] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  if ( !(unsigned __int8)((int (__stdcall *)(unsigned int))this->baseclass_0.vfptr[20].SetAbStateProperty)((unsigned int)&v8 ^ __security_cookie)
    || DirectionControllers::IsRunDirection(v1->m_spDirectionCtrls.m_pObject) )
  {
    result = 0;
  }
  else
  {
    ((void (__thiscall *)(Char *, signed int))v1->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(v1, 1);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "UnMetamorphosis", 0xFu);
    v2 = v1->m_spDirectionCtrls.m_pObject;
    v7 = 0;
    v4 = DirectionControllers::DoRunDirection(v2, &thisa) == 0;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    result = v4 == 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00640A90) --------------------------------------------------------
void __thiscall Char::AddTraceMove(Char *this, NiPoint3 *Move)
{
  int v2; // edi@1
  char *v3; // esi@1
  std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *v4; // eax@1
  int v5; // ecx@1

  v2 = *(_DWORD *)&this->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (char *)&this->m_lstTraceMove;
  v4 = std::_List_val<QuestPigeonEffect::EffectInfo_std::allocator<QuestPigeonEffect::EffectInfo>>::_Buynode(
         (std::_List_val<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> > *)&this->m_lstTraceMove,
         *(std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node **)&this->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
         *(std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node **)(v2 + 4),
         (QuestPigeonEffect::EffectInfo *)Move);
  v5 = *((_DWORD *)v3 + 1);
  if ( (unsigned int)(357913940 - v5) < 1 )
    std::_Xlength_error("list<T> too long");
  *((_DWORD *)v3 + 1) = v5 + 1;
  *(_DWORD *)(v2 + 4) = v4;
  v4->_Prev->_Next = v4;
}

//----- (00640AE0) --------------------------------------------------------
void __thiscall Char::UpdateTrace(Char *this)
{
  Char *v1; // esi@1
  int v2; // ecx@2
  float v3; // ST2C_4@2
  float v4; // ST30_4@2
  float v5; // ST34_4@2
  void **v6; // ecx@5
  void *v7; // eax@5
  float kLen; // [sp+28h] [bp-4h]@2

  v1 = this;
  if ( this->m_lstTraceMove.baseclass_0.baseclass_0._Mysize )
  {
    v2 = **(_DWORD **)&this->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v3 = *(float *)(v2 + 8) - v1->m_kMoveToTarget.baseclass_0.baseclass_0.m_pos3End.x;
    v4 = *(float *)(v2 + 12) - v1->m_kMoveToTarget.baseclass_0.baseclass_0.m_pos3End.y;
    v5 = 0.0 - 0.0;
    kLen = v4 * v4 + v3 * v3 + v5 * v5;
    if ( kLen <= 10000.0 )
      ((void (__thiscall *)(Char *, int, _DWORD, NiColor *, _DWORD))v1->baseclass_0.vfptr[7].SetAbStateProperty)(
        v1,
        v2 + 8,
        0,
        &Char::INVALIDPOINT3,
        0);
    if ( kLen <= 1.0 )
    {
      v6 = *(void ***)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v7 = *v6;
      if ( *v6 != v6 )
      {
        **((_DWORD **)v7 + 1) = *(_DWORD *)v7;
        *(_DWORD *)(*(_DWORD *)v7 + 4) = *((_DWORD *)v7 + 1);
        operator delete(v7);
        --v1->m_lstTraceMove.baseclass_0.baseclass_0._Mysize;
      }
    }
  }
}

//----- (00640BD0) --------------------------------------------------------
bool __thiscall LinkedEffect::SetNode(LinkedEffect *this, NiNode *_pNode, unsigned __int16 kHandle)
{
  NiNode *v3; // ebx@1
  LinkedEffect *v4; // edi@1
  NiExtraData *v5; // esi@1
  bool result; // al@2
  int v7; // ecx@3
  int v8; // edx@3
  signed int v9; // eax@3
  int v10; // ebx@7
  NiNode *v11; // esi@11
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // edx@11
  int v13; // ecx@11
  unsigned int v14; // eax@16
  int v15; // esi@16
  signed int v16; // esi@18
  unsigned int *v17; // eax@20
  unsigned int *v18; // eax@24
  void *v19; // ecx@32
  int v20; // edx@32
  signed int v21; // eax@32
  int v22; // ebx@36
  NiNode *v23; // esi@40
  void *(__thiscall *v24)(NiRefObject *, unsigned int); // edx@40
  int v25; // ecx@40
  NiNode *v26; // ebx@41
  unsigned int v27; // eax@46
  int v28; // edx@47
  unsigned int *v29; // ecx@48
  signed int v30; // esi@48
  int v31; // eax@49
  int v32; // eax@50
  int v33; // ecx@50
  unsigned int v34; // ecx@52
  unsigned int *v35; // eax@57
  int v36; // esi@57
  unsigned int *v37; // ecx@59
  int v38; // eax@60
  int v39; // eax@61
  int v40; // ecx@61
  unsigned int v41; // ecx@63
  unsigned int *v42; // eax@68
  NiNode *v43; // [sp+3Ch] [bp-64h]@1
  unsigned int dwEffect; // [sp+40h] [bp-60h]@15
  int v45; // [sp+44h] [bp-5Ch]@11
  int i; // [sp+48h] [bp-58h]@3
  unsigned int v47; // [sp+4Ch] [bp-54h]@12
  bool bResult; // [sp+53h] [bp-4Dh]@3
  NsFindObjectByName kFindObject; // [sp+54h] [bp-4Ch]@3
  unsigned int v50; // [sp+90h] [bp-10h]@1
  int v51; // [sp+9Ch] [bp-4h]@3
  int v52; // [sp+A0h] [bp+0h]@1

  v50 = (unsigned int)&v52 ^ __security_cookie;
  v3 = _pNode;
  v4 = this;
  v43 = _pNode;
  LinkedEffect::Clear(this);
  v5 = 0;
  if ( _pNode )
  {
    bResult = 0;
    kFindObject.baseclass_0.m_pCallBack = 0;
    kFindObject.baseclass_0.m_nCurLevel = -1;
    kFindObject.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&NsFindObjectByName::_vftable_;
    kFindObject.m_szName.baseclass_0._Myres = 15;
    kFindObject.m_szName.baseclass_0._Mysize = 0;
    kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kFindObject.m_vecObject.baseclass_0._Mylast = 0;
    kFindObject.m_vecObject.baseclass_0._Myend = 0;
    v51 = 0;
    NsFindObjectByName::FindObject(&kFindObject, _pNode, "NOOUTLINE");
    v7 = *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
    v8 = 0;
    v9 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                    - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    i = 0;
    if ( v9 > 0 )
    {
      bResult = 1;
      while ( 1 )
      {
        if ( v8 < (unsigned int)v9 )
          v10 = *(_DWORD *)(v7 + 4 * v8);
        else
          v10 = 0;
        if ( (NiExtraData *)v10 != v5 )
          InterlockedIncrement((volatile LONG *)(v10 + 4));
        v11 = *(NiNode **)(v10 + 32);
        v12 = v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor;
        v13 = *(_DWORD *)(v10 + 32);
        LOBYTE(v51) = 1;
        ((void (__thiscall *)(int, int *, int))v12)(v13, &v45, v10);
        if ( v45 )
        {
          v47 = v45;
          if ( !InterlockedDecrement((volatile LONG *)(v45 + 4)) )
          {
            if ( v47 )
              (**(void (__stdcall ***)(_DWORD))v47)(1);
          }
        }
        if ( EffectMgr::CreateAttachEffect(&g_kEffectMgr, &dwEffect, (NiNode *)v10, v11, Timer::ms_fCurTime, 1, kHandle) )
        {
          v14 = (unsigned int)v4->m_vecEffectHandle.baseclass_0._Mylast;
          v15 = dwEffect;
          v47 = dwEffect;
          if ( (unsigned int)&v47 >= v14
            || *(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)&v47 )
          {
            if ( (unsigned int *)v14 == v4->m_vecEffectHandle.baseclass_0._Myend )
              std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
                (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v4,
                1u);
            v18 = v4->m_vecEffectHandle.baseclass_0._Mylast;
            if ( v18 )
              *v18 = v15;
          }
          else
          {
            v16 = (signed int)((char *)&v47 - *(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
            if ( (unsigned int *)v14 == v4->m_vecEffectHandle.baseclass_0._Myend )
              std::vector<BasicInfoFindWord___std::allocator<BasicInfoFindWord__>>::_Reserve(
                (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)v4,
                1u);
            v17 = v4->m_vecEffectHandle.baseclass_0._Mylast;
            if ( v17 )
              *v17 = *(_DWORD *)(*(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v16);
          }
          ++v4->m_vecEffectHandle.baseclass_0._Mylast;
        }
        LOBYTE(v51) = 0;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        v7 = *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
        v9 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                        - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
        v5 = 0;
        ++i;
        if ( i >= v9 )
          break;
        v8 = i;
      }
      v3 = v43;
    }
    if ( NiObjectNET::GetExtraData(&v3->baseclass_0.baseclass_0, "#EF") == v5 )
    {
      v19 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
    }
    else
    {
      std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
        (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&kFindObject.m_vecObject,
        (unsigned int)v5);
      NsFindObjectByName::FindObject(&kFindObject, v3, "Scene Root");
      v19 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
      v20 = 0;
      v21 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                       - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
      v45 = 0;
      if ( v21 > (signed int)v5 )
      {
        while ( 1 )
        {
          if ( v20 < (unsigned int)v21 )
          {
            i = *((_DWORD *)v19 + v20);
            v22 = i;
          }
          else
          {
            v22 = 0;
            i = 0;
          }
          if ( (NiExtraData *)v22 != v5 )
            InterlockedIncrement((volatile LONG *)(v22 + 4));
          v23 = *(NiNode **)(v22 + 32);
          v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor;
          v25 = *(_DWORD *)(v22 + 32);
          LOBYTE(v51) = 2;
          ((void (__thiscall *)(int, NiNode **, int))v24)(v25, &v43, v22);
          if ( v43 )
          {
            v26 = v43;
            if ( !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
              && v26 )
              v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
            v22 = i;
          }
          if ( EffectMgr::CreateAttachEffect(
                 &g_kEffectMgr,
                 &dwEffect,
                 (NiNode *)v22,
                 v23,
                 Timer::ms_fCurTime,
                 1,
                 kHandle) )
          {
            v27 = (unsigned int)v4->m_vecEffectHandle.baseclass_0._Mylast;
            v47 = dwEffect;
            if ( (unsigned int)&v47 >= v27
              || (v28 = *(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0],
                  *(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)&v47) )
            {
              v37 = v4->m_vecEffectHandle.baseclass_0._Myend;
              if ( (unsigned int *)v27 == v37 )
              {
                v38 = (signed int)(v27 - *(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                if ( (unsigned int)v38 > 0x3FFFFFFE )
LABEL_75:
                  std::_Xlength_error("vector<T> too long");
                v39 = v38 + 1;
                v40 = (signed int)((char *)v37 - *(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
                if ( v39 > (unsigned int)v40 )
                {
                  if ( 1073741823 - ((unsigned int)v40 >> 1) >= v40 )
                    v41 = ((unsigned int)v40 >> 1) + v40;
                  else
                    v41 = 0;
                  if ( v41 < v39 )
                    v41 = v39;
                  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v4,
                    v41);
                }
              }
              v42 = v4->m_vecEffectHandle.baseclass_0._Mylast;
              if ( v42 )
                *v42 = v47;
            }
            else
            {
              v29 = v4->m_vecEffectHandle.baseclass_0._Myend;
              v30 = (signed int)((char *)&v47 - v28) >> 2;
              if ( (unsigned int *)v27 == v29 )
              {
                v31 = (signed int)(v27 - v28) >> 2;
                if ( (unsigned int)v31 > 0x3FFFFFFE )
                  goto LABEL_75;
                v32 = v31 + 1;
                v33 = (signed int)((char *)v29 - v28) >> 2;
                if ( v32 > (unsigned int)v33 )
                {
                  if ( 1073741823 - ((unsigned int)v33 >> 1) >= v33 )
                    v34 = ((unsigned int)v33 >> 1) + v33;
                  else
                    v34 = 0;
                  if ( v34 < v32 )
                    v34 = v32;
                  std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
                    (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v4,
                    v34);
                  v22 = i;
                }
              }
              v35 = v4->m_vecEffectHandle.baseclass_0._Mylast;
              v36 = *(_DWORD *)&v4->m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v30;
              if ( v35 )
                *v35 = *(_DWORD *)v36;
            }
            ++v4->m_vecEffectHandle.baseclass_0._Mylast;
          }
          bResult = 1;
          LOBYTE(v51) = 0;
          if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v22)(v22, 1);
          v19 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
          v21 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                           - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
          v5 = 0;
          ++v45;
          if ( v45 >= v21 )
            break;
          v20 = v45;
        }
      }
    }
    if ( v19 != v5 )
      operator delete(v19);
    *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
    kFindObject.m_vecObject.baseclass_0._Mylast = (NiAVObject **)v5;
    kFindObject.m_vecObject.baseclass_0._Myend = (NiAVObject **)v5;
    if ( kFindObject.m_szName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0]);
    result = bResult;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9C335C: using guessed type int (__stdcall *NsFindObjectByName___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00640FC0) --------------------------------------------------------
void __thiscall Char::Char(Char *this)
{
  Char *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  void *v4; // eax@3
  void *v5; // eax@4
  void *v6; // eax@5
  void *v7; // eax@6
  void *v8; // eax@7
  void *v9; // eax@8
  void *v10; // eax@9
  void *v11; // eax@10
  void *v12; // eax@11
  void *v13; // eax@12
  void *v14; // eax@13
  void *v15; // eax@18
  NpNs_MoveToTargetVtbl *v16; // edx@18
  void (__thiscall *v17)(NpNs_MoveToTarget *, float); // eax@18
  void *v18; // eax@18
  void *v19; // eax@19
  NiNode *v20; // eax@21
  void *v21; // eax@26
  void *v22; // eax@28
  void *v23; // eax@29
  NiNode *v24; // eax@31
  void *v25; // eax@36
  void *v26; // eax@38
  void *v27; // eax@39
  NiNode *v28; // eax@41
  void *v29; // eax@46
  void *v30; // eax@48
  void *v31; // eax@49
  NiNode *v32; // eax@51
  void *v33; // eax@56
  void *v34; // eax@58
  void *v35; // eax@59
  NiNode *v36; // eax@61
  void *v37; // eax@66
  void **v38; // ecx@68
  void *v39; // eax@68
  double v40; // st7@70
  void *v41; // eax@70
  void *v42; // eax@71
  NiLight *v43; // eax@73
  void *v44; // eax@78
  NiLight *v45; // eax@80
  NiLight *v46; // eax@80
  NiLight *v47; // eax@80
  float v48; // edx@80
  const int v49; // edx@80
  NiLight *v50; // eax@80
  float v51; // edx@80
  void *v52; // eax@80
  void *v53; // eax@81
  NiLight *v54; // eax@83
  void *v55; // eax@88
  NiLight *v56; // eax@90
  NiLight *v57; // eax@90
  int v58; // edx@90
  NiLight *v59; // eax@90
  float v60; // edx@90
  int v61; // edx@90
  NiLight *v62; // eax@90
  void *v63; // ecx@90
  DirectionControllers *v64; // eax@95
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v65; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v66; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v67; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v68; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v69; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v70; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v71; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v72; // eax@121
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v73; // eax@121
  void **v74; // eax@121
  void *v75; // ecx@121
  void *v76; // edi@122
  void **v77; // ecx@134
  int (__thiscall **pExceptionObject)(void *, char); // [sp+48h] [bp-3Ch]@126
  std::exception thisa; // [sp+54h] [bp-30h]@124
  Char *v80; // [sp+60h] [bp-24h]@1
  float v81; // [sp+64h] [bp-20h]@80
  std::pair<int const ,int> _Val; // [sp+68h] [bp-1Ch]@18
  void *_What; // [sp+70h] [bp-14h]@13
  void *i; // [sp+74h] [bp-10h]@13
  int v85; // [sp+80h] [bp-4h]@1

  v1 = this;
  v80 = this;
  AbStateInfectee::AbStateInfectee(&this->baseclass_0);
  v85 = 0;
  IEffectHolder::IEffectHolder(&v1->baseclass_3c);
  AttackSequenceManager::AttackSequenceManager(&v1->baseclass_54);
  v1->baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Char::_vftable_;
  v1->baseclass_3c.vfptr = (IEffectHolderVtbl *)&Char::_vftable_;
  v1->baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Char::_vftable_;
  *(_DWORD *)&v1->kLinkedEffect.m_vecEffectHandle.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->kLinkedEffect.m_vecEffectHandle.baseclass_0._Mylast = 0;
  v1->kLinkedEffect.m_vecEffectHandle.baseclass_0._Myend = 0;
  v1->kLinkedEffect.m_bShowLinkEffect = 0;
  LOBYTE(v85) = 3;
  v1->m_lstTraceMove.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x14u);
  if ( !v2 )
  {
    _Val.baseclass_0.second = 0;
    v77 = (void **)&_Val.baseclass_0.second;
    goto LABEL_135;
  }
  *(_DWORD *)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_spActor.m_pObject = 0;
  v1->m_spScene.m_pObject = 0;
  v1->m_spCarrierNode.m_pObject = 0;
  v1->m_spCharNode.m_pObject = 0;
  v1->m_spHouseNode.m_pObject = 0;
  v1->m_spCtrlNode.m_pObject = 0;
  v1->m_spCharShakeNode.m_pObject = 0;
  v1->m_spCharShakeTranslateNode.m_pObject = 0;
  OscillationEx::OscillationEx(&v1->m_kDamageOscillation);
  v1->m_spMaterialProp.m_pObject = 0;
  CharShape::CharShape(&v1->m_kCharShape);
  NpNs_SmoothRotateControler::NpNs_SmoothRotateControler(&v1->m_kSmoothRotater);
  MoveToTarget::MoveToTarget(&v1->m_kMoveToTarget);
  JumpProcessor::JumpProcessor(&v1->m_kJumpProcessor);
  CQuestInfoViewMgr::CQuestInfoViewMgr(&v1->m_kQuestInfoView);
  LOBYTE(v85) = 19;
  *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 2) = 0;
  v3 = operator new(0x18u);
  if ( !v3 )
  {
$LN1633:
    _Val.baseclass_0.second = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val.baseclass_0.second);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 20) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 21) = 1;
  LOBYTE(v85) = 20;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x18u);
  if ( !v4 )
  {
$LN1632:
    *(float *)&_What = 0.0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v4;
  *(_DWORD *)v4 = v4;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 21;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x18u);
  if ( !v5 )
  {
$LN1631:
    _Val.baseclass_0.second = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val.baseclass_0.second);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 22;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v6 = operator new(0x18u);
  if ( !v6 )
  {
$LN1630:
    *(float *)&_What = 0.0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v6;
  *(_DWORD *)v6 = v6;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 23;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v7 = operator new(0x18u);
  if ( !v7 )
  {
LABEL_124:
    _Val.baseclass_0.second = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val.baseclass_0.second);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v7;
  *(_DWORD *)v7 = v7;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 24;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v8 = operator new(0x18u);
  if ( !v8 )
  {
    *(float *)&_What = 0.0;
    v77 = &_What;
LABEL_135:
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)v77);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v8;
  *(_DWORD *)v8 = v8;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 25;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v9 = operator new(0x18u);
  if ( !v9 )
    goto $LN1633;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v9;
  *(_DWORD *)v9 = v9;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 26;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v10 = operator new(0x18u);
  if ( !v10 )
    goto $LN1632;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v10;
  *(_DWORD *)v10 = v10;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 27;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v11 = operator new(0x18u);
  if ( !v11 )
    goto $LN1631;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v11;
  *(_DWORD *)v11 = v11;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 28;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v12 = operator new(0x18u);
  if ( !v12 )
    goto $LN1630;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v12;
  *(_DWORD *)v12 = v12;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v85) = 29;
  v1->m_lstfHitTime.baseclass_0.baseclass_0._Mysize = 0;
  v13 = operator new(0xCu);
  if ( !v13 )
    goto LABEL_124;
  *(_DWORD *)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v13;
  *(_DWORD *)v13 = v13;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_kAbStateVisual.spIceLight.m_pObject = 0;
  v1->m_kAbStateVisual.spPoisonLight.m_pObject = 0;
  ActionMgr::ActionMgr(&v1->m_kActionMgr);
  ActionMgr::ActionMgr(&v1->m_kActionMgr_Metamor);
  ActionMgr::ActionMgr(&v1->m_kRidePetAction);
  _What = &v1->m_kRidePetCtl;
  v1->m_kRidePetCtl.m_spPetActor.m_pObject = 0;
  LOBYTE(v85) = 35;
  CSpactralGlow_Shader_Controller::CSpactralGlow_Shader_Controller(&v1->m_kRidePetCtl.m_kShaderCtrl);
  v14 = (void *)*((_DWORD *)_What + 5);
  LOBYTE(v85) = 36;
  i = v14;
  if ( v14 )
  {
    if ( !InterlockedDecrement((volatile LONG *)v14 + 1) && i )
      (**(void (__stdcall ***)(_DWORD))i)(1);
    *((_DWORD *)_What + 5) = 0;
  }
  v15 = _What;
  *(_DWORD *)_What = 0;
  *((_DWORD *)v15 + 1) = 0;
  *((_DWORD *)v15 + 2) = 0;
  *((_DWORD *)v15 + 3) = 0;
  v1->m_spDirectionCtrls.m_pObject = 0;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kGtiSpeedInterval);
  CSpactralGlow_Shader_Controller::CSpactralGlow_Shader_Controller(&v1->m_kRestHouseShader);
  v1->m_RisingTimer.m_fStartTime = 0.0;
  v1->m_RisingTimer.m_fObjectTime = 0.0;
  v1->m_RisingTimer.m_fElapsedTime = 0.0;
  LOBYTE(v85) = 39;
  v1->m_kHandle = -1;
  v1->m_acName[0] = 0;
  v1->m_acLinkGateName[0] = 0;
  v1->m_iHP = 0;
  v1->m_iPrevHP = 0;
  v1->m_iMaxHP = 0;
  v1->m_iSP = 0;
  v1->m_iMaxSP = 0;
  v1->m_iAP = 0;
  v1->m_iMaxAP = 0;
  v1->m_bOldDuringMove = 0;
  v1->m_bIsUpdate = 0;
  NpNs_SmoothRotateControler::Init(&v1->m_kSmoothRotater, &World::ms_kNorthDir, &World::ms_kUpDir);
  *(float *)&_What = NI_PI * 4.0;
  v1->m_kSmoothRotater.m_fSpeed = *(float *)&_What;
  *(_DWORD *)&v1->m_acName[0] = 0;
  *(_DWORD *)&v1->m_acName[4] = 0;
  *(_DWORD *)&v1->m_acName[8] = 0;
  *(_DWORD *)&v1->m_acName[12] = 0;
  *(_DWORD *)&v1->m_acName[16] = 0;
  *(_DWORD *)&v1->m_acName[20] = 0;
  *(_DWORD *)&v1->m_acName[24] = 0;
  *(_DWORD *)&v1->m_acName[28] = 0;
  *(_DWORD *)&v1->m_acName[32] = 0;
  *(_DWORD *)&v1->m_acName[36] = 0;
  v16 = v1->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr;
  v1->m_uiLayerAniCode[0] = NiActorManager::INVALID_EVENT_CODE;
  v17 = v16->SetSpeed;
  v1->m_uiLayerAniCode[1] = NiActorManager::INVALID_EVENT_CODE;
  v1->m_fWalkSpeed = Char::ms_fDefaultWalkSpeed;
  v1->m_fRunSpeed = Char::ms_fDefaultRunSpeed;
  v1->m_fMoveSpeedRate = 1.0;
  ((void (__stdcall *)(_DWORD))v17)(v1->m_fRunSpeed);
  v1->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&v1->m_kMoveToTarget);
  v1->m_byMode = 1;
  v1->m_eStandMode = 0;
  v1->m_eMoveMode = 1;
  v1->m_ReservedHitCharHandle = -1;
  v1->m_eCurPlaySkillType = 0;
  v1->m_kCurPlaySkillID = -1;
  v18 = operator new(0x168u);
  _Val.baseclass_0.second = (int)v18;
  LOBYTE(v85) = 40;
  if ( v18 )
  {
    NsFadeNode::NsFadeNode((NsFadeNode *)v18, 0);
    i = v19;
  }
  else
  {
    i = 0;
  }
  v20 = v1->m_spScene.m_pObject;
  LOBYTE(v85) = 39;
  _What = v20;
  if ( v20 != i )
  {
    if ( v20
      && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && *(float *)&_What != 0.0 )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v21 = i;
    v1->m_spScene.m_pObject = (NiNode *)i;
    if ( v21 )
      InterlockedIncrement((volatile LONG *)v21 + 1);
  }
  NiObjectNET::SetName(&v1->m_spScene.m_pObject->baseclass_0.baseclass_0, CharResMgr::ms_pcCharRootNodeName);
  v1->m_spScene.m_pObject->baseclass_0.m_uFlags |= 1u;
  v22 = operator new(0xE8u);
  _Val.baseclass_0.second = (int)v22;
  LOBYTE(v85) = 41;
  if ( v22 )
  {
    NiNode::NiNode((NiNode *)v22, 0);
    i = v23;
  }
  else
  {
    i = 0;
  }
  v24 = v1->m_spCtrlNode.m_pObject;
  LOBYTE(v85) = 39;
  _What = v24;
  if ( v24 != i )
  {
    if ( v24
      && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && *(float *)&_What != 0.0 )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v25 = i;
    v1->m_spCtrlNode.m_pObject = (NiNode *)i;
    if ( v25 )
      InterlockedIncrement((volatile LONG *)v25 + 1);
  }
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCtrlNode.m_pObject,
    0);
  v26 = operator new(0xE8u);
  _Val.baseclass_0.second = (int)v26;
  LOBYTE(v85) = 42;
  if ( v26 )
  {
    NiNode::NiNode((NiNode *)v26, 0);
    i = v27;
  }
  else
  {
    i = 0;
  }
  v28 = v1->m_spCharNode.m_pObject;
  LOBYTE(v85) = 39;
  _What = v28;
  if ( v28 != i )
  {
    if ( v28
      && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && *(float *)&_What != 0.0 )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v29 = i;
    v1->m_spCharNode.m_pObject = (NiNode *)i;
    if ( v29 )
      InterlockedIncrement((volatile LONG *)v29 + 1);
  }
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCharNode.m_pObject,
    0);
  v1->m_spCharNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
  v30 = operator new(0xE8u);
  _Val.baseclass_0.second = (int)v30;
  LOBYTE(v85) = 43;
  if ( v30 )
  {
    NiNode::NiNode((NiNode *)v30, 0);
    i = v31;
  }
  else
  {
    i = 0;
  }
  v32 = v1->m_spHouseNode.m_pObject;
  LOBYTE(v85) = 39;
  _What = v32;
  if ( v32 != i )
  {
    if ( v32
      && !InterlockedDecrement((volatile LONG *)&v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && *(float *)&_What != 0.0 )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v33 = i;
    v1->m_spHouseNode.m_pObject = (NiNode *)i;
    if ( v33 )
      InterlockedIncrement((volatile LONG *)v33 + 1);
  }
  NiMatrix3::MakeRotation(&v1->m_spHouseNode.m_pObject->baseclass_0.m_kLocal.m_Rotate, NI_PI, 0.0, 0.0, 1.0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spHouseNode.m_pObject,
    0);
  v1->m_spHouseNode.m_pObject->baseclass_0.m_uFlags |= 1u;
  v34 = operator new(0xE8u);
  _Val.baseclass_0.second = (int)v34;
  LOBYTE(v85) = 44;
  if ( v34 )
  {
    NiNode::NiNode((NiNode *)v34, 0);
    i = v35;
  }
  else
  {
    i = 0;
  }
  v36 = v1->m_spCarrierNode.m_pObject;
  LOBYTE(v85) = 39;
  _What = v36;
  if ( v36 != i )
  {
    if ( v36
      && !InterlockedDecrement((volatile LONG *)&v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && *(float *)&_What != 0.0 )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v37 = i;
    v1->m_spCarrierNode.m_pObject = (NiNode *)i;
    if ( v37 )
      InterlockedIncrement((volatile LONG *)v37 + 1);
  }
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCarrierNode.m_pObject,
    0);
  v1->m_spCharNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
  v1->m_uiHitDamage = 0;
  v38 = *(void ***)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v39 = *v38;
  *v38 = v38;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_lstfHitTime.baseclass_0.baseclass_0._Mysize = 0;
  if ( v39 != *(void **)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      _What = *(void **)v39;
      operator delete(v39);
      v39 = _What;
    }
    while ( _What != *(void **)&v1->m_lstfHitTime.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v1->m_kActionMgr.m_fActionStartTime = 0.0;
  v1->m_kActionMgr.m_fActionLastUpdateTime = 0.0;
  v1->m_kActionMgr.m_pkActInfoSet = 0;
  v1->m_kActionMgr.m_pkChar = 0;
  v1->m_kActionMgr.m_pActor = 0;
  v1->m_kActionMgr.m_pkCurPlaySkillViewInfo = 0;
  v1->m_kActionMgr.m_uiCurEventCode = 0;
  v1->m_kActionMgr.m_pkLastAttackActInfo = 0;
  v1->m_kActionMgr.m_iOldLoopCnt = 0;
  v1->m_kActionMgr.m_bUseActorSequence = 0;
  v1->m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&v1->m_kActionMgr.baseclass_0, 0, 0);
  *(_WORD *)&v1->m_kActionMgr.m_abActionEff[0] = 0;
  v1->m_kActionMgr.m_abActionEff[2] = 0;
  *(_WORD *)&v1->m_kActionMgr.m_abActionSnd[0] = 0;
  v1->m_kActionMgr.m_fEffectStartTime = 0.0;
  v1->m_kRidePetAction.m_fActionStartTime = 0.0;
  v1->m_kRidePetAction.m_fActionLastUpdateTime = 0.0;
  v1->m_kRidePetAction.m_pkActInfoSet = 0;
  v1->m_kRidePetAction.m_pkChar = 0;
  v1->m_kRidePetAction.m_pActor = 0;
  v1->m_kRidePetAction.m_pkCurPlaySkillViewInfo = 0;
  v1->m_kRidePetAction.m_uiCurEventCode = 0;
  v1->m_kRidePetAction.m_pkLastAttackActInfo = 0;
  v1->m_kRidePetAction.m_iOldLoopCnt = 0;
  v1->m_kRidePetAction.m_bUseActorSequence = 0;
  v1->m_kRidePetAction.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&v1->m_kRidePetAction.baseclass_0, 0, 0);
  *(_WORD *)&v1->m_kRidePetAction.m_abActionEff[0] = 0;
  v1->m_kRidePetAction.m_abActionEff[2] = 0;
  *(_WORD *)&v1->m_kRidePetAction.m_abActionSnd[0] = 0;
  v1->m_kRidePetAction.m_fEffectStartTime = 0.0;
  v1->m_AttackTargetHandle = -1;
  Char::ResetSkillAction(v1);
  Char::ResetAction(v1);
  v1->m_fLodLength[0] = MachineOpt::ms_kGraphicOption.farrLODLength[0];
  v40 = MachineOpt::ms_kGraphicOption.farrLODLength[1];
  v1->m_bConnectServer = 0;
  v1->m_fLodLength[1] = v40;
  v1->m_bIsChangeCampMode = 0;
  *(_WORD *)&v1->m_kCharAbState.m_bMovable = 1;
  v1->m_fMaxViewLength = 1000.0;
  v1->m_bWillDead = 0;
  v1->m_fMaxLiveLength = 4000.0;
  v1->m_kCharAbState.m_fMoveSpeed = 1.0;
  v1->m_fAnimationUpdateTime = -3.4028235e38;
  v1->m_fLastUpdateTime = -3.4028235e38;
  v1->m_fAnimationSpeed = 1.0;
  Char::CancelEmotion(v1);
  JumpProcessor::clear(&v1->m_kJumpProcessor);
  v1->m_bUseCharTitle = 0;
  memset(v1->m_CharTitleName, 0, 0x100u);
  *(_WORD *)&v1->m_bGroundSkillTargetPointSetted = 0;
  v41 = operator new(0x10Cu);
  _Val.baseclass_0.second = (int)v41;
  LOBYTE(v85) = 45;
  if ( v41 )
  {
    NiAmbientLight::NiAmbientLight((NiAmbientLight *)v41);
    i = v42;
  }
  else
  {
    i = 0;
  }
  v43 = v1->m_kAbStateVisual.spIceLight.m_pObject;
  LOBYTE(v85) = 39;
  _What = v43;
  if ( v43 != i )
  {
    if ( v43
      && !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && *(float *)&_What != 0.0 )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v44 = i;
    v1->m_kAbStateVisual.spIceLight.m_pObject = (NiLight *)i;
    if ( v44 )
      InterlockedIncrement((volatile LONG *)v44 + 1);
  }
  v45 = v1->m_kAbStateVisual.spIceLight.m_pObject;
  v45->m_fDimmer = 100.0;
  ++v45->baseclass_0.m_uiRevID;
  v46 = v1->m_kAbStateVisual.spIceLight.m_pObject;
  v81 = 0.0;
  ++v46->baseclass_0.m_uiRevID;
  *(float *)&_Val.baseclass_0.first = 0.0;
  v46->m_kAmb.r = v81;
  *(float *)&_Val.baseclass_0.second = 1.0;
  LODWORD(v46->m_kAmb.g) = _Val.baseclass_0.first;
  v81 = 0.0;
  *(float *)&_Val.baseclass_0.first = 0.0;
  LODWORD(v46->m_kAmb.b) = _Val.baseclass_0.second;
  v47 = v1->m_kAbStateVisual.spIceLight.m_pObject;
  *(float *)&_Val.baseclass_0.second = 1.0;
  v48 = v81;
  ++v47->baseclass_0.m_uiRevID;
  v81 = 0.0;
  v47->m_kDiff.r = v48;
  v49 = _Val.baseclass_0.first;
  *(float *)&_Val.baseclass_0.first = 0.0;
  LODWORD(v47->m_kDiff.g) = v49;
  LODWORD(v47->m_kDiff.b) = _Val.baseclass_0.second;
  *(float *)&_Val.baseclass_0.second = 1.0;
  v50 = v1->m_kAbStateVisual.spIceLight.m_pObject;
  v51 = v81;
  ++v50->baseclass_0.m_uiRevID;
  v50->m_kSpec.r = v51;
  LODWORD(v50->m_kSpec.g) = _Val.baseclass_0.first;
  LODWORD(v50->m_kSpec.b) = _Val.baseclass_0.second;
  v1->m_kAbStateVisual.spIceLight.m_pObject->baseclass_0.m_bOn = 1;
  v52 = operator new(0x10Cu);
  _Val.baseclass_0.second = (int)v52;
  LOBYTE(v85) = 46;
  if ( v52 )
  {
    NiAmbientLight::NiAmbientLight((NiAmbientLight *)v52);
    i = v53;
  }
  else
  {
    i = 0;
  }
  v54 = v1->m_kAbStateVisual.spPoisonLight.m_pObject;
  LOBYTE(v85) = 39;
  _What = v54;
  if ( v54 != i )
  {
    if ( v54
      && !InterlockedDecrement((volatile LONG *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && *(float *)&_What != 0.0 )
      (**(void (__stdcall ***)(_DWORD))_What)(1);
    v55 = i;
    v1->m_kAbStateVisual.spPoisonLight.m_pObject = (NiLight *)i;
    if ( v55 )
      InterlockedIncrement((volatile LONG *)v55 + 1);
  }
  v56 = v1->m_kAbStateVisual.spPoisonLight.m_pObject;
  v56->m_fDimmer = 1.0;
  ++v56->baseclass_0.m_uiRevID;
  v57 = v1->m_kAbStateVisual.spPoisonLight.m_pObject;
  v81 = 0.2;
  ++v57->baseclass_0.m_uiRevID;
  *(float *)&_Val.baseclass_0.second = 0.2;
  v57->m_kAmb.r = v81;
  *(float *)&_Val.baseclass_0.first = 1.0;
  v57->m_kAmb.g = 1.0;
  v81 = 0.2;
  v58 = _Val.baseclass_0.second;
  *(float *)&_Val.baseclass_0.second = 0.2;
  LODWORD(v57->m_kAmb.b) = v58;
  v59 = v1->m_kAbStateVisual.spPoisonLight.m_pObject;
  *(float *)&_Val.baseclass_0.first = 1.0;
  ++v59->baseclass_0.m_uiRevID;
  v60 = v81;
  v81 = 0.2;
  v59->m_kDiff.r = v60;
  LODWORD(v59->m_kDiff.g) = _Val.baseclass_0.first;
  v61 = _Val.baseclass_0.second;
  *(float *)&_Val.baseclass_0.second = 0.2;
  LODWORD(v59->m_kDiff.b) = v61;
  v62 = v1->m_kAbStateVisual.spPoisonLight.m_pObject;
  *(float *)&_Val.baseclass_0.first = 1.0;
  ++v62->baseclass_0.m_uiRevID;
  v62->m_kSpec.r = v81;
  LODWORD(v62->m_kSpec.g) = _Val.baseclass_0.first;
  LODWORD(v62->m_kSpec.b) = _Val.baseclass_0.second;
  v1->m_kAbStateVisual.spPoisonLight.m_pObject->baseclass_0.m_bOn = 1;
  v1->m_kAttackEquipBackup.kCase1.kPrevRightHandEquipItemID = -1;
  v1->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = -1;
  v1->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = -1;
  v1->m_kEquippedBackup.iBackupCase = 0;
  *(_DWORD *)&v1->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID = -1;
  v1->m_kEquippedBackup.bUnEquipLeftHandAcc = 0;
  *(_DWORD *)&v1->m_kEquippedBackup.kCase1.kPrevShieldAccItemID = 65535;
  v1->m_kAttackEquipBackup.kCase1.kPrevLeftHandEquipItemID = -1;
  v1->m_kAttackEquipBackup.iBackupCase = 0;
  *(_DWORD *)&v1->m_kAttackEquipBackup.kCase1.kPrevRightHandAccItemID = -1;
  *(_WORD *)&v1->m_kEquippedBackup.bUnEquipRightHandAcc = 0;
  v1->m_kAttackEquipBackup.bUnEquipLeftHandAcc = 0;
  *(_DWORD *)&v1->m_kAttackEquipBackup.kCase1.kPrevShieldAccItemID = 65535;
  v1->m_kAttackEquipBackup.bUnEquipShieldAcc = 0;
  v1->m_kTargetResourceHandle = -1;
  v1->m_fPrevLastTime = 3.4028235e38;
  v1->m_bWasHitTime = 0;
  v1->m_fChairHeight = 0.0;
  v1->m_bIsSell = 1;
  v1->m_fActionTimer = 0.0;
  v1->m_bIsDoor = 0;
  v1->m_byType = 0;
  v1->m_dwGuildRegNum = 0;
  v1->m_byMiniHouseSkinID = 0;
  v1->m_bCulled = 1;
  v1->m_dwHpUpdateSkipCount = 0;
  v1->m_dwTOTHpUpdateSkipCount = 0;
  v1->m_bUserCharacter = 1;
  v1->m_byCharNPCActionState = 3;
  *(_WORD *)&v1->m_byEventActionFlag = 0;
  v1->m_pkDownSeq = 0;
  v1->m_pkUpSeq = 0;
  v1->m_pkRightSeq = 0;
  v1->m_pkLeftSeq = 0;
  v1->m_bEnabledHeadMovement = 0;
  v1->m_fTargetPitchWeight = 0.5;
  v1->m_fTargetYawWeight = 0.5;
  v1->m_bVisibleWeapon = 1;
  v1->m_BeforeMetamorphosisClass = 0;
  v1->m_fSaveCharSpeed = 0.0;
  _What = CreateMetamorphosisDirection((NiPointer<DirectionControllers> *)&_Val.baseclass_0.second, v1);
  v63 = v1->m_spDirectionCtrls.m_pObject;
  LOBYTE(v85) = 47;
  i = v63;
  if ( v63 != *(void **)_What )
  {
    if ( v63 && !InterlockedDecrement((volatile LONG *)v63 + 1) && i )
      (**(void (__stdcall ***)(_DWORD))i)(1);
    v64 = *(DirectionControllers **)_What;
    v1->m_spDirectionCtrls.m_pObject = *(DirectionControllers **)_What;
    if ( v64 )
      InterlockedIncrement((volatile LONG *)&v64->baseclass_0.m_uiRefCount);
  }
  LOBYTE(v85) = 39;
  if ( _Val.baseclass_0.second )
  {
    _What = (void *)_Val.baseclass_0.second;
    if ( !InterlockedDecrement((volatile LONG *)(_Val.baseclass_0.second + 4)) )
    {
      if ( *(float *)&_What != 0.0 )
        (**(void (__stdcall ***)(_DWORD))_What)(1);
    }
  }
  v1->m_fSkillActstep_Swing_Time = 0.0;
  v1->m_GuildAcademyMemberFlag = -1;
  v1->m_pMobinfo = 0;
  v1->m_pMobViewInfo = 0;
  ((void (*)(void))v1->m_kDamageOscillation.baseclass_0.vfptr->Clear)();
  _What = *(void **)(*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 4);
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapShakeInfo,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  *(_DWORD *)(*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  **((_DWORD **)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0
                                                                   + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 2) = 0;
  _What = v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapDamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapDamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapMyCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceMyCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapEnemyCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceEnemeyCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapPartyCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapPartyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForcePartyCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForcePartyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapAllCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _What = v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  for ( i = _What; !*((_BYTE *)i + 21); _What = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceAllCamShake,
      *((std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node **)i
      + 2));
    i = *(void **)i;
    operator delete(_What);
  }
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  _Val.baseclass_0.first = 4;
  _Val.baseclass_0.second = (int)&v1->m_mapMyCamShake;
  v65 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v65,
    0);
  _Val.baseclass_0.second = (int)&v1->m_mapForceMyCamShake;
  _Val.baseclass_0.first = 0;
  v66 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v66,
    0);
  _Val.baseclass_0.first = 5;
  _Val.baseclass_0.second = (int)&v1->m_mapEnemyCamShake;
  v67 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v67,
    0);
  _Val.baseclass_0.first = 1;
  _Val.baseclass_0.second = (int)&v1->m_mapForceEnemeyCamShake;
  v68 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v68,
    0);
  _Val.baseclass_0.second = (int)&v1->m_mapPartyCamShake;
  _Val.baseclass_0.first = 6;
  v69 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v69,
    0);
  _Val.baseclass_0.first = 2;
  _Val.baseclass_0.second = (int)&v1->m_mapForcePartyCamShake;
  v70 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v70,
    0);
  _Val.baseclass_0.first = 7;
  _Val.baseclass_0.second = (int)&v1->m_mapAllCamShake;
  v71 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v71,
    0);
  _Val.baseclass_0.second = (int)&v1->m_mapForceAllCamShake;
  _Val.baseclass_0.first = 3;
  v72 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v72,
    0);
  _Val.baseclass_0.first = 8;
  _Val.baseclass_0.second = (int)&v1->m_mapDamShake;
  v73 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
          &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v73,
    0);
  v74 = *(void ***)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v75 = *v74;
  *v74 = v74;
  *(_DWORD *)(*(_DWORD *)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_lstTraceMove.baseclass_0.baseclass_0._Mysize = 0;
  if ( v75 != *(void **)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v76 = *(void **)v75;
      operator delete(v75);
      v75 = v76;
    }
    while ( v76 != *(void **)&v1->m_lstTraceMove.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v1->m_SavePosIndex = 0;
  v1->m_bWaitingAckWhenInvenFull = 0;
  v1->m_iCharLevel = -1;
  v1->m_bAniStop = 0;
  *(_WORD *)&v1->m_bAniStart = 0;
  *(_WORD *)&v1->m_bGtiSpeed = 0;
  v1->m_bClearChar = 0;
  v1->m_bShockWave = 0;
  v1->m_fCountTime = 0.0099999998;
  v1->m_fGroudStrikeKeepTime = 0.0;
  v1->m_fAcceleration = 190.0;
  v1->m_fSpeed = 140.0;
  NiPoint3::Unitize(&v1->m_MovePoint);
  v1->m_pkMover = 0;
  v1->m_kMoverHandle = -1;
  v1->m_uiMoverSlot = 0;
  v1->m_uiConditionAniLevel = 0;
  v1->m_iLP = 0;
  v1->m_iMaxLP = 0;
  v1->m_kSkillID = -1;
  v1->m_bSS_Hide = 0;
  *(_WORD *)&v1->m_byKQTeamType = 2;
  v1->m_bDownTime = 0;
  *(_WORD *)&v1->m_bBuffItemAutoUse = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C3364: using guessed type int (*Char___vftable_[2])();
// 9C3384: using guessed type int (__stdcall *Char___vftable_)(int);
// 9C338C: using guessed type int (__thiscall *Char___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);
// AA2724: using guessed type float Char__ms_fDefaultWalkSpeed;
// AA2728: using guessed type float Char__ms_fDefaultRunSpeed;
// B6DE8C: using guessed type const float NI_PI;

//----- (006426B0) --------------------------------------------------------
void __thiscall Char::Update(Char *this, float fTime)
{
  Char *v2; // esi@1
  char v3; // al@6
  MobInfo *v4; // eax@8
  int v5; // edi@12
  NiPoint3 *v6; // eax@12
  float v7; // ST28_4@12
  unsigned int v8; // ecx@12
  NiNode *v9; // eax@13
  const char *v10; // ecx@24
  int v11; // eax@24
  char v12; // dl@25
  unsigned int v13; // edi@26
  signed int v14; // ecx@26
  const char *v15; // eax@28
  int v16; // eax@30
  bool v17; // zf@30
  signed int v18; // eax@32
  bool v19; // bl@35
  unsigned int v20; // ecx@35
  const char *v21; // eax@37
  int v22; // eax@39
  bool v23; // zf@39
  signed int v24; // eax@41
  NiNode *v25; // eax@45
  double v26; // st7@48
  double v27; // st7@48
  NiNode *v28; // eax@51
  double v29; // st7@51
  ActiveSkillViewInfo *v30; // eax@51
  bool v31; // bl@51
  Mover *v32; // ecx@63
  bool v33; // [sp+14h] [bp-64h]@62
  NiPoint3 kShakeAxis; // [sp+2Ch] [bp-4Ch]@48
  NiPoint3 kShake; // [sp+38h] [bp-40h]@48
  float fLengthToMainChar; // [sp+44h] [bp-34h]@12
  float fDeltaTime; // [sp+48h] [bp-30h]@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kMobIndex; // [sp+4Ch] [bp-2Ch]@24
  unsigned int v39; // [sp+68h] [bp-10h]@1
  int v40; // [sp+74h] [bp-4h]@26
  int v41; // [sp+78h] [bp+0h]@1

  v39 = (unsigned int)&v41 ^ __security_cookie;
  v2 = this;
  if ( this->m_bAniStart && !JumpProcessor::IsJump(&this->m_kJumpProcessor) )
    *(_WORD *)&v2->m_bAniStop = 1;
  if ( v2->m_byType == 4
    || !v2->m_bUserCharacter && (v3 = v2->m_byMode, v3 != 4) && v3 != 5 && (v4 = v2->m_pMobinfo) != 0 && v4->IsNPC )
  {
    if ( !Char::IsLinkGate(v2) )
    {
      if ( !v2->m_bIsDoor )
      {
        v5 = ((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[6].Deaffect)(v2);
        v6 = World::GetCameraLookAtPos(&g_kWorld);
        v7 = v6->x - *(float *)v5;
        fLengthToMainChar = v6->y - *(float *)(v5 + 4);
        fDeltaTime = v6->z - *(float *)(v5 + 8);
        fDeltaTime = v7 * v7 + fLengthToMainChar * fLengthToMainChar + fDeltaTime * fDeltaTime;
        fDeltaTime = sqrt(fDeltaTime);
        v8 = *(_DWORD *)&g_pkMainChar[1].m_AttackTargetHandle;
        fLengthToMainChar = fDeltaTime;
        fDeltaTime = (double)v8;
        if ( fLengthToMainChar > (double)fDeltaTime )
        {
          v9 = v2->m_spScene.m_pObject;
          v2->m_bCulledOld = v2->m_bCulled;
          v2->m_bCulled = 1;
          v9->baseclass_0.m_uFlags |= 1u;
          v2->m_bIsUpdate = 1;
          return;
        }
      }
    }
  }
  if ( !v2->m_spScene.m_pObject )
  {
    AttackSequenceManager::ApplicateSkillSeqImmediately(&v2->baseclass_54, v2, 1, 0);
    AttackSequenceManager::ApplicateAttackSeqImmediately(&v2->baseclass_54, 1);
    return;
  }
  if ( !v2->m_bIsUpdate || v2->m_bCulled )
  {
    AttackSequenceManager::ApplicateSkillSeqImmediately(&v2->baseclass_54, v2, 1, 0);
    AttackSequenceManager::ApplicateAttackSeqImmediately(&v2->baseclass_54, 1);
  }
  if ( -3.4028235e38 == v2->m_fLastUpdateTime )
  {
    v2->m_fLastUpdateTime = fTime;
    v2->m_fAnimationUpdateTime = fTime;
  }
  else
  {
    fDeltaTime = fTime - v2->m_fLastUpdateTime;
    v2->m_fAnimationUpdateTime = v2->m_fAnimationSpeed * fDeltaTime + v2->m_fAnimationUpdateTime;
    v2->m_fLastUpdateTime = fTime;
  }
  if ( MachineOpt::ms_kGraphicOption.bViewOutLine && v2->m_bIsDoor )
  {
    v10 = v2->m_pMobinfo->InxName;
    v11 = (int)v2->m_pMobinfo->InxName;
    kMobIndex.baseclass_0._Myres = 15;
    kMobIndex.baseclass_0._Mysize = 0;
    kMobIndex.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v12 = *(_BYTE *)v11++;
    while ( v12 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kMobIndex,
      v10,
      v11 - (_DWORD)(v10 + 1));
    v13 = kMobIndex.baseclass_0._Mysize;
    v40 = 0;
    v14 = kMobIndex.baseclass_0._Mysize;
    if ( kMobIndex.baseclass_0._Mysize >= 7 )
      v14 = 7;
    v15 = *(const char **)&kMobIndex;
    if ( kMobIndex.baseclass_0._Myres < 0x10 )
      v15 = (const char *)&kMobIndex;
    v16 = std::char_traits<char>::compare(v15, "OX_gate", v14);
    v17 = v16 == 0;
    if ( !v16 )
    {
      if ( v13 >= 7 )
        v18 = v13 != 7;
      else
        v18 = -1;
      v17 = v18 == 0;
    }
    v19 = v17;
    v20 = v13;
    if ( v13 >= 0xC )
      v20 = 12;
    v21 = *(const char **)&kMobIndex;
    if ( kMobIndex.baseclass_0._Myres < 0x10 )
      v21 = (const char *)&kMobIndex;
    v22 = std::char_traits<char>::compare(v21, "KQSpringDoor", v20);
    v23 = v22 == 0;
    if ( !v22 )
    {
      if ( v13 >= 0xC )
        v24 = v13 != 12;
      else
        v24 = -1;
      v23 = v24 == 0;
    }
    if ( v23 | v19 )
    {
      v25 = v2->m_spScene.m_pObject;
      v2->m_bCulledOld = v2->m_bCulled;
      v2->m_bCulled = 1;
      v25->baseclass_0.m_uFlags |= 1u;
      v2->m_bIsUpdate = 1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&kMobIndex);
      return;
    }
    v40 = -1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&kMobIndex);
  }
  Char::UpdateQuestMark(v2);
  Char::UpdateTrace(v2);
  ((void (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[18].SetAbStateProperty)(v2, LODWORD(fTime));
  ((void (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[18].Deaffect)(v2, LODWORD(fTime));
  ((void (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[18].IsVisible)(v2, LODWORD(fTime));
  if ( (unsigned __int8)((int (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[18].Affect)(v2, LODWORD(fTime)) )
  {
    Char::UpdateEyeBlinking(v2);
    AttackSequenceManager::Update(&v2->baseclass_54, fTime);
    AbStateInfectee::Update(&v2->baseclass_0, fTime);
    Oscillation::Update(&v2->m_kDamageOscillation.baseclass_0, fTime);
    kShake.x = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][0];
    v26 = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
    LODWORD(kShakeAxis.x) = (_DWORD)kShake.x;
    kShake.y = v26;
    v27 = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
    kShakeAxis.y = kShake.y;
    kShake.z = v27;
    kShakeAxis.z = kShake.z;
    if ( v2->m_kDamageOscillation.m_eAxis == 1 )
      kShakeAxis.z = 1.0;
    else
      kShakeAxis.y = 0.0;
    NiPoint3::Unitize(&kShakeAxis);
    v28 = v2->m_spCtrlNode.m_pObject;
    fDeltaTime = v2->m_kDamageOscillation.baseclass_0.m_fValue;
    v29 = fDeltaTime;
    kShake.x = kShakeAxis.x * fDeltaTime;
    LODWORD(v28->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kShake.x;
    kShake.y = v29 * kShakeAxis.y;
    v28->baseclass_0.m_kLocal.m_Translate.y = kShake.y;
    kShake.z = v29 * kShakeAxis.z;
    v28->baseclass_0.m_kLocal.m_Translate.z = kShake.z;
    ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr[13].AddAbStateByAbstateIndex)(
      v2,
      v2->m_fAnimationUpdateTime);
    v30 = v2->m_kActionMgr.m_pkCurPlaySkillViewInfo;
    v31 = 0;
    if ( v30 )
      v31 = v30->HideHandItem != 0;
    if ( Char::IsActProducing(v2)
      || v31
      || (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[15].SetAbStateProperty)(v2) )
    {
      CharShape::ShowLinkNode(&v2->m_kCharShape, LINK_RIGHTHAND, 0);
      CharShape::ShowLinkNode(&v2->m_kCharShape, LINK_LEFTHAND, 0);
      CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 0);
      v32 = v2->m_pkMover;
      if ( !v32 || Mover::IsSlotView(v32, v2->m_uiMoverSlot, 1) )
        goto LABEL_67;
    }
    else
    {
      if ( (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[20].SetAbStateProperty)(v2) )
      {
        CharShape::ShowLinkNode(&v2->m_kCharShape, LINK_CHEST, 0);
        CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 0);
      }
      else
      {
        if ( !(unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v2) )
        {
          if ( !v2->m_kCharShape.m_bAutoPickItem && !v2->m_kCharShape.m_bAutoUseItem )
            goto LABEL_67;
          CharShape::SetShowMiniMonAutoPickEff(&v2->m_kCharShape, v2->m_kCharShape.m_bAutoPickItem);
          v33 = v2->m_kCharShape.m_bAutoUseItem;
LABEL_66:
          CharShape::ShowMinimonAutoUseEff(&v2->m_kCharShape, v33);
LABEL_67:
          Char::UpdateAction(v2, fTime);
          Char::CheckStateInNoMovement(v2);
          if ( v2->m_bUserCharacter )
            ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[19].SetAbStateProperty)(v2);
          Char::GaleOfRun(v2, fTime);
          if ( v2->m_bShockWave )
            Char::RisingChar(v2, fTime);
          return;
        }
        CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 0);
      }
    }
    CharShape::SetShowMiniMonAutoPickEff(&v2->m_kCharShape, 0);
    v33 = 0;
    goto LABEL_66;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00642C80) --------------------------------------------------------
void __thiscall Char::ViewCampMode(Char *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p)
{
  Char *v2; // esi@1
  NiNode *v3; // eax@2
  NiNode *v4; // edi@3
  CarToonShader *v5; // eax@6
  CarToonShader *v6; // eax@7
  bool v7; // al@8
  CSpactralGlow_Shader_Controller *v8; // ecx@8
  bool v9; // [sp-Ch] [bp-10h]@9

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].IsVisible)() )
  {
    Char::CulledTent(v2, 0);
    v3 = v2->m_spHouseNode.m_pObject;
    if ( v3 )
    {
      NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v3->m_kChildren);
      v4 = CharResMgr::GetHouse(&g_kCharResMgr, v2->m_byMiniHouseSkinID);
      if ( v4 )
      {
        if ( !Char::ms_bEnableCarToon
          || (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[16].Deaffect)(v2) )
        {
          v6 = CarToonShader::GetInstance();
          CarToonShader::SetExceptOutLineCartoonShader(v6, v4);
        }
        else
        {
          v5 = CarToonShader::GetInstance();
          CarToonShader::SetCartoonShader(v5, v4);
        }
        CSpactralGlow_Shader_Controller::SetTarget(&v2->m_kRestHouseShader, v4);
        v7 = AbStateInfectee::FindNomalAbstate(&v2->baseclass_0, STA_GTIHIDE);
        v8 = &v2->m_kRestHouseShader;
        if ( v7 )
        {
          CSpactralGlow_Shader_Controller::SetUseShaderName(v8, "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow");
          v9 = 1;
          v8 = &v2->m_kRestHouseShader;
        }
        else
        {
          v9 = 0;
        }
        CSpactralGlow_Shader_Controller::SetEnable(v8, v9);
        ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spHouseNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v4,
          0);
        NiAVObject::UpdateEffects(&v2->m_spHouseNode.m_pObject->baseclass_0);
        NiAVObject::UpdateProperties(&v2->m_spHouseNode.m_pObject->baseclass_0);
        LinkedEffect::SetNode(&v2->kLinkedEffect, v4, 0xFFFFu);
      }
    }
  }
}
// A7F85E: using guessed type char Char__ms_bEnableCarToon;

//----- (00642D90) --------------------------------------------------------
bool __thiscall Char::InitViewApply(Char *this, bool bEquip)
{
  Char *v2; // ebx@1
  NiControllerSequence *v3; // eax@1
  bool v4; // zf@1
  double v5; // st7@7
  float v6; // ST0C_4@11
  float v7; // ST0C_4@13
  float v8; // ST0C_4@15
  unsigned int v9; // edi@16
  ActionInfoSet *v10; // ecx@16
  ActionInfo *v11; // eax@17
  ActionInfoSet *v12; // ecx@19
  ActionInfo *v13; // eax@20
  ActionInfoSet *v14; // ecx@22
  ActionInfo *v15; // eax@23
  ActionInfoSet *v16; // ecx@25
  ActionInfo *v17; // eax@26
  ActionInfoSet *v18; // ecx@28
  ActionInfo *v19; // eax@29
  NiAVObject *v20; // esi@31
  unsigned __int16 v21; // ST14_2@31
  void *v22; // edx@32
  signed int v23; // eax@32
  signed int v24; // ecx@32
  bool v25; // cf@33
  int v26; // eax@35
  signed int v27; // eax@37
  unsigned int v28; // esi@42
  NiMatrix3 *v29; // eax@42
  NiNode *v30; // esi@42
  CharShape *v31; // edi@42
  NiActorManager *v32; // eax@42
  NiActorManager::CallbackObjectVtbl *v33; // edx@42
  NiNode *v34; // ecx@44
  int v35; // eax@45
  NiBoneLODController *v36; // eax@50
  signed int v37; // eax@51
  AbStateInfecteeVtbl *v38; // edx@53
  MobInfo *v39; // eax@54
  MobType v40; // eax@55
  MobInfo *v41; // eax@62
  NiNode *v42; // ST18_4@67
  CarToonShader *v43; // eax@67
  NiNode *v44; // ST18_4@68
  CarToonShader *v45; // eax@68
  char v46; // al@71
  MobInfo *v47; // eax@73
  Char *v48; // eax@80
  int v49; // eax@83
  MobViewInfo *v50; // ebx@85
  CSpactralGlow_Shader_Controller *v51; // eax@87
  unsigned int v53; // [sp+14h] [bp-E4h]@1
  NiColor kColor; // [sp+24h] [bp-D4h]@32
  unsigned int uiJump_DownHill; // [sp+30h] [bp-C8h]@16
  unsigned int uiJumpRun_JumpStart; // [sp+34h] [bp-C4h]@16
  unsigned int uiJumpStand_JumpStart; // [sp+38h] [bp-C0h]@16
  unsigned int uiJumpStand_Land; // [sp+3Ch] [bp-BCh]@16
  NiMatrix3 result; // [sp+40h] [bp-B8h]@42
  NiMatrix3 thisa; // [sp+64h] [bp-94h]@42
  NiMatrix3 mat; // [sp+88h] [bp-70h]@42
  NsFindObjectByName kFindObject; // [sp+ACh] [bp-4Ch]@32
  unsigned int v63; // [sp+E8h] [bp-10h]@1
  int v64; // [sp+F4h] [bp-4h]@32
  int v65; // [sp+F8h] [bp+0h]@1

  v63 = (unsigned int)&v65 ^ __security_cookie;
  v53 = (unsigned int)&v65 ^ __security_cookie;
  v2 = this;
  this->m_pkLeftSeq = Char::GetSequence(this, 0x3190Cu);
  v2->m_pkRightSeq = Char::GetSequence(v2, 0x31902u);
  v2->m_pkUpSeq = Char::GetSequence(v2, 0x31916u);
  v3 = Char::GetSequence(v2, 0x31920u);
  v4 = v2->m_pkLeftSeq == 0;
  v2->m_pkDownSeq = v3;
  v2->m_bEnabledHeadMovement = !v4 && v2->m_pkRightSeq && v2->m_pkUpSeq && v3;
  v4 = v2->m_bEnabledHeadMovement == 0;
  v5 = 0.5;
  v2->m_fTargetYawWeight = 0.5;
  v2->m_fTargetPitchWeight = 0.5;
  if ( !v4 )
  {
    if ( NiActorManager::INVALID_SEQUENCE_ID != 203020 )
    {
      NiActorManager::ActivateSequence(
        v2->m_spActor.m_pObject,
        0x3190Cu,
        3,
        0,
        0.5,
        0.0,
        NiKFMTool::SYNC_SEQUENCE_ID_NONE);
      v5 = 0.5;
    }
    if ( NiActorManager::INVALID_SEQUENCE_ID != 203010 )
    {
      v6 = v5;
      NiActorManager::ActivateSequence(
        v2->m_spActor.m_pObject,
        0x31902u,
        3,
        0,
        v6,
        0.0,
        NiKFMTool::SYNC_SEQUENCE_ID_NONE);
      v5 = 0.5;
    }
    if ( NiActorManager::INVALID_SEQUENCE_ID != 203030 )
    {
      v7 = v5;
      NiActorManager::ActivateSequence(
        v2->m_spActor.m_pObject,
        0x31916u,
        3,
        0,
        v7,
        0.0,
        NiKFMTool::SYNC_SEQUENCE_ID_NONE);
      v5 = 0.5;
    }
    if ( NiActorManager::INVALID_SEQUENCE_ID != 203040 )
    {
      v8 = v5;
      NiActorManager::ActivateSequence(
        v2->m_spActor.m_pObject,
        0x31920u,
        3,
        0,
        v8,
        0.0,
        NiKFMTool::SYNC_SEQUENCE_ID_NONE);
    }
  }
  JumpProcessor::clear(&v2->m_kJumpProcessor);
  v9 = 0;
  v2->m_kJumpProcessor.m_pActor = v2->m_spActor.m_pObject;
  v2->m_kJumpProcessor.m_pChar = v2;
  v10 = v2->m_kActionMgr.m_pkActInfoSet;
  uiJumpStand_JumpStart = 0;
  uiJumpRun_JumpStart = 0;
  uiJump_DownHill = 0;
  uiJumpStand_Land = 0;
  if ( v10 )
  {
    v11 = ActionInfoSet::GetByInxName(v10, "JumpStand_JumpStart");
    if ( v11 )
      uiJumpStand_JumpStart = v11->uiEventCode;
  }
  v12 = v2->m_kActionMgr.m_pkActInfoSet;
  if ( v12 )
  {
    v13 = ActionInfoSet::GetByInxName(v12, "JumpRun_JumpStart");
    if ( v13 )
      uiJumpRun_JumpStart = v13->uiEventCode;
  }
  v14 = v2->m_kActionMgr.m_pkActInfoSet;
  if ( v14 )
  {
    v15 = ActionInfoSet::GetByInxName(v14, "Jump_DownHill");
    if ( v15 )
      uiJump_DownHill = v15->uiEventCode;
  }
  v16 = v2->m_kActionMgr.m_pkActInfoSet;
  if ( v16 )
  {
    v17 = ActionInfoSet::GetByInxName(v16, "JumpStand_Land");
    if ( v17 )
      uiJumpStand_Land = v17->uiEventCode;
  }
  v18 = v2->m_kActionMgr.m_pkActInfoSet;
  if ( v18 )
  {
    v19 = ActionInfoSet::GetByInxName(v18, "JumpRun_Land");
    if ( v19 )
      v9 = v19->uiEventCode;
  }
  JumpProcessor::SetJumpAni(
    &v2->m_kJumpProcessor,
    uiJumpStand_JumpStart,
    uiJumpRun_JumpStart,
    uiJump_DownHill,
    uiJumpStand_Land,
    v9);
  v20 = v2->m_spActor.m_pObject->m_spNIFRoot.m_pObject;
  v21 = v2->m_kHandle;
  uiJumpStand_Land = (unsigned int)v20;
  if ( LinkedEffect::SetNode(&v2->kLinkedEffect, (NiNode *)v20, v21) )
  {
    kColor.r = 0.0;
    kColor.g = 0.0;
    kColor.b = 1.0;
    NiOptimizeABV::CreateWireABV(v20, &kColor, 1.0, "WireABVTemp", 0);
    kFindObject.baseclass_0.m_pCallBack = 0;
    kFindObject.baseclass_0.m_nCurLevel = -1;
    kFindObject.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&NsFindObjectByName::_vftable_;
    kFindObject.m_szName.baseclass_0._Myres = 15;
    kFindObject.m_szName.baseclass_0._Mysize = 0;
    kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kFindObject.m_vecObject.baseclass_0._Mylast = 0;
    kFindObject.m_vecObject.baseclass_0._Myend = 0;
    v64 = 0;
    NsFindObjectByName::FindObject(&kFindObject, (NiNode *)v20, "WireABVTemp");
    v22 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
    v23 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                     - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    v24 = 0;
    if ( v23 > 0 )
    {
      v25 = (unsigned int)v23 > 0;
      do
      {
        if ( v25 )
        {
          v26 = *((_DWORD *)v22 + v24);
          if ( v26 )
          {
            *(_WORD *)(v26 + 28) |= 1u;
            v22 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
          }
        }
        ++v24;
        v27 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast - (char *)v22) >> 2;
        v25 = v24 < (unsigned int)v27;
      }
      while ( v24 < v27 );
    }
    v64 = -1;
    if ( v22 )
      operator delete(v22);
    *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kFindObject.m_vecObject.baseclass_0._Mylast = 0;
    kFindObject.m_vecObject.baseclass_0._Myend = 0;
    if ( kFindObject.m_szName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  v28 = uiJumpStand_Land;
  NiAVObject::Update((NiAVObject *)uiJumpStand_Land, 0.0, 1);
  mat.m_pEntry[0][0] = -1.0;
  mat.m_pEntry[1][0] = 0.0;
  mat.m_pEntry[2][0] = 0.0;
  mat.m_pEntry[0][1] = 0.0;
  mat.m_pEntry[2][1] = 0.0;
  mat.m_pEntry[0][2] = 0.0;
  memcpy(&thisa, (const void *)(v28 + 52), sizeof(thisa));
  mat.m_pEntry[1][2] = 0.0;
  mat.m_pEntry[1][1] = -1.0;
  mat.m_pEntry[2][2] = 1.0;
  v29 = NiMatrix3::operator_(&thisa, &result, &mat);
  memcpy(&thisa, v29, sizeof(thisa));
  memcpy((void *)(uiJumpStand_Land + 52), v29, 0x24u);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_spCharNode.m_pObject->m_kChildren);
  v30 = (NiNode *)uiJumpStand_Land;
  ((void (__stdcall *)(unsigned int, _DWORD, unsigned int))v2->m_spCharNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    uiJumpStand_Land,
    0,
    v53);
  v31 = &v2->m_kCharShape;
  CharShape::SetModelPart(&v2->m_kCharShape, v30);
  v32 = v2->m_spActor.m_pObject;
  v33 = v2->m_kActionMgr.baseclass_0.baseclass_0.vfptr;
  v2->m_kCharShape.m_pkBoneLodController = v32->m_spBoneLOD.m_pObject;
  v2->m_kCharShape.m_pActor = v32;
  ((void (__thiscall *)(ActionMgr *, NiActorManager *))v33[1].AnimDeactivated)(&v2->m_kActionMgr, v32);
  if ( v2->m_kCharShape.m_kClassID )
  {
    CharShape::UpdateFaceShape(&v2->m_kCharShape);
    CharShape::MakeHairSet(&v2->m_kCharShape, v2->m_kCharShape.m_byHairType);
    CharShape::SetHairDetailMap(&v2->m_kCharShape, v2->m_kCharShape.m_byHairColor);
  }
  v34 = v2->m_spScene.m_pObject;
  if ( v34 )
  {
    v35 = ((int (*)(void))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v35 )
    {
      while ( (NiRTTI *)v35 != &NsFadeNode::m_RTTI )
      {
        v35 = *(_DWORD *)(v35 + 4);
        if ( !v35 )
          goto LABEL_50;
      }
      LOBYTE(v2->m_spScene.m_pObject[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr) = 0;
    }
  }
LABEL_50:
  NiAVObject::Update(&v2->m_spScene.m_pObject->baseclass_0, 0.0, 1);
  v36 = v2->m_spActor.m_pObject->m_spBoneLOD.m_pObject;
  if ( v36 )
    v37 = v36->m_iLOD;
  else
    v37 = -1;
  v38 = v2->baseclass_0.vfptr;
  v2->m_nCurrLODLevel = v37;
  if ( !(unsigned __int8)((int (__thiscall *)(Char *))v38[1].Affect)(v2) || (v39 = v2->m_pMobinfo) == 0 )
    goto LABEL_91;
  v40 = v39->Type;
  if ( v40 != 8 )
  {
    if ( v40 == 10 )
      goto LABEL_69;
    if ( v40 != 9 && v40 != 22 && v40 != 21 )
      goto LABEL_91;
  }
  if ( v40 != 10 && v40 != 9 )
  {
LABEL_91:
    v41 = v2->m_pMobinfo;
    if ( !v41 || strcmp(v41->InxName, "KQ_Gate5") )
    {
      if ( !Char::ms_bEnableCarToon
        || (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[16].Deaffect)(v2)
        || Char::IsResource(v2) )
      {
        v44 = v2->m_spScene.m_pObject;
        v45 = CarToonShader::GetInstance();
        CarToonShader::SetExceptOutLineCartoonShader(v45, v44);
      }
      else
      {
        v42 = v2->m_spScene.m_pObject;
        v43 = CarToonShader::GetInstance();
        CarToonShader::SetCartoonShader(v43, v42);
      }
    }
  }
LABEL_69:
  Char::UpdateQuestMark(v2);
  if ( v2->m_byType == 4
    || !v2->m_bUserCharacter && (v46 = v2->m_byMode, v46 != 4) && v46 != 5 && (v47 = v2->m_pMobinfo) != 0 && v47->IsNPC )
    QuestDataMgr::m_bUpdate = 1;
  if ( bEquip )
    ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[2].AddAbStateByAbstateIndex)(v2);
  if ( v2->m_byMode == 6 )
  {
    if ( v2->m_kMoverHandle == -1 )
    {
      if ( !v2->m_pkMover )
      {
        v49 = CharShape::GetRidePetID(&v2->m_kCharShape);
        Char::RidePet(v2, v49);
      }
    }
    else
    {
      v48 = CharMgr::GetChar(&g_kCharMgr, v2->m_kMoverHandle);
      v2->m_pkMover = (Mover *)v48;
      if ( v48 )
        Mover::RideOn((Mover *)v48, v2, v2->m_uiMoverSlot);
    }
  }
  else
  {
    Char::GetoutOfPet(v2);
  }
  NiAVObject::UpdateProperties(&v2->m_spScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v2->m_spScene.m_pObject->baseclass_0);
  v2->m_pOldParent = 0;
  v2->m_stBlinkingInfo.byState = 0;
  v2->m_stBlinkingInfo.dwTime = 0;
  v2->m_kCharShape.m_byEyeState = 17;
  CharShape::EnableEyeShape(&v2->m_kCharShape, 0);
  v2->m_stBlinkingInfo.dwTime = timeGetTime();
  v50 = v2->m_pMobViewInfo;
  if ( v50 && v50->SpectralGlow == 1 )
  {
    v51 = CharShape::GetShader_Ctrl(v31);
    CSpactralGlow_Shader_Controller::SetUseShaderName(v51, "FxSkinning_Greyscale", "FxNoSkinning_Greyscale");
    CharShape::SetSPactralGlowEnable(v31, 1);
  }
  return 1;
}
// 9C335C: using guessed type int (__stdcall *NsFindObjectByName___vftable_)(int _pkObject, int _pData);
// 9EEF00: using guessed type const unsigned int NiActorManager__INVALID_SEQUENCE_ID;
// A7F85E: using guessed type char Char__ms_bEnableCarToon;
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A85C00: using guessed type int __security_cookie;

//----- (006434C0) --------------------------------------------------------
void __thiscall Char::MakeCharNpcEquipment(Char *this, CharNPC_ViewInfo *pViewInfo)
{
  Char *v2; // edi@1
  bool v3; // zf@2
  ItemInfo *v4; // eax@5
  ItemInfo *v5; // eax@8
  ItemInfo *v6; // eax@11
  ItemInfo *v7; // eax@14
  ItemInfo *v8; // eax@17
  ItemInfo *v9; // eax@20
  ItemInfo *v10; // eax@23
  ItemInfo *v11; // eax@26
  ItemInfo *v12; // eax@29
  ItemInfo *v13; // eax@32
  ItemInfo *v14; // eax@35
  ItemInfo *v15; // eax@38
  ItemInfo *v16; // eax@41
  ItemInfo *v17; // eax@44
  ItemInfo *v18; // eax@47
  ItemInfo *v19; // eax@50
  ItemInfo *v20; // eax@53
  ItemInfo *v21; // eax@56
  char *v22; // [sp-4h] [bp-3Ch]@4
  char pkInfo[4]; // [sp+8h] [bp-30h]@2
  int v24; // [sp+Ch] [bp-2Ch]@2
  int v25; // [sp+10h] [bp-28h]@2
  int v26; // [sp+14h] [bp-24h]@2
  int v27; // [sp+18h] [bp-20h]@2
  int v28; // [sp+1Ch] [bp-1Ch]@2
  int v29; // [sp+20h] [bp-18h]@2
  int v30; // [sp+24h] [bp-14h]@2
  int v31; // [sp+28h] [bp-10h]@2
  int v32; // [sp+2Ch] [bp-Ch]@2
  unsigned int v33; // [sp+34h] [bp-4h]@1
  int v34; // [sp+38h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v2 = this;
  if ( pViewInfo )
  {
    memset(pkInfo, 0, 0x2Bu);
    v3 = pViewInfo->Class == 4;
    *(_DWORD *)pkInfo = -1;
    v24 = -1;
    v25 = -1;
    v26 = -1;
    v27 = -1;
    v28 = -1;
    v29 = -1;
    v30 = -1;
    v31 = -1;
    v32 = -1;
    if ( v3 && g_pkMainChar != (Char *)-776 )
    {
      v22 = (char *)&g_pkMainChar->m_kCharShape.m_kEquip;
    }
    else
    {
      v4 = ItemInfoTab::GetByInxName(pViewInfo->Equ_RightHand);
      if ( v4 )
        LOWORD(v24) = v4->ID;
      else
        LOWORD(v24) = -1;
      v5 = ItemInfoTab::GetByInxName(pViewInfo->Equ_LeftHand);
      if ( v5 )
        LOWORD(v25) = v5->ID;
      else
        LOWORD(v25) = -1;
      v6 = ItemInfoTab::GetByInxName(pViewInfo->Equ_Body);
      if ( v6 )
        HIWORD(v24) = v6->ID;
      else
        HIWORD(v24) = -1;
      v7 = ItemInfoTab::GetByInxName(pViewInfo->Equ_Leg);
      if ( v7 )
        HIWORD(v25) = v7->ID;
      else
        HIWORD(v25) = -1;
      v8 = ItemInfoTab::GetByInxName(pViewInfo->Equ_Shoes);
      if ( v8 )
        LOWORD(v26) = v8->ID;
      else
        LOWORD(v26) = -1;
      v9 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccBody);
      if ( v9 )
        HIWORD(v27) = v9->ID;
      else
        HIWORD(v27) = -1;
      v10 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccLeg);
      if ( v10 )
        LOWORD(v27) = v10->ID;
      else
        LOWORD(v27) = -1;
      v11 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccShoes);
      if ( v11 )
        HIWORD(v26) = v11->ID;
      else
        HIWORD(v26) = -1;
      v12 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccMouth);
      if ( v12 )
        *(_WORD *)&pkInfo[2] = v12->ID;
      else
        *(_WORD *)&pkInfo[2] = -1;
      v13 = ItemInfoTab::GetByInxName(pViewInfo->Equ_MiniMon);
      if ( v13 )
        LOWORD(v32) = v13->ID;
      else
        LOWORD(v32) = -1;
      v14 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccHeadA);
      if ( v14 )
        LOWORD(v28) = v14->ID;
      else
        LOWORD(v28) = -1;
      v15 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccEye);
      if ( v15 )
        LOWORD(v29) = v15->ID;
      else
        LOWORD(v29) = -1;
      v16 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccLeftHand);
      if ( v16 )
        HIWORD(v29) = v16->ID;
      else
        HIWORD(v29) = -1;
      v17 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccRightHand);
      if ( v17 )
        LOWORD(v30) = v17->ID;
      else
        LOWORD(v30) = -1;
      v18 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccBack);
      if ( v18 )
        HIWORD(v30) = v18->ID;
      else
        HIWORD(v30) = -1;
      v19 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccWeast);
      if ( v19 )
        LOWORD(v31) = v19->ID;
      else
        LOWORD(v31) = -1;
      v20 = ItemInfoTab::GetByInxName(pViewInfo->Equ_AccHip);
      if ( v20 )
        HIWORD(v31) = v20->ID;
      else
        HIWORD(v31) = -1;
      v21 = ItemInfoTab::GetByInxName(pViewInfo->Equ_MiniMon_R);
      if ( v21 )
        HIWORD(v28) = v21->ID;
      else
        HIWORD(v28) = -1;
      v22 = pkInfo;
    }
    CharShape::SetEquipInfo(&v2->m_kCharShape, (PROTO_EQUIPMENT *)v22);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00643810) --------------------------------------------------------
bool __thiscall Char::InitView(Char *this, bool bEquip, unsigned int uiFrame)
{
  Char *v3; // esi@1
  AbStateInfectee::AbstateColor (__thiscall *v4)(AbStateInfectee *); // edx@4
  NiNode *v5; // ecx@4
  int v6; // eax@5
  bool result; // al@10
  MobViewInfo *v8; // eax@12
  unsigned __int16 v9; // ax@13
  CharNPC_ViewInfo *v10; // eax@14
  NiActorManager *v11; // eax@16
  NiActorManager *v12; // eax@17
  ActionInfoSet *v13; // eax@17
  NiActorManager *v14; // eax@18
  NiActorManager *v15; // eax@19
  NiActorManager *v16; // ecx@19
  NiActorManager::CallbackObjectVtbl *v17; // edx@29
  char v18; // [sp+0h] [bp-1Ch]@16
  char v19; // [sp+4h] [bp-18h]@16
  NiActorManager *kClass; // [sp+14h] [bp-8h]@19
  char classid; // [sp+18h] [bp-4h]@15
  CharNPC_ViewInfo *pkNpcViewInfo; // [sp+28h] [bp+Ch]@14
  NiActorManager *pkNpcViewInfoa; // [sp+28h] [bp+Ch]@19

  v3 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[20].SetAbStateProperty)() )
    Char::Shape_UnMetamorphosis(v3, 0);
  Char::CulledTent(v3, 1);
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v3) )
  {
    v3->m_kActionMgr.m_fActionStartTime = 0.0;
    v3->m_kActionMgr.m_fActionLastUpdateTime = 0.0;
    v3->m_kActionMgr.m_pkActInfoSet = 0;
    v3->m_kActionMgr.m_pkChar = 0;
    v3->m_kActionMgr.m_pActor = 0;
    v3->m_kActionMgr.m_pkCurPlaySkillViewInfo = 0;
    v3->m_kActionMgr.m_uiCurEventCode = 0;
    v3->m_kActionMgr.m_pkLastAttackActInfo = 0;
    v3->m_kActionMgr.m_iOldLoopCnt = 0;
    v3->m_kActionMgr.m_bUseActorSequence = 0;
    v3->m_kActionMgr.m_pkCurPlayActInfo = 0;
    ActorCallBack::SetCurrentActionInfo(&v3->m_kActionMgr.baseclass_0, 0, 0);
    *(_WORD *)&v3->m_kActionMgr.m_abActionEff[0] = 0;
    v3->m_kActionMgr.m_abActionEff[2] = 0;
    *(_WORD *)&v3->m_kActionMgr.m_abActionSnd[0] = 0;
    v3->m_kActionMgr.m_fEffectStartTime = 0.0;
    v3->m_kRidePetAction.m_fActionStartTime = 0.0;
    v3->m_kRidePetAction.m_fActionLastUpdateTime = 0.0;
    v3->m_kRidePetAction.m_pkActInfoSet = 0;
    v3->m_kRidePetAction.m_pkChar = 0;
    v3->m_kRidePetAction.m_pActor = 0;
    v3->m_kRidePetAction.m_pkCurPlaySkillViewInfo = 0;
    v3->m_kRidePetAction.m_uiCurEventCode = 0;
    v3->m_kRidePetAction.m_pkLastAttackActInfo = 0;
    v3->m_kRidePetAction.m_iOldLoopCnt = 0;
    v3->m_kRidePetAction.m_bUseActorSequence = 0;
    v3->m_kRidePetAction.m_pkCurPlayActInfo = 0;
    ActorCallBack::SetCurrentActionInfo(&v3->m_kRidePetAction.baseclass_0, 0, 0);
    *(_WORD *)&v3->m_kRidePetAction.m_abActionEff[0] = 0;
    v3->m_kRidePetAction.m_abActionEff[2] = 0;
    *(_WORD *)&v3->m_kRidePetAction.m_abActionSnd[0] = 0;
    v3->m_kRidePetAction.m_fEffectStartTime = 0.0;
    if ( v3->m_bUserCharacter )
    {
      v15 = CharResMgr::GetCharActor(&g_kCharResMgr, v3->m_kCharShape.m_kClassID, v3->m_kCharShape.m_byGender, uiFrame);
      v16 = v3->m_spActor.m_pObject;
      pkNpcViewInfoa = v15;
      kClass = v16;
      if ( v16 != v15 )
      {
        if ( v16 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.m_uiRefCount) && kClass )
            ((void (__stdcall *)(_DWORD))kClass->baseclass_0.vfptr->__vecDelDtor)(1);
          v15 = pkNpcViewInfoa;
        }
        v3->m_spActor.m_pObject = v15;
        if ( v15 )
          InterlockedIncrement((volatile LONG *)&v15->baseclass_0.m_uiRefCount);
      }
      v19 = v3->m_kCharShape.m_byGender;
      v18 = v3->m_kCharShape.m_kClassID;
    }
    else
    {
      v8 = v3->m_pMobViewInfo;
      if ( !v8
        || (v9 = v8->NpcViewIndex) == 0
        || (v10 = IIDTableBase<CharNPC_ViewInfo_NPCViewInfoTab_unsigned_short>::GetByID(v9, 1),
            (pkNpcViewInfo = v10) == 0) )
      {
        v14 = CharResMgr::GetMobActor(&g_kCharResMgr, v3->m_kCharShape.m_kMobID);
        NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spActor, (NiD3DDefaultShader *)v14);
        v13 = ActionInfoTable::GetMobActionInfo(v3->m_kCharShape.m_kMobID);
        goto LABEL_29;
      }
      classid = Char::MakeCharNpcShape(v3, v10);
      if ( classid == 64 )
      {
        v12 = CharResMgr::GetMobActor(&g_kCharResMgr, pkNpcViewInfo->Gender);
        NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spActor, (NiD3DDefaultShader *)v12);
        v13 = ActionInfoTable::GetMobActionInfo(pkNpcViewInfo->Gender);
        goto LABEL_29;
      }
      Char::MakeCharNpcEquipment(v3, pkNpcViewInfo);
      v11 = CharResMgr::GetCharActor(&g_kCharResMgr, classid, LOBYTE(pkNpcViewInfo->Gender), 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spActor, (NiD3DDefaultShader *)v11);
      v19 = LOBYTE(pkNpcViewInfo->Gender);
      v18 = classid;
    }
    v13 = ActionInfoTable::GetCharActionInfo(v18, v19);
LABEL_29:
    v17 = v3->m_kActionMgr.baseclass_0.baseclass_0.vfptr;
    v3->m_kActionMgr.m_pkActInfoSet = v13;
    ((void (__thiscall *)(_DWORD, _DWORD))v17[1].TextKeyEvent)(&v3->m_kActionMgr, v3);
    ((void (__thiscall *)(_DWORD, _DWORD))v3->m_kRidePetAction.baseclass_0.baseclass_0.vfptr[1].TextKeyEvent)(
      &v3->m_kRidePetAction,
      v3);
    if ( Char::IsLinkGate(v3) || v3->m_bIsDoor )
      v3->m_spScene.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
    if ( v3->m_spActor.m_pObject )
      result = (int)v3->baseclass_0.vfptr[18].__vecDelDtor((AbStateInfectee *)v3, bEquip);
    else
      result = 0;
    return result;
  }
  v4 = v3->baseclass_0.vfptr[1].GetAbstateColor;
  v3->m_bIsChangeCampMode = 1;
  ((void (__thiscall *)(_DWORD, _DWORD))v4)(v3, 0);
  v5 = v3->m_spScene.m_pObject;
  if ( v5 )
  {
    v6 = ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)();
    if ( v6 )
    {
      while ( (NiRTTI *)v6 != &NsFadeNode::m_RTTI )
      {
        v6 = *(_DWORD *)(v6 + 4);
        if ( !v6 )
          goto LABEL_10;
      }
      LOBYTE(v3->m_spScene.m_pObject[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr) = 0;
    }
  }
LABEL_10:
  NiAVObject::UpdateProperties(&v3->m_spScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v3->m_spScene.m_pObject->baseclass_0);
  NiAVObject::Update(&v3->m_spScene.m_pObject->baseclass_0, 0.0, 1);
  return 1;
}

//----- (00643BB0) --------------------------------------------------------
void __thiscall NiAVObject::SetRotate(NiAVObject *this, float fAngle, float x, float y, float z)
{
  NiMatrix3::MakeRotation(&this->m_kLocal.m_Rotate, fAngle, x, y, z);
}

//----- (00643BE0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (00643C00) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 21) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 21) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 21) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 21) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 21) )
    goto LABEL_11;
  return result;
}

//----- (00643C60) --------------------------------------------------------
bool __thiscall CQuestInfoViewMgr::IsHaveQuestState(CQuestInfoViewMgr *this)
{
  bool result; // al@2

  switch ( this->m_kNpcState.eResultState )
  {
    case 4:
    case 5:
    case 6:
    case 8:
    case 0x14:
      result = 1;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00643CA0) --------------------------------------------------------
void __thiscall Char::SetShockWave(Char *this, bool bShockWave)
{
  Char *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  float v5; // eax@2
  NiPoint3 kCharPos; // [sp+10h] [bp-Ch]@1

  v2 = this;
  v3 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
  LODWORD(kCharPos.x) = *(_DWORD *)v3;
  LODWORD(kCharPos.y) = *(_DWORD *)(v3 + 4);
  LODWORD(kCharPos.z) = *(_DWORD *)(v3 + 8);
  World::GetAdvGroundPos(&g_kWorld, kCharPos.x, kCharPos.y, &kCharPos);
  v2->baseclass_0.vfptr[5].__vecDelDtor((AbStateInfectee *)v2, (unsigned int)&kCharPos);
  v2->m_bShockWave = bShockWave;
  if ( bShockWave == 1 )
  {
    v2->m_RisingTimer.m_fStartTime = Timer::ms_fCurTime;
    v2->m_RisingTimer.m_fObjectTime = 0.0;
    v2->m_RisingTimer.m_fElapsedTime = 0.0;
    v4 = ((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[6].Deaffect)(v2);
    LODWORD(v2->m_MovePoint.x) = *(_DWORD *)v4;
    LODWORD(v2->m_MovePoint.y) = *(_DWORD *)(v4 + 4);
    LODWORD(v5) = *(_DWORD *)(v4 + 8);
    v2->m_fCountTime = 0.0099999998;
    v2->m_MovePoint.z = v5;
  }
  else
  {
    if ( !bShockWave )
    {
      v2->m_bAirTime = 0;
      v2->m_fCountTime = 0.0;
      v2->m_bDownTime = 0;
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00643D80) --------------------------------------------------------
void __thiscall JumpProcessor::_JumpProcessor(JumpProcessor *this)
{
  JumpProcessor *v1; // esi@1
  NiNode *v2; // esi@1

  v1 = this;
  NsEffect::_NsEffect(&this->m_kEffect);
  v2 = v1->m_spJumpInfo.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  }
}

//----- (00643E00) --------------------------------------------------------
void __thiscall CRidePetCtl::_CRidePetCtl(CRidePetCtl *this)
{
  CRidePetCtl *v1; // esi@1
  NiActorManager *v2; // esi@1

  v1 = this;
  CSpactralGlow_Shader_Controller::_CSpactralGlow_Shader_Controller(&this->m_kShaderCtrl);
  v2 = v1->m_spPetActor.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
  {
    if ( v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  }
}

//----- (00643E80) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00643EE0) --------------------------------------------------------
unsigned int __cdecl ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MobRandomIdleAni_MobRandomIdleAniTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E8C: using guessed type int ITableBase_MobRandomIdleAni_MobRandomIdleAniTab___ms_pkTable;

//----- (00643F00) --------------------------------------------------------
NiAVObject *__thiscall NsFindObjectByName::GetAt(NsFindObjectByName *this, unsigned int uiIndex)
{
  NiAVObject *result; // eax@2

  if ( uiIndex < (signed int)((char *)this->m_vecObject.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
    result = *(NiAVObject **)(*(_DWORD *)&this->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiIndex);
  else
    result = 0;
  return result;
}

//----- (00643F30) --------------------------------------------------------
void __thiscall CQuestInfoViewMgr::CQuestInfoViewMgr(CQuestInfoViewMgr *this)
{
  CQuestInfoViewMgr *v1; // esi@1
  int v2; // ebx@1
  void *v3; // eax@1
  int v4; // eax@2
  NiNode *v5; // edi@3

  v1 = this;
  v2 = 0;
  this->m_spQuestInfo.m_pObject = 0;
  v3 = operator new(0xE8u);
  if ( v3 )
  {
    NiNode::NiNode((NiNode *)v3, 0);
    v2 = v4;
  }
  v5 = v1->m_spQuestInfo.m_pObject;
  if ( v1->m_spQuestInfo.m_pObject != (NiNode *)v2 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spQuestInfo.m_pObject = (NiNode *)v2;
    if ( v2 )
      InterlockedIncrement((volatile LONG *)(v2 + 4));
  }
  v1->m_kNpcState.eResultState = 0;
  v1->m_kNpcState.lpQuestData = 0;
  v1->m_kNpcState.nLevel = 0;
  v1->m_kNpcState.hID = 0;
}

//----- (00643FF0) --------------------------------------------------------
void __thiscall CQuestInfoViewMgr::_CQuestInfoViewMgr(CQuestInfoViewMgr *this)
{
  CQuestInfoViewMgr *v1; // edi@1
  NiNode *v2; // esi@1
  NiNode *v3; // esi@6

  v1 = this;
  v2 = this->m_spQuestInfo.m_pObject;
  if ( this->m_spQuestInfo.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spQuestInfo.m_pObject = 0;
  }
  v3 = v1->m_spQuestInfo.m_pObject;
  if ( v1->m_spQuestInfo.m_pObject
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (00644090) --------------------------------------------------------
void __thiscall CRidePetCtl::StartAction(CRidePetCtl *this, unsigned int uiEventCode)
{
  CRidePetCtl *v2; // ebx@1
  ActionInfoSet *v3; // eax@1
  ActionInfo *v4; // eax@1
  ActionMgr *v5; // esi@1
  NiActorManager *v6; // ST00_4@1
  ActorCallBack *v7; // ecx@1
  ActionInfo *v8; // edi@1
  ActionMgr *v9; // ecx@1
  unsigned int v10; // edx@2

  v2 = this;
  v3 = ActionInfoTable::GetRidePetActionInfo(this->m_uiID);
  v4 = ActionInfoSet::GetByEventCode(v3, uiEventCode);
  v5 = v2->m_pkActionMgr;
  v6 = v5->m_pActor;
  v7 = (ActorCallBack *)v2->m_pkActionMgr;
  v8 = v4;
  v5->m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(v7, v6, 0);
  *(_WORD *)&v5->m_abActionEff[0] = 0;
  v5->m_abActionEff[2] = 0;
  *(_WORD *)&v5->m_abActionSnd[0] = 0;
  v9 = v2->m_pkActionMgr;
  v9->m_pkCurPlayActInfo = v8;
  if ( v8 )
  {
    v10 = v8->uiEventCode;
    v9->m_uiCurEventCode = v10;
    if ( 10000 * v10 / 0x2710 == 300000 )
      v9->m_pkLastAttackActInfo = v8;
  }
  ActorCallBack::SetCurrentActionInfo(&v9->baseclass_0, v9->m_pActor, v8);
  ActionMgr::SetActionStartTime(v2->m_pkActionMgr, Timer::ms_fCurTime);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00644130) --------------------------------------------------------
void __thiscall CRidePetCtl::ActStand(CRidePetCtl *this)
{
  unsigned int *v1; // esi@1
  NiActorManager *v2; // ecx@1

  v1 = (unsigned int *)this;
  v2 = this->m_spPetActor.m_pObject;
  if ( *v1 != v2->m_eTargetID )
  {
    if ( v2 )
      NiActorManager::SetTargetAnimation(v2, *v1);
    CRidePetCtl::StartAction((CRidePetCtl *)v1, *v1);
  }
}

//----- (00644160) --------------------------------------------------------
float __thiscall Char::GetMaxViewLength(Char *this)
{
  char v1; // al@3
  MobInfo *v2; // eax@5
  float v3; // ST00_4@7
  double v4; // st7@7
  float result; // st7@9

  if ( this->m_byType == 4
    || !this->m_bUserCharacter && (v1 = this->m_byMode, v1 != 4) && v1 != 5 && (v2 = this->m_pMobinfo) != 0 && v2->IsNPC )
  {
    v3 = this->m_fMaxViewLength + 500.0;
    v4 = v3;
  }
  else
  {
    v4 = this->m_fMaxViewLength;
  }
  LODWORD(result) = LODWORD(v4);
  return result;
}

//----- (006441C0) --------------------------------------------------------
void __thiscall Char::CulledTent(Char *this, bool bCullTent)
{
  Char *v2; // esi@1
  int v3; // edi@3
  int v4; // edi@8

  v2 = this;
  if ( bCullTent )
  {
    this->m_spHouseNode.m_pObject->baseclass_0.m_uFlags |= 1u;
    this->m_spCharNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
    ((void (__stdcall *)(bool *, NiNode *))this->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &bCullTent,
      this->m_spHouseNode.m_pObject);
    if ( bCullTent )
    {
      v3 = bCullTent;
      if ( !InterlockedDecrement((volatile LONG *)(bCullTent + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
    ((void (__stdcall *)(NiNode *, signed int))v2->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_spCharNode.m_pObject,
      1);
  }
  else
  {
    ((void (__stdcall *)(bool *, NiNode *))this->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &bCullTent,
      this->m_spCharNode.m_pObject);
    if ( bCullTent )
    {
      v4 = bCullTent;
      if ( !InterlockedDecrement((volatile LONG *)(bCullTent + 4)) )
      {
        if ( v4 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      }
    }
    ((void (__stdcall *)(NiNode *, signed int))v2->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_spHouseNode.m_pObject,
      1);
    v2->m_spHouseNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
    v2->m_spCharNode.m_pObject->baseclass_0.m_uFlags |= 1u;
  }
  NiAVObject::UpdateEffects(&v2->m_spScene.m_pObject->baseclass_0);
  NiAVObject::UpdateProperties(&v2->m_spScene.m_pObject->baseclass_0);
}

//----- (006442D0) --------------------------------------------------------
void __thiscall CRidePetCtl::Update(CRidePetCtl *this, float ftime)
{
  CRidePetCtl *v2; // esi@1
  NiActorManager *v3; // edi@1
  unsigned int v4; // ecx@2
  unsigned int v5; // edx@2
  NiVBSet *val; // [sp+Ch] [bp-4h]@4

  v2 = this;
  v3 = this->m_spPetActor.m_pObject;
  if ( v3 )
  {
    v4 = this->m_uiSpecialEventCode;
    v5 = v3->m_eCurID;
    if ( v5 == v4
      && v3->m_eTargetID == v4
      && NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
           (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v3->m_kSequenceMap,
           v5,
           &val)
      && val )
    {
      if ( *(float *)&val->m_apkBlocks.m_uiGrowBy <= (double)*(float *)&val->m_pkBlockList )
        CRidePetCtl::ActStand(v2);
    }
    NiActorManager::Update(v2->m_spPetActor.m_pObject, ftime);
  }
}

//----- (00644340) --------------------------------------------------------
void __thiscall Char::UpdateForceAni(Char *this)
{
  Char *v1; // esi@1
  NiActorManager *v2; // ecx@1

  v1 = this;
  v2 = this->m_spActor.m_pObject;
  if ( v2 )
  {
    if ( !v1->m_bCulled )
    {
      NiActorManager::Update(v2, v1->m_fAnimationUpdateTime);
      CRidePetCtl::Update(&v1->m_kRidePetCtl, v1->m_fAnimationUpdateTime);
      NiAVObject::Update(&v1->m_spScene.m_pObject->baseclass_0, v1->m_fAnimationUpdateTime, 1);
    }
  }
}

//----- (006443A0) --------------------------------------------------------
std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *__thiscall std::_List_val<QuestPigeonEffect::EffectInfo_std::allocator<QuestPigeonEffect::EffectInfo>>::_Buynode(std::_List_val<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> > *this, std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *_Next, std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *_Prev, QuestPigeonEffect::EffectInfo *_Val)
{
  std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *result; // eax@1
  std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *v5; // edx@2
  QuestPigeonEffect::EffectInfo *v6; // edx@3
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *)operator new(0x14u);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<QuestPigeonEffect::EffectInfo,std::allocator<QuestPigeonEffect::EffectInfo> >::_Node *)-8 )
  {
    v6 = _Val;
    *(_DWORD *)&result->_Myval.bPlayed = *(_DWORD *)&_Val->bPlayed;
    result->_Myval.fTime = v6->fTime;
    result->_Myval.pkEffectInfo = v6->pkEffectInfo;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00644410) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Linsert(std::_Tree<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *v4; // edx@1
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *v5; // edi@1
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *v6; // esi@1
  bool v7; // al@4
  int v8; // ecx@13
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *v9; // eax@13
  char _Addleft; // [sp+14h] [bp+Ch]@1

  v4 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v5 = _Node;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  _Addleft = 1;
  while ( !v4->_Isnil )
  {
    v6 = v4;
    if ( _Leftish )
    {
      v7 = v5->_Myval.baseclass_0.first > (double)v4->_Myval.baseclass_0.first;
      _Addleft = v7 == 0;
      if ( v7 )
        goto LABEL_11;
      v4 = v4->_Left;
    }
    else
    {
      if ( v4->_Myval.baseclass_0.first <= (double)v5->_Myval.baseclass_0.first )
      {
        _Addleft = 0;
LABEL_11:
        v4 = v4->_Right;
        continue;
      }
      v4 = v4->_Left;
      _Addleft = 1;
    }
  }
  v8 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                     (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                     _Addleft,
                     (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6,
                     (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v9 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v8;
  result->baseclass_0.second = 1;
  return v9;
}

//----- (006444B0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *this, std::pair<float,EffectViewInfo *> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *result; // eax@1
  std::pair<float,EffectViewInfo *> *v4; // edx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)operator new(0x18u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00644520) --------------------------------------------------------
void __thiscall NsFindObjectByName::NsFindObjectByName(NsFindObjectByName *this)
{
  this->baseclass_0.m_pCallBack = 0;
  this->baseclass_0.m_nCurLevel = -1;
  this->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&NsFindObjectByName::_vftable_;
  this->m_szName.baseclass_0._Myres = 15;
  this->m_szName.baseclass_0._Mysize = 0;
  this->m_szName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)&this->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_vecObject.baseclass_0._Mylast = 0;
  this->m_vecObject.baseclass_0._Myend = 0;
}
// 9C335C: using guessed type int (__stdcall *NsFindObjectByName___vftable_)(int _pkObject, int _pData);

//----- (00644550) --------------------------------------------------------
void __thiscall NsFindObjectByName::_NsFindObjectByName(NsFindObjectByName *this)
{
  NsFindObjectByName *v1; // esi@1

  v1 = this;
  if ( *(_DWORD *)&this->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecObject.baseclass_0._Mylast = 0;
  v1->m_vecObject.baseclass_0._Myend = 0;
  if ( v1->m_szName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_szName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_szName.baseclass_0._Mysize = 0;
  v1->m_szName.baseclass_0._Myres = 15;
  v1->m_szName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);

//----- (006445A0) --------------------------------------------------------
void __thiscall std::list<float_std::allocator<float>>::push_back(std::list<float,std::allocator<float> > *this, float *_Val)
{
  std::list<float,std::allocator<float> > *v2; // esi@1
  int v3; // edi@1
  std::_List_nod<float,std::allocator<float> >::_Node *v4; // eax@1
  unsigned int v5; // ecx@1

  v2 = this;
  v3 = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = std::_List_val<float_std::allocator<float>>::_Buynode(
         &this->baseclass_0,
         *(std::_List_nod<float,std::allocator<float> >::_Node **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
         *(std::_List_nod<float,std::allocator<float> >::_Node **)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                 + 4),
         _Val);
  v5 = v2->baseclass_0.baseclass_0._Mysize;
  if ( 1073741822 - v5 < 1 )
    std::_Xlength_error("list<T> too long");
  v2->baseclass_0.baseclass_0._Mysize = v5 + 1;
  *(_DWORD *)(v3 + 4) = v4;
  v4->_Prev->_Next = v4;
}

//----- (006445F0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *__thiscall std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *result, OscTarget *_Keyval)
{
  int v3; // edx@1
  int v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *v5; // eax@8

  v3 = *((_DWORD *)&this->baseclass_0 + 1);
  v4 = *(_DWORD *)(v3 + 4);
  while ( !*(_BYTE *)(v4 + 21) )
  {
    if ( *(_DWORD *)(v4 + 12) >= *_Keyval )
    {
      v3 = v4;
      v4 = *(_DWORD *)v4;
    }
    else
    {
      v4 = *(_DWORD *)(v4 + 8);
    }
  }
  if ( v3 == *((_DWORD *)&this->baseclass_0 + 1) || *_Keyval < *(_DWORD *)(v3 + 12) )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *((_DWORD *)&this->baseclass_0
                                                                                         + 1);
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (00644660) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall NsFindObjectByName::ProcessData(NsFindObjectByName *this, NiAVObject *_pkObject, void *_pData)
{
  void *v3; // esi@1
  Ns_TourScene::TS_RESULT result; // eax@2

  v3 = _pData;
  if ( NsUtil::MatchTag(&_pkObject->baseclass_0, *(const char **)_pData) )
  {
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      *((std::vector<unsigned long,std::allocator<unsigned long> > **)v3 + 1),
      (const unsigned int *)&_pkObject);
    result = -1;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006446A0) --------------------------------------------------------
void __thiscall std::map<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>>::_map<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>>(std::map<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> > > *this)
{
  std::map<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<HWND__ *,PgWin *,std::less<HWND__ *>,std::allocator<std::pair<HWND__ * const,PgWin *> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)this,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (00644700) --------------------------------------------------------
void *__thiscall Char::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Char::_vector_deleting_destructor_((Char *)((char *)this - 84), a2);
}

//----- (00644710) --------------------------------------------------------
void *__thiscall Char::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Char::_vector_deleting_destructor_((Char *)((char *)this - 60), a2);
}

//----- (00644720) --------------------------------------------------------
bool __thiscall NsFindObjectByName::FindObject(NsFindObjectByName *this, NiNode *_pObject, const char *_szName)
{
  NsFindObjectByName *v3; // ebx@1
  NsFindObjectByName::Data data; // [sp+Ch] [bp-8h]@2

  v3 = this;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this->m_szName, _szName, strlen(_szName));
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v3->m_vecObject,
    0);
  if ( v3->m_szName.baseclass_0._Myres < 0x10 )
    data.szName = (const char *)&v3->m_szName;
  else
    data.szName = *(const char **)&v3->m_szName.baseclass_0.___u0.baseclass_0.dummy[0];
  data.pvector = &v3->m_vecObject;
  Ns_TourScene::TourScene(&v3->baseclass_0, _pObject, &NiAVObject::m_RTTI, &data);
  v3->m_uiSize = (signed int)((char *)v3->m_vecObject.baseclass_0._Mylast
                            - *(_DWORD *)&v3->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  return ((unsigned int)((char *)v3->m_vecObject.baseclass_0._Mylast
                       - *(_DWORD *)&v3->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFC) != 0;
}

//----- (006447A0) --------------------------------------------------------
void *__thiscall Char::_vector_deleting_destructor_(Char *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  Char::_Char(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006447D0) --------------------------------------------------------
void __thiscall Char::StopMoveTarget(Char *this)
{
  this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&this->m_kMoveToTarget);
}

//----- (006447F0) --------------------------------------------------------
bool __thiscall Char::IsDuringSkillCasting(Char *this)
{
  Char *v1; // esi@1
  unsigned int v2; // eax@2

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
      && ((v2 = v1->m_uiSkillActStep, v2 == 4) || v2 == 2 || v2 == 3);
}

//----- (00644820) --------------------------------------------------------
void __thiscall Char::SetCurPlaySkill(Char *this, Skill::Type eSkillType, unsigned __int16 kSkillID)
{
  this->m_eCurPlaySkillType = eSkillType;
  this->m_kCurPlaySkillID = kSkillID;
}

//----- (00644840) --------------------------------------------------------
Skill::Type __thiscall Char::GetCurPlaySkillType(Char *this)
{
  return this->m_eCurPlaySkillType;
}

//----- (00644850) --------------------------------------------------------
unsigned __int16 __thiscall Char::GetCurPlaySkillID(Char *this)
{
  return this->m_kCurPlaySkillID;
}

//----- (00644860) --------------------------------------------------------
void __thiscall Char::ActDamageShaking(Char *this, float fAmplitude, float fPeriod, float fDamp, EffectAxisEnum eValue, float fStartTime)
{
  OscillationEx::ImPact(&this->m_kDamageOscillation, fAmplitude, fPeriod, fDamp, eValue, fStartTime);
}

//----- (006448A0) --------------------------------------------------------
void __thiscall Char::ActDamageShaking(Char *this, EffectViewInfo *pkShakeInfo, float fStartTime)
{
  if ( pkShakeInfo )
    OscillationEx::Impact(&this->m_kDamageOscillation, pkShakeInfo, fStartTime);
}

//----- (006448D0) --------------------------------------------------------
void __thiscall Char::ActResourceAppearing(Char *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.vfptr[10].SetAbStateProperty)(100, 0, 0);
}

//----- (006448F0) --------------------------------------------------------
void __thiscall Char::ActResourceDisappearing(Char *this)
{
  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.vfptr[10].SetAbStateProperty)(300, 0, 0);
}

//----- (00644910) --------------------------------------------------------
void __thiscall Char::SetReserveSkillSmash(Char *this, bool bSmash)
{
  unsigned int v2; // eax@2

  if ( this->m_bReserveSkillSmash || (v2 = this->m_uiSkillActStep, v2 == 6) )
  {
    this->m_bReserveSkillSmash = bSmash;
  }
  else
  {
    this->m_bReserveSkillSmash = bSmash;
    if ( v2 )
      this->m_uiSkillActStep = 5;
  }
}

//----- (00644950) --------------------------------------------------------
void __thiscall Char::CancelEmotion(Char *this)
{
  this->m_eEmotionState = 0;
  this->m_uiEmotionIndex = 65535;
  this->m_uiCurEmotionCode = 0;
}

//----- (00644970) --------------------------------------------------------
void __thiscall Char::StartMHEmotion(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  v1->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex((AbStateInfectee *)v1, STA_MIGHTYSOUL);
}

//----- (00644990) --------------------------------------------------------
void __thiscall Char::StopGathering(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  if ( this->m_kTargetResourceHandle != -1 )
  {
    Char::RestoreEquipState(this);
    ((void (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
  }
}

//----- (006449C0) --------------------------------------------------------
void __thiscall Char::StopItemCasting(Char *this)
{
  ((void (*)(void))this->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
}

//----- (006449D0) --------------------------------------------------------
void __thiscall Char::StartEmotion(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  if ( this->m_eEmotionState == 4 )
    ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  if ( v1->m_eEmotionState != 3 )
    v1->m_eEmotionState = 1;
  ((void (__stdcall *)(_DWORD))v1->baseclass_54.vfptr->SetAnimationSpeed)(1.0);
}

//----- (00644A10) --------------------------------------------------------
unsigned int __thiscall Char::GetAniCode(Char *this, bool bFindingBaseAction, unsigned int *puiFirstCode, unsigned int *puiSecondCode)
{
  unsigned int v4; // esi@1
  Char *v5; // edi@1
  unsigned int v7; // ecx@12

  v4 = NiActorManager::INVALID_EVENT_CODE;
  v5 = this;
  if ( ((int (*)(void))this->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
    return v5->m_uiLayerAniCode[0];
  if ( !bFindingBaseAction && v5->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
    v4 = v5->m_uiLayerAniCode[1];
  if ( v4 != NiActorManager::INVALID_EVENT_CODE
    || (v4 = v5->m_uiLayerAniCode[0], v4 != NiActorManager::INVALID_EVENT_CODE) )
  {
    v7 = 10000 * v4 / 0x2710;
    if ( puiFirstCode )
      *puiFirstCode = v7;
    if ( puiSecondCode )
      *puiSecondCode = 100 * v4 / 0x64 - v7;
  }
  else
  {
    if ( puiFirstCode )
      *puiFirstCode = -1;
    if ( puiSecondCode )
    {
      *puiSecondCode = -1;
      return v4;
    }
  }
  return v4;
}

//----- (00644AC0) --------------------------------------------------------
char __thiscall Char::CheckActState(Char *this, int nAniEventCode)
{
  char result; // al@1
  int n2ndCode; // [sp+0h] [bp-8h]@1
  int n1stCode; // [sp+4h] [bp-4h]@1

  Char::GetAniCode(this, 0, (unsigned int *)&n1stCode, (unsigned int *)&n2ndCode);
  result = 0;
  if ( n1stCode == nAniEventCode )
  {
    result = 1;
  }
  else
  {
    if ( n2ndCode == nAniEventCode )
      result = 2;
  }
  return result;
}

//----- (00644B00) --------------------------------------------------------
void __thiscall Char::StopFlagCapture(Char *this)
{
  ((void (*)(void))this->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
}

//----- (00644B10) --------------------------------------------------------
bool __thiscall Char::IsMoverMovable(Char *this)
{
  Mover *v1; // ecx@1
  bool result; // al@2

  v1 = this->m_pkMover;
  if ( v1 )
    result = Mover::IsMoverMovable(v1);
  else
    result = 1;
  return result;
}

//----- (00644B30) --------------------------------------------------------
CharAniType __thiscall Char::GetMoveCharAniType(Char *this, AniEventCode::Code2 eCode2)
{
  CharAniType result; // eax@2

  if ( eCode2 == 1000 )
    result = 2;
  else
    result = ((eCode2 != 2000) - 1) & 3;
  return result;
}

//----- (00644B60) --------------------------------------------------------
CharAniType __thiscall Char::GetDamageCharAniType(Char *this, AniEventCode::Code2 eCode2)
{
  CharAniType result; // eax@2

  if ( eCode2 == 1000 )
    result = 7;
  else
    result = ((eCode2 != 2000) - 1) & 6;
  return result;
}

//----- (00644B90) --------------------------------------------------------
void __thiscall Char::StopMove(Char *this, bool bAbstateTest)
{
  Char *v2; // esi@1
  unsigned int puiSecondCode; // [sp+4h] [bp-4h]@3

  v2 = this;
  if ( bAbstateTest != 1 || !this->baseclass_0.m_kAbStateProperty.iUnMovableCount )
  {
    this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&this->m_kMoveToTarget);
    Char::GetAniCode(v2, 0, (unsigned int *)&bAbstateTest, &puiSecondCode);
    if ( bAbstateTest != 100000 )
    {
      if ( puiSecondCode != 100000 )
        ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
    }
  }
}

//----- (00644BF0) --------------------------------------------------------
void __thiscall Char::TestSetPos(Char *this, NiPoint3 *kPos)
{
  Char *v2; // edi@1
  NiNode *v3; // eax@1

  v2 = this;
  this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&this->m_kMoveToTarget);
  v2->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos((NpNs_MoveToTarget *)&v2->m_kMoveToTarget, kPos);
  v3 = v2->m_spScene.m_pObject;
  v3->baseclass_0.m_kLocal.m_Translate.x = kPos->x;
  v3->baseclass_0.m_kLocal.m_Translate.y = kPos->y;
  v3->baseclass_0.m_kLocal.m_Translate.z = kPos->z;
  v2->m_pos3CameraPos.x = kPos->x;
  v2->m_pos3CameraPos.y = kPos->y;
  v2->m_pos3CameraPos.z = kPos->z;
}

//----- (00644C60) --------------------------------------------------------
void __thiscall Char::StopMove(Char *this, float fXPos, float fYPos, bool bAbstateTest)
{
  Char *v4; // esi@1
  NiNode *v5; // eax@4
  float v6; // eax@4
  float v7; // ecx@4
  NiPoint3 kPos; // [sp+14h] [bp-Ch]@3

  v4 = this;
  if ( bAbstateTest != 1 || !this->baseclass_0.m_kAbStateProperty.iUnMovableCount )
  {
    this->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&this->m_kMoveToTarget);
    if ( World::GetAdvGroundPos(&g_kWorld, fXPos, fYPos, &kPos) == 1 )
    {
      v4->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos((NpNs_MoveToTarget *)&v4->m_kMoveToTarget, &kPos);
      v5 = v4->m_spScene.m_pObject;
      LODWORD(v5->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
      v5->baseclass_0.m_kLocal.m_Translate.y = kPos.y;
      v5->baseclass_0.m_kLocal.m_Translate.z = kPos.z;
      v6 = kPos.y;
      v7 = kPos.z;
      LODWORD(v4->m_pos3CameraPos.x) = (_DWORD)kPos.x;
      v4->m_pos3CameraPos.y = v6;
      v4->m_pos3CameraPos.z = v7;
    }
  }
}

//----- (00644D00) --------------------------------------------------------
void __thiscall Char::TurnToChar(Char *this, Char *pkChar)
{
  Char *v2; // esi@1
  NiPoint3 kMyPos; // [sp+8h] [bp-24h]@3
  NiPoint3 kDestPos; // [sp+14h] [bp-18h]@3
  NiPoint3 kDir; // [sp+20h] [bp-Ch]@3

  v2 = this;
  if ( pkChar )
  {
    if ( pkChar != this )
    {
      ((void (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr[6].SetAbStateProperty)(&kMyPos);
      ((void (__thiscall *)(Char *, NiPoint3 *))pkChar->baseclass_0.vfptr[6].SetAbStateProperty)(pkChar, &kDestPos);
      kDir.x = kDestPos.x - kMyPos.x;
      kDir.y = kDestPos.y - kMyPos.y;
      kDir.z = kDestPos.z - kMyPos.z;
      NiPoint3::Unitize(&kDir);
      NpNs_SmoothRotateControler::SetTargetDirection(&v2->m_kSmoothRotater, &kDir);
    }
  }
}

//----- (00644D80) --------------------------------------------------------
void __thiscall Char::TurnToPosition(Char *this, NiPoint3 *kPos)
{
  Char *v2; // esi@1
  float v3; // edx@1
  float v4; // eax@1
  NiPoint3 kMyPos; // [sp+4h] [bp-24h]@1
  NiPoint3 kDir; // [sp+10h] [bp-18h]@1
  NiPoint3 kDestPos; // [sp+1Ch] [bp-Ch]@1

  v2 = this;
  ((void (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr[6].SetAbStateProperty)(&kMyPos);
  v3 = kPos->y;
  v4 = kPos->z;
  kDestPos.x = kPos->x;
  kDestPos.y = v3;
  kDestPos.z = v4;
  kDir.x = kDestPos.x - kMyPos.x;
  kDir.y = v3 - kMyPos.y;
  kDir.z = v4 - kMyPos.z;
  NiPoint3::Unitize(&kDir);
  NpNs_SmoothRotateControler::SetTargetDirection(&v2->m_kSmoothRotater, &kDir);
}

//----- (00644DF0) --------------------------------------------------------
bool __thiscall Char::CheckExceptional3rdCode(Char *this, unsigned int eAniCode1, unsigned int eAniCode2, unsigned int *eResultAniCode3)
{
  Char *v4; // edi@1
  bool v5; // bl@1
  char v6; // al@2
  bool result; // al@17
  unsigned int *v8; // eax@38
  bool v9; // zf@40
  unsigned int *v10; // eax@58
  bool v11; // zf@60
  unsigned int *v12; // esi@73
  int v13; // eax@77

  v4 = this;
  v5 = 0;
  switch ( this->m_kCharShape.m_kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v6 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v6 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v6 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v6 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v6 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v6 = 26;
      break;
    default:
      v6 = 0;
      break;
  }
  if ( eAniCode1 != 100000 && eAniCode1 != 200000 )
  {
    if ( eAniCode1 == 300000 )
    {
      if ( v6 == 1 )
      {
        if ( eAniCode2 == 1500 || eAniCode2 == 2500 || eAniCode2 == 3500 )
        {
          v5 = 1;
          if ( *eResultAniCode3 != 10 )
          {
            *eResultAniCode3 = 20;
            return 1;
          }
        }
      }
      else
      {
        if ( v6 == 21 )
        {
          if ( eAniCode2 == 1500 || eAniCode2 == 2500 || eAniCode2 == 3500 )
          {
            *eResultAniCode3 = Char::GetWeaponType(this) != 18 ? 20 : 90;
            return 1;
          }
        }
        else
        {
          if ( v6 == 26 && (eAniCode2 == 1500 || eAniCode2 == 2500 || eAniCode2 == 3500) )
          {
            v5 = 1;
            if ( Char::GetWeaponType(this) == 19 )
            {
              result = 1;
              *eResultAniCode3 = 20;
              return result;
            }
          }
        }
      }
    }
    return v5;
  }
  if ( v6 == 1 )
  {
    if ( (eAniCode1 == 100000 || eAniCode1 == 200000) && !*eResultAniCode3 && (eAniCode2 == 1000 || eAniCode2 == 2000) )
    {
      result = 1;
      *eResultAniCode3 = 10;
      return result;
    }
    return v5;
  }
  if ( v6 == 6 )
  {
    if ( eAniCode1 == 100000 )
    {
      v8 = eResultAniCode3;
      if ( *eResultAniCode3 )
        return v5;
      if ( eAniCode2 == 1000 )
      {
LABEL_45:
        *v8 = 10;
        return 1;
      }
      v9 = eAniCode2 == 2000;
    }
    else
    {
      if ( eAniCode1 != 200000 || (v8 = eResultAniCode3, *eResultAniCode3) )
        return v5;
      v9 = eAniCode2 == 1000;
    }
    if ( v9 )
      goto LABEL_45;
    return v5;
  }
  if ( v6 == 11 )
  {
    if ( eAniCode1 == 100000 )
    {
      if ( !*eResultAniCode3 && (eAniCode2 == 1000 || eAniCode2 == 2000) )
      {
        *eResultAniCode3 = 40;
        return 1;
      }
    }
    else
    {
      if ( eAniCode1 == 200000 && !*eResultAniCode3 && eAniCode2 == 1000 )
      {
        *eResultAniCode3 = 30;
        return 1;
      }
    }
    return v5;
  }
  if ( v6 == 16 )
  {
    if ( eAniCode1 == 100000 )
    {
      v10 = eResultAniCode3;
      if ( *eResultAniCode3 )
        return v5;
      if ( eAniCode2 == 1000 )
      {
LABEL_65:
        *v10 = 60;
        return 1;
      }
      v11 = eAniCode2 == 2000;
    }
    else
    {
      if ( eAniCode1 != 200000 || (v10 = eResultAniCode3, *eResultAniCode3) )
        return v5;
      v11 = eAniCode2 == 1000;
    }
    if ( !v11 )
      return v5;
    goto LABEL_65;
  }
  if ( v6 != 21 )
  {
    if ( v6 != 26 )
      return v5;
    if ( eAniCode1 == 100000 )
    {
      if ( eAniCode2 == 2000 )
      {
        *eResultAniCode3 = Char::GetWeaponType(this) != 19 ? 0 : 20;
        return 0;
      }
      goto LABEL_82;
    }
    if ( eAniCode1 != 200000 || (v12 = eResultAniCode3, *eResultAniCode3) )
      return v5;
    if ( eAniCode2 != 1000 )
    {
      v13 = Char::GetWeaponType(this) - 19;
LABEL_88:
      *v12 = v13 != 0 ? 0 : 20;
      return v5;
    }
    return 1;
  }
  if ( eAniCode1 != 100000 )
  {
    if ( eAniCode1 != 200000 || (v12 = eResultAniCode3, *eResultAniCode3) )
      return v5;
    if ( eAniCode2 != 1000 )
    {
      if ( Char::GetWeaponType(this) == 18 )
      {
        *eResultAniCode3 = 90;
        return 0;
      }
      v13 = Char::GetWeaponType(v4) - 17;
      goto LABEL_88;
    }
    return 1;
  }
  if ( eAniCode2 != 2000 )
  {
LABEL_82:
    result = 0;
    *eResultAniCode3 = 0;
    return result;
  }
  if ( Char::GetWeaponType(this) == 18 )
  {
    *eResultAniCode3 = 90;
    result = 0;
  }
  else
  {
    *eResultAniCode3 = Char::GetWeaponType(v4) != 17 ? 0 : 20;
    result = 0;
  }
  return result;
}

//----- (00645240) --------------------------------------------------------
bool __thiscall Char::IsDuringAction(Char *this)
{
  return this->m_kActionMgr.m_pkCurPlayActInfo != 0;
}

//----- (00645250) --------------------------------------------------------
ActiveSkillViewInfo *__thiscall Char::GetCurPlayActiiveSkillViewInfo(Char *this)
{
  return this->m_kActionMgr.m_pkCurPlaySkillViewInfo;
}

//----- (00645260) --------------------------------------------------------
ActiveSkillInfo *__thiscall Char::GetCurPlayActiiveSkillInfo(Char *this)
{
  ActiveSkillViewInfo *v1; // eax@1
  int v2; // esi@2
  int v3; // edi@2
  ActiveSkillInfo *result; // eax@3
  int v5; // ecx@5

  v1 = this->m_kActionMgr.m_pkCurPlaySkillViewInfo;
  if ( v1 )
  {
    v2 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    v3 = v1->ID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            v1->ID)
      && (unsigned __int16)v3 <= *(_WORD *)(v2 + 200)
      && (v5 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v5 + 4 * v3)) )
      result = *(ActiveSkillInfo **)(v5 + 4 * v3);
    else
      result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006452B0) --------------------------------------------------------
ActionInfo *__thiscall Char::GetCurPlayActInfo(Char *this)
{
  return this->m_kActionMgr.m_pkCurPlayActInfo;
}

//----- (006452C0) --------------------------------------------------------
bool __thiscall Char::IsDuringSkillAction(Char *this)
{
  return this->m_kActionMgr.m_pkCurPlaySkillViewInfo != 0;
}

//----- (006452D0) --------------------------------------------------------
bool __thiscall Char::IsDuringSkillActionAndHitTimeNotPassed(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  return (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
      && (v1->m_uiSkillActStep != 6 || v1->m_lstfHitTime.baseclass_0.baseclass_0._Mysize);
}

//----- (00645300) --------------------------------------------------------
void __thiscall Char::ActStand(Char *this)
{
  Char *v1; // esi@1
  Char::StandMode v2; // eax@9

  v1 = this;
  if ( this->m_eEmotionState != 4 )
    ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
  if ( !Char::IsResource(v1)
    && !Char::IsLinkGate(v1)
    && !JumpProcessor::IsJump(&v1->m_kJumpProcessor)
    && v1->m_byMode != 3 )
  {
    if ( Char::GetClass(v1) )
    {
      v2 = v1->m_eStandMode;
      v1->m_fAnimationSpeed = 1.0;
      if ( v2 )
      {
        if ( v2 == 1 )
          ((void (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[10].__vecDelDtor)(v1);
      }
      else
      {
        v1->baseclass_0.vfptr[10].GetAbstateColor((AbStateInfectee *)v1);
      }
    }
    else
    {
      v1->baseclass_0.vfptr[10].GetAbstateColor((AbStateInfectee *)v1);
    }
  }
}

//----- (00645390) --------------------------------------------------------
void __thiscall Char::ActMove(Char *this)
{
  Char *v1; // esi@1
  void (__thiscall *v2)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@2
  Char::MoveMode v3; // eax@2
  void *v4; // edx@4
  ActiveSkillInfo *v5; // eax@7

  v1 = this;
  if ( JumpProcessor::IsJump(&this->m_kJumpProcessor) )
    return;
  v2 = v1->baseclass_0.vfptr[13].SetAbStateProperty;
  v1->m_fAnimationSpeed = 1.0;
  ((void (__thiscall *)(_DWORD))v2)(v1);
  v3 = v1->m_eMoveMode;
  if ( !v3 )
  {
    v4 = v1->baseclass_0.vfptr[11].SetAbStateProperty;
    goto LABEL_6;
  }
  if ( v3 == 1 )
  {
    v4 = v1->baseclass_0.vfptr[11].IsVisible;
LABEL_6:
    ((void (__thiscall *)(_DWORD))v4)(v1);
  }
  v1->baseclass_0.vfptr[11].GetAbstateColor((AbStateInfectee *)v1);
  v5 = Char::GetCurPlayActiiveSkillInfo(v1);
  if ( !v5 || !v5->IsMovingSkill )
    AttackSequenceManager::HardStopAttack(&v1->baseclass_54);
}

//----- (00645410) --------------------------------------------------------
bool __thiscall Char::IsSkillCasRdyActExist(Char *this)
{
  ActiveSkillViewInfo *v1; // eax@1
  bool result; // al@2

  v1 = this->m_kActionMgr.m_pkCurPlaySkillViewInfo;
  if ( v1 )
    result = v1->CastingType != 0;
  else
    result = 0;
  return result;
}

//----- (00645430) --------------------------------------------------------
bool __thiscall Char::IsSkillShootActExist(Char *this)
{
  ActiveSkillViewInfo *v1; // eax@1
  bool result; // al@2

  v1 = this->m_kActionMgr.m_pkCurPlaySkillViewInfo;
  if ( v1 )
    result = v1->ActionType == 1;
  else
    result = 0;
  return result;
}

//----- (00645450) --------------------------------------------------------
bool __thiscall Char::IsActGathering(Char *this)
{
  ActionInfo *v1; // eax@1
  bool result; // al@3

  v1 = this->m_kActionMgr.m_pkCurPlayActInfo;
  if ( v1 )
  {
    if ( strcmp(v1->ActionName, "ActionCollect") )
      result = 0;
    else
      result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006454A0) --------------------------------------------------------
bool __thiscall Char::IsBrokenResource(Char *this)
{
  NiActorManager *v1; // eax@1
  unsigned int v3; // eax@3

  v1 = this->m_spActor.m_pObject;
  return v1 && ((v3 = v1->m_eTargetID, v3 == 300) || v3 == 400);
}

//----- (006454D0) --------------------------------------------------------
ActionInfo *__thiscall Char::GetActionInfo(Char *this, AniEventCode::Code1 eCode1, AniEventCode::Code2 eCode2)
{
  ActionInfoSet *v3; // ebx@1
  ActionInfo *result; // eax@2
  int v5; // eax@3
  unsigned int v6; // edx@3
  int v7; // eax@3
  unsigned int v8; // ecx@3
  ActionInfo *v9; // esi@4

  v3 = this->m_kActionMgr.m_pkActInfoSet;
  if ( v3 )
  {
    v5 = ((int (__stdcall *)(_DWORD, _DWORD))this->baseclass_0.vfptr[15].Deaffect)(eCode1, eCode2);
    v6 = v3->m_uiTotal;
    v7 = eCode2 + eCode1 + v5;
    v8 = 0;
    if ( v6 )
    {
      v9 = v3->m_pkInfo;
      while ( v7 != v9->uiEventCode )
      {
        ++v8;
        ++v9;
        if ( v8 >= v6 )
          goto LABEL_7;
      }
      result = v9;
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00645540) --------------------------------------------------------
bool __thiscall Char::IsActProducing(Char *this)
{
  ActionInfo *v1; // eax@1
  bool result; // al@3

  v1 = this->m_kActionMgr.m_pkCurPlayActInfo;
  if ( v1 )
  {
    if ( strcmp(v1->ActionName, "ActionProduct") )
      result = 0;
    else
      result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00645590) --------------------------------------------------------
bool __thiscall Char::IsActItemCasting(Char *this)
{
  ActionInfo *v1; // eax@1
  bool result; // al@3

  v1 = this->m_kActionMgr.m_pkCurPlayActInfo;
  if ( v1 )
  {
    if ( strcmp(v1->ActionName, ActionName::ITEM_CASTING) )
      result = 0;
    else
      result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006455E0) --------------------------------------------------------
void __thiscall Char::ActEmotionIndex(Char *this, unsigned int uiEmotionIndex)
{
  Char *v2; // esi@1
  unsigned int v3; // edi@1
  unsigned int v4; // eax@6
  int v5; // edi@13
  int v6; // eax@15
  int v7; // edi@16
  unsigned __int16 v8; // ax@17
  int (__thiscall *v9)(AbStateInfectee *); // edx@18
  ActionViewInfo *v10; // eax@19
  NiActorManager *v11; // ecx@20
  int (__thiscall *v12)(AbStateInfectee *); // edx@22

  v2 = this;
  v3 = NiActorManager::INVALID_EVENT_CODE;
  if ( ((int (*)(void))this->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
  {
    v4 = uiEmotionIndex;
  }
  else
  {
    if ( v2->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
      v3 = v2->m_uiLayerAniCode[1];
    if ( v3 == NiActorManager::INVALID_EVENT_CODE )
    {
      v3 = v2->m_uiLayerAniCode[0];
      if ( v3 == NiActorManager::INVALID_EVENT_CODE )
        return;
    }
    v4 = 10000 * v3 / 0x2710;
  }
  if ( (v4 == 100000 || v4 == 800000) && !JumpProcessor::IsJump(&v2->m_kJumpProcessor) )
  {
    if ( v2->m_eEmotionState == 2 )
    {
      ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[13].Deaffect)(v2);
      return;
    }
    v5 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                   + 16))(
                            ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                            uiEmotionIndex) )
    {
      if ( (unsigned __int16)uiEmotionIndex <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)uiEmotionIndex;
        if ( *(_DWORD *)v6 )
        {
          v7 = *(_DWORD *)v6;
          if ( *(_DWORD *)v6 )
          {
            v8 = *(_WORD *)(v7 + 65);
            if ( v8 == -1 )
            {
LABEL_18:
              v9 = v2->baseclass_0.vfptr[14].IsVisible;
              v2->m_uiEmotionIndex = uiEmotionIndex;
              ((void (__thiscall *)(Char *, _DWORD))v9)(v2, *(_DWORD *)(v7 + 105));
              return;
            }
            v10 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(v8, 1);
            if ( v10 )
            {
              v11 = v2->m_spActor.m_pObject;
              if ( v11 )
              {
                if ( v10->nAfterCode == v11->m_eCurID )
                  goto LABEL_18;
                v12 = v2->baseclass_0.vfptr[14].IsVisible;
                v2->m_uiEmotionIndex = v10->nIndex;
                ((void (__thiscall *)(Char *, unsigned int))v12)(v2, v10->nEventCode);
              }
            }
          }
        }
      }
    }
  }
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (00645720) --------------------------------------------------------
void __thiscall Char::ActEmotionEventCode(Char *this, unsigned int uiEventCode)
{
  Char *v2; // esi@1
  void (__thiscall *v3)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@2
  int (__thiscall *v4)(AbStateInfectee *); // edx@2

  v2 = this;
  if ( this->m_spActor.m_pObject )
  {
    ((void (*)(void))this->baseclass_0.vfptr[13].Deaffect)();
    v3 = v2->baseclass_0.vfptr[10].SetAbStateProperty;
    v2->m_eEmotionState = 1;
    v3(&v2->baseclass_0, (ABSTATEINDEX)uiEventCode, 0, 0);
    v4 = v2->baseclass_0.vfptr[19].IsVisible;
    v2->m_uiCurEmotionCode = uiEventCode;
    v4(&v2->baseclass_0);
    ActionMgr::CatchAEEff(&v2->m_kActionMgr, 0);
  }
}

//----- (00645780) --------------------------------------------------------
bool __thiscall Char::HaveCurrentSkillMoveAttrib(Char *this)
{
  unsigned __int16 *v1; // eax@1

  v1 = (unsigned __int16 *)this->m_kActionMgr.m_pkCurPlaySkillViewInfo;
  return v1 && Skill::IsMovingSkill(*v1);
}

//----- (006457A0) --------------------------------------------------------
void __thiscall Char::AdjustHeadWeightsValue(Char *this)
{
  Char *v1; // esi@1
  NiControllerSequence *v2; // ecx@5
  double v3; // st6@5
  double v4; // st2@8
  float v5; // ST04_4@13
  float v6; // ST04_4@19
  NiControllerSequence *v7; // ecx@21
  float v8; // ST04_4@21
  NiControllerSequence *v9; // ecx@23
  double v10; // st3@26
  float v11; // ST04_4@32
  double v12; // st7@35
  float v13; // ST04_4@38
  NiControllerSequence *v14; // ecx@40
  float v15; // ST04_4@40
  float v16; // [sp+4h] [bp-8h]@15
  float v17; // [sp+4h] [bp-8h]@34
  float fWeightDiff; // [sp+8h] [bp-4h]@7
  float fWeightDiffa; // [sp+8h] [bp-4h]@13
  float fWeightDiffb; // [sp+8h] [bp-4h]@25
  float fWeightDiffc; // [sp+8h] [bp-4h]@32

  v1 = this;
  if ( this->m_bEnabledHeadMovement )
  {
    if ( ((int (*)(void))this->baseclass_0.vfptr[2].__vecDelDtor)() <= 0 || v1->m_bWillDead )
    {
      v1->m_fTargetYawWeight = 0.5;
      v1->m_fTargetPitchWeight = 0.25;
    }
    v2 = v1->m_pkLeftSeq;
    v3 = 0.0;
    if ( v2 )
    {
      if ( v1->m_pkRightSeq )
      {
        fWeightDiff = v2->m_fSeqWeight;
        if ( fWeightDiff != v1->m_fTargetYawWeight )
        {
          v4 = 1.0;
          if ( v1->m_fTargetYawWeight <= 1.0 )
          {
            if ( v1->m_fTargetYawWeight < 0.0 )
              v1->m_fTargetYawWeight = 0.0;
            v4 = 1.0;
            v3 = 0.0;
          }
          else
          {
            v1->m_fTargetYawWeight = 1.0;
          }
          fWeightDiffa = v1->m_fTargetYawWeight - fWeightDiff;
          v5 = fabs(fWeightDiffa);
          if ( v5 < 0.0099999998 )
            fWeightDiffa = v3;
          v16 = fWeightDiffa * 0.006000000052154064 + v1->m_fTargetYawWeight;
          v1->m_fTargetYawWeight = v16;
          if ( v16 <= v4 )
          {
            if ( v16 < v3 )
              v1->m_fTargetYawWeight = v3;
          }
          else
          {
            v1->m_fTargetYawWeight = v4;
          }
          v6 = v1->m_fTargetYawWeight;
          v2->m_fSeqWeight = v6;
          if ( v6 < v3 )
            v2->m_fSeqWeight = v3;
          v7 = v1->m_pkRightSeq;
          v8 = 1.0 - v1->m_fTargetYawWeight;
          v7->m_fSeqWeight = v8;
          if ( v8 < v3 )
            v7->m_fSeqWeight = v3;
        }
      }
    }
    v9 = v1->m_pkUpSeq;
    if ( v9 )
    {
      if ( v1->m_pkDownSeq )
      {
        fWeightDiffb = v9->m_fSeqWeight;
        if ( fWeightDiffb != v1->m_fTargetPitchWeight )
        {
          v10 = 0.5;
          if ( v1->m_fTargetPitchWeight <= 0.5 )
          {
            if ( v3 > v1->m_fTargetPitchWeight )
              v1->m_fTargetPitchWeight = v3;
            v10 = 0.5;
          }
          else
          {
            v1->m_fTargetPitchWeight = 0.5;
          }
          fWeightDiffc = v1->m_fTargetPitchWeight - fWeightDiffb;
          v11 = fabs(fWeightDiffc);
          if ( v11 < 0.0099999998 )
            fWeightDiffc = v3;
          v17 = 0.006000000052154064 * fWeightDiffc + v1->m_fTargetPitchWeight;
          v1->m_fTargetPitchWeight = v17;
          if ( v17 <= v10 )
          {
            v12 = v3;
            if ( v3 > v17 )
              v1->m_fTargetPitchWeight = v3;
          }
          else
          {
            v12 = v3;
            v1->m_fTargetPitchWeight = v10;
          }
          v13 = v1->m_fTargetPitchWeight;
          v9->m_fSeqWeight = v13;
          if ( v13 < v12 )
            v9->m_fSeqWeight = v12;
          v14 = v1->m_pkDownSeq;
          v15 = 0.5 - v1->m_fTargetPitchWeight;
          v14->m_fSeqWeight = v15;
          if ( v15 < v12 )
            v14->m_fSeqWeight = v12;
        }
      }
    }
  }
}

//----- (00645A40) --------------------------------------------------------
bool __thiscall Char::IsActFlagCapture(Char *this)
{
  ActionInfo *v1; // eax@1
  bool result; // al@3

  v1 = this->m_kActionMgr.m_pkCurPlayActInfo;
  if ( v1 )
  {
    if ( strcmp(v1->ActionName, "ActionFlag") )
      result = 0;
    else
      result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00645A90) --------------------------------------------------------
bool __thiscall Char::IsActRunning(Char *this)
{
  ActionInfo *v1; // eax@1
  const char *v2; // esi@2

  v1 = this->m_kActionMgr.m_pkCurPlayActInfo;
  return v1
      && ((v2 = v1->ActionName, !strcmp(v1->ActionName, "Run_Bow"))
       || !strcmp(v2, "Run_CBow")
       || !strcmp(v2, "Run_Non")
       || !strcmp(v2, "Run_Sp-Ham")
       || !strcmp(v2, "Run_One")
       || !strcmp(v2, "Run_Two")
       || !strcmp(v2, "Run_TwoHandAxe")
       || !strcmp(v2, "Run_TwoS")
       || !strcmp(v2, "Run_1Claw")
       || !strcmp(v2, "Run_1DSWord"));
}

//----- (00645CC0) --------------------------------------------------------
unsigned int __thiscall Char::GetSpecialEventCode(Char *this)
{
  ActionInfoSet *v1; // ecx@1
  ActionInfo *v2; // eax@2
  unsigned int result; // eax@3

  v1 = this->m_kActionMgr.m_pkActInfoSet;
  if ( v1 && (v2 = ActionInfoSet::GetByInxName(v1, "JumpStand_JumpStart")) != 0 )
    result = v2->uiEventCode;
  else
    result = 0;
  return result;
}

//----- (00645CF0) --------------------------------------------------------
CharAniType __thiscall Char::GetCharAniType(Char *this, AniEventCode::Code1 eCode1, AniEventCode::Code2 eCode2)
{
  CharAniType result; // eax@6

  if ( (signed int)eCode1 > 400000 )
  {
    if ( eCode1 == 500000 )
    {
      result = 8;
    }
    else
    {
      if ( eCode1 != 600000 )
        return 0;
      result = 9;
    }
  }
  else
  {
    if ( eCode1 != 400000 )
    {
      if ( eCode1 == 100000 )
        return 1;
      if ( eCode1 == 200000 )
        return Char::GetMoveCharAniType(this, eCode2);
      if ( eCode1 == 300000 )
        return 5;
      return 0;
    }
    if ( eCode2 == 1000 )
      result = 7;
    else
      result = ((eCode2 != 2000) - 1) & 6;
  }
  return result;
}

//----- (00645D80) --------------------------------------------------------
unsigned int __thiscall Char::Get3thAniEventCode(Char *this, unsigned int eAniCode1, unsigned int eAniCode2)
{
  Char *v3; // edi@1
  bool v5; // zf@10
  unsigned int uiEventCode; // [sp+4h] [bp-4h]@3

  v3 = this;
  if ( !Char::GetClass(this) )
    return 0;
  uiEventCode = 0;
  if ( eAniCode1 > 0x7A120 )
  {
    if ( eAniCode1 > 0xC3500 )
    {
      v5 = eAniCode1 == 900000;
      goto LABEL_18;
    }
    if ( eAniCode1 != 800000 )
    {
      if ( eAniCode1 != 600000 && eAniCode1 != 700000 )
        goto LABEL_20;
      if ( eAniCode2 != 9000 )
      {
        uiEventCode = CharShape::Get3thAniEventCodeByWeapon(&v3->m_kCharShape);
        goto LABEL_20;
      }
    }
LABEL_19:
    uiEventCode = 0;
    goto LABEL_20;
  }
  if ( eAniCode1 == 500000 )
    goto LABEL_19;
  if ( eAniCode1 <= 0x493E0 )
  {
    if ( eAniCode1 == 300000 || eAniCode1 == 100000 || eAniCode1 == 200000 )
      uiEventCode = CharShape::Get3thAniEventCodeByWeapon(&v3->m_kCharShape);
    goto LABEL_20;
  }
  v5 = eAniCode1 == 400000;
LABEL_18:
  if ( v5 )
    goto LABEL_19;
LABEL_20:
  if ( v3->m_bPolymorph )
    uiEventCode = 0;
  Char::CheckExceptional3rdCode(v3, eAniCode1, eAniCode2, &uiEventCode);
  return uiEventCode;
}

//----- (00645E50) --------------------------------------------------------
bool __thiscall Char::ActJump(Char *this)
{
  Char *v1; // esi@1
  bool result; // al@6
  float v3; // ST14_4@10
  int v4; // eax@10
  _BYTE v5[12]; // ST04_12@10

  v1 = this;
  if ( AbStateInfectee::FindNomalAbstate(&this->baseclass_0, STA_PARALYSIS)
    || AbStateInfectee::IsInList(&v1->baseclass_0, SAA_STOPANI) )
    return 1;
  if ( (unsigned __int8)((int (__thiscall *)(Char *))v1->baseclass_0.vfptr[15].SetAbStateProperty)(v1) )
  {
    if ( v1->m_kRidePetCtl.m_spPetActor.m_pObject )
    {
      CRidePetCtl::SpecialAction(&v1->m_kRidePetCtl);
      return 1;
    }
    if ( !v1->m_pkMover || v1->m_uiMoverSlot )
      return 1;
    ((void (*)(void))v1->m_pkMover->baseclass_0.baseclass_0.vfptr[11].Deaffect)();
    result = 1;
  }
  else
  {
    ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[13].SetAbStateProperty)(v1);
    ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
    v3 = Timer::ms_fCurTime;
    v4 = ((int (__thiscall *)(Char *))v1->baseclass_0.vfptr[6].Deaffect)(v1);
    *(_DWORD *)v5 = *(_DWORD *)v4;
    *(_QWORD *)&v5[4] = *(_QWORD *)(v4 + 4);
    result = JumpProcessor::Jump(&v1->m_kJumpProcessor, v3, *(NiPoint3 *)v5);
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00645F20) --------------------------------------------------------
void __thiscall Char::ResetAction(Char *this)
{
  Char *v1; // edi@1
  NiActorManager *v2; // ST00_4@1

  v1 = this;
  v2 = this->m_kActionMgr.m_pActor;
  this->m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&this->m_kActionMgr.baseclass_0, v2, 0);
  *(_WORD *)&v1->m_kActionMgr.m_abActionEff[0] = 0;
  v1->m_kActionMgr.m_abActionEff[2] = 0;
  *(_WORD *)&v1->m_kActionMgr.m_abActionSnd[0] = 0;
  v1->m_bActionHit = 0;
}

//----- (00645F70) --------------------------------------------------------
void __thiscall Char::ResetSkillAction(Char *this)
{
  Char *v1; // esi@1
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@2
  NiVBSet *val; // [sp+8h] [bp-4h]@4

  v1 = this;
  v2 = this->m_uiLayerAniCode[1];
  if ( v2 != NiActorManager::INVALID_EVENT_CODE )
  {
    v3 = 10000 * v2 / 0x2710;
    if ( v3 == 600000 || v3 == 700000 )
    {
      if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
             (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v1->m_spActor.m_pObject->m_kSequenceMap,
             v2,
             &val)
        && val
        && val[1].m_uiFlags == 1 )
      {
        NiActorManager::DeactivateSequence(v1->m_spActor.m_pObject, v1->m_uiLayerAniCode[1], 0.0);
        v1->m_uiLayerAniCode[1] = NiActorManager::INVALID_EVENT_CODE;
      }
    }
    Char::UpdateWeaponEquipState(v1);
    Char::UpdateActbyEquip(v1);
  }
  v1->m_uiSkillActStep = 0;
  v1->m_kActionMgr.m_pkCurPlaySkillViewInfo = 0;
  v1->m_bReserveSkillSmash = 0;
  Char::ResetSkillTargetGroundPoint(v1);
}

//----- (00646030) --------------------------------------------------------
bool __thiscall Char::ActAction(Char *this, char *pcActInxName, eActionWeight eActWeight)
{
  Char *v3; // esi@1
  NiActorManager *v5; // ST08_4@3
  ItemInfo *v6; // eax@3
  ActionInfoSet *v7; // ebx@3
  ActionInfoSet *v8; // ecx@5
  bool v9; // al@8
  ActionInfo *v10; // ebx@11
  ActionInfoSet *v11; // ecx@13
  ActionInfo *v12; // eax@14
  AbStateInfecteeVtbl *v13; // eax@19
  char *v14; // [sp+4h] [bp-1Ch]@6
  ItemInfo *v15; // [sp+8h] [bp-18h]@6
  bool v16; // [sp+Ch] [bp-14h]@6
  ItemInfo *pkItemInfo; // [sp+1Ch] [bp-4h]@3

  v3 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() == 1 )
    return 0;
  v5 = v3->m_kActionMgr.m_pActor;
  v3->m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&v3->m_kActionMgr.baseclass_0, v5, 0);
  *(_WORD *)&v3->m_kActionMgr.m_abActionEff[0] = 0;
  v3->m_kActionMgr.m_abActionEff[2] = 0;
  *(_WORD *)&v3->m_kActionMgr.m_abActionSnd[0] = 0;
  v3->m_bActionHit = 0;
  v6 = Char::GetEquippedWeaponItemInfo(v3);
  v7 = v3->m_kActionMgr.m_pkActInfoSet;
  pkItemInfo = v6;
  if ( !v7 )
    return 0;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[20].SetAbStateProperty)(v3) )
  {
    v8 = v3->m_kActionMgr_Metamor.m_pkActInfoSet;
    if ( !v8 )
      return 0;
    v16 = 1;
    v15 = pkItemInfo;
    v14 = pcActInxName;
  }
  else
  {
    if ( v3->m_bUserCharacter || (v9 = Char::IsCharMob(v3)) != 0 )
      v9 = 1;
    v16 = v9;
    v15 = pkItemInfo;
    v14 = pcActInxName;
    v8 = v7;
  }
  v10 = ActionInfoSet::GetProperActionInfo(v8, v14, v15, v16);
  if ( !v10 )
    return 0;
  v11 = v3->m_kActionMgr.m_pkActInfoSet;
  if ( v11 )
  {
    v12 = ActionInfoSet::GetByEventCode(v11, v3->m_spActor.m_pObject->m_eTargetID);
    if ( v12 )
    {
      if ( v12->InxName[0] == 38 )
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v3);
    }
  }
  if ( strcmp(pcActInxName, "ActionCollect") )
  {
    v13 = v3->baseclass_0.vfptr;
    if ( eActWeight )
    {
      if ( !(unsigned __int8)v13[7].GetAbstateColor((AbStateInfectee *)v3) )
      {
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[8].Affect)(v3) == 1 )
          ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[11].Affect)(v3, 0.0);
      }
      ((void (__thiscall *)(_DWORD, _DWORD))v3->baseclass_0.vfptr[10].IsVisible)(v3, v10->uiEventCode);
    }
    else
    {
      v13[10].SetAbStateProperty((AbStateInfectee *)v3, (ABSTATEINDEX)v10->uiEventCode, 0, 0);
    }
  }
  else
  {
    v3->baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)v3, (ABSTATEINDEX)v10->uiEventCode, 0, 1);
  }
  ActionMgr::SetCurPlayActInfo(&v3->m_kActionMgr, v10);
  ActionMgr::SetActionStartTime(&v3->m_kActionMgr, Timer::ms_fCurTime);
  ActionMgr::CatchAEEff(&v3->m_kActionMgr, 1);
  return 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00646210) --------------------------------------------------------
bool __thiscall Char::ActNonWeightAction(Char *this, unsigned int dwAniCode)
{
  Char *v2; // edi@1
  NiActorManager *v3; // ST04_4@1
  bool result; // al@2

  v2 = this;
  v3 = this->m_kActionMgr.m_pActor;
  this->m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&this->m_kActionMgr.baseclass_0, v3, 0);
  *(_WORD *)&v2->m_kActionMgr.m_abActionEff[0] = 0;
  v2->m_kActionMgr.m_abActionEff[2] = 0;
  *(_WORD *)&v2->m_kActionMgr.m_abActionSnd[0] = 0;
  v2->m_bActionHit = 0;
  if ( v2->m_spActor.m_pObject )
  {
    v2->baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)v2, (ABSTATEINDEX)dwAniCode, 0, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00646280) --------------------------------------------------------
void __thiscall Char::UpdateAction(Char *this, float fTime)
{
  Char *v2; // esi@1
  ActiveSkillInfo *v3; // eax@2
  NiNode *v4; // eax@4
  NiControllerSequence *v5; // eax@7
  float v6; // ST20_4@8
  ActionInfo *v7; // eax@14
  unsigned int v8; // ebx@15
  ActionInfoSet *v9; // edi@20
  int v10; // edi@26
  int v11; // ebx@26
  int v12; // eax@28
  int v13; // edi@29
  NiControllerSequence *v14; // ebx@34
  bool v15; // dl@36
  NiAVObject *v16; // ecx@36
  NiAVObject *v17; // ecx@40
  Char *pkTargetChar; // [sp+10h] [bp-8h]@13
  float fLastTime; // [sp+14h] [bp-4h]@35

  v2 = this;
  if ( this->m_bSS_Hide == 1 )
  {
    v3 = Char::GetCurPlayActiiveSkillInfo(this);
    if ( !v3 || v3->SpecialIndexB != 67 )
    {
      v2->m_bCulledOld = v2->m_bCulled;
      v4 = v2->m_spScene.m_pObject;
      v2->m_bSS_Hide = 0;
      v2->m_bCulled = 0;
      v4->baseclass_0.m_uFlags &= 0xFFFEu;
      v2->m_kSkillID = -1;
    }
  }
  if ( v2->m_bDoorAnimation )
  {
    if ( v2->m_bIsDoor )
    {
      v5 = Char::GetNowSequence(v2);
      if ( v5 )
      {
        v6 = (v5->m_fEndKeyTime - v5->m_fBeginKeyTime) / v5->m_fFrequency;
        if ( v6 < (double)v5->m_fLastTime )
        {
          if ( v2->m_eDoorState )
            Char::CloseDoor(v2);
          else
            Char::OpenDoor(v2);
          v2->m_bDoorAnimation = 0;
        }
      }
    }
  }
  pkTargetChar = CharMgr::GetChar(&g_kCharMgr, v2->m_AttackTargetHandle);
  ((void (__thiscall *)(ActionMgr *, Char *))v2->m_kRidePetAction.baseclass_0.baseclass_0.vfptr[2].AnimDeactivated)(
    &v2->m_kRidePetAction,
    pkTargetChar);
  ((void (__thiscall *)(ActionMgr *, Char *))v2->m_kActionMgr.baseclass_0.baseclass_0.vfptr[2].AnimDeactivated)(
    &v2->m_kActionMgr,
    pkTargetChar);
  if ( (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 4 )
  {
    v8 = NiActorManager::INVALID_EVENT_CODE;
    if ( (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 4 )
      goto LABEL_45;
    if ( v2->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
      v8 = v2->m_uiLayerAniCode[1];
    if ( v8 == NiActorManager::INVALID_EVENT_CODE )
LABEL_45:
      v8 = v2->m_uiLayerAniCode[0];
    v9 = v2->m_kActionMgr.m_pkActInfoSet;
    if ( v9 )
      v7 = ActionInfoSet::GetByEventCode(v9, v8);
    else
      v7 = 0;
    v2->m_AttackTargetHandle = v2->m_kHandle;
  }
  else
  {
    v7 = v2->m_kActionMgr.m_pkCurPlayActInfo;
  }
  if ( v7 && v2->m_spActor.m_pObject )
  {
    v10 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    v11 = v2->m_kSkillID;
    if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                              + 16))(
                             ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                             v2->m_kSkillID)
      || (unsigned __int16)v11 > *(_WORD *)(v10 + 200)
      || (v12 = *(_DWORD *)(v10 + 196) + 4 * v11, !*(_DWORD *)v12)
      || (v13 = *(_DWORD *)v12) == 0
      || *(_DWORD *)(v13 + 539) != 67 )
    {
LABEL_41:
      if ( !pkTargetChar )
        v2->m_AttackTargetHandle = -1;
      return;
    }
    if ( -1 == v2->m_AttackTargetHandle )
      v2->m_AttackTargetHandle = v2->m_kHandle;
    if ( CharMgr::GetChar(&g_kCharMgr, v2->m_AttackTargetHandle) )
    {
      v14 = Char::GetNowSequence(v2);
      if ( PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID) )
      {
        fLastTime = v14->m_fLastScaledTime;
        if ( (double)*(unsigned int *)(v13 + 551) / 1000.0 <= fLastTime )
        {
          v15 = v2->m_bCulled;
          v16 = (NiAVObject *)v2->m_spScene.m_pObject;
          v2->m_bSS_Hide = 1;
          v2->m_bCulledOld = v15;
          v2->m_bCulled = 1;
          NiAVObject::SetAppCulled(v16, 1);
        }
        if ( (double)*(unsigned int *)(v13 + 543) / 1000.0 <= fLastTime )
          ((void (__thiscall *)(Char *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.vfptr[9].__vecDelDtor)(
            v2,
            v2->m_kTo.x,
            v2->m_kTo.y,
            v2->m_kSkillID);
        if ( (double)*(unsigned int *)(v13 + 559) / 1000.0 <= fLastTime )
        {
          v2->m_bCulledOld = v2->m_bCulled;
          v17 = (NiAVObject *)v2->m_spScene.m_pObject;
          v2->m_bSS_Hide = 0;
          v2->m_bCulled = 0;
          NiAVObject::SetAppCulled(v17, 0);
          v2->m_kSkillID = -1;
        }
        goto LABEL_41;
      }
    }
  }
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006465C0) --------------------------------------------------------
void __thiscall Char::ActGathering(Char *this, Char *pkTargetChar, unsigned __int16 id)
{
  Char *v3; // esi@1
  unsigned __int16 v4; // ax@5
  unsigned __int16 v5; // ax@7

  v3 = this;
  if ( pkTargetChar )
  {
    if ( pkTargetChar != this )
      ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[8].__vecDelDtor)(pkTargetChar);
    if ( v3->m_kTargetResourceHandle != -1 )
    {
      CharShape::UnEquip(&v3->m_kCharShape, 0xAu);
      CharShape::UnEquip(&v3->m_kCharShape, 0xCu);
      v4 = v3->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID;
      if ( v4 != -1 )
      {
        CharShape::Equip(&v3->m_kCharShape, v4, v3->m_kEquippedBackup.kCase1.byPrevRightHandUpgrade);
        v3->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = -1;
      }
      v5 = v3->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID;
      if ( v5 != -1 )
      {
        CharShape::Equip(&v3->m_kCharShape, v5, v3->m_kEquippedBackup.kCase1.byPrevLeftHandUpgrade);
        v3->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = -1;
      }
      if ( v3->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID != -1 )
      {
        CharShape::Equip(&v3->m_kCharShape, v3->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID);
        v3->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = -1;
      }
      if ( v3->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID != -1 )
      {
        CharShape::Equip(&v3->m_kCharShape, v3->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID);
        v3->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID = -1;
      }
    }
    v3->m_kEquippedBackup.kCase1.kPrevRightHandEquipItemID = CharShape::GetRightHandEquipppedItemID(
                                                               &v3->m_kCharShape,
                                                               &v3->m_kEquippedBackup.kCase1.byPrevRightHandUpgrade);
    v3->m_kEquippedBackup.kCase1.kPrevLeftHandEquipItemID = CharShape::GetLeftHandEquippedItemID(
                                                              &v3->m_kCharShape,
                                                              &v3->m_kEquippedBackup.kCase1.byPrevLeftHandUpgrade);
    v3->m_kEquippedBackup.kCase1.kPrevRightHandAccItemID = CharShape::GetRightHandAccItemID(&v3->m_kCharShape);
    v3->m_kEquippedBackup.kCase1.kPrevLeftHandAccItemID = CharShape::GetLeftHandAccItemID(&v3->m_kCharShape);
    v3->m_kEquippedBackup.kCase1.kPrevShieldAccItemID = CharShape::GetCosShieldItemID(&v3->m_kCharShape);
    v3->m_kEquippedBackup.iBackupCase = 1;
    *(_WORD *)&v3->m_kEquippedBackup.bUnEquipLeftHand = 257;
    CharShape::UnEquip(&v3->m_kCharShape, 0xAu);
    CharShape::UnEquip(&v3->m_kCharShape, 0xCu);
    *(_WORD *)&v3->m_kEquippedBackup.bUnEquipLeftHandAcc = 257;
    v3->m_kEquippedBackup.bUnEquipShieldAcc = 1;
    CharShape::UnEquip(&v3->m_kCharShape, 0xBu);
    CharShape::UnEquip(&v3->m_kCharShape, 0xDu);
    CharShape::Equip(&v3->m_kCharShape, id);
    CharShape::UnEquip(&v3->m_kCharShape, 0x1Du);
    Char::ActAction(v3, "ActionCollect", 0);
    ((void (__stdcall *)(_DWORD))v3->baseclass_54.vfptr->SetAnimationSpeed)(1.0);
    v3->m_kTargetResourceHandle = pkTargetChar->m_kHandle;
  }
}

//----- (006467E0) --------------------------------------------------------
void __thiscall Char::ActProducing(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  Char::ActAction(this, "ActionProduct", 0);
  ((void (__stdcall *)(_DWORD))v1->baseclass_54.vfptr->SetAnimationSpeed)(1.0);
}

//----- (00646810) --------------------------------------------------------
void __thiscall Char::ActItemCasting(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  Char::ActAction(this, ActionName::ITEM_CASTING, 0);
  ((void (__stdcall *)(_DWORD))v1->baseclass_54.vfptr->SetAnimationSpeed)(1.0);
}

//----- (00646840) --------------------------------------------------------
NiControllerSequence *__thiscall Char::GetSequence(Char *this, unsigned int uiAniEventCode)
{
  Char *v2; // esi@1
  NiControllerSequence *result; // eax@1
  unsigned int v4; // edi@2
  char v5; // ST04_1@5
  char v6; // al@5
  NiControllerSequence *v7; // eax@5
  bool v8; // al@7

  v2 = this;
  result = (NiControllerSequence *)this->m_spActor.m_pObject;
  if ( result )
  {
    v4 = uiAniEventCode;
    if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
           (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&result[1].m_uiArrayGrowBy,
           uiAniEventCode,
           (NiVBSet **)&uiAniEventCode)
      && uiAniEventCode
      || (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[20].SetAbStateProperty)(v2) )
      goto LABEL_7;
    LOBYTE(uiAniEventCode) = v2->m_kCharShape.m_byGender;
    v5 = uiAniEventCode;
    v6 = Char::GetClass(v2);
    v7 = CharResMgr::GetControllerSequence(&g_kCharResMgr, v6, v5, v4);
    if ( v7 )
    {
      NiActorManager::ChangeSequence(v2->m_spActor.m_pObject, v4, v7);
LABEL_7:
      v8 = NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
             (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_spActor.m_pObject->m_kSequenceMap,
             v4,
             (NiVBSet **)&uiAniEventCode);
      return (NiControllerSequence *)(v8 != 0 ? uiAniEventCode : 0);
    }
    result = 0;
  }
  return result;
}

//----- (006468E0) --------------------------------------------------------
bool __thiscall Char::ResetPosEmotion(Char *this, float fResetTime)
{
  Char *v2; // esi@1
  NiControllerSequence *v3; // edi@1
  bool result; // al@2
  void (__thiscall *v5)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@4
  unsigned int v6; // ST04_4@4

  v2 = this;
  v3 = Char::GetSequence(this, this->m_uiCurEmotionCode);
  if ( v3 && v2->m_spActor.m_pObject )
  {
    v5 = v2->baseclass_0.vfptr[10].SetAbStateProperty;
    v6 = v2->m_uiCurEmotionCode;
    v2->m_eEmotionState = 2;
    v5(&v2->baseclass_0, (ABSTATEINDEX)v6, 0, 0);
    ((void (__stdcall *)(_DWORD))v2->baseclass_54.vfptr->SetAnimationSpeed)(0.0);
    result = 1;
    v3->m_fOffset = fResetTime - v2->m_fAnimationUpdateTime;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00646950) --------------------------------------------------------
void __thiscall Char::CheckStateInNoMovement(Char *this)
{
  Char *v1; // esi@1
  unsigned int v2; // edi@14
  unsigned int v3; // edi@19
  bool v4; // zf@33
  unsigned int ui2ndBaseCode; // [sp+4h] [bp-8h]@21
  int ui1stBaseCode; // [sp+8h] [bp-4h]@22

  v1 = this;
  if ( Char::IsResource(this) )
    return;
  if ( byte_B30C4C == 7 )
  {
    if ( Char::IsCharNPC(v1) && (unsigned __int8)v1->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v1) )
      ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
  }
  else
  {
    if ( Char::IsCharNPC(v1) )
      return;
  }
  if ( Char::IsActGathering(v1)
    || Char::IsActProducing(v1)
    || Char::IsActItemCasting(v1)
    || Char::IsActFlagCapture(v1)
    || (unsigned __int8)v1->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v1)
    || !(unsigned __int8)((int (__thiscall *)(Char *))v1->baseclass_0.vfptr[8].Affect)(v1) )
    return;
  v2 = NiActorManager::INVALID_EVENT_CODE;
  if ( (int)v1->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v1) == 4 )
  {
    v3 = ui2ndBaseCode;
  }
  else
  {
    if ( v1->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
      v2 = v1->m_uiLayerAniCode[1];
    if ( v2 != NiActorManager::INVALID_EVENT_CODE
      || (v2 = v1->m_uiLayerAniCode[0], v2 != NiActorManager::INVALID_EVENT_CODE) )
      v3 = 10000 * v2 / 0x2710;
    else
      v3 = -1;
  }
  Char::GetAniCode(v1, 1, (unsigned int *)&ui1stBaseCode, &ui2ndBaseCode);
  if ( ui1stBaseCode == 500000 || v3 == 910000 )
    return;
  if ( ui1stBaseCode == 200000 )
  {
LABEL_40:
    ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
    return;
  }
  if ( ui1stBaseCode == 100000 )
  {
    if ( v3 == 600000 || v3 == 700000 )
      return;
    if ( ui2ndBaseCode != 3000 && ui2ndBaseCode != 4000 )
    {
      v4 = ui2ndBaseCode == 5000;
      goto LABEL_39;
    }
    goto LABEL_40;
  }
  if ( v3 == ui1stBaseCode
    && (unsigned __int8)v1->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v1)
    && !*(_DWORD *)&v1->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
    && !v1->m_eEmotionState
    && !v1->m_uiSkillActStep )
  {
    if ( !(unsigned __int8)((int (__thiscall *)(Char *))v1->baseclass_0.vfptr[1].Affect)(v1) )
      Char::UpdateWeaponEquipState(v1);
    v4 = Char::IsAbStateAction(v1) == 0;
LABEL_39:
    if ( !v4 )
      return;
    goto LABEL_40;
  }
}
// B30C4C: using guessed type char byte_B30C4C;

//----- (00646B20) --------------------------------------------------------
void __thiscall Char::ActFlagCapture(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  Char::ActAction(this, "ActionFlag", 0);
  ((void (__stdcall *)(_DWORD))v1->baseclass_54.vfptr->SetAnimationSpeed)(1.0);
}

//----- (00646B50) --------------------------------------------------------
bool __thiscall Char::ActBlendAction(Char *this, unsigned int uiBaseEventCode, unsigned int uiBlendEventCode)
{
  Char *v3; // esi@1
  NiActorManager *v4; // ST14_4@1
  bool result; // al@2
  NiControllerSequence *v6; // ebx@4
  unsigned int v7; // edi@6
  unsigned int v8; // eax@11
  unsigned int v9; // eax@17
  unsigned int v10; // [sp+8h] [bp-10h]@9
  float uiBaseEventCodea; // [sp+20h] [bp+8h]@22
  NiControllerSequence *pSequence2; // [sp+24h] [bp+Ch]@11

  v3 = this;
  v4 = this->m_kActionMgr.m_pActor;
  this->m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&this->m_kActionMgr.baseclass_0, v4, 0);
  *(_WORD *)&v3->m_kActionMgr.m_abActionEff[0] = 0;
  v3->m_kActionMgr.m_abActionEff[2] = 0;
  *(_WORD *)&v3->m_kActionMgr.m_abActionSnd[0] = 0;
  v3->m_bActionHit = 0;
  if ( !v3->m_spActor.m_pObject || v3->m_bWillDead )
  {
    result = 0;
  }
  else
  {
    v6 = Char::GetSequence(v3, uiBaseEventCode);
    if ( v6 )
    {
      v7 = uiBlendEventCode;
      if ( uiBlendEventCode && uiBlendEventCode != 1 && uiBlendEventCode != NiActorManager::INVALID_EVENT_CODE )
        v10 = uiBlendEventCode;
      else
        v10 = v3->m_uiLayerAniCode[1];
      pSequence2 = Char::GetSequence(v3, v10);
      v8 = v3->m_uiLayerAniCode[1];
      if ( v8 != NiActorManager::INVALID_EVENT_CODE )
        NiActorManager::DeactivateSequence(v3->m_spActor.m_pObject, v8, 0.0);
      if ( v7 )
      {
        if ( v7 == 1 )
          v3->m_uiLayerAniCode[1] = NiActorManager::INVALID_EVENT_CODE;
        else
          v3->m_uiLayerAniCode[1] = v7;
      }
      v9 = v3->m_uiLayerAniCode[1];
      if ( v9 != NiActorManager::INVALID_EVENT_CODE
        && NiActorManager::ActivateSequence(
             v3->m_spActor.m_pObject,
             v9,
             1,
             1,
             1.0,
             0.0,
             NiKFMTool::SYNC_SEQUENCE_ID_NONE) )
        pSequence2->m_fBeginKeyTime = 0.0;
      if ( uiBaseEventCode == v3->m_uiLayerAniCode[0] )
      {
        uiBaseEventCodea = (v6->m_fEndKeyTime - v6->m_fBeginKeyTime) / v6->m_fFrequency;
        if ( uiBaseEventCodea < (double)v6->m_fLastTime )
        {
          if ( v6->m_eCycleType )
            ((void (__stdcall *)(_DWORD))v3->baseclass_54.vfptr->SetAnimationOffset)(0.0);
        }
        result = 1;
      }
      else
      {
        v3->baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)v3, (ABSTATEINDEX)uiBaseEventCode, 0, 0);
        result = 1;
      }
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (00646CD0) --------------------------------------------------------
void __thiscall Char::SetDoorAnimation(Char *this, float fTime, Char::DoorState eState)
{
  Char *v3; // esi@1
  signed int v4; // eax@1
  bool v5; // al@3

  v3 = this;
  v4 = 20;
  this->m_eDoorState = eState;
  if ( eState == 1 )
    v4 = 30;
  v5 = ((int (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.vfptr[10].SetAbStateProperty)(v4 + 906000, 0, 0);
  v3->m_bDoorAnimation = v5;
  if ( v5 )
  {
    ActionMgr::SetActionStartTime(&v3->m_kActionMgr, fTime);
  }
  else
  {
    if ( eState == 1 )
      Char::CloseDoor(v3);
  }
}

//----- (00646D40) --------------------------------------------------------
unsigned int __thiscall Char::GetConditionAni(Char *this, CharAniType eType)
{
  MobInfo *v2; // edx@1
  unsigned int result; // eax@2

  v2 = this->m_pMobinfo;
  if ( v2 )
  {
    if ( eType && this->m_uiConditionAniLevel )
      result = MobConditionViewTab::GetEventCode(v2->InxName, eType, this->m_uiConditionAniLevel);
    else
      result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00646D80) --------------------------------------------------------
void __thiscall Char::GetoutOfPet(Char *this)
{
  Char *v1; // esi@1
  unsigned int v2; // eax@2
  RIDING *v3; // eax@2
  const char *v4; // eax@3
  ActionInfoSet *v5; // ecx@4
  unsigned int v6; // edi@4
  ActionInfo *v7; // eax@5
  NiActorManager *v8; // ecx@7
  NiActorManager *v9; // edi@9
  AbStateInfecteeVtbl *v10; // eax@14
  bool v11; // zf@14
  AbStateInfecteeVtbl *v12; // eax@14

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].SetAbStateProperty)() )
  {
    v2 = CharShape::GetRidePetID(&v1->m_kCharShape);
    v3 = RidePetTable::GetByID(v2);
    if ( v3 )
    {
      v4 = v3->BodyType;
      if ( v4 )
      {
        v5 = v1->m_kActionMgr.m_pkActInfoSet;
        v6 = 0;
        if ( v5 )
        {
          v7 = ActionInfoSet::GetByInxName(v5, v4);
          if ( v7 )
            v6 = v7->uiEventCode;
        }
        v8 = v1->m_spActor.m_pObject;
        if ( v8 )
          NiActorManager::DeactivateSequence(v8, v6, 0.0);
      }
    }
    v9 = v1->m_kRidePetCtl.m_spPetActor.m_pObject;
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount) && v9 )
        v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v1->m_kRidePetCtl.m_spPetActor.m_pObject = 0;
    }
    ((void (__thiscall *)(_DWORD))v1->m_kRidePetAction.baseclass_0.baseclass_0.vfptr[1].AnimDeactivated)(&v1->m_kRidePetAction);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v1->m_spCharNode.m_pObject,
      0);
    NiMatrix3::MakeRotation(&v1->m_spCharNode.m_pObject->baseclass_0.m_kLocal.m_Rotate, 0.0, 0.0, 0.0, 1.0);
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spCarrierNode.m_pObject->m_kChildren);
    v10 = v1->baseclass_0.vfptr;
    v1->m_fChairHeight = 0.0;
    v11 = (int)v10[7].GetAbstateColor((AbStateInfectee *)v1) == 0;
    v12 = v1->baseclass_0.vfptr;
    if ( !v11 )
      JUMPOUT(__CS__, v12[11].AddAbStateByAbstateIndex);
    JUMPOUT(__CS__, v12[10].DeleteAbStateByAbstateIndex);
  }
}

//----- (00646EA0) --------------------------------------------------------
void __thiscall Char::RidePet(Char *this, int _nID)
{
  Char *v2; // esi@1
  NiActorManager *v3; // edi@1
  int v4; // edi@6
  NiActorManager *v5; // eax@6
  NiActorManager *v6; // ebx@6
  NiRefObjectVtbl *v7; // edx@13
  NiActorManager *v8; // ecx@13
  void (__thiscall *v9)(NiActorManager::CallbackObject *, NiActorManager *, unsigned int, float, float); // eax@15
  ActionInfoSet *v10; // ecx@15
  unsigned int v11; // edi@15
  ActionInfo *v12; // eax@16
  NiAVObject *v13; // edi@18
  int v14; // eax@20
  int v15; // ebx@20
  NiNode *v16; // ecx@22
  CarToonShader *v17; // eax@22
  bool v18; // al@22
  CSpactralGlow_Shader_Controller *v19; // ecx@22
  NiActorManager *v20; // ecx@26
  bool v21; // zf@28
  AbStateInfecteeVtbl *v22; // eax@28
  void *v23; // edx@29
  bool v24; // [sp+2Ch] [bp-30h]@23
  NiActorManager *spPetActor; // [sp+48h] [bp-14h]@6
  void *v26; // [sp+4Ch] [bp-10h]@9

  v2 = this;
  v3 = this->m_kRidePetCtl.m_spPetActor.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_kRidePetCtl.m_spPetActor.m_pObject = 0;
  }
  ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v2->m_spCharNode.m_pObject,
    0);
  NiMatrix3::MakeRotation(&v2->m_spCharNode.m_pObject->baseclass_0.m_kLocal.m_Rotate, 0.0, 0.0, 0.0, 1.0);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_spCarrierNode.m_pObject->m_kChildren);
  v4 = _nID;
  v2->m_fChairHeight = 0.0;
  v5 = CharResMgr::GetRidePetActor(&g_kCharResMgr, v4);
  v6 = v5;
  spPetActor = v5;
  if ( v5 )
    InterlockedIncrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount);
  _nID = 0;
  if ( ITableBase<RIDING_RidePetTable>::GetTotal() )
  {
    while ( 1 )
    {
      v26 = CDataReader::GetRecord((CDataReader *)(ITableBase<RIDING_RidePetTable>::ms_pkTable + 4), _nID);
      if ( *(_WORD *)v26 == v4 )
        break;
      ++_nID;
      if ( _nID >= ITableBase<RIDING_RidePetTable>::GetTotal() )
        goto LABEL_11;
    }
    if ( v6 )
    {
      v9 = v2->m_kRidePetAction.baseclass_0.baseclass_0.vfptr[1].AnimDeactivated;
      v2->m_kRidePetCtl.m_pkActionMgr = &v2->m_kRidePetAction;
      ((void (__stdcall *)(_DWORD))v9)(v6);
      v2->m_kRidePetAction.m_bUseActorSequence = 1;
      CharShape::SetRidePetID(&v2->m_kCharShape, v4);
      v2->m_kRidePetCtl.m_uiID = v4;
      NiD3DShaderLibrary::SetShaderLibraryDesc((NiD3DShaderLibrary *)&v2->m_kRidePetCtl, (NiShaderLibraryDesc *)v6);
      v2->m_kRidePetCtl.m_uiRunEventCode = 202000;
      v2->m_kRidePetCtl.m_uiWalkEventCode = 201000;
      v2->m_kRidePetCtl.m_uiStandEventCode = 101000;
      v10 = v2->m_kActionMgr.m_pkActInfoSet;
      v11 = 0;
      if ( v10 )
      {
        v12 = ActionInfoSet::GetByInxName(v10, "JumpStand_JumpStart");
        if ( v12 )
          v11 = v12->uiEventCode;
      }
      v2->m_kRidePetCtl.m_uiSpecialEventCode = v11;
      v13 = v6->m_spNIFRoot.m_pObject;
      if ( v13 )
        InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiMatrix3::MakeRotation(&v13->m_kLocal.m_Rotate, NI_PI, 0.0, 0.0, 1.0);
      v14 = (int)v13->baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                   (NiRefObject *)v13,
                   (unsigned int)"#Chair");
      v15 = v14;
      if ( v14 )
        InterlockedIncrement((volatile LONG *)(v14 + 4));
      NiAVObject::Update(v13, 0.0, 1);
      v16 = v2->m_spCharNode.m_pObject;
      v2->m_fChairHeight = *(float *)(v15 + 148);
      NiMatrix3::MakeRotation(&v16->baseclass_0.m_kLocal.m_Rotate, NI_PI, 0.0, 0.0, 1.0);
      v17 = CarToonShader::GetInstance();
      CarToonShader::SetCartoonShader(v17, (NiNode *)v13);
      CSpactralGlow_Shader_Controller::SetTarget(&v2->m_kRidePetCtl.m_kShaderCtrl, (NiNode *)v13);
      v18 = AbStateInfectee::FindNomalAbstate(&v2->baseclass_0, STA_GTIHIDE);
      v19 = &v2->m_kRidePetCtl.m_kShaderCtrl;
      if ( v18 )
      {
        CSpactralGlow_Shader_Controller::SetUseShaderName(v19, "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow");
        v24 = 1;
        v19 = &v2->m_kRidePetCtl.m_kShaderCtrl;
      }
      else
      {
        v24 = 0;
      }
      CSpactralGlow_Shader_Controller::SetEnable(v19, v24);
      ((void (__stdcall *)(_DWORD, _DWORD))v2->m_spCarrierNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v13,
        0);
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v15 + 116))(v15, v2->m_spCharNode.m_pObject, 0);
      NiAVObject::UpdateEffects(v13);
      NiAVObject::UpdateProperties(v13);
      if ( v26 != (void *)-66 )
      {
        _nID = 0;
        ActionMgr::GetEventCode(&v2->m_kActionMgr, (const char *)v26 + 66, (unsigned int *)&_nID);
        Char::GetSequence(v2, _nID);
        v20 = v2->m_spActor.m_pObject;
        if ( v20 )
          NiActorManager::ActivateSequence(v20, _nID, 1, 0, 1.0, 0.0, NiKFMTool::SYNC_SEQUENCE_ID_NONE);
      }
      v21 = (int)v2->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v2) == 0;
      v22 = v2->baseclass_0.vfptr;
      if ( v21 )
        v23 = v22[10].DeleteAbStateByAbstateIndex;
      else
        v23 = v22[11].AddAbStateByAbstateIndex;
      ((void (__thiscall *)(_DWORD))v23)(v2);
      if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
      if ( !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v13->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
      if ( !InterlockedDecrement((volatile LONG *)&spPetActor->baseclass_0.m_uiRefCount) )
      {
        v7 = spPetActor->baseclass_0.vfptr;
        v8 = spPetActor;
        goto LABEL_37;
      }
    }
  }
  else
  {
LABEL_11:
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
    {
      v7 = v6->baseclass_0.vfptr;
      v8 = v6;
LABEL_37:
      v7->__vecDelDtor(v8, 1);
      return;
    }
  }
}
// A97F38: using guessed type int ITableBase_RIDING_RidePetTable___ms_pkTable;
// B6DE8C: using guessed type const float NI_PI;

//----- (00647260) --------------------------------------------------------
void __thiscall Char::Move(Char *this, NiPoint3 *kTargetPos, bool bChangeMode, NiPoint3 *kForceDir, bool bSkillCancel)
{
  Char *v5; // esi@1
  unsigned __int16 *v6; // eax@1
  NiPoint3 *v7; // ebx@5
  NiPoint3 *v8; // ebx@6
  NiPoint3 *v9; // eax@9
  double v10; // st7@9
  int v11; // eax@10
  NiPoint3 result; // [sp+8h] [bp-30h]@9
  NiPoint3 kCurPos; // [sp+14h] [bp-24h]@5
  float v14; // [sp+20h] [bp-18h]@5
  float v15; // [sp+24h] [bp-14h]@5
  float v16; // [sp+28h] [bp-10h]@5
  NiPoint3 pos3Dir; // [sp+2Ch] [bp-Ch]@9

  v5 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  Char::SetAniMationStop(v5, 0);
  v6 = (unsigned __int16 *)v5->m_kActionMgr.m_pkCurPlaySkillViewInfo;
  if ( v6 && !Skill::IsMovingSkill(*v6) && bSkillCancel == 1 )
  {
    AttackSequenceManager::ApplicateSkillSeqImmediately(&v5->baseclass_54, v5, 1, 0);
    Char::ResetSkillAction(v5);
    Char::ResetAction(v5);
  }
  ((void (__thiscall *)(Char *, NiPoint3 *))v5->baseclass_0.vfptr[6].SetAbStateProperty)(v5, &kCurPos);
  v7 = kTargetPos;
  v14 = kCurPos.x - kTargetPos->x;
  v15 = kCurPos.y - kTargetPos->y;
  v16 = kCurPos.z - kTargetPos->z;
  *(float *)&kTargetPos = v15 * v15 + v14 * v14 + v16 * v16;
  *(float *)&kTargetPos = sqrt(*(float *)&kTargetPos);
  if ( *(float *)&kTargetPos >= 1.0 )
  {
    v5->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos(
      (NpNs_MoveToTarget *)&v5->m_kMoveToTarget,
      &kCurPos);
    v5->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->StartMove((NpNs_MoveToTarget *)&v5->m_kMoveToTarget, v7);
    v8 = kForceDir;
    if ( Char::INVALIDPOINT3.r == kForceDir->x
      && Char::INVALIDPOINT3.g == kForceDir->y
      && Char::INVALIDPOINT3.b == kForceDir->z )
    {
      v11 = (int)v5->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetMoveDir((NpNs_MoveToTarget *)&v5->m_kMoveToTarget);
      LODWORD(pos3Dir.x) = *(_DWORD *)v11;
      LODWORD(pos3Dir.y) = *(_DWORD *)(v11 + 4);
    }
    else
    {
      v9 = Char::GetDirToPosition(v5, &result, kForceDir);
      v14 = v9->x * -1.0;
      v15 = v9->y * -1.0;
      v10 = -1.0 * v9->z;
      pos3Dir.x = v14;
      pos3Dir.y = v15;
      v16 = v10;
    }
    pos3Dir.z = 0.0;
    *(float *)&kTargetPos = pos3Dir.y * pos3Dir.y + pos3Dir.x * pos3Dir.x + 0.0 * 0.0;
    if ( *(float *)&kTargetPos > 0.0099999998 )
      NpNs_SmoothRotateControler::SetTargetDirection(&v5->m_kSmoothRotater, &pos3Dir);
    Char::GetAniCode(v5, 0, (unsigned int *)&kTargetPos, (unsigned int *)&kForceDir);
    if ( kTargetPos != (NiPoint3 *)200000 && kForceDir != (NiPoint3 *)200000 || bChangeMode )
    {
      if ( Char::INVALIDPOINT3.r == v8->x
        && Char::INVALIDPOINT3.g == v8->y
        && Char::INVALIDPOINT3.b == v8->z
        && !Char::IsAbStateAction(v5) )
      {
        if ( bSkillCancel == 1 )
          ((void (__thiscall *)(Char *))v5->baseclass_0.vfptr[11].AddAbStateByAbstateIndex)(v5);
      }
    }
  }
}

//----- (006474A0) --------------------------------------------------------
bool __thiscall Char::Move(Char *this, NiPoint3 *kTargetPos, float fCurTime, bool bChangeMode, NiPoint3 *kForceDir, bool bSkillCancel)
{
  Char *v6; // esi@1
  bool v7; // al@2
  unsigned __int16 *v8; // eax@3
  NiPoint3 *v9; // ebx@7
  NiPoint3 *v10; // ebx@9
  NiPoint3 *v11; // eax@10
  double v12; // st7@10
  int v13; // eax@11
  NiPoint3 result; // [sp+4h] [bp-30h]@10
  NiPoint3 kCurPos; // [sp+10h] [bp-24h]@7
  float v16; // [sp+1Ch] [bp-18h]@7
  float v17; // [sp+20h] [bp-14h]@7
  float v18; // [sp+24h] [bp-10h]@7
  NiPoint3 pos3Dir; // [sp+28h] [bp-Ch]@10

  v6 = this;
  if ( DirectionControllers::IsRunDirection(this->m_spDirectionCtrls.m_pObject) )
  {
    v7 = 0;
  }
  else
  {
    v8 = (unsigned __int16 *)v6->m_kActionMgr.m_pkCurPlaySkillViewInfo;
    if ( v8 && !Skill::IsMovingSkill(*v8) && bSkillCancel == 1 )
    {
      AttackSequenceManager::ApplicateSkillSeqImmediately(&v6->baseclass_54, v6, 1, 0);
      Char::ResetSkillAction(v6);
      Char::ResetAction(v6);
    }
    ((void (__thiscall *)(Char *, NiPoint3 *))v6->baseclass_0.vfptr[6].SetAbStateProperty)(v6, &kCurPos);
    v9 = kTargetPos;
    v16 = kCurPos.x - kTargetPos->x;
    v17 = kCurPos.y - kTargetPos->y;
    v18 = kCurPos.z - kTargetPos->z;
    *(float *)&kTargetPos = v17 * v17 + v16 * v16 + v18 * v18;
    *(float *)&kTargetPos = sqrt(*(float *)&kTargetPos);
    if ( *(float *)&kTargetPos >= 1.0 )
    {
      v6->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos(
        (NpNs_MoveToTarget *)&v6->m_kMoveToTarget,
        &kCurPos);
      v6->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->StartMove((NpNs_MoveToTarget *)&v6->m_kMoveToTarget, v9);
      v10 = kForceDir;
      if ( NiColor::operator__((NiColor *)kForceDir, &Char::INVALIDPOINT3) )
      {
        v11 = Char::GetDirToPosition(v6, &result, v10);
        v16 = v11->x * -1.0;
        v17 = v11->y * -1.0;
        v12 = -1.0 * v11->z;
        pos3Dir.x = v16;
        pos3Dir.y = v17;
        v18 = v12;
      }
      else
      {
        v13 = (int)v6->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetMoveDir((NpNs_MoveToTarget *)&v6->m_kMoveToTarget);
        LODWORD(pos3Dir.x) = *(_DWORD *)v13;
        LODWORD(pos3Dir.y) = *(_DWORD *)(v13 + 4);
      }
      pos3Dir.z = 0.0;
      *(float *)&kTargetPos = pos3Dir.y * pos3Dir.y + pos3Dir.x * pos3Dir.x + 0.0 * 0.0;
      if ( *(float *)&kTargetPos > 0.0099999998 )
        NpNs_SmoothRotateControler::SetTargetDirection(&v6->m_kSmoothRotater, &pos3Dir);
      Char::GetAniCode(v6, 0, (unsigned int *)&kTargetPos, (unsigned int *)&kForceDir);
      if ( kTargetPos != (NiPoint3 *)200000 && kForceDir != (NiPoint3 *)200000 || bChangeMode )
      {
        if ( Char::INVALIDPOINT3.r == v10->x
          && Char::INVALIDPOINT3.g == v10->y
          && Char::INVALIDPOINT3.b == v10->z
          && !Char::IsAbStateAction(v6) )
        {
          if ( bSkillCancel == 1 )
            ((void (__thiscall *)(Char *))v6->baseclass_0.vfptr[11].AddAbStateByAbstateIndex)(v6);
        }
      }
      v7 = 1;
    }
    else
    {
      v7 = 0;
    }
  }
  return v7;
}

//----- (006476C0) --------------------------------------------------------
bool __thiscall Char::IsAnimationEnd(Char *this)
{
  Char *v1; // esi@1
  NiActorManager *v2; // eax@1
  bool result; // al@2
  unsigned int v4; // ebx@3
  unsigned int v5; // edi@3
  NiControllerSequence *v6; // eax@12

  v1 = this;
  v2 = this->m_spActor.m_pObject;
  if ( v2 )
  {
    v4 = v2->m_eCurID;
    v5 = NiActorManager::INVALID_EVENT_CODE;
    if ( ((int (*)(void))this->baseclass_0.vfptr[13].GetAbstateColor)() != 4 )
    {
      if ( v1->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
        v5 = v1->m_uiLayerAniCode[1];
      if ( v5 != NiActorManager::INVALID_EVENT_CODE )
        goto LABEL_19;
    }
    v5 = v1->m_uiLayerAniCode[0];
    if ( v5 != NiActorManager::INVALID_EVENT_CODE )
    {
LABEL_19:
      if ( v4 != v5 )
        v4 = v5;
    }
    result = v4 == NiActorManager::INVALID_EVENT_CODE
          || v4 == NiActorManager::ANY_EVENT_CODE
          || (v6 = Char::GetSequence(v1, v4)) == 0
          || v6->m_eState == 1 && v6->m_fEndKeyTime <= (double)v6->m_fLastTime;
  }
  else
  {
    result = 1;
  }
  return result;
}
// 9EEF08: using guessed type const unsigned int NiActorManager__ANY_EVENT_CODE;

//----- (00647750) --------------------------------------------------------
bool __thiscall Char::ResetSequence(Char *this, unsigned int dwAniEventCode)
{
  NiControllerSequence *v2; // eax@2

  if ( this->m_spActor.m_pObject )
  {
    v2 = Char::GetSequence(this, dwAniEventCode);
    if ( v2 )
      v2->m_fOffset = -3.4028235e38;
  }
  return 1;
}

//----- (00647780) --------------------------------------------------------
void __thiscall Char::ActSkillStand(Char *this, float fModifiedStartTime)
{
  Char *v2; // edi@1
  int v3; // edx@1
  ActiveSkillViewInfo *v4; // eax@1
  int v5; // ebx@2
  int v6; // esi@2
  int v7; // eax@4
  int v8; // esi@5
  int v9; // esi@10
  signed int v10; // esi@13
  NiControllerSequence *v11; // eax@14
  NiControllerSequence *v12; // ebx@17
  signed int v13; // esi@18
  NiControllerSequence *v14; // eax@19
  float v15; // ST14_4@22
  float v16; // ST14_4@24
  double v17; // st7@24
  float v18; // ST14_4@25
  double v19; // st7@25
  unsigned int uiTarget; // [sp+Ch] [bp-18h]@1
  float fBeginKeyTime; // [sp+10h] [bp-14h]@24
  int temp[3]; // [sp+14h] [bp-10h]@1
  unsigned int v23; // [sp+20h] [bp-4h]@1
  int v24; // [sp+24h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v2 = this;
  temp[0] = 103000;
  temp[1] = 104000;
  temp[2] = 105000;
  v3 = rand() % 3;
  v4 = v2->m_kActionMgr.m_pkCurPlaySkillViewInfo;
  uiTarget = temp[v3];
  if ( v4 )
  {
    v5 = v4->ID;
    v6 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            v4->ID) )
    {
      if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) )
      {
        v7 = *(_DWORD *)(v6 + 196) + 4 * v5;
        if ( *(_DWORD *)v7 )
        {
          v8 = *(_DWORD *)v7;
          if ( *(_DWORD *)v7 )
          {
            if ( *(_BYTE *)(v8 + 192) )
            {
              if ( *(_DWORD *)(v8 + 188) )
                uiTarget = 105000;
              else
                uiTarget = rand() % 2 != 0 ? 104000 : 103000;
            }
            v9 = *(_DWORD *)(v8 + 531);
            if ( v9 == 36 || v9 == 38 )
              uiTarget = 102000;
          }
        }
      }
    }
  }
  v10 = 0;
  do
  {
    v11 = Char::GetSequence(v2, temp[v10]);
    if ( v11 )
      v11->m_eCycleType = 2;
    ++v10;
  }
  while ( v10 < 3 );
  v12 = Char::GetSequence(v2, uiTarget);
  if ( v12 )
  {
    v13 = 0;
    while ( 1 )
    {
      v14 = Char::GetSequence(v2, temp[v13]);
      if ( v14 )
      {
        if ( v14->m_eState )
          break;
      }
      ++v13;
      if ( v13 >= 3 )
      {
        v15 = (v12->m_fEndKeyTime - v12->m_fBeginKeyTime) / v12->m_fFrequency;
        if ( fModifiedStartTime < (double)v15 )
        {
          v12->m_fOffset = -3.4028235e38;
          v12->m_fBeginKeyTime = 0.0;
          NiActorManager::SetTargetAnimation(v2->m_spActor.m_pObject, uiTarget);
          v2->m_uiLayerAniCode[0] = uiTarget;
        }
        else
        {
          if ( !v12->m_eState )
          {
            v12->m_fOffset = -3.4028235e38;
            v12->m_fBeginKeyTime = 0.0;
            v16 = (v12->m_fEndKeyTime - 0.0) / v12->m_fFrequency;
            v17 = v16;
            fBeginKeyTime = fModifiedStartTime - v16;
            if ( fBeginKeyTime <= v17 )
            {
              v19 = fBeginKeyTime;
            }
            else
            {
              v18 = fBeginKeyTime - v17;
              v19 = v18;
            }
            v12->m_fBeginKeyTime = v19;
            NiActorManager::SetTargetAnimation(v2->m_spActor.m_pObject, uiTarget);
          }
        }
        return;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00647990) --------------------------------------------------------
void __thiscall Char::ActInitStand(Char *this, bool bIsMob)
{
  Char *v2; // esi@1
  void (__thiscall *v3)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@2
  NiActorManager *v4; // ST04_4@5
  signed int v5; // ebx@6
  ActionInfo *v6; // eax@8
  unsigned int v7; // edx@9
  unsigned int v8; // edi@11
  AbStateInfecteeVtbl *v9; // eax@12
  NiControllerSequence *v10; // eax@13
  NiControllerSequence *v11; // eax@21

  v2 = this;
  if ( Char::IsResource(this) )
  {
    v3 = v2->baseclass_0.vfptr[10].SetAbStateProperty;
    if ( v2->m_byMode == 3 )
      v3(&v2->baseclass_0, STA_BLOODDMGDOWN, 0, 0);
    else
      v3(&v2->baseclass_0, STA_KINGSLIMEBLOODING, 0, 0);
  }
  else
  {
    v2->m_fAnimationSpeed = 1.0;
    ActionMgr::SetActionStartTime(&v2->m_kActionMgr, Timer::ms_fCurTime);
    v2->m_fAnimationUpdateTime = 0.0;
    v4 = v2->m_kActionMgr.m_pActor;
    v2->m_kActionMgr.m_pkCurPlayActInfo = 0;
    ActorCallBack::SetCurrentActionInfo(&v2->m_kActionMgr.baseclass_0, v4, 0);
    *(_WORD *)&v2->m_kActionMgr.m_abActionEff[0] = 0;
    v2->m_kActionMgr.m_abActionEff[2] = 0;
    *(_WORD *)&v2->m_kActionMgr.m_abActionSnd[0] = 0;
    v2->m_bActionHit = 0;
    if ( bIsMob )
      v5 = Char::IsNPC(v2) != 0 ? 1000 : 2000;
    else
      v5 = 1000;
    v6 = Char::GetActionInfo(v2, STAND, (AniEventCode::Code2)v5);
    v2->m_kActionMgr.m_pkCurPlayActInfo = v6;
    if ( v6 )
    {
      v7 = v6->uiEventCode;
      v2->m_kActionMgr.m_uiCurEventCode = v7;
      if ( 10000 * v7 / 0x2710 == 300000 )
        v2->m_kActionMgr.m_pkLastAttackActInfo = v6;
    }
    ActorCallBack::SetCurrentActionInfo(&v2->m_kActionMgr.baseclass_0, v2->m_kActionMgr.m_pActor, v6);
    v8 = ((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.vfptr[15].Deaffect)(v2, 100000, v5) + v5 + 100000;
    if ( v2->m_spActor.m_pObject )
    {
      v9 = v2->baseclass_0.vfptr;
      if ( v2->m_byMode == 3 )
      {
        ((void (__thiscall *)(_DWORD))v9[14].DeleteAbStateByAbstateIndex)(v2);
        v10 = Char::GetSequence(v2, v8);
        if ( v10 )
          NiActorManager::Update(v2->m_spActor.m_pObject, v10->m_fEndKeyTime);
      }
      else
      {
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v9[15].SetAbStateProperty)(v2) )
        {
          if ( v2->m_kRidePetCtl.m_spPetActor.m_pObject )
            ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[12].Affect)(v2);
        }
        else
        {
          if ( !(unsigned __int8)((int (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.vfptr[10].SetAbStateProperty)(
                                   v2,
                                   v8,
                                   0,
                                   0)
            && Char::IsCharNPC(v2) )
            v2->baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)v2, (ABSTATEINDEX)(v5 + 100000), 0, 0);
          v11 = Char::GetSequence(v2, v8);
          if ( v11 )
            v11->m_fOffset = (double)(rand() % 100) / 100.0 * v11->m_fEndKeyTime - v2->m_fAnimationUpdateTime;
        }
      }
    }
  }
}
// 647990: could not find valid save-restore pair for ebx
// 647990: could not find valid save-restore pair for edi
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00647BD0) --------------------------------------------------------
void __thiscall Char::UpdateAnimation(Char *this, float fTime)
{
  Char *v2; // esi@1
  Char *v3; // eax@3
  Char *v4; // eax@25
  Char *v5; // edi@25
  AbStateInfecteeVtbl *v6; // ebx@26
  float v7; // ST14_4@26
  EffectViewInfo *v8; // eax@26
  Char::MoveMode v9; // eax@31
  Char::MoveMode v10; // eax@36
  unsigned int puiSecondCode; // [sp+24h] [bp-4h]@15

  v2 = this;
  if ( this->m_spActor.m_pObject )
  {
    if ( this->m_AttackTargetHandle != -1 )
    {
      v3 = CharMgr::GetChar(&g_kCharMgr, this->m_AttackTargetHandle);
      if ( !v3 || !(unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].Deaffect)(v3) )
        v2->m_AttackTargetHandle = -1;
    }
    CharShape::Update(&v2->m_kCharShape, fTime);
    if ( Char::IsResource(v2) )
    {
      if ( v2->m_spActor.m_pObject->m_eTargetID == 100
        && (unsigned __int8)v2->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v2) )
        v2->baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)v2, STA_MOBMRPLUS, 0, 0);
      if ( v2->m_spActor.m_pObject->m_eTargetID == 300 )
      {
        if ( (unsigned __int8)v2->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v2) )
          v2->baseclass_0.vfptr[10].SetAbStateProperty((AbStateInfectee *)v2, STA_BLOODDMGDOWN, 0, 0);
      }
    }
    else
    {
      if ( Char::IsCharNPC(v2) )
        Char::UpdateNPCAction(v2, fTime);
      Char::GetAniCode(v2, 0, (unsigned int *)&fTime, &puiSecondCode);
      if ( (LODWORD(fTime) == 300000 || puiSecondCode == 300000)
        && v2->m_ReservedHitCharHandle != -1
        && (unsigned __int8)((int (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr[19].Affect)(v2, 0)
        && *(_DWORD *)&v2->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
        && v2->baseclass_54.vfptr->ApplicateAttackSeq(
             &v2->baseclass_54,
             v2->baseclass_54.m_kAttSeqList.baseclass_0.baseclass_0.m_pkHead->m_element,
             0) == 1 )
        ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr[19].Affect)(v2, 1);
      if ( Char::IsActGathering(v2) )
      {
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr[19].Affect)(v2, 1) )
        {
          if ( !v2->m_bWasHitTime )
          {
            v4 = CharMgr::GetChar(&g_kCharMgr, v2->m_kTargetResourceHandle);
            v5 = v4;
            if ( v4 )
            {
              v6 = v4->baseclass_0.vfptr;
              v7 = Timer::ms_fCurTime;
              v8 = ShakeEffectViewInfoTab::GetByID(0);
              ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v6[12].DeleteAbStateByAbstateIndex)(v5, v8, LODWORD(v7));
            }
          }
          v2->m_bWasHitTime = 1;
        }
        else
        {
          v2->m_bWasHitTime = 0;
        }
      }
      Char::DoOscillation(v2, OSC_MAX_NUM);
      if ( (unsigned __int8)v2->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v2) )
      {
        if ( v2->m_kRidePetCtl.m_spPetActor.m_pObject )
        {
          v9 = v2->m_eMoveMode;
          if ( v9 )
          {
            if ( v9 == 1 )
              CRidePetCtl::ActRun(&v2->m_kRidePetCtl);
          }
          else
          {
            CRidePetCtl::ActWalk(&v2->m_kRidePetCtl);
          }
        }
        else
        {
          if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v2) )
          {
            v10 = v2->m_eMoveMode;
            if ( v10 )
            {
              if ( v10 == 1 )
                v2->baseclass_0.vfptr[11].IsVisible((AbStateInfectee *)v2);
            }
            else
            {
              ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[11].SetAbStateProperty)(v2);
            }
          }
        }
      }
      else
      {
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v2)
          && v2->m_spActor.m_pObject->m_eCurID == 202000 )
        {
          ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
          NiActorManager::SetTargetAnimation(v2->m_spActor.m_pObject, 0x18A88u);
        }
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v2)
          && v2->m_spActor.m_pObject->m_eCurID == 201000 )
        {
          ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
          NiActorManager::SetTargetAnimation(v2->m_spActor.m_pObject, 0x18A88u);
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00647ED0) --------------------------------------------------------
void __thiscall Char::TryActDamage(Char *this, unsigned int uiDamage, bool bDotDmg)
{
  Char *v3; // esi@1
  EffectViewInfo *v4; // eax@5
  AbStateInfecteeVtbl *v5; // edx@7
  unsigned int v6; // ecx@9
  double v7; // st6@9
  unsigned int v8; // eax@11
  double v9; // st7@11
  float v10; // ST04_4@11
  AbStateInfectee::AbstateColor (__thiscall *v11)(AbStateInfectee *); // edx@11
  MobViewInfo *v12; // eax@12
  unsigned __int16 v13; // ax@13
  AbStateInfecteeVtbl *v14; // edi@14
  float v15; // ST0C_4@14
  EffectViewInfo *v16; // eax@14
  EffectViewInfo *v17; // eax@15
  AbStateInfecteeVtbl *v18; // edx@17
  unsigned int v19; // ecx@17
  double v20; // st6@17
  unsigned int v21; // eax@19
  double v22; // st7@19
  float v23; // ST04_4@19
  AbStateInfectee::AbstateColor (__thiscall *v24)(AbStateInfectee *); // edx@19
  float v25; // [sp+8h] [bp-14h]@9
  float v26; // [sp+8h] [bp-14h]@17
  EffectAxisEnum v27; // [sp+Ch] [bp-10h]@9
  EffectAxisEnum v28; // [sp+Ch] [bp-10h]@17
  unsigned __int16 v29; // [sp+10h] [bp-Ch]@3
  unsigned int puiSecondCode; // [sp+18h] [bp-4h]@21

  v3 = this;
  if ( this->m_bUserCharacter == 1 )
  {
    if ( this->m_kCharShape.m_byGender == 1 )
      v29 = 4;
    else
      v29 = 5;
    v4 = ShakeEffectViewInfoTab::GetByID(v29);
    if ( !v4 )
    {
      OutputDebugStringA("ShakeInfo Faile TryActDamage- with MainChar\n");
      return;
    }
    v5 = v3->baseclass_0.vfptr;
    if ( bDotDmg )
    {
      v27 = v4->Axis;
      v6 = v4->Period;
      *(float *)&bDotDmg = (double)v4->Damp * 0.009999999776482582;
      v25 = *(float *)&bDotDmg;
      v7 = (double)(signed int)v4->Period;
      if ( (v6 & 0x80000000u) != 0 )
        v7 = v7 + 4294967300.0;
      v8 = v4->Amplitude;
      *(float *)&bDotDmg = 0.009999999776482582 * v7;
      v9 = *(float *)&bDotDmg;
      *(_DWORD *)&bDotDmg = v8;
      v10 = v9;
      v11 = v5[12].GetAbstateColor;
      *(float *)&bDotDmg = (double)v8 * 0.002499999944120646;
      ((void (__thiscall *)(Char *, _DWORD, _DWORD, _DWORD, EffectAxisEnum, _DWORD))v11)(
        v3,
        bDotDmg,
        LODWORD(v10),
        LODWORD(v25),
        v27,
        LODWORD(Timer::ms_fCurTime));
    }
    else
    {
      ((void (__thiscall *)(Char *, EffectViewInfo *, _DWORD))v5[12].DeleteAbStateByAbstateIndex)(
        v3,
        v4,
        LODWORD(Timer::ms_fCurTime));
    }
  }
  else
  {
    v12 = this->m_pMobViewInfo;
    if ( v12 )
    {
      v13 = v12->EffectViewID;
      if ( bDotDmg )
      {
        v17 = ShakeEffectViewInfoTab::GetByID(v13);
        if ( !v17 )
        {
          OutputDebugStringA("ShakeInfo Faile TryActDamage- with Dot\n");
          return;
        }
        v18 = v3->baseclass_0.vfptr;
        v28 = v17->Axis;
        v19 = v17->Period;
        *(float *)&bDotDmg = (double)v17->Damp * 0.009999999776482582;
        v26 = *(float *)&bDotDmg;
        v20 = (double)(signed int)v17->Period;
        if ( (v19 & 0x80000000u) != 0 )
          v20 = v20 + 4294967300.0;
        v21 = v17->Amplitude;
        *(float *)&bDotDmg = 0.009999999776482582 * v20;
        v22 = *(float *)&bDotDmg;
        *(_DWORD *)&bDotDmg = v21;
        v23 = v22;
        v24 = v18[12].GetAbstateColor;
        *(float *)&bDotDmg = (double)v21 * 0.002499999944120646;
        ((void (__thiscall *)(Char *, _DWORD, _DWORD, _DWORD, EffectAxisEnum, _DWORD))v24)(
          v3,
          bDotDmg,
          LODWORD(v23),
          LODWORD(v26),
          v28,
          LODWORD(Timer::ms_fCurTime));
      }
      else
      {
        v14 = this->baseclass_0.vfptr;
        v15 = Timer::ms_fCurTime;
        v16 = ShakeEffectViewInfoTab::GetByID(v13);
        ((void (__thiscall *)(Char *, EffectViewInfo *, _DWORD))v14[12].DeleteAbStateByAbstateIndex)(
          v3,
          v16,
          LODWORD(v15));
      }
    }
    else
    {
      OutputDebugStringA("ShakeInfo Faile TryActDamage\n");
    }
  }
  Char::GetAniCode(v3, 0, (unsigned int *)&bDotDmg, &puiSecondCode);
  if ( bDotDmg == 100000 || puiSecondCode == 100000 )
  {
    if ( !(unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[15].SetAbStateProperty)(v3) )
      v3->baseclass_0.vfptr[12].IsVisible((AbStateInfectee *)v3);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006480E0) --------------------------------------------------------
void __thiscall Char::ActAction_BaseMode(Char *this, const char *pcActInxName)
{
  Char::ActAction(this, (char *)pcActInxName, 0);
}

//----- (00648100) --------------------------------------------------------
void __thiscall Char::UpdateEmotion(Char *this, float fTime)
{
  Char *v2; // esi@1
  Char::EmotionState v3; // eax@5
  NiControllerSequence *v4; // eax@7
  ActionViewInfo *v5; // eax@10
  AbStateInfecteeVtbl *v6; // edx@12
  unsigned int v7; // eax@12

  v2 = this;
  CharShape::ShowLinkNode(&this->m_kCharShape, LINK_RIGHTHAND, 1);
  CharShape::ShowLinkNode(&v2->m_kCharShape, LINK_LEFTHAND, 1);
  if ( JumpProcessor::IsJump(&v2->m_kJumpProcessor) )
    ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[13].SetAbStateProperty)(v2);
  if ( v2->m_eEmotionState )
  {
    CharShape::ShowLinkNode(&v2->m_kCharShape, LINK_RIGHTHAND, 0);
    CharShape::ShowLinkNode(&v2->m_kCharShape, LINK_LEFTHAND, 0);
    CharShape::ShowItemUpgradeEffect(&v2->m_kCharShape, 0);
    if ( v2->m_spActor.m_pObject )
    {
      v3 = v2->m_eEmotionState;
      if ( v3 != 2 )
      {
        if ( v3 != 4 )
        {
          v4 = Char::GetSequence(v2, v2->m_uiCurEmotionCode);
          if ( v4 )
          {
            if ( v2->m_spActor.m_pObject->m_eCurID == v2->m_spActor.m_pObject->m_eTargetID
              && v4->m_fEndKeyTime <= (double)v4->m_fLastTime )
            {
              v5 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(LOWORD(v2->m_uiEmotionIndex), 1);
              if ( v5 && v5->nAfterCode )
              {
                v6 = v2->baseclass_0.vfptr;
                v2->m_eEmotionState = 3;
                v7 = v5->nAfterCode;
                v2->m_uiCurEmotionCode = v7;
                v6[10].SetAbStateProperty((AbStateInfectee *)v2, (ABSTATEINDEX)v7, 0, 0);
              }
              else
              {
                ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[13].SetAbStateProperty)(v2);
                ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
              }
            }
          }
        }
      }
    }
  }
}

//----- (00648230) --------------------------------------------------------
float __thiscall Char::StopEmotion(Char *this)
{
  Char *v1; // esi@1
  double v2; // st7@2
  NiActorManager *v3; // eax@3
  void (__thiscall *v4)(AttackSequenceManager *, float); // eax@6
  NiControllerSequence *v5; // eax@6
  float result; // st7@8

  v1 = this;
  if ( this->m_eEmotionState != 4 )
  {
    v3 = this->m_spActor.m_pObject;
    if ( !v3 )
    {
      v2 = 3.4028235e38;
      goto ?StopEmotion@Char@@MAEMXZ;
    }
    if ( this->m_uiCurEmotionCode == v3->m_eCurID )
    {
      v4 = this->baseclass_54.vfptr->SetAnimationSpeed;
      this->m_eEmotionState = 2;
      ((void (__stdcall *)(_DWORD))v4)(0.0);
      v5 = Char::GetSequence(v1, v1->m_uiCurEmotionCode);
      if ( v5 )
      {
        v2 = v5->m_fLastTime;
        goto ?StopEmotion@Char@@MAEMXZ;
      }
    }
  }
  v2 = -3.4028235e38;
?StopEmotion@Char@@MAEMXZ:
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (006482A0) --------------------------------------------------------
bool __thiscall Char::ActAction(Char *this, AniEventCode::Code1 eCode1, AniEventCode::Code2 eCode2)
{
  int v3; // edi@0
  Char *v4; // esi@1
  bool result; // al@2
  ActionInfo *v6; // eax@5
  NiActorManager *v7; // ecx@5
  ActionInfo *v8; // edi@5
  unsigned int v9; // eax@6
  unsigned int v10; // edx@6
  unsigned int v11; // eax@9
  int v12; // eax@12
  int v13; // edi@12
  int v14; // ebx@12
  int v15; // eax@16
  int v16; // edi@19
  int v17; // ebx@19
  int v18; // edi@20
  int v19; // ecx@23
  WeaponAttrib *v20; // ebx@26
  WeaponTypeEnum v21; // eax@27
  WeaponTypeEnum v22; // edi@30
  int v23; // eax@34
  CharAniType v24; // eax@37
  unsigned int v25; // eax@37
  NiControllerSequence *v26; // eax@48
  unsigned int v27; // edx@52
  int v28; // [sp+1Ch] [bp-18h]@5
  ActionInfo *pkInfo; // [sp+28h] [bp-Ch]@5
  void *pkLeftInfo; // [sp+2Ch] [bp-8h]@12
  unsigned int uiFirst; // [sp+30h] [bp-4h]@12

  v4 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)() == 1 )
    return 0;
  if ( !(unsigned __int8)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)(v4) )
    Char::ResetAction(v4);
  v28 = v3;
  v6 = Char::GetActionInfo(v4, eCode1, eCode2);
  v7 = v4->m_spActor.m_pObject;
  v8 = v6;
  pkInfo = v6;
  if ( v7 )
  {
    v9 = v4->m_uiLayerAniCode[0];
    v10 = NiActorManager::INVALID_EVENT_CODE;
    if ( v9 != NiActorManager::INVALID_EVENT_CODE && v9 >= 0xC3500 && v9 < 0xDBBA0 )
    {
      v11 = v4->m_uiLayerAniCode[1];
      if ( v11 != NiActorManager::INVALID_EVENT_CODE )
      {
        NiActorManager::DeactivateSequence(v7, v11, 0.0);
        v10 = NiActorManager::INVALID_EVENT_CODE;
      }
      v4->m_uiLayerAniCode[1] = v10;
    }
    Char::GetAniCode(v4, 0, &uiFirst, (unsigned int *)&pkLeftInfo);
    v12 = eCode1
        + ((int (__thiscall *)(Char *, AniEventCode::Code1, AniEventCode::Code2, int))v4->baseclass_0.vfptr[15].Deaffect)(
            v4,
            eCode1,
            eCode2,
            v28);
    v13 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v14 = v4->m_kCharShape.m_kEquip.Equ_LeftHand;
    uiFirst = eCode2 + v12;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v14) )
    {
      if ( (unsigned __int16)v14 <= *(_WORD *)(v13 + 200) )
      {
        v15 = *(_DWORD *)(v13 + 196) + 4 * v14;
        if ( *(_DWORD *)v15 )
          pkLeftInfo = *(void **)v15;
        else
          pkLeftInfo = 0;
      }
      else
      {
        pkLeftInfo = 0;
      }
    }
    else
    {
      pkLeftInfo = 0;
    }
    v16 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v17 = v4->m_kCharShape.m_kEquip.Equ_RightHand;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v4->m_kCharShape.m_kEquip.Equ_RightHand) )
    {
      if ( (unsigned __int16)v17 <= *(_WORD *)(v16 + 200) )
      {
        v19 = *(_DWORD *)(v16 + 196);
        if ( *(_DWORD *)(v19 + 4 * v17) )
          v18 = *(_DWORD *)(v19 + 4 * v17);
        else
          v18 = 0;
      }
      else
      {
        v18 = 0;
      }
    }
    else
    {
      v18 = 0;
    }
    v20 = 0;
    if ( pkLeftInfo )
    {
      v21 = *((_DWORD *)pkLeftInfo + 58);
      if ( v21 != 15 )
        v20 = WeaponAttribTab::GetWeaponAttrib(v21);
    }
    if ( v18 )
    {
      v22 = *(_DWORD *)(v18 + 232);
      if ( v22 != 15 )
        v20 = WeaponAttribTab::GetWeaponAttrib(v22);
    }
    if ( eCode1 == 100000 )
    {
      if ( eCode2 == 1000 )
      {
        v23 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[11].DeleteAbStateByAbstateIndex)(v4);
        if ( v23 )
          uiFirst = v23;
      }
    }
    if ( v4->m_uiConditionAniLevel )
    {
      v24 = Char::GetCharAniType(v4, eCode1, eCode2);
      v25 = Char::GetConditionAni(v4, v24);
      if ( v25 )
        uiFirst = v25;
    }
    if ( v20 && v20->IsUsableInMoving && (eCode1 == 300000 || eCode1 == 600000 || eCode1 == 700000) )
    {
      result = v4->baseclass_0.vfptr[10].IsVisible((AbStateInfectee *)v4);
      if ( !result )
        return result;
    }
    else
    {
      result = ((int (__thiscall *)(Char *, unsigned int))v4->baseclass_0.vfptr[10].SetAbStateProperty)(v4, uiFirst);
      if ( !result )
        return result;
    }
    if ( v4->m_spActor.m_pObject )
    {
      v26 = Char::GetSequence(v4, uiFirst);
      if ( v26 )
        v26->m_fOffset = -3.4028235e38;
    }
    v8 = pkInfo;
  }
  if ( v8 )
  {
    v4->m_kActionMgr.m_pkCurPlayActInfo = v8;
    v27 = v8->uiEventCode;
    v4->m_kActionMgr.m_uiCurEventCode = v27;
    if ( 10000 * v27 / 0x2710 == 300000 )
      v4->m_kActionMgr.m_pkLastAttackActInfo = v8;
    ActorCallBack::SetCurrentActionInfo(&v4->m_kActionMgr.baseclass_0, v4->m_kActionMgr.m_pActor, v8);
  }
  ActionMgr::SetActionStartTime(&v4->m_kActionMgr, Timer::ms_fCurTime);
  return 1;
}
// 6482A0: could not find valid save-restore pair for ebx
// 6482A0: could not find valid save-restore pair for edi
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00648580) --------------------------------------------------------
void __thiscall Char::CancelSkillAction(Char *this, bool bMoveStop)
{
  Char *v2; // esi@1
  void *v3; // edx@4
  NiActorManager *v4; // ST00_4@7
  unsigned int v5; // edi@9
  NiControllerSequence *v6; // eax@14
  float fOffset; // [sp+14h] [bp+8h]@9

  v2 = this;
  if ( this->m_kActionMgr.m_pkCurPlaySkillViewInfo )
  {
    if ( this->baseclass_0.m_kAbStateProperty.iUnMovableCount
      || (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[7].GetAbstateColor)() != 1 )
      v3 = v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex;
    else
      v3 = v2->baseclass_0.vfptr[11].AddAbStateByAbstateIndex;
    ((void (__thiscall *)(_DWORD))v3)(v2);
    ActionMgr::ClearAEEff(&v2->m_kActionMgr);
  }
  Char::ResetSkillAction(v2);
  v4 = v2->m_kActionMgr.m_pActor;
  v2->m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&v2->m_kActionMgr.baseclass_0, v4, 0);
  *(_WORD *)&v2->m_kActionMgr.m_abActionEff[0] = 0;
  v2->m_kActionMgr.m_abActionEff[2] = 0;
  *(_WORD *)&v2->m_kActionMgr.m_abActionSnd[0] = 0;
  v2->m_bActionHit = 0;
  if ( bMoveStop == 1 )
    ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(v2, 1);
  Char::ResetSkillTargetGroundPoint(v2);
  fOffset = 0.0;
  v5 = NiActorManager::INVALID_EVENT_CODE;
  if ( (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 4 )
    goto LABEL_19;
  if ( v2->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
    v5 = v2->m_uiLayerAniCode[1];
  if ( v5 == NiActorManager::INVALID_EVENT_CODE )
LABEL_19:
    v5 = v2->m_uiLayerAniCode[0];
  v6 = Char::GetSequence(v2, v5);
  if ( v6 )
    fOffset = v2->m_fAnimationUpdateTime + v6->m_fOffset;
  ((void (__stdcall *)(_DWORD))v2->baseclass_54.vfptr->SetAnimationOffset)(LODWORD(fOffset));
}

//----- (00648690) --------------------------------------------------------
bool __thiscall Char::SetTargetAnimation(Char *this, unsigned int uiAniEventCode, bool bForceToAnimate, bool bForceLoopAni)
{
  Char *v4; // esi@1
  NiActorManager *v5; // eax@1
  bool result; // al@2
  NiKFMTool *v7; // ecx@6
  unsigned int v8; // edi@7
  NiKFMTool::Transition *v9; // eax@7
  unsigned int v10; // ebx@9
  unsigned int v11; // edi@12
  char v12; // ST04_1@14
  char v13; // al@14
  NiControllerSequence *v14; // eax@14
  NiControllerSequence *v15; // eax@18
  unsigned int uiNumChainAnims; // [sp+4h] [bp-Ch]@9
  NiVBSet *val; // [sp+Ch] [bp-4h]@12
  NiKFMTool::Transition *pkTransition; // [sp+1Ch] [bp+Ch]@7

  v4 = this;
  v5 = this->m_spActor.m_pObject;
  if ( v5 && (bForceToAnimate || !this->m_bWillDead) && !this->m_bAniStop && (v7 = v5->m_spKFMTool.m_pObject) != 0 )
  {
    v8 = uiAniEventCode;
    v9 = NiKFMTool::GetTransition(v7, v5->m_eCurID, uiAniEventCode);
    pkTransition = v9;
    if ( v9 )
    {
      if ( v9->m_eType == 3 )
      {
        v10 = 0;
        uiNumChainAnims = v9->m_aChainInfo.m_uiUsed;
        if ( uiNumChainAnims )
        {
          while ( 1 )
          {
            v11 = v9->m_aChainInfo.m_pBase[v10].m_uiSequenceID;
            if ( !NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
                    (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v4->m_spActor.m_pObject->m_kSequenceMap,
                    v11,
                    &val)
              || !val )
            {
              v12 = v4->m_kCharShape.m_byGender;
              v13 = Char::GetClass(v4);
              v14 = CharResMgr::GetControllerSequence(&g_kCharResMgr, v13, v12, v11);
              if ( !v14 )
                goto LABEL_19;
              NiActorManager::ChangeSequence(v4->m_spActor.m_pObject, v11, v14);
            }
            ++v10;
            if ( v10 >= uiNumChainAnims )
              break;
            v9 = pkTransition;
          }
          v8 = uiAniEventCode;
        }
      }
    }
    v15 = Char::GetSequence(v4, v8);
    if ( v15 )
    {
      if ( bForceLoopAni )
      {
        v15->m_eCycleType = 0;
      }
      else
      {
        if ( v8 == 301000 )
          v15->m_eCycleType = 2;
      }
      v4->m_uiLayerAniCode[0] = v8;
      if ( v15->m_eState == 1 )
        v15->m_fOffset = -3.4028235e38;
      NiActorManager::SetTargetAnimation(v4->m_spActor.m_pObject, v8);
      result = 1;
    }
    else
    {
LABEL_19:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006487C0) --------------------------------------------------------
bool __thiscall Char::SetWeightedTargetAnimation(Char *this, unsigned int uiAniEventCode, eActionWeight eActWeight)
{
  Char *v3; // esi@1
  bool result; // al@2
  unsigned int v5; // eax@7

  v3 = this;
  if ( !this->m_spActor.m_pObject || this->m_bWillDead || this->m_bAniStop )
  {
    result = 0;
  }
  else
  {
    if ( Char::GetSequence(this, uiAniEventCode) )
    {
      v5 = v3->m_uiLayerAniCode[1];
      if ( v5 != NiActorManager::INVALID_EVENT_CODE )
        NiActorManager::DeactivateSequence(v3->m_spActor.m_pObject, v5, 0.0);
      v3->m_uiLayerAniCode[1] = uiAniEventCode;
      NiActorManager::ActivateSequence(
        v3->m_spActor.m_pObject,
        uiAniEventCode,
        eActWeight,
        1,
        1.0,
        0.0,
        NiKFMTool::SYNC_SEQUENCE_ID_NONE);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (00648860) --------------------------------------------------------
void __thiscall Char::OnDead(Char *this)
{
  Char *v1; // esi@1
  Char *v2; // ecx@4

  v1 = this;
  Char::RestoreEquipState(this);
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[15].SetAbStateProperty)(v1) )
    Char::GetoutOfPet(v1);
  AttackSequenceManager::ClearAttSeq(&v1->baseclass_54);
  AbStateInfectee::ClearAbState(&v1->baseclass_0, 1);
  ((void (__thiscall *)(_DWORD, _DWORD))v1->baseclass_0.vfptr[8].Deaffect)(v1, LODWORD(Char::ms_fDefaultWalkSpeed));
  ((void (__thiscall *)(_DWORD, _DWORD))v1->baseclass_0.vfptr[8].SetAbStateProperty)(
    v1,
    LODWORD(Char::ms_fDefaultRunSpeed));
  AttackSequenceManager::ApplicateSkillSeqImmediately(&v1->baseclass_54, v1, 1, 0);
  v1->m_AttackTargetHandle = -1;
  Char::ResetSkillAction(v1);
  if ( v1 == g_pkMainChar )
  {
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[0] = 0;
    v2 = g_pkMainChar;
    g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[9].dwEffectIndex[1] = 0;
    LOWORD(v2[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0]) = -1;
    MainChar::SetStartReserveAct((MainChar *)v2, 0);
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[12].dwEffectIndex[0]) = 0;
    LOBYTE(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[8].dwEffectIndex[1]) = 0;
  }
}
// AA2724: using guessed type float Char__ms_fDefaultWalkSpeed;
// AA2728: using guessed type float Char__ms_fDefaultRunSpeed;

//----- (00648940) --------------------------------------------------------
void __thiscall Char::ActCombatStand(Char *this)
{
  Char *v1; // esi@1
  NiActorManager *v2; // ecx@3
  unsigned __int16 *v3; // eax@8
  unsigned int v4; // edi@10
  unsigned int v5; // eax@15
  NiControllerSequence *v6; // eax@19
  float v7; // ST10_4@20
  unsigned int ui1stCode; // [sp+Ch] [bp-4h]@0

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].SetAbStateProperty)() )
  {
    if ( v1->m_kRidePetCtl.m_spPetActor.m_pObject )
    {
      ((void (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[12].Affect)(v1);
      v2 = v1->m_kRidePetCtl.m_spPetActor.m_pObject;
      if ( v1->m_kRidePetCtl.m_uiStandEventCode != v2->m_eTargetID )
      {
        if ( v2 )
          NiActorManager::SetTargetAnimation(v2, v1->m_kRidePetCtl.m_uiStandEventCode);
        CRidePetCtl::StartAction(&v1->m_kRidePetCtl, v1->m_kRidePetCtl.m_uiStandEventCode);
      }
    }
    return;
  }
  if ( !v1->m_bUserCharacter
    || (v3 = (unsigned __int16 *)v1->m_kActionMgr.m_pkCurPlaySkillViewInfo) == 0
    || !IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(*v3, 1) )
    goto LABEL_22;
  v4 = NiActorManager::INVALID_EVENT_CODE;
  if ( (int)v1->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v1) == 4 )
  {
    v5 = ui1stCode;
  }
  else
  {
    if ( v1->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
      v4 = v1->m_uiLayerAniCode[1];
    if ( v4 == NiActorManager::INVALID_EVENT_CODE )
    {
      v4 = v1->m_uiLayerAniCode[0];
      if ( v4 == NiActorManager::INVALID_EVENT_CODE )
        goto LABEL_22;
    }
    v5 = 10000 * v4 / 0x2710;
  }
  if ( v5 != 600000 && v5 != 700000
    || (v6 = NiActorManager::GetSequence(v1->m_spActor.m_pObject, v1->m_uiLayerAniCode[1])) == 0 )
  {
LABEL_22:
    Char::ActAction(v1, STAND, COMBATSTAND);
    return;
  }
  v7 = (v6->m_fEndKeyTime - v6->m_fBeginKeyTime) / v6->m_fFrequency;
  if ( v7 > (double)v6->m_fLastScaledTime )
    ((void (__thiscall *)(_DWORD, _DWORD))v1->baseclass_0.vfptr[11].Affect)(v1, v6->m_fLastTime);
}

//----- (00648AA0) --------------------------------------------------------
void __thiscall Char::OnWarpMove(Char *this, SHINE_XY_TYPE targetpoint, unsigned __int16 SkillID)
{
  int v3; // edi@0
  Char *v4; // esi@1
  unsigned __int16 v5; // bx@2
  int v6; // edi@2
  int v7; // ecx@4
  int v8; // eax@5
  int v9; // eax@6
  float v10; // ST10_4@8
  float v11; // ST0C_4@8
  AbStateInfecteeVtbl *v12; // edx@9
  void (__thiscall *v13)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@9
  float v14; // ST14_4@10
  float v15; // ST10_4@10
  ActiveSkillViewInfo *v16; // eax@11
  double v17; // st7@15
  NiPoint3 *v18; // [sp+8h] [bp-40h]@13
  float v19; // [sp+Ch] [bp-3Ch]@13
  bool v20; // [sp+10h] [bp-38h]@13
  NiPoint3 *v21; // [sp+14h] [bp-34h]@13
  int v22; // [sp+18h] [bp-30h]@2
  bool v23[12]; // [sp+18h] [bp-30h]@13
  NiPoint3 kCurPos; // [sp+24h] [bp-24h]@9
  NiPoint3 pos; // [sp+30h] [bp-18h]@9
  float v26; // [sp+3Ch] [bp-Ch]@9
  float v27; // [sp+40h] [bp-8h]@9
  float v28; // [sp+44h] [bp-4h]@9
  float SkillIDa; // [sp+58h] [bp+10h]@9
  float SkillIDb; // [sp+58h] [bp+10h]@9

  v4 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[10].Affect)() )
  {
    v5 = SkillID;
    v22 = v3;
    v6 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            SkillID) )
    {
      if ( SkillID <= *(_WORD *)(v6 + 200) )
      {
        v7 = *(_DWORD *)(v6 + 196);
        if ( *(_DWORD *)(v7 + 4 * SkillID) )
        {
          v8 = *(_DWORD *)(v7 + 4 * SkillID);
          if ( v8 )
          {
            v9 = *(_DWORD *)(v8 + 531);
            if ( v9 == 36 || v9 == 38 )
            {
              pos.x = (double)targetpoint.x;
              v12 = v4->baseclass_0.vfptr;
              pos.y = (double)targetpoint.y;
              v13 = v12[6].SetAbStateProperty;
              pos.z = 0.0;
              ((void (__thiscall *)(Char *, NiPoint3 *, int))v13)(v4, &kCurPos, v22);
              v26 = kCurPos.x - pos.x;
              kCurPos.x = v26;
              v27 = kCurPos.y - pos.y;
              kCurPos.y = v27;
              v28 = 0.0 - pos.z;
              kCurPos.z = v28;
              SkillIDa = v27 * v27 + v26 * v26 + v28 * v28;
              SkillIDb = sqrt(SkillIDa);
              if ( SkillIDb >= 40.0 )
              {
                v16 = v4->m_kActionMgr.m_pkCurPlaySkillViewInfo;
                if ( v16 && v16->ID == v5 )
                {
                  v23[0] = 0;
                  v21 = (NiPoint3 *)&Char::INVALIDPOINT3;
                  v20 = 0;
                  v19 = Timer::ms_fCurTime;
                  v18 = &pos;
                }
                else
                {
                  v23[0] = 1;
                  v21 = (NiPoint3 *)&Char::INVALIDPOINT3;
                  v20 = 0;
                  v19 = Timer::ms_fCurTime;
                  v18 = &pos;
                }
                Char::Move(v4, v18, v19, v20, v21, v23[0]);
                v17 = v4->m_fSaveCharSpeed;
                if ( 0.0 == v17 )
                {
                  ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[8].AddAbStateByAbstateIndex)(v4);
                  v4->m_fSaveCharSpeed = v17;
                  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                }
                ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[8].SetAbStateProperty)(v4);
              }
              else
              {
                v14 = (double)targetpoint.y;
                v15 = (double)targetpoint.x;
                ((void (__thiscall *)(Char *, _DWORD, _DWORD))v4->baseclass_0.vfptr[7].IsVisible)(
                  v4,
                  LODWORD(v15),
                  LODWORD(v14));
              }
            }
            else
            {
              v10 = (double)targetpoint.y;
              v11 = (double)targetpoint.x;
              ((void (__thiscall *)(Char *, _DWORD, _DWORD, signed int))v4->baseclass_0.vfptr[7].IsVisible)(
                v4,
                LODWORD(v11),
                LODWORD(v10),
                1);
            }
          }
        }
      }
    }
  }
}
// 648AA0: could not find valid save-restore pair for edi
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00648CE0) --------------------------------------------------------
void __thiscall Char::Attack(Char *this, Char *pkChar, char ucAttackNo)
{
  Char *v3; // esi@1
  bool v4; // zf@3
  unsigned __int16 v5; // ax@3
  AniEventCode::Code2 v6; // [sp+8h] [bp-Ch]@9
  AniEventCode::Code2 v7; // [sp+8h] [bp-Ch]@13

  v3 = this;
  if ( pkChar && pkChar != this )
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[8].__vecDelDtor)(pkChar);
    v4 = v3->m_bUserCharacter == 0;
    v5 = pkChar->m_kHandle;
    v3->m_AttackTargetHandle = v5;
    v3->m_ReservedHitCharHandle = v5;
    v3->m_AttackTargetHandle = pkChar->m_kHandle;
    if ( v4 )
      v3->baseclass_0.vfptr[14].GetAbstateColor((AbStateInfectee *)v3);
    switch ( ucAttackNo )
    {
      case 0:
        v3->baseclass_0.vfptr[14].GetAbstateColor((AbStateInfectee *)v3);
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[19].__vecDelDtor)(v3);
        return;
      case 1:
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[14].__vecDelDtor)(v3);
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[19].__vecDelDtor)(v3);
        return;
      case 2:
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[15].Affect)(v3);
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[19].__vecDelDtor)(v3);
        return;
      case 3:
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[13].SetAbStateProperty)(v3);
        v6 = 1500;
        goto LABEL_10;
      case 4:
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[13].SetAbStateProperty)(v3);
        v6 = 2500;
        goto LABEL_10;
      case 5:
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[13].SetAbStateProperty)(v3);
        v6 = 3500;
LABEL_10:
        Char::ActAction(v3, ATTACK, v6);
        CharShape::StartWeaponAfterImgEff(&v3->m_kCharShape, v3->m_fAnimationUpdateTime, 1.5);
        ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[19].__vecDelDtor)(v3);
        return;
      case 6:
        v7 = 7000;
        goto LABEL_15;
      case 7:
        v7 = 8000;
LABEL_15:
        Char::ActAction(v3, ATTACK, v7);
        break;
      default:
        break;
    }
    ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[19].__vecDelDtor)(v3);
  }
}

//----- (00648E70) --------------------------------------------------------
bool __thiscall Char::CancelSkillActionWhenHitTimePassed(Char *this)
{
  Char *v1; // esi@1
  bool result; // al@4

  v1 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)()
    || v1->m_uiSkillActStep != 6
    || v1->m_lstfHitTime.baseclass_0.baseclass_0._Mysize )
  {
    result = 0;
  }
  else
  {
    Char::CancelSkillAction(v1, 1);
    result = 1;
  }
  return result;
}

//----- (00648EB0) --------------------------------------------------------
void __thiscall Char::ActWalk(Char *this)
{
  double v1; // st7@0
  Char *v2; // esi@1
  NiActorManager *v3; // ecx@3
  float v4; // ST04_4@8

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].SetAbStateProperty)() )
  {
    if ( v2->m_kRidePetCtl.m_spPetActor.m_pObject )
    {
      ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[11].__vecDelDtor)(v2);
      v3 = v2->m_kRidePetCtl.m_spPetActor.m_pObject;
      if ( v2->m_kRidePetCtl.m_uiWalkEventCode != v3->m_eTargetID )
      {
        if ( v3 )
          NiActorManager::SetTargetAnimation(v3, v2->m_kRidePetCtl.m_uiWalkEventCode);
        CRidePetCtl::StartAction(&v2->m_kRidePetCtl, v2->m_kRidePetCtl.m_uiWalkEventCode);
      }
    }
  }
  else
  {
    Char::ActAction(v2, MOVE, NORMALSTAND);
  }
  v2->baseclass_0.vfptr[8].IsVisible((AbStateInfectee *)v2);
  v4 = v1;
  MoveToTarget::ChangeSpeed(&v2->m_kMoveToTarget, v4);
}

//----- (00648F40) --------------------------------------------------------
void __thiscall Char::ActRun(Char *this)
{
  double v1; // st7@0
  Char *v2; // esi@1
  NiActorManager *v3; // ecx@3
  float v4; // ST04_4@8

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[15].SetAbStateProperty)() )
  {
    if ( v2->m_kRidePetCtl.m_spPetActor.m_pObject )
    {
      ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[11].__vecDelDtor)(v2);
      v3 = v2->m_kRidePetCtl.m_spPetActor.m_pObject;
      if ( v2->m_kRidePetCtl.m_uiRunEventCode != v3->m_eTargetID )
      {
        if ( v3 )
          NiActorManager::SetTargetAnimation(v3, v2->m_kRidePetCtl.m_uiRunEventCode);
        CRidePetCtl::StartAction(&v2->m_kRidePetCtl, v2->m_kRidePetCtl.m_uiRunEventCode);
      }
    }
  }
  else
  {
    Char::ActAction(v2, MOVE, COMBATSTAND);
  }
  ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[8].AddAbStateByAbstateIndex)(v2);
  v4 = v1;
  MoveToTarget::ChangeSpeed(&v2->m_kMoveToTarget, v4);
}

//----- (00648FD0) --------------------------------------------------------
void __thiscall Char::ActCriticalStun(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  v1->m_fAnimationSpeed = 1.0;
  AttackSequenceManager::HardStopAttack(&v1->baseclass_54);
  Char::ActAction(v1, DAMAGE, COMBATSTAND);
}

//----- (00649000) --------------------------------------------------------
void __thiscall Char::ActDamage1(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  v1->m_fAnimationSpeed = 1.0;
  Char::ActAction(v1, DAMAGE, NORMALSTAND);
}

//----- (00649030) --------------------------------------------------------
void __thiscall Char::ActDie1(Char *this)
{
  this->m_fAnimationSpeed = 1.0;
  Char::ActAction(this, DIE, NORMALSTAND);
}

//----- (00649050) --------------------------------------------------------
void __thiscall Char::ActAttack1_1(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  Char::ActAction(v1, ATTACK, NORMALSTAND);
  CharShape::StartWeaponAfterImgEff(&v1->m_kCharShape, v1->m_fAnimationUpdateTime, 1.5);
}

//----- (006490A0) --------------------------------------------------------
void __thiscall Char::ActAttack1_2(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  Char::ActAction(v1, ATTACK, COMBATSTAND);
  CharShape::StartWeaponAfterImgEff(&v1->m_kCharShape, v1->m_fAnimationUpdateTime, 1.5);
}

//----- (006490F0) --------------------------------------------------------
void __thiscall Char::ActAttack1_3(Char *this)
{
  Char *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
  Char::ActAction(v1, ATTACK, SKILLSTAND_1);
  CharShape::StartWeaponAfterImgEff(&v1->m_kCharShape, v1->m_fAnimationUpdateTime, 1.5);
}

//----- (00649140) --------------------------------------------------------
void __thiscall Char::ActSkill(Char *this, Char *pkChar, Skill::Type eSkillType, unsigned __int16 kSkillID)
{
  Char *v4; // esi@1
  NiNode *v5; // edi@2
  NiPoint3 *v6; // eax@2
  float v7; // ST18_4@2
  float v8; // ST1C_4@2
  float v9; // ST20_4@2
  double v10; // st7@3
  int v11; // edi@12
  int v12; // edx@14
  ActiveSkillViewInfo *v13; // eax@15
  void (__thiscall *v14)(AttackSequenceManager *, float); // eax@19
  int v15; // [sp+8h] [bp-20h]@7
  float fLengthToMainChar; // [sp+24h] [bp-4h]@2
  float eSkillTypea; // [sp+34h] [bp+Ch]@2
  float eSkillTypeb; // [sp+34h] [bp+Ch]@2
  float eSkillTypec; // [sp+34h] [bp+Ch]@5

  v4 = this;
  if ( eSkillType == 1 )
  {
    ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
    v5 = v4->m_spScene.m_pObject;
    v6 = World::GetCameraLookAtPos(&g_kWorld);
    v7 = v6->x - v5->baseclass_0.m_kLocal.m_Translate.x;
    v8 = v6->y - v5->baseclass_0.m_kLocal.m_Translate.y;
    v9 = v6->z - v5->baseclass_0.m_kLocal.m_Translate.z;
    eSkillTypea = v8 * v8 + v7 * v7 + v9 * v9;
    eSkillTypeb = sqrt(eSkillTypea);
    fLengthToMainChar = eSkillTypeb;
    v10 = Char::IsNPC(v4) ? v4->m_fMaxViewLength + 500.0 : v4->m_fMaxViewLength;
    eSkillTypec = v10;
    if ( fLengthToMainChar <= (double)eSkillTypec )
    {
      Char::SetActionEffectStartTime(v4);
      AttackSequenceManager::ApplicateSkillSeqImmediately(&v4->baseclass_54, v4, 1, 0);
      if ( AbStateInfectee::SubAbIsInList(&v4->baseclass_0, SUBAB_KNOCKBACK) )
        LOBYTE(v15) = 0;
      else
        v15 = Skill::IsMovingSkill(kSkillID) == 0;
      Char::CancelSkillAction(v4, v15);
      v4->m_AttackTargetHandle = pkChar ? pkChar->m_kHandle : -1;
      v4->m_ReservedHitCharHandle = v4->m_AttackTargetHandle;
      v11 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                              kSkillID) )
      {
        if ( kSkillID <= *(_WORD *)(v11 + 200) )
        {
          v12 = *(_DWORD *)(v11 + 196);
          if ( *(_DWORD *)(v12 + 4 * kSkillID) )
          {
            v13 = *(ActiveSkillViewInfo **)(v12 + 4 * kSkillID);
            if ( v13 )
            {
              v4->m_kActionMgr.m_pkCurPlaySkillViewInfo = v13;
              v4->m_uiSkillActStep = 0;
              if ( pkChar )
              {
                if ( pkChar != v4 )
                  v4->baseclass_0.vfptr[8].__vecDelDtor((AbStateInfectee *)v4, (unsigned int)pkChar);
              }
              v14 = v4->baseclass_54.vfptr->SetAnimationSpeed;
              v4->m_bReserveSkillSmash = 0;
              ((void (__stdcall *)(_DWORD))v14)(1.0);
            }
          }
        }
      }
    }
  }
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (006492E0) --------------------------------------------------------
void __thiscall Char::ActSkill(Char *this, unsigned int x, unsigned int y, Skill::Type eSkillType, unsigned __int16 kSkillID)
{
  Char *v5; // esi@1
  NiNode *v6; // edi@2
  NiPoint3 *v7; // eax@2
  double v8; // st7@3
  int v9; // edi@9
  int v10; // eax@11
  ActiveSkillViewInfo *v11; // eax@12
  AbStateInfecteeVtbl *v12; // edx@13
  void (__thiscall *v13)(AbStateInfectee *, AbStateInst *, bool); // edx@13
  void (__thiscall *v14)(AttackSequenceManager *, float); // edx@13
  int v15; // [sp+8h] [bp-20h]@7
  float v16; // [sp+18h] [bp-10h]@2
  float v17; // [sp+1Ch] [bp-Ch]@2
  float v18; // [sp+20h] [bp-8h]@2
  float fLengthToMainChar; // [sp+24h] [bp-4h]@2
  float eSkillTypea; // [sp+38h] [bp+10h]@2
  float eSkillTypeb; // [sp+38h] [bp+10h]@2
  float eSkillTypec; // [sp+38h] [bp+10h]@5

  v5 = this;
  if ( eSkillType == 1 )
  {
    ((void (*)(void))this->baseclass_0.vfptr[13].SetAbStateProperty)();
    v6 = v5->m_spScene.m_pObject;
    v7 = World::GetCameraLookAtPos(&g_kWorld);
    v16 = v7->x - v6->baseclass_0.m_kLocal.m_Translate.x;
    v17 = v7->y - v6->baseclass_0.m_kLocal.m_Translate.y;
    v18 = v7->z - v6->baseclass_0.m_kLocal.m_Translate.z;
    eSkillTypea = v16 * v16 + v17 * v17 + v18 * v18;
    eSkillTypeb = sqrt(eSkillTypea);
    fLengthToMainChar = eSkillTypeb;
    v8 = Char::IsNPC(v5) ? v5->m_fMaxViewLength + 500.0 : v5->m_fMaxViewLength;
    eSkillTypec = v8;
    if ( fLengthToMainChar <= (double)eSkillTypec )
    {
      AttackSequenceManager::ApplicateSkillSeqImmediately(&v5->baseclass_54, v5, 1, 0);
      if ( AbStateInfectee::SubAbIsInList(&v5->baseclass_0, SUBAB_KNOCKBACK) )
        LOBYTE(v15) = 0;
      else
        v15 = Skill::IsMovingSkill(kSkillID) == 0;
      Char::CancelSkillAction(v5, v15);
      v9 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable,
                              kSkillID) )
      {
        if ( kSkillID <= *(_WORD *)(v9 + 200) )
        {
          v10 = *(_DWORD *)(v9 + 196) + 4 * kSkillID;
          if ( *(_DWORD *)v10 )
          {
            v11 = *(ActiveSkillViewInfo **)v10;
            if ( v11 )
            {
              v5->m_uiSkillActStep = 0;
              v5->m_kActionMgr.m_pkCurPlaySkillViewInfo = v11;
              v16 = (double)x;
              v12 = v5->baseclass_0.vfptr;
              v17 = (double)y;
              v13 = v12[9].Affect;
              v18 = 0.0;
              ((void (__thiscall *)(Char *, float *))v13)(v5, &v16);
              v14 = v5->baseclass_54.vfptr->SetAnimationSpeed;
              v5->m_bReserveSkillSmash = 0;
              ((void (__thiscall *)(AttackSequenceManager *, _DWORD))v14)(&v5->baseclass_54, 1.0);
            }
          }
        }
      }
    }
  }
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (00649470) --------------------------------------------------------
bool __thiscall Char::RideOn(Char *this, Char *pkMover, NiPointer<NiNode> spMoverCarrierNode, bool bViewChar, unsigned int uiSlot)
{
  Char *v5; // esi@1
  Char *v6; // edi@1
  NiNode *v7; // esi@2
  int v9; // eax@8
  int v10; // ebx@8
  NiNode *v11; // esi@11
  int v12; // ebx@16
  NiAVObject *v13; // ecx@22
  NiNode *v14; // eax@22
  NiPoint3 kPos; // [sp+2Ch] [bp-20h]@22
  NiPointer<NiActorManager> spMoverActor; // [sp+38h] [bp-14h]@8
  NiPointer<NiNode> spMoverNode; // [sp+3Ch] [bp-10h]@16
  int v18; // [sp+48h] [bp-4h]@1

  v5 = this;
  v6 = pkMover;
  v18 = 0;
  if ( !pkMover )
  {
    v7 = spMoverCarrierNode.m_pObject;
    v18 = -1;
    if ( spMoverCarrierNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spMoverCarrierNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  if ( !spMoverCarrierNode.m_pObject )
    return 0;
  v9 = pkMover->baseclass_54.vfptr->GetActor(&pkMover->baseclass_54);
  v10 = v9;
  spMoverActor.m_pObject = (NiActorManager *)v9;
  if ( v9 )
    InterlockedIncrement((volatile LONG *)(v9 + 4));
  if ( v10 )
  {
    v12 = *(_DWORD *)(v10 + 12);
    spMoverNode.m_pObject = (NiNode *)v12;
    if ( v12 )
      InterlockedIncrement((volatile LONG *)(v12 + 4));
    LOBYTE(v18) = 2;
    if ( v12 )
    {
      Mover::GetSlotNode((Mover *)v6, (NiPointer<NiNode> *)&pkMover, uiSlot);
      LOBYTE(v18) = 3;
      if ( pkMover )
      {
        ((void (__cdecl *)(NiNode *, _DWORD))spMoverCarrierNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v5->m_spCharNode.m_pObject,
          0);
        v13 = (NiAVObject *)v5->m_spCharNode.m_pObject;
        v5->m_fChairHeight = pkMover->baseclass_54.m_fLastSequenceEndTime;
        NiAVObject::SetRotate(v13, NI_PI, 0.0, 0.0, 1.0);
        ((void (__cdecl *)(NiNode *, _DWORD))pkMover->baseclass_0.vfptr[3].DeleteAbStateByAbstateIndex)(
          v5->m_spCharNode.m_pObject,
          0);
        NiAVObject::SetAppCulled(&v5->m_spCharNode.m_pObject->baseclass_0, bViewChar == 0);
        v5->m_uiMoverSlot = uiSlot;
        v5->m_pkMover = (Mover *)v6;
        v5->m_kMoverHandle = v6->m_kHandle;
        Char::SetMode(v5, 6);
        ((void (__thiscall *)(Char *, NiPoint3 *))v6->baseclass_0.vfptr[6].SetAbStateProperty)(v6, &kPos);
        v14 = v5->m_spScene.m_pObject;
        LODWORD(v14->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
        v14->baseclass_0.m_kLocal.m_Translate.y = kPos.y;
        v14->baseclass_0.m_kLocal.m_Translate.z = kPos.z;
        NiAVObject::Update((NiAVObject *)v12, 0.0, 1);
        NiAVObject::UpdateEffects((NiAVObject *)v12);
        NiAVObject::UpdateProperties((NiAVObject *)v12);
        NiAVObject::Update(&v5->m_spCharNode.m_pObject->baseclass_0, 0.0, 1);
        NiAVObject::UpdateEffects(&v5->m_spCharNode.m_pObject->baseclass_0);
        NiAVObject::UpdateProperties(&v5->m_spCharNode.m_pObject->baseclass_0);
        NiAVObject::Update(&v5->m_spScene.m_pObject->baseclass_0, 0.0, 1);
        NiAVObject::UpdateEffects(&v5->m_spScene.m_pObject->baseclass_0);
        NiAVObject::UpdateProperties(&v5->m_spScene.m_pObject->baseclass_0);
        LOBYTE(v18) = 2;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkMover);
        LOBYTE(v18) = 1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spMoverNode);
        LOBYTE(v18) = 0;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spMoverActor);
        v18 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spMoverCarrierNode);
        return 1;
      }
      LOBYTE(v18) = 2;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkMover);
    }
    LOBYTE(v18) = 1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spMoverNode);
    LOBYTE(v18) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spMoverActor);
    v18 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spMoverCarrierNode);
    return 0;
  }
  v11 = spMoverCarrierNode.m_pObject;
  v18 = -1;
  if ( spMoverCarrierNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spMoverCarrierNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  return 0;
}
// B6DE8C: using guessed type const float NI_PI;

//----- (00649750) --------------------------------------------------------
bool __thiscall Char::RideOff(Char *this)
{
  Char *v1; // esi@1
  Mover *v2; // ecx@1
  int v3; // eax@2
  void *(__thiscall *v4)(AbStateInfectee *, unsigned int); // edx@2
  NiNode *v5; // eax@2
  float v6; // eax@2
  float v7; // ecx@2
  int v8; // eax@2
  void (__thiscall *v9)(AbStateInfectee *, AbStateInst *, bool); // edx@2
  NiTArray<NiPointer<NiGeometry> > *v10; // ecx@3
  NiNode *v11; // ecx@3
  char v12; // bl@3
  bool (__thiscall *v13)(AbStateInfectee *, ABSTATEINDEX, float, bool); // edx@3
  NiPoint3 kDir; // [sp+20h] [bp-18h]@2
  NiPoint3 kPos; // [sp+2Ch] [bp-Ch]@2

  v1 = this;
  v2 = this->m_pkMover;
  if ( v2 )
  {
    v3 = ((int (*)(void))v2->baseclass_0.baseclass_0.vfptr[6].Deaffect)();
    LODWORD(kPos.x) = *(_DWORD *)v3;
    LODWORD(kPos.y) = *(_DWORD *)(v3 + 4);
    v4 = v1->baseclass_0.vfptr[5].__vecDelDtor;
    LODWORD(kPos.z) = *(_DWORD *)(v3 + 8);
    v4(&v1->baseclass_0, (unsigned int)&kPos);
    v5 = v1->m_spScene.m_pObject;
    LODWORD(v5->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
    v5->baseclass_0.m_kLocal.m_Translate.y = kPos.y;
    v5->baseclass_0.m_kLocal.m_Translate.z = kPos.z;
    v6 = kPos.y;
    v7 = kPos.z;
    LODWORD(v1->m_pos3CameraPos.x) = (_DWORD)kPos.x;
    v1->m_pos3CameraPos.y = v6;
    v1->m_pos3CameraPos.z = v7;
    v8 = ((int (*)(void))v1->m_pkMover->baseclass_0.baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
    LODWORD(kDir.x) = *(_DWORD *)v8;
    LODWORD(kDir.y) = *(_DWORD *)(v8 + 4);
    v9 = v1->baseclass_0.vfptr[6].Affect;
    LODWORD(kDir.z) = *(_DWORD *)(v8 + 8);
    ((void (__thiscall *)(Char *, NiPoint3 *))v9)(v1, &kDir);
  }
  v10 = (NiTArray<NiPointer<NiGeometry> > *)&v1->m_spCarrierNode.m_pObject->m_kChildren;
  v1->m_uiLayerAniCode[1] = NiActorManager::INVALID_EVENT_CODE;
  v1->m_pkMover = 0;
  NiTArray<NiPointer<NiNode>>::RemoveAll(v10);
  v11 = v1->m_spCharNode.m_pObject;
  v1->m_fChairHeight = 0.0;
  NiMatrix3::MakeRotation(&v11->baseclass_0.m_kLocal.m_Rotate, 0.0, 0.0, 0.0, 1.0);
  v1->m_spCharNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spCtrlNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCharNode.m_pObject,
    0);
  NiAVObject::Update(&v1->m_spCharNode.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::UpdateEffects(&v1->m_spCharNode.m_pObject->baseclass_0);
  NiAVObject::UpdateProperties(&v1->m_spCharNode.m_pObject->baseclass_0);
  v12 = ((int (__thiscall *)(Char *))v1->baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v1);
  v13 = v1->baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
  v1->m_byMode = 1;
  v1->m_eStandMode = 0;
  if ( v12 != (unsigned __int8)((int (__thiscall *)(Char *))v13)(v1) )
    v1->m_bIsChangeCampMode = 1;
  ((void (__thiscall *)(Char *))v1->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
  return 1;
}

//----- (006498E0) --------------------------------------------------------
bool __thiscall Char::AnimationStopWhenHitTime(Char *this)
{
  Char *v1; // edi@1
  unsigned int v2; // ebx@3
  NiControllerSequence *v3; // eax@8
  int v4; // edx@12
  float v5; // ST10_4@12
  float v6; // ST10_4@13
  float fLastTime; // [sp+10h] [bp-4h]@9

  v1 = this;
  if ( BYTE1(this->baseclass_3c.m_kAttachEffectList.baseclass_0.baseclass_0.vfptr) )
  {
    if ( !*(_DWORD *)&this->m_acLinkGateName[22] )
      return 1;
    v2 = NiActorManager::INVALID_EVENT_CODE;
    if ( (*(int (__thiscall **)(char *))(*((_DWORD *)this - 21) + 440))((char *)this - 84) == 4 )
      goto LABEL_18;
    if ( v1->m_kJumpProcessor.m_kEffect.m_pEffectObject != (NiAVObject *)NiActorManager::INVALID_EVENT_CODE )
      v2 = (unsigned int)v1->m_kJumpProcessor.m_kEffect.m_pEffectObject;
    if ( v2 == NiActorManager::INVALID_EVENT_CODE )
LABEL_18:
      v2 = (unsigned int)v1->m_kJumpProcessor.m_kEffect.vfptr;
    v3 = Char::GetSequence((Char *)((char *)v1 - 84), v2);
    if ( !v3 )
      return 1;
    fLastTime = v3->m_fLastTime;
    if ( *(_WORD *)&v1->m_CharTitleName[255] == g_pkMainChar->m_kHandle )
    {
      if ( Char::IsAniState((Char *)((char *)v1 - 84), ANIMATING) == 1 )
      {
        if ( *(_DWORD *)&v1->m_mapForceEnemeyCamShake.baseclass_0.baseclass_0.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
        {
          v4 = *(_DWORD *)&v1->m_mapEnemyCamShake.baseclass_0.baseclass_0.baseclass_0._Alnod.baseclass_0.dummy[0];
          v5 = *(float *)(*(_DWORD *)v4 + 8) - fLastTime;
          if ( v5 > 0.05000000074505806 )
          {
            v6 = *(float *)(*(_DWORD *)v4 + 8) - 0.009999999776482582;
            ((void (__thiscall *)(Char *, _DWORD))v1->baseclass_0.vfptr->IsVisible)(v1, LODWORD(v6));
            ((void (__thiscall *)(Char *, _DWORD))v1->baseclass_0.vfptr->SetAbStateProperty)(v1, 0.0);
            return 1;
          }
        }
      }
    }
  }
  return 0;
}

//----- (006499E0) --------------------------------------------------------
bool __thiscall Char::Shoot(Char *this)
{
  Char *v1; // ebx@1
  bool result; // al@2
  NiTListItem<SkillSequence *> *v3; // esi@4
  SkillSequence *v4; // eax@5
  ActiveSkillViewInfo *v5; // esi@6
  float v6; // ST18_4@7
  NiTListItem<SkillSequence *> *v7; // edx@8
  NiTListItem<SkillSequence *> *v8; // eax@11
  NiTListItem<SkillSequence *> *v9; // ecx@11
  SkillSequence *v10; // edi@14
  DamageInfoSet DamInfoSet; // [sp+24h] [bp-30h]@3
  NiPoint3 kPos; // [sp+34h] [bp-20h]@8
  Char *pkTarget; // [sp+44h] [bp-10h]@1
  int v14; // [sp+50h] [bp-4h]@3

  v1 = this;
  pkTarget = CharMgr::GetChar(&g_kCharMgr, this->m_AttackTargetHandle);
  if ( pkTarget )
  {
    *(_DWORD *)&DamInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
    DamInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead = 0;
    DamInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail = 0;
    DamInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTList<DamageInfo__>::_vftable_;
    v14 = 0;
    if ( *(_DWORD *)&v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
    {
      v3 = v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
      while ( v3 )
      {
        v4 = v3->m_element;
        v3 = v3->m_pkNext;
        DamageInfoSet::CopyFrom(&DamInfoSet, &v4->kDamageInfoSet);
      }
      v5 = v1->m_kActionMgr.m_pkCurPlaySkillViewInfo;
      if ( strcmp(v5->ShoEffect, (const char *)&unk_9C3748) )
      {
        v6 = (double)v5->ShoEfSpd;
        EffectMgr::CreateShootEff(
          &g_kEffectMgr,
          v5->ShoEffect,
          v5->LastEffectA,
          v5->LastEfASnd,
          v1,
          pkTarget,
          Timer::ms_fCurTime,
          v6,
          &DamInfoSet,
          v5->eLastEffPos,
          1);
      }
      Char::GetRightHandPos(v1, &kPos);
      SoundMgr::CreateSound(&g_kSoundMgr, v5->ShoSnd, &kPos);
      v7 = 0;
      if ( *(_DWORD *)&v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
      {
        while ( 1 )
        {
          v8 = v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead;
          v9 = v8->m_pkNext;
          v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_pkHead = v8->m_pkNext;
          if ( v9 == v7 )
            v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_pkTail = v7;
          else
            v9->m_pkPrev = v7;
          v10 = v8->m_element;
          v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.vfptr->DeleteItem(
            (NiTListBase<DFALL<SkillSequence *>,SkillSequence *> *)&v1->baseclass_54.m_kSkillSeqList,
            v8);
          --*(_DWORD *)&v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
          if ( v10 )
          {
            DamageInfoSet::_DamageInfoSet(&v10->kDamageInfoSet);
            operator delete(v10);
          }
          if ( !*(_DWORD *)&v1->baseclass_54.m_kSkillSeqList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
            break;
          v7 = 0;
        }
      }
    }
    v14 = -1;
    DamageInfoSet::_DamageInfoSet(&DamInfoSet);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00649BA0) --------------------------------------------------------
void __thiscall Char::ActImmediateShotEffect(Char *this)
{
  Char *v1; // esi@1
  ActiveSkillViewInfo *v2; // eax@1

  v1 = this;
  v2 = this->m_kActionMgr.m_pkCurPlaySkillViewInfo;
  if ( this->m_uiSkillActStep == 6 && v2 && v2->ActionType == 1 && !_strnicmp(v2->ShoEffect, "MyWeapon", 8u) )
  {
    if ( (unsigned __int8)v1->baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v1) )
      Char::Shoot(v1);
  }
}

//----- (00649BF0) --------------------------------------------------------
void __thiscall Char::UpdateSkillAnimation(Char *this, float fTime)
{
  Char *v2; // esi@1
  ActiveSkillViewInfo *v3; // edi@5
  eActionWeight v4; // ebx@5
  ActiveSkillViewInfo *v5; // edi@13
  eActionWeight v6; // ebx@13
  ActiveSkillViewInfo *v7; // edi@17
  ActiveSkillInfo *v8; // eax@17
  bool v9; // zf@17
  SkillSpecial v10; // eax@17
  unsigned int v11; // edi@22
  NiControllerSequence *v12; // eax@27
  bool v13; // al@30
  AbStateInfecteeVtbl *v14; // edx@30
  unsigned int v15; // edi@31
  float v16; // eax@36
  unsigned __int16 *v17; // eax@49
  float v18; // eax@59
  float v19; // ecx@59
  void (__thiscall *v20)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@59
  bool v21; // al@62
  NiPoint3 thisa; // [sp+14h] [bp-28h]@59
  NiPoint3 kCurPos; // [sp+20h] [bp-1Ch]@59
  NiPoint3 kTargetPos; // [sp+2Ch] [bp-10h]@59
  int bAllApplicate; // [sp+38h] [bp-4h]@49
  bool bLastHitTime; // [sp+44h] [bp+8h]@51

  v2 = this;
  if ( !this->m_spActor.m_pObject )
    return;
  CharShape::Update(&this->m_kCharShape, fTime);
  switch ( v2->m_uiSkillActStep )
  {
    case 0u:
      v2->m_uiSkillActStep = 1;
      v2->m_fSkillActionStartTime = fTime;
      goto LABEL_61;
    case 1u:
      if ( Char::IsSkillCasRdyActExist(v2) )
      {
        v3 = v2->m_kActionMgr.m_pkCurPlaySkillViewInfo;
        v4 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v3->ID, 1)->IsMovingSkill != 0;
        if ( v4 == 1 )
          OutputDebugStringA("ÀÌ°Ô ¹«º");
        if ( !Char::ActAction(v2, v3->CasRdyAction, v4) )
        {
          Char::ResetSkillAction(v2);
          Char::ResetAction(v2);
          return;
        }
        v2->m_uiSkillActStep = 2;
      }
      else
      {
        v2->m_uiSkillActStep = 5;
      }
      goto LABEL_61;
    case 2u:
      if ( (unsigned __int8)v2->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v2) )
        v2->m_uiSkillActStep = 2
                             * (strcmp(v2->m_kActionMgr.m_pkCurPlaySkillViewInfo->CasAction, (const char *)&unk_9C3734) == 0)
                             + 3;
      goto LABEL_61;
    case 3u:
      v5 = v2->m_kActionMgr.m_pkCurPlaySkillViewInfo;
      v6 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v5->ID, 1)->IsMovingSkill != 0;
      if ( v6 == 1 )
        OutputDebugStringA("ÀÌ°Ô ¹«º");
      if ( !Char::ActAction(v2, v5->CasAction, v6) )
        return;
      v2->m_uiSkillActStep = 4;
      goto LABEL_61;
    case 5u:
      v7 = v2->m_kActionMgr.m_pkCurPlaySkillViewInfo;
      v8 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(v7->ID, 1);
      v9 = v8->IsMovingSkill == 0;
      v10 = v8->SpecialIndexA;
      if ( v10 == 36 || v10 == 38 )
      {
        Char::ActAction(v2, v7->SwingAction, 0);
      }
      else
      {
        if ( !Char::ActAction(v2, v7->SwingAction, (eActionWeight)!v9) )
        {
          Char::ResetSkillAction(v2);
          Char::ResetAction(v2);
          goto LABEL_61;
        }
      }
      v11 = NiActorManager::INVALID_EVENT_CODE;
      if ( (int)v2->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 4 )
        goto LABEL_66;
      if ( v2->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
        v11 = v2->m_uiLayerAniCode[1];
      if ( v11 == NiActorManager::INVALID_EVENT_CODE )
LABEL_66:
        v11 = v2->m_uiLayerAniCode[0];
      v12 = Char::GetSequence(v2, v11);
      if ( v12 )
        CharShape::StartWeaponAfterImgEff(&v2->m_kCharShape, v2->m_fAnimationUpdateTime, v12->m_fEndKeyTime);
      ((void (__thiscall *)(Char *))v2->baseclass_0.vfptr[19].__vecDelDtor)(v2);
      v2->m_uiSkillActStep = 6;
      Char::SaveSkillSwingStartCurTime(v2);
      goto LABEL_61;
    case 6u:
      v13 = Char::IsSkillShootActExist(v2);
      v14 = v2->baseclass_0.vfptr;
      if ( v13 )
      {
        v15 = NiActorManager::INVALID_EVENT_CODE;
        if ( ((int (*)(void))v14[13].GetAbstateColor)() == 4 )
        {
          v16 = fTime;
        }
        else
        {
          if ( v2->m_uiLayerAniCode[1] != NiActorManager::INVALID_EVENT_CODE )
            v15 = v2->m_uiLayerAniCode[1];
          if ( v15 == NiActorManager::INVALID_EVENT_CODE )
          {
            v15 = v2->m_uiLayerAniCode[0];
            if ( v15 == NiActorManager::INVALID_EVENT_CODE )
            {
LABEL_41:
              if ( !Char::IsActGathering(v2) )
              {
                AttackSequenceManager::ApplicateSkillSeqImmediately(&v2->baseclass_54, v2, 1, 0);
                Char::ResetSkillAction(v2);
                Char::ResetAction(v2);
LABEL_45:
                if ( v2->m_bActionHit && (unsigned __int8)v2->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v2) )
                {
                  Char::ResetSkillAction(v2);
                  Char::ResetAction(v2);
                }
                goto LABEL_61;
              }
LABEL_43:
              if ( (unsigned __int8)((int (__thiscall *)(Char *, _DWORD))v2->baseclass_0.vfptr[19].Affect)(v2, 0) )
              {
                Char::Shoot(v2);
                v2->m_bActionHit = 1;
              }
              goto LABEL_45;
            }
          }
          LODWORD(v16) = 10000 * v15 / 0x2710;
        }
        if ( LODWORD(v16) == 300000 || LODWORD(v16) == 600000 || LODWORD(v16) == 700000 )
          goto LABEL_43;
        goto LABEL_41;
      }
      if ( (unsigned __int8)((int (__stdcall *)(_DWORD))v14[19].Affect)(0) )
      {
        v17 = (unsigned __int16 *)v2->m_kActionMgr.m_pkCurPlaySkillViewInfo;
        v2->m_bActionHit = 1;
        v9 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(*v17, 1)->HitID == 0;
        LOBYTE(bAllApplicate) = 1;
        if ( !v9 )
          LOBYTE(bAllApplicate) = 0;
        bLastHitTime = 0;
        if ( v2->m_lstfHitTime.baseclass_0.baseclass_0._Mysize == 1 )
          bLastHitTime = 1;
        if ( AttackSequenceManager::ApplicateSkillSeqImmediately(&v2->baseclass_54, v2, bAllApplicate, bLastHitTime) == 1
          || (unsigned __int8)v2->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v2) )
          ((void (__thiscall *)(Char *, signed int))v2->baseclass_0.vfptr[19].Affect)(v2, 1);
        goto LABEL_61;
      }
      if ( (unsigned __int8)v2->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v2) )
      {
        AttackSequenceManager::ApplicateSkillSeqImmediately(&v2->baseclass_54, v2, 1, 0);
LABEL_60:
        Char::ResetSkillAction(v2);
        Char::ResetAction(v2);
        Char::ResetSkillTargetGroundPoint(v2);
        goto LABEL_61;
      }
      if ( (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[10].Affect)(v2) )
      {
        v18 = v2->m_kMoveToTarget.baseclass_0.baseclass_0.m_pos3End.z;
        v19 = v2->m_kMoveToTarget.baseclass_0.baseclass_0.m_pos3End.x;
        kTargetPos.y = v2->m_kMoveToTarget.baseclass_0.baseclass_0.m_pos3End.y;
        v20 = v2->baseclass_0.vfptr[6].SetAbStateProperty;
        kTargetPos.z = v18;
        kTargetPos.x = v19;
        ((void (__thiscall *)(Char *, NiPoint3 *))v20)(v2, &kCurPos);
        kCurPos.z = 0.0;
        thisa.x = kCurPos.x - kTargetPos.x;
        thisa.y = kCurPos.y - kTargetPos.y;
        thisa.z = 0.0 - kTargetPos.z;
        if ( NiPoint3::Length(&thisa) < 50.0 )
          goto LABEL_60;
      }
LABEL_61:
      Char::DoOscillation(v2, OSC_MAX_NUM);
      if ( (unsigned __int8)v2->baseclass_0.vfptr[15].IsVisible((AbStateInfectee *)v2) )
      {
        v21 = v2->m_bCulled;
        if ( v21 )
        {
          v2->m_bCulledOld = v21;
          v2->m_bCulled = 0;
          v2->m_spScene.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
        }
      }
      return;
    default:
      goto LABEL_61;
  }
}

//----- (0064A0E0) --------------------------------------------------------
NiPoint3 *__cdecl operator_(NiPoint3 *result, float fScalar, NiPoint3 *pt)
{
  NiPoint3 *v3; // eax@1

  v3 = result;
  result->x = pt->x * fScalar;
  result->y = pt->y * fScalar;
  result->z = fScalar * pt->z;
  return v3;
}

//----- (0064A110) --------------------------------------------------------
void __thiscall NiCollisionData::SetCollisionMode(NiCollisionData *this, NiCollisionData::CollisionMode eCollision)
{
  this->m_eCollisionMode = eCollision;
  NiCollisionData::SetPrecacheAttributes(this->baseclass_0.m_pkSceneObject, eCollision);
}

//----- (0064A130) --------------------------------------------------------
void __thiscall NiD3DShaderLibrary::SetShaderLibraryDesc(NiD3DShaderLibrary *this, NiShaderLibraryDesc *pkLibDesc)
{
  NiD3DShaderLibrary *v2; // ebx@1
  NiShaderLibraryDesc *v3; // esi@1

  v2 = this;
  v3 = this->m_spShaderLibraryDesc.m_pObject;
  if ( v3 != pkLibDesc )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spShaderLibraryDesc.m_pObject = pkLibDesc;
    if ( pkLibDesc )
      InterlockedIncrement((volatile LONG *)&pkLibDesc->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (0064A180) --------------------------------------------------------
void __thiscall CRidePetCtl::ActRun(CRidePetCtl *this)
{
  CRidePetCtl *v1; // esi@1
  NiActorManager *v2; // ecx@1

  v1 = this;
  v2 = this->m_spPetActor.m_pObject;
  if ( v1->m_uiRunEventCode != v2->m_eTargetID )
  {
    if ( v2 )
      NiActorManager::SetTargetAnimation(v2, v1->m_uiRunEventCode);
    CRidePetCtl::StartAction(v1, v1->m_uiRunEventCode);
  }
}

//----- (0064A1B0) --------------------------------------------------------
void __thiscall CRidePetCtl::ActWalk(CRidePetCtl *this)
{
  CRidePetCtl *v1; // esi@1
  NiActorManager *v2; // ecx@1

  v1 = this;
  v2 = this->m_spPetActor.m_pObject;
  if ( v1->m_uiWalkEventCode != v2->m_eTargetID )
  {
    if ( v2 )
      NiActorManager::SetTargetAnimation(v2, v1->m_uiWalkEventCode);
    CRidePetCtl::StartAction(v1, v1->m_uiWalkEventCode);
  }
}

//----- (0064A1E0) --------------------------------------------------------
void __thiscall CRidePetCtl::SpecialAction(CRidePetCtl *this)
{
  CRidePetCtl *v1; // esi@1
  NiActorManager *v2; // ecx@1

  v1 = this;
  v2 = this->m_spPetActor.m_pObject;
  if ( v1->m_uiSpecialEventCode != v2->m_eTargetID )
  {
    if ( v2 )
      NiActorManager::SetTargetAnimation(v2, v1->m_uiSpecialEventCode);
    CRidePetCtl::StartAction(v1, v1->m_uiSpecialEventCode);
  }
}

//----- (0064A210) --------------------------------------------------------
void __thiscall Char::OpenDoor(Char *this)
{
  Char *v1; // esi@1
  void (*v2)(void); // edx@2
  NiCollisionObject *v3; // edi@2
  void *v4; // eax@3
  NiCollisionObject *v5; // eax@4
  NiAVObject *v6; // ST00_4@7

  v1 = this;
  if ( this->m_bIsDoor )
  {
    v2 = (void (*)(void))this->baseclass_0.vfptr[10].__vecDelDtor;
    this->m_fAnimationSpeed = 1.0;
    this->m_eStandMode = 1;
    v2();
    v3 = v1->m_spScene.m_pObject->baseclass_0.m_spCollisionObject.m_pObject;
    if ( !v3 )
    {
      v4 = operator new(0x50u);
      if ( v4 )
        NiCollisionData::NiCollisionData((NiCollisionData *)v4, &v1->m_spScene.m_pObject->baseclass_0);
      else
        v5 = 0;
      v3 = v5;
    }
    v6 = v3->m_pkSceneObject;
    v3[3].baseclass_0.baseclass_0.m_uiRefCount = 3;
    NiCollisionData::SetPrecacheAttributes(v6, NOTEST);
    v3[3].baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)3;
  }
}

//----- (0064A2D0) --------------------------------------------------------
void __thiscall Char::CloseDoor(Char *this)
{
  Char *v1; // esi@1
  void (*v2)(void); // edx@2
  NiCollisionObject *v3; // esi@2
  NiAVObject *v4; // ST00_4@3

  v1 = this;
  if ( this->m_bIsDoor )
  {
    v2 = (void (*)(void))this->baseclass_0.vfptr[10].GetAbstateColor;
    this->m_fAnimationSpeed = 1.0;
    this->m_eStandMode = 0;
    v2();
    v3 = v1->m_spScene.m_pObject->baseclass_0.m_spCollisionObject.m_pObject;
    if ( v3 )
    {
      v4 = v3->m_pkSceneObject;
      v3[3].baseclass_0.baseclass_0.m_uiRefCount = 3;
      NiCollisionData::SetPrecacheAttributes(v4, NOTEST);
      v3[3].baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)2;
    }
  }
}

//----- (0064A330) --------------------------------------------------------
unsigned int __cdecl MobConditionViewTab::GetEventCode(const char *pcMobInx, CharAniType AniType, unsigned int AniLv)
{
  int v3; // eax@1
  unsigned int v4; // edi@1
  void *v5; // eax@5
  void *v6; // esi@5
  int v7; // edx@6
  char v8; // cl@7
  unsigned int result; // eax@12
  unsigned int v10; // [sp+Ch] [bp-4h]@2

  v3 = *(_DWORD *)(ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable + 56);
  v4 = 0;
  if ( v3 )
    v10 = *(_DWORD *)(v3 + 40);
  else
    v10 = 0;
  if ( v10 <= 0 )
  {
LABEL_12:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobConditionView_MobConditionViewTab>::ms_pkTable + 4), v4);
      v6 = v5;
      if ( v5 )
      {
        v7 = (int)((char *)v5 + 1);
        do
        {
          v8 = *(_BYTE *)v5;
          v5 = (char *)v5 + 1;
        }
        while ( v8 );
        if ( !strncmp((const char *)v6, pcMobInx, (unsigned int)((char *)v5 - v7))
          && *((_DWORD *)v6 + 8) == AniType
          && *((_BYTE *)v6 + 36) == AniLv )
          break;
      }
      ++v4;
      if ( v4 >= v10 )
        goto LABEL_12;
    }
    result = *(_DWORD *)((char *)v6 + 37);
  }
  return result;
}
// A97F08: using guessed type int ITableBase_MobConditionView_MobConditionViewTab___ms_pkTable;

//----- (0064A3C0) --------------------------------------------------------
bool __thiscall CSpactralGlow_Shader_Controller::IsEnable(CSpactralGlow_Shader_Controller *this)
{
  return this->m_bEnable;
}

//----- (0064A3D0) --------------------------------------------------------
bool __thiscall CarToonShader::ToonShader(CarToonShader *this, NiGeometry *pTargetGeo)
{
  NiSkinInstance *v2; // eax@1
  CarToonShader *v3; // edi@1
  bool result; // al@5
  NiProperty *v5; // eax@6
  NiProperty *v6; // esi@6
  NiTimeController *v7; // eax@7
  NiShaderFactory *v8; // ecx@17
  int v9; // eax@17
  NiShader *v10; // esi@21

  v2 = pTargetGeo->m_spSkinInstance.m_pObject;
  v3 = this;
  if ( (!v2 || !v2->m_spSkinPartition.m_pObject) && Char::ms_bEnableCarToon && Engine3D::ms_spCarToon )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))Engine3D::ms_spCarToon->baseclass_0.vfptr[4].__vecDelDtor)(
      pTargetGeo,
      NiRenderer::ms_pkRenderer,
      0,
      20,
      4);
    return 1;
  }
  v5 = NiAVObject::GetProperty(&pTargetGeo->baseclass_0, 8);
  v6 = v5;
  if ( !v5 )
    return 1;
  v7 = v5[1].baseclass_0.m_spControllers.m_pObject;
  if ( !v7->baseclass_0.baseclass_0.vfptr )
    goto LABEL_26;
  if ( (v7->baseclass_0.baseclass_0.m_uiRefCount
     || LODWORD(v7->m_fFrequency)
     || LODWORD(v7->m_fPhase)
     || LODWORD(v7->m_fLoKeyTime))
    && Char::ms_bEnableCarToon
    && Engine3D::ms_spCarToon )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))Engine3D::ms_spCarToon->baseclass_0.vfptr[4].__vecDelDtor)(
      pTargetGeo,
      NiRenderer::ms_pkRenderer,
      0,
      20,
      4);
    return 1;
  }
  if ( !v7->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor )
    goto LABEL_26;
  v8 = NiShaderFactory::GetInstance();
  v9 = (int)&v3->m_strDetailMapShaderName;
  if ( !*(_DWORD *)&v6[1].baseclass_0.m_spControllers.m_pObject->m_uFlags )
    v9 = (int)&v3->m_strBaseMapShaderName;
  if ( *(_DWORD *)(v9 + 20) >= 0x10u )
    v9 = *(_DWORD *)v9;
  v10 = (NiShader *)((int (__stdcall *)(_DWORD, _DWORD, _DWORD))v8->baseclass_0.vfptr[1].__vecDelDtor)(v9, -1, 0);
  if ( v10 )
  {
    NiShaderFactory::DetachShader(pTargetGeo);
    result = NiShaderFactory::AttachShader(pTargetGeo, v10) != 0;
  }
  else
  {
LABEL_26:
    result = 0;
  }
  return result;
}
// A7F85E: using guessed type char Char__ms_bEnableCarToon;

//----- (0064A4E0) --------------------------------------------------------
bool __thiscall CarToonShader::EraseToonShader(CarToonShader *this, NiGeometry *pTargetGeo)
{
  NiSkinInstance *v2; // eax@1
  NiProperty *v3; // eax@3
  NiProperty *v4; // esi@3
  NiTimeController *v5; // eax@4
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // edx@9
  NiShader *v7; // esi@12
  bool result; // al@13
  int v9; // [sp-10h] [bp-14h]@10

  v2 = pTargetGeo->m_spSkinInstance.m_pObject;
  if ( !v2 || !v2->m_spSkinPartition.m_pObject )
  {
    NiShaderFactory::DetachShader(pTargetGeo);
    return 1;
  }
  v3 = NiAVObject::GetProperty(&pTargetGeo->baseclass_0, 8);
  v4 = v3;
  if ( !v3 )
    return 1;
  v5 = v3[1].baseclass_0.m_spControllers.m_pObject;
  if ( v5->baseclass_0.baseclass_0.m_uiRefCount
    || LODWORD(v5->m_fFrequency)
    || LODWORD(v5->m_fPhase)
    || LODWORD(v5->m_fLoKeyTime) )
  {
    NiShaderFactory::DetachShader(pTargetGeo);
    return 1;
  }
  if ( v5->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor
    && ((v6 = NiShaderFactory::GetInstance()->baseclass_0.vfptr[1].__vecDelDtor,
         !*(_DWORD *)&v4[1].baseclass_0.m_spControllers.m_pObject->m_uFlags) ? (v9 = (int)"FxSkinningBaseMap") : (v9 = (int)"FxSkinningHairDetailMap"),
        (v7 = (NiShader *)((int (__stdcall *)(int, signed int, _DWORD))v6)(v9, -1, 0)) != 0) )
  {
    NiShaderFactory::DetachShader(pTargetGeo);
    result = NiShaderFactory::AttachShader(pTargetGeo, v7) != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0064A5B0) --------------------------------------------------------
void __thiscall CSpactralGlow_Shader_Controller::CSpactralGlow_Shader_Controller(CSpactralGlow_Shader_Controller *this)
{
  CSpactralGlow_Shader_Controller *v1; // esi@1
  int v2; // eax@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&CSpactralGlow_Shader_Controller::_vftable_;
  v1->m_spTexture.m_pObject = 0;
  v1->m_pTargetObjNode = 0;
  *(_WORD *)&v1->m_bEnable = 0;
  v1->m_kArryChildGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  v1->m_kArryChildGeometry.m_uiMaxSize = 0;
  v1->m_kArryChildGeometry.m_uiGrowBy = 1;
  v1->m_kArryChildGeometry.m_uiSize = 0;
  v1->m_kArryChildGeometry.m_uiESize = 0;
  v1->m_kArryChildGeometry.m_pBase = 0;
  v2 = (int)&v1->m_kShaderName1;
  v1->m_kShaderName1.baseclass_0._Myres = 15;
  v1->m_kShaderName1.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kShaderName2.baseclass_0._Myres = 15;
  v1->m_kShaderName2.baseclass_0._Mysize = 0;
  v1->m_kShaderName2.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kShaderName1.baseclass_0._Mysize = 0;
  if ( v1->m_kShaderName1.baseclass_0._Myres >= 0x10 )
    v2 = *(_DWORD *)v2;
  *(_BYTE *)v2 = 0;
  v1->m_kShaderName2.baseclass_0._Mysize = 0;
  if ( v1->m_kShaderName2.baseclass_0._Myres < 0x10 )
    v1->m_kShaderName2.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  else
    **(_BYTE **)&v1->m_kShaderName2.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C393C: using guessed type int (__thiscall *NiTArray_NiGeometry _____vftable_)(void *p, char);
// 9C3954: using guessed type int (__thiscall *CSpactralGlow_Shader_Controller___vftable_)(void *p, char);

//----- (0064A680) --------------------------------------------------------
void __thiscall CSpactralGlow_Shader_Controller::_CSpactralGlow_Shader_Controller(CSpactralGlow_Shader_Controller *this)
{
  CSpactralGlow_Shader_Controller *v1; // ebx@1
  unsigned int v2; // ecx@1
  signed int v3; // edx@1
  int v4; // eax@2
  int v5; // eax@5
  void *v6; // ST00_4@11
  NiSourceTexture *v7; // esi@11

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&CSpactralGlow_Shader_Controller::_vftable_;
  v2 = 0;
  v3 = 16;
  v1->m_kShaderName1.baseclass_0._Mysize = 0;
  if ( v1->m_kShaderName1.baseclass_0._Myres < 0x10 )
    v4 = (int)&v1->m_kShaderName1;
  else
    v4 = *(_DWORD *)&v1->m_kShaderName1.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_BYTE *)v4 = 0;
  v1->m_kShaderName2.baseclass_0._Mysize = 0;
  if ( v1->m_kShaderName2.baseclass_0._Myres < 0x10 )
    v5 = (int)&v1->m_kShaderName2;
  else
    v5 = *(_DWORD *)&v1->m_kShaderName2.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_BYTE *)v5 = 0;
  if ( v1->m_kShaderName2.baseclass_0._Myres >= 0x10 )
  {
    operator delete(*(void **)&v1->m_kShaderName2.baseclass_0.___u0.baseclass_0.dummy[0]);
    v3 = 16;
    v2 = 0;
  }
  v1->m_kShaderName2.baseclass_0._Myres = 15;
  v1->m_kShaderName2.baseclass_0._Mysize = v2;
  v1->m_kShaderName2.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->m_kShaderName1.baseclass_0._Myres >= v3 )
  {
    operator delete(*(void **)&v1->m_kShaderName1.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2 = 0;
  }
  v1->m_kShaderName1.baseclass_0._Myres = 15;
  v1->m_kShaderName1.baseclass_0._Mysize = v2;
  v1->m_kShaderName1.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v6 = v1->m_kArryChildGeometry.m_pBase;
  v1->m_kArryChildGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  operator delete__(v6);
  v7 = v1->m_spTexture.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C393C: using guessed type int (__thiscall *NiTArray_NiGeometry _____vftable_)(void *p, char);
// 9C3954: using guessed type int (__thiscall *CSpactralGlow_Shader_Controller___vftable_)(void *p, char);

//----- (0064A780) --------------------------------------------------------
bool __thiscall CSpactralGlow_Shader_Controller::SetTarget(CSpactralGlow_Shader_Controller *this, NiNode *pTargetObjNode)
{
  char *v2; // esi@1
  unsigned int v3; // eax@1
  unsigned int v4; // eax@3
  unsigned int v5; // edi@4
  NiGeometry **v6; // ebx@4
  FindChildGeometry kFindChildGeometry; // [sp+0h] [bp-30h]@3
  int v9; // [sp+2Ch] [bp-4h]@3
  unsigned int i; // [sp+38h] [bp+8h]@3

  this->m_pTargetObjNode = pTargetObjNode;
  v2 = (char *)&this->m_kArryChildGeometry;
  v3 = 0;
  if ( this->m_kArryChildGeometry.m_uiSize )
  {
    do
      this->m_kArryChildGeometry.m_pBase[v3++] = 0;
    while ( v3 < this->m_kArryChildGeometry.m_uiSize );
  }
  this->m_kArryChildGeometry.m_uiSize = 0;
  this->m_kArryChildGeometry.m_uiESize = 0;
  kFindChildGeometry.baseclass_0.m_pCallBack = 0;
  kFindChildGeometry.baseclass_0.m_nCurLevel = -1;
  kFindChildGeometry.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindChildGeometry::_vftable_;
  kFindChildGeometry.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  kFindChildGeometry.m_kArryGeometry.m_uiMaxSize = 0;
  kFindChildGeometry.m_kArryGeometry.m_uiGrowBy = 1;
  kFindChildGeometry.m_kArryGeometry.m_uiSize = 0;
  kFindChildGeometry.m_kArryGeometry.m_uiESize = 0;
  kFindChildGeometry.m_kArryGeometry.m_pBase = 0;
  v9 = 1;
  Ns_TourScene::TourScene(&kFindChildGeometry.baseclass_0, this->m_pTargetObjNode, &NiGeometry::m_RTTI, this);
  v4 = 0;
  i = 0;
  if ( kFindChildGeometry.m_kArryGeometry.m_uiSize > 0 )
  {
    do
    {
      v5 = *((_DWORD *)v2 + 3);
      v6 = &kFindChildGeometry.m_kArryGeometry.m_pBase[v4];
      if ( v5 < *((_DWORD *)v2 + 2)
        || (NiTArray<NiGeometry__>::SetSize(
              (NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *)v2,
              v5 + *((_DWORD *)v2 + 5)),
            v4 = i,
            v5 < *((_DWORD *)v2 + 2)) )
      {
        if ( v5 < *((_DWORD *)v2 + 3) )
        {
          if ( *v6 )
          {
            if ( !*(_DWORD *)(*((_DWORD *)v2 + 1) + 4 * v5) )
              ++*((_DWORD *)v2 + 4);
          }
          else
          {
            if ( *(_DWORD *)(*((_DWORD *)v2 + 1) + 4 * v5) )
              --*((_DWORD *)v2 + 4);
          }
        }
        else
        {
          *((_DWORD *)v2 + 3) = v5 + 1;
          if ( *v6 )
            ++*((_DWORD *)v2 + 4);
        }
        *(_DWORD *)(*((_DWORD *)v2 + 1) + 4 * v5) = *v6;
      }
      ++v4;
      i = v4;
    }
    while ( v4 < kFindChildGeometry.m_kArryGeometry.m_uiSize );
  }
  kFindChildGeometry.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  operator delete__(kFindChildGeometry.m_kArryGeometry.m_pBase);
  return 1;
}
// 9C393C: using guessed type int (__thiscall *NiTArray_NiGeometry _____vftable_)(void *p, char);
// 9C3944: using guessed type int (__stdcall *FindChildGeometry___vftable_)(int pGeome, int _pData);

//----- (0064A8C0) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindChildGeometry::ProcessData(FindChildGeometry *this, NiAVObject *_pkObject, void *_pData)
{
  NiAVObject *v3; // esi@1
  FindChildGeometry *v4; // edi@1
  int v5; // eax@2
  int v7; // esi@6
  unsigned int v8; // edi@6

  v3 = _pkObject;
  v4 = this;
  if ( _pkObject )
  {
    v5 = ((int (__thiscall *)(_DWORD))_pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(_pkObject);
    if ( v5 )
    {
      while ( (NiRTTI *)v5 != &NiGeometry::m_RTTI )
      {
        v5 = *(_DWORD *)(v5 + 4);
        if ( !v5 )
          return 1;
      }
      _pkObject = v3;
      v7 = (int)&v4->m_kArryGeometry;
      v8 = v4->m_kArryGeometry.m_uiSize;
      if ( v8 >= *(_DWORD *)(v7 + 8) )
        NiTArray<NiGeometry__>::SetSize(
          (NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *)v7,
          v8 + *(_DWORD *)(v7 + 20));
      NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)v7, v8, (NiVBChip *const *)&_pkObject);
    }
  }
  return 1;
}

//----- (0064A930) --------------------------------------------------------
void __thiscall CarToonShader::_CarToonShader(CarToonShader *this)
{
  CarToonShader *v1; // esi@1

  v1 = this;
  this->vfptr = (CarToonShaderVtbl *)&CarToonShader::_vftable_;
  if ( this->m_strDetailMapShaderName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_strDetailMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_strDetailMapShaderName.baseclass_0._Myres = 15;
  v1->m_strDetailMapShaderName.baseclass_0._Mysize = 0;
  v1->m_strDetailMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->m_strBaseMapShaderName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_strBaseMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_strBaseMapShaderName.baseclass_0._Mysize = 0;
  v1->m_strBaseMapShaderName.baseclass_0._Myres = 15;
  v1->m_strBaseMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}
// 9C395C: using guessed type int (__thiscall *CarToonShader___vftable_)(void *p, char);

//----- (0064A980) --------------------------------------------------------
bool __thiscall CarToonShader::SetCartoonShader(CarToonShader *this, NiNode *pTargetObjNode)
{
  CarToonShader *v2; // ebx@1
  unsigned int v3; // edi@1
  unsigned int v4; // ecx@3
  NiNode *v5; // eax@4
  unsigned int v6; // edi@5
  FindChildGeometry kFindChildGeometry; // [sp+0h] [bp-78h]@1
  Find_EF_ExtraData kFindExtraData; // [sp+24h] [bp-54h]@3
  FindChildGeometry kFindGeo; // [sp+48h] [bp-30h]@5
  int v11; // [sp+74h] [bp-4h]@1
  unsigned int i; // [sp+80h] [bp+8h]@3

  v2 = this;
  kFindChildGeometry.baseclass_0.m_pCallBack = 0;
  kFindChildGeometry.baseclass_0.m_nCurLevel = -1;
  kFindChildGeometry.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindChildGeometry::_vftable_;
  kFindChildGeometry.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  kFindChildGeometry.m_kArryGeometry.m_uiMaxSize = 0;
  kFindChildGeometry.m_kArryGeometry.m_uiGrowBy = 1;
  kFindChildGeometry.m_kArryGeometry.m_uiSize = 0;
  kFindChildGeometry.m_kArryGeometry.m_uiESize = 0;
  kFindChildGeometry.m_kArryGeometry.m_pBase = 0;
  v11 = 1;
  Ns_TourScene::TourScene(&kFindChildGeometry.baseclass_0, pTargetObjNode, &NiGeometry::m_RTTI, this);
  v3 = 0;
  if ( kFindChildGeometry.m_kArryGeometry.m_uiSize > 0 )
  {
    do
      CarToonShader::ToonShader(v2, kFindChildGeometry.m_kArryGeometry.m_pBase[v3++]);
    while ( v3 < kFindChildGeometry.m_kArryGeometry.m_uiSize );
  }
  kFindExtraData.baseclass_0.m_pCallBack = 0;
  kFindExtraData.baseclass_0.m_nCurLevel = -1;
  kFindExtraData.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Find_EF_ExtraData::_vftable_;
  kFindExtraData.m_kArryAVObj.vfptr = (NiTArray<NiNode *>Vtbl *)&NiTArray<NiNode__>::_vftable_;
  kFindExtraData.m_kArryAVObj.m_uiMaxSize = 0;
  kFindExtraData.m_kArryAVObj.m_uiGrowBy = 1;
  kFindExtraData.m_kArryAVObj.m_uiSize = 0;
  kFindExtraData.m_kArryAVObj.m_uiESize = 0;
  kFindExtraData.m_kArryAVObj.m_pBase = 0;
  LOBYTE(v11) = 3;
  Ns_TourScene::TourScene(&kFindExtraData.baseclass_0, pTargetObjNode, &NiNode::m_RTTI, v2);
  v4 = 0;
  i = 0;
  if ( kFindExtraData.m_kArryAVObj.m_uiSize > 0 )
  {
    do
    {
      v5 = kFindExtraData.m_kArryAVObj.m_pBase[v4];
      if ( v5 )
      {
        kFindGeo.baseclass_0.m_pCallBack = 0;
        kFindGeo.baseclass_0.m_nCurLevel = -1;
        kFindGeo.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindChildGeometry::_vftable_;
        kFindGeo.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
        kFindGeo.m_kArryGeometry.m_uiMaxSize = 0;
        kFindGeo.m_kArryGeometry.m_uiGrowBy = 1;
        kFindGeo.m_kArryGeometry.m_uiSize = 0;
        kFindGeo.m_kArryGeometry.m_uiESize = 0;
        kFindGeo.m_kArryGeometry.m_pBase = 0;
        LOBYTE(v11) = 5;
        Ns_TourScene::TourScene(&kFindGeo.baseclass_0, v5, &NiGeometry::m_RTTI, v2);
        v6 = 0;
        if ( kFindGeo.m_kArryGeometry.m_uiSize > 0 )
        {
          do
            CarToonShader::EraseToonShader(v2, kFindGeo.m_kArryGeometry.m_pBase[v6++]);
          while ( v6 < kFindGeo.m_kArryGeometry.m_uiSize );
        }
        LOBYTE(v11) = 3;
        kFindGeo.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
        operator delete__(kFindGeo.m_kArryGeometry.m_pBase);
        v4 = i;
      }
      ++v4;
      i = v4;
    }
    while ( v4 < kFindExtraData.m_kArryAVObj.m_uiSize );
  }
  kFindExtraData.m_kArryAVObj.vfptr = (NiTArray<NiNode *>Vtbl *)&NiTArray<NiNode__>::_vftable_;
  operator delete__(kFindExtraData.m_kArryAVObj.m_pBase);
  kFindChildGeometry.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  operator delete__(kFindChildGeometry.m_kArryGeometry.m_pBase);
  return 1;
}
// 9C3934: using guessed type int (__thiscall *NiTArray_NiNode _____vftable_)(void *p, char);
// 9C393C: using guessed type int (__thiscall *NiTArray_NiGeometry _____vftable_)(void *p, char);
// 9C3944: using guessed type int (__stdcall *FindChildGeometry___vftable_)(int pGeome, int _pData);
// 9C394C: using guessed type int (__stdcall *Find_EF_ExtraData___vftable_)(int _pkObject, int _pData);

//----- (0064AB20) --------------------------------------------------------
bool __thiscall CSpactralGlow_Shader_Controller::ShaderSetting_Geometry(CSpactralGlow_Shader_Controller *this, NiGeometry *pTargetGeo)
{
  CSpactralGlow_Shader_Controller *v2; // edi@1
  const char *v3; // edx@2
  NiSkinInstance *v4; // eax@4
  int v5; // eax@6
  unsigned int v6; // edi@6
  const char *v7; // edx@7
  NiShaderFactory *v8; // eax@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@11
  NiShader *v10; // eax@13
  bool result; // al@16
  unsigned int v12; // [sp-Ch] [bp-3Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strShaderName; // [sp+4h] [bp-2Ch]@4
  unsigned int v14; // [sp+20h] [bp-10h]@1
  int v15; // [sp+2Ch] [bp-4h]@4
  int v16; // [sp+30h] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v12 = (unsigned int)&v16 ^ __security_cookie;
  v2 = this;
  if ( this->m_kShaderName1.baseclass_0._Myres < 0x10 )
    v3 = (const char *)&this->m_kShaderName1;
  else
    v3 = *(const char **)&this->m_kShaderName1.baseclass_0.___u0.baseclass_0.dummy[0];
  strShaderName.baseclass_0._Myres = 15;
  strShaderName.baseclass_0._Mysize = 0;
  strShaderName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strShaderName, v3, strlen(v3));
  v4 = pTargetGeo->m_spSkinInstance.m_pObject;
  v15 = 0;
  if ( v4 && v4->m_spSkinPartition.m_pObject )
  {
    v6 = 16;
  }
  else
  {
    v5 = (int)&v2->m_kShaderName2;
    v6 = 16;
    if ( *(_DWORD *)(v5 + 20) < 0x10u )
      v7 = (const char *)v5;
    else
      v7 = *(const char **)v5;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strShaderName, v7, strlen(v7));
  }
  v8 = NiShaderFactory::GetInstance();
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strShaderName;
  if ( strShaderName.baseclass_0._Myres < v6 )
    v9 = &strShaderName;
  v10 = (NiShader *)((int (__thiscall *)(NiShaderFactory *, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *, signed int, _DWORD, unsigned int))v8->baseclass_0.vfptr[1].__vecDelDtor)(
                      v8,
                      v9,
                      -1,
                      0,
                      v12);
  if ( !v10 )
  {
    if ( strShaderName.baseclass_0._Myres >= v6 )
      operator delete(*(void **)&strShaderName);
    return 0;
  }
  if ( NiShaderFactory::AttachShader(pTargetGeo, v10) )
  {
    if ( strShaderName.baseclass_0._Myres >= v6 )
      operator delete(*(void **)&strShaderName);
    result = 1;
  }
  else
  {
    if ( strShaderName.baseclass_0._Myres < v6 )
      return 0;
    operator delete(*(void **)&strShaderName);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0064AC70) --------------------------------------------------------
void __thiscall CSpactralGlow_Shader_Controller::SetUseShaderName(CSpactralGlow_Shader_Controller *this, char *pcShaderName1, char *pcShaderName2)
{
  CSpactralGlow_Shader_Controller *v3; // esi@1

  v3 = this;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_kShaderName1,
    pcShaderName1,
    strlen(pcShaderName1));
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v3->m_kShaderName2,
    pcShaderName2,
    strlen(pcShaderName2));
}

//----- (0064ACC0) --------------------------------------------------------
bool __thiscall CarToonShader::SetOutLine(CarToonShader *this, bool bOutLine)
{
  CarToonShader *v2; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ecx@1
  NiShaderFactory *v4; // eax@2
  int v5; // ecx@3

  v2 = this;
  v3 = &this->m_strBaseMapShaderName;
  if ( bOutLine )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      v3,
      "FxSkinningBaseMapWithOutLine",
      0x1Cu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v2->m_strDetailMapShaderName,
      "FxSkinningDMWithOutLine",
      0x17u);
    v4 = NiShaderFactory::GetInstance();
    if ( v2->m_strBaseMapShaderName.baseclass_0._Myres < 0x10 )
      v5 = (int)&v2->m_strBaseMapShaderName;
    else
      v5 = *(_DWORD *)&v2->m_strBaseMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( !((int (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[1].__vecDelDtor)(v4, v5, -1, 0) )
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v2->m_strBaseMapShaderName,
        "FxSkinningBaseMap",
        0x11u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v2->m_strDetailMapShaderName,
        "FxSkinningHairDetailMap",
        0x17u);
      return 0;
    }
  }
  else
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v3, "FxSkinningBaseMap", 0x11u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v2->m_strDetailMapShaderName,
      "FxSkinningHairDetailMap",
      0x17u);
  }
  v2->m_bOutLineEnable = bOutLine;
  return 1;
}

//----- (0064AD70) --------------------------------------------------------
bool __thiscall CSpactralGlow_Shader_Controller::ShaderSetting(CSpactralGlow_Shader_Controller *this)
{
  CSpactralGlow_Shader_Controller *v1; // esi@1
  unsigned int v2; // edi@1
  bool result; // al@4

  v1 = this;
  CSpactralGlow_Shader_Controller::SetTarget(this, this->m_pTargetObjNode);
  v2 = 0;
  if ( v1->m_kArryChildGeometry.m_uiSize )
  {
    while ( CSpactralGlow_Shader_Controller::ShaderSetting_Geometry(v1, v1->m_kArryChildGeometry.m_pBase[v2]) )
    {
      ++v2;
      if ( v2 >= v1->m_kArryChildGeometry.m_uiSize )
        goto LABEL_4;
    }
    result = 0;
  }
  else
  {
LABEL_4:
    result = 1;
  }
  return result;
}

//----- (0064ADB0) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall Find_EF_ExtraData::ProcessData(Find_EF_ExtraData *this, NiAVObject *_pkObject, void *_pData)
{
  NiAVObject *v3; // ebx@1
  NiAVObject **v4; // edi@1
  int v5; // eax@2
  char *v6; // eax@7
  void *v7; // ecx@8
  signed int v8; // eax@8
  signed int v9; // esi@8
  Find_EF_ExtraData *v10; // ebx@9
  bool v11; // cf@9
  NiVBChip *v12; // ecx@11
  unsigned int v13; // edi@13
  signed int v14; // eax@15
  const char *v15; // eax@21
  Find_EF_ExtraData *v16; // esi@23
  unsigned int v17; // edi@23
  NiVBChip *element; // [sp+0h] [bp-58h]@13
  Find_EF_ExtraData *v20; // [sp+4h] [bp-54h]@1
  NiAVObject *v21; // [sp+8h] [bp-50h]@1
  NsFindObjectByName kFindObject; // [sp+Ch] [bp-4Ch]@8
  unsigned int v23; // [sp+48h] [bp-10h]@1
  int v24; // [sp+54h] [bp-4h]@8
  int v25; // [sp+58h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v3 = _pkObject;
  v4 = 0;
  v20 = this;
  v21 = _pkObject;
  if ( _pkObject )
  {
    v5 = ((int (__thiscall *)(NiAVObject *))_pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(_pkObject);
    if ( v5 )
    {
      while ( (NiRTTI *)v5 != &NiNode::m_RTTI )
      {
        v5 = *(_DWORD *)(v5 + 4);
        if ( !v5 )
          return 1;
      }
      if ( NiObjectNET::GetExtraData(&_pkObject->baseclass_0, "#EF") )
      {
        v6 = _pkObject->baseclass_0.m_pcName;
        if ( v6 )
        {
          kFindObject.baseclass_0.m_pCallBack = 0;
          kFindObject.baseclass_0.m_nCurLevel = -1;
          kFindObject.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&NsFindObjectByName::_vftable_;
          kFindObject.m_szName.baseclass_0._Myres = 15;
          kFindObject.m_szName.baseclass_0._Mysize = 0;
          kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          kFindObject.m_vecObject.baseclass_0._Mylast = 0;
          kFindObject.m_vecObject.baseclass_0._Myend = 0;
          v24 = 0;
          NsFindObjectByName::FindObject(&kFindObject, (NiNode *)_pkObject, v6);
          v7 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
          v8 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                          - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
          v9 = 0;
          if ( v8 > 0 )
          {
            v10 = v20;
            v11 = (unsigned int)v8 > 0;
            do
            {
              if ( v11 )
                v12 = (NiVBChip *)*((_DWORD *)v7 + v9);
              else
                v12 = 0;
              v13 = v10->m_kArryAVObj.m_uiSize;
              element = v12;
              if ( v13 >= v10->m_kArryAVObj.m_uiMaxSize )
                NiTArray<NiGeometry__>::SetSize(
                  (NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *)&v10->m_kArryAVObj,
                  v13 + v10->m_kArryAVObj.m_uiGrowBy);
              NiTArray<NiCollisionGroup::Record__>::SetAt((NiTArray<NiVBChip *> *)&v10->m_kArryAVObj, v13, &element);
              v7 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
              ++v9;
              v14 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                               - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
              v4 = 0;
              v11 = v9 < (unsigned int)v14;
            }
            while ( v9 < v14 );
            v3 = v21;
          }
          v24 = -1;
          if ( v7 != v4 )
            operator delete(v7);
          *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = v4;
          kFindObject.m_vecObject.baseclass_0._Mylast = v4;
          kFindObject.m_vecObject.baseclass_0._Myend = v4;
          if ( kFindObject.m_szName.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0]);
        }
      }
      v15 = v3->baseclass_0.m_pcName;
      if ( (NiAVObject **)v15 != v4 && (NiAVObject **)strcmp(v15, "NOOUTLINE") == v4 )
      {
        v16 = v20;
        v17 = v20->m_kArryAVObj.m_uiSize;
        v21 = v3;
        if ( v17 >= v20->m_kArryAVObj.m_uiMaxSize )
          NiTArray<NiGeometry__>::SetSize(
            (NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *)&v20->m_kArryAVObj,
            v17 + v20->m_kArryAVObj.m_uiGrowBy);
        NiTArray<NiCollisionGroup::Record__>::SetAt(
          (NiTArray<NiVBChip *> *)&v16->m_kArryAVObj,
          v17,
          (NiVBChip *const *)&v21);
      }
    }
  }
  return 1;
}
// 9C335C: using guessed type int (__stdcall *NsFindObjectByName___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;

//----- (0064AF80) --------------------------------------------------------
void __thiscall CarToonShader::CarToonShader(CarToonShader *this)
{
  CarToonShader *v1; // ebx@1
  NiShaderFactory *v2; // eax@1
  int v3; // ecx@2

  v1 = this;
  this->vfptr = (CarToonShaderVtbl *)&CarToonShader::_vftable_;
  this->m_strBaseMapShaderName.baseclass_0._Myres = 15;
  this->m_strBaseMapShaderName.baseclass_0._Mysize = 0;
  this->m_strBaseMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_strDetailMapShaderName.baseclass_0._Myres = 15;
  this->m_strDetailMapShaderName.baseclass_0._Mysize = 0;
  this->m_strDetailMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_strBaseMapShaderName,
    "FxSkinningBaseMapWithOutLine",
    0x1Cu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v1->m_strDetailMapShaderName,
    "FxSkinningDMWithOutLine",
    0x17u);
  v2 = NiShaderFactory::GetInstance();
  if ( v1->m_strBaseMapShaderName.baseclass_0._Myres < 0x10 )
    v3 = (int)&v1->m_strBaseMapShaderName;
  else
    v3 = *(_DWORD *)&v1->m_strBaseMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( ((int (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(v2, v3, -1, 0) )
  {
    v1->m_bOutLineEnable = 1;
  }
  else
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v1->m_strBaseMapShaderName,
      "FxSkinningBaseMap",
      0x11u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v1->m_strDetailMapShaderName,
      "FxSkinningHairDetailMap",
      0x17u);
  }
}
// 9C395C: using guessed type int (__thiscall *CarToonShader___vftable_)(void *p, char);

//----- (0064B060) --------------------------------------------------------
CarToonShader *__cdecl CarToonShader::GetInstance()
{
  if ( !(_S3_7 & 1) )
  {
    _S3_7 |= 1u;
    CarToonShader::CarToonShader(&shader);
    atexit(CarToonShader::GetInstance_::_2_::_dynamic_atexit_destructor_for__shader__);
  }
  return &shader;
}

//----- (0064B0D0) --------------------------------------------------------
bool __thiscall CarToonShader::SetExceptOutLineCartoonShader(CarToonShader *this, NiNode *pTargetObjNode)
{
  CarToonShader *v2; // esi@1
  bool v3; // ST14_1@1

  v2 = this;
  v3 = this->m_bOutLineEnable;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_strBaseMapShaderName,
    "FxSkinningBaseMap",
    0x11u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v2->m_strDetailMapShaderName,
    "FxSkinningHairDetailMap",
    0x17u);
  v2->m_bOutLineEnable = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v2->m_strBaseMapShaderName,
    "FxSkinningBaseMap",
    0x11u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v2->m_strDetailMapShaderName,
    "FxSkinningHairDetailMap",
    0x17u);
  CarToonShader::SetCartoonShader(v2, pTargetObjNode);
  CarToonShader::SetOutLine(v2, v3);
  return 1;
}

//----- (0064B140) --------------------------------------------------------
bool __thiscall CSpactralGlow_Shader_Controller::NormalSetting(CSpactralGlow_Shader_Controller *this)
{
  CSpactralGlow_Shader_Controller *v1; // esi@1
  unsigned int v2; // edi@1
  bool result; // al@7

  v1 = this;
  CSpactralGlow_Shader_Controller::SetTarget(this, this->m_pTargetObjNode);
  v2 = 0;
  if ( v1->m_kArryChildGeometry.m_uiSize )
  {
    while ( NiShaderFactory::DetachShader(v1->m_kArryChildGeometry.m_pBase[v2]) )
    {
      ++v2;
      if ( v2 >= v1->m_kArryChildGeometry.m_uiSize )
        goto LABEL_4;
    }
    result = 0;
  }
  else
  {
LABEL_4:
    if ( !(_S3_7 & 1) )
    {
      _S3_7 |= 1u;
      CarToonShader::CarToonShader(&shader);
      atexit(CarToonShader::GetInstance_::_2_::_dynamic_atexit_destructor_for__shader__);
    }
    CarToonShader::SetCartoonShader(&shader, v1->m_pTargetObjNode);
    result = 1;
  }
  return result;
}

//----- (0064B200) --------------------------------------------------------
bool __thiscall CSpactralGlow_Shader_Controller::SetEnable(CSpactralGlow_Shader_Controller *this, bool bEnalbe)
{
  CSpactralGlow_Shader_Controller *v2; // esi@1
  NiShaderFactory *v3; // edi@2
  int v4; // eax@2
  int v5; // eax@5

  v2 = this;
  if ( !this->m_bHardwareSupport )
  {
    v3 = NiShaderFactory::GetInstance();
    v4 = (int)&v2->m_kShaderName1;
    if ( v2->m_kShaderName1.baseclass_0._Myres >= 0x10 )
      v4 = *(_DWORD *)v4;
    if ( ((int (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3, v4, -1, 0) )
    {
      v5 = (int)&v2->m_kShaderName2;
      if ( v2->m_kShaderName2.baseclass_0._Myres >= 0x10 )
        v5 = *(_DWORD *)v5;
      if ( ((int (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3, v5, -1, 0) )
        v2->m_bHardwareSupport = 1;
    }
    if ( !v2->m_bHardwareSupport )
      return 0;
  }
  if ( !v2->m_pTargetObjNode )
    return 0;
  if ( bEnalbe )
  {
    if ( CSpactralGlow_Shader_Controller::ShaderSetting(v2) )
    {
      v2->m_bEnable = 1;
      return 1;
    }
    return 0;
  }
  if ( !CSpactralGlow_Shader_Controller::NormalSetting(v2) )
    return 0;
  v2->m_bEnable = 0;
  return 1;
}

//----- (0064B2A0) --------------------------------------------------------
bool __thiscall CSpactralGlow_Shader_Controller::SetupRecursive(CSpactralGlow_Shader_Controller *this, NiNode *pTarget)
{
  CSpactralGlow_Shader_Controller *v2; // esi@1
  unsigned int v3; // edi@1
  bool result; // al@4
  FindChildGeometry kFindChildGeometry; // [sp+0h] [bp-30h]@1
  int v6; // [sp+2Ch] [bp-4h]@1

  v2 = this;
  v3 = 0;
  kFindChildGeometry.baseclass_0.m_pCallBack = 0;
  kFindChildGeometry.baseclass_0.m_nCurLevel = -1;
  kFindChildGeometry.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindChildGeometry::_vftable_;
  kFindChildGeometry.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  kFindChildGeometry.m_kArryGeometry.m_uiMaxSize = 0;
  kFindChildGeometry.m_kArryGeometry.m_uiGrowBy = 1;
  kFindChildGeometry.m_kArryGeometry.m_uiSize = 0;
  kFindChildGeometry.m_kArryGeometry.m_uiESize = 0;
  kFindChildGeometry.m_kArryGeometry.m_pBase = 0;
  v6 = 1;
  Ns_TourScene::TourScene(&kFindChildGeometry.baseclass_0, pTarget, &NiGeometry::m_RTTI, this);
  if ( kFindChildGeometry.m_kArryGeometry.m_uiSize <= 0 )
  {
LABEL_4:
    CSpactralGlow_Shader_Controller::SetEnable(v2, v2->m_bEnable);
    kFindChildGeometry.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
    operator delete__(kFindChildGeometry.m_kArryGeometry.m_pBase);
    result = 1;
  }
  else
  {
    while ( CSpactralGlow_Shader_Controller::ShaderSetting_Geometry(v2, kFindChildGeometry.m_kArryGeometry.m_pBase[v3]) )
    {
      ++v3;
      if ( v3 >= kFindChildGeometry.m_kArryGeometry.m_uiSize )
        goto LABEL_4;
    }
    kFindChildGeometry.m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
    operator delete__(kFindChildGeometry.m_kArryGeometry.m_pBase);
    result = 0;
  }
  return result;
}
// 9C393C: using guessed type int (__thiscall *NiTArray_NiGeometry _____vftable_)(void *p, char);
// 9C3944: using guessed type int (__stdcall *FindChildGeometry___vftable_)(int pGeome, int _pData);

//----- (0064B390) --------------------------------------------------------
void __thiscall NiTArray<NiCollisionGroup::Record__>::SetAt(NiTArray<NiVBChip *> *this, unsigned int uiIndex, NiVBChip *const *element)
{
  NiVBChip *const *v3; // edx@3
  NiVBChip **v4; // esi@5

  if ( uiIndex < this->m_uiMaxSize )
  {
    if ( uiIndex < this->m_uiSize )
    {
      v3 = element;
      v4 = this->m_pBase;
      if ( *element )
      {
        if ( !v4[uiIndex] )
        {
          ++this->m_uiESize;
          this->m_pBase[uiIndex] = *element;
          return;
        }
      }
      else
      {
        if ( v4[uiIndex] )
          --this->m_uiESize;
      }
    }
    else
    {
      this->m_uiSize = uiIndex + 1;
      v3 = element;
      if ( *element )
      {
        ++this->m_uiESize;
        this->m_pBase[uiIndex] = *element;
        return;
      }
    }
    this->m_pBase[uiIndex] = *v3;
  }
}

//----- (0064B400) --------------------------------------------------------
void *__thiscall NiTArray<NiNode__>::_scalar_deleting_destructor_(NiTArray<NiNode *> *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pBase;
  this->vfptr = (NiTArray<NiNode *>Vtbl *)&NiTArray<NiNode__>::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C3934: using guessed type int (__thiscall *NiTArray_NiNode _____vftable_)(void *p, char);

//----- (0064B430) --------------------------------------------------------
void *__thiscall NiTArray<NiGeometry__>::_scalar_deleting_destructor_(NiTArray<NiGeometry *> *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pBase;
  this->vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C393C: using guessed type int (__thiscall *NiTArray_NiGeometry _____vftable_)(void *p, char);

//----- (0064B460) --------------------------------------------------------
void __thiscall FindChildGeometry::_FindChildGeometry(FindChildGeometry *this)
{
  FindChildGeometry *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = this;
  v2 = this->m_kArryGeometry.m_pBase;
  this->m_kArryGeometry.vfptr = (NiTArray<NiGeometry *>Vtbl *)&NiTArray<NiGeometry__>::_vftable_;
  operator delete__(v2);
  v1->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C393C: using guessed type int (__thiscall *NiTArray_NiGeometry _____vftable_)(void *p, char);

//----- (0064B480) --------------------------------------------------------
void __thiscall Find_EF_ExtraData::_Find_EF_ExtraData(Find_EF_ExtraData *this)
{
  Find_EF_ExtraData *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = this;
  v2 = this->m_kArryAVObj.m_pBase;
  this->m_kArryAVObj.vfptr = (NiTArray<NiNode *>Vtbl *)&NiTArray<NiNode__>::_vftable_;
  operator delete__(v2);
  v1->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C3934: using guessed type int (__thiscall *NiTArray_NiNode _____vftable_)(void *p, char);

//----- (0064B4A0) --------------------------------------------------------
void *__thiscall CSpactralGlow_Shader_Controller::_scalar_deleting_destructor_(CSpactralGlow_Shader_Controller *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CSpactralGlow_Shader_Controller::_CSpactralGlow_Shader_Controller(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0064B4D0) --------------------------------------------------------
void *__thiscall CarToonShader::_vector_deleting_destructor_(CarToonShader *this, unsigned int a2)
{
  CarToonShader *v2; // esi@1

  v2 = this;
  this->vfptr = (CarToonShaderVtbl *)&CarToonShader::_vftable_;
  if ( this->m_strDetailMapShaderName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_strDetailMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_strDetailMapShaderName.baseclass_0._Myres = 15;
  v2->m_strDetailMapShaderName.baseclass_0._Mysize = 0;
  v2->m_strDetailMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v2->m_strBaseMapShaderName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v2->m_strBaseMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_strBaseMapShaderName.baseclass_0._Mysize = 0;
  v2->m_strBaseMapShaderName.baseclass_0._Myres = 15;
  v2->m_strBaseMapShaderName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C395C: using guessed type int (__thiscall *CarToonShader___vftable_)(void *p, char);

//----- (0064B540) --------------------------------------------------------
char __cdecl CharClass::GetRace(char kClassID)
{
  char result; // al@2

  switch ( kClassID )
  {
    case 1:
    case 3:
    case 5:
    case 6:
    case 8:
    case 9:
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      result = 1;
      break;
    case 0xB:
    case 0xD:
    case 0xF:
    case 0x1A:
    case 0x1B:
      result = 2;
      break;
    case 0x10:
    case 0x12:
    case 0x14:
      result = 3;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (0064B5D0) --------------------------------------------------------
bool __cdecl CharClass::TestChrBaseClassMask(__int64 kClassMask, char kBaseClassID)
{
  signed int v2; // esi@1
  signed int v3; // edx@1
  char v4; // al@5

  v2 = 1;
  v3 = 1;
  while ( 1 )
  {
    v2 *= 2;
    if ( (unsigned int)kClassMask & v2 && (_BYTE)v3 )
    {
      switch ( (unsigned __int8)v3 )
      {
        case 1u:
        case 2u:
        case 3u:
        case 4u:
        case 5u:
          v4 = 1;
          break;
        case 6u:
        case 7u:
        case 8u:
        case 9u:
        case 0xAu:
          v4 = 6;
          break;
        case 0xBu:
        case 0xCu:
        case 0xDu:
        case 0xEu:
        case 0xFu:
          v4 = 11;
          break;
        case 0x10u:
        case 0x11u:
        case 0x12u:
        case 0x13u:
        case 0x14u:
          v4 = 16;
          break;
        case 0x15u:
        case 0x16u:
        case 0x17u:
        case 0x18u:
        case 0x19u:
          v4 = 21;
          break;
        case 0x1Au:
        case 0x1Bu:
          v4 = 26;
          break;
        default:
          v4 = 0;
          break;
      }
      if ( v4 == kBaseClassID )
        break;
    }
    ++v3;
    if ( (unsigned int)v3 > 0x20 )
      return 0;
  }
  return 1;
}

//----- (0064B6B0) --------------------------------------------------------
char __cdecl CharClass::GetMinimumChrClass(__int64 kClassMask, char kBaseClassID)
{
  signed int v2; // ebx@1
  char result; // al@4

  v2 = (unsigned __int8)kBaseClassID;
  if ( (signed int)(unsigned __int8)kBaseClassID >= 28 )
  {
LABEL_4:
    result = 0;
  }
  else
  {
    while ( !(kClassMask & (1i64 << v2)) )
    {
      ++v2;
      if ( v2 >= 28 )
        goto LABEL_4;
    }
    result = v2;
  }
  return result;
}

//----- (0064B6F0) --------------------------------------------------------
#error "FFFFFFFF: too complex function (funcsize=161)"

//----- (0064B870) --------------------------------------------------------
void __cdecl CharClass::GetEquipableClassStr(__int64 kClassMask, char *pcStr, unsigned int uiStrLen)
{
  char *v3; // edi@1
  int v4; // esi@2
  signed int v5; // ebx@2
  void *v6; // eax@4
  const char *v7; // eax@5
  char *v8; // ecx@10
  char v9; // dl@11
  const void *v10; // ecx@13
  char v11; // dl@14
  unsigned int v12; // eax@15
  const void *v13; // esi@15
  void *v14; // edi@15
  char v15; // cl@16
  int ClassCount; // [sp+4h] [bp-4h]@7

  v3 = pcStr;
  if ( pcStr )
  {
    *pcStr = 0;
    v4 = 0;
    v5 = 1;
    do
    {
      if ( kClassMask & (1i64 << v5) )
      {
        v6 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
               (unsigned __int8)v5);
        if ( v6 )
        {
          v7 = (char *)v6 + 21;
          if ( !v7 )
            goto LABEL_18;
        }
        else
        {
          v7 = &byte_9788EB;
        }
        ClassCount = v4 + 1;
        if ( v4 + 1 > 2 || strlen(v7) + strlen(v3) + 2 >= uiStrLen )
          return;
        if ( ClassCount > 1 )
        {
          v8 = pcStr - 1;
          do
            v9 = (v8++)[1];
          while ( v9 );
          *(_WORD *)v8 = word_9C3960;
          v8[2] = byte_9C3962;
        }
        v10 = v7;
        do
          v11 = *v7++;
        while ( v11 );
        v12 = v7 - v10;
        v13 = v10;
        v14 = pcStr - 1;
        do
        {
          v15 = *((_BYTE *)v14 + 1);
          v14 = (char *)v14 + 1;
        }
        while ( v15 );
        memcpy(v14, v13, v12);
        v4 = ClassCount;
        v3 = pcStr;
      }
LABEL_18:
      ++v5;
    }
    while ( v5 < 28 );
  }
}
// 9C3960: using guessed type __int16 word_9C3960;
// 9C3962: using guessed type char byte_9C3962;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (0064B970) --------------------------------------------------------
void __cdecl CharClass::GetEquipableClassSortStr(__int64 kClassMask, char *pcStr, unsigned int uiStrLen)
{
  char *v3; // esi@1
  unsigned int v4; // edi@1
  bool v5; // al@1
  char *v6; // eax@7
  char *v7; // esi@7
  char v8; // cl@8
  char v9; // al@10
  unsigned int v10; // edi@12
  char *v11; // eax@12
  int v12; // edx@12
  char v13; // cl@13
  char *v14; // edi@15
  char v15; // al@16
  char *v16; // eax@17
  char *v17; // ecx@17
  char v18; // dl@18
  unsigned int v19; // eax@19
  const void *v20; // edx@19
  void *v21; // esi@19
  char v22; // cl@20
  void *v23; // eax@22
  const char *v24; // edx@22
  char *v25; // eax@25
  const void *v26; // edi@25
  char v27; // cl@26
  unsigned int v28; // eax@27
  void *v29; // esi@27
  char v30; // cl@28
  char v31; // al@31
  unsigned int v32; // edi@35
  char *v33; // eax@35
  int v34; // edx@35
  char v35; // cl@36
  int v36; // edi@38
  char v37; // al@39
  char *v38; // eax@40
  char *v39; // ecx@40
  char v40; // dl@41
  char v41; // cl@43
  void *v42; // eax@45
  const char *v43; // edx@45
  char *v44; // eax@48
  const void *v45; // edi@48
  char v46; // cl@49
  unsigned int v47; // eax@50
  void *v48; // esi@50
  char v49; // cl@51
  char v50; // al@54
  unsigned int v51; // edi@58
  char *v52; // eax@58
  int v53; // edx@58
  char v54; // cl@59
  int v55; // edi@61
  char v56; // al@62
  char *v57; // eax@63
  char *v58; // ecx@63
  char v59; // dl@64
  char v60; // cl@66
  void *v61; // eax@68
  const char *v62; // edx@68
  char *v63; // eax@71
  const void *v64; // edi@71
  char v65; // cl@72
  unsigned int v66; // eax@73
  void *v67; // esi@73
  char v68; // cl@74
  char v69; // al@77
  unsigned int v70; // edi@81
  char *v71; // eax@81
  int v72; // edx@81
  char v73; // cl@82
  int v74; // edi@84
  char v75; // al@85
  char *v76; // eax@86
  char *v77; // ecx@86
  char v78; // dl@87
  char v79; // cl@89
  void *v80; // eax@91
  const char *v81; // edx@91
  char *v82; // eax@94
  const void *v83; // edi@94
  char v84; // cl@95
  unsigned int v85; // eax@96
  void *v86; // esi@96
  char v87; // cl@97
  char v88; // al@100
  unsigned int v89; // edi@104
  char *v90; // eax@104
  int v91; // edx@104
  char v92; // cl@105
  int v93; // edi@107
  char v94; // al@108
  char *v95; // eax@109
  char *v96; // ecx@109
  char v97; // dl@110
  char v98; // cl@112
  void *v99; // eax@114
  const char *v100; // edx@114
  char *v101; // eax@117
  const void *v102; // edi@117
  char v103; // cl@118
  unsigned int v104; // eax@119
  void *v105; // esi@119
  char v106; // cl@120
  unsigned int v107; // edi@127
  char *v108; // eax@127
  int v109; // edx@127
  char v110; // cl@128
  int v111; // edi@130
  char v112; // al@131
  char *v113; // eax@132
  char *v114; // ecx@132
  char v115; // dl@133
  char v116; // cl@135
  char *v117; // eax@138
  char *v118; // ecx@138
  char v119; // dl@139
  unsigned int v120; // eax@140
  const void *v121; // edx@140
  void *v122; // esi@140
  char v123; // cl@141
  char *v124; // eax@149
  char *v125; // ecx@149
  char v126; // dl@150
  char v127; // cl@152
  char kClassID; // [sp+Eh] [bp-Ah]@123
  bool bFighterAble; // [sp+12h] [bp-6h]@1
  bool bSentinelAble; // [sp+13h] [bp-5h]@1
  bool bJokerAble; // [sp+14h] [bp-4h]@1
  bool bMageAble; // [sp+15h] [bp-3h]@1
  bool bClericAble; // [sp+16h] [bp-2h]@1
  bool bArcherAble; // [sp+17h] [bp-1h]@1

  v3 = pcStr;
  v4 = kClassMask;
  *pcStr = 0;
  bFighterAble = CharClass::TestChrBaseClassMask(kClassMask, 1);
  bArcherAble = CharClass::TestChrBaseClassMask(kClassMask, 11);
  bClericAble = CharClass::TestChrBaseClassMask(kClassMask, 6);
  bMageAble = CharClass::TestChrBaseClassMask(kClassMask, 16);
  bJokerAble = CharClass::TestChrBaseClassMask(kClassMask, 21);
  v5 = CharClass::TestChrBaseClassMask(kClassMask, 26);
  bSentinelAble = v5;
  if ( bFighterAble )
  {
    if ( bArcherAble && bClericAble && bMageAble && bJokerAble && v5 )
    {
      v6 = TextData::Get(0x96FED6E1u);
      v7 = (char *)(pcStr - v6);
      do
      {
        v8 = *v6;
        v6[(_DWORD)v7] = *v6;
        ++v6;
      }
      while ( v8 );
      return;
    }
    v9 = CharClass::GetMinimumChrClass(kClassMask, 1);
    if ( v9 == 4 && kClassMask > 16 )
    {
      CharClass::GetEquipableClassStr(kClassMask, pcStr, uiStrLen);
      v10 = strlen(pcStr);
      v11 = TextData::Get(0xEA04D9F3u);
      v12 = (int)(v11 + 1);
      do
        v13 = *v11++;
      while ( v13 );
      if ( (unsigned int)(&v11[v10 + 2] - v12) < uiStrLen )
      {
        v14 = pcStr - 1;
        do
          v15 = (v14++)[1];
        while ( v15 );
        *(_WORD *)v14 = word_9C3964;
        v16 = TextData::Get(0xEA04D9F3u);
        v17 = v16;
        do
          v18 = *v16++;
        while ( v18 );
        v19 = v16 - v17;
        v20 = v17;
        v21 = pcStr - 1;
        do
        {
          v22 = *((_BYTE *)v21 + 1);
          v21 = (char *)v21 + 1;
        }
        while ( v22 );
LABEL_153:
        memcpy(v21, v20, v19);
        return;
      }
      return;
    }
    v23 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v9);
    v24 = &byte_9788EB;
    if ( v23 )
      v24 = (char *)v23 + 21;
    if ( strlen(v24) + 1 >= uiStrLen )
      return;
    v25 = fs("%s ");
    v26 = v25;
    do
      v27 = *v25++;
    while ( v27 );
    v28 = v25 - v26;
    v29 = pcStr - 1;
    do
    {
      v30 = *((_BYTE *)v29 + 1);
      v29 = (char *)v29 + 1;
    }
    while ( v30 );
    memcpy(v29, v26, v28);
    v3 = pcStr;
    v4 = kClassMask;
  }
  if ( !bArcherAble )
  {
LABEL_53:
    if ( bClericAble )
    {
      v50 = CharClass::GetMinimumChrClass(__PAIR__(HIDWORD(kClassMask), v4), 6);
      if ( v50 == 9 && SHIDWORD(kClassMask) >= 0 && (SHIDWORD(kClassMask) > 0 || v4 > 0x200) )
      {
        CharClass::GetEquipableClassStr(__PAIR__(HIDWORD(kClassMask), v4), v3, uiStrLen);
        v51 = strlen(v3);
        v52 = TextData::Get(0xEA04D9F3u);
        v53 = (int)(v52 + 1);
        do
          v54 = *v52++;
        while ( v54 );
        if ( (unsigned int)(&v52[v51 + 2] - v53) < uiStrLen )
        {
          v55 = (int)(v3 - 1);
          do
            v56 = *(_BYTE *)(v55++ + 1);
          while ( v56 );
          *(_WORD *)v55 = word_9C3974;
          v57 = TextData::Get(0xEA04D9F3u);
          v58 = v57;
          do
            v59 = *v57++;
          while ( v59 );
          v19 = v57 - v58;
          v20 = v58;
          v21 = v3 - 1;
          do
          {
            v60 = *((_BYTE *)v21 + 1);
            v21 = (char *)v21 + 1;
          }
          while ( v60 );
          goto LABEL_153;
        }
        return;
      }
      v61 = CDataReader::GetRecord(
              (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
              (unsigned __int8)v50);
      v62 = &byte_9788EB;
      if ( v61 )
        v62 = (char *)v61 + 21;
      if ( strlen(v62) + 1 >= uiStrLen )
        return;
      v63 = fs("%s ");
      v64 = v63;
      do
        v65 = *v63++;
      while ( v65 );
      v66 = v63 - v64;
      v67 = v3 - 1;
      do
      {
        v68 = *((_BYTE *)v67 + 1);
        v67 = (char *)v67 + 1;
      }
      while ( v68 );
      memcpy(v67, v64, v66);
      v3 = pcStr;
      v4 = kClassMask;
    }
    if ( bMageAble )
    {
      v69 = CharClass::GetMinimumChrClass(__PAIR__(HIDWORD(kClassMask), v4), 16);
      if ( v69 == 19 && SHIDWORD(kClassMask) >= 0 && (SHIDWORD(kClassMask) > 0 || v4 > 0x80000) )
      {
        CharClass::GetEquipableClassStr(__PAIR__(HIDWORD(kClassMask), v4), v3, uiStrLen);
        v70 = strlen(v3);
        v71 = TextData::Get(0xEA04D9F3u);
        v72 = (int)(v71 + 1);
        do
          v73 = *v71++;
        while ( v73 );
        if ( (unsigned int)(&v71[v70 + 2] - v72) < uiStrLen )
        {
          v74 = (int)(v3 - 1);
          do
            v75 = *(_BYTE *)(v74++ + 1);
          while ( v75 );
          *(_WORD *)v74 = word_9C397C;
          v76 = TextData::Get(0xEA04D9F3u);
          v77 = v76;
          do
            v78 = *v76++;
          while ( v78 );
          v19 = v76 - v77;
          v20 = v77;
          v21 = v3 - 1;
          do
          {
            v79 = *((_BYTE *)v21 + 1);
            v21 = (char *)v21 + 1;
          }
          while ( v79 );
          goto LABEL_153;
        }
        return;
      }
      v80 = CDataReader::GetRecord(
              (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
              (unsigned __int8)v69);
      v81 = &byte_9788EB;
      if ( v80 )
        v81 = (char *)v80 + 21;
      if ( strlen(v81) + 1 >= uiStrLen )
        return;
      v82 = fs("%s ");
      v83 = v82;
      do
        v84 = *v82++;
      while ( v84 );
      v85 = v82 - v83;
      v86 = v3 - 1;
      do
      {
        v87 = *((_BYTE *)v86 + 1);
        v86 = (char *)v86 + 1;
      }
      while ( v87 );
      memcpy(v86, v83, v85);
      v3 = pcStr;
      v4 = kClassMask;
    }
    if ( bJokerAble )
    {
      v88 = CharClass::GetMinimumChrClass(__PAIR__(HIDWORD(kClassMask), v4), 21);
      if ( v88 == 24 && SHIDWORD(kClassMask) >= 0 && (SHIDWORD(kClassMask) > 0 || v4 > 0x1000000) )
      {
        CharClass::GetEquipableClassStr(__PAIR__(HIDWORD(kClassMask), v4), v3, uiStrLen);
        v89 = strlen(v3);
        v90 = TextData::Get(0xEA04D9F3u);
        v91 = (int)(v90 + 1);
        do
          v92 = *v90++;
        while ( v92 );
        if ( (unsigned int)(&v90[v89 + 2] - v91) < uiStrLen )
        {
          v93 = (int)(v3 - 1);
          do
            v94 = *(_BYTE *)(v93++ + 1);
          while ( v94 );
          *(_WORD *)v93 = word_9C3984;
          v95 = TextData::Get(0xEA04D9F3u);
          v96 = v95;
          do
            v97 = *v95++;
          while ( v97 );
          v19 = v95 - v96;
          v20 = v96;
          v21 = v3 - 1;
          do
          {
            v98 = *((_BYTE *)v21 + 1);
            v21 = (char *)v21 + 1;
          }
          while ( v98 );
          goto LABEL_153;
        }
        return;
      }
      v99 = CDataReader::GetRecord(
              (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
              (unsigned __int8)v88);
      v100 = &byte_9788EB;
      if ( v99 )
        v100 = (char *)v99 + 21;
      if ( strlen(v100) + 1 >= uiStrLen )
        return;
      v101 = fs("%s ");
      v102 = v101;
      do
        v103 = *v101++;
      while ( v103 );
      v104 = v101 - v102;
      v105 = v3 - 1;
      do
      {
        v106 = *((_BYTE *)v105 + 1);
        v105 = (char *)v105 + 1;
      }
      while ( v106 );
      memcpy(v105, v102, v104);
      v3 = pcStr;
      v4 = kClassMask;
    }
    if ( bSentinelAble )
    {
      kClassID = CharClass::GetMinimumChrClass(__PAIR__(HIDWORD(kClassMask), v4), 26);
      if ( kClassID == 27 && SHIDWORD(kClassMask) >= 0 && (SHIDWORD(kClassMask) > 0 || v4 > 0x8000000) )
      {
        CharClass::GetEquipableClassStr(__PAIR__(HIDWORD(kClassMask), v4), v3, uiStrLen);
        v107 = strlen(v3);
        v108 = TextData::Get(0xEA04D9F3u);
        v109 = (int)(v108 + 1);
        do
          v110 = *v108++;
        while ( v110 );
        if ( (unsigned int)(&v108[v107 + 2] - v109) < uiStrLen )
        {
          v111 = (int)(v3 - 1);
          do
            v112 = *(_BYTE *)(v111++ + 1);
          while ( v112 );
          *(_WORD *)v111 = word_9C398C;
          v113 = TextData::Get(0xEA04D9F3u);
          v114 = v113;
          do
            v115 = *v113++;
          while ( v115 );
          v19 = v113 - v114;
          v20 = v114;
          v21 = v3 - 1;
          do
          {
            v116 = *((_BYTE *)v21 + 1);
            v21 = (char *)v21 + 1;
          }
          while ( v116 );
          goto LABEL_153;
        }
        return;
      }
      if ( strlen(CharClass::GetLocalName(kClassID)) + 1 >= uiStrLen )
        return;
      v117 = fs("%s ");
      v118 = v117;
      do
        v119 = *v117++;
      while ( v119 );
      v120 = v117 - v118;
      v121 = v118;
      v122 = v3 - 1;
      do
      {
        v123 = *((_BYTE *)v122 + 1);
        v122 = (char *)v122 + 1;
      }
      while ( v123 );
      memcpy(v122, v121, v120);
      v3 = pcStr;
    }
    if ( bFighterAble || bArcherAble || bClericAble || bMageAble || bJokerAble || bSentinelAble )
    {
      v124 = TextData::Get(0xEA04D9F3u);
      v125 = v124;
      do
        v126 = *v124++;
      while ( v126 );
      v19 = v124 - v125;
      v20 = v125;
      v21 = v3 - 1;
      do
      {
        v127 = *((_BYTE *)v21 + 1);
        v21 = (char *)v21 + 1;
      }
      while ( v127 );
      goto LABEL_153;
    }
    return;
  }
  v31 = CharClass::GetMinimumChrClass(__PAIR__(HIDWORD(kClassMask), v4), 11);
  if ( v31 != 14 || SHIDWORD(kClassMask) < 0 || SHIDWORD(kClassMask) <= 0 && v4 <= 0x4000 )
  {
    v42 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v31);
    v43 = &byte_9788EB;
    if ( v42 )
      v43 = (char *)v42 + 21;
    if ( strlen(v43) + 1 >= uiStrLen )
      return;
    v44 = fs("%s ");
    v45 = v44;
    do
      v46 = *v44++;
    while ( v46 );
    v47 = v44 - v45;
    v48 = v3 - 1;
    do
    {
      v49 = *((_BYTE *)v48 + 1);
      v48 = (char *)v48 + 1;
    }
    while ( v49 );
    memcpy(v48, v45, v47);
    v3 = pcStr;
    v4 = kClassMask;
    goto LABEL_53;
  }
  CharClass::GetEquipableClassStr(__PAIR__(HIDWORD(kClassMask), v4), v3, uiStrLen);
  v32 = strlen(v3);
  v33 = TextData::Get(0xEA04D9F3u);
  v34 = (int)(v33 + 1);
  do
    v35 = *v33++;
  while ( v35 );
  if ( (unsigned int)(&v33[v32 + 2] - v34) < uiStrLen )
  {
    v36 = (int)(v3 - 1);
    do
      v37 = *(_BYTE *)(v36++ + 1);
    while ( v37 );
    *(_WORD *)v36 = word_9C396C;
    v38 = TextData::Get(0xEA04D9F3u);
    v39 = v38;
    do
      v40 = *v38++;
    while ( v40 );
    v19 = v38 - v39;
    v20 = v39;
    v21 = v3 - 1;
    do
    {
      v41 = *((_BYTE *)v21 + 1);
      v21 = (char *)v21 + 1;
    }
    while ( v41 );
    goto LABEL_153;
  }
}
// 9C3964: using guessed type __int16 word_9C3964;
// 9C396C: using guessed type __int16 word_9C396C;
// 9C3974: using guessed type __int16 word_9C3974;
// 9C397C: using guessed type __int16 word_9C397C;
// 9C3984: using guessed type __int16 word_9C3984;
// 9C398C: using guessed type __int16 word_9C398C;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (0064C1A0) --------------------------------------------------------
UseClassTypeInfo *__cdecl UseCalssTypeTable::GetClassByClassType(UseClassType kClassType)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  UseClassTypeInfo *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( *(_DWORD *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable + 4),
                         v3) != kClassType )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (UseClassTypeInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<UseClassTypeInfo_UseCalssTypeTable>::ms_pkTable + 4),
                                   v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97F24: using guessed type int ITableBase_UseClassTypeInfo_UseCalssTypeTable___ms_pkTable;

//----- (0064C200) --------------------------------------------------------
void __thiscall JumpProcessor::ForceEnd(JumpProcessor *this, bool bStop)
{
  this->m_nJumpState = 0;
  this->m_bJumpFlyStart = 0;
  this->m_bEndEvent = 1;
}

//----- (0064C210) --------------------------------------------------------
bool __thiscall JumpProcessor::OnEnd(JumpProcessor *this)
{
  bool result; // al@2

  if ( this->m_bEndEvent )
  {
    this->m_bEndEvent = 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0064C220) --------------------------------------------------------
void __thiscall JumpProcessor::SetCurPos(JumpProcessor *this, NiPoint3 *pos3StartPos)
{
  this->m_pos3CurPos.x = pos3StartPos->x;
  this->m_pos3CurPos.y = pos3StartPos->y;
  this->m_pos3CurPos.z = pos3StartPos->z;
}

//----- (0064C240) --------------------------------------------------------
float __thiscall JumpProcessor::GetCameraPos(JumpProcessor *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_pos3StartPos.z;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (0064C250) --------------------------------------------------------
bool __thiscall JumpProcessor::IsJump(JumpProcessor *this)
{
  return this->m_nJumpState != 0;
}

//----- (0064C260) --------------------------------------------------------
bool __thiscall JumpProcessor::Jump(JumpProcessor *this, float fTime, NiPoint3 pos3StartPos)
{
  JumpProcessor *v3; // esi@1
  Char *v4; // ecx@1
  bool result; // al@6

  v3 = this;
  v4 = this->m_pChar;
  if ( v4
    && Char::GetSequence(v4, v3->m_uiEC_JumpStart_Run)
    && Char::GetSequence(v3->m_pChar, v3->m_uiEC_JumpStart_Stand) )
  {
    if ( !v3->m_nJumpState )
    {
      v3->m_fJumpTime = 0.0;
      v3->m_fJumpStartTime = 0.0;
      LODWORD(v3->m_pos3StartPos.x) = (_DWORD)pos3StartPos.x;
      v3->m_pos3StartPos.y = pos3StartPos.y;
      v3->m_pos3StartPos.z = pos3StartPos.z;
      v3->m_bJumpButPress = 1;
      v3->m_nJumpState = 0;
      v3->m_bJumpFlyStart = 0;
      v3->m_uiResultLandingCode = 0;
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0064C2D0) --------------------------------------------------------
void __thiscall JumpProcessor::SetJumpAni(JumpProcessor *this, unsigned int uiJumpStart_Stand, unsigned int uiJumpStart_Run, unsigned int uiJumpFly, unsigned int uiJumpLandingStand, unsigned int uiJumpLandingMove)
{
  this->m_uiEC_JumpStart_Stand = uiJumpStart_Stand;
  this->m_uiEC_JumpStart_Run = uiJumpStart_Run;
  this->m_uiEC_JumpFly = uiJumpFly;
  this->m_uiEC_JumpLandingStand = uiJumpLandingStand;
  this->m_uiEC_JumpLandingMove = uiJumpLandingMove;
}

//----- (0064C300) --------------------------------------------------------
void __thiscall ActionMgr::PlaySoundA(ActionMgr *this, int iSndIndex, ActionInfo *pkActionInfo)
{
  ActionMgr *v3; // esi@1
  Char *v4; // eax@2

  v3 = this;
  if ( pkActionInfo == this->m_pkCurPlayActInfo )
  {
    v4 = Char::GetAttackTargetChar(this->m_pkChar);
    SoundMgr::CreateSound(&g_kSoundMgr, v3->m_pkCurPlayActInfo, iSndIndex, v3->m_pkChar, v4);
  }
}

//----- (0064C340) --------------------------------------------------------
int __thiscall ActionMgr::GetKeyStrToInt(ActionMgr *this, char *KeywordStr)
{
  int result; // eax@2

  if ( KeywordStr && strlen(KeywordStr) == 7 )
    result = atoi(KeywordStr + 2);
  else
    result = 0;
  return result;
}

//----- (0064C380) --------------------------------------------------------
void __thiscall JumpProcessor::clear(JumpProcessor *this)
{
  JumpProcessor *v1; // esi@1
  NiNode *v2; // edi@1

  v1 = this;
  this->m_bJumpButPress = 0;
  this->m_nJumpState = 0;
  v2 = this->m_spJumpInfo.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spJumpInfo.m_pObject = 0;
  }
  v1->m_bJumpFlyStart = 0;
  v1->m_fJumpTime = 0.0;
  v1->m_bEndEvent = 0;
  v1->m_uiEC_JumpFly = 0;
  v1->m_fJumpStartTime = 0.0;
  v1->m_uiEC_JumpLandingStand = 0;
  v1->m_uiEC_JumpLandingMove = 0;
  v1->m_uiEC_JumpStart_Stand = 0;
  v1->m_uiEC_JumpStart_Run = 0;
  v1->m_uiResultLandingCode = 0;
  v1->m_uiResultJumpStartCode = 0;
  v1->m_pActor = 0;
  v1->m_pChar = 0;
  LODWORD(v1->m_pos3StartPos.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_pos3StartPos.y = NiPoint3::ZERO.y;
  v1->m_pos3StartPos.z = NiPoint3::ZERO.z;
  LODWORD(v1->m_pos3CurPos.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_pos3CurPos.y = NiPoint3::ZERO.y;
  v1->m_pos3CurPos.z = NiPoint3::ZERO.z;
}

//----- (0064C420) --------------------------------------------------------
void __thiscall JumpProcessor::JumpProcessor(JumpProcessor *this)
{
  JumpProcessor *v1; // esi@1

  v1 = this;
  this->m_spJumpInfo.m_pObject = 0;
  NsEffect::NsEffect(&this->m_kEffect);
  JumpProcessor::clear(v1);
}

//----- (0064C480) --------------------------------------------------------
bool __thiscall JumpProcessor::IsJumpEnd(JumpProcessor *this, float fHeight)
{
  JumpProcessor *v2; // esi@1
  float v3; // eax@1
  float v4; // ecx@1
  float v5; // edx@1
  bool result; // al@4
  NiPoint3 kPos; // [sp+10h] [bp-Ch]@1

  v2 = this;
  v3 = this->m_pos3CurPos.x;
  v4 = this->m_pos3CurPos.y;
  v5 = v2->m_pos3CurPos.z;
  kPos.x = v3;
  kPos.y = v4;
  kPos.z = v5;
  if ( World::GetAdvGroundPos(&g_kWorld, v3, v4, &kPos) && v2->m_bJumpFlyStart && kPos.z > (double)fHeight )
  {
    v2->m_pos3StartPos.z = kPos.z;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0064C4F0) --------------------------------------------------------
bool __thiscall JumpProcessor::IsJumpAniState(JumpProcessor *this)
{
  NiActorManager *v1; // eax@1
  unsigned int v2; // edx@1
  unsigned int v3; // eax@1
  unsigned int v4; // esi@1
  char v5; // bl@1
  unsigned int v6; // edi@7
  unsigned int v7; // ecx@9
  bool result; // al@11
  char v9; // dl@12
  unsigned int v10; // [sp+Ch] [bp-8h]@5
  unsigned int v11; // [sp+10h] [bp-4h]@3

  v1 = this->m_pActor;
  v2 = v1->m_eCurID;
  v3 = v1->m_eTargetID;
  v4 = this->m_uiEC_JumpStart_Stand;
  v5 = 0;
  if ( v4 == v2 )
    v5 = 1;
  v11 = this->m_uiEC_JumpStart_Run;
  if ( v11 == v2 )
    v5 = 1;
  v10 = this->m_uiEC_JumpFly;
  if ( v10 == v2 )
    v5 = 1;
  v6 = this->m_uiEC_JumpLandingStand;
  if ( v6 == v2 )
    v5 = 1;
  v7 = this->m_uiEC_JumpLandingMove;
  if ( v7 != v2 && !v5 )
    goto LABEL_25;
  v9 = 0;
  if ( v4 == v3 )
    v9 = 1;
  if ( v11 == v3 )
    v9 = 1;
  if ( v10 == v3 )
    v9 = 1;
  if ( v6 == v3 )
    v9 = 1;
  if ( v7 == v3 || v9 )
    result = 1;
  else
LABEL_25:
    result = 0;
  return result;
}

//----- (0064C570) --------------------------------------------------------
void __thiscall ActionMgr::PlayEffect(ActionMgr *this, int iEffIndex, ActionInfo *pkActionInfo)
{
  ActionMgr *v3; // esi@1
  Char *v4; // edi@2
  unsigned __int16 *v5; // eax@2
  ActiveSkillInfo *v6; // eax@4
  Char *v7; // edx@6

  v3 = this;
  if ( pkActionInfo == this->m_pkCurPlayActInfo )
  {
    v4 = Char::GetAttackTargetChar(this->m_pkChar);
    v5 = (unsigned __int16 *)v3->m_pkCurPlaySkillViewInfo;
    if ( !v5 || iEffIndex )
    {
      EffectMgr::CreateActionEffect(&g_kEffectMgr, v3->m_pkCurPlayActInfo, iEffIndex, v3->m_pkChar, v4, 0);
    }
    else
    {
      v6 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(*v5, 1);
      if ( v6 )
      {
        if ( v6->First == 4 && (v7 = v3->m_pkChar, v7->m_bGroundSkillTargetPointSetted) )
          EffectMgr::CreateActionEffect(&g_kEffectMgr, v3->m_pkCurPlayActInfo, 0, v7, v4, 1);
        else
          EffectMgr::CreateActionEffect(&g_kEffectMgr, v3->m_pkCurPlayActInfo, 0, v3->m_pkChar, v4, 0);
      }
    }
  }
}

//----- (0064C620) --------------------------------------------------------
bool __thiscall ActionMgr::UseOldActionEffect(ActionMgr *this)
{
  return !this->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Mysize
      && !this->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Mysize;
}

//----- (0064C640) --------------------------------------------------------
float __thiscall JumpProcessor::Update(JumpProcessor *this, float fTime)
{
  int v2; // edi@0
  JumpProcessor *v3; // esi@1
  double v4; // st7@2
  char *v5; // eax@7
  char *v6; // eax@7
  NiNode *v7; // eax@7
  Char *v8; // ecx@8
  int v9; // ecx@15
  double v10; // st7@16
  int v11; // ecx@22
  int v12; // eax@26
  NiControllerSequence *v13; // eax@28
  NiActorManager *v14; // ecx@32
  unsigned int v15; // eax@32
  NiControllerSequence *v16; // eax@35
  Char *v17; // ecx@38
  unsigned int v18; // eax@38
  NiActorManager *v19; // edi@41
  unsigned int v20; // ebx@42
  NiControllerSequence *v21; // eax@46
  int v22; // ecx@49
  bool v23; // zf@49
  AbStateInfecteeVtbl *v24; // eax@49
  float result; // st7@55
  const char *v26; // [sp+Ch] [bp-20h]@39
  const char *v27; // [sp+10h] [bp-1Ch]@39
  UINT v28; // [sp+14h] [bp-18h]@39
  int v29; // [sp+18h] [bp-14h]@4
  int v30; // [sp+1Ch] [bp-10h]@0
  float fUpTime; // [sp+24h] [bp-8h]@13
  float fUpTimea; // [sp+24h] [bp-8h]@29
  float fJumpHeight; // [sp+28h] [bp-4h]@4

  v3 = this;
  if ( !this->m_pActor || !this->m_pChar )
  {
    v4 = 0.0;
    goto LABEL_55;
  }
  v29 = v2;
  fJumpHeight = this->m_pos3StartPos.z;
  if ( !this->m_bJumpButPress )
  {
    if ( !this->m_nJumpState )
      goto LABEL_54;
LABEL_13:
    fUpTime = Timer::ms_fCurTime - this->m_fJumpStartTime;
    this->m_fJumpTime = fUpTime;
    if ( this->m_bJumpFlyStart )
      NiAVObject::Update(&this->m_spJumpInfo.m_pObject->baseclass_0, fUpTime, 1);
    v9 = ((int (__stdcall *)(_DWORD))v3->m_spJumpInfo.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Jump");
    if ( v3->m_fJumpTime >= (double)v3->m_kEffect.m_fMaxTime )
    {
      if ( v3->m_nJumpState != 3 )
        v3->m_pos3StartPos.z = v3->m_pos3StartPos.z - Timer::ms_fDeltaTime * 200.0;
      v10 = v3->m_pos3StartPos.z;
    }
    else
    {
      v10 = *(float *)(v9 + 148) + fJumpHeight;
    }
    fJumpHeight = v10;
    if ( v3->m_nJumpState != 3 && JumpProcessor::IsJumpEnd(v3, fJumpHeight) )
    {
      v11 = (int)&v3->m_pChar->m_kMoveToTarget;
      v3->m_nJumpState = 3;
      if ( (unsigned __int8)(*(int (__stdcall **)(int))(*(_DWORD *)v11 + 4))(v2) )
        v3->m_uiResultLandingCode = v3->m_uiEC_JumpLandingMove;
      else
        v3->m_uiResultLandingCode = v3->m_uiEC_JumpLandingStand;
      v29 = 0;
      ((void (__stdcall *)(unsigned int, _DWORD))v3->m_pChar->baseclass_0.vfptr[10].SetAbStateProperty)(
        v3->m_uiResultLandingCode,
        0);
      fJumpHeight = v3->m_pos3StartPos.z;
      v3->m_bJumpFlyStart = 0;
    }
    v12 = v3->m_nJumpState;
    if ( v12 == 1 )
    {
      if ( v3->m_pActor )
      {
        v13 = Char::GetSequence(v3->m_pChar, v3->m_uiResultJumpStartCode);
        if ( !v13 )
        {
LABEL_36:
          v4 = -1.0;
          v3->m_nJumpState = 0;
          v3->m_bJumpFlyStart = 0;
          v3->m_bEndEvent = 1;
          goto LABEL_55;
        }
        fUpTimea = NiControllerSequence::GetKeyTimeAt(v13, "Jump");
        if ( !v3->m_bJumpFlyStart && v3->m_fJumpTime > (double)fUpTimea )
        {
          v3->m_fJumpTime = 0.0;
          v3->m_fJumpStartTime = Timer::ms_fCurTime;
          v3->m_bJumpFlyStart = 1;
          NsEffect::Start(&v3->m_kEffect, v3->m_fJumpStartTime);
          NiAVObject::Update(&v3->m_spJumpInfo.m_pObject->baseclass_0, 0.0, 1);
        }
        v14 = v3->m_pActor;
        v15 = v3->m_uiResultJumpStartCode;
        if ( v15 == v14->m_eCurID || v14->m_eTransitionState == 3 && v15 == v14->m_eTargetID )
        {
          v16 = Char::GetSequence(v3->m_pChar, v3->m_uiResultJumpStartCode);
          if ( !v16 )
            goto LABEL_36;
          if ( v16->m_fEndKeyTime <= (double)v16->m_fLastTime )
          {
            v17 = v3->m_pChar;
            v18 = v3->m_uiEC_JumpFly;
            v3->m_bJumpFlyStart = 1;
            v3->m_nJumpState = 2;
            ((void (__stdcall *)(unsigned int, _DWORD, _DWORD))v17->baseclass_0.vfptr[10].SetAbStateProperty)(v18, 0, 0);
            v4 = fJumpHeight;
            v3->m_bJumpButPress = 0;
            goto LABEL_55;
          }
        }
LABEL_54:
        v4 = fJumpHeight;
        v3->m_bJumpButPress = 0;
        goto LABEL_55;
      }
      v28 = 0;
      v27 = "Jump error";
      v26 = "not Found Ani";
    }
    else
    {
      if ( v12 != 3 )
        goto LABEL_54;
      v19 = v3->m_pActor;
      if ( v19 )
      {
        v20 = v3->m_uiResultLandingCode;
        if ( v20 == v19->m_eCurID
          || !JumpProcessor::IsJumpAniState(v3)
          || v19->m_eTransitionState == 3 && v20 == v19->m_eTargetID )
        {
          v21 = Char::GetSequence(v3->m_pChar, v20);
          if ( !v21 || v21->m_fEndKeyTime <= (double)v21->m_fLastTime || !JumpProcessor::IsJumpAniState(v3) )
          {
            v22 = (int)&v3->m_pChar->m_kMoveToTarget;
            v3->m_nJumpState = 0;
            v3->m_bJumpFlyStart = 0;
            v3->m_bEndEvent = 1;
            v23 = (*(int (__stdcall **)(int))(*(_DWORD *)v22 + 4))(v29) == 0;
            v24 = v3->m_pChar->baseclass_0.vfptr;
            if ( v23 )
            {
              ((void (__stdcall *)(int))v24[10].DeleteAbStateByAbstateIndex)(v30);
              v4 = fJumpHeight;
              v3->m_bJumpButPress = 0;
            }
            else
            {
              ((void (__stdcall *)(int))v24[11].AddAbStateByAbstateIndex)(v30);
              v4 = fJumpHeight;
              v3->m_bJumpButPress = 0;
            }
            goto LABEL_55;
          }
        }
        goto LABEL_54;
      }
      v28 = 0;
      v27 = "Jump error";
      v26 = "not Found Ani";
    }
    MessageBoxA(0, v26, v27, v28);
    goto LABEL_54;
  }
  if ( this->m_nJumpState )
    goto LABEL_13;
  if ( !this->m_spJumpInfo.m_pObject )
  {
    v5 = Folder::System();
    v6 = Folder::Merge(v5, "jump.nif");
    v7 = Ns_LoadNifFile(v6, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spJumpInfo, (NiD3DDefaultShader *)v7);
    NsEffect::SetEffectNode(&v3->m_kEffect, &v3->m_spJumpInfo.m_pObject->baseclass_0);
  }
  v3->m_fJumpTime = 0.0;
  NiAVObject::Update(&v3->m_spJumpInfo.m_pObject->baseclass_0, 0.0, 1);
  v8 = v3->m_pChar;
  v3->m_fJumpStartTime = Timer::ms_fCurTime;
  v3->m_nJumpState = 1;
  if ( (unsigned __int8)((int (__stdcall *)(int))v8->m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->IsMove)(v2) )
    v3->m_uiResultJumpStartCode = v3->m_uiEC_JumpStart_Run;
  else
    v3->m_uiResultJumpStartCode = v3->m_uiEC_JumpStart_Stand;
  ((void (__stdcall *)(unsigned int, _DWORD))v3->m_pChar->baseclass_0.vfptr[10].SetAbStateProperty)(
    v3->m_uiResultJumpStartCode,
    0);
  v4 = fJumpHeight;
  v3->m_bJumpButPress = 0;
LABEL_55:
  LODWORD(result) = LODWORD(v4);
  return result;
}
// 64C640: could not find valid save-restore pair for edi
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (0064C9E0) --------------------------------------------------------
void __thiscall ActionMgr::UpdateActionTable(ActionMgr *this, Char *pkTargetChar)
{
  ActionMgr *v2; // esi@1
  Char *v3; // ebx@2
  unsigned int v4; // eax@6
  ActionInfoSet *v5; // ecx@6
  ActionInfo *v6; // eax@7
  Char *v7; // eax@11
  bool v8; // zf@14
  double v9; // st5@15
  double v10; // st6@15
  signed int v11; // edi@15
  double v12; // st7@21
  Char *v13; // ecx@24
  char v14; // al@25
  Char *v15; // edx@28
  MobViewInfo *v16; // eax@29
  ActionInfo *v17; // ecx@32
  unsigned __int16 *v18; // eax@37
  ActiveSkillInfo *v19; // eax@38
  ActionInfo *v20; // ecx@46
  ActionInfo *v21; // ecx@51
  ActionInfo *v22; // ecx@56
  ActionInfo *v23; // ecx@61
  Char *v24; // [sp-10h] [bp-18h]@41
  Char *v25; // [sp-Ch] [bp-14h]@41
  bool v26; // [sp-8h] [bp-10h]@41
  float fPastTime; // [sp+4h] [bp-4h]@14
  float fPastTimea; // [sp+4h] [bp-4h]@15

  v2 = this;
  if ( this->m_pActor )
  {
    v3 = pkTargetChar;
    if ( *(float *)&pkTargetChar != 0.0 )
    {
      if ( (int)pkTargetChar->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)pkTargetChar) == 4 )
      {
        if ( (int)v3->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v3) == 4 )
        {
          v4 = Char::GetAniCode(v3, 0, 0, 0);
          v5 = v2->m_pkActInfoSet;
          v2->m_uiCurEventCode = v4;
          if ( v5 )
            v6 = ActionInfoSet::GetByEventCode(v5, v4);
          else
            v6 = 0;
          v2->m_pkCurPlayActInfo = v6;
        }
      }
      else
      {
        NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
          (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_pActor->m_kSequenceMap,
          v2->m_uiCurEventCode,
          (NiVBSet **)&pkTargetChar);
      }
    }
    if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
           (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_pActor->m_kSequenceMap,
           v2->m_uiCurEventCode,
           (NiVBSet **)&pkTargetChar) )
    {
      v7 = pkTargetChar;
      if ( *(float *)&pkTargetChar != 0.0 )
      {
        if ( pkTargetChar->baseclass_3c.m_kAttachEffectList.baseclass_0.baseclass_0.vfptr == (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)1
          || pkTargetChar->baseclass_3c.m_kAttachEffectList.baseclass_0.baseclass_0.vfptr == (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)5 )
        {
          v8 = pkTargetChar->baseclass_0.m_kAbStateProperty.bVisible == 0;
          pkTargetChar = (Char *)pkTargetChar->baseclass_0.m_kAbStateProperty.iCantChatStateCount;
          fPastTime = *(float *)&v7->baseclass_0.m_kAbStateProperty.iCantHealStateCount;
          if ( v8 )
          {
            v9 = fPastTime / *(float *)&pkTargetChar;
            v10 = *(float *)&pkTargetChar;
            v11 = (signed int)v9;
            pkTargetChar = (Char *)(signed int)v9;
            fPastTimea = fPastTime - (double)(signed int)v9 * v10;
            if ( (signed int)(v2->m_fActionLastUpdateTime / v10) != (signed int)v9 )
            {
              *(_DWORD *)&v2->m_abActionEff[0] = 0;
              v2->m_abActionSnd[1] = 0;
              if ( v3 )
              {
                if ( (int)v3->baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v3) == 4
                  && v11
                  && v11 != v2->m_iOldLoopCnt )
                {
                  v2->m_iOldLoopCnt = v11;
                  v2->m_fActionLastUpdateTime = 0.0;
                }
              }
            }
          }
          else
          {
            v12 = fPastTime;
            if ( fPastTime > (double)*(float *)&pkTargetChar )
              v12 = 0.0;
            fPastTimea = v12;
          }
          v13 = v2->m_pkChar;
          if ( v13 )
          {
            v14 = Char::GetClass(v13);
            if ( CharClass::IsKindOf(v14, 11) && Char::CheckActState(v2->m_pkChar, 300000) )
              v2->m_abActionEff[0] = 1;
            v15 = v2->m_pkChar;
            if ( !v15->m_bUserCharacter )
            {
              v16 = v15->m_pMobViewInfo;
              if ( v16 )
              {
                if ( v16->AttackType == 1 )
                  v2->m_abActionEff[0] = 1;
              }
            }
            v17 = v2->m_pkCurPlayActInfo;
            if ( v17 )
            {
              if ( v17->EffFile[0][0] == 45
                || v2->m_abActionEff[0]
                || (*(float *)&pkTargetChar = (double)v17->EffNote[0] / 1000.0,
                    v2->m_fActionLastUpdateTime > (double)*(float *)&pkTargetChar)
                || fPastTimea <= (double)*(float *)&pkTargetChar )
                goto LABEL_46;
              v18 = (unsigned __int16 *)v2->m_pkCurPlaySkillViewInfo;
              if ( v18 )
              {
                v19 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(*v18, 1);
                if ( !v19 )
                {
LABEL_45:
                  v2->m_abActionEff[0] = 1;
LABEL_46:
                  v20 = v2->m_pkCurPlayActInfo;
                  if ( v20->EffFile[1][0] != 45 )
                  {
                    if ( !v2->m_abActionEff[1] )
                    {
                      *(float *)&pkTargetChar = (double)v20->EffNote[1] / 1000.0;
                      if ( v2->m_fActionLastUpdateTime <= (double)*(float *)&pkTargetChar )
                      {
                        if ( fPastTimea > (double)*(float *)&pkTargetChar )
                        {
                          EffectMgr::CreateActionEffect(&g_kEffectMgr, v20, 1, v2->m_pkChar, v3, 0);
                          v2->m_abActionEff[1] = 1;
                        }
                      }
                    }
                  }
                  v21 = v2->m_pkCurPlayActInfo;
                  if ( v21->EffFile[2][0] != 45 )
                  {
                    if ( !v2->m_abActionEff[2] )
                    {
                      *(float *)&pkTargetChar = (double)v21->EffNote[2] / 1000.0;
                      if ( v2->m_fActionLastUpdateTime <= (double)*(float *)&pkTargetChar )
                      {
                        if ( fPastTimea > (double)*(float *)&pkTargetChar )
                        {
                          EffectMgr::CreateActionEffect(&g_kEffectMgr, v21, 2, v2->m_pkChar, v3, 0);
                          v2->m_abActionEff[2] = 1;
                        }
                      }
                    }
                  }
                  v22 = v2->m_pkCurPlayActInfo;
                  if ( v22->SndFile[0][0] != 45 )
                  {
                    if ( !v2->m_abActionSnd[0] )
                    {
                      *(float *)&pkTargetChar = (double)v22->SndNote[0] / 1000.0;
                      if ( v2->m_fActionLastUpdateTime <= (double)*(float *)&pkTargetChar )
                      {
                        if ( fPastTimea > (double)*(float *)&pkTargetChar )
                        {
                          SoundMgr::CreateSound(&g_kSoundMgr, v22, 0, v2->m_pkChar, v3);
                          v2->m_abActionSnd[0] = 1;
                        }
                      }
                    }
                  }
                  v23 = v2->m_pkCurPlayActInfo;
                  if ( v23->SndFile[1][0] == 45
                    || v2->m_abActionSnd[1]
                    || (*(float *)&pkTargetChar = (double)v23->SndNote[1] / 1000.0,
                        v2->m_fActionLastUpdateTime > (double)*(float *)&pkTargetChar)
                    || fPastTimea <= (double)*(float *)&pkTargetChar )
                  {
                    v2->m_fActionLastUpdateTime = fPastTimea;
                  }
                  else
                  {
                    SoundMgr::CreateSound(&g_kSoundMgr, v23, 1, v2->m_pkChar, v3);
                    v2->m_fActionLastUpdateTime = fPastTimea;
                    v2->m_abActionSnd[1] = 1;
                  }
                  return;
                }
                if ( v19->First == 4 && v2->m_pkChar->m_bGroundSkillTargetPointSetted )
                {
                  v17 = v2->m_pkCurPlayActInfo;
                  v26 = 1;
                  v25 = v3;
                  v24 = v2->m_pkChar;
                }
                else
                {
                  v17 = v2->m_pkCurPlayActInfo;
                  v26 = 0;
                  v25 = v3;
                  v24 = v2->m_pkChar;
                }
              }
              else
              {
                v26 = 0;
                v25 = v3;
                v24 = v15;
              }
              EffectMgr::CreateActionEffect(&g_kEffectMgr, v17, 0, v24, v25, v26);
              goto LABEL_45;
            }
          }
        }
      }
    }
  }
}

//----- (0064CDE0) --------------------------------------------------------
ActionEffectInfo *__thiscall ActionMgr::GetSE(ActionMgr *this, NiControllerSequence *pkCatchedSeq)
{
  ActionEffectInfo *result; // eax@1
  NiTextKeyExtraData *v3; // ebx@2
  unsigned int v4; // esi@3
  NiTextKey *v5; // edi@4
  const char *v6; // ecx@4
  char *v7; // eax@5
  char v8; // dl@6
  char *v9; // esi@11
  unsigned __int16 v10; // ax@14
  unsigned int KeyNum; // [sp+0h] [bp-4h]@4

  result = (ActionEffectInfo *)pkCatchedSeq;
  if ( pkCatchedSeq )
  {
    v3 = pkCatchedSeq->m_spTextKeys.m_pObject;
    if ( v3 && (v4 = 0, v3->m_uiNumKeys) )
    {
      while ( 1 )
      {
        v5 = v3->m_pKeys;
        v6 = v5[v4].m_pText;
        KeyNum = v3->m_uiNumKeys;
        if ( v6 )
        {
          v7 = v5[v4].m_pText;
          do
            v8 = *v7++;
          while ( v8 );
          if ( v7 - (v6 + 1) == 7 && !strncmp("SE", v6, 2u) )
            break;
        }
        ++v4;
        if ( v4 >= KeyNum )
          goto LABEL_10;
      }
      v9 = v5[v4].m_pText;
      if ( v9 && strlen(v9) == 7 )
      {
        v10 = atoi(v9 + 2);
        result = ActionEffectInfoTab::GetByID(v10);
      }
      else
      {
        result = ActionEffectInfoTab::GetByID(0);
      }
    }
    else
    {
LABEL_10:
      result = 0;
    }
  }
  return result;
}

//----- (0064CEB0) --------------------------------------------------------
void __thiscall ActionMgr::ClearAEEff(ActionMgr *this)
{
  ActionMgr *v1; // edi@1
  int v2; // eax@1
  int v3; // esi@1
  int v4; // eax@3
  int j; // eax@4
  int i; // eax@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = *((_DWORD *)&this->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1);
  v3 = *(_DWORD *)v2;
  if ( *(_DWORD *)v2 != v2 )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
        *(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > **)(v3 + 16),
        &result,
        **(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > **)(*(_DWORD *)(v3 + 16) + 4),
        *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)(v3 + 16) + 4));
      if ( !*(_BYTE *)(v3 + 21) )
      {
        v4 = *(_DWORD *)(v3 + 8);
        if ( *(_BYTE *)(v4 + 21) )
        {
          for ( i = *(_DWORD *)(v3 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
          {
            if ( v3 != *(_DWORD *)(i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(_DWORD *)(v3 + 8);
          for ( j = *(_DWORD *)v4; !*(_BYTE *)(j + 21); j = *(_DWORD *)j )
            v3 = j;
        }
      }
    }
    while ( v3 != *((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) );
  }
}

//----- (0064CF30) --------------------------------------------------------
void __thiscall ActionMgr::UpdateAE(ActionMgr *this, Char *pkTargetChar, NiControllerSequence *pkSeq)
{
  ActionMgr *v3; // esi@1
  double v4; // st7@2
  int v5; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v6; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v7; // edi@4
  ActiveSkillViewInfo *v8; // eax@6
  ActionEffectInfo *v9; // ebx@6
  int v10; // edx@7
  int (__stdcall *v11)(_DWORD); // eax@7
  int v12; // eax@9
  bool v13; // zf@9
  int v14; // eax@9
  int v15; // eax@10
  bool v16; // al@13
  unsigned __int16 v17; // dx@15
  Char *v18; // ecx@15
  Char *v19; // ecx@16
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v20; // eax@18
  unsigned int v21; // [sp+0h] [bp-3Ch]@15
  float v22; // [sp+4h] [bp-38h]@15
  Char *v23; // [sp+8h] [bp-34h]@15
  Char *v24; // [sp+Ch] [bp-30h]@15
  bool v25; // [sp+10h] [bp-2Ch]@15
  unsigned __int16 v26; // [sp+14h] [bp-28h]@15
  NiControllerSequence *v27; // [sp+18h] [bp-24h]@15
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+28h] [bp-14h]@18
  float v29; // [sp+2Ch] [bp-10h]@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ActionMgr::eACTIONEFF_TYPE,std::multimap<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> > > *,std::less<enum ActionMgr::eACTIONEFF_TYPE>,std::all mIter; // [sp+30h] [bp-Ch]@1
  int eIter; // [sp+34h] [bp-8h]@1
  float fLastTime; // [sp+38h] [bp-4h]@4

  v3 = this;
  *(float *)&eIter = 0.0;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_mapAEEffInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&mIter,
    (OscTarget *)&eIter);
  if ( pkSeq->m_fLastScaledTime >= 0.0 )
  {
    v4 = pkSeq->m_fLastScaledTime;
    *(float *)&eIter = (pkSeq->m_fEndKeyTime - pkSeq->m_fBeginKeyTime) / pkSeq->m_fFrequency;
    if ( *(float *)&eIter > v4 )
    {
      if ( v3->m_fEffectStartTime <= (double)Timer::ms_fCurTime )
      {
        v5 = *(_DWORD *)(*(_DWORD *)&mIter + 16);
        fLastTime = pkSeq->m_fLastScaledTime;
        v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > **)(v5 + 4);
        v7 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v6->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        eIter = (int)v7;
        if ( (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v7 != v6 )
        {
          do
          {
            if ( *(float *)(*(_DWORD *)&v7 + 12) > (double)fLastTime )
            {
              std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&eIter);
              v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)eIter;
              continue;
            }
            v8 = v3->m_pkCurPlaySkillViewInfo;
            v9 = *(ActionEffectInfo **)(*(_DWORD *)&v7 + 16);
            if ( v8 )
            {
              v10 = *(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
              eIter = v8->ID;
              v11 = *(int (__stdcall **)(_DWORD))(v10 + 16);
              LODWORD(v29) = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
              if ( !(unsigned __int8)v11(eIter)
                || (unsigned __int16)eIter > *(_WORD *)(LODWORD(v29) + 200)
                || (v12 = *(_DWORD *)(LODWORD(v29) + 196),
                    v13 = *(_DWORD *)(v12 + 4 * (unsigned __int16)eIter) == 0,
                    v14 = v12 + 4 * (unsigned __int16)eIter,
                    v13)
                || (v15 = *(_DWORD *)v14) == 0 )
                goto LABEL_18;
              v16 = *(_DWORD *)(v15 + 184) == 4 && v3->m_pkChar->m_bGroundSkillTargetPointSetted;
              v27 = pkSeq;
              v17 = v3->m_pkCurPlaySkillViewInfo->ID;
              v18 = v3->m_pkChar;
              v29 = fLastTime - *(float *)(*(_DWORD *)&v7 + 12);
              v26 = v17;
              v25 = v16;
              v24 = pkTargetChar;
              v23 = v18;
              v22 = v29;
              v21 = v3->m_uiCurEventCode;
            }
            else
            {
              v19 = v3->m_pkChar;
              v27 = 0;
              v26 = -1;
              v29 = fLastTime - *(float *)(*(_DWORD *)&v7 + 12);
              v25 = 0;
              v24 = pkTargetChar;
              v23 = v19;
              v22 = v29;
              v21 = Char::GetAniCode(v19, 0, 0, 0);
            }
            EffectMgr::CreateActionEffect(&g_kEffectMgr, v9, v21, v22, v23, v24, v25, v26, v27);
LABEL_18:
            SoundMgr::CreateSound(&g_kSoundMgr, v9, v3->m_pkChar, pkTargetChar);
            v20 = std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
                    *(std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > **)(*(_DWORD *)&mIter + 16),
                    &result,
                    v7);
            v7 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v20->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
            eIter = *(_DWORD *)&v20->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          }
          while ( v7 != *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&mIter + 16) + 4) );
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (0064D0F0) --------------------------------------------------------
ActionEffectInfo *__thiscall ActionMgr::GetFirstAE(ActionMgr *this, ActionMgr::eACTIONEFF_TYPE eType, bool bDelInfo)
{
  ActionMgr *v3; // esi@1
  int v4; // ecx@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v5; // edx@3
  ActionEffectInfo *v6; // esi@3
  ActionEffectInfo *result; // eax@5
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ActionMgr::eACTIONEFF_TYPE,std::multimap<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> > > *,std::less<enum ActionMgr::eACTIONEFF_TYPE>,std::all it; // [sp+4h] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_mapAEEffInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&it,
    (OscTarget *)&eType);
  if ( it != *((_DWORD *)&v3->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1)
    && (v4 = *(_DWORD *)(*(_DWORD *)&it + 16), *(_DWORD *)(v4 + 8)) )
  {
    v5 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > **)(v4 + 4);
    v6 = *(ActionEffectInfo **)(*(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] + 16);
    if ( bDelInfo == 1 )
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&bDelInfo,
        *v5);
    result = v6;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0064D150) --------------------------------------------------------
void __thiscall ActionMgr::_ActionMgr(ActionMgr *this)
{
  ActionMgr *v1; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v4; // ecx@2
  int v5; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > j; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v8; // ST08_4@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v9; // ST04_4@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v10; // ST08_4@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v11; // ST04_4@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v12; // ST08_4@12
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v13; // ST04_4@12
  void *v14; // [sp+0h] [bp-18h]@12
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-14h]@11
  ActionMgr *v16; // [sp+8h] [bp-10h]@1
  int v17; // [sp+14h] [bp-4h]@1

  v1 = this;
  v16 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiActorManager::CallbackObjectVtbl *)ActionMgr::_vftable_;
  v17 = 3;
  ActionMgr::ClearAEEff(this);
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)*((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1);
  v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v2->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > **)&v2->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v2 )
  {
    do
    {
      v4 = v3;
      if ( !*(_BYTE *)(*(_DWORD *)&v3 + 21) )
      {
        v5 = *(_DWORD *)(*(_DWORD *)&v3 + 8);
        if ( *(_BYTE *)(v5 + 21) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v3 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 21);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v3 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v3 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v5;
                !*(_BYTE *)(*(_DWORD *)&j + 21);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&j )
            v3 = j;
        }
      }
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->m_mapAEEffInfo,
        &result,
        v4);
    }
    while ( v3 != *((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) );
  }
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v1->m_mapRange;
  v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v17) = 4;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapRange,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&v14,
    v9,
    v8);
  operator delete(v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v14 = &v1->m_mapMelee;
  v10 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v11 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v17) = 5;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapMelee,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v11,
    v10);
  operator delete(v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v14 = &v1->m_mapAEEffInfo;
  v12 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)*((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1);
  v13 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**((_DWORD **)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1);
  LOBYTE(v17) = 6;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapAEEffInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v13,
    v12);
  operator delete(*((void **)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1));
  v17 = -1;
  ActorCallBack::_ActorCallBack(&v1->baseclass_0);
}
// 9C3A64: using guessed type int (__stdcall *ActionMgr___vftable_[2])(int, int pkManager, int eEventCode, float fCurrentTime);

//----- (0064D290) --------------------------------------------------------
bool __thiscall ActionMgr::AddAEEff(ActionMgr *this, ActionMgr::eACTIONEFF_TYPE eType, NiTextKey *Value)
{
  ActionMgr *v3; // esi@1
  EffectViewInfo *v4; // ebx@1
  bool result; // al@2
  float *v6; // edi@3
  char *v7; // edx@3
  unsigned __int16 v8; // ax@4
  char *v9; // eax@5
  char v10; // cl@6
  ActionEffectInfo *v11; // eax@10
  std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *v13; // eax@12
  std::pair<float,EffectViewInfo *> _Val; // [sp+8h] [bp-8h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_mapAEEffInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&_Val.baseclass_0.second,
    (OscTarget *)&eType);
  v4 = _Val.baseclass_0.second;
  if ( _Val.baseclass_0.second == (EffectViewInfo *)*((_DWORD *)&v3->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) )
  {
    result = 0;
  }
  else
  {
    v6 = (float *)Value;
    v7 = Value->m_pText;
    if ( v7 )
    {
      v9 = Value->m_pText;
      do
        v10 = *v9++;
      while ( v10 );
      if ( v9 - (v7 + 1) == 7 )
        v8 = atoi(v7 + 2);
      else
        v8 = 0;
    }
    else
    {
      v8 = 0;
    }
    v11 = ActionEffectInfoTab::GetByID(v8);
    if ( v11 )
    {
      v12 = *(std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > **)((char *)&v4->Axis + 2);
      _Val.baseclass_0.first = *v6;
      _Val.baseclass_0.second = (EffectViewInfo *)v11;
      v13 = std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(
              v12,
              &_Val);
      std::_Tree<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *)v12,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *)&_Val,
        v13,
        0);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0064D340) --------------------------------------------------------
void __thiscall ActionMgr::ActionMgr(ActionMgr *this)
{
  ActionMgr *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  void *v4; // eax@3
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v5; // eax@4
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v6; // eax@4
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-34h]@7
  std::exception thisa; // [sp+Ch] [bp-28h]@5
  ActionMgr *v9; // [sp+18h] [bp-1Ch]@1
  std::pair<int const ,int> _Val; // [sp+1Ch] [bp-18h]@4
  char *_What; // [sp+24h] [bp-10h]@5
  int v12; // [sp+30h] [bp-4h]@1

  v1 = this;
  v9 = this;
  ActorCallBack::ActorCallBack(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (NiActorManager::CallbackObjectVtbl *)ActionMgr::_vftable_;
  v12 = 0;
  *((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 2) = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) + 20) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) + 21) = 1;
  LOBYTE(v12) = 1;
  v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x18u);
  if ( !v3 )
  {
    _Val.baseclass_0.second = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_Val.baseclass_0.second);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v12) = 2;
  v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x18u);
  if ( !v4 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v4;
  *(_DWORD *)v4 = v4;
  v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_fActionStartTime = 0.0;
  v1->m_pkActInfoSet = 0;
  v1->m_fActionLastUpdateTime = 0.0;
  v1->m_pkChar = 0;
  v1->m_pActor = 0;
  v1->m_pkCurPlaySkillViewInfo = 0;
  v1->m_uiCurEventCode = 0;
  v1->m_pkLastAttackActInfo = 0;
  v1->m_iOldLoopCnt = 0;
  v1->m_bUseActorSequence = 0;
  v1->m_pkCurPlayActInfo = 0;
  LOBYTE(v12) = 3;
  ActorCallBack::SetCurrentActionInfo(&v1->baseclass_0, 0, 0);
  *(_WORD *)&v1->m_abActionEff[0] = 0;
  v1->m_abActionEff[2] = 0;
  *(_WORD *)&v1->m_abActionSnd[0] = 0;
  v1->m_fEffectStartTime = 0.0;
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapAEEffInfo);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapMelee);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapRange);
  _Val.baseclass_0.first = 0;
  _Val.baseclass_0.second = (int)&v1->m_mapMelee;
  v5 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
         (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapAEEffInfo,
         &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapAEEffInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v5,
    0);
  _Val.baseclass_0.first = 1;
  _Val.baseclass_0.second = (int)&v1->m_mapRange;
  v6 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
         (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapAEEffInfo,
         &_Val);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapAEEffInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&_Val,
    v6,
    0);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C3A64: using guessed type int (__stdcall *ActionMgr___vftable_[2])(int, int pkManager, int eEventCode, float fCurrentTime);

//----- (0064D560) --------------------------------------------------------
void __thiscall ActionMgr::CatchAEEff(ActionMgr *this, bool bForceLoading)
{
  ActionMgr *v2; // ebx@1
  Char *v3; // ecx@1
  NiActorManager *v4; // eax@3
  const char *v5; // eax@4
  NiControllerSequence *v6; // esi@7
  void *v7; // esi@14
  int v8; // ecx@15
  int v9; // esi@18
  const char *v10; // ecx@18
  int v11; // eax@19
  char v12; // dl@20
  ActionMgr::eACTIONEFF_TYPE v13; // [sp-10h] [bp-1Ch]@24
  NiTextKey *v14; // [sp-Ch] [bp-18h]@24
  unsigned int KeyNum; // [sp+4h] [bp-8h]@18
  void *pkEx; // [sp+8h] [bp-4h]@6
  int ui; // [sp+14h] [bp+8h]@15

  v2 = this;
  v3 = this->m_pkChar;
  if ( !v3 )
  {
    OutputDebugStringA("Char setting error return\n");
    return;
  }
  v4 = v2->m_pActor;
  if ( !v4 )
  {
    OutputDebugStringA("Char setting error NO ACTOR return\n");
    v5 = (const char *)((int (*)(void))v2->m_pkChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    OutputDebugStringA(v5);
    return;
  }
  if ( v2->m_bUseActorSequence )
  {
    if ( !NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
            (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v4->m_kSequenceMap,
            v2->m_uiCurEventCode,
            (NiVBSet **)&pkEx) )
      return;
    v6 = (NiControllerSequence *)pkEx;
  }
  else
  {
    v6 = Char::GetNowSequence(v3);
  }
  if ( v6 )
  {
    if ( (unsigned __int8)((int (*)(void))v2->m_pkChar->baseclass_0.vfptr[7].GetAbstateColor)() == 1
      && (unsigned __int8)((int (*)(void))v2->m_pkChar->baseclass_0.vfptr[15].DeleteAbStateByAbstateIndex)() == 1
      && !bForceLoading )
    {
      OutputDebugStringA("if you use skill, this works is cancel\n");
      return;
    }
    ActionMgr::ClearAEEff(v2);
    v7 = v6->m_spTextKeys.m_pObject;
    pkEx = v7;
    if ( v7 )
    {
      v8 = 0;
      ui = 0;
      if ( *((_DWORD *)v7 + 3) )
      {
        while ( 1 )
        {
          KeyNum = *((_DWORD *)v7 + 3);
          v9 = *((_DWORD *)v7 + 4) + 8 * v8;
          v10 = *(const char **)(v9 + 4);
          if ( v10 )
          {
            v11 = *(_DWORD *)(v9 + 4);
            do
              v12 = *(_BYTE *)v11++;
            while ( v12 );
            if ( v11 - (_DWORD)(v10 + 1) == 7 )
              break;
          }
LABEL_28:
          v8 = ui + 1;
          ui = v8;
          if ( v8 >= KeyNum )
            return;
          v7 = pkEx;
        }
        if ( strncmp("AE", v10, 2u) )
        {
          if ( !strncmp("SE", *(const char **)(v9 + 4), 2u) )
          {
            v14 = (NiTextKey *)v9;
            v13 = 1;
LABEL_27:
            ActionMgr::AddAEEff(v2, v13, v14);
            goto LABEL_28;
          }
          if ( strncmp("DE", *(const char **)(v9 + 4), 2u) )
            goto LABEL_28;
        }
        v14 = (NiTextKey *)v9;
        v13 = 0;
        goto LABEL_27;
      }
    }
  }
}

//----- (0064D6E0) --------------------------------------------------------
void __thiscall ActionMgr::UpdateAEEff(ActionMgr *this, Char *pkTargetChar)
{
  ActionMgr *v2; // esi@1
  Char *v3; // edi@1
  NiActorManager *v4; // ebx@2
  NiControllerSequence *v5; // ebx@5
  unsigned int v6; // eax@6
  NiControllerSequence *v7; // edi@6
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ActionMgr::eACTIONEFF_TYPE,std::multimap<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> > > *,std::less<enum ActionMgr::eACTIONEFF_TYPE>,std::all mIter; // [sp+8h] [bp-8h]@3
  OscTarget val; // [sp+Ch] [bp-4h]@3

  v2 = this;
  v3 = this->m_pkChar;
  if ( v3 )
  {
    v4 = this->m_pActor;
    if ( v4 )
    {
      val = 0;
      std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
        (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_mapAEEffInfo,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&mIter,
        &val);
      if ( v2->m_bUseActorSequence )
      {
        if ( !NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
                (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v4->m_kSequenceMap,
                v2->m_uiCurEventCode,
                (NiVBSet **)&val) )
          return;
        v5 = (NiControllerSequence *)val;
      }
      else
      {
        v5 = Char::GetNowSequence(v3);
        v6 = Char::GetAniCode(v2->m_pkChar, 0, 0, 0);
        v7 = Char::GetSequence(v2->m_pkChar, v6);
        if ( v7 && ((int (*)(void))v2->m_pkChar->baseclass_0.vfptr[13].GetAbstateColor)() != 4 && v5 != v7 )
        {
          v5 = v7;
          v7->m_fBeginKeyTime = 0.0;
        }
      }
      if ( v5 && mIter != *((_DWORD *)&v2->m_mapAEEffInfo.baseclass_0.baseclass_0 + 1) )
      {
        if ( !v5->m_eCycleType && v5->m_fLastScaledTime < 0.0099999998 )
        {
          if ( !*(_DWORD *)(*(_DWORD *)(*(_DWORD *)&mIter + 16) + 8) )
            ActionMgr::CatchAEEff(v2, 1);
        }
        ActionMgr::UpdateAE(v2, pkTargetChar, v5);
      }
    }
  }
}

//----- (0064D7D0) --------------------------------------------------------
void __thiscall ActionMgr::SetActionStartTime(ActionMgr *this, float fTime)
{
  ActionMgr *v2; // esi@1
  Char *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkChar;
  v2->m_fActionStartTime = fTime;
  v2->m_fActionLastUpdateTime = 0.0;
  if ( v3 )
  {
    ((void (*)(void))v3->baseclass_0.vfptr[19].IsVisible)();
    ActionMgr::CatchAEEff(v2, 0);
  }
}

//----- (0064D800) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (0064D820) --------------------------------------------------------
void *__thiscall ActionMgr::_scalar_deleting_destructor_(ActionMgr *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ActionMgr::_ActionMgr(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0064D860) --------------------------------------------------------
bool __thiscall CharMgr::LoadChar(CharMgr *this, CharMgr::LoadData *Chardata)
{
  int v2; // edi@0
  bool result; // al@2
  unsigned int v4; // esi@3
  char v5; // bl@3
  char v6; // al@7
  int v7; // esi@8
  int v8; // ebx@8
  int v9; // edx@10
  int v10; // eax@11

  if ( this->m_kLoadDataList.baseclass_0._Mysize )
  {
    ((void (__stdcall *)(signed int, _DWORD, int))Chardata->pkChar->baseclass_0.vfptr[18].GetAbstateColor)(1, 0, v2);
    v4 = 0;
    v5 = 1;
    do
    {
      if ( (unsigned __int8)v5 & Chardata->CharData.abstatebit.statebit[v4 >> 3] )
        ((void (__stdcall *)(unsigned int, _DWORD, _DWORD))Chardata->pkChar->baseclass_0.vfptr->AddAbStateByAbstateIndex)(
          v4,
          -1.0,
          0);
      ++v4;
      v5 = __ROL__(v5, 1);
    }
    while ( (signed int)v4 < 812 );
    ((void (__cdecl *)(_DWORD))Chardata->pkChar->baseclass_0.vfptr[10].AddAbStateByAbstateIndex)(0);
    v6 = Chardata->CharData.emoticon.emoticonid;
    if ( v6 != -1 )
    {
      v7 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
      v8 = (unsigned __int8)v6;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                              (unsigned __int8)v6) )
      {
        if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) )
        {
          v9 = *(_DWORD *)(v7 + 196);
          if ( *(_DWORD *)(v9 + 4 * v8) )
          {
            v10 = *(_DWORD *)(v9 + 4 * v8);
            if ( v10 )
              ((void (__stdcall *)(_DWORD))Chardata->pkChar->baseclass_0.vfptr[14].SetAbStateProperty)(*(_BYTE *)v10);
          }
        }
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 64D860: could not find valid save-restore pair for edi
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0064D930) --------------------------------------------------------
void __thiscall CharMgr::UpdateAvatar(CharMgr *this, float fCurTime)
{
  NiTListItem<Char *> *v2; // esi@1
  void (__thiscall *v3)(AbStateInfectee *, ABSTATEINDEX); // eax@2

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead->m_pkNext;
  while ( v2 )
  {
    v3 = v2->m_element->baseclass_0.vfptr[17].DeleteAbStateByAbstateIndex;
    v2 = v2->m_pkNext;
    ((void (__stdcall *)(_DWORD))v3)(LODWORD(fCurTime));
  }
}

//----- (0064D970) --------------------------------------------------------
Char *__thiscall CharMgr::GetChar(CharMgr *this, char *pcName)
{
  Char *result; // eax@2
  NiTListItem<Char *> *v3; // edi@3
  Char *v4; // ebx@4

  if ( pcName )
  {
    v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v3 )
    {
      while ( 1 )
      {
        v4 = v3->m_element;
        v3 = v3->m_pkNext;
        if ( !strcmp(
                (const char *)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4),
                pcName) )
          break;
        if ( !v3 )
          goto LABEL_6;
      }
      result = v4;
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0064D9F0) --------------------------------------------------------
Char *__thiscall CharMgr::GetChar(CharMgr *this, Name5 kID)
{
  NiTListItem<Char *> *v2; // edi@1
  Char *v3; // ebx@2
  Char *result; // eax@4
  char acName[21]; // [sp+Ch] [bp-1Ch]@1
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  *(_QWORD *)acName = *(_QWORD *)&kID;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kID.n5_name[16];
  acName[20] = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( !strcmp(
              (const char *)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v3),
              acName) )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
    result = v3;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0064DAA0) --------------------------------------------------------
Char *__thiscall CharMgr::GetChar(CharMgr *this, Char *_pkChar)
{
  NiTListItem<Char *> *v2; // ecx@2
  Char *result; // eax@3

  if ( _pkChar && (v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead) != 0 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( _pkChar == result )
        break;
      if ( !v2 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (0064DAD0) --------------------------------------------------------
unsigned __int16 __thiscall CharMgr::FindFirstCharHandleByMobID(CharMgr *this, unsigned __int16 MobID)
{
  NiTListItem<Char *> *v2; // esi@1
  Char *v3; // edi@2
  unsigned __int16 result; // ax@5

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].Affect)(v3) )
      {
        if ( v3->m_kCharShape.m_kMobID == MobID )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = v3->m_kHandle;
  }
  else
  {
LABEL_5:
    result = -1;
  }
  return result;
}

//----- (0064DB20) --------------------------------------------------------
void __thiscall CharMgr::OutLineEnable(CharMgr *this, bool bEnable)
{
  CharMgr *v2; // esi@1
  CarToonShader *v3; // eax@1
  NiTListItem<Char *> *v4; // esi@1
  Char *v5; // ebx@2
  MobInfo *v6; // eax@6
  const char *v7; // edi@7
  char v8; // al@10
  CarToonShader *v9; // eax@11
  CarToonShader *v10; // eax@12
  NiNode *v11; // [sp-Ch] [bp-10h]@10

  v2 = this;
  v3 = CarToonShader::GetInstance();
  CarToonShader::SetOutLine(v3, bEnable);
  v4 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4->m_element;
    v4 = v4->m_pkNext;
    if ( !Char::IsResource(v5) || Char::GetMobInfo(v5)->Type != 10 && Char::GetMobInfo(v5)->Type != 9 )
    {
      if ( !(unsigned __int8)((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[1].Affect)(v5)
        || (v6 = Char::GetMobInfo(v5)) == 0
        || (v7 = v6->InxName, strcmp(v6->InxName, "KQ_Gate5")) && strcmp(v7, "Barrier01") && strcmp(v7, "Barrier02") )
      {
        v8 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[16].Deaffect)(v5);
        v11 = v5->m_spScene.m_pObject;
        if ( v8 )
        {
          v10 = CarToonShader::GetInstance();
          CarToonShader::SetExceptOutLineCartoonShader(v10, v11);
        }
        else
        {
          v9 = CarToonShader::GetInstance();
          CarToonShader::SetCartoonShader(v9, v11);
        }
      }
    }
  }
}

//----- (0064DC70) --------------------------------------------------------
Char *__thiscall CharMgr::GetUserChar(CharMgr *this, Name5 kID)
{
  NiTListItem<Char *> *v2; // edi@1
  Char *v3; // ebx@2
  Char *result; // eax@5
  char acName[21]; // [sp+Ch] [bp-1Ch]@1
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  *(_QWORD *)acName = *(_QWORD *)&kID;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kID.n5_name[8];
  *(_DWORD *)&acName[16] = *(_DWORD *)&kID.n5_name[16];
  acName[20] = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( !strcmp(
              (const char *)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v3),
              acName) )
      {
        if ( v3->m_bUserCharacter )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = v3;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0064DD30) --------------------------------------------------------
Char *__thiscall CharMgr::GetUserChar(CharMgr *this, char *pcName)
{
  Char *result; // eax@2
  NiTListItem<Char *> *v3; // edi@3
  Char *v4; // ebx@4

  if ( pcName )
  {
    v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v3 )
    {
      while ( 1 )
      {
        v4 = v3->m_element;
        v3 = v3->m_pkNext;
        if ( !strcmp(
                (const char *)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4),
                pcName) )
        {
          if ( v4->m_bUserCharacter )
            break;
        }
        if ( !v3 )
          goto LABEL_7;
      }
      result = v4;
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0064DDB0) --------------------------------------------------------
void __thiscall CharMgr::UpdateNpcActionEvent(CharMgr *this, PROTO_NC_SCENARIO_PLAYERLIKEMOB_ANIMATE_CMD *pkProto)
{
  int v2; // edx@1
  int v3; // eax@1
  int v4; // ecx@2

  v2 = *(_DWORD *)&this->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *(_DWORD *)v2;
  if ( *(_DWORD *)v2 != v2 )
  {
    while ( 1 )
    {
      v4 = *(_DWORD *)(v3 + 8);
      if ( *(_WORD *)(v4 + 942) == pkProto->handle )
        break;
      v3 = *(_DWORD *)v3;
      if ( v3 == v2 )
        return;
    }
    Char::UpdateActionEventByNet((Char *)v4, pkProto->actioncode, pkProto->flag);
  }
}

//----- (0064DDF0) --------------------------------------------------------
Char *__thiscall CharMgr::GetCharByNodePtr(CharMgr *this, NiNode *pkNode)
{
  CharMgr *v2; // esi@1
  Char *result; // eax@3
  std::_Tree_nod<std::_Tmap_traits<NiNode *,Char *,std::less<NiNode *>,std::allocator<std::pair<NiNode * const,Char *> >,0> >::_Node *iter; // [sp+4h] [bp-4h]@2

  v2 = this;
  if ( pkNode
    && (std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
          (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_mapByCharNode,
          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&iter,
          (const unsigned int *)&pkNode),
        iter != v2->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead) )
    result = iter->_Myval.baseclass_0.second;
  else
    result = 0;
  return result;
}

//----- (0064DE30) --------------------------------------------------------
Char *__thiscall CharMgr::GetChar(CharMgr *this, unsigned __int16 kHandle)
{
  unsigned __int16 v2; // di@1
  CharMgr *v3; // esi@1
  Char *result; // eax@3
  NiTListItem<Char *> *v5; // ecx@5
  std::_Tree_nod<std::_Tmap_traits<unsigned short,Char *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,Char *> >,0> >::_Node *iter; // [sp+8h] [bp-4h]@2

  v2 = kHandle;
  v3 = this;
  if ( kHandle == -1 )
    goto LABEL_8;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *)&this->m_mapByHandle,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&iter,
    &kHandle);
  if ( iter != v3->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead )
    return iter->_Myval.baseclass_0.second;
  result = g_pkMainChar;
  if ( g_pkMainChar->m_kHandle != v2 )
  {
    v5 = v3->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    while ( v5 )
    {
      result = v5->m_element;
      v5 = v5->m_pkNext;
      if ( result->m_kHandle == v2 )
        return result;
    }
LABEL_8:
    result = 0;
  }
  return result;
}

//----- (0064DEB0) --------------------------------------------------------
bool __thiscall CharMgr::Init(CharMgr *this)
{
  CharMgr *v1; // edi@1
  void *v2; // eax@1
  int v3; // eax@2
  NiTListItem<Char *> *(__thiscall *v4)(NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *); // edx@4
  Char *v5; // ebx@4
  int v6; // eax@4
  NiTListItem<Char *> *v7; // ecx@4
  NiNode *v8; // edx@7
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v9; // eax@7
  unsigned __int16 v10; // dx@7
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v11; // eax@7
  std::pair<int const ,int> _Val; // [sp+0h] [bp-14h]@1
  int v14; // [sp+10h] [bp-4h]@1

  v1 = this;
  *(_WORD *)&this->m_bEnableSoloMode = 0;
  v2 = operator new(0x1550u);
  _Val.baseclass_0.second = (int)v2;
  v14 = 0;
  if ( v2 )
    MainChar::MainChar((MainChar *)v2);
  else
    v3 = 0;
  g_pkMainChar = (Char *)v3;
  *(_BYTE *)(v3 + 2501) = 1;
  v4 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem;
  v5 = g_pkMainChar;
  v14 = -1;
  v6 = (int)v4(&v1->m_kList.baseclass_0.baseclass_0.baseclass_0);
  *(_DWORD *)(v6 + 8) = v5;
  *(_DWORD *)v6 = 0;
  *(_DWORD *)(v6 + 4) = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  v7 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  if ( v7 )
    v7->m_pkNext = (NiTListItem<Char *> *)v6;
  else
    v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<Char *> *)v6;
  ++*(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<Char *> *)v6;
  v8 = g_pkMainChar->m_spScene.m_pObject;
  _Val.baseclass_0.second = (int)g_pkMainChar;
  _Val.baseclass_0.first = (const int)v8;
  v9 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
         (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v1->m_mapByCharNode,
         &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapByCharNode,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&_Val,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v9,
    0);
  v10 = g_pkMainChar->m_kHandle;
  _Val.baseclass_0.second = (int)g_pkMainChar;
  LOWORD(_Val.baseclass_0.first) = v10;
  v11 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
          (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v1->m_mapByHandle,
          (std::pair<unsigned short const ,unsigned long> *)&_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v1->m_mapByHandle,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
    v11,
    0);
  return 1;
}

//----- (0064DFD0) --------------------------------------------------------
Char *__thiscall CharMgr::AddCharQue(CharMgr *this, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel)
{
  unsigned int v6; // edi@1
  void *v7; // esi@2
  const __int64 v8; // qax@2
  signed int v9; // ecx@2
  char v10; // al@7
  __int16 v11; // cx@19
  __int16 v12; // dx@20
  __int16 v13; // ax@21
  char v14; // al@26
  void *v15; // eax@26
  Char *v16; // eax@27
  Char *v17; // esi@27
  int (__thiscall *v18)(AbStateInfectee *); // edx@29
  bool v19; // zf@29
  AbStateInfecteeVtbl *v20; // eax@29
  Char *result; // eax@30
  int v22; // eax@31
  NiTListItem<Char *> *v23; // ecx@31
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v24; // eax@34
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v25; // eax@34
  unsigned int v26; // [sp-10h] [bp-124h]@1
  CharMgr *v27; // [sp+8h] [bp-10Ch]@1
  __int64 kWhoEquip; // [sp+Ch] [bp-108h]@2
  __int16 v29; // [sp+14h] [bp-100h]@26
  char dest[4]; // [sp+16h] [bp-FEh]@1
  int v31; // [sp+1Ah] [bp-FAh]@1
  int v32; // [sp+1Eh] [bp-F6h]@1
  int v33; // [sp+22h] [bp-F2h]@1
  int v34; // [sp+26h] [bp-EEh]@1
  char v35; // [sp+33h] [bp-E1h]@26
  char v36; // [sp+34h] [bp-E0h]@1
  char v37; // [sp+35h] [bp-DFh]@26
  char v38; // [sp+36h] [bp-DEh]@26
  __int16 v39; // [sp+37h] [bp-DDh]@26
  __int16 v40; // [sp+3Bh] [bp-D9h]@1
  int v41; // [sp+3Dh] [bp-D7h]@1
  int v42; // [sp+41h] [bp-D3h]@1
  int v43; // [sp+45h] [bp-CFh]@1
  int v44; // [sp+49h] [bp-CBh]@1
  __int16 v45; // [sp+4Dh] [bp-C7h]@1
  __int16 v46; // [sp+4Fh] [bp-C5h]@1
  int v47; // [sp+51h] [bp-C3h]@1
  int v48; // [sp+55h] [bp-BFh]@1
  int v49; // [sp+59h] [bp-BBh]@1
  __int16 v50; // [sp+5Dh] [bp-B7h]@1
  __int16 v51; // [sp+5Fh] [bp-B5h]@1
  char v52; // [sp+62h] [bp-B2h]@20
  char v53; // [sp+63h] [bp-B1h]@19
  unsigned int v54; // [sp+104h] [bp-10h]@1
  int v55; // [sp+110h] [bp-4h]@26
  int v56; // [sp+114h] [bp+0h]@1

  v54 = (unsigned int)&v56 ^ __security_cookie;
  v26 = (unsigned int)&v56 ^ __security_cookie;
  v27 = this;
  v34 = 0;
  v33 = 0;
  v32 = 0;
  v31 = 0;
  *(_DWORD *)dest = 0;
  strncpy(dest, byte_9C3A8E, 0x14u);
  v36 = kClassID;
  v41 = -1;
  v42 = -1;
  v43 = -1;
  v44 = -1;
  v45 = -1;
  v40 = -1;
  v50 = -1;
  v47 = -1;
  v48 = -1;
  v49 = -1;
  v46 = -1;
  v51 = -1;
  v6 = 0;
  if ( ITableBase<ItemInfo_ItemInfoTab>::GetTotal() )
  {
    do
    {
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v6);
      v8 = CharClass::GetBitbyClassType((UseClassType)*(_DWORD *)((char *)v7 + 207));
      HIDWORD(kWhoEquip) = HIDWORD(v8);
      v9 = 1;
      while ( !((1 << v9) & (unsigned int)v8) )
      {
        ++v9;
        if ( v9 >= 28 )
        {
          LOBYTE(v9) = 0;
          break;
        }
      }
      switch ( (unsigned __int8)v9 )
      {
        case 1u:
        case 2u:
        case 3u:
        case 4u:
        case 5u:
          v10 = 1;
          break;
        case 6u:
        case 7u:
        case 8u:
        case 9u:
        case 0xAu:
          v10 = 6;
          break;
        case 0xBu:
        case 0xCu:
        case 0xDu:
        case 0xEu:
        case 0xFu:
          v10 = 11;
          break;
        case 0x10u:
        case 0x11u:
        case 0x12u:
        case 0x13u:
        case 0x14u:
          v10 = 16;
          break;
        case 0x15u:
        case 0x16u:
        case 0x17u:
        case 0x18u:
        case 0x19u:
          v10 = 21;
          break;
        case 0x1Au:
        case 0x1Bu:
          v10 = 26;
          break;
        default:
          v10 = 0;
          break;
      }
      if ( v36 == v10 )
      {
        if ( *(_DWORD *)((char *)v7 + 127) < uiEquipLevel )
          goto LABEL_25;
        switch ( *(_DWORD *)((char *)v7 + 110) )
        {
          case 7:
            v13 = *(_WORD *)v7;
            v52 &= 0xF0u;
            HIWORD(v41) = v13;
            break;
          case 0x13:
            v12 = *(_WORD *)v7;
            v52 &= 0xFu;
            HIWORD(v42) = v12;
            break;
          case 0x15:
            v11 = *(_WORD *)v7;
            v53 &= 0xF0u;
            LOWORD(v43) = v11;
            break;
        }
      }
      if ( HIWORD(v41) != -1 && HIWORD(v42) != -1 && (_WORD)v43 != -1 )
        break;
LABEL_25:
      ++v6;
    }
    while ( v6 < ITableBase<ItemInfo_ItemInfoTab>::GetTotal() );
  }
  v29 = rand();
  v35 = 1;
  v37 = (byGender << 7) | ((v37 ^ 4 * kClassID) & 0x7C ^ v37) & 0x7F;
  v39 = 0;
  v38 = 0;
  v14 = CharClass::GetRace(kClassID);
  v37 ^= (v14 ^ v37) & 3;
  v15 = operator new(0xB84u);
  HIDWORD(kWhoEquip) = v15;
  v55 = 0;
  if ( v15 )
  {
    Char::Char((Char *)v15);
    v17 = v16;
  }
  else
  {
    v17 = 0;
  }
  v18 = v17->baseclass_0.vfptr[17].IsVisible;
  v55 = -1;
  v19 = ((int (__thiscall *)(Char *, __int16 *, unsigned int))v18)(v17, &v29, v26) == 0;
  v20 = v17->baseclass_0.vfptr;
  if ( v19 )
  {
    v20->__vecDelDtor((AbStateInfectee *)v17, 1u);
    result = 0;
  }
  else
  {
    ((void (__thiscall *)(Char *, NiPoint3 *, NiPoint3 *))v20[5].GetAbstateColor)(v17, kPos, kDir);
    v22 = (int)v27->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *)&v27->m_kList);
    *(_DWORD *)(v22 + 8) = v17;
    *(_DWORD *)v22 = 0;
    *(_DWORD *)(v22 + 4) = v27->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v23 = v27->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v23 )
      v23->m_pkNext = (NiTListItem<Char *> *)v22;
    else
      v27->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<Char *> *)v22;
    ++*(_DWORD *)&v27->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v27->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<Char *> *)v22;
    LODWORD(kWhoEquip) = v17->m_spScene.m_pObject;
    HIDWORD(kWhoEquip) = v17;
    v24 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
            (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v27->m_mapByCharNode,
            (std::pair<int const ,int> *)&kWhoEquip);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v27->m_mapByCharNode,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&kWhoEquip,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v24,
      0);
    LOWORD(kWhoEquip) = v17->m_kHandle;
    HIDWORD(kWhoEquip) = v17;
    v25 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
            (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v27->m_mapByHandle,
            (std::pair<unsigned short const ,unsigned long> *)&kWhoEquip);
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v27->m_mapByHandle,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&kWhoEquip,
      v25,
      0);
    World::AttachChar(&g_kWorld, v17);
    result = v17;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0064E3D0) --------------------------------------------------------
Mover *__thiscall CharMgr::AddMover(CharMgr *this, unsigned int kMoverID, unsigned __int16 kMoverHandle, int iHP, char nGrade, NiPoint3 *kPos, NiPoint3 *kDir)
{
  CharMgr *v7; // edi@1
  int v8; // ebx@1
  Char *v9; // esi@1
  void *v10; // eax@2
  Char *v11; // eax@3
  char v12; // al@5
  AbStateInfecteeVtbl *v13; // edx@5
  AbStateInfecteeVtbl *v15; // ebx@10
  unsigned __int8 v16; // al@10
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v17; // eax@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v18; // eax@10
  std::pair<int const ,int> _Val; // [sp+0h] [bp-18h]@10
  Char *pkMover; // [sp+8h] [bp-10h]@4
  int v21; // [sp+14h] [bp-4h]@4

  v7 = this;
  v8 = kMoverHandle;
  v9 = CharMgr::GetChar(this, kMoverHandle);
  if ( !v9 )
  {
    v10 = operator new(0xBB0u);
    *(_DWORD *)&kMoverHandle = v10;
    if ( v10 )
    {
      Mover::Mover((Mover *)v10);
      v9 = v11;
    }
    v21 = -1;
    pkMover = v9;
    if ( !v9 )
      return 0;
    v12 = ((int (__thiscall *)(Char *, unsigned int, int, int))v9->baseclass_0.vfptr[20].__vecDelDtor)(
            v9,
            kMoverID,
            v8,
            iHP);
    v13 = v9->baseclass_0.vfptr;
    if ( !v12 )
    {
      v13->__vecDelDtor((AbStateInfectee *)v9, 1u);
      return 0;
    }
    if ( !(unsigned __int8)((int (__thiscall *)(Char *, signed int, _DWORD))v13[18].GetAbstateColor)(v9, 1, 0) )
    {
      ((void (__thiscall *)(Char *))v9->baseclass_0.vfptr->__vecDelDtor)(v9);
      return 0;
    }
    Mover::SetMoverEffect((Mover *)v9, 1, (Mover *)v9, nGrade);
    v15 = v9->baseclass_0.vfptr;
    v16 = ((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[1].Affect)(v9);
    ((void (__thiscall *)(Char *, _DWORD))v15[10].AddAbStateByAbstateIndex)(v9, v16);
    *(_DWORD *)&kMoverHandle = v9;
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v7->m_kList,
      (NiD3DXEffectParameter *const *)&kMoverHandle);
    _Val.baseclass_0.first = (const int)v9->m_spScene.m_pObject;
    _Val.baseclass_0.second = (int)v9;
    v17 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
            (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v7->m_mapByCharNode,
            &_Val);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v7->m_mapByCharNode,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&_Val,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v17,
      0);
    LOWORD(_Val.baseclass_0.first) = v9->m_kHandle;
    _Val.baseclass_0.second = (int)v9;
    v18 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
            (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v7->m_mapByHandle,
            (std::pair<unsigned short const ,unsigned long> *)&_Val);
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v7->m_mapByHandle,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
      v18,
      0);
    World::AttachChar(&g_kWorld, v9);
    v9 = pkMover;
  }
  ((void (__thiscall *)(Char *, NiPoint3 *, NiPoint3 *))v9->baseclass_0.vfptr[5].GetAbstateColor)(v9, kPos, kDir);
  ((void (*)(void))v9->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
  return (Mover *)v9;
}

//----- (0064E580) --------------------------------------------------------
Mover *__thiscall CharMgr::AddMover(CharMgr *this, PROTO_NC_BRIEFINFO_REGENMOVER_CMD *p)
{
  CharMgr *v2; // edi@1
  float v3; // ST10_4@1
  float v4; // ST0C_4@1
  unsigned int v5; // eax@1
  Mover *v6; // eax@2
  NiPoint3 kPos; // [sp+14h] [bp-50h]@1
  NiPoint3 result; // [sp+20h] [bp-44h]@1
  NiPoint3 kDir; // [sp+2Ch] [bp-38h]@1
  float v10; // [sp+38h] [bp-2Ch]@1
  NiMatrix3 thisa; // [sp+3Ch] [bp-28h]@1
  unsigned int v12; // [sp+60h] [bp-4h]@1
  int v13; // [sp+64h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  v4 = (double)p->nCoord.xy.x;
  v3 = (double)p->nCoord.xy.y;
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  LODWORD(v10) = p->nCoord.dir;
  v10 = (NI_PI + NI_PI) * (double)SLODWORD(v10) / 180.0;
  NiMatrix3::MakeZRotation(&thisa, v10);
  NiMatrix3::operator_(&thisa, &result, &World::ms_kNorthDir);
  kDir.y = result.y;
  v5 = p->nID;
  LODWORD(kDir.x) = (_DWORD)result.x;
  kDir.z = result.z;
  if ( v5 == 65535 )
    v6 = 0;
  else
    v6 = CharMgr::AddMover(v2, v5, p->nHandle, p->nHP, p->nGrade, &kPos, &kDir);
  return v6;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (0064E670) --------------------------------------------------------
bool __thiscall CharMgr::AddMover(CharMgr *this, PROTO_NC_BRIEFINFO_MOVER_CMD *p)
{
  unsigned int v2; // edi@1
  bool v3; // zf@1
  PROTO_NC_BRIEFINFO_MOVER_CMD *v4; // esi@2
  float v5; // ST10_4@3
  float v6; // ST0C_4@3
  unsigned int v7; // eax@3
  bool v8; // al@6
  NiPoint3 kTargetPos; // [sp+18h] [bp-54h]@3
  NiPoint3 kDir; // [sp+24h] [bp-48h]@3
  NiPoint3 result; // [sp+30h] [bp-3Ch]@3
  CharMgr *v12; // [sp+3Ch] [bp-30h]@1
  float v13; // [sp+40h] [bp-2Ch]@3
  NiMatrix3 thisa; // [sp+44h] [bp-28h]@3
  unsigned int v15; // [sp+68h] [bp-4h]@1
  int v16; // [sp+6Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v2 = 0;
  v3 = p->nMoverNum == 0;
  v12 = this;
  if ( v3 )
  {
LABEL_6:
    v8 = 1;
  }
  else
  {
    v4 = p + 11;
    while ( 1 )
    {
      v6 = (double)*(_DWORD *)&v4->nMoverNum;
      v5 = (double)*(unsigned int *)&v4[4].nMoverNum;
      World::GetAdvGroundPos(&g_kWorld, v6, v5, &kTargetPos);
      LODWORD(v13) = v4[8].nMoverNum;
      v13 = (double)SLODWORD(v13) * (NI_PI + NI_PI) / 180.0;
      NiMatrix3::MakeZRotation(&thisa, v13);
      NiMatrix3::operator_(&thisa, &result, &World::ms_kNorthDir);
      kDir.y = result.y;
      v7 = *(_DWORD *)&v4[-8].nMoverNum;
      LODWORD(kDir.x) = (_DWORD)result.x;
      kDir.z = result.z;
      if ( v7 == 65535 )
        break;
      if ( !CharMgr::AddMover(
              v12,
              v7,
              *(_WORD *)&v4[-10].nMoverNum,
              *(_DWORD *)&v4[-4].nMoverNum,
              v4[111].nMoverNum,
              &kTargetPos,
              &kDir) )
        break;
      ++v2;
      v4 += 142;
      if ( v2 >= p->nMoverNum )
        goto LABEL_6;
    }
    v8 = 0;
  }
  return v8;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (0064E790) --------------------------------------------------------
Avatar *__thiscall CharMgr::AddAvatar(CharMgr *this, PROTO_AVATARINFORMATION *p, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiFrame)
{
  CharMgr *v5; // ebx@1
  void *v6; // eax@1
  int v7; // esi@1
  int v8; // eax@2
  int (__thiscall *v9)(_DWORD, _DWORD); // edx@3
  bool v10; // zf@3
  int v11; // eax@3
  Avatar *result; // eax@4
  int v13; // eax@5
  int v14; // eax@9
  NiTListItem<Char *> *v15; // ecx@9
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v16; // eax@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v17; // eax@12
  std::pair<int const ,int> _Val; // [sp+0h] [bp-14h]@1
  int v19; // [sp+10h] [bp-4h]@1

  v5 = this;
  v6 = operator new(0xB84u);
  _Val.baseclass_0.second = (int)v6;
  v7 = 0;
  v19 = 0;
  if ( v6 )
  {
    Avatar::Avatar((Avatar *)v6);
    v7 = v8;
  }
  v9 = *(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 548);
  v19 = -1;
  v10 = v9(v7, p) == 0;
  v11 = *(_DWORD *)v7;
  if ( v10 )
  {
    (*(void (__thiscall **)(int))(v11 + 28))(v7);
    result = 0;
  }
  else
  {
    v10 = (*(int (__thiscall **)(int, signed int, unsigned int))(v11 + 600))(v7, 1, uiFrame) == 0;
    v13 = *(_DWORD *)v7;
    if ( v10 )
    {
      (*(void (__thiscall **)(int))(v13 + 28))(v7);
      result = 0;
    }
    else
    {
      (*(void (__thiscall **)(int, NiPoint3 *, NiPoint3 *))(v13 + 184))(v7, kPos, kDir);
      if ( !uiFrame )
        (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 340))(v7);
      v14 = (int)v5->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *)&v5->m_kList);
      *(_DWORD *)(v14 + 8) = v7;
      *(_DWORD *)v14 = 0;
      *(_DWORD *)(v14 + 4) = v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      v15 = v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      if ( v15 )
        v15->m_pkNext = (NiTListItem<Char *> *)v14;
      else
        v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<Char *> *)v14;
      ++*(_DWORD *)&v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<Char *> *)v14;
      _Val.baseclass_0.first = *(_DWORD *)(v7 + 700);
      _Val.baseclass_0.second = v7;
      v16 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
              (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v5->m_mapByCharNode,
              &_Val);
      std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v5->m_mapByCharNode,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&_Val,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v16,
        0);
      LOWORD(_Val.baseclass_0.first) = *(_WORD *)(v7 + 548);
      _Val.baseclass_0.second = v7;
      v17 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
              (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v5->m_mapByHandle,
              (std::pair<unsigned short const ,unsigned long> *)&_Val);
      std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v5->m_mapByHandle,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
        v17,
        0);
      result = (Avatar *)v7;
    }
  }
  return result;
}

//----- (0064E910) --------------------------------------------------------
Avatar *__thiscall CharMgr::AddAvatar(CharMgr *this, PROTO_AVATAR_SHAPE_INFO *pkInfo, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiFrame)
{
  CharMgr *v5; // ebx@1
  void *v6; // eax@1
  int v7; // esi@1
  int v8; // eax@2
  Avatar *result; // eax@6
  int v10; // eax@9
  NiTListItem<Char *> *v11; // ecx@9
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v12; // eax@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v13; // eax@12
  std::pair<int const ,int> _Val; // [sp+0h] [bp-14h]@1
  int v15; // [sp+10h] [bp-4h]@1

  v5 = this;
  v6 = operator new(0xB84u);
  _Val.baseclass_0.second = (int)v6;
  v7 = 0;
  v15 = 0;
  if ( v6 )
  {
    Avatar::Avatar((Avatar *)v6);
    v7 = v8;
  }
  v15 = -1;
  if ( Avatar::ResetView((Avatar *)v7, pkInfo, uiFrame) )
  {
    (*(void (__thiscall **)(int, NiPoint3 *, NiPoint3 *))(*(_DWORD *)v7 + 184))(v7, kPos, kDir);
    if ( !uiFrame )
      (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 340))(v7);
    v10 = (int)v5->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *)&v5->m_kList);
    *(_DWORD *)(v10 + 8) = v7;
    *(_DWORD *)v10 = 0;
    *(_DWORD *)(v10 + 4) = v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v11 = v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v11 )
      v11->m_pkNext = (NiTListItem<Char *> *)v10;
    else
      v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<Char *> *)v10;
    ++*(_DWORD *)&v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v5->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<Char *> *)v10;
    _Val.baseclass_0.first = *(_DWORD *)(v7 + 700);
    _Val.baseclass_0.second = v7;
    v12 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
            (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v5->m_mapByCharNode,
            &_Val);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v5->m_mapByCharNode,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&_Val,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v12,
      0);
    LOWORD(_Val.baseclass_0.first) = *(_WORD *)(v7 + 548);
    _Val.baseclass_0.second = v7;
    v13 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
            (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v5->m_mapByHandle,
            (std::pair<unsigned short const ,unsigned long> *)&_Val);
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v5->m_mapByHandle,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
      v13,
      0);
    result = (Avatar *)v7;
  }
  else
  {
    if ( v7 )
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v7 + 28))(v7, 1);
    result = 0;
  }
  return result;
}

//----- (0064EA60) --------------------------------------------------------
void __thiscall CharMgr::_CharMgr(CharMgr *this)
{
  CharMgr *v1; // esi@1
  char *v2; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // ST04_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v5; // ST08_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v6; // ST04_4@1
  void **v7; // eax@1
  void *v8; // ecx@1
  void *v9; // edi@2
  int v10; // edi@3
  NiTListItem<Char *> *v11; // ebx@3
  NiTListItem<Char *> *v12; // eax@3
  NiTListItem<Char *> *v13; // ST08_4@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v14; // ST08_4@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v15; // ST04_4@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v16; // ST08_4@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v17; // ST04_4@6
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@1
  std::map<unsigned short,Char *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,Char *> > > *v19; // [sp+4h] [bp-14h]@1
  CharMgr *v20; // [sp+8h] [bp-10h]@1
  int v21; // [sp+14h] [bp-4h]@1

  v1 = this;
  v20 = this;
  v21 = 0;
  v2 = (char *)&this->m_mapByHandle;
  v19 = &this->m_mapByHandle;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)this->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&v3;
  LOBYTE(v21) = 6;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_mapByHandle,
    &result,
    v4,
    v3);
  operator delete(*((void **)v2 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_mapByCharNode;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v21) = 7;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapByCharNode,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&v19,
    v6,
    v5);
  operator delete(v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v7 = *(void ***)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *v7;
  *v7 = v7;
  *(_DWORD *)(*(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_listCharNPC.baseclass_0.baseclass_0._Mysize = 0;
  if ( v8 != *(void **)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v9 = *(void **)v8;
      operator delete(v8);
      v8 = v9;
    }
    while ( v9 != *(void **)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  v10 = (int)&v1->m_kList;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_kList;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&PgTList<Char__>::_vftable_;
  v11 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v12 = 0;
  LOBYTE(v21) = 8;
  if ( v11 )
  {
    do
    {
      v13 = v11;
      v11 = v11->m_pkNext;
      (*(void (__thiscall **)(PgTList<Char *> *, NiTListItem<Char *> *))(*(_DWORD *)v10 + 8))(&v1->m_kList, v13);
    }
    while ( v11 );
    v12 = 0;
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v12;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v12;
  *(_DWORD *)v10 = &NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_kmapFadeOutDeletedChar;
  v14 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v15 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v21) = 10;
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
    &v1->m_kmapFadeOutDeletedChar.baseclass_0,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v19,
    v15,
    v14);
  operator delete(v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_kmapDeletedChar;
  v16 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v17 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v21) = 11;
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
    &v1->m_kmapDeletedChar.baseclass_0,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v19,
    v17,
    v16);
  operator delete(v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead);
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Tidy(&v1->m_kLoadDataList);
  operator delete(v1->m_kLoadDataList.baseclass_0.baseclass_0._Myproxy);
  v1->m_kLoadDataList.baseclass_0.baseclass_0._Myproxy = 0;
}
// 9C3AE8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);
// 9C3B08: using guessed type int (__thiscall *PgTList_Char _____vftable_)(void *p, char);

//----- (0064EBE0) --------------------------------------------------------
Char *__thiscall CharMgr::AddChar(CharMgr *this, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel)
{
  Char *result; // eax@1
  Char *v7; // ebx@1
  _BYTE v8[12]; // ST18_12@2
  _BYTE v9[12]; // ST0C_12@2
  CharMgr::LoadData *v10; // eax@2
  char thisa; // [sp+Ch] [bp-118h]@2
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v12; // [sp+120h] [bp-4h]@1

  v12 = (std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)this;
  result = CharMgr::AddCharQue(this, kClassID, byGender, kPos, kDir, uiEquipLevel);
  v7 = result;
  if ( result )
  {
    *(_DWORD *)v8 = LODWORD(kDir->x);
    *(_QWORD *)&v8[4] = *(_QWORD *)&kDir->y;
    *(_DWORD *)v9 = LODWORD(kPos->x);
    *(_QWORD *)&v9[4] = *(_QWORD *)&kPos->y;
    CharMgr::LoadData::LoadData(
      (CharMgr::LoadData *)&thisa,
      result,
      kClassID,
      byGender,
      *(NiPoint3 *)v9,
      *(NiPoint3 *)v8,
      uiEquipLevel);
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::push_back(v12, v10);
    result = v7;
  }
  return result;
}

//----- (0064EC70) --------------------------------------------------------
void __thiscall CharMgr::DeleteChar(CharMgr *this, Char *pkChar)
{
  Char *v2; // edi@1
  CharMgr *v3; // ebx@1
  Mover *v4; // ecx@2
  Char *v5; // eax@6
  int v6; // edx@7
  Char *v7; // esi@7
  int v8; // ecx@16
  int v9; // eax@16
  int v10; // edx@21
  int v11; // ecx@21
  unsigned int v12; // ecx@25
  std::_Container_base12 *v13; // esi@27
  std::_Container_proxy *v14; // edx@29
  int v15; // eax@29
  std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > v16; // [sp-Ch] [bp-38h]@34
  int v17; // [sp-8h] [bp-34h]@34
  void *v18; // [sp-4h] [bp-30h]@21
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iterEnd; // [sp+Ch] [bp-20h]@25
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iter; // [sp+18h] [bp-14h]@25
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *thisa; // [sp+24h] [bp-8h]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+28h] [bp-4h]@12

  v2 = pkChar;
  v3 = this;
  thisa = (std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)this;
  if ( pkChar )
  {
    World::DetachChar(&g_kWorld, pkChar);
    v4 = v2->m_pkMover;
    if ( v4 )
      Mover::RideOff(v4, v2->m_uiMoverSlot);
    if ( (unsigned __int8)((int (__thiscall *)(Char *))v2->baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v2) )
      Mover::RideAllOff((Mover *)v2);
    v5 = (Char *)v3->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v5 )
    {
      while ( 1 )
      {
        v6 = (int)&v5->baseclass_0.m_kAbStateList;
        v7 = v5;
        v5 = (Char *)v5->baseclass_0.vfptr;
        if ( v2 == *(Char **)v6 )
          break;
        if ( !v5 )
          goto LABEL_9;
      }
    }
    else
    {
LABEL_9:
      v7 = 0;
    }
    pkChar = v7;
    if ( v7 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kList,
        (void **)&pkChar);
    pkChar = (Char *)v2->m_spScene.m_pObject;
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v3->m_mapByCharNode,
      &result,
      (const unsigned int *)&pkChar);
    if ( (std::_Tree_nod<std::_Tmap_traits<NiNode *,Char *,std::less<NiNode *>,std::allocator<std::pair<NiNode * const,Char *> >,0> >::_Node *)result != v3->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead )
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v3->m_mapByCharNode,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&pkChar,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)result);
    pkChar = (Char *)v2->m_kHandle;
    std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
      (std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *)&v3->m_mapByHandle,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&result,
      (const unsigned __int16 *)&pkChar);
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,Char *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,Char *> >,0> >::_Node *)result != v3->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead )
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v3->m_mapByHandle,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&pkChar,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)result);
    v8 = *(_DWORD *)&v3->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v9 = *(_DWORD *)v8;
    if ( *(_DWORD *)v8 != v8 )
    {
      while ( *(Char **)(v9 + 8) != v2 )
      {
        v9 = *(_DWORD *)v9;
        if ( v9 == v8 )
          goto LABEL_22;
      }
      if ( v9 != v8 )
      {
        **(_DWORD **)(v9 + 4) = *(_DWORD *)v9;
        v10 = *(_DWORD *)v9;
        v11 = *(_DWORD *)(v9 + 4);
        v18 = (void *)v9;
        *(_DWORD *)(v10 + 4) = v11;
        operator delete(v18);
        --v3->m_listCharNPC.baseclass_0.baseclass_0._Mysize;
      }
    }
LABEL_22:
    if ( g_pkMainChar && (Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] == v2 )
      MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(&v3->m_kLoadDataList, &iter);
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(&v3->m_kLoadDataList, &iterEnd);
    v12 = iter.baseclass_0._Myoff;
    if ( iter.baseclass_0._Myoff != iterEnd.baseclass_0._Myoff )
    {
      while ( 1 )
      {
        if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
          v13 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
        else
          v13 = 0;
        v14 = v13[2]._Myproxy;
        v15 = v12;
        if ( (unsigned int)v14 <= v12 )
          v15 = v12 - (_DWORD)v14;
        if ( (Char *)(&v13[1]._Myproxy->_Mycont)[v15][60]._Myproxy == v2 )
          break;
        ++v12;
        if ( v12 == iterEnd.baseclass_0._Myoff )
          goto LABEL_38;
      }
      pkChar = (Char *)&v16;
      v16.baseclass_0._Myproxy = 0;
      v17 = 0;
      if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy && iter.baseclass_0.baseclass_0._Myproxy->_Mycont )
        v16.baseclass_0._Myproxy = iter.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
      v18 = (void *)v12;
      std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::erase(thisa, &iterEnd, v16);
    }
LABEL_38:
    if ( g_pkMainChar == v2 )
      g_pkMainChar = 0;
    v2->baseclass_0.vfptr->__vecDelDtor((AbStateInfectee *)v2, 1u);
  }
}

//----- (0064EE50) --------------------------------------------------------
bool __thiscall CharMgr::ImmediatelyLoadQueueingChar(CharMgr *this, Char *pkChar)
{
  CharMgr *v2; // ebx@1
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v3; // eax@2
  unsigned int v4; // esi@2
  std::_Container_base12 *v5; // edx@5
  std::_Container_proxy *v6; // ecx@7
  int v7; // eax@7
  std::_Container_base12 *v8; // edi@9
  std::_Container_proxy *v9; // edx@10
  NiTListItem<Char *> *v10; // eax@11
  Char *v11; // ecx@12
  bool v12; // al@18
  std::_Container_proxy *v13; // eax@19
  unsigned int v14; // esi@19
  char v15; // bl@19
  unsigned __int8 v16; // al@23
  int v17; // esi@24
  int v18; // ebx@24
  int v19; // edx@26
  int v20; // eax@27
  std::_Container_proxy *v21; // [sp+4h] [bp-34h]@29
  float v22; // [sp+8h] [bp-30h]@29
  unsigned int v23; // [sp+Ch] [bp-2Ch]@32
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > result; // [sp+1Ch] [bp-1Ch]@2
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > iter; // [sp+28h] [bp-10h]@2
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *thisa; // [sp+34h] [bp-4h]@1
  int pkChara; // [sp+40h] [bp+8h]@3

  v2 = this;
  thisa = (std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)this;
  if ( pkChar
    && (std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(&this->m_kLoadDataList, &iter),
        v3 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(&v2->m_kLoadDataList, &result),
        v4 = iter.baseclass_0._Myoff,
        iter.baseclass_0._Myoff != v3->baseclass_0._Myoff) )
  {
    pkChara = pkChar->m_kHandle;
    while ( 1 )
    {
      if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
        v5 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont;
      else
        v5 = 0;
      v6 = v5[2]._Myproxy;
      v7 = v4;
      if ( (unsigned int)v6 <= v4 )
        v7 = v4 - (_DWORD)v6;
      v8 = (&v5[1]._Myproxy->_Mycont)[v7];
      if ( (_WORD)pkChara == LOWORD(v8->_Myproxy) )
      {
        v9 = v8[60]._Myproxy;
        if ( v9 )
        {
          v10 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          if ( v10 )
          {
            while ( 1 )
            {
              v11 = v10->m_element;
              v10 = v10->m_pkNext;
              if ( (Char *)v9 == v11 )
                break;
              if ( !v10 )
                goto LABEL_16;
            }
            if ( v11 )
              break;
          }
        }
      }
LABEL_16:
      ++v4;
      if ( v4 == std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(&v2->m_kLoadDataList, &result)->baseclass_0._Myoff )
      {
        iter.baseclass_0._Myoff = v4;
        goto LABEL_18;
      }
    }
    v13 = v9->_Mycont[150]._Myproxy;
    iter.baseclass_0._Myoff = v4;
    ((void (__stdcall *)(signed int, _DWORD))v13)(1, 0);
    v14 = 0;
    v15 = 1;
    do
    {
      if ( (unsigned __int8)v15 & *((_BYTE *)&v8[22]._Myproxy + (v14 >> 3) + 3) )
        ((void (__stdcall *)(unsigned int, _DWORD, _DWORD))v8[60]._Myproxy->_Mycont[4]._Myproxy)(v14, -1.0, 0);
      ++v14;
      v15 = __ROL__(v15, 1);
    }
    while ( (signed int)v14 < 812 );
    ((void (__stdcall *)(_DWORD))v8[60]._Myproxy->_Mycont[84]._Myproxy)(0);
    v16 = LOBYTE(v8[21]._Myproxy);
    if ( v16 != -1 )
    {
      v17 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
      v18 = v16;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                              v16) )
      {
        if ( (unsigned __int16)v18 <= *(_WORD *)(v17 + 200) )
        {
          v19 = *(_DWORD *)(v17 + 196);
          if ( *(_DWORD *)(v19 + 4 * v18) )
          {
            v20 = *(_DWORD *)(v19 + 4 * v18);
            if ( v20 )
              ((void (__thiscall *)(std::_Container_proxy *, _DWORD))v8[60]._Myproxy->_Mycont[114]._Myproxy)(
                v8[60]._Myproxy,
                *(_BYTE *)v20);
          }
        }
      }
    }
    v21 = 0;
    v22 = 0.0;
    if ( (_DWORD)iter.baseclass_0.baseclass_0._Myproxy )
    {
      if ( iter.baseclass_0.baseclass_0._Myproxy->_Mycont )
        v21 = iter.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
    }
    v23 = iter.baseclass_0._Myoff;
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::erase(
      thisa,
      &result,
      *(std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v21);
    v12 = 1;
  }
  else
  {
LABEL_18:
    v12 = 0;
  }
  return v12;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0064EFF0) --------------------------------------------------------
void __thiscall CharMgr::CharMgr(CharMgr *this)
{
  CharMgr *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  void *v4; // eax@3
  void *v5; // eax@4
  void *v6; // eax@5
  void *v7; // eax@6
  int (__thiscall **pExceptionObject)(void *, char); // [sp+14h] [bp-30h]@10
  std::exception thisa; // [sp+20h] [bp-24h]@8
  CharMgr *v10; // [sp+2Ch] [bp-18h]@1
  int v11; // [sp+30h] [bp-14h]@10
  char *_What; // [sp+34h] [bp-10h]@8
  int v13; // [sp+40h] [bp-4h]@2

  v1 = this;
  v10 = this;
  this->m_kLoadDataList.baseclass_0.baseclass_0._Myproxy = 0;
  v2 = operator new(8u);
  if ( !v2 )
  {
    v11 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v11);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_kLoadDataList.baseclass_0.baseclass_0._Myproxy = (std::_Container_proxy *)v2;
  *(_DWORD *)v2 = 0;
  *((_DWORD *)v2 + 1) = 0;
  v1->m_kLoadDataList.baseclass_0.baseclass_0._Myproxy->_Mycont = (std::_Container_base12 *)v1;
  v1->m_kLoadDataList.baseclass_0._Map = 0;
  v1->m_kLoadDataList.baseclass_0._Mapsize = 0;
  v1->m_kLoadDataList.baseclass_0._Myoff = 0;
  v1->m_kLoadDataList.baseclass_0._Mysize = 0;
  v13 = 0;
  v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x10u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v13) = 1;
  v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x10u);
  if ( !v4 )
  {
    v11 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v11);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v4;
  *(_DWORD *)v4 = v4;
  v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&PgTList<Char__>::_vftable_;
  LOBYTE(v13) = 3;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kSoloKeyPush);
  v1->m_listCharNPC.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0xCu);
  if ( !v5 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)v5 = v5;
  *(_DWORD *)(*(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  LOBYTE(v13) = 4;
  v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v6 = operator new(0x18u);
  if ( !v6 )
  {
    v11 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v11);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<NiNode *,Char *,std::less<NiNode *>,std::allocator<std::pair<NiNode * const,Char *> >,0> >::_Node *)v6;
  *(_DWORD *)v6 = v6;
  v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapByCharNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v13) = 5;
  v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v7 = operator new(0x18u);
  if ( !v7 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,Char *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,Char *> >,0> >::_Node *)v7;
  *(_DWORD *)v7 = v7;
  v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapByHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v13) = 6;
  CNSTimer_Interval::ReSet(&v1->m_kSoloKeyPush, Timer::ms_fCurTime);
  v1->m_kSoloKeyPush.m_fCheckTime = 5.0;
  *(_WORD *)&v1->m_bEnableSoloMode = 0;
  v1->m_iFrameCount = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C3B08: using guessed type int (__thiscall *PgTList_Char _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0064F290) --------------------------------------------------------
void __thiscall CharMgr::Remove(CharMgr *this, Char *pkChar)
{
  CharMgr::DeleteChar(this, pkChar);
}

//----- (0064F2A0) --------------------------------------------------------
void __thiscall CharMgr::RemoveAll(CharMgr *this)
{
  CharMgr *v1; // esi@1
  NiTListItem<Char *> *v2; // edi@1
  Char *v3; // eax@2
  void **v4; // ecx@3
  void *v5; // eax@3
  void *v6; // edi@4

  v1 = this;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element;
    v2 = v2->m_pkNext;
    CharMgr::DeleteChar(v1, v3);
  }
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(&v1->m_kmapDeletedChar.baseclass_0);
  std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(&v1->m_kmapFadeOutDeletedChar.baseclass_0);
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Tidy(&v1->m_kLoadDataList);
  v4 = *(void ***)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = *v4;
  *v4 = v4;
  *(_DWORD *)(*(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_listCharNPC.baseclass_0.baseclass_0._Mysize = 0;
  if ( v5 != *(void **)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v6 = *(void **)v5;
      operator delete(v5);
      v5 = v6;
    }
    while ( v6 != *(void **)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
}

//----- (0064F310) --------------------------------------------------------
void __thiscall CharMgr::RemoveAllWithoutMainChar(CharMgr *this)
{
  CharMgr *v1; // esi@1
  NiTListItem<Char *> *v2; // eax@1
  NiTListItem<Char *> *v3; // edi@2
  Char *v4; // eax@3
  void **v5; // ecx@4
  void *v6; // eax@4
  void *v7; // edi@5

  v1 = this;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    v3 = v2->m_pkNext;
    if ( v2->m_pkNext )
    {
      do
      {
        v4 = v3->m_element;
        v3 = v3->m_pkNext;
        CharMgr::DeleteChar(v1, v4);
      }
      while ( v3 );
    }
    std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(&v1->m_kmapDeletedChar.baseclass_0);
    std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::clear(&v1->m_kmapFadeOutDeletedChar.baseclass_0);
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Tidy(&v1->m_kLoadDataList);
    v5 = *(void ***)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v6 = *v5;
    *v5 = v5;
    *(_DWORD *)(*(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v1->m_listCharNPC.baseclass_0.baseclass_0._Mysize = 0;
    if ( v6 != *(void **)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      do
      {
        v7 = *(void **)v6;
        operator delete(v6);
        v6 = v7;
      }
      while ( v7 != *(void **)&v1->m_listCharNPC.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
    }
  }
}

//----- (0064F380) --------------------------------------------------------
void __thiscall CharMgr::RemoveAllWithoutMainCharAndNPC(CharMgr *this)
{
  CharMgr *v1; // ebx@1
  NiTListItem<Char *> *v2; // eax@1
  NiTListItem<Char *> *v3; // edi@2
  Mover *v4; // esi@3

  v1 = this;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    v3 = v2->m_pkNext;
    if ( v2->m_pkNext )
    {
      do
      {
        v4 = (Mover *)v3->m_element;
        v3 = v3->m_pkNext;
        if ( !Char::IsNPC(&v4->baseclass_0) && v4 != g_pkMainChar->m_pkMover )
        {
          if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v4) )
            Mover::RideAllOff(v4);
          CharMgr::DeleteChar(v1, &v4->baseclass_0);
        }
      }
      while ( v3 );
    }
  }
}

//----- (0064F3E0) --------------------------------------------------------
void __thiscall CharMgr::RemoveFarCharWithoutMainChar(CharMgr *this)
{
  NiTListItem<Char *> *v1; // eax@1
  NiTListItem<Char *> *v2; // ebx@2
  Char *v3; // esi@3
  int v4; // edi@4
  int v5; // eax@4
  float v6; // ST10_4@4
  float v7; // ST14_4@4
  float v8; // ST18_4@4
  float v9; // ST20_4@4
  float v10; // ST24_4@4
  float v11; // ST24_4@4
  CharMgr *thisa; // [sp+Ch] [bp-Ch]@1

  v1 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  if ( v1 )
  {
    v2 = v1->m_pkNext;
    if ( v1->m_pkNext )
    {
      do
      {
        v3 = v2->m_element;
        v2 = v2->m_pkNext;
        if ( v3 )
        {
          v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[6].Deaffect)(v3);
          v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
          v6 = *(float *)v5 - *(float *)v4;
          v7 = *(float *)(v5 + 4) - *(float *)(v4 + 4);
          v8 = *(float *)(v5 + 8) - *(float *)(v4 + 8);
          v9 = (double)*(unsigned int *)&g_pkMainChar[1].m_AttackTargetHandle;
          v10 = v7 * v7 + v6 * v6 + v8 * v8;
          v11 = sqrt(v10);
          if ( v9 < (double)v11 )
            CharMgr::DeleteChar(thisa, v3);
        }
      }
      while ( v2 );
    }
  }
}

//----- (0064F4C0) --------------------------------------------------------
void __thiscall CharMgr::Update(CharMgr *this, float fCurTime)
{
  CharMgr *v2; // ebx@1
  unsigned int v3; // esi@1
  bool v4; // zf@1
  bool v5; // sf@1
  unsigned __int8 v6; // of@1
  CharMgr::LoadData *v7; // edi@5
  Char *v8; // edx@5
  NiTListItem<Char *> *v9; // eax@6
  Char *v10; // ecx@7
  char v11; // bl@14
  char v12; // al@18
  int v13; // esi@19
  int v14; // ebx@19
  int v15; // edx@21
  int v16; // eax@22
  unsigned int v17; // eax@27
  int v18; // eax@30
  int v19; // ecx@33
  Char *v20; // esi@36
  void (__thiscall *v21)(AbStateInfectee *, ABSTATEINDEX); // eax@36
  int v22; // ecx@36
  unsigned __int16 v23; // dx@36
  int v24; // eax@36
  int v25; // eax@41
  int *v26; // eax@43
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v27; // edi@45
  std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *v28; // eax@47
  char *v29; // eax@47
  int v30; // ecx@49
  int v31; // eax@49
  int v32; // eax@54
  int *v33; // eax@56
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v34; // edi@58
  char v35; // [sp+30h] [bp-24h]@47
  char v36; // [sp+38h] [bp-1Ch]@59
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+3Ch] [bp-18h]@47
  int v38; // [sp+40h] [bp-14h]@57
  int v39; // [sp+44h] [bp-10h]@44
  int v40; // [sp+48h] [bp-Ch]@41
  int i; // [sp+4Ch] [bp-8h]@3
  CharMgr *hHandle; // [sp+50h] [bp-4h]@1

  v2 = this;
  ++v2->m_iFrameCount;
  v3 = 0;
  v6 = __OFSUB__(this->m_iFrameCount, 1000);
  v4 = this->m_iFrameCount == 1000;
  v5 = this->m_iFrameCount - 1000 < 0;
  hHandle = this;
  if ( !((unsigned __int8)(v5 ^ v6) | v4) )
    this->m_iFrameCount = 0;
  i = 0;
  do
  {
    if ( v2->m_kLoadDataList.baseclass_0._Mysize == v3 )
      break;
    v7 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::front(&v2->m_kLoadDataList);
    v8 = v7->pkChar;
    if ( v8 != (Char *)v3 )
    {
      v9 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v9 != (NiTListItem<Char *> *)v3 )
      {
        while ( 1 )
        {
          v10 = v9->m_element;
          v9 = v9->m_pkNext;
          if ( v8 == v10 )
            break;
          if ( v9 == (NiTListItem<Char *> *)v3 )
            goto LABEL_27;
        }
        if ( v10 != (Char *)v3 )
        {
          if ( v2->m_iFrameCount < 2 )
            break;
          v2->m_iFrameCount = v3;
          ((void (__stdcall *)(signed int, unsigned int))v7->pkChar->baseclass_0.vfptr[18].GetAbstateColor)(1, v3);
          if ( v7->CharData.polymorph != -1 )
          {
            Char::EnablePolymorph(v7->pkChar, 1);
            Char::ImmediatelyMetamorphosis(v7->pkChar, v7->CharData.polymorph);
          }
          v11 = 1;
          do
          {
            if ( (unsigned __int8)v11 & v7->CharData.abstatebit.statebit[v3 >> 3] )
              ((void (__stdcall *)(unsigned int, _DWORD, _DWORD))v7->pkChar->baseclass_0.vfptr->AddAbStateByAbstateIndex)(
                v3,
                -1.0,
                0);
            ++v3;
            v11 = __ROL__(v11, 1);
          }
          while ( (signed int)v3 < 812 );
          ((void (__stdcall *)(_DWORD))v7->pkChar->baseclass_0.vfptr[10].AddAbStateByAbstateIndex)(0);
          v12 = v7->CharData.emoticon.emoticonid;
          if ( v12 != -1 )
          {
            v13 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
            v14 = (unsigned __int8)v12;
            if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                     + 16))(
                                    ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                                    (unsigned __int8)v12) )
            {
              if ( (unsigned __int16)v14 <= *(_WORD *)(v13 + 200) )
              {
                v15 = *(_DWORD *)(v13 + 196);
                if ( *(_DWORD *)(v15 + 4 * v14) )
                {
                  v16 = *(_DWORD *)(v15 + 4 * v14);
                  if ( v16 )
                    ((void (__stdcall *)(_DWORD))v7->pkChar->baseclass_0.vfptr[14].SetAbStateProperty)(*(_BYTE *)v16);
                }
              }
            }
          }
          if ( strcmp(v7->CharData.sAnimation, (const char *)&unk_9C3A8C) == 1 )
            Char::ActAction(v7->pkChar, v7->CharData.sAnimation, 0);
          v2 = hHandle;
          v3 = 0;
        }
      }
    }
LABEL_27:
    v17 = v2->m_kLoadDataList.baseclass_0._Mysize;
    if ( v17 != v3 )
    {
      ++v2->m_kLoadDataList.baseclass_0._Myoff;
      if ( v2->m_kLoadDataList.baseclass_0._Mapsize <= v2->m_kLoadDataList.baseclass_0._Myoff )
        v2->m_kLoadDataList.baseclass_0._Myoff = v3;
      v18 = v17 - 1;
      v2->m_kLoadDataList.baseclass_0._Mysize = v18;
      if ( v18 == v3 )
        v2->m_kLoadDataList.baseclass_0._Myoff = v3;
    }
    ++i;
  }
  while ( i < 1 );
  v19 = (int)v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v19 != v3 )
  {
    while ( 1 )
    {
      v20 = *(Char **)(v19 + 8);
      v21 = v20->baseclass_0.vfptr[17].DeleteAbStateByAbstateIndex;
      i = *(_DWORD *)v19;
      v21(&v20->baseclass_0, SLODWORD(fCurTime));
      v22 = (int)v2->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v23 = v20->m_kHandle;
      v24 = *(_DWORD *)(v22 + 4);
      v4 = *(_BYTE *)(v24 + 15) == 0;
      hHandle = (CharMgr *)v20->m_kHandle;
      if ( v4 )
      {
        do
        {
          if ( *(_WORD *)(v24 + 12) >= v23 )
          {
            v22 = v24;
            v24 = *(_DWORD *)v24;
          }
          else
          {
            v24 = *(_DWORD *)(v24 + 8);
          }
        }
        while ( !*(_BYTE *)(v24 + 15) );
      }
      v25 = (int)v2->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v40 = v22;
      if ( v22 == v25 || v23 < *(_WORD *)(v22 + 12) )
      {
        v39 = v25;
        v26 = &v39;
      }
      else
      {
        v26 = &v40;
      }
      v27 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)*v26;
      if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)*v26 != v2->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        if ( !Char::IsFade(v20) )
        {
          std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
            &v2->m_kmapFadeOutDeletedChar.baseclass_0,
            &result,
            v27);
          v28 = std::_Tree_val<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Buynode<unsigned_short>(
                  &v2->m_kmapDeletedChar.baseclass_0.baseclass_0,
                  (unsigned __int16 *)&hHandle);
          std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::_Linsert(
            &v2->m_kmapDeletedChar.baseclass_0,
            (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >,bool> *)&v35,
            v28,
            0);
          ((void (__thiscall *)(Char *))v20->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v20);
          v29 = fs("Insert DeletedChar[ %s ]\n");
          OutputDebugStringA(v29);
        }
        v23 = (unsigned __int16)hHandle;
      }
      v30 = (int)v2->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v31 = *(_DWORD *)(v30 + 4);
      while ( !*(_BYTE *)(v31 + 15) )
      {
        if ( *(_WORD *)(v31 + 12) >= v23 )
        {
          v30 = v31;
          v31 = *(_DWORD *)v31;
        }
        else
        {
          v31 = *(_DWORD *)(v31 + 8);
        }
      }
      v32 = (int)v2->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v40 = v30;
      if ( v30 == v32 || v23 < *(_WORD *)(v30 + 12) )
      {
        v38 = v32;
        v33 = &v38;
      }
      else
      {
        v33 = &v40;
      }
      v34 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)*v33;
      if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)*v33 != v2->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        CharMgr::DeleteChar(v2, v20);
        std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
          &v2->m_kmapDeletedChar.baseclass_0,
          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&v36,
          v34);
      }
      if ( !i )
        break;
      v19 = i;
    }
  }
  QuestDataMgr::m_bUpdate = 0;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0064F7F0) --------------------------------------------------------
Char *__thiscall CharMgr::AddMob(CharMgr *this, unsigned __int16 kMobID, unsigned __int16 kHandle, NiPoint3 *kPos, NiPoint3 *kDir, bool bDoor, bool bDead)
{
  CharMgr *v7; // ebx@1
  Char *v8; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v9; // eax@2
  int v10; // edi@4
  void *v11; // eax@5
  int v12; // eax@6
  void *v13; // eax@7
  int v14; // esi@10
  int v15; // eax@11
  bool v16; // zf@13
  int v17; // eax@13
  Char *result; // eax@14
  int v19; // eax@22
  NiTListItem<Char *> *v20; // ecx@22
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v21; // eax@25
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v22; // eax@25
  std::pair<int const ,int> _Val; // [sp+0h] [bp-14h]@2
  int v24; // [sp+10h] [bp-4h]@5

  v7 = this;
  v8 = CharMgr::GetChar(this, kHandle);
  if ( v8 )
  {
    CharMgr::DeleteChar(v7, v8);
    v9 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::find(&v7->m_kmapFadeOutDeletedChar.baseclass_0, (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&_Val.baseclass_0.second, &kHandle)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v9 != v7->m_kmapFadeOutDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead )
      std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
        &v7->m_kmapFadeOutDeletedChar.baseclass_0,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&_Val.baseclass_0.second,
        v9);
  }
  v10 = kMobID;
  if ( 5700 != kMobID )
  {
    v13 = operator new(0xB84u);
    *(_DWORD *)&kMobID = v13;
    v24 = 1;
    if ( v13 )
    {
      Char::Char((Char *)v12);
      goto LABEL_10;
    }
LABEL_9:
    v12 = 0;
    goto LABEL_10;
  }
  v11 = operator new(0xB84u);
  *(_DWORD *)&kMobID = v11;
  v24 = 0;
  if ( !v11 )
    goto LABEL_9;
  ObjectChar::ObjectChar((ObjectChar *)v11);
LABEL_10:
  v14 = v12;
  *(_DWORD *)&kMobID = v12;
  v24 = -1;
  if ( bDoor )
  {
    v15 = *(_DWORD *)(v12 + 700);
    *(_BYTE *)(v14 + 2502) = 1;
    if ( v15 )
      *(_WORD *)(v15 + 28) &= 0xFFFEu;
  }
  v16 = (*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v14 + 552))(v14, v10, kHandle) == 0;
  v17 = *(_DWORD *)v14;
  if ( v16 )
  {
    (*(void (__thiscall **)(int))(v17 + 28))(v14);
    result = 0;
  }
  else
  {
    if ( (unsigned __int8)(*(int (__thiscall **)(int, signed int, _DWORD))(v17 + 600))(v14, 1, 0) )
    {
      if ( bDead )
        Char::SetMode((Char *)v14, 3);
      (*(void (__thiscall **)(int, NiPoint3 *, NiPoint3 *))(*(_DWORD *)v14 + 184))(v14, kPos, kDir);
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v14 + 336))(v14, 1);
      if ( Char::IsCharNPC((Char *)v14) )
      {
        Char::ApplyCharNpcBaseAction((Char *)v14, 1);
        if ( Char::HaveEventNPCAction((Char *)v14) )
          std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(
            (std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *)&v7->m_listCharNPC,
            (ABSTATEINDEX *)&kMobID);
      }
      v19 = (int)v7->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *)&v7->m_kList);
      *(_DWORD *)(v19 + 8) = v14;
      *(_DWORD *)v19 = 0;
      *(_DWORD *)(v19 + 4) = v7->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      v20 = v7->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      if ( v20 )
        v20->m_pkNext = (NiTListItem<Char *> *)v19;
      else
        v7->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<Char *> *)v19;
      ++*(_DWORD *)&v7->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v7->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<Char *> *)v19;
      _Val.baseclass_0.first = *(_DWORD *)(v14 + 700);
      _Val.baseclass_0.second = v14;
      v21 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
              (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v7->m_mapByCharNode,
              &_Val);
      std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v7->m_mapByCharNode,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&_Val,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v21,
        0);
      LOWORD(_Val.baseclass_0.first) = *(_WORD *)(v14 + 548);
      _Val.baseclass_0.second = v14;
      v22 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
              (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v7->m_mapByHandle,
              (std::pair<unsigned short const ,unsigned long> *)&_Val);
      std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v7->m_mapByHandle,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
        v22,
        0);
      World::AttachChar(&g_kWorld, (Char *)v14);
      result = (Char *)v14;
    }
    else
    {
      (*(void (__thiscall **)(int))(*(_DWORD *)v14 + 28))(v14);
      result = 0;
    }
  }
  return result;
}

//----- (0064FA40) --------------------------------------------------------
Char *__thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_BUILDDOOR_CMD *p)
{
  CharMgr *v2; // edi@1
  float v3; // ST10_4@1
  float v4; // ST0C_4@1
  unsigned __int16 v5; // ax@1
  Char *v7; // edi@3
  int (__thiscall *v8)(AbStateInfectee *); // edx@4
  float v9; // ecx@4
  float v10; // edx@4
  float v11; // eax@4
  float v12; // edx@4
  float v13; // ecx@4
  float v14; // eax@4
  float v15; // ecx@4
  int v16; // eax@4
  char v17; // cl@5
  char v18; // al@6
  NiPoint3 kPos; // [sp+14h] [bp-44h]@1
  NiPoint3 kDir; // [sp+20h] [bp-38h]@1
  float v21; // [sp+2Ch] [bp-2Ch]@1
  NiMatrix3 szBlockName; // [sp+30h] [bp-28h]@1
  unsigned int v23; // [sp+54h] [bp-4h]@1
  int v24; // [sp+58h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v2 = this;
  v4 = (double)p->coord.xy.x;
  v3 = (double)p->coord.xy.y;
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  LODWORD(v21) = ((unsigned int)p->coord.dir + 90) % 0xB4;
  v21 = (double)SLODWORD(v21) * (NI_PI + NI_PI) / 180.0;
  NiMatrix3::MakeZRotation(&szBlockName, v21);
  NiMatrix3::operator_(&szBlockName, &kDir, &World::ms_kNorthDir);
  v5 = p->mobid;
  if ( v5 == -1 || (v7 = CharMgr::AddMob(v2, v5, p->handle, &kPos, &kDir, 1, 0)) == 0 )
    return 0;
  LODWORD(v21) = p->scale;
  v8 = v7->baseclass_0.vfptr[16].IsVisible;
  v21 = (double)SLODWORD(v21) / 1000.0;
  ((void (__thiscall *)(Char *, _DWORD))v8)(v7, LODWORD(v21));
  LODWORD(v9) = *(_DWORD *)&p->blockindex.n8_name[4];
  LODWORD(v10) = *(_DWORD *)&p->blockindex.n8_name[8];
  LODWORD(szBlockName.m_pEntry[0][0]) = *(_DWORD *)&p->blockindex.n8_name[0];
  LODWORD(v11) = *(_DWORD *)&p->blockindex.n8_name[12];
  szBlockName.m_pEntry[0][2] = v10;
  LODWORD(v12) = *(_DWORD *)&p->blockindex.n8_name[20];
  szBlockName.m_pEntry[0][1] = v9;
  LODWORD(v13) = *(_DWORD *)&p->blockindex.n8_name[16];
  szBlockName.m_pEntry[1][0] = v11;
  LODWORD(v14) = *(_DWORD *)&p->blockindex.n8_name[24];
  szBlockName.m_pEntry[1][2] = v12;
  szBlockName.m_pEntry[1][1] = v13;
  LODWORD(v15) = *(_DWORD *)&p->blockindex.n8_name[28];
  szBlockName.m_pEntry[2][0] = v14;
  v16 = (int)v7->m_szBlockName;
  szBlockName.m_pEntry[2][1] = v15;
  LOBYTE(szBlockName.m_pEntry[2][2]) = 0;
  do
  {
    v17 = *(_BYTE *)((char *)&szBlockName - v7->m_szBlockName + v16);
    *(_BYTE *)v16++ = v17;
  }
  while ( v17 );
  v18 = p->doorstate;
  if ( v18 )
  {
    if ( (unsigned __int8)(v18 - 1) <= 1u )
    {
      Char::OpenDoor(v7);
      return v7;
    }
  }
  else
  {
    Char::CloseDoor(v7);
  }
  return v7;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (0064FBE0) --------------------------------------------------------
Char *__thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_REGENMOB_CMD *p)
{
  double v2; // st7@1
  float v3; // ST10_4@1
  float v4; // ST0C_4@1
  int v5; // edi@1
  int v6; // ebx@1
  int v7; // edx@1
  int v8; // eax@3
  int v9; // ebx@3
  int v10; // eax@4
  unsigned int v11; // ecx@6
  unsigned __int16 v12; // ax@9
  Char *result; // eax@10
  bool v14; // zf@11
  Char *v15; // edi@13
  char v16; // al@14
  unsigned int v17; // edx@15
  AbStateInfecteeVtbl *v18; // eax@15
  char v19; // al@16
  MapInfo *v20; // eax@17
  unsigned int v21; // edi@20
  char v22; // bl@20
  NiPoint3 kPos; // [sp+18h] [bp-54h]@1
  NiPoint3 kDir; // [sp+24h] [bp-48h]@9
  CharMgr *v25; // [sp+30h] [bp-3Ch]@1
  float pkMob; // [sp+34h] [bp-38h]@1
  NiMatrix3 thisa; // [sp+38h] [bp-34h]@9
  char kMapName[4]; // [sp+5Ch] [bp-10h]@17
  int v29; // [sp+60h] [bp-Ch]@17
  int v30; // [sp+64h] [bp-8h]@17
  unsigned int v31; // [sp+68h] [bp-4h]@1
  int v32; // [sp+6Ch] [bp+0h]@1

  v31 = (unsigned int)&v32 ^ __security_cookie;
  v2 = (double)p->coord.xy.y;
  v25 = this;
  v4 = (double)p->coord.xy.x;
  v3 = v2;
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  v5 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v6 = p->mobid;
  v7 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  LODWORD(pkMob) = p->coord.dir;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(v7 + 16))(ITableBase<MobInfo_MobInfoTab>::ms_pkTable, v6)
    || (unsigned __int16)v6 > *(_WORD *)(v5 + 200) )
  {
    v9 = 0;
LABEL_8:
    LOBYTE(v11) = LOBYTE(pkMob);
    goto LABEL_9;
  }
  v8 = *(_DWORD *)(v5 + 196) + 4 * v6;
  v9 = 0;
  if ( !*(_DWORD *)v8 || (v10 = *(_DWORD *)v8) == 0 || !*(_BYTE *)(v10 + 82) )
    goto LABEL_8;
  v11 = (LODWORD(pkMob) + 90) % 0xB4u;
LABEL_9:
  pkMob = (NI_PI + NI_PI) * (double)(unsigned __int8)v11 / 180.0;
  NiMatrix3::MakeZRotation(&thisa, pkMob);
  NiMatrix3::operator_(&thisa, &kDir, &World::ms_kNorthDir);
  v12 = p->mobid;
  if ( v12 == -1 )
    goto LABEL_32;
  v14 = p->mode == 3;
  LOBYTE(pkMob) = 0;
  if ( v14 )
    LOBYTE(pkMob) = 1;
  v15 = CharMgr::AddMob(v25, v12, p->handle, &kPos, &kDir, v9, SLOBYTE(pkMob));
  LODWORD(pkMob) = v15;
  if ( v15 == (Char *)v9 )
  {
LABEL_32:
    result = 0;
  }
  else
  {
    v16 = p->nAnimationLevel;
    if ( v16 )
    {
      v17 = (unsigned __int8)v16;
      v18 = v15->baseclass_0.vfptr;
      v15->m_uiConditionAniLevel = v17;
      ((void (__thiscall *)(Char *))v18[10].DeleteAbStateByAbstateIndex)(v15);
    }
    v19 = p->flagstate;
    if ( v19 == 1 )
    {
      v30 = v9;
      v29 = v9;
      *(_DWORD *)kMapName = v9;
      strncpy(kMapName, p->flag.abstatebit.statebit, 0xCu);
      v20 = MapInfoTab::GetByMapName((Name3 *)kMapName);
      if ( v20 != (MapInfo *)v9 )
        Char::SetLinkGateName(v15, v20->Name);
    }
    else
    {
      if ( !v19 )
      {
        v21 = 0;
        v22 = 1;
        do
        {
          if ( (unsigned __int8)v22 & p->flag.abstatebit.statebit[v21 >> 3] )
            (*(void (__stdcall **)(unsigned int, _DWORD, _DWORD))(*LODWORD(pkMob) + 16))(v21, -1.0, 0);
          ++v21;
          v22 = __ROL__(v22, 1);
        }
        while ( (signed int)v21 < 812 );
        v15 = (Char *)LODWORD(pkMob);
      }
    }
    if ( strcmp(p->sAnimation, (const char *)&unk_9C3A8D) == 1 )
      Char::ActAction(v15, p->sAnimation, 0);
    v15->m_byKQTeamType = p->nKQTeamType;
    if ( p->bRegenAni )
      Char::ActAction(v15, REGEN, 0);
    result = v15;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// B6DE8C: using guessed type const float NI_PI;

//----- (0064FE40) --------------------------------------------------------
bool __thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_MOB_CMD *p)
{
  bool v2; // zf@1
  PROTO_NC_BRIEFINFO_MOB_CMD *v3; // edi@2
  float v4; // ST10_4@3
  float v5; // ST0C_4@3
  int v6; // esi@3
  int v7; // edx@3
  unsigned int v8; // ebx@3
  int v9; // eax@5
  int v10; // eax@6
  unsigned __int16 v11; // ax@9
  float v12; // esi@12
  eActionWeight v13; // ebx@12
  char v14; // al@13
  int v15; // edx@14
  int v16; // eax@14
  char v17; // al@15
  MapInfo *v18; // eax@16
  unsigned int v19; // esi@19
  char v20; // bl@19
  int v21; // ecx@28
  bool v22; // al@29
  NiPoint3 result; // [sp+18h] [bp-60h]@9
  NiPoint3 kTargetPos; // [sp+24h] [bp-54h]@3
  CharMgr *v25; // [sp+30h] [bp-48h]@1
  PROTO_NC_BRIEFINFO_MOB_CMD *v26; // [sp+34h] [bp-44h]@1
  bool bDead[4]; // [sp+38h] [bp-40h]@10
  int i; // [sp+3Ch] [bp-3Ch]@1
  float v29; // [sp+40h] [bp-38h]@3
  NiMatrix3 thisa; // [sp+44h] [bp-34h]@9
  char kMapName[4]; // [sp+68h] [bp-10h]@16
  int v32; // [sp+6Ch] [bp-Ch]@16
  int v33; // [sp+70h] [bp-8h]@16
  unsigned int v34; // [sp+74h] [bp-4h]@1
  int v35; // [sp+78h] [bp+0h]@1

  v34 = (unsigned int)&v35 ^ __security_cookie;
  v2 = p->mobnum == 0;
  v25 = this;
  v26 = p;
  i = 0;
  if ( v2 )
  {
LABEL_29:
    v22 = 1;
  }
  else
  {
    v3 = p + 118;
    while ( 1 )
    {
      v5 = (double)*(unsigned int *)&v3[-112].mobnum;
      v4 = (double)*(unsigned int *)&v3[-108].mobnum;
      World::GetAdvGroundPos(&g_kWorld, v5, v4, &kTargetPos);
      v6 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
      v7 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
      v8 = v3[-104].mobnum;
      LODWORD(v29) = *(_WORD *)&v3[-114].mobnum;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(v7 + 16))(
                              ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                              LODWORD(v29)) )
      {
        if ( LOWORD(v29) <= *(_WORD *)(v6 + 200) )
        {
          v9 = *(_DWORD *)(v6 + 196) + 4 * LOWORD(v29);
          if ( *(_DWORD *)v9 )
          {
            v10 = *(_DWORD *)v9;
            if ( v10 )
            {
              if ( *(_BYTE *)(v10 + 82) )
                v8 = (v8 + 90) % 0xB4;
            }
          }
        }
      }
      v29 = (NI_PI + NI_PI) * (double)(unsigned __int8)v8 / 180.0;
      NiMatrix3::MakeZRotation(&thisa, v29);
      NiMatrix3::operator_(&thisa, &result, &World::ms_kNorthDir);
      v11 = *(_WORD *)&v3[-114].mobnum;
      if ( v11 == -1 )
        break;
      v2 = v3[-115].mobnum == 3;
      bDead[0] = 0;
      if ( v2 )
        bDead[0] = 1;
      LODWORD(v12) = CharMgr::AddMob(v25, v11, *(_WORD *)&v3[-117].mobnum, &kTargetPos, &result, 0, bDead[0]);
      v13 = 0;
      v29 = v12;
      if ( !LODWORD(v12) )
        break;
      v14 = v3[32].mobnum;
      if ( v14 )
      {
        v15 = (unsigned __int8)v14;
        v16 = *LODWORD(v12);
        *(_DWORD *)(LODWORD(v12) + 2920) = v15;
        (*(void (__thiscall **)(_DWORD))(v16 + 340))(LODWORD(v12));
      }
      v17 = v3[-103].mobnum;
      if ( v17 == 1 )
      {
        v33 = 0;
        v32 = 0;
        *(_DWORD *)kMapName = 0;
        strncpy(kMapName, &v3[-102].mobnum, 0xCu);
        v18 = MapInfoTab::GetByMapName((Name3 *)kMapName);
        if ( v18 )
          Char::SetLinkGateName(LODWORD(v12), v18->Name);
      }
      else
      {
        if ( !v17 )
        {
          v19 = 0;
          v20 = 1;
          do
          {
            if ( (unsigned __int8)v20 & v3[(v19 >> 3) - 102].mobnum )
              (*(void (__stdcall **)(unsigned int, _DWORD, _DWORD))(*LODWORD(v29) + 16))(v19, -1.0, 0);
            ++v19;
            v20 = __ROL__(v20, 1);
          }
          while ( (signed int)v19 < 812 );
          v12 = v29;
          v13 = 0;
        }
      }
      if ( strcmp(&v3->mobnum, (const char *)&unk_9C3A8D) == 1 )
        Char::ActAction(LODWORD(v12), &v3->mobnum, v13);
      *(_BYTE *)(LODWORD(v12) + 2944) = v3[33].mobnum;
      if ( v3[34].mobnum )
        Char::ActAction(LODWORD(v12), REGEN, (AniEventCode::Code2)v13);
      v21 = v26->mobnum;
      v3 += 152;
      ++i;
      if ( i >= v21 )
        goto LABEL_29;
    }
    v22 = 0;
  }
  return v22;
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// B6DE8C: using guessed type const float NI_PI;

//----- (006500D0) --------------------------------------------------------
Char *__thiscall CharMgr::AddCharQue(CharMgr *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p)
{
  unsigned __int16 v2; // ST14_2@1
  Char *v3; // ebx@1
  int v4; // edx@2
  int v5; // eax@2
  int v6; // ecx@2
  int v7; // edx@2
  AbStateInfecteeVtbl *v8; // eax@2
  void (__thiscall *v9)(AbStateInfectee *, ABSTATEINDEX); // edx@2
  float v10; // ST10_4@3
  float v11; // ST0C_4@3
  void *v13; // eax@5
  float v14; // esi@5
  float v15; // eax@6
  int (__thiscall *v16)(_DWORD, _DWORD, _DWORD); // edx@7
  float v17; // ST14_4@9
  float v18; // ST10_4@9
  char v19; // al@9
  char v20; // al@11
  int v21; // ebx@12
  int v22; // edx@12
  int v23; // eax@14
  int v24; // eax@15
  void (__thiscall *v25)(_DWORD, _DWORD, _DWORD); // edx@16
  char *v26; // eax@20
  const char *v27; // eax@23
  float v28; // ebx@24
  int v29; // eax@24
  int v30; // ecx@24
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v31; // eax@27
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v32; // eax@27
  char v33; // [sp+14h] [bp-88h]@18
  unsigned int v34; // [sp+18h] [bp-84h]@1
  char v35; // [sp+18h] [bp-84h]@18
  NiPoint3 kPos; // [sp+28h] [bp-74h]@9
  NiPoint3 kDir; // [sp+34h] [bp-68h]@9
  float v38; // [sp+40h] [bp-5Ch]@1
  NiPoint3 result; // [sp+44h] [bp-58h]@3
  NiMatrix3 thisa; // [sp+50h] [bp-4Ch]@3
  char acName[21]; // [sp+74h] [bp-28h]@2
  unsigned int v42; // [sp+8Ch] [bp-10h]@1
  int v43; // [sp+98h] [bp-4h]@5
  int v44; // [sp+9Ch] [bp+0h]@1

  v42 = (unsigned int)&v44 ^ __security_cookie;
  v34 = (unsigned int)&v44 ^ __security_cookie;
  v2 = p->handle;
  LODWORD(v38) = this;
  v3 = CharMgr::GetChar(this, v2);
  if ( v3 )
  {
    v4 = *(_DWORD *)&p->charid.n5_name[4];
    v5 = *(_DWORD *)&p->charid.n5_name[8];
    *(_DWORD *)acName = *(_DWORD *)&p->charid.n5_name[0];
    v6 = *(_DWORD *)&p->charid.n5_name[12];
    *(_DWORD *)&acName[4] = v4;
    v7 = *(_DWORD *)&p->charid.n5_name[16];
    *(_DWORD *)&acName[8] = v5;
    v8 = v3->baseclass_0.vfptr;
    *(_DWORD *)&acName[12] = v6;
    *(_DWORD *)&acName[16] = v7;
    v9 = v8[2].DeleteAbStateByAbstateIndex;
    acName[20] = 0;
    if ( !strcmp((const char *)((int (__thiscall *)(Char *))v9)(v3), acName) )
    {
      v3->m_bConnectServer = 1;
      v11 = (double)p->coord.xy.x;
      v10 = (double)p->coord.xy.y;
      World::GetAdvGroundPos(&g_kWorld, v11, v10, (NiPoint3 *)&acName[8]);
      v38 = (double)p->coord.dir * (NI_PI + NI_PI) / 180.0;
      NiMatrix3::MakeZRotation(&thisa, v38);
      NiMatrix3::operator_(&thisa, &result, &World::ms_kNorthDir);
      ((void (__thiscall *)(Char *, char *, NiPoint3 *, unsigned int))v3->baseclass_0.vfptr[5].GetAbstateColor)(
        v3,
        &acName[8],
        &result,
        v34);
      ((void (__thiscall *)(Char *, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *))v3->baseclass_0.vfptr[2].SetAbStateProperty)(
        v3,
        p);
      return v3;
    }
    CharMgr::DeleteChar(LODWORD(v38), v3);
  }
  v13 = operator new(0xB84u);
  LODWORD(result.z) = v13;
  LODWORD(v14) = 0;
  v43 = 0;
  if ( v13 )
  {
    Char::Char((Char *)v13);
    v14 = v15;
  }
  v16 = *(int (__thiscall **)(_DWORD, _DWORD, _DWORD))(*LODWORD(v14) + 556);
  v43 = -1;
  if ( !(unsigned __int8)v16(LODWORD(v14), p, v34) )
  {
    (*(void (__thiscall **)(_DWORD, signed int))(*LODWORD(v14) + 28))(LODWORD(v14), 1);
    return 0;
  }
  v18 = (double)p->coord.xy.x;
  v17 = (double)p->coord.xy.y;
  World::GetAdvGroundPos(&g_kWorld, v18, v17, &kPos);
  LODWORD(result.z) = p->coord.dir;
  result.z = (double)SLODWORD(result.z) * (NI_PI + NI_PI) / 180.0;
  NiMatrix3::MakeZRotation(&thisa, result.z);
  NiMatrix3::operator_(&thisa, &kDir, &World::ms_kNorthDir);
  (*(void (__thiscall **)(_DWORD, NiPoint3 *, NiPoint3 *))(*LODWORD(v14) + 184))(LODWORD(v14), &kPos, &kDir);
  v19 = p->mode;
  if ( (unsigned __int8)v19 < 4u || (unsigned __int8)v19 > 5u )
  {
    v20 = p->emoticon.emoticonid;
    if ( v20 != -1 )
    {
      v21 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
      v22 = *(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
      LODWORD(result.z) = (unsigned __int8)v20;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(v22 + 16))(
                              ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                              (unsigned __int8)v20) )
      {
        if ( LOWORD(result.z) <= *(_WORD *)(v21 + 200) )
        {
          v23 = *(_DWORD *)(v21 + 196) + 4 * LOWORD(result.z);
          if ( *(_DWORD *)v23 )
          {
            v24 = *(_DWORD *)v23;
            if ( v24 )
            {
              (*(void (__thiscall **)(_DWORD, _DWORD))(*LODWORD(v14) + 456))(LODWORD(v14), *(_BYTE *)v24);
              LODWORD(result.z) = p->emoticon.emoticonframe;
              v25 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*LODWORD(v14) + 464);
              result.z = (double)SLODWORD(result.z) / 1000.0;
              v25(LODWORD(v14), 1, LODWORD(result.z));
            }
          }
        }
      }
    }
  }
  *(_DWORD *)(LODWORD(v14) + 676) = p->myguild;
  *(_BYTE *)(LODWORD(v14) + 680) = p->isGuildAcademyMember;
  *(_DWORD *)(LODWORD(v14) + 172) = p->chartitle.Type;
  if ( p->chartitle.Type )
  {
    if ( p->chartitle.Type == 10 )
    {
      v26 = WeaponTitleTab::GetWeaponTitleStringByLevel(p->chartitle.MobID, p->chartitle.ElementNo);
      if ( v26 )
      {
        Char::SetCharTitleName(LODWORD(v14), v26);
        Char::SetCharTitleUse(LODWORD(v14), 1);
      }
      goto LABEL_24;
    }
    Char::SetCharTitleUse(LODWORD(v14), 1);
    v35 = p->chartitle.ElementNo;
    v33 = p->chartitle.Type;
  }
  else
  {
    Char::SetCharTitleUse(LODWORD(v14), 0);
    v35 = 0;
    v33 = p->chartitle.Type;
  }
  v27 = CCharacterTitleData::GetTitleString(&g_characterTitleData, v33, v35);
  Char::SetCharTitleName(LODWORD(v14), v27);
LABEL_24:
  v28 = v38;
  v29 = (*(int (__thiscall **)(int))(*(_DWORD *)(LODWORD(v38) + 56) + 4))(LODWORD(v38) + 56);
  *(_DWORD *)(v29 + 8) = LODWORD(v14);
  *(_DWORD *)v29 = 0;
  *(_DWORD *)(v29 + 4) = *(_DWORD *)(LODWORD(v28) + 64);
  v30 = *(_DWORD *)(LODWORD(v28) + 64);
  if ( v30 )
    *(_DWORD *)v30 = v29;
  else
    *(_DWORD *)(LODWORD(v28) + 60) = v29;
  ++*(_DWORD *)(LODWORD(v28) + 68);
  *(_DWORD *)(LODWORD(v28) + 64) = v29;
  LODWORD(result.y) = *(_DWORD *)(LODWORD(v14) + 700);
  result.z = v14;
  v31 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)(LODWORD(v28) + 116),
          (std::pair<int const ,int> *)&result.y);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)(LODWORD(v28) + 116),
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&result.y,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v31,
    0);
  LOWORD(result.y) = *(_WORD *)(LODWORD(v14) + 548);
  result.z = v14;
  v32 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
          (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)(LODWORD(v28) + 132),
          (std::pair<unsigned short const ,unsigned long> *)&result.y);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)(LODWORD(v28) + 132),
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&result.y,
    v32,
    0);
  World::AttachChar(&g_kWorld, LODWORD(v14));
  return (Char *)LODWORD(v14);
}
// A85C00: using guessed type int __security_cookie;
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;
// B6DE8C: using guessed type const float NI_PI;

//----- (006504C0) --------------------------------------------------------
Char *__thiscall CharMgr::AddChar(CharMgr *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *p, unsigned int uiFrameWork)
{
  CharMgr *v3; // edi@1
  Char *v4; // esi@1
  Char *v5; // eax@1
  int v6; // ecx@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v7; // eax@2
  unsigned __int16 _Keyval[2]; // [sp+Ch] [bp-120h]@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+10h] [bp-11Ch]@2
  char thisa; // [sp+14h] [bp-118h]@2
  int v11; // [sp+16h] [bp-116h]@2
  int v12; // [sp+1Ah] [bp-112h]@2
  int v13; // [sp+1Eh] [bp-10Eh]@2
  int v14; // [sp+22h] [bp-10Ah]@2
  int v15; // [sp+26h] [bp-106h]@2
  Char *v16; // [sp+104h] [bp-28h]@2
  unsigned int v17; // [sp+128h] [bp-4h]@1
  int v18; // [sp+12Ch] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = this;
  v4 = CharMgr::AddCharQue(this, p);
  v5 = 0;
  if ( v4 )
  {
    v15 = 0;
    v14 = 0;
    v13 = 0;
    v12 = 0;
    v11 = 0;
    v16 = v4;
    memset(&thisa, 0, 0xEEu);
    PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD::operator_((PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *)&thisa, p);
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::push_back(
      &v3->m_kLoadDataList,
      (CharMgr::LoadData *)&thisa);
    v6 = v4->m_kHandle;
    v4->m_kCharShape.m_bAutoPickItem = p->IsAutoPick != 0;
    v4->m_byKQTeamType = p->nKQTeamType;
    *(_DWORD *)_Keyval = v6;
    v7 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > *)&std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::find(&v3->m_kmapDeletedChar.baseclass_0, &result, _Keyval)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v7 != v3->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead )
      std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
        &v3->m_kmapDeletedChar.baseclass_0,
        &result,
        v7);
    v5 = v4;
  }
  return v5;
}
// A85C00: using guessed type int __security_cookie;

//----- (006505C0) --------------------------------------------------------
bool __thiscall CharMgr::AddChar(CharMgr *this, PROTO_NC_BRIEFINFO_CHARACTER_CMD *p)
{
  int v2; // edi@1
  bool v3; // zf@1
  CharMgr *v4; // ebx@1
  int v5; // eax@3
  int v6; // esi@3
  int v7; // edi@6
  unsigned int v8; // eax@6
  void *v9; // eax@9
  void *v10; // edi@11
  PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *v11; // edi@13
  int v12; // edx@13
  int v13; // eax@13
  unsigned __int16 v14; // si@13
  int v15; // eax@18
  int *v16; // eax@20
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > v17; // eax@22
  int v18; // edx@24
  bool v19; // al@28
  int (__thiscall **pExceptionObject)(void *, char); // [sp+Ch] [bp-140h]@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > > result; // [sp+18h] [bp-134h]@23
  char *_What; // [sp+1Ch] [bp-130h]@26
  int v23; // [sp+20h] [bp-12Ch]@21
  PROTO_NC_BRIEFINFO_CHARACTER_CMD *v24; // [sp+24h] [bp-128h]@1
  int i; // [sp+28h] [bp-124h]@1
  int v26; // [sp+2Ch] [bp-120h]@3
  PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *__that; // [sp+30h] [bp-11Ch]@2
  char thisa; // [sp+34h] [bp-118h]@4
  int v29; // [sp+36h] [bp-116h]@4
  int v30; // [sp+3Ah] [bp-112h]@4
  int v31; // [sp+3Eh] [bp-10Eh]@4
  int v32; // [sp+42h] [bp-10Ah]@4
  int v33; // [sp+46h] [bp-106h]@4
  int v34; // [sp+124h] [bp-28h]@4
  unsigned int v35; // [sp+148h] [bp-4h]@1
  int v36; // [sp+14Ch] [bp+0h]@1

  v35 = (unsigned int)&v36 ^ __security_cookie;
  v2 = 0;
  v3 = p->charnum == 0;
  v4 = this;
  v24 = p;
  i = 0;
  if ( v3 )
  {
LABEL_29:
    v19 = 1;
  }
  else
  {
    __that = (PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *)&p[1];
    while ( 1 )
    {
      v5 = (int)CharMgr::AddCharQue(v4, __that);
      v6 = v5;
      v26 = v5;
      if ( v5 == v2 )
        break;
      v33 = v2;
      v32 = v2;
      v31 = v2;
      v30 = v2;
      v29 = v2;
      v34 = v5;
      memset(&thisa, v2, 0xEEu);
      PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD::operator_((PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *)&thisa, __that);
      if ( v4->m_kLoadDataList.baseclass_0._Mapsize <= v4->m_kLoadDataList.baseclass_0._Mysize + 1 )
        std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Growmap(&v4->m_kLoadDataList, 1u);
      v7 = v4->m_kLoadDataList.baseclass_0._Mysize + v4->m_kLoadDataList.baseclass_0._Myoff;
      v8 = v4->m_kLoadDataList.baseclass_0._Mapsize;
      if ( v8 <= v7 )
        v7 -= v8;
      if ( !v4->m_kLoadDataList.baseclass_0._Map[v7] )
      {
        v9 = operator new(0x114u);
        if ( !v9 )
        {
          _What = 0;
          std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
          pExceptionObject = &std::bad_alloc::_vftable_;
          _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
        }
        v4->m_kLoadDataList.baseclass_0._Map[v7] = (CharMgr::LoadData *)v9;
      }
      v10 = v4->m_kLoadDataList.baseclass_0._Map[v7];
      if ( v10 )
      {
        memcpy(v10, &thisa, 0x114u);
        v6 = v26;
      }
      ++v4->m_kLoadDataList.baseclass_0._Mysize;
      v11 = __that;
      *(_BYTE *)(v6 + 1441) = __that->IsAutoPick != 0;
      *(_BYTE *)(v6 + 2944) = v11->nKQTeamType;
      v12 = (int)v4->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v13 = *(_DWORD *)(v12 + 4);
      v14 = *(_WORD *)(v6 + 548);
      while ( !*(_BYTE *)(v13 + 15) )
      {
        if ( *(_WORD *)(v13 + 12) >= v14 )
        {
          v12 = v13;
          v13 = *(_DWORD *)v13;
        }
        else
        {
          v13 = *(_DWORD *)(v13 + 8);
        }
      }
      v15 = (int)v4->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v26 = v12;
      if ( v12 == v15 || v14 < *(_WORD *)(v12 + 12) )
      {
        v23 = v15;
        v16 = &v23;
      }
      else
      {
        v16 = &v26;
      }
      v17 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> > >)*v16;
      if ( (std::_Tree_nod<std::_Tset_traits<unsigned short,std::less<unsigned short>,std::allocator<unsigned short>,0> >::_Node *)v17 != v4->m_kmapDeletedChar.baseclass_0.baseclass_0.baseclass_0._Myhead )
        std::_Tree<std::_Tset_traits<unsigned_short_std::less<unsigned_short>_std::allocator<unsigned_short>_0>>::erase(
          &v4->m_kmapDeletedChar.baseclass_0,
          &result,
          v17);
      v18 = v24->charnum;
      ++i;
      __that = v11 + 1;
      if ( i >= v18 )
        goto LABEL_29;
      v2 = 0;
    }
    v19 = 0;
  }
  return v19;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (006507F0) --------------------------------------------------------
Pet *__thiscall CharMgr::AddPet(CharMgr *this, unsigned int kPetID, unsigned __int16 kPetHandle, NiPoint3 *kPos, NiPoint3 *kDir, const char *pcName)
{
  CharMgr *v6; // ebx@1
  Char *v7; // eax@1
  int v8; // esi@1
  void *v9; // eax@3
  int v10; // eax@4
  int (__thiscall *v11)(_DWORD, _DWORD, _DWORD, _DWORD); // eax@5
  char v12; // al@5
  int v13; // edx@5
  Pet *result; // eax@6
  char v15; // al@7
  int v16; // edx@7
  int v17; // eax@9
  NiTListItem<Char *> *v18; // ecx@9
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v19; // eax@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v20; // eax@12
  std::pair<int const ,int> _Val; // [sp+0h] [bp-14h]@12
  int v22; // [sp+10h] [bp-4h]@3

  v6 = this;
  v7 = CharMgr::GetChar(this, kPetHandle);
  v8 = 0;
  if ( v7 )
    CharMgr::DeleteChar(v6, v7);
  v9 = operator new(0xB88u);
  v22 = 0;
  if ( v9 )
  {
    Pet::Pet((Pet *)v9);
    v8 = v10;
  }
  v11 = *(int (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 668);
  v22 = -1;
  v12 = v11(v8, kPetID, kPetHandle, pcName);
  v13 = *(_DWORD *)v8;
  if ( v12 )
  {
    v15 = (*(int (__thiscall **)(int, signed int, _DWORD))(v13 + 600))(v8, 1, 0);
    v16 = *(_DWORD *)v8;
    if ( v15 )
    {
      (*(void (__thiscall **)(int, NiPoint3 *, NiPoint3 *))(v16 + 184))(v8, kPos, kDir);
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v8 + 336))(v8, 1);
      v17 = (int)v6->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *)&v6->m_kList);
      *(_DWORD *)(v17 + 8) = v8;
      *(_DWORD *)v17 = 0;
      *(_DWORD *)(v17 + 4) = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      v18 = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      if ( v18 )
        v18->m_pkNext = (NiTListItem<Char *> *)v17;
      else
        v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<Char *> *)v17;
      ++*(_DWORD *)&v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<Char *> *)v17;
      _Val.baseclass_0.first = *(_DWORD *)(v8 + 700);
      _Val.baseclass_0.second = v8;
      v19 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
              (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v6->m_mapByCharNode,
              &_Val);
      std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v6->m_mapByCharNode,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&_Val,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v19,
        0);
      LOWORD(_Val.baseclass_0.first) = *(_WORD *)(v8 + 548);
      _Val.baseclass_0.second = v8;
      v20 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
              (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v6->m_mapByHandle,
              (std::pair<unsigned short const ,unsigned long> *)&_Val);
      std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v6->m_mapByHandle,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
        v20,
        0);
      World::AttachChar(&g_kWorld, (Char *)v8);
      result = (Pet *)v8;
    }
    else
    {
      (*(void (__thiscall **)(int))(v16 + 28))(v8);
      result = 0;
    }
  }
  else
  {
    (*(void (__thiscall **)(int))(v13 + 28))(v8);
    result = 0;
  }
  return result;
}

//----- (00650990) --------------------------------------------------------
Pet *__thiscall CharMgr::AddPet(CharMgr *this, PROTO_NC_BRIEFINFO_REGENPET_CMD *p)
{
  CharMgr *v2; // edi@1
  Pet *v3; // eax@2
  float v4; // ST0C_4@3
  float v5; // ST08_4@3
  int v6; // eax@3
  int v7; // edx@3
  int v8; // ecx@3
  int v9; // edx@3
  unsigned int v10; // ecx@3
  NiPoint3 kPos; // [sp+14h] [bp-64h]@3
  NiPoint3 result; // [sp+20h] [bp-58h]@3
  NiPoint3 kDir; // [sp+2Ch] [bp-4Ch]@3
  float v14; // [sp+38h] [bp-40h]@3
  NiMatrix3 thisa; // [sp+3Ch] [bp-3Ch]@3
  char acName[17]; // [sp+60h] [bp-18h]@3
  unsigned int v17; // [sp+74h] [bp-4h]@1
  int v18; // [sp+78h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  if ( p->nID == -1 )
  {
    v3 = 0;
  }
  else
  {
    v5 = (double)p->XYDir.xy.x;
    v4 = (double)p->XYDir.xy.y;
    World::GetAdvGroundPos(&g_kWorld, v5, v4, &kPos);
    LODWORD(v14) = p->XYDir.dir;
    v14 = (NI_PI + NI_PI) * (double)SLODWORD(v14) / 180.0;
    NiMatrix3::MakeZRotation(&thisa, v14);
    NiMatrix3::operator_(&thisa, &result, &World::ms_kNorthDir);
    kDir.y = result.y;
    v6 = *(_DWORD *)&p->sPetName.n4_name[4];
    LODWORD(kDir.x) = (_DWORD)result.x;
    v7 = *(_DWORD *)&p->sPetName.n4_name[0];
    kDir.z = result.z;
    v8 = *(_DWORD *)&p->sPetName.n4_name[8];
    *(_DWORD *)&acName[4] = v6;
    *(_DWORD *)acName = v7;
    v9 = *(_DWORD *)&p->sPetName.n4_name[12];
    *(_DWORD *)&acName[8] = v8;
    LOWORD(v6) = p->nHandle;
    v10 = p->nID;
    *(_DWORD *)&acName[12] = v9;
    acName[16] = 0;
    v3 = CharMgr::AddPet(v2, v10, v6, &kPos, &kDir, acName);
  }
  return v3;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (00650AA0) --------------------------------------------------------
bool __thiscall CharMgr::AddPet(CharMgr *this, PROTO_NC_BRIEFINFO_PET_CMD *p)
{
  unsigned int v2; // edi@1
  bool v3; // zf@1
  PROTO_NC_BRIEFINFO_PET_CMD *v4; // esi@2
  float v5; // ST0C_4@4
  float v6; // ST08_4@4
  int v7; // eax@4
  int v8; // edx@4
  int v9; // ecx@4
  int v10; // edx@4
  unsigned int v11; // ecx@4
  bool v12; // al@6
  NiPoint3 kTargetPos; // [sp+18h] [bp-68h]@4
  NiPoint3 result; // [sp+24h] [bp-5Ch]@4
  NiPoint3 kDir; // [sp+30h] [bp-50h]@4
  CharMgr *v16; // [sp+3Ch] [bp-44h]@1
  float v17; // [sp+40h] [bp-40h]@4
  NiMatrix3 thisa; // [sp+44h] [bp-3Ch]@4
  char pcName[4]; // [sp+68h] [bp-18h]@4
  int v20; // [sp+6Ch] [bp-14h]@4
  int v21; // [sp+70h] [bp-10h]@4
  int v22; // [sp+74h] [bp-Ch]@4
  char v23; // [sp+78h] [bp-8h]@4
  unsigned int v24; // [sp+7Ch] [bp-4h]@1
  int v25; // [sp+80h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v2 = 0;
  v3 = p->nPetCnt == 0;
  v16 = this;
  if ( v3 )
  {
LABEL_6:
    v12 = 1;
  }
  else
  {
    v4 = p + 24;
    while ( *(_DWORD *)&v4[-21].nPetCnt != -1 )
    {
      v6 = (double)*(unsigned int *)&v4[-17].nPetCnt;
      v5 = (double)*(unsigned int *)&v4[-13].nPetCnt;
      World::GetAdvGroundPos(&g_kWorld, v6, v5, &kTargetPos);
      LODWORD(v17) = v4[-9].nPetCnt;
      v17 = (double)SLODWORD(v17) * (NI_PI + NI_PI) / 180.0;
      NiMatrix3::MakeZRotation(&thisa, v17);
      NiMatrix3::operator_(&thisa, &result, &World::ms_kNorthDir);
      kDir.y = result.y;
      v7 = *(_DWORD *)&v4[-4].nPetCnt;
      LODWORD(kDir.x) = (_DWORD)result.x;
      v8 = *(_DWORD *)&v4[-8].nPetCnt;
      kDir.z = result.z;
      v9 = *(_DWORD *)&v4->nPetCnt;
      v20 = v7;
      *(_DWORD *)pcName = v8;
      v10 = *(_DWORD *)&v4[4].nPetCnt;
      v21 = v9;
      LOWORD(v7) = *(_WORD *)&v4[-23].nPetCnt;
      v11 = *(_DWORD *)&v4[-21].nPetCnt;
      v22 = v10;
      v23 = 0;
      if ( !CharMgr::AddPet(v16, v11, v7, &kTargetPos, &kDir, pcName) )
        break;
      ++v2;
      v4 += 63;
      if ( v2 >= p->nPetCnt )
        goto LABEL_6;
    }
    v12 = 0;
  }
  return v12;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (00650BE0) --------------------------------------------------------
bool __thiscall CharMgr::DeleteChar(CharMgr *this, PROTO_NC_MAP_LOGOUT_CMD *p)
{
  NiTListItem<Char *> *v2; // eax@1
  Char *v3; // edx@2
  bool result; // al@4

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3->m_kHandle == p->handle )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
    CharMgr::DeleteChar(this, v3);
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00650C20) --------------------------------------------------------
void __thiscall CharMgr::Terminate(CharMgr *this)
{
  CharMgr::RemoveAll(this);
  g_pkMainChar = 0;
}

//----- (00650C30) --------------------------------------------------------
bool __thiscall CharMgr::AddMob(CharMgr *this, PROTO_NC_BRIEFINFO_DOOR_CMD *p)
{
  signed int v2; // ebx@1
  PROTO_NC_BRIEFINFO_DOOR_CMD *v3; // esi@2
  float v4; // ST10_4@3
  float v5; // ST0C_4@3
  unsigned __int16 v6; // ax@3
  Char *v7; // edi@4
  int (__thiscall *v8)(AbStateInfectee *); // edx@5
  int v9; // ecx@5
  int v10; // edx@5
  int v11; // eax@5
  int v12; // edx@5
  int v13; // ecx@5
  int v14; // eax@5
  int v15; // ecx@5
  int v16; // eax@5
  char v17; // cl@6
  char v18; // al@7
  bool v19; // al@12
  NiPoint3 kTargetPos; // [sp+18h] [bp-70h]@3
  NiPoint3 result; // [sp+24h] [bp-64h]@3
  CharMgr *v22; // [sp+30h] [bp-58h]@1
  PROTO_NC_BRIEFINFO_DOOR_CMD *v23; // [sp+34h] [bp-54h]@1
  float v24; // [sp+38h] [bp-50h]@3
  NiMatrix3 thisa; // [sp+3Ch] [bp-4Ch]@3
  int v26; // [sp+60h] [bp-28h]@5
  int v27; // [sp+64h] [bp-24h]@5
  int v28; // [sp+68h] [bp-20h]@5
  int v29; // [sp+6Ch] [bp-1Ch]@5
  int v30; // [sp+70h] [bp-18h]@5
  int v31; // [sp+74h] [bp-14h]@5
  int v32; // [sp+78h] [bp-10h]@5
  int v33; // [sp+7Ch] [bp-Ch]@5
  char v34; // [sp+80h] [bp-8h]@5
  unsigned int v35; // [sp+84h] [bp-4h]@1
  int v36; // [sp+88h] [bp+0h]@1

  v35 = (unsigned int)&v36 ^ __security_cookie;
  v2 = 0;
  v22 = this;
  v23 = p;
  if ( p->doornum )
  {
    v3 = p + 23;
    while ( 1 )
    {
      v5 = (double)*(unsigned int *)&v3[-18].doornum;
      v4 = (double)*(unsigned int *)&v3[-14].doornum;
      World::GetAdvGroundPos(&g_kWorld, v5, v4, &kTargetPos);
      LODWORD(v24) = ((unsigned int)v3[-10].doornum + 90) % 0xB4;
      v24 = (double)SLODWORD(v24) * (NI_PI + NI_PI) / 180.0;
      NiMatrix3::MakeZRotation(&thisa, v24);
      NiMatrix3::operator_(&thisa, &result, &World::ms_kNorthDir);
      v6 = *(_WORD *)&v3[-20].doornum;
      if ( v6 == -1 )
        break;
      v7 = CharMgr::AddMob(v22, v6, *(_WORD *)&v3[-22].doornum, &kTargetPos, &result, 1, 0);
      if ( !v7 )
        break;
      LODWORD(v24) = *(_WORD *)&v3[24].doornum;
      v8 = v7->baseclass_0.vfptr[16].IsVisible;
      v24 = (double)SLODWORD(v24) / 1000.0;
      ((void (__thiscall *)(Char *, _DWORD))v8)(v7, LODWORD(v24));
      v9 = *(_DWORD *)&v3[-4].doornum;
      v10 = *(_DWORD *)&v3->doornum;
      v26 = *(_DWORD *)&v3[-8].doornum;
      v11 = *(_DWORD *)&v3[4].doornum;
      v28 = v10;
      v12 = *(_DWORD *)&v3[12].doornum;
      v27 = v9;
      v13 = *(_DWORD *)&v3[8].doornum;
      v29 = v11;
      v14 = *(_DWORD *)&v3[16].doornum;
      v31 = v12;
      v30 = v13;
      v15 = *(_DWORD *)&v3[20].doornum;
      v32 = v14;
      v16 = (int)v7->m_szBlockName;
      v33 = v15;
      v34 = 0;
      do
      {
        v17 = *(_BYTE *)((char *)&v26 - v7->m_szBlockName + v16);
        *(_BYTE *)v16++ = v17;
      }
      while ( v17 );
      v18 = v3[-9].doornum;
      if ( v18 )
      {
        if ( (unsigned __int8)(v18 - 1) <= 1u )
          Char::OpenDoor(v7);
      }
      else
      {
        Char::CloseDoor(v7);
      }
      ++v2;
      v3 += 48;
      if ( v2 >= v23->doornum )
        goto LABEL_12;
    }
    v19 = 0;
  }
  else
  {
LABEL_12:
    v19 = 1;
  }
  return v19;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (00650E00) --------------------------------------------------------
PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *__thiscall PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD::operator_(PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *this, PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *__that)
{
  PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *result; // eax@1
  char *v3; // esi@1
  signed int v4; // ecx@1

  result = this;
  this->handle = __that->handle;
  *(_QWORD *)&this->charid.n5_name[0] = *(_QWORD *)&__that->charid.n5_name[0];
  *(_QWORD *)&this->charid.n5_name[8] = *(_QWORD *)&__that->charid.n5_name[8];
  *(_DWORD *)&this->charid.n5_name[16] = *(_DWORD *)&__that->charid.n5_name[16];
  this->coord.xy.x = __that->coord.xy.x;
  this->coord.xy.y = __that->coord.xy.y;
  this->coord.dir = __that->coord.dir;
  this->mode = __that->mode;
  this->chrclass = __that->chrclass;
  *(_DWORD *)&this->shape._bf0 = *(_DWORD *)&__that->shape._bf0;
  memcpy(&this->shapedata, &__that->shapedata, 0x36u);
  memcpy(&this->abstatebit, &__that->abstatebit, 0x6Eu);
  v3 = this->sAnimation;
  v4 = 32;
  do
  {
    *v3 = v3[(char *)__that - (char *)result];
    ++v3;
    --v4;
  }
  while ( v4 );
  result->nMoverHnd = __that->nMoverHnd;
  result->nMoverSlot = __that->nMoverSlot;
  result->nKQTeamType = __that->nKQTeamType;
  result->IsUseItemMinimon = __that->IsUseItemMinimon;
  return result;
}

//----- (00650F30) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>(NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
}
// 9C3AE8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);

//----- (00650F40) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C3AE8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);

//----- (00650F70) --------------------------------------------------------
CharMgr::LoadData *__thiscall CharMgr::LoadData::operator_(CharMgr::LoadData *this, CharMgr::LoadData *__that)
{
  CharMgr::LoadData *v2; // esi@1

  v2 = this;
  PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD::operator_(&this->CharData, &__that->CharData);
  v2->pkChar = __that->pkChar;
  v2->kClassID = __that->kClassID;
  v2->byGender = __that->byGender;
  v2->kPos.x = __that->kPos.x;
  v2->kPos.y = __that->kPos.y;
  v2->kPos.z = __that->kPos.z;
  v2->kDir.x = __that->kDir.x;
  v2->kDir.y = __that->kDir.y;
  v2->kDir.z = __that->kDir.z;
  v2->nEquipLevel = __that->nEquipLevel;
  return v2;
}

//----- (00651000) --------------------------------------------------------
void __thiscall CharMgr::LoadData::LoadData(CharMgr::LoadData *this, Char *_pkChar, char _kClassID, char _byGender, NiPoint3 _kPos, NiPoint3 _kDir, int _nEquipLevel)
{
  *(_QWORD *)&this->CharData.charid.n5_name[12] = 0i64;
  *(_QWORD *)&this->CharData.charid.n5_name[4] = 0i64;
  *(_DWORD *)&this->CharData.charid.n5_name[0] = 0;
  this->pkChar = _pkChar;
  this->kClassID = _kClassID;
  LODWORD(this->kPos.x) = (_DWORD)_kPos.x;
  this->byGender = _byGender;
  this->kPos.y = _kPos.y;
  this->kPos.z = _kPos.z;
  LODWORD(this->kDir.x) = (_DWORD)_kDir.x;
  this->kDir.y = _kDir.y;
  this->kDir.z = _kDir.z;
  this->nEquipLevel = _nEquipLevel;
}

//----- (00651080) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,Char *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<Char *> *v3; // esi@1
  NiTListItem<Char *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C3AE8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);
// 9C3AF8: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);

//----- (00651110) --------------------------------------------------------
void __thiscall NiTPointerList<Char__>::_NiTPointerList<Char__>(NiTPointerList<Char *> *this)
{
  NiTPointerList<Char *> *v1; // edi@1
  NiTListItem<Char *> *v2; // esi@1
  NiTListItem<Char *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
}
// 9C3AE8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);
// 9C3AF8: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);

//----- (00651190) --------------------------------------------------------
void __thiscall PgTList<Char__>::_PgTList<Char__>(PgTList<Char *> *this)
{
  PgTList<Char *> *v1; // edi@1
  NiTListItem<Char *> *v2; // esi@1
  NiTListItem<Char *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&PgTList<Char__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,Char *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
}
// 9C3AE8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);
// 9C3B08: using guessed type int (__thiscall *PgTList_Char _____vftable_)(void *p, char);

//----- (00651210) --------------------------------------------------------
void *__thiscall PgTList<Char__>::_vector_deleting_destructor_(PgTList<Char *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<Char *> *v3; // esi@1
  NiTListItem<Char *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Char *>Vtbl *)&PgTList<Char__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_Char__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C3AE8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Char _____vftable_)(void *p, char);
// 9C3B08: using guessed type int (__thiscall *PgTList_Char _____vftable_)(void *p, char);

//----- (006512A0) --------------------------------------------------------
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Growmap(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, unsigned int _Count)
{
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v2; // ebx@1
  unsigned int v3; // ecx@1
  unsigned int v4; // edi@1
  unsigned int v5; // eax@3
  unsigned int v6; // esi@8
  int v7; // eax@8
  CharMgr::LoadData **v8; // ecx@11
  signed int v9; // esi@11
  int v10; // eax@11
  char *v11; // eax@11
  char *v12; // ecx@11
  int v13; // eax@12
  unsigned int v14; // ecx@14
  void *v15; // edi@15
  unsigned int v16; // esi@16
  CharMgr::LoadData **v17; // eax@16
  std::exception thisa; // [sp+8h] [bp-18h]@22
  unsigned int v19; // [sp+14h] [bp-Ch]@11
  unsigned int _Myboff; // [sp+18h] [bp-8h]@8
  char *dst; // [sp+1Ch] [bp-4h]@8

  v2 = this;
  v3 = this->baseclass_0._Mapsize;
  v4 = _Count;
  if ( 15561475 - v3 < _Count )
    std::_Xlength_error("deque<T> too long");
  v5 = v3 >> 1;
  if ( v3 >> 1 < 8 )
    v5 = 8;
  if ( _Count < v5 && v3 <= 15561475 - v5 )
  {
    _Count = v5;
    v4 = v5;
  }
  v6 = v2->baseclass_0._Myoff;
  v7 = v3 + v4;
  _Myboff = v2->baseclass_0._Myoff;
  dst = 0;
  if ( v3 + v4 )
  {
    if ( (unsigned int)v7 > 0x3FFFFFFF || (dst = (char *)operator new(4 * v7)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  v8 = v2->baseclass_0._Map;
  v9 = 4 * v6;
  v19 = 4 * ((signed int)((char *)v8 + 4 * v2->baseclass_0._Mapsize - (_DWORD)&v8[v9 / 4u]) >> 2);
  memmove(&dst[v9], (char *)&v8[v9 / 4u], v19);
  v11 = (char *)(v19 + v10);
  v12 = (char *)v2->baseclass_0._Map;
  if ( _Myboff > v4 )
  {
    memmove(v11, v12, 4 * ((signed int)(4 * v4) >> 2));
    v17 = v2->baseclass_0._Map;
    v16 = (signed int)((char *)v17 + v9 - (_DWORD)&v17[v4]) >> 2;
    memmove(dst, (char *)&v17[v4], v16 * 4);
    if ( !v4 )
      goto LABEL_19;
    v14 = v4;
    v15 = &v17[v16];
    goto LABEL_18;
  }
  v19 = 4 * (v9 >> 2);
  memmove(v11, v12, v19);
  if ( v4 != _Myboff )
  {
    memset((void *)(v19 + v13), 0, 4 * (v4 - _Myboff));
    v4 = _Count;
  }
  v14 = _Myboff;
  if ( _Myboff )
  {
    v15 = dst;
LABEL_18:
    memset(v15, 0, 4 * v14);
    v4 = _Count;
  }
LABEL_19:
  if ( v2->baseclass_0._Map )
    operator delete(v2->baseclass_0._Map);
  v2->baseclass_0._Mapsize += v4;
  v2->baseclass_0._Map = (CharMgr::LoadData **)dst;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00651430) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Make_iter(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Where)
{
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v3; // eax@1

  v3 = result;
  result->baseclass_0.baseclass_0._Myproxy = 0;
  result->baseclass_0.baseclass_0._Mynextiter = 0;
  if ( this )
  {
    result->baseclass_0.baseclass_0._Myproxy = this->baseclass_0.baseclass_0._Myproxy;
    result->baseclass_0._Myoff = _Where._Myoff;
  }
  else
  {
    result->baseclass_0._Myoff = _Where._Myoff;
  }
  return v3;
}

//----- (00651460) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::operator_(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, int _Off)
{
  std::_Container_proxy ***v3; // edx@1
  std::_Container_base12 *v4; // eax@2
  unsigned int v5; // ecx@4
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v6; // eax@4
  std::_Container_proxy **v7; // edx@5

  v3 = 0;
  if ( this->baseclass_0.baseclass_0._Myproxy )
  {
    v4 = this->baseclass_0.baseclass_0._Myproxy->_Mycont;
    if ( v4 )
      v3 = (std::_Container_proxy ***)v4->_Myproxy;
  }
  v5 = _Off + this->baseclass_0._Myoff;
  v6 = result;
  result->baseclass_0.baseclass_0._Myproxy = 0;
  result->baseclass_0.baseclass_0._Mynextiter = 0;
  result->baseclass_0._Myoff = v5;
  if ( v3 )
  {
    v7 = *v3;
    if ( v7 )
      result->baseclass_0.baseclass_0._Myproxy = *v7;
  }
  return v6;
}

//----- (006514A0) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move_backward<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  unsigned int v5; // eax@1
  void *v6; // ecx@2
  unsigned int v7; // eax@2
  unsigned int v8; // edx@4
  CharMgr::LoadData *v9; // esi@6
  unsigned int v10; // eax@6
  std::_Container_base12 *v11; // edx@7
  std::_Container_proxy *v12; // ecx@9
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v13; // eax@12
  unsigned int _Last_8; // [sp+20h] [bp+20h]@2

  v5 = _Last.baseclass_0._Myoff;
  if ( _First.baseclass_0._Myoff != _Last.baseclass_0._Myoff )
  {
    do
    {
      v6 = _Last.baseclass_0.baseclass_0._Myproxy;
      v7 = v5 - 1;
      _Last.baseclass_0._Myoff = v7;
      if ( (_DWORD)_Last.baseclass_0.baseclass_0._Myproxy )
        v6 = _Last.baseclass_0.baseclass_0._Myproxy->_Mycont;
      v8 = *((_DWORD *)v6 + 2);
      if ( v8 <= v7 )
        v7 -= v8;
      v9 = *(CharMgr::LoadData **)(*((_DWORD *)v6 + 1) + 4 * v7);
      v10 = _Dest.baseclass_0._Myoff-- - 1;
      if ( (_DWORD)_Dest.baseclass_0.baseclass_0._Myproxy )
        v11 = _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont;
      else
        v11 = 0;
      v12 = v11[2]._Myproxy;
      if ( (unsigned int)v12 <= v10 )
        v10 -= (unsigned int)v12;
      CharMgr::LoadData::operator_((CharMgr::LoadData *)(&v11[1]._Myproxy->_Mycont)[v10], v9);
      v5 = _Last_8;
    }
    while ( _First.baseclass_0._Myoff != _Last_8 );
  }
  v13 = result;
  result->baseclass_0.baseclass_0._Myproxy = 0;
  result->baseclass_0.baseclass_0._Mynextiter = 0;
  if ( !(_DWORD)_Dest.baseclass_0.baseclass_0._Myproxy )
    goto LABEL_15;
  if ( _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont )
  {
    result->baseclass_0.baseclass_0._Myproxy = _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
LABEL_15:
    result->baseclass_0._Myoff = _Dest.baseclass_0._Myoff;
    return v13;
  }
  result->baseclass_0._Myoff = _Dest.baseclass_0._Myoff;
  return v13;
}

//----- (00651530) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  unsigned int v5; // eax@1
  unsigned int i; // ecx@1
  std::_Container_base12 *v7; // edi@3
  std::_Container_proxy *v8; // edx@5
  void *v9; // edx@7
  unsigned int v10; // esi@9
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v11; // eax@12

  v5 = _First.baseclass_0._Myoff;
  for ( i = _Dest.baseclass_0._Myoff; v5 != _Last.baseclass_0._Myoff; _First.baseclass_0._Myoff = v5 )
  {
    if ( (_DWORD)_First.baseclass_0.baseclass_0._Myproxy )
      v7 = _First.baseclass_0.baseclass_0._Myproxy->_Mycont;
    else
      v7 = 0;
    v8 = v7[2]._Myproxy;
    if ( (unsigned int)v8 <= v5 )
      v5 -= (unsigned int)v8;
    v9 = _Dest.baseclass_0.baseclass_0._Myproxy;
    if ( (_DWORD)_Dest.baseclass_0.baseclass_0._Myproxy )
      v9 = _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont;
    v10 = *((_DWORD *)v9 + 2);
    if ( v10 <= i )
      i -= v10;
    CharMgr::LoadData::operator_(
      *(CharMgr::LoadData **)(*((_DWORD *)v9 + 1) + 4 * i),
      (CharMgr::LoadData *)(&v7[1]._Myproxy->_Mycont)[v5]);
    v5 = _First.baseclass_0._Myoff + 1;
    i = _Dest.baseclass_0._Myoff++ + 1;
  }
  v11 = result;
  result->baseclass_0.baseclass_0._Myproxy = 0;
  result->baseclass_0.baseclass_0._Mynextiter = 0;
  result->baseclass_0._Myoff = i;
  if ( (_DWORD)_Dest.baseclass_0.baseclass_0._Myproxy )
  {
    if ( _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont )
      result->baseclass_0.baseclass_0._Myproxy = _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
  }
  return v11;
}

//----- (006515C0) --------------------------------------------------------
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::push_back(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, CharMgr::LoadData *_Val)
{
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v2; // ebx@1
  int v3; // esi@3
  unsigned int v4; // eax@3
  void *v5; // eax@6
  void *v6; // edi@8
  std::exception thisa; // [sp+Ch] [bp-10h]@11
  char *_What; // [sp+18h] [bp-4h]@11

  v2 = this;
  if ( this->baseclass_0._Mapsize <= this->baseclass_0._Mysize + 1 )
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Growmap(this, 1u);
  v3 = v2->baseclass_0._Mysize + v2->baseclass_0._Myoff;
  v4 = v2->baseclass_0._Mapsize;
  if ( v4 <= v3 )
    v3 -= v4;
  if ( !v2->baseclass_0._Map[v3] )
  {
    v5 = operator new(0x114u);
    if ( !v5 )
    {
      _What = 0;
      std::exception::exception(&thisa, (const char *const *)&_What);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
    v2->baseclass_0._Map[v3] = (CharMgr::LoadData *)v5;
  }
  v6 = v2->baseclass_0._Map[v3];
  if ( v6 )
    memcpy(v6, _Val, 0x114u);
  ++v2->baseclass_0._Mysize;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00651660) --------------------------------------------------------
CharMgr::LoadData *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::front(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this)
{
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v1; // eax@1
  std::_Container_proxy *v2; // ecx@1
  unsigned int v3; // eax@3
  std::_Container_base12 *v4; // edx@3
  CharMgr::LoadData *v5; // eax@4
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > result; // [sp+0h] [bp-Ch]@1

  v1 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(this, &result);
  v2 = v1->baseclass_0.baseclass_0._Myproxy;
  if ( v1->baseclass_0.baseclass_0._Myproxy )
    v2 = (std::_Container_proxy *)v2->_Mycont;
  v3 = v1->baseclass_0._Myoff;
  v4 = v2[1]._Mycont;
  if ( (unsigned int)v4 > v3 )
    v5 = (CharMgr::LoadData *)*((_DWORD *)&v2->_Myfirstiter->_Myproxy + v3);
  else
    v5 = (CharMgr::LoadData *)*((_DWORD *)&v2->_Myfirstiter->_Myproxy + v3 - (_DWORD)v4);
  return v5;
}

//----- (006516A0) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move_backward<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest)
{
  std::_Container_proxy *v5; // [sp-28h] [bp-30h]@7
  int v6; // [sp-24h] [bp-2Ch]@7
  unsigned int v7; // [sp-20h] [bp-28h]@10
  std::_Container_proxy *v8; // [sp-1Ch] [bp-24h]@4
  int v9; // [sp-18h] [bp-20h]@4
  unsigned int v10; // [sp-14h] [bp-1Ch]@7
  std::_Container_proxy *v11; // [sp-10h] [bp-18h]@1
  int v12; // [sp-Ch] [bp-14h]@1
  unsigned int v13; // [sp-8h] [bp-10h]@4
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v14; // [sp-4h] [bp-Ch]@1
  std::_Container_proxy **v15; // [sp+4h] [bp-4h]@1

  v14 = result;
  v11 = 0;
  v12 = 0;
  v15 = &v11;
  if ( (_DWORD)_Dest.baseclass_0.baseclass_0._Myproxy && _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont )
    v11 = _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v13 = _Dest.baseclass_0._Myoff;
  v8 = 0;
  v9 = 0;
  v15 = &v8;
  if ( (_DWORD)_Last.baseclass_0.baseclass_0._Myproxy && _Last.baseclass_0.baseclass_0._Myproxy->_Mycont )
    v8 = _Last.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v10 = _Last.baseclass_0._Myoff;
  v5 = 0;
  v6 = 0;
  v15 = &v5;
  if ( (_DWORD)_First.baseclass_0.baseclass_0._Myproxy && _First.baseclass_0.baseclass_0._Myproxy->_Mycont )
    v5 = _First.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v7 = _First.baseclass_0._Myoff;
  std::_Move_backward<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(
    result,
    *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v5,
    *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v8,
    *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v11,
    (std::_Nonscalar_ptr_iterator_tag)v14);
  return result;
}

//----- (00651730) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__cdecl std::_Move<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Dest)
{
  std::_Container_proxy *v5; // [sp-28h] [bp-30h]@7
  int v6; // [sp-24h] [bp-2Ch]@7
  unsigned int v7; // [sp-20h] [bp-28h]@10
  std::_Container_proxy *v8; // [sp-1Ch] [bp-24h]@4
  int v9; // [sp-18h] [bp-20h]@4
  unsigned int v10; // [sp-14h] [bp-1Ch]@7
  std::_Container_proxy *v11; // [sp-10h] [bp-18h]@1
  int v12; // [sp-Ch] [bp-14h]@1
  unsigned int v13; // [sp-8h] [bp-10h]@4
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v14; // [sp-4h] [bp-Ch]@1
  std::_Container_proxy **v15; // [sp+4h] [bp-4h]@1

  v14 = result;
  v11 = 0;
  v12 = 0;
  v15 = &v11;
  if ( (_DWORD)_Dest.baseclass_0.baseclass_0._Myproxy && _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont )
    v11 = _Dest.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v13 = _Dest.baseclass_0._Myoff;
  v8 = 0;
  v9 = 0;
  v15 = &v8;
  if ( (_DWORD)_Last.baseclass_0.baseclass_0._Myproxy && _Last.baseclass_0.baseclass_0._Myproxy->_Mycont )
    v8 = _Last.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v10 = _Last.baseclass_0._Myoff;
  v5 = 0;
  v6 = 0;
  v15 = &v5;
  if ( (_DWORD)_First.baseclass_0.baseclass_0._Myproxy && _First.baseclass_0.baseclass_0._Myproxy->_Mycont )
    v5 = _First.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v7 = _First.baseclass_0._Myoff;
  std::_Move<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(
    result,
    *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v5,
    *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v8,
    *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v11,
    (std::_Nonscalar_ptr_iterator_tag)v14);
  return result;
}

//----- (006517C0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *result, const unsigned int *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (00651830) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *result, const unsigned __int16 *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (006518A0) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::erase(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First_arg, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last_arg)
{
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v4; // esi@1
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v5; // eax@7
  unsigned int v6; // edi@7
  unsigned int v7; // ebx@7
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v8; // eax@7
  bool v9; // zf@7
  unsigned int v10; // ecx@15
  unsigned int v11; // eax@30
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v12; // eax@36
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > v14; // [sp-18h] [bp-5Ch]@14
  int v15; // [sp-14h] [bp-58h]@26
  unsigned int v16; // [sp-10h] [bp-54h]@29
  std::_Container_proxy *v17; // [sp-Ch] [bp-50h]@11
  int v18; // [sp-8h] [bp-4Ch]@11
  unsigned int v19; // [sp-4h] [bp-48h]@14
  std::_Container_proxy *v20; // [sp+0h] [bp-44h]@1
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v21; // [sp+4h] [bp-40h]@1
  int v22; // [sp+8h] [bp-3Ch]@4
  char v23; // [sp+18h] [bp-2Ch]@7
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Last; // [sp+24h] [bp-20h]@7
  std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _First; // [sp+30h] [bp-14h]@4
  void *v26; // [sp+3Ch] [bp-8h]@7
  unsigned int _Off; // [sp+40h] [bp-4h]@1

  v4 = this;
  v20 = 0;
  v21 = 0;
  _Off = (unsigned int)&v20;
  if ( (_DWORD)_First_arg.baseclass_0._Myproxy && _First_arg.baseclass_0._Myproxy->_Mycont )
    v20 = _First_arg.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v22 = _First_arg._Myoff;
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Make_iter(
    this,
    &_First,
    *(std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v20);
  v20 = 0;
  v21 = 0;
  _Off = (unsigned int)&v20;
  if ( (_DWORD)_Last_arg.baseclass_0._Myproxy && _Last_arg.baseclass_0._Myproxy->_Mycont )
    v20 = _Last_arg.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v22 = _Last_arg._Myoff;
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Make_iter(
    v4,
    &_Last,
    *(std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v20);
  v5 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(
         v4,
         (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v23);
  v6 = _Last.baseclass_0._Myoff;
  _Off = _First.baseclass_0._Myoff - v5->baseclass_0._Myoff;
  v7 = _Last.baseclass_0._Myoff - _First.baseclass_0._Myoff;
  v8 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(
         v4,
         (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v23);
  v9 = _Off >= v8->baseclass_0._Myoff - v6;
  v26 = &v20;
  v20 = 0;
  v21 = 0;
  if ( v9 )
  {
    if ( (_DWORD)_First.baseclass_0.baseclass_0._Myproxy && _First.baseclass_0.baseclass_0._Myproxy->_Mycont )
      v20 = _First.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
    v22 = _First.baseclass_0._Myoff;
    v26 = &v17;
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::end(
      v4,
      (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v17);
    v14.baseclass_0.baseclass_0._Myproxy = 0;
    v15 = 0;
    v26 = &v14;
    if ( (_DWORD)_Last.baseclass_0.baseclass_0._Myproxy && _Last.baseclass_0.baseclass_0._Myproxy->_Mycont )
      v14.baseclass_0.baseclass_0._Myproxy = _Last.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
    v16 = _Last.baseclass_0._Myoff;
    std::_Move<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(
      (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v23,
      v14,
      *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v17,
      *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v20);
    if ( v7 > 0 )
    {
      v11 = v4->baseclass_0._Mysize;
      do
      {
        if ( v11 )
        {
          --v11;
          if ( !v11 )
            v4->baseclass_0._Myoff = 0;
        }
        --v7;
      }
      while ( v7 );
      v4->baseclass_0._Mysize = v11;
    }
  }
  else
  {
    if ( (_DWORD)_Last.baseclass_0.baseclass_0._Myproxy && _Last.baseclass_0.baseclass_0._Myproxy->_Mycont )
      v20 = _Last.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
    v22 = _Last.baseclass_0._Myoff;
    v17 = 0;
    v18 = 0;
    v26 = &v17;
    if ( (_DWORD)_First.baseclass_0.baseclass_0._Myproxy && _First.baseclass_0.baseclass_0._Myproxy->_Mycont )
      v17 = _First.baseclass_0.baseclass_0._Myproxy->_Mycont->_Myproxy;
    v19 = _First.baseclass_0._Myoff;
    v26 = &v14;
    std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(v4, &v14);
    std::_Move_backward<std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>_std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>>(
      (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v23,
      v14,
      *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v17,
      *(std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v20);
    if ( v7 > 0 )
    {
      v10 = v4->baseclass_0._Mysize;
      do
      {
        if ( v10 )
        {
          ++v4->baseclass_0._Myoff;
          if ( v4->baseclass_0._Mapsize <= v4->baseclass_0._Myoff )
            v4->baseclass_0._Myoff = 0;
          --v10;
          if ( !v10 )
            v4->baseclass_0._Myoff = 0;
        }
        --v7;
      }
      while ( v7 );
      v4->baseclass_0._Mysize = v10;
    }
  }
  v22 = _Off;
  v21 = result;
  v12 = std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::begin(
          v4,
          (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v23);
  std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::operator_(v12, v21, v22);
  return result;
}

//----- (00651A80) --------------------------------------------------------
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Tidy(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this)
{
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v1; // esi@1
  unsigned int v2; // eax@1
  unsigned int v3; // edi@6
  CharMgr::LoadData **v4; // eax@7
  bool v5; // zf@7
  void **v6; // eax@7

  v1 = this;
  v2 = this->baseclass_0._Mysize;
  if ( v2 )
  {
    do
    {
      if ( v2 )
      {
        --v2;
        this->baseclass_0._Mysize = v2;
        if ( !v2 )
          this->baseclass_0._Myoff = 0;
      }
    }
    while ( this->baseclass_0._Mysize );
  }
  v3 = this->baseclass_0._Mapsize;
  while ( v3 > 0 )
  {
    v4 = v1->baseclass_0._Map;
    --v3;
    v5 = v4[v3] == 0;
    v6 = (void **)&v4[v3];
    if ( !v5 )
      operator delete(*v6);
  }
  if ( v1->baseclass_0._Map )
    operator delete(v1->baseclass_0._Map);
  v1->baseclass_0._Map = 0;
  v1->baseclass_0._Mapsize = 0;
}

//----- (00651AF0) --------------------------------------------------------
void __thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this)
{
  void **v1; // esi@1

  v1 = (void **)this;
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::_Tidy(this);
  operator delete(*v1);
  *v1 = 0;
}

//----- (00651B10) --------------------------------------------------------
std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *__thiscall std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::erase(std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *this, std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *result, std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > _Where)
{
  std::deque<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *v3; // edi@1
  std::_Container_proxy *v5; // [sp-Ch] [bp-24h]@1
  int v6; // [sp-8h] [bp-20h]@1
  unsigned int v7; // [sp-4h] [bp-1Ch]@4
  std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > v8; // [sp+0h] [bp-18h]@1
  void *v9; // [sp+14h] [bp-4h]@1

  v9 = &v8;
  v3 = this;
  std::_Deque_iterator<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::operator_(
    (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&_Where,
    (std::_Deque_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v8,
    1);
  v5 = 0;
  v6 = 0;
  v9 = &v5;
  if ( (_DWORD)_Where.baseclass_0._Myproxy && _Where.baseclass_0._Myproxy->_Mycont )
    v5 = _Where.baseclass_0._Myproxy->_Mycont->_Myproxy;
  v7 = _Where._Myoff;
  std::deque<CharMgr::LoadData_std::allocator<CharMgr::LoadData>>::erase(
    v3,
    result,
    *(std::_Deque_const_iterator<CharMgr::LoadData,std::allocator<CharMgr::LoadData> > *)&v5,
    v8);
  return result;
}

//----- (00651B70) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (00651B90) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 33) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 33) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 33); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (00651BE0) --------------------------------------------------------
char *__cdecl Folder::Item()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return Folder::m_acItem;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00651C00) --------------------------------------------------------
char *__cdecl Folder::Ctrl()
{
  if ( !Folder::m_bInit )
    Folder::Init();
  return &Folder::m_acCtrl;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00651C20) --------------------------------------------------------
ChrClassType __cdecl CharClass::GetChrClassType(char kClassID)
{
  ChrClassType result; // eax@2

  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      result = 0;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      result = 2;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      result = 1;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      result = 3;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      result = 4;
      break;
    case 0x1A:
    case 0x1B:
      result = 5;
      break;
    default:
      result = 7;
      break;
  }
  return result;
}

//----- (00651CA0) --------------------------------------------------------
unsigned int __thiscall NiTMapBase<DFALL<NiPointer<PgWinSpr>>_unsigned_char_NiPointer<PgWinSpr>>::KeyToHashIndex(NiTMapBase<DFALL<NiPointer<PgWinSpr> >,unsigned char,NiPointer<PgWinSpr> > *this, char key)
{
  return (unsigned __int8)key % this->m_uiHashSize;
}

//----- (00651CC0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Max(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (00651CE0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll(NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *this)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v1; // esi@1
  unsigned int v2; // ebx@1
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > **v3; // eax@3
  NiTMapItem<unsigned long,NiPointer<PgWinBut> > *v4; // edi@3
  char buff[256]; // [sp+8h] [bp-104h]@3
  unsigned int v6; // [sp+108h] [bp-4h]@1
  int v7; // [sp+10Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  if ( this->m_uiHashSize )
  {
    do
    {
      while ( v1->m_ppkHashTable[v2] )
      {
        sprintf(buff, "%d");
        OutputDebugStringA(buff);
        v3 = v1->m_ppkHashTable;
        v4 = v3[v2];
        v3[v2] = v4->m_pkNext;
        v1->vfptr->ClearValue(v1, v4);
        v1->vfptr->DeleteItem(v1, v4);
      }
      ++v2;
    }
    while ( v2 < v1->m_uiHashSize );
    *(_DWORD *)&v1->m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    *(_DWORD *)&this->m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00651D90) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllMobActor(CharResMgr *this)
{
  CharResMgr *v1; // esi@1

  v1 = this;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kMobActorMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kRidePetMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMoverMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kPetMap);
}

//----- (00651DC0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllCharSet(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kCharSetMap);
}

//----- (00651DD0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllHair(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kHairMap);
}

//----- (00651DE0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllFace(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kFaceMap);
}

//----- (00651DF0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllDropItem(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kDropItemMap);
}

//----- (00651E00) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllItemUpgradeTextureEffect(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kItemUpgradeTextureEffectMap);
}

//----- (00651E10) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllHairDetailTexture(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kHairDetailTextureMap);
}

//----- (00651E20) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllFaceTexture(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kFaceTextureMap);
}

//----- (00651E30) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllFaceTattoo(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kFaceTattooMap);
}

//----- (00651E40) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllClosedEye(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kClosedEyeMap);
}

//----- (00651E50) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllSetTexture(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kSetTextureMap);
}

//----- (00651E60) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllController(CharResMgr *this)
{
  CharResMgr *v1; // edi@1
  NiTransformController *v2; // esi@1

  v1 = this;
  v2 = this->m_spDamageContrl.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spDamageContrl.m_pObject = 0;
  }
}

//----- (00651EA0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveQuestInfo(CharResMgr *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kQuestInfoMap);
}

//----- (00651EB0) --------------------------------------------------------
void __thiscall BonePartitionReCreate::BonePartitionReCreate(BonePartitionReCreate *this, int BoneNum)
{
  this->baseclass_0.m_pCallBack = 0;
  this->baseclass_0.m_nCurLevel = -1;
  this->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&BonePartitionReCreate::_vftable_;
  this->m_nBoneNum = BoneNum;
}
// 9C41D0: using guessed type int (__stdcall *BonePartitionReCreate___vftable_)(int _pkObject, int _pData);

//----- (00651EE0) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetPigeonActor(CharResMgr *this)
{
  CharResMgr *v1; // ebx@1
  NiActorManager *v2; // ecx@1
  NiActorManager *result; // eax@2
  NiActorManager *v4; // eax@5
  NiActorManager *v5; // edi@5
  NiActorManager *v6; // esi@6
  char acFileName[260]; // [sp+4h] [bp-108h]@5
  unsigned int v8; // [sp+108h] [bp-4h]@1
  int v9; // [sp+10Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = this->m_spPigeonActor.m_pObject;
  if ( v2 )
  {
    result = NiActorManager::Clone(v2);
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acFileName, "%s%s\\%s.kfm");
    v4 = NiActorManager::Create(acFileName, 0, 1, 0);
    v5 = v4;
    if ( v4 )
    {
      v6 = v1->m_spPigeonActor.m_pObject;
      if ( v6 != v4 )
      {
        if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
        {
          if ( v6 )
            v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        }
        v1->m_spPigeonActor.m_pObject = v5;
        InterlockedIncrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount);
      }
      NiObjectNET::ms_eCopyType = 1;
      result = NiActorManager::Clone(v5);
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00651FD0) --------------------------------------------------------
bool __thiscall CharResMgr::CreateAnimationController(CharResMgr *this)
{
  CharResMgr *v1; // ebx@1
  char *v2; // eax@3
  NiTimeController *v3; // eax@4
  NiTransformController *v4; // esi@4
  NiTimeController *v5; // edi@4
  NiTransformController *v6; // eax@11
  NiNode *v7; // esi@12
  void *v9; // eax@17
  int v10; // eax@18
  int v11; // edi@18
  NiNode *v12; // esi@20
  NiNode *v13; // esi@28
  NiPointer<NiNode> spNode; // [sp+4h] [bp-10h]@1
  int v15; // [sp+10h] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v15 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acCtrl, "CharDamageShake.nif");
  PgUtil::LoadNodeNifFile(v2, &spNode, 0);
  if ( !spNode.m_pObject )
    return 0;
  v3 = PgUtil::GetControllerWithChild(&spNode.m_pObject->baseclass_0, &NiTransformController::m_RTTI);
  v4 = v1->m_spDamageContrl.m_pObject;
  v5 = v3;
  if ( (NiTimeController *)v4 != v3 )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spDamageContrl.m_pObject = (NiTransformController *)v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount);
  }
  v6 = v1->m_spDamageContrl.m_pObject;
  if ( !v6 )
  {
    v7 = spNode.m_pObject;
    v15 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v6->baseclass_0.baseclass_0.baseclass_0.m_uFlags = v6->baseclass_0.baseclass_0.baseclass_0.m_uFlags & 0xFFF7 | 1;
  v9 = operator new(0xE8u);
  LOBYTE(v15) = 1;
  if ( v9 )
  {
    NiNode::NiNode((NiNode *)v9, 0);
    v11 = v10;
  }
  else
  {
    v11 = 0;
  }
  v12 = v1->m_spCharShakeNode.m_pObject;
  LOBYTE(v15) = 0;
  if ( v12 != (NiNode *)v11 )
  {
    if ( v12
      && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    v1->m_spCharShakeNode.m_pObject = (NiNode *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)(v11 + 4));
  }
  ((void (__stdcall *)(NiNode *))v1->m_spDamageContrl.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v1->m_spCharShakeNode.m_pObject);
  v15 = -1;
  if ( spNode.m_pObject )
  {
    v13 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v13 )
        v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    }
  }
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006521B0) --------------------------------------------------------
bool __thiscall CharResMgr::CreateCharShakeNode(CharResMgr *this)
{
  CharResMgr *v1; // edi@1
  char *v2; // eax@3
  NiNode *v3; // eax@3
  NiNode *v4; // esi@3
  NiNode *v5; // edi@4
  NiTimeController *v6; // eax@10
  volatile LONG *v8; // [sp-14h] [bp-28h]@10
  CharResMgr *v9; // [sp+0h] [bp-14h]@1

  v1 = this;
  v9 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acCtrl, "CharDamageShake.nif");
  v3 = PgUtil::LoadNifFile(v2, 0, 1);
  v4 = v3;
  if ( !v3 )
    return 0;
  InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v5 = v1->m_spCharShakeNode.m_pObject;
  if ( v5 != v4 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v9->m_spCharShakeNode.m_pObject = v4;
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v6 = PgUtil::GetControllerWithChild(&v4->baseclass_0, &NiTransformController::m_RTTI);
  v8 = (volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  if ( !v6 )
  {
    if ( !InterlockedDecrement(v8) )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v6->m_uFlags = v6->m_uFlags & 0xFFF7 | 1;
  if ( !InterlockedDecrement(v8) )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006522E0) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetCharShakeNode(CharResMgr *this)
{
  NiObject *v1; // ecx@1
  NiObject *v2; // eax@2
  NiNode *result; // eax@2

  v1 = (NiObject *)this->m_spCharShakeNode.m_pObject;
  if ( v1 )
  {
    v2 = NiObject::Clone(v1);
    result = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, (NiShader *)v2);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00652310) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall BonePartitionReCreate::ProcessData(BonePartitionReCreate *this, NiAVObject *_pkObject, void *_pData)
{
  BonePartitionReCreate *v3; // edi@1
  NiShader *v4; // eax@2
  NiShader *v5; // esi@2
  unsigned int v6; // eax@3
  NiShader *v7; // eax@5

  v3 = this;
  if ( _pkObject )
  {
    v4 = CPostProcessEffect::DynamicCast(&NiTriBasedGeom::m_RTTI, (NiShader *)_pkObject);
    v5 = v4;
    if ( v4 )
    {
      v6 = v4[11].m_uiImplementation;
      if ( v6 )
      {
        if ( *(_DWORD *)(v6 + 12) )
        {
          v7 = CPostProcessEffect::DynamicCast(&NiTriBasedGeomData::m_RTTI, (NiShader *)v5[11].m_pszName);
          if ( v7 )
            NiSkinPartition::MakePartitions(
              *(NiSkinPartition **)(v5[11].m_uiImplementation + 12),
              (NiTriBasedGeomData *)v7,
              *(NiSkinData **)(v5[11].m_uiImplementation + 8),
              LOBYTE(v3->m_nBoneNum),
              4,
              1);
        }
      }
    }
  }
  return 1;
}

//----- (00652390) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetQuestInfo(CharResMgr *this, unsigned int dwQuestInfo, bool bLowRepeat)
{
  CharResMgr *v3; // edi@1
  NiNode *result; // eax@1
  NiNode *v5; // esi@13
  char *v6; // [sp-Ch] [bp-124h]@4
  const char *v7; // [sp-8h] [bp-120h]@4
  char *v8; // [sp-4h] [bp-11Ch]@3
  char **v9; // [sp+Ch] [bp-10Ch]@14
  char acFileName[260]; // [sp+10h] [bp-108h]@4
  unsigned int v11; // [sp+114h] [bp-4h]@1
  int v12; // [sp+118h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  result = CharResMgr::GetQuestInfoFromMap(this, dwQuestInfo);
  if ( !result )
  {
    switch ( dwQuestInfo )
    {
      case 4u:
        v8 = Folder::System();
        if ( bLowRepeat )
        {
          v7 = "%sGetQuestLowLevel.nif";
          v6 = acFileName;
        }
        else
        {
          v7 = "%sGetQuest.nif";
          v6 = acFileName;
        }
        goto LABEL_13;
      case 5u:
      case 0x14u:
        if ( !Folder::m_bInit )
          Folder::Init();
        v8 = &Folder::m_acSystem;
        v7 = "%sGetQuest.nif";
        goto LABEL_12;
      case 6u:
        v8 = Folder::System();
        v7 = "%sIngQuest.nif";
        v6 = acFileName;
        goto LABEL_13;
      case 8u:
        v8 = Folder::System();
        v7 = "%sFinQuest.nif";
        v6 = acFileName;
        goto LABEL_13;
      case 9u:
        v8 = Folder::System();
        v7 = "%sGetQuestLowLevel.nif";
LABEL_12:
        v6 = acFileName;
LABEL_13:
        sprintf(v6, v7);
        v5 = PgUtil::LoadNifFile(acFileName, 0, 1);
        if ( !v5 )
          goto LABEL_15;
        v9 = &v8;
        v8 = (char *)v5;
        InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
          (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v3->m_kQuestInfoMap,
          dwQuestInfo,
          (NiPointer<PgWinBut>)v8);
        result = (NiNode *)NiObject::Clone(&v5->baseclass_0.baseclass_0.baseclass_0);
        break;
      default:
LABEL_15:
        result = 0;
        break;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006524F0) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetRidePetActor(CharResMgr *this, unsigned __int16 kPetID)
{
  NiActorManager *result; // eax@1
  RIDING *v3; // edi@2
  NiActorManager *v4; // ebx@5
  const char *v5; // edi@8
  NiSourceTexture *v6; // eax@8
  NiSourceTexture *v7; // esi@8
  NiNode *v8; // eax@17
  NiActorManager *v9; // edi@19
  int v10; // [sp-14h] [bp-144h]@5
  unsigned int v11; // [sp-10h] [bp-140h]@1
  int *v12; // [sp+0h] [bp-130h]@19
  ResetTexture kResetTexture; // [sp+4h] [bp-12Ch]@18
  unsigned int key; // [sp+10h] [bp-120h]@2
  NiPointer<NiSourceTexture> spTexture; // [sp+14h] [bp-11Ch]@8
  CharResMgr *v16; // [sp+18h] [bp-118h]@1
  char acFileName[260]; // [sp+1Ch] [bp-114h]@5
  unsigned int v18; // [sp+120h] [bp-10h]@1
  int v19; // [sp+12Ch] [bp-4h]@10
  int v20; // [sp+130h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v11 = (unsigned int)&v20 ^ __security_cookie;
  v16 = this;
  result = CharResMgr::GetRidePetActorFromMap(this, kPetID);
  if ( !result )
  {
    key = kPetID;
    v3 = RidePetTable::GetByID(kPetID);
    if ( !v3 )
      goto LABEL_26;
    if ( !Folder::m_bInit )
      Folder::Init();
    v10 = (int)v3->Shape;
    sprintf(acFileName, "%s%s\\%s.kfm");
    v4 = NiActorManager::Create(acFileName, 0, 1, 0);
    if ( v4 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v5 = v3->Texture;
      v10 = (int)v5;
      sprintf(acFileName, "%s%s\\%s.dds");
      v6 = NiSourceTexture::Create(acFileName, &NiSourceTexture::ms_kDefaultPrefs, 0);
      v7 = v6;
      spTexture.m_pObject = v6;
      if ( v6 )
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v19 = 0;
      if ( strcmp(v5, "-") && strcmp(v5, (const char *)&unk_9C3B5E) )
      {
        if ( v7 )
        {
          v8 = (NiNode *)v4->m_spNIFRoot.m_pObject;
          if ( v8 )
          {
            kResetTexture.baseclass_0.m_pCallBack = 0;
            kResetTexture.baseclass_0.m_nCurLevel = -1;
            kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
            LOBYTE(v19) = 1;
            Ns_TourScene::TourScene(&kResetTexture.baseclass_0, v8, &NiAVObject::m_RTTI, v7);
            LOBYTE(v19) = 0;
            kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
          }
        }
      }
      else
      {
        if ( v7 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
          v7 = 0;
          spTexture.m_pObject = 0;
        }
      }
      v10 = (int)v4;
      v12 = &v10;
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v16->m_kRidePetMap,
        key,
        (NiPointer<PgWinBut>)v10);
      NiObjectNET::ms_eCopyType = 1;
      v9 = NiActorManager::Clone(v4);
      v19 = -1;
      if ( v7 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
      result = v9;
    }
    else
    {
LABEL_26:
      result = 0;
    }
  }
  return result;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00652750) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetMobActor(CharResMgr *this, unsigned __int16 kMobID)
{
  NiActorManager *result; // eax@1
  int v3; // esi@2
  int v4; // edi@3
  int v5; // ecx@6
  int v6; // esi@9
  int (__thiscall *v7)(_DWORD); // eax@9
  int v8; // eax@13
  const char *v9; // edi@21
  NiSourceTexture *v10; // ebx@21
  NiSourceTexture *v11; // eax@23
  float v12; // edi@24
  int v13; // eax@25
  unsigned int v14; // esi@27
  NiActorManager *v15; // esi@27
  int v16; // [sp-14h] [bp-148h]@19
  unsigned int v17; // [sp-10h] [bp-144h]@1
  ResetTexture kResetTexture; // [sp+0h] [bp-134h]@26
  CharResMgr *v19; // [sp+Ch] [bp-128h]@1
  NiPointer<NiSourceTexture> spTexture; // [sp+10h] [bp-124h]@21
  int *v21; // [sp+14h] [bp-120h]@1
  void *pkMobInfo; // [sp+18h] [bp-11Ch]@10
  float pkActor; // [sp+1Ch] [bp-118h]@19
  char acFileName[260]; // [sp+20h] [bp-114h]@19
  unsigned int v25; // [sp+124h] [bp-10h]@1
  int v26; // [sp+130h] [bp-4h]@21
  int v27; // [sp+134h] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v17 = (unsigned int)&v27 ^ __security_cookie;
  v19 = this;
  v21 = (int *)kMobID;
  result = CharResMgr::GetMobActorFromMap(this, kMobID);
  if ( result )
    return result;
  v3 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, unsigned int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                                         + 16))(
                          ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                          kMobID,
                          v17) )
  {
    if ( kMobID <= *(_WORD *)(v3 + 200) )
    {
      v5 = *(_DWORD *)(v3 + 196);
      if ( *(_DWORD *)(v5 + 4 * kMobID) )
        v4 = *(_DWORD *)(v5 + 4 * kMobID);
      else
        v4 = 0;
    }
    else
    {
      v4 = 0;
    }
  }
  else
  {
    v4 = 0;
  }
  v6 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  v7 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16);
  v17 = kMobID;
  if ( (unsigned __int8)v7(ITableBase<MobInfo_MobInfoTab>::ms_pkTable) )
  {
    if ( kMobID <= *(_WORD *)(v6 + 200) )
    {
      v8 = *(_DWORD *)(v6 + 196) + 4 * kMobID;
      if ( *(_DWORD *)v8 )
        pkMobInfo = *(void **)v8;
      else
        pkMobInfo = 0;
    }
    else
    {
      pkMobInfo = 0;
    }
  }
  else
  {
    pkMobInfo = 0;
  }
  if ( !v4 )
    return 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v16 = v4 + 34;
  sprintf(acFileName, "%s%s\\%s.kfm");
  LODWORD(pkActor) = NiActorManager::Create(acFileName, 0, 1, 0);
  if ( !Folder::m_bInit )
    Folder::Init();
  v9 = (const char *)(v4 + 66);
  v16 = (int)v9;
  sprintf(acFileName, "%s%s\\%s.dds");
  v10 = 0;
  spTexture.m_pObject = 0;
  v26 = 0;
  if ( strcmp(v9, "-") && strcmp(v9, (const char *)&unk_9C3B7E) )
  {
    v11 = NiSourceTexture::Create(acFileName, &NiSourceTexture::ms_kDefaultPrefs, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&spTexture, (NiD3DDefaultShader *)v11);
    v10 = spTexture.m_pObject;
  }
  v12 = pkActor;
  if ( pkActor == 0.0 )
  {
    v26 = -1;
    if ( v10
      && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    return 0;
  }
  v13 = *(_DWORD *)(LODWORD(pkActor) + 12);
  pkActor = (double)*(unsigned int *)((char *)pkMobInfo + 83) / 1000.0;
  pkActor = fabs(pkActor);
  *(float *)(v13 + 100) = pkActor;
  if ( v10 )
  {
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    LOBYTE(v26) = 1;
    Ns_TourScene::TourScene(&kResetTexture.baseclass_0, (NiNode *)v13, &NiAVObject::m_RTTI, v10);
    LOBYTE(v26) = 0;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  }
  v14 = (unsigned __int16)v21;
  v21 = &v16;
  v16 = LODWORD(v12);
  InterlockedIncrement((volatile LONG *)(LODWORD(v12) + 4));
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v19->m_kMobActorMap,
    v14,
    (NiPointer<PgWinBut>)v16);
  NiObjectNET::ms_eCopyType = 1;
  v15 = NiActorManager::Clone(LODWORD(v12));
  v26 = -1;
  if ( v10 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  }
  return v15;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00652A80) --------------------------------------------------------
CharSet *__thiscall CharResMgr::GetCharSet(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo)
{
  char v4; // bl@2
  CharSet *result; // eax@9
  int v6; // edi@26
  NiObjectNET *v7; // eax@26
  NiNode *v8; // esi@26
  void *v9; // eax@27
  int v10; // eax@28
  int v11; // esi@29
  char *v12; // [sp-24h] [bp-144h]@14
  const char *v13; // [sp-20h] [bp-140h]@14
  char *v14; // [sp-14h] [bp-134h]@14
  unsigned int v15; // [sp-10h] [bp-130h]@1
  CharResMgr *v16; // [sp+0h] [bp-120h]@1
  char **v17; // [sp+4h] [bp-11Ch]@1
  void *v18; // [sp+8h] [bp-118h]@27
  char acFileName[260]; // [sp+Ch] [bp-114h]@14
  unsigned int v20; // [sp+110h] [bp-10h]@1
  int v21; // [sp+11Ch] [bp-4h]@27
  int v22; // [sp+120h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v15 = (unsigned int)&v22 ^ __security_cookie;
  v16 = this;
  v17 = (char **)wNo;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v4 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v4 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v4 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v4 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v4 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v4 = 26;
      break;
    default:
      v4 = 0;
      break;
  }
  result = CharResMgr::GetCharSetFromMap(this, v4, byGender, wNo);
  if ( !result )
  {
    if ( byGender == 1 )
    {
      if ( !wNo )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v14 = CharClass::GetBaseEngName(v4);
        CharClass::GetBaseEngName(v4);
        v13 = "%s%s-m\\%s-m.nif";
        v12 = acFileName;
        goto LABEL_26;
      }
      if ( !Folder::m_bInit )
        Folder::Init();
      v14 = (char *)wNo;
      CharClass::GetBaseEngName(v4);
      v13 = "%s%s-m\\set%03d.nif";
    }
    else
    {
      if ( !wNo )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v14 = CharClass::GetBaseEngName(v4);
        CharClass::GetBaseEngName(v4);
        v13 = "%s%s-f\\%s-f.nif";
        v12 = acFileName;
        goto LABEL_26;
      }
      if ( !Folder::m_bInit )
        Folder::Init();
      v14 = (char *)wNo;
      CharClass::GetBaseEngName(v4);
      v13 = "%s%s-f\\set%03d.nif";
    }
    v12 = acFileName;
LABEL_26:
    sprintf(v12, v13);
    v6 = 0;
    v7 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
    v8 = (NiNode *)v7;
    if ( v7 )
    {
      NiObjectNET::SetName(v7, "CharSet");
      v9 = operator new(0x34u);
      v18 = v9;
      v21 = 0;
      if ( v9 )
      {
        CharSet::CharSet((CharSet *)v9);
        v6 = v10;
      }
      v21 = -1;
      CharSet::Init((CharSet *)v6, v8);
      v11 = (unsigned __int16)v17 | (((unsigned __int8)byGender | ((unsigned __int8)v4 << 8)) << 16);
      v17 = &v14;
      v14 = (char *)v6;
      if ( v6 )
        InterlockedIncrement((volatile LONG *)(v6 + 4));
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v16->m_kCharSetMap,
        v11,
        (NiPointer<PgWinBut>)v14);
      result = (CharSet *)v6;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00652D10) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetHairDetailTexture(CharResMgr *this, unsigned int dwID, const char *pchFileName)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v3; // edi@1
  NiShaderLibrary *v4; // esi@1
  NiImageConverter *v5; // eax@6
  NiPixelData *v6; // eax@6
  NiObjectNET *v7; // eax@8
  NiPointer<PgWinBut> v9; // [sp-14h] [bp-138h]@6
  unsigned int v10; // [sp-10h] [bp-134h]@1
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-124h]@8
  NiPointer<NiShaderLibrary> val; // [sp+Ch] [bp-118h]@1
  char acFileName[260]; // [sp+10h] [bp-114h]@6
  unsigned int v14; // [sp+114h] [bp-10h]@1
  int v15; // [sp+120h] [bp-4h]@1
  int v16; // [sp+124h] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v10 = (unsigned int)&v16 ^ __security_cookie;
  val.m_pObject = 0;
  v15 = 0;
  v3 = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kHairDetailTextureMap;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kHairDetailTextureMap,
    (const char *)dwID,
    &val);
  v4 = val.m_pObject;
  v15 = -1;
  if ( val.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v9.m_pObject = (PgWinBut *)pchFileName;
    sprintf(acFileName, "%sHDetail\\%s.tga");
    v5 = NiImageConverter::GetImageConverter();
    v6 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v5->baseclass_0.vfptr[2].__vecDelDtor)(
                          v5,
                          acFileName,
                          0);
    if ( v6 )
    {
      kPrefs.m_ePixelLayout = 6;
      kPrefs.m_eAlphaFmt = 3;
      kPrefs.m_eMipMapped = 0;
      v7 = (NiObjectNET *)NiSourceTexture::Create(v6, &kPrefs);
      v4 = (NiShaderLibrary *)v7;
      if ( v7 )
      {
        NiObjectNET::SetName(v7, "HairDetailTexture");
        val.m_pObject = (NiShaderLibrary *)&v9;
        v9.m_pObject = (PgWinBut *)v4;
        InterlockedIncrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount);
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(v3, dwID, v9);
      }
    }
    else
    {
      v4 = 0;
    }
  }
  return (NiSourceTexture *)v4;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00652E60) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetFace(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wFaceType)
{
  char v4; // bl@2
  NiNode *result; // eax@9
  NiObjectNET *v6; // eax@17
  NiObjectNET *v7; // edi@17
  int v8; // esi@18
  int v9; // esi@18
  char *v10; // [sp-14h] [bp-134h]@13
  const char *v11; // [sp-10h] [bp-130h]@13
  NiPointer<PgWinBut> v12; // [sp-4h] [bp-124h]@13
  CharResMgr *v13; // [sp+Ch] [bp-114h]@1
  NiPointer<PgWinBut> *v14; // [sp+10h] [bp-110h]@1
  int v15; // [sp+14h] [bp-10Ch]@13
  char acFileName[260]; // [sp+18h] [bp-108h]@13
  unsigned int v17; // [sp+11Ch] [bp-4h]@1
  int v18; // [sp+120h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v13 = this;
  LOBYTE(v14) = byGender;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v4 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v4 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v4 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v4 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v4 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v4 = 26;
      break;
    default:
      v4 = 0;
      break;
  }
  result = CharResMgr::GetFaceFromMap(this, v4, (char)v14, wFaceType);
  if ( !result )
  {
    if ( (_BYTE)v14 == 1 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v12.m_pObject = (PgWinBut *)wFaceType;
      v15 = wFaceType;
      CharClass::GetBaseEngName(v4);
      v11 = "%s%s-m\\Face%03d.nif";
      v10 = acFileName;
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v12.m_pObject = (PgWinBut *)wFaceType;
      v15 = wFaceType;
      CharClass::GetBaseEngName(v4);
      v11 = "%s%s-f\\Face%03d.nif";
      v10 = acFileName;
    }
    sprintf(v10, v11);
    v6 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
    v7 = v6;
    if ( v6 )
    {
      NiObjectNET::SetName(v6, "Face");
      v8 = (unsigned __int8)v14 | ((unsigned __int8)v4 << 8);
      v14 = &v12;
      v9 = v15 | (v8 << 16);
      v12.m_pObject = (PgWinBut *)v7;
      InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v13->m_kFaceMap,
        v9,
        v12);
      NiObjectNET::ms_eCopyType = 1;
      result = (NiNode *)NiObject::Clone(&v7->baseclass_0);
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00653060) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetFaceTexture(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo)
{
  char v4; // bl@2
  NiSourceTexture *result; // eax@9
  NiObjectNET *v6; // edi@9
  int v7; // eax@13
  NiImageConverter *v8; // eax@17
  NiPixelData *v9; // eax@17
  NiObjectNET *v10; // eax@18
  int v11; // esi@19
  char *v12; // [sp-18h] [bp-148h]@13
  const char *v13; // [sp-14h] [bp-144h]@13
  NiPointer<PgWinBut> v14; // [sp-4h] [bp-134h]@13
  NiTexture::FormatPrefs kPrefs; // [sp+Ch] [bp-124h]@18
  CharResMgr *v16; // [sp+18h] [bp-118h]@1
  int v17; // [sp+1Ch] [bp-114h]@1
  NiPointer<PgWinBut> *v18; // [sp+20h] [bp-110h]@1
  int v19; // [sp+24h] [bp-10Ch]@9
  char acFileName[260]; // [sp+28h] [bp-108h]@13
  unsigned int v21; // [sp+12Ch] [bp-4h]@1
  int v22; // [sp+130h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  LOBYTE(v17) = byGender;
  v16 = this;
  v18 = (NiPointer<PgWinBut> *)wNo;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v4 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v4 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v4 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v4 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v4 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v4 = 26;
      break;
    default:
      v4 = 0;
      break;
  }
  LOBYTE(v19) = v4;
  result = CharResMgr::GetFaceTextureFromMap(this, v4, v17, wNo);
  v6 = 0;
  if ( !result )
  {
    CharClass::GetBaseEngName(v4);
    if ( (_BYTE)v17 == 1 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = (unsigned __int16)v18;
      v14.m_pObject = (PgWinBut *)(unsigned __int16)v18;
      v13 = "%s%s-m\\%s-m-face%03d.dds";
      v12 = acFileName;
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = (unsigned __int16)v18;
      v14.m_pObject = (PgWinBut *)(unsigned __int16)v18;
      v13 = "%s%s-f\\%s-f-face%03d.dds";
      v12 = acFileName;
    }
    v18 = (NiPointer<PgWinBut> *)v7;
    sprintf(v12, v13);
    v8 = NiImageConverter::GetImageConverter();
    v9 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v8->baseclass_0.vfptr[2].__vecDelDtor)(
                          v8,
                          acFileName,
                          0);
    if ( v9 )
    {
      kPrefs.m_ePixelLayout = 6;
      kPrefs.m_eAlphaFmt = 3;
      kPrefs.m_eMipMapped = 0;
      v10 = (NiObjectNET *)NiSourceTexture::Create(v9, &kPrefs);
      v6 = v10;
      if ( v10 )
      {
        NiObjectNET::SetName(v10, "FaceTexture");
        v11 = (unsigned int)v18 | (((unsigned __int8)v17 | ((unsigned __int8)v4 << 8)) << 16);
        v14.m_pObject = (PgWinBut *)v6;
        v18 = &v14;
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount);
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
          (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v16->m_kFaceTextureMap,
          v11,
          v14);
      }
    }
    result = (NiSourceTexture *)v6;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00653270) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetFaceTattoo(CharResMgr *this, unsigned __int16 wNo)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v2; // ebx@1
  NiShaderLibrary *v3; // esi@1
  NiImageConverter *v4; // eax@6
  NiPixelData *v5; // eax@6
  NiObjectNET *v6; // eax@7
  NiPointer<PgWinBut> v8; // [sp-14h] [bp-138h]@6
  unsigned int v9; // [sp-10h] [bp-134h]@1
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-124h]@7
  NiPointer<NiShaderLibrary> val; // [sp+Ch] [bp-118h]@1
  char acFileName[260]; // [sp+10h] [bp-114h]@6
  unsigned int v13; // [sp+114h] [bp-10h]@1
  int v14; // [sp+120h] [bp-4h]@1
  int v15; // [sp+124h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v9 = (unsigned int)&v15 ^ __security_cookie;
  val.m_pObject = 0;
  v14 = 0;
  v2 = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kFaceTattooMap;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kFaceTattooMap,
    (const char *)wNo,
    &val);
  v3 = val.m_pObject;
  v14 = -1;
  if ( val.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v8.m_pObject = (PgWinBut *)wNo;
    sprintf(acFileName, "%s\\tattoo%03d.tga");
    v4 = NiImageConverter::GetImageConverter();
    v3 = 0;
    v5 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(
                          v4,
                          acFileName,
                          0);
    if ( v5 )
    {
      kPrefs.m_ePixelLayout = 6;
      kPrefs.m_eAlphaFmt = 3;
      kPrefs.m_eMipMapped = 0;
      v6 = (NiObjectNET *)NiSourceTexture::Create(v5, &kPrefs);
      v3 = (NiShaderLibrary *)v6;
      if ( v6 )
      {
        NiObjectNET::SetName(v6, "FaceTattoo");
        val.m_pObject = (NiShaderLibrary *)&v8;
        v8.m_pObject = (PgWinBut *)v3;
        InterlockedIncrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount);
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(v2, wNo, v8);
      }
    }
  }
  return (NiSourceTexture *)v3;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006533C0) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetClosedEyeTexture(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo)
{
  char v4; // bl@2
  NiSourceTexture *result; // eax@9
  int v6; // eax@13
  NiImageConverter *v7; // eax@17
  NiPixelData *v8; // eax@17
  NiObjectNET *v9; // eax@18
  NiObjectNET *v10; // edi@18
  int v11; // esi@19
  char *v12; // [sp-14h] [bp-144h]@13
  const char *v13; // [sp-10h] [bp-140h]@13
  NiPointer<PgWinBut> v14; // [sp-4h] [bp-134h]@13
  NiTexture::FormatPrefs kPrefs; // [sp+Ch] [bp-124h]@18
  CharResMgr *thisa; // [sp+18h] [bp-118h]@1
  int v17; // [sp+1Ch] [bp-114h]@1
  NiPointer<PgWinBut> *v18; // [sp+20h] [bp-110h]@1
  int v19; // [sp+24h] [bp-10Ch]@9
  char acFileName[260]; // [sp+28h] [bp-108h]@13
  unsigned int v21; // [sp+12Ch] [bp-4h]@1
  int v22; // [sp+130h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  LOBYTE(v17) = byGender;
  thisa = this;
  v18 = (NiPointer<PgWinBut> *)wNo;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v4 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v4 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v4 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v4 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v4 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v4 = 26;
      break;
    default:
      v4 = 0;
      break;
  }
  LOBYTE(v19) = v4;
  result = CharResMgr::GetClosedEyeFromMap(this, v4, v17, wNo);
  if ( !result )
  {
    CharClass::GetBaseEngName(v19);
    if ( (_BYTE)v17 == 1 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v6 = (unsigned __int16)v18;
      v14.m_pObject = (PgWinBut *)(unsigned __int16)v18;
      v13 = "%s%s-m\\EyeShape%03d.dds";
      v12 = acFileName;
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v6 = (unsigned __int16)v18;
      v14.m_pObject = (PgWinBut *)(unsigned __int16)v18;
      v13 = "%s%s-f\\EyeShape%03d.dds";
      v12 = acFileName;
    }
    v19 = v6;
    sprintf(v12, v13);
    v7 = NiImageConverter::GetImageConverter();
    v8 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v7->baseclass_0.vfptr[2].__vecDelDtor)(
                          v7,
                          acFileName,
                          0);
    if ( v8
      && (kPrefs.m_ePixelLayout = 6,
          kPrefs.m_eAlphaFmt = 3,
          kPrefs.m_eMipMapped = 0,
          v9 = (NiObjectNET *)NiSourceTexture::Create(v8, &kPrefs),
          (v10 = v9) != 0) )
    {
      NiObjectNET::SetName(v9, "EyeTexture");
      v14.m_pObject = (PgWinBut *)v10;
      v18 = &v14;
      v11 = v19 | (((unsigned __int8)v17 | ((unsigned __int8)v4 << 8)) << 16);
      InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&thisa->m_kClosedEyeMap,
        v11,
        v14);
      result = (NiSourceTexture *)v10;
    }
    else
    {
      if ( (_WORD)v18 )
        result = CharResMgr::GetClosedEyeTexture(thisa, v4, v17, 0);
      else
        result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00653620) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetDropItem(CharResMgr *this, unsigned __int16 kItemID)
{
  CharResMgr *v2; // edi@1
  NiNode *result; // eax@1
  NiNode *v4; // eax@4
  NiNode *v5; // esi@4
  NiTimeController *v6; // eax@5
  NiPointer<PgWinBut> v7; // [sp-4h] [bp-118h]@4
  NiPointer<PgWinBut> *v8; // [sp+8h] [bp-10Ch]@7
  char acFileName[260]; // [sp+Ch] [bp-108h]@4
  unsigned int v10; // [sp+110h] [bp-4h]@1
  int v11; // [sp+114h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  result = CharResMgr::GetDropItemFromMap(this, 0);
  if ( !result )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v7.m_pObject = (PgWinBut *)"GroundItem";
    sprintf(acFileName, "%s%s.nif");
    v4 = PgUtil::LoadNifFile(acFileName, 0, 1);
    v5 = v4;
    if ( v4 )
    {
      v6 = PgUtil::GetControllerWithChild(&v4->baseclass_0, &NiTransformController::m_RTTI);
      if ( v6 )
        v6->m_uFlags = v6->m_uFlags & 0xFFF7 | 1;
      NiObjectNET::SetName(&v5->baseclass_0.baseclass_0, "DropItem");
      v8 = &v7;
      v7.m_pObject = (PgWinBut *)v5;
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kDropItemMap,
        0,
        v7);
      NiObjectNET::ms_eCopyType = 1;
      result = (NiNode *)NiObject::Clone(&v5->baseclass_0.baseclass_0.baseclass_0);
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00653720) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetItemUpgradeTextureEffect(CharResMgr *this, char ucEffNo)
{
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *v2; // ebx@1
  NiNode *v3; // edi@1
  NiNode *result; // eax@4
  NiNode *v5; // eax@7
  NiNode *v6; // edi@7
  NiPointer<PgWinBut> v7; // [sp-14h] [bp-12Ch]@7
  unsigned int v8; // [sp-10h] [bp-128h]@1
  NiPointer<NiShaderLibrary> val; // [sp+0h] [bp-118h]@1
  char acFileName[260]; // [sp+4h] [bp-114h]@7
  unsigned int v11; // [sp+108h] [bp-10h]@1
  int v12; // [sp+114h] [bp-4h]@1
  int v13; // [sp+118h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v8 = (unsigned int)&v13 ^ __security_cookie;
  val.m_pObject = 0;
  v2 = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kDropItemMap;
  v12 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kDropItemMap,
    (const char *)(unsigned __int8)ucEffNo,
    &val);
  v3 = (NiNode *)val.m_pObject;
  v12 = -1;
  if ( val.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    result = v3;
  }
  else
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v7.m_pObject = (PgWinBut *)(unsigned __int8)ucEffNo;
    sprintf(acFileName, "%sUpgradeTexEff%02u.nif");
    v5 = PgUtil::LoadNifFile(acFileName, 0, 1);
    v6 = v5;
    if ( v5 )
    {
      v7.m_pObject = (PgWinBut *)v5;
      val.m_pObject = (NiShaderLibrary *)&v7;
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(v2, (unsigned __int8)ucEffNo, v7);
      result = v6;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00653820) --------------------------------------------------------
void __thiscall CharResMgr::ResetProperty(CharResMgr *this, NiAVObject *pkObject)
{
  NiAVObject *v2; // ebx@1
  CharResMgr *v3; // esi@1
  NiProperty *v4; // eax@3
  NiVertexColorProperty *v5; // edi@3
  NiProperty *v6; // eax@12
  NiMaterialProperty *v7; // edi@12
  NiProperty *pkObjecta; // [sp+10h] [bp+8h]@3
  NiProperty *pkObjectb; // [sp+10h] [bp+8h]@12

  v2 = pkObject;
  v3 = this;
  if ( pkObject )
  {
    if ( !this->m_spVertProp.m_pObject )
    {
      v4 = PgUtil::GetPropertyWithChild(pkObject, 9);
      v5 = v3->m_spVertProp.m_pObject;
      pkObjecta = v4;
      if ( (NiProperty *)v5 != v4 )
      {
        if ( v5 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v5 )
            v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
          v4 = pkObjecta;
        }
        v3->m_spVertProp.m_pObject = (NiVertexColorProperty *)v4;
        if ( v4 )
          InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
    }
    if ( !v3->m_spMatProp.m_pObject )
    {
      v6 = PgUtil::GetPropertyWithChild(v2, 3);
      v7 = v3->m_spMatProp.m_pObject;
      pkObjectb = v6;
      if ( (NiProperty *)v7 != v6 )
      {
        if ( v7 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v7 )
            v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
          v6 = pkObjectb;
        }
        v3->m_spMatProp.m_pObject = (NiMaterialProperty *)v6;
        if ( v6 )
          InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
    }
    PgUtil::RemovePropWithChild(v2, 9);
    PgUtil::RemovePropWithChild(v2, 3);
    NiAVObject::AttachProperty(v2, &v3->m_spVertProp.m_pObject->baseclass_0);
    NiAVObject::AttachProperty(v2, &v3->m_spMatProp.m_pObject->baseclass_0);
    NiAVObject::UpdateProperties(v2);
  }
}

//----- (00653920) --------------------------------------------------------
char __thiscall CharResMgr::GetResourcePath(CharResMgr *this, char *pResultPath, bool bNIFFile, const char *pcResourceName, char byGender, char kClassID)
{
  char v6; // bl@2
  char *v7; // eax@12
  char v8; // cl@13
  char v9; // dl@14
  char v10; // cl@15
  const char v11; // al@17
  char *v12; // edi@23
  char v13; // al@24
  char *v14; // edi@26
  char v15; // al@27
  unsigned int v16; // eax@36
  void *v17; // edi@36
  char v18; // cl@37
  void *v19; // edi@38
  const void *v20; // esi@38
  char v21; // cl@38
  char result; // al@38
  const char *v23; // [sp-Ch] [bp-68h]@30
  char *v24; // [sp-Ch] [bp-68h]@34
  const char *v25; // [sp-8h] [bp-64h]@34
  char byResultType; // [sp+17h] [bp-45h]@1
  char temp[64]; // [sp+18h] [bp-44h]@33
  unsigned int v28; // [sp+58h] [bp-4h]@1
  int v29; // [sp+5Ch] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  byResultType = 0;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v6 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v6 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v6 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v6 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v6 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v6 = 26;
      break;
    default:
      v6 = 0;
      break;
  }
  if ( *pcResourceName != 95 )
    goto LABEL_41;
  sprintf(pResultPath, "Common\\");
  if ( pcResourceName[1] == 67 )
  {
    byResultType = 1;
    goto LABEL_33;
  }
  v7 = pResultPath - 1;
  if ( byGender == 1 )
  {
    do
      v8 = (v7++)[1];
    while ( v8 );
    *(_WORD *)v7 = word_9C3FB4;
    v9 = byte_9C3FB6;
  }
  else
  {
    do
      v10 = (v7++)[1];
    while ( v10 );
    *(_WORD *)v7 = word_9C3FB8;
    v9 = byte_9C3FBA;
  }
  v7[2] = v9;
  v11 = pcResourceName[1];
  if ( v11 == 83 )
  {
    byResultType = 2;
    goto LABEL_33;
  }
  if ( v11 != 71 )
  {
LABEL_41:
    if ( byGender == 1 )
    {
      CharClass::GetBaseEngName(kClassID);
      v23 = "%s-m\\";
    }
    else
    {
      CharClass::GetBaseEngName(kClassID);
      v23 = "%s-f\\";
    }
    sprintf(pResultPath, v23);
  }
  else
  {
    byResultType = 3;
    if ( v6 == 1 || v6 == 6 || v6 == 21 )
    {
      v14 = pResultPath - 1;
      do
        v15 = (v14++)[1];
      while ( v15 );
      *(_DWORD *)v14 = dword_9C3FBC;
    }
    else
    {
      v12 = pResultPath - 1;
      do
        v13 = (v12++)[1];
      while ( v13 );
      *(_DWORD *)v12 = dword_9C3FC0;
    }
  }
LABEL_33:
  memset(temp, 0, 0x36u);
  if ( bNIFFile )
  {
    v25 = "%s.nif";
    v24 = temp;
  }
  else
  {
    v25 = "%s.dds";
    v24 = temp;
  }
  sprintf(v24, v25);
  v16 = strlen(temp) + 1;
  v17 = pResultPath - 1;
  do
  {
    v18 = *((_BYTE *)v17 + 1);
    v17 = (char *)v17 + 1;
  }
  while ( v18 );
  memcpy(v17, temp, 4 * (v16 >> 2));
  v20 = &temp[4 * (v16 >> 2)];
  v19 = (char *)v17 + 4 * (v16 >> 2);
  v21 = v16;
  result = byResultType;
  memcpy(v19, v20, v21 & 3);
  return result;
}
// 9C3FB4: using guessed type __int16 word_9C3FB4;
// 9C3FB6: using guessed type char byte_9C3FB6;
// 9C3FB8: using guessed type __int16 word_9C3FB8;
// 9C3FBA: using guessed type char byte_9C3FBA;
// 9C3FBC: using guessed type int dword_9C3FBC;
// 9C3FC0: using guessed type int dword_9C3FC0;
// A85C00: using guessed type int __security_cookie;

//----- (00653B50) --------------------------------------------------------
bool __thiscall CharResMgr::LoadCharSetRes(CharResMgr *this, char kClassID)
{
  int v2; // edi@2
  int v3; // ebx@2
  NiShaderLibrary *v4; // esi@2
  char v5; // al@7
  void *v6; // eax@14
  int v7; // edi@14
  char v8; // al@17
  char v9; // al@28
  NiObjectNET *v10; // eax@38
  NiNode *v11; // edi@38
  void *v12; // eax@39
  int v13; // eax@40
  int v14; // esi@40
  int v15; // edi@49
  NiShaderLibrary *v16; // esi@51
  char v17; // al@56
  void *v18; // eax@63
  int v19; // edi@63
  char v20; // al@66
  char v21; // al@77
  NiObjectNET *v22; // eax@87
  NiNode *v23; // edi@87
  void *v24; // eax@88
  int v25; // eax@89
  int v26; // esi@89
  int v27; // ebx@99
  NiShaderLibrary *v28; // esi@99
  char v29; // al@103
  NiObjectNET *v30; // eax@112
  NiNode *v31; // edi@112
  void *v32; // eax@113
  int v33; // eax@114
  int v34; // esi@114
  int v35; // ebx@124
  NiShaderLibrary *v36; // esi@124
  char v37; // al@128
  NiObjectNET *v38; // eax@137
  NiNode *v39; // edi@137
  void *v40; // eax@138
  int v41; // eax@139
  int v42; // esi@139
  int v43; // ebx@148
  NiShaderLibrary *v44; // esi@148
  char v45; // al@152
  NiObjectNET *v46; // eax@161
  NiNode *v47; // edi@161
  void *v48; // eax@162
  int v49; // eax@163
  int v50; // esi@163
  int v51; // ebx@171
  NiShaderLibrary *v52; // esi@171
  char v53; // al@175
  NiObjectNET *v54; // eax@184
  NiNode *v55; // edi@184
  void *v56; // eax@185
  int v57; // eax@186
  int v58; // esi@186
  char *v60; // [sp-24h] [bp-14Ch]@26
  char *v61; // [sp-24h] [bp-14Ch]@75
  const char *v62; // [sp-20h] [bp-148h]@26
  const char *v63; // [sp-20h] [bp-148h]@75
  NiPointer<PgWinBut> v64; // [sp-14h] [bp-13Ch]@26
  unsigned int v65; // [sp-10h] [bp-138h]@1
  int v66; // [sp+0h] [bp-128h]@1
  unsigned int key; // [sp+4h] [bp-124h]@39
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *thisa; // [sp+8h] [bp-120h]@1
  int i; // [sp+Ch] [bp-11Ch]@1
  NiPointer<NiShaderLibrary> val; // [sp+10h] [bp-118h]@2
  char acFileName[260]; // [sp+14h] [bp-114h]@26
  unsigned int v72; // [sp+118h] [bp-10h]@1
  int v73; // [sp+124h] [bp-4h]@2
  int v74; // [sp+128h] [bp+0h]@1

  v72 = (unsigned int)&v74 ^ __security_cookie;
  v65 = (unsigned int)&v74 ^ __security_cookie;
  i = 0;
  v66 = (unsigned __int8)kClassID << 24;
  thisa = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kCharSetMap;
  do
  {
    v2 = i;
    v3 = v66 | (unsigned __int16)i | 0x10000;
    val.m_pObject = 0;
    v73 = 0;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      thisa,
      (const char *)(v66 | (unsigned __int16)i | 0x10000),
      &val);
    v4 = val.m_pObject;
    v73 = -1;
    if ( val.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
        v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    else
    {
      if ( v2 )
      {
        switch ( kClassID )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v9 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v9 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v9 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v9 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v9 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v9 = 26;
            break;
          default:
            v9 = 0;
            break;
        }
        CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v9);
        if ( !Folder::m_bInit )
          Folder::Init();
        v64.m_pObject = (PgWinBut *)v2;
        v62 = "%s%s-m\\set%03d.nif";
        v60 = acFileName;
      }
      else
      {
        switch ( kClassID )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v5 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v5 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v5 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v5 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v5 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v5 = 26;
            break;
          default:
            v5 = 0;
            break;
        }
        v6 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
               (unsigned __int8)v5);
        v7 = (int)&byte_9788EB;
        if ( v6 )
          v7 = (int)((char *)v6 + 5);
        switch ( kClassID )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v8 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v8 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v8 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v8 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v8 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v8 = 26;
            break;
          default:
            v8 = 0;
            break;
        }
        CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v8);
        if ( !Folder::m_bInit )
          Folder::Init();
        v64.m_pObject = (PgWinBut *)v7;
        v62 = "%s%s-m\\%s-m.nif";
        v60 = acFileName;
      }
      sprintf(v60, v62);
      v10 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
      v11 = (NiNode *)v10;
      if ( v10 )
      {
        NiObjectNET::SetName(v10, "CharSet");
        v12 = operator new(0x34u);
        key = (unsigned int)v12;
        v73 = 1;
        if ( v12 )
        {
          CharSet::CharSet((CharSet *)v12);
          v14 = v13;
        }
        else
        {
          v14 = 0;
        }
        v73 = -1;
        if ( CharSet::Init((CharSet *)v14, v11) )
        {
          key = (unsigned int)&v64;
          v64.m_pObject = (PgWinBut *)v14;
          if ( v14 )
            InterlockedIncrement((volatile LONG *)(v14 + 4));
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
            v3,
            v64);
        }
        else
        {
          if ( v14 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
        }
      }
    }
    ++i;
  }
  while ( i < 5 );
  v15 = 0;
  for ( i = 0; ; v15 = i )
  {
    val.m_pObject = 0;
    key = v66 | (unsigned __int16)v15;
    v73 = 2;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      thisa,
      (const char *)(v66 | (unsigned __int16)v15),
      &val);
    v16 = val.m_pObject;
    v73 = -1;
    if ( val.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
        v16->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    }
    else
    {
      if ( v15 )
      {
        switch ( kClassID )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v21 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v21 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v21 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v21 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v21 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v21 = 26;
            break;
          default:
            v21 = 0;
            break;
        }
        CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v21);
        if ( !Folder::m_bInit )
          Folder::Init();
        v64.m_pObject = (PgWinBut *)v15;
        v63 = "%s%s-f\\set%03d.nif";
        v61 = acFileName;
      }
      else
      {
        switch ( kClassID )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v17 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v17 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v17 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v17 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v17 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v17 = 26;
            break;
          default:
            v17 = 0;
            break;
        }
        v18 = CDataReader::GetRecord(
                (CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4),
                (unsigned __int8)v17);
        v19 = (int)&byte_9788EB;
        if ( v18 )
          v19 = (int)((char *)v18 + 5);
        switch ( kClassID )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v20 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v20 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v20 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v20 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v20 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v20 = 26;
            break;
          default:
            v20 = 0;
            break;
        }
        CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v20);
        if ( !Folder::m_bInit )
          Folder::Init();
        v64.m_pObject = (PgWinBut *)v19;
        v63 = "%s%s-f\\%s-f.nif";
        v61 = acFileName;
      }
      sprintf(v61, v63);
      v22 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
      v23 = (NiNode *)v22;
      if ( v22 )
      {
        NiObjectNET::SetName(v22, "CharSet");
        v24 = operator new(0x34u);
        val.m_pObject = (NiShaderLibrary *)v24;
        v73 = 3;
        if ( v24 )
        {
          CharSet::CharSet((CharSet *)v24);
          v26 = v25;
        }
        else
        {
          v26 = 0;
        }
        v73 = -1;
        if ( CharSet::Init((CharSet *)v26, v23) )
        {
          val.m_pObject = (NiShaderLibrary *)&v64;
          v64.m_pObject = (PgWinBut *)v26;
          if ( v26 )
            InterlockedIncrement((volatile LONG *)(v26 + 4));
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
            key,
            v64);
        }
        else
        {
          if ( v26 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v26)(v26, 1);
        }
      }
    }
    ++i;
    if ( i >= 5 )
      break;
  }
  i = 10;
  do
  {
    val.m_pObject = 0;
    v27 = v66 | (unsigned __int16)i | 0x10000;
    v73 = 4;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      thisa,
      (const char *)(v66 | (unsigned __int16)i | 0x10000),
      &val);
    v28 = val.m_pObject;
    v73 = -1;
    if ( val.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
        v28->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
    }
    else
    {
      switch ( kClassID )
      {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
          v29 = 1;
          break;
        case 6:
        case 7:
        case 8:
        case 9:
        case 0xA:
          v29 = 6;
          break;
        case 0xB:
        case 0xC:
        case 0xD:
        case 0xE:
        case 0xF:
          v29 = 11;
          break;
        case 0x10:
        case 0x11:
        case 0x12:
        case 0x13:
        case 0x14:
          v29 = 16;
          break;
        case 0x15:
        case 0x16:
        case 0x17:
        case 0x18:
        case 0x19:
          v29 = 21;
          break;
        case 0x1A:
        case 0x1B:
          v29 = 26;
          break;
        default:
          v29 = 0;
          break;
      }
      CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v29);
      if ( !Folder::m_bInit )
        Folder::Init();
      v64.m_pObject = (PgWinBut *)i;
      sprintf(acFileName, "%s%s-m\\set%03d.nif");
      v30 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
      v31 = (NiNode *)v30;
      if ( v30 )
      {
        NiObjectNET::SetName(v30, "CharSet");
        v32 = operator new(0x34u);
        key = (unsigned int)v32;
        v73 = 5;
        if ( v32 )
        {
          CharSet::CharSet((CharSet *)v32);
          v34 = v33;
        }
        else
        {
          v34 = 0;
        }
        v73 = -1;
        if ( CharSet::Init((CharSet *)v34, v31) )
        {
          key = (unsigned int)&v64;
          v64.m_pObject = (PgWinBut *)v34;
          if ( v34 )
            InterlockedIncrement((volatile LONG *)(v34 + 4));
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
            v27,
            v64);
        }
        else
        {
          if ( v34 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v34)(v34, 1);
        }
      }
    }
    ++i;
  }
  while ( i < 23 );
  i = 10;
  do
  {
    v35 = v66 | (unsigned __int16)i;
    val.m_pObject = 0;
    v73 = 6;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      thisa,
      (const char *)(v66 | (unsigned __int16)i),
      &val);
    v36 = val.m_pObject;
    v73 = -1;
    if ( val.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
        v36->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
    }
    else
    {
      switch ( kClassID )
      {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
          v37 = 1;
          break;
        case 6:
        case 7:
        case 8:
        case 9:
        case 0xA:
          v37 = 6;
          break;
        case 0xB:
        case 0xC:
        case 0xD:
        case 0xE:
        case 0xF:
          v37 = 11;
          break;
        case 0x10:
        case 0x11:
        case 0x12:
        case 0x13:
        case 0x14:
          v37 = 16;
          break;
        case 0x15:
        case 0x16:
        case 0x17:
        case 0x18:
        case 0x19:
          v37 = 21;
          break;
        case 0x1A:
        case 0x1B:
          v37 = 26;
          break;
        default:
          v37 = 0;
          break;
      }
      CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v37);
      if ( !Folder::m_bInit )
        Folder::Init();
      v64.m_pObject = (PgWinBut *)i;
      sprintf(acFileName, "%s%s-f\\set%03d.nif");
      v38 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
      v39 = (NiNode *)v38;
      if ( v38 )
      {
        NiObjectNET::SetName(v38, "CharSet");
        v40 = operator new(0x34u);
        key = (unsigned int)v40;
        v73 = 7;
        if ( v40 )
        {
          CharSet::CharSet((CharSet *)v40);
          v42 = v41;
        }
        else
        {
          v42 = 0;
        }
        v73 = -1;
        if ( CharSet::Init((CharSet *)v42, v39) )
        {
          key = (unsigned int)&v64;
          v64.m_pObject = (PgWinBut *)v42;
          if ( v42 )
            InterlockedIncrement((volatile LONG *)(v42 + 4));
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
            v35,
            v64);
        }
        else
        {
          if ( v42 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v42)(v42, 1);
        }
      }
    }
    ++i;
  }
  while ( i < 20 );
  v43 = v66 | 0x100FF;
  val.m_pObject = 0;
  v73 = 8;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    thisa,
    (const char *)(v66 | 0x100FF),
    &val);
  v44 = val.m_pObject;
  v73 = -1;
  if ( val.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
      v44->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v44, 1u);
  }
  else
  {
    switch ( kClassID )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        v45 = 1;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        v45 = 6;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        v45 = 11;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        v45 = 16;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        v45 = 21;
        break;
      case 0x1A:
      case 0x1B:
        v45 = 26;
        break;
      default:
        v45 = 0;
        break;
    }
    CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v45);
    if ( !Folder::m_bInit )
      Folder::Init();
    v64.m_pObject = (PgWinBut *)255;
    sprintf(acFileName, "%s%s-m\\set%03d.nif");
    v46 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
    v47 = (NiNode *)v46;
    if ( v46 )
    {
      NiObjectNET::SetName(v46, "CharSet");
      v48 = operator new(0x34u);
      key = (unsigned int)v48;
      v73 = 9;
      if ( v48 )
      {
        CharSet::CharSet((CharSet *)v48);
        v50 = v49;
      }
      else
      {
        v50 = 0;
      }
      v73 = -1;
      if ( CharSet::Init((CharSet *)v50, v47) )
      {
        key = (unsigned int)&v64;
        v64.m_pObject = (PgWinBut *)v50;
        if ( v50 )
          InterlockedIncrement((volatile LONG *)(v50 + 4));
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
          (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
          v43,
          v64);
      }
      else
      {
        if ( v50 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v50)(v50, 1);
      }
    }
  }
  v51 = v66 | 0xFF;
  val.m_pObject = 0;
  v73 = 10;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(thisa, (const char *)(v66 | 0xFF), &val);
  v52 = val.m_pObject;
  v73 = -1;
  if ( val.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
      v52->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
  }
  else
  {
    switch ( kClassID )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        v53 = 1;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        v53 = 6;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        v53 = 11;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        v53 = 16;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        v53 = 21;
        break;
      case 0x1A:
      case 0x1B:
        v53 = 26;
        break;
      default:
        v53 = 0;
        break;
    }
    CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v53);
    if ( !Folder::m_bInit )
      Folder::Init();
    v64.m_pObject = (PgWinBut *)255;
    sprintf(acFileName, "%s%s-f\\set%03d.nif");
    v54 = (NiObjectNET *)PgUtil::LoadNifFile(acFileName, 0, 1);
    v55 = (NiNode *)v54;
    if ( v54 )
    {
      NiObjectNET::SetName(v54, "CharSet");
      v56 = operator new(0x34u);
      key = (unsigned int)v56;
      v73 = 11;
      if ( v56 )
      {
        CharSet::CharSet((CharSet *)v56);
        v58 = v57;
      }
      else
      {
        v58 = 0;
      }
      v73 = -1;
      if ( CharSet::Init((CharSet *)v58, v55) )
      {
        key = (unsigned int)&v64;
        v64.m_pObject = (PgWinBut *)v58;
        if ( v58 )
          InterlockedIncrement((volatile LONG *)(v58 + 4));
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
          (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
          v51,
          v64);
      }
      else
      {
        if ( v58 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v58)(v58, 1);
      }
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00654AB0) --------------------------------------------------------
bool __thiscall CharResMgr::LoadFaceTexture(CharResMgr *this, char kClassID)
{
  CharResMgr *v2; // edi@1
  char v3; // al@2
  void *v4; // eax@9
  NiShaderLibrary *v5; // ecx@9
  int v6; // eax@12
  signed int v7; // ebx@12
  int v8; // esi@14
  NiShaderLibrary *v9; // edi@14
  NiImageConverter *v10; // eax@19
  NiPixelData *v11; // eax@19
  NiObjectNET *v12; // eax@20
  NiObjectNET *v13; // edi@20
  signed int v14; // ebx@23
  int v15; // edi@24
  NiShaderLibrary *v16; // esi@24
  NiImageConverter *v17; // eax@29
  NiPixelData *v18; // eax@29
  NiObjectNET *v19; // eax@30
  NiObjectNET *v20; // esi@30
  NiPointer<PgWinBut> v22; // [sp-14h] [bp-150h]@19
  unsigned int v23; // [sp-10h] [bp-14Ch]@1
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-13Ch]@20
  int v25; // [sp+Ch] [bp-130h]@30
  int v26; // [sp+10h] [bp-12Ch]@30
  int v27; // [sp+14h] [bp-128h]@30
  int v28; // [sp+18h] [bp-124h]@12
  char *v29; // [sp+1Ch] [bp-120h]@10
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *thisa; // [sp+20h] [bp-11Ch]@12
  NiPointer<NiShaderLibrary> val; // [sp+24h] [bp-118h]@14
  char acFileName[260]; // [sp+28h] [bp-114h]@19
  unsigned int v33; // [sp+12Ch] [bp-10h]@1
  int v34; // [sp+138h] [bp-4h]@14
  int v35; // [sp+13Ch] [bp+0h]@1

  v33 = (unsigned int)&v35 ^ __security_cookie;
  v23 = (unsigned int)&v35 ^ __security_cookie;
  v2 = this;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v3 = 26;
      break;
    default:
      v3 = 0;
      break;
  }
  v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v3);
  v5 = 0;
  if ( v4 )
    v29 = (char *)v4 + 5;
  else
    v29 = &byte_9788EB;
  v6 = (unsigned __int8)kClassID << 24;
  v7 = 0;
  v28 = (unsigned __int8)kClassID << 24;
  thisa = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&v2->m_kFaceTextureMap;
  while ( 1 )
  {
    v8 = v6 | (unsigned __int16)v7 | 0x10000;
    val.m_pObject = v5;
    v34 = (int)v5;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      thisa,
      (const char *)(v6 | (unsigned __int16)v7 | 0x10000),
      &val);
    v9 = val.m_pObject;
    v34 = -1;
    if ( val.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
        v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v22.m_pObject = (PgWinBut *)v7++;
      sprintf(acFileName, "%s%s-m\\%s-m-face%03d.dds");
      v10 = NiImageConverter::GetImageConverter();
      v11 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v10->baseclass_0.vfptr[2].__vecDelDtor)(
                             v10,
                             acFileName,
                             0);
      if ( v11 )
      {
        kPrefs.m_ePixelLayout = 6;
        kPrefs.m_eAlphaFmt = 3;
        kPrefs.m_eMipMapped = 0;
        v12 = (NiObjectNET *)NiSourceTexture::Create(v11, &kPrefs);
        v13 = v12;
        if ( v12 )
        {
          NiObjectNET::SetName(v12, "FaceTexture");
          v22.m_pObject = (PgWinBut *)v13;
          val.m_pObject = (NiShaderLibrary *)&v22;
          InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.m_uiRefCount);
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
            v8,
            v22);
        }
      }
    }
    if ( v7 >= 16 )
      break;
    v6 = v28;
    v5 = 0;
  }
  v14 = 0;
  do
  {
    v15 = v28 | (unsigned __int16)v14;
    val.m_pObject = 0;
    v34 = 1;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      thisa,
      (const char *)(v28 | (unsigned __int16)v14),
      &val);
    v16 = val.m_pObject;
    v34 = -1;
    if ( val.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
        v16->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v22.m_pObject = (PgWinBut *)v14;
      sprintf(acFileName, "%s%s-f\\%s-f-face%03d.dds");
      v17 = NiImageConverter::GetImageConverter();
      v18 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v17->baseclass_0.vfptr[2].__vecDelDtor)(
                             v17,
                             acFileName,
                             0);
      if ( v18 )
      {
        v25 = 6;
        v26 = 3;
        v27 = 0;
        v19 = (NiObjectNET *)NiSourceTexture::Create(v18, (NiTexture::FormatPrefs *)&v25);
        v20 = v19;
        if ( v19 )
        {
          NiObjectNET::SetName(v19, "FaceTexture");
          v22.m_pObject = (PgWinBut *)v20;
          val.m_pObject = (NiShaderLibrary *)&v22;
          InterlockedIncrement((volatile LONG *)&v20->baseclass_0.baseclass_0.m_uiRefCount);
          NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
            (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
            v15,
            v22);
        }
      }
    }
    ++v14;
  }
  while ( v14 < 16 );
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00654E20) --------------------------------------------------------
bool __thiscall CharResMgr::PreLoadItemUgradeTextureEffects(CharResMgr *this)
{
  signed int v1; // ebx@1
  NiShaderLibrary *v2; // edi@2
  NiNode *v3; // eax@7
  NiPointer<PgWinBut> v5; // [sp-14h] [bp-130h]@7
  unsigned int v6; // [sp-10h] [bp-12Ch]@1
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *thisa; // [sp+0h] [bp-11Ch]@1
  NiPointer<NiShaderLibrary> val; // [sp+4h] [bp-118h]@2
  char pcFileName; // [sp+8h] [bp-114h]@7
  unsigned int v10; // [sp+10Ch] [bp-10h]@1
  int v11; // [sp+118h] [bp-4h]@2
  int v12; // [sp+11Ch] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v6 = (unsigned int)&v12 ^ __security_cookie;
  v1 = 2;
  thisa = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kDropItemMap;
  do
  {
    val.m_pObject = 0;
    v11 = 0;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      thisa,
      (const char *)(unsigned __int8)v1,
      &val);
    v2 = val.m_pObject;
    v11 = -1;
    if ( val.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&val.m_pObject->baseclass_0.m_uiRefCount) )
        v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v5.m_pObject = (PgWinBut *)(unsigned __int8)v1;
      sprintf(&pcFileName, "%sUpgradeTexEff%02u.nif");
      v3 = PgUtil::LoadNifFile(&pcFileName, 0, 1);
      if ( v3 )
      {
        v5.m_pObject = (PgWinBut *)v3;
        val.m_pObject = (NiShaderLibrary *)&v5;
        InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
          (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)thisa,
          (unsigned __int8)v1,
          v5);
      }
    }
    ++v1;
  }
  while ( v1 < 6 );
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00654F30) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetSetTexture(CharResMgr *this, char kClassID, char byGender, unsigned __int16 kItemID)
{
  char v4; // bl@2
  int v5; // esi@9
  int v6; // edx@11
  int v7; // eax@12
  NiSourceTexture *result; // eax@13
  char v9; // di@14
  int v10; // eax@14
  int v11; // eax@15
  NiObjectNET *v12; // eax@25
  NiSourceTexture *v13; // esi@25
  CharResMgr *thisa; // [sp+10h] [bp-218h]@1
  char v15; // [sp+18h] [bp-210h]@9
  char acPath[260]; // [sp+1Ch] [bp-20Ch]@14
  char acFileName[260]; // [sp+120h] [bp-108h]@25
  unsigned int v18; // [sp+224h] [bp-4h]@1
  int v19; // [sp+228h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  thisa = this;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v4 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v4 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v4 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v4 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v4 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v4 = 26;
      break;
    default:
      v4 = 0;
      break;
  }
  v5 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  v15 = v4;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                           kItemID)
    || kItemID > *(_WORD *)(v5 + 200)
    || (v6 = *(_DWORD *)(v5 + 196), !*(_DWORD *)(v6 + 4 * kItemID))
    || (v7 = *(_DWORD *)(v6 + 4 * kItemID)) == 0 )
    return 0;
  v9 = byGender;
  v10 = (unsigned __int8)CharResMgr::GetResourcePath(thisa, acPath, 0, (const char *)(v7 + 202), byGender, v4) - 1;
  if ( !v10 )
  {
    v9 = 0;
    goto LABEL_21;
  }
  v11 = v10 - 1;
  if ( !v11 )
  {
LABEL_21:
    v15 = 0;
    goto LABEL_22;
  }
  if ( v11 == 1 )
  {
    switch ( v4 )
    {
      default:
        v15 = 11;
        break;
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
      case 0x1A:
      case 0x1B:
        v15 = 1;
        break;
    }
  }
LABEL_22:
  result = CharResMgr::GetSetTextureFromMap(thisa, v15, v9, kItemID);
  if ( !result )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acFileName, "%s%s");
    v12 = (NiObjectNET *)PgUtil::LoadSourceTexture(acFileName);
    v13 = (NiSourceTexture *)v12;
    if ( !v12 )
      return 0;
    NiObjectNET::SetName(v12, "SetTexture");
    CharResMgr::AddSetTextureToMap(thisa, v13, v15, v9, kItemID);
    result = v13;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00655180) --------------------------------------------------------
bool __thiscall CharResMgr::LoadAllCharSetRes(CharResMgr *this)
{
  CharResMgr *v1; // esi@1
  bool result; // al@2

  v1 = this;
  if ( CharResMgr::LoadCharSetRes(this, 1)
    && CharResMgr::LoadCharSetRes(v1, 6)
    && CharResMgr::LoadCharSetRes(v1, 11)
    && CharResMgr::LoadCharSetRes(v1, 16)
    && CharResMgr::LoadCharSetRes(v1, 21) )
    result = CharResMgr::LoadCharSetRes(v1, 26) != 0;
  else
    result = 0;
  return result;
}

//----- (006551E0) --------------------------------------------------------
bool __thiscall CharResMgr::LoadAllFaceTexture(CharResMgr *this)
{
  CharResMgr *v1; // esi@1
  bool result; // al@2

  v1 = this;
  if ( CharResMgr::LoadFaceTexture(this, 1)
    && CharResMgr::LoadFaceTexture(v1, 6)
    && CharResMgr::LoadFaceTexture(v1, 11)
    && CharResMgr::LoadFaceTexture(v1, 16)
    && CharResMgr::LoadFaceTexture(v1, 21) )
    result = CharResMgr::LoadFaceTexture(v1, 26) != 0;
  else
    result = 0;
  return result;
}

//----- (00655240) --------------------------------------------------------
NiControllerSequence *__thiscall CharResMgr::GetControllerSequence(CharResMgr *this, char kClassID, char byGender, unsigned int dwAniEventCode)
{
  CharResMgr *v4; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *v5; // eax@9
  int v6; // esi@9
  NiControllerSequence *result; // eax@10
  int v8; // eax@11

  v4 = this;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      kClassID = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      kClassID = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      kClassID = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      kClassID = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      kClassID = 21;
      break;
    case 0x1A:
    case 0x1B:
      kClassID = 26;
      break;
    default:
      kClassID = 0;
      break;
  }
  *(_DWORD *)&kClassID = CharResMgr::GetCharActorFromMap_NoClone(this, kClassID, byGender);
  v5 = std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::find(
         &v4->m_kKfMap.baseclass_0,
         (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *)&byGender,
         (NiActorManager *const *)&kClassID);
  v6 = *(_DWORD *)&v5->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_DWORD *)&v5->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == *((_DWORD *)&v4->m_kKfMap.baseclass_0.baseclass_0
                                                                                         + 1)
    || (v8 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                           (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)(v6 + 16),
                           (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&kClassID,
                           &dwAniEventCode)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0],
        v8 == *(_DWORD *)(v6 + 20)) )
    result = 0;
  else
    result = (NiControllerSequence *)NiObject::Clone(*(NiObject **)(v8 + 16));
  return result;
}

//----- (00655350) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetMoverActor(CharResMgr *this, unsigned int kMoverID)
{
  NiActorManager *result; // eax@1
  MoverMain *v3; // eax@2
  MoverView *v4; // edi@3
  const char *v5; // edi@9
  NiSourceTexture *v6; // eax@9
  NiSourceTexture *v7; // esi@9
  NiNode *v8; // eax@18
  NiActorManager *v9; // esi@20
  NiActorManager *v10; // esi@20
  ResetTexture kResetTexture; // [sp+0h] [bp-130h]@19
  CharResMgr *thisa; // [sp+Ch] [bp-124h]@1
  unsigned int v13; // [sp+10h] [bp-120h]@1
  NiActorManager *pkActor; // [sp+14h] [bp-11Ch]@6
  NiPointer<NiSourceTexture> spTexture; // [sp+18h] [bp-118h]@9
  char acFileName[260]; // [sp+1Ch] [bp-114h]@6
  unsigned int v17; // [sp+120h] [bp-10h]@1
  int v18; // [sp+12Ch] [bp-4h]@11
  int v19; // [sp+130h] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  thisa = this;
  v13 = kMoverID;
  result = CharResMgr::GetMoverActorFromMap(this, kMoverID);
  if ( !result )
  {
    v3 = MoverMainTab::GetByMoverID(kMoverID);
    if ( !v3 || (v4 = MoverViewTab::GetByMoverIdx(v3->MoverIDX)) == 0 )
      goto LABEL_24;
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acFileName, "%s%s\\%s.kfm");
    pkActor = NiActorManager::Create(acFileName, 0, 1, 0);
    if ( pkActor )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v5 = v4->Texture;
      sprintf(acFileName, "%s%s\\%s.dds");
      v6 = NiSourceTexture::Create(acFileName, &NiSourceTexture::ms_kDefaultPrefs, 0);
      v7 = v6;
      spTexture.m_pObject = v6;
      if ( v6 )
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v18 = 0;
      if ( strcmp(v5, "-") && strcmp(v5, (const char *)&unk_9C3B5F) )
      {
        if ( v7 )
        {
          v8 = (NiNode *)pkActor->m_spNIFRoot.m_pObject;
          if ( v8 )
          {
            kResetTexture.baseclass_0.m_pCallBack = 0;
            kResetTexture.baseclass_0.m_nCurLevel = -1;
            kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
            LOBYTE(v18) = 1;
            Ns_TourScene::TourScene(&kResetTexture.baseclass_0, v8, &NiAVObject::m_RTTI, v7);
            LOBYTE(v18) = 0;
            kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
          }
        }
      }
      else
      {
        if ( v7 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
          spTexture.m_pObject = 0;
        }
      }
      v9 = pkActor;
      CharResMgr::AddMoverActorToMap(thisa, pkActor, v13);
      NiObjectNET::ms_eCopyType = 1;
      v10 = NiActorManager::Clone(v9);
      v18 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexture);
      result = v10;
    }
    else
    {
LABEL_24:
      result = 0;
    }
  }
  return result;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (006555A0) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetPetActor(CharResMgr *this, unsigned int kPetID)
{
  NiActorManager *result; // eax@1
  PupMain *v3; // eax@2
  PupView *v4; // esi@3
  NiActorManager *v5; // eax@6
  NiAVObject *v6; // ecx@7
  const char *v7; // esi@8
  char *v8; // eax@8
  NiSourceTexture *v9; // edi@8
  ResetTexture kResetTexture; // [sp+0h] [bp-134h]@17
  CharResMgr *thisa; // [sp+Ch] [bp-128h]@1
  NiNode *pkRoot; // [sp+10h] [bp-124h]@7
  unsigned int v13; // [sp+14h] [bp-120h]@1
  NiActorManager *pkActor; // [sp+18h] [bp-11Ch]@6
  NiPointer<NiSourceTexture> spTexture; // [sp+1Ch] [bp-118h]@8
  char acFileName[260]; // [sp+20h] [bp-114h]@6
  unsigned int v17; // [sp+124h] [bp-10h]@1
  int v18; // [sp+130h] [bp-4h]@10
  int v19; // [sp+134h] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  thisa = this;
  v13 = kPetID;
  result = CharResMgr::GetPetActorFromMap(this, kPetID);
  if ( !result )
  {
    v3 = PetMainTab::GetByPetID(kPetID);
    if ( !v3 || (v4 = PetViewTab::GetByPetIdx(v3->PupIDX)) == 0 )
      goto LABEL_23;
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acFileName, "%s%s\\%s.kfm");
    v5 = NiActorManager::Create(acFileName, 0, 1, 0);
    pkActor = v5;
    if ( v5 )
    {
      v6 = v5->m_spNIFRoot.m_pObject;
      pkRoot = (NiNode *)v6;
      if ( v6 )
      {
        spTexture.m_pObject = (NiSourceTexture *)v4->PupSize;
        v7 = v4->Texture;
        *(float *)&spTexture.m_pObject = (double)(signed int)spTexture.m_pObject / 1000.0;
        *(float *)&spTexture.m_pObject = fabs(*(float *)&spTexture.m_pObject);
        v6->m_kLocal.m_fScale = *(float *)&spTexture.m_pObject;
        Folder::Character();
        v8 = fs("%s%s\\%s.dds");
        v9 = NiSourceTexture::Create(v8, &NiSourceTexture::ms_kDefaultPrefs, 0);
        spTexture.m_pObject = v9;
        if ( v9 )
          InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v18 = 0;
        if ( strcmp(v7, "-") && strcmp(v7, (const char *)&unk_9C3B7D) )
        {
          if ( v9 )
          {
            kResetTexture.baseclass_0.m_pCallBack = 0;
            kResetTexture.baseclass_0.m_nCurLevel = -1;
            kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
            LOBYTE(v18) = 1;
            Ns_TourScene::TourScene(&kResetTexture.baseclass_0, pkRoot, &NiAVObject::m_RTTI, v9);
            kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
          }
        }
        else
        {
          if ( v9 )
          {
            if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
              v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
            *(float *)&spTexture.m_pObject = 0.0;
          }
        }
        v18 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexture);
        v5 = pkActor;
      }
      CharResMgr::AddPetActorToMap(thisa, v5, v13);
      NiObjectNET::ms_eCopyType = 1;
      result = NiActorManager::Clone(pkActor);
    }
    else
    {
LABEL_23:
      result = 0;
    }
  }
  return result;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00655820) --------------------------------------------------------
NiTexture *__thiscall CharResMgr::GetHairBaseTexFromMap(CharResMgr *this, HairInfo *pkHairInfo, char kClassID, char byGender, unsigned int uiType)
{
  CharResMgr *v5; // esi@1
  const char *v6; // edi@2
  char acPath[260]; // [sp+8h] [bp-108h]@1
  unsigned int v9; // [sp+10Ch] [bp-4h]@1
  int v10; // [sp+110h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v5 = this;
  acPath[0] = 0;
  memset(&acPath[1], 0, 0x103u);
  switch ( uiType )
  {
    case 1u:
      v6 = pkHairInfo->FrontTex;
      goto LABEL_8;
    case 2u:
      v6 = pkHairInfo->BottomTex;
      goto LABEL_8;
    case 3u:
      v6 = pkHairInfo->TopTex;
      goto LABEL_8;
    case 4u:
      v6 = pkHairInfo->Acc1Tex;
      goto LABEL_8;
    case 5u:
      v6 = pkHairInfo->Acc2Tex;
      goto LABEL_8;
    case 6u:
      v6 = pkHairInfo->Acc3Tex;
LABEL_8:
      CharResMgr::GetResourcePath(v5, acPath, 0, v6, byGender, kClassID);
      break;
    default:
      return CharResMgr::GetHairTextureFromMap(v5, acPath);
  }
  return CharResMgr::GetHairTextureFromMap(v5, acPath);
}
// A85C00: using guessed type int __security_cookie;

//----- (006558F0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllItem(CharResMgr *this)
{
  CharResMgr *v1; // edi@1

  v1 = this;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kItemMap);
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *)&v1->m_kSubItemMap,
    *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0
                                                                                 + 1);
  **((_DWORD **)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0
                                                                  + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0
                                                                                 + 1);
  *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 2) = 0;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
    &v1->m_kSubItemTextureMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0
                                                                                        + 1);
  **((_DWORD **)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0
                                                                         + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0
                                                                                        + 1);
  *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 2) = 0;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
    &v1->m_kItemTextureMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  **((_DWORD **)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0
                                                                      + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 2) = 0;
}

//----- (006559B0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllHairTexture(CharResMgr *this)
{
  char *v1; // esi@1

  v1 = (char *)&this->m_kHairTextureMap;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
    &this->m_kHairTextureMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(*((_DWORD *)&this->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4) = *((_DWORD *)v1 + 1);
  **((_DWORD **)v1 + 1) = *((_DWORD *)v1 + 1);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 8) = *((_DWORD *)v1 + 1);
  *((_DWORD *)v1 + 2) = 0;
}

//----- (006559F0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllHouse(CharResMgr *this)
{
  CharResMgr *v1; // esi@1

  v1 = this;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kHouseMap);
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
    &v1->m_kMiniHouseTextureMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                                          + 1);
  **((_DWORD **)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                           + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                                          + 1);
  *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 2) = 0;
}

//----- (00655A40) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetHouse(CharResMgr *this, unsigned int dwHouse)
{
  CharResMgr *v2; // esi@1
  NiNode *result; // eax@1
  MiniHouse *v4; // eax@2
  unsigned __int16 *v5; // eax@3
  ItemViewInfo *v6; // ebx@4
  NiNode *v7; // edi@7
  const char *v8; // ebx@8
  NiNode *v9; // eax@10
  NiTexture *v10; // esi@10
  NiTexture *v11; // eax@11
  NiNode *v12; // eax@16
  NiObject *v13; // esi@19
  NiNode *v14; // edi@22
  int v15; // [sp-14h] [bp-250h]@7
  unsigned int v16; // [sp-10h] [bp-24Ch]@1
  int (__stdcall **v17)(int, int); // [sp+0h] [bp-23Ch]@16
  int v18; // [sp+4h] [bp-238h]@16
  int v19; // [sp+8h] [bp-234h]@16
  ResetTexture kResetTexture; // [sp+Ch] [bp-230h]@10
  CharResMgr *thisa; // [sp+18h] [bp-224h]@1
  unsigned int dwHouseID; // [sp+1Ch] [bp-220h]@1
  NiPointer<NiTexture> spSubItemTexture; // [sp+20h] [bp-21Ch]@13
  char szFileName[260]; // [sp+24h] [bp-218h]@11
  char acFileName[260]; // [sp+128h] [bp-114h]@7
  unsigned int v26; // [sp+22Ch] [bp-10h]@1
  int v27; // [sp+238h] [bp-4h]@10
  int v28; // [sp+23Ch] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v16 = (unsigned int)&v28 ^ __security_cookie;
  v2 = this;
  thisa = this;
  dwHouseID = dwHouse;
  result = CharResMgr::GetHouseFromMap(this, dwHouse);
  if ( result )
    return result;
  v4 = MiniHouseTable::GetByHandle(dwHouse);
  if ( !v4
    || (v5 = (unsigned __int16 *)ItemInfoTab::GetByInxName(v4->ItemID)) == 0
    || (v6 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(*v5, 1)) == 0 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v15 = (int)"mushroom";
    sprintf(acFileName, "%s\\MiniHouse\\%s.nif");
    v14 = PgUtil::LoadNifFile(acFileName, 0, 1);
    if ( v14 )
    {
      spSubItemTexture.m_pObject = (NiTexture *)&v15;
      v15 = (int)v14;
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kHouseMap,
        0,
        (NiPointer<PgWinBut>)v15);
      return (NiNode *)NiObject::Clone(&v14->baseclass_0.baseclass_0.baseclass_0);
    }
    return 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v15 = (int)v6->LinkFile;
  sprintf(acFileName, "%s\\MiniHouse\\%s.nif");
  v7 = PgUtil::LoadNifFile(acFileName, 0, 1);
  if ( !v7 )
    return 0;
  v8 = v6->TextureFile;
  if ( _mbscmp(v8, "-") )
  {
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    v27 = 0;
    v9 = (NiNode *)NiNode::GetAt(v7, 0);
    Ns_TourScene::TourScene(&kResetTexture.baseclass_0, v9, &NiAVObject::m_RTTI, 0);
    NiObjectNET::ms_eCopyType = 1;
    v10 = CharResMgr::GetMiniHouseTextureMap(v2, v8);
    if ( !v10 )
    {
      v15 = (int)v8;
      Folder::Character();
      sprintf(szFileName, "%s\\MiniHouse\\%s.dds");
      v11 = (NiTexture *)PgUtil::LoadSourceTexture(szFileName);
      v10 = v11;
      if ( v11 )
        CharResMgr::AddMiniHouseTextureToMap(thisa, v11, v8);
    }
    spSubItemTexture.m_pObject = v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v27) = 1;
    if ( v10 )
    {
      v18 = 0;
      v19 = -1;
      v17 = &ResetTexture::_vftable_;
      LOBYTE(v27) = 2;
      v12 = (NiNode *)NiNode::GetAt(v7, 0);
      if ( v12 )
        Ns_TourScene::TourScene((Ns_TourScene *)&v17, v12, &NiAVObject::m_RTTI, v10);
      LOBYTE(v27) = 1;
    }
    CharResMgr::AddHouseToMap(thisa, v7, dwHouseID);
    v13 = NiObject::Clone(&v7->baseclass_0.baseclass_0.baseclass_0);
    LOBYTE(v27) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spSubItemTexture);
    result = (NiNode *)v13;
  }
  else
  {
    CharResMgr::AddHouseToMap(v2, v7, dwHouseID);
    result = (NiNode *)NiObject::Clone(&v7->baseclass_0.baseclass_0.baseclass_0);
  }
  return result;
}
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00655CF0) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetHair(CharResMgr *this, char kClassID, char byGender, char byHairIndexID, char byPartsNum, const char *pchModelName, const char *pchTexName)
{
  char v7; // bl@1
  CharResMgr *v8; // edi@1
  int v9; // eax@1
  int v10; // eax@2
  char v11; // bl@12
  void *v12; // esi@19
  NiNode *v13; // eax@20
  NiNode *v14; // edi@20
  int v15; // edx@23
  int v16; // esi@23
  NiTexture *v17; // ebx@28
  NiSourceTexture *v18; // edi@28
  NiImageConverter *v19; // eax@31
  NiPixelData *v20; // eax@31
  bool v21; // zf@41
  NiNode *v22; // eax@42
  NiPointer<PgWinBut> v24; // [sp-14h] [bp-254h]@11
  unsigned int v25; // [sp-10h] [bp-250h]@1
  NiPointer<NiSourceTexture> spTexture; // [sp+0h] [bp-240h]@20
  char byID[4]; // [sp+4h] [bp-23Ch]@1
  ResetTexture kResetTexture; // [sp+8h] [bp-238h]@32
  NiPointer<NiTexture> spSubItemTexture; // [sp+14h] [bp-22Ch]@1
  NiPointer<PgWinBut> *v30; // [sp+18h] [bp-228h]@1
  CharResMgr *thisa; // [sp+1Ch] [bp-224h]@1
  int v32; // [sp+20h] [bp-220h]@1
  int v33; // [sp+24h] [bp-21Ch]@1
  char acFileName[260]; // [sp+28h] [bp-218h]@11
  char acPath[260]; // [sp+12Ch] [bp-114h]@1
  unsigned int v36; // [sp+230h] [bp-10h]@1
  int v37; // [sp+23Ch] [bp-4h]@22
  int v38; // [sp+240h] [bp+0h]@1

  v36 = (unsigned int)&v38 ^ __security_cookie;
  v25 = (unsigned int)&v38 ^ __security_cookie;
  v7 = kClassID;
  v8 = this;
  byID[0] = byHairIndexID;
  LOBYTE(v30) = byPartsNum;
  LOBYTE(v33) = kClassID;
  LOBYTE(v32) = byGender;
  spSubItemTexture.m_pObject = (NiTexture *)pchTexName;
  thisa = this;
  v9 = (unsigned __int8)CharResMgr::GetResourcePath(this, acPath, 1, pchModelName, byGender, kClassID) - 1;
  if ( v9 )
  {
    v10 = v9 - 1;
    if ( v10 )
    {
      if ( v10 == 1 )
      {
        switch ( kClassID )
        {
          default:
            v7 = 11;
            break;
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
          case 0x1A:
          case 0x1B:
            v7 = 1;
            break;
        }
      }
    }
    else
    {
      v7 = 0;
    }
  }
  else
  {
    v7 = 0;
    LOBYTE(v32) = 0;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v24.m_pObject = (PgWinBut *)acPath;
  sprintf(acFileName, "%s%s");
  switch ( v7 )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v11 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v11 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v11 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v11 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v11 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v11 = 26;
      break;
    default:
      v11 = 0;
      break;
  }
  LOBYTE(v33) = v11;
  v12 = CharResMgr::GetHairFromMap(v8, v11, v32, byID[0], (char)v30);
  if ( !v12 )
  {
    v13 = PgUtil::LoadNifFile(acFileName, 0, 1);
    v14 = v13;
    spTexture.m_pObject = (NiSourceTexture *)v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v37 = 0;
    if ( !v14 )
      return 0;
    NiObjectNET::SetName(&v14->baseclass_0.baseclass_0, "Hair");
    v15 = (unsigned __int8)v30;
    v30 = &v24;
    v16 = v15 | (((unsigned __int8)byID[0] | (((unsigned __int8)v32 | ((unsigned __int8)v11 << 8)) << 8)) << 8);
    v24.m_pObject = (PgWinBut *)v14;
    InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&thisa->m_kHairMap,
      v16,
      v24);
    NiObjectNET::ms_eCopyType = 1;
    v12 = NiObject::Clone(&v14->baseclass_0.baseclass_0.baseclass_0);
    v37 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    v8 = thisa;
  }
  memset(acFileName, 0, 0x104u);
  memset(acPath, 0, 0x104u);
  CharResMgr::GetResourcePath(v8, acPath, 0, (const char *)spSubItemTexture.m_pObject, v32, v33);
  if ( !Folder::m_bInit )
    Folder::Init();
  v24.m_pObject = (PgWinBut *)acPath;
  sprintf(acFileName, "%s%s");
  v17 = CharResMgr::GetHairTextureFromMap(v8, acPath);
  v18 = 0;
  spSubItemTexture.m_pObject = v17;
  if ( v17 )
    InterlockedIncrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v37 = 1;
  if ( v17 )
    goto LABEL_53;
  v19 = NiImageConverter::GetImageConverter();
  v20 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v19->baseclass_0.vfptr[2].__vecDelDtor)(
                         v19,
                         acFileName,
                         0);
  if ( v20 )
  {
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)6;
    kResetTexture.baseclass_0.m_pCallBack = (Ns_TourScene::TS_RESULT (__cdecl *)(NiAVObject *, void *))3;
    kResetTexture.baseclass_0.m_nCurLevel = 0;
    v18 = NiSourceTexture::Create(v20, (NiTexture::FormatPrefs *)&kResetTexture);
  }
  spTexture.m_pObject = v18;
  if ( v18 )
    InterlockedIncrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  LOBYTE(v37) = 2;
  if ( v18 )
  {
    CharResMgr::AddHairTextureToMap(thisa, &v18->baseclass_0, acPath);
    v17 = (NiTexture *)v18;
    spSubItemTexture.m_pObject = (NiTexture *)v18;
    InterlockedIncrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  LOBYTE(v37) = 1;
  if ( v18 && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
  if ( v17 )
  {
LABEL_53:
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    v21 = *((_DWORD *)v12 + 47) == 0;
    LOBYTE(v37) = 3;
    if ( !v21 )
    {
      v22 = (NiNode *)**((_DWORD **)v12 + 45);
      if ( v22 )
        Ns_TourScene::TourScene(&kResetTexture.baseclass_0, v22, &NiAVObject::m_RTTI, v17);
    }
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  }
  v37 = -1;
  if ( v17 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v17->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
  }
  return (NiNode *)v12;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00656190) --------------------------------------------------------
void __thiscall CharResMgr::SetHairTexture2TargetNode(CharResMgr *this, NiNode *pkTargetNode, char byGender, char kClassID, const char *pchTexName)
{
  NiTexture *v5; // edi@3
  NiImageConverter *v6; // eax@6
  NiPixelData *v7; // eax@6
  NiSourceTexture *v8; // esi@7
  ResetTexture kResetTexture; // [sp+Ch] [bp-224h]@8
  char acFileName[260]; // [sp+18h] [bp-218h]@1
  char acPath[260]; // [sp+11Ch] [bp-114h]@1
  unsigned int v12; // [sp+220h] [bp-10h]@1
  int v13; // [sp+22Ch] [bp-4h]@5
  int v14; // [sp+230h] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  memset(acFileName, 0, 0x104u);
  memset(acPath, 0, 0x104u);
  CharResMgr::GetResourcePath(&g_kCharResMgr, acPath, 0, pchTexName, byGender, kClassID);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  v5 = CharResMgr::GetHairTextureFromMap(&g_kCharResMgr, acPath);
  if ( v5 )
    InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v13 = 0;
  if ( v5 )
    goto LABEL_23;
  v6 = NiImageConverter::GetImageConverter();
  v7 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v6->baseclass_0.vfptr[2].__vecDelDtor)(
                        v6,
                        acFileName,
                        0);
  if ( v7 )
  {
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)6;
    kResetTexture.baseclass_0.m_pCallBack = (Ns_TourScene::TS_RESULT (__cdecl *)(NiAVObject *, void *))3;
    kResetTexture.baseclass_0.m_nCurLevel = 0;
    v8 = NiSourceTexture::Create(v7, (NiTexture::FormatPrefs *)&kResetTexture);
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  LOBYTE(v13) = 1;
  if ( v8 )
  {
    CharResMgr::AddHairTextureToMap(&g_kCharResMgr, &v8->baseclass_0, acPath);
    v5 = (NiTexture *)v8;
    InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  LOBYTE(v13) = 0;
  if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  if ( v5 )
  {
LABEL_23:
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    LOBYTE(v13) = 2;
    Ns_TourScene::TourScene(&kResetTexture.baseclass_0, pkTargetNode, &NiAVObject::m_RTTI, v5);
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  }
  v13 = -1;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  }
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006563A0) --------------------------------------------------------
NiTexture *__thiscall CharResMgr::GetItemTexture(CharResMgr *this, const char *szName, char byPathRuleType)
{
  CharResMgr *v3; // edi@1
  NiTexture *result; // eax@1
  NiImageConverter *v5; // eax@18
  NiPixelData *v6; // eax@18
  NiTexture *v7; // esi@19
  NiTexture *v8; // eax@20
  char *v9; // [sp-10h] [bp-330h]@10
  const char *v10; // [sp-Ch] [bp-32Ch]@6
  NiTexture::FormatPrefs kPrefs; // [sp+Ch] [bp-314h]@20
  char strKey[512]; // [sp+18h] [bp-308h]@1
  char szFileName[260]; // [sp+218h] [bp-108h]@10
  unsigned int v14; // [sp+31Ch] [bp-4h]@1
  int v15; // [sp+320h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v3 = this;
  sprintf(strKey, "%d_%s");
  result = CharResMgr::GetItemTextureMap(v3, strKey);
  if ( result )
    return result;
  if ( byPathRuleType == -1 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v10 = "%s%s.dds";
  }
  else
  {
    if ( *szName != 95 )
    {
      if ( byPathRuleType )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v10 = "%sMale\\%s.dds";
        v9 = szFileName;
      }
      else
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v10 = "%sFemale\\%s.dds";
        v9 = szFileName;
      }
      goto LABEL_18;
    }
    if ( !Folder::m_bInit )
      Folder::Init();
    v10 = "%s%s.dds";
  }
  v9 = szFileName;
LABEL_18:
  sprintf(v9, v10);
  v5 = NiImageConverter::GetImageConverter();
  v6 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v5->baseclass_0.vfptr[2].__vecDelDtor)(
                        v5,
                        szFileName,
                        0);
  if ( v6 )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    v8 = (NiTexture *)NiSourceTexture::Create(v6, &kPrefs);
    v7 = v8;
    if ( v8 )
      CharResMgr::AddItemTextureToMap(v3, v8, strKey);
  }
  else
  {
    v7 = 0;
  }
  return v7;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00656500) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetSubItem(CharResMgr *this, const char *szName, char kClassID, char byGender, const char *szTexName)
{
  CharResMgr *v5; // edi@1
  NiNode *v6; // esi@1
  NiNode *v7; // eax@4
  NiNode *v8; // esi@4
  NiSourceTexture *v9; // esi@9
  NiTexture *v10; // eax@11
  void *v11; // ebx@11
  NiImageConverter *v12; // eax@14
  NiPixelData *v13; // eax@14
  bool v14; // zf@24
  NiNode *v15; // eax@25
  ResetTexture kResetTexture; // [sp+4h] [bp-22Ch]@15
  NiPointer<NiTexture> spSubItemTexture; // [sp+10h] [bp-220h]@1
  NiPointer<NiNode> spLoadData; // [sp+14h] [bp-21Ch]@1
  char acFileName[260]; // [sp+18h] [bp-218h]@3
  char acPath[260]; // [sp+11Ch] [bp-114h]@1
  unsigned int v22; // [sp+220h] [bp-10h]@1
  int v23; // [sp+22Ch] [bp-4h]@6
  int v24; // [sp+230h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v5 = this;
  spSubItemTexture.m_pObject = (NiTexture *)szTexName;
  CharResMgr::GetResourcePath(this, acPath, 1, szName, byGender, kClassID);
  v6 = CharResMgr::GetSubItemFromMap(v5, acPath);
  spLoadData.m_pObject = v6;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  if ( !v6 )
  {
    v7 = PgUtil::LoadNifFile(acFileName, 0, 1);
    v8 = v7;
    spLoadData.m_pObject = v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v23 = 0;
    if ( !v8 )
      return 0;
    NiObjectNET::SetName(&v8->baseclass_0.baseclass_0, szName);
    CharResMgr::AddSubItemToMap(v5, v8, acPath);
    NiObjectNET::ms_eCopyType = 1;
    spLoadData.m_pObject = (NiNode *)NiObject::Clone(&v8->baseclass_0.baseclass_0.baseclass_0);
    v23 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  }
  memset(acFileName, 0, 0x104u);
  v9 = 0;
  memset(acPath, 0, 0x104u);
  CharResMgr::GetResourcePath(v5, acPath, 0, (const char *)spSubItemTexture.m_pObject, byGender, kClassID);
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  v10 = CharResMgr::GetSubItemTextureMap(v5, acPath);
  v11 = v10;
  spSubItemTexture.m_pObject = v10;
  if ( v10 )
    InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v23 = 1;
  if ( v11 )
    goto LABEL_36;
  v12 = NiImageConverter::GetImageConverter();
  v13 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v12->baseclass_0.vfptr[2].__vecDelDtor)(
                         v12,
                         acFileName,
                         0);
  if ( v13 )
  {
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)6;
    kResetTexture.baseclass_0.m_pCallBack = (Ns_TourScene::TS_RESULT (__cdecl *)(NiAVObject *, void *))3;
    kResetTexture.baseclass_0.m_nCurLevel = 0;
    v9 = NiSourceTexture::Create(v13, (NiTexture::FormatPrefs *)&kResetTexture);
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  LOBYTE(v23) = 2;
  if ( v9 )
  {
    CharResMgr::AddSubItemTextureToMap(v5, &v9->baseclass_0, acPath);
    v11 = v9;
    spSubItemTexture.m_pObject = (NiTexture *)v9;
    InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  LOBYTE(v23) = 1;
  if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  if ( v11 )
  {
LABEL_36:
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    v14 = spLoadData.m_pObject->m_kChildren.m_uiSize == 0;
    LOBYTE(v23) = 3;
    if ( !v14 )
    {
      v15 = (NiNode *)spLoadData.m_pObject->m_kChildren.m_pBase->m_pObject;
      if ( v15 )
        Ns_TourScene::TourScene(&kResetTexture.baseclass_0, v15, &NiAVObject::m_RTTI, v11);
    }
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  }
  v23 = -1;
  if ( v11 )
  {
    if ( !InterlockedDecrement((volatile LONG *)v11 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v11)(v11, 1);
  }
  return spLoadData.m_pObject;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00656820) --------------------------------------------------------
void __thiscall CharResMgr::LoadHairParts(CharResMgr *this, char kClassID, char byGender, char byIndexID, char byPartsIndex, bool bUseLink, const char *pchModelName, const char *pchTexName)
{
  const char *v8; // eax@1
  char v9; // dl@2

  v8 = pchModelName;
  do
    v9 = *v8++;
  while ( v9 );
  if ( v8 != pchModelName + 1 && strcmp(pchModelName, "-") )
  {
    if ( bUseLink )
      CharResMgr::GetHair(this, kClassID, byGender, byIndexID, byPartsIndex, pchModelName, pchTexName);
  }
}

//----- (006568A0) --------------------------------------------------------
bool __thiscall CharResMgr::PreLoadMinihouseRes(CharResMgr *this)
{
  CharResMgr::GetHouse(this, 0);
  return 1;
}

//----- (006568B0) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetItem(CharResMgr *this, unsigned __int16 kItemID, char byPathRuleType)
{
  CharResMgr *v3; // ebx@1
  NiNode *result; // eax@1
  int v5; // esi@2
  int v6; // ecx@4
  bool v7; // zf@4
  int v8; // eax@4
  int v9; // esi@5
  NiNode *v10; // edi@18
  NiTexture *v11; // eax@19
  NiTexture *v12; // ebx@19
  NiNode *v13; // eax@21
  int v14; // esi@25
  NiObject *v15; // esi@25
  char *v16; // [sp-20h] [bp-150h]@10
  const char *v17; // [sp-1Ch] [bp-14Ch]@10
  int v18; // [sp-14h] [bp-144h]@10
  unsigned int v19; // [sp-10h] [bp-140h]@1
  NiPointer<NiTexture> spSubItemTexture; // [sp+0h] [bp-130h]@19
  ResetTexture kResetTexture; // [sp+4h] [bp-12Ch]@22
  CharResMgr *v22; // [sp+10h] [bp-120h]@1
  int *v23; // [sp+14h] [bp-11Ch]@4
  char byParsingType[4]; // [sp+18h] [bp-118h]@1
  char acFileName[260]; // [sp+1Ch] [bp-114h]@10
  unsigned int v26; // [sp+120h] [bp-10h]@1
  int v27; // [sp+12Ch] [bp-4h]@21
  int v28; // [sp+130h] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v19 = (unsigned int)&v28 ^ __security_cookie;
  v3 = this;
  byParsingType[0] = byPathRuleType;
  v22 = this;
  result = CharResMgr::GetItemFromMap(this, kItemID, byPathRuleType);
  if ( result )
    return result;
  v5 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                           kItemID)
    || kItemID > *(_WORD *)(v5 + 200)
    || (v6 = *(_DWORD *)(v5 + 196),
        v7 = *(_DWORD *)(v6 + 4 * kItemID) == 0,
        v23 = (int *)kItemID,
        v8 = v6 + 4 * kItemID,
        v7)
    || (v9 = *(_DWORD *)v8) == 0 )
    return 0;
  if ( byParsingType[0] == -1 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v18 = v9 + 170;
    v17 = "%s%s.nif";
LABEL_17:
    v16 = acFileName;
    goto LABEL_18;
  }
  if ( *(_BYTE *)(v9 + 170) != 95 )
  {
    v18 = v9 + 170;
    if ( byParsingType[0] )
    {
      Folder::Item();
      v17 = "%sMale\\%s.nif";
      v16 = acFileName;
      goto LABEL_18;
    }
    Folder::Item();
    v17 = "%sFemale\\%s.nif";
    goto LABEL_17;
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v18 = v9 + 170;
  v17 = "%s%s.nif";
  v16 = acFileName;
LABEL_18:
  sprintf(v16, v17);
  v10 = PgUtil::LoadNifFile(acFileName, 0, 1);
  if ( !v10 )
    return 0;
  v11 = CharResMgr::GetItemTexture(v3, (const char *)(v9 + 202), byParsingType[0]);
  v12 = v11;
  spSubItemTexture.m_pObject = v11;
  if ( v11 )
    InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v13 = 0;
  v27 = 0;
  if ( v12 )
  {
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    LOBYTE(v27) = 1;
    if ( v10->m_kChildren.m_uiSize > 0 )
      v13 = (NiNode *)v10->m_kChildren.m_pBase->m_pObject;
    Ns_TourScene::TourScene(&kResetTexture.baseclass_0, v13, &NiAVObject::m_RTTI, v12);
    LOBYTE(v27) = 0;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  }
  NiObjectNET::SetName(&v10->baseclass_0.baseclass_0, (const char *)(v9 + 2));
  v14 = (unsigned int)v23 | ((unsigned __int8)byParsingType[0] << 24);
  v18 = (int)v10;
  v23 = &v18;
  InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v22->m_kItemMap,
    v14,
    (NiPointer<PgWinBut>)v18);
  NiObjectNET::ms_eCopyType = 1;
  v15 = NiObject::Clone(&v10->baseclass_0.baseclass_0.baseclass_0);
  v27 = -1;
  if ( v12 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v12->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  }
  return (NiNode *)v15;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00656B20) --------------------------------------------------------
bool __thiscall CharResMgr::LoadHairSet(CharResMgr *this, char kClassID, char byGender, HairInfo *pkHairInfo)
{
  HairInfo *v4; // esi@1
  CharResMgr *v5; // edi@1

  v4 = pkHairInfo;
  v5 = this;
  CharResMgr::LoadHairParts(
    this,
    kClassID,
    byGender,
    pkHairInfo->ID,
    0,
    pkHairInfo->ucIsLink_Front != 0,
    pkHairInfo->acModelName_Front,
    pkHairInfo->FrontTex);
  CharResMgr::LoadHairParts(
    v5,
    kClassID,
    byGender,
    v4->ID,
    1,
    v4->ucIsLink_Bottom != 0,
    v4->acModelName_Bottom,
    v4->BottomTex);
  CharResMgr::LoadHairParts(v5, kClassID, byGender, v4->ID, 2, v4->ucIsLink_Top != 0, v4->acModelName_Top, v4->TopTex);
  CharResMgr::LoadHairParts(v5, kClassID, byGender, v4->ID, 3, v4->ucIsLink_Acc != 0, v4->acModelName_Acc, v4->Acc1Tex);
  CharResMgr::LoadHairParts(
    v5,
    kClassID,
    byGender,
    v4->ID,
    4,
    v4->ucIsLink_Acc2 != 0,
    v4->acModelName_Acc2,
    v4->Acc2Tex);
  CharResMgr::LoadHairParts(
    v5,
    kClassID,
    byGender,
    v4->ID,
    5,
    v4->ucIsLink_Acc3 != 0,
    v4->acModelName_Acc3,
    v4->Acc3Tex);
  return 1;
}

//----- (00656C50) --------------------------------------------------------
bool __thiscall CharResMgr::PreLoadItemRes(CharResMgr *this)
{
  unsigned int v1; // esi@1
  void *v2; // eax@2
  void *v3; // ebx@2
  int v4; // esi@3
  int v5; // edi@3
  int v6; // ecx@4
  int v7; // eax@7
  int v8; // eax@13
  CharResMgr *thisa; // [sp+4h] [bp-8h]@1
  unsigned int i; // [sp+8h] [bp-4h]@1

  v1 = 0;
  thisa = this;
  i = 0;
  if ( ITableBase<ItemViewInfo_ItemViewInfoTab>::GetTotal() )
  {
    do
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 4), v1);
      v3 = v2;
      if ( v2 )
      {
        v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        v5 = *(_WORD *)v2;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                *(_WORD *)v2) )
        {
          if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
          {
            v7 = *(_DWORD *)(v4 + 196) + 4 * v5;
            v6 = *(_DWORD *)v7 ? *(_DWORD *)v7 : 0;
          }
          else
          {
            v6 = 0;
          }
        }
        else
        {
          v6 = 0;
        }
        if ( *((_BYTE *)v3 + 170) != 45 )
        {
          if ( *(_DWORD *)((char *)v3 + 166) == 1 && *(_DWORD *)(v6 + 110) == 7
            || (v8 = *(_DWORD *)(v6 + 110), v8 == 19)
            || v8 == 21
            || v8 == 12
            || v8 == 10 )
            CharResMgr::GetItem(thisa, *(_WORD *)v6, -1);
        }
      }
      ++i;
      v1 = i;
    }
    while ( i < ITableBase<ItemViewInfo_ItemViewInfoTab>::GetTotal() );
  }
  return 1;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00656D30) --------------------------------------------------------
bool __thiscall CharResMgr::LoadAllHairSetRes(CharResMgr *this)
{
  int v1; // eax@1
  CharResMgr *v2; // edi@1
  void *v3; // eax@5
  void *v4; // esi@5
  int v5; // eax@21
  int v6; // eax@26
  int v7; // eax@31
  char v9; // [sp-10h] [bp-1Ch]@7
  char v10; // [sp-10h] [bp-1Ch]@12
  char v11; // [sp-10h] [bp-1Ch]@17
  char v12; // [sp-10h] [bp-1Ch]@22
  char v13; // [sp-10h] [bp-1Ch]@27
  char v14; // [sp-10h] [bp-1Ch]@32
  HairInfo *v15; // [sp-Ch] [bp-18h]@7
  HairInfo *v16; // [sp-Ch] [bp-18h]@12
  HairInfo *v17; // [sp-Ch] [bp-18h]@17
  HairInfo *v18; // [sp-Ch] [bp-18h]@22
  HairInfo *v19; // [sp-Ch] [bp-18h]@27
  HairInfo *v20; // [sp-Ch] [bp-18h]@32
  unsigned int v21; // [sp+4h] [bp-8h]@2
  unsigned int i; // [sp+8h] [bp-4h]@4

  v1 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
  v2 = this;
  if ( v1 )
    v21 = *(_DWORD *)(v1 + 40);
  else
    v21 = 0;
  i = 0;
  if ( v21 > 0 )
  {
    while ( 1 )
    {
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), i);
      v4 = v3;
      if ( !v3 )
        goto LABEL_36;
      if ( *(_DWORD *)((char *)v3 + 66) == 2 )
      {
        v15 = (HairInfo *)v3;
        v9 = 0;
      }
      else
      {
        if ( *(_DWORD *)((char *)v3 + 78) != 1 )
          goto LABEL_11;
        v15 = (HairInfo *)v3;
        v9 = 1;
      }
      CharResMgr::LoadHairSet(v2, 1, v9, v15);
LABEL_11:
      if ( *(_DWORD *)((char *)v4 + 74) == 2 )
      {
        v16 = (HairInfo *)v4;
        v10 = 0;
      }
      else
      {
        if ( *(_DWORD *)((char *)v4 + 78) != 1 )
          goto LABEL_16;
        v16 = (HairInfo *)v4;
        v10 = 1;
      }
      CharResMgr::LoadHairSet(v2, 6, v10, v16);
LABEL_16:
      if ( *(_DWORD *)((char *)v4 + 70) == 2 )
      {
        v17 = (HairInfo *)v4;
        v11 = 0;
      }
      else
      {
        if ( *(_DWORD *)((char *)v4 + 78) != 1 )
          goto LABEL_21;
        v17 = (HairInfo *)v4;
        v11 = 1;
      }
      CharResMgr::LoadHairSet(v2, 16, v11, v17);
LABEL_21:
      v5 = *(_DWORD *)((char *)v4 + 78);
      if ( v5 == 2 )
      {
        v18 = (HairInfo *)v4;
        v12 = 0;
      }
      else
      {
        if ( v5 != 1 )
          goto LABEL_26;
        v18 = (HairInfo *)v4;
        v12 = 1;
      }
      CharResMgr::LoadHairSet(v2, 11, v12, v18);
LABEL_26:
      v6 = *(_DWORD *)((char *)v4 + 82);
      if ( v6 == 2 )
      {
        v19 = (HairInfo *)v4;
        v13 = 0;
LABEL_30:
        CharResMgr::LoadHairSet(v2, 21, v13, v19);
        goto LABEL_31;
      }
      if ( v6 == 1 )
      {
        v19 = (HairInfo *)v4;
        v13 = 1;
        goto LABEL_30;
      }
LABEL_31:
      v7 = *(_DWORD *)((char *)v4 + 86);
      if ( v7 == 2 )
      {
        v20 = (HairInfo *)v4;
        v14 = 0;
LABEL_35:
        CharResMgr::LoadHairSet(v2, 26, v14, v20);
        goto LABEL_36;
      }
      if ( v7 == 1 )
      {
        v20 = (HairInfo *)v4;
        v14 = 1;
        goto LABEL_35;
      }
LABEL_36:
      ++i;
      if ( i >= v21 )
        return 1;
    }
  }
  return 1;
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;

//----- (00656E50) --------------------------------------------------------
bool __thiscall CharResMgr::PreLoadCharRes(CharResMgr *this)
{
  CharResMgr *v1; // esi@1
  bool result; // al@7

  v1 = this;
  if ( CharResMgr::LoadCharSetRes(this, 1)
    && CharResMgr::LoadCharSetRes(v1, 6)
    && CharResMgr::LoadCharSetRes(v1, 11)
    && CharResMgr::LoadCharSetRes(v1, 16)
    && CharResMgr::LoadCharSetRes(v1, 21)
    && CharResMgr::LoadCharSetRes(v1, 26)
    && CharResMgr::LoadAllHairSetRes(v1)
    && CharResMgr::LoadAllFaceTexture(v1) )
  {
    CharResMgr::GetHouse(v1, 0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00656ED0) --------------------------------------------------------
void __thiscall CharResMgr::RemoveAllCharActor(CharResMgr *this)
{
  CharResMgr *v1; // esi@1

  v1 = this;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Erase(
    &v1->m_kKfMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0
                                                                            + 1);
  **((_DWORD **)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0
                                                                            + 1);
  *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 2) = 0;
}

//----- (00656F10) --------------------------------------------------------
void __thiscall CharResMgr::Terminate(CharResMgr *this)
{
  CharResMgr *v1; // esi@1
  NiTransformController *v2; // edi@1
  NiNode *v3; // edi@6
  NiVertexColorProperty *v4; // edi@11
  NiMaterialProperty *v5; // edi@16

  v1 = this;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Erase(
    &v1->m_kKfMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0
                                                                            + 1);
  **((_DWORD **)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0
                                                                            + 1);
  *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 2) = 0;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMobActorMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kRidePetMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMoverMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kPetMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kCharSetMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHairMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceMap);
  CharResMgr::RemoveAllItem(v1);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kDropItemMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kItemUpgradeTextureEffectMap);
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
    &v1->m_kHairTextureMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  **((_DWORD **)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0
                                                                      + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 2) = 0;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHairDetailTextureMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceTextureMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceTattooMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kSetTextureMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHouseMap);
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
    &v1->m_kMiniHouseTextureMap.baseclass_0,
    *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 4));
  *(_DWORD *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                                          + 1);
  **((_DWORD **)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                           + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                                          + 1);
  *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 2) = 0;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kClosedEyeMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kQuestInfoMap);
  v2 = v1->m_spDamageContrl.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spDamageContrl.m_pObject = 0;
  }
  v3 = v1->m_spCharShakeNode.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spCharShakeNode.m_pObject = 0;
  }
  v4 = v1->m_spVertProp.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spVertProp.m_pObject = 0;
  }
  v5 = v1->m_spMatProp.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
    v1->m_spMatProp.m_pObject = 0;
  }
}

//----- (00657110) --------------------------------------------------------
void __thiscall CharResMgr::_CharResMgr(CharResMgr *this)
{
  CharResMgr *v1; // esi@1
  HANDLE v2; // eax@1
  NiMaterialProperty *v3; // edi@1
  NiVertexColorProperty *v4; // edi@5
  NiNode *v5; // edi@9
  NiTransformController *v6; // edi@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v7; // eax@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v8; // ecx@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v9; // ST08_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v10; // ST04_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v11; // ST08_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v12; // ST04_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v13; // ST08_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v14; // ST04_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v15; // ST08_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v16; // ST04_4@17
  NiActorManager *v17; // edi@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v18; // ST08_4@21
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v19; // ST04_4@21
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba result; // [sp+0h] [bp-18h]@17
  void *v21; // [sp+4h] [bp-14h]@17
  CharResMgr *v22; // [sp+8h] [bp-10h]@1
  int v23; // [sp+14h] [bp-4h]@1

  v1 = this;
  v22 = this;
  v23 = 28;
  v2 = GetCurrentProcess();
  TerminateProcess(v2, 0);
  CharResMgr::Terminate(v1);
  v3 = v1->m_spMatProp.m_pObject;
  LOBYTE(v23) = 27;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spVertProp.m_pObject;
  LOBYTE(v23) = 26;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v1->m_spCharShakeNode.m_pObject;
  LOBYTE(v23) = 25;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spDamageContrl.m_pObject;
  LOBYTE(v23) = 24;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v21 = &v1->m_kClosedEyeMap;
  v1->m_kClosedEyeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kClosedEyeMap);
  LOBYTE(v23) = 23;
  v1->m_kClosedEyeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kClosedEyeMap);
  operator delete__(v1->m_kClosedEyeMap.baseclass_0.m_ppkHashTable);
  v21 = &v1->m_kHairDetailTextureMap;
  v1->m_kHairDetailTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHairDetailTextureMap);
  LOBYTE(v23) = 22;
  v1->m_kHairDetailTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHairDetailTextureMap);
  operator delete__(v1->m_kHairDetailTextureMap.baseclass_0.m_ppkHashTable);
  v21 = &v1->m_kSetTextureMap;
  v1->m_kSetTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kSetTextureMap);
  LOBYTE(v23) = 21;
  v1->m_kSetTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kSetTextureMap);
  operator delete__(v1->m_kSetTextureMap.baseclass_0.m_ppkHashTable);
  v21 = &v1->m_kFaceTattooMap;
  v1->m_kFaceTattooMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceTattooMap);
  LOBYTE(v23) = 20;
  v1->m_kFaceTattooMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceTattooMap);
  operator delete__(v1->m_kFaceTattooMap.baseclass_0.m_ppkHashTable);
  v21 = &v1->m_kFaceTextureMap;
  v1->m_kFaceTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceTextureMap);
  LOBYTE(v23) = 19;
  v1->m_kFaceTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceTextureMap);
  operator delete__(v1->m_kFaceTextureMap.baseclass_0.m_ppkHashTable);
  v21 = &v1->m_kHairTextureMap;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1);
  v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**(_DWORD **)&v7;
  LOBYTE(v23) = 34;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    &v1->m_kHairTextureMap.baseclass_0,
    &result,
    v8,
    v7);
  operator delete(*((void **)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kMiniHouseTextureMap;
  v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1);
  v10 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**((_DWORD **)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1);
  LOBYTE(v23) = 35;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    &v1->m_kMiniHouseTextureMap.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&v21,
    v10,
    v9);
  operator delete(*((void **)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kItemTextureMap;
  v11 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1);
  v12 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**((_DWORD **)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1);
  LOBYTE(v23) = 36;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    &v1->m_kItemTextureMap.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&v21,
    v12,
    v11);
  operator delete(*((void **)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kSubItemTextureMap;
  v13 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1);
  v14 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**((_DWORD **)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1);
  LOBYTE(v23) = 37;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    &v1->m_kSubItemTextureMap.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&v21,
    v14,
    v13);
  operator delete(*((void **)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kSubItemMap;
  v15 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1);
  v16 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**((_DWORD **)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1);
  LOBYTE(v23) = 38;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *)&v1->m_kSubItemMap,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&v21,
    v16,
    v15);
  operator delete(*((void **)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kItemUpgradeTextureEffectMap;
  v1->m_kItemUpgradeTextureEffectMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_char_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v23) = 39;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kItemUpgradeTextureEffectMap);
  LOBYTE(v23) = 13;
  v1->m_kItemUpgradeTextureEffectMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kItemUpgradeTextureEffectMap);
  operator delete__(v1->m_kItemUpgradeTextureEffectMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kDropItemMap;
  v1->m_kDropItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v23) = 40;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kDropItemMap);
  LOBYTE(v23) = 12;
  v1->m_kDropItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kDropItemMap);
  operator delete__(v1->m_kDropItemMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kItemMap;
  v1->m_kItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v23) = 41;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kItemMap);
  LOBYTE(v23) = 11;
  v1->m_kItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kItemMap);
  operator delete__(v1->m_kItemMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kFaceMap;
  v1->m_kFaceMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v23) = 42;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceMap);
  LOBYTE(v23) = 10;
  v1->m_kFaceMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kFaceMap);
  operator delete__(v1->m_kFaceMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kHairMap;
  v1->m_kHairMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v23) = 43;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHairMap);
  LOBYTE(v23) = 9;
  v1->m_kHairMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHairMap);
  operator delete__(v1->m_kHairMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kQuestInfoMap;
  v1->m_kQuestInfoMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v23) = 44;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kQuestInfoMap);
  LOBYTE(v23) = 8;
  v1->m_kQuestInfoMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kQuestInfoMap);
  operator delete__(v1->m_kQuestInfoMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kHouseMap;
  v1->m_kHouseMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v23) = 45;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHouseMap);
  LOBYTE(v23) = 7;
  v1->m_kHouseMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kHouseMap);
  operator delete__(v1->m_kHouseMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kCharSetMap;
  v1->m_kCharSetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMap<unsigned_long_NiPointer<CharSet>>::_vftable_;
  LOBYTE(v23) = 46;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kCharSetMap);
  LOBYTE(v23) = 6;
  v1->m_kCharSetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kCharSetMap);
  operator delete__(v1->m_kCharSetMap.baseclass_0.m_ppkHashTable);
  v17 = v1->m_spPigeonActor.m_pObject;
  LOBYTE(v23) = 5;
  if ( v17 && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.m_uiRefCount) && v17 )
    v17->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kKfMap;
  v18 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1);
  v19 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)**((_DWORD **)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1);
  LOBYTE(v23) = 47;
  std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::erase(
    &v1->m_kKfMap.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *)&v21,
    v19,
    v18);
  operator delete(*((void **)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1));
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kPetMap;
  v1->m_kPetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v23) = 48;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kPetMap);
  LOBYTE(v23) = 3;
  v1->m_kPetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kPetMap);
  operator delete__(v1->m_kPetMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kMoverMap;
  v1->m_kMoverMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v23) = 49;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMoverMap);
  LOBYTE(v23) = 2;
  v1->m_kMoverMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMoverMap);
  operator delete__(v1->m_kMoverMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kRidePetMap;
  v1->m_kRidePetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v23) = 50;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kRidePetMap);
  LOBYTE(v23) = 1;
  v1->m_kRidePetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kRidePetMap);
  operator delete__(v1->m_kRidePetMap.baseclass_0.m_ppkHashTable);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)&v1->m_kMobActorMap;
  v1->m_kMobActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v23) = 51;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMobActorMap);
  LOBYTE(v23) = 0;
  v1->m_kMobActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kMobActorMap);
  operator delete__(v1->m_kMobActorMap.baseclass_0.m_ppkHashTable);
  v1->m_kCharActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  v23 = 52;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  v23 = -1;
  v1->m_kCharActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->m_kCharActorMap.baseclass_0.m_ppkHashTable);
}
// 9C4128: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiActorManager___unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);
// 9C4148: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_CharSet___unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);
// 9C4168: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4188: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C41A8: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C41E4: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);
// 9C4204: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);
// 9C4224: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4244: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4264: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (00657700) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetCharActor(CharResMgr *this, char kClassID, char byGender, unsigned int uiFrame)
{
  NiActorManager *result; // eax@9
  char v5; // bl@34
  NiActorManager *v6; // edi@38
  int v7; // ebx@38
  char *v8; // eax@41
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v9; // eax@41
  void *v10; // esi@41
  const char *v11; // eax@42
  NiNode *v12; // eax@43
  int v13; // eax@45
  unsigned int v14; // esi@47
  NiKFMTool::Sequence *v15; // eax@49
  unsigned int v16; // ebx@50
  NiObject *v17; // eax@54
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v18; // eax@54
  NiPointer<NiPixelData> *v19; // eax@54
  NiAVObject *v20; // eax@59
  unsigned int v21; // esi@59
  char *v22; // [sp-8h] [bp-170h]@15
  char *v23; // [sp-8h] [bp-170h]@51
  const char *v24; // [sp-4h] [bp-16Ch]@15
  const char *v25; // [sp-4h] [bp-16Ch]@36
  const char *v26; // [sp-4h] [bp-16Ch]@51
  bool v27; // [sp+0h] [bp-168h]@36
  bool v28; // [sp+4h] [bp-164h]@36
  char *v29; // [sp+8h] [bp-160h]@15
  unsigned int v30; // [sp+Ch] [bp-15Ch]@1
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > thisa; // [sp+1Ch] [bp-14Ch]@41
  NiKFMTool *pKfmTool; // [sp+2Ch] [bp-13Ch]@41
  unsigned int _Keyval; // [sp+30h] [bp-138h]@54
  NiActorManager *pkActor; // [sp+34h] [bp-134h]@38
  int v35; // [sp+38h] [bp-130h]@1
  CharResMgr *v36; // [sp+3Ch] [bp-12Ch]@1
  int uiNumIDs; // [sp+40h] [bp-128h]@44
  void *pSequenceIDs; // [sp+44h] [bp-124h]@44
  int i; // [sp+48h] [bp-120h]@45
  NiPointer<NiControllerSequence> spSequence; // [sp+4Ch] [bp-11Ch]@53
  int v41; // [sp+50h] [bp-118h]@2
  char acFileName[260]; // [sp+54h] [bp-114h]@15
  unsigned int v43; // [sp+158h] [bp-10h]@1
  int v44; // [sp+164h] [bp-4h]@41
  int v45; // [sp+168h] [bp+0h]@1

  v43 = (unsigned int)&v45 ^ __security_cookie;
  v30 = (unsigned int)&v45 ^ __security_cookie;
  v36 = this;
  LOBYTE(v35) = byGender;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      LOBYTE(v41) = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      LOBYTE(v41) = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      LOBYTE(v41) = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      LOBYTE(v41) = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      LOBYTE(v41) = 21;
      break;
    case 0x1A:
    case 0x1B:
      LOBYTE(v41) = 26;
      break;
    default:
      LOBYTE(v41) = 0;
      break;
  }
  result = CharResMgr::GetCharActorFromMap(this, v41, v35);
  if ( !result )
  {
    if ( uiFrame == 1 )
    {
      if ( byGender == 1 )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v29 = "-m.kfm";
        CharClass::GetBaseEngName(v41);
        Folder::Merge(&Folder::m_acMenu, "CharSelect\\CharSelectAni\\");
        v24 = "%s%s%s";
        v22 = acFileName;
        goto LABEL_34;
      }
      if ( !Folder::m_bInit )
        Folder::Init();
      v29 = "-f.kfm";
      CharClass::GetBaseEngName(v41);
      Folder::Merge(&Folder::m_acMenu, "CharSelect\\CharSelectAni\\");
      v24 = "%s%s%s";
    }
    else
    {
      if ( uiFrame != 2 )
      {
        if ( byGender == 1 )
        {
          if ( !Folder::m_bInit )
            Folder::Init();
          v29 = CharClass::GetBaseEngName(v41);
          CharClass::GetBaseEngName(v41);
          v24 = "%s%s-m\\%s-m.kfm";
          v22 = acFileName;
        }
        else
        {
          if ( !Folder::m_bInit )
            Folder::Init();
          v29 = CharClass::GetBaseEngName(v41);
          CharClass::GetBaseEngName(v41);
          v24 = "%s%s-f\\%s-f.kfm";
          v22 = acFileName;
        }
        goto LABEL_34;
      }
      if ( byGender != 1 )
      {
        if ( !Folder::m_bInit )
          Folder::Init();
        v29 = "-f.kfm";
        CharClass::GetBaseEngName(v41);
        Folder::Merge(&Folder::m_acMenu, "charcreate\\CharCreateAni\\");
        v24 = "%s%s%s";
        v22 = acFileName;
        goto LABEL_34;
      }
      if ( !Folder::m_bInit )
        Folder::Init();
      v29 = "-m.kfm";
      CharClass::GetBaseEngName(v41);
      Folder::Merge(&Folder::m_acMenu, "charcreate\\CharCreateAni\\");
      v24 = "%s%s%s";
    }
    v22 = acFileName;
LABEL_34:
    sprintf(v22, v24);
    v5 = NiSourceTexture::ms_bDestroyAppData;
    NiSourceTexture::ms_bDestroyAppData = 1;
    if ( uiFrame == 1 || uiFrame == 2 )
    {
      *(float *)&v29 = 0.0;
      v28 = 1;
      v27 = 0;
      v25 = acFileName;
    }
    else
    {
      *(float *)&v29 = 0.0;
      v28 = 0;
      v27 = 0;
      v25 = acFileName;
    }
    v6 = NiActorManager::Create(v25, v27, v28, (NiStream *)v29);
    NiSourceTexture::ms_bDestroyAppData = v5;
    v7 = 0;
    pkActor = v6;
    if ( v6 )
    {
      if ( uiFrame != 1 )
      {
        if ( uiFrame != 2 )
        {
          mhGameMainConnectMgr::mhGameMainConnectMgr(&thisa);
          v29 = v8;
          v44 = 0;
          v9 = std::map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>>::operator__(
                 &v36->m_kKfMap,
                 &pkActor);
          std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>::operator_(
            v9,
            (std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *)v29);
          v44 = -1;
          std::map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>::_map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>(&thisa);
          v10 = v6->m_spKFMTool.m_pObject;
          pKfmTool = (NiKFMTool *)v10;
          if ( v10 )
          {
            v11 = NiKFMTool::GetFullModelPath((NiKFMTool *)v10);
            if ( v11 )
            {
              v12 = Ns_LoadNifFile(v11, 0);
              if ( v12 )
              {
                NiActorManager::ChangeNIFRoot(v6, &v12->baseclass_0);
                pSequenceIDs = 0;
                NiKFMTool::GetSequenceIDs((NiKFMTool *)v10, (unsigned int **)&pSequenceIDs, (unsigned int *)&uiNumIDs);
                if ( pSequenceIDs )
                {
                  v13 = uiNumIDs;
                  i = 0;
                  if ( uiNumIDs + 1 > 0 )
                  {
                    do
                    {
                      if ( v7 == v13 )
                        v14 = 801100;
                      else
                        v14 = *((_DWORD *)pSequenceIDs + v7);
                      v15 = NiKFMTool::GetSequence(pKfmTool, v14);
                      if ( v15 )
                      {
                        v16 = v15->m_iAnimIndex;
                        v29 = v15->m_pcFilename;
                        if ( (_BYTE)v35 == 1 )
                        {
                          CharClass::GetBaseEngName(v41);
                          Folder::Character();
                          v26 = "%s%s-m\\%s";
                          v23 = acFileName;
                        }
                        else
                        {
                          CharClass::GetBaseEngName(v41);
                          Folder::Character();
                          v26 = "%s%s-f\\%s";
                          v23 = acFileName;
                        }
                        sprintf(v23, v26);
                        NiControllerSequence::CreateSequenceFromFile(&spSequence, acFileName, v16);
                        v44 = 1;
                        if ( spSequence.m_pObject )
                        {
                          v17 = NiObject::Clone(&spSequence.m_pObject->baseclass_0);
                          NiPointer<PopupMenuWin>::operator_(
                            (NiPointer<NiD3DDefaultShader> *)&spSequence,
                            (NiD3DDefaultShader *)v17);
                          _Keyval = v14;
                          v18 = std::map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>>::operator__(
                                  &v36->m_kKfMap,
                                  &pkActor);
                          v19 = (NiPointer<NiPixelData> *)std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>::operator__(
                                                            v18,
                                                            &_Keyval);
                          NiPointer<NiActorManager>::operator_(v19, (NiPointer<NiPixelData> *)&spSequence);
                          if ( i == uiNumIDs )
                            NiActorManager::ChangeSequence(v6, v14, spSequence.m_pObject);
                        }
                        v44 = -1;
                        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spSequence);
                        v7 = i;
                      }
                      v13 = uiNumIDs;
                      ++v7;
                      i = v7;
                    }
                    while ( v7 < uiNumIDs + 1 );
                  }
                  operator delete(pSequenceIDs);
                }
              }
            }
          }
        }
      }
      v20 = (NiAVObject *)((int (__stdcall *)(_DWORD))v6->m_spNIFRoot.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Haduri Light");
      PgUtil::TurnOnLightsInNode(v20, 0);
      NiActorManager::Update(v6, 0.0);
      v29 = (char *)1;
      NiAVObject::Update(v6->m_spNIFRoot.m_pObject, 0.0, 1);
      _Keyval = (unsigned int)&v29;
      v21 = ((unsigned __int8)v35 | ((unsigned __int8)v41 << 8)) << 16;
      v29 = (char *)v6;
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v36,
        v21,
        (NiPointer<PgWinBut>)v29);
      result = NiActorManager::Clone(v6);
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6E04C: using guessed type char NiSourceTexture__ms_bDestroyAppData;

//----- (00657CB0) --------------------------------------------------------
void __thiscall CharResMgr::CharResMgr(CharResMgr *this)
{
  CharResMgr *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST38_4@1
  void *v4; // eax@1
  unsigned int v5; // ST28_4@1
  void *v6; // eax@1
  unsigned int v7; // ST18_4@1
  void *v8; // eax@1
  unsigned int v9; // ST08_4@1
  void *v10; // eax@1
  unsigned int v11; // ST38_4@1
  void *v12; // eax@1
  void *v13; // eax@2
  unsigned int v14; // ST38_4@2
  void *v15; // eax@2
  unsigned int v16; // ST28_4@2
  void *v17; // eax@2
  unsigned int v18; // ST18_4@2
  void *v19; // eax@2
  unsigned int v20; // ST08_4@2
  void *v21; // eax@2
  unsigned int v22; // ST38_4@2
  void *v23; // eax@2
  unsigned int v24; // ST28_4@2
  void *v25; // eax@2
  unsigned int v26; // ST18_4@2
  void *v27; // eax@2
  unsigned int v28; // ST08_4@2
  void *v29; // eax@2
  void *v30; // eax@3
  void *v31; // eax@4
  void *v32; // eax@5
  void *v33; // eax@6
  void *v34; // eax@7
  unsigned int v35; // ST38_4@7
  void *v36; // eax@7
  unsigned int v37; // ST28_4@7
  void *v38; // eax@7
  unsigned int v39; // ST18_4@7
  void *v40; // eax@7
  unsigned int v41; // ST08_4@7
  void *v42; // eax@7
  unsigned int v43; // ST38_4@7
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@10
  std::exception thisa; // [sp+Ch] [bp-24h]@8
  CharResMgr *v46; // [sp+18h] [bp-18h]@1
  int v47; // [sp+1Ch] [bp-14h]@10
  char *_What; // [sp+20h] [bp-10h]@8
  int v49; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  v46 = this;
  this->m_kCharActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  this->m_kCharActorMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&this->m_kCharActorMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kCharActorMap.baseclass_0.m_uiHashSize;
  v1->m_kCharActorMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiActorManager> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kCharActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  v49 = 0;
  v1->m_kMobActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  v1->m_kMobActorMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kMobActorMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4 = operator new__(0x94u);
  v5 = 4 * v1->m_kMobActorMap.baseclass_0.m_uiHashSize;
  v1->m_kMobActorMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiActorManager> > **)v4;
  memset((char *)v4, 0, v5);
  v1->m_kMobActorMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v49) = 1;
  v1->m_kRidePetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  v1->m_kRidePetMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kRidePetMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v6 = operator new__(0x94u);
  v7 = 4 * v1->m_kRidePetMap.baseclass_0.m_uiHashSize;
  v1->m_kRidePetMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiActorManager> > **)v6;
  memset((char *)v6, 0, v7);
  v1->m_kRidePetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v49) = 2;
  v1->m_kMoverMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  v1->m_kMoverMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kMoverMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v8 = operator new__(0x94u);
  v9 = 4 * v1->m_kMoverMap.baseclass_0.m_uiHashSize;
  v1->m_kMoverMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiActorManager> > **)v8;
  memset((char *)v8, 0, v9);
  v1->m_kMoverMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v49) = 3;
  v1->m_kPetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  v1->m_kPetMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kPetMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v10 = operator new__(0x94u);
  v11 = 4 * v1->m_kPetMap.baseclass_0.m_uiHashSize;
  v1->m_kPetMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiActorManager> > **)v10;
  memset((char *)v10, 0, v11);
  v1->m_kPetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  LOBYTE(v49) = 4;
  *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 2) = 0;
  v12 = operator new(0x24u);
  if ( !v12 )
  {
    v47 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v47);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) = v12;
  *(_DWORD *)v12 = v12;
  *(_DWORD *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0
                                                                            + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0
                                                                            + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 32) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_kKfMap.baseclass_0.baseclass_0 + 1) + 33) = 1;
  v1->m_spPigeonActor.m_pObject = 0;
  LOBYTE(v49) = 6;
  v1->m_kCharSetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vftable_;
  v1->m_kCharSetMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kCharSetMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v13 = operator new__(0x94u);
  v14 = 4 * v1->m_kCharSetMap.baseclass_0.m_uiHashSize;
  v1->m_kCharSetMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<CharSet> > **)v13;
  memset((char *)v13, 0, v14);
  v1->m_kCharSetMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMap<unsigned_long_NiPointer<CharSet>>::_vftable_;
  LOBYTE(v49) = 7;
  v1->m_kHouseMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  v1->m_kHouseMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kHouseMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v15 = operator new__(0x94u);
  v16 = 4 * v1->m_kHouseMap.baseclass_0.m_uiHashSize;
  v1->m_kHouseMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiNode> > **)v15;
  memset((char *)v15, 0, v16);
  v1->m_kHouseMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v49) = 8;
  v1->m_kQuestInfoMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  v1->m_kQuestInfoMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kQuestInfoMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v17 = operator new__(0x94u);
  v18 = 4 * v1->m_kQuestInfoMap.baseclass_0.m_uiHashSize;
  v1->m_kQuestInfoMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiNode> > **)v17;
  memset((char *)v17, 0, v18);
  v1->m_kQuestInfoMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v49) = 9;
  v1->m_kHairMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  v1->m_kHairMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kHairMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v19 = operator new__(0x94u);
  v20 = 4 * v1->m_kHairMap.baseclass_0.m_uiHashSize;
  v1->m_kHairMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiNode> > **)v19;
  memset((char *)v19, 0, v20);
  v1->m_kHairMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v49) = 10;
  v1->m_kFaceMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  v1->m_kFaceMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kFaceMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v21 = operator new__(0x94u);
  v22 = 4 * v1->m_kFaceMap.baseclass_0.m_uiHashSize;
  v1->m_kFaceMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiNode> > **)v21;
  memset((char *)v21, 0, v22);
  v1->m_kFaceMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v49) = 11;
  v1->m_kItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  v1->m_kItemMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kItemMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v23 = operator new__(0x94u);
  v24 = 4 * v1->m_kItemMap.baseclass_0.m_uiHashSize;
  v1->m_kItemMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiNode> > **)v23;
  memset((char *)v23, 0, v24);
  v1->m_kItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v49) = 12;
  v1->m_kDropItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  v1->m_kDropItemMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kDropItemMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v25 = operator new__(0x94u);
  v26 = 4 * v1->m_kDropItemMap.baseclass_0.m_uiHashSize;
  v1->m_kDropItemMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiNode> > **)v25;
  memset((char *)v25, 0, v26);
  v1->m_kDropItemMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v49) = 13;
  v1->m_kItemUpgradeTextureEffectMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vftable_;
  v1->m_kItemUpgradeTextureEffectMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kItemUpgradeTextureEffectMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v27 = operator new__(0x94u);
  v28 = 4 * v1->m_kItemUpgradeTextureEffectMap.baseclass_0.m_uiHashSize;
  v1->m_kItemUpgradeTextureEffectMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned char,NiPointer<NiNode> > **)v27;
  memset((char *)v27, 0, v28);
  v1->m_kItemUpgradeTextureEffectMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_char_NiPointer<NiNode>>::_vftable_;
  LOBYTE(v49) = 14;
  *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 2) = 0;
  v29 = operator new(0x30u);
  if ( !v29 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) = v29;
  *(_DWORD *)v29 = v29;
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0
                                                                                 + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0
                                                                                 + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_kSubItemMap.baseclass_0.baseclass_0 + 1) + 45) = 1;
  LOBYTE(v49) = 15;
  *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 2) = 0;
  v30 = operator new(0x30u);
  if ( !v30 )
  {
    v47 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v47);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) = v30;
  *(_DWORD *)v30 = v30;
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0
                                                                                        + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0
                                                                                        + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1) + 45) = 1;
  LOBYTE(v49) = 16;
  *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 2) = 0;
  v31 = operator new(0x30u);
  if ( !v31 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) = v31;
  *(_DWORD *)v31 = v31;
  *(_DWORD *)(*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_kItemTextureMap.baseclass_0.baseclass_0 + 1) + 45) = 1;
  LOBYTE(v49) = 17;
  *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 2) = 0;
  v32 = operator new(0x30u);
  if ( !v32 )
  {
    v47 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v47);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) = v32;
  *(_DWORD *)v32 = v32;
  *(_DWORD *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                                          + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0
                                                                                          + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1) + 45) = 1;
  LOBYTE(v49) = 18;
  *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 2) = 0;
  v33 = operator new(0x30u);
  if ( !v33 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) = v33;
  *(_DWORD *)v33 = v33;
  *(_DWORD *)(*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0
                                                                                     + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_kHairTextureMap.baseclass_0.baseclass_0 + 1) + 45) = 1;
  LOBYTE(v49) = 19;
  v1->m_kFaceTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_kFaceTextureMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kFaceTextureMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v34 = operator new__(0x94u);
  v35 = 4 * v1->m_kFaceTextureMap.baseclass_0.m_uiHashSize;
  v1->m_kFaceTextureMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiSourceTexture> > **)v34;
  memset((char *)v34, 0, v35);
  v1->m_kFaceTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  LOBYTE(v49) = 20;
  v1->m_kFaceTattooMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_kFaceTattooMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kFaceTattooMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v36 = operator new__(0x94u);
  v37 = 4 * v1->m_kFaceTattooMap.baseclass_0.m_uiHashSize;
  v1->m_kFaceTattooMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiSourceTexture> > **)v36;
  memset((char *)v36, 0, v37);
  v1->m_kFaceTattooMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  LOBYTE(v49) = 21;
  v1->m_kSetTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_kSetTextureMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kSetTextureMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v38 = operator new__(0x94u);
  v39 = 4 * v1->m_kSetTextureMap.baseclass_0.m_uiHashSize;
  v1->m_kSetTextureMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiSourceTexture> > **)v38;
  memset((char *)v38, 0, v39);
  v1->m_kSetTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  LOBYTE(v49) = 22;
  v1->m_kHairDetailTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_kHairDetailTextureMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kHairDetailTextureMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v40 = operator new__(0x94u);
  v41 = 4 * v1->m_kHairDetailTextureMap.baseclass_0.m_uiHashSize;
  v1->m_kHairDetailTextureMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiSourceTexture> > **)v40;
  memset((char *)v40, 0, v41);
  v1->m_kHairDetailTextureMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  LOBYTE(v49) = 23;
  v1->m_kClosedEyeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_kClosedEyeMap.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kClosedEyeMap.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v42 = operator new__(0x94u);
  v43 = 4 * v1->m_kClosedEyeMap.baseclass_0.m_uiHashSize;
  v1->m_kClosedEyeMap.baseclass_0.m_ppkHashTable = (NiTMapItem<unsigned long,NiPointer<NiSourceTexture> > **)v42;
  memset((char *)v42, 0, v43);
  v1->m_kClosedEyeMap.baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_spDamageContrl.m_pObject = 0;
  v1->m_spCharShakeNode.m_pObject = 0;
  v1->m_spVertProp.m_pObject = 0;
  v1->m_spMatProp.m_pObject = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C4128: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiActorManager___unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);
// 9C4148: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_CharSet___unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);
// 9C4168: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4188: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C41A8: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C41E4: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);
// 9C4204: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);
// 9C4224: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4244: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4264: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (00658510) --------------------------------------------------------
bool __thiscall CharResMgr::CreateCharActorAndBaseSet(CharResMgr *this, char kClassID, char byGender)
{
  char v3; // bl@2
  int v4; // edi@9
  NiActorManager *v5; // esi@9
  void *v6; // eax@10
  int v7; // eax@11
  bool result; // al@17
  ChrClassType v9; // eax@18
  int v10; // esi@24
  NiPointer<PgWinBut> v11; // [sp-14h] [bp-30h]@12
  void *v12; // [sp+0h] [bp-1Ch]@10
  CharResMgr *v13; // [sp+4h] [bp-18h]@1
  NiPointer<NiActorManager> spActor; // [sp+8h] [bp-14h]@9
  NiActorManager *v15; // [sp+Ch] [bp-10h]@9
  int v16; // [sp+18h] [bp-4h]@9

  v13 = this;
  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v3 = 26;
      break;
    default:
      v3 = 0;
      break;
  }
  v4 = 0;
  spActor.m_pObject = 0;
  v16 = 0;
  v5 = CharResMgr::GetCharActor(this, v3, byGender, 0);
  v15 = v5;
  if ( !v5 )
    return 0;
  spActor.m_pObject = v5;
  InterlockedIncrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount);
  v6 = operator new(0x34u);
  v12 = v6;
  LOBYTE(v16) = 1;
  if ( v6 )
  {
    CharSet::CharSet((CharSet *)v6);
    v4 = v7;
  }
  v11.m_pObject = (PgWinBut *)v5->m_spNIFRoot.m_pObject;
  LOBYTE(v16) = 0;
  if ( !CharSet::Init((CharSet *)v4, &v11.m_pObject->baseclass_0.baseclass_0.baseclass_0) )
  {
    if ( v4 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v16 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    return 0;
  }
  v9 = CharClass::GetChrClassType(v3);
  if ( v9 == 7 )
  {
    if ( v4 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v16 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    result = 0;
  }
  else
  {
    v10 = (unsigned __int8)ChrBasicEquipTab::GetByIndex(v9, byGender) | (((unsigned __int8)byGender | ((unsigned __int8)v3 << 8)) << 16);
    v11.m_pObject = (PgWinBut *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)(v4 + 4));
    NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
      (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v13->m_kCharSetMap,
      v10,
      v11);
    if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.m_uiRefCount) )
      ((void (__stdcall *)(signed int))v15->baseclass_0.vfptr->__vecDelDtor)(1);
    result = 1;
  }
  return result;
}

//----- (00658740) --------------------------------------------------------
bool __thiscall CharResMgr::Init(CharResMgr *this)
{
  CharResMgr *v1; // esi@1
  bool result; // al@2

  v1 = this;
  if ( CharResMgr::CreateAnimationController(this)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 1, 1)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 1, 0)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 6, 1)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 6, 0)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 11, 1)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 11, 0)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 16, 1)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 16, 0)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 21, 1)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 21, 0)
    && CharResMgr::CreateCharActorAndBaseSet(v1, 26, 1) )
    result = CharResMgr::CreateCharActorAndBaseSet(v1, 26, 0) != 0;
  else
    result = 0;
  return result;
}

//----- (00658820) --------------------------------------------------------
void __thiscall std::_Tree_val<std::_Tmap_traits<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>_0>>::__Tree_val<std::_Tmap_traits<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>_0>>(std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this)
{
  operator delete(this->baseclass_0._Myhead);
}

//----- (00658830) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00658890) --------------------------------------------------------
unsigned int __cdecl ITableBase<ChrBasicEquip_ChrBasicEquipTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97F28: using guessed type int ITableBase_ChrBasicEquip_ChrBasicEquipTab___ms_pkTable;

//----- (006588B0) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall ResetTexture::ProcessData(ResetTexture *this, NiAVObject *_pkObject, void *_pData)
{
  Ns_TourScene::TS_RESULT result; // eax@2
  char *v4; // edx@3
  NiProperty *v5; // eax@5

  if ( _pkObject && ((v4 = _pkObject->baseclass_0.m_pcName) == 0 || strcmp("Scene Root", v4)) )
  {
    v5 = NiAVObject::GetProperty(_pkObject, 8);
    if ( v5 )
      NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v5, (NiTexture *)_pData);
    result = 1;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (00658920) --------------------------------------------------------
void __thiscall CharResMgr::AddHouseToMap(CharResMgr *this, NiNode *pkNode, unsigned int dwHouseID)
{
  CharResMgr *v3; // esi@1
  NiPointer<PgWinBut> v4; // [sp-4h] [bp-Ch]@1
  NiPointer<PgWinBut> *v5; // [sp+4h] [bp-4h]@1

  v3 = this;
  v5 = &v4;
  v4.m_pObject = (PgWinBut *)pkNode;
  if ( pkNode )
    InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v3->m_kHouseMap,
    dwHouseID,
    v4);
}

//----- (00658960) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>(NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> > *this)
{
  NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C4128: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiActorManager___unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);

//----- (00658980) --------------------------------------------------------
void __thiscall NiTMap<unsigned_long_NiPointer<NiActorManager>>::_NiTMap<unsigned_long_NiPointer<NiActorManager>>(NiTMap<unsigned long,NiPointer<NiActorManager> > *this)
{
  NiTMap<unsigned long,NiPointer<NiActorManager> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 9C4128: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiActorManager___unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);
// 9C41E4: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);

//----- (006589F0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>(NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> > *this)
{
  NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C4148: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_CharSet___unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);

//----- (00658A10) --------------------------------------------------------
void __thiscall NiTMap<unsigned_long_NiPointer<CharSet>>::_NiTMap<unsigned_long_NiPointer<CharSet>>(NiTMap<unsigned long,NiPointer<CharSet> > *this)
{
  NiTMap<unsigned long,NiPointer<CharSet> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMap<unsigned_long_NiPointer<CharSet>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 9C4148: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_CharSet___unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);
// 9C4204: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);

//----- (00658A80) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> > *this)
{
  NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C4168: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00658AA0) --------------------------------------------------------
void __thiscall NiTMap<unsigned_long_NiPointer<NiNode>>::_NiTMap<unsigned_long_NiPointer<NiNode>>(NiTMap<unsigned long,NiPointer<NiNode> > *this)
{
  NiTMap<unsigned long,NiPointer<NiNode> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 9C4168: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4224: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00658B10) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> > *this)
{
  NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C4188: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00658B30) --------------------------------------------------------
void __thiscall NiTMap<unsigned_char_NiPointer<NiNode>>::_NiTMap<unsigned_char_NiPointer<NiNode>>(NiTMap<unsigned char,NiPointer<NiNode> > *this)
{
  NiTMap<unsigned char,NiPointer<NiNode> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_char_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 9C4188: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4244: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00658BA0) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> > *this)
{
  NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C41A8: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (00658BC0) --------------------------------------------------------
bool __thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *this, const char *key, NiPointer<NiShaderLibrary> *val)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *v3; // edi@1
  NiTMapItem<char const *,NiPointer<NiShaderLibrary> > *v4; // esi@1
  bool result; // al@4
  NiShaderLibrary *v6; // edi@5
  NiShaderLibrary *v7; // esi@10

  v3 = this;
  v4 = this->m_ppkHashTable[((int (__stdcall *)(_DWORD))this->vfptr->KeyToHashIndex)(key)];
  if ( v4 )
  {
    while ( !v3->vfptr->IsKeysEqual(v3, key, v4->m_key) )
    {
      v4 = v4->m_pkNext;
      if ( !v4 )
        goto LABEL_4;
    }
    v6 = val->m_pObject;
    if ( val->m_pObject != v4->m_val.m_pObject )
    {
      if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
        v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v7 = v4->m_val.m_pObject;
      val->m_pObject = v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
    }
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00658C50) --------------------------------------------------------
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NpSIF_Tool>>::SetValue(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexturingProperty> > *this, NiTMapItem<char const *,NiPointer<NiTexturingProperty> > *pkItem, const char *key, NiPointer<NiTexturingProperty> val)
{
  NiTexturingProperty *v4; // esi@1
  NiTexturingProperty *v5; // eax@1
  NiTexturingProperty *v6; // esi@10

  pkItem->m_key = key;
  v4 = pkItem->m_val.m_pObject;
  v5 = val.m_pObject;
  if ( v4 != val.m_pObject )
  {
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      v5 = val.m_pObject;
    }
    pkItem->m_val.m_pObject = v5;
    if ( v5 )
    {
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v5 = val.m_pObject;
    }
  }
  if ( v5 )
  {
    v6 = v5;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
  }
}

//----- (00658D10) --------------------------------------------------------
void __thiscall NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_NiTMap<unsigned_long_NiPointer<NiSourceTexture>>(NiTMap<unsigned long,NiPointer<NiSourceTexture> > *this)
{
  NiTMap<unsigned long,NiPointer<NiSourceTexture> > *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v1->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.m_ppkHashTable);
}
// 9C41A8: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C4264: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (00658D80) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_scalar_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4128: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiActorManager___unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);

//----- (00658DC0) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_long_NiPointer<NiActorManager>>::_scalar_deleting_destructor_(NiTMap<unsigned long,NiPointer<NiActorManager> > *this, unsigned int a2)
{
  NiTMap<unsigned long,NiPointer<NiActorManager> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiActorManager> >,unsigned long,NiPointer<NiActorManager> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiActorManager>>_unsigned_long_NiPointer<NiActorManager>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4128: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiActorManager___unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);
// 9C41E4: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiActorManager_____vftable_)(void *p, char);

//----- (00658E40) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4148: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_CharSet___unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);

//----- (00658E80) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_long_NiPointer<CharSet>>::_scalar_deleting_destructor_(NiTMap<unsigned long,NiPointer<CharSet> > *this, unsigned int a2)
{
  NiTMap<unsigned long,NiPointer<CharSet> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMap<unsigned_long_NiPointer<CharSet>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<CharSet> >,unsigned long,NiPointer<CharSet> >Vtbl *)&NiTMapBase<DFALL<NiPointer<CharSet>>_unsigned_long_NiPointer<CharSet>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4148: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_CharSet___unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);
// 9C4204: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_CharSet_____vftable_)(void *p, char);

//----- (00658F00) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4168: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00658F40) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_long_NiPointer<NiNode>>::_vector_deleting_destructor_(NiTMap<unsigned long,NiPointer<NiNode> > *this, unsigned int a2)
{
  NiTMap<unsigned long,NiPointer<NiNode> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned long,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4168: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4224: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00658FC0) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4188: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00659000) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_char_NiPointer<NiNode>>::_scalar_deleting_destructor_(NiTMap<unsigned char,NiPointer<NiNode> > *this, unsigned int a2)
{
  NiTMap<unsigned char,NiPointer<NiNode> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMap<unsigned_char_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiNode> >,unsigned char,NiPointer<NiNode> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_char_NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4188: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiNode___unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4244: using guessed type int (__thiscall *NiTMap_unsigned char_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00659080) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vector_deleting_destructor_(NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C41A8: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (006590C0) --------------------------------------------------------
void *__thiscall NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vector_deleting_destructor_(NiTMap<unsigned long,NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  NiTMap<unsigned long,NiPointer<NiSourceTexture> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMap<unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<NiPointer<NiSourceTexture> >,unsigned long,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<DFALL<NiPointer<NiSourceTexture>>_unsigned_long_NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C41A8: using guessed type int (__thiscall *NiTMapBase_DFALL_NiPointer_NiSourceTexture___unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C4264: using guessed type int (__thiscall *NiTMap_unsigned long_NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (00659140) --------------------------------------------------------
char __cdecl ChrBasicEquipTab::GetByIndex(ChrClassType eChrClassType, char byGender)
{
  unsigned int v2; // esi@1
  void *v3; // eax@2
  char result; // al@4

  v2 = 0;
  if ( ITableBase<ChrBasicEquip_ChrBasicEquipTab>::GetTotal() )
  {
    while ( 1 )
    {
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ChrBasicEquip_ChrBasicEquipTab>::ms_pkTable + 4), v2);
      if ( *(_DWORD *)v3 == eChrClassType )
        break;
      ++v2;
      if ( v2 >= ITableBase<ChrBasicEquip_ChrBasicEquipTab>::GetTotal() )
        goto LABEL_4;
    }
    if ( byGender == 1 )
      result = *((_BYTE *)v3 + 4);
    else
      result = *((_BYTE *)v3 + 5);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97F28: using guessed type int ITableBase_ChrBasicEquip_ChrBasicEquipTab___ms_pkTable;

//----- (00659190) --------------------------------------------------------
NiKFMTool::Sequence *__thiscall NiKFMTool::GetSequence(NiKFMTool *this, unsigned int uiSequenceID)
{
  bool v2; // al@1

  v2 = NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&this->m_mapSequences,
         uiSequenceID,
         (NiVBSet **)&uiSequenceID);
  return (NiKFMTool::Sequence *)(v2 != 0 ? uiSequenceID : 0);
}

//----- (006591C0) --------------------------------------------------------
char *__cdecl CharClass::GetBaseEngName(char kClassID)
{
  char v1; // al@2
  void *v2; // eax@9
  char *result; // eax@10

  switch ( kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v1 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v1 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v1 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v1 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v1 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v1 = 26;
      break;
    default:
      v1 = 0;
      break;
  }
  v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), (unsigned __int8)v1);
  if ( v2 )
    result = (char *)v2 + 5;
  else
    result = &byte_9788EB;
  return result;
}
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (00659280) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetCharActorFromMap(CharResMgr *this, char kClassID, char byGender)
{
  const char *v3; // eax@1
  int v4; // esi@1
  NiActorManager *v5; // edi@2
  NiActorManager *result; // eax@4

  v3 = (const char *)(((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)this,
    v3,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v4 = kClassID;
  if ( kClassID )
  {
    NiObjectNET::ms_eCopyType = 1;
    v5 = NiActorManager::Clone((NiActorManager *)kClassID);
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    result = v5;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659330) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetCharActorFromMap_NoClone(CharResMgr *this, char kClassID, char byGender)
{
  const char *v3; // eax@1
  NiActorManager *v4; // esi@1
  NiActorManager *result; // eax@4

  v3 = (const char *)(((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)this,
    v3,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v4 = (NiActorManager *)kClassID;
  if ( kClassID )
  {
    if ( !InterlockedDecrement((volatile LONG *)(kClassID + 4)) )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    result = v4;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006593D0) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetRidePetActorFromMap(CharResMgr *this, unsigned __int16 wPetID)
{
  NiActorManager *v2; // esi@1
  NiActorManager *v3; // edi@2
  NiActorManager *result; // eax@4
  NiPointer<NiActorManager> spActor; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spActor.m_pObject = 0;
  v6 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kRidePetMap,
    (const char *)wPetID,
    (NiPointer<NiShaderLibrary> *)&spActor);
  v2 = spActor.m_pObject;
  if ( spActor.m_pObject )
  {
    NiObjectNET::ms_eCopyType = 1;
    v3 = NiActorManager::Clone(spActor.m_pObject);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    result = v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659480) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetMoverActorFromMap(CharResMgr *this, unsigned int kMoverID)
{
  NiActorManager *v2; // esi@1
  NiActorManager *v3; // edi@2
  NiActorManager *result; // eax@4
  NiPointer<NiActorManager> spActor; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spActor.m_pObject = 0;
  v6 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kMoverMap,
    (const char *)kMoverID,
    (NiPointer<NiShaderLibrary> *)&spActor);
  v2 = spActor.m_pObject;
  if ( spActor.m_pObject )
  {
    NiObjectNET::ms_eCopyType = 1;
    v3 = NiActorManager::Clone(spActor.m_pObject);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    result = v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659520) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetPetActorFromMap(CharResMgr *this, unsigned int kPetID)
{
  NiActorManager *v2; // esi@1
  NiActorManager *v3; // edi@2
  NiActorManager *result; // eax@4
  NiPointer<NiActorManager> spActor; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spActor.m_pObject = 0;
  v6 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kPetMap,
    (const char *)kPetID,
    (NiPointer<NiShaderLibrary> *)&spActor);
  v2 = spActor.m_pObject;
  if ( spActor.m_pObject )
  {
    NiObjectNET::ms_eCopyType = 1;
    v3 = NiActorManager::Clone(spActor.m_pObject);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    result = v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (006595C0) --------------------------------------------------------
NiActorManager *__thiscall CharResMgr::GetMobActorFromMap(CharResMgr *this, unsigned __int16 kMobID)
{
  const char *v2; // eax@1
  int v3; // esi@1
  NiActorManager *v4; // edi@2
  NiActorManager *result; // eax@4

  v2 = (const char *)kMobID;
  *(_DWORD *)&kMobID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kMobActorMap,
    v2,
    (NiPointer<NiShaderLibrary> *)&kMobID);
  v3 = kMobID;
  NiObjectNET::ms_eCopyType = 1;
  if ( kMobID )
  {
    NiObjectNET::ms_eCopyType = 1;
    v4 = NiActorManager::Clone((NiActorManager *)kMobID);
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    result = v4;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659670) --------------------------------------------------------
CharSet *__thiscall CharResMgr::GetCharSetFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo)
{
  int v4; // eax@1
  CharSet *v5; // esi@1

  v4 = wNo | (((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kCharSetMap,
    (const char *)v4,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v5 = (CharSet *)kClassID;
  if ( kClassID && !InterlockedDecrement((volatile LONG *)(kClassID + 4)) )
    v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  return v5;
}

//----- (00659700) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetHouseFromMap(CharResMgr *this, unsigned int dwHouseID)
{
  NiNode *v2; // esi@1
  NiObject *v3; // edi@2
  NiNode *result; // eax@4
  NiPointer<NiNode> spNode; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spNode.m_pObject = 0;
  v6 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kHouseMap,
    (const char *)dwHouseID,
    (NiPointer<NiShaderLibrary> *)&spNode);
  v2 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    NiObjectNET::ms_eCopyType = 1;
    v3 = NiObject::Clone(&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    result = (NiNode *)v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (006597A0) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetQuestInfoFromMap(CharResMgr *this, unsigned int dwQuestInfo)
{
  NiNode *v2; // esi@1
  NiObject *v3; // edi@2
  NiNode *result; // eax@4
  NiPointer<NiNode> spNode; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spNode.m_pObject = 0;
  v6 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kQuestInfoMap,
    (const char *)dwQuestInfo,
    (NiPointer<NiShaderLibrary> *)&spNode);
  v2 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    NiObjectNET::ms_eCopyType = 1;
    v3 = NiObject::Clone(&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    result = (NiNode *)v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659850) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetHairFromMap(CharResMgr *this, char kClassID, char byGender, char byID, char byPartsNum)
{
  int v5; // eax@1
  int v6; // esi@1
  NiObject *v7; // edi@2
  NiNode *result; // eax@4

  v5 = (unsigned __int8)byPartsNum | (((unsigned __int8)byID | (((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 8)) << 8);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kHairMap,
    (const char *)v5,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v6 = kClassID;
  if ( kClassID )
  {
    NiObjectNET::ms_eCopyType = 1;
    v7 = NiObject::Clone((NiObject *)kClassID);
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
    result = (NiNode *)v7;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659910) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetFaceFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wType)
{
  int v4; // eax@1
  int v5; // esi@1
  NiObject *v6; // edi@2
  NiNode *result; // eax@4

  v4 = wType | (((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kFaceMap,
    (const char *)v4,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v5 = kClassID;
  if ( kClassID )
  {
    NiObjectNET::ms_eCopyType = 1;
    v6 = NiObject::Clone((NiObject *)kClassID);
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    result = (NiNode *)v6;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (006599D0) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetItemFromMap(CharResMgr *this, unsigned __int16 kItemID, char byParsingType)
{
  int v3; // eax@1
  int v4; // esi@1
  NiObject *v5; // edi@2
  NiNode *result; // eax@4

  v3 = kItemID | ((unsigned __int8)byParsingType << 24);
  *(_DWORD *)&byParsingType = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kItemMap,
    (const char *)v3,
    (NiPointer<NiShaderLibrary> *)&byParsingType);
  v4 = byParsingType;
  if ( byParsingType )
  {
    NiObjectNET::ms_eCopyType = 1;
    v5 = NiObject::Clone((NiObject *)byParsingType);
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    result = (NiNode *)v5;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659A80) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetDropItemFromMap(CharResMgr *this, unsigned __int16 kItemID)
{
  const char *v2; // eax@1
  int v3; // esi@1
  NiObject *v4; // edi@2
  NiNode *result; // eax@4

  v2 = (const char *)kItemID;
  *(_DWORD *)&kItemID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kDropItemMap,
    v2,
    (NiPointer<NiShaderLibrary> *)&kItemID);
  v3 = kItemID;
  if ( kItemID )
  {
    NiObjectNET::ms_eCopyType = 1;
    v4 = NiObject::Clone((NiObject *)kItemID);
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    result = (NiNode *)v4;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00659B30) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetFaceTextureFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo)
{
  int v4; // eax@1
  NiSourceTexture *v5; // esi@1

  v4 = wNo | (((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kFaceTextureMap,
    (const char *)v4,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v5 = (NiSourceTexture *)kClassID;
  if ( kClassID && !InterlockedDecrement((volatile LONG *)(kClassID + 4)) )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  return v5;
}

//----- (00659BD0) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetSetTextureFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 kItemID)
{
  int v4; // eax@1
  NiSourceTexture *v5; // esi@1

  v4 = kItemID | (((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kSetTextureMap,
    (const char *)v4,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v5 = (NiSourceTexture *)kClassID;
  if ( kClassID && !InterlockedDecrement((volatile LONG *)(kClassID + 4)) )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  return v5;
}

//----- (00659C70) --------------------------------------------------------
void __thiscall CharResMgr::AddMoverActorToMap(CharResMgr *this, NiActorManager *pkActor, unsigned int kMoverID)
{
  CharResMgr *v3; // esi@1
  NiPointer<PgWinBut> v4; // [sp-4h] [bp-Ch]@1
  NiPointer<PgWinBut> *v5; // [sp+4h] [bp-4h]@1

  v3 = this;
  v5 = &v4;
  v4.m_pObject = (PgWinBut *)pkActor;
  if ( pkActor )
    InterlockedIncrement((volatile LONG *)&pkActor->baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v3->m_kMoverMap,
    kMoverID,
    v4);
}

//----- (00659CB0) --------------------------------------------------------
void __thiscall CharResMgr::AddPetActorToMap(CharResMgr *this, NiActorManager *pkActor, unsigned int kPetID)
{
  CharResMgr *v3; // esi@1
  NiPointer<PgWinBut> v4; // [sp-4h] [bp-Ch]@1
  NiPointer<PgWinBut> *v5; // [sp+4h] [bp-4h]@1

  v3 = this;
  v5 = &v4;
  v4.m_pObject = (PgWinBut *)pkActor;
  if ( pkActor )
    InterlockedIncrement((volatile LONG *)&pkActor->baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v3->m_kPetMap,
    kPetID,
    v4);
}

//----- (00659CF0) --------------------------------------------------------
NiSourceTexture *__thiscall CharResMgr::GetClosedEyeFromMap(CharResMgr *this, char kClassID, char byGender, unsigned __int16 wNo)
{
  int v4; // eax@1
  NiSourceTexture *v5; // esi@1

  v4 = wNo | (((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16);
  *(_DWORD *)&kClassID = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kClosedEyeMap,
    (const char *)v4,
    (NiPointer<NiShaderLibrary> *)&kClassID);
  v5 = (NiSourceTexture *)kClassID;
  if ( kClassID && !InterlockedDecrement((volatile LONG *)(kClassID + 4)) )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  return v5;
}

//----- (00659D90) --------------------------------------------------------
void __thiscall CharResMgr::AddSetTextureToMap(CharResMgr *this, NiSourceTexture *pkTexture, char kClassID, char byGender, unsigned __int16 kItemID)
{
  CharResMgr *v5; // edi@1
  NiPointer<PgWinBut> v6; // [sp-4h] [bp-Ch]@1

  v5 = this;
  v6.m_pObject = (PgWinBut *)pkTexture;
  if ( pkTexture )
    InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v5->m_kSetTextureMap,
    kItemID | (((unsigned __int8)byGender | ((unsigned __int8)kClassID << 8)) << 16),
    v6);
}

//----- (00659DE0) --------------------------------------------------------
NiTMapItem<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *__thiscall NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::NewItem(NiTMap<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *this)
{
  void *v1; // eax@1
  void *v2; // edi@2
  int v3; // esi@4

  v1 = operator new(0xCu);
  if ( v1 )
  {
    *((_DWORD *)v1 + 2) = 0;
    v2 = v1;
  }
  else
  {
    v2 = 0;
  }
  v3 = *((_DWORD *)v2 + 2);
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    *((_DWORD *)v2 + 2) = 0;
  }
  return (NiTMapItem<char const *,NiPointer<NiD3DXEffectTechniqueSet> > *)v2;
}

//----- (00659E30) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::find(...)
{
  int v3; // edx@1
  int v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *v5; // eax@8

  v3 = *((_DWORD *)&this->baseclass_0 + 1);
  v4 = *(_DWORD *)(v3 + 4);
  while ( !*(_BYTE *)(v4 + 33) )
  {
    if ( (NiActorManager *const )*(_DWORD *)(v4 + 12) >= *_Keyval )
    {
      v3 = v4;
      v4 = *(_DWORD *)v4;
    }
    else
    {
      v4 = *(_DWORD *)(v4 + 8);
    }
  }
  if ( v3 == *((_DWORD *)&this->baseclass_0 + 1) || *_Keyval < (NiActorManager *const )*(_DWORD *)(v3 + 12) )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *((_DWORD *)&this->baseclass_0
                                                                                         + 1);
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (00659EA0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *v3; // edi@1
  int v4; // esi@4
  int v5; // ebx@4
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *thisa; // [sp+4h] [bp-10h]@1

  thisa = this;
  v2 = _Rootnode;
  v3 = _Rootnode;
  if ( !_Rootnode->_Isnil )
  {
    while ( 1 )
    {
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
        thisa,
        v3->_Right);
      v3 = v3->_Left;
      v4 = (int)&v2->_Myval;
      v5 = *(_DWORD *)(v4 + 28);
      if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      if ( *(_DWORD *)(v4 + 20) >= 0x10u )
        operator delete(*(void **)v4);
      *(_DWORD *)(v4 + 20) = 15;
      *(_DWORD *)(v4 + 16) = 0;
      *(_BYTE *)v4 = 0;
      operator delete(_Rootnode);
      _Rootnode = v3;
      if ( v3->_Isnil )
        break;
      v2 = v3;
    }
  }
}

//----- (00659F80) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(...)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v3; // ebx@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v6; // esi@8
  int v7; // eax@10
  int v8; // ebx@15
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v9; // eax@17
  int v10; // ebx@20
  int v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *i; // ecx@36
  int v15; // eax@38
  void **v16; // esi@59
  int v17; // edi@59
  int v18; // eax@65
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *v19; // eax@67
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s _Erasednode; // [sp+4h] [bp-14h]@3
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *thisa; // [sp+8h] [bp-10h]@1

  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 45) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  v3 = _Where;
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 45) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 45) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = *((_DWORD *)&thisa->baseclass_0 + 1);
    if ( *(_DWORD *)(v7 + 4) == v3 )
    {
      *(_DWORD *)(v7 + 4) = v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    v8 = *((_DWORD *)&thisa->baseclass_0 + 1);
    if ( *(_DWORD *)v8 == _Erasednode )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 45) )
        v9 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v6;
      else
        v9 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v4);
      *(_DWORD *)v8 = v9;
    }
    v10 = *((_DWORD *)&thisa->baseclass_0 + 1);
    if ( *(_DWORD *)(v10 + 8) == _Erasednode )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 45) )
        *(_DWORD *)(v10 + 8) = v6;
      else
        *(_DWORD *)(v10 + 8) = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 45) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 45) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = *((_DWORD *)&thisa->baseclass_0 + 1);
  if ( *(_DWORD *)(v11 + 4) == v3 )
  {
    *(_DWORD *)(v11 + 4) = v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 44);
  *(_BYTE *)(*(_DWORD *)&v5 + 44) = *(_BYTE *)(*(_DWORD *)&v3 + 44);
  *(_BYTE *)(*(_DWORD *)&v3 + 44) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 44) == 1 )
  {
    for ( i = thisa;
          v4 != *(_DWORD *)(*((_DWORD *)&i->baseclass_0 + 1) + 4);
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 44) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 44) )
        {
          *(_BYTE *)(v15 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 0;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 45) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 44) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 44) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 44) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 44) = 1;
            *(_BYTE *)(v15 + 44) = 0;
            std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 44) = *(_BYTE *)(*(_DWORD *)&v6 + 44);
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 44) = 1;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 44) )
        {
          *(_BYTE *)(v15 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 0;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 45) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 44) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 44) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 44) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 44) = 1;
            *(_BYTE *)(v15 + 44) = 0;
            std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 44) = *(_BYTE *)(*(_DWORD *)&v6 + 44);
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 44) = 1;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 44) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 44) = 1;
  }
  v16 = (void **)(*(_DWORD *)&_Erasednode + 12);
  v17 = *(_DWORD *)(*(_DWORD *)&_Erasednode + 40);
  if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v17)(v17, 1);
  if ( *(_DWORD *)(*(_DWORD *)&_Erasednode + 32) >= 0x10u )
    operator delete(*v16);
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 32) = 15;
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 28) = 0;
  *(_BYTE *)v16 = 0;
  operator delete(*(void **)&_Erasednode);
  v18 = *((_DWORD *)&thisa->baseclass_0 + 2);
  if ( v18 )
    *((_DWORD *)&thisa->baseclass_0 + 2) = v18 - 1;
  v19 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v19;
}

//----- (0065A260) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Insert(...)
{
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
      this,
      result,
      1,
      v5,
      _Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < *(_DWORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        this,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)&_Where,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        this,
        result,
        0,
        v8,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= *(_DWORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiSourceTexture>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >,bool> *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 21) )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        v4,
        result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        v4,
        result,
        1,
        _Node,
        v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        v4,
        result,
        0,
        _Node,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        v4,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (0065A3C0) --------------------------------------------------------
NiNode *__thiscall CharResMgr::GetSubItemFromMap(CharResMgr *this, const char *szName)
{
  CharResMgr *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v3; // eax@1
  int v4; // esi@1
  unsigned int v5; // edi@2
  int v6; // eax@2
  unsigned int v7; // ebx@4
  unsigned int v8; // edx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@6
  int v10; // eax@8
  bool v11; // sf@8
  signed int v12; // eax@10
  int *v13; // eax@14
  int v14; // esi@16
  NiObject *v15; // ecx@19
  NiNode *result; // eax@20
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v17; // [sp+0h] [bp-38h]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiNode>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic iterEnd; // [sp+4h] [bp-34h]@1
  int v19; // [sp+8h] [bp-30h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+Ch] [bp-2Ch]@1
  unsigned int v21; // [sp+28h] [bp-10h]@1
  int v22; // [sp+34h] [bp-4h]@1
  int v23; // [sp+38h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  iterEnd = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiNode>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic)*((_DWORD *)&this->m_kSubItemMap.baseclass_0.baseclass_0 + 1);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v22 = 0;
  v3 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&v2->m_kSubItemMap,
         &thisa);
  v4 = *((_DWORD *)&v2->m_kSubItemMap.baseclass_0.baseclass_0 + 1);
  v17 = v3;
  if ( v3 == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4 )
    goto LABEL_24;
  v5 = v3->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v6 = (int)&v3->_Myval;
  if ( *(_DWORD *)(v6 + 20) >= 0x10u )
    v6 = *(_DWORD *)v6;
  v7 = thisa.baseclass_0._Mysize;
  v8 = thisa.baseclass_0._Mysize;
  if ( thisa.baseclass_0._Mysize >= v5 )
    v8 = v5;
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
  if ( thisa.baseclass_0._Myres < 0x10 )
    v9 = &thisa;
  v10 = std::char_traits<char>::compare(v9->baseclass_0.___u0.baseclass_0.dummy, (const char *)v6, v8);
  v11 = v10 < 0;
  if ( !v10 )
  {
    if ( v7 >= v5 )
      v12 = v7 != v5;
    else
      v12 = -1;
    v11 = v12 < 0;
  }
  if ( v11 )
  {
LABEL_24:
    v19 = v4;
    v13 = &v19;
  }
  else
  {
    v13 = (int *)&v17;
  }
  v14 = *v13;
  v22 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v14 != iterEnd && (v15 = *(NiObject **)(v14 + 40)) != 0 )
  {
    NiObjectNET::ms_eCopyType = 1;
    result = (NiNode *)NiObject::Clone(v15);
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (0065A510) --------------------------------------------------------
NiTexture *__thiscall CharResMgr::GetSubItemTextureMap(CharResMgr *this, const char *szName)
{
  CharResMgr *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v3; // eax@1
  int v4; // esi@1
  unsigned int v5; // edi@2
  int v6; // eax@2
  unsigned int v7; // ebx@4
  unsigned int v8; // edx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@6
  int v10; // eax@8
  bool v11; // sf@8
  signed int v12; // eax@10
  int *v13; // eax@14
  int v14; // esi@16
  NiObject *v15; // ecx@19
  NiTexture *result; // eax@20
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v17; // [sp+0h] [bp-38h]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba iterEnd; // [sp+4h] [bp-34h]@1
  int v19; // [sp+8h] [bp-30h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+Ch] [bp-2Ch]@1
  unsigned int v21; // [sp+28h] [bp-10h]@1
  int v22; // [sp+34h] [bp-4h]@1
  int v23; // [sp+38h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  iterEnd = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)*((_DWORD *)&this->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v22 = 0;
  v3 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&v2->m_kSubItemTextureMap,
         &thisa);
  v4 = *((_DWORD *)&v2->m_kSubItemTextureMap.baseclass_0.baseclass_0 + 1);
  v17 = v3;
  if ( v3 == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4 )
    goto LABEL_24;
  v5 = v3->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v6 = (int)&v3->_Myval;
  if ( *(_DWORD *)(v6 + 20) >= 0x10u )
    v6 = *(_DWORD *)v6;
  v7 = thisa.baseclass_0._Mysize;
  v8 = thisa.baseclass_0._Mysize;
  if ( thisa.baseclass_0._Mysize >= v5 )
    v8 = v5;
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
  if ( thisa.baseclass_0._Myres < 0x10 )
    v9 = &thisa;
  v10 = std::char_traits<char>::compare(v9->baseclass_0.___u0.baseclass_0.dummy, (const char *)v6, v8);
  v11 = v10 < 0;
  if ( !v10 )
  {
    if ( v7 >= v5 )
      v12 = v7 != v5;
    else
      v12 = -1;
    v11 = v12 < 0;
  }
  if ( v11 )
  {
LABEL_24:
    v19 = v4;
    v13 = &v19;
  }
  else
  {
    v13 = (int *)&v17;
  }
  v14 = *v13;
  v22 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v14 != iterEnd && (v15 = *(NiObject **)(v14 + 40)) != 0 )
  {
    NiObjectNET::ms_eCopyType = 1;
    result = (NiTexture *)NiObject::Clone(v15);
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (0065A660) --------------------------------------------------------
NiTexture *__thiscall CharResMgr::GetItemTextureMap(CharResMgr *this, const char *szName)
{
  CharResMgr *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v3; // eax@1
  int v4; // esi@1
  unsigned int v5; // edi@2
  int v6; // eax@2
  unsigned int v7; // ebx@4
  unsigned int v8; // edx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@6
  int v10; // eax@8
  bool v11; // sf@8
  signed int v12; // eax@10
  int *v13; // eax@14
  int v14; // esi@16
  NiObject *v15; // ecx@19
  NiTexture *result; // eax@20
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v17; // [sp+0h] [bp-38h]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba iterEnd; // [sp+4h] [bp-34h]@1
  int v19; // [sp+8h] [bp-30h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+Ch] [bp-2Ch]@1
  unsigned int v21; // [sp+28h] [bp-10h]@1
  int v22; // [sp+34h] [bp-4h]@1
  int v23; // [sp+38h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  iterEnd = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)*((_DWORD *)&this->m_kItemTextureMap.baseclass_0.baseclass_0 + 1);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v22 = 0;
  v3 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&v2->m_kItemTextureMap,
         &thisa);
  v4 = *((_DWORD *)&v2->m_kItemTextureMap.baseclass_0.baseclass_0 + 1);
  v17 = v3;
  if ( v3 == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4 )
    goto LABEL_24;
  v5 = v3->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v6 = (int)&v3->_Myval;
  if ( *(_DWORD *)(v6 + 20) >= 0x10u )
    v6 = *(_DWORD *)v6;
  v7 = thisa.baseclass_0._Mysize;
  v8 = thisa.baseclass_0._Mysize;
  if ( thisa.baseclass_0._Mysize >= v5 )
    v8 = v5;
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
  if ( thisa.baseclass_0._Myres < 0x10 )
    v9 = &thisa;
  v10 = std::char_traits<char>::compare(v9->baseclass_0.___u0.baseclass_0.dummy, (const char *)v6, v8);
  v11 = v10 < 0;
  if ( !v10 )
  {
    if ( v7 >= v5 )
      v12 = v7 != v5;
    else
      v12 = -1;
    v11 = v12 < 0;
  }
  if ( v11 )
  {
LABEL_24:
    v19 = v4;
    v13 = &v19;
  }
  else
  {
    v13 = (int *)&v17;
  }
  v14 = *v13;
  v22 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v14 != iterEnd && (v15 = *(NiObject **)(v14 + 40)) != 0 )
  {
    NiObjectNET::ms_eCopyType = 1;
    result = (NiTexture *)NiObject::Clone(v15);
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (0065A7B0) --------------------------------------------------------
NiTexture *__thiscall CharResMgr::GetMiniHouseTextureMap(CharResMgr *this, const char *szName)
{
  CharResMgr *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v3; // eax@1
  int v4; // esi@1
  unsigned int v5; // edi@2
  int v6; // eax@2
  unsigned int v7; // ebx@4
  unsigned int v8; // edx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@6
  int v10; // eax@8
  bool v11; // sf@8
  signed int v12; // eax@10
  int *v13; // eax@14
  int v14; // esi@16
  NiObject *v15; // ecx@19
  NiTexture *result; // eax@20
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v17; // [sp+0h] [bp-38h]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba iterEnd; // [sp+4h] [bp-34h]@1
  int v19; // [sp+8h] [bp-30h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+Ch] [bp-2Ch]@1
  unsigned int v21; // [sp+28h] [bp-10h]@1
  int v22; // [sp+34h] [bp-4h]@1
  int v23; // [sp+38h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  iterEnd = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)*((_DWORD *)&this->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v22 = 0;
  v3 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&v2->m_kMiniHouseTextureMap,
         &thisa);
  v4 = *((_DWORD *)&v2->m_kMiniHouseTextureMap.baseclass_0.baseclass_0 + 1);
  v17 = v3;
  if ( v3 == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4 )
    goto LABEL_24;
  v5 = v3->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v6 = (int)&v3->_Myval;
  if ( *(_DWORD *)(v6 + 20) >= 0x10u )
    v6 = *(_DWORD *)v6;
  v7 = thisa.baseclass_0._Mysize;
  v8 = thisa.baseclass_0._Mysize;
  if ( thisa.baseclass_0._Mysize >= v5 )
    v8 = v5;
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
  if ( thisa.baseclass_0._Myres < 0x10 )
    v9 = &thisa;
  v10 = std::char_traits<char>::compare(v9->baseclass_0.___u0.baseclass_0.dummy, (const char *)v6, v8);
  v11 = v10 < 0;
  if ( !v10 )
  {
    if ( v7 >= v5 )
      v12 = v7 != v5;
    else
      v12 = -1;
    v11 = v12 < 0;
  }
  if ( v11 )
  {
LABEL_24:
    v19 = v4;
    v13 = &v19;
  }
  else
  {
    v13 = (int *)&v17;
  }
  v14 = *v13;
  v22 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v14 != iterEnd && (v15 = *(NiObject **)(v14 + 40)) != 0 )
  {
    NiObjectNET::ms_eCopyType = 1;
    result = (NiTexture *)NiObject::Clone(v15);
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (0065A900) --------------------------------------------------------
NiTexture *__thiscall CharResMgr::GetHairTextureFromMap(CharResMgr *this, const char *szName)
{
  CharResMgr *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v3; // eax@1
  int v4; // esi@1
  unsigned int v5; // edi@2
  int v6; // eax@2
  unsigned int v7; // ebx@4
  unsigned int v8; // edx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@6
  int v10; // eax@8
  bool v11; // sf@8
  signed int v12; // eax@10
  int *v13; // eax@14
  int v14; // esi@16
  NiObject *v15; // ecx@19
  NiTexture *result; // eax@20
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v17; // [sp+0h] [bp-38h]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba iterEnd; // [sp+4h] [bp-34h]@1
  int v19; // [sp+8h] [bp-30h]@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+Ch] [bp-2Ch]@1
  unsigned int v21; // [sp+28h] [bp-10h]@1
  int v22; // [sp+34h] [bp-4h]@1
  int v23; // [sp+38h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  iterEnd = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)*((_DWORD *)&this->m_kHairTextureMap.baseclass_0.baseclass_0 + 1);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v22 = 0;
  v3 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&v2->m_kHairTextureMap,
         &thisa);
  v4 = *((_DWORD *)&v2->m_kHairTextureMap.baseclass_0.baseclass_0 + 1);
  v17 = v3;
  if ( v3 == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4 )
    goto LABEL_24;
  v5 = v3->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v6 = (int)&v3->_Myval;
  if ( *(_DWORD *)(v6 + 20) >= 0x10u )
    v6 = *(_DWORD *)v6;
  v7 = thisa.baseclass_0._Mysize;
  v8 = thisa.baseclass_0._Mysize;
  if ( thisa.baseclass_0._Mysize >= v5 )
    v8 = v5;
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
  if ( thisa.baseclass_0._Myres < 0x10 )
    v9 = &thisa;
  v10 = std::char_traits<char>::compare(v9->baseclass_0.___u0.baseclass_0.dummy, (const char *)v6, v8);
  v11 = v10 < 0;
  if ( !v10 )
  {
    if ( v7 >= v5 )
      v12 = v7 != v5;
    else
      v12 = -1;
    v11 = v12 < 0;
  }
  if ( v11 )
  {
LABEL_24:
    v19 = v4;
    v13 = &v19;
  }
  else
  {
    v13 = (int *)&v17;
  }
  v14 = *v13;
  v22 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v14 != iterEnd && (v15 = *(NiObject **)(v14 + 40)) != 0 )
  {
    NiObjectNET::ms_eCopyType = 1;
    result = (NiTexture *)NiObject::Clone(v15);
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (0065AA50) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v6; // edi@4
  int v7; // edx@4
  int v8; // edx@7
  int v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v11; // edx@12
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v13; // esi@13
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v14; // edx@16
  int v15; // esi@18
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v16; // esi@20
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v17; // edx@24
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v18; // esi@24
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v19; // edi@24
  int v20; // edi@26
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v21; // edi@28
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v22; // esi@31
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v23; // edx@34
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v24; // esi@34
  int v25; // esi@36
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v26; // esi@38
  int v27; // edi@44
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v28; // edi@46
  int v29; // ecx@52
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *v30; // eax@52

  v5 = *((_DWORD *)&this->baseclass_0 + 2);
  if ( v5 >= 0x7FFFFFE )
  {
    std::_Dest_val<std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>(
      (std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > > *)&this->baseclass_0
    + 13,
      &_Newnode->_Myval);
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v6 = _Newnode;
  *((_DWORD *)&this->baseclass_0 + 2) = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v7 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v7 )
  {
    *(_DWORD *)(v7 + 4) = _Newnode;
    **((_DWORD **)&this->baseclass_0 + 1) = _Newnode;
    *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 8) = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)v8 )
        *(_DWORD *)v8 = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)(v9 + 8) )
        *(_DWORD *)(v9 + 8) = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)(v15 + 4) )
          {
            *(_DWORD *)(v15 + 4) = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)(v20 + 4) )
        {
          *(_DWORD *)(v20 + 4) = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)(v25 + 4) )
          {
            *(_DWORD *)(v25 + 4) = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)(v27 + 4) )
        {
          *(_DWORD *)(v27 + 4) = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 4);
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  *(_BYTE *)(v29 + 44) = 1;
  return v30;
}

//----- (0065AC80) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *v4; // esi@1
  int v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v6; // ecx@1
  int v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = _First;
  if ( _First != *(_DWORD *)v5 || _Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 45) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 45) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 45);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 45);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Erase(
      v4,
      *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)(v5 + 4));
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 4) = *((_DWORD *)&v4->baseclass_0 + 1);
    **((_DWORD **)&v4->baseclass_0 + 1) = *((_DWORD *)&v4->baseclass_0 + 1);
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 8) = *((_DWORD *)&v4->baseclass_0 + 1);
    v7 = *((_DWORD *)&v4->baseclass_0 + 1);
    v8 = result;
    *((_DWORD *)&v4->baseclass_0 + 2) = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)v7;
  }
  return v8;
}

//----- (0065AD40) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>(std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *this, std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *_Right)
{
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *v2; // esi@1
  void *v3; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v4; // eax@3
  unsigned int v5; // eax@3
  std::exception thisa; // [sp+0h] [bp-20h]@5
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *v7; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@5
  int v9; // [sp+1Ch] [bp-4h]@2

  v2 = this;
  v7 = this;
  this->baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x18u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v2->baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v2->baseclass_0.baseclass_0._Myhead->_Parent = v2->baseclass_0.baseclass_0._Myhead;
  v2->baseclass_0.baseclass_0._Myhead->_Right = v2->baseclass_0.baseclass_0._Myhead;
  v2->baseclass_0.baseclass_0._Myhead->_Color = 1;
  v2->baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v9 = 0;
  if ( v2 != _Right )
  {
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(
      v2,
      v2->baseclass_0.baseclass_0._Myhead->_Parent);
    v2->baseclass_0.baseclass_0._Myhead->_Parent = v2->baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0._Myhead->_Left = v2->baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0._Myhead->_Right = v2->baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0._Mysize = 0;
    v4 = v2->baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0._Myhead = _Right->baseclass_0.baseclass_0._Myhead;
    _Right->baseclass_0.baseclass_0._Myhead = v4;
    v5 = v2->baseclass_0.baseclass_0._Mysize;
    v2->baseclass_0.baseclass_0._Mysize = _Right->baseclass_0.baseclass_0._Mysize;
    _Right->baseclass_0.baseclass_0._Mysize = v5;
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0065AE20) --------------------------------------------------------
NiPointer<NiControllerSequence> *__thiscall std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>::operator__(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this, const unsigned int *_Keyval)
{
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v5; // edi@1
  const unsigned int v6; // ecx@8
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v7; // eax@8
  NiPointer<NiControllerSequence> *result; // eax@8
  std::pair<unsigned long const ,NiPointer<NiControllerSequence> > _Val; // [sp+0h] [bp-18h]@8
  int v10; // [sp+8h] [bp-10h]@8
  int v11; // [sp+14h] [bp-4h]@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= *(_DWORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (NiPointer<NiControllerSequence> *)(*(_DWORD *)&v5 + 16);
  }
  else
  {
    v10 = 0;
    v6 = *_Keyval;
    v11 = 0;
    _Val.baseclass_0.first = v6;
    _Val.baseclass_0.second.m_pObject = 0;
    LOBYTE(v11) = 1;
    v7 = std::_Tree_val<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Buynode<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>(
           &v2->baseclass_0.baseclass_0,
           &_Val);
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Keyval,
      v5,
      v7);
    result = (NiPointer<NiControllerSequence> *)(_Keyval + 4);
  }
  return result;
}

//----- (0065AEF0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Insert(...)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *v4; // ebx@1
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *v5; // esi@1
  int v6; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *v8; // eax@2
  const char *v9; // eax@4
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *v10; // eax@17
  int v11; // ecx@23
  char v12; // [sp+Ch] [bp-8h]@23

  v4 = _Node;
  v5 = this;
  v6 = *((_DWORD *)&this->baseclass_0 + 1);
  v7 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&_Node->_Myval;
  if ( !*((_DWORD *)&this->baseclass_0 + 2) )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)this,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v6,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)_Node);
    return result;
  }
  if ( _Where == *(_DWORD *)v6 )
  {
    v9 = (const char *)(*(_DWORD *)&_Where + 12);
    if ( *(_DWORD *)(*(_DWORD *)&_Where + 32) >= 0x10u )
      v9 = *(const char **)v9;
    if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &_Node->_Myval.baseclass_0.first,
           0,
           _Node->_Myval.baseclass_0.first.baseclass_0._Mysize,
           v9,
           *(_DWORD *)(*(_DWORD *)&_Where + 28)) < 0 )
    {
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)v5,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v4);
      return result;
    }
    goto LABEL_23;
  }
  if ( _Where == v6 )
  {
    if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
           (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)this,
           (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)(v6 + 8) + 12),
           &_Node->_Myval.baseclass_0.first) )
    {
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)v5,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)(*((_DWORD *)&v5->baseclass_0 + 1) + 8),
        (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v4);
      return result;
    }
    goto LABEL_23;
  }
  if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
         (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)this,
         &_Node->_Myval.baseclass_0.first,
         (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&_Where + 12)) )
  {
    _Node = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *)_Where;
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *)&_Node);
    if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
           (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
           &_Node->_Myval.baseclass_0.first,
           v7) )
    {
      if ( _Node->_Right->_Isnil )
      {
        std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
          (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)v5,
          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)result,
          0,
          (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)_Node,
          (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v4);
        v8 = result;
      }
      else
      {
        std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
          (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)v5,
          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)result,
          1,
          *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&_Where,
          (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v4);
        v8 = result;
      }
      return v8;
    }
  }
  if ( !std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
          (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&_Where + 12),
          v7) )
    goto LABEL_23;
  _Node = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *)_Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *)&_Node);
  v10 = _Node;
  if ( _Node == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: **)&v5->baseclass_0
                + 1) )
    goto LABEL_20;
  if ( !std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
          (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
          v7,
          &_Node->_Myval.baseclass_0.first) )
  {
LABEL_23:
    v11 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Linsert(
                        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)v5,
                        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocat *)&v12,
                        (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v4,
                        0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    return v8;
  }
  v10 = _Node;
LABEL_20:
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 45) )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)v5,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)result,
      0,
      *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&_Where,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v4);
    v8 = result;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)v5,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v10,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v4);
    v8 = result;
  }
  return v8;
}

//----- (0065B0B0) --------------------------------------------------------
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>>__>(...)
{
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *v2; // esi@1
  void *v3; // edi@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<NiTexture> > *v4; // ebx@3
  NiTexture *v5; // eax@3
  int v7; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@6
  char *v9; // [sp+Ch] [bp-1Ch]@2
  char *v10; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v12; // [sp+18h] [bp-10h]@1
  int v13; // [sp+24h] [bp-4h]@2

  v12 = &v7;
  v2 = this;
  v3 = operator new(0x30u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v3 + 22) = 0;
  v13 = 0;
  v10 = (char *)v3 + 12;
  v9 = (char *)v3 + 12;
  LOBYTE(v13) = 1;
  if ( v3 != (void *)-12 )
  {
    v4 = _Val;
    *((_DWORD *)v3 + 8) = 15;
    *((_DWORD *)v3 + 7) = 0;
    *((_BYTE *)v3 + 12) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 12),
      &v4->baseclass_0.first,
      0,
      0xFFFFFFFFu);
    v5 = v4->baseclass_0.second.m_pObject;
    *((_DWORD *)v3 + 10) = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  return (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0065B1A0) --------------------------------------------------------
std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *__thiscall std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>::operator_(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this, std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *_Right)
{
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v3; // eax@2
  unsigned int v4; // eax@2

  v2 = this;
  if ( this != _Right )
  {
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(
      &this->baseclass_0,
      this->baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent);
    v2->baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v2->baseclass_0.baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v2->baseclass_0.baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v2->baseclass_0.baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
    v3 = v2->baseclass_0.baseclass_0.baseclass_0._Myhead;
    v2->baseclass_0.baseclass_0.baseclass_0._Myhead = _Right->baseclass_0.baseclass_0.baseclass_0._Myhead;
    _Right->baseclass_0.baseclass_0.baseclass_0._Myhead = v3;
    v4 = v2->baseclass_0.baseclass_0.baseclass_0._Mysize;
    v2->baseclass_0.baseclass_0.baseclass_0._Mysize = _Right->baseclass_0.baseclass_0.baseclass_0._Mysize;
    _Right->baseclass_0.baseclass_0.baseclass_0._Mysize = v4;
  }
  return v2;
}

//----- (0065B200) --------------------------------------------------------
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>>(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *this)
{
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba result; // [sp+0h] [bp-14h]@1
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&this->baseclass_0.baseclass_0 + 1);
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(*((void **)&v1->baseclass_0.baseclass_0 + 1));
}

//----- (0065B260) --------------------------------------------------------
void __thiscall std::map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>::_map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this)
{
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (0065B2C0) --------------------------------------------------------
NiPointer<NiTexture> *__thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval)
{
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v4; // ebx@1
  const char *v5; // eax@2
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *v6; // eax@5
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v7; // edi@5
  int v8; // esi@6
  NiPointer<NiTexture> *v9; // eax@11
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba result; // [sp+4h] [bp-34h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+8h] [bp-30h]@5
  int v12; // [sp+24h] [bp-14h]@5
  unsigned int v13; // [sp+28h] [bp-10h]@1
  int v14; // [sp+34h] [bp-4h]@5
  int v15; // [sp+38h] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  v3 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)this,
         _Keyval);
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)v3;
  if ( v3 == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&v2->baseclass_0.baseclass_0
             + 1) )
    goto LABEL_15;
  v5 = (const char *)&v3->_Myval;
  if ( *(_DWORD *)(*(_DWORD *)&v4 + 32) >= 0x10u )
    v5 = *(const char **)v5;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         _Keyval,
         0,
         _Keyval->baseclass_0._Mysize,
         v5,
         *(_DWORD *)(*(_DWORD *)&v4 + 28)) >= 0 )
  {
    v9 = (NiPointer<NiTexture> *)(*(_DWORD *)&v4 + 40);
  }
  else
  {
LABEL_15:
    v14 = 0;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, _Keyval, 0, 0xFFFFFFFFu);
    v12 = 0;
    LOBYTE(v14) = 1;
    v6 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>>__>(
           &v2->baseclass_0.baseclass_0,
           (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<NiTexture> > *)&thisa);
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Insert(
      &v2->baseclass_0,
      &result,
      v4,
      v6);
    v7 = result;
    LOBYTE(v14) = 2;
    if ( v12 )
    {
      v8 = v12;
      if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) )
      {
        if ( v8 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
      }
    }
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v9 = (NiPointer<NiTexture> *)(*(_DWORD *)&v7 + 40);
  }
  return v9;
}
// A85C00: using guessed type int __security_cookie;

//----- (0065B3D0) --------------------------------------------------------
void __thiscall std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>::_pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>(std::pair<NiActorManager * const,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > > *this)
{
  char *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = (char *)&this->baseclass_0.second;
  v5 = &this->baseclass_0.second;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)this->baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
    &this->baseclass_0.second.baseclass_0,
    &result,
    v3,
    v2);
  operator delete(*((void **)v1 + 1));
}

//----- (0065B440) --------------------------------------------------------
void __thiscall CharResMgr::AddSubItemToMap(CharResMgr *this, NiNode *pkNode, const char *szName)
{
  CharResMgr *v3; // esi@1
  NiPointer<NiTexture> *v4; // edi@1
  NiNode *v5; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v8 = 0;
  v4 = std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(
         (std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *)&v3->m_kSubItemMap,
         &thisa);
  v5 = (NiNode *)v4->m_pObject;
  if ( (NiNode *)v4->m_pObject != pkNode )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v4->m_pObject = (NiTexture *)pkNode;
    if ( pkNode )
      InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
}
// A85C00: using guessed type int __security_cookie;

//----- (0065B520) --------------------------------------------------------
void __thiscall CharResMgr::AddSubItemTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName)
{
  CharResMgr *v3; // esi@1
  NiPointer<NiTexture> *v4; // edi@1
  NiTexture *v5; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v8 = 0;
  v4 = std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(
         &v3->m_kSubItemTextureMap,
         &thisa);
  v5 = v4->m_pObject;
  if ( v4->m_pObject != pkTexture )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v4->m_pObject = pkTexture;
    if ( pkTexture )
      InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
}
// A85C00: using guessed type int __security_cookie;

//----- (0065B600) --------------------------------------------------------
void __thiscall CharResMgr::AddItemTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName)
{
  CharResMgr *v3; // esi@1
  NiPointer<NiTexture> *v4; // edi@1
  NiTexture *v5; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v8 = 0;
  v4 = std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(
         &v3->m_kItemTextureMap,
         &thisa);
  v5 = v4->m_pObject;
  if ( v4->m_pObject != pkTexture )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v4->m_pObject = pkTexture;
    if ( pkTexture )
      InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
}
// A85C00: using guessed type int __security_cookie;

//----- (0065B6E0) --------------------------------------------------------
void __thiscall CharResMgr::AddMiniHouseTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName)
{
  CharResMgr *v3; // esi@1
  NiPointer<NiTexture> *v4; // edi@1
  NiTexture *v5; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v8 = 0;
  v4 = std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(
         &v3->m_kMiniHouseTextureMap,
         &thisa);
  v5 = v4->m_pObject;
  if ( v4->m_pObject != pkTexture )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v4->m_pObject = pkTexture;
    if ( pkTexture )
      InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
}
// A85C00: using guessed type int __security_cookie;

//----- (0065B7C0) --------------------------------------------------------
void __thiscall CharResMgr::AddHairTextureToMap(CharResMgr *this, NiTexture *pkTexture, const char *szName)
{
  CharResMgr *v3; // esi@1
  NiPointer<NiTexture> *v4; // edi@1
  NiTexture *v5; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, szName, strlen(szName));
  v8 = 0;
  v4 = std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(
         &v3->m_kHairTextureMap,
         &thisa);
  v5 = v4->m_pObject;
  if ( v4->m_pObject != pkTexture )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v4->m_pObject = pkTexture;
    if ( pkTexture )
      InterlockedIncrement((volatile LONG *)&pkTexture->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
}
// A85C00: using guessed type int __security_cookie;

//----- (0065B8A0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v6; // edi@1
  int v7; // edx@4
  int v8; // edx@7
  int v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v11; // edx@12
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v13; // esi@13
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v14; // edx@16
  int v15; // esi@18
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v16; // esi@20
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v17; // edx@24
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v18; // esi@24
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v19; // edi@24
  int v20; // edi@26
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v21; // edi@28
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v22; // esi@31
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v23; // edx@34
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v24; // esi@34
  int v25; // esi@36
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v26; // esi@38
  int v27; // edi@44
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v28; // edi@46
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *v29; // eax@52

  v5 = *((_DWORD *)&this->baseclass_0 + 2);
  v6 = _Newnode;
  if ( v5 >= 0xCCCCCCB )
  {
    std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
      &_Newnode->_Myval.baseclass_0.second.baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Newnode,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)_Newnode->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)_Newnode->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead);
    operator delete(v6->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead);
    operator delete(v6);
    std::_Xlength_error("map/set<T> too long");
  }
  *((_DWORD *)&this->baseclass_0 + 2) = v5 + 1;
  v6->_Parent = _Wherenode;
  v7 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)v7 )
  {
    *(_DWORD *)(v7 + 4) = v6;
    **((_DWORD **)&this->baseclass_0 + 1) = v6;
    *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 8) = v6;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = v6;
      v8 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)v8 )
        *(_DWORD *)v8 = v6;
    }
    else
    {
      _Wherenode->_Right = v6;
      v9 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(v9 + 8) )
        *(_DWORD *)(v9 + 8) = v6;
    }
  }
  v10 = v6;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(v15 + 4) )
          {
            *(_DWORD *)(v15 + 4) = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(v20 + 4) )
        {
          *(_DWORD *)(v20 + 4) = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(v25 + 4) )
          {
            *(_DWORD *)(v25 + 4) = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(v27 + 4) )
        {
          *(_DWORD *)(v27 + 4) = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = result;
  *(_BYTE *)(*(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 4) + 32) = 1;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  return v29;
}

//----- (0065BB20) --------------------------------------------------------
int ____Buynode_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std______Tree_val_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allo(...)
{
  std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v2; // edi@1
  void *v3; // eax@1
  void *v4; // esi@1
  int v5; // eax@2
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *v6; // edx@3
  int v8; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v10; // [sp+Ch] [bp-1Ch]@2
  char *v11; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v13; // [sp+18h] [bp-10h]@1
  int v14; // [sp+24h] [bp-4h]@2

  v13 = &v8;
  v2 = this;
  v3 = operator new(0x24u);
  v4 = v3;
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  v5 = (int)((char *)v3 + 12);
  *((_WORD *)v4 + 16) = 0;
  v14 = 0;
  v11 = (char *)v4 + 12;
  v10 = (char *)v4 + 12;
  LOBYTE(v14) = 1;
  if ( v4 != (void *)-12 )
  {
    v6 = (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)&_Val->baseclass_0.second;
    *(_DWORD *)v5 = _Val->baseclass_0.first;
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>(
      (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v4
    + 1,
      v6);
  }
  return (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0065BBF0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std *this, std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v2; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *i; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v4; // ST08_4@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v5; // ST04_4@2
  void *v6; // ST08_4@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > result; // [sp+0h] [bp-14h]@2
  std::_Tree<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std *thisa; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@2

  thisa = this;
  v2 = _Rootnode;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Erase(
      thisa,
      i->_Right);
    i = i->_Left;
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v2->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v2->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
    v9 = 0;
    std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
      &v2->_Myval.baseclass_0.second.baseclass_0,
      &result,
      v5,
      v4);
    v6 = v2->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v9 = -1;
    operator delete(v6);
    operator delete(v2);
  }
}

//----- (0065BC90) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::erase(...)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v6; // esi@8
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v9; // eax@17
  char *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *i; // ecx@36
  int v15; // eax@38
  char *v16; // esi@59
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v17; // ST08_4@59
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v18; // ST04_4@59
  unsigned int v19; // eax@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *v20; // eax@61
  char v21; // [sp+0h] [bp-1Ch]@59
  char *v22; // [sp+4h] [bp-18h]@20
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo _Erasednode; // [sp+8h] [bp-14h]@3
  std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *thisa; // [sp+Ch] [bp-10h]@1
  int v25; // [sp+18h] [bp-4h]@59

  thisa = (std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *)this;
  v3 = _Where;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 33) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 33) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( v7->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 33) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    v10 = (char *)v7->baseclass_0.baseclass_0._Myhead;
    v22 = v10;
    if ( *((_DWORD *)v10 + 2) == v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 33) )
        *((_DWORD *)v10 + 2) = v6;
      else
        *((_DWORD *)v22 + 2) = std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 33) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 32);
  *(_BYTE *)(*(_DWORD *)&v5 + 32) = *(_BYTE *)(*(_DWORD *)&v3 + 32);
  *(_BYTE *)(*(_DWORD *)&v3 + 32) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 32) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 32) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 32) )
        {
          *(_BYTE *)(v15 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 33) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 32) = 1;
            *(_BYTE *)(v15 + 32) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 32) = *(_BYTE *)(*(_DWORD *)&v6 + 32);
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 32) )
        {
          *(_BYTE *)(v15 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 33) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 32) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) = 1;
            *(_BYTE *)(v15 + 32) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 32) = *(_BYTE *)(*(_DWORD *)&v6 + 32);
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 32) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 32) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 32) = 1;
  }
  v16 = (char *)(*(_DWORD *)&_Erasednode + 16);
  v22 = (char *)(*(_DWORD *)&_Erasednode + 16);
  v17 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&_Erasednode + 20);
  v18 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)**(_DWORD **)(*(_DWORD *)&_Erasednode + 20);
  v25 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)(*(_DWORD *)&_Erasednode + 16),
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&v21,
    v18,
    v17);
  operator delete(*((void **)v16 + 1));
  operator delete(*(void **)&_Erasednode);
  v19 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v19 )
    thisa->baseclass_0.baseclass_0._Mysize = v19 - 1;
  v20 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v20;
}

//----- (0065BF40) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Linsert(...)
{
  std::_Tree<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std *v4; // ebx@1
  int v5; // ecx@1
  int v6; // eax@1
  bool v7; // zf@1
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v8; // edx@1
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v9; // esi@1
  bool v10; // cl@1
  NiActorManager *const v11; // edi@2
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v12; // edi@10
  int v13; // ecx@13
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<Ni *v14; // eax@13
  int v15; // esi@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v16; // ST0C_4@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v17; // ST08_4@17
  bool *v18; // [sp-20h] [bp-30h]@12
  bool v19; // [sp-1Ch] [bp-2Ch]@12
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v20; // [sp-18h] [bp-28h]@12
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v21; // [sp-14h] [bp-24h]@12
  int _Addleft; // [sp+0h] [bp-10h]@1
  int v23; // [sp+Ch] [bp-4h]@17

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = *(_DWORD *)(v5 + 4);
  v7 = *(_BYTE *)(v6 + 33) == 0;
  v8 = _Node;
  v9 = (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)v5;
  v10 = 1;
  LOBYTE(_Addleft) = 1;
  if ( v7 )
  {
    v11 = _Node->_Myval.baseclass_0.first;
    do
    {
      v9 = (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)v6;
      if ( _Leftish )
        v10 = *(_DWORD *)(v6 + 12) >= (unsigned int)v11;
      else
        v10 = (unsigned int)v11 < *(_DWORD *)(v6 + 12);
      LOBYTE(_Addleft) = v10;
      if ( v10 )
        v6 = *(_DWORD *)v6;
      else
        v6 = *(_DWORD *)(v6 + 8);
    }
    while ( !*(_BYTE *)(v6 + 33) );
  }
  v12 = v9;
  *(_DWORD *)&_Leftish = v9;
  if ( v10 )
  {
    if ( v9 == **((std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator ***)&v4->baseclass_0
                + 1) )
    {
      v21 = _Node;
      v20 = v9;
      v19 = 1;
      v18 = &_Leftish;
LABEL_13:
      v13 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
                          v4,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *)v18,
                          v19,
                          v20,
                          v21)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v14 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v13;
      result->baseclass_0.second = 1;
      return v14;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Leftish);
    v12 = (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)_Leftish;
    v8 = _Node;
  }
  if ( v12->_Myval.baseclass_0.first < v8->_Myval.baseclass_0.first )
  {
    v21 = v8;
    v20 = v9;
    v19 = _Addleft;
    v18 = &_Leftish;
    goto LABEL_13;
  }
  v15 = (int)&v8->_Myval.baseclass_0.second;
  *(_DWORD *)&_Leftish = (char *)v8 + 16;
  v16 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v8->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v17 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v8->_Myval.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v23 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
    &v8->_Myval.baseclass_0.second.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Addleft,
    v17,
    v16);
  operator delete(*(void **)(v15 + 4));
  operator delete(_Node);
  v14 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
  result->baseclass_0.second = 0;
  return v14;
}

//----- (0065C060) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std *v4; // esi@1
  int v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v6; // ecx@1
  int v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = _First;
  if ( _First != *(_DWORD *)v5 || _Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 33) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 33) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 33);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 33);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Erase(
      v4,
      *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)(v5 + 4));
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 4) = *((_DWORD *)&v4->baseclass_0 + 1);
    **((_DWORD **)&v4->baseclass_0 + 1) = *((_DWORD *)&v4->baseclass_0 + 1);
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 8) = *((_DWORD *)&v4->baseclass_0 + 1);
    v7 = *((_DWORD *)&v4->baseclass_0 + 1);
    v8 = result;
    *((_DWORD *)&v4->baseclass_0 + 2) = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)v7;
  }
  return v8;
}

//----- (0065C120) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(...)
{
  std::_Tree<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std *v4; // esi@1
  int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *v7; // eax@2
  int v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = _Node;
  if ( !*((_DWORD *)&this->baseclass_0 + 2) )
  {
    std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
      this,
      result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)v5,
      _Node);
    return result;
  }
  if ( _Where == *(_DWORD *)v5 )
  {
    if ( _Node->_Myval.baseclass_0.first < (NiActorManager *const )*(_DWORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
        this,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)&_Where,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Where == v5 )
  {
    v8 = *(_DWORD *)(v5 + 8);
    if ( (NiActorManager *const )*(_DWORD *)(v8 + 12) < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
        this,
        result,
        0,
        (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)v8,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= (NiActorManager *const )*(_DWORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( (NiActorManager *const )*(_DWORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Node),
          _Node != *((std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)&v4->baseclass_0
                   + 1))
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<Ni *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 33) )
    {
      std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
        v4,
        result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)&_Where,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
        v4,
        result,
        1,
        _Node,
        v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
        v4,
        result,
        0,
        _Node,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
        v4,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator **)&_Where,
        v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (0065C280) --------------------------------------------------------
std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *__thiscall std::map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>>::operator__(std::map<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std::pair<NiActorManage *this, NiActorManager *const *_Keyval)
{
  std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v2; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v3; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v4; // eax@1
  void *v5; // eax@8
  std::_Tree_nod<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *v6; // eax@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v7; // ST04_4@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v8; // ST04_4@9
  std::pair<NiActorManager * const,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > > _Val; // [sp+0h] [bp-40h]@9
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > _Right; // [sp+14h] [bp-2Ch]@8
  std::exception thisa; // [sp+24h] [bp-1Ch]@11
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > result; // [sp+30h] [bp-10h]@9
  int v14; // [sp+3Ch] [bp-4h]@9

  v2 = (std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator *)this;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)*((_DWORD *)&this->baseclass_0.baseclass_0 + 1);
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v3 + 4);
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
  {
    if ( (NiActorManager *const )*(_DWORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v3 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( v3 == *((_DWORD *)&this->baseclass_0.baseclass_0 + 1)
    || *_Keyval < (NiActorManager *const )*(_DWORD *)(*(_DWORD *)&v3 + 12) )
  {
    _Right.baseclass_0.baseclass_0._Mysize = 0;
    v5 = operator new(0x18u);
    if ( !v5 )
    {
      result = 0;
      std::exception::exception(
        &thisa,
        (const char *const *)result.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
    _Right.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v5;
    *(_DWORD *)v5 = v5;
    _Right.baseclass_0.baseclass_0._Myhead->_Parent = _Right.baseclass_0.baseclass_0._Myhead;
    _Right.baseclass_0.baseclass_0._Myhead->_Right = _Right.baseclass_0.baseclass_0._Myhead;
    _Right.baseclass_0.baseclass_0._Myhead->_Color = 1;
    _Right.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
    _Val.baseclass_0.first = *_Keyval;
    v14 = 0;
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>(
      &_Val.baseclass_0.second.baseclass_0,
      &_Right);
    LOBYTE(v14) = 1;
    v6 = ____Buynode_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std___std______Tree_val_V___Tmap_traits_PAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allocator_U__pair___CBKV__NiPointer_VNiControllerSequence_____std___3__std__U__less_PAVNiActorManager___3_V__allocator_U__pair_QAVNiActorManager__V__map_KV__NiPointer_VNiControllerSequence____U__less_K_std__V__allo(
           v2,
           &_Val);
    std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std *)v2,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag *)&_Keyval,
      v3,
      v6);
    v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)_Keyval;
    _Keyval = (NiActorManager *const *)&_Val.baseclass_0.second;
    v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)_Val.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
    LOBYTE(v14) = 2;
    std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
      &_Val.baseclass_0.second.baseclass_0,
      &result,
      v7,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)_Val.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead);
    operator delete(_Val.baseclass_0.second.baseclass_0.baseclass_0.baseclass_0._Myhead);
    v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)_Right.baseclass_0.baseclass_0._Myhead->_Left;
    v14 = 3;
    std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
      &_Right,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Keyval,
      v8,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)_Right.baseclass_0.baseclass_0._Myhead);
    operator delete(_Right.baseclass_0.baseclass_0._Myhead);
  }
  return (std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *)(*(_DWORD *)&v3 + 16);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0065C3E0) --------------------------------------------------------
void __thiscall std::map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>>::_map<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>(std::map<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std::pair<NiActorManage *this)
{
  std::map<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std::pair<NiActorManage *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManag result; // [sp+0h] [bp-14h]@1
  std::map<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActorManager *>,std::allocator<std::pair<NiActorManage *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)*((_DWORD *)&this->baseclass_0.baseclass_0 + 1);
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiActorManager *,std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > >,std::less<NiActo)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(*((void **)&v1->baseclass_0.baseclass_0 + 1));
}

//----- (0065C440) --------------------------------------------------------
void __thiscall CharSet::CharSet(CharSet *this)
{
  CharSet *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSet::_vftable_;
  v1->m_spRootNode.m_pObject = 0;
  v1->m_nSetGeoCnt = 0;
  v1->m_pkBodyGeom[0] = 0;
  v1->m_pkBodyGeom[1] = 0;
  v1->m_pkBodyGeom[2] = 0;
  v1->m_pkLegGeom[0] = 0;
  v1->m_pkLegGeom[1] = 0;
  v1->m_pkLegGeom[2] = 0;
  v1->m_pkShoesGeom[0] = 0;
  v1->m_pkShoesGeom[1] = 0;
  v1->m_pkShoesGeom[2] = 0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C4284: using guessed type int (__thiscall *CharSet___vftable_)(void *p, char);

//----- (0065C490) --------------------------------------------------------
void __thiscall CharSet::_CharSet(CharSet *this)
{
  CharSet *v1; // edi@1
  NiNode *v2; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSet::_vftable_;
  v2 = this->m_spRootNode.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C4284: using guessed type int (__thiscall *CharSet___vftable_)(void *p, char);

//----- (0065C510) --------------------------------------------------------
bool __thiscall CharSet::SetNormalGeometry(CharSet *this)
{
  CharSet *v1; // esi@1
  NiGeometry **v2; // ST04_4@1
  NiAVObject *v3; // eax@1
  bool result; // al@2
  NiAVObject *v5; // eax@3
  NiAVObject *v6; // eax@4

  v1 = this;
  v2 = this->m_pkBodyGeom;
  v3 = (NiAVObject *)((int (__stdcall *)(_DWORD))this->m_spRootNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(off_A7FFA4[0]);
  if ( PgUtil::CatchGeometry(v3, v2)
    && (v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))v1->m_spRootNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(off_A7FFD0[0]),
        PgUtil::CatchGeometry(v5, v1->m_pkLegGeom))
    && (v6 = (NiAVObject *)((int (__stdcall *)(_DWORD))v1->m_spRootNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(off_A7FFD4[0]),
        PgUtil::CatchGeometry(v6, v1->m_pkShoesGeom)) )
  {
    result = 1;
    ++v1->m_nSetGeoCnt;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A7FFA4: using guessed type char *off_A7FFA4[26];
// A7FFD0: using guessed type char *off_A7FFD0[15];
// A7FFD4: using guessed type char *off_A7FFD4[14];

//----- (0065C590) --------------------------------------------------------
bool __thiscall CharSet::SetLodGeometry(CharSet *this, int _nLodLevel, const char *_pLodNodeName)
{
  CharSet *v3; // edi@1
  bool result; // al@2
  NiShader *v5; // eax@3
  NiShader *v6; // esi@3
  NiAVObject *v7; // eax@4
  NiAVObject *v8; // eax@5
  NiAVObject *v9; // eax@6

  v3 = this;
  if ( _nLodLevel < 3 )
  {
    v5 = (NiShader *)((int (__stdcall *)(_DWORD))this->m_spRootNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(_pLodNodeName);
    v6 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v5);
    if ( v6
      && (v7 = (NiAVObject *)v6->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v6, (unsigned int)off_A7FFA4[0]),
          PgUtil::CatchGeometry(v7, &v3->m_pkBodyGeom[_nLodLevel]))
      && (v8 = (NiAVObject *)v6->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v6, (unsigned int)off_A7FFD0[0]),
          PgUtil::CatchGeometry(v8, &v3->m_pkLegGeom[_nLodLevel]))
      && (v9 = (NiAVObject *)v6->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v6, (unsigned int)off_A7FFD4[0]),
          PgUtil::CatchGeometry(v9, &v3->m_pkShoesGeom[_nLodLevel])) )
    {
      result = 1;
      ++v3->m_nSetGeoCnt;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A7FFA4: using guessed type char *off_A7FFA4[26];
// A7FFD0: using guessed type char *off_A7FFD0[15];
// A7FFD4: using guessed type char *off_A7FFD4[14];

//----- (0065C650) --------------------------------------------------------
bool __thiscall CharSet::Init(CharSet *this, NiNode *pkNode)
{
  CharSet *v2; // esi@1
  NiNode *v3; // edi@1

  v2 = this;
  v3 = this->m_spRootNode.m_pObject;
  if ( v3 != pkNode )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spRootNode.m_pObject = pkNode;
    if ( pkNode )
      InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v2->m_pkBodyGeom[0] = 0;
  v2->m_pkBodyGeom[1] = 0;
  v2->m_pkBodyGeom[2] = 0;
  v2->m_pkLegGeom[0] = 0;
  v2->m_pkLegGeom[1] = 0;
  v2->m_pkLegGeom[2] = 0;
  v2->m_pkShoesGeom[0] = 0;
  v2->m_pkShoesGeom[1] = 0;
  v2->m_pkShoesGeom[2] = 0;
  return pkNode
      && (CharSet::SetLodGeometry(v2, 0, pLodNodeName)
       && CharSet::SetLodGeometry(v2, 1, off_A7FFE4)
       && CharSet::SetLodGeometry(v2, 2, off_A7FFE8)
       || CharSet::SetNormalGeometry(v2));
}

//----- (0065C710) --------------------------------------------------------
void *__thiscall CharSet::_scalar_deleting_destructor_(CharSet *this, unsigned int a2)
{
  CharSet *v2; // esi@1
  NiNode *v3; // edi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&CharSet::_vftable_;
  v3 = this->m_spRootNode.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C4284: using guessed type int (__thiscall *CharSet___vftable_)(void *p, char);

//----- (0065C7A0) --------------------------------------------------------
void __thiscall CharShape::SetRidePetID(CharShape *this, unsigned int uiID)
{
  this->m_uiRidePetID = uiID;
}

//----- (0065C7B0) --------------------------------------------------------
unsigned int __thiscall CharShape::GetRidePetID(CharShape *this)
{
  return this->m_uiRidePetID;
}

//----- (0065C7C0) --------------------------------------------------------
void __thiscall CharShape::ClearEquipInfo(CharShape *this)
{
  CharShape *v1; // esi@1
  char *v2; // edi@1

  v1 = this;
  v2 = (char *)&this->m_kEquip;
  *(_WORD *)&this->m_barrRemoveShape[0] = 0;
  this->m_barrRemoveShape[2] = 0;
  memset((char *)&this->m_kEquip, 0, 0x2Bu);
  *(_WORD *)v2 = -1;
  *(_DWORD *)&v1->m_kEquip.Equ_RightHand = -1;
  *(_DWORD *)&v1->m_kEquip.Equ_LeftHand = -1;
  *(_DWORD *)&v1->m_kEquip.Equ_Boot = -1;
  *(_DWORD *)&v1->m_kEquip.Equ_AccPant = -1;
  v1->m_kEquip.Equ_AccHeadA = -1;
  v1->m_kEquip.Equ_Mouth = -1;
  v1->m_kEquip.Equ_Minimon = -1;
  *(_DWORD *)&v1->m_kEquip.Equ_Eye = -1;
  *(_DWORD *)&v1->m_kEquip.Equ_AccRightHand = -1;
  *(_DWORD *)&v1->m_kEquip.Equ_CosEff = -1;
  v1->m_kEquip.Equ_MiniMon_R = -1;
  v1->m_uiEquipPos = 0;
  v1->m_kEquip.Equ_AccShield = -1;
}

//----- (0065C870) --------------------------------------------------------
unsigned __int16 __thiscall CharShape::GetRightHandEquipppedItemID(CharShape *this, char *rbyUpgrade)
{
  *rbyUpgrade = this->m_kEquip.upgrade.gap0[0] >> 4;
  return this->m_kEquip.Equ_RightHand;
}

//----- (0065C890) --------------------------------------------------------
unsigned __int16 __thiscall CharShape::GetLeftHandEquippedItemID(CharShape *this, char *rbyUpgrade)
{
  *rbyUpgrade = this->m_kEquip.upgrade.gap0[0] & 0xF;
  return this->m_kEquip.Equ_LeftHand;
}

//----- (0065C8B0) --------------------------------------------------------
unsigned __int16 __thiscall CharShape::GetRightHandAccItemID(CharShape *this)
{
  return this->m_kEquip.Equ_AccRightHand;
}

//----- (0065C8C0) --------------------------------------------------------
unsigned __int16 __thiscall CharShape::GetLeftHandAccItemID(CharShape *this)
{
  return this->m_kEquip.Equ_AccLeftHand;
}

//----- (0065C8D0) --------------------------------------------------------
unsigned __int16 __thiscall CharShape::GetCosShieldItemID(CharShape *this)
{
  return this->m_kEquip.Equ_AccShield;
}

//----- (0065C8E0) --------------------------------------------------------
void __thiscall CharShape::ShowLinkNode(CharShape *this, CharShape::LinkIndex eLinkIndex, bool bShow)
{
  NiNode *v3; // eax@1

  v3 = this->m_apkLinkNode[eLinkIndex];
  if ( v3 && (signed int)eLinkIndex < 27 )
  {
    if ( bShow )
      v3->baseclass_0.m_uFlags &= 0xFFFEu;
    else
      v3->baseclass_0.m_uFlags |= 1u;
  }
}

//----- (0065C910) --------------------------------------------------------
void __thiscall CharShape::ShowAllLinkNode(CharShape *this, bool bShow)
{
  signed int v2; // edi@1
  char *v3; // ecx@1
  int v4; // eax@2
  int v5; // eax@6
  int v6; // eax@10

  v2 = 9;
  v3 = (char *)&this->m_apkLinkNode[1];
  do
  {
    v4 = *((_DWORD *)v3 - 1);
    if ( v4 )
    {
      if ( bShow )
        *(_WORD *)(v4 + 28) &= 0xFFFEu;
      else
        *(_WORD *)(v4 + 28) |= 1u;
    }
    v5 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 )
    {
      if ( bShow )
        *(_WORD *)(v5 + 28) &= 0xFFFEu;
      else
        *(_WORD *)(v5 + 28) |= 1u;
    }
    v6 = *((_DWORD *)v3 + 1);
    if ( v6 )
    {
      if ( bShow )
        *(_WORD *)(v6 + 28) &= 0xFFFEu;
      else
        *(_WORD *)(v6 + 28) |= 1u;
    }
    v3 += 12;
    --v2;
  }
  while ( v2 );
}

//----- (0065C980) --------------------------------------------------------
void __thiscall CharShape::SetAnotherEyeShape(CharShape *this, NiNode *pkShapeNode)
{
  CharShape *v2; // edi@1
  NiNode *v3; // eax@1
  NiAVObject *v4; // esi@3
  NiNode *v5; // eax@4

  v2 = this;
  v3 = this->m_pkEyeShapeNode;
  if ( v3 )
  {
    if ( pkShapeNode )
    {
      v4 = (NiAVObject *)this->m_apkLinkNode[2];
      if ( v4 )
      {
        v3->baseclass_0.m_uFlags |= 1u;
        v5 = this->m_pkEyeShapeAnotherNode;
        if ( v5 )
        {
          v5->baseclass_0.m_uFlags |= 1u;
          this->m_pkEyeShapeAnotherNode = 0;
        }
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v4,
          pkShapeNode,
          0);
        NiAVObject::Update(v4, 0.0, 0);
        NiAVObject::UpdateProperties(v4);
        NiAVObject::UpdateEffects(v4);
        v2->m_pkEyeShapeAnotherNode = pkShapeNode;
      }
    }
  }
}

//----- (0065CA00) --------------------------------------------------------
void __thiscall CharShape::ResetAnotherEyeShape(CharShape *this)
{
  if ( this->m_pkEyeShapeAnotherNode )
  {
    if ( this->m_apkLinkNode[2] )
      this->m_pkEyeShapeAnotherNode = 0;
  }
}

//----- (0065CA20) --------------------------------------------------------
bool __thiscall CharShape::IsSpactralGlowEnable(CharShape *this)
{
  return CSpactralGlow_Shader_Controller::IsEnable(&this->m_SpactralGlowEffect);
}

//----- (0065CA30) --------------------------------------------------------
bool __thiscall CharShape::SetSPactralGlowEnable(CharShape *this, bool bEnable)
{
  return CSpactralGlow_Shader_Controller::SetEnable(&this->m_SpactralGlowEffect, bEnable);
}

//----- (0065CA40) --------------------------------------------------------
void __thiscall CharShape::SetShowMiniMonAutoPickEff(CharShape *this, bool bShow)
{
  Effect *v2; // eax@1

  v2 = (Effect *)this->m_hMiniMonAutoPickEff;
  if ( v2 )
    EffectMgr::SetShow(&g_kEffectMgr, v2, bShow, 1);
}

//----- (0065CA70) --------------------------------------------------------
void __thiscall CharShape::ShowMinimonAutoUseEff(CharShape *this, bool bShow)
{
  Effect *v2; // eax@1

  v2 = (Effect *)this->m_hMinimonAutoUseEff;
  if ( v2 )
    EffectMgr::SetShow(&g_kEffectMgr, v2, bShow, 1);
}

//----- (0065CAA0) --------------------------------------------------------
CSpactralGlow_Shader_Controller *__thiscall CharShape::GetShader_Ctrl(CharShape *this)
{
  return &this->m_SpactralGlowEffect;
}

//----- (0065CAB0) --------------------------------------------------------
void __thiscall CharShape::SetGTIBomb(CharShape *this, bool b)
{
  this->m_bGTIBomb = b;
}

//----- (0065CAD0) --------------------------------------------------------
void __thiscall ItemUpGrade::GetEffectHandle(ItemUpGrade *this, unsigned int _uiEquipPos, unsigned int *_dwEffectIndex0, unsigned int *_dwEffectIndex1)
{
  *_dwEffectIndex0 = this->m_arrLinkData[_uiEquipPos].dwEffectIndex[0];
  *_dwEffectIndex1 = this->m_arrLinkData[_uiEquipPos].dwEffectIndex[1];
}

//----- (0065CAF0) --------------------------------------------------------
void __thiscall ItemUpGrade::RemoveEffect(ItemUpGrade *this, unsigned int _uiEquipPos)
{
  ItemUpGrade *v2; // esi@1
  unsigned int v3; // edi@1
  Effect *v4; // eax@1
  Effect *v5; // ecx@1
  unsigned int v6; // ebx@1
  Effect *_dwEffectIndex1; // [sp+14h] [bp+8h]@1

  v2 = this;
  v3 = _uiEquipPos;
  v4 = (Effect *)this->m_arrLinkData[_uiEquipPos].dwEffectIndex[0];
  v5 = (Effect *)this->m_arrLinkData[_uiEquipPos].dwEffectIndex[1];
  v6 = (unsigned int)&v2->m_arrLinkData[_uiEquipPos].dwEffectIndex[1];
  _dwEffectIndex1 = v5;
  if ( v4 )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, v4);
    v5 = _dwEffectIndex1;
  }
  if ( v5 )
    EffectMgr::RemoveEffect(&g_kEffectMgr, v5);
  v2->m_arrLinkData[v3].dwEffectIndex[0] = 0;
  *(_DWORD *)v6 = 0;
}

//----- (0065CB40) --------------------------------------------------------
void __thiscall ItemUpGrade::SetShow(ItemUpGrade *this, bool _bShow)
{
  ItemUpGrade *v2; // ebx@1
  signed int v3; // esi@1
  Effect *v4; // eax@2
  Effect *v5; // edi@2

  v2 = this;
  v3 = 0;
  do
  {
    v4 = (Effect *)v2->m_arrLinkData[v3].dwEffectIndex[0];
    v5 = (Effect *)v2->m_arrLinkData[v3].dwEffectIndex[1];
    if ( v4 )
      EffectMgr::SetShow(&g_kEffectMgr, v4, _bShow, 1);
    if ( v5 )
      EffectMgr::SetShow(&g_kEffectMgr, v5, _bShow, 1);
    ++v3;
  }
  while ( v3 < 30 );
}

//----- (0065CB90) --------------------------------------------------------
void __thiscall ItemUpGrade::SetShow(ItemUpGrade *this, unsigned int _uiEquipPos, bool _bShow)
{
  Effect *v3; // eax@2
  Effect *v4; // esi@2

  if ( _uiEquipPos < 0x1E )
  {
    v3 = (Effect *)this->m_arrLinkData[_uiEquipPos].dwEffectIndex[0];
    v4 = (Effect *)this->m_arrLinkData[_uiEquipPos].dwEffectIndex[1];
    if ( v3 )
      EffectMgr::SetShow(&g_kEffectMgr, v3, _bShow, 0);
    if ( v4 )
      EffectMgr::SetShow(&g_kEffectMgr, v4, _bShow, 0);
  }
}

//----- (0065CBE0) --------------------------------------------------------
void __thiscall CharShape::SetEquipInfo(CharShape *this, PROTO_EQUIPMENT *pkInfo)
{
  if ( pkInfo )
    memcpy(&this->m_kEquip, pkInfo, sizeof(this->m_kEquip));
  else
    CharShape::ClearEquipInfo(this);
}

//----- (0065CC10) --------------------------------------------------------
void __thiscall CharShape::CatchHeight(CharShape *this)
{
  NiNode *v1; // eax@1

  v1 = this->m_apkLinkNode[1];
  if ( v1 )
    this->m_fHeight = v1->baseclass_0.m_kWorld.m_Translate.z;
  else
    this->m_fHeight = 53.0;
}

//----- (0065CC60) --------------------------------------------------------
bool __thiscall CharShape::Equip(CharShape *this, unsigned __int16 kItemID, char byUpdrade)
{
  int v3; // esi@1
  CharShape *v4; // ebx@1
  int v5; // eax@3
  int v6; // esi@4
  bool result; // al@5
  Item *v8; // esi@10
  bool v9; // bl@10
  char kStruct[2]; // [sp+Ch] [bp-6Ch]@6
  char v11; // [sp+Eh] [bp-6Ah]@7
  unsigned int v12; // [sp+74h] [bp-4h]@1
  int v13; // [sp+78h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          kItemID)
    && kItemID <= *(_WORD *)(v3 + 200)
    && (v5 = *(_DWORD *)(v3 + 196) + 4 * kItemID, *(_DWORD *)v5)
    && (v6 = *(_DWORD *)v5) != 0 )
  {
    memset(kStruct, 0, 0x67u);
    *(_WORD *)kStruct = kItemID;
    switch ( *(_DWORD *)(v6 + 102) )
    {
      case 7:
        v11 = byUpdrade;
        break;
      case 6:
        v11 = byUpdrade;
        break;
      case 5:
      case 8:
        v11 = byUpdrade;
        break;
      default:
        break;
    }
    v8 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
    v9 = CharShape::Equip(v4, v8);
    if ( v8 )
      v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    result = v9;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0065CD50) --------------------------------------------------------
bool __thiscall CharShape::TextureFace(CharShape *this, NiTexture *pkTexture)
{
  NiNode *v2; // eax@1
  bool result; // al@2
  ResetTexture kResetTexture; // [sp+0h] [bp-18h]@3
  int v5; // [sp+14h] [bp-4h]@3

  v2 = this->m_spFaceNode.m_pObject;
  if ( v2 )
  {
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    v5 = 0;
    Ns_TourScene::TourScene(&kResetTexture.baseclass_0, v2, &NiAVObject::m_RTTI, pkTexture);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);

//----- (0065CDD0) --------------------------------------------------------
bool __thiscall CharShape::SetLodGeometry(CharShape *this, int _nLodLevel, const char *_pLodNodeName)
{
  CharShape *v3; // edi@1
  NiNode *v4; // ecx@1
  bool result; // al@2
  NiShader *v6; // eax@5
  NiShader *v7; // esi@5
  NiAVObject *v8; // eax@6
  NiAVObject *v9; // eax@7
  NiAVObject *v10; // eax@8

  v3 = this;
  v4 = this->m_pkRootNode;
  if ( v4 )
  {
    if ( _nLodLevel < 3 )
    {
      v6 = (NiShader *)((int (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(_pLodNodeName);
      v7 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v6);
      if ( v7
        && (v8 = (NiAVObject *)v7->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v7, (unsigned int)off_A7FFA4[0]),
            PgUtil::CatchGeometry(v8, &v3->m_apkLodGeom[_nLodLevel]))
        && (v9 = (NiAVObject *)v7->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v7, (unsigned int)off_A7FFD0[0]),
            PgUtil::CatchGeometry(v9, &v3->m_apkLodGeom[_nLodLevel + 3]))
        && (v10 = (NiAVObject *)v7->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v7, (unsigned int)off_A7FFD4[0]),
            PgUtil::CatchGeometry(v10, &v3->m_apkLodGeom[_nLodLevel + 6])) )
      {
        result = 1;
        ++v3->m_nSetLodGeoCnt;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A7FFA4: using guessed type char *off_A7FFA4[26];
// A7FFD0: using guessed type char *off_A7FFD0[15];
// A7FFD4: using guessed type char *off_A7FFD4[14];

//----- (0065CEA0) --------------------------------------------------------
bool __thiscall CharShape::Link(CharShape *this, CharShape::LinkIndex eLinkIndex, NiNode *pkItemNode, unsigned int uiEquipPos)
{
  CharShape::LinkIndex v4; // edi@1
  CharShape *v5; // esi@1
  bool result; // al@2
  unsigned int v7; // ebx@3
  Effect *v8; // eax@3
  unsigned int v9; // ecx@3
  CharShape::LinkIndex v10; // ecx@3
  int v11; // eax@7
  CharShape::LinkIndex v12; // ebx@9
  NiNode *v13; // ebx@12
  NiNode *v14; // ST1C_4@13
  CarToonShader *v15; // eax@13
  const char *v16; // [sp+1Ch] [bp-10h]@16

  v4 = eLinkIndex;
  v5 = this;
  if ( this->m_apkLinkNode[eLinkIndex] )
  {
    v7 = uiEquipPos;
    v8 = (Effect *)this->m_kItemUpGrade.m_arrLinkData[uiEquipPos].dwEffectIndex[0];
    v9 = (unsigned int)&this->m_kItemUpGrade.m_arrLinkData[uiEquipPos].dwEffectIndex[1];
    uiEquipPos = v9;
    v10 = *(_DWORD *)v9;
    eLinkIndex = v10;
    if ( v8 )
    {
      EffectMgr::RemoveEffect(&g_kEffectMgr, v8);
      v10 = eLinkIndex;
    }
    if ( v10 )
      EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v10);
    *(_DWORD *)uiEquipPos = 0;
    v5->m_kItemUpGrade.m_arrLinkData[v7].dwEffectIndex[0] = 0;
    v11 = ((int (__stdcall *)(_DWORD))v5->m_apkLinkNode[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EquipedNode");
    if ( v11 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD))v5->m_apkLinkNode[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &eLinkIndex,
        v11);
      if ( eLinkIndex )
      {
        v12 = eLinkIndex;
        if ( !InterlockedDecrement((volatile LONG *)(eLinkIndex + 4)) )
        {
          if ( v12 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
        }
      }
    }
    v13 = pkItemNode;
    if ( pkItemNode )
    {
      v14 = pkItemNode;
      v15 = CarToonShader::GetInstance();
      CarToonShader::SetCartoonShader(v15, v14);
      if ( CSpactralGlow_Shader_Controller::IsEnable(&v5->m_SpactralGlowEffect) )
        CSpactralGlow_Shader_Controller::SetupRecursive(&v5->m_SpactralGlowEffect, v13);
      if ( v4 == 1 )
        v16 = "HairPartsNode";
      else
        v16 = "EquipedNode";
      NiObjectNET::SetName(&v13->baseclass_0.baseclass_0, v16);
      ((void (__stdcall *)(_DWORD, _DWORD))v5->m_apkLinkNode[v4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v13,
        0);
      NiAVObject::UpdateProperties(&v5->m_apkLinkNode[v4]->baseclass_0);
      NiAVObject::UpdateEffects(&v5->m_apkLinkNode[v4]->baseclass_0);
    }
    NiAVObject::Update(&v5->m_apkLinkNode[v4]->baseclass_0, 0.0, 1);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0065CFE0) --------------------------------------------------------
bool __thiscall CharShape::CatchFaceGeom(CharShape *this, NiAVObject *pkObject)
{
  CharShape *v2; // ebx@1
  NiNode *v3; // esi@1

  v2 = this;
  v3 = this->m_spFaceNode.m_pObject;
  if ( (NiAVObject *)v3 != pkObject )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spFaceNode.m_pObject = (NiNode *)pkObject;
    if ( pkObject )
      InterlockedIncrement((volatile LONG *)&pkObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  return 1;
}

//----- (0065D030) --------------------------------------------------------
bool __thiscall CharShape::LookAt(CharShape *this, NiPoint3 *kLookAt)
{
  float v2; // edx@1
  CharShape *v3; // esi@1
  float v4; // eax@1
  bool result; // al@1
  NiNode *v6; // eax@2
  NiMatrix3 kRot; // [sp+4h] [bp-30h]@1
  NiPoint3 kVect; // [sp+28h] [bp-Ch]@1

  v2 = kLookAt->y;
  v3 = this;
  v4 = kLookAt->z;
  kVect.x = kLookAt->x;
  kVect.y = v2;
  kVect.z = -v4;
  result = Math3D::FrontVectToRot(&kVect, &kRot);
  if ( result )
  {
    v6 = v3->m_apkLinkNode[2];
    if ( v6 )
      memcpy(&v6->baseclass_0.m_kLocal, &kRot, 0x24u);
    result = 1;
  }
  return result;
}

//----- (0065D090) --------------------------------------------------------
void __thiscall CharShape::SetHairPartsVisible(CharShape *this, char byVisibleMask)
{
  NiNode *v2; // eax@1
  NiNode *v3; // eax@4
  NiNode *v4; // eax@6
  NiNode *v5; // eax@8
  NiNode *v6; // eax@10
  NiNode *v7; // eax@12
  NiNode *v8; // eax@14
  NiNode *v9; // eax@19
  NiNode *v10; // eax@21
  NiNode *v11; // eax@23
  NiNode *v12; // eax@25
  NiNode *v13; // eax@27
  NiNode *v14; // eax@29
  NiNode *v15; // eax@31
  NiNode *v16; // eax@33
  NiNode *v17; // eax@36
  NiNode *v18; // eax@39
  NiNode *v19; // eax@42
  NiNode *v20; // eax@45
  NiNode *v21; // eax@48

  v2 = this->m_aspHairNode[0].m_pObject;
  if ( byVisibleMask & 1 )
  {
    if ( v2 )
      v2->baseclass_0.m_uFlags &= 0xFFFEu;
    v3 = this->m_aspHairNode[1].m_pObject;
    if ( v3 )
      v3->baseclass_0.m_uFlags &= 0xFFFEu;
    v4 = this->m_aspHairNode[2].m_pObject;
    if ( v4 )
      v4->baseclass_0.m_uFlags &= 0xFFFEu;
    v5 = this->m_aspHairNode[3].m_pObject;
    if ( v5 )
      v5->baseclass_0.m_uFlags &= 0xFFFEu;
    v6 = this->m_aspHairNode[4].m_pObject;
    if ( v6 )
      v6->baseclass_0.m_uFlags &= 0xFFFEu;
    v7 = this->m_aspHairNode[5].m_pObject;
    if ( v7 )
      v7->baseclass_0.m_uFlags &= 0xFFFEu;
    v8 = this->m_spFaceNode.m_pObject;
    if ( !v8 )
      goto LABEL_16;
    goto LABEL_15;
  }
  if ( v2 )
    v2->baseclass_0.m_uFlags |= 1u;
  v9 = this->m_aspHairNode[1].m_pObject;
  if ( v9 )
    v9->baseclass_0.m_uFlags |= 1u;
  v10 = this->m_aspHairNode[2].m_pObject;
  if ( v10 )
    v10->baseclass_0.m_uFlags |= 1u;
  v11 = this->m_aspHairNode[3].m_pObject;
  if ( v11 )
    v11->baseclass_0.m_uFlags |= 1u;
  v12 = this->m_aspHairNode[4].m_pObject;
  if ( v12 )
    v12->baseclass_0.m_uFlags |= 1u;
  v13 = this->m_aspHairNode[5].m_pObject;
  if ( v13 )
    v13->baseclass_0.m_uFlags |= 1u;
  v14 = this->m_pkEyeShapeNode;
  if ( v14 )
    v14->baseclass_0.m_uFlags |= 1u;
  v15 = this->m_pkEyeShapeAnotherNode;
  if ( v15 )
    v15->baseclass_0.m_uFlags |= 1u;
  v16 = this->m_aspHairNode[0].m_pObject;
  if ( v16 && byVisibleMask & 2 )
    v16->baseclass_0.m_uFlags &= 0xFFFEu;
  v17 = this->m_aspHairNode[1].m_pObject;
  if ( v17 && byVisibleMask & 4 )
    v17->baseclass_0.m_uFlags &= 0xFFFEu;
  v18 = this->m_aspHairNode[2].m_pObject;
  if ( v18 && byVisibleMask & 8 )
    v18->baseclass_0.m_uFlags &= 0xFFFEu;
  v19 = this->m_aspHairNode[3].m_pObject;
  if ( v19 && byVisibleMask & 0x10 )
    v19->baseclass_0.m_uFlags &= 0xFFFEu;
  v20 = this->m_aspHairNode[4].m_pObject;
  if ( v20 && byVisibleMask & 0x20 )
    v20->baseclass_0.m_uFlags &= 0xFFFEu;
  v21 = this->m_aspHairNode[5].m_pObject;
  if ( v21 && byVisibleMask & 0x40 )
    v21->baseclass_0.m_uFlags &= 0xFFFEu;
  v8 = this->m_spFaceNode.m_pObject;
  if ( v8 )
  {
    if ( byVisibleMask < 0 )
    {
LABEL_15:
      v8->baseclass_0.m_uFlags &= 0xFFFEu;
LABEL_16:
      this->m_bFaceCulling = 0;
      return;
    }
    if ( v8 )
      v8->baseclass_0.m_uFlags |= 1u;
  }
  this->m_bFaceCulling = 1;
}

//----- (0065D220) --------------------------------------------------------
ItemInfo *__thiscall CharShape::GetEquippedWeaponItemInfo(CharShape *this)
{
  int v1; // esi@1
  int v2; // edi@1
  ItemInfo *v3; // ebx@2
  int v4; // ecx@5
  int v5; // edi@8
  int v6; // esi@8
  int v7; // ecx@10
  ItemInfo *result; // eax@11
  CharShape *v9; // [sp+Ch] [bp-4h]@1

  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v2 = this->m_kEquip.Equ_LeftHand;
  v9 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          this->m_kEquip.Equ_LeftHand) )
  {
    if ( (unsigned __int16)v2 <= *(_WORD *)(v1 + 200) )
    {
      v4 = *(_DWORD *)(v1 + 196);
      if ( *(_DWORD *)(v4 + 4 * v2) )
        v3 = *(ItemInfo **)(v4 + 4 * v2);
      else
        v3 = 0;
    }
    else
    {
      v3 = 0;
    }
  }
  else
  {
    v3 = 0;
  }
  v5 = v9->m_kEquip.Equ_RightHand;
  v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                           v9->m_kEquip.Equ_RightHand)
    || (unsigned __int16)v5 > *(_WORD *)(v6 + 200)
    || (v7 = *(_DWORD *)(v6 + 196), !*(_DWORD *)(v7 + 4 * v5))
    || (result = *(ItemInfo **)(v7 + 4 * v5)) == 0
    || !result->WeaponType )
    result = v3;
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0065D2C0) --------------------------------------------------------
unsigned int __thiscall CharShape::Get3thAniEventCodeByWeapon(CharShape *this)
{
  int v1; // eax@1
  int v2; // edi@3
  int v3; // esi@3
  ItemInfo *v4; // ebx@4
  int v5; // ecx@7
  int v6; // edi@10
  int v7; // esi@10
  int v8; // eax@12
  int v9; // esi@13
  int v10; // edi@13
  int v11; // edx@17
  int v12; // edi@20
  int v13; // esi@20
  ItemInfo *v14; // esi@24
  CharShape *v16; // [sp+Ch] [bp-4h]@1

  v1 = this->m_kEquip.Equ_AccLeftHand;
  v16 = this;
  if ( (_WORD)v1 != -1 || this->m_kEquip.Equ_AccRightHand != -1 )
  {
    v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v10 = this->m_kEquip.Equ_AccLeftHand;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v1) )
    {
      if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) )
      {
        v11 = *(_DWORD *)(v9 + 196);
        if ( *(_DWORD *)(v11 + 4 * v10) )
          v4 = *(ItemInfo **)(v11 + 4 * v10);
        else
          v4 = 0;
      }
      else
      {
        v4 = 0;
      }
    }
    else
    {
      v4 = 0;
    }
    v12 = v16->m_kEquip.Equ_AccRightHand;
    v13 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                              + 16))(
                             ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                             v16->m_kEquip.Equ_AccRightHand)
      || (unsigned __int16)v12 > *(_WORD *)(v13 + 200) )
      goto LABEL_41;
    v8 = *(_DWORD *)(v13 + 196) + 4 * v12;
  }
  else
  {
    v2 = this->m_kEquip.Equ_LeftHand;
    v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            this->m_kEquip.Equ_LeftHand) )
    {
      if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) )
      {
        v5 = *(_DWORD *)(v3 + 196);
        if ( *(_DWORD *)(v5 + 4 * v2) )
          v4 = *(ItemInfo **)(v5 + 4 * v2);
        else
          v4 = 0;
      }
      else
      {
        v4 = 0;
      }
    }
    else
    {
      v4 = 0;
    }
    v6 = v16->m_kEquip.Equ_RightHand;
    v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( !(unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                 + 16))(
                             ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                             v16->m_kEquip.Equ_RightHand)
      || (unsigned __int16)v6 > *(_WORD *)(v7 + 200) )
      goto LABEL_41;
    v8 = *(_DWORD *)(v7 + 196) + 4 * v6;
  }
  if ( *(_DWORD *)v8 )
  {
    v14 = *(ItemInfo **)v8;
    if ( *(_DWORD *)v8 )
    {
      if ( ItemInfoTab::IsOneHandSwordAniType(*(ItemInfo **)v8) )
        return 10;
      if ( ItemInfoTab::IsTwoHandSwordAniType(v14) )
        return 20;
      if ( ItemInfoTab::IsCrossBowAniType(v14) )
        return 40;
      if ( ItemInfoTab::IsOneHandStaffAniType(v14) )
        return 50;
      if ( ItemInfoTab::IsTwoHandStaffAniType(v14) )
        return 60;
      if ( ItemInfoTab::IsTwoHandAxeAniType(v14) )
        return 70;
      if ( ItemInfoTab::IsInvincibleHammerType(v14) )
        return 80;
      if ( ItemInfoTab::IsDualWeaponAniType(v14) )
        return 90;
      return 0;
    }
  }
LABEL_41:
  if ( v4 && ItemInfoTab::IsBowAniType(v4) )
    return 30;
  return 0;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0065D4E0) --------------------------------------------------------
void __thiscall CharShape::StopWeaponAfterImgEff(CharShape *this)
{
  CharShape *v1; // edi@1
  AfterImgEff *v2; // ecx@1
  NiNode *v3; // eax@2
  AfterImgEff *v4; // esi@2

  v1 = this;
  v2 = this->m_spAuraOfWeapon.m_pObject;
  if ( v2 )
  {
    v3 = (NiNode *)((int (*)(void))v2->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
    World::DetachEffect(&g_kWorld, v3);
    v4 = v1->m_spAuraOfWeapon.m_pObject;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
      v1->m_spAuraOfWeapon.m_pObject = 0;
    }
  }
}

//----- (0065D540) --------------------------------------------------------
void __thiscall CharShape::EnableEyeShape(CharShape *this, char byEnableType)
{
  NiNode *v2; // eax@4

  if ( this->m_kClassID )
  {
    if ( !this->m_bFaceCulling )
    {
      if ( this->m_byEyeState != byEnableType )
      {
        v2 = this->m_pkEyeShapeAnotherNode;
        if ( v2 || (v2 = this->m_pkEyeShapeNode) != 0 )
        {
          this->m_byEyeState = byEnableType;
          v2->baseclass_0.m_uFlags |= 1u;
          if ( byEnableType & 1 )
            v2->baseclass_0.m_uFlags &= 0xFFFEu;
          if ( byEnableType & 0x10 )
            v2->baseclass_0.m_uFlags &= 0xFFFEu;
          NiAVObject::Update(&v2->baseclass_0.m_pkParent->baseclass_0, 0.0, 0);
        }
      }
    }
  }
}

//----- (0065D5C0) --------------------------------------------------------
void __thiscall CharShape::ShowItemUpgradeEffect(CharShape *this, bool _bShow)
{
  if ( this->m_bShowWeaponEffect != _bShow )
  {
    this->m_bShowWeaponEffect = _bShow;
    ItemUpGrade::SetShow(&this->m_kItemUpGrade, _bShow);
  }
}

//----- (0065D5F0) --------------------------------------------------------
void __thiscall CharShape::ShowItemUpgradeEffect(CharShape *this, unsigned int _uiEquipPos, bool _bShow)
{
  Effect *v3; // eax@3
  Effect *v4; // esi@3

  if ( this->m_bShowWeaponEffect != _bShow )
  {
    this->m_bShowWeaponEffect = _bShow;
    if ( _uiEquipPos < 0x1E )
    {
      v3 = (Effect *)this->m_kItemUpGrade.m_arrLinkData[_uiEquipPos].dwEffectIndex[0];
      v4 = (Effect *)this->m_kItemUpGrade.m_arrLinkData[_uiEquipPos].dwEffectIndex[1];
      if ( v3 )
        EffectMgr::SetShow(&g_kEffectMgr, v3, _bShow, 0);
      if ( v4 )
        EffectMgr::SetShow(&g_kEffectMgr, v4, _bShow, 0);
    }
  }
}

//----- (0065D650) --------------------------------------------------------
void __thiscall CharShape::DetachOtherSideNode(CharShape *this, NiNode *pkNode, char *kNodeName)
{
  int v3; // eax@3
  int v4; // ecx@4

  if ( pkNode )
  {
    if ( kNodeName )
    {
      v3 = ((int (__stdcall *)(char *))pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(kNodeName);
      if ( v3 )
      {
        v4 = *(_DWORD *)(v3 + 32);
        if ( v4 )
        {
          (*(void (__stdcall **)(NiNode **, int))(*(_DWORD *)v4 + 120))(&pkNode, v3);
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNode);
        }
      }
    }
  }
}

//----- (0065D690) --------------------------------------------------------
ItemInfo *__thiscall CharShape::GetEquippedShiledItemInfo(CharShape *this)
{
  int v1; // esi@1
  int v2; // edi@1
  int v3; // ecx@3
  ItemInfo *result; // eax@4

  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v2 = this->m_kEquip.Equ_LeftHand;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                           this->m_kEquip.Equ_LeftHand)
    || (unsigned __int16)v2 > *(_WORD *)(v1 + 200)
    || (v3 = *(_DWORD *)(v1 + 196), !*(_DWORD *)(v3 + 4 * v2))
    || (result = *(ItemInfo **)(v3 + 4 * v2)) == 0 )
    result = 0;
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0065D6E0) --------------------------------------------------------
void __thiscall ItemUpGrade::SetEffectHandle(ItemUpGrade *this, unsigned int _uiEquipPos, unsigned int _dwEffectIndex0, unsigned int _dwEffectIndex1)
{
  ItemUpGrade *v4; // esi@1
  unsigned int v5; // edi@1
  Effect *v6; // eax@1
  Effect *v7; // ecx@1
  unsigned int v8; // ebx@1
  Effect *_uiEquipPosa; // [sp+14h] [bp+8h]@1

  v4 = this;
  v5 = _uiEquipPos;
  v6 = (Effect *)this->m_arrLinkData[_uiEquipPos].dwEffectIndex[0];
  v7 = (Effect *)this->m_arrLinkData[_uiEquipPos].dwEffectIndex[1];
  v8 = (unsigned int)&v4->m_arrLinkData[_uiEquipPos].dwEffectIndex[1];
  _uiEquipPosa = v7;
  if ( v6 )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, v6);
    v7 = _uiEquipPosa;
  }
  if ( v7 )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, v7);
    v4->m_arrLinkData[v5].dwEffectIndex[0] = _dwEffectIndex0;
    *(_DWORD *)v8 = _dwEffectIndex1;
  }
  else
  {
    v4->m_arrLinkData[v5].dwEffectIndex[0] = _dwEffectIndex0;
    *(_DWORD *)v8 = _dwEffectIndex1;
  }
}

//----- (0065D740) --------------------------------------------------------
void __thiscall CharShape::SetShapeInfo(CharShape *this, PROTO_AVATAR_SHAPE_INFO *pkInfo)
{
  PROTO_AVATAR_SHAPE_INFO *v2; // edi@1
  CharShape *v3; // esi@1
  char byFTIndex; // [sp+Bh] [bp-1h]@9

  v2 = pkInfo;
  v3 = this;
  this->m_kClassID = ((unsigned __int8)pkInfo->_bf0 >> 2) & 0x1F;
  this->m_kMobID = -1;
  this->m_byRace = v2->_bf0 & 3;
  this->m_byGender = (unsigned __int8)v2->_bf0 >> 7;
  this->m_byHairType = v2->hairtype;
  this->m_byHairColor = v2->haircolor;
  switch ( ((unsigned int)v2->_bf0 >> 2) & 0x1F )
  {
    case 1u:
    case 2u:
    case 3u:
    case 4u:
    case 5u:
      LOBYTE(pkInfo) = 1;
      break;
    case 6u:
    case 7u:
    case 8u:
    case 9u:
    case 0xAu:
      LOBYTE(pkInfo) = 6;
      break;
    case 0xBu:
    case 0xCu:
    case 0xDu:
    case 0xEu:
    case 0xFu:
      LOBYTE(pkInfo) = 11;
      break;
    case 0x10u:
    case 0x11u:
    case 0x12u:
    case 0x13u:
    case 0x14u:
      LOBYTE(pkInfo) = 16;
      break;
    case 0x15u:
    case 0x16u:
    case 0x17u:
    case 0x18u:
    case 0x19u:
      LOBYTE(pkInfo) = 21;
      break;
    case 0x1Au:
    case 0x1Bu:
      LOBYTE(pkInfo) = 26;
      break;
    default:
      LOBYTE(pkInfo) = 0;
      break;
  }
  FaceInfoTab::GetIndex(v2->faceshape, (char)pkInfo, (unsigned __int8)v2->_bf0 >> 7, (char *)&pkInfo + 3, &byFTIndex);
  if ( BYTE3(pkInfo) != -1 )
    v3->m_byFaceShapeType = BYTE3(pkInfo);
  if ( byFTIndex == -1 )
  {
    v3->m_uiFaceTypeIndex = v2->faceshape;
  }
  else
  {
    v3->m_byFace = byFTIndex;
    v3->m_uiFaceTypeIndex = v2->faceshape;
  }
}

//----- (0065D8A0) --------------------------------------------------------
void __thiscall CharShape::SetVisibleSubParts(CharShape *this, CharShape::LinkIndex enumIndex, bool bVisible)
{
  NiNode *v3; // ebx@1
  unsigned int v4; // edi@2
  NiAVObject *v5; // esi@4
  const char *v6; // ecx@5
  unsigned int unChildCnt; // [sp+Ch] [bp+8h]@2

  v3 = this->m_apkLinkNode[enumIndex];
  if ( v3 )
  {
    v4 = 0;
    unChildCnt = v3->m_kChildren.m_uiSize;
    if ( unChildCnt )
    {
      do
      {
        if ( v3->m_kChildren.m_uiSize > v4 )
        {
          v5 = v3->m_kChildren.m_pBase[v4].m_pObject;
          if ( v5 )
          {
            v6 = v5->baseclass_0.m_pcName;
            if ( v6 )
            {
              if ( strcmp("EquipedNode", v6) )
              {
                if ( bVisible )
                  v5->m_uFlags &= 0xFFFEu;
                else
                  v5->m_uFlags |= 1u;
              }
            }
          }
        }
        ++v4;
      }
      while ( v4 < unChildCnt );
    }
  }
}

//----- (0065D930) --------------------------------------------------------
NiNode *__thiscall CharShape::SetSubItem(CharShape *this, CharShape::LinkIndex enumIndex, const char *szNifName, const char *szSubItemTextureName, const char *szSubItemNode, CharShape::AttachType eAttachType)
{
  CharShape *v6; // edi@1
  NiNode *v7; // esi@1
  NiObjectNET *v8; // ebx@1
  void *v10; // eax@7
  NiObjectNET *v11; // eax@8
  NiObject *v12; // eax@9
  NiObject *v13; // edi@9
  unsigned int v14; // eax@11
  unsigned int v15; // esi@11
  int j; // eax@13
  void *v17; // eax@17
  NiObjectNET *v18; // eax@18
  NiObject *v19; // eax@19
  NiObject *v20; // edi@19
  unsigned int v21; // eax@21
  unsigned int v22; // esi@21
  int i; // eax@23
  NiNode *pkTargetLinkNode; // [sp+20h] [bp+Ch]@3
  NiObjectNET *pkResultNode; // [sp+24h] [bp+10h]@9

  v6 = this;
  v7 = CharResMgr::GetSubItem(&g_kCharResMgr, szNifName, this->m_kClassID, this->m_byGender, szSubItemTextureName);
  v8 = 0;
  if ( !v7 || (pkTargetLinkNode = v6->m_apkLinkNode[enumIndex]) == 0 )
    return 0;
  if ( eAttachType )
  {
    if ( eAttachType == 1 )
    {
      v17 = operator new(0xE8u);
      if ( v17 )
      {
        NiNode::NiNode((NiNode *)v17, 0);
        v8 = v18;
      }
      pkResultNode = v8;
      v19 = (NiObject *)v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                          (NiRefObject *)v7,
                          (unsigned int)"Left");
      v20 = v19;
      if ( v19 )
      {
        if ( NiObject::IsKindOf(&NiNode::m_RTTI, v19) )
        {
          v21 = v20[23].baseclass_0.m_uiRefCount;
          v22 = 0;
          if ( v21 )
          {
            if ( v21 > 0 )
              goto LABEL_24;
            for ( i = 0; ; i = *(_DWORD *)(v20[22].baseclass_0.m_uiRefCount + 4 * v22) )
            {
              ((void (__thiscall *)(NiObjectNET *, int, _DWORD))v8->baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
                v8,
                i,
                0);
              ++v22;
              if ( v20[23].baseclass_0.m_uiRefCount <= v22 )
                break;
LABEL_24:
              ;
            }
          }
        }
      }
    }
    else
    {
      if ( eAttachType != 2 )
        return 0;
      v10 = operator new(0xE8u);
      if ( v10 )
      {
        NiNode::NiNode((NiNode *)v10, 0);
        v8 = v11;
      }
      pkResultNode = v8;
      v12 = (NiObject *)v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                          (NiRefObject *)v7,
                          (unsigned int)"Right");
      v13 = v12;
      if ( v12 )
      {
        if ( NiObject::IsKindOf(&NiNode::m_RTTI, v12) )
        {
          v14 = v13[23].baseclass_0.m_uiRefCount;
          v15 = 0;
          if ( v14 )
          {
            if ( v14 > 0 )
              goto LABEL_14;
            for ( j = 0; ; j = *(_DWORD *)(v13[22].baseclass_0.m_uiRefCount + 4 * v15) )
            {
              ((void (__thiscall *)(NiObjectNET *, int, _DWORD))v8->baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
                v8,
                j,
                0);
              ++v15;
              if ( v13[23].baseclass_0.m_uiRefCount <= v15 )
                break;
LABEL_14:
              ;
            }
          }
        }
      }
    }
  }
  else
  {
    pkResultNode = (NiObjectNET *)v7;
  }
  if ( !pkResultNode )
    return 0;
  NiObjectNET::SetName(pkResultNode, szSubItemNode);
  ((void (__cdecl *)(NiObjectNET *))pkTargetLinkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(pkResultNode);
  return (NiNode *)pkResultNode;
}

//----- (0065DB30) --------------------------------------------------------
bool __thiscall CharShape::Equip(CharShape *this, unsigned int uiEquipPos, unsigned __int16 kItemID, char byUpdrade)
{
  this->m_uiEquipPos = uiEquipPos;
  return CharShape::Equip(this, kItemID, byUpdrade);
}

//----- (0065DB50) --------------------------------------------------------
bool __thiscall CharShape::Equip_LinkItem(CharShape *this, ItemInfo *pkItemInfo, unsigned int uiEquipPos, NiNode *pkNode, bool _bTwoHand)
{
  CharShape *v5; // esi@1
  bool result; // al@2
  WeaponTypeEnum v7; // eax@16
  void *v8; // eax@19
  void *v9; // eax@21
  WeaponTypeEnum v10; // eax@25
  void *v11; // eax@28
  void *v12; // eax@30

  v5 = this;
  if ( pkItemInfo )
  {
    switch ( uiEquipPos )
    {
      case 1u:
        return CharShape::Link(this, 0, pkNode, 0x1Bu);
      case 0x1Bu:
        return CharShape::Link(this, 0, pkNode, 0x1Bu);
      case 0x1Au:
        return CharShape::Link(this, LINK_EYE, pkNode, 0x1Au);
      case 0x19u:
        CharShape::DetachOtherSideNode(this, pkNode, "Right");
        CharShape::Link(v5, LINK_CHEST, pkNode, 0x19u);
        goto $LN38_23;
      default:
        goto $LN38_23;
      case 0x1Cu:
        CharShape::DetachOtherSideNode(this, pkNode, "Left");
        CharShape::Link(v5, LINK_CHEST_R, pkNode, 0x1Cu);
        return 0;
      case 4u:
        return CharShape::Link(this, LINK_MOUTH, pkNode, 4u);
      case 0x18u:
        return CharShape::Link(this, LINK_MOUTH, pkNode, 0x18u);
      case 9u:
        return CharShape::Link(this, LINK_BACK, pkNode, 9u);
      case 0xAu:
        return CharShape::Link(this, LINK_LEFTHAND, pkNode, 0xAu);
      case 0xBu:
        return CharShape::Link(this, LINK_LEFTHAND, pkNode, 0xBu);
      case 0xCu:
        if ( !pkNode )
          goto $LN38_23;
        v7 = pkItemInfo->WeaponType;
        if ( v7 == 18 || v7 == 17 )
        {
          v8 = pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)pkNode,
                 (unsigned int)"Left");
          if ( v8 )
          {
            *((float *)v8 + 22) = 0.0;
            *((float *)v8 + 23) = 0.0;
            *((float *)v8 + 24) = 0.0;
          }
          CharShape::Link(v5, LINK_LEFTHAND, (NiNode *)v8, 0xAu);
          v9 = pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)pkNode,
                 (unsigned int)"Right");
          if ( v9 )
          {
            *((float *)v9 + 22) = 0.0;
            *((float *)v9 + 23) = 0.0;
            *((float *)v9 + 24) = 0.0;
          }
          result = CharShape::Link(v5, LINK_RIGHTHAND, (NiNode *)v9, 0xCu);
        }
        else
        {
          result = CharShape::Link(this, LINK_RIGHTHAND, pkNode, 0xCu);
        }
        break;
      case 0xDu:
        if ( pkNode )
        {
          v10 = pkItemInfo->WeaponType;
          if ( v10 == 18 || v10 == 17 )
          {
            v11 = pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                    (NiRefObject *)pkNode,
                    (unsigned int)"Right");
            if ( v11 )
            {
              *((float *)v11 + 22) = 0.0;
              *((float *)v11 + 23) = 0.0;
              *((float *)v11 + 24) = 0.0;
            }
            CharShape::Link(v5, LINK_RIGHTHAND, (NiNode *)v11, 0xCu);
            v12 = pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                    (NiRefObject *)pkNode,
                    (unsigned int)"Left");
            if ( v12 )
            {
              *((float *)v12 + 22) = 0.0;
              *((float *)v12 + 23) = 0.0;
              *((float *)v12 + 24) = 0.0;
            }
            result = CharShape::Link(v5, LINK_LEFTHAND, (NiNode *)v12, 0xAu);
          }
          else
          {
            result = CharShape::Link(this, LINK_RIGHTHAND, pkNode, 0xDu);
          }
        }
        else
        {
$LN38_23:
          result = 0;
        }
        break;
      case 0xEu:
        CharShape::Link(this, LINK_LEFTBRACELET, pkNode, 0xEu);
        CharShape::Link(v5, LINK_RIGHTBRACELET, pkNode, 0xEu);
        result = 1;
        break;
      case 0x11u:
        result = CharShape::Link(this, LINK_WORLD_COS, pkNode, 0x11u);
        break;
      case 0x12u:
        result = CharShape::Link(this, LINK_TAIL, pkNode, 0x12u);
        break;
      case 0x16u:
        CharShape::Link(this, LINK_LEFTSHOESACC, pkNode, 0x16u);
        CharShape::Link(v5, LINK_RIGHTSHOESACC, pkNode, 0x16u);
        result = 1;
        break;
      case 0x1Du:
        result = CharShape::Link(this, LINK_LEFTHAND, pkNode, 0x1Du);
        break;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0065DEF0) --------------------------------------------------------
bool __thiscall CharShape::TextureFace(CharShape *this, NiNode *pkTargetNode, NiTexture *pkTexture)
{
  bool result; // al@2
  ResetTexture kResetTexture; // [sp+0h] [bp-18h]@3
  int v5; // [sp+14h] [bp-4h]@3

  if ( pkTargetNode )
  {
    kResetTexture.baseclass_0.m_pCallBack = 0;
    kResetTexture.baseclass_0.m_nCurLevel = -1;
    kResetTexture.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&ResetTexture::_vftable_;
    v5 = 0;
    Ns_TourScene::TourScene(&kResetTexture.baseclass_0, pkTargetNode, &NiAVObject::m_RTTI, pkTexture);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9C41C8: using guessed type int (__stdcall *ResetTexture___vftable_)(int _pkObject, int _pData);

//----- (0065DF70) --------------------------------------------------------
bool __thiscall CharShape::TextureClosedEye(CharShape *this, NiNode *pkTargetNode, NiTexture *pkTexture)
{
  bool result; // al@2
  unsigned int v4; // ebx@4
  unsigned int v5; // esi@4
  NiAVObject *v6; // ecx@6
  NiProperty *v7; // eax@7

  if ( pkTargetNode && pkTexture )
  {
    v4 = pkTargetNode->m_kChildren.m_uiESize;
    v5 = 0;
    if ( (signed int)v4 > 0 )
    {
      do
      {
        if ( pkTargetNode->m_kChildren.m_uiSize > v5 )
        {
          v6 = pkTargetNode->m_kChildren.m_pBase[v5].m_pObject;
          if ( v6 )
          {
            v7 = NiAVObject::GetProperty(v6, 8);
            if ( v7 )
              NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v7, pkTexture);
          }
        }
        ++v5;
      }
      while ( (signed int)v5 < (signed int)v4 );
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0065DFD0) --------------------------------------------------------
bool __thiscall CharShape::TextureFaceTattoo(CharShape *this, NiTexture *pkTexture)
{
  NiAVObject *v2; // ecx@1
  NiProperty *v4; // eax@3
  NiTexturingProperty *v5; // esi@3
  NiTexturingProperty::Map *v6; // ecx@5
  void *v7; // eax@7
  NiTexturingProperty::Map *v8; // eax@8
  NiTexturingProperty::Map *v9; // [sp-10h] [bp-1Ch]@8

  v2 = (NiAVObject *)this->m_apkGeom[1];
  if ( !v2 )
    return 0;
  v4 = NiAVObject::GetProperty(v2, 8);
  v5 = (NiTexturingProperty *)v4;
  if ( v4 )
  {
    if ( pkTexture )
    {
      v6 = (NiTexturingProperty::Map *)LODWORD(v4[1].baseclass_0.m_spControllers.m_pObject->m_fHiKeyTime);
      if ( v6 )
      {
        NiD3DTextureStage::SetTexture(v6, pkTexture);
        return 1;
      }
      v7 = operator new(0x18u);
      if ( v7 )
      {
        NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v7, pkTexture, 1u, WRAP_S_WRAP_T, FILTER_TRILERP, 0);
        v9 = v8;
      }
      else
      {
        v9 = 0;
      }
    }
    else
    {
      v9 = 0;
    }
    NiTexturingProperty::SetDecalMap(v5, 0, v9);
  }
  return 1;
}

//----- (0065E0A0) --------------------------------------------------------
bool __thiscall CharShape::TextureBody(CharShape *this, NiTexture *pkTexture)
{
  CharShape *v2; // esi@1
  NiAVObject *v3; // ecx@1
  bool result; // al@2
  NiProperty *v5; // eax@3
  NiAVObject **v6; // esi@5
  signed int v7; // edi@5
  NiProperty *v8; // eax@7

  v2 = this;
  v3 = (NiAVObject *)this->m_apkGeom[2];
  if ( v3 )
  {
    v5 = NiAVObject::GetProperty(v3, 8);
    if ( v5 )
      NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v5, pkTexture);
    v6 = (NiAVObject **)v2->m_apkLodGeom;
    v7 = 3;
    do
    {
      if ( *v6 )
      {
        v8 = NiAVObject::GetProperty(*v6, 8);
        if ( v8 )
          NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v8, pkTexture);
      }
      ++v6;
      --v7;
    }
    while ( v7 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0065E110) --------------------------------------------------------
bool __thiscall CharShape::TextureLeg(CharShape *this, NiTexture *pkTexture)
{
  CharShape *v2; // esi@1
  NiAVObject *v3; // ecx@1
  bool result; // al@2
  NiProperty *v5; // eax@3
  NiAVObject **v6; // esi@5
  signed int v7; // edi@5
  NiProperty *v8; // eax@7

  v2 = this;
  v3 = (NiAVObject *)this->m_apkGeom[3];
  if ( v3 )
  {
    v5 = NiAVObject::GetProperty(v3, 8);
    if ( v5 )
      NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v5, pkTexture);
    v6 = (NiAVObject **)&v2->m_apkLodGeom[3];
    v7 = 3;
    do
    {
      if ( *v6 )
      {
        v8 = NiAVObject::GetProperty(*v6, 8);
        if ( v8 )
          NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v8, pkTexture);
      }
      ++v6;
      --v7;
    }
    while ( v7 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0065E180) --------------------------------------------------------
bool __thiscall CharShape::TextureShoes(CharShape *this, NiTexture *pkTexture)
{
  CharShape *v2; // esi@1
  NiAVObject *v3; // ecx@1
  bool result; // al@2
  NiProperty *v5; // eax@3
  NiAVObject **v6; // esi@5
  signed int v7; // edi@5
  NiProperty *v8; // eax@7

  v2 = this;
  v3 = (NiAVObject *)this->m_apkGeom[4];
  if ( v3 )
  {
    v5 = NiAVObject::GetProperty(v3, 8);
    if ( v5 )
      NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v5, pkTexture);
    v6 = (NiAVObject **)&v2->m_apkLodGeom[6];
    v7 = 3;
    do
    {
      if ( *v6 )
      {
        v8 = NiAVObject::GetProperty(*v6, 8);
        if ( v8 )
          NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v8, pkTexture);
      }
      ++v6;
      --v7;
    }
    while ( v7 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0065E1F0) --------------------------------------------------------
NiNode *__cdecl FindBoneRootNodes(NiNode *pkNode)
{
  unsigned int v1; // edi@1
  NiExtraData *v2; // esi@2
  int v3; // eax@3
  char v4; // al@6
  int v5; // eax@7
  char *v6; // eax@8
  int v7; // eax@9
  unsigned int v8; // eax@11
  unsigned int v9; // edi@11
  NiPointer<NiAVObject> *v10; // ecx@13
  NiNode *v11; // esi@13
  int v12; // eax@14
  NiNode *result; // eax@19

  v1 = 0;
  if ( pkNode->baseclass_0.baseclass_0.m_uiExtraDataSize )
  {
    while ( 1 )
    {
      v2 = pkNode->baseclass_0.baseclass_0.m_ppkExtra[v1];
      if ( v2 )
      {
        v3 = ((int (__thiscall *)(NiExtraData *))v2->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2);
        if ( v3 )
        {
          while ( (NiRTTI *)v3 != &NiStringExtraData::m_RTTI )
          {
            v3 = *(_DWORD *)(v3 + 4);
            if ( !v3 )
              goto LABEL_6;
          }
          v4 = 1;
        }
        else
        {
LABEL_6:
          v4 = 0;
        }
        v5 = v4 != 0 ? (int)v2 : 0;
        if ( v5 )
        {
          v6 = *(char **)(v5 + 12);
          if ( v6 )
          {
            strstr(v6, "NiBoneLOD#BoneRoot");
            if ( v7 )
              break;
          }
        }
      }
      ++v1;
      if ( v1 >= pkNode->baseclass_0.baseclass_0.m_uiExtraDataSize )
        goto LABEL_11;
    }
    result = pkNode;
  }
  else
  {
LABEL_11:
    v8 = pkNode->m_kChildren.m_uiSize;
    v9 = 0;
    if ( v8 )
    {
      if ( v8 <= 0 )
        goto LABEL_21;
      while ( 1 )
      {
        v10 = pkNode->m_kChildren.m_pBase;
        v11 = (NiNode *)v10[v9].m_pObject;
        if ( v11 )
        {
          v12 = ((int (__thiscall *)(NiAVObject *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v10[v9].m_pObject);
          if ( v12 )
          {
            while ( (NiRTTI *)v12 != &NiNode::m_RTTI )
            {
              v12 = *(_DWORD *)(v12 + 4);
              if ( !v12 )
                goto LABEL_21;
            }
            result = FindBoneRootNodes(v11);
            if ( result )
              break;
          }
        }
LABEL_21:
        ++v9;
        if ( pkNode->m_kChildren.m_uiSize <= v9 )
          goto LABEL_22;
      }
    }
    else
    {
LABEL_22:
      result = 0;
    }
  }
  return result;
}

//----- (0065E2C0) --------------------------------------------------------
void __thiscall CharShape::SetHairParts(CharShape *this, char byPartsIndex, char byIndexID, bool bUseLink, const char *pchModelName, const char *pchTexName)
{
  CharShape *v6; // ebx@1
  const char *v7; // eax@1
  char v8; // cl@2
  NiNode *v9; // esi@6
  NiD3DDefaultShader *v10; // eax@13
  NiNode *v11; // edi@13
  const char *v12; // eax@14
  char v13; // cl@15
  NiPointer<NiNode> spNode; // [sp+8h] [bp-118h]@1
  char temp[260]; // [sp+Ch] [bp-114h]@13
  unsigned int v16; // [sp+110h] [bp-10h]@1
  int v17; // [sp+11Ch] [bp-4h]@8
  int v18; // [sp+120h] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v6 = this;
  v7 = pchModelName;
  LOBYTE(spNode.m_pObject) = byIndexID;
  do
    v8 = *v7++;
  while ( v8 );
  if ( v7 != pchModelName + 1 && strcmp(pchModelName, "-") )
  {
    if ( bUseLink )
    {
      v9 = CharResMgr::GetHair(
             &g_kCharResMgr,
             v6->m_kClassID,
             v6->m_byGender,
             (char)spNode.m_pObject,
             byPartsIndex,
             pchModelName,
             pchTexName);
      spNode.m_pObject = v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v17 = 0;
      if ( v9 )
      {
        CharShape::Link(v6, LINK_HAIR, v9, 0);
        NiPointer<NiActorManager>::operator_(
          (NiPointer<NiPixelData> *)&v6->m_aspHairNode[(unsigned __int8)byPartsIndex],
          (NiPointer<NiPixelData> *)&spNode);
      }
      v17 = -1;
      if ( v9 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    else
    {
      memset(temp, 0, 0x104u);
      sprintf(temp, "#%s");
      v10 = (NiD3DDefaultShader *)((int (__stdcall *)(_DWORD))v6->m_pkRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(temp);
      v11 = (NiNode *)v10;
      if ( v10 )
      {
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&v6->m_aspHairNode[(unsigned __int8)byPartsIndex],
          v10);
        v6->m_aspHairNode[(unsigned __int8)byPartsIndex].m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
        v12 = pchTexName;
        do
          v13 = *v12++;
        while ( v13 );
        if ( v12 != pchTexName + 1 && strcmp(pchTexName, "-") )
          CharResMgr::SetHairTexture2TargetNode(&g_kCharResMgr, v11, v6->m_byGender, v6->m_kClassID, pchTexName);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0065E4F0) --------------------------------------------------------
void __thiscall CharShape::EquipAllAvatar(CharShape *this)
{
  CharShape *v1; // ebx@1
  unsigned __int16 v2; // ST00_2@1
  unsigned __int16 v3; // ST00_2@1
  unsigned __int16 kItemID[2]; // [sp+Ch] [bp-2Ch]@1
  int v5; // [sp+12h] [bp-26h]@1
  int v6; // [sp+16h] [bp-22h]@1
  int v7; // [sp+1Ah] [bp-1Eh]@1
  int v8; // [sp+1Eh] [bp-1Ah]@1
  unsigned __int16 v9; // [sp+22h] [bp-16h]@1
  int v10; // [sp+24h] [bp-14h]@1
  int v11; // [sp+2Ah] [bp-Eh]@1
  unsigned __int16 v12; // [sp+2Eh] [bp-Ah]@1
  int v13; // [sp+30h] [bp-8h]@1
  __int16 v14; // [sp+34h] [bp-4h]@1
  char v15; // [sp+36h] [bp-2h]@1

  v1 = this;
  memcpy(kItemID, &this->m_kEquip, 0x28u);
  v14 = *(_WORD *)&this->m_kEquip.upgrade.gap0[0];
  v15 = this->m_kEquip.upgrade._bf2;
  CharShape::Equip(this, kItemID[0], 0);
  CharShape::Equip(v1, v5, HIBYTE(v14) & 0xF);
  CharShape::Equip(v1, v6, HIBYTE(v14) >> 4);
  CharShape::Equip(v1, HIWORD(v6), v15 & 0xF);
  CharShape::Equip(v1, v8, 0);
  CharShape::Equip(v1, HIWORD(v7), 0);
  CharShape::Equip(v1, v7, 0);
  v2 = v13;
  v1->m_uiEquipPos = 25;
  CharShape::Equip(v1, v2, 0);
  CharShape::Equip(v1, HIWORD(v8), 0);
  CharShape::Equip(v1, v10, 0);
  CharShape::Equip(v1, kItemID[1], 0);
  v3 = v9;
  v1->m_uiEquipPos = 28;
  CharShape::Equip(v1, v3, 0);
  CharShape::Equip(v1, v11, 0);
  CharShape::Equip(v1, HIWORD(v11), 0);
  CharShape::Equip(v1, v12, 0);
}

//----- (0065E610) --------------------------------------------------------
void __thiscall CharShape::EquipAll(CharShape *this)
{
  CharShape *v1; // ebx@1
  unsigned __int16 v2; // ST00_2@1
  unsigned __int16 v3; // ST00_2@1
  unsigned __int16 kItemID[2]; // [sp+Ch] [bp-2Ch]@1
  unsigned __int16 v5; // [sp+10h] [bp-28h]@1
  int v6; // [sp+12h] [bp-26h]@1
  int v7; // [sp+16h] [bp-22h]@1
  int v8; // [sp+1Ah] [bp-1Eh]@1
  int v9; // [sp+1Eh] [bp-1Ah]@1
  int v10; // [sp+22h] [bp-16h]@1
  int v11; // [sp+26h] [bp-12h]@1
  int v12; // [sp+2Ah] [bp-Eh]@1
  unsigned __int16 v13; // [sp+2Eh] [bp-Ah]@1
  int v14; // [sp+30h] [bp-8h]@1
  __int16 v15; // [sp+34h] [bp-4h]@1
  char v16; // [sp+36h] [bp-2h]@1

  v1 = this;
  memcpy(kItemID, &this->m_kEquip, 0x28u);
  v15 = *(_WORD *)&this->m_kEquip.upgrade.gap0[0];
  v16 = this->m_kEquip.upgrade._bf2;
  CharShape::ClearEquipInfo(this);
  CharShape::Equip(v1, kItemID[0], 0);
  CharShape::Equip(v1, v6, HIBYTE(v15) & 0xF);
  CharShape::Equip(v1, HIWORD(v6), v15 & 0xF);
  CharShape::Equip(v1, v5, (unsigned __int8)v15 >> 4);
  CharShape::Equip(v1, v7, HIBYTE(v15) >> 4);
  CharShape::Equip(v1, HIWORD(v7), v16 & 0xF);
  CharShape::Equip(v1, v11, 0);
  CharShape::Equip(v1, HIWORD(v11), 0);
  CharShape::Equip(v1, v9, 0);
  CharShape::Equip(v1, HIWORD(v8), 0);
  CharShape::Equip(v1, v8, 0);
  v2 = v14;
  v1->m_uiEquipPos = 25;
  CharShape::Equip(v1, v2, 0);
  CharShape::Equip(v1, HIWORD(v9), 0);
  CharShape::Equip(v1, HIWORD(v10), 0);
  CharShape::Equip(v1, kItemID[1], 0);
  v3 = v10;
  v1->m_uiEquipPos = 28;
  CharShape::Equip(v1, v3, 0);
  CharShape::Equip(v1, v12, 0);
  CharShape::Equip(v1, HIWORD(v12), 0);
  CharShape::Equip(v1, v13, 0);
  CharShape::Equip(v1, HIWORD(v14), 0);
}

//----- (0065E780) --------------------------------------------------------
void __thiscall CharShape::Update(CharShape *this, float fTime)
{
  CharShape *v2; // esi@1
  AfterImgEff *v3; // ecx@1

  v2 = this;
  v3 = this->m_spAuraOfWeapon.m_pObject;
  if ( v3 )
  {
    if ( (unsigned __int8)((int (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[19].__vecDelDtor)(LODWORD(fTime)) )
      CharShape::StopWeaponAfterImgEff(v2);
    else
      ((void (__stdcall *)(_DWORD))v2->m_spAuraOfWeapon.m_pObject->baseclass_0.baseclass_0.vfptr[14].__vecDelDtor)(LODWORD(fTime));
  }
}

//----- (0065E7E0) --------------------------------------------------------
void __thiscall CharShape::SetMiniMonEffect(CharShape *this, bool bIsAttach)
{
  int v2; // edi@0
  CharShape *v3; // ebx@1
  Effect *v4; // eax@1
  int v5; // eax@4
  int v6; // esi@6
  int v7; // ST14_4@6
  int v8; // edi@6
  int v9; // eax@10
  int v10; // esi@13
  int v11; // edi@13
  int v12; // eax@17
  char v13; // bl@22
  MinimonInfo *v14; // esi@22
  MinimonInfo *v15; // edi@22
  MinimonInfo *v16; // eax@23
  MinimonInfo *v17; // eax@27
  CharShape *v18; // esi@34
  NiNode *v19; // ecx@35
  NiNode *v20; // eax@42
  CharShape *v21; // [sp+20h] [bp-Ch]@1
  int pkRightMiniMonInfo; // [sp+24h] [bp-8h]@14
  int pkLeftMiniMonInfo; // [sp+28h] [bp-4h]@7

  v3 = this;
  v4 = (Effect *)this->m_hMiniMonAutoPickEff;
  v21 = this;
  if ( v4 )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, v4);
    v3->m_hMiniMonAutoPickEff = 0;
  }
  if ( !bIsAttach )
  {
    v3->m_bAutoPickItem = 0;
    return;
  }
  v5 = v3->m_kEquip.Equ_Minimon;
  if ( (_WORD)v5 != -1 || v3->m_kEquip.Equ_MiniMon_R != -1 )
  {
    v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v7 = v2;
    v8 = v3->m_kEquip.Equ_Minimon;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v5,
                            v7) )
    {
      if ( (unsigned __int16)v8 <= *(_WORD *)(v6 + 200) )
      {
        v9 = *(_DWORD *)(v6 + 196) + 4 * v8;
        pkLeftMiniMonInfo = *(_DWORD *)v9 ? *(_DWORD *)v9 : 0;
      }
      else
      {
        pkLeftMiniMonInfo = 0;
      }
    }
    else
    {
      pkLeftMiniMonInfo = 0;
    }
    v10 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v11 = v3->m_kEquip.Equ_MiniMon_R;
    if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable) )
    {
      if ( (unsigned __int16)v11 <= *(_WORD *)(v10 + 200) )
      {
        v12 = *(_DWORD *)(v10 + 196) + 4 * v11;
        pkRightMiniMonInfo = *(_DWORD *)v12 ? *(_DWORD *)v12 : 0;
      }
      else
      {
        pkRightMiniMonInfo = 0;
      }
    }
    else
    {
      pkRightMiniMonInfo = 0;
    }
    if ( pkLeftMiniMonInfo || pkRightMiniMonInfo )
    {
      v13 = 0;
      v14 = 0;
      v15 = 0;
      *(&bIsAttach + 3) = 0;
      if ( pkLeftMiniMonInfo )
      {
        v16 = MinimonInfoTable::GetMinimonInfoByIDX((char *)(pkLeftMiniMonInfo + 2));
        v14 = v16;
        if ( v16 )
        {
          if ( v16->MinimonRole == 1 )
            v13 = 1;
        }
      }
      if ( pkRightMiniMonInfo )
      {
        v17 = MinimonInfoTable::GetMinimonInfoByIDX((char *)(pkRightMiniMonInfo + 2));
        v15 = v17;
        if ( v17 )
        {
          if ( v17->MinimonRole == 1 )
            *(&bIsAttach + 3) = 1;
        }
      }
      if ( v13 || *(&bIsAttach + 3) )
      {
        if ( v14 && v14->MinimonRole == 1 )
        {
          v18 = v21;
          if ( v21->m_kEquip.Equ_Minimon == *(_WORD *)pkLeftMiniMonInfo )
          {
            v19 = v21->m_apkLinkNode[5];
            if ( v19 )
              goto LABEL_42;
          }
        }
        else
        {
          v18 = v21;
        }
        if ( v15 )
        {
          if ( v15->MinimonRole == 1 )
          {
            if ( v18->m_kEquip.Equ_MiniMon_R == *(_WORD *)pkRightMiniMonInfo )
            {
              v19 = v18->m_apkLinkNode[6];
              if ( v19 )
              {
LABEL_42:
                v20 = (NiNode *)((int (__stdcall *)(_DWORD))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Mini");
                if ( v20 )
                {
                  *(_DWORD *)&bIsAttach = 0;
                  EffectMgr::CreateAttachEffect(
                    &g_kEffectMgr,
                    (unsigned int *)&bIsAttach,
                    "MiniMon_Auto",
                    v20,
                    Timer::ms_fCurTime,
                    1);
                  v18->m_hMiniMonAutoPickEff = bIsAttach;
                }
                return;
              }
            }
          }
        }
      }
    }
  }
}
// 65E7E0: could not find valid save-restore pair for edi
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0065E9F0) --------------------------------------------------------
void __thiscall CharShape::SetMinimonAutoUseEff(CharShape *this, bool bIsAttach)
{
  int v2; // esi@0
  CharShape *v3; // edi@1
  int v4; // eax@4
  int v5; // ST14_4@6
  int v6; // esi@6
  int v7; // ebx@6
  int v8; // eax@10
  int v9; // esi@13
  int v10; // ebx@13
  int v11; // eax@17
  MinimonInfo *v12; // esi@22
  MinimonInfo *v13; // ebx@22
  MinimonInfo *v14; // eax@23
  MinimonInfo *v15; // eax@27
  NiNode *v16; // ecx@35
  NiNode *v17; // eax@40
  int pkLeftInfo; // [sp+20h] [bp-Ch]@7
  int pkRightInfo; // [sp+24h] [bp-8h]@14
  char bRightUseItem; // [sp+2Bh] [bp-1h]@22

  v3 = this;
  if ( this->m_hMinimonAutoUseEff )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)this->m_hMinimonAutoUseEff);
    v3->m_hMinimonAutoUseEff = 0;
  }
  if ( bIsAttach )
  {
    v4 = v3->m_kEquip.Equ_Minimon;
    if ( (_WORD)v4 != -1 || v3->m_kEquip.Equ_MiniMon_R != -1 )
    {
      v5 = v2;
      v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v7 = v3->m_kEquip.Equ_Minimon;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                 + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v4,
                              v5) )
      {
        if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) )
        {
          v8 = *(_DWORD *)(v6 + 196) + 4 * v7;
          pkLeftInfo = *(_DWORD *)v8 ? *(_DWORD *)v8 : 0;
        }
        else
        {
          pkLeftInfo = 0;
        }
      }
      else
      {
        pkLeftInfo = 0;
      }
      v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v10 = v3->m_kEquip.Equ_MiniMon_R;
      if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable) )
      {
        if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) )
        {
          v11 = *(_DWORD *)(v9 + 196) + 4 * v10;
          pkRightInfo = *(_DWORD *)v11 ? *(_DWORD *)v11 : 0;
        }
        else
        {
          pkRightInfo = 0;
        }
      }
      else
      {
        pkRightInfo = 0;
      }
      if ( pkLeftInfo || pkRightInfo )
      {
        v12 = 0;
        v13 = 0;
        *(&bIsAttach + 3) = 0;
        bRightUseItem = 0;
        v3->m_bAutoUseItem = 1;
        if ( pkLeftInfo )
        {
          v14 = MinimonInfoTable::GetMinimonInfoByIDX((char *)(pkLeftInfo + 2));
          v12 = v14;
          if ( v14 )
          {
            if ( v14->MinimonRole == 2 )
              *(&bIsAttach + 3) = 1;
          }
        }
        if ( pkRightInfo )
        {
          v15 = MinimonInfoTable::GetMinimonInfoByIDX((char *)(pkRightInfo + 2));
          v13 = v15;
          if ( v15 )
          {
            if ( v15->MinimonRole == 2 )
              bRightUseItem = 1;
          }
        }
        if ( *(&bIsAttach + 3) || bRightUseItem )
        {
          if ( v12
            && v12->MinimonRole == 2
            && v3->m_kEquip.Equ_Minimon == *(_WORD *)pkLeftInfo
            && (v16 = v3->m_apkLinkNode[5]) != 0
            || v13
            && v13->MinimonRole == 2
            && v3->m_kEquip.Equ_MiniMon_R == *(_WORD *)pkRightInfo
            && (v16 = v3->m_apkLinkNode[6]) != 0 )
          {
            v17 = (NiNode *)((int (__stdcall *)(_DWORD))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Mini");
            if ( v17 )
            {
              *(_DWORD *)&bIsAttach = 0;
              EffectMgr::CreateAttachEffect(
                &g_kEffectMgr,
                (unsigned int *)&bIsAttach,
                "Minimon_AutoItemUse",
                v17,
                Timer::ms_fCurTime,
                1);
              v3->m_hMinimonAutoUseEff = bIsAttach;
            }
          }
        }
      }
    }
  }
  else
  {
    v3->m_bAutoUseItem = 0;
  }
}
// 65E9F0: could not find valid save-restore pair for esi
// A9763C: using guessed type float Timer__ms_fCurTime;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0065EC00) --------------------------------------------------------
void __thiscall CharShape::StartChestAfterImgEff(CharShape *this)
{
  CharShape *v1; // esi@1
  NiNode *v2; // eax@1
  AfterImgEff *v3; // eax@3
  AfterImgEff *v4; // edi@3
  AfterImgEff *v5; // ebx@3
  AfterImgEff *v6; // ecx@10
  NiNode *v7; // eax@11

  v1 = this;
  v2 = this->m_apkLinkNode[5];
  if ( this->m_pActor && v2 )
  {
    v3 = AfterImgEff::CreateBySourceNode(v2);
    v4 = v1->m_spChestBlur.m_pObject;
    v5 = v3;
    if ( v4 != v3 )
    {
      if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      v1->m_spChestBlur.m_pObject = v5;
      if ( v5 )
        InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount);
    }
    v6 = v1->m_spChestBlur.m_pObject;
    if ( v6 )
    {
      AfterImgEff::SetActor(v6, v1->m_pActor);
      ((void (__stdcall *)(_DWORD))v1->m_spChestBlur.m_pObject->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(60.0);
      ((void (__stdcall *)(_DWORD))v1->m_spChestBlur.m_pObject->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(Timer::ms_fCurTime));
      v7 = (NiNode *)((int (*)(void))v1->m_spChestBlur.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
      World::AttachEffect(&g_kWorld, v7);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0065ECD0) --------------------------------------------------------
void __cdecl CatchAllGeometry(NiAVObject *pkObject, PgTList<NiGeometry *> *kList)
{
  NiAVObject *v2; // edi@1
  int v3; // eax@2
  int v4; // eax@5
  NiTimeController *v5; // esi@9
  PgTList<NiGeometry *> *v6; // ebx@10
  NiAVObject *v7; // eax@12

  v2 = pkObject;
  if ( pkObject )
  {
    v3 = ((int (__thiscall *)(_DWORD))pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(pkObject);
    if ( v3 )
    {
      while ( (NiRTTI *)v3 != &NiNode::m_RTTI )
      {
        v3 = *(_DWORD *)(v3 + 4);
        if ( !v3 )
          goto LABEL_5;
      }
      v5 = 0;
      if ( v2[1].baseclass_0.m_ppkExtra )
      {
        v6 = kList;
        do
        {
          if ( v2[1].baseclass_0.m_spControllers.m_pObject > v5 )
            v7 = *(NiAVObject **)(v2[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 4 * (_DWORD)v5);
          else
            v7 = 0;
          CatchAllGeometry(v7, v6);
          v5 = (NiTimeController *)((char *)v5 + 1);
        }
        while ( (NiExtraData **)v5 < v2[1].baseclass_0.m_ppkExtra );
      }
    }
    else
    {
LABEL_5:
      v4 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2);
      if ( v4 )
      {
        while ( (NiRTTI *)v4 != &NiGeometry::m_RTTI )
        {
          v4 = *(_DWORD *)(v4 + 4);
          if ( !v4 )
            return;
        }
        pkObject = v2;
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)kList,
          (NiD3DXEffectParameter *const *)&pkObject);
      }
    }
  }
}

//----- (0065ED70) --------------------------------------------------------
void __thiscall CharShape::UpdateFaceShape(CharShape *this)
{
  CharShape *v1; // esi@1
  NiNode *v2; // eax@1
  NiNode *v3; // eax@3
  NiNode *v4; // edi@5
  NiNode *v5; // ebx@10
  NiNode *v6; // edi@10
  NiAVObject *v7; // ecx@17
  NiProperty *v8; // eax@18
  NiNode *v9; // eax@26
  NiNode *v10; // edi@26
  NiNode *v11; // eax@27
  NiAVObject *v12; // ecx@27
  NiProperty *v13; // eax@28
  NiNode *v14; // eax@30
  NiTexture *pkClosedEyeTex; // [sp+1Ch] [bp-14h]@1
  NiTexture *pkTexture; // [sp+20h] [bp-10h]@1

  v1 = this;
  pkTexture = (NiTexture *)CharResMgr::GetFaceTexture(
                             &g_kCharResMgr,
                             this->m_kClassID,
                             this->m_byGender,
                             this->m_byFace);
  pkClosedEyeTex = (NiTexture *)CharResMgr::GetClosedEyeTexture(
                                  &g_kCharResMgr,
                                  v1->m_kClassID,
                                  v1->m_byGender,
                                  v1->m_byFace);
  v2 = v1->m_pkBaseFaceShapeNode;
  if ( v1->m_byFaceShapeType )
  {
    if ( v2 )
      v2->baseclass_0.m_uFlags |= 1u;
    v9 = CharResMgr::GetFace(&g_kCharResMgr, v1->m_kClassID, v1->m_byGender, v1->m_byFaceShapeType);
    v10 = v9;
    if ( v9 )
    {
      InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v11 = (NiNode *)v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v10,
                        (unsigned int)"LODGroup01");
      CharShape::LinkFace(v1, v11);
      CharShape::TextureFace(v1, v1->m_apkLinkNode[2], pkTexture);
      v12 = (NiAVObject *)v1->m_apkGeom[1];
      if ( v12 )
      {
        v13 = NiAVObject::GetProperty(v12, 8);
        if ( v13 )
          NiTexturingProperty::SetDecalMap((NiTexturingProperty *)v13, 0, 0);
      }
      v14 = (NiNode *)v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v10,
                        (unsigned int)"EyeShape");
      CharShape::SetAnotherEyeShape(v1, v14);
      CharShape::TextureClosedEye(v1, v1->m_pkEyeShapeAnotherNode, pkClosedEyeTex);
      if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
  }
  else
  {
    if ( v2 )
    {
      v2->baseclass_0.m_uFlags &= 0xFFFEu;
      v3 = v1->m_apkLinkNode[2];
      if ( v3 )
      {
        NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v3->m_kChildren);
        NiAVObject::Update(&v1->m_apkLinkNode[2]->baseclass_0, 0.0, 1);
      }
      v4 = v1->m_spFaceNode.m_pObject;
      if ( v4 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        v1->m_spFaceNode.m_pObject = 0;
      }
      v5 = v1->m_pkBaseFaceShapeNode;
      v6 = v1->m_spFaceNode.m_pObject;
      if ( v6 != v5 )
      {
        if ( v6
          && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        v1->m_spFaceNode.m_pObject = v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      CharShape::TextureFace(v1, pkTexture);
      v7 = (NiAVObject *)v1->m_apkGeom[1];
      if ( v7 )
      {
        v8 = NiAVObject::GetProperty(v7, 8);
        if ( v8 )
          NiTexturingProperty::SetDecalMap((NiTexturingProperty *)v8, 0, 0);
      }
      if ( v1->m_pkEyeShapeAnotherNode )
      {
        if ( v1->m_apkLinkNode[2] )
          v1->m_pkEyeShapeAnotherNode = 0;
      }
      CharShape::TextureClosedEye(v1, v1->m_pkEyeShapeNode, pkClosedEyeTex);
    }
  }
}

//----- (0065EFF0) --------------------------------------------------------
void __thiscall CharShape::RemoveMinimonEff(CharShape *this, unsigned int uiUnEquipPos, MinimonRoleType RoleType)
{
  CharShape *v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebx@6
  int v6; // edx@8
  int v7; // eax@9
  MinimonInfo *v8; // eax@10
  MinimonInfo *v9; // esi@10

  v3 = this;
  v4 = 65535;
  if ( uiUnEquipPos == 25 )
  {
    v4 = this->m_kEquip.Equ_MiniMon_R;
  }
  else
  {
    if ( uiUnEquipPos == 28 )
      v4 = this->m_kEquip.Equ_Minimon;
  }
  this->m_bAutoPickItem = 0;
  this->m_bAutoUseItem = 0;
  if ( (_WORD)v4 != -1 )
  {
    v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, signed int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                 + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v4) )
    {
      if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
      {
        v6 = *(_DWORD *)(v5 + 196);
        if ( *(_DWORD *)(v6 + 4 * (unsigned __int16)v4) )
        {
          v7 = *(_DWORD *)(v6 + 4 * (unsigned __int16)v4);
          if ( v7 )
          {
            v8 = MinimonInfoTable::GetMinimonInfoByIDX((char *)(v7 + 2));
            v9 = v8;
            if ( v8 )
            {
              if ( v8->MinimonRole == 1 && !v3->m_hMiniMonAutoPickEff )
              {
                v3->m_bAutoPickItem = 1;
                CharShape::SetMiniMonEffect(v3, 1);
              }
              if ( v9->MinimonRole == 2 )
              {
                if ( !v3->m_hMinimonAutoUseEff )
                {
                  v3->m_bAutoUseItem = 1;
                  CharShape::SetMinimonAutoUseEff(v3, 1);
                }
              }
            }
          }
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0065F0D0) --------------------------------------------------------
void __thiscall CharShape::ClearModelPart(CharShape *this)
{
  int v1; // eax@1
  char *v2; // edi@1
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v4; // esi@1

  v1 = 0;
  this->m_pkRootNode = 0;
  this->m_apkLinkNode[0] = 0;
  this->m_apkLinkNode[1] = 0;
  this->m_apkLinkNode[2] = 0;
  this->m_apkLinkNode[3] = 0;
  this->m_apkLinkNode[4] = 0;
  this->m_apkLinkNode[5] = 0;
  this->m_apkLinkNode[6] = 0;
  this->m_apkLinkNode[7] = 0;
  this->m_apkLinkNode[8] = 0;
  this->m_apkLinkNode[9] = 0;
  this->m_apkLinkNode[10] = 0;
  this->m_apkLinkNode[11] = 0;
  this->m_apkLinkNode[12] = 0;
  this->m_apkLinkNode[13] = 0;
  this->m_apkLinkNode[14] = 0;
  this->m_apkLinkNode[15] = 0;
  this->m_apkLinkNode[16] = 0;
  this->m_apkLinkNode[17] = 0;
  this->m_apkLinkNode[18] = 0;
  this->m_apkLinkNode[19] = 0;
  this->m_apkLinkNode[20] = 0;
  this->m_apkLinkNode[21] = 0;
  this->m_apkLinkNode[22] = 0;
  this->m_apkLinkNode[23] = 0;
  this->m_apkLinkNode[24] = 0;
  this->m_apkLinkNode[25] = 0;
  this->m_apkLinkNode[26] = 0;
  this->m_apkGeom[0] = 0;
  this->m_apkGeom[1] = 0;
  this->m_apkGeom[2] = 0;
  this->m_apkGeom[3] = 0;
  this->m_apkGeom[4] = 0;
  this->m_apkLodGeom[0] = 0;
  this->m_apkLodGeom[1] = 0;
  this->m_apkLodGeom[2] = 0;
  this->m_apkLodGeom[3] = 0;
  this->m_apkLodGeom[4] = 0;
  this->m_apkLodGeom[5] = 0;
  this->m_apkLodGeom[6] = 0;
  this->m_apkLodGeom[7] = 0;
  this->m_apkLodGeom[8] = 0;
  v2 = (char *)&this->m_mapDummyLinkNode;
  v3 = this->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
  v4 = v3;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
        (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v2,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
    v1 = 0;
  }
  *(_DWORD *)(*((_DWORD *)v2 + 1) + 4) = *((_DWORD *)v2 + 1);
  **((_DWORD **)v2 + 1) = *((_DWORD *)v2 + 1);
  *(_DWORD *)(*((_DWORD *)v2 + 1) + 8) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v2 + 2) = v1;
}

//----- (0065F1E0) --------------------------------------------------------
bool __thiscall CharShape::SetMobModelPart(CharShape *this, NiNode *pkNode)
{
  CharShape *v2; // edi@1
  bool result; // al@2
  NiShader *v4; // eax@3
  NiShader *v5; // eax@3
  NiShader *v6; // eax@3
  NiShader *v7; // eax@3
  NiShader *v8; // eax@3
  NiShader *v9; // eax@3
  NiShader *v10; // eax@3

  v2 = this;
  CharShape::ClearModelPart(this);
  if ( pkNode )
  {
    v2->m_pkRootNode = pkNode;
    CSpactralGlow_Shader_Controller::SetTarget(&v2->m_SpactralGlowEffect, pkNode);
    v4 = (NiShader *)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)pkNode,
                       (unsigned int)off_A7FF8C[0]);
    v2->m_apkLinkNode[1] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v4);
    v5 = (NiShader *)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)pkNode,
                       (unsigned int)off_A7FF9C[0]);
    v2->m_apkLinkNode[5] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v5);
    v6 = (NiShader *)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)pkNode,
                       (unsigned int)off_A7FFB8[0]);
    v2->m_apkLinkNode[11] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v6);
    v7 = (NiShader *)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)pkNode,
                       (unsigned int)off_A7FFBC[0]);
    v2->m_apkLinkNode[12] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v7);
    v8 = (NiShader *)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)pkNode,
                       (unsigned int)off_A7FFD8[0]);
    v2->m_apkLinkNode[17] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v8);
    v9 = (NiShader *)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)pkNode,
                       (unsigned int)off_A7FFDC[0]);
    v2->m_apkLinkNode[18] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v9);
    v10 = (NiShader *)pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)pkNode,
                        (unsigned int)off_A7FFAC[0]);
    v2->m_apkLinkNode[8] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v10);
    if ( v2->m_pkEyeShapeNode )
      v2->m_pkEyeShapeNode = 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A7FF8C: using guessed type char *off_A7FF8C[32];
// A7FF9C: using guessed type char *off_A7FF9C[28];
// A7FFAC: using guessed type char *off_A7FFAC[24];
// A7FFB8: using guessed type char *off_A7FFB8[21];
// A7FFBC: using guessed type char *off_A7FFBC[20];
// A7FFD8: using guessed type char *off_A7FFD8[13];
// A7FFDC: using guessed type char *off_A7FFDC[12];

//----- (0065F310) --------------------------------------------------------
bool __thiscall ItemUpGrade::SetUpgradeTextureEff(ItemUpGrade *this, NiNode *_pNode, char ucEffNo, std::list<char *,std::allocator<char *> > *AttachedNode)
{
  NiNode *v4; // eax@1
  NiNode *v5; // esi@1
  void *v6; // edi@1
  int v8; // eax@5
  int v9; // ebx@5
  int v10; // eax@7
  NiObject *v11; // ecx@8
  int v12; // edi@8
  NiObject *v13; // esi@9
  NiTListItem<NiDynamicEffect *> *i; // eax@14
  NiTimeController *v15; // eax@16
  void *v16; // edx@16
  void *v17; // eax@16
  std::list<char *,std::allocator<char *> > *v18; // ebx@16
  NiAVObject *v19; // eax@18
  NiTListItem<NiGeometry *> *v20; // esi@19
  NiTListItem<NiGeometry *> *v21; // ecx@19
  void *v22; // edx@22
  NiAVObject *v23; // ecx@22
  NiProperty *v24; // edi@22
  signed int v25; // ebx@22
  NiTexturingProperty::Map *v26; // esi@24
  void *v27; // eax@25
  void *v28; // eax@26
  void *v29; // esi@26
  void *v30; // ecx@31
  void *v31; // ecx@35
  void *v32; // ecx@39
  NiObject *v33; // eax@47
  NiTListItem<NiGeometry *> *v34; // ST04_4@51
  unsigned int v35; // [sp-18h] [bp-58h]@34
  NiVBChip **v36; // [sp-14h] [bp-54h]@34
  void *pkOrgMap[4]; // [sp+0h] [bp-40h]@16
  PgTList<NiGeometry *> kList; // [sp+10h] [bp-30h]@19
  NiVBChip *element; // [sp+20h] [bp-20h]@25
  NiAVObject *pkGeom; // [sp+24h] [bp-1Ch]@3
  void *kIter; // [sp+28h] [bp-18h]@21
  NiTexturingProperty::Map *pkNewMap; // [sp+2Ch] [bp-14h]@23
  NiObject *pkOrgCtrl; // [sp+30h] [bp-10h]@16
  int v44; // [sp+3Ch] [bp-4h]@19
  NiProperty *it; // [sp+4Ch] [bp+Ch]@4
  int ita; // [sp+4Ch] [bp+Ch]@17

  v4 = CharResMgr::GetItemUpgradeTextureEffect(&g_kCharResMgr, ucEffNo);
  v5 = v4;
  v6 = 0;
  if ( !v4
    || !PgUtil::CatchGeometry(&v4->baseclass_0, (NiGeometry **)&pkGeom)
    || (it = NiAVObject::GetProperty(pkGeom, 8)) == 0 )
    return 0;
  v8 = (int)v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
              (NiRefObject *)v5,
              (unsigned int)"EffectNode");
  v9 = v8;
  if ( v8 && *(_DWORD *)(v8 + 212) > 0u )
  {
    v10 = *(_DWORD *)(v8 + 204);
    if ( v10 )
    {
      do
      {
        v11 = *(NiObject **)(v10 + 8);
        v12 = *(_DWORD *)v10;
        if ( v11 )
        {
          v13 = NiObject::Clone(v11);
          NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v13, _pNode);
          NiNode::AttachEffect(_pNode, (NiDynamicEffect *)v13);
        }
        if ( !v12 )
          break;
        v10 = *(_DWORD *)v12;
      }
      while ( *(_DWORD *)v12 );
      v6 = 0;
    }
    NiAVObject::UpdateEffects(&_pNode->baseclass_0);
    if ( *(_DWORD *)(v9 + 212) > (unsigned int)v6 )
    {
      for ( i = _pNode->m_kEffectList.baseclass_0.baseclass_0.m_pkHead; i != v6; i = i->m_pkNext )
        ;
    }
  }
  v15 = it[1].baseclass_0.m_spControllers.m_pObject;
  pkOrgMap[1] = (void *)LODWORD(v15->m_fPhase);
  v16 = (void *)v15->baseclass_0.baseclass_0.m_uiRefCount;
  v17 = *(void **)&v15->m_uFlags;
  pkOrgMap[0] = v6;
  pkOrgMap[2] = v16;
  pkOrgMap[3] = v17;
  v18 = AttachedNode;
  pkOrgCtrl = (NiObject *)NiObjectNET::GetController(&it->baseclass_0, &NiTextureTransformController::m_RTTI);
  if ( (void *)AttachedNode->baseclass_0.baseclass_0._Mysize == v6 )
    return 0;
  ita = **(_DWORD **)&AttachedNode->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( ita == *(_DWORD *)&AttachedNode->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    return 1;
  do
  {
    v19 = (NiAVObject *)((int (__stdcall *)(_DWORD))_pNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(*(_DWORD *)(ita + 8));
    if ( v19 == v6 )
      goto LABEL_53;
    *(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiGeometry *> *)v6;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiGeometry *> *)v6;
    kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&PgTList<NiGeometry__>::_vftable_;
    v44 = (int)v6;
    CatchAllGeometry(v19, &kList);
    v20 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v21 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead == v6 )
      goto LABEL_50;
    while ( 2 )
    {
      v22 = v21->m_pkNext;
      v23 = (NiAVObject *)v21->m_element;
      kIter = v22;
      v24 = NiAVObject::GetProperty(v23, 8);
      v25 = 0;
      if ( !v24 )
        goto LABEL_48;
      pkNewMap = 0;
      do
      {
        v26 = (NiTexturingProperty::Map *)pkOrgMap[v25];
        if ( !v26 )
          goto LABEL_45;
        v27 = operator new(0x18u);
        element = (NiVBChip *)v27;
        LOBYTE(v44) = 1;
        if ( v27 )
        {
          NiTexturingProperty::Map::Map((NiTexturingProperty::Map *)v27, v26);
          v29 = v28;
        }
        else
        {
          v29 = 0;
        }
        LOBYTE(v44) = 0;
        pkNewMap = (NiTexturingProperty::Map *)v29;
        if ( v25 == 1 )
        {
          v32 = (void *)LODWORD(v24[1].baseclass_0.m_spControllers.m_pObject->m_fPhase);
          element = (NiVBChip *)v29;
          if ( v29 != v32 )
          {
            if ( v32 )
              (**(void (__stdcall ***)(_DWORD))v32)(1);
            v36 = &element;
            v35 = 4;
            goto LABEL_43;
          }
        }
        else
        {
          if ( v25 == 2 )
          {
            v31 = (void *)v24[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.m_uiRefCount;
            element = (NiVBChip *)v29;
            if ( v29 != v31 )
            {
              if ( v31 )
                (**(void (__stdcall ***)(_DWORD))v31)(1);
              v36 = &element;
              v35 = 1;
              goto LABEL_43;
            }
          }
          else
          {
            if ( v25 != 3 )
              goto LABEL_45;
            v30 = *(void **)&v24[1].baseclass_0.m_spControllers.m_pObject->m_uFlags;
            element = (NiVBChip *)v29;
            if ( v29 != v30 )
            {
              if ( v30 )
                (**(void (__stdcall ***)(_DWORD))v30)(1);
              v36 = &element;
              v35 = 2;
LABEL_43:
              NiTArray<NiCollisionGroup::Record__>::SetAt(
                (NiTArray<NiVBChip *> *)&v24[1].baseclass_0.m_pcName,
                v35,
                v36);
              goto LABEL_44;
            }
          }
        }
LABEL_44:
        NiTexturingProperty::SetMultiTexture((NiTexturingProperty *)v24, (NiTexturingProperty::Map *)v29);
LABEL_45:
        ++v25;
      }
      while ( v25 < 4 );
      if ( pkOrgCtrl )
      {
        NiObjectNET::ms_eCopyType = 1;
        v33 = NiObject::Clone(pkOrgCtrl);
        NiTextureTransformController::SetMap((NiTextureTransformController *)v33, pkNewMap, (NiTexturingProperty *)v24);
      }
LABEL_48:
      if ( kIter )
      {
        v21 = (NiTListItem<NiGeometry *> *)kIter;
        continue;
      }
      break;
    }
    v20 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v18 = AttachedNode;
    v6 = 0;
LABEL_50:
    kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&PgTList<NiGeometry__>::_vftable_;
    v44 = 2;
    while ( v20 != v6 )
    {
      v34 = v20;
      v20 = v20->m_pkNext;
      kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *> *)&kList,
        v34);
    }
    *(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiGeometry *> *)v6;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiGeometry *> *)v6;
    v44 = -1;
    kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
LABEL_53:
    ita = *(_DWORD *)ita;
  }
  while ( ita != *(_DWORD *)&v18->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  return 1;
}
// 9C43E8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);
// 9C4474: using guessed type int (__thiscall *PgTList_NiGeometry _____vftable_)(void *p, char);
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (0065F610) --------------------------------------------------------
void __thiscall CharShape::RemoveAllSubItem(CharShape *this, unsigned int uiEquipPos_Enum)
{
  CharShape *v2; // esi@1
  ItemEquipEnum v3; // edi@1
  std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *v4; // esi@3
  int v5; // esi@5
  int v6; // eax@6
  int v7; // ecx@10
  NiAVObject *v8; // eax@11
  NiAVObject *v9; // esi@12
  NiAVObject *v10; // esi@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v11; // ecx@23
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v12; // eax@23
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v13; // edx@23
  unsigned int v14; // edi@24
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v15; // eax@30
  std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *thisa; // [sp+0h] [bp-20h]@1
  ItemEquipEnum _Keyval; // [sp+4h] [bp-1Ch]@1
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits< result; // [sp+8h] [bp-18h]@1
  NiPointer<NiAVObject> spNode; // [sp+10h] [bp-10h]@1
  int v20; // [sp+1Ch] [bp-4h]@11

  v2 = this;
  _Keyval = uiEquipPos_Enum;
  thisa = (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_mapDummyLinkNode;
  std::_Tree<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>::_Eqrange(
    &this->m_mapDummyLinkNode.baseclass_0,
    &result,
    &_Keyval);
  spNode.m_pObject = 0;
  std::_Distance2<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>>_unsigned_int>(
    result.baseclass_0.first,
    result.baseclass_0.second,
    (unsigned int *)&spNode,
    (std::bidirectional_iterator_tag)uiEquipPos_Enum);
  v3 = (ItemEquipEnum)spNode.m_pObject;
  if ( spNode.m_pObject && v2->m_pkRootNode )
  {
    v4 = thisa;
    _Keyval = uiEquipPos_Enum;
    std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
      thisa,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&result.baseclass_0.second,
      (OscTarget *)&_Keyval);
    if ( v3 )
    {
      _Keyval = v3;
      do
      {
        v5 = *(_DWORD *)(*(_DWORD *)&result.baseclass_0.second.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] + 16);
        if ( v5 )
        {
          v6 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v5 + 4))(*(_DWORD *)(*(_DWORD *)&result.baseclass_0.second.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]
                                                                             + 16));
          if ( v6 )
          {
            while ( (NiRTTI *)v6 != &NiNode::m_RTTI )
            {
              v6 = *(_DWORD *)(v6 + 4);
              if ( !v6 )
                goto LABEL_21;
            }
            v7 = *(_DWORD *)(v5 + 32);
            if ( v7 )
            {
              (*(void (__stdcall **)(NiPointer<NiAVObject> *, int))(*(_DWORD *)v7 + 120))(&spNode, v5);
              v8 = spNode.m_pObject;
              v20 = 0;
              if ( spNode.m_pObject )
              {
                v9 = spNode.m_pObject;
                if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
                  && v9 )
                  v9->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
                v8 = 0;
                spNode.m_pObject = 0;
              }
              v20 = -1;
              if ( v8 )
              {
                v10 = v8;
                if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
                {
                  if ( v10 )
                    v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
                }
              }
            }
            std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&result.baseclass_0.second);
          }
        }
LABEL_21:
        --_Keyval;
      }
      while ( _Keyval );
      v4 = thisa;
    }
    v11 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)*((_DWORD *)&v4->baseclass_0 + 1);
    v12 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&v11 + 4);
    v13 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)*((_DWORD *)&v4->baseclass_0 + 1);
    if ( *(_BYTE *)(*(_DWORD *)&v12 + 21) )
    {
      v14 = uiEquipPos_Enum;
    }
    else
    {
      do
      {
        v14 = uiEquipPos_Enum;
        if ( *(_DWORD *)(*(_DWORD *)&v12 + 12) >= (signed int)uiEquipPos_Enum )
        {
          v13 = v12;
          v12 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&v12;
        }
        else
        {
          v12 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&v12 + 8);
        }
      }
      while ( !*(_BYTE *)(*(_DWORD *)&v12 + 21) );
    }
    v15 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&v11 + 4);
    while ( !*(_BYTE *)(*(_DWORD *)&v15 + 21) )
    {
      if ( (signed int)v14 >= *(_DWORD *)(*(_DWORD *)&v15 + 12) )
      {
        v15 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&v15 + 8);
      }
      else
      {
        v11 = v15;
        v15 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&v15;
      }
    }
    std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v4,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&uiEquipPos_Enum,
      v13,
      v11);
  }
}

//----- (0065F7D0) --------------------------------------------------------
bool __thiscall CharShape::SetCharModelPart(CharShape *this, NiNode *pkNode)
{
  CharShape *v2; // edi@1
  NiNode *v3; // esi@1
  bool result; // al@2
  NiNode *v5; // ST08_4@3
  NiShader *v6; // eax@3
  NiShader *v7; // eax@3
  NiShader *v8; // eax@3
  NiShader *v9; // eax@3
  NiShader *v10; // eax@3
  NiShader *v11; // eax@3
  NiShader *v12; // eax@3
  NiShader *v13; // eax@3
  NiShader *v14; // eax@3
  NiShader *v15; // eax@3
  NiShader *v16; // eax@3
  NiShader *v17; // eax@3
  NiShader *v18; // eax@3
  NiShader *v19; // eax@3
  NiShader *v20; // eax@3
  NiShader *v21; // eax@3
  NiShader *v22; // eax@3
  NiShader *v23; // eax@3
  NiShader *v24; // eax@3
  NiShader *v25; // eax@3
  NiShader *v26; // eax@3
  NiShader *v27; // eax@3
  NiShader *v28; // eax@3
  NiShader *v29; // eax@3
  NiShader *v30; // eax@3
  NiShader *v31; // eax@3
  NiShader *v32; // eax@3
  void *v33; // eax@3
  NiNode *v34; // ST00_4@4
  int v35; // ecx@4
  int v36; // eax@4
  NiGeometry *v37; // eax@14
  NiGeometry *v38; // ecx@14
  NiAVObject *v39; // eax@15
  NiAVObject *v40; // eax@15
  NiAVObject *v41; // eax@15
  NiShader *v42; // eax@16
  NiShader *v43; // eax@16
  std::exception thisa; // [sp+0h] [bp-30h]@19
  FindFaceNode kFindFaceNode; // [sp+Ch] [bp-24h]@4
  std::list<NiAVObject *,std::allocator<NiAVObject *> > listFaceNode; // [sp+18h] [bp-18h]@3
  int v47; // [sp+2Ch] [bp-4h]@4

  v2 = this;
  CharShape::ClearModelPart(this);
  v3 = pkNode;
  if ( pkNode )
  {
    v5 = pkNode;
    v2->m_pkRootNode = pkNode;
    CSpactralGlow_Shader_Controller::SetTarget(&v2->m_SpactralGlowEffect, v5);
    v6 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v3,
                       (unsigned int)ModelPartName::ms_apcModelPartName[0]);
    v2->m_apkLinkNode[0] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v6);
    v7 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v3,
                       (unsigned int)off_A7FF8C[0]);
    v2->m_apkLinkNode[1] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v7);
    v8 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v3,
                       (unsigned int)off_A7FF90[0]);
    v2->m_apkLinkNode[2] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v8);
    v9 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)v3,
                       (unsigned int)off_A7FF94[0]);
    v2->m_apkLinkNode[3] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v9);
    v10 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FF98[0]);
    v2->m_apkLinkNode[4] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v10);
    v11 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FF9C[0]);
    v2->m_apkLinkNode[5] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v11);
    v12 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFA0[0]);
    v2->m_apkLinkNode[6] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v12);
    v13 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFA8[0]);
    v2->m_apkLinkNode[7] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v13);
    v14 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFAC[0]);
    v2->m_apkLinkNode[8] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v14);
    v15 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFB0[0]);
    v2->m_apkLinkNode[9] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v15);
    v16 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFB4[0]);
    v2->m_apkLinkNode[10] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v16);
    v17 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFB8[0]);
    v2->m_apkLinkNode[11] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v17);
    v18 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFBC[0]);
    v2->m_apkLinkNode[12] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v18);
    v19 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFC0[0]);
    v2->m_apkLinkNode[13] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v19);
    v20 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFC4[0]);
    v2->m_apkLinkNode[14] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v20);
    v21 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFC8[0]);
    v2->m_apkLinkNode[15] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v21);
    v22 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFCC[0]);
    v2->m_apkLinkNode[16] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v22);
    v23 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFD8[0]);
    v2->m_apkLinkNode[17] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v23);
    v24 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFDC[0]);
    v2->m_apkLinkNode[18] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v24);
    v25 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFEC[0]);
    v2->m_apkLinkNode[19] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v25);
    v26 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFF0[0]);
    v2->m_apkLinkNode[20] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v26);
    v27 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFF4[0]);
    v2->m_apkLinkNode[21] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v27);
    v28 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFF8[0]);
    v2->m_apkLinkNode[22] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v28);
    v29 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A7FFFC[0]);
    v2->m_apkLinkNode[23] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v29);
    v30 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A80000[0]);
    v2->m_apkLinkNode[24] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v30);
    v31 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A80004[0]);
    v2->m_apkLinkNode[25] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v31);
    v32 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)off_A80008);
    v2->m_apkLinkNode[26] = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v32);
    listFaceNode.baseclass_0.baseclass_0._Mysize = 0;
    v33 = operator new(0xCu);
    if ( !v33 )
    {
      pkNode = 0;
      std::exception::exception(&thisa, (const char *const *)&pkNode);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
    *(_DWORD *)&listFaceNode.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v33;
    *(_DWORD *)v33 = v33;
    *(_DWORD *)(*(_DWORD *)&listFaceNode + 4) = *(_DWORD *)&listFaceNode;
    v47 = 0;
    kFindFaceNode.baseclass_0.m_pCallBack = 0;
    kFindFaceNode.baseclass_0.m_nCurLevel = -1;
    kFindFaceNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindFaceNode::_vftable_;
    v34 = v2->m_pkRootNode;
    LOBYTE(v47) = 1;
    Ns_TourScene::TourScene(&kFindFaceNode.baseclass_0, v34, &NiNode::m_RTTI, &listFaceNode);
    v35 = *(_DWORD *)&listFaceNode;
    v36 = **(_DWORD **)&listFaceNode;
    if ( **(_DWORD **)&listFaceNode != *(_DWORD *)&listFaceNode )
    {
      while ( !*(_DWORD *)(v36 + 8) )
      {
        if ( v36 != v35 )
        {
          **(_DWORD **)(v36 + 4) = *(_DWORD *)v36;
          *(_DWORD *)(*(_DWORD *)v36 + 4) = *(_DWORD *)(v36 + 4);
          operator delete((void *)v36);
          v35 = *(_DWORD *)&listFaceNode;
          --listFaceNode.baseclass_0.baseclass_0._Mysize;
        }
        v36 = *(_DWORD *)v35;
        if ( *(_DWORD *)v35 == v35 )
          goto LABEL_11;
      }
      v2->m_pkBaseFaceShapeNode = (NiNode *)CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, *(NiShader **)(v36 + 8));
    }
LABEL_11:
    if ( CharShape::SetLodGeometry(v2, 0, pLodNodeName)
      && CharShape::SetLodGeometry(v2, 1, off_A7FFE4)
      && CharShape::SetLodGeometry(v2, 2, off_A7FFE8) )
    {
      v37 = v2->m_apkLodGeom[3];
      v38 = v2->m_apkLodGeom[6];
      v2->m_apkGeom[2] = v2->m_apkLodGeom[0];
      v2->m_apkGeom[3] = v37;
      v2->m_apkGeom[4] = v38;
    }
    else
    {
      v39 = (NiAVObject *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                            (NiRefObject *)v3,
                            (unsigned int)off_A7FFA4[0]);
      PgUtil::CatchGeometry(v39, &v2->m_apkGeom[2]);
      v40 = (NiAVObject *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                            (NiRefObject *)v3,
                            (unsigned int)off_A7FFD0[0]);
      PgUtil::CatchGeometry(v40, &v2->m_apkGeom[3]);
      v41 = (NiAVObject *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                            (NiRefObject *)v3,
                            (unsigned int)off_A7FFD4[0]);
      PgUtil::CatchGeometry(v41, &v2->m_apkGeom[4]);
    }
    v42 = (NiShader *)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                        (NiRefObject *)v3,
                        (unsigned int)"EyeShape");
    v43 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v42);
    v2->m_pkEyeShapeNode = (NiNode *)v43;
    if ( v43 )
      LOWORD(v43[1].m_uiImplementation) |= 1u;
    kFindFaceNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&listFaceNode);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C43FC: using guessed type int (__stdcall *FindFaceNode___vftable_)(int _pkObject, int _pData);
// A7FF88: using guessed type char *ModelPartName__ms_apcModelPartName[33];
// A7FF8C: using guessed type char *off_A7FF8C[32];
// A7FF90: using guessed type char *off_A7FF90[31];
// A7FF94: using guessed type char *off_A7FF94[30];
// A7FF98: using guessed type char *off_A7FF98[29];
// A7FF9C: using guessed type char *off_A7FF9C[28];
// A7FFA0: using guessed type char *off_A7FFA0[27];
// A7FFA4: using guessed type char *off_A7FFA4[26];
// A7FFA8: using guessed type char *off_A7FFA8[25];
// A7FFAC: using guessed type char *off_A7FFAC[24];
// A7FFB0: using guessed type char *off_A7FFB0[23];
// A7FFB4: using guessed type char *off_A7FFB4[22];
// A7FFB8: using guessed type char *off_A7FFB8[21];
// A7FFBC: using guessed type char *off_A7FFBC[20];
// A7FFC0: using guessed type char *off_A7FFC0[19];
// A7FFC4: using guessed type char *off_A7FFC4[18];
// A7FFC8: using guessed type char *off_A7FFC8[17];
// A7FFCC: using guessed type char *off_A7FFCC[16];
// A7FFD0: using guessed type char *off_A7FFD0[15];
// A7FFD4: using guessed type char *off_A7FFD4[14];
// A7FFD8: using guessed type char *off_A7FFD8[13];
// A7FFDC: using guessed type char *off_A7FFDC[12];
// A7FFEC: using guessed type char *off_A7FFEC[8];
// A7FFF0: using guessed type char *off_A7FFF0[7];
// A7FFF4: using guessed type char *off_A7FFF4[6];
// A7FFF8: using guessed type char *off_A7FFF8[5];
// A7FFFC: using guessed type char *off_A7FFFC[4];
// A80000: using guessed type char *off_A80000[3];
// A80004: using guessed type char *off_A80004[2];
// A80008: using guessed type char *off_A80008;

//----- (0065FD90) --------------------------------------------------------
void __thiscall CharShape::HideAllHair(CharShape *this)
{
  CharShape *v1; // esi@1
  void *v2; // eax@1
  NiNode *v3; // ST10_4@2
  void **v4; // ecx@2
  void *i; // eax@2
  int v6; // eax@3
  void *v7; // eax@5
  int j; // eax@9
  int v9; // edi@11
  int v10; // edi@16
  signed int v11; // ebx@16
  int v12; // esi@17
  void *v13; // eax@23
  void *v14; // ecx@23
  void *v15; // esi@24
  std::exception thisa; // [sp+2Ch] [bp-38h]@26
  FindHairNode kFindHairNode; // [sp+38h] [bp-2Ch]@2
  std::list<NiAVObject *,std::allocator<NiAVObject *> > listHairNode; // [sp+44h] [bp-20h]@1
  char *_What; // [sp+50h] [bp-14h]@26
  int v20; // [sp+54h] [bp-10h]@10
  int v21; // [sp+60h] [bp-4h]@2

  v1 = this;
  listHairNode.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0xCu);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&listHairNode.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&listHairNode + 4) = *(_DWORD *)&listHairNode;
  v21 = 0;
  kFindHairNode.baseclass_0.m_pCallBack = 0;
  kFindHairNode.baseclass_0.m_nCurLevel = -1;
  kFindHairNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindHairNode::_vftable_;
  v3 = v1->m_pkRootNode;
  LOBYTE(v21) = 1;
  Ns_TourScene::TourScene(&kFindHairNode.baseclass_0, v3, &NiNode::m_RTTI, &listHairNode);
  v4 = *(void ***)&listHairNode;
  for ( i = (void *)**(_DWORD **)&listHairNode; *v4 != v4; i = *v4 )
  {
    v6 = *((_DWORD *)i + 2);
    if ( v6 )
    {
      *(_WORD *)(v6 + 28) |= 1u;
      v4 = *(void ***)&listHairNode;
    }
    v7 = *v4;
    if ( *v4 != v4 )
    {
      **((_DWORD **)v7 + 1) = *(_DWORD *)v7;
      *(_DWORD *)(*(_DWORD *)v7 + 4) = *((_DWORD *)v7 + 1);
      operator delete(v7);
      v4 = *(void ***)&listHairNode;
      --listHairNode.baseclass_0.baseclass_0._Mysize;
    }
  }
  if ( v1->m_apkLinkNode[1] )
  {
    for ( j = ((int (__stdcall *)(_DWORD))v1->m_apkLinkNode[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HairPartsNode");
          j;
          j = ((int (__stdcall *)(_DWORD))v1->m_apkLinkNode[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HairPartsNode") )
    {
      ((void (__stdcall *)(int *, int))v1->m_apkLinkNode[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v20,
        j);
      if ( v20 )
      {
        v9 = v20;
        if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
    }
    NiAVObject::Update(&v1->m_apkLinkNode[1]->baseclass_0, 0.0, 1);
  }
  v10 = (int)v1->m_aspHairNode;
  v11 = 6;
  do
  {
    v12 = *(_DWORD *)v10;
    if ( *(_DWORD *)v10 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
      *(_DWORD *)v10 = 0;
    }
    v10 += 4;
    --v11;
  }
  while ( v11 );
  kFindHairNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  v13 = (void *)**(_DWORD **)&listHairNode;
  **(_DWORD **)&listHairNode = *(_DWORD *)&listHairNode;
  *(_DWORD *)(*(_DWORD *)&listHairNode + 4) = *(_DWORD *)&listHairNode;
  v14 = *(void **)&listHairNode;
  listHairNode.baseclass_0.baseclass_0._Mysize = 0;
  if ( v13 != *(void **)&listHairNode )
  {
    do
    {
      v15 = *(void **)v13;
      operator delete(v13);
      v14 = *(void **)&listHairNode;
      v13 = v15;
    }
    while ( v15 != *(void **)&listHairNode );
  }
  operator delete(v14);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C4404: using guessed type int (__stdcall *FindHairNode___vftable_)(int _pkObject, int _pData);

//----- (0065FF70) --------------------------------------------------------
bool __thiscall CharShape::SetHairDetailMap(CharShape *this, unsigned int uiHaircolorID)
{
  CharShape *v2; // esi@1
  void *v3; // ecx@1
  int v5; // eax@3
  char v6; // bl@3
  unsigned int v7; // edi@4
  unsigned int v8; // esi@6
  void *v9; // eax@7
  unsigned int v10; // edi@11
  void *v11; // eax@11
  unsigned int v12; // esi@12
  NiNode *v13; // eax@13
  int v14; // eax@14
  NiAVObject *v15; // esi@15
  int v16; // eax@16
  NiProperty *v17; // eax@21
  NiProperty *v18; // esi@21
  NiTimeController *v19; // eax@22
  int v20; // edi@22
  NiTexturingProperty::Map *v21; // ebx@22
  int v22; // eax@24
  int v23; // eax@26
  int v24; // edi@29
  int v25; // ecx@34
  NiTexture *v26; // edi@36
  void *v27; // eax@37
  NiTexturingProperty::Map *v28; // eax@38
  NiTexturingProperty::Map *v29; // ecx@42
  void *v30; // eax@47
  void *v31; // eax@48
  void *v32; // edi@48
  void *v33; // ecx@50
  int v34; // esi@55
  void *v35; // eax@60
  int v36; // esi@62
  int v37; // ecx@69
  void *v38; // eax@69
  void *v39; // eax@75
  void *v40; // ecx@75
  void *v41; // esi@76
  NiTexturingProperty::Map *v42; // [sp-14h] [bp-54h]@54
  std::exception thisa; // [sp+0h] [bp-40h]@78
  FindGeometry kFindGeometry; // [sp+Ch] [bp-34h]@12
  std::list<NiAVObject *,std::allocator<NiAVObject *> > listGeometry; // [sp+18h] [bp-28h]@11
  void *pDetailMap; // [sp+24h] [bp-1Ch]@22
  CharShape *v47; // [sp+28h] [bp-18h]@1
  void *pkHairInfo; // [sp+2Ch] [bp-14h]@10
  void *pkTexture; // [sp+30h] [bp-10h]@11
  int v50; // [sp+3Ch] [bp-4h]@12

  v2 = this;
  v47 = this;
  v3 = CDataReader::GetRecord(
         (CDataReader *)(ITableBase<HairColorInfo_HairColorInfoTab>::ms_pkTable + 4),
         uiHaircolorID);
  uiHaircolorID = (unsigned int)v3;
  if ( !v3 )
    return 0;
  v5 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
  v6 = v2->m_byHairType;
  if ( v5 )
    v7 = *(_DWORD *)(v5 + 40);
  else
    v7 = 0;
  v8 = 0;
  if ( v7 )
  {
    while ( 1 )
    {
      v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v8);
      if ( *(_BYTE *)v9 == v6 )
        break;
      ++v8;
      if ( v8 >= v7 )
      {
        v3 = (void *)uiHaircolorID;
        goto LABEL_10;
      }
    }
    v3 = (void *)uiHaircolorID;
    pkHairInfo = v9;
  }
  else
  {
LABEL_10:
    pkHairInfo = 0;
  }
  v10 = 0;
  pkTexture = CharResMgr::GetHairDetailTexture(&g_kCharResMgr, *(_BYTE *)v3, (const char *)v3 + 46);
  listGeometry.baseclass_0.baseclass_0._Mysize = 0;
  v11 = operator new(0xCu);
  if ( !v11 )
  {
    uiHaircolorID = 0;
    std::exception::exception(&thisa, (const char *const *)&uiHaircolorID);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&listGeometry.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v11;
  *(_DWORD *)v11 = v11;
  *(_DWORD *)(*(_DWORD *)&listGeometry + 4) = *(_DWORD *)&listGeometry;
  v50 = 0;
  kFindGeometry.baseclass_0.m_pCallBack = 0;
  kFindGeometry.baseclass_0.m_nCurLevel = -1;
  kFindGeometry.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindGeometry::_vftable_;
  v12 = 0;
  LOBYTE(v50) = 1;
  uiHaircolorID = 0;
  do
  {
    v13 = v47->m_aspHairNode[v12].m_pObject;
    if ( v13 != (NiNode *)v10 )
    {
      Ns_TourScene::TourScene(&kFindGeometry.baseclass_0, v13, &NiGeometry::m_RTTI, &listGeometry);
      v14 = **(_DWORD **)&listGeometry;
      if ( **(_DWORD **)&listGeometry != *(_DWORD *)&listGeometry )
      {
        do
        {
          v15 = *(NiAVObject **)(v14 + 8);
          if ( !v15 )
            break;
          v16 = ((int (__thiscall *)(NiAVObject *))v15->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v15);
          if ( v16 )
          {
            while ( (NiRTTI *)v16 != &NiGeometry::m_RTTI )
            {
              v16 = *(_DWORD *)(v16 + 4);
              if ( !v16 )
                goto LABEL_69;
            }
            v17 = NiAVObject::GetProperty(v15, 8);
            v18 = v17;
            if ( v17 )
            {
              v19 = v17[1].baseclass_0.m_spControllers.m_pObject;
              v20 = *(_DWORD *)&v19->m_uFlags;
              v21 = (NiTexturingProperty::Map *)v19->baseclass_0.baseclass_0.vfptr;
              pDetailMap = *(void **)&v19->m_uFlags;
              if ( pkTexture )
              {
                if ( pkHairInfo
                  && ((v22 = *(_DWORD *)((char *)pkHairInfo + 285)) != 0 && v22 == uiHaircolorID + 1
                   || (v23 = *(_DWORD *)((char *)pkHairInfo + 289)) != 0 && v23 == uiHaircolorID + 1) )
                {
                  if ( v20 )
                  {
                    v24 = *(_DWORD *)(v20 + 4);
                    if ( v24 )
                    {
                      if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 )
                        (**(void (__thiscall ***)(_DWORD, _DWORD))v24)(v24, 1);
                      *((_DWORD *)pDetailMap + 1) = 0;
                    }
                  }
                  v25 = *(_DWORD *)&v18[1].baseclass_0.m_spControllers.m_pObject->m_uFlags;
                  pDetailMap = 0;
                  if ( v25 )
                  {
                    (**(void (__stdcall ***)(_DWORD))v25)(1);
                    NiTArray<NiCollisionGroup::Record__>::SetAt(
                      (NiTArray<NiVBChip *> *)&v18[1].baseclass_0.m_pcName,
                      2u,
                      (NiVBChip *const *)&pDetailMap);
                  }
                  NiTexturingProperty::SetMultiTexture((NiTexturingProperty *)v18, 0);
                  v26 = CharResMgr::GetHairBaseTexFromMap(
                          &g_kCharResMgr,
                          (HairInfo *)pkHairInfo,
                          v47->m_kClassID,
                          v47->m_byGender,
                          uiHaircolorID + 1);
                  if ( !v21 )
                  {
                    v27 = operator new(0x18u);
                    pDetailMap = v27;
                    LOBYTE(v50) = 2;
                    if ( v27 )
                      NiTexturingProperty::Map::Map(
                        (NiTexturingProperty::Map *)v27,
                        v26,
                        0,
                        WRAP_S_WRAP_T,
                        FILTER_TRILERP,
                        0);
                    else
                      v28 = 0;
                    LOBYTE(v50) = 1;
                    v21 = v28;
                    if ( !v28 )
                    {
                      std::list<NiAVObject___std::allocator<NiAVObject__>>::pop_front(&listGeometry);
LABEL_71:
                      v37 = *(_DWORD *)&listGeometry;
                      goto LABEL_72;
                    }
                  }
                  NiD3DTextureStage::SetTexture(v21, v26);
                  v29 = (NiTexturingProperty::Map *)v18[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
                  pDetailMap = v21;
                  if ( v21 != v29 )
                  {
                    if ( v29 )
                      ((void (__stdcall *)(signed int))v29->vfptr->__vecDelDtor)(1);
                    NiTArray<NiCollisionGroup::Record__>::SetAt(
                      (NiTArray<NiVBChip *> *)&v18[1].baseclass_0.m_pcName,
                      0,
                      (NiVBChip *const *)&pDetailMap);
                  }
                }
                else
                {
                  if ( !v20 )
                  {
                    v30 = operator new(0x18u);
                    pDetailMap = v30;
                    LOBYTE(v50) = 3;
                    if ( v30 )
                    {
                      NiTexturingProperty::Map::Map(
                        (NiTexturingProperty::Map *)v30,
                        (NiTexture *)pkTexture,
                        0,
                        WRAP_S_WRAP_T,
                        FILTER_TRILERP,
                        0);
                      v32 = v31;
                    }
                    else
                    {
                      v32 = 0;
                    }
                    v33 = *(void **)&v18[1].baseclass_0.m_spControllers.m_pObject->m_uFlags;
                    LOBYTE(v50) = 1;
                    pDetailMap = v32;
                    if ( v32 != v33 )
                    {
                      if ( v33 )
                        (**(void (__stdcall ***)(_DWORD))v33)(1);
                      NiTArray<NiCollisionGroup::Record__>::SetAt(
                        (NiTArray<NiVBChip *> *)&v18[1].baseclass_0.m_pcName,
                        2u,
                        (NiVBChip *const *)&pDetailMap);
                    }
                    v42 = (NiTexturingProperty::Map *)v32;
                    goto LABEL_68;
                  }
                  v34 = *(_DWORD *)(v20 + 4);
                  if ( (void *)v34 != pkTexture )
                  {
                    if ( v34 && !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 )
                      (**(void (__thiscall ***)(_DWORD, _DWORD))v34)(v34, 1);
                    v35 = pkTexture;
                    *(_DWORD *)(v20 + 4) = pkTexture;
                    InterlockedIncrement((volatile LONG *)v35 + 1);
                  }
                }
              }
              else
              {
                if ( !v20 )
                {
                  pDetailMap = 0;
                  v42 = 0;
LABEL_68:
                  NiTexturingProperty::SetMultiTexture((NiTexturingProperty *)v18, v42);
                  goto LABEL_69;
                }
                v36 = *(_DWORD *)(v20 + 4);
                if ( v36 )
                {
                  if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) && v36 )
                    (**(void (__thiscall ***)(_DWORD, _DWORD))v36)(v36, 1);
                  *(_DWORD *)(v20 + 4) = 0;
                }
              }
            }
          }
LABEL_69:
          v37 = *(_DWORD *)&listGeometry;
          v38 = (void *)**(_DWORD **)&listGeometry;
          if ( **(_DWORD **)&listGeometry != *(_DWORD *)&listGeometry )
          {
            **((_DWORD **)v38 + 1) = *(_DWORD *)v38;
            *(_DWORD *)(*(_DWORD *)v38 + 4) = *((_DWORD *)v38 + 1);
            operator delete(v38);
            --listGeometry.baseclass_0.baseclass_0._Mysize;
            goto LABEL_71;
          }
LABEL_72:
          v14 = *(_DWORD *)v37;
        }
        while ( *(_DWORD *)v37 != v37 );
      }
      v12 = uiHaircolorID;
      NiAVObject::UpdateProperties(&v47->m_aspHairNode[uiHaircolorID].m_pObject->baseclass_0);
      v10 = 0;
    }
    ++v12;
    uiHaircolorID = v12;
  }
  while ( v12 < 6 );
  kFindGeometry.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  v39 = (void *)**(_DWORD **)&listGeometry;
  **(_DWORD **)&listGeometry = *(_DWORD *)&listGeometry;
  *(_DWORD *)(*(_DWORD *)&listGeometry + 4) = *(_DWORD *)&listGeometry;
  v40 = *(void **)&listGeometry;
  listGeometry.baseclass_0.baseclass_0._Mysize = v10;
  if ( v39 != *(void **)&listGeometry )
  {
    do
    {
      v41 = *(void **)v39;
      operator delete(v39);
      v40 = *(void **)&listGeometry;
      v39 = v41;
    }
    while ( v41 != *(void **)&listGeometry );
  }
  operator delete(v40);
  return 1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C440C: using guessed type int (__stdcall *FindGeometry___vftable_)(int _pkObject, int _pData);
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;
// A94360: using guessed type int ITableBase_HairColorInfo_HairColorInfoTab___ms_pkTable;

//----- (00660400) --------------------------------------------------------
void __thiscall CharShape::_CharShape(CharShape *this)
{
  CharShape *v1; // esi@1
  AfterImgEff *v2; // ecx@1
  NiNode *v3; // eax@2
  AfterImgEff *v4; // edi@2
  AfterImgEff *v5; // edi@7
  NiNode *v6; // edi@16
  AfterImgEff *v7; // edi@21
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v8; // ST0C_4@25
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v9; // ST08_4@25
  AfterImgEff *v10; // edi@25
  NiNode *v11; // edi@29
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@25
  std::multimap<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> > > *v13; // [sp+4h] [bp-14h]@25
  CharShape *v14; // [sp+8h] [bp-10h]@1
  int v15; // [sp+14h] [bp-4h]@1

  v1 = this;
  v14 = this;
  this->vfptr = (CharShapeVtbl *)&CharShape::_vftable_;
  v2 = this->m_spAuraOfWeapon.m_pObject;
  v15 = 6;
  if ( v2 )
  {
    v3 = (NiNode *)((int (*)(void))v2->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
    World::DetachEffect(&g_kWorld, v3);
    v4 = v1->m_spAuraOfWeapon.m_pObject;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      v1->m_spAuraOfWeapon.m_pObject = 0;
    }
  }
  v5 = v1->m_spAuraOfWeapon.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spAuraOfWeapon.m_pObject = 0;
  }
  ItemUpGrade::RemoveAll(&v1->m_kItemUpGrade);
  if ( v1->m_hMiniMonAutoPickEff )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v1->m_hMiniMonAutoPickEff);
    v1->m_hMiniMonAutoPickEff = 0;
  }
  if ( v1->m_hMinimonAutoUseEff )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v1->m_hMinimonAutoUseEff);
    v1->m_hMinimonAutoUseEff = 0;
  }
  v6 = v1->m_spFaceNode.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spFaceNode.m_pObject = 0;
  }
  v7 = v1->m_spChestBlur.m_pObject;
  LOBYTE(v15) = 5;
  if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.m_uiRefCount) && v7 )
    v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  LOBYTE(v15) = 4;
  CSpactralGlow_Shader_Controller::_CSpactralGlow_Shader_Controller(&v1->m_SpactralGlowEffect);
  v13 = &v1->m_mapDummyLinkNode;
  v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v15) = 7;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapDummyLinkNode,
    &result,
    v9,
    v8);
  operator delete(v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead);
  LOBYTE(v15) = 2;
  ItemUpGrade::RemoveAll(&v1->m_kItemUpGrade);
  v10 = v1->m_spAuraOfWeapon.m_pObject;
  LOBYTE(v15) = 1;
  if ( v10 && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.m_uiRefCount) && v10 )
    v10->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_spFaceNode.m_pObject;
  LOBYTE(v15) = 0;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v15 = -1;
  _eh_vector_destructor_iterator_(
    v1->m_aspHairNode,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9C4494: using guessed type int (__thiscall *CharShape___vftable_)(void *p, char);

//----- (00660610) --------------------------------------------------------
bool __thiscall CharShape::SetModelPart(CharShape *this, NiNode *pkNode)
{
  CharShape *v2; // esi@1
  bool result; // al@2
  NiNode *v4; // ecx@4

  v2 = this;
  if ( this->m_kClassID )
    result = CharShape::SetCharModelPart(this, pkNode);
  else
    result = CharShape::SetMobModelPart(this, pkNode);
  v4 = v2->m_apkLinkNode[1];
  if ( v4 )
    v2->m_fHeight = v4->baseclass_0.m_kWorld.m_Translate.z;
  else
    v2->m_fHeight = 53.0;
  return result;
}

//----- (00660680) --------------------------------------------------------
void __thiscall CharShape::MakeHairSet(CharShape *this, char byID)
{
  int v2; // eax@1
  unsigned int v3; // ebx@1
  CharShape *v4; // edi@1
  void *v5; // esi@5
  unsigned int v6; // [sp+8h] [bp-4h]@2

  v2 = *(_DWORD *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 56);
  v3 = 0;
  v4 = this;
  if ( v2 )
    v6 = *(_DWORD *)(v2 + 40);
  else
    v6 = 0;
  if ( v6 > 0 )
  {
    while ( 1 )
    {
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<HairInfo_HairInfoTab>::ms_pkTable + 4), v3);
      if ( *(_BYTE *)v5 == byID )
        break;
      ++v3;
      if ( v3 >= v6 )
        return;
    }
    v4->m_byHairType = byID;
    CharShape::HideAllHair(v4);
    CharShape::SetHairParts(
      v4,
      0,
      *(_BYTE *)v5,
      *((_BYTE *)v5 + 90) != 0,
      (const char *)v5 + 91,
      (const char *)v5 + 123);
    CharShape::SetHairParts(
      v4,
      1,
      *(_BYTE *)v5,
      *((_BYTE *)v5 + 155) != 0,
      (const char *)v5 + 156,
      (const char *)v5 + 188);
    CharShape::SetHairParts(
      v4,
      2,
      *(_BYTE *)v5,
      *((_BYTE *)v5 + 220) != 0,
      (const char *)v5 + 221,
      (const char *)v5 + 253);
    CharShape::SetHairParts(
      v4,
      3,
      *(_BYTE *)v5,
      *((_BYTE *)v5 + 293) != 0,
      (const char *)v5 + 294,
      (const char *)v5 + 326);
    CharShape::SetHairParts(
      v4,
      4,
      *(_BYTE *)v5,
      *((_BYTE *)v5 + 358) != 0,
      (const char *)v5 + 359,
      (const char *)v5 + 391);
    CharShape::SetHairParts(
      v4,
      5,
      *(_BYTE *)v5,
      *((_BYTE *)v5 + 423) != 0,
      (const char *)v5 + 424,
      (const char *)v5 + 456);
    CharShape::SetHairDetailMap(v4, v4->m_byHairColor);
  }
}
// A94354: using guessed type int ITableBase_HairInfo_HairInfoTab___ms_pkTable;

//----- (006607F0) --------------------------------------------------------
void __thiscall CharShape::CharShape(CharShape *this)
{
  CharShape *v1; // esi@1
  void *v2; // eax@1
  AfterImgEff *v3; // edi@2
  int v4; // eax@7
  int v5; // edi@8
  bool v6; // zf@13
  NiNode *v7; // edi@14
  std::exception thisa; // [sp+0h] [bp-24h]@20
  CharShape *v9; // [sp+Ch] [bp-18h]@1
  char *_What; // [sp+10h] [bp-14h]@7
  NiPointer<NiNode> *v11; // [sp+14h] [bp-10h]@7
  int v12; // [sp+20h] [bp-4h]@1

  v1 = this;
  v9 = this;
  this->vfptr = (CharShapeVtbl *)&CharShape::_vftable_;
  _eh_vector_constructor_iterator_(
    this->m_aspHairNode,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v12 = 0;
  v1->m_spFaceNode.m_pObject = 0;
  v1->m_spAuraOfWeapon.m_pObject = 0;
  memset((char *)&v1->m_kItemUpGrade, 0, 0xF0u);
  v1->m_kItemUpGrade.m_WeaponUpgradeStat.nUpLevel = 0;
  v1->m_kItemUpGrade.m_WeaponUpgradeStat.pkUpEff = 0;
  LOBYTE(v12) = 3;
  v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapDummyLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v12) = 4;
  CSpactralGlow_Shader_Controller::CSpactralGlow_Shader_Controller(&v1->m_SpactralGlowEffect);
  v1->m_spChestBlur.m_pObject = 0;
  v1->m_fHeight = 30.0;
  v1->m_kClassID = 0;
  v1->m_kMobID = -1;
  *(_DWORD *)&v1->m_byRace = 16711936;
  v1->m_byFace = 0;
  v1->m_byFaceShapeType = 0;
  v1->m_pkBaseFaceShapeNode = 0;
  v1->m_pkEyeShapeNode = 0;
  v1->m_byEyeState = 1;
  v1->m_pkEyeShapeAnotherNode = 0;
  v1->m_nSetLodGeoCnt = 0;
  v1->m_pkBoneLodController = 0;
  v1->m_pActor = 0;
  v3 = v1->m_spAuraOfWeapon.m_pObject;
  LOBYTE(v12) = 6;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spAuraOfWeapon.m_pObject = 0;
  }
  v4 = (int)v1->m_aspHairNode;
  v1->m_pkRootNode = 0;
  v11 = v1->m_aspHairNode;
  _What = (char *)6;
  do
  {
    v5 = *(_DWORD *)v4;
    if ( *(_DWORD *)v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      v11->m_pObject = 0;
    }
    v4 = (int)&v11[1];
    v6 = _What-- == (char *)1;
    ++v11;
  }
  while ( !v6 );
  v7 = v1->m_spFaceNode.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v1->m_spFaceNode.m_pObject = 0;
  }
  v1->m_uiRidePetID = -1;
  CharShape::ClearModelPart(v1);
  CharShape::ClearEquipInfo(v1);
  v1->m_bFaceCulling = 0;
  *(_WORD *)&v1->m_bShowWeaponEffect = 0;
  v1->m_hMiniMonAutoPickEff = 0;
  v1->m_uiEquipPos = 0;
  v1->m_bAutoUseItem = 0;
  v1->m_hMinimonAutoUseEff = 0;
  v1->m_bGTIBomb = 0;
  v1->m_uiFaceTypeIndex = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C4494: using guessed type int (__thiscall *CharShape___vftable_)(void *p, char);

//----- (00660A50) --------------------------------------------------------
bool __thiscall CharShape::SetSubItem(CharShape *this, ItemEquipEnum eEquipPos, DummyTypeEnum eInx, const char *szNifName, const char *szSubItemTextureName, const char *szSubItemNode)
{
  CharShape *v6; // esi@1
  bool v7; // al@2
  NiNode *v8; // ebx@3
  NiNode *v9; // edi@13
  CarToonShader *v10; // eax@34
  CarToonShader *v11; // eax@36
  CharShape::LinkIndex v12; // [sp-1Ch] [bp-30h]@4
  const char *v13; // [sp-18h] [bp-2Ch]@4
  const char *v14; // [sp-14h] [bp-28h]@4
  const char *v15; // [sp-10h] [bp-24h]@4
  CharShape::AttachType v16; // [sp-Ch] [bp-20h]@4
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,bool> result; // [sp+4h] [bp-10h]@34
  std::pair<enum ItemEquipEnum const ,NiNode *> _Val; // [sp+Ch] [bp-8h]@34

  v6 = this;
  if ( eInx )
  {
    v8 = 0;
    switch ( eInx )
    {
      case 1:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 0;
        goto LABEL_32;
      case 2:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 1;
        goto LABEL_32;
      case 3:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 2;
        goto LABEL_32;
      case 4:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 3;
        goto LABEL_32;
      case 5:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 4;
        goto LABEL_32;
      case 6:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 5;
        goto LABEL_32;
      case 7:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 7;
        goto LABEL_32;
      case 9:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 15;
        goto LABEL_32;
      case 10:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 16;
        goto LABEL_32;
      case 11:
        v9 = CharShape::SetSubItem(this, LINK_LEFTSHOULDER, szNifName, szSubItemTextureName, szSubItemNode, Left);
        v8 = CharShape::SetSubItem(v6, LINK_RIGHTSHOULDER, szNifName, szSubItemTextureName, szSubItemNode, Right);
        goto LABEL_33;
      case 12:
        v16 = 1;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 9;
        goto LABEL_32;
      case 13:
        v16 = 2;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 10;
        goto LABEL_32;
      case 14:
        v9 = CharShape::SetSubItem(this, LINK_LEFTUPPERARM, szNifName, szSubItemTextureName, szSubItemNode, Left);
        v8 = CharShape::SetSubItem(v6, LINK_RIGHTUPPERARM, szNifName, szSubItemTextureName, szSubItemNode, Right);
        goto LABEL_33;
      case 15:
        v16 = 1;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 19;
        goto LABEL_32;
      case 16:
        v16 = 2;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 20;
        goto LABEL_32;
      case 20:
        v9 = CharShape::SetSubItem(this, LINK_LEFTTHIGH, szNifName, szSubItemTextureName, szSubItemNode, Left);
        v8 = CharShape::SetSubItem(v6, LINK_RIGHTTHIGH, szNifName, szSubItemTextureName, szSubItemNode, Right);
        goto LABEL_33;
      case 21:
        v16 = 1;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 21;
        goto LABEL_32;
      case 22:
        v16 = 2;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 22;
        goto LABEL_32;
      case 23:
        v9 = CharShape::SetSubItem(this, LINK_LEFTCALF, szNifName, szSubItemTextureName, szSubItemNode, Left);
        v8 = CharShape::SetSubItem(v6, LINK_RIGHTCALF, szNifName, szSubItemTextureName, szSubItemNode, Right);
        goto LABEL_33;
      case 24:
        v16 = 1;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 23;
        goto LABEL_32;
      case 25:
        v16 = 2;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 24;
        goto LABEL_32;
      case 17:
        v9 = CharShape::SetSubItem(this, LINK_RIGHTBRACELET, szNifName, szSubItemTextureName, szSubItemNode, Right);
        v8 = CharShape::SetSubItem(v6, LINK_LEFTBRACELET, szNifName, szSubItemTextureName, szSubItemNode, Left);
        goto LABEL_33;
      case 18:
        v16 = 1;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 13;
        goto LABEL_32;
      case 19:
        v16 = 2;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 14;
        goto LABEL_32;
      case 26:
        v9 = CharShape::SetSubItem(this, LINK_LEFTSHOESACC, szNifName, szSubItemTextureName, szSubItemNode, Left);
        v8 = CharShape::SetSubItem(v6, LINK_RIGHTSHOESACC, szNifName, szSubItemTextureName, szSubItemNode, Right);
        goto LABEL_33;
      case 27:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 17;
        goto LABEL_32;
      case 28:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 18;
        goto LABEL_32;
      case 29:
        v16 = 0;
        v15 = szSubItemNode;
        v14 = szSubItemTextureName;
        v13 = szNifName;
        v12 = 26;
LABEL_32:
        v9 = CharShape::SetSubItem(this, v12, v13, v14, v15, v16);
LABEL_33:
        if ( v9 )
        {
          _Val.baseclass_0.first = eEquipPos;
          _Val.baseclass_0.second = v9;
          std::_Tree<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>::insert<std::pair<enum__ItemEquipEnum_const_NiNode__>>(
            &v6->m_mapDummyLinkNode.baseclass_0,
            &result,
            &_Val);
          v10 = CarToonShader::GetInstance();
          CarToonShader::SetCartoonShader(v10, v9);
        }
        if ( v8 )
        {
          _Val.baseclass_0.first = eEquipPos;
          _Val.baseclass_0.second = v8;
          std::_Tree<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>::insert<std::pair<enum__ItemEquipEnum_const_NiNode__>>(
            &v6->m_mapDummyLinkNode.baseclass_0,
            &result,
            &_Val);
          v11 = CarToonShader::GetInstance();
          CarToonShader::SetCartoonShader(v11, v8);
        }
        break;
      default:
        break;
    }
    v7 = 1;
  }
  else
  {
    v7 = 0;
  }
  return v7;
}

//----- (00660E50) --------------------------------------------------------
bool __thiscall ItemUpGrade::UpGradeItem(ItemUpGrade *this, Item *_pItem, NiNode *_pNode, ItemEquipEnum eEquipNum)
{
  ItemViewInfo *v5; // esi@4
  int v6; // ebx@5
  void *v7; // eax@5
  void *v8; // edi@5
  ItemUpGrade *v9; // esi@6
  signed int v10; // ecx@8
  signed int v11; // eax@8
  NiAVObject *v12; // esi@10
  char *v13; // eax@11
  int v14; // edi@11
  char v15; // cl@12
  int v16; // eax@14
  WeaponTypeEnum v17; // eax@24
  int *v18; // [sp-Ch] [bp-BCh]@15
  char *v19; // [sp-8h] [bp-B8h]@15
  NiNode *v20; // [sp-4h] [bp-B4h]@15
  float v21; // [sp+0h] [bp-B0h]@15
  bool v22; // [sp+4h] [bp-ACh]@15
  ABSTATEINDEX *v23; // [sp+4h] [bp-ACh]@26
  std::list<char *,std::allocator<char *> > AttachedNode; // [sp+18h] [bp-98h]@24
  unsigned int dwEffectHandle1; // [sp+24h] [bp-8Ch]@9
  int i; // [sp+28h] [bp-88h]@9
  NiNode *_pObject; // [sp+2Ch] [bp-84h]@1
  void *pkUpEff; // [sp+30h] [bp-80h]@5
  unsigned int dwEffectHandle0; // [sp+34h] [bp-7Ch]@9
  ItemUpGrade *thisa; // [sp+38h] [bp-78h]@1
  ItemInfo *pkItemInfo; // [sp+3Ch] [bp-74h]@3
  NsFindObjectByName kFindObject; // [sp+40h] [bp-70h]@8
  char szEffectFileName[33]; // [sp+7Ch] [bp-34h]@11
  unsigned int v34; // [sp+A0h] [bp-10h]@1
  int v35; // [sp+ACh] [bp-4h]@8
  int v36; // [sp+B0h] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  thisa = this;
  _pObject = _pNode;
  if ( !_pNode
    || (pkItemInfo = _pItem->m_pkInfo) == 0
    || (v5 = _pItem->m_pkViewInfo) == 0
    || (v6 = ((int (__cdecl *)(unsigned int))_pItem->baseclass_0.vfptr[9].__vecDelDtor)((unsigned int)&v36 ^ __security_cookie)
           - 1,
        v7 = UpEffectTab::GetObjByID(v5->UpEffect),
        v8 = v7,
        (pkUpEff = v7) == 0)
    || (v9 = thisa,
        thisa->m_WeaponUpgradeStat.pkUpEff = (UpEffectData *)v7,
        v9->m_WeaponUpgradeStat.nUpLevel = v6,
        v6 <= 0) )
    return 0;
  if ( *((_BYTE *)v7 + v6 + 2) == -1 )
    goto LABEL_23;
  NsFindObjectByName::NsFindObjectByName(&kFindObject);
  v35 = 0;
  NsFindObjectByName::FindObject(&kFindObject, _pObject, "WUP");
  v10 = 0;
  v11 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                   - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( !v11 )
    goto LABEL_22;
  dwEffectHandle0 = 0;
  dwEffectHandle1 = 0;
  i = 0;
  if ( v11 <= 0 )
    goto LABEL_21;
  do
  {
    v12 = NsFindObjectByName::GetAt(&kFindObject, v10);
    if ( NiObject::IsKindOf(&NiNode::m_RTTI, &v12->baseclass_0.baseclass_0) )
    {
      sprintf(szEffectFileName, "itemeffect%03d");
      v13 = v12->baseclass_0.m_pcName;
      v14 = (int)(v13 + 1);
      do
        v15 = *v13++;
      while ( v15 );
      if ( &v13[-v14] == (char *)5 )
      {
        v16 = atoi((const char *)v12->baseclass_0.m_pcName + 3) - 1;
        if ( v16 )
        {
          if ( v16 != 1 )
            goto LABEL_19;
          v22 = 1;
          v21 = Timer::ms_fCurTime;
          v20 = (NiNode *)v12;
          v19 = szEffectFileName;
          v18 = (int *)&dwEffectHandle1;
        }
        else
        {
          v22 = 1;
          v21 = Timer::ms_fCurTime;
          v20 = (NiNode *)v12;
          v19 = szEffectFileName;
          v18 = (int *)&dwEffectHandle0;
        }
        EffectMgr::CreateAttachEffect(&g_kEffectMgr, (unsigned int *)v18, v19, v20, v21, v22);
      }
    }
LABEL_19:
    v8 = pkUpEff;
    v10 = i + 1;
    i = v10;
  }
  while ( v10 < (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                           - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
  v9 = thisa;
LABEL_21:
  ItemUpGrade::SetEffectHandle(v9, eEquipNum, dwEffectHandle0, dwEffectHandle1);
LABEL_22:
  v35 = -1;
  NsFindObjectByName::_NsFindObjectByName(&kFindObject);
LABEL_23:
  if ( *((_BYTE *)v8 + v6 + 14) != -1 )
  {
    std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>((std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *)&AttachedNode);
    v17 = pkItemInfo->WeaponType;
    v35 = 1;
    if ( v17 == 17 || v17 == 18 )
    {
      pkItemInfo = (ItemInfo *)"LODGroup02";
      std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(
        (std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *)&AttachedNode,
        (ABSTATEINDEX *)&pkItemInfo);
      pkItemInfo = (ItemInfo *)"LODGroup03";
      v23 = (ABSTATEINDEX *)&pkItemInfo;
    }
    else
    {
      pkItemInfo = (ItemInfo *)"LODGroup01";
      v23 = (ABSTATEINDEX *)&pkItemInfo;
    }
    std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(
      (std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *)&AttachedNode,
      v23);
    ItemUpGrade::SetUpgradeTextureEff(thisa, _pObject, *((_BYTE *)v8 + v6 + 14), &AttachedNode);
    v35 = -1;
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&AttachedNode);
  }
  ItemUpGrade::SetShow(thisa, 0);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006610E0) --------------------------------------------------------
void __thiscall CharShape::CreateWeaponCostumeEffect(CharShape *this, ItemInfo *pkItemInfo, NiNode *pkNode)
{
  CharShape *v3; // esi@1
  ItemInfo *v4; // edi@1
  unsigned __int16 v5; // cx@2
  ItemEquipEnum v6; // edi@2
  char v7; // al@3
  Item *v8; // eax@8
  Item *v9; // edi@8
  ItemInfo *v10; // eax@9
  WeaponTypeEnum v11; // edx@10
  NiNode *v12; // [sp-8h] [bp-80h]@12
  ItemEquipEnum v13; // [sp-4h] [bp-7Ch]@12
  char kStruct[2]; // [sp+Ch] [bp-6Ch]@2
  char v15; // [sp+Eh] [bp-6Ah]@3
  unsigned int v16; // [sp+74h] [bp-4h]@1
  int v17; // [sp+78h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = this;
  v4 = CharShape::GetEquippedWeaponItemInfo(this);
  if ( v4 )
  {
    memset(kStruct, 0, 0x67u);
    v5 = v4->ID;
    v6 = v4->Equip;
    *(_WORD *)kStruct = v5;
    if ( v6 == 10 )
    {
      v7 = v3->m_kEquip.upgrade.gap0[0] & 0xF;
      v15 = v3->m_kEquip.upgrade.gap0[0] & 0xF;
    }
    else
    {
      if ( v6 == 12 )
      {
        v7 = v3->m_kEquip.upgrade.gap0[0] >> 4;
        v15 = v3->m_kEquip.upgrade.gap0[0] >> 4;
      }
      else
      {
        v7 = v15;
      }
    }
    if ( (unsigned __int8)v7 >= 1u )
    {
      v8 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
      v9 = v8;
      if ( v8 )
      {
        v10 = v8->m_pkInfo;
        if ( v10->WeaponType )
        {
          v11 = pkItemInfo->WeaponType;
          if ( v11 == 17 || v11 == 18 )
          {
            if ( !v10->UpLimit )
              return;
            ItemUpGrade::UpGradeItem(&v3->m_kItemUpGrade, v9, v3->m_apkLinkNode[12], ITEMEQUIP_RIGHTHAND);
            v13 = 10;
            v12 = v3->m_apkLinkNode[11];
          }
          else
          {
            v13 = pkItemInfo->Equip;
            v12 = pkNode;
          }
          ItemUpGrade::UpGradeItem(&v3->m_kItemUpGrade, v9, v12, v13);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006611D0) --------------------------------------------------------
void __thiscall CharShape::CreateShieldCostumeEffect(CharShape *this, ItemInfo *pkItemInfo, NiNode *pkNode)
{
  CharShape *v3; // ebx@1
  int v4; // esi@3
  int v5; // edi@3
  int v6; // eax@5
  int v7; // esi@6
  bool v8; // zf@7
  char v9; // al@8
  Item *v10; // eax@11
  char kStruct[2]; // [sp+8h] [bp-6Ch]@7
  char v12; // [sp+Ah] [bp-6Ah]@8
  unsigned int v13; // [sp+70h] [bp-4h]@1
  int v14; // [sp+74h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  if ( pkItemInfo )
  {
    if ( pkNode )
    {
      v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v5 = this->m_kEquip.Equ_LeftHand;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              this->m_kEquip.Equ_LeftHand) )
      {
        if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
        {
          v6 = *(_DWORD *)(v4 + 196) + 4 * v5;
          if ( *(_DWORD *)v6 )
          {
            v7 = *(_DWORD *)v6;
            if ( *(_DWORD *)v6 )
            {
              memset(kStruct, 0, 0x67u);
              v8 = *(_DWORD *)(v7 + 110) == 10;
              *(_WORD *)kStruct = *(_WORD *)v7;
              if ( v8 )
              {
                v9 = v3->m_kEquip.upgrade.gap0[0] & 0xF;
                v12 = v3->m_kEquip.upgrade.gap0[0] & 0xF;
              }
              else
              {
                v9 = v12;
              }
              if ( (unsigned __int8)v9 >= 1u )
              {
                v10 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
                if ( v10 )
                  ItemUpGrade::UpGradeItem(&v3->m_kItemUpGrade, v10, pkNode, pkItemInfo->Equip);
              }
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006612B0) --------------------------------------------------------
void __thiscall CharShape::EquipSubItem(CharShape *this, ItemInfo *pkItemInfo, ItemViewInfo *pkViewInfo)
{
  CharShape *v3; // edi@1
  ItemInfo *v4; // esi@2
  unsigned int v5; // ebx@4
  void *v6; // eax@6
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *v7; // eax@7
  int v8; // esi@7
  int v9; // eax@8
  ItemEquipEnum v10; // [sp-24h] [bp-54h]@9
  DummyTypeEnum v11; // [sp-20h] [bp-50h]@9
  const char *v12; // [sp-1Ch] [bp-4Ch]@9
  const char *v13; // [sp-18h] [bp-48h]@9
  const char *v14; // [sp-14h] [bp-44h]@9
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > result; // [sp+0h] [bp-30h]@7
  std::exception thisa; // [sp+Ch] [bp-24h]@16
  std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > dummys; // [sp+18h] [bp-18h]@6
  int v18; // [sp+2Ch] [bp-4h]@7
  char *pcSubItemNode; // [sp+38h] [bp+8h]@6

  v3 = this;
  if ( this->m_pkRootNode )
  {
    v4 = pkItemInfo;
    if ( pkItemInfo )
    {
      if ( pkViewInfo )
      {
        v5 = pkItemInfo->Equip;
        if ( v5 == 1 )
          v5 = 27;
        CharShape::RemoveAllSubItem(this, v5);
        pcSubItemNode = fs("_SubItem%02d");
        dummys.baseclass_0.baseclass_0._Mysize = 0;
        v6 = operator new(0xCu);
        if ( !v6 )
        {
          pkViewInfo = 0;
          std::exception::exception(&thisa, (const char *const *)&pkViewInfo);
          thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
          _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
        }
        *(_DWORD *)v6 = v6;
        *(_DWORD *)&dummys.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v6;
        *((_DWORD *)v6 + 1) = v6;
        v18 = 0;
        v7 = ItemViewDummyTab::GetListByInxName(&result, v4->InxName);
        LOBYTE(v18) = 1;
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_Assign_rv(&dummys, v7);
        LOBYTE(v18) = 0;
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&result);
        v8 = **(_DWORD **)&dummys;
        if ( **(_DWORD **)&dummys != *(_DWORD *)&dummys )
        {
          while ( 1 )
          {
            v9 = *(_DWORD *)(v8 + 8);
            if ( v5 == 17 )
              break;
            if ( (*(_BYTE *)(v9 + 32) != 0) == (v3->m_byGender == 1) )
            {
              v14 = pcSubItemNode;
              v13 = (const char *)(v9 + 69);
              v12 = (const char *)(v9 + 37);
              v11 = *(_DWORD *)(v9 + 33);
              v10 = v5;
              goto LABEL_12;
            }
LABEL_13:
            v8 = *(_DWORD *)v8;
            if ( v8 == *(_DWORD *)&dummys )
              goto LABEL_14;
          }
          v14 = pcSubItemNode;
          v13 = (const char *)(v9 + 69);
          v12 = (const char *)(v9 + 37);
          v11 = *(_DWORD *)(v9 + 33);
          v10 = 17;
LABEL_12:
          CharShape::SetSubItem(v3, v10, v11, v12, v13, v14);
          goto LABEL_13;
        }
LABEL_14:
        std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::_list<ItemViewDummy___std::allocator<ItemViewDummy__>>((std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)&dummys);
      }
    }
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00661410) --------------------------------------------------------
bool __thiscall CharShape::ChangeBoneLODController(CharShape *this, int _nLodLevel, NiGeometry *_pkDestGeom, NiGeometry *_pkSrcGeom, NiGeometry *_pkNewGeom)
{
  NiSkinInstance *v5; // eax@6
  NiSkinInstance *v6; // ecx@6
  void *v7; // eax@8
  NiNode *v8; // edi@8
  NiObjectNET *v9; // esi@10
  NiNode *v10; // eax@10
  NiObjectNET *v11; // ebx@10
  NiTimeController *v12; // edi@12
  NiTimeController *v13; // esi@12
  unsigned int v14; // eax@14
  void *v15; // esi@17
  int v16; // ebx@18
  void *v17; // edi@18
  void *v18; // eax@19
  int v19; // eax@19
  int v20; // ebx@19
  NiTimeController *v21; // ST0C_4@21
  int v22; // edi@21
  unsigned int v23; // esi@21
  NiNode *v24; // ST04_4@22
  NiBoneLODController *v25; // esi@25
  bool result; // al@25
  FindBoneNode kFindBone; // [sp+0h] [bp-48h]@22
  NiBoneLODController *pkBoneLODCntDest; // [sp+24h] [bp-24h]@12
  int nSetIndex; // [sp+28h] [bp-20h]@16
  NiAVObject *pkRootParentDest; // [sp+2Ch] [bp-1Ch]@8
  CharShape *v31; // [sp+30h] [bp-18h]@1
  void *pkLodSkinInstSrc; // [sp+34h] [bp-14h]@14
  void *pkLodSkinInstDest; // [sp+38h] [bp-10h]@14
  int v34; // [sp+44h] [bp-4h]@18
  unsigned int uiBoneCount; // [sp+58h] [bp+10h]@18

  v31 = this;
  if ( this->m_pkRootNode
    && _nLodLevel >= 0
    && _pkDestGeom
    && _pkSrcGeom
    && _pkNewGeom
    && (v5 = _pkDestGeom->m_spSkinInstance.m_pObject, v6 = _pkSrcGeom->m_spSkinInstance.m_pObject, v5)
    && v6
    && (v7 = v5->m_pkRootParent, v8 = (NiNode *)v6->m_pkRootParent, (pkRootParentDest = (NiAVObject *)v7) != 0)
    && v8
    && (v9 = (NiObjectNET *)FindBoneRootNodes((NiNode *)v7), v10 = FindBoneRootNodes(v8), v11 = (NiObjectNET *)v10, v9)
    && v10
    && (v12 = NiObjectNET::GetController(v9, &NiBoneLODController::m_RTTI),
        pkBoneLODCntDest = (NiBoneLODController *)v12,
        v13 = NiObjectNET::GetController(v11, &NiBoneLODController::m_RTTI),
        v12)
    && v13
    && (pkLodSkinInstDest = 0, pkLodSkinInstSrc = 0, v14 = *(_DWORD *)&v12[1].m_bComputeScaledTime, v14 >= _nLodLevel)
    && v14 == *(_DWORD *)&v13[1].m_bComputeScaledTime
    && (nSetIndex = NiBoneLODController::GetSetAt(
                      (NiBoneLODController *)v12,
                      _nLodLevel,
                      (NiTriBasedGeom *)_pkDestGeom,
                      (NiSkinInstance **)&pkLodSkinInstDest),
        NiBoneLODController::GetSetAt(
          (NiBoneLODController *)v13,
          _nLodLevel,
          (NiTriBasedGeom *)_pkSrcGeom,
          (NiSkinInstance **)&pkLodSkinInstSrc),
        pkLodSkinInstDest)
    && (v15 = pkLodSkinInstSrc) != 0 )
  {
    v16 = *(_DWORD *)(*((_DWORD *)pkLodSkinInstSrc + 2) + 64);
    uiBoneCount = *(_DWORD *)(*((_DWORD *)pkLodSkinInstSrc + 2) + 64);
    v17 = operator new(0x2Cu);
    pkLodSkinInstSrc = v17;
    v34 = 0;
    if ( v17 )
    {
      v18 = operator new__(4 * v16);
      NiSkinInstance::NiSkinInstance(
        (NiSkinInstance *)v17,
        *((NiSkinData **)v15 + 2),
        pkRootParentDest,
        (NiAVObject **)v18);
      v20 = v19;
    }
    else
    {
      v20 = 0;
    }
    v21 = (NiTimeController *)*((_DWORD *)v15 + 3);
    v34 = -1;
    RewardInvItem::SetItem((NiObjectNET *)v20, v21);
    v22 = *((_DWORD *)v15 + 5);
    v23 = 0;
    if ( uiBoneCount )
    {
      do
      {
        FindBoneNode::FindBoneNode(&kFindBone, v31->m_apkLinkNode, 27, *(const char **)(*(_DWORD *)(v22 + 4 * v23) + 8));
        v24 = v31->m_pkRootNode;
        v34 = 1;
        Ns_TourScene::TourScene(&kFindBone.baseclass_0, v24, &NiNode::m_RTTI, 0);
        if ( kFindBone.m_pkBone )
          *(_DWORD *)(*(_DWORD *)(v20 + 20) + 4 * v23) = kFindBone.m_pkBone;
        v34 = -1;
        FindBoneNode::_FindBoneNode(&kFindBone);
        ++v23;
      }
      while ( v23 < uiBoneCount );
    }
    v25 = pkBoneLODCntDest;
    NiBoneLODController::SetAt(
      pkBoneLODCntDest,
      _nLodLevel,
      nSetIndex,
      (NiTriBasedGeom *)_pkNewGeom,
      (NiSkinInstance *)v20);
    NiBoneLODController::ReplaceSkinSet(v25, (NiTriBasedGeom *)_pkDestGeom, (NiTriBasedGeom *)_pkNewGeom);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00661670) --------------------------------------------------------
bool __thiscall CharShape::ChangeGeom(CharShape *this, NiGeometry **pkCurGeom, NiGeometry *pkChgGeom, int nLodLevel)
{
  NiNode *v4; // esi@4
  NiObject *v5; // ecx@4
  NiObject *v6; // eax@4
  NiNode *v7; // ebx@4
  NiNode *v8; // edx@4
  NiGeometry *v9; // eax@4
  NiSkinInstance *v10; // esi@4
  void *v11; // edi@6
  void *v12; // eax@7
  int v13; // eax@7
  int v14; // edi@7
  void *v15; // edx@9
  unsigned int v16; // esi@9
  NiNode *v17; // ST10_4@11
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v18; // ST14_4@11
  NiNode *v19; // esi@12
  std::set<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *> > *v20; // edi@12
  CarToonShader *v21; // eax@16
  CharShape *v22; // edi@16
  NiAVObject *v23; // ecx@18
  void *v24; // ecx@18
  bool result; // al@18
  FindBoneNode kFindBone; // [sp+2Ch] [bp-44h]@10
  std::set<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *> > *v27; // [sp+50h] [bp-20h]@6
  NiGeometry *pkChgNodeBL; // [sp+54h] [bp-1Ch]@4
  float pkCurSkin; // [sp+58h] [bp-18h]@4
  NiNode *pkCurNode; // [sp+5Ch] [bp-14h]@4
  CharShape *thisa; // [sp+60h] [bp-10h]@1
  int v32; // [sp+6Ch] [bp-4h]@6

  thisa = this;
  if ( this->m_pkRootNode && *pkCurGeom && pkChgGeom )
  {
    NiObjectNET::ms_eCopyType = 1;
    v5 = (NiObject *)pkChgGeom->baseclass_0.m_pkParent;
    pkCurNode = (*pkCurGeom)->baseclass_0.m_pkParent;
    v4 = pkCurNode;
    pkChgNodeBL = pkChgGeom;
    v6 = NiObject::Clone(v5);
    v7 = (NiNode *)v6;
    v6[11].baseclass_0.vfptr = (NiRefObjectVtbl *)LODWORD(pkCurNode->baseclass_0.m_kLocal.m_Translate.x);
    v8 = pkCurNode;
    v6[11].baseclass_0.m_uiRefCount = LODWORD(v4->baseclass_0.m_kLocal.m_Translate.y);
    v6[12].baseclass_0.vfptr = (NiRefObjectVtbl *)LODWORD(v4->baseclass_0.m_kLocal.m_Translate.z);
    memcpy(&v6[6].baseclass_0.m_uiRefCount, &v4->baseclass_0.m_kLocal, 0x24u);
    pkCurSkin = fabs(v8->baseclass_0.m_kLocal.m_fScale);
    *(float *)&v6[12].baseclass_0.m_uiRefCount = pkCurSkin;
    PgUtil::CatchGeometry((NiAVObject *)v6, &pkChgGeom);
    v9 = *pkCurGeom;
    v10 = pkChgGeom->m_spSkinInstance.m_pObject;
    LODWORD(pkCurSkin) = (*pkCurGeom)->m_spSkinInstance.m_pObject;
    if ( nLodLevel >= 0 )
      CharShape::ChangeBoneLODController(thisa, nLodLevel, v9, pkChgNodeBL, pkChgGeom);
    nLodLevel = v10->m_spSkinData.m_pObject->m_uiBones;
    v11 = operator new(0x2Cu);
    v27 = (std::set<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *> > *)v11;
    v32 = 0;
    if ( v11 )
    {
      v12 = operator new__(4 * nLodLevel);
      NiSkinInstance::NiSkinInstance(
        (NiSkinInstance *)v11,
        v10->m_spSkinData.m_pObject,
        *(NiAVObject **)(LODWORD(pkCurSkin) + 16),
        (NiAVObject **)v12);
      v14 = v13;
    }
    else
    {
      v14 = 0;
    }
    v32 = -1;
    NiGeometry::SetSkinInstance(pkChgGeom, (NiSkinInstance *)v14);
    RewardInvItem::SetItem((NiObjectNET *)v14, (NiTimeController *)v10->m_spSkinPartition.m_pObject);
    v15 = v10->m_ppkBones;
    v16 = 0;
    pkChgNodeBL = (NiGeometry *)v15;
    if ( nLodLevel )
    {
      v27 = &kFindBone.m_setLinkNode;
      do
      {
        FindBoneNode::FindBoneNode(
          &kFindBone,
          thisa->m_apkLinkNode,
          27,
          (const char *)(&pkChgNodeBL->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[v16][2].__vecDelDtor);
        v17 = thisa->m_pkRootNode;
        v32 = 1;
        Ns_TourScene::TourScene(&kFindBone.baseclass_0, v17, &NiNode::m_RTTI, 0);
        *(_DWORD *)(*(_DWORD *)(v14 + 20) + 4 * v16) = kFindBone.m_pkBone;
        v18 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)kFindBone.m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
        v32 = 3;
        std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
          (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&kFindBone.m_setLinkNode,
          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&pkCurSkin,
          v18,
          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)kFindBone.m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead);
        operator delete(kFindBone.m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead);
        ++v16;
        v32 = -1;
      }
      while ( v16 < nLodLevel );
    }
    v19 = pkCurNode->baseclass_0.m_pkParent;
    ((void (__thiscall *)(NiNode *, std::set<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *> > **, NiNode *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      pkCurNode->baseclass_0.m_pkParent,
      &v27,
      pkCurNode);
    v20 = v27;
    if ( v27 && !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0._Myhead) && v20 )
      (**(void (__thiscall ***)(std::set<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *> > *, signed int))&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0])(
        v20,
        1);
    v21 = CarToonShader::GetInstance();
    CarToonShader::SetCartoonShader(v21, v7);
    v22 = thisa;
    if ( CSpactralGlow_Shader_Controller::IsEnable(&thisa->m_SpactralGlowEffect) )
      CSpactralGlow_Shader_Controller::SetupRecursive(&v22->m_SpactralGlowEffect, v7);
    ((void (__thiscall *)(NiNode *, NiNode *, _DWORD))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v19,
      v7,
      0);
    v23 = (NiAVObject *)pkChgGeom;
    *pkCurGeom = pkChgGeom;
    NiAVObject::UpdateProperties(v23);
    NiAVObject::UpdateEffects(&(*pkCurGeom)->baseclass_0);
    pkCurNode = (NiNode *)1;
    LODWORD(pkCurSkin) = v24;
    NiAVObject::Update(&(*pkCurGeom)->baseclass_0, 0.0, 1);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00661910) --------------------------------------------------------
bool __thiscall CharShape::SetBody(CharShape *this, CharSet *pkSet)
{
  signed int v2; // esi@1
  NiGeometry **v3; // ebx@4
  NiGeometry *v4; // edi@5
  NiGeometry *v5; // eax@7
  bool result; // al@15
  NiGeometry *v7; // eax@21
  CharShape *thisa; // [sp+4h] [bp-14h]@1
  char *v9; // [sp+8h] [bp-10h]@4

  thisa = this;
  v2 = 0;
  if ( this->m_nSetLodGeoCnt && pkSet->m_nSetGeoCnt > 0 )
  {
    if ( this->m_pkBoneLodController )
    {
      v3 = this->m_apkLodGeom;
      v9 = (char *)pkSet->m_pkBodyGeom;
      while ( 1 )
      {
        v4 = *v3;
        if ( *v3 )
          InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v5 = 0;
        if ( v2 < 3 && v2 < pkSet->m_nSetGeoCnt )
          v5 = *(NiGeometry **)v9;
        if ( !CharShape::ChangeGeom(thisa, v3, v5, v2) )
          break;
        if ( v4 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
        v9 += 4;
        ++v2;
        ++v3;
        if ( v2 >= 3 )
        {
          thisa->m_apkGeom[2] = thisa->m_apkLodGeom[0];
          return 1;
        }
      }
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    result = 0;
  }
  else
  {
    if ( pkSet->m_nSetGeoCnt > 0 )
      v7 = pkSet->m_pkBodyGeom[0];
    else
      v7 = 0;
    this->m_apkLodGeom[0] = 0;
    this->m_apkLodGeom[1] = 0;
    this->m_apkLodGeom[2] = 0;
    result = CharShape::ChangeGeom(this, &this->m_apkGeom[2], v7, -1);
  }
  return result;
}

//----- (00661A80) --------------------------------------------------------
bool __thiscall CharShape::SetLeg(CharShape *this, CharSet *pkSet)
{
  signed int v2; // esi@1
  NiGeometry **v3; // ebx@4
  NiGeometry *v4; // edi@5
  NiGeometry *v5; // eax@7
  bool result; // al@15
  NiGeometry *v7; // eax@21
  CharShape *thisa; // [sp+4h] [bp-14h]@1
  char *v9; // [sp+8h] [bp-10h]@4

  thisa = this;
  v2 = 0;
  if ( this->m_nSetLodGeoCnt && pkSet->m_nSetGeoCnt > 0 )
  {
    if ( this->m_pkBoneLodController )
    {
      v3 = &this->m_apkLodGeom[3];
      v9 = (char *)pkSet->m_pkLegGeom;
      while ( 1 )
      {
        v4 = *v3;
        if ( *v3 )
          InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v5 = 0;
        if ( v2 < 3 && v2 < pkSet->m_nSetGeoCnt )
          v5 = *(NiGeometry **)v9;
        if ( !CharShape::ChangeGeom(thisa, v3, v5, v2) )
          break;
        if ( v4 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
        v9 += 4;
        ++v2;
        ++v3;
        if ( v2 >= 3 )
        {
          thisa->m_apkGeom[3] = thisa->m_apkLodGeom[3];
          return 1;
        }
      }
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    result = 0;
  }
  else
  {
    if ( pkSet->m_nSetGeoCnt > 0 )
      v7 = pkSet->m_pkLegGeom[0];
    else
      v7 = 0;
    this->m_apkLodGeom[3] = 0;
    this->m_apkLodGeom[4] = 0;
    this->m_apkLodGeom[5] = 0;
    result = CharShape::ChangeGeom(this, &this->m_apkGeom[3], v7, -1);
  }
  return result;
}

//----- (00661BF0) --------------------------------------------------------
bool __thiscall CharShape::SetShoes(CharShape *this, CharSet *pkSet)
{
  signed int v2; // esi@1
  NiGeometry **v3; // ebx@4
  NiGeometry *v4; // edi@5
  NiGeometry *v5; // eax@7
  bool result; // al@15
  NiGeometry *v7; // eax@21
  CharShape *thisa; // [sp+4h] [bp-14h]@1
  char *v9; // [sp+8h] [bp-10h]@4

  thisa = this;
  v2 = 0;
  if ( this->m_nSetLodGeoCnt && pkSet->m_nSetGeoCnt > 0 )
  {
    if ( this->m_pkBoneLodController )
    {
      v3 = &this->m_apkLodGeom[6];
      v9 = (char *)pkSet->m_pkShoesGeom;
      while ( 1 )
      {
        v4 = *v3;
        if ( *v3 )
          InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v5 = 0;
        if ( v2 < 3 && v2 < pkSet->m_nSetGeoCnt )
          v5 = *(NiGeometry **)v9;
        if ( !CharShape::ChangeGeom(thisa, v3, v5, v2) )
          break;
        if ( v4 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
        v9 += 4;
        ++v2;
        ++v3;
        if ( v2 >= 3 )
        {
          thisa->m_apkGeom[4] = thisa->m_apkLodGeom[6];
          return 1;
        }
      }
      if ( v4
        && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    result = 0;
  }
  else
  {
    if ( pkSet->m_nSetGeoCnt > 0 )
      v7 = pkSet->m_pkShoesGeom[0];
    else
      v7 = 0;
    this->m_apkLodGeom[6] = 0;
    this->m_apkLodGeom[7] = 0;
    this->m_apkLodGeom[8] = 0;
    result = CharShape::ChangeGeom(this, &this->m_apkGeom[4], v7, -1);
  }
  return result;
}

//----- (00661D60) --------------------------------------------------------
bool __thiscall CharShape::Equip_SetItem(CharShape *this, unsigned int uiEquipPos, CharSet *pkSet, NiTexture *pkTexture)
{
  CharShape *v4; // esi@1
  bool result; // al@4

  v4 = this;
  if ( pkSet )
  {
    switch ( uiEquipPos )
    {
      case 7u:
      case 8u:
        if ( !CharShape::SetBody(this, pkSet) )
          goto LABEL_9;
        result = CharShape::TextureBody(v4, pkTexture);
        break;
      case 0x13u:
      case 0x14u:
        if ( !CharShape::SetLeg(this, pkSet) )
          goto LABEL_9;
        result = CharShape::TextureLeg(v4, pkTexture);
        break;
      case 0x15u:
      case 0x16u:
        if ( !CharShape::SetShoes(this, pkSet) )
          goto LABEL_9;
        result = CharShape::TextureShoes(v4, pkTexture);
        break;
      default:
        goto LABEL_9;
    }
  }
  else
  {
LABEL_9:
    result = 0;
  }
  return result;
}

//----- (00661E10) --------------------------------------------------------
bool __thiscall CharShape::ResetBody(CharShape *this)
{
  CharShape *v1; // edi@1
  char v2; // dl@1
  ChrClassType v3; // ecx@2
  char v4; // ST14_1@3
  char v5; // ST18_1@3
  char v6; // al@3
  CharSet *v7; // eax@3
  CharSet *v8; // esi@3
  bool result; // al@5
  NiProperty *v10; // eax@14
  NiTimeController *v11; // ecx@15

  v1 = this;
  v2 = this->m_kClassID;
  switch ( this->m_kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 0;
      goto LABEL_3;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 2;
      goto LABEL_3;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 1;
      goto LABEL_3;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 3;
      goto LABEL_3;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 4;
      goto LABEL_3;
    case 0x1A:
    case 0x1B:
      v3 = 5;
LABEL_3:
      v4 = v2;
      v5 = v1->m_byGender;
      v6 = ChrBasicEquipTab::GetByIndex(v3, v1->m_byGender);
      v7 = CharResMgr::GetCharSet(&g_kCharResMgr, v4, v5, (unsigned __int8)v6);
      v8 = v7;
      if ( v7 && CharShape::SetBody(v1, v7) )
      {
        if ( v8->m_nSetGeoCnt > 0
          && v8 != (CharSet *)-16
          && (v10 = NiAVObject::GetProperty(&v8->m_pkBodyGeom[0]->baseclass_0, 8)) != 0
          && (v11 = v10[1].baseclass_0.m_spControllers.m_pObject, v11->baseclass_0.baseclass_0.vfptr) )
          result = CharShape::TextureBody(v1, (NiTexture *)v11->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor);
        else
          result = CharShape::TextureBody(v1, 0);
      }
      else
      {
        result = 0;
      }
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00661F30) --------------------------------------------------------
bool __thiscall CharShape::ResetLeg(CharShape *this)
{
  CharShape *v1; // edi@1
  char v2; // dl@1
  ChrClassType v3; // ecx@2
  char v4; // ST14_1@3
  char v5; // ST18_1@3
  char v6; // al@3
  CharSet *v7; // eax@3
  CharSet *v8; // esi@3
  bool result; // al@5
  NiProperty *v10; // eax@14
  NiTimeController *v11; // ecx@15

  v1 = this;
  v2 = this->m_kClassID;
  switch ( this->m_kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 0;
      goto LABEL_3;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 2;
      goto LABEL_3;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 1;
      goto LABEL_3;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 3;
      goto LABEL_3;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 4;
      goto LABEL_3;
    case 0x1A:
    case 0x1B:
      v3 = 5;
LABEL_3:
      v4 = v2;
      v5 = v1->m_byGender;
      v6 = ChrBasicEquipTab::GetByIndex(v3, v1->m_byGender);
      v7 = CharResMgr::GetCharSet(&g_kCharResMgr, v4, v5, (unsigned __int8)v6);
      v8 = v7;
      if ( v7 && CharShape::SetLeg(v1, v7) )
      {
        if ( v8->m_nSetGeoCnt > 0
          && v8 != (CharSet *)-28
          && (v10 = NiAVObject::GetProperty(&v8->m_pkLegGeom[0]->baseclass_0, 8)) != 0
          && (v11 = v10[1].baseclass_0.m_spControllers.m_pObject, v11->baseclass_0.baseclass_0.vfptr) )
          result = CharShape::TextureLeg(v1, (NiTexture *)v11->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor);
        else
          result = CharShape::TextureLeg(v1, 0);
      }
      else
      {
        result = 0;
      }
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00662050) --------------------------------------------------------
bool __thiscall CharShape::ResetShoes(CharShape *this)
{
  CharShape *v1; // edi@1
  char v2; // dl@1
  ChrClassType v3; // ecx@2
  char v4; // ST14_1@3
  char v5; // ST18_1@3
  char v6; // al@3
  CharSet *v7; // eax@3
  CharSet *v8; // esi@3
  bool result; // al@5
  NiProperty *v10; // eax@14
  NiTimeController *v11; // ecx@15

  v1 = this;
  v2 = this->m_kClassID;
  switch ( this->m_kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v3 = 0;
      goto LABEL_3;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v3 = 2;
      goto LABEL_3;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v3 = 1;
      goto LABEL_3;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v3 = 3;
      goto LABEL_3;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v3 = 4;
      goto LABEL_3;
    case 0x1A:
    case 0x1B:
      v3 = 5;
LABEL_3:
      v4 = v2;
      v5 = v1->m_byGender;
      v6 = ChrBasicEquipTab::GetByIndex(v3, v1->m_byGender);
      v7 = CharResMgr::GetCharSet(&g_kCharResMgr, v4, v5, (unsigned __int8)v6);
      v8 = v7;
      if ( v7 && CharShape::SetShoes(v1, v7) )
      {
        if ( v8->m_nSetGeoCnt > 0
          && v8 != (CharSet *)-40
          && (v10 = NiAVObject::GetProperty(&v8->m_pkShoesGeom[0]->baseclass_0, 8)) != 0
          && (v11 = v10[1].baseclass_0.m_spControllers.m_pObject, v11->baseclass_0.baseclass_0.vfptr) )
          result = CharShape::TextureShoes(v1, (NiTexture *)v11->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor);
        else
          result = CharShape::TextureShoes(v1, 0);
      }
      else
      {
        result = 0;
      }
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00662170) --------------------------------------------------------
bool __thiscall CharShape::EquipBody(CharShape *this)
{
  CharShape *v1; // esi@1

  v1 = this;
  if ( !CharShape::Equip(this, this->m_kEquip.Equ_Body, this->m_kEquip.upgrade.gap0[1] & 0xF)
    && v1->m_kEquip.Equ_AccBody == -1 )
    CharShape::ResetBody(v1);
  return 1;
}

//----- (006621B0) --------------------------------------------------------
bool __thiscall CharShape::EquipLeg(CharShape *this)
{
  CharShape *v1; // esi@1

  v1 = this;
  if ( !CharShape::Equip(this, this->m_kEquip.Equ_Pant, this->m_kEquip.upgrade.gap0[1] >> 4)
    && v1->m_kEquip.Equ_AccPant == -1 )
    CharShape::ResetLeg(v1);
  return 1;
}

//----- (006621F0) --------------------------------------------------------
bool __thiscall CharShape::EquipShoes(CharShape *this)
{
  CharShape *v1; // esi@1

  v1 = this;
  if ( !CharShape::Equip(this, this->m_kEquip.Equ_Boot, this->m_kEquip.upgrade._bf2 & 0xF)
    && v1->m_kEquip.Equ_AccBoot == -1 )
    CharShape::ResetShoes(v1);
  return 1;
}

//----- (00662230) --------------------------------------------------------
bool __thiscall CharShape::RemoveBody(CharShape *this)
{
  CharShape *v1; // edi@1
  CharSet *v2; // eax@1
  CharSet *v3; // esi@1
  bool result; // al@2
  NiProperty *v5; // eax@6
  NiTimeController *v6; // ecx@7

  v1 = this;
  v2 = CharResMgr::GetCharSet(&g_kCharResMgr, this->m_kClassID, this->m_byGender, 0xFFu);
  v3 = v2;
  if ( v2 && CharShape::SetBody(v1, v2) )
  {
    if ( v3->m_nSetGeoCnt > 0
      && v3 != (CharSet *)-16
      && (v5 = NiAVObject::GetProperty(&v3->m_pkBodyGeom[0]->baseclass_0, 8)) != 0
      && (v6 = v5[1].baseclass_0.m_spControllers.m_pObject, v6->baseclass_0.baseclass_0.vfptr) )
      result = CharShape::TextureBody(v1, (NiTexture *)v6->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor);
    else
      result = CharShape::TextureBody(v1, 0);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006622D0) --------------------------------------------------------
bool __thiscall CharShape::RemoveLeg(CharShape *this)
{
  CharShape *v1; // edi@1
  CharSet *v2; // eax@1
  CharSet *v3; // esi@1
  bool result; // al@2
  NiProperty *v5; // eax@6
  NiTimeController *v6; // ecx@7

  v1 = this;
  v2 = CharResMgr::GetCharSet(&g_kCharResMgr, this->m_kClassID, this->m_byGender, 0xFFu);
  v3 = v2;
  if ( v2 && CharShape::SetLeg(v1, v2) )
  {
    if ( v3->m_nSetGeoCnt > 0
      && v3 != (CharSet *)-28
      && (v5 = NiAVObject::GetProperty(&v3->m_pkLegGeom[0]->baseclass_0, 8)) != 0
      && (v6 = v5[1].baseclass_0.m_spControllers.m_pObject, v6->baseclass_0.baseclass_0.vfptr) )
      result = CharShape::TextureLeg(v1, (NiTexture *)v6->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor);
    else
      result = CharShape::TextureLeg(v1, 0);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00662370) --------------------------------------------------------
bool __thiscall CharShape::RemoveShoes(CharShape *this)
{
  CharShape *v1; // edi@1
  CharSet *v2; // eax@1
  CharSet *v3; // esi@1
  bool result; // al@2
  NiProperty *v5; // eax@6
  NiTimeController *v6; // ecx@7

  v1 = this;
  v2 = CharResMgr::GetCharSet(&g_kCharResMgr, this->m_kClassID, this->m_byGender, 0xFFu);
  v3 = v2;
  if ( v2 && CharShape::SetShoes(v1, v2) )
  {
    if ( v3->m_nSetGeoCnt > 0
      && v3 != (CharSet *)-40
      && (v5 = NiAVObject::GetProperty(&v3->m_pkShoesGeom[0]->baseclass_0, 8)) != 0
      && (v6 = v5[1].baseclass_0.m_spControllers.m_pObject, v6->baseclass_0.baseclass_0.vfptr) )
      result = CharShape::TextureShoes(v1, (NiTexture *)v6->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor);
    else
      result = CharShape::TextureShoes(v1, 0);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00662410) --------------------------------------------------------
void __thiscall CharShape::CheckOldCos(CharShape *this, ItemViewInfo *pkOldViewInfo, ItemEquipEnum eItemEquipType, bool *pbaRemovedStateFlag)
{
  CharShape *v4; // edi@1
  void *v5; // eax@2
  void *v6; // esi@2

  v4 = this;
  if ( pkOldViewInfo )
  {
    v5 = CDataReader::GetRecord(
           (CDataReader *)(ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable + 4),
           pkOldViewInfo->IVET_Index);
    v6 = v5;
    if ( v5 )
    {
      if ( *((_BYTE *)v5 + 4) && !*pbaRemovedStateFlag && eItemEquipType != 8 )
      {
        v4->m_barrRemoveShape[0] = 0;
        CharShape::EquipBody(v4);
      }
      if ( *((_BYTE *)v6 + 5) && !pbaRemovedStateFlag[1] && eItemEquipType != 20 )
      {
        v4->m_barrRemoveShape[1] = 0;
        CharShape::EquipLeg(v4);
      }
      if ( *((_BYTE *)v6 + 6) && !pbaRemovedStateFlag[2] )
      {
        if ( eItemEquipType != 22 )
        {
          v4->m_barrRemoveShape[2] = 0;
          CharShape::EquipShoes(v4);
        }
      }
    }
  }
}
// A97DFC: using guessed type int ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab___ms_pkTable;

//----- (006624B0) --------------------------------------------------------
void __thiscall CharShape::MultiSlotCosUnEquip(CharShape *this, ItemViewInfo *pkOldViewInfo)
{
  CharShape *v2; // edi@1
  void *v3; // eax@2
  void *v4; // esi@2

  v2 = this;
  if ( pkOldViewInfo )
  {
    v3 = CDataReader::GetRecord(
           (CDataReader *)(ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable + 4),
           pkOldViewInfo->IVET_Index);
    v4 = v3;
    if ( v3 )
    {
      if ( *((_BYTE *)v3 + 4) )
      {
        v2->m_barrRemoveShape[0] = 0;
        CharShape::EquipBody(v2);
      }
      if ( *((_BYTE *)v4 + 5) )
      {
        v2->m_barrRemoveShape[1] = 0;
        CharShape::EquipLeg(v2);
      }
      if ( *((_BYTE *)v4 + 6) )
      {
        v2->m_barrRemoveShape[2] = 0;
        CharShape::EquipShoes(v2);
      }
    }
  }
}
// A97DFC: using guessed type int ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab___ms_pkTable;

//----- (00662520) --------------------------------------------------------
bool __thiscall CharShape::MultiSlotCosProcess(CharShape *this, ItemInfo *pkItemInfo)
{
  int v2; // ebx@1
  int v3; // edi@1
  CharShape *v4; // esi@1
  int v5; // eax@3
  int v6; // eax@4
  unsigned int v8; // ST0C_4@6
  void *v9; // eax@6
  void *v10; // edi@6
  ItemEquipEnum v11; // eax@19
  ItemViewInfo *v12; // eax@25
  unsigned __int16 v13; // [sp-10h] [bp-20h]@20
  bool v14; // [sp-Ch] [bp-1Ch]@20
  ItemEquipEnum v15; // [sp-8h] [bp-18h]@20
  bool *v16; // [sp-4h] [bp-14h]@20
  char barrRemoveShape[3]; // [sp+Ch] [bp-4h]@6

  v2 = pkItemInfo->ID;
  v3 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  v4 = this;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                           pkItemInfo->ID)
    || (unsigned __int16)v2 > *(_WORD *)(v3 + 200)
    || (v5 = *(_DWORD *)(v3 + 196) + 4 * v2, !*(_DWORD *)v5)
    || (v6 = *(_DWORD *)v5) == 0
    || (v8 = *(_DWORD *)(v6 + 376),
        *(_WORD *)barrRemoveShape = 0,
        barrRemoveShape[2] = 0,
        v9 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable + 4),
               v8),
        (v10 = v9) == 0) )
    return 0;
  if ( *((_BYTE *)v9 + 4) )
  {
    if ( pkItemInfo->Equip != 8 )
    {
      barrRemoveShape[0] = 1;
      if ( !v4->m_barrRemoveShape[0] )
      {
        v4->m_barrRemoveShape[0] = 1;
        CharShape::RemoveAllSubItem(v4, 7u);
        CharShape::RemoveBody(v4);
      }
    }
  }
  if ( *((_BYTE *)v10 + 5) )
  {
    if ( pkItemInfo->Equip != 20 )
    {
      barrRemoveShape[1] = 1;
      if ( !v4->m_barrRemoveShape[1] )
      {
        v4->m_barrRemoveShape[1] = 1;
        CharShape::RemoveAllSubItem(v4, 0x13u);
        CharShape::RemoveLeg(v4);
      }
    }
  }
  if ( *((_BYTE *)v10 + 6) && pkItemInfo->Equip != 22 )
  {
    barrRemoveShape[2] = 1;
    if ( !v4->m_barrRemoveShape[2] )
    {
      v4->m_barrRemoveShape[2] = 1;
      CharShape::RemoveAllSubItem(v4, 0x15u);
      CharShape::RemoveShoes(v4);
    }
  }
  v11 = pkItemInfo->Equip;
  if ( v11 == 8 )
  {
    v16 = (bool *)barrRemoveShape;
    v15 = 8;
    v14 = 1;
    v13 = v4->m_kEquip.Equ_AccBody;
LABEL_25:
    v12 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v13, v14);
    CharShape::CheckOldCos(v4, v12, v15, v16);
    return 1;
  }
  if ( v11 == 20 )
  {
    v16 = (bool *)barrRemoveShape;
    v15 = 20;
    v14 = 1;
    v13 = v4->m_kEquip.Equ_AccPant;
    goto LABEL_25;
  }
  if ( v11 == 22 )
  {
    v16 = (bool *)barrRemoveShape;
    v15 = 22;
    v14 = 1;
    v13 = v4->m_kEquip.Equ_Minimon;
    goto LABEL_25;
  }
  return 1;
}
// A97DFC: using guessed type int ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00662690) --------------------------------------------------------
bool __thiscall CharShape::Equip(CharShape *this, Item *_pItem)
{
  int v2; // ebx@0
  CharShape *v3; // esi@1
  ItemInfo *v5; // edi@3
  int v6; // ST08_4@5
  int v7; // ebx@5
  int v8; // eax@7
  unsigned int v9; // eax@9
  char v10; // bl@9
  int v11; // eax@19
  ItemInfo *v12; // eax@31
  WeaponTypeEnum v13; // eax@32
  ItemInfo *v14; // eax@34
  WeaponTypeEnum v15; // eax@35
  ItemInfo *v16; // eax@40
  WeaponTypeEnum v17; // eax@41
  bool v18; // zf@59
  ItemViewEquipTypeInfo *v19; // eax@61
  ItemViewEquipTypeInfo *v20; // eax@64
  NiNode *v21; // ebx@74
  WeaponTypeEnum v22; // eax@77
  ItemEquipEnum v23; // eax@83
  PgFrameWork *v24; // eax@100
  unsigned __int16 v25; // ax@105
  CharSet *v26; // ebx@107
  NiTexture *v27; // eax@109
  NiAVObject *v28; // ecx@116
  Item *v29; // [sp-Ch] [bp-1Ch]@79
  unsigned __int16 v30; // [sp-8h] [bp-18h]@73
  NiNode *v31; // [sp-8h] [bp-18h]@79
  char v32; // [sp-4h] [bp-14h]@73
  ItemEquipEnum v33; // [sp-4h] [bp-14h]@79
  unsigned __int16 uiEquipPos; // [sp+8h] [bp-8h]@5
  unsigned int uiEquipPosa; // [sp+8h] [bp-8h]@9
  int pkViewInfo; // [sp+Ch] [bp-4h]@8

  v3 = this;
  if ( !_pItem )
    return 0;
  v5 = _pItem->m_pkInfo;
  if ( !v5 )
    return 0;
  v6 = v2;
  v7 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  uiEquipPos = v5->ID;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD, int))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                                 + 16))(
                           ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                           v5->ID,
                           v6)
    || uiEquipPos > *(_WORD *)(v7 + 200)
    || (v8 = *(_DWORD *)(v7 + 196) + 4 * uiEquipPos, !*(_DWORD *)v8)
    || (pkViewInfo = *(_DWORD *)v8) == 0 )
    return 0;
  v9 = v5->Equip;
  v10 = 1;
  uiEquipPosa = v9;
  if ( v9 == 25 && v3->m_uiEquipPos )
  {
    v9 = v3->m_uiEquipPos;
    uiEquipPosa = v3->m_uiEquipPos;
  }
  switch ( v9 )
  {
    case 7u:
      if ( v3->m_barrRemoveShape[0] || v3->m_kEquip.Equ_AccBody != -1 )
        v10 = 0;
      else
        CharShape::RemoveAllSubItem(v3, 8u);
      v3->m_kEquip.Equ_Body = v5->ID;
      v3->m_kEquip.upgrade.gap0[1] ^= (((int (*)(void))_pItem->baseclass_0.vfptr[9].__vecDelDtor)() ^ v3->m_kEquip.upgrade.gap0[1]) & 0xF;
      goto LABEL_18;
    default:
      break;
    case 8u:
      CharShape::MultiSlotCosProcess(v3, v5);
      v3->m_kEquip.Equ_AccBody = v5->ID;
      CharShape::RemoveAllSubItem(v3, 7u);
      break;
    case 0xAu:
      if ( v3->m_kEquip.Equ_AccLeftHand == -1 )
        CharShape::RemoveAllSubItem(v3, 0xBu);
      else
        v10 = 0;
      v3->m_kEquip.Equ_LeftHand = v5->ID;
      v3->m_kEquip.upgrade.gap0[0] ^= (((int (*)(void))_pItem->baseclass_0.vfptr[9].__vecDelDtor)() ^ v3->m_kEquip.upgrade.gap0[0]) & 0xF;
      goto LABEL_18;
    case 0xBu:
      v3->m_kEquip.Equ_AccLeftHand = v5->ID;
      goto LABEL_27;
    case 0xCu:
      if ( v3->m_kEquip.Equ_AccRightHand == -1 )
        CharShape::RemoveAllSubItem(v3, 0xDu);
      else
        v10 = 0;
      v12 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v3->m_kEquip.Equ_RightHand);
      if ( v12 )
      {
        v13 = v12->WeaponType;
        if ( v13 == 17 || v13 == 18 )
        {
          v14 = CharShape::GetEquippedCosWeaponItemInfo(v3);
          if ( v14 )
          {
            v15 = v14->WeaponType;
            if ( v15 != 17 )
            {
              if ( v15 != 18 )
                CharShape::Link(v3, LINK_LEFTHAND, 0, 0xBu);
            }
          }
          CharShape::Link(v3, LINK_LEFTHAND, 0, 0xAu);
        }
      }
      v3->m_kEquip.Equ_RightHand = v5->ID;
      v3->m_kEquip.upgrade.gap0[0] = 16 * ((int (*)(void))_pItem->baseclass_0.vfptr[9].__vecDelDtor)() | v3->m_kEquip.upgrade.gap0[0] & 0xF;
      goto LABEL_18;
    case 0xDu:
      v3->m_kEquip.Equ_AccRightHand = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0xCu);
      v16 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v3->m_kEquip.Equ_RightHand);
      if ( v16 )
      {
        v17 = v16->WeaponType;
        if ( v17 == 17 || v17 == 18 )
        {
          CharShape::Link(v3, LINK_LEFTHAND, 0, 0xAu);
          ItemUpGrade::RemoveEffect(&v3->m_kItemUpGrade, 0xAu);
        }
      }
      ItemUpGrade::RemoveEffect(&v3->m_kItemUpGrade, 0xCu);
      break;
    case 0x13u:
      if ( v3->m_barrRemoveShape[1] || v3->m_kEquip.Equ_AccPant != -1 )
        v10 = 0;
      else
        CharShape::RemoveAllSubItem(v3, 0x14u);
      v3->m_kEquip.Equ_Pant = v5->ID;
      v3->m_kEquip.upgrade.gap0[1] = 16 * ((int (*)(void))_pItem->baseclass_0.vfptr[9].__vecDelDtor)() | v3->m_kEquip.upgrade.gap0[1] & 0xF;
      goto LABEL_18;
    case 0x14u:
      CharShape::MultiSlotCosProcess(v3, v5);
      v3->m_kEquip.Equ_AccPant = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x13u);
      break;
    case 0x15u:
      if ( v3->m_barrRemoveShape[2] || v3->m_kEquip.Equ_AccBoot != -1 )
        v10 = 0;
      else
        CharShape::RemoveAllSubItem(v3, 0x16u);
      v3->m_kEquip.Equ_Boot = v5->ID;
      v3->m_kEquip.upgrade._bf2 ^= (((int (*)(void))_pItem->baseclass_0.vfptr[9].__vecDelDtor)() ^ v3->m_kEquip.upgrade._bf2) & 0xF;
LABEL_18:
      if ( v10 )
        break;
      return 1;
    case 0x16u:
      CharShape::MultiSlotCosProcess(v3, v5);
      v3->m_kEquip.Equ_AccBoot = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x15u);
      break;
    case 9u:
      v3->m_kEquip.Equ_AccBack = v5->ID;
      CharShape::RemoveAllSubItem(v3, 9u);
      break;
    case 0x12u:
      v3->m_kEquip.Equ_AccHip = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x12u);
      break;
    case 1u:
      v18 = v3->m_bGTIBomb == 0;
      v3->m_kEquip.Equ_Head = v5->ID;
      if ( !v18 || v3->m_kEquip.Equ_AccHeadA != -1 )
        return 1;
      CharShape::RemoveAllSubItem(v3, 0x1Bu);
      CharShape::Link(v3, 0, 0, 0x1Bu);
      v19 = ItemViewEquipTypeInfoTab::GetByIVET(*(IVEType *)(pkViewInfo + 376));
      if ( v19 )
        CharShape::SetHairPartsVisible(v3, v19->HairVisibleState);
      break;
    case 0x1Bu:
      if ( v3->m_bGTIBomb )
        return 1;
      v3->m_kEquip.Equ_AccHeadA = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x1Bu);
      v20 = ItemViewEquipTypeInfoTab::GetByIVET(*(IVEType *)(pkViewInfo + 376));
      if ( v20 )
        CharShape::SetHairPartsVisible(v3, v20->HairVisibleState);
      break;
    case 0x1Au:
      v18 = v3->m_bGTIBomb == 0;
      v3->m_kEquip.Equ_Eye = v5->ID;
      if ( !v18 )
        return 1;
      CharShape::RemoveAllSubItem(v3, 0x1Au);
      break;
    case 0x18u:
      v3->m_kEquip.Equ_Mouth = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x18u);
      break;
    case 0x19u:
      v3->m_kEquip.Equ_Minimon = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x19u);
      break;
    case 0x1Cu:
      v3->m_kEquip.Equ_MiniMon_R = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x1Cu);
      break;
    case 0x11u:
      v3->m_kEquip.Equ_CosEff = v5->ID;
      CharShape::RemoveAllSubItem(v3, 0x11u);
      break;
    case 0x1Du:
      v3->m_kEquip.Equ_AccShield = v5->ID;
LABEL_27:
      CharShape::RemoveAllSubItem(v3, 0xAu);
      ItemUpGrade::RemoveEffect(&v3->m_kItemUpGrade, 0xAu);
      break;
  }
  ItemUpGrade::RemoveEffect(&v3->m_kItemUpGrade, v5->Equip);
  v11 = *(_DWORD *)(pkViewInfo + 166);
  if ( v11 != 1 )
  {
    if ( v11 != 2 )
      goto LABEL_110;
    if ( v3->m_byGender == 1 )
      v25 = *(_WORD *)(pkViewInfo + 234);
    else
      v25 = *(_WORD *)(pkViewInfo + 238);
    v26 = CharResMgr::GetCharSet(&g_kCharResMgr, v3->m_kClassID, v3->m_byGender, v25);
    if ( v26 )
    {
      CharShape::EquipSubItem(v3, v5, (ItemViewInfo *)pkViewInfo);
      v27 = (NiTexture *)CharResMgr::GetSetTexture(&g_kCharResMgr, v3->m_kClassID, v3->m_byGender, *(_WORD *)pkViewInfo);
      CharShape::Equip_SetItem(v3, v5->Equip, v26, v27);
      goto LABEL_110;
    }
    return 0;
  }
  CharShape::EquipSubItem(v3, v5, (ItemViewInfo *)pkViewInfo);
  switch ( v5->Equip )
  {
    case 1:
    case 9:
    case 0x12:
    case 0x18:
    case 0x1A:
    case 0x1B:
      v32 = v3->m_byGender;
      v30 = *(_WORD *)pkViewInfo;
      goto LABEL_76;
    case 0x11:
      v21 = 0;
      break;
    default:
      v32 = -1;
      v30 = *(_WORD *)pkViewInfo;
LABEL_76:
      v21 = CharResMgr::GetItem(&g_kCharResMgr, v30, v32);
      break;
  }
  CharShape::Equip_LinkItem(v3, v5, uiEquipPosa, v21, v5->TwoHand != 0);
  v22 = v5->WeaponType;
  if ( v22 == 17 || v22 == 18 )
  {
    if ( !v5->UpLimit )
      goto LABEL_83;
    ItemUpGrade::UpGradeItem(&v3->m_kItemUpGrade, _pItem, v3->m_apkLinkNode[12], ITEMEQUIP_RIGHTHAND);
    v33 = 10;
    v31 = v3->m_apkLinkNode[11];
    v29 = _pItem;
  }
  else
  {
    v33 = v5->Equip;
    v31 = v21;
    v29 = _pItem;
  }
  ItemUpGrade::UpGradeItem(&v3->m_kItemUpGrade, v29, v31, v33);
LABEL_83:
  v23 = v5->Equip;
  if ( v23 == 11 || v23 == 13 )
  {
    if ( (unsigned __int8)((int (*)(void))_pItem->baseclass_0.vfptr[1].__vecDelDtor)() == 26 )
      CharShape::CreateWeaponCostumeEffect(v3, v5, v21);
  }
  else
  {
    if ( v23 == 29 && (unsigned __int8)((int (*)(void))_pItem->baseclass_0.vfptr[1].__vecDelDtor)() == 37 )
      CharShape::CreateShieldCostumeEffect(v3, v5, v21);
  }
  if ( v5->Equip == 25 )
  {
    if ( v3->m_bAutoPickItem )
    {
      CharShape::SetMiniMonEffect(v3, 1);
    }
    else
    {
      if ( v3->m_hMiniMonAutoPickEff )
      {
        EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v3->m_hMiniMonAutoPickEff);
        v3->m_hMiniMonAutoPickEff = 0;
      }
      v3->m_bAutoPickItem = 0;
    }
    if ( v3->m_bAutoUseItem )
    {
      CharShape::SetMinimonAutoUseEff(v3, 1);
    }
    else
    {
      if ( v3->m_hMinimonAutoUseEff )
      {
        EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v3->m_hMinimonAutoUseEff);
        v3->m_hMinimonAutoUseEff = 0;
      }
      v3->m_bAutoUseItem = 0;
      if ( GameFrameWork::ms_bGameFrameStart )
      {
        v24 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v24 )
          GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v24, BIL_ITEM_12);
      }
    }
  }
LABEL_110:
  if ( v3->m_kEquip.Equ_AccBack != -1 )
    CharShape::SetVisibleSubParts(v3, LINK_BACK, 0);
  if ( v3->m_kEquip.Equ_AccHip != -1 )
    CharShape::SetVisibleSubParts(v3, LINK_TAIL, 0);
  if ( v3->m_bShowWeaponEffect )
  {
    CharShape::ShowItemUpgradeEffect(v3, 0);
    CharShape::ShowItemUpgradeEffect(v3, 1);
  }
  v28 = (NiAVObject *)v3->m_pkRootNode;
  if ( v28 )
  {
    NiAVObject::UpdateEffects(v28);
    NiAVObject::UpdateProperties(&v3->m_pkRootNode->baseclass_0);
  }
  return 1;
}
// 662690: could not find valid save-restore pair for ebx
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;
// A987C7: using guessed type bool GameFrameWork__ms_bGameFrameStart;

//----- (00662EF0) --------------------------------------------------------
bool __thiscall CharShape::Equip(CharShape *this, ItemInfo *pkItemInfo)
{
  CharShape *v2; // edi@1
  bool result; // al@2
  Item *v4; // esi@3
  bool v5; // bl@3
  char kStruct[2]; // [sp+8h] [bp-6Ch]@3
  unsigned int v7; // [sp+70h] [bp-4h]@1
  int v8; // [sp+74h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = this;
  if ( pkItemInfo )
  {
    memset(kStruct, 0, 0x67u);
    *(_WORD *)kStruct = pkItemInfo->ID;
    v4 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
    v5 = CharShape::Equip(v2, v4);
    if ( v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    result = v5;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00662F70) --------------------------------------------------------
void __thiscall CharShape::ReEquipWeaponCostume(CharShape *this)
{
  CharShape *v1; // esi@1
  unsigned __int16 v2; // ax@1
  unsigned __int16 v3; // di@5
  Item *v4; // eax@6
  unsigned int v5; // [sp-4h] [bp-78h]@2
  char kStruct[2]; // [sp+8h] [bp-6Ch]@6
  unsigned int v7; // [sp+70h] [bp-4h]@1
  int v8; // [sp+74h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  v2 = this->m_kEquip.Equ_AccLeftHand;
  if ( v2 == -1 )
  {
    v2 = this->m_kEquip.Equ_AccRightHand;
    if ( v2 == -1 )
      return;
    v5 = 13;
  }
  else
  {
    v5 = 11;
  }
  v3 = v2;
  CharShape::UnEquip(this, v5);
  if ( v3 != -1 )
  {
    memset(kStruct, 0, 0x67u);
    *(_WORD *)kStruct = v3;
    v4 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
    if ( v4 )
      CharShape::Equip(v1, v4);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00663000) --------------------------------------------------------
bool __thiscall CharShape::Equip(CharShape *this, unsigned __int16 kItemID)
{
  int v2; // esi@1
  CharShape *v3; // ebx@1
  bool result; // al@2
  int v5; // ecx@4

  v2 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v3 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          kItemID)
    && kItemID <= *(_WORD *)(v2 + 200)
    && (v5 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v5 + 4 * kItemID)) )
    result = CharShape::Equip(v3, *(ItemInfo **)(v5 + 4 * kItemID));
  else
    result = CharShape::Equip(v3, 0);
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00663060) --------------------------------------------------------
bool __thiscall CharShape::UnEquip(CharShape *this, unsigned int uiEquipPos)
{
  CharShape *v2; // esi@1
  Effect *v3; // eax@1
  unsigned int v4; // ecx@1
  Effect *v5; // ecx@1
  char v6; // bl@5
  ItemViewInfo *v7; // eax@9
  char v8; // dl@9
  bool v9; // zf@11
  char v10; // al@12
  WeaponTypeEnum v11; // eax@16
  ItemInfo *v12; // eax@18
  ItemInfo *v13; // ebx@21
  char v14; // cl@21
  WeaponTypeEnum v15; // ebx@23
  ItemViewInfo *v16; // eax@29
  char v17; // cl@29
  ItemViewInfo *v18; // eax@34
  char v19; // dl@34
  CharShape *v20; // ecx@49
  CharShape *v21; // ecx@51
  bool v22; // al@51
  char v23; // cl@53
  bool v24; // zf@60
  unsigned __int16 v25; // ax@61
  unsigned __int16 v27; // [sp-8h] [bp-1Ch]@12
  char v28; // [sp-4h] [bp-18h]@12
  unsigned int pkInfo; // [sp+Ch] [bp-8h]@1
  ItemInfo *pkInfoa; // [sp+Ch] [bp-8h]@13
  Effect *v31; // [sp+10h] [bp-4h]@1

  v2 = this;
  CharShape::RemoveAllSubItem(this, uiEquipPos);
  v3 = (Effect *)v2->m_kItemUpGrade.m_arrLinkData[uiEquipPos].dwEffectIndex[0];
  v4 = (unsigned int)&v2->m_kItemUpGrade.m_arrLinkData[uiEquipPos].dwEffectIndex[1];
  pkInfo = v4;
  v5 = *(Effect **)v4;
  v31 = v5;
  if ( v3 )
  {
    EffectMgr::RemoveEffect(&g_kEffectMgr, v3);
    v5 = v31;
  }
  if ( v5 )
    EffectMgr::RemoveEffect(&g_kEffectMgr, v5);
  *(_DWORD *)pkInfo = 0;
  v2->m_kItemUpGrade.m_arrLinkData[uiEquipPos].dwEffectIndex[0] = 0;
  v6 = 0;
  switch ( uiEquipPos )
  {
    case 7u:
      v9 = v2->m_barrRemoveShape[0] == 0;
      v2->m_kEquip.Equ_Body = -1;
      if ( v9 )
      {
        if ( -1 == v2->m_kEquip.Equ_AccBody )
          CharShape::ResetBody(v2);
      }
      goto LABEL_57;
    case 8u:
      v7 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v2->m_kEquip.Equ_AccBody, 1);
      CharShape::MultiSlotCosUnEquip(v2, v7);
      v8 = v2->m_kEquip.upgrade.gap0[1] & 0xF;
      v2->m_kEquip.Equ_AccBody = -1;
      if ( !CharShape::Equip(v2, v2->m_kEquip.Equ_Body, v8) )
        CharShape::ResetBody(v2);
      goto LABEL_57;
    case 0xAu:
      v9 = -1 == v2->m_kEquip.Equ_AccLeftHand;
      v2->m_kEquip.Equ_LeftHand = -1;
      goto LABEL_55;
    case 0xBu:
      v10 = v2->m_kEquip.upgrade.gap0[0] & 0xF;
      v2->m_kEquip.Equ_AccLeftHand = -1;
      v28 = v10;
      v27 = v2->m_kEquip.Equ_LeftHand;
      goto LABEL_54;
    case 0xCu:
      pkInfoa = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v2->m_kEquip.Equ_RightHand);
      v2->m_kEquip.Equ_RightHand = -1;
      if ( -1 == v2->m_kEquip.Equ_AccRightHand )
        CharShape::Link(v2, LINK_RIGHTHAND, 0, 0xCu);
      v6 = 1;
      if ( pkInfoa )
      {
        v11 = pkInfoa->WeaponType;
        if ( v11 == 18 || v11 == 17 )
        {
          v12 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v2->m_kEquip.Equ_AccRightHand);
          if ( !v12 || v12->Class != 26 )
          {
            v2->m_kEquip.Equ_LeftHand = -1;
            CharShape::Link(v2, LINK_LEFTHAND, 0, 0xAu);
            ItemUpGrade::SetEffectHandle(&v2->m_kItemUpGrade, 0xAu, 0, 0);
          }
        }
      }
      break;
    case 0xDu:
      v13 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v2->m_kEquip.Equ_AccRightHand);
      v14 = v2->m_kEquip.upgrade.gap0[0] >> 4;
      v2->m_kEquip.Equ_AccRightHand = -1;
      if ( !CharShape::Equip(v2, v2->m_kEquip.Equ_RightHand, v14) )
      {
        CharShape::Link(v2, LINK_RIGHTHAND, 0, 0xCu);
        if ( v13 )
        {
          v15 = v13->WeaponType;
          if ( v15 == 18 || v15 == 17 )
          {
            CharShape::Link(v2, LINK_LEFTHAND, 0, 0xAu);
            ItemUpGrade::SetEffectHandle(&v2->m_kItemUpGrade, 0xAu, 0, 0);
          }
        }
      }
      goto LABEL_57;
    case 0x13u:
      v9 = v2->m_barrRemoveShape[1] == 0;
      v2->m_kEquip.Equ_Pant = -1;
      if ( v9 && -1 == v2->m_kEquip.Equ_AccPant )
        CharShape::ResetLeg(v2);
      goto LABEL_57;
    case 0x14u:
      v16 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v2->m_kEquip.Equ_AccPant, 1);
      CharShape::MultiSlotCosUnEquip(v2, v16);
      v17 = v2->m_kEquip.upgrade.gap0[1] >> 4;
      v2->m_kEquip.Equ_AccPant = -1;
      if ( !CharShape::Equip(v2, v2->m_kEquip.Equ_Pant, v17) )
        CharShape::ResetLeg(v2);
      goto LABEL_57;
    case 0x15u:
      v9 = v2->m_barrRemoveShape[2] == 0;
      v2->m_kEquip.Equ_Boot = -1;
      if ( v9 && -1 == v2->m_kEquip.Equ_AccBoot )
        CharShape::ResetShoes(v2);
      goto LABEL_57;
    case 0x16u:
      v18 = IIDTableBase<ItemViewInfo_ItemViewInfoTab_unsigned_short>::GetByID(v2->m_kEquip.Equ_AccBoot, 1);
      CharShape::MultiSlotCosUnEquip(v2, v18);
      v19 = v2->m_kEquip.upgrade._bf2 & 0xF;
      v2->m_kEquip.Equ_AccBoot = -1;
      if ( !CharShape::Equip(v2, v2->m_kEquip.Equ_Boot, v19) )
        CharShape::ResetShoes(v2);
      goto LABEL_57;
    case 9u:
      v2->m_kEquip.Equ_AccBack = -1;
      v6 = CharShape::Link(v2, LINK_BACK, 0, 9u);
      CharShape::SetVisibleSubParts(v2, LINK_BACK, 1);
      break;
    case 0x12u:
      v2->m_kEquip.Equ_AccHip = -1;
      v6 = CharShape::Link(v2, LINK_TAIL, 0, 0x12u);
      CharShape::SetVisibleSubParts(v2, LINK_TAIL, 1);
      break;
    case 0x1Au:
      v2->m_kEquip.Equ_Eye = -1;
      v6 = CharShape::Link(v2, LINK_EYE, 0, 0x1Au);
      break;
    case 0x18u:
      v2->m_kEquip.Equ_Mouth = -1;
      v6 = CharShape::Link(v2, LINK_MOUTH, 0, 0x18u);
      break;
    case 0x19u:
      v2->m_kEquip.Equ_Minimon = -1;
      v6 = CharShape::Link(v2, LINK_CHEST, 0, 0x19u);
      if ( v2->m_hMiniMonAutoPickEff )
      {
        EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v2->m_hMiniMonAutoPickEff);
        v2->m_hMiniMonAutoPickEff = 0;
        CharShape::RemoveMinimonEff(v2, 0x19u, 0);
      }
      if ( v2->m_hMinimonAutoUseEff )
      {
        EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v2->m_hMinimonAutoUseEff);
        v2->m_hMinimonAutoUseEff = 0;
        CharShape::RemoveMinimonEff(v2, 0x19u, 0);
      }
      break;
    case 0x1Cu:
      v2->m_kEquip.Equ_MiniMon_R = -1;
      v6 = CharShape::Link(v2, LINK_CHEST_R, 0, 0x1Cu);
      if ( v2->m_hMiniMonAutoPickEff )
      {
        EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v2->m_hMiniMonAutoPickEff);
        v2->m_hMiniMonAutoPickEff = 0;
        CharShape::RemoveMinimonEff(v2, 0x1Cu, 0);
      }
      if ( v2->m_hMinimonAutoUseEff )
      {
        EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v2->m_hMinimonAutoUseEff);
        v2->m_hMinimonAutoUseEff = 0;
        CharShape::RemoveMinimonEff(v2, 0x1Cu, 0);
      }
      break;
    case 1u:
      v2->m_kEquip.Equ_Head = -1;
      if ( v2->m_kEquip.Equ_AccHeadA == -1 )
      {
        CharShape::SetHairPartsVisible(v2, 1);
        v6 = CharShape::Link(v20, 0, 0, 1u);
      }
      CharShape::SetVisibleSubParts(v2, 0, 1);
      break;
    case 0x1Bu:
      CharShape::SetHairPartsVisible(v2, 1);
      v22 = CharShape::Link(v21, 0, 0, 0x1Bu);
      v2->m_kEquip.Equ_AccHeadA = -1;
      v6 = v22;
      CharShape::SetVisibleSubParts(v2, 0, 1);
      CharShape::Equip(v2, v2->m_kEquip.Equ_Head);
      break;
    case 0x11u:
      v2->m_kEquip.Equ_CosEff = -1;
      v6 = CharShape::Link(v2, LINK_WORLD_COS, 0, 0x11u);
      break;
    case 0x1Du:
      IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v2->m_kEquip.Equ_AccShield);
      v23 = v2->m_kEquip.upgrade.gap0[0] & 0xF;
      v2->m_kEquip.Equ_AccShield = -1;
      v28 = v23;
      v27 = v2->m_kEquip.Equ_LeftHand;
LABEL_54:
      v9 = CharShape::Equip(v2, v27, v28) == 0;
LABEL_55:
      if ( v9 )
        CharShape::Link(v2, LINK_LEFTHAND, 0, 0xAu);
LABEL_57:
      v6 = 1;
      break;
    default:
      break;
  }
  if ( uiEquipPos != 10 )
  {
    if ( uiEquipPos != 12 )
    {
      v24 = uiEquipPos == 29;
      goto LABEL_63;
    }
LABEL_65:
    CharShape::ReEquipWeaponCostume(v2);
    return v6;
  }
  v25 = v2->m_kEquip.Equ_AccShield;
  if ( v25 == -1 )
    goto LABEL_65;
  v24 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v25)->Equip == 29;
LABEL_63:
  if ( v24 )
  {
    CharShape::ReEquipShieldCostume(v2);
    return v6;
  }
  return v6;
}

//----- (00663710) --------------------------------------------------------
void __thiscall CharShape::ReEquipShieldCostume(CharShape *this)
{
  CharShape *v1; // esi@1
  unsigned __int16 v2; // bx@2
  Effect *v3; // edi@2
  char v4; // dl@6
  Item *v5; // eax@9
  char kStruct[2]; // [sp+4h] [bp-6Ch]@9
  unsigned int v7; // [sp+6Ch] [bp-4h]@1
  int v8; // [sp+70h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  if ( this->m_kEquip.Equ_AccShield != -1 )
  {
    v2 = this->m_kEquip.Equ_AccShield;
    CharShape::RemoveAllSubItem(this, 0x1Du);
    v3 = (Effect *)v1->m_kItemUpGrade.m_arrLinkData[29].dwEffectIndex[1];
    if ( v1->m_kItemUpGrade.m_arrLinkData[29].dwEffectIndex[0] )
      EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v1->m_kItemUpGrade.m_arrLinkData[29].dwEffectIndex[0]);
    if ( v3 )
      EffectMgr::RemoveEffect(&g_kEffectMgr, v3);
    v1->m_kItemUpGrade.m_arrLinkData[29].dwEffectIndex[0] = 0;
    v1->m_kItemUpGrade.m_arrLinkData[29].dwEffectIndex[1] = 0;
    IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v1->m_kEquip.Equ_AccShield);
    v4 = v1->m_kEquip.upgrade.gap0[0] & 0xF;
    v1->m_kEquip.Equ_AccShield = -1;
    if ( !CharShape::Equip(v1, v1->m_kEquip.Equ_LeftHand, v4) )
      CharShape::Link(v1, LINK_LEFTHAND, 0, 0xAu);
    CharShape::ReEquipShieldCostume(v1);
    if ( v2 != -1 )
    {
      memset(kStruct, 0, 0x67u);
      *(_WORD *)kStruct = v2;
      v5 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
      if ( v5 )
        CharShape::Equip(v1, v5);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00663820) --------------------------------------------------------
void __thiscall CharShape::RestoreHatAcc(CharShape *this)
{
  CharShape *v1; // ebx@1
  int v2; // eax@1
  int v3; // esi@2
  int v4; // edi@2
  ItemInfo *v5; // eax@3
  int v6; // edx@6
  int v7; // esi@11
  int v8; // edi@11
  int v9; // edx@14

  v1 = this;
  v2 = this->m_kEquip.Equ_Head;
  if ( (_WORD)v2 != -1 )
  {
    v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v4 = this->m_kEquip.Equ_Head;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v2) )
    {
      if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
      {
        v6 = *(_DWORD *)(v3 + 196);
        if ( *(_DWORD *)(v6 + 4 * v4) )
          v5 = *(ItemInfo **)(v6 + 4 * v4);
        else
          v5 = 0;
      }
      else
      {
        v5 = 0;
      }
    }
    else
    {
      v5 = 0;
    }
    CharShape::Equip(v1, v5);
  }
  if ( v1->m_kEquip.Equ_Eye != -1 )
  {
    v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v8 = v1->m_kEquip.Equ_Eye;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v1->m_kEquip.Equ_Eye)
      && (unsigned __int16)v8 <= *(_WORD *)(v7 + 200)
      && (v9 = *(_DWORD *)(v7 + 196), *(_DWORD *)(v9 + 4 * v8)) )
      CharShape::Equip(v1, *(ItemInfo **)(v9 + 4 * v8));
    else
      CharShape::Equip(v1, 0);
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006638E0) --------------------------------------------------------
void __thiscall ItemUpGrade::RemoveAll(ItemUpGrade *this)
{
  ItemUpGrade *v1; // edi@1
  signed int v2; // esi@1
  Effect *v3; // ebx@2

  v1 = this;
  v2 = 0;
  do
  {
    v3 = (Effect *)v1->m_arrLinkData[v2].dwEffectIndex[1];
    if ( v1->m_arrLinkData[v2].dwEffectIndex[0] )
      EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)v1->m_arrLinkData[v2].dwEffectIndex[0]);
    if ( v3 )
      EffectMgr::RemoveEffect(&g_kEffectMgr, v3);
    v1->m_arrLinkData[v2].dwEffectIndex[0] = 0;
    v1->m_arrLinkData[v2++].dwEffectIndex[1] = 0;
  }
  while ( v2 < 30 );
}

//----- (00663940) --------------------------------------------------------
bool __cdecl Math3D::FrontVectToRot(NiPoint3 *kFrontVect, NiMatrix3 *kRot)
{
  float v2; // edx@1
  float v3; // eax@1
  bool v4; // al@2
  NiPoint3 *v5; // eax@4
  float v6; // ecx@4
  float v7; // edx@4
  NiPoint3 *v8; // eax@4
  float v9; // ecx@4
  float v10; // edx@4
  NiPoint3 result; // [sp+0h] [bp-30h]@4
  NiPoint3 kUp; // [sp+Ch] [bp-24h]@4
  NiPoint3 kRight; // [sp+18h] [bp-18h]@4
  NiPoint3 kFront; // [sp+24h] [bp-Ch]@1
  float kFrontVecta; // [sp+38h] [bp+8h]@1
  float kFrontVectb; // [sp+38h] [bp+8h]@1
  float kFrontVectc; // [sp+38h] [bp+8h]@3
  float kFrontVectd; // [sp+38h] [bp+8h]@3

  v2 = kFrontVect->y;
  v3 = kFrontVect->z;
  kFront.x = kFrontVect->x;
  kFront.y = v2;
  kFront.z = v3;
  NiPoint3::Unitize(&kFront);
  kFrontVecta = kFront.x * kFront.x + kFront.y * kFront.y + kFront.z * kFront.z;
  kFrontVectb = sqrt(kFrontVecta);
  if ( kFrontVectb < 0.000001
    || (kFrontVectc = World::ms_kUpDir.x * kFront.x + World::ms_kUpDir.y * kFront.y + World::ms_kUpDir.z * kFront.z,
        kFrontVectd = fabs(kFrontVectc),
        1.0 - kFrontVectd < 0.0000009999999974752427) )
  {
    v4 = 0;
  }
  else
  {
    v5 = NiPoint3::UnitCross(&kFront, &kUp, &World::ms_kUpDir);
    v6 = v5->y;
    kRight.x = v5->x;
    v7 = v5->z;
    kRight.y = v6;
    kRight.z = v7;
    v8 = NiPoint3::UnitCross(&kRight, &result, &kFront);
    v9 = v8->y;
    kUp.x = v8->x;
    v10 = v8->z;
    kRot->m_pEntry[0][0] = kRight.x;
    kUp.y = v9;
    kUp.z = v10;
    kRot->m_pEntry[1][0] = kRight.y;
    kRot->m_pEntry[2][0] = kRight.z;
    kRot->m_pEntry[0][1] = kFront.x;
    kRot->m_pEntry[1][1] = kFront.y;
    kRot->m_pEntry[2][1] = kFront.z;
    kRot->m_pEntry[0][2] = kUp.x;
    kRot->m_pEntry[1][2] = kUp.y;
    kRot->m_pEntry[2][2] = kUp.z;
    v4 = 1;
  }
  return v4;
}

//----- (00663A60) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>(NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
}
// 9C43E8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);

//----- (00663A70) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C43E8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);

//----- (00663AA0) --------------------------------------------------------
void __thiscall FindCullUpdateNode::_FindCullUpdateNode(FindCDNode2 *this)
{
  this->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);

//----- (00663AB0) --------------------------------------------------------
void __thiscall NiSkinInstance::NiSkinInstance(NiSkinInstance *this, NiSkinData *pkSkinData, NiAVObject *pkRootParent, NiAVObject **ppkBones)
{
  NiSkinInstance *v4; // esi@1

  v4 = this;
  NiObject::NiObject(&this->baseclass_0);
  v4->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiSkinInstance::_vftable_;
  v4->m_spSkinData.m_pObject = pkSkinData;
  if ( pkSkinData )
    InterlockedIncrement((volatile LONG *)&pkSkinData->baseclass_0.baseclass_0.m_uiRefCount);
  v4->m_spSkinPartition.m_pObject = 0;
  v4->m_uiNumMatrices = 0;
  v4->m_pvBoneMatrices = 0;
  v4->m_uiNumRegisters = 0;
  v4->m_pvSkinToWorldWorldToSkinMatrix = 0;
  v4->m_pkRootParent = pkRootParent;
  v4->m_ppkBones = ppkBones;
  v4->m_uiFrameID = -1;
}
// 9C4424: using guessed type int (__thiscall *NiSkinInstance___vftable_)(void *p, char);

//----- (00663B10) --------------------------------------------------------
NiRTTI *__thiscall NiSkinInstance::GetRTTI(NiSkinInstance *this)
{
  return &NiSkinInstance::m_RTTI;
}

//----- (00663B20) --------------------------------------------------------
void *__thiscall NiSkinInstance::_vector_deleting_destructor_(NiSkinInstance *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NiSkinInstance::_NiSkinInstance(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00663B50) --------------------------------------------------------
unsigned int __thiscall NiBoneLODController::GetSetAt(NiBoneLODController *this, int nInLodLevel, NiTriBasedGeom *pkInGeom, NiSkinInstance **pkOutSkinInst)
{
  NiTSet<NiBoneLODController::SkinInfo *> *v4; // ecx@1
  unsigned int v5; // edx@1
  unsigned int result; // eax@1
  NiBoneLODController::SkinInfo **v7; // ecx@2

  v4 = this->m_kSkinArray.m_pBase[nInLodLevel];
  v5 = v4->m_uiUsed;
  result = 0;
  if ( v5 )
  {
    v7 = v4->m_pBase;
    while ( (*v7)->m_pkSkinGeom != pkInGeom )
    {
      ++result;
      ++v7;
      if ( result >= v5 )
        goto LABEL_5;
    }
    *pkOutSkinInst = (*v7)->m_spSkinInst.m_pObject;
  }
  else
  {
LABEL_5:
    *pkOutSkinInst = 0;
    result = 0;
  }
  return result;
}

//----- (00663BA0) --------------------------------------------------------
bool __thiscall NiBoneLODController::SetAt(NiBoneLODController *this, int nLodLevel, int nIndex, NiTriBasedGeom *pkGeom, NiSkinInstance *pkSkinInst)
{
  NiTSet<NiBoneLODController::SkinInfo *> *v5; // eax@1
  bool result; // al@2
  NiBoneLODController::SkinInfo *v7; // edi@3
  NiSkinInstance *v8; // esi@5

  v5 = this->m_kSkinArray.m_pBase[nLodLevel];
  if ( v5 )
  {
    v7 = v5->m_pBase[nIndex];
    if ( v7 )
    {
      v7->m_pkSkinGeom = pkGeom;
      v8 = v7->m_spSkinInst.m_pObject;
      if ( v8 != pkSkinInst )
      {
        if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.m_uiRefCount) && v8 )
          v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
        v7->m_spSkinInst.m_pObject = pkSkinInst;
        if ( pkSkinInst )
          InterlockedIncrement((volatile LONG *)&pkSkinInst->baseclass_0.baseclass_0.m_uiRefCount);
      }
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00663C20) --------------------------------------------------------
void __thiscall NiBoneLODController::ReplaceSkinSet(NiBoneLODController *this, NiTriBasedGeom *pkOldSkin, NiTriBasedGeom *pkNewSkin)
{
  unsigned int v3; // eax@1
  NiTriBasedGeom **v4; // edx@2
  bool v5; // zf@2
  int v6; // edx@2

  v3 = 0;
  if ( this->m_kSkinSet.m_uiUsed )
  {
    do
    {
      v4 = this->m_kSkinSet.m_pBase;
      v5 = v4[v3] == pkOldSkin;
      v6 = (int)&v4[v3];
      if ( v5 )
      {
        if ( v3 < this->m_kSkinSet.m_uiUsed )
          *(_DWORD *)v6 = pkNewSkin;
      }
      ++v3;
    }
    while ( v3 < this->m_kSkinSet.m_uiUsed );
  }
}

//----- (00663C50) --------------------------------------------------------
void __thiscall NiGeometry::SetSkinInstance(NiGeometry *this, NiSkinInstance *pSkinInstance)
{
  NiGeometry *v2; // ebx@1
  NiSkinInstance *v3; // esi@1

  v2 = this;
  v3 = this->m_spSkinInstance.m_pObject;
  if ( v3 != pSkinInstance )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spSkinInstance.m_pObject = pSkinInstance;
    if ( pSkinInstance )
      InterlockedIncrement((volatile LONG *)&pSkinInstance->baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (00663CA0) --------------------------------------------------------
void __thiscall AfterImgEff::SetActor(AfterImgEff *this, NiActorManager *_pActor)
{
  AfterImgEff *v2; // ebx@1
  NiActorManager *v3; // esi@1

  v2 = this;
  v3 = this->m_spActor.m_pObject;
  if ( v3 != _pActor )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spActor.m_pObject = _pActor;
    if ( _pActor )
      InterlockedIncrement((volatile LONG *)&_pActor->baseclass_0.m_uiRefCount);
  }
}

//----- (00663CF0) --------------------------------------------------------
ItemInfo *__thiscall CharShape::GetEquippedCosWeaponItemInfo(CharShape *this)
{
  int v1; // esi@1
  int v2; // edi@1
  ItemInfo *result; // eax@2
  int v4; // ecx@4

  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v2 = this->m_kEquip.Equ_AccRightHand;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          this->m_kEquip.Equ_AccRightHand)
    && (unsigned __int16)v2 <= *(_WORD *)(v1 + 200)
    && (v4 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v4 + 4 * v2)) )
    result = *(ItemInfo **)(v4 + 4 * v2);
  else
    result = 0;
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00663D40) --------------------------------------------------------
bool __thiscall CharShape::LinkFace(CharShape *this, NiNode *pkNode)
{
  CharShape *v2; // edi@1
  NiNode *v3; // esi@2
  bool result; // al@9

  v2 = this;
  if ( CharShape::Link(this, LINK_FACE, pkNode, 0) == 1 )
  {
    v3 = v2->m_spFaceNode.m_pObject;
    if ( v3 != pkNode )
    {
      if ( v3
        && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      v2->m_spFaceNode.m_pObject = pkNode;
      if ( pkNode )
        InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00663DB0) --------------------------------------------------------
void __thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>(NiTPointerList<NiGeometry *> *this)
{
  NiTPointerList<NiGeometry *> *v1; // edi@1
  NiTListItem<NiGeometry *> *v2; // esi@1
  NiTListItem<NiGeometry *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
}
// 9C43E8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);
// 9C4414: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);

//----- (00663E30) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_scalar_deleting_destructor_(NiTPointerList<NiGeometry *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiGeometry *> *v3; // esi@1
  NiTListItem<NiGeometry *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C43E8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);
// 9C4414: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);

//----- (00663EC0) --------------------------------------------------------
void __thiscall PgTList<NiGeometry__>::_PgTList<NiGeometry__>(PgTList<NiGeometry *> *this)
{
  PgTList<NiGeometry *> *v1; // edi@1
  NiTListItem<NiGeometry *> *v2; // esi@1
  NiTListItem<NiGeometry *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&PgTList<NiGeometry__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
}
// 9C43E8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);
// 9C4474: using guessed type int (__thiscall *PgTList_NiGeometry _____vftable_)(void *p, char);

//----- (00663F40) --------------------------------------------------------
ItemViewEquipTypeInfo *__cdecl ItemViewEquipTypeInfoTab::GetByIVET(IVEType eType)
{
  return (ItemViewEquipTypeInfo *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab>::ms_pkTable
                                                  + 4),
                                    eType);
}
// A97DFC: using guessed type int ITableBase_ItemViewEquipTypeInfo_ItemViewEquipTypeInfoTab___ms_pkTable;

//----- (00663F60) --------------------------------------------------------
UpEffectData *__cdecl UpEffectTab::GetObjByID(unsigned __int16 ID)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  UpEffectData *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<UpEffectData_UpEffectTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( *(_WORD *)CDataReader::GetRecord((CDataReader *)(ITableBase<UpEffectData_UpEffectTab>::ms_pkTable + 4), v3) != ID )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (UpEffectData *)CDataReader::GetRecord(
                               (CDataReader *)(ITableBase<UpEffectData_UpEffectTab>::ms_pkTable + 4),
                               v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97E1C: using guessed type int ITableBase_UpEffectData_UpEffectTab___ms_pkTable;

//----- (00663FC0) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v29; // ecx@52
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0x3FFFFFFE )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (006641F0) --------------------------------------------------------
void *__thiscall PgTList<NiGeometry__>::_vector_deleting_destructor_(PgTList<NiGeometry *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiGeometry *> *v3; // esi@1
  NiTListItem<NiGeometry *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&PgTList<NiGeometry__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiGeometry__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C43E8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiGeometry _____vftable_)(void *p, char);
// 9C4474: using guessed type int (__thiscall *PgTList_NiGeometry _____vftable_)(void *p, char);

//----- (00664280) --------------------------------------------------------
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits< *__thiscall std::_Tree<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>::_Eqrange(std::_Tree<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits< *result, ItemEquipEnum *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v5; // ebx@1
  ItemEquipEnum v6; // edi@2
  ItemEquipEnum v7; // esi@3
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v8; // eax@11
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits< *v9; // eax@18

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  if ( !v4->_Isnil )
  {
    v6 = *_Keyval;
    do
    {
      v7 = v4->_Myval.baseclass_0.first;
      if ( v7 >= v6 )
      {
        if ( v3->_Isnil && v6 < v7 )
          v3 = v4;
        v5 = v4;
        v4 = v4->_Left;
      }
      else
      {
        v4 = v4->_Right;
      }
    }
    while ( !v4->_Isnil );
  }
  if ( v3->_Isnil )
    v8 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  else
    v8 = v3->_Left;
  while ( !v8->_Isnil )
  {
    if ( *_Keyval >= v8->_Myval.baseclass_0.first )
    {
      v8 = v8->_Right;
    }
    else
    {
      v3 = v8;
      v8 = v8->_Left;
    }
  }
  v9 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)&result->baseclass_0.second.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  return v9;
}

//----- (00664310) --------------------------------------------------------
void __thiscall std::list<NiAVObject___std::allocator<NiAVObject__>>::pop_front(std::list<NiAVObject *,std::allocator<NiAVObject *> > *this)
{
  std::list<NiAVObject *,std::allocator<NiAVObject *> > *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1

  v1 = this;
  v2 = *(void ***)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  if ( *v2 != v2 )
  {
    **((_DWORD **)v3 + 1) = *(_DWORD *)v3;
    *(_DWORD *)(*(_DWORD *)v3 + 4) = *((_DWORD *)v3 + 1);
    operator delete(v3);
    --v1->baseclass_0.baseclass_0._Mysize;
  }
}

//----- (00664340) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindHairNode::ProcessData(FindHairNode *this, NiAVObject *_pkObject, void *_pData)
{
  void *v3; // esi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v4; // edi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v5; // eax@2
  int v6; // ecx@2
  Ns_TourScene::TS_RESULT result; // eax@4

  if ( NsUtil::MatchTag(&_pkObject->baseclass_0, "#Hair") )
  {
    v3 = _pData;
    v4 = *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData;
    v5 = std::_List_val<char___std::allocator<char__>>::_Buynode(
           (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)_pData + 4),
           (ItemViewDummy *const *)&_pkObject);
    v6 = *((_DWORD *)v3 + 1);
    if ( (unsigned int)(1073741822 - v6) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v3 + 1) = v6 + 1;
    v4->_Prev = v5;
    v5->_Prev->_Next = v5;
    result = -1;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006643B0) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindFaceNode::ProcessData(FindFaceNode *this, NiAVObject *_pkObject, void *_pData)
{
  void *v3; // esi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v4; // edi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v5; // eax@2
  int v6; // ecx@2
  Ns_TourScene::TS_RESULT result; // eax@4

  if ( NsUtil::MatchTag(&_pkObject->baseclass_0, "#Face") )
  {
    v3 = _pData;
    v4 = *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData;
    v5 = std::_List_val<char___std::allocator<char__>>::_Buynode(
           (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)_pData + 4),
           (ItemViewDummy *const *)&_pkObject);
    v6 = *((_DWORD *)v3 + 1);
    if ( (unsigned int)(1073741822 - v6) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v3 + 1) = v6 + 1;
    v4->_Prev = v5;
    v5->_Prev->_Next = v5;
    result = -1;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00664420) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindGeometry::ProcessData(FindGeometry *this, NiAVObject *_pkObject, void *_pData)
{
  int v3; // eax@2
  Ns_TourScene::TS_RESULT result; // eax@5
  void *v5; // esi@6
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v6; // edi@6
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v7; // eax@6
  int v8; // ecx@6

  if ( _pkObject && (v3 = ((int (*)(void))_pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)()) != 0 )
  {
    while ( (NiRTTI *)v3 != &NiGeometry::m_RTTI )
    {
      v3 = *(_DWORD *)(v3 + 4);
      if ( !v3 )
        goto LABEL_5;
    }
    v5 = _pData;
    v6 = *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData;
    v7 = std::_List_val<char___std::allocator<char__>>::_Buynode(
           (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)_pData + 4),
           (ItemViewDummy *const *)&_pkObject);
    v8 = *((_DWORD *)v5 + 1);
    if ( (unsigned int)(1073741822 - v8) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v5 + 1) = v8 + 1;
    v6->_Prev = v7;
    v7->_Prev->_Next = v7;
    result = -1;
  }
  else
  {
LABEL_5:
    result = 1;
  }
  return result;
}

//----- (006644A0) --------------------------------------------------------
void __thiscall std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *this, ABSTATEINDEX *_Val)
{
  std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *v2; // esi@1
  int v3; // edi@1
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v4; // eax@1
  unsigned int v5; // ecx@1

  v2 = this;
  v3 = *(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = std::_List_val<char___std::allocator<char__>>::_Buynode(
         (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)this,
         *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
         *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)&this->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                     + 4),
         (ItemViewDummy *const *)_Val);
  v5 = v2->baseclass_0.baseclass_0._Mysize;
  if ( 1073741822 - v5 < 1 )
    std::_Xlength_error("list<T> too long");
  v2->baseclass_0.baseclass_0._Mysize = v5 + 1;
  *(_DWORD *)(v3 + 4) = v4;
  v4->_Prev->_Next = v4;
}

//----- (006644F0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>::insert<std::pair<enum__ItemEquipEnum_const_NiNode__>>(std::_Tree<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,bool> *result, std::pair<enum ItemEquipEnum const ,NiNode *> *_Val)
{
  std::_Tree<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v5; // edx@1
  std::_Tree_nod<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> >::_Node *v6; // ecx@1
  bool v7; // zf@1
  const int v8; // edi@2
  int v9; // ecx@7
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >,bool> *v10; // eax@7

  v3 = this;
  v4 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
         (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
         (std::pair<int const ,int> *)_Val);
  v5 = v3->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = v6->_Isnil == 0;
  LOBYTE(_Val) = 1;
  if ( v7 )
  {
    v8 = v4->_Myval.baseclass_0.first;
    do
    {
      v5 = v6;
      LOBYTE(_Val) = v8 < v6->_Myval.baseclass_0.first;
      if ( (_BYTE)_Val )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                     (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v3,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Val,
                     (bool)_Val,
                     (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5,
                     v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v10 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  result->baseclass_0.second = 1;
  return v10;
}

//----- (00664560) --------------------------------------------------------
std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *__cdecl ItemViewDummyTab::GetListByInxName(std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *result, const char *InxName)
{
  void *v2; // eax@4
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-3Ch]@6
  char *_What; // [sp+Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@1
  unsigned int v7; // [sp+2Ch] [bp-10h]@1
  int v8; // [sp+38h] [bp-4h]@1
  int v9; // [sp+3Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  _What = 0;
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, InxName, strlen(InxName));
  v8 = 0;
  std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(
    &ItemViewDummyTab::m_DummyMap,
    (std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *)&_What,
    &this);
  v8 = -1;
  if ( this.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( _What == *(char **)&stru_A95928 )
  {
    result->baseclass_0.baseclass_0._Mysize = 0;
    v2 = operator new(0xCu);
    if ( !v2 )
    {
      _What = 0;
      std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
      pExceptionObject = &std::bad_alloc::_vftable_;
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
    }
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
    *(_DWORD *)v2 = v2;
    *(_DWORD *)(*(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  }
  else
  {
    std::list<ItemViewDummy___std::allocator<ItemViewDummy__>>::list<ItemViewDummy___std::allocator<ItemViewDummy__>>(
      result,
      (std::list<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)_What + 3);
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00664670) --------------------------------------------------------
void *__thiscall CharShape::_vector_deleting_destructor_(CharShape *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CharShape::_CharShape(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006646A0) --------------------------------------------------------
void __thiscall FindBoneNode::_FindBoneNode(FindBoneNode *this)
{
  FindBoneNode *v1; // edi@1
  char *v2; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v4; // ST04_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > result; // [sp+0h] [bp-18h]@1
  std::set<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *> > *v6; // [sp+4h] [bp-14h]@1
  FindBoneNode *v7; // [sp+8h] [bp-10h]@1
  int v8; // [sp+14h] [bp-4h]@1

  v1 = this;
  v7 = this;
  v2 = (char *)&this->m_setLinkNode;
  v8 = 0;
  v6 = &this->m_setLinkNode;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)this->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)**(_DWORD **)&v3;
  LOBYTE(v8) = 1;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&this->m_setLinkNode,
    &result,
    v4,
    v3);
  operator delete(*((void **)v2 + 1));
  v1->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);

//----- (00664720) --------------------------------------------------------
void __thiscall FindBoneNode::FindBoneNode(FindBoneNode *this, NiNode **ppNode, int nArry, const char *szName)
{
  FindBoneNode *v4; // ebx@1
  int v5; // edi@1
  const char *v6; // eax@1
  void *v7; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v8; // eax@4
  std::exception thisa; // [sp+0h] [bp-28h]@7
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> result; // [sp+Ch] [bp-1Ch]@4
  FindBoneNode *v11; // [sp+14h] [bp-14h]@1
  char *_What; // [sp+18h] [bp-10h]@7
  int v13; // [sp+24h] [bp-4h]@1

  v4 = this;
  v11 = this;
  v5 = 0;
  this->baseclass_0.m_pCallBack = 0;
  this->baseclass_0.m_nCurLevel = -1;
  v6 = szName;
  this->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindBoneNode::_vftable_;
  this->m_szName = v6;
  v13 = 0;
  this->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v7 = operator new(0x14u);
  if ( !v7 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v4->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v7;
  *(_DWORD *)v7 = v7;
  v4->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v13) = 1;
  if ( nArry > 0 )
  {
    do
    {
      if ( ppNode[v5] )
      {
        szName = (const char *)ppNode[v5];
        v8 = std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(
               (std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v4->m_setLinkNode,
               (unsigned int *)&szName);
        std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Linsert(
          (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v4->m_setLinkNode,
          &result,
          v8,
          0);
      }
      ++v5;
    }
    while ( v5 < nArry );
  }
  v4->m_pkBone = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C449C: using guessed type int (__stdcall *FindBoneNode___vftable_)(int _pkObject, int _pData);

//----- (00664820) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > *__thiscall std::_Tree<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::find(std::_Tree<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > *result, PgWin *const *_Keyval)
{
  std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> >::_Node *v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (00664890) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindBoneNode::ProcessData(FindBoneNode *this, NiAVObject *_pkObject, void *_pData)
{
  NiAVObject *v3; // ebx@1
  char *v4; // esi@1
  FindBoneNode *v5; // edi@1
  Ns_TourScene::TS_RESULT v6; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > result; // [sp+Ch] [bp-4h]@2

  v3 = _pkObject;
  v4 = _pkObject->baseclass_0.m_pcName;
  v5 = this;
  if ( !v4 )
    goto LABEL_9;
  if ( this->m_setLinkNode.baseclass_0.baseclass_0.baseclass_0._Myhead != *(std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node **)&std::_Tree<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::find((std::_Tree<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > *)&this->m_setLinkNode, &result, (PgWin *const *)&_pkObject)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] )
    return -1;
  v6 = strcmp(v4, v5->m_szName);
  if ( v6 )
LABEL_9:
    v6 = 1;
  else
    v5->m_pkBone = v3;
  return v6;
}

//----- (00664930) --------------------------------------------------------
Char::AttackNO __thiscall MainChar::ChooseAttack(MainChar *this)
{
  Char::AttackNO result; // eax@3
  int n2ndCode; // [sp+0h] [bp-8h]@1
  int n1stCode; // [sp+4h] [bp-4h]@1

  Char::GetAniCode(&this->baseclass_0, 0, (unsigned int *)&n1stCode, (unsigned int *)&n2ndCode);
  if ( n1stCode != 300000 )
    goto LABEL_9;
  if ( n2ndCode == 1000 )
    return 1;
  if ( n2ndCode != 2000 )
LABEL_9:
    result = 0;
  else
    result = 2;
  return result;
}

//----- (00664980) --------------------------------------------------------
bool __thiscall MainChar::PositionSinkTest(MainChar *this, float fXPos, float fYPos)
{
  return 0.0 != this->baseclass_0.m_fSaveCharSpeed;
}

//----- (006649A0) --------------------------------------------------------
void __thiscall MainChar::SetRevserveMovePos(MainChar *this, NiPoint3 *kPos)
{
  this->m_kRevMovePos.x = kPos->x;
  this->m_kRevMovePos.y = kPos->y;
  this->m_kRevMovePos.z = 0.0;
  this->m_bPathFindingStart = 1;
}

//----- (006649D0) --------------------------------------------------------
NiPoint3 *__thiscall MainChar::GetRevserveMovePos(MainChar *this)
{
  return &this->m_kRevMovePos;
}

//----- (006649E0) --------------------------------------------------------
bool __thiscall MainChar::IsEndPathFinding(MainChar *this)
{
  return this->m_bWay == 0;
}

//----- (006649F0) --------------------------------------------------------
bool __thiscall MainChar::IsDuringMove(MainChar *this)
{
  return this->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->IsMove((NpNs_MoveToTarget *)&this->baseclass_0.m_kMoveToTarget) != 0;
}

//----- (00664A10) --------------------------------------------------------
void __thiscall MainChar::AdjustHeadWeightsValue(MainChar *this)
{
  Char *v1; // esi@1
  Char *v2; // eax@1
  int v3; // edi@5
  int v4; // eax@5
  float v5; // ebx@5
  double v6; // st7@5
  double v7; // st7@5
  float v8; // edi@5
  _BYTE v9[12]; // ST18_12@6
  _BYTE v10[12]; // ST0C_12@6
  _BYTE v11[12]; // ST00_12@6
  NiPoint3 kDir; // [sp+Ch] [bp-54h]@5
  NiPoint3 kTargetPos; // [sp+18h] [bp-48h]@5
  NiPoint3 kRight; // [sp+24h] [bp-3Ch]@5
  float v15; // [sp+30h] [bp-30h]@5
  float v16; // [sp+34h] [bp-2Ch]@5
  float v17; // [sp+38h] [bp-28h]@5
  NiPoint3 kUp; // [sp+3Ch] [bp-24h]@5
  float cMaxPitch; // [sp+48h] [bp-18h]@5
  float fDegreePitch; // [sp+4Ch] [bp-14h]@5
  int ui1stCode; // [sp+54h] [bp-Ch]@3
  float cHalfPI; // [sp+58h] [bp-8h]@5
  char bApplied; // [sp+5Fh] [bp-1h]@6

  v1 = (Char *)this;
  v2 = this->m_pkTargetChar;
  if ( v2 )
  {
    if ( (MainChar *)v2 != this )
    {
      Char::GetAniCode(&this->baseclass_0, 0, (unsigned int *)&ui1stCode, 0);
      if ( ui1stCode == 100000 || ui1stCode == 200000 )
      {
        v1->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v1, (unsigned int)&kDir);
        v3 = ((int (__thiscall *)(Char *))v1->baseclass_0.vfptr[6].Deaffect)(v1);
        v4 = (*(int (**)(void))(*(_DWORD *)v1[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] + 196))();
        v15 = *(float *)v4 - *(float *)v3;
        v16 = *(float *)(v4 + 4) - *(float *)(v3 + 4);
        v5 = v16;
        v6 = *(float *)(v4 + 8);
        kTargetPos.y = v16;
        v7 = v6 - *(float *)(v3 + 8);
        v8 = v15;
        kTargetPos.x = v15;
        v17 = v7;
        kTargetPos.z = v17;
        cHalfPI = 0.5 * NI_PI;
        fDegreePitch = 65.0 * NI_PI / 180.0;
        cMaxPitch = NI_PI * 25.0 / 180.0;
        kUp.x = 0.0;
        kUp.y = 0.0;
        kUp.z = 1.0;
        NiPoint3::UnitCross(&kUp, &kRight, &kTargetPos);
        NiPoint3::UnitCross(&kRight, &kTargetPos, &kUp);
        *(_DWORD *)v9 = (_DWORD)kUp.x;
        *(_QWORD *)&v9[4] = *(_QWORD *)&kUp.y;
        *(_QWORD *)v10 = __PAIR__(LODWORD(v5), LODWORD(v8));
        *(_DWORD *)&v10[8] = LODWORD(v17);
        bApplied = 0;
        *(_DWORD *)v11 = (_DWORD)kDir.x;
        *(_QWORD *)&v11[4] = *(_QWORD *)&kDir.y;
        NpNs_GetAngle(*(NiPoint3 *)v11, *(NiPoint3 *)v10, *(NiPoint3 *)v9, 0);
      }
    }
  }
  v1->m_fTargetYawWeight = 0.5;
  v1->m_fTargetPitchWeight = 0.25;
  Char::AdjustHeadWeightsValue(v1);
}
// B6DE8C: using guessed type const float NI_PI;

//----- (00664C50) --------------------------------------------------------
int __thiscall MainChar::IsVisible(MainChar *this)
{
  MainChar *v1; // esi@1
  CSpactralGlow_Shader_Controller *v3; // eax@5

  v1 = this;
  if ( AbStateInfectee::IsVisible(&this->baseclass_0.baseclass_0) )
  {
    if ( Char::IsEnableSpectral(&v1->baseclass_0) )
    {
      Char::SetEnanleSpectral(&v1->baseclass_0, 0);
      return 1;
    }
  }
  else
  {
    if ( !Char::IsEnableSpectral(&v1->baseclass_0) )
    {
      v3 = CharShape::GetShader_Ctrl(&v1->baseclass_0.m_kCharShape);
      CSpactralGlow_Shader_Controller::SetUseShaderName(v3, "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow");
      Char::SetEnanleSpectral(&v1->baseclass_0, 1);
    }
  }
  return 1;
}

//----- (00664CB0) --------------------------------------------------------
void __thiscall MainChar::SetReserveAct(MainChar *this, MainChar::ReserveAct eReserveAct)
{
  if ( eReserveAct == 1 && this->m_eReserveAct == 4 )
    this->m_eReserveAct = 1;
  if ( !this->m_eReserveAct )
    this->m_eReserveAct = eReserveAct;
}

//----- (00664CE0) --------------------------------------------------------
void __thiscall MainChar::SetStartReserveAct(MainChar *this, MainChar::ReserveAct _eReserveAct)
{
  this->m_eStartReserveAct = _eReserveAct;
}

//----- (00664CF0) --------------------------------------------------------
void __thiscall MainChar::SetTOTChar(MainChar *this, unsigned __int16 pkChar)
{
  this->m_pkTOTChar = pkChar;
}

//----- (00664D10) --------------------------------------------------------
int __thiscall MainChar::GetMetamorphosisType(MainChar *this)
{
  MobInfo *v1; // eax@1
  int result; // eax@2

  v1 = Char::GetMobInfo(&this->baseclass_0);
  if ( !v1 || (result = v1->Type, result != 17) && result != 30 )
    result = 0;
  return result;
}

//----- (00664D30) --------------------------------------------------------
bool __thiscall MainChar::IsMetamorphosis(MainChar *this)
{
  MobInfo *v1; // eax@1
  MobType v2; // eax@2

  v1 = Char::GetMobInfo(&this->baseclass_0);
  return v1 && ((v2 = v1->Type, v2 == 17) || v2 == 30);
}

//----- (00664D50) --------------------------------------------------------
void __thiscall MainChar::EndPathFind(MainChar *this, NiPoint3 *kEndPos)
{
  this->m_eStartMoveTarget = 0;
  this->m_bWay = 0;
  this->m_kFinalMoveTargetPos.x = kEndPos->x;
  this->m_kFinalMoveTargetPos.y = kEndPos->y;
  this->m_kFinalMoveTargetPos.z = kEndPos->z;
  this->m_kRevMovePos.x = kEndPos->x;
  this->m_kRevMovePos.y = kEndPos->y;
  this->m_kRevMovePos.z = kEndPos->z;
}

//----- (00664DA0) --------------------------------------------------------
void __thiscall MainChar::EnableAirBorne(MainChar *this, bool b, unsigned __int16 kID)
{
  this->m_bAirBorne = b;
  this->m_kAirBorneID = kID;
}

//----- (00664DC0) --------------------------------------------------------
bool __thiscall MainChar::IsAirBorneState(MainChar *this)
{
  return this->m_bAirBorne != 0;
}

//----- (00664DD0) --------------------------------------------------------
unsigned __int16 __thiscall MainChar::GetAirBorneID(MainChar *this)
{
  return this->m_kAirBorneID;
}

//----- (00664DE0) --------------------------------------------------------
int __thiscall MainChar::GetCharLevel(MainChar *this)
{
  return User::Lv(&g_kUser);
}

//----- (00664DF0) --------------------------------------------------------
void __thiscall MainChar::MainChar(MainChar *this)
{
  MainChar *v1; // esi@1
  int v2; // eax@1
  signed int v3; // ecx@1
  NiNode *v4; // eax@3

  v1 = this;
  Char::Char(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&MainChar::_vftable_;
  v1->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&MainChar::_vftable_;
  v1->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)MainChar::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kMainCharMotionPTimer);
  v1->m_spCollider.m_pObject = 0;
  v1->m_pChainEffect.m_pObject = 0;
  v1->m_kItemSkill.m_bUse = 0;
  v1->m_kItemSkill.m_uiInvenSlot = 0;
  v2 = (int)&v1->m_pos3ArrWP[0].y;
  v3 = 100;
  do
  {
    *(float *)(v2 - 4) = 0.0;
    v2 += 12;
    --v3;
    *(float *)(v2 - 12) = 0.0;
    *(float *)(v2 - 8) = 0.0;
  }
  while ( v3 );
  v1->m_kReserveSkillID = -1;
  v4 = v1->baseclass_0.m_spScene.m_pObject;
  v1->m_fPowAutoStepLength = 250.0;
  v1->m_pkTargetChar = 0;
  v1->m_bNewClickChar = 0;
  v1->m_eReserveAct = 0;
  v1->m_eReserveSkillType = 0;
  v1->m_eStartReserveAct = 0;
  v1->m_eStartMoveTarget = 0;
  v1->m_bWay = 0;
  v1->m_nWPCnt = 0;
  v1->m_nCurWP = 0;
  *(_WORD *)&v1->m_bIsFindEndPoint = 0;
  v1->m_nCurCornerCnt = 0;
  *(_WORD *)&v1->m_bAttackWill = 0;
  v1->m_byCurrSkillAttCode = 0;
  v1->m_pkAttackTarget = 0;
  v1->m_bFinalMoveTargetPos = 0;
  v1->ms_uiTotalCharTitle = 0;
  v1->ms_uiTotalCTWeaponTitle = 0;
  v4->baseclass_0.m_uFlags &= 0xFFFEu;
  v1->m_kAirBorneID = -1;
  v1->m_byPkGrade = 0;
  v1->m_pkTOTChar = -1;
  v1->m_uiPlayerSight = 0;
  v1->m_bIsTargetGuildWarring = 0;
  v1->m_bMainCharAura = 0;
  v1->m_bAirBorne = 0;
  v1->baseclass_0.m_kSkillID = -1;
}
// 9C4554: using guessed type int (*MainChar___vftable_[2])();
// 9C4574: using guessed type int (__stdcall *MainChar___vftable_)(int);
// 9C457C: using guessed type int (__thiscall *MainChar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00664F60) --------------------------------------------------------
void __thiscall MainChar::_MainChar(MainChar *this)
{
  MainChar *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&MainChar::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&MainChar::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)MainChar::_vftable_;
  v2 = this->m_pChainEffect.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spCollider.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  Char::_Char(&v1->baseclass_0);
}
// 9C4554: using guessed type int (*MainChar___vftable_[2])();
// 9C4574: using guessed type int (__stdcall *MainChar___vftable_)(int);
// 9C457C: using guessed type int (__thiscall *MainChar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00665020) --------------------------------------------------------
bool __thiscall MainChar::Init(MainChar *this, PROTO_NC_CHAR_MAPLOGIN_ACK *p)
{
  MainChar *v2; // esi@1
  PROTO_NC_CHAR_BASE_CMD *v3; // edi@1
  int v4; // eax@1
  void (__thiscall *v5)(_DWORD, _DWORD); // edx@1
  int v6; // eax@1
  int v7; // eax@1
  bool (__thiscall *v8)(AbStateInfectee *, ABSTATEINDEX, float, bool); // edx@1
  bool (__thiscall *v9)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@3
  float v10; // ST20_4@3
  float v11; // ST1C_4@3
  float v12; // ST24_4@4
  float v13; // ST20_4@4
  bool result; // al@5
  NiPoint3 kCharPos; // [sp+34h] [bp-64h]@3
  NiPoint3 kCharDir; // [sp+40h] [bp-58h]@5
  AbStateInfecteeVtbl *v17; // [sp+4Ch] [bp-4Ch]@1
  char v18; // [sp+53h] [bp-45h]@1
  PROTO_AVATAR_SHAPE_INFO *pkShapeData; // [sp+54h] [bp-44h]@1
  NiMatrix3 thisa; // [sp+58h] [bp-40h]@5
  char acName[21]; // [sp+7Ch] [bp-1Ch]@1
  unsigned int v22; // [sp+94h] [bp-4h]@1
  int v23; // [sp+98h] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  v3 = User::GetMainCharBaseData(&g_kUser);
  pkShapeData = User::GetMainCharShapeData(&g_kUser);
  User::GetSelectedAvatarInfo(&g_kUser);
  v2->baseclass_0.m_kHandle = p->charhandle;
  *(_DWORD *)acName = *(_DWORD *)&v3->charid.n5_name[0];
  *(_DWORD *)&acName[4] = *(_DWORD *)&v3->charid.n5_name[4];
  *(_DWORD *)&acName[8] = *(_DWORD *)&v3->charid.n5_name[8];
  v4 = (int)v2->baseclass_0.baseclass_0.vfptr;
  *(_DWORD *)&acName[12] = *(_DWORD *)&v3->charid.n5_name[12];
  *(_DWORD *)&acName[16] = *(_DWORD *)&v3->charid.n5_name[16];
  v5 = *(void (__thiscall **)(_DWORD, _DWORD))(v4 + 88);
  acName[20] = 0;
  v5(v2, acName);
  v17 = v2->baseclass_0.baseclass_0.vfptr;
  v6 = User::MaxHP(&g_kUser);
  ((void (__thiscall *)(MainChar *, int))v17[4].SetAbStateProperty)(v2, v6);
  v17 = v2->baseclass_0.baseclass_0.vfptr;
  v7 = User::MaxSP(&g_kUser);
  ((void (__thiscall *)(MainChar *, int))v17[4].AddAbStateByAbstateIndex)(v2, v7);
  ((void (__thiscall *)(MainChar *, unsigned int))v2->baseclass_0.baseclass_0.vfptr[4].Affect)(v2, v3->CurHP);
  ((void (__thiscall *)(MainChar *, unsigned int))v2->baseclass_0.baseclass_0.vfptr[4].IsVisible)(v2, v3->CurSP);
  v2->baseclass_0.baseclass_0.vfptr[4].DeleteAbStateByAbstateIndex((AbStateInfectee *)v2, 0);
  v18 = ((int (__thiscall *)(MainChar *))v2->baseclass_0.baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v2);
  v8 = v2->baseclass_0.baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
  v2->baseclass_0.m_byMode = 1;
  v2->baseclass_0.m_eStandMode = 0;
  if ( v18 != (unsigned __int8)((int (__thiscall *)(MainChar *))v8)(v2) )
    v2->baseclass_0.m_bIsChangeCampMode = 1;
  CharShape::SetShapeInfo(&v2->baseclass_0.m_kCharShape, pkShapeData);
  CharShape::SetEquipInfo(&v2->baseclass_0.m_kCharShape, 0);
  v9 = v2->baseclass_0.baseclass_0.vfptr[21].AddAbStateByAbstateIndex;
  v2->baseclass_0.m_bConnectServer = 1;
  v2->m_byPkGrade = 0;
  ((void (__thiscall *)(MainChar *, _DWORD))v9)(v2, 0);
  dword_B30C3C = *(_DWORD *)&v3->logininfo.currentmap.n3_name[0];
  dword_B30C40 = *(_DWORD *)&v3->logininfo.currentmap.n3_name[4];
  dword_B30C44 = *(_DWORD *)&v3->logininfo.currentmap.n3_name[8];
  v11 = (double)p->logincoord.x;
  v10 = (double)p->logincoord.y;
  if ( !World::GetAdvGroundPos(&g_kWorld, v11, v10, &kCharPos)
    || (v13 = (double)p->logincoord.x, v12 = (double)p->logincoord.y, World::IsBlock(&g_kWorld, v13, v12)) )
  {
    result = 0;
  }
  else
  {
    v2->baseclass_0.m_dwGuildRegNum = 0;
    *(float *)&pkShapeData = (NI_PI + NI_PI) * 90.0 / 180.0;
    NiMatrix3::MakeZRotation(&thisa, *(float *)&pkShapeData);
    NiMatrix3::operator_(&thisa, &kCharDir, &World::ms_kNorthDir);
    ((void (__thiscall *)(MainChar *, NiPoint3 *, NiPoint3 *))v2->baseclass_0.baseclass_0.vfptr[5].GetAbstateColor)(
      v2,
      &kCharPos,
      &kCharDir);
    Char::InitHpUpdate(&v2->baseclass_0);
    v2->m_pkTOTChar = -1;
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B30C3C: using guessed type int dword_B30C3C;
// B30C40: using guessed type int dword_B30C40;
// B30C44: using guessed type int dword_B30C44;
// B6DE8C: using guessed type const float NI_PI;

//----- (006652B0) --------------------------------------------------------
bool __thiscall MainChar::TryMove(MainChar *this, float fCurTime)
{
  MainChar *v2; // esi@1
  bool v3; // al@2
  MoveToTarget kMove; // [sp+10h] [bp-78h]@2
  int v6; // [sp+84h] [bp-4h]@2

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor)() )
  {
    MoveToTarget::MoveToTarget(&kMove);
    v6 = 0;
    MoveToTarget::Copy(&v2->baseclass_0.m_kMoveToTarget, &kMove);
    NpNs_MoveToTarget::Update(&kMove.baseclass_0.baseclass_0, fCurTime);
    v3 = World::IsBlock(&g_kWorld, kMove.baseclass_0.baseclass_0.m_pos3Cur.x, kMove.baseclass_0.baseclass_0.m_pos3Cur.y);
    v6 = -1;
    if ( v3 )
    {
      MoveToTarget::_MoveToTarget(&kMove);
      return 0;
    }
    MoveToTarget::_MoveToTarget(&kMove);
  }
  return 1;
}

//----- (00665370) --------------------------------------------------------
bool __thiscall MainChar::TryMove8(MainChar *this, float fCurTime)
{
  MainChar *v2; // esi@1
  bool v3; // al@2
  MoveToTarget kMove; // [sp+10h] [bp-78h]@2
  int v6; // [sp+84h] [bp-4h]@2

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor)() )
  {
    MoveToTarget::MoveToTarget(&kMove);
    v6 = 0;
    MoveToTarget::Copy(&v2->baseclass_0.m_kMoveToTarget, &kMove);
    NpNs_MoveToTarget::Update(&kMove.baseclass_0.baseclass_0, fCurTime);
    v3 = World::IsBlock8(
           &g_kWorld,
           kMove.baseclass_0.baseclass_0.m_pos3Cur.x,
           kMove.baseclass_0.baseclass_0.m_pos3Cur.y);
    v6 = -1;
    if ( v3 )
    {
      MoveToTarget::_MoveToTarget(&kMove);
      return 0;
    }
    MoveToTarget::_MoveToTarget(&kMove);
  }
  return 1;
}

//----- (00665430) --------------------------------------------------------
void __thiscall MainChar::StopMove(MainChar *this, bool bAbstateTest)
{
  MainChar *v2; // esi@1
  Mover *v3; // ecx@1

  v2 = this;
  v3 = this->baseclass_0.m_pkMover;
  if ( v3 && !v2->baseclass_0.m_uiMoverSlot )
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(bAbstateTest);
  if ( bAbstateTest != 1 || !v2->baseclass_0.baseclass_0.m_kAbStateProperty.iUnMovableCount )
  {
    v2->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&v2->baseclass_0.m_kMoveToTarget);
    if ( !Char::CheckActState(&v2->baseclass_0, 100000) )
      ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
    v2->m_eStartMoveTarget = 0;
    v2->m_bWay = 0;
    v2->m_eReserveAct = 0;
  }
}

//----- (006654C0) --------------------------------------------------------
void __thiscall MainChar::StopMove(MainChar *this, float fXPos, float fYPos, bool bAbstateTest)
{
  MainChar *v4; // esi@1
  Mover *v5; // ecx@1
  NiNode *v6; // eax@7
  NiPoint3 kPos; // [sp+20h] [bp-Ch]@6

  v4 = this;
  v5 = this->baseclass_0.m_pkMover;
  if ( v5 && !v4->baseclass_0.m_uiMoverSlot )
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.vfptr[7].IsVisible)(
      LODWORD(fXPos),
      LODWORD(fYPos),
      bAbstateTest);
  if ( bAbstateTest != 1 || !v4->baseclass_0.baseclass_0.m_kAbStateProperty.iUnMovableCount )
  {
    v4->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop((NpNs_MoveToTarget *)&v4->baseclass_0.m_kMoveToTarget);
    if ( World::GetAdvGroundPos(&g_kWorld, fXPos, fYPos, &kPos) == 1 )
    {
      v4->baseclass_0.baseclass_0.vfptr[5].__vecDelDtor((AbStateInfectee *)v4, (unsigned int)&kPos);
      v6 = v4->baseclass_0.m_spScene.m_pObject;
      LODWORD(v6->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
      v6->baseclass_0.m_kLocal.m_Translate.y = kPos.y;
      v6->baseclass_0.m_kLocal.m_Translate.z = kPos.z;
    }
    v4->m_eStartMoveTarget = 0;
    v4->m_bWay = 0;
  }
}

//----- (00665580) --------------------------------------------------------
void __thiscall MainChar::StartPathFinding(MainChar *this)
{
  MainChar *v1; // esi@1
  float v2; // ST28_4@3
  NiPoint2 v3; // ST00_8@3
  int v4; // ecx@3
  int v5; // eax@4
  int v6; // ecx@5
  double v7; // st6@6
  int nResultWayCnt; // [sp+18h] [bp-4h]@3

  v1 = this;
  if ( !(_S3_8 & 1) )
    _S3_8 |= 1u;
  v2 = *(float *)this->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCurrentPos((NpNs_MoveToTarget *)&this->baseclass_0.m_kMoveToTarget);
  v3.y = *(float *)((int)v1->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCurrentPos((NpNs_MoveToTarget *)&v1->baseclass_0.m_kMoveToTarget)
                  + 4);
  v3.x = v2;
  World::SearchWayPointsNew(
    &g_kWorld,
    v3,
    COERCE_NIPOINT2(*(double *)&v1->m_kRevMovePos.x),
    100,
    &aPos2Arr,
    &nResultWayCnt,
    &v1->m_bIsFindEndPoint);
  v4 = nResultWayCnt;
  if ( nResultWayCnt )
  {
    v5 = 0;
    v1->m_bWay = 1;
    v1->m_nWPCnt = v4;
    v1->m_nCurWP = 0;
    if ( v4 > 0 )
    {
      v6 = (int)&v1->m_pos3ArrWP[0].y;
      do
      {
        v7 = *(&aPos2Arr.x + 2 * v5++);
        *(float *)(v6 - 4) = v7;
        v6 += 12;
        *(float *)(v6 - 12) = *((float *)&g_pkMainChar + 2 * v5);
        *(float *)(v6 - 8) = 0.0;
      }
      while ( v5 < v1->m_nWPCnt );
    }
    if ( v1->m_bIsFindEndPoint )
    {
      *((float *)&v1->baseclass_0.baseclass_0.vfptr + 3 * v1->m_nWPCnt + 1044) = v1->m_kRevMovePos.x;
      *(&v1->m_pos3MoveDir.z + 3 * v1->m_nWPCnt) = v1->m_kRevMovePos.y;
    }
  }
}

//----- (00665690) --------------------------------------------------------
void __thiscall MainChar::UpdatePathFinding(MainChar *this)
{
  MainChar *v1; // esi@1
  float v2; // eax@2
  float v3; // ecx@2
  float v4; // edx@2
  int v5; // ecx@5
  int v6; // eax@6
  float v7; // eax@6
  bool v8; // zf@8
  float v9; // edx@9
  float v10; // eax@9

  v1 = this;
  if ( this->m_bPathFindingStart )
  {
    v2 = this->m_kRevMovePos.x;
    v3 = this->m_kRevMovePos.y;
    v4 = v1->m_kRevMovePos.z;
    v1->m_pos3InputTargetPos.x = v2;
    v1->m_pos3InputTargetPos.y = v3;
    v1->m_nCurCornerCnt = 0;
    v1->m_bPathFindingStart = 0;
    v1->m_eStartMoveTarget = 3;
    v1->m_pos3InputTargetPos.z = v4;
    MainChar::StartPathFinding(v1);
  }
  if ( v1->m_bWay && v1->m_eStartMoveTarget == 3 )
  {
    v5 = v1->m_nCurWP;
    if ( v5 >= v1->m_nWPCnt )
    {
      v8 = v1->m_bIsFindEndPoint == 0;
      v1->m_bWay = 0;
      if ( v8 )
      {
        v9 = v1->m_pos3InputTargetPos.y;
        v10 = v1->m_pos3InputTargetPos.z;
        v1->m_kRevMovePos.x = v1->m_pos3InputTargetPos.x;
        v1->m_kRevMovePos.y = v9;
        v1->m_kRevMovePos.z = v10;
        MainChar::StartPathFinding(v1);
      }
    }
    else
    {
      v6 = (int)((char *)v1 + 4 * (3 * v5 + 1047));
      v1->m_eStartMoveTarget = 1;
      LODWORD(v1->m_kRevMovePos.x) = *(_DWORD *)v6;
      LODWORD(v1->m_kRevMovePos.y) = *(_DWORD *)(v6 + 4);
      LODWORD(v7) = *(_DWORD *)(v6 + 8);
      ++v1->m_nCurCornerCnt;
      v1->m_kRevMovePos.z = v7;
      v1->m_nCurWP = v5 + 1;
    }
  }
}

//----- (00665780) --------------------------------------------------------
void __thiscall MainChar::CulNextMovePosition(MainChar *this)
{
  MainChar *v1; // esi@1
  float v2; // eax@1
  float v3; // ST1C_4@1
  float v4; // ecx@1
  float v5; // edx@1
  float v6; // ST10_4@1
  float v7; // ST14_4@1
  float v8; // ST18_4@1
  float v9; // ST04_4@1
  float v10; // ST08_4@1
  double v11; // st7@1
  float v12; // ST0C_4@1
  float v13; // ST04_4@1
  float v14; // ST08_4@1
  float v15; // ST0C_4@1
  float v16; // ST1C_4@1
  float v17; // ST1C_4@1
  float v18; // ecx@2
  float v19; // edx@2
  float v20; // ecx@3
  float v21; // edx@3

  v1 = this;
  v2 = this->m_kNextMovePos.x;
  v3 = this->m_fPowAutoStepLength;
  v4 = this->m_kNextMovePos.y;
  v5 = v1->m_kNextMovePos.z;
  v1->m_kStartMovePos.x = v2;
  v1->m_kStartMovePos.y = v4;
  v1->m_kStartMovePos.z = v5;
  v6 = v1->m_pos3MoveDir.x * v3;
  v7 = v1->m_pos3MoveDir.y * v3;
  v8 = v3 * v1->m_pos3MoveDir.z;
  v9 = v1->m_kStartMovePos.x + v6;
  v10 = v1->m_kStartMovePos.y + v7;
  v11 = v1->m_kStartMovePos.z;
  v1->m_kRevMovePos.x = v9;
  v1->m_kRevMovePos.y = v10;
  v12 = v11 + v8;
  v1->m_kRevMovePos.z = v12;
  v13 = v1->m_kRevMovePos.x - v1->m_kResStartSPos.x;
  v14 = v1->m_kRevMovePos.y - v1->m_kResStartSPos.y;
  v15 = v1->m_kRevMovePos.z - v1->m_kResStartSPos.z;
  v16 = v14 * v14 + v13 * v13 + v15 * v15;
  v17 = sqrt(v16);
  if ( v1->m_fTotalMoveLength <= (double)v17 )
  {
    v18 = v1->m_kFinalMoveTargetPos.y;
    v19 = v1->m_kFinalMoveTargetPos.z;
    v1->m_kRevMovePos.x = v1->m_kFinalMoveTargetPos.x;
    v1->m_kRevMovePos.y = v18;
    v1->m_bFinalMoveTargetPos = 1;
    v1->m_kRevMovePos.z = v19;
  }
  v20 = v1->m_kRevMovePos.y;
  v21 = v1->m_kRevMovePos.z;
  v1->m_kNextMovePos.x = v1->m_kRevMovePos.x;
  v1->m_kNextMovePos.y = v20;
  v1->m_kNextMovePos.z = v21;
}

//----- (006658E0) --------------------------------------------------------
bool __thiscall MainChar::IsPassTargetPosition(MainChar *this)
{
  MainChar *v1; // esi@1
  NiPoint3 *v2; // eax@1
  double v3; // st7@1
  float v4; // ST0C_4@1
  float v5; // ST10_4@1
  float v6; // ST14_4@1
  bool result; // al@3
  NiPoint3 pos3CurPos; // [sp+14h] [bp-10h]@1
  float fSqrLength; // [sp+20h] [bp-4h]@1

  v1 = this;
  v2 = this->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCalcuCurrentPos((NpNs_MoveToTarget *)&this->baseclass_0.m_kMoveToTarget);
  pos3CurPos.x = v2->x;
  v3 = pos3CurPos.x - v1->m_kStartMovePos.x;
  pos3CurPos.y = v2->y;
  v4 = v3;
  pos3CurPos.z = v2->z;
  v5 = pos3CurPos.y - v1->m_kStartMovePos.y;
  v6 = pos3CurPos.z - v1->m_kStartMovePos.z;
  fSqrLength = v5 * v5 + v4 * v4 + v6 * v6;
  fSqrLength = sqrt(fSqrLength);
  if ( v1->m_fPowAutoStepLength <= (double)fSqrLength
    || (fSqrLength = fSqrLength - v1->m_fPowAutoStepLength, fSqrLength = fabs(fSqrLength), fSqrLength < 1.0) )
  {
    v1->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos(
      (NpNs_MoveToTarget *)&v1->baseclass_0.m_kMoveToTarget,
      &pos3CurPos);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006659C0) --------------------------------------------------------
bool __thiscall MainChar::IsPassResTargetPosition(MainChar *this)
{
  MainChar *v1; // esi@1
  NiPoint3 *v2; // eax@1
  float v3; // ST04_4@1
  float v4; // ST08_4@1
  float v5; // ST0C_4@1
  float v6; // ST1C_4@1
  float v7; // ST1C_4@2
  float v8; // ST1C_4@2
  float fSqrLength; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v2 = this->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCalcuCurrentPos((NpNs_MoveToTarget *)&this->baseclass_0.m_kMoveToTarget);
  v3 = v2->x - v1->m_kResStartSPos.x;
  v4 = v2->y - v1->m_kResStartSPos.y;
  v5 = v2->z - v1->m_kResStartSPos.z;
  v6 = v4 * v4 + v3 * v3 + v5 * v5;
  fSqrLength = sqrt(v6);
  return v1->m_fTotalMoveLength <= (double)fSqrLength
      || (v7 = fSqrLength - v1->m_fTotalMoveLength, v8 = fabs(v7), v8 < 1.0);
}

//----- (00665A80) --------------------------------------------------------
bool __thiscall MainChar::IsView(MainChar *this, NiPoint3 *pos3Pos)
{
  MainChar *v2; // esi@1
  NiPoint3 *v3; // eax@1
  float v4; // ST04_4@1
  float v5; // ST08_4@1
  float v6; // ST0C_4@1
  double v7; // st7@2
  float fLengthToMainChar; // [sp+10h] [bp-4h]@1
  float pos3Posa; // [sp+1Ch] [bp+8h]@1
  float pos3Posb; // [sp+1Ch] [bp+8h]@1
  float pos3Posc; // [sp+1Ch] [bp+8h]@4

  v2 = this;
  v3 = World::GetCameraLookAtPos(&g_kWorld);
  v4 = v3->x - pos3Pos->x;
  v5 = v3->y - pos3Pos->y;
  v6 = v3->z - pos3Pos->z;
  pos3Posa = v4 * v4 + v5 * v5 + v6 * v6;
  pos3Posb = sqrt(pos3Posa);
  fLengthToMainChar = pos3Posb;
  if ( Char::IsNPC(&v2->baseclass_0) )
    v7 = v2->baseclass_0.m_fMaxViewLength + 500.0;
  else
    v7 = v2->baseclass_0.m_fMaxViewLength;
  pos3Posc = v7;
  return fLengthToMainChar < (double)pos3Posc;
}

//----- (00665B20) --------------------------------------------------------
bool __thiscall MainChar::InitCharactorWeaponTitle(MainChar *this, char currentTitle, unsigned __int16 currentTitleMobID)
{
  MainChar *v3; // ebx@1
  unsigned int v4; // edi@1
  Item *v5; // esi@1
  int v6; // esi@3
  char *v7; // eax@3
  int v8; // esi@3
  unsigned __int16 v9; // di@4
  bool v10; // zf@6
  const char *v11; // eax@10
  int v12; // esi@12
  char *v13; // edi@14
  char *v15; // [sp+Ch] [bp-78h]@3
  unsigned int iWTIndex; // [sp+10h] [bp-74h]@1
  signed int i; // [sp+14h] [bp-70h]@3
  unsigned int ia; // [sp+14h] [bp-70h]@11
  char v19; // [sp+18h] [bp-6Ch]@3
  char v20; // [sp+21h] [bp-63h]@3
  __int16 v21; // [sp+7Ch] [bp-8h]@3
  char v22; // [sp+7Eh] [bp-6h]@3
  unsigned int v23; // [sp+80h] [bp-4h]@1
  int v24; // [sp+84h] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v3 = this;
  v4 = 0;
  this->ms_uiTotalCTWeaponTitle = 0;
  v5 = Inventory::GetEquipedWeapon(&g_kInventory);
  iWTIndex = 0;
  if ( v5 && (unsigned __int8)((int (__thiscall *)(Item *))v5->baseclass_0.vfptr[1].__vecDelDtor)(v5) == 5 )
  {
    v6 = (int)&v5->m_kStruct;
    memcpy(&v19, (const void *)v6, 0x64u);
    v6 += 100;
    v21 = *(_WORD *)v6;
    v7 = &v20;
    v22 = *(_BYTE *)(v6 + 2);
    v15 = &v20;
    v8 = (int)&v3->ms_ctwtInfo[0].MobID;
    i = 3;
    do
    {
      v9 = *(_WORD *)v7;
      if ( *(_WORD *)v7 != -1 )
      {
        ++iWTIndex;
        *(_BYTE *)(v8 - 2) = CWeaponTitle::GetLevel(&WeaponTitleTab::ms_kTab, v9, *(_DWORD *)(v7 + 2) & 0xFFFFFFF);
        v7 = v15;
        *(_WORD *)v8 = v9;
        *(_BYTE *)(v8 + 2) = 2;
        v8 += 6;
      }
      v7 += 6;
      v10 = i-- == 1;
      v15 = v7;
    }
    while ( !v10 );
    v4 = 0;
  }
  v3->ms_uiTotalCTWeaponTitle = iWTIndex;
  if ( currentTitle != 10 )
    return 1;
  v3->baseclass_0.m_uiCurrCharTitleType = 10;
  if ( currentTitleMobID == -1 )
  {
    MainChar::InitCharactorWeaponTitle(v3, v4, v4);
    v3->ms_ctInfo[0]._bf1 |= 0xC0u;
    Char::SetCharTitleUse(&v3->baseclass_0, v4);
    v11 = CCharacterTitleData::GetTitleString(&g_characterTitleData, v4, v4);
    Char::SetCharTitleName(&v3->baseclass_0, v11);
  }
  ia = v4;
  if ( v3->ms_uiTotalCTWeaponTitle <= v4 )
    return 1;
  v12 = (int)&v3->ms_ctwtInfo[0].MobID;
  while ( *(_WORD *)v12 != currentTitleMobID )
  {
LABEL_16:
    v12 += 6;
    ++ia;
    if ( ia >= v3->ms_uiTotalCTWeaponTitle )
      return 1;
  }
  v13 = WeaponTitleTab::GetWeaponTitleStringByLevel(*(_WORD *)v12, *(_BYTE *)(v12 - 2));
  if ( v13 )
  {
    *(_BYTE *)(v12 + 2) = 3;
    v3->ms_ctInfo[0]._bf1 = v3->ms_ctInfo[0]._bf1 & 0x3F | 0x80;
    Char::SetCharTitleUse(&v3->baseclass_0, 1);
    Char::SetCharTitleName(&v3->baseclass_0, v13);
    goto LABEL_16;
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00665CB0) --------------------------------------------------------
MainChar::TargetType __thiscall MainChar::GetObjType(MainChar *this, Char *pkTargetObj)
{
  MainChar::TargetType result; // eax@2
  int v3; // edi@4
  int v4; // esi@4
  int v5; // ecx@6
  int v6; // eax@7
  int v7; // eax@8

  if ( !pkTargetObj )
    return 0;
  if ( !(unsigned __int8)((int (__thiscall *)(Char *))pkTargetObj->baseclass_0.vfptr[1].Affect)(pkTargetObj)
    || (v3 = pkTargetObj->m_kCharShape.m_kMobID,
        v4 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
        !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                            ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                            v3))
    || (unsigned __int16)v3 > *(_WORD *)(v4 + 200)
    || (v5 = *(_DWORD *)(v4 + 196), !*(_DWORD *)(v5 + 4 * v3))
    || (v6 = *(_DWORD *)(v5 + 4 * v3)) == 0 )
    goto LABEL_21;
  v7 = *(_DWORD *)(v6 + 99);
  if ( v7 == 10 )
    return 4;
  if ( v7 == 9 )
    return 5;
  if ( v7 == 8 )
    return 6;
  if ( v7 == 22 )
    return 7;
  if ( v7 == 21 )
    result = 8;
  else
LABEL_21:
    result = 0;
  return result;
}
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (00665D70) --------------------------------------------------------
void __thiscall MainChar::GetCameraLookAt(MainChar *this, NiPoint3 *kLookAt)
{
  double v2; // st7@0
  MainChar *v3; // esi@1
  int v4; // eax@2
  int v5; // eax@3

  v3 = this;
  if ( this->baseclass_0.m_pkMover )
  {
    v4 = ((int (*)(void))this->baseclass_0.m_pkMover->baseclass_0.baseclass_0.vfptr[6].AddAbStateByAbstateIndex)();
  }
  else
  {
    v5 = ((int (__stdcall *)(_DWORD))this->baseclass_0.m_spScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("LookAtCamera");
    if ( v5 )
    {
      LODWORD(kLookAt->x) = *(_DWORD *)(v5 + 140);
      LODWORD(kLookAt->y) = *(_DWORD *)(v5 + 144);
      LODWORD(kLookAt->z) = *(_DWORD *)(v5 + 148);
      return;
    }
    v4 = ((int (__thiscall *)(MainChar *))v3->baseclass_0.baseclass_0.vfptr[6].AddAbStateByAbstateIndex)(v3);
  }
  LODWORD(kLookAt->x) = *(_DWORD *)v4;
  LODWORD(kLookAt->y) = *(_DWORD *)(v4 + 4);
  LODWORD(kLookAt->z) = *(_DWORD *)(v4 + 8);
  ((void (__thiscall *)(MainChar *))v3->baseclass_0.baseclass_0.vfptr[21].Affect)(v3);
  kLookAt->z = v2 + kLookAt->z;
}

//----- (00665E10) --------------------------------------------------------
void __thiscall MainChar::OnWarpMove(MainChar *this, SHINE_XY_TYPE targetpoint, unsigned __int16 SkillID)
{
  int v3; // esi@1
  Char *v4; // ebx@1
  int v5; // eax@3
  int v6; // eax@4
  int v7; // eax@5
  ActiveSkillViewInfo *v8; // eax@7

  v3 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v4 = (Char *)this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          SkillID) )
  {
    if ( SkillID <= *(_WORD *)(v3 + 200) )
    {
      v5 = *(_DWORD *)(v3 + 196) + 4 * SkillID;
      if ( *(_DWORD *)v5 )
      {
        v6 = *(_DWORD *)v5;
        if ( v6 )
        {
          v7 = *(_DWORD *)(v6 + 531);
          if ( v7 == 36 || v7 == 38 )
          {
            v8 = v4->m_kActionMgr.m_pkCurPlaySkillViewInfo;
            if ( v8 && v8->ID != SkillID )
              ((void (__thiscall *)(Char *, signed int))v4->baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(v4, 1);
          }
        }
      }
    }
  }
  Char::OnWarpMove(v4, targetpoint, SkillID);
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (00665EA0) --------------------------------------------------------
bool __thiscall MainChar::IsAvailableStateReserveSkill(MainChar *this)
{
  MainChar *v1; // esi@1
  Mover *v3; // ecx@6

  v1 = this;
  return !Char::CheckActState(&this->baseclass_0, 500000)
      && !v1->baseclass_0.m_bWillDead
      && !(unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[1].AddAbStateByAbstateIndex)(v1)
      && (!(unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[15].SetAbStateProperty)(v1)
       || (v3 = v1->baseclass_0.m_pkMover) != 0 && Mover::IsAbility(v3));
}

//----- (00665F00) --------------------------------------------------------
void __thiscall MainChar::InitJump(MainChar *this)
{
  MainChar *v1; // esi@1
  ActionInfoSet *v2; // ecx@2
  unsigned int v3; // ebx@2
  ActionInfo *v4; // eax@3
  ActionInfoSet *v5; // ecx@5
  ActionInfo *v6; // eax@6
  ActionInfoSet *v7; // ecx@8
  ActionInfo *v8; // eax@9
  ActionInfoSet *v9; // ecx@11
  ActionInfo *v10; // eax@12
  ActionInfoSet *v11; // ecx@14
  ActionInfo *v12; // eax@15
  unsigned int uiJumpStand_JumpStart; // [sp+8h] [bp-10h]@2
  unsigned int uiJumpRun_JumpStart; // [sp+Ch] [bp-Ch]@2
  unsigned int uiJump_DownHill; // [sp+10h] [bp-8h]@2
  unsigned int uiJumpStand_Land; // [sp+14h] [bp-4h]@2

  v1 = this;
  if ( JumpProcessor::IsJump(&this->baseclass_0.m_kJumpProcessor) )
  {
    JumpProcessor::clear(&v1->baseclass_0.m_kJumpProcessor);
    v1->baseclass_0.m_kJumpProcessor.m_pActor = v1->baseclass_0.m_spActor.m_pObject;
    v1->baseclass_0.m_kJumpProcessor.m_pChar = (Char *)v1;
    v2 = v1->baseclass_0.m_kActionMgr.m_pkActInfoSet;
    v3 = 0;
    uiJumpStand_JumpStart = 0;
    uiJumpRun_JumpStart = 0;
    uiJump_DownHill = 0;
    uiJumpStand_Land = 0;
    if ( v2 )
    {
      v4 = ActionInfoSet::GetByInxName(v2, "JumpStand_JumpStart");
      if ( v4 )
        uiJumpStand_JumpStart = v4->uiEventCode;
    }
    v5 = v1->baseclass_0.m_kActionMgr.m_pkActInfoSet;
    if ( v5 )
    {
      v6 = ActionInfoSet::GetByInxName(v5, "JumpRun_JumpStart");
      if ( v6 )
        uiJumpRun_JumpStart = v6->uiEventCode;
    }
    v7 = v1->baseclass_0.m_kActionMgr.m_pkActInfoSet;
    if ( v7 )
    {
      v8 = ActionInfoSet::GetByInxName(v7, "Jump_DownHill");
      if ( v8 )
        uiJump_DownHill = v8->uiEventCode;
    }
    v9 = v1->baseclass_0.m_kActionMgr.m_pkActInfoSet;
    if ( v9 )
    {
      v10 = ActionInfoSet::GetByInxName(v9, "JumpStand_Land");
      if ( v10 )
        uiJumpStand_Land = v10->uiEventCode;
    }
    v11 = v1->baseclass_0.m_kActionMgr.m_pkActInfoSet;
    if ( v11 )
    {
      v12 = ActionInfoSet::GetByInxName(v11, "JumpRun_Land");
      if ( v12 )
        v3 = v12->uiEventCode;
    }
    JumpProcessor::SetJumpAni(
      &v1->baseclass_0.m_kJumpProcessor,
      uiJumpStand_JumpStart,
      uiJumpRun_JumpStart,
      uiJump_DownHill,
      uiJumpStand_Land,
      v3);
  }
}

//----- (00666010) --------------------------------------------------------
bool __thiscall MainChar::IsSkillUsableState(MainChar *this)
{
  return this->baseclass_0.baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount <= 0
      && !this->baseclass_0.baseclass_0.m_kAbStateProperty.iUnAttackableCount
      && this->baseclass_0.baseclass_0.m_kAbStateProperty.iFearCount <= 0;
}

//----- (00666030) --------------------------------------------------------
bool __thiscall MainChar::IsCharTargetableState(MainChar *this, Char *pkChar)
{
  Char *v2; // edi@1
  bool result; // al@2
  MobInfo *v4; // eax@12

  v2 = (Char *)this;
  if ( !pkChar
    || (unsigned __int8)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[1].Affect)(pkChar)
    && Char::GetMobInfo(pkChar)
    && (Char::CheckActState(pkChar, 500000)
     || Char::GetMobInfo(pkChar)->Type == 12
     || Char::GetMobInfo(pkChar)->Type == 24
     || Char::GetMobInfo(pkChar)->Type == 27
     || Char::GetMobInfo(pkChar)->Type == 18
     || Char::GetMobInfo(pkChar)->Type == 19
     || Char::GetMobInfo(pkChar)->Type == 13)
    || (v4 = Char::GetMobInfo(v2)) != 0 && v4->Type == 17
    || g_pkMainChar->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount > 0 )
    result = 0;
  else
    result = Char::IsFadeOut(pkChar) == 0;
  return result;
}

//----- (00666100) --------------------------------------------------------
void __thiscall MainChar::CancelMHEmotion(MainChar *this)
{
  Char *v1; // esi@1

  v1 = (Char *)this;
  if ( this->m_eReserveAct != 7 )
  {
    if ( this->baseclass_0.m_eEmotionState == 4 )
      MiniHouseIndoor::SetCharEmotion(&g_kWorld.m_MiniHouseIndoorMode, 0xFFFFu, -1, 0);
    Char::CancelEmotion(v1);
  }
}

//----- (00666140) --------------------------------------------------------
void __thiscall MainChar::CancelEmotion(MainChar *this)
{
  Char *v1; // esi@1
  PgFrameWork *v2; // eax@4

  v1 = (Char *)this;
  if ( this->m_eReserveAct != 7 )
  {
    if ( this->baseclass_0.m_eEmotionState == 4 )
    {
      if ( MiniHouseIndoor::SetCharEmotion(&g_kWorld.m_MiniHouseIndoorMode, 0xFFFFu, -1, 0) == 1 )
      {
        v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_REQ((GameFrameWork *)v2);
      }
    }
    Char::CancelEmotion(v1);
  }
}

//----- (00666190) --------------------------------------------------------
bool __thiscall MainChar::InitView(MainChar *this, unsigned int uiFrame)
{
  MainChar *v2; // edi@1
  bool result; // al@1
  NiShader *v4; // eax@2
  NiShader *v5; // eax@2
  NiNode *v6; // esi@2
  NiShader *v7; // ebx@2

  v2 = this;
  result = Char::InitView(&this->baseclass_0, 1, uiFrame);
  if ( result )
  {
    v4 = (NiShader *)((int (__stdcall *)(_DWORD))v2->baseclass_0.m_spScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(&unk_9C44A0);
    v5 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v4);
    v6 = v2->m_spCollider.m_pObject;
    v7 = v5;
    if ( (NiShader *)v6 != v5 )
    {
      if ( v6
        && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v2->m_spCollider.m_pObject = (NiNode *)v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
    }
    result = v2->m_spCollider.m_pObject != 0;
  }
  return result;
}

//----- (00666220) --------------------------------------------------------
void __thiscall MainChar::UpdateMoveProgress(MainChar *this)
{
  MainChar *v1; // esi@1
  MainChar::MoveState v2; // eax@1
  NiPoint3 *v3; // eax@2
  float v4; // ST10_4@2
  float v5; // ST14_4@2
  float v6; // ST18_4@2
  float v7; // ST18_4@2
  float v8; // ST18_4@2
  float v9; // ecx@2
  float v10; // edx@2
  float v11; // eax@2
  float v12; // ST10_4@2
  float v13; // ST14_4@2
  double v14; // st7@2
  float v15; // ST18_4@2
  bool v16; // zf@2
  float v17; // eax@2
  float v18; // ecx@2
  float v19; // edx@2
  int v20; // eax@9
  MainChar::ReserveAct v21; // eax@10
  float v22; // edx@13
  float v23; // eax@13
  Char *v24; // ecx@16
  float v25; // eax@16
  float v26; // edx@16
  int v27; // eax@17
  MainChar::ReserveAct v28; // eax@23
  Char *v29; // edi@25
  float v30; // ST18_4@26
  MainChar::ReserveAct v31; // ST00_4@27
  int v32; // eax@27

  v1 = this;
  v2 = this->m_eStartMoveTarget;
  if ( v2 == 1 )
  {
    v3 = this->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->GetCurrentPos((NpNs_MoveToTarget *)&this->baseclass_0.m_kMoveToTarget);
    v1->m_kResStartSPos.x = v3->x;
    v1->m_kResStartSPos.y = v3->y;
    v1->m_kResStartSPos.z = 0.0;
    v4 = v1->m_kResStartSPos.x - v1->m_kRevMovePos.x;
    v5 = v1->m_kResStartSPos.y - v1->m_kRevMovePos.y;
    v6 = v1->m_kResStartSPos.z - v1->m_kRevMovePos.z;
    v7 = v5 * v5 + v4 * v4 + v6 * v6;
    v8 = sqrt(v7);
    v9 = v1->m_kRevMovePos.x;
    v10 = v1->m_kRevMovePos.y;
    v1->m_fTotalMoveLength = v8;
    v11 = v1->m_kRevMovePos.z;
    v1->m_kFinalMoveTargetPos.x = v9;
    v1->m_kFinalMoveTargetPos.y = v10;
    v1->m_kFinalMoveTargetPos.z = v11;
    v12 = v1->m_kRevMovePos.x - v1->m_kResStartSPos.x;
    v13 = v1->m_kRevMovePos.y - v1->m_kResStartSPos.y;
    v14 = v1->m_kRevMovePos.z - v1->m_kResStartSPos.z;
    v1->m_pos3MoveDir.x = v12;
    v1->m_pos3MoveDir.y = v13;
    v15 = v14;
    v1->m_pos3MoveDir.z = v15;
    NiPoint3::Unitize(&v1->m_pos3MoveDir);
    v16 = v1->m_eReserveAct == 4;
    v17 = v1->m_kResStartSPos.x;
    v18 = v1->m_kResStartSPos.y;
    v19 = v1->m_kResStartSPos.z;
    v1->m_kStartMovePos.x = v17;
    v1->m_kRevMovePos.x = v17;
    v1->m_kNextMovePos.x = v17;
    v1->m_kStartMovePos.y = v18;
    v1->m_kRevMovePos.y = v18;
    v1->m_kNextMovePos.y = v18;
    v1->m_kStartMovePos.z = v19;
    v1->m_kRevMovePos.z = v19;
    v1->m_kNextMovePos.z = v19;
    v1->m_bFinalMoveTargetPos = 0;
    if ( v16 )
      v1->m_eReserveAct = 1;
    if ( !v1->m_eReserveAct )
      v1->m_eReserveAct = 1;
    v1->m_eStartMoveTarget = 2;
    MainChar::CulNextMovePosition(v1);
  }
  else
  {
    if ( v2 == 2 )
    {
      if ( MainChar::IsPassResTargetPosition(this) )
      {
        v20 = v1->m_nCurWP + 1;
        v1->m_eStartMoveTarget = 3;
        if ( v20 >= v1->m_nWPCnt )
        {
          v21 = v1->m_eStartReserveAct;
          if ( v21 != 1 )
          {
            if ( v21 == 3 )
              v1->m_bAttackWill = 1;
            MainChar::SetReserveAct(v1, v21);
            v22 = v1->m_kFinalMoveTargetPos.y;
            v23 = v1->m_kFinalMoveTargetPos.z;
            v1->m_kRevMovePos.x = v1->m_kFinalMoveTargetPos.x;
            v1->m_kRevMovePos.y = v22;
            v1->m_kRevMovePos.z = v23;
          }
        }
      }
      else
      {
        if ( MainChar::IsPassTargetPosition(v1) )
        {
          if ( v1->m_pkAttackTarget )
          {
            v24 = v1->m_pkTargetChar;
            v25 = v1->m_pos3InputTargetPos.y;
            v1->m_kRevMovePos.x = v1->m_pos3InputTargetPos.x;
            v26 = v1->m_pos3InputTargetPos.z;
            v1->m_kRevMovePos.y = v25;
            v1->m_nCurCornerCnt = 0;
            v1->m_eStartMoveTarget = 3;
            v1->m_kRevMovePos.z = v26;
            if ( v24 )
            {
              v27 = ((int (*)(void))v24->baseclass_0.vfptr[6].Deaffect)();
              LODWORD(v1->m_kRevMovePos.x) = *(_DWORD *)v27;
              LODWORD(v1->m_kRevMovePos.y) = *(_DWORD *)(v27 + 4);
              LODWORD(v1->m_kRevMovePos.z) = *(_DWORD *)(v27 + 8);
            }
            MainChar::StartPathFinding(v1);
          }
          else
          {
            MainChar::CulNextMovePosition(v1);
            v1->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos(
              (NpNs_MoveToTarget *)&v1->baseclass_0.m_kMoveToTarget,
              &v1->m_kStartMovePos);
            if ( v1->m_eReserveAct == 4 )
              v1->m_eReserveAct = 1;
            if ( !v1->m_eReserveAct )
              v1->m_eReserveAct = 1;
          }
        }
        else
        {
          v28 = v1->m_eStartReserveAct;
          if ( v28 == 3 || v28 == 4 )
          {
            v29 = v1->m_pkTargetChar;
            if ( v29 )
            {
              v30 = Char::GetDistanceToChar(&v1->baseclass_0, v1->m_pkTargetChar);
              ((void (__thiscall *)(MainChar *, Char *))v1->baseclass_0.baseclass_0.vfptr[9].SetAbStateProperty)(
                v1,
                v29);
              if ( v30 + 50.0 - 10.0 > v30 )
              {
                v31 = v1->m_eStartReserveAct;
                v1->m_bAttackWill = 1;
                MainChar::SetReserveAct(v1, v31);
                v32 = ((int (*)(void))v1->baseclass_0.baseclass_0.vfptr[6].Deaffect)();
                LODWORD(v1->m_kRevMovePos.x) = *(_DWORD *)v32;
                LODWORD(v1->m_kRevMovePos.y) = *(_DWORD *)(v32 + 4);
                LODWORD(v1->m_kRevMovePos.z) = *(_DWORD *)(v32 + 8);
              }
            }
          }
        }
      }
    }
  }
}

//----- (006665A0) --------------------------------------------------------
bool __thiscall MainChar::InitCharactorTitle(MainChar *this, PROTO_NC_CHAR_CLIENT_CHARTITLE_CMD *pkProto)
{
  MainChar *v2; // edi@1
  const char *v3; // eax@1
  unsigned __int16 v4; // ax@1
  bool result; // al@2
  int v6; // eax@4
  char *v7; // esi@4
  int v8; // edx@4
  char v9; // cl@5
  char v10; // cl@8
  unsigned int v11; // ebx@17
  int v12; // esi@18
  char v13; // cl@19
  const char *v14; // eax@20
  unsigned int i; // [sp+Ch] [bp-Ch]@3
  int uiCtInfoIndex; // [sp+10h] [bp-8h]@1

  v2 = this;
  *(_WORD *)&this->ms_ctInfo[0].Type = -16384;
  Char::SetCharTitleUse(&this->baseclass_0, 0);
  v3 = CCharacterTitleData::GetTitleString(&g_characterTitleData, 0, 0);
  Char::SetCharTitleName(&v2->baseclass_0, v3);
  v2->ms_uiTotalCharTitle = 1;
  v4 = pkProto->NumOfTitle;
  uiCtInfoIndex = 0;
  if ( v4 <= 0x210u )
  {
    i = 0;
    if ( v4 > 0u )
    {
      v6 = (int)&v2->ms_ctInfo[0]._bf1;
      v7 = &pkProto[1].CurrentTitleElement;
      v8 = (int)v2->ms_ctInfo;
      do
      {
        *(_BYTE *)(v8 + 2) = *(v7 - 1);
        v9 = *v7 ^ *(_BYTE *)(v6 + 2);
        ++uiCtInfoIndex;
        v6 += 2;
        v8 += 2;
        *(_BYTE *)v6 ^= v9 & 0x3F;
        *(_BYTE *)v6 = *v7 ^ (*(_BYTE *)v6 ^ *v7) & 0x3F;
        if ( (*v7 & 0xC0) == -64 && *(v7 - 1) != 10 )
          v2->ms_ctInfo[0]._bf1 = v2->ms_ctInfo[0]._bf1 & 0x3F | 0x80;
        v10 = *(_BYTE *)v8;
        if ( *(_BYTE *)v8 && v10 != 10 )
        {
          if ( (pkProto->CurrentTitle != v10
             || pkProto->CurrentTitleElement != (*(_BYTE *)v6 & 0x3F)
             || (*(_BYTE *)v6 & 0xC0) != -64)
            && (*v7 & 0xC0) == -64 )
            *(_BYTE *)v6 = *(_BYTE *)v6 & 0x3F | 0x80;
        }
        else
        {
          --uiCtInfoIndex;
          v8 -= 2;
          v6 -= 2;
        }
        v7 += 2;
        ++i;
      }
      while ( i < pkProto->NumOfTitle );
    }
    v2->ms_uiTotalCharTitle += uiCtInfoIndex;
    v11 = 0;
    if ( v2->ms_uiTotalCharTitle != 1 )
    {
      v12 = (int)&v2->ms_ctInfo[0]._bf1;
      do
      {
        v13 = *(_BYTE *)(v12 + 2);
        v12 += 2;
        if ( (v13 & 0xC0) == -64 )
        {
          v2->ms_ctInfo[0]._bf1 = v2->ms_ctInfo[0]._bf1 & 0x3F | 0x80;
          Char::SetCharTitleUse(&v2->baseclass_0, 1);
          v14 = CCharacterTitleData::GetTitleString(&g_characterTitleData, *(_BYTE *)(v12 - 1), *(_BYTE *)v12 & 0x3F);
          Char::SetCharTitleName(&v2->baseclass_0, v14);
        }
        ++v11;
      }
      while ( v11 < v2->ms_uiTotalCharTitle - 1 );
    }
    MainChar::InitCharactorWeaponTitle(v2, pkProto->CurrentTitle, pkProto->CurrentTitleMobID);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00666760) --------------------------------------------------------
void __thiscall MainChar::SetTargetChar(MainChar *this, Char *pkChar)
{
  MainChar *v2; // edi@1
  bool v3; // bl@1
  Char *v4; // edi@5
  bool v5; // bl@9
  void *v6; // eax@34
  unsigned int v7; // [sp-4h] [bp-18h]@3
  void *v8; // [sp-4h] [bp-18h]@16
  MainChar *v9; // [sp+Ch] [bp-8h]@1
  DirectUserMsgBody_TargetCharSoulCount_Clear pvBody; // [sp+13h] [bp-1h]@4

  v2 = this;
  v9 = this;
  v3 = 1;
  if ( AbStateInfectee::IsInList(&this->baseclass_0.baseclass_0, STA_CANNOTCHANGETARGET) == 1 && pkChar )
  {
    v7 = -1238683870;
LABEL_34:
    v6 = TextData2::Get(v7);
    ITask::DirectDispatchAll(25, v6);
    return;
  }
  pvBody.m_bShowUI = 1;
  switch ( Char::GetClass(&v2->baseclass_0) )
  {
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v4 = v2->m_pkTargetChar;
      if ( v4 )
      {
        if ( pkChar )
        {
          v5 = (unsigned __int8)((int (__thiscall *)(Char *))pkChar->baseclass_0.vfptr[1].Affect)(pkChar)
            || pkChar->m_bUserCharacter;
          if ( Char::IsResource(pkChar) || Char::IsLinkGate(pkChar) || Char::IsNPC(pkChar) )
            v5 = 0;
          pvBody.m_bShowUI = v5;
          if ( v4->m_kHandle == pkChar->m_kHandle )
            goto LABEL_18;
          v8 = &pvBody;
LABEL_17:
          ITask::DirectDispatchAll(76, v8);
LABEL_18:
          v2 = v9;
          goto LABEL_19;
        }
      }
      else
      {
        if ( pkChar )
        {
          v3 = (unsigned __int8)((int (__thiscall *)(Char *))pkChar->baseclass_0.vfptr[1].Affect)(pkChar)
            || pkChar->m_bUserCharacter ? 1 : 0;
          if ( Char::IsResource(pkChar) || Char::IsLinkGate(pkChar) || Char::IsNPC(pkChar) )
            v3 = 0;
        }
      }
      pvBody.m_bShowUI = v3;
      v8 = &pvBody;
      goto LABEL_17;
    default:
      pvBody.m_bShowUI = 0;
      ITask::DirectDispatchAll(76, &pvBody);
LABEL_19:
      if ( !pkChar )
      {
        v2->m_pkTargetChar = 0;
        return;
      }
      if ( (unsigned int)(nowState - 3) <= 3 )
      {
        v7 = 19356529;
        goto LABEL_34;
      }
      v2->m_pkTargetChar = pkChar;
      return;
  }
}

//----- (00666900) --------------------------------------------------------
void __thiscall MainChar::MetamorphosisTargetClear(MainChar *this)
{
  MainChar *v1; // esi@1
  MobInfo *v2; // eax@1
  void *v3; // [sp-4h] [bp-Ch]@4
  char pvBody; // [sp+7h] [bp-1h]@3

  v1 = this;
  v2 = Char::GetMobInfo(&this->baseclass_0);
  if ( v2 && v2->Type == 17 )
  {
    AbStateInfectee::IsInList(&v1->baseclass_0.baseclass_0, STA_CANNOTCHANGETARGET);
    pvBody = 1;
    switch ( Char::GetClass(&v1->baseclass_0) )
    {
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        pvBody = 1;
        v3 = &pvBody;
        break;
      default:
        pvBody = 0;
        v3 = &pvBody;
        break;
    }
    ITask::DirectDispatchAll(76, v3);
    v1->m_pkTargetChar = 0;
  }
}

//----- (006669A0) --------------------------------------------------------
void __thiscall MainChar::ExecuteDyingProcess(MainChar *this)
{
  PgFrameWork *v1; // eax@1
  PgFrameWork *v2; // esi@1
  ServerMenuWin *v3; // edi@2
  ReviveMenuWin *v4; // ebx@2
  char v5; // bl@4
  UserTradeWin *v6; // edi@6
  MapNavigator *v7; // edi@8
  MapNavigator *v8; // ebx@9
  GTInformWin *v9; // esi@13
  D3DXCOLOR *v10; // eax@14
  D3DXCOLOR v11; // ST04_16@14
  char *v12; // eax@14
  char v13; // [sp+14h] [bp-18h]@14
  Char *thisa; // [sp+24h] [bp-8h]@1
  NiPointer<MapNavigator> result; // [sp+28h] [bp-4h]@8

  thisa = (Char *)this;
  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v2 = v1;
  if ( v1 )
  {
    PrivateStoreWin::SetPrivateStoreOpen((PrivateStoreWin *)v1[20].m_kMsgQ.m_uiAlloced, 0);
    InventoryWin::LockAllItem((InventoryWin *)v2[19].m_BackFrameID);
    v3 = (ServerMenuWin *)v2[26].baseclass_0.m_pkMsgHooker;
    v4 = (ReviveMenuWin *)v2[26].m_kMsgQ.m_pBase;
    if ( (unsigned __int8)((int (__thiscall *)(IDirectMessenger *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2[26].baseclass_0.m_pkMsgHooker) )
    {
      if ( (unsigned __int8)((int (__thiscall *)(ReviveMenuWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v4) )
      {
        v5 = ReviveMenuWin::GetPriority(v4);
        if ( ServerMenuWin::GetPriority(v3) < (unsigned __int8)v5 )
          ServerMenuWin::OnBut2(v3);
      }
    }
    v6 = (UserTradeWin *)v2[25].m_BackFrameID;
    if ( (unsigned __int8)((int (__thiscall *)(void *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2[25].m_BackFrameID) )
      UserTradeWin::OnCmdCancel(v6);
    v7 = MapNavigator::GetMapNavigator(&result)->m_pObject;
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
    }
    if ( v7->m_bIsWorking )
    {
      v7->m_bIsWorking = 0;
      v9 = (GTInformWin *)v2[33].m_kMsgQ.m_uiHead;
      if ( v9 )
      {
        GTInformWin::Clear(v9);
        v10 = Color::GetDxColor((D3DXCOLOR *)&v13, -1, -112, 0, -1);
        *(_QWORD *)&v11.r = *(_QWORD *)&v10->r;
        *(_QWORD *)&v11.b = *(_QWORD *)&v10->b;
        v12 = TextData2::Get(0x3C517589u);
        GTInformWin::AddText(v9, v12, COERCE_D3DXCOLOR(v11.r), 0, 3.0);
      }
    }
  }
  Char::ExecuteDyingProcess(thisa);
}

//----- (00666B00) --------------------------------------------------------
void __thiscall MainChar::Update(MainChar *this, float fTime)
{
  MainChar *v2; // esi@1
  unsigned int v3; // eax@5
  unsigned int v4; // eax@7
  PgFrameWork *v5; // eax@8
  Mover *v6; // eax@13
  void *v7; // [sp-4h] [bp-Ch]@6
  int v8; // [sp+0h] [bp-8h]@6

  v2 = this;
  Char::Update(&this->baseclass_0, fTime);
  MainChar::UpdatePathFinding(v2);
  MainChar::UpdateMoveProgress(v2);
  if ( (int)v2->baseclass_0.baseclass_0.vfptr[13].GetAbstateColor((AbStateInfectee *)v2) == 2 )
  {
    if ( !b_sMainCharPause )
    {
      CNSTimer_Interval::ReSet(&v2->m_kMainCharMotionPTimer, Timer::ms_fCurTime);
      v2->m_kMainCharMotionPTimer.m_fCheckTime = 3.0;
      b_sMainCharPause = 1;
    }
    if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kMainCharMotionPTimer, fTime) )
    {
      v3 = ((int (__thiscall *)(MainChar *))v2->baseclass_0.baseclass_0.vfptr[14].Affect)(v2);
      if ( Char::GetEmotionIndex(&v2->baseclass_0, v3) == -1 )
      {
        LOBYTE(v8) = 0;
        v7 = GameFrameWorkID;
      }
      else
      {
        v4 = ((int (__thiscall *)(MainChar *))v2->baseclass_0.baseclass_0.vfptr[14].Affect)(v2);
        v8 = (unsigned __int8)Char::GetEmotionIndex(&v2->baseclass_0, v4);
        v7 = GameFrameWorkID;
      }
      v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, v7);
      GameFrameWork::NcActEmoticon_Cmd((GameFrameWork *)v5, v8);
    }
  }
  else
  {
    b_sMainCharPause = 0;
  }
  if ( v2->m_bAirBorne && Skill::IsSkillUsePossible(v2->m_kAirBorneID) )
    v2->m_bAirBorne = 0;
  v6 = v2->baseclass_0.m_pkMover;
  if ( v6 )
    v6->m_bWay = v2->m_bWay;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00666C20) --------------------------------------------------------
void __thiscall MainChar::StartMoveTarget(MainChar *this)
{
  MainChar *v1; // esi@1
  float v2; // ecx@2
  float v3; // edx@2

  v1 = this;
  if ( this->m_bPathFindingStart )
  {
    v2 = this->m_kRevMovePos.y;
    v3 = v1->m_kRevMovePos.z;
    v1->m_nCurCornerCnt = 0;
    v1->m_bPathFindingStart = 0;
    v1->m_pos3InputTargetPos.x = v1->m_kRevMovePos.x;
    v1->m_pos3InputTargetPos.y = v2;
    v1->m_eStartMoveTarget = 3;
    v1->m_pos3InputTargetPos.z = v3;
    MainChar::StartPathFinding(v1);
  }
  MainChar::UpdatePathFinding(v1);
  MainChar::UpdateMoveProgress(v1);
}

//----- (00666C80) --------------------------------------------------------
void __thiscall MainChar::ActEmotionIndex(MainChar *this, unsigned int uiEmotionIndex)
{
  MainChar *v2; // esi@1
  int v3; // edi@7
  int v4; // eax@9
  int v5; // edi@10
  char v6; // cl@13
  char v7; // bl@13
  MHEmotion *v8; // esi@13
  PgFrameWork *v9; // eax@14
  AbStateInfecteeVtbl *v10; // esi@16
  int v11; // eax@16
  unsigned __int16 v12; // ax@17
  unsigned int v13; // eax@18
  ActionViewInfo *v14; // eax@19
  NiActorManager *v15; // ecx@20
  int (__thiscall *v16)(AbStateInfectee *); // edx@22
  NiPoint3 kGroundPos; // [sp+4h] [bp-1Ch]@14
  mhCharEmotionInfo Info; // [sp+10h] [bp-10h]@13
  int ui1stAniCode; // [sp+1Ch] [bp-4h]@1

  v2 = this;
  Char::GetAniCode(&this->baseclass_0, 0, (unsigned int *)&ui1stAniCode, 0);
  if ( (ui1stAniCode == 100000 || ui1stAniCode == 800000 || v2->baseclass_0.m_eEmotionState == 4)
    && !JumpProcessor::IsJump(&v2->baseclass_0.m_kJumpProcessor) )
  {
    if ( v2->baseclass_0.m_eEmotionState == 2 )
    {
      ((void (__thiscall *)(MainChar *))v2->baseclass_0.baseclass_0.vfptr[13].Deaffect)(v2);
      return;
    }
    v3 = ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable
                                                                   + 16))(
                            ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable,
                            uiEmotionIndex) )
    {
      if ( (unsigned __int16)uiEmotionIndex <= *(_WORD *)(v3 + 200) )
      {
        v4 = *(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)uiEmotionIndex;
        if ( *(_DWORD *)v4 )
        {
          v5 = *(_DWORD *)v4;
          if ( *(_DWORD *)v4 )
          {
            if ( v2->baseclass_0.m_eEmotionState != 4 || !nowState )
            {
              v12 = *(_WORD *)(v5 + 65);
              if ( v12 == -1 )
              {
                v2->baseclass_0.m_uiEmotionIndex = uiEmotionIndex;
                v13 = *(_DWORD *)(v5 + 105);
              }
              else
              {
                v14 = IIDTableBase<ActionViewInfo_ActionViewTable_unsigned_short>::GetByID(v12, 1);
                if ( !v14 || (v15 = v2->baseclass_0.m_spActor.m_pObject) == 0 )
                  return;
                if ( v14->nAfterCode == v15->m_eCurID )
                {
                  v16 = v2->baseclass_0.baseclass_0.vfptr[14].IsVisible;
                  v2->baseclass_0.m_uiEmotionIndex = uiEmotionIndex;
                  ((void (__thiscall *)(MainChar *, _DWORD))v16)(v2, *(_DWORD *)(v5 + 105));
                  return;
                }
                v2->baseclass_0.m_uiEmotionIndex = v14->nIndex;
                v13 = v14->nEventCode;
              }
              ((void (__thiscall *)(MainChar *, unsigned int))v2->baseclass_0.baseclass_0.vfptr[14].IsVisible)(v2, v13);
              return;
            }
            v6 = *(_BYTE *)v5;
            v7 = WantedActPos[0];
            *(_DWORD *)&Info.TargetObjID = *(_DWORD *)&mhObj;
            v8 = MiniHouseEmotionTab::GetNonMenuEmotion(*(_WORD *)dword_AA5140, v6);
            if ( v8 )
            {
              v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
              GameFrameWork::GetGroundPosCam((GameFrameWork *)v9, &kGroundPos);
              if ( Info.TargetObjID == -1 )
              {
                ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[13].DeleteAbStateByAbstateIndex)(0);
                v10 = g_pkMainChar->baseclass_0.vfptr;
                v11 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
                ((void (__thiscall *)(Char *, int))v10[6].Affect)(g_pkMainChar, v11);
              }
              else
              {
                MiniHouseIndoor::StartMHCharEmotion(
                  &g_kWorld.m_MiniHouseIndoorMode,
                  &kGroundPos,
                  (unsigned __int8)v7,
                  v8->ActionIndex);
              }
            }
          }
        }
      }
    }
  }
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;
// AA5140: using guessed type int dword_AA5140;

//----- (00666E70) --------------------------------------------------------
MainChar::TargetType __thiscall MainChar::GetTargetType(MainChar *this, Char *pkTarget)
{
  MainChar *v2; // ebx@1
  MobInfo *v3; // edi@5
  CMiniHouseMgr *v5; // eax@10
  stMINIHOUSEINFO *v6; // eax@10
  const char *v7; // eax@15
  PartyMemberInfo *v8; // edi@15
  const char *v9; // eax@15
  RaidMemberInfo *v10; // eax@15
  char v11; // cl@19
  const char *v12; // eax@20
  const char *v13; // eax@21
  unsigned int v14; // ecx@23
  char v15; // al@24
  const char *v16; // eax@29
  const char *v17; // eax@30
  CClientGuildAcademy *v18; // eax@32
  CClientGuildAcademy *v19; // eax@34
  CClientGuildAcademy *v20; // eax@36
  CClientGuild *v21; // eax@38
  CClientGuild *v22; // eax@40
  CClientGuild *v23; // eax@42
  char v24; // al@44
  CClientGuild *v25; // eax@47
  CClientGuild *v26; // edi@47
  unsigned int v27; // esi@48
  Name5 v28; // [sp-14h] [bp-20h]@15
  unsigned int v29; // [sp-4h] [bp-10h]@10

  v2 = this;
  if ( !pkTarget || (MainChar *)pkTarget == this )
    return 0;
  if ( pkTarget->m_byType == 5 )
    return 3;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkTarget->baseclass_0.vfptr[1].Affect)(pkTarget) )
  {
    v3 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(pkTarget->m_kCharShape.m_kMobID, 1);
    if ( !v3 )
      goto LABEL_53;
    if ( Char::IsNPC(pkTarget) )
      return (v3->IsPlayerSide == 2) + 1;
    if ( v3->Type != 27 )
    {
LABEL_53:
      if ( v3->Type == 24
        || (v29 = pkTarget->m_kHandle,
            v5 = (CMiniHouseMgr *)CGuildMonster::GetInstance(),
            (v6 = CGuildMonster::GetGuildEumFromMob(v5, v29)) != 0)
        && (stMINIHOUSEINFO *)v2->baseclass_0.m_dwGuildRegNum == v6 )
        return 1;
      return 3;
    }
    return 0;
  }
  if ( (unsigned __int8)pkTarget->baseclass_0.vfptr[20].GetAbstateColor((AbStateInfectee *)pkTarget) )
    return 9;
  v7 = (const char *)((int (__thiscall *)(_DWORD))pkTarget->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(pkTarget);
  Name5::Name5(&v28, v7);
  v8 = Party::GetMemberInfo(&g_kParty, v28);
  v9 = (const char *)((int (__thiscall *)(_DWORD))pkTarget->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(pkTarget);
  Name5::Name5(&v28, v9);
  v10 = RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, v28);
  if ( !v8 && !v10 && v2->m_byPkGrade & 2 || pkTarget->baseclass_0.m_kAbStateProperty.iKarenCaptivateStateCount > 0 )
    return 3;
  v11 = v2->m_byPkGrade;
  if ( !(v11 & 1) )
  {
    v24 = v2->baseclass_0.m_byKQTeamType;
    if ( v24 == 2 || !(v11 & 4) || v24 == pkTarget->m_byKQTeamType )
      goto LABEL_47;
    return 3;
  }
  v12 = (const char *)((int (__thiscall *)(_DWORD))pkTarget->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(pkTarget);
  Name5::Name5(&v28, v12);
  if ( Party::GetMemberInfo(&g_kParty, v28)
    || (v13 = (const char *)((int (__thiscall *)(_DWORD))pkTarget->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(pkTarget),
        Name5::Name5(&v28, v13),
        RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, v28)) )
  {
    v16 = (const char *)((int (__thiscall *)(_DWORD))pkTarget->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(pkTarget);
    Name5::Name5(&v28, v16);
    if ( !Party::GetMemberInfo(&g_kParty, v28)
      && (v17 = (const char *)((int (__thiscall *)(_DWORD))pkTarget->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(pkTarget),
          Name5::Name5(&v28, v17),
          !RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, v28))
      || byte_B30C4C != 4 )
      goto LABEL_47;
    v18 = GuildAcademyTask::GetGuildAcademy();
    if ( CClientGuildAcademy::IsGuildWar(v18) )
    {
      if ( pkTarget->m_GuildAcademyMemberFlag != 1 )
        goto LABEL_36;
      v29 = pkTarget->m_dwGuildRegNum;
      v19 = GuildAcademyTask::GetGuildAcademy();
      if ( !CClientGuildAcademy::FindEnemyGuildAcademyMember(v19, v29) )
      {
        if ( pkTarget->m_GuildAcademyMemberFlag != 1 )
        {
LABEL_36:
          v29 = pkTarget->m_dwGuildRegNum;
          v20 = GuildAcademyTask::GetGuildAcademy();
          if ( CClientGuildAcademy::FindEnemyGuildAcademyMember(v20, v29) )
            return 3;
        }
LABEL_47:
        v25 = GuildTask::GetGuild();
        v26 = v25;
        if ( !v25
          || (v27 = pkTarget->m_dwGuildRegNum, !CClientGuild::IsAttackableEnemyGuild(v25, v27))
          && !CClientGuild::IsGttAttackableEnemyGuild(v26, v27) )
          return 0;
        return 3;
      }
    }
    else
    {
      v29 = pkTarget->m_dwGuildRegNum;
      v21 = GuildTask::GetGuild();
      if ( !CClientGuild::IsEnemyGuild(v21, v29) )
        goto LABEL_47;
      if ( pkTarget->m_GuildAcademyMemberFlag != 1
        || (v29 = pkTarget->m_dwGuildRegNum, v22 = GuildTask::GetGuild(),
                                             !CClientGuild::IsAttackableEnemyGuild(v22, v29)) )
      {
        if ( !pkTarget->m_GuildAcademyMemberFlag )
        {
          v29 = pkTarget->m_dwGuildRegNum;
          v23 = GuildTask::GetGuild();
          if ( CClientGuild::IsAttackableEnemyGuild(v23, v29) )
            return 3;
        }
        goto LABEL_47;
      }
    }
    return 3;
  }
  if ( byte_B30C4C != 4
    || (v14 = pkTarget->m_dwGuildRegNum) == 0
    || ((v15 = pkTarget->m_GuildAcademyMemberFlag, v15 != 1) || g_pkMainChar->m_dwGuildRegNum != v14)
    && (v15 || g_pkMainChar->m_dwGuildRegNum != v14) )
    return 3;
  return 0;
}
// B30C4C: using guessed type char byte_B30C4C;

//----- (006671C0) --------------------------------------------------------
void __thiscall MainChar::ResetOnLink(MainChar *this)
{
  MainChar *v1; // esi@1
  EffectObjectMgr *v2; // ebx@1
  bool (__thiscall *v3)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@4
  char v4; // al@4
  AbStateInfecteeVtbl *v5; // edx@4
  bool (__thiscall *v6)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@4
  char v7; // al@4
  CGuildMonster *v8; // eax@6
  int v9; // edi@8
  int v10; // ebx@9
  const char *v11; // eax@9
  EffectObjectMgr *v12; // eax@16
  void *v13; // [sp-4h] [bp-10h]@2
  char pvBody; // [sp+Bh] [bp-1h]@1

  v1 = this;
  ((void (*)(void))this->baseclass_0.baseclass_0.vfptr[13].SetAbStateProperty)();
  ((void (__thiscall *)(MainChar *))v1->baseclass_0.baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v1);
  Char::ResetSkillAction(&v1->baseclass_0);
  v1->baseclass_0.m_AttackTargetHandle = -1;
  Char::ResetAction(&v1->baseclass_0);
  v2 = 0;
  v1->m_kReserveSkillID = -1;
  v1->m_eReserveAct = 0;
  v1->m_eReserveSkillType = 0;
  v1->m_eStartReserveAct = 0;
  v1->m_bAttackWill = 0;
  AbStateInfectee::IsInList(&v1->baseclass_0.baseclass_0, STA_CANNOTCHANGETARGET);
  pvBody = 1;
  switch ( Char::GetClass(&v1->baseclass_0) )
  {
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      pvBody = 1;
      v13 = &pvBody;
      break;
    default:
      pvBody = 0;
      v13 = &pvBody;
      break;
  }
  ITask::DirectDispatchAll(76, v13);
  v3 = v1->baseclass_0.baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
  v1->m_pkTargetChar = 0;
  v1->m_bNewClickChar = 0;
  v4 = ((int (__thiscall *)(MainChar *))v3)(v1);
  v5 = v1->baseclass_0.baseclass_0.vfptr;
  pvBody = v4;
  v6 = v5[1].AddAbStateByAbstateIndex;
  v1->baseclass_0.m_byMode = 1;
  v1->baseclass_0.m_eStandMode = 0;
  v7 = ((int (__thiscall *)(MainChar *))v6)(v1);
  if ( pvBody != v7 )
    v1->baseclass_0.m_bIsChangeCampMode = 1;
  AttackSequenceManager::ClearAttSeq(&v1->baseclass_0.baseclass_54);
  AbStateInfectee::ClearAbState(&v1->baseclass_0.baseclass_0, 1);
  v1->baseclass_0.m_bWillDead = 0;
  Char::InitHpUpdate(&v1->baseclass_0);
  v1->baseclass_0.m_pkMover = 0;
  Char::RideOff(&v1->baseclass_0);
  ((void (__thiscall *)(MainChar *, signed int))v1->baseclass_0.baseclass_0.vfptr[7].AddAbStateByAbstateIndex)(v1, 1);
  ITask::DirectDispatchAll(32, v1);
  v8 = CGuildMonster::GetInstance();
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v8);
  if ( (unsigned __int8)((int (__thiscall *)(MainChar *))v1->baseclass_0.baseclass_0.vfptr[15].SetAbStateProperty)(v1) )
    Char::GetoutOfPet(&v1->baseclass_0);
  StatPointReqTask::ClearState();
  v9 = unk_B703F0;
  if ( unk_B703F0 )
  {
    do
    {
      v10 = *(_DWORD *)(v9 + 8);
      v11 = *(const char **)(v10 + 8);
      v9 = *(_DWORD *)v9;
      if ( v11 && !strncmp(v11, "MsgBox", 6u) )
      {
        MsgBox::CloseWithCancel((MsgBox *)v10);
        PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v10);
      }
    }
    while ( v9 );
    v2 = 0;
  }
  if ( (EffectObjectMgr *)ISingletonTask<ItemUseTask>::ms_pkSingletonTask != v2 )
    *(_DWORD *)(ISingletonTask<ItemUseTask>::ms_pkSingletonTask + 20) = 2;
  v1->m_byPkGrade = 0;
  v12 = EffectObjectMgr::GetMgr();
  if ( v12 != v2 )
    EffectObjectMgr::RemoveAllEffectObject(v12);
}
// A98788: using guessed type int ISingletonTask_ItemUseTask___ms_pkSingletonTask;

//----- (006673B0) --------------------------------------------------------
NiPoint3 *__thiscall NpNs_MoveToTarget::GetCurrentPos(NpNs_MoveToTarget *this)
{
  return &this->m_pos3Cur;
}

//----- (006673C0) --------------------------------------------------------
void *__thiscall MainChar::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return MainChar::_scalar_deleting_destructor_((MainChar *)((char *)this - 60), a2);
}

//----- (006673D0) --------------------------------------------------------
void *__thiscall MainChar::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return MainChar::_scalar_deleting_destructor_((MainChar *)((char *)this - 84), a2);
}

//----- (006673E0) --------------------------------------------------------
bool __thiscall MainChar::SetTargetAnimation(MainChar *this, unsigned int uiAniEventCode)
{
  return Char::SetTargetAnimation(&this->baseclass_0, uiAniEventCode, 0, 0);
}

//----- (00667400) --------------------------------------------------------
float __thiscall MainChar::GetCameraLookHeight(MainChar *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = 32.0;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (00667410) --------------------------------------------------------
void __thiscall MainChar::SetDir(Char *this, NiPoint3 *kDir)
{
  NiPoint3 kUpDir; // [sp+0h] [bp-Ch]@1

  kUpDir.x = 0.0;
  kUpDir.y = 0.0;
  kUpDir.z = 1.0;
  NpNs_SmoothRotateControler::SetDirection(&this->m_kSmoothRotater, kDir, &kUpDir);
}

//----- (00667440) --------------------------------------------------------
void __thiscall MainChar::StopMoveTarget(MainChar *this)
{
  MainChar *v1; // esi@1

  v1 = this;
  Char::StopMoveTarget(&this->baseclass_0);
  v1->m_eStartMoveTarget = 0;
  v1->m_bWay = 0;
}

//----- (00667460) --------------------------------------------------------
NiNode *__thiscall MainChar::GetCollider(MainChar *this)
{
  return this->m_spCollider.m_pObject;
}

//----- (00667470) --------------------------------------------------------
void __thiscall MainChar::InitPos(MainChar *this, NiPoint3 *kPos, NiPoint3 *kDir)
{
  MainChar *v3; // esi@1
  float v4; // ecx@1
  float v5; // edi@1

  v3 = this;
  ((void (*)(void))this->baseclass_0.baseclass_0.vfptr[21].IsVisible)();
  Char::InitPos(&v3->baseclass_0, kPos, kDir);
  v4 = kPos->y;
  v5 = kPos->z;
  v3->m_kFinalMoveTargetPos.x = kPos->x;
  v3->m_kFinalMoveTargetPos.y = v4;
  v3->m_kFinalMoveTargetPos.z = v5;
}

//----- (006674B0) --------------------------------------------------------
void __thiscall MainChar::SetPos(MainChar *this, NiPoint3 *kPos)
{
  MainChar *v2; // esi@1
  NiNode *v3; // esi@1

  v2 = this;
  this->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->SetCurrentPos(
    (NpNs_MoveToTarget *)&this->baseclass_0.m_kMoveToTarget,
    kPos);
  v2->baseclass_0.m_pos3CameraPos.x = kPos->x;
  v2->baseclass_0.m_pos3CameraPos.y = kPos->y;
  v2->baseclass_0.m_pos3CameraPos.z = kPos->z;
  v3 = v2->m_spCollider.m_pObject;
  if ( v3 )
  {
    v3->baseclass_0.m_kLocal.m_Translate.x = kPos->x;
    v3->baseclass_0.m_kLocal.m_Translate.y = kPos->y;
    v3->baseclass_0.m_kLocal.m_Translate.z = kPos->z;
  }
}

//----- (00667510) --------------------------------------------------------
void *__thiscall MainChar::_scalar_deleting_destructor_(MainChar *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MainChar::_MainChar(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00667540) --------------------------------------------------------
void __thiscall MoveToTarget::Copy(MoveToTarget *this, MoveToTarget *kMoveToTarget)
{
  kMoveToTarget->baseclass_0.baseclass_0.m_bmove = this->baseclass_0.baseclass_0.m_bmove;
  kMoveToTarget->baseclass_0.baseclass_0.m_fStartTime = this->baseclass_0.baseclass_0.m_fStartTime;
  kMoveToTarget->baseclass_0.baseclass_0.m_fOldTime = this->baseclass_0.baseclass_0.m_fOldTime;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3Start.x = this->baseclass_0.baseclass_0.m_pos3Start.x;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3Start.y = this->baseclass_0.baseclass_0.m_pos3Start.y;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3Start.z = this->baseclass_0.baseclass_0.m_pos3Start.z;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3End.x = this->baseclass_0.baseclass_0.m_pos3End.x;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3End.y = this->baseclass_0.baseclass_0.m_pos3End.y;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3End.z = this->baseclass_0.baseclass_0.m_pos3End.z;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3Cur.x = this->baseclass_0.baseclass_0.m_pos3Cur.x;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3Cur.y = this->baseclass_0.baseclass_0.m_pos3Cur.y;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3Cur.z = this->baseclass_0.baseclass_0.m_pos3Cur.z;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3OldPos.x = this->baseclass_0.baseclass_0.m_pos3OldPos.x;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3OldPos.y = this->baseclass_0.baseclass_0.m_pos3OldPos.y;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3OldPos.z = this->baseclass_0.baseclass_0.m_pos3OldPos.z;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3DirMove.x = this->baseclass_0.baseclass_0.m_pos3DirMove.x;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3DirMove.y = this->baseclass_0.baseclass_0.m_pos3DirMove.y;
  kMoveToTarget->baseclass_0.baseclass_0.m_pos3DirMove.z = this->baseclass_0.baseclass_0.m_pos3DirMove.z;
  kMoveToTarget->baseclass_0.baseclass_0.m_fMoveLength = this->baseclass_0.baseclass_0.m_fMoveLength;
  kMoveToTarget->baseclass_0.baseclass_0.m_fSpeed = this->baseclass_0.baseclass_0.m_fSpeed;
  kMoveToTarget->baseclass_0.baseclass_0.m_bmove = this->baseclass_0.baseclass_0.m_bmove;
}

//----- (006675D0) --------------------------------------------------------
void __thiscall MoveToTarget::MoveToTarget(MoveToTarget *this)
{
  MoveToTarget *v1; // esi@1

  v1 = this;
  NpNs_MoveToTarget::NpNs_MoveToTarget(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.m_fFlateHeight = 0.0;
  v1->baseclass_0.baseclass_0.vfptr = (NpNs_MoveToTargetVtbl *)&MoveToTarget::_vftable_;
  v1->m_fWillSpeed = 0.0;
  v1->m_bEmotion = 0;
}
// 9C49E4: using guessed type int (__thiscall *MoveToTarget___vftable_)(void *p, char);

//----- (006675F0) --------------------------------------------------------
void __thiscall MoveToTarget::_MoveToTarget(MoveToTarget *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NpNs_MoveToTargetVtbl *)&Ns_XYFlatMoveToTarget::_vftable_;
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&this->baseclass_0.baseclass_0);
}
// 9C4994: using guessed type int (__thiscall *Ns_XYFlatMoveToTarget___vftable_)(void *p, char);

//----- (00667600) --------------------------------------------------------
void __thiscall MoveToTarget::ChangeSpeed(MoveToTarget *this, float fSpeed)
{
  MoveToTarget *v2; // esi@1
  NpNs_MoveToTargetVtbl *v3; // eax@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.vfptr;
  this->baseclass_0.baseclass_0.m_fSpeed = fSpeed;
  if ( (unsigned __int8)((int (*)(void))v3->IsMove)() )
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.vfptr->StartMove)(
      v2,
      LODWORD(Timer::ms_fCurTime),
      &v2->baseclass_0.baseclass_0.m_pos3Cur,
      &v2->baseclass_0.baseclass_0.m_pos3End);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00667640) --------------------------------------------------------
void __thiscall MoveToTarget::SetEmotion(MoveToTarget *this, bool bEmotion)
{
  double v2; // st7@0
  MoveToTarget *v3; // esi@1
  int (*v4)(void); // edx@2
  bool (__thiscall *v5)(NpNs_MoveToTarget *); // eax@4

  v3 = this;
  this->m_bEmotion = bEmotion;
  if ( bEmotion )
  {
    ((void (*)(void))this->baseclass_0.baseclass_0.vfptr->GetSpeed)();
    v3->m_fWillSpeed = v2;
    v5 = v3->baseclass_0.baseclass_0.vfptr->IsMove;
    v3->baseclass_0.baseclass_0.m_fSpeed = 0.0;
    if ( v5(&v3->baseclass_0.baseclass_0) )
      ((void (__thiscall *)(MoveToTarget *, _DWORD, NiPoint3 *, NiPoint3 *))v3->baseclass_0.baseclass_0.vfptr->StartMove)(
        v3,
        LODWORD(Timer::ms_fCurTime),
        &v3->baseclass_0.baseclass_0.m_pos3Cur,
        &v3->baseclass_0.baseclass_0.m_pos3End);
  }
  else
  {
    v4 = (int (*)(void))this->baseclass_0.baseclass_0.vfptr->IsMove;
    this->baseclass_0.baseclass_0.m_fSpeed = this->m_fWillSpeed;
    if ( (unsigned __int8)v4() )
      ((void (__thiscall *)(MoveToTarget *, _DWORD, NiPoint3 *, NiPoint3 *))v3->baseclass_0.baseclass_0.vfptr->StartMove)(
        v3,
        LODWORD(Timer::ms_fCurTime),
        &v3->baseclass_0.baseclass_0.m_pos3Cur,
        &v3->baseclass_0.baseclass_0.m_pos3End);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006676C0) --------------------------------------------------------
void __thiscall MoveToTarget::SetSpeed(MoveToTarget *this, float _fMovingSpeed)
{
  bool v2; // zf@1

  v2 = this->m_bEmotion == 0;
  this->m_fWillSpeed = _fMovingSpeed;
  if ( v2 )
    this->baseclass_0.baseclass_0.m_fSpeed = _fMovingSpeed;
}

//----- (006676E0) --------------------------------------------------------
void __thiscall NpNs_MoveToTarget::SetSpeed(NpNs_MoveToTarget *this, float _fMovingSpeed)
{
  this->m_fSpeed = _fMovingSpeed;
}

//----- (006676F0) --------------------------------------------------------
bool __thiscall NpNs_MoveToTarget::IsMove(NpNs_MoveToTarget *this)
{
  return this->m_bmove;
}

//----- (00667700) --------------------------------------------------------
float __thiscall NpNs_MoveToTarget::GetSpeed(NpNs_MoveToTarget *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fSpeed;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (00667710) --------------------------------------------------------
void __thiscall NpNs_MoveToTarget::SetCurrentPos(NpNs_MoveToTarget *this, NiPoint3 *_pos3)
{
  NpNs_MoveToTarget *v2; // esi@1

  v2 = this;
  ((void (*)(void))this->vfptr->Stop)();
  v2->vfptr->SetCalcuCurrentPos(v2, _pos3);
  v2->m_pos3Cur.x = _pos3->x;
  v2->m_pos3Cur.y = _pos3->y;
  v2->m_pos3Cur.z = _pos3->z;
}

//----- (00667750) --------------------------------------------------------
long double *__thiscall Wml::Capsule3<double>::Radius(Wml::Capsule3<double> *this)
{
  return &this->m_fRadius;
}

//----- (00667760) --------------------------------------------------------
NiPoint3 *__thiscall NpNs_MoveToTarget::GetMoveDir(NpNs_MoveToTarget *this)
{
  return &this->m_pos3DirMove;
}

//----- (00667770) --------------------------------------------------------
NiPoint3 *__thiscall NpNs_MoveToTarget::GetOldPos(NpNs_MoveToTarget *this)
{
  return &this->m_pos3OldPos;
}

//----- (00667780) --------------------------------------------------------
void __thiscall NpNs_MoveToTarget::GetCurrentPos(NpNs_MoveToTarget *this, NiPoint3 *pos3_)
{
  pos3_->x = this->m_pos3Cur.x;
  pos3_->y = this->m_pos3Cur.y;
  pos3_->z = this->m_pos3Cur.z;
}

//----- (006677A0) --------------------------------------------------------
void __thiscall NpNs_MoveToTarget::GetMoveDir(NpNs_MoveToTarget *this, NiPoint3 *pos3_)
{
  pos3_->x = this->m_pos3DirMove.x;
  pos3_->y = this->m_pos3DirMove.y;
  pos3_->z = this->m_pos3DirMove.z;
}

//----- (006677C0) --------------------------------------------------------
void __thiscall NpNs_MoveToTarget::GetOldPos(NpNs_MoveToTarget *this, NiPoint3 *pos3_)
{
  pos3_->x = this->m_pos3OldPos.x;
  pos3_->y = this->m_pos3OldPos.y;
  pos3_->z = this->m_pos3OldPos.z;
}

//----- (006677E0) --------------------------------------------------------
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, float _fTime, NiPoint3 *_pos3Start, NiPoint3 *_pos3Target)
{
  NiPoint3 pos3Start; // [sp+Ch] [bp-18h]@1
  NiPoint3 pos3Target; // [sp+18h] [bp-Ch]@1

  pos3Start.x = _pos3Start->x;
  pos3Start.y = _pos3Start->y;
  pos3Start.z = 0.0;
  pos3Target.x = _pos3Target->x;
  pos3Target.y = _pos3Target->y;
  pos3Target.z = 0.0;
  NpNs_MoveToTarget::StartMove(&this->baseclass_0, _fTime, &pos3Start, &pos3Target);
}

//----- (00667830) --------------------------------------------------------
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, float _fTime, NiPoint3 *_pos3Target)
{
  NpNs_MoveToTarget::StartMove(&this->baseclass_0, _fTime, _pos3Target);
}

//----- (00667850) --------------------------------------------------------
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, NiPoint3 *_pos3Start, NiPoint3 *_pos3Target)
{
  NiPoint3 pos3Start; // [sp+0h] [bp-18h]@1
  NiPoint3 pos3Target; // [sp+Ch] [bp-Ch]@1

  pos3Start.x = _pos3Start->x;
  pos3Start.y = _pos3Start->y;
  pos3Start.z = 0.0;
  pos3Target.x = _pos3Target->x;
  pos3Target.y = _pos3Target->y;
  pos3Target.z = 0.0;
  NpNs_MoveToTarget::StartMove(&this->baseclass_0, &pos3Start, &pos3Target);
}

//----- (00667890) --------------------------------------------------------
void __thiscall Ns_XYFlatMoveToTarget::StartMove(Ns_XYFlatMoveToTarget *this, NiPoint3 *_pos3Target)
{
  NiPoint3 pos3Target; // [sp+0h] [bp-Ch]@1

  pos3Target.x = _pos3Target->x;
  pos3Target.y = _pos3Target->y;
  pos3Target.z = 0.0;
  NpNs_MoveToTarget::StartMove(&this->baseclass_0, &pos3Target);
}

//----- (006678C0) --------------------------------------------------------
const void __thiscall Ns_XYFlatMoveToTarget::SetCalcuCurrentPos(Ns_XYFlatMoveToTarget *this, NiPoint3 *_pos3)
{
  this->baseclass_0.m_pos3CalcuCur.x = _pos3->x;
  this->baseclass_0.m_pos3CalcuCur.y = _pos3->y;
  this->baseclass_0.m_pos3CalcuCur.z = 0.0;
}

//----- (006678E0) --------------------------------------------------------
void *__thiscall Ns_XYFlatMoveToTarget::_vector_deleting_destructor_(MoveToTarget *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NpNs_MoveToTargetVtbl *)&Ns_XYFlatMoveToTarget::_vftable_;
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4994: using guessed type int (__thiscall *Ns_XYFlatMoveToTarget___vftable_)(void *p, char);

//----- (00667910) --------------------------------------------------------
void __thiscall ObjectChar::ObjectChar(ObjectChar *this)
{
  ObjectChar *v1; // esi@1

  v1 = this;
  Char::Char(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&ObjectChar::_vftable_;
  v1->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&ObjectChar::_vftable_;
  v1->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)ObjectChar::_vftable_;
}
// 9C4A34: using guessed type int (*ObjectChar___vftable_[2])();
// 9C4A54: using guessed type int (__stdcall *ObjectChar___vftable_)(int);
// 9C4A5C: using guessed type int (__thiscall *ObjectChar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00667930) --------------------------------------------------------
void __thiscall ObjectChar::_ObjectChar(ObjectChar *this)
{
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&ObjectChar::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&ObjectChar::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)ObjectChar::_vftable_;
  Char::_Char(&this->baseclass_0);
}
// 9C4A34: using guessed type int (*ObjectChar___vftable_[2])();
// 9C4A54: using guessed type int (__stdcall *ObjectChar___vftable_)(int);
// 9C4A5C: using guessed type int (__thiscall *ObjectChar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00667950) --------------------------------------------------------
void __thiscall ObjectChar::ActInitStand(ObjectChar *this, bool bIsMob)
{
  Char *v2; // esi@1

  v2 = (Char *)this;
  Char::ActInitStand(&this->baseclass_0, bIsMob);
  ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)(v2);
  Char::StartFadeIn(v2);
  ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr[14].IsVisible)(v2, 801000);
}

//----- (006679A0) --------------------------------------------------------
void __thiscall ObjectChar::ActDie1(ObjectChar *this)
{
  ObjectChar *v1; // esi@1

  v1 = this;
  Char::ActDie1(&this->baseclass_0);
  v1->baseclass_0.m_bNeverCullingFlag = 1;
}

//----- (006679C0) --------------------------------------------------------
void *__thiscall ObjectChar::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return ObjectChar::_scalar_deleting_destructor_((ObjectChar *)((char *)this - 84), a2);
}

//----- (006679D0) --------------------------------------------------------
void *__thiscall ObjectChar::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return ObjectChar::_scalar_deleting_destructor_((ObjectChar *)((char *)this - 60), a2);
}

//----- (006679E0) --------------------------------------------------------
void *__thiscall ObjectChar::_scalar_deleting_destructor_(ObjectChar *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&ObjectChar::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&ObjectChar::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)ObjectChar::_vftable_;
  Char::_Char(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4A34: using guessed type int (*ObjectChar___vftable_[2])();
// 9C4A54: using guessed type int (__stdcall *ObjectChar___vftable_)(int);
// 9C4A5C: using guessed type int (__thiscall *ObjectChar___vftable_)(AbStateInfectee *this, int pkAbState, int bNoVisual);

//----- (00667A50) --------------------------------------------------------
int __cdecl PortraitTextureBuffer::MatchCharacterPortraitFaceIDWithDatabase(char SHNID)
{
  int result; // eax@1

  result = (unsigned __int8)SHNID;
  switch ( SHNID )
  {
    case 0:
      result = 0;
      break;
    case 4:
      result = 4;
      break;
    case 5:
      result = 5;
      break;
    case 6:
      result = 6;
      break;
    case 7:
      result = 7;
      break;
    case 8:
      result = 8;
      break;
    case 9:
      result = 9;
      break;
    case 0xA:
      result = 10;
      break;
    case 0xB:
      result = 11;
      break;
    case 0xC:
      result = 12;
      break;
    case 0xD:
      result = 13;
      break;
    case 0xE:
      result = 14;
      break;
    case 0xF:
      result = 15;
      break;
    case 0x10:
      result = 16;
      break;
    case 0x11:
      result = 17;
      break;
    case 0x12:
      result = 18;
      break;
    case 0x13:
      result = 19;
      break;
    case 0x14:
      result = 20;
      break;
    case 0x15:
      result = 21;
      break;
    case 0x16:
      result = 22;
      break;
    case 0x17:
      result = 23;
      break;
    case 0x18:
      result = 24;
      break;
    case 0x19:
      result = 25;
      break;
    case 0x1A:
      result = 26;
      break;
    case 0x1B:
      result = 27;
      break;
    case 0x1C:
      result = 28;
      break;
    case 0x1D:
      result = 29;
      break;
    case 0x1E:
      result = 30;
      break;
    case 0x1F:
      result = 31;
      break;
    case 0x20:
      result = 32;
      break;
    case 0x21:
      result = 33;
      break;
    case 0x22:
      result = 34;
      break;
    case 0x23:
      result = 35;
      break;
    case 0x24:
      result = 36;
      break;
    case 0x25:
      result = 37;
      break;
    case 0x2B:
      result = 38;
      break;
    case 0x2C:
      result = 39;
      break;
    case 0x2D:
      result = 40;
      break;
    case 0x2E:
      result = 41;
      break;
    case 0x2F:
      result = 42;
      break;
    case 0x30:
      result = 43;
      break;
    case 0x31:
      result = 44;
      break;
    case 0x32:
      result = 45;
      break;
    case 0x33:
      result = 46;
      break;
    case 0x34:
      result = 47;
      break;
    case 0x26:
      result = 48;
      break;
    case 0x27:
      result = 49;
      break;
    case 0x28:
      result = 50;
      break;
    case 0x29:
      result = 51;
      break;
    case 0x2A:
      result = 52;
      break;
    default:
      return result;
  }
  return result;
}

//----- (00667CA0) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetBlackTexture()
{
  NiTexture *result; // eax@1
  NiSourceTexture *v1; // esi@2
  int v2; // edi@4

  result = *(NiTexture **)PortraitTextureBuffer::ms_spBlackTexture;
  if ( !*(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture )
  {
    v1 = PgUtil::Create1PixelSourceTexture(
           PortraitTextureBuffer::ms_spBlackTexture[0],
           PortraitTextureBuffer::ms_spBlackTexture[0],
           PortraitTextureBuffer::ms_spBlackTexture[0],
           -1);
    result = *(NiTexture **)PortraitTextureBuffer::ms_spBlackTexture;
    if ( *(NiSourceTexture **)PortraitTextureBuffer::ms_spBlackTexture != v1 )
    {
      if ( *(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture )
      {
        v2 = *(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture;
        if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture + 4)) )
        {
          if ( v2 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
        }
      }
      result = (NiTexture *)v1;
      *(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture = v1;
      if ( v1 )
      {
        InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        result = *(NiTexture **)PortraitTextureBuffer::ms_spBlackTexture;
      }
    }
  }
  return result;
}

//----- (00667D10) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetDefaultTexture()
{
  NiTexture *result; // eax@1
  void *v1; // esi@4
  NiImageConverter *v2; // eax@5
  NiPixelData *v3; // eax@5
  int v4; // edi@10
  NiTexture::FormatPrefs kPrefs; // [sp+4h] [bp-Ch]@7

  result = (NiTexture *)PortraitTextureBuffer::ms_spDefaultTexture;
  if ( !PortraitTextureBuffer::ms_spDefaultTexture )
  {
    if ( Folder::m_bInit == (_BYTE)PortraitTextureBuffer::ms_spDefaultTexture )
      Folder::Init();
    v1 = fs("%sgame\\MobPortrait\\MP_None.png");
    if ( v1 )
    {
      v2 = NiImageConverter::GetImageConverter();
      v3 = (NiPixelData *)((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.vfptr[2].__vecDelDtor)(v2, v1, 0);
      if ( v3 )
      {
        kPrefs.m_ePixelLayout = 6;
        kPrefs.m_eAlphaFmt = 3;
        kPrefs.m_eMipMapped = 0;
        v1 = NiSourceTexture::Create(v3, &kPrefs);
      }
      else
      {
        v1 = 0;
      }
    }
    result = (NiTexture *)PortraitTextureBuffer::ms_spDefaultTexture;
    if ( (void *)PortraitTextureBuffer::ms_spDefaultTexture != v1 )
    {
      if ( PortraitTextureBuffer::ms_spDefaultTexture )
      {
        v4 = PortraitTextureBuffer::ms_spDefaultTexture;
        if ( !InterlockedDecrement((volatile LONG *)(PortraitTextureBuffer::ms_spDefaultTexture + 4)) )
        {
          if ( v4 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        }
      }
      PortraitTextureBuffer::ms_spDefaultTexture = (int)v1;
      if ( !v1 )
        return PortraitTextureBuffer::GetBlackTexture();
      InterlockedIncrement((volatile LONG *)v1 + 1);
      result = (NiTexture *)PortraitTextureBuffer::ms_spDefaultTexture;
    }
    if ( result )
      return result;
    return PortraitTextureBuffer::GetBlackTexture();
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;
// AA2D2C: using guessed type int PortraitTextureBuffer__ms_spDefaultTexture;

//----- (00667DE0) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetMetaMobPortrait(unsigned __int16 id)
{
  int v1; // esi@1
  int v2; // eax@3
  char *v3; // esi@7
  NiImageConverter *v4; // eax@8
  NiPixelData *v5; // eax@8
  NiTexture *result; // eax@9
  NiTexture::FormatPrefs kPrefs; // [sp+8h] [bp-Ch]@9

  v1 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                               + 16))(
                           ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                           id)
    || id > *(_WORD *)(v1 + 200)
    || (v2 = *(_DWORD *)(v1 + 196) + 4 * id, !*(_DWORD *)v2)
    || !*(_DWORD *)v2 )
    goto LABEL_13;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = fs("%sgame\\MobPortrait\\CharInfo\\%s.png");
  if ( !v3
    || (v4 = NiImageConverter::GetImageConverter(),
        (v5 = (NiPixelData *)((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(
                               v4,
                               v3,
                               0)) == 0)
    || (kPrefs.m_ePixelLayout = 6,
        kPrefs.m_eAlphaFmt = 3,
        kPrefs.m_eMipMapped = 0,
        (result = (NiTexture *)NiSourceTexture::Create(v5, &kPrefs)) == 0) )
LABEL_13:
    result = PortraitTextureBuffer::GetDefaultTexture();
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (00667EA0) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetMainCharPortrait(Char *pkChar)
{
  char v2; // al@4
  int v3; // ebx@11
  char *v4; // eax@11
  int v5; // ebx@12
  int v6; // esi@14
  char v7; // bl@15
  Studio *v8; // eax@20

  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[20].SetAbStateProperty)(pkChar) )
    return PortraitTextureBuffer::GetMetaMobPortrait(pkChar->m_kCharShape.m_kMobID);
  switch ( pkChar->m_kCharShape.m_kClassID )
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      v2 = 1;
      break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xA:
      v2 = 6;
      break;
    case 0xB:
    case 0xC:
    case 0xD:
    case 0xE:
    case 0xF:
      v2 = 11;
      break;
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
      v2 = 16;
      break;
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
      v2 = 21;
      break;
    case 0x1A:
    case 0x1B:
      v2 = 26;
      break;
    default:
      v2 = 0;
      break;
  }
  v3 = v2 & 0x3F | ((pkChar->m_kCharShape.m_byGender & 1) << 6);
  v4 = (char *)FaceInfoTab::GetFaceInfo(
                 v3 & 0x3F,
                 ((unsigned int)v3 >> 6) & 1,
                 pkChar->m_kCharShape.m_byFaceShapeType,
                 pkChar->m_kCharShape.m_byFace);
  if ( v4 )
    v5 = ((unsigned __int16)v3 ^ (unsigned __int16)((unsigned __int16)PortraitTextureBuffer::MatchCharacterPortraitFaceIDWithDatabase(*v4) << 7)) & 0x3F80 ^ v3;
  else
    v5 = v3 & 0xFFFFC07F;
  v6 = v5 & 0xF0003FFF | ((pkChar->m_kCharShape.m_byHairType & 0x7F | ((pkChar->m_kCharShape.m_byHairColor & 0x7F) << 7)) << 14);
  if ( PortraitTextureBuffer::ms_dwMainCharTag == v6 )
  {
    v7 = 0;
    if ( AbStateInfectee::IsInList(&pkChar->baseclass_0, STA_GTIMETASLIME) )
      v7 = 1;
    if ( !AbStateInfectee::IsInList(&pkChar->baseclass_0, STA_SNOWMAN) && !v7 )
    {
      PortraitTextureBuffer::ms_bIsMeta = 0;
      return &PortraitTextureBuffer::ms_pkMainCharStillCut->m_spRenderedTexture.m_pObject->baseclass_0;
    }
    if ( PortraitTextureBuffer::ms_bIsMeta )
      return &PortraitTextureBuffer::ms_pkMainCharStillCut->m_spRenderedTexture.m_pObject->baseclass_0;
    v8 = PortraitStudio::CreateStudio(
           v6 & 0x3F,
           ((unsigned int)v6 >> 6) & 1,
           ((unsigned int)v6 >> 7) & 0x7F,
           ((unsigned int)v6 >> 14) & 0x7F,
           ((unsigned int)v6 >> 21) & 0x7F,
           7u,
           0xFFFFu,
           0);
    PortraitTextureBuffer::ms_pkMainCharStillCut = v8;
    PortraitTextureBuffer::ms_dwMainCharTag = v6;
    if ( v8 )
    {
      PortraitTextureBuffer::ms_bIsMeta = 1;
      return &v8->m_spRenderedTexture.m_pObject->baseclass_0;
    }
  }
  else
  {
    v8 = PortraitStudio::CreateStudio(
           v5 & 0x3F,
           ((v5 & 0xF0003FFF | ((pkChar->m_kCharShape.m_byHairType & 0x7F | ((pkChar->m_kCharShape.m_byHairColor & 0x7Fu) << 7)) << 14)) >> 6) & 1,
           ((v5 & 0xF0003FFF | ((pkChar->m_kCharShape.m_byHairType & 0x7F | ((pkChar->m_kCharShape.m_byHairColor & 0x7Fu) << 7)) << 14)) >> 7) & 0x7F,
           ((v5 & 0xF0003FFF | ((pkChar->m_kCharShape.m_byHairType & 0x7F | ((pkChar->m_kCharShape.m_byHairColor & 0x7Fu) << 7)) << 14)) >> 14) & 0x7F,
           ((v5 & 0xF0003FFF | ((pkChar->m_kCharShape.m_byHairType & 0x7F | ((pkChar->m_kCharShape.m_byHairColor & 0x7Fu) << 7)) << 14)) >> 21) & 0x7F,
           7u,
           0xFFFFu,
           0);
    PortraitTextureBuffer::ms_pkMainCharStillCut = v8;
    PortraitTextureBuffer::ms_dwMainCharTag = v6;
    if ( v8 )
      return &v8->m_spRenderedTexture.m_pObject->baseclass_0;
  }
  return PortraitTextureBuffer::GetDefaultTexture();
}
// A80088: using guessed type int PortraitTextureBuffer__ms_dwMainCharTag;
// AA2D14: using guessed type char PortraitTextureBuffer__ms_bIsMeta;

//----- (00668120) --------------------------------------------------------
void __cdecl PortraitTextureBuffer::Terminate()
{
  int v0; // esi@2
  int v1; // esi@6
  void *v2; // esi@11
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // esi@13
  void *v4; // edi@14
  NiTListItem<NiPointer<NiDX92DBufferData> > *v5; // esi@17
  NiTListItem<NiPointer<NiDX92DBufferData> > *v6; // ST04_4@18
  NiTListItem<NiPointer<NiDX92DBufferData> > *v7; // esi@19
  NiTListItem<NiPointer<NiDX92DBufferData> > *v8; // ST04_4@20
  NiTListItem<NiPointer<NiDX92DBufferData> > *v9; // esi@21
  NiTListItem<NiPointer<NiDX92DBufferData> > *v10; // ST04_4@22
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+Ch] [bp-4h]@16

  if ( *(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture )
  {
    v0 = *(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture;
    if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture + 4)) && v0 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    *(_DWORD *)PortraitTextureBuffer::ms_spBlackTexture = 0;
  }
  v1 = PortraitTextureBuffer::ms_spDefaultTexture;
  if ( PortraitTextureBuffer::ms_spDefaultTexture )
  {
    if ( !InterlockedDecrement((volatile LONG *)(PortraitTextureBuffer::ms_spDefaultTexture + 4)) && v1 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    PortraitTextureBuffer::ms_spDefaultTexture = 0;
  }
  v2 = PortraitTextureBuffer::ms_pkMainCharStillCut;
  if ( PortraitTextureBuffer::ms_pkMainCharStillCut )
  {
    Studio::_Studio(PortraitTextureBuffer::ms_pkMainCharStillCut);
    operator delete(v2);
  }
  PortraitTextureBuffer::ms_pkMainCharStillCut = 0;
  PortraitTextureBuffer::ms_dwMainCharTag = -1;
  for ( i = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&stru_AA2D1C;
        i != stru_AA2D1C;
        i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(&PortraitTextureBuffer::ms_kOtherFaceTextureMap, &result, i)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v4 = *(void **)(*(_DWORD *)&i + 16);
    if ( v4 )
    {
      Studio::_Studio(*(Studio **)(*(_DWORD *)&i + 16));
      operator delete(v4);
    }
  }
  v5 = PortraitTextureBuffer::ms_kMobFaceTextureList.baseclass_0.m_pkHead;
  if ( PortraitTextureBuffer::ms_kMobFaceTextureList.baseclass_0.m_pkHead )
  {
    do
    {
      v6 = v5;
      v5 = v5->m_pkNext;
      PortraitTextureBuffer::ms_kMobFaceTextureList.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&PortraitTextureBuffer::ms_kMobFaceTextureList,
        v6);
    }
    while ( v5 );
  }
  *(_DWORD *)&PortraitTextureBuffer::ms_kMobFaceTextureList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  PortraitTextureBuffer::ms_kMobFaceTextureList.baseclass_0.m_pkHead = 0;
  PortraitTextureBuffer::ms_kMobFaceTextureList.baseclass_0.m_pkTail = 0;
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear(&PortraitTextureBuffer::ms_kMobFaceTextureMap);
  v7 = PortraitTextureBuffer::ms_kMoverFaceTextureList.baseclass_0.m_pkHead;
  if ( PortraitTextureBuffer::ms_kMoverFaceTextureList.baseclass_0.m_pkHead )
  {
    do
    {
      v8 = v7;
      v7 = v7->m_pkNext;
      PortraitTextureBuffer::ms_kMoverFaceTextureList.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&PortraitTextureBuffer::ms_kMoverFaceTextureList,
        v8);
    }
    while ( v7 );
  }
  *(_DWORD *)&PortraitTextureBuffer::ms_kMoverFaceTextureList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  PortraitTextureBuffer::ms_kMoverFaceTextureList.baseclass_0.m_pkHead = 0;
  PortraitTextureBuffer::ms_kMoverFaceTextureList.baseclass_0.m_pkTail = 0;
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear(&PortraitTextureBuffer::ms_kMoverFaceTextureMap);
  v9 = PortraitTextureBuffer::ms_kPetFaceTextureList.baseclass_0.m_pkHead;
  if ( PortraitTextureBuffer::ms_kPetFaceTextureList.baseclass_0.m_pkHead )
  {
    do
    {
      v10 = v9;
      v9 = v9->m_pkNext;
      PortraitTextureBuffer::ms_kPetFaceTextureList.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&PortraitTextureBuffer::ms_kPetFaceTextureList,
        v10);
    }
    while ( v9 );
  }
  *(_DWORD *)&PortraitTextureBuffer::ms_kPetFaceTextureList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  PortraitTextureBuffer::ms_kPetFaceTextureList.baseclass_0.m_pkHead = 0;
  PortraitTextureBuffer::ms_kPetFaceTextureList.baseclass_0.m_pkTail = 0;
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear(&PortraitTextureBuffer::ms_kPetFaceTextureMap);
}
// A80088: using guessed type int PortraitTextureBuffer__ms_dwMainCharTag;
// AA2D2C: using guessed type int PortraitTextureBuffer__ms_spDefaultTexture;

//----- (006682B0) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetOtherCharPortrait(unsigned int uiClass, unsigned int uiGender, unsigned int uiFace, unsigned int uiHair, unsigned int uiColor, unsigned __int16 kMobID, unsigned int uiLvGapIndex, unsigned int uiCamPos)
{
  unsigned __int16 v8; // di@1
  unsigned int v9; // edx@1
  unsigned int v10; // eax@1
  unsigned int v11; // esi@1
  unsigned int v12; // eax@1
  NiTexture *result; // eax@2
  Studio *v14; // esi@3

  v8 = kMobID;
  v9 = uiGender & 1;
  v10 = uiClass & 0x3F;
  v11 = v10 | ((v9 | 2
                   * (uiFace & 0x7F | ((uiHair & 0x7F | ((uiColor & 0x7F | ((uiLvGapIndex & 3 | 4 * (kMobID == -1)) << 7)) << 7)) << 7))) << 6);
  *(_DWORD *)&kMobID = v10 | ((v9 | 2
                                  * (uiFace & 0x7F | ((uiHair & 0x7F | ((uiColor & 0x7F | ((uiLvGapIndex & 3 | 4 * (kMobID == -1)) << 7)) << 7)) << 7))) << 6);
  v12 = *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
           (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&PortraitTextureBuffer::ms_kOtherFaceTextureMap,
           (const unsigned int *)&kMobID);
  if ( v12 )
  {
    result = *(NiTexture **)(v12 + 8);
  }
  else
  {
    v14 = PortraitStudio::CreateStudio(
            v11 & 0x3F,
            (v11 >> 6) & 1,
            (v11 >> 7) & 0x7F,
            (v11 >> 14) & 0x7F,
            (v11 >> 21) & 0x7F,
            6u,
            v8,
            uiCamPos);
    if ( v14 )
    {
      *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
         (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&PortraitTextureBuffer::ms_kOtherFaceTextureMap,
         (const unsigned int *)&kMobID) = (unsigned int)v14;
      result = (NiTexture *)v14->m_spRenderedTexture.m_pObject;
    }
    else
    {
      result = PortraitTextureBuffer::GetDefaultTexture();
    }
  }
  return result;
}

//----- (00668390) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetMobPortrait(unsigned __int16 id)
{
  NiTexture *result; // eax@1
  int v2; // esi@2
  unsigned __int16 v3; // di@2
  int v4; // eax@4
  char *v5; // eax@8
  void *v6; // esi@8
  char *v7; // eax@11
  NiPointer<NiDX92DBufferData> element; // [sp+0h] [bp-10h]@13
  int v9; // [sp+Ch] [bp-4h]@15

  result = *std::map<unsigned_short_NiTexture___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_NiTexture__>>>::operator__(
              (std::map<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> > > *)&PortraitTextureBuffer::ms_kMobFaceTextureMap,
              &id);
  if ( !result )
  {
    v2 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
    v3 = id;
    if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                              + 16))(
                             ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                             id)
      || v3 > *(_WORD *)(v2 + 200)
      || (v4 = *(_DWORD *)(v2 + 196) + 4 * v3, !*(_DWORD *)v4)
      || !*(_DWORD *)v4 )
      goto LABEL_21;
    if ( !Folder::m_bInit )
      Folder::Init();
    v5 = fs("%sgame\\MobPortrait\\%s.png");
    v6 = PgUtil::LoadSourceTexture(v5);
    if ( !v6 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = fs("%sgame\\MobPortrait\\%s.tga");
      v6 = PgUtil::LoadSourceTexture(v7);
      if ( !v6 )
LABEL_21:
        v6 = PortraitTextureBuffer::GetDefaultTexture();
    }
    element.m_pObject = (NiDX92DBufferData *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)v6 + 1);
    v9 = 0;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      &PortraitTextureBuffer::ms_kMobFaceTextureList,
      &element);
    v9 = -1;
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    }
    *std::map<unsigned_short_NiTexture___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_NiTexture__>>>::operator__(
       (std::map<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> > > *)&PortraitTextureBuffer::ms_kMobFaceTextureMap,
       &id) = (NiTexture *)v6;
    result = (NiTexture *)v6;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (006684E0) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetMoverPortrait(unsigned int kMoverID)
{
  unsigned int v1; // esi@1
  MoverMain *v2; // eax@2
  char *v4; // eax@7
  char *v5; // eax@10
  NiPointer<NiDX92DBufferData> element; // [sp+0h] [bp-10h]@12
  int v7; // [sp+Ch] [bp-4h]@14

  v1 = *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
          (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&PortraitTextureBuffer::ms_kMoverFaceTextureMap,
          &kMoverID);
  if ( !v1 )
  {
    v2 = MoverMainTab::GetByMoverID(kMoverID);
    if ( !v2 || !MoverViewTab::GetByMoverIdx(v2->MoverIDX) )
      return 0;
    if ( !Folder::m_bInit )
      Folder::Init();
    v4 = fs("%sgame\\MobPortrait\\%s.png");
    v1 = (unsigned int)PgUtil::LoadSourceTexture(v4);
    if ( !v1 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v5 = fs("%sgame\\MobPortrait\\%s.tga");
      v1 = (unsigned int)PgUtil::LoadSourceTexture(v5);
      if ( !v1 )
        v1 = (unsigned int)PortraitTextureBuffer::GetDefaultTexture();
    }
    element.m_pObject = (NiDX92DBufferData *)v1;
    if ( v1 )
      InterlockedIncrement((volatile LONG *)(v1 + 4));
    v7 = 0;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      &PortraitTextureBuffer::ms_kMoverFaceTextureList,
      &element);
    v7 = -1;
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    }
    *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
       (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&PortraitTextureBuffer::ms_kMoverFaceTextureMap,
       &kMoverID) = v1;
  }
  return (NiTexture *)v1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00668630) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetPetPortrait(unsigned int kPetID)
{
  unsigned int v1; // esi@1
  PupMain *v2; // eax@2
  char *v4; // eax@7
  char *v5; // eax@10
  NiPointer<NiDX92DBufferData> element; // [sp+0h] [bp-10h]@12
  int v7; // [sp+Ch] [bp-4h]@14

  v1 = *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
          (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&PortraitTextureBuffer::ms_kPetFaceTextureMap,
          &kPetID);
  if ( !v1 )
  {
    v2 = PetMainTab::GetByPetID(kPetID);
    if ( !v2 || !PetViewTab::GetByPetIdx(v2->PupIDX) )
      return 0;
    if ( !Folder::m_bInit )
      Folder::Init();
    v4 = fs("%sgame\\MobPortrait\\%s.png");
    v1 = (unsigned int)PgUtil::LoadSourceTexture(v4);
    if ( !v1 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v5 = fs("%sgame\\MobPortrait\\%s.tga");
      v1 = (unsigned int)PgUtil::LoadSourceTexture(v5);
      if ( !v1 )
        v1 = (unsigned int)PortraitTextureBuffer::GetDefaultTexture();
    }
    element.m_pObject = (NiDX92DBufferData *)v1;
    if ( v1 )
      InterlockedIncrement((volatile LONG *)(v1 + 4));
    v7 = 0;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      &PortraitTextureBuffer::ms_kPetFaceTextureList,
      &element);
    v7 = -1;
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    }
    *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
       (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&PortraitTextureBuffer::ms_kPetFaceTextureMap,
       &kPetID) = v1;
  }
  return (NiTexture *)v1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00668780) --------------------------------------------------------
NiTexture *__cdecl PortraitTextureBuffer::GetOtherCharPortrait(Char *pkChar)
{
  Char *v1; // esi@1
  NiTexture *result; // eax@2
  FaceInfo *v3; // eax@11
  signed int v4; // edi@13
  int v5; // eax@14
  char v6; // cl@16
  unsigned __int16 kMobID; // [sp+4h] [bp-10h]@13
  char kBaseClassID; // [sp+10h] [bp-4h]@4
  char byFaceID_3; // [sp+1Fh] [bp+Bh]@3

  v1 = pkChar;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))pkChar->baseclass_0.vfptr[20].SetAbStateProperty)(pkChar) )
  {
    result = PortraitTextureBuffer::GetMetaMobPortrait(pkChar->m_kCharShape.m_kMobID);
  }
  else
  {
    byFaceID_3 = 0;
    switch ( v1->m_kCharShape.m_kClassID )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        kBaseClassID = 1;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        kBaseClassID = 6;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        kBaseClassID = 11;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        kBaseClassID = 16;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        kBaseClassID = 21;
        break;
      case 0x1A:
      case 0x1B:
        kBaseClassID = 26;
        break;
      default:
        kBaseClassID = 0;
        break;
    }
    v3 = FaceInfoTab::GetFaceInfo(
           kBaseClassID,
           v1->m_kCharShape.m_byGender,
           v1->m_kCharShape.m_byFaceShapeType,
           v1->m_kCharShape.m_byFace);
    if ( v3 )
      byFaceID_3 = v3->ID;
    kMobID = v1->m_kCharShape.m_kMobID;
    v4 = 5;
    if ( kMobID != -1 )
    {
      v5 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[5].Deaffect)(v1);
      v4 = Char::GetLvGapIndex(g_pkMainChar, v5);
    }
    switch ( v1->m_kCharShape.m_kClassID )
    {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        v6 = 1;
        break;
      case 6:
      case 7:
      case 8:
      case 9:
      case 0xA:
        v6 = 6;
        break;
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
        v6 = 11;
        break;
      case 0x10:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
        v6 = 16;
        break;
      case 0x15:
      case 0x16:
      case 0x17:
      case 0x18:
      case 0x19:
        v6 = 21;
        break;
      case 0x1A:
      case 0x1B:
        v6 = 26;
        break;
      default:
        v6 = 0;
        break;
    }
    result = PortraitTextureBuffer::GetOtherCharPortrait(
               (unsigned __int8)v6,
               v1->m_kCharShape.m_byGender,
               (unsigned __int8)byFaceID_3,
               v1->m_kCharShape.m_byHairType,
               v1->m_kCharShape.m_byHairColor,
               kMobID,
               v4,
               0);
  }
  return result;
}

//----- (006689B0) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 21) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 21) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 21); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (00668A00) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>(NiTListBase<DFALL<NiPointer<NiTexture> >,NiPointer<NiTexture> > *this)
{
  this->vfptr = (NiTListBase<DFALL<NiPointer<NiTexture> >,NiPointer<NiTexture> >Vtbl *)&NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_;
}
// 9C4DE8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiTexture___NiPointer_NiTexture_____vftable_)(void *p, char);

//----- (00668A10) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vector_deleting_destructor_(NiTListBase<DFALL<NiPointer<NiTexture> >,NiPointer<NiTexture> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<NiPointer<NiTexture> >,NiPointer<NiTexture> >Vtbl *)&NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C4DE8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiTexture___NiPointer_NiTexture_____vftable_)(void *p, char);

//----- (00668A40) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_scalar_deleting_destructor_(NiTList<NiPointer<NiTexture> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<NiTexture> > *v3; // esi@1
  NiTListItem<NiPointer<NiTexture> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiTexture> >,NiPointer<NiTexture> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4DE8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiTexture___NiPointer_NiTexture_____vftable_)(void *p, char);
// 9C4DF8: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiPointer_NiTexture___NiPointer_NiTexture_____vftable_)(void *p, char);

//----- (00668AD0) --------------------------------------------------------
Char *__cdecl PortraitStudio::CreateCharacter(unsigned int uiClass, unsigned int uiGender, unsigned int uiFace, unsigned int uiHair, unsigned int uiColor, unsigned __int16 kMobID)
{
  char v6; // al@1
  void *v7; // eax@1
  int v8; // eax@2
  int v9; // esi@2
  char v10; // al@5
  Char *result; // eax@7
  NiNode *v12; // ST18_4@10
  int v13; // ebx@12
  int v14; // eax@14
  int v15; // eax@15
  CSpactralGlow_Shader_Controller *v16; // eax@17
  NiNode *v17; // ST20_4@17
  CSpactralGlow_Shader_Controller *v18; // eax@17
  void (__thiscall *v19)(_DWORD, _DWORD, _DWORD); // edx@18
  unsigned int v20; // [sp+20h] [bp-134h]@1
  BonePartitionReCreate BoneReCreate; // [sp+30h] [bp-124h]@10
  void *v22; // [sp+40h] [bp-114h]@1
  float v23; // [sp+44h] [bp-110h]@18
  float v24; // [sp+48h] [bp-10Ch]@18
  float v25; // [sp+4Ch] [bp-108h]@18
  int v26; // [sp+50h] [bp-104h]@1
  char dest[6]; // [sp+54h] [bp-100h]@1
  int v28; // [sp+5Ah] [bp-FAh]@1
  int v29; // [sp+5Eh] [bp-F6h]@1
  int v30; // [sp+62h] [bp-F2h]@1
  int v31; // [sp+66h] [bp-EEh]@1
  char v32; // [sp+73h] [bp-E1h]@1
  char v33; // [sp+74h] [bp-E0h]@1
  char v34; // [sp+75h] [bp-DFh]@1
  char v35; // [sp+76h] [bp-DEh]@1
  char v36; // [sp+77h] [bp-DDh]@1
  char v37; // [sp+78h] [bp-DCh]@1
  __int16 v38; // [sp+79h] [bp-DBh]@1
  __int16 v39; // [sp+7Bh] [bp-D9h]@1
  int v40; // [sp+7Dh] [bp-D7h]@1
  int v41; // [sp+81h] [bp-D3h]@1
  int v42; // [sp+85h] [bp-CFh]@1
  int v43; // [sp+89h] [bp-CBh]@1
  __int16 v44; // [sp+8Dh] [bp-C7h]@1
  __int16 v45; // [sp+8Fh] [bp-C5h]@1
  int v46; // [sp+91h] [bp-C3h]@1
  int v47; // [sp+95h] [bp-BFh]@1
  int v48; // [sp+99h] [bp-BBh]@1
  __int16 v49; // [sp+9Dh] [bp-B7h]@1
  __int16 v50; // [sp+9Fh] [bp-B5h]@1
  unsigned int v51; // [sp+144h] [bp-10h]@1
  int v52; // [sp+150h] [bp-4h]@1
  int v53; // [sp+154h] [bp+0h]@1

  v51 = (unsigned int)&v53 ^ __security_cookie;
  v20 = (unsigned int)&v53 ^ __security_cookie;
  v26 = kMobID;
  v31 = 0;
  v30 = 0;
  v29 = 0;
  v28 = 0;
  *(_DWORD *)&dest[2] = 0;
  strncpy(&dest[2], &byte_9788EB, 0x14u);
  v33 = uiClass;
  v38 = -1;
  v40 = -1;
  v41 = -1;
  v42 = -1;
  v43 = -1;
  v44 = -1;
  v39 = -1;
  v49 = -1;
  v46 = -1;
  v47 = -1;
  v48 = -1;
  v45 = -1;
  v50 = -1;
  *(_WORD *)dest = rand();
  v37 = uiFace;
  v34 = ((_BYTE)uiGender << 7) | ((v34 ^ 4 * uiClass) & 0x7C ^ v34) & 0x7F;
  v32 = 1;
  v36 = uiColor;
  v35 = uiHair;
  v6 = CharClass::GetRace(uiClass);
  v34 ^= (v34 ^ v6) & 3;
  v7 = operator new(0xB84u);
  v22 = v7;
  v52 = 0;
  if ( v7 )
  {
    Char::Char((Char *)v7);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  v52 = -1;
  if ( MainChar::GetMetamorphosisType((MainChar *)g_pkMainChar) == 17 )
    v10 = (*(int (__thiscall **)(int, _DWORD, _DWORD, unsigned int))(*(_DWORD *)v9 + 552))(
            v9,
            g_pkMainChar->m_kCharShape.m_kMobID,
            *(_DWORD *)dest,
            v20);
  else
    v10 = (*(int (__thiscall **)(int, _DWORD, unsigned int))(*(_DWORD *)v9 + 556))(v9, dest, v20);
  if ( v10 && (unsigned __int8)(*(int (__thiscall **)(int, signed int, _DWORD))(*(_DWORD *)v9 + 600))(v9, 1, 0) )
  {
    BonePartitionReCreate::BonePartitionReCreate(&BoneReCreate, 4);
    v12 = *(NiNode **)(v9 + 700);
    v52 = 1;
    Ns_TourScene::TourScene(&BoneReCreate.baseclass_0, v12, &NiAVObject::m_RTTI, 0);
    if ( Engine3D::ms_spCarToon )
      INpShader::Setuprecursive(Engine3D::ms_spCarToon, *(NiNode **)(v9 + 700), NiRenderer::ms_pkRenderer, 0x14u, 4u);
    v13 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                            v26) )
    {
      if ( (unsigned __int16)v26 <= *(_WORD *)(v13 + 200) )
      {
        v14 = *(_DWORD *)(v13 + 196) + 4 * (unsigned __int16)v26;
        if ( *(_DWORD *)v14 )
        {
          v15 = *(_DWORD *)v14;
          if ( v15 )
          {
            if ( *(_BYTE *)(v15 + 180) )
            {
              v16 = CharShape::GetShader_Ctrl((CharShape *)(v9 + 776));
              CSpactralGlow_Shader_Controller::SetUseShaderName(v16, "FxSkinning_Greyscale", "FxNoSkinning_Greyscale");
              Char::SetEnanleSpectral((Char *)v9, 1);
              v17 = *(NiNode **)(v9 + 700);
              v18 = CharShape::GetShader_Ctrl((CharShape *)(v9 + 776));
              CSpactralGlow_Shader_Controller::SetupRecursive(v18, v17);
            }
          }
        }
      }
    }
    v19 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 184);
    v23 = 0.0;
    v24 = -1.0;
    v25 = 0.0;
    v19(v9, &NiPoint3::ZERO, &v23);
    (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 340))(v9);
    (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v9 + 592))(v9, 0.0);
    result = (Char *)v9;
  }
  else
  {
    (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 28))(v9, 1);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (00668E10) --------------------------------------------------------
Studio *__cdecl PortraitStudio::CreateStudio(unsigned int uiClass, unsigned int uiGender, unsigned int uiFace, unsigned int uiHair, unsigned int uiColor, unsigned int uiDetail, unsigned __int16 kMobID, unsigned int uiCamPos)
{
  int v8; // ebx@0
  int v9; // edi@0
  Studio *result; // eax@1
  Studio *v11; // esi@1
  MobInfo *v12; // eax@4
  double v13; // st7@7
  double v14; // st6@7
  float v15; // ST30_4@9
  double v16; // st7@10
  double v17; // st6@10
  float v18; // ST30_4@12
  double v19; // st7@13
  float v20; // ST30_4@14
  NiNode *v21; // edi@23
  int v22; // edx@24
  NiRefObjectVtbl *v23; // ebx@25
  char *v24; // eax@25
  NiAVObject *v25; // eax@25
  NiAVObject *v26; // eax@28
  int v27; // [sp+10h] [bp-24h]@2
  int v28; // [sp+14h] [bp-20h]@2
  float v29; // [sp+1Ch] [bp-18h]@7
  float v30; // [sp+1Ch] [bp-18h]@10
  float v31; // [sp+1Ch] [bp-18h]@13
  float v32; // [sp+20h] [bp-14h]@7
  float v33; // [sp+20h] [bp-14h]@10
  float v34; // [sp+20h] [bp-14h]@13
  float v35; // [sp+24h] [bp-10h]@8
  float v36; // [sp+24h] [bp-10h]@11
  float v37; // [sp+24h] [bp-10h]@13
  NiCamera *pkHaduri; // [sp+2Ch] [bp-8h]@26
  Char *pkChar; // [sp+30h] [bp-4h]@2

  result = Studio::Create(NiRenderer::ms_pkRenderer, uiDetail);
  v11 = result;
  if ( result )
  {
    v28 = v8;
    v27 = v9;
    pkChar = PortraitStudio::CreateCharacter(uiClass, uiGender, uiFace, uiHair, uiColor, kMobID);
    if ( pkChar )
    {
      v11->m_bgColor.r = 0.0;
      v11->m_bgColor.g = 0.0;
      v11->m_bgColor.b = 0.0;
      v11->m_bgColor.a = 1.0;
      if ( kMobID == -1 )
      {
        switch ( uiClass )
        {
          case 0xBu:
            v19 = 1.0;
            v31 = 0.0;
            v34 = 1.0;
            v37 = 0.74117649;
            goto LABEL_14;
          case 6u:
            v13 = 1.0;
            v29 = 0.0;
            v32 = 1.0;
            v14 = 0.97254902;
            goto LABEL_8;
          case 1u:
            v16 = 1.0;
            v30 = 1.0;
            v33 = 0.73725492;
            v17 = 0.53725493;
LABEL_11:
            v36 = v17;
            goto LABEL_12;
          case 0x10u:
            v19 = 1.0;
            v31 = 1.0;
            v34 = 0.53725493;
            v37 = 0.96862745;
LABEL_14:
            v20 = v19;
            v11->m_bgColor.r = v31;
            v11->m_bgColor.g = v34;
            v11->m_bgColor.b = v37;
            v11->m_bgColor.a = v20;
            break;
          case 0x15u:
            v29 = 0.47058824;
            v14 = 0.0;
            v13 = 1.0;
            v32 = 0.0;
LABEL_8:
            v35 = v14;
            goto LABEL_9;
          case 0x1Au:
            v16 = 1.0;
            v30 = 0.0;
            v36 = 0.0;
            v33 = 1.0;
LABEL_12:
            v18 = v16;
            v11->m_bgColor.r = v30;
            v11->m_bgColor.g = v33;
            v11->m_bgColor.b = v36;
            v11->m_bgColor.a = v18;
            break;
          default:
            break;
        }
      }
      else
      {
        v12 = IIDTableBase<MobInfo_MobInfoTab_unsigned_short>::GetByID(kMobID, 1);
        if ( v12 )
        {
          switch ( Char::GetLvGapIndex(g_pkMainChar, v12->Level) )
          {
            case 0u:
              v11->m_bgColor.r = 0.74509805;
              v11->m_bgColor.g = 0.14509805;
              v11->m_bgColor.b = 0.11372549;
              v11->m_bgColor.a = 1.0;
              goto LABEL_23;
            case 1u:
              v13 = 1.0;
              v29 = 1.0;
              v32 = 0.627451;
              v14 = 0.14509805;
              goto LABEL_8;
            case 2u:
              v16 = 1.0;
              v30 = 1.0;
              v33 = 0.95294118;
              v17 = 0.19607843;
              goto LABEL_11;
            case 3u:
              v31 = 0.35294119;
              v34 = 0.90588236;
              v37 = 0.33725491;
              v19 = 1.0;
              goto LABEL_14;
            default:
              v29 = 0.75294119;
              v32 = 0.75294119;
              v35 = 0.75294119;
              v13 = 1.0;
              break;
          }
LABEL_9:
          v15 = v13;
          v11->m_bgColor.r = v29;
          v11->m_bgColor.g = v32;
          v11->m_bgColor.b = v35;
          v11->m_bgColor.a = v15;
        }
      }
LABEL_23:
      v21 = pkChar->m_spScene.m_pObject;
      if ( !uiCamPos )
        v22 = rand() % 3 + 1;
      v23 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v24 = fs("Haduri%02d");
      v25 = (NiAVObject *)((int (__thiscall *)(NiNode *, char *, int, int))v23[18].__vecDelDtor)(v21, v24, v27, v28);
      if ( v25 )
      {
        if ( PgUtil::CatchCamera(v25, &pkHaduri) )
          Studio::SetCamera(v11, pkHaduri);
      }
      v26 = (NiAVObject *)((int (__thiscall *)(NiNode *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v21);
      PgUtil::TurnOnLightsInNode(v26, 1);
      NiAVObject::UpdateProperties(&v21->baseclass_0);
      NiAVObject::UpdateEffects(&v21->baseclass_0);
      NiAVObject::Update(&v21->baseclass_0, 0.0, 1);
      v21->baseclass_0.m_uFlags &= 0xFFFEu;
      Studio::SetSubject((Ni2DBuffer *)v11, (Ni2DBuffer::RendererData *)v21);
      Studio::ClickAndStuff(v11, 0.0);
      ((void (__cdecl *)(signed int))pkChar->baseclass_0.vfptr->__vecDelDtor)(1);
    }
    result = v11;
  }
  return result;
}
// 668E10: could not find valid save-restore pair for ebx
// 668E10: could not find valid save-restore pair for edi

//----- (00669170) --------------------------------------------------------
FaceInfo *__cdecl FaceInfoTab::GetFaceInfo(char kBaseClassID, char ucGender, char byFaceModelInx, char byFaceTexInx)
{
  int v4; // eax@1
  unsigned int v5; // edi@2
  unsigned int v6; // esi@4
  FaceInfo *result; // eax@8
  char byListFTIndex; // [sp+Eh] [bp-2h]@5
  char byListFMIndex; // [sp+Fh] [bp-1h]@5

  v4 = *(_DWORD *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 56);
  if ( v4 )
    v5 = *(_DWORD *)(v4 + 40);
  else
    v5 = 0;
  v6 = 0;
  if ( v5 )
  {
    while ( 1 )
    {
      FaceInfoTab::GetIndex(v6, kBaseClassID, ucGender, &byListFMIndex, &byListFTIndex);
      if ( byListFMIndex == byFaceModelInx )
      {
        if ( byListFTIndex == byFaceTexInx )
          break;
      }
      ++v6;
      if ( v6 >= v5 )
        goto LABEL_8;
    }
    result = (FaceInfo *)CDataReader::GetRecord((CDataReader *)(ITableBase<FaceInfo_FaceInfoTab>::ms_pkTable + 4), v6);
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}
// A9435C: using guessed type int ITableBase_FaceInfo_FaceInfoTab___ms_pkTable;

//----- (006691E0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this)
{
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
        v1,
        v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (00669230) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_NiTexture___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_NiTexture__>>_0>>::_Insert(...)
{
  std::_Tree<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5,
      (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < *(_WORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v8,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= *(_WORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( *(_WORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
                         (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&v10,
                         (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 21) )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        1,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (006693A0) --------------------------------------------------------
NiTexture **__thiscall std::map<unsigned_short_NiTexture___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_NiTexture__>>>::operator__(std::map<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> > > *this, const unsigned __int16 *_Keyval)
{
  std::map<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> > > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > > v5; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v6; // eax@8
  NiTexture **result; // eax@8
  std::pair<unsigned short const ,unsigned long> _Val; // [sp+8h] [bp-8h]@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
  {
    if ( *(_WORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= *(_WORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (NiTexture **)(*(_DWORD *)&v5 + 16);
  }
  else
  {
    _Val.baseclass_0.first = *_Keyval;
    _Val.baseclass_0.second = 0;
    v6 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
           (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)v2,
           &_Val);
    std::_Tree<std::_Tmap_traits<unsigned_short_NiTexture___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_NiTexture__>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> > > *)&_Keyval,
      v5,
      (std::_Tree_nod<std::_Tmap_traits<unsigned short,NiTexture *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,NiTexture *> >,0> >::_Node *)v6);
    result = (NiTexture **)(_Keyval + 8);
  }
  return result;
}

//----- (00669430) --------------------------------------------------------
void __thiscall CQuestInfoViewMgr::MakeQuestView(CQuestInfoViewMgr *this, unsigned __int16 hID)
{
  CQuestInfoViewMgr *v2; // esi@1
  CQuest *v3; // edi@1
  unsigned int v4; // eax@1
  QUEST_DATA *v5; // eax@1
  int v6; // ecx@1
  unsigned int v7; // eax@1
  unsigned int v8; // eax@3
  NiNode *v9; // eax@6
  NiNode *v10; // edi@6
  NiTArray<NiPointer<NiGeometry> > *v11; // ecx@8
  CQuest::NPC_QUEST_STATUS kNpcState; // [sp+0h] [bp-1Ch]@1
  int v13; // [sp+18h] [bp-4h]@8

  v2 = this;
  v3 = QuestDataMgr::GetQuest();
  CQuest::AllDoingQuestUpdateStatus(v3);
  kNpcState.hID = hID;
  v4 = User::Lv(&g_kUser);
  CQuest::GetQuestStatusWithNPC(v3, &kNpcState, PQS_ING, v4, 0);
  v5 = kNpcState.lpQuestData;
  v6 = kNpcState.nLevel;
  *(_DWORD *)&v2->m_kNpcState.hID = *(_DWORD *)&kNpcState;
  v2->m_kNpcState.lpQuestData = v5;
  v7 = kNpcState.eResultState;
  v2->m_kNpcState.eResultState = kNpcState.eResultState;
  v2->m_kNpcState.nLevel = v6;
  if ( v7 == 4 && v6 != -1 )
  {
    v8 = User::Lv(&g_kUser);
    if ( v8 <= kNpcState.nLevel + 5 )
    {
      v7 = kNpcState.eResultState;
    }
    else
    {
      v7 = 9;
      kNpcState.eResultState = 9;
    }
  }
  v9 = CharResMgr::GetQuestInfo(&g_kCharResMgr, v7, 0);
  v10 = v9;
  if ( v9 )
    InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v11 = (NiTArray<NiPointer<NiGeometry> > *)&v2->m_spQuestInfo.m_pObject->m_kChildren;
  v13 = 0;
  NiTArray<NiPointer<NiNode>>::RemoveAll(v11);
  if ( v10 )
  {
    ((void (__stdcall *)(NiNode *, signed int))v2->m_spQuestInfo.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v10,
      1);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  }
}

//----- (00669550) --------------------------------------------------------
void __thiscall CDoorObject::CDoorObject(CDoorObject *this)
{
  ;
}

//----- (00669570) --------------------------------------------------------
void __thiscall AreaInfoMgr::AddRequestAreaTest(AreaInfoMgr *this, Name8 AreaID, int nTestType, int nID)
{
  int v4; // edi@1
  char *v5; // esi@1
  std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *v6; // ecx@1
  std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *v7; // eax@1
  int v8; // ecx@1
  AreaInfoMgr::TestData _Val; // [sp+8h] [bp-28h]@1

  _Val.m_nID = nID;
  *(_QWORD *)&_Val.m_kAreaID.n8_name[0] = *(_QWORD *)&AreaID;
  v4 = *(_DWORD *)&this->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  *(_QWORD *)&_Val.m_kAreaID.n8_name[8] = *(_QWORD *)&AreaID.n8_name[8];
  v5 = (char *)&this->m_listRequest;
  v6 = *(std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node **)(v4 + 4);
  *(_QWORD *)&_Val.m_kAreaID.n8_name[16] = *(_QWORD *)&AreaID.n8_name[16];
  *(_QWORD *)&_Val.m_kAreaID.n8_name[24] = *(_QWORD *)&AreaID.n8_name[24];
  _Val.m_eTestType = nTestType;
  v7 = std::_List_val<AreaInfoMgr::TestData_std::allocator<AreaInfoMgr::TestData>>::_Buynode<AreaInfoMgr::TestData>(
         (std::_List_val<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> > *)v5,
         (std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *)v4,
         v6,
         &_Val);
  v8 = *((_DWORD *)v5 + 1);
  if ( (unsigned int)(107374181 - v8) < 1 )
    std::_Xlength_error("list<T> too long");
  *((_DWORD *)v5 + 1) = v8 + 1;
  *(_DWORD *)(v4 + 4) = v7;
  v7->_Prev->_Next = v7;
}

//----- (00669600) --------------------------------------------------------
void __thiscall AreaInfoMgr::RemoveAreaInfo(AreaInfoMgr *this, Name8 dwAreaID)
{
  AreaInfoMgr *v2; // edi@1
  int v3; // eax@1
  int v4; // esi@1
  int i; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = *(_DWORD *)&this->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *(_DWORD *)v3;
  for ( i = *(_DWORD *)&this->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]; v3 != v4; v4 = *(_DWORD *)v4 )
  {
    if ( *(_QWORD *)(v4 + 12) == *(_QWORD *)&dwAreaID
      && *(_QWORD *)(v4 + 20) == *(_QWORD *)&dwAreaID.n8_name[8]
      && *(_QWORD *)(v4 + 28) == *(_QWORD *)&dwAreaID.n8_name[16]
      && *(_QWORD *)(v4 + 36) == *(_QWORD *)&dwAreaID.n8_name[24] )
    {
      if ( v4 != *(_DWORD *)&v2->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
      {
        **(_DWORD **)(v4 + 4) = *(_DWORD *)v4;
        *(_DWORD *)(*(_DWORD *)v4 + 4) = *(_DWORD *)(v4 + 4);
        operator delete((void *)v4);
        v3 = i;
        --v2->m_listRequest.baseclass_0.baseclass_0._Mysize;
      }
    }
  }
}

//----- (00669690) --------------------------------------------------------
void __thiscall AreaInfoMgr::Update(AreaInfoMgr *this)
{
  int v1; // eax@2
  int v2; // ebx@2
  int v3; // edi@3
  float *v4; // esi@4
  int v5; // eax@4
  bool v6; // al@4
  int v7; // esi@4
  int v8; // [sp+14h] [bp-8Ch]@2
  AreaInfoMgr *v9; // [sp+18h] [bp-88h]@1
  char szName[128]; // [sp+1Ch] [bp-84h]@3
  unsigned int v11; // [sp+9Ch] [bp-4h]@1
  int v12; // [sp+A0h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v9 = this;
  if ( this->m_pkFrameWork )
  {
    v1 = *(_DWORD *)&this->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v2 = *(_DWORD *)v1;
    v8 = *(_DWORD *)&this->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v1 != *(_DWORD *)v1 )
    {
      do
      {
        v3 = v2 + 8;
        *(_DWORD *)szName = *(_DWORD *)(v2 + 12);
        *(_DWORD *)&szName[4] = *(_DWORD *)(v2 + 16);
        *(_DWORD *)&szName[8] = *(_DWORD *)(v2 + 20);
        *(_DWORD *)&szName[12] = *(_DWORD *)(v2 + 24);
        *(_DWORD *)&szName[16] = *(_DWORD *)(v2 + 28);
        *(_DWORD *)&szName[20] = *(_DWORD *)(v2 + 32);
        *(_DWORD *)&szName[24] = *(_DWORD *)(v2 + 36);
        *(_DWORD *)&szName[28] = *(_DWORD *)(v2 + 40);
        szName[32] = 0;
        if ( g_pkMainChar )
        {
          v4 = (float *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
          v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
          v6 = World::TestArea(&g_kWorld, szName, *v4, *(float *)(v5 + 4));
          v7 = v2;
          v2 = *(_DWORD *)v2;
          if ( v6 )
          {
            if ( *(_DWORD *)(v3 + 36) == 1 && *(_DWORD *)v3 == -1 )
            {
              GameFrameWork::NcScenarioAreaEntryAck((GameFrameWork *)v9->m_pkFrameWork, szName);
              if ( v7 != *(_DWORD *)&v9->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
              {
                **(_DWORD **)(v7 + 4) = *(_DWORD *)v7;
                *(_DWORD *)(*(_DWORD *)v7 + 4) = *(_DWORD *)(v7 + 4);
                operator delete((void *)v7);
                --v9->m_listRequest.baseclass_0.baseclass_0._Mysize;
              }
            }
          }
          else
          {
            if ( *(_DWORD *)(v3 + 36) == 2 )
            {
              if ( *(_DWORD *)v3 == -1 )
              {
                GameFrameWork::NcScenarioAreaLeaveAck((GameFrameWork *)v9->m_pkFrameWork, szName);
                if ( v7 != *(_DWORD *)&v9->m_listRequest.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
                {
                  **(_DWORD **)(v7 + 4) = *(_DWORD *)v7;
                  *(_DWORD *)(*(_DWORD *)v7 + 4) = *(_DWORD *)(v7 + 4);
                  operator delete((void *)v7);
                  --v9->m_listRequest.baseclass_0.baseclass_0._Mysize;
                }
              }
            }
          }
        }
      }
      while ( v8 != v2 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00669800) --------------------------------------------------------
std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *__thiscall std::_List_val<AreaInfoMgr::TestData_std::allocator<AreaInfoMgr::TestData>>::_Buynode<AreaInfoMgr::TestData>(std::_List_val<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> > *this, std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *_Next, std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *_Prev, AreaInfoMgr::TestData *_Val)
{
  std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *result; // eax@1
  std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *v5; // edx@2
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *)operator new(0x30u);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<AreaInfoMgr::TestData,std::allocator<AreaInfoMgr::TestData> >::_Node *)-8 )
    memcpy(&result->_Myval, _Val, sizeof(result->_Myval));
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00669870) --------------------------------------------------------
int __thiscall User::GetTotalAvatarInfo(User *this)
{
  return this->m_iTotalAvatarInfo;
}

//----- (00669880) --------------------------------------------------------
PROTO_AVATARINFORMATION *__thiscall User::GetAvatarInfo(User *this, int iIndex)
{
  PROTO_AVATARINFORMATION *result; // eax@2

  if ( iIndex < this->m_iTotalAvatarInfo )
    result = &this->m_kAvatarInfo[iIndex];
  else
    result = 0;
  return result;
}

//----- (006698A0) --------------------------------------------------------
PROTO_AVATARINFORMATION *__thiscall User::GetAvatarInfoBySlot(User *this, char bySlot)
{
  int v2; // esi@1
  int v3; // eax@1
  char *v4; // edx@2
  PROTO_AVATARINFORMATION *result; // eax@5

  v2 = this->m_iTotalAvatarInfo;
  v3 = 0;
  if ( v2 <= 0 )
  {
LABEL_5:
    result = 0;
  }
  else
  {
    v4 = &this->m_kAvatarInfo[0].slot;
    while ( *v4 != bySlot )
    {
      ++v3;
      v4 += 130;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    result = &this->m_kAvatarInfo[v3];
  }
  return result;
}

//----- (006698F0) --------------------------------------------------------
PROTO_AVATARINFORMATION *__thiscall User::GetSelectedAvatarInfo(User *this)
{
  User *v1; // edi@1
  int v2; // esi@1
  int v3; // eax@1
  char v4; // cl@2
  int v5; // edx@2
  PROTO_AVATARINFORMATION *result; // eax@5

  v1 = this;
  v2 = this->m_iTotalAvatarInfo;
  v3 = 0;
  if ( v2 <= 0 )
  {
LABEL_5:
    result = 0;
  }
  else
  {
    v4 = this->m_bySelectedAvatartSlot;
    v5 = (int)&v1->m_kAvatarInfo[0].slot;
    while ( *(_BYTE *)v5 != v4 )
    {
      ++v3;
      v5 += 130;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    result = &v1->m_kAvatarInfo[v3];
  }
  return result;
}

//----- (00669940) --------------------------------------------------------
void __thiscall User::SetAvatarInfo(User *this, PROTO_AVATARINFORMATION *p, int iAvatarNum)
{
  this->m_iTotalAvatarInfo = iAvatarNum;
  if ( iAvatarNum > 6 )
    this->m_iTotalAvatarInfo = 6;
  memcpy((char *)this->m_kAvatarInfo, (char *)p, 130 * this->m_iTotalAvatarInfo);
}

//----- (00669980) --------------------------------------------------------
char __thiscall User::GetSelectedAvatarSlot(User *this)
{
  return this->m_bySelectedAvatartSlot;
}

//----- (00669990) --------------------------------------------------------
void __thiscall User::SetSelectedAvatarSlot(User *this, char bySlot)
{
  this->m_bySelectedAvatartSlot = bySlot;
}

//----- (006699A0) --------------------------------------------------------
int __thiscall User::GetEmptyAvatarSlot(User *this)
{
  int v1; // esi@1
  unsigned __int8 v2; // bl@1
  int v3; // eax@2
  char *v4; // edx@3

  v1 = this->m_iTotalAvatarInfo;
  v2 = 0;
  do
  {
    v3 = 0;
    if ( v1 <= 0 )
      return v2;
    v4 = &this->m_kAvatarInfo[0].slot;
    while ( *v4 != v2 )
    {
      ++v3;
      v4 += 130;
      if ( v3 >= v1 )
        return v2;
    }
    if ( (User *)((char *)this + 130 * v3) == (User *)-104 )
      return v2;
    ++v2;
  }
  while ( v2 < 6u );
  return -1;
}

//----- (006699F0) --------------------------------------------------------
void __thiscall User::MarkAsErased(User *this, char bySlot)
{
  int v2; // esi@1
  int v3; // eax@1
  char *v4; // edx@2
  char *v5; // eax@6

  v2 = this->m_iTotalAvatarInfo;
  v3 = 0;
  if ( v2 > 0 )
  {
    v4 = &this->m_kAvatarInfo[0].slot;
    while ( *v4 != bySlot )
    {
      ++v3;
      v4 += 130;
      if ( v3 >= v2 )
        return;
    }
    v5 = (char *)&this->m_kAvatarInfo[v3];
    if ( v5 )
      v5[41] = 6;
  }
}

//----- (00669A40) --------------------------------------------------------
bool __thiscall User::IsAvatarErased(User *this, PROTO_AVATARINFORMATION *pkInfo)
{
  return pkInfo->delinfo.day != 99;
}

//----- (00669A60) --------------------------------------------------------
PROTO_NC_CHAR_BASE_CMD *__thiscall User::GetMainCharBaseData(User *this)
{
  return &this->m_kMainCharBaseData;
}

//----- (00669A70) --------------------------------------------------------
void __thiscall User::SetMainCharShapeData(User *this, PROTO_AVATAR_SHAPE_INFO *p)
{
  *(_DWORD *)&this->m_kMainCharShapeData._bf0 = *(_DWORD *)&p->_bf0;
}

//----- (00669A90) --------------------------------------------------------
PROTO_AVATAR_SHAPE_INFO *__thiscall User::GetMainCharShapeData(User *this)
{
  return &this->m_kMainCharShapeData;
}

//----- (00669AA0) --------------------------------------------------------
void __thiscall User::SetMainCharMapLoginData(User *this, PROTO_NC_CHAR_MAPLOGIN_ACK *p)
{
  memcpy(&this->m_kMapLoginData, p, sizeof(this->m_kMapLoginData));
}

//----- (00669AC0) --------------------------------------------------------
PROTO_NC_CHAR_MAPLOGIN_ACK *__thiscall User::GetMainCharMapLoginData(User *this)
{
  return &this->m_kMapLoginData;
}

//----- (00669AD0) --------------------------------------------------------
Name3 *__thiscall User::GetMainCharLoginMapName(User *this)
{
  return &this->m_kMainCharBaseData.logininfo.currentmap;
}

//----- (00669AE0) --------------------------------------------------------
void __thiscall User::SetPKCount(User *this, unsigned int *kVal)
{
  this->m_kMainCharBaseData.pkcount = *kVal;
}

//----- (00669B00) --------------------------------------------------------
char __thiscall User::GetMainCharClass(User *this)
{
  return ((unsigned __int8)this->m_kMainCharShapeData._bf0 >> 2) & 0x1F;
}

//----- (00669B10) --------------------------------------------------------
void __thiscall User::SetMainCharClass(User *this, char kClass)
{
  this->m_kMainCharShapeData._bf0 ^= (this->m_kMainCharShapeData._bf0 ^ 4 * kClass) & 0x7C;
}

//----- (00669B30) --------------------------------------------------------
Name5 *__thiscall User::GetMainCharID(User *this)
{
  return &this->m_kMainCharBaseData.charid;
}

//----- (00669B40) --------------------------------------------------------
void __thiscall User::SetMainCharGender(User *this, char byGender)
{
  this->m_kMainCharShapeData._bf0 = (byGender << 7) | this->m_kMainCharShapeData._bf0 & 0x7F;
}

//----- (00669B60) --------------------------------------------------------
char __thiscall User::GetMainCharGender(User *this)
{
  return (unsigned __int8)this->m_kMainCharShapeData._bf0 >> 7;
}

//----- (00669B70) --------------------------------------------------------
void __thiscall User::SetMainCharHairType(User *this, char byHair)
{
  this->m_kMainCharShapeData.hairtype = byHair;
}

//----- (00669B80) --------------------------------------------------------
void __thiscall User::SetMainCharFaceType(User *this, char byFace)
{
  this->m_kMainCharShapeData.faceshape = byFace;
}

//----- (00669B90) --------------------------------------------------------
void __thiscall User::SetMainCharLoginMapInitPos(User *this, int iX, int iY)
{
  this->m_kMainCharBaseData.logininfo.currentcoord.xy.x = iX;
  this->m_kMainCharBaseData.logininfo.currentcoord.xy.y = iY;
}

//----- (00669BB0) --------------------------------------------------------
unsigned int __thiscall User::Lv(User *this)
{
  return this->m_kMainCharBaseData.Level;
}

//----- (00669BC0) --------------------------------------------------------
void __thiscall User::SetLv(User *this, char ucLv)
{
  this->m_kMainCharBaseData.Level = ucLv;
}

//----- (00669BD0) --------------------------------------------------------
__int64 __thiscall User::PrevExp(User *this)
{
  return this->m_kMapLoginData.param.PrevExp;
}

//----- (00669BE0) --------------------------------------------------------
__int64 __thiscall User::CurExp(User *this)
{
  return this->m_kMainCharBaseData.Experience;
}

//----- (00669BF0) --------------------------------------------------------
__int64 __thiscall User::NextExp(User *this)
{
  return this->m_kMapLoginData.param.NextExp;
}

//----- (00669C00) --------------------------------------------------------
void __thiscall User::AddCurExp(User *this, unsigned int uiExp)
{
  unsigned __int8 v2; // cf@1

  v2 = __CFADD__(uiExp, LODWORD(this->m_kMainCharBaseData.Experience));
  LODWORD(this->m_kMainCharBaseData.Experience) += uiExp;
  HIDWORD(this->m_kMainCharBaseData.Experience) += v2;
}

//----- (00669C20) --------------------------------------------------------
void __thiscall User::SubCurExp(User *this, unsigned int uiExp)
{
  bool v2; // cf@1

  v2 = LODWORD(this->m_kMainCharBaseData.Experience) < uiExp;
  LODWORD(this->m_kMainCharBaseData.Experience) -= uiExp;
  HIDWORD(this->m_kMainCharBaseData.Experience) -= v2;
}

//----- (00669C40) --------------------------------------------------------
void __thiscall User::SetCurExp(User *this, __int64 i64Exp)
{
  this->m_kMainCharBaseData.Experience = i64Exp;
}

//----- (00669C60) --------------------------------------------------------
void __thiscall User::SetParam(User *this, CHAR_PARAMETER_DATA *pkData)
{
  if ( pkData )
    memcpy(&this->m_kMapLoginData.param, pkData, sizeof(this->m_kMapLoginData.param));
}

//----- (00669C80) --------------------------------------------------------
int __thiscall User::BaseStr(User *this)
{
  return this->m_kMapLoginData.param.Strength.base;
}

//----- (00669C90) --------------------------------------------------------
int __thiscall User::BaseDex(User *this)
{
  return this->m_kMapLoginData.param.Dexterity.base;
}

//----- (00669CA0) --------------------------------------------------------
int __thiscall User::BaseCon(User *this)
{
  return this->m_kMapLoginData.param.Constitute.base;
}

//----- (00669CB0) --------------------------------------------------------
int __thiscall User::BaseWiz(User *this)
{
  return this->m_kMapLoginData.param.Wizdom.base;
}

//----- (00669CC0) --------------------------------------------------------
int __thiscall User::BaseInt(User *this)
{
  return this->m_kMapLoginData.param.Intelligence.base;
}

//----- (00669CD0) --------------------------------------------------------
int __thiscall User::BaseMen(User *this)
{
  return this->m_kMapLoginData.param.MentalPower.base;
}

//----- (00669CE0) --------------------------------------------------------
int __thiscall User::BaseWClow(User *this)
{
  return this->m_kMapLoginData.param.WClow.base;
}

//----- (00669CF0) --------------------------------------------------------
int __thiscall User::BaseWChigh(User *this)
{
  return this->m_kMapLoginData.param.WChigh.base;
}

//----- (00669D00) --------------------------------------------------------
int __thiscall User::BaseAC(User *this)
{
  return this->m_kMapLoginData.param.AC.base;
}

//----- (00669D10) --------------------------------------------------------
int __thiscall User::BaseTH(User *this)
{
  return this->m_kMapLoginData.param.TH.base;
}

//----- (00669D20) --------------------------------------------------------
int __thiscall User::BaseTB(User *this)
{
  return this->m_kMapLoginData.param.TB.base;
}

//----- (00669D30) --------------------------------------------------------
int __thiscall User::BaseMAlow(User *this)
{
  return this->m_kMapLoginData.param.MAlow.base;
}

//----- (00669D40) --------------------------------------------------------
int __thiscall User::BaseMAhigh(User *this)
{
  return this->m_kMapLoginData.param.MAhigh.base;
}

//----- (00669D50) --------------------------------------------------------
int __thiscall User::BaseMR(User *this)
{
  return this->m_kMapLoginData.param.MR.base;
}

//----- (00669D60) --------------------------------------------------------
int __thiscall User::BaseMH(User *this)
{
  return this->m_kMapLoginData.param.MH.base;
}

//----- (00669D70) --------------------------------------------------------
int __thiscall User::BaseMB(User *this)
{
  return this->m_kMapLoginData.param.MB.base;
}

//----- (00669D80) --------------------------------------------------------
int __thiscall User::BasePainR(User *this)
{
  return this->m_kMapLoginData.param.PainRes.base;
}

//----- (00669D90) --------------------------------------------------------
int __thiscall User::BaseRestraintR(User *this)
{
  return this->m_kMapLoginData.param.RestraintRes.base;
}

//----- (00669DA0) --------------------------------------------------------
int __thiscall User::BaseShockR(User *this)
{
  return this->m_kMapLoginData.param.ShockRes.base;
}

//----- (00669DB0) --------------------------------------------------------
int __thiscall User::BaseCurseR(User *this)
{
  return this->m_kMapLoginData.param.CurseRes.base;
}

//----- (00669DC0) --------------------------------------------------------
int __thiscall User::ChangeStr(User *this)
{
  return this->m_kMapLoginData.param.Strength.change;
}

//----- (00669DD0) --------------------------------------------------------
int __thiscall User::ChangeDex(User *this)
{
  return this->m_kMapLoginData.param.Dexterity.change;
}

//----- (00669DE0) --------------------------------------------------------
int __thiscall User::ChangeCon(User *this)
{
  return this->m_kMapLoginData.param.Constitute.change;
}

//----- (00669DF0) --------------------------------------------------------
int __thiscall User::ChangeWiz(User *this)
{
  return this->m_kMapLoginData.param.Wizdom.change;
}

//----- (00669E00) --------------------------------------------------------
int __thiscall User::ChangeInt(User *this)
{
  return this->m_kMapLoginData.param.Intelligence.change;
}

//----- (00669E10) --------------------------------------------------------
int __thiscall User::ChangeMen(User *this)
{
  return this->m_kMapLoginData.param.MentalPower.change;
}

//----- (00669E20) --------------------------------------------------------
int __thiscall User::ChangeWClow(User *this)
{
  return this->m_kMapLoginData.param.WClow.change;
}

//----- (00669E30) --------------------------------------------------------
int __thiscall User::ChangeWChigh(User *this)
{
  return this->m_kMapLoginData.param.WChigh.change;
}

//----- (00669E40) --------------------------------------------------------
int __thiscall User::ChangeAC(User *this)
{
  return this->m_kMapLoginData.param.AC.change;
}

//----- (00669E50) --------------------------------------------------------
int __thiscall User::ChangeTH(User *this)
{
  return this->m_kMapLoginData.param.TH.change;
}

//----- (00669E60) --------------------------------------------------------
int __thiscall User::ChangeTB(User *this)
{
  return this->m_kMapLoginData.param.TB.change;
}

//----- (00669E70) --------------------------------------------------------
int __thiscall User::ChangeMAlow(User *this)
{
  return this->m_kMapLoginData.param.MAlow.change;
}

//----- (00669E80) --------------------------------------------------------
int __thiscall User::ChangeMAhigh(User *this)
{
  return this->m_kMapLoginData.param.MAhigh.change;
}

//----- (00669E90) --------------------------------------------------------
int __thiscall User::ChangeMR(User *this)
{
  return this->m_kMapLoginData.param.MR.change;
}

//----- (00669EA0) --------------------------------------------------------
int __thiscall User::ChangeMH(User *this)
{
  return this->m_kMapLoginData.param.MH.change;
}

//----- (00669EB0) --------------------------------------------------------
int __thiscall User::ChangeMB(User *this)
{
  return this->m_kMapLoginData.param.MB.change;
}

//----- (00669EC0) --------------------------------------------------------
int __thiscall User::ChangePainR(User *this)
{
  return this->m_kMapLoginData.param.PainRes.change;
}

//----- (00669ED0) --------------------------------------------------------
int __thiscall User::ChangeRestraintR(User *this)
{
  return this->m_kMapLoginData.param.RestraintRes.change;
}

//----- (00669EE0) --------------------------------------------------------
int __thiscall User::ChangeShockR(User *this)
{
  return this->m_kMapLoginData.param.ShockRes.change;
}

//----- (00669EF0) --------------------------------------------------------
int __thiscall User::ChangeCurseR(User *this)
{
  return this->m_kMapLoginData.param.CurseRes.change;
}

//----- (00669F00) --------------------------------------------------------
int __thiscall User::HP(User *this)
{
  return this->m_kMainCharBaseData.CurHP;
}

//----- (00669F10) --------------------------------------------------------
int __thiscall User::SP(User *this)
{
  return this->m_kMainCharBaseData.CurSP;
}

//----- (00669F20) --------------------------------------------------------
int __thiscall User::AP(User *this)
{
  return 0;
}

//----- (00669F30) --------------------------------------------------------
int __thiscall User::LP(User *this)
{
  return this->m_kMainCharBaseData.CurLP;
}

//----- (00669F40) --------------------------------------------------------
void __thiscall User::SetHP(User *this, int iHP)
{
  PgFrameWork *v2; // eax@2

  this->m_kMainCharBaseData.CurHP = iHP;
  if ( (double)(unsigned int)iHP < (double)this->m_kMapLoginData.param.MaxHp * 0.5 )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
      GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v2, BIL_BATTLE_5);
  }
}

//----- (00669FB0) --------------------------------------------------------
void __thiscall User::SetSP(User *this, int iSP)
{
  this->m_kMainCharBaseData.CurSP = iSP;
}

//----- (00669FC0) --------------------------------------------------------
void __thiscall User::SetLP(User *this, int iLP)
{
  this->m_kMainCharBaseData.CurLP = iLP;
}

//----- (00669FE0) --------------------------------------------------------
int __thiscall User::MaxHP(User *this)
{
  return this->m_kMapLoginData.param.MaxHp;
}

//----- (00669FF0) --------------------------------------------------------
int __thiscall User::MaxSP(User *this)
{
  return this->m_kMapLoginData.param.MaxSp;
}

//----- (0066A000) --------------------------------------------------------
int __thiscall User::MaxAP(User *this)
{
  return this->m_kMapLoginData.param.MaxAp;
}

//----- (0066A010) --------------------------------------------------------
int __thiscall User::MaxLP(User *this)
{
  return this->m_kMapLoginData.param.MaxLp;
}

//----- (0066A020) --------------------------------------------------------
int __thiscall User::PwrStone(User *this)
{
  return this->m_kMainCharBaseData.CurPwrStone;
}

//----- (0066A030) --------------------------------------------------------
int __thiscall User::GrdStone(User *this)
{
  return this->m_kMainCharBaseData.CurGrdStone;
}

//----- (0066A040) --------------------------------------------------------
int __thiscall User::HPStone(User *this)
{
  return this->m_kMainCharBaseData.CurHPStone;
}

//----- (0066A050) --------------------------------------------------------
int __thiscall User::SPStone(User *this)
{
  return this->m_kMainCharBaseData.CurSPStone;
}

//----- (0066A060) --------------------------------------------------------
int __thiscall User::MaxPwrStone(User *this)
{
  return this->m_kMapLoginData.param.PwrStone.MaxStone;
}

//----- (0066A070) --------------------------------------------------------
int __thiscall User::MaxGrdStone(User *this)
{
  return this->m_kMapLoginData.param.GrdStone.MaxStone;
}

//----- (0066A080) --------------------------------------------------------
int __thiscall User::MaxHPStone(User *this)
{
  return this->m_kMapLoginData.param.MaxHPStone;
}

//----- (0066A090) --------------------------------------------------------
int __thiscall User::MaxSPStone(User *this)
{
  return this->m_kMapLoginData.param.MaxSPStone;
}

//----- (0066A0A0) --------------------------------------------------------
void __thiscall User::SetPwrStone(User *this, int iVal)
{
  this->m_kMainCharBaseData.CurPwrStone = iVal;
}

//----- (0066A0C0) --------------------------------------------------------
void __thiscall User::SetGrdStone(User *this, int iVal)
{
  this->m_kMainCharBaseData.CurGrdStone = iVal;
}

//----- (0066A0E0) --------------------------------------------------------
void __thiscall User::SetHPStone(User *this, int iVal)
{
  this->m_kMainCharBaseData.CurHPStone = iVal;
}

//----- (0066A100) --------------------------------------------------------
void __thiscall User::SetSPStone(User *this, int iVal)
{
  this->m_kMainCharBaseData.CurSPStone = iVal;
}

//----- (0066A120) --------------------------------------------------------
void __thiscall User::SetMaxPwrStone(User *this, int iVal)
{
  this->m_kMapLoginData.param.PwrStone.MaxStone = iVal;
}

//----- (0066A130) --------------------------------------------------------
void __thiscall User::SetMaxGrdStone(User *this, int iVal)
{
  this->m_kMapLoginData.param.GrdStone.MaxStone = iVal;
}

//----- (0066A140) --------------------------------------------------------
void __thiscall User::SetMaxHPStone(User *this, int iVal)
{
  this->m_kMapLoginData.param.MaxHPStone = iVal;
}

//----- (0066A150) --------------------------------------------------------
void __thiscall User::SetMaxSPStone(User *this, int iVal)
{
  this->m_kMapLoginData.param.MaxSPStone = iVal;
}

//----- (0066A160) --------------------------------------------------------
bool __thiscall User::IsPwrStroneActive(User *this)
{
  return this->m_kMapLoginData.param.PwrStone.flag != 0;
}

//----- (0066A170) --------------------------------------------------------
bool __thiscall User::IsGrdStroneActive(User *this)
{
  return this->m_kMapLoginData.param.GrdStone.flag != 0;
}

//----- (0066A180) --------------------------------------------------------
__int64 __thiscall User::GetMoney(User *this)
{
  return this->m_kMainCharBaseData.Cen;
}

//----- (0066A190) --------------------------------------------------------
void __thiscall User::SetMoney(User *this, __int64 i64Money)
{
  this->m_kMainCharBaseData.Cen = i64Money;
}

//----- (0066A1B0) --------------------------------------------------------
__int64 __cdecl User::GetGem(__int64 i64Money)
{
  return i64Money / 100000000;
}

//----- (0066A1D0) --------------------------------------------------------
__int64 __cdecl User::GetGold(__int64 i64Money)
{
  return i64Money / 1000000 - 100 * i64Money / 100000000;
}

//----- (0066A220) --------------------------------------------------------
__int64 __cdecl User::GetSilver(__int64 i64Money)
{
  return i64Money / 1000 - 1000 * i64Money / 1000000;
}

//----- (0066A280) --------------------------------------------------------
__int64 __cdecl User::GetCopper(__int64 i64Money)
{
  return i64Money % 1000;
}

//----- (0066A2C0) --------------------------------------------------------
__int64 __cdecl User::ConvertMoney(__int64 i64Copper, __int64 i64Silver, __int64 i64Gold, __int64 i64Gem)
{
  return i64Copper + 1000 * (i64Silver + 1000 * (i64Gold + 100 * i64Gem));
}

//----- (0066A310) --------------------------------------------------------
void __thiscall User::InitABState(User *this, PROTO_NC_CHAR_ABSTATE_CMD *pkProto)
{
  int v2; // esi@1
  int v3; // ebx@1
  void *v4; // edx@2
  const void *v5; // eax@2

  v2 = pkProto->number;
  v3 = 0;
  this->m_iTotalAbStateInfo = v2;
  if ( v2 > 0 )
  {
    v4 = this->m_akAbStateInfo;
    v5 = &pkProto[1];
    do
    {
      memcpy(v4, v5, 0x24u);
      ++v3;
      v5 = (char *)v5 + 36;
      v4 = (char *)v4 + 36;
    }
    while ( v3 < this->m_iTotalAbStateInfo );
  }
}

//----- (0066A360) --------------------------------------------------------
void __thiscall User::SetStr(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Strength.base = *kVal;
}

//----- (0066A380) --------------------------------------------------------
void __thiscall User::SetCon(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Constitute.base = *kVal;
}

//----- (0066A3A0) --------------------------------------------------------
void __thiscall User::SetDex(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Dexterity.base = *kVal;
}

//----- (0066A3C0) --------------------------------------------------------
void __thiscall User::SetInt(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Intelligence.base = *kVal;
}

//----- (0066A3E0) --------------------------------------------------------
void __thiscall User::SetWiz(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Wizdom.base = *kVal;
}

//----- (0066A400) --------------------------------------------------------
void __thiscall User::SetMen(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MentalPower.base = *kVal;
}

//----- (0066A420) --------------------------------------------------------
void __thiscall User::SetWCLow(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.WClow.base = *kVal;
}

//----- (0066A440) --------------------------------------------------------
void __thiscall User::SetWCHigh(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.WChigh.base = *kVal;
}

//----- (0066A460) --------------------------------------------------------
void __thiscall User::SetAC(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.AC.base = *kVal;
}

//----- (0066A480) --------------------------------------------------------
void __thiscall User::SetTH(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.TH.base = *kVal;
}

//----- (0066A4A0) --------------------------------------------------------
void __thiscall User::SetTB(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.TB.base = *kVal;
}

//----- (0066A4C0) --------------------------------------------------------
void __thiscall User::SetMALow(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MAlow.base = *kVal;
}

//----- (0066A4E0) --------------------------------------------------------
void __thiscall User::SetMAHigh(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MAhigh.base = *kVal;
}

//----- (0066A500) --------------------------------------------------------
void __thiscall User::SetMR(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MR.base = *kVal;
}

//----- (0066A520) --------------------------------------------------------
void __thiscall User::SetMH(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MH.base = *kVal;
}

//----- (0066A540) --------------------------------------------------------
void __thiscall User::SetMB(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MB.base = *kVal;
}

//----- (0066A560) --------------------------------------------------------
void __thiscall User::SetChangeStr(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Strength.change = *kVal;
}

//----- (0066A580) --------------------------------------------------------
void __thiscall User::SetChangeCon(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Constitute.change = *kVal;
}

//----- (0066A5A0) --------------------------------------------------------
void __thiscall User::SetChangeDex(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Dexterity.change = *kVal;
}

//----- (0066A5C0) --------------------------------------------------------
void __thiscall User::SetChangeInt(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Intelligence.change = *kVal;
}

//----- (0066A5E0) --------------------------------------------------------
void __thiscall User::SetChangeWiz(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.Wizdom.change = *kVal;
}

//----- (0066A600) --------------------------------------------------------
void __thiscall User::SetChangeMen(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MentalPower.change = *kVal;
}

//----- (0066A620) --------------------------------------------------------
void __thiscall User::SetChangeWCLow(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.WClow.change = *kVal;
}

//----- (0066A640) --------------------------------------------------------
void __thiscall User::SetChangeWCHigh(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.WChigh.change = *kVal;
}

//----- (0066A660) --------------------------------------------------------
void __thiscall User::SetChangeAC(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.AC.change = *kVal;
}

//----- (0066A680) --------------------------------------------------------
void __thiscall User::SetChangeTH(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.TH.change = *kVal;
}

//----- (0066A6A0) --------------------------------------------------------
void __thiscall User::SetChangeTB(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.TB.change = *kVal;
}

//----- (0066A6C0) --------------------------------------------------------
void __thiscall User::SetChangeMALow(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MAlow.change = *kVal;
}

//----- (0066A6E0) --------------------------------------------------------
void __thiscall User::SetChangeMAHigh(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MAhigh.change = *kVal;
}

//----- (0066A700) --------------------------------------------------------
void __thiscall User::SetChangeMR(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MR.change = *kVal;
}

//----- (0066A720) --------------------------------------------------------
void __thiscall User::SetChangeMH(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MH.change = *kVal;
}

//----- (0066A740) --------------------------------------------------------
void __thiscall User::SetChangeMB(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MB.change = *kVal;
}

//----- (0066A760) --------------------------------------------------------
void __thiscall User::SetMaxHP(User *this, unsigned int *kVal)
{
  unsigned int v2; // eax@1

  v2 = *kVal;
  this->m_kMapLoginData.param.MaxHp = *kVal;
  if ( g_pkMainChar )
    ((void (__stdcall *)(_DWORD))g_pkMainChar->baseclass_0.vfptr[4].SetAbStateProperty)(v2);
}

//----- (0066A790) --------------------------------------------------------
void __thiscall User::SetMaxSP(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MaxSp = *kVal;
}

//----- (0066A7B0) --------------------------------------------------------
void __thiscall User::SetMaxLP(User *this, unsigned int *kVal)
{
  this->m_kMapLoginData.param.MaxLp = *kVal;
}

//----- (0066A800) --------------------------------------------------------
NiTList<int> *__thiscall User::GetStatTitleList(User *this)
{
  return &this->m_kStatTitleList;
}

//----- (0066A810) --------------------------------------------------------
int __thiscall User::GetStatDistribute(User *this, char byStatDistribute)
{
  int result; // eax@2

  switch ( byStatDistribute )
  {
    case 0:
      result = this->m_kMainCharBaseData.statdistribute.Strength;
      break;
    case 1:
      result = this->m_kMainCharBaseData.statdistribute.Constitute;
      break;
    case 2:
      result = this->m_kMainCharBaseData.statdistribute.Dexterity;
      break;
    case 3:
      result = this->m_kMainCharBaseData.statdistribute.Intelligence;
      break;
    case 4:
      result = this->m_kMainCharBaseData.statdistribute.MentalPower;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (0066A880) --------------------------------------------------------
void __thiscall User::ClearDistributeStatPoint(User *this)
{
  *(_DWORD *)&this->m_kMainCharBaseData.statdistribute.Strength = 0;
  this->m_kMainCharBaseData.statdistribute.MentalPower = 0;
}

//----- (0066A8A0) --------------------------------------------------------
unsigned __int16 *__thiscall User::GetValidate_new(User *this)
{
  return this->m_wValidate;
}

//----- (0066A8B0) --------------------------------------------------------
void __thiscall User::SetValidata_new(User *this, unsigned __int16 *pValidate)
{
  memcpy(this->m_wValidate, pValidate, sizeof(this->m_wValidate));
}

//----- (0066A8D0) --------------------------------------------------------
void __thiscall User::SetCoin(User *this, unsigned __int64 nCoin)
{
  this->m_kCoin = nCoin;
}

//----- (0066A8F0) --------------------------------------------------------
void __thiscall User::SetExchangeableCoin(User *this, unsigned __int64 nCoin)
{
  this->m_kExchangeableCoin = nCoin;
}

//----- (0066A910) --------------------------------------------------------
unsigned __int64 __thiscall User::Coin(User *this)
{
  return this->m_kCoin;
}

//----- (0066A920) --------------------------------------------------------
unsigned __int64 __thiscall User::ExchangeableCoin(User *this)
{
  return this->m_kExchangeableCoin;
}

//----- (0066A930) --------------------------------------------------------
void __thiscall User::DeleteAvatar(User *this, char bySlot)
{
  int v2; // edi@1
  int v3; // eax@1
  char *v4; // esi@2
  int v5; // edx@7
  char *v6; // eax@8

  v2 = this->m_iTotalAvatarInfo;
  v3 = 0;
  if ( v2 > 0 )
  {
    v4 = &this->m_kAvatarInfo[0].slot;
    while ( *v4 != bySlot )
    {
      ++v3;
      v4 += 130;
      if ( v3 >= v2 )
        return;
    }
    if ( v3 != -1 )
    {
      v5 = v3;
      if ( v3 < v2 - 1 )
      {
        v6 = &this->m_kAvatarInfo[v3].name.n5_name[4];
        do
        {
          *((_DWORD *)v6 - 2) = *(_DWORD *)(v6 + 122);
          *((_DWORD *)v6 - 1) = *(_DWORD *)(v6 + 126);
          *(_DWORD *)v6 = *(_DWORD *)(v6 + 130);
          *((_DWORD *)v6 + 1) = *(_DWORD *)(v6 + 134);
          *((_DWORD *)v6 + 2) = *(_DWORD *)(v6 + 138);
          *((_DWORD *)v6 + 3) = *(_DWORD *)(v6 + 142);
          *((_WORD *)v6 + 8) = *((_WORD *)v6 + 73);
          v6[18] = v6[148];
          *(_DWORD *)(v6 + 19) = *(_DWORD *)(v6 + 149);
          *(_DWORD *)(v6 + 23) = *(_DWORD *)(v6 + 153);
          *(_DWORD *)(v6 + 27) = *(_DWORD *)(v6 + 157);
          *(_DWORD *)(v6 + 31) = *(_DWORD *)(v6 + 161);
          v6[35] = v6[165];
          *((_DWORD *)v6 + 9) = *(_DWORD *)(v6 + 166);
          memcpy(v6 + 40, v6 + 170, 0x52u);
          ++v5;
          v6 += 130;
        }
        while ( v5 < this->m_iTotalAvatarInfo - 1 );
      }
      --this->m_iTotalAvatarInfo;
    }
  }
}

//----- (0066AAA0) --------------------------------------------------------
void __thiscall User::SetMainCharLoginMapName(User *this, Name3 *kMapName)
{
  *(_QWORD *)&this->m_kMainCharBaseData.logininfo.currentmap.n3_name[0] = *(_QWORD *)&kMapName->n3_name[0];
  *(_DWORD *)&this->m_kMainCharBaseData.logininfo.currentmap.n3_name[8] = *(_DWORD *)&kMapName->n3_name[8];
}

//----- (0066AAD0) --------------------------------------------------------
void __thiscall User::SetMainCharID(User *this, Name5 *kCharID)
{
  *(_QWORD *)&this->m_kMainCharBaseData.charid.n5_name[0] = *(_QWORD *)&kCharID->n5_name[0];
  *(_QWORD *)&this->m_kMainCharBaseData.charid.n5_name[8] = *(_QWORD *)&kCharID->n5_name[8];
  *(_DWORD *)&this->m_kMainCharBaseData.charid.n5_name[16] = *(_DWORD *)&kCharID->n5_name[16];
}

//----- (0066AB10) --------------------------------------------------------
void __thiscall User::ChangeParam(User *this, CHAR_PARAMCHANGE_CMD *pkParam)
{
  switch ( pkParam->flag )
  {
    case 0:
      this->m_kMapLoginData.param.Strength.base = pkParam->value;
      break;
    case 1:
      this->m_kMapLoginData.param.Constitute.base = pkParam->value;
      break;
    case 2:
      this->m_kMapLoginData.param.Dexterity.base = pkParam->value;
      break;
    case 3:
      this->m_kMapLoginData.param.Intelligence.base = pkParam->value;
      break;
    case 4:
      this->m_kMapLoginData.param.Wizdom.base = pkParam->value;
      break;
    case 5:
      this->m_kMapLoginData.param.MentalPower.base = pkParam->value;
      break;
    case 6:
      this->m_kMapLoginData.param.WClow.base = pkParam->value;
      break;
    case 7:
      this->m_kMapLoginData.param.WChigh.base = pkParam->value;
      break;
    case 8:
      this->m_kMapLoginData.param.AC.base = pkParam->value;
      break;
    case 9:
      this->m_kMapLoginData.param.TH.base = pkParam->value;
      break;
    case 0xA:
      this->m_kMapLoginData.param.TB.base = pkParam->value;
      break;
    case 0xB:
      this->m_kMapLoginData.param.MAlow.base = pkParam->value;
      break;
    case 0xC:
      this->m_kMapLoginData.param.MAhigh.base = pkParam->value;
      break;
    case 0xD:
      this->m_kMapLoginData.param.MR.base = pkParam->value;
      break;
    case 0xE:
      this->m_kMapLoginData.param.MH.base = pkParam->value;
      break;
    case 0xF:
      this->m_kMapLoginData.param.MB.base = pkParam->value;
      break;
    case 0x10:
      User::SetMaxHP(this, &pkParam->value);
      break;
    case 0x11:
      this->m_kMapLoginData.param.MaxSp = pkParam->value;
      break;
    case 0x12:
      this->m_kFreeStatPoint.dwFreeWC = pkParam->value;
      break;
    case 0x13:
      this->m_kFreeStatPoint.dwFreeAC = pkParam->value;
      break;
    case 0x14:
      this->m_kFreeStatPoint.dwFreeMA = pkParam->value;
      break;
    case 0x15:
      this->m_kFreeStatPoint.dwFreeMR = pkParam->value;
      break;
    case 0x16:
      this->m_kFreeStatPoint.dwFreeTH = pkParam->value;
      break;
    case 0x17:
      this->m_kFreeStatPoint.dwFreeTB = pkParam->value;
      break;
    case 0x18:
      this->m_kFreeStatPoint.dwFreeCRITICAL = pkParam->value;
      break;
    case 0x19:
      this->m_kFreeStatPoint.dwFreeBLOCK = pkParam->value;
      break;
    case 0x1A:
      this->m_kFreeStatPoint.dwFreeMAXHP = pkParam->value;
      break;
    case 0x1B:
      this->m_kFreeStatPoint.dwFreeMAXSP = pkParam->value;
      break;
    case 0x24:
      this->m_kMapLoginData.param.MaxLp = pkParam->value;
      break;
    default:
      return;
  }
}

//----- (0066AD40) --------------------------------------------------------
void __thiscall User::ChangeChangeParam(User *this, CHAR_PARAMCHANGE_CMD *pkParam)
{
  switch ( pkParam->flag )
  {
    case 0:
      this->m_kMapLoginData.param.Strength.change = pkParam->value;
      break;
    case 1:
      this->m_kMapLoginData.param.Constitute.change = pkParam->value;
      break;
    case 2:
      this->m_kMapLoginData.param.Dexterity.change = pkParam->value;
      break;
    case 3:
      this->m_kMapLoginData.param.Intelligence.change = pkParam->value;
      break;
    case 4:
      this->m_kMapLoginData.param.Wizdom.change = pkParam->value;
      break;
    case 5:
      this->m_kMapLoginData.param.MentalPower.change = pkParam->value;
      break;
    case 6:
      this->m_kMapLoginData.param.WClow.change = pkParam->value;
      break;
    case 7:
      this->m_kMapLoginData.param.WChigh.change = pkParam->value;
      break;
    case 8:
      this->m_kMapLoginData.param.AC.change = pkParam->value;
      break;
    case 9:
      this->m_kMapLoginData.param.TH.change = pkParam->value;
      break;
    case 0xA:
      this->m_kMapLoginData.param.TB.change = pkParam->value;
      break;
    case 0xB:
      this->m_kMapLoginData.param.MAlow.change = pkParam->value;
      break;
    case 0xC:
      this->m_kMapLoginData.param.MAhigh.change = pkParam->value;
      break;
    case 0xD:
      this->m_kMapLoginData.param.MR.change = pkParam->value;
      break;
    case 0xE:
      this->m_kMapLoginData.param.MH.change = pkParam->value;
      break;
    case 0xF:
      this->m_kMapLoginData.param.MB.change = pkParam->value;
      break;
    case 0x10:
      User::SetMaxHP(this, &pkParam->value);
      break;
    case 0x11:
      this->m_kMapLoginData.param.MaxSp = pkParam->value;
      break;
    case 0x12:
      this->m_kFreeStatPoint.dwFreeWC = pkParam->value;
      break;
    case 0x13:
      this->m_kFreeStatPoint.dwFreeAC = pkParam->value;
      break;
    case 0x14:
      this->m_kFreeStatPoint.dwFreeMA = pkParam->value;
      break;
    case 0x15:
      this->m_kFreeStatPoint.dwFreeMR = pkParam->value;
      break;
    case 0x16:
      this->m_kFreeStatPoint.dwFreeTH = pkParam->value;
      break;
    case 0x17:
      this->m_kFreeStatPoint.dwFreeTB = pkParam->value;
      break;
    case 0x18:
      this->m_kFreeStatPoint.dwFreeCRITICAL = pkParam->value;
      break;
    case 0x19:
      this->m_kFreeStatPoint.dwFreeBLOCK = pkParam->value;
      break;
    case 0x1A:
      this->m_kFreeStatPoint.dwFreeMAXHP = pkParam->value;
      break;
    case 0x1B:
      this->m_kFreeStatPoint.dwFreeMAXSP = pkParam->value;
      break;
    case 0x24:
      this->m_kMapLoginData.param.MaxLp = pkParam->value;
      break;
    default:
      return;
  }
}

//----- (0066AF70) --------------------------------------------------------
void __thiscall User::StatChangeByDistributePoint(User *this, char byStatDistribute, int iChange)
{
  this->m_kMainCharBaseData.statdistribute.RedistributePoint += iChange;
  n -= iChange;
  switch ( byStatDistribute )
  {
    case 0:
      this->m_kMainCharBaseData.statdistribute.Strength += iChange;
      break;
    case 1:
      this->m_kMainCharBaseData.statdistribute.Constitute += iChange;
      break;
    case 2:
      this->m_kMainCharBaseData.statdistribute.Dexterity += iChange;
      break;
    case 3:
      this->m_kMainCharBaseData.statdistribute.Intelligence += iChange;
      break;
    case 4:
      this->m_kMainCharBaseData.statdistribute.MentalPower += iChange;
      break;
    default:
      return;
  }
}

//----- (0066AFE0) --------------------------------------------------------
PROTO_AVATARINFORMATION *__thiscall User::GetAvatarInfo(User *this, Name5 *CharName)
{
  signed int v2; // edi@1
  char *v3; // esi@1
  int v4; // edx@2
  int v5; // ecx@2
  int v6; // eax@2
  User *v8; // [sp+Ch] [bp-34h]@1
  Name5 AvatarName; // [sp+10h] [bp-30h]@2
  char acName[21]; // [sp+24h] [bp-1Ch]@2
  unsigned int v11; // [sp+3Ch] [bp-4h]@1
  int v12; // [sp+40h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v8 = this;
  v2 = 0;
  v3 = &this->m_kAvatarInfo[0].name.n5_name[8];
  while ( 1 )
  {
    v4 = *(_DWORD *)v3;
    v5 = *((_DWORD *)v3 - 1);
    *(_DWORD *)acName = *((_DWORD *)v3 - 2);
    v6 = *((_DWORD *)v3 + 1);
    *(_DWORD *)&acName[8] = v4;
    *(_DWORD *)&acName[12] = v6;
    *(_DWORD *)&acName[4] = v5;
    *(_DWORD *)&acName[16] = *((_DWORD *)v3 + 2);
    acName[20] = 0;
    *(_QWORD *)&AvatarName.n5_name[12] = 0i64;
    *(_QWORD *)&AvatarName.n5_name[4] = 0i64;
    *(_QWORD *)&AvatarName.n5_name[0] = 0i64;
    strncpy(AvatarName.n5_name, acName, 0x14u);
    if ( *(_QWORD *)&AvatarName == *(_QWORD *)&CharName->n5_name[0] )
    {
      if ( *(_QWORD *)&AvatarName.n5_name[8] == *(_QWORD *)&CharName->n5_name[8]
        && *(_DWORD *)&AvatarName.n5_name[16] == *(_DWORD *)&CharName->n5_name[16] )
        break;
    }
    ++v2;
    v3 += 130;
    if ( v2 >= 6 )
      return 0;
  }
  return &v8->m_kAvatarInfo[v2];
}
// A85C00: using guessed type int __security_cookie;

//----- (0066B0B0) --------------------------------------------------------
void __thiscall User::_User(User *this)
{
  User *v1; // ebx@1
  char *v2; // edi@1
  int v3; // eax@1
  NiTListItem<int> *v4; // esi@1
  NiTListItem<int> *v5; // ST0C_4@2

  v1 = this;
  v2 = (char *)&this->m_kStatTitleList;
  v3 = 0;
  this->m_kStatTitleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTPointerListBase<DFALL<int>_int>::_vftable_;
  v4 = this->m_kStatTitleList.baseclass_0.baseclass_0.m_pkHead;
  if ( v4 )
  {
    do
    {
      v5 = v4;
      v4 = v4->m_pkNext;
      (*(void (__thiscall **)(char *, NiTListItem<int> *))(*(_DWORD *)v2 + 8))(v2, v5);
    }
    while ( v4 );
    v3 = 0;
  }
  *((_DWORD *)v2 + 3) = v3;
  *((_DWORD *)v2 + 1) = v3;
  *((_DWORD *)v2 + 2) = v3;
  *(_DWORD *)v2 = &NiTListBase<DFALL<int>_int>::_vftable_;
  _eh_vector_destructor_iterator_(
    v1->m_kAvatarInfo,
    0x82u,
    6,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}
// 9C4EB0: using guessed type int (__thiscall *NiTListBase_DFALL_int__int____vftable_)(void *p, char);
// 9C4EC0: using guessed type int (__thiscall *NiTPointerListBase_DFALL_int__int____vftable_)(void *p, char);

//----- (0066B150) --------------------------------------------------------
bool __thiscall User::AddAvatarInfo(User *this, PROTO_AVATARINFORMATION *p)
{
  User *v2; // esi@1
  int v3; // eax@1
  bool result; // al@2

  v2 = this;
  v3 = this->m_iTotalAvatarInfo;
  if ( v3 < 6 )
  {
    PROTO_AVATARINFORMATION::operator_(&this->m_kAvatarInfo[v3], p);
    result = 1;
    ++v2->m_iTotalAvatarInfo;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0066B190) --------------------------------------------------------
void __thiscall User::ChangeParam(User *this, PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *pkProto)
{
  PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *v2; // edx@1
  signed int v3; // ebx@1
  User *v4; // edi@1
  PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *v5; // esi@2
  int v6; // eax@20

  v2 = pkProto;
  v3 = 0;
  v4 = this;
  if ( pkProto->changenum )
  {
    v5 = pkProto + 2;
    do
    {
      switch ( v5[-1].changenum )
      {
        case 0:
          v4->m_kMapLoginData.param.Strength.base = *(_DWORD *)&v5->changenum;
          break;
        case 1:
          v4->m_kMapLoginData.param.Constitute.base = *(_DWORD *)&v5->changenum;
          break;
        case 2:
          v4->m_kMapLoginData.param.Dexterity.base = *(_DWORD *)&v5->changenum;
          break;
        case 3:
          v4->m_kMapLoginData.param.Intelligence.base = *(_DWORD *)&v5->changenum;
          break;
        case 4:
          v4->m_kMapLoginData.param.Wizdom.base = *(_DWORD *)&v5->changenum;
          break;
        case 5:
          v4->m_kMapLoginData.param.MentalPower.base = *(_DWORD *)&v5->changenum;
          break;
        case 6:
          v4->m_kMapLoginData.param.WClow.base = *(_DWORD *)&v5->changenum;
          break;
        case 7:
          v4->m_kMapLoginData.param.WChigh.base = *(_DWORD *)&v5->changenum;
          break;
        case 8:
          v4->m_kMapLoginData.param.AC.base = *(_DWORD *)&v5->changenum;
          break;
        case 9:
          v4->m_kMapLoginData.param.TH.base = *(_DWORD *)&v5->changenum;
          break;
        case 0xA:
          v4->m_kMapLoginData.param.TB.base = *(_DWORD *)&v5->changenum;
          break;
        case 0xB:
          v4->m_kMapLoginData.param.MAlow.base = *(_DWORD *)&v5->changenum;
          break;
        case 0xC:
          v4->m_kMapLoginData.param.MAhigh.base = *(_DWORD *)&v5->changenum;
          break;
        case 0xD:
          v4->m_kMapLoginData.param.MR.base = *(_DWORD *)&v5->changenum;
          break;
        case 0xE:
          v4->m_kMapLoginData.param.MH.base = *(_DWORD *)&v5->changenum;
          break;
        case 0xF:
          v4->m_kMapLoginData.param.MB.base = *(_DWORD *)&v5->changenum;
          break;
        case 0x10:
          v6 = *(_DWORD *)&v5->changenum;
          v4->m_kMapLoginData.param.MaxHp = *(_DWORD *)&v5->changenum;
          if ( g_pkMainChar )
          {
            ((void (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[4].SetAbStateProperty)(v6);
            v2 = pkProto;
          }
          break;
        case 0x11:
          v4->m_kMapLoginData.param.MaxSp = *(_DWORD *)&v5->changenum;
          break;
        case 0x12:
          v4->m_kFreeStatPoint.dwFreeWC = *(_DWORD *)&v5->changenum;
          break;
        case 0x13:
          v4->m_kFreeStatPoint.dwFreeAC = *(_DWORD *)&v5->changenum;
          break;
        case 0x14:
          v4->m_kFreeStatPoint.dwFreeMA = *(_DWORD *)&v5->changenum;
          break;
        case 0x15:
          v4->m_kFreeStatPoint.dwFreeMR = *(_DWORD *)&v5->changenum;
          break;
        case 0x16:
          v4->m_kFreeStatPoint.dwFreeTH = *(_DWORD *)&v5->changenum;
          break;
        case 0x17:
          v4->m_kFreeStatPoint.dwFreeTB = *(_DWORD *)&v5->changenum;
          break;
        case 0x18:
          v4->m_kFreeStatPoint.dwFreeCRITICAL = *(_DWORD *)&v5->changenum;
          break;
        case 0x19:
          v4->m_kFreeStatPoint.dwFreeBLOCK = *(_DWORD *)&v5->changenum;
          break;
        case 0x1A:
          v4->m_kFreeStatPoint.dwFreeMAXHP = *(_DWORD *)&v5->changenum;
          break;
        case 0x1B:
          v4->m_kFreeStatPoint.dwFreeMAXSP = *(_DWORD *)&v5->changenum;
          break;
        case 0x24:
          v4->m_kMapLoginData.param.MaxLp = *(_DWORD *)&v5->changenum;
          break;
        default:
          break;
      }
      ++v3;
      v5 += 5;
    }
    while ( v3 < v2->changenum );
  }
}

//----- (0066B3E0) --------------------------------------------------------
void __thiscall User::ChangeChangeParam(User *this, PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *pkProto)
{
  PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *v2; // edx@1
  signed int v3; // ebx@1
  User *v4; // edi@1
  PROTO_NC_CHAR_BASEPARAMCHANGE_CMD *v5; // esi@2
  int v6; // eax@20

  v2 = pkProto;
  v3 = 0;
  v4 = this;
  if ( pkProto->changenum )
  {
    v5 = pkProto + 2;
    do
    {
      switch ( v5[-1].changenum )
      {
        case 0:
          v4->m_kMapLoginData.param.Strength.change = *(_DWORD *)&v5->changenum;
          break;
        case 1:
          v4->m_kMapLoginData.param.Constitute.change = *(_DWORD *)&v5->changenum;
          break;
        case 2:
          v4->m_kMapLoginData.param.Dexterity.change = *(_DWORD *)&v5->changenum;
          break;
        case 3:
          v4->m_kMapLoginData.param.Intelligence.change = *(_DWORD *)&v5->changenum;
          break;
        case 4:
          v4->m_kMapLoginData.param.Wizdom.change = *(_DWORD *)&v5->changenum;
          break;
        case 5:
          v4->m_kMapLoginData.param.MentalPower.change = *(_DWORD *)&v5->changenum;
          break;
        case 6:
          v4->m_kMapLoginData.param.WClow.change = *(_DWORD *)&v5->changenum;
          break;
        case 7:
          v4->m_kMapLoginData.param.WChigh.change = *(_DWORD *)&v5->changenum;
          break;
        case 8:
          v4->m_kMapLoginData.param.AC.change = *(_DWORD *)&v5->changenum;
          break;
        case 9:
          v4->m_kMapLoginData.param.TH.change = *(_DWORD *)&v5->changenum;
          break;
        case 0xA:
          v4->m_kMapLoginData.param.TB.change = *(_DWORD *)&v5->changenum;
          break;
        case 0xB:
          v4->m_kMapLoginData.param.MAlow.change = *(_DWORD *)&v5->changenum;
          break;
        case 0xC:
          v4->m_kMapLoginData.param.MAhigh.change = *(_DWORD *)&v5->changenum;
          break;
        case 0xD:
          v4->m_kMapLoginData.param.MR.change = *(_DWORD *)&v5->changenum;
          break;
        case 0xE:
          v4->m_kMapLoginData.param.MH.change = *(_DWORD *)&v5->changenum;
          break;
        case 0xF:
          v4->m_kMapLoginData.param.MB.change = *(_DWORD *)&v5->changenum;
          break;
        case 0x10:
          v6 = *(_DWORD *)&v5->changenum;
          v4->m_kMapLoginData.param.MaxHp = *(_DWORD *)&v5->changenum;
          if ( g_pkMainChar )
          {
            ((void (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[4].SetAbStateProperty)(v6);
            v2 = pkProto;
          }
          break;
        case 0x11:
          v4->m_kMapLoginData.param.MaxSp = *(_DWORD *)&v5->changenum;
          break;
        case 0x12:
          v4->m_kFreeStatPoint.dwFreeWC = *(_DWORD *)&v5->changenum;
          break;
        case 0x13:
          v4->m_kFreeStatPoint.dwFreeAC = *(_DWORD *)&v5->changenum;
          break;
        case 0x14:
          v4->m_kFreeStatPoint.dwFreeMA = *(_DWORD *)&v5->changenum;
          break;
        case 0x15:
          v4->m_kFreeStatPoint.dwFreeMR = *(_DWORD *)&v5->changenum;
          break;
        case 0x16:
          v4->m_kFreeStatPoint.dwFreeTH = *(_DWORD *)&v5->changenum;
          break;
        case 0x17:
          v4->m_kFreeStatPoint.dwFreeTB = *(_DWORD *)&v5->changenum;
          break;
        case 0x18:
          v4->m_kFreeStatPoint.dwFreeCRITICAL = *(_DWORD *)&v5->changenum;
          break;
        case 0x19:
          v4->m_kFreeStatPoint.dwFreeBLOCK = *(_DWORD *)&v5->changenum;
          break;
        case 0x1A:
          v4->m_kFreeStatPoint.dwFreeMAXHP = *(_DWORD *)&v5->changenum;
          break;
        case 0x1B:
          v4->m_kFreeStatPoint.dwFreeMAXSP = *(_DWORD *)&v5->changenum;
          break;
        case 0x24:
          v4->m_kMapLoginData.param.MaxLp = *(_DWORD *)&v5->changenum;
          break;
        default:
          break;
      }
      ++v3;
      v5 += 5;
    }
    while ( v3 < v2->changenum );
  }
}

//----- (0066B630) --------------------------------------------------------
void __thiscall User::User(User *this)
{
  User *v1; // esi@1
  int v2; // ecx@1
  __int64 v3; // kr08_8@1
  int v4; // ecx@1
  int v5; // edx@1
  Name5 kCharID; // [sp+8h] [bp-24h]@1
  Name3 kMapName; // [sp+1Ch] [bp-10h]@1
  unsigned int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  _eh_vector_constructor_iterator_(
    this->m_kAvatarInfo,
    0x82u,
    6,
    (void (__thiscall *)(void *))PROTO_AVATARINFORMATION::PROTO_AVATARINFORMATION,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[0] = 0;
  *(_DWORD *)&v1->m_kMainCharBaseData.logininfo.currentmap.n3_name[8] = 0;
  *(_DWORD *)&v1->m_kMainCharBaseData.logininfo.currentmap.n3_name[4] = 0;
  *(_DWORD *)&v1->m_kMainCharBaseData.logininfo.currentmap.n3_name[0] = 0;
  *(_DWORD *)&v1->m_kStatTitleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kStatTitleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kStatTitleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kStatTitleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTList<int>::_vftable_;
  v1->m_iTotalAvatarInfo = 0;
  v1->m_bySelectedAvatartSlot = -1;
  v1->m_iTotalAbStateInfo = 0;
  *(_QWORD *)&kMapName.n3_name[4] = 0i64;
  *(_QWORD *)&kMapName.n3_name[0] = 0i64;
  strncpy(kMapName.n3_name, "Rou", 0xCu);
  v2 = *(_DWORD *)&kMapName.n3_name[8];
  *(_QWORD *)&v1->m_kMainCharBaseData.logininfo.currentmap.n3_name[0] = *(_QWORD *)&kMapName;
  *(_DWORD *)&v1->m_kMainCharBaseData.logininfo.currentmap.n3_name[8] = v2;
  v1->m_kMainCharShapeData._bf0 = v1->m_kMainCharShapeData._bf0 & 0x87 | 4;
  *(_QWORD *)&kCharID.n5_name[12] = 0i64;
  *(_QWORD *)&kCharID.n5_name[4] = 0i64;
  *(_DWORD *)&kCharID.n5_name[0] = 0;
  strncpy(kCharID.n5_name, "Tester", 0x14u);
  v3 = *(_QWORD *)&kCharID.n5_name[4];
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[0] = *(_DWORD *)&kCharID;
  v4 = *(_DWORD *)&kCharID.n5_name[12];
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[4] = v3;
  v5 = *(_DWORD *)&kCharID.n5_name[16];
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[8] = HIDWORD(v3);
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[12] = v4;
  *(_DWORD *)&v1->m_kMainCharBaseData.charid.n5_name[16] = v5;
  v1->m_kMainCharBaseData.logininfo.currentcoord.xy.x = 3550;
  v1->m_kMainCharBaseData.logininfo.currentcoord.xy.y = 3634;
  v1->m_kFreeStatPoint.dwFreeWC = 0;
  v1->m_kFreeStatPoint.dwFreeAC = 0;
  v1->m_kFreeStatPoint.dwFreeMA = 0;
  v1->m_kFreeStatPoint.dwFreeMR = 0;
  v1->m_kFreeStatPoint.dwFreeTH = 0;
  v1->m_kFreeStatPoint.dwFreeTB = 0;
  v1->m_kFreeStatPoint.dwFreeCRITICAL = 0;
  v1->m_kFreeStatPoint.dwFreeBLOCK = 0;
  v1->m_kFreeStatPoint.dwFreeMAXHP = 0;
  v1->m_kFreeStatPoint.dwFreeMAXSP = 0;
  LODWORD(v1->m_kCoin) = 0;
  HIDWORD(v1->m_kCoin) = 0;
  LODWORD(v1->m_kExchangeableCoin) = 0;
  HIDWORD(v1->m_kExchangeableCoin) = 0;
  memset((char *)v1->m_wValidate, 0, 0x40u);
}
// 9C4ED0: using guessed type int (__thiscall *NiTList_int____vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0066B7E0) --------------------------------------------------------
void __thiscall User::SetMainCharBaseData(User *this, PROTO_NC_CHAR_BASE_CMD *p)
{
  PROTO_NC_CHAR_BASE_CMD::operator_(&this->m_kMainCharBaseData, p);
}

//----- (0066B7F0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<int>_int>::NiTListBase<DFALL<int>_int>(NiTListBase<DFALL<int>,int> *this)
{
  this->vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTListBase<DFALL<int>_int>::_vftable_;
  *(_DWORD *)&this->m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->m_pkHead = 0;
  this->m_pkTail = 0;
}
// 9C4EB0: using guessed type int (__thiscall *NiTListBase_DFALL_int__int____vftable_)(void *p, char);

//----- (0066B810) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<int>_int>::_NiTListBase<DFALL<int>_int>(NiTListBase<DFALL<int>,int> *this)
{
  this->vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTListBase<DFALL<int>_int>::_vftable_;
}
// 9C4EB0: using guessed type int (__thiscall *NiTListBase_DFALL_int__int____vftable_)(void *p, char);

//----- (0066B820) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<int>_int>::_vector_deleting_destructor_(NiTListBase<DFALL<int>,int> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTListBase<DFALL<int>_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C4EB0: using guessed type int (__thiscall *NiTListBase_DFALL_int__int____vftable_)(void *p, char);

//----- (0066B850) --------------------------------------------------------
void __thiscall PROTO_AVATARINFORMATION::PROTO_AVATARINFORMATION(PROTO_AVATARINFORMATION *this)
{
  *(_QWORD *)&this->name.n5_name[12] = 0i64;
  *(_QWORD *)&this->name.n5_name[4] = 0i64;
  *(_DWORD *)&this->name.n5_name[0] = 0;
  *(_QWORD *)&this->loginmap.n3_name[4] = 0i64;
  *(_DWORD *)&this->loginmap.n3_name[0] = 0;
  *(_QWORD *)&this->sKQMapName.n3_name[4] = 0i64;
  *(_DWORD *)&this->sKQMapName.n3_name[0] = 0;
}

//----- (0066B880) --------------------------------------------------------
PROTO_AVATARINFORMATION *__thiscall PROTO_AVATARINFORMATION::operator_(PROTO_AVATARINFORMATION *this, PROTO_AVATARINFORMATION *__that)
{
  PROTO_AVATARINFORMATION *result; // eax@1

  result = this;
  this->chrregnum = __that->chrregnum;
  *(_QWORD *)&this->name.n5_name[0] = *(_QWORD *)&__that->name.n5_name[0];
  *(_QWORD *)&this->name.n5_name[8] = *(_QWORD *)&__that->name.n5_name[8];
  *(_DWORD *)&this->name.n5_name[16] = *(_DWORD *)&__that->name.n5_name[16];
  this->level = __that->level;
  this->slot = __that->slot;
  *(_QWORD *)&this->loginmap.n3_name[0] = *(_QWORD *)&__that->loginmap.n3_name[0];
  *(_DWORD *)&this->loginmap.n3_name[8] = *(_DWORD *)&__that->loginmap.n3_name[8];
  *(_DWORD *)&this->delinfo.year = *(_DWORD *)&__that->delinfo.year;
  this->delinfo.min = __that->delinfo.min;
  *(_DWORD *)&this->shape._bf0 = *(_DWORD *)&__that->shape._bf0;
  memcpy(&this->equip, &__that->equip, 0x52u);
  return result;
}

//----- (0066B940) --------------------------------------------------------
void *__thiscall NiTList<int>::_vector_deleting_destructor_(NiTList<int> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<int> *v3; // esi@1
  NiTListItem<int> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTPointerListBase<DFALL<int>_int>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<int>_int>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4EB0: using guessed type int (__thiscall *NiTListBase_DFALL_int__int____vftable_)(void *p, char);
// 9C4EC0: using guessed type int (__thiscall *NiTPointerListBase_DFALL_int__int____vftable_)(void *p, char);

//----- (0066B9D0) --------------------------------------------------------
void __thiscall NiTList<int>::_NiTList<int>(NiTList<int> *this)
{
  NiTList<int> *v1; // edi@1
  NiTListItem<int> *v2; // esi@1
  NiTListItem<int> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTPointerListBase<DFALL<int>_int>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<int>,int> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<int>,int>Vtbl *)&NiTListBase<DFALL<int>_int>::_vftable_;
}
// 9C4EB0: using guessed type int (__thiscall *NiTListBase_DFALL_int__int____vftable_)(void *p, char);
// 9C4EC0: using guessed type int (__thiscall *NiTPointerListBase_DFALL_int__int____vftable_)(void *p, char);

//----- (0066BA50) --------------------------------------------------------
PROTO_NC_CHAR_BASE_CMD *__thiscall PROTO_NC_CHAR_BASE_CMD::operator_(PROTO_NC_CHAR_BASE_CMD *this, PROTO_NC_CHAR_BASE_CMD *__that)
{
  PROTO_NC_CHAR_BASE_CMD *result; // eax@1

  result = this;
  this->chrregnum = __that->chrregnum;
  *(_QWORD *)&this->charid.n5_name[0] = *(_QWORD *)&__that->charid.n5_name[0];
  *(_QWORD *)&this->charid.n5_name[8] = *(_QWORD *)&__that->charid.n5_name[8];
  *(_DWORD *)&this->charid.n5_name[16] = *(_DWORD *)&__that->charid.n5_name[16];
  this->slotno = __that->slotno;
  this->Level = __that->Level;
  this->Experience = __that->Experience;
  this->CurPwrStone = __that->CurPwrStone;
  this->CurGrdStone = __that->CurGrdStone;
  this->CurHPStone = __that->CurHPStone;
  this->CurSPStone = __that->CurSPStone;
  this->CurHP = __that->CurHP;
  this->CurSP = __that->CurSP;
  this->CurLP = __that->CurLP;
  this->fame = __that->fame;
  this->Cen = __that->Cen;
  *(_QWORD *)&this->logininfo.currentmap.n3_name[0] = *(_QWORD *)&__that->logininfo.currentmap.n3_name[0];
  *(_DWORD *)&this->logininfo.currentmap.n3_name[8] = *(_DWORD *)&__that->logininfo.currentmap.n3_name[8];
  this->logininfo.currentcoord.xy.x = __that->logininfo.currentcoord.xy.x;
  this->logininfo.currentcoord.xy.y = __that->logininfo.currentcoord.xy.y;
  this->logininfo.currentcoord.dir = __that->logininfo.currentcoord.dir;
  *(_DWORD *)&this->statdistribute.Strength = *(_DWORD *)&__that->statdistribute.Strength;
  *(_WORD *)&this->statdistribute.MentalPower = *(_WORD *)&__that->statdistribute.MentalPower;
  this->pkyellowtime = __that->pkyellowtime;
  this->pkcount = __that->pkcount;
  this->prisonmin = __that->prisonmin;
  this->adminlevel = __that->adminlevel;
  this->flags.bin = __that->flags.bin;
  return result;
}

//----- (0066BB40) --------------------------------------------------------
void *__thiscall ItemAuthority::_scalar_deleting_destructor_(ItemAuthority *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (CItemAuthorityBaseVtbl *)&ItemAuthority::_vftable_;
  CItemAuthorityBase::_CItemAuthorityBase(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4EE0: using guessed type int (__thiscall *ItemAuthority___vftable_)(void *p, char);

//----- (0066BB70) --------------------------------------------------------
bool __thiscall ItemAuthority::IsAllFalse(ItemAuthority *this, E_BelongType eBelongType)
{
  int v2; // eax@1

  v2 = ((int (__stdcall *)(_DWORD))this->baseclass_0.vfptr->IA_GetBelongTypeInfo)(eBelongType);
  return v2
      && !*(_BYTE *)(v2 + 4)
      && !*(_BYTE *)(v2 + 5)
      && !*(_BYTE *)(v2 + 6)
      && !*(_BYTE *)(v2 + 7)
      && !*(_BYTE *)(v2 + 8)
      && !*(_BYTE *)(v2 + 9);
}

//----- (0066BBC0) --------------------------------------------------------
BelongTypeInfo *__thiscall ItemAuthority::IA_GetBelongTypeInfo(ItemAuthority *this, E_BelongType idx)
{
  return BelongTypeInfoTab::GetBTInfo(idx);
}

//----- (0066BBE0) --------------------------------------------------------
unsigned int __cdecl ITableBase<BelongTypeInfo_BelongTypeInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97EA8: using guessed type int ITableBase_BelongTypeInfo_BelongTypeInfoTab___ms_pkTable;

//----- (0066BC00) --------------------------------------------------------
BelongTypeInfo *__cdecl BelongTypeInfoTab::GetBTInfo(E_BelongType eType)
{
  unsigned int v1; // esi@1
  BelongTypeInfo *result; // eax@4

  v1 = 0;
  if ( ITableBase<BelongTypeInfo_BelongTypeInfoTab>::GetTotal() )
  {
    while ( *(_DWORD *)CDataReader::GetRecord(
                         (CDataReader *)(ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable + 4),
                         v1) != eType )
    {
      ++v1;
      if ( v1 >= ITableBase<BelongTypeInfo_BelongTypeInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (BelongTypeInfo *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<BelongTypeInfo_BelongTypeInfoTab>::ms_pkTable + 4),
                                 v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97EA8: using guessed type int ITableBase_BelongTypeInfo_BelongTypeInfoTab___ms_pkTable;

//----- (0066BC60) --------------------------------------------------------
void __thiscall DropItem::DropItem(DropItem *this)
{
  this->vfptr = (DropItemVtbl *)&DropItem::_vftable_;
  this->m_spNode.m_pObject = 0;
  this->m_bPickable = 0;
  this->m_bOutPlayerSight = 0;
}
// 9C4FD4: using guessed type int (__thiscall *DropItem___vftable_)(void *p, char);

//----- (0066BC80) --------------------------------------------------------
void __thiscall DropItem::_DropItem(DropItem *this)
{
  NiNode *v1; // esi@1

  this->vfptr = (DropItemVtbl *)&DropItem::_vftable_;
  v1 = this->m_spNode.m_pObject;
  if ( v1 && !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v1 )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
  }
}
// 9C4FD4: using guessed type int (__thiscall *DropItem___vftable_)(void *p, char);

//----- (0066BCB0) --------------------------------------------------------
char *__thiscall DropItem::GetItemName(DropItem *this)
{
  int v1; // esi@1
  int v2; // edi@1
  char *result; // eax@2
  int v4; // ecx@4

  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v2 = this->m_kItemID;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          this->m_kItemID)
    && (unsigned __int16)v2 <= *(_WORD *)(v1 + 200)
    && (v4 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v4 + 4 * v2)) )
    result = (char *)(*(_DWORD *)(v4 + 4 * v2) + 34);
  else
    result = (char *)34;
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066BD00) --------------------------------------------------------
bool __thiscall DropItemMgr::LoadEff(DropItemMgr *this)
{
  DropItemMgr *v1; // ebx@1
  NiNode *v2; // eax@3
  NiNode *v3; // esi@3
  NiNode *v4; // edi@3
  bool result; // al@11
  NiNode *v6; // eax@14
  NiNode *v7; // esi@14
  NiNode *v8; // edi@14
  char acFileName[260]; // [sp+Ch] [bp-108h]@3
  unsigned int v10; // [sp+110h] [bp-4h]@1
  int v11; // [sp+114h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v1 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%sGroundItem\\GrdNIFLargeEffect_Loop.nif");
  v2 = PgUtil::LoadNifFile(acFileName, 0, 1);
  v3 = v1->m_spLoopEff.m_pObject;
  v4 = v2;
  if ( v3 != v2 )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spLoopEff.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v1->m_spLoopEff.m_pObject )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acFileName, "%sGroundItem\\GrdNIFLargeEffect_Noloop.nif");
    v6 = PgUtil::LoadNifFile(acFileName, 0, 1);
    v7 = v1->m_spStartEff.m_pObject;
    v8 = v6;
    if ( v7 != v6 )
    {
      if ( v7
        && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      v1->m_spStartEff.m_pObject = v8;
      if ( v8 )
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    result = v1->m_spStartEff.m_pObject != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0066BE30) --------------------------------------------------------
bool __thiscall DropItemMgr::Init(DropItemMgr *this)
{
  DropItemMgr *v1; // ebx@1
  void *v2; // eax@1
  int v3; // edi@1
  int v4; // eax@2
  DynaminUV *v5; // esi@3

  v1 = this;
  v2 = operator new(0x11Cu);
  v3 = 0;
  if ( v2 )
  {
    DynaminUV::DynaminUV((DynaminUV *)v2);
    v3 = v4;
  }
  v5 = v1->m_spDynamicUV.m_pObject;
  if ( v5 != (DynaminUV *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spDynamicUV.m_pObject = (DynaminUV *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  return DropItemMgr::LoadEff(v1) != 0;
}

//----- (0066BEE0) --------------------------------------------------------
void __thiscall DropItemMgr::RemoveAll(DropItemMgr *this)
{
  DropItemMgr *v1; // edi@1
  NiTListItem<DropItem *> *v2; // esi@1
  DropItem *v3; // ecx@2
  NiTListItem<DropItem *> *v4; // esi@5
  NiTListItem<DropItem *> *v5; // ST00_4@6

  v1 = this;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element;
    v2 = v2->m_pkNext;
    if ( v3 )
      ((void (__stdcall *)(_DWORD))v3->vfptr->__vecDelDtor)(1);
  }
  v4 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4;
    v4 = v4->m_pkNext;
    v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *)v1,
      v5);
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
}

//----- (0066BF40) --------------------------------------------------------
DropItem *__thiscall DropItemMgr::GetByHandle(DropItemMgr *this, unsigned __int16 kHandle)
{
  NiTListItem<DropItem *> *v2; // ecx@1
  DropItem *result; // eax@2

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result->m_kHandle == kHandle )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (0066BF70) --------------------------------------------------------
DropItem *__thiscall DropItemMgr::GetByNode(DropItemMgr *this, NiNode *pkNode)
{
  NiTListItem<DropItem *> *v2; // ecx@2
  DropItem *result; // eax@3

  if ( pkNode && (v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead) != 0 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result->m_spNode.m_pObject == pkNode )
        break;
      if ( !v2 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (0066BFA0) --------------------------------------------------------
DropItem *__thiscall DropItemMgr::GetDropItemByNodePtr(DropItemMgr *this, NiNode *pkNode)
{
  NiTListItem<DropItem *> *v2; // ecx@1
  DropItem *result; // eax@2

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result->m_spNode.m_pObject == pkNode )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (0066BFD0) --------------------------------------------------------
void __thiscall DropItemMgr::SetTexture(DropItemMgr *this, NiNode *pkNode, NiSourceTexture *pkTexture)
{
  NiProperty *v3; // eax@2
  NiAVObject *pkGeom; // [sp+0h] [bp-4h]@1

  pkGeom = 0;
  if ( PgUtil::CatchGeometry(&pkNode->baseclass_0, (NiGeometry **)&pkGeom) )
  {
    v3 = NiAVObject::GetProperty(pkGeom, 8);
    if ( v3 )
      NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v3, &pkTexture->baseclass_0);
  }
}

//----- (0066C010) --------------------------------------------------------
NiNode *__thiscall DropItemMgr::GetNodeFromMap(DropItemMgr *this, const char *pcNifName)
{
  bool v2; // al@1
  NiNode *v3; // esi@1
  NiNode *result; // eax@5
  NiObject *v5; // edi@6
  NiPointer<NiNode> spNode; // [sp+0h] [bp-10h]@1
  int v7; // [sp+Ch] [bp-4h]@1

  spNode.m_pObject = 0;
  v7 = 0;
  v2 = NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kNodeMap,
         pcNifName,
         (NiPointer<NiShaderLibrary> *)&spNode);
  v3 = spNode.m_pObject;
  if ( v2 )
  {
    v5 = NiObject::Clone(&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    v7 = -1;
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    result = (NiNode *)v5;
  }
  else
  {
    v7 = -1;
    if ( spNode.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    result = 0;
  }
  return result;
}

//----- (0066C0E0) --------------------------------------------------------
NiSourceTexture *__thiscall DropItemMgr::GetTextureFromMap(DropItemMgr *this, const char *pcTexName)
{
  bool v2; // al@1
  NiSourceTexture *v3; // esi@1
  NiSourceTexture *result; // eax@5
  NiPointer<NiSourceTexture> spTex; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spTex.m_pObject = 0;
  v6 = 0;
  v2 = NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kTextureMap,
         pcTexName,
         (NiPointer<NiShaderLibrary> *)&spTex);
  v3 = spTex.m_pObject;
  v6 = -1;
  if ( v2 )
  {
    if ( spTex.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spTex.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    result = v3;
  }
  else
  {
    if ( spTex.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&spTex.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    result = 0;
  }
  return result;
}

//----- (0066C190) --------------------------------------------------------
unsigned int __thiscall DropItemMgr::GetItemCountByItemID(DropItemMgr *this, unsigned __int16 kItemID)
{
  NiTListItem<DropItem *> *v2; // ecx@1
  unsigned int result; // eax@1
  DropItem *v4; // edx@2

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  result = 0;
  while ( v2 )
  {
    v4 = v2->m_element;
    v2 = v2->m_pkNext;
    if ( v4->m_kItemID == kItemID )
      ++result;
  }
  return result;
}

//----- (0066C1C0) --------------------------------------------------------
void __thiscall DropItemMgr::_DropItemMgr(DropItemMgr *this)
{
  DropItemMgr *v1; // esi@1
  DynaminUV *v2; // edi@1
  NiNode *v3; // edi@5
  NiNode *v4; // edi@9
  NiTListItem<DropItem *> *v5; // edi@13
  NiTListItem<DropItem *> *v6; // ST00_4@14

  v1 = this;
  v2 = this->m_spDynamicUV.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spStartEff.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spLoopEff.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>(&v1->m_kTextureMap.baseclass_0);
  NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>(&v1->m_kNodeMap.baseclass_0);
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&PgTList<DropItem__>::_vftable_;
  v5 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5;
    v5 = v5->m_pkNext;
    v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *)v1,
      v6);
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
}
// 9C4F84: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);
// 9C506C: using guessed type int (__thiscall *PgTList_DropItem _____vftable_)(void *p, char);

//----- (0066C2D0) --------------------------------------------------------
void __thiscall DropItemMgr::Terminate(DropItemMgr *this)
{
  DropItemMgr *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6
  DynaminUV *v4; // edi@11

  v1 = this;
  DropItemMgr::RemoveAll(this);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kNodeMap);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kTextureMap);
  v2 = v1->m_spLoopEff.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spLoopEff.m_pObject = 0;
  }
  v3 = v1->m_spStartEff.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spStartEff.m_pObject = 0;
  }
  v4 = v1->m_spDynamicUV.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    v1->m_spDynamicUV.m_pObject = 0;
  }
}

//----- (0066C370) --------------------------------------------------------
bool __thiscall DropItemMgr::Remove(DropItemMgr *this, unsigned __int16 kHandle)
{
  DropItemMgr *v2; // edi@1
  NiTListItem<DropItem *> *v3; // eax@1
  DropItem *v4; // esi@2
  bool result; // al@4
  NiTListItem<DropItem *> *v6; // eax@6
  int v7; // ecx@7
  NiTListItem<DropItem *> *v8; // edx@7

  v2 = this;
  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( !v3 )
    goto LABEL_4;
  while ( 1 )
  {
    v4 = v3->m_element;
    v3 = v3->m_pkNext;
    if ( v4->m_kHandle == kHandle )
      break;
    if ( !v3 )
      goto LABEL_4;
  }
  if ( v4 )
  {
    World::DetachDropItem(&g_kWorld, v4->m_spNode.m_pObject);
    v6 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v6 )
    {
      while ( 1 )
      {
        v7 = (int)&v6->m_element;
        v8 = v6;
        v6 = v6->m_pkNext;
        if ( v4 == *(DropItem **)v7 )
          break;
        if ( !v6 )
          goto LABEL_9;
      }
    }
    else
    {
LABEL_9:
      v8 = 0;
    }
    *(_DWORD *)&kHandle = v8;
    if ( v8 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v2,
        (void **)&kHandle);
    v4->vfptr->__vecDelDtor(v4, 1u);
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (0066C3F0) --------------------------------------------------------
void __thiscall DropItemMgr::Update(DropItemMgr *this, float fCurTime)
{
  NiTListItem<DropItem *> *v2; // ebx@1
  DropItem *v3; // edi@2
  NiNode *v4; // esi@2
  int v5; // eax@2
  float v6; // ST10_4@2
  float v7; // ST14_4@2
  float v8; // ST18_4@2
  float v9; // ST20_4@2
  NiNode *v10; // eax@2
  DropItemMgr *thisa; // [sp+10h] [bp-8h]@1
  float fLength; // [sp+14h] [bp-4h]@2

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  thisa = this;
  while ( v2 )
  {
    v3 = v2->m_element;
    v4 = v3->m_spNode.m_pObject;
    v2 = v2->m_pkNext;
    v5 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
    v6 = v4->baseclass_0.m_kLocal.m_Translate.x - *(float *)v5;
    v7 = v4->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v5 + 4);
    v8 = v4->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v5 + 8);
    v9 = v7 * v7 + v6 * v6 + v8 * v8;
    fLength = sqrt(v9);
    v10 = v3->m_spNode.m_pObject;
    if ( (double)*(unsigned int *)&g_pkMainChar[1].m_AttackTargetHandle - 1000.0 <= fLength )
    {
      if ( v10 )
        v10->baseclass_0.m_uFlags |= 1u;
    }
    else
    {
      if ( v10 )
        v10->baseclass_0.m_uFlags &= 0xFFFEu;
    }
    if ( (double)*(unsigned int *)&g_pkMainChar[1].m_AttackTargetHandle < fLength )
      DropItemMgr::Remove(thisa, v3->m_kHandle);
  }
}

//----- (0066C500) --------------------------------------------------------
NiNode *__thiscall DropItemMgr::GetNode(DropItemMgr *this, const char *pcNifName)
{
  NiNode *result; // eax@1
  NiNode *v3; // eax@4
  NiNode *v4; // esi@4
  NiObject *v5; // ebx@8
  NiPointer<PgWinBut> v6; // [sp-14h] [bp-134h]@4
  unsigned int v7; // [sp-10h] [bp-130h]@1
  NiPointer<PgWinBut> *v8; // [sp+0h] [bp-120h]@8
  NiPointer<NiNode> spNode; // [sp+4h] [bp-11Ch]@4
  DropItemMgr *v10; // [sp+8h] [bp-118h]@1
  char acFileName[260]; // [sp+Ch] [bp-114h]@4
  unsigned int v12; // [sp+110h] [bp-10h]@1
  int v13; // [sp+11Ch] [bp-4h]@6
  int v14; // [sp+120h] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v7 = (unsigned int)&v14 ^ __security_cookie;
  v10 = this;
  result = DropItemMgr::GetNodeFromMap(this, pcNifName);
  if ( !result )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v6.m_pObject = (PgWinBut *)pcNifName;
    sprintf(acFileName, "%sGroundItem\\%s.nif");
    v3 = PgUtil::LoadNifFile(acFileName, 0, 1);
    v4 = v3;
    spNode.m_pObject = v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v13 = 0;
    if ( v4 )
    {
      v8 = &v6;
      v6.m_pObject = (PgWinBut *)v4;
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v10->m_kNodeMap,
        (unsigned int)pcNifName,
        v6);
      v5 = NiObject::Clone(&v4->baseclass_0.baseclass_0.baseclass_0);
      v13 = -1;
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      result = (NiNode *)v5;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0066C610) --------------------------------------------------------
NiSourceTexture *__thiscall DropItemMgr::GetTexture(DropItemMgr *this, const char *pcTexName)
{
  DropItemMgr *v2; // ebx@1
  NiSourceTexture *result; // eax@1
  NiImageConverter *v4; // eax@4
  NiPixelData *v5; // eax@4
  NiSourceTexture *v6; // esi@5
  NiPointer<PgWinBut> v7; // [sp-4h] [bp-128h]@4
  NiPointer<PgWinBut> *v8; // [sp+Ch] [bp-118h]@6
  NiTexture::FormatPrefs kPrefs; // [sp+10h] [bp-114h]@5
  char acFileName[260]; // [sp+1Ch] [bp-108h]@4
  unsigned int v11; // [sp+120h] [bp-4h]@1
  int v12; // [sp+124h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  result = DropItemMgr::GetTextureFromMap(this, pcTexName);
  if ( !result )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v7.m_pObject = (PgWinBut *)pcTexName;
    sprintf(acFileName, "%sIcon\\%s.dds");
    v4 = NiImageConverter::GetImageConverter();
    v5 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(
                          v4,
                          acFileName,
                          0);
    if ( v5
      && (kPrefs.m_ePixelLayout = 6,
          kPrefs.m_eAlphaFmt = 3,
          kPrefs.m_eMipMapped = 0,
          (v6 = NiSourceTexture::Create(v5, &kPrefs)) != 0) )
    {
      v8 = &v7;
      v7.m_pObject = (PgWinBut *)v6;
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v2->m_kTextureMap,
        (unsigned int)pcTexName,
        v7);
      result = v6;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0066C700) --------------------------------------------------------
NiNode *__thiscall DropItemMgr::Get(DropItemMgr *this, const char *pcNifName, const char *pcTexName, bool bStartEff, bool bEffOn)
{
  DropItemMgr *v5; // ebx@1
  NiNode *v6; // edi@1
  NiNode *result; // eax@2
  NiTexture *v8; // esi@3
  NiProperty *v9; // eax@5
  void *v10; // eax@7
  NiObjectNET *v11; // esi@7
  NiObjectNET *v12; // eax@8
  NiObject *v13; // ecx@10
  NiRefObjectVtbl *v14; // edi@11
  NiObject *v15; // eax@11
  NiObject *v16; // ecx@13
  NiRefObjectVtbl *v17; // edi@14
  NiObject *v18; // eax@14

  v5 = this;
  v6 = DropItemMgr::GetNode(this, pcNifName);
  if ( v6 && (v8 = (NiTexture *)DropItemMgr::GetTexture(v5, pcTexName)) != 0 )
  {
    pcNifName = 0;
    if ( PgUtil::CatchGeometry(&v6->baseclass_0, (NiGeometry **)&pcNifName) )
    {
      v9 = NiAVObject::GetProperty((NiAVObject *)pcNifName, 8);
      if ( v9 )
        NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v9, v8);
    }
    v10 = operator new(0xE8u);
    pcTexName = (const char *)v10;
    v11 = 0;
    if ( v10 )
    {
      NiNode::NiNode((NiNode *)v10, 0);
      v11 = v12;
    }
    NiObjectNET::SetName(v11, DropItem::ms_pcRootNodeName);
    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v11->baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v11, v6, 0);
    if ( bEffOn )
    {
      v13 = (NiObject *)v5->m_spLoopEff.m_pObject;
      if ( v13 )
      {
        v14 = v11->baseclass_0.baseclass_0.vfptr;
        v15 = NiObject::Clone(v13);
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v14[29].__vecDelDtor)(v11, v15, 0);
      }
      if ( bStartEff )
      {
        v16 = (NiObject *)v5->m_spStartEff.m_pObject;
        if ( v16 )
        {
          v17 = v11->baseclass_0.baseclass_0.vfptr;
          v18 = NiObject::Clone(v16);
          ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v17[29].__vecDelDtor)(v11, v18, 0);
        }
      }
    }
    NiAVObject::UpdateProperties((NiAVObject *)v11);
    NiAVObject::UpdateEffects((NiAVObject *)v11);
    NiAVObject::Update((NiAVObject *)v11, 0.0, 1);
    result = (NiNode *)v11;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0066C840) --------------------------------------------------------
void __thiscall DropItemMgr::DropItemMgr(DropItemMgr *this)
{
  DropItemMgr *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST18_4@1
  void *v4; // eax@1
  unsigned int v5; // ST08_4@1

  v1 = this;
  *(_DWORD *)&this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&PgTList<DropItem__>::_vftable_;
  this->m_kNodeMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_;
  this->m_kNodeMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&this->m_kNodeMap.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kNodeMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize;
  v1->m_kNodeMap.baseclass_0.baseclass_0.baseclass_0.m_ppkHashTable = (NiTMapItem<char const *,NiPointer<NiNode> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kNodeMap.baseclass_0.m_bCopy = 1;
  v1->m_kNodeMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTStringPointerMap<NiPointer<NiNode>>::_vftable_;
  v1->m_kTextureMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_kTextureMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize = 37;
  *(_DWORD *)&v1->m_kTextureMap.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v4 = operator new__(0x94u);
  v5 = 4 * v1->m_kTextureMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize;
  v1->m_kTextureMap.baseclass_0.baseclass_0.baseclass_0.m_ppkHashTable = (NiTMapItem<char const *,NiPointer<NiSourceTexture> > **)v4;
  memset((char *)v4, 0, v5);
  v1->m_kTextureMap.baseclass_0.m_bCopy = 1;
  v1->m_kTextureMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTStringPointerMap<NiPointer<NiSourceTexture>>::_vftable_;
  v1->m_spLoopEff.m_pObject = 0;
  v1->m_spStartEff.m_pObject = 0;
  v1->m_spDynamicUV.m_pObject = 0;
}
// 9C4F94: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4FB4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C506C: using guessed type int (__thiscall *PgTList_DropItem _____vftable_)(void *p, char);
// 9C507C: using guessed type int (__thiscall *NiTStringPointerMap_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C509C: using guessed type int (__thiscall *NiTStringPointerMap_NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0066C960) --------------------------------------------------------
bool __thiscall DropItemMgr::Add(DropItemMgr *this, unsigned __int16 kItemID, unsigned __int16 kHandle, bool bPickable, NiPoint3 *kPos, bool bStartEff)
{
  DropItemMgr *v6; // edi@1
  bool result; // al@2
  int v8; // esi@3
  int v9; // eax@5
  void *v10; // esi@5
  int v11; // ebx@6
  NiNode *v12; // ebx@7
  DynaminUV *v13; // eax@7
  void *v14; // ecx@8
  unsigned int v15; // edx@8
  signed int v16; // eax@8
  NiGeometry *v17; // ebx@12
  void *v18; // esi@14
  int v19; // edx@15
  void *v20; // eax@28
  int v21; // eax@30
  int v22; // eax@36
  NiTListItem<DropItem *> *v23; // ecx@36
  int v24; // esi@39
  NsFindGeometry kFindGeometry; // [sp+0h] [bp-3Ch]@8
  NiPointer<NiIntegerExtraData> spIconNum; // [sp+20h] [bp-1Ch]@14
  NiNode *pkNode; // [sp+24h] [bp-18h]@7
  int v28; // [sp+28h] [bp-14h]@15
  void *pkViewInfo; // [sp+2Ch] [bp-10h]@6
  int v30; // [sp+38h] [bp-4h]@8
  signed int i; // [sp+54h] [bp+18h]@8
  float ib; // [sp+54h] [bp+18h]@28
  int ia; // [sp+54h] [bp+18h]@30

  v6 = this;
  if ( kHandle == -1
    || (v8 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
        !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                            kItemID))
    || kItemID > *(_WORD *)(v8 + 200)
    || (v9 = *(_DWORD *)(v8 + 196) + 4 * kItemID, v10 = 0, !*(_DWORD *)v9)
    || (v11 = *(_DWORD *)v9, (pkViewInfo = (void *)v11) == 0) )
    goto LABEL_44;
  DropItemMgr::Remove(v6, kHandle);
  v12 = DropItemMgr::Get(v6, "GrdNIFLarge", (const char *)(v11 + 38), bStartEff, bPickable);
  v13 = v6->m_spDynamicUV.m_pObject;
  pkNode = v12;
  if ( v13 )
  {
    kFindGeometry.baseclass_0.m_pCallBack = 0;
    kFindGeometry.baseclass_0.m_nCurLevel = -1;
    kFindGeometry.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&NsFindGeometry::_vftable_;
    *(_DWORD *)&kFindGeometry.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kFindGeometry.m_vecObject.baseclass_0._Mylast = 0;
    kFindGeometry.m_vecObject.baseclass_0._Myend = 0;
    v30 = 0;
    NsFindGeometry::FindObject(&kFindGeometry, v12, &NiGeometry::m_RTTI);
    v14 = *(void **)&kFindGeometry.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
    v15 = 0;
    v16 = (signed int)((char *)kFindGeometry.m_vecObject.baseclass_0._Mylast
                     - *(_DWORD *)&kFindGeometry.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    i = 0;
    if ( v16 > 0 )
    {
      while ( 1 )
      {
        if ( v15 < v16 )
          v17 = (NiGeometry *)*((_DWORD *)v14 + v15);
        else
          v17 = 0;
        NiShaderFactory::AttachShader(
          v17,
          &v6->m_spDynamicUV.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        v18 = operator new(0x10u);
        spIconNum.m_pObject = (NiIntegerExtraData *)v18;
        LOBYTE(v30) = 1;
        if ( v18 )
        {
          v28 = *(_DWORD *)((char *)pkViewInfo + 34);
          NiExtraData::NiExtraData((NiExtraData *)v18);
          v19 = v28;
          *(_DWORD *)v18 = &NiIntegerExtraData::_vftable_;
          *((_DWORD *)v18 + 3) = v19;
        }
        else
        {
          v18 = 0;
        }
        spIconNum.m_pObject = (NiIntegerExtraData *)v18;
        if ( v18 )
          InterlockedIncrement((volatile LONG *)v18 + 1);
        LOBYTE(v30) = 2;
        NiObjectNET::AddExtraData(&v17->baseclass_0.baseclass_0, "*icon", (NiExtraData *)v18);
        LOBYTE(v30) = 0;
        if ( v18 && !InterlockedDecrement((volatile LONG *)v18 + 1) )
          (**(void (__thiscall ***)(void *, signed int))v18)(v18, 1);
        v14 = *(void **)&kFindGeometry.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
        v16 = (signed int)((char *)kFindGeometry.m_vecObject.baseclass_0._Mylast
                         - *(_DWORD *)&kFindGeometry.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
        v10 = 0;
        ++i;
        if ( i >= v16 )
          break;
        v15 = i;
      }
      v12 = pkNode;
    }
    v30 = -1;
    if ( v14 != v10 )
      operator delete(v14);
    *(_DWORD *)&kFindGeometry.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = v10;
    kFindGeometry.m_vecObject.baseclass_0._Mylast = (NiAVObject **)v10;
    kFindGeometry.m_vecObject.baseclass_0._Myend = (NiAVObject **)v10;
    kFindGeometry.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  }
  if ( v12 != v10 )
  {
    ib = fabs(*(float *)((char *)pkViewInfo + 242));
    v12->baseclass_0.m_kLocal.m_fScale = ib;
    v20 = operator new(0x14u);
    if ( v20 != v10 )
    {
      *(_DWORD *)v20 = &DropItem::_vftable_;
      *((_DWORD *)v20 + 3) = v10;
      *((_BYTE *)v20 + 8) = 0;
      *((_BYTE *)v20 + 16) = 0;
      v10 = v20;
    }
    v21 = *((_DWORD *)v10 + 3);
    ia = v21;
    if ( (NiNode *)v21 != v12 )
    {
      if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && ia )
        (**(void (__stdcall ***)(_DWORD))ia)(1);
      *((_DWORD *)v10 + 3) = v12;
      InterlockedIncrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    *((_BYTE *)v10 + 8) = bPickable;
    v22 = (int)v6->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *)v6);
    *(_DWORD *)(v22 + 8) = v10;
    *(_DWORD *)v22 = 0;
    *(_DWORD *)(v22 + 4) = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v23 = v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v23 )
      v23->m_pkNext = (NiTListItem<DropItem *> *)v22;
    else
      v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<DropItem *> *)v22;
    ++*(_DWORD *)&v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v6->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<DropItem *> *)v22;
    World::AttachDropItem(&g_kWorld, v12);
    *((_WORD *)v10 + 2) = kItemID;
    *((_WORD *)v10 + 3) = kHandle;
    v24 = *((_DWORD *)v10 + 3);
    if ( v24 )
    {
      *(_DWORD *)(v24 + 88) = LODWORD(kPos->x);
      *(_DWORD *)(v24 + 92) = LODWORD(kPos->y);
      *(_DWORD *)(v24 + 96) = LODWORD(kPos->z);
    }
    result = 1;
  }
  else
  {
LABEL_44:
    result = 0;
  }
  return result;
}
// 98BECC: using guessed type int (__thiscall *NiIntegerExtraData___vftable_)(void *p, char);
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C4FD4: using guessed type int (__thiscall *DropItem___vftable_)(void *p, char);
// 9C50BC: using guessed type int (__stdcall *NsFindGeometry___vftable_)(int _pkObject, int _pData);
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (0066CC30) --------------------------------------------------------
bool __thiscall DropItemMgr::Add(DropItemMgr *this, PROTO_NC_BRIEFINFO_DROPEDITEM_CMD *p)
{
  DropItemMgr *v2; // edi@1
  float v3; // ST0C_4@1
  float v4; // ST08_4@1
  NiPoint3 kPos; // [sp+14h] [bp-Ch]@1

  v2 = this;
  v4 = (double)p->location.x;
  v3 = (double)p->location.y;
  World::GetAdvGroundPos(&g_kWorld, v4, v3, &kPos);
  return DropItemMgr::Add(v2, p->itemid, p->handle, ((unsigned __int8)p->attr._bf0 >> 3) & 1, &kPos, 0);
}

//----- (0066CCA0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>(NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
}
// 9C4F84: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);

//----- (0066CCB0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C4F84: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);

//----- (0066CCE0) --------------------------------------------------------
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> > *this)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C4F94: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiNode_____vftable_)(void *p, char);

//----- (0066CD00) --------------------------------------------------------
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiNode> >,NiPointer<NiNode> > *this)
{
  NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiNode> >,NiPointer<NiNode> > *v1; // edi@1
  bool v2; // zf@1
  unsigned int v3; // ebx@2
  NiTMapItem<char const *,NiPointer<NiNode> > *v4; // esi@3
  void *v5; // eax@4

  v1 = this;
  v2 = this->m_bCopy == 0;
  this->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>::_vftable_;
  if ( !v2 )
  {
    v3 = 0;
    if ( this->baseclass_0.baseclass_0.m_uiHashSize )
    {
      do
      {
        v4 = v1->baseclass_0.baseclass_0.m_ppkHashTable[v3];
        while ( v4 )
        {
          v5 = (void *)v4->m_key;
          v4 = v4->m_pkNext;
          operator delete__(v5);
        }
        ++v3;
      }
      while ( v3 < v1->baseclass_0.baseclass_0.m_uiHashSize );
    }
  }
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTPointerMap<char_const___NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.baseclass_0.m_ppkHashTable);
}
// 9C4F94: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4FEC: using guessed type int (__thiscall *NiTPointerMap_char const __NiPointer_NiNode_____vftable_)(void *p, char);
// 9C500C: using guessed type int (__thiscall *NiTStringTemplateMap_NiTPointerMap_char const __NiPointer_NiNode___NiPointer_NiNode_____vftable_)(void *p, char);

//----- (0066CDB0) --------------------------------------------------------
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> > *this)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C4FB4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0066CDD0) --------------------------------------------------------
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiSourceTexture> >,NiPointer<NiSourceTexture> > *this)
{
  NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiSourceTexture> >,NiPointer<NiSourceTexture> > *v1; // edi@1
  bool v2; // zf@1
  unsigned int v3; // ebx@2
  NiTMapItem<char const *,NiPointer<NiSourceTexture> > *v4; // esi@3
  void *v5; // eax@4

  v1 = this;
  v2 = this->m_bCopy == 0;
  this->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_vftable_;
  if ( !v2 )
  {
    v3 = 0;
    if ( this->baseclass_0.baseclass_0.m_uiHashSize )
    {
      do
      {
        v4 = v1->baseclass_0.baseclass_0.m_ppkHashTable[v3];
        while ( v4 )
        {
          v5 = (void *)v4->m_key;
          v4 = v4->m_pkNext;
          operator delete__(v5);
        }
        ++v3;
      }
      while ( v3 < v1->baseclass_0.baseclass_0.m_uiHashSize );
    }
  }
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTPointerMap<char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.baseclass_0.m_ppkHashTable);
}
// 9C4FB4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C502C: using guessed type int (__thiscall *NiTPointerMap_char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C504C: using guessed type int (__thiscall *NiTStringTemplateMap_NiTPointerMap_char const __NiPointer_NiSourceTexture___NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0066CE80) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,DropItem *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<DropItem *> *v3; // esi@1
  NiTListItem<DropItem *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4F84: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);
// 9C4FDC: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);

//----- (0066CF10) --------------------------------------------------------
void __thiscall NiTPointerList<DropItem__>::_NiTPointerList<DropItem__>(NiTPointerList<DropItem *> *this)
{
  NiTPointerList<DropItem *> *v1; // edi@1
  NiTListItem<DropItem *> *v2; // esi@1
  NiTListItem<DropItem *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
}
// 9C4F84: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);
// 9C4FDC: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);

//----- (0066CF90) --------------------------------------------------------
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> > *this, unsigned int a2)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4F94: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiNode_____vftable_)(void *p, char);

//----- (0066CFD0) --------------------------------------------------------
void *__thiscall NiTPointerMap<char_const___NiPointer<NiNode>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiNode> > *this, unsigned int a2)
{
  NiTPointerMap<char const *,NiPointer<NiNode> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTPointerMap<char_const___NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4F94: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiNode_____vftable_)(void *p, char);
// 9C4FEC: using guessed type int (__thiscall *NiTPointerMap_char const __NiPointer_NiNode_____vftable_)(void *p, char);

//----- (0066D050) --------------------------------------------------------
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4FB4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0066D090) --------------------------------------------------------
void *__thiscall NiTPointerMap<char_const___NiPointer<NiSourceTexture>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  NiTPointerMap<char const *,NiPointer<NiSourceTexture> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTPointerMap<char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiSourceTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiSourceTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4FB4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);
// 9C502C: using guessed type int (__thiscall *NiTPointerMap_char const __NiPointer_NiSourceTexture_____vftable_)(void *p, char);

//----- (0066D110) --------------------------------------------------------
void *__thiscall DropItem::_scalar_deleting_destructor_(DropItem *this, unsigned int a2)
{
  void *v2; // edi@1
  NiNode *v3; // esi@1

  v2 = this;
  this->vfptr = (DropItemVtbl *)&DropItem::_vftable_;
  v3 = this->m_spNode.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4FD4: using guessed type int (__thiscall *DropItem___vftable_)(void *p, char);

//----- (0066D180) --------------------------------------------------------
void __thiscall PgTList<DropItem__>::_PgTList<DropItem__>(PgTList<DropItem *> *this)
{
  PgTList<DropItem *> *v1; // edi@1
  NiTListItem<DropItem *> *v2; // esi@1
  NiTListItem<DropItem *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&PgTList<DropItem__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
}
// 9C4F84: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);
// 9C506C: using guessed type int (__thiscall *PgTList_DropItem _____vftable_)(void *p, char);

//----- (0066D200) --------------------------------------------------------
void *__thiscall PgTList<DropItem__>::_vector_deleting_destructor_(PgTList<DropItem *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<DropItem *> *v3; // esi@1
  NiTListItem<DropItem *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,DropItem *>Vtbl *)&PgTList<DropItem__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_DropItem__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C4F84: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__DropItem _____vftable_)(void *p, char);
// 9C506C: using guessed type int (__thiscall *PgTList_DropItem _____vftable_)(void *p, char);

//----- (0066D290) --------------------------------------------------------
void *__thiscall NiTStringPointerMap<NiPointer<NiNode>>::_vector_deleting_destructor_(NiTStringPointerMap<NiPointer<NiNode> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0066D2C0) --------------------------------------------------------
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_scalar_deleting_destructor_(NiTStringPointerMap<NiPointer<NiSourceTexture> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiSourceTexture>>_NiPointer<NiSourceTexture>>(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0066D2F0) --------------------------------------------------------
void __thiscall NsFindGeometry::_NsFindGeometry(NsFindGeometry *this)
{
  NsFindGeometry *v1; // esi@1

  v1 = this;
  if ( *(_DWORD *)&this->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecObject.baseclass_0._Mylast = 0;
  v1->m_vecObject.baseclass_0._Myend = 0;
  v1->baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
}
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);

//----- (0066D320) --------------------------------------------------------
bool __thiscall NsFindGeometry::FindObject(NsFindGeometry *this, NiNode *_pObject, NiRTTI *_pRtti)
{
  NsFindGeometry *v3; // edi@1
  char *v4; // esi@1
  NsFindGeometry::Data data; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = (char *)&this->m_vecObject;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&this->m_vecObject,
    0);
  data.pvector = (std::vector<NiAVObject *,std::allocator<NiAVObject *> > *)v4;
  Ns_TourScene::TourScene(&v3->baseclass_0, _pObject, _pRtti, &data);
  v3->m_uiSize = (*((_DWORD *)v4 + 1) - *(_DWORD *)v4) >> 2;
  return ((*((_DWORD *)v4 + 1) - *(_DWORD *)v4) & 0xFFFFFFFC) != 0;
}

//----- (0066D370) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall NsFindGeometry::ProcessData(NsFindGeometry *this, NiAVObject *_pkObject, void *_pData)
{
  std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
    *(std::vector<unsigned long,std::allocator<unsigned long> > **)_pData,
    (const unsigned int *)&_pkObject);
  return 1;
}

//----- (0066D390) --------------------------------------------------------
void __thiscall DynaminUV::DynaminUV(DynaminUV *this)
{
  DynaminUV *v1; // esi@1

  v1 = this;
  NiD3DDefaultShader::NiD3DDefaultShader(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DynaminUV::_vftable_;
  v1->m_spPassOne.m_pObject = 0;
  v1->m_uiLinePassNum = 0;
  NiShader::SetName((NiShaderLibrary *)v1, "SHDynamicUV");
}
// 9C50E4: using guessed type int (__thiscall *DynaminUV___vftable_)(void *p, char);

//----- (0066D410) --------------------------------------------------------
void __thiscall DynaminUV::_DynaminUV(DynaminUV *this)
{
  DynaminUV *v1; // esi@1
  NiD3DPass *v2; // ecx@1
  bool v3; // zf@2
  NiD3DPass *v4; // ecx@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DynaminUV::_vftable_;
  v2 = this->m_spPassOne.m_pObject;
  if ( v2 )
  {
    v3 = v2->m_uiRefCount-- == 1;
    if ( v3 )
      NiD3DPass::ReturnPassToPool(v2);
    v1->m_spPassOne.m_pObject = 0;
  }
  v4 = v1->m_spPassOne.m_pObject;
  if ( v4 )
  {
    v3 = v4->m_uiRefCount-- == 1;
    if ( v3 )
      NiD3DPass::ReturnPassToPool(v4);
  }
  NiD3DDefaultShader::_NiD3DDefaultShader(&v1->baseclass_0);
}
// 9C50E4: using guessed type int (__thiscall *DynaminUV___vftable_)(void *p, char);

//----- (0066D4A0) --------------------------------------------------------
bool __thiscall DynaminUV::CreateStagesAndPasses(DynaminUV *this)
{
  DynaminUV *v1; // esi@1
  NiD3DTextureStage *v2; // edi@1
  NiTexture *v3; // ebx@1
  NiD3DTextureStageGroup *v4; // ecx@6
  NiPointer<NiD3DPass> *v5; // edi@6
  NiD3DPass *v6; // ecx@6
  bool v7; // zf@8
  NiD3DPass *v8; // edi@10
  NiD3DPass *v9; // eax@12
  NiD3DPass *v10; // edi@15
  NiD3DPass *v11; // edi@17
  NiD3DPass *v12; // edi@19
  NiD3DPass *v13; // edi@21
  NiD3DPass *v14; // edi@23
  NiD3DPass *v15; // edi@25
  NiD3DPass *v16; // edi@27
  NiD3DPass *v17; // edi@29
  NiD3DPass *v18; // edi@31
  NiD3DPass *v19; // edi@33
  NiD3DPass *v20; // esi@35
  NiD3DTextureStage *v21; // eax@37
  NiPointer<NiD3DPass> result; // [sp+0h] [bp-14h]@6
  NiPointer<NiD3DTextureStage> spStage; // [sp+4h] [bp-10h]@1
  int v25; // [sp+10h] [bp-4h]@1

  v1 = this;
  NiD3DTextureStage::CreateNewStage(&spStage);
  v2 = spStage.m_pObject;
  spStage.m_pObject->m_uiStage = 0;
  v3 = v2->m_spTexture.m_pObject;
  v25 = 0;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spTexture.m_pObject = 0;
  }
  NiD3DTextureStageGroup::SetStageState(v2->m_pkTextureStageGroup, 0xBu, 0, 0);
  v4 = v2->m_pkTextureStageGroup;
  v2->m_bTextureTransform = 1;
  NiD3DTextureStageGroup::SetStageState(v4, 0x18u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 1u, 4u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 2u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 3u, 0, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 4u, 4u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 5u, 2u, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 6u, 0, 0);
  NiD3DTextureStageGroup::SetStageState(spStage.m_pObject->m_pkTextureStageGroup, 0xBu, 0, 0);
  v5 = NiD3DPass::CreateNewPass(&result);
  v6 = v1->m_spPassOne.m_pObject;
  LOBYTE(v25) = 1;
  if ( v6 != v5->m_pObject )
  {
    if ( v6 )
    {
      v7 = v6->m_uiRefCount-- == 1;
      if ( v7 )
        NiD3DPass::ReturnPassToPool(v6);
    }
    v8 = v5->m_pObject;
    v1->m_spPassOne.m_pObject = v8;
    if ( v8 )
      ++v8->m_uiRefCount;
  }
  v9 = result.m_pObject;
  LOBYTE(v25) = 0;
  if ( result.m_pObject )
  {
    --result.m_pObject->m_uiRefCount;
    if ( !v9->m_uiRefCount )
      NiD3DPass::ReturnPassToPool(v9);
  }
  NiD3DPass::SetStage(v1->m_spPassOne.m_pObject, v1->m_spPassOne.m_pObject->m_uiCurrentStage, spStage.m_pObject);
  v10 = v1->m_spPassOne.m_pObject;
  if ( !v10->m_pkRenderStateGroup )
    v10->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v10->m_pkRenderStateGroup, 0x16u, 2u, 0);
  v11 = v1->m_spPassOne.m_pObject;
  if ( !v11->m_pkRenderStateGroup )
    v11->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v11->m_pkRenderStateGroup, 7u, 1u, 0);
  v12 = v1->m_spPassOne.m_pObject;
  if ( !v12->m_pkRenderStateGroup )
    v12->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v12->m_pkRenderStateGroup, 0xEu, 1u, 0);
  v13 = v1->m_spPassOne.m_pObject;
  if ( !v13->m_pkRenderStateGroup )
    v13->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v13->m_pkRenderStateGroup, 0x1Bu, 1u, 0);
  v14 = v1->m_spPassOne.m_pObject;
  if ( !v14->m_pkRenderStateGroup )
    v14->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v14->m_pkRenderStateGroup, 0x13u, 5u, 0);
  v15 = v1->m_spPassOne.m_pObject;
  if ( !v15->m_pkRenderStateGroup )
    v15->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v15->m_pkRenderStateGroup, 0x14u, 6u, 0);
  v16 = v1->m_spPassOne.m_pObject;
  if ( !v16->m_pkRenderStateGroup )
    v16->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v16->m_pkRenderStateGroup, 0x1Cu, 1u, 0);
  v17 = v1->m_spPassOne.m_pObject;
  if ( !v17->m_pkRenderStateGroup )
    v17->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v17->m_pkRenderStateGroup, 0x89u, 1u, 0);
  v18 = v1->m_spPassOne.m_pObject;
  if ( !v18->m_pkRenderStateGroup )
    v18->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v18->m_pkRenderStateGroup, 0xFu, 1u, 0);
  v19 = v1->m_spPassOne.m_pObject;
  if ( !v19->m_pkRenderStateGroup )
    v19->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v19->m_pkRenderStateGroup, 0x19u, 7u, 0);
  v20 = v1->m_spPassOne.m_pObject;
  if ( !v20->m_pkRenderStateGroup )
    v20->m_pkRenderStateGroup = NiD3DRenderStateGroup::GetFreeRenderStateGroup();
  NiD3DRenderStateGroup::SetRenderState(v20->m_pkRenderStateGroup, 0x18u, 0x10u, 0);
  v21 = spStage.m_pObject;
  v25 = -1;
  if ( spStage.m_pObject )
  {
    --spStage.m_pObject->m_uiRefCount;
    if ( !v21->m_uiRefCount )
      NiD3DTextureStage::ReturnStageToPool(v21);
  }
  return 1;
}

//----- (0066D7C0) --------------------------------------------------------
bool __thiscall DynaminUV::Initialize(DynaminUV *this, NiDX9Renderer *pkRenderer)
{
  DynaminUV *v2; // esi@1
  bool result; // al@1

  v2 = this;
  result = NiD3DDefaultShader::Initialize(&this->baseclass_0, pkRenderer);
  if ( result )
  {
    DynaminUV::CreateStagesAndPasses(v2);
    result = 1;
  }
  return result;
}

//----- (0066D7F0) --------------------------------------------------------
unsigned int __thiscall DynaminUV::UpdatePipeline(DynaminUV *this, NiGeometry *pkGeometry, NiSkinInstance *pkSkin, NiGeometryBufferData *pkBuffData, NiPropertyState *pkState, NiDynamicEffectState *pkEffects, NiTransform *kWorld, NiBound *kWorldBound)
{
  DynaminUV *v8; // edi@1
  NiD3DPass **v9; // esi@3
  NiProperty *v10; // edi@3
  NiD3DTextureStage *v11; // eax@3
  NiD3DTextureStage *v12; // esi@3
  NiRefObjectVtbl *v13; // eax@5
  void *(__thiscall *v14)(NiRefObject *, unsigned int); // ebx@6
  NiTexture *v15; // edi@8
  NiExtraData *v16; // eax@15
  NiExtraData *v17; // edi@15
  bool v18; // zf@19
  unsigned int result; // eax@21
  signed int v20; // eax@22
  signed int v21; // edx@22

  v8 = this;
  if ( !this->baseclass_0.baseclass_0.m_kPasses.m_uiMaxSize )
    NiTArray<NiPointer<NiD3DPass>>::SetSize(
      &this->baseclass_0.baseclass_0.m_kPasses,
      this->baseclass_0.baseclass_0.m_kPasses.m_uiGrowBy);
  v9 = (NiD3DPass **)&v8->m_spPassOne;
  NiTArray<NiPointer<NiD3DPass>>::SetAt(&v8->baseclass_0.baseclass_0.m_kPasses, 0, &v8->m_spPassOne);
  v8->baseclass_0.baseclass_0.m_uiPassCount = 1;
  v10 = pkState->m_aspProps[8].m_pObject;
  v11 = NiD3DPass::GetStage(*v9, 0);
  v12 = v11;
  if ( v11 )
    ++v11->m_uiRefCount;
  v13 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  if ( v13 )
    v14 = v13[1].__vecDelDtor;
  else
    v14 = 0;
  v15 = v12->m_spTexture.m_pObject;
  if ( (char *)v15 != (char *)v14 )
  {
    if ( v15 && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v15 )
      v15->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    v12->m_spTexture.m_pObject = (NiTexture *)v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)v14 + 1);
  }
  v16 = NiObjectNET::GetExtraData(&pkGeometry->baseclass_0.baseclass_0, "*icon");
  v17 = v16;
  if ( v16 )
    InterlockedIncrement((volatile LONG *)&v16->baseclass_0.baseclass_0.m_uiRefCount);
  v12->m_kTextureTransformation.___u0._s0._11 = 1.0;
  v12->m_kTextureTransformation.___u0._s0._21 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._31 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._41 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._12 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._32 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._42 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._13 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._23 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._43 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._14 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._24 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._34 = 0.0;
  v12->m_kTextureTransformation.___u0._s0._22 = 1.0;
  v12->m_kTextureTransformation.___u0._s0._33 = 1.0;
  v12->m_kTextureTransformation.___u0._s0._44 = 1.0;
  if ( v17 )
  {
    v20 = (signed int)v17[1].baseclass_0.baseclass_0.vfptr;
    v21 = (signed int)v17[1].baseclass_0.baseclass_0.vfptr;
    v12->m_kTextureTransformation.___u0._s0._11 = 0.125;
    v12->m_kTextureTransformation.___u0._s0._22 = 0.125;
    v12->m_kTextureTransformation.___u0._s0._31 = (double)(v21 % 8) * 0.125;
    v12->m_kTextureTransformation.___u0._s0._32 = 0.125 * (double)(v20 / 8);
    if ( !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.m_uiRefCount) )
      v17->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    if ( v12 )
    {
      v18 = v12->m_uiRefCount-- == 1;
      if ( v18 )
        NiD3DTextureStage::ReturnStageToPool(v12);
    }
    result = 1;
  }
  else
  {
    if ( v12 )
    {
      v18 = v12->m_uiRefCount-- == 1;
      if ( v18 )
        NiD3DTextureStage::ReturnStageToPool(v12);
    }
    result = 0;
  }
  return result;
}

//----- (0066D9C0) --------------------------------------------------------
NiRTTI *__thiscall DynaminUV::GetRTTI(DynaminUV *this)
{
  return &DynaminUV::m_RTTI;
}

//----- (0066D9D0) --------------------------------------------------------
void *__thiscall DynaminUV::_scalar_deleting_destructor_(DynaminUV *this, unsigned int a2)
{
  DynaminUV *v2; // esi@1
  NiD3DPass *v3; // ecx@1
  bool v4; // zf@2
  NiD3DPass *v5; // ecx@5

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&DynaminUV::_vftable_;
  v3 = this->m_spPassOne.m_pObject;
  if ( v3 )
  {
    v4 = v3->m_uiRefCount-- == 1;
    if ( v4 )
      NiD3DPass::ReturnPassToPool(v3);
    v2->m_spPassOne.m_pObject = 0;
  }
  v5 = v2->m_spPassOne.m_pObject;
  if ( v5 )
  {
    v4 = v5->m_uiRefCount-- == 1;
    if ( v4 )
      NiD3DPass::ReturnPassToPool(v5);
  }
  NiD3DDefaultShader::_NiD3DDefaultShader(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C50E4: using guessed type int (__thiscall *DynaminUV___vftable_)(void *p, char);

//----- (0066DA70) --------------------------------------------------------
bool __thiscall Inventory::IsHandedItem(Inventory *this, ItemInfo *pkInfo)
{
  ItemClassEnum v2; // eax@1

  v2 = pkInfo->Class;
  return v2 == 5 || v2 == 26 || v2 == 37 || v2 == 7;
}

//----- (0066DAA0) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouseInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspMiniHouseInv;
  v2 = 192;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DAF0) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouseEquip(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspMiniHouseEquip;
  v2 = 11;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DB40) --------------------------------------------------------
void __thiscall Inventory::ClearInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspInv;
  v2 = 192;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DB90) --------------------------------------------------------
void __thiscall Inventory::ClearEquip(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspEquip;
  v2 = 30;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DBE0) --------------------------------------------------------
void __thiscall Inventory::ClearRewardInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2
  Inventory *v4; // [sp+Ch] [bp-4h]@1

  v4 = this;
  v1 = (char *)this->m_aspRewardInv;
  v2 = 192;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
  v4->m_uiRewardCount = 0;
}

//----- (0066DC40) --------------------------------------------------------
void __thiscall Inventory::ClearPremiumActionInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2
  Inventory *v4; // [sp+Ch] [bp-4h]@1

  v4 = this;
  v1 = (char *)this->m_aspPremiumActionInv;
  v2 = 42;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
  v4->m_uiPremiumActionCount = 0;
}

//----- (0066DCA0) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouseTileAllItemInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspMiniHouseTileAllItemInv;
  v2 = 98;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DCF0) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouseFurnitureItemInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspMiniHouseFurnitureItemInv;
  v2 = 98;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DD40) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouseAccessoryItemInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspMiniHouseAccessoryItemInv;
  v2 = 98;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DD90) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouseMinigameItemInv(Inventory *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@1
  int v3; // esi@2

  v1 = (char *)this->m_aspMiniHouseMinigameAllItemInv;
  v2 = 98;
  do
  {
    v3 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v1 = 0;
    }
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (0066DDE0) --------------------------------------------------------
bool __thiscall Inventory::AddMHItemInv(Inventory *this, unsigned int uiInvType, unsigned int uiIndex, Item *pkItem)
{
  bool result; // al@3

  switch ( uiInvType )
  {
    case 0xEu:
      if ( uiIndex >= 0x62 )
        goto LABEL_10;
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&this->m_aspMiniHouseTileAllItemInv[uiIndex],
        (NiD3DDefaultShader *)pkItem);
      result = pkItem != 0;
      break;
    case 3u:
      if ( uiIndex >= 0x62 )
        goto LABEL_10;
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&this->m_aspMiniHouseFurnitureItemInv[uiIndex],
        (NiD3DDefaultShader *)pkItem);
      result = pkItem != 0;
      break;
    case 0xDu:
      if ( uiIndex >= 0x62 )
        goto LABEL_10;
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&this->m_aspMiniHouseAccessoryItemInv[uiIndex],
        (NiD3DDefaultShader *)pkItem);
      result = pkItem != 0;
      break;
    case 0x10u:
      if ( uiIndex >= 0x62 )
        goto LABEL_10;
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&this->m_aspMiniHouseMinigameAllItemInv[uiIndex],
        (NiD3DDefaultShader *)pkItem);
      result = pkItem != 0;
      break;
    default:
LABEL_10:
      result = 0;
      break;
  }
  return result;
}

//----- (0066DEC0) --------------------------------------------------------
void __thiscall Inventory::RemoveMHItemInv(Inventory *this, unsigned int uiInvType, unsigned int uiIndex)
{
  Inventory *v3; // esi@1
  Item *v4; // edi@3
  Item *v5; // edi@9
  Item *v6; // edi@15
  Item *v7; // edi@21

  v3 = this;
  switch ( uiInvType )
  {
    case 0xEu:
      if ( uiIndex < 0x62 )
      {
        v4 = this->m_aspMiniHouseTileAllItemInv[uiIndex].m_pObject;
        if ( v4 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) )
          {
            if ( v4 )
              v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
          }
          v3->m_aspMiniHouseTileAllItemInv[uiIndex].m_pObject = 0;
        }
      }
      break;
    case 3u:
      if ( uiIndex < 0x62 )
      {
        v5 = this->m_aspMiniHouseFurnitureItemInv[uiIndex].m_pObject;
        if ( v5 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
            v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
          v3->m_aspMiniHouseFurnitureItemInv[uiIndex].m_pObject = 0;
        }
      }
      break;
    case 0xDu:
      if ( uiIndex < 0x62 )
      {
        v6 = this->m_aspMiniHouseAccessoryItemInv[uiIndex].m_pObject;
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
            v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
          v3->m_aspMiniHouseAccessoryItemInv[uiIndex].m_pObject = 0;
        }
      }
      break;
    case 0x10u:
      if ( uiIndex < 0x62 )
      {
        v7 = this->m_aspMiniHouseMinigameAllItemInv[uiIndex].m_pObject;
        if ( v7 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) && v7 )
            v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
          v3->m_aspMiniHouseMinigameAllItemInv[uiIndex].m_pObject = 0;
        }
      }
      break;
    default:
      return;
  }
}

//----- (0066E020) --------------------------------------------------------
int __thiscall Inventory::GetTotalInv(Inventory *this)
{
  int result; // eax@1
  char *v2; // ecx@1
  signed int v3; // edx@1

  result = 0;
  v2 = (char *)&this->m_aspInv[1];
  v3 = 32;
  do
  {
    if ( *((_DWORD *)v2 - 1) )
      ++result;
    if ( *(_DWORD *)v2 )
      ++result;
    if ( *((_DWORD *)v2 + 1) )
      ++result;
    if ( *((_DWORD *)v2 + 2) )
      ++result;
    if ( *((_DWORD *)v2 + 3) )
      ++result;
    if ( *((_DWORD *)v2 + 4) )
      ++result;
    v2 += 24;
    --v3;
  }
  while ( v3 );
  return result;
}

//----- (0066E060) --------------------------------------------------------
Item *__thiscall Inventory::GetRightHandEquip(Inventory *this)
{
  return this->m_aspEquip[12].m_pObject;
}

//----- (0066E070) --------------------------------------------------------
Item *__thiscall Inventory::GetLeftHandEquip(Inventory *this)
{
  return this->m_aspEquip[10].m_pObject;
}

//----- (0066E080) --------------------------------------------------------
Item *__thiscall Inventory::GetRightHandAccEquip(Inventory *this)
{
  return this->m_aspEquip[13].m_pObject;
}

//----- (0066E090) --------------------------------------------------------
Item *__thiscall Inventory::GetLeftHandAccEquip(Inventory *this)
{
  return this->m_aspEquip[11].m_pObject;
}

//----- (0066E0A0) --------------------------------------------------------
Item *__thiscall Inventory::GetShieldAccEquip(Inventory *this)
{
  return this->m_aspEquip[29].m_pObject;
}

//----- (0066E0B0) --------------------------------------------------------
Item *__thiscall Inventory::GetEquipedWeaponAcc(Inventory *this)
{
  Inventory *v1; // edi@1
  Item *v2; // esi@1
  Item *result; // eax@3

  v1 = this;
  v2 = this->m_aspEquip[13].m_pObject;
  if ( v2
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(this->m_aspEquip[13].m_pObject) == 26
    || (v2 = v1->m_aspEquip[11].m_pObject) != 0
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(v1->m_aspEquip[11].m_pObject) == 26 )
    result = v2;
  else
    result = 0;
  return result;
}

//----- (0066E0F0) --------------------------------------------------------
Item *__thiscall Inventory::GetEquipedShieldAcc(Inventory *this)
{
  Item *v1; // esi@1
  Item *result; // eax@3

  v1 = this->m_aspEquip[29].m_pObject;
  if ( v1
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[1].__vecDelDtor)(this->m_aspEquip[29].m_pObject) == 37 )
    result = v1;
  else
    result = 0;
  return result;
}

//----- (0066E110) --------------------------------------------------------
bool __thiscall Inventory::CanIEquipWeapon(Inventory *this, ItemInfo *pkInfo)
{
  Item *v2; // esi@1
  ItemInfo *v4; // esi@6

  v2 = g_kInventory.m_aspEquip[13].m_pObject;
  return (!g_kInventory.m_aspEquip[13].m_pObject
       || (unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[13].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[13].m_pObject) != 26)
      && ((v2 = g_kInventory.m_aspEquip[11].m_pObject) == 0
       || (unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[11].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[11].m_pObject) != 26)
      || (v4 = v2->m_pkInfo, v4->WeaponType == pkInfo->WeaponType) && v4->TwoHand == pkInfo->TwoHand;
}

//----- (0066E170) --------------------------------------------------------
bool __thiscall Inventory::CanIEquipWeaponCostume(Inventory *this, ItemInfo *pkInfo)
{
  Item *v2; // esi@1
  Item *v4; // esi@6

  v2 = g_kInventory.m_aspEquip[10].m_pObject;
  return (!g_kInventory.m_aspEquip[10].m_pObject
       || ((unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[10].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[10].m_pObject) != 5
        || v2->m_pkInfo->WeaponType == pkInfo->WeaponType)
       && v2->m_pkInfo->TwoHand == pkInfo->TwoHand)
      && ((v4 = g_kInventory.m_aspEquip[12].m_pObject) == 0
       || ((unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[12].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[12].m_pObject) != 5
        || v4->m_pkInfo->WeaponType == pkInfo->WeaponType)
       && v4->m_pkInfo->TwoHand == pkInfo->TwoHand);
}

//----- (0066E1F0) --------------------------------------------------------
bool __thiscall Inventory::CanIEquipShield(Inventory *this, ItemInfo *pkInfo)
{
  Item *v2; // esi@1
  bool result; // al@5

  v2 = g_kInventory.m_aspEquip[13].m_pObject;
  if ( g_kInventory.m_aspEquip[13].m_pObject
    && (unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[13].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[13].m_pObject) == 26
    || (v2 = g_kInventory.m_aspEquip[11].m_pObject) != 0
    && (unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[11].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[11].m_pObject) == 26 )
    result = v2->m_pkInfo->TwoHand == pkInfo->TwoHand;
  else
    result = 1;
  return result;
}

//----- (0066E240) --------------------------------------------------------
bool __thiscall Inventory::CanIEquipShieldCostume(Inventory *this, ItemInfo *pkInfo)
{
  bool result; // al@2
  Item *v3; // esi@7

  if ( !pkInfo
    || g_kInventory.m_aspEquip[10].m_pObject
    && (unsigned __int8)((int (*)(void))g_kInventory.m_aspEquip[10].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)() != 7
    || g_kInventory.m_aspEquip[12].m_pObject
    && g_kInventory.m_aspEquip[12].m_pObject->m_pkInfo->TwoHand != pkInfo->TwoHand )
  {
    result = 0;
  }
  else
  {
    v3 = g_kInventory.m_aspEquip[13].m_pObject;
    result = (!g_kInventory.m_aspEquip[13].m_pObject
           || (unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[13].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[13].m_pObject) != 26)
          && ((v3 = g_kInventory.m_aspEquip[11].m_pObject) == 0
           || (unsigned __int8)((int (__thiscall *)(_DWORD))g_kInventory.m_aspEquip[11].m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(g_kInventory.m_aspEquip[11].m_pObject) != 26)
          || v3->m_pkInfo->TwoHand == pkInfo->TwoHand;
  }
  return result;
}

//----- (0066E2D0) --------------------------------------------------------
void __thiscall Inventory::DecreaeWeaponAccCharged(Inventory *this)
{
  Inventory *v1; // edi@1
  Item *v2; // esi@1
  int v3; // eax@5
  NiRefObjectVtbl *v4; // edx@5

  v1 = this;
  v2 = this->m_aspEquip[13].m_pObject;
  if ( v2
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(this->m_aspEquip[13].m_pObject) == 26
    || (v2 = v1->m_aspEquip[11].m_pObject) != 0
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(v1->m_aspEquip[11].m_pObject) == 26 )
  {
    v3 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[19].__vecDelDtor)(v2);
    v4 = v2->baseclass_0.vfptr;
    if ( v3 )
      v4[20].__vecDelDtor((NiRefObject *)v2, v3 - 1);
    else
      v4[20].__vecDelDtor((NiRefObject *)v2, 0);
  }
}

//----- (0066E330) --------------------------------------------------------
void __thiscall Inventory::DecreaeShieldAccCharged(Inventory *this)
{
  Item *v1; // esi@1
  int v2; // eax@3
  NiRefObjectVtbl *v3; // edx@3

  v1 = this->m_aspEquip[29].m_pObject;
  if ( v1
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[1].__vecDelDtor)(this->m_aspEquip[29].m_pObject) == 37 )
  {
    v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[19].__vecDelDtor)(v1);
    v3 = v1->baseclass_0.vfptr;
    if ( v2 )
      v3[20].__vecDelDtor((NiRefObject *)v1, v2 - 1);
    else
      v3[20].__vecDelDtor((NiRefObject *)v1, 0);
  }
}

//----- (0066E370) --------------------------------------------------------
bool __thiscall Inventory::IsAttackAbleEquip(Inventory *this)
{
  Item *v1; // eax@1
  bool result; // al@3

  v1 = this->m_aspEquip[12].m_pObject;
  if ( v1 || (v1 = this->m_aspEquip[10].m_pObject) != 0 )
    result = ((int (__thiscall *)(_DWORD))v1->baseclass_0.vfptr[1].__vecDelDtor)(v1) == 5;
  else
    result = 0;
  return result;
}

//----- (0066E3A0) --------------------------------------------------------
bool __thiscall Inventory::IsReaminSlot(Inventory *this, unsigned __int16 kID)
{
  signed int v2; // edi@1
  char *v3; // ebx@1
  int v4; // esi@2
  unsigned int v5; // ST0C_4@4

  v2 = 0;
  v3 = (char *)this->m_aspInv;
  while ( 1 )
  {
    v4 = *(_DWORD *)v3;
    if ( !*(_DWORD *)v3 )
      break;
    if ( *(_WORD *)(v4 + 8) == kID )
    {
      v5 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 16))(*(_DWORD *)v3);
      if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) < v5 )
        break;
    }
    ++v2;
    v3 += 4;
    if ( v2 >= 192 )
      return 0;
  }
  return 1;
}

//----- (0066E400) --------------------------------------------------------
void __thiscall Inventory::UpdateWeaponTitleWhenMobDead(Inventory *this, unsigned __int16 kDeadMobID)
{
  Item *v2; // esi@1
  unsigned __int16 v3; // di@4
  int v4; // esi@4
  signed int v5; // ebx@4
  WEAPON_TITLE_DATA *v6; // eax@6

  v2 = this->m_aspEquip[12].m_pObject;
  if ( v2 || (v2 = this->m_aspEquip[10].m_pObject) != 0 )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(v2) == 5 )
    {
      v3 = kDeadMobID;
      v4 = (int)&v2->m_kStruct.itemattr.amulet.strengthen;
      v5 = 3;
      do
      {
        if ( *(_WORD *)(v4 - 2) == v3 )
        {
          v6 = CWeaponTitle::GetLevelData(
                 &WeaponTitleTab::ms_kTab,
                 v3,
                 *(_DWORD *)v4 & 0xFFFFFFF,
                 (unsigned int *)&kDeadMobID);
          if ( v6 )
          {
            if ( (*(_DWORD *)v4 & 0xFFFFFFFu) < v6->MobKillCount )
              *(_DWORD *)v4 ^= (*(_DWORD *)v4 ^ (*(_DWORD *)v4 + 1)) & 0xFFFFFFF;
          }
        }
        v4 += 6;
        --v5;
      }
      while ( v5 );
    }
  }
}

//----- (0066E480) --------------------------------------------------------
Item *__thiscall Inventory::GetEquipedWeapon(Inventory *this)
{
  Inventory *v1; // edi@1
  Item *v2; // esi@1
  Item *result; // eax@3

  v1 = this;
  v2 = this->m_aspEquip[12].m_pObject;
  if ( v2
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(this->m_aspEquip[12].m_pObject) == 5
    || (v2 = v1->m_aspEquip[10].m_pObject) != 0
    && (unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[1].__vecDelDtor)(v1->m_aspEquip[10].m_pObject) == 5 )
    result = v2;
  else
    result = 0;
  return result;
}

//----- (0066E4C0) --------------------------------------------------------
WeaponTypeEnum __thiscall Inventory::GetEquipWeponType(Inventory *this)
{
  Inventory *v1; // edi@1
  Item *v2; // esi@1
  int v3; // edi@3
  int v4; // esi@3
  WeaponTypeEnum result; // eax@4
  int v6; // eax@6
  Item *v7; // esi@8
  int v8; // edi@10
  int v9; // esi@10

  v1 = this;
  v2 = this->m_aspEquip[12].m_pObject;
  if ( v2
    && (unsigned __int8)((int (__thiscall *)(Item *))v2->baseclass_0.vfptr[1].__vecDelDtor)(this->m_aspEquip[12].m_pObject) == 5 )
  {
    v3 = v2->m_kStruct.itemid;
    v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v3) )
    {
      if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) )
      {
        v6 = *(_DWORD *)(v4 + 196) + 4 * v3;
        if ( *(_DWORD *)v6 )
          return *(_DWORD *)(*(_DWORD *)v6 + 232);
      }
    }
    return vE8;
  }
  v7 = v1->m_aspEquip[10].m_pObject;
  if ( v7
    && (unsigned __int8)((int (__thiscall *)(Item *))v7->baseclass_0.vfptr[1].__vecDelDtor)(v1->m_aspEquip[10].m_pObject) == 5 )
  {
    v8 = v7->m_kStruct.itemid;
    v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                             ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                             v8)
      || (unsigned __int16)v8 > *(_WORD *)(v9 + 200) )
      return vE8;
    v6 = *(_DWORD *)(v9 + 196) + 4 * v8;
    if ( *(_DWORD *)v6 )
      return *(_DWORD *)(*(_DWORD *)v6 + 232);
    result = vE8;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066E580) --------------------------------------------------------
bool __thiscall Inventory::IsDemandType(Inventory *this, WeaponDemandType eDemand)
{
  Inventory *v2; // ebx@1
  Item *v3; // edi@1
  ItemInfo *v4; // esi@1
  int v5; // esi@3
  int v6; // edi@3
  int v7; // eax@7
  Item *v8; // edi@10
  WeaponDemandType v9; // edi@13
  Item *v10; // ecx@14
  bool result; // al@17
  bool v12; // dl@17
  bool v13; // bl@17
  bool v14; // cl@17
  WeaponTypeEnum v15; // ecx@18
  char v16; // dl@19
  bool bShield; // [sp+Dh] [bp-7h]@13
  bool bDSword; // [sp+Eh] [bp-6h]@17
  bool bWand; // [sp+Fh] [bp-5h]@17
  bool bStaff; // [sp+10h] [bp-4h]@17
  bool bCBow; // [sp+11h] [bp-3h]@17
  bool bBow; // [sp+12h] [bp-2h]@17
  bool bHammer; // [sp+13h] [bp-1h]@17
  bool bMace_3; // [sp+1Fh] [bp+Bh]@17

  v2 = this;
  v3 = this->m_aspEquip[12].m_pObject;
  v4 = 0;
  if ( v3 && (unsigned __int8)((int (__thiscall *)(Item *))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3) == 5 )
  {
    v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v6 = v3->m_kStruct.itemid;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v6) )
    {
      if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) )
      {
        v7 = *(_DWORD *)(v5 + 196) + 4 * v6;
        if ( *(_DWORD *)v7 )
        {
          v4 = *(ItemInfo **)v7;
          if ( *(_DWORD *)v7 )
            goto LABEL_13;
        }
        else
        {
          v4 = 0;
        }
      }
      else
      {
        v4 = 0;
      }
    }
    else
    {
      v4 = 0;
    }
  }
  v8 = v2->m_aspEquip[10].m_pObject;
  if ( v8
    && (unsigned __int8)((int (__thiscall *)(Item *))v8->baseclass_0.vfptr[1].__vecDelDtor)(v2->m_aspEquip[10].m_pObject) == 5 )
    v4 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v8->m_kStruct.itemid);
LABEL_13:
  v9 = eDemand;
  bShield = 0;
  if ( eDemand == 7 )
  {
    v10 = v2->m_aspEquip[10].m_pObject;
    if ( v10 )
    {
      if ( (unsigned __int8)((int (*)(void))v10->baseclass_0.vfptr[1].__vecDelDtor)() == 7 )
        bShield = 1;
    }
  }
  result = 0;
  v12 = 0;
  v13 = 0;
  v14 = 0;
  bMace_3 = 0;
  bHammer = 0;
  bBow = 0;
  bCBow = 0;
  bStaff = 0;
  bWand = 0;
  bDSword = 0;
  if ( v4 )
  {
    v15 = v4->WeaponType;
    if ( v15 == 16 )
      return 0;
    v16 = v4->TwoHand;
    result = v16 == 1;
    v12 = v16 == 0;
    bMace_3 = v15 == 5;
    bHammer = v15 == 13;
    bBow = v15 == 2;
    bCBow = v15 == 10;
    bStaff = v15 == 3;
    bWand = v15 == 11;
    bDSword = v15 == 17;
    v13 = v15 == 18;
    v14 = v15 == 19;
  }
  switch ( v9 )
  {
    case 2:
    case 6:
      result = 1;
      break;
    case 4:
      result = bHammer;
      break;
    case 5:
      result = bMace_3;
      break;
    case 0:
      result = v12;
      break;
    case 3:
      result = result || v12 || bMace_3 || bHammer || bBow || bCBow || bStaff || bWand || bDSword || v13 || v14;
      break;
    case 7:
      result = bShield;
      break;
    case 8:
      result = bBow;
      break;
    case 9:
      result = bCBow;
      break;
    case 10:
      result = bStaff;
      break;
    case 11:
      result = bWand;
      break;
    case 13:
      result = bDSword;
      break;
    case 12:
      result = v13;
      break;
    case 14:
      result = v14;
      break;
    case 1:
      return result;
    default:
      return 0;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066E7F0) --------------------------------------------------------
unsigned int __thiscall Inventory::GetItemCnt(Inventory *this, unsigned __int16 kID)
{
  unsigned int v2; // ebx@1
  char *v3; // edi@1
  int v4; // esi@2
  signed int v6; // [sp+Ch] [bp-4h]@1

  v2 = 0;
  v3 = (char *)this->m_aspInv;
  v6 = 192;
  do
  {
    v4 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 && *(_WORD *)(v4 + 8) == kID )
    {
      if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 16))(*(_DWORD *)v3) == 1 )
        ++v2;
      else
        v2 += (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4);
    }
    v3 += 4;
    --v6;
  }
  while ( v6 );
  return v2;
}

//----- (0066E850) --------------------------------------------------------
Item *__thiscall Inventory::GetItemByID(Inventory *this, unsigned __int16 kItemID)
{
  Item *result; // eax@2
  signed int v3; // eax@3
  char *v4; // edx@3
  signed int v5; // eax@7
  char *v6; // edx@7

  if ( kItemID == -1 )
  {
    result = 0;
  }
  else
  {
    v3 = 0;
    v4 = (char *)this->m_aspEquip;
    do
    {
      if ( *(_DWORD *)v4 && *(_WORD *)(*(_DWORD *)v4 + 8) == kItemID )
        return this->m_aspEquip[v3].m_pObject;
      ++v3;
      v4 += 4;
    }
    while ( v3 < 30 );
    v5 = 0;
    v6 = (char *)this->m_aspInv;
    while ( !*(_DWORD *)v6 || *(_WORD *)(*(_DWORD *)v6 + 8) != kItemID )
    {
      ++v5;
      v6 += 4;
      if ( v5 >= 192 )
        return 0;
    }
    result = this->m_aspInv[v5].m_pObject;
  }
  return result;
}

//----- (0066E8D0) --------------------------------------------------------
int __thiscall Inventory::GetItemLot(Inventory *this, unsigned __int16 kItemID)
{
  Inventory *v2; // ebx@1
  char *v3; // esi@1
  signed int v4; // edi@1
  int v5; // ecx@2
  int v6; // esi@7
  signed int v7; // edi@7
  int v8; // ecx@8
  int iLot; // [sp+Ch] [bp-4h]@1

  v2 = this;
  iLot = 0;
  v3 = (char *)this->m_aspEquip;
  v4 = 30;
  do
  {
    v5 = *(_DWORD *)v3;
    if ( *(_DWORD *)v3 && *(_WORD *)(v5 + 8) == kItemID && (unsigned int)(*(int (**)(void))(*(_DWORD *)v5 + 16))() > 1 )
      iLot += (*(int (**)(void))(**(_DWORD **)v3 + 12))();
    v3 += 4;
    --v4;
  }
  while ( v4 );
  v6 = (int)v2->m_aspInv;
  v7 = 192;
  do
  {
    v8 = *(_DWORD *)v6;
    if ( *(_DWORD *)v6 && *(_WORD *)(v8 + 8) == kItemID && (unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 16))() >= 1 )
      iLot += (*(int (**)(void))(**(_DWORD **)v6 + 12))();
    v6 += 4;
    --v7;
  }
  while ( v7 );
  return iLot;
}

//----- (0066E960) --------------------------------------------------------
unsigned int __thiscall Inventory::GetStatInitialPoint(Inventory *this)
{
  char *v1; // ebx@1
  int v2; // edi@3
  int v3; // esi@3
  int v4; // ecx@5
  int v5; // eax@6
  signed int v7; // [sp+Ch] [bp-8h]@1
  unsigned int uiCount; // [sp+10h] [bp-4h]@1

  uiCount = 0;
  v1 = (char *)this->m_aspInv;
  v7 = 192;
  do
  {
    if ( *(_DWORD *)v1 )
    {
      v2 = *(_WORD *)(*(_DWORD *)v1 + 8);
      v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(*(_DWORD *)v1 + 8)) )
      {
        if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) )
        {
          v4 = *(_DWORD *)(v3 + 196);
          if ( *(_DWORD *)(v4 + 4 * v2) )
          {
            v5 = *(_DWORD *)(v4 + 4 * v2);
            if ( v5 )
            {
              if ( !strcmp((const char *)(v5 + 2), "FreeStatusReloadOne") )
                uiCount += (*(int (**)(void))(**(_DWORD **)v1 + 12))();
            }
          }
        }
      }
    }
    v1 += 4;
    --v7;
  }
  while ( v7 );
  return uiCount;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066EA20) --------------------------------------------------------
unsigned int __thiscall Inventory::GetSkillEmpowerInitialPoint(Inventory *this)
{
  char *v1; // ebx@1
  int v2; // edi@3
  int v3; // esi@3
  int v4; // ecx@5
  int v5; // eax@6
  signed int v7; // [sp+Ch] [bp-8h]@1
  unsigned int uiCount; // [sp+10h] [bp-4h]@1

  uiCount = 0;
  v1 = (char *)this->m_aspInv;
  v7 = 192;
  do
  {
    if ( *(_DWORD *)v1 )
    {
      v2 = *(_WORD *)(*(_DWORD *)v1 + 8);
      v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(*(_DWORD *)v1 + 8)) )
      {
        if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) )
        {
          v4 = *(_DWORD *)(v3 + 196);
          if ( *(_DWORD *)(v4 + 4 * v2) )
          {
            v5 = *(_DWORD *)(v4 + 4 * v2);
            if ( v5 )
            {
              if ( !strcmp((const char *)(v5 + 2), "SkillReloadbundleOne") )
                uiCount += (*(int (**)(void))(**(_DWORD **)v1 + 12))();
            }
          }
        }
      }
    }
    v1 += 4;
    --v7;
  }
  while ( v7 );
  return uiCount;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066EAE0) --------------------------------------------------------
bool __thiscall Inventory::FindEnchantSoketAdd(Inventory *this, ITEM_INVEN *rkInven)
{
  signed int v2; // ebx@1
  int v3; // ecx@1
  int v4; // edi@3
  int v5; // esi@3
  int v6; // ecx@5
  int v7; // eax@6
  int v9; // [sp+Ch] [bp-4h]@1

  v2 = 0;
  v3 = (int)this->m_aspInv;
  v9 = v3;
  while ( 1 )
  {
    if ( *(_DWORD *)v3 )
    {
      v4 = *(_WORD *)(*(_DWORD *)v3 + 8);
      v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(*(_DWORD *)v3 + 8)) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
        {
          v6 = *(_DWORD *)(v5 + 196);
          if ( *(_DWORD *)(v6 + 4 * v4) )
          {
            v7 = *(_DWORD *)(v6 + 4 * v4);
            if ( v7 )
            {
              if ( !strcmp((const char *)(v7 + 2), "EnchantSocketAdd") )
                break;
            }
          }
        }
      }
    }
    ++v2;
    v3 = v9 + 4;
    v9 += 4;
    if ( v2 >= 192 )
      return 0;
  }
  rkInven->Inven = v2 & 0x3FF | 0x2400;
  return 1;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066EBA0) --------------------------------------------------------
bool __thiscall Inventory::FindEnchantSoketReload(Inventory *this, ITEM_INVEN *rkInven)
{
  signed int v2; // ebx@1
  int v3; // ecx@1
  int v4; // edi@3
  int v5; // esi@3
  int v6; // ecx@5
  int v7; // eax@6
  int v9; // [sp+Ch] [bp-4h]@1

  v2 = 0;
  v3 = (int)this->m_aspInv;
  v9 = v3;
  while ( 1 )
  {
    if ( *(_DWORD *)v3 )
    {
      v4 = *(_WORD *)(*(_DWORD *)v3 + 8);
      v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(*(_DWORD *)v3 + 8)) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
        {
          v6 = *(_DWORD *)(v5 + 196);
          if ( *(_DWORD *)(v6 + 4 * v4) )
          {
            v7 = *(_DWORD *)(v6 + 4 * v4);
            if ( v7 )
            {
              if ( !strcmp((const char *)(v7 + 2), "EnchantSocketReload") )
                break;
            }
          }
        }
      }
    }
    ++v2;
    v3 = v9 + 4;
    v9 += 4;
    if ( v2 >= 192 )
      return 0;
  }
  rkInven->Inven = v2 & 0x3FF | 0x2400;
  return 1;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066EC60) --------------------------------------------------------
bool __thiscall Inventory::FindWeaponTitleRemoveInven(Inventory *this, ITEM_INVEN *rkInven)
{
  signed int v2; // ebx@1
  int v3; // ecx@1
  int v4; // edi@3
  int v5; // esi@3
  int v6; // ecx@5
  int v7; // eax@6
  int v9; // [sp+Ch] [bp-4h]@1

  v2 = 0;
  v3 = (int)this->m_aspInv;
  v9 = v3;
  while ( 1 )
  {
    if ( *(_DWORD *)v3 )
    {
      v4 = *(_WORD *)(*(_DWORD *)v3 + 8);
      v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(*(_DWORD *)v3 + 8)) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) )
        {
          v6 = *(_DWORD *)(v5 + 196);
          if ( *(_DWORD *)(v6 + 4 * v4) )
          {
            v7 = *(_DWORD *)(v6 + 4 * v4);
            if ( v7 )
            {
              if ( !strcmp((const char *)(v7 + 2), "LicenseClear") )
                break;
            }
          }
        }
      }
    }
    ++v2;
    v3 = v9 + 4;
    v9 += 4;
    if ( v2 >= 192 )
      return 0;
  }
  rkInven->Inven = v2 & 0x3FF | 0x2400;
  return 1;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066ED20) --------------------------------------------------------
unsigned int __thiscall Inventory::GetInvIdxLotIsNotMax(Inventory *this, Item *pkItem)
{
  Inventory *v2; // edi@1
  unsigned int v3; // edx@1
  unsigned int v4; // esi@1
  int v5; // edi@1
  int v6; // ebx@5
  unsigned int v7; // ST1C_4@5
  int v8; // ecx@8
  unsigned int result; // eax@8
  int v10; // [sp+Ch] [bp-10h]@1
  int uiUsing; // [sp+10h] [bp-Ch]@1
  int dwValue; // [sp+18h] [bp-4h]@1

  v2 = this;
  ChargedItemList::GetTotalEffectingValue(EE_MOREINVENTORY, (unsigned int *)&dwValue);
  v3 = 8 * (3 * dwValue + 6);
  v4 = 0;
  v5 = (int)v2->m_aspInv;
  uiUsing = 8 * (3 * dwValue + 6);
  v10 = v5;
  do
  {
    if ( v4 >= v3 )
      break;
    if ( *(_DWORD *)v5 && *(_WORD *)(*(_DWORD *)v5 + 8) == pkItem->m_kStruct.itemid )
    {
      v6 = *(_DWORD *)v5;
      v7 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)v5 + 12))(*(_DWORD *)v5);
      if ( (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 16))(v6) > v7 )
        return v4;
      v3 = uiUsing;
    }
    ++v4;
    v5 += 4;
  }
  while ( v4 < 0xC0 );
  v8 = v10;
  result = 0;
  do
  {
    if ( result >= v3 )
      break;
    if ( !*(_DWORD *)v8 )
      return result;
    ++result;
    v8 += 4;
  }
  while ( result < 0x240 );
  return -1;
}

//----- (0066EDD0) --------------------------------------------------------
Item *__thiscall Inventory::GetMHItemByObjID(Inventory *this, int iGUID)
{
  signed int v2; // eax@1
  char *v3; // edx@1
  signed int v4; // eax@5
  char *v5; // edx@5
  signed int v6; // eax@9
  char *v7; // edx@9
  signed int v8; // eax@13
  char *v9; // edx@13

  v2 = 0;
  v3 = (char *)this->m_aspMiniHouseFurnitureItemInv;
  do
  {
    if ( *(_DWORD *)v3 && *(_WORD *)(*(_DWORD *)v3 + 11) == iGUID )
      return this->m_aspMiniHouseFurnitureItemInv[v2].m_pObject;
    ++v2;
    v3 += 4;
  }
  while ( v2 < 98 );
  v4 = 0;
  v5 = (char *)this->m_aspMiniHouseAccessoryItemInv;
  do
  {
    if ( *(_DWORD *)v5 && *(_WORD *)(*(_DWORD *)v5 + 11) == iGUID )
      return this->m_aspMiniHouseAccessoryItemInv[v4].m_pObject;
    ++v4;
    v5 += 4;
  }
  while ( v4 < 98 );
  v6 = 0;
  v7 = (char *)this->m_aspMiniHouseTileAllItemInv;
  do
  {
    if ( *(_DWORD *)v7 && *(_WORD *)(*(_DWORD *)v7 + 11) == iGUID )
      return this->m_aspMiniHouseTileAllItemInv[v6].m_pObject;
    ++v6;
    v7 += 4;
  }
  while ( v6 < 98 );
  v8 = 0;
  v9 = (char *)this->m_aspMiniHouseMinigameAllItemInv;
  while ( !*(_DWORD *)v9 || *(_WORD *)(*(_DWORD *)v9 + 11) != iGUID )
  {
    ++v8;
    v9 += 4;
    if ( v8 >= 98 )
      return 0;
  }
  return this->m_aspMiniHouseMinigameAllItemInv[v8].m_pObject;
}

//----- (0066EEA0) --------------------------------------------------------
bool __thiscall Inventory::FindItemByItemClass(Inventory *this, ItemClassEnum eItemClass)
{
  signed int v2; // esi@1
  char *v3; // edi@1

  v2 = 0;
  v3 = (char *)this->m_aspInv;
  while ( !*(_DWORD *)v3 || (unsigned __int8)(*(int (**)(void))(**(_DWORD **)v3 + 4))() != eItemClass )
  {
    ++v2;
    v3 += 4;
    if ( v2 >= 192 )
      return 0;
  }
  return 1;
}

//----- (0066EEF0) --------------------------------------------------------
const int __thiscall Inventory::GetSlotByID(Inventory *this, unsigned __int16 kID)
{
  const int result; // eax@1
  char *v3; // ecx@1

  result = 0;
  v3 = (char *)this->m_aspInv;
  while ( !*(_DWORD *)v3 || *(_WORD *)(*(_DWORD *)v3 + 8) != kID )
  {
    ++result;
    v3 += 4;
    if ( result >= 192 )
      return -1;
  }
  return result;
}

//----- (0066EF20) --------------------------------------------------------
unsigned int __thiscall Inventory::GetRandomOptRecoverItemCount(Inventory *this, ITEM_INVEN *rkInven)
{
  char *v2; // ebx@1
  int v3; // edi@3
  int v4; // esi@3
  int v5; // ecx@5
  int v6; // eax@6
  unsigned int result; // eax@11
  signed int v8; // [sp+Ch] [bp-8h]@1
  unsigned int iRecoveryItemCount; // [sp+10h] [bp-4h]@1

  iRecoveryItemCount = 0;
  v2 = (char *)this->m_aspInv;
  v8 = 192;
  do
  {
    if ( *(_DWORD *)v2 )
    {
      v3 = *(_WORD *)(*(_DWORD *)v2 + 8);
      v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              *(_WORD *)(*(_DWORD *)v2 + 8)) )
      {
        if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) )
        {
          v5 = *(_DWORD *)(v4 + 196);
          if ( *(_DWORD *)(v5 + 4 * v3) )
          {
            v6 = *(_DWORD *)(v5 + 4 * v3);
            if ( v6 )
            {
              if ( !strcmp((const char *)(v6 + 2), "RandomOption_Recover") )
                iRecoveryItemCount += (*(int (**)(void))(**(_DWORD **)v2 + 12))();
            }
          }
        }
      }
    }
    v2 += 4;
    --v8;
  }
  while ( v8 );
  if ( iRecoveryItemCount >= 1 )
  {
    rkInven->Inven = rkInven->Inven & 0x3FF | 0x2400;
    result = iRecoveryItemCount;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066F000) --------------------------------------------------------
void __thiscall Inventory::_Inventory(Inventory *this)
{
  Inventory *v1; // esi@1

  v1 = this;
  _eh_vector_destructor_iterator_(
    this->m_aspPremiumActionInv,
    4u,
    42,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspRewardInv,
    4u,
    192,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspMiniHouseMinigameAllItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspMiniHouseTileAllItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspMiniHouseAccessoryItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspMiniHouseFurnitureItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspMiniHouseEquip,
    4u,
    11,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspMiniHouseInv,
    4u,
    192,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspEquip,
    4u,
    30,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_aspInv,
    4u,
    192,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}

//----- (0066F140) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouse(Inventory *this)
{
  Inventory *v1; // esi@1

  v1 = this;
  Inventory::ClearMiniHouseInv(this);
  Inventory::ClearMiniHouseEquip(v1);
}

//----- (0066F150) --------------------------------------------------------
bool __thiscall Inventory::EquipMiniHouse(Inventory *this, unsigned int uiIndex)
{
  return uiIndex < 0xC0 && this->m_aspInv[uiIndex].m_pObject;
}

//----- (0066F170) --------------------------------------------------------
bool __thiscall Inventory::UnEquipMiniHouse(Inventory *this, unsigned int uiIndex)
{
  return uiIndex < 0x1E && this->m_aspEquip[uiIndex].m_pObject;
}

//----- (0066F1A0) --------------------------------------------------------
void __thiscall Inventory::Add(Inventory *this, unsigned int uiInvenType, Item *pkItem, unsigned int uiIndex)
{
  switch ( uiInvenType )
  {
    case 8u:
      Inventory::AddEquip(this, pkItem, uiIndex);
      break;
    case 9u:
      Inventory::AddInv(this, pkItem, uiIndex);
      break;
    case 0xCu:
      if ( uiIndex <= 0xA )
        Inventory::AddMiniHouseEquip(this, pkItem, uiIndex);
      else
        Inventory::AddMiniHouseInv(this, pkItem, uiIndex - 11);
      break;
    case 2u:
      Inventory::AddRewardInv(this, pkItem, uiIndex);
      break;
    case 0xFu:
      Inventory::AddPremiumActionInv(this, pkItem, uiIndex);
      break;
    default:
      return;
  }
}

//----- (0066F250) --------------------------------------------------------
bool __thiscall Inventory::Equip(Inventory *this, unsigned int uiIndex)
{
  Inventory *v2; // edi@1
  Item *v3; // eax@2
  bool result; // al@3
  ItemInfo *v5; // ecx@4
  Item *v6; // esi@5

  v2 = this;
  if ( uiIndex >= 0xC0 || (v3 = this->m_aspInv[uiIndex].m_pObject) == 0 || (v5 = v3->m_pkInfo, v5->Type) )
  {
    result = 0;
  }
  else
  {
    Inventory::AddEquip(v2, v3, v5->Equip);
    v6 = v2->m_aspInv[uiIndex].m_pObject;
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
      v2->m_aspInv[uiIndex].m_pObject = 0;
    }
    result = 1;
  }
  return result;
}

//----- (0066F2C0) --------------------------------------------------------
bool __thiscall Inventory::UnEquip(Inventory *this, unsigned int uiIndex)
{
  Inventory *v2; // edi@1
  Item *v3; // edx@2
  bool result; // al@3
  unsigned int v5; // eax@5
  char *v6; // ecx@5
  Item *v7; // esi@9

  v2 = this;
  if ( uiIndex >= 0x1E || (v3 = this->m_aspEquip[uiIndex].m_pObject) == 0 || v3->m_pkInfo->Type )
  {
    result = 0;
  }
  else
  {
    v5 = 0;
    v6 = (char *)this->m_aspInv;
    while ( *(_DWORD *)v6 )
    {
      ++v5;
      v6 += 4;
      if ( v5 >= 0xC0 )
      {
        v5 = -1;
        break;
      }
    }
    Inventory::AddInv(v2, v3, v5);
    v7 = v2->m_aspEquip[uiIndex].m_pObject;
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
      v2->m_aspEquip[uiIndex].m_pObject = 0;
    }
    result = 1;
  }
  return result;
}

//----- (0066F350) --------------------------------------------------------
void __thiscall Inventory::ClearMiniHouseAllItemInv(Inventory *this)
{
  Inventory *v1; // esi@1

  v1 = this;
  Inventory::ClearMiniHouseTileAllItemInv(this);
  Inventory::ClearMiniHouseFurnitureItemInv(v1);
  Inventory::ClearMiniHouseAccessoryItemInv(v1);
  Inventory::ClearMiniHouseMinigameItemInv(v1);
}

//----- (0066F370) --------------------------------------------------------
unsigned int __thiscall Inventory::InitData(Inventory *this, PROTO_NC_CHAR_CLIENT_ITEM_CMD *pkItemData, char *pbyItemDataStartAddress)
{
  PROTO_NC_CHAR_CLIENT_ITEM_CMD *v3; // edi@1
  char v4; // al@1
  Inventory *v5; // esi@1
  int v6; // eax@12
  unsigned int result; // eax@13
  char *v8; // ebx@14
  Item *v9; // eax@16
  int v10; // ecx@20
  int v11; // edx@22
  NiD3DDefaultShader *v12; // [sp-8h] [bp-1Ch]@22
  int v13; // [sp+8h] [bp-Ch]@15
  ITEM_INVEN kInven; // [sp+Ch] [bp-8h]@16
  int uiBuffSize; // [sp+10h] [bp-4h]@12
  unsigned int uiTotalBuffSize; // [sp+1Ch] [bp+8h]@12

  v3 = pkItemData;
  v4 = pkItemData->box;
  v5 = this;
  this->m_bWaitingItemDropAck = 0;
  if ( pkItemData->flag._bf0 & 1 )
  {
    switch ( v4 )
    {
      case 9:
        Inventory::ClearInv(this);
        break;
      case 8:
        Inventory::ClearEquip(this);
        break;
      case 0xC:
        Inventory::ClearMiniHouseInv(this);
        Inventory::ClearMiniHouseEquip(v5);
        break;
      case 3:
        Inventory::ClearMiniHouseFurnitureItemInv(this);
        break;
      case 0xD:
        Inventory::ClearMiniHouseAccessoryItemInv(this);
        break;
      case 0xE:
        Inventory::ClearMiniHouseTileAllItemInv(this);
        break;
      case 0x10:
        Inventory::ClearMiniHouseMinigameItemInv(this);
        break;
      case 2:
        Inventory::ClearRewardInv(this);
        break;
      case 0xF:
        Inventory::ClearPremiumActionInv(this);
        break;
      default:
        break;
    }
  }
  v6 = pkItemData->numofitem;
  uiBuffSize = 0;
  uiTotalBuffSize = 3;
  if ( v6 )
  {
    v8 = (char *)&v3[1];
    if ( v6 )
    {
      v13 = v6;
      do
      {
        v9 = Item::Create(v8, &kInven, (unsigned int *)&uiBuffSize);
        if ( v9 )
        {
          uiTotalBuffSize += uiBuffSize;
          v8 += uiBuffSize;
          switch ( (unsigned int)kInven.Inven >> 10 )
          {
            case 7u:
              v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
              break;
            case 8u:
              v10 = (int)&v5->m_aspEquip[kInven.Inven & 0x3FF];
              goto LABEL_36;
            case 9u:
              v10 = (int)&v5->m_aspInv[kInven.Inven & 0x3FF];
              goto LABEL_36;
            case 0xCu:
              v11 = kInven.Inven & 0x3FF;
              v12 = (NiD3DDefaultShader *)v9;
              if ( (kInven.Inven & 0x3FFu) < 0xB )
                v10 = (int)&v5->m_aspMiniHouseEquip[v11];
              else
                v10 = (int)&v5->m_aspEquip[v11 + 19];
              goto LABEL_37;
            case 3u:
              if ( (kInven.Inven & 0x3FFu) < 0x62 )
              {
                v10 = (int)&v5->m_aspMiniHouseFurnitureItemInv[kInven.Inven & 0x3FF];
                if ( !*(_DWORD *)v10 )
                  goto LABEL_36;
              }
              break;
            case 0xDu:
              if ( (kInven.Inven & 0x3FFu) >= 0x62 )
                break;
              v10 = (int)&v5->m_aspMiniHouseAccessoryItemInv[kInven.Inven & 0x3FF];
              goto LABEL_36;
            case 0xEu:
              if ( (kInven.Inven & 0x3FFu) >= 0x62 )
                break;
              v10 = (int)&v5->m_aspMiniHouseTileAllItemInv[kInven.Inven & 0x3FF];
              goto LABEL_36;
            case 0x10u:
              if ( (kInven.Inven & 0x3FFu) >= 0x62 )
                break;
              v10 = (int)&v5->m_aspMiniHouseMinigameAllItemInv[kInven.Inven & 0x3FF];
              goto LABEL_36;
            case 2u:
              v10 = (int)&v5->m_aspRewardInv[kInven.Inven & 0x3FF];
              goto LABEL_36;
            case 0xFu:
              v10 = (int)&v5->m_aspPremiumActionInv[kInven.Inven & 0x3FF];
LABEL_36:
              v12 = (NiD3DDefaultShader *)v9;
LABEL_37:
              NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v10, v12);
              break;
            default:
              break;
          }
        }
        else
        {
          uiTotalBuffSize += uiBuffSize;
          v8 += uiBuffSize;
        }
        --v13;
      }
      while ( v13 );
    }
    result = uiTotalBuffSize;
  }
  else
  {
    result = 3;
  }
  return result;
}

//----- (0066F5E0) --------------------------------------------------------
bool __thiscall Inventory::CanIEquipHandedItem(Inventory *this, ItemInfo *pkInfo)
{
  bool result; // al@1

  result = 1;
  switch ( pkInfo->Class )
  {
    case 5:
      result = Inventory::CanIEquipWeapon(this, pkInfo);
      break;
    case 0x1A:
      result = Inventory::CanIEquipWeaponCostume(this, pkInfo);
      break;
    case 7:
      result = Inventory::CanIEquipShield(this, pkInfo);
      break;
    case 0x25:
      result = Inventory::CanIEquipShieldCostume(this, pkInfo);
      break;
    default:
      return result;
  }
  return result;
}

//----- (0066F670) --------------------------------------------------------
unsigned __int16 __thiscall Inventory::GetMiniHouseSkin(Inventory *this)
{
  Item *v1; // eax@1
  ItemViewInfo *v2; // eax@3
  unsigned __int16 *v3; // eax@4
  unsigned __int16 result; // ax@5

  v1 = this->m_aspMiniHouseEquip[0].m_pObject;
  if ( v1
    && v1->m_kStruct.itemid != -1
    && (v2 = v1->m_pkViewInfo) != 0
    && (v3 = (unsigned __int16 *)MiniHouseTable::GetByInxName(v2->InxName)) != 0 )
    result = *v3;
  else
    result = 0;
  return result;
}

//----- (0066F6B0) --------------------------------------------------------
char *__thiscall Inventory::GetPlayMiniHouseSound(Inventory *this)
{
  Item *v1; // eax@1
  ItemViewInfo *v2; // eax@3
  MiniHouse *v3; // eax@4
  int v4; // eax@5
  char *v5; // edx@5
  char v6; // cl@6

  v1 = this->m_aspMiniHouseEquip[0].m_pObject;
  if ( v1 )
  {
    if ( v1->m_kStruct.itemid != -1 )
    {
      v2 = v1->m_pkViewInfo;
      if ( v2 )
      {
        v3 = MiniHouseTable::GetByInxName(v2->InxName);
        if ( v3 )
        {
          v4 = (int)v3->DummyType;
          v5 = &soundName[-v4];
          do
          {
            v6 = *(_BYTE *)v4;
            v5[v4] = *(_BYTE *)v4;
            ++v4;
          }
          while ( v6 );
        }
      }
    }
  }
  return soundName;
}

//----- (0066F700) --------------------------------------------------------
bool __thiscall Inventory::IsFull(Inventory *this)
{
  Inventory *v1; // esi@1
  unsigned int v2; // ecx@1
  int v3; // eax@1
  int v4; // edx@2
  bool result; // al@6
  int dwValue; // [sp+4h] [bp-4h]@1

  v1 = this;
  ChargedItemList::GetTotalEffectingValue(EE_MOREINVENTORY, (unsigned int *)&dwValue);
  v2 = 0;
  v3 = 8 * (3 * dwValue + 6);
  if ( v3 )
  {
    v4 = (int)v1->m_aspInv;
    while ( v2 < 0xC0 && *(_DWORD *)v4 )
    {
      ++v2;
      v4 += 4;
      if ( v2 >= v3 )
        goto LABEL_6;
    }
    result = 0;
  }
  else
  {
LABEL_6:
    result = 1;
  }
  return result;
}

//----- (0066F760) --------------------------------------------------------
const unsigned int __thiscall Inventory::GetEmptySlotCount(Inventory *this)
{
  Inventory *v1; // esi@1
  const unsigned int result; // eax@1
  unsigned int v3; // edx@1
  int v4; // ecx@1
  int v5; // esi@2
  int dwValue; // [sp+4h] [bp-4h]@1

  v1 = this;
  dwValue = 0;
  ChargedItemList::GetTotalEffectingValue(EE_MOREINVENTORY, (unsigned int *)&dwValue);
  result = 0;
  v3 = 0;
  v4 = 8 * (3 * dwValue + 6);
  if ( v4 )
  {
    v5 = (int)v1->m_aspInv;
    do
    {
      if ( v3 >= 0xC0 || !*(_DWORD *)v5 )
        ++result;
      ++v3;
      v5 += 4;
    }
    while ( v3 < v4 );
  }
  return result;
}

//----- (0066F7B0) --------------------------------------------------------
void __thiscall Inventory::Inventory(Inventory *this)
{
  Inventory *v1; // esi@1

  v1 = this;
  _eh_vector_constructor_iterator_(
    this->m_aspInv,
    4u,
    192,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspEquip,
    4u,
    30,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspMiniHouseInv,
    4u,
    192,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspMiniHouseEquip,
    4u,
    11,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspMiniHouseFurnitureItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspMiniHouseAccessoryItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspMiniHouseTileAllItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspMiniHouseMinigameAllItemInv,
    4u,
    98,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspRewardInv,
    4u,
    192,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_aspPremiumActionInv,
    4u,
    42,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_bWaitingItemDropAck = 0;
  v1->m_uiRewardCount = 0;
  v1->m_uiPremiumActionCount = 0;
}

//----- (0066F940) --------------------------------------------------------
void __thiscall Inventory::Clear(Inventory *this)
{
  Inventory *v1; // esi@1

  v1 = this;
  Inventory::ClearInv(this);
  Inventory::ClearEquip(v1);
  Inventory::ClearRewardInv(v1);
  Inventory::ClearMiniHouseInv(v1);
  Inventory::ClearMiniHouseEquip(v1);
  Inventory::ClearMiniHouseInv(v1);
  Inventory::ClearMiniHouseEquip(v1);
  Inventory::ClearMiniHouseFurnitureItemInv(v1);
  Inventory::ClearMiniHouseAccessoryItemInv(v1);
  Inventory::ClearMiniHouseTileAllItemInv(v1);
  Inventory::ClearPremiumActionInv(v1);
}

//----- (0066F990) --------------------------------------------------------
bool __thiscall Inventory::FindMysteryVault(Inventory *this, ITEM_INVEN *rkInven)
{
  Inventory *v2; // esi@1
  unsigned int v3; // ebx@1
  int v4; // esi@1
  int v5; // edi@4
  int v6; // esi@4
  int v7; // edx@6
  int v8; // eax@7
  const char *v9; // ecx@8
  int v10; // eax@8
  int v11; // esi@8
  char v12; // dl@9
  const char *v13; // edx@13
  unsigned int v14; // esi@15
  unsigned int v15; // edi@15
  unsigned int v16; // ecx@15
  unsigned int v17; // ebx@17
  const char *v18; // eax@17
  int v19; // eax@19
  bool v20; // zf@19
  signed int v21; // eax@21
  int v23; // [sp+4h] [bp-50h]@1
  signed int i; // [sp+8h] [bp-4Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMV_Name; // [sp+Ch] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strItemName; // [sp+28h] [bp-2Ch]@8
  unsigned int v27; // [sp+44h] [bp-10h]@1
  int v28; // [sp+50h] [bp-4h]@1
  int v29; // [sp+54h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v2 = this;
  v3 = 0;
  strMV_Name.baseclass_0._Myres = 15;
  strMV_Name.baseclass_0._Mysize = 0;
  strMV_Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strMV_Name, "MVault", 6u);
  v4 = (int)v2->m_aspInv;
  v28 = 0;
  i = 0;
  v23 = v4;
  while ( 1 )
  {
    if ( *(_DWORD *)v4 == v3
      || (v5 = *(_WORD *)(*(_DWORD *)v4 + 8),
          v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
          !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v5))
      || (unsigned __int16)v5 > *(_WORD *)(v6 + 200)
      || (v7 = *(_DWORD *)(v6 + 196), *(_DWORD *)(v7 + 4 * v5) == v3)
      || (v8 = *(_DWORD *)(v7 + 4 * v5), v8 == v3) )
      goto LABEL_27;
    v9 = (const char *)(v8 + 2);
    v10 = v8 + 2;
    strItemName.baseclass_0._Myres = 15;
    strItemName.baseclass_0._Mysize = v3;
    strItemName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v11 = v10 + 1;
    do
      v12 = *(_BYTE *)v10++;
    while ( v12 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strItemName, v9, v10 - v11);
    LOBYTE(v28) = 1;
    if ( strMV_Name.baseclass_0._Mysize > strItemName.baseclass_0._Mysize )
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
        &strItemName,
        strMV_Name.baseclass_0._Mysize - strItemName.baseclass_0._Mysize,
        v3);
    else
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
        &strItemName,
        strMV_Name.baseclass_0._Mysize,
        0xFFFFFFFFu);
    v13 = *(const char **)&strMV_Name;
    if ( strMV_Name.baseclass_0._Myres < 0x10 )
      v13 = (const char *)&strMV_Name;
    v14 = strItemName.baseclass_0._Mysize;
    v15 = strMV_Name.baseclass_0._Mysize;
    v16 = strItemName.baseclass_0._Mysize;
    if ( strItemName.baseclass_0._Mysize >= strMV_Name.baseclass_0._Mysize )
      v16 = strMV_Name.baseclass_0._Mysize;
    v17 = strItemName.baseclass_0._Myres;
    v18 = *(const char **)&strItemName;
    if ( strItemName.baseclass_0._Myres < 0x10 )
      v18 = (const char *)&strItemName;
    v19 = std::char_traits<char>::compare(v18, v13, v16);
    v20 = v19 == 0;
    if ( !v19 )
    {
      if ( v14 >= v15 )
        v21 = v14 != v15;
      else
        v21 = -1;
      v20 = v21 == 0;
    }
    if ( v20 )
      break;
    LOBYTE(v28) = v20;
    if ( v17 >= 0x10 )
      operator delete(*(void **)&strItemName);
LABEL_27:
    v4 = v23 + 4;
    ++i;
    v23 += 4;
    if ( i >= 192 )
    {
      if ( strMV_Name.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strMV_Name);
      return 0;
    }
    v3 = 0;
  }
  rkInven->Inven = i & 0x3FF | 0x2400;
  if ( v17 >= 0x10 )
    operator delete(*(void **)&strItemName);
  strItemName.baseclass_0._Myres = 15;
  strItemName.baseclass_0._Mysize = 0;
  strItemName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( strMV_Name.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strMV_Name);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0066FBA0) --------------------------------------------------------
void __thiscall Inventory::AddInv(Inventory *this, Item *pkItem, unsigned int uiIndex)
{
  Inventory *v3; // ebx@1
  Item *v4; // esi@1

  v3 = this;
  v4 = this->m_aspInv[uiIndex].m_pObject;
  if ( v4 != pkItem )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3->m_aspInv[uiIndex].m_pObject = pkItem;
    if ( pkItem )
      InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
}

//----- (0066FC00) --------------------------------------------------------
void __thiscall Inventory::AddMiniHouseInv(Inventory *this, Item *pkItem, unsigned int uiIndex)
{
  Inventory *v3; // ebx@1
  Item *v4; // esi@1

  v3 = this;
  v4 = this->m_aspMiniHouseInv[uiIndex].m_pObject;
  if ( v4 != pkItem )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3->m_aspMiniHouseInv[uiIndex].m_pObject = pkItem;
    if ( pkItem )
      InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
}

//----- (0066FC60) --------------------------------------------------------
void __thiscall Inventory::AddMiniHouseEquip(Inventory *this, Item *pkItem, unsigned int uiIndex)
{
  Inventory *v3; // ebx@1
  Item *v4; // esi@1

  v3 = this;
  v4 = this->m_aspMiniHouseEquip[uiIndex].m_pObject;
  if ( v4 != pkItem )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3->m_aspMiniHouseEquip[uiIndex].m_pObject = pkItem;
    if ( pkItem )
      InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
}

//----- (0066FCC0) --------------------------------------------------------
void __thiscall Inventory::AddPremiumActionInv(Inventory *this, Item *pkItem, unsigned int uiIndex)
{
  Inventory *v3; // esi@1
  Item *v4; // edi@1

  v3 = this;
  v4 = this->m_aspPremiumActionInv[uiIndex].m_pObject;
  if ( v4 != pkItem )
  {
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3->m_aspPremiumActionInv[uiIndex].m_pObject = pkItem;
    if ( pkItem )
      InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
  }
  ++v3->m_uiPremiumActionCount;
}

//----- (0066FD20) --------------------------------------------------------
SHINE_PUT_ON_BELONGED_ITEM __thiscall Item::GetPutOnBelongState(Item *this)
{
  Item *v1; // esi@1
  SHINE_PUT_ON_BELONGED_ITEM result; // eax@2

  v1 = this;
  switch ( (unsigned __int8)((int (*)(void))this->baseclass_0.vfptr[1].__vecDelDtor)() )
  {
    case 5u:
    case 6u:
    case 7u:
    case 8u:
      result = *(unsigned int *)((char *)&v1->m_kStruct.itemattr.dlot.lot + 3);
      break;
    case 4u:
    case 0xAu:
      result = v1->m_kStruct.itemattr.amulet.IsPutOnBelonged;
      break;
    case 0x17u:
      result = *(_DWORD *)&v1->m_kStruct.itemattr.amulet.upgrade;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (0066FD80) --------------------------------------------------------
char __thiscall ItemWeapon::GetGemResCount(ItemWeapon *this, char SoketIdx)
{
  char result; // al@2

  if ( LOBYTE(this->baseclass_0.m_kStruct.itemattr.amulet.option.optionlist[6].itemoption_value) <= SoketIdx )
    result = 0;
  else
    result = *(&this->baseclass_0.m_kStruct.itemattr.amulet.option.optionlist[4].itemoption_type
             + 2 * (unsigned __int8)SoketIdx
             + (unsigned __int8)SoketIdx);
  return result;
}

//----- (0066FDA0) --------------------------------------------------------
void __thiscall ItemWeapon::SetGemResCount(ItemWeapon *this, char SoketIdx, char Amount)
{
  if ( LOBYTE(this->baseclass_0.m_kStruct.itemattr.amulet.option.optionlist[6].itemoption_value) > SoketIdx )
    *(&this->baseclass_0.m_kStruct.itemattr.amulet.option.optionlist[4].itemoption_type
    + 2 * (unsigned __int8)SoketIdx
    + (unsigned __int8)SoketIdx) = Amount;
}

//----- (0066FDC0) --------------------------------------------------------
void __thiscall Item::Item(Item *this, SHINE_ITEM_STRUCT *kItemStruct)
{
  Item *v2; // ebx@1
  int v3; // esi@1
  int v4; // edi@1
  ItemInfo *v5; // eax@2
  int v6; // ecx@5
  int v7; // edi@8
  int v8; // esi@8
  ItemViewInfo *v9; // eax@9
  int v10; // edx@11

  v2 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&Item::_vftable_;
  memcpy(&v2->m_kStruct, kItemStruct, sizeof(v2->m_kStruct));
  v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v4 = v2->m_kStruct.itemid;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          v2->m_kStruct.itemid) )
  {
    if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
    {
      v6 = *(_DWORD *)(v3 + 196);
      if ( *(_DWORD *)(v6 + 4 * v4) )
        v5 = *(ItemInfo **)(v6 + 4 * v4);
      else
        v5 = 0;
    }
    else
    {
      v5 = 0;
    }
  }
  else
  {
    v5 = 0;
  }
  v7 = v2->m_kStruct.itemid;
  v2->m_pkInfo = v5;
  v8 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                        + 16))(
                          ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                          v7)
    && (unsigned __int16)v7 <= *(_WORD *)(v8 + 200)
    && (v10 = *(_DWORD *)(v8 + 196), *(_DWORD *)(v10 + 4 * v7)) )
    v9 = *(ItemViewInfo **)(v10 + 4 * v7);
  else
    v9 = 0;
  v2->m_pkViewInfo = v9;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C51EC: using guessed type int (__thiscall *Item___vftable_)(void *p, char);
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (0066FEB0) --------------------------------------------------------
Item *__cdecl Item::Create(char *pbyBuff, unsigned int *puiBuffSize)
{
  int v2; // ebx@1
  int v4; // edi@5
  int v5; // edx@7
  int v6; // eax@8
  int v7; // eax@9
  unsigned int v8; // edi@9
  char *v9; // esi@9
  Item *v10; // ebx@9
  void *v11; // eax@10
  void *v12; // esi@10
  void *v13; // eax@14
  void *v14; // eax@16
  void *v15; // eax@20
  void *v16; // eax@22
  void *v17; // esi@22
  void *v18; // ecx@23
  void *v19; // eax@27
  void *v20; // eax@29
  void *v21; // eax@33
  int v22; // eax@35
  void *v23; // eax@35
  void *v24; // eax@37
  void *v25; // eax@39
  void *v26; // eax@43
  void *v27; // eax@45
  void *v28; // eax@49
  void *v29; // eax@51
  int v30; // ecx@53
  int v31; // edx@53
  void *v32; // eax@55
  void *v33; // eax@59
  void *v34; // eax@61
  void *v35; // eax@65
  void *v36; // eax@67
  void *v37; // eax@71
  void *v38; // eax@73
  int v39; // eax@75
  char v40; // cl@75
  void *v41; // eax@75
  char v42; // cl@77
  void *v43; // eax@77
  void *v44; // eax@79
  void *v45; // eax@83
  void *v46; // esi@85
  void *v47; // eax@87
  unsigned int v48; // [sp-10h] [bp-90h]@1
  __int16 kItemStruct; // [sp+8h] [bp-78h]@9
  char dst[4]; // [sp+Ah] [bp-76h]@10
  int v51; // [sp+Eh] [bp-72h]@35
  int v52; // [sp+12h] [bp-6Eh]@53
  __int16 v53; // [sp+22h] [bp-5Eh]@83
  unsigned int v54; // [sp+70h] [bp-10h]@1
  int v55; // [sp+7Ch] [bp-4h]@10
  int v56; // [sp+80h] [bp+0h]@1

  v54 = (unsigned int)&v56 ^ __security_cookie;
  v48 = (unsigned int)&v56 ^ __security_cookie;
  v2 = *(_WORD *)pbyBuff;
  if ( (_WORD)v2 == -1 )
  {
    if ( puiBuffSize )
      *puiBuffSize = 2;
    return 0;
  }
  v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                           ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                           v2)
    || (unsigned __int16)v2 > *(_WORD *)(v4 + 200)
    || (v5 = *(_DWORD *)(v4 + 196), !*(_DWORD *)(v5 + 4 * v2))
    || (v6 = *(_DWORD *)(v5 + 4 * v2)) == 0 )
    return 0;
  v7 = *(_DWORD *)(v6 + 102);
  v8 = 2;
  kItemStruct = v2;
  v9 = pbyBuff + 2;
  v10 = 0;
  switch ( v7 )
  {
    case 0:
      dst[0] = *v9;
      v8 = 3;
      v11 = operator new(0x78u);
      v12 = v11;
      v55 = 0;
      if ( !v11 )
        goto LABEL_89;
      Item::Item((Item *)v11, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemByteLot::_vftable_;
      goto LABEL_90;
    case 1:
      *(_WORD *)dst = *(_WORD *)v9;
      v8 = 4;
      v12 = operator new(0x78u);
      v55 = 1;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemWordLot::_vftable_;
      goto LABEL_90;
    case 2:
      *(_DWORD *)dst = *(_DWORD *)v9;
      v8 = 6;
      v13 = operator new(0x78u);
      v12 = v13;
      v55 = 2;
      if ( !v13 )
        goto LABEL_89;
      Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemDwrdLot::_vftable_;
      goto LABEL_90;
    case 3:
      *(_WORD *)dst = *(_WORD *)v9;
      v8 = 4;
      v14 = operator new(0x78u);
      v12 = v14;
      v55 = 3;
      if ( !v14 )
        goto LABEL_89;
      Item::Item((Item *)v14, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemQuest::_vftable_;
      goto LABEL_90;
    case 4:
      v8 = ItemAmulet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v12 = operator new(0x78u);
      v55 = 4;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemAmulet::_vftable_;
      goto LABEL_90;
    case 5:
      v8 = ItemWeapon::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v15 = operator new(0x78u);
      v12 = v15;
      v55 = 5;
      if ( !v15 )
        goto LABEL_89;
      Item::Item((Item *)v15, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemWeapon::_vftable_;
      goto LABEL_90;
    case 26:
      *(_DWORD *)dst = *(_DWORD *)v9;
      v8 = 6;
      v16 = operator new(0x7Cu);
      v17 = v16;
      v55 = 6;
      if ( !v16 )
        goto LABEL_24;
      Item::Item((Item *)v16, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v17 = &ItemCostumeWeapon::_vftable_;
      v18 = v17;
      goto LABEL_25;
    case 6:
      v8 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v19 = operator new(0x78u);
      v12 = v19;
      v55 = 7;
      if ( !v19 )
        goto LABEL_89;
      Item::Item((Item *)v19, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemArmor::_vftable_;
      goto LABEL_90;
    case 7:
      v8 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v20 = operator new(0x78u);
      v12 = v20;
      v55 = 8;
      if ( !v20 )
        goto LABEL_89;
      Item::Item((Item *)v20, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemShield::_vftable_;
      goto LABEL_90;
    case 8:
      v8 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v12 = operator new(0x78u);
      v55 = 9;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemBoot::_vftable_;
      goto LABEL_90;
    case 9:
      memcpy(dst, v9, 0x24u);
      v8 = 38;
      v21 = operator new(0x78u);
      v12 = v21;
      v55 = 10;
      if ( !v21 )
        goto LABEL_89;
      Item::Item((Item *)v21, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemFurniture::_vftable_;
      goto LABEL_90;
    case 10:
      v22 = *(_DWORD *)(pbyBuff + 6);
      *(_DWORD *)dst = *(_DWORD *)v9;
      v51 = v22;
      v8 = 10;
      v23 = operator new(0x78u);
      v12 = v23;
      v55 = 11;
      if ( !v23 )
        goto LABEL_89;
      Item::Item((Item *)v23, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemDecoration::_vftable_;
      goto LABEL_90;
    case 11:
      v8 = 3;
      v24 = operator new(0x78u);
      v12 = v24;
      v55 = 12;
      if ( !v24 )
        goto LABEL_89;
      Item::Item((Item *)v24, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemSkillScroll::_vftable_;
      goto LABEL_90;
    case 12:
      dst[0] = *v9;
      v8 = 3;
      v25 = operator new(0x78u);
      v12 = v25;
      v55 = 13;
      if ( !v25 )
        goto LABEL_89;
      Item::Item((Item *)v25, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemRecallScroll::_vftable_;
      goto LABEL_90;
    case 14:
      dst[0] = *v9;
      v8 = 3;
      v12 = operator new(0x78u);
      v55 = 14;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemUpgradeSource::_vftable_;
      goto LABEL_90;
    case 13:
      dst[0] = *v9;
      memcpy(&dst[1], pbyBuff + 3, 10 * (unsigned __int8)dst[0]);
      v8 = 10 * (unsigned __int8)dst[0] + 3;
      v26 = operator new(0x78u);
      v12 = v26;
      v55 = 15;
      if ( !v26 )
        goto LABEL_89;
      Item::Item((Item *)v26, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemBind::_vftable_;
      goto LABEL_90;
    case 15:
      v8 = ItemChest::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v27 = operator new(0x78u);
      v12 = v27;
      v55 = 16;
      if ( !v27 )
        goto LABEL_89;
      Item::Item((Item *)v27, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemChest::_vftable_;
      goto LABEL_90;
    case 35:
      dst[0] = *v9;
      v8 = 3;
      v12 = operator new(0x78u);
      v55 = 17;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemEnchant::_vftable_;
      goto LABEL_90;
    case 16:
      v8 = 3;
      v28 = operator new(0x78u);
      v12 = v28;
      v55 = 18;
      if ( !v28 )
        goto LABEL_89;
      Item::Item((Item *)v28, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemWeaponTitleLicense::_vftable_;
      goto LABEL_90;
    case 29:
      v8 = 3;
      v29 = operator new(0x78u);
      v12 = v29;
      v55 = 19;
      if ( !v29 )
        goto LABEL_89;
      Item::Item((Item *)v29, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemGBCoin::_vftable_;
      goto LABEL_90;
    case 28:
      v30 = *(_DWORD *)(pbyBuff + 6);
      v31 = *(_DWORD *)(pbyBuff + 10);
      *(_DWORD *)dst = *(_DWORD *)v9;
      v51 = v30;
      v52 = v31;
      v8 = 14;
      v12 = operator new(0x78u);
      v55 = 20;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemCapsule::_vftable_;
      goto LABEL_90;
    case 17:
      v32 = operator new(0x78u);
      v12 = v32;
      v55 = 21;
      if ( !v32 )
        goto LABEL_89;
      Item::Item((Item *)v32, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemKQ::_vftable_;
      goto LABEL_90;
    case 18:
      *(_DWORD *)dst = *(_DWORD *)v9;
      v8 = 6;
      v12 = operator new(0x78u);
      v55 = 22;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemHouseSkin::_vftable_;
      goto LABEL_90;
    case 19:
      dst[0] = *v9;
      v8 = 3;
      v33 = operator new(0x78u);
      v12 = v33;
      v55 = 23;
      if ( !v33 )
        goto LABEL_89;
      Item::Item((Item *)v33, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemUpRed::_vftable_;
      goto LABEL_90;
    case 20:
      dst[0] = *v9;
      v8 = 3;
      v34 = operator new(0x78u);
      v12 = v34;
      v55 = 24;
      if ( !v34 )
        goto LABEL_89;
      Item::Item((Item *)v34, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemUpBlue::_vftable_;
      goto LABEL_90;
    case 21:
      *(_WORD *)dst = *(_WORD *)v9;
      v8 = 4;
      v12 = operator new(0x78u);
      v55 = 25;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemKQStep::_vftable_;
      goto LABEL_90;
    case 22:
      dst[0] = *v9;
      v8 = 3;
      v35 = operator new(0x78u);
      v12 = v35;
      v55 = 26;
      if ( !v35 )
        goto LABEL_89;
      Item::Item((Item *)v35, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemFeed::_vftable_;
      goto LABEL_90;
    case 23:
      v8 = ItemRiding::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v36 = operator new(0x78u);
      v12 = v36;
      v55 = 27;
      if ( !v36 )
        goto LABEL_89;
      Item::Item((Item *)v36, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemRiding::_vftable_;
      goto LABEL_90;
    case 24:
      *(_DWORD *)dst = *(_DWORD *)v9;
      v8 = 6;
      v12 = operator new(0x78u);
      v55 = 28;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemAmount::_vftable_;
      goto LABEL_90;
    case 25:
      dst[0] = *v9;
      v8 = 3;
      v37 = operator new(0x78u);
      v12 = v37;
      v55 = 29;
      if ( !v37 )
        goto LABEL_89;
      Item::Item((Item *)v37, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemUpGold::_vftable_;
      goto LABEL_90;
    case 27:
      *(_DWORD *)dst = *(_DWORD *)v9;
      v8 = 6;
      v38 = operator new(0x78u);
      v12 = v38;
      v55 = 30;
      if ( !v38 )
        goto LABEL_89;
      Item::Item((Item *)v38, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemChargedAction::_vftable_;
      goto LABEL_90;
    case 30:
      v39 = *(_DWORD *)(pbyBuff + 6);
      v40 = pbyBuff[10];
      *(_DWORD *)dst = *(_DWORD *)v9;
      v51 = v39;
      LOBYTE(v52) = v40;
      v8 = 11;
      v41 = operator new(0x78u);
      v12 = v41;
      v55 = 31;
      if ( !v41 )
        goto LABEL_89;
      Item::Item((Item *)v41, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemCollectCloseCard::_vftable_;
      goto LABEL_90;
    case 31:
      v42 = pbyBuff[6];
      *(_DWORD *)dst = *(_DWORD *)v9;
      LOBYTE(v51) = v42;
      v8 = 7;
      v43 = operator new(0x78u);
      v12 = v43;
      v55 = 32;
      if ( !v43 )
        goto LABEL_89;
      Item::Item((Item *)v43, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemCollectOpenCard::_vftable_;
      goto LABEL_90;
    case 33:
      dst[0] = *v9;
      v8 = 3;
      v44 = operator new(0x78u);
      v12 = v44;
      v55 = 33;
      if ( !v44 )
        goto LABEL_89;
      Item::Item((Item *)v44, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemNoEffect::_vftable_;
      goto LABEL_90;
    case 34:
      *(_WORD *)dst = *(_WORD *)v9;
      v8 = 4;
      v12 = operator new(0x78u);
      v55 = 34;
      if ( !v12 )
        goto LABEL_89;
      Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemActiveskill::_vftable_;
      goto LABEL_90;
    case 36:
      memcpy(dst, v9, 0x18u);
      v53 = *((_WORD *)pbyBuff + 13);
      v8 = 28;
      v45 = operator new(0x78u);
      v12 = v45;
      v55 = 35;
      if ( !v45 )
        goto LABEL_89;
      Item::Item((Item *)v45, (SHINE_ITEM_STRUCT *)&kItemStruct);
      *(_DWORD *)v12 = &ItemPet::_vftable_;
      goto LABEL_90;
    case 37:
      *(_DWORD *)dst = *(_DWORD *)v9;
      v8 = 6;
      v46 = operator new(0x7Cu);
      v55 = 36;
      if ( v46 )
      {
        Item::Item((Item *)v46, (SHINE_ITEM_STRUCT *)&kItemStruct);
        *(_DWORD *)v46 = &ItemCostumeShield::_vftable_;
        v18 = v46;
      }
      else
      {
LABEL_24:
        v18 = 0;
      }
LABEL_25:
      v55 = -1;
      v10 = (Item *)v18;
      if ( v18 )
        (*(void (__cdecl **)(unsigned int))(*(_DWORD *)v18 + 88))(v48);
      break;
    case 38:
      v8 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, v9) + 2;
      v47 = operator new(0x78u);
      v12 = v47;
      v55 = 37;
      if ( v47 )
      {
        Item::Item((Item *)v47, (SHINE_ITEM_STRUCT *)&kItemStruct);
        *(_DWORD *)v12 = &ItemBracelet::_vftable_;
      }
      else
      {
LABEL_89:
        v12 = 0;
      }
LABEL_90:
      v10 = (Item *)v12;
      break;
    default:
      break;
  }
  if ( puiBuffSize )
    *puiBuffSize = v8;
  return v10;
}
// 9C523C: using guessed type int (__thiscall *ItemByteLot___vftable_)(void *p, char);
// 9C528C: using guessed type int (__thiscall *ItemWordLot___vftable_)(void *p, char);
// 9C52DC: using guessed type int (__thiscall *ItemDwrdLot___vftable_)(void *p, char);
// 9C532C: using guessed type int (__thiscall *ItemQuest___vftable_)(void *p, char);
// 9C537C: using guessed type int (__thiscall *ItemAmulet___vftable_)(void *p, char);
// 9C53CC: using guessed type int (__thiscall *ItemWeapon___vftable_)(void *p, char);
// 9C5424: using guessed type int (__thiscall *ItemCostumeWeapon___vftable_)(void *p, char);
// 9C5484: using guessed type int (__thiscall *ItemArmor___vftable_)(void *p, char);
// 9C54D4: using guessed type int (__thiscall *ItemShield___vftable_)(void *p, char);
// 9C5524: using guessed type int (__thiscall *ItemCostumeShield___vftable_)(void *p, char);
// 9C5584: using guessed type int (__thiscall *ItemBoot___vftable_)(void *p, char);
// 9C55D4: using guessed type int (__thiscall *ItemFurniture___vftable_)(void *p, char);
// 9C5624: using guessed type int (__thiscall *ItemDecoration___vftable_)(void *p, char);
// 9C5674: using guessed type int (__thiscall *ItemSkillScroll___vftable_)(void *p, char);
// 9C56C4: using guessed type int (__thiscall *ItemRecallScroll___vftable_)(void *p, char);
// 9C5714: using guessed type int (__thiscall *ItemUpgradeSource___vftable_)(void *p, char);
// 9C5764: using guessed type int (__thiscall *ItemBind___vftable_)(void *p, char);
// 9C57B4: using guessed type int (__thiscall *ItemChest___vftable_)(void *p, char);
// 9C5804: using guessed type int (__thiscall *ItemGBCoin___vftable_)(void *p, char);
// 9C5854: using guessed type int (__thiscall *ItemCapsule___vftable_)(void *p, char);
// 9C58AC: using guessed type int (__thiscall *ItemEnchant___vftable_)(void *p, char);
// 9C58FC: using guessed type int (__thiscall *ItemWeaponTitleLicense___vftable_)(void *p, char);
// 9C594C: using guessed type int (__thiscall *ItemKQ___vftable_)(void *p, char);
// 9C599C: using guessed type int (__thiscall *ItemHouseSkin___vftable_)(void *p, char);
// 9C59EC: using guessed type int (__thiscall *ItemUpRed___vftable_)(void *p, char);
// 9C5A3C: using guessed type int (__thiscall *ItemUpBlue___vftable_)(void *p, char);
// 9C5A8C: using guessed type int (__thiscall *ItemKQStep___vftable_)(void *p, char);
// 9C5ADC: using guessed type int (__thiscall *ItemFeed___vftable_)(void *p, char);
// 9C5B2C: using guessed type int (__thiscall *ItemRiding___vftable_)(void *p, char);
// 9C5B7C: using guessed type int (__thiscall *ItemAmount___vftable_)(void *p, char);
// 9C5BCC: using guessed type int (__thiscall *ItemUpGold___vftable_)(void *p, char);
// 9C5C1C: using guessed type int (__thiscall *ItemChargedAction___vftable_)(void *p, char);
// 9C5C6C: using guessed type int (__thiscall *ItemCollectCloseCard___vftable_)(void *p, char);
// 9C5CBC: using guessed type int (__thiscall *ItemCollectOpenCard___vftable_)(void *p, char);
// 9C5D0C: using guessed type int (__thiscall *ItemNoEffect___vftable_)(void *p, char);
// 9C5D5C: using guessed type int (__thiscall *ItemActiveskill___vftable_)(void *p, char);
// 9C5DAC: using guessed type int (__thiscall *ItemPet___vftable_)(void *p, char);
// 9C5E0C: using guessed type int (__thiscall *ItemBracelet___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006709B0) --------------------------------------------------------
Item *__cdecl Item::Create(SHINE_ITEM_STRUCT *kStruct)
{
  int v1; // ebx@1
  Item *result; // eax@2
  int v3; // esi@3
  int v4; // edx@5
  int v5; // eax@6
  Item *v6; // esi@7
  void *v7; // eax@8
  Item *v8; // esi@8
  void *v9; // eax@10
  Item *v10; // esi@10
  void *v11; // eax@12
  Item *v12; // esi@12
  void *v13; // eax@14
  Item *v14; // esi@14
  void *v15; // eax@16
  Item *v16; // esi@16
  void *v17; // eax@18
  Item *v18; // esi@18
  void *v19; // eax@20
  void *v20; // esi@20
  Item *v21; // ecx@21
  void *v22; // eax@25
  Item *v23; // esi@25
  void *v24; // eax@27
  Item *v25; // esi@27
  void *v26; // eax@29
  Item *v27; // esi@29
  void *v28; // eax@31
  Item *v29; // esi@31
  void *v30; // eax@33
  Item *v31; // esi@33
  void *v32; // eax@35
  Item *v33; // esi@35
  void *v34; // eax@37
  Item *v35; // esi@37
  void *v36; // eax@39
  Item *v37; // esi@39
  void *v38; // eax@41
  Item *v39; // esi@41
  void *v40; // eax@43
  Item *v41; // esi@43
  void *v42; // eax@45
  Item *v43; // esi@45
  void *v44; // eax@47
  Item *v45; // esi@47
  void *v46; // eax@49
  Item *v47; // esi@49
  void *v48; // eax@51
  Item *v49; // esi@51
  void *v50; // eax@53
  Item *v51; // esi@53
  void *v52; // eax@55
  Item *v53; // esi@55
  void *v54; // eax@57
  Item *v55; // esi@57
  void *v56; // eax@59
  Item *v57; // esi@59
  void *v58; // eax@61
  Item *v59; // esi@61
  void *v60; // eax@63
  Item *v61; // esi@63
  void *v62; // eax@65
  Item *v63; // esi@65
  void *v64; // eax@67
  Item *v65; // esi@67
  void *v66; // eax@69
  Item *v67; // esi@69
  void *v68; // eax@71
  Item *v69; // esi@71
  void *v70; // eax@73
  Item *v71; // esi@73
  void *v72; // eax@75
  Item *v73; // esi@75
  void *v74; // eax@77
  Item *v75; // esi@77
  void *v76; // eax@79
  Item *v77; // esi@79
  void *v78; // eax@81
  Item *v79; // esi@81
  void *v80; // eax@83
  void *v81; // esi@83
  void *v82; // eax@85
  Item *v83; // esi@85

  v1 = kStruct->itemid;
  if ( (_WORD)v1 != -1
    && (v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
        (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                           ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                           kStruct->itemid))
    && (unsigned __int16)v1 <= *(_WORD *)(v3 + 200)
    && (v4 = *(_DWORD *)(v3 + 196), *(_DWORD *)(v4 + 4 * v1))
    && (v5 = *(_DWORD *)(v4 + 4 * v1)) != 0 )
  {
    v6 = 0;
    switch ( *(_DWORD *)(v5 + 102) )
    {
      case 0:
        v7 = operator new(0x78u);
        v8 = (Item *)v7;
        if ( !v7 )
          goto LABEL_87;
        Item::Item((Item *)v7, kStruct);
        v8->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemByteLot::_vftable_;
        return v8;
      case 1:
        v9 = operator new(0x78u);
        v10 = (Item *)v9;
        if ( !v9 )
          goto LABEL_87;
        Item::Item((Item *)v9, kStruct);
        v10->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemWordLot::_vftable_;
        return v10;
      case 2:
        v11 = operator new(0x78u);
        v12 = (Item *)v11;
        if ( !v11 )
          goto LABEL_87;
        Item::Item((Item *)v11, kStruct);
        v12->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemDwrdLot::_vftable_;
        return v12;
      case 3:
        v13 = operator new(0x78u);
        v14 = (Item *)v13;
        if ( !v13 )
          goto LABEL_87;
        Item::Item((Item *)v13, kStruct);
        v14->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemQuest::_vftable_;
        return v14;
      case 4:
        v15 = operator new(0x78u);
        v16 = (Item *)v15;
        if ( !v15 )
          goto LABEL_87;
        Item::Item((Item *)v15, kStruct);
        v16->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemAmulet::_vftable_;
        return v16;
      case 5:
        v17 = operator new(0x78u);
        v18 = (Item *)v17;
        if ( !v17 )
          goto LABEL_87;
        Item::Item((Item *)v17, kStruct);
        v18->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemWeapon::_vftable_;
        return v18;
      case 0x1A:
        v19 = operator new(0x7Cu);
        v20 = v19;
        if ( !v19 )
          goto LABEL_22;
        Item::Item((Item *)v19, kStruct);
        *(_DWORD *)v20 = &ItemCostumeWeapon::_vftable_;
        v21 = (Item *)v20;
        goto LABEL_23;
      case 6:
        v22 = operator new(0x78u);
        v23 = (Item *)v22;
        if ( !v22 )
          goto LABEL_87;
        Item::Item((Item *)v22, kStruct);
        v23->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemArmor::_vftable_;
        return v23;
      case 7:
        v24 = operator new(0x78u);
        v25 = (Item *)v24;
        if ( !v24 )
          goto LABEL_87;
        Item::Item((Item *)v24, kStruct);
        v25->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemShield::_vftable_;
        return v25;
      case 8:
        v26 = operator new(0x78u);
        v27 = (Item *)v26;
        if ( !v26 )
          goto LABEL_87;
        Item::Item((Item *)v26, kStruct);
        v27->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemBoot::_vftable_;
        return v27;
      case 9:
        v28 = operator new(0x78u);
        v29 = (Item *)v28;
        if ( !v28 )
          goto LABEL_87;
        Item::Item((Item *)v28, kStruct);
        v29->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemFurniture::_vftable_;
        return v29;
      case 0xA:
        v30 = operator new(0x78u);
        v31 = (Item *)v30;
        if ( !v30 )
          goto LABEL_87;
        Item::Item((Item *)v30, kStruct);
        v31->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemDecoration::_vftable_;
        return v31;
      case 0xB:
        v32 = operator new(0x78u);
        v33 = (Item *)v32;
        if ( !v32 )
          goto LABEL_87;
        Item::Item((Item *)v32, kStruct);
        v33->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemSkillScroll::_vftable_;
        return v33;
      case 0xC:
        v34 = operator new(0x78u);
        v35 = (Item *)v34;
        if ( !v34 )
          goto LABEL_87;
        Item::Item((Item *)v34, kStruct);
        v35->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRecallScroll::_vftable_;
        return v35;
      case 0xE:
        v36 = operator new(0x78u);
        v37 = (Item *)v36;
        if ( !v36 )
          goto LABEL_87;
        Item::Item((Item *)v36, kStruct);
        v37->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpgradeSource::_vftable_;
        return v37;
      case 0xD:
        v38 = operator new(0x78u);
        v39 = (Item *)v38;
        if ( !v38 )
          goto LABEL_87;
        Item::Item((Item *)v38, kStruct);
        v39->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemBind::_vftable_;
        return v39;
      case 0xF:
        v40 = operator new(0x78u);
        v41 = (Item *)v40;
        if ( !v40 )
          goto LABEL_87;
        Item::Item((Item *)v40, kStruct);
        v41->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemChest::_vftable_;
        return v41;
      case 0x23:
        v42 = operator new(0x78u);
        v43 = (Item *)v42;
        if ( !v42 )
          goto LABEL_87;
        Item::Item((Item *)v42, kStruct);
        v43->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemEnchant::_vftable_;
        return v43;
      case 0x10:
        v44 = operator new(0x78u);
        v45 = (Item *)v44;
        if ( !v44 )
          goto LABEL_87;
        Item::Item((Item *)v44, kStruct);
        v45->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemWeaponTitleLicense::_vftable_;
        return v45;
      case 0x1D:
        v46 = operator new(0x78u);
        v47 = (Item *)v46;
        if ( !v46 )
          goto LABEL_87;
        Item::Item((Item *)v46, kStruct);
        v47->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemGBCoin::_vftable_;
        return v47;
      case 0x1C:
        v48 = operator new(0x78u);
        v49 = (Item *)v48;
        if ( !v48 )
          goto LABEL_87;
        Item::Item((Item *)v48, kStruct);
        v49->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemCapsule::_vftable_;
        return v49;
      case 0x11:
        v50 = operator new(0x78u);
        v51 = (Item *)v50;
        if ( !v50 )
          goto LABEL_87;
        Item::Item((Item *)v50, kStruct);
        v51->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemKQ::_vftable_;
        return v51;
      case 0x12:
        v52 = operator new(0x78u);
        v53 = (Item *)v52;
        if ( !v52 )
          goto LABEL_87;
        Item::Item((Item *)v52, kStruct);
        v53->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemHouseSkin::_vftable_;
        return v53;
      case 0x13:
        v54 = operator new(0x78u);
        v55 = (Item *)v54;
        if ( !v54 )
          goto LABEL_87;
        Item::Item((Item *)v54, kStruct);
        v55->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpRed::_vftable_;
        return v55;
      case 0x14:
        v56 = operator new(0x78u);
        v57 = (Item *)v56;
        if ( !v56 )
          goto LABEL_87;
        Item::Item((Item *)v56, kStruct);
        v57->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpBlue::_vftable_;
        return v57;
      case 0x15:
        v58 = operator new(0x78u);
        v59 = (Item *)v58;
        if ( !v58 )
          goto LABEL_87;
        Item::Item((Item *)v58, kStruct);
        v59->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemKQStep::_vftable_;
        return v59;
      case 0x16:
        v60 = operator new(0x78u);
        v61 = (Item *)v60;
        if ( !v60 )
          goto LABEL_87;
        Item::Item((Item *)v60, kStruct);
        v61->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemFeed::_vftable_;
        return v61;
      case 0x17:
        v62 = operator new(0x78u);
        v63 = (Item *)v62;
        if ( !v62 )
          goto LABEL_87;
        Item::Item((Item *)v62, kStruct);
        v63->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRiding::_vftable_;
        return v63;
      case 0x18:
        v64 = operator new(0x78u);
        v65 = (Item *)v64;
        if ( !v64 )
          goto LABEL_87;
        Item::Item((Item *)v64, kStruct);
        v65->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemAmount::_vftable_;
        return v65;
      case 0x19:
        v66 = operator new(0x78u);
        v67 = (Item *)v66;
        if ( !v66 )
          goto LABEL_87;
        Item::Item((Item *)v66, kStruct);
        v67->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemUpGold::_vftable_;
        return v67;
      case 0x1B:
        v68 = operator new(0x78u);
        v69 = (Item *)v68;
        if ( !v68 )
          goto LABEL_87;
        Item::Item((Item *)v68, kStruct);
        v69->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemChargedAction::_vftable_;
        return v69;
      case 0x1E:
        v70 = operator new(0x78u);
        v71 = (Item *)v70;
        if ( !v70 )
          goto LABEL_87;
        Item::Item((Item *)v70, kStruct);
        v71->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemCollectCloseCard::_vftable_;
        return v71;
      case 0x1F:
        v72 = operator new(0x78u);
        v73 = (Item *)v72;
        if ( !v72 )
          goto LABEL_87;
        Item::Item((Item *)v72, kStruct);
        v73->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemCollectOpenCard::_vftable_;
        return v73;
      case 0x21:
        v74 = operator new(0x78u);
        v75 = (Item *)v74;
        if ( !v74 )
          goto LABEL_87;
        Item::Item((Item *)v74, kStruct);
        v75->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemNoEffect::_vftable_;
        return v75;
      case 0x22:
        v76 = operator new(0x78u);
        v77 = (Item *)v76;
        if ( !v76 )
          goto LABEL_87;
        Item::Item((Item *)v76, kStruct);
        v77->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemActiveskill::_vftable_;
        return v77;
      case 0x24:
        v78 = operator new(0x78u);
        v79 = (Item *)v78;
        if ( !v78 )
          goto LABEL_87;
        Item::Item((Item *)v78, kStruct);
        v79->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemPet::_vftable_;
        return v79;
      case 0x25:
        v80 = operator new(0x7Cu);
        v81 = v80;
        if ( v80 )
        {
          Item::Item((Item *)v80, kStruct);
          *(_DWORD *)v81 = &ItemCostumeShield::_vftable_;
          v21 = (Item *)v81;
        }
        else
        {
LABEL_22:
          v21 = 0;
        }
LABEL_23:
        v6 = v21;
        if ( !v21 )
          goto LABEL_88;
        ((void (*)(void))v21->baseclass_0.vfptr[22].__vecDelDtor)();
        return v6;
      case 0x26:
        v82 = operator new(0x78u);
        v83 = (Item *)v82;
        if ( v82 )
        {
          Item::Item((Item *)v82, kStruct);
          v83->baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemBracelet::_vftable_;
          result = v83;
        }
        else
        {
LABEL_87:
          v6 = 0;
LABEL_88:
          result = v6;
        }
        break;
      default:
        goto LABEL_88;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9C523C: using guessed type int (__thiscall *ItemByteLot___vftable_)(void *p, char);
// 9C528C: using guessed type int (__thiscall *ItemWordLot___vftable_)(void *p, char);
// 9C52DC: using guessed type int (__thiscall *ItemDwrdLot___vftable_)(void *p, char);
// 9C532C: using guessed type int (__thiscall *ItemQuest___vftable_)(void *p, char);
// 9C537C: using guessed type int (__thiscall *ItemAmulet___vftable_)(void *p, char);
// 9C53CC: using guessed type int (__thiscall *ItemWeapon___vftable_)(void *p, char);
// 9C5424: using guessed type int (__thiscall *ItemCostumeWeapon___vftable_)(void *p, char);
// 9C5484: using guessed type int (__thiscall *ItemArmor___vftable_)(void *p, char);
// 9C54D4: using guessed type int (__thiscall *ItemShield___vftable_)(void *p, char);
// 9C5524: using guessed type int (__thiscall *ItemCostumeShield___vftable_)(void *p, char);
// 9C5584: using guessed type int (__thiscall *ItemBoot___vftable_)(void *p, char);
// 9C55D4: using guessed type int (__thiscall *ItemFurniture___vftable_)(void *p, char);
// 9C5624: using guessed type int (__thiscall *ItemDecoration___vftable_)(void *p, char);
// 9C5674: using guessed type int (__thiscall *ItemSkillScroll___vftable_)(void *p, char);
// 9C56C4: using guessed type int (__thiscall *ItemRecallScroll___vftable_)(void *p, char);
// 9C5714: using guessed type int (__thiscall *ItemUpgradeSource___vftable_)(void *p, char);
// 9C5764: using guessed type int (__thiscall *ItemBind___vftable_)(void *p, char);
// 9C57B4: using guessed type int (__thiscall *ItemChest___vftable_)(void *p, char);
// 9C5804: using guessed type int (__thiscall *ItemGBCoin___vftable_)(void *p, char);
// 9C5854: using guessed type int (__thiscall *ItemCapsule___vftable_)(void *p, char);
// 9C58AC: using guessed type int (__thiscall *ItemEnchant___vftable_)(void *p, char);
// 9C58FC: using guessed type int (__thiscall *ItemWeaponTitleLicense___vftable_)(void *p, char);
// 9C594C: using guessed type int (__thiscall *ItemKQ___vftable_)(void *p, char);
// 9C599C: using guessed type int (__thiscall *ItemHouseSkin___vftable_)(void *p, char);
// 9C59EC: using guessed type int (__thiscall *ItemUpRed___vftable_)(void *p, char);
// 9C5A3C: using guessed type int (__thiscall *ItemUpBlue___vftable_)(void *p, char);
// 9C5A8C: using guessed type int (__thiscall *ItemKQStep___vftable_)(void *p, char);
// 9C5ADC: using guessed type int (__thiscall *ItemFeed___vftable_)(void *p, char);
// 9C5B2C: using guessed type int (__thiscall *ItemRiding___vftable_)(void *p, char);
// 9C5B7C: using guessed type int (__thiscall *ItemAmount___vftable_)(void *p, char);
// 9C5BCC: using guessed type int (__thiscall *ItemUpGold___vftable_)(void *p, char);
// 9C5C1C: using guessed type int (__thiscall *ItemChargedAction___vftable_)(void *p, char);
// 9C5C6C: using guessed type int (__thiscall *ItemCollectCloseCard___vftable_)(void *p, char);
// 9C5CBC: using guessed type int (__thiscall *ItemCollectOpenCard___vftable_)(void *p, char);
// 9C5D0C: using guessed type int (__thiscall *ItemNoEffect___vftable_)(void *p, char);
// 9C5D5C: using guessed type int (__thiscall *ItemActiveskill___vftable_)(void *p, char);
// 9C5DAC: using guessed type int (__thiscall *ItemPet___vftable_)(void *p, char);
// 9C5E0C: using guessed type int (__thiscall *ItemBracelet___vftable_)(void *p, char);
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00671480) --------------------------------------------------------
Item *__cdecl Item::Create(char *pbyBuff, ITEM_INVEN *kInven, unsigned int *puiBuffSize)
{
  int v3; // eax@1
  Item *result; // eax@4
  int v5; // edi@5
  int v6; // ebx@5
  int v7; // ecx@7
  int v8; // eax@8
  int v9; // eax@12
  Item *v10; // edi@12
  unsigned int v11; // ebx@12
  void *v12; // eax@13
  void *v13; // esi@13
  void *v14; // esi@16
  void *v15; // eax@18
  void *v16; // esi@18
  void *v17; // eax@20
  void *v18; // esi@20
  void *v19; // esi@22
  void *v20; // eax@24
  void *v21; // esi@24
  void *v22; // eax@26
  void *v23; // esi@26
  void *v24; // ecx@27
  void *v25; // eax@31
  void *v26; // esi@31
  void *v27; // eax@33
  void *v28; // esi@33
  void *v29; // esi@35
  void *v30; // eax@37
  void *v31; // esi@37
  int v32; // eax@39
  void *v33; // eax@39
  void *v34; // esi@39
  void *v35; // eax@41
  void *v36; // esi@41
  void *v37; // eax@43
  void *v38; // esi@43
  void *v39; // esi@45
  void *v40; // eax@47
  void *v41; // esi@47
  void *v42; // eax@49
  void *v43; // esi@49
  void *v44; // esi@51
  void *v45; // eax@53
  void *v46; // esi@53
  void *v47; // eax@55
  void *v48; // esi@55
  int v49; // ecx@57
  int v50; // edx@57
  void *v51; // esi@57
  void *v52; // eax@59
  void *v53; // esi@59
  void *v54; // esi@61
  void *v55; // eax@63
  void *v56; // esi@63
  void *v57; // eax@65
  void *v58; // esi@65
  void *v59; // esi@67
  void *v60; // eax@69
  void *v61; // esi@69
  void *v62; // eax@71
  void *v63; // esi@71
  void *v64; // esi@73
  void *v65; // eax@75
  void *v66; // esi@75
  void *v67; // eax@77
  void *v68; // esi@77
  int v69; // eax@79
  char v70; // cl@79
  void *v71; // eax@79
  void *v72; // esi@79
  char v73; // cl@81
  void *v74; // eax@81
  void *v75; // esi@81
  void *v76; // eax@83
  void *v77; // esi@83
  void *v78; // esi@85
  void *v79; // eax@87
  void *v80; // esi@87
  void *v81; // esi@89
  void *v82; // eax@91
  void *v83; // esi@91
  unsigned int v84; // [sp-10h] [bp-90h]@1
  __int16 kItemStruct; // [sp+8h] [bp-78h]@12
  char dst[4]; // [sp+Ah] [bp-76h]@13
  int v87; // [sp+Eh] [bp-72h]@39
  int v88; // [sp+12h] [bp-6Eh]@57
  __int16 v89; // [sp+22h] [bp-5Eh]@87
  unsigned int v90; // [sp+70h] [bp-10h]@1
  int v91; // [sp+7Ch] [bp-4h]@13
  int v92; // [sp+80h] [bp+0h]@1

  v90 = (unsigned int)&v92 ^ __security_cookie;
  v84 = (unsigned int)&v92 ^ __security_cookie;
  kInven->Inven = *(_WORD *)(pbyBuff + 1);
  v3 = *(_WORD *)(pbyBuff + 3);
  if ( (_WORD)v3 == -1 )
  {
    if ( puiBuffSize )
      *puiBuffSize = 5;
    result = 0;
  }
  else
  {
    v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v6 = *(_WORD *)(pbyBuff + 3);
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v3)
      && (unsigned __int16)v6 <= *(_WORD *)(v5 + 200)
      && (v7 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v7 + 4 * v6))
      && (v8 = *(_DWORD *)(v7 + 4 * v6)) != 0 )
    {
      v9 = *(_DWORD *)(v8 + 102);
      v10 = 0;
      v11 = 0;
      kItemStruct = *(_WORD *)(pbyBuff + 3);
      switch ( v9 )
      {
        case 0:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v12 = operator new(0x78u);
          v13 = v12;
          v91 = 0;
          if ( !v12 )
            goto LABEL_15;
          Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemByteLot::_vftable_;
          v10 = (Item *)v13;
          break;
        case 1:
          *(_WORD *)dst = *(_WORD *)(pbyBuff + 5);
          v11 = 2;
          v14 = operator new(0x78u);
          v91 = 1;
          if ( !v14 )
            goto LABEL_15;
          Item::Item((Item *)v14, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v14 = &ItemWordLot::_vftable_;
          v10 = (Item *)v14;
          break;
        case 2:
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v11 = 4;
          v15 = operator new(0x78u);
          v16 = v15;
          v91 = 2;
          if ( !v15 )
            goto LABEL_15;
          Item::Item((Item *)v15, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v16 = &ItemDwrdLot::_vftable_;
          v10 = (Item *)v16;
          break;
        case 3:
          *(_WORD *)dst = *(_WORD *)(pbyBuff + 5);
          v11 = 2;
          v17 = operator new(0x78u);
          v18 = v17;
          v91 = 3;
          if ( !v17 )
            goto LABEL_15;
          Item::Item((Item *)v17, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v18 = &ItemQuest::_vftable_;
          v10 = (Item *)v18;
          break;
        case 4:
          v11 = ItemAmulet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v19 = operator new(0x78u);
          v91 = 4;
          if ( !v19 )
            goto LABEL_15;
          Item::Item((Item *)v19, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v19 = &ItemAmulet::_vftable_;
          v10 = (Item *)v19;
          break;
        case 5:
          v11 = ItemWeapon::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v20 = operator new(0x78u);
          v21 = v20;
          v91 = 5;
          if ( !v20 )
            goto LABEL_15;
          Item::Item((Item *)v20, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v21 = &ItemWeapon::_vftable_;
          v10 = (Item *)v21;
          break;
        case 26:
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v11 = 4;
          v22 = operator new(0x7Cu);
          v23 = v22;
          v91 = 6;
          if ( !v22 )
            goto LABEL_28;
          Item::Item((Item *)v22, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v23 = &ItemCostumeWeapon::_vftable_;
          v24 = v23;
          goto LABEL_29;
        case 6:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v25 = operator new(0x78u);
          v26 = v25;
          v91 = 7;
          if ( !v25 )
            goto LABEL_15;
          Item::Item((Item *)v25, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v26 = &ItemArmor::_vftable_;
          v10 = (Item *)v26;
          break;
        case 7:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v27 = operator new(0x78u);
          v28 = v27;
          v91 = 8;
          if ( !v27 )
            goto LABEL_15;
          Item::Item((Item *)v27, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v28 = &ItemShield::_vftable_;
          v10 = (Item *)v28;
          break;
        case 8:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v29 = operator new(0x78u);
          v91 = 9;
          if ( !v29 )
            goto LABEL_15;
          Item::Item((Item *)v29, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v29 = &ItemBoot::_vftable_;
          v10 = (Item *)v29;
          break;
        case 9:
          memcpy(dst, pbyBuff + 5, 0x24u);
          v11 = 36;
          v30 = operator new(0x78u);
          v31 = v30;
          v91 = 10;
          if ( !v30 )
            goto LABEL_15;
          Item::Item((Item *)v30, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v31 = &ItemFurniture::_vftable_;
          v10 = (Item *)v31;
          break;
        case 10:
          v32 = *(_DWORD *)(pbyBuff + 9);
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v87 = v32;
          v11 = 8;
          v33 = operator new(0x78u);
          v34 = v33;
          v91 = 11;
          if ( !v33 )
            goto LABEL_15;
          Item::Item((Item *)v33, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v34 = &ItemDecoration::_vftable_;
          v10 = (Item *)v34;
          break;
        case 11:
          v11 = 1;
          v35 = operator new(0x78u);
          v36 = v35;
          v91 = 12;
          if ( !v35 )
            goto LABEL_15;
          Item::Item((Item *)v35, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v36 = &ItemSkillScroll::_vftable_;
          v10 = (Item *)v36;
          break;
        case 12:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v37 = operator new(0x78u);
          v38 = v37;
          v91 = 13;
          if ( !v37 )
            goto LABEL_15;
          Item::Item((Item *)v37, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v38 = &ItemRecallScroll::_vftable_;
          v10 = (Item *)v38;
          break;
        case 14:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v39 = operator new(0x78u);
          v91 = 14;
          if ( !v39 )
            goto LABEL_15;
          Item::Item((Item *)v39, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v39 = &ItemUpgradeSource::_vftable_;
          v10 = (Item *)v39;
          break;
        case 13:
          dst[0] = pbyBuff[5];
          memcpy(&dst[1], pbyBuff + 6, 10 * (unsigned __int8)dst[0]);
          v11 = 10 * (unsigned __int8)dst[0] + 1;
          v40 = operator new(0x78u);
          v41 = v40;
          v91 = 15;
          if ( !v40 )
            goto LABEL_15;
          Item::Item((Item *)v40, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v41 = &ItemBind::_vftable_;
          v10 = (Item *)v41;
          break;
        case 15:
          v11 = ItemChest::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v42 = operator new(0x78u);
          v43 = v42;
          v91 = 16;
          if ( !v42 )
            goto LABEL_15;
          Item::Item((Item *)v42, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v43 = &ItemChest::_vftable_;
          v10 = (Item *)v43;
          break;
        case 35:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v44 = operator new(0x78u);
          v91 = 17;
          if ( !v44 )
            goto LABEL_15;
          Item::Item((Item *)v44, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v44 = &ItemEnchant::_vftable_;
          v10 = (Item *)v44;
          break;
        case 16:
          v11 = 1;
          v45 = operator new(0x78u);
          v46 = v45;
          v91 = 18;
          if ( !v45 )
            goto LABEL_15;
          Item::Item((Item *)v45, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v46 = &ItemWeaponTitleLicense::_vftable_;
          v10 = (Item *)v46;
          break;
        case 29:
          v11 = 1;
          v47 = operator new(0x78u);
          v48 = v47;
          v91 = 19;
          if ( !v47 )
            goto LABEL_15;
          Item::Item((Item *)v47, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v48 = &ItemGBCoin::_vftable_;
          v10 = (Item *)v48;
          break;
        case 28:
          v49 = *(_DWORD *)(pbyBuff + 9);
          v50 = *(_DWORD *)(pbyBuff + 13);
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v87 = v49;
          v88 = v50;
          v11 = 12;
          v51 = operator new(0x78u);
          v91 = 20;
          if ( !v51 )
            goto LABEL_15;
          Item::Item((Item *)v51, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v51 = &ItemCapsule::_vftable_;
          v10 = (Item *)v51;
          break;
        case 17:
          v52 = operator new(0x78u);
          v53 = v52;
          v91 = 21;
          if ( !v52 )
            goto LABEL_15;
          Item::Item((Item *)v52, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v53 = &ItemKQ::_vftable_;
          v10 = (Item *)v53;
          break;
        case 18:
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v11 = 4;
          v54 = operator new(0x78u);
          v91 = 22;
          if ( !v54 )
            goto LABEL_15;
          Item::Item((Item *)v54, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v54 = &ItemHouseSkin::_vftable_;
          v10 = (Item *)v54;
          break;
        case 19:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v55 = operator new(0x78u);
          v56 = v55;
          v91 = 23;
          if ( !v55 )
            goto LABEL_15;
          Item::Item((Item *)v55, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v56 = &ItemUpRed::_vftable_;
          v10 = (Item *)v56;
          break;
        case 20:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v57 = operator new(0x78u);
          v58 = v57;
          v91 = 24;
          if ( !v57 )
            goto LABEL_15;
          Item::Item((Item *)v57, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v58 = &ItemUpBlue::_vftable_;
          v10 = (Item *)v58;
          break;
        case 21:
          *(_WORD *)dst = *(_WORD *)(pbyBuff + 5);
          v11 = 2;
          v59 = operator new(0x78u);
          v91 = 25;
          if ( !v59 )
            goto LABEL_15;
          Item::Item((Item *)v59, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v59 = &ItemKQStep::_vftable_;
          v10 = (Item *)v59;
          break;
        case 22:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v60 = operator new(0x78u);
          v61 = v60;
          v91 = 26;
          if ( !v60 )
            goto LABEL_15;
          Item::Item((Item *)v60, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v61 = &ItemFeed::_vftable_;
          v10 = (Item *)v61;
          break;
        case 23:
          v11 = ItemRiding::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v62 = operator new(0x78u);
          v63 = v62;
          v91 = 27;
          if ( !v62 )
            goto LABEL_15;
          Item::Item((Item *)v62, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v63 = &ItemRiding::_vftable_;
          v10 = (Item *)v63;
          break;
        case 24:
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v11 = 4;
          v64 = operator new(0x78u);
          v91 = 28;
          if ( !v64 )
            goto LABEL_15;
          Item::Item((Item *)v64, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v64 = &ItemAmount::_vftable_;
          v10 = (Item *)v64;
          break;
        case 25:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v65 = operator new(0x78u);
          v66 = v65;
          v91 = 29;
          if ( !v65 )
            goto LABEL_15;
          Item::Item((Item *)v65, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v66 = &ItemUpGold::_vftable_;
          v10 = (Item *)v66;
          break;
        case 27:
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v11 = 4;
          v67 = operator new(0x78u);
          v68 = v67;
          v91 = 30;
          if ( !v67 )
            goto LABEL_15;
          Item::Item((Item *)v67, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v68 = &ItemChargedAction::_vftable_;
          v10 = (Item *)v68;
          break;
        case 30:
          v69 = *(_DWORD *)(pbyBuff + 9);
          v70 = pbyBuff[13];
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v87 = v69;
          LOBYTE(v88) = v70;
          v11 = 9;
          v71 = operator new(0x78u);
          v72 = v71;
          v91 = 31;
          if ( !v71 )
            goto LABEL_15;
          Item::Item((Item *)v71, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v72 = &ItemCollectCloseCard::_vftable_;
          v10 = (Item *)v72;
          break;
        case 31:
          v73 = pbyBuff[9];
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          LOBYTE(v87) = v73;
          v11 = 5;
          v74 = operator new(0x78u);
          v75 = v74;
          v91 = 32;
          if ( !v74 )
            goto LABEL_15;
          Item::Item((Item *)v74, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v75 = &ItemCollectOpenCard::_vftable_;
          v10 = (Item *)v75;
          break;
        case 33:
          dst[0] = pbyBuff[5];
          v11 = 1;
          v76 = operator new(0x78u);
          v77 = v76;
          v91 = 33;
          if ( !v76 )
            goto LABEL_15;
          Item::Item((Item *)v76, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v77 = &ItemNoEffect::_vftable_;
          v10 = (Item *)v77;
          break;
        case 34:
          *(_WORD *)dst = *(_WORD *)(pbyBuff + 5);
          v11 = 2;
          v78 = operator new(0x78u);
          v91 = 34;
          if ( !v78 )
            goto LABEL_15;
          Item::Item((Item *)v78, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v78 = &ItemActiveskill::_vftable_;
          v10 = (Item *)v78;
          break;
        case 36:
          memcpy(dst, pbyBuff + 5, 0x18u);
          v89 = *(_WORD *)(pbyBuff + 29);
          v11 = 26;
          v79 = operator new(0x78u);
          v80 = v79;
          v91 = 35;
          if ( !v79 )
            goto LABEL_15;
          Item::Item((Item *)v79, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v80 = &ItemPet::_vftable_;
          v10 = (Item *)v80;
          break;
        case 37:
          *(_DWORD *)dst = *(_DWORD *)(pbyBuff + 5);
          v11 = 4;
          v81 = operator new(0x7Cu);
          v91 = 36;
          if ( v81 )
          {
            Item::Item((Item *)v81, (SHINE_ITEM_STRUCT *)&kItemStruct);
            *(_DWORD *)v81 = &ItemCostumeShield::_vftable_;
            v24 = v81;
          }
          else
          {
LABEL_28:
            v24 = 0;
          }
LABEL_29:
          v91 = -1;
          v10 = (Item *)v24;
          if ( v24 )
            (*(void (__cdecl **)(unsigned int))(*(_DWORD *)v24 + 88))(v84);
          break;
        case 38:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, pbyBuff + 5);
          v82 = operator new(0x78u);
          v83 = v82;
          v91 = 37;
          if ( v82 )
          {
            Item::Item((Item *)v82, (SHINE_ITEM_STRUCT *)&kItemStruct);
            *(_DWORD *)v83 = &ItemBracelet::_vftable_;
            v10 = (Item *)v83;
          }
          else
          {
LABEL_15:
            v10 = 0;
          }
          break;
        default:
          v11 = (unsigned __int8)*pbyBuff;
          break;
      }
      if ( puiBuffSize )
        *puiBuffSize = v11 + 5;
      result = v10;
    }
    else
    {
      if ( puiBuffSize )
        *puiBuffSize = 5;
      result = 0;
    }
  }
  return result;
}
// 9C523C: using guessed type int (__thiscall *ItemByteLot___vftable_)(void *p, char);
// 9C528C: using guessed type int (__thiscall *ItemWordLot___vftable_)(void *p, char);
// 9C52DC: using guessed type int (__thiscall *ItemDwrdLot___vftable_)(void *p, char);
// 9C532C: using guessed type int (__thiscall *ItemQuest___vftable_)(void *p, char);
// 9C537C: using guessed type int (__thiscall *ItemAmulet___vftable_)(void *p, char);
// 9C53CC: using guessed type int (__thiscall *ItemWeapon___vftable_)(void *p, char);
// 9C5424: using guessed type int (__thiscall *ItemCostumeWeapon___vftable_)(void *p, char);
// 9C5484: using guessed type int (__thiscall *ItemArmor___vftable_)(void *p, char);
// 9C54D4: using guessed type int (__thiscall *ItemShield___vftable_)(void *p, char);
// 9C5524: using guessed type int (__thiscall *ItemCostumeShield___vftable_)(void *p, char);
// 9C5584: using guessed type int (__thiscall *ItemBoot___vftable_)(void *p, char);
// 9C55D4: using guessed type int (__thiscall *ItemFurniture___vftable_)(void *p, char);
// 9C5624: using guessed type int (__thiscall *ItemDecoration___vftable_)(void *p, char);
// 9C5674: using guessed type int (__thiscall *ItemSkillScroll___vftable_)(void *p, char);
// 9C56C4: using guessed type int (__thiscall *ItemRecallScroll___vftable_)(void *p, char);
// 9C5714: using guessed type int (__thiscall *ItemUpgradeSource___vftable_)(void *p, char);
// 9C5764: using guessed type int (__thiscall *ItemBind___vftable_)(void *p, char);
// 9C57B4: using guessed type int (__thiscall *ItemChest___vftable_)(void *p, char);
// 9C5804: using guessed type int (__thiscall *ItemGBCoin___vftable_)(void *p, char);
// 9C5854: using guessed type int (__thiscall *ItemCapsule___vftable_)(void *p, char);
// 9C58AC: using guessed type int (__thiscall *ItemEnchant___vftable_)(void *p, char);
// 9C58FC: using guessed type int (__thiscall *ItemWeaponTitleLicense___vftable_)(void *p, char);
// 9C594C: using guessed type int (__thiscall *ItemKQ___vftable_)(void *p, char);
// 9C599C: using guessed type int (__thiscall *ItemHouseSkin___vftable_)(void *p, char);
// 9C59EC: using guessed type int (__thiscall *ItemUpRed___vftable_)(void *p, char);
// 9C5A3C: using guessed type int (__thiscall *ItemUpBlue___vftable_)(void *p, char);
// 9C5A8C: using guessed type int (__thiscall *ItemKQStep___vftable_)(void *p, char);
// 9C5ADC: using guessed type int (__thiscall *ItemFeed___vftable_)(void *p, char);
// 9C5B2C: using guessed type int (__thiscall *ItemRiding___vftable_)(void *p, char);
// 9C5B7C: using guessed type int (__thiscall *ItemAmount___vftable_)(void *p, char);
// 9C5BCC: using guessed type int (__thiscall *ItemUpGold___vftable_)(void *p, char);
// 9C5C1C: using guessed type int (__thiscall *ItemChargedAction___vftable_)(void *p, char);
// 9C5C6C: using guessed type int (__thiscall *ItemCollectCloseCard___vftable_)(void *p, char);
// 9C5CBC: using guessed type int (__thiscall *ItemCollectOpenCard___vftable_)(void *p, char);
// 9C5D0C: using guessed type int (__thiscall *ItemNoEffect___vftable_)(void *p, char);
// 9C5D5C: using guessed type int (__thiscall *ItemActiveskill___vftable_)(void *p, char);
// 9C5DAC: using guessed type int (__thiscall *ItemPet___vftable_)(void *p, char);
// 9C5E0C: using guessed type int (__thiscall *ItemBracelet___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00672020) --------------------------------------------------------
Item *__cdecl Item::Create(PROTO_ITEMPACKET_INFORM *pkInfo, ITEM_INVEN *kInven, unsigned int *puiBuffSize)
{
  int v3; // eax@1
  Item *result; // eax@4
  int v5; // edi@5
  int v6; // ebx@5
  int v7; // ecx@7
  int v8; // eax@8
  int v9; // eax@12
  Item *v10; // edi@12
  unsigned int v11; // ebx@12
  void *v12; // eax@13
  void *v13; // esi@13
  void *v14; // eax@17
  void *v15; // eax@19
  void *v16; // eax@23
  void *v17; // eax@25
  void *v18; // esi@25
  void *v19; // eax@30
  void *v20; // eax@32
  void *v21; // eax@36
  SHINE_PUT_ON_BELONGED_ITEM v22; // eax@38
  void *v23; // eax@38
  void *v24; // eax@40
  void *v25; // eax@42
  void *v26; // eax@46
  void *v27; // eax@48
  void *v28; // eax@52
  void *v29; // eax@54
  SHINE_PUT_ON_BELONGED_ITEM v30; // ecx@56
  int v31; // edx@56
  void *v32; // eax@58
  void *v33; // eax@62
  void *v34; // eax@64
  void *v35; // eax@68
  void *v36; // eax@70
  void *v37; // eax@74
  void *v38; // eax@76
  SHINE_PUT_ON_BELONGED_ITEM v39; // eax@78
  char v40; // cl@78
  void *v41; // eax@78
  char v42; // cl@80
  void *v43; // eax@80
  void *v44; // eax@82
  void *v45; // eax@86
  void *v46; // eax@90
  signed int uiBuffSize; // [sp+4h] [bp-80h]@1
  unsigned __int16 kItemStruct; // [sp+Ch] [bp-78h]@12
  char dst[4]; // [sp+Eh] [bp-76h]@13
  SHINE_PUT_ON_BELONGED_ITEM v50; // [sp+12h] [bp-72h]@38
  int v51; // [sp+16h] [bp-6Eh]@56
  __int16 v52; // [sp+26h] [bp-5Eh]@86
  unsigned int v53; // [sp+74h] [bp-10h]@1
  int v54; // [sp+80h] [bp-4h]@13
  int v55; // [sp+84h] [bp+0h]@1

  v53 = (unsigned int)&v55 ^ __security_cookie;
  kInven->Inven = pkInfo->location.Inven;
  v3 = pkInfo->info.itemid;
  uiBuffSize = 5;
  if ( (_WORD)v3 == -1 )
  {
    if ( puiBuffSize )
      *puiBuffSize = 5;
    result = 0;
  }
  else
  {
    v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v6 = pkInfo->info.itemid;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v3)
      && (unsigned __int16)v6 <= *(_WORD *)(v5 + 200)
      && (v7 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v7 + 4 * v6))
      && (v8 = *(_DWORD *)(v7 + 4 * v6)) != 0 )
    {
      v9 = *(_DWORD *)(v8 + 102);
      v10 = 0;
      v11 = 0;
      kItemStruct = pkInfo->info.itemid;
      switch ( v9 )
      {
        case 0:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          v11 = 1;
          v12 = operator new(0x78u);
          v13 = v12;
          v54 = 0;
          if ( !v12 )
            goto LABEL_92;
          Item::Item((Item *)v12, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemByteLot::_vftable_;
          goto LABEL_93;
        case 1:
          *(_WORD *)dst = *(_WORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 2;
          v13 = operator new(0x78u);
          v54 = 1;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemWordLot::_vftable_;
          goto LABEL_93;
        case 2:
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 4;
          v14 = operator new(0x78u);
          v13 = v14;
          v54 = 2;
          if ( !v14 )
            goto LABEL_92;
          Item::Item((Item *)v14, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemDwrdLot::_vftable_;
          goto LABEL_93;
        case 3:
          *(_WORD *)dst = *(_WORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 2;
          v15 = operator new(0x78u);
          v13 = v15;
          v54 = 3;
          if ( !v15 )
            goto LABEL_92;
          Item::Item((Item *)v15, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemQuest::_vftable_;
          goto LABEL_93;
        case 4:
          v11 = ItemAmulet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v13 = operator new(0x78u);
          v54 = 4;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemAmulet::_vftable_;
          goto LABEL_93;
        case 5:
          v11 = ItemWeapon::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v16 = operator new(0x78u);
          v13 = v16;
          v54 = 5;
          if ( !v16 )
            goto LABEL_92;
          Item::Item((Item *)v16, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemWeapon::_vftable_;
          goto LABEL_93;
        case 26:
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 4;
          v17 = operator new(0x7Cu);
          v18 = v17;
          v54 = 6;
          if ( !v17 )
            goto LABEL_27;
          Item::Item((Item *)v17, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v18 = &ItemCostumeWeapon::_vftable_;
          goto LABEL_28;
        case 6:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v19 = operator new(0x78u);
          v13 = v19;
          v54 = 7;
          if ( !v19 )
            goto LABEL_92;
          Item::Item((Item *)v19, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemArmor::_vftable_;
          goto LABEL_93;
        case 7:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v20 = operator new(0x78u);
          v13 = v20;
          v54 = 8;
          if ( !v20 )
            goto LABEL_92;
          Item::Item((Item *)v20, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemShield::_vftable_;
          goto LABEL_93;
        case 8:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v13 = operator new(0x78u);
          v54 = 9;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemBoot::_vftable_;
          goto LABEL_93;
        case 9:
          memcpy(dst, &pkInfo->info.itemattr, 0x24u);
          v11 = 36;
          v21 = operator new(0x78u);
          v13 = v21;
          v54 = 10;
          if ( !v21 )
            goto LABEL_92;
          Item::Item((Item *)v21, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemFurniture::_vftable_;
          goto LABEL_93;
        case 10:
          v22 = pkInfo->info.itemattr.amulet.IsPutOnBelonged;
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v50 = v22;
          v11 = 8;
          v23 = operator new(0x78u);
          v13 = v23;
          v54 = 11;
          if ( !v23 )
            goto LABEL_92;
          Item::Item((Item *)v23, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemDecoration::_vftable_;
          goto LABEL_93;
        case 11:
          v11 = 1;
          v24 = operator new(0x78u);
          v13 = v24;
          v54 = 12;
          if ( !v24 )
            goto LABEL_92;
          Item::Item((Item *)v24, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemSkillScroll::_vftable_;
          goto LABEL_93;
        case 12:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          v11 = 1;
          v25 = operator new(0x78u);
          v13 = v25;
          v54 = 13;
          if ( !v25 )
            goto LABEL_92;
          Item::Item((Item *)v25, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemRecallScroll::_vftable_;
          goto LABEL_93;
        case 14:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          v11 = 1;
          v13 = operator new(0x78u);
          v54 = 14;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemUpgradeSource::_vftable_;
          goto LABEL_93;
        case 13:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          memcpy(&dst[1], (char *)&pkInfo->info.itemattr.wlot.lot + 1, 10 * (unsigned __int8)dst[0]);
          v11 = 10 * (unsigned __int8)dst[0] + 1;
          v26 = operator new(0x78u);
          v13 = v26;
          v54 = 15;
          if ( !v26 )
            goto LABEL_92;
          Item::Item((Item *)v26, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemBind::_vftable_;
          goto LABEL_93;
        case 15:
          v11 = ItemChest::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v27 = operator new(0x78u);
          v13 = v27;
          v54 = 16;
          if ( !v27 )
            goto LABEL_92;
          Item::Item((Item *)v27, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemChest::_vftable_;
          goto LABEL_93;
        case 35:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          v11 = 1;
          v13 = operator new(0x78u);
          v54 = 17;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemEnchant::_vftable_;
          goto LABEL_93;
        case 16:
          v11 = 1;
          v28 = operator new(0x78u);
          v13 = v28;
          v54 = 18;
          if ( !v28 )
            goto LABEL_92;
          Item::Item((Item *)v28, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemWeaponTitleLicense::_vftable_;
          goto LABEL_93;
        case 29:
          v11 = 1;
          v29 = operator new(0x78u);
          v13 = v29;
          v54 = 19;
          if ( !v29 )
            goto LABEL_92;
          Item::Item((Item *)v29, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemGBCoin::_vftable_;
          goto LABEL_93;
        case 28:
          v30 = pkInfo->info.itemattr.amulet.IsPutOnBelonged;
          v31 = *(_DWORD *)&pkInfo->info.itemattr.amulet.upgrade;
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v50 = v30;
          v51 = v31;
          v11 = 12;
          v13 = operator new(0x78u);
          v54 = 20;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemCapsule::_vftable_;
          goto LABEL_93;
        case 17:
          v32 = operator new(0x78u);
          v13 = v32;
          v54 = 21;
          if ( !v32 )
            goto LABEL_92;
          Item::Item((Item *)v32, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemKQ::_vftable_;
          goto LABEL_93;
        case 18:
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 4;
          v13 = operator new(0x78u);
          v54 = 22;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemHouseSkin::_vftable_;
          goto LABEL_93;
        case 19:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          v11 = 1;
          v33 = operator new(0x78u);
          v13 = v33;
          v54 = 23;
          if ( !v33 )
            goto LABEL_92;
          Item::Item((Item *)v33, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemUpRed::_vftable_;
          goto LABEL_93;
        case 20:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          v11 = 1;
          v34 = operator new(0x78u);
          v13 = v34;
          v54 = 24;
          if ( !v34 )
            goto LABEL_92;
          Item::Item((Item *)v34, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemUpBlue::_vftable_;
          goto LABEL_93;
        case 21:
          *(_WORD *)dst = *(_WORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 2;
          v13 = operator new(0x78u);
          v54 = 25;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemKQStep::_vftable_;
          goto LABEL_93;
        case 22:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          v11 = 1;
          v35 = operator new(0x78u);
          v13 = v35;
          v54 = 26;
          if ( !v35 )
            goto LABEL_92;
          Item::Item((Item *)v35, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemFeed::_vftable_;
          goto LABEL_93;
        case 23:
          v11 = ItemRiding::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v36 = operator new(0x78u);
          v13 = v36;
          v54 = 27;
          if ( !v36 )
            goto LABEL_92;
          Item::Item((Item *)v36, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemRiding::_vftable_;
          goto LABEL_93;
        case 24:
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 4;
          v13 = operator new(0x78u);
          v54 = 28;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemAmount::_vftable_;
          goto LABEL_93;
        case 25:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          uiBuffSize = 6;
          v37 = operator new(0x78u);
          v13 = v37;
          v54 = 29;
          if ( !v37 )
            goto LABEL_92;
          Item::Item((Item *)v37, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemUpGold::_vftable_;
          goto LABEL_93;
        case 27:
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          uiBuffSize = 9;
          v38 = operator new(0x78u);
          v13 = v38;
          v54 = 30;
          if ( !v38 )
            goto LABEL_92;
          Item::Item((Item *)v38, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemChargedAction::_vftable_;
          goto LABEL_93;
        case 30:
          v39 = pkInfo->info.itemattr.amulet.IsPutOnBelonged;
          v40 = pkInfo->info.itemattr.amulet.upgrade;
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v50 = v39;
          LOBYTE(v51) = v40;
          uiBuffSize = 14;
          v41 = operator new(0x78u);
          v13 = v41;
          v54 = 31;
          if ( !v41 )
            goto LABEL_92;
          Item::Item((Item *)v41, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemCollectCloseCard::_vftable_;
          goto LABEL_93;
        case 31:
          v42 = LOBYTE(pkInfo->info.itemattr.amulet.IsPutOnBelonged);
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          LOBYTE(v50) = v42;
          uiBuffSize = 10;
          v43 = operator new(0x78u);
          v13 = v43;
          v54 = 32;
          if ( !v43 )
            goto LABEL_92;
          Item::Item((Item *)v43, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemCollectOpenCard::_vftable_;
          goto LABEL_93;
        case 33:
          dst[0] = pkInfo->info.itemattr.blot.lot;
          uiBuffSize = 6;
          v44 = operator new(0x78u);
          v13 = v44;
          v54 = 33;
          if ( !v44 )
            goto LABEL_92;
          Item::Item((Item *)v44, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemNoEffect::_vftable_;
          goto LABEL_93;
        case 34:
          *(_WORD *)dst = *(_WORD *)&pkInfo->info.itemattr.blot.lot;
          uiBuffSize = 7;
          v13 = operator new(0x78u);
          v54 = 34;
          if ( !v13 )
            goto LABEL_92;
          Item::Item((Item *)v13, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemActiveskill::_vftable_;
          goto LABEL_93;
        case 36:
          memcpy(dst, &pkInfo->info.itemattr, 0x18u);
          v52 = *(_WORD *)&pkInfo->info.itemattr.amulet.UpgradeOption.optionlist[4].itemoption_type;
          uiBuffSize = 31;
          v45 = operator new(0x78u);
          v13 = v45;
          v54 = 35;
          if ( !v45 )
            goto LABEL_92;
          Item::Item((Item *)v45, (SHINE_ITEM_STRUCT *)&kItemStruct);
          *(_DWORD *)v13 = &ItemPet::_vftable_;
          goto LABEL_93;
        case 37:
          *(_DWORD *)dst = *(_DWORD *)&pkInfo->info.itemattr.blot.lot;
          v11 = 4;
          v18 = operator new(0x7Cu);
          v54 = 36;
          if ( v18 )
          {
            Item::Item((Item *)v18, (SHINE_ITEM_STRUCT *)&kItemStruct);
            *(_DWORD *)v18 = &ItemCostumeShield::_vftable_;
          }
          else
          {
LABEL_27:
            v18 = 0;
          }
LABEL_28:
          v54 = -1;
          v10 = (Item *)v18;
          if ( v18 )
            (*(void (__thiscall **)(void *))(*(_DWORD *)v18 + 88))(v18);
          break;
        case 38:
          v11 = ItemBracelet::SetStructAttr((SHINE_ITEM_STRUCT *)&kItemStruct, &pkInfo->info.itemattr.blot.lot);
          v46 = operator new(0x78u);
          v13 = v46;
          v54 = 37;
          if ( v46 )
          {
            Item::Item((Item *)v46, (SHINE_ITEM_STRUCT *)&kItemStruct);
            *(_DWORD *)v13 = &ItemBracelet::_vftable_;
          }
          else
          {
LABEL_92:
            v13 = 0;
          }
LABEL_93:
          v10 = (Item *)v13;
          break;
        default:
          break;
      }
      if ( puiBuffSize )
        *puiBuffSize = uiBuffSize + v11;
      result = v10;
    }
    else
    {
      if ( puiBuffSize )
        *puiBuffSize = 5;
      result = 0;
    }
  }
  return result;
}
// 9C523C: using guessed type int (__thiscall *ItemByteLot___vftable_)(void *p, char);
// 9C528C: using guessed type int (__thiscall *ItemWordLot___vftable_)(void *p, char);
// 9C52DC: using guessed type int (__thiscall *ItemDwrdLot___vftable_)(void *p, char);
// 9C532C: using guessed type int (__thiscall *ItemQuest___vftable_)(void *p, char);
// 9C537C: using guessed type int (__thiscall *ItemAmulet___vftable_)(void *p, char);
// 9C53CC: using guessed type int (__thiscall *ItemWeapon___vftable_)(void *p, char);
// 9C5424: using guessed type int (__thiscall *ItemCostumeWeapon___vftable_)(void *p, char);
// 9C5484: using guessed type int (__thiscall *ItemArmor___vftable_)(void *p, char);
// 9C54D4: using guessed type int (__thiscall *ItemShield___vftable_)(void *p, char);
// 9C5524: using guessed type int (__thiscall *ItemCostumeShield___vftable_)(void *p, char);
// 9C5584: using guessed type int (__thiscall *ItemBoot___vftable_)(void *p, char);
// 9C55D4: using guessed type int (__thiscall *ItemFurniture___vftable_)(void *p, char);
// 9C5624: using guessed type int (__thiscall *ItemDecoration___vftable_)(void *p, char);
// 9C5674: using guessed type int (__thiscall *ItemSkillScroll___vftable_)(void *p, char);
// 9C56C4: using guessed type int (__thiscall *ItemRecallScroll___vftable_)(void *p, char);
// 9C5714: using guessed type int (__thiscall *ItemUpgradeSource___vftable_)(void *p, char);
// 9C5764: using guessed type int (__thiscall *ItemBind___vftable_)(void *p, char);
// 9C57B4: using guessed type int (__thiscall *ItemChest___vftable_)(void *p, char);
// 9C5804: using guessed type int (__thiscall *ItemGBCoin___vftable_)(void *p, char);
// 9C5854: using guessed type int (__thiscall *ItemCapsule___vftable_)(void *p, char);
// 9C58AC: using guessed type int (__thiscall *ItemEnchant___vftable_)(void *p, char);
// 9C58FC: using guessed type int (__thiscall *ItemWeaponTitleLicense___vftable_)(void *p, char);
// 9C594C: using guessed type int (__thiscall *ItemKQ___vftable_)(void *p, char);
// 9C599C: using guessed type int (__thiscall *ItemHouseSkin___vftable_)(void *p, char);
// 9C59EC: using guessed type int (__thiscall *ItemUpRed___vftable_)(void *p, char);
// 9C5A3C: using guessed type int (__thiscall *ItemUpBlue___vftable_)(void *p, char);
// 9C5A8C: using guessed type int (__thiscall *ItemKQStep___vftable_)(void *p, char);
// 9C5ADC: using guessed type int (__thiscall *ItemFeed___vftable_)(void *p, char);
// 9C5B2C: using guessed type int (__thiscall *ItemRiding___vftable_)(void *p, char);
// 9C5B7C: using guessed type int (__thiscall *ItemAmount___vftable_)(void *p, char);
// 9C5BCC: using guessed type int (__thiscall *ItemUpGold___vftable_)(void *p, char);
// 9C5C1C: using guessed type int (__thiscall *ItemChargedAction___vftable_)(void *p, char);
// 9C5C6C: using guessed type int (__thiscall *ItemCollectCloseCard___vftable_)(void *p, char);
// 9C5CBC: using guessed type int (__thiscall *ItemCollectOpenCard___vftable_)(void *p, char);
// 9C5D0C: using guessed type int (__thiscall *ItemNoEffect___vftable_)(void *p, char);
// 9C5D5C: using guessed type int (__thiscall *ItemActiveskill___vftable_)(void *p, char);
// 9C5DAC: using guessed type int (__thiscall *ItemPet___vftable_)(void *p, char);
// 9C5E0C: using guessed type int (__thiscall *ItemBracelet___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00672B90) --------------------------------------------------------
Item *__cdecl Item::Create(unsigned __int16 kID)
{
  int v1; // edi@1
  int (__thiscall *v2)(_DWORD, _DWORD); // eax@1
  int v3; // edx@3
  int v4; // eax@4
  Item *v5; // eax@7
  Item *v6; // esi@7
  int v7; // eax@7
  char kStruct[2]; // [sp+8h] [bp-6Ch]@1
  __int16 v10; // [sp+11h] [bp-63h]@6
  __int16 v11; // [sp+17h] [bp-5Dh]@6
  __int16 v12; // [sp+1Dh] [bp-57h]@6
  unsigned int v13; // [sp+70h] [bp-4h]@1
  int v14; // [sp+74h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  memset(kStruct, 0, 0x67u);
  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v2 = *(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16);
  *(_WORD *)kStruct = kID;
  if ( (unsigned __int8)v2(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable, kID) )
  {
    if ( kID <= *(_WORD *)(v1 + 200) )
    {
      v3 = *(_DWORD *)(v1 + 196);
      if ( *(_DWORD *)(v3 + 4 * kID) )
      {
        v4 = *(_DWORD *)(v3 + 4 * kID);
        if ( v4 )
        {
          if ( *(_DWORD *)(v4 + 102) == 5 )
          {
            v10 = -1;
            v11 = -1;
            v12 = -1;
          }
        }
      }
    }
  }
  v5 = Item::Create((SHINE_ITEM_STRUCT *)kStruct);
  v6 = v5;
  v7 = ((int (__thiscall *)(Item *))v5->baseclass_0.vfptr[12].__vecDelDtor)(v5);
  if ( v7 )
    *(_BYTE *)v7 = 1;
  return v6;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (00672C40) --------------------------------------------------------
void __thiscall ItemCostumeWeapon::SetMaxCharged(ItemCostumeWeapon *this)
{
  ItemCostumeWeapon *v1; // esi@1
  ChargedItemEffect *v2; // eax@1

  v1 = this;
  v2 = ChargedEffectTable::GetByInxName(this->baseclass_0.m_pkInfo->InxName, 0);
  if ( v2 )
  {
    if ( v2->EffectEnum == 28 )
      v1->m_dwMaxCharged = v2->EffectValue;
  }
}

//----- (00672C70) --------------------------------------------------------
void __thiscall ItemCostumeShield::SetMaxCharged(ItemCostumeShield *this)
{
  ItemCostumeShield *v1; // esi@1
  ChargedItemEffect *v2; // eax@1

  v1 = this;
  v2 = ChargedEffectTable::GetByInxName(this->baseclass_0.m_pkInfo->InxName, 0);
  if ( v2 )
  {
    if ( v2->EffectEnum == 28 )
      v1->m_dwMaxCharged = v2->EffectValue;
  }
}

//----- (00672CA0) --------------------------------------------------------
unsigned int __cdecl ItemAmulet::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff)
{
  char v2; // cl@1
  unsigned int v3; // esi@1

  memcpy(&kStruct->itemattr, pbyBuff, 0x3Eu);
  v2 = kStruct->itemattr.amulet.option.fixed.optionnumber.str._bf0;
  kStruct->itemattr.amulet.option.fixed.optionnumber.str._bf0 = v2;
  v3 = 3 * ((unsigned int)(unsigned __int8)v2 >> 1);
  memcpy((char *)kStruct->itemattr.amulet.option.optionlist, (char *)kStruct->itemattr.amulet.option.optionlist, v3);
  return v3 + 38;
}

//----- (00672CE0) --------------------------------------------------------
unsigned int __cdecl ItemWeapon::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff)
{
  char v2; // cl@1
  unsigned int v3; // esi@1

  memcpy(&kStruct->itemattr, pbyBuff, 0x59u);
  v2 = kStruct->itemattr.weapon.option.fixed.optionnumber.str._bf0;
  kStruct->itemattr.weapon.option.fixed.optionnumber.str._bf0 = v2;
  v3 = 3 * ((unsigned int)(unsigned __int8)v2 >> 1);
  memcpy((char *)kStruct->itemattr.weapon.option.optionlist, (char *)kStruct->itemattr.weapon.option.optionlist, v3);
  return v3 + 65;
}

//----- (00672D20) --------------------------------------------------------
unsigned int __cdecl ItemChest::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff)
{
  int v2; // esi@1

  kStruct->itemattr.blot.lot = *pbyBuff;
  v2 = 8 * (*pbyBuff & 0xF);
  memcpy((char *)&kStruct->itemattr.wlot.lot + 1, pbyBuff + 1, 8 * (*pbyBuff & 0xF));
  return v2 + 1;
}

//----- (00672D50) --------------------------------------------------------
unsigned int __cdecl ItemRiding::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff)
{
  *(_QWORD *)&kStruct->itemattr.blot.lot = *(_QWORD *)pbyBuff;
  *(_QWORD *)&kStruct->itemattr.amulet.upgrade = *((_QWORD *)pbyBuff + 1);
  kStruct->itemattr.amulet.UpgradeOption.optionlist[1].itemoption_value = *((_WORD *)pbyBuff + 8);
  kStruct->itemattr.amulet.UpgradeOption.optionlist[2].itemoption_type = pbyBuff[18];
  return 19;
}

//----- (00672D90) --------------------------------------------------------
unsigned int __cdecl ItemBracelet::SetStructAttr(SHINE_ITEM_STRUCT *kStruct, char *pbyBuff)
{
  char v2; // cl@1
  unsigned int v3; // esi@1

  memcpy(&kStruct->itemattr, pbyBuff, 0x25u);
  v2 = kStruct->itemattr.amulet.UpgradeOption.optionlist[0].itemoption_type;
  kStruct->itemattr.amulet.UpgradeOption.optionlist[0].itemoption_type = v2;
  v3 = 3 * ((unsigned int)(unsigned __int8)v2 >> 1);
  memcpy(
    (char *)&kStruct->itemattr.amulet.UpgradeOption.optionlist[0].itemoption_value,
    (char *)&kStruct->itemattr.amulet.UpgradeOption.optionlist[0].itemoption_value,
    v3);
  return v3 + 13;
}

//----- (00672DD0) --------------------------------------------------------
unsigned int __thiscall Item::GetMaxLot(Item *this)
{
  return this->m_pkInfo->MaxLot;
}

//----- (00672DE0) --------------------------------------------------------
bool __thiscall Item::IsAlike(Item *this, Item *pkItem)
{
  return this->m_kStruct.itemid == pkItem->m_kStruct.itemid
      && LOBYTE(this->m_pkInfo->Type) == LOBYTE(pkItem->m_pkInfo->Type);
}

//----- (00672E10) --------------------------------------------------------
unsigned int __thiscall ItemWordLot::GetLot(ItemActiveskill *this)
{
  return *(_WORD *)&this->baseclass_0.m_kStruct.itemattr.blot.lot;
}

//----- (00672E20) --------------------------------------------------------
bool __thiscall Item::IsSplitable(ItemWordLot *this)
{
  return (unsigned int)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[3].__vecDelDtor)() > 1;
}

//----- (00672E30) --------------------------------------------------------
char __thiscall ItemDwrdLot::GetClass(ItemDwrdLot *this)
{
  return 2;
}

//----- (00672E40) --------------------------------------------------------
void __thiscall ItemDwrdLot::SetLot(ItemDwrdLot *this, char uiLot)
{
  *(_DWORD *)&this->baseclass_0.m_kStruct.itemattr.blot.lot = (unsigned __int8)uiLot;
}

//----- (00672E50) --------------------------------------------------------
int __thiscall ItemDwrdLot::GetStructSize(NiSpecularProperty *this)
{
  return 6;
}

//----- (00672E60) --------------------------------------------------------
char __thiscall ItemQuest::GetClass(ItemQuest *this)
{
  return 3;
}

//----- (00672E70) --------------------------------------------------------
char __thiscall ItemAmulet::GetClass(ItemAmulet *this)
{
  return 4;
}

//----- (00672E80) --------------------------------------------------------
unsigned int __thiscall ItemAmulet::GetStructSize(ItemAmulet *this)
{
  return 64;
}

//----- (00672E90) --------------------------------------------------------
int __thiscall ItemBracelet::GetCurUpGradeLevel(ItemBracelet *this)
{
  return this->baseclass_0.m_kStruct.itemattr.amulet.upgrade;
}

//----- (00672EA0) --------------------------------------------------------
ItemOptionStorage *__thiscall ItemAmulet::GetUpgradeOpt(ItemAmulet *this)
{
  return &this->baseclass_0.m_kStruct.itemattr.amulet.UpgradeOption;
}

//----- (00672EB0) --------------------------------------------------------
ItemOptionStorage *__thiscall ItemAmulet::GetItemOption(ItemAmulet *this)
{
  return &this->baseclass_0.m_kStruct.itemattr.amulet.option;
}

//----- (00672EC0) --------------------------------------------------------
char __thiscall ItemAmulet::GetRandomOptChangedCnt(ItemAmulet *this)
{
  return this->baseclass_0.m_kStruct.itemattr.amulet.randomOptionChangedCount;
}

//----- (00672ED0) --------------------------------------------------------
char __thiscall ItemWeapon::GetClass(ItemWeapon *this)
{
  return 5;
}

//----- (00672EE0) --------------------------------------------------------
unsigned int __thiscall ItemWeapon::GetStructSize(ItemWeapon *this)
{
  return 91;
}

//----- (00672EF0) --------------------------------------------------------
ItemOptionStorage *__thiscall ItemWeapon::GetItemOption(ItemWeapon *this)
{
  return &this->baseclass_0.m_kStruct.itemattr.weapon.option;
}

//----- (00672F00) --------------------------------------------------------
ShineDateTime *__thiscall ItemWeapon::GetDeleteTime(ItemWeapon *this)
{
  return (ShineDateTime *)&this->baseclass_0.m_kStruct.itemattr.amulet.option.optionlist[7];
}

//----- (00672F10) --------------------------------------------------------
char __thiscall ItemWeapon::GetRandomOptChangedCnt(ItemWeapon *this)
{
  return this->baseclass_0.m_kStruct.itemattr.weapon.randomOptionChangedCount;
}

//----- (00672F20) --------------------------------------------------------
char __thiscall ItemCostumeWeapon::GetClass(ItemCostumeWeapon *this)
{
  return 26;
}

//----- (00672F30) --------------------------------------------------------
unsigned int __thiscall ItemCollectCloseCard::GetSerialNumber(ItemCollectOpenCard *this)
{
  return *(_DWORD *)&this->baseclass_0.m_kStruct.itemattr.blot.lot;
}

//----- (00672F40) --------------------------------------------------------
void __thiscall ItemCostumeShield::SetChargedAmount(ItemCostumeShield *this, unsigned int dwChargedAmount)
{
  *(_DWORD *)&this->baseclass_0.m_kStruct.itemattr.blot.lot = dwChargedAmount;
}

//----- (00672F50) --------------------------------------------------------
unsigned int __thiscall ItemCostumeShield::GetMaxCharged(ItemCostumeShield *this)
{
  return this->m_dwMaxCharged;
}

//----- (00672F60) --------------------------------------------------------
char __thiscall ItemArmor::GetClass(ItemArmor *this)
{
  return 6;
}

//----- (00672F70) --------------------------------------------------------
unsigned int __thiscall ItemArmor::GetStructSize(ItemBracelet *this)
{
  return 39;
}

//----- (00672F80) --------------------------------------------------------
ShineDateTime *__thiscall ItemArmor::GetDeleteTime(ItemBoot *this)
{
  return (ShineDateTime *)((char *)&this->baseclass_0.m_kStruct.itemattr.amulet.IsPutOnBelonged + 3);
}

//----- (00672F90) --------------------------------------------------------
char __thiscall ItemShield::GetClass(ItemShield *this)
{
  return 7;
}

//----- (00672FA0) --------------------------------------------------------
ItemOptionStorage *__thiscall ItemBracelet::GetItemOption(ItemBracelet *this)
{
  return (ItemOptionStorage *)((char *)&this->baseclass_0.m_kStruct.itemattr.amulet.UpgradeOption + 1);
}

//----- (00672FB0) --------------------------------------------------------
char __thiscall ItemBoot::GetRandomOptChangedCnt(ItemBracelet *this)
{
  return this->baseclass_0.m_kStruct.itemattr.amulet.UpgradeOption.fixed.optionnumber.str._bf0;
}

//----- (00672FC0) --------------------------------------------------------
char __thiscall ItemCostumeShield::GetClass(ItemCostumeShield *this)
{
  return 37;
}

//----- (00672FD0) --------------------------------------------------------
char __thiscall ItemBoot::GetClass(ItemBoot *this)
{
  return 8;
}

//----- (00672FE0) --------------------------------------------------------
char __thiscall ItemFurniture::GetClass(ItemFurniture *this)
{
  return 9;
}

//----- (00672FF0) --------------------------------------------------------
unsigned int __thiscall ItemFurniture::GetStructSize(ItemFurniture *this)
{
  return 38;
}

//----- (00673000) --------------------------------------------------------
char __thiscall ItemDecoration::GetClass(ItemDecoration *this)
{
  return 10;
}

//----- (00673010) --------------------------------------------------------
int __thiscall NiWireframeProperty::Type(NiWireframeProperty *this)
{
  return 10;
}

//----- (00673020) --------------------------------------------------------
ShineDateTime *__thiscall ItemAmulet::GetDeleteTime(ItemBracelet *this)
{
  return (ShineDateTime *)&this->baseclass_0.m_kStruct.itemattr;
}

//----- (00673030) --------------------------------------------------------
char __thiscall ItemSkillScroll::GetClass(ItemSkillScroll *this)
{
  return 11;
}

//----- (00673040) --------------------------------------------------------
char __thiscall ItemRecallScroll::GetClass(ItemRecallScroll *this)
{
  return 12;
}

//----- (00673050) --------------------------------------------------------
char __thiscall ItemUpgradeSource::GetClass(ItemUpgradeSource *this)
{
  return 14;
}

//----- (00673060) --------------------------------------------------------
char __thiscall ItemBind::GetClass(ItemBind *this)
{
  return 13;
}

//----- (00673070) --------------------------------------------------------
char __thiscall ItemChest::GetClass(ItemChest *this)
{
  return 15;
}

//----- (00673080) --------------------------------------------------------
char __thiscall ItemGBCoin::GetClass(ItemGBCoin *this)
{
  return 29;
}

//----- (00673090) --------------------------------------------------------
char __thiscall ItemCapsule::GetClass(ItemCapsule *this)
{
  return 28;
}

//----- (006730A0) --------------------------------------------------------
unsigned int __thiscall ItemCapsule::GetStructSize(ItemCapsule *this)
{
  return 14;
}

//----- (006730B0) --------------------------------------------------------
char __thiscall ItemEnchant::GetClass(ItemEnchant *this)
{
  return 35;
}

//----- (006730C0) --------------------------------------------------------
unsigned int __thiscall ItemShield::GetCurUpGradeLevel(ItemNoEffect *this)
{
  return this->baseclass_0.m_kStruct.itemattr.blot.lot;
}

//----- (006730D0) --------------------------------------------------------
NiDynamicEffect::EffectType __thiscall ItemByteLot::GetStructSize(NiSpotLight *this)
{
  return 3;
}

//----- (006730E0) --------------------------------------------------------
char __thiscall ItemWeaponTitleLicense::GetClass(ItemWeaponTitleLicense *this)
{
  return 16;
}

//----- (006730F0) --------------------------------------------------------
char __thiscall ItemKQ::GetClass(ItemKQ *this)
{
  return 17;
}

//----- (00673100) --------------------------------------------------------
char __thiscall ItemHouseSkin::GetClass(ItemHouseSkin *this)
{
  return 18;
}

//----- (00673110) --------------------------------------------------------
char __thiscall ItemUpRed::GetClass(ItemUpRed *this)
{
  return 19;
}

//----- (00673120) --------------------------------------------------------
char __thiscall ItemUpBlue::GetClass(ItemUpBlue *this)
{
  return 20;
}

//----- (00673130) --------------------------------------------------------
char __thiscall ItemKQStep::GetClass(ItemKQStep *this)
{
  return 21;
}

//----- (00673140) --------------------------------------------------------
void *__thiscall ShortCutSkill::_scalar_deleting_destructor_(CPostProcessEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (00673170) --------------------------------------------------------
char __thiscall ItemFeed::GetClass(ItemFeed *this)
{
  return 22;
}

//----- (00673180) --------------------------------------------------------
char __thiscall ItemRiding::GetClass(ItemRiding *this)
{
  return 23;
}

//----- (00673190) --------------------------------------------------------
unsigned int __thiscall ItemRiding::GetStructSize(ItemRiding *this)
{
  return 21;
}

//----- (006731A0) --------------------------------------------------------
int __thiscall ItemRiding::GetCurMoverLevel(ItemRiding *this)
{
  return LOBYTE(this->baseclass_0.m_kStruct.itemattr.amulet.UpgradeOption.optionlist[1].itemoption_value);
}

//----- (006731B0) --------------------------------------------------------
char __thiscall ItemAmount::GetClass(ItemAmount *this)
{
  return 24;
}

//----- (006731C0) --------------------------------------------------------
char __thiscall ItemUpGold::GetClass(ItemUpGold *this)
{
  return 25;
}

//----- (006731D0) --------------------------------------------------------
char __thiscall ItemChargedAction::GetClass(ItemChargedAction *this)
{
  return 27;
}

//----- (006731E0) --------------------------------------------------------
char __thiscall ItemCollectCloseCard::GetClass(ItemCollectCloseCard *this)
{
  return 30;
}

//----- (006731F0) --------------------------------------------------------
int __thiscall ItemCollectCloseCard::GetStructSize(NiZBufferProperty *this)
{
  return 11;
}

//----- (00673200) --------------------------------------------------------
unsigned int __thiscall ItemCollectCloseCard::GetCardID(ItemCollectCloseCard *this)
{
  return LOWORD(this->baseclass_0.m_kStruct.itemattr.amulet.IsPutOnBelonged);
}

//----- (00673210) --------------------------------------------------------
unsigned int __thiscall ItemCollectCloseCard::GetStar(ItemCollectCloseCard *this)
{
  return BYTE2(this->baseclass_0.m_kStruct.itemattr.amulet.IsPutOnBelonged);
}

//----- (00673220) --------------------------------------------------------
unsigned int __thiscall ItemCollectCloseCard::GetGroup(ItemCollectCloseCard *this)
{
  return *(_WORD *)((char *)&this->baseclass_0.m_kStruct.itemattr.amulet.IsPutOnBelonged + 3);
}

//----- (00673230) --------------------------------------------------------
char __thiscall ItemCollectOpenCard::GetClass(ItemCollectOpenCard *this)
{
  return 31;
}

//----- (00673240) --------------------------------------------------------
unsigned int __thiscall ItemCollectOpenCard::GetStar(ItemCollectOpenCard *this)
{
  return LOBYTE(this->baseclass_0.m_kStruct.itemattr.amulet.IsPutOnBelonged);
}

//----- (00673250) --------------------------------------------------------
char __thiscall ItemNoEffect::GetClass(ItemNoEffect *this)
{
  return 33;
}

//----- (00673260) --------------------------------------------------------
void __thiscall ItemNoEffect::SetLot(ItemNoEffect *this, char uiLot)
{
  this->baseclass_0.m_kStruct.itemattr.blot.lot = uiLot;
}

//----- (00673270) --------------------------------------------------------
char __thiscall ItemActiveskill::GetClass(ItemActiveskill *this)
{
  return 34;
}

//----- (00673280) --------------------------------------------------------
void __thiscall ItemQuest::SetLot(ItemActiveskill *this, char uiLot)
{
  *(_WORD *)&this->baseclass_0.m_kStruct.itemattr.blot.lot = (unsigned __int8)uiLot;
}

//----- (00673290) --------------------------------------------------------
char __thiscall ItemPet::GetClass(ItemPet *this)
{
  return 36;
}

//----- (006732A0) --------------------------------------------------------
unsigned int __thiscall ItemPet::GetPetID(ItemPet *this)
{
  return this->baseclass_0.m_kStruct.itemattr.amulet.IsPutOnBelonged;
}

//----- (006732B0) --------------------------------------------------------
const char *__thiscall ItemPet::GetName(ItemPet *this)
{
  return &this->baseclass_0.m_kStruct.itemattr.amulet.upgrade;
}

//----- (006732C0) --------------------------------------------------------
bool __thiscall ItemPet::GetSummoning(ItemPet *this)
{
  return LOBYTE(this->baseclass_0.m_kStruct.itemattr.amulet.UpgradeOption.optionlist[4].itemoption_value) != 0;
}

//----- (006732D0) --------------------------------------------------------
unsigned int __thiscall ItemPet::GetStructSize(ItemPet *this)
{
  return 28;
}

//----- (006732E0) --------------------------------------------------------
char __thiscall ItemBracelet::GetClass(ItemBracelet *this)
{
  return 38;
}

//----- (006732F0) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsOneHandSwordAniType(ItemInfo *pkInfo)
{
  WeaponTypeEnum v2; // eax@3

  return !pkInfo->TwoHand
      && ((v2 = pkInfo->WeaponType, v2 == 1)
       || v2 == 4
       || v2 == 5
       || v2 == 6
       || v2 == 7
       || v2 == 8
       || v2 == 9
       || v2 == 13);
}

//----- (00673340) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsDualWeaponAniType(ItemInfo *pkInfo)
{
  return pkInfo->WeaponType == 18;
}

//----- (00673360) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsTwoHandSwordAniType(ItemInfo *pkInfo)
{
  WeaponTypeEnum v2; // eax@3

  return pkInfo->TwoHand
      && ((v2 = pkInfo->WeaponType, v2 == 1)
       || v2 == 21
       || v2 == 5
       || v2 == 6
       || v2 == 7
       || v2 == 8
       || v2 == 9
       || v2 == 13
       || v2 == 17
       || v2 == 19);
}

//----- (006733B0) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsBowAniType(ItemInfo *pkInfo)
{
  return pkInfo->WeaponType == 2;
}

//----- (006733D0) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsCrossBowAniType(ItemInfo *pkInfo)
{
  return pkInfo->WeaponType == 10;
}

//----- (006733F0) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsOneHandStaffAniType(ItemInfo *pkInfo)
{
  return 0;
}

//----- (00673400) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsTwoHandStaffAniType(ItemInfo *pkInfo)
{
  WeaponTypeEnum v1; // eax@1
  bool result; // al@2

  v1 = pkInfo->WeaponType;
  if ( v1 == 3 )
    result = 1;
  else
    result = v1 == 11;
  return result;
}

//----- (00673420) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsTwoHandAxeAniType(ItemInfo *pkInfo)
{
  bool result; // al@2

  if ( pkInfo->TwoHand )
    result = pkInfo->WeaponType == 4;
  else
    result = 0;
  return result;
}

//----- (00673440) --------------------------------------------------------
bool __cdecl ItemInfoTab::IsInvincibleHammerType(ItemInfo *pkInfo)
{
  bool result; // al@2

  if ( pkInfo->TwoHand )
    result = pkInfo->WeaponType == 16;
  else
    result = 0;
  return result;
}

//----- (00673460) --------------------------------------------------------
const char *__cdecl ItemViewInfoTab::GetAniIconNameByID(unsigned __int16 id)
{
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable + 16))(id);
  return 0;
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (00673480) --------------------------------------------------------
unsigned int __cdecl ItemInfoTab::CheckCRC()
{
  int v0; // edi@1
  unsigned int v1; // esi@1
  unsigned int result; // eax@1
  void *v3; // ebx@2
  void *v4; // ST10_4@2
  void *v5; // ST18_4@2
  void *v6; // ST20_4@2
  void *v7; // ST28_4@2
  void *v8; // ST30_4@2
  void *v9; // STAC_4@2
  void *v10; // ST38_4@2
  void *v11; // ST40_4@2
  void *v12; // ST48_4@2
  void *v13; // ST50_4@2
  void *v14; // ST58_4@2
  void *v15; // ST60_4@2
  void *v16; // ST68_4@2
  void *v17; // ST70_4@2
  void *v18; // ST78_4@2
  void *v19; // ST80_4@2
  void *v20; // ST88_4@2
  void *v21; // ST90_4@2
  void *v22; // ST98_4@2
  void *v23; // STA0_4@2
  void *v24; // STA8_4@2
  void *v25; // STB0_4@2
  void *v26; // STB8_4@2
  void *v27; // STC0_4@2
  void *v28; // STC8_4@2
  void *v29; // STCC_4@2
  void *v30; // ST1C_4@2
  void *v31; // ST74_4@2
  void *v32; // ST44_4@2
  void *v33; // ST7C_4@2
  void *v34; // ST24_4@2
  void *v35; // ST2C_4@2
  void *v36; // ST84_4@2
  void *v37; // ST4C_4@2
  void *v38; // ST8C_4@2
  void *v39; // ST14_4@2
  void *v40; // STB4_4@2
  void *v41; // ST64_4@2
  void *v42; // STBC_4@2
  void *v43; // ST3C_4@2
  void *v44; // STC4_4@2
  void *v45; // ST6C_4@2
  void *v46; // ST94_4@2
  void *v47; // ST54_4@2
  void *v48; // ST9C_4@2
  void *v49; // ST34_4@2
  void *v50; // STA4_4@2
  void *v51; // ST5C_4@2
  int v52; // edx@2

  v0 = 0;
  v1 = 0;
  result = ITableBase<ItemInfo_ItemInfoTab>::GetTotal();
  if ( result )
  {
    do
    {
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v11 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v12 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v13 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v15 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v17 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v18 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v19 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v20 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v21 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v22 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v23 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v24 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v25 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v26 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v27 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v28 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v29 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v30 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v31 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v32 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v33 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v34 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v35 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v36 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v37 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v38 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v39 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v40 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v41 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v42 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v43 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v44 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v45 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v46 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v47 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v48 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v49 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v50 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v51 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v1);
      v52 = *(_DWORD *)((char *)v14 + 139)
          + *(_DWORD *)((char *)v15 + 143)
          + *(_DWORD *)((char *)v16 + 147)
          + *(_DWORD *)((char *)v17 + 151)
          + *(_DWORD *)((char *)v18 + 155)
          + *(_DWORD *)((char *)v19 + 159)
          + *(_DWORD *)((char *)v20 + 163)
          + *(_DWORD *)((char *)v21 + 167)
          + *(_DWORD *)((char *)v22 + 171)
          + *(_DWORD *)((char *)v23 + 175)
          + *(_DWORD *)((char *)v24 + 179)
          + *(_DWORD *)((char *)v25 + 183)
          + *(_DWORD *)((char *)v26 + 187)
          + *(_DWORD *)((char *)v27 + 191)
          + *(_DWORD *)((char *)v28 + 195)
          + *(_DWORD *)((char *)v29 + 199)
          + *(_DWORD *)((char *)v30 + 203)
          + *(_DWORD *)((char *)v31 + 207)
          + *(_DWORD *)((char *)v32 + 211)
          + *(_DWORD *)((char *)v33 + 215)
          + *((_DWORD *)v35 + 55)
          + *((_DWORD *)v36 + 56)
          + *((_DWORD *)v37 + 57)
          + *((_DWORD *)v38 + 58)
          + *((_DWORD *)v39 + 59)
          + *(_DWORD *)((char *)v46 + 250)
          + *(_DWORD *)((char *)v47 + 254)
          + *(_DWORD *)((char *)v48 + 258)
          + *(_DWORD *)((char *)v49 + 262)
          + *(_DWORD *)((char *)v50 + 266)
          + *(_DWORD *)((char *)v51 + 270)
          + *(_DWORD *)((char *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4),
                                  v1++)
                      + 274)
          + *((_BYTE *)v9 + 122)
          + *((_BYTE *)v34 + 219)
          + *((_BYTE *)v40 + 240)
          + *(_WORD *)((char *)v41 + 241)
          + *(_WORD *)((char *)v42 + 243)
          + *(_WORD *)((char *)v43 + 245)
          + *((_BYTE *)v44 + 247)
          + *((_WORD *)v45 + 124);
      v0 = (*(_DWORD *)((char *)v3 + 98)
          + *(_DWORD *)((char *)v4 + 102)
          + *(_DWORD *)((char *)v5 + 106)
          + *(_DWORD *)((char *)v6 + 110)
          + *(_DWORD *)((char *)v7 + 114)
          + *(_DWORD *)((char *)v8 + 118)
          + *(_DWORD *)((char *)v10 + 123)
          + *(_DWORD *)((char *)v11 + 127)
          + *(_DWORD *)((char *)v12 + 131)
          + *(_DWORD *)((char *)v13 + 135)
          + v52
          + v0) ^ 0x92;
      result = ITableBase<ItemInfo_ItemInfoTab>::GetTotal();
    }
    while ( v1 < result );
  }
  if ( ItemInfoTab::crcSum != v0 )
    terminate();
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// AA4F4C: using guessed type unsigned __int32 ItemInfoTab__crcSum;

//----- (00673A70) --------------------------------------------------------
unsigned int __cdecl ItemInfoTab::GenerateCRCSum()
{
  unsigned int v0; // esi@1
  unsigned int result; // eax@1
  void *v2; // edi@2
  void *v3; // ebx@2
  void *v4; // ST10_4@2
  void *v5; // ST18_4@2
  void *v6; // ST20_4@2
  void *v7; // ST28_4@2
  void *v8; // ST5C_4@2
  void *v9; // ST30_4@2
  void *v10; // ST38_4@2
  void *v11; // ST40_4@2
  void *v12; // ST48_4@2
  void *v13; // ST50_4@2
  void *v14; // ST58_4@2
  void *v15; // ST60_4@2
  void *v16; // ST68_4@2
  void *v17; // ST70_4@2
  void *v18; // ST78_4@2
  void *v19; // ST80_4@2
  void *v20; // ST88_4@2
  void *v21; // ST90_4@2
  void *v22; // ST98_4@2
  void *v23; // STA0_4@2
  void *v24; // STA8_4@2
  void *v25; // STB0_4@2
  void *v26; // STB8_4@2
  void *v27; // STC0_4@2
  void *v28; // STC8_4@2
  void *v29; // ST6C_4@2
  void *v30; // ST1C_4@2
  void *v31; // ST74_4@2
  void *v32; // ST44_4@2
  void *v33; // STAC_4@2
  void *v34; // ST7C_4@2
  void *v35; // ST2C_4@2
  void *v36; // ST84_4@2
  void *v37; // ST4C_4@2
  void *v38; // ST8C_4@2
  void *v39; // ST24_4@2
  void *v40; // STB4_4@2
  void *v41; // ST64_4@2
  void *v42; // STBC_4@2
  void *v43; // ST3C_4@2
  void *v44; // STC4_4@2
  void *v45; // ST14_4@2
  void *v46; // ST94_4@2
  void *v47; // ST54_4@2
  void *v48; // ST9C_4@2
  void *v49; // ST34_4@2
  void *v50; // STA4_4@2
  int v51; // edx@2

  v0 = 0;
  ItemInfoTab::crcSum = 0;
  result = ITableBase<ItemInfo_ItemInfoTab>::GetTotal();
  if ( result )
  {
    do
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v11 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v12 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v13 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v15 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v17 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v18 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v19 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v20 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v21 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v22 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v23 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v24 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v25 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v26 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v27 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v28 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v29 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v30 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v31 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v32 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v33 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v34 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v35 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v36 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v37 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v38 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v39 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v40 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v41 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v42 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v43 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v44 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v45 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v46 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v47 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v48 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v49 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v50 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v51 = *(_DWORD *)((char *)v13 + 139)
          + *(_DWORD *)((char *)v14 + 143)
          + *(_DWORD *)((char *)v15 + 147)
          + *(_DWORD *)((char *)v16 + 151)
          + *(_DWORD *)((char *)v17 + 155)
          + *(_DWORD *)((char *)v18 + 159)
          + *(_DWORD *)((char *)v19 + 163)
          + *(_DWORD *)((char *)v20 + 167)
          + *(_DWORD *)((char *)v21 + 171)
          + *(_DWORD *)((char *)v22 + 175)
          + *(_DWORD *)((char *)v23 + 179)
          + *(_DWORD *)((char *)v24 + 183)
          + *(_DWORD *)((char *)v25 + 187)
          + *(_DWORD *)((char *)v26 + 191)
          + *(_DWORD *)((char *)v27 + 195)
          + *(_DWORD *)((char *)v28 + 199)
          + *(_DWORD *)((char *)v29 + 203)
          + *(_DWORD *)((char *)v30 + 207)
          + *(_DWORD *)((char *)v31 + 211)
          + *(_DWORD *)((char *)v32 + 215)
          + *((_DWORD *)v34 + 55)
          + *((_DWORD *)v35 + 56)
          + *((_DWORD *)v36 + 57)
          + *((_DWORD *)v37 + 58)
          + *((_DWORD *)v38 + 59)
          + *(_DWORD *)((char *)v45 + 250)
          + *(_DWORD *)((char *)v46 + 254)
          + *(_DWORD *)((char *)v47 + 258)
          + *(_DWORD *)((char *)v48 + 262)
          + *(_DWORD *)((char *)v49 + 266)
          + *(_DWORD *)((char *)v50 + 270)
          + *(_DWORD *)((char *)CDataReader::GetRecord(
                                  (CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4),
                                  v0++)
                      + 274)
          + *((_BYTE *)v8 + 122)
          + *((_BYTE *)v33 + 219)
          + *((_BYTE *)v39 + 240)
          + *(_WORD *)((char *)v40 + 241)
          + *(_WORD *)((char *)v41 + 243)
          + *(_WORD *)((char *)v42 + 245)
          + *((_BYTE *)v43 + 247)
          + *((_WORD *)v44 + 124);
      ItemInfoTab::crcSum = (ItemInfoTab::crcSum
                           + *(_DWORD *)((char *)v2 + 98)
                           + *(_DWORD *)((char *)v3 + 102)
                           + *(_DWORD *)((char *)v4 + 106)
                           + *(_DWORD *)((char *)v5 + 110)
                           + *(_DWORD *)((char *)v6 + 114)
                           + *(_DWORD *)((char *)v7 + 118)
                           + *(_DWORD *)((char *)v9 + 123)
                           + *(_DWORD *)((char *)v10 + 127)
                           + *(_DWORD *)((char *)v11 + 131)
                           + *(_DWORD *)((char *)v12 + 135)
                           + v51) ^ 0x92;
      result = ITableBase<ItemInfo_ItemInfoTab>::GetTotal();
    }
    while ( v0 < result );
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// AA4F4C: using guessed type unsigned __int32 ItemInfoTab__crcSum;

//----- (00674050) --------------------------------------------------------
unsigned int __cdecl ItemInfoTab::BuildItemInfoMapByInxName()
{
  unsigned int v0; // edi@1
  unsigned int v1; // eax@1
  void *v2; // eax@2
  const char *v3; // ecx@2
  int v4; // eax@2
  int v5; // esi@2
  char v6; // dl@3
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *v7; // eax@4
  int v8; // esi@4
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v9; // ST04_4@4
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v10; // ST00_4@4
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v11; // eax@4
  char v12; // [sp+0h] [bp-58h]@5
  ItemInfo *_Val2; // [sp+8h] [bp-50h]@4
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> result; // [sp+Ch] [bp-4Ch]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > InxName; // [sp+2Ch] [bp-2Ch]@2
  unsigned int v16; // [sp+48h] [bp-10h]@1
  int v17; // [sp+54h] [bp-4h]@4
  int v18; // [sp+58h] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v0 = 0;
  v1 = ITableBase<ItemInfo_ItemInfoTab>::GetTotal();
  if ( v1 )
  {
    do
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v3 = (char *)v2 + 2;
      v4 = (int)((char *)v2 + 2);
      InxName.baseclass_0._Myres = 15;
      InxName.baseclass_0._Mysize = 0;
      InxName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v5 = v4 + 1;
      do
        v6 = *(_BYTE *)v4++;
      while ( v6 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&InxName, v3, v4 - v5);
      v17 = 0;
      _Val2 = (ItemInfo *)CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), v0);
      v7 = std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___ItemInfo__>(
             &result,
             &InxName,
             &_Val2);
      v8 = **(_DWORD **)&stru_AA4F54;
      v9 = *(std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node **)(**(_DWORD **)&stru_AA4F54 + 4);
      v10 = (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *)**(_DWORD **)&stru_AA4F54;
      LOBYTE(v17) = 1;
      v11 = std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo__>>(
              &stru_AA4F54,
              v10,
              v9,
              v7);
      if ( 134217726 - stru_AA4F54.baseclass_0._Mysize < 1 )
        std::_Xlength_error("list<T> too long");
      ++stru_AA4F54.baseclass_0._Mysize;
      *(_DWORD *)(v8 + 4) = v11;
      v11->_Prev->_Next = v11;
      std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Insert(
        &ItemInfoTab::m_ItemInfoMapByInxName,
        (std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *)&v12,
        (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *)(**(_DWORD **)&stru_AA4F54 + 8),
        **(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > **)&stru_AA4F54);
      if ( result.baseclass_0.first.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&result);
      result.baseclass_0.first.baseclass_0._Myres = 15;
      result.baseclass_0.first.baseclass_0._Mysize = 0;
      result.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v17 = -1;
      if ( InxName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&InxName);
      ++v0;
      v1 = ITableBase<ItemInfo_ItemInfoTab>::GetTotal();
    }
    while ( v0 < v1 );
  }
  return v1;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006741C0) --------------------------------------------------------
int std::_Copy_backward<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>>___std::_List_iterator<std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>>__>(...)
{
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v3; // ecx@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *result; // eax@1
  int v5; // esi@2

  v3 = _Last;
  for ( result = _Dest;
        v3 != _First;
        *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5 )
  {
    v5 = *(_DWORD *)&v3[-1].baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    --v3;
    --result;
  }
  return result;
}

//----- (006741F0) --------------------------------------------------------
CBaseObject **__thiscall std::allocator<QUEST_DATA__>::allocate(std::allocator<CBaseObject *> *this, unsigned int _Count)
{
  CBaseObject **result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x3FFFFFFF || (result = (CBaseObject **)operator new(4 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00674250) --------------------------------------------------------
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>>::_Splice_same(...)
{
  unsigned int v6; // edx@2
  int v7; // ecx@5

  if ( this != _Right )
  {
    v6 = this->baseclass_0.baseclass_0._Mysize;
    if ( 134217726 - v6 < _Count )
      std::_Xlength_error("list<T> too long");
    this->baseclass_0.baseclass_0._Mysize = _Count + v6;
    _Right->baseclass_0.baseclass_0._Mysize -= _Count;
  }
  **(_DWORD **)(*(_DWORD *)&_First + 4) = _Last;
  **(_DWORD **)(*(_DWORD *)&_Last + 4) = _Where;
  **(_DWORD **)(*(_DWORD *)&_Where + 4) = _First;
  v7 = *(_DWORD *)(*(_DWORD *)&_Where + 4);
  *(_DWORD *)(*(_DWORD *)&_Where + 4) = *(_DWORD *)(*(_DWORD *)&_Last + 4);
  *(_DWORD *)(*(_DWORD *)&_Last + 4) = *(_DWORD *)(*(_DWORD *)&_First + 4);
  *(_DWORD *)(*(_DWORD *)&_First + 4) = v7;
}

//----- (006742D0) --------------------------------------------------------
void __thiscall std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *this)
{
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *v1; // esi@1

  v1 = this;
  if ( this->baseclass_0.first.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->baseclass_0.first.baseclass_0._Myres = 15;
  v1->baseclass_0.first.baseclass_0._Mysize = 0;
  v1->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (00674300) --------------------------------------------------------
void __thiscall __1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a(std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *this)
{
  std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *v1; // esi@1

  v1 = this;
  if ( *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0._Mylast = 0;
  v1->baseclass_0._Myend = 0;
}

//----- (00674330) --------------------------------------------------------
int std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>>::erase(...)
{
  std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > v3; // esi@1
  std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *v4; // edi@1
  int v5; // ecx@1
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *v6; // eax@4
  int _Wherea; // [sp+14h] [bp+Ch]@1

  v3 = _Where;
  v4 = this;
  v5 = **(_DWORD **)&_Where;
  _Wherea = **(_DWORD **)&_Where;
  if ( v3 == *(_DWORD *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    v6 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  }
  else
  {
    **(_DWORD **)(*(_DWORD *)&v3 + 4) = **(_DWORD **)&v3;
    *(_DWORD *)(**(_DWORD **)&v3 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)(*(_DWORD *)&v3 + 28) >= 0x10u )
      operator delete(*(void **)(*(_DWORD *)&v3 + 8));
    *(_DWORD *)(*(_DWORD *)&v3 + 28) = 15;
    *(_DWORD *)(*(_DWORD *)&v3 + 24) = 0;
    *(_BYTE *)(*(_DWORD *)&v3 + 8) = 0;
    operator delete(*(void **)&v3);
    v6 = result;
    --v4->baseclass_0.baseclass_0._Mysize;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Wherea;
  }
  return v6;
}

//----- (006743A0) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ItemInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>_0>>::_Check_size(std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *this)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *v1; // ebx@1
  double v2; // st7@1
  unsigned int v3; // esi@1
  signed int v4; // eax@2
  std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *v5; // ecx@5
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *v6; // edi@5
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > v9; // ST08_4@9
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Val; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = this->_Max_bucket_size;
  v3 = this->_Maxidx;
  *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = (double)this->_List.baseclass_0.baseclass_0._Mysize
                                                                                 / (double)v3;
  if ( *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] > v2 )
  {
    v4 = 0;
    do
    {
      if ( v3 >= 0x1FFFFFFF )
        break;
      ++v4;
      v3 *= 2;
    }
    while ( v4 < 3 );
    v5 = (std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *)&this->_Vec;
    v6 = *(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > **)&v1->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
    _Val = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v6 != v1->_Vec.baseclass_0._Mylast )
    {
      v5 = (std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *)&v1->_Vec;
      v1->_Vec.baseclass_0._Mylast = v6;
    }
    __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
      v5,
      *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v5->baseclass_0.___u0.baseclass_0.dummy[0],
      2 * v3,
      &_Val);
    v1->_Mask = v3 - 1;
    v9 = *(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v1->_Maxidx = v3;
    std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ItemInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>_0>>::_Reinsert(
      v1,
      v9);
  }
}

//----- (00674450) --------------------------------------------------------
void __thiscall std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::_list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>(std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *this)
{
  void **v1; // esi@1

  v1 = (void **)this;
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>>::clear((std::list<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)this);
  operator delete(*v1);
}

//----- (00674470) --------------------------------------------------------
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Insert(...)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *v4; // ebx@1
  unsigned int v5; // esi@1
  unsigned int v6; // eax@1
  int v7; // edi@1
  int v8; // edx@3
  int v9; // ecx@3
  std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > v10; // esi@3
  int v11; // eax@3
  std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *v12; // edx@3
  unsigned int v13; // ebx@5
  unsigned int v14; // edi@6
  const char *v15; // eax@6
  unsigned int v16; // edx@8
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *v17; // ecx@10
  int v18; // eax@12
  bool v19; // sf@12
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > v20; // ecx@18
  int v21; // eax@20
  int v22; // edx@20
  int v23; // eax@20
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *v24; // eax@23
  std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *v25; // eax@27
  int v26; // edx@30
  int v27; // eax@31
  int v28; // [sp+Ch] [bp-14h]@3
  unsigned int v29; // [sp+10h] [bp-10h]@5
  std::list<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *thisa; // [sp+14h] [bp-Ch]@3
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *v31; // [sp+18h] [bp-8h]@1
  int v32; // [sp+1Ch] [bp-4h]@1

  v4 = this;
  v5 = this->_Mask;
  v31 = this;
  v6 = stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::operator__(
         (stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)this,
         &_Val->baseclass_0.first);
  v7 = v5 & v6;
  v32 = v5 & v6;
  if ( v4->_Maxidx <= (v5 & v6) )
  {
    v7 += -1 - (v5 >> 1);
    v32 = v7;
  }
  v8 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v9 = *(_DWORD *)(v8 + 8 * v7);
  v10 = *(std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *)&v4->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v11 = v8 + 8 * v7;
  v12 = &v4->_List;
  v28 = v9;
  thisa = &v4->_List;
  if ( v10 == v9
    || (v10 = (std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >)**(_DWORD **)(v11 + 4),
        v10 == v9) )
  {
LABEL_18:
    v20 = _Plist;
    if ( v10 != **(_DWORD **)&_Plist )
    {
      std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>>::_Splice_same(
        v12,
        v10,
        v12,
        _Plist.baseclass_0,
        *(std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *)_Plist,
        1u);
      v20 = _Plist;
    }
    v21 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
    v22 = *(_DWORD *)(v21 + 8 * v7);
    v23 = v21 + 8 * v7;
    if ( v22 == *(_DWORD *)&thisa->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      *(_DWORD *)v23 = v20;
      *(_DWORD *)(*(_DWORD *)&v31->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v32 + 4) = v20;
    }
    else
    {
      if ( v22 == v10 )
      {
        *(_DWORD *)v23 = v20;
      }
      else
      {
        v26 = **(_DWORD **)(v23 + 4);
        *(_DWORD *)(v23 + 4) = v26;
        if ( v26 != v20 )
        {
          v27 = *(_DWORD *)&v31->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v32 + 4;
          *(_DWORD *)v27 = *(_DWORD *)(*(_DWORD *)v27 + 4);
        }
      }
    }
    std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ItemInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>_0>>::_Check_size(v31);
    v25 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Plist;
    result->baseclass_0.second = 1;
    return v25;
  }
  v13 = _Val->baseclass_0.first.baseclass_0._Mysize;
  v29 = _Val->baseclass_0.first.baseclass_0._Myres;
  while ( 1 )
  {
    v10 = *(std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *)(*(_DWORD *)&v10 + 4);
    v14 = *(_DWORD *)(*(_DWORD *)&v10 + 24);
    v15 = (const char *)(*(_DWORD *)&v10 + 8);
    if ( *(_DWORD *)(*(_DWORD *)&v10 + 28) >= 0x10u )
      v15 = *(const char **)v15;
    v16 = v13;
    if ( v13 >= v14 )
      v16 = *(_DWORD *)(*(_DWORD *)&v10 + 24);
    v17 = _Val;
    if ( v29 >= 0x10 )
      v17 = *(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> **)&_Val->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
    v18 = std::char_traits<char>::compare(v17->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy, v15, v16);
    v19 = v18 < 0;
    if ( v18 )
      break;
    if ( v13 >= v14 )
    {
      LOBYTE(v18) = v13 != v14;
      v19 = v18 < 0;
      break;
    }
LABEL_16:
    if ( v10 == v28 )
      goto LABEL_17;
  }
  if ( v19 )
    goto LABEL_16;
  if ( v29 < 0x10 )
    v24 = _Val;
  else
    v24 = *(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> **)&_Val->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&v10 + 8),
         0,
         *(_DWORD *)(*(_DWORD *)&v10 + 24),
         v24->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy,
         v13) < 0 )
  {
    v10 = (std::_List_const_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >)**(_DWORD **)&v10;
LABEL_17:
    v4 = v31;
    v7 = v32;
    v12 = thisa;
    goto LABEL_18;
  }
  std::list<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>>::erase(
    thisa,
    (std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *)&_Val,
    _Plist.baseclass_0);
  v25 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v10;
  result->baseclass_0.second = 0;
  return v25;
}

//----- (006745F0) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ItemInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ItemInfo__>>_0>>::_Reinsert(std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *this, std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > _Last)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *v2; // esi@1
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > v3; // ST08_4@3
  bool v4; // bl@3
  std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> result; // [sp+4h] [bp-8h]@3
  int _Lasta; // [sp+14h] [bp+8h]@2

  v2 = this;
  if ( **(_DWORD **)&this->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] != _Last )
  {
    _Lasta = *(_DWORD *)(*(_DWORD *)&_Last + 4);
    do
    {
      v3 = (std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > >)**(_DWORD **)&v2->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v4 = v3 == _Lasta;
      std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Insert(
        v2,
        &result,
        (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *)(*(_DWORD *)&v3 + 8),
        v3);
    }
    while ( !v4 );
  }
}

//----- (00674640) --------------------------------------------------------
int std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo__>>(...)
{
  void *v4; // edi@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v5; // edx@2
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *v6; // ebx@3
  int v8; // [sp-10h] [bp-30h]@1
  std::exception thisa; // [sp+0h] [bp-20h]@5
  void *p; // [sp+Ch] [bp-14h]@1
  int *v11; // [sp+10h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-4h]@2

  v11 = &v8;
  v4 = operator new(0x28u);
  p = v4;
  if ( !v4 )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  v12 = 0;
  *(_DWORD *)v4 = _Next;
  *((_DWORD *)v4 + 1) = v5;
  _Next = (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *)((char *)v4 + 8);
  _Prev = (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *)((char *)v4 + 8);
  LOBYTE(v12) = 1;
  if ( v4 != (void *)-8 )
  {
    v6 = _Val;
    *((_DWORD *)v4 + 7) = 15;
    *((_DWORD *)v4 + 6) = 0;
    *((_BYTE *)v4 + 8) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v4 + 8),
      &v6->baseclass_0.first);
    *((_DWORD *)v4 + 9) = v6->baseclass_0.second;
  }
  return (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00674710) --------------------------------------------------------
void __thiscall ItemRepairWin::_ItemRepairWin(ItemRepairWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRepairWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemRepairWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9C5FA0: using guessed type int (__stdcall *ItemRepairWin___vftable_)(int uiFlags);
// 9C5FBC: using guessed type int (__thiscall *ItemRepairWin___vftable_)(void *p, char);

//----- (00674730) --------------------------------------------------------
void __thiscall ItemRepairWin::OnCommand(ItemRepairWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[136].__vecDelDtor)();
      break;
    case 0xCu:
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)();
      break;
    case 0xDu:
      ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor)();
      break;
  }
}

//----- (00674780) --------------------------------------------------------
void __thiscall ItemRepairWin::OnClickWinCloseBtn(ItemRepairWin *this)
{
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor)();
}

//----- (00674790) --------------------------------------------------------
void __thiscall ItemRepairWin::Initialize(ItemRepairWin *this)
{
  this->m_bSentPacket = 0;
  this->m_pkRepairKit = 0;
  this->m_pkRepairItem = 0;
  this->m_wRepairKitValue = 0;
  this->m_dwCurrentCharged = 0;
  this->m_wMaxCharged = 0;
  this->m_pkMsgBox = 0;
}

//----- (006747D0) --------------------------------------------------------
void __thiscall ItemRepairWin::ItemRepairWin(ItemRepairWin *this)
{
  ItemRepairWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_bSentPacket = 0;
  v1->m_pkRepairKit = 0;
  v1->m_pkRepairItem = 0;
  v1->m_dwCurrentCharged = 0;
  v1->m_pkMsgBox = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRepairWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemRepairWin::_vftable_;
  v1->m_wRepairKitValue = 0;
  v1->m_wMaxCharged = 0;
}
// 9C5FA0: using guessed type int (__stdcall *ItemRepairWin___vftable_)(int uiFlags);
// 9C5FBC: using guessed type int (__thiscall *ItemRepairWin___vftable_)(void *p, char);

//----- (00674830) --------------------------------------------------------
void __thiscall ItemRepairWin::OnShowWin(ItemRepairWin *this)
{
  int v1; // edi@0
  ItemRepairWin *v2; // esi@1
  Item *v3; // eax@1
  NiRefObjectVtbl *v4; // edi@3
  char *v5; // eax@3
  NiRefObjectVtbl *v6; // ST18_4@3

  v2 = this;
  v3 = this->m_pkRepairItem;
  if ( v3 )
  {
    if ( this->m_pkRepairKit )
    {
      ((void (__stdcall *)(char *, int))this->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
        v3->m_pkInfo->Name,
        v1);
      v4 = v2->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = fs("%d");
      v4[118].__vecDelDtor((NiRefObject *)v2->m_pkTextFieldWin[1], (unsigned int)v5);
      v6 = v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      fs("(%d/%d) (%d%%)");
      ((void (__thiscall *)(PgWinText *))v6[118].__vecDelDtor)(v2->m_pkTextFieldWin[2]);
    }
  }
}

//----- (00674910) --------------------------------------------------------
void __thiscall ItemRepairWin::SetLockRepairItem(ItemRepairWin *this, ITEM_INVEN kFrom, bool bLock)
{
  if ( kFrom.Inven >> 10 == 8 )
  {
    InvWin::SetLock(
      *((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + (kFrom.Inven & 0x3FF) + 279),
      bLock);
  }
  else
  {
    if ( kFrom.Inven >> 10 == 9 )
      InvWin::SetLock(
        *((InvWin **)this->baseclass_0.m_pkFrameWork[19].m_BackFrameID + (kFrom.Inven & 0x3FF) + 87),
        bLock);
  }
}

//----- (00674980) --------------------------------------------------------
bool __thiscall ItemRepairWin::Create(ItemRepairWin *this, PgFrameWork *pkFrameWork)
{
  ItemRepairWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool v7; // zf@8
  bool result; // al@11
  PgSprData *v9; // eax@12
  NiNode *v10; // esi@13
  int v11; // edi@18
  int v12; // ebx@18
  NiSourceTexture *v13; // eax@18
  PgSprData *v14; // eax@21
  NiSourceTexture *v15; // eax@21
  PgSprData *v16; // eax@21
  PgFont *v17; // eax@25
  PgWinText *v18; // edi@25
  char *v19; // eax@25
  PgSprData *v20; // eax@25
  int v21; // edi@25
  PgSprData *v22; // eax@25
  NiPointer<PgSprData::PgHitTester> *v23; // ecx@25
  unsigned int v24; // ST7C_4@25
  PgFont *v25; // eax@25
  PgWinText *v26; // edi@25
  char *v27; // eax@25
  PgSprData *v28; // edi@25
  NiPointer<PgSprData::PgHitTester> *v29; // edx@25
  unsigned int v30; // edi@25
  PgFont *v31; // eax@25
  PgWinText *v32; // edi@25
  NiRefObjectVtbl *v33; // ebx@25
  char *v34; // eax@25
  PgSprData::PgHitTester *v35; // eax@25
  unsigned int v36; // edi@25
  unsigned int v37; // ebx@25
  PgFont *v38; // eax@25
  PgWinText *v39; // edi@25
  NiRefObjectVtbl *v40; // ebx@25
  char *v41; // eax@25
  NiPointer<PgSprData::PgHitTester> *v42; // ecx@25
  unsigned int v43; // edi@25
  unsigned int v44; // ebx@25
  PgFont *v45; // eax@25
  PgWinText *v46; // edi@25
  NiRefObjectVtbl *v47; // ebx@25
  char *v48; // eax@25
  PgSprData::PgHitTester *v49; // eax@25
  unsigned int v50; // edi@25
  unsigned int v51; // ebx@25
  PgFont *v52; // eax@25
  PgWinText *v53; // eax@25
  NiPointer<PgSprData::PgHitTester> *v54; // ecx@25
  unsigned int v55; // edi@25
  unsigned int v56; // ebx@25
  PgFont *v57; // eax@25
  PgWinText *v58; // eax@25
  NiPointer<PgSprData::PgHitTester> *v59; // ecx@25
  unsigned int v60; // edi@25
  unsigned int v61; // ebx@25
  PgFont *v62; // eax@25
  PgWinText *v63; // eax@25
  NiNode *v64; // esi@26
  const char *v65; // [sp+5Ch] [bp-48h]@19
  int *v66; // [sp+60h] [bp-44h]@19
  int *v67; // [sp+64h] [bp-40h]@19
  NiSourceTexture *v68; // [sp+68h] [bp-3Ch]@19
  unsigned int uiWidth; // [sp+80h] [bp-24h]@21
  unsigned int uiHeight; // [sp+84h] [bp-20h]@21
  int iYOff; // [sp+88h] [bp-1Ch]@18
  NiPointer<NiNode> spNode; // [sp+8Ch] [bp-18h]@1
  int iLeft; // [sp+90h] [bp-14h]@12
  int iTop; // [sp+94h] [bp-10h]@12
  int v75; // [sp+A0h] [bp-4h]@1
  NiRefObjectVtbl *pkSprData; // [sp+ACh] [bp+8h]@25
  PgSprData *pkSprDataa; // [sp+ACh] [bp+8h]@25
  PgSprData *pkSprDatab; // [sp+ACh] [bp+8h]@25
  unsigned int pkSprDatac; // [sp+ACh] [bp+8h]@25
  NiRefObjectVtbl *pkSprDatad; // [sp+ACh] [bp+8h]@25
  unsigned int pkSprDatae; // [sp+ACh] [bp+8h]@25

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v75 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MyHomeRepairKit.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeRepairKit.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v75 = -1;
    if ( !v5
      || (v6 = v5,
          InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_9;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "ItemRepairWin", 0) )
  {
    v11 = iTop;
    v12 = iLeft;
    iYOff = iTop;
    v13 = MenuTexMgr::GetTexture(0x13u);
    if ( v13 )
    {
      v68 = v13;
      v67 = &iTop;
      v66 = &iLeft;
      v65 = "Theme";
    }
    else
    {
      v68 = 0;
      v67 = &iTop;
      v66 = &iLeft;
      v65 = "Theme";
    }
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v65, v66, v67, v68);
    PgWinSpr::CreateWin(iLeft - v12, iTop - v11, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v15 = MenuTexMgr::GetTexture(4u);
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &iLeft, &iTop, v15);
    PgWinSpr::CreateWin(iLeft - v12, iTop - v11, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v6 = spNode.m_pObject;
      v75 = -1;
      if ( !spNode.m_pObject
        || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        return 0;
      v7 = v6 == 0;
LABEL_9:
      if ( !v7 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      return 0;
    }
    v17 = Font::Get(MAIN_MENU);
    v18 = PgWinText::CreateWin(
            iLeft - v12,
            iTop - v11,
            uiWidth,
            uiHeight,
            v17,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v18,
      1u);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v18,
      (unsigned int)&Color::m_kDxWinTitleColor);
    pkSprData = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = TextData2::Get(0x308D77B0u);
    pkSprData[118].__vecDelDtor((NiRefObject *)v18, (unsigned int)v19);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
    v21 = iYOff;
    PgWinSpr::CreateWin(iLeft - v12, iTop - iYOff, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - v12, iTop - v21, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkSprDataa = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
    PgSprData::Add(pkSprDataa, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkSprDataa, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(iLeft - v12, iTop - v21, pkSprDataa, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
    pkSprDatab = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &iLeft, &iTop, 0);
    PgSprData::Add(pkSprDatab, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(pkSprDatab, &spNode.m_pObject->baseclass_0, "Btn01Over");
    PgWinBut::CreateWin(iLeft - v12, iTop - v21, pkSprDatab, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    v23 = pkSprDatab->m_akHitTester.m_pBase;
    pkSprDatac = v23->m_pObject->m_uiHeight;
    v24 = v23->m_pObject->m_uiWidth;
    v25 = Font::Get(MAIN_MENU);
    v26 = PgWinText::CreateWin(
            iLeft - v12,
            iTop - v21,
            v24,
            pkSprDatac,
            v25,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v26,
      5u);
    pkSprDatad = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v27 = TextData::Get(0x4F5F499Fu);
    pkSprDatad[118].__vecDelDtor((NiRefObject *)v26, (unsigned int)v27);
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v26,
      0);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &iLeft, &iTop, 0);
    PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "Btn02Over");
    PgWinBut::CreateWin(iLeft - v12, iTop - iYOff, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
    v29 = v28->m_akHitTester.m_pBase;
    v30 = v29->m_pObject->m_uiHeight;
    pkSprDatae = v29->m_pObject->m_uiWidth;
    v31 = Font::Get(MAIN_MENU);
    v32 = PgWinText::CreateWin(
            iLeft - v12,
            iTop - iYOff,
            pkSprDatae,
            v30,
            v31,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v32,
      5u);
    v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v34 = TextData::Get(0x88A297E1u);
    v33[118].__vecDelDtor((NiRefObject *)v32, (unsigned int)v34);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v32,
      0);
    v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v36 = v35->m_uiHeight;
    v37 = v35->m_uiWidth;
    v38 = Font::Get(MAIN_MENU);
    v39 = PgWinText::CreateWin(iLeft, iTop, v37, v36, v38, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v39,
      5u);
    v40 = v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v41 = TextData2::Get(0x57819E74u);
    v40[118].__vecDelDtor((NiRefObject *)v39, (unsigned int)v41);
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v39,
      0);
    v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v43 = v42->m_pObject->m_uiHeight;
    v44 = v42->m_pObject->m_uiWidth;
    v45 = Font::Get(MAIN_MENU);
    v46 = PgWinText::CreateWin(iLeft, iTop, v44, v43, v45, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v46,
      5u);
    v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v48 = TextData2::Get(0xD8B71D1Au);
    v47[118].__vecDelDtor((NiRefObject *)v46, (unsigned int)v48);
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v46,
      0);
    v49 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v50 = v49->m_uiHeight;
    v51 = v49->m_uiWidth;
    v52 = Font::Get(MAIN_MENU);
    v53 = PgWinText::CreateWin(iLeft, iTop, v51, v50, v52, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkTextFieldWin[0] = v53;
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v53,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9C5E71);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextVal02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v55 = v54->m_pObject->m_uiHeight;
    v56 = v54->m_pObject->m_uiWidth;
    v57 = Font::Get(MAIN_MENU);
    v58 = PgWinText::CreateWin(iLeft, iTop, v56, v55, v57, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkTextFieldWin[1] = v58;
    v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v58,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9C5E72);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v59 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextVal03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v60 = v59->m_pObject->m_uiHeight;
    v61 = v59->m_pObject->m_uiWidth;
    v62 = Font::Get(MAIN_MENU);
    v63 = PgWinText::CreateWin(iLeft, iTop, v61, v60, v62, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkTextFieldWin[2] = v63;
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v63,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9C5E73);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__thiscall *)(ItemRepairWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v75 = -1;
    if ( spNode.m_pObject )
    {
      v64 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v64 )
          v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v64, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v10 = spNode.m_pObject;
    v75 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00675170) --------------------------------------------------------
void __thiscall ItemRepairWin::OnClickOKBtn(ItemRepairWin *this)
{
  ItemRepairWin *v1; // esi@1
  int v2; // eax@1
  unsigned int v3; // ecx@1
  GameFrameWork *v4; // esi@3
  char *v5; // eax@3
  char *v6; // eax@7
  MsgBox *v7; // eax@7
  bool v8; // zf@8
  char v9; // al@8
  unsigned int v10; // [sp-4h] [bp-Ch]@2
  int v11; // [sp+0h] [bp-8h]@0
  PROTO_NC_ITEM_SHIELDENDURE_CHARGE_REQ kProto; // [sp+4h] [bp-4h]@8

  v1 = this;
  v2 = this->m_wMaxCharged;
  v3 = this->m_dwCurrentCharged;
  if ( v3 == v2 )
  {
    v10 = 492846737;
LABEL_3:
    v4 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
    v5 = TextData2::Get(v10);
    GameFrameWork::AddSysMsg(v4, v5);
    return;
  }
  if ( v1->m_bSentPacket )
  {
    v10 = 123673116;
    goto LABEL_3;
  }
  if ( v1->m_wRepairKitValue <= v2 - v3 )
  {
    v8 = ((int (__stdcall *)(int))v1->m_pkRepairItem->baseclass_0.vfptr[1].__vecDelDtor)(v11) == 26;
    v9 = v1->m_byRepairKitSlot;
    kProto.ShieldSlot.Inven = v1->ms_ItemSlot.Inven;
    kProto.ChargingSlot = v9;
    if ( v8 )
    {
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x35u, &kProto, 3);
      v1->m_bSentPacket = 1;
    }
    else
    {
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x64u, &kProto, 3);
      v1->m_bSentPacket = 1;
    }
  }
  else
  {
    v6 = TextData2::Get(0xD8461A2Bu);
    v7 = MsgBox::Modal(MSGBOX_OKCANCEL, v6);
    v1->m_pkMsgBox = v7;
    ((void (__stdcall *)(IDirectMessenger *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
}

//----- (00675260) --------------------------------------------------------
void __thiscall ItemRepairWin::CancelItemRepair(ItemRepairWin *this)
{
  ItemRepairWin *v1; // esi@1
  void *v2; // edi@1
  GameFrameWork *v3; // edi@7
  char *v4; // eax@7
  NiRefObjectVtbl *v5; // edx@7
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@7

  v1 = this;
  dword_B30F24 = 0;
  v2 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  InventoryWin::ms_uiMode = 0;
  if ( this->m_pkRepairKit )
    InvWin::SetLock(*((InvWin **)v2 + this->m_byRepairKitSlot + 87), 0);
  if ( v1->m_pkRepairItem )
    ItemRepairWin::SetLockRepairItem(v1, v1->ms_ItemSlot, 0);
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 260))(v2) )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v2);
    GameFrameWork::OpenInventoryWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  }
  v3 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
  v4 = TextData2::Get(0x6EE2F3B5u);
  GameFrameWork::AddSysMsg(v3, v4);
  v5 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v1->m_wRepairKitValue = 0;
  v6 = v5[65].__vecDelDtor;
  v1->m_wMaxCharged = 0;
  v1->m_bSentPacket = 0;
  v1->m_pkRepairKit = 0;
  v1->m_pkRepairItem = 0;
  v1->m_dwCurrentCharged = 0;
  v1->m_pkMsgBox = 0;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v6)(v1) )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F24: using guessed type int dword_B30F24;

//----- (00675350) --------------------------------------------------------
void __thiscall ItemRepairWin::CompleteItemRepair(ItemRepairWin *this)
{
  ItemRepairWin *v1; // esi@1
  void *v2; // edi@1
  GameFrameWork *v3; // edi@7
  char *v4; // eax@7
  NiRefObjectVtbl *v5; // edx@7
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@7

  v1 = this;
  dword_B30F24 = 0;
  v2 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  InventoryWin::ms_uiMode = 0;
  if ( this->m_pkRepairKit )
    InvWin::SetLock(*((InvWin **)v2 + this->m_byRepairKitSlot + 87), 0);
  if ( v1->m_pkRepairItem )
    ItemRepairWin::SetLockRepairItem(v1, v1->ms_ItemSlot, 0);
  if ( (unsigned __int8)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 260))(v2) )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v2);
    GameFrameWork::OpenInventoryWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  }
  v3 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
  v4 = TextData2::Get(0x2F2F8D8Cu);
  GameFrameWork::AddSysMsg(v3, v4);
  v5 = v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v1->m_wRepairKitValue = 0;
  v6 = v5[65].__vecDelDtor;
  v1->m_wMaxCharged = 0;
  v1->m_bSentPacket = 0;
  v1->m_pkRepairKit = 0;
  v1->m_pkRepairItem = 0;
  v1->m_dwCurrentCharged = 0;
  v1->m_pkMsgBox = 0;
  if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v6)(v1) )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F24: using guessed type int dword_B30F24;

//----- (00675440) --------------------------------------------------------
void __thiscall ItemRepairWin::SetRepairItemSlot(ItemRepairWin *this, ITEM_INVEN kFrom)
{
  ItemRepairWin *v2; // esi@1
  int v3; // eax@2
  Item *v4; // eax@3
  int v5; // eax@6
  char v6; // al@10
  unsigned __int16 v7; // ax@12
  Item *v8; // ecx@12

  v2 = this;
  this->ms_ItemSlot.Inven = kFrom.Inven;
  if ( kFrom.Inven >> 10 == 8 )
  {
    v3 = kFrom.Inven & 0x3FF;
    if ( (unsigned int)v3 < 0x1E )
      v4 = g_kInventory.m_aspEquip[v3].m_pObject;
    else
      v4 = 0;
LABEL_9:
    this->m_pkRepairItem = v4;
    goto LABEL_10;
  }
  if ( kFrom.Inven >> 10 == 9 )
  {
    v5 = kFrom.Inven & 0x3FF;
    if ( (unsigned int)v5 < 0xC0 )
      v4 = g_kInventory.m_aspInv[v5].m_pObject;
    else
      v4 = 0;
    goto LABEL_9;
  }
LABEL_10:
  ItemRepairWin::SetLockRepairItem(this, kFrom, 1);
  v6 = ((int (*)(void))v2->m_pkRepairItem->baseclass_0.vfptr[1].__vecDelDtor)();
  if ( v6 == 26 || v6 == 37 )
  {
    v7 = ((int (*)(void))v2->m_pkRepairItem->baseclass_0.vfptr[21].__vecDelDtor)();
    v8 = v2->m_pkRepairItem;
    v2->m_wMaxCharged = v7;
    v2->m_dwCurrentCharged = ((int (*)(void))v8->baseclass_0.vfptr[19].__vecDelDtor)();
  }
}

//----- (006754F0) --------------------------------------------------------
void __thiscall ItemRepairWin::DirectMessage(ItemRepairWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ItemRepairWin *v4; // esi@1
  char v5; // al@4
  char v6; // al@5
  char v7; // al@7

  v4 = this;
  if ( iMsgTag == 27 && pvBody )
  {
    if ( *(_DWORD *)pvBody )
    {
      ItemRepairWin::CancelItemRepair((ItemRepairWin *)((char *)this - 232));
    }
    else
    {
      v5 = (*(int (**)(void))(*LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][1])
                            + 4))();
      if ( v5 == 26 )
      {
        v6 = LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]);
        *(_WORD *)((char *)&iMsgTag + 1) = *(_WORD *)((char *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]
                                                    + 1);
        LOBYTE(iMsgTag) = v6;
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x35u, &iMsgTag, 3);
      }
      else
      {
        if ( v5 == 37 )
        {
          v7 = LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]);
          *(_WORD *)((char *)&iMsgTag + 1) = *(_WORD *)((char *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2]
                                                      + 1);
          LOBYTE(iMsgTag) = v7;
          NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x64u, &iMsgTag, 3);
        }
      }
    }
  }
}

//----- (00675580) --------------------------------------------------------
void __thiscall ItemRepairWin::OnClickCancelBtn(ItemRepairWin *this)
{
  ItemRepairWin *v1; // esi@1
  PgFrameWork *v2; // eax@1

  v1 = this;
  dword_B30F24 = 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
  {
    if ( v2[19].m_BackFrameID )
    {
      ItemRepairWin::CancelItemRepair(v1);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
    }
  }
}
// B30F24: using guessed type int dword_B30F24;

//----- (006755C0) --------------------------------------------------------
void __thiscall ItemRepairWin::SetItemRepairKitSlot(ItemRepairWin *this, char byKitSlot)
{
  ItemRepairWin *v2; // esi@1
  Item *v3; // eax@2
  ChargedItemEffect *v4; // eax@4

  v2 = this;
  this->m_byRepairKitSlot = byKitSlot;
  if ( (unsigned __int8)byKitSlot < 0xC0u )
    v3 = g_kInventory.m_aspInv[(unsigned __int8)byKitSlot].m_pObject;
  else
    v3 = 0;
  this->m_pkRepairKit = v3;
  v4 = ChargedEffectTable::GetByInxName(v3->m_pkInfo->InxName, 0);
  if ( v4 )
  {
    if ( v4->EffectEnum == 27 )
      v2->m_wRepairKitValue = v4->EffectValue;
  }
}

//----- (00675620) --------------------------------------------------------
ItemRepairWin *__cdecl ItemRepairWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ItemRepairWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x184u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ItemRepairWin::ItemRepairWin((ItemRepairWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ItemRepairWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (00675750) --------------------------------------------------------
void *__thiscall ItemRepairWin::_vector_deleting_destructor_(ItemRepairWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRepairWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ItemRepairWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C5FA0: using guessed type int (__stdcall *ItemRepairWin___vftable_)(int uiFlags);
// 9C5FBC: using guessed type int (__thiscall *ItemRepairWin___vftable_)(void *p, char);

//----- (006757B0) --------------------------------------------------------
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_WEAPONENDURESET_CMD(ItemRepairTask *this, PROTO_NC_ITEM_WEAPONENDURESET_CMD *pkCmd)
{
  Item *v2; // eax@1

  v2 = Inventory::GetEquipedWeaponAcc(&g_kInventory);
  if ( v2 )
    v2->baseclass_0.vfptr[20].__vecDelDtor((NiRefObject *)v2, pkCmd->ChargedNumber);
}

//----- (006757E0) --------------------------------------------------------
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_SHIELDENDURESET_CMD(ItemRepairTask *this, PROTO_NC_ITEM_SHIELDENDURESET_CMD *pkCmd)
{
  Item *v2; // eax@1

  v2 = Inventory::GetEquipedShieldAcc(&g_kInventory);
  if ( v2 )
    v2->baseclass_0.vfptr[20].__vecDelDtor((NiRefObject *)v2, pkCmd->ChargedNumber);
}

//----- (00675810) --------------------------------------------------------
void __cdecl ItemRepairTask::Terminate()
{
  int v0; // esi@1

  v0 = ItemRepairTask::ms_spItemRepairTask;
  if ( ItemRepairTask::ms_spItemRepairTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(ItemRepairTask::ms_spItemRepairTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    ItemRepairTask::ms_spItemRepairTask = 0;
  }
}
// AA4F7C: using guessed type int ItemRepairTask__ms_spItemRepairTask;

//----- (00675850) --------------------------------------------------------
void __thiscall ItemRepairTask::OnIdle(ItemRepairTask *this, float fTime)
{
  ItemRepairTask *v2; // edi@1
  Item *v3; // esi@1
  signed int v4; // eax@2
  char *v5; // eax@4
  char *v6; // eax@4
  char *v7; // eax@8
  char *v8; // eax@8
  char *v9; // eax@23
  char *v10; // eax@23
  Item *v11; // esi@26
  signed int v12; // eax@27
  char *v13; // eax@29
  char *v14; // eax@29
  char *v15; // eax@33
  char *v16; // eax@33
  char *v17; // eax@48
  char *v18; // eax@48
  unsigned int v19; // [sp-Ch] [bp-2Ch]@21
  unsigned int v20; // [sp-Ch] [bp-2Ch]@46
  signed int iChargedPercentage; // [sp+14h] [bp-Ch]@2
  signed int iChargedPercentagea; // [sp+14h] [bp-Ch]@27
  float fCurrCharged; // [sp+18h] [bp-8h]@2
  float fCurrChargeda; // [sp+18h] [bp-8h]@27
  PgFrameWork *pkGame; // [sp+1Ch] [bp-4h]@2
  PgFrameWork *pkGamea; // [sp+1Ch] [bp-4h]@27

  v2 = this;
  v3 = Inventory::GetEquipedWeaponAcc(&g_kInventory);
  if ( v3 )
  {
    pkGame = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    fCurrCharged = (double)(unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[19].__vecDelDtor)(v3);
    iChargedPercentage = (signed int)(fCurrCharged
                                    / (double)(unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[21].__vecDelDtor)(v3)
                                    * 100.0);
    v4 = (signed int)fCurrCharged;
    if ( v4 )
    {
      if ( v4 >= 11 || v2->m_iOldCharged == v4 )
      {
        v2->m_iDisplayCount = 0;
      }
      else
      {
        v7 = TextData2::Get(0x273D858Cu);
        v8 = fs(v7);
        GameFrameWork::AddSysMsg((GameFrameWork *)pkGame, v8);
      }
      v2->m_iOldCharged = (signed int)fCurrCharged;
    }
    else
    {
      if ( v2->m_iOldCharged )
      {
        v5 = TextData2::Get(0xF3D5672u);
        v6 = fs(v5);
        GameFrameWork::AddSysMsg((GameFrameWork *)pkGame, v6);
      }
      v2->m_iOldCharged = 0;
    }
    if ( iChargedPercentage == 30 || iChargedPercentage == 10 || iChargedPercentage == 1 || !iChargedPercentage )
    {
      if ( v2->m_iOldChargedPercentage != iChargedPercentage )
      {
        v2->m_bDisplayMsg = 1;
        v2->m_iOldChargedPercentage = iChargedPercentage;
        goto LABEL_20;
      }
      if ( v2->m_bDisplayMsg && v2->m_iDisplayCount < 5 && fTime - v2->m_fPrevRefreshTime > 5.0 )
      {
LABEL_20:
        if ( iChargedPercentage )
          v19 = 116862768;
        else
          v19 = 255678066;
        v9 = TextData2::Get(v19);
        v10 = fs(v9);
        GameFrameWork::AddSysMsg((GameFrameWork *)pkGame, v10);
        ++v2->m_iDisplayCount;
        v2->m_fPrevRefreshTime = fTime;
        goto LABEL_26;
      }
      if ( v2->m_iDisplayCount > 4 )
      {
        v2->m_iDisplayCount = 0;
        v2->m_bDisplayMsg = 0;
      }
    }
  }
LABEL_26:
  v11 = Inventory::GetEquipedWeaponAcc(&g_kInventory);
  if ( v11 )
  {
    pkGamea = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    fCurrChargeda = (double)(unsigned int)((int (__thiscall *)(_DWORD))v11->baseclass_0.vfptr[19].__vecDelDtor)(v11);
    iChargedPercentagea = (signed int)(fCurrChargeda
                                     / (double)(unsigned int)((int (__thiscall *)(_DWORD))v11->baseclass_0.vfptr[21].__vecDelDtor)(v11)
                                     * 100.0);
    v12 = (signed int)fCurrChargeda;
    if ( v12 )
    {
      if ( v12 >= 11 || v2->m_iShieldCosOldCharged == v12 )
      {
        v2->m_iShieldCosDisplayCount = 0;
      }
      else
      {
        v15 = TextData2::Get(0x273D858Cu);
        v16 = fs(v15);
        GameFrameWork::AddSysMsg((GameFrameWork *)pkGamea, v16);
      }
      v2->m_iShieldCosOldCharged = (signed int)fCurrChargeda;
    }
    else
    {
      if ( v2->m_iShieldCosOldCharged )
      {
        v13 = TextData2::Get(0xF3D5672u);
        v14 = fs(v13);
        GameFrameWork::AddSysMsg((GameFrameWork *)pkGamea, v14);
      }
      v2->m_iShieldCosOldCharged = 0;
    }
    if ( iChargedPercentagea == 30 || iChargedPercentagea == 10 || iChargedPercentagea == 1 || !iChargedPercentagea )
    {
      if ( v2->m_iShieldCosOldChargedPercentage != iChargedPercentagea )
      {
        v2->m_bShieldCosDisplayMsg = 1;
        v2->m_iShieldCosOldChargedPercentage = iChargedPercentagea;
        goto LABEL_45;
      }
      if ( v2->m_bShieldCosDisplayMsg
        && v2->m_iShieldCosDisplayCount < 5
        && fTime - v2->m_fShieldCosPrevRefreshTime > 5.0 )
      {
LABEL_45:
        if ( iChargedPercentagea )
          v20 = 116862768;
        else
          v20 = 255678066;
        v17 = TextData2::Get(v20);
        v18 = fs(v17);
        GameFrameWork::AddSysMsg((GameFrameWork *)pkGamea, v18);
        ++v2->m_iShieldCosDisplayCount;
        v2->m_fShieldCosPrevRefreshTime = fTime;
        return;
      }
      if ( v2->m_iShieldCosDisplayCount > 4 )
      {
        v2->m_iShieldCosDisplayCount = 0;
        v2->m_bShieldCosDisplayMsg = 0;
      }
    }
  }
}

//----- (00675B80) --------------------------------------------------------
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_WEAPONENDURE_CHARGE_ACK(ItemRepairTask *this, PROTO_NC_ITEM_WEAPONENDURE_CHARGE_ACK *pkAck)
{
  PgFrameWork *v2; // eax@1
  PgFrameWork *v3; // esi@1
  unsigned __int16 v4; // ax@2
  __int16 v5; // cx@2
  int v6; // eax@3
  Item *v7; // edi@4
  int v8; // eax@9
  Item *v9; // edi@10
  char *v10; // eax@15
  char *v11; // eax@20
  unsigned int v12; // [sp-4h] [bp-Ch]@14

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = v2;
  if ( pkAck->Error == 6784 )
  {
    v4 = pkAck->WeaponSlot.Inven;
    v5 = pkAck->WeaponSlot.Inven >> 10;
    if ( v5 == 8 )
    {
      v6 = v4 & 0x3FF;
      if ( (unsigned int)v6 < 0x1E )
      {
        v7 = g_kInventory.m_aspEquip[v6].m_pObject;
        if ( v7 )
        {
          if ( (unsigned __int8)((int (__thiscall *)(Item *))v7->baseclass_0.vfptr[1].__vecDelDtor)(v7) == 26 )
          {
            v7->baseclass_0.vfptr[20].__vecDelDtor((NiRefObject *)v7, pkAck->ChargedNumber);
            ItemRepairWin::CompleteItemRepair((ItemRepairWin *)v3[33].m_kMsgQ.m_uiAlloced);
          }
        }
      }
    }
    else
    {
      if ( v5 == 9 )
      {
        v8 = v4 & 0x3FF;
        if ( (unsigned int)v8 < 0xC0 )
        {
          v9 = g_kInventory.m_aspInv[v8].m_pObject;
          if ( v9 )
          {
            if ( (unsigned __int8)((int (__thiscall *)(Item *))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) == 26 )
            {
              v9->baseclass_0.vfptr[20].__vecDelDtor((NiRefObject *)v9, pkAck->ChargedNumber);
              ItemRepairWin::CompleteItemRepair((ItemRepairWin *)v3[33].m_kMsgQ.m_uiAlloced);
            }
          }
        }
      }
    }
  }
  else
  {
    ItemRepairWin::CancelItemRepair((ItemRepairWin *)v2[33].m_kMsgQ.m_uiAlloced);
    switch ( pkAck->Error )
    {
      default:
        return;
      case 0x1A81u:
      case 0x1A83u:
      case 0x1A84u:
        v12 = -1292446161;
        goto LABEL_15;
      case 0x1A82u:
        v12 = -264214640;
        goto LABEL_15;
      case 0x1A86u:
        v12 = 1842448087;
        goto LABEL_15;
      case 0x1A87u:
        v12 = 492846737;
        goto LABEL_15;
      case 0x1A88u:
        v12 = -1055206953;
LABEL_15:
        v10 = TextData2::Get(v12);
        GameFrameWork::AddSysMsg((GameFrameWork *)v3, v10);
        break;
      case 0x1A89u:
        v11 = TextData::Get(0xD4D93C40u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v3, v11);
        break;
    }
  }
}

//----- (00675CE0) --------------------------------------------------------
void __thiscall ItemRepairTask::On_Recv_NC_ITEM_SHIELDENDURE_CHARGE_ACK(ItemRepairTask *this, PROTO_NC_ITEM_SHIELDENDURE_CHARGE_ACK *pkAck)
{
  PgFrameWork *v2; // eax@1
  PgFrameWork *v3; // esi@1
  unsigned __int16 v4; // ax@2
  __int16 v5; // cx@2
  int v6; // eax@3
  Item *v7; // edi@4
  int v8; // eax@9
  Item *v9; // edi@10
  char *v10; // eax@15
  char *v11; // eax@20
  unsigned int v12; // [sp-4h] [bp-Ch]@14

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = v2;
  if ( pkAck->Error == 6784 )
  {
    v4 = pkAck->ShieldSlot.Inven;
    v5 = pkAck->ShieldSlot.Inven >> 10;
    if ( v5 == 8 )
    {
      v6 = v4 & 0x3FF;
      if ( (unsigned int)v6 < 0x1E )
      {
        v7 = g_kInventory.m_aspEquip[v6].m_pObject;
        if ( v7 )
        {
          if ( (unsigned __int8)((int (__thiscall *)(Item *))v7->baseclass_0.vfptr[1].__vecDelDtor)(v7) == 37 )
          {
            v7->baseclass_0.vfptr[20].__vecDelDtor((NiRefObject *)v7, pkAck->ChargedNumber);
            ItemRepairWin::CompleteItemRepair((ItemRepairWin *)v3[33].m_kMsgQ.m_uiAlloced);
          }
        }
      }
    }
    else
    {
      if ( v5 == 9 )
      {
        v8 = v4 & 0x3FF;
        if ( (unsigned int)v8 < 0xC0 )
        {
          v9 = g_kInventory.m_aspInv[v8].m_pObject;
          if ( v9 )
          {
            if ( (unsigned __int8)((int (__thiscall *)(Item *))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) == 37 )
            {
              v9->baseclass_0.vfptr[20].__vecDelDtor((NiRefObject *)v9, pkAck->ChargedNumber);
              ItemRepairWin::CompleteItemRepair((ItemRepairWin *)v3[33].m_kMsgQ.m_uiAlloced);
            }
          }
        }
      }
    }
  }
  else
  {
    ItemRepairWin::CancelItemRepair((ItemRepairWin *)v2[33].m_kMsgQ.m_uiAlloced);
    switch ( pkAck->Error )
    {
      default:
        return;
      case 0x1A81u:
      case 0x1A83u:
      case 0x1A84u:
        v12 = -1292446161;
        goto LABEL_15;
      case 0x1A82u:
        v12 = -264214640;
        goto LABEL_15;
      case 0x1A86u:
        v12 = 1842448087;
        goto LABEL_15;
      case 0x1A87u:
        v12 = 492846737;
        goto LABEL_15;
      case 0x1A88u:
        v12 = -1055206953;
LABEL_15:
        v10 = TextData2::Get(v12);
        GameFrameWork::AddSysMsg((GameFrameWork *)v3, v10);
        break;
      case 0x1A89u:
        v11 = TextData::Get(0xD4D93C40u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v3, v11);
        break;
    }
  }
}

//----- (00675E40) --------------------------------------------------------
void __thiscall ItemRepairTask::_ItemRepairTask(ItemRepairTask *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRepairTask::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ItemRepairTask::_vftable_;
  ITask::_ITask(&this->baseclass_0);
}
// 9C61EC: using guessed type int (__stdcall *ItemRepairTask___vftable_)(int uiFlags);
// 9C6208: using guessed type int (__thiscall *ItemRepairTask___vftable_)(void *p, char);

//----- (00675E60) --------------------------------------------------------
bool __thiscall ItemRepairTask::OnProcessNetMsg(ItemRepairTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  bool result; // al@3

  if ( iDepart == 12 )
  {
    switch ( iCommand )
    {
      case 54:
        ItemRepairTask::On_Recv_NC_ITEM_WEAPONENDURE_CHARGE_ACK(this, (PROTO_NC_ITEM_WEAPONENDURE_CHARGE_ACK *)pvData);
        result = 1;
        break;
      case 55:
        ItemRepairTask::On_Recv_NC_ITEM_WEAPONENDURESET_CMD(this, (PROTO_NC_ITEM_WEAPONENDURESET_CMD *)pvData);
        result = 1;
        break;
      case 101:
        ItemRepairTask::On_Recv_NC_ITEM_SHIELDENDURE_CHARGE_ACK(this, (PROTO_NC_ITEM_SHIELDENDURE_CHARGE_ACK *)pvData);
        result = 1;
        break;
      case 102:
        ItemRepairTask::On_Recv_NC_ITEM_SHIELDENDURESET_CMD(this, (PROTO_NC_ITEM_SHIELDENDURESET_CMD *)pvData);
        result = 1;
        break;
      default:
        goto LABEL_7;
    }
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}

//----- (00675F10) --------------------------------------------------------
void __thiscall ItemRepairTask::ItemRepairTask(ItemRepairTask *this)
{
  ItemRepairTask *v1; // esi@1

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  v1->m_fPrevRefreshTime = 0.0;
  v1->m_eState = 0;
  v1->m_iDisplayCount = 0;
  v1->m_fShieldCosPrevRefreshTime = 0.0;
  v1->m_bDisplayMsg = 0;
  v1->m_iOldChargedPercentage = 0;
  v1->m_bShieldCosDisplayMsg = 0;
  v1->m_iShieldCosDisplayCount = 0;
  v1->m_iShieldCosOldChargedPercentage = 0;
  v1->m_iShieldCosOldCharged = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRepairTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ItemRepairTask::_vftable_;
}
// 9C61EC: using guessed type int (__stdcall *ItemRepairTask___vftable_)(int uiFlags);
// 9C6208: using guessed type int (__thiscall *ItemRepairTask___vftable_)(void *p, char);

//----- (00675F50) --------------------------------------------------------
void __cdecl ItemRepairTask::Create(IDirectMessenger *pkMsgHooker)
{
  int v1; // eax@1
  void *v2; // eax@2
  int v3; // esi@2
  int v4; // edi@7

  v1 = ItemRepairTask::ms_spItemRepairTask;
  if ( !ItemRepairTask::ms_spItemRepairTask )
  {
    v2 = operator new(0x6Cu);
    v3 = (int)v2;
    if ( v2 )
    {
      ITask::ITask((ITask *)v2, 0);
      *(float *)(v3 + 64) = 0.0;
      *(_DWORD *)v3 = &ItemRepairTask::_vftable_;
      *(float *)(v3 + 92) = 0.0;
      *(_DWORD *)(v3 + 8) = &ItemRepairTask::_vftable_;
      *(_DWORD *)(v3 + 84) = 0;
      *(_DWORD *)(v3 + 68) = 0;
      *(_BYTE *)(v3 + 72) = 0;
      *(_DWORD *)(v3 + 76) = 0;
      *(_BYTE *)(v3 + 88) = 0;
      *(_DWORD *)(v3 + 96) = 0;
      *(_DWORD *)(v3 + 100) = 0;
      *(_DWORD *)(v3 + 104) = 0;
    }
    else
    {
      v3 = 0;
    }
    v1 = ItemRepairTask::ms_spItemRepairTask;
    if ( ItemRepairTask::ms_spItemRepairTask != v3 )
    {
      if ( ItemRepairTask::ms_spItemRepairTask )
      {
        v4 = ItemRepairTask::ms_spItemRepairTask;
        if ( !InterlockedDecrement((volatile LONG *)(ItemRepairTask::ms_spItemRepairTask + 4)) )
        {
          if ( v4 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        }
      }
      v1 = v3;
      ItemRepairTask::ms_spItemRepairTask = v3;
      if ( v3 )
      {
        InterlockedIncrement((volatile LONG *)(v3 + 4));
        v1 = ItemRepairTask::ms_spItemRepairTask;
      }
    }
  }
  (**(void (__cdecl ***)(_DWORD))(v1 + 8))(pkMsgHooker);
}
// 9C61EC: using guessed type int (__stdcall *ItemRepairTask___vftable_)(int uiFlags);
// 9C6208: using guessed type int (__thiscall *ItemRepairTask___vftable_)(void *p, char);
// AA4F7C: using guessed type int ItemRepairTask__ms_spItemRepairTask;

//----- (00676040) --------------------------------------------------------
void *__thiscall ItemRepairTask::_scalar_deleting_destructor_(ItemRepairTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ItemRepairTask::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ItemRepairTask::_vftable_;
  ITask::_ITask(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C61EC: using guessed type int (__stdcall *ItemRepairTask___vftable_)(int uiFlags);
// 9C6208: using guessed type int (__thiscall *ItemRepairTask___vftable_)(void *p, char);

//----- (00676070) --------------------------------------------------------
void __thiscall Singleton<FadeObjectMgr>::_Singleton<FadeObjectMgr>(Singleton<FadeObjectMgr> *this)
{
  this->vfptr = (Singleton<FadeObjectMgr>Vtbl *)&Singleton<FadeObjectMgr>::_vftable_;
  if ( LODWORD(Singleton<FadeObjectMgr>::m_pInstance) )
  {
    (*(void (__stdcall **)(_DWORD))*LODWORD(Singleton<FadeObjectMgr>::m_pInstance))(1);
    LODWORD(Singleton<FadeObjectMgr>::m_pInstance) = 0;
  }
  Singleton<FadeObjectMgr>::m_bDestroy = 1;
}
// 9C6220: using guessed type int (__thiscall *Singleton_FadeObjectMgr____vftable_)(void *p, char);
// AA4F84: using guessed type char Singleton_FadeObjectMgr___m_bDestroy;

//----- (006760A0) --------------------------------------------------------
void *__thiscall Singleton<FadeObjectMgr>::_scalar_deleting_destructor_(Singleton<FadeObjectMgr> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (Singleton<FadeObjectMgr>Vtbl *)&Singleton<FadeObjectMgr>::_vftable_;
  if ( LODWORD(Singleton<FadeObjectMgr>::m_pInstance) )
  {
    (*(void (__stdcall **)(_DWORD))*LODWORD(Singleton<FadeObjectMgr>::m_pInstance))(1);
    LODWORD(Singleton<FadeObjectMgr>::m_pInstance) = 0;
  }
  Singleton<FadeObjectMgr>::m_bDestroy = 1;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6220: using guessed type int (__thiscall *Singleton_FadeObjectMgr____vftable_)(void *p, char);
// AA4F84: using guessed type char Singleton_FadeObjectMgr___m_bDestroy;

//----- (006760F0) --------------------------------------------------------
void *__thiscall NiTArray<FadeObject__>::_scalar_deleting_destructor_(NiTArray<FadeObject *> *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pBase;
  this->vfptr = (NiTArray<FadeObject *>Vtbl *)&NiTArray<FadeObject__>::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6228: using guessed type int (__thiscall *NiTArray_FadeObject _____vftable_)(void *p, char);

//----- (00676120) --------------------------------------------------------
void __thiscall NiTArray<NiGeometry__>::SetSize(NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *this, unsigned int uiMaxSize)
{
  NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *v2; // esi@1
  unsigned int v3; // edx@3
  NiTPointerList<NiPointer<NiProperty> > **v4; // ecx@4
  bool v5; // zf@4
  int v6; // ecx@4
  void *v7; // edi@8
  unsigned int v8; // eax@9
  unsigned int v9; // eax@11

  v2 = this;
  if ( uiMaxSize == this->m_uiMaxSize )
    return;
  if ( uiMaxSize < this->m_uiSize )
  {
    v3 = uiMaxSize;
    do
    {
      v4 = v2->m_pBase;
      v5 = v4[v3] == 0;
      v6 = (int)&v4[v3];
      if ( !v5 )
      {
        *(_DWORD *)v6 = 0;
        --v2->m_uiESize;
      }
      ++v3;
    }
    while ( v3 < v2->m_uiSize );
    v2->m_uiSize = uiMaxSize;
  }
  v7 = v2->m_pBase;
  v2->m_uiMaxSize = uiMaxSize;
  if ( !uiMaxSize )
  {
    v2->m_pBase = 0;
LABEL_15:
    operator delete__(v7);
    return;
  }
  v2->m_pBase = (NiTPointerList<NiPointer<NiProperty> > **)operator new__(4 * uiMaxSize);
  v8 = 0;
  if ( v2->m_uiSize )
  {
    do
    {
      v2->m_pBase[v8] = (NiTPointerList<NiPointer<NiProperty> > *)*((_DWORD *)v7 + v8);
      ++v8;
    }
    while ( v8 < v2->m_uiSize );
  }
  v9 = v2->m_uiSize;
  if ( v9 >= v2->m_uiMaxSize )
    goto LABEL_15;
  do
    v2->m_pBase[v9++] = 0;
  while ( v9 < v2->m_uiMaxSize );
  operator delete__(v7);
}

//----- (006761F0) --------------------------------------------------------
NiPointer<NiAVObject> *__thiscall FadeObject::GetObj(FadeObject *this, NiPointer<NiAVObject> *result)
{
  NiAVObject *v2; // eax@1

  v2 = this->m_spObj.m_pObject;
  result->m_pObject = this->m_spObj.m_pObject;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  return result;
}

//----- (00676220) --------------------------------------------------------
void __thiscall FadeObjectMgr::FadeObjectMgr(FadeObjectMgr *this)
{
  this->baseclass_0.vfptr = (Singleton<FadeObjectMgr>Vtbl *)&FadeObjectMgr::_vftable_;
  this->m_kObjectArray.vfptr = (NiTArray<FadeObject *>Vtbl *)&NiTArray<FadeObject__>::_vftable_;
  this->m_kObjectArray.m_uiMaxSize = 0;
  this->m_kObjectArray.m_uiGrowBy = 1;
  this->m_kObjectArray.m_uiSize = 0;
  this->m_kObjectArray.m_uiESize = 0;
  this->m_kObjectArray.m_pBase = 0;
}
// 9C6228: using guessed type int (__thiscall *NiTArray_FadeObject _____vftable_)(void *p, char);
// 9C6230: using guessed type int (__thiscall *FadeObjectMgr___vftable_)(void *p, char);

//----- (00676280) --------------------------------------------------------
void __thiscall FadeObjectMgr::_FadeObjectMgr(FadeObjectMgr *this)
{
  FadeObjectMgr *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = this;
  this->baseclass_0.vfptr = (Singleton<FadeObjectMgr>Vtbl *)&FadeObjectMgr::_vftable_;
  v2 = this->m_kObjectArray.m_pBase;
  this->m_kObjectArray.vfptr = (NiTArray<FadeObject *>Vtbl *)&NiTArray<FadeObject__>::_vftable_;
  operator delete__(v2);
  v1->baseclass_0.vfptr = (Singleton<FadeObjectMgr>Vtbl *)&Singleton<FadeObjectMgr>::_vftable_;
  if ( LODWORD(Singleton<FadeObjectMgr>::m_pInstance) )
  {
    (*(void (__stdcall **)(_DWORD))*LODWORD(Singleton<FadeObjectMgr>::m_pInstance))(1);
    LODWORD(Singleton<FadeObjectMgr>::m_pInstance) = 0;
  }
  Singleton<FadeObjectMgr>::m_bDestroy = 1;
}
// 9C6220: using guessed type int (__thiscall *Singleton_FadeObjectMgr____vftable_)(void *p, char);
// 9C6228: using guessed type int (__thiscall *NiTArray_FadeObject _____vftable_)(void *p, char);
// 9C6230: using guessed type int (__thiscall *FadeObjectMgr___vftable_)(void *p, char);
// AA4F84: using guessed type char Singleton_FadeObjectMgr___m_bDestroy;

//----- (006762D0) --------------------------------------------------------
bool __thiscall FadeObjectMgr::IsInArray(FadeObjectMgr *this, NiPointer<NiAVObject> spObj)
{
  FadeObjectMgr *v2; // eax@1
  unsigned int v3; // edx@1
  unsigned int v4; // edi@1
  FadeObject *v5; // ecx@2
  bool v6; // bl@3
  NiAVObject *v7; // esi@4
  FadeObjectMgr *v9; // [sp+0h] [bp-18h]@1
  unsigned int uiSize; // [sp+4h] [bp-14h]@1
  NiPointer<NiAVObject> result; // [sp+8h] [bp-10h]@3
  int v12; // [sp+14h] [bp-4h]@1

  v2 = this;
  v9 = this;
  v3 = this->m_kObjectArray.m_uiSize;
  v4 = 0;
  v12 = 0;
  uiSize = v3;
  if ( !v3 )
  {
LABEL_10:
    v12 = -1;
    if ( spObj.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spObj.m_pObject )
        spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spObj.m_pObject, 1u);
    }
    return 0;
  }
  while ( 1 )
  {
    v5 = v2->m_kObjectArray.m_pBase[v4];
    if ( v5 )
      break;
LABEL_9:
    ++v4;
    if ( v4 >= v3 )
      goto LABEL_10;
  }
  v6 = FadeObject::GetObj(v5, &result)->m_pObject == spObj.m_pObject;
  if ( result.m_pObject )
  {
    v7 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
  }
  if ( !v6 )
  {
    v3 = uiSize;
    v2 = v9;
    goto LABEL_9;
  }
  v12 = -1;
  if ( spObj.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && spObj.m_pObject )
    spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spObj.m_pObject, 1u);
  return 1;
}

//----- (006763E0) --------------------------------------------------------
void __thiscall FadeObject::FadeObject(FadeObject *this)
{
  this->m_fAlphaBlendValue = 0.0;
  this->m_spObj.m_pObject = 0;
  this->m_bEnable = 0;
  this->m_spMaterialProp.m_pObject = 0;
}

//----- (00676400) --------------------------------------------------------
void __thiscall FadeObject::FadeObject(FadeObject *this, NiPointer<NiAVObject> spObj, bool bEnable)
{
  NiAVObject *v3; // eax@1
  FadeObject *v4; // esi@1
  NiAVObject *v5; // edi@4

  v3 = spObj.m_pObject;
  v4 = this;
  this->m_spObj.m_pObject = spObj.m_pObject;
  if ( spObj.m_pObject )
  {
    InterlockedIncrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v3 = spObj.m_pObject;
  }
  v4->m_fAlphaBlendValue = 0.0;
  v4->m_bEnable = bEnable;
  v4->m_spMaterialProp.m_pObject = 0;
  if ( v3 )
  {
    v5 = v3;
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
}

//----- (00676460) --------------------------------------------------------
void __thiscall FadeObject::_FadeObject(FadeObject *this)
{
  FadeObject *v1; // edi@1
  NiMaterialProperty *v2; // esi@1
  NiAVObject *v3; // esi@5

  v1 = this;
  v2 = this->m_spMaterialProp.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spObj.m_pObject;
  if ( v1->m_spObj.m_pObject
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (006764F0) --------------------------------------------------------
bool __thiscall FadeObject::Init(FadeObject *this)
{
  FadeObject *v1; // esi@1
  NiAVObject *v2; // ecx@1
  bool result; // al@2
  double v4; // st7@4
  float v5; // ST18_4@6
  NiProperty *v6; // eax@6
  NiMaterialProperty *v7; // edi@6
  NiProperty *v8; // ebx@6
  void *v9; // eax@14
  int v10; // ebx@14
  int v11; // eax@15
  NiMaterialProperty *v12; // edi@16
  NiMaterialProperty *v13; // eax@24
  signed int v14; // ebx@24
  double v15; // st7@24
  NiProperty *v16; // eax@24
  NiProperty *v17; // edi@24
  void *v18; // eax@27
  void *v19; // ebx@27

  v1 = this;
  v2 = this->m_spObj.m_pObject;
  if ( v2 )
  {
    if ( v1->m_bEnable )
      v4 = 0.0;
    else
      v4 = 1.0;
    v5 = v4;
    v1->m_fAlphaBlendValue = v5;
    v6 = NiAVObject::GetProperty(v2, 3);
    v7 = v1->m_spMaterialProp.m_pObject;
    v8 = v6;
    if ( (NiProperty *)v7 != v6 )
    {
      if ( v7
        && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      v1->m_spMaterialProp.m_pObject = (NiMaterialProperty *)v8;
      if ( v8 )
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    if ( !v1->m_spMaterialProp.m_pObject )
    {
      v9 = operator new(0x60u);
      v10 = 0;
      if ( v9 )
      {
        NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v9);
        v10 = v11;
      }
      v12 = v1->m_spMaterialProp.m_pObject;
      if ( v12 != (NiMaterialProperty *)v10 )
      {
        if ( v12
          && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v12 )
          v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
        v1->m_spMaterialProp.m_pObject = (NiMaterialProperty *)v10;
        if ( v10 )
          InterlockedIncrement((volatile LONG *)(v10 + 4));
      }
      NiAVObject::AttachProperty(v1->m_spObj.m_pObject, &v1->m_spMaterialProp.m_pObject->baseclass_0);
    }
    v13 = v1->m_spMaterialProp.m_pObject;
    v14 = 1;
    v15 = v1->m_fAlphaBlendValue;
    ++v13->m_uiRevID;
    v13->m_fAlpha = v15;
    v16 = NiAVObject::GetProperty(v1->m_spObj.m_pObject, 0);
    v17 = v16;
    if ( v16 )
      InterlockedIncrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( !v17 )
    {
      v18 = operator new(0x20u);
      v19 = v18;
      if ( v18 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v18);
        *(_DWORD *)v19 = &NiAlphaProperty::_vftable_;
        *((_WORD *)v19 + 14) = 236;
        *((_BYTE *)v19 + 30) = 0;
      }
      else
      {
        v19 = 0;
      }
      if ( v19 )
      {
        v17 = (NiProperty *)v19;
        InterlockedIncrement((volatile LONG *)v19 + 1);
      }
      NiAVObject::AttachProperty(v1->m_spObj.m_pObject, v17);
      v14 = 1;
    }
    LOWORD(v17[1].baseclass_0.baseclass_0.baseclass_0.vfptr) |= v14;
    NiAVObject::UpdateProperties(v1->m_spObj.m_pObject);
    if ( !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v17->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, v14);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (006766D0) --------------------------------------------------------
void __thiscall FadeObjectMgr::AddObject(FadeObjectMgr *this, NiPointer<NiAVObject> spObj, bool bEnable)
{
  FadeObjectMgr *v3; // esi@1
  void *v4; // edi@8
  FadeObject *v5; // eax@11
  unsigned int v6; // edi@13
  NiPointer<NiAVObject> v7; // [sp-18h] [bp-28h]@9
  int v8; // [sp-14h] [bp-24h]@1
  void *v9; // [sp+0h] [bp-10h]@1
  int v10; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v8 = (int)spObj.m_pObject;
  v10 = 0;
  v9 = &v8;
  if ( spObj.m_pObject )
    InterlockedIncrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( FadeObjectMgr::IsInArray(v3, (NiPointer<NiAVObject>)v8) )
  {
    v10 = -1;
    if ( spObj.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spObj.m_pObject )
        ((void (__cdecl *)(signed int))spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
    }
  }
  else
  {
    v4 = operator new(0x10u);
    v9 = v4;
    LOBYTE(v10) = 1;
    if ( v4 )
    {
      v8 = bEnable;
      v7.m_pObject = spObj.m_pObject;
      *(_DWORD *)&bEnable = &v7;
      if ( spObj.m_pObject )
        InterlockedIncrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      FadeObject::FadeObject((FadeObject *)v4, v7, v8);
    }
    else
    {
      v5 = 0;
    }
    LOBYTE(v10) = 0;
    *(_DWORD *)&bEnable = v5;
    FadeObject::Init(v5);
    v6 = v3->m_kObjectArray.m_uiSize;
    if ( v6 >= v3->m_kObjectArray.m_uiMaxSize )
    {
      v8 = v6 + v3->m_kObjectArray.m_uiGrowBy;
      NiTArray<NiGeometry__>::SetSize((NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *)&v3->m_kObjectArray, v8);
    }
    NiTArray<NiCollisionGroup::Record__>::SetAt(
      (NiTArray<NiVBChip *> *)&v3->m_kObjectArray,
      v6,
      (NiVBChip *const *)&bEnable);
    v10 = -1;
    if ( spObj.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spObj.m_pObject )
      spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spObj.m_pObject, 1u);
  }
}

//----- (00676820) --------------------------------------------------------
void __thiscall FadeObjectMgr::Update(FadeObjectMgr *this, float fTime)
{
  FadeObjectMgr *v2; // ebx@1
  int v3; // eax@1
  FadeObject *v4; // esi@2
  NiMaterialProperty *v5; // edi@5
  NiAVObject *v6; // esi@6
  NiRefObjectVtbl *v7; // edx@7
  NiAVObject *v8; // ecx@7
  bool v9; // zf@8
  double v10; // st7@11
  double v11; // st7@17
  NiAVObject *v12; // edi@19
  unsigned int v13; // edx@24
  int v14; // eax@25
  FadeObject *v15; // ecx@25
  int v16; // eax@27
  NiAVObject *v17; // esi@33
  unsigned int uiSize; // [sp+0h] [bp-24h]@1
  NiPointer<NiMaterialProperty> spProp; // [sp+4h] [bp-20h]@5
  unsigned int i; // [sp+8h] [bp-1Ch]@1
  float fComputeAlpha; // [sp+Ch] [bp-18h]@11
  NiPointer<NiAVObject> spObj; // [sp+10h] [bp-14h]@3
  float fAlphaBlendValue; // [sp+14h] [bp-10h]@8
  int v24; // [sp+20h] [bp-4h]@3

  v2 = this;
  v3 = 0;
  uiSize = this->m_kObjectArray.m_uiSize;
  i = 0;
  if ( !uiSize )
    return;
  while ( 1 )
  {
    v4 = v2->m_kObjectArray.m_pBase[v3];
    if ( !v4 )
      goto LABEL_22;
    FadeObject::GetObj(v4, &spObj);
    v24 = 0;
    if ( !spObj.m_pObject )
    {
      v24 = -1;
      goto LABEL_22;
    }
    MainApp::GetRender((MainApp *)v4, (NiPointer<NiRenderer> *)&spProp);
    v5 = spProp.m_pObject;
    LOBYTE(v24) = 1;
    if ( spProp.m_pObject )
      break;
    v6 = spObj.m_pObject;
    v24 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = v6;
LABEL_21:
      v7->__vecDelDtor(v8, 1);
    }
LABEL_22:
    v3 = i + 1;
    i = v3;
    if ( v3 >= uiSize )
      return;
  }
  v9 = v4->m_bEnable == 0;
  fAlphaBlendValue = v4->m_fAlphaBlendValue;
  if ( !v9 )
  {
    if ( fAlphaBlendValue >= 1.0 )
      goto LABEL_24;
    fAlphaBlendValue = fAlphaBlendValue + Timer::ms_fDeltaTime;
    if ( fAlphaBlendValue < 1.0 )
    {
      fComputeAlpha = fAlphaBlendValue * NI_HALF_PI;
      JUMPOUT(*(int *)loc_676917);
    }
    v10 = fAlphaBlendValue;
    fComputeAlpha = 1.0;
    goto LABEL_17;
  }
  if ( fAlphaBlendValue > 0.0 )
  {
    fAlphaBlendValue = fAlphaBlendValue - Timer::ms_fDeltaTime;
    if ( fAlphaBlendValue > 0.0 )
    {
      fComputeAlpha = fAlphaBlendValue * NI_HALF_PI;
      JUMPOUT(*(int *)loc_676960);
    }
    v10 = fAlphaBlendValue;
    fComputeAlpha = 0.0;
LABEL_17:
    v4->m_fAlphaBlendValue = v10;
    v11 = fComputeAlpha;
    ++v5->m_uiRevID;
    v5->m_fAlpha = v11;
    LOBYTE(v24) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v12 = spObj.m_pObject;
    v24 = -1;
    if ( InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      goto LABEL_22;
    v7 = v12->baseclass_0.baseclass_0.baseclass_0.vfptr;
    v8 = v12;
    goto LABEL_21;
  }
LABEL_24:
  v13 = i;
  if ( i < v2->m_kObjectArray.m_uiSize )
  {
    v14 = (int)&v2->m_kObjectArray.m_pBase[i];
    v15 = *(FadeObject **)v14;
    *(_DWORD *)v14 = 0;
    if ( v15 )
      --v2->m_kObjectArray.m_uiESize;
    v16 = v2->m_kObjectArray.m_uiSize - 1;
    if ( v13 == v16 )
      v2->m_kObjectArray.m_uiSize = v16;
    if ( v15 )
      FadeObject::_scalar_deleting_destructor_(v15, 1u);
  }
  LOBYTE(v24) = 0;
  if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v17 = spObj.m_pObject;
  v24 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&spObj.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v17->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
}
// 676917: using guessed type int __stdcall(float fTime);
// 676960: using guessed type int __stdcall(float fTime);
// A97640: using guessed type float Timer__ms_fDeltaTime;
// B6DE90: using guessed type const float NI_HALF_PI;

//----- (00676A60) --------------------------------------------------------
NiPointer<NiRenderer> *__thiscall MainApp::GetRender(MainApp *this, NiPointer<NiRenderer> *result)
{
  NiRenderer *v2; // eax@1

  v2 = this->baseclass_0.m_spRenderer.m_pObject;
  result->m_pObject = v2;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount);
  return result;
}

//----- (00676A90) --------------------------------------------------------
void *__thiscall FadeObjectMgr::_scalar_deleting_destructor_(FadeObjectMgr *this, unsigned int a2)
{
  FadeObjectMgr *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  this->baseclass_0.vfptr = (Singleton<FadeObjectMgr>Vtbl *)&FadeObjectMgr::_vftable_;
  v3 = this->m_kObjectArray.m_pBase;
  this->m_kObjectArray.vfptr = (NiTArray<FadeObject *>Vtbl *)&NiTArray<FadeObject__>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.vfptr = (Singleton<FadeObjectMgr>Vtbl *)&Singleton<FadeObjectMgr>::_vftable_;
  if ( LODWORD(Singleton<FadeObjectMgr>::m_pInstance) )
  {
    (*(void (__stdcall **)(_DWORD))*LODWORD(Singleton<FadeObjectMgr>::m_pInstance))(1);
    LODWORD(Singleton<FadeObjectMgr>::m_pInstance) = 0;
  }
  Singleton<FadeObjectMgr>::m_bDestroy = 1;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6220: using guessed type int (__thiscall *Singleton_FadeObjectMgr____vftable_)(void *p, char);
// 9C6228: using guessed type int (__thiscall *NiTArray_FadeObject _____vftable_)(void *p, char);
// 9C6230: using guessed type int (__thiscall *FadeObjectMgr___vftable_)(void *p, char);
// AA4F84: using guessed type char Singleton_FadeObjectMgr___m_bDestroy;

//----- (00676AF0) --------------------------------------------------------
void *__thiscall FadeObject::_scalar_deleting_destructor_(FadeObject *this, unsigned int a2)
{
  FadeObject *v2; // edi@1
  NiMaterialProperty *v3; // esi@1
  NiAVObject *v4; // esi@5

  v2 = this;
  v3 = this->m_spMaterialProp.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v2->m_spObj.m_pObject;
  if ( v2->m_spObj.m_pObject
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00676BA0) --------------------------------------------------------
bool __thiscall LightFogCtrl::Init(LightFogCtrl *this)
{
  return 1;
}

//----- (00676BB0) --------------------------------------------------------
void __thiscall LightFogCtrl::Clear(LightFogCtrl *this)
{
  LightFogCtrl *v1; // edi@1
  NiMaterialProperty *v2; // esi@1
  NiMaterialProperty *v3; // esi@6
  NiMaterialProperty *v4; // esi@11
  NiTListItem<NiTimeController *> *v5; // esi@16
  NiTListItem<NiTimeController *> *v6; // ST00_4@17

  v1 = this;
  v2 = this->m_spFogMat.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spFogMat.m_pObject = 0;
  }
  v3 = v1->m_spAmibentLightMat.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spAmibentLightMat.m_pObject = 0;
  }
  v4 = v1->m_spBackgroundColorMat.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spBackgroundColorMat.m_pObject = 0;
  }
  v5 = v1->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5;
    v5 = v5->m_pkNext;
    v1->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *)&v1->m_kCtrlList,
      v6);
  }
  *(_DWORD *)&v1->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
}

//----- (00676C50) --------------------------------------------------------
void __thiscall LightFogCtrl::Update(LightFogCtrl *this, float fTime)
{
  LightFogCtrl *v2; // esi@1
  NiTListItem<NiTimeController *> *v3; // eax@1
  NiTimeController *v4; // ecx@2
  NiMaterialProperty *v5; // ecx@5
  NiMaterialProperty *v6; // ecx@7
  NiMaterialProperty *v7; // ecx@9
  float fGameTime; // [sp+14h] [bp+8h]@5

  v2 = this;
  v3 = this->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  this->m_fFreq = 1.0 / (Server::ONE_DAY_TIME / 10.0);
  while ( v3 )
  {
    v4 = v3->m_element;
    v3 = v3->m_pkNext;
    if ( v4 )
      v4->m_fFrequency = v2->m_fFreq;
  }
  fGameTime = Server::GetGameTime(&g_kServer, fTime);
  v5 = v2->m_spFogMat.m_pObject;
  if ( v5 )
    ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(LODWORD(fGameTime));
  v6 = v2->m_spAmibentLightMat.m_pObject;
  if ( v6 )
    ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(LODWORD(fGameTime));
  v7 = v2->m_spBackgroundColorMat.m_pObject;
  if ( v7 )
    ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(LODWORD(fGameTime));
}
// A81188: using guessed type float Server__ONE_DAY_TIME;

//----- (00676CF0) --------------------------------------------------------
void __thiscall LightFogCtrl::SetCtrl(LightFogCtrl *this, NiMaterialProperty *pkProp)
{
  LightFogCtrl *v2; // edi@1
  NiTimeController *v3; // eax@2
  NiTimeController *v4; // esi@2
  NiRefObjectVtbl *v5; // edx@3
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@3
  int v7; // eax@3
  NiTListItem<NiTimeController *> *v8; // ecx@3

  v2 = this;
  if ( pkProp )
  {
    v3 = NiObjectNET::GetController(&pkProp->baseclass_0.baseclass_0, &NiMaterialColorController::m_RTTI);
    v4 = v3;
    if ( v3 )
    {
      v5 = v3->baseclass_0.baseclass_0.vfptr;
      v3->m_uFlags = v3->m_uFlags & 0xFFF8 | 8;
      v6 = v5[15].__vecDelDtor;
      v4->m_fFrequency = v2->m_fFreq;
      v6(&v4->baseclass_0.baseclass_0, COERCE_UNSIGNED_INT(0.0));
      v7 = (int)v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *)&v2->m_kCtrlList);
      *(_DWORD *)(v7 + 8) = v4;
      *(_DWORD *)v7 = 0;
      *(_DWORD *)(v7 + 4) = v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      v8 = v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      if ( v8 )
      {
        v8->m_pkNext = (NiTListItem<NiTimeController *> *)v7;
        ++*(_DWORD *)&v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiTimeController *> *)v7;
      }
      else
      {
        ++*(_DWORD *)&v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiTimeController *> *)v7;
        v2->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiTimeController *> *)v7;
      }
    }
  }
}

//----- (00676D80) --------------------------------------------------------
bool __thiscall LightFogCtrl::SetNode(LightFogCtrl *this, NiNode *pkNode)
{
  NiNode *v2; // edi@1
  LightFogCtrl *v3; // esi@1
  bool result; // al@2
  NiAVObject *v5; // eax@3
  NiProperty *v6; // eax@5
  NiAVObject *v7; // eax@5
  NiProperty *v8; // eax@7
  NiAVObject *v9; // eax@7
  NiProperty *v10; // eax@10

  v2 = pkNode;
  v3 = this;
  if ( pkNode
    && (LightFogCtrl::Clear(this),
        (v5 = (NiAVObject *)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                              (NiRefObject *)v2,
                              (unsigned int)&unk_9C6234)) != 0)
    && PgUtil::CatchGeometry(v5, (NiGeometry **)&pkNode) )
  {
    v6 = NiAVObject::GetProperty(&pkNode->baseclass_0, 3);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spFogMat, (NiD3DDefaultShader *)v6);
    LightFogCtrl::SetCtrl(v3, v3->m_spFogMat.m_pObject);
    v7 = (NiAVObject *)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                         (NiRefObject *)v2,
                         (unsigned int)"Light");
    if ( v7
      && PgUtil::CatchGeometry(v7, (NiGeometry **)&pkNode)
      && (v8 = NiAVObject::GetProperty(&pkNode->baseclass_0, 3),
          NiPointer<PopupMenuWin>::operator_(
            (NiPointer<NiD3DDefaultShader> *)&v3->m_spAmibentLightMat,
            (NiD3DDefaultShader *)v8),
          LightFogCtrl::SetCtrl(v3, v3->m_spAmibentLightMat.m_pObject),
          (v9 = (NiAVObject *)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                                (NiRefObject *)v2,
                                (unsigned int)"BackGround")) != 0)
      && PgUtil::CatchGeometry(v9, (NiGeometry **)&pkNode) )
    {
      v10 = NiAVObject::GetProperty(&pkNode->baseclass_0, 3);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v3->m_spBackgroundColorMat,
        (NiD3DDefaultShader *)v10);
      LightFogCtrl::SetCtrl(v3, v3->m_spBackgroundColorMat.m_pObject);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00676E80) --------------------------------------------------------
void __thiscall LightFogCtrl::_LightFogCtrl(LightFogCtrl *this)
{
  LightFogCtrl *v1; // edi@1
  NiMaterialProperty *v2; // esi@1
  NiMaterialProperty *v3; // esi@5
  NiMaterialProperty *v4; // esi@9
  int v5; // edi@13
  int v6; // esi@13
  int v7; // ST00_4@14

  v1 = this;
  this->vfptr = (LightFogCtrlVtbl *)&LightFogCtrl::_vftable_;
  v2 = this->m_spBackgroundColorMat.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spAmibentLightMat.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spFogMat.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = (int)&v1->m_kCtrlList;
  *(_DWORD *)v5 = &PgTList<NiTimeController__>::_vftable_;
  v6 = *(_DWORD *)(v5 + 4);
  while ( v6 )
  {
    v7 = v6;
    v6 = *(_DWORD *)v6;
    (*(void (__thiscall **)(int, int))(*(_DWORD *)v5 + 8))(v5, v7);
  }
  *(_DWORD *)(v5 + 12) = 0;
  *(_DWORD *)(v5 + 4) = 0;
  *(_DWORD *)(v5 + 8) = 0;
  *(_DWORD *)v5 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
}
// 9C6250: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);
// 9C6270: using guessed type int (__thiscall *PgTList_NiTimeController _____vftable_)(void *p, char);
// 9C6280: using guessed type int (__thiscall *LightFogCtrl___vftable_)(void *p, char);

//----- (00676F80) --------------------------------------------------------
void __thiscall LightFogCtrl::LightFogCtrl(LightFogCtrl *this)
{
  this->vfptr = (LightFogCtrlVtbl *)&LightFogCtrl::_vftable_;
  *(_DWORD *)&this->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kCtrlList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&PgTList<NiTimeController__>::_vftable_;
  this->m_spFogMat.m_pObject = 0;
  this->m_spAmibentLightMat.m_pObject = 0;
  this->m_spBackgroundColorMat.m_pObject = 0;
  this->m_fFreq = 1.0 / (Server::ONE_DAY_TIME / 10.0);
}
// 9C6270: using guessed type int (__thiscall *PgTList_NiTimeController _____vftable_)(void *p, char);
// 9C6280: using guessed type int (__thiscall *LightFogCtrl___vftable_)(void *p, char);
// A81188: using guessed type float Server__ONE_DAY_TIME;

//----- (00676FC0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>(NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
}
// 9C6250: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);

//----- (00676FD0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C6250: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);

//----- (00677000) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiTimeController *> *v3; // esi@1
  NiTListItem<NiTimeController *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6250: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);
// 9C6260: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);

//----- (00677090) --------------------------------------------------------
void __thiscall NiTPointerList<NiTimeController__>::_NiTPointerList<NiTimeController__>(NiTPointerList<NiTimeController *> *this)
{
  NiTPointerList<NiTimeController *> *v1; // edi@1
  NiTListItem<NiTimeController *> *v2; // esi@1
  NiTListItem<NiTimeController *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
}
// 9C6250: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);
// 9C6260: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);

//----- (00677110) --------------------------------------------------------
void __thiscall PgTList<NiTimeController__>::_PgTList<NiTimeController__>(PgTList<NiTimeController *> *this)
{
  PgTList<NiTimeController *> *v1; // edi@1
  NiTListItem<NiTimeController *> *v2; // esi@1
  NiTListItem<NiTimeController *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&PgTList<NiTimeController__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
}
// 9C6250: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);
// 9C6270: using guessed type int (__thiscall *PgTList_NiTimeController _____vftable_)(void *p, char);

//----- (00677190) --------------------------------------------------------
void *__thiscall PgTList<NiTimeController__>::_vector_deleting_destructor_(PgTList<NiTimeController *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiTimeController *> *v3; // esi@1
  NiTListItem<NiTimeController *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiTimeController *>Vtbl *)&PgTList<NiTimeController__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiTimeController__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6250: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiTimeController _____vftable_)(void *p, char);
// 9C6270: using guessed type int (__thiscall *PgTList_NiTimeController _____vftable_)(void *p, char);

//----- (00677220) --------------------------------------------------------
void *__thiscall LightFogCtrl::_scalar_deleting_destructor_(LightFogCtrl *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  LightFogCtrl::_LightFogCtrl(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00677250) --------------------------------------------------------
void __thiscall CMagicCircleController::UpdatePosition(CMagicCircleController *this, NiPoint3 *rPos)
{
  this->m_SavePos.x = rPos->x;
  this->m_SavePos.y = rPos->y;
  this->m_SavePos.z = rPos->z;
}

//----- (00677270) --------------------------------------------------------
void __thiscall CMagicCircleController::SetEnable(CMagicCircleController *this, bool bEnable)
{
  this->m_bEnable = bEnable;
}

//----- (00677280) --------------------------------------------------------
bool __thiscall CMagicCircleController::IsEnable(CMagicCircleController *this)
{
  return this->m_bEnable;
}

//----- (00677290) --------------------------------------------------------
NiPoint3 *__thiscall CMagicCircleController::GetPos(CMagicCircleController *this)
{
  return &this->m_SavePos;
}

//----- (006772A0) --------------------------------------------------------
void __thiscall CMagicCircleController::CMagicCircleController(CMagicCircleController *this)
{
  CMagicCircleController *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&CMagicCircleController::_vftable_;
  v1->m_bEnable = 0;
  v1->m_spCircleObject.m_pObject = 0;
  NsDecal::NsDecal(&v1->m_kDecal);
  NsDecal::Init(&v1->m_kDecal);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C6290: using guessed type int (__thiscall *CMagicCircleController___vftable_)(void *p, char);

//----- (00677320) --------------------------------------------------------
void __thiscall CMagicCircleController::_CMagicCircleController(CMagicCircleController *this)
{
  CMagicCircleController *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&CMagicCircleController::_vftable_;
  NsDecal::Terminate(&this->m_kDecal);
  v2 = v1->m_spCircleObject.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spCircleObject.m_pObject = 0;
  }
  NsDecal::_NsDecal(&v1->m_kDecal);
  v3 = v1->m_spCircleObject.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C6290: using guessed type int (__thiscall *CMagicCircleController___vftable_)(void *p, char);

//----- (006773E0) --------------------------------------------------------
float __thiscall CMagicCircleController::GetCircleRadius(CMagicCircleController *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_kDecal.m_fDecalWidth;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (006773F0) --------------------------------------------------------
NiNode *__thiscall CMagicCircleController::GetNode(CMagicCircleController *this)
{
  return this->m_spCircleObject.m_pObject;
}

//----- (00677400) --------------------------------------------------------
void __thiscall CMagicCircleController::Update(CMagicCircleController *this, float fTime)
{
  CMagicCircleController *v2; // esi@1

  v2 = this;
  if ( this->m_bEnable )
  {
    this->m_spCircleObject.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
    NsDecal::Update(&this->m_kDecal, 0.0, this->m_spCircleObject.m_pObject, &this->m_SavePos);
    NiAVObject::Update(&v2->m_spCircleObject.m_pObject->baseclass_0, fTime, 1);
  }
  else
  {
    this->m_spCircleObject.m_pObject->baseclass_0.m_uFlags |= 1u;
  }
}

//----- (00677460) --------------------------------------------------------
bool __thiscall CMagicCircleController::ResetInitTerrain(CMagicCircleController *this, PgNsTerrain *pNsTerrain)
{
  this->m_kDecal.m_pkHpTerrain = pNsTerrain;
  return 1;
}

//----- (00677470) --------------------------------------------------------
bool __thiscall CMagicCircleController::Init(CMagicCircleController *this, const char *pkFileName, PgNsTerrain *pNsTerrain, NiNode *pBuildGround)
{
  CMagicCircleController *v4; // esi@1
  int v5; // edi@1
  NiNode *v6; // eax@1
  NiNode *v7; // ebx@1
  void *v9; // eax@8
  int v10; // eax@9
  NiNode *v11; // esi@10
  int v12; // edi@17
  NiNode *v13; // ebx@18
  NiObject *v14; // eax@18
  NiObject *v15; // eax@18
  NiObject *v16; // esi@18
  NiNode *v17; // ST08_4@25
  NiNode *spNode; // [sp+4h] [bp-14h]@1
  CMagicCircleController *v19; // [sp+8h] [bp-10h]@1

  v4 = this;
  v19 = this;
  v5 = 0;
  v6 = PgUtil::LoadNifFile(pkFileName, 0, 1);
  v7 = v6;
  spNode = v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( !v7 )
    return 0;
  pkFileName = (const char *)v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                               (NiRefObject *)v7,
                               (unsigned int)"Plane01");
  if ( !pkFileName )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    return 0;
  }
  v9 = operator new(0xE8u);
  if ( v9 )
  {
    NiNode::NiNode((NiNode *)v9, 0);
    v5 = v10;
  }
  v11 = v4->m_spCircleObject.m_pObject;
  if ( v11 != (NiNode *)v5 )
  {
    if ( v11
      && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v19->m_spCircleObject.m_pObject = (NiNode *)v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)(v5 + 4));
  }
  v12 = *((_DWORD *)pkFileName + 40);
  if ( v12 )
  {
    do
    {
      v13 = v19->m_spCircleObject.m_pObject;
      v14 = *(NiObject **)(v12 + 8);
      v12 = *(_DWORD *)v12;
      v15 = NiObject::Clone(v14);
      v16 = v15;
      pkFileName = (const char *)v15;
      if ( v15 )
        InterlockedIncrement((volatile LONG *)&v15->baseclass_0.m_uiRefCount);
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v13->baseclass_0.m_kPropertyList,
        (NiPointer<NiRoom> *)&pkFileName);
      if ( v16 && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.m_uiRefCount) )
        v16->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    }
    while ( v12 );
    v7 = spNode;
  }
  NiAVObject::UpdateProperties(&v19->m_spCircleObject.m_pObject->baseclass_0);
  v17 = pBuildGround;
  v19->m_kDecal.m_pkHpTerrain = pNsTerrain;
  NsDecal::SetObjectTerrain(&v19->m_kDecal, v17);
  if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  return 1;
}

//----- (00677640) --------------------------------------------------------
void __thiscall CMagicCircleController::SetCircleRadius(CMagicCircleController *this, float fRadius)
{
  NsDecal::SetDecalSize(&this->m_kDecal, fRadius, fRadius);
}

//----- (00677660) --------------------------------------------------------
void *__thiscall CMagicCircleController::_scalar_deleting_destructor_(CMagicCircleController *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CMagicCircleController::_CMagicCircleController(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00677690) --------------------------------------------------------
bool __thiscall MapObjMgr::Init(MapObjMgr *this)
{
  return 1;
}

//----- (006776D0) --------------------------------------------------------
NiNode *__thiscall MapObjMgr::GetFromMap(MapObjMgr *this, char *pcName)
{
  NiNode *v2; // esi@1
  NiObject *v3; // edi@2
  NiNode *result; // eax@4
  NiPointer<NiNode> spNode; // [sp+0h] [bp-10h]@1
  int v6; // [sp+Ch] [bp-4h]@1

  spNode.m_pObject = 0;
  v6 = 0;
  NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
    (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)this,
    pcName,
    (NiPointer<NiShaderLibrary> *)&spNode);
  v2 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    NiObjectNET::ms_eCopyType = 1;
    v3 = NiObject::Clone(&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    result = (NiNode *)v3;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00677770) --------------------------------------------------------
NiNode *__thiscall MapObjMgr::Get(MapObjMgr *this, char *pcName)
{
  MapObjMgr *v2; // edi@1
  char *v3; // esi@1
  NiNode *result; // eax@1
  char *v5; // eax@4
  NiObject *v6; // edi@8
  char *v7; // esi@9
  NiPointer<PgWinBut> v8; // [sp-10h] [bp-20h]@6
  NiPointer<PgWinBut> *v9; // [sp+0h] [bp-10h]@6
  int v10; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = pcName;
  result = MapObjMgr::GetFromMap(this, pcName);
  if ( !result )
  {
    pcName = 0;
    v10 = 0;
    if ( !Folder::m_bInit )
      Folder::Init();
    v5 = Folder::Merge(&Folder::m_acMain, v3);
    PgUtil::LoadNodeNifFile(v5, (NiPointer<NiNode> *)&pcName, 0);
    if ( pcName )
    {
      v8.m_pObject = (PgWinBut *)pcName;
      v9 = &v8;
      if ( pcName )
        InterlockedIncrement((volatile LONG *)pcName + 1);
      NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
        (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2,
        (unsigned int)v3,
        v8);
      v6 = NiObject::Clone((NiObject *)pcName);
      v10 = -1;
      if ( pcName )
      {
        v7 = pcName;
        if ( !InterlockedDecrement((volatile LONG *)pcName + 1) )
        {
          if ( v7 )
            (**(void (__thiscall ***)(char *, signed int))v7)(v7, 1);
        }
      }
      result = (NiNode *)v6;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00677860) --------------------------------------------------------
void __thiscall MapObjMgr::MapObjMgr(MapObjMgr *this)
{
  MapObjMgr *v1; // esi@1
  void *v2; // eax@1
  unsigned int v3; // ST08_4@1

  v1 = this;
  this->m_kMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize = 37;
  this->m_kMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_;
  *(_DWORD *)&this->m_kMap.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v2 = operator new__(0x94u);
  v3 = 4 * v1->m_kMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize;
  v1->m_kMap.baseclass_0.baseclass_0.baseclass_0.m_ppkHashTable = (NiTMapItem<char const *,NiPointer<NiNode> > **)v2;
  memset((char *)v2, 0, v3);
  v1->m_kMap.baseclass_0.m_bCopy = 1;
  v1->m_kMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTStringPointerMap<NiPointer<NiNode>>::_vftable_;
}
// 9C4F94: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiNode_____vftable_)(void *p, char);
// 9C507C: using guessed type int (__thiscall *NiTStringPointerMap_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (006778C0) --------------------------------------------------------
void __thiscall Shadow::_Shadow(Shadow *this)
{
  Shadow *v1; // esi@1
  void *v2; // edi@1
  NiNode *v3; // edi@3
  NiNode *v4; // edi@8
  NiNode *v5; // edi@13
  NiNode *v6; // edi@17
  NiNode *v7; // edi@21

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&Shadow::_vftable_;
  NsDecal::Terminate(&this->m_kDecal);
  v2 = v1->m_pkShdowObject;
  if ( v2 )
  {
    NsShadowObject::_NsShadowObject(v1->m_pkShdowObject);
    operator delete(v2);
  }
  v3 = v1->m_spNode.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spNode.m_pObject = 0;
  }
  v4 = v1->m_spCircleShadowObject.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spCircleShadowObject.m_pObject = 0;
  }
  v5 = v1->m_spModelShadowObject.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spCircleShadowObject.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spNode.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  NsDecal::_NsDecal(&v1->m_kDecal);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C62C4: using guessed type int (__thiscall *Shadow___vftable_)(void *p, char);

//----- (00677A00) --------------------------------------------------------
void __thiscall Shadow::Render(Shadow *this, NiNode *pkRenderTarget, NiPoint3 *kPos)
{
  Shadow *v3; // edi@1
  NiRenderer *v4; // esi@4

  v3 = this;
  if ( pkRenderTarget )
  {
    if ( this->m_eShadowMode )
    {
      NsDecal::Update(&this->m_kDecal, 0.0, this->m_spModelShadowObject.m_pObject, kPos);
      NsShadowObject::SetCaster(v3->m_pkShdowObject, pkRenderTarget);
      v4 = NiRenderer::ms_pkRenderer;
      if ( NiRenderer::ms_pkRenderer
        && !NiRenderer::ms_pkRenderer->m_eFrameState
        && !NiRenderer::ms_pkRenderer->m_eOffScreenFrameState
        && (unsigned __int8)((int (__thiscall *)(_DWORD))NiRenderer::ms_pkRenderer->baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)(NiRenderer::ms_pkRenderer) )
        v4->m_eFrameState = 1;
      NsShadowObject::ClickAndStuff(v3->m_pkShdowObject, 0.0, 0.0);
      if ( v4
        && v4->m_eFrameState == 1
        && !v4->m_eOffScreenFrameState
        && (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)(v4) )
        v4->m_eFrameState = 2;
      if ( v4->m_eFrameState == 2 && !v4->m_eOffScreenFrameState )
      {
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.vfptr[68].__vecDelDtor)(v4) )
        {
          ++v4->m_uiFrameID;
          v4->m_eFrameState = 0;
        }
      }
    }
    else
    {
      NsDecal::Update(&this->m_kDecal, 0.0, this->m_spCircleShadowObject.m_pObject, kPos);
    }
  }
}

//----- (00677AF0) --------------------------------------------------------
void __thiscall Shadow::Shadow(Shadow *this, NiPoint3 *pkLightDir, PgNsTerrain *pkTerrain, NiNode *pkGroundNode, unsigned int uiDetail)
{
  Shadow *v5; // esi@1
  int v6; // ebx@1
  NsShadowObject *v7; // eax@1
  void *v8; // eax@1
  int v9; // eax@2
  NiNode *v10; // edi@3
  void *v11; // eax@10
  int v12; // eax@11
  int v13; // ebx@11
  NiNode *v14; // edi@13
  NiNode *v15; // ebx@20
  NsShadowObject *v16; // edi@20
  NsShadowObject *v17; // eax@22
  NiMaterialProperty *v18; // ecx@22
  float v19; // eax@23
  float v20; // edi@25
  double v21; // st7@25
  int v22; // ecx@25
  float v23; // ST20_4@25

  v5 = this;
  v6 = 0;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v5->baseclass_0.vfptr = (NiRefObjectVtbl *)&Shadow::_vftable_;
  NsDecal::NsDecal(&v5->m_kDecal);
  v5->m_spNode.m_pObject = 0;
  v5->m_spCircleShadowObject.m_pObject = 0;
  v5->m_spModelShadowObject.m_pObject = 0;
  v5->m_eShadowMode = 1;
  NsDecal::Init(&v5->m_kDecal);
  NsDecal::SetDecalSize(&v5->m_kDecal, 100.0, 100.0);
  v7 = NsShadowObject::Create(NiRenderer::ms_pkRenderer, 7u);
  v5->m_kDecal.m_pkHpTerrain = pkTerrain;
  v5->m_pkShdowObject = v7;
  NsDecal::SetObjectTerrain(&v5->m_kDecal, pkGroundNode);
  v8 = operator new(0xE8u);
  if ( v8 )
  {
    NiNode::NiNode((NiNode *)v8, 0);
    v6 = v9;
  }
  v10 = v5->m_spNode.m_pObject;
  if ( v10 != (NiNode *)v6 )
  {
    if ( v10
      && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v5->m_spNode.m_pObject = (NiNode *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)(v6 + 4));
  }
  v11 = operator new(0xE8u);
  if ( v11 )
  {
    NiNode::NiNode((NiNode *)v11, 0);
    v13 = v12;
  }
  else
  {
    v13 = 0;
  }
  v14 = v5->m_spModelShadowObject.m_pObject;
  if ( v14 != (NiNode *)v13 )
  {
    if ( v14
      && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v14 )
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    v5->m_spModelShadowObject.m_pObject = (NiNode *)v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)(v13 + 4));
  }
  ((void (__stdcall *)(NiNode *, _DWORD))v5->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v5->m_spModelShadowObject.m_pObject,
    0);
  v15 = v5->m_spModelShadowObject.m_pObject;
  v16 = v5->m_pkShdowObject;
  NiDynamicEffect::AttachAffectedNode(&v16->m_spShadow.m_pObject->baseclass_0, v5->m_spModelShadowObject.m_pObject);
  if ( v16->m_bUsedMultiEffect )
  {
    NiDynamicEffect::AttachAffectedNode(&v16->m_spShadow1.m_pObject->baseclass_0, v15);
    NiDynamicEffect::AttachAffectedNode(&v16->m_spShadow2.m_pObject->baseclass_0, v15);
    NiDynamicEffect::AttachAffectedNode(&v16->m_spShadow3.m_pObject->baseclass_0, v15);
  }
  v17 = v5->m_pkShdowObject;
  v18 = v17->m_spMat.m_pObject;
  v17->m_kColorShadow.r = 0.77999997;
  v17->m_kColorShadow.g = 0.77999997;
  v17->m_kColorShadow.b = 0.77999997;
  if ( v18 )
  {
    v18->m_emit.r = v17->m_kColorShadow.r;
    v18->m_emit.g = v17->m_kColorShadow.g;
    v19 = v17->m_kColorShadow.b;
    ++v18->m_uiRevID;
    v18->m_emit.b = v19;
  }
  if ( pkLightDir )
  {
    v20 = pkLightDir->y;
    v21 = pkLightDir->z * 3.0;
    v22 = (int)&v5->m_pkShdowObject->m_dir;
    *(_DWORD *)v22 = LODWORD(pkLightDir->x);
    v23 = v21;
    *(_DWORD *)(v22 + 4) = LODWORD(v20);
    *(_DWORD *)(v22 + 8) = LODWORD(v23);
    NiPoint3::Unitize((NiPoint3 *)v22);
  }
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C62C4: using guessed type int (__thiscall *Shadow___vftable_)(void *p, char);

//----- (00677D20) --------------------------------------------------------
void __thiscall Shadow::SetShaderMode(Shadow *this, Shadow::eShadowMode shadowmode)
{
  int v2; // ebx@0
  int v3; // esi@0
  Shadow::eShadowMode v4; // eax@1
  Shadow *v5; // edi@1
  char *v6; // eax@6
  NiNode *v7; // eax@6
  NiNode *v8; // eax@6
  NiNode *v9; // ecx@8
  int v10; // eax@9
  int v11; // esi@10
  NiObject *v12; // eax@11
  NiObject *v13; // eax@11
  Shadow::eShadowMode v14; // esi@13
  Shadow::eShadowMode v15; // esi@17
  NiNode *v16; // ecx@20
  double v17; // st7@21
  float v18; // ST30_4@23
  float v19; // ST2C_4@23
  int v20; // [sp+34h] [bp-Ch]@2

  v4 = shadowmode;
  v5 = this;
  if ( this->m_eShadowMode == shadowmode )
    return;
  v20 = v3;
  this->m_eShadowMode = shadowmode;
  if ( v4 || this->m_spCircleShadowObject.m_pObject )
    goto LABEL_12;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acSystem, "Misc\\DecalPlane_Shadow.nif");
  v7 = PgUtil::LoadNifFile(v6, 0, 1);
  NiPointer<PopupMenuWin>::operator_(
    (NiPointer<NiD3DDefaultShader> *)&v5->m_spCircleShadowObject,
    (NiD3DDefaultShader *)v7);
  v8 = v5->m_spCircleShadowObject.m_pObject;
  if ( !v8 )
  {
    v5->m_eShadowMode = 1;
    return;
  }
  ((void (__stdcall *)(NiNode *, _DWORD))v5->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v8,
    0);
  v9 = v5->m_spCircleShadowObject.m_pObject;
  if ( v9 )
  {
    v10 = ((int (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Editable Mesh");
    if ( v10 )
    {
      v11 = *(_DWORD *)(v10 + 160);
      while ( v11 )
      {
        v12 = *(NiObject **)(v11 + 8);
        v11 = *(_DWORD *)v11;
        shadowmode = (Shadow::eShadowMode)v5->m_spCircleShadowObject.m_pObject;
        v13 = NiObject::Clone(v12);
        NiAVObject::AttachProperty((NiAVObject *)shadowmode, (NiProperty *)v13);
      }
LABEL_12:
      ((void (__stdcall *)(Shadow::eShadowMode *, NiNode *, int, int))v5->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &shadowmode,
        v5->m_spCircleShadowObject.m_pObject,
        v20,
        v2);
      if ( shadowmode )
      {
        v14 = shadowmode;
        if ( !InterlockedDecrement((volatile LONG *)(shadowmode + 4)) )
        {
          if ( v14 )
            (**(void (__thiscall ***)(Shadow::eShadowMode, signed int))v14)(v14, 1);
        }
      }
      ((void (__stdcall *)(Shadow::eShadowMode *, NiNode *))v5->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &shadowmode,
        v5->m_spModelShadowObject.m_pObject);
      if ( shadowmode )
      {
        v15 = shadowmode;
        if ( !InterlockedDecrement((volatile LONG *)(shadowmode + 4)) )
        {
          if ( v15 )
            (**(void (__thiscall ***)(Shadow::eShadowMode, signed int))v15)(v15, 1);
        }
      }
      v16 = v5->m_spNode.m_pObject;
      if ( v5->m_eShadowMode )
      {
        ((void (__cdecl *)(NiNode *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v5->m_spModelShadowObject.m_pObject);
        v17 = 100.0;
      }
      else
      {
        ((void (__cdecl *)(NiNode *))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v5->m_spCircleShadowObject.m_pObject);
        v17 = 50.0;
      }
      v18 = v17;
      v19 = v17;
      NsDecal::SetDecalSize(&v5->m_kDecal, v19, v18);
      return;
    }
  }
}
// 677D20: could not find valid save-restore pair for ebx
// 677D20: could not find valid save-restore pair for esi
// A9541C: using guessed type char Folder__m_bInit;

//----- (00677EB0) --------------------------------------------------------
void __thiscall NsShadowObject::SetCaster(NsShadowObject *this, NiNode *pCaster)
{
  NsShadowObject *v2; // ebx@1
  NiNode *v3; // esi@1

  v2 = this;
  v3 = this->m_spCaster.m_pObject;
  if ( v3 != pCaster )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spCaster.m_pObject = pCaster;
    if ( pCaster )
      InterlockedIncrement((volatile LONG *)&pCaster->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (00677F00) --------------------------------------------------------
void *__thiscall Shadow::_vector_deleting_destructor_(Shadow *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  Shadow::_Shadow(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00677F30) --------------------------------------------------------
bool __thiscall SkyCtrl::Init(SkyCtrl *this)
{
  return 1;
}

//----- (00677F50) --------------------------------------------------------
void __thiscall SkyCtrl::SkyCtrl(SkyCtrl *this)
{
  this->vfptr = (SkyCtrlVtbl *)&SkyCtrl::_vftable_;
  this->m_spNode.m_pObject = 0;
}
// 9C62DC: using guessed type int (__thiscall *SkyCtrl___vftable_)(void *p, char);

//----- (00677F60) --------------------------------------------------------
void __thiscall SkyCtrl::_SkyCtrl(SkyCtrl *this)
{
  NiNode *v1; // esi@1

  this->vfptr = (SkyCtrlVtbl *)&SkyCtrl::_vftable_;
  v1 = this->m_spNode.m_pObject;
  if ( v1 && !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v1 )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
  }
}
// 9C62DC: using guessed type int (__thiscall *SkyCtrl___vftable_)(void *p, char);

//----- (00677F90) --------------------------------------------------------
void __thiscall SkyCtrl::Clear(SkyCtrl *this)
{
  SkyCtrl *v1; // edi@1
  NiNode *v2; // esi@1

  v1 = this;
  this->m_nMaxTime = 0;
  v2 = this->m_spNode.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spNode.m_pObject = 0;
  }
}

//----- (00677FD0) --------------------------------------------------------
bool __thiscall SkyCtrl::SetNode(SkyCtrl *this, NiNode *pkNode)
{
  SkyCtrl *v2; // esi@1
  NiNode *v3; // edi@1
  NiNode *v4; // edi@6
  NiAVObject *v5; // ST08_4@13
  NsEffect kEffect; // [sp+1Ch] [bp-30h]@13
  int v8; // [sp+48h] [bp-4h]@13

  v2 = this;
  this->m_nMaxTime = 0;
  v3 = this->m_spNode.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spNode.m_pObject = 0;
  }
  v4 = v2->m_spNode.m_pObject;
  if ( v4 != pkNode )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v2->m_spNode.m_pObject = pkNode;
    if ( pkNode )
      InterlockedIncrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  NsEffect::NsEffect(&kEffect);
  v5 = (NiAVObject *)v2->m_spNode.m_pObject;
  v8 = 0;
  NsEffect::SetEffectNode(&kEffect, v5);
  NsEffect::Start(&kEffect, 0.0);
  v2->m_nMaxTime = (signed int)kEffect.m_fMaxTime;
  v8 = -1;
  NsEffect::_NsEffect(&kEffect);
  return 1;
}

//----- (006780C0) --------------------------------------------------------
void __thiscall SkyCtrl::Terminate(SkyCtrl *this)
{
  SkyCtrl *v1; // edi@1
  NiNode *v2; // esi@1

  v1 = this;
  this->m_nMaxTime = 0;
  v2 = this->m_spNode.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spNode.m_pObject = 0;
  }
}

//----- (00678100) --------------------------------------------------------
void __thiscall SkyCtrl::Update(SkyCtrl *this, float fTime)
{
  SkyCtrl *v2; // esi@1
  Name3 *v3; // eax@2
  Name3 *v4; // eax@3
  double v5; // st7@5
  float v6; // ST04_4@7
  char v7; // [sp+Ch] [bp-20h]@3
  float fGameTime; // [sp+18h] [bp-14h]@1
  Name3 result; // [sp+1Ch] [bp-10h]@2
  unsigned int v10; // [sp+28h] [bp-4h]@1
  int v11; // [sp+2Ch] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  fGameTime = Server::GetGameTime(&g_kServer, fTime);
  if ( v2->m_spNode.m_pObject )
  {
    v3 = World::GetMapName(&g_kWorld, &result);
    if ( MapInfoTab::GetByMapName(v3) )
    {
      *(_QWORD *)&result.n3_name[4] = 0i64;
      *(_QWORD *)&result.n3_name[0] = 0i64;
      strncpy(result.n3_name, "KDVictor", 0xCu);
      v4 = World::GetMapName(&g_kWorld, (Name3 *)&v7);
      if ( *(_QWORD *)&v4->n3_name[0] != *(_QWORD *)&result
        || *(_DWORD *)&v4->n3_name[8] != *(_DWORD *)&result.n3_name[8] )
      {
        fGameTime = fGameTime / (Server::ONE_DAY_TIME / (double)v2->m_nMaxTime);
        v5 = fGameTime;
      }
      else
      {
        v5 = fGameTime;
      }
      v6 = v5;
      NiAVObject::Update(&v2->m_spNode.m_pObject->baseclass_0, v6, 1);
    }
  }
}
// A81188: using guessed type float Server__ONE_DAY_TIME;
// A85C00: using guessed type int __security_cookie;

//----- (006781E0) --------------------------------------------------------
void *__thiscall SkyCtrl::_scalar_deleting_destructor_(SkyCtrl *this, unsigned int a2)
{
  void *v2; // edi@1
  NiNode *v3; // esi@1

  v2 = this;
  this->vfptr = (SkyCtrlVtbl *)&SkyCtrl::_vftable_;
  v3 = this->m_spNode.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C62DC: using guessed type int (__thiscall *SkyCtrl___vftable_)(void *p, char);

//----- (00678230) --------------------------------------------------------
void __thiscall NiTextureAccumulator::CopyMembers(NiTextureAccumulator *this, NiTextureAccumulator *pkDest, NiCloningProcess *kCloning)
{
  NiInterpolator::CopyMembers((NiCollisionObject *)this, (NiCollisionObject *)pkDest, kCloning);
}

//----- (00678240) --------------------------------------------------------
void __thiscall NiTextureAccumulator::LoadBinary(NiTextureAccumulator *this, NiStream *kStream)
{
  NiLODData::LoadBinary((NiRenderTargetGroup *)this, kStream);
}

//----- (00678250) --------------------------------------------------------
void __thiscall NiTextureAccumulator::LinkObject(NiTextureAccumulator *this, NiStream *kStream)
{
  NiPosData::LinkObject((NiPSysEmitterCtlrData *)this, kStream);
}

//----- (00678260) --------------------------------------------------------
bool __thiscall NiTextureAccumulator::RegisterStreamables(NiTextureAccumulator *this, NiStream *kStream)
{
  return NiMorphData::RegisterStreamables((NiPSysModifier *)this, kStream);
}

//----- (00678270) --------------------------------------------------------
void __thiscall NiTextureAccumulator::SaveBinary(NiTextureAccumulator *this, NiStream *kStream)
{
  NiPosData::LinkObject((NiPSysEmitterCtlrData *)this, kStream);
}

//----- (00678280) --------------------------------------------------------
bool __thiscall NiTextureAccumulator::IsEqual(NiTextureAccumulator *this, NiObject *pkObject)
{
  return NiSequence::IsEqual(&this->baseclass_0, pkObject) != 0;
}

//----- (006782A0) --------------------------------------------------------
void __thiscall World::Terminate(World *this)
{
  World *v1; // esi@1

  v1 = this;
  MiniHouseIndoor::Terminate(&this->m_MiniHouseIndoorMode);
  v1->m_MinihouseJoinOpt.bMaster = 0;
  World::TerminatePathFinding(v1);
  World::TerminateMiniMap(v1);
  World::TerminateMisc(v1);
  World::TerminatePick(v1);
  World::TerminateShadow(v1);
  World::TerminateLightFog(v1);
  World::TerminateSkyCtrl(v1);
  World::TerminateCamera(v1);
  World::TerminateScene(v1);
}

//----- (006782F0) --------------------------------------------------------
void __thiscall World::Clear(World *this)
{
  World *v1; // esi@1

  v1 = this;
  World::ClearPathFinding(this);
  World::ClearMiniMap(v1);
  World::ClearMisc(v1);
  World::ClearPick(v1);
  World::ClearShadow(v1);
  World::ClearLightFog(v1);
  World::ClearSkyCtrl(v1);
  World::ClearCamera(v1);
  World::ClearScene(v1);
}

//----- (00678340) --------------------------------------------------------
bool __thiscall World::Init(World *this, float fScreenWidth, float fScreenHeight)
{
  World *v3; // esi@1

  v3 = this;
  if ( World::InitScene(this) )
    World::InitCamera(v3, fScreenWidth, fScreenHeight);
  return 0;
}

//----- (00678430) --------------------------------------------------------
void __thiscall World::Update(World *this, float fTime)
{
  World *v2; // esi@1

  v2 = this;
  World::UpdateSkyCtrl(this, fTime);
  World::UpdateLightFog(v2, fTime);
  World::UpdateCamera(v2, fTime);
  World::UpdateMainCharMoveTargetPoint(v2, fTime);
  World::UpdateCharSelectMark(v2, fTime);
  World::UpdateSkyScene(v2, fTime);
  World::DrawShadow(v2);
  if ( v2->m_MiniHouseIndoorMode.m_eState )
    MiniHouseIndoor::Update(&v2->m_MiniHouseIndoorMode, fTime);
  CMagicCircleController::Update(v2->m_spMagicCircleController.m_pObject, fTime);
  World::UpdateCharDecalMark(v2, fTime);
  World::UpdateScene(v2, fTime);
}

//----- (006784E0) --------------------------------------------------------
void __thiscall World::SetMapDirectionalLightAmbientColor(World *this, NiColor *kColor)
{
  NiDirectionalLight *v2; // eax@1
  float v3; // ecx@1

  v2 = this->m_spMapDirectionalLight.m_pObject;
  v2->baseclass_0.m_kAmb.r = kColor->r;
  v2->baseclass_0.m_kAmb.g = kColor->g;
  v3 = kColor->b;
  ++v2->baseclass_0.baseclass_0.m_uiRevID;
  v2->baseclass_0.m_kAmb.b = v3;
}

//----- (00678510) --------------------------------------------------------
void __thiscall World::SetMapDirectionalLightDiffuseColor(World *this, NiColor *kColor)
{
  NiDirectionalLight *v2; // eax@1
  float v3; // ecx@1

  v2 = this->m_spMapDirectionalLight.m_pObject;
  v2->baseclass_0.m_kDiff.r = kColor->r;
  v2->baseclass_0.m_kDiff.g = kColor->g;
  v3 = kColor->b;
  ++v2->baseclass_0.baseclass_0.m_uiRevID;
  v2->baseclass_0.m_kDiff.b = v3;
}

//----- (00678540) --------------------------------------------------------
NiPointer<NiAVObject> *__thiscall World::GetGroundObject(World *this, NiPointer<NiAVObject> *result, const char *pcNodeName)
{
  int v3; // esi@0
  NiNode *v4; // ecx@1
  NiPointer<NiAVObject> *v5; // eax@2
  int v6; // eax@3

  v4 = this->m_spGroundObject.m_pObject;
  if ( v4 )
  {
    v6 = ((int (__stdcall *)(const char *, int))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           pcNodeName,
           v3);
    result->m_pObject = (NiAVObject *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)(v6 + 4));
    v5 = result;
  }
  else
  {
    v5 = result;
    result->m_pObject = 0;
  }
  return v5;
}

//----- (00678590) --------------------------------------------------------
void __cdecl ShDrawVisibleArrayAppend(NiVisibleArray *kVisibleSet)
{
  NiAccumulator *v1; // esi@2
  unsigned int v2; // edi@6
  unsigned int v3; // esi@6
  NiRenderer *pkRenderer; // [sp+0h] [bp-14h]@1
  NiAccumulator *spSorter; // [sp+4h] [bp-10h]@2

  pkRenderer = NiRenderer::ms_pkRenderer;
  if ( NiRenderer::ms_pkRenderer )
  {
    v1 = NiRenderer::ms_pkRenderer->m_spAccum.m_pObject;
    spSorter = v1;
    if ( v1 )
      InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount);
    if ( v1 )
    {
      v1->baseclass_0.baseclass_0.vfptr[17].__vecDelDtor((NiRefObject *)v1, (unsigned int)kVisibleSet);
    }
    else
    {
      v2 = kVisibleSet->m_uiCurrentSize;
      v3 = 0;
      if ( v2 )
      {
        do
          ((void (__stdcall *)(_DWORD))kVisibleSet->m_ppkArray[v3++]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(pkRenderer);
        while ( v3 < v2 );
      }
      v1 = spSorter;
    }
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount) )
        v1->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
    }
  }
}

//----- (00678650) --------------------------------------------------------
void __thiscall World::GetLoadFolderName(World *this, char *pMapLoadFolderName, const char *pkExt)
{
  World *v3; // esi@1
  Name3 *v4; // edi@1
  MapInfo *v5; // eax@1
  int v6; // eax@1
  const char *v7; // [sp-14h] [bp-38h]@4
  char acMapName[13]; // [sp+10h] [bp-14h]@1
  unsigned int v9; // [sp+20h] [bp-4h]@1
  int v10; // [sp+24h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  v4 = &this->m_kMapName;
  MapViewInfoTab::GetByMapName(&this->m_kMapName);
  v5 = MapInfoTab::GetByMapName(v4);
  *(_DWORD *)acMapName = *(_DWORD *)&v5->MapFolderName.n3_name[0];
  *(_DWORD *)&acMapName[4] = *(_DWORD *)&v5->MapFolderName.n3_name[4];
  *(_DWORD *)&acMapName[8] = *(_DWORD *)&v5->MapFolderName.n3_name[8];
  v6 = v3->m_MapType;
  acMapName[12] = 0;
  switch ( v6 )
  {
    case 0:
    case 6:
    case 7:
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = "%sfield\\%s\\%s.%s";
      goto LABEL_17;
    case 1:
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = "%sKDfield\\%s\\%s.%s";
      goto LABEL_17;
    case 2:
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = "%sMHfield\\%s\\%s.%s";
      goto LABEL_17;
    case 3:
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = "%sIDfield\\%s\\%s.%s";
      goto LABEL_17;
    case 4:
      if ( !Folder::m_bInit )
        Folder::Init();
      v7 = "%sfield\\%s\\%s.%s";
LABEL_17:
      sprintf(pMapLoadFolderName, v7);
      break;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006787B0) --------------------------------------------------------
void __cdecl ShDrawVisibleArray(NiCamera *pkCamera, NiVisibleArray *kVisibleSet)
{
  NiAccumulator *v2; // esi@3

  if ( NiRenderer::ms_pkRenderer && pkCamera )
  {
    v2 = NiRenderer::ms_pkRenderer->m_spAccum.m_pObject;
    if ( v2 )
      InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount);
    if ( v2 )
      v2->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v2, (unsigned int)pkCamera);
    ShDrawVisibleArrayAppend(kVisibleSet);
    if ( v2 )
      ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v2);
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
}

//----- (00678860) --------------------------------------------------------
void __cdecl ShDrawScene(NiCamera *pkCamera, NiAVObject *pkScene, NiCullingProcess *kCuller, NiVisibleArray *pkVisibleSet)
{
  NiVisibleArray *v4; // esi@4

  if ( NiRenderer::ms_pkRenderer )
  {
    if ( pkCamera )
    {
      if ( pkScene )
      {
        v4 = pkVisibleSet;
        if ( pkVisibleSet || (v4 = kCuller->m_pkVisibleSet) != 0 )
        {
          NiRenderer::SetCameraData(NiRenderer::ms_pkRenderer, pkCamera);
          v4->m_uiCurrentSize = 0;
          kCuller->vfptr->Process(kCuller, pkCamera, pkScene, v4);
          ShDrawVisibleArray(pkCamera, v4);
        }
      }
    }
  }
}

//----- (006788C0) --------------------------------------------------------
void __thiscall World::Draw(World *this)
{
  World *v1; // esi@1
  NiAVObject *v2; // ST04_4@1
  NiCamera *v3; // ST00_4@1
  int v4; // eax@1
  NiCamera *v5; // esi@1
  NiVisibleArray *v6; // edi@4
  NiAVObject *v7; // ecx@5
  NiVisibleArray m_kVisible; // [sp+0h] [bp-B4h]@1
  int v9; // [sp+10h] [bp-A4h]@1
  NiCullingProcess m_kCuller; // [sp+14h] [bp-A0h]@1
  unsigned int v11; // [sp+A4h] [bp-10h]@1
  int v12; // [sp+B0h] [bp-4h]@1
  int v13; // [sp+B4h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  NiCamera::SetViewFrustum(this->m_spCamera.m_pObject, &this->m_kSkyFrustum);
  m_kVisible.m_ppkArray = 0;
  m_kVisible.m_uiCurrentSize = 0;
  m_kVisible.m_uiAllocatedSize = 0;
  m_kVisible.m_uiGrowBy = 1024;
  NiVisibleArray::SetAllocatedSize(&m_kVisible, 0x400u);
  v12 = 0;
  NiCullingProcess::NiCullingProcess(&m_kCuller, &m_kVisible);
  v2 = (NiAVObject *)v1->m_spSkyScene.m_pObject;
  v3 = v1->m_spCamera.m_pObject;
  LOBYTE(v12) = 1;
  NiDrawScene(v3, v2, &m_kCuller, 0);
  NiCamera::SetViewFrustum(v1->m_spCamera.m_pObject, &v1->m_kWorldFrustum);
  v4 = (int)v1->m_spWorldScene.m_pObject;
  v5 = v1->m_spCamera.m_pObject;
  v9 = v4;
  if ( NiRenderer::ms_pkRenderer )
  {
    if ( v5 )
    {
      if ( v4 )
      {
        v6 = m_kCuller.m_pkVisibleSet;
        if ( m_kCuller.m_pkVisibleSet )
        {
          NiRenderer::SetCameraData(NiRenderer::ms_pkRenderer, v5);
          v7 = (NiAVObject *)v9;
          v6->m_uiCurrentSize = 0;
          m_kCuller.vfptr->Process(&m_kCuller, v5, v7, v6);
          ShDrawVisibleArray(v5, v6);
        }
      }
    }
  }
  LOBYTE(v12) = 0;
  NiCullingProcess::_NiCullingProcess(&m_kCuller);
  operator delete(m_kVisible.m_ppkArray);
}
// A85C00: using guessed type int __security_cookie;

//----- (00678A10) --------------------------------------------------------
void __thiscall NiTextureAccumulator::NiTextureAccumulator(NiTextureAccumulator *this)
{
  NiTextureAccumulator *v1; // esi@1

  v1 = this;
  NiAccumulator::NiAccumulator(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiTextureAccumulator::_vftable_;
  *(_DWORD *)&v1->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecItem.baseclass_0._Mylast = 0;
  v1->m_vecItem.baseclass_0._Myend = 0;
}
// 9C645C: using guessed type int (__thiscall *NiTextureAccumulator___vftable_)(void *p, char);

//----- (00678A30) --------------------------------------------------------
NiObject *__thiscall NiTextureAccumulator::CreateClone(NiTextureAccumulator *this, NiCloningProcess *kCloning)
{
  NiCollisionObject *v2; // ebx@1
  void *v3; // eax@1
  void *v4; // esi@1

  v2 = (NiCollisionObject *)this;
  v3 = operator new(0x1Cu);
  v4 = v3;
  if ( v3 )
  {
    NiAccumulator::NiAccumulator((NiAccumulator *)v3);
    *(_DWORD *)v4 = &NiTextureAccumulator::_vftable_;
    *((_DWORD *)v4 + 3) = 0;
    *((_DWORD *)v4 + 4) = 0;
    *((_DWORD *)v4 + 5) = 0;
  }
  else
  {
    v4 = 0;
  }
  NiInterpolator::CopyMembers(v2, (NiCollisionObject *)v4, kCloning);
  return (NiObject *)v4;
}
// 9C645C: using guessed type int (__thiscall *NiTextureAccumulator___vftable_)(void *p, char);

//----- (00678AC0) --------------------------------------------------------
NiObject *__cdecl NiTextureAccumulator::CreateObject()
{
  void *v0; // eax@1
  void *v1; // esi@1
  NiObject *result; // eax@2

  v0 = operator new(0x1Cu);
  v1 = v0;
  if ( v0 )
  {
    NiAccumulator::NiAccumulator((NiAccumulator *)v0);
    *(_DWORD *)v1 = &NiTextureAccumulator::_vftable_;
    *((_DWORD *)v1 + 3) = 0;
    *((_DWORD *)v1 + 4) = 0;
    *((_DWORD *)v1 + 5) = 0;
    result = (NiObject *)v1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9C645C: using guessed type int (__thiscall *NiTextureAccumulator___vftable_)(void *p, char);

//----- (00678B40) --------------------------------------------------------
void __thiscall NiTextureAccumulator::_NiTextureAccumulator(NiTextureAccumulator *this)
{
  NiTextureAccumulator *v1; // edi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiTextureAccumulator::_vftable_;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&this->m_vecItem,
    0);
  if ( *(_DWORD *)&v1->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecItem.baseclass_0._Mylast = 0;
  v1->m_vecItem.baseclass_0._Myend = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiAccumulator::_vftable_;
  NiRefObject::_NiRefObject((CPostProcessEffect *)v1);
}
// 9C63F4: using guessed type int (__thiscall *NiAccumulator___vftable_)(void *p, char);
// 9C645C: using guessed type int (__thiscall *NiTextureAccumulator___vftable_)(void *p, char);

//----- (00678BD0) --------------------------------------------------------
void __thiscall NiTextureAccumulator::RegisterObjectArray(NiTextureAccumulator *this, NiVisibleArray *kArray)
{
  int v2; // eax@1
  char *v3; // esi@2
  void *v4; // edi@3
  unsigned int v5; // eax@3
  int v6; // edx@4
  int v7; // ecx@5
  signed int v8; // edi@5
  int v9; // eax@6
  int v10; // eax@7
  int v11; // ecx@7
  unsigned int v12; // ecx@9
  int v13; // eax@14
  int v14; // ecx@16
  int v15; // eax@17
  int v16; // eax@18
  int v17; // ecx@18
  unsigned int v18; // ecx@20
  int v19; // eax@25
  unsigned int uiQuantity; // [sp+0h] [bp-Ch]@1
  int i; // [sp+4h] [bp-8h]@1
  void *pkObject; // [sp+8h] [bp-4h]@3

  v2 = 0;
  uiQuantity = kArray->m_uiCurrentSize;
  i = 0;
  if ( uiQuantity )
  {
    v3 = (char *)&this->m_vecItem;
    do
    {
      v4 = kArray->m_ppkArray[v2];
      v5 = *((_DWORD *)v3 + 1);
      pkObject = v4;
      if ( (unsigned int)&pkObject >= v5 || (v6 = *(_DWORD *)v3, *(_DWORD *)v3 > (unsigned int)&pkObject) )
      {
        v14 = *((_DWORD *)v3 + 2);
        if ( v5 == v14 )
        {
          v15 = (signed int)(v5 - *(_DWORD *)v3) >> 2;
          if ( (unsigned int)v15 > 0x3FFFFFFE )
LABEL_29:
            std::_Xlength_error("vector<T> too long");
          v16 = v15 + 1;
          v17 = (v14 - *(_DWORD *)v3) >> 2;
          if ( v16 > (unsigned int)v17 )
          {
            if ( 1073741823 - ((unsigned int)v17 >> 1) >= v17 )
              v18 = ((unsigned int)v17 >> 1) + v17;
            else
              v18 = 0;
            if ( v18 < v16 )
              v18 = v16;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v3,
              v18);
          }
        }
        v19 = *((_DWORD *)v3 + 1);
        if ( v19 )
          *(_DWORD *)v19 = v4;
      }
      else
      {
        v7 = *((_DWORD *)v3 + 2);
        v8 = (signed int)((char *)&pkObject - v6) >> 2;
        if ( v5 == v7 )
        {
          v9 = (signed int)(v5 - v6) >> 2;
          if ( (unsigned int)v9 > 0x3FFFFFFE )
            goto LABEL_29;
          v10 = v9 + 1;
          v11 = (v7 - v6) >> 2;
          if ( v10 > (unsigned int)v11 )
          {
            if ( 1073741823 - ((unsigned int)v11 >> 1) >= v11 )
              v12 = ((unsigned int)v11 >> 1) + v11;
            else
              v12 = 0;
            if ( v12 < v10 )
              v12 = v10;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v3,
              v12);
          }
        }
        v13 = *((_DWORD *)v3 + 1);
        if ( v13 )
          *(_DWORD *)v13 = *(_DWORD *)(*(_DWORD *)v3 + 4 * v8);
      }
      *((_DWORD *)v3 + 1) += 4;
      v2 = i + 1;
      i = v2;
    }
    while ( v2 < uiQuantity );
  }
}

//----- (00678CE0) --------------------------------------------------------
void __thiscall NiTextureAccumulator::FinishAccumulating(NiTextureAccumulator *this)
{
  NiTextureAccumulator *v1; // ebx@1
  NiGeometry **v2; // esi@2
  NiGeometry **i; // edi@2
  NiRenderer *pkRenderer; // [sp+4h] [bp-4h]@1

  v1 = this;
  pkRenderer = NiRenderer::ms_pkRenderer;
  if ( NiRenderer::ms_pkRenderer )
  {
    ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)();
    v2 = *(NiGeometry ***)&v1->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0];
    for ( i = v1->m_vecItem.baseclass_0._Mylast; v2 != i; ++v2 )
      ((void (__stdcall *)(_DWORD))(*v2)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(pkRenderer);
    std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
      (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&v1->m_vecItem,
      0);
    NiAccumulator::FinishAccumulating((NiExtraData *)v1);
  }
}

//----- (00678D40) --------------------------------------------------------
void __thiscall World::NowLoadingText(World *this, int LoadingRate)
{
  NiTexturingProperty *v2; // ebx@1
  _iobuf *v3; // eax@4
  char v4; // kr04_1@8
  char *v5; // eax@17
  void *v6; // esi@17
  void *v7; // eax@18
  NiScreenElementsData *v8; // eax@19
  int v9; // eax@19
  int v10; // edi@19
  int v11; // eax@20
  void *v12; // esi@22
  void *v13; // eax@23
  NiScreenElementsData *v14; // eax@24
  int v15; // eax@24
  int v16; // esi@24
  int v17; // eax@25
  NiScreenElementsData *v18; // ecx@27
  float v19; // ST38_4@27
  void *v20; // eax@27
  NiTexturingProperty *v21; // eax@28
  void *v22; // eax@30
  const char *v23; // ecx@31
  NiTexturingProperty *v24; // eax@33
  void *v25; // eax@34
  void *v26; // ebx@34
  void *v27; // eax@37
  void *v28; // ebx@37
  NiRenderer *v29; // ebx@40
  bool v30; // zf@42
  signed int v31; // eax@42
  NiRenderTargetGroup *v32; // eax@48
  NiTexturingProperty *pkProperty; // [sp+24h] [bp-130h]@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > LoadingTextFileName; // [sp+28h] [bp-12Ch]@17
  char BGFileName[256]; // [sp+44h] [bp-110h]@4
  unsigned int v36; // [sp+144h] [bp-10h]@1
  int v37; // [sp+150h] [bp-4h]@17
  int v38; // [sp+154h] [bp+0h]@1

  v36 = (unsigned int)&v38 ^ __security_cookie;
  v2 = 0;
  if ( MapViewInfoTab::GetByMapName(&this->m_kMapName) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(BGFileName, "%sLoading\\%s.png");
    v3 = fopen(BGFileName, "r");
    if ( v3 )
      goto LABEL_65;
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(BGFileName, "%sLoading\\%s.tga");
    v3 = fopen(BGFileName, "r");
    if ( v3 )
      goto LABEL_65;
    v4 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable + 16))(
           ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
           0);
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(BGFileName, "%sLoading\\%s.png");
    v3 = fopen(BGFileName, "r");
    if ( v3 )
    {
LABEL_65:
      fclose(v3);
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      sprintf(BGFileName, "%sLoading\\%s.tga");
    }
    if ( !Folder::m_bInit )
      Folder::Init();
    LoadingTextFileName.baseclass_0._Myres = 15;
    LoadingTextFileName.baseclass_0._Mysize = 0;
    LoadingTextFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v5 = Folder::Merge(&Folder::m_acMenu, "loading\\NowLoadingTextColor.tga");
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&LoadingTextFileName, v5, strlen(v5));
    v37 = 0;
    v6 = operator new(0xC4u);
    LOBYTE(v37) = 1;
    if ( v6 )
    {
      v7 = operator new(0x70u);
      LOBYTE(v37) = 2;
      if ( v7 )
      {
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v7, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
        LOBYTE(v37) = 1;
        NiScreenElements::NiScreenElements((NiScreenElements *)v6, v8);
        v10 = v9;
      }
      else
      {
        LOBYTE(v37) = 1;
        NiScreenElements::NiScreenElements((NiScreenElements *)v6, 0);
        v10 = v11;
      }
    }
    else
    {
      v10 = 0;
    }
    LOBYTE(v37) = 0;
    v12 = operator new(0xC4u);
    LOBYTE(v37) = 3;
    if ( v12 )
    {
      v13 = operator new(0x70u);
      LOBYTE(v37) = 4;
      if ( v13 )
      {
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v13, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
        LOBYTE(v37) = 3;
        NiScreenElements::NiScreenElements((NiScreenElements *)v12, v14);
        v16 = v15;
      }
      else
      {
        LOBYTE(v37) = 3;
        NiScreenElements::NiScreenElements((NiScreenElements *)v12, 0);
        v16 = v17;
      }
    }
    else
    {
      v16 = 0;
    }
    v18 = *(NiScreenElementsData **)(v10 + 184);
    LOBYTE(v37) = 0;
    NiScreenElementsData::Insert(v18, 4u, 0, 0);
    NiScreenElementsData::Insert(*(NiScreenElementsData **)(v16 + 184), 4u, 0, 0);
    NiScreenElementsData::SetRectangle(*(NiScreenElementsData **)(v10 + 184), 0, 0.0, 0.0, 1.0, 1.0);
    v19 = (double)LoadingRate / 100.0 * 0.5 + 0.5;
    NiScreenElementsData::SetRectangle(*(NiScreenElementsData **)(v16 + 184), 0, 0.0, 0.87900001, v19, 0.121);
    NiScreenElementsData::UpdateBound(*(NiScreenElementsData **)(v10 + 184));
    NiScreenElementsData::UpdateBound(*(NiScreenElementsData **)(v16 + 184));
    NiScreenElementsData::SetColors(*(NiScreenElementsData **)(v10 + 184), 0, &NiColorA::WHITE);
    NiScreenElementsData::SetColors(*(NiScreenElementsData **)(v16 + 184), 0, &NiColorA::WHITE);
    NiScreenElementsData::SetTextures(*(NiScreenElementsData **)(v10 + 184), 0, 0, 0.0, 0.0, 1.0, 1.0);
    NiScreenElementsData::SetTextures(*(NiScreenElementsData **)(v16 + 184), 0, 0, 0.0, 0.0, v19, 1.0);
    v20 = operator new(0x44u);
    LOBYTE(v37) = 5;
    if ( v20 )
    {
      NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v20, BGFileName);
      pkProperty = v21;
    }
    else
    {
      pkProperty = 0;
    }
    LOBYTE(v37) = 0;
    NiTexturingProperty::SetBaseClampMode(pkProperty, 0);
    v22 = operator new(0x44u);
    LOBYTE(v37) = 6;
    if ( v22 )
    {
      v23 = *(const char **)&LoadingTextFileName;
      if ( LoadingTextFileName.baseclass_0._Myres < 0x10 )
        v23 = (const char *)&LoadingTextFileName;
      NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v22, v23);
      v2 = v24;
    }
    LOBYTE(v37) = 0;
    NiTexturingProperty::SetBaseClampMode(v2, 0);
    NiAVObject::AttachProperty((NiAVObject *)v10, &pkProperty->baseclass_0);
    NiAVObject::AttachProperty((NiAVObject *)v16, &v2->baseclass_0);
    v25 = operator new(0x28u);
    v26 = v25;
    LOBYTE(v37) = 7;
    if ( v25 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v25);
      *(_DWORD *)v26 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v26 + 14) = 0;
      *((_DWORD *)v26 + 8) = 0;
      *((_DWORD *)v26 + 9) = 1;
    }
    else
    {
      v26 = 0;
    }
    LOBYTE(v37) = 0;
    *((_DWORD *)v26 + 8) = 1;
    *((_DWORD *)v26 + 9) = 0;
    NiAVObject::AttachProperty((NiAVObject *)v10, (NiProperty *)v26);
    NiAVObject::AttachProperty((NiAVObject *)v16, (NiProperty *)v26);
    v27 = operator new(0x20u);
    v28 = v27;
    LOBYTE(v37) = 8;
    if ( v27 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v27);
      *(_DWORD *)v28 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v28 + 14) = 236;
      *((_BYTE *)v28 + 30) = 0;
    }
    else
    {
      v28 = 0;
    }
    *((_WORD *)v28 + 14) &= 0xFFFEu;
    LOBYTE(v37) = 0;
    NiAVObject::AttachProperty((NiAVObject *)v10, (NiProperty *)v28);
    NiAVObject::AttachProperty((NiAVObject *)v16, (NiProperty *)v28);
    NiAVObject::UpdateProperties((NiAVObject *)v10);
    NiAVObject::Update((NiAVObject *)v10, 0.0, 1);
    NiAVObject::UpdateProperties((NiAVObject *)v16);
    NiAVObject::Update((NiAVObject *)v16, 0.0, 1);
    v29 = NiRenderer::ms_pkRenderer;
    if ( NiRenderer::ms_pkRenderer->m_eFrameState || NiRenderer::ms_pkRenderer->m_eOffScreenFrameState )
    {
      v31 = 1;
    }
    else
    {
      v30 = ((int (__thiscall *)(NiRenderer *))NiRenderer::ms_pkRenderer->baseclass_0.baseclass_0.vfptr[66].__vecDelDtor)(NiRenderer::ms_pkRenderer) == 0;
      v31 = 1;
      if ( !v30 )
        v29->m_eFrameState = 1;
    }
    if ( (v29->m_eFrameState == v31 || v29->m_eOffScreenFrameState == v31) && !v29->m_bRenderTargetGroupActive )
    {
      v32 = (NiRenderTargetGroup *)((int (__thiscall *)(NiRenderer *))v29->baseclass_0.baseclass_0.vfptr[26].__vecDelDtor)(v29);
      NiRenderer::BeginUsingRenderTargetGroup(v29, v32, 7u);
      v31 = 1;
    }
    if ( (v29->m_eFrameState == v31 || v29->m_eOffScreenFrameState == v31) && v29->m_bRenderTargetGroupActive == 1 )
      v29->baseclass_0.baseclass_0.vfptr[71].__vecDelDtor((NiRefObject *)v29, 0);
    NiScreenElements::Draw((NiScreenElements *)v10, v29);
    NiScreenElements::Draw((NiScreenElements *)v16, v29);
    NiRenderer::EndUsingRenderTargetGroup(v29);
    if ( v29->m_eFrameState == 1
      && !v29->m_eOffScreenFrameState
      && (unsigned __int8)((int (__thiscall *)(NiRenderer *))v29->baseclass_0.baseclass_0.vfptr[67].__vecDelDtor)(v29) )
      v29->m_eFrameState = 2;
    if ( v29->m_eFrameState == 2
      && !v29->m_eOffScreenFrameState
      && (unsigned __int8)((int (__thiscall *)(NiRenderer *))v29->baseclass_0.baseclass_0.vfptr[68].__vecDelDtor)(v29) )
    {
      ++v29->m_uiFrameID;
      v29->m_eFrameState = 0;
    }
    (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
    (**(void (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
    if ( LoadingTextFileName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&LoadingTextFileName);
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (006793A0) --------------------------------------------------------
void __thiscall NiTextureAccumulator::Sort(NiTextureAccumulator *this)
{
  std::_Sort<NiGeometry_____int_TextureSorter>(
    *(NiGeometry ***)&this->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0],
    this->m_vecItem.baseclass_0._Mylast,
    (signed int)((char *)this->m_vecItem.baseclass_0._Mylast
               - *(_DWORD *)&this->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2,
    (TextureSorter)this);
}

//----- (006793D0) --------------------------------------------------------
void __thiscall World::_World(World *this)
{
  World *v1; // esi@1
  void *v2; // eax@1
  void *v3; // edi@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v4; // ST0C_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v5; // ST08_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v6; // ST0C_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v7; // ST08_4@3
  void **v8; // eax@3
  void *v9; // ecx@3
  void *v10; // edi@4
  NiNode *v11; // edi@5
  NiTexturePalette *v12; // edi@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v13; // ST0C_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v14; // ST08_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v15; // ST0C_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v16; // ST08_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v17; // ST0C_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v18; // ST08_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v19; // ST0C_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v20; // ST08_4@13
  NiSourceTexture *v21; // edi@13
  NiNode *v22; // edi@17
  NiTransformController *v23; // edi@21
  CMagicCircleController *v24; // edi@25
  NiNode *v25; // edi@29
  int v26; // edi@33
  NiTListItem<NiPointer<Shadow> > *v27; // ebx@33
  NiTListItem<NiPointer<Shadow> > *v28; // ST0C_4@34
  NiDirectionalLight *v29; // edi@35
  NiDirectionalLight *v30; // edi@39
  NiAmbientLight *v31; // edi@43
  NiCamera *v32; // edi@47
  void *v33; // eax@51
  NiNode *v34; // edi@53
  NiNode *v35; // edi@57
  NiNode *v36; // edi@61
  NiNode *v37; // edi@65
  NiNode *v38; // edi@69
  NiNode *v39; // edi@73
  NiNode *v40; // edi@77
  NiNode *v41; // edi@81
  NiNode *v42; // edi@85
  NiSortAdjustNode *v43; // edi@89
  NiNode *v44; // edi@93
  NiSortAdjustNode *v45; // edi@97
  NiNode *v46; // edi@101
  NiNode *v47; // edi@105
  NiNode *v48; // edi@109
  NiNode *v49; // edi@113
  NiNode *v50; // edi@117
  NiNode *v51; // edi@121
  NiNode *v52; // edi@125
  NiNode *v53; // edi@129
  NiNode *v54; // edi@133
  NiNode *v55; // edi@137
  NiNode *v56; // edi@141
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > result; // [sp+0h] [bp-18h]@3
  std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *v58; // [sp+4h] [bp-14h]@3
  World *v59; // [sp+8h] [bp-10h]@1
  int v60; // [sp+14h] [bp-4h]@1

  v1 = this;
  v59 = this;
  v60 = 59;
  DecalMgr::_DecalMgr(&this->m_kDecalMgr);
  LOBYTE(v60) = 58;
  HeightMapMaker::_HeightMapMaker(&v1->m_HeightMapMaker);
  v2 = v1->m_kCullUPdateData.kCheckedNodes.m_pBase;
  LOBYTE(v60) = 57;
  v1->m_kCullUPdateData.kCheckedNodes.vfptr = (NiTArray<NiPointer<NiNode> >Vtbl *)&NiTArray<NiPointer<NiNode>>::_vftable_;
  if ( v2 )
  {
    v3 = (char *)v2 - 4;
    _eh_vector_destructor_iterator_(
      v2,
      4u,
      *((_DWORD *)v2 - 1),
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    operator delete__(v3);
  }
  v1->kQaudSceneMakerNotAni.m_pRootScene = 0;
  v1->kQaudSceneMakerAni.m_pRootScene = 0;
  v58 = &v1->m_mapBoundTime;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v60) = 60;
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
    &v1->m_mapBoundTime.baseclass_0,
    &result,
    v5,
    v4);
  operator delete(v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)&v1->m_mapBound;
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v60) = 61;
  std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(
    &v1->m_mapBound.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)&v58,
    v7,
    v6);
  operator delete(v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v8 = *(void ***)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v9 = *v8;
  *v8 = v8;
  *(_DWORD *)(*(_DWORD *)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_vecAniObject.baseclass_0.baseclass_0._Mysize = 0;
  if ( v9 != *(void **)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v10 = *(void **)v9;
      operator delete(v9);
      v9 = v10;
    }
    while ( v10 != *(void **)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  LOBYTE(v60) = 51;
  _eh_vector_destructor_iterator_(
    v1->m_kExtraLightScene,
    0xCu,
    30,
    (void (__thiscall *)(void *))World::_unnamed_type_m_kExtraLightScene_::__unnamed_type_m_kExtraLightScene_);
  v11 = v1->m_spCameraShakeNode.m_pObject;
  LOBYTE(v60) = 50;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v12 = v1->m_spTexturePalette.m_pObject;
  LOBYTE(v60) = 49;
  if ( v12 && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.m_uiRefCount) && v12 )
    v12->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)&v1->m_vecUpdateFadeObject;
  v13 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v14 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v60) = 62;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_vecUpdateFadeObject,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v58,
    v14,
    v13);
  operator delete(v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)&v1->m_vecCameraIntersectObject;
  v15 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v16 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v60) = 63;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_vecCameraIntersectObject,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v58,
    v16,
    v15);
  operator delete(v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)&v1->m_vecFadeObject;
  v17 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v18 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v60) = 64;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_vecFadeObject,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v58,
    v18,
    v17);
  operator delete(v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)&v1->m_setChar;
  v19 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v20 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v60) = 65;
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(
    &v1->m_setChar.baseclass_0,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)&v58,
    v20,
    v19);
  operator delete(v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v21 = v1->m_spMiniMapTexture.m_pObject;
  LOBYTE(v60) = 44;
  if ( v21
    && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v21 )
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
  LOBYTE(v60) = 43;
  NsMergePortal::_NsMergePortal(&v1->m_kMergePortal);
  LOBYTE(v60) = 42;
  NsDecal::_NsDecal(&v1->m_kCharSelectMarkDecal);
  v22 = v1->m_spCharSelectMarkNode.m_pObject;
  LOBYTE(v60) = 41;
  if ( v22
    && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v22 )
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
  v23 = v1->m_spShakeContrl.m_pObject;
  LOBYTE(v60) = 40;
  if ( v23
    && !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v23 )
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
  v24 = v1->m_spMagicCircleController.m_pObject;
  LOBYTE(v60) = 39;
  if ( v24 && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.m_uiRefCount) && v24 )
    v24->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
  v25 = v1->m_spMoveTargetPointNode.m_pObject;
  LOBYTE(v60) = 38;
  if ( v25
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
  v26 = (int)&v1->m_kShadowList;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)&v1->m_kShadowList;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v27 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  LOBYTE(v60) = 66;
  while ( v27 )
  {
    v28 = v27;
    v27 = v27->m_pkNext;
    (*(void (__thiscall **)(PgTList<NiPointer<Shadow> > *, NiTListItem<NiPointer<Shadow> > *))(*(_DWORD *)v26 + 8))(
      &v1->m_kShadowList,
      v28);
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v26 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Shadow>>::_vftable_;
  v29 = v1->m_spMapDirectionalLight.m_pObject;
  LOBYTE(v60) = 36;
  if ( v29
    && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v29 )
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v29,
      1u);
  v30 = v1->m_spDirectionalLight.m_pObject;
  LOBYTE(v60) = 35;
  if ( v30
    && !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v30 )
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v30,
      1u);
  v31 = v1->m_spAmbientLight.m_pObject;
  LOBYTE(v60) = 34;
  if ( v31
    && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v31 )
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v31,
      1u);
  LOBYTE(v60) = 33;
  SkyCtrl::_SkyCtrl(&v1->m_kSkyCtrl);
  LOBYTE(v60) = 32;
  OscillationEx::_OscillationEx(&v1->m_kCamOscillation);
  LOBYTE(v60) = 31;
  CameraCtrl::_CameraCtrl(&v1->m_kCameraCtrl);
  v32 = v1->m_spCamera.m_pObject;
  LOBYTE(v60) = 30;
  if ( v32
    && !InterlockedDecrement((volatile LONG *)&v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v32 )
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
  LOBYTE(v60) = 29;
  AreaInfoData::_AreaInfoData(&v1->m_kAreaInfoData);
  v33 = v1->m_kInstantBlock.m_pbyBlockData;
  v1->m_kInstantBlock.vfptr = (InstantBlockVtbl *)&InstantBlock::_vftable_;
  v1->m_kInstantBlock.m_uiTotalHeadCnt = 0;
  if ( v33 )
    operator delete__(v33);
  v1->m_kInstantBlock.m_pbyBlockData = 0;
  LOBYTE(v60) = 27;
  CFindWay::_CFindWay(&v1->kPathFindingNew);
  v1->kPathFinding.vfptr = (NsPathFindingVtbl *)&NsPathFinding::_vftable_;
  v34 = v1->m_spUseCameraCollidee.m_pObject;
  LOBYTE(v60) = 25;
  if ( v34
    && !InterlockedDecrement((volatile LONG *)&v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v34 )
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
  v35 = v1->m_spBuildingCollidee.m_pObject;
  LOBYTE(v60) = 24;
  if ( v35
    && !InterlockedDecrement((volatile LONG *)&v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v35 )
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v35, 1u);
  v36 = v1->m_spGroundObjectCollidee.m_pObject;
  LOBYTE(v60) = 23;
  if ( v36
    && !InterlockedDecrement((volatile LONG *)&v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v36 )
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
  v37 = v1->m_spGroundCollidee.m_pObject;
  LOBYTE(v60) = 22;
  if ( v37
    && !InterlockedDecrement((volatile LONG *)&v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v37 )
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
  v38 = v1->m_spEffectScene.m_pObject;
  LOBYTE(v60) = 21;
  if ( v38
    && !InterlockedDecrement((volatile LONG *)&v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v38 )
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
  v39 = v1->m_spWaterScene.m_pObject;
  LOBYTE(v60) = 20;
  if ( v39
    && !InterlockedDecrement((volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v39 )
    v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v39, 1u);
  v40 = v1->m_spSkyScene.m_pObject;
  LOBYTE(v60) = 19;
  if ( v40
    && !InterlockedDecrement((volatile LONG *)&v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v40 )
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v40, 1u);
  v41 = v1->m_spBDNotAni.m_pObject;
  LOBYTE(v60) = 18;
  if ( v41
    && !InterlockedDecrement((volatile LONG *)&v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v41 )
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v41, 1u);
  v42 = v1->m_spBDAni.m_pObject;
  LOBYTE(v60) = 17;
  if ( v42
    && !InterlockedDecrement((volatile LONG *)&v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v42 )
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v42, 1u);
  v43 = v1->m_spBuildingScene.m_pObject;
  LOBYTE(v60) = 16;
  if ( v43
    && !InterlockedDecrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v43 )
    v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
  v44 = v1->m_spAllGroundScene.m_pObject;
  LOBYTE(v60) = 15;
  if ( v44
    && !InterlockedDecrement((volatile LONG *)&v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v44 )
    v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v44, 1u);
  v45 = v1->m_spGroundTerrain.m_pObject;
  LOBYTE(v60) = 14;
  if ( v45
    && !InterlockedDecrement((volatile LONG *)&v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v45 )
    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
  v46 = v1->m_spWeatherEffectScene.m_pObject;
  LOBYTE(v60) = 13;
  if ( v46
    && !InterlockedDecrement((volatile LONG *)&v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v46 )
    v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v46, 1u);
  v47 = v1->m_spAbstateCharScene.m_pObject;
  LOBYTE(v60) = 12;
  if ( v47
    && !InterlockedDecrement((volatile LONG *)&v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v47 )
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
  v48 = v1->m_spNormalLightScene.m_pObject;
  LOBYTE(v60) = 11;
  if ( v48
    && !InterlockedDecrement((volatile LONG *)&v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v48 )
    v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
  v49 = v1->m_spMinihouseScene.m_pObject;
  LOBYTE(v60) = 10;
  if ( v49
    && !InterlockedDecrement((volatile LONG *)&v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v49 )
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v49, 1u);
  v50 = v1->m_spDirectionalLightScene.m_pObject;
  LOBYTE(v60) = 9;
  if ( v50
    && !InterlockedDecrement((volatile LONG *)&v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v50 )
    v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v50, 1u);
  v51 = v1->m_spGroundObject.m_pObject;
  LOBYTE(v60) = 8;
  if ( v51
    && !InterlockedDecrement((volatile LONG *)&v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v51 )
    v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v51, 1u);
  v52 = v1->m_spShadowScene.m_pObject;
  LOBYTE(v60) = 7;
  if ( v52
    && !InterlockedDecrement((volatile LONG *)&v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v52 )
    v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
  v53 = v1->m_spGroundScene.m_pObject;
  LOBYTE(v60) = 6;
  if ( v53
    && !InterlockedDecrement((volatile LONG *)&v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v53 )
    v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v53, 1u);
  v54 = v1->m_spDropItemScene.m_pObject;
  LOBYTE(v60) = 5;
  if ( v54
    && !InterlockedDecrement((volatile LONG *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v54 )
    v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v54, 1u);
  v55 = v1->m_spCharScene.m_pObject;
  LOBYTE(v60) = 4;
  if ( v55
    && !InterlockedDecrement((volatile LONG *)&v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v55 )
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
  v56 = v1->m_spWorldScene.m_pObject;
  LOBYTE(v60) = 3;
  if ( v56
    && !InterlockedDecrement((volatile LONG *)&v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v56 )
    v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v56, 1u);
  if ( *(_DWORD *)&v1->m_vecNearDropItem.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecNearDropItem.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecNearDropItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecNearDropItem.baseclass_0._Mylast = 0;
  v1->m_vecNearDropItem.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecNearMob.baseclass_0._Mylast = 0;
  v1->m_vecNearMob.baseclass_0._Myend = 0;
  LOBYTE(v60) = 0;
  LightFogCtrl::_LightFogCtrl(&v1->m_kLightFogCtrl);
  v60 = -1;
  MiniHouseIndoor::_MiniHouseIndoor(&v1->m_MiniHouseIndoorMode);
}
// 9793E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Shadow_____vftable_)(void *p, char);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 9C6440: using guessed type int (__thiscall *NsPathFinding___vftable_)(void *p, char);
// 9C6448: using guessed type int (__thiscall *InstantBlock___vftable_)(void *p, char);
// 9C6450: using guessed type int (__thiscall *NiTArray_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (00679C50) --------------------------------------------------------
void __thiscall World::World(World *this)
{
  World *v1; // ebx@1
  void *v2; // eax@1
  void *v3; // eax@2
  void *v4; // eax@3
  void *v5; // eax@4
  void *v6; // eax@5
  void *v7; // eax@6
  void *v8; // eax@7
  const void *v9; // eax@8
  bool v10; // ST18_1@8
  const void *v11; // eax@8
  NiFrustum thisa; // [sp+2Ch] [bp-4Ch]@8
  int (__thiscall **v13)(void *, char); // [sp+48h] [bp-30h]@11
  int (__thiscall **pExceptionObject)(void *, char); // [sp+54h] [bp-24h]@8
  float v15; // [sp+58h] [bp-20h]@8
  float v16; // [sp+5Ch] [bp-1Ch]@8
  World *v17; // [sp+60h] [bp-18h]@1
  int v18; // [sp+64h] [bp-14h]@11
  char *_What; // [sp+68h] [bp-10h]@9
  int v20; // [sp+74h] [bp-4h]@1

  v1 = this;
  v17 = this;
  MiniHouseIndoor::MiniHouseIndoor(&this->m_MiniHouseIndoorMode);
  v20 = 0;
  LightFogCtrl::LightFogCtrl(&v1->m_kLightFogCtrl);
  *(_DWORD *)&v1->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecNearMob.baseclass_0._Mylast = 0;
  v1->m_vecNearMob.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecNearDropItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecNearDropItem.baseclass_0._Mylast = 0;
  v1->m_vecNearDropItem.baseclass_0._Myend = 0;
  v1->m_spWorldScene.m_pObject = 0;
  v1->m_spCharScene.m_pObject = 0;
  v1->m_spDropItemScene.m_pObject = 0;
  v1->m_spGroundScene.m_pObject = 0;
  v1->m_spShadowScene.m_pObject = 0;
  v1->m_spGroundObject.m_pObject = 0;
  v1->m_spDirectionalLightScene.m_pObject = 0;
  v1->m_spMinihouseScene.m_pObject = 0;
  v1->m_spNormalLightScene.m_pObject = 0;
  v1->m_spAbstateCharScene.m_pObject = 0;
  v1->m_spWeatherEffectScene.m_pObject = 0;
  v1->m_spGroundTerrain.m_pObject = 0;
  v1->m_spAllGroundScene.m_pObject = 0;
  v1->m_spBuildingScene.m_pObject = 0;
  v1->m_spBDAni.m_pObject = 0;
  v1->m_spBDNotAni.m_pObject = 0;
  v1->m_spSkyScene.m_pObject = 0;
  v1->m_spWaterScene.m_pObject = 0;
  v1->m_spEffectScene.m_pObject = 0;
  v1->m_spGroundCollidee.m_pObject = 0;
  v1->m_spGroundObjectCollidee.m_pObject = 0;
  v1->m_spBuildingCollidee.m_pObject = 0;
  v1->m_spUseCameraCollidee.m_pObject = 0;
  v1->kPathFinding.vfptr = (NsPathFindingVtbl *)&NsPathFinding::_vftable_;
  v1->kPathFinding.m_pkBlockInfo = 0;
  CFindWay::CFindWay(&v1->kPathFindingNew);
  v1->m_kInstantBlock.vfptr = (InstantBlockVtbl *)&InstantBlock::_vftable_;
  v1->m_kInstantBlock.m_uiTotalHeadCnt = 0;
  v1->m_kInstantBlock.m_pbyBlockData = 0;
  AreaInfoData::AreaInfoData(&v1->m_kAreaInfoData);
  v1->m_spCamera.m_pObject = 0;
  CameraCtrl::CameraCtrl(&v1->m_kCameraCtrl);
  NiFrustum::NiFrustum(&v1->m_kSkyFrustum, 0);
  NiFrustum::NiFrustum(&v1->m_kWorldFrustum, 0);
  OscillationEx::OscillationEx(&v1->m_kCamOscillation);
  SkyCtrl::SkyCtrl(&v1->m_kSkyCtrl);
  v1->m_spAmbientLight.m_pObject = 0;
  v1->m_spDirectionalLight.m_pObject = 0;
  v1->m_spMapDirectionalLight.m_pObject = 0;
  v1->m_kBackGroundColor.r = 0.0;
  v1->m_kBackGroundColor.g = 0.0;
  v1->m_kBackGroundColor.b = 0.0;
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> >Vtbl *)&PgTList<NiPointer<Shadow>>::_vftable_;
  v1->m_spMoveTargetPointNode.m_pObject = 0;
  *(_DWORD *)&v1->m_kMapName.n3_name[8] = 0;
  *(_DWORD *)&v1->m_kMapName.n3_name[4] = 0;
  *(_DWORD *)&v1->m_kMapName.n3_name[0] = 0;
  v1->m_spMagicCircleController.m_pObject = 0;
  v1->m_spShakeContrl.m_pObject = 0;
  v1->m_spCharSelectMarkNode.m_pObject = 0;
  NsDecal::NsDecal(&v1->m_kCharSelectMarkDecal);
  NsMergePortal::NsMergePortal(&v1->m_kMergePortal);
  v1->m_spMiniMapTexture.m_pObject = 0;
  LOBYTE(v20) = 45;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x14u);
  if ( !v2 )
    goto LABEL_23;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v20) = 46;
  v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x14u);
  if ( !v3 )
  {
    v18 = 0;
    std::exception::exception((std::exception *)&v13, (const char *const *)&v18);
    v13 = &std::bad_alloc::_vftable_;
    _CxxThrowException(&v13, &_TI2_AVbad_alloc_std__);
  }
  v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v20) = 47;
  v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x14u);
  if ( !v4 )
  {
    _What = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v4;
  *(_DWORD *)v4 = v4;
  v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v20) = 48;
  v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x14u);
  if ( !v5 )
  {
    v18 = 0;
    std::exception::exception((std::exception *)&v13, (const char *const *)&v18);
    v13 = &std::bad_alloc::_vftable_;
    _CxxThrowException(&v13, &_TI2_AVbad_alloc_std__);
  }
  v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_spTexturePalette.m_pObject = 0;
  v1->m_spCameraShakeNode.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_kExtraLightScene,
    0xCu,
    30,
    (void (__thiscall *)(void *))World::_unnamed_type_m_kExtraLightScene_::_unnamed_type_m_kExtraLightScene_,
    (void (__thiscall *)(void *))World::_unnamed_type_m_kExtraLightScene_::__unnamed_type_m_kExtraLightScene_);
  LOBYTE(v20) = 52;
  v1->m_vecAniObject.baseclass_0.baseclass_0._Mysize = 0;
  v6 = operator new(0xCu);
  if ( !v6 )
  {
    _What = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v6;
  *(_DWORD *)v6 = v6;
  *(_DWORD *)(*(_DWORD *)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  LOBYTE(v20) = 53;
  v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v7 = operator new(0x24u);
  if ( !v7 )
  {
    v18 = 0;
    std::exception::exception((std::exception *)&v13, (const char *const *)&v18);
    v13 = &std::bad_alloc::_vftable_;
    _CxxThrowException(&v13, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v7;
  *(_DWORD *)v7 = v7;
  v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v20) = 54;
  v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v8 = operator new(0x1Cu);
  if ( !v8 )
  {
LABEL_23:
    _What = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v8;
  *(_DWORD *)v8 = v8;
  v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapBoundTime.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->kQaudSceneMakerAni.m_fLengthX = 0.0;
  v1->kQaudSceneMakerAni.m_nUsedLevelCnt = 0;
  v1->kQaudSceneMakerAni.m_fLengthY = 0.0;
  v1->kQaudSceneMakerAni.m_nTotalLevel = 0;
  v1->kQaudSceneMakerAni.m_nCountX = 0;
  v1->kQaudSceneMakerAni.m_nCountY = 0;
  v1->kQaudSceneMakerAni.m_pRootScene = 0;
  v1->kQaudSceneMakerNotAni.m_fLengthX = 0.0;
  v1->kQaudSceneMakerNotAni.m_fLengthY = 0.0;
  v1->kQaudSceneMakerNotAni.m_nUsedLevelCnt = 0;
  v1->kQaudSceneMakerNotAni.m_nTotalLevel = 0;
  v1->kQaudSceneMakerNotAni.m_nCountX = 0;
  v1->kQaudSceneMakerNotAni.m_nCountY = 0;
  v1->kQaudSceneMakerNotAni.m_pRootScene = 0;
  v1->m_kCullUPdateData.kCheckedNodes.vfptr = (NiTArray<NiPointer<NiNode> >Vtbl *)&NiTArray<NiPointer<NiNode>>::_vftable_;
  v1->m_kCullUPdateData.kCheckedNodes.m_uiMaxSize = 0;
  v1->m_kCullUPdateData.kCheckedNodes.m_uiGrowBy = 1;
  v1->m_kCullUPdateData.kCheckedNodes.m_uiSize = 0;
  v1->m_kCullUPdateData.kCheckedNodes.m_uiESize = 0;
  v1->m_kCullUPdateData.kCheckedNodes.m_pBase = 0;
  HeightMapMaker::HeightMapMaker(&v1->m_HeightMapMaker);
  DecalMgr::DecalMgr(&v1->m_kDecalMgr);
  v1->m_fMaxHeight = 2000.0;
  v1->m_pkTerrain = 0;
  v1->m_fMinHeight = 0.0;
  LOBYTE(v20) = 61;
  *(_DWORD *)&v1->m_kMapName.n3_name[8] = 0;
  *(_DWORD *)&v1->m_kMapName.n3_name[4] = 0;
  *(_DWORD *)&v1->m_kMapName.n3_name[0] = 0;
  strncpy(v1->m_kMapName.n3_name, "nonMap", 0xCu);
  NiFrustum::NiFrustum(&thisa, -0.25, 0.25, 0.1875, -0.1875, 10.0, 1000000.0, v1->m_bCameraOrtho);
  v10 = v1->m_bCameraOrtho;
  memcpy(&v1->m_kSkyFrustum, v9, sizeof(v1->m_kSkyFrustum));
  NiFrustum::NiFrustum(&thisa, -0.25, 0.25, 0.1875, -0.1875, 10.0, 6000.0, v10);
  memcpy(&v1->m_kWorldFrustum, v11, sizeof(v1->m_kWorldFrustum));
  v1->m_fNearPlaneRadius = 0.5;
  v1->m_fCameraFOV = 50.0;
  *(float *)&pExceptionObject = 1.0;
  v15 = 1.0;
  v16 = 1.0;
  v1->m_kBackGroundColor.r = 1.0;
  v1->m_kBackGroundColor.g = 1.0;
  v1->m_pkPick = 0;
  v1->m_pkBlockInfo = 0;
  v1->m_MapType = 0;
  *(_WORD *)&v1->m_bCameraMove = 0;
  v1->m_bCameraOrtho = 0;
  v1->m_kBackGroundColor.b = 1.0;
  v1->m_eCharShadowLevel = 10;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 97958C: using guessed type int (__thiscall *PgTList_NiPointer_Shadow_____vftable_)(void *p, char);
// 9C6440: using guessed type int (__thiscall *NsPathFinding___vftable_)(void *p, char);
// 9C6448: using guessed type int (__thiscall *InstantBlock___vftable_)(void *p, char);
// 9C6450: using guessed type int (__thiscall *NiTArray_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (0067A360) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (0067A380) --------------------------------------------------------
void __thiscall NiAccumulator::_NiAccumulator(NiAccumulator *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiAccumulator::_vftable_;
  NiRefObject::_NiRefObject((CPostProcessEffect *)this);
}
// 9C63F4: using guessed type int (__thiscall *NiAccumulator___vftable_)(void *p, char);

//----- (0067A390) --------------------------------------------------------
NiRTTI *__thiscall NiAccumulator::GetRTTI(NiAccumulator *this)
{
  return &NiAccumulator::m_RTTI;
}

//----- (0067A3A0) --------------------------------------------------------
void *__thiscall NiAccumulator::_vector_deleting_destructor_(NiAccumulator *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiAccumulator::_vftable_;
  NiRefObject::_NiRefObject((CPostProcessEffect *)this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C63F4: using guessed type int (__thiscall *NiAccumulator___vftable_)(void *p, char);

//----- (0067A3D0) --------------------------------------------------------
void __thiscall NsPathFinding::_NsPathFinding(NsPathFinding *this)
{
  this->vfptr = (NsPathFindingVtbl *)&NsPathFinding::_vftable_;
}
// 9C6440: using guessed type int (__thiscall *NsPathFinding___vftable_)(void *p, char);

//----- (0067A3E0) --------------------------------------------------------
void *__thiscall NsPathFinding::_vector_deleting_destructor_(NsPathFinding *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NsPathFindingVtbl *)&NsPathFinding::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C6440: using guessed type int (__thiscall *NsPathFinding___vftable_)(void *p, char);

//----- (0067A410) --------------------------------------------------------
void __thiscall InstantBlock::RemoveAll(InstantBlock *this)
{
  InstantBlock *v1; // esi@1
  void *v2; // eax@1

  v1 = this;
  v2 = this->m_pbyBlockData;
  this->m_uiTotalHeadCnt = 0;
  if ( v2 )
    operator delete__(v2);
  v1->m_pbyBlockData = 0;
}

//----- (0067A440) --------------------------------------------------------
void __thiscall InstantBlock::_InstantBlock(InstantBlock *this)
{
  InstantBlock *v1; // esi@1
  void *v2; // eax@1

  v1 = this;
  v2 = this->m_pbyBlockData;
  this->vfptr = (InstantBlockVtbl *)&InstantBlock::_vftable_;
  this->m_uiTotalHeadCnt = 0;
  if ( v2 )
    operator delete__(v2);
  v1->m_pbyBlockData = 0;
}
// 9C6448: using guessed type int (__thiscall *InstantBlock___vftable_)(void *p, char);

//----- (0067A480) --------------------------------------------------------
void *__thiscall InstantBlock::_scalar_deleting_destructor_(InstantBlock *this, unsigned int a2)
{
  InstantBlock *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  v3 = this->m_pbyBlockData;
  this->vfptr = (InstantBlockVtbl *)&InstantBlock::_vftable_;
  this->m_uiTotalHeadCnt = 0;
  if ( v3 )
    operator delete__(v3);
  v2->m_pbyBlockData = 0;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6448: using guessed type int (__thiscall *InstantBlock___vftable_)(void *p, char);

//----- (0067A4D0) --------------------------------------------------------
void __thiscall mhManagerMediator::_mhManagerMediator(mhManagerMediator *this)
{
  mhManagerMediator *v1; // esi@1
  NiCollisionGroup *v2; // edi@1

  v1 = this;
  v2 = (NiCollisionGroup *)&this->m_CollisionManager;
  NiCollisionGroup::RemoveAll(&this->m_CollisionManager.m_pkCollisionGroup);
  NiCollisionGroup::_NiCollisionGroup(v2);
  mhObjectManager::_mhObjectManager(&v1->m_ObjManager);
  mhResTableManager::_mhResTableManager(&v1->m_ResTableManager);
}

//----- (0067A550) --------------------------------------------------------
void __thiscall NsMakeQuadScene::_NsMakeQuadScene(NsMakeQuadScene *this)
{
  this->m_pRootScene = 0;
}

//----- (0067A560) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 17) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 17) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 17); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (0067A5B0) --------------------------------------------------------
void __thiscall World::_unnamed_type_m_kExtraLightScene_::_unnamed_type_m_kExtraLightScene_(World::<unnamed-type-m_kExtraLightScene> *this)
{
  this->spScene.m_pObject = 0;
  this->spLightScene.m_pObject = 0;
}

//----- (0067A5C0) --------------------------------------------------------
void __thiscall World::_unnamed_type_m_kExtraLightScene_::__unnamed_type_m_kExtraLightScene_(World::<unnamed-type-m_kExtraLightScene> *this)
{
  World::<unnamed-type-m_kExtraLightScene> *v1; // edi@1
  NiNode *v2; // esi@1
  NiNode *v3; // esi@5

  v1 = this;
  v2 = this->spLightScene.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->spScene.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (0067A650) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (0067A6B0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (0067A710) --------------------------------------------------------
void *__thiscall NiTArray<NiPointer<NiNode>>::_scalar_deleting_destructor_(NiTArray<NiPointer<NiNode> > *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // eax@1
  void *v4; // edi@2

  v2 = this;
  v3 = this->m_pBase;
  this->vfptr = (NiTArray<NiPointer<NiNode> >Vtbl *)&NiTArray<NiPointer<NiNode>>::_vftable_;
  if ( v3 )
  {
    v4 = (char *)v3 - 4;
    _eh_vector_destructor_iterator_(
      v3,
      4u,
      *((_DWORD *)v3 - 1),
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    operator delete__(v4);
  }
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6450: using guessed type int (__thiscall *NiTArray_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (0067A760) --------------------------------------------------------
void __thiscall std::pair<unsigned_int_NiPointer<NiNode>>::_pair<unsigned_int_NiPointer<NiNode>>(std::pair<unsigned long const ,NiPointer<NiControllerSequence> > *this)
{
  NiControllerSequence *v1; // esi@1

  v1 = this->baseclass_0.second.m_pObject;
  if ( v1 && !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v1 )
      v1->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v1, 1u);
  }
}

//----- (0067A790) --------------------------------------------------------
void __thiscall FindCullUpdateNode::CullUpdateAreaInfo::_CullUpdateAreaInfo(FindCullUpdateNode::CullUpdateAreaInfo *this)
{
  void *v1; // eax@1
  void *v2; // esi@2

  v1 = this->kCheckedNodes.m_pBase;
  this->kCheckedNodes.vfptr = (NiTArray<NiPointer<NiNode> >Vtbl *)&NiTArray<NiPointer<NiNode>>::_vftable_;
  if ( v1 )
  {
    v2 = (char *)v1 - 4;
    _eh_vector_destructor_iterator_(
      v1,
      4u,
      *((_DWORD *)v1 - 1),
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    operator delete__(v2);
  }
}
// 9C6450: using guessed type int (__thiscall *NiTArray_NiPointer_NiNode_____vftable_)(void *p, char);

//----- (0067A7C0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<NiGeometry_____TextureSorter_NiGeometry__>(NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred, NiGeometry **__formal)
{
  NiGeometry **v4; // eax@1
  NiAVObject **v5; // ebx@2
  NiAVObject *v6; // esi@5
  NiAVObject *v7; // ST18_4@5
  NiProperty *v8; // edi@5
  NiProperty *v9; // eax@5
  NiRefObjectVtbl *v10; // ecx@7
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // ecx@8
  NiTimeController *v12; // edx@10
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@11
  NiAVObject *v14; // edi@15
  NiProperty *v15; // esi@15
  NiProperty *v16; // eax@15
  NiTimeController *v17; // edx@17
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // ecx@18
  NiRefObjectVtbl *v19; // eax@20
  void *(__thiscall *v20)(NiRefObject *, unsigned int); // eax@21
  NiGeometry **_Next; // [sp+4h] [bp-Ch]@2
  NiAVObject *_Val; // [sp+8h] [bp-8h]@5
  NiAVObject **_Next1; // [sp+Ch] [bp-4h]@5

  v4 = _First;
  if ( _First != _Last )
  {
    v5 = (NiAVObject **)(_First + 1);
    _Next = _First + 1;
    if ( _First + 1 != _Last )
    {
      while ( 1 )
      {
        v6 = *v5;
        _Next1 = v5;
        _Val = *v5;
        v7 = (NiAVObject *)*v4;
        v8 = NiAVObject::GetProperty(*v5, 8);
        v9 = NiAVObject::GetProperty(v7, 8);
        if ( !v8
          || v9
          && ((v10 = v8[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v11 = 0) : (v11 = v10[1].__vecDelDtor),
              (v12 = v9[1].baseclass_0.m_spControllers.m_pObject, !v12->baseclass_0.baseclass_0.vfptr) ? (v13 = 0) : (v13 = v12->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
              (unsigned int)v11 <= (unsigned int)v13) )
        {
          while ( 1 )
          {
            v14 = *(v5 - 1);
            --v5;
            v15 = NiAVObject::GetProperty(v6, 8);
            v16 = NiAVObject::GetProperty(v14, 8);
            if ( !v15 )
              break;
            if ( v16 )
            {
              v17 = v15[1].baseclass_0.m_spControllers.m_pObject;
              v18 = v17->baseclass_0.baseclass_0.vfptr ? v17->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor : 0;
              v19 = v16[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
              v20 = v19 ? v19[1].__vecDelDtor : 0;
              if ( (unsigned int)v18 <= (unsigned int)v20 )
                break;
            }
            v6 = _Val;
            *_Next1 = *v5;
            _Next1 = v5;
          }
          v5 = (NiAVObject **)_Next;
          *_Next1 = _Val;
        }
        else
        {
          memmove(
            (char *)&v5[-((signed int)((char *)v5 - (char *)_First) >> 2) + 1],
            (char *)_First,
            4 * ((signed int)((char *)v5 - (char *)_First) >> 2));
          *_First = (NiGeometry *)v6;
        }
        ++v5;
        _Next = (NiGeometry **)v5;
        if ( (NiGeometry **)v5 == _Last )
          break;
        v4 = _First;
      }
    }
  }
}

//----- (0067A8E0) --------------------------------------------------------
void __cdecl std::_Med3<NiGeometry_____TextureSorter>(NiGeometry **_First, NiGeometry **_Mid, NiGeometry **_Last, TextureSorter _Pred)
{
  NiAVObject *v4; // edi@1
  NiProperty *v5; // esi@1
  NiProperty *v6; // eax@1
  NiRefObjectVtbl *v7; // ecx@3
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // ecx@4
  NiTimeController *v9; // edx@6
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // eax@7
  NiGeometry *v11; // eax@10
  NiAVObject *v12; // edi@11
  NiProperty *v13; // esi@11
  NiProperty *v14; // eax@11
  NiRefObjectVtbl *v15; // ecx@13
  void *(__thiscall *v16)(NiRefObject *, unsigned int); // ecx@14
  NiTimeController *v17; // edx@16
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // eax@17
  NiGeometry *v19; // eax@20
  NiAVObject *v20; // edi@21
  NiProperty *v21; // esi@21
  NiProperty *v22; // eax@21
  NiRefObjectVtbl *v23; // ecx@23
  void *(__thiscall *v24)(NiRefObject *, unsigned int); // ecx@24
  NiTimeController *v25; // edx@26
  void *(__thiscall *v26)(NiRefObject *, unsigned int); // eax@27
  NiGeometry *v27; // eax@30

  v4 = (NiAVObject *)*_First;
  v5 = NiAVObject::GetProperty(&(*_Mid)->baseclass_0, 8);
  v6 = NiAVObject::GetProperty(v4, 8);
  if ( v5 )
  {
    if ( !v6
      || ((v7 = v5[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v8 = 0) : (v8 = v7[1].__vecDelDtor),
          (v9 = v6[1].baseclass_0.m_spControllers.m_pObject, !v9->baseclass_0.baseclass_0.vfptr) ? (v10 = 0) : (v10 = v9->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
          (unsigned int)v8 > (unsigned int)v10) )
    {
      v11 = *_Mid;
      *_Mid = *_First;
      *_First = v11;
    }
  }
  v12 = (NiAVObject *)*_Mid;
  v13 = NiAVObject::GetProperty(&(*_Last)->baseclass_0, 8);
  v14 = NiAVObject::GetProperty(v12, 8);
  if ( v13 )
  {
    if ( !v14
      || ((v15 = v13[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v16 = 0) : (v16 = v15[1].__vecDelDtor),
          (v17 = v14[1].baseclass_0.m_spControllers.m_pObject, !v17->baseclass_0.baseclass_0.vfptr) ? (v18 = 0) : (v18 = v17->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
          (unsigned int)v16 > (unsigned int)v18) )
    {
      v19 = *_Last;
      *_Last = *_Mid;
      *_Mid = v19;
    }
  }
  v20 = (NiAVObject *)*_First;
  v21 = NiAVObject::GetProperty(&(*_Mid)->baseclass_0, 8);
  v22 = NiAVObject::GetProperty(v20, 8);
  if ( v21 )
  {
    if ( !v22
      || ((v23 = v21[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v24 = 0) : (v24 = v23[1].__vecDelDtor),
          (v25 = v22[1].baseclass_0.m_spControllers.m_pObject, !v25->baseclass_0.baseclass_0.vfptr) ? (v26 = 0) : (v26 = v25->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
          (unsigned int)v24 > (unsigned int)v26) )
    {
      v27 = *_Mid;
      *_Mid = *_First;
      *_First = v27;
    }
  }
}

//----- (0067A9E0) --------------------------------------------------------
void __cdecl std::_Push_heap<NiGeometry_____int_NiGeometry___TextureSorter>(NiGeometry **_First, int _Hole, int _Top, NiGeometry **_Val, TextureSorter _Pred)
{
  int v5; // edi@1
  NiAVObject *v6; // ebx@2
  NiProperty *v7; // esi@2
  NiProperty *v8; // eax@2
  NiTimeController *v9; // edx@4
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // ecx@5
  NiRefObjectVtbl *v11; // eax@7
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@8

  v5 = (_Hole - 1) / 2;
  if ( _Top >= _Hole )
  {
    _First[_Hole] = *_Val;
  }
  else
  {
    while ( 1 )
    {
      v6 = (NiAVObject *)*_Val;
      v7 = NiAVObject::GetProperty(&_First[v5]->baseclass_0, 8);
      v8 = NiAVObject::GetProperty(v6, 8);
      if ( !v7 )
      {
LABEL_12:
        _First[_Hole] = *_Val;
        return;
      }
      if ( v8 )
      {
        v9 = v7[1].baseclass_0.m_spControllers.m_pObject;
        v10 = v9->baseclass_0.baseclass_0.vfptr ? v9->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor : 0;
        v11 = v8[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
        v12 = v11 ? v11[1].__vecDelDtor : 0;
        if ( (unsigned int)v10 <= (unsigned int)v12 )
          break;
      }
      _First[_Hole] = _First[v5];
      _Hole = v5;
      v5 = (v5 - 1) / 2;
      if ( _Top >= _Hole )
        goto LABEL_12;
    }
    _First[_Hole] = *_Val;
  }
}

//----- (0067AAA0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (0067AAE0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (0067AB20) --------------------------------------------------------
void __cdecl std::_Median<NiGeometry_____TextureSorter>(NiGeometry **_First, NiGeometry **_Mid, NiGeometry **_Last, TextureSorter _Pred)
{
  NiGeometry **v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // eax@2
  unsigned int v7; // edi@2
  NiGeometry **v8; // ST4C_4@2
  int _Lasta; // [sp+18h] [bp+10h]@2

  v4 = _Last;
  v5 = _Last - _First;
  if ( (signed int)v5 <= 40 )
  {
    std::_Med3<NiGeometry_____TextureSorter>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v6 = (signed int)(v5 + 1) / 8;
    _Lasta = 8 * v6;
    v7 = 4 * v6;
    v8 = &_First[v6];
    std::_Med3<NiGeometry_____TextureSorter>(_First, v8, &_First[2 * v6], _Pred);
    std::_Med3<NiGeometry_____TextureSorter>(&_Mid[-v7 / 4u], _Mid, &_Mid[v7 / 4], _Pred);
    std::_Med3<NiGeometry_____TextureSorter>(&v4[-_Lasta / 4u], &v4[-v7 / 4u], v4, _Pred);
    std::_Med3<NiGeometry_____TextureSorter>(v8, _Mid, &v4[-v7 / 4u], _Pred);
  }
}

//----- (0067ABD0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<NiGeometry_____int_NiGeometry___TextureSorter>(NiGeometry **_First, int _Hole, int _Bottom, NiGeometry **_Val, TextureSorter _Pred)
{
  int v5; // eax@1
  int v6; // ecx@1
  int v7; // esi@1
  bool v8; // zf@1
  NiAVObject *v9; // ST20_4@2
  NiProperty *v10; // edi@2
  NiProperty *v11; // eax@2
  NiRefObjectVtbl *v12; // ecx@4
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // ecx@5
  NiTimeController *v14; // edx@7
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@8
  int v16; // ecx@12
  NiGeometry *v17; // eax@12
  int _Top; // [sp+8h] [bp-8h]@1

  v5 = _Hole;
  v6 = _Bottom;
  v7 = 2 * _Hole + 2;
  _Top = _Hole;
  v8 = v7 == _Bottom;
  if ( v7 < _Bottom )
  {
    do
    {
      v9 = (NiAVObject *)_First[v7 - 1];
      v10 = NiAVObject::GetProperty(&_First[v7]->baseclass_0, 8);
      v11 = NiAVObject::GetProperty(v9, 8);
      if ( v10 )
      {
        if ( !v11
          || ((v12 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v13 = 0) : (v13 = v12[1].__vecDelDtor),
              (v14 = v11[1].baseclass_0.m_spControllers.m_pObject, !v14->baseclass_0.baseclass_0.vfptr) ? (v15 = 0) : (v15 = v14->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
              (unsigned int)v13 > (unsigned int)v15) )
          --v7;
      }
      v16 = _Hole;
      v17 = _First[v7];
      _Hole = v7;
      v7 = 2 * v7 + 2;
      _First[v16] = v17;
    }
    while ( v7 < _Bottom );
    v6 = _Bottom;
    v5 = _Hole;
    v8 = v7 == _Bottom;
  }
  if ( v8 )
  {
    _First[v5] = _First[v6 - 1];
    v5 = v6 - 1;
  }
  std::_Push_heap<NiGeometry_____int_NiGeometry___TextureSorter>(_First, v5, _Top, _Val, _Pred);
}

//----- (0067AC90) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 21) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 21) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 21) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 21) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v6;
      else
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)std::_Tree_val<std::_Tmap_traits<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 21) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 20);
  *(_BYTE *)(*(_DWORD *)&v5 + 20) = *(_BYTE *)(*(_DWORD *)&v3 + 20);
  *(_BYTE *)(*(_DWORD *)&v3 + 20) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 20) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 20) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 20) )
        {
          *(_BYTE *)(v15 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 0;
          std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 21) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 20) = 1;
            *(_BYTE *)(v15 + 20) = 0;
            std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 20) = *(_BYTE *)(*(_DWORD *)&v6 + 20);
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) = 1;
          std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 20) )
        {
          *(_BYTE *)(v15 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 0;
          std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 21) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 20) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) = 1;
            *(_BYTE *)(v15 + 20) = 0;
            std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 20) = *(_BYTE *)(*(_DWORD *)&v6 + 20);
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 20) = 1;
          std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 20) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 20) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (0067AEE0) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *__thiscall std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v6; // esi@8
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 17) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 17) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 17) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 17) )
      {
        v9 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::_Min(*(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 17) )
        v10->_Right = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6;
      else
        v10->_Right = std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Max(*(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 17) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 17) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 16);
  *(_BYTE *)(*(_DWORD *)&v5 + 16) = *(_BYTE *)(*(_DWORD *)&v3 + 16);
  *(_BYTE *)(*(_DWORD *)&v3 + 16) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 16) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 16) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 16) )
        {
          *(_BYTE *)(v15 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 0;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 17) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 16) = 1;
            *(_BYTE *)(v15 + 16) = 0;
            std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(
              i,
              (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 16) = *(_BYTE *)(*(_DWORD *)&v6 + 16);
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) = 1;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 16) )
        {
          *(_BYTE *)(v15 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 0;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 17) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 16) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) = 1;
            *(_BYTE *)(v15 + 16) = 0;
            std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(
              i,
              (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 16) = *(_BYTE *)(*(_DWORD *)&v6 + 16);
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 16) = 1;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 16) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 16) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (0067B130) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 33) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 33) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 33) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<NiActorManager___std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>_std::less<NiActorManager__>_std::allocator<std::pair<NiActorManager___const_std::map<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 33) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v6;
      else
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 33) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 32);
  *(_BYTE *)(*(_DWORD *)&v5 + 32) = *(_BYTE *)(*(_DWORD *)&v3 + 32);
  *(_BYTE *)(*(_DWORD *)&v3 + 32) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 32) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 32) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 32) )
        {
          *(_BYTE *)(v15 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 33) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 32) = 1;
            *(_BYTE *)(v15 + 32) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 32) = *(_BYTE *)(*(_DWORD *)&v6 + 32);
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 32) )
        {
          *(_BYTE *)(v15 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 33) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 32) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 32) = 1;
            *(_BYTE *)(v15 + 32) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 32) = *(_BYTE *)(*(_DWORD *)&v6 + 32);
          *(_BYTE *)(*(_DWORD *)&v6 + 32) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 32) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > > >,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 32) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 32) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (0067B380) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::clear(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this)
{
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Erase(
        v1,
        v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (0067B3D0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 25) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 25) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 25) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 25) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 25) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v6;
      else
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 25) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 25) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 24);
  *(_BYTE *)(*(_DWORD *)&v5 + 24) = *(_BYTE *)(*(_DWORD *)&v3 + 24);
  *(_BYTE *)(*(_DWORD *)&v3 + 24) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 24) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 24) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 24) )
        {
          *(_BYTE *)(v15 + 24) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 24) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 25) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 24) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 24) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 24) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 24) = 1;
            *(_BYTE *)(v15 + 24) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 24) = *(_BYTE *)(*(_DWORD *)&v6 + 24);
          *(_BYTE *)(*(_DWORD *)&v6 + 24) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 24) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 24) )
        {
          *(_BYTE *)(v15 + 24) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 24) = 0;
          std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 25) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 24) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 24) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 24) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 24) = 1;
            *(_BYTE *)(v15 + 24) = 0;
            std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 24) = *(_BYTE *)(*(_DWORD *)&v6 + 24);
          *(_BYTE *)(*(_DWORD *)&v6 + 24) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 24) = 1;
          std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 24) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 24) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (0067B620) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this)
{
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Erase(
        v1,
        v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (0067B670) --------------------------------------------------------
std::pair<NiGeometry * *,NiGeometry * *> *__cdecl std::_Unguarded_partition<NiGeometry_____TextureSorter>(std::pair<NiGeometry * *,NiGeometry * *> *result, NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred)
{
  NiAVObject **v4; // esi@1
  NiAVObject *v5; // ebx@2
  NiProperty *v6; // edi@2
  NiProperty *v7; // eax@2
  NiTimeController *v8; // edx@4
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // ecx@5
  NiRefObjectVtbl *v10; // eax@7
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // eax@8
  NiAVObject *v12; // ebx@11
  NiProperty *v13; // edi@11
  NiProperty *v14; // eax@11
  NiRefObjectVtbl *v15; // ecx@13
  void *(__thiscall *v16)(NiRefObject *, unsigned int); // ecx@14
  NiTimeController *v17; // edx@16
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // eax@17
  NiAVObject *v19; // ebx@22
  NiProperty *v20; // edi@22
  NiProperty *v21; // eax@22
  NiTimeController *v22; // edx@24
  void *(__thiscall *v23)(NiRefObject *, unsigned int); // ecx@25
  NiRefObjectVtbl *v24; // eax@27
  void *(__thiscall *v25)(NiRefObject *, unsigned int); // eax@28
  NiAVObject *v26; // ebx@31
  NiProperty *v27; // edi@31
  NiProperty *v28; // eax@31
  NiTimeController *v29; // edx@33
  void *(__thiscall *v30)(NiRefObject *, unsigned int); // ecx@34
  NiRefObjectVtbl *v31; // eax@36
  void *(__thiscall *v32)(NiRefObject *, unsigned int); // eax@37
  int v33; // ebx@41
  NiAVObject *v34; // ST20_4@43
  NiProperty *v35; // edi@43
  NiProperty *v36; // eax@43
  NiTimeController *v37; // edx@45
  void *(__thiscall *v38)(NiRefObject *, unsigned int); // ecx@46
  NiRefObjectVtbl *v39; // eax@48
  void *(__thiscall *v40)(NiRefObject *, unsigned int); // eax@49
  NiAVObject *v41; // ST20_4@52
  NiProperty *v42; // edi@52
  NiProperty *v43; // eax@52
  NiTimeController *v44; // edx@54
  void *(__thiscall *v45)(NiRefObject *, unsigned int); // ecx@55
  NiRefObjectVtbl *v46; // eax@57
  void *(__thiscall *v47)(NiRefObject *, unsigned int); // eax@58
  int v48; // eax@61
  int v49; // ecx@61
  NiAVObject *v50; // ebx@65
  NiProperty *v51; // edi@65
  NiProperty *v52; // eax@65
  NiTimeController *v53; // edx@67
  void *(__thiscall *v54)(NiRefObject *, unsigned int); // ecx@68
  NiRefObjectVtbl *v55; // eax@70
  void *(__thiscall *v56)(NiRefObject *, unsigned int); // eax@71
  NiAVObject *v57; // ebx@74
  NiProperty *v58; // edi@74
  NiProperty *v59; // eax@74
  NiTimeController *v60; // edx@76
  void *(__thiscall *v61)(NiRefObject *, unsigned int); // ecx@77
  NiRefObjectVtbl *v62; // eax@79
  void *(__thiscall *v63)(NiRefObject *, unsigned int); // eax@80
  NiGeometry *v64; // ecx@83
  NiAVObject *v65; // edx@88
  NiAVObject **v66; // edx@89
  NiGeometry **v67; // ecx@89
  NiGeometry *v68; // edi@89
  NiAVObject *v69; // eax@89
  NiGeometry **v70; // ecx@90
  int v71; // eax@90
  NiGeometry *v72; // ecx@92
  NiAVObject *v73; // ecx@93
  NiGeometry *v74; // edx@94
  std::pair<NiGeometry * *,NiGeometry * *> *v75; // eax@95
  NiGeometry **_Glast; // [sp+Ch] [bp-Ch]@41
  NiGeometry **_Gfirst; // [sp+10h] [bp-8h]@41
  int _Plast; // [sp+14h] [bp-4h]@1

  v4 = (NiAVObject **)&_First[(signed int)(_Last - _First) / 2];
  std::_Median<NiGeometry_____TextureSorter>(_First, &_First[(signed int)(_Last - _First) / 2], _Last - 1, _Pred);
  for ( _Plast = (int)(v4 + 1); (unsigned int)_First < (unsigned int)v4; --v4 )
  {
    v5 = *v4;
    v6 = NiAVObject::GetProperty(*(v4 - 1), 8);
    v7 = NiAVObject::GetProperty(v5, 8);
    if ( v6 )
    {
      if ( !v7 )
        break;
      v8 = v6[1].baseclass_0.m_spControllers.m_pObject;
      v9 = v8->baseclass_0.baseclass_0.vfptr ? v8->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor : 0;
      v10 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
      v11 = v10 ? v10[1].__vecDelDtor : 0;
      if ( (unsigned int)v9 > (unsigned int)v11 )
        break;
    }
    v12 = *(v4 - 1);
    v13 = NiAVObject::GetProperty(*v4, 8);
    v14 = NiAVObject::GetProperty(v12, 8);
    if ( v13 )
    {
      if ( !v14 )
        break;
      v15 = v13[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
      v16 = v15 ? v15[1].__vecDelDtor : 0;
      v17 = v14[1].baseclass_0.m_spControllers.m_pObject;
      v18 = v17->baseclass_0.baseclass_0.vfptr ? v17->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor : 0;
      if ( (unsigned int)v16 > (unsigned int)v18 )
        break;
    }
  }
  for ( ; _Plast < (unsigned int)_Last; _Plast += 4 )
  {
    v19 = *v4;
    v20 = NiAVObject::GetProperty(*(NiAVObject **)_Plast, 8);
    v21 = NiAVObject::GetProperty(v19, 8);
    if ( v20 )
    {
      if ( !v21 )
        break;
      v22 = v20[1].baseclass_0.m_spControllers.m_pObject;
      v23 = v22->baseclass_0.baseclass_0.vfptr ? v22->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor : 0;
      v24 = v21[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
      v25 = v24 ? v24[1].__vecDelDtor : 0;
      if ( (unsigned int)v23 > (unsigned int)v25 )
        break;
    }
    v26 = *(NiAVObject **)_Plast;
    v27 = NiAVObject::GetProperty(*v4, 8);
    v28 = NiAVObject::GetProperty(v26, 8);
    if ( v27 )
    {
      if ( !v28 )
        break;
      v29 = v27[1].baseclass_0.m_spControllers.m_pObject;
      v30 = v29->baseclass_0.baseclass_0.vfptr ? v29->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor : 0;
      v31 = v28[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
      v32 = v31 ? v31[1].__vecDelDtor : 0;
      if ( (unsigned int)v30 > (unsigned int)v32 )
        break;
    }
  }
  v33 = _Plast;
  _Gfirst = (NiGeometry **)_Plast;
  _Glast = (NiGeometry **)v4;
  while ( 2 )
  {
    while ( 2 )
    {
      if ( v33 >= (unsigned int)_Last )
        goto LABEL_64;
      do
      {
        v34 = *(NiAVObject **)v33;
        v35 = NiAVObject::GetProperty(*v4, 8);
        v36 = NiAVObject::GetProperty(v34, 8);
        if ( v35 )
        {
          if ( !v36
            || ((v37 = v35[1].baseclass_0.m_spControllers.m_pObject, !v37->baseclass_0.baseclass_0.vfptr) ? (v38 = 0) : (v38 = v37->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
                (v39 = v36[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v40 = 0) : (v40 = v39[1].__vecDelDtor),
                (unsigned int)v38 > (unsigned int)v40) )
            goto LABEL_62;
        }
        v41 = *v4;
        v42 = NiAVObject::GetProperty(*(NiAVObject **)v33, 8);
        v43 = NiAVObject::GetProperty(v41, 8);
        if ( v42 )
        {
          if ( !v43 )
            break;
          v44 = v42[1].baseclass_0.m_spControllers.m_pObject;
          v45 = v44->baseclass_0.baseclass_0.vfptr ? v44->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor : 0;
          v46 = v43[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
          v47 = v46 ? v46[1].__vecDelDtor : 0;
          if ( (unsigned int)v45 > (unsigned int)v47 )
            break;
        }
        v48 = _Plast;
        _Plast += 4;
        v49 = *(_DWORD *)v48;
        *(_DWORD *)v48 = *(_DWORD *)v33;
        *(_DWORD *)v33 = v49;
LABEL_62:
        v33 += 4;
      }
      while ( v33 < (unsigned int)_Last );
      _Gfirst = (NiGeometry **)v33;
LABEL_64:
      while ( _First < _Glast )
      {
        v50 = *v4;
        v51 = NiAVObject::GetProperty(&(*(_Glast - 1))->baseclass_0, 8);
        v52 = NiAVObject::GetProperty(v50, 8);
        if ( !v51
          || v52
          && ((v53 = v51[1].baseclass_0.m_spControllers.m_pObject, !v53->baseclass_0.baseclass_0.vfptr) ? (v54 = 0) : (v54 = v53->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
              (v55 = v52[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v56 = 0) : (v56 = v55[1].__vecDelDtor),
              (unsigned int)v54 <= (unsigned int)v56) )
        {
          v57 = (NiAVObject *)*(_Glast - 1);
          v58 = NiAVObject::GetProperty(*v4, 8);
          v59 = NiAVObject::GetProperty(v57, 8);
          if ( v58 )
          {
            if ( !v59
              || ((v60 = v58[1].baseclass_0.m_spControllers.m_pObject, !v60->baseclass_0.baseclass_0.vfptr) ? (v61 = 0) : (v61 = v60->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
                  (v62 = v59[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v63 = 0) : (v63 = v62[1].__vecDelDtor),
                  (unsigned int)v61 > (unsigned int)v63) )
              break;
          }
          v64 = (NiGeometry *)*(v4 - 1);
          --v4;
          *v4 = (NiAVObject *)*(_Glast - 1);
          *(_Glast - 1) = v64;
        }
        --_Glast;
      }
      if ( _Glast != _First )
      {
        v70 = _Gfirst;
        v71 = (int)(_Glast - 1);
        --_Glast;
        if ( _Gfirst == _Last )
        {
          --v4;
          if ( (NiAVObject **)v71 != v4 )
          {
            v72 = *(NiGeometry **)v71;
            *(_DWORD *)v71 = *v4;
            *v4 = (NiAVObject *)v72;
          }
          v73 = *v4;
          v33 = (int)_Gfirst;
          *v4 = *(NiAVObject **)(_Plast - 4);
          _Plast -= 4;
          *(_DWORD *)_Plast = v73;
        }
        else
        {
          v74 = *_Gfirst;
          *_Gfirst = *(NiGeometry **)v71;
          *(_DWORD *)v71 = v74;
          ++_Gfirst;
          v33 = (int)(v70 + 1);
        }
        continue;
      }
      break;
    }
    if ( _Gfirst != _Last )
    {
      if ( (NiGeometry **)_Plast != _Gfirst )
      {
        v65 = *v4;
        *v4 = *(NiAVObject **)_Plast;
        *(_DWORD *)_Plast = v65;
      }
      v66 = v4;
      _Plast += 4;
      v67 = _Gfirst;
      v68 = *_Gfirst;
      ++v4;
      ++_Gfirst;
      v69 = *v66;
      v33 = (int)_Gfirst;
      *v66 = (NiAVObject *)v68;
      *v67 = (NiGeometry *)v69;
      continue;
    }
    break;
  }
  v75 = result;
  result->baseclass_0.first = (NiGeometry **)v4;
  result->baseclass_0.second = (NiGeometry **)_Plast;
  return v75;
}

//----- (0067BA10) --------------------------------------------------------
void __cdecl std::_Make_heap<NiGeometry_____int_NiGeometry___TextureSorter>(NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred, int *__formal, NiGeometry **a5)
{
  NiGeometry **v5; // edi@1
  unsigned int v6; // ecx@1
  int v7; // ebx@1
  int v8; // esi@2
  void *v9; // eax@4
  int v10; // esi@4
  bool v11; // zf@4
  NiAVObject *v12; // ecx@5
  NiProperty *v13; // ebx@5
  NiProperty *v14; // eax@5
  NiRefObjectVtbl *v15; // ecx@7
  void *(__thiscall *v16)(NiRefObject *, unsigned int); // ecx@8
  NiTimeController *v17; // edx@10
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // eax@11
  int v19; // ecx@15
  NiGeometry *v20; // eax@15
  void *_Val; // [sp+8h] [bp-14h]@4
  int v22; // [sp+Ch] [bp-10h]@4
  int _Hole; // [sp+10h] [bp-Ch]@4
  NiAVObject *this; // [sp+14h] [bp-8h]@5
  int v25; // [sp+18h] [bp-4h]@3
  unsigned int _Bottom; // [sp+24h] [bp+8h]@1
  int _Lasta; // [sp+28h] [bp+Ch]@4

  v5 = _First;
  v6 = _Last - _First;
  v7 = (signed int)(_Last - _First) / 2;
  _Bottom = _Last - _First;
  if ( v7 > 0 )
  {
    v8 = 2 * v7 + 2;
    while ( 1 )
    {
      v9 = v5[v7-- - 1];
      v10 = v8 - 2;
      _Hole = v7;
      v25 = v10;
      _Val = v9;
      LOBYTE(v22) = _Pred.dummy[0];
      _Lasta = v7;
      v11 = v10 == v6;
      if ( v10 < (signed int)v6 )
      {
        do
        {
          v12 = (NiAVObject *)v5[v10];
          this = (NiAVObject *)v5[v10 - 1];
          v13 = NiAVObject::GetProperty(v12, 8);
          v14 = NiAVObject::GetProperty(this, 8);
          if ( v13 )
          {
            if ( !v14
              || ((v15 = v13[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr) == 0 ? (v16 = 0) : (v16 = v15[1].__vecDelDtor),
                  (v17 = v14[1].baseclass_0.m_spControllers.m_pObject, !v17->baseclass_0.baseclass_0.vfptr) ? (v18 = 0) : (v18 = v17->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor),
                  (unsigned int)v16 > (unsigned int)v18) )
              --v10;
          }
          v19 = _Lasta;
          v20 = v5[v10];
          _Lasta = v10;
          v10 = 2 * v10 + 2;
          v5[v19] = v20;
        }
        while ( v10 < (signed int)_Bottom );
        v6 = _Bottom;
        v7 = _Hole;
        v11 = v10 == _Bottom;
      }
      if ( v11 )
      {
        v5[_Lasta] = v5[v6 - 1];
        _Lasta = v6 - 1;
      }
      std::_Push_heap<NiGeometry_____int_NiGeometry___TextureSorter>(
        v5,
        _Lasta,
        v7,
        (NiGeometry **)&_Val,
        (TextureSorter)v22);
      if ( v7 <= 0 )
        break;
      v8 = v25;
      v6 = _Bottom;
    }
  }
}

//----- (0067BB00) --------------------------------------------------------
NiRTTI *__thiscall NiTextureAccumulator::GetRTTI(NiTextureAccumulator *this)
{
  return &NiTextureAccumulator::m_RTTI;
}

//----- (0067BB10) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Last)
{
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v6; // ecx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 33) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 33) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 33);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 33);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (0067BBB0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v6; // ecx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 25) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 25) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 25);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 25);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (0067BC50) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v3; // ebx@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v6; // esi@8
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v7; // eax@10
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v8; // ebx@15
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v10; // ebx@20
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *i; // ecx@36
  int v15; // eax@38
  int v16; // esi@59
  unsigned int v17; // eax@63
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *v18; // eax@65
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > _Erasednode; // [sp+0h] [bp-8h]@3
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *thisa; // [sp+4h] [bp-4h]@1

  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 17) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  v3 = _Where;
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 17) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 17) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v7->_Parent == (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v3 )
    {
      v7->_Parent = (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Left == (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)_Erasednode )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 17) )
        v9 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6;
      else
        v9 = std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::_Min(*(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v4);
      v8->_Left = (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v9;
    }
    v10 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)_Erasednode )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 17) )
        v10->_Right = (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v6;
      else
        v10->_Right = (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Max(*(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 17) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 17) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 16);
  *(_BYTE *)(*(_DWORD *)&v5 + 16) = *(_BYTE *)(*(_DWORD *)&v3 + 16);
  *(_BYTE *)(*(_DWORD *)&v3 + 16) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 16) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 16) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 16) )
        {
          *(_BYTE *)(v15 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 0;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(
            (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 17) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 16) = 1;
            *(_BYTE *)(v15 + 16) = 0;
            std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(
              (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)i,
              (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 16) = *(_BYTE *)(*(_DWORD *)&v6 + 16);
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) = 1;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(
            (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 16) )
        {
          *(_BYTE *)(v15 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 0;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(
            (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 17) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 16) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 16) = 1;
            *(_BYTE *)(v15 + 16) = 0;
            std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Lrotate(
              (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)i,
              (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 16) = *(_BYTE *)(*(_DWORD *)&v6 + 16);
          *(_BYTE *)(*(_DWORD *)&v6 + 16) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 16) = 1;
          std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(
            (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)i,
            *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 16) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 16) = 1;
  }
  v16 = *(_DWORD *)(*(_DWORD *)&_Erasednode + 12);
  if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
  operator delete(*(void **)&_Erasednode);
  v17 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v17 )
    thisa->baseclass_0.baseclass_0._Mysize = v17 - 1;
  v18 = result;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v18;
}

//----- (0067BED0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Erase(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Rootnode)
{
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v2; // ebx@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *i; // esi@1
  NiAVObject *v4; // edi@2
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *thisa; // [sp+8h] [bp-4h]@1

  v2 = _Rootnode;
  thisa = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Erase(
      thisa,
      i->_Right);
    v4 = v2->_Myval.m_pObject;
    i = i->_Left;
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    operator delete(v2);
  }
}

//----- (0067BF30) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v6; // ecx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 21) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 21) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 21);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 21);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
        (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (0067BFD0) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *__thiscall std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _Last)
{
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v6; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 17) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 17) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 17);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 17);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase(
        v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (0067C070) --------------------------------------------------------
void __cdecl std::_Sort_heap<NiGeometry_____TextureSorter>(NiGeometry **_First, NiGeometry **_Last, TextureSorter _Pred)
{
  unsigned int v3; // eax@1
  NiGeometry *v4; // ecx@2
  TextureSorter v5; // dl@2
  int v6; // edi@2

  v3 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v4 = *_First;
      _Last = *(NiGeometry ***)((char *)_First + v3 - 4);
      v5.dummy[0] = _Pred.dummy[0];
      *(NiGeometry **)((char *)_First + v3 - 4) = v4;
      v6 = v3 - 4;
      std::_Adjust_heap<NiGeometry_____int_NiGeometry___TextureSorter>(
        _First,
        0,
        (signed int)(v3 - 4) >> 2,
        (NiGeometry **)&_Last,
        v5);
      v3 = v6;
    }
    while ( (v6 & 0xFFFFFFFC) > 4 );
  }
}

//----- (0067C0C0) --------------------------------------------------------
void *__thiscall NiTextureAccumulator::_vector_deleting_destructor_(NiTextureAccumulator *this, unsigned int a2)
{
  NiTextureAccumulator *v2; // edi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiTextureAccumulator::_vftable_;
  std::vector<PgWinText___std::allocator<PgWinText__>>::resize(
    (std::vector<NiTimeController *,std::allocator<NiTimeController *> > *)&this->m_vecItem,
    0);
  if ( *(_DWORD *)&v2->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v2->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v2->m_vecItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_vecItem.baseclass_0._Mylast = 0;
  v2->m_vecItem.baseclass_0._Myend = 0;
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiAccumulator::_vftable_;
  NiRefObject::_NiRefObject((CPostProcessEffect *)v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C63F4: using guessed type int (__thiscall *NiAccumulator___vftable_)(void *p, char);
// 9C645C: using guessed type int (__thiscall *NiTextureAccumulator___vftable_)(void *p, char);

//----- (0067C160) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > _Last)
{
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v6; // ecx@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v7; // ecx@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 17) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 17) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 17);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 17);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(
        v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Erase(
      v4,
      v5->_Parent);
    v4->baseclass_0.baseclass_0._Myhead->_Parent = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Left = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Right = v4->baseclass_0.baseclass_0._Myhead;
    v7 = v4->baseclass_0.baseclass_0._Myhead;
    v8 = result;
    v4->baseclass_0.baseclass_0._Mysize = 0;
    *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7->_Left;
  }
  return v8;
}

//----- (0067C220) --------------------------------------------------------
void __thiscall std::map<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>>::_map<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>>(std::map<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> > > *this)
{
  std::map<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (0067C280) --------------------------------------------------------
void __cdecl std::_Sort<NiGeometry_____int_TextureSorter>(NiGeometry **_First, NiGeometry **_Last, int _Ideal, TextureSorter _Pred)
{
  NiGeometry **v4; // ebx@1
  NiGeometry **v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<NiGeometry * *,NiGeometry * *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<NiGeometry_____TextureSorter>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( (((signed int)_Mid.baseclass_0.first - (signed int)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5
                                                                                             - (char *)_Mid.baseclass_0.second) & 0xFFFFFFFC) )
    {
      std::_Sort<NiGeometry_____int_TextureSorter>(_Mid.baseclass_0.second, v5, v7, _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<NiGeometry_____int_TextureSorter>(v4, _Mid.baseclass_0.first, v7, _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<NiGeometry_____TextureSorter_NiGeometry__>(v4, v5, _Pred, 0);
  }
  else
  {
    if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 )
      std::_Make_heap<NiGeometry_____int_NiGeometry___TextureSorter>(v4, v5, _Pred, 0, 0);
    std::_Sort_heap<NiGeometry_____TextureSorter>(v4, v5, _Pred);
  }
}

//----- (0067C370) --------------------------------------------------------
void __thiscall std::set<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>>::_set<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>>(std::set<unsigned int,std::less<unsigned int>,std::allocator<unsigned int> > *this)
{
  std::set<unsigned int,std::less<unsigned int>,std::allocator<unsigned int> > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v3; // ST04_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > result; // [sp+0h] [bp-14h]@1
  std::set<unsigned int,std::less<unsigned int>,std::allocator<unsigned int> > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (0067C3D0) --------------------------------------------------------
void __thiscall std::set<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>>::_set<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>>(std::set<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> > > *this)
{
  std::set<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v3; // ST04_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > result; // [sp+0h] [bp-14h]@1
  std::set<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (0067C430) --------------------------------------------------------
void __thiscall mhResTableManager::mhResTableManager(mhResTableManager *this)
{
  mhResTableManager *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@6
  std::exception thisa; // [sp+Ch] [bp-24h]@4
  mhResTableManager *v6; // [sp+18h] [bp-18h]@1
  int v7; // [sp+1Ch] [bp-14h]@6
  char *_What; // [sp+20h] [bp-10h]@4
  int v9; // [sp+2Ch] [bp-4h]@2

  v1 = this;
  v6 = this;
  this->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    v7 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v7);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,mhResTableElement *,std::less<int>,std::allocator<std::pair<int const ,mhResTableElement *> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v9 = 0;
  v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x18u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0067C530) --------------------------------------------------------
void __thiscall MiniHouseIndoor::MiniHouseIndoor(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  void *v4; // eax@3
  void *v5; // eax@4
  NiNode *v6; // edi@5
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@13
  std::exception thisa; // [sp+Ch] [bp-24h]@11
  MiniHouseIndoor *v9; // [sp+18h] [bp-18h]@1
  int v10; // [sp+1Ch] [bp-14h]@13
  char *_What; // [sp+20h] [bp-10h]@11
  int v12; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  v9 = this;
  mhResTableManager::mhResTableManager(&this->m_ManagerMediator.m_ResTableManager);
  v12 = 0;
  v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    v10 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v10);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_ManagerMediator.m_ObjManager.m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  NiCollisionGroup::NiCollisionGroup(&v1->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  v1->m_GameMainConnectMgr = 0;
  v1->m_RoomInfo.m_spRoomNiNode = 0;
  v1->m_RoomInfo.m_SelectedNodeName.baseclass_0._Myres = 15;
  v1->m_RoomInfo.m_SelectedNodeName.baseclass_0._Mysize = 0;
  v12 = 2;
  v1->m_RoomInfo.m_SelectedNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_eState = 0;
  v1->m_spRootScene.m_pObject = 0;
  v1->m_spNormalScene.m_pObject = 0;
  v1->m_spAbStateEffScene.m_pObject = 0;
  v1->m_PickedObj = 0;
  LOBYTE(v12) = 6;
  *((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 2) = 0;
  v3 = operator new(0x30u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 1) = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0
                                                                              + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0
                                                                              + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 1) + 45) = 1;
  LOBYTE(v12) = 7;
  v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x18u);
  if ( !v4 )
  {
    v10 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v10);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<enum mhUIID,PgWinFrame *,std::less<enum mhUIID>,std::allocator<std::pair<enum mhUIID const ,PgWinFrame *> >,0> >::_Node *)v4;
  *(_DWORD *)v4 = v4;
  v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v12) = 8;
  v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x14u);
  if ( !v5 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  *(_DWORD *)&v1->m_PickedCharhWnd = 65535;
  v1->m_bAskReturnToInvState = 0;
  v1->m_iReturnToInvItemID = -1;
  v1->m_spMsgBox.m_pObject = 0;
  v1->m_spObjEffMsg.m_pObject = 0;
  v1->m_FocusObj.m_Object = 0;
  v1->m_FocusObj.m_eInfo = 0;
  v1->m_spFocusObjEff.m_pObject = 0;
  v1->m_mhCharEmotionInfo.TargetObjID = -1;
  *(_WORD *)&v1->m_mhCharEmotionInfo.ActPos = -1;
  v1->m_mhCharEmotionInfo.EmotionInfo = 0;
  v6 = v1->m_spFocusObjEff.m_pObject;
  LOBYTE(v12) = 12;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spFocusObjEff.m_pObject = 0;
  }
  v1->m_RevChangeEndure.e = 1;
  v1->m_RevChangeEndure.iCandidateObjID = -1;
  v1->m_RepairObjID = -1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0067C820) --------------------------------------------------------
void __thiscall World::SetCameraZoomRatePerTick(World *this, float fRate)
{
  CameraCtrl::SetZoomRatePerTick(&this->m_kCameraCtrl, fRate);
}

//----- (0067C840) --------------------------------------------------------
void __thiscall World::SetCameraZoomMin(World *this, float fMin)
{
  CameraCtrl::SetZoomMin(&this->m_kCameraCtrl, fMin);
}

//----- (0067C860) --------------------------------------------------------
void __thiscall World::SetCameraZoomMax(World *this, float fMax)
{
  CameraCtrl *v2; // esi@1

  v2 = &this->m_kCameraCtrl;
  CameraCtrl::SetZoomMax(&this->m_kCameraCtrl, fMax);
  if ( (double)fMax < CameraCtrl::GetZoom(v2) )
    CameraCtrl::SetZoom(v2, fMax);
}

//----- (0067C8B0) --------------------------------------------------------
void __thiscall World::SetCameraZoomDef(World *this, float fDef)
{
  CameraCtrl::SetZoomDef(&this->m_kCameraCtrl, fDef);
}

//----- (0067C8D0) --------------------------------------------------------
void __thiscall World::SetControllerMode(World *this, bool bControllerMode)
{
  this->m_bControllerMode = bControllerMode;
}

//----- (0067C8E0) --------------------------------------------------------
void __thiscall World::SetAutoCameraMode(World *this, bool bAutoCameraMode)
{
  this->m_bAutoCameraMode = bAutoCameraMode;
}

//----- (0067C8F0) --------------------------------------------------------
void __thiscall World::SetCameraPosDelta(World *this, NiPoint3 kCameraPosDelta)
{
  LODWORD(this->m_kCameraPosDelta.x) = (_DWORD)kCameraPosDelta.x;
  this->m_kCameraPosDelta.y = kCameraPosDelta.y;
  this->m_kCameraPosDelta.z = kCameraPosDelta.z;
}

//----- (0067C920) --------------------------------------------------------
void __thiscall World::SetCameraAngleDeltaBoundary(World *this, float fAngle, float *pkVar)
{
  double v3; // st7@2
  double v4; // st6@2
  double v5; // st4@4
  double v6; // st4@5
  double v7; // qt1@5
  double v8; // qt2@6
  double v9; // st4@6
  double v10; // st6@6
  bool v11; // c0@6
  bool v12; // c3@6
  double v13; // qtt@6
  double v14; // st4@6
  double v15; // st7@6
  double v16; // st4@7
  float fAnglea; // [sp+8h] [bp+8h]@5

  if ( pkVar )
  {
    v3 = fAngle;
    v4 = 0.0;
    if ( fAngle >= 0.0 && v3 <= 360.0 )
    {
      *pkVar = fAngle;
      return;
    }
    v5 = 360.0;
    while ( 1 )
    {
      v8 = v5;
      v9 = v4;
      v10 = v8;
      v11 = v9 < v3;
      v12 = v9 == v3;
      v13 = v9;
      v14 = v3;
      v15 = v13;
      if ( v11 | v12 )
      {
        if ( v14 <= 360.0 )
        {
          *pkVar = v14;
          return;
        }
        v16 = v14 - v10;
      }
      else
      {
        v16 = v14 + v10;
      }
      fAnglea = v16;
      v6 = v15;
      v3 = fAnglea;
      v7 = v6;
      v5 = v10;
      v4 = v7;
    }
  }
}

//----- (0067C990) --------------------------------------------------------
void __thiscall World::SetCameraPosDist(World *this, float Dist)
{
  this->m_fDist = Dist;
}

//----- (0067C9A0) --------------------------------------------------------
NiPoint3 *__thiscall World::GetCameraLookAtPos(World *this)
{
  return &this->m_kLookAtPos;
}

//----- (0067C9B0) --------------------------------------------------------
void __thiscall World::AddCameraRotate(World *this, int iX, int iY)
{
  CameraCtrl::AddRotate(&this->m_kCameraCtrl, iX, iY);
}

//----- (0067C9C0) --------------------------------------------------------
void __thiscall World::AddCameraZoom(World *this, int iZoom)
{
  CameraCtrl::AddZoom(&this->m_kCameraCtrl, iZoom);
}

//----- (0067C9D0) --------------------------------------------------------
void __thiscall World::SetCameraMove(World *this, bool b)
{
  this->m_bCameraMove = b;
}

//----- (0067C9E0) --------------------------------------------------------
void __thiscall World::SetCameraAngleDeltaLR(World *this, float AngleLR)
{
  if ( -1.0 == AngleLR )
    this->m_fAngleLRDelta = -1.0;
  else
    World::SetCameraAngleDeltaBoundary(this, AngleLR, &this->m_fAngleLRDelta);
}

//----- (0067CA20) --------------------------------------------------------
void __thiscall World::SetCameraAngleDeltaUD(World *this, float AngleUD)
{
  if ( -1.0 == AngleUD )
    this->m_fAngleUDDelta = -1.0;
  else
    World::SetCameraAngleDeltaBoundary(this, AngleUD, &this->m_fAngleUDDelta);
}

//----- (0067CA60) --------------------------------------------------------
void __thiscall World::SetCameraJumpData(World *this, NiPoint3 kCameraPosDelta, float AngleLR, float AngleUD, float Dist)
{
  World *v5; // edx@1
  double v6; // st7@2
  int v7; // edx@6

  v5 = this;
  LODWORD(this->m_kCameraPosDelta.x) = (_DWORD)kCameraPosDelta.x;
  this->m_kCameraPosDelta.y = kCameraPosDelta.y;
  this->m_kCameraPosDelta.z = kCameraPosDelta.z;
  if ( -1.0 == AngleLR )
  {
    v6 = -1.0;
    this->m_fAngleLRDelta = -1.0;
  }
  else
  {
    World::SetCameraAngleDeltaBoundary(this, AngleLR, &this->m_fAngleLRDelta);
    v6 = -1.0;
  }
  if ( v6 == AngleUD )
  {
    v5->m_fAngleUDDelta = v6;
    v5->m_fDist = Dist;
  }
  else
  {
    World::SetCameraAngleDeltaBoundary(v5, AngleUD, &v5->m_fAngleUDDelta);
    *(float *)(v7 + 572516) = Dist;
  }
}

//----- (0067CB10) --------------------------------------------------------
void __thiscall World::SetCameraFOV(World *this, float fFOV, float fScreenWidth, float fScreenHeight)
{
  this->m_fCameraFOV = fFOV;
  JUMPOUT(loc_67CB3D);
}

//----- (0067CBE0) --------------------------------------------------------
void __thiscall World::ImpactCamera(World *this, EffectViewInfo *ImpactInfo)
{
  if ( ImpactInfo )
    OscillationEx::Impact(&this->m_kCamOscillation, ImpactInfo, Timer::ms_fCurTime);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0067CC10) --------------------------------------------------------
void __thiscall World::ImpactCamera(World *this, float fAmplitude, float fCurTime)
{
  World *v3; // esi@1

  v3 = this;
  Oscillation::Impact(&this->m_kCamOscillation.baseclass_0, fAmplitude, fCurTime);
  v3->m_kCamOscillation.baseclass_0.m_fPeriod = 0.02;
  v3->m_kCamOscillation.baseclass_0.m_fDampingMagnitude = 40.0;
}

//----- (0067CC50) --------------------------------------------------------
void __thiscall World::AutoRotateCamera(World *this, float fMsDeltaX)
{
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].DeleteAbStateByAbstateIndex)();
  JUMPOUT(loc_67CCAA);
}

//----- (0067CE60) --------------------------------------------------------
bool __thiscall World::InitCamera(World *this, float fScreenWidth, float fScreenHeight)
{
  World::SetCameraFOV(this, this->m_fCameraFOV, fScreenWidth, fScreenHeight);
}

//----- (0067D180) --------------------------------------------------------
void __thiscall World::TerminateCamera(World *this)
{
  World *v1; // edi@1
  NiCamera *v2; // esi@2
  NiNode *v3; // esi@8

  v1 = this;
  if ( this->m_spCamera.m_pObject )
  {
    v2 = this->m_spCamera.m_pObject;
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      v1->m_spCamera.m_pObject = 0;
    }
  }
  if ( v1->m_spCameraShakeNode.m_pObject )
  {
    v3 = v1->m_spCameraShakeNode.m_pObject;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
      v1->m_spCameraShakeNode.m_pObject = 0;
    }
  }
}

//----- (0067D200) --------------------------------------------------------
void __thiscall World::SetCameraFrustum(World *this, float fScreenWidth, float fScreenHeight)
{
  World::SetCameraFOV(this, this->m_fCameraFOV, fScreenWidth, fScreenHeight);
}

//----- (0067D230) --------------------------------------------------------
bool __thiscall World::GetObjectCameraIntersect(World *this, NiPoint3 kOrigin, NiPoint3 kDir)
{
  NiSortAdjustNode *v3; // ebx@1
  Picking *v4; // esi@1
  NiAVObject *v5; // edi@1
  char *v6; // ebx@9
  std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *v7; // esi@9
  Picking *v8; // ecx@12
  int v9; // edi@12
  NiAVObject *i; // esi@12
  unsigned int v11; // ST08_4@13
  World *v12; // edi@13
  double v13; // st7@13
  NiAVObject *v14; // esi@14
  int v15; // ecx@15
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v16; // eax@15
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v17; // edx@15
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *v18; // eax@22
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v19; // ebx@24
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v20; // eax@24
  int v21; // eax@25
  std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v22; // esi@29
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v23; // eax@29
  Picking *v24; // ecx@32
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v25; // eax@33
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v26; // edi@33
  NiAVObject *v27; // esi@34
  int v28; // eax@35
  float v29; // ST08_4@39
  World *v30; // esi@39
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v31; // eax@39
  std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v32; // esi@40
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v33; // eax@41
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *k; // eax@42
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *j; // eax@45
  int v36; // ecx@50
  int v37; // edi@50
  int v38; // esi@50
  std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v39; // esi@52
  char v41; // [sp+18h] [bp-38h]@29
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> result; // [sp+20h] [bp-30h]@24
  char v43; // [sp+28h] [bp-28h]@30
  NiAVObject *pAvObject; // [sp+2Ch] [bp-24h]@10
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _First; // [sp+30h] [bp-20h]@40
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > _Last; // [sp+34h] [bp-1Ch]@20
  unsigned int uiIndex; // [sp+38h] [bp-18h]@12
  float pkSceneRoot; // [sp+3Ch] [bp-14h]@13
  std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *thisa; // [sp+40h] [bp-10h]@9
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v50; // [sp+44h] [bp-Ch]@9
  World *v51; // [sp+48h] [bp-8h]@1
  bool bResult; // [sp+4Fh] [bp-1h]@1

  v3 = this->m_spBuildingScene.m_pObject;
  v4 = this->m_pkPick;
  v5 = v4->baseclass_0.m_spRoot.m_pObject;
  v51 = this;
  bResult = 0;
  if ( (NiSortAdjustNode *)v5 != v3 )
  {
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      this = v51;
    }
    v4->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v3;
    if ( v3 )
    {
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      this = v51;
    }
  }
  v6 = (char *)&this->m_vecCameraIntersectObject;
  v7 = (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)&this->m_vecFadeObject;
  v50 = (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&this->m_vecCameraIntersectObject;
  thisa = (std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&this->m_vecFadeObject;
  if ( &this->m_vecFadeObject != &this->m_vecCameraIntersectObject )
  {
    std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&this->m_vecFadeObject,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&pAvObject,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)this->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)this->m_vecFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead);
    std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(
      v7,
      (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)v6);
    this = v51;
  }
  if ( Picking::PickCharacter(this->m_pkPick, &kOrigin, &kDir) )
  {
    v8 = v51->m_pkPick;
    v9 = 0;
    uiIndex = 0;
    for ( i = Picking::GetAVObject(v8, 0); i; i = Picking::GetAVObject(v24, uiIndex) )
    {
      v11 = v9;
      v12 = v51;
      pkSceneRoot = Picking::GetDistance(v51->m_pkPick, v11);
      v13 = CameraCtrl::GetZoom(&v12->m_kCameraCtrl);
      if ( pkSceneRoot >= v13 )
        break;
      v14 = NpNs_GetObjectNameRecUp(i, "Scene Root", "[PN]");
      LODWORD(pkSceneRoot) = v14;
      if ( v14 )
      {
        v15 = *((_DWORD *)v6 + 1);
        v16 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(v15 + 4);
        v17 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)*((_DWORD *)v6 + 1);
        while ( !*(_BYTE *)(*(_DWORD *)&v16 + 17) )
        {
          if ( *(_DWORD *)(*(_DWORD *)&v16 + 12) >= (unsigned int)v14 )
          {
            v17 = v16;
            v16 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)**(_DWORD **)&v16;
          }
          else
          {
            v16 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v16 + 8);
          }
        }
        _Last = v17;
        if ( v17 == v15 || (unsigned int)v14 < *(_DWORD *)(*(_DWORD *)&v17 + 12) )
        {
          pAvObject = (NiAVObject *)v15;
          v18 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&pAvObject;
        }
        else
        {
          v18 = &_Last;
        }
        v19 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v18->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        v20 = std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(
                (std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v12->m_vecUpdateFadeObject,
                (unsigned int *)&pkSceneRoot);
        std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Linsert(
          (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v12->m_vecUpdateFadeObject,
          &result,
          v20,
          0);
        if ( (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v19 == v12->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead )
        {
          v21 = ((int (__thiscall *)(NiAVObject *))v14->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v14);
          if ( v21 )
          {
            while ( (NiRTTI *)v21 != &NsFadeNode::m_RTTI )
            {
              v21 = *(_DWORD *)(v21 + 4);
              if ( !v21 )
                goto LABEL_31;
            }
            LOBYTE(v14[2].baseclass_0.baseclass_0.baseclass_0.vfptr) = 0;
            NsFadeNode::Start((NsFadeNode *)v14, Timer::ms_fCurTime, 1);
            NsFadeNode::SetMinAlpha((NsFadeNode *)v14, 0.2);
            v22 = thisa;
            v23 = std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(
                    thisa,
                    (unsigned int *)&pkSceneRoot);
            std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Linsert(
              (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v22,
              (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> *)&v41,
              v23,
              0);
            bResult = 1;
          }
        }
        else
        {
          std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase(
            v50,
            (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v43,
            v19);
        }
LABEL_31:
        v6 = (char *)v50;
      }
      v24 = v51->m_pkPick;
      v9 = uiIndex++ + 1;
    }
  }
  v25 = v51->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v26 = v25->_Left;
  if ( v25->_Left != v25 )
  {
    do
    {
      v27 = v26->_Myval;
      pAvObject = v27;
      if ( v27 )
      {
        v28 = ((int (__thiscall *)(NiAVObject *))v27->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v27);
        if ( v28 )
        {
          while ( (NiRTTI *)v28 != &NsFadeNode::m_RTTI )
          {
            v28 = *(_DWORD *)(v28 + 4);
            if ( !v28 )
              goto LABEL_40;
          }
          LOBYTE(v27[2].baseclass_0.baseclass_0.baseclass_0.vfptr) = 1;
          v29 = NsFadeNode::GetCurAlpha((NsFadeNode *)v27);
          NsFadeNode::SetMinAlpha((NsFadeNode *)v27, v29);
          NsFadeNode::Start((NsFadeNode *)v27, Timer::ms_fCurTime, 0);
          v30 = v51;
          v31 = std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(
                  (std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v51->m_vecUpdateFadeObject,
                  (unsigned int *)&pAvObject);
          std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Linsert(
            (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v30->m_vecUpdateFadeObject,
            (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> *)&v41,
            v31,
            0);
        }
      }
LABEL_40:
      v32 = thisa;
      std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(
        (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)thisa,
        (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *)&_First,
        &v26->_Myval);
      std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v32,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v43,
        _First,
        _Last);
      if ( !v26->_Isnil )
      {
        v33 = v26->_Right;
        if ( v33->_Isnil )
        {
          for ( j = v26->_Parent; !j->_Isnil; j = j->_Parent )
          {
            if ( v26 != j->_Right )
              break;
            v26 = j;
          }
          v26 = j;
        }
        else
        {
          v26 = v26->_Right;
          for ( k = v33->_Left; !k->_Isnil; k = k->_Left )
            v26 = k;
        }
      }
    }
    while ( v26 != v51->m_vecCameraIntersectObject.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  v36 = *((_DWORD *)v6 + 1);
  v37 = *(_DWORD *)(v36 + 4);
  v38 = *(_DWORD *)(v36 + 4);
  if ( !*(_BYTE *)(v37 + 17) )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Erase(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v6,
        *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)(v38 + 8));
      v38 = *(_DWORD *)v38;
      operator delete((void *)v37);
      v37 = v38;
    }
    while ( !*(_BYTE *)(v38 + 17) );
  }
  v39 = thisa;
  *(_DWORD *)(*((_DWORD *)v6 + 1) + 4) = *((_DWORD *)v6 + 1);
  **((_DWORD **)v6 + 1) = *((_DWORD *)v6 + 1);
  *(_DWORD *)(*((_DWORD *)v6 + 1) + 8) = *((_DWORD *)v6 + 1);
  *((_DWORD *)v6 + 2) = 0;
  if ( (std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v6 != v39 )
  {
    std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v6,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v43,
      **((std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > **)v6
       + 1),
      *((std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)v6
      + 1));
    std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(
      (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)v6,
      (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)v39);
  }
  return bResult;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0067D5C0) --------------------------------------------------------
void __thiscall World::UpdateCamera(World *this, float fTime)
{
  int v2; // ebx@0
  int v3; // edi@0
  int v4; // esi@0
  int v5; // ST1C_4@1
  World *v6; // ebx@1
  double v7; // st7@5
  double v8; // st7@5
  NiPoint3 *v9; // eax@8
  NiPoint3 *v10; // eax@10
  double v11; // st7@12
  float v12; // edx@12
  float v13; // eax@12
  double v14; // st7@12
  float v15; // ST20_4@12
  float v16; // edx@17
  float v17; // eax@17
  float v18; // ecx@17
  _BYTE v19[12]; // ST14_12@20
  _BYTE v20[12]; // ST08_12@20
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v21; // eax@20
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > v22; // esi@20
  bool v23; // zf@21
  int v24; // edi@21
  int v25; // eax@22
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > j; // eax@23
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > i; // eax@26
  int v28; // eax@31
  NiCamera *v29; // eax@37
  NiCamera *v30; // eax@37
  double v31; // st7@38
  NiNode *v32; // ebx@43
  double v33; // st7@43
  double v34; // st6@43
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *v35; // [sp+14h] [bp-A8h]@34
  float v36; // [sp+18h] [bp-A4h]@34
  float v37; // [sp+1Ch] [bp-A0h]@34
  NiPoint2 pos2Side; // [sp+24h] [bp-98h]@12
  NiPoint3 kNormal; // [sp+2Ch] [bp-90h]@12
  NiPoint3 kGroundPos; // [sp+38h] [bp-84h]@12
  NiPoint3 kCamDir; // [sp+44h] [bp-78h]@5
  NiPoint3 kCameraPos; // [sp+50h] [bp-6Ch]@5
  NiPoint3 kLookAtPos; // [sp+5Ch] [bp-60h]@1
  NiPoint3 kLookAt2GroundDir; // [sp+68h] [bp-54h]@12
  NiPoint3 kShakeAxis; // [sp+74h] [bp-48h]@5
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > iterCur; // [sp+80h] [bp-3Ch]@8
  NiPoint3 kShake; // [sp+84h] [bp-38h]@11
  float fLength; // [sp+90h] [bp-2Ch]@13
  NiMatrix3 mat; // [sp+94h] [bp-28h]@5
  unsigned int v50; // [sp+B8h] [bp-4h]@1
  int v51; // [sp+BCh] [bp+0h]@1

  v50 = (unsigned int)&v51 ^ __security_cookie;
  v5 = v2;
  v6 = this;
  CameraCtrl::Update(&this->m_kCameraCtrl, fTime);
  ((void (__stdcall *)(NiPoint3 *, int, int, int))g_pkMainChar->baseclass_0.vfptr[21].Deaffect)(&kLookAtPos, v3, v4, v5);
  if ( v6->m_bControllerMode == 1 )
  {
    if ( v6->m_bAutoCameraMode == 1 )
      World::AutoRotateCamera(v6, 3.0);
    kLookAtPos.z = kLookAtPos.z + 20.0;
  }
  CameraCtrl::SetLookAtPos(&v6->m_kCameraCtrl, &kLookAtPos);
  CameraCtrl::CalCulateCamera(&v6->m_kCameraCtrl, &kCameraPos);
  kShakeAxis.x = -World::ms_kNorthDir.x;
  kShakeAxis.y = -World::ms_kNorthDir.y;
  LODWORD(kCamDir.x) = (_DWORD)kShakeAxis.x;
  memcpy(&mat, &NiMatrix3::IDENTITY, sizeof(mat));
  kShakeAxis.z = -World::ms_kNorthDir.z;
  kLookAtPos.x = v6->m_kCameraPosDelta.x + kLookAtPos.x;
  kLookAtPos.y = v6->m_kCameraPosDelta.y + kLookAtPos.y;
  v7 = v6->m_kCameraPosDelta.z;
  kCamDir.y = kShakeAxis.y;
  kCamDir.z = kShakeAxis.z;
  kLookAtPos.z = v7 + kLookAtPos.z;
  v8 = 0.0;
  if ( v6->m_fAngleUDDelta >= 0.0 || v6->m_fAngleLRDelta >= 0.0 )
  {
    if ( v6->m_fAngleUDDelta >= 0.0 )
    {
      kShakeAxis.x = -World::ms_kWestDir;
      kShakeAxis.y = -flt_A80EF8;
      kShakeAxis.z = -flt_A80EFC;
      *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6->m_fAngleUDDelta * 0.01745329238474369;
      NiMatrix3::MakeRotation(
        &mat,
        *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0],
        kShakeAxis.x,
        kShakeAxis.y,
        kShakeAxis.z);
      v9 = operator_(&kShakeAxis, &kCamDir, &mat);
      v8 = 0.0;
      kCamDir.x = v9->x;
      kCamDir.y = v9->y;
      kCamDir.z = v9->z;
    }
    if ( v8 <= v6->m_fAngleLRDelta )
    {
      *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6->m_fAngleLRDelta * 0.01745329238474369;
      NiMatrix3::MakeRotation(
        &mat,
        *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0],
        World::ms_kUpDir.x,
        World::ms_kUpDir.y,
        World::ms_kUpDir.z);
      v10 = operator_(&kShakeAxis, &kCamDir, &mat);
      kCamDir.x = v10->x;
      kCamDir.y = v10->y;
      kCamDir.z = v10->z;
    }
    kShakeAxis.x = -kCamDir.x;
    kShakeAxis.y = -kCamDir.y;
    kShakeAxis.z = -kCamDir.z;
    *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6->m_fDist;
    kShake.x = kShakeAxis.x * *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    kShake.y = kShakeAxis.y * *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    kShake.z = *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] * kShakeAxis.z;
    kShakeAxis.x = kShake.x + kLookAtPos.x;
    LODWORD(kCameraPos.x) = (_DWORD)kShakeAxis.x;
    kShakeAxis.y = kShake.y + kLookAtPos.y;
    kCameraPos.y = kShakeAxis.y;
    kShakeAxis.z = kShake.z + kLookAtPos.z;
    kCameraPos.z = kShakeAxis.z;
  }
  v11 = kCameraPos.x - kLookAtPos.x;
  v12 = kLookAtPos.y;
  v13 = kLookAtPos.z;
  LODWORD(v6->m_kLookAtPos.x) = (_DWORD)kLookAtPos.x;
  kLookAt2GroundDir.x = v11;
  v6->m_kLookAtPos.y = v12;
  v14 = kCameraPos.y;
  v6->m_kLookAtPos.z = v13;
  LODWORD(kShake.x) = (_DWORD)kLookAt2GroundDir.x;
  LODWORD(kShakeAxis.x) = (_DWORD)kLookAt2GroundDir.x;
  kLookAt2GroundDir.y = v14 - kLookAtPos.y;
  kShake.y = kLookAt2GroundDir.y;
  kShakeAxis.y = kLookAt2GroundDir.y;
  kLookAt2GroundDir.z = kCameraPos.z - kLookAtPos.z;
  kShake.z = kLookAt2GroundDir.z;
  kShakeAxis.z = kLookAt2GroundDir.z;
  NiPoint3::Unitize(&kShakeAxis);
  *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6->m_kWorldFrustum.m_fNear;
  LODWORD(kNormal.x) = (_DWORD)NiPoint3::ZERO.x;
  kNormal.y = NiPoint3::ZERO.y;
  v15 = kShakeAxis.x * *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  kNormal.z = NiPoint3::ZERO.z;
  pos2Side.x = kShakeAxis.y * *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  pos2Side.y = *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] * kShakeAxis.z;
  kShake.x = kLookAt2GroundDir.x - v15;
  kShake.y = kShake.y - pos2Side.x;
  kShake.z = kShake.z - pos2Side.y;
  if ( World::GetCameraPickPos2(v6, &kLookAtPos, &kCameraPos, &kGroundPos, &kNormal, 0) )
  {
    kLookAt2GroundDir.x = kGroundPos.x - kLookAtPos.x;
    kLookAt2GroundDir.y = kGroundPos.y - kLookAtPos.y;
    kLookAt2GroundDir.z = kGroundPos.z - kLookAtPos.z;
    *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = kShake.z * kShake.z
                                                                          + kShake.x * kShake.x
                                                                          + kShake.y * kShake.y;
    *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = sqrt(*(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]);
    *(double *)&kShake.y = *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] * 1.5;
    fLength = kLookAt2GroundDir.y * kLookAt2GroundDir.y
            + kLookAt2GroundDir.x * kLookAt2GroundDir.x
            + kLookAt2GroundDir.z * kLookAt2GroundDir.z;
    fLength = sqrt(fLength);
    if ( fLength < *(double *)&kShake.y )
    {
      fLength = kNormal.y * kNormal.y + kNormal.x * kNormal.x + kNormal.z * kNormal.z;
      fLength = sqrt(fLength);
      if ( fLength > 0.1000000014901161 )
      {
        NiPoint3::Unitize(&kNormal);
        pos2Side.x = v6->m_kWorldFrustum.m_fTop;
        pos2Side.y = v6->m_kWorldFrustum.m_fRight;
        fLength = pos2Side.y * pos2Side.y + pos2Side.x * pos2Side.x;
        fLength = sqrt(fLength);
        kShake.x = kNormal.x * fLength;
        kShake.y = kNormal.y * fLength;
        kShake.z = fLength * kNormal.z;
        fLength = v6->m_kWorldFrustum.m_fNear;
        kLookAt2GroundDir.x = kShake.x * fLength;
        kLookAt2GroundDir.y = kShake.y * fLength;
        kLookAt2GroundDir.z = fLength * kShake.z;
        kShake.x = kLookAt2GroundDir.x * 1.5;
        kShake.y = kLookAt2GroundDir.y * 1.5;
        kShake.z = 1.5 * kLookAt2GroundDir.z;
        kGroundPos.x = kShake.x + kGroundPos.x;
        kGroundPos.y = kShake.y + kGroundPos.y;
        kGroundPos.z = kShake.z + kGroundPos.z;
      }
      kLookAt2GroundDir.x = kGroundPos.x - kLookAtPos.x;
      kLookAt2GroundDir.y = kGroundPos.y - kLookAtPos.y;
      kLookAt2GroundDir.z = kGroundPos.z - kLookAtPos.z;
      *(double *)&kShake.y = *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      fLength = kLookAt2GroundDir.y * kLookAt2GroundDir.y
              + kLookAt2GroundDir.x * kLookAt2GroundDir.x
              + kLookAt2GroundDir.z * kLookAt2GroundDir.z;
      fLength = sqrt(fLength);
      if ( fLength >= (double)*(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] )
      {
        fLength = *(float *)&iterCur.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        NiPoint3::Unitize(&kLookAt2GroundDir);
        kShake.x = kLookAt2GroundDir.x * fLength;
        kShake.y = kLookAt2GroundDir.y * fLength;
        kShake.z = fLength * kLookAt2GroundDir.z;
        kLookAt2GroundDir.x = kShake.x + kLookAtPos.x;
        LODWORD(v16) = (_DWORD)kLookAt2GroundDir.x;
        kLookAt2GroundDir.y = kShake.y + kLookAtPos.y;
        v17 = kLookAt2GroundDir.y;
        kLookAt2GroundDir.z = kShake.z + kLookAtPos.z;
        v18 = kLookAt2GroundDir.z;
      }
      else
      {
        kShake.x = kLookAt2GroundDir.x + kLookAtPos.x;
        LODWORD(v16) = (_DWORD)kShake.x;
        kShake.y = kLookAt2GroundDir.y + kLookAtPos.y;
        v17 = kShake.y;
        kShake.z = kLookAt2GroundDir.z + kLookAtPos.z;
        v18 = kShake.z;
      }
      kCameraPos.z = v18;
      kCameraPos.y = v17;
      kCameraPos.x = v16;
    }
  }
  *(_DWORD *)v19 = (_DWORD)kShakeAxis.x;
  *(_QWORD *)&v19[4] = *(_QWORD *)&kShakeAxis.y;
  *(_DWORD *)v20 = (_DWORD)kLookAtPos.x;
  *(_QWORD *)&v20[4] = *(_QWORD *)&kLookAtPos.y;
  World::GetObjectCameraIntersect(v6, *(NiPoint3 *)v20, *(NiPoint3 *)v19);
  v21 = v6->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v22 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >)v21->_Left;
  if ( v21->_Left != v21 )
  {
    do
    {
      v23 = *(_BYTE *)(*(_DWORD *)&v22 + 17) == 0;
      v24 = *(_DWORD *)(*(_DWORD *)&v22 + 12);
      iterCur = v22;
      if ( v23 )
      {
        v25 = *(_DWORD *)(*(_DWORD *)&v22 + 8);
        if ( *(_BYTE *)(v25 + 17) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > *)(*(_DWORD *)&v22 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 17);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v22 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v22 = i;
          }
          v22 = i;
        }
        else
        {
          v22 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > *)(*(_DWORD *)&v22 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > > *)v25;
                !*(_BYTE *)(*(_DWORD *)&j + 17);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >)**(_DWORD **)&j )
            v22 = j;
        }
      }
      if ( v24 && (v28 = (*(int (__thiscall **)(int))(*(_DWORD *)v24 + 4))(v24)) != 0 )
      {
        while ( (NiRTTI *)v28 != &NsFadeNode::m_RTTI )
        {
          v28 = *(_DWORD *)(v28 + 4);
          if ( !v28 )
            goto LABEL_34;
        }
        if ( *(_DWORD *)(v24 + 356) )
        {
          NiAVObject::Update((NiAVObject *)v24, Timer::ms_fCurTime, 1);
          continue;
        }
        std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(
          &v6->m_vecUpdateFadeObject.baseclass_0,
          (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *)&kLookAt2GroundDir.y,
          (NiAVObject *const *)(*(_DWORD *)&iterCur + 12));
        v37 = kLookAt2GroundDir.z;
        v36 = kLookAt2GroundDir.y;
        v35 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&fLength;
      }
      else
      {
LABEL_34:
        std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(
          &v6->m_vecUpdateFadeObject.baseclass_0,
          (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *)&kShake.y,
          (NiAVObject *const *)(*(_DWORD *)&iterCur + 12));
        v37 = kShake.z;
        v36 = kShake.y;
        v35 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&pos2Side.y;
      }
      std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v6->m_vecUpdateFadeObject,
        v35,
        LODWORD(v36),
        LODWORD(v37));
    }
    while ( (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v22 != v6->m_vecUpdateFadeObject.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  v29 = v6->m_spCamera.m_pObject;
  LODWORD(v29->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kCameraPos.x;
  v29->baseclass_0.m_kLocal.m_Translate.y = kCameraPos.y;
  v29->baseclass_0.m_kLocal.m_Translate.z = kCameraPos.z;
  NiAVObject::Update(&v6->m_spCamera.m_pObject->baseclass_0, 0.0, 1);
  NiCamera::LookAtWorldPoint(v6->m_spCamera.m_pObject, &kLookAtPos, &World::ms_kUpDir);
  NiAVObject::Update(&v6->m_spCamera.m_pObject->baseclass_0, 0.0, 1);
  Oscillation::Update(&v6->m_kCamOscillation.baseclass_0, fTime);
  v30 = v6->m_spCamera.m_pObject;
  if ( v6->m_kCamOscillation.m_eAxis == 1 )
  {
    kShake.x = v30->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][1];
    kShake.y = v30->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][1];
    v31 = v30->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1];
  }
  else
  {
    kShake.x = v30->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2];
    kShake.y = v30->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
    v31 = v30->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][2];
  }
  kShake.z = v31;
  fLength = v6->m_kCamOscillation.baseclass_0.m_fValue;
  v32 = v6->m_spCameraShakeNode.m_pObject;
  LODWORD(kShakeAxis.x) = (_DWORD)kShake.x;
  kShakeAxis.y = kShake.y;
  kShakeAxis.z = kShake.z;
  v33 = fLength;
  kShake.x = kShake.x * fLength;
  v34 = kShake.y;
  LODWORD(v32->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kShake.x;
  kShake.y = v34 * v33;
  v32->baseclass_0.m_kLocal.m_Translate.y = kShake.y;
  kShake.z = v33 * kShakeAxis.z;
  v32->baseclass_0.m_kLocal.m_Translate.z = kShake.z;
  NiAVObject::Update(&v32->baseclass_0, fTime, 1);
}
// 67D5C0: could not find valid save-restore pair for ebx
// 67D5C0: could not find valid save-restore pair for edi
// 67D5C0: could not find valid save-restore pair for esi
// A80EF4: using guessed type float World__ms_kWestDir;
// A80EF8: using guessed type float flt_A80EF8;
// A80EFC: using guessed type float flt_A80EFC;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0067DE00) --------------------------------------------------------
NiPoint3 *__thiscall NiCamera::GetWorldUpVector(NiCamera *this, NiPoint3 *result)
{
  NiPoint3 *v2; // eax@1

  v2 = result;
  result->x = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][1];
  result->y = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][1];
  result->z = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1];
  return v2;
}

//----- (0067DE20) --------------------------------------------------------
NiPoint3 *__thiscall NiCamera::GetWorldRightVector(NiCamera *this, NiPoint3 *result)
{
  NiPoint3 *v2; // eax@1

  v2 = result;
  result->x = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][2];
  result->y = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
  result->z = this->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][2];
  return v2;
}

//----- (0067DE40) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *__thiscall std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *this, std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *_Rootnode, std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *_Wherenode)
{
  std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *v3; // ebx@1
  bool v4; // zf@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v5; // eax@2
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v6; // ecx@2
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v7; // esi@2
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v8; // ST00_4@4
  int v10; // [sp-10h] [bp-28h]@1
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *thisa; // [sp+0h] [bp-18h]@1
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *_Newroot; // [sp+4h] [bp-14h]@1
  int *v13; // [sp+8h] [bp-10h]@1
  int v14; // [sp+14h] [bp-4h]@4

  v13 = &v10;
  v3 = this;
  thisa = (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)this;
  v4 = _Rootnode->_Isnil == 0;
  _Newroot = this->baseclass_0.baseclass_0._Myhead;
  if ( v4 )
  {
    v5 = std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(
           (std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)this,
           (unsigned int *)&_Rootnode->_Myval);
    v6 = _Newroot;
    v7 = v5;
    v5->_Parent = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Wherenode;
    v5->_Color = _Rootnode->_Color;
    if ( v6->_Isnil )
      _Newroot = (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v5;
    v8 = _Rootnode->_Left;
    v14 = 0;
    v5->_Left = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(v3, v8, (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v5);
    v7->_Right = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(v3, _Rootnode->_Right, (std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *)v7);
  }
  return _Newroot;
}

//----- (0067DF00) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *this, std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *_Right)
{
  std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v5; // ecx@2
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v6; // esi@4
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v7; // ecx@4
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *i; // eax@4

  v2 = this;
  this->baseclass_0.baseclass_0._Myhead->_Parent = std::_Tree<std::_Tset_traits<NiAVObject___std::less<NiAVObject__>_std::allocator<NiAVObject__>_0>>::_Copy(
                                                     this,
                                                     _Right->baseclass_0.baseclass_0._Myhead->_Parent,
                                                     this->baseclass_0.baseclass_0._Myhead);
  v3 = v2->baseclass_0.baseclass_0._Myhead;
  v2->baseclass_0.baseclass_0._Mysize = _Right->baseclass_0.baseclass_0._Mysize;
  v4 = v3->_Parent;
  if ( v4->_Isnil )
  {
    v3->_Left = v3;
    v2->baseclass_0.baseclass_0._Myhead->_Right = v2->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = v4->_Left;
    if ( !v4->_Left->_Isnil )
    {
      do
      {
        v4 = v5;
        v5 = v5->_Left;
      }
      while ( !v5->_Isnil );
    }
    v3->_Left = v4;
    v6 = v2->baseclass_0.baseclass_0._Myhead;
    v7 = v6->_Parent;
    for ( i = v7->_Right; !i->_Isnil; i = i->_Right )
      v7 = i;
    v6->_Right = v7;
  }
}

//----- (0067DF80) --------------------------------------------------------
void __thiscall World::ClearLightFog(World *this)
{
  LightFogCtrl::Clear(&this->m_kLightFogCtrl);
}

//----- (0067DF90) --------------------------------------------------------
void __usercall RotateModelXToVector(NiPoint3 *vec<eax>, NiMatrix3 *rot<esi>)
{
  float v2; // ecx@1
  float v3; // edx@1
  float v4; // eax@1
  NiPoint3 zvec; // [sp+0h] [bp-24h]@1
  NiPoint3 yvec; // [sp+Ch] [bp-18h]@1
  NiPoint3 xvec; // [sp+18h] [bp-Ch]@1

  v2 = vec->x;
  v3 = vec->y;
  v4 = vec->z;
  xvec.x = v2;
  xvec.y = v3;
  xvec.z = v4;
  NiPoint3::Unitize(&xvec);
  NiPoint3::Perpendicular(&xvec, &yvec);
  NiPoint3::UnitCross(&xvec, &zvec, &yvec);
  rot->m_pEntry[0][0] = xvec.x;
  rot->m_pEntry[1][0] = xvec.y;
  rot->m_pEntry[2][0] = xvec.z;
  rot->m_pEntry[0][1] = yvec.x;
  rot->m_pEntry[1][1] = yvec.y;
  rot->m_pEntry[2][1] = yvec.z;
  rot->m_pEntry[0][2] = zvec.x;
  rot->m_pEntry[1][2] = zvec.y;
  rot->m_pEntry[2][2] = zvec.z;
}

//----- (0067E010) --------------------------------------------------------
void __thiscall World::SetFogColor(World *this, NiColor *kColor)
{
  NiProperty *v2; // eax@1

  v2 = NiAVObject::GetProperty(&this->m_spWorldScene.m_pObject->baseclass_0, 2);
  if ( v2 )
  {
    v2[1].baseclass_0.m_pcName = (char *)LODWORD(kColor->r);
    v2[1].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(kColor->g);
    v2[1].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(kColor->b);
  }
}

//----- (0067E040) --------------------------------------------------------
void __thiscall World::SetFogDepth(World *this, float fDepth)
{
  NiProperty *v2; // ecx@1

  v2 = NiAVObject::GetProperty(&this->m_spWorldScene.m_pObject->baseclass_0, 2);
  if ( v2 )
  {
    if ( fDepth < 0.0 )
      *(float *)&v2[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0.0;
    else
      *(float *)&v2[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = fDepth;
  }
}

//----- (0067E090) --------------------------------------------------------
void __thiscall World::EnableFog(World *this, bool b)
{
  NiProperty *v2; // eax@1

  v2 = NiAVObject::GetProperty(&this->m_spWorldScene.m_pObject->baseclass_0, 2);
  if ( v2 )
  {
    if ( b )
      LOWORD(v2[1].baseclass_0.baseclass_0.baseclass_0.vfptr) |= 1u;
    else
      LOWORD(v2[1].baseclass_0.baseclass_0.baseclass_0.vfptr) &= 0xFFFEu;
  }
}

//----- (0067E0C0) --------------------------------------------------------
void __thiscall World::SetAmbientLightAmbientColor(World *this, NiColor *kColor)
{
  NiAmbientLight *v2; // eax@1
  float v3; // ecx@2

  v2 = this->m_spAmbientLight.m_pObject;
  if ( v2 )
  {
    v2->baseclass_0.m_kAmb.r = kColor->r;
    v2->baseclass_0.m_kAmb.g = kColor->g;
    v3 = kColor->b;
    ++v2->baseclass_0.baseclass_0.m_uiRevID;
    v2->baseclass_0.m_kAmb.b = v3;
  }
}

//----- (0067E100) --------------------------------------------------------
void __thiscall World::SetAmbientLightDiffuseColor(World *this, NiColor *kColor)
{
  NiAmbientLight *v2; // eax@1
  float v3; // ecx@2

  v2 = this->m_spAmbientLight.m_pObject;
  if ( v2 )
  {
    v2->baseclass_0.m_kDiff.r = kColor->r;
    v2->baseclass_0.m_kDiff.g = kColor->g;
    v3 = kColor->b;
    ++v2->baseclass_0.baseclass_0.m_uiRevID;
    v2->baseclass_0.m_kDiff.b = v3;
  }
}

//----- (0067E140) --------------------------------------------------------
void __thiscall World::SetAmbientLightSpecularColor(World *this, NiColor *kColor)
{
  NiAmbientLight *v2; // eax@1
  float v3; // ecx@2

  v2 = this->m_spAmbientLight.m_pObject;
  if ( v2 )
  {
    v2->baseclass_0.m_kSpec.r = kColor->r;
    v2->baseclass_0.m_kSpec.g = kColor->g;
    v3 = kColor->b;
    ++v2->baseclass_0.baseclass_0.m_uiRevID;
    v2->baseclass_0.m_kSpec.b = v3;
  }
}

//----- (0067E180) --------------------------------------------------------
void __thiscall World::SetDirectionalLightAmbientColor(World *this, NiColor *kColor)
{
  NiDirectionalLight *v2; // eax@1
  float v3; // ecx@2

  v2 = this->m_spDirectionalLight.m_pObject;
  if ( v2 )
  {
    v2->baseclass_0.m_kAmb.r = kColor->r;
    v2->baseclass_0.m_kAmb.g = kColor->g;
    v3 = kColor->b;
    ++v2->baseclass_0.baseclass_0.m_uiRevID;
    v2->baseclass_0.m_kAmb.b = v3;
  }
}

//----- (0067E1C0) --------------------------------------------------------
void __thiscall World::SetDirectionalLightDiffuseColor(World *this, NiColor *kColor)
{
  NiDirectionalLight *v2; // eax@1
  float v3; // ecx@2

  v2 = this->m_spDirectionalLight.m_pObject;
  if ( v2 )
  {
    v2->baseclass_0.m_kDiff.r = kColor->r;
    v2->baseclass_0.m_kDiff.g = kColor->g;
    v3 = kColor->b;
    ++v2->baseclass_0.baseclass_0.m_uiRevID;
    v2->baseclass_0.m_kDiff.b = v3;
  }
}

//----- (0067E200) --------------------------------------------------------
void __thiscall World::SetDirectionalLightSpecularColor(World *this, NiColor *kColor)
{
  NiDirectionalLight *v2; // eax@1
  float v3; // ecx@2

  v2 = this->m_spDirectionalLight.m_pObject;
  if ( v2 )
  {
    v2->baseclass_0.m_kAmb.r = kColor->r;
    v2->baseclass_0.m_kAmb.g = kColor->g;
    v3 = kColor->b;
    ++v2->baseclass_0.baseclass_0.m_uiRevID;
    v2->baseclass_0.m_kAmb.b = v3;
  }
}

//----- (0067E240) --------------------------------------------------------
void __thiscall World::TerminateLightFog(World *this)
{
  World *v1; // edi@1
  NiAmbientLight *v2; // esi@1
  NiDirectionalLight *v3; // esi@6

  v1 = this;
  v2 = this->m_spAmbientLight.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spAmbientLight.m_pObject = 0;
  }
  v3 = v1->m_spDirectionalLight.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spDirectionalLight.m_pObject = 0;
  }
  LightFogCtrl::Terminate(&v1->m_kLightFogCtrl);
}

//----- (0067E2C0) --------------------------------------------------------
void __thiscall World::UpdateLightFog(World *this, float fTime)
{
  World *v2; // esi@1
  NiMaterialProperty *v3; // eax@1
  char *v4; // edi@2
  NiTimeController *v5; // ebx@2
  NiProperty *v6; // eax@2
  NiMaterialProperty *v7; // ecx@4
  NiAmbientLight *v8; // eax@5
  float v9; // ecx@6
  NiMaterialProperty *v10; // eax@7
  NiExtraData **kColor_8; // [sp+14h] [bp-4h]@2

  v2 = this;
  LightFogCtrl::Update(&this->m_kLightFogCtrl, fTime);
  v3 = v2->m_kLightFogCtrl.m_spFogMat.m_pObject;
  if ( v3 )
  {
    v4 = (char *)LODWORD(v3->m_diff.r);
    v5 = (NiTimeController *)LODWORD(v3->m_diff.g);
    kColor_8 = (NiExtraData **)LODWORD(v3->m_diff.b);
    v6 = NiAVObject::GetProperty(&v2->m_spWorldScene.m_pObject->baseclass_0, 2);
    if ( v6 )
    {
      v6[1].baseclass_0.m_pcName = v4;
      v6[1].baseclass_0.m_spControllers.m_pObject = v5;
      v6[1].baseclass_0.m_ppkExtra = kColor_8;
    }
  }
  v7 = v2->m_kLightFogCtrl.m_spAmibentLightMat.m_pObject;
  if ( v7 )
  {
    v8 = v2->m_spAmbientLight.m_pObject;
    if ( v8 )
    {
      v8->baseclass_0.m_kAmb.r = v7->m_diff.r;
      v8->baseclass_0.m_kAmb.g = v7->m_diff.g;
      v9 = v7->m_diff.b;
      ++v8->baseclass_0.baseclass_0.m_uiRevID;
      v8->baseclass_0.m_kAmb.b = v9;
    }
  }
  v10 = v2->m_kLightFogCtrl.m_spBackgroundColorMat.m_pObject;
  if ( v10 )
  {
    v2->m_kBackGroundColor.r = v10->m_diff.r;
    v2->m_kBackGroundColor.g = v10->m_diff.g;
    v2->m_kBackGroundColor.b = v10->m_diff.b;
  }
}

//----- (0067E380) --------------------------------------------------------
bool __thiscall World::InitLightFog(World *this)
{
  World *v1; // ebx@1
  void *v2; // eax@1
  int v3; // eax@2
  NiAmbientLight *v4; // edi@4
  signed int v5; // esi@8
  int v6; // eax@10
  NiAmbientLight *v7; // eax@13
  NiAmbientLight *v8; // eax@13
  float v9; // ecx@13
  NiAmbientLight *v10; // eax@13
  int v11; // edx@13
  NiAmbientLight *v12; // eax@13
  int v13; // ecx@13
  void *v14; // eax@13
  int v15; // eax@14
  NiDirectionalLight *v16; // edi@16
  NiDirectionalLight *v17; // eax@24
  NiDirectionalLight *v18; // eax@24
  int v19; // ecx@24
  float v20; // edx@24
  NiDirectionalLight *v21; // eax@24
  float v22; // ecx@24
  float v23; // edx@24
  NiDirectionalLight *v24; // eax@24
  int v25; // ecx@24
  void *v26; // eax@24
  int v27; // eax@25
  NiDirectionalLight *v28; // edi@27
  signed int v29; // esi@31
  int v30; // eax@33
  NiDirectionalLight *v31; // eax@36
  float v32; // ecx@36
  float v33; // edx@36
  NiDirectionalLight *v34; // eax@36
  float v35; // ecx@36
  float v36; // edx@36
  float v37; // ecx@36
  NiDirectionalLight *v38; // eax@36
  float v39; // edx@36
  float v40; // ecx@36
  NiDirectionalLight *v41; // eax@36
  NiDirectionalLight *v42; // eax@36
  NiNode *v43; // eax@38
  CWorldConfig *v44; // ecx@40
  CDataDocument *v45; // eax@42
  NiPointer<NiNode> v47; // [sp-14h] [bp-74h]@38
  unsigned int v48; // [sp-10h] [bp-70h]@1
  NiMatrix3 kRot; // [sp+0h] [bp-60h]@24
  NiColor kColor; // [sp+24h] [bp-3Ch]@13
  NiAmbientLight *v51; // [sp+30h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+34h] [bp-2Ch]@40
  unsigned int v53; // [sp+50h] [bp-10h]@1
  int v54; // [sp+5Ch] [bp-4h]@1
  int v55; // [sp+60h] [bp+0h]@1

  v53 = (unsigned int)&v55 ^ __security_cookie;
  v48 = (unsigned int)&v55 ^ __security_cookie;
  v1 = this;
  v2 = operator new(0x10Cu);
  v51 = (NiAmbientLight *)v2;
  v54 = 0;
  if ( v2 )
  {
    NiAmbientLight::NiAmbientLight((NiAmbientLight *)v2);
    v51 = (NiAmbientLight *)v3;
  }
  else
  {
    v51 = 0;
  }
  v4 = v1->m_spAmbientLight.m_pObject;
  v54 = -1;
  if ( v4 == v51 )
  {
    v5 = 1;
  }
  else
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
    {
      v5 = 1;
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    }
    else
    {
      v5 = 1;
    }
    v6 = (int)v51;
    v1->m_spAmbientLight.m_pObject = v51;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)(v6 + 4));
  }
  v7 = v1->m_spAmbientLight.m_pObject;
  v7->baseclass_0.baseclass_0.m_uiRevID += v5;
  v7->baseclass_0.m_fDimmer = 1.0;
  v8 = v1->m_spAmbientLight.m_pObject;
  v8->baseclass_0.baseclass_0.m_uiRevID += v5;
  kColor.r = 0.2;
  kColor.g = 0.2;
  kColor.b = 0.2;
  v8->baseclass_0.m_kAmb.r = 0.2;
  v9 = kColor.b;
  v8->baseclass_0.m_kAmb.g = 0.2;
  v8->baseclass_0.m_kAmb.b = v9;
  v10 = v1->m_spAmbientLight.m_pObject;
  LODWORD(v10->baseclass_0.m_kDiff.r) = NiColor::WHITE;
  LODWORD(v10->baseclass_0.m_kDiff.g) = dword_A88D90;
  v11 = dword_A88D94;
  v10->baseclass_0.baseclass_0.m_uiRevID += v5;
  LODWORD(v10->baseclass_0.m_kDiff.b) = v11;
  v12 = v1->m_spAmbientLight.m_pObject;
  LODWORD(v12->baseclass_0.m_kSpec.r) = NiColor::BLACK;
  LODWORD(v12->baseclass_0.m_kSpec.g) = dword_B6E000;
  v13 = dword_B6E004;
  v12->baseclass_0.baseclass_0.m_uiRevID += v5;
  LODWORD(v12->baseclass_0.m_kSpec.b) = v13;
  NiDynamicEffect::AttachAffectedNode(
    &v1->m_spAmbientLight.m_pObject->baseclass_0.baseclass_0,
    v1->m_spNormalLightScene.m_pObject);
  v1->m_spAmbientLight.m_pObject->baseclass_0.baseclass_0.m_bOn = 1;
  ((void (__stdcall *)(NiAmbientLight *, _DWORD, unsigned int))v1->m_spNormalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spAmbientLight.m_pObject,
    0,
    v48);
  v14 = operator new(0x118u);
  v51 = (NiAmbientLight *)v14;
  v54 = v5;
  if ( v14 )
  {
    NiDirectionalLight::NiDirectionalLight((NiDirectionalLight *)v14);
    v51 = (NiAmbientLight *)v15;
  }
  else
  {
    v51 = 0;
    v15 = 0;
  }
  v16 = v1->m_spDirectionalLight.m_pObject;
  v54 = -1;
  if ( v16 != (NiDirectionalLight *)v15 )
  {
    if ( v16 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v16 )
        v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v16,
          v5);
      v15 = (int)v51;
    }
    v1->m_spDirectionalLight.m_pObject = (NiDirectionalLight *)v15;
    if ( v15 )
      InterlockedIncrement((volatile LONG *)(v15 + 4));
  }
  v17 = v1->m_spDirectionalLight.m_pObject;
  v17->baseclass_0.baseclass_0.m_uiRevID += v5;
  v17->baseclass_0.m_fDimmer = 1.0;
  v18 = v1->m_spDirectionalLight.m_pObject;
  kColor.r = 1.0;
  kColor.g = 1.0;
  LODWORD(v18->baseclass_0.m_kAmb.r) = NiColor::BLACK;
  kColor.b = 1.0;
  LODWORD(v18->baseclass_0.m_kAmb.g) = dword_B6E000;
  v19 = dword_B6E004;
  v18->baseclass_0.baseclass_0.m_uiRevID += v5;
  LODWORD(v20) = (_DWORD)kColor.r;
  LODWORD(v18->baseclass_0.m_kAmb.b) = v19;
  v21 = v1->m_spDirectionalLight.m_pObject;
  v21->baseclass_0.baseclass_0.m_uiRevID += v5;
  v22 = kColor.g;
  v21->baseclass_0.m_kDiff.r = v20;
  v23 = kColor.b;
  v21->baseclass_0.m_kDiff.g = v22;
  v21->baseclass_0.m_kDiff.b = v23;
  v24 = v1->m_spDirectionalLight.m_pObject;
  LODWORD(v24->baseclass_0.m_kSpec.r) = NiColor::BLACK;
  LODWORD(v24->baseclass_0.m_kSpec.g) = dword_B6E000;
  v25 = dword_B6E004;
  v24->baseclass_0.baseclass_0.m_uiRevID += v5;
  LODWORD(v24->baseclass_0.m_kSpec.b) = v25;
  NiDynamicEffect::AttachAffectedNode(
    &v1->m_spDirectionalLight.m_pObject->baseclass_0.baseclass_0,
    v1->m_spDirectionalLightScene.m_pObject);
  v1->m_spDirectionalLight.m_pObject->baseclass_0.baseclass_0.m_bOn = 1;
  RotateModelXToVector(&World::ms_kDefaultDirectionalLightDir, &kRot);
  memcpy(&v1->m_spDirectionalLight.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_kLocal, &kRot, 0x24u);
  ((void (__stdcall *)(NiDirectionalLight *, _DWORD))v1->m_spDirectionalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spDirectionalLight.m_pObject,
    0);
  LightFogCtrl::Init(&v1->m_kLightFogCtrl);
  v26 = operator new(0x118u);
  v51 = (NiAmbientLight *)v26;
  v54 = 2;
  if ( v26 )
  {
    NiDirectionalLight::NiDirectionalLight((NiDirectionalLight *)v26);
    v51 = (NiAmbientLight *)v27;
  }
  else
  {
    v51 = 0;
  }
  v28 = v1->m_spMapDirectionalLight.m_pObject;
  v54 = -1;
  if ( (NiAmbientLight *)v28 == v51 )
  {
    v29 = 1;
  }
  else
  {
    if ( v28
      && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v28 )
    {
      v29 = 1;
      v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v28,
        1u);
    }
    else
    {
      v29 = 1;
    }
    v30 = (int)v51;
    v1->m_spMapDirectionalLight.m_pObject = (NiDirectionalLight *)v51;
    if ( v30 )
      InterlockedIncrement((volatile LONG *)(v30 + 4));
  }
  v31 = v1->m_spMapDirectionalLight.m_pObject;
  v31->baseclass_0.baseclass_0.m_uiRevID += v29;
  kColor.b = 0.75;
  v31->baseclass_0.m_kAmb.r = 0.75;
  v32 = kColor.b;
  kColor.r = 1.0;
  v31->baseclass_0.m_kAmb.g = 0.75;
  kColor.g = 1.0;
  LODWORD(v33) = (_DWORD)kColor.r;
  kColor.b = 1.0;
  v31->baseclass_0.m_kAmb.b = v32;
  v34 = v1->m_spMapDirectionalLight.m_pObject;
  kColor.r = 0.0;
  v34->baseclass_0.baseclass_0.m_uiRevID += v29;
  v35 = kColor.g;
  kColor.g = 0.0;
  v34->baseclass_0.m_kDiff.r = v33;
  v36 = kColor.b;
  kColor.b = 0.0;
  v34->baseclass_0.m_kDiff.g = v35;
  LODWORD(v37) = (_DWORD)kColor.r;
  v34->baseclass_0.m_kDiff.b = v36;
  v38 = v1->m_spMapDirectionalLight.m_pObject;
  v38->baseclass_0.baseclass_0.m_uiRevID += v29;
  v39 = kColor.g;
  v38->baseclass_0.m_kSpec.r = v37;
  v40 = kColor.b;
  v38->baseclass_0.m_kSpec.g = v39;
  v38->baseclass_0.m_kSpec.b = v40;
  v41 = v1->m_spMapDirectionalLight.m_pObject;
  v41->baseclass_0.baseclass_0.m_uiRevID += v29;
  v41->baseclass_0.m_fDimmer = 1.0;
  memcpy(&v1->m_spMapDirectionalLight.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_kLocal, &kRot, 0x24u);
  v1->m_spMapDirectionalLight.m_pObject->baseclass_0.baseclass_0.m_bOn = 1;
  v42 = v1->m_spMapDirectionalLight.m_pObject;
  v51 = (NiAmbientLight *)&v48;
  v48 = (unsigned int)v42;
  if ( v42 )
    InterlockedIncrement((volatile LONG *)&v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v43 = v1->m_spAllGroundScene.m_pObject;
  v51 = (NiAmbientLight *)&v47;
  v47.m_pObject = v43;
  if ( v43 )
    InterlockedIncrement((volatile LONG *)&v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  CWorldConfig::InitalizeGroundLight(v1->m_pWorldConfig, v47, (NiPointer<NiDirectionalLight>)v48);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "WorldSetting", 0xCu);
  v44 = v1->m_pWorldConfig;
  v54 = 3;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v44->baseclass_0.baseclass_0.m_strName,
    &thisa,
    0,
    0xFFFFFFFFu);
  v54 = -1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v48 = (unsigned int)v1->m_pWorldConfig;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v45 = CDataDocument::Instance();
  CDataDocument::AddObject(v45, (CBaseObject *)v48);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// B6DFFC: using guessed type int NiColor__BLACK;
// B6E000: using guessed type int dword_B6E000;
// B6E004: using guessed type int dword_B6E004;

//----- (0067E8B0) --------------------------------------------------------
NiPoint3 *__thiscall NiPoint3::Perpendicular(NiPoint3 *this, NiPoint3 *result)
{
  float v2; // ST0C_4@2
  NiPoint3 *v3; // eax@3
  double v4; // st7@5
  float v5; // ST0C_4@5
  float v6; // [sp+4h] [bp-8h]@1
  float v7; // [sp+8h] [bp-4h]@1

  v7 = fabs(this->x);
  v6 = fabs(this->y);
  if ( v6 <= (double)v7 )
  {
    v4 = v6;
    v5 = fabs(this->z);
    if ( v5 < v4 )
      goto LABEL_3;
    NiPoint3::UnitCross(this, result, &NiPoint3::UNIT_Y);
    v3 = result;
  }
  else
  {
    v2 = fabs(this->z);
    if ( v2 < (double)v7 )
    {
LABEL_3:
      NiPoint3::UnitCross(this, result, &NiPoint3::UNIT_Z);
      return result;
    }
    NiPoint3::UnitCross(this, result, &NiPoint3::UNIT_X);
    v3 = result;
  }
  return v3;
}

//----- (0067E940) --------------------------------------------------------
void __thiscall NiQuaternion::ToRotation(NiQuaternion *this, NiMatrix3 *rot)
{
  __asm { fld     dword ptr [this+4] }
  _EAX = rot;
  __asm
  {
    fld     ds:__real@4000000000000000
    fmul    st(1), st
    fxch    st(1)
    fstp    [ebp+twy]
    fld     dword ptr [this+8]
    fmul    st, st(1)
    fstp    [ebp+ty]
    fmul    dword ptr [this+0Ch]
    fstp    [ebp+tzz]
    fld     dword ptr [this]
    fld     [ebp+twy]
    fld     st
    fmulp   st(2), st
    fxch    st(1)
    fstp    [ebp+twx]
    fld     dword ptr [this]
    fld     [ebp+ty]
    fld     st
    fmulp   st(2), st
    fxch    st(1)
    fstp    [ebp+twy]
    fld     dword ptr [this]
    fld     [ebp+tzz]
    fld     st
    fmulp   st(2), st
    fxch    st(1)
    fstp    [ebp+twz]
    fld     dword ptr [this+4]
    fmulp   st(3), st
    fxch    st(2)
    fstp    [ebp+txx]
    fld     st
    fmul    dword ptr [this+4]
    fstp    [ebp+txy]
    fld     st(1)
    fmul    dword ptr [this+4]
    fstp    [ebp+txz]
    fmul    dword ptr [this+8]
    fstp    [ebp+ty]
    fld     dword ptr [this+8]
    fmul    st, st(1)
    fstp    [ebp+tyz]
    fmul    dword ptr [this+0Ch]
    fstp    [ebp+tzz]
    fld     [ebp+tzz]
    fld     st
    fld     [ebp+ty]
    fld     st
    faddp   st(2), st
    fld1
    fld     st
    fsubrp  st(3), st
    fxch    st(2)
    fstp    dword ptr [eax]
    fld     [ebp+txy]
    fld     st
    fld     [ebp+twz]
    fld     st
    faddp   st(2), st
    fxch    st(1)
    fstp    dword ptr [eax+0Ch]
    fld     [ebp+txz]
    fld     st
    fsub    [ebp+twy]
    fstp    dword ptr [eax+18h]
    fxch    st(2)
    fsubrp  st(1), st
    fstp    dword ptr [eax+4]
    fld     [ebp+txx]
    fld     st
    faddp   st(5), st
    fld     st(3)
    fsubrp  st(5), st
    fxch    st(4)
    fstp    dword ptr [eax+10h]
    fld     [ebp+tyz]
    fld     st
    fld     [ebp+twx]
    fld     st
    faddp   st(2), st
    fxch    st(1)
    fstp    dword ptr [eax+1Ch]
    fld     [ebp+twy]
    faddp   st(3), st
    fxch    st(2)
    fstp    dword ptr [eax+8]
    fsubrp  st(1), st
    fstp    dword ptr [eax+14h]
    faddp   st(2), st
    fsubrp  st(1), st
    fstp    dword ptr [eax+20h]
  }
}
// 67E946: inconsistent fpu stack

//----- (0067EA40) --------------------------------------------------------
bool __thiscall InstantBlock::Load(InstantBlock *this, const char *szName)
{
  InstantBlock *v2; // ebx@1
  _iobuf *v3; // eax@1
  _iobuf *v4; // esi@1
  bool result; // al@2
  int v6; // ecx@3
  unsigned int v7; // eax@3
  int v8; // edi@4
  void *v9; // eax@10
  InstantBlock *v10; // [sp+8h] [bp-Ch]@1
  unsigned int uiInx; // [sp+Ch] [bp-8h]@3
  unsigned int uiTotalHeadCnt; // [sp+10h] [bp-4h]@3
  unsigned int uiTotalDataSize; // [sp+1Ch] [bp+8h]@3

  v2 = this;
  v10 = this;
  v3 = fopen(szName, "r");
  v4 = v3;
  if ( v3 )
  {
    fread(&uiTotalHeadCnt, 4u, 1u, v3);
    v6 = uiTotalHeadCnt;
    v7 = 0;
    v2->m_uiTotalHeadCnt = uiTotalHeadCnt;
    uiTotalDataSize = 0;
    uiInx = 0;
    if ( v6 )
    {
      v8 = (int)&v2->m_pkSaveHeaderData[0].nStartX;
      do
      {
        if ( v7 < 0x100 )
        {
          fread((void *)(v8 - 32), 1u, 0x20u, v4);
          fread((void *)v8, 4u, 1u, v4);
          fread((void *)(v8 + 4), 4u, 1u, v4);
          fread((void *)(v8 + 8), 4u, 1u, v4);
          fread((void *)(v8 + 12), 4u, 1u, v4);
          fread((void *)(v8 + 16), 4u, 1u, v4);
          fread((void *)(v8 + 20), 4u, 1u, v4);
          v2 = v10;
          v6 = uiTotalHeadCnt;
          uiTotalDataSize += 2 * *(_DWORD *)(v8 + 16);
          v7 = uiInx;
        }
        ++v7;
        v8 += 60;
        uiInx = v7;
      }
      while ( v7 < v6 );
    }
    if ( v2->m_pbyBlockData )
      operator delete__(v2->m_pbyBlockData);
    v2->m_pbyBlockData = 0;
    v9 = operator new__(uiTotalDataSize);
    v2->m_pbyBlockData = (char *)v9;
    fread(v9, 1u, uiTotalDataSize, v4);
    fclose(v4);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0067EB80) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Max(std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (0067EBB0) --------------------------------------------------------
bool __usercall IsAniObject<al>(NiAVObject *pkObject<ecx>)
{
  int v1; // eax@1
  __int16 v2; // ax@2

  v1 = ((int (__stdcall *)(_DWORD))pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Scene Root");
  return v1 && (v2 = *(_WORD *)(v1 + 28), ((unsigned __int8)v2 >> 1) & 1) && !(((unsigned __int8)v2 >> 4) & 1);
}

//----- (0067EBE0) --------------------------------------------------------
bool __thiscall World::LoadMapLightCtrl(World *this, const char *acMapName)
{
  World *v2; // esi@1
  bool result; // al@2
  NiNode *v4; // esi@4
  NiPointer<NiNode> spNode; // [sp+0h] [bp-114h]@1
  char acFileName[256]; // [sp+4h] [bp-110h]@1
  unsigned int v7; // [sp+104h] [bp-10h]@1
  int v8; // [sp+110h] [bp-4h]@1
  int v9; // [sp+114h] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v8 = 0;
  World::GetLoadFolderName(this, acFileName, "nif");
  PgUtil::LoadNodeNifFile(acFileName, &spNode, 0);
  if ( spNode.m_pObject )
  {
    LightFogCtrl::SetNode(&v2->m_kLightFogCtrl, spNode.m_pObject);
    v8 = -1;
    if ( spNode.m_pObject )
    {
      v4 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0067ECB0) --------------------------------------------------------
void __cdecl ProcessMNode(NiNode *_pNode, NiNode *_pDestNode)
{
  unsigned int v2; // esi@1
  void *v3; // eax@1
  int i; // eax@2
  int v5; // ebx@3
  int v6; // ecx@6
  int v7; // eax@7
  NiAVObject *v8; // esi@12
  void *v9; // eax@16
  void *v10; // eax@22
  void *v11; // ecx@22
  void *v12; // esi@23
  std::exception this; // [sp+28h] [bp-3Ch]@25
  FindMultiMNode kFindcdNode; // [sp+34h] [bp-30h]@2
  std::list<NiAVObject *,std::allocator<NiAVObject *> > listcdNode; // [sp+40h] [bp-24h]@1
  NiPointer<NiAVObject> spObject; // [sp+4Ch] [bp-18h]@3
  NiPointer<NiAVObject> result; // [sp+50h] [bp-14h]@11
  char *_What; // [sp+54h] [bp-10h]@6
  int v19; // [sp+60h] [bp-4h]@2

  v2 = 0;
  listcdNode.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0xCu);
  if ( !v3 )
  {
    *(float *)&_What = 0.0;
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&listcdNode.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&listcdNode + 4) = *(_DWORD *)&listcdNode;
  v19 = 0;
  kFindcdNode.baseclass_0.m_pCallBack = 0;
  kFindcdNode.baseclass_0.m_nCurLevel = -1;
  kFindcdNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindMultiMNode::_vftable_;
  LOBYTE(v19) = 1;
  Ns_TourScene::TourScene(&kFindcdNode.baseclass_0, _pNode, &NiAVObject::m_RTTI, &listcdNode);
  for ( i = **(_DWORD **)&listcdNode; **(_DWORD **)&listcdNode != *(_DWORD *)&listcdNode; i = **(_DWORD **)&listcdNode )
  {
    v5 = *(_DWORD *)(i + 8);
    spObject.m_pObject = (NiAVObject *)v5;
    if ( v5 != v2 )
      InterlockedIncrement((volatile LONG *)(v5 + 4));
    LOBYTE(v19) = 2;
    if ( v5 != v2 )
    {
      *(_DWORD *)(v5 + 88) = *(_DWORD *)(v5 + 140);
      *(_DWORD *)(v5 + 92) = *(_DWORD *)(v5 + 144);
      *(_DWORD *)(v5 + 96) = *(_DWORD *)(v5 + 148);
      memcpy((void *)(v5 + 52), (const void *)(v5 + 104), 0x24u);
      *(float *)&_What = *(float *)(v5 + 152);
      *(float *)&_What = fabs(*(float *)&_What);
      *(float *)(v5 + 100) = *(float *)&_What;
      v6 = *(_DWORD *)(v5 + 32);
      if ( v6 )
      {
        v7 = (*(int (**)(void))(*(_DWORD *)v6 + 4))();
        if ( v7 )
        {
          while ( (NiRTTI *)v7 != &NiRoom::m_RTTI )
          {
            v7 = *(_DWORD *)(v7 + 4);
            if ( !v7 )
              goto LABEL_15;
          }
          NiRoom::DetachFixture(*(NiRoom **)(v5 + 32), &result, (NiAVObject *)v5);
          if ( result.m_pObject )
          {
            v8 = result.m_pObject;
            if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v8 )
                v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
            }
          }
        }
      }
LABEL_15:
      *(_WORD *)(v5 + 28) &= 0xFFFEu;
      ((void (__stdcall *)(int, signed int))_pDestNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v5,
        1);
      v2 = 0;
    }
    v9 = (void *)**(_DWORD **)&listcdNode;
    if ( **(_DWORD **)&listcdNode != *(_DWORD *)&listcdNode )
    {
      **((_DWORD **)v9 + 1) = *(_DWORD *)v9;
      *(_DWORD *)(*(_DWORD *)v9 + 4) = *((_DWORD *)v9 + 1);
      operator delete(v9);
      --listcdNode.baseclass_0.baseclass_0._Mysize;
    }
    LOBYTE(v19) = 1;
    if ( v5 != v2 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
  }
  NiAVObject::Update(&_pDestNode->baseclass_0, 0.0, 1);
  kFindcdNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  v10 = (void *)**(_DWORD **)&listcdNode;
  **(_DWORD **)&listcdNode = *(_DWORD *)&listcdNode;
  *(_DWORD *)(*(_DWORD *)&listcdNode + 4) = *(_DWORD *)&listcdNode;
  v11 = *(void **)&listcdNode;
  listcdNode.baseclass_0.baseclass_0._Mysize = v2;
  if ( v10 != *(void **)&listcdNode )
  {
    do
    {
      v12 = *(void **)v10;
      operator delete(v10);
      v11 = *(void **)&listcdNode;
      v10 = v12;
    }
    while ( v12 != *(void **)&listcdNode );
  }
  operator delete(v11);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C6728: using guessed type int (__stdcall *FindMultiMNode___vftable_)(int _pkObject, int _pData);

//----- (0067EEE0) --------------------------------------------------------
void __cdecl ProcessCDNode(NiNode *_pNode, NiNode *_pDestNode)
{
  unsigned int v2; // esi@1
  void *v3; // eax@1
  int i; // eax@2
  int v5; // ebx@3
  int v6; // ecx@6
  int v7; // eax@7
  NiAVObject *v8; // esi@12
  void *v9; // eax@16
  void *v10; // eax@22
  void *v11; // ecx@22
  void *v12; // esi@23
  std::exception this; // [sp+28h] [bp-3Ch]@25
  FindMultiCDNode kFindcdNode; // [sp+34h] [bp-30h]@2
  std::list<NiAVObject *,std::allocator<NiAVObject *> > listcdNode; // [sp+40h] [bp-24h]@1
  NiPointer<NiAVObject> spObject; // [sp+4Ch] [bp-18h]@3
  NiPointer<NiAVObject> result; // [sp+50h] [bp-14h]@11
  char *_What; // [sp+54h] [bp-10h]@6
  int v19; // [sp+60h] [bp-4h]@2

  v2 = 0;
  listcdNode.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0xCu);
  if ( !v3 )
  {
    *(float *)&_What = 0.0;
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&listcdNode.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&listcdNode + 4) = *(_DWORD *)&listcdNode;
  v19 = 0;
  kFindcdNode.baseclass_0.m_pCallBack = 0;
  kFindcdNode.baseclass_0.m_nCurLevel = -1;
  kFindcdNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindMultiCDNode::_vftable_;
  LOBYTE(v19) = 1;
  Ns_TourScene::TourScene(&kFindcdNode.baseclass_0, _pNode, &NiAVObject::m_RTTI, &listcdNode);
  for ( i = **(_DWORD **)&listcdNode; **(_DWORD **)&listcdNode != *(_DWORD *)&listcdNode; i = **(_DWORD **)&listcdNode )
  {
    v5 = *(_DWORD *)(i + 8);
    spObject.m_pObject = (NiAVObject *)v5;
    if ( v5 != v2 )
      InterlockedIncrement((volatile LONG *)(v5 + 4));
    LOBYTE(v19) = 2;
    if ( v5 != v2 )
    {
      *(_DWORD *)(v5 + 88) = *(_DWORD *)(v5 + 140);
      *(_DWORD *)(v5 + 92) = *(_DWORD *)(v5 + 144);
      *(_DWORD *)(v5 + 96) = *(_DWORD *)(v5 + 148);
      memcpy((void *)(v5 + 52), (const void *)(v5 + 104), 0x24u);
      *(float *)&_What = *(float *)(v5 + 152);
      *(float *)&_What = fabs(*(float *)&_What);
      *(float *)(v5 + 100) = *(float *)&_What;
      v6 = *(_DWORD *)(v5 + 32);
      if ( v6 )
      {
        v7 = (*(int (**)(void))(*(_DWORD *)v6 + 4))();
        if ( v7 )
        {
          while ( (NiRTTI *)v7 != &NiRoom::m_RTTI )
          {
            v7 = *(_DWORD *)(v7 + 4);
            if ( !v7 )
              goto LABEL_15;
          }
          NiRoom::DetachFixture(*(NiRoom **)(v5 + 32), &result, (NiAVObject *)v5);
          if ( result.m_pObject )
          {
            v8 = result.m_pObject;
            if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v8 )
                v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
            }
          }
        }
      }
LABEL_15:
      *(_WORD *)(v5 + 28) &= 0xFFFEu;
      ((void (__stdcall *)(int, signed int))_pDestNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v5,
        1);
      v2 = 0;
    }
    v9 = (void *)**(_DWORD **)&listcdNode;
    if ( **(_DWORD **)&listcdNode != *(_DWORD *)&listcdNode )
    {
      **((_DWORD **)v9 + 1) = *(_DWORD *)v9;
      *(_DWORD *)(*(_DWORD *)v9 + 4) = *((_DWORD *)v9 + 1);
      operator delete(v9);
      --listcdNode.baseclass_0.baseclass_0._Mysize;
    }
    LOBYTE(v19) = 1;
    if ( v5 != v2 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
  }
  NiAVObject::Update(&_pDestNode->baseclass_0, 0.0, 1);
  kFindcdNode.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&Ns_TourScene::_vftable_;
  v10 = (void *)**(_DWORD **)&listcdNode;
  **(_DWORD **)&listcdNode = *(_DWORD *)&listcdNode;
  *(_DWORD *)(*(_DWORD *)&listcdNode + 4) = *(_DWORD *)&listcdNode;
  v11 = *(void **)&listcdNode;
  listcdNode.baseclass_0.baseclass_0._Mysize = v2;
  if ( v10 != *(void **)&listcdNode )
  {
    do
    {
      v12 = *(void **)v10;
      operator delete(v10);
      v11 = *(void **)&listcdNode;
      v10 = v12;
    }
    while ( v12 != *(void **)&listcdNode );
  }
  operator delete(v11);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C2F94: using guessed type int (__stdcall *Ns_TourScene___vftable_)(int _pkObject, int _pData);
// 9C6730: using guessed type int (__stdcall *FindMultiCDNode___vftable_)(int _pkObject, int _pData);

//----- (0067F110) --------------------------------------------------------
bool __thiscall World::LoadMap(World *this, bool bSameMap)
{
  World *v2; // edi@1
  unsigned int v3; // esi@1
  unsigned int v4; // esi@7
  CMagicCircleController *v6; // ecx@15
  MapInfo *v7; // eax@15
  int v8; // ecx@15
  int v9; // edx@15
  int v10; // eax@15
  PgNsTerrain *v11; // esi@29
  NiNode *v12; // esi@31
  NiNode *v13; // eax@31
  void *v14; // ebx@40
  MapViewInfo *v15; // esi@40
  int v16; // eax@48
  char v17; // cl@49
  char *v18; // eax@52
  MapViewInfo *j; // esi@55
  float *v20; // eax@63
  NiRefObjectVtbl *v21; // edx@63
  _iobuf *v22; // esi@63
  double v23; // st7@63
  float v24; // eax@63
  void *(__thiscall *v25)(NiRefObject *, unsigned int); // edx@65
  void *(__thiscall *v26)(NiRefObject *, unsigned int); // edx@65
  MapViewInfo *v27; // eax@65
  MapViewInfo *v28; // eax@70
  void *v29; // eax@75
  NiD3DDefaultShader *v30; // eax@76
  void *v31; // eax@78
  NiD3DDefaultShader *v32; // eax@79
  void *v33; // eax@81
  NiRefObjectVtbl *v34; // edx@81
  void *v35; // eax@81
  NiRefObjectVtbl *v36; // edx@81
  NiObject *v37; // eax@88
  void *v38; // esi@88
  int v39; // eax@88
  void *v40; // ebx@88
  void *v41; // eax@91
  int v42; // eax@92
  int v43; // edi@92
  void (__thiscall *v44)(_DWORD, _DWORD, _DWORD); // eax@94
  bool v45; // zf@95
  void *v46; // eax@96
  int v47; // eax@97
  int v48; // ebx@97
  void (__thiscall *v49)(_DWORD, _DWORD); // edx@101
  void *v50; // eax@108
  int v51; // eax@109
  int v52; // ebx@109
  void (__thiscall *v53)(_DWORD, _DWORD); // eax@113
  World::AniObjectType *v54; // eax@119
  float v55; // edx@119
  NiAVObject *v56; // eax@125
  signed int v57; // esi@125
  NiAVObject *v58; // eax@126
  NiNode *v59; // eax@129
  double v60; // st7@129
  _iobuf *v61; // esi@129
  CDataDocument *v62; // eax@141
  char *v63; // eax@142
  CDataDocument *v64; // eax@142
  float *v65; // ecx@143
  NiPointer<NiNode> v66; // [sp+74h] [bp-74Ch]@59
  NiPointer<NiNode> v67; // [sp+78h] [bp-748h]@59
  float *v68; // [sp+7Ch] [bp-744h]@58
  float *v69; // [sp+80h] [bp-740h]@45
  void *v70; // [sp+84h] [bp-73Ch]@15
  void *v71; // [sp+88h] [bp-738h]@1
  NsEffect kEffect; // [sp+98h] [bp-728h]@107
  NiQuaternion kQuater; // [sp+BCh] [bp-704h]@87
  float fFogDepth; // [sp+CCh] [bp-6F4h]@63
  float fScale; // [sp+D0h] [bp-6F0h]@87
  World *v76; // [sp+D4h] [bp-6ECh]@1
  char a; // [sp+DAh] [bp-6E6h]@129
  char b; // [sp+DBh] [bp-6E5h]@129
  float fFrustumFar; // [sp+DCh] [bp-6E4h]@63
  _iobuf *fp; // [sp+E0h] [bp-6E0h]@40
  float fB; // [sp+E4h] [bp-6DCh]@63
  float fR; // [sp+E8h] [bp-6D8h]@63
  float fG; // [sp+ECh] [bp-6D4h]@63
  NiPointer<NiAVObject> spCD; // [sp+F0h] [bp-6D0h]@5
  MapViewInfo *iNum; // [sp+F4h] [bp-6CCh]@45
  NiPointer<NsFadeNode> spFadeNode; // [sp+F8h] [bp-6C8h]@91
  MapViewInfo *i; // [sp+FCh] [bp-6C4h]@5
  NiPointer<NiNode> spNode; // [sp+100h] [bp-6C0h]@15
  NsTextCodeV0_3 kFileReader; // [sp+104h] [bp-6BCh]@5
  NsFindObjectByName kFindObject; // [sp+234h] [bp-58Ch]@45
  float fQuater[4]; // [sp+270h] [bp-550h]@87
  char _strFileName; // [sp+280h] [bp-540h]@5
  char asdf[256]; // [sp+384h] [bp-43Ch]@10
  char acFileName[260]; // [sp+484h] [bp-33Ch]@15
  char acTempText[256]; // [sp+588h] [bp-238h]@45
  char acFileBuff[256]; // [sp+688h] [bp-138h]@45
  NiPoint3 kPos; // [sp+788h] [bp-38h]@5
  char szNonChar[5]; // [sp+798h] [bp-28h]@7
  char acMapName[13]; // [sp+7A0h] [bp-20h]@6
  unsigned int v100; // [sp+7B0h] [bp-10h]@1
  int v101; // [sp+7BCh] [bp-4h]@5
  int v102; // [sp+7C0h] [bp+0h]@1

  v100 = (unsigned int)&v102 ^ __security_cookie;
  v71 = (void *)((unsigned int)&v102 ^ __security_cookie);
  v2 = this;
  v3 = 0;
  v76 = this;
  this->m_bChangeFogFlag = 0;
  if ( !bSameMap && this->m_MiniHouseIndoorMode.m_eState )
  {
    OutputDebugStringA("MiniHouse Out\n");
    MiniHouseIndoor::Out(&v2->m_MiniHouseIndoorMode);
  }
  World::NowLoadingText(v2, 40);
  if ( bSameMap )
  {
    *(float *)&spCD.m_pObject = 0.0;
    v101 = 0;
    MapInfoTab::GetByMapName(&v2->m_kMapName);
    World::LoadMapLightCtrl(v2, (const char *)&kPos);
    World::GetLoadFolderName(v2, &_strFileName, "shmd");
    NsTextCodeV0_3::NsTextCodeV0_3(&kFileReader);
    LOBYTE(v101) = 1;
    LOWORD(i) = 35;
    std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::clear(&kFileReader.m_setOperater.baseclass_0);
    do
      std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::insert(
        &kFileReader.m_setOperater.baseclass_0,
        (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > >,bool> *)&acMapName[4],
        (const char *)&i + v3++,
        0);
    while ( v3 < 2 );
    szNonChar[4] = byte_9C652C;
    *(_DWORD *)szNonChar = dword_9C6528;
    std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::clear(&kFileReader.m_setNoChar.baseclass_0);
    v4 = 0;
    do
      std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::insert(
        &kFileReader.m_setNoChar.baseclass_0,
        (std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > >,bool> *)&acMapName[4],
        &szNonChar[v4++],
        0);
    while ( v4 < 5 );
    if ( NsTextCodeV0_3::ReadFile(&kFileReader, &_strFileName) && NsTextCodeV0_3::GetWord(&kFileReader, asdf) )
    {
      do
      {
        if ( !NiStricmp(asdf, "Fog") )
        {
          NsTextCodeV0_3::GetWord(&kFileReader, asdf);
          *(float *)szNonChar = atof(asdf);
          World::SetFogDepth(v2, *(float *)szNonChar);
        }
      }
      while ( NsTextCodeV0_3::GetWord(&kFileReader, asdf) );
    }
    LOBYTE(v101) = 0;
    v2->m_kWorldFrustum.m_fFar = MachineOpt::ms_kGraphicOption.fViewTerrainRate
                               * MachineOpt::ms_kGraphicOption.fViewTerrainLength;
    NsTextCodeV0_3::_NsTextCodeV0_3(&kFileReader);
    return 1;
  }
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  World::Clear(v2);
  v6 = v2->m_spMagicCircleController.m_pObject;
  v70 = v2->m_pkTerrain;
  v2->m_kCharSelectMarkDecal.m_pkHpTerrain = (PgNsTerrain *)v70;
  CMagicCircleController::ResetInitTerrain(v6, (PgNsTerrain *)v70);
  DecalMgr::SetHeightFieldTerrain(&v2->m_kDecalMgr, v2->m_pkTerrain);
  spNode.m_pObject = 0;
  v101 = 2;
  acFileName[0] = 0;
  memset(&acFileName[1], 0, 0x103u);
  i = MapViewInfoTab::GetByMapName(&v2->m_kMapName);
  v7 = MapInfoTab::GetByMapName(&v2->m_kMapName);
  v8 = *(_DWORD *)&v7->MapFolderName.n3_name[0];
  v9 = *(_DWORD *)&v7->MapFolderName.n3_name[4];
  v10 = *(_DWORD *)&v7->MapFolderName.n3_name[8];
  *(_DWORD *)acMapName = v8;
  *(_DWORD *)&acMapName[8] = v10;
  *(_DWORD *)&acMapName[4] = v9;
  acMapName[12] = 0;
  unk_AA2800 = 0;
  if ( !strcmp("Rou", acMapName) )
    unk_AA2800 = 1;
  if ( !strcmp("Eld", acMapName) )
    unk_AA2800 = 1;
  if ( !strcmp("RouN", acMapName) )
    unk_AA2800 = 1;
  if ( !strcmp("Urg", acMapName) )
    unk_AA2800 = 1;
  if ( !strcmp("Adl", acMapName) )
    unk_AA2800 = 1;
  if ( !strcmp("Bera", acMapName) )
    unk_AA2800 = 1;
  World::GetLoadFolderName(v2, acFileName, "ini");
  World::NowLoadingText(v2, 60);
  if ( !Folder::m_bInit )
    Folder::Init();
  v11 = v2->m_pkTerrain;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v11->m_kAppRootPath.m_strDefaultPath,
    &Folder::m_acMain,
    strlen(&Folder::m_acMain));
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::rfind(
         &v11->m_kAppRootPath.m_strDefaultPath,
         "\\",
         0xFFFFFFFFu,
         1u) < v11->m_kAppRootPath.m_strDefaultPath.baseclass_0._Mysize - 1 )
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &v11->m_kAppRootPath.m_strDefaultPath,
      1u,
      92);
  PgNsTerrain::LoadData(v2->m_pkTerrain, acFileName);
  World::NowLoadingText(v2, 70);
  v12 = v2->m_pkTerrain->m_spScene.m_pObject;
  v13 = spNode.m_pObject;
  if ( spNode.m_pObject == v12 )
    goto LABEL_38;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && spNode.m_pObject )
    spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)spNode.m_pObject,
      1u);
  spNode.m_pObject = v12;
  if ( v12 )
  {
    InterlockedIncrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v13 = spNode.m_pObject;
LABEL_38:
    if ( v13 )
      ((void (__stdcall *)(NiNode *, signed int))v2->m_spGroundTerrain.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v13,
        1);
  }
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  MapObjMgr::RemoveAll(&g_kMapObjMgr);
  World::GetLoadFolderName(v2, acFileName, "shmd");
  v14 = fopen(acFileName, "r");
  v15 = 0;
  fp = (_iobuf *)v14;
  if ( !v14 )
  {
    v101 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spNode.m_pObject )
      spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spNode.m_pObject,
        1u);
    return 0;
  }
  if ( v2->m_MapType == 2 )
  {
    OutputDebugStringA("Welcome To MiniHouse\n");
    MiniHouseIndoor::Join(&v2->m_MiniHouseIndoorMode, byte_AA5170);
  }
  kFindObject.baseclass_0.m_pCallBack = 0;
  kFindObject.baseclass_0.m_nCurLevel = -1;
  kFindObject.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&NsFindObjectByName::_vftable_;
  kFindObject.m_szName.baseclass_0._Myres = 15;
  kFindObject.m_szName.baseclass_0._Mysize = 0;
  kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kFindObject.m_vecObject.baseclass_0._Mylast = 0;
  kFindObject.m_vecObject.baseclass_0._Myend = 0;
  LOBYTE(v101) = 3;
  JUMPOUT(fgets(acFileBuff, 256, (_iobuf *)v14), 0, &error);
  sscanf(acFileBuff, "%s");
  JUMPOUT(strcmp(acTempText, "shmd0_5"), 0, &error);
  iNum = 0;
  JUMPOUT(fgets(acFileBuff, 256, (_iobuf *)v14), 0, &error);
  v70 = &iNum;
  v69 = (float *)acTempText;
  sscanf(acFileBuff, "%s %d");
  JUMPOUT(strcmp(acTempText, "Sky"), 0, &error);
  if ( iNum )
  {
    JUMPOUT(fgets(acFileBuff, 256, (_iobuf *)v14), 0, &error);
    sscanf(acFileBuff, "%s");
    v70 = acTempText;
    v69 = (float *)Folder::Main();
    sprintf(acFileName, "%s%s");
    PgUtil::LoadNodeNifFile(acFileName, &spNode, 0);
    JUMPOUT(spNode.m_pObject, 0, &error);
    ((void (__stdcall *)(NiNode *, signed int))v2->m_spSkyScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      spNode.m_pObject,
      1);
    v2->m_kSkyCtrl.vfptr->SetNode(&v2->m_kSkyCtrl, spNode.m_pObject);
  }
  NiAVObject::UpdateEffects(&v2->m_spSkyScene.m_pObject->baseclass_0);
  NiAVObject::UpdateProperties(&v2->m_spSkyScene.m_pObject->baseclass_0);
  NiAVObject::Update(&v2->m_spSkyScene.m_pObject->baseclass_0, 0.0, 1);
  if ( i )
  {
    v16 = (int)i->WeatherEffect;
    do
      v17 = *(_BYTE *)v16++;
    while ( v17 );
    if ( (char *)v16 != &i->WeatherEffect[1] )
    {
      if ( strcmp(i->WeatherEffect, "-") )
      {
        v70 = i->WeatherEffect;
        v69 = (float *)Folder::Effect();
        v18 = fs("%s%s.nif");
        if ( PgUtil::LoadNodeNifFile(v18, &spNode, 0) )
        {
          NiPointer<NiActorManager>::operator_(
            (NiPointer<NiPixelData> *)&v2->m_spWeatherEffectScene,
            (NiPointer<NiPixelData> *)&spNode);
          World::AttachEffect(v2, v2->m_spWeatherEffectScene.m_pObject);
        }
      }
    }
    v15 = 0;
  }
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  iNum = v15;
  JUMPOUT(fgets(acFileBuff, 256, (_iobuf *)v14), 0, &error);
  v70 = &iNum;
  v69 = (float *)acTempText;
  sscanf(acFileBuff, "%s %d");
  JUMPOUT(strcmp(acTempText, "Water"), v15, &error);
  for ( j = 0; (signed int)j < (signed int)iNum; j = (MapViewInfo *)((char *)j + 1) )
  {
    JUMPOUT(fgets(acFileBuff, 256, (_iobuf *)v14), 0, &error);
    sscanf(acFileBuff, "%s");
    v70 = acTempText;
    v69 = (float *)Folder::Main();
    sprintf(acFileName, "%s%s");
    PgUtil::LoadNodeNifFile(acFileName, &spNode, 0);
    JUMPOUT(spNode.m_pObject, 0, &error);
    ((void (__stdcall *)(NiNode *, signed int))v2->m_spWaterScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      spNode.m_pObject,
      1);
  }
  World::NowLoadingText(v2, 85);
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  iNum = 0;
  JUMPOUT(fgets(acFileBuff, 256, (_iobuf *)v14), 0, &error);
  v70 = &iNum;
  v69 = (float *)acTempText;
  sscanf(acFileBuff, "%s %d");
  JUMPOUT(strcmp(acTempText, "GroundObject"), 0, &error);
  NsMergePortal::Init(&v2->m_kMergePortal);
  for ( i = 0; (signed int)i < (signed int)iNum; i = (MapViewInfo *)((char *)i + 1) )
  {
    JUMPOUT(fgets(acFileBuff, 256, fp), 0, &error);
    v70 = acTempText;
    sscanf(acFileBuff, "%s");
    v70 = acTempText;
    v69 = (float *)Folder::Main();
    sprintf(acFileName, "%s%s");
    PgUtil::LoadNodeNifFile(acFileName, &spNode, 0);
    JUMPOUT(spNode.m_pObject, 0, &error);
    _itoa(nnn, asdf, 10);
    NiObjectNET::SetName(&spNode.m_pObject->baseclass_0.baseclass_0, asdf);
    ++nnn;
    NiAVObject::Update(&spNode.m_pObject->baseclass_0, 0.0, 1);
    v70 = v2->m_spGroundObjectCollidee.m_pObject;
    ProcessCDNode(spNode.m_pObject, (NiNode *)v70);
    v68 = (float *)v2->m_spUseCameraCollidee.m_pObject;
    ProcessMNode(spNode.m_pObject, (NiNode *)v68);
    if ( v2->m_MiniHouseIndoorMode.m_eState )
    {
      v68 = 0;
      v67.m_pObject = (NiNode *)&v68;
      *(float *)&v69 = 0.0;
      *(float *)&v70 = 0.0;
      spCD.m_pObject = (NiAVObject *)&v67;
      NiPointer<NiNode>::NiPointer<NiNode>(&v67, &v2->m_spGroundObjectCollidee);
      v66.m_pObject = spNode.m_pObject;
      spCD.m_pObject = (NiAVObject *)&v66;
      if ( spNode.m_pObject )
        InterlockedIncrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      MiniHouseIndoor::SetupRoom(&v2->m_MiniHouseIndoorMode, v66, v67, *(MiniHouseRoomInfo::TexStyleGroup *)&v68);
    }
    ((void (__stdcall *)(NiNode *, signed int))v2->m_spGroundObject.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      spNode.m_pObject,
      1);
    NsMergePortal::process(&v2->m_kMergePortal, spNode.m_pObject);
  }
  v20 = (float *)v2->m_kMergePortal.m_spRoomGroup.m_pObject;
  v21 = v2->m_spGroundObject.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v70 = (void *)1;
  v69 = v20;
  ((void (__stdcall *)(float *, signed int, void *))v21[29].__vecDelDtor)(v20, 1, v71);
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  v22 = fp;
  JUMPOUT(fgets(acFileBuff, 256, fp), 0, &error);
  v71 = &fB;
  v70 = &fG;
  v69 = &fR;
  v68 = (float *)acTempText;
  sscanf(acFileBuff, "%s %f %f %f");
  JUMPOUT(strcmp(acTempText, "GlobalLight"), 0, &error);
  *(float *)acMapName = fR;
  *(float *)&acMapName[4] = fG;
  *(float *)&acMapName[8] = fB;
  World::SetAmbientLightAmbientColor(v2, (NiColor *)acMapName);
  JUMPOUT(fgets(acFileBuff, 256, v22), 0, &error);
  v71 = &fB;
  v70 = &fG;
  v69 = &fR;
  v68 = &fFogDepth;
  v67.m_pObject = (NiNode *)acTempText;
  sscanf(acFileBuff, "%s %f %f %f %f");
  JUMPOUT(strcmp(acTempText, "Fog"), 0, &error);
  *(float *)acMapName = fR;
  *(float *)&acMapName[4] = fG;
  *(float *)&acMapName[8] = fB;
  World::SetFogColor(v2, (NiColor *)acMapName);
  World::SetFogDepth(v2, fFogDepth);
  JUMPOUT(fgets(acFileBuff, 256, v22), 0, &error);
  v71 = &fB;
  v70 = &fG;
  v69 = &fR;
  v68 = (float *)acTempText;
  sscanf(acFileBuff, "%s %f %f %f");
  JUMPOUT(strcmp(acTempText, "BackGroundColor"), 0, &error);
  v71 = v22;
  *(float *)acMapName = fR;
  v23 = fG;
  v2->m_kBackGroundColor.r = fR;
  *(float *)&acMapName[4] = v23;
  *(float *)&acMapName[8] = fB;
  v24 = fB;
  v70 = (void *)256;
  LODWORD(v2->m_kBackGroundColor.g) = *(_DWORD *)&acMapName[4];
  v69 = (float *)acFileBuff;
  v2->m_kBackGroundColor.b = v24;
  JUMPOUT(fgets((char *)v69, (int)v70, (_iobuf *)v71), 0, &error);
  v71 = &fFrustumFar;
  v70 = acTempText;
  sscanf(acFileBuff, "%s %f");
  JUMPOUT(strcmp(acTempText, "Frustum"), 0, &error);
  if ( fFrustumFar > 20000.0 )
    fFrustumFar = 20000.0;
  MachineOpt::SetViewTerrainLength(fFrustumFar);
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  v25 = v2->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor;
  v71 = v2->m_spBDNotAni.m_pObject;
  ((void (__stdcall *)(_DWORD, void *))v25)(szNonChar, v71);
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)szNonChar);
  v26 = v2->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor;
  v71 = v2->m_spBDAni.m_pObject;
  ((void (__stdcall *)(_DWORD, void *))v26)(szNonChar, v71);
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)szNonChar);
  v27 = (MapViewInfo *)v2->m_spBDNotAni.m_pObject;
  i = v27;
  if ( v27 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v27->MapName.n3_name[2]) && i )
      (**(void (__stdcall ***)(_DWORD))&i->ID)(1);
    v2->m_spBDNotAni.m_pObject = 0;
  }
  v28 = (MapViewInfo *)v2->m_spBDAni.m_pObject;
  i = v28;
  if ( v28 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v28->MapName.n3_name[2]) && i )
      (**(void (__stdcall ***)(_DWORD))&i->ID)(1);
    v2->m_spBDAni.m_pObject = 0;
  }
  v29 = operator new(0xE8u);
  spCD.m_pObject = (NiAVObject *)v29;
  LOBYTE(v101) = 4;
  if ( v29 )
    NiNode::NiNode((NiNode *)v29, 0);
  else
    v30 = 0;
  LOBYTE(v101) = 3;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBDNotAni, v30);
  v31 = operator new(0xE8u);
  spCD.m_pObject = (NiAVObject *)v31;
  LOBYTE(v101) = 5;
  if ( v31 )
    NiNode::NiNode((NiNode *)v31, 0);
  else
    v32 = 0;
  LOBYTE(v101) = 3;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBDAni, v32);
  v33 = v2->m_spBDAni.m_pObject;
  v34 = v2->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v71 = (void *)1;
  v70 = v33;
  ((void (__stdcall *)(void *, signed int))v34[29].__vecDelDtor)(v33, 1);
  v35 = v2->m_spBDNotAni.m_pObject;
  v36 = v2->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v71 = (void *)1;
  v70 = v35;
  ((void (__stdcall *)(void *, signed int))v36[29].__vecDelDtor)(v35, 1);
  World::ResetShadowTerrian(v2);
  v71 = v2->m_spBDAni.m_pObject;
  NsMakeQuadScene::SetData(&v2->kQaudSceneMakerAni, 5, 512, 50.0, (NiNode *)v71);
  v71 = v2->m_spBDNotAni.m_pObject;
  NsMakeQuadScene::SetData(&v2->kQaudSceneMakerNotAni, 5, 512, 50.0, (NiNode *)v71);
  std::list<NiAVObject___std::allocator<NiAVObject__>>::resize(&v2->m_vecAniObject, 0);
  while ( fgets(acFileBuff, 256, fp) )
  {
    v71 = acTempText;
    sscanf(acFileBuff, "%s");
    if ( !strcmp(acTempText, "DataObjectLoadingEnd") )
      break;
    v71 = &iNum;
    v70 = acTempText;
    JUMPOUT(sscanf(acFileBuff, "%s %d"), 2, &error);
    v71 = acTempText;
    v70 = Folder::Main();
    sprintf(acFileName, "%s%s");
    v67.m_pObject = (NiNode *)v2->m_spTexturePalette.m_pObject;
    PgUtil::LoadNodeNifFile(acFileName, &spNode, (NiTexturePalette *)v67.m_pObject);
    if ( spNode.m_pObject )
      BYTE3(i) = IsAniObject(&spNode.m_pObject->baseclass_0);
    else
      BYTE3(i) = 0;
    for ( *(_DWORD *)szNonChar = 0; *(_DWORD *)szNonChar < (signed int)iNum; ++*(_DWORD *)szNonChar )
    {
      JUMPOUT(fgets(acFileBuff, 256, fp), 0, &error);
      v71 = &fScale;
      v70 = &fQuater[3];
      v69 = &fQuater[2];
      v68 = &fQuater[1];
      v67.m_pObject = (NiNode *)fQuater;
      v66.m_pObject = (NiNode *)&kPos.z;
      sscanf(acFileBuff, "%f %f %f %f %f %f %f %f");
      kQuater.m_fX = fQuater[0];
      kQuater.m_fY = fQuater[1];
      kQuater.m_fZ = fQuater[2];
      kQuater.m_fW = fQuater[3];
      if ( spNode.m_pObject )
      {
        NiObjectNET::ms_eCopyType = 1;
        v37 = NiObject::Clone(&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0);
        v38 = v37;
        v39 = (int)v37->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v37, (unsigned int)"#CD");
        v40 = (void *)v39;
        spCD.m_pObject = (NiAVObject *)v39;
        if ( v39 )
          InterlockedIncrement((volatile LONG *)(v39 + 4));
        LOBYTE(v101) = 6;
        if ( v40 )
        {
          *((_WORD *)v40 + 14) &= 0xFFFEu;
          v41 = operator new(0xE8u);
          spFadeNode.m_pObject = (NsFadeNode *)v41;
          LOBYTE(v101) = 7;
          if ( v41 )
          {
            NiNode::NiNode((NiNode *)v41, 0);
            v43 = v42;
          }
          else
          {
            v43 = 0;
          }
          *(_DWORD *)(v43 + 88) = (_DWORD)kPos.x;
          *(_DWORD *)(v43 + 92) = LODWORD(kPos.y);
          v71 = (void *)(v43 + 52);
          LOBYTE(v101) = 6;
          *(_DWORD *)(v43 + 96) = LODWORD(kPos.z);
          NiQuaternion::ToRotation(&kQuater, (NiMatrix3 *)v71);
          v44 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v43 + 116);
          *(float *)&spFadeNode.m_pObject = fabs(fScale);
          *(float *)&v71 = 0.0;
          v70 = v40;
          *(float *)(v43 + 100) = *(float *)&spFadeNode.m_pObject;
          v44(v43, v70, v71);
          ((void (__stdcall *)(int, signed int))v76->m_spGroundObjectCollidee.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v43,
            1);
          v2 = v76;
        }
        *((_DWORD *)v38 + 22) = (_DWORD)kPos.x;
        *((_DWORD *)v38 + 23) = LODWORD(kPos.y);
        v71 = (char *)v38 + 52;
        *((_DWORD *)v38 + 24) = LODWORD(kPos.z);
        NiQuaternion::ToRotation(&kQuater, (NiMatrix3 *)v71);
        v45 = BYTE3(i) == 0;
        *(float *)&spFadeNode.m_pObject = fabs(fScale);
        *((float *)v38 + 25) = *(float *)&spFadeNode.m_pObject;
        if ( v45 )
        {
          v46 = operator new(0x168u);
          spFadeNode.m_pObject = (NsFadeNode *)v46;
          LOBYTE(v101) = 8;
          if ( v46 )
          {
            NsFadeNode::NsFadeNode((NsFadeNode *)v46, (NiNode *)v38, 1);
            v48 = v47;
          }
          else
          {
            v48 = 0;
          }
          spFadeNode.m_pObject = (NsFadeNode *)v48;
          if ( v48 )
            InterlockedIncrement((volatile LONG *)(v48 + 4));
          v49 = (void (__thiscall *)(_DWORD, _DWORD))**(_DWORD **)v38;
          LOBYTE(v101) = 9;
          v49(v38, 1);
          NiAVObject::Update((NiAVObject *)v48, 0.0, 1);
          if ( !NsMakeQuadScene::AddObject(&v2->kQaudSceneMakerNotAni, (NiAVObject *)v48) && v48 )
          {
            if ( !InterlockedDecrement((volatile LONG *)(v48 + 4)) )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v48)(v48, 1);
            *(float *)&spFadeNode.m_pObject = 0.0;
          }
          LOBYTE(v101) = 6;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spFadeNode);
        }
        else
        {
          NiAVObject::Update((NiAVObject *)v38, 0.0, 1);
          NiAVObject::Update((NiAVObject *)v38, 0.0, 1);
          NsEffect::NsEffect(&kEffect);
          LOBYTE(v101) = 10;
          NsEffect::SetEffectNode(&kEffect, (NiAVObject *)v38);
          NsEffect::Start(&kEffect, Timer::ms_fCurTime);
          if ( 0.0 == kEffect.m_fMaxTime )
          {
            v50 = operator new(0x168u);
            spFadeNode.m_pObject = (NsFadeNode *)v50;
            LOBYTE(v101) = 11;
            if ( v50 )
            {
              NsFadeNode::NsFadeNode((NsFadeNode *)v50, (NiNode *)v38, 1);
              v52 = v51;
            }
            else
            {
              v52 = 0;
            }
            spFadeNode.m_pObject = (NsFadeNode *)v52;
            if ( v52 )
              InterlockedIncrement((volatile LONG *)(v52 + 4));
            v53 = (void (__thiscall *)(_DWORD, _DWORD))**(_DWORD **)v38;
            LOBYTE(v101) = 12;
            v53(v38, 1);
            NiAVObject::Update((NiAVObject *)v52, 0.0, 1);
            if ( !NsMakeQuadScene::AddObject(&v2->kQaudSceneMakerNotAni, (NiAVObject *)v52) && v52 )
            {
              if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) )
                (**(void (__thiscall ***)(_DWORD, _DWORD))v52)(v52, 1);
              *(float *)&spFadeNode.m_pObject = 0.0;
            }
            LOBYTE(v101) = 10;
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spFadeNode);
          }
          else
          {
            spFadeNode.m_pObject = (NsFadeNode *)v38;
            std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(
              (std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *)&v2->m_vecAniObject,
              (ABSTATEINDEX *)&spFadeNode);
            *(float *)&acMapName[4] = kEffect.m_fMaxTime;
            *(float *)&acMapName[8] = Timer::ms_fCurTime;
            spFadeNode.m_pObject = (NsFadeNode *)v38;
            v54 = std::map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>::operator__(
                    &v2->m_mapBoundTime,
                    (NiAVObject *const *)&spFadeNode);
            LODWORD(v55) = *(_DWORD *)&acMapName[8];
            LODWORD(v54->fMaxTime) = *(_DWORD *)&acMapName[4];
            v71 = v38;
            v54->fStartTime = v55;
            if ( !NsMakeQuadScene::AddObject(&v2->kQaudSceneMakerAni, (NiAVObject *)v71) )
              (**(void (__thiscall ***)(void *, signed int))v38)(v38, 1);
          }
          LOBYTE(v101) = 6;
          NsEffect::_NsEffect(&kEffect);
        }
        LOBYTE(v101) = 3;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spCD);
      }
    }
  }
  World::NowLoadingText(v2, 90);
  NiAVObject::Update(&v2->m_spGroundObjectCollidee.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::SetCollisionObject(&v2->m_spGroundObject.m_pObject->baseclass_0, 0);
  NsMakeQuadScene::Optimize(&v2->kQaudSceneMakerNotAni);
  v56 = (NiAVObject *)v2->m_spAllGroundScene.m_pObject;
  *(float *)acMapName = 0.0;
  *(float *)&acMapName[4] = 0.0;
  *(float *)&acMapName[8] = 1.0;
  NiOptimizeABV::CreateWireABV(v56, (NiColor *)acMapName, 1.0, "WireABVTemp", 0);
  NsFindObjectByName::FindObject(&kFindObject, v2->m_spAllGroundScene.m_pObject, "WireABVTemp");
  v57 = 0;
  if ( (signed int)((unsigned int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                                 - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) & 0xFFFFFFFC) > 0 )
  {
    do
    {
      v58 = NsFindObjectByName::GetAt(&kFindObject, v57);
      if ( v58 )
        v58->m_uFlags |= 1u;
      ++v57;
    }
    while ( v57 < (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                             - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
  }
  NiAVObject::UpdateProperties(&v2->m_spWorldScene.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v2->m_spWorldScene.m_pObject->baseclass_0);
  ((void (__stdcall *)(char *, _DWORD, char *))v2->m_spWorldScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[19].__vecDelDtor)(
    &a,
    0,
    &b);
  NiAVObject::Update(&v2->m_spWorldScene.m_pObject->baseclass_0, 0.0, 0);
  ((void (*)(void))v2->m_spWorldScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)();
  v59 = v2->m_spWorldScene.m_pObject;
  *(float *)&spCD.m_pObject = v59->baseclass_0.m_kWorldBound.m_fRadius;
  v60 = v59->baseclass_0.m_kWorldBound.m_kCenter.z;
  v71 = acMapName;
  *(float *)&spCD.m_pObject = v60 + *(float *)&spCD.m_pObject;
  v2->m_fMaxHeight = *(float *)&spCD.m_pObject;
  *(float *)acMapName = 0.0;
  *(float *)&acMapName[4] = 0.0;
  *(float *)&acMapName[8] = 0.0;
  World::SetMapDirectionalLightAmbientColor(v2, (NiColor *)v71);
  v61 = fp;
  if ( fgets(acFileBuff, 256, fp) )
  {
    v71 = &fB;
    v70 = &fG;
    v69 = &fR;
    v68 = (float *)acTempText;
    sscanf(acFileBuff, "%s %f %f %f");
    if ( !strcmp(acTempText, "DirectionLightAmbient") )
    {
      *(float *)acMapName = fR;
      *(float *)&acMapName[4] = fG;
      *(float *)&acMapName[8] = fB;
      World::SetMapDirectionalLightAmbientColor(v2, (NiColor *)acMapName);
    }
  }
  *(float *)acMapName = 0.0;
  *(float *)&acMapName[4] = 0.0;
  *(float *)&acMapName[8] = 0.0;
  World::SetMapDirectionalLightDiffuseColor(v2, (NiColor *)acMapName);
  if ( fgets(acFileBuff, 256, v61) )
  {
    v71 = &fB;
    v70 = &fG;
    v69 = &fR;
    v68 = (float *)acTempText;
    sscanf(acFileBuff, "%s %f %f %f");
    if ( !strcmp(acTempText, "DirectionLightDiffuse") )
    {
      *(float *)acMapName = fR;
      *(float *)&acMapName[4] = fG;
      *(float *)&acMapName[8] = fB;
      World::SetMapDirectionalLightDiffuseColor(v2, (NiColor *)acMapName);
    }
  }
  fclose(v61);
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  World::NowLoadingText(v2, 95);
  World::GetLoadFolderName(v2, acFileName, "shbd");
  if ( !(unsigned __int8)((int (__cdecl *)(_DWORD))v2->m_pkBlockInfo->baseclass_0.vfptr->Load)(acFileName) )
  {
    NsFindObjectByName::_NsFindObjectByName(&kFindObject);
    v101 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  CFindWay::Load(&v2->kPathFindingNew, acFileName);
  World::GetLoadFolderName(v2, acFileName, "sbi");
  InstantBlock::RemoveAll(&v2->m_kInstantBlock);
  if ( InstantBlock::Load(&v2->m_kInstantBlock, acFileName) )
    v2->m_kInstantBlock.pFindWay = &v2->kPathFindingNew;
  World::GetLoadFolderName(v2, acFileName, "aid");
  if ( !AreaInfoData::Load(&v2->m_kAreaInfoData, acFileName) )
    AreaInfoData::RemoveAll(&v2->m_kAreaInfoData);
  World::LoadPathFindingData(v2);
  NetMgr::SendHeartBeat2WorldMgrServer(&g_kNetMgr);
  World::LoadMapLightCtrl(v2, acMapName);
  World::GetLoadFolderName(v2, acFileName, "conf");
  v70 = acFileName;
  v62 = CDataDocument::Instance();
  if ( !CDataDocument::Load(v62, (const char *)v70) )
  {
    v70 = "Default.conf";
    v63 = Folder::Main();
    v70 = Folder::Merge(v63, (char *)v70);
    v64 = CDataDocument::Instance();
    CDataDocument::Load(v64, (const char *)v70);
  }
  NiAVObject::Update(&v2->m_spWorldScene.m_pObject->baseclass_0, 0.0, 1);
  World::GetLoadFolderName(v2, acFileName, "idm");
  v70 = acFileName;
  v69 = v65;
  spCD.m_pObject = (NiAVObject *)&v69;
  NiPointer<NiNode>::NiPointer<NiNode>((NiPointer<NiNode> *)&v69, &v2->m_spGroundObjectCollidee);
  if ( !HeightMapMaker::MakeHeightMap(&v2->m_HeightMapMaker, (NiPointer<NiNode>)v69, (const char *)v70) )
    HeightMapMaker::Clear(&v2->m_HeightMapMaker);
  NsFindObjectByName::_NsFindObjectByName(&kFindObject);
  v101 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// 9C335C: using guessed type int (__stdcall *NsFindObjectByName___vftable_)(int _pkObject, int _pData);
// 9C6528: using guessed type int dword_9C6528;
// 9C652C: using guessed type char byte_9C652C;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;
// AA5170: using guessed type char byte_AA5170;
// B6DE3C: using guessed type int NiObjectNET__ms_eCopyType;

//----- (00680B70) --------------------------------------------------------
void __thiscall NiAVObject::SetCollisionObject(NiAVObject *this, NiCollisionObject *pkCollisionObject)
{
  NiAVObject *v2; // esi@1
  NiCollisionObject *v3; // edi@1
  NiD3DShaderProgram *v4; // ecx@8

  v2 = this;
  v3 = this->m_spCollisionObject.m_pObject;
  if ( v3 != pkCollisionObject )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spCollisionObject.m_pObject = pkCollisionObject;
    if ( pkCollisionObject )
      InterlockedIncrement((volatile LONG *)&pkCollisionObject->baseclass_0.baseclass_0.m_uiRefCount);
  }
  v4 = (NiD3DShaderProgram *)v2->m_spCollisionObject.m_pObject;
  if ( v4 )
  {
    if ( (NiAVObject *)NiGeometryData::GetGroup(v4) != v2 )
      ((void (__stdcall *)(_DWORD))v2->m_spCollisionObject.m_pObject->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v2);
  }
}

//----- (00680BF0) --------------------------------------------------------
unsigned int __thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::rfind(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, const char *_Ptr, unsigned int _Off, unsigned int _Count)
{
  unsigned int v4; // edx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // edi@1
  unsigned int result; // eax@1
  unsigned int v7; // eax@5
  const char *i; // esi@9

  v4 = _Count;
  v5 = this;
  result = this->baseclass_0._Mysize;
  if ( _Count )
  {
    if ( _Count > result )
    {
LABEL_17:
      result = -1;
    }
    else
    {
      v7 = result - _Count;
      if ( _Off < v7 )
        v7 = _Off;
      if ( this->baseclass_0._Myres >= 0x10 )
        this = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
      for ( i = (char *)this + v7; *i != *_Ptr || std::char_traits<char>::compare(i, _Ptr, v4); --i )
      {
        if ( i == std::basic_string<char_std::char_traits<char>_std::allocator<char>>::c_str(v5) )
          goto LABEL_17;
        v4 = _Count;
      }
      if ( v5->baseclass_0._Myres >= 0x10 )
        v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
      result = i - (const char *)v5;
    }
  }
  else
  {
    if ( _Off < result )
      result = _Off;
  }
  return result;
}

//----- (00680C80) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 14) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 14) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 14) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 14) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 14); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 14) )
    goto LABEL_11;
  return result;
}

//----- (00680CE0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Lrotate(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00680D40) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Rrotate(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00680DA0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Erase(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Erase(v3, i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (00680DE0) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *__thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Insert(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v29; // ecx@52
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0xFFFFFFFE )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (00681000) --------------------------------------------------------
std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *__thiscall std::_List_val<NiAVObject___std::allocator<NiAVObject__>>::_Buynode(std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > *this, std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *_Next, std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *_Prev)
{
  std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@3

  result = (std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *)operator new(0xCu);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Next = _Next;
  result->_Prev = _Prev;
  result->_Myval = 0;
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00681050) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::clear(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this)
{
  std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *v1; // edi@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Erase(v1, v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (006810A0) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Buynode(std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, const char *_Val)
{
  std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *result; // eax@1
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *)operator new(0x10u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, &_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *)-12 )
    result->_Myval = *_Val;
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00681110) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  NiAVObject *const v10; // edi@2
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
                          v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
                        v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (006811F0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(...)
{
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
      this,
      result,
      1,
      v5,
      _Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
        this,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node **)&_Where,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
        this,
        result,
        0,
        v8,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,bool> *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 25) )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
        v4,
        result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
        v4,
        result,
        1,
        _Node,
        v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
        v4,
        result,
        0,
        _Node,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
        v4,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (00681350) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Buynode<std::pair<NiAVObject___const_World::AniObjectType>>(std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::pair<NiAVObject * const,World::AniObjectType> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *result; // eax@1
  std::pair<NiAVObject * const,World::AniObjectType> *v4; // edx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)operator new(0x1Cu);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second.fMaxTime = v4->baseclass_0.second.fMaxTime;
    result->_Myval.baseclass_0.second.fStartTime = v4->baseclass_0.second.fStartTime;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006813D0) --------------------------------------------------------
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::insert(std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > >,bool> *result, const char *_Val, bool _Leftish)
{
  std::_Tree<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > *v4; // edi@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v5; // ecx@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v6; // eax@1
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v7; // esi@1
  bool v8; // cl@1
  const char v9; // dl@2
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v10; // edx@10
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v11; // eax@12
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > >,bool> *v12; // eax@12
  int v13; // edx@12
  std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *v14; // eax@15
  bool _Addleft; // [sp+8h] [bp-4h]@1

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = v5;
  v8 = 1;
  _Addleft = 1;
  if ( !v6->_Isnil )
  {
    v9 = *_Val;
    do
    {
      v7 = v6;
      if ( _Leftish )
        v8 = v6->_Myval >= v9;
      else
        v8 = v9 < v6->_Myval;
      _Addleft = v8;
      if ( v8 )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v10 = v7;
  *(_DWORD *)&_Leftish = v7;
  if ( v8 )
  {
    if ( v7 == v4->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v11 = std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Buynode(
              &v4->baseclass_0,
              _Val);
      std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Insert(
        v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *)&_Leftish,
        1,
        v7,
        v11);
      v12 = result;
      v13 = _Leftish;
      result->baseclass_0.second = 1;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v13;
      return v12;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >,std::_Iterator_base0> *)&_Leftish);
    v10 = (std::_Tree_nod<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> >::_Node *)_Leftish;
  }
  if ( v10->_Myval >= *_Val )
  {
    v12 = result;
    result->baseclass_0.second = 0;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v10;
  }
  else
  {
    v14 = std::_Tree_val<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Buynode(
            &v4->baseclass_0,
            _Val);
    std::_Tree<std::_Tset_traits<char_std::less<char>_std::allocator<char>_0>>::_Insert(
      v4,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<char,std::less<char>,std::allocator<char>,0> > > *)&_Leftish,
      _Addleft,
      v7,
      v14);
    v12 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Leftish;
    result->baseclass_0.second = 1;
  }
  return v12;
}

//----- (006814B0) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindMultiCDNode::ProcessData(FindMultiCDNode *this, NiAVObject *_pkObject, void *_pData)
{
  void *v3; // esi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v4; // edi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v5; // eax@2
  int v6; // ecx@2
  Ns_TourScene::TS_RESULT result; // eax@4

  if ( NsUtil::MatchTag(&_pkObject->baseclass_0, "#CD") )
  {
    v3 = _pData;
    v4 = *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData;
    v5 = std::_List_val<char___std::allocator<char__>>::_Buynode(
           (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)_pData + 4),
           (ItemViewDummy *const *)&_pkObject);
    v6 = *((_DWORD *)v3 + 1);
    if ( (unsigned int)(1073741822 - v6) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v3 + 1) = v6 + 1;
    v4->_Prev = v5;
    v5->_Prev->_Next = v5;
    result = -1;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00681520) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindMultiMNode::ProcessData(FindMultiMNode *this, NiAVObject *_pkObject, void *_pData)
{
  void *v3; // esi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v4; // edi@2
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v5; // eax@2
  int v6; // ecx@2
  Ns_TourScene::TS_RESULT result; // eax@4

  if ( NsUtil::MatchTag(&_pkObject->baseclass_0, "#M") )
  {
    v3 = _pData;
    v4 = *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData;
    v5 = std::_List_val<char___std::allocator<char__>>::_Buynode(
           (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)_pData,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)_pData + 4),
           (ItemViewDummy *const *)&_pkObject);
    v6 = *((_DWORD *)v3 + 1);
    if ( (unsigned int)(1073741822 - v6) < 1 )
      std::_Xlength_error("list<T> too long");
    *((_DWORD *)v3 + 1) = v6 + 1;
    v4->_Prev = v5;
    v5->_Prev->_Next = v5;
    result = -1;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00681590) --------------------------------------------------------
void __thiscall std::list<NiAVObject___std::allocator<NiAVObject__>>::resize(std::list<NiAVObject *,std::allocator<NiAVObject *> > *this, unsigned int _Newsize)
{
  std::list<NiAVObject *,std::allocator<NiAVObject *> > *v2; // esi@1
  unsigned int v3; // eax@1
  unsigned int v4; // ebx@1
  int v5; // edi@4
  std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node *v6; // eax@4
  unsigned int v7; // ecx@4
  void *v8; // eax@8
  int v9; // [sp-10h] [bp-24h]@1
  std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *thisa; // [sp+0h] [bp-14h]@1
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@2
  int _Count; // [sp+1Ch] [bp+8h]@2

  v11 = &v9;
  v2 = this;
  thisa = (std::list<CollectWin::sNewestInfo,std::allocator<CollectWin::sNewestInfo> > *)this;
  v3 = this->baseclass_0.baseclass_0._Mysize;
  v4 = _Newsize;
  if ( _Newsize <= v3 )
  {
    if ( _Newsize < v3 )
    {
      do
      {
        v8 = *(void **)(*(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4);
        if ( v8 != *(void **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
        {
          **((_DWORD **)v8 + 1) = *(_DWORD *)v8;
          *(_DWORD *)(*(_DWORD *)v8 + 4) = *((_DWORD *)v8 + 1);
          operator delete(v8);
          --v2->baseclass_0.baseclass_0._Mysize;
        }
      }
      while ( _Newsize < v2->baseclass_0.baseclass_0._Mysize );
    }
  }
  else
  {
    _Count = 0;
    v12 = 0;
    while ( v2->baseclass_0.baseclass_0._Mysize < v4 )
    {
      v5 = *(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v6 = std::_List_val<NiAVObject___std::allocator<NiAVObject__>>::_Buynode(
             &v2->baseclass_0,
             *(std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node **)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
             *(std::_List_nod<NiAVObject *,std::allocator<NiAVObject *> >::_Node **)(*(_DWORD *)&v2->baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                   + 4));
      v7 = v2->baseclass_0.baseclass_0._Mysize;
      if ( 1073741822 - v7 < 1 )
        std::_Xlength_error("list<T> too long");
      ++_Count;
      v2->baseclass_0.baseclass_0._Mysize = v7 + 1;
      *(_DWORD *)(v5 + 4) = v6;
      v6->_Prev->_Next = v6;
    }
  }
}

//----- (00681680) --------------------------------------------------------
World::AniObjectType *__thiscall std::map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>::operator__(std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *this, NiAVObject *const *_Keyval)
{
  std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *v2; // edi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v5; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v6; // eax@8
  World::AniObjectType *result; // eax@8
  std::pair<NiAVObject * const,World::AniObjectType> _Val; // [sp+8h] [bp-14h]@8
  float v9; // [sp+14h] [bp-8h]@8
  float v10; // [sp+18h] [bp-4h]@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 25) )
  {
    if ( (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (World::AniObjectType *)(*(_DWORD *)&v5 + 16);
  }
  else
  {
    _Val.baseclass_0.first = *_Keyval;
    v9 = 0.0;
    v10 = 0.0;
    _Val.baseclass_0.second.fMaxTime = 0.0;
    _Val.baseclass_0.second.fStartTime = 0.0;
    v6 = std::_Tree_val<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Buynode<std::pair<NiAVObject___const_World::AniObjectType>>(
           &v2->baseclass_0.baseclass_0,
           &_Val);
    std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&_Keyval,
      v5,
      v6);
    result = (World::AniObjectType *)(_Keyval + 4);
  }
  return result;
}

//----- (00681710) --------------------------------------------------------
bool __thiscall World::InitMiniMap(World *this)
{
  return 1;
}

//----- (00681720) --------------------------------------------------------
void __thiscall World::TerminateMiniMap(World *this)
{
  World *v1; // edi@1
  NiSourceTexture *v2; // esi@1

  v1 = this;
  v2 = this->m_spMiniMapTexture.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spMiniMapTexture.m_pObject = 0;
  }
}

//----- (00681760) --------------------------------------------------------
void __thiscall World::ClearMiniMap(World *this)
{
  World *v1; // edi@1
  NiSourceTexture *v2; // esi@1

  v1 = this;
  v2 = this->m_spMiniMapTexture.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spMiniMapTexture.m_pObject = 0;
  }
}

//----- (006817A0) --------------------------------------------------------
bool __thiscall World::LoadEmptyMiniMap(World *this)
{
  World *v1; // ebx@1
  NiSourceTexture *v2; // eax@1
  NiSourceTexture *v3; // esi@1
  NiSourceTexture *v4; // edi@1

  v1 = this;
  v2 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
  v3 = v1->m_spMiniMapTexture.m_pObject;
  v4 = v2;
  if ( v3 != v2 )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spMiniMapTexture.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  return 1;
}

//----- (00681800) --------------------------------------------------------
NiSourceTexture *__thiscall World::GetMiniMapTexture(World *this)
{
  return this->m_spMiniMapTexture.m_pObject;
}

//----- (00681810) --------------------------------------------------------
bool __thiscall World::LoadMiniMap(World *this)
{
  World *v1; // ebx@1
  MapInfo *v2; // eax@1
  NiImageConverter *v3; // eax@3
  NiSourceTexture *v4; // edi@3
  NiPixelData *v5; // eax@3
  NiSourceTexture *v6; // esi@5
  NiSourceTexture *v7; // eax@13
  NiSourceTexture *v8; // esi@13
  NiSourceTexture *v9; // edi@13
  bool result; // al@20
  NiTexture::FormatPrefs kPrefs; // [sp+Ch] [bp-124h]@4
  char acFileName[260]; // [sp+18h] [bp-118h]@3
  char acMapName[13]; // [sp+11Ch] [bp-14h]@1
  unsigned int v14; // [sp+12Ch] [bp-4h]@1
  int v15; // [sp+130h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v1 = this;
  v2 = MapInfoTab::GetByMapName(&this->m_kMapName);
  *(_DWORD *)acMapName = *(_DWORD *)&v2->MapFolderName.n3_name[0];
  *(_DWORD *)&acMapName[4] = *(_DWORD *)&v2->MapFolderName.n3_name[4];
  *(_DWORD *)&acMapName[8] = *(_DWORD *)&v2->MapFolderName.n3_name[8];
  acMapName[12] = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%sminimap\\%s.dds");
  v3 = NiImageConverter::GetImageConverter();
  v4 = 0;
  v5 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v3->baseclass_0.vfptr[2].__vecDelDtor)(
                        v3,
                        acFileName,
                        0);
  if ( v5 )
  {
    kPrefs.m_ePixelLayout = 6;
    kPrefs.m_eAlphaFmt = 3;
    kPrefs.m_eMipMapped = 0;
    v4 = NiSourceTexture::Create(v5, &kPrefs);
  }
  v6 = v1->m_spMiniMapTexture.m_pObject;
  if ( v6 != v4 )
  {
    if ( v6
      && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spMiniMapTexture.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v1->m_spMiniMapTexture.m_pObject )
  {
    result = 1;
  }
  else
  {
    v7 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
    v8 = v1->m_spMiniMapTexture.m_pObject;
    v9 = v7;
    if ( v8 != v7 )
    {
      if ( v8
        && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      v1->m_spMiniMapTexture.m_pObject = v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00681980) --------------------------------------------------------
bool __thiscall World::SelectMiniMap(World *this, Name3 kMapName)
{
  int v2; // edi@0
  World *v3; // ebx@1
  Name3 *v4; // eax@1
  bool v5; // al@3
  MapViewInfo *v6; // eax@4
  int v7; // ST10_4@6
  NiImageConverter *v8; // eax@6
  NiSourceTexture *v9; // edi@6
  NiPixelData *v10; // eax@6
  NiSourceTexture *v11; // esi@8
  NiSourceTexture *v12; // eax@16
  NiSourceTexture *v13; // esi@16
  NiSourceTexture *v14; // edi@16
  Name3 result; // [sp+4h] [bp-124h]@1
  char acFileName[260]; // [sp+10h] [bp-118h]@6
  char acMapName[13]; // [sp+114h] [bp-14h]@4
  unsigned int v18; // [sp+124h] [bp-4h]@1
  int v19; // [sp+128h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  v4 = World::GetMapName(this, &result);
  if ( *(_QWORD *)&kMapName != *(_QWORD *)&v4->n3_name[0]
    || *(_DWORD *)&kMapName.n3_name[8] != *(_DWORD *)&v4->n3_name[8] )
  {
    v6 = MapViewInfoTab::GetByMapName(&kMapName);
    *(_DWORD *)acMapName = *(_DWORD *)&v6->MapFolderName.n3_name[0];
    *(_DWORD *)&acMapName[4] = *(_DWORD *)&v6->MapFolderName.n3_name[4];
    *(_DWORD *)&acMapName[8] = *(_DWORD *)&v6->MapFolderName.n3_name[8];
    acMapName[12] = 0;
    if ( !Folder::m_bInit )
      Folder::Init();
    v7 = v2;
    sprintf(acFileName, "%sminimap\\%s.dds");
    v8 = NiImageConverter::GetImageConverter();
    v9 = 0;
    v10 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD, int))v8->baseclass_0.vfptr[2].__vecDelDtor)(
                           v8,
                           acFileName,
                           0,
                           v7);
    if ( v10 )
    {
      *(_QWORD *)&result.n3_name[0] = 12884901894i64;
      *(_DWORD *)&result.n3_name[8] = 0;
      v9 = NiSourceTexture::Create(v10, (NiTexture::FormatPrefs *)&result);
    }
    v11 = v3->m_spMiniMapTexture.m_pObject;
    if ( v11 != v9 )
    {
      if ( v11
        && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      v3->m_spMiniMapTexture.m_pObject = v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    if ( v3->m_spMiniMapTexture.m_pObject )
    {
      v5 = 1;
    }
    else
    {
      v12 = PgUtil::Create1PixelSourceTexture(0, 0, 0, -1);
      v13 = v3->m_spMiniMapTexture.m_pObject;
      v14 = v12;
      if ( v13 != v12 )
      {
        if ( v13
          && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v13 )
          v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
        v3->m_spMiniMapTexture.m_pObject = v14;
        if ( v14 )
          InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      v5 = 0;
    }
  }
  else
  {
    v5 = 0;
  }
  return v5;
}
// 681980: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00681B30) --------------------------------------------------------
void __thiscall World::UpdateCharDecalMark(World *this, float fTime)
{
  DecalMgr::Update(&this->m_kDecalMgr, fTime);
}

//----- (00681B50) --------------------------------------------------------
void __thiscall World::Shake(World *this)
{
  NiTransformController *v1; // ecx@1

  v1 = this->m_spShakeContrl.m_pObject;
  if ( v1 )
    ((void (__stdcall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(Timer::ms_fCurTime));
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00681B70) --------------------------------------------------------
void __thiscall World::SetMagicCirclePos(World *this, NiPoint3 *rkPos)
{
  CMagicCircleController::UpdatePosition(this->m_spMagicCircleController.m_pObject, rkPos);
}

//----- (00681B80) --------------------------------------------------------
void __thiscall World::SetMagicCircleEnable(World *this, bool bEnable)
{
  CMagicCircleController::SetEnable(this->m_spMagicCircleController.m_pObject, bEnable);
}

//----- (00681B90) --------------------------------------------------------
void __thiscall World::SetMagicCircleRadius(World *this, float fRadius)
{
  CMagicCircleController::SetCircleRadius(this->m_spMagicCircleController.m_pObject, fRadius);
}

//----- (00681BB0) --------------------------------------------------------
void __thiscall World::TerminateMisc(World *this)
{
  World *v1; // esi@1
  NiNode *v2; // edi@1
  NiTransformController *v3; // edi@6
  NiNode *v4; // edi@11
  NiTexturePalette *v5; // edi@16
  CMagicCircleController *v6; // edi@21

  v1 = this;
  v2 = this->m_spMoveTargetPointNode.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spMoveTargetPointNode.m_pObject = 0;
  }
  v3 = v1->m_spShakeContrl.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spShakeContrl.m_pObject = 0;
  }
  v4 = v1->m_spCharSelectMarkNode.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spCharSelectMarkNode.m_pObject = 0;
  }
  NsDecal::Terminate(&v1->m_kCharSelectMarkDecal);
  v5 = v1->m_spTexturePalette.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spTexturePalette.m_pObject = 0;
  }
  v6 = v1->m_spMagicCircleController.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spMagicCircleController.m_pObject = 0;
  }
  DecalMgr::Terminate(&v1->m_kDecalMgr);
}

//----- (00681CB0) --------------------------------------------------------
void __thiscall World::UpdateMainCharMoveTargetPoint(World *this, float fTime)
{
  World *v2; // esi@1

  v2 = this;
  if ( this->m_spMoveTargetPointNode.m_pObject )
  {
    if ( (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[8].Affect)() )
      v2->m_spMoveTargetPointNode.m_pObject->baseclass_0.m_uFlags |= 1u;
    NiAVObject::Update(&v2->m_spMoveTargetPointNode.m_pObject->baseclass_0, fTime, 1);
  }
}

//----- (00681D00) --------------------------------------------------------
void __thiscall World::PlayBGM(World *this)
{
  MapViewInfo *v1; // esi@1
  char acFileName[256]; // [sp+4h] [bp-104h]@3
  unsigned int v3; // [sp+104h] [bp-4h]@1
  int v4; // [sp+108h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = MapViewInfoTab::GetByMapName(&this->m_kMapName);
  if ( v1 && v1->BGM_Name_01[0] != 45 )
  {
    sprintf(acFileName, "%s");
    SoundMgr::PlayBGM(&g_kSoundMgr, v1->ID);
  }
  else
  {
    SoundMgr::StopBGM(&g_kSoundMgr);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00681D80) --------------------------------------------------------
void __thiscall World::UpdateCharSelectMark(World *this, float fTime)
{
  World *v2; // edi@1
  NiNode *v3; // ecx@1
  unsigned int v4; // esi@2
  NiProperty *v5; // ebx@4
  void *v6; // eax@5
  NiProperty *v7; // eax@6
  NiAVObject *v8; // ecx@8
  NiProperty *v9; // edi@9
  void *v10; // eax@10
  NiProperty *v11; // eax@11
  NiAVObject *v12; // ecx@13
  double v13; // st7@15
  float v14; // ebx@16
  int v15; // ebx@18
  unsigned int v16; // ebx@18
  double v17; // st7@19
  double v18; // st7@21
  char *v19; // eax@31
  char *v20; // eax@33
  float v21; // eax@34
  float v22; // ecx@34
  float v23; // edi@36
  int v24; // eax@36
  double v25; // st7@38
  MobViewInfo *v26; // eax@39
  unsigned int v27; // eax@40
  float v28; // ecx@43
  Name5 v29; // [sp-8h] [bp-5Ch]@31
  int v30; // [sp-4h] [bp-58h]@31
  float v31; // [sp+0h] [bp-54h]@31
  float v32; // [sp+4h] [bp-50h]@31
  float v33; // [sp+8h] [bp-4Ch]@31
  NiPoint3 kPos; // [sp+1Ch] [bp-38h]@36
  float v35; // [sp+28h] [bp-2Ch]@15
  float v36; // [sp+2Ch] [bp-28h]@15
  float v37; // [sp+30h] [bp-24h]@16
  NiColor kColor; // [sp+34h] [bp-20h]@14
  void *v39; // [sp+40h] [bp-14h]@5
  float v40; // [sp+44h] [bp-10h]@1
  int v41; // [sp+50h] [bp-4h]@5

  v2 = this;
  LODWORD(v40) = this;
  v3 = this->m_spCharSelectMarkNode.m_pObject;
  if ( v3 )
  {
    v4 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
    if ( v4 && !*(_BYTE *)(v4 + 2502) )
    {
      v5 = NiAVObject::GetProperty(&v3->baseclass_0, 9);
      if ( !v5 )
      {
        v6 = operator new(0x28u);
        v39 = v6;
        v41 = 0;
        if ( v6 )
          NiVertexColorProperty::NiVertexColorProperty((NiVertexColorProperty *)v6);
        else
          v7 = 0;
        v8 = (NiAVObject *)v2->m_spCharSelectMarkNode.m_pObject;
        v41 = -1;
        v5 = v7;
        NiAVObject::AttachProperty(v8, v7);
      }
      v9 = NiAVObject::GetProperty(&v2->m_spCharSelectMarkNode.m_pObject->baseclass_0, 3);
      if ( !v9 )
      {
        v10 = operator new(0x60u);
        v39 = v10;
        v41 = 1;
        if ( v10 )
          NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v10);
        else
          v11 = 0;
        v12 = *(NiAVObject **)(LODWORD(v40) + 572620);
        v41 = -1;
        v9 = v11;
        NiAVObject::AttachProperty(v12, v11);
      }
      kColor.r = 255.0;
      kColor.g = 255.0;
      v5[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = 0;
      kColor.b = 255.0;
      v5[1].baseclass_0.m_pcName = 0;
      if ( Char::IsNPC((Char *)v4) )
        goto LABEL_15;
      if ( (unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 32))(v4) )
      {
        v15 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 164))(v4);
        v16 = v15 - User::Lv(&g_kUser);
        if ( (signed int)v16 >= 6 )
        {
          v35 = 190.0;
          v36 = 37.0;
          v17 = 29.0;
LABEL_25:
          v37 = v17;
          v14 = v35;
          kColor.g = v36;
          kColor.b = v37;
          goto LABEL_31;
        }
        if ( (signed int)v16 < 3 )
        {
          if ( (signed int)v16 >= -2 )
          {
LABEL_15:
            v35 = 255.0;
            v36 = 243.0;
            v13 = 50.0;
LABEL_16:
            v37 = v13;
            v14 = v35;
            kColor.g = v36;
            kColor.b = v37;
            goto LABEL_31;
          }
          if ( (signed int)v16 >= -5 )
          {
            v35 = 90.0;
            v36 = 231.0;
            v17 = 86.0;
            goto LABEL_25;
          }
          v18 = 192.0;
          v35 = 192.0;
          v36 = 192.0;
        }
        else
        {
          v35 = 255.0;
          v36 = 160.0;
          v18 = 37.0;
        }
        v37 = v18;
        v14 = v35;
        kColor.g = v36;
        kColor.b = v37;
      }
      else
      {
        if ( (Char *)v4 == g_pkMainChar )
        {
          v35 = 225.0;
          v36 = 198.0;
          v13 = 31.0;
          goto LABEL_16;
        }
        LODWORD(v14) = (_DWORD)kColor.r;
      }
LABEL_31:
      v19 = (char *)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 84))(v4);
      v39 = &v29;
      v33 = 0.0;
      v32 = 0.0;
      v31 = 0.0;
      v30 = 0;
      *(_DWORD *)&v29.n5_name[0] = 0;
      strncpy(v29.n5_name, v19, 0x14u);
      if ( Party::GetMemberInfo(&g_kParty, v29) )
      {
        v35 = 146.0;
        v14 = 146.0;
        v36 = 164.0;
        kColor.g = 164.0;
        v37 = 245.0;
        kColor.b = 245.0;
      }
      v20 = (char *)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 84))(v4);
      v39 = &v29;
      v33 = 0.0;
      v32 = 0.0;
      v31 = 0.0;
      v30 = 0;
      *(_DWORD *)&v29.n5_name[0] = 0;
      strncpy(v29.n5_name, v20, 0x14u);
      if ( RaidInfo::GetRaidMemberInfo(&g_kRaidinfo, v29) )
      {
        v35 = 146.0;
        v14 = 146.0;
        v36 = 164.0;
        v21 = 164.0;
        v37 = 245.0;
        v22 = 245.0;
      }
      else
      {
        v22 = kColor.b;
        v21 = kColor.g;
      }
      ++v9[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      v9[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(v14);
      v9[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(v21);
      v9[2].baseclass_0.m_uiExtraDataSize = LODWORD(v22);
      v23 = v40;
      NiAVObject::UpdateProperties(*(NiAVObject **)(LODWORD(v40) + 572620));
      *(_WORD *)(*(_DWORD *)(LODWORD(v23) + 572620) + 28) &= 0xFFFEu;
      v24 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 204))(v4);
      LODWORD(kPos.x) = *(_DWORD *)v24;
      LODWORD(kPos.y) = *(_DWORD *)(v24 + 4);
      LODWORD(kPos.z) = *(_DWORD *)(v24 + 8);
      if ( (unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 32))(v4) || Char::IsNPC((Char *)v4) )
      {
        v26 = IIDTableBase<MobViewInfo_MobViewInfoTab_unsigned_short>::GetByID(*(_WORD *)(v4 + 942), 1);
        if ( !v26 || (v27 = v26->ChrMarkSize) == 0 )
          goto LABEL_43;
        v39 = (void *)v27;
        v40 = (double)v27;
        v25 = v40;
      }
      else
      {
        v25 = 50.0;
      }
      v33 = v25;
      v32 = v25;
      NsDecal::SetDecalSize((NsDecal *)(LODWORD(v23) + 572624), v32, v33);
LABEL_43:
      NsDecal::Update((NsDecal *)(LODWORD(v23) + 572624), 0.0, *(NiNode **)(LODWORD(v23) + 572620), &kPos);
      LODWORD(v33) = 1;
      v32 = v28;
      NiAVObject::Update(*(NiAVObject **)(LODWORD(v23) + 572620), fTime, 1);
      return;
    }
    v3->baseclass_0.m_uFlags |= 1u;
  }
}

//----- (00682180) --------------------------------------------------------
bool __thiscall World::InitMisc(World *this)
{
  World *v1; // esi@1
  char *v2; // eax@3
  NiNode *v3; // eax@3
  NiNode *v4; // edi@3
  NiNode *v5; // ebx@3
  NiNode *v6; // eax@10
  char *v7; // eax@13
  NiNode *v8; // edi@13
  int v9; // ebx@14
  void *v11; // eax@18
  NiD3DDefaultShader *v12; // eax@19
  int v13; // ebx@21
  NiObject *v14; // eax@22
  NiObject *v15; // eax@22
  NiObject *v16; // edi@22
  NiNode *v17; // eax@28
  void *v18; // eax@28
  NiD3DDefaultShader *v19; // eax@29
  void *v20; // eax@31
  NiD3DDefaultShader *v21; // eax@32
  CMagicCircleController *v22; // ebx@36
  PgNsTerrain *v23; // ST08_4@36
  char *v24; // eax@36
  NiNode *v25; // ebx@36
  NiRefObjectVtbl *v26; // edi@36
  NiNode *v27; // eax@36
  NiNode *pBuildGround; // [sp+0h] [bp-1Ch]@22
  NiNode *pBuildGrounda; // [sp+0h] [bp-1Ch]@34
  NiPointer<NiRoom> element; // [sp+4h] [bp-18h]@22
  NiPointer<NiNode> spNode; // [sp+8h] [bp-14h]@1
  NiNode *v32; // [sp+Ch] [bp-10h]@13
  int v33; // [sp+18h] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v33 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSystem, "Misc\\MoveTargetPoint.nif");
  v3 = PgUtil::LoadNifFile(v2, 0, 1);
  v4 = v1->m_spMoveTargetPointNode.m_pObject;
  v5 = v3;
  if ( v4 != v3 )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spMoveTargetPointNode.m_pObject = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v6 = v1->m_spMoveTargetPointNode.m_pObject;
  if ( !v6 )
    return 0;
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spWorldScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v6,
    0);
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acSystem, "Misc\\CharSelectMark.nif");
  v8 = PgUtil::LoadNifFile(v7, 0, 1);
  v32 = v8;
  if ( !v8 )
    return 0;
  spNode.m_pObject = v8;
  InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v9 = (int)v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
              (NiRefObject *)v8,
              (unsigned int)"Plane01");
  if ( !v9 )
  {
    v33 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    return 0;
  }
  v11 = operator new(0xE8u);
  LOBYTE(v33) = 1;
  if ( v11 )
    NiNode::NiNode((NiNode *)v11, 0);
  else
    v12 = 0;
  LOBYTE(v33) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_spCharSelectMarkNode, v12);
  v13 = *(_DWORD *)(v9 + 160);
  while ( v13 )
  {
    v14 = *(NiObject **)(v13 + 8);
    v13 = *(_DWORD *)v13;
    pBuildGround = v1->m_spCharSelectMarkNode.m_pObject;
    v15 = NiObject::Clone(v14);
    v16 = v15;
    element.m_pObject = (NiRoom *)v15;
    if ( v15 )
      InterlockedIncrement((volatile LONG *)&v15->baseclass_0.m_uiRefCount);
    LOBYTE(v33) = 2;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&pBuildGround->baseclass_0.m_kPropertyList,
      &element);
    LOBYTE(v33) = 0;
    if ( v16 && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.m_uiRefCount) )
      v16->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
  }
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spWorldScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCharSelectMarkNode.m_pObject,
    0);
  NsDecal::Init(&v1->m_kCharSelectMarkDecal);
  v17 = (NiNode *)v1->m_spBuildingScene.m_pObject;
  v1->m_kCharSelectMarkDecal.m_pkHpTerrain = v1->m_pkTerrain;
  NsDecal::SetObjectTerrain(&v1->m_kCharSelectMarkDecal, v17);
  v18 = operator new(0x20u);
  LOBYTE(v33) = 3;
  if ( v18 )
    NiDefaultTexturePalette::NiDefaultTexturePalette((NiDefaultTexturePalette *)v18, 0);
  else
    v19 = 0;
  LOBYTE(v33) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_spTexturePalette, v19);
  v20 = operator new(0x84u);
  LOBYTE(v33) = 4;
  if ( v20 )
    CMagicCircleController::CMagicCircleController((CMagicCircleController *)v20);
  else
    v21 = 0;
  LOBYTE(v33) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_spMagicCircleController, v21);
  pBuildGrounda = (NiNode *)v1->m_spBuildingScene.m_pObject;
  if ( !Folder::m_bInit )
    Folder::Init();
  v22 = v1->m_spMagicCircleController.m_pObject;
  v23 = v1->m_pkTerrain;
  v24 = Folder::Merge(&Folder::m_acSystem, "Misc\\SkillAreaMark.nif");
  CMagicCircleController::Init(v22, v24, v23, pBuildGrounda);
  v25 = v1->m_spWorldScene.m_pObject;
  v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = CMagicCircleController::GetNode(v1->m_spMagicCircleController.m_pObject);
  ((void (__thiscall *)(NiNode *, NiNode *, _DWORD))v26[29].__vecDelDtor)(v25, v27, 0);
  DecalMgr::Init(&v1->m_kDecalMgr, v1->m_pkTerrain, &v1->m_spBuildingScene.m_pObject->baseclass_0);
  v33 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    ((void (__stdcall *)(signed int))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006824C0) --------------------------------------------------------
void __thiscall World::ClearMisc(World *this)
{
  World *v1; // edi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  NiTexturePalette *v5; // esi@3

  v1 = this;
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&this->m_vecFadeObject);
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_vecCameraIntersectObject);
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_vecUpdateFadeObject);
  v2 = operator new(0x20u);
  v3 = 0;
  if ( v2 )
  {
    NiDefaultTexturePalette::NiDefaultTexturePalette((NiDefaultTexturePalette *)v2, 0);
    v3 = v4;
  }
  v5 = v1->m_spTexturePalette.m_pObject;
  if ( v5 != (NiTexturePalette *)v3 )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spTexturePalette.m_pObject = (NiTexturePalette *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
}

//----- (00682580) --------------------------------------------------------
void __thiscall NiRefObject::_NiRefObject(CPostProcessEffect *this)
{
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (006825A0) --------------------------------------------------------
void __thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> > *this)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> > *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9C67D4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiTexture_____vftable_)(void *p, char);

//----- (006825C0) --------------------------------------------------------
void __thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>(NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiTexture> >,NiPointer<NiTexture> > *this)
{
  NiTStringTemplateMap<NiTPointerMap<char const *,NiPointer<NiTexture> >,NiPointer<NiTexture> > *v1; // edi@1
  bool v2; // zf@1
  unsigned int v3; // ebx@2
  NiTMapItem<char const *,NiPointer<NiTexture> > *v4; // esi@3
  void *v5; // eax@4

  v1 = this;
  v2 = this->m_bCopy == 0;
  this->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vftable_;
  if ( !v2 )
  {
    v3 = 0;
    if ( this->baseclass_0.baseclass_0.m_uiHashSize )
    {
      do
      {
        v4 = v1->baseclass_0.baseclass_0.m_ppkHashTable[v3];
        while ( v4 )
        {
          v5 = (void *)v4->m_key;
          v4 = v4->m_pkNext;
          operator delete__(v5);
        }
        ++v3;
      }
      while ( v3 < v1->baseclass_0.baseclass_0.m_uiHashSize );
    }
  }
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTPointerMap<char_const___NiPointer<NiTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  v1->baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v1);
  operator delete__(v1->baseclass_0.baseclass_0.m_ppkHashTable);
}
// 9C67D4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiTexture_____vftable_)(void *p, char);
// 9C67F4: using guessed type int (__thiscall *NiTPointerMap_char const __NiPointer_NiTexture_____vftable_)(void *p, char);
// 9C6814: using guessed type int (__thiscall *NiTStringTemplateMap_NiTPointerMap_char const __NiPointer_NiTexture___NiPointer_NiTexture_____vftable_)(void *p, char);

//----- (00682670) --------------------------------------------------------
void *__thiscall NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_scalar_deleting_destructor_(NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> > *this, unsigned int a2)
{
  NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> > *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C67D4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiTexture_____vftable_)(void *p, char);

//----- (006826B0) --------------------------------------------------------
void *__thiscall NiTPointerMap<char_const___NiPointer<NiTexture>>::_vector_deleting_destructor_(NiTPointerMap<char const *,NiPointer<NiTexture> > *this, unsigned int a2)
{
  NiTPointerMap<char const *,NiPointer<NiTexture> > *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTPointerMap<char_const___NiPointer<NiTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C67D4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiTexture_____vftable_)(void *p, char);
// 9C67F4: using guessed type int (__thiscall *NiTPointerMap_char const __NiPointer_NiTexture_____vftable_)(void *p, char);

//----- (00682730) --------------------------------------------------------
void *__thiscall NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_vector_deleting_destructor_(NiTStringPointerMap<NiPointer<NiTexture> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00682760) --------------------------------------------------------
void __thiscall NiDefaultTexturePalette::NiDefaultTexturePalette(NiDefaultTexturePalette *this, bool bSearchGlobalTextureList)
{
  NiDefaultTexturePalette *v2; // esi@1
  void *v3; // eax@1
  unsigned int v4; // ST08_4@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v2->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiDefaultTexturePalette::_vftable_;
  v2->m_kHash.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize = 37;
  v2->m_kHash.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiTexture>>::_vftable_;
  *(_DWORD *)&v2->m_kHash.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v3 = operator new__(0x94u);
  v4 = 4 * v2->m_kHash.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize;
  v2->m_kHash.baseclass_0.baseclass_0.baseclass_0.m_ppkHashTable = (NiTMapItem<char const *,NiPointer<NiTexture> > **)v3;
  memset((char *)v3, 0, v4);
  v2->m_kHash.baseclass_0.m_bCopy = 1;
  v2->m_kHash.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiTexture> >Vtbl *)&NiTStringPointerMap<NiPointer<NiTexture>>::_vftable_;
  v2->m_bSearchGlobalTextureList = bSearchGlobalTextureList;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C67D4: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiTexture_____vftable_)(void *p, char);
// 9C6834: using guessed type int (__thiscall *NiTStringPointerMap_NiPointer_NiTexture_____vftable_)(void *p, char);
// 9C6884: using guessed type int (__thiscall *NiDefaultTexturePalette___vftable_)(void *p, char);

//----- (00682820) --------------------------------------------------------
void __thiscall NiDefaultTexturePalette::SetSearchGlobalTextureList(NiDefaultTexturePalette *this, bool bSearch)
{
  this->m_bSearchGlobalTextureList = bSearch;
}

//----- (00682830) --------------------------------------------------------
void __thiscall NiDefaultTexturePalette::SetTexture(NiDefaultTexturePalette *this, const char *pcPath, NiTexture *pkTex)
{
  NiDefaultTexturePalette *v3; // esi@1
  NiPointer<PgWinBut> v4; // [sp-4h] [bp-Ch]@1
  NiPointer<PgWinBut> *v5; // [sp+4h] [bp-4h]@1

  v3 = this;
  v5 = &v4;
  v4.m_pObject = (PgWinBut *)pkTex;
  if ( pkTex )
    InterlockedIncrement((volatile LONG *)&pkTex->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(
    (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v3->m_kHash,
    (unsigned int)pcPath,
    v4);
}

//----- (00682870) --------------------------------------------------------
NiTexture *__thiscall NiDefaultTexturePalette::GetTexture(NiDefaultTexturePalette *this, const char *pcPath, NiTexture *pkSelf)
{
  NiDefaultTexturePalette *v3; // esi@1
  NiTexture *v4; // esi@2
  DWORD v6; // eax@7
  int v7; // esi@7
  int v8; // eax@10
  const char *v9; // eax@14
  NiTexture *v10; // esi@20
  NiTexture *v11; // edi@26
  NiPointer<NiTexture> spTex; // [sp+0h] [bp-10h]@1
  int v13; // [sp+Ch] [bp-4h]@1

  v3 = this;
  spTex.m_pObject = 0;
  v13 = 0;
  if ( NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kHash,
         pcPath,
         (NiPointer<NiShaderLibrary> *)&spTex) )
  {
    v4 = spTex.m_pObject;
    v13 = -1;
    if ( spTex.m_pObject )
    {
      if ( !InterlockedDecrement((volatile LONG *)&spTex.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return v4;
  }
  if ( !v3->m_bSearchGlobalTextureList )
    goto LABEL_20;
  EnterCriticalSection(&NiTexture::ms_kTextureListCriticalSection);
  v6 = GetCurrentThreadId();
  v7 = NiTexture::ms_pkHead;
  ++dword_B6E180;
  dword_B6E17C = v6;
  if ( !NiTexture::ms_pkHead )
  {
LABEL_17:
    --dword_B6E180;
    if ( !dword_B6E180 )
      dword_B6E17C = 0;
    LeaveCriticalSection(&NiTexture::ms_kTextureListCriticalSection);
LABEL_20:
    v10 = spTex.m_pObject;
    v13 = -1;
    if ( spTex.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spTex.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    return 0;
  }
  while ( 1 )
  {
    if ( (NiTexture *)v7 != pkSelf )
    {
      if ( v7 )
      {
        v8 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7);
        if ( v8 )
        {
          while ( (NiRTTI *)v8 != &NiSourceTexture::m_RTTI )
          {
            v8 = *(_DWORD *)(v8 + 4);
            if ( !v8 )
              goto LABEL_16;
          }
          v9 = *(const char **)(v7 + 52);
          if ( v9 )
          {
            if ( !NiStricmp(v9, pcPath) )
              break;
          }
        }
      }
    }
LABEL_16:
    v7 = *(_DWORD *)(v7 + 48);
    if ( !v7 )
      goto LABEL_17;
  }
  --dword_B6E180;
  if ( !dword_B6E180 )
    dword_B6E17C = 0;
  LeaveCriticalSection(&NiTexture::ms_kTextureListCriticalSection);
  v11 = spTex.m_pObject;
  v13 = -1;
  if ( spTex.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spTex.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  return (NiTexture *)v7;
}
// B6E150: using guessed type int NiTexture__ms_pkHead;
// B6E17C: using guessed type int dword_B6E17C;
// B6E180: using guessed type int dword_B6E180;

//----- (00682A10) --------------------------------------------------------
void *__thiscall NiDefaultTexturePalette::_scalar_deleting_destructor_(NiDefaultTexturePalette *this, unsigned int a2)
{
  NiDefaultTexturePalette *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiDefaultTexturePalette::_vftable_;
  NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiTexture>>_NiPointer<NiTexture>>(&this->m_kHash.baseclass_0);
  v2->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C6884: using guessed type int (__thiscall *NiDefaultTexturePalette___vftable_)(void *p, char);

//----- (00682A90) --------------------------------------------------------
void __thiscall World::TerminatePathFinding(World *this)
{
  NsMakeBlockInfo_Byte *v1; // ecx@1

  v1 = this->m_pkBlockInfo;
  if ( v1 )
    ((void (__stdcall *)(_DWORD))v1->baseclass_0.vfptr->__vecDelDtor)(1);
}

//----- (00682AC0) --------------------------------------------------------
bool __thiscall World::SearchWayPoints(World *this, NiPoint2 pos2Start, NiPoint2 pos2End, int nMaxArryCnt, NiPoint2 *pPos2Arr, int *nResultWayCnt)
{
  return NsPathFinding::SearchWayPoints(&this->kPathFinding, pos2Start, pos2End, nMaxArryCnt, pPos2Arr, nResultWayCnt);
}

//----- (00682AF0) --------------------------------------------------------
int __cdecl DivideFloat(float fOne, float fTwo)
{
  signed int v2; // esi@1
  signed int v3; // eax@1
  int result; // eax@3

  v2 = (signed int)(fOne * 100.0);
  v3 = (signed int)(100.0 * fTwo);
  if ( v2 && v3 )
    result = v2 / v3;
  else
    result = 0;
  return result;
}

//----- (00682B30) --------------------------------------------------------
bool __thiscall World::SearchWayPointsNew(World *this, NiPoint2 pos2Start, NiPoint2 pos2End, int nMaxArryCnt, NiPoint2 *pPos2Arr, int *nResultWayCnt, bool *bIsFindEndPoint)
{
  World *v7; // esi@1
  signed int v8; // ecx@1
  int v9; // eax@2
  signed int v10; // ecx@4
  int v11; // eax@5
  signed int v12; // ecx@7
  int v13; // eax@8
  signed int v14; // ecx@10
  int v15; // eax@11
  int v16; // eax@13
  int v17; // ecx@14
  double v18; // st6@16
  bool result; // al@20

  v7 = this;
  v8 = (signed int)(pos2Start.x * 100.0);
  if ( v8 )
    v9 = v8 / 625;
  else
    v9 = 0;
  v7->kPathFindingNew.StartPos.X = v9;
  v10 = (signed int)(pos2Start.y * 100.0);
  if ( v10 )
    v11 = v10 / 625;
  else
    v11 = 0;
  v7->kPathFindingNew.StartPos.Y = v11;
  v12 = (signed int)(pos2End.x * 100.0);
  if ( v12 )
    v13 = v12 / 625;
  else
    v13 = 0;
  v7->kPathFindingNew.EndPos.X = v13;
  v14 = (signed int)(100.0 * pos2End.y);
  if ( v14 )
    v15 = v14 / 625;
  else
    v15 = 0;
  v7->kPathFindingNew.EndPos.Y = v15;
  CFindWay::FindWay(&v7->kPathFindingNew);
  *nResultWayCnt = v7->kPathFindingNew.NumOfJunc;
  v16 = 0;
  if ( v7->kPathFindingNew.NumOfJunc > 0 )
  {
    v17 = (int)&v7->kPathFindingNew.JuncList[0].Y;
    do
    {
      if ( v16 >= nMaxArryCnt )
        break;
      pPos2Arr[v16].x = (double)*(unsigned int *)(v17 - 4) * 6.25;
      v18 = (double)*(unsigned int *)v17 * 6.25;
      ++v16;
      v17 += 8;
      *((float *)&pPos2Arr[v16] - 1) = v18;
    }
    while ( v16 < v7->kPathFindingNew.NumOfJunc );
  }
  if ( *nResultWayCnt != 1
    || v7->kPathFindingNew.StartPos.X != v7->kPathFindingNew.JuncList[v16].X
    || v7->kPathFindingNew.StartPos.Y != v7->kPathFindingNew.JuncList[v16].Y )
  {
    *bIsFindEndPoint = v7->kPathFindingNew.GoalReached != 0;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00682CA0) --------------------------------------------------------
bool __thiscall World::IsBlock8(World *this, float fX, float fY)
{
  CFindWay *v3; // esi@1
  double v4; // st6@1
  int v5; // ebx@1
  unsigned int v6; // edi@1
  unsigned int _uiY_4; // [sp+4h] [bp-4h]@2
  unsigned int fXa; // [sp+10h] [bp+8h]@5
  unsigned int fYa; // [sp+14h] [bp+Ch]@2

  v3 = &this->kPathFindingNew;
  v4 = fX / 6.25;
  v5 = (signed __int64)v4;
  v6 = (signed __int64)(fY / 6.25);
  return CFindWay::GetBlock(&this->kPathFindingNew, (signed __int64)v4, v6)
      && (fYa = v5 + 1, _uiY_4 = v6 + 1, CFindWay::GetBlock(v3, v5 + 1, v6 + 1))
      && CFindWay::GetBlock(v3, fYa, v6)
      && CFindWay::GetBlock(v3, (signed __int64)v4, _uiY_4)
      && (fXa = v6 - 1, CFindWay::GetBlock(v3, v5 - 1, v6 - 1))
      && CFindWay::GetBlock(v3, v5 - 1, v6)
      && CFindWay::GetBlock(v3, (signed __int64)v4, fXa)
      && CFindWay::GetBlock(v3, fYa, fXa)
      && CFindWay::GetBlock(v3, v5 - 1, _uiY_4);
}

//----- (00682DC0) --------------------------------------------------------
bool __thiscall World::IsBlock(World *this, float fX, float fY)
{
  return CFindWay::GetBlock(&this->kPathFindingNew, fX, fY) != 0;
}

//----- (00682DF0) --------------------------------------------------------
bool __thiscall World::LineIntersect(World *this, float _fStartX, float _fStartY, float *_fEndX, float *_fEndY)
{
  return NsPathFinding::LineIntersect(&this->kPathFinding, _fStartX, _fStartY, _fEndX, _fEndY) != 0;
}

//----- (00682E20) --------------------------------------------------------
bool __thiscall World::TestArea(World *this, const char *szAreaName, float fX, float fY)
{
  AreaInfoData::IAreaData *v4; // eax@1
  bool result; // al@2

  v4 = AreaInfoData::GetData(&this->m_kAreaInfoData, szAreaName);
  if ( v4 )
    result = ((int (__thiscall *)(_DWORD, _DWORD, _DWORD))v4->vfptr->IntersectTest)(v4, LODWORD(fX), LODWORD(fY));
  else
    result = 0;
  return result;
}

//----- (00682E60) --------------------------------------------------------
bool __thiscall World::IsInArea(World *this, const char *szAreaName)
{
  return AreaInfoData::GetData(&this->m_kAreaInfoData, szAreaName) != 0;
}

//----- (00682E80) --------------------------------------------------------
bool __thiscall World::InitPathFinding(World *this)
{
  World *v1; // edi@1
  void *v2; // eax@1
  void *v3; // esi@1
  bool result; // al@2

  v1 = this;
  v2 = operator new(0x30u);
  v3 = v2;
  if ( v2 )
  {
    IMakeBlockInfo::IMakeBlockInfo((IMakeBlockInfo *)v2);
    *(_DWORD *)v3 = &NsMakeBlockInfo_Byte::_vftable_;
    *((_DWORD *)v3 + 9) = 0;
    v1->m_pkBlockInfo = (NsMakeBlockInfo_Byte *)v3;
    result = 1;
  }
  else
  {
    v1->m_pkBlockInfo = 0;
    result = 1;
  }
  return result;
}
// 9C68A4: using guessed type int (__thiscall *NsMakeBlockInfo_Byte___vftable_)(IMakeBlockInfo *this, int _uiMapSize, int _uiSplitCnt, float _fTileLength);

//----- (00682F10) --------------------------------------------------------
bool __thiscall World::LoadPathFindingData(World *this)
{
  NsMakeBlockInfo_Byte *v1; // eax@1
  bool result; // al@2

  v1 = this->m_pkBlockInfo;
  if ( v1 )
  {
    this->kPathFinding.m_pkBlockInfo = v1;
    NsPathFinding::Init(&this->kPathFinding, 0x100u, 0x100u);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00682F40) --------------------------------------------------------
void __thiscall World::SetSubBlockData(World *this, const char *szName, bool bClose)
{
  InstantBlock::SetData(&this->m_kInstantBlock, szName, bClose);
}

//----- (00682F50) --------------------------------------------------------
void __thiscall IMakeBlockInfo::SetBlockData(IMakeBlockInfo *this, unsigned int _uiMapSize, unsigned int _uiSplitCnt, float _fTileLength)
{
  IMakeBlockInfo *v4; // esi@1
  void *v5; // eax@1
  unsigned int v6; // ST00_4@3

  v4 = this;
  this->m_fTileLength = _fTileLength;
  this->m_nSize = _uiMapSize;
  this->m_uiOneSideBlockCnt = _uiSplitCnt * _uiMapSize;
  this->m_bInit = 1;
  this->m_uiSplitCnt = _uiSplitCnt;
  this->m_uiTotalDataSize = _uiSplitCnt * _uiMapSize * _uiSplitCnt * _uiMapSize;
  v5 = this->m_pbOnTable;
  this->m_fSubTileLength = _fTileLength / (double)_uiSplitCnt;
  if ( v5 )
    operator delete__(v5);
  v6 = (v4->m_uiSplitCnt + 1) * (v4->m_uiSplitCnt + 1);
  v4->m_pbOnTable = 0;
  v4->m_pbOnTable = (bool *)operator new__(v6);
}

//----- (00682FC0) --------------------------------------------------------
void __thiscall IMakeBlockInfo::DeleteAllData(IMakeBlockInfo *this)
{
  IMakeBlockInfo *v1; // esi@1
  void *v2; // eax@1

  v1 = this;
  v2 = this->m_pbOnTable;
  this->m_fTileLength = 0.0;
  this->m_fSubTileLength = 0.0;
  this->m_nSize = 0;
  this->m_uiSplitCnt = 0;
  this->m_uiTotalDataSize = 0;
  this->m_uiOneSideBlockCnt = 0;
  this->m_bInit = 0;
  if ( v2 )
    operator delete__(v2);
  v1->m_pbOnTable = 0;
}

//----- (00683000) --------------------------------------------------------
void __thiscall NsMakeBlockInfo_Byte::DeleteAllData(NsMakeBlockInfo_Byte *this)
{
  NsMakeBlockInfo_Byte *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@3

  v1 = this;
  v2 = this->baseclass_0.m_pbOnTable;
  this->baseclass_0.m_fTileLength = 0.0;
  this->baseclass_0.m_fSubTileLength = 0.0;
  this->baseclass_0.m_nSize = 0;
  this->baseclass_0.m_uiSplitCnt = 0;
  this->baseclass_0.m_uiTotalDataSize = 0;
  this->baseclass_0.m_uiOneSideBlockCnt = 0;
  this->baseclass_0.m_bInit = 0;
  if ( v2 )
    operator delete__(v2);
  v3 = v1->m_pBlockInfoByte;
  v1->baseclass_0.m_pbOnTable = 0;
  v1->m_uiRealTotalBlockSize = 0;
  v1->m_uiRealOneSideDataSize = 0;
  if ( v3 )
    operator delete__(v3);
  v1->m_pBlockInfoByte = 0;
}

//----- (00683050) --------------------------------------------------------
void __thiscall NsMakeBlockInfo_Byte::SetBlockData(NsMakeBlockInfo_Byte *this, unsigned int _uiMapSize, unsigned int _uiSplitCnt, float _fTileLength)
{
  NsMakeBlockInfo_Byte *v4; // esi@1
  unsigned int v5; // eax@1
  unsigned int v6; // ecx@1
  int v7; // edx@3
  void *v8; // eax@3
  unsigned int v9; // ST0C_4@5
  void *v10; // eax@5
  unsigned int v11; // ST08_4@5

  v4 = this;
  IMakeBlockInfo::SetBlockData(&this->baseclass_0, _uiMapSize, _uiSplitCnt, _fTileLength);
  v5 = v4->baseclass_0.m_uiOneSideBlockCnt;
  v6 = v4->baseclass_0.m_uiOneSideBlockCnt >> 3;
  v4->m_uiRealOneSideDataSize = v6;
  if ( v5 & 7 )
    v4->m_uiRealOneSideDataSize = v6 + 1;
  v7 = v5 * v4->m_uiRealOneSideDataSize;
  v8 = v4->m_pBlockInfoByte;
  v4->m_uiRealTotalBlockSize = v7;
  if ( v8 )
    operator delete__(v8);
  v9 = v4->m_uiRealTotalBlockSize;
  v4->m_pBlockInfoByte = 0;
  v10 = operator new__(v9);
  v11 = v4->m_uiRealTotalBlockSize;
  v4->m_pBlockInfoByte = (char *)v10;
  memset((char *)v10, 0, v11);
}

//----- (006830C0) --------------------------------------------------------
bool __thiscall NsMakeBlockInfo_Byte::SetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiGridXIndex, unsigned int _uiGridYIndex, bool bOn)
{
  char *v4; // eax@1
  char v5; // dl@1
  bool result; // al@2

  v4 = &this->m_pBlockInfoByte[_uiGridYIndex * this->m_uiRealOneSideDataSize] + (_uiGridXIndex >> 3);
  v5 = 1 << (_uiGridXIndex - 8 * (_uiGridXIndex >> 3));
  if ( bOn )
  {
    *v4 |= v5;
    result = 1;
  }
  else
  {
    *v4 &= ~v5;
    result = 1;
  }
  return result;
}

//----- (00683110) --------------------------------------------------------
bool __thiscall NsMakeBlockInfo_Byte::SetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiTileIndexX, unsigned int _uiSubIndexX, unsigned int _uiTileIndexY, unsigned int _uiSubIndexY, bool bOn)
{
  unsigned int v6; // edx@1
  char *v7; // eax@1
  char v8; // dl@1
  bool result; // al@2

  v6 = _uiSubIndexX + _uiTileIndexX * this->baseclass_0.m_uiSplitCnt;
  v7 = &this->m_pBlockInfoByte[this->m_uiRealOneSideDataSize
                             * (_uiSubIndexY + _uiTileIndexY * this->baseclass_0.m_uiSplitCnt)]
     + (v6 >> 3);
  v8 = 1 << (v6 - 8 * (v6 >> 3));
  if ( bOn )
  {
    *v7 |= v8;
    result = 1;
  }
  else
  {
    *v7 &= ~v8;
    result = 1;
  }
  return result;
}

//----- (00683170) --------------------------------------------------------
bool __thiscall NsMakeBlockInfo_Byte::SetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiIndex, bool bOn)
{
  char *v3; // eax@1
  char v4; // dl@1
  bool result; // al@2

  v3 = &this->m_pBlockInfoByte[_uiIndex >> 3];
  v4 = 1 << (_uiIndex - 8 * (_uiIndex >> 3));
  if ( bOn )
  {
    *v3 |= v4;
    result = 1;
  }
  else
  {
    *v3 &= ~v4;
    result = 1;
  }
  return result;
}

//----- (006831B0) --------------------------------------------------------
bool __thiscall NsMakeBlockInfo_Byte::GetBlock(NsMakeBlockInfo_Byte *this, unsigned int _uiX, unsigned int _uiY)
{
  char *v3; // edx@1
  bool result; // al@2
  unsigned int v5; // eax@3

  v3 = this->m_pBlockInfoByte;
  if ( v3 )
  {
    v5 = this->baseclass_0.m_uiOneSideBlockCnt;
    if ( _uiX >= v5 || _uiY >= v5 )
      result = 0;
    else
      result = ((unsigned __int8)(1 << (_uiX - 8 * (_uiX >> 3))) & (unsigned __int8)*(&v3[_uiY
                                                                                        * this->m_uiRealOneSideDataSize]
                                                                                    + (_uiX >> 3))) != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00683210) --------------------------------------------------------
void *__thiscall NsMakeBlockInfo_Byte::_scalar_deleting_destructor_(NsMakeBlockInfo_Byte *this, unsigned int a2)
{
  NsMakeBlockInfo_Byte *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  v3 = this->m_pBlockInfoByte;
  this->baseclass_0.vfptr = (IMakeBlockInfoVtbl *)&NsMakeBlockInfo_Byte::_vftable_;
  if ( v3 )
    operator delete__(v3);
  v2->m_pBlockInfoByte = 0;
  IMakeBlockInfo::_IMakeBlockInfo(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(&v2->baseclass_0);
  return (void *)v2;
}
// 9C68A4: using guessed type int (__thiscall *NsMakeBlockInfo_Byte___vftable_)(IMakeBlockInfo *this, int _uiMapSize, int _uiSplitCnt, float _fTileLength);

//----- (00683250) --------------------------------------------------------
void __thiscall InstantBlock::SetData(InstantBlock *this, const char *szName, bool bClose)
{
  InstantBlock *v3; // edi@1
  unsigned int v4; // esi@1
  char *v5; // ebx@2
  signed int v6; // ecx@7
  bool v7; // zf@7
  int v8; // eax@11
  int v9; // edi@11
  signed int v10; // esi@11
  int v11; // edi@16
  signed int v12; // eax@16
  unsigned int v13; // edx@18
  int v14; // eax@18
  unsigned int v15; // edx@20
  int v16; // eax@20
  int v17; // eax@22
  unsigned int v18; // edx@23
  int v19; // eax@23
  unsigned int v20; // edx@25
  int v21; // eax@25
  int v22; // eax@27
  unsigned int v23; // edx@28
  int v24; // eax@28
  unsigned int v25; // edx@30
  int v26; // eax@30
  int v27; // eax@32
  unsigned int v28; // edx@33
  int v29; // eax@33
  unsigned int v30; // edx@35
  int v31; // eax@35
  int nWidth; // [sp+8h] [bp-1Ch]@7
  int nRealWidth; // [sp+Ch] [bp-18h]@11
  signed int v34; // [sp+10h] [bp-14h]@16
  int pData; // [sp+14h] [bp-10h]@13
  unsigned int j; // [sp+18h] [bp-Ch]@13
  InstantBlock *v37; // [sp+20h] [bp-4h]@1
  signed int szNamea; // [sp+2Ch] [bp+8h]@16
  int szNameb; // [sp+2Ch] [bp+8h]@22
  int szNamec; // [sp+2Ch] [bp+8h]@27
  int szNamed; // [sp+2Ch] [bp+8h]@32

  v3 = this;
  v4 = 0;
  v37 = this;
  if ( this->m_uiTotalHeadCnt )
  {
    v5 = (char *)this->m_pkSaveHeaderData;
    while ( szName && _strcmpi(v5 + 4, szName) )
    {
      ++v4;
      v5 += 60;
      if ( v4 >= v3->m_uiTotalHeadCnt )
        return;
    }
    v6 = *((_DWORD *)v5 + 11) - *((_DWORD *)v5 + 9) + 1;
    v7 = ((*((_DWORD *)v5 + 12) - *((_DWORD *)v5 + 10) + 1) & 0x80000007) == 0;
    nWidth = *((_DWORD *)v5 + 11) - *((_DWORD *)v5 + 9) + 1;
    if ( ((*((_DWORD *)v5 + 12) - *((_DWORD *)v5 + 10) + 1) & 0x80000007) < 0 )
      v7 = ((((*((_DWORD *)v5 + 12) - *((_DWORD *)v5 + 10) + 1) & 0x80000007) - 1) | 0xFFFFFFF8) == -1;
    if ( !v7 )
    {
      MessageBoxA(0, "Error Door Block Data", "Error", 0);
      return;
    }
    v8 = *((_DWORD *)v5 + 14);
    v9 = v6 / 8;
    v10 = 0;
    nRealWidth = v6 / 8;
    if ( !bClose )
      v8 += *((_DWORD *)v5 + 13);
    j = 0;
    pData = (int)&v37->m_pbyBlockData[v8];
    if ( *((_DWORD *)v5 + 13) > 0u )
    {
LABEL_16:
      v34 = 2;
      v11 = *((_DWORD *)v5 + 10) + j / v9;
      v12 = 1;
      szNamea = 1;
      v10 %= v6;
      while ( 1 )
      {
        if ( (unsigned __int8)v12 & *(_BYTE *)(j + pData) )
        {
          v13 = (unsigned int)(v10 + *((_DWORD *)v5 + 9)) >> 3;
          v14 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v13);
          *(_BYTE *)v14 |= 1 << (v10 + v5[36] - 8 * v13);
        }
        else
        {
          if ( bClose )
            goto LABEL_22;
          v15 = (unsigned int)(v10 + *((_DWORD *)v5 + 9)) >> 3;
          v16 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v15);
          *(_BYTE *)v16 &= ~(1 << (v10 + v5[36] - 8 * v15));
        }
        v12 = szNamea;
LABEL_22:
        v17 = __ROL__(v12, 1);
        szNameb = v17;
        if ( (unsigned __int8)v17 & *(_BYTE *)(j + pData) )
        {
          v18 = (unsigned int)(*((_DWORD *)v5 + 9) + v10 + 1) >> 3;
          v19 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v18);
          *(_BYTE *)v19 |= 1 << (v5[36] + v10 + 1 - 8 * v18);
        }
        else
        {
          if ( bClose )
            goto LABEL_27;
          v20 = (unsigned int)(*((_DWORD *)v5 + 9) + v10 + 1) >> 3;
          v21 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v20);
          *(_BYTE *)v21 &= ~(1 << (v5[36] + v10 + 1 - 8 * v20));
        }
        v17 = szNameb;
LABEL_27:
        v22 = __ROL__(v17, 1);
        szNamec = v22;
        if ( (unsigned __int8)v22 & *(_BYTE *)(j + pData) )
        {
          v23 = (unsigned int)(*((_DWORD *)v5 + 9) + v10 + 2) >> 3;
          v24 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v23);
          *(_BYTE *)v24 |= 1 << (v5[36] + v10 + 2 - 8 * v23);
        }
        else
        {
          if ( bClose )
            goto LABEL_32;
          v25 = (unsigned int)(*((_DWORD *)v5 + 9) + v10 + 2) >> 3;
          v26 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v25);
          *(_BYTE *)v26 &= ~(1 << (v5[36] + v10 + 2 - 8 * v25));
        }
        v22 = szNamec;
LABEL_32:
        v27 = __ROL__(v22, 1);
        szNamed = v27;
        if ( (unsigned __int8)v27 & *(_BYTE *)(j + pData) )
        {
          v28 = (unsigned int)(*((_DWORD *)v5 + 9) + v10 + 3) >> 3;
          v29 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v28);
          *(_BYTE *)v29 |= 1 << (v5[36] + v10 + 3 - 8 * v28);
LABEL_36:
          v27 = szNamed;
          goto LABEL_37;
        }
        if ( !bClose )
        {
          v30 = (unsigned int)(*((_DWORD *)v5 + 9) + v10 + 3) >> 3;
          v31 = (int)(&v37->pFindWay->m_pBlockInfoByte[v11 * v37->pFindWay->m_uiRealOneSideDataSize] + v30);
          *(_BYTE *)v31 &= ~(1 << (v5[36] + v10 + 3 - 8 * v30));
          goto LABEL_36;
        }
LABEL_37:
        v12 = __ROL__(v27, 1);
        v10 += 4;
        v7 = v34-- == 1;
        szNamea = v12;
        if ( v7 )
        {
          ++j;
          if ( j < *((_DWORD *)v5 + 13) )
          {
            v9 = nRealWidth;
            v6 = nWidth;
            goto LABEL_16;
          }
          return;
        }
      }
    }
  }
}

//----- (00683580) --------------------------------------------------------
bool __thiscall World::InitPick(World *this)
{
  World *v1; // esi@1
  void *v2; // eax@1
  Picking *v3; // eax@2

  v1 = this;
  v2 = operator new(0x3Cu);
  if ( v2 )
    Picking::Picking((Picking *)v2);
  else
    v3 = 0;
  v1->m_pkPick = v3;
  return 1;
}

//----- (006835F0) --------------------------------------------------------
void __thiscall World::ClearPick(World *this)
{
  World *v1; // esi@1
  void *v2; // edi@1
  void *v3; // eax@3
  Picking *v4; // eax@4

  v1 = this;
  v2 = this->m_pkPick;
  if ( v2 )
  {
    Picking::_Picking(this->m_pkPick);
    operator delete(v2);
  }
  v1->m_pkPick = 0;
  v3 = operator new(0x3Cu);
  if ( v3 )
    Picking::Picking((Picking *)v3);
  else
    v4 = 0;
  v1->m_pkPick = v4;
}

//----- (00683680) --------------------------------------------------------
void __thiscall HeightmapRayIntersection::Clear(HeightmapRayIntersection *this)
{
  HeightmapRayIntersection *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = this;
  operator delete__(this->m_kCheckedFlagMap.pabMap);
  v2 = v1->m_kIntersection.pkIntersections;
  v1->m_kCheckedFlagMap.pabMap = 0;
  operator delete__(v2);
  v1->m_kIntersection.pkIntersections = 0;
}

//----- (006836B0) --------------------------------------------------------
void __thiscall HeightmapRayIntersection::Init(HeightmapRayIntersection *this, float *pfHeight, float fTileWidth, float fTileHeight, int iTileXCount, int iTileYCount, float w1, float w2)
{
  this->m_kHeightMapInfo.fTileWidth = fTileWidth;
  this->m_kHeightMapInfo.pfHeight = pfHeight;
  this->m_kHeightMapInfo.fTileHeight = fTileHeight;
  this->m_kHeightMapInfo.iTileXCount = iTileXCount;
  this->m_kHeightMapInfo.fWeight1 = w1;
  this->m_kHeightMapInfo.iTileYCount = iTileYCount;
  this->m_kHeightMapInfo.fWeight2 = w2;
  this->m_kHeightMapInfo.iHeightXCount = iTileXCount + 1;
  this->m_kHeightMapInfo.iHeightYCount = iTileYCount + 1;
}

//----- (006836F0) --------------------------------------------------------
Char *__usercall SearchChar<eax>(NiAVObject *pkAVObject<eax>)
{
  NiNode *v1; // esi@1
  const char *v2; // eax@2
  Char *result; // eax@5

  v1 = pkAVObject->m_pkParent;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->baseclass_0.baseclass_0.m_pcName;
      if ( v2 )
      {
        if ( !strcmp(v2, CharResMgr::ms_pcCharRootNodeName) )
          break;
      }
      v1 = v1->baseclass_0.m_pkParent;
      if ( !v1 )
        goto LABEL_5;
    }
    result = CharMgr::GetCharByNodePtr(&g_kCharMgr, v1);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00683760) --------------------------------------------------------
DropItem *__usercall SearchDropItem<eax>(NiAVObject *pkAVObject<eax>)
{
  NiNode *v1; // esi@1
  const char *v2; // eax@2
  DropItem *result; // eax@5

  v1 = pkAVObject->m_pkParent;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->baseclass_0.baseclass_0.m_pcName;
      if ( v2 )
      {
        if ( !strcmp(v2, DropItem::ms_pcRootNodeName) )
          break;
      }
      v1 = v1->baseclass_0.m_pkParent;
      if ( !v1 )
        goto LABEL_5;
    }
    result = DropItemMgr::GetDropItemByNodePtr(&g_kDropItemMgr, v1);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006837D0) --------------------------------------------------------
unsigned __int16 __usercall SearchMiniHouse<ax>(NiAVObject *pkAVObject<eax>)
{
  NiNode *v1; // esi@1
  const char *v2; // eax@2
  unsigned __int16 result; // ax@5

  v1 = pkAVObject->m_pkParent;
  if ( v1 )
  {
    while ( 1 )
    {
      v2 = v1->baseclass_0.baseclass_0.m_pcName;
      if ( v2 )
      {
        if ( !strcmp(v2, (const char *)dword_B67CFC) )
          break;
      }
      v1 = v1->baseclass_0.m_pkParent;
      if ( !v1 )
        goto LABEL_5;
    }
    result = CMiniHouseMgr::GetMiniHouseHandleByNodePtr((CMiniHouseMgr *)&g_kMiniHouseMgr, v1);
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// B67CFC: using guessed type int dword_B67CFC;

//----- (00683840) --------------------------------------------------------
void __thiscall World::TerminatePick(World *this)
{
  World *v1; // edi@1
  void *v2; // esi@1

  v1 = this;
  v2 = this->m_pkPick;
  if ( v2 )
  {
    Picking::_Picking(this->m_pkPick);
    operator delete(v2);
  }
  v1->m_pkPick = 0;
}

//----- (00683870) --------------------------------------------------------
bool __cdecl CulPlaneVsRay(float _fHeight, NiPoint3 _pos3Origin, NiPoint3 _pos3Dir, float *fT_)
{
  double v4; // st4@1
  bool result; // al@2
  double v6; // st6@3
  float pos3N; // [sp+0h] [bp-Ch]@1
  float pos3N_4; // [sp+4h] [bp-8h]@1
  float pos3N_8; // [sp+8h] [bp-4h]@1
  float ta; // [sp+14h] [bp+8h]@3
  float tb; // [sp+14h] [bp+8h]@3
  float t; // [sp+14h] [bp+8h]@3

  pos3N_4 = NiPoint3::UNIT_Z.y;
  LODWORD(pos3N) = (_DWORD)NiPoint3::UNIT_Z.x;
  pos3N_8 = NiPoint3::UNIT_Z.z;
  NiPoint3::Unitize(&_pos3Dir);
  _pos3Dir.z = _pos3Dir.z * pos3N_8 + _pos3Dir.x * pos3N + _pos3Dir.y * pos3N_4;
  v4 = _pos3Dir.z;
  _pos3Dir.z = fabs(_pos3Dir.z);
  if ( _pos3Dir.z < 0.000009999999747378752
    || (v6 = _fHeight,
        ta = pos3N_8 * _pos3Origin.z + pos3N * _pos3Origin.x + pos3N_4 * _pos3Origin.y,
        tb = v6 - ta,
        t = tb / v4,
        t < 0.0) )
  {
    result = 0;
  }
  else
  {
    *fT_ = t;
    result = 1;
  }
  return result;
}

//----- (00683930) --------------------------------------------------------
void __thiscall HeightmapRayIntersection::_HeightmapRayIntersection(HeightmapRayIntersection *this)
{
  HeightmapRayIntersection *v1; // esi@1
  void *v2; // ST00_4@1

  v1 = this;
  operator delete__(this->m_kCheckedFlagMap.pabMap);
  v2 = v1->m_kIntersection.pkIntersections;
  v1->m_kCheckedFlagMap.pabMap = 0;
  operator delete__(v2);
  v1->m_kIntersection.pkIntersections = 0;
}

//----- (00683960) --------------------------------------------------------
bool __thiscall HeightmapRayIntersection::CheckRayIntersectTri(HeightmapRayIntersection *this, NiPoint3 *kOrg, NiPoint3 *kDir, NiPoint3 *kV0, NiPoint3 *kV1, NiPoint3 *kV2, float *ru, float *rv, float *rt)
{
  float v16; // ST18_4@1
  float v17; // ST1C_4@1
  float v18; // ST20_4@1
  bool result; // al@2

  _EAX = kV1;
  __asm { fld     dword ptr [eax] }
  _ECX = kV0;
  __asm { fsub    dword ptr [this] }
  _EDX = kDir;
  __asm
  {
    fstp    [ebp+edge1.x]
    fld     dword ptr [eax+4]
    fsub    dword ptr [this+4]
    fstp    [ebp+edge1.y]
    fld     dword ptr [eax+8]
  }
  _EAX = kV2;
  __asm
  {
    fsub    dword ptr [this+8]
    fstp    [ebp+edge1.z]
    fld     dword ptr [eax]
    fsub    dword ptr [this]
    fstp    [ebp+edge2.x]
    fld     dword ptr [eax+4]
    fsub    dword ptr [this+4]
    fstp    [ebp+edge2.y]
    fld     dword ptr [eax+8]
    fsub    dword ptr [this+8]
  }
  v16 = kDir->x;
  v17 = kDir->y;
  __asm
  {
    fstp    [ebp+edge2.z]
    fld     [ebp+tvec.y]
  }
  v18 = kDir->z;
  __asm
  {
    fld     st
    fld     [ebp+edge2.z]
    fld     st
    fmulp   st(2), st
    fld     [ebp+tvec.z]
    fld     st
    fld     [ebp+edge2.y]
    fld     st
    fmulp   st(2), st
    fxch    st(4)
    fsubrp  st(1), st
    fstp    [ebp+var_24]
    fld     [ebp+edge2.x]
    fld     st
    fmulp   st(2), st
    fld     [ebp+tvec.x]
    fld     st
    fmulp   st(4), st
    fxch    st(2)
    fsubrp  st(3), st
    fxch    st(2)
    fstp    [ebp+var_20]
    fmulp   st(2), st
    fmulp   st(2), st
    fsubrp  st(1), st
    fstp    [ebp+var_1C]
    fld     [ebp+var_24]
    fld     st
    fld     [ebp+edge1.x]
    fld     st
    fmulp   st(2), st
    fld     [ebp+var_20]
    fld     st
    fld     [ebp+edge1.y]
    fld     st
    fmulp   st(2), st
    fxch    st(4)
    faddp   st(1), st
    fld     [ebp+var_1C]
    fld     [ebp+edge1.z]
    fld     st
    fmulp   st(2), st
    fxch    st(2)
    faddp   st(1), st
    fstp    [ebp+det]
    fld     [ebp+det]
    fcomp   ds:__real@3e7ad7f2a0000000
    fnstsw  ax
  }
  if ( !__SETP__(BYTE1(_EAX) & 5, 0) )
  {
    __asm { fstp    st(2) }
    result = 0;
    __asm
    {
      fstp    st(2)
      fstp    st
      fstp    st
      fstp    st
    }
    return result;
  }
  _EAX = kOrg;
  __asm
  {
    fld     dword ptr [eax]
    fsub    dword ptr [this]
    fstp    [ebp+tvec.x]
    fld     dword ptr [eax+4]
    fsub    dword ptr [this+4]
    fstp    [ebp+tvec.y]
    fld     dword ptr [eax+8]
    fsub    dword ptr [this+8]
  }
  _ECX = ru;
  __asm
  {
    fstp    [ebp+tvec.z]
    fld     [ebp+tvec.y]
    fld     st
    fmulp   st(3), st
    fld     [ebp+tvec.x]
    fld     st
    fmulp   st(7), st
    fxch    st(3)
    faddp   st(6), st
    fld     [ebp+tvec.z]
    fmul    [ebp+var_1C]
    faddp   st(6), st
    fxch    st(5)
    fstp    [ebp+fInvDet]
    fld     [ebp+fInvDet]
    fst     dword ptr [this]
    fldz
    fcomp   st(1)
    fnstsw  ax
  }
  if ( BYTE1(_EAX) & 0x41 )
  {
    __asm
    {
      fld     [ebp+det]
      fcompp
      fnstsw  ax
    }
    if ( __SETP__(HIBYTE(_AX) & 5, 0) )
    {
      __asm
      {
        fld     st(4)
        fmul    st, st(1)
        fld     [ebp+tvec.z]
        fmul    st, st(5)
        fsubp   st(1), st
        fstp    [ebp+edge1.x]
        fld     [ebp+tvec.z]
        fmul    st, st(3)
        fld     st(2)
        fmulp   st(2), st
        fsubrp  st(1), st
        fstp    [ebp+edge1.y]
        fmulp   st(2), st
        fmulp   st(2), st
        fsubrp  st(1), st
        fstp    [ebp+edge1.z]
        fld     dword ptr [edx+4]
        fld     [ebp+edge1.y]
        fld     st
        fmulp   st(2), st
        fld     [ebp+edge1.x]
        fld     st
        fmul    dword ptr [edx]
        faddp   st(3), st
        fld     dword ptr [edx+8]
      }
      _EDX = rv;
      __asm
      {
        fld     [ebp+edge1.z]
        fld     st
        fmulp   st(2), st
        fxch    st(4)
        faddp   st(1), st
        fstp    [ebp+fInvDet]
        fld     [ebp+fInvDet]
        fst     dword ptr [edx]
        fldz
        fcom    st(1)
        fnstsw  ax
      }
      if ( !(HIBYTE(_AX) & 0x41) )
        goto LABEL_15;
      __asm
      {
        fld     dword ptr [this]
        faddp   st(2), st
        fld     [ebp+det]
        fcom    st(2)
        fnstsw  ax
        fstp    st(2)
      }
      if ( !__SETP__(HIBYTE(_AX) & 5, 0) )
      {
LABEL_15:
        __asm { fstp    st(1) }
        result = 0;
        __asm
        {
          fstp    st
          fstp    st(1)
          fstp    st
          fstp    st
        }
        return result;
      }
      __asm { fld1 }
      _EAX = rt;
      __asm
      {
        fdivrp  st(2), st
        fxch    st(1)
        fstp    [ebp+fInvDet]
        fld     [ebp+edge2.x]
        fmulp   st(2), st
        fld     [ebp+edge2.y]
        fmulp   st(3), st
        fxch    st(1)
        faddp   st(2), st
        fld     [ebp+edge2.z]
        fmulp   st(3), st
        fxch    st(1)
        faddp   st(2), st
        fxch    st(1)
        fstp    [ebp+det]
        fld     [ebp+det]
        fld     [ebp+fInvDet]
        fld     st
        fmulp   st(2), st
        fxch    st(1)
        fstp    dword ptr [eax]
        fld     dword ptr [this]
        fmul    st, st(1)
        fstp    dword ptr [this]
        fmul    dword ptr [edx]
        fstp    dword ptr [edx]
        fcomp   dword ptr [eax]
        fnstsw  ax
      }
      if ( BYTE1(_EAX) & 0x41 )
        return 1;
    }
    else
    {
      __asm
      {
        fstp    st(2)
        fstp    st(2)
        fstp    st
        fstp    st(1)
        fstp    st
      }
    }
    result = 0;
  }
  else
  {
    __asm { fstp    st(3) }
    result = 0;
    __asm
    {
      fstp    st(3)
      fstp    st(2)
      fstp    st(2)
      fstp    st
      fstp    st
    }
  }
  return result;
}
// 683969: inconsistent fpu stack

//----- (00683BA0) --------------------------------------------------------
bool __thiscall HeightmapRayIntersection::CheckRayIntersectQuad(HeightmapRayIntersection *this, int u, int v)
{
  int eax1; // eax@1
  HeightmapRayIntersection *v4; // esi@1
  int v5; // ecx@1
  bool v6; // zf@1
  int v7; // edx@3
  float *v8; // edi@3
  int v9; // ebx@3
  double v10; // st7@3
  double v11; // st6@4
  int v12; // ecx@4
  double v13; // st5@4
  int v14; // ecx@4
  double v15; // st6@5
  int v16; // ecx@5
  double v17; // st5@5
  int v18; // ecx@5
  bool v19; // al@6
  float v20; // edi@6
  float v21; // ebx@6
  int v22; // eax@7
  HeightmapRayIntersection::Intersection *v23; // eax@8
  int v24; // edx@8
  float v25; // ecx@8
  int v26; // eax@8
  int v27; // eax@8
  int v28; // ecx@8
  int v29; // eax@8
  float v30; // edx@8
  float v31; // ecx@8
  int v32; // eax@11
  int v33; // eax@12
  int v34; // ecx@12
  int v35; // eax@12
  float v36; // edx@12
  float v37; // ecx@12
  int v38; // eax@12
  float v39; // edx@12
  float v40; // ecx@12
  bool result; // al@13
  NiPoint3 v3; // [sp+Ch] [bp-38h]@4
  NiPoint3 v0; // [sp+18h] [bp-2Ch]@4
  NiPoint3 v1; // [sp+24h] [bp-20h]@4
  NiPoint3 v2; // [sp+30h] [bp-14h]@4
  float fu; // [sp+3Ch] [bp-8h]@6
  float fv; // [sp+40h] [bp-4h]@6
  float bIntersect; // [sp+4Ch] [bp+8h]@3
  float bIntersecta; // [sp+4Ch] [bp+8h]@4
  float bIntersectb; // [sp+4Ch] [bp+8h]@4
  signed int bIntersectc; // [sp+4Ch] [bp+8h]@4
  float bIntersectd; // [sp+4Ch] [bp+8h]@4
  float bIntersecte; // [sp+4Ch] [bp+8h]@5
  float bIntersectf; // [sp+4Ch] [bp+8h]@5
  signed int bIntersectg; // [sp+4Ch] [bp+8h]@5
  float bIntersecth; // [sp+4Ch] [bp+8h]@5
  bool bIntersect_3; // [sp+4Fh] [bp+Bh]@6

  eax1 = u;
  v4 = this;
  v5 = v;
  v6 = ((u + v) & 0x80000001) == 0;
  if ( ((u + v) & 0x80000001) < 0 )
    v6 = ((((u + v) & 0x80000001) - 1) | 0xFFFFFFFE) == -1;
  v7 = v4->m_kHeightMapInfo.iHeightXCount;
  v8 = v4->m_kHeightMapInfo.pfHeight;
  v9 = v4->m_kHeightMapInfo.iHeightXCount;
  bIntersect = (double)u * v4->m_kHeightMapInfo.fTileWidth;
  v10 = bIntersect;
  if ( v6 )
  {
    v0.x = bIntersect;
    bIntersecta = (double)v * v4->m_kHeightMapInfo.fTileHeight;
    v11 = bIntersecta;
    v0.y = bIntersecta;
    v = (int)&v8[eax1 + v * v9];
    v12 = v5 + 1;
    v0.z = *(float *)v * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
    bIntersectb = (double)(eax1 + 1) * v4->m_kHeightMapInfo.fTileWidth;
    v13 = bIntersectb;
    bIntersectc = v12;
    v1.x = v13;
    v1.y = v11;
    v14 = (int)&v8[eax1 + v7 * v12];
    v1.z = *(float *)(v + 4) * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
    v2.x = v10;
    bIntersectd = (double)bIntersectc * v4->m_kHeightMapInfo.fTileHeight;
    v2.y = bIntersectd;
    v2.z = *(float *)v14 * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
    v3.x = v13;
    v3.y = bIntersectd;
    v3.z = *(float *)(v14 + 4) * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
  }
  else
  {
    v2.x = bIntersect;
    bIntersecte = (double)v * v4->m_kHeightMapInfo.fTileHeight;
    v15 = bIntersecte;
    v2.y = bIntersecte;
    v = (int)&v8[eax1 + v * v9];
    v16 = v5 + 1;
    v2.z = *(float *)v * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
    bIntersectf = (double)(eax1 + 1) * v4->m_kHeightMapInfo.fTileWidth;
    v17 = bIntersectf;
    bIntersectg = v16;
    v0.x = v17;
    v0.y = v15;
    v18 = (int)&v8[eax1 + v7 * v16];
    v0.z = *(float *)(v + 4) * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
    v3.x = v10;
    bIntersecth = (double)bIntersectg * v4->m_kHeightMapInfo.fTileHeight;
    v3.y = bIntersecth;
    v3.z = *(float *)v18 * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
    v1.x = v17;
    v1.y = bIntersecth;
    v1.z = *(float *)(v18 + 4) * v4->m_kHeightMapInfo.fWeight1 - v4->m_kHeightMapInfo.fWeight2;
  }
  bIntersect_3 = 0;
  v19 = HeightmapRayIntersection::CheckRayIntersectTri(
          v4,
          &v4->m_kRayInfo.kOrg,
          &v4->m_kRayInfo.kDir,
          &v0,
          &v1,
          &v2,
          &fu,
          &fv,
          (float *)&v);
  v20 = v1.z;
  v21 = v1.y;
  if ( v19 )
  {
    v22 = v4->m_kIntersection.iNumofIntersection;
    if ( v4->m_kIntersection.iMaxIntersection > v22 )
    {
      v4->m_kIntersection.pkIntersections[v22].t = *(float *)&v;
      v23 = v4->m_kIntersection.pkIntersections;
      v24 = 6 * v4->m_kIntersection.iNumofIntersection;
      LODWORD(v23[v4->m_kIntersection.iNumofIntersection].v0.x) = (_DWORD)v0.x;
      v25 = v0.z;
      v26 = (int)&v23[8 * v24 / 0x30u].v0;
      *(_DWORD *)(v26 + 4) = LODWORD(v0.y);
      *(_DWORD *)(v26 + 8) = LODWORD(v25);
      v27 = (int)&v4->m_kIntersection.pkIntersections[v4->m_kIntersection.iNumofIntersection].v1;
      *(_DWORD *)v27 = (_DWORD)v1.x;
      v28 = (signed int)v2.x;
      *(_DWORD *)(v27 + 4) = LODWORD(v21);
      *(_DWORD *)(v27 + 8) = LODWORD(v20);
      v29 = (int)&v4->m_kIntersection.pkIntersections[v4->m_kIntersection.iNumofIntersection].v2;
      v30 = v2.y;
      *(_DWORD *)v29 = v28;
      v31 = v2.z;
      *(_DWORD *)(v29 + 4) = LODWORD(v30);
      *(_DWORD *)(v29 + 8) = LODWORD(v31);
      ++v4->m_kIntersection.iNumofIntersection;
    }
    bIntersect_3 = 1;
  }
  if ( HeightmapRayIntersection::CheckRayIntersectTri(
         v4,
         &v4->m_kRayInfo.kOrg,
         &v4->m_kRayInfo.kDir,
         &v1,
         &v3,
         &v2,
         &fu,
         &fv,
         (float *)&v) )
  {
    v32 = v4->m_kIntersection.iNumofIntersection;
    if ( v4->m_kIntersection.iMaxIntersection > v32 )
    {
      v4->m_kIntersection.pkIntersections[v32].t = *(float *)&v;
      v33 = (int)&v4->m_kIntersection.pkIntersections[v4->m_kIntersection.iNumofIntersection].v0;
      *(_DWORD *)v33 = (_DWORD)v1.x;
      v34 = (signed int)v3.x;
      *(_DWORD *)(v33 + 4) = LODWORD(v21);
      *(_DWORD *)(v33 + 8) = LODWORD(v20);
      v35 = (int)&v4->m_kIntersection.pkIntersections[v4->m_kIntersection.iNumofIntersection].v1;
      v36 = v3.y;
      *(_DWORD *)v35 = v34;
      v37 = v3.z;
      *(_DWORD *)(v35 + 4) = LODWORD(v36);
      *(_DWORD *)(v35 + 8) = LODWORD(v37);
      v38 = (int)&v4->m_kIntersection.pkIntersections[v4->m_kIntersection.iNumofIntersection].v2;
      v39 = v2.y;
      *(_DWORD *)v38 = (_DWORD)v2.x;
      v40 = v2.z;
      *(_DWORD *)(v38 + 4) = LODWORD(v39);
      *(_DWORD *)(v38 + 8) = LODWORD(v40);
      ++v4->m_kIntersection.iNumofIntersection;
    }
    result = 1;
  }
  else
  {
    result = bIntersect_3;
  }
  return result;
}

//----- (00683E70) --------------------------------------------------------
bool __thiscall HeightmapRayIntersection::CheckRayIntersectAround(HeightmapRayIntersection *this, int u, int v)
{
  int v3; // edi@1
  HeightmapRayIntersection *v4; // esi@1
  bool bRet_3; // [sp+1Bh] [bp+Fh]@1
  char bRet_3a; // [sp+1Bh] [bp+Fh]@1
  char bRet_3b; // [sp+1Bh] [bp+Fh]@1
  char bRet_3c; // [sp+1Bh] [bp+Fh]@1

  v3 = v;
  v4 = this;
  bRet_3 = HeightmapRayIntersection::CheckRayIntersectQuad(this, u - 1, v);
  bRet_3a = HeightmapRayIntersection::CheckRayIntersectQuad(v4, u, v3 - 1) | bRet_3;
  bRet_3b = HeightmapRayIntersection::CheckRayIntersectQuad(v4, u + 1, v3) | bRet_3a;
  bRet_3c = HeightmapRayIntersection::CheckRayIntersectQuad(v4, u, v3 + 1) | bRet_3b;
  return bRet_3c | HeightmapRayIntersection::CheckRayIntersectQuad(v4, u, v3);
}

//----- (00683ED0) --------------------------------------------------------
bool __thiscall World::GetCameraPickPos(World *this, NiPoint3 kOrigin, NiPoint3 kDir, NiPoint3 *kPos, NiPoint3 *kNormal, float *pfDistance)
{
  World *v6; // esi@1
  float v7; // eax@1
  Picking *v8; // edi@1
  NiAVObject *v9; // ebx@1
  Picking *v10; // ebx@11
  float v11; // eax@11
  NiAVObject *v12; // edi@11
  PgNsTerrain *v13; // eax@21
  Picking *v14; // edi@22
  float v15; // eax@22
  NiAVObject *v16; // ebx@22
  Picking *v17; // ecx@31
  double v18; // st7@32
  double v19; // st7@33
  Picking *v20; // ecx@35
  Picking *v21; // ebx@36
  int v22; // eax@36
  NiAVObject *v23; // edi@36
  int v24; // ebx@36
  bool v25; // bl@44
  bool v26; // zf@46
  bool result; // al@49
  double v28; // st7@50
  double v29; // st7@51
  double v30; // st6@51
  NiPoint3 *v31; // eax@51
  float v32; // edx@52
  float v33; // ecx@52
  float v34; // edx@53
  NiPoint3 *v35; // eax@53
  float v36; // ecx@53
  float v37; // edx@53
  NiPoint3 *v38; // eax@54
  float v39; // ecx@54
  float v40; // edx@54
  float v41; // edx@55
  float v42; // ecx@55
  float v43; // edx@56
  NiPoint3 *v44; // eax@56
  float v45; // ecx@56
  float v46; // edx@56
  NiPoint3 *v47; // eax@57
  float v48; // ecx@57
  float v49; // edx@57
  float v50; // edx@59
  float v51; // ecx@59
  NiPoint3 *v52; // eax@61
  float v53; // ecx@61
  float v54; // edx@61
  NiPoint3 *v55; // [sp-Ch] [bp-70h]@33
  unsigned int v56; // [sp-8h] [bp-6Ch]@33
  NiPoint3 kNormalBuildingScene; // [sp+8h] [bp-5Ch]@10
  NiPoint3 kGroundPos; // [sp+14h] [bp-50h]@10
  NiPoint3 kNormalGroundObject; // [sp+20h] [bp-44h]@20
  NiPoint3 kGroundObjectPos; // [sp+2Ch] [bp-38h]@20
  NiPoint3 kNormalMM; // [sp+38h] [bp-2Ch]@45
  NiPoint3 kGroundWallPos; // [sp+44h] [bp-20h]@45
  float fGroundDistance; // [sp+50h] [bp-14h]@1
  int v64; // [sp+54h] [bp-10h]@36
  float fGroundWallDistance; // [sp+58h] [bp-Ch]@1
  float fGroundObjectDistance; // [sp+5Ch] [bp-8h]@11
  char bGroundPick; // [sp+62h] [bp-2h]@1
  bool bGroundObjectPick; // [sp+63h] [bp-1h]@19

  fGroundDistance = 3.4028235e38;
  v6 = this;
  this->m_pkPick->baseclass_0.m_bReturnNormal = 1;
  LODWORD(v7) = this->m_spGroundObject.m_pObject;
  v8 = this->m_pkPick;
  v9 = v8->baseclass_0.m_spRoot.m_pObject;
  bGroundPick = 0;
  fGroundWallDistance = v7;
  if ( v9 != LODWORD(v7) )
  {
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v7 = fGroundWallDistance;
    }
    v8->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)LODWORD(v7);
    if ( LODWORD(v7) )
      InterlockedIncrement((volatile LONG *)(LODWORD(v7) + 4));
  }
  if ( Picking::PickCharacter(v6->m_pkPick, &kOrigin, &kDir) )
  {
    fGroundDistance = Picking::GetDistance(v6->m_pkPick, 0);
    Picking::GetIntersection(v6->m_pkPick, &kGroundPos, 0);
    Picking::GetNormal(v6->m_pkPick, &kNormalBuildingScene, 0);
    bGroundPick = 1;
  }
  v10 = v6->m_pkPick;
  LODWORD(v11) = v6->m_spGroundObjectCollidee.m_pObject;
  fGroundObjectDistance = 3.4028235e38;
  v12 = v10->baseclass_0.m_spRoot.m_pObject;
  fGroundWallDistance = v11;
  if ( v12 != LODWORD(v11) )
  {
    if ( v12 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      v11 = fGroundWallDistance;
    }
    v10->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)LODWORD(v11);
    if ( LODWORD(v11) )
      InterlockedIncrement((volatile LONG *)(LODWORD(v11) + 4));
  }
  bGroundObjectPick = Picking::PickGround(v6->m_pkPick, &kOrigin, &kDir);
  if ( bGroundObjectPick )
  {
    Picking::GetIntersection(v6->m_pkPick, &kGroundObjectPos, 0);
    fGroundObjectDistance = Picking::GetDistance(v6->m_pkPick, 0);
    Picking::GetNormal(v6->m_pkPick, &kNormalGroundObject, 0);
  }
  v13 = v6->m_pkTerrain;
  if ( v13 )
  {
    v14 = v6->m_pkPick;
    LODWORD(v15) = v13->m_spScene.m_pObject;
    v16 = v14->baseclass_0.m_spRoot.m_pObject;
    fGroundWallDistance = v15;
    if ( v16 != LODWORD(v15) )
    {
      if ( v16 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v16 )
          v16->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
        v15 = fGroundWallDistance;
      }
      v14->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)LODWORD(v15);
      if ( LODWORD(v15) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v15) + 4));
    }
    if ( Picking::PickGround(v6->m_pkPick, &kOrigin, &kDir) )
    {
      v17 = v6->m_pkPick;
      if ( bGroundObjectPick )
      {
        v18 = Picking::GetDistance(v17, 0);
        if ( fGroundObjectDistance <= v18 )
          goto LABEL_36;
        Picking::GetIntersection(v6->m_pkPick, &kGroundObjectPos, 0);
        v19 = Picking::GetDistance(v6->m_pkPick, 0);
        v56 = 0;
        v55 = &kNormalGroundObject;
      }
      else
      {
        bGroundObjectPick = 1;
        Picking::GetIntersection(v17, &kGroundObjectPos, 0);
        v19 = Picking::GetDistance(v6->m_pkPick, 0);
        v56 = 0;
        v55 = &kNormalGroundObject;
      }
      v20 = v6->m_pkPick;
      fGroundObjectDistance = v19;
      Picking::GetNormal(v20, v55, v56);
    }
  }
LABEL_36:
  v21 = v6->m_pkPick;
  v22 = (int)v6->m_spUseCameraCollidee.m_pObject;
  fGroundWallDistance = 3.4028235e38;
  v23 = v21->baseclass_0.m_spRoot.m_pObject;
  v24 = (int)&v21->baseclass_0.m_spRoot;
  v64 = v22;
  if ( v23 != (NiAVObject *)v22 )
  {
    if ( v23 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v23 )
        v23->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
      v22 = v64;
    }
    *(_DWORD *)v24 = v22;
    if ( v22 )
      InterlockedIncrement((volatile LONG *)(v22 + 4));
  }
  v25 = Picking::PickGround(v6->m_pkPick, &kOrigin, &kDir);
  if ( v25 )
  {
    Picking::GetIntersection(v6->m_pkPick, &kGroundWallPos, 0);
    fGroundWallDistance = Picking::GetDistance(v6->m_pkPick, 0);
    Picking::GetNormal(v6->m_pkPick, &kNormalMM, 0);
  }
  v26 = bGroundPick == 0;
  v6->m_pkPick->baseclass_0.m_bReturnNormal = 0;
  if ( v26 && !bGroundObjectPick && !v25 )
    return 0;
  v28 = fGroundDistance;
  if ( fGroundObjectDistance >= (double)fGroundDistance )
  {
    v30 = fGroundWallDistance;
    v31 = kPos;
    if ( fGroundWallDistance < v28 )
    {
LABEL_52:
      v32 = kGroundWallPos.y;
      LODWORD(v31->x) = (_DWORD)kGroundWallPos.x;
      v33 = kGroundWallPos.z;
      v31->y = v32;
      v31->z = v33;
      if ( pfDistance )
      {
        LODWORD(v34) = (_DWORD)kNormalMM.x;
        *pfDistance = v30;
        v35 = kNormal;
        v36 = kNormalMM.y;
        kNormal->x = v34;
        v37 = kNormalMM.z;
        v35->y = v36;
        v35->z = v37;
        result = 1;
      }
      else
      {
        v38 = kNormal;
        v39 = kNormalMM.y;
        LODWORD(kNormal->x) = (_DWORD)kNormalMM.x;
        v40 = kNormalMM.z;
        v38->y = v39;
        v38->z = v40;
        result = 1;
      }
      return result;
    }
    v50 = kGroundPos.y;
    LODWORD(kPos->x) = (_DWORD)kGroundPos.x;
    v51 = kGroundPos.z;
    v31->y = v50;
    v31->z = v51;
    if ( pfDistance )
      *pfDistance = v28;
    v52 = kNormal;
    v53 = kNormalBuildingScene.y;
    LODWORD(kNormal->x) = (_DWORD)kNormalBuildingScene.x;
    v54 = kNormalBuildingScene.z;
    v52->y = v53;
    v52->z = v54;
    result = 1;
  }
  else
  {
    v29 = fGroundObjectDistance;
    v30 = fGroundWallDistance;
    v31 = kPos;
    if ( fGroundWallDistance < (double)fGroundObjectDistance )
      goto LABEL_52;
    v41 = kGroundObjectPos.y;
    LODWORD(kPos->x) = (_DWORD)kGroundObjectPos.x;
    v42 = kGroundObjectPos.z;
    v31->y = v41;
    v31->z = v42;
    if ( pfDistance )
    {
      LODWORD(v43) = (_DWORD)kNormalGroundObject.x;
      *pfDistance = v29;
      v44 = kNormal;
      v45 = kNormalGroundObject.y;
      kNormal->x = v43;
      v46 = kNormalGroundObject.z;
      v44->y = v45;
      v44->z = v46;
      result = 1;
    }
    else
    {
      v47 = kNormal;
      v48 = kNormalGroundObject.y;
      LODWORD(kNormal->x) = (_DWORD)kNormalGroundObject.x;
      v49 = kNormalGroundObject.z;
      v47->y = v48;
      v47->z = v49;
      result = 1;
    }
  }
  return result;
}

//----- (00684300) --------------------------------------------------------
bool __thiscall World::GetGroundPos(World *this, NiPoint3 kOrigin, NiPoint3 kDir, NiPoint3 *kTargetPos, float *pfDistance)
{
  World *v5; // esi@1
  int v6; // eax@1
  Picking *v7; // edi@1
  NiAVObject *v8; // ebx@1
  Picking *v9; // ebx@11
  int v10; // eax@11
  NiAVObject *v11; // edi@11
  int v12; // ebx@11
  bool v13; // bl@19
  NiPoint3 *v14; // eax@23
  float v15; // edx@24
  float v16; // ecx@24
  bool result; // al@25
  float v18; // ecx@26
  float v19; // edx@26
  NiPoint3 *v20; // eax@29
  float v21; // edx@29
  float v22; // ecx@29
  NiPoint3 kGroundObjectPos; // [sp+Ch] [bp-24h]@20
  NiPoint3 kGroundPos; // [sp+18h] [bp-18h]@10
  float fGroundDistance; // [sp+24h] [bp-Ch]@10
  int v26; // [sp+28h] [bp-8h]@1
  bool bGroundPick; // [sp+2Fh] [bp-1h]@9

  v5 = this;
  v6 = (int)this->m_spGroundScene.m_pObject;
  v7 = this->m_pkPick;
  v8 = v7->baseclass_0.m_spRoot.m_pObject;
  v26 = v6;
  if ( v8 != (NiAVObject *)v6 )
  {
    if ( v8 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      v6 = v26;
    }
    v7->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)(v6 + 4));
  }
  bGroundPick = Picking::PickGround(v5->m_pkPick, &kOrigin, &kDir);
  if ( bGroundPick )
  {
    Picking::GetIntersection(v5->m_pkPick, &kGroundPos, 0);
    fGroundDistance = Picking::GetDistance(v5->m_pkPick, 0);
  }
  v9 = v5->m_pkPick;
  v10 = (int)v5->m_spGroundObjectCollidee.m_pObject;
  v11 = v9->baseclass_0.m_spRoot.m_pObject;
  v12 = (int)&v9->baseclass_0.m_spRoot;
  v26 = v10;
  if ( v11 != (NiAVObject *)v10 )
  {
    if ( v11 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      v10 = v26;
    }
    *(_DWORD *)v12 = v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)(v10 + 4));
  }
  v13 = Picking::PickGround(v5->m_pkPick, &kOrigin, &kDir);
  if ( v13 )
  {
    Picking::GetIntersection(v5->m_pkPick, &kGroundObjectPos, 0);
    kDir.z = Picking::GetDistance(v5->m_pkPick, 0);
  }
  if ( bGroundPick )
  {
    if ( v13 )
    {
      v14 = kTargetPos;
      if ( kGroundObjectPos.z < (double)kGroundPos.z )
      {
        v15 = kGroundPos.y;
        LODWORD(kTargetPos->x) = (_DWORD)kGroundPos.x;
        v16 = kGroundPos.z;
        v14->y = v15;
        v14->z = v16;
        if ( pfDistance )
        {
          *pfDistance = fGroundDistance;
          return 1;
        }
        return 1;
      }
LABEL_26:
      v18 = kGroundObjectPos.y;
      LODWORD(v14->x) = (_DWORD)kGroundObjectPos.x;
      v19 = kGroundObjectPos.z;
      v14->y = v18;
      v14->z = v19;
      if ( pfDistance )
        *pfDistance = kDir.z;
      return 1;
    }
    v20 = kTargetPos;
    v21 = kGroundPos.y;
    LODWORD(kTargetPos->x) = (_DWORD)kGroundPos.x;
    v22 = kGroundPos.z;
    v20->y = v21;
    v20->z = v22;
    if ( pfDistance )
      *pfDistance = fGroundDistance;
    result = 1;
  }
  else
  {
    if ( v13 )
    {
      v14 = kTargetPos;
      goto LABEL_26;
    }
    result = 0;
  }
  return result;
}

//----- (006844D0) --------------------------------------------------------
bool __thiscall World::GetGroundPos(World *this, float fXPos, float fYPos, NiPoint3 *kPos, float *pfDistance)
{
  _BYTE v5[12]; // ST0C_12@1
  _BYTE v6[12]; // ST00_12@1

  *(_DWORD *)v5 = (_DWORD)World::ms_kDownDir.x;
  *(_QWORD *)&v5[4] = *(_QWORD *)&World::ms_kDownDir.y;
  *(_QWORD *)v6 = __PAIR__(LODWORD(fYPos), LODWORD(fXPos));
  *(float *)&v6[8] = this->m_fMaxHeight;
  return World::GetGroundPos(this, *(NiPoint3 *)v6, *(NiPoint3 *)v5, kPos, pfDistance);
}

//----- (00684540) --------------------------------------------------------
bool __thiscall World::GetAdvGroundPos(World *this, float fX, float fY, NiPoint3 *kTargetPos)
{
  World *v4; // ebx@1
  PgNsTerrain *v5; // ecx@1
  bool v7; // al@4
  Picking *v8; // esi@4
  NiAVObject *v9; // edi@4
  int v10; // eax@4
  Picking *v11; // ecx@12
  bool v12; // al@12
  NiPoint3 *v13; // eax@16
  float v14; // edx@17
  float v15; // ecx@17
  float v16; // ecx@18
  float v17; // edx@18
  float v18; // edx@19
  float v19; // ecx@19
  NiPoint3 kOrigin; // [sp+1Ch] [bp-2Ch]@12
  NiPoint3 kGroundObjectPos; // [sp+28h] [bp-20h]@13
  NiPoint3 kTerrianPos; // [sp+34h] [bp-14h]@4
  int v23; // [sp+40h] [bp-8h]@4
  bool bTerrianPick; // [sp+47h] [bp-1h]@4
  bool bGroundObjectPick_3; // [sp+53h] [bp+Bh]@12

  v4 = this;
  v5 = this->m_pkTerrain;
  if ( !v5 )
  {
    kTargetPos->x = fX;
    kTargetPos->y = fY;
    return 0;
  }
  v7 = PgNsTerrain::GetPositionDirectFind(v5, fX, fY, &kTerrianPos, 0);
  v8 = v4->m_pkPick;
  v9 = v8->baseclass_0.m_spRoot.m_pObject;
  bTerrianPick = v7;
  v10 = (int)v4->m_spGroundObjectCollidee.m_pObject;
  v23 = v10;
  if ( v9 != (NiAVObject *)v10 )
  {
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v10 = v23;
    }
    v8->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)(v10 + 4));
  }
  kOrigin.x = fX;
  v11 = v4->m_pkPick;
  kOrigin.y = fY;
  kOrigin.z = v4->m_fMaxHeight;
  v12 = Picking::PickGround(v11, &kOrigin, &World::ms_kDownDir);
  bGroundObjectPick_3 = v12;
  if ( v12 )
  {
    Picking::GetIntersection(v4->m_pkPick, &kGroundObjectPos, 0);
    v12 = bGroundObjectPick_3;
  }
  if ( !bTerrianPick )
  {
    if ( !v12 )
      return 0;
    v13 = kTargetPos;
LABEL_18:
    v16 = kGroundObjectPos.y;
    LODWORD(v13->x) = (_DWORD)kGroundObjectPos.x;
    v17 = kGroundObjectPos.z;
    v13->y = v16;
    v13->z = v17;
    return 1;
  }
  if ( v12 )
  {
    v13 = kTargetPos;
    if ( kGroundObjectPos.z < (double)kTerrianPos.z )
    {
      v14 = kTerrianPos.y;
      LODWORD(kTargetPos->x) = (_DWORD)kTerrianPos.x;
      v15 = kTerrianPos.z;
      kTargetPos->y = v14;
      kTargetPos->z = v15;
      return 1;
    }
    goto LABEL_18;
  }
  v18 = kTerrianPos.y;
  LODWORD(kTargetPos->x) = (_DWORD)kTerrianPos.x;
  v19 = kTerrianPos.z;
  kTargetPos->y = v18;
  kTargetPos->z = v19;
  return 1;
}

//----- (006846A0) --------------------------------------------------------
void __thiscall World::GetCharRegenPos(World *this, NiPoint3 *kRegenPos)
{
  World *v2; // esi@1
  MapInfo *v3; // eax@1
  double v4; // st7@2
  float v5; // ST00_4@4
  float v6; // [sp+4h] [bp-10h]@2

  v2 = this;
  v3 = MapInfoTab::GetByMapName(&this->m_kMapName);
  if ( v3 )
  {
    v6 = (double)v3->RegenY;
    v4 = (double)v3->RegenX;
  }
  else
  {
    v4 = 0.0;
    v6 = 0.0;
  }
  v5 = v4;
  if ( !World::GetAdvGroundPos(v2, v5, v6, kRegenPos) )
  {
    LODWORD(kRegenPos->x) = (_DWORD)NiPoint3::ZERO.x;
    kRegenPos->y = NiPoint3::ZERO.y;
    kRegenPos->z = NiPoint3::ZERO.z;
  }
}

//----- (00684720) --------------------------------------------------------
bool __thiscall World::PickChar(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, float *rfDistance)
{
  World *v5; // esi@1
  NiNode *v6; // eax@1
  Picking *v7; // edi@1
  NiAVObject *v8; // ebx@1
  unsigned int v9; // ebx@10
  unsigned int v10; // edi@10
  NiAVObject *v11; // eax@11
  Char *v12; // eax@12
  Char *v13; // ebx@12
  Picking *v14; // ebx@17
  NiNode *v15; // eax@17
  NiAVObject *v16; // edi@17
  unsigned int v17; // ebx@26
  unsigned int v18; // edi@26
  NiAVObject *v19; // eax@27
  Char *v20; // eax@28
  Char *v21; // ebx@28
  bool result; // al@33
  NiNode *iTotal; // [sp+8h] [bp-10h]@1
  unsigned int iTotala; // [sp+8h] [bp-10h]@10
  NiNode *iTotalb; // [sp+8h] [bp-10h]@17
  float fNormalCharPickedDistance; // [sp+Ch] [bp-Ch]@1
  Char *pkNormalCharPicked; // [sp+10h] [bp-8h]@1
  bool bNormalCharPicked; // [sp+17h] [bp-1h]@9
  unsigned int fAbnormalCharPickedDistance; // [sp+24h] [bp+Ch]@26
  float fAbnormalCharPickedDistancea; // [sp+24h] [bp+Ch]@37

  fNormalCharPickedDistance = 9.9999998e12;
  v5 = this;
  v6 = this->m_spCharScene.m_pObject;
  v7 = this->m_pkPick;
  v8 = v7->baseclass_0.m_spRoot.m_pObject;
  pkNormalCharPicked = 0;
  iTotal = v6;
  if ( (NiNode *)v8 != v6 )
  {
    if ( v8 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      v6 = iTotal;
    }
    v7->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  bNormalCharPicked = Picking::PickCharacter(v5->m_pkPick, kOrigin, kDir);
  if ( !bNormalCharPicked )
    goto LABEL_17;
  v9 = v5->m_pkPick->baseclass_0.m_pickResults.m_uiESize;
  v10 = 0;
  iTotala = v9;
  if ( !v9 )
    goto LABEL_16;
  while ( 1 )
  {
    v11 = Picking::GetAVObject(v5->m_pkPick, v10);
    if ( v11 )
      break;
LABEL_15:
    ++v10;
    if ( v10 >= v9 )
      goto LABEL_16;
  }
  v12 = SearchChar(v11);
  v13 = v12;
  if ( !v12 || v12 == g_pkMainChar )
  {
    v9 = iTotala;
    goto LABEL_15;
  }
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v12->baseclass_0.vfptr[1].Affect)(v12)
    || (unsigned __int8)((int (__thiscall *)(_DWORD))v13->baseclass_0.vfptr[1].Deaffect)(v13) )
  {
    fNormalCharPickedDistance = Picking::GetDistance(v5->m_pkPick, v10);
    pkNormalCharPicked = v13;
    goto LABEL_17;
  }
LABEL_16:
  bNormalCharPicked = 0;
  pkNormalCharPicked = 0;
LABEL_17:
  v14 = v5->m_pkPick;
  v15 = v5->m_spAbstateCharScene.m_pObject;
  v16 = v14->baseclass_0.m_spRoot.m_pObject;
  iTotalb = v15;
  if ( (NiNode *)v16 != v15 )
  {
    if ( v16 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v16 )
        v16->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
      v15 = iTotalb;
    }
    v14->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v15;
    if ( v15 )
      InterlockedIncrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !Picking::PickCharacter(v5->m_pkPick, kOrigin, kDir)
    || (v17 = v5->m_pkPick->baseclass_0.m_pickResults.m_uiESize, v18 = 0, (fAbnormalCharPickedDistance = v17) == 0) )
  {
LABEL_32:
    if ( bNormalCharPicked )
    {
      *rfDistance = fNormalCharPickedDistance;
      *pkChar = pkNormalCharPicked;
      result = 1;
    }
    else
    {
      *pkChar = 0;
      result = 0;
    }
    return result;
  }
  while ( 2 )
  {
    v19 = Picking::GetAVObject(v5->m_pkPick, v18);
    if ( !v19 )
    {
LABEL_31:
      ++v18;
      if ( v18 >= v17 )
        goto LABEL_32;
      continue;
    }
    break;
  }
  v20 = SearchChar(v19);
  v21 = v20;
  if ( !v20 || v20 == g_pkMainChar )
  {
    v17 = fAbnormalCharPickedDistance;
    goto LABEL_31;
  }
  fAbnormalCharPickedDistancea = Picking::GetDistance(v5->m_pkPick, v18);
  if ( bNormalCharPicked )
  {
    if ( fAbnormalCharPickedDistancea <= (double)fNormalCharPickedDistance )
    {
      *rfDistance = fAbnormalCharPickedDistancea;
      *pkChar = v21;
      result = 1;
    }
    else
    {
      *rfDistance = fNormalCharPickedDistance;
      *pkChar = pkNormalCharPicked;
      result = 1;
    }
  }
  else
  {
    *rfDistance = fAbnormalCharPickedDistancea;
    *pkChar = v21;
    result = 1;
  }
  return result;
}

//----- (00684960) --------------------------------------------------------
unsigned int __thiscall World::PickedObjConditionCheck(World *this)
{
  World *v1; // ebx@1
  Picking *v2; // ecx@1
  unsigned int result; // eax@1
  unsigned int v4; // edi@1
  NiAVObject *v5; // eax@2
  NiAVObject *v6; // esi@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // ecx@3
  mhObject *v8; // eax@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@10
  unsigned int uiReturn; // [sp+8h] [bp-Ch]@1
  char b; // [sp+13h] [bp-1h]@1

  v1 = this;
  v2 = this->m_pkPick;
  result = 0;
  v4 = 0;
  uiReturn = 0;
  b = 0;
  if ( v2->baseclass_0.m_pickResults.m_uiESize )
  {
    while ( 1 )
    {
      v5 = Picking::GetAVObject(v2, v4);
      v6 = v5;
      if ( !v5 )
        return uiReturn;
      v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhRoomFloorName_1;
      if ( mhRoomFloorName_1.baseclass_0._Myres < 0x10 )
        v7 = &mhRoomFloorName_1;
      if ( _mbsncmp(v5->baseclass_0.m_pcName, v7->baseclass_0.___u0.baseclass_0.dummy, 4u) )
      {
        v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhRoomWallName_1;
        if ( mhRoomWallName_1.baseclass_0._Myres < 0x10 )
          v9 = &mhRoomWallName_1;
        if ( _mbsncmp(v6->baseclass_0.m_pcName, v9->baseclass_0.___u0.baseclass_0.dummy, 4u) )
          goto LABEL_14;
      }
      else
      {
        if ( b
          || (v8 = MiniHouseIndoor::GetObjectA(&v1->m_MiniHouseIndoorMode, v1->m_MiniHouseIndoorMode.m_PickedObj)) == 0
          || (unsigned __int8)*(_WORD *)&v8->m_BindType.m_byBindType[0] == 1 )
          goto LABEL_14;
        b = 1;
      }
      uiReturn = v4;
LABEL_14:
      v2 = v1->m_pkPick;
      ++v4;
      if ( v4 >= v2->baseclass_0.m_pickResults.m_uiESize )
        return uiReturn;
    }
  }
  return result;
}

//----- (00684A30) --------------------------------------------------------
NiAVObject *__thiscall World::GetCandidatePickObj(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, NiPoint3 *kGroundPos)
{
  World *v4; // ebx@1
  NiNode *v5; // edi@1
  int v6; // eax@1
  int v7; // esi@1
  NiNode *v8; // esi@8
  NiAVObject *v9; // eax@13
  NiPointer<NiNode> result; // [sp+0h] [bp-14h]@1
  int v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v4 = this;
  v5 = MiniHouseIndoor::GetObjRootScene(&this->m_MiniHouseIndoorMode, &result)->m_pObject;
  v6 = (int)v4->m_pkPick;
  v7 = *(_DWORD *)(v6 + 24);
  v12 = 0;
  v11 = v6;
  if ( (NiNode *)v7 != v5 )
  {
    if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
    *(_DWORD *)(v11 + 24) = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v8 = result.m_pObject;
  v12 = -1;
  if ( result.m_pObject
    && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  if ( Picking::PickCharacter(v4->m_pkPick, kOrigin, kDir) )
    v9 = Picking::GetAVObject(v4->m_pkPick, 0);
  else
    v9 = 0;
  return v9;
}

//----- (00684B30) --------------------------------------------------------
World::PickEnum __thiscall World::PickWithoutGround(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, DropItem **pkDropItem, unsigned __int16 *hMiniHouse)
{
  Char **v6; // eax@1
  World *v7; // esi@1
  DropItem **v8; // ecx@1
  bool v9; // al@1
  Picking *v10; // edi@1
  NiAVObject *v11; // ebx@1
  Char **v12; // eax@1
  Picking *v13; // edi@11
  int v14; // eax@11
  NiAVObject *v15; // ebx@11
  bool v16; // bl@19
  NiAVObject *v17; // ecx@20
  NiPoint3 **v18; // eax@22
  double v19; // st5@24
  NiPoint3 **v20; // eax@24
  double v21; // st4@26
  double v22; // st3@28
  double v23; // st5@28
  double v25; // st6@33
  NiAVObject *pkItemObject; // [sp+8h] [bp-18h]@1
  NiPoint3 *fCharDistance; // [sp+Ch] [bp-14h]@1
  int v28; // [sp+10h] [bp-10h]@11
  float fDropItemDistance; // [sp+14h] [bp-Ch]@1
  float fMHDistance; // [sp+18h] [bp-8h]@11
  bool bCharPick; // [sp+1Fh] [bp-1h]@1

  v6 = pkChar;
  fDropItemDistance = 3.4028235e38;
  *(float *)&fCharDistance = 3.4028235e38;
  v7 = this;
  v8 = pkDropItem;
  *pkChar = 0;
  *v8 = 0;
  *hMiniHouse = -1;
  pkItemObject = 0;
  v9 = World::PickChar(v7, kOrigin, kDir, v6, (float *)&fCharDistance);
  v10 = v7->m_pkPick;
  v11 = v10->baseclass_0.m_spRoot.m_pObject;
  bCharPick = v9;
  v12 = (Char **)v7->m_spDropItemScene.m_pObject;
  pkChar = v12;
  if ( (Char **)v11 != v12 )
  {
    if ( v11 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      v12 = pkChar;
    }
    v10->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v12;
    if ( v12 )
      InterlockedIncrement((volatile LONG *)v12 + 1);
  }
  BYTE3(pkChar) = Picking::PickCharacter(v7->m_pkPick, kOrigin, kDir);
  if ( BYTE3(pkChar) )
  {
    fDropItemDistance = Picking::GetDistance(v7->m_pkPick, 0);
    pkItemObject = Picking::GetAVObject(v7->m_pkPick, 0);
  }
  v13 = v7->m_pkPick;
  v14 = (int)v7->m_spMinihouseScene.m_pObject;
  fMHDistance = 3.4028235e38;
  v15 = v13->baseclass_0.m_spRoot.m_pObject;
  v28 = v14;
  if ( v15 != (NiAVObject *)v14 )
  {
    if ( v15 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v15 )
        v15->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      v14 = v28;
    }
    v13->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)(v14 + 4));
  }
  v16 = Picking::PickCharacter(v7->m_pkPick, kOrigin, kDir);
  if ( v16 )
  {
    fMHDistance = Picking::GetDistance(v7->m_pkPick, 0);
    v17 = Picking::GetAVObject(v7->m_pkPick, 0);
  }
  else
  {
    v17 = 0;
  }
  kDir = fCharDistance;
  v18 = (NiPoint3 **)&fMHDistance;
  if ( fMHDistance >= (double)*(float *)&fCharDistance )
    v18 = &kDir;
  *(float *)&kDir = *(float *)v18;
  v19 = fDropItemDistance;
  v20 = (NiPoint3 **)&fDropItemDistance;
  if ( *(float *)&kDir <= (double)fDropItemDistance )
    v20 = &kDir;
  *(float *)&kDir = *(float *)v20;
  v21 = *(float *)&kDir;
  if ( BYTE3(pkChar) && v19 - 40.0 < v21 )
  {
    v22 = v19 + 40.0;
    v23 = 40.0;
    if ( v22 > v21 )
    {
      *pkDropItem = SearchDropItem(pkItemObject);
      return 3;
    }
  }
  else
  {
    v23 = 40.0;
  }
  if ( v16 && fMHDistance - v23 < v21 )
  {
    v25 = *(float *)&kDir;
    if ( v23 + fMHDistance > *(float *)&kDir )
    {
      *hMiniHouse = SearchMiniHouse(v17);
      return 4;
    }
  }
  else
  {
    v25 = *(float *)&kDir;
  }
  return bCharPick && v25 == *(float *)&fCharDistance;
}

//----- (00684DA0) --------------------------------------------------------
void __thiscall HeightmapRayIntersection::HeightmapRayIntersection(HeightmapRayIntersection *this)
{
  this->m_kCheckedFlagMap.pabMap = 0;
  this->m_kIntersection.pkIntersections = 0;
  this->m_kIntersection.iNumofIntersection = 0;
}

//----- (00684DB0) --------------------------------------------------------
bool __thiscall HeightmapRayIntersection::CheckRayIntersect(HeightmapRayIntersection *this, NiPoint3 *kStart, NiPoint3 *kEnd, NiPoint3 *kIntersect, NiPoint3 *kNormal, float *rfDist, int *nTileGap)
{
  HeightmapRayIntersection *v7; // esi@1
  void *v8; // ST00_4@1
  NiPoint3 *v9; // ebx@1
  NiPoint3 *v10; // edi@1
  float v11; // ST20_4@1
  double v12; // st7@1
  float v13; // ST24_4@1
  double v14; // st7@1
  float v15; // ST28_4@1
  float v16; // eax@1
  float v17; // ecx@1
  double v18; // st7@1
  double v19; // st7@1
  double v20; // st7@1
  double v21; // st6@1
  double v22; // st7@1
  double v23; // st7@1
  int v24; // edx@5
  int v25; // ebx@5
  int v26; // ecx@5
  int v27; // eax@5
  int v28; // eax@7
  int v29; // eax@11
  int v30; // ebx@18
  int v31; // ecx@18
  int v32; // edx@19
  float v33; // ST20_4@24
  float v34; // ST24_4@24
  float v35; // ST28_4@24
  double v36; // st7@24
  float v37; // ST20_4@24
  float v38; // ST24_4@24
  float v39; // ST28_4@24
  double v40; // st5@24
  double v41; // st6@24
  float v42; // ST14_4@24
  double v43; // st2@24
  double v44; // st6@24
  float v45; // ST18_4@24
  float v46; // ST1C_4@24
  bool result; // al@24
  NiPoint3 kUnitDir; // [sp+24h] [bp-18h]@1
  int p; // [sp+30h] [bp-Ch]@1
  int o; // [sp+34h] [bp-8h]@1
  int k; // [sp+38h] [bp-4h]@1
  float y1b; // [sp+44h] [bp+8h]@1
  signed int y1; // [sp+44h] [bp+8h]@1
  int y1a; // [sp+44h] [bp+8h]@5
  float fInvTileWidthc; // [sp+48h] [bp+Ch]@1
  signed int fInvTileWidth; // [sp+48h] [bp+Ch]@1
  int fInvTileWidtha; // [sp+48h] [bp+Ch]@5
  float fInvTileWidthb; // [sp+48h] [bp+Ch]@18
  float fInvTileWidthd; // [sp+48h] [bp+Ch]@24
  int t; // [sp+58h] [bp+1Ch]@5

  v7 = this;
  operator delete__(this->m_kCheckedFlagMap.pabMap);
  v8 = v7->m_kIntersection.pkIntersections;
  v7->m_kCheckedFlagMap.pabMap = 0;
  operator delete__(v8);
  v9 = kEnd;
  v10 = kStart;
  v7->m_kIntersection.pkIntersections = 0;
  v11 = kEnd->x - kStart->x;
  v12 = kEnd->y;
  kUnitDir.x = v11;
  v13 = v12 - kStart->y;
  v14 = kEnd->z;
  kUnitDir.y = v13;
  v15 = v14 - kStart->z;
  kUnitDir.z = v15;
  NiPoint3::Unitize(&kUnitDir);
  v16 = kUnitDir.y;
  v17 = kUnitDir.z;
  v18 = 1.0 / v7->m_kHeightMapInfo.fTileWidth;
  LODWORD(v7->m_kRayInfo.kDir.x) = (_DWORD)kUnitDir.x;
  v7->m_kRayInfo.kDir.y = v16;
  v7->m_kRayInfo.kDir.z = v17;
  v7->m_kRayInfo.kOrg.x = kStart->x;
  v7->m_kRayInfo.kOrg.y = kStart->y;
  v7->m_kRayInfo.kOrg.z = kStart->z;
  fInvTileWidthc = v18;
  y1b = 1.0 / v7->m_kHeightMapInfo.fTileHeight;
  v19 = v9->x - v10->x;
  k = (signed int)((v9->y - v10->y) * y1b);
  v7->m_kCheckedFlagMap.iWidth = abs((signed int)(v19 * fInvTileWidthc)) + 2;
  v7->m_kCheckedFlagMap.iHeight = abs(k) + 2;
  v7->m_kIntersection.iMaxIntersection = 10;
  v7->m_kIntersection.iNumofIntersection = 0;
  v7->m_kIntersection.pkIntersections = (HeightmapRayIntersection::Intersection *)operator new__(0x1E0u);
  v20 = fInvTileWidthc;
  fInvTileWidth = (signed int)(v10->x * fInvTileWidthc);
  v21 = v20 * v9->x;
  v22 = y1b;
  y1 = (signed int)(v10->y * y1b);
  o = fInvTileWidth;
  p = y1;
  v23 = v22 * v9->y;
  k = (signed int)v21;
  if ( fInvTileWidth > (signed int)v21 )
    fInvTileWidth = k;
  if ( y1 > (signed int)v23 )
    y1 = (signed int)v23;
  v7->m_kCheckedFlagMap.iFlagMapPosX = fInvTileWidth;
  v24 = o;
  v7->m_kCheckedFlagMap.iFlagMapPosY = y1;
  y1a = *nTileGap + v24;
  v25 = p - *nTileGap;
  v26 = v24 - *nTileGap;
  v27 = p + *nTileGap;
  t = p - *nTileGap;
  fInvTileWidtha = v27;
  if ( v26 < 0 )
    v26 = 0;
  v28 = v7->m_kHeightMapInfo.iHeightXCount;
  if ( y1a >= v28 )
    y1a = v28 - 1;
  if ( v25 < 0 )
  {
    t = 0;
    v25 = 0;
  }
  v29 = v7->m_kHeightMapInfo.iHeightYCount;
  if ( fInvTileWidtha >= v29 )
    fInvTileWidtha = v29 - 1;
  for ( k = v26; k < y1a; ++k )
  {
    if ( v25 < fInvTileWidtha )
    {
      do
        HeightmapRayIntersection::CheckRayIntersectQuad(v7, k, v25++);
      while ( v25 < fInvTileWidtha );
      v25 = t;
    }
  }
  v30 = v7->m_kIntersection.iNumofIntersection;
  v31 = 0;
  fInvTileWidthb = 100000000.0;
  if ( !v30 )
    goto LABEL_28;
  v32 = (int)&v7->m_kIntersection.pkIntersections[v30];
  do
  {
    v32 -= 48;
    --v30;
    if ( *(float *)(v32 + 8) < (double)fInvTileWidthb )
    {
      v31 = v32;
      fInvTileWidthb = *(float *)(v32 + 8);
    }
  }
  while ( v30 );
  if ( v31 )
  {
    *rfDist = *(float *)(v31 + 8);
    fInvTileWidthd = *(float *)(v31 + 8);
    v33 = fInvTileWidthd * kUnitDir.x;
    v34 = kUnitDir.y * fInvTileWidthd;
    v35 = fInvTileWidthd * kUnitDir.z;
    kUnitDir.x = v10->x + v33;
    kUnitDir.y = v10->y + v34;
    v36 = v10->z;
    LODWORD(kIntersect->x) = (_DWORD)kUnitDir.x;
    kIntersect->y = kUnitDir.y;
    kUnitDir.z = v36 + v35;
    kIntersect->z = kUnitDir.z;
    kUnitDir.x = *(float *)(v31 + 24) - *(float *)(v31 + 12);
    kUnitDir.y = *(float *)(v31 + 28) - *(float *)(v31 + 16);
    kUnitDir.z = *(float *)(v31 + 32) - *(float *)(v31 + 20);
    v37 = *(float *)(v31 + 36) - *(float *)(v31 + 12);
    v38 = *(float *)(v31 + 40) - *(float *)(v31 + 16);
    v39 = *(float *)(v31 + 44) - *(float *)(v31 + 20);
    v40 = kUnitDir.y;
    v41 = kUnitDir.z;
    v42 = v39 * kUnitDir.y - v38 * kUnitDir.z;
    kNormal->x = v42;
    v43 = v41 * v37;
    v44 = kUnitDir.x;
    v45 = v43 - v39 * kUnitDir.x;
    kNormal->y = v45;
    v46 = v44 * v38 - v37 * v40;
    kNormal->z = v46;
    result = 1;
  }
  else
  {
LABEL_28:
    result = 0;
  }
  return result;
}

//----- (006850D0) --------------------------------------------------------
bool __thiscall World::CheckRayIntersectGround(World *this, NiPoint3 *kStart, NiPoint3 *kEnd, NiPoint3 *kIntersect, NiPoint3 *kNormal, float *rfDist, int *nTileGap)
{
  PgNsTerrain *v7; // eax@1
  int v8; // ecx@1
  int v9; // edx@1
  float *v10; // esi@1
  bool v11; // bl@1
  HeightmapRayIntersection kRayIntersect; // [sp+0h] [bp-68h]@1
  int v14; // [sp+64h] [bp-4h]@1

  kRayIntersect.m_kCheckedFlagMap.pabMap = 0;
  kRayIntersect.m_kIntersection.pkIntersections = 0;
  kRayIntersect.m_kIntersection.iNumofIntersection = 0;
  v14 = 0;
  v7 = this->m_pkTerrain;
  v8 = v7->m_uiHeightMapWide;
  v9 = v7->m_uiHeightMapHigh;
  kRayIntersect.m_kHeightMapInfo.fTileWidth = v7->m_fOneBlockWidth;
  v10 = v7->m_pfHeightMap;
  kRayIntersect.m_kHeightMapInfo.fTileHeight = v7->m_fOneBlockHeight;
  kRayIntersect.m_kHeightMapInfo.iTileXCount = v8;
  kRayIntersect.m_kHeightMapInfo.fWeight1 = v7->m_fWeight1;
  kRayIntersect.m_kHeightMapInfo.iTileYCount = v9;
  kRayIntersect.m_kHeightMapInfo.fWeight2 = v7->m_fWeight2;
  kRayIntersect.m_kHeightMapInfo.iHeightXCount = v8 + 1;
  kRayIntersect.m_kHeightMapInfo.iHeightYCount = v9 + 1;
  kRayIntersect.m_kHeightMapInfo.pfHeight = v10;
  v11 = HeightmapRayIntersection::CheckRayIntersect(&kRayIntersect, kStart, kEnd, kIntersect, kNormal, rfDist, nTileGap);
  operator delete__(kRayIntersect.m_kCheckedFlagMap.pabMap);
  operator delete__(kRayIntersect.m_kIntersection.pkIntersections);
  return v11;
}

//----- (006851A0) --------------------------------------------------------
bool __thiscall World::GetCameraPickPos2(World *this, NiPoint3 *kOrigin, NiPoint3 *kEnd, NiPoint3 *kPos, NiPoint3 *kNormal, float *pfDistance)
{
  World *v6; // esi@1
  Picking *v7; // edi@1
  float v8; // eax@1
  NiAVObject *v9; // ebx@1
  float v10; // eax@11
  int v11; // edx@14
  int v12; // eax@14
  int v13; // ecx@14
  Picking *v14; // edi@16
  float v15; // eax@16
  NiAVObject *v16; // ebx@16
  Picking *v17; // ebx@27
  int v18; // eax@27
  NiAVObject *v19; // edi@27
  int v20; // ebx@27
  bool v21; // bl@35
  Picking *v22; // ebx@43
  int v23; // eax@43
  NiAVObject *v24; // edi@43
  int v25; // ebx@43
  bool v26; // bl@51
  bool v27; // zf@53
  bool result; // al@56
  double v29; // st7@57
  double v30; // st7@58
  double v31; // st6@58
  NiPoint3 *v32; // eax@58
  float v33; // edx@59
  float v34; // ecx@59
  float v35; // edx@60
  NiPoint3 *v36; // eax@60
  float v37; // ecx@60
  float v38; // edx@60
  NiPoint3 *v39; // eax@61
  float v40; // ecx@61
  float v41; // edx@61
  float v42; // edx@62
  float v43; // ecx@62
  float v44; // edx@63
  NiPoint3 *v45; // eax@63
  float v46; // ecx@63
  float v47; // edx@63
  NiPoint3 *v48; // eax@64
  float v49; // ecx@64
  float v50; // edx@64
  float v51; // edx@66
  float v52; // ecx@66
  NiPoint3 *v53; // eax@68
  float v54; // ecx@68
  float v55; // edx@68
  NiPoint3 kNormalBuildingScene; // [sp+Ch] [bp-7Ch]@10
  NiPoint3 kGroundPos; // [sp+18h] [bp-70h]@10
  NiPoint3 kNormalMM; // [sp+24h] [bp-64h]@52
  NiPoint3 kGroundWallPos; // [sp+30h] [bp-58h]@52
  float v60; // [sp+3Ch] [bp-4Ch]@38
  float v61; // [sp+40h] [bp-48h]@41
  float v62; // [sp+44h] [bp-44h]@41
  NiPoint3 kIntersect; // [sp+48h] [bp-40h]@38
  NiPoint3 kDir; // [sp+54h] [bp-34h]@1
  NiPoint3 kNormalGroundObject; // [sp+60h] [bp-28h]@36
  NiPoint3 kGroundObjectPos; // [sp+6Ch] [bp-1Ch]@36
  unsigned int nTileGap; // [sp+78h] [bp-10h]@13
  float fGroundDistance; // [sp+7Ch] [bp-Ch]@1
  float fGroundObjectDistance; // [sp+80h] [bp-8h]@1
  bool bGroundObjectPick; // [sp+86h] [bp-2h]@35
  char bGroundPick; // [sp+87h] [bp-1h]@1

  v6 = this;
  kDir.x = kEnd->x - kOrigin->x;
  kDir.y = kEnd->y - kOrigin->y;
  kDir.z = kEnd->z - kOrigin->z;
  NiPoint3::Unitize(&kDir);
  v6->m_pkPick->baseclass_0.m_bReturnNormal = 1;
  v7 = v6->m_pkPick;
  fGroundDistance = 3.4028235e38;
  LODWORD(v8) = v6->m_spGroundObject.m_pObject;
  v9 = v7->baseclass_0.m_spRoot.m_pObject;
  bGroundPick = 0;
  fGroundObjectDistance = v8;
  if ( v9 != LODWORD(v8) )
  {
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v8 = fGroundObjectDistance;
    }
    v7->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)LODWORD(v8);
    if ( LODWORD(v8) )
      InterlockedIncrement((volatile LONG *)(LODWORD(v8) + 4));
  }
  if ( Picking::PickCharacter(v6->m_pkPick, kOrigin, &kDir) )
  {
    fGroundDistance = Picking::GetDistance(v6->m_pkPick, 0);
    Picking::GetIntersection(v6->m_pkPick, &kGroundPos, 0);
    Picking::GetNormal(v6->m_pkPick, &kNormalBuildingScene, 0);
    bGroundPick = 1;
  }
  v10 = fTime;
  if ( LODWORD(fTime) )
  {
    while ( 1 )
    {
      v11 = *LODWORD(v10);
      v12 = *(_DWORD *)(LODWORD(v10) + 8);
      v13 = *(_DWORD *)(v12 + 2708);
      nTileGap = v11;
      if ( v13 && *(_WORD *)(v13 + 176) )
      {
        v14 = v6->m_pkPick;
        LODWORD(v15) = *(_DWORD *)(v12 + 700);
        v16 = v14->baseclass_0.m_spRoot.m_pObject;
        fGroundObjectDistance = v15;
        if ( v16 != LODWORD(v15) )
        {
          if ( v16 )
          {
            if ( !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v16 )
              v16->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
            v15 = fGroundObjectDistance;
          }
          v14->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)LODWORD(v15);
          if ( LODWORD(v15) )
            InterlockedIncrement((volatile LONG *)(LODWORD(v15) + 4));
        }
        if ( Picking::PickCharacter(v6->m_pkPick, kOrigin, &kDir) )
        {
          fGroundDistance = Picking::GetDistance(v6->m_pkPick, 0);
          Picking::GetIntersection(v6->m_pkPick, &kGroundPos, 0);
          Picking::GetNormal(v6->m_pkPick, &kNormalBuildingScene, 0);
          bGroundPick = 1;
        }
      }
      if ( !nTileGap )
        break;
      LODWORD(v10) = nTileGap;
    }
  }
  v17 = v6->m_pkPick;
  v18 = (int)v6->m_spGroundObjectCollidee.m_pObject;
  fGroundObjectDistance = 3.4028235e38;
  v19 = v17->baseclass_0.m_spRoot.m_pObject;
  v20 = (int)&v17->baseclass_0.m_spRoot;
  nTileGap = v18;
  if ( v19 != (NiAVObject *)v18 )
  {
    if ( v19 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v19 )
        v19->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
      v18 = nTileGap;
    }
    *(_DWORD *)v20 = v18;
    if ( v18 )
      InterlockedIncrement((volatile LONG *)(v18 + 4));
  }
  v21 = Picking::PickGround(v6->m_pkPick, kOrigin, &kDir);
  bGroundObjectPick = v21;
  if ( v21 )
  {
    Picking::GetIntersection(v6->m_pkPick, &kGroundObjectPos, 0);
    fGroundObjectDistance = Picking::GetDistance(v6->m_pkPick, 0);
    Picking::GetNormal(v6->m_pkPick, &kNormalGroundObject, 0);
  }
  if ( v6->m_pkTerrain->m_pfHeightMap )
  {
    nTileGap = v6->m_kCameraCtrl.m_uiCheckRayTile;
    if ( World::CheckRayIntersectGround(
           v6,
           kOrigin,
           kEnd,
           &kIntersect,
           (NiPoint3 *)&v60,
           (float *)&kEnd,
           (int *)&nTileGap) )
    {
      if ( v21 )
      {
        if ( fGroundObjectDistance <= (double)*(float *)&kEnd )
          goto LABEL_43;
      }
      else
      {
        bGroundObjectPick = 1;
      }
      fGroundObjectDistance = *(float *)&kEnd;
      LODWORD(kGroundObjectPos.x) = (_DWORD)kIntersect.x;
      kGroundObjectPos.y = kIntersect.y;
      kGroundObjectPos.z = kIntersect.z;
      kNormalGroundObject.x = v60;
      kNormalGroundObject.y = v61;
      kNormalGroundObject.z = v62;
    }
  }
LABEL_43:
  v22 = v6->m_pkPick;
  v23 = (int)v6->m_spUseCameraCollidee.m_pObject;
  *(float *)&kEnd = 3.4028235e38;
  v24 = v22->baseclass_0.m_spRoot.m_pObject;
  v25 = (int)&v22->baseclass_0.m_spRoot;
  nTileGap = v23;
  if ( v24 != (NiAVObject *)v23 )
  {
    if ( v24 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v24 )
        v24->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
      v23 = nTileGap;
    }
    *(_DWORD *)v25 = v23;
    if ( v23 )
      InterlockedIncrement((volatile LONG *)(v23 + 4));
  }
  v26 = Picking::PickGround(v6->m_pkPick, kOrigin, &kDir);
  if ( v26 )
  {
    Picking::GetIntersection(v6->m_pkPick, &kGroundWallPos, 0);
    *(float *)&kEnd = Picking::GetDistance(v6->m_pkPick, 0);
    Picking::GetNormal(v6->m_pkPick, &kNormalMM, 0);
  }
  v27 = bGroundPick == 0;
  v6->m_pkPick->baseclass_0.m_bReturnNormal = 0;
  if ( v27 && !bGroundObjectPick && !v26 )
    return 0;
  v29 = fGroundDistance;
  if ( fGroundObjectDistance >= (double)fGroundDistance )
  {
    v31 = *(float *)&kEnd;
    v32 = kPos;
    if ( *(float *)&kEnd < v29 )
    {
LABEL_59:
      v33 = kGroundWallPos.y;
      LODWORD(v32->x) = (_DWORD)kGroundWallPos.x;
      v34 = kGroundWallPos.z;
      v32->y = v33;
      v32->z = v34;
      if ( pfDistance )
      {
        LODWORD(v35) = (_DWORD)kNormalMM.x;
        *pfDistance = v31;
        v36 = kNormal;
        v37 = kNormalMM.y;
        kNormal->x = v35;
        v38 = kNormalMM.z;
        v36->y = v37;
        v36->z = v38;
        result = 1;
      }
      else
      {
        v39 = kNormal;
        v40 = kNormalMM.y;
        LODWORD(kNormal->x) = (_DWORD)kNormalMM.x;
        v41 = kNormalMM.z;
        v39->y = v40;
        v39->z = v41;
        result = 1;
      }
      return result;
    }
    v51 = kGroundPos.y;
    LODWORD(kPos->x) = (_DWORD)kGroundPos.x;
    v52 = kGroundPos.z;
    v32->y = v51;
    v32->z = v52;
    if ( pfDistance )
      *pfDistance = v29;
    v53 = kNormal;
    v54 = kNormalBuildingScene.y;
    LODWORD(kNormal->x) = (_DWORD)kNormalBuildingScene.x;
    v55 = kNormalBuildingScene.z;
    v53->y = v54;
    v53->z = v55;
    result = 1;
  }
  else
  {
    v30 = fGroundObjectDistance;
    v31 = *(float *)&kEnd;
    v32 = kPos;
    if ( *(float *)&kEnd < (double)fGroundObjectDistance )
      goto LABEL_59;
    v42 = kGroundObjectPos.y;
    LODWORD(kPos->x) = (_DWORD)kGroundObjectPos.x;
    v43 = kGroundObjectPos.z;
    v32->y = v42;
    v32->z = v43;
    if ( pfDistance )
    {
      LODWORD(v44) = (_DWORD)kNormalGroundObject.x;
      *pfDistance = v30;
      v45 = kNormal;
      v46 = kNormalGroundObject.y;
      kNormal->x = v44;
      v47 = kNormalGroundObject.z;
      v45->y = v46;
      v45->z = v47;
      result = 1;
    }
    else
    {
      v48 = kNormal;
      v49 = kNormalGroundObject.y;
      LODWORD(kNormal->x) = (_DWORD)kNormalGroundObject.x;
      v50 = kNormalGroundObject.z;
      v48->y = v49;
      v48->z = v50;
      result = 1;
    }
  }
  return result;
}

//----- (00685670) --------------------------------------------------------
bool __thiscall World::GetAdvGroundPos(World *this, NiPoint3 kOrigin, NiPoint3 kDir, NiPoint3 *kTargetPos, float *pfDistance)
{
  World *v5; // esi@1
  PgNsTerrain *v6; // eax@1
  NiNode *v7; // ebx@2
  NiAVObject *v8; // edi@2
  NiNode *v9; // ebx@11
  NiAVObject *v10; // edi@11
  NiNode *v11; // ebx@20
  NiAVObject *v12; // edi@20
  signed int v13; // eax@27
  unsigned int v14; // eax@32
  unsigned int v15; // ebx@32
  NiAVObject *v16; // eax@32
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@33
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // eax@33
  NiPoint3 *v19; // eax@37
  float v20; // edx@38
  float v21; // ecx@38
  float v23; // ecx@44
  float v24; // edx@44
  Picking *v25; // [sp+0h] [bp-5Ch]@20
  NiPoint3 kTerrianPos; // [sp+4h] [bp-58h]@10
  NiPoint3 kGroundObjectPos; // [sp+10h] [bp-4Ch]@19
  float fTerrianDistance; // [sp+1Ch] [bp-40h]@2
  float *v29; // [sp+20h] [bp-3Ch]@1
  NiPoint3 *v30; // [sp+24h] [bp-38h]@1
  float fGroundObjectDistance; // [sp+28h] [bp-34h]@11
  bool bTerrianPick; // [sp+2Eh] [bp-2Eh]@9
  bool bGroundObjectPick; // [sp+2Fh] [bp-2Dh]@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Right; // [sp+30h] [bp-2Ch]@29
  unsigned int v35; // [sp+4Ch] [bp-10h]@1
  int v36; // [sp+58h] [bp-4h]@29
  int v37; // [sp+5Ch] [bp+0h]@1

  v35 = (unsigned int)&v37 ^ __security_cookie;
  v5 = this;
  v30 = kTargetPos;
  v6 = this->m_pkTerrain;
  v29 = pfDistance;
  if ( v6 )
  {
    v7 = v6->m_spScene.m_pObject;
    v8 = this->m_pkPick->baseclass_0.m_spRoot.m_pObject;
    LODWORD(fTerrianDistance) = this->m_pkPick;
    if ( (NiNode *)v8 != v7 )
    {
      if ( v8 && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      *(_DWORD *)(LODWORD(fTerrianDistance) + 24) = v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    bTerrianPick = Picking::PickGround(v5->m_pkPick, &kOrigin, &kDir);
    if ( bTerrianPick )
    {
      Picking::GetIntersection(v5->m_pkPick, &kTerrianPos, 0);
      fTerrianDistance = Picking::GetDistance(v5->m_pkPick, 0);
    }
  }
  v9 = v5->m_spGroundObjectCollidee.m_pObject;
  v10 = v5->m_pkPick->baseclass_0.m_spRoot.m_pObject;
  LODWORD(fGroundObjectDistance) = v5->m_pkPick;
  if ( (NiNode *)v10 != v9 )
  {
    if ( v10 && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    *(_DWORD *)(LODWORD(fGroundObjectDistance) + 24) = v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  bGroundObjectPick = Picking::PickGround(v5->m_pkPick, &kOrigin, &kDir);
  if ( bGroundObjectPick )
  {
    Picking::GetIntersection(v5->m_pkPick, &kGroundObjectPos, 0);
    fGroundObjectDistance = Picking::GetDistance(v5->m_pkPick, 0);
  }
  v11 = v5->m_spGroundObjectCollidee.m_pObject;
  v12 = v5->m_pkPick->baseclass_0.m_spRoot.m_pObject;
  v25 = v5->m_pkPick;
  if ( (NiNode *)v12 != v11 )
  {
    if ( v12 && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    v25->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v13 = v5->m_MiniHouseIndoorMode.m_eState;
  if ( v13 && v13 >= 1 )
  {
    _Right.baseclass_0._Myres = 15;
    _Right.baseclass_0._Mysize = 0;
    _Right.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v36 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v5->m_MiniHouseIndoorMode.m_RoomInfo.m_SelectedNodeName,
      &_Right,
      0,
      0xFFFFFFFFu);
    v36 = -1;
    if ( _Right.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Right);
    if ( Picking::PickCharacter(v5->m_pkPick, &kOrigin, &kDir) )
    {
      v14 = World::PickedObjConditionCheck(v5);
      v15 = v14;
      v16 = Picking::GetAVObject(v5->m_pkPick, v14);
      if ( !v16 )
        return 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &_Right,
        v16->baseclass_0.m_pcName);
      v36 = 1;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v5->m_MiniHouseIndoorMode.m_RoomInfo.m_SelectedNodeName,
        v17,
        0,
        0xFFFFFFFFu);
      v36 = -1;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&_Right);
      v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhRoomFloorName_1;
      if ( mhRoomFloorName_1.baseclass_0._Myres < 0x10 )
        v18 = &mhRoomFloorName_1;
      if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(
             &stru_AA4FFC,
             v18->baseclass_0.___u0.baseclass_0.dummy,
             0,
             mhRoomFloorName_1.baseclass_0._Mysize) == -1 )
      {
        Picking::GetIntersection(v5->m_pkPick, &kGroundObjectPos, v15);
        fGroundObjectDistance = Picking::GetDistance(v5->m_pkPick, v15);
LABEL_37:
        v19 = v30;
        goto LABEL_38;
      }
    }
  }
  if ( !bTerrianPick )
  {
    if ( bGroundObjectPick )
      goto LABEL_37;
    return 0;
  }
  if ( bGroundObjectPick )
  {
    v19 = v30;
    if ( kGroundObjectPos.z >= (double)kTerrianPos.z )
    {
LABEL_38:
      v20 = kGroundObjectPos.y;
      LODWORD(v19->x) = (_DWORD)kGroundObjectPos.x;
      v21 = kGroundObjectPos.z;
      v19->y = v20;
      v19->z = v21;
      if ( v29 )
        *v29 = fGroundObjectDistance;
      return 1;
    }
  }
  else
  {
    v19 = v30;
  }
  v23 = kTerrianPos.y;
  LODWORD(v19->x) = (_DWORD)kTerrianPos.x;
  v24 = kTerrianPos.z;
  v19->y = v23;
  v19->z = v24;
  if ( !v29 )
    return 1;
  *v29 = fTerrianDistance;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006859A0) --------------------------------------------------------
World::PickEnum __thiscall World::PickMHObj(World *this, mhState nowState, NiPoint3 *kOrigin, NiPoint3 *kDir, NiPoint3 *kGroundPos, bool bOnlyTest)
{
  World *v6; // esi@1
  _BYTE v7[12]; // ST0C_12@1
  _BYTE v8[12]; // ST00_12@1
  NiNode *v9; // ebx@2
  Picking *v10; // eax@2
  NiAVObject *v11; // edi@2
  NiNode *v12; // edi@9
  NiAVObject *v13; // eax@14
  World::PickEnum v14; // eax@19
  mhObject *v15; // edi@20
  PgFrameWork *v16; // eax@21
  mhObject *v17; // eax@25
  NiPointer<NiNode> result; // [sp+0h] [bp-14h]@2
  float fGroundDistance; // [sp+4h] [bp-10h]@1
  int v20; // [sp+10h] [bp-4h]@2
  Picking *kGroundPosa; // [sp+28h] [bp+14h]@2

  v6 = this;
  fGroundDistance = 0.0;
  *(_DWORD *)v7 = LODWORD(kDir->x);
  *(_QWORD *)&v7[4] = *(_QWORD *)&kDir->y;
  *(_DWORD *)v8 = LODWORD(kOrigin->x);
  *(_QWORD *)&v8[4] = *(_QWORD *)&kOrigin->y;
  World::GetAdvGroundPos(this, *(NiPoint3 *)v8, *(NiPoint3 *)v7, kGroundPos, &fGroundDistance);
  if ( !::nowState )
    return 0;
  v9 = MiniHouseIndoor::GetObjRootScene(&v6->m_MiniHouseIndoorMode, &result)->m_pObject;
  v10 = v6->m_pkPick;
  v11 = v10->baseclass_0.m_spRoot.m_pObject;
  v20 = 0;
  kGroundPosa = v10;
  if ( (NiNode *)v11 != v9 )
  {
    if ( v11 && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    kGroundPosa->baseclass_0.m_spRoot.m_pObject = (NiAVObject *)v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v12 = result.m_pObject;
  v20 = -1;
  if ( result.m_pObject
    && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  if ( !Picking::PickCharacter(v6->m_pkPick, kOrigin, kDir) )
  {
    if ( ::nowState == 2 )
    {
      MiniHouseIndoor::SetRepairObjID(&v6->m_MiniHouseIndoorMode, 0xFFFFu);
      return 10;
    }
    return 0;
  }
  v13 = Picking::GetAVObject(v6->m_pkPick, 0);
  if ( ::nowState == 1 )
  {
    if ( !bOnlyTest )
    {
      v17 = MiniHouseIndoor::GetObjectA(&v6->m_MiniHouseIndoorMode, v13);
      if ( v17->m_iGUID == 60000 )
        return 9;
      MiniHouseIndoor::SetFocusObj(&v6->m_MiniHouseIndoorMode, v17, 1);
    }
    v14 = 8;
  }
  else
  {
    if ( ::nowState == 2 )
    {
      v15 = MiniHouseIndoor::GetObjectA(&v6->m_MiniHouseIndoorMode, v13);
      if ( v15 )
      {
        v16 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( !(unsigned __int8)(*(int (**)(void))(**(_DWORD **)&v16[30].m_bInit + 260))() )
        {
          OutputDebugStringA("°¡±¸ ¹º°¡ Á");
          MiniHouseIndoor::SetRepairObjID(&v6->m_MiniHouseIndoorMode, LOWORD(v15->m_iGUID));
        }
      }
      v14 = 5;
    }
    else
    {
      if ( !bOnlyTest )
      {
        if ( dword_AA501C == 2 )
          MiniHouseIndoor::SetPickedObj(&v6->m_MiniHouseIndoorMode, v13, MH_STATE_EDIT_OBJ_PICKED, 0);
      }
      v14 = 5;
    }
  }
  return v14;
}
// AA501C: using guessed type int dword_AA501C;

//----- (00685C10) --------------------------------------------------------
World::PickEnum __thiscall World::PickInMHmode(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos, DropItem **pkDropItem, unsigned __int16 *hMiniHouse)
{
  NiPoint3 *v7; // ebx@1
  World *v8; // esi@1
  DropItem **v9; // edx@1
  NiPoint3 *v10; // ecx@1
  NiPoint3 *v11; // edi@1
  float v12; // edx@1
  _BYTE v13[12]; // ST0C_12@1
  _BYTE v14[12]; // ST00_12@1
  bool v15; // al@1
  bool v16; // zf@1
  bool v17; // cl@5
  NiAVObject *v18; // eax@6
  NiAVObject *v19; // edx@6
  double v20; // st7@8
  float *v21; // eax@8
  Char ***v22; // eax@10
  double v23; // st4@12
  Char ***v24; // eax@12
  double v25; // st3@14
  double v26; // st2@16
  double v27; // st4@16
  World::PickEnum result; // eax@17
  double v29; // st5@21
  bool v30; // c0@26
  double v31; // st7@26
  NiAVObject *pkItemObject; // [sp+8h] [bp-1Ch]@1
  float fDropItemDistance; // [sp+Ch] [bp-18h]@1
  float fMHDistance; // [sp+10h] [bp-14h]@1
  float fGroundDistance; // [sp+14h] [bp-10h]@1
  float fCharDistance; // [sp+18h] [bp-Ch]@1
  int ePickEnum; // [sp+1Ch] [bp-8h]@1
  bool bGroundPick; // [sp+23h] [bp-1h]@1
  bool bCharPick_3; // [sp+2Fh] [bp+Bh]@3
  bool bDropItemPick_3; // [sp+33h] [bp+Fh]@3

  fMHDistance = 3.4028235e38;
  v7 = kOrigin;
  fGroundDistance = 3.4028235e38;
  fDropItemDistance = 3.4028235e38;
  v8 = this;
  fCharDistance = 3.4028235e38;
  *hMiniHouse = -1;
  v9 = pkDropItem;
  *pkChar = 0;
  v10 = kGroundPos;
  *v9 = 0;
  v11 = kDir;
  v12 = kDir->x;
  ePickEnum = 0;
  pkItemObject = 0;
  *(_DWORD *)v13 = LODWORD(v12);
  *(_QWORD *)&v13[4] = *(_QWORD *)&kDir->y;
  *(_DWORD *)v14 = LODWORD(kOrigin->x);
  *(_QWORD *)&v14[4] = *(_QWORD *)&kOrigin->y;
  v15 = World::GetAdvGroundPos(v8, *(NiPoint3 *)v14, *(NiPoint3 *)v13, v10, &fGroundDistance);
  v16 = v8->m_MiniHouseIndoorMode.m_PickedObj == 0;
  bGroundPick = v15;
  if ( v16 && v8->m_MiniHouseIndoorMode.m_eState != 3 )
  {
    bCharPick_3 = World::PickChar(v8, kOrigin, kDir, pkChar, &fCharDistance);
    NsABVPicking::SetTarget(&v8->m_pkPick->baseclass_0, &v8->m_spDropItemScene.m_pObject->baseclass_0);
    bDropItemPick_3 = Picking::PickCharacter(v8->m_pkPick, v7, kDir);
    if ( bDropItemPick_3 )
    {
      fDropItemDistance = Picking::GetDistance(v8->m_pkPick, 0);
      pkItemObject = Picking::GetAVObject(v8->m_pkPick, 0);
    }
    NsABVPicking::SetTarget(&v8->m_pkPick->baseclass_0, &v8->m_spMinihouseScene.m_pObject->baseclass_0);
    v17 = Picking::PickCharacter(v8->m_pkPick, v7, v11);
    BYTE3(pkChar) = v17;
    if ( v17 )
    {
      fMHDistance = Picking::GetDistance(v8->m_pkPick, 0);
      v18 = Picking::GetAVObject(v8->m_pkPick, 0);
      v17 = BYTE3(pkChar);
      v19 = v18;
    }
    else
    {
      v19 = 0;
    }
    v20 = fCharDistance;
    v21 = &fCharDistance;
    if ( fGroundDistance <= (double)fCharDistance )
      v21 = &fGroundDistance;
    *(float *)&pkChar = *v21;
    v22 = (Char ***)&fMHDistance;
    if ( *(float *)&pkChar <= (double)fMHDistance )
      v22 = &pkChar;
    *(float *)&pkChar = *(float *)v22;
    v23 = fDropItemDistance;
    v24 = (Char ***)&fDropItemDistance;
    if ( *(float *)&pkChar <= (double)fDropItemDistance )
      v24 = &pkChar;
    *(float *)&pkChar = *(float *)v24;
    v25 = *(float *)&pkChar;
    if ( bDropItemPick_3 && v23 - 40.0 < v25 )
    {
      v26 = v23 + 40.0;
      v27 = 40.0;
      if ( v26 > v25 )
      {
        ePickEnum = 3;
        *pkDropItem = SearchDropItem(pkItemObject);
        return ePickEnum;
      }
    }
    else
    {
      v27 = 40.0;
    }
    if ( v17 && fMHDistance - v27 < v25 )
    {
      v29 = *(float *)&pkChar;
      if ( fMHDistance + v27 > *(float *)&pkChar )
      {
        ePickEnum = 4;
        *hMiniHouse = SearchMiniHouse(v19);
        return ePickEnum;
      }
    }
    else
    {
      v29 = *(float *)&pkChar;
    }
    if ( bCharPick_3 && v20 - v27 < v29 )
    {
      v30 = v29 < v20 + v27;
      v31 = v29;
      if ( v30 )
        return 1;
    }
    else
    {
      v31 = v29;
    }
    if ( !bGroundPick || fGroundDistance != v31 )
      return ePickEnum;
    result = World::PickMHObj(v8, nowState, v7, v11, kGroundPos, 1);
    if ( result )
    {
      ePickEnum = result;
    }
    else
    {
      ePickEnum = 2;
      result = 2;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00685ED0) --------------------------------------------------------
World::PickEnum __thiscall World::Pick(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos, DropItem **pkDropItem, unsigned __int16 *hMiniHouse)
{
  return World::PickInMHmode(this, kOrigin, kDir, pkChar, kGroundPos, pkDropItem, hMiniHouse);
}

//----- (00685EE0) --------------------------------------------------------
World::PickEnum __thiscall World::PickSomethingProcess(World *this, NiPoint3 *kOrigin, NiPoint3 *kDir, Char **pkChar, NiPoint3 *kGroundPos)
{
  World *v5; // ebx@1
  World::PickEnum result; // eax@3
  _BYTE v7[12]; // ST0C_12@4
  _BYTE v8[12]; // ST00_12@4
  float fGroundDistance; // [sp+4h] [bp-4h]@1

  fGroundDistance = 3.4028235e38;
  *pkChar = 0;
  v5 = this;
  if ( nowState == 3 && this->m_MiniHouseIndoorMode.m_PickedObj )
  {
    result = 6 - (MiniHouseIndoor::ReleasePickObj(&this->m_MiniHouseIndoorMode, 0, 0) != 1);
  }
  else
  {
    *(_DWORD *)v7 = LODWORD(kDir->x);
    *(_QWORD *)&v7[4] = *(_QWORD *)&kDir->y;
    *(_DWORD *)v8 = LODWORD(kOrigin->x);
    *(_QWORD *)&v8[4] = *(_QWORD *)&kOrigin->y;
    World::GetAdvGroundPos(this, *(NiPoint3 *)v8, *(NiPoint3 *)v7, kGroundPos, &fGroundDistance);
    result = World::PickMHObj(v5, nowState, kOrigin, kDir, kGroundPos, 0);
  }
  return result;
}

//----- (00685F90) --------------------------------------------------------
float __thiscall NiPoint3::operator_(NiPoint3 *this, NiPoint3 *pt)
{
  double v2; // st7@1
  float result; // st7@2
  float pta; // [sp+8h] [bp+8h]@1

  pta = pt->y * this->y + pt->x * this->x + pt->z * this->z;
  v2 = pta;
  LODWORD(result) = LODWORD(v2);
  return result;
}

//----- (00685FC0) --------------------------------------------------------
NiPointer<NiNode> *__thiscall MiniHouseIndoor::GetObjRootScene(MiniHouseIndoor *this, NiPointer<NiNode> *result)
{
  NiNode *v2; // eax@1

  v2 = this->m_spRootScene.m_pObject;
  result->m_pObject = v2;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  return result;
}

//----- (00685FF0) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 33) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 33) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 33) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 33) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 33) )
    goto LABEL_11;
  return result;
}

//----- (00686050) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetWorldPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[25];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 10.0;
  }
  return v3;
}

//----- (006860B0) --------------------------------------------------------
float __cdecl GetAngle(NiPoint3 _pos3Dir, NiPoint3 _pos3Target)
{
  NiPoint3::Unitize(&_pos3Dir);
  NiPoint3::Unitize(&_pos3Target);
  _pos3Target.z = _pos3Dir.y * _pos3Target.y + _pos3Target.x * _pos3Dir.x + _pos3Target.z * _pos3Dir.z;
  JUMPOUT(loc_6860E8);
}

//----- (006860F0) --------------------------------------------------------
void __thiscall CharSorter::CharSorter(CharSorter *this, NiPoint3 *pos3, NiPoint3 *kDir)
{
  this->m_pos3Main.x = pos3->x;
  this->m_pos3Main.y = pos3->y;
  this->m_pos3Main.z = pos3->z;
  this->m_pos3Dir.x = kDir->x;
  this->m_pos3Dir.y = kDir->y;
  this->m_pos3Dir.z = kDir->z;
}

//----- (00686120) --------------------------------------------------------
bool __thiscall CharSorter::operator__(CharSorter *this, Char *pChar1, Char *pChar2)
{
  CharSorter *v3; // esi@1
  bool result; // al@2
  int v5; // eax@4
  int v6; // eax@4
  float v7; // ST14_4@4
  float v8; // ST18_4@4
  float v9; // ST1C_4@4
  float v10; // ST08_4@4
  float v11; // ST0C_4@4
  float v12; // ST10_4@4
  float pChar1a; // [sp+34h] [bp+8h]@4
  float pChar1b; // [sp+34h] [bp+8h]@4
  float pChar1c; // [sp+34h] [bp+8h]@4
  float pChar1d; // [sp+34h] [bp+8h]@4
  float pChar2a; // [sp+38h] [bp+Ch]@4

  v3 = this;
  if ( pChar1 )
    result = !pChar2
          || (v5 = ((int (*)(void))pChar1->baseclass_0.vfptr[6].Deaffect)(),
              LODWORD(v3->pos1.x) = *(_DWORD *)v5,
              LODWORD(v3->pos1.y) = *(_DWORD *)(v5 + 4),
              LODWORD(v3->pos1.z) = *(_DWORD *)(v5 + 8),
              v6 = ((int (__thiscall *)(Char *))pChar2->baseclass_0.vfptr[6].Deaffect)(pChar2),
              LODWORD(v3->pos2.x) = *(_DWORD *)v6,
              LODWORD(v3->pos2.y) = *(_DWORD *)(v6 + 4),
              LODWORD(v3->pos2.z) = *(_DWORD *)(v6 + 8),
              v7 = v3->m_pos3Main.x - v3->pos1.x,
              v8 = v3->m_pos3Main.y - v3->pos1.y,
              v9 = v3->m_pos3Main.z - v3->pos1.z,
              v10 = v3->m_pos3Main.x - v3->pos2.x,
              v11 = v3->m_pos3Main.y - v3->pos2.y,
              v12 = v3->m_pos3Main.z - v3->pos2.z,
              pChar1a = v8 * v8 + v7 * v7 + v9 * v9,
              pChar1b = sqrt(pChar1a),
              pChar2a = pChar1b,
              pChar1c = v10 * v10 + v11 * v11 + v12 * v12,
              pChar1d = sqrt(pChar1c),
              pChar2a < (double)pChar1d);
  else
    result = 0;
  return result;
}

//----- (00686240) --------------------------------------------------------
bool __thiscall World::AttachDropItem(World *this, NiNode *pkNode)
{
  bool result; // al@2

  if ( pkNode )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->m_spDropItemScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      pkNode,
      0);
    NiAVObject::Update(&pkNode->baseclass_0, 0.0, 0);
    NiAVObject::UpdateEffects(&pkNode->baseclass_0);
    NiAVObject::UpdateProperties(&pkNode->baseclass_0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00686290) --------------------------------------------------------
bool __thiscall World::DetachDropItem(World *this, NiNode *pkNode)
{
  bool result; // al@2
  NiNode *v3; // esi@4

  if ( pkNode )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->m_spDropItemScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &pkNode,
      pkNode);
    if ( pkNode )
    {
      v3 = pkNode;
      if ( !InterlockedDecrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006862E0) --------------------------------------------------------
bool __thiscall World::AttachMiniHouse(World *this, NiNode *pkNode)
{
  bool result; // al@2

  if ( pkNode )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->m_spMinihouseScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      pkNode,
      0);
    NiAVObject::Update(&pkNode->baseclass_0, 0.0, 0);
    NiAVObject::UpdateEffects(&pkNode->baseclass_0);
    NiAVObject::UpdateProperties(&pkNode->baseclass_0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00686330) --------------------------------------------------------
bool __thiscall World::DetachMiniHouse(World *this, NiNode *pkNode)
{
  bool result; // al@2
  NiNode *v3; // esi@4

  if ( pkNode )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->m_spMinihouseScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &pkNode,
      pkNode);
    if ( pkNode )
    {
      v3 = pkNode;
      if ( !InterlockedDecrement((volatile LONG *)&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00686380) --------------------------------------------------------
bool __thiscall World::AttachEffect(World *this, NiNode *pkEffectNode)
{
  bool result; // al@2

  if ( pkEffectNode )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->m_spEffectScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      pkEffectNode,
      1);
    NiAVObject::Update(&pkEffectNode->baseclass_0, 0.0, 0);
    NiAVObject::UpdateEffects(&pkEffectNode->baseclass_0);
    NiAVObject::UpdateProperties(&pkEffectNode->baseclass_0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006863D0) --------------------------------------------------------
bool __thiscall World::DetachEffect(World *this, NiNode *pkEffectNode)
{
  bool result; // al@2
  NiNode *v3; // ecx@3
  NiNode *v4; // esi@4

  if ( pkEffectNode )
  {
    v3 = this->m_spEffectScene.m_pObject;
    if ( v3 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &pkEffectNode,
        pkEffectNode);
      v4 = pkEffectNode;
      if ( pkEffectNode )
      {
        if ( !InterlockedDecrement((volatile LONG *)&pkEffectNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v4 )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00686430) --------------------------------------------------------
void __thiscall DropItemSorter::DropItemSorter(DropItemSorter *this, NiPoint3 *pos3, NiPoint3 *kDir)
{
  this->m_pos3Main.x = pos3->x;
  this->m_pos3Main.y = pos3->y;
  this->m_pos3Main.z = pos3->z;
  this->m_pos3Dir.x = kDir->x;
  this->m_pos3Dir.y = kDir->y;
  this->m_pos3Dir.z = kDir->z;
}

//----- (00686460) --------------------------------------------------------
void __thiscall World::UpdateSkyScene(World *this, float fTime)
{
  World *v2; // esi@1
  int v3; // eax@1
  float v4; // ecx@1
  float v5; // edx@1
  float v6; // edi@1
  NiNode *v7; // eax@1
  NiNode *v8; // eax@1
  float v9; // edx@1
  NiNode *v10; // esi@1
  float pos_8; // [sp+18h] [bp-4h]@1

  v2 = this;
  v3 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].AddAbStateByAbstateIndex)();
  LODWORD(v4) = *(_DWORD *)v3;
  LODWORD(v5) = *(_DWORD *)(v3 + 4);
  LODWORD(v6) = *(_DWORD *)(v3 + 8);
  v7 = v2->m_spSkyScene.m_pObject;
  v7->baseclass_0.m_kLocal.m_Translate.x = v4;
  v7->baseclass_0.m_kLocal.m_Translate.y = v5;
  v7->baseclass_0.m_kLocal.m_Translate.z = v6;
  NiAVObject::Update(&v2->m_spSkyScene.m_pObject->baseclass_0, fTime, 0);
  v8 = g_pkMainChar->m_spScene.m_pObject;
  v9 = v8->baseclass_0.m_kWorld.m_Translate.y;
  v10 = v2->m_spWeatherEffectScene.m_pObject;
  pos_8 = v8->baseclass_0.m_kWorld.m_Translate.z - 100.0;
  if ( v10 )
  {
    v10->baseclass_0.m_kLocal.m_Translate.x = v8->baseclass_0.m_kWorld.m_Translate.x;
    v10->baseclass_0.m_kLocal.m_Translate.y = v9;
    v10->baseclass_0.m_kLocal.m_Translate.z = pos_8;
  }
}

//----- (006864F0) --------------------------------------------------------
bool __thiscall DropItemSorter::operator__(DropItemSorter *this, DropItem *pDropItem1, DropItem *pDropItem2)
{
  NiNode *v4; // eax@4
  NiNode *v5; // eax@4
  float v6; // ST10_4@4
  float v7; // ST14_4@4
  float v8; // ST18_4@4
  float v9; // ST04_4@4
  float v10; // ST08_4@4
  float v11; // ST0C_4@4
  float pDropItem1a; // [sp+30h] [bp+8h]@4
  float pDropItem1b; // [sp+30h] [bp+8h]@4
  float pDropItem1c; // [sp+30h] [bp+8h]@4
  float pDropItem1d; // [sp+30h] [bp+8h]@4
  float pDropItem2a; // [sp+34h] [bp+Ch]@4

  return pDropItem1
      && (!pDropItem2
       || (v4 = pDropItem1->m_spNode.m_pObject,
           this->pos1.x = v4->baseclass_0.m_kLocal.m_Translate.x,
           this->pos1.y = v4->baseclass_0.m_kLocal.m_Translate.y,
           this->pos1.z = v4->baseclass_0.m_kLocal.m_Translate.z,
           v5 = pDropItem2->m_spNode.m_pObject,
           this->pos2.x = v5->baseclass_0.m_kLocal.m_Translate.x,
           this->pos2.y = v5->baseclass_0.m_kLocal.m_Translate.y,
           this->pos2.z = v5->baseclass_0.m_kLocal.m_Translate.z,
           v6 = this->m_pos3Main.x - this->pos1.x,
           v7 = this->m_pos3Main.y - this->pos1.y,
           v8 = this->m_pos3Main.z - this->pos1.z,
           v9 = this->m_pos3Main.x - this->pos2.x,
           v10 = this->m_pos3Main.y - this->pos2.y,
           v11 = this->m_pos3Main.z - this->pos2.z,
           pDropItem1a = v7 * v7 + v6 * v6 + v8 * v8,
           pDropItem1b = sqrt(pDropItem1a),
           pDropItem2a = pDropItem1b,
           pDropItem1c = v9 * v9 + v10 * v10 + v11 * v11,
           pDropItem1d = sqrt(pDropItem1c),
           pDropItem2a < (double)pDropItem1d));
}

//----- (006865F0) --------------------------------------------------------
bool __thiscall World::InitScene(World *this)
{
  World *v1; // esi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  NiNode *v5; // edi@3
  void *v6; // eax@10
  int v7; // eax@11
  int v8; // ebx@11
  NiNode *v9; // edi@13
  void *v10; // eax@20
  int v11; // eax@21
  int v12; // ebx@21
  NiNode *v13; // edi@23
  void *v14; // eax@30
  int v15; // eax@31
  int v16; // ebx@31
  NiNode *v17; // edi@33
  void *v18; // eax@40
  int v19; // eax@41
  int v20; // ebx@41
  NiNode *v21; // edi@43
  void *v22; // eax@50
  int v23; // eax@51
  int v24; // ebx@51
  NiNode *v25; // edi@53
  void *v26; // eax@60
  int v27; // eax@61
  int v28; // ebx@61
  NiNode *v29; // edi@63
  void *v30; // eax@70
  int v31; // eax@71
  int v32; // ebx@71
  NiNode *v33; // edi@73
  void *v34; // eax@80
  int v35; // eax@81
  int v36; // ebx@81
  NiNode *v37; // edi@83
  void *v38; // eax@90
  int v39; // eax@91
  int v40; // ebx@91
  NiNode *v41; // edi@93
  void *v42; // eax@100
  int v43; // eax@101
  int v44; // ebx@101
  NiNode *v45; // edi@103
  void *v46; // eax@110
  int v47; // eax@111
  int v48; // ebx@111
  NiNode *v49; // edi@113
  void *v50; // eax@120
  int v51; // eax@121
  int v52; // ebx@121
  NiSortAdjustNode *v53; // edi@123
  void *v54; // eax@130
  int v55; // eax@131
  int v56; // ebx@131
  NiNode *v57; // edi@133
  void *v58; // eax@140
  int v59; // eax@141
  int v60; // ebx@141
  NiNode *v61; // edi@143
  void *v62; // eax@150
  int v63; // eax@151
  int v64; // ebx@151
  NiNode *v65; // edi@153
  void *v66; // ebx@160
  void *v67; // eax@160
  void *v68; // edi@160
  void *v69; // eax@164
  int v70; // edi@164
  void *v71; // eax@171
  int v72; // edi@171
  void *v73; // eax@176
  int v74; // eax@177
  int v75; // ebx@177
  NiSortAdjustNode *v76; // edi@179
  void *v77; // eax@186
  int v78; // eax@187
  int v79; // ebx@187
  NiNode *v80; // edi@189
  NiNode *v81; // edi@196
  void *v82; // eax@201
  int v83; // edi@201
  void *v84; // eax@208
  int v85; // eax@209
  int v86; // edi@209
  int v87; // eax@211
  int v88; // eax@211
  int v89; // ecx@211
  int v90; // edx@211
  void *v91; // eax@213
  int v92; // edi@213
  double v93; // st7@214
  float v94; // ST18_4@216
  float v95; // ST1C_4@216
  float v96; // ST20_4@216
  __int16 v97; // dx@216
  void *v98; // eax@218
  int v99; // edi@218
  void *v100; // eax@223
  int v101; // eax@224
  int v102; // ebx@224
  NiNode *v103; // edi@226
  void *v104; // eax@233
  int v105; // eax@234
  int v106; // ebx@234
  NiNode *v107; // edi@236
  void *v108; // eax@243
  int v109; // eax@244
  int v110; // ebx@244
  NiNode *v111; // edi@246
  void *v112; // eax@253
  int v113; // eax@254
  int v114; // ebx@254
  NiNode *v115; // edi@256
  int v116; // ebx@263
  int v117; // edi@264
  int v118; // edi@269
  void *v119; // eax@275
  CWorldConfig *v120; // eax@276
  int v121; // esi@278
  NiRoom *v122; // esi@280
  NiAlphaProperty *v123; // esi@282
  void *v125; // [sp+14h] [bp-20h]@1
  NiPointer<NiAlphaProperty> spkAlphaProp; // [sp+18h] [bp-1Ch]@160
  NiPointer<NiRoom> element; // [sp+1Ch] [bp-18h]@162
  NiNode *v128; // [sp+20h] [bp-14h]@162
  NiNode *v129; // [sp+24h] [bp-10h]@169
  int v130; // [sp+30h] [bp-4h]@1

  v1 = this;
  v2 = operator new(0xE8u);
  v125 = v2;
  v3 = 0;
  v130 = 0;
  if ( v2 )
  {
    NiNode::NiNode((NiNode *)v2, 0);
    v3 = v4;
  }
  v5 = v1->m_spWorldScene.m_pObject;
  v130 = -1;
  if ( v5 != (NiNode *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spWorldScene.m_pObject = (NiNode *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v6 = operator new(0xE8u);
  v125 = v6;
  v130 = 1;
  if ( v6 )
  {
    NiNode::NiNode((NiNode *)v6, 0);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  v9 = v1->m_spCharScene.m_pObject;
  v130 = -1;
  if ( v9 != (NiNode *)v8 )
  {
    if ( v9
      && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    v1->m_spCharScene.m_pObject = (NiNode *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)(v8 + 4));
  }
  v10 = operator new(0xE8u);
  v125 = v10;
  v130 = 2;
  if ( v10 )
  {
    NiNode::NiNode((NiNode *)v10, 0);
    v12 = v11;
  }
  else
  {
    v12 = 0;
  }
  v13 = v1->m_spDropItemScene.m_pObject;
  v130 = -1;
  if ( v13 != (NiNode *)v12 )
  {
    if ( v13
      && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v13 )
      v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    v1->m_spDropItemScene.m_pObject = (NiNode *)v12;
    if ( v12 )
      InterlockedIncrement((volatile LONG *)(v12 + 4));
  }
  v14 = operator new(0xE8u);
  v125 = v14;
  v130 = 3;
  if ( v14 )
  {
    NiNode::NiNode((NiNode *)v14, 0);
    v16 = v15;
  }
  else
  {
    v16 = 0;
  }
  v17 = v1->m_spGroundScene.m_pObject;
  v130 = -1;
  if ( v17 != (NiNode *)v16 )
  {
    if ( v17
      && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    v1->m_spGroundScene.m_pObject = (NiNode *)v16;
    if ( v16 )
      InterlockedIncrement((volatile LONG *)(v16 + 4));
  }
  v18 = operator new(0xE8u);
  v125 = v18;
  v130 = 4;
  if ( v18 )
  {
    NiNode::NiNode((NiNode *)v18, 0);
    v20 = v19;
  }
  else
  {
    v20 = 0;
  }
  v21 = v1->m_spShadowScene.m_pObject;
  v130 = -1;
  if ( v21 != (NiNode *)v20 )
  {
    if ( v21
      && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v21 )
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    v1->m_spShadowScene.m_pObject = (NiNode *)v20;
    if ( v20 )
      InterlockedIncrement((volatile LONG *)(v20 + 4));
  }
  v22 = operator new(0xE8u);
  v125 = v22;
  v130 = 5;
  if ( v22 )
  {
    NiNode::NiNode((NiNode *)v22, 0);
    v24 = v23;
  }
  else
  {
    v24 = 0;
  }
  v25 = v1->m_spWaterScene.m_pObject;
  v130 = -1;
  if ( v25 != (NiNode *)v24 )
  {
    if ( v25
      && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v25 )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    v1->m_spWaterScene.m_pObject = (NiNode *)v24;
    if ( v24 )
      InterlockedIncrement((volatile LONG *)(v24 + 4));
  }
  v26 = operator new(0xE8u);
  v125 = v26;
  v130 = 6;
  if ( v26 )
  {
    NiNode::NiNode((NiNode *)v26, 0);
    v28 = v27;
  }
  else
  {
    v28 = 0;
  }
  v29 = v1->m_spEffectScene.m_pObject;
  v130 = -1;
  if ( v29 != (NiNode *)v28 )
  {
    if ( v29
      && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v29 )
      v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
    v1->m_spEffectScene.m_pObject = (NiNode *)v28;
    if ( v28 )
      InterlockedIncrement((volatile LONG *)(v28 + 4));
  }
  v30 = operator new(0xE8u);
  v125 = v30;
  v130 = 7;
  if ( v30 )
  {
    NiNode::NiNode((NiNode *)v30, 0);
    v32 = v31;
  }
  else
  {
    v32 = 0;
  }
  v33 = v1->m_spSkyScene.m_pObject;
  v130 = -1;
  if ( v33 != (NiNode *)v32 )
  {
    if ( v33
      && !InterlockedDecrement((volatile LONG *)&v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v33 )
      v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v33, 1u);
    v1->m_spSkyScene.m_pObject = (NiNode *)v32;
    if ( v32 )
      InterlockedIncrement((volatile LONG *)(v32 + 4));
  }
  v34 = operator new(0xE8u);
  v125 = v34;
  v130 = 8;
  if ( v34 )
  {
    NiNode::NiNode((NiNode *)v34, 0);
    v36 = v35;
  }
  else
  {
    v36 = 0;
  }
  v37 = v1->m_spNormalLightScene.m_pObject;
  v130 = -1;
  if ( v37 != (NiNode *)v36 )
  {
    if ( v37
      && !InterlockedDecrement((volatile LONG *)&v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v37 )
      v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
    v1->m_spNormalLightScene.m_pObject = (NiNode *)v36;
    if ( v36 )
      InterlockedIncrement((volatile LONG *)(v36 + 4));
  }
  v38 = operator new(0xE8u);
  v125 = v38;
  v130 = 9;
  if ( v38 )
  {
    NiNode::NiNode((NiNode *)v38, 0);
    v40 = v39;
  }
  else
  {
    v40 = 0;
  }
  v41 = v1->m_spAbstateCharScene.m_pObject;
  v130 = -1;
  if ( v41 != (NiNode *)v40 )
  {
    if ( v41
      && !InterlockedDecrement((volatile LONG *)&v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v41 )
      v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v41, 1u);
    v1->m_spAbstateCharScene.m_pObject = (NiNode *)v40;
    if ( v40 )
      InterlockedIncrement((volatile LONG *)(v40 + 4));
  }
  v42 = operator new(0xE8u);
  v125 = v42;
  v130 = 10;
  if ( v42 )
  {
    NiNode::NiNode((NiNode *)v42, 0);
    v44 = v43;
  }
  else
  {
    v44 = 0;
  }
  v45 = v1->m_spMinihouseScene.m_pObject;
  v130 = -1;
  if ( v45 != (NiNode *)v44 )
  {
    if ( v45
      && !InterlockedDecrement((volatile LONG *)&v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v45 )
      v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v45, 1u);
    v1->m_spMinihouseScene.m_pObject = (NiNode *)v44;
    if ( v44 )
      InterlockedIncrement((volatile LONG *)(v44 + 4));
  }
  v46 = operator new(0xE8u);
  v125 = v46;
  v130 = 11;
  if ( v46 )
  {
    NiNode::NiNode((NiNode *)v46, 0);
    v48 = v47;
  }
  else
  {
    v48 = 0;
  }
  v49 = v1->m_spDirectionalLightScene.m_pObject;
  v130 = -1;
  if ( v49 != (NiNode *)v48 )
  {
    if ( v49
      && !InterlockedDecrement((volatile LONG *)&v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v49 )
      v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v49, 1u);
    v1->m_spDirectionalLightScene.m_pObject = (NiNode *)v48;
    if ( v48 )
      InterlockedIncrement((volatile LONG *)(v48 + 4));
  }
  v50 = operator new(0xECu);
  v125 = v50;
  v130 = 12;
  if ( v50 )
  {
    NiSortAdjustNode::NiSortAdjustNode((NiSortAdjustNode *)v50);
    v52 = v51;
  }
  else
  {
    v52 = 0;
  }
  v53 = v1->m_spBuildingScene.m_pObject;
  v130 = -1;
  if ( v53 != (NiSortAdjustNode *)v52 )
  {
    if ( v53
      && !InterlockedDecrement((volatile LONG *)&v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v53 )
      v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v53, 1u);
    v1->m_spBuildingScene.m_pObject = (NiSortAdjustNode *)v52;
    if ( v52 )
      InterlockedIncrement((volatile LONG *)(v52 + 4));
  }
  NiObjectNET::SetName(&v1->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0, "[PN]");
  v1->m_spBuildingScene.m_pObject->m_eSortingMode = 0;
  v54 = operator new(0xE8u);
  v125 = v54;
  v130 = 13;
  if ( v54 )
  {
    NiNode::NiNode((NiNode *)v54, 0);
    v56 = v55;
  }
  else
  {
    v56 = 0;
  }
  v57 = v1->m_spGroundObject.m_pObject;
  v130 = -1;
  if ( v57 != (NiNode *)v56 )
  {
    if ( v57
      && !InterlockedDecrement((volatile LONG *)&v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v57 )
      v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v57, 1u);
    v1->m_spGroundObject.m_pObject = (NiNode *)v56;
    if ( v56 )
      InterlockedIncrement((volatile LONG *)(v56 + 4));
  }
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spGroundObject.m_pObject,
    0);
  v58 = operator new(0xE8u);
  v125 = v58;
  v130 = 14;
  if ( v58 )
  {
    NiNode::NiNode((NiNode *)v58, 0);
    v60 = v59;
  }
  else
  {
    v60 = 0;
  }
  v61 = v1->m_spBDNotAni.m_pObject;
  v130 = -1;
  if ( v61 != (NiNode *)v60 )
  {
    if ( v61
      && !InterlockedDecrement((volatile LONG *)&v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v61 )
      v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v61, 1u);
    v1->m_spBDNotAni.m_pObject = (NiNode *)v60;
    if ( v60 )
      InterlockedIncrement((volatile LONG *)(v60 + 4));
  }
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spBDNotAni.m_pObject,
    0);
  v62 = operator new(0xE8u);
  v125 = v62;
  v130 = 15;
  if ( v62 )
  {
    NiNode::NiNode((NiNode *)v62, 0);
    v64 = v63;
  }
  else
  {
    v64 = 0;
  }
  v65 = v1->m_spBDAni.m_pObject;
  v130 = -1;
  if ( v65 != (NiNode *)v64 )
  {
    if ( v65
      && !InterlockedDecrement((volatile LONG *)&v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v65 )
      v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v65, 1u);
    v1->m_spBDAni.m_pObject = (NiNode *)v64;
    if ( v64 )
      InterlockedIncrement((volatile LONG *)(v64 + 4));
  }
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spBDAni.m_pObject,
    0);
  v66 = 0;
  spkAlphaProp.m_pObject = 0;
  v130 = 16;
  v67 = operator new(0x20u);
  v68 = v67;
  v125 = v67;
  LOBYTE(v130) = 17;
  if ( v67 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v67);
    *((_BYTE *)v68 + 30) = 0;
    *(_DWORD *)v68 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v68 + 14) = 236;
    v66 = v68;
    spkAlphaProp.m_pObject = (NiAlphaProperty *)v68;
    InterlockedIncrement((volatile LONG *)v68 + 1);
  }
  *((_WORD *)v66 + 14) |= 1u;
  *((_WORD *)v66 + 14) |= 0x200u;
  *((_WORD *)v66 + 14) = *((_WORD *)v66 + 14) & 0xF3FF | 0x1000;
  *((_BYTE *)v66 + 30) = 8;
  *((_WORD *)v66 + 14) = (*((_WORD *)v66 + 14) & 0xFE5F | 0x40) & 0xFFE3 | 2;
  v128 = v1->m_spShadowScene.m_pObject;
  element.m_pObject = (NiRoom *)v66;
  InterlockedIncrement((volatile LONG *)v66 + 1);
  LOBYTE(v130) = 18;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v128->baseclass_0.m_kPropertyList,
    &element);
  LOBYTE(v130) = 16;
  if ( !InterlockedDecrement((volatile LONG *)v66 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v66)(v66, 1);
  v69 = operator new(0x28u);
  v70 = (int)v69;
  v125 = v69;
  LOBYTE(v130) = 19;
  if ( v69 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v69);
    *(_DWORD *)v70 = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(v70 + 28) = 0;
    *(_DWORD *)(v70 + 32) = 0;
    *(_DWORD *)(v70 + 36) = 1;
  }
  else
  {
    v70 = 0;
  }
  element.m_pObject = (NiRoom *)v70;
  if ( v70 )
    InterlockedIncrement((volatile LONG *)(v70 + 4));
  *(_DWORD *)(v70 + 32) = 1;
  *(_DWORD *)(v70 + 36) = 1;
  v129 = v1->m_spShadowScene.m_pObject;
  v128 = (NiNode *)v70;
  InterlockedIncrement((volatile LONG *)(v70 + 4));
  LOBYTE(v130) = 21;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v129->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v128);
  LOBYTE(v130) = 20;
  if ( !InterlockedDecrement((volatile LONG *)(v70 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v70)(v70, 1);
  v71 = operator new(0x30u);
  v72 = (int)v71;
  v125 = v71;
  LOBYTE(v130) = 22;
  if ( v71 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v71);
    *(_DWORD *)v72 = &NiFogProperty::_vftable_;
    *(float *)(v72 + 36) = 0.0;
    *(float *)(v72 + 40) = 0.0;
    *(float *)(v72 + 44) = 0.0;
    *(_WORD *)(v72 + 28) = 0;
    *(float *)(v72 + 32) = 1.0;
    *(_DWORD *)(v72 + 36) = NiColor::BLACK;
    *(_DWORD *)(v72 + 40) = dword_B6E000;
    *(_DWORD *)(v72 + 44) = dword_B6E004;
  }
  else
  {
    v72 = 0;
  }
  *(_WORD *)(v72 + 28) &= 0xFFFEu;
  v129 = v1->m_spShadowScene.m_pObject;
  v128 = (NiNode *)v72;
  InterlockedIncrement((volatile LONG *)(v72 + 4));
  LOBYTE(v130) = 23;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v129->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v128);
  LOBYTE(v130) = 20;
  if ( !InterlockedDecrement((volatile LONG *)(v72 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v72)(v72, 1);
  v73 = operator new(0xECu);
  v125 = v73;
  LOBYTE(v130) = 24;
  if ( v73 )
  {
    NiSortAdjustNode::NiSortAdjustNode((NiSortAdjustNode *)v73);
    v75 = v74;
  }
  else
  {
    v75 = 0;
  }
  v76 = v1->m_spGroundTerrain.m_pObject;
  LOBYTE(v130) = 20;
  if ( v76 != (NiSortAdjustNode *)v75 )
  {
    if ( v76
      && !InterlockedDecrement((volatile LONG *)&v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v76 )
      v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v76, 1u);
    v1->m_spGroundTerrain.m_pObject = (NiSortAdjustNode *)v75;
    if ( v75 )
      InterlockedIncrement((volatile LONG *)(v75 + 4));
  }
  v1->m_spGroundTerrain.m_pObject->m_eSortingMode = 1;
  v77 = operator new(0xE8u);
  v125 = v77;
  LOBYTE(v130) = 25;
  if ( v77 )
  {
    NiNode::NiNode((NiNode *)v77, 0);
    v79 = v78;
  }
  else
  {
    v79 = 0;
  }
  v80 = v1->m_spAllGroundScene.m_pObject;
  LOBYTE(v130) = 20;
  if ( v80 != (NiNode *)v79 )
  {
    if ( v80
      && !InterlockedDecrement((volatile LONG *)&v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v80 )
      v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v80, 1u);
    v1->m_spAllGroundScene.m_pObject = (NiNode *)v79;
    if ( v79 )
      InterlockedIncrement((volatile LONG *)(v79 + 4));
  }
  ((void (__stdcall *)(NiSortAdjustNode *, _DWORD))v1->m_spGroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spGroundTerrain.m_pObject,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spAllGroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spGroundScene.m_pObject,
    0);
  ((void (__stdcall *)(NiSortAdjustNode *, _DWORD))v1->m_spAllGroundScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spBuildingScene.m_pObject,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spNormalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spAllGroundScene.m_pObject,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spNormalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spDirectionalLightScene.m_pObject,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spDirectionalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spCharScene.m_pObject,
    0);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spNormalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spShadowScene.m_pObject,
    0);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spNormalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spDropItemScene.m_pObject,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spDirectionalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spMinihouseScene.m_pObject,
    0);
  v81 = v1->m_spWeatherEffectScene.m_pObject;
  if ( v81 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v81 )
      v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v81, 1u);
    v1->m_spWeatherEffectScene.m_pObject = 0;
  }
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spNormalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spWaterScene.m_pObject,
    0);
  ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spNormalLightScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spEffectScene.m_pObject,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spWorldScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spNormalLightScene.m_pObject,
    0);
  ((void (__stdcall *)(NiNode *, _DWORD))v1->m_spWorldScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v1->m_spAbstateCharScene.m_pObject,
    0);
  v82 = operator new(0x28u);
  v83 = (int)v82;
  v125 = v82;
  LOBYTE(v130) = 26;
  if ( v82 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v82);
    *(_DWORD *)v83 = &NiVertexColorProperty::_vftable_;
    *(_WORD *)(v83 + 28) = 0;
    *(_DWORD *)(v83 + 32) = 0;
    *(_DWORD *)(v83 + 36) = 1;
  }
  else
  {
    v83 = 0;
  }
  v128 = (NiNode *)v83;
  if ( v83 )
    InterlockedIncrement((volatile LONG *)(v83 + 4));
  *(_DWORD *)(v83 + 32) = 2;
  *(_DWORD *)(v83 + 36) = 1;
  v125 = v1->m_spWorldScene.m_pObject;
  v129 = (NiNode *)v83;
  InterlockedIncrement((volatile LONG *)(v83 + 4));
  LOBYTE(v130) = 28;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v125 + 156),
    (NiPointer<NiRoom> *)&v129);
  LOBYTE(v130) = 27;
  if ( !InterlockedDecrement((volatile LONG *)(v83 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v83)(v83, 1);
  v84 = operator new(0x60u);
  v125 = v84;
  LOBYTE(v130) = 29;
  if ( v84 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v84);
    v86 = v85;
  }
  else
  {
    v86 = 0;
  }
  *(_DWORD *)(v86 + 32) = NiColor::WHITE;
  *(_DWORD *)(v86 + 36) = dword_A88D90;
  v87 = dword_A88D94;
  ++*(_DWORD *)(v86 + 88);
  *(_DWORD *)(v86 + 40) = v87;
  v88 = *(_DWORD *)(v86 + 88);
  *(_DWORD *)(v86 + 44) = NiColor::WHITE;
  *(_DWORD *)(v86 + 48) = dword_A88D90;
  v89 = dword_A88D94;
  ++v88;
  *(_DWORD *)(v86 + 88) = v88;
  *(_DWORD *)(v86 + 52) = v89;
  *(_DWORD *)(v86 + 68) = NiColor::BLACK;
  *(_DWORD *)(v86 + 72) = dword_B6E000;
  v90 = dword_B6E004;
  *(float *)(v86 + 84) = 1.0;
  *(_DWORD *)(v86 + 76) = v90;
  *(_DWORD *)(v86 + 88) = v88 + 2;
  v129 = v1->m_spWorldScene.m_pObject;
  v125 = (void *)v86;
  InterlockedIncrement((volatile LONG *)(v86 + 4));
  LOBYTE(v130) = 30;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v129->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v125);
  LOBYTE(v130) = 27;
  if ( !InterlockedDecrement((volatile LONG *)(v86 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v86)(v86, 1);
  v91 = operator new(0x30u);
  v92 = (int)v91;
  v125 = v91;
  LOBYTE(v130) = 31;
  if ( v91 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v91);
    *(_DWORD *)v92 = &NiFogProperty::_vftable_;
    *(float *)(v92 + 36) = 0.0;
    *(float *)(v92 + 40) = 0.0;
    *(float *)(v92 + 44) = 0.0;
    v93 = 1.0;
    *(_WORD *)(v92 + 28) = 0;
    *(float *)(v92 + 32) = 1.0;
    *(_DWORD *)(v92 + 36) = NiColor::BLACK;
    *(_DWORD *)(v92 + 40) = dword_B6E000;
    *(_DWORD *)(v92 + 44) = dword_B6E004;
  }
  else
  {
    v93 = 1.0;
    v92 = 0;
  }
  *(float *)(v92 + 32) = 0.60000002;
  v125 = (void *)v92;
  v94 = v93;
  *(_DWORD *)(v92 + 36) = LODWORD(v94);
  v95 = v93;
  v96 = v93;
  v97 = *(_WORD *)(v92 + 28);
  *(_DWORD *)(v92 + 40) = LODWORD(v95);
  *(_DWORD *)(v92 + 44) = LODWORD(v96);
  *(_WORD *)(v92 + 28) = v97 & 0xFFF9 | 1;
  v129 = v1->m_spWorldScene.m_pObject;
  InterlockedIncrement((volatile LONG *)(v92 + 4));
  LOBYTE(v130) = 32;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v129->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v125);
  LOBYTE(v130) = 27;
  if ( !InterlockedDecrement((volatile LONG *)(v92 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v92)(v92, 1);
  v98 = operator new(0x24u);
  v99 = (int)v98;
  v125 = v98;
  LOBYTE(v130) = 33;
  if ( v98 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v98);
    *(_DWORD *)v99 = &NiZBufferProperty::_vftable_;
    *(_WORD *)(v99 + 28) = 3;
    *(_DWORD *)(v99 + 32) = 3;
  }
  else
  {
    v99 = 0;
  }
  *(_WORD *)(v99 + 28) &= 0xFFFCu;
  v129 = v1->m_spSkyScene.m_pObject;
  v125 = (void *)v99;
  InterlockedIncrement((volatile LONG *)(v99 + 4));
  LOBYTE(v130) = 34;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v129->baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v125);
  LOBYTE(v130) = 27;
  if ( !InterlockedDecrement((volatile LONG *)(v99 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v99)(v99, 1);
  v100 = operator new(0xE8u);
  v125 = v100;
  LOBYTE(v130) = 35;
  if ( v100 )
  {
    NiNode::NiNode((NiNode *)v100, 0);
    v102 = v101;
  }
  else
  {
    v102 = 0;
  }
  v103 = v1->m_spGroundCollidee.m_pObject;
  LOBYTE(v130) = 27;
  if ( v103 != (NiNode *)v102 )
  {
    if ( v103
      && !InterlockedDecrement((volatile LONG *)&v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v103 )
      v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v103, 1u);
    v1->m_spGroundCollidee.m_pObject = (NiNode *)v102;
    if ( v102 )
      InterlockedIncrement((volatile LONG *)(v102 + 4));
  }
  v104 = operator new(0xE8u);
  v125 = v104;
  LOBYTE(v130) = 36;
  if ( v104 )
  {
    NiNode::NiNode((NiNode *)v104, 0);
    v106 = v105;
  }
  else
  {
    v106 = 0;
  }
  v107 = v1->m_spGroundObjectCollidee.m_pObject;
  LOBYTE(v130) = 27;
  if ( v107 != (NiNode *)v106 )
  {
    if ( v107
      && !InterlockedDecrement((volatile LONG *)&v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v107 )
      v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v107, 1u);
    v1->m_spGroundObjectCollidee.m_pObject = (NiNode *)v106;
    if ( v106 )
      InterlockedIncrement((volatile LONG *)(v106 + 4));
  }
  v108 = operator new(0xE8u);
  v125 = v108;
  LOBYTE(v130) = 37;
  if ( v108 )
  {
    NiNode::NiNode((NiNode *)v108, 0);
    v110 = v109;
  }
  else
  {
    v110 = 0;
  }
  v111 = v1->m_spBuildingCollidee.m_pObject;
  LOBYTE(v130) = 27;
  if ( v111 != (NiNode *)v110 )
  {
    if ( v111
      && !InterlockedDecrement((volatile LONG *)&v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v111 )
      v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v111, 1u);
    v1->m_spBuildingCollidee.m_pObject = (NiNode *)v110;
    if ( v110 )
      InterlockedIncrement((volatile LONG *)(v110 + 4));
  }
  v112 = operator new(0xE8u);
  v125 = v112;
  LOBYTE(v130) = 38;
  if ( v112 )
  {
    NiNode::NiNode((NiNode *)v112, 0);
    v114 = v113;
  }
  else
  {
    v114 = 0;
  }
  v115 = v1->m_spUseCameraCollidee.m_pObject;
  LOBYTE(v130) = 27;
  if ( v115 != (NiNode *)v114 )
  {
    if ( v115
      && !InterlockedDecrement((volatile LONG *)&v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v115 )
      v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v115, 1u);
    v1->m_spUseCameraCollidee.m_pObject = (NiNode *)v114;
    if ( v114 )
      InterlockedIncrement((volatile LONG *)(v114 + 4));
  }
  v116 = (int)&v1->m_kExtraLightScene[0].spLightScene;
  v129 = (NiNode *)30;
  do
  {
    *(_DWORD *)(v116 - 8) = 0;
    v117 = *(_DWORD *)v116;
    if ( *(_DWORD *)v116 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v117 + 4)) && v117 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v117)(v117, 1);
      *(_DWORD *)v116 = 0;
    }
    v118 = *(_DWORD *)(v116 - 4);
    if ( v118 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v118 + 4)) && v118 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v118)(v118, 1);
      *(_DWORD *)(v116 - 4) = 0;
    }
    v116 += 12;
    v129 = (NiNode *)((char *)v129 - 1);
  }
  while ( v129 );
  v119 = operator new(0x2Cu);
  v125 = v119;
  LOBYTE(v130) = 39;
  if ( v119 )
    CWorldConfig::CWorldConfig((CWorldConfig *)v119);
  else
    v120 = 0;
  v1->m_pWorldConfig = v120;
  v121 = (int)v128;
  LOBYTE(v130) = 20;
  if ( !InterlockedDecrement((volatile LONG *)&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v121)(v121, 1);
  v122 = element.m_pObject;
  LOBYTE(v130) = 16;
  if ( !InterlockedDecrement((volatile LONG *)&element.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v122->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v122, 1u);
  v123 = spkAlphaProp.m_pObject;
  v130 = -1;
  if ( !InterlockedDecrement((volatile LONG *)&spkAlphaProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v123, 1u);
  return 1;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 9794FC: using guessed type int (__thiscall *NiFogProperty___vftable_)(void *p, char);
// 984FD4: using guessed type int (__thiscall *NiZBufferProperty___vftable_)(void *p, char);
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// B6DFFC: using guessed type int NiColor__BLACK;
// B6E000: using guessed type int dword_B6E000;
// B6E004: using guessed type int dword_B6E004;

//----- (00687720) --------------------------------------------------------
void __thiscall World::TerminateScene(World *this)
{
  World *v1; // esi@1
  unsigned int v2; // eax@1
  NiNode *v3; // edx@2
  NiNode *v4; // edi@5
  NiNode *v5; // edi@10
  NiNode *v6; // edi@15
  NiNode *v7; // edi@20
  int v8; // edi@25
  int v9; // ebx@26
  int v10; // ebx@31
  NiNode *v11; // edi@37
  NiNode *v12; // edi@42
  NiNode *v13; // edi@47
  NiNode *v14; // edi@52
  NiSortAdjustNode *v15; // edi@57
  NiNode *v16; // edi@62
  NiNode *v17; // edi@67
  NiNode *v18; // edi@72
  NiNode *v19; // edi@77
  NiNode *v20; // edi@82
  NiSortAdjustNode *v21; // edi@87
  NiNode *v22; // edi@92
  NiNode *v23; // edi@97
  NiNode *v24; // edi@102
  NiNode *v25; // edi@107
  NiNode *v26; // edi@112
  NiNode *v27; // edi@117
  NiNode *v28; // edi@122
  NiNode *v29; // edi@127
  void *v30; // ebx@128
  void *v31; // edi@133
  CWorldConfig *v32; // ecx@135
  signed int v33; // [sp+14h] [bp-4h]@25

  v1 = this;
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Erase(
    &this->m_setChar.baseclass_0,
    this->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent);
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  NsMakeQuadScene::SetData(&v1->kQaudSceneMakerAni, 0, 0, 0.0, 0);
  NsMakeQuadScene::SetData(&v1->kQaudSceneMakerNotAni, 0, 0, 0.0, 0);
  v2 = 0;
  if ( v1->m_kCullUPdateData.kCheckedNodes.m_uiSize > 0 )
  {
    do
    {
      v3 = v1->m_kCullUPdateData.kCheckedNodes.m_pBase[v2].m_pObject;
      if ( v3 )
        v3->baseclass_0.m_uFlags |= 2u;
      ++v2;
    }
    while ( v2 < v1->m_kCullUPdateData.kCheckedNodes.m_uiSize );
  }
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_kCullUPdateData);
  v4 = v1->m_spGroundCollidee.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spGroundCollidee.m_pObject = 0;
  }
  v5 = v1->m_spGroundObjectCollidee.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spGroundObjectCollidee.m_pObject = 0;
  }
  v6 = v1->m_spUseCameraCollidee.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spUseCameraCollidee.m_pObject = 0;
  }
  v7 = v1->m_spBuildingCollidee.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v1->m_spBuildingCollidee.m_pObject = 0;
  }
  v8 = (int)&v1->m_kExtraLightScene[0].spScene;
  v33 = 30;
  do
  {
    v9 = *(_DWORD *)(v8 + 4);
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
      *(_DWORD *)(v8 + 4) = 0;
    }
    v10 = *(_DWORD *)v8;
    if ( *(_DWORD *)v8 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
      *(_DWORD *)v8 = 0;
    }
    *(_DWORD *)(v8 - 4) = 0;
    v8 += 12;
    --v33;
  }
  while ( v33 );
  v11 = v1->m_spCharScene.m_pObject;
  if ( v11 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v1->m_spCharScene.m_pObject = 0;
  }
  v12 = v1->m_spDropItemScene.m_pObject;
  if ( v12 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    v1->m_spDropItemScene.m_pObject = 0;
  }
  v13 = v1->m_spGroundScene.m_pObject;
  if ( v13 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v13 )
      v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    v1->m_spGroundScene.m_pObject = 0;
  }
  v14 = v1->m_spGroundObject.m_pObject;
  if ( v14 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v14 )
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    v1->m_spGroundObject.m_pObject = 0;
  }
  v15 = v1->m_spGroundTerrain.m_pObject;
  if ( v15 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v15 )
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    v1->m_spGroundTerrain.m_pObject = 0;
  }
  v16 = v1->m_spNormalLightScene.m_pObject;
  if ( v16 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v16 )
      v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v16, 1u);
    v1->m_spNormalLightScene.m_pObject = 0;
  }
  v17 = v1->m_spAbstateCharScene.m_pObject;
  if ( v17 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    v1->m_spAbstateCharScene.m_pObject = 0;
  }
  v18 = v1->m_spMinihouseScene.m_pObject;
  if ( v18 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v18 )
      v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v18, 1u);
    v1->m_spMinihouseScene.m_pObject = 0;
  }
  v19 = v1->m_spDirectionalLightScene.m_pObject;
  if ( v19 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v19 )
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
    v1->m_spDirectionalLightScene.m_pObject = 0;
  }
  v20 = v1->m_spShadowScene.m_pObject;
  if ( v20 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v20 )
      v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
    v1->m_spShadowScene.m_pObject = 0;
  }
  v21 = v1->m_spBuildingScene.m_pObject;
  if ( v21 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v21 )
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
    v1->m_spBuildingScene.m_pObject = 0;
  }
  v22 = v1->m_spAllGroundScene.m_pObject;
  if ( v22 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v22 )
      v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
    v1->m_spAllGroundScene.m_pObject = 0;
  }
  v23 = v1->m_spBDAni.m_pObject;
  if ( v23 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v23 )
      v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
    v1->m_spBDAni.m_pObject = 0;
  }
  v24 = v1->m_spBDNotAni.m_pObject;
  if ( v24 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v24 )
      v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
    v1->m_spBDNotAni.m_pObject = 0;
  }
  v25 = v1->m_spWeatherEffectScene.m_pObject;
  if ( v25 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v25 )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    v1->m_spWeatherEffectScene.m_pObject = 0;
  }
  v26 = v1->m_spWaterScene.m_pObject;
  if ( v26 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v26 )
      v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
    v1->m_spWaterScene.m_pObject = 0;
  }
  v27 = v1->m_spEffectScene.m_pObject;
  if ( v27 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v27 )
      v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v27, 1u);
    v1->m_spEffectScene.m_pObject = 0;
  }
  v28 = v1->m_spSkyScene.m_pObject;
  if ( v28 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v28 )
      v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
    v1->m_spSkyScene.m_pObject = 0;
  }
  v29 = v1->m_spWorldScene.m_pObject;
  if ( v29 )
  {
    v30 = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v29 )
      v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
    v1->m_spWorldScene.m_pObject = 0;
  }
  else
  {
    v30 = 0;
  }
  NsMergePortal::Clear(&v1->m_kMergePortal);
  v31 = v1->m_pkTerrain;
  if ( v31 != v30 )
  {
    PgNsTerrain::_PgNsTerrain(v1->m_pkTerrain);
    operator delete(v31);
  }
  v32 = v1->m_pWorldConfig;
  v1->m_pkTerrain = (PgNsTerrain *)v30;
  if ( v32 != v30 )
    ((void (__stdcall *)(signed int))v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v1->m_pWorldConfig = (CWorldConfig *)v30;
}

//----- (00687CB0) --------------------------------------------------------
bool __thiscall World::AttachChar(World *this, Char *pkChar)
{
  bool v2; // al@2
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *v3; // esi@4
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v4; // eax@4
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >,bool> result; // [sp+0h] [bp-8h]@4

  if ( pkChar && (pkChar = (Char *)pkChar->m_spScene.m_pObject) != 0 )
  {
    v3 = (std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *)&this->m_setChar;
    v4 = std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Buynode<NiNode____>(
           &this->m_setChar.baseclass_0.baseclass_0,
           (NiNode **)&pkChar);
    std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Linsert(
      v3,
      &result,
      v4,
      0);
    v2 = 1;
  }
  else
  {
    v2 = 0;
  }
  return v2;
}

//----- (00687D00) --------------------------------------------------------
void __thiscall World::RemoveAllChar(World *this)
{
  World *v1; // esi@1

  v1 = this;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&this->m_spCharScene.m_pObject->m_kChildren);
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Erase(
    &v1->m_setChar.baseclass_0,
    v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent);
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
}

//----- (00687D50) --------------------------------------------------------
void __thiscall World::ClearScene(World *this)
{
  World *v1; // esi@1
  NiNode *v2; // ecx@2
  int v3; // edi@4
  NiNode *v4; // edi@7
  void *v5; // edi@12
  void *v6; // eax@14
  PgNsTerrain *v7; // eax@15
  int v8; // [sp+0h] [bp-10h]@3
  int v9; // [sp+Ch] [bp-4h]@14

  v1 = this;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&this->m_spCharScene.m_pObject->m_kChildren);
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Erase(
    &v1->m_setChar.baseclass_0,
    v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent);
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setChar.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spDropItemScene.m_pObject->m_kChildren);
  DropItemMgr::RemoveAll(&g_kDropItemMgr);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spMinihouseScene.m_pObject->m_kChildren);
  CMiniHouseMgr::RemoveAll((CMiniHouseMgr *)&g_kMiniHouseMgr, 0);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spShadowScene.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spGroundObject.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spGroundTerrain.m_pObject->baseclass_0.m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spBDAni.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spBDNotAni.m_pObject->m_kChildren);
  if ( v1->m_spWeatherEffectScene.m_pObject )
  {
    v2 = v1->m_spEffectScene.m_pObject;
    if ( v2 )
    {
      ((void (__stdcall *)(int *, NiNode *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v8,
        v1->m_spWeatherEffectScene.m_pObject);
      if ( v8 )
      {
        v3 = v8;
        if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
        {
          if ( v3 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
        }
      }
    }
    v4 = v1->m_spWeatherEffectScene.m_pObject;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      v1->m_spWeatherEffectScene.m_pObject = 0;
    }
  }
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spSkyScene.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spWaterScene.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spGroundCollidee.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spGroundObjectCollidee.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spUseCameraCollidee.m_pObject->m_kChildren);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v1->m_spBuildingCollidee.m_pObject->m_kChildren);
  v5 = v1->m_pkTerrain;
  if ( v5 )
  {
    PgNsTerrain::_PgNsTerrain(v1->m_pkTerrain);
    operator delete(v5);
  }
  v1->m_pkTerrain = 0;
  v6 = operator new(0x1A8u);
  v8 = (int)v6;
  v9 = 0;
  if ( v6 )
  {
    PgNsTerrain::PgNsTerrain((PgNsTerrain *)v6);
    v1->m_pkTerrain = v7;
  }
  else
  {
    v1->m_pkTerrain = 0;
  }
}

//----- (00687FA0) --------------------------------------------------------
void __thiscall World::UpdateBuildingScene(World *this, float fTime)
{
  World *v2; // edi@1
  int v3; // ecx@1
  std::_List_iterator<std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > > v4; // eax@1
  unsigned int v5; // esi@4
  std::_List_iterator<std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > > v6; // eax@4
  int v7; // ecx@5
  int v8; // eax@5
  int v9; // eax@10
  int *v10; // eax@12
  int v11; // eax@14
  World::AniObjectType *v12; // eax@16
  float v13; // edx@16
  NiBound *v14; // eax@17
  std::_List_iterator<std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > > v15; // eax@18
  int v16; // eax@22
  unsigned int v17; // eax@22
  NiNode *v18; // ecx@23
  NiNode *v19; // ST08_4@26
  NiBound kBound1; // [sp+24h] [bp-74h]@5
  NiBound kBound2; // [sp+34h] [bp-64h]@5
  FindCullUpdateNode kFindCullUpdate; // [sp+44h] [bp-54h]@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _First; // [sp+50h] [bp-48h]@18
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Last; // [sp+54h] [bp-44h]@18
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObj result; // [sp+58h] [bp-40h]@18
  World::AniObjectType kAniObjectType; // [sp+60h] [bp-38h]@16
  char v27; // [sp+68h] [bp-30h]@18
  char v28; // [sp+6Ch] [bp-2Ch]@18
  int v29; // [sp+70h] [bp-28h]@1
  std::_List_iterator<std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > > iterCur; // [sp+74h] [bp-24h]@4
  int v31; // [sp+78h] [bp-20h]@13
  int v32; // [sp+7Ch] [bp-1Ch]@10
  std::_List_iterator<std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > > iterAniObj; // [sp+80h] [bp-18h]@3
  unsigned int pAvObject; // [sp+84h] [bp-14h]@4
  char a; // [sp+8Ah] [bp-Eh]@20
  char b; // [sp+8Bh] [bp-Dh]@20
  int v37; // [sp+94h] [bp-4h]@26

  v2 = this;
  v3 = *(_DWORD *)&this->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *(std::_List_iterator<std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > > *)v3;
  v29 = v3;
  if ( v4 != v3 )
  {
    while ( 1 )
    {
      v5 = *(_DWORD *)(*(_DWORD *)&v4 + 8);
      iterCur = v4;
      v6 = (std::_List_iterator<std::_List_val<NiAVObject *,std::allocator<NiAVObject *> > >)**(_DWORD **)&v4;
      pAvObject = v5;
      iterAniObj = v6;
      if ( v5 )
      {
        LODWORD(kBound1.m_kCenter.x) = *(_DWORD *)(v5 + 36);
        LODWORD(kBound1.m_kCenter.y) = *(_DWORD *)(v5 + 40);
        LODWORD(kBound1.m_kCenter.z) = *(_DWORD *)(v5 + 44);
        LODWORD(kBound1.m_fRadius) = *(_DWORD *)(v5 + 48);
        LODWORD(kBound2.m_kCenter.x) = *(_DWORD *)(v5 + 36);
        LODWORD(kBound2.m_kCenter.y) = *(_DWORD *)(v5 + 40);
        LODWORD(kBound2.m_kCenter.z) = *(_DWORD *)(v5 + 44);
        v7 = (int)v2->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead;
        LODWORD(kBound2.m_fRadius) = *(_DWORD *)(v5 + 48);
        v8 = *(_DWORD *)(v7 + 4);
        while ( !*(_BYTE *)(v8 + 33) )
        {
          if ( *(_DWORD *)(v8 + 12) >= v5 )
          {
            v7 = v8;
            v8 = *(_DWORD *)v8;
          }
          else
          {
            v8 = *(_DWORD *)(v8 + 8);
          }
        }
        v9 = (int)v2->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead;
        v32 = v7;
        if ( v7 == v9 || v5 < *(_DWORD *)(v7 + 12) )
        {
          v31 = v9;
          v10 = &v31;
        }
        else
        {
          v10 = &v32;
        }
        v11 = *v10;
        if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v11 != v2->m_mapBound.baseclass_0.baseclass_0.baseclass_0._Myhead )
        {
          LODWORD(kBound2.m_kCenter.x) = *(_DWORD *)(v11 + 16);
          LODWORD(kBound2.m_kCenter.y) = *(_DWORD *)(v11 + 20);
          LODWORD(kBound2.m_kCenter.z) = *(_DWORD *)(v11 + 24);
          LODWORD(kBound2.m_fRadius) = *(_DWORD *)(v11 + 28);
        }
        v12 = std::map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>::operator__(
                &v2->m_mapBoundTime,
                (NiAVObject *const *)&pAvObject);
        v13 = v12->fStartTime;
        kAniObjectType.fMaxTime = v12->fMaxTime;
        kAniObjectType.fStartTime = v13;
        if ( Timer::ms_fCurTime - v13 >= kAniObjectType.fMaxTime )
        {
          *(_DWORD *)(v5 + 36) = (_DWORD)kBound2.m_kCenter.x;
          *(_DWORD *)(v5 + 40) = LODWORD(kBound2.m_kCenter.y);
          *(_DWORD *)(v5 + 44) = LODWORD(kBound2.m_kCenter.z);
          *(_DWORD *)(v5 + 48) = LODWORD(kBound2.m_fRadius);
          NsMakeQuadScene::AddObject(&v2->kQaudSceneMakerAni, (NiAVObject *)v5);
          std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Eqrange(
            &v2->m_mapBoundTime.baseclass_0,
            &result,
            (NiAVObject *const *)&pAvObject);
          std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
            &v2->m_mapBoundTime.baseclass_0,
            (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&v28,
            result.baseclass_0.first.baseclass_0,
            result.baseclass_0.second.baseclass_0);
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Eqrange(
            &v2->m_mapBound.baseclass_0,
            (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<Ni *)&_First,
            (NiAVObject *const *)&pAvObject);
          std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::erase(
            &v2->m_mapBound.baseclass_0,
            (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)&v27,
            _First,
            _Last);
          v15 = iterCur;
          if ( iterCur != *(_DWORD *)&v2->m_vecAniObject.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
          {
            **(_DWORD **)(*(_DWORD *)&iterCur + 4) = **(_DWORD **)&iterCur;
            *(_DWORD *)(**(_DWORD **)&v15 + 4) = *(_DWORD *)(*(_DWORD *)&v15 + 4);
            operator delete(*(void **)&v15);
            --v2->m_vecAniObject.baseclass_0.baseclass_0._Mysize;
          }
          ((void (__stdcall *)(char *, _DWORD, char *))v2->m_spBDAni.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[19].__vecDelDtor)(
            &a,
            0,
            &b);
          NiAVObject::UpdateProperties(&v2->m_spBDAni.m_pObject->baseclass_0);
          NiAVObject::UpdateEffects(&v2->m_spBDAni.m_pObject->baseclass_0);
          NiAVObject::Update(&v2->m_spBDAni.m_pObject->baseclass_0, 0.0, 1);
          ((void (*)(void))v2->m_spBDAni.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)();
        }
        else
        {
          NiBound::Merge(&kBound1, &kBound2);
          v14 = std::map<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>>::operator__(
                  &v2->m_mapBound,
                  (NiAVObject *const *)&pAvObject);
          LODWORD(v14->m_kCenter.x) = (_DWORD)kBound1.m_kCenter.x;
          v14->m_kCenter.y = kBound1.m_kCenter.y;
          v14->m_kCenter.z = kBound1.m_kCenter.z;
          v14->m_fRadius = kBound1.m_fRadius;
        }
      }
      if ( iterAniObj == v29 )
        break;
      v4 = iterAniObj;
    }
  }
  v2->m_kCullUPdateData.fRadius = 2000.0;
  v16 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  LODWORD(v2->m_kCullUPdateData.pos3Center.x) = *(_DWORD *)v16;
  LODWORD(v2->m_kCullUPdateData.pos3Center.y) = *(_DWORD *)(v16 + 4);
  LODWORD(v2->m_kCullUPdateData.pos3Center.z) = *(_DWORD *)(v16 + 8);
  v17 = 0;
  if ( v2->m_kCullUPdateData.kCheckedNodes.m_uiSize )
  {
    do
    {
      v18 = v2->m_kCullUPdateData.kCheckedNodes.m_pBase[v17].m_pObject;
      if ( v18 )
        v18->baseclass_0.m_uFlags |= 2u;
      ++v17;
    }
    while ( v17 < v2->m_kCullUPdateData.kCheckedNodes.m_uiSize );
  }
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_kCullUPdateData);
  kFindCullUpdate.baseclass_0.m_pCallBack = 0;
  kFindCullUpdate.baseclass_0.m_nCurLevel = -1;
  kFindCullUpdate.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindCullUpdateNode::_vftable_;
  v19 = (NiNode *)v2->m_spBuildingScene.m_pObject;
  v37 = 0;
  Ns_TourScene::TourScene(&kFindCullUpdate.baseclass_0, v19, &NiNode::m_RTTI, &v2->m_kCullUPdateData);
  NiAVObject::UpdateSelected(&v2->m_spBuildingScene.m_pObject->baseclass_0.baseclass_0, fTime);
}
// 9C6944: using guessed type int (__stdcall *FindCullUpdateNode___vftable_)(float fNodeRadius, int _pData);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006882A0) --------------------------------------------------------
bool __thiscall World::DetachChar(World *this, Char *pkChar)
{
  World *v2; // ebx@1
  bool v3; // al@2
  NiNode *v4; // esi@3
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA result; // [sp+0h] [bp-14h]@4
  int v6; // [sp+10h] [bp-4h]@4

  v2 = this;
  if ( pkChar && (v4 = pkChar->m_spScene.m_pObject) != 0 )
  {
    pkChar = (Char *)pkChar->m_spScene.m_pObject;
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v6 = 0;
    std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(
      (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)&v2->m_setChar,
      &result,
      (NiAVObject *const *)&pkChar);
    std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::erase(
      &v2->m_setChar.baseclass_0,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)&result.baseclass_0.second,
      *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)&result,
      *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)&result.baseclass_0.second.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3 = 1;
  }
  else
  {
    v3 = 0;
  }
  return v3;
}

//----- (00688370) --------------------------------------------------------
void __thiscall World::UpdateScene(World *this, float fTime)
{
  World *v2; // edi@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v4; // esi@1
  NiTArray<NiPointer<NiGeometry> > *v5; // ecx@1
  int v6; // edi@1
  signed int v7; // ebx@1
  Char **v8; // ecx@5
  char *v9; // edi@5
  void (*v10)(void); // edx@9
  void *v11; // eax@9
  void *v12; // esi@9
  NiPlane *v13; // edi@11
  signed int v14; // ebx@11
  int v15; // edi@13
  int v16; // eax@16
  float v17; // ecx@16
  float v18; // edx@16
  float v19; // eax@16
  char v20; // bl@19
  unsigned int v21; // ecx@19
  char *v22; // edx@19
  double v23; // st4@19
  int v24; // ebx@29
  int v25; // edi@29
  int v26; // edx@31
  int v27; // eax@32
  int v28; // eax@33
  int v29; // eax@34
  unsigned int v30; // ebx@36
  PartyMemberInfo *v31; // eax@37
  int v32; // ecx@37
  int v33; // edx@37
  int v34; // ecx@37
  int v35; // eax@37
  int v36; // edx@37
  int (__thiscall *v37)(_DWORD); // eax@37
  int v38; // eax@43
  float v39; // ecx@44
  float v40; // edx@44
  int v41; // eax@45
  World *v42; // ebx@46
  CMagicCircleController *v43; // ecx@46
  NiPoint3 *v44; // eax@46
  CMagicCircleController *v45; // ecx@47
  double v46; // st7@47
  unsigned int v47; // edi@48
  signed int v48; // eax@51
  int v49; // ecx@51
  signed int v50; // edi@54
  int v51; // eax@54
  NiNode *v52; // ebx@57
  void *(__thiscall *v53)(NiRefObject *, unsigned int); // edx@57
  void *v54; // eax@59
  float v55; // eax@60
  int v56; // eax@62
  int v57; // esi@62
  NiNode **v58; // ebx@62
  float v59; // eax@67
  void *v60; // eax@69
  float v61; // eax@70
  NiNode *v62; // esi@72
  char *v63; // edi@72
  float v64; // eax@77
  void *v65; // eax@79
  int v66; // eax@80
  int v67; // esi@80
  int v68; // eax@82
  double v69; // st7@82
  signed int v70; // edx@82
  double v71; // st6@82
  double v72; // st6@82
  int v73; // edx@82
  World *v74; // eax@82
  void (__thiscall *v75)(_DWORD); // edx@85
  int v76; // eax@90
  float v77; // ecx@90
  float v78; // edx@90
  float v79; // eax@90
  double v80; // st7@90
  double v81; // st7@90
  double v82; // st7@91
  double v83; // st7@94
  NiCamera *v84; // edi@97
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v85; // eax@97
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > v86; // ecx@98
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > j; // eax@99
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > i; // eax@102
  int v89; // ecx@110
  signed int v90; // eax@110
  signed int v91; // ebx@110
  int v92; // edx@113
  int v93; // eax@113
  double v94; // st7@113
  Char **v95; // eax@113
  World *v96; // esi@114
  float v97; // ecx@114
  float v98; // ecx@114
  float v99; // ecx@114
  float v100; // ecx@114
  CharSorter v101; // [sp-3Ch] [bp-1ACh]@113
  float v102; // [sp+0h] [bp-170h]@114
  signed int v103; // [sp+4h] [bp-16Ch]@13
  unsigned int v104; // [sp+8h] [bp-168h]@1
  int v105; // [sp+18h] [bp-158h]@113
  float v106; // [sp+1Ch] [bp-154h]@113
  float v107; // [sp+20h] [bp-150h]@113
  int v108; // [sp+30h] [bp-140h]@113
  int v109; // [sp+34h] [bp-13Ch]@113
  int v110; // [sp+38h] [bp-138h]@113
  NiColor kNiColor; // [sp+58h] [bp-118h]@82
  NiPoint3 kCenter; // [sp+64h] [bp-10Ch]@16
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v113; // [sp+70h] [bp-100h]@1
  NiPoint3 pos3Dir; // [sp+74h] [bp-FCh]@90
  float v115; // [sp+80h] [bp-F0h]@90
  float v116; // [sp+84h] [bp-ECh]@90
  float v117; // [sp+88h] [bp-E8h]@90
  float v118; // [sp+8Ch] [bp-E4h]@46
  float v119; // [sp+90h] [bp-E0h]@46
  float v120; // [sp+94h] [bp-DCh]@44
  NiPoint3 pos3TargetPos; // [sp+98h] [bp-D8h]@90
  float v122; // [sp+A4h] [bp-CCh]@90
  float v123; // [sp+A8h] [bp-C8h]@90
  float v124; // [sp+ACh] [bp-C4h]@90
  float v125; // [sp+B0h] [bp-C0h]@90
  float v126; // [sp+B4h] [bp-BCh]@90
  float v127; // [sp+B8h] [bp-B8h]@90
  void *pkChar; // [sp+BCh] [bp-B4h]@9
  NiNode *pObject; // [sp+C0h] [bp-B0h]@9
  AbStateInfectee::AbstateColor kColor; // [sp+C4h] [bp-ACh]@28
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > iterCur; // [sp+C8h] [bp-A8h]@1
  float fDistance; // [sp+CCh] [bp-A4h]@14
  float fRadiusRusult; // [sp+D0h] [bp-A0h]@13
  World *thisa; // [sp+D4h] [bp-9Ch]@1
  char bCheckMagicCircleInTypeChar; // [sp+DBh] [bp-95h]@33
  double v136; // [sp+DCh] [bp-94h]@47
  signed int v137; // [sp+E0h] [bp-90h]@46
  NiFrustumPlanes kPlanes; // [sp+E4h] [bp-8Ch]@11
  char acname[21]; // [sp+148h] [bp-28h]@37
  unsigned int v140; // [sp+160h] [bp-10h]@1
  int v141; // [sp+16Ch] [bp-4h]@59
  int v142; // [sp+170h] [bp+0h]@1

  v140 = (unsigned int)&v142 ^ __security_cookie;
  v104 = (unsigned int)&v142 ^ __security_cookie;
  v2 = this;
  v3 = this->m_setChar.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)v3->_Left;
  v5 = (NiTArray<NiPointer<NiGeometry> > *)&this->m_spCharScene.m_pObject->m_kChildren;
  thisa = v2;
  v113 = v3;
  iterCur = v4;
  NiTArray<NiPointer<NiNode>>::RemoveAll(v5);
  v6 = (int)&v2->m_kExtraLightScene[0].spScene;
  v7 = 30;
  do
  {
    if ( *(_DWORD *)v6 )
      NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)(*(_DWORD *)v6 + 176));
    v6 += 12;
    --v7;
  }
  while ( v7 );
  v8 = thisa->m_vecNearMob.baseclass_0._Mylast;
  v9 = *(char **)&thisa->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (signed int)((char *)thisa->m_vecNearMob.baseclass_0._Mylast - v9) >> 2 && (Char **)v9 != v8 )
  {
    memmove(v9, (char *)v8, 0);
    thisa->m_vecNearMob.baseclass_0._Mylast = (Char **)v9;
  }
  if ( (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v4 != v113 )
  {
    while ( 1 )
    {
      v10 = (void (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect;
      pObject = *(NiNode **)(*(_DWORD *)&iterCur + 12);
      v10();
      v11 = CharMgr::GetCharByNodePtr(&g_kCharMgr, pObject);
      v12 = v11;
      pkChar = v11;
      if ( v11 )
      {
        if ( Char::IsUpdate((Char *)v11) )
          break;
      }
LABEL_97:
      v84 = pkCamera;
      v85 = iterCur;
      if ( !*(_BYTE *)(*(_DWORD *)&iterCur + 17) )
      {
        v86 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&iterCur + 8);
        if ( *(_BYTE *)(*(_DWORD *)&v86 + 17) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&iterCur + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 17);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( iterCur != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            iterCur = i;
          }
          iterCur = i;
        }
        else
        {
          for ( j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)**(_DWORD **)&v86;
                !*(_BYTE *)(*(_DWORD *)&j + 17);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >)**(_DWORD **)&j )
            v86 = j;
          iterCur = v86;
        }
        v85 = iterCur;
      }
      if ( (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v85 == v113 )
        goto LABEL_110;
    }
    v13 = (NiPlane *)&kPlanes;
    v14 = 5;
    do
    {
      NiPlane::NiPlane(v13);
      ++v13;
      --v14;
    }
    while ( v14 >= 0 );
    v103 = (signed int)&thisa->m_spCamera.m_pObject->baseclass_0.m_kWorld;
    kPlanes.m_uiActivePlanes = 63;
    NiFrustumPlanes::Set(&kPlanes, &thisa->m_kWorldFrustum, (NiTransform *)v103);
    kPlanes.m_uiActivePlanes = 63;
    fRadiusRusult = 30.0;
    v15 = *((_DWORD *)v12 + 175);
    if ( v15 )
    {
      fDistance = *(float *)(v15 + 48);
      if ( fDistance > 30.0 )
        fRadiusRusult = fDistance;
    }
    v16 = (*(int (__thiscall **)(void *, unsigned int))(*(_DWORD *)v12 + 196))(v12, v104);
    LODWORD(v17) = *(_DWORD *)v16;
    LODWORD(v18) = *(_DWORD *)(v16 + 4);
    LODWORD(v19) = *(_DWORD *)(v16 + 8);
    kCenter.x = v17;
    kCenter.y = v18;
    kCenter.z = v19;
    if ( v15 )
    {
      fDistance = *(float *)(v15 + 48);
      if ( 0.0 != fDistance )
        kCenter.z = *(float *)(v15 + 44);
    }
    v20 = 0;
    v21 = 0;
    fDistance = -fRadiusRusult;
    v22 = (char *)&kPlanes.m_akCullingPlanes[0].m_kNormal.z;
    v23 = fDistance;
    while ( 1 )
    {
      fDistance = *((float *)v22 - 2) * kCenter.x + *((float *)v22 - 1) * kCenter.y + *(float *)v22 * kCenter.z;
      fDistance = fDistance - *((float *)v22 + 1);
      if ( fDistance <= v23 )
        break;
      ++v21;
      v22 += 16;
      if ( v21 >= 6 )
        goto LABEL_24;
    }
    v20 = 1;
LABEL_24:
    if ( *((_BYTE *)v12 + 2924) || v20 )
    {
      *((_BYTE *)v12 + 2133) = *((_BYTE *)v12 + 2132);
      *((_BYTE *)v12 + 2132) = 1;
    }
    else
    {
      *((_BYTE *)v12 + 2133) = *((_BYTE *)v12 + 2132);
      *((_BYTE *)v12 + 2132) = 0;
    }
    (*(void (__thiscall **)(void *, AbStateInfectee::AbstateColor *))(*(_DWORD *)v12 + 24))(v12, &kColor);
    if ( !CMagicCircleController::IsEnable(thisa->m_spMagicCircleController.m_pObject)
      || (v24 = LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0]),
          v25 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
          !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                              LOWORD(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[10].dwEffectIndex[0])))
      || (unsigned __int16)v24 > *(_WORD *)(v25 + 200)
      || (v26 = *(_DWORD *)(v25 + 196), !*(_DWORD *)(v26 + 4 * v24))
      || (v27 = *(_DWORD *)(v26 + 4 * v24)) == 0 )
      goto LABEL_49;
    v28 = *(_DWORD *)(v27 + 188);
    bCheckMagicCircleInTypeChar = 0;
    if ( v28 )
    {
      v29 = v28 - 1;
      if ( !v29 )
      {
        bCheckMagicCircleInTypeChar = 0;
        goto LABEL_43;
      }
      if ( v29 != 1 || (v30 = 0, !g_kParty.m_uiTotalMember) )
        goto LABEL_43;
      while ( 1 )
      {
        v31 = Party::GetMemberInfo(&g_kParty, v30);
        v32 = *(_DWORD *)&v31->m_kCharID.n5_name[0];
        *(_DWORD *)&acname[4] = *(_DWORD *)&v31->m_kCharID.n5_name[4];
        v33 = *(_DWORD *)&v31->m_kCharID.n5_name[12];
        *(_DWORD *)acname = v32;
        v34 = *(_DWORD *)&v31->m_kCharID.n5_name[8];
        v35 = *(_DWORD *)&v31->m_kCharID.n5_name[16];
        *(_DWORD *)&acname[12] = v33;
        v36 = *(_DWORD *)v12;
        *(_DWORD *)&acname[8] = v34;
        *(_DWORD *)&acname[16] = v35;
        v37 = *(int (__thiscall **)(_DWORD))(v36 + 84);
        acname[20] = 0;
        if ( !strcmp((const char *)v37(v12), acname) )
          break;
        ++v30;
        if ( v30 >= g_kParty.m_uiTotalMember )
          goto LABEL_43;
      }
    }
    else
    {
      if ( MainChar::GetTargetType((MainChar *)g_pkMainChar, (Char *)v12) != 3 )
        goto LABEL_43;
    }
    bCheckMagicCircleInTypeChar = 1;
LABEL_43:
    v38 = *((_DWORD *)v12 + 227);
    if ( v38 )
    {
      LODWORD(v39) = *(_DWORD *)(v38 + 140);
      LODWORD(v40) = *(_DWORD *)(v38 + 144);
      LODWORD(v120) = *(_DWORD *)(v38 + 148);
    }
    else
    {
      v41 = (*(int (__thiscall **)(void *))(*(_DWORD *)v12 + 196))(v12);
      LODWORD(v39) = *(_DWORD *)v41;
      LODWORD(v40) = *(_DWORD *)(v41 + 4);
      v120 = *(float *)(v41 + 8) + 10.0;
    }
    v42 = thisa;
    v118 = v39;
    v43 = thisa->m_spMagicCircleController.m_pObject;
    v119 = v40;
    v44 = CMagicCircleController::GetPos(v43);
    fDistance = v44->x - v118;
    fRadiusRusult = v44->y - v119;
    *(float *)&v137 = v44->z - v120;
    if ( bCheckMagicCircleInTypeChar )
    {
      *(float *)&v137 = fDistance * fDistance + fRadiusRusult * fRadiusRusult + *(float *)&v137 * *(float *)&v137;
      *(float *)&v137 = sqrt(*(float *)&v137);
      v45 = v42->m_spMagicCircleController.m_pObject;
      v136 = *(float *)&v137;
      v46 = CMagicCircleController::GetCircleRadius(v45);
      if ( v46 * 0.5 > v136 )
      {
        v47 = -65536;
        kColor.dwRGB = -65536;
        goto LABEL_51;
      }
    }
LABEL_49:
    v47 = kColor.dwRGB;
    if ( !kColor.dwRGB )
    {
      v52 = thisa->m_spCharScene.m_pObject;
      v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
      v104 = 1;
      v103 = (signed int)pObject;
LABEL_84:
      ((void (__thiscall *)(NiNode *, signed int, unsigned int))v53)(v52, v103, v104);
LABEL_85:
      v75 = *(void (__thiscall **)(_DWORD))(*(_DWORD *)v12 + 560);
      v104 = (unsigned int)v52;
      v75(v12);
      if ( !*((_BYTE *)v12 + 2132)
        && MainChar::GetTargetType((MainChar *)g_pkMainChar, (Char *)v12) == 3
        && !Char::IsNPC((Char *)v12)
        && !*((_BYTE *)v12 + 2488)
        && !Char::IsResource((Char *)v12) )
      {
        v76 = (*(int (__thiscall **)(void *))(*(_DWORD *)v12 + 196))(v12);
        LODWORD(v77) = *(_DWORD *)v76;
        LODWORD(v78) = *(_DWORD *)(v76 + 4);
        LODWORD(v79) = *(_DWORD *)(v76 + 8);
        pos3TargetPos.x = v77;
        v80 = v77 - pkCamera->baseclass_0.m_kWorld.m_Translate.x;
        pos3TargetPos.y = v78;
        pos3TargetPos.z = v79;
        pos3Dir.x = v80;
        pos3Dir.y = v78 - pkCamera->baseclass_0.m_kWorld.m_Translate.y;
        pos3Dir.z = v79 - pkCamera->baseclass_0.m_kWorld.m_Translate.z;
        v115 = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][0];
        v81 = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
        v125 = v115;
        v116 = v81;
        v117 = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
        v126 = v116;
        v127 = v117;
        LODWORD(v122) = (_DWORD)pos3Dir.x;
        v123 = pos3Dir.y;
        v124 = pos3Dir.z;
        *(float *)&v137 = pos3Dir.x * pos3Dir.x + pos3Dir.y * pos3Dir.y + pos3Dir.z * pos3Dir.z;
        *(float *)&v137 = sqrt(*(float *)&v137);
        if ( *(float *)&v137 <= 0.000001 )
        {
          v82 = 0.0;
          v122 = 0.0;
          v123 = 0.0;
        }
        else
        {
          *(float *)&v137 = 1.0 / *(float *)&v137;
          v122 = *(float *)&v137 * pos3Dir.x;
          v123 = *(float *)&v137 * v123;
          v82 = *(float *)&v137 * v124;
        }
        v124 = v82;
        *(float *)&v137 = v115 * v115 + v116 * v116 + v117 * v117;
        *(float *)&v137 = sqrt(*(float *)&v137);
        if ( *(float *)&v137 <= 0.000001 )
        {
          v83 = 0.0;
          v125 = 0.0;
          v126 = 0.0;
        }
        else
        {
          *(float *)&v137 = 1.0 / *(float *)&v137;
          v125 = *(float *)&v137 * v115;
          v126 = *(float *)&v137 * v126;
          v83 = *(float *)&v137 * v127;
        }
        v127 = v83;
        *(float *)&v137 = v125 * v122 + v126 * v123 + v127 * v124;
        JUMPOUT(*(int *)loc_688E6C);
      }
      goto LABEL_97;
    }
    v42 = thisa;
LABEL_51:
    v48 = 0;
    v49 = (int)v42->m_kExtraLightScene;
    do
    {
      if ( v47 == *(_DWORD *)v49 )
      {
        v52 = thisa->m_kExtraLightScene[v48].spScene.m_pObject;
        v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
        v104 = 0;
        v103 = (signed int)pObject;
        goto LABEL_84;
      }
      ++v48;
      v49 += 12;
    }
    while ( v48 < 30 );
    v50 = 0;
    v51 = (int)v42->m_kExtraLightScene;
    while ( *(_DWORD *)v51 )
    {
      ++v50;
      v51 += 12;
      if ( v50 >= 30 )
      {
        v52 = thisa->m_spCharScene.m_pObject;
        v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
        v104 = 1;
        v103 = (signed int)pObject;
        goto LABEL_84;
      }
    }
    v54 = operator new(0xE8u);
    v137 = (signed int)v54;
    v141 = 0;
    if ( v54 )
    {
      NiNode::NiNode((NiNode *)v54, 0);
      fRadiusRusult = v55;
    }
    else
    {
      fRadiusRusult = 0.0;
    }
    v56 = 3 * v50 + 143211;
    v57 = *(_DWORD *)&thisa->m_MiniHouseIndoorMode.m_ManagerMediator.m_ResTableManager.m_mapResModel.baseclass_0.baseclass_0.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[4 * v56];
    v58 = (NiNode **)((char *)thisa + 4 * v56);
    v141 = -1;
    if ( v57 != LODWORD(fRadiusRusult) )
    {
      if ( v57 && !InterlockedDecrement((volatile LONG *)(v57 + 4)) && v57 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v57)(v57, 1);
      v59 = fRadiusRusult;
      *v58 = (NiNode *)LODWORD(fRadiusRusult);
      if ( LODWORD(v59) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v59) + 4));
    }
    v60 = operator new(0xE8u);
    v137 = (signed int)v60;
    v141 = 1;
    if ( v60 )
    {
      NiNode::NiNode((NiNode *)v60, 0);
      fRadiusRusult = v61;
    }
    else
    {
      fRadiusRusult = 0.0;
    }
    v62 = thisa->m_kExtraLightScene[v50].spScene.m_pObject;
    v63 = (char *)thisa + 12 * v50;
    v141 = -1;
    if ( v62 != LODWORD(fRadiusRusult) )
    {
      if ( v62
        && !InterlockedDecrement((volatile LONG *)&v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v62 )
        v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v62, 1u);
      v64 = fRadiusRusult;
      *((_DWORD *)v63 + 143210) = LODWORD(fRadiusRusult);
      if ( LODWORD(v64) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v64) + 4));
    }
    v65 = operator new(0x10Cu);
    v137 = (signed int)v65;
    v141 = 2;
    if ( v65 )
    {
      NiAmbientLight::NiAmbientLight((NiAmbientLight *)v65);
      v67 = v66;
    }
    else
    {
      v67 = 0;
    }
    ++*(_DWORD *)(v67 + 188);
    *(float *)(v67 + 224) = 1.0;
    v68 = *(_DWORD *)(v67 + 188);
    v137 = BYTE1(kColor.dwRGB);
    v69 = (double)(unsigned __int8)kColor.dwRGB / 255.0;
    v70 = BYTE2(kColor.dwRGB);
    ++v68;
    *(_DWORD *)(v67 + 188) = v68++;
    v141 = -1;
    kNiColor.r = v69;
    v71 = (double)v137;
    v137 = v70;
    *(_DWORD *)(v67 + 228) = (_DWORD)kNiColor.r;
    kNiColor.g = v71 / 255.0;
    v72 = (double)v137;
    *(_DWORD *)(v67 + 232) = LODWORD(kNiColor.g);
    kNiColor.b = v72 / 255.0;
    *(_DWORD *)(v67 + 236) = LODWORD(kNiColor.b);
    *(_DWORD *)(v67 + 240) = NiColor::WHITE;
    *(_DWORD *)(v67 + 244) = dword_A88D90;
    v73 = dword_A88D94;
    *(_DWORD *)(v67 + 188) = v68;
    *(_DWORD *)(v67 + 248) = v73;
    *(_DWORD *)(v67 + 252) = NiColor::BLACK;
    *(_DWORD *)(v67 + 256) = dword_B6E000;
    *(_DWORD *)(v67 + 260) = dword_B6E004;
    *(_DWORD *)(v67 + 188) = v68 + 1;
    NiDynamicEffect::AttachAffectedNode((NiDynamicEffect *)v67, *v58);
    v74 = thisa;
    *(_BYTE *)(v67 + 176) = 1;
    ((void (__stdcall *)(NiNode *, _DWORD))v74->m_spAbstateCharScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *v58,
      0);
    ((void (__stdcall *)(int, _DWORD))(*v58)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v67,
      0);
    ((void (__thiscall *)(NiNode *, _DWORD, _DWORD))(*v58)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *v58,
      *((_DWORD *)v63 + 143210),
      0);
    (*(void (__stdcall **)(NiNode *, _DWORD))(**((_DWORD **)v63 + 143210) + 116))(pObject, 0);
    v52 = (NiNode *)*((_DWORD *)v63 + 143210);
    v12 = pkChar;
    *((_DWORD *)v63 + 143209) = kColor.dwRGB;
    goto LABEL_85;
  }
  v84 = pkCamera;
LABEL_110:
  v89 = (int)&thisa->m_vecNearMob;
  v90 = (signed int)((char *)thisa->m_vecNearMob.baseclass_0._Mylast
                   - *(_DWORD *)&thisa->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  v91 = 5;
  if ( v90 )
  {
    if ( v90 < 5 )
      v91 = (signed int)((char *)thisa->m_vecNearMob.baseclass_0._Mylast
                       - *(_DWORD *)&thisa->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    v89 = LODWORD(v84->baseclass_0.m_kWorld.m_Translate.y);
    v92 = LODWORD(v84->baseclass_0.m_kWorld.m_Translate.z);
    pos3TargetPos.x = v84->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][0];
    v93 = LODWORD(v84->baseclass_0.m_kWorld.m_Translate.x);
    pos3TargetPos.y = v84->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
    v109 = v89;
    v94 = v84->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
    v110 = v92;
    pos3TargetPos.z = v94;
    *(float *)&v103 = 0.0;
    v108 = v93;
    v106 = pos3TargetPos.y;
    v107 = pos3TargetPos.z;
    v105 = (signed int)pos3TargetPos.x;
    v95 = *(Char ***)&thisa->m_vecNearMob.baseclass_0.___u0.baseclass_0.dummy[0];
    memcpy(&v101, &v105, sizeof(v101));
    std::_Partial_sort<Char_____Char___CharSorter>(
      v95,
      &v95[v91],
      thisa->m_vecNearMob.baseclass_0._Mylast,
      COERCE_CHARSORTER(v101.m_pos3Dir.x),
      0);
  }
  v96 = thisa;
  v103 = 1;
  LODWORD(v102) = v89;
  NiAVObject::Update(&thisa->m_spShadowScene.m_pObject->baseclass_0, fTime, 1);
  World::UpdateBuildingScene(v96, fTime);
  EffectMgr::Update(&g_kEffectMgr, fTime);
  v103 = 1;
  v102 = v97;
  NiAVObject::Update(&v96->m_spDropItemScene.m_pObject->baseclass_0, fTime, 1);
  v103 = 1;
  v102 = v98;
  NiAVObject::Update(&v96->m_spMinihouseScene.m_pObject->baseclass_0, fTime, 1);
  v103 = 1;
  v102 = v99;
  NiAVObject::Update(&v96->m_spWaterScene.m_pObject->baseclass_0, fTime, 1);
  v103 = 1;
  v102 = v100;
  NiAVObject::Update(&v96->m_spEffectScene.m_pObject->baseclass_0, fTime, 1);
}
// 688E6C: using guessed type int __stdcall(float fTime);
// A85C00: using guessed type int __security_cookie;
// A88D8C: using guessed type int NiColor__WHITE;
// A88D90: using guessed type int dword_A88D90;
// A88D94: using guessed type int dword_A88D94;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// B6DFFC: using guessed type int NiColor__BLACK;
// B6E000: using guessed type int dword_B6E000;
// B6E004: using guessed type int dword_B6E004;

//----- (00689190) --------------------------------------------------------
void __cdecl std::_Push_heap<Char_____int_Char___CharSorter>(Char **_First, int _Hole, int _Top, Char **_Val, CharSorter _Pred)
{
  int v5; // esi@1
  Char **v6; // edi@2
  Char *v7; // ecx@3
  Char *v8; // ebx@3
  int v9; // eax@5
  int v10; // eax@5
  float v11; // ST18_4@5
  float v12; // ST1C_4@5
  float v13; // ST20_4@5
  float v14; // ST0C_4@5
  float v15; // ST10_4@5
  float v16; // ST14_4@5
  float v17; // ST3C_4@5
  float _Firsta; // [sp+40h] [bp+8h]@5
  float _Firstb; // [sp+40h] [bp+8h]@5
  float _Firstc; // [sp+40h] [bp+8h]@5
  float _Firstd; // [sp+40h] [bp+8h]@5

  v5 = (_Hole - 1) / 2;
  if ( _Top >= _Hole )
  {
    _First[_Hole] = *_Val;
  }
  else
  {
    v6 = _First;
    while ( 1 )
    {
      v7 = v6[v5];
      v8 = *_Val;
      if ( !v7 )
      {
        v6[_Hole] = *_Val;
        return;
      }
      if ( v8 )
      {
        v9 = ((int (*)(void))v7->baseclass_0.vfptr[6].Deaffect)();
        LODWORD(_Pred.pos1.x) = *(_DWORD *)v9;
        LODWORD(_Pred.pos1.y) = *(_DWORD *)(v9 + 4);
        LODWORD(_Pred.pos1.z) = *(_DWORD *)(v9 + 8);
        v10 = ((int (__thiscall *)(Char *))v8->baseclass_0.vfptr[6].Deaffect)(v8);
        v11 = _Pred.m_pos3Main.x - _Pred.pos1.x;
        v12 = _Pred.m_pos3Main.y - _Pred.pos1.y;
        v13 = _Pred.m_pos3Main.z - _Pred.pos1.z;
        v14 = _Pred.m_pos3Main.x - *(float *)v10;
        v15 = _Pred.m_pos3Main.y - *(float *)(v10 + 4);
        v16 = _Pred.m_pos3Main.z - *(float *)(v10 + 8);
        _Firsta = v12 * v12 + v11 * v11 + v13 * v13;
        _Firstb = sqrt(_Firsta);
        v17 = _Firstb;
        _Firstc = v14 * v14 + v15 * v15 + v16 * v16;
        _Firstd = sqrt(_Firstc);
        if ( v17 >= (double)_Firstd )
          break;
      }
      v6[_Hole] = v6[v5];
      _Hole = v5;
      v5 = (v5 - 1) / 2;
      if ( _Top >= _Hole )
      {
        v6[_Hole] = *_Val;
        return;
      }
    }
    v6[_Hole] = *_Val;
  }
}

//----- (00689310) --------------------------------------------------------
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *result, NiAVObject *const *_Keyval)
{
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v5; // ebx@1
  NiAVObject *const v6; // edi@2
  unsigned int v7; // esi@3
  std::_Tree_nod<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> >::_Node *v8; // eax@11
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA *v9; // eax@18

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  if ( !v4->_Isnil )
  {
    v6 = *_Keyval;
    do
    {
      v7 = (unsigned int)v4->_Myval;
      if ( v7 >= (unsigned int)v6 )
      {
        if ( v3->_Isnil && (unsigned int)v6 < v7 )
          v3 = v4;
        v5 = v4;
        v4 = v4->_Left;
      }
      else
      {
        v4 = v4->_Right;
      }
    }
    while ( !v4->_Isnil );
  }
  if ( v3->_Isnil )
    v8 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  else
    v8 = v3->_Left;
  while ( !v8->_Isnil )
  {
    if ( *_Keyval >= v8->_Myval )
    {
      v8 = v8->_Right;
    }
    else
    {
      v3 = v8;
      v8 = v8->_Left;
    }
  }
  v9 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)&result->baseclass_0.second.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  return v9;
}

//----- (006893A0) --------------------------------------------------------
void __cdecl std::_Adjust_heap<Char_____int_Char___CharSorter>(Char **_First, int _Hole, int _Bottom, Char **_Val, CharSorter _Pred)
{
  int v5; // eax@1
  int v6; // ebx@1
  int v7; // esi@1
  Char **v8; // edi@2
  CharSorter v9; // [sp-40h] [bp-4Ch]@9

  v5 = _Bottom;
  v6 = _Hole;
  v7 = 2 * _Hole + 2;
  if ( v7 >= _Bottom )
  {
    v8 = _First;
  }
  else
  {
    do
    {
      v8 = _First;
      if ( CharSorter::operator__(&_Pred, _First[v7], _First[v7 - 1]) )
        --v7;
      _First[v6] = _First[v7];
      v6 = v7;
      v7 = 2 * v7 + 2;
    }
    while ( v7 < _Bottom );
    v5 = _Bottom;
  }
  if ( v7 == v5 )
  {
    v8[v6] = v8[v5 - 1];
    v6 = v5 - 1;
  }
  memcpy(&v9, &_Pred, sizeof(v9));
  std::_Push_heap<Char_____int_Char___CharSorter>(_First, v6, _Hole, _Val, COERCE_CHARSORTER(v9.m_pos3Dir.x));
}

//----- (00689430) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<Ni *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Eqrange(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<Ni *result, NiAVObject *const *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v5; // ebx@1
  NiAVObject *const v6; // edi@2
  unsigned int v7; // esi@3
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v8; // eax@11
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<Ni *v9; // eax@18

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  if ( !v4->_Isnil )
  {
    v6 = *_Keyval;
    do
    {
      v7 = (unsigned int)v4->_Myval.baseclass_0.first;
      if ( v7 >= (unsigned int)v6 )
      {
        if ( v3->_Isnil && (unsigned int)v6 < v7 )
          v3 = v4;
        v5 = v4;
        v4 = v4->_Left;
      }
      else
      {
        v4 = v4->_Right;
      }
    }
    while ( !v4->_Isnil );
  }
  if ( v3->_Isnil )
    v8 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  else
    v8 = v3->_Left;
  while ( !v8->_Isnil )
  {
    if ( *_Keyval >= v8->_Myval.baseclass_0.first )
    {
      v8 = v8->_Right;
    }
    else
    {
      v3 = v8;
      v8 = v8->_Left;
    }
  }
  v9 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)&result->baseclass_0.second.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  return v9;
}

//----- (006894C0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v29; // ecx@52
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0xCCCCCCB )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (006896F0) --------------------------------------------------------
void __cdecl std::_Make_heap<Char_____int_Char___CharSorter>(Char **_First, Char **_Last, CharSorter _Pred, int *__formal, Char **a5)
{
  Char **v5; // ebx@1
  int v6; // eax@1
  int i; // edx@2
  void *v8; // ecx@4
  int v9; // eax@4
  int v10; // edi@4
  int v11; // esi@4
  Char *v12; // eax@5
  int v13; // edx@7
  Char *v14; // ecx@7
  CharSorter v15; // [sp-40h] [bp-98h]@11
  Char *v16; // [sp-4h] [bp-5Ch]@5
  CharSorter this; // [sp+Ch] [bp-4Ch]@4
  void *_Val; // [sp+4Ch] [bp-Ch]@4
  int _Bottom; // [sp+50h] [bp-8h]@1
  int v20; // [sp+54h] [bp-4h]@3
  int _Hole; // [sp+60h] [bp+8h]@4
  int _Lasta; // [sp+64h] [bp+Ch]@4

  v5 = _First;
  _Bottom = _Last - _First;
  v6 = _Bottom / 2;
  if ( _Bottom / 2 > 0 )
  {
    for ( i = 2 * v6 + 2; ; i = v20 )
    {
      v8 = v5[v6 - 1];
      v9 = v6 - 1;
      _Val = v8;
      memcpy(&this, &_Pred, sizeof(this));
      v10 = _Bottom;
      _Hole = v9;
      v20 = i - 2;
      _Lasta = v9;
      v11 = i - 2;
      if ( i - 2 < _Bottom )
      {
        do
        {
          v12 = v5[v11];
          v16 = v5[v11 - 1];
          if ( CharSorter::operator__(&this, v12, v16) )
            --v11;
          v13 = _Lasta;
          v14 = v5[v11];
          _Lasta = v11;
          v11 = 2 * v11 + 2;
          v5[v13] = v14;
        }
        while ( v11 < v10 );
        v9 = _Hole;
      }
      if ( v11 == v10 )
      {
        v5[_Lasta] = v5[v10 - 1];
        _Lasta = v10 - 1;
      }
      memcpy(&v15, &this, sizeof(v15));
      std::_Push_heap<Char_____int_Char___CharSorter>(
        v5,
        _Lasta,
        v9,
        (Char **)&_Val,
        COERCE_CHARSORTER(v15.m_pos3Dir.x));
      if ( _Hole <= 0 )
        break;
      v6 = _Hole;
    }
  }
}

//----- (006897D0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObj *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Eqrange(std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObj *result, NiAVObject *const *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v5; // ebx@1
  NiAVObject *const v6; // edi@2
  unsigned int v7; // esi@3
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v8; // eax@11
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObj *v9; // eax@18

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  if ( !v4->_Isnil )
  {
    v6 = *_Keyval;
    do
    {
      v7 = (unsigned int)v4->_Myval.baseclass_0.first;
      if ( v7 >= (unsigned int)v6 )
      {
        if ( v3->_Isnil && (unsigned int)v6 < v7 )
          v3 = v4;
        v5 = v4;
        v4 = v4->_Left;
      }
      else
      {
        v4 = v4->_Right;
      }
    }
    while ( !v4->_Isnil );
  }
  if ( v3->_Isnil )
    v8 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  else
    v8 = v3->_Left;
  while ( !v8->_Isnil )
  {
    if ( *_Keyval >= v8->_Myval.baseclass_0.first )
    {
      v8 = v8->_Right;
    }
    else
    {
      v3 = v8;
      v8 = v8->_Left;
    }
  }
  v9 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)&result->baseclass_0.second.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  return v9;
}

//----- (00689860) --------------------------------------------------------
std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Insert(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v6; // edi@1
  NiAVObject *v7; // esi@2
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v8; // edx@8
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v9; // edx@11
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v10; // edx@13
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v11; // eax@15
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v12; // edx@16
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v13; // esi@16
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v14; // esi@17
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v15; // edx@19
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v16; // esi@21
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v17; // esi@23
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v18; // edx@27
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v19; // esi@27
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v20; // edi@27
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v21; // edi@29
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v22; // edi@31
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v23; // edx@37
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v24; // esi@37
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v25; // esi@39
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v26; // esi@41
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v27; // edi@47
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v28; // edi@49
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v29; // ecx@55
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *v30; // eax@55

  v5 = this->baseclass_0.baseclass_0._Mysize;
  v6 = _Newnode;
  if ( v5 >= 0x3FFFFFFE )
  {
    v7 = _Newnode->_Myval.m_pObject;
    if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v8 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v8 )
  {
    v8->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Left )
        v9->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v10 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v10->_Right )
        v10->_Right = _Newnode;
    }
  }
  v11 = _Newnode;
  while ( !v11->_Parent->_Color )
  {
    v12 = v11->_Parent;
    v13 = v12->_Parent;
    if ( v12 == v13->_Left )
    {
      v14 = v13->_Right;
      if ( v14->_Color )
      {
        if ( v11 == v12->_Right )
        {
          v11 = v11->_Parent;
          v15 = v12->_Right;
          v11->_Right = v15->_Left;
          if ( !v15->_Left->_Isnil )
            v15->_Left->_Parent = v11;
          v15->_Parent = v11->_Parent;
          v16 = this->baseclass_0.baseclass_0._Myhead;
          if ( v11 == v16->_Parent )
          {
            v16->_Parent = v15;
          }
          else
          {
            v17 = v11->_Parent;
            if ( v11 == v17->_Left )
              v17->_Left = v15;
            else
              v17->_Right = v15;
          }
          v15->_Left = v11;
          v11->_Parent = v15;
        }
        v11->_Parent->_Color = 1;
        v11->_Parent->_Parent->_Color = 0;
        v18 = v11->_Parent->_Parent;
        v19 = v18->_Left;
        v18->_Left = v18->_Left->_Right;
        v20 = v19->_Right;
        if ( !v20->_Isnil )
          v20->_Parent = v18;
        v19->_Parent = v18->_Parent;
        v21 = this->baseclass_0.baseclass_0._Myhead;
        if ( v18 == v21->_Parent )
        {
          v21->_Parent = v19;
          v19->_Right = v18;
        }
        else
        {
          v22 = v18->_Parent;
          if ( v18 == v22->_Right )
          {
            v22->_Right = v19;
            v19->_Right = v18;
          }
          else
          {
            v22->_Left = v19;
            v19->_Right = v18;
          }
        }
LABEL_53:
        v6 = _Newnode;
        v18->_Parent = v19;
        continue;
      }
    }
    else
    {
      v14 = v13->_Left;
      if ( v14->_Color )
      {
        if ( v11 == v12->_Left )
        {
          v11 = v11->_Parent;
          v23 = v12->_Left;
          v11->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v11;
          v23->_Parent = v11->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v11 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v11->_Parent;
            if ( v11 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v11;
          v11->_Parent = v23;
        }
        v11->_Parent->_Color = 1;
        v11->_Parent->_Parent->_Color = 0;
        v18 = v11->_Parent->_Parent;
        v19 = v18->_Right;
        v18->_Right = v19->_Left;
        if ( !v19->_Left->_Isnil )
          v19->_Left->_Parent = v18;
        v19->_Parent = v18->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v18 == v27->_Parent )
        {
          v27->_Parent = v19;
        }
        else
        {
          v28 = v18->_Parent;
          if ( v18 == v28->_Left )
            v28->_Left = v19;
          else
            v28->_Right = v19;
        }
        v19->_Left = v18;
        goto LABEL_53;
      }
    }
    v12->_Color = 1;
    v14->_Color = 1;
    v11->_Parent->_Parent->_Color = 0;
    v11 = v11->_Parent->_Parent;
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (00689AA0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  NiAVObject *const v10; // edi@2
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
                          v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
                        v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (00689B80) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Buynode<NiNode____>(std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, NiNode **_Val)
{
  std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *v2; // edi@1
  void *v3; // eax@1
  void *v4; // esi@1
  int v5; // eax@2
  NiNode *v6; // ecx@3
  std::exception thisa; // [sp+8h] [bp-Ch]@6

  v2 = this;
  v3 = operator new(0x14u);
  v4 = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 1) = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 2) = v2->baseclass_0._Myhead;
  v5 = (int)((char *)v3 + 12);
  *((_WORD *)v4 + 8) = 0;
  if ( v4 != (void *)-12 )
  {
    v6 = *_Val;
    *(_DWORD *)v5 = *_Val;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  return (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00689C00) --------------------------------------------------------
std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >,bool> *__thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Linsert(std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *this, std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >,bool> *result, std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > *v5; // edi@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  NiAVObject *v10; // ebx@2
  std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *v11; // ebx@10
  int v12; // edx@12
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  NiAVObject *v15; // esi@16
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.m_pObject;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval.m_pObject >= v10;
      else
        v9 = v10 < v7->_Myval.m_pObject;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Insert(
                          v5,
                          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.m_pObject >= v4->_Myval.m_pObject )
  {
    v15 = v4->_Myval.m_pObject;
    if ( v15 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v15 )
          v15->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      }
      v4 = _Node;
    }
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Insert(
                        v5,
                        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>,std::less<NiPointer<NiAVObject> >,std::allocator<NiPointer<NiAVObject> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (00689D00) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > _Where, std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *_Node)
{
  std::_Tree<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
      this,
      result,
      1,
      v5,
      _Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
        this,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node **)&_Where,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
        this,
        result,
        0,
        v8,
        _Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>_std::less<int>_std::allocator<std::pair<int_const_std::vector<SHINE_ITEM_STRUCT_std::allocator<SHINE_ITEM_STRUCT>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> >,std::less<int>,std::allocator<std::pair<int const ,std::vector<SHINE_ITEM_STRUCT,std::allocator<SHINE_ITEM_STRUCT> > *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >,bool> *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 33) )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
        v4,
        result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
        v4,
        result,
        1,
        _Node,
        v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
        v4,
        result,
        0,
        _Node,
        v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
        v4,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node **)&_Where,
        v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (00689E60) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Buynode<std::pair<NiAVObject___const_NiBound>>(std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *this, std::pair<NiAVObject * const,NiBound> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *result; // eax@1
  std::pair<NiAVObject * const,NiBound> *v4; // ecx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)operator new(0x24u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second.m_kCenter.x = v4->baseclass_0.second.m_kCenter.x;
    result->_Myval.baseclass_0.second.m_kCenter.y = v4->baseclass_0.second.m_kCenter.y;
    result->_Myval.baseclass_0.second.m_kCenter.z = v4->baseclass_0.second.m_kCenter.z;
    result->_Myval.baseclass_0.second.m_fRadius = v4->baseclass_0.second.m_fRadius;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00689EE0) --------------------------------------------------------
void __cdecl std::_Sort_heap<Char_____CharSorter>(Char **_First, Char **_Last, CharSorter _Pred)
{
  Char **v3; // ebx@1
  unsigned int v4; // eax@1
  Char **v5; // edx@2
  CharSorter v6; // [sp-40h] [bp-4Ch]@2
  int _Firsta; // [sp+14h] [bp+8h]@2

  v3 = _First;
  v4 = (char *)_Last - (char *)_First;
  if ( (signed int)(((char *)_Last - (char *)_First) & 0xFFFFFFFC) > 4 )
  {
    do
    {
      v5 = *(Char ***)((char *)v3 + v4 - 4);
      *(Char **)((char *)v3 + v4 - 4) = *v3;
      _Last = v5;
      _Firsta = v4 - 4;
      memcpy(&v6, &_Pred, sizeof(v6));
      std::_Adjust_heap<Char_____int_Char___CharSorter>(
        v3,
        0,
        (signed int)(v4 - 4) >> 2,
        (Char **)&_Last,
        COERCE_CHARSORTER(v6.m_pos3Dir.x));
      v4 = _Firsta;
    }
    while ( (_Firsta & 0xFFFFFFFC) > 4 );
  }
}

//----- (00689F50) --------------------------------------------------------
NiBound *__thiscall std::map<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>>::operator__(std::map<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> > > *this, NiAVObject *const *_Keyval)
{
  std::map<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> > > *v2; // edi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > v5; // esi@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *v6; // eax@8
  NiBound *result; // eax@8
  std::pair<NiAVObject * const,NiBound> _Val; // [sp+8h] [bp-14h]@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 33) )
  {
    if ( (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= (NiAVObject *const )*(_DWORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (NiBound *)(*(_DWORD *)&v5 + 16);
  }
  else
  {
    _Val.baseclass_0.first = *_Keyval;
    v6 = std::_Tree_val<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Buynode<std::pair<NiAVObject___const_NiBound>>(
           &v2->baseclass_0.baseclass_0,
           &_Val);
    std::_Tree<std::_Tmap_traits<NiAVObject___NiBound_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_NiBound>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,NiBound,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,NiBound> >,0> > > *)&_Keyval,
      v5,
      v6);
    result = (NiBound *)(_Keyval + 4);
  }
  return result;
}

//----- (00689FE0) --------------------------------------------------------
void __cdecl std::_Partial_sort<Char_____Char___CharSorter>(Char **_First, Char **_Mid, Char **_Last, CharSorter _Pred, Char **__formal)
{
  Char **v5; // ebx@1
  Char *v6; // edx@4
  void *v7; // eax@5
  CharSorter v8; // [sp-48h] [bp-5Ch]@2
  CharSorter v9; // [sp-40h] [bp-54h]@5
  Char *v10; // [sp-4h] [bp-18h]@4
  int _Bottom; // [sp+Ch] [bp-8h]@1
  void *_Val; // [sp+10h] [bp-4h]@5

  v5 = _Mid;
  _Bottom = _Mid - _First;
  if ( _Bottom > 1 )
  {
    memcpy(&v8, &_Pred, sizeof(v8));
    std::_Make_heap<Char_____int_Char___CharSorter>(_First, _Mid, COERCE_CHARSORTER(v8.m_pos3Dir.x), 0, 0);
  }
  if ( _Mid < _Last )
  {
    do
    {
      v6 = *v5;
      v10 = *_First;
      if ( CharSorter::operator__(&_Pred, v6, v10) )
      {
        v7 = *v5;
        *v5 = *_First;
        _Val = v7;
        memcpy(&v9, &_Pred, sizeof(v9));
        std::_Adjust_heap<Char_____int_Char___CharSorter>(
          _First,
          0,
          _Bottom,
          (Char **)&_Val,
          COERCE_CHARSORTER(v9.m_pos3Dir.x));
      }
      ++v5;
    }
    while ( v5 < _Last );
  }
  memcpy(&v9, &_Pred, sizeof(v9));
  std::_Sort_heap<Char_____CharSorter>(_First, _Mid, COERCE_CHARSORTER(v9.m_pos3Dir.x));
}

//----- (0068A0A0) --------------------------------------------------------
bool __thiscall World::InitShadow(World *this)
{
  return 1;
}

//----- (0068A0C0) --------------------------------------------------------
void __thiscall World::TerminateShadow(World *this)
{
  NiTListItem<NiPointer<Shadow> > *v1; // esi@1
  char *v2; // edi@1
  NiTListItem<NiPointer<Shadow> > *v3; // ST00_4@2

  v1 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v2 = (char *)&this->m_kShadowList;
  while ( v1 )
  {
    v3 = v1;
    v1 = v1->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v3);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
}

//----- (0068A100) --------------------------------------------------------
void __thiscall World::ResetShadowTerrian(World *this)
{
  World *v1; // edi@1
  NiTListItem<NiPointer<Shadow> > *v2; // esi@1
  Shadow *v3; // eax@2

  v1 = this;
  v2 = this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element.m_pObject;
    v2 = v2->m_pkNext;
    v3->m_kDecal.m_pkHpTerrain = v1->m_pkTerrain;
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spShadowScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v3->m_spNode.m_pObject,
      0);
  }
}

//----- (0068A140) --------------------------------------------------------
void __thiscall World::PrepareShadow(World *this)
{
  World *v1; // edi@1
  NiTListItem<NiPointer<Shadow> > *v2; // esi@1
  unsigned int v3; // eax@1
  NiTListItem<NiPointer<Shadow> > *v4; // ST0C_4@2
  void *v5; // eax@5
  int v6; // esi@5
  int v7; // eax@6
  NiPointer<Shadow> spShadow; // [sp+0h] [bp-14h]@5
  unsigned int i; // [sp+4h] [bp-10h]@4
  int v10; // [sp+10h] [bp-4h]@5

  v1 = this;
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&this->m_spShadowScene.m_pObject->m_kChildren);
  v2 = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v3 = 0;
  if ( v2 )
  {
    do
    {
      v4 = v2;
      v2 = v2->m_pkNext;
      v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Shadow> > *)&v1->m_kShadowList,
        v4);
    }
    while ( v2 );
    v3 = 0;
  }
  *(_DWORD *)&v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<NiPointer<Shadow> > *)v3;
  v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<Shadow> > *)v3;
  for ( i = v3; i < v1->m_eCharShadowLevel; ++i )
  {
    v5 = operator new(0x84u);
    spShadow.m_pObject = (Shadow *)v5;
    v6 = 0;
    v10 = 0;
    if ( v5 )
    {
      Shadow::Shadow(
        (Shadow *)v5,
        &World::ms_kDefaultDirectionalLightDir,
        v1->m_pkTerrain,
        &v1->m_spBuildingScene.m_pObject->baseclass_0,
        5u);
      v6 = v7;
    }
    spShadow.m_pObject = (Shadow *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)(v6 + 4));
    v10 = 1;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v1->m_kShadowList,
      (NiPointer<NiDX92DBufferData> *)&spShadow);
    ((void (__stdcall *)(_DWORD, _DWORD))v1->m_spShadowScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      *(_DWORD *)(v6 + 116),
      0);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
  }
}

//----- (0068A290) --------------------------------------------------------
void __thiscall World::DrawShadow(World *this)
{
  World *v1; // esi@1
  void *v2; // eax@3
  bool v3; // cl@3
  float v4; // ebx@3
  AbStateInfecteeVtbl *v5; // edx@3
  int v6; // eax@3
  float v7; // ecx@3
  float v8; // edx@3
  float v9; // eax@3
  int v10; // edi@3
  void *v11; // eax@3
  int v12; // esi@5
  int v13; // eax@6
  float v14; // ecx@6
  float v15; // edx@6
  float v16; // eax@6
  double v17; // st7@6
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v18; // eax@7
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v19; // esi@7
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> >::_Node *v20; // ecx@7
  bool v21; // zf@7
  const int v22; // edi@8
  float v23; // ebx@16
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > v24; // edi@16
  int v25; // esi@21
  int v26; // edi@22
  int v27; // ebx@28
  int v28; // edx@28
  int v29; // eax@30
  int v30; // ebx@31
  unsigned int v31; // eax@32
  NiNode *v32; // ebx@38
  NiPoint3 *v33; // eax@38
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > v34; // ecx@43
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > i; // eax@44
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > v36; // eax@47
  int v37; // edi@55
  int v38; // edx@58
  int v39; // ecx@59
  int k; // eax@60
  int j; // eax@63
  int v42; // eax@68
  float v43; // eax@68
  int v44; // esi@69
  void *v45; // ecx@75
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v46; // ST08_4@76
  std::multimap<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> > > mmCharList; // [sp+1Ch] [bp-70h]@3
  std::exception thisa; // [sp+2Ch] [bp-60h]@77
  NiPoint3 kPos; // [sp+38h] [bp-54h]@6
  NiPoint3 kMainCharPos; // [sp+44h] [bp-48h]@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+50h] [bp-3Ch]@76
  void *pkToonExtraData; // [sp+54h] [bp-38h]@3
  void *pstInfo; // [sp+58h] [bp-34h]@13
  std::pair<int const ,int> _Val; // [sp+5Ch] [bp-30h]@7
  World *v55; // [sp+64h] [bp-28h]@1
  float kShadowIter; // [sp+68h] [bp-24h]@7
  __int64 v57; // [sp+6Ch] [bp-20h]@6
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > iter; // [sp+74h] [bp-18h]@6
  bool bOldToonFlag; // [sp+7Bh] [bp-11h]@3
  float v60; // [sp+7Ch] [bp-10h]@6
  int v61; // [sp+88h] [bp-4h]@4

  v1 = this;
  v55 = this;
  if ( *(_DWORD *)&this->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] < this->m_eCharShadowLevel )
    World::PrepareShadow(this);
  v2 = Engine3D::ms_spToonExtraData;
  v3 = Engine3D::ms_spToonExtraData->m_bOn;
  Engine3D::ms_spToonExtraData->m_bOn = 0;
  v4 = fTime;
  bOldToonFlag = v3;
  v5 = g_pkMainChar->baseclass_0.vfptr;
  pkToonExtraData = v2;
  v6 = ((int (*)(void))v5[6].Deaffect)();
  LODWORD(v7) = *(_DWORD *)v6;
  LODWORD(v8) = *(_DWORD *)(v6 + 4);
  LODWORD(v9) = *(_DWORD *)(v6 + 8);
  v10 = 0;
  kMainCharPos.x = v7;
  kMainCharPos.y = v8;
  kMainCharPos.z = v9;
  mmCharList.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v11 = operator new(0x18u);
  if ( !v11 )
  {
    result = 0;
    std::exception::exception(
      &thisa,
      (const char *const *)result.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> >::_Node *)v11;
  *(_DWORD *)v11 = v11;
  mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead;
  mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v61 = 0;
  if ( LODWORD(v4) )
  {
    do
    {
      v12 = *(_DWORD *)(LODWORD(v4) + 8);
      LODWORD(v4) = *LODWORD(v4);
      if ( v12 )
      {
        v13 = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 196))(v12);
        LODWORD(v14) = *(_DWORD *)v13;
        LODWORD(v15) = *(_DWORD *)(v13 + 4);
        LODWORD(v16) = *(_DWORD *)(v13 + 8);
        kPos.x = v14;
        kPos.y = v15;
        kPos.z = v16;
        *((float *)&v57 + 1) = kMainCharPos.x - v14;
        *(float *)&iter.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = kMainCharPos.y - v15;
        v60 = kMainCharPos.z - v16;
        *((float *)&v57 + 1) = *((float *)&v57 + 1) * *((float *)&v57 + 1)
                             + *(float *)&iter.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]
                             * *(float *)&iter.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]
                             + v60 * v60;
        *((float *)&v57 + 1) = sqrt(*((float *)&v57 + 1));
        v17 = *((float *)&v57 + 1);
        if ( *((float *)&v57 + 1) <= 1000.0 )
        {
          _Val.baseclass_0.second = v12;
          v57 = (signed __int64)v17;
          _Val.baseclass_0.first = (signed __int64)v17;
          v18 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
                  (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&mmCharList,
                  &_Val);
          v19 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead;
          v20 = mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent;
          v21 = v20->_Isnil == 0;
          LOBYTE(kShadowIter) = 1;
          if ( v21 )
          {
            v22 = v18->_Myval.baseclass_0.first;
            do
            {
              v19 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v20;
              LOBYTE(kShadowIter) = v22 < v20->_Myval.baseclass_0.first;
              if ( LOBYTE(kShadowIter) )
                v20 = v20->_Left;
              else
                v20 = v20->_Right;
            }
            while ( !v20->_Isnil );
          }
          std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
            (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&mmCharList,
            (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&pstInfo,
            SLOBYTE(kShadowIter),
            v19,
            v18);
        }
      }
    }
    while ( LODWORD(v4) );
    v1 = v55;
    v10 = 0;
  }
  LODWORD(v23) = v1->m_kShadowList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  HIDWORD(v57) = v10;
  v24 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > >)mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  iter = v24;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> >::_Node *)v24 != mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    while ( HIDWORD(v57) < v1->m_eCharShadowLevel && LODWORD(v23) )
    {
      v25 = *(_DWORD *)(*(_DWORD *)&v24 + 16);
      *(_WORD *)(*(_DWORD *)(v25 + 1812) + 28) |= 1u;
      if ( !(unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v25 + 520))(v25) )
      {
        v26 = *(_DWORD *)(LODWORD(v23) + 8);
        LODWORD(kShadowIter) = *LODWORD(v23);
        if ( v26 )
        {
          BYTE3(v60) = 0;
          Shadow::SetShaderMode((Shadow *)v26, Model);
          if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v25 + 648))(v25)
            || v55->m_eCharShadowLevel != 50 )
          {
            Shadow::SetShaderMode((Shadow *)v26, 0);
            if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v25 + 32))(v25) || Char::IsNPC((Char *)v25) )
            {
              v27 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
              v28 = *(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
              _Val.baseclass_0.second = *(_WORD *)(v25 + 942);
              if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v28 + 16))(
                                      ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                                      _Val.baseclass_0.second) )
              {
                if ( LOWORD(_Val.baseclass_0.second) <= *(_WORD *)(v27 + 200) )
                {
                  v29 = *(_DWORD *)(v27 + 196) + 4 * LOWORD(_Val.baseclass_0.second);
                  if ( *(_DWORD *)v29 )
                  {
                    v30 = *(_DWORD *)v29;
                    if ( *(_DWORD *)v29 )
                    {
                      v31 = *(_DWORD *)(v30 + 166);
                      if ( v31 )
                      {
                        pstInfo = *(void **)(v30 + 166);
                        *(float *)&_Val.baseclass_0.second = (double)v31;
                        NsDecal::SetDecalSize(
                          (NsDecal *)(v26 + 8),
                          *(float *)&_Val.baseclass_0.second,
                          *(float *)&_Val.baseclass_0.second);
                      }
                      BYTE3(v60) = *(_DWORD *)(v30 + 166) == 0;
                    }
                  }
                }
              }
            }
            else
            {
              NsDecal::SetDecalSize((NsDecal *)(v26 + 8), 50.0, 50.0);
            }
          }
          if ( Char::IsEnableSpectral((Char *)v25)
            || !(*(int (__thiscall **)(int))(*(_DWORD *)v25 + 12))(v25)
            || BYTE3(v60) )
          {
            *(_WORD *)(*(_DWORD *)(v26 + 116) + 28) |= 1u;
          }
          else
          {
            *(_WORD *)(*(_DWORD *)(v26 + 116) + 28) &= 0xFFFEu;
            v32 = *(NiNode **)(v25 + 700);
            v33 = (NiPoint3 *)(*(int (__thiscall **)(int))(*(_DWORD *)v25 + 204))(v25);
            Shadow::Render((Shadow *)v26, v32, v33);
          }
          ++HIDWORD(v57);
        }
        v24 = iter;
        v23 = kShadowIter;
      }
      *(_WORD *)(*(_DWORD *)(v25 + 1812) + 28) &= 0xFFFEu;
      if ( !*(_BYTE *)(*(_DWORD *)&v24 + 21) )
      {
        v34 = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > *)(*(_DWORD *)&v24 + 8);
        if ( *(_BYTE *)(*(_DWORD *)&v34 + 21) )
        {
          v36 = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > *)(*(_DWORD *)&v24 + 4);
          if ( !*(_BYTE *)(*(_DWORD *)&v36 + 21) )
          {
            while ( v24 == *(_DWORD *)(*(_DWORD *)&v36 + 8) )
            {
              iter = v36;
              v36 = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > > *)(*(_DWORD *)&v36 + 4);
              if ( *(_BYTE *)(*(_DWORD *)&v36 + 21) )
                break;
              v24 = iter;
            }
          }
          iter = v36;
        }
        else
        {
          for ( i = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > >)**(_DWORD **)&v34;
                !*(_BYTE *)(*(_DWORD *)&i + 21);
                i = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> > >)**(_DWORD **)&i )
            v34 = i;
          iter = v34;
        }
        v24 = iter;
      }
      if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,Char *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Char *> >,1> >::_Node *)v24 == mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead )
        break;
      v1 = v55;
    }
  }
  v37 = **(_DWORD **)&stru_B67CF0;
  _Val.baseclass_0.second = (int)stru_B67CF0;
  if ( LODWORD(v23) )
  {
    while ( v37 != _Val.baseclass_0.second && HIDWORD(v57) < v55->m_eCharShadowLevel )
    {
      v21 = *(_BYTE *)(v37 + 21) == 0;
      v38 = *(_DWORD *)(v37 + 16);
      pstInfo = *(void **)(v37 + 16);
      if ( v21 )
      {
        v39 = *(_DWORD *)(v37 + 8);
        if ( *(_BYTE *)(v39 + 21) )
        {
          for ( j = *(_DWORD *)(v37 + 4); !*(_BYTE *)(j + 21); j = *(_DWORD *)(j + 4) )
          {
            if ( v37 != *(_DWORD *)(j + 8) )
              break;
            v37 = j;
          }
          v37 = j;
        }
        else
        {
          for ( k = *(_DWORD *)v39; !*(_BYTE *)(k + 21); k = *(_DWORD *)k )
            v39 = k;
          v37 = v39;
        }
      }
      if ( v38 )
      {
        v42 = *(_DWORD *)(v38 + 36);
        LODWORD(kPos.x) = *(_DWORD *)(v42 + 88);
        LODWORD(kPos.y) = *(_DWORD *)(v42 + 92);
        LODWORD(v43) = *(_DWORD *)(v42 + 96);
        kShadowIter = kMainCharPos.x - kPos.x;
        kPos.z = v43;
        *(float *)&iter.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = kMainCharPos.y - kPos.y;
        v60 = kMainCharPos.z - v43;
        kShadowIter = kShadowIter * kShadowIter
                    + *(float *)&iter.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]
                    * *(float *)&iter.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]
                    + v60 * v60;
        kShadowIter = sqrt(kShadowIter);
        if ( kShadowIter <= 1000.0 )
        {
          v44 = *(_DWORD *)(LODWORD(v23) + 8);
          LODWORD(kShadowIter) = *LODWORD(v23);
          Shadow::Render((Shadow *)v44, *((NiNode **)pstInfo + 9), &kPos);
          v23 = kShadowIter;
          *(_WORD *)(*(_DWORD *)(v44 + 116) + 28) &= 0xFFFEu;
          ++HIDWORD(v57);
        }
      }
      if ( !LODWORD(v23) )
        goto LABEL_76;
    }
    if ( LODWORD(v23) )
    {
      while ( 1 )
      {
        v45 = (void *)*LODWORD(v23);
        *(_WORD *)(*(_DWORD *)(*(_DWORD *)(LODWORD(v23) + 8) + 116) + 28) |= 1u;
        LODWORD(kShadowIter) = v45;
        if ( !v45 )
          break;
        v23 = kShadowIter;
      }
    }
  }
LABEL_76:
  *((_BYTE *)pkToonExtraData + 12) = bOldToonFlag;
  v46 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v61 = 1;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&mmCharList,
    &result,
    v46,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead);
  operator delete(mmCharList.baseclass_0.baseclass_0.baseclass_0._Myhead);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (0068A810) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (0068A850) --------------------------------------------------------
bool __thiscall World::InitSkyCtrl(World *this)
{
  return SkyCtrl::Init(&this->m_kSkyCtrl);
}

//----- (0068A860) --------------------------------------------------------
void __thiscall World::TerminateSkyCtrl(World *this)
{
  SkyCtrl::Terminate(&this->m_kSkyCtrl);
}

//----- (0068A870) --------------------------------------------------------
void __thiscall World::ClearSkyCtrl(World *this)
{
  SkyCtrl::Clear(&this->m_kSkyCtrl);
}

//----- (0068A880) --------------------------------------------------------
void __thiscall World::UpdateSkyCtrl(World *this, float fTime)
{
  ((void (__stdcall *)(_DWORD))this->m_kSkyCtrl.vfptr->Update)(LODWORD(fTime));
}

//----- (0068A8A0) --------------------------------------------------------
char *__cdecl _StrTok(const char *str, const char sep)
{
  const char *v2; // eax@1
  const char v3; // cl@2
  char *v4; // eax@3
  char v5; // cl@5
  unsigned int v6; // esi@6
  char *v7; // edi@6
  char *result; // eax@10

  v2 = str;
  if ( str )
  {
    do
    {
      v3 = *v2;
      v2[buf - str] = *v2;
      ++v2;
    }
    while ( v3 );
    v4 = buf;
    pnow = buf;
  }
  else
  {
    v4 = pnow;
    if ( !pnow )
      return 0;
  }
  v5 = *v4;
  if ( !*v4 )
    return 0;
  v6 = 0;
  v7 = v4;
  do
  {
    ++v4;
    if ( v5 == sep )
      break;
    v5 = *v4;
    ++v6;
  }
  while ( *v4 );
  pnow = v4;
  if ( (signed int)v6 <= 0 )
  {
    token[0] = 0;
    result = token;
  }
  else
  {
    strncpy(token, v7, v6);
    token[v6] = 0;
    result = token;
  }
  return result;
}

//----- (0068A930) --------------------------------------------------------
bool __cdecl InitAnalyzeArgument(char *key, CPData *kCpData)
{
  bool result; // al@2
  char *v3; // eax@3
  char v4; // cl@4
  char *v5; // eax@6
  char *v6; // edx@7
  int v7; // edi@7
  int v8; // esi@9
  char v9; // cl@10
  char v10; // al@12
  unsigned int v11; // esi@13
  char *v12; // ecx@13
  int v13; // eax@20
  char v14; // cl@21
  char *v15; // esi@23
  char *v16; // eax@23
  char v17; // cl@24
  char *v18; // eax@25
  char v19; // cl@26
  char *v20; // eax@27
  char v21; // cl@28
  char *v22; // eax@29
  int v23; // esi@29
  char v24; // cl@30
  signed int argcnt; // [sp+4h] [bp-8008h]@6
  char buf[20480]; // [sp+8h] [bp-8004h]@1
  char arg[12288]; // [sp+5008h] [bp-3004h]@6
  unsigned int v28; // [sp+8008h] [bp-4h]@1
  int v29; // [sp+800Ch] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  buf[0] = 0;
  memset(&buf[1], 0, 0x4FFFu);
  if ( !GetNMClipData(buf, 20479, key, 1) )
    goto LABEL_34;
  EncryptString(buf, key, g_kServer.m_szCPData);
  v3 = buf;
  do
    v4 = *v3++;
  while ( v4 );
  if ( v3 == &buf[1] || (arg[0] = 0, memset(&arg[1], 0, 0x2FFFu), argcnt = 0, (v5 = _StrTok(buf, 44)) == 0) )
    goto LABEL_34;
  v6 = pnow;
  v7 = (int)arg;
  while ( argcnt < 6 )
  {
    v8 = v7 - (_DWORD)v5;
    do
    {
      v9 = *v5;
      v5[v8] = *v5;
      ++v5;
    }
    while ( v9 );
    ++argcnt;
    v7 += 2048;
    if ( !v6 )
      break;
    v10 = *v6;
    if ( !*v6 )
      break;
    v11 = 0;
    v12 = v6;
    do
    {
      ++v6;
      if ( v10 == 44 )
        break;
      v10 = *v6;
      ++v11;
    }
    while ( *v6 );
    pnow = v6;
    if ( (signed int)v11 <= 0 )
    {
      token[0] = 0;
      v5 = token;
    }
    else
    {
      strncpy(token, v12, v11);
      v6 = pnow;
      token[v11] = 0;
      v5 = token;
    }
  }
  if ( argcnt < 5 )
    goto LABEL_34;
  v13 = (int)arg;
  do
    v14 = *(_BYTE *)v13++;
  while ( v14 );
  if ( (unsigned int)(v13 - (_DWORD)&arg[1]) <= 0x10 )
  {
    v15 = strcpy(kCpData->ServIP, arg);
    *((_DWORD *)v15 + 32) = atoi(&arg[2048]);
    v16 = &arg[4096];
    do
    {
      v17 = *v16;
      v16[v15 - &arg[4096] + 132] = *v16;
      ++v16;
    }
    while ( v17 );
    v18 = &arg[6144];
    do
    {
      v19 = *v18;
      v18[v15 - &arg[6144] + 2180] = *v18;
      ++v18;
    }
    while ( v19 );
    v20 = &arg[8192];
    do
    {
      v21 = *v20;
      v20[v15 - &arg[8192] + 4228] = *v20;
      ++v20;
    }
    while ( v21 );
    v22 = &arg[10240];
    v23 = v15 - &arg[10240];
    do
    {
      v24 = *v22;
      v22[v23 + 6276] = *v22;
      ++v22;
    }
    while ( v24 );
    result = 1;
  }
  else
  {
LABEL_34:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0068AB70) --------------------------------------------------------
bool __cdecl GetAnalyzeArgument(CPData *kCpData)
{
  CPData *v1; // esi@1
  bool result; // al@2
  char *v3; // eax@3
  char v4; // cl@4
  char *v5; // eax@6
  char *v6; // edx@7
  int v7; // edi@7
  int v8; // esi@9
  char v9; // cl@10
  char v10; // al@12
  unsigned int v11; // esi@13
  char *v12; // ecx@13
  int v13; // eax@21
  char v14; // cl@22
  int v15; // eax@24
  char v16; // cl@25
  char *v17; // eax@26
  char v18; // cl@27
  char *v19; // eax@28
  char v20; // cl@29
  char *v21; // eax@30
  char v22; // cl@31
  char *v23; // eax@32
  int v24; // esi@32
  char v25; // cl@33
  signed int argcnt; // [sp+4h] [bp-8008h]@6
  char buf[20480]; // [sp+8h] [bp-8004h]@3
  char arg[12288]; // [sp+5008h] [bp-3004h]@6
  unsigned int v29; // [sp+8008h] [bp-4h]@1
  int v30; // [sp+800Ch] [bp+0h]@1

  v29 = (unsigned int)&v30 ^ __security_cookie;
  v1 = kCpData;
  if ( !g_kServer.m_bCP )
    goto LABEL_37;
  buf[0] = 0;
  memset(&buf[1], 0, 0x4FFFu);
  DecryptString(g_kServer.m_szCPData, g_kServer.m_szCPKey, buf);
  v3 = buf;
  do
    v4 = *v3++;
  while ( v4 );
  if ( v3 == &buf[1] || (arg[0] = 0, memset(&arg[1], 0, 0x2FFFu), argcnt = 0, (v5 = _StrTok(buf, 44)) == 0) )
    goto LABEL_37;
  v6 = pnow;
  v7 = (int)arg;
  while ( argcnt < 6 )
  {
    v8 = v7 - (_DWORD)v5;
    do
    {
      v9 = *v5;
      v5[v8] = *v5;
      ++v5;
    }
    while ( v9 );
    ++argcnt;
    v7 += 2048;
    if ( !v6 || (v10 = *v6) == 0 )
    {
      v1 = kCpData;
      goto LABEL_20;
    }
    v11 = 0;
    v12 = v6;
    do
    {
      ++v6;
      if ( v10 == 44 )
        break;
      v10 = *v6;
      ++v11;
    }
    while ( *v6 );
    pnow = v6;
    if ( (signed int)v11 <= 0 )
    {
      v1 = kCpData;
      token[0] = 0;
      v5 = token;
    }
    else
    {
      strncpy(token, v12, v11);
      v6 = pnow;
      token[v11] = 0;
      v1 = kCpData;
      v5 = token;
    }
  }
  if ( argcnt < 5 )
    goto LABEL_37;
LABEL_20:
  v13 = (int)arg;
  do
    v14 = *(_BYTE *)v13++;
  while ( v14 );
  if ( (unsigned int)(v13 - (_DWORD)&arg[1]) <= 0x10 )
  {
    v15 = (int)arg;
    do
    {
      v16 = *(_BYTE *)v15;
      *(_BYTE *)((char *)v1 - arg + v15) = *(_BYTE *)v15;
      ++v15;
    }
    while ( v16 );
    v1->ServPort = atoi(&arg[2048]);
    v17 = &arg[4096];
    do
    {
      v18 = *v17;
      v17[(char *)v1 - &arg[4096] + 132] = *v17;
      ++v17;
    }
    while ( v18 );
    v19 = &arg[6144];
    do
    {
      v20 = *v19;
      v19[(char *)v1 - &arg[6144] + 2180] = *v19;
      ++v19;
    }
    while ( v20 );
    v21 = &arg[8192];
    do
    {
      v22 = *v21;
      v21[(char *)v1 - &arg[8192] + 4228] = *v21;
      ++v21;
    }
    while ( v22 );
    v23 = &arg[10240];
    v24 = (char *)v1 - &arg[10240];
    do
    {
      v25 = *v23;
      v23[v24 + 6276] = *v23;
      ++v23;
    }
    while ( v25 );
    result = 1;
  }
  else
  {
LABEL_37:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0068ADB0) --------------------------------------------------------
char *__thiscall Server::GetWorldLoginErrText(Server *this, unsigned int ucStatus)
{
  return 0;
}

//----- (0068ADC0) --------------------------------------------------------
int __cdecl StatusCmp(char byStatus1, char byStatus2)
{
  char v2; // cl@1
  char v3; // al@3
  int result; // eax@6

  v2 = byStatus1;
  if ( (unsigned __int8)byStatus1 <= 5u )
    v2 = 11;
  v3 = byStatus2;
  if ( (unsigned __int8)byStatus2 <= 5u )
    v3 = 11;
  if ( v2 <= (unsigned __int8)v3 )
    result = -(v2 < (unsigned __int8)v3);
  else
    result = 1;
  return result;
}

//----- (0068ADF0) --------------------------------------------------------
void __thiscall Server::SetGameTime(Server *this, PROTO_NC_MISC_GAMETIME_ACK *p, float fCurTime)
{
  float pa; // [sp+Ch] [bp+8h]@1

  *(_WORD *)&this->m_kGameTime.hour = *(_WORD *)&p->hour;
  this->m_kGameTime.second = p->second;
  pa = (double)(this->m_kGameTime.second + 60 * (this->m_kGameTime.minute + 60 * this->m_kGameTime.hour));
  this->m_fGameTimeWhenSet = pa;
  this->m_fAppTimeWhenSet = fCurTime;
  this->m_fCurGameTime = pa;
}

//----- (0068AE60) --------------------------------------------------------
float __thiscall Server::GetGameTime(Server *this, float fCurTime)
{
  double v2; // st7@1
  double v3; // st6@1
  char v4; // al@1
  char v5; // al@1
  signed int v6; // edx@1
  float result; // st7@2
  float fCurGameTime; // [sp+10h] [bp+8h]@1
  float fCurGameTimea; // [sp+10h] [bp+8h]@1
  float fCurGameTimeb; // [sp+10h] [bp+8h]@1

  fCurGameTime = fCurTime - this->m_fAppTimeWhenSet + this->m_fGameTimeWhenSet;
  v2 = fCurGameTime;
  v3 = fCurGameTime;
  fCurGameTimea = Server::ONE_DAY_TIME * (double)(unsigned int)(signed __int64)(fCurGameTime / Server::ONE_DAY_TIME);
  fCurGameTimeb = v3 - fCurGameTimea;
  this->m_fCurGameTime = fCurGameTimeb;
  v4 = (signed int)(fCurGameTimeb / 3600.0);
  this->m_kGameTime.hour = v4;
  v5 = (signed int)((this->m_fCurGameTime - (double)(unsigned __int8)v4 * 3600.0) / 60.0);
  v6 = this->m_kGameTime.hour;
  this->m_kGameTime.minute = v5;
  this->m_kGameTime.second = (signed int)(this->m_fCurGameTime - 3600.0 * (double)v6 - 60.0
                                                                                     * (double)(unsigned __int8)v5);
  LODWORD(result) = LODWORD(v2);
  return result;
}
// A81188: using guessed type float Server__ONE_DAY_TIME;

//----- (0068AF80) --------------------------------------------------------
int __thiscall Server::GetSelectServerIndex(Server *this)
{
  return this->m_nSelectServerIndex;
}

//----- (0068AF90) --------------------------------------------------------
void __thiscall Server::SetSelectServerIndex(Server *this, int val)
{
  this->m_nSelectServerIndex = val;
}

//----- (0068AFA0) --------------------------------------------------------
void __thiscall Server::ParsingGameAngelKey(Server *this)
{
  int v1; // ebx@1
  int v2; // edx@1
  int v3; // esi@1
  int v4; // edi@1
  char v5; // al@2
  char *v6; // eax@12
  unsigned int v7; // edx@12
  char v8; // cl@13

  v1 = 0;
  v2 = 0;
  v3 = 0;
  v4 = 0;
  while ( 1 )
  {
    while ( 1 )
    {
      while ( 1 )
      {
        v5 = g_kServer.m_szCPKey[v1];
        if ( v5 == 124 )
        {
          ++v2;
          goto LABEL_11;
        }
        if ( v2 )
          break;
        this->m_GAAccountInfo.acSidNo[v4++] = v5;
        ++v1;
      }
      if ( v5 != 124 )
        break;
LABEL_11:
      ++v1;
    }
    if ( v2 != 1 )
      break;
    this->m_GAAccountInfo.acKey[v3++] = v5;
    ++v1;
  }
  if ( v5 == 124 || v2 != 2 )
    goto LABEL_11;
  v6 = &g_kServer.m_szCPKey[v1];
  v7 = this->m_GAAccountInfo.acID - &g_kServer.m_szCPKey[v1];
  do
  {
    v8 = *v6;
    v6[v7] = *v6;
    ++v6;
  }
  while ( v8 );
}

//----- (0068B010) --------------------------------------------------------
bool __cdecl InitAnalyzeArgument(CPData *kCpData)
{
  int v1; // edi@1
  char **v2; // ebx@2
  const char *v3; // ecx@3
  char *v4; // esi@3
  char *v5; // eax@8
  char v6; // cl@9
  bool result; // al@14

  v1 = 1;
  if ( __argc > 1 )
  {
    v2 = __argv;
    do
    {
      v3 = v2[v1];
      v4 = v2[v1 + 1];
      if ( !v3 || !*v3 )
        break;
      if ( strcmp(v3, "-osk_token") )
      {
        ++v1;
      }
      else
      {
        if ( v4 && *v4 )
        {
          g_kServer.m_bCP = 1;
          v5 = v4;
          do
          {
            v6 = *v5;
            v5[g_kServer.m_szCPKey - v4] = *v5;
            ++v5;
          }
          while ( v6 );
        }
        v1 += 2;
      }
    }
    while ( v1 < __argc );
  }
  if ( g_kServer.m_bCP )
    result = InitAnalyzeArgument(g_kServer.m_szCPKey, kCpData);
  else
    result = 0;
  return result;
}

//----- (0068B0D0) --------------------------------------------------------
void __thiscall Server::Server(Server *this)
{
  Server *v1; // esi@1
  char *v2; // edi@1

  v1 = this;
  v2 = (char *)&this->m_GAAccountInfo;
  memset(this->m_GAAccountInfo.acSidNo, 0, 0x400u);
  memset(v2 + 1024, 0, 0x400u);
  memset(v2 + 2048, 0, 0x400u);
  *(_DWORD *)&v1->m_kZoneAddr.m_kAddr.n4_name[12] = 0;
  *(_DWORD *)&v1->m_kZoneAddr.m_kAddr.n4_name[8] = 0;
  *(_DWORD *)&v1->m_kZoneAddr.m_kAddr.n4_name[4] = 0;
  *(_DWORD *)&v1->m_kZoneAddr.m_kAddr.n4_name[0] = 0;
  *(_WORD *)&v1->m_bDoubleConnected = 0;
  v1->m_pucWorldMgrNo = 0;
  v1->m_pucWorldMgrState = 0;
  v1->m_kFiestaServerList.pkServerInfo = 0;
  v1->m_kWorldMgrHandle = -1;
  *(_DWORD *)&v1->m_kLoginAddr.m_kAddr.n4_name[12] = 0;
  *(_DWORD *)&v1->m_kLoginAddr.m_kAddr.n4_name[8] = 0;
  *(_DWORD *)&v1->m_kLoginAddr.m_kAddr.n4_name[4] = 0;
  *(_DWORD *)&v1->m_kLoginAddr.m_kAddr.n4_name[0] = 0;
  strncpy(v1->m_kLoginAddr.m_kAddr.n4_name, "46.253.147.179", 0x10u);
  v1->m_fCurGameTime = 0.0;
  v1->m_kLoginAddr.m_iPort = 9010;
  v1->m_nSelectServerIndex = -1;
  v1->m_bGameAngelLogin = 0;
  memset(v1->m_szCPKey, 0, 0x5000u);
  v1->m_bTestServer = 0;
}

//----- (0068B1B0) --------------------------------------------------------
char *__thiscall Server::GetWorldStatusText(Server *this, unsigned int uiIndex)
{
  char v2; // cl@2
  char *result; // eax@4

  if ( uiIndex < g_kServer.m_uiTotalWorld )
    v2 = g_kServer.m_pucWorldMgrState[uiIndex];
  else
    v2 = 0;
  result = 0;
  switch ( v2 )
  {
    case 0:
      result = TextData::Get(0x88B298A0u);
      break;
    case 1:
      result = TextData::Get(0xDDF8F033u);
      break;
    case 2:
      result = TextData::Get(0xF4053039u);
      break;
    case 3:
      result = TextData::Get(0xA4E8E1EFu);
      break;
    case 4:
      result = TextData::Get(0xA4ADE2F9u);
      break;
    case 5:
      result = TextData::Get(0xE8F71343u);
      break;
    case 6:
    case 7:
    case 8:
      result = TextData::Get(0x47A398A3u);
      break;
    case 9:
      result = TextData::Get(0x98A5DCF6u);
      break;
    case 0xA:
      result = TextData::Get(0xFB4B3D31u);
      break;
    default:
      return result;
  }
  return result;
}

//----- (0068B2B0) --------------------------------------------------------
void __thiscall Server::SetWorldMgrAddr(Server *this, PROTO_NC_USER_LOGIN_ACK *pkProto)
{
  Server *v2; // esi@1
  void *v3; // eax@1
  void *v4; // edi@2
  void *v5; // eax@3
  void *v6; // edi@4
  PROTO_NC_USER_LOGIN_ACK *v7; // ebx@5
  unsigned int v8; // eax@5
  int v9; // edi@6
  int v10; // ecx@6
  void *v11; // eax@6
  int v12; // ebx@7
  int v13; // eax@7
  unsigned int v14; // edi@9
  int v15; // edx@10
  int v16; // eax@10
  int v17; // edx@12
  int v18; // ecx@12

  v2 = this;
  operator delete__(this->m_pucWorldMgrNo);
  operator delete__(v2->m_pucWorldMgrState);
  v3 = v2->m_pakWorldName;
  if ( v3 )
  {
    v4 = (char *)v3 - 4;
    _eh_vector_destructor_iterator_(
      v3,
      0x10u,
      *((_DWORD *)v3 - 1),
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
    operator delete__(v4);
  }
  v5 = v2->m_kFiestaServerList.pkServerInfo;
  if ( v5 )
  {
    v6 = (char *)v5 - 4;
    _eh_vector_destructor_iterator_(
      v5,
      0x12u,
      *((_DWORD *)v5 - 1),
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
    operator delete__(v6);
  }
  v7 = pkProto;
  v8 = pkProto->numofworld;
  v2->m_uiTotalWorld = v8;
  if ( v8 )
  {
    v2->m_kFiestaServerList.m_uiTotalWorld = v8;
    v9 = v8;
    v10 = 18 * v8 | -((unsigned __int8)(18 * (unsigned __int64)v8 >> 32) != 0);
    v11 = operator new__((v10 + 4) | -__CFADD__(v10, 4));
    if ( v11 )
    {
      v12 = (int)((char *)v11 + 4);
      *(_DWORD *)v11 = v9;
      _eh_vector_constructor_iterator_(
        (char *)v11 + 4,
        0x12u,
        v9,
        (void (__thiscall *)(void *))FiestaServerList::ServerInfo::ServerInfo,
        (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
      v13 = v12;
      v7 = pkProto;
    }
    else
    {
      v13 = 0;
    }
    v14 = 0;
    v2->m_kFiestaServerList.pkServerInfo = (FiestaServerList::ServerInfo *)v13;
    if ( v2->m_uiTotalWorld )
    {
      v15 = -10 - (_DWORD)v7;
      v16 = (int)&v7[10];
      while ( 1 )
      {
        v17 = v16 + v15;
        *(&v2->m_kFiestaServerList.pkServerInfo->kWorldNo + v17) = *(_BYTE *)(v16 - 9);
        v18 = (int)((char *)v2->m_kFiestaServerList.pkServerInfo + v17);
        *(_DWORD *)v18 = *(_DWORD *)(v16 - 8);
        *(_DWORD *)(v18 + 4) = *(_DWORD *)(v16 - 4);
        *(_DWORD *)(v18 + 8) = *(_DWORD *)v16;
        *(_DWORD *)(v18 + 12) = *(_DWORD *)(v16 + 4);
        ++v14;
        *(&v2->m_kFiestaServerList.pkServerInfo->kWorldState + v17) = *(_BYTE *)(v16 + 8);
        v16 += 18;
        if ( v14 >= v2->m_uiTotalWorld )
          break;
        v15 = -10 - (_DWORD)v7;
      }
    }
  }
}

//----- (0068B430) --------------------------------------------------------
void __thiscall Server::_Server(Server *this)
{
  Server *v1; // esi@1
  void *v2; // eax@1
  void *v3; // edi@2
  void *v4; // esi@3

  v1 = this;
  operator delete__(this->m_pucWorldMgrNo);
  operator delete__(v1->m_pucWorldMgrState);
  v2 = v1->m_pakWorldName;
  if ( v2 )
  {
    v3 = (char *)v2 - 4;
    _eh_vector_destructor_iterator_(
      v2,
      0x10u,
      *((_DWORD *)v2 - 1),
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
    operator delete__(v3);
  }
  v4 = v1->m_kFiestaServerList.pkServerInfo;
  if ( v4 )
  {
    _eh_vector_destructor_iterator_(
      v4,
      0x12u,
      *((_DWORD *)v4 - 1),
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
    operator delete__((char *)v4 - 4);
  }
}

//----- (0068B4A0) --------------------------------------------------------
void __thiscall FiestaServerList::ServerInfo::ServerInfo(FiestaServerList::ServerInfo *this)
{
  *(_QWORD *)&this->kWorldName.n4_name[8] = 0i64;
  *(_QWORD *)&this->kWorldName.n4_name[0] = 0i64;
}

//----- (0068B4B0) --------------------------------------------------------
void *__thiscall CVirtualServer::IProtoStruct::_scalar_deleting_destructor_(CVirtualServer::IProtoStruct *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (CVirtualServer::IProtoStructVtbl *)CVirtualServer::IProtoStruct::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C6974: using guessed type int (*CVirtualServer__IProtoStruct___vftable_[12])();

//----- (0068B4E0) --------------------------------------------------------
int __cdecl SRand(int iMax)
{
  int v1; // esi@1
  bool v2; // zf@1
  int v3; // eax@1

  v1 = rand() % iMax;
  v3 = rand() & 0x80000001;
  v2 = v3 == 0;
  if ( v3 < 0 )
    v2 = ((v3 - 1) | 0xFFFFFFFE) == -1;
  if ( !v2 )
    v1 = -v1;
  return v1;
}

//----- (0068B510) --------------------------------------------------------
void __cdecl Make_BriefInfo_LoginCharacter(PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *kProto_, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel)
{
  PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *v6; // esi@1
  char v7; // bl@1
  void *v8; // edi@2
  unsigned __int16 v9; // ax@7
  unsigned __int16 v10; // cx@8
  unsigned __int16 v11; // dx@9
  unsigned __int16 v12; // ax@15
  char v13; // dl@15
  double v14; // st7@15
  unsigned int ui; // [sp+1Ch] [bp+8h]@1

  v6 = kProto_;
  *(_QWORD *)&kProto_->charid.n5_name[12] = 0i64;
  *(_QWORD *)&kProto_->charid.n5_name[4] = 0i64;
  *(_DWORD *)&kProto_->charid.n5_name[0] = 0;
  strncpy(kProto_->charid.n5_name, &byte_9C696F, 0x14u);
  v7 = kClassID;
  kProto_->chrclass = kClassID;
  *(_DWORD *)&kProto_->shapedata.notcamp.equip.Equ_RightHand = -1;
  *(_DWORD *)&kProto_->shapedata.notcamp.equip.Equ_LeftHand = -1;
  *(_DWORD *)&kProto_->shapedata.notcamp.equip.Equ_Boot = -1;
  *(_DWORD *)&kProto_->shapedata.notcamp.equip.Equ_AccPant = -1;
  kProto_->shapedata.notcamp.equip.Equ_AccHeadA = -1;
  kProto_->shapedata.notcamp.equip.Equ_Mouth = -1;
  kProto_->shapedata.notcamp.equip.Equ_Minimon = -1;
  *(_DWORD *)&kProto_->shapedata.notcamp.equip.Equ_Eye = -1;
  *(_DWORD *)&kProto_->shapedata.notcamp.equip.Equ_AccRightHand = -1;
  *(_DWORD *)&kProto_->shapedata.notcamp.equip.Equ_CosEff = -1;
  kProto_->shapedata.notcamp.equip.Equ_MiniMon_R = -1;
  ui = 0;
  if ( ITableBase<ItemInfo_ItemInfoTab>::GetTotal() )
  {
    while ( 1 )
    {
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 4), ui);
      if ( CharClass::GetBitbyClassType((UseClassType)*(_DWORD *)((char *)v8 + 207)) & (1i64 << v6->chrclass) )
      {
        if ( *(_DWORD *)((char *)v8 + 127) < uiEquipLevel )
          goto LABEL_13;
        switch ( *(_DWORD *)((char *)v8 + 110) )
        {
          case 7:
            v11 = *(_WORD *)v8;
            v6->shapedata.notcamp.equip.upgrade.gap0[1] &= 0xF0u;
            v6->shapedata.notcamp.equip.Equ_Body = v11;
            break;
          case 0x13:
            v10 = *(_WORD *)v8;
            v6->shapedata.notcamp.equip.upgrade.gap0[1] &= 0xFu;
            v6->shapedata.notcamp.equip.Equ_Pant = v10;
            break;
          case 0x15:
            v9 = *(_WORD *)v8;
            v6->shapedata.notcamp.equip.upgrade._bf2 &= 0xF0u;
            v6->shapedata.notcamp.equip.Equ_Boot = v9;
            break;
        }
      }
      if ( v6->shapedata.notcamp.equip.Equ_Body != -1
        && v6->shapedata.notcamp.equip.Equ_Pant != -1
        && v6->shapedata.notcamp.equip.Equ_Boot != -1 )
      {
LABEL_14:
        v7 = kClassID;
        break;
      }
LABEL_13:
      ++ui;
      if ( ui >= ITableBase<ItemInfo_ItemInfoTab>::GetTotal() )
        goto LABEL_14;
    }
  }
  v12 = rand();
  v13 = v6->shape._bf0;
  v6->handle = v12;
  v6->mode = 1;
  v6->shape._bf0 = v13 & 3 | 4 * (32 * byGender | v7 & 0x1F);
  *(_WORD *)&v6->shape.haircolor = 0;
  v6->shape.hairtype = 0;
  v6->shape._bf0 ^= (CharClass::GetRace(v7) ^ v6->shape._bf0) & 3;
  v6->coord.xy.x = (unsigned __int16)(signed int)kPos->x;
  v14 = kPos->y;
  v6->coord.dir = 0;
  v6->coord.xy.y = (unsigned __int16)(signed int)v14;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (0068B6F0) --------------------------------------------------------
void __thiscall CVirtualServer::CVirtualServer(CVirtualServer *this)
{
  CVirtualServer *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@6
  std::exception thisa; // [sp+Ch] [bp-24h]@4
  CVirtualServer *v6; // [sp+18h] [bp-18h]@1
  int v7; // [sp+1Ch] [bp-14h]@6
  char *_What; // [sp+20h] [bp-10h]@4
  int v9; // [sp+2Ch] [bp-4h]@2

  v1 = this;
  v6 = this;
  this->m_listProto.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0xCu);
  if ( !v2 )
  {
    v7 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v7);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v9 = 0;
  v1->m_listCharHandle.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0xCu);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v1->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  *(_DWORD *)v3 = v3;
  *(_DWORD *)(*(_DWORD *)&v1->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->m_bIsUpdate = 1;
  v1->m_pkFrameWork = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0068B7C0) --------------------------------------------------------
void __thiscall CVirtualServer::_CVirtualServer(CVirtualServer *this)
{
  void **v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2
  void *v5; // eax@3
  void *v6; // edi@4

  v1 = (void **)this;
  v2 = *(void ***)&this->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *((_DWORD *)v1[3] + 1) = v1[3];
  v1[4] = 0;
  if ( v3 != v1[3] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != v1[3] );
  }
  operator delete(v1[3]);
  v5 = *(void **)*v1;
  *(_DWORD *)*v1 = *v1;
  *((_DWORD *)*v1 + 1) = *v1;
  v1[1] = 0;
  if ( v5 != *v1 )
  {
    do
    {
      v6 = *(void **)v5;
      operator delete(v5);
      v5 = v6;
    }
    while ( v6 != *v1 );
  }
  operator delete(*v1);
}

//----- (0068B840) --------------------------------------------------------
void __thiscall CVirtualServer::Update(CVirtualServer *this)
{
  CVirtualServer *v1; // edi@1
  int v2; // eax@4
  int v3; // esi@7
  double v4; // st7@7
  float v5; // ST18_4@7
  IDirectMessengerVtbl *v6; // ebx@8
  int v7; // eax@8
  int v8; // eax@8
  int v9; // eax@8
  int v10; // eax@8
  int v11; // [sp+4h] [bp-10h]@4
  void *iterCur; // [sp+8h] [bp-Ch]@7
  int iter; // [sp+10h] [bp-4h]@7

  v1 = this;
  if ( this->m_bIsUpdate )
  {
    if ( this->m_listProto.baseclass_0.baseclass_0._Mysize )
    {
      if ( this->m_pkFrameWork )
      {
        v2 = **(_DWORD **)&this->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        v11 = *(_DWORD *)&this->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v2 != *(_DWORD *)&this->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
        {
          while ( 1 )
          {
            v3 = *(_DWORD *)(v2 + 8);
            v4 = Timer::ms_fCurTime;
            v5 = Timer::ms_fCurTime;
            iterCur = (void *)v2;
            iter = *(_DWORD *)v2;
            (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 28))(v3);
            if ( v5 > v4 )
            {
              v6 = v1->m_pkFrameWork->baseclass_0.vfptr;
              v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 40))(v3);
              v8 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 44))(v3, v7);
              v9 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 36))(v3, v8);
              v10 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 32))(v3, v9);
              ((void (__thiscall *)(PgFrameWork *, int))v6[2].SendDirectMessage)(v1->m_pkFrameWork, v10);
              (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 48))(v3, 1);
              if ( iterCur != *(void **)&v1->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
              {
                **((_DWORD **)iterCur + 1) = *(_DWORD *)iterCur;
                *(_DWORD *)(*(_DWORD *)iterCur + 4) = *((_DWORD *)iterCur + 1);
                operator delete(iterCur);
                --v1->m_listProto.baseclass_0.baseclass_0._Mysize;
              }
            }
            if ( iter == v11 )
              break;
            v2 = iter;
          }
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0068B930) --------------------------------------------------------
void __thiscall CVirtualServer::AddMessage(CVirtualServer *this, float fDelayTime, CVirtualServer::IProtoStruct *pkProto)
{
  CVirtualServer::IProtoStruct *v3; // edi@1
  CVirtualServer *v4; // esi@1
  int v5; // edi@1
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v6; // eax@1
  unsigned int v7; // ecx@1
  float fDelayTimea; // [sp+18h] [bp+8h]@1

  v3 = pkProto;
  v4 = this;
  ((void (__thiscall *)(CVirtualServer::IProtoStruct *, _DWORD))pkProto->vfptr->SetRecordTime)(
    pkProto,
    LODWORD(Timer::ms_fCurTime));
  fDelayTimea = Timer::ms_fCurTime + fDelayTime;
  ((void (__thiscall *)(CVirtualServer::IProtoStruct *, _DWORD))v3->vfptr->SetRunTime)(v3, LODWORD(fDelayTimea));
  v5 = *(_DWORD *)&v4->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = std::_List_val<char___std::allocator<char__>>::_Buynode(
         (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)v4,
         *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)&v4->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
         *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)&v4->m_listProto.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
                                                                                     + 4),
         (ItemViewDummy *const *)&pkProto);
  v7 = v4->m_listProto.baseclass_0.baseclass_0._Mysize;
  if ( 1073741822 - v7 < 1 )
    std::_Xlength_error("list<T> too long");
  v4->m_listProto.baseclass_0.baseclass_0._Mysize = v7 + 1;
  *(_DWORD *)(v5 + 4) = v6;
  v6->_Prev->_Next = v6;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0068B9B0) --------------------------------------------------------
void __thiscall CVirtualServer::RegenChars(CVirtualServer *this, char kClassID, char byGender, NiPoint3 *kPos, NiPoint3 *kDir, unsigned int uiEquipLevel)
{
  CVirtualServer *v6; // esi@1
  void *v7; // eax@1
  char *v8; // ebx@2
  void *v9; // eax@4
  int v10; // edi@7
  std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *v11; // eax@7
  unsigned int v12; // ecx@7

  v6 = this;
  v7 = operator new(0xEEu);
  if ( v7 )
  {
    *(_DWORD *)((char *)v7 + 18) = 0;
    *(_DWORD *)((char *)v7 + 14) = 0;
    *(_DWORD *)((char *)v7 + 10) = 0;
    *(_DWORD *)((char *)v7 + 6) = 0;
    *(_DWORD *)((char *)v7 + 2) = 0;
    v8 = (char *)v7;
  }
  else
  {
    v8 = 0;
  }
  memset(v8, 0, 0xEEu);
  Make_BriefInfo_LoginCharacter(
    (PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD *)v8,
    kClassID,
    byGender,
    kPos,
    kDir,
    uiEquipLevel);
  v9 = operator new(0x1Cu);
  if ( v9 )
  {
    *(_DWORD *)v9 = CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::_vftable_;
    *((_DWORD *)v9 + 3) = 7;
    *((_DWORD *)v9 + 4) = 6;
    *((_DWORD *)v9 + 5) = v8;
    *((_DWORD *)v9 + 6) = 238;
  }
  else
  {
    v9 = 0;
  }
  CVirtualServer::AddMessage(v6, 3.0, (CVirtualServer::IProtoStruct *)v9);
  v10 = *(_DWORD *)&v6->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v11 = std::_List_val<unsigned_short_std::allocator<unsigned_short>>::_Buynode(
          &v6->m_listCharHandle.baseclass_0,
          *(std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node **)&v6->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
          *(std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node **)(v10 + 4),
          (const unsigned __int16 *)v8);
  v12 = v6->m_listCharHandle.baseclass_0.baseclass_0._Mysize;
  if ( 2147483646 - v12 < 1 )
    std::_Xlength_error("list<T> too long");
  v6->m_listCharHandle.baseclass_0.baseclass_0._Mysize = v12 + 1;
  *(_DWORD *)(v10 + 4) = v11;
  v11->_Prev->_Next = v11;
  v6->m_bIsUpdate = 1;
}
// 9C69AC: using guessed type int (__stdcall *CVirtualServer__ProtoStruct_PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD____vftable_[2])(float _fRecordTime);

//----- (0068BA90) --------------------------------------------------------
void __thiscall CVirtualServer::Attack(CVirtualServer *this, unsigned int dwAttacker, unsigned int dwTarget)
{
  CVirtualServer *v3; // edi@1
  void *v4; // eax@1
  void *v5; // esi@1
  void *v6; // eax@1

  v3 = this;
  v4 = operator new(0xDu);
  v5 = v4;
  *(_DWORD *)v4 = 0;
  *((_DWORD *)v4 + 1) = 0;
  *((_DWORD *)v4 + 2) = 0;
  *((_BYTE *)v4 + 12) = 0;
  *((_BYTE *)v4 + 4) = 0;
  *(_WORD *)v4 = dwAttacker;
  *(_DWORD *)((char *)v4 + 5) = 0;
  *((_WORD *)v4 + 1) = dwTarget;
  *(_WORD *)((char *)v4 + 9) = 1000;
  v6 = operator new(0x1Cu);
  if ( v6 )
  {
    *(_DWORD *)v6 = CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::_vftable_;
    *((_DWORD *)v6 + 3) = 9;
    *((_DWORD *)v6 + 4) = 46;
    *((_DWORD *)v6 + 5) = v5;
    *((_DWORD *)v6 + 6) = 13;
  }
  else
  {
    v6 = 0;
  }
  CVirtualServer::AddMessage(v3, 3.0, (CVirtualServer::IProtoStruct *)v6);
  v3->m_bIsUpdate = 1;
}
// 9C69E4: using guessed type int (__stdcall *CVirtualServer__ProtoStruct_PROTO_NC_BAT_SOMEONEBASH_HIT_CMD____vftable_[2])(float _fRecordTime);

//----- (0068BB20) --------------------------------------------------------
void __thiscall CVirtualServer::StartAttack(CVirtualServer *this)
{
  CVirtualServer *v1; // ebx@1
  int v2; // edx@1
  int v3; // esi@1
  unsigned int *v4; // edi@2
  unsigned int v5; // eax@3
  int v6; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = *(_DWORD *)&this->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *(_DWORD *)v2;
  v6 = *(_DWORD *)&this->m_listCharHandle.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( *(_DWORD *)v2 != v2 )
  {
    v4 = (unsigned int *)(v3 + 8);
    do
    {
      v5 = *(_WORD *)(v3 + 8);
      if ( (_WORD)v5 != *(_WORD *)v4 )
      {
        CVirtualServer::Attack(v1, v5, *(_WORD *)v4);
        v2 = v6;
      }
      v3 = *(_DWORD *)v3;
    }
    while ( v3 != v2 );
  }
}

//----- (0068BB70) --------------------------------------------------------
void __thiscall CVirtualServer::Process(CVirtualServer *this)
{
  CVirtualServer *v1; // ebx@1
  signed int v2; // edi@1
  int v3; // eax@2
  int v4; // eax@4
  AbStateInfecteeVtbl *v5; // edx@6
  int v6; // eax@6
  float v7; // ecx@6
  float v8; // edx@6
  float v9; // eax@6
  int v10; // eax@6
  int v11; // esi@6
  bool v12; // zf@6
  int v13; // eax@6
  int v14; // eax@10
  int v15; // esi@10
  bool v16; // zf@10
  int v17; // eax@10
  NiPoint3 pos3MainCharPos; // [sp+Ch] [bp-18h]@6
  int kClassID; // [sp+18h] [bp-Ch]@4
  int byGender; // [sp+1Ch] [bp-8h]@6
  int v21; // [sp+20h] [bp-4h]@6

  v1 = this;
  v2 = 20;
  do
  {
    v3 = rand() & 0x80000003;
    if ( v3 < 0 )
      LOBYTE(v3) = ((unsigned __int8)(v3 - 1) | 0xFC) + 1;
    LOBYTE(kClassID) = 7 * v3 + 1;
    v4 = rand() & 0x80000001;
    if ( v4 < 0 )
      LOBYTE(v4) = ((unsigned __int8)(v4 - 1) | 0xFE) + 1;
    v5 = g_pkMainChar->baseclass_0.vfptr;
    LOBYTE(byGender) = v4;
    v6 = ((int (*)(void))v5[6].Deaffect)();
    LODWORD(v7) = *(_DWORD *)v6;
    LODWORD(v8) = *(_DWORD *)(v6 + 4);
    LODWORD(v9) = *(_DWORD *)(v6 + 8);
    pos3MainCharPos.x = v7;
    pos3MainCharPos.y = v8;
    pos3MainCharPos.z = v9;
    v10 = rand();
    v11 = v10 % 350;
    v21 = v10 % 350;
    v13 = rand() & 0x80000001;
    v12 = v13 == 0;
    if ( v13 < 0 )
      v12 = ((v13 - 1) | 0xFFFFFFFE) == -1;
    if ( !v12 )
      v21 = -v11;
    pos3MainCharPos.x = (double)v21 + pos3MainCharPos.x;
    v14 = rand();
    v15 = v14 % 350;
    v21 = v14 % 350;
    v17 = rand() & 0x80000001;
    v16 = v17 == 0;
    if ( v17 < 0 )
      v16 = ((v17 - 1) | 0xFFFFFFFE) == -1;
    if ( !v16 )
      v21 = -v15;
    pos3MainCharPos.y = (double)v21 + pos3MainCharPos.y;
    rand();
    rand();
    rand();
    rand();
    CVirtualServer::RegenChars(v1, kClassID, byGender, &pos3MainCharPos, &pos3MainCharPos, 0);
    --v2;
  }
  while ( v2 );
}

//----- (0068BC80) --------------------------------------------------------
void __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::SetRecordTime(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this, float _fRecordTime)
{
  this->m_fRecordTime = _fRecordTime;
}

//----- (0068BC90) --------------------------------------------------------
void __thiscall NiShaderAttributeDesc::SetFlags(NSBRequirements *this, unsigned int uiBones)
{
  this->m_uiBonesPerPartition = uiBones;
}

//----- (0068BCA0) --------------------------------------------------------
NiPixelFormat *__thiscall NiShaderRequirementDesc::GetMinPixelShaderVersion(NiDX92DBufferData *this)
{
  return this->m_pkPixelFormat;
}

//----- (0068BCB0) --------------------------------------------------------
void __thiscall NSBRequirements::SetPlatformFlags(NiD3DShaderLibrary *this, NiDX9Renderer *pkRenderer)
{
  this->m_pkD3DRenderer = pkRenderer;
}

//----- (0068BCC0) --------------------------------------------------------
void __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::SetCommand(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this, int _nCommand)
{
  this->m_Command = _nCommand;
}

//----- (0068BCD0) --------------------------------------------------------
float __thiscall CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::GetRecordTime(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fRecordTime;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (0068BCE0) --------------------------------------------------------
void *__thiscall CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::_scalar_deleting_destructor_(CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *this, unsigned int a2)
{
  CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD> *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  v3 = this->m_pvData;
  this->baseclass_0.vfptr = (CVirtualServer::IProtoStructVtbl *)CVirtualServer::ProtoStruct<PROTO_NC_BAT_SOMEONEBASH_HIT_CMD>::_vftable_;
  if ( v3 )
    operator delete(v3);
  v2->baseclass_0.vfptr = (CVirtualServer::IProtoStructVtbl *)CVirtualServer::IProtoStruct::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6974: using guessed type int (*CVirtualServer__IProtoStruct___vftable_[12])();
// 9C69E4: using guessed type int (__stdcall *CVirtualServer__ProtoStruct_PROTO_NC_BAT_SOMEONEBASH_HIT_CMD____vftable_[2])(float _fRecordTime);

//----- (0068BD20) --------------------------------------------------------
void *__thiscall CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::_vector_deleting_destructor_(CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD> *this, unsigned int a2)
{
  CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD> *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  v3 = this->m_pvData;
  this->baseclass_0.vfptr = (CVirtualServer::IProtoStructVtbl *)CVirtualServer::ProtoStruct<PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD>::_vftable_;
  if ( v3 )
    operator delete(v3);
  v2->baseclass_0.vfptr = (CVirtualServer::IProtoStructVtbl *)CVirtualServer::IProtoStruct::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6974: using guessed type int (*CVirtualServer__IProtoStruct___vftable_[12])();
// 9C69AC: using guessed type int (__stdcall *CVirtualServer__ProtoStruct_PROTO_NC_BRIEFINFO_LOGINCHARACTER_CMD____vftable_[2])(float _fRecordTime);

//----- (0068BD60) --------------------------------------------------------
std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *__thiscall std::_List_val<unsigned_short_std::allocator<unsigned_short>>::_Buynode(std::_List_val<unsigned short,std::allocator<unsigned short> > *this, std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *_Next, std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *_Prev, const unsigned __int16 *_Val)
{
  std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *result; // eax@1
  std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *v5; // edx@2
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *)operator new(0xCu);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<unsigned short,std::allocator<unsigned short> >::_Node *)-8 )
    result->_Myval = *_Val;
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0068BDC0) --------------------------------------------------------
bool __thiscall AfterImgEff::IsEnd(AfterImgEff *this, float fTime)
{
  float fTimea; // [sp+8h] [bp+8h]@2

  return !this->m_pkTextKeyExtraData
      && (fTimea = fTime - this->baseclass_0.m_fStartTime, this->baseclass_0.m_fLifeTime < (double)fTimea);
}

//----- (0068BDF0) --------------------------------------------------------
void __thiscall AfterImgEff::AfterImgEff(AfterImgEff *this, NiNode *pkNode, bool bCreateProgramEff)
{
  AfterImgEff *v3; // esi@1
  NiActorManager *v4; // edi@1

  v3 = this;
  Effect::Effect(&this->baseclass_0, pkNode, bCreateProgramEff, 0);
  v3->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AfterImgEff::_vftable_;
  v3->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)AfterImgEff::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v3->m_kTimerInterval);
  v3->m_spActor.m_pObject = 0;
  v3->m_fExpandTime = 1.0;
  v3->m_uiShapeType = 1;
  v3->m_pkAterImgShape = 0;
  v3->m_fWidth = 0.0;
  v3->m_pkTextKeyExtraData = 0;
  v4 = v3->m_spActor.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3->m_spActor.m_pObject = 0;
  }
  v3->m_fOldTime = 0.0;
}
// 9C6AE8: using guessed type int (__stdcall *AfterImgEff___vftable_[3])(int);
// 9C6AFC: using guessed type int (__thiscall *AfterImgEff___vftable_)(void *p, char);

//----- (0068BED0) --------------------------------------------------------
void __thiscall AfterImgEff::_AfterImgEff(AfterImgEff *this)
{
  AfterImgEff *v1; // esi@1
  NiActorManager *v2; // edi@1
  AfterImgShape *v3; // ecx@6
  NiActorManager *v4; // edi@8

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AfterImgEff::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)AfterImgEff::_vftable_;
  v2 = this->m_spActor.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spActor.m_pObject = 0;
  }
  v3 = v1->m_pkAterImgShape;
  if ( v3 )
    ((void (__stdcall *)(_DWORD))v3->vfptr->__vecDelDtor)(1);
  v4 = v1->m_spActor.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  Effect::_Effect(&v1->baseclass_0);
}
// 9C6AE8: using guessed type int (__stdcall *AfterImgEff___vftable_[3])(int);
// 9C6AFC: using guessed type int (__thiscall *AfterImgEff___vftable_)(void *p, char);

//----- (0068BFA0) --------------------------------------------------------
void __thiscall AfterImgEff::UpdateTextKey(AfterImgEff *this, float fTime)
{
  AfterImgEff *v2; // ebx@1
  NiTextKeyExtraData *v3; // eax@1
  unsigned int v4; // ecx@3
  NiTextKey *v5; // eax@3
  unsigned int v6; // edi@3
  const char *v7; // esi@6
  double v8; // st6@6
  unsigned int uiNumKeys; // [sp+4h] [bp-Ch]@3
  NiTextKey *pkTextKey; // [sp+Ch] [bp-4h]@3
  float fPastTime; // [sp+18h] [bp+8h]@3

  v2 = this;
  v3 = this->m_pkTextKeyExtraData;
  if ( v3 )
  {
    if ( this->baseclass_0.m_spNode.m_pObject )
    {
      v4 = v3->m_uiNumKeys;
      v5 = v3->m_pKeys;
      v6 = 0;
      fPastTime = fTime - v2->baseclass_0.m_fStartTime;
      uiNumKeys = v4;
      pkTextKey = v5;
      if ( v4 )
      {
        while ( 1 )
        {
          v7 = v5[v6].m_pText;
          v8 = v5[v6].m_fTime;
          if ( v8 > fPastTime )
            break;
          if ( v8 >= 0.0 && v2->baseclass_0.m_fLastUpdateTime < v8 && v8 <= fPastTime )
          {
            if ( strncmp(v7, "on", 2u) )
            {
              if ( !strncmp(v7, "off", 3u) )
                v2->baseclass_0.m_spNode.m_pObject->baseclass_0.m_uFlags |= 1u;
            }
            else
            {
              v2->baseclass_0.m_spNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
            }
          }
          ++v6;
          if ( v6 >= uiNumKeys )
            break;
          v5 = pkTextKey;
        }
      }
    }
  }
}

//----- (0068C090) --------------------------------------------------------
void __thiscall AfterImgEff::Update(AfterImgEff *this, float fTime)
{
  AfterImgEff *v2; // esi@1
  NiActorManager *v3; // eax@3
  NiAVObject *v4; // edi@3
  NiActorManager *v5; // edi@5
  NiAVObject *v6; // eax@14
  NiAVObject *v7; // eax@16
  double v8; // st7@18
  signed int v9; // eax@20
  int v10; // ebx@20
  bool v11; // zf@21
  NiAVObject *v12; // eax@26
  NiAVObject *v13; // eax@26
  AfterImgShape *v14; // ecx@26
  float v15; // ST20_4@27
  float v16; // ST24_4@27
  float v17; // ST28_4@27
  float v18; // ST14_4@27
  double v19; // st7@27
  float v20; // ST18_4@27
  double v21; // st7@27
  AfterImgShape *v22; // ecx@27
  float v23; // ST1C_4@27
  float v24; // ecx@29
  double v25; // st7@29
  float v26; // edx@29
  float v27; // eax@29
  float v28; // ecx@29
  float v29; // edx@29
  float v30; // eax@29
  float v31; // ST08_4@31
  int v32; // eax@31
  NiPoint3 pos3Dir; // [sp+2Ch] [bp-38h]@18
  NiPoint3 kPos1; // [sp+38h] [bp-2Ch]@12
  NiPoint3 kPos0; // [sp+44h] [bp-20h]@12
  float v36; // [sp+50h] [bp-14h]@27
  float fTimeGap; // [sp+54h] [bp-10h]@18
  float *pSequence; // [sp+58h] [bp-Ch]@3
  float nStep; // [sp+5Ch] [bp-8h]@18
  float fLength0; // [sp+60h] [bp-4h]@18

  v2 = this;
  AfterImgEff::UpdateTextKey(this, fTime);
  if ( !v2->m_pkAterImgShape )
  {
    Effect::Update(&v2->baseclass_0, fTime);
    return;
  }
  v3 = v2->m_spActor.m_pObject;
  v4 = 0;
  pSequence = 0;
  if ( v3 )
  {
    if ( v3->baseclass_0.m_uiRefCount == 1 )
    {
      v5 = v3;
      if ( v3 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) )
        {
          if ( v5 )
            v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
        }
        v2->m_spActor.m_pObject = 0;
      }
      return;
    }
    v4 = v3->m_spNIFRoot.m_pObject;
    if ( !NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
            (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v3->m_kSequenceMap,
            v3->m_eCurID,
            (NiVBSet **)&pSequence)
      || !pSequence )
      return;
  }
  LODWORD(kPos0.x) = (_DWORD)NiPoint3::ZERO.x;
  kPos0.y = NiPoint3::ZERO.y;
  kPos0.z = NiPoint3::ZERO.z;
  LODWORD(kPos1.x) = (_DWORD)NiPoint3::ZERO.x;
  kPos1.y = NiPoint3::ZERO.y;
  kPos1.z = NiPoint3::ZERO.z;
  if ( v4 )
    NiAVObject::Update(v4, fTime, 1);
  v6 = v2->m_pkAftImgDummy0;
  if ( v6 )
  {
    kPos0.x = v6->m_kWorld.m_Translate.x;
    kPos0.y = v6->m_kWorld.m_Translate.y;
    kPos0.z = v6->m_kWorld.m_Translate.z;
  }
  v7 = v2->m_pkAftImgDummy1;
  if ( v7 )
  {
    kPos1.x = v7->m_kWorld.m_Translate.x;
    kPos1.y = v7->m_kWorld.m_Translate.y;
    kPos1.z = v7->m_kWorld.m_Translate.z;
  }
  fTimeGap = fTime - v2->m_fOldTime;
  pos3Dir.x = v2->m_pos3Old0.x - kPos0.x;
  pos3Dir.y = v2->m_pos3Old0.y - kPos0.y;
  pos3Dir.z = v2->m_pos3Old0.z - kPos0.z;
  nStep = pos3Dir.y * pos3Dir.y + pos3Dir.x * pos3Dir.x + pos3Dir.z * pos3Dir.z;
  nStep = sqrt(nStep);
  fLength0 = nStep;
  pos3Dir.x = v2->m_pos3Old1.x - kPos1.x;
  pos3Dir.y = v2->m_pos3Old1.y - kPos1.y;
  pos3Dir.z = v2->m_pos3Old1.z - kPos1.z;
  nStep = pos3Dir.y * pos3Dir.y + pos3Dir.x * pos3Dir.x + pos3Dir.z * pos3Dir.z;
  nStep = sqrt(nStep);
  v8 = fLength0;
  if ( nStep >= (double)fLength0 )
    v8 = nStep;
  nStep = v8;
  v9 = (signed int)(nStep / -3.0);
  v10 = 1 - v9;
  LODWORD(nStep) = 1 - v9;
  fTimeGap = fTimeGap / (double)(1 - v9);
  fLength0 = v2->m_fOldTime;
  pos3Dir.x = kPos0.x - v2->m_pos3Old0.x;
  pos3Dir.y = kPos0.y - v2->m_pos3Old0.y;
  pos3Dir.z = kPos0.z - v2->m_pos3Old0.z;
  NiPoint3::Unitize(&pos3Dir);
  nStep = 0.0;
  if ( v10 > 0 )
  {
    do
    {
      v11 = v2->m_uiShapeType == 0;
      fLength0 = fLength0 + fTimeGap;
      if ( v11 )
      {
        if ( !pSequence || pSequence[19] <= (double)fLength0 )
        {
          if ( v4 )
            NiAVObject::Update(v4, fLength0, 1);
          v12 = v2->m_pkAftImgDummy0;
          kPos0.x = v12->m_kWorld.m_Translate.x;
          kPos0.y = v12->m_kWorld.m_Translate.y;
          kPos0.z = v12->m_kWorld.m_Translate.z;
          v13 = v2->m_pkAftImgDummy1;
          kPos1.x = v13->m_kWorld.m_Translate.x;
          v14 = v2->m_pkAterImgShape;
          kPos1.y = v13->m_kWorld.m_Translate.y;
          kPos1.z = v13->m_kWorld.m_Translate.z;
          ((void (__stdcall *)(NiPoint3 *, NiPoint3 *))v14->vfptr->SetVertex)(&kPos0, &kPos1);
        }
      }
      else
      {
        v36 = (double)SLODWORD(nStep) * 3.0;
        v15 = pos3Dir.x * v36;
        v16 = pos3Dir.y * v36;
        v17 = v36 * pos3Dir.z;
        v18 = v15 + v2->m_pos3Old0.x;
        v19 = v2->m_pos3Old0.y;
        kPos0.x = v18;
        v20 = v19 + v16;
        v21 = v2->m_pos3Old0.z;
        kPos0.y = v20;
        v22 = v2->m_pkAterImgShape;
        v23 = v21 + v17;
        kPos0.z = v23;
        ((void (__stdcall *)(NiPoint3 *, NiPoint3 *))v22->vfptr->SetVertex)(&kPos0, &kPos0);
      }
      ++LODWORD(nStep);
    }
    while ( SLODWORD(nStep) < v10 );
  }
  LODWORD(v24) = (_DWORD)kPos0.x;
  v25 = fTime;
  v26 = kPos0.y;
  v2->m_fOldTime = fTime;
  v27 = kPos0.z;
  v2->m_pos3Old0.x = v24;
  LODWORD(v28) = (_DWORD)kPos1.x;
  v2->m_pos3Old0.y = v26;
  v29 = kPos1.y;
  v2->m_pos3Old0.z = v27;
  v30 = kPos1.z;
  v2->m_pos3Old1.x = v28;
  v2->m_pos3Old1.y = v29;
  v2->m_pos3Old1.z = v30;
  if ( v4 )
  {
    NiAVObject::Update(v4, fTime, 1);
    v25 = fTime;
  }
  v31 = v25;
  v32 = CNSTimer_Interval::IsRun_GetCount(&v2->m_kTimerInterval, v31);
  if ( v32 )
    AfterImgShape::RemoveVertex(v2->m_pkAterImgShape, v32);
  ((void (__cdecl *)(_DWORD))v2->m_pkAterImgShape->vfptr->Update)(LODWORD(fTime));
  Effect::Update(&v2->baseclass_0, fTime);
}

//----- (0068C4C0) --------------------------------------------------------
void __thiscall AfterImgEff::Start(AfterImgEff *this, float fTime)
{
  AfterImgEff *v2; // esi@1
  float v3; // edx@1
  float v4; // ecx@1
  NiAVObject *v5; // eax@1
  NiAVObject *v6; // eax@3
  AfterImgShape *v7; // ecx@5
  double v8; // st7@5
  float v9; // ST00_4@7

  v2 = this;
  CNSTimer_Interval::ReSet(&this->m_kTimerInterval, fTime);
  v2->m_kTimerInterval.m_fCheckTime = 0.0089999996;
  LODWORD(v2->m_pos3Old1.x) = (_DWORD)NiPoint3::ZERO.x;
  v2->m_pos3Old1.y = NiPoint3::ZERO.y;
  v3 = NiPoint3::ZERO.z;
  v2->m_pos3Old1.z = NiPoint3::ZERO.z;
  v4 = v2->m_pos3Old1.y;
  v2->m_pos3Old0.x = v2->m_pos3Old1.x;
  v5 = v2->m_pkAftImgDummy0;
  v2->m_pos3Old0.y = v4;
  v2->m_pos3Old0.z = v3;
  if ( v5 )
  {
    v2->m_pos3Old0.x = v5->m_kWorld.m_Translate.x;
    v2->m_pos3Old0.y = v5->m_kWorld.m_Translate.y;
    v2->m_pos3Old0.z = v5->m_kWorld.m_Translate.z;
  }
  v6 = v2->m_pkAftImgDummy1;
  if ( v6 )
  {
    v2->m_pos3Old1.x = v6->m_kWorld.m_Translate.x;
    v2->m_pos3Old1.y = v6->m_kWorld.m_Translate.y;
    v2->m_pos3Old1.z = v6->m_kWorld.m_Translate.z;
  }
  v7 = v2->m_pkAterImgShape;
  v8 = fTime;
  v2->m_fOldTime = fTime;
  if ( v7 )
  {
    AfterImgShape::Start(v7, fTime);
    v8 = fTime;
  }
  v9 = v8;
  Effect::Start(&v2->baseclass_0, v9);
}

//----- (0068C5B0) --------------------------------------------------------
void __cdecl AfterImgEff::ClearResourceMap()
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v0; // eax@2
  int v1; // edi@2
  int v2; // esi@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v3; // eax@11
  int v4; // edi@11
  int v5; // esi@12

  if ( unk_B5AD00 )
  {
    v0 = stru_B5ACFC;
    v1 = **(_DWORD **)&stru_B5ACFC;
    while ( v1 != v0 )
    {
      v2 = *(_DWORD *)(v1 + 16);
      if ( v2 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
        *(_DWORD *)(v1 + 16) = 0;
        v0 = stru_B5ACFC;
      }
    }
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(
      &AfterImgEff::m_mapEffectNode,
      *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)(*(_DWORD *)&v0 + 4));
    *(_DWORD *)(*(_DWORD *)&stru_B5ACFC + 4) = stru_B5ACFC;
    **(_DWORD **)&stru_B5ACFC = stru_B5ACFC;
    *(_DWORD *)(*(_DWORD *)&stru_B5ACFC + 8) = stru_B5ACFC;
    unk_B5AD00 = 0;
  }
  if ( unk_B5AD10 )
  {
    v3 = stru_B5AD0C;
    v4 = **(_DWORD **)&stru_B5AD0C;
    while ( v4 != v3 )
    {
      v5 = *(_DWORD *)(v4 + 16);
      if ( v5 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
        {
          if ( v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        }
        *(_DWORD *)(v4 + 16) = 0;
        v3 = stru_B5AD0C;
      }
    }
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(
      &AfterImgEff::m_mapTexture,
      *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)(*(_DWORD *)&v3 + 4));
    *(_DWORD *)(*(_DWORD *)&stru_B5AD0C + 4) = stru_B5AD0C;
    **(_DWORD **)&stru_B5AD0C = stru_B5AD0C;
    *(_DWORD *)(*(_DWORD *)&stru_B5AD0C + 8) = stru_B5AD0C;
    unk_B5AD10 = 0;
  }
}

//----- (0068C6A0) --------------------------------------------------------
NiPointer<NiNode> *__thiscall AfterImgEff::GetEffectNode(AfterImgEff *this, NiPointer<NiNode> *result, unsigned int uiIndex)
{
  NiObject *v3; // edi@1
  NiNode *v4; // eax@4
  NiNode *v5; // esi@4
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v6; // eax@5
  NiObject *v7; // eax@5
  NiObject *v9; // eax@12
  char v10; // [sp+0h] [bp-12Ch]@5
  NiPointer<NiNode> spNode; // [sp+8h] [bp-124h]@1
  std::pair<unsigned long const ,NiPointer<NiControllerSequence> > _Val; // [sp+Ch] [bp-120h]@1
  NiPointer<NiNode> *v13; // [sp+14h] [bp-118h]@1
  int v14; // [sp+18h] [bp-114h]@1
  char acNIFFullFileName[256]; // [sp+1Ch] [bp-110h]@2
  unsigned int v16; // [sp+11Ch] [bp-10h]@1
  int v17; // [sp+128h] [bp-4h]@1
  int v18; // [sp+12Ch] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v3 = 0;
  v14 = 0;
  v13 = result;
  spNode.m_pObject = 0;
  v17 = 1;
  std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&AfterImgEff::m_mapEffectNode,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&_Val.baseclass_0.second,
    &uiIndex);
  if ( (NiControllerSequence *)stru_B5ACFC == _Val.baseclass_0.second.m_pObject )
  {
    memset(acNIFFullFileName, 0, 0x100u);
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acNIFFullFileName, "%sUpAftImgEf%02d.nif");
    v4 = PgUtil::LoadNifFile(acNIFFullFileName, 0, 1);
    v5 = v4;
    if ( v4 )
    {
      spNode.m_pObject = v4;
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      LOBYTE(v17) = 2;
      _Val.baseclass_0.first = uiIndex;
      _Val.baseclass_0.second.m_pObject = (NiControllerSequence *)v5;
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v6 = std::_Tree_val<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Buynode<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>(
             &AfterImgEff::m_mapEffectNode.baseclass_0,
             &_Val);
      std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiSourceTexture>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(
        &AfterImgEff::m_mapEffectNode,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >,bool> *)&v10,
        v6,
        0);
      v7 = NiObject::Clone(&v5->baseclass_0.baseclass_0.baseclass_0);
      v13->m_pObject = (NiNode *)v7;
      if ( v7 )
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
      v14 = 1;
      LOBYTE(v17) = 1;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      LOBYTE(v17) = 0;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      return v13;
    }
  }
  else
  {
    v9 = NiObject::Clone((NiObject *)_Val.baseclass_0.second.m_pObject->m_uiArrayGrowBy);
    if ( v9 )
    {
      v3 = v9;
      InterlockedIncrement((volatile LONG *)&v9->baseclass_0.m_uiRefCount);
    }
  }
  result->m_pObject = (NiNode *)v3;
  if ( v3 )
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount);
  v14 = 1;
  LOBYTE(v17) = 0;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount) )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0068C890) --------------------------------------------------------
NiPointer<NiSourceTexture> *__thiscall AfterImgEff::GetEffTexture(AfterImgEff *this, NiPointer<NiSourceTexture> *result, unsigned int uiIndex)
{
  NiPointer<NiSourceTexture> *v3; // esi@1
  NiObject *v4; // edi@1
  NiImageConverter *v5; // eax@4
  NiPixelData *v6; // eax@4
  NiSourceTexture *v7; // eax@5
  NiSourceTexture *v8; // esi@5
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v9; // eax@6
  NiObject *v10; // eax@6
  NiObject *v12; // eax@13
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-130h]@5
  NiPointer<NiSourceTexture> spTex; // [sp+Ch] [bp-124h]@1
  std::pair<unsigned long const ,NiPointer<NiControllerSequence> > _Val; // [sp+10h] [bp-120h]@1
  int v16; // [sp+18h] [bp-118h]@1
  NiPointer<NiSourceTexture> *v17; // [sp+1Ch] [bp-114h]@1
  char acFilName[256]; // [sp+20h] [bp-110h]@2
  unsigned int v19; // [sp+120h] [bp-10h]@1
  int v20; // [sp+12Ch] [bp-4h]@1
  int v21; // [sp+130h] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v3 = result;
  v17 = result;
  v16 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&AfterImgEff::m_mapTexture,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&_Val.baseclass_0.second,
    &uiIndex);
  v4 = 0;
  spTex.m_pObject = 0;
  v20 = 1;
  if ( (NiControllerSequence *)stru_B5AD0C == _Val.baseclass_0.second.m_pObject )
  {
    memset(acFilName, 0, 0x100u);
    if ( !Folder::m_bInit )
      Folder::Init();
    sprintf(acFilName, "%sUpAftImgEf%02d.dds");
    v5 = NiImageConverter::GetImageConverter();
    v6 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, _DWORD, _DWORD))v5->baseclass_0.vfptr[2].__vecDelDtor)(
                          v5,
                          acFilName,
                          0);
    if ( v6 )
    {
      kPrefs.m_ePixelLayout = 6;
      kPrefs.m_eAlphaFmt = 3;
      kPrefs.m_eMipMapped = 0;
      v7 = NiSourceTexture::Create(v6, &kPrefs);
      v8 = v7;
      if ( v7 )
      {
        spTex.m_pObject = v7;
        InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        LOBYTE(v20) = 2;
        _Val.baseclass_0.first = uiIndex;
        _Val.baseclass_0.second.m_pObject = (NiControllerSequence *)v8;
        InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v9 = std::_Tree_val<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Buynode<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>(
               &AfterImgEff::m_mapTexture.baseclass_0,
               &_Val);
        std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiSourceTexture>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(
          &AfterImgEff::m_mapTexture,
          (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >,bool> *)&kPrefs.m_eAlphaFmt,
          v9,
          0);
        v10 = NiObject::Clone(&v8->baseclass_0.baseclass_0.baseclass_0);
        v17->m_pObject = (NiSourceTexture *)v10;
        if ( v10 )
          InterlockedIncrement((volatile LONG *)&v10->baseclass_0.m_uiRefCount);
        v16 = 1;
        LOBYTE(v20) = 1;
        if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
        LOBYTE(v20) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
        return v17;
      }
      v3 = v17;
    }
  }
  else
  {
    v12 = NiObject::Clone((NiObject *)_Val.baseclass_0.second.m_pObject->m_uiArrayGrowBy);
    if ( v12 )
    {
      v4 = v12;
      InterlockedIncrement((volatile LONG *)&v12->baseclass_0.m_uiRefCount);
    }
  }
  v3->m_pObject = (NiSourceTexture *)v4;
  if ( v4 )
    InterlockedIncrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount);
  v16 = 1;
  LOBYTE(v20) = 0;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) )
    v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  return v3;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0068CAC0) --------------------------------------------------------
bool __thiscall AfterImgEff::CreateShape(AfterImgEff *this, NiNode *pkNode, int WeaponLevel, UpEffectData *pkUpEff)
{
  AfterImgEff *v4; // edi@1
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@3
  void *v7; // eax@4
  AfterImgShape *v8; // ecx@6
  void *v9; // eax@8
  AfterImgShape1 *v10; // eax@9
  int v11; // eax@10
  AfterImgShape *v12; // ecx@11
  void *v13; // eax@13
  void (__thiscall *v14)(AfterImgShape *, int); // eax@16
  int v15; // ebx@16
  NiObject *v16; // esi@17
  int v17; // eax@17
  NiObject *v18; // eax@21
  NiObject *v19; // esi@21
  UpEffectData *v20; // esi@27
  int v21; // ebx@28
  char v22; // al@28
  unsigned int v23; // ebx@32
  NiObject *v24; // esi@33
  int v25; // eax@35
  NiObject *v26; // eax@35
  UpEffectData *v27; // esi@37
  NiProperty *v28; // eax@42
  void *v29; // eax@46
  NiD3DDefaultShader *v30; // eax@47
  void *v31; // ecx@49
  int v32; // [sp+2Ch] [bp-2Ch]@0
  int v33; // [sp+30h] [bp-28h]@0
  int v34; // [sp+34h] [bp-24h]@0
  int v35; // [sp+38h] [bp-20h]@0
  NiPointer<HazeAccumulator> thisa; // [sp+3Ch] [bp-1Ch]@35
  NiProperty *pkGeom; // [sp+40h] [bp-18h]@18
  NiPointer<NiProperty> result; // [sp+44h] [bp-14h]@17
  void *pkGeometry; // [sp+48h] [bp-10h]@1
  int v40; // [sp+54h] [bp-4h]@8
  NiTriShape *pkShape; // [sp+60h] [bp+8h]@16

  v4 = this;
  if ( !PgUtil::CatchGeometry(&pkNode->baseclass_0, (NiGeometry **)&pkGeometry) )
    return 0;
  v6 = pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor;
  if ( v4->m_uiShapeType )
  {
    v11 = (int)v6(&pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)"AftImgDummy0");
    v4->m_pkAftImgDummy0 = (NiAVObject *)v11;
    if ( v11 )
    {
      v12 = v4->m_pkAterImgShape;
      v4->m_pkAftImgDummy1 = 0;
      if ( v12 )
        ((void (__stdcall *)(signed int))v12->vfptr->__vecDelDtor)(1);
      v13 = operator new(0x58u);
      v40 = 1;
      if ( v13 )
      {
        AfterImgShape1::AfterImgShape1(v10);
        goto LABEL_16;
      }
LABEL_15:
      v10 = 0;
      goto LABEL_16;
    }
    return 0;
  }
  v4->m_pkAftImgDummy0 = (NiAVObject *)v6(
                                         &pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                                         (unsigned int)"AftImgDummy0");
  v7 = pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
         (NiRefObject *)pkNode,
         (unsigned int)"AftImgDummy1");
  v4->m_pkAftImgDummy1 = (NiAVObject *)v7;
  if ( !v4->m_pkAftImgDummy0 || !v7 )
    return 0;
  v8 = v4->m_pkAterImgShape;
  if ( v8 )
    ((void (__stdcall *)(signed int))v8->vfptr->__vecDelDtor)(1);
  v9 = operator new(0x4Cu);
  v40 = 0;
  if ( !v9 )
    goto LABEL_15;
  AfterImgShape0::AfterImgShape0((AfterImgShape0 *)v9);
LABEL_16:
  v4->m_pkAterImgShape = (AfterImgShape *)v10;
  v14 = v10->baseclass_0.vfptr->Init;
  v40 = -1;
  ((void (__stdcall *)(signed int))v14)(300);
  v4->m_pkAterImgShape->m_fWidth = v4->m_fWidth;
  v15 = *((_DWORD *)pkGeometry + 40);
  pkShape = v4->m_pkAterImgShape->m_spkTriShape.m_pObject;
  while ( v15 )
  {
    v16 = *(NiObject **)(v15 + 8);
    v15 = *(_DWORD *)v15;
    v17 = ((int (__thiscall *)(NiObject *))v16->baseclass_0.vfptr[15].__vecDelDtor)(v16);
    NiAVObject::RemoveProperty(&pkShape->baseclass_0.baseclass_0.baseclass_0, &result, v17);
    if ( result.m_pObject )
    {
      pkGeom = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( pkGeom )
          ((void (__stdcall *)(signed int))pkGeom->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
      }
    }
    v18 = NiObject::Clone(v16);
    v19 = v18;
    pkGeom = (NiProperty *)v18;
    if ( v18 )
      InterlockedIncrement((volatile LONG *)&v18->baseclass_0.m_uiRefCount);
    v40 = 2;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&pkShape->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
      (NiPointer<NiRoom> *)&pkGeom);
    v40 = -1;
    if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.m_uiRefCount) )
      v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
  }
  v20 = pkUpEff;
  if ( pkUpEff )
  {
    v21 = WeaponLevel;
    v22 = pkUpEff->UpAfterImgEff[WeaponLevel];
    if ( v22 != -1 )
    {
      AfterImgEff::GetEffTexture(v4, (NiPointer<NiSourceTexture> *)&WeaponLevel, (unsigned __int8)v22);
      v40 = 3;
      if ( WeaponLevel )
      {
        AfterImgEff::GetEffectNode(v4, (NiPointer<NiNode> *)&pkUpEff, v20->UpAfterImgEff[v21]);
        LOBYTE(v40) = 4;
        if ( pkUpEff )
        {
          if ( PgUtil::CatchGeometry((NiAVObject *)pkUpEff, (NiGeometry **)&pkGeom) )
          {
            v23 = pkGeom[5].baseclass_0.m_uiExtraDataSize;
            while ( v23 )
            {
              v24 = *(NiObject **)(v23 + 8);
              v23 = *(_DWORD *)v23;
              if ( !((int (__thiscall *)(NiObject *))v24->baseclass_0.vfptr[15].__vecDelDtor)(v24)
                || ((int (__thiscall *)(_DWORD))v24->baseclass_0.vfptr[15].__vecDelDtor)(v24) == 8 )
              {
                v25 = ((int (__thiscall *)(NiObject *))v24->baseclass_0.vfptr[15].__vecDelDtor)(v24);
                NiAVObject::RemoveProperty(
                  &pkShape->baseclass_0.baseclass_0.baseclass_0,
                  (NiPointer<NiProperty> *)&thisa,
                  v25);
                NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>(&thisa);
                v26 = NiObject::Clone(v24);
                NiAVObject::AttachProperty(&pkShape->baseclass_0.baseclass_0.baseclass_0, (NiProperty *)v26);
              }
            }
          }
          v27 = pkUpEff;
          if ( pkUpEff )
          {
            if ( !InterlockedDecrement((volatile LONG *)&pkUpEff->UpEffect[2]) && v27 )
              (**(void (__thiscall ***)(UpEffectData *, signed int))&v27->ID)(v27, 1);
            pkUpEff = 0;
          }
        }
        v28 = NiAVObject::GetProperty(&pkShape->baseclass_0.baseclass_0.baseclass_0, 8);
        if ( v28 )
          NiTexturingProperty::SetBaseTexture((NiTexturingProperty *)v28, (NiTexture *)WeaponLevel);
        LOBYTE(v40) = 3;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkUpEff);
      }
      v40 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&WeaponLevel);
    }
  }
  v29 = operator new(0xE8u);
  v40 = 5;
  if ( v29 )
    NiNode::NiNode((NiNode *)v29, 0);
  else
    v30 = 0;
  v40 = -1;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v4->baseclass_0.m_spNode, v30);
  v4->baseclass_0.m_spNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
  ((void (__stdcall *)(NiTriShape *, _DWORD, int, int, int, int, HazeAccumulator *, NiProperty *, NiProperty *))v4->baseclass_0.m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v4->m_pkAterImgShape->m_spkTriShape.m_pObject,
    0,
    v32,
    v33,
    v34,
    v35,
    thisa.m_pObject,
    pkGeom,
    result.m_pObject);
  NiAVObject::UpdateProperties(&v4->baseclass_0.m_spNode.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&v4->baseclass_0.m_spNode.m_pObject->baseclass_0);
  result.m_pObject = (NiProperty *)1;
  pkGeom = (NiProperty *)v31;
  NiAVObject::Update(&v4->baseclass_0.m_spNode.m_pObject->baseclass_0, 0.0, 1);
  return 1;
}

//----- (0068CE80) --------------------------------------------------------
AfterImgEff *__cdecl AfterImgEff::CreateBySourceNode(NiNode *pkNode)
{
  NiNode *v1; // eax@1
  unsigned int v2; // ebx@1
  unsigned int v3; // esi@1
  NiExtraData **v4; // ecx@2
  NiExtraData *v5; // edi@2
  int v6; // eax@3
  unsigned int v8; // eax@10
  int v9; // esi@10
  int v10; // edx@11
  int v11; // ecx@11
  char v12; // al@12
  char *v13; // eax@13
  char *v14; // eax@15
  char *v15; // eax@18
  void *v16; // eax@25
  int v17; // eax@26
  NiNode *v18; // ecx@27
  const char *v19; // [sp-18h] [bp-144h]@19
  float fExpandTime; // [sp+4h] [bp-128h]@11
  float fWidth; // [sp+8h] [bp-124h]@11
  int uiType; // [sp+Ch] [bp-120h]@11
  NiNode *v23; // [sp+10h] [bp-11Ch]@1
  char acTextKeyStr[256]; // [sp+14h] [bp-118h]@11
  char seps[5]; // [sp+114h] [bp-18h]@13
  unsigned int v26; // [sp+11Ch] [bp-10h]@1
  int v27; // [sp+128h] [bp-4h]@25
  int v28; // [sp+12Ch] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v1 = pkNode;
  v2 = pkNode->baseclass_0.baseclass_0.m_uiExtraDataSize;
  v3 = 0;
  v23 = pkNode;
  if ( !v2 )
    return 0;
  while ( 1 )
  {
    v4 = v1->baseclass_0.baseclass_0.m_ppkExtra;
    v5 = v4[v3];
    if ( v5 )
      break;
LABEL_7:
    ++v3;
    if ( v3 >= v2 )
      return 0;
  }
  v6 = ((int (__thiscall *)(NiExtraData *))v5->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v4[v3]);
  if ( !v6 )
  {
LABEL_6:
    v1 = v23;
    goto LABEL_7;
  }
  while ( (NiRTTI *)v6 != &NiTextKeyExtraData::m_RTTI )
  {
    v6 = *(_DWORD *)(v6 + 4);
    if ( !v6 )
      goto LABEL_6;
  }
  v8 = v5[1].baseclass_0.baseclass_0.m_uiRefCount;
  v9 = 0;
  if ( !v8 )
    return 0;
  uiType = 1;
  fExpandTime = 0.30000001;
  v10 = (int)acTextKeyStr;
  fWidth = 8.0;
  v11 = *(_DWORD *)(v8 + 4);
  do
  {
    v12 = *(_BYTE *)v11;
    *(_BYTE *)v10++ = *(_BYTE *)v11++;
  }
  while ( v12 );
  strcpy(seps, " \t\n\r");
  v13 = strtok(acTextKeyStr, seps);
  if ( !v13 )
    return 0;
  do
  {
    if ( strcmp(v13, "Type") )
    {
      if ( strcmp(v13, "ExpandTime") )
      {
        if ( strcmp(v13, "Width") || (v15 = strtok(0, seps)) == 0 )
          return 0;
        v19 = "%f";
      }
      else
      {
        v15 = strtok(0, seps);
        if ( !v15 )
          return 0;
        v19 = "%f";
      }
      sscanf(v15, v19);
    }
    else
    {
      v14 = strtok(0, seps);
      if ( !v14 )
        return 0;
      uiType = atoi(v14);
    }
    v13 = strtok(0, seps);
  }
  while ( v13 );
  v16 = operator new(0x264u);
  v27 = 0;
  if ( v16 )
  {
    AfterImgEff::AfterImgEff((AfterImgEff *)v16, 0, 0);
    v9 = v17;
  }
  v18 = v23;
  *(_DWORD *)(v9 + 556) = uiType;
  *(float *)(v9 + 552) = fExpandTime;
  *(float *)(v9 + 560) = fWidth;
  v27 = -1;
  AfterImgEff::CreateShape((AfterImgEff *)v9, v18, 0, 0);
  *(_DWORD *)(v9 + 608) = v5;
  return (AfterImgEff *)v9;
}
// A85C00: using guessed type int __security_cookie;

//----- (0068D110) --------------------------------------------------------
AfterImgEff *__cdecl AfterImgEff::CreateByWeaponNode(NiNode *pkNode, int WeaponLevel, UpEffectData *pkUpEff)
{
  NiNode *v3; // eax@1
  unsigned int v4; // ebx@1
  unsigned int v5; // edi@1
  NiExtraData *v6; // esi@2
  int v7; // eax@3
  unsigned int v9; // esi@10
  int v10; // ebx@11
  int v11; // edx@11
  int v12; // ecx@11
  char v13; // al@12
  char *v14; // esi@13
  char *v15; // eax@15
  char *v16; // eax@18
  void *v17; // eax@25
  int v18; // eax@26
  int v19; // esi@26
  NiNode *v20; // edx@28
  const char *v21; // [sp-18h] [bp-144h]@19
  float fWidth; // [sp+8h] [bp-124h]@11
  float fExpandTime; // [sp+Ch] [bp-120h]@11
  NiNode *v24; // [sp+10h] [bp-11Ch]@1
  char acTextKeyStr[256]; // [sp+14h] [bp-118h]@11
  char seps[5]; // [sp+114h] [bp-18h]@13
  unsigned int v27; // [sp+11Ch] [bp-10h]@1
  int v28; // [sp+128h] [bp-4h]@25
  int v29; // [sp+12Ch] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v3 = pkNode;
  v4 = pkNode->baseclass_0.baseclass_0.m_uiExtraDataSize;
  v5 = 0;
  v24 = pkNode;
  if ( !v4 )
    return 0;
  while ( 1 )
  {
    v6 = v3->baseclass_0.baseclass_0.m_ppkExtra[v5];
    if ( v6 )
      break;
LABEL_7:
    ++v5;
    if ( v5 >= v4 )
      return 0;
  }
  v7 = ((int (__thiscall *)(NiExtraData *))v6->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v6);
  if ( !v7 )
  {
LABEL_6:
    v3 = v24;
    goto LABEL_7;
  }
  while ( (NiRTTI *)v7 != &NiTextKeyExtraData::m_RTTI )
  {
    v7 = *(_DWORD *)(v7 + 4);
    if ( !v7 )
      goto LABEL_6;
  }
  v9 = v6[1].baseclass_0.baseclass_0.m_uiRefCount;
  if ( !v9 )
    return 0;
  v10 = 1;
  fExpandTime = 0.30000001;
  v11 = (int)acTextKeyStr;
  fWidth = 8.0;
  v12 = *(_DWORD *)(v9 + 4);
  do
  {
    v13 = *(_BYTE *)v12;
    *(_BYTE *)v11++ = *(_BYTE *)v12++;
  }
  while ( v13 );
  strcpy(seps, " \t\n\r");
  v14 = strtok(acTextKeyStr, seps);
  if ( !v14 )
    return 0;
  do
  {
    if ( strcmp(v14, "Type") )
    {
      if ( strcmp(v14, "ExpandTime") )
      {
        if ( strcmp(v14, "Width") || (v16 = strtok(0, seps)) == 0 )
          return 0;
        v21 = "%f";
      }
      else
      {
        v16 = strtok(0, seps);
        if ( !v16 )
          return 0;
        v21 = "%f";
      }
      sscanf(v16, v21);
    }
    else
    {
      v15 = strtok(0, seps);
      if ( !v15 )
        return 0;
      v10 = atoi(v15);
    }
    v14 = strtok(0, seps);
  }
  while ( v14 );
  v17 = operator new(0x264u);
  v28 = 0;
  if ( v17 )
  {
    AfterImgEff::AfterImgEff((AfterImgEff *)v17, 0, 0);
    v19 = v18;
  }
  else
  {
    v19 = 0;
  }
  v20 = v24;
  *(_DWORD *)(v19 + 556) = v10;
  *(float *)(v19 + 552) = fExpandTime;
  *(float *)(v19 + 560) = fWidth;
  v28 = -1;
  AfterImgEff::CreateShape((AfterImgEff *)v19, v20, WeaponLevel, pkUpEff);
  *(_DWORD *)(v19 + 608) = 0;
  return (AfterImgEff *)v19;
}
// A85C00: using guessed type int __security_cookie;

//----- (0068D3B0) --------------------------------------------------------
void *__thiscall AfterImgEff::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return AfterImgEff::_scalar_deleting_destructor_((AfterImgEff *)((char *)this - 8), a2);
}

//----- (0068D3C0) --------------------------------------------------------
NiRTTI *__thiscall AfterImgEff::GetRTTI(AfterImgEff *this)
{
  return &AfterImgEff::m_RTTI;
}

//----- (0068D3D0) --------------------------------------------------------
void __thiscall Effect::Start(Effect *this, float fTime)
{
  Effect *v2; // esi@1
  NiTListItem<NiPointer<Effect> > *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@2

  v2 = this;
  this->m_fStartTime = fTime;
  EffectCtrl::Start(&this->m_kCtrl, fTime);
  CDecalEffect::Start(&v2->m_kDecalEffect, fTime);
  v3 = v2->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3->m_element.m_pObject->baseclass_0.vfptr[15].__vecDelDtor;
    v3 = v3->m_pkNext;
    ((void (__stdcall *)(_DWORD))v4)(LODWORD(fTime));
  }
}

//----- (0068D430) --------------------------------------------------------
void *__thiscall AfterImgEff::_scalar_deleting_destructor_(AfterImgEff *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AfterImgEff::_AfterImgEff(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0068D460) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v6; // edi@1
  NiControllerSequence *v7; // esi@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v8; // edx@8
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v9; // edx@11
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v10; // edx@13
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v11; // eax@15
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v12; // edx@16
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v13; // esi@16
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v14; // esi@17
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v15; // edx@19
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v16; // esi@21
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v17; // esi@23
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v18; // edx@27
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v19; // esi@27
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v20; // edi@27
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v21; // edi@29
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v22; // edi@31
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v23; // edx@37
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v24; // esi@37
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v25; // esi@39
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v26; // esi@41
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v27; // edi@47
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v28; // edi@49
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v29; // ecx@55
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *v30; // eax@55

  v5 = this->baseclass_0.baseclass_0._Mysize;
  v6 = _Newnode;
  if ( v5 >= 0x1FFFFFFE )
  {
    v7 = _Newnode->_Myval.baseclass_0.second.m_pObject;
    if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v8 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v8 )
  {
    v8->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Left )
        v9->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v10 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v10->_Right )
        v10->_Right = _Newnode;
    }
  }
  v11 = _Newnode;
  while ( !v11->_Parent->_Color )
  {
    v12 = v11->_Parent;
    v13 = v12->_Parent;
    if ( v12 == v13->_Left )
    {
      v14 = v13->_Right;
      if ( v14->_Color )
      {
        if ( v11 == v12->_Right )
        {
          v11 = v11->_Parent;
          v15 = v12->_Right;
          v11->_Right = v15->_Left;
          if ( !v15->_Left->_Isnil )
            v15->_Left->_Parent = v11;
          v15->_Parent = v11->_Parent;
          v16 = this->baseclass_0.baseclass_0._Myhead;
          if ( v11 == v16->_Parent )
          {
            v16->_Parent = v15;
          }
          else
          {
            v17 = v11->_Parent;
            if ( v11 == v17->_Left )
              v17->_Left = v15;
            else
              v17->_Right = v15;
          }
          v15->_Left = v11;
          v11->_Parent = v15;
        }
        v11->_Parent->_Color = 1;
        v11->_Parent->_Parent->_Color = 0;
        v18 = v11->_Parent->_Parent;
        v19 = v18->_Left;
        v18->_Left = v18->_Left->_Right;
        v20 = v19->_Right;
        if ( !v20->_Isnil )
          v20->_Parent = v18;
        v19->_Parent = v18->_Parent;
        v21 = this->baseclass_0.baseclass_0._Myhead;
        if ( v18 == v21->_Parent )
        {
          v21->_Parent = v19;
          v19->_Right = v18;
        }
        else
        {
          v22 = v18->_Parent;
          if ( v18 == v22->_Right )
          {
            v22->_Right = v19;
            v19->_Right = v18;
          }
          else
          {
            v22->_Left = v19;
            v19->_Right = v18;
          }
        }
LABEL_53:
        v6 = _Newnode;
        v18->_Parent = v19;
        continue;
      }
    }
    else
    {
      v14 = v13->_Left;
      if ( v14->_Color )
      {
        if ( v11 == v12->_Left )
        {
          v11 = v11->_Parent;
          v23 = v12->_Left;
          v11->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v11;
          v23->_Parent = v11->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v11 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v11->_Parent;
            if ( v11 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v11;
          v11->_Parent = v23;
        }
        v11->_Parent->_Color = 1;
        v11->_Parent->_Parent->_Color = 0;
        v18 = v11->_Parent->_Parent;
        v19 = v18->_Right;
        v18->_Right = v19->_Left;
        if ( !v19->_Left->_Isnil )
          v19->_Left->_Parent = v18;
        v19->_Parent = v18->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v18 == v27->_Parent )
        {
          v27->_Parent = v19;
        }
        else
        {
          v28 = v18->_Parent;
          if ( v18 == v28->_Left )
            v28->_Left = v19;
          else
            v28->_Right = v19;
        }
        v19->_Left = v18;
        goto LABEL_53;
      }
    }
    v12->_Color = 1;
    v14->_Color = 1;
    v11->_Parent->_Parent->_Color = 0;
    v11 = v11->_Parent->_Parent;
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (0068D6A0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v2; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *i; // esi@1
  NiControllerSequence *v4; // edi@2
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *thisa; // [sp+8h] [bp-4h]@1

  v2 = _Rootnode;
  thisa = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(
      thisa,
      i->_Right);
    v4 = v2->_Myval.baseclass_0.second.m_pObject;
    i = i->_Left;
    if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    operator delete(v2);
  }
}

//----- (0068D700) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::erase(...)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v3; // ebx@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v6; // esi@8
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v7; // eax@10
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v8; // ebx@15
  std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v10; // ebx@20
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *i; // ecx@36
  int v15; // eax@38
  int v16; // esi@59
  unsigned int v17; // eax@63
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *v18; // eax@65
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > _Erasednode; // [sp+0h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *thisa; // [sp+4h] [bp-4h]@1

  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 21) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  v3 = _Where;
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 21) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v7->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v3 )
    {
      v7->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Left == (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Erasednode )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 21) )
        v9 = (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v6;
      else
        v9 = std::_Tree_val<std::_Tmap_traits<unsigned_char_NiPointer<Item>___std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_NiPointer<Item>__>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v4);
      v8->_Left = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v9;
    }
    v10 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Erasednode )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 21) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v6;
      else
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)std::_Tree_val<std::_Tmap_traits<PgWin___unsigned_int_std::less<PgWin__>_std::allocator<std::pair<PgWin___const_unsigned_int>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 21) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 20);
  *(_BYTE *)(*(_DWORD *)&v5 + 20) = *(_BYTE *)(*(_DWORD *)&v3 + 20);
  *(_BYTE *)(*(_DWORD *)&v3 + 20) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 20) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 20) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 20) )
        {
          *(_BYTE *)(v15 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 0;
          std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 21) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 20) = 1;
            *(_BYTE *)(v15 + 20) = 0;
            std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 20) = *(_BYTE *)(*(_DWORD *)&v6 + 20);
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) = 1;
          std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 20) )
        {
          *(_BYTE *)(v15 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 0;
          std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 21) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 20) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 20) = 1;
            *(_BYTE *)(v15 + 20) = 0;
            std::_Tree<std::_Tmap_traits<enum__OscTarget_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>___std::less<enum__OscTarget>_std::allocator<std::pair<enum__OscTarget_const_std::multimap<float_EffectViewInfo___std::less<float>_std::allocator<std::pair<float_const_EffectViewInfo__>>>__>>_0>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 20) = *(_BYTE *)(*(_DWORD *)&v6 + 20);
          *(_BYTE *)(*(_DWORD *)&v6 + 20) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 20) = 1;
          std::_Tree<std::_Tmap_traits<enum__ActionMgr::eACTIONEFF_TYPE_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>___std::less<enum__ActionMgr::eACTIONEFF_TYPE>_std::allocator<std::pair<enum__ActionMgr::eACTIONEFF_TYPE_const_std::multimap<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>>__>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *)i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 20) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 20) = 1;
  }
  v16 = *(_DWORD *)(*(_DWORD *)&_Erasednode + 16);
  if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v16)(v16, 1);
  operator delete(*(void **)&_Erasednode);
  v17 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v17 )
    thisa->baseclass_0.baseclass_0._Mysize = v17 - 1;
  v18 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v18;
}

//----- (0068D980) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiSourceTexture>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(...)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *v5; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const unsigned int v10; // ebx@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v11; // ebx@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  NiControllerSequence *v15; // esi@16
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
                          v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    v15 = v4->_Myval.baseclass_0.second.m_pObject;
    if ( v15 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v15 )
          v15->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      }
      v4 = _Node;
    }
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
                        v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (0068DA80) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 21) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 21) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 21);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 21);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Erase(
      v4,
      v5->_Parent);
    v4->baseclass_0.baseclass_0._Myhead->_Parent = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Left = v4->baseclass_0.baseclass_0._Myhead;
    v4->baseclass_0.baseclass_0._Myhead->_Right = v4->baseclass_0.baseclass_0._Myhead;
    v7 = v4->baseclass_0.baseclass_0._Myhead;
    v8 = result;
    v4->baseclass_0.baseclass_0._Mysize = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7->_Left;
  }
  return v8;
}

//----- (0068DB40) --------------------------------------------------------
void __thiscall AfterImgShape::RemoveVertex(AfterImgShape *this, int _nNum)
{
  int v2; // esi@1
  int v3; // edx@3
  int v4; // eax@3

  v2 = this->m_nEndIndex;
  if ( v2 >= 0 || this->m_nStartIndex >= 0 )
  {
    v3 = this->m_nStartIndex;
    v4 = v2 - v3;
    if ( v2 - v3 < 0 )
      v4 += this->m_nTotalVertexCnt;
    if ( v4 + 1 <= _nNum )
      this->m_nStartIndex = v2;
    else
      this->m_nStartIndex = (v3 + _nNum) % this->m_nTotalVertexCnt;
  }
}

//----- (0068DB80) --------------------------------------------------------
void __thiscall AfterImgShape0::SetVertex(AfterImgShape0 *this, NiPoint3 *_pos3Start, NiPoint3 *_pos3End)
{
  int v3; // edx@1
  int v4; // eax@1
  int v5; // eax@2
  bool v6; // sf@4
  unsigned __int8 v7; // of@4
  int v8; // eax@4
  int v9; // edx@6
  int v10; // eax@8
  NiPoint3 *v11; // eax@12
  NiPoint3 *v12; // eax@12

  v3 = this->baseclass_0.m_nEndIndex;
  v4 = this->baseclass_0.m_nStartIndex - v3;
  if ( this->baseclass_0.m_nStartIndex - v3 > 0 )
    v5 = v4 - 1;
  else
    v5 = v4 + this->baseclass_0.m_nTotalVertexCnt - 1;
  v7 = __OFSUB__(v5, 1);
  v6 = v5 - 1 < 0;
  v8 = v3 + 1;
  this->baseclass_0.m_nEndIndex = v3 + 1;
  if ( v6 ^ v7 )
    this->baseclass_0.m_nStartIndex = v3 + 2;
  v9 = this->baseclass_0.m_nTotalVertexCnt;
  if ( v8 >= v9 )
    this->baseclass_0.m_nEndIndex = v8 - v9;
  v10 = this->baseclass_0.m_nStartIndex;
  if ( v10 >= v9 )
    this->baseclass_0.m_nStartIndex = v10 - v9;
  if ( this->baseclass_0.m_nStartIndex < 0 )
    this->baseclass_0.m_nStartIndex = 0;
  v11 = &this->baseclass_0.m_pkVertices[2 * this->baseclass_0.m_nEndIndex];
  v11->x = _pos3Start->x;
  v11->y = _pos3Start->y;
  v11->z = _pos3Start->z;
  v12 = &this->baseclass_0.m_pkVertices[2 * this->baseclass_0.m_nEndIndex + 1];
  v12->x = _pos3End->x;
  v12->y = _pos3End->y;
  v12->z = _pos3End->z;
}

//----- (0068DC20) --------------------------------------------------------
void __thiscall AfterImgShape1::SetVertex(AfterImgShape1 *this, NiPoint3 *_pos3Start, NiPoint3 *_pos3End)
{
  int v3; // edx@1
  int v4; // eax@1
  int v5; // eax@2
  bool v6; // sf@4
  unsigned __int8 v7; // of@4
  int v8; // eax@4
  int v9; // edx@6
  int v10; // eax@8
  NiPoint3 *v11; // eax@12

  v3 = this->baseclass_0.m_nEndIndex;
  v4 = this->baseclass_0.m_nStartIndex - v3;
  if ( this->baseclass_0.m_nStartIndex - v3 > 0 )
    v5 = v4 - 1;
  else
    v5 = v4 + this->baseclass_0.m_nTotalVertexCnt - 1;
  v7 = __OFSUB__(v5, 1);
  v6 = v5 - 1 < 0;
  v8 = v3 + 1;
  this->baseclass_0.m_nEndIndex = v3 + 1;
  if ( v6 ^ v7 )
    this->baseclass_0.m_nStartIndex = v3 + 2;
  v9 = this->baseclass_0.m_nTotalVertexCnt;
  if ( v8 >= v9 )
    this->baseclass_0.m_nEndIndex = v8 - v9;
  v10 = this->baseclass_0.m_nStartIndex;
  if ( v10 >= v9 )
    this->baseclass_0.m_nStartIndex = v10 - v9;
  if ( this->baseclass_0.m_nStartIndex < 0 )
    this->baseclass_0.m_nStartIndex = 0;
  v11 = &this->baseclass_0.m_pkVertices[this->baseclass_0.m_nEndIndex];
  v11->x = _pos3Start->x;
  v11->y = _pos3Start->y;
  v11->z = _pos3Start->z;
}

//----- (0068DCA0) --------------------------------------------------------
void __thiscall AfterImgShape::Start(AfterImgShape *this, float _fTime)
{
  this->m_nStartIndex = -1;
  this->m_nEndIndex = -1;
  *(_WORD *)&this->m_bStart = 1;
  this->m_spkTriShape.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uFlags &= 0xFFFEu;
}

//----- (0068DCC0) --------------------------------------------------------
void __thiscall AfterImgShape::Stop(AfterImgShape *this)
{
  this->m_nStartIndex = -1;
  this->m_nEndIndex = -1;
  this->m_bStart = 0;
  this->m_spkTriShape.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uFlags |= 1u;
}

//----- (0068DCE0) --------------------------------------------------------
void __thiscall AfterImgShape::AfterImgShape(AfterImgShape *this)
{
  AfterImgShape *v1; // esi@1
  NiTriShape *v2; // edi@1
  NiStencilProperty *v3; // edi@6
  NiZBufferProperty *v4; // edi@11
  NiAlphaProperty *v5; // edi@16

  v1 = this;
  this->vfptr = (AfterImgShapeVtbl *)&AfterImgShape::_vftable_;
  this->m_kColorStart.r = 0.0;
  this->m_kColorStart.g = 0.0;
  this->m_kColorStart.b = 0.0;
  this->m_kColorStart.a = 0.0;
  this->m_kColorEnd.r = 0.0;
  this->m_kColorEnd.g = 0.0;
  this->m_kColorEnd.b = 0.0;
  this->m_kColorEnd.a = 0.0;
  this->m_spkStencilProp.m_pObject = 0;
  this->m_spkZBufferProp.m_pObject = 0;
  this->m_spkAlphaProp.m_pObject = 0;
  this->m_spkTriShape.m_pObject = 0;
  this->m_fWidth = 5.0;
  this->m_nStartIndex = -1;
  this->m_nEndIndex = -1;
  *(_WORD *)&this->m_bStart = 0;
  this->m_nTotalVertexCnt = 256;
  this->m_pkVertices = 0;
  v2 = this->m_spkTriShape.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spkTriShape.m_pObject = 0;
  }
  v3 = v1->m_spkStencilProp.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spkStencilProp.m_pObject = 0;
  }
  v4 = v1->m_spkZBufferProp.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spkZBufferProp.m_pObject = 0;
  }
  v5 = v1->m_spkAlphaProp.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spkAlphaProp.m_pObject = 0;
  }
  v1->m_bSmoothColor = 0;
  v1->m_kColorStart.r = 1.0;
  v1->m_kColorStart.g = 1.0;
  v1->m_kColorStart.b = 1.0;
  v1->m_kColorEnd.r = 1.0;
  v1->m_kColorStart.a = 1.0;
  v1->m_kColorEnd.g = 1.0;
  v1->m_kColorEnd.b = 1.0;
  v1->m_kColorEnd.a = 1.0;
}
// 9C6D94: using guessed type int (__thiscall *AfterImgShape___vftable_)(void *p, char);

//----- (0068DE60) --------------------------------------------------------
void __thiscall AfterImgShape::_AfterImgShape(AfterImgShape *this)
{
  AfterImgShape *v1; // esi@1
  NiTriShape *v2; // edi@1
  NiStencilProperty *v3; // edi@6
  NiZBufferProperty *v4; // edi@11
  NiAlphaProperty *v5; // edi@16
  NiTriShape *v6; // edi@23
  NiAlphaProperty *v7; // edi@27
  NiZBufferProperty *v8; // edi@31
  NiStencilProperty *v9; // esi@35

  v1 = this;
  this->vfptr = (AfterImgShapeVtbl *)&AfterImgShape::_vftable_;
  v2 = this->m_spkTriShape.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spkTriShape.m_pObject = 0;
  }
  v3 = v1->m_spkStencilProp.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spkStencilProp.m_pObject = 0;
  }
  v4 = v1->m_spkZBufferProp.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spkZBufferProp.m_pObject = 0;
  }
  v5 = v1->m_spkAlphaProp.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spkAlphaProp.m_pObject = 0;
  }
  if ( v1->m_pkVertices )
    operator delete__(v1->m_pkVertices);
  v1->m_pkVertices = 0;
  v6 = v1->m_spkTriShape.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_spkAlphaProp.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spkZBufferProp.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
  v9 = v1->m_spkStencilProp.m_pObject;
  if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  }
}
// 9C6D94: using guessed type int (__thiscall *AfterImgShape___vftable_)(void *p, char);

//----- (0068E000) --------------------------------------------------------
void __thiscall AfterImgShape::Terminate(AfterImgShape *this)
{
  AfterImgShape *v1; // esi@1
  NiTriShape *v2; // edi@1
  NiStencilProperty *v3; // edi@6
  NiZBufferProperty *v4; // edi@11
  NiAlphaProperty *v5; // edi@16

  v1 = this;
  v2 = this->m_spkTriShape.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spkTriShape.m_pObject = 0;
  }
  v3 = v1->m_spkStencilProp.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spkStencilProp.m_pObject = 0;
  }
  v4 = v1->m_spkZBufferProp.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spkZBufferProp.m_pObject = 0;
  }
  v5 = v1->m_spkAlphaProp.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spkAlphaProp.m_pObject = 0;
  }
  if ( v1->m_pkVertices )
    operator delete__(v1->m_pkVertices);
  v1->m_pkVertices = 0;
}

//----- (0068E0C0) --------------------------------------------------------
void __thiscall AfterImgShape0::AfterImgShape0(AfterImgShape0 *this)
{
  AfterImgShape0 *v1; // esi@1

  v1 = this;
  AfterImgShape::AfterImgShape(&this->baseclass_0);
  v1->baseclass_0.vfptr = (AfterImgShapeVtbl *)&AfterImgShape0::_vftable_;
}
// 9C6DA8: using guessed type int (__thiscall *AfterImgShape0___vftable_)(void *p, char);

//----- (0068E0E0) --------------------------------------------------------
void __thiscall AfterImgShape0::_AfterImgShape0(AfterImgShape0 *this)
{
  this->baseclass_0.vfptr = (AfterImgShapeVtbl *)&AfterImgShape0::_vftable_;
  AfterImgShape::_AfterImgShape(&this->baseclass_0);
}
// 9C6DA8: using guessed type int (__thiscall *AfterImgShape0___vftable_)(void *p, char);

//----- (0068E0F0) --------------------------------------------------------
bool __thiscall AfterImgShape0::Update(AfterImgShape0 *this, float _fTime)
{
  int v2; // eax@0
  AfterImgShape0 *v3; // esi@1
  int v4; // ecx@3
  int v5; // ecx@5
  int v6; // ecx@7
  NiTriShape *v7; // eax@7
  NiGeometryData *v8; // edx@7
  char *v9; // ebx@7
  void *v10; // edx@7
  void *v11; // eax@7
  int v12; // edi@10
  int v13; // eax@12
  float v14; // ecx@12
  int v15; // edx@12
  int v16; // eax@12
  char *v17; // eax@26
  int v18; // ecx@26
  int v19; // ecx@26
  double v20; // st7@27
  char *v21; // eax@29
  double v22; // st7@29
  NiColorA *v23; // eax@30
  NiColorA *v24; // eax@30
  NiColorA *v25; // eax@30
  float v26; // ecx@30
  float v27; // edx@30
  float v28; // eax@30
  char *v29; // eax@32
  float v30; // ebx@32
  NiGeometryData *v31; // edi@36
  NiGeometryData *v32; // eax@36
  bool v33; // al@38
  const char *v34; // [sp-4h] [bp-1B4h]@17
  unsigned int v35; // [sp+10h] [bp-1A0h]@1
  char v36; // [sp+20h] [bp-190h]@30
  char v37; // [sp+30h] [bp-180h]@30
  NiColorA result; // [sp+40h] [bp-170h]@30
  NiBound kBound; // [sp+50h] [bp-160h]@36
  char *pkColors; // [sp+60h] [bp-150h]@7
  AfterImgShape0 *v41; // [sp+64h] [bp-14Ch]@1
  char *pkTextures; // [sp+68h] [bp-148h]@7
  double v43; // [sp+6Ch] [bp-144h]@29
  int nPosEnd; // [sp+70h] [bp-140h]@12
  NiColorA kColorTemp; // [sp+74h] [bp-13Ch]@30
  int i; // [sp+84h] [bp-12Ch]@11
  char *pkVerts; // [sp+88h] [bp-128h]@7
  float nPosStart; // [sp+8Ch] [bp-124h]@12
  int nCount; // [sp+90h] [bp-120h]@7
  char aaaa[256]; // [sp+94h] [bp-11Ch]@18
  unsigned int v51; // [sp+194h] [bp-1Ch]@1
  unsigned int *v52; // [sp+198h] [bp-18h]@1
  int v53; // [sp+1A0h] [bp-10h]@1
  _EXCEPTION_DISPOSITION (__cdecl *v54)(_EXCEPTION_RECORD *, _EXCEPTION_REGISTRATION_RECORD *, _CONTEXT *, void *); // [sp+1A4h] [bp-Ch]@1
  unsigned int v55; // [sp+1A8h] [bp-8h]@1
  int v56; // [sp+1ACh] [bp-4h]@1
  int v57; // [sp+1B0h] [bp+0h]@1

  v56 = -2;
  v54 = _except_handler4;
  v53 = v2;
  v55 = __security_cookie ^ (unsigned int)&unk_A62CB0;
  v51 = (unsigned int)&v57 ^ __security_cookie;
  v35 = (unsigned int)&v57 ^ __security_cookie;
  v52 = &v35;
  v3 = this;
  v41 = this;
  if ( this->baseclass_0.m_bStart )
  {
    if ( !this->baseclass_0.m_bPause )
    {
      v4 = this->baseclass_0.m_nEndIndex;
      if ( v4 >= 0 || v3->baseclass_0.m_nStartIndex >= 0 )
      {
        v5 = v4 - v3->baseclass_0.m_nStartIndex;
        if ( v5 < 0 )
          v5 += v3->baseclass_0.m_nTotalVertexCnt;
        v6 = v5 + 1;
        nCount = v6;
        v7 = v3->baseclass_0.m_spkTriShape.m_pObject;
        v8 = v7->baseclass_0.baseclass_0.m_spModelData.m_pObject;
        v9 = (char *)v8->m_pkVertex;
        pkVerts = v9;
        v10 = v8->m_pkTexture;
        pkTextures = (char *)v10;
        v11 = v7->baseclass_0.baseclass_0.m_spModelData.m_pObject->m_pkColor;
        pkColors = (char *)v11;
        if ( v9 && v10 && v11 )
        {
          v12 = 0;
          while ( 1 )
          {
            i = v12;
            if ( v12 >= v6 )
              break;
            v13 = 2 * (v12 + v3->baseclass_0.m_nStartIndex);
            LODWORD(v14) = v13;
            LODWORD(nPosStart) = 2 * (v12 + v3->baseclass_0.m_nStartIndex);
            v15 = v13 + 1;
            nPosEnd = v13 + 1;
            v16 = 2 * v3->baseclass_0.m_nTotalVertexCnt;
            if ( SLODWORD(v14) >= v16 )
            {
              LODWORD(v14) -= v16;
              nPosStart = v14;
            }
            if ( v15 >= v16 )
            {
              v15 -= v16;
              nPosEnd = v15;
            }
            if ( SLODWORD(v14) >= v16 )
            {
              v34 = "AfterImgShape0::Update() nPosStart is %d count %d %d->%d\n";
LABEL_18:
              sprintf(aaaa, v34);
              NetUtil::SendLog(aaaa);
              goto LABEL_38;
            }
            if ( v15 >= v16 )
            {
              v34 = "AfterImgShape0::Update() nPosEnd is %d count %d %d->%d\n";
              goto LABEL_18;
            }
            if ( 2 * v12 >= v16 )
            {
              sprintf(aaaa, "AfterImgShape0::Update() iX2 is %d count %d %d->%d\n");
              NetUtil::SendLog(aaaa);
              goto LABEL_38;
            }
            if ( 2 * v12 + 1 >= v16 )
            {
              sprintf(aaaa, "AfterImgShape0::Update() ix2+1 is %d count %d %d->%d\n");
              NetUtil::SendLog(aaaa);
              goto LABEL_38;
            }
            if ( (__PAIR__(LODWORD(v14), v15) & 0x8000000000000000ui64) != 0i64 )
            {
              sprintf(aaaa, "AfterImgShape0::Update() nPosStart %d : nPosEnd  %d \n");
              NetUtil::SendLog(aaaa);
              goto LABEL_38;
            }
            v56 = 0;
            v17 = &pkVerts[24 * v12];
            v18 = (int)&v3->baseclass_0.m_pkVertices[LODWORD(v14)];
            *(_DWORD *)v17 = *(_DWORD *)v18;
            *((_DWORD *)v17 + 1) = *(_DWORD *)(v18 + 4);
            *((_DWORD *)v17 + 2) = *(_DWORD *)(v18 + 8);
            v19 = (int)&v3->baseclass_0.m_pkVertices[v15];
            *((_DWORD *)v17 + 3) = *(_DWORD *)v19;
            *((_DWORD *)v17 + 4) = *(_DWORD *)(v19 + 4);
            *((_DWORD *)v17 + 5) = *(_DWORD *)(v19 + 8);
            v56 = -2;
            LODWORD(nPosStart) = nCount - 1;
            if ( nCount == 1 )
              v20 = 0.0;
            else
              v20 = (double)i / (double)SLODWORD(nPosStart);
            nPosStart = v20;
            v43 = 1.0 - nPosStart;
            nPosStart = v43;
            v21 = &pkTextures[16 * v12];
            v22 = nPosStart;
            *(float *)v21 = nPosStart;
            *((float *)v21 + 1) = 1.0;
            *((float *)v21 + 2) = v22;
            *((float *)v21 + 3) = 0.0;
            if ( v3->baseclass_0.m_bSmoothColor )
            {
              v23 = NiColorA::operator_(&v3->baseclass_0.m_kColorEnd, &result, &v3->baseclass_0.m_kColorStart);
              kColorTemp.r = v23->r;
              kColorTemp.g = v23->g;
              kColorTemp.b = v23->b;
              kColorTemp.a = v23->a;
              nPosStart = v43;
              v24 = NiColorA::operator_(&kColorTemp, (NiColorA *)&v36, nPosStart);
              v25 = NiColorA::operator_(&v3->baseclass_0.m_kColorStart, (NiColorA *)&v37, v24);
              v26 = v25->r;
              v27 = v25->g;
              kColorTemp.b = v25->b;
              v28 = v25->a;
            }
            else
            {
              v26 = v3->baseclass_0.m_kColorStart.r;
              v27 = v3->baseclass_0.m_kColorStart.g;
              kColorTemp.b = v3->baseclass_0.m_kColorStart.b;
              v28 = v3->baseclass_0.m_kColorStart.a;
            }
            kColorTemp.a = v28;
            v29 = &pkColors[32 * v12];
            *(_DWORD *)v29 = LODWORD(v26);
            *((_DWORD *)v29 + 1) = LODWORD(v27);
            *((_DWORD *)v29 + 2) = LODWORD(kColorTemp.b);
            v30 = kColorTemp.a;
            *((_DWORD *)v29 + 3) = LODWORD(kColorTemp.a);
            *((_DWORD *)v29 + 4) = LODWORD(v26);
            *((_DWORD *)v29 + 5) = LODWORD(v27);
            *((_DWORD *)v29 + 6) = LODWORD(kColorTemp.b);
            *((_DWORD *)v29 + 7) = LODWORD(v30);
            ++v12;
            v9 = pkVerts;
            v6 = nCount;
          }
          if ( v6 == 1 )
          {
            *((_DWORD *)v9 + 6) = *(_DWORD *)v9;
            *((_DWORD *)v9 + 7) = *((_DWORD *)v9 + 1);
            *((_DWORD *)v9 + 8) = *((_DWORD *)v9 + 2);
            *((_DWORD *)v9 + 9) = *((_DWORD *)v9 + 3);
            *((_DWORD *)v9 + 10) = *((_DWORD *)v9 + 4);
            *((_DWORD *)v9 + 11) = *((_DWORD *)v9 + 5);
            nCount = 2;
            v6 = 2;
          }
          v31 = v3->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject;
          v31->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
            (NiRefObject *)v3->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject,
            2 * v6 - 2);
          v31->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v31, 2 * nCount);
          v31->m_usDirtyFlags |= 0xDu;
          NiBound::ComputeFromData(&kBound, 2 * nCount, (NiPoint3 *)v9);
          v32 = v3->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject;
          LODWORD(v32->m_kBound.m_kCenter.x) = (_DWORD)kBound.m_kCenter.x;
          v32->m_kBound.m_kCenter.y = kBound.m_kCenter.y;
          v32->m_kBound.m_kCenter.z = kBound.m_kCenter.z;
          v32->m_kBound.m_fRadius = kBound.m_fRadius;
          NiAVObject::Update(&v3->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
        }
        else
        {
          sprintf(aaaa, "AfterImgShape0::Update() pkVerts:%d, pkTextures:%d, pkColors:%d\n");
          NetUtil::SendLog(aaaa);
        }
      }
    }
  }
LABEL_38:
  __security_check_cookie((unsigned int)&v57 ^ v51);
  return v33;
}
// A85C00: using guessed type int __security_cookie;

//----- (0068E5F0) --------------------------------------------------------
void __thiscall AfterImgShape1::AfterImgShape1(AfterImgShape1 *this)
{
  AfterImgShape1 *v1; // esi@1

  v1 = this;
  AfterImgShape::AfterImgShape(&this->baseclass_0);
  v1->baseclass_0.vfptr = (AfterImgShapeVtbl *)&AfterImgShape1::_vftable_;
  LODWORD(v1->m_kpos3Temp.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_kpos3Temp.y = NiPoint3::ZERO.y;
  v1->m_kpos3Temp.z = NiPoint3::ZERO.z;
}
// 9C6DBC: using guessed type int (__thiscall *AfterImgShape1___vftable_)(void *p, char);

//----- (0068E620) --------------------------------------------------------
void __thiscall AfterImgShape1::_AfterImgShape1(AfterImgShape1 *this)
{
  this->baseclass_0.vfptr = (AfterImgShapeVtbl *)&AfterImgShape1::_vftable_;
  AfterImgShape::_AfterImgShape(&this->baseclass_0);
}
// 9C6DBC: using guessed type int (__thiscall *AfterImgShape1___vftable_)(void *p, char);

//----- (0068E630) --------------------------------------------------------
bool __thiscall AfterImgShape1::Update(AfterImgShape1 *this, float _fTime)
{
  AfterImgShape1 *v2; // esi@1
  int v4; // ebx@5
  int v5; // ebx@5
  NiGeometryData *v6; // eax@7
  void *v7; // ecx@7
  int v8; // ebx@7
  char *v9; // edi@7
  int v10; // edx@7
  double v11; // st7@8
  double v12; // st6@8
  double v13; // st5@8
  int v14; // eax@9
  int v15; // ebx@9
  int v16; // ecx@9
  NiPoint3 *v17; // eax@13
  int v18; // ebx@13
  int v19; // ecx@14
  double v20; // st4@14
  int v21; // ecx@14
  double v22; // st4@14
  NiPoint3 *v23; // ecx@15
  NiPoint3 *v24; // eax@18
  int v25; // edi@18
  float v26; // edx@19
  double v27; // st7@19
  double v28; // st7@19
  NiPoint3 *v29; // eax@21
  int v30; // edx@21
  double v31; // st6@21
  char *v32; // eax@21
  NiPoint3 *v33; // ecx@21
  double v34; // st7@21
  double v35; // st7@21
  char *v36; // eax@21
  double v37; // st7@21
  NiColorA *v38; // eax@22
  float v39; // ecx@22
  float v40; // edx@22
  float v41; // edx@22
  float v42; // eax@22
  NiColorA *v43; // eax@22
  NiColorA *v44; // eax@22
  float v45; // ecx@22
  float v46; // edi@22
  float v47; // ebx@22
  float v48; // eax@22
  char *v49; // eax@24
  double v50; // st6@24
  float v51; // edx@24
  double v52; // st5@24
  double v53; // qtt@24
  int v54; // edx@28
  int v55; // eax@28
  int v56; // ecx@28
  int v57; // edx@28
  int v58; // eax@28
  void *(__thiscall *v59)(NiRefObject *, unsigned int); // edx@29
  NiGeometryData *v60; // eax@29
  NiPoint3 *v61; // eax@30
  NiPoint3 *v62; // [sp+8h] [bp-208h]@15
  NiPoint3 *v63; // [sp+Ch] [bp-204h]@15
  char v64; // [sp+1Ch] [bp-1F4h]@22
  char v65; // [sp+2Ch] [bp-1E4h]@22
  char v66; // [sp+3Ch] [bp-1D4h]@22
  char v67; // [sp+4Ch] [bp-1C4h]@15
  NiPoint3 result; // [sp+58h] [bp-1B8h]@17
  double v69; // [sp+64h] [bp-1ACh]@21
  NiPoint3 kpos3LineDir; // [sp+6Ch] [bp-1A4h]@14
  NiPoint3 kpos3OldLineDir; // [sp+78h] [bp-198h]@17
  char *pkTextures; // [sp+84h] [bp-18Ch]@7
  float v73; // [sp+88h] [bp-188h]@19
  float v74; // [sp+8Ch] [bp-184h]@19
  float v75; // [sp+90h] [bp-180h]@19
  float v76; // [sp+94h] [bp-17Ch]@19
  float v77; // [sp+98h] [bp-178h]@19
  float v78; // [sp+9Ch] [bp-174h]@19
  float v79; // [sp+A0h] [bp-170h]@21
  float v80; // [sp+A4h] [bp-16Ch]@21
  float v81; // [sp+A8h] [bp-168h]@21
  float v82; // [sp+ACh] [bp-164h]@21
  float v83; // [sp+B0h] [bp-160h]@21
  float v84; // [sp+B4h] [bp-15Ch]@21
  char *pkColors; // [sp+B8h] [bp-158h]@7
  float v86; // [sp+BCh] [bp-154h]@21
  float v87; // [sp+C0h] [bp-150h]@21
  float v88; // [sp+C4h] [bp-14Ch]@21
  float v89; // [sp+C8h] [bp-148h]@21
  float v90; // [sp+CCh] [bp-144h]@21
  float v91; // [sp+D0h] [bp-140h]@21
  NiBound kBound; // [sp+D4h] [bp-13Ch]@22
  NiPoint3 pos3CameraDir; // [sp+E4h] [bp-12Ch]@5
  float v94; // [sp+F0h] [bp-120h]@14
  float v95; // [sp+F4h] [bp-11Ch]@14
  float v96; // [sp+F8h] [bp-118h]@14
  int i; // [sp+FCh] [bp-114h]@7
  char *pkData; // [sp+100h] [bp-110h]@7
  int nCount; // [sp+104h] [bp-10Ch]@7
  float nPosStart; // [sp+108h] [bp-108h]@9
  char log[256]; // [sp+10Ch] [bp-104h]@31
  unsigned int v102; // [sp+20Ch] [bp-4h]@1
  int v103; // [sp+210h] [bp+0h]@1

  v102 = (unsigned int)&v103 ^ __security_cookie;
  v2 = this;
  if ( !this->baseclass_0.m_bStart || this->baseclass_0.m_bPause || !pkCamera )
    return 0;
  v4 = this->baseclass_0.m_nEndIndex;
  pos3CameraDir.x = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][0];
  v5 = v4 - this->baseclass_0.m_nStartIndex;
  pos3CameraDir.y = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
  pos3CameraDir.z = pkCamera->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
  if ( v5 < 0 )
    v5 += this->baseclass_0.m_nTotalVertexCnt;
  v6 = this->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject;
  v7 = v6->m_pkTexture;
  v8 = v5 + 1;
  v9 = (char *)v6->m_pkVertex;
  pkColors = (char *)v6->m_pkColor;
  v10 = 0;
  nCount = v8;
  pkData = v9;
  pkTextures = (char *)v7;
  i = 0;
  if ( v8 > 0 )
  {
    v11 = pos3CameraDir.z;
    v12 = pos3CameraDir.y;
    v13 = pos3CameraDir.x;
    while ( 1 )
    {
      v14 = v2->baseclass_0.m_nTotalVertexCnt;
      v15 = v10 + v2->baseclass_0.m_nStartIndex;
      LODWORD(nPosStart) = v15;
      v16 = v15 + 1;
      if ( v15 >= v14 )
      {
        v15 -= v14;
        LODWORD(nPosStart) = v15;
      }
      if ( v16 >= v14 )
        v16 -= v14;
      v17 = v2->baseclass_0.m_pkVertices;
      v18 = v15;
      if ( nCount <= 1 )
      {
        *(_DWORD *)v9 = LODWORD(v17[v18].x);
        *((_DWORD *)v9 + 1) = LODWORD(v17[v18].y);
        *((_DWORD *)v9 + 2) = LODWORD(v17[v18].z);
        v61 = v2->baseclass_0.m_pkVertices;
        *((_DWORD *)v9 + 3) = LODWORD(v61[v18].x);
        *((_DWORD *)v9 + 4) = LODWORD(v61[v18].y);
        *((_DWORD *)v9 + 5) = LODWORD(v61[v18].z);
        goto LABEL_25;
      }
      v19 = 3 * v16;
      v20 = v17[v18].x - v17[4 * v19 / 0xCu].x;
      v21 = (int)&v17[4 * v19 / 0xCu];
      v94 = v20;
      v95 = v17[v18].y - *(float *)(v21 + 4);
      v22 = v17[v18].z - *(float *)(v21 + 8);
      kpos3LineDir.x = v94;
      kpos3LineDir.y = v95;
      v96 = v22;
      kpos3LineDir.z = v96;
      if ( v10 )
      {
        if ( v10 != nCount - 1 )
        {
          v25 = (int)&v2->m_kpos3Temp;
          v76 = v95 * v11 - v96 * v12;
          v77 = v96 * v13 - v11 * v94;
          v78 = v94 * v12 - v95 * v13;
          v73 = v76 + v2->m_kpos3Temp.x;
          v74 = v2->m_kpos3Temp.y + v77;
          v26 = v74;
          v27 = v2->m_kpos3Temp.z;
          v2->m_kpos3Temp.x = v73;
          v28 = v27 + v78;
          v2->m_kpos3Temp.y = v26;
          v75 = v28;
          v2->m_kpos3Temp.z = v75;
          NiPoint3::Unitize(&v2->m_kpos3Temp);
          goto LABEL_20;
        }
        v63 = &pos3CameraDir;
        v62 = &result;
        v23 = &kpos3OldLineDir;
      }
      else
      {
        v63 = &pos3CameraDir;
        v62 = (NiPoint3 *)&v67;
        v23 = &kpos3LineDir;
      }
      v24 = NiPoint3::UnitCross(v23, v62, v63);
      v25 = (int)&v2->m_kpos3Temp;
      v2->m_kpos3Temp.x = v24->x;
      v2->m_kpos3Temp.y = v24->y;
      v2->m_kpos3Temp.z = v24->z;
LABEL_20:
      kpos3OldLineDir.z = v96;
      kpos3OldLineDir.x = v94;
      kpos3OldLineDir.y = v95;
      if ( SLODWORD(nPosStart) >= v2->baseclass_0.m_nTotalVertexCnt )
      {
        sprintf(log, "AfterImgShape1::Update() nPosStart is %d count %d %d->%d\n");
        NetUtil::SendLog(log);
        return 0;
      }
      v29 = v2->baseclass_0.m_pkVertices;
      v30 = i;
      nPosStart = v2->baseclass_0.m_fWidth * 0.5;
      v89 = nPosStart * *(float *)v25;
      v90 = nPosStart * *(float *)(v25 + 4);
      v91 = nPosStart * *(float *)(v25 + 8);
      v79 = v29[v18].x + v89;
      v80 = v29[v18].y + v90;
      v31 = v29[v18].z + v91;
      v32 = &pkData[24 * i];
      *(_DWORD *)v32 = LODWORD(v79);
      v81 = v31;
      *((_DWORD *)v32 + 1) = LODWORD(v80);
      *((_DWORD *)v32 + 2) = LODWORD(v81);
      v33 = v2->baseclass_0.m_pkVertices;
      nPosStart = 0.5 * v2->baseclass_0.m_fWidth;
      v86 = nPosStart * *(float *)v25;
      v87 = nPosStart * *(float *)(v25 + 4);
      v88 = nPosStart * *(float *)(v25 + 8);
      v82 = v33[v18].x - v86;
      v83 = v33[v18].y - v87;
      v34 = v33[v18].z - v88;
      *((_DWORD *)v32 + 3) = LODWORD(v82);
      *((_DWORD *)v32 + 4) = LODWORD(v83);
      v84 = v34;
      v35 = (double)i;
      *((_DWORD *)v32 + 5) = LODWORD(v84);
      v36 = &pkTextures[16 * v30];
      nPosStart = v35 / (double)(nCount - 1);
      v69 = 1.0 - nPosStart;
      nPosStart = v69;
      v37 = nPosStart;
      *(float *)v36 = nPosStart;
      *((float *)v36 + 1) = 1.0;
      *((float *)v36 + 2) = v37;
      *((float *)v36 + 3) = 0.0;
      if ( v2->baseclass_0.m_bSmoothColor )
      {
        v38 = NiColorA::operator_(&v2->baseclass_0.m_kColorEnd, (NiColorA *)&v66, &v2->baseclass_0.m_kColorStart);
        v39 = v38->g;
        nPosStart = v69;
        v40 = v38->r;
        kBound.m_kCenter.y = v39;
        kBound.m_kCenter.x = v40;
        v41 = v38->b;
        v42 = v38->a;
        kBound.m_kCenter.z = v41;
        kBound.m_fRadius = v42;
        v43 = NiColorA::operator_((NiColorA *)&kBound, (NiColorA *)&v64, nPosStart);
        v44 = NiColorA::operator_(&v2->baseclass_0.m_kColorStart, (NiColorA *)&v65, v43);
        v45 = v44->r;
        v46 = v44->g;
        v47 = v44->b;
        v48 = v44->a;
        v30 = i;
      }
      else
      {
        v45 = v2->baseclass_0.m_kColorStart.r;
        v46 = v2->baseclass_0.m_kColorStart.g;
        v47 = v2->baseclass_0.m_kColorStart.b;
        v48 = v2->baseclass_0.m_kColorStart.a;
      }
      kBound.m_fRadius = v48;
      v49 = &pkColors[32 * v30];
      v50 = pos3CameraDir.x;
      v51 = kBound.m_fRadius;
      v52 = pos3CameraDir.y;
      v11 = pos3CameraDir.z;
      *(_DWORD *)v49 = LODWORD(v45);
      v53 = v52;
      v13 = v50;
      v12 = v53;
      *((_DWORD *)v49 + 4) = LODWORD(v45);
      *((_DWORD *)v49 + 1) = LODWORD(v46);
      *((_DWORD *)v49 + 5) = LODWORD(v46);
      v9 = pkData;
      *((_DWORD *)v49 + 2) = LODWORD(v47);
      *((_DWORD *)v49 + 6) = LODWORD(v47);
      *((_DWORD *)v49 + 3) = LODWORD(v51);
      *((_DWORD *)v49 + 7) = LODWORD(v51);
      v10 = i;
LABEL_25:
      ++v10;
      i = v10;
      if ( v10 >= nCount )
      {
        v8 = nCount;
        break;
      }
    }
  }
  if ( v8 == 1 )
  {
    v54 = *((_DWORD *)v9 + 1);
    v55 = *((_DWORD *)v9 + 2);
    *((_DWORD *)v9 + 6) = *(_DWORD *)v9;
    v56 = *((_DWORD *)v9 + 3);
    *((_DWORD *)v9 + 7) = v54;
    v57 = *((_DWORD *)v9 + 4);
    *((_DWORD *)v9 + 8) = v55;
    v58 = *((_DWORD *)v9 + 5);
    *((_DWORD *)v9 + 9) = v56;
    nCount = 2;
    v8 = 2;
    *((_DWORD *)v9 + 10) = v57;
    *((_DWORD *)v9 + 11) = v58;
  }
  v59 = v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor;
  pkData = (char *)v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject;
  ((void (__stdcall *)(int))v59)(2 * v8 - 2);
  (*(void (__stdcall **)(int))(*(_DWORD *)pkData + 60))(2 * v8);
  *((_WORD *)pkData + 25) |= 0xDu;
  NiBound::ComputeFromData(&kBound, 2 * v8, (NiPoint3 *)v9);
  v60 = v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject;
  LODWORD(v60->m_kBound.m_kCenter.x) = (_DWORD)kBound.m_kCenter.x;
  v60->m_kBound.m_kCenter.y = kBound.m_kCenter.y;
  v60->m_kBound.m_kCenter.z = kBound.m_kCenter.z;
  v60->m_kBound.m_fRadius = kBound.m_fRadius;
  NiAVObject::Update(&v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0068EC50) --------------------------------------------------------
void __thiscall AfterImgShape0::Init(AfterImgShape0 *this, int _nVertexCnt)
{
  AfterImgShape0 *v2; // esi@1
  NiGeometryData::DataFlags v3; // ebx@1
  int v4; // eax@3
  int v5; // ecx@3
  int v6; // edi@3
  int v7; // eax@3
  int v8; // edi@4
  int v9; // ecx@5
  void *v10; // edi@9
  int v11; // edx@9
  int v12; // eax@10
  int v13; // edi@11
  int v14; // ebx@11
  void *v15; // eax@13
  int v16; // eax@14
  int v17; // edi@14
  void *v18; // eax@16
  NiGeometryData::DataFlags v19; // eax@17
  NiTriShape *v20; // edi@18
  int v21; // eax@25
  void *v22; // eax@25
  void *v23; // edi@25
  void *v24; // ebx@26
  NiAlphaProperty *v25; // edi@28
  int v26; // edi@35
  NiTriShape *v27; // ebx@35
  void *v28; // eax@40
  void *v29; // edi@40
  void *v30; // ebx@41
  NiZBufferProperty *v31; // edi@43
  int v32; // edi@50
  NiTriShape *v33; // ebx@50
  void *v34; // ebx@52
  void *v35; // eax@55
  void *v36; // edi@55
  NiStencilProperty *v37; // edi@57
  int v38; // edi@64
  NiTriShape *v39; // esi@64
  void *pkVertex; // [sp+10h] [bp-18h]@3
  void *pkTexture; // [sp+14h] [bp-14h]@3
  void *pkIndex; // [sp+18h] [bp-10h]@9

  v2 = this;
  this->baseclass_0.m_nTotalVertexCnt = _nVertexCnt;
  v3 = 0;
  if ( this->baseclass_0.m_pkVertices )
    operator delete(this->baseclass_0.m_pkVertices);
  v4 = 24 * v2->baseclass_0.m_nTotalVertexCnt;
  v5 = (unsigned __int8)(12 * (unsigned __int64)(unsigned int)(2 * v2->baseclass_0.m_nTotalVertexCnt) >> 32) != 0;
  v2->baseclass_0.m_pkVertices = 0;
  v2->baseclass_0.m_pkVertices = (NiPoint3 *)operator new__(v4 | -v5);
  pkVertex = operator new__(24 * v2->baseclass_0.m_nTotalVertexCnt);
  pkTexture = operator new__(16 * v2->baseclass_0.m_nTotalVertexCnt);
  v6 = 2 * v2->baseclass_0.m_nTotalVertexCnt;
  v7 = (int)operator new__(32 * v2->baseclass_0.m_nTotalVertexCnt);
  if ( v7 )
  {
    v8 = v6 - 1;
    if ( v8 >= 0 )
    {
      v9 = v7 + 8;
      do
      {
        *(float *)(v9 - 8) = 0.0;
        v9 += 16;
        --v8;
        *(float *)(v9 - 20) = 0.0;
        *(float *)(v9 - 16) = 0.0;
        *(float *)(v9 - 12) = 0.0;
      }
      while ( v8 >= 0 );
    }
    _nVertexCnt = v7;
  }
  else
  {
    _nVertexCnt = 0;
  }
  v10 = operator new__(4 * (3 * v2->baseclass_0.m_nTotalVertexCnt - 3));
  v11 = 0;
  pkIndex = v10;
  if ( v2->baseclass_0.m_nTotalVertexCnt - 1 > 0 )
  {
    v12 = (int)((char *)v10 + 4);
    do
    {
      v13 = 2 * v11 + 1;
      v14 = 2 * v11 + 2;
      *(_WORD *)(v12 - 4) = 2 * v11;
      *(_WORD *)(v12 + 4) = 2 * v11 + 3;
      *(_WORD *)(v12 - 2) = v13;
      *(_WORD *)v12 = v14;
      *(_WORD *)(v12 + 2) = v13;
      *(_WORD *)(v12 + 6) = v14;
      ++v11;
      v12 += 12;
    }
    while ( v11 < v2->baseclass_0.m_nTotalVertexCnt - 1 );
    v10 = pkIndex;
    v3 = 0;
  }
  v15 = operator new(0x5Cu);
  if ( v15 == (void *)v3 )
  {
    v17 = 0;
  }
  else
  {
    NiTriShapeDynamicData::NiTriShapeDynamicData(
      (NiTriShapeDynamicData *)v15,
      2 * LOWORD(v2->baseclass_0.m_nTotalVertexCnt),
      (NiPoint3 *)pkVertex,
      (NiPoint3 *)v3,
      (NiColorA *)_nVertexCnt,
      (NiPoint2 *)pkTexture,
      1u,
      v3,
      2 * LOWORD(v2->baseclass_0.m_nTotalVertexCnt) - 2,
      (unsigned __int16 *)v10,
      v3,
      v3);
    v17 = v16;
  }
  *(float *)(v17 + 16) = 0.0;
  *(float *)(v17 + 20) = 0.0;
  *(float *)(v17 + 24) = 0.0;
  *(float *)(v17 + 28) = 10000.0;
  v18 = operator new(0xC4u);
  _nVertexCnt = (int)v18;
  if ( v18 != (void *)v3 )
  {
    NiTriShape::NiTriShape((NiTriShape *)v18, (NiTriShapeData *)v17);
    v3 = v19;
  }
  v20 = v2->baseclass_0.m_spkTriShape.m_pObject;
  if ( v20 != (NiTriShape *)v3 )
  {
    if ( v20
      && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v20 )
      v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v20,
        1u);
    v2->baseclass_0.m_spkTriShape.m_pObject = (NiTriShape *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v21 = (*(int (__stdcall **)(signed int))(*(_DWORD *)NiGeometryGroupManager::ms_pkManager + 4))(2);
  (*(void (__stdcall **)(int, NiGeometryData *, _DWORD))(*(_DWORD *)NiGeometryGroupManager::ms_pkManager + 20))(
    v21,
    v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0);
  NiObjectNET::SetName(
    &v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    "The Swoosh");
  v22 = operator new(0x20u);
  v23 = v22;
  _nVertexCnt = (int)v22;
  if ( v22 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v22);
    *(_DWORD *)v23 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v23 + 14) = 236;
    *((_BYTE *)v23 + 30) = 0;
    v24 = v23;
  }
  else
  {
    v24 = 0;
  }
  v25 = v2->baseclass_0.m_spkAlphaProp.m_pObject;
  if ( v25 != v24 )
  {
    if ( v25
      && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v25 )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    v2->baseclass_0.m_spkAlphaProp.m_pObject = (NiAlphaProperty *)v24;
    if ( v24 )
      InterlockedIncrement((volatile LONG *)v24 + 1);
  }
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags |= 1u;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags |= 0x200u;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags = v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags & 0xF3FF | 0x1000;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_ucAlphaTestRef = 0;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags = v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags & 0xFFED | 0xC;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags = v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags & 0xFEFF | 0xE0;
  v26 = (int)v2->baseclass_0.m_spkAlphaProp.m_pObject;
  v27 = v2->baseclass_0.m_spkTriShape.m_pObject;
  _nVertexCnt = v26;
  if ( v26 )
    InterlockedIncrement((volatile LONG *)(v26 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v27->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&_nVertexCnt);
  if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v26)(v26, 1);
  v28 = operator new(0x24u);
  v29 = v28;
  _nVertexCnt = (int)v28;
  if ( v28 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v28);
    *(_DWORD *)v29 = &NiZBufferProperty::_vftable_;
    *((_WORD *)v29 + 14) = 3;
    *((_DWORD *)v29 + 8) = 3;
    v30 = v29;
  }
  else
  {
    v30 = 0;
  }
  v31 = v2->baseclass_0.m_spkZBufferProp.m_pObject;
  if ( v31 != v30 )
  {
    if ( v31
      && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v31 )
      v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
    v2->baseclass_0.m_spkZBufferProp.m_pObject = (NiZBufferProperty *)v30;
    if ( v30 )
      InterlockedIncrement((volatile LONG *)v30 + 1);
  }
  v2->baseclass_0.m_spkZBufferProp.m_pObject->m_uFlags &= 0xFFFDu;
  v32 = (int)v2->baseclass_0.m_spkZBufferProp.m_pObject;
  v33 = v2->baseclass_0.m_spkTriShape.m_pObject;
  _nVertexCnt = v32;
  if ( v32 )
    InterlockedIncrement((volatile LONG *)(v32 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v33->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&_nVertexCnt);
  v34 = 0;
  if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v32)(v32, 1);
  v35 = operator new(0x3Cu);
  v36 = v35;
  _nVertexCnt = (int)v35;
  if ( v35 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v35);
    *((_DWORD *)v36 + 9) = 0;
    *((_DWORD *)v36 + 11) = 0;
    *((_DWORD *)v36 + 12) = 0;
    *((_DWORD *)v36 + 14) = 0;
    *(_DWORD *)v36 = &NiStencilProperty::_vftable_;
    *((_BYTE *)v36 + 28) = 0;
    *((_DWORD *)v36 + 8) = 4;
    *((_DWORD *)v36 + 10) = -1;
    *((_DWORD *)v36 + 13) = 3;
    v34 = v36;
  }
  v37 = v2->baseclass_0.m_spkStencilProp.m_pObject;
  if ( v37 != v34 )
  {
    if ( v37
      && !InterlockedDecrement((volatile LONG *)&v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v37 )
      v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
    v2->baseclass_0.m_spkStencilProp.m_pObject = (NiStencilProperty *)v34;
    if ( v34 )
      InterlockedIncrement((volatile LONG *)v34 + 1);
  }
  v2->baseclass_0.m_spkStencilProp.m_pObject->m_eDrawMode = 3;
  v38 = (int)v2->baseclass_0.m_spkStencilProp.m_pObject;
  v39 = v2->baseclass_0.m_spkTriShape.m_pObject;
  _nVertexCnt = v38;
  if ( v38 )
    InterlockedIncrement((volatile LONG *)(v38 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v39->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&_nVertexCnt);
  if ( v38 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v38 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v38)(v38, 1);
  }
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 984FD4: using guessed type int (__thiscall *NiZBufferProperty___vftable_)(void *p, char);
// 9C6D4C: using guessed type int (__thiscall *NiStencilProperty___vftable_)(void *p, char);
// B6E200: using guessed type int NiGeometryGroupManager__ms_pkManager;

//----- (0068F1C0) --------------------------------------------------------
void __thiscall AfterImgShape1::Init(AfterImgShape1 *this, int _nVertexCnt)
{
  AfterImgShape1 *v2; // esi@1
  NiGeometryData::DataFlags v3; // ebx@1
  int v4; // eax@3
  int v5; // ecx@3
  int v6; // edi@3
  int v7; // eax@3
  int v8; // edi@4
  int v9; // ecx@5
  void *v10; // edi@9
  int v11; // edx@9
  int v12; // eax@10
  int v13; // edi@11
  int v14; // ebx@11
  void *v15; // eax@13
  int v16; // eax@14
  int v17; // edi@14
  void *v18; // eax@16
  NiGeometryData::DataFlags v19; // eax@17
  NiTriShape *v20; // edi@18
  int v21; // eax@25
  void *v22; // eax@25
  void *v23; // edi@25
  void *v24; // ebx@26
  NiAlphaProperty *v25; // edi@28
  int v26; // edi@35
  NiTriShape *v27; // ebx@35
  void *v28; // eax@40
  void *v29; // edi@40
  void *v30; // ebx@41
  NiZBufferProperty *v31; // edi@43
  int v32; // edi@50
  NiTriShape *v33; // ebx@50
  void *v34; // ebx@52
  void *v35; // eax@55
  void *v36; // edi@55
  NiStencilProperty *v37; // edi@57
  int v38; // edi@64
  NiTriShape *v39; // esi@64
  void *pkVertex; // [sp+10h] [bp-18h]@3
  void *pkTexture; // [sp+14h] [bp-14h]@3
  void *pkIndex; // [sp+18h] [bp-10h]@9

  v2 = this;
  this->baseclass_0.m_nTotalVertexCnt = _nVertexCnt;
  v3 = 0;
  if ( this->baseclass_0.m_pkVertices )
    operator delete(this->baseclass_0.m_pkVertices);
  v4 = 12 * v2->baseclass_0.m_nTotalVertexCnt;
  v5 = (unsigned __int8)(12 * (unsigned __int64)v2->baseclass_0.m_nTotalVertexCnt >> 32) != 0;
  v2->baseclass_0.m_pkVertices = 0;
  v2->baseclass_0.m_pkVertices = (NiPoint3 *)operator new__(v4 | -v5);
  pkVertex = operator new__(24 * v2->baseclass_0.m_nTotalVertexCnt);
  pkTexture = operator new__(16 * v2->baseclass_0.m_nTotalVertexCnt);
  v6 = 2 * v2->baseclass_0.m_nTotalVertexCnt;
  v7 = (int)operator new__(32 * v2->baseclass_0.m_nTotalVertexCnt);
  if ( v7 )
  {
    v8 = v6 - 1;
    if ( v8 >= 0 )
    {
      v9 = v7 + 8;
      do
      {
        *(float *)(v9 - 8) = 0.0;
        v9 += 16;
        --v8;
        *(float *)(v9 - 20) = 0.0;
        *(float *)(v9 - 16) = 0.0;
        *(float *)(v9 - 12) = 0.0;
      }
      while ( v8 >= 0 );
    }
    _nVertexCnt = v7;
  }
  else
  {
    _nVertexCnt = 0;
  }
  v10 = operator new__(4 * (3 * v2->baseclass_0.m_nTotalVertexCnt - 3));
  v11 = 0;
  pkIndex = v10;
  if ( v2->baseclass_0.m_nTotalVertexCnt - 1 > 0 )
  {
    v12 = (int)((char *)v10 + 4);
    do
    {
      v13 = 2 * v11 + 1;
      v14 = 2 * v11 + 2;
      *(_WORD *)(v12 - 4) = 2 * v11;
      *(_WORD *)(v12 + 4) = 2 * v11 + 3;
      *(_WORD *)(v12 - 2) = v13;
      *(_WORD *)v12 = v14;
      *(_WORD *)(v12 + 2) = v13;
      *(_WORD *)(v12 + 6) = v14;
      ++v11;
      v12 += 12;
    }
    while ( v11 < v2->baseclass_0.m_nTotalVertexCnt - 1 );
    v10 = pkIndex;
    v3 = 0;
  }
  v15 = operator new(0x5Cu);
  if ( v15 == (void *)v3 )
  {
    v17 = 0;
  }
  else
  {
    NiTriShapeDynamicData::NiTriShapeDynamicData(
      (NiTriShapeDynamicData *)v15,
      2 * LOWORD(v2->baseclass_0.m_nTotalVertexCnt),
      (NiPoint3 *)pkVertex,
      (NiPoint3 *)v3,
      (NiColorA *)_nVertexCnt,
      (NiPoint2 *)pkTexture,
      1u,
      v3,
      2 * LOWORD(v2->baseclass_0.m_nTotalVertexCnt) - 2,
      (unsigned __int16 *)v10,
      v3,
      v3);
    v17 = v16;
  }
  *(float *)(v17 + 16) = 0.0;
  *(float *)(v17 + 20) = 0.0;
  *(float *)(v17 + 24) = 0.0;
  *(float *)(v17 + 28) = 50.0;
  v18 = operator new(0xC4u);
  _nVertexCnt = (int)v18;
  if ( v18 != (void *)v3 )
  {
    NiTriShape::NiTriShape((NiTriShape *)v18, (NiTriShapeData *)v17);
    v3 = v19;
  }
  v20 = v2->baseclass_0.m_spkTriShape.m_pObject;
  if ( v20 != (NiTriShape *)v3 )
  {
    if ( v20
      && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v20 )
      v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v20,
        1u);
    v2->baseclass_0.m_spkTriShape.m_pObject = (NiTriShape *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v21 = (*(int (__stdcall **)(signed int))(*(_DWORD *)NiGeometryGroupManager::ms_pkManager + 4))(2);
  (*(void (__stdcall **)(int, NiGeometryData *, _DWORD))(*(_DWORD *)NiGeometryGroupManager::ms_pkManager + 20))(
    v21,
    v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0);
  NiObjectNET::SetName(
    &v2->baseclass_0.m_spkTriShape.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    "The Swoosh");
  v22 = operator new(0x20u);
  v23 = v22;
  _nVertexCnt = (int)v22;
  if ( v22 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v22);
    *(_DWORD *)v23 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v23 + 14) = 236;
    *((_BYTE *)v23 + 30) = 0;
    v24 = v23;
  }
  else
  {
    v24 = 0;
  }
  v25 = v2->baseclass_0.m_spkAlphaProp.m_pObject;
  if ( v25 != v24 )
  {
    if ( v25
      && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v25 )
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
    v2->baseclass_0.m_spkAlphaProp.m_pObject = (NiAlphaProperty *)v24;
    if ( v24 )
      InterlockedIncrement((volatile LONG *)v24 + 1);
  }
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags |= 1u;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags |= 0x200u;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags = v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags & 0xF3FF | 0x1000;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_ucAlphaTestRef = 0;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags = v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags & 0xFFED | 0xC;
  v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags = v2->baseclass_0.m_spkAlphaProp.m_pObject->m_uFlags & 0xFEFF | 0xE0;
  v26 = (int)v2->baseclass_0.m_spkAlphaProp.m_pObject;
  v27 = v2->baseclass_0.m_spkTriShape.m_pObject;
  _nVertexCnt = v26;
  if ( v26 )
    InterlockedIncrement((volatile LONG *)(v26 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v27->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&_nVertexCnt);
  if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v26)(v26, 1);
  v28 = operator new(0x24u);
  v29 = v28;
  _nVertexCnt = (int)v28;
  if ( v28 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v28);
    *(_DWORD *)v29 = &NiZBufferProperty::_vftable_;
    *((_WORD *)v29 + 14) = 3;
    *((_DWORD *)v29 + 8) = 3;
    v30 = v29;
  }
  else
  {
    v30 = 0;
  }
  v31 = v2->baseclass_0.m_spkZBufferProp.m_pObject;
  if ( v31 != v30 )
  {
    if ( v31
      && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v31 )
      v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v31, 1u);
    v2->baseclass_0.m_spkZBufferProp.m_pObject = (NiZBufferProperty *)v30;
    if ( v30 )
      InterlockedIncrement((volatile LONG *)v30 + 1);
  }
  v2->baseclass_0.m_spkZBufferProp.m_pObject->m_uFlags &= 0xFFFDu;
  v32 = (int)v2->baseclass_0.m_spkZBufferProp.m_pObject;
  v33 = v2->baseclass_0.m_spkTriShape.m_pObject;
  _nVertexCnt = v32;
  if ( v32 )
    InterlockedIncrement((volatile LONG *)(v32 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v33->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&_nVertexCnt);
  v34 = 0;
  if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v32)(v32, 1);
  v35 = operator new(0x3Cu);
  v36 = v35;
  _nVertexCnt = (int)v35;
  if ( v35 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v35);
    *((_DWORD *)v36 + 9) = 0;
    *((_DWORD *)v36 + 11) = 0;
    *((_DWORD *)v36 + 12) = 0;
    *((_DWORD *)v36 + 14) = 0;
    *(_DWORD *)v36 = &NiStencilProperty::_vftable_;
    *((_BYTE *)v36 + 28) = 0;
    *((_DWORD *)v36 + 8) = 4;
    *((_DWORD *)v36 + 10) = -1;
    *((_DWORD *)v36 + 13) = 3;
    v34 = v36;
  }
  v37 = v2->baseclass_0.m_spkStencilProp.m_pObject;
  if ( v37 != v34 )
  {
    if ( v37
      && !InterlockedDecrement((volatile LONG *)&v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v37 )
      v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
    v2->baseclass_0.m_spkStencilProp.m_pObject = (NiStencilProperty *)v34;
    if ( v34 )
      InterlockedIncrement((volatile LONG *)v34 + 1);
  }
  v2->baseclass_0.m_spkStencilProp.m_pObject->m_eDrawMode = 3;
  v38 = (int)v2->baseclass_0.m_spkStencilProp.m_pObject;
  v39 = v2->baseclass_0.m_spkTriShape.m_pObject;
  _nVertexCnt = v38;
  if ( v38 )
    InterlockedIncrement((volatile LONG *)(v38 + 4));
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&v39->baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&_nVertexCnt);
  if ( v38 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v38 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v38)(v38, 1);
  }
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 984FD4: using guessed type int (__thiscall *NiZBufferProperty___vftable_)(void *p, char);
// 9C6D4C: using guessed type int (__thiscall *NiStencilProperty___vftable_)(void *p, char);
// B6E200: using guessed type int NiGeometryGroupManager__ms_pkManager;

//----- (0068F730) --------------------------------------------------------
NiColorA *__thiscall NiColorA::operator_(NiColorA *this, NiColorA *result, NiColorA *c)
{
  NiColorA *v3; // eax@1
  float v4; // edx@1
  float v5; // ecx@1

  v3 = result;
  result->r = this->r;
  result->g = this->g;
  v4 = this->b;
  v5 = this->a;
  result->b = v4;
  result->a = v5;
  v3->r = v3->r + c->r;
  v3->g = c->g + v3->g;
  v3->b = c->b + v3->b;
  result->a = c->a + result->a;
  return v3;
}

//----- (0068F780) --------------------------------------------------------
NiColorA *__thiscall NiColorA::operator_(NiColorA *this, NiColorA *result, NiColorA *c)
{
  NiColorA *v3; // eax@1
  float v4; // edx@1
  float v5; // ecx@1

  v3 = result;
  result->r = this->r;
  result->g = this->g;
  v4 = this->b;
  v5 = this->a;
  result->b = v4;
  result->a = v5;
  v3->r = v3->r - c->r;
  v3->g = v3->g - c->g;
  v3->b = v3->b - c->b;
  result->a = result->a - c->a;
  return v3;
}

//----- (0068F7D0) --------------------------------------------------------
NiColorA *__thiscall NiColorA::operator_(NiColorA *this, NiColorA *result, float fScalar)
{
  NiColorA *v3; // eax@1
  float v4; // edx@1
  float v5; // ecx@1

  v3 = result;
  result->r = this->r;
  result->g = this->g;
  v4 = this->b;
  v5 = this->a;
  result->b = v4;
  result->a = v5;
  v3->r = v3->r * fScalar;
  v3->g = fScalar * v3->g;
  result->b = result->b * fScalar;
  result->a = fScalar * result->a;
  return v3;
}

//----- (0068F820) --------------------------------------------------------
NiRTTI *__thiscall NiStencilProperty::GetRTTI(NiStencilProperty *this)
{
  return &NiStencilProperty::m_RTTI;
}

//----- (0068F830) --------------------------------------------------------
unsigned int __thiscall NiStencilProperty::Type(ItemCollectOpenCard *this)
{
  return 7;
}

//----- (0068F840) --------------------------------------------------------
void *__thiscall NiStencilProperty::_vector_deleting_destructor_(NiStencilProperty *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiStencilProperty::_vftable_;
  NiObjectNET::_NiObjectNET(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6D4C: using guessed type int (__thiscall *NiStencilProperty___vftable_)(void *p, char);

//----- (0068F870) --------------------------------------------------------
void __cdecl NetUtil::SendLog(char *_szLog)
{
  PgNet *v1; // esi@1
  char *v2; // eax@2
  char v3; // cl@3
  int wldmanhandle; // [sp+4h] [bp-Ch]@2
  int wLen; // [sp+8h] [bp-8h]@4
  NETCOMMAND netcmd; // [sp+Ch] [bp-4h]@2

  v1 = (PgNet *)g_kNetMgr.m_spWorldMgr.m_pObject;
  if ( g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    netcmd.protocol = 2063;
    PgNet::AddNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &netcmd, 2);
    v2 = _szLog;
    wldmanhandle = g_kServer.m_kWorldMgrHandle;
    do
      v3 = *v2++;
    while ( v3 );
    wLen = (unsigned __int16)((_WORD)v2 - ((_WORD)_szLog + 1) + 1);
    PgNet::AddNetMsg(v1, &wldmanhandle, 2);
    PgNet::AddNetMsg(v1, &wLen, 2);
    PgNet::AddNetMsg(v1, _szLog, (unsigned __int16)wLen);
    PgNet::SendNetMsg(v1, 0, 0);
    PgNet::Flush(v1);
  }
}

//----- (0068F900) --------------------------------------------------------
void *__thiscall AfterImgShape::_vector_deleting_destructor_(AfterImgShape *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AfterImgShape::_AfterImgShape(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0068F930) --------------------------------------------------------
void *__thiscall AfterImgShape0::_vector_deleting_destructor_(AfterImgShape0 *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (AfterImgShapeVtbl *)&AfterImgShape0::_vftable_;
  AfterImgShape::_AfterImgShape(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6DA8: using guessed type int (__thiscall *AfterImgShape0___vftable_)(void *p, char);

//----- (0068F960) --------------------------------------------------------
void *__thiscall AfterImgShape1::_vector_deleting_destructor_(AfterImgShape1 *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (AfterImgShapeVtbl *)&AfterImgShape1::_vftable_;
  AfterImgShape::_AfterImgShape(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6DBC: using guessed type int (__thiscall *AfterImgShape1___vftable_)(void *p, char);

//----- (0068F990) --------------------------------------------------------
float __thiscall ArrowEff::GetSpeed(ArrowEff *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fSpeed;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (0068F9A0) --------------------------------------------------------
void __thiscall ArrowEff::SetSpeed(ArrowEff *this, float fSpeed)
{
  void (__thiscall *v2)(NpNs_MoveToTarget *, float); // edx@1

  v2 = this->m_kMoveToTarget.vfptr->SetSpeed;
  this->m_fSpeed = fSpeed;
  ((void (__stdcall *)(_DWORD))v2)(LODWORD(fSpeed));
}

//----- (0068F9D0) --------------------------------------------------------
unsigned __int16 __thiscall ArrowEff::GetTargetChar(ArrowEff *this)
{
  return this->m_kTargetCharHandle;
}

//----- (0068F9E0) --------------------------------------------------------
void __thiscall ArrowEff::SetTargetChar(ArrowEff *this, unsigned __int16 kHandle)
{
  this->m_kTargetCharHandle = kHandle;
}

//----- (0068FA00) --------------------------------------------------------
unsigned __int16 __thiscall ArrowEff::GetCasterChar(ArrowEff *this)
{
  return this->m_kCasterCharHandle;
}

//----- (0068FA10) --------------------------------------------------------
void __thiscall ArrowEff::SetCasterChar(ArrowEff *this, unsigned __int16 kHandle)
{
  this->m_kCasterCharHandle = kHandle;
}

//----- (0068FA30) --------------------------------------------------------
bool __thiscall ArrowEff::IsEnd(ArrowEff *this, float fTime)
{
  ArrowEff *v2; // esi@1
  float fTimea; // [sp+Ch] [bp+8h]@3

  v2 = this;
  return (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)()
      || (fTimea = fTime - v2->baseclass_0.m_fStartTime, v2->baseclass_0.m_fLifeTime < (double)fTimea);
}

//----- (0068FA70) --------------------------------------------------------
bool __thiscall ArrowEff::IsHitTarget(ArrowEff *this)
{
  return this->m_kMoveToTarget.vfptr->IsMove(&this->m_kMoveToTarget) == 0;
}

//----- (0068FA90) --------------------------------------------------------
void __thiscall ArrowEff::AddHitDamage(ArrowEff *this, unsigned int uiDamage, unsigned __int16 kTarget, unsigned int dwHpChangeSeqNo, unsigned int kTargetRestHP, bool bViewDamage, bool bRange, __int16 AtkSeqnum, __int16 SeqDmgNum)
{
  DamageInfoSet::AddDamage(
    &this->m_kDamageInfoSet,
    uiDamage,
    kTarget,
    dwHpChangeSeqNo,
    kTargetRestHP,
    bViewDamage,
    bRange,
    SeqDmgNum);
}

//----- (0068FAC0) --------------------------------------------------------
DamageInfo *__thiscall ArrowEff::GetDummyDmgInfo(ArrowEff *this)
{
  return DamageInfoSet::GetLastInvalidDmgInfo(&this->m_kDamageInfoSet);
}

//----- (0068FAD0) --------------------------------------------------------
void __thiscall ArrowEff::CopyMember(ArrowEff *this, Effect *pkEffect)
{
  ArrowEff *v2; // edi@1
  NiObject *v3; // ecx@1
  NiRefObjectVtbl *v4; // ebx@2
  NiObject *v5; // eax@2
  bool v6; // al@3
  int v7; // eax@5
  char v8; // al@8
  int v9; // eax@9

  v2 = this;
  v3 = (NiObject *)this->baseclass_0.m_spNode.m_pObject;
  if ( v3 )
  {
    v4 = pkEffect->baseclass_0.vfptr;
    v5 = NiObject::Clone(v3);
    v4[3].__vecDelDtor((NiRefObject *)pkEffect, (unsigned int)v5);
  }
  pkEffect->m_fLifeTime = v2->baseclass_0.m_fLifeTime;
  v6 = v2->baseclass_0.m_bCreateProgramEff;
  pkEffect->m_bCreateProgramEff = v6;
  if ( v6 )
    Effect::CreateProgramEff(pkEffect);
  v7 = ((int (__thiscall *)(_DWORD))pkEffect->baseclass_0.vfptr[1].__vecDelDtor)(pkEffect);
  if ( v7 )
  {
    while ( (NiRTTI *)v7 != &ArrowEff::m_RTTI )
    {
      v7 = *(_DWORD *)(v7 + 4);
      if ( !v7 )
        goto LABEL_8;
    }
    v8 = 1;
  }
  else
  {
LABEL_8:
    v8 = 0;
  }
  v9 = v8 != 0 ? (int)pkEffect : 0;
  *(float *)(v9 + 524) = v2->m_fSpeed;
  *(_BYTE *)(v9 + 668) = v2->m_bHitDamageShow;
}

//----- (0068FB60) --------------------------------------------------------
void __thiscall ArrowEff::StopWeaponAfterImgEff(ArrowEff *this)
{
  ArrowEff *v1; // edi@1
  AfterImgEff *v2; // ecx@1
  NiNode *v3; // eax@2
  AfterImgEff *v4; // esi@2

  v1 = this;
  v2 = this->m_spWeaponAfterImgEff.m_pObject;
  if ( v2 )
  {
    v3 = (NiNode *)((int (*)(void))v2->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
    World::DetachEffect(&g_kWorld, v3);
    v4 = v1->m_spWeaponAfterImgEff.m_pObject;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
      v1->m_spWeaponAfterImgEff.m_pObject = 0;
    }
  }
}

//----- (0068FBC0) --------------------------------------------------------
void __thiscall ArrowEff::Update(ArrowEff *this, float fTime)
{
  ArrowEff *v2; // ebx@1
  Char *v3; // eax@1
  Char *v4; // edi@1
  NiPoint3 *v5; // eax@4
  float v6; // edx@4
  NpNs_MoveToTargetVtbl *v7; // eax@4
  int v8; // eax@5
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // edx@5
  int v10; // esi@7
  AfterImgEff *v11; // ecx@10
  float v12; // [sp+28h] [bp-74h]@0
  NiPoint3 pos3Dir; // [sp+2Ch] [bp-70h]@4
  NiPoint3 kPos; // [sp+38h] [bp-64h]@5
  NiPoint3 pos3TargetPos; // [sp+44h] [bp-58h]@4
  NiMatrix3 result; // [sp+50h] [bp-4Ch]@8
  NiMatrix3 rot; // [sp+74h] [bp-28h]@8
  unsigned int v18; // [sp+98h] [bp-4h]@1
  int v19; // [sp+9Ch] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v2 = this;
  Effect::Update(&this->baseclass_0, fTime);
  ((void (__thiscall *)(NpNs_MoveToTarget *, _DWORD))v2->m_kMoveToTarget.vfptr->Update)(
    &v2->m_kMoveToTarget,
    LODWORD(fTime));
  v3 = CharMgr::GetChar(&g_kCharMgr, v2->m_kTargetCharHandle);
  v4 = v3;
  if ( !v3 )
  {
    v2->m_kMoveToTarget.vfptr->Stop(&v2->m_kMoveToTarget);
    goto LABEL_14;
  }
  if ( !Char::IsUpdate(v3) )
  {
    v2->m_kMoveToTarget.vfptr->Stop(&v2->m_kMoveToTarget);
LABEL_14:
    ArrowEff::StopWeaponAfterImgEff(v2);
    return;
  }
  v5 = Char::GetChestPos(v4, &pos3Dir);
  pos3TargetPos.x = v5->x;
  pos3TargetPos.y = v5->y;
  v6 = v5->z;
  v7 = v2->m_kMoveToTarget.vfptr;
  pos3TargetPos.z = v6;
  v7->StartMove(&v2->m_kMoveToTarget, &pos3TargetPos);
  if ( v2->baseclass_0.m_spNode.m_pObject )
  {
    v8 = (int)v2->m_kMoveToTarget.vfptr->GetCurrentPos(&v2->m_kMoveToTarget);
    LODWORD(kPos.x) = *(_DWORD *)v8;
    LODWORD(kPos.y) = *(_DWORD *)(v8 + 4);
    v9 = v2->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
    LODWORD(kPos.z) = *(_DWORD *)(v8 + 8);
    v9(&v2->baseclass_0.baseclass_0, (unsigned int)&kPos);
    pos3Dir.x = kPos.x - pos3TargetPos.x;
    pos3Dir.y = kPos.y - pos3TargetPos.y;
    pos3Dir.z = kPos.z - pos3TargetPos.z;
    if ( NiPoint3::Unitize(&pos3Dir) < 20.0 )
    {
      v2->m_kMoveToTarget.vfptr->Stop(&v2->m_kMoveToTarget);
      ArrowEff::StopWeaponAfterImgEff(v2);
    }
    v10 = ((int (__stdcall *)(_DWORD))v2->baseclass_0.m_spDefaultEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("MyWeapon");
    if ( v10 )
    {
      v12 = Timer::ms_fDeltaTime * fAng;
      NiMatrix3::MakeYRotation(&rot, v12);
      memcpy((void *)(v10 + 52), NiMatrix3::operator_((NiMatrix3 *)(v10 + 52), &result, &rot), 0x24u);
    }
    else
    {
      v2->baseclass_0.baseclass_0.vfptr[11].__vecDelDtor((NiRefObject *)v2, (unsigned int)&pos3Dir);
    }
  }
  v11 = v2->m_spWeaponAfterImgEff.m_pObject;
  if ( v11 )
  {
    if ( !(unsigned __int8)((int (__stdcall *)(_DWORD))v11->baseclass_0.baseclass_0.vfptr[19].__vecDelDtor)(LODWORD(fTime)) )
    {
      ((void (__stdcall *)(_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))v2->m_spWeaponAfterImgEff.m_pObject->baseclass_0.baseclass_0.vfptr[14].__vecDelDtor)(
        LODWORD(fTime),
        LODWORD(v12),
        (_DWORD)pos3Dir.x,
        LODWORD(pos3Dir.y),
        LODWORD(pos3Dir.z),
        (_DWORD)kPos.x,
        LODWORD(kPos.y),
        LODWORD(kPos.z),
        (_DWORD)pos3TargetPos.x,
        LODWORD(pos3TargetPos.y),
        LODWORD(pos3TargetPos.z),
        (_DWORD)result.m_pEntry[0][0],
        LODWORD(result.m_pEntry[0][1]),
        LODWORD(result.m_pEntry[0][2]),
        LODWORD(result.m_pEntry[1][0]),
        LODWORD(result.m_pEntry[1][1]),
        LODWORD(result.m_pEntry[1][2]),
        LODWORD(result.m_pEntry[2][0]),
        LODWORD(result.m_pEntry[2][1]),
        LODWORD(result.m_pEntry[2][2]),
        (_DWORD)rot.m_pEntry[0][0],
        LODWORD(rot.m_pEntry[0][1]),
        LODWORD(rot.m_pEntry[0][2]),
        LODWORD(rot.m_pEntry[1][0]),
        LODWORD(rot.m_pEntry[1][1]),
        LODWORD(rot.m_pEntry[1][2]),
        LODWORD(rot.m_pEntry[2][0]));
      return;
    }
    goto LABEL_14;
  }
}
// 68FBC0: could not find valid save-restore pair for ebx
// 68FBC0: could not find valid save-restore pair for edi
// 68FBC0: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (0068FDC0) --------------------------------------------------------
void __thiscall ArrowEff::OnEnd(ArrowEff *this, float fTime)
{
  ArrowEff *v2; // esi@1
  Char *v3; // edi@2
  int v4; // eax@5
  LastEffPos v5; // eax@7
  int v6; // eax@9
  void (__thiscall *v7)(AbStateInfectee *, AbStateInst *, bool); // edx@9
  int v8; // eax@9
  int v9; // eax@10
  AbStateInfecteeVtbl *v10; // edx@10
  double v11; // st7@10
  void (__thiscall *v12)(AbStateInfectee *, AbStateInst *, bool); // eax@10
  int v13; // eax@11
  _BYTE v14[12]; // ST10_12@12
  _BYTE v15[12]; // ST04_12@12
  Char *v16; // eax@13
  AfterImgEff *v17; // ecx@16
  NiNode *v18; // eax@17
  AfterImgEff *v19; // edi@17
  NiPoint3 result; // [sp+14h] [bp-18h]@11
  NiPoint3 kPos; // [sp+20h] [bp-Ch]@5

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)() )
  {
    v3 = CharMgr::GetChar(&g_kCharMgr, v2->m_kTargetCharHandle);
    if ( v3 )
    {
      if ( v2->m_acBombEffectName[0] != 45 )
      {
        if ( v2 != (ArrowEff *)-628 )
        {
          v4 = ((int (__thiscall *)(ArrowEff *))v2->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)(v2);
          LODWORD(kPos.x) = *(_DWORD *)v4;
          LODWORD(kPos.y) = *(_DWORD *)(v4 + 4);
          LODWORD(kPos.z) = *(_DWORD *)(v4 + 8);
          SoundMgr::CreateSound(&g_kSoundMgr, v2->m_acBombSndName, &kPos);
        }
        if ( v2->m_acBombEffectName[0] != 45 )
        {
          v5 = v2->m_ePlayPos;
          if ( v5 )
          {
            if ( v5 == 1 )
            {
              v9 = ((int (__thiscall *)(ArrowEff *))v2->baseclass_0.baseclass_0.vfptr[12].__vecDelDtor)(v2);
              v10 = v3->baseclass_0.vfptr;
              kPos.x = -*(float *)v9;
              kPos.y = -*(float *)(v9 + 4);
              v11 = *(float *)(v9 + 8);
              v12 = v10[6].Deaffect;
              kPos.z = -v11;
              v8 = ((int (__thiscall *)(Char *))v12)(v3);
            }
            else
            {
              v6 = ((int (__thiscall *)(ArrowEff *))v2->baseclass_0.baseclass_0.vfptr[12].__vecDelDtor)(v2);
              kPos.x = -*(float *)v6;
              kPos.y = -*(float *)(v6 + 4);
              v7 = v3->baseclass_0.vfptr[6].Deaffect;
              kPos.z = -*(float *)(v6 + 8);
              v8 = ((int (__thiscall *)(Char *))v7)(v3);
            }
          }
          else
          {
            v13 = ((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.vfptr[12].__vecDelDtor)(v2);
            kPos.x = -*(float *)v13;
            kPos.y = -*(float *)(v13 + 4);
            kPos.z = -*(float *)(v13 + 8);
            v8 = (int)Char::GetChestPos(v3, &result);
          }
          *(_DWORD *)v14 = (_DWORD)kPos.x;
          *(_QWORD *)&v14[4] = *(_QWORD *)&kPos.y;
          *(_DWORD *)v15 = *(_DWORD *)v8;
          *(_QWORD *)&v15[4] = *(_QWORD *)(v8 + 4);
          EffectMgr::CreateEffect(&g_kEffectMgr, v2->m_acBombEffectName, *(NiPoint3 *)v15, *(NiPoint3 *)v14, fTime, 1.0);
        }
      }
      v16 = CharMgr::GetChar(&g_kCharMgr, v2->m_kCasterCharHandle);
      if ( v16 )
        DamageInfoSet::Applicate(&v2->m_kDamageInfoSet, v16, 1);
      DamageInfoSet::Clear(&v2->m_kDamageInfoSet);
    }
  }
  v17 = v2->m_spWeaponAfterImgEff.m_pObject;
  if ( v17 )
  {
    v18 = (NiNode *)((int (*)(void))v17->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
    World::DetachEffect(&g_kWorld, v18);
    v19 = v2->m_spWeaponAfterImgEff.m_pObject;
    if ( v19 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v19 )
          v19->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
      }
      v2->m_spWeaponAfterImgEff.m_pObject = 0;
    }
  }
}

//----- (0068FFA0) --------------------------------------------------------
void __thiscall ArrowEff::StartWeaponAfterImgEff(ArrowEff *this, float fCurTime, float fLifeTime)
{
  ArrowEff *v3; // esi@1
  AfterImgEff *v4; // ecx@1
  NiNode *v5; // eax@2
  AfterImgEff *v6; // edi@2
  int v7; // eax@7
  NiNode *v8; // eax@7
  AfterImgEff *v9; // eax@8
  AfterImgEff *v10; // edi@8
  AfterImgEff *v11; // ebx@8
  AfterImgEff *v12; // ecx@15
  NiNode *v13; // eax@16

  v3 = this;
  v4 = this->m_spWeaponAfterImgEff.m_pObject;
  if ( v4 )
  {
    v5 = (NiNode *)((int (*)(void))v4->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
    World::DetachEffect(&g_kWorld, v5);
    v6 = v3->m_spWeaponAfterImgEff.m_pObject;
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.m_uiRefCount) && v6 )
        v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v3->m_spWeaponAfterImgEff.m_pObject = 0;
    }
  }
  v7 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)(v3);
  v8 = (NiNode *)(*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 72))(v7, "AfterImg000");
  if ( v8 )
  {
    v9 = AfterImgEff::CreateByWeaponNode(v8, 0, 0);
    v10 = v3->m_spWeaponAfterImgEff.m_pObject;
    v11 = v9;
    if ( v10 != v9 )
    {
      if ( v10 && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.m_uiRefCount) && v10 )
        v10->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      v3->m_spWeaponAfterImgEff.m_pObject = v11;
      if ( v11 )
        InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.m_uiRefCount);
    }
    v12 = v3->m_spWeaponAfterImgEff.m_pObject;
    if ( v12 )
    {
      ((void (__stdcall *)(_DWORD))v12->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(LODWORD(fLifeTime));
      ((void (__stdcall *)(_DWORD))v3->m_spWeaponAfterImgEff.m_pObject->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(fCurTime));
      v13 = (NiNode *)((int (*)(void))v3->m_spWeaponAfterImgEff.m_pObject->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
      World::AttachEffect(&g_kWorld, v13);
    }
  }
}

//----- (006900B0) --------------------------------------------------------
void __thiscall ArrowEff::Start(ArrowEff *this, float fTime)
{
  ArrowEff *v2; // esi@1

  v2 = this;
  Effect::Start(&this->baseclass_0, fTime);
  ArrowEff::StartWeaponAfterImgEff(v2, Timer::ms_fCurTime, 1.0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006900E0) --------------------------------------------------------
void __thiscall ArrowEff::SetHitDamage(ArrowEff *this, __int16 AtkSeqNum, DamageInfoSet *pkDamInfoSet)
{
  ArrowEff *v3; // esi@1

  v3 = this;
  if ( pkDamInfoSet )
  {
    DamageInfoSet::CopyFrom(&this->m_kDamageInfoSet, pkDamInfoSet);
    v3->m_iAtkSeqNum = AtkSeqNum;
  }
  else
  {
    OutputDebugStringA("Shoot EFFÀÇ DamageInfoSetÀÌ Á¸ÀçÇÏÁ");
    v3->m_iAtkSeqNum = AtkSeqNum;
  }
}

//----- (00690130) --------------------------------------------------------
void __thiscall ArrowEff::ArrowEff(ArrowEff *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster)
{
  ArrowEff *v4; // esi@1
  AfterImgEff *v5; // edi@1

  v4 = this;
  Effect::Effect(&this->baseclass_0, pkNode, bCreateProgramEff, pkCaster);
  v4->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ArrowEff::_vftable_;
  v4->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ArrowEff::_vftable_;
  NpNs_MoveToTarget::NpNs_MoveToTarget(&v4->m_kMoveToTarget);
  *(_DWORD *)&v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead = 0;
  v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail = 0;
  v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTList<DamageInfo__>::_vftable_;
  v4->m_spWeaponAfterImgEff.m_pObject = 0;
  v4->m_fSpeed = 500.0;
  *(_DWORD *)&v4->m_kTargetCharHandle = -1;
  v4->m_uiHitDamage = 0;
  v4->m_bHitDamageShow = 1;
  v4->m_acBombEffectName[0] = 0;
  v4->m_acBombSndName[0] = 0;
  v5 = v4->m_spWeaponAfterImgEff.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v4->m_spWeaponAfterImgEff.m_pObject = 0;
  }
  v4->m_ePlayPos = 1;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// 9C6E24: using guessed type int (__stdcall *ArrowEff___vftable_[3])(int);
// 9C6E3C: using guessed type int (__thiscall *ArrowEff___vftable_)(void *p, char);

//----- (00690230) --------------------------------------------------------
void __thiscall ArrowEff::_ArrowEff(ArrowEff *this)
{
  ArrowEff *v1; // esi@1
  AfterImgEff *v2; // edi@1
  Char *v3; // eax@6
  AfterImgEff *v4; // edi@8

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ArrowEff::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ArrowEff::_vftable_;
  v2 = this->m_spWeaponAfterImgEff.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spWeaponAfterImgEff.m_pObject = 0;
  }
  v3 = CharMgr::GetChar(&g_kCharMgr, v1->m_kCasterCharHandle);
  if ( v3 )
    DamageInfoSet::Applicate(&v1->m_kDamageInfoSet, v3, 1);
  v4 = v1->m_spWeaponAfterImgEff.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  DamageInfoSet::_DamageInfoSet(&v1->m_kDamageInfoSet);
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&v1->m_kMoveToTarget);
  Effect::_Effect(&v1->baseclass_0);
}
// 9C6E24: using guessed type int (__stdcall *ArrowEff___vftable_[3])(int);
// 9C6E3C: using guessed type int (__thiscall *ArrowEff___vftable_)(void *p, char);

//----- (00690330) --------------------------------------------------------
Effect *__thiscall ArrowEff::Clone(ArrowEff *this)
{
  ArrowEff *v1; // edi@1
  void *v2; // eax@1
  Effect *v3; // esi@1
  Effect *v4; // eax@2

  v1 = this;
  v2 = operator new(0x2E8u);
  v3 = 0;
  if ( v2 )
  {
    ArrowEff::ArrowEff((ArrowEff *)v2, 0, 0, 0);
    v3 = v4;
  }
  ((void (__cdecl *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[22].__vecDelDtor)(v3);
  return v3;
}

//----- (006903A0) --------------------------------------------------------
void *__thiscall ArrowEff::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return ArrowEff::_scalar_deleting_destructor_((ArrowEff *)((char *)this - 8), a2);
}

//----- (006903B0) --------------------------------------------------------
NiRTTI *__thiscall ArrowEff::GetRTTI(ArrowEff *this)
{
  return &ArrowEff::m_RTTI;
}

//----- (006903C0) --------------------------------------------------------
void __thiscall ArrowEff::SetBombEffectName(ArrowEff *this, char *pcBombEffName)
{
  char *v2; // eax@1
  unsigned int v3; // edx@3
  char v4; // cl@4

  v2 = pcBombEffName;
  if ( pcBombEffName )
  {
    v3 = this->m_acBombEffectName - pcBombEffName;
    do
    {
      v4 = *v2;
      v2[v3] = *v2;
      ++v2;
    }
    while ( v4 );
  }
  else
  {
    this->m_acBombEffectName[0] = (char)pcBombEffName;
  }
}

//----- (006903F0) --------------------------------------------------------
void __thiscall ArrowEff::SetBombSndName(ArrowEff *this, char *pcBombSndName)
{
  char *v2; // eax@1
  unsigned int v3; // edx@3
  char v4; // cl@4

  v2 = pcBombSndName;
  if ( pcBombSndName )
  {
    v3 = this->m_acBombSndName - pcBombSndName;
    do
    {
      v4 = *v2;
      v2[v3] = *v2;
      ++v2;
    }
    while ( v4 );
  }
  else
  {
    this->m_acBombEffectName[0] = (char)pcBombSndName;
  }
}

//----- (00690420) --------------------------------------------------------
bool __thiscall ArrowEff::IsHitDamageShow(ArrowEff *this)
{
  return this->m_bHitDamageShow;
}

//----- (00690430) --------------------------------------------------------
void __thiscall ArrowEff::SetHitDamageShow(ArrowEff *this, bool bShow)
{
  this->m_bHitDamageShow = bShow;
}

//----- (00690440) --------------------------------------------------------
void *__thiscall ArrowEff::_scalar_deleting_destructor_(ArrowEff *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ArrowEff::_ArrowEff(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00690470) --------------------------------------------------------
unsigned __int16 __thiscall AttachEff::GetTargetChar(AttachEff *this)
{
  return this->m_kTargetCharHandle;
}

//----- (00690480) --------------------------------------------------------
void __thiscall AttachEff::SetTargetChar(AttachEff *this, unsigned __int16 kHandle)
{
  this->m_kTargetCharHandle = kHandle;
}

//----- (006904A0) --------------------------------------------------------
void __thiscall AttachEff::AttachEff(AttachEff *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster)
{
  AttachEff *v4; // esi@1
  NiNode *v5; // edi@1

  v4 = this;
  Effect::Effect(&this->baseclass_0, pkNode, bCreateProgramEff, pkCaster);
  v4->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttachEff::_vftable_;
  v4->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)AttachEff::_vftable_;
  v4->m_spkTargetNode.m_pObject = 0;
  v4->m_kTargetCharHandle = -1;
  v5 = v4->m_spkTargetNode.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v4->m_spkTargetNode.m_pObject = 0;
  }
  v4->baseclass_0.m_bLoop = 0;
  v4->baseclass_0.m_fLifeTime = -1.0;
  v4->m_pkEffectHolder = 0;
  v4->m_bSkillEffect = 1;
  *(_WORD *)&v4->m_bAura = 0;
}
// 9C6EF8: using guessed type int (__stdcall *AttachEff___vftable_[3])(int);
// 9C6F0C: using guessed type int (__thiscall *AttachEff___vftable_)(void *p, char);

//----- (00690570) --------------------------------------------------------
bool __thiscall AttachEff::LengthOfView(AttachEff *this)
{
  unsigned __int16 v1; // ax@1
  bool result; // al@2
  Char *v3; // eax@3
  Char *v4; // esi@3
  int v5; // edi@9
  NiPoint3 *v6; // eax@9
  double v7; // st7@9
  NiPoint3 thisa; // [sp+0h] [bp-14h]@9
  double v9; // [sp+Ch] [bp-8h]@9

  v1 = this->m_kTargetCharHandle;
  if ( v1 == -1 )
  {
    result = 1;
  }
  else
  {
    v3 = CharMgr::GetChar(&g_kCharMgr, v1);
    v4 = v3;
    result = !v3
          || (v3 == g_pkMainChar || !AbStateInfectee::FindNomalAbstate(&v3->baseclass_0, STA_GTIHIDE))
          && (Char::IsLinkGate(v4)
           || v4->m_bIsDoor
           || (v5 = ((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4),
               v6 = World::GetCameraLookAtPos(&g_kWorld),
               thisa.x = v6->x - *(float *)v5,
               thisa.y = v6->y - *(float *)(v5 + 4),
               thisa.z = v6->z - *(float *)(v5 + 8),
               v9 = Char::GetMaxViewLength(v4),
               v7 = NiPoint3::Length(&thisa),
               v7 <= v9));
  }
  return result;
}

//----- (00690630) --------------------------------------------------------
void __thiscall IEffectHolder::ClearAttachedEffect(IEffectHolder *this)
{
  NiTListItem<AttachEff *> *v1; // esi@1
  Effect *v2; // eax@2

  v1 = this->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead;
  while ( v1 )
  {
    v2 = (Effect *)v1->m_element;
    v1 = v1->m_pkNext;
    EffectMgr::RemoveEffect(&g_kEffectMgr, v2);
  }
}

//----- (00690650) --------------------------------------------------------
void __thiscall IEffectHolder::AttachEffectShow(IEffectHolder *this, bool bShow)
{
  IEffectHolder *v2; // ebx@1
  NiTListItem<AttachEff *> *v3; // edi@2
  Effect *v4; // esi@3
  IEffectHolder *v5; // [sp+4h] [bp-4h]@1

  v2 = this;
  v5 = this;
  if ( this->m_bShow != bShow )
  {
    v3 = this->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead;
    this->m_bShow = bShow;
    while ( v3 )
    {
      v4 = (Effect *)v3->m_element;
      v3 = v3->m_pkNext;
      if ( v4 )
      {
        if ( g_pkMainChar->m_kHandle == (unsigned __int16)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[23].__vecDelDtor)(v4)
          && g_pkMainChar->m_kCharShape.m_kEquip.Equ_CosEff != -1 )
        {
          v2 = v5;
          continue;
        }
        v2 = v5;
      }
      EffectMgr::SetShow(&g_kEffectMgr, v4, v2->m_bShow, 1);
    }
  }
}

//----- (006906E0) --------------------------------------------------------
void __thiscall AttachEff::SetEffectHold(AttachEff *this, bool b)
{
  AttachEff *v2; // esi@1
  NiNode *v3; // edi@2
  int v4; // eax@2

  v2 = this;
  if ( b )
  {
    v3 = this->m_spkTargetNode.m_pObject;
    v4 = ((int (*)(void))this->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)();
    if ( v4 )
    {
      *(_DWORD *)(v4 + 88) = LODWORD(v3->baseclass_0.m_kWorld.m_Translate.x);
      *(_DWORD *)(v4 + 92) = LODWORD(v3->baseclass_0.m_kWorld.m_Translate.y);
      *(_DWORD *)(v4 + 96) = LODWORD(v3->baseclass_0.m_kWorld.m_Translate.z);
    }
    v2->m_bEffectHold = b;
  }
  else
  {
    this->m_bEffectHold = 0;
  }
}

//----- (00690740) --------------------------------------------------------
void __thiscall AttachEff::Update(AttachEff *this, float fTime)
{
  int v2; // edi@0
  unsigned int v3; // esi@0
  AttachEff *v4; // ebx@1
  NiNode *v5; // eax@1
  NiNode *v6; // esi@3
  NiNode *v7; // eax@8
  int v8; // esi@9
  int v9; // eax@9
  Name3 *v10; // eax@12
  MapInfo *v11; // edi@12
  bool v12; // al@12
  Char *v13; // eax@15
  Char *v14; // esi@15
  Mover *v15; // ecx@21
  signed __int16 v16; // di@23
  NiRefObjectVtbl *v17; // edi@33
  bool v18; // al@33
  NiRefObjectVtbl *v19; // esi@37
  bool v20; // al@37
  Char *v21; // esi@38
  int v22; // eax@40
  float v23; // edx@40
  float v24; // ecx@40
  float v25; // eax@40
  AbStateInfecteeVtbl *v26; // edx@40
  int v27; // eax@40
  void *(__thiscall *v28)(NiRefObject *, unsigned int); // edx@40
  int v29; // eax@41
  void *(__thiscall *v30)(NiRefObject *, unsigned int); // edx@41
  int v31; // [sp+0h] [bp-30h]@12
  unsigned int v32; // [sp+4h] [bp-2Ch]@1
  Name3 result; // [sp+Ch] [bp-24h]@12
  NiPoint3 kDir; // [sp+18h] [bp-18h]@40
  NiPoint3 kPos; // [sp+24h] [bp-Ch]@40
  int pkMapinfo; // [sp+38h] [bp+8h]@9
  float pkMapinfob; // [sp+38h] [bp+8h]@12
  MapInfo *pkMapinfoa; // [sp+38h] [bp+8h]@12

  v32 = v3;
  v4 = this;
  Effect::Update(&this->baseclass_0, fTime);
  v5 = v4->m_spkTargetNode.m_pObject;
  if ( v5 )
  {
    if ( v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount == 1 )
    {
      v6 = v4->m_spkTargetNode.m_pObject;
      if ( v5 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        v4->m_spkTargetNode.m_pObject = 0;
      }
    }
  }
  v7 = v4->m_spkTargetNode.m_pObject;
  if ( v7 )
  {
    v8 = (int)&v7->baseclass_0.m_kWorld;
    pkMapinfo = (int)&v7->baseclass_0.m_kWorld;
    v9 = ((int (__thiscall *)(AttachEff *))v4->baseclass_0.baseclass_0.vfptr[2].__vecDelDtor)(v4);
    if ( !v9 )
      return;
    if ( !v4->m_bEffectHold )
    {
      *(_DWORD *)(v9 + 88) = *(_DWORD *)(v8 + 36);
      *(_DWORD *)(v9 + 92) = *(_DWORD *)(v8 + 40);
      *(_DWORD *)(v9 + 96) = *(_DWORD *)(v8 + 44);
    }
    v31 = v2;
    memcpy((void *)(v9 + 52), (const void *)v8, 0x24u);
    pkMapinfob = fabs(*(float *)(pkMapinfo + 48));
    *(float *)(v9 + 100) = pkMapinfob;
    v10 = World::GetMapName(&g_kWorld, &result);
    v11 = MapInfoTab::GetByMapName(v10);
    v12 = v4->m_bAura;
    pkMapinfoa = v11;
    if ( v12 != 1 )
      goto LABEL_44;
    if ( !MachineOpt::ms_kGraphicOption.bCharAuraEffectEnable )
      goto LABEL_30;
    if ( MachineOpt::ms_kGraphicOption.bCharAuraEffectEnable )
    {
      v13 = CharMgr::GetChar(&g_kCharMgr, v4->m_kTargetCharHandle);
      v14 = v13;
      if ( !v13 )
        return;
      if ( v13 == g_pkMainChar )
      {
        if ( !Char::IsEnableSpectral(v13)
          && !(unsigned __int8)((int (__thiscall *)(Char *))v14->baseclass_0.vfptr[20].SetAbStateProperty)(v14)
          && (!v11 || v11->KingdomMap != 2) )
        {
          v15 = v14->m_pkMover;
          if ( !v15 )
            return;
          goto LABEL_32;
        }
LABEL_30:
        ((void (__thiscall *)(AttachEff *, _DWORD, int, unsigned int))v4->baseclass_0.baseclass_0.vfptr[21].__vecDelDtor)(
          v4,
          0,
          v31,
          v32);
        return;
      }
      v16 = -1;
      if ( v13 != (Char *)-776 )
        v16 = v13->m_kCharShape.m_kEquip.Equ_CosEff;
      if ( !v13->baseclass_0.vfptr->IsVisible((AbStateInfectee *)v13) || v16 != -1 )
      {
        ((void (__thiscall *)(AttachEff *, _DWORD, int, unsigned int))v4->baseclass_0.baseclass_0.vfptr[21].__vecDelDtor)(
          v4,
          0,
          v31,
          v32);
        return;
      }
      if ( (unsigned __int8)((int (__thiscall *)(Char *))v14->baseclass_0.vfptr[20].SetAbStateProperty)(v14)
        || pkMapinfoa && pkMapinfoa->KingdomMap == 2 )
        goto LABEL_30;
      v15 = v14->m_pkMover;
      if ( v15 )
      {
LABEL_32:
        if ( g_pkMainChar->m_kCharShape.m_kEquip.Equ_CosEff == -1 )
        {
          v17 = v4->baseclass_0.baseclass_0.vfptr;
          v18 = Mover::IsSlotView(v15, v14->m_uiMoverSlot, 1);
          v17[21].__vecDelDtor((NiRefObject *)v4, v18);
        }
        return;
      }
    }
    else
    {
LABEL_44:
      if ( v12 )
        return;
    }
    v19 = v4->baseclass_0.baseclass_0.vfptr;
    v20 = AttachEff::LengthOfView(v4);
    ((void (__thiscall *)(AttachEff *, _DWORD, int, unsigned int))v19[21].__vecDelDtor)(v4, v20, v31, v32);
    return;
  }
  v21 = CharMgr::GetChar(&g_kCharMgr, v4->m_kTargetCharHandle);
  if ( v21 )
  {
    if ( v4->m_bSkillEffect )
    {
      v22 = (int)v4->baseclass_0.baseclass_0.vfptr[12].__vecDelDtor((NiRefObject *)v4, v32);
      LODWORD(v23) = *(_DWORD *)(v22 + 4);
      LODWORD(v24) = *(_DWORD *)v22;
      LODWORD(v25) = *(_DWORD *)(v22 + 8);
      kDir.y = v23;
      v26 = v21->baseclass_0.vfptr;
      kDir.x = v24;
      kDir.z = v25;
      v27 = ((int (__thiscall *)(Char *))v26[6].Deaffect)(v21);
      LODWORD(kPos.x) = *(_DWORD *)v27;
      LODWORD(kPos.y) = *(_DWORD *)(v27 + 4);
      LODWORD(kPos.z) = *(_DWORD *)(v27 + 8);
      v28 = v4->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
      kPos.z = kPos.z + 35.0;
      *(float *)&result.n3_name[0] = kDir.x * 30.0;
      *(float *)&result.n3_name[4] = kDir.y * 30.0;
      *(float *)&result.n3_name[8] = 30.0 * kDir.z;
      kPos.x = *(float *)&result.n3_name[0] + COERCE_FLOAT(&kPos);
      kPos.y = kPos.y + *(float *)&result.n3_name[4];
      kPos.z = *(float *)&result.n3_name[8] + kPos.z;
      v28(&v4->baseclass_0.baseclass_0, (unsigned int)kPos.x);
    }
    else
    {
      v29 = ((int (__thiscall *)(Char *, unsigned int))v21->baseclass_0.vfptr[6].Deaffect)(v21, v32);
      LODWORD(kPos.x) = *(_DWORD *)v29;
      LODWORD(kPos.y) = *(_DWORD *)(v29 + 4);
      v30 = v4->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
      LODWORD(kPos.z) = *(_DWORD *)(v29 + 8);
      v30(&v4->baseclass_0.baseclass_0, (unsigned int)&kPos);
    }
  }
}

//----- (00690A50) --------------------------------------------------------
void __thiscall IEffectHolder::OnAttachEffectEnd(IEffectHolder *this, AttachEff *pkEffect)
{
  AttachEff *v2; // esi@1
  NiTListItem<AttachEff *> *v3; // eax@2
  int v4; // edx@3

  v2 = pkEffect;
  if ( pkEffect )
  {
    v3 = this->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead;
    if ( v3 )
    {
      while ( 1 )
      {
        v4 = (int)&v3->m_element;
        pkEffect = (AttachEff *)v3;
        v3 = v3->m_pkNext;
        if ( *(AttachEff **)v4 == v2 )
          break;
        if ( !v3 )
          return;
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kAttachEffectList,
        (void **)&pkEffect);
    }
  }
}

//----- (00690A90) --------------------------------------------------------
void __thiscall IEffectHolder::AddAttachEffect(IEffectHolder *this, AttachEff *pkEffect)
{
  IEffectHolder *v2; // edi@1
  NiTListItem<AttachEff *> *v3; // eax@1
  NiTListItem<AttachEff *> *v4; // edx@1

  v2 = this;
  v3 = this->m_kAttachEffectList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<AttachEff *>,AttachEff *> *)&this->m_kAttachEffectList);
  v3->m_element = pkEffect;
  v3->m_pkNext = 0;
  v3->m_pkPrev = v2->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkTail;
  v4 = v2->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkTail;
  if ( v4 )
    v4->m_pkNext = v3;
  else
    v2->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead = v3;
  ++*(_DWORD *)&v2->m_kAttachEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
  v2->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkTail = v3;
  if ( pkEffect )
    ((void (__stdcall *)(_DWORD))pkEffect->baseclass_0.baseclass_0.vfptr[21].__vecDelDtor)(v2->m_bShow);
}

//----- (00690AE0) --------------------------------------------------------
void __thiscall AttachEff::_AttachEff(AttachEff *this)
{
  AttachEff *v1; // esi@1
  IEffectHolder *v2; // edx@1
  void *v3; // eax@2
  int v4; // ecx@3
  NiNode *v5; // edi@8
  void *kPos; // [sp+4h] [bp-10h]@3
  int v7; // [sp+10h] [bp-4h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&AttachEff::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)AttachEff::_vftable_;
  v2 = this->m_pkEffectHolder;
  v7 = 1;
  if ( v2 )
  {
    v3 = v2->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead;
    if ( v3 )
    {
      while ( 1 )
      {
        v4 = (int)((char *)v3 + 8);
        kPos = v3;
        v3 = *(void **)v3;
        if ( *(AttachEff **)v4 == v1 )
          break;
        if ( !v3 )
          goto LABEL_7;
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v2->m_kAttachEffectList,
        &kPos);
    }
LABEL_7:
    v1->m_pkEffectHolder = 0;
  }
  v1->m_kTargetCharHandle = -1;
  v1->m_bAura = 0;
  v5 = v1->m_spkTargetNode.m_pObject;
  LOBYTE(v7) = 0;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v7 = -1;
  Effect::_Effect(&v1->baseclass_0);
}
// 9C6EF8: using guessed type int (__stdcall *AttachEff___vftable_[3])(int);
// 9C6F0C: using guessed type int (__thiscall *AttachEff___vftable_)(void *p, char);

//----- (00690BC0) --------------------------------------------------------
void __thiscall AttachEff::OnEnd(AttachEff *this, float fTime)
{
  AttachEff *v2; // esi@1
  IEffectHolder *v3; // edx@1
  void *v4; // eax@2
  int v5; // ecx@3
  void *kPos; // [sp+4h] [bp-4h]@3

  v2 = this;
  v3 = this->m_pkEffectHolder;
  if ( v3 )
  {
    v4 = v3->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead;
    if ( v4 )
    {
      while ( 1 )
      {
        v5 = (int)((char *)v4 + 8);
        kPos = v4;
        v4 = *(void **)v4;
        if ( *(AttachEff **)v5 == v2 )
          break;
        if ( !v4 )
        {
          v2->m_pkEffectHolder = 0;
          return;
        }
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kAttachEffectList,
        &kPos);
    }
    v2->m_pkEffectHolder = 0;
  }
}

//----- (00690C20) --------------------------------------------------------
void __thiscall IEffectHolder::_IEffectHolder(IEffectHolder *this)
{
  IEffectHolder *v1; // edi@1
  NiTListItem<AttachEff *> *v2; // esi@1
  Effect *v3; // eax@2
  int v4; // edi@3
  int v5; // esi@3
  int v6; // ST00_4@4

  v1 = this;
  this->vfptr = (IEffectHolderVtbl *)&IEffectHolder::_vftable_;
  v2 = this->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = (Effect *)v2->m_element;
    v2 = v2->m_pkNext;
    EffectMgr::RemoveEffect(&g_kEffectMgr, v3);
  }
  v4 = (int)&v1->m_kAttachEffectList;
  *(_DWORD *)v4 = &NiTPointerListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
  v5 = *(_DWORD *)(v4 + 4);
  while ( v5 )
  {
    v6 = v5;
    v5 = *(_DWORD *)v5;
    (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 8))(v4, v6);
  }
  *(_DWORD *)(v4 + 12) = 0;
  *(_DWORD *)(v4 + 4) = 0;
  *(_DWORD *)(v4 + 8) = 0;
  *(_DWORD *)v4 = &NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
}
// 9C6EE8: using guessed type int (__thiscall *NiTListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);
// 9C6F74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);
// 9C6F94: using guessed type int (__thiscall *IEffectHolder___vftable_)(void *p, char);

//----- (00690CD0) --------------------------------------------------------
void __thiscall IEffectHolder::IEffectHolder(IEffectHolder *this)
{
  this->vfptr = (IEffectHolderVtbl *)&IEffectHolder::_vftable_;
  *(_DWORD *)&this->m_kAttachEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kAttachEffectList.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kAttachEffectList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)&NiTList<AttachEff__>::_vftable_;
  this->m_bShow = 1;
}
// 9C6F84: using guessed type int (__thiscall *NiTList_AttachEff _____vftable_)(void *p, char);
// 9C6F94: using guessed type int (__thiscall *IEffectHolder___vftable_)(void *p, char);

//----- (00690CF0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<AttachEff__>_AttachEff__>::_NiTListBase<DFALL<AttachEff__>_AttachEff__>(NiTListBase<DFALL<AttachEff *>,AttachEff *> *this)
{
  this->vfptr = (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)&NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
}
// 9C6EE8: using guessed type int (__thiscall *NiTListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);

//----- (00690D00) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vector_deleting_destructor_(NiTListBase<DFALL<AttachEff *>,AttachEff *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)&NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C6EE8: using guessed type int (__thiscall *NiTListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);

//----- (00690D30) --------------------------------------------------------
void *__thiscall AttachEff::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return AttachEff::_scalar_deleting_destructor_((AttachEff *)((char *)this - 8), a2);
}

//----- (00690D40) --------------------------------------------------------
NiRTTI *__thiscall AttachEff::GetRTTI(AttachEff *this)
{
  return &AttachEff::m_RTTI;
}

//----- (00690D50) --------------------------------------------------------
bool __thiscall AttachEff::IsEnd(AttachEff *this, float fTime)
{
  float fPastTime; // [sp+8h] [bp+8h]@3

  if ( this->baseclass_0.m_bStopFlag )
    return 1;
  if ( !this->baseclass_0.m_bLoop )
  {
    fPastTime = fTime - this->baseclass_0.m_fStartTime;
    if ( this->baseclass_0.m_fLifeTime <= 0.0 )
    {
      if ( this->baseclass_0.m_kCtrl.m_fMaxTime < (double)fPastTime )
        return 1;
    }
    else
    {
      if ( fPastTime > (double)this->baseclass_0.m_fLifeTime )
        return 1;
    }
  }
  return 0;
}

//----- (00690DB0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<AttachEff__>_AttachEff__>::_vector_deleting_destructor_(NiTList<AttachEff *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<AttachEff *> *v3; // esi@1
  NiTListItem<AttachEff *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)&NiTPointerListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6EE8: using guessed type int (__thiscall *NiTListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);
// 9C6F74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);

//----- (00690E40) --------------------------------------------------------
void __thiscall NiTList<AttachEff__>::_NiTList<AttachEff__>(NiTList<AttachEff *> *this)
{
  NiTList<AttachEff *> *v1; // edi@1
  NiTListItem<AttachEff *> *v2; // esi@1
  NiTListItem<AttachEff *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)&NiTPointerListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<AttachEff *>,AttachEff *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<AttachEff *>,AttachEff *>Vtbl *)&NiTListBase<DFALL<AttachEff__>_AttachEff__>::_vftable_;
}
// 9C6EE8: using guessed type int (__thiscall *NiTListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);
// 9C6F74: using guessed type int (__thiscall *NiTPointerListBase_DFALL_AttachEff ___AttachEff _____vftable_)(void *p, char);

//----- (00690EC0) --------------------------------------------------------
void *__thiscall IEffectHolder::_vector_deleting_destructor_(IEffectHolder *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  IEffectHolder::_IEffectHolder(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00690EF0) --------------------------------------------------------
void *__thiscall AttachEff::_scalar_deleting_destructor_(AttachEff *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AttachEff::_AttachEff(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00690F20) --------------------------------------------------------
int __thiscall Effect::GetKeyStrToInt(Effect *this, char *KeywordStr)
{
  int result; // eax@2

  if ( KeywordStr && strlen(KeywordStr) == 7 )
    result = atoi(KeywordStr + 2);
  else
    result = 0;
  return result;
}

//----- (00690F60) --------------------------------------------------------
void __thiscall Effect::SetAniStart(Effect *this, bool b)
{
  this->m_bAniStart = b;
}

//----- (00690F70) --------------------------------------------------------
bool __thiscall Effect::GetAniStart(Effect *this)
{
  return this->m_bAniStart;
}

//----- (00690F80) --------------------------------------------------------
void __thiscall Effect::SetActiveSkillID(Effect *this, unsigned __int16 kID)
{
  this->m_kActiveSKillID = kID;
}

//----- (00690FA0) --------------------------------------------------------
unsigned __int16 __thiscall Effect::GetActiveSkillID(Effect *this)
{
  return this->m_kActiveSKillID;
}

//----- (00690FB0) --------------------------------------------------------
int __thiscall Effect::GetShaderEffect(Effect *this)
{
  return this->m_ShaderEffectType;
}

//----- (00690FC0) --------------------------------------------------------
unsigned __int16 __thiscall Effect::FindShnIndex(Effect *this, NiTextKey *pkKey, unsigned int KeyNum, float fEffectTime)
{
  unsigned int v4; // ebx@1
  unsigned int v5; // ecx@1
  double v6; // st7@2
  char *v7; // eax@3
  int v8; // esi@3
  char v9; // dl@4
  double v10; // st4@7
  unsigned __int16 result; // ax@11
  float TimeGap; // [sp+18h] [bp+Ch]@9

  v4 = KeyNum;
  v5 = 0;
  if ( KeyNum )
  {
    v6 = fEffectTime;
    while ( 1 )
    {
      v7 = pkKey[v5].m_pText;
      v8 = (int)(v7 + 1);
      do
        v9 = *v7++;
      while ( v9 );
      if ( &v7[-v8] == (char *)2 )
      {
        v10 = pkKey[v5].m_fTime >= v6 ? pkKey[v5].m_fTime - v6 : v6 - pkKey[v5].m_fTime;
        TimeGap = v10;
        if ( TimeGap >= 0.0 )
        {
          if ( TimeGap <= 0.00009999999747378752 )
            break;
        }
      }
      ++v5;
      if ( v5 >= v4 )
        goto LABEL_13;
    }
    result = atoi(pkKey[v5].m_pText);
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}

//----- (00691060) --------------------------------------------------------
unsigned __int16 __thiscall Effect::GetCasterHandle(Effect *this)
{
  Char *v1; // eax@1
  unsigned __int16 result; // ax@2

  v1 = this->m_pkCaster;
  if ( v1 )
    result = v1->m_kHandle;
  else
    result = -1;
  return result;
}

//----- (00691080) --------------------------------------------------------
NiAVObject *__thiscall Effect::GetNodeByName(Effect *this, char *nodeName)
{
  Effect *v2; // esi@1
  NiAVObject *result; // eax@2

  v2 = this;
  if ( nodeName )
  {
    result = (NiAVObject *)((int (__stdcall *)(_DWORD))this->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(nodeName);
    if ( !result )
    {
      result = (NiAVObject *)((int (__stdcall *)(_DWORD))v2->m_spDefaultEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(nodeName);
      if ( !result )
        result = (NiAVObject *)((int (__stdcall *)(_DWORD))v2->m_spDecalEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(nodeName);
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006910D0) --------------------------------------------------------
void __thiscall Effect::UpdateLoop(Effect *this, float fTime)
{
  Effect *v2; // esi@1
  double v3; // st7@3
  char *v4; // edi@7
  NiPoint3 *v5; // eax@9
  char *v6; // edi@12
  NiPoint3 *v7; // eax@14

  v2 = this;
  if ( this->m_bLoop )
  {
    if ( this->m_kLoopSoundFileName.baseclass_0._Mysize )
    {
      v3 = fTime;
      if ( this->m_fLoopKeepTime >= fTime - this->m_fLoopStartTime )
      {
        if ( this->m_fLoopWaitTime <= 0.0 )
        {
          if ( this->m_kCtrl.m_fMaxTime < v3 - this->m_fLoopLastTime )
          {
            ((void (__stdcall *)(_DWORD))this->baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(fTime));
            if ( v2->m_kLoopSoundFileName.baseclass_0._Myres < 0x10 )
              v6 = (char *)&v2->m_kLoopSoundFileName;
            else
              v6 = *(char **)&v2->m_kLoopSoundFileName.baseclass_0.___u0.baseclass_0.dummy[0];
            v7 = (NiPoint3 *)((int (__thiscall *)(Effect *))v2->baseclass_0.vfptr[8].__vecDelDtor)(v2);
            SoundMgr::CreateSound(&g_kSoundMgr, v6, v7);
            v2->m_fLoopLastTime = fTime;
          }
        }
        else
        {
          if ( this->m_fLoopWaitTime < v3 - this->m_fLoopLastTime )
          {
            if ( this->m_kLoopSoundFileName.baseclass_0._Myres < 0x10 )
              v4 = (char *)&this->m_kLoopSoundFileName;
            else
              v4 = *(char **)&this->m_kLoopSoundFileName.baseclass_0.___u0.baseclass_0.dummy[0];
            v5 = (NiPoint3 *)((int (*)(void))this->baseclass_0.vfptr[8].__vecDelDtor)();
            SoundMgr::CreateSound(&g_kSoundMgr, v4, v5);
            v2->m_fLoopWaitTime = 0.0;
            v2->m_fLoopLastTime = fTime;
          }
        }
      }
    }
  }
}

//----- (006911F0) --------------------------------------------------------
void __thiscall Effect::SetShaderEffect(Effect *this, char *NodeName, int EffType)
{
  this->m_ShaderEffectType = EffType;
}

//----- (00691200) --------------------------------------------------------
bool __thiscall Effect::CreateProgramEff(Effect *this)
{
  Effect *v1; // ebx@1
  NiNode *j; // eax@2
  AfterImgEff *v3; // eax@3
  AfterImgEff *v4; // esi@3
  NiPointer<NiDX92DBufferData> element; // [sp+0h] [bp-3Ch]@4
  int i; // [sp+4h] [bp-38h]@2
  char acName[33]; // [sp+8h] [bp-34h]@2
  unsigned int v9; // [sp+2Ch] [bp-10h]@1
  int v10; // [sp+38h] [bp-4h]@4
  int v11; // [sp+3Ch] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  v1 = this;
  if ( this->m_spNode.m_pObject )
  {
    i = 0;
    sprintf(acName, "AfterImg%03d");
    for ( j = (NiNode *)((int (__stdcall *)(_DWORD))v1->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(acName);
          j;
          j = (NiNode *)((int (__stdcall *)(_DWORD))v1->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(acName) )
    {
      v3 = AfterImgEff::CreateBySourceNode(j);
      v4 = v3;
      if ( v3 )
      {
        element.m_pObject = (NiDX92DBufferData *)v3;
        InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount);
        v10 = 0;
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v1->m_kChildList,
          &element);
        v10 = -1;
        if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) )
          v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
      ++i;
      sprintf(acName, "AfterImg%03d");
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00691300) --------------------------------------------------------
void __thiscall Effect::UpdateOsc(Effect *this, float fTime)
{
  Effect *v2; // ebx@1
  int v3; // eax@1
  int v4; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v5; // eax@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v6; // esi@2
  int v7; // eax@4
  int v8; // eax@15
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > j; // eax@16
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // eax@19
  int v11; // ecx@25
  int l; // eax@26
  int k; // eax@29
  EffectViewInfo *v14; // [sp-8h] [bp-14h]@8
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+8h] [bp-4h]@13

  v2 = this;
  v3 = *((_DWORD *)&this->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  v4 = *(_DWORD *)v3;
  if ( *(_DWORD *)v3 != v3 )
  {
    do
    {
      v5 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > **)(*(_DWORD *)(v4 + 16) + 4);
      v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v5->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > **)&v5->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v5 )
      {
        do
        {
          if ( *(float *)(*(_DWORD *)&v6 + 12) > fTime - v2->m_fStartTime )
          {
            if ( !*(_BYTE *)(*(_DWORD *)&v6 + 21) )
            {
              v8 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
              if ( *(_BYTE *)(v8 + 21) )
              {
                for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v6 + 4);
                      !*(_BYTE *)(*(_DWORD *)&i + 21);
                      i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&i + 4) )
                {
                  if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
                    break;
                  v6 = i;
                }
                v6 = i;
              }
              else
              {
                v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v6 + 8);
                for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v8;
                      !*(_BYTE *)(*(_DWORD *)&j + 21);
                      j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&j )
                  v6 = j;
              }
            }
          }
          else
          {
            v7 = *(_DWORD *)(v4 + 12);
            switch ( v7 )
            {
              case 0:
              case 4:
                if ( v2->m_pkCaster->m_kHandle == g_pkMainChar->m_kHandle )
                {
                  if ( !v7 )
                    goto LABEL_11;
                  if ( !Oscillation::IsImpacting(&stru_B30B98) )
                  {
                    v14 = *(EffectViewInfo **)(*(_DWORD *)&v6 + 16);
                    goto LABEL_12;
                  }
                }
                break;
              case 7:
                v14 = *(EffectViewInfo **)(*(_DWORD *)&v6 + 16);
                goto LABEL_12;
              case 3:
                if ( !Oscillation::IsImpacting(&stru_B30B98) )
                {
LABEL_11:
                  v14 = *(EffectViewInfo **)(*(_DWORD *)&v6 + 16);
LABEL_12:
                  World::ImpactCamera(&g_kWorld, v14);
                }
                break;
              default:
                break;
            }
            v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(*(std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > **)(v4 + 16), &result, v6)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          }
        }
        while ( v6 != *(_DWORD *)(*(_DWORD *)(v4 + 16) + 4) );
      }
      if ( !*(_BYTE *)(v4 + 21) )
      {
        v11 = *(_DWORD *)(v4 + 8);
        if ( *(_BYTE *)(v11 + 21) )
        {
          for ( k = *(_DWORD *)(v4 + 4); !*(_BYTE *)(k + 21); k = *(_DWORD *)(k + 4) )
          {
            if ( v4 != *(_DWORD *)(k + 8) )
              break;
            v4 = k;
          }
          v4 = k;
        }
        else
        {
          for ( l = *(_DWORD *)v11; !*(_BYTE *)(l + 21); l = *(_DWORD *)l )
            v11 = l;
          v4 = v11;
        }
      }
    }
    while ( v4 != *((_DWORD *)&v2->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) );
  }
}

//----- (00691480) --------------------------------------------------------
void __thiscall Effect::UpdateAE(Effect *this, float fTime)
{
  Effect *v2; // edi@1
  std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *v3; // eax@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v4; // esi@2
  NiPoint3 *v5; // eax@4
  int v6; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // eax@10
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-4h]@4

  v2 = this;
  if ( this->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    v3 = this->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v3->_Left;
    if ( v3->_Left != v3 )
    {
      do
      {
        if ( *(float *)(*(_DWORD *)&v4 + 12) > fTime - v2->m_fStartTime )
        {
          if ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
          {
            v6 = *(_DWORD *)(*(_DWORD *)&v4 + 8);
            if ( *(_BYTE *)(v6 + 21) )
            {
              for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v4 + 4);
                    !*(_BYTE *)(*(_DWORD *)&i + 21);
                    i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&i + 4) )
              {
                if ( v4 != *(_DWORD *)(*(_DWORD *)&i + 8) )
                  break;
                v4 = i;
              }
              v4 = i;
            }
            else
            {
              v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v4 + 8);
              for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v6;
                    !*(_BYTE *)(*(_DWORD *)&j + 21);
                    j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&j )
                v4 = j;
            }
          }
        }
        else
        {
          v5 = (NiPoint3 *)((int (__thiscall *)(Effect *))v2->baseclass_0.vfptr[9].__vecDelDtor)(v2);
          SoundMgr::CreateSound(&g_kSoundMgr, *(ActionEffectInfo **)(*(_DWORD *)&v4 + 16), v5);
          v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase((std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v2->m_mapAEEffInfo, &result, v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        }
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v4 != v2->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
  }
}

//----- (00691540) --------------------------------------------------------
void __thiscall Effect::ClearAE(Effect *this)
{
  Effect *v1; // esi@1
  std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *v2; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
      v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase((std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->m_mapAEEffInfo, &result, v3)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v3 != v1->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
}

//----- (00691580) --------------------------------------------------------
void __thiscall Effect::Update(Effect *this, float fTime)
{
  Effect *v2; // edi@1
  Char *v3; // ecx@1
  NiPoint3 *v4; // eax@8
  NiTListItem<NiPointer<Effect> > *v5; // esi@9
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@10

  v2 = this;
  v3 = this->m_pkCaster;
  v2->m_fLastUpdateTime = fTime;
  if ( v3 )
  {
    if ( v2->m_uiActCasterAniCode && Char::GetAniCode(v3, 0, 0, 0) != v2->m_uiActCasterAniCode )
    {
      ((void (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[16].__vecDelDtor)(v2);
      v2->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v2, 0);
      return;
    }
    if ( MachineOpt::ms_kGraphicOption.bScreenShakeEnable == 1 )
      Effect::UpdateOsc(v2, fTime);
  }
  Effect::UpdateAE(v2, fTime);
  if ( v2->m_bDecalEffect )
  {
    v4 = (NiPoint3 *)((int (__thiscall *)(_DWORD))v2->baseclass_0.vfptr[8].__vecDelDtor)(v2);
    NsDecal::Update(&v2->m_kDecalEffect.m_kDecalMaker, 0.0, v2->m_kDecalEffect.m_spDecalNode.m_pObject, v4);
  }
  v5 = v2->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5->m_element.m_pObject->baseclass_0.vfptr[14].__vecDelDtor;
    v5 = v5->m_pkNext;
    ((void (__stdcall *)(_DWORD))v6)(LODWORD(fTime));
  }
  Effect::UpdateLoop(v2, fTime);
}

//----- (00691660) --------------------------------------------------------
void __thiscall Effect::ClearOscTimeMmap(Effect *this)
{
  Effect *v1; // edi@1
  int v2; // eax@1
  int v3; // esi@1
  int v4; // eax@3
  int j; // eax@4
  int i; // eax@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = *((_DWORD *)&this->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  v3 = *(_DWORD *)v2;
  if ( *(_DWORD *)v2 != v2 )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
        *(std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > **)(v3 + 16),
        &result,
        **(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > **)(*(_DWORD *)(v3 + 16) + 4),
        *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)(v3 + 16) + 4));
      if ( !*(_BYTE *)(v3 + 21) )
      {
        v4 = *(_DWORD *)(v3 + 8);
        if ( *(_BYTE *)(v4 + 21) )
        {
          for ( i = *(_DWORD *)(v3 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
          {
            if ( v3 != *(_DWORD *)(i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(_DWORD *)(v3 + 8);
          for ( j = *(_DWORD *)v4; !*(_BYTE *)(j + 21); j = *(_DWORD *)j )
            v3 = j;
        }
      }
    }
    while ( v3 != *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) );
  }
}

//----- (006916E0) --------------------------------------------------------
void __thiscall Effect::CatchAE(Effect *this)
{
  int v1; // eax@1
  void *v2; // ebx@1
  int v3; // edi@2
  int v4; // esi@3
  int v5; // eax@5
  int v6; // esi@5
  int v7; // edi@6
  int v8; // ebx@6
  const char *v9; // edx@7
  const char *v10; // eax@8
  char v11; // cl@9
  int v12; // eax@11
  const char *v13; // edx@12
  const char *v14; // eax@13
  char v15; // cl@14
  ActionEffectInfo *v16; // eax@18
  Effect *v17; // esi@19
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *v18; // eax@19
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> result; // [sp+4h] [bp-1Ch]@19
  std::pair<float,EffectViewInfo *> _Val; // [sp+Ch] [bp-14h]@19
  int pkNodeChild; // [sp+14h] [bp-Ch]@1
  int Count; // [sp+18h] [bp-8h]@3
  Effect *v23; // [sp+1Ch] [bp-4h]@1

  v23 = this;
  v1 = ((int (__stdcall *)(_DWORD))this->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("AEEffNode");
  v2 = (void *)v1;
  pkNodeChild = v1;
  if ( v1 )
  {
    v3 = *(_DWORD *)(v1 + 20);
    while ( v3 )
    {
      v4 = *(_DWORD *)(*((_DWORD *)v2 + 4) + 4 * v3-- - 4);
      Count = v3;
      if ( v4 )
      {
        if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == (_DWORD)&NiTextKeyExtraData::m_RTTI )
        {
          v5 = *(_DWORD *)(v4 + 12);
          v6 = *(_DWORD *)(v4 + 16);
          if ( v5 )
          {
            v7 = v6 + 4;
            v8 = v5;
            do
            {
              v9 = *(const char **)v7;
              if ( *(_DWORD *)v7 )
              {
                v10 = *(const char **)v7;
                do
                  v11 = *v10++;
                while ( v11 );
                if ( v10 - (v9 + 1) == 7 )
                {
                  v12 = strncmp("AE", v9, 2u);
                  if ( !v12 )
                  {
                    v13 = *(const char **)v7;
                    if ( *(_DWORD *)v7 )
                    {
                      v14 = *(const char **)v7;
                      do
                        v15 = *v14++;
                      while ( v15 );
                      if ( v14 - (v13 + 1) == 7 )
                        LOWORD(v12) = atoi(v13 + 2);
                      else
                        LOWORD(v12) = 0;
                    }
                    v16 = ActionEffectInfoTab::GetByID(v12);
                    if ( v16 )
                    {
                      v17 = v23;
                      _Val.baseclass_0.first = *(float *)(v7 - 4);
                      _Val.baseclass_0.second = (EffectViewInfo *)v16;
                      v18 = std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(
                              (std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *)&v23->m_mapAEEffInfo,
                              &_Val);
                      std::_Tree<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Linsert(
                        (std::_Tree<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *)&v17->m_mapAEEffInfo,
                        &result,
                        v18,
                        0);
                    }
                  }
                }
              }
              v7 += 8;
              --v8;
            }
            while ( v8 );
            v3 = Count;
            v2 = (void *)pkNodeChild;
          }
        }
      }
    }
  }
}

//----- (00691810) --------------------------------------------------------
void __thiscall Effect::SetLoopInfo(Effect *this, const char *pcLoopSoundFileName, float fLoopKeepTime, float fLoopWaitTime, float fTime)
{
  this->m_fLoopKeepTime = fLoopKeepTime;
  this->m_fLoopWaitTime = fLoopWaitTime;
  this->m_bLoop = 1;
  this->m_fLoopLastTime = fTime;
  this->m_fLoopStartTime = fTime;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_kLoopSoundFileName,
    pcLoopSoundFileName,
    strlen(pcLoopSoundFileName));
}

//----- (00691870) --------------------------------------------------------
void __thiscall Effect::_Effect(Effect *this)
{
  Effect *v1; // esi@1
  char *v2; // eax@1
  NiNode *v3; // edi@1
  NiNode *v4; // edi@6
  NiNode *v5; // edi@11
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v6; // ecx@16
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v7; // eax@16
  std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *v8; // ecx@18
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v9; // eax@18
  CPostProcessEffectManager *v10; // eax@21
  NiShader *v11; // eax@21
  NiShader *v12; // edi@21
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v13; // ecx@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v14; // ecx@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v15; // ecx@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v16; // ecx@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v17; // ecx@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v18; // ecx@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v19; // ecx@26
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v20; // ecx@26
  int v21; // edi@26
  NiTListItem<NiPointer<Effect> > *v22; // ebx@26
  void (__thiscall *v23)(_DWORD, _DWORD); // eax@27
  NiNode *v24; // edi@28
  NiNode *v25; // edi@32
  NiNode *v26; // edi@36
  int v27; // [sp-18h] [bp-30h]@23
  unsigned int v28; // [sp-14h] [bp-2Ch]@21
  void *v29; // [sp+0h] [bp-18h]@26
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-14h]@17
  Effect *v31; // [sp+8h] [bp-10h]@1
  int v32; // [sp+14h] [bp-4h]@1

  v1 = this;
  v31 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&Effect::_vftable_;
  this->baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)Effect::_vftable_;
  v32 = 16;
  v2 = fs("========================%s Clear!!!\n");
  OutputDebugStringA(v2);
  v3 = v1->m_spNode.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spNode.m_pObject = 0;
  }
  v4 = v1->m_spDefaultEffect.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spDefaultEffect.m_pObject = 0;
  }
  v5 = v1->m_spDecalEffect.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spDecalEffect.m_pObject = 0;
  }
  Effect::ClearOscTimeMmap(v1);
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)*((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  v7 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v6->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > **)&v6->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v6 )
  {
    do
      v7 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase((std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->m_mapShakeInfo, &result, v7)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( v7 != *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) );
  }
  v8 = v1->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_uiEffectType = 0;
  *(_DWORD *)&v1->m_kAniTargetHandle = -1;
  v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v8->_Left;
  if ( v8->_Left != v8 )
  {
    do
      v9 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase((std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->m_mapAEEffInfo, &result, v9)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v9 != v1->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  if ( v1->m_ShaderEffectType == 1 )
  {
    v28 = 1;
    v1->m_ShaderEffectType = 8;
    v10 = CPostProcessEffectManager::GetInstance();
    v11 = (NiShader *)CPostProcessEffectManager::GetEffect(v10, v28);
    v12 = CPostProcessEffect::DynamicCast(&CHazeScreenEffect::m_RTTI, v11);
    v28 = (unsigned int)pkCamera;
    result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v28;
    if ( pkCamera )
      InterlockedIncrement((volatile LONG *)&pkCamera->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v27;
    CHazeScreenEffect::SetParentNode((CHazeScreenEffect *)v12, 0, (NiPointer<NiCamera>)v28);
    CPostProcessEffect::SetActive((CPostProcessEffect *)v12, 1);
  }
  Effect::DeleteEffectDestoryMessengerList((Effect *)((char *)v1 + 8));
  if ( v1->m_kLoopSoundFileName.baseclass_0._Myres >= 0x10 )
  {
    v28 = *(_DWORD *)&v1->m_kLoopSoundFileName.baseclass_0.___u0.baseclass_0.dummy[0];
    operator delete((void *)v28);
  }
  v1->m_kLoopSoundFileName.baseclass_0._Myres = 15;
  v1->m_kLoopSoundFileName.baseclass_0._Mysize = 0;
  v1->m_kLoopSoundFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v1->m_mapForceAllCamShake;
  v13 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v28 = (unsigned int)v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(v32) = 17;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceAllCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&v29,
    v13,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = (unsigned int)v1->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  operator delete((void *)v28);
  v29 = &v1->m_mapAllCamShake;
  v14 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v28 = (unsigned int)v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(v32) = 18;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapAllCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v14,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = (unsigned int)v1->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  operator delete((void *)v28);
  v29 = &v1->m_mapForceMyCamShake;
  v15 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v28 = (unsigned int)v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(v32) = 19;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapForceMyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v15,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = (unsigned int)v1->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  operator delete((void *)v28);
  v29 = &v1->m_mapMyCamShake;
  v16 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v28 = (unsigned int)v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(v32) = 20;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapMyCamShake,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v16,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = (unsigned int)v1->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  operator delete((void *)v28);
  v29 = &v1->m_mapShakeInfo;
  v17 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**((_DWORD **)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  v28 = *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  LOBYTE(v32) = 21;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapShakeInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v17,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = *((_DWORD *)&v1->m_mapShakeInfo.baseclass_0.baseclass_0 + 1);
  operator delete((void *)v28);
  v29 = &v1->m_mapRange;
  v18 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v28 = (unsigned int)v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(v32) = 22;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapRange,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v18,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = (unsigned int)v1->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead;
  operator delete((void *)v28);
  v29 = &v1->m_mapMelee;
  v19 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v28 = (unsigned int)v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(v32) = 23;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapMelee,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v19,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = (unsigned int)v1->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead;
  operator delete((void *)v28);
  v29 = &v1->m_mapAEEffInfo;
  v20 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v28 = (unsigned int)v1->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  LOBYTE(v32) = 24;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapAEEffInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v20,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v28);
  v28 = (unsigned int)v1->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  operator delete((void *)v28);
  LOBYTE(v32) = 6;
  CDecalEffect::_CDecalEffect(&v1->m_kDecalEffect);
  v21 = (int)&v1->m_kChildList;
  v29 = &v1->m_kChildList;
  v1->m_kChildList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&PgTList<NiPointer<Effect>>::_vftable_;
  v22 = v1->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  LOBYTE(v32) = 25;
  while ( v22 )
  {
    v23 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v21 + 8);
    v28 = (unsigned int)v22;
    v22 = v22->m_pkNext;
    v23(&v1->m_kChildList, v28);
  }
  *(_DWORD *)&v1->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v21 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
  v24 = v1->m_spDecalEffect.m_pObject;
  LOBYTE(v32) = 4;
  if ( v24
    && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v24 )
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
  v25 = v1->m_spDefaultEffect.m_pObject;
  LOBYTE(v32) = 3;
  if ( v25
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
  v26 = v1->m_spNode.m_pObject;
  LOBYTE(v32) = 2;
  if ( v26
    && !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v26 )
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
  LOBYTE(v32) = 1;
  EffectCtrl::_EffectCtrl(&v1->m_kCtrl);
  LOBYTE(v32) = 0;
  IEffectDestroyMessenger::_IEffectDestroyMessenger(&v1->baseclass_8);
  v28 = (unsigned int)&NiRefObject::ms_uiObjects;
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement((volatile LONG *)v28);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C6FF8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);
// 9C7020: using guessed type int (__thiscall *PgTList_NiPointer_Effect_____vftable_)(void *p, char);
// 9C7030: using guessed type int (__stdcall *Effect___vftable_[3])(int);
// 9C7044: using guessed type int (__thiscall *Effect___vftable_)(void *p, char);

//----- (00691C90) --------------------------------------------------------
void __thiscall Effect::Effect(Effect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster)
{
  Effect *v4; // esi@1
  void *v5; // eax@1
  void *v6; // eax@2
  void *v7; // eax@3
  void *v8; // eax@4
  void *v9; // eax@5
  void *v10; // eax@6
  void *v11; // eax@7
  void *v12; // eax@8
  std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *v13; // ecx@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v14; // eax@9
  void *v15; // eax@11
  int v16; // eax@12
  const char **v17; // eax@14
  int v18; // eax@19
  void *v19; // eax@21
  int v20; // eax@22
  const char **v21; // eax@24
  int v22; // eax@29
  void *v23; // eax@31
  int v24; // eax@32
  const char **v25; // eax@34
  int v26; // eax@39
  const char **v27; // eax@46
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v28; // eax@50
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v29; // eax@50
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v30; // eax@50
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v31; // eax@50
  int v32; // eax@50
  int v33; // edi@52
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v34; // eax@54
  void *v35; // ecx@54
  OscTarget v36; // ST38_4@58
  const char *v37; // ecx@58
  unsigned __int16 v38; // bx@61
  unsigned int v39; // edi@61
  void *v40; // eax@64
  int v41; // ecx@67
  char *v42; // [sp+30h] [bp-94h]@67
  std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *v43; // [sp+34h] [bp-90h]@67
  unsigned int v44; // [sp+38h] [bp-8Ch]@1
  bool v45; // [sp+38h] [bp-8Ch]@67
  char v46; // [sp+48h] [bp-7Ch]@68
  char v47; // [sp+50h] [bp-74h]@67
  Effect *v48; // [sp+58h] [bp-6Ch]@1
  int pkNodeChild; // [sp+5Ch] [bp-68h]@50
  float *pkKey; // [sp+60h] [bp-64h]@54
  int (__thiscall **pExceptionObject)(void *, char); // [sp+64h] [bp-60h]@81
  char v52; // [sp+68h] [bp-5Ch]@69
  std::exception thisa; // [sp+70h] [bp-54h]@70
  unsigned int KeyIndex; // [sp+7Ch] [bp-48h]@54
  std::pair<float,EffectViewInfo *> Add; // [sp+80h] [bp-44h]@50
  NiAVObject *Count; // [sp+88h] [bp-3Ch]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+8Ch] [bp-38h]@10
  int v58; // [sp+90h] [bp-34h]@12
  const char **v59; // [sp+94h] [bp-30h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NoteName; // [sp+98h] [bp-2Ch]@58
  unsigned int v61; // [sp+B4h] [bp-10h]@1
  int v62; // [sp+C0h] [bp-4h]@1
  int v63; // [sp+C4h] [bp+0h]@1

  v61 = (unsigned int)&v63 ^ __security_cookie;
  v44 = (unsigned int)&v63 ^ __security_cookie;
  v4 = this;
  v48 = this;
  Count = (NiAVObject *)pkNode;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v4->baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)&IEffectDestroyMessenger::_vftable_;
  v62 = 0;
  *(_DWORD *)&v4->baseclass_8.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4->baseclass_8.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_pkHead = 0;
  v4->baseclass_8.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.m_pkTail = 0;
  v4->baseclass_8.m_pkEffectDestoryMessengerList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IEffectDestroyMessenger *>,IEffectDestroyMessenger *>Vtbl *)&NiTList<IEffectDestroyMessenger__>::_vftable_;
  v4->baseclass_0.vfptr = (NiRefObjectVtbl *)&Effect::_vftable_;
  v4->baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)Effect::_vftable_;
  EffectCtrl::EffectCtrl(&v4->m_kCtrl);
  v4->m_spNode.m_pObject = 0;
  v4->m_spDefaultEffect.m_pObject = 0;
  v4->m_spDecalEffect.m_pObject = 0;
  *(_DWORD *)&v4->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v4->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v4->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v4->m_kChildList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&PgTList<NiPointer<Effect>>::_vftable_;
  CDecalEffect::CDecalEffect(&v4->m_kDecalEffect);
  LOBYTE(v62) = 7;
  v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x18u);
  if ( !v5 )
    goto LABEL_93;
  v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v62) = 8;
  v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v6 = operator new(0x18u);
  if ( !v6 )
  {
LABEL_79:
    result = 0;
    std::exception::exception(
      &thisa,
      (const char *const *)result.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v6;
  *(_DWORD *)v6 = v6;
  v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_mapMelee.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v62) = 9;
  v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v7 = operator new(0x18u);
  if ( !v7 )
  {
    KeyIndex = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&KeyIndex);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v7;
  *(_DWORD *)v7 = v7;
  v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_mapRange.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v62) = 10;
  *((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0 + 2) = 0;
  v8 = operator new(0x18u);
  if ( !v8 )
  {
    result = 0;
    std::exception::exception(
      &thisa,
      (const char *const *)result.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) = v8;
  *(_DWORD *)v8 = v8;
  *(_DWORD *)(*((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  *(_DWORD *)(*((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0
                                                                                  + 1);
  *(_BYTE *)(*((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 20) = 1;
  *(_BYTE *)(*((_DWORD *)&v4->m_mapShakeInfo.baseclass_0.baseclass_0 + 1) + 21) = 1;
  LOBYTE(v62) = 11;
  v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v9 = operator new(0x18u);
  if ( !v9 )
  {
    KeyIndex = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&KeyIndex);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v9;
  *(_DWORD *)v9 = v9;
  v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_mapMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v62) = 12;
  v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v10 = operator new(0x18u);
  if ( !v10 )
  {
    result = 0;
    std::exception::exception(
      &thisa,
      (const char *const *)result.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v10;
  *(_DWORD *)v10 = v10;
  v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_mapForceMyCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v62) = 13;
  v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v11 = operator new(0x18u);
  if ( !v11 )
  {
LABEL_93:
    KeyIndex = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&KeyIndex);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v11;
  *(_DWORD *)v11 = v11;
  v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_mapAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v62) = 14;
  v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v12 = operator new(0x18u);
  if ( !v12 )
    goto LABEL_79;
  v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> >::_Node *)v12;
  *(_DWORD *)v12 = v12;
  v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v4->m_mapForceAllCamShake.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v4->m_kLoopSoundFileName.baseclass_0._Myres = 15;
  v4->m_kLoopSoundFileName.baseclass_0._Mysize = 0;
  v4->m_kLoopSoundFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v13 = v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4->m_bDecalEffect = 0;
  v4->m_uiActCasterAniCode = 0;
  v14 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v13->_Left;
  LOBYTE(v62) = 16;
  if ( (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v14 != v13 )
  {
    do
      v14 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase((std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v4->m_mapAEEffInfo, &result, v14)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<float,ActionEffectInfo *,std::less<float>,std::allocator<std::pair<float const ,ActionEffectInfo *> >,1> >::_Node *)v14 != v4->m_mapAEEffInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v4->m_mapMyCamShake);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v4->m_mapForceMyCamShake);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v4->m_mapAllCamShake);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v4->m_mapForceAllCamShake);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v4->m_mapShakeInfo);
  v4->m_pkCaster = pkCaster;
  v15 = operator new(0xE8u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v15;
  LOBYTE(v62) = 17;
  if ( v15 )
  {
    NiNode::NiNode((NiNode *)v15, 0);
    v58 = v16;
  }
  else
  {
    v58 = 0;
  }
  v17 = (const char **)v4->m_spNode.m_pObject;
  LOBYTE(v62) = 16;
  v59 = v17;
  if ( v17 != (const char **)v58 )
  {
    if ( v17 && !InterlockedDecrement((volatile LONG *)v17 + 1) && v59 )
      (*(void (__stdcall **)(signed int))*v59)(1);
    v18 = v58;
    v4->m_spNode.m_pObject = (NiNode *)v58;
    if ( v18 )
      InterlockedIncrement((volatile LONG *)(v18 + 4));
  }
  v19 = operator new(0xE8u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v19;
  LOBYTE(v62) = 18;
  if ( v19 )
  {
    NiNode::NiNode((NiNode *)v19, 0);
    v58 = v20;
  }
  else
  {
    v58 = 0;
  }
  v21 = (const char **)v4->m_spDefaultEffect.m_pObject;
  LOBYTE(v62) = 16;
  v59 = v21;
  if ( v21 != (const char **)v58 )
  {
    if ( v21 && !InterlockedDecrement((volatile LONG *)v21 + 1) && v59 )
      (*(void (__stdcall **)(signed int))*v59)(1);
    v22 = v58;
    v4->m_spDefaultEffect.m_pObject = (NiNode *)v58;
    if ( v22 )
      InterlockedIncrement((volatile LONG *)(v22 + 4));
  }
  v23 = operator new(0xE8u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v23;
  LOBYTE(v62) = 19;
  if ( v23 )
  {
    NiNode::NiNode((NiNode *)v23, 0);
    v58 = v24;
  }
  else
  {
    v58 = 0;
  }
  v25 = (const char **)v4->m_spDecalEffect.m_pObject;
  LOBYTE(v62) = 16;
  v59 = v25;
  if ( v25 != (const char **)v58 )
  {
    if ( v25 && !InterlockedDecrement((volatile LONG *)v25 + 1) && v59 )
      (*(void (__stdcall **)(_DWORD))*v59)(1);
    v26 = v58;
    v4->m_spDecalEffect.m_pObject = (NiNode *)v58;
    if ( v26 )
      InterlockedIncrement((volatile LONG *)(v26 + 4));
  }
  ((void (__stdcall *)(NiNode *, _DWORD, unsigned int))v4->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v4->m_spDefaultEffect.m_pObject,
    0,
    v44);
  ((void (__stdcall *)(NiNode *, _DWORD))v4->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v4->m_spDecalEffect.m_pObject,
    0);
  CDecalEffect::Init(&v4->m_kDecalEffect, pkTerrain, spTerrain);
  NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v4->m_spDefaultEffect.m_pObject->m_kChildren);
  if ( Count )
    ((void (__stdcall *)(NiAVObject *, _DWORD))v4->m_spDefaultEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      Count,
      0);
  if ( v4->m_bDecalEffect )
  {
    Count = (NiAVObject *)v4->m_kDecalEffect.m_spDecalNode.m_pObject;
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v4->m_spDecalEffect.m_pObject->m_kChildren);
    if ( Count )
      ((void (__stdcall *)(NiAVObject *, _DWORD))v4->m_spDecalEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        Count,
        0);
  }
  v27 = (const char **)v4->m_spNode.m_pObject;
  Count = (NiAVObject *)v27;
  if ( v27 )
  {
    v59 = v27;
    EffectCtrl::SetEffectNode(&v4->m_kCtrl, Count);
  }
  v4->m_fLifeTime = 3.4028235e38;
  v4->m_bCreateProgramEff = bCreateProgramEff;
  v4->m_fLastUpdateTime = -1.0;
  if ( bCreateProgramEff )
    Effect::CreateProgramEff(v4);
  v4->m_bLoop = 0;
  v4->m_pkChainEffect = 0;
  v4->m_bStopFlag = 0;
  LODWORD(Add.baseclass_0.first) = 4;
  Add.baseclass_0.second = (EffectViewInfo *)&v4->m_mapMyCamShake;
  v28 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
          (std::pair<int const ,int> *)&Add);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&Add,
    v28,
    0);
  LODWORD(Add.baseclass_0.first) = 0;
  Add.baseclass_0.second = (EffectViewInfo *)&v4->m_mapForceMyCamShake;
  v29 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
          (std::pair<int const ,int> *)&Add);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&Add,
    v29,
    0);
  Add.baseclass_0.second = (EffectViewInfo *)&v4->m_mapAllCamShake;
  LODWORD(Add.baseclass_0.first) = 7;
  v30 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
          (std::pair<int const ,int> *)&Add);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&Add,
    v30,
    0);
  LODWORD(Add.baseclass_0.first) = 3;
  Add.baseclass_0.second = (EffectViewInfo *)&v4->m_mapForceAllCamShake;
  v31 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
          (std::pair<int const ,int> *)&Add);
  std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v4->m_mapShakeInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&Add,
    v31,
    0);
  v32 = ((int (__stdcall *)(_DWORD))v4->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("CamEffNode");
  pkNodeChild = v32;
  if ( v32 )
  {
    Count = *(NiAVObject **)(v32 + 20);
    while ( Count )
    {
      v33 = *(_DWORD *)(*(_DWORD *)(pkNodeChild + 16) + 4 * (_DWORD)Count - 4);
      Count = (NiAVObject *)((char *)Count - 1);
      if ( v33 )
      {
        if ( (*(int (__thiscall **)(int))(*(_DWORD *)v33 + 4))(v33) == (_DWORD)&NiTextKeyExtraData::m_RTTI )
        {
          v34 = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(v33 + 12);
          v35 = *(void **)(v33 + 16);
          KeyIndex = (unsigned int)v34;
          pkKey = (float *)v35;
          if ( v34 )
          {
            v59 = (const char **)((char *)v35 + 4);
            result = v34;
            do
            {
              if ( *v59 )
              {
                v58 = (int)&Effect::m_iUsedOscTargetList;
                do
                {
                  NoteName.baseclass_0._Myres = 15;
                  NoteName.baseclass_0._Mysize = 0;
                  NoteName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                    &NoteName,
                    &byte_9C6F9F,
                    0);
                  v36 = *(_DWORD *)v58;
                  LOBYTE(v62) = 20;
                  OscillationEx::GetOscillationStr(&NoteName, v36);
                  v37 = *(const char **)&NoteName;
                  if ( NoteName.baseclass_0._Myres < 0x10 )
                    v37 = (const char *)&NoteName;
                  if ( !strncmp(*v59, v37, NoteName.baseclass_0._Mysize) )
                  {
                    Add.baseclass_0.first = *pkKey;
                    v38 = Effect::FindShnIndex(v4, (NiTextKey *)pkKey, KeyIndex, Add.baseclass_0.first);
                    v39 = 0;
                    if ( ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::GetTotal() )
                    {
                      while ( *(_WORD *)CDataReader::GetRecord(
                                          (CDataReader *)(ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable
                                                        + 4),
                                          v39) != v38 )
                      {
                        ++v39;
                        if ( v39 >= ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::GetTotal() )
                          goto LABEL_64;
                      }
                      v40 = CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<EffectViewInfo_ShakeEffectViewInfoTab>::ms_pkTable + 4),
                              v39);
                    }
                    else
                    {
LABEL_64:
                      v40 = 0;
                    }
                    Add.baseclass_0.second = (EffectViewInfo *)v40;
                    switch ( *(_DWORD *)v58 )
                    {
                      case 4:
                        v45 = 0;
                        v43 = std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(
                                &v4->m_mapMyCamShake.baseclass_0.baseclass_0,
                                &Add);
                        v42 = &v47;
                        v41 = (int)&v4->m_mapMyCamShake;
                        goto LABEL_72;
                      case 0:
                        v45 = 0;
                        v43 = std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(
                                &v4->m_mapForceMyCamShake.baseclass_0.baseclass_0,
                                &Add);
                        v42 = &v46;
                        goto LABEL_71;
                      case 7:
                        v45 = 0;
                        v43 = std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(
                                &v4->m_mapAllCamShake.baseclass_0.baseclass_0,
                                &Add);
                        v42 = &v52;
                        v41 = (int)&v4->m_mapAllCamShake;
                        goto LABEL_72;
                      case 3:
                        v45 = 0;
                        v43 = std::_Tree_val<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Buynode<std::pair<float_ActionEffectInfo__>>(
                                &v4->m_mapForceMyCamShake.baseclass_0.baseclass_0,
                                &Add);
                        v42 = (char *)&thisa._Mywhat;
LABEL_71:
                        v41 = (int)&v4->m_mapForceMyCamShake;
LABEL_72:
                        std::_Tree<std::_Tmap_traits<float_ActionEffectInfo___std::less<float>_std::allocator<std::pair<float_const_ActionEffectInfo__>>_1>>::_Linsert(
                          (std::_Tree<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > *)v41,
                          (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> >,1> > >,bool> *)v42,
                          v43,
                          v45);
                        break;
                      default:
                        break;
                    }
                  }
                  LOBYTE(v62) = 16;
                  if ( NoteName.baseclass_0._Myres >= 0x10 )
                    operator delete(*(void **)&NoteName);
                  v58 += 4;
                }
                while ( v58 < (signed int)&unk_A813FC );
              }
              v59 += 2;
              --*(_DWORD *)&result;
            }
            while ( result );
          }
        }
      }
    }
  }
  Effect::CatchAE(v4);
  v4->m_fLoopKeepTime = 0.0;
  v4->m_fLoopWaitTime = 0.0;
  v4->m_bEnableAura = 0;
  v4->m_fLoopLastTime = 0.0;
  v4->m_uiEffectType = 0;
  v4->m_fLoopStartTime = 0.0;
  *(_DWORD *)&v4->m_kAniTargetHandle = -1;
  v4->m_fLength = 0.0;
  v4->m_bAniStart = 0;
  v4->m_bStretch = 0;
  v4->m_kActiveSKillID = -1;
  v4->m_ShaderEffectType = 8;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C0F3C: using guessed type int (__thiscall *IEffectDestroyMessenger___vftable_)(void *p, char);
// 9C0F50: using guessed type int (__thiscall *NiTList_IEffectDestroyMessenger _____vftable_)(void *p, char);
// 9C7020: using guessed type int (__thiscall *PgTList_NiPointer_Effect_____vftable_)(void *p, char);
// 9C7030: using guessed type int (__stdcall *Effect___vftable_[3])(int);
// 9C7044: using guessed type int (__thiscall *Effect___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A959EC: using guessed type int ITableBase_EffectViewInfo_ShakeEffectViewInfoTab___ms_pkTable;

//----- (006926E0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
}
// 9C6FF8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);

//----- (006926F0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C6FF8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);

//----- (00692720) --------------------------------------------------------
bool __cdecl NiObject::IsExactKindOf(NiRTTI *pkRTTI, NiObject *pkObject)
{
  bool result; // al@2

  if ( pkObject )
    result = ((int (*)(void))pkObject->baseclass_0.vfptr[1].__vecDelDtor)() == (_DWORD)pkRTTI;
  else
    result = 0;
  return result;
}

//----- (00692740) --------------------------------------------------------
void __thiscall CDecalEffect::Init(CDecalEffect *this, PgNsTerrain *pkTerrain, NiNode *pBuildingScene)
{
  CDecalEffect *v3; // edi@1
  void *v4; // eax@1
  int v5; // ebx@1
  int v6; // eax@2
  NiNode *v7; // esi@3
  NiNode *v8; // ST00_4@10

  v3 = this;
  v4 = operator new(0xE8u);
  v5 = 0;
  if ( v4 )
  {
    NiNode::NiNode((NiNode *)v4, 0);
    v5 = v6;
  }
  v7 = v3->m_spDecalNode.m_pObject;
  if ( v7 != (NiNode *)v5 )
  {
    if ( v7
      && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v3->m_spDecalNode.m_pObject = (NiNode *)v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)(v5 + 4));
  }
  v3->m_pkTerrain = pkTerrain;
  v3->m_pBuildingScene = pBuildingScene;
  NsDecal::Init(&v3->m_kDecalMaker);
  v8 = v3->m_pBuildingScene;
  v3->m_kDecalMaker.m_pkHpTerrain = v3->m_pkTerrain;
  NsDecal::SetObjectTerrain(&v3->m_kDecalMaker, v8);
}

//----- (00692820) --------------------------------------------------------
void __thiscall CDecalEffect::CDecalEffect(CDecalEffect *this)
{
  CDecalEffect *v1; // esi@1
  NiNode *v2; // edi@1

  v1 = this;
  this->vfptr = (CDecalEffectVtbl *)&CDecalEffect::_vftable_;
  NsEffect::NsEffect(&this->m_kEffect);
  NsDecal::NsDecal(&v1->m_kDecalMaker);
  v1->m_spDecalNode.m_pObject = 0;
  v2 = v1->m_spDecalNode.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
    v1->m_spDecalNode.m_pObject = 0;
  }
}
// 9C7018: using guessed type int (__thiscall *CDecalEffect___vftable_)(void *p, char);

//----- (006928C0) --------------------------------------------------------
void __thiscall CDecalEffect::_CDecalEffect(CDecalEffect *this)
{
  CDecalEffect *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6

  v1 = this;
  this->vfptr = (CDecalEffectVtbl *)&CDecalEffect::_vftable_;
  v2 = this->m_spDecalNode.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spDecalNode.m_pObject = 0;
  }
  v3 = v1->m_spDecalNode.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  NsDecal::_NsDecal(&v1->m_kDecalMaker);
  NsEffect::_NsEffect(&v1->m_kEffect);
}
// 9C7018: using guessed type int (__thiscall *CDecalEffect___vftable_)(void *p, char);

//----- (00692980) --------------------------------------------------------
void *__thiscall CDecalEffect::_vector_deleting_destructor_(CDecalEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CDecalEffect::_CDecalEffect(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006929B0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<Effect> > *v3; // esi@1
  NiTListItem<NiPointer<Effect> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6FF8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);
// 9C7008: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);

//----- (00692A40) --------------------------------------------------------
void __thiscall NiTPointerList<NiPointer<Effect>>::_NiTPointerList<NiPointer<Effect>>(NiTPointerList<NiPointer<Effect> > *this)
{
  NiTPointerList<NiPointer<Effect> > *v1; // edi@1
  NiTListItem<NiPointer<Effect> > *v2; // esi@1
  NiTListItem<NiPointer<Effect> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
}
// 9C6FF8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);
// 9C7008: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);

//----- (00692AC0) --------------------------------------------------------
NiShader *__cdecl CPostProcessEffect::DynamicCast(NiRTTI *pkRTTI, NiShader *pkObject)
{
  NiShader *result; // eax@2
  int v3; // eax@3

  if ( pkObject )
  {
    v3 = ((int (__thiscall *)(_DWORD))pkObject->baseclass_0.vfptr[1].__vecDelDtor)(pkObject);
    if ( v3 )
    {
      while ( (NiRTTI *)v3 != pkRTTI )
      {
        v3 = *(_DWORD *)(v3 + 4);
        if ( !v3 )
          goto LABEL_6;
      }
      result = pkObject;
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00692B10) --------------------------------------------------------
void __thiscall PgTList<NiPointer<Effect>>::_PgTList<NiPointer<Effect>>(PgTList<NiPointer<Effect> > *this)
{
  PgTList<NiPointer<Effect> > *v1; // edi@1
  NiTListItem<NiPointer<Effect> > *v2; // esi@1
  NiTListItem<NiPointer<Effect> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&PgTList<NiPointer<Effect>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
}
// 9C6FF8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);
// 9C7020: using guessed type int (__thiscall *PgTList_NiPointer_Effect_____vftable_)(void *p, char);

//----- (00692B90) --------------------------------------------------------
void *__thiscall PgTList<NiPointer<Effect>>::_vector_deleting_destructor_(PgTList<NiPointer<Effect> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<Effect> > *v3; // esi@1
  NiTListItem<NiPointer<Effect> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<Effect> >Vtbl *)&PgTList<NiPointer<Effect>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<Effect>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C6FF8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_Effect_____vftable_)(void *p, char);
// 9C7020: using guessed type int (__thiscall *PgTList_NiPointer_Effect_____vftable_)(void *p, char);

//----- (00692C20) --------------------------------------------------------
void *__thiscall Effect::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Effect::_vector_deleting_destructor_((Effect *)((char *)this - 8), a2);
}

//----- (00692C30) --------------------------------------------------------
NiRTTI *__thiscall Effect::GetRTTI(Effect *this)
{
  return &Effect::m_RTTI;
}

//----- (00692C40) --------------------------------------------------------
bool __thiscall Effect::IsEnd(Effect *this, float fTime)
{
  float fPastTime; // [sp+8h] [bp+8h]@3

  return this->m_bStopFlag
      || !this->m_bLoop
      && ((fPastTime = fTime - this->m_fStartTime, this->m_kCtrl.m_fMaxTime < (double)fPastTime)
       || this->m_fLifeTime < (double)fPastTime);
}

//----- (00692C90) --------------------------------------------------------
void *__thiscall Effect::_vector_deleting_destructor_(Effect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  Effect::_Effect(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00692CC0) --------------------------------------------------------
void __thiscall EffectCtrl::SetFrequency(EffectCtrl *this, float fFrequency)
{
  this->m_fFrequency = fFrequency;
}

//----- (00692CD0) --------------------------------------------------------
void __thiscall EffectCtrl::SetPhase(EffectCtrl *this, float fPhase)
{
  this->m_fPhase = fPhase;
}

//----- (00692CE0) --------------------------------------------------------
void __thiscall CDecalEffect::Start(CDecalEffect *this, float fTime)
{
  NsEffect::Start(&this->m_kEffect, fTime);
}

//----- (00692D00) --------------------------------------------------------
void __thiscall DecalMgr::Init(DecalMgr *this, PgNsTerrain *kTerrain, NiNode *kBuildingScene)
{
  if ( kTerrain )
    this->m_pkTerrain = kTerrain;
  if ( kBuildingScene )
    this->m_pkBuildingScene = kBuildingScene;
}

//----- (00692D20) --------------------------------------------------------
void __thiscall DecalMgr::SetHeightFieldTerrain(DecalMgr *this, PgNsTerrain *kTerrain)
{
  if ( kTerrain )
    this->m_pkTerrain = kTerrain;
}

//----- (00692D50) --------------------------------------------------------
bool __thiscall CharDecal::IsEnd(CharDecal *this)
{
  return this->m_bEnd;
}

//----- (00692D60) --------------------------------------------------------
bool __thiscall CharDecal::IsPassLifeTime(CharDecal *this, float fTime)
{
  bool result; // al@2

  if ( this->m_fLifeTime >= 0.0 )
    result = fTime > (double)this->m_fLifeTime;
  else
    result = 0;
  return result;
}

//----- (00692DA0) --------------------------------------------------------
void __thiscall CharDecal::SetCharHandle(CharDecal *this, unsigned __int16 kHandle)
{
  this->m_hHandle = kHandle;
}

//----- (00692DC0) --------------------------------------------------------
unsigned __int16 __thiscall CharDecal::GetCharHandle(CharDecal *this)
{
  return this->m_hHandle;
}

//----- (00692DD0) --------------------------------------------------------
void __thiscall EffectCtrl::EffectCtrl(EffectCtrl *this)
{
  this->vfptr = (EffectCtrlVtbl *)&EffectCtrl::_vftable_;
  this->m_kControllers.vfptr = (NiTArray<NiTimeController *>Vtbl *)&NiTArray<NiTimeController__>::_vftable_;
  this->m_kControllers.m_uiMaxSize = 0;
  this->m_kControllers.m_uiGrowBy = 1;
  this->m_kControllers.m_uiSize = 0;
  this->m_kControllers.m_uiESize = 0;
  this->m_kControllers.m_pBase = 0;
  this->m_fMinTime = 0.0;
  this->m_fMaxTime = 0.0;
  this->m_pEffectObject = 0;
  this->m_uiControllerCount = 0.0;
  this->m_fFrequency = 0.0;
  this->m_fPhase = 0.0;
}
// 9C70AC: using guessed type int (__thiscall *NiTArray_NiTimeController _____vftable_)(void *p, char);
// 9C70E4: using guessed type int (__thiscall *EffectCtrl___vftable_)(void *p, char);

//----- (00692E10) --------------------------------------------------------
void __thiscall EffectCtrl::_EffectCtrl(EffectCtrl *this)
{
  void *v1; // ST00_4@1

  this->vfptr = (EffectCtrlVtbl *)&EffectCtrl::_vftable_;
  this->m_pEffectObject = 0;
  v1 = this->m_kControllers.m_pBase;
  this->m_kControllers.vfptr = (NiTArray<NiTimeController *>Vtbl *)&NiTArray<NiTimeController__>::_vftable_;
  operator delete__(v1);
}
// 9C70AC: using guessed type int (__thiscall *NiTArray_NiTimeController _____vftable_)(void *p, char);
// 9C70E4: using guessed type int (__thiscall *EffectCtrl___vftable_)(void *p, char);

//----- (00692E30) --------------------------------------------------------
void __thiscall EffectCtrl::Start(EffectCtrl *this, float _fTime)
{
  EffectCtrl *v2; // edi@1
  unsigned int v3; // esi@1
  NiTimeController *v4; // ecx@2

  v2 = this;
  v3 = 0;
  if ( this->m_kControllers.m_uiSize )
  {
    do
    {
      v4 = v2->m_kControllers.m_pBase[v3];
      if ( v4 )
        ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(_fTime));
      ++v3;
    }
    while ( v3 < v2->m_kControllers.m_uiSize );
  }
}

//----- (00692E70) --------------------------------------------------------
void __thiscall EffectCtrl::Stop(EffectCtrl *this)
{
  EffectCtrl *v1; // edi@1
  unsigned int v2; // esi@1
  NiTimeController *v3; // ecx@2

  v1 = this;
  v2 = 0;
  if ( this->m_kControllers.m_uiSize )
  {
    do
    {
      v3 = v1->m_kControllers.m_pBase[v2];
      if ( v3 )
        ((void (*)(void))v3->baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)();
      ++v2;
    }
    while ( v2 < v1->m_kControllers.m_uiSize );
  }
}

//----- (00692EA0) --------------------------------------------------------
void __thiscall CharDecal::Update(CharDecal *this, float fTime)
{
  CharDecal *v2; // esi@1
  Char *v3; // eax@1
  NiNode *v4; // edi@2
  NiPoint3 *v5; // eax@2
  NiPoint3 result; // [sp+14h] [bp-Ch]@2

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, this->m_hHandle);
  if ( v3 )
  {
    v4 = v2->baseclass_0.m_spDecalNode.m_pObject;
    v5 = Char::GetHeightPos(v3, &result);
    NsDecal::Update(&v2->baseclass_0.m_kDecalMaker, 0.0, v4, v5);
  }
  else
  {
    NsDecal::Update(&v2->baseclass_0.m_kDecalMaker, 0.0, v2->baseclass_0.m_spDecalNode.m_pObject, &v2->m_kPos);
  }
  NiAVObject::Update(&v2->baseclass_0.m_spDecalNode.m_pObject->baseclass_0, fTime, 1);
}

//----- (00692F20) --------------------------------------------------------
void __thiscall CharDecal::SetCharHandle(CharDecal *this, Char *kChar)
{
  if ( kChar )
    this->m_hHandle = kChar->m_kHandle;
}

//----- (00692F40) --------------------------------------------------------
void __thiscall CharDecal::SetLifeTime(CharDecal *this, float fTime)
{
  this->m_fLifeTime = Timer::ms_fCurTime + fTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00692F60) --------------------------------------------------------
void __thiscall EffectCtrl::StartEmitter(EffectCtrl *this, float _fTime)
{
  EffectCtrl *v2; // ebx@1
  unsigned int v3; // edi@1
  NiTimeController *v4; // esi@2
  int v5; // eax@3

  v2 = this;
  v3 = 0;
  if ( this->m_kControllers.m_uiSize )
  {
    do
    {
      v4 = v2->m_kControllers.m_pBase[v3];
      if ( v4 )
      {
        v5 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v4);
        if ( v5 )
        {
          while ( (NiRTTI *)v5 != &NiPSysEmitterCtlr::m_RTTI )
          {
            v5 = *(_DWORD *)(v5 + 4);
            if ( !v5 )
              goto LABEL_8;
          }
          v4->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v4, LODWORD(_fTime));
        }
      }
LABEL_8:
      ++v3;
    }
    while ( v3 < v2->m_kControllers.m_uiSize );
  }
}

//----- (00692FC0) --------------------------------------------------------
void __thiscall EffectCtrl::StopEmitter(EffectCtrl *this)
{
  EffectCtrl *v1; // ebx@1
  unsigned int v2; // edi@1
  NiTimeController *v3; // esi@2
  int v4; // eax@3

  v1 = this;
  v2 = 0;
  if ( this->m_kControllers.m_uiSize )
  {
    do
    {
      v3 = v1->m_kControllers.m_pBase[v2];
      if ( v3 )
      {
        v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v3);
        if ( v4 )
        {
          while ( (NiRTTI *)v4 != &NiPSysEmitterCtlr::m_RTTI )
          {
            v4 = *(_DWORD *)(v4 + 4);
            if ( !v4 )
              goto LABEL_8;
          }
          ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v3);
        }
      }
LABEL_8:
      ++v2;
    }
    while ( v2 < v1->m_kControllers.m_uiSize );
  }
}

//----- (00693010) --------------------------------------------------------
void __thiscall DecalMgr::RemoveAllDecal(DecalMgr *this)
{
  NiTListItem<CharDecal *> *v1; // eax@1
  NiNode *v2; // ebx@1
  CharDecal *v3; // edi@4
  NiNode *v4; // esi@5
  NiTListItem<CharDecal *> *v5; // esi@12
  char *v6; // edi@12
  NiTListItem<CharDecal *> *v7; // ST00_4@13
  DecalMgr *v8; // [sp+0h] [bp-18h]@1
  NiTListItem<CharDecal *> *iter; // [sp+8h] [bp-10h]@4

  v8 = this;
  v1 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v2 = 0;
  if ( v1 )
  {
    while ( 1 )
    {
      v3 = v1->m_element;
      iter = v1->m_pkNext;
      if ( (NiNode *)v3 != v2 )
      {
        v4 = v3->baseclass_0.m_spDecalNode.m_pObject;
        if ( v4 )
        {
          v2 = v3->baseclass_0.m_spDecalNode.m_pObject;
          InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
          World::DetachEffect(&g_kWorld, v4);
        }
        v3->baseclass_0.vfptr->__vecDelDtor((CDecalEffect *)v3, 1u);
        if ( v2
          && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
      v2 = 0;
      if ( !iter )
        break;
      v1 = iter;
    }
    this = v8;
  }
  v5 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v6 = (char *)&this->m_kList;
  while ( (NiNode *)v5 != v2 )
  {
    v7 = v5;
    v5 = v5->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 8))(v6, v7);
  }
  *((_DWORD *)v6 + 3) = v2;
  *((_DWORD *)v6 + 1) = v2;
  *((_DWORD *)v6 + 2) = v2;
}

//----- (00693100) --------------------------------------------------------
void __thiscall DecalMgr::Terminate(DecalMgr *this)
{
  this->m_pkTerrain = 0;
  this->m_pkBuildingScene = 0;
  DecalMgr::RemoveAllDecal(this);
}

//----- (00693110) --------------------------------------------------------
void __thiscall CharDecal::CharDecal(CharDecal *this)
{
  CharDecal *v1; // esi@1

  v1 = this;
  CDecalEffect::CDecalEffect(&this->baseclass_0);
  v1->m_fLifeTime = -1.0;
  v1->m_hHandle = -1;
  v1->baseclass_0.vfptr = (CDecalEffectVtbl *)&CharDecal::_vftable_;
  v1->m_bEnd = 0;
}
// 9C7114: using guessed type int (__thiscall *CharDecal___vftable_)(void *p, char);

//----- (00693150) --------------------------------------------------------
void __thiscall CharDecal::_CharDecal(CharDecal *this)
{
  this->baseclass_0.vfptr = (CDecalEffectVtbl *)&CharDecal::_vftable_;
  CDecalEffect::_CDecalEffect(&this->baseclass_0);
}
// 9C7114: using guessed type int (__thiscall *CharDecal___vftable_)(void *p, char);

//----- (00693160) --------------------------------------------------------
void __thiscall EffectCtrl::Add(EffectCtrl *this, NiTimeController *pkController)
{
  NiTimeController *v2; // ebx@1
  EffectCtrl *v3; // esi@1
  unsigned int v4; // eax@6
  unsigned int v5; // [sp+8h] [bp-4h]@6

  v2 = pkController;
  v3 = this;
  if ( pkController )
  {
    if ( this->m_fMinTime > (double)pkController->m_fLoKeyTime )
      this->m_fMinTime = pkController->m_fLoKeyTime;
    if ( this->m_fMaxTime < (double)v2->m_fHiKeyTime )
      this->m_fMaxTime = v2->m_fHiKeyTime;
    v4 = this->m_kControllers.m_uiSize;
    v5 = v4;
    if ( v4 >= this->m_kControllers.m_uiMaxSize )
    {
      NiTArray<NiGeometry__>::SetSize(
        (NiTArray<NiTPointerList<NiPointer<NiProperty> > *> *)&this->m_kControllers,
        v4 + this->m_kControllers.m_uiGrowBy);
      v4 = v5;
    }
    NiTArray<NiCollisionGroup::Record__>::SetAt(
      (NiTArray<NiVBChip *> *)&v3->m_kControllers,
      v4,
      (NiVBChip *const *)&pkController);
    v3->m_uiControllerCount = v3->m_uiControllerCount + 1.0;
    v2->m_uFlags = v2->m_uFlags & 0xFFF7 | 1;
  }
}

//----- (006931F0) --------------------------------------------------------
void __thiscall EffectCtrl::FindAndAdd(EffectCtrl *this, NiObjectNET *pkRoot)
{
  EffectCtrl *v2; // ebx@1
  NiTimeController *i; // esi@2
  int v4; // eax@4
  int v5; // eax@7
  unsigned int v6; // esi@11
  NiObjectNET *v7; // eax@14
  unsigned int v8; // eax@16
  unsigned int v9; // esi@16
  NiObjectNET *j; // eax@18
  char *v11; // esi@21
  NiObjectNET *v12; // eax@24

  v2 = this;
  if ( pkRoot )
  {
    for ( i = pkRoot->m_spControllers.m_pObject; i; i = i->m_spNext.m_pObject )
      EffectCtrl::Add(v2, i);
    v4 = ((int (__thiscall *)(_DWORD))pkRoot->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(pkRoot);
    if ( v4 )
    {
      while ( (NiRTTI *)v4 != &NiAVObject::m_RTTI )
      {
        v4 = *(_DWORD *)(v4 + 4);
        if ( !v4 )
          goto LABEL_7;
      }
      v6 = pkRoot[5].m_uiExtraDataSize;
      while ( pkRoot[6].baseclass_0.baseclass_0.vfptr && v6 )
      {
        v7 = *(NiObjectNET **)(v6 + 8);
        v6 = *(_DWORD *)v6;
        if ( v7 )
          EffectCtrl::FindAndAdd(v2, v7);
      }
    }
LABEL_7:
    v5 = ((int (__thiscall *)(_DWORD))pkRoot->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(pkRoot);
    if ( v5 )
    {
      while ( (NiRTTI *)v5 != &NiNode::m_RTTI )
      {
        v5 = *(_DWORD *)(v5 + 4);
        if ( !v5 )
          return;
      }
      v8 = pkRoot[6].m_uiExtraDataSize;
      v9 = 0;
      if ( v8 )
      {
        if ( v8 > 0 )
          goto LABEL_19;
        for ( j = 0; ; j = (NiObjectNET *)(&pkRoot[6].m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr)[v9] )
        {
          EffectCtrl::FindAndAdd(v2, j);
          ++v9;
          if ( pkRoot[6].m_uiExtraDataSize <= v9 )
            break;
LABEL_19:
          ;
        }
      }
      v11 = pkRoot[7].m_pcName;
      while ( pkRoot[7].m_ppkExtra && v11 )
      {
        v12 = (NiObjectNET *)*((_DWORD *)v11 + 2);
        v11 = *(char **)v11;
        if ( v12 )
          EffectCtrl::FindAndAdd(v2, v12);
      }
    }
  }
}

//----- (006932F0) --------------------------------------------------------
void __thiscall EffectCtrl::SetEffectNode(EffectCtrl *this, NiAVObject *_pkEffectObject)
{
  unsigned int v2; // eax@1

  v2 = 0;
  if ( this->m_kControllers.m_uiSize )
  {
    do
      this->m_kControllers.m_pBase[v2++] = 0;
    while ( v2 < this->m_kControllers.m_uiSize );
  }
  this->m_kControllers.m_uiSize = 0;
  this->m_kControllers.m_uiESize = 0;
  this->m_fMinTime = 3.4028235e38;
  this->m_pEffectObject = _pkEffectObject;
  this->m_fMaxTime = 0.0;
  this->m_uiControllerCount = 0.0;
  EffectCtrl::FindAndAdd(this, &_pkEffectObject->baseclass_0);
}

//----- (00693340) --------------------------------------------------------
void __thiscall DecalMgr::_DecalMgr(DecalMgr *this)
{
  DecalMgr *v1; // esi@1
  int v2; // edi@1
  NiTListItem<CharDecal *> *v3; // esi@1
  NiTListItem<CharDecal *> *v4; // ST00_4@2

  v1 = this;
  this->vfptr = (DecalMgrVtbl *)&DecalMgr::_vftable_;
  this->m_pkTerrain = 0;
  this->m_pkBuildingScene = 0;
  DecalMgr::RemoveAllDecal(this);
  v2 = (int)&v1->m_kList;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&PgTList<CharDecal__>::_vftable_;
  v3 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 4) = 0;
  *(_DWORD *)(v2 + 8) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
}
// 9C70B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);
// 9C7124: using guessed type int (__thiscall *PgTList_CharDecal _____vftable_)(void *p, char);
// 9C7134: using guessed type int (__thiscall *DecalMgr___vftable_)(void *p, char);

//----- (006933E0) --------------------------------------------------------
void __thiscall DecalMgr::RemoveDecal(DecalMgr *this, CharDecal *pkDecal)
{
  CharDecal *v2; // edi@1
  NiTListItem<CharDecal *> *v3; // eax@2
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *v4; // ecx@2
  int v5; // edx@3
  CharDecal *v6; // esi@3

  v2 = pkDecal;
  if ( pkDecal )
  {
    v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v4 = (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&this->m_kList;
    if ( v3 )
    {
      while ( 1 )
      {
        v5 = (int)&v3->m_element;
        v6 = (CharDecal *)v3;
        v3 = v3->m_pkNext;
        if ( pkDecal == *(CharDecal **)v5 )
          break;
        if ( !v3 )
          goto LABEL_5;
      }
    }
    else
    {
LABEL_5:
      v6 = 0;
    }
    pkDecal = v6;
    if ( v6 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(v4, (void **)&pkDecal);
    if ( v2->baseclass_0.m_spDecalNode.m_pObject )
      World::DetachEffect(&g_kWorld, v2->baseclass_0.m_spDecalNode.m_pObject);
    v2->baseclass_0.vfptr->__vecDelDtor((CDecalEffect *)v2, 1u);
  }
}

//----- (00693440) --------------------------------------------------------
void __thiscall DecalMgr::RemoveCharDecal(DecalMgr *this, unsigned __int16 hHandle)
{
  NiTListItem<CharDecal *> *v2; // eax@1
  CharDecal *v3; // edx@2

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3->m_hHandle == hHandle )
          break;
      }
      if ( !v2 )
        return;
    }
    DecalMgr::RemoveDecal(this, v3);
  }
}

//----- (00693480) --------------------------------------------------------
void __thiscall DecalMgr::Update(DecalMgr *this, float fTime)
{
  NiTListItem<CharDecal *> *v2; // edi@1
  NiTListItem<CharDecal *> *v3; // ebx@1
  CharDecal *v4; // esi@2
  NiTListItem<CharDecal *> *v5; // eax@5
  CharDecal *v6; // esi@12
  float v7; // eax@13
  int v8; // edx@14
  float v9; // edi@14
  NiTListItem<CharDecal *> *v10; // esi@23
  NiTListItem<CharDecal *> *v11; // ST00_4@24
  NiTList<CharDecal *> kDelList; // [sp+14h] [bp-20h]@1
  DecalMgr *v13; // [sp+24h] [bp-10h]@1
  int v14; // [sp+30h] [bp-4h]@1

  v13 = this;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v3 = 0;
  *(_DWORD *)&kDelList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  kDelList.baseclass_0.baseclass_0.m_pkHead = 0;
  kDelList.baseclass_0.baseclass_0.m_pkTail = 0;
  kDelList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<CharDecal *>,CharDecal *>Vtbl *)&NiTList<CharDecal__>::_vftable_;
  v14 = 0;
  if ( v2 )
  {
    do
    {
      v4 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v4 )
      {
        if ( v4->m_fLifeTime < 0.0 || v4->m_fLifeTime >= (double)fTime )
        {
          v4->baseclass_0.vfptr[1].__vecDelDtor((CDecalEffect *)v4, LODWORD(fTime));
        }
        else
        {
          v5 = kDelList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<CharDecal *>,CharDecal *> *)&kDelList);
          v5->m_element = v4;
          v5->m_pkNext = 0;
          v5->m_pkPrev = kDelList.baseclass_0.baseclass_0.m_pkTail;
          if ( kDelList.baseclass_0.baseclass_0.m_pkTail )
          {
            kDelList.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v5;
            ++*(_DWORD *)&kDelList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
            kDelList.baseclass_0.baseclass_0.m_pkTail = v5;
          }
          else
          {
            ++*(_DWORD *)&kDelList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
            kDelList.baseclass_0.baseclass_0.m_pkHead = v5;
            kDelList.baseclass_0.baseclass_0.m_pkTail = v5;
          }
        }
      }
    }
    while ( v2 );
    v3 = kDelList.baseclass_0.baseclass_0.m_pkHead;
  }
  while ( v3 )
  {
    v6 = v3->m_element;
    v3 = v3->m_pkNext;
    if ( v6 )
    {
      LODWORD(v7) = v13->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( LODWORD(v7) )
      {
        while ( 1 )
        {
          v8 = LODWORD(v7) + 8;
          v9 = v7;
          LODWORD(v7) = *LODWORD(v7);
          if ( v6 == *(CharDecal **)v8 )
            break;
          if ( !LODWORD(v7) )
            goto LABEL_16;
        }
      }
      else
      {
LABEL_16:
        LODWORD(v9) = 0;
      }
      fTime = v9;
      if ( LODWORD(v9) )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v13->m_kList,
          (void **)&fTime);
      if ( v6->baseclass_0.m_spDecalNode.m_pObject )
        World::DetachEffect(&g_kWorld, v6->baseclass_0.m_spDecalNode.m_pObject);
      v6->baseclass_0.vfptr->__vecDelDtor((CDecalEffect *)v6, 1u);
    }
  }
  v10 = kDelList.baseclass_0.baseclass_0.m_pkHead;
  if ( kDelList.baseclass_0.baseclass_0.m_pkHead )
  {
    do
    {
      v11 = v10;
      v10 = v10->m_pkNext;
      kDelList.baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<CharDecal *>,CharDecal *> *)&kDelList, v11);
    }
    while ( v10 );
  }
}
// 9C7104: using guessed type int (__thiscall *NiTList_CharDecal _____vftable_)(void *p, char);

//----- (00693600) --------------------------------------------------------
bool __thiscall CDecalEffect::SetEffect(CDecalEffect *this, NiNode *pEffect)
{
  CDecalEffect *v2; // edi@1
  NiAVObject *v3; // eax@2
  NiAVObject *v4; // esi@2
  NiAVObject *v5; // ecx@3
  void *v6; // ebx@3
  int v7; // eax@3
  bool result; // al@6
  NiNode *v9; // ecx@7
  FindDecalGeometry kFindGeom; // [sp+1Ch] [bp-1Ch]@3
  NiPointer<HazeAccumulator> thisa; // [sp+28h] [bp-10h]@8
  int v12; // [sp+34h] [bp-4h]@3
  float fRadius; // [sp+40h] [bp+8h]@3

  v2 = this;
  if ( pEffect
    && (v3 = (NiAVObject *)((int (__stdcall *)(_DWORD))pEffect->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("#Decal"),
        (v4 = v3) != 0)
    && (NiAVObject::Update(v3, 0.0, 1),
        fRadius = v4->m_kWorldBound.m_fRadius + v4->m_kWorldBound.m_fRadius,
        NsDecal::SetDecalSize(&v2->m_kDecalMaker, fRadius, fRadius),
        kFindGeom.baseclass_0.m_pCallBack = 0,
        kFindGeom.baseclass_0.m_nCurLevel = -1,
        kFindGeom.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&FindDecalGeometry::_vftable_,
        v5 = (NiAVObject *)v2->m_spDecalNode.m_pObject,
        v12 = 0,
        NiAVObject::DetachAllProperties(v5),
        v6 = v2->m_spDecalNode.m_pObject,
        (v7 = ((int (__thiscall *)(NiAVObject *))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v4)) != 0) )
  {
    while ( (NiRTTI *)v7 != &NiNode::m_RTTI )
    {
      v7 = *(_DWORD *)(v7 + 4);
      if ( !v7 )
        goto LABEL_6;
    }
    Ns_TourScene::TourScene(&kFindGeom.baseclass_0, (NiNode *)v4, &NiGeometry::m_RTTI, v6);
    NsEffect::SetEffectNode(&v2->m_kEffect, (NiAVObject *)v6);
    v9 = v4->m_pkParent;
    if ( v9 )
    {
      ((void (__stdcall *)(NiPointer<HazeAccumulator> *, NiAVObject *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &thisa,
        v4);
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>(&thisa);
    }
    result = 1;
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}
// 9C70EC: using guessed type int (__stdcall *FindDecalGeometry___vftable_)(int _pkObject, int _pData);

//----- (00693720) --------------------------------------------------------
void __thiscall DecalMgr::DecalMgr(DecalMgr *this)
{
  this->vfptr = (DecalMgrVtbl *)&DecalMgr::_vftable_;
  this->m_pkTerrain = 0;
  this->m_pkBuildingScene = 0;
  *(_DWORD *)&this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&PgTList<CharDecal__>::_vftable_;
}
// 9C7124: using guessed type int (__thiscall *PgTList_CharDecal _____vftable_)(void *p, char);
// 9C7134: using guessed type int (__thiscall *DecalMgr___vftable_)(void *p, char);

//----- (00693750) --------------------------------------------------------
CharDecal *__thiscall DecalMgr::AddDecal(DecalMgr *this, NiNode *pkNode)
{
  DecalMgr *v2; // ebx@1
  NiNode *v3; // edi@1
  void *v4; // eax@2
  void *v5; // esi@2
  NiPoint3 *v6; // eax@6
  int v7; // edi@6
  NiPoint3 result; // [sp+1Ch] [bp-1Ch]@6
  NiPointer<NiNode> spDecalNode; // [sp+28h] [bp-10h]@6
  int v11; // [sp+34h] [bp-4h]@2

  v2 = this;
  v3 = pkNode;
  if ( !pkNode
    || ((v4 = operator new(0xB0u), v5 = v4, pkNode = (NiNode *)v4, v11 = 0, !v4) ? (v5 = 0) : (CDecalEffect::CDecalEffect((CDecalEffect *)v4),
                                                                                               *((float *)v5 + 43) = -1.0,
                                                                                               *(_DWORD *)v5 = &CharDecal::_vftable_,
                                                                                               *((_WORD *)v5 + 84) = -1,
                                                                                               *((_BYTE *)v5 + 170) = 0),
        v11 = -1,
        (pkNode = (NiNode *)v5) == 0) )
    return 0;
  CDecalEffect::Init((CDecalEffect *)v5, v2->m_pkTerrain, v2->m_pkBuildingScene);
  CDecalEffect::SetEffect((CDecalEffect *)v5, v3);
  v6 = Char::GetHeightPos(g_pkMainChar, &result);
  NsDecal::Update((NsDecal *)((char *)v5 + 40), 0.0, *((NiNode **)v5 + 36), v6);
  v7 = *((_DWORD *)v5 + 36);
  spDecalNode.m_pObject = (NiNode *)v7;
  if ( v7 )
    InterlockedIncrement((volatile LONG *)(v7 + 4));
  v11 = 1;
  if ( !v7 )
  {
    (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    return 0;
  }
  World::AttachEffect(&g_kWorld, (NiNode *)v7);
  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v2->m_kList,
    (NiD3DXEffectParameter *const *)&pkNode);
  v11 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
  return (CharDecal *)v5;
}
// 9C7114: using guessed type int (__thiscall *CharDecal___vftable_)(void *p, char);

//----- (006938B0) --------------------------------------------------------
void __thiscall DecalMgr::RemoveCharDecal(DecalMgr *this, Char *pkChar)
{
  NiTListItem<CharDecal *> *v2; // eax@1
  CharDecal *v3; // edx@2

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3->m_hHandle == pkChar->m_kHandle )
          break;
      }
      if ( !v2 )
        return;
    }
    DecalMgr::RemoveDecal(this, v3);
  }
}

//----- (006938F0) --------------------------------------------------------
void __thiscall CharDecal::SetRadius(CharDecal *this, float fRadius)
{
  NsDecal::SetDecalSize(&this->baseclass_0.m_kDecalMaker, fRadius, fRadius);
}

//----- (00693910) --------------------------------------------------------
CharDecal *__thiscall DecalMgr::AddDecal(DecalMgr *this, NiNode *pkNode, float fRadius, Char *pkChar)
{
  DecalMgr *v4; // ebx@1
  NiNode *v5; // edi@1
  void *v6; // eax@2
  void *v7; // esi@2
  NiPoint3 *v8; // eax@8
  float v9; // ecx@8
  float v10; // edx@8
  float v11; // eax@8
  NiPoint3 *v12; // eax@8
  int v13; // edi@9
  char v15; // [sp+1Ch] [bp-24h]@8
  NiPoint3 result; // [sp+28h] [bp-18h]@8
  int v17; // [sp+3Ch] [bp-4h]@2

  v4 = this;
  v5 = pkNode;
  if ( !pkNode
    || ((v6 = operator new(0xB0u), v7 = v6, pkNode = (NiNode *)v6, v17 = 0, !v6) ? (v7 = 0) : (CDecalEffect::CDecalEffect((CDecalEffect *)v6),
                                                                                               *((float *)v7 + 43) = -1.0,
                                                                                               *(_DWORD *)v7 = &CharDecal::_vftable_,
                                                                                               *((_WORD *)v7 + 84) = -1,
                                                                                               *((_BYTE *)v7 + 170) = 0),
        v17 = -1,
        (pkNode = (NiNode *)v7) == 0) )
    return 0;
  CDecalEffect::Init((CDecalEffect *)v7, v4->m_pkTerrain, v4->m_pkBuildingScene);
  CDecalEffect::SetEffect((CDecalEffect *)v7, v5);
  if ( pkChar )
  {
    *((_WORD *)v7 + 84) = pkChar->m_kHandle;
  }
  else
  {
    v8 = Char::GetHeightPos(g_pkMainChar, &result);
    v9 = v8->x;
    v10 = v8->y;
    v11 = v8->z;
    *((_DWORD *)v7 + 39) = LODWORD(v9);
    *((_DWORD *)v7 + 40) = LODWORD(v10);
    *((_DWORD *)v7 + 41) = LODWORD(v11);
    v12 = Char::GetHeightPos(g_pkMainChar, (NiPoint3 *)&v15);
    NsDecal::Update((NsDecal *)((char *)v7 + 40), 0.0, *((NiNode **)v7 + 36), v12);
  }
  NsDecal::SetDecalSize((NsDecal *)((char *)v7 + 40), fRadius, fRadius);
  v13 = *((_DWORD *)v7 + 36);
  pkChar = (Char *)v13;
  if ( v13 )
    InterlockedIncrement((volatile LONG *)(v13 + 4));
  v17 = 1;
  if ( !v13 )
  {
    (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    return 0;
  }
  World::AttachEffect(&g_kWorld, (NiNode *)v13);
  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v4->m_kList,
    (NiD3DXEffectParameter *const *)&pkNode);
  v17 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
  return (CharDecal *)v7;
}
// 9C7114: using guessed type int (__thiscall *CharDecal___vftable_)(void *p, char);

//----- (00693AD0) --------------------------------------------------------
CharDecal *__thiscall DecalMgr::AddDecal(DecalMgr *this, char *FileDir, float fRadius, Char *pkChar)
{
  DecalMgr *v4; // ebx@1
  char *v5; // edi@1
  void *v6; // eax@2
  void *v7; // esi@2
  NiNode *v8; // edi@6
  NiPoint3 *v10; // eax@13
  float v11; // ecx@13
  float v12; // edx@13
  float v13; // eax@13
  NiPoint3 *v14; // eax@13
  int v15; // edi@14
  NiPoint3 result; // [sp+1Ch] [bp-20h]@13
  void *pkDecal; // [sp+28h] [bp-14h]@5
  NiPointer<NiNode> spEffect; // [sp+2Ch] [bp-10h]@6
  int v19; // [sp+38h] [bp-4h]@2

  v4 = this;
  v5 = FileDir;
  if ( !FileDir
    || ((v6 = operator new(0xB0u), v7 = v6, FileDir = (char *)v6, v19 = 0, !v6) ? (v7 = 0) : (CDecalEffect::CDecalEffect((CDecalEffect *)v6),
                                                                                              *((float *)v7 + 43) = -1.0,
                                                                                              *(_DWORD *)v7 = &CharDecal::_vftable_,
                                                                                              *((_WORD *)v7 + 84) = -1,
                                                                                              *((_BYTE *)v7 + 170) = 0),
        v19 = -1,
        (pkDecal = v7) == 0) )
    return 0;
  CDecalEffect::Init((CDecalEffect *)v7, v4->m_pkTerrain, v4->m_pkBuildingScene);
  v8 = Ns_LoadNifFile(v5, 0);
  spEffect.m_pObject = v8;
  if ( v8 )
    InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v19 = 1;
  if ( !v8 )
  {
    (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    return 0;
  }
  CDecalEffect::SetEffect((CDecalEffect *)v7, v8);
  if ( pkChar )
  {
    *((_WORD *)v7 + 84) = pkChar->m_kHandle;
  }
  else
  {
    v10 = Char::GetHeightPos(g_pkMainChar, &result);
    v11 = v10->x;
    v12 = v10->y;
    v13 = v10->z;
    *((_DWORD *)v7 + 39) = LODWORD(v11);
    *((_DWORD *)v7 + 40) = LODWORD(v12);
    *((_DWORD *)v7 + 41) = LODWORD(v13);
    v14 = Char::GetHeightPos(g_pkMainChar, &result);
    NsDecal::Update((NsDecal *)((char *)v7 + 40), 0.0, *((NiNode **)v7 + 36), v14);
  }
  NsDecal::SetDecalSize((NsDecal *)((char *)v7 + 40), fRadius, fRadius);
  v15 = *((_DWORD *)v7 + 36);
  FileDir = (char *)v15;
  if ( v15 )
    InterlockedIncrement((volatile LONG *)(v15 + 4));
  LOBYTE(v19) = 2;
  if ( !v15 )
  {
    (**(void (__thiscall ***)(void *, signed int))v7)(v7, 1);
    LOBYTE(v19) = 1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&FileDir);
    v19 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spEffect);
    return 0;
  }
  World::AttachEffect(&g_kWorld, (NiNode *)v15);
  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v4->m_kList,
    (NiD3DXEffectParameter *const *)&pkDecal);
  LOBYTE(v19) = 1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&FileDir);
  v19 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spEffect);
  return (CharDecal *)v7;
}
// 9C7114: using guessed type int (__thiscall *CharDecal___vftable_)(void *p, char);

//----- (00693CD0) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<CharDecal__>_CharDecal__>::_NiTListBase<DFALL<CharDecal__>_CharDecal__>(NiTListBase<DFALL<CharDecal *>,CharDecal *> *this)
{
  this->vfptr = (NiTListBase<DFALL<CharDecal *>,CharDecal *>Vtbl *)&NiTListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_;
}
// 9C70C4: using guessed type int (__thiscall *NiTListBase_DFALL_CharDecal ___CharDecal _____vftable_)(void *p, char);

//----- (00693CE0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<CharDecal__>_CharDecal__>::_vector_deleting_destructor_(NiTListBase<DFALL<CharDecal *>,CharDecal *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<CharDecal *>,CharDecal *>Vtbl *)&NiTListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C70C4: using guessed type int (__thiscall *NiTListBase_DFALL_CharDecal ___CharDecal _____vftable_)(void *p, char);

//----- (00693D10) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>(NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
}
// 9C70B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);

//----- (00693D20) --------------------------------------------------------
void *__thiscall NiTArray<NiTimeController__>::_vector_deleting_destructor_(NiTArray<NiTimeController *> *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pBase;
  this->vfptr = (NiTArray<NiTimeController *>Vtbl *)&NiTArray<NiTimeController__>::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C70AC: using guessed type int (__thiscall *NiTArray_NiTimeController _____vftable_)(void *p, char);

//----- (00693D50) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C70B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);

//----- (00693D80) --------------------------------------------------------
void __thiscall NiTList<CharDecal__>::_NiTList<CharDecal__>(NiTList<CharDecal *> *this)
{
  NiTList<CharDecal *> *v1; // edi@1
  NiTListItem<CharDecal *> *v2; // esi@1
  NiTListItem<CharDecal *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<CharDecal *>,CharDecal *>Vtbl *)&NiTPointerListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<CharDecal *>,CharDecal *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<CharDecal *>,CharDecal *>Vtbl *)&NiTListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_;
}
// 9C70C4: using guessed type int (__thiscall *NiTListBase_DFALL_CharDecal ___CharDecal _____vftable_)(void *p, char);
// 9C70D4: using guessed type int (__thiscall *NiTPointerListBase_DFALL_CharDecal ___CharDecal _____vftable_)(void *p, char);

//----- (00693E00) --------------------------------------------------------
void __thiscall NiAVObject::DetachAllProperties(NiAVObject *this)
{
  NiTListItem<NiPointer<NiProperty> > *v1; // esi@1
  char *v2; // edi@1
  NiTListItem<NiPointer<NiProperty> > *v3; // ST00_4@2

  v1 = this->m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
  v2 = (char *)&this->m_kPropertyList;
  while ( v1 )
  {
    v3 = v1;
    v1 = v1->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v3);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
}

//----- (00693E40) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<CharDecal *> *v3; // esi@1
  NiTListItem<CharDecal *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C70B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);
// 9C70F4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);

//----- (00693ED0) --------------------------------------------------------
void __thiscall NiTPointerList<CharDecal__>::_NiTPointerList<CharDecal__>(NiTPointerList<CharDecal *> *this)
{
  NiTPointerList<CharDecal *> *v1; // edi@1
  NiTListItem<CharDecal *> *v2; // esi@1
  NiTListItem<CharDecal *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
}
// 9C70B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);
// 9C70F4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);

//----- (00693F50) --------------------------------------------------------
void *__thiscall EffectCtrl::_vector_deleting_destructor_(EffectCtrl *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  this->vfptr = (EffectCtrlVtbl *)&EffectCtrl::_vftable_;
  this->m_pEffectObject = 0;
  v3 = this->m_kControllers.m_pBase;
  this->m_kControllers.vfptr = (NiTArray<NiTimeController *>Vtbl *)&NiTArray<NiTimeController__>::_vftable_;
  operator delete__(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C70AC: using guessed type int (__thiscall *NiTArray_NiTimeController _____vftable_)(void *p, char);
// 9C70E4: using guessed type int (__thiscall *EffectCtrl___vftable_)(void *p, char);

//----- (00693F90) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<CharDecal__>_CharDecal__>::_vector_deleting_destructor_(NiTList<CharDecal *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<CharDecal *> *v3; // esi@1
  NiTListItem<CharDecal *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<CharDecal *>,CharDecal *>Vtbl *)&NiTPointerListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<CharDecal__>_CharDecal__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C70C4: using guessed type int (__thiscall *NiTListBase_DFALL_CharDecal ___CharDecal _____vftable_)(void *p, char);
// 9C70D4: using guessed type int (__thiscall *NiTPointerListBase_DFALL_CharDecal ___CharDecal _____vftable_)(void *p, char);

//----- (00694020) --------------------------------------------------------
Ns_TourScene::TS_RESULT __thiscall FindDecalGeometry::ProcessData(FindDecalGeometry *this, NiAVObject *_pkObject, void *_pData)
{
  NiTListItem<NiPointer<NiProperty> > *v3; // ebx@2
  NiProperty *v4; // esi@3

  if ( _pData )
  {
    v3 = _pkObject->m_kPropertyList.baseclass_0.baseclass_0.m_pkHead;
    while ( v3 )
    {
      v4 = v3->m_element.m_pObject;
      v3 = v3->m_pkNext;
      if ( !v4 )
        break;
      _pkObject = (NiAVObject *)v4;
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)_pData + 156),
        (NiPointer<NiRoom> *)&_pkObject);
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  return 0;
}

//----- (006940C0) --------------------------------------------------------
void __thiscall PgTList<CharDecal__>::_PgTList<CharDecal__>(PgTList<CharDecal *> *this)
{
  PgTList<CharDecal *> *v1; // edi@1
  NiTListItem<CharDecal *> *v2; // esi@1
  NiTListItem<CharDecal *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&PgTList<CharDecal__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
}
// 9C70B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);
// 9C7124: using guessed type int (__thiscall *PgTList_CharDecal _____vftable_)(void *p, char);

//----- (00694140) --------------------------------------------------------
void *__thiscall PgTList<CharDecal__>::_vector_deleting_destructor_(PgTList<CharDecal *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<CharDecal *> *v3; // esi@1
  NiTListItem<CharDecal *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,CharDecal *>Vtbl *)&PgTList<CharDecal__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_CharDecal__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C70B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__CharDecal _____vftable_)(void *p, char);
// 9C7124: using guessed type int (__thiscall *PgTList_CharDecal _____vftable_)(void *p, char);

//----- (006941D0) --------------------------------------------------------
void *__thiscall CharDecal::_vector_deleting_destructor_(CharDecal *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (CDecalEffectVtbl *)&CharDecal::_vftable_;
  CDecalEffect::_CDecalEffect(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C7114: using guessed type int (__thiscall *CharDecal___vftable_)(void *p, char);

//----- (00694200) --------------------------------------------------------
void *__thiscall DecalMgr::_scalar_deleting_destructor_(DecalMgr *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  DecalMgr::_DecalMgr(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00694230) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::_Min(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (00694250) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<Effect__>_Effect__>::_NiTListBase<DFALL<Effect__>_Effect__>(NiTListBase<DFALL<Effect *>,Effect *> *this)
{
  this->vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTListBase<DFALL<Effect__>_Effect__>::_vftable_;
}
// 9C7204: using guessed type int (__thiscall *NiTListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);

//----- (00694260) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<Effect__>_Effect__>::_scalar_deleting_destructor_(NiTListBase<DFALL<Effect *>,Effect *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTListBase<DFALL<Effect__>_Effect__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C7204: using guessed type int (__thiscall *NiTListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);

//----- (00694290) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetHairPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[1];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 53.0;
  }
  return v3;
}

//----- (006942F0) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetLeftHandPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[11];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 25.0;
  }
  return v3;
}

//----- (00694350) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetLeftShoesPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[17];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 10.0;
  }
  return v3;
}

//----- (006943B0) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetRightShoesPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[18];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 10.0;
  }
  return v3;
}

//----- (00694410) --------------------------------------------------------
NiPoint3 *__thiscall Char::GetTopLinkPos(Char *this, NiPoint3 *result)
{
  NiNode *v2; // edx@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  float v5; // edx@2
  int v6; // ecx@3
  float v7; // edx@3
  float v8; // ecx@3

  v2 = this->m_kCharShape.m_apkLinkNode[8];
  if ( v2 )
  {
    v3 = result;
    result->x = v2->baseclass_0.m_kWorld.m_Translate.x;
    v4 = v2->baseclass_0.m_kWorld.m_Translate.y;
    v5 = v2->baseclass_0.m_kWorld.m_Translate.z;
    result->y = v4;
    result->z = v5;
  }
  else
  {
    v6 = ((int (*)(void))this->baseclass_0.vfptr[6].Deaffect)();
    v3 = result;
    LODWORD(result->x) = *(_DWORD *)v6;
    LODWORD(v7) = *(_DWORD *)(v6 + 4);
    LODWORD(v8) = *(_DWORD *)(v6 + 8);
    result->y = v7;
    result->z = v8;
    result->z = result->z + 53.0;
  }
  return v3;
}

//----- (00694470) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>(NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
}
// 9C71F4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);

//----- (00694480) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C71F4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);

//----- (006944B0) --------------------------------------------------------
void __thiscall EffectMgr::AttachEffectToWorld(EffectMgr *this, Effect *pkEffect)
{
  EffectMgr *v2; // edi@1
  NiTListItem<NiPointer<Effect> > *v3; // esi@2
  Effect *v4; // eax@3

  v2 = this;
  if ( pkEffect )
  {
    v3 = pkEffect->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    while ( v3 )
    {
      v4 = v3->m_element.m_pObject;
      v3 = v3->m_pkNext;
      EffectMgr::AttachEffectToWorld(v2, v4);
    }
    World::AttachEffect(&g_kWorld, pkEffect->m_spNode.m_pObject);
  }
}

//----- (00694500) --------------------------------------------------------
void __thiscall EffectMgr::PlayEffect(EffectMgr *this, Effect *pkEffect)
{
  if ( pkEffect )
  {
    EffectMgr::AttachEffectToWorld(this, pkEffect);
    pkEffect->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)pkEffect, LODWORD(Timer::ms_fCurTime));
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00694530) --------------------------------------------------------
void __thiscall EffectMgr::SetGuildAcademyMasterEffect(EffectMgr *this, Effect *pkEffect)
{
  EffectMgr *v2; // esi@1
  Effect *v3; // ecx@1

  v2 = this;
  v3 = this->m_pGuildAcademyMasterEffect;
  if ( v3 )
  {
    if ( !pkEffect )
    {
      ((void (*)(void))v3->baseclass_0.vfptr[16].__vecDelDtor)();
      ((void (__stdcall *)(_DWORD))v2->m_pGuildAcademyMasterEffect->baseclass_0.vfptr[18].__vecDelDtor)(-1.0);
      v2->m_pGuildAcademyMasterEffect->m_bLoop = 0;
    }
    v2->m_pGuildAcademyMasterEffect = pkEffect;
  }
  else
  {
    v2->m_pGuildAcademyMasterEffect = pkEffect;
  }
}

//----- (00694580) --------------------------------------------------------
bool __thiscall EffectMgr::IsExistEffect(EffectMgr *this, Effect *pkSrcEffect)
{
  NiTListItem<Effect *> *v2; // eax@1
  int v3; // ecx@2
  bool result; // al@4

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = (int)&v2->m_element;
      v2 = v2->m_pkNext;
      if ( pkSrcEffect == *(Effect **)v3 )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (006945B0) --------------------------------------------------------
float __thiscall EffectMgr::CalculateEffScaleRatio(EffectMgr *this, NiNode *pkEffect, NiNode *pkTarget)
{
  int v3; // esi@0
  int v4; // esi@3
  void *v5; // eax@4
  double v6; // st7@7
  float result; // st7@10
  float pkN_12; // [sp+10h] [bp-14h]@5
  float pkB_12; // [sp+20h] [bp-4h]@5
  float pkTargeta; // [sp+30h] [bp+Ch]@7

  if ( pkTarget && pkEffect )
  {
    v4 = ((int (__stdcall *)(_DWORD, int))pkEffect->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
           "SizeBound",
           v3);
    if ( v4
      && (v5 = pkTarget->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)pkTarget,
                 (unsigned int)"SizeBound")) != 0
      && (LODWORD(pkB_12) = *(_DWORD *)(v4 + 48), LODWORD(pkN_12) = *((_DWORD *)v5 + 12), 0.0 != pkB_12)
      && pkN_12 != 0.0 )
    {
      pkTargeta = pkN_12 / pkB_12;
      v6 = pkTargeta;
    }
    else
    {
      v6 = 1.0;
    }
  }
  else
  {
    v6 = 1.0;
  }
  LODWORD(result) = LODWORD(v6);
  return result;
}

//----- (00694670) --------------------------------------------------------
void __thiscall EffectMgr::AuraEffectEnable(EffectMgr *this, bool b)
{
  NiTListItem<Effect *> *v2; // esi@1
  Effect *v3; // ecx@2
  int v4; // [sp-8h] [bp-Ch]@5

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element;
    v2 = v2->m_pkNext;
    if ( v3 && v3->m_bEnableAura == 1 )
    {
      v4 = b != 0;
      ((void (__stdcall *)(int))v3->baseclass_0.vfptr[21].__vecDelDtor)(v4);
    }
  }
}

//----- (006946C0) --------------------------------------------------------
Effect *__thiscall EffectMgr::FindLightningWaveEffect(EffectMgr *this, unsigned __int16 kID)
{
  NiTListItem<Effect *> *v2; // esi@1
  Effect *v3; // edi@2
  Effect *result; // eax@5

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( Effect::GetActiveSkillID(v3) == kID )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = v3;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00694700) --------------------------------------------------------
ArrowEff *__thiscall EffectMgr::GetArrowEffectInList(EffectMgr *this, __int16 AtkSeqNum, unsigned __int16 kCaster)
{
  NiTListItem<Effect *> *v3; // edi@1
  Effect *v4; // esi@2
  int v5; // eax@4
  ArrowEff *result; // eax@10

  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      if ( Effect::GetCasterHandle(v4) == kCaster )
      {
        if ( v4 )
        {
          v5 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[1].__vecDelDtor)(v4);
          if ( v5 )
          {
            while ( (NiRTTI *)v5 != &ArrowEff::m_RTTI )
            {
              v5 = *(_DWORD *)(v5 + 4);
              if ( !v5 )
                goto LABEL_9;
            }
            if ( HIWORD(v4[1].m_pkChainEffect) == AtkSeqNum )
              break;
          }
        }
      }
LABEL_9:
      if ( !v3 )
        goto LABEL_10;
    }
    result = (ArrowEff *)v4;
  }
  else
  {
LABEL_10:
    result = 0;
  }
  return result;
}

//----- (00694770) --------------------------------------------------------
NiNode *__thiscall EffectMgr::GetEffectNode(EffectMgr *this, char *pcName)
{
  NiNode *result; // eax@1
  EffectMgr *v3; // esi@1
  NiNode *v4; // ebx@2
  NiNode *v5; // eax@8
  NiNode *v6; // esi@8
  NiPointer<PgWinBut> v7; // [sp-14h] [bp-130h]@8
  unsigned int v8; // [sp-10h] [bp-12Ch]@1
  NiPointer<PgWinBut> *v9; // [sp+0h] [bp-11Ch]@9
  NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *thisa; // [sp+4h] [bp-118h]@2
  NiPointer<NiNode> spNode; // [sp+8h] [bp-114h]@2
  char acFileName[256]; // [sp+Ch] [bp-110h]@8
  unsigned int v13; // [sp+10Ch] [bp-10h]@1
  int v14; // [sp+118h] [bp-4h]@2
  int v15; // [sp+11Ch] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v8 = (unsigned int)&v15 ^ __security_cookie;
  result = 0;
  v3 = this;
  if ( EffectMgr::s_bEnableEffect )
  {
    spNode.m_pObject = 0;
    v14 = 0;
    thisa = (NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kEffNodeMap;
    NiTMapBase<DFALL<NiPointer<NiNode>>_unsigned_long_NiPointer<NiNode>>::GetAt(
      (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiShaderLibrary> > *)&this->m_kEffNodeMap,
      pcName,
      (NiPointer<NiShaderLibrary> *)&spNode);
    v4 = spNode.m_pObject;
    if ( spNode.m_pObject )
    {
      v14 = -1;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      result = v4;
    }
    else
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v7.m_pObject = (PgWinBut *)pcName;
      sprintf(acFileName, "%s%s.nif");
      v5 = PgUtil::LoadNifFile(acFileName, v3->m_spTexturePalette.m_pObject, 0);
      v6 = v5;
      if ( v5 )
      {
        spNode.m_pObject = v5;
        InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        NiObjectNET::SetName(&v6->baseclass_0.baseclass_0, pcName);
        v9 = &v7;
        v7.m_pObject = (PgWinBut *)v6;
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        NiTMapBase<DFALL<NiPointer<PgWinBut>>_unsigned_long_NiPointer<PgWinBut>>::SetAt(thisa, (unsigned int)pcName, v7);
        v14 = -1;
        if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        result = v6;
      }
      else
      {
        result = 0;
      }
    }
  }
  return result;
}
// A81793: using guessed type bool EffectMgr__s_bEnableEffect;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006948C0) --------------------------------------------------------
float __thiscall EffectMgr::CalculateEffScaleRatio(EffectMgr *this, char *pcEffectName, NiNode *pkTarget)
{
  double v3; // st7@2
  NiNode *v4; // eax@3
  int v5; // esi@4
  void *v6; // eax@5
  float result; // st7@10
  float pkN_12; // [sp+10h] [bp-14h]@6
  float pkB_12; // [sp+20h] [bp-4h]@6
  float pkTargeta; // [sp+30h] [bp+Ch]@8

  if ( pkTarget )
  {
    v4 = EffectMgr::GetEffectNode(this, pcEffectName);
    if ( v4
      && (v5 = (int)v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                      (NiRefObject *)v4,
                      (unsigned int)"SizeBound")) != 0
      && (v6 = pkTarget->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)pkTarget,
                 (unsigned int)"SizeBound")) != 0
      && (LODWORD(pkB_12) = *(_DWORD *)(v5 + 48), LODWORD(pkN_12) = *((_DWORD *)v6 + 12), 0.0 != pkB_12)
      && pkN_12 != 0.0 )
    {
      pkTargeta = pkN_12 / pkB_12;
      v3 = pkTargeta;
    }
    else
    {
      v3 = 1.0;
    }
  }
  else
  {
    v3 = 1.0;
  }
  LODWORD(result) = LODWORD(v3);
  return result;
}

//----- (00694990) --------------------------------------------------------
Effect *__thiscall EffectMgr::FindAuraEffect(EffectMgr *this, unsigned __int16 kCaster)
{
  NiTListItem<Effect *> *v2; // edi@1
  Effect *v3; // esi@2
  int v4; // eax@3
  Effect *result; // eax@9

  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[1].__vecDelDtor)(v3);
        if ( v4 )
        {
          while ( (NiRTTI *)v4 != &AttachEff::m_RTTI )
          {
            v4 = *(_DWORD *)(v4 + 4);
            if ( !v4 )
              goto LABEL_8;
          }
          if ( (unsigned __int16)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[23].__vecDelDtor)(v3) == kCaster )
            break;
        }
      }
LABEL_8:
      if ( !v2 )
        goto LABEL_9;
    }
    result = v3;
  }
  else
  {
LABEL_9:
    result = 0;
  }
  return result;
}

//----- (00694A00) --------------------------------------------------------
void __thiscall EffectMgr::FindEffectAbstateCtrlAni(EffectMgr *this, unsigned __int16 kTargetHandle, unsigned int AbstateIndex)
{
  NiTListItem<Effect *> *v3; // eax@1
  Effect *v4; // ebx@4
  int v5; // esi@7
  unsigned int v6; // edi@7
  int v7; // eax@7
  int v8; // edi@12
  SubAbStateInfo *v9; // eax@14
  unsigned int v10; // ecx@15
  unsigned int v11; // edx@15
  double v12; // st7@18
  float v13; // ST18_4@20
  double v14; // st7@20
  double v15; // st7@21
  double v16; // st6@23
  float v17; // ST18_4@23
  AbnormalStateInfo *fAniPos; // [sp+14h] [bp-18h]@13
  NiTListItem<Effect *> *kIter; // [sp+18h] [bp-14h]@4
  EffectMgr *v20; // [sp+1Ch] [bp-10h]@1
  unsigned int i; // [sp+20h] [bp-Ch]@7
  signed int j; // [sp+24h] [bp-8h]@11
  int v23; // [sp+28h] [bp-4h]@8

  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v20 = this;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      kIter = v3->m_pkNext;
      if ( v4 )
      {
        if ( v4->m_uiEffectType == 1 && v4->m_kAbStateID == AbstateIndex )
          break;
      }
LABEL_32:
      if ( !kIter )
        return;
      v3 = kIter;
    }
    v5 = *(_DWORD *)&this->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0];
    v6 = 0;
    v7 = (signed int)((char *)this->m_kAbsateAniVec.baseclass_0._Mylast - v5) / 14;
    i = 0;
    if ( !v7 )
      goto LABEL_31;
    v23 = 0;
    if ( (unsigned int)v7 <= 0 )
      std::_Xout_of_range("invalid vector<T> subscript");
LABEL_9:
    if ( *(_WORD *)(v23 + v5 + 12) != v4->m_kAniTargetHandle || v4->m_kAbStateID != *(_DWORD *)(v23 + v5) )
      goto LABEL_30;
    j = 0;
    if ( *(float *)(((int (__thiscall *)(Effect *))v4->baseclass_0.vfptr[4].__vecDelDtor)(v4) + 16) <= 0.0 )
      goto LABEL_27;
    while ( 1 )
    {
      v8 = *(_DWORD *)(*(_DWORD *)(((int (__thiscall *)(Effect *))v4->baseclass_0.vfptr[4].__vecDelDtor)(v4) + 32)
                     + 4 * j);
      if ( !v8
        || (fAniPos = AbnormalStateInfoTab::GetByAbstateIndex(v4->m_kAbStateID),
            PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID),
            !fAniPos)
        || (v9 = SubAbStateInfoTab::GetByStrInxName(fAniPos->SubAbState, *(_DWORD *)(v23 + v5 + 8))) == 0 )
        goto LABEL_25;
      v10 = v9->ActionArgA;
      v11 = v9->KeepTime;
      if ( v10 != 1000 )
        break;
      if ( v11 != *(_DWORD *)(v23 + v5 + 4) )
      {
        v12 = (double)(signed int)v9->KeepTime;
        if ( (v11 & 0x80000000u) != 0 )
          v12 = v12 + 4294967300.0;
        v13 = 6.666999816894531 / (v12 / 1000.0);
        *(float *)(v8 + 12) = v13;
        v14 = ((double)v9->KeepTime - (double)*(unsigned int *)(v23 + v5 + 4)) / 1000.0 * v13;
LABEL_24:
        *(float *)(v8 + 16) = v14;
        goto LABEL_25;
      }
      *(float *)(v8 + 12) = 6.666999816894531 / ((double)v11 / 1000.0);
LABEL_25:
      ++j;
      if ( *(float *)(((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[4].__vecDelDtor)(v4) + 16) <= (double)j )
      {
        v6 = i;
LABEL_27:
        if ( !Effect::GetAniStart(v4) )
          v4->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v4, LODWORD(Timer::ms_fCurTime));
        Effect::SetAniStart(v4, 1);
LABEL_30:
        v5 = *(_DWORD *)&v20->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0];
        v23 += 14;
        ++v6;
        i = v6;
        if ( (signed int)((char *)v20->m_kAbsateAniVec.baseclass_0._Mylast - v5) / 14 <= v6 )
        {
LABEL_31:
          this = v20;
          goto LABEL_32;
        }
        goto LABEL_9;
      }
    }
    v15 = (double)(signed int)v9->KeepTime;
    if ( (v11 & 0x80000000u) != 0 )
      v15 = v15 + 4294967300.0;
    v16 = 6.666999816894531 / (v15 / 1000.0);
    v17 = v16;
    *(float *)(v8 + 12) = v16 * (double)v10 / 1000.0;
    v14 = ((double)v9->KeepTime - (double)*(unsigned int *)(v23 + v5 + 4)) / 1000.0 * v17;
    goto LABEL_24;
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00694CE0) --------------------------------------------------------
bool __thiscall EffectMgr::Init(EffectMgr *this)
{
  EffectMgr *v1; // ebx@1
  void *v2; // eax@1
  int v3; // edi@1
  int v4; // eax@2
  NiTexturePalette *v5; // esi@3

  v1 = this;
  v2 = operator new(0x20u);
  v3 = 0;
  if ( v2 )
  {
    NiDefaultTexturePalette::NiDefaultTexturePalette((NiDefaultTexturePalette *)v2, 0);
    v3 = v4;
  }
  v5 = v1->m_spTexturePalette.m_pObject;
  if ( v5 != (NiTexturePalette *)v3 )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spTexturePalette.m_pObject = (NiTexturePalette *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  return 1;
}

//----- (00694D80) --------------------------------------------------------
void __thiscall EffectMgr::DetachEffectFromWorld(EffectMgr *this, Effect *pkEffect)
{
  Effect *v2; // ebx@1
  EffectMgr *v3; // edi@1
  NiTListItem<NiPointer<Effect> > *v4; // esi@3
  Effect *v5; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > > result; // [sp+8h] [bp-4h]@2

  v2 = pkEffect;
  v3 = this;
  if ( pkEffect
    && *(std::_Tree_nod<std::_Tset_traits<Effect *,std::less<Effect *>,std::allocator<Effect *>,0> >::_Node **)&std::_Tree<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>::find((std::_Tree<std::_Tset_traits<PgWin *,std::less<PgWin *>,std::allocator<PgWin *>,0> > *)&this->m_setEffectHandle, &result, (PgWin *const *)&pkEffect)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != this->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v4 = v2->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    while ( v4 )
    {
      v5 = v4->m_element.m_pObject;
      v4 = v4->m_pkNext;
      EffectMgr::DetachEffectFromWorld(v3, v5);
    }
    World::DetachEffect(&g_kWorld, v2->m_spNode.m_pObject);
  }
}

//----- (00694DE0) --------------------------------------------------------
void __thiscall EffectMgr::Add(EffectMgr *this, Effect *pkEffect)
{
  EffectMgr *v2; // esi@1
  int v3; // eax@1
  NiTListItem<Effect *> *v4; // ecx@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v5; // eax@4
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >,bool> result; // [sp+4h] [bp-8h]@4

  v2 = this;
  v3 = ((int (*)(void))this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem)();
  *(_DWORD *)(v3 + 8) = pkEffect;
  *(_DWORD *)v3 = 0;
  *(_DWORD *)(v3 + 4) = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  v4 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  if ( v4 )
    v4->m_pkNext = (NiTListItem<Effect *> *)v3;
  else
    v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<Effect *> *)v3;
  ++*(_DWORD *)&v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<Effect *> *)v3;
  v5 = std::_Tree_val<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Buynode<QuestStartItemWin____>(
         (std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v2->m_setEffectHandle,
         (unsigned int *)&pkEffect);
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::_Linsert(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v2->m_setEffectHandle,
    &result,
    v5,
    0);
}

//----- (00694E40) --------------------------------------------------------
void __thiscall EffectMgr::SetShow(EffectMgr *this, Effect *pkEffect, bool _bShow, bool bWithWorld)
{
  EffectMgr *v4; // edi@1
  NiTListItem<Effect *> *v5; // eax@1
  Effect *v6; // esi@2

  v4 = this;
  v5 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v5 )
  {
    while ( 1 )
    {
      v6 = v5->m_element;
      v5 = v5->m_pkNext;
      if ( pkEffect == v6 )
        break;
      if ( !v5 )
        return;
    }
    v6->baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v6, _bShow);
    if ( bWithWorld )
    {
      if ( _bShow )
        EffectMgr::AttachEffectToWorld(v4, v6);
      else
        EffectMgr::DetachEffectFromWorld(v4, v6);
    }
  }
}

//----- (00694EA0) --------------------------------------------------------
void __thiscall EffectMgr::CreateActionEffect(EffectMgr *this, ActionEffectInfo *pkInfo, unsigned int uiCasterEventCode, float fOffSet, Char *pkCaster, Char *pkTarget, bool bGroundPointEffect, unsigned __int16 kCurSkillID, NiControllerSequence *pkSeq)
{
  Char *v9; // esi@2
  void *v10; // eax@3
  ActionInfo::EFF_POS v11; // ebx@5
  bool v12; // zf@6
  NiPoint3 *v13; // eax@7
  NiPoint3 *v14; // eax@10
  NiPoint3 *v15; // eax@13
  NiPoint3 *v16; // eax@16
  NiPoint3 *v17; // eax@19
  NiPoint3 *v18; // eax@22
  Char *v19; // edi@25
  NiPoint3 *v20; // eax@26
  char *v21; // ecx@26
  float v22; // edx@27
  NiPoint3 *v23; // eax@27
  float v24; // ecx@27
  float v25; // edx@27
  int v26; // eax@31
  NiNode *v27; // ecx@31
  void *v28; // edi@32
  AbStateInfecteeVtbl *v29; // eax@33
  int v30; // eax@33
  NiPoint3 *v31; // eax@35
  NiPoint3 *v32; // eax@36
  Char *v33; // ecx@38
  NiNode *v34; // eax@40
  NiPoint3 *v35; // eax@41
  float v36; // ST04_4@44
  float v37; // ST00_4@44
  NiNode *v38; // eax@47
  NiPoint3 *v39; // eax@49
  NiPoint3 *v40; // eax@52
  ActiveSkillInfo *v41; // eax@56
  int v42; // esi@57
  char *v43; // eax@58
  NiTextKeyExtraData *v44; // eax@61
  unsigned int v45; // esi@62
  NiTextKey *v46; // edi@63
  unsigned int v47; // ebx@63
  const char *v48; // ecx@64
  NiObject *v49; // eax@69
  CharDecal *v50; // eax@69
  CharDecal *v51; // esi@69
  float v52; // ecx@70
  float v53; // edx@70
  Char *v54; // eax@70
  Char *v55; // ebx@74
  void *v56; // edi@75
  NiObject *v57; // eax@76
  int v58; // eax@76
  int v59; // edi@76
  void *v60; // edi@80
  NiObject *v61; // eax@81
  int v62; // eax@81
  void (__thiscall *v63)(_DWORD, _DWORD); // edx@83
  NiNode *v64; // ST0C_4@89
  NiNode *v65; // eax@89
  EffectMgr *v66; // esi@89
  float v67; // ST0C_4@89
  char v68; // [sp+20h] [bp-110h]@52
  char v69; // [sp+2Ch] [bp-104h]@26
  char v70; // [sp+38h] [bp-F8h]@49
  NiPoint3 result; // [sp+44h] [bp-ECh]@7
  char v72; // [sp+50h] [bp-E0h]@48
  char v73; // [sp+5Ch] [bp-D4h]@19
  char v74; // [sp+68h] [bp-C8h]@41
  char v75; // [sp+74h] [bp-BCh]@26
  char v76; // [sp+80h] [bp-B0h]@36
  char v77; // [sp+8Ch] [bp-A4h]@22
  char v78; // [sp+98h] [bp-98h]@35
  char v79; // [sp+A4h] [bp-8Ch]@16
  char v80; // [sp+B0h] [bp-80h]@30
  char v81; // [sp+BCh] [bp-74h]@10
  char v82; // [sp+C8h] [bp-68h]@30
  char v83; // [sp+D4h] [bp-5Ch]@13
  unsigned int dwGroundPointX; // [sp+E0h] [bp-50h]@44
  int iDir; // [sp+E4h] [bp-4Ch]@5
  unsigned int dwGroundPointY; // [sp+E8h] [bp-48h]@44
  NiPoint3 kMyPos; // [sp+ECh] [bp-44h]@26
  NiPoint3 kDir; // [sp+F8h] [bp-38h]@27
  EffectMgr *thisa; // [sp+104h] [bp-2Ch]@1
  char *pcFile; // [sp+108h] [bp-28h]@5
  __int64 bIsDecal; // [sp+10Fh] [bp-21h]@6
  float v92; // [sp+118h] [bp-18h]@7
  float v93; // [sp+11Ch] [bp-14h]@7
  Char *pkDestChar; // [sp+120h] [bp-10h]@5
  int v95; // [sp+12Ch] [bp-4h]@75
  float fSize; // [sp+138h] [bp+8h]@56
  NiTextKeyExtraData *pkEx; // [sp+140h] [bp+10h]@61
  char bStopMotionClear_3; // [sp+147h] [bp+17h]@3
  float fLifeTime; // [sp+148h] [bp+18h]@56
  float fLifeTimea; // [sp+148h] [bp+18h]@91

  thisa = this;
  if ( pkInfo )
  {
    v9 = pkCaster;
    if ( pkCaster )
    {
      v10 = pkInfo->GrapicFile;
      bStopMotionClear_3 = 0;
      if ( pkInfo->GrapicFile[0] == 42 )
      {
        bStopMotionClear_3 = 1;
        v10 = &pkInfo->GrapicFile[1];
      }
      pcFile = (char *)v10;
      v11 = ActionInfoTable::GetEffPos(pkInfo->GEffectPos, 0);
      iDir = pkInfo->Geffectdirection;
      pkDestChar = 0;
      pcFile = (char *)EffectMgr::GetEffectNode(thisa, pcFile);
      if ( pcFile )
      {
        v12 = pkInfo->IsDecal == 0;
        *(_DWORD *)((char *)&bIsDecal + 1) = 0;
        LODWORD(bIsDecal) = !v12;
        switch ( v11 )
        {
          case 0:
            v13 = Char::GetHairPos(v9, &result);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v13->x);
            v92 = v13->y;
            v93 = v13->z;
            if ( v9 != (Char *)-776 )
              *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[1];
            pkDestChar = v9;
            break;
          case 1:
            v14 = Char::GetChestPos(v9, (NiPoint3 *)&v81);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v14->x);
            v92 = v14->y;
            v93 = v14->z;
            if ( v9 != (Char *)-776 )
              *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[5];
            pkDestChar = v9;
            break;
          case 2:
            v15 = Char::GetLeftHandPos(v9, (NiPoint3 *)&v83);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v15->x);
            v92 = v15->y;
            v93 = v15->z;
            if ( v9 != (Char *)-776 )
              *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[11];
            pkDestChar = v9;
            break;
          case 3:
            v16 = Char::GetRightHandPos(v9, (NiPoint3 *)&v79);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v16->x);
            v92 = v16->y;
            v93 = v16->z;
            if ( v9 != (Char *)-776 )
              *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[12];
            pkDestChar = v9;
            break;
          case 4:
            v17 = Char::GetLeftShoesPos(v9, (NiPoint3 *)&v73);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v17->x);
            v92 = v17->y;
            v93 = v17->z;
            if ( v9 != (Char *)-776 )
              *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[17];
            pkDestChar = v9;
            break;
          case 5:
            v18 = Char::GetRightShoesPos(v9, (NiPoint3 *)&v77);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v18->x);
            v92 = v18->y;
            v93 = v18->z;
            if ( v9 != (Char *)-776 )
              *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[18];
            pkDestChar = v9;
            break;
          case 6:
            v19 = pkTarget;
            if ( !pkTarget )
              return;
            v20 = Char::GetChestPos(v9, (NiPoint3 *)&v69);
            kMyPos.x = v20->x;
            v21 = &v75;
            goto LABEL_27;
          case 7:
            v19 = pkTarget;
            if ( !pkTarget )
              return;
            v20 = Char::GetChestPos(v9, (NiPoint3 *)&v82);
            kMyPos.x = v20->x;
            v21 = &v80;
LABEL_27:
            v22 = v20->y;
            kMyPos.z = v20->z;
            kMyPos.y = v22;
            v23 = Char::GetChestPos(v19, (NiPoint3 *)v21);
            v24 = v23->x;
            v25 = v23->y;
            kDir.z = kMyPos.z;
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v24);
            v92 = v25;
            v93 = kMyPos.z;
            goto LABEL_28;
          case 8:
            v26 = ((int (__thiscall *)(Char *))v9->baseclass_0.vfptr[6].Deaffect)(v9);
            *(_DWORD *)((char *)&bIsDecal + 5) = *(_DWORD *)v26;
            v27 = v9->m_spScene.m_pObject;
            LODWORD(v92) = *(_DWORD *)(v26 + 4);
            LODWORD(v93) = *(_DWORD *)(v26 + 8);
            *(_DWORD *)((char *)&bIsDecal + 1) = v27;
            pkDestChar = v9;
            break;
          case 9:
            v28 = pkTarget;
            if ( !pkTarget )
              return;
            v29 = pkTarget->baseclass_0.vfptr;
            *(_DWORD *)((char *)&bIsDecal + 1) = pkTarget->m_spScene.m_pObject;
            v30 = ((int (__thiscall *)(Char *))v29[6].Deaffect)(pkTarget);
            *(_DWORD *)((char *)&bIsDecal + 5) = *(_DWORD *)v30;
            LODWORD(v92) = *(_DWORD *)(v30 + 4);
            LODWORD(v93) = *(_DWORD *)(v30 + 8);
            goto LABEL_54;
          case 10:
            v28 = pkTarget;
            if ( !pkTarget )
              return;
            v31 = Char::GetChestPos(pkTarget, (NiPoint3 *)&v78);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v31->x);
            v92 = v31->y;
            v93 = v31->z;
            goto LABEL_54;
          case 11:
            v32 = Char::GetWorldPos(v9, (NiPoint3 *)&v76);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v32->x);
            v92 = v32->y;
            v93 = v32->z;
            if ( v9 == (Char *)-776 )
              goto LABEL_28;
            *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[25];
            pkDestChar = v9;
            break;
          case 12:
            v33 = pkTarget;
            if ( !pkTarget || pkTarget == (Char *)-776 )
              return;
            v34 = pkTarget->m_kCharShape.m_apkLinkNode[25];
            pkDestChar = pkTarget;
            *(_DWORD *)((char *)&bIsDecal + 1) = v34;
            if ( !v34 )
              goto LABEL_42;
            v35 = Char::GetWorldPos(pkTarget, (NiPoint3 *)&v74);
            goto LABEL_43;
          case 13:
            Char::GetSkillTargetGroundPoint(v9, &dwGroundPointX, &dwGroundPointY);
            v36 = (double)dwGroundPointY;
            v37 = (double)dwGroundPointX;
            World::GetGroundPos(&g_kWorld, v37, v36, (NiPoint3 *)((char *)&bIsDecal + 5), 0);
            Char::ResetSkillTargetGroundPoint(v9);
            break;
          case 14:
            v33 = pkTarget;
            if ( !pkTarget || pkTarget == (Char *)-776 )
              return;
            v38 = pkTarget->m_kCharShape.m_apkLinkNode[1];
            pkDestChar = pkTarget;
            *(_DWORD *)((char *)&bIsDecal + 1) = v38;
            if ( v38 )
              v35 = Char::GetWorldPos(pkTarget, (NiPoint3 *)&v72);
            else
LABEL_42:
              v35 = (NiPoint3 *)((int (*)(void))v33->baseclass_0.vfptr[6].Deaffect)();
LABEL_43:
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v35->x);
            v92 = v35->y;
            v93 = v35->z;
            break;
          case 15:
            v39 = Char::GetTopLinkPos(v9, (NiPoint3 *)&v70);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v39->x);
            v92 = v39->y;
            v93 = v39->z;
            if ( v9 == (Char *)-776 )
            {
LABEL_28:
              pkDestChar = v9;
            }
            else
            {
              *(_DWORD *)((char *)&bIsDecal + 1) = v9->m_kCharShape.m_apkLinkNode[8];
              pkDestChar = v9;
            }
            break;
          case 16:
            v28 = pkTarget;
            if ( !pkTarget )
              return;
            v40 = Char::GetTopLinkPos(pkTarget, (NiPoint3 *)&v68);
            *(_DWORD *)((char *)&bIsDecal + 5) = LODWORD(v40->x);
            v92 = v40->y;
            v93 = v40->z;
            if ( pkTarget != (Char *)-776 )
              *(_DWORD *)((char *)&bIsDecal + 1) = pkTarget->m_kCharShape.m_apkLinkNode[8];
LABEL_54:
            pkDestChar = (Char *)v28;
            break;
          default:
            break;
        }
        if ( (_BYTE)bIsDecal )
        {
          fSize = 0.0;
          fLifeTime = 0.0;
          v41 = IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::GetByID(kCurSkillID, 1);
          if ( v41 )
          {
            v42 = (int)&v41->Area;
            if ( !v41->Area )
            {
              v43 = fs("pkSkillInfo->Area == 0, SkillID[ %d ]\n");
              OutputDebugStringA(v43);
            }
            fSize = (double)*(unsigned int *)v42;
          }
          if ( pkSeq && (v44 = pkSeq->m_spTextKeys.m_pObject, (pkEx = v44) != 0) && (v45 = 0, v44->m_uiNumKeys) )
          {
            while ( 1 )
            {
              v46 = pkEx->m_pKeys;
              v47 = pkEx->m_uiNumKeys;
              if ( !v46 )
                break;
              v48 = v46[v45].m_pText;
              if ( v48 && !strcmp("Hit", v48) )
              {
                fLifeTime = v46[v45].m_fTime;
                goto LABEL_69;
              }
              fLifeTime = pkSeq->m_fEndKeyTime;
              OutputDebugStringA("HitTime Á¤ÀÇ µÇ¾îÀÖÁ");
              ++v45;
              if ( v45 >= v47 )
                goto LABEL_69;
            }
          }
          else
          {
LABEL_69:
            v49 = NiObject::Clone((NiObject *)pcFile);
            v50 = DecalMgr::AddDecal(&stru_B31F08, (NiNode *)v49);
            v51 = v50;
            if ( v50 )
            {
              CharDecal::SetLifeTime(v50, fLifeTime);
              CharDecal::SetRadius(v51, fSize);
              v52 = v92;
              v53 = v93;
              LODWORD(v51->m_kPos.x) = *(_DWORD *)((char *)&bIsDecal + 5);
              v54 = pkDestChar;
              v51->m_kPos.y = v52;
              v51->m_kPos.z = v53;
              if ( v54 )
                CharDecal::SetCharHandle(v51, v54->m_kHandle);
            }
          }
        }
        else
        {
          if ( pkInfo->GEffectKeep && *(_DWORD *)((char *)&bIsDecal + 1) && (v55 = pkDestChar) != 0 )
          {
            v56 = operator new(0x21Cu);
            v95 = 0;
            if ( v56 )
            {
              v57 = NiObject::Clone((NiObject *)pcFile);
              AttachEff::AttachEff((AttachEff *)v56, (NiNode *)v57, 0, v9);
              v59 = v58;
            }
            else
            {
              v59 = 0;
            }
            v95 = -1;
            AttachEff::SetTargetNode((AttachEff *)v59, *(NiNode **)((char *)&bIsDecal + 1), &v55->baseclass_3c);
            if ( bStopMotionClear_3 )
              *(_DWORD *)(v59 + 312) = uiCasterEventCode;
          }
          else
          {
            v60 = operator new(0x20Cu);
            v95 = 1;
            if ( v60 )
            {
              v61 = NiObject::Clone((NiObject *)pcFile);
              Effect::Effect((Effect *)v60, (NiNode *)v61, 1, v9);
              v59 = v62;
            }
            else
            {
              v59 = 0;
            }
            v63 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v59 + 28);
            v95 = -1;
            v63(v59, (char *)&bIsDecal + 5);
            if ( bStopMotionClear_3 )
              *(_DWORD *)(v59 + 312) = uiCasterEventCode;
          }
          if ( iDir && (!pkInfo->GEffectKeep || v9 != pkDestChar) )
          {
            v9->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v9, (unsigned int)&kDir);
            (*(void (__thiscall **)(int, NiPoint3 *))(*(_DWORD *)v59 + 40))(v59, &kDir);
          }
          v64 = v9->m_spScene.m_pObject;
          v65 = (NiNode *)(*(int (__thiscall **)(int))(*(_DWORD *)v59 + 8))(v59);
          v66 = thisa;
          v67 = EffectMgr::CalculateEffScaleRatio(thisa, v65, v64);
          Effect::SetScale((Effect *)v59, v67);
          if ( fOffSet < 0.0 )
            fOffSet = 0.0;
          fLifeTimea = Timer::ms_fCurTime + fOffSet;
          (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v59 + 60))(v59, LODWORD(fLifeTimea));
          EffectMgr::Add(v66, (Effect *)v59);
          EffectMgr::AttachEffectToWorld(v66, (Effect *)v59);
        }
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00695640) --------------------------------------------------------
void __thiscall EffectMgr::CreateActionEffect(EffectMgr *this, ActionInfo *pkInfo, int iIndex, Char *pkCaster, Char *pkTarget, bool bGroundPointEffect)
{
  Char *v6; // esi@2
  char *v7; // edx@3
  int v8; // edx@4
  int v9; // eax@6
  Char *v10; // ebx@6
  float v11; // ST04_4@9
  float v12; // ST00_4@9
  NiPoint3 *v13; // eax@11
  NiPoint3 *v14; // eax@14
  NiPoint3 *v15; // eax@17
  NiPoint3 *v16; // eax@20
  NiPoint3 *v17; // eax@23
  NiPoint3 *v18; // eax@26
  Char *v19; // edi@29
  NiPoint3 *v20; // eax@30
  char *v21; // ecx@30
  float v22; // edx@31
  NiPoint3 *v23; // eax@31
  float v24; // ecx@31
  float v25; // edx@31
  int v26; // eax@35
  void *v27; // ecx@35
  AbStateInfecteeVtbl *v28; // eax@37
  int v29; // eax@37
  NiPoint3 *v30; // eax@40
  NiPoint3 *v31; // eax@41
  Char *v32; // ecx@43
  float v33; // ST04_4@48
  float v34; // ST00_4@48
  NiPoint3 *v35; // eax@53
  NiPoint3 *v36; // eax@56
  void *v37; // edi@62
  NiObject *v38; // eax@63
  int v39; // eax@63
  int v40; // edi@63
  void *v41; // edi@67
  NiObject *v42; // eax@68
  int v43; // eax@68
  int v44; // edi@68
  void (__thiscall *v45)(_DWORD, _DWORD); // edx@70
  EffectMgr *v46; // esi@76
  char v47; // [sp+20h] [bp-10Ch]@56
  char v48; // [sp+2Ch] [bp-100h]@30
  char v49; // [sp+38h] [bp-F4h]@53
  NiPoint3 result; // [sp+44h] [bp-E8h]@11
  char v51; // [sp+50h] [bp-DCh]@52
  char v52; // [sp+5Ch] [bp-D0h]@23
  char v53; // [sp+68h] [bp-C4h]@46
  char v54; // [sp+74h] [bp-B8h]@30
  char v55; // [sp+80h] [bp-ACh]@41
  char v56; // [sp+8Ch] [bp-A0h]@26
  char v57; // [sp+98h] [bp-94h]@40
  char v58; // [sp+A4h] [bp-88h]@20
  char v59; // [sp+B0h] [bp-7Ch]@34
  char v60; // [sp+BCh] [bp-70h]@14
  char v61; // [sp+C8h] [bp-64h]@34
  char v62; // [sp+D4h] [bp-58h]@17
  int iDir; // [sp+E0h] [bp-4Ch]@6
  EffectMgr *thisa; // [sp+E4h] [bp-48h]@1
  unsigned int ePos; // [sp+E8h] [bp-44h]@6
  NiPoint3 kMyPos; // [sp+ECh] [bp-40h]@30
  NiPoint3 kDir; // [sp+F8h] [bp-34h]@31
  NiObject *pkNode; // [sp+104h] [bp-28h]@6
  unsigned int dwGroundPointX; // [sp+108h] [bp-24h]@8
  unsigned int dwGroundPointY; // [sp+10Ch] [bp-20h]@8
  NiNode *pkSocket; // [sp+110h] [bp-1Ch]@7
  NiPoint3 kPos; // [sp+114h] [bp-18h]@9
  int v73; // [sp+128h] [bp-4h]@62
  char bStopMotionClear_3; // [sp+13Fh] [bp+13h]@3
  Effect *pkEffect; // [sp+144h] [bp+18h]@65

  thisa = this;
  if ( pkInfo )
  {
    v6 = pkCaster;
    if ( pkCaster )
    {
      v7 = (char *)pkInfo + 32 * iIndex + iIndex;
      bStopMotionClear_3 = 0;
      if ( v7[116] == 42 )
      {
        bStopMotionClear_3 = 1;
        v8 = (int)(v7 + 117);
      }
      else
      {
        v8 = (int)(v7 + 116);
      }
      v9 = pkInfo->EffDir[iIndex];
      ePos = pkInfo->EffPos[iIndex];
      iDir = v9;
      v10 = 0;
      pkNode = (NiObject *)EffectMgr::GetEffectNode(this, (char *)v8);
      if ( pkNode )
      {
        pkSocket = 0;
        if ( bGroundPointEffect && Char::GetSkillTargetGroundPoint(v6, &dwGroundPointX, &dwGroundPointY) )
        {
          v11 = (double)dwGroundPointY;
          v12 = (double)dwGroundPointX;
          World::GetGroundPos(&g_kWorld, v12, v11, &kPos, 0);
          Char::ResetSkillTargetGroundPoint(v6);
        }
        else
        {
          switch ( ePos )
          {
            case 0u:
              v13 = Char::GetHairPos(v6, &result);
              kPos.x = v13->x;
              kPos.y = v13->y;
              kPos.z = v13->z;
              if ( v6 != (Char *)-776 )
                pkSocket = v6->m_kCharShape.m_apkLinkNode[1];
              v10 = v6;
              break;
            case 1u:
              v14 = Char::GetChestPos(v6, (NiPoint3 *)&v60);
              kPos.x = v14->x;
              kPos.y = v14->y;
              kPos.z = v14->z;
              if ( v6 != (Char *)-776 )
                pkSocket = v6->m_kCharShape.m_apkLinkNode[5];
              v10 = v6;
              break;
            case 2u:
              v15 = Char::GetLeftHandPos(v6, (NiPoint3 *)&v62);
              kPos.x = v15->x;
              kPos.y = v15->y;
              kPos.z = v15->z;
              if ( v6 != (Char *)-776 )
                pkSocket = v6->m_kCharShape.m_apkLinkNode[11];
              v10 = v6;
              break;
            case 3u:
              v16 = Char::GetRightHandPos(v6, (NiPoint3 *)&v58);
              kPos.x = v16->x;
              kPos.y = v16->y;
              kPos.z = v16->z;
              if ( v6 != (Char *)-776 )
                pkSocket = v6->m_kCharShape.m_apkLinkNode[12];
              v10 = v6;
              break;
            case 4u:
              v17 = Char::GetLeftShoesPos(v6, (NiPoint3 *)&v52);
              kPos.x = v17->x;
              kPos.y = v17->y;
              kPos.z = v17->z;
              if ( v6 != (Char *)-776 )
                pkSocket = v6->m_kCharShape.m_apkLinkNode[17];
              v10 = v6;
              break;
            case 5u:
              v18 = Char::GetRightShoesPos(v6, (NiPoint3 *)&v56);
              kPos.x = v18->x;
              kPos.y = v18->y;
              kPos.z = v18->z;
              if ( v6 != (Char *)-776 )
                pkSocket = v6->m_kCharShape.m_apkLinkNode[18];
              v10 = v6;
              break;
            case 6u:
              v19 = pkTarget;
              if ( !pkTarget )
                return;
              v20 = Char::GetChestPos(v6, (NiPoint3 *)&v48);
              kMyPos.x = v20->x;
              v21 = &v54;
              goto LABEL_31;
            case 7u:
              v19 = pkTarget;
              if ( !pkTarget )
                return;
              v20 = Char::GetChestPos(v6, (NiPoint3 *)&v61);
              kMyPos.x = v20->x;
              v21 = &v59;
LABEL_31:
              v22 = v20->y;
              kMyPos.z = v20->z;
              kMyPos.y = v22;
              v23 = Char::GetChestPos(v19, (NiPoint3 *)v21);
              v24 = v23->x;
              v25 = v23->y;
              kDir.z = kMyPos.z;
              kPos.x = v24;
              kPos.y = v25;
              kPos.z = kMyPos.z;
              goto LABEL_32;
            case 8u:
              v26 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[6].Deaffect)(v6);
              LODWORD(kPos.x) = *(_DWORD *)v26;
              v27 = v6->m_spScene.m_pObject;
              LODWORD(kPos.y) = *(_DWORD *)(v26 + 4);
              LODWORD(kPos.z) = *(_DWORD *)(v26 + 8);
              v10 = v6;
              goto LABEL_58;
            case 9u:
              v10 = pkTarget;
              if ( !pkTarget )
                return;
              v28 = pkTarget->baseclass_0.vfptr;
              pkSocket = pkTarget->m_spScene.m_pObject;
              v29 = ((int (__thiscall *)(Char *))v28[6].Deaffect)(pkTarget);
              goto LABEL_38;
            case 0xAu:
              v10 = pkTarget;
              if ( !pkTarget )
                return;
              v30 = Char::GetChestPos(pkTarget, (NiPoint3 *)&v57);
              kPos.x = v30->x;
              kPos.y = v30->y;
              kPos.z = v30->z;
              break;
            case 0xBu:
              v31 = Char::GetWorldPos(v6, (NiPoint3 *)&v55);
              kPos.x = v31->x;
              kPos.y = v31->y;
              kPos.z = v31->z;
              if ( v6 == (Char *)-776 )
                goto LABEL_32;
              pkSocket = v6->m_kCharShape.m_apkLinkNode[25];
              v10 = v6;
              break;
            case 0xCu:
              v32 = pkTarget;
              if ( !pkTarget || pkTarget == (Char *)-776 )
                return;
              v10 = pkTarget;
              pkSocket = pkTarget->m_kCharShape.m_apkLinkNode[25];
              if ( !pkSocket )
                goto LABEL_47;
              v29 = (int)Char::GetWorldPos(pkTarget, (NiPoint3 *)&v53);
              goto LABEL_38;
            case 0xDu:
              Char::GetSkillTargetGroundPoint(v6, &dwGroundPointX, &dwGroundPointY);
              v33 = (double)dwGroundPointY;
              v34 = (double)dwGroundPointX;
              World::GetGroundPos(&g_kWorld, v34, v33, &kPos, 0);
              break;
            case 0xEu:
              v32 = pkTarget;
              if ( !pkTarget || pkTarget == (Char *)-776 )
                return;
              v10 = pkTarget;
              pkSocket = pkTarget->m_kCharShape.m_apkLinkNode[1];
              if ( pkSocket )
                v29 = (int)Char::GetWorldPos(pkTarget, (NiPoint3 *)&v51);
              else
LABEL_47:
                v29 = ((int (*)(void))v32->baseclass_0.vfptr[6].Deaffect)();
LABEL_38:
              LODWORD(kPos.x) = *(_DWORD *)v29;
              LODWORD(kPos.y) = *(_DWORD *)(v29 + 4);
              LODWORD(kPos.z) = *(_DWORD *)(v29 + 8);
              break;
            case 0xFu:
              v35 = Char::GetTopLinkPos(v6, (NiPoint3 *)&v49);
              kPos.x = v35->x;
              kPos.y = v35->y;
              kPos.z = v35->z;
              if ( v6 == (Char *)-776 )
              {
LABEL_32:
                v10 = v6;
              }
              else
              {
                pkSocket = v6->m_kCharShape.m_apkLinkNode[8];
                v10 = v6;
              }
              break;
            case 0x10u:
              v10 = pkTarget;
              if ( !pkTarget )
                return;
              v36 = Char::GetTopLinkPos(pkTarget, (NiPoint3 *)&v47);
              kPos.x = v36->x;
              kPos.y = v36->y;
              kPos.z = v36->z;
              if ( pkTarget != (Char *)-776 )
              {
                v27 = pkTarget->m_kCharShape.m_apkLinkNode[8];
LABEL_58:
                pkSocket = (NiNode *)v27;
              }
              break;
            default:
              break;
          }
        }
        if ( pkInfo->EffKeep[iIndex] && pkSocket && v10 )
        {
          v37 = operator new(0x21Cu);
          v73 = 0;
          if ( v37 )
          {
            v38 = NiObject::Clone(pkNode);
            AttachEff::AttachEff((AttachEff *)v37, (NiNode *)v38, 0, v6);
            v40 = v39;
          }
          else
          {
            v40 = 0;
          }
          v73 = -1;
          pkEffect = (Effect *)v40;
          AttachEff::SetTargetNode((AttachEff *)v40, pkSocket, &v10->baseclass_3c);
          if ( bStopMotionClear_3 )
            *(_DWORD *)(v40 + 312) = pkInfo->uiEventCode;
        }
        else
        {
          v41 = operator new(0x20Cu);
          v73 = 1;
          if ( v41 )
          {
            v42 = NiObject::Clone(pkNode);
            Effect::Effect((Effect *)v41, (NiNode *)v42, 1, v6);
            v44 = v43;
          }
          else
          {
            v44 = 0;
          }
          v45 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v44 + 28);
          v73 = -1;
          pkEffect = (Effect *)v44;
          v45(v44, &kPos);
          if ( bStopMotionClear_3 )
            *(_DWORD *)(v44 + 312) = pkInfo->uiEventCode;
        }
        if ( iDir && (!pkInfo->EffKeep[iIndex] || v6 != v10) )
        {
          v6->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v6, (unsigned int)&kDir);
          pkEffect->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)pkEffect, (unsigned int)&kDir);
        }
        pkEffect->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)pkEffect, LODWORD(Timer::ms_fCurTime));
        v46 = thisa;
        EffectMgr::Add(thisa, pkEffect);
        EffectMgr::AttachEffectToWorld(v46, pkEffect);
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00695C80) --------------------------------------------------------
void __thiscall EffectMgr::CreateEffect(EffectMgr *this, ActionInfo *pkInfo, int iIndex, Char *pkCaster, Char *pkTarget)
{
  Char *v5; // esi@2
  char *v6; // ST08_4@3
  NiObject *v7; // edi@3
  void *v8; // ebx@4
  NiObject *v9; // eax@5
  Effect *v10; // eax@5
  Effect *v11; // ebx@5
  char *v12; // eax@10
  Char *v13; // ecx@10
  NiPoint3 *v14; // eax@11
  int v15; // eax@13
  Char *v16; // edi@17
  NiPoint3 *v17; // eax@18
  char *v18; // ecx@18
  float v19; // edx@19
  NiPoint3 *v20; // eax@19
  float v21; // ecx@19
  float v22; // edx@19
  EffectMgr *v23; // esi@32
  char v24; // [sp+1Ch] [bp-C4h]@29
  char v25; // [sp+28h] [bp-B8h]@13
  char v26; // [sp+34h] [bp-ACh]@26
  char v27; // [sp+40h] [bp-A0h]@15
  char v28; // [sp+4Ch] [bp-94h]@21
  char v29; // [sp+58h] [bp-88h]@16
  char v30; // [sp+64h] [bp-7Ch]@21
  char v31; // [sp+70h] [bp-70h]@10
  char v32; // [sp+7Ch] [bp-64h]@18
  NiPoint3 result; // [sp+88h] [bp-58h]@11
  char v34; // [sp+94h] [bp-4Ch]@18
  char v35; // [sp+A0h] [bp-40h]@14
  EffectMgr *thisa; // [sp+ACh] [bp-34h]@1
  NiPoint3 kTargetPos; // [sp+B0h] [bp-30h]@8
  NiPoint3 kMyPos; // [sp+BCh] [bp-24h]@18
  NiPoint3 kPos; // [sp+C8h] [bp-18h]@12
  int v40; // [sp+DCh] [bp-4h]@4
  int iDir; // [sp+E8h] [bp+8h]@3
  unsigned int ePos; // [sp+F0h] [bp+10h]@3

  thisa = this;
  if ( pkInfo )
  {
    v5 = pkCaster;
    if ( pkCaster )
    {
      v6 = (char *)pkInfo->EffFile + 32 * iIndex + iIndex;
      ePos = pkInfo->EffPos[iIndex];
      iDir = pkInfo->EffDir[iIndex];
      v7 = (NiObject *)EffectMgr::GetEffectNode(this, v6);
      if ( v7 )
      {
        v8 = operator new(0x20Cu);
        v40 = 0;
        if ( v8 )
        {
          v9 = NiObject::Clone(v7);
          Effect::Effect((Effect *)v8, (NiNode *)v9, 1, 0);
          v11 = v10;
        }
        else
        {
          v11 = 0;
        }
        v40 = -1;
        if ( iDir )
        {
          v5->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)v5, (unsigned int)&kTargetPos);
          v11->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v11, (unsigned int)&kTargetPos);
        }
        switch ( ePos )
        {
          case 0u:
            v12 = &v31;
            v13 = v5;
            goto LABEL_30;
          case 1u:
            v14 = Char::GetChestPos(v5, &result);
            goto LABEL_12;
          case 2u:
            v15 = (int)Char::GetLeftHandPos(v5, (NiPoint3 *)&v25);
            goto LABEL_31;
          case 3u:
            v14 = Char::GetRightHandPos(v5, (NiPoint3 *)&v35);
            goto LABEL_12;
          case 4u:
            v15 = (int)Char::GetLeftShoesPos(v5, (NiPoint3 *)&v27);
            goto LABEL_31;
          case 5u:
            v14 = Char::GetRightShoesPos(v5, (NiPoint3 *)&v29);
LABEL_12:
            kPos.x = v14->x;
            kPos.y = v14->y;
            kPos.z = v14->z;
            break;
          case 6u:
            v16 = pkTarget;
            if ( !pkTarget )
              return;
            v17 = Char::GetChestPos(v5, (NiPoint3 *)&v34);
            kMyPos.x = v17->x;
            v18 = &v32;
            goto LABEL_19;
          case 7u:
            v16 = pkTarget;
            if ( !pkTarget )
              return;
            v17 = Char::GetChestPos(v5, (NiPoint3 *)&v30);
            kMyPos.x = v17->x;
            v18 = &v28;
LABEL_19:
            v19 = v17->y;
            kMyPos.z = v17->z;
            kMyPos.y = v19;
            v20 = Char::GetChestPos(v16, (NiPoint3 *)v18);
            v21 = v20->x;
            v22 = v20->y;
            kTargetPos.z = kMyPos.z;
            kPos.x = v21;
            kPos.y = v22;
            kPos.z = kMyPos.z;
            break;
          case 8u:
            v15 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[6].Deaffect)(v5);
            goto LABEL_31;
          case 9u:
            if ( !pkTarget )
              return;
            v15 = ((int (*)(void))pkTarget->baseclass_0.vfptr[6].Deaffect)();
            goto LABEL_31;
          case 0xAu:
            if ( !pkTarget )
              return;
            v15 = (int)Char::GetChestPos(pkTarget, (NiPoint3 *)&v26);
            goto LABEL_31;
          case 0xEu:
            v13 = pkTarget;
            if ( !pkTarget || pkTarget == (Char *)-776 )
              return;
            v12 = &v24;
LABEL_30:
            v15 = (int)Char::GetHairPos(v13, (NiPoint3 *)v12);
LABEL_31:
            LODWORD(kPos.x) = *(_DWORD *)v15;
            LODWORD(kPos.y) = *(_DWORD *)(v15 + 4);
            LODWORD(kPos.z) = *(_DWORD *)(v15 + 8);
            break;
          default:
            break;
        }
        v11->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v11, LODWORD(Timer::ms_fCurTime));
        v11->baseclass_0.vfptr[7].__vecDelDtor((NiRefObject *)v11, (unsigned int)&kPos);
        v23 = thisa;
        EffectMgr::Add(thisa, v11);
        EffectMgr::AttachEffectToWorld(v23, v11);
      }
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00695F40) --------------------------------------------------------
void __thiscall EffectMgr::RemoveClientEff(EffectMgr *this, Effect *eff)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v2; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // edx@1
  int v4; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > j; // eax@5
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // eax@8

  v2 = this->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v2->_Left;
  if ( v2->_Left != v2 )
  {
    while ( *(Effect **)(*(_DWORD *)&v3 + 16) != eff )
    {
      if ( !*(_BYTE *)(*(_DWORD *)&v3 + 21) )
      {
        v4 = *(_DWORD *)(*(_DWORD *)&v3 + 8);
        if ( *(_BYTE *)(v4 + 21) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v3 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 21);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v3 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v3 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v4;
                !*(_BYTE *)(*(_DWORD *)&j + 21);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&j )
            v3 = j;
        }
      }
      if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *)v3 == v2 )
        return;
    }
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&this->m_kClientEffectMap,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&eff,
      v3);
  }
}

//----- (00695FC0) --------------------------------------------------------
void __thiscall EffectMgr::RemoveAllClientEff(EffectMgr *this)
{
  EffectMgr *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v3; // esi@1
  Effect *v4; // ecx@2
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v5; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *j; // eax@6
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *i; // eax@9
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v8; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v9; // ebx@14
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v10; // esi@14

  v1 = this;
  v2 = this->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      v4 = v3->_Myval.baseclass_0.second;
      if ( v4 )
        ((void (*)(void))v4->baseclass_0.vfptr[16].__vecDelDtor)();
      if ( !v3->_Isnil )
      {
        v5 = v3->_Right;
        if ( v5->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  v8 = v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v9 = v8->_Parent;
  v10 = v8->_Parent;
  if ( !v9->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
        (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_kClientEffectMap,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v10->_Right);
      v10 = v10->_Left;
      operator delete(v9);
      v9 = v10;
    }
    while ( !v10->_Isnil );
  }
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left = v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
}

//----- (00696070) --------------------------------------------------------
void __thiscall EffectMgr::Remove(EffectMgr *this, Effect *pkEffect)
{
  EffectMgr *v2; // ebx@1
  NiTListItem<Effect *> *v3; // eax@1
  NiTListItem<Effect *> *v4; // ecx@1
  void *v5; // esi@2
  int v6; // ecx@6
  Effect *v7; // edx@6
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA result; // [sp+4h] [bp-Ch]@11
  void *pkEff; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v4 )
  {
    while ( 1 )
    {
      v5 = v4->m_element;
      v4 = v4->m_pkNext;
      pkEff = v5;
      if ( pkEffect == v5 )
        break;
      if ( !v4 )
        return;
    }
    if ( v3 )
    {
      while ( 1 )
      {
        v6 = (int)&v3->m_element;
        v7 = (Effect *)v3;
        v3 = v3->m_pkNext;
        if ( v5 == *(void **)v6 )
          break;
        if ( !v3 )
          goto LABEL_8;
      }
    }
    else
    {
LABEL_8:
      v7 = 0;
    }
    pkEffect = v7;
    if ( v7 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v2,
        (void **)&pkEffect);
    std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(
      (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)&v2->m_setEffectHandle,
      &result,
      (NiAVObject *const *)&pkEff);
    std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v2->m_setEffectHandle,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&pkEffect,
      *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&result,
      *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&result.baseclass_0.second.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]);
    if ( v5 )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
  }
}

//----- (00696110) --------------------------------------------------------
void __thiscall EffectMgr::RemoveEffect(EffectMgr *this, Char *pkEffect)
{
  EffectMgr *v2; // ebx@1
  NiTListItem<Effect *> *v3; // eax@1
  NiTListItem<Effect *> *v4; // ecx@1
  Effect *v5; // esi@2
  int v6; // ecx@6
  Char *v7; // edx@6
  std::pair<std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > >,std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiA result; // [sp+4h] [bp-Ch]@11
  Effect *pkEff; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v4 )
  {
    while ( 1 )
    {
      v5 = v4->m_element;
      v4 = v4->m_pkNext;
      pkEff = v5;
      if ( pkEffect == v5->m_pkCaster )
        break;
      if ( !v4 )
        return;
    }
    if ( v3 )
    {
      while ( 1 )
      {
        v6 = (int)&v3->m_element;
        v7 = (Char *)v3;
        v3 = v3->m_pkNext;
        if ( v5 == *(Effect **)v6 )
          break;
        if ( !v3 )
          goto LABEL_8;
      }
    }
    else
    {
LABEL_8:
      v7 = 0;
    }
    pkEffect = v7;
    if ( v7 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v2,
        (void **)&pkEffect);
    std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Eqrange(
      (std::_Tree<std::_Tset_traits<NiAVObject *,std::less<NiAVObject *>,std::allocator<NiAVObject *>,0> > *)&v2->m_setEffectHandle,
      &result,
      (NiAVObject *const *)&pkEff);
    std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v2->m_setEffectHandle,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&pkEffect,
      *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&result,
      *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&result.baseclass_0.second.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]);
    v5->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  }
}

//----- (006961B0) --------------------------------------------------------
void __thiscall EffectMgr::RemoveClientEff(EffectMgr *this, unsigned int uiEffType)
{
  EffectMgr *v2; // ebx@1
  int v3; // esi@1
  int v4; // ecx@3
  int v5; // eax@6
  int j; // eax@7
  int i; // eax@10
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::les result; // [sp+Ch] [bp-Ch]@1
  unsigned int _Off; // [sp+14h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_int_Effect___std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Effect__>>_1>>::_Eqrange(
    &this->m_kClientEffectMap.baseclass_0,
    &result,
    &uiEffType);
  _Off = 0;
  std::_Distance2<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>>_unsigned_int>(
    *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > *)&result,
    *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > *)&result.baseclass_0.second.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0],
    &_Off,
    (std::bidirectional_iterator_tag)uiEffType);
  v3 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                     (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->m_kClientEffectMap,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result.baseclass_0.second,
                     &uiEffType)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( (signed int)_Off > 0 )
  {
    do
    {
      if ( (std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *)v3 != v2->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        v4 = *(_DWORD *)(v3 + 16);
        if ( v4 )
          (*(void (**)(void))(*(_DWORD *)v4 + 64))();
      }
      if ( !*(_BYTE *)(v3 + 21) )
      {
        v5 = *(_DWORD *)(v3 + 8);
        if ( *(_BYTE *)(v5 + 21) )
        {
          for ( i = *(_DWORD *)(v3 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) )
          {
            if ( v3 != *(_DWORD *)(i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(_DWORD *)(v3 + 8);
          for ( j = *(_DWORD *)v5; !*(_BYTE *)(j + 21); j = *(_DWORD *)j )
            v3 = j;
        }
      }
      --_Off;
    }
    while ( _Off );
  }
  std::_Tree<std::_Tmap_traits<unsigned_int_Effect___std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Effect__>>_1>>::_Eqrange(
    &v2->m_kClientEffectMap.baseclass_0,
    &result,
    &uiEffType);
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->m_kClientEffectMap,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&uiEffType,
    *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result.baseclass_0.second.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]);
}

//----- (00696290) --------------------------------------------------------
void __thiscall EffectMgr::Update(EffectMgr *this, float fTime)
{
  EffectMgr *v2; // ebx@1
  NiTListItem<Effect *> *v3; // ecx@1
  NiTListItem<Effect *> *v4; // edi@1
  Effect *v5; // esi@2
  NiTListItem<Effect *> *v6; // eax@3
  NiTListItem<Effect *> *i; // esi@8
  NiTListItem<Effect *> *v8; // eax@9
  NiTListItem<Effect *> *v9; // ecx@9
  Effect *v10; // edi@12
  NiTListItem<Effect *> *v11; // eax@12
  int v12; // ecx@13
  NiTListItem<Effect *> *v13; // edx@13
  Effect *v14; // esi@17
  NiTListItem<Effect *> *v15; // eax@18
  int v16; // edx@22
  int v17; // ecx@22
  int v18; // eax@22
  int *v19; // eax@29
  NiTListItem<NiPointer<Effect> > *v20; // esi@32
  Effect *v21; // eax@33
  NiTListItem<Effect *> *v22; // eax@39
  NiTListItem<Effect *> *v23; // ecx@39
  Effect *v24; // edi@42
  NiTListItem<Effect *> *v25; // eax@42
  int v26; // ecx@43
  NiTListItem<Effect *> *v27; // edx@43
  NiTListItem<NiPointer<Effect> > *v28; // esi@48
  Effect *v29; // eax@49
  NiTListItem<Effect *> *v30; // esi@53
  void *(__thiscall *v31)(NiRefObject *, unsigned int); // eax@54
  NiTListItem<Effect *> *v32; // esi@56
  NiTListItem<Effect *> *v33; // ST14_4@57
  NiTListItem<Effect *> *v34; // esi@59
  NiTListItem<Effect *> *v35; // ST14_4@60
  NiTList<Effect *> kChainEffectList; // [sp+28h] [bp-34h]@1
  NiTList<Effect *> kDeadEffectList; // [sp+38h] [bp-24h]@1
  int v38; // [sp+48h] [bp-14h]@30
  int v39; // [sp+4Ch] [bp-10h]@27
  int v40; // [sp+58h] [bp-4h]@1

  v2 = this;
  v3 = 0;
  *(_DWORD *)&kChainEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  kChainEffectList.baseclass_0.baseclass_0.m_pkHead = 0;
  kChainEffectList.baseclass_0.baseclass_0.m_pkTail = 0;
  kChainEffectList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTList<Effect__>::_vftable_;
  v40 = 0;
  *(_DWORD *)&kDeadEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  kDeadEffectList.baseclass_0.baseclass_0.m_pkHead = 0;
  kDeadEffectList.baseclass_0.baseclass_0.m_pkTail = 0;
  kDeadEffectList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTList<Effect__>::_vftable_;
  v4 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  LOBYTE(v40) = 1;
  if ( v4 )
  {
    do
    {
      v5 = v4->m_element;
      v4 = v4->m_pkNext;
      if ( (unsigned __int8)v5->baseclass_0.vfptr[19].__vecDelDtor((NiRefObject *)v5, LODWORD(fTime)) )
      {
        v6 = kDeadEffectList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<Effect *>,Effect *> *)&kDeadEffectList);
        v6->m_element = v5;
        v6->m_pkNext = 0;
        v6->m_pkPrev = kDeadEffectList.baseclass_0.baseclass_0.m_pkTail;
        if ( kDeadEffectList.baseclass_0.baseclass_0.m_pkTail )
          kDeadEffectList.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v6;
        else
          kDeadEffectList.baseclass_0.baseclass_0.m_pkHead = v6;
        ++*(_DWORD *)&kDeadEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        kDeadEffectList.baseclass_0.baseclass_0.m_pkTail = v6;
      }
    }
    while ( v4 );
    for ( i = 0; *(_DWORD *)&kDeadEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]; i = 0 )
    {
      v8 = kDeadEffectList.baseclass_0.baseclass_0.m_pkTail;
      v9 = kDeadEffectList.baseclass_0.baseclass_0.m_pkTail->m_pkPrev;
      kDeadEffectList.baseclass_0.baseclass_0.m_pkTail = v9;
      if ( v9 == i )
        kDeadEffectList.baseclass_0.baseclass_0.m_pkHead = i;
      else
        v9->m_pkNext = i;
      v10 = v8->m_element;
      kDeadEffectList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<Effect *>,Effect *> *)&kDeadEffectList,
        v8);
      v11 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      --*(_DWORD *)&kDeadEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      if ( v11 != i )
      {
        while ( 1 )
        {
          v12 = (int)&v11->m_element;
          v13 = v11;
          v11 = v11->m_pkNext;
          if ( v10 == *(Effect **)v12 )
            break;
          if ( v11 == i )
            goto LABEL_37;
        }
        if ( v13 != i )
        {
          v14 = v10->m_pkChainEffect;
          if ( v14 )
          {
            v15 = kChainEffectList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<Effect *>,Effect *> *)&kChainEffectList);
            v15->m_element = v14;
            v15->m_pkNext = 0;
            v15->m_pkPrev = kChainEffectList.baseclass_0.baseclass_0.m_pkTail;
            if ( kChainEffectList.baseclass_0.baseclass_0.m_pkTail )
              kChainEffectList.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v15;
            else
              kChainEffectList.baseclass_0.baseclass_0.m_pkHead = v15;
            ++*(_DWORD *)&kChainEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
            kChainEffectList.baseclass_0.baseclass_0.m_pkTail = v15;
            v10->m_pkChainEffect = 0;
          }
          v16 = (int)v2->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
          v17 = (int)v2->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
          v18 = *(_DWORD *)(v17 + 4);
          while ( !*(_BYTE *)(v18 + 17) )
          {
            if ( *(_DWORD *)(v18 + 12) >= (unsigned int)v10 )
            {
              v17 = v18;
              v18 = *(_DWORD *)v18;
            }
            else
            {
              v18 = *(_DWORD *)(v18 + 8);
            }
          }
          v39 = v17;
          if ( v17 == v16 || (unsigned int)v10 < *(_DWORD *)(v17 + 12) )
          {
            v38 = v16;
            v19 = &v38;
          }
          else
          {
            v19 = &v39;
          }
          if ( *v19 != v16 )
          {
            v20 = v10->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
            while ( v20 )
            {
              v21 = v20->m_element.m_pObject;
              v20 = v20->m_pkNext;
              EffectMgr::DetachEffectFromWorld(v2, v21);
            }
            World::DetachEffect(&g_kWorld, v10->m_spNode.m_pObject);
          }
          v10->baseclass_0.vfptr[20].__vecDelDtor((NiRefObject *)v10, LODWORD(fTime));
          EffectMgr::Remove(v2, v10);
          if ( v2->m_pGuildAcademyMasterEffect == v10 )
            v2->m_pGuildAcademyMasterEffect = 0;
        }
      }
LABEL_37:
      ;
    }
    if ( *(NiTListItem<Effect *> **)&kChainEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] != i )
    {
      do
      {
        v22 = kChainEffectList.baseclass_0.baseclass_0.m_pkHead;
        v23 = kChainEffectList.baseclass_0.baseclass_0.m_pkHead->m_pkNext;
        kChainEffectList.baseclass_0.baseclass_0.m_pkHead = v23;
        if ( v23 == i )
          kChainEffectList.baseclass_0.baseclass_0.m_pkTail = i;
        else
          v23->m_pkPrev = i;
        v24 = v22->m_element;
        kChainEffectList.baseclass_0.baseclass_0.vfptr->DeleteItem(
          (NiTListBase<DFALL<Effect *>,Effect *> *)&kChainEffectList,
          v22);
        v25 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        --*(_DWORD *)&kChainEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        if ( v25 != i )
        {
          while ( 1 )
          {
            v26 = (int)&v25->m_element;
            v27 = v25;
            v25 = v25->m_pkNext;
            if ( v24 == *(Effect **)v26 )
              break;
            if ( v25 == i )
              goto LABEL_51;
          }
          if ( v27 != i && (NiTListItem<Effect *> *)v24 != i )
          {
            v28 = v24->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
            while ( v28 )
            {
              v29 = v28->m_element.m_pObject;
              v28 = v28->m_pkNext;
              EffectMgr::AttachEffectToWorld(v2, v29);
            }
            World::AttachEffect(&g_kWorld, v24->m_spNode.m_pObject);
            v24->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v24, LODWORD(Timer::ms_fCurTime));
          }
        }
LABEL_51:
        i = 0;
      }
      while ( *(_DWORD *)&kChainEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] );
    }
    v3 = 0;
  }
  v30 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v30 != v3 )
  {
    do
    {
      v31 = v30->m_element->baseclass_0.vfptr[14].__vecDelDtor;
      v30 = v30->m_pkNext;
      ((void (__stdcall *)(_DWORD))v31)(LODWORD(fTime));
    }
    while ( v30 );
    v3 = 0;
  }
  kDeadEffectList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTPointerListBase<DFALL<Effect__>_Effect__>::_vftable_;
  v32 = kDeadEffectList.baseclass_0.baseclass_0.m_pkHead;
  LOBYTE(v40) = 2;
  if ( kDeadEffectList.baseclass_0.baseclass_0.m_pkHead != v3 )
  {
    do
    {
      v33 = v32;
      v32 = v32->m_pkNext;
      kDeadEffectList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<Effect *>,Effect *> *)&kDeadEffectList,
        v33);
    }
    while ( v32 );
    v3 = 0;
  }
  *(_DWORD *)&kDeadEffectList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = v3;
  kDeadEffectList.baseclass_0.baseclass_0.m_pkHead = v3;
  kDeadEffectList.baseclass_0.baseclass_0.m_pkTail = v3;
  kDeadEffectList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTListBase<DFALL<Effect__>_Effect__>::_vftable_;
  kChainEffectList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTPointerListBase<DFALL<Effect__>_Effect__>::_vftable_;
  v34 = kChainEffectList.baseclass_0.baseclass_0.m_pkHead;
  v40 = 3;
  if ( kChainEffectList.baseclass_0.baseclass_0.m_pkHead != v3 )
  {
    do
    {
      v35 = v34;
      v34 = v34->m_pkNext;
      kChainEffectList.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<DFALL<Effect *>,Effect *> *)&kChainEffectList,
        v35);
    }
    while ( v34 );
  }
}
// 9C7204: using guessed type int (__thiscall *NiTListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);
// 9C722C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);
// 9C723C: using guessed type int (__thiscall *NiTList_Effect _____vftable_)(void *p, char);
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006965B0) --------------------------------------------------------
void __thiscall EffectMgr::RemoveEffect(EffectMgr *this, Effect *pkEffect)
{
  EffectMgr *v2; // esi@1

  v2 = this;
  if ( pkEffect )
  {
    EffectMgr::DetachEffectFromWorld(this, pkEffect);
    EffectMgr::Remove(v2, pkEffect);
  }
}

//----- (006965E0) --------------------------------------------------------
void __thiscall EffectMgr::EffectMgr(EffectMgr *this)
{
  EffectMgr *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  unsigned int v4; // ST0C_4@2
  void *v5; // eax@2
  int v6; // eax@3
  std::exception thisa; // [sp+0h] [bp-24h]@9
  EffectMgr *v8; // [sp+Ch] [bp-18h]@1
  char *_What; // [sp+10h] [bp-14h]@9
  int v10; // [sp+14h] [bp-10h]@3
  int v11; // [sp+20h] [bp-4h]@1

  v1 = this;
  v8 = this;
  *(_DWORD *)&this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&PgTList<Effect__>::_vftable_;
  v11 = 0;
  this->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x14u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tset_traits<Effect *,std::less<Effect *>,std::allocator<Effect *>,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_kEffNodeMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize = 37;
  LOBYTE(v11) = 1;
  v1->m_kEffNodeMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTMapBase<NiTPointerAllocator<unsigned_int>_char_const___NiPointer<NiNode>>::_vftable_;
  *(_DWORD *)&v1->m_kEffNodeMap.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v3 = operator new__(0x94u);
  v4 = 4 * v1->m_kEffNodeMap.baseclass_0.baseclass_0.baseclass_0.m_uiHashSize;
  v1->m_kEffNodeMap.baseclass_0.baseclass_0.baseclass_0.m_ppkHashTable = (NiTMapItem<char const *,NiPointer<NiNode> > **)v3;
  memset((char *)v3, 0, v4);
  v1->m_kEffNodeMap.baseclass_0.m_bCopy = 1;
  v1->m_kEffNodeMap.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTMapBase<NiTPointerAllocator<unsigned int>,char const *,NiPointer<NiNode> >Vtbl *)&NiTStringPointerMap<NiPointer<NiNode>>::_vftable_;
  v1->m_spTexturePalette.m_pObject = 0;
  *(_DWORD *)&v1->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kAbsateAniVec.baseclass_0._Mylast = 0;
  v1->m_kAbsateAniVec.baseclass_0._Myend = 0;
  LOBYTE(v11) = 4;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v5 = operator new(0x18u);
  if ( !v5 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *)v5;
  *(_DWORD *)v5 = v5;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v6 = (int)v1->m_spTexturePalette.m_pObject;
  LOBYTE(v11) = 5;
  v10 = v6;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v10 )
      (**(void (__stdcall ***)(_DWORD))v10)(1);
    v1->m_spTexturePalette.m_pObject = 0;
  }
  v1->m_pGuildAcademyMasterEffect = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C4F94: using guessed type int (__thiscall *NiTMapBase_NiTPointerAllocator_unsigned int__char const __NiPointer_NiNode_____vftable_)(void *p, char);
// 9C507C: using guessed type int (__thiscall *NiTStringPointerMap_NiPointer_NiNode_____vftable_)(void *p, char);
// 9C724C: using guessed type int (__thiscall *PgTList_Effect _____vftable_)(void *p, char);

//----- (00696770) --------------------------------------------------------
void __thiscall EffectMgr::_EffectMgr(EffectMgr *this)
{
  EffectMgr *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v2; // ST08_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // ST04_4@1
  NiTexturePalette *v4; // edi@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v5; // ST08_4@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v6; // ST04_4@7
  NiTListItem<Effect *> *v7; // edi@7
  NiTListItem<Effect *> *v8; // ST08_4@8
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@1
  std::multimap<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> > > *v10; // [sp+4h] [bp-14h]@1
  EffectMgr *v11; // [sp+8h] [bp-10h]@1
  int v12; // [sp+14h] [bp-4h]@1

  v1 = this;
  v11 = this;
  v12 = 5;
  AfterImgEff::ClearResourceMap();
  v10 = &v1->m_kClientEffectMap;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v12) = 6;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_kClientEffectMap,
    &result,
    v3,
    v2);
  operator delete(v1->m_kClientEffectMap.baseclass_0.baseclass_0.baseclass_0._Myhead);
  if ( *(_DWORD *)&v1->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kAbsateAniVec.baseclass_0._Mylast = 0;
  v1->m_kAbsateAniVec.baseclass_0._Myend = 0;
  v4 = v1->m_spTexturePalette.m_pObject;
  LOBYTE(v12) = 2;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  LOBYTE(v12) = 1;
  NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>::_NiTStringTemplateMap<NiTPointerMap<char_const___NiPointer<NiNode>>_NiPointer<NiNode>>(&v1->m_kEffNodeMap.baseclass_0);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)&v1->m_setEffectHandle;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v12) = 7;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_setEffectHandle,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v10,
    v6,
    v5);
  operator delete(v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&PgTList<Effect__>::_vftable_;
  v7 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v12 = 8;
  while ( v7 )
  {
    v8 = v7;
    v7 = v7->m_pkNext;
    v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *)v1,
      v8);
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
}
// 9C71F4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);
// 9C724C: using guessed type int (__thiscall *PgTList_Effect _____vftable_)(void *p, char);

//----- (006968A0) --------------------------------------------------------
void __thiscall EffectMgr::RemoveAll(EffectMgr *this)
{
  EffectMgr *v1; // edi@1
  NiTListItem<Effect *> *v2; // ecx@1
  Effect *v3; // ebx@4
  int v4; // edx@5
  int v5; // ecx@5
  int v6; // eax@5
  int *v7; // eax@12
  NiTListItem<NiPointer<Effect> > *v8; // esi@15
  Effect *v9; // edx@16
  NiTListItem<Effect *> *v10; // esi@20
  NiTListItem<Effect *> *v11; // ST04_4@21
  EffectMgr::AbstateAni *v12; // ecx@22
  int v15; // [sp+8h] [bp-Ch]@13
  int v16; // [sp+Ch] [bp-8h]@10
  NiTListItem<Effect *> *kIter; // [sp+10h] [bp-4h]@3

  v1 = this;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      kIter = v2->m_pkNext;
      if ( v3 )
      {
        v4 = (int)v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
        v5 = (int)v1->m_setEffectHandle.baseclass_0.baseclass_0.baseclass_0._Myhead;
        v6 = *(_DWORD *)(v5 + 4);
        while ( !*(_BYTE *)(v6 + 17) )
        {
          if ( *(_DWORD *)(v6 + 12) >= (unsigned int)v3 )
          {
            v5 = v6;
            v6 = *(_DWORD *)v6;
          }
          else
          {
            v6 = *(_DWORD *)(v6 + 8);
          }
        }
        v16 = v5;
        if ( v5 == v4 || (unsigned int)v3 < *(_DWORD *)(v5 + 12) )
        {
          v15 = v4;
          v7 = &v15;
        }
        else
        {
          v7 = &v16;
        }
        if ( *v7 != v4 )
        {
          v8 = v3->m_kChildList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          while ( v8 )
          {
            v9 = v8->m_element.m_pObject;
            v8 = v8->m_pkNext;
            EffectMgr::DetachEffectFromWorld(v1, v9);
          }
          World::DetachEffect(&g_kWorld, v3->m_spNode.m_pObject);
        }
        v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
      if ( !kIter )
        break;
      v2 = kIter;
    }
  }
  v10 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v10 )
  {
    v11 = v10;
    v10 = v10->m_pkNext;
    v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *)v1,
      v11);
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_setEffectHandle);
  v12 = *(EffectMgr::AbstateAni **)&v1->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v12 != v1->m_kAbsateAniVec.baseclass_0._Mylast )
    v1->m_kAbsateAniVec.baseclass_0._Mylast = v12;
  EffectMgr::RemoveAllClientEff(v1);
}

//----- (006969D0) --------------------------------------------------------
void __thiscall EffectMgr::Terminate(EffectMgr *this)
{
  EffectMgr *v1; // esi@1
  NiTexturePalette *v2; // edi@1
  EffectMgr::AbstateAni *v3; // ecx@6

  v1 = this;
  v2 = this->m_spTexturePalette.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spTexturePalette.m_pObject = 0;
  }
  EffectMgr::RemoveAll(v1);
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&v1->m_kEffNodeMap);
  v3 = *(EffectMgr::AbstateAni **)&v1->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 != v1->m_kAbsateAniVec.baseclass_0._Mylast )
    v1->m_kAbsateAniVec.baseclass_0._Mylast = v3;
  EffectMgr::RemoveAllClientEff(v1);
}

//----- (00696A50) --------------------------------------------------------
void __thiscall EffectMgr::SetAbstateInform(EffectMgr *this, ABSTATE_INFORMATION *pkAbstateInform, unsigned __int16 TargetHandle)
{
  ABSTATEINDEX v3; // eax@1
  unsigned int v4; // edx@1
  EffectMgr *v5; // esi@1
  std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *v6; // ecx@3
  EffectMgr *v7; // edi@4
  int v8; // eax@5
  char v9; // dl@5
  EffectMgr *thisa; // [sp+Ch] [bp-18h]@1
  EffectMgr::AbstateAni kAbstateAni; // [sp+10h] [bp-14h]@1
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = pkAbstateInform->abstateID;
  v4 = pkAbstateInform->strength;
  v5 = this;
  kAbstateAni.kAbstateInfom.restKeeptime = pkAbstateInform->restKeeptime;
  kAbstateAni.kAbstateInfom.abstateID = v3;
  thisa = this;
  kAbstateAni.kAbstateInfom.strength = v4;
  kAbstateAni.kTarget = TargetHandle;
  if ( PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID) )
    AbnormalStateInfoTab::GetByAbstateIndex(LOWORD(pkAbstateInform->abstateID));
  v6 = &v5->m_kAbsateAniVec;
  if ( (signed int)((char *)v5->m_kAbsateAniVec.baseclass_0._Mylast
                  - *(_DWORD *)&v5->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0])
     / 14 )
  {
    v8 = *(_DWORD *)&v5->m_kAbsateAniVec.baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = thisa;
    v9 = 0;
    if ( (EffectMgr::AbstateAni *)v8 == thisa->m_kAbsateAniVec.baseclass_0._Mylast )
      goto LABEL_15;
    do
    {
      if ( *(_DWORD *)v8 == pkAbstateInform->abstateID && *(_WORD *)(v8 + 12) == TargetHandle )
      {
        *(_DWORD *)(v8 + 4) = kAbstateAni.kAbstateInfom.restKeeptime;
        *(_DWORD *)(v8 + 8) = kAbstateAni.kAbstateInfom.strength;
        *(_WORD *)(v8 + 12) = TargetHandle;
        v9 = 1;
      }
      v8 += 14;
    }
    while ( (EffectMgr::AbstateAni *)v8 != thisa->m_kAbsateAniVec.baseclass_0._Mylast );
    if ( !v9 )
LABEL_15:
      std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::push_back(v6, &kAbstateAni);
  }
  else
  {
    std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::push_back(v6, &kAbstateAni);
    v7 = thisa;
  }
  EffectMgr::FindEffectAbstateCtrlAni(v7, TargetHandle, pkAbstateInform->abstateID);
}
// A85C00: using guessed type int __security_cookie;

//----- (00696B40) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Rrotate(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00696BA0) --------------------------------------------------------
void __cdecl std::_Distance2<std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum__ItemEquipEnum_NiNode___std::less<enum__ItemEquipEnum>_std::allocator<std::pair<enum__ItemEquipEnum_const_NiNode__>>_1>>>_unsigned_int>(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > _Last, unsigned int *_Off, std::bidirectional_iterator_tag __formal)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > v4; // ecx@1
  unsigned int v5; // edx@2
  int v6; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > j; // eax@5
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > i; // eax@8

  v4 = _First;
  if ( _First != _Last )
  {
    v5 = *_Off;
    do
    {
      ++v5;
      *_Off = v5;
      if ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
      {
        v6 = *(_DWORD *)(*(_DWORD *)&v4 + 8);
        if ( *(_BYTE *)(v6 + 21) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > *)(*(_DWORD *)&v4 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 21);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v4 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v4 = i;
          }
          v4 = i;
        }
        else
        {
          v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > *)(*(_DWORD *)&v4 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > > *)v6;
                !*(_BYTE *)(*(_DWORD *)&j + 21);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<enum ItemEquipEnum,NiNode *,std::less<enum ItemEquipEnum>,std::allocator<std::pair<enum ItemEquipEnum const ,NiNode *> >,1> > >)**(_DWORD **)&j )
            v4 = j;
        }
      }
    }
    while ( v4 != _Last );
  }
}

//----- (00696C10) --------------------------------------------------------
void __thiscall AttachEff::SetTargetNode(AttachEff *this, NiNode *_pNode, IEffectHolder *pkEffHolder)
{
  AttachEff *v3; // edi@1
  NiNode *v4; // esi@1

  v3 = this;
  v4 = this->m_spkTargetNode.m_pObject;
  if ( v4 != _pNode )
  {
    if ( v4
      && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v3->m_spkTargetNode.m_pObject = _pNode;
    if ( _pNode )
      InterlockedIncrement((volatile LONG *)&_pNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v3->m_pkEffectHolder = pkEffHolder;
  if ( pkEffHolder )
    IEffectHolder::AddAttachEffect(pkEffHolder, v3);
}

//----- (00696C80) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,Effect *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<Effect *> *v3; // esi@1
  NiTListItem<Effect *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C71F4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);
// 9C721C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);

//----- (00696D10) --------------------------------------------------------
void __thiscall NiTPointerList<Effect__>::_NiTPointerList<Effect__>(NiTPointerList<Effect *> *this)
{
  NiTPointerList<Effect *> *v1; // edi@1
  NiTListItem<Effect *> *v2; // esi@1
  NiTListItem<Effect *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
}
// 9C71F4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);
// 9C721C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);

//----- (00696D90) --------------------------------------------------------
void __thiscall NiTList<Effect__>::_NiTList<Effect__>(NiTList<Effect *> *this)
{
  NiTList<Effect *> *v1; // edi@1
  NiTListItem<Effect *> *v2; // esi@1
  NiTListItem<Effect *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTPointerListBase<DFALL<Effect__>_Effect__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<Effect *>,Effect *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTListBase<DFALL<Effect__>_Effect__>::_vftable_;
}
// 9C7204: using guessed type int (__thiscall *NiTListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);
// 9C722C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);

//----- (00696E10) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<Effect__>_Effect__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<Effect *>,Effect *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<Effect *> *v3; // esi@1
  NiTListItem<Effect *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<Effect *>,Effect *>Vtbl *)&NiTPointerListBase<DFALL<Effect__>_Effect__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<Effect__>_Effect__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C7204: using guessed type int (__thiscall *NiTListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);
// 9C722C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_Effect ___Effect _____vftable_)(void *p, char);

//----- (00696EA0) --------------------------------------------------------
EffectMgr::AbstateAni *__thiscall std::allocator<EffectMgr::AbstateAni>::allocate(std::allocator<EffectMgr::AbstateAni> *this, unsigned int _Count)
{
  EffectMgr::AbstateAni *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x12492492 || (result = (EffectMgr::AbstateAni *)operator new(14 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00696F00) --------------------------------------------------------
SubAbStateInfo *__cdecl SubAbStateInfoTab::GetByStrInxName(char *pcInxName, unsigned int Str)
{
  unsigned int v2; // edi@3
  SubAbStateInfo *result; // eax@7

  if ( pcInxName && *pcInxName )
  {
    v2 = 0;
    if ( ITableBase<SubAbStateInfo_SubAbStateInfoTab>::GetTotal() )
    {
      while ( strcmp(
                (const char *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 4),
                                v2)
              + 2,
                pcInxName)
           || *(_DWORD *)((char *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 4),
                                    v2)
                        + 34) != Str )
      {
        ++v2;
        if ( v2 >= ITableBase<SubAbStateInfo_SubAbStateInfoTab>::GetTotal() )
          goto LABEL_7;
      }
      result = (SubAbStateInfo *)CDataReader::GetRecord(
                                   (CDataReader *)(ITableBase<SubAbStateInfo_SubAbStateInfoTab>::ms_pkTable + 4),
                                   v2);
    }
    else
    {
LABEL_7:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F6C: using guessed type int ITableBase_SubAbStateInfo_SubAbStateInfoTab___ms_pkTable;

//----- (00696FB0) --------------------------------------------------------
void __thiscall PgTList<Effect__>::_PgTList<Effect__>(PgTList<Effect *> *this)
{
  PgTList<Effect *> *v1; // edi@1
  NiTListItem<Effect *> *v2; // esi@1
  NiTListItem<Effect *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&PgTList<Effect__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
}
// 9C71F4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);
// 9C724C: using guessed type int (__thiscall *PgTList_Effect _____vftable_)(void *p, char);

//----- (00697030) --------------------------------------------------------
void *__thiscall PgTList<Effect__>::_vector_deleting_destructor_(PgTList<Effect *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<Effect *> *v3; // esi@1
  NiTListItem<Effect *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,Effect *>Vtbl *)&PgTList<Effect__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_Effect__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C71F4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__Effect _____vftable_)(void *p, char);
// 9C724C: using guessed type int (__thiscall *PgTList_Effect _____vftable_)(void *p, char);

//----- (006970C0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Erase(std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *this, std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (00697100) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::les *__thiscall std::_Tree<std::_Tmap_traits<unsigned_int_Effect___std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_Effect__>>_1>>::_Eqrange(std::_Tree<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::les *result, const unsigned int *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v5; // ebx@1
  const unsigned int v6; // edi@2
  const unsigned int v7; // esi@3
  std::_Tree_nod<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> >::_Node *v8; // eax@11
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,Effect *> >,1> > >,std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,Effect *,std::les *v9; // eax@18

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  if ( !v4->_Isnil )
  {
    v6 = *_Keyval;
    do
    {
      v7 = v4->_Myval.baseclass_0.first;
      if ( v7 >= v6 )
      {
        if ( v3->_Isnil && v6 < v7 )
          v3 = v4;
        v5 = v4;
        v4 = v4->_Left;
      }
      else
      {
        v4 = v4->_Right;
      }
    }
    while ( !v4->_Isnil );
  }
  if ( v3->_Isnil )
    v8 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  else
    v8 = v3->_Left;
  while ( !v8->_Isnil )
  {
    if ( *_Keyval >= v8->_Myval.baseclass_0.first )
    {
      v8 = v8->_Right;
    }
    else
    {
      v3 = v8;
      v8 = v8->_Left;
    }
  }
  v9 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v5;
  *(_DWORD *)&result->baseclass_0.second.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  return v9;
}

//----- (00697190) --------------------------------------------------------
EffectMgr::AbstateAni *__cdecl std::_Uninit_move<EffectMgr::AbstateAni___EffectMgr::AbstateAni___std::allocator<EffectMgr::AbstateAni>_EffectMgr::AbstateAni>(EffectMgr::AbstateAni *_First, EffectMgr::AbstateAni *_Last, EffectMgr::AbstateAni *_Dest, std::allocator<EffectMgr::AbstateAni> *_Al, EffectMgr::AbstateAni *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  EffectMgr::AbstateAni *v6; // ecx@1
  EffectMgr::AbstateAni *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
    {
      result->kAbstateInfom.abstateID = v6->kAbstateInfom.abstateID;
      result->kAbstateInfom.restKeeptime = v6->kAbstateInfom.restKeeptime;
      result->kAbstateInfom.strength = v6->kAbstateInfom.strength;
      result->kTarget = v6->kTarget;
    }
    ++v6;
  }
  return result;
}

//----- (006971D0) --------------------------------------------------------
void __thiscall std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::reserve(std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *this, unsigned int _Count)
{
  std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *v2; // esi@1
  void *v3; // eax@4
  EffectMgr::AbstateAni *v4; // ST04_4@4
  EffectMgr::AbstateAni *v5; // ST00_4@4
  signed int v6; // edx@4
  int v7; // edi@4
  char *v8; // eax@6
  int v9; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v11; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@4

  v11 = &v9;
  v2 = this;
  if ( _Count > 0x12492492 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 14 < _Count )
  {
    v3 = std::allocator<EffectMgr::AbstateAni>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(EffectMgr::AbstateAni **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v12 = 0;
    std::_Uninit_move<EffectMgr::AbstateAni___EffectMgr::AbstateAni___std::allocator<EffectMgr::AbstateAni>_EffectMgr::AbstateAni>(
      v5,
      v4,
      (EffectMgr::AbstateAni *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (signed int)((char *)v2->baseclass_0._Mylast
                    + ((unsigned __int64)(-1840700269i64
                                        * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                       - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32)
                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
    v7 = v6 + ((unsigned int)v6 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    v8 = _Ptr;
    v2->baseclass_0._Myend = (EffectMgr::AbstateAni *)&_Ptr[14 * _Count];
    v2->baseclass_0._Mylast = (EffectMgr::AbstateAni *)&v8[14 * v7];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v8;
  }
}

//----- (006972E0) --------------------------------------------------------
void __thiscall std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::_Reserve(std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 14;
  if ( 306783378 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 14;
  if ( v3 > v4 )
  {
    if ( 306783378 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::reserve(this, v5);
  }
}

//----- (00697360) --------------------------------------------------------
void __thiscall std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::push_back(std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *this, EffectMgr::AbstateAni *_Val)
{
  std::vector<EffectMgr::AbstateAni,std::allocator<EffectMgr::AbstateAni> > *v2; // edi@1
  EffectMgr::AbstateAni *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  int v6; // ecx@5
  EffectMgr::AbstateAni *v7; // eax@5
  EffectMgr::AbstateAni *v8; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::_Reserve(v2, 1u);
    v8 = v2->baseclass_0._Mylast;
    if ( v8 )
    {
      v8->kAbstateInfom.abstateID = _Val->kAbstateInfom.abstateID;
      v8->kAbstateInfom.restKeeptime = _Val->kAbstateInfom.restKeeptime;
      v8->kAbstateInfom.strength = _Val->kAbstateInfom.strength;
      v8->kTarget = _Val->kTarget;
    }
  }
  else
  {
    v4 = (signed int)((char *)_Val
                    + ((unsigned __int64)(-1840700269i64
                                        * (signed int)((char *)_Val
                                                     - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32)
                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 3;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<EffectMgr::AbstateAni_std::allocator<EffectMgr::AbstateAni>>::_Reserve(v2, 1u);
    v6 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 14 * v5;
    v7 = v2->baseclass_0._Mylast;
    if ( v7 )
    {
      v7->kAbstateInfom.abstateID = *(_DWORD *)v6;
      v7->kAbstateInfom.restKeeptime = *(_DWORD *)(v6 + 4);
      v7->kAbstateInfom.strength = *(_DWORD *)(v6 + 8);
      v7->kTarget = *(_WORD *)(v6 + 12);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (00697410) --------------------------------------------------------
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 kTarget, NiPoint3 kDir, float fTime)
{
  EffectMgr *v5; // edi@1
  NiNode *v6; // esi@1
  bool result; // al@2
  void *v8; // eax@3
  Effect *v9; // eax@4
  Effect *v10; // esi@4

  v5 = this;
  v6 = EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v6
    && ((v8 = operator new(0x21Cu)) == 0 ? (v10 = 0) : (AttachEff::AttachEff((AttachEff *)v8, v6, 0, 0), v10 = v9), v10) )
  {
    ((void (__thiscall *)(_DWORD))v10->baseclass_0.vfptr[24].__vecDelDtor)(v10);
    ((void (__thiscall *)(_DWORD))v10->baseclass_0.vfptr[10].__vecDelDtor)(v10);
    EffectMgr::Add(v5, v10);
    EffectMgr::AttachEffectToWorld(v5, v10);
    ((void (__cdecl *)(_DWORD))v10->baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(fTime));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006974F0) --------------------------------------------------------
bool __thiscall EffectMgr::CreatePigeonEffect(EffectMgr *this, Char *pkTarget, float fTime)
{
  EffectMgr *v3; // ebx@1
  NiActorManager *v4; // esi@1
  void *v5; // eax@2
  Effect *v6; // eax@3
  Effect *v7; // esi@3
  bool result; // al@7

  v3 = this;
  v4 = CharResMgr::GetPigeonActor(&g_kCharResMgr);
  if ( v4
    && ((v5 = operator new(0x23Cu)) == 0 ? (v7 = 0) : (QuestPigeonEffect::QuestPigeonEffect(
                                                         (QuestPigeonEffect *)v5,
                                                         v4,
                                                         pkTarget),
                                                       v7 = v6),
        v7 && CharMgr::GetChar(&g_kCharMgr, pkTarget)) )
  {
    EffectMgr::Add(v3, v7);
    EffectMgr::AttachEffectToWorld(v3, v7);
    ((void (__cdecl *)(_DWORD))v7->baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(fTime));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006975C0) --------------------------------------------------------
LookAtEffect *__thiscall EffectMgr::JustCreateLookAtEffect(EffectMgr *this, char *pcEffectName)
{
  NiObject *v2; // eax@1
  NiObject *v3; // esi@2
  void *v4; // eax@2
  LookAtEffect *result; // eax@3

  v2 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( !v2
    || (v3 = NiObject::Clone(v2), (v4 = operator new(0x238u)) == 0)
    || (LookAtEffect::LookAtEffect((LookAtEffect *)v4, (NiNode *)v3, 0, 0), !result) )
    result = 0;
  return result;
}

//----- (00697640) --------------------------------------------------------
ClientEffect *__thiscall EffectMgr::JustCreateClientEffect(EffectMgr *this, char *pcEffectName)
{
  NiObject *v2; // eax@1
  NiObject *v3; // esi@2
  void *v4; // eax@2
  ClientEffect *result; // eax@3

  v2 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( !v2
    || (v3 = NiObject::Clone(v2), (v4 = operator new(0x228u)) == 0)
    || (ClientEffect::ClientEffect((ClientEffect *)v4, (NiNode *)v3, 0, 0), !result) )
    result = 0;
  return result;
}

//----- (006976C0) --------------------------------------------------------
ClientEffect *__thiscall EffectMgr::JustCreateClientEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos)
{
  EffectMgr *v3; // edi@1
  NiObject *v4; // eax@1
  ClientEffect *v5; // esi@2
  NiObject *v6; // esi@3
  void *v7; // eax@3
  ClientEffect *v8; // eax@4
  _BYTE v9[12]; // ST00_12@7

  v3 = this;
  v4 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v4 )
  {
    v6 = NiObject::Clone(v4);
    v7 = operator new(0x228u);
    if ( v7 )
      ClientEffect::ClientEffect((ClientEffect *)v7, (NiNode *)v6, 0, 0);
    else
      v8 = 0;
    v5 = v8;
  }
  else
  {
    v5 = 0;
  }
  *(_DWORD *)v9 = (_DWORD)kPos.x;
  *(_QWORD *)&v9[4] = *(_QWORD *)&kPos.y;
  ClientEffect::SetTargetPos(v5, *(NiPoint3 *)v9);
  EffectMgr::Add(v3, &v5->baseclass_0);
  return v5;
}

//----- (00697770) --------------------------------------------------------
ClientEffect *__thiscall EffectMgr::JustCreateClientEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 hHandle)
{
  EffectMgr *v3; // edi@1
  NiObject *v4; // eax@1
  Effect *v5; // esi@2
  NiObject *v6; // esi@3
  void *v7; // eax@3
  Effect *v8; // eax@4

  v3 = this;
  v4 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v4 )
  {
    v6 = NiObject::Clone(v4);
    v7 = operator new(0x228u);
    if ( v7 )
      ClientEffect::ClientEffect((ClientEffect *)v7, (NiNode *)v6, 0, 0);
    else
      v8 = 0;
    v5 = v8;
  }
  else
  {
    v5 = 0;
  }
  v5->baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v5, hHandle);
  EffectMgr::Add(v3, v5);
  return (ClientEffect *)v5;
}

//----- (00697810) --------------------------------------------------------
Effect *__thiscall EffectMgr::JustCreateEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos, NiPoint3 kDir, float fTime, bool bDir)
{
  NiObject *v6; // eax@1
  NiObject *v7; // esi@2
  NiObject *v8; // eax@2
  void *v9; // eax@4
  Effect *v10; // eax@5
  Effect *v11; // edi@5
  EffectMgr *thisa; // [sp+4h] [bp-10h]@1

  thisa = this;
  v6 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( !v6 )
    return 0;
  v7 = 0;
  v8 = NiObject::Clone(v6);
  if ( v8 )
  {
    v7 = v8;
    InterlockedIncrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount);
  }
  v9 = operator new(0x20Cu);
  if ( v9 )
  {
    Effect::Effect((Effect *)v9, (NiNode *)v7, 0, 0);
    v11 = v10;
  }
  else
  {
    v11 = 0;
  }
  if ( !v11 )
  {
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) )
        v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v11->baseclass_0.vfptr[7].__vecDelDtor((NiRefObject *)v11, (unsigned int)&kPos);
  if ( bDir )
    v11->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v11, (unsigned int)&kDir);
  EffectMgr::Add(thisa, v11);
  if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) )
    v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  return v11;
}

//----- (00697940) --------------------------------------------------------
Effect *__thiscall EffectMgr::JustCreateAttachEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 kTarget, NiPoint3 kDir, float fTime)
{
  NiObject *v5; // eax@1
  NiObject *v6; // edi@2
  NiObject *v7; // eax@2
  void *v8; // eax@4
  Effect *v9; // eax@5
  Effect *v10; // esi@5
  EffectMgr *thisa; // [sp+4h] [bp-10h]@1

  thisa = this;
  v5 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( !v5 )
    return 0;
  v6 = 0;
  v7 = NiObject::Clone(v5);
  if ( v7 )
  {
    v6 = v7;
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
  }
  v8 = operator new(0x21Cu);
  if ( v8 )
  {
    AttachEff::AttachEff((AttachEff *)v8, (NiNode *)v6, 0, 0);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  if ( !v10 )
  {
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
        v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v10->baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v10, kTarget);
  v10->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v10, (unsigned int)&kDir);
  v10->baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v10, kTarget);
  EffectMgr::Add(thisa, v10);
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
    v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  return v10;
}

//----- (00697A70) --------------------------------------------------------
bool __thiscall EffectMgr::CreateShootEff(EffectMgr *this, char *pcShootEffName, char *pcShootBombName, char *pcBombSndName, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, DamageInfoSet *pkDamInfoSet, LastEffPos ePos, bool bFireOnRight)
{
  Char *v11; // edi@1
  NiObject *v12; // eax@5
  NiObject *v13; // esi@5
  NiObject *v14; // eax@6
  void *v15; // eax@11
  Effect *v16; // eax@12
  Effect *v17; // esi@12
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // edx@15
  NiPoint3 *v19; // eax@16
  NiPoint3 *v20; // eax@17
  NiPoint3 *v21; // eax@18
  EffectMgr *v22; // edi@18
  unsigned int v24; // [sp+40h] [bp-A4h]@1
  char v25; // [sp+50h] [bp-94h]@18
  NiPoint3 kDir; // [sp+5Ch] [bp-88h]@15
  NiPoint3 result; // [sp+68h] [bp-7Ch]@16
  NiPoint3 kTargetPos; // [sp+74h] [bp-70h]@18
  NiPoint3 kCasterDir; // [sp+80h] [bp-64h]@15
  Char *pkChar; // [sp+8Ch] [bp-58h]@1
  char *v31; // [sp+90h] [bp-54h]@1
  DamageInfoSet *v32; // [sp+94h] [bp-50h]@1
  char *v33; // [sp+98h] [bp-4Ch]@1
  EffectMgr *thisa; // [sp+9Ch] [bp-48h]@1
  void *pkNode; // [sp+A0h] [bp-44h]@5
  NiPoint3 kStartPos; // [sp+A4h] [bp-40h]@16
  NiMatrix3 Rotz; // [sp+B0h] [bp-34h]@5
  unsigned int v38; // [sp+D4h] [bp-10h]@1
  int v39; // [sp+E0h] [bp-4h]@11
  int v40; // [sp+E4h] [bp+0h]@1

  v38 = (unsigned int)&v40 ^ __security_cookie;
  v24 = (unsigned int)&v40 ^ __security_cookie;
  v11 = pkTarget;
  thisa = this;
  v33 = pcShootBombName;
  v31 = pcBombSndName;
  pkChar = pkTarget;
  v32 = pkDamInfoSet;
  if ( !pkAttack || !pkTarget || 0.0 == fSpeed )
    return 0;
  if ( _strnicmp(pcShootEffName, "MyWeapon", 8u) )
  {
    v14 = (NiObject *)EffectMgr::GetEffectNode(thisa, pcShootEffName);
    if ( !v14 )
    {
      if ( pkAttack->m_bUserCharacter )
        terminate();
      return 0;
    }
    v13 = NiObject::Clone(v14);
  }
  else
  {
    v12 = NiObject::Clone(&pkAttack->m_kCharShape.m_apkLinkNode[12]->baseclass_0.baseclass_0.baseclass_0);
    v13 = NiObject::Clone(v12);
    pkNode = v13;
    NiObjectNET::SetName((NiObjectNET *)v13, "MyWeapon");
    NiMatrix3::MakeZRotation(&Rotz, -1.5707964);
    memcpy(&v13[6].baseclass_0.m_uiRefCount, &Rotz, 0x24u);
    v11 = pkChar;
  }
  if ( !v13
    || ((v15 = operator new(0x2E8u), pkNode = v15, v39 = 0, !v15) ? (v17 = 0) : (ArrowEff::ArrowEff(
                                                                                   (ArrowEff *)v15,
                                                                                   (NiNode *)v13,
                                                                                   0,
                                                                                   pkAttack),
                                                                                 v17 = v16),
        v39 = -1,
        !v17) )
    return 0;
  ((void (__thiscall *)(Effect *, signed int, DamageInfoSet *, unsigned int))v17->baseclass_0.vfptr[34].__vecDelDtor)(
    v17,
    -1,
    v32,
    v24);
  v17->baseclass_0.vfptr[30].__vecDelDtor((NiRefObject *)v17, (unsigned int)v33);
  v17->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v17, COERCE_UNSIGNED_INT(1000.0));
  v17->baseclass_0.vfptr[26].__vecDelDtor((NiRefObject *)v17, v11->m_kHandle);
  v17->baseclass_0.vfptr[28].__vecDelDtor((NiRefObject *)v17, pkAttack->m_kHandle);
  v17->baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v17, LODWORD(fSpeed));
  v18 = v17->baseclass_0.vfptr[31].__vecDelDtor;
  LODWORD(v17[1].m_kDecalEffect.m_kDecalMaker.m_fDecalWidth) = ePos;
  v18(&v17->baseclass_0, (unsigned int)v31);
  pkAttack->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)pkAttack, (unsigned int)&kCasterDir);
  LODWORD(v17[1].m_kDecalEffect.m_kEffect.m_fMinTime) = (_DWORD)kCasterDir.x;
  v17[1].m_kDecalEffect.m_kEffect.m_fMaxTime = kCasterDir.y;
  v17[1].m_kDecalEffect.m_kEffect.m_uiControllerCount = kCasterDir.z;
  Char::GetDirToChar(pkAttack, &kDir, v11);
  NiPoint3::Unitize(&kDir);
  v17->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v17, (unsigned int)&kDir);
  if ( bFireOnRight )
  {
    v19 = Char::GetRightHandPos(pkAttack, &result);
    kStartPos.x = v19->x;
    kStartPos.y = v19->y;
    kStartPos.z = v19->z;
  }
  else
  {
    v20 = Char::GetLeftHandPos(pkAttack, &result);
    kStartPos.x = v20->x;
    kStartPos.y = v20->y;
    kStartPos.z = v20->z;
  }
  kStartPos.z = Char::GetChestPos(pkAttack, &result)->z;
  ((void (__thiscall *)(Effect *))v17->baseclass_0.vfptr[7].__vecDelDtor)(v17);
  v17[1].baseclass_8.vfptr[2].OnEffectDestory(&v17[1].baseclass_8, (Effect *)&kStartPos);
  v21 = Char::GetChestPos(v11, (NiPoint3 *)&v25);
  kTargetPos.x = v21->x;
  kTargetPos.y = v21->y;
  kTargetPos.z = v21->z;
  ((void (__thiscall *)(IEffectDestroyMessenger *, _DWORD, NiPoint3 *, NiPoint3 *))v17[1].baseclass_8.vfptr[1].DeleteEffectDestoryMessengerList)(
    &v17[1].baseclass_8,
    LODWORD(fTime),
    &kStartPos,
    &kTargetPos);
  v22 = thisa;
  EffectMgr::Add(thisa, v17);
  EffectMgr::AttachEffectToWorld(v22, v17);
  v17->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v17, LODWORD(fTime));
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00697D80) --------------------------------------------------------
bool __thiscall EffectMgr::CreateShootEff(EffectMgr *this, char *pcShootEffName, char *pcShootBombName, char *pcShootSndName, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, unsigned int uiHitDamage)
{
  NiNode *v9; // esi@3
  void *v10; // eax@4
  Effect *v11; // eax@5
  Effect *v12; // esi@5
  NiPoint3 *v13; // eax@8
  NiPoint3 *v14; // eax@8
  EffectMgr *v15; // edi@8
  bool v16; // al@8
  char v17; // [sp+4Ch] [bp-58h]@8
  NiPoint3 result; // [sp+58h] [bp-4Ch]@8
  NiPoint3 kDir; // [sp+64h] [bp-40h]@8
  NiPoint3 kTargetPos; // [sp+70h] [bp-34h]@8
  NiPoint3 kCasterDir; // [sp+7Ch] [bp-28h]@8
  NiPoint3 kStartPos; // [sp+88h] [bp-1Ch]@8
  EffectMgr *thisa; // [sp+94h] [bp-10h]@1
  int v24; // [sp+A0h] [bp-4h]@4

  thisa = this;
  if ( pkAttack
    && pkTarget
    && (v9 = EffectMgr::GetEffectNode(this, pcShootEffName)) != 0
    && ((v10 = operator new(0x2E8u), v24 = 0, !v10) ? (v12 = 0) : (ArrowEff::ArrowEff((ArrowEff *)v10, v9, 0, pkAttack),
                                                                   v12 = v11),
        v24 = -1,
        v12) )
  {
    ((void (__thiscall *)(Effect *))v12->baseclass_0.vfptr[33].__vecDelDtor)(v12);
    ((void (__thiscall *)(Effect *))v12->baseclass_0.vfptr[30].__vecDelDtor)(v12);
    ((void (__thiscall *)(Effect *))v12->baseclass_0.vfptr[31].__vecDelDtor)(v12);
    v12->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v12, COERCE_UNSIGNED_INT(20.0));
    v12->baseclass_0.vfptr[26].__vecDelDtor((NiRefObject *)v12, pkTarget->m_kHandle);
    v12->baseclass_0.vfptr[28].__vecDelDtor((NiRefObject *)v12, pkAttack->m_kHandle);
    v12->baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v12, LODWORD(fSpeed));
    Char::GetDirToChar(pkAttack, &kDir, pkTarget);
    NiPoint3::Unitize(&kDir);
    v12->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v12, (unsigned int)&kDir);
    pkAttack->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)pkAttack, (unsigned int)&kCasterDir);
    LODWORD(v12[1].m_kDecalEffect.m_kEffect.m_fMinTime) = (_DWORD)kCasterDir.x;
    v12[1].m_kDecalEffect.m_kEffect.m_fMaxTime = kCasterDir.y;
    v12[1].m_kDecalEffect.m_kEffect.m_uiControllerCount = kCasterDir.z;
    v13 = Char::GetLeftHandPos(pkAttack, &result);
    kStartPos.x = v13->x;
    kStartPos.y = v13->y;
    kStartPos.z = v13->z;
    v12->baseclass_0.vfptr[7].__vecDelDtor((NiRefObject *)v12, (unsigned int)&kStartPos);
    v12[1].baseclass_8.vfptr[2].OnEffectDestory(&v12[1].baseclass_8, (Effect *)&kStartPos);
    v14 = Char::GetChestPos(pkTarget, (NiPoint3 *)&v17);
    kTargetPos.x = v14->x;
    kTargetPos.y = v14->y;
    kTargetPos.z = v14->z;
    ((void (__thiscall *)(IEffectDestroyMessenger *, _DWORD, NiPoint3 *, NiPoint3 *))v12[1].baseclass_8.vfptr[1].DeleteEffectDestoryMessengerList)(
      &v12[1].baseclass_8,
      LODWORD(fTime),
      &kStartPos,
      &kTargetPos);
    v15 = thisa;
    EffectMgr::Add(thisa, v12);
    EffectMgr::AttachEffectToWorld(v15, v12);
    ((void (__cdecl *)(_DWORD))v12->baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(fTime));
    v16 = 1;
  }
  else
  {
    v16 = 0;
  }
  return v16;
}

//----- (00697FA0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateShootEff(EffectMgr *this, char *pcShootEffName, ActionEffectInfo *pkBombInfo, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, __int16 AtkSeqNum, DamageInfoSet *pkDamInfoSet, LastEffPos ePos, bool bFireOnRight)
{
  EffectMgr *v11; // edi@1
  NiObject *v12; // eax@5
  NiObject *v13; // esi@5
  NiObject *v14; // eax@6
  void *v15; // eax@11
  Effect *v16; // eax@12
  Effect *v17; // esi@12
  Char *v18; // eax@18
  NiPoint3 *v19; // eax@19
  NiPoint3 *v20; // eax@20
  NiPoint3 *v21; // eax@21
  unsigned int v23; // [sp+3Ch] [bp-A0h]@1
  char v24; // [sp+4Ch] [bp-90h]@21
  NiPoint3 kDir; // [sp+58h] [bp-84h]@18
  NiPoint3 result; // [sp+64h] [bp-78h]@19
  NiPoint3 kCasterDir; // [sp+70h] [bp-6Ch]@18
  NiPoint3 kTargetPos; // [sp+7Ch] [bp-60h]@21
  DamageInfoSet *v29; // [sp+88h] [bp-54h]@1
  EffectMgr *v30; // [sp+8Ch] [bp-50h]@1
  ActionEffectInfo *v31; // [sp+90h] [bp-4Ch]@1
  void *pkNode; // [sp+94h] [bp-48h]@5
  NiPoint3 kStartPos; // [sp+98h] [bp-44h]@19
  Char *thisa; // [sp+A4h] [bp-38h]@1
  NiMatrix3 Rotz; // [sp+A8h] [bp-34h]@5
  unsigned int v36; // [sp+CCh] [bp-10h]@1
  int v37; // [sp+D8h] [bp-4h]@11
  int v38; // [sp+DCh] [bp+0h]@1

  v36 = (unsigned int)&v38 ^ __security_cookie;
  v23 = (unsigned int)&v38 ^ __security_cookie;
  v11 = this;
  v31 = pkBombInfo;
  v30 = this;
  thisa = pkTarget;
  v29 = pkDamInfoSet;
  if ( !pkAttack || !pkTarget || 0.0 == fSpeed )
    return 0;
  if ( _strnicmp(pcShootEffName, "MyWeapon", 8u) )
  {
    v14 = (NiObject *)EffectMgr::GetEffectNode(v11, pcShootEffName);
    if ( !v14 )
    {
      if ( pkAttack->m_bUserCharacter )
        terminate();
      return 0;
    }
    v13 = NiObject::Clone(v14);
  }
  else
  {
    v12 = NiObject::Clone(&pkAttack->m_kCharShape.m_apkLinkNode[12]->baseclass_0.baseclass_0.baseclass_0);
    v13 = NiObject::Clone(v12);
    pkNode = v13;
    NiObjectNET::SetName((NiObjectNET *)v13, "MyWeapon");
    NiMatrix3::MakeZRotation(&Rotz, -1.5707964);
    memcpy(&v13[6].baseclass_0.m_uiRefCount, &Rotz, 0x24u);
    v11 = v30;
  }
  if ( !v13
    || ((v15 = operator new(0x2E8u), pkNode = v15, v37 = 0, !v15) ? (v17 = 0) : (ArrowEff::ArrowEff(
                                                                                   (ArrowEff *)v15,
                                                                                   (NiNode *)v13,
                                                                                   0,
                                                                                   pkAttack),
                                                                                 v17 = v16),
        v37 = -1,
        !v17) )
    return 0;
  ((void (__thiscall *)(Effect *, _DWORD, DamageInfoSet *, unsigned int))v17->baseclass_0.vfptr[34].__vecDelDtor)(
    v17,
    AtkSeqNum,
    v29,
    v23);
  if ( v31 && v31->GrapicFile[0] != 45 )
    v17->baseclass_0.vfptr[30].__vecDelDtor((NiRefObject *)v17, (unsigned int)v31->GrapicFile);
  v17->baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v17, COERCE_UNSIGNED_INT(1000.0));
  v17->baseclass_0.vfptr[26].__vecDelDtor((NiRefObject *)v17, thisa->m_kHandle);
  v17->baseclass_0.vfptr[28].__vecDelDtor((NiRefObject *)v17, pkAttack->m_kHandle);
  v17->baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v17, LODWORD(fSpeed));
  LODWORD(v17[1].m_kDecalEffect.m_kDecalMaker.m_fDecalWidth) = ePos;
  pkAttack->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)pkAttack, (unsigned int)&kCasterDir);
  LODWORD(v17[1].m_kDecalEffect.m_kEffect.m_fMinTime) = (_DWORD)kCasterDir.x;
  v18 = thisa;
  v17[1].m_kDecalEffect.m_kEffect.m_fMaxTime = kCasterDir.y;
  v17[1].m_kDecalEffect.m_kEffect.m_uiControllerCount = kCasterDir.z;
  Char::GetDirToChar(pkAttack, &kDir, v18);
  NiPoint3::Unitize(&kDir);
  v17->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v17, (unsigned int)&kDir);
  if ( bFireOnRight )
  {
    v19 = Char::GetRightHandPos(pkAttack, &result);
    kStartPos.x = v19->x;
    kStartPos.y = v19->y;
    kStartPos.z = v19->z;
  }
  else
  {
    v20 = Char::GetLeftHandPos(pkAttack, &result);
    kStartPos.x = v20->x;
    kStartPos.y = v20->y;
    kStartPos.z = v20->z;
  }
  kStartPos.z = Char::GetChestPos(pkAttack, &result)->z;
  ((void (__thiscall *)(Effect *))v17->baseclass_0.vfptr[7].__vecDelDtor)(v17);
  v17[1].baseclass_8.vfptr[2].OnEffectDestory(&v17[1].baseclass_8, (Effect *)&kStartPos);
  v21 = Char::GetChestPos(thisa, (NiPoint3 *)&v24);
  kTargetPos.x = v21->x;
  kTargetPos.y = v21->y;
  kTargetPos.z = v21->z;
  ((void (__thiscall *)(IEffectDestroyMessenger *, _DWORD, NiPoint3 *, NiPoint3 *))v17[1].baseclass_8.vfptr[1].DeleteEffectDestoryMessengerList)(
    &v17[1].baseclass_8,
    LODWORD(fTime),
    &kStartPos,
    &kTargetPos);
  EffectMgr::Add(v11, v17);
  EffectMgr::AttachEffectToWorld(v11, v17);
  v17->baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v17, LODWORD(fTime));
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006982B0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateWeddingEffect(EffectMgr *this, char *pcEffectName, unsigned __int16 Newlywed, float fTime)
{
  NiObject *v4; // eax@1
  NiObject *v5; // edi@2
  NiObject *v6; // eax@2
  void *v7; // eax@4
  int v8; // eax@5
  int v9; // esi@5
  NiRefObjectVtbl *v10; // edx@10
  NiObject *v11; // ecx@10
  Char *v12; // eax@11
  Char *v13; // ebx@11
  int v14; // edi@12
  NiPoint3 *v15; // eax@12
  NiPoint3 *v16; // eax@12
  NiPoint3 *v17; // ST14_4@12
  NiPoint3 *v18; // eax@12
  EffectMgr *v19; // edi@12
  char v21; // [sp+28h] [bp-2Ch]@12
  NiPoint3 result; // [sp+34h] [bp-20h]@12
  void *v23; // [sp+40h] [bp-14h]@4
  EffectMgr *thisa; // [sp+44h] [bp-10h]@1
  int v25; // [sp+50h] [bp-4h]@2
  NiObject *spNode; // [sp+5Ch] [bp+8h]@2
  int Newlyweda; // [sp+60h] [bp+Ch]@12
  int Newlywedb; // [sp+60h] [bp+Ch]@12

  thisa = this;
  v4 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( !v4 )
    return 0;
  v5 = 0;
  spNode = 0;
  v25 = 0;
  v6 = NiObject::Clone(v4);
  if ( v6 )
  {
    spNode = v6;
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount);
    v5 = spNode;
  }
  v7 = operator new(0x294u);
  v23 = v7;
  LOBYTE(v25) = 1;
  if ( v7 )
  {
    WeddingEffect::WeddingEffect((WeddingEffect *)v7, (NiNode *)v5, 0);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  LOBYTE(v25) = 0;
  if ( !v9 )
  {
    v25 = -1;
    if ( !v5 || InterlockedDecrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount) )
      return 0;
    v10 = v5->baseclass_0.vfptr;
    v11 = v5;
LABEL_19:
    v10->__vecDelDtor(v11, 1);
    return 0;
  }
  v12 = CharMgr::GetChar(&g_kCharMgr, Newlywed);
  v13 = v12;
  if ( !v12 )
  {
    v25 = -1;
    if ( !spNode || InterlockedDecrement((volatile LONG *)&spNode->baseclass_0.m_uiRefCount) )
      return 0;
    v10 = spNode->baseclass_0.vfptr;
    v11 = spNode;
    goto LABEL_19;
  }
  *(_WORD *)(v9 + 620) = Newlywed;
  v14 = *(_DWORD *)v9;
  v15 = Char::GetHairPos(v12, &result);
  (*(void (__thiscall **)(int, NiPoint3 *))(v14 + 28))(v9, v15);
  Newlyweda = *(_DWORD *)(v9 + 524) + 40;
  v16 = Char::GetHairPos(v13, &result);
  (*(void (__thiscall **)(int, NiPoint3 *))Newlyweda)(v9 + 524, v16);
  Newlywedb = *(_DWORD *)(v9 + 524) + 28;
  v17 = Char::GetHairPos(v13, &result);
  v18 = Char::GetHairPos(v13, (NiPoint3 *)&v21);
  (*(void (__thiscall **)(int, _DWORD, NiPoint3 *, NiPoint3 *))Newlywedb)(v9 + 524, LODWORD(fTime), v18, v17);
  v19 = thisa;
  EffectMgr::Add(thisa, (Effect *)v9);
  EffectMgr::AttachEffectToWorld(v19, (Effect *)v9);
  (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v9 + 60))(v9, LODWORD(fTime));
  v25 = -1;
  if ( spNode && !InterlockedDecrement((volatile LONG *)&spNode->baseclass_0.m_uiRefCount) )
    spNode->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)spNode, 1u);
  return 1;
}

//----- (006984A0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateLightningShootEff(EffectMgr *this, char *pcShootEffName, char *pcShootBombName, Char *pkAttack, Char *pkTarget, float fTime, float fSpeed, DamageInfoSet *pkDamInfoSet, LastEffPos ePos, bool bFireOnRight, unsigned __int16 kID)
{
  Char *v11; // edi@1
  NiObject *v12; // eax@5
  NiObject *v13; // esi@5
  NiObject *v14; // eax@6
  void *v15; // eax@10
  int v16; // eax@11
  int v17; // esi@11
  NiPoint3 *v18; // eax@15
  NiPoint3 *v19; // eax@16
  NiPoint3 *v20; // eax@17
  EffectMgr *v21; // edi@17
  bool v22; // al@17
  unsigned int v23; // [sp+3Ch] [bp-A0h]@1
  char v24; // [sp+4Ch] [bp-90h]@17
  NiPoint3 kDir; // [sp+58h] [bp-84h]@14
  NiPoint3 result; // [sp+64h] [bp-78h]@15
  NiPoint3 kTargetPos; // [sp+70h] [bp-6Ch]@17
  NiPoint3 kCasterDir; // [sp+7Ch] [bp-60h]@14
  Char *pkChar; // [sp+88h] [bp-54h]@1
  DamageInfoSet *v30; // [sp+8Ch] [bp-50h]@1
  char *v31; // [sp+90h] [bp-4Ch]@1
  EffectMgr *thisa; // [sp+94h] [bp-48h]@1
  void *pkNode; // [sp+98h] [bp-44h]@5
  NiPoint3 kStartPos; // [sp+9Ch] [bp-40h]@15
  NiMatrix3 Rotz; // [sp+A8h] [bp-34h]@5
  unsigned int v36; // [sp+CCh] [bp-10h]@1
  int v37; // [sp+D8h] [bp-4h]@10
  int v38; // [sp+DCh] [bp+0h]@1

  v36 = (unsigned int)&v38 ^ __security_cookie;
  v23 = (unsigned int)&v38 ^ __security_cookie;
  v11 = pkTarget;
  thisa = this;
  v31 = pcShootBombName;
  pkChar = pkTarget;
  v30 = pkDamInfoSet;
  if ( !pkAttack || !pkTarget || 0.0 == fSpeed )
    goto LABEL_21;
  if ( _strnicmp(pcShootEffName, "MyWeapon", 8u) )
  {
    v14 = (NiObject *)EffectMgr::GetEffectNode(thisa, pcShootEffName);
    if ( !v14 )
      terminate();
    v13 = NiObject::Clone(v14);
  }
  else
  {
    v12 = NiObject::Clone(&pkAttack->m_kCharShape.m_apkLinkNode[12]->baseclass_0.baseclass_0.baseclass_0);
    v13 = NiObject::Clone(v12);
    pkNode = v13;
    NiObjectNET::SetName((NiObjectNET *)v13, "MyWeapon");
    NiMatrix3::MakeZRotation(&Rotz, -1.5707964);
    memcpy(&v13[6].baseclass_0.m_uiRefCount, &Rotz, 0x24u);
    v11 = pkChar;
  }
  if ( v13
    && ((v15 = operator new(0x2E8u), pkNode = v15, v37 = 0, !v15) ? (v17 = 0) : (ArrowEff::ArrowEff(
                                                                                   (ArrowEff *)v15,
                                                                                   (NiNode *)v13,
                                                                                   0,
                                                                                   pkAttack),
                                                                                 v17 = v16),
        v37 = -1,
        v17) )
  {
    (*(void (__thiscall **)(int, signed int, DamageInfoSet *, unsigned int))(*(_DWORD *)v17 + 136))(v17, -1, v30, v23);
    (*(void (__thiscall **)(int, char *))(*(_DWORD *)v17 + 120))(v17, v31);
    (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v17 + 72))(v17, 1000.0);
    (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v17 + 104))(v17, v11->m_kHandle);
    (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v17 + 112))(v17, pkAttack->m_kHandle);
    (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v17 + 96))(v17, LODWORD(fSpeed));
    *(_DWORD *)(v17 + 740) = ePos;
    Effect::SetActiveSkillID((Effect *)v17, kID);
    pkAttack->baseclass_0.vfptr[6].__vecDelDtor((AbStateInfectee *)pkAttack, (unsigned int)&kCasterDir);
    *(_DWORD *)(v17 + 688) = (_DWORD)kCasterDir.x;
    *(_DWORD *)(v17 + 692) = LODWORD(kCasterDir.y);
    *(_DWORD *)(v17 + 696) = LODWORD(kCasterDir.z);
    Char::GetDirToChar(pkAttack, &kDir, v11);
    NiPoint3::Unitize(&kDir);
    (*(void (__thiscall **)(int, NiPoint3 *))(*(_DWORD *)v17 + 40))(v17, &kDir);
    if ( bFireOnRight )
    {
      v18 = Char::GetRightHandPos(pkAttack, &result);
      kStartPos.x = v18->x;
      kStartPos.y = v18->y;
      kStartPos.z = v18->z;
    }
    else
    {
      v19 = Char::GetLeftHandPos(pkAttack, &result);
      kStartPos.x = v19->x;
      kStartPos.y = v19->y;
      kStartPos.z = v19->z;
    }
    kStartPos.z = Char::GetChestPos(pkAttack, &result)->z;
    (*(void (__thiscall **)(int))(*(_DWORD *)v17 + 28))(v17);
    (*(void (__thiscall **)(int, NiPoint3 *))(*(_DWORD *)(v17 + 532) + 40))(v17 + 532, &kStartPos);
    v20 = Char::GetChestPos(v11, (NiPoint3 *)&v24);
    kTargetPos.x = v20->x;
    kTargetPos.y = v20->y;
    kTargetPos.z = v20->z;
    (*(void (__thiscall **)(int, _DWORD, NiPoint3 *, NiPoint3 *))(*(_DWORD *)(v17 + 532) + 28))(
      v17 + 532,
      LODWORD(fTime),
      &kStartPos,
      &kTargetPos);
    v21 = thisa;
    EffectMgr::Add(thisa, (Effect *)v17);
    EffectMgr::AttachEffectToWorld(v21, (Effect *)v17);
    (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v17 + 60))(v17, LODWORD(fTime));
    v22 = 1;
  }
  else
  {
LABEL_21:
    v22 = 0;
  }
  return v22;
}
// A85C00: using guessed type int __security_cookie;

//----- (00698790) --------------------------------------------------------
LookAtEffect *__thiscall EffectMgr::JustCreateLookAtEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kLookAtPos, Char *pkCaster)
{
  EffectMgr *v4; // edi@1
  LookAtEffect *result; // eax@2
  NiObject *v6; // eax@3
  LookAtEffect *v7; // esi@4
  NiObject *v8; // esi@5
  void *v9; // eax@5
  LookAtEffect *v10; // eax@6

  v4 = this;
  if ( pkCaster )
  {
    v6 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
    if ( v6 )
    {
      v8 = NiObject::Clone(v6);
      v9 = operator new(0x238u);
      if ( v9 )
        LookAtEffect::LookAtEffect((LookAtEffect *)v9, (NiNode *)v8, 0, 0);
      else
        v10 = 0;
      v7 = v10;
    }
    else
    {
      v7 = 0;
    }
    v7->baseclass_0.baseclass_0.baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v7, pkCaster->m_kHandle);
    LODWORD(v7->m_kLookAtPos.x) = (_DWORD)kLookAtPos.x;
    v7->m_kLookAtPos.y = kLookAtPos.y;
    v7->m_kLookAtPos.z = kLookAtPos.z;
    LookAtEffect::CalcDir(v7);
    EffectMgr::Add(v4, &v7->baseclass_0.baseclass_0);
    result = v7;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00698880) --------------------------------------------------------
LookAtEffect *__thiscall EffectMgr::JustCreateLookAtEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kLookAtPos, NiPoint3 kPos)
{
  EffectMgr *v4; // edi@1
  NiObject *v5; // eax@1
  int v6; // esi@2
  NiObject *v7; // esi@3
  void *v8; // eax@3
  int v9; // eax@4
  _BYTE v10[12]; // ST00_12@7

  v4 = this;
  v5 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v5 )
  {
    v7 = NiObject::Clone(v5);
    v8 = operator new(0x238u);
    if ( v8 )
      LookAtEffect::LookAtEffect((LookAtEffect *)v8, (NiNode *)v7, 0, 0);
    else
      v9 = 0;
    v6 = v9;
  }
  else
  {
    v6 = 0;
  }
  *(_DWORD *)v10 = (_DWORD)kPos.x;
  *(_QWORD *)&v10[4] = *(_QWORD *)&kPos.y;
  ClientEffect::SetTargetPos((ClientEffect *)v6, *(NiPoint3 *)v10);
  *(_DWORD *)(v6 + 552) = (_DWORD)kLookAtPos.x;
  *(_DWORD *)(v6 + 556) = LODWORD(kLookAtPos.y);
  *(_DWORD *)(v6 + 560) = LODWORD(kLookAtPos.z);
  LookAtEffect::CalcDir((LookAtEffect *)v6);
  EffectMgr::Add(v4, (Effect *)v6);
  return (LookAtEffect *)v6;
}

//----- (00698950) --------------------------------------------------------
Effect *__thiscall EffectMgr::JustCreateAttachEffect(EffectMgr *this, char *pcEffectName, NiNode *pkTargetNode, IEffectHolder *pkHolder, float fTime)
{
  NiObject *v5; // eax@1
  NiObject *v6; // ebx@2
  NiObject *v7; // eax@2
  void *v8; // eax@4
  int v9; // eax@5
  int v10; // edi@5
  int v12; // esi@12
  NiNode *v13; // eax@12
  EffectMgr *thisa; // [sp+4h] [bp-10h]@1

  thisa = this;
  v5 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( !v5 )
    return 0;
  v6 = 0;
  v7 = NiObject::Clone(v5);
  if ( v7 )
  {
    v6 = v7;
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
  }
  v8 = operator new(0x21Cu);
  if ( v8 )
  {
    AttachEff::AttachEff((AttachEff *)v8, (NiNode *)v6, pkHolder != 0, 0);
    v10 = v9;
  }
  else
  {
    v10 = 0;
  }
  if ( !v10 )
  {
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
        v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v12 = *(_DWORD *)(v10 + 528);
  v13 = pkTargetNode;
  if ( (NiNode *)v12 != pkTargetNode )
  {
    if ( v12 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
      v13 = pkTargetNode;
    }
    *(_DWORD *)(v10 + 528) = v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  *(_DWORD *)(v10 + 532) = 0;
  EffectMgr::Add(thisa, (Effect *)v10);
  if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) )
    v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  return (Effect *)v10;
}

//----- (00698AC0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos, NiPoint3 kDir, float fTime, float fScale)
{
  EffectMgr *v6; // edi@1
  NiObject *v7; // eax@1
  bool result; // al@2
  NiObject *v9; // esi@3
  void *v10; // eax@3
  Effect *v11; // eax@4
  Effect *v12; // esi@4
  NiNode *v13; // eax@7
  float pcEffectNamea; // [sp+2Ch] [bp+8h]@8

  v6 = this;
  v7 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v7
    && ((v9 = NiObject::Clone(v7), (v10 = operator new(0x20Cu)) == 0) ? (v12 = 0) : (Effect::Effect(
                                                                                       (Effect *)v10,
                                                                                       (NiNode *)v9,
                                                                                       0,
                                                                                       0),
                                                                                     v12 = v11),
        v12) )
  {
    v12->baseclass_0.vfptr[7].__vecDelDtor((NiRefObject *)v12, (unsigned int)&kPos);
    v12->baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v12, (unsigned int)&kDir);
    v13 = v12->m_spDefaultEffect.m_pObject;
    if ( v13 )
    {
      pcEffectNamea = fabs(fScale);
      v13->baseclass_0.m_kLocal.m_fScale = pcEffectNamea;
    }
    EffectMgr::Add(v6, v12);
    EffectMgr::AttachEffectToWorld(v6, v12);
    ((void (__cdecl *)(_DWORD))v12->baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(fTime));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00698BB0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, unsigned int *dwEffHandle_, NiNode *_pEffect, NiNode *_pNode, float fTime, bool _bLoop, unsigned __int16 kHandle)
{
  void *v7; // eax@1
  Effect *v8; // eax@2
  Effect *v9; // esi@2
  bool result; // al@5
  unsigned int v11; // edi@6
  EffectMgr *v12; // ST20_4@13
  EffectMgr *v13; // edi@13

  v7 = operator new(0x21Cu);
  if ( v7 )
  {
    AttachEff::AttachEff((AttachEff *)v7, _pEffect, 0, 0);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
  {
    v11 = v9[1].baseclass_0.m_uiRefCount;
    if ( (NiNode *)v11 != _pNode )
    {
      if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
      v9[1].baseclass_0.m_uiRefCount = (unsigned int)_pNode;
      if ( _pNode )
        InterlockedIncrement((volatile LONG *)&_pNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v9->m_bLoop = _bLoop;
    v9[1].baseclass_8.vfptr = 0;
    *dwEffHandle_ = (unsigned int)v9;
    v9->baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v9, kHandle);
    v13 = v12;
    EffectMgr::Add(v12, v9);
    EffectMgr::AttachEffectToWorld(v13, v9);
    ((void (__cdecl *)(_DWORD))v9->baseclass_0.vfptr[15].__vecDelDtor)(LODWORD(fTime));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00698CD0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateAttachScaleEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, NiNode *pkTargetNode, float fScale, float fTime)
{
  NiNode *v6; // eax@1
  bool result; // al@2
  NiObject *v8; // esi@3
  void *v9; // eax@3
  unsigned int v10; // eax@4
  unsigned int v11; // esi@4
  int v12; // edi@7
  EffectMgr *thisa; // [sp+18h] [bp-10h]@1
  float pcEffectNamea; // [sp+34h] [bp+Ch]@3

  thisa = this;
  v6 = EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v6
    && ((pcEffectNamea = fabs(fScale),
         v6->baseclass_0.m_kLocal.m_fScale = pcEffectNamea,
         v8 = NiObject::Clone(&v6->baseclass_0.baseclass_0.baseclass_0),
         (v9 = operator new(0x21Cu)) == 0) ? (v11 = 0) : (AttachEff::AttachEff((AttachEff *)v9, (NiNode *)v8, 0, 0),
                                                          v11 = v10),
        v11) )
  {
    v12 = *(_DWORD *)(v11 + 528);
    if ( (NiNode *)v12 != pkTargetNode )
    {
      if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
      *(_DWORD *)(v11 + 528) = pkTargetNode;
      if ( pkTargetNode )
        InterlockedIncrement((volatile LONG *)&pkTargetNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    *(_DWORD *)(v11 + 532) = 0;
    *(_BYTE *)(v11 + 140) = 1;
    *dwEffHandle_ = v11;
    EffectMgr::Add(thisa, (Effect *)v11);
    EffectMgr::AttachEffectToWorld(thisa, (Effect *)v11);
    (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v11 + 60))(LODWORD(fTime));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00698E00) --------------------------------------------------------
NiNode *__thiscall EffectMgr::GetEffPos(EffectMgr *this, AbnormalStateViewInfo::EffPosEnum eEffPos, Char *pkTarget)
{
  NiNode *result; // eax@1

  result = 0;
  switch ( eEffPos )
  {
    case 3:
      if ( pkTarget != (Char *)-776 )
        result = pkTarget->m_kCharShape.m_apkLinkNode[1];
      break;
    case 2:
      if ( pkTarget != (Char *)-776 )
        result = pkTarget->m_kCharShape.m_apkLinkNode[5];
      break;
    case 6:
      if ( pkTarget != (Char *)-776 )
        result = pkTarget->m_kCharShape.m_apkLinkNode[7];
      break;
    case 7:
      if ( pkTarget != (Char *)-776 )
        result = pkTarget->m_kCharShape.m_apkLinkNode[8];
      break;
    case 0:
    case 1:
      result = pkTarget->m_spScene.m_pObject;
      break;
    default:
      return result;
  }
  return result;
}

//----- (00698E80) --------------------------------------------------------
Effect *__thiscall EffectMgr::JustCreateAttachEffect(EffectMgr *this, char *pcEffectName, Char *pkTarget, AbnormalStateViewInfo::EffPosEnum eEffPos, float fTime, bool bShow)
{
  NiObject *v6; // eax@1
  NiObject *v7; // ebx@2
  NiObject *v8; // eax@2
  void *v9; // eax@4
  AttachEff *v10; // eax@5
  AttachEff *v11; // esi@5
  NiNode *v13; // eax@12
  IEffectHolder *v14; // ecx@13
  EffectMgr *thisa; // [sp+1Ch] [bp-10h]@1

  thisa = this;
  v6 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( !v6 )
    return 0;
  v7 = 0;
  v8 = NiObject::Clone(v6);
  if ( v8 )
  {
    v7 = v8;
    InterlockedIncrement((volatile LONG *)&v8->baseclass_0.m_uiRefCount);
  }
  v9 = operator new(0x21Cu);
  if ( v9 )
  {
    AttachEff::AttachEff((AttachEff *)v9, (NiNode *)v7, 0, 0);
    v11 = v10;
  }
  else
  {
    v11 = 0;
  }
  if ( !v11 )
  {
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) )
        v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    }
    return 0;
  }
  v13 = EffectMgr::GetEffPos(thisa, eEffPos, pkTarget);
  if ( pkTarget )
    v14 = &pkTarget->baseclass_3c;
  else
    v14 = 0;
  AttachEff::SetTargetNode(v11, v13, v14);
  v11->baseclass_0.baseclass_0.vfptr[24].__vecDelDtor((NiRefObject *)v11, pkTarget->m_kHandle);
  EffectMgr::Add(thisa, &v11->baseclass_0);
  if ( bShow )
  {
    v11->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor((NiRefObject *)v11, LODWORD(fTime));
    EffectMgr::AttachEffectToWorld(thisa, &v11->baseclass_0);
  }
  if ( v7 && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) )
    v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  return (Effect *)v11;
}

//----- (00698FE0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, NiNode *_pNode, float fTime, bool _bLoop)
{
  EffectMgr *v6; // esi@1
  NiObject *v7; // eax@1
  bool result; // al@2
  NiObject *v9; // eax@3

  v6 = this;
  v7 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v7 )
  {
    v9 = NiObject::Clone(v7);
    result = EffectMgr::CreateAttachEffect(v6, dwEffHandle_, (NiNode *)v9, _pNode, fTime, _bLoop, 0xFFFFu);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00699030) --------------------------------------------------------
bool __thiscall EffectMgr::CreateAttachEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, Char *pkTarget, AbnormalStateViewInfo::EffPosEnum eEffPos, float fTime, bool _bLoop, bool bAura, bool bHold, bool bShow)
{
  NiObject *v10; // eax@1
  bool result; // al@2
  NiObject *v12; // esi@3
  void *v13; // eax@3
  unsigned int v14; // eax@4
  unsigned int v15; // esi@4
  NiNode *v16; // eax@7
  IEffectHolder *v17; // ecx@10
  EffectMgr *thisa; // [sp+18h] [bp-10h]@1

  thisa = this;
  v10 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v10
    && ((v12 = NiObject::Clone(v10), (v13 = operator new(0x21Cu)) == 0) ? (v15 = 0) : (AttachEff::AttachEff(
                                                                                         (AttachEff *)v13,
                                                                                         (NiNode *)v12,
                                                                                         0,
                                                                                         0),
                                                                                       v15 = v14),
        v15) )
  {
    v16 = EffectMgr::GetEffPos(thisa, eEffPos, pkTarget);
    if ( !v16 )
      v16 = pkTarget->m_spScene.m_pObject;
    if ( pkTarget )
      v17 = &pkTarget->baseclass_3c;
    else
      v17 = 0;
    AttachEff::SetTargetNode((AttachEff *)v15, v16, v17);
    *(_BYTE *)(v15 + 140) = _bLoop;
    if ( bHold )
      AttachEff::SetEffectHold((AttachEff *)v15, 1);
    if ( !strcmp(pcEffectName, "Sta_TimeAttackLast") )
      AttachEff::SetEffectHold((AttachEff *)v15, 1);
    *dwEffHandle_ = v15;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v15 + 96))(v15, pkTarget->m_kHandle);
    if ( bAura )
    {
      *(_BYTE *)(v15 + 448) = 1;
      *(_BYTE *)(v15 + 536) = 1;
    }
    EffectMgr::Add(thisa, (Effect *)v15);
    EffectMgr::AttachEffectToWorld(thisa, (Effect *)v15);
    if ( bShow )
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v15 + 60))(v15, LODWORD(fTime));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006991B0) --------------------------------------------------------
bool __thiscall EffectMgr::CreateAniCtrlEffect(EffectMgr *this, unsigned int *dwEffHandle_, char *pcEffectName, Char *pkTarget, AbnormalStateViewInfo::EffPosEnum eEffPos, float fTime, bool _bLoop, unsigned __int16 kID)
{
  EffectMgr *v8; // ebx@1
  NiObject *v9; // eax@1
  bool result; // al@2
  NiObject *v11; // esi@3
  void *v12; // eax@3
  unsigned int v13; // eax@4
  unsigned int v14; // esi@4
  NiNode *v15; // eax@7
  IEffectHolder *v16; // ecx@10
  AbnormalStateInfo *v17; // eax@13
  AbnormalStateInfo *v18; // ebx@13
  EffectMgr *v19; // [sp+0h] [bp-10h]@1

  v8 = this;
  v19 = this;
  v9 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  if ( v9
    && ((v11 = NiObject::Clone(v9), (v12 = operator new(0x21Cu)) == 0) ? (v14 = 0) : (AttachEff::AttachEff(
                                                                                        (AttachEff *)v12,
                                                                                        (NiNode *)v11,
                                                                                        0,
                                                                                        0),
                                                                                      v14 = v13),
        v14) )
  {
    v15 = EffectMgr::GetEffPos(v8, eEffPos, pkTarget);
    if ( !v15 )
      v15 = pkTarget->m_spScene.m_pObject;
    if ( pkTarget )
      v16 = &pkTarget->baseclass_3c;
    else
      v16 = 0;
    AttachEff::SetTargetNode((AttachEff *)v14, v15, v16);
    *(_BYTE *)(v14 + 140) = 1;
    *dwEffHandle_ = v14;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v14 + 96))(v14, pkTarget->m_kHandle);
    if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v14 + 16))(v14) )
    {
      v17 = IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::GetByID(kID, 1);
      v18 = v17;
      if ( v17 )
      {
        if ( SubAbStateInfoTab::GetByInxName(v17->SubAbState) )
          *(_WORD *)(v14 + 458) = LOWORD(v18->AbStataIndex);
      }
      v8 = v19;
    }
    *(_WORD *)(v14 + 456) = pkTarget->m_kHandle;
    *(_DWORD *)(v14 + 452) = 1;
    EffectMgr::Add(v8, (Effect *)v14);
    EffectMgr::AttachEffectToWorld(v8, (Effect *)v14);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00699310) --------------------------------------------------------
bool __thiscall EffectMgr::CreateStretchEffect(EffectMgr *this, char *pcEffectName, NiPoint3 kPos, NiPoint3 kDir, Char *pkCaster, Char *pkTarget, float fTime)
{
  NiObject *v7; // eax@1
  int v8; // ebx@1
  void *v9; // eax@2
  NiNode *v10; // esi@2
  void *v11; // eax@2
  int v12; // eax@3
  Char *v13; // esi@5
  Char *v14; // eax@5
  Char *v15; // edi@5
  int v16; // esi@7
  int v17; // eax@7
  double v18; // st7@7
  double v19; // st7@7
  NiPoint3 *v20; // eax@7
  Char *v21; // esi@7
  int v22; // esi@7
  NiPoint3 *v23; // eax@7
  EffectMgr *v24; // esi@8
  EffectMgr *v25; // ecx@8
  char v27; // [sp+18h] [bp-E4h]@7
  NiPoint3 CastPos; // [sp+24h] [bp-D8h]@7
  void *v29; // [sp+30h] [bp-CCh]@2
  EffectMgr *v30; // [sp+34h] [bp-C8h]@1
  Char *thisa; // [sp+38h] [bp-C4h]@1
  NiPoint3 kPoint3Length; // [sp+3Ch] [bp-C0h]@7
  float pkNode; // [sp+48h] [bp-B4h]@2
  NiPoint3 pt; // [sp+4Ch] [bp-B0h]@7
  Char *_pkChar; // [sp+58h] [bp-A4h]@1
  char v36; // [sp+5Ch] [bp-A0h]@7
  NiMatrix3 result; // [sp+80h] [bp-7Ch]@7
  NiMatrix3 MakeScale; // [sp+A4h] [bp-58h]@7
  NiMatrix3 makerot; // [sp+C8h] [bp-34h]@7
  unsigned int v40; // [sp+ECh] [bp-10h]@1
  int v41; // [sp+F8h] [bp-4h]@2
  int v42; // [sp+FCh] [bp+0h]@1

  v40 = (unsigned int)&v42 ^ __security_cookie;
  v30 = this;
  thisa = pkCaster;
  _pkChar = pkTarget;
  v7 = (NiObject *)EffectMgr::GetEffectNode(this, pcEffectName);
  v8 = 0;
  if ( v7 )
  {
    v9 = NiObject::Clone(v7);
    v10 = (NiNode *)v9;
    LODWORD(pkNode) = v9;
    v11 = operator new(0x20Cu);
    v29 = v11;
    v41 = 0;
    if ( v11 )
    {
      Effect::Effect((Effect *)v11, v10, 0, 0);
      v8 = v12;
    }
    v41 = -1;
    if ( v8 )
    {
      v13 = CharMgr::GetChar(&g_kCharMgr, pkCaster);
      v14 = CharMgr::GetChar(&g_kCharMgr, _pkChar);
      v15 = v14;
      if ( v13 && v14 )
      {
        v16 = ((int (__thiscall *)(Char *))v13->baseclass_0.vfptr[6].Deaffect)(v13);
        v17 = ((int (__thiscall *)(Char *))v15->baseclass_0.vfptr[6].Deaffect)(v15);
        pt.x = *(float *)v17 - *(float *)v16;
        v18 = *(float *)(v17 + 4);
        LODWORD(kPoint3Length.x) = (_DWORD)pt.x;
        pt.y = v18 - *(float *)(v16 + 4);
        v19 = *(float *)(v17 + 8);
        kPoint3Length.y = pt.y;
        pt.z = v19 - *(float *)(v16 + 8);
        kPoint3Length.z = pt.z;
        *(float *)&_pkChar = pt.y * pt.y + pt.x * pt.x + pt.z * pt.z;
        NiPoint3::Unitize(&kPoint3Length);
        NiMatrix3::MakeIdentity(&makerot);
        pt.x = 0.0;
        pt.y = 0.0;
        pt.z = 1.0;
        v20 = NiPoint3::Cross(&kPoint3Length, &CastPos, &pt);
        makerot.m_pEntry[0][0] = v20->x;
        makerot.m_pEntry[1][0] = v20->y;
        makerot.m_pEntry[2][0] = v20->z;
        makerot.m_pEntry[0][1] = kPoint3Length.x;
        makerot.m_pEntry[1][1] = kPoint3Length.y;
        makerot.m_pEntry[2][1] = kPoint3Length.z;
        makerot.m_pEntry[0][2] = 0.0;
        makerot.m_pEntry[1][2] = 0.0;
        makerot.m_pEntry[2][2] = 1.0;
        NiMatrix3::MakeIdentity(&MakeScale);
        MakeScale.m_pEntry[0][0] = 0.5;
        MakeScale.m_pEntry[1][0] = 0.0;
        MakeScale.m_pEntry[2][0] = 0.0;
        *(float *)&_pkChar = sqrt(*(float *)&_pkChar);
        pkNode = *(float *)&_pkChar / *(float *)(LODWORD(pkNode) + 48);
        kPoint3Length.y = pkNode * 0.5;
        MakeScale.m_pEntry[0][1] = 0.0;
        MakeScale.m_pEntry[1][1] = kPoint3Length.y;
        MakeScale.m_pEntry[2][1] = 0.0;
        NiMatrix3::MakeIdentity(&result);
        memcpy(&result, NiMatrix3::operator_(&makerot, (NiMatrix3 *)&v36, &MakeScale), sizeof(result));
        v21 = thisa;
        Char::GetChestPos(thisa, &CastPos);
        Char::GetChestPos(v21, &CastPos);
        memcpy((void *)(*(_DWORD *)(v8 + 112) + 52), &makerot, 0x24u);
        v22 = *(_DWORD *)v8;
        v23 = Char::GetChestPos(thisa, (NiPoint3 *)&v27);
        (*(void (__thiscall **)(int, NiPoint3 *))(v22 + 28))(v8, v23);
      }
      v24 = v30;
      v25 = v30;
      *(_BYTE *)(v8 + 140) = 1;
      EffectMgr::Add(v25, (Effect *)v8);
      EffectMgr::AttachEffectToWorld(v24, (Effect *)v8);
      (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 60))(v8, LODWORD(fTime));
    }
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00699610) --------------------------------------------------------
bool __thiscall EffectMsg::Play(EffectMsg *this, EFFECT_MESSAGE_TYPE Type)
{
  EffectMsg *v2; // ebx@1
  NiNode *v3; // esi@2
  float v4; // ST18_4@5
  char *v5; // eax@5
  bool result; // al@9

  v2 = this;
  if ( (unsigned int)Type > 0xE )
    goto LABEL_13;
  v3 = this->m_spEffectMsg[Type].m_pObject;
  if ( v3 )
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  if ( v3 )
  {
    v4 = (double)(PgWin::ms_uiScreenWidth >> 1);
    v3->baseclass_0.m_kLocal.m_Translate.x = v4;
    v3->baseclass_0.m_kLocal.m_Translate.y = -500.0;
    v3->baseclass_0.m_kLocal.m_Translate.z = 0.0;
    PgWinMgr::ClearFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime);
    PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &v3->baseclass_0);
    v5 = (char *)&v2->m_kSoundFilename[Type];
    if ( v2->m_kSoundFilename[Type].baseclass_0._Myres >= 0x10 )
      v5 = *(char **)v5;
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v5);
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    result = 1;
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00699740) --------------------------------------------------------
void __thiscall EffectMsg::EffectMsg(EffectMsg *this)
{
  EffectMsg *v1; // ebx@1
  unsigned int v2; // edi@1
  NiNode *v3; // esi@2

  v1 = this;
  _eh_vector_constructor_iterator_(
    this,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v2 = 0;
  _eh_vector_constructor_iterator_(
    v1->m_kSoundFilename,
    0x1Cu,
    15,
    (void (__thiscall *)(void *))std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  do
  {
    v3 = v1->m_spEffectMsg[v2].m_pObject;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
      v1->m_spEffectMsg[v2].m_pObject = 0;
    }
    ++v2;
  }
  while ( v2 < 0xF );
}

//----- (006997F0) --------------------------------------------------------
void __thiscall EffectMsg::_EffectMsg(EffectMsg *this)
{
  void *v1; // esi@1

  v1 = this;
  _eh_vector_destructor_iterator_(
    this->m_kSoundFilename,
    0x1Cu,
    15,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  _eh_vector_destructor_iterator_(
    v1,
    4u,
    15,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}

//----- (00699860) --------------------------------------------------------
bool __thiscall EffectMsg::Load(EffectMsg *this)
{
  EffectMsg *v1; // edi@1
  int v2; // eax@1
  const char *v3; // esi@4
  int v4; // eax@8
  char v5; // cl@9
  NiNode *v6; // edi@10
  NiNode *v7; // esi@10
  int v8; // esi@17
  const char *v9; // edi@18
  EffectMsg *v11; // [sp+0h] [bp-364h]@1
  int i; // [sp+4h] [bp-360h]@1
  EffectMsg *v13; // [sp+8h] [bp-35Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Sound[15]; // [sp+Ch] [bp-358h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Nif[15]; // [sp+1B0h] [bp-1B4h]@1
  unsigned int v16; // [sp+354h] [bp-10h]@1
  int v17; // [sp+360h] [bp-4h]@1
  int v18; // [sp+364h] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v1 = this;
  v11 = this;
  Nif[0].baseclass_0._Myres = 15;
  Nif[0].baseclass_0._Mysize = 0;
  Nif[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(Nif, "GuildTWin.nif", 0xDu);
  v17 = 0;
  Nif[1].baseclass_0._Myres = 15;
  Nif[1].baseclass_0._Mysize = 0;
  Nif[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[1], "GuildTLose.nif", 0xEu);
  LOBYTE(v17) = 1;
  Nif[2].baseclass_0._Myres = 15;
  Nif[2].baseclass_0._Mysize = 0;
  Nif[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[2], "GuildTDraw.nif", 0xEu);
  LOBYTE(v17) = 2;
  Nif[3].baseclass_0._Myres = 15;
  Nif[3].baseclass_0._Mysize = 0;
  Nif[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[3], "Start.nif", 9u);
  LOBYTE(v17) = 3;
  Nif[4].baseclass_0._Myres = 15;
  Nif[4].baseclass_0._Mysize = 0;
  Nif[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[4], "StaCount8.nif", 0xDu);
  LOBYTE(v17) = 4;
  Nif[5].baseclass_0._Myres = 15;
  Nif[5].baseclass_0._Mysize = 0;
  Nif[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[5], "KQuestSucc.nif", 0xEu);
  LOBYTE(v17) = 5;
  Nif[6].baseclass_0._Myres = 15;
  Nif[6].baseclass_0._Mysize = 0;
  Nif[6].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[6], "KQuestFail.nif", 0xEu);
  LOBYTE(v17) = 6;
  Nif[7].baseclass_0._Myres = 15;
  Nif[7].baseclass_0._Mysize = 0;
  Nif[7].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[7], "Start_Olympic.nif", 0x11u);
  LOBYTE(v17) = 7;
  Nif[8].baseclass_0._Myres = 15;
  Nif[8].baseclass_0._Mysize = 0;
  Nif[8].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[8], "Goal_Olympic.nif", 0x10u);
  LOBYTE(v17) = 8;
  Nif[9].baseclass_0._Myres = 15;
  Nif[9].baseclass_0._Mysize = 0;
  Nif[9].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[9], "Win_Soccer.nif", 0xEu);
  LOBYTE(v17) = 9;
  Nif[10].baseclass_0._Myres = 15;
  Nif[10].baseclass_0._Mysize = 0;
  Nif[10].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[10], "Lose_Soccer.nif", 0xFu);
  LOBYTE(v17) = 10;
  Nif[11].baseclass_0._Myres = 15;
  Nif[11].baseclass_0._Mysize = 0;
  Nif[11].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[11], "Draw_Soccer.nif", 0xFu);
  LOBYTE(v17) = 11;
  Nif[12].baseclass_0._Myres = 15;
  Nif[12].baseclass_0._Mysize = 0;
  Nif[12].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[12], "Start_Soccer.nif", 0x10u);
  LOBYTE(v17) = 12;
  Nif[13].baseclass_0._Myres = 15;
  Nif[13].baseclass_0._Mysize = 0;
  Nif[13].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[13], "Goal_Soccer.nif", 0xFu);
  LOBYTE(v17) = 13;
  Nif[14].baseclass_0._Myres = 15;
  Nif[14].baseclass_0._Mysize = 0;
  Nif[14].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Nif[14], "Start2.nif", 0xAu);
  v17 = 14;
  Sound[0].baseclass_0._Myres = 15;
  Sound[0].baseclass_0._Mysize = 0;
  Sound[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(Sound, "KQSpringWin", 0xBu);
  LOBYTE(v17) = 15;
  Sound[1].baseclass_0._Myres = 15;
  Sound[1].baseclass_0._Mysize = 0;
  Sound[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[1], "KQSpringLose", 0xCu);
  LOBYTE(v17) = 16;
  Sound[2].baseclass_0._Myres = 15;
  Sound[2].baseclass_0._Mysize = 0;
  Sound[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[2], "KQSpringDraw", 0xCu);
  LOBYTE(v17) = 17;
  Sound[3].baseclass_0._Myres = 15;
  Sound[3].baseclass_0._Mysize = 0;
  Sound[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[3], "Start", 5u);
  LOBYTE(v17) = 18;
  Sound[4].baseclass_0._Myres = 15;
  Sound[4].baseclass_0._Mysize = 0;
  Sound[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[4], "StaCount8", 9u);
  LOBYTE(v17) = 19;
  Sound[5].baseclass_0._Myres = 15;
  Sound[5].baseclass_0._Mysize = 0;
  Sound[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[5], "KDSUCCESS", 9u);
  LOBYTE(v17) = 20;
  Sound[6].baseclass_0._Myres = 15;
  Sound[6].baseclass_0._Mysize = 0;
  Sound[6].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[6], "KDFAIL", 6u);
  LOBYTE(v17) = 21;
  Sound[7].baseclass_0._Myres = 15;
  Sound[7].baseclass_0._Mysize = 0;
  Sound[7].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[7], "Start", 5u);
  LOBYTE(v17) = 22;
  Sound[8].baseclass_0._Myres = 15;
  Sound[8].baseclass_0._Mysize = 0;
  Sound[8].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[8], "DiceFinalResult", 0xFu);
  LOBYTE(v17) = 23;
  Sound[9].baseclass_0._Myres = 15;
  Sound[9].baseclass_0._Mysize = 0;
  Sound[9].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[9], "KQSpringWin", 0xBu);
  LOBYTE(v17) = 24;
  Sound[10].baseclass_0._Myres = 15;
  Sound[10].baseclass_0._Mysize = 0;
  Sound[10].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[10], "KQSpringLose", 0xCu);
  LOBYTE(v17) = 25;
  Sound[11].baseclass_0._Myres = 15;
  Sound[11].baseclass_0._Mysize = 0;
  Sound[11].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[11], "KQSpringDraw", 0xCu);
  LOBYTE(v17) = 26;
  Sound[12].baseclass_0._Myres = 15;
  Sound[12].baseclass_0._Mysize = 0;
  Sound[12].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[12], "KDSoccer_whistle", 0x10u);
  LOBYTE(v17) = 27;
  Sound[13].baseclass_0._Myres = 15;
  Sound[13].baseclass_0._Mysize = 0;
  Sound[13].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[13], "DiceFinalResult", 0xFu);
  LOBYTE(v17) = 28;
  Sound[14].baseclass_0._Myres = 15;
  Sound[14].baseclass_0._Mysize = 0;
  Sound[14].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Sound[14], "Start2", 6u);
  v2 = 0;
  LOBYTE(v17) = 29;
  v13 = v1;
  for ( i = 0; ; v2 = i * 28 )
  {
    if ( *(unsigned int *)((char *)&Nif[0].baseclass_0._Myres + v2) < 0x10 )
      v3 = (char *)Nif + v2;
    else
      v3 = *(const char **)&Nif[0].baseclass_0.___u0.baseclass_0.dummy[v2];
    if ( !Folder::m_bInit )
      Folder::Init();
    v4 = 0;
    do
    {
      v5 = *(&Folder::m_acEffect + v4);
      *(&Folder::m_acMerge + v4++) = v5;
    }
    while ( v5 );
    strcat(&Folder::m_acMerge, v3);
    v6 = Ns_LoadNifFile(&Folder::m_acMerge, 0);
    v7 = v13->m_spEffectMsg[0].m_pObject;
    if ( v13->m_spEffectMsg[0].m_pObject != v6 )
    {
      if ( v7
        && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v7 )
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      v13->m_spEffectMsg[0].m_pObject = v6;
      if ( v6 )
        InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v8 = i * 28;
    v9 = (const char *)(Sound[i].baseclass_0._Myres < 0x10 ? &Sound[i] : *(_DWORD *)&Sound[i].baseclass_0.___u0.baseclass_0.dummy[0]);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v11->m_kSoundFilename[i],
      v9,
      strlen(v9));
    v13 = (EffectMsg *)((char *)v13 + 4);
    ++i;
    if ( v8 + 28 >= 420 )
      break;
  }
  LOBYTE(v17) = 14;
  _eh_vector_destructor_iterator_(
    Sound,
    0x1Cu,
    15,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  v17 = -1;
  _eh_vector_destructor_iterator_(
    Nif,
    0x1Cu,
    15,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00699EA0) --------------------------------------------------------
void __thiscall EffectObject::EffectObject(EffectObject *this)
{
  ;
}

//----- (00699EC0) --------------------------------------------------------
void __thiscall ExpEffect::ExpEffect(ExpEffect *this, NiNode *pkNode, bool bCreateProgramEff)
{
  ExpEffect *v3; // esi@1

  v3 = this;
  Effect::Effect(&this->baseclass_0, pkNode, bCreateProgramEff, 0);
  v3->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpEffect::_vftable_;
  v3->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ExpEffect::_vftable_;
  NpNs_MoveToTarget::NpNs_MoveToTarget(&v3->m_kMoveToTarget);
}
// 9C7488: using guessed type int (__stdcall *ExpEffect___vftable_[3])(int);
// 9C749C: using guessed type int (__thiscall *ExpEffect___vftable_)(void *p, char);

//----- (00699F30) --------------------------------------------------------
void __thiscall ExpEffect::_ExpEffect(ExpEffect *this)
{
  Effect *v1; // esi@1

  v1 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ExpEffect::_vftable_;
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&this->m_kMoveToTarget);
  Effect::_Effect(v1);
}
// 9C7488: using guessed type int (__stdcall *ExpEffect___vftable_[3])(int);
// 9C749C: using guessed type int (__thiscall *ExpEffect___vftable_)(void *p, char);

//----- (00699FA0) --------------------------------------------------------
bool __thiscall ExpEffect::IsEnd(ExpEffect *this, float fTime)
{
  return ((int (*)(void))this->baseclass_0.baseclass_0.vfptr[23].__vecDelDtor)() != 0;
}

//----- (00699FB0) --------------------------------------------------------
bool __thiscall ExpEffect::IsHitTarget(ExpEffect *this)
{
  return this->m_kMoveToTarget.vfptr->IsMove(&this->m_kMoveToTarget) == 0;
}

//----- (00699FD0) --------------------------------------------------------
void __thiscall ExpEffect::Update(ExpEffect *this, float fTime)
{
  int v2; // edi@0
  int v3; // ST04_4@1
  ExpEffect *v4; // edi@1
  Char *v5; // eax@1
  Char *v6; // ebx@1
  NiPoint3 *v7; // eax@4
  float v8; // edx@4
  NpNs_MoveToTargetVtbl *v9; // eax@4
  int v10; // eax@5
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@5
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // edx@7
  NiPoint3 pos3Dir; // [sp+10h] [bp-24h]@4
  NiPoint3 pos3TargetPos; // [sp+1Ch] [bp-18h]@4
  NiPoint3 kPos; // [sp+28h] [bp-Ch]@5

  v3 = v2;
  v4 = this;
  Effect::Update(&this->baseclass_0, fTime);
  ((void (__thiscall *)(NpNs_MoveToTarget *, _DWORD, int))v4->m_kMoveToTarget.vfptr->Update)(
    &v4->m_kMoveToTarget,
    LODWORD(fTime),
    v3);
  v5 = CharMgr::GetChar(&g_kCharMgr, g_pkMainChar->m_kHandle);
  v6 = v5;
  if ( v5 && Char::IsUpdate(v5) && !v6->m_bCulled )
  {
    v7 = Char::GetChestPos(v6, &pos3Dir);
    pos3TargetPos.x = v7->x;
    pos3TargetPos.y = v7->y;
    v8 = v7->z;
    v9 = v4->m_kMoveToTarget.vfptr;
    pos3TargetPos.z = v8;
    v9->StartMove(&v4->m_kMoveToTarget, &pos3TargetPos);
    if ( v4->baseclass_0.m_spNode.m_pObject )
    {
      v10 = ((int (__thiscall *)(NpNs_MoveToTarget *, _DWORD))v4->m_kMoveToTarget.vfptr->GetCurrentPos)(
              &v4->m_kMoveToTarget,
              (_DWORD)kPos.x);
      LODWORD(kPos.x) = *(_DWORD *)v10;
      LODWORD(kPos.y) = *(_DWORD *)(v10 + 4);
      v11 = v4->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
      LODWORD(kPos.z) = *(_DWORD *)(v10 + 8);
      v11(&v4->baseclass_0.baseclass_0, (unsigned int)&kPos);
      pos3Dir.x = kPos.x - pos3TargetPos.x;
      pos3Dir.y = kPos.y - pos3TargetPos.y;
      pos3Dir.z = kPos.z - pos3TargetPos.z;
      if ( NiPoint3::Unitize(&pos3Dir) < 5.0 )
        v4->m_kMoveToTarget.vfptr->Stop(&v4->m_kMoveToTarget);
      v12 = v4->baseclass_0.baseclass_0.vfptr[11].__vecDelDtor;
      LODWORD(kPos.x) = &pos3Dir;
      ((void (__thiscall *)(ExpEffect *))v12)(v4);
    }
  }
  else
  {
    v4->m_kMoveToTarget.vfptr->Stop(&v4->m_kMoveToTarget);
  }
}
// 699FD0: could not find valid save-restore pair for ebx
// 699FD0: could not find valid save-restore pair for edi
// 699FD0: could not find valid save-restore pair for esi

//----- (0069A120) --------------------------------------------------------
void __thiscall ExpEffect::Start(ExpEffect *this, float fTime)
{
  Effect::Start(&this->baseclass_0, fTime);
}

//----- (0069A140) --------------------------------------------------------
NiRTTI *__thiscall ExpEffect::GetRTTI(ExpEffect *this)
{
  return &ExpEffect::m_RTTI;
}

//----- (0069A150) --------------------------------------------------------
void *__thiscall ExpEffect::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return ExpEffect::_vector_deleting_destructor_((ExpEffect *)((char *)this - 8), a2);
}

//----- (0069A160) --------------------------------------------------------
void *__thiscall ExpEffect::_vector_deleting_destructor_(ExpEffect *this, unsigned int a2)
{
  Effect *v2; // esi@1

  v2 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ExpEffect::_vftable_;
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&this->m_kMoveToTarget);
  Effect::_Effect(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C7488: using guessed type int (__stdcall *ExpEffect___vftable_[3])(int);
// 9C749C: using guessed type int (__thiscall *ExpEffect___vftable_)(void *p, char);

//----- (0069A1E0) --------------------------------------------------------
void __thiscall SpEffect::SpEffect(SpEffect *this, NiNode *pkEffect)
{
  SpEffect *v2; // esi@1
  NiNode *v3; // edi@1

  v2 = this;
  this->m_spEffect.m_pObject = 0;
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&this->m_kMarkCheck);
  NsEffect::NsEffect(&v2->m_kEffect);
  v3 = v2->m_spEffect.m_pObject;
  if ( v2->m_spEffect.m_pObject != pkEffect )
  {
    if ( v3
      && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spEffect.m_pObject = pkEffect;
    if ( pkEffect )
      InterlockedIncrement((volatile LONG *)&pkEffect->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  *(_WORD *)&v2->m_bLive = 0;
  v2->m_bClamp = 0;
}

//----- (0069A290) --------------------------------------------------------
void __thiscall SpEffect::Start(SpEffect *this, NiNode *pkParent)
{
  SpEffect *v2; // esi@1

  v2 = this;
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    pkParent,
    this->m_spEffect.m_pObject,
    0);
  NsEffect::SetEffectNode(&v2->m_kEffect, &v2->m_spEffect.m_pObject->baseclass_0);
  NsEffect::Start(&v2->m_kEffect, Timer::ms_fCurTime);
  v2->m_kMarkCheck.m_fMarkTime = v2->m_kEffect.m_fMaxTime;
  CNSTimer_MarkCheck::ReSet(&v2->m_kMarkCheck, Timer::ms_fCurTime, OVER);
  v2->m_bLive = 1;
  NiAVObject::UpdateProperties(&pkParent->baseclass_0);
  NiAVObject::UpdateEffects(&pkParent->baseclass_0);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0069A300) --------------------------------------------------------
void __thiscall SpEffect::End(SpEffect *this, NiNode *pkParent)
{
  SpEffect *v2; // edi@1
  NiNode *v3; // esi@4

  v2 = this;
  if ( pkParent && this->m_spEffect.m_pObject )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &pkParent,
      this->m_spEffect.m_pObject);
    if ( pkParent )
    {
      v3 = pkParent;
      if ( !InterlockedDecrement((volatile LONG *)&pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v2->m_bLive = 0;
  }
}

//----- (0069A350) --------------------------------------------------------
void __thiscall SpEffect::Update(SpEffect *this, float fTime)
{
  SpEffect *v2; // esi@1
  NiNode *v3; // ecx@6

  v2 = this;
  if ( this->m_bLive )
  {
    if ( this->m_bLoop || this->m_bClamp )
    {
      if ( this->m_bClamp == 1 && CNSTimer_MarkCheck::Update(&this->m_kMarkCheck, fTime) == 1 )
      {
LABEL_10:
        v2->m_bLive = 0;
        return;
      }
    }
    else
    {
      if ( CNSTimer_MarkCheck::Update(&this->m_kMarkCheck, fTime) == 1 && v2->m_spEffect.m_pObject )
      {
        v3 = v2->m_spEffect.m_pObject->baseclass_0.m_pkParent;
        if ( v3 )
        {
          ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
            &fTime,
            v2->m_spEffect.m_pObject);
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&fTime);
          v2->m_bLive = 0;
          return;
        }
        goto LABEL_10;
      }
    }
  }
}

//----- (0069A3D0) --------------------------------------------------------
void __thiscall StretchEffect::SetAniSpeedCtrl(StretchEffect *this, float fRequency, float fPhase)
{
  EffectCtrl *v3; // esi@1

  v3 = &this->baseclass_0.m_kCtrl;
  EffectCtrl::SetFrequency(&this->baseclass_0.m_kCtrl, fRequency);
  EffectCtrl::SetPhase(v3, fPhase);
}

//----- (0069A400) --------------------------------------------------------
bool __thiscall StretchEffect::IsEnd(StretchEffect *this, float fTime)
{
  return 1;
}

//----- (0069A410) --------------------------------------------------------
void __thiscall StretchEffect::OnEnd(StretchEffect *this, float fTime)
{
  StretchEffect *v2; // esi@1
  Char *v3; // eax@1

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, this->m_kEndCharHandle);
  if ( v3 )
    DamageInfoSet::Applicate(&v2->m_kDamageInfoSet, v3, 1);
}

//----- (0069A460) --------------------------------------------------------
void __thiscall StretchEffect::Update(StretchEffect *this, float fTime)
{
  Effect::Update(&this->baseclass_0, fTime);
}

//----- (0069A480) --------------------------------------------------------
void __thiscall StretchEffect::Start(StretchEffect *this, float fTime)
{
  Effect::Start(&this->baseclass_0, fTime);
}

//----- (0069A4A0) --------------------------------------------------------
void __thiscall StretchEffect::CopyMember(StretchEffect *this, Effect *pkEffect)
{
  StretchEffect *v2; // edi@1
  NiObject *v3; // ecx@1
  NiRefObjectVtbl *v4; // ebx@2
  NiObject *v5; // eax@2
  bool v6; // al@3
  int i; // eax@5

  v2 = this;
  v3 = (NiObject *)this->baseclass_0.m_spNode.m_pObject;
  if ( v3 )
  {
    v4 = pkEffect->baseclass_0.vfptr;
    v5 = NiObject::Clone(v3);
    v4[3].__vecDelDtor((NiRefObject *)pkEffect, (unsigned int)v5);
  }
  pkEffect->m_fLifeTime = v2->baseclass_0.m_fLifeTime;
  v6 = v2->baseclass_0.m_bCreateProgramEff;
  pkEffect->m_bCreateProgramEff = v6;
  if ( v6 )
    Effect::CreateProgramEff(pkEffect);
  for ( i = ((int (__thiscall *)(_DWORD))pkEffect->baseclass_0.vfptr[1].__vecDelDtor)(pkEffect); i; i = *(_DWORD *)(i + 4) )
  {
    if ( (NiRTTI *)i == &StretchEffect::m_RTTI )
      break;
  }
}

//----- (0069A500) --------------------------------------------------------
void __thiscall StretchEffect::StretchEffect(StretchEffect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster)
{
  StretchEffect *v4; // esi@1

  v4 = this;
  Effect::Effect(&this->baseclass_0, pkNode, bCreateProgramEff, pkCaster);
  v4->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StretchEffect::_vftable_;
  v4->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)StretchEffect::_vftable_;
  *(_DWORD *)&v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkHead = 0;
  v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.m_pkTail = 0;
  v4->m_kDamageInfoSet.kDamageList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<DamageInfo *>,DamageInfo *>Vtbl *)&NiTList<DamageInfo__>::_vftable_;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// 9C7510: using guessed type int (__stdcall *StretchEffect___vftable_[3])(int);
// 9C7524: using guessed type int (__thiscall *StretchEffect___vftable_)(void *p, char);

//----- (0069A550) --------------------------------------------------------
void __thiscall StretchEffect::_StretchEffect(StretchEffect *this)
{
  Effect *v1; // esi@1

  v1 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StretchEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)StretchEffect::_vftable_;
  DamageInfoSet::_DamageInfoSet(&this->m_kDamageInfoSet);
  Effect::_Effect(v1);
}
// 9C7510: using guessed type int (__stdcall *StretchEffect___vftable_[3])(int);
// 9C7524: using guessed type int (__thiscall *StretchEffect___vftable_)(void *p, char);

//----- (0069A5C0) --------------------------------------------------------
Effect *__thiscall StretchEffect::Clone(StretchEffect *this)
{
  StretchEffect *v1; // ebx@1
  void *v2; // eax@1
  void *v3; // esi@1

  v1 = this;
  v2 = operator new(0x254u);
  v3 = v2;
  if ( v2 )
  {
    Effect::Effect((Effect *)v2, 0, 0, 0);
    *(_DWORD *)v3 = &StretchEffect::_vftable_;
    *((_DWORD *)v3 + 2) = StretchEffect::_vftable_;
    *((_DWORD *)v3 + 145) = 0;
    *((_DWORD *)v3 + 143) = 0;
    *((_DWORD *)v3 + 144) = 0;
    *((_DWORD *)v3 + 142) = &NiTList<DamageInfo__>::_vftable_;
  }
  else
  {
    v3 = 0;
  }
  ((void (__cdecl *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[22].__vecDelDtor)(v3);
  return (Effect *)v3;
}
// 97CE0C: using guessed type int (__thiscall *NiTList_DamageInfo _____vftable_)(void *p, char);
// 9C7510: using guessed type int (__stdcall *StretchEffect___vftable_[3])(int);
// 9C7524: using guessed type int (__thiscall *StretchEffect___vftable_)(void *p, char);

//----- (0069A660) --------------------------------------------------------
NiRTTI *__thiscall StretchEffect::GetRTTI(StretchEffect *this)
{
  return &StretchEffect::m_RTTI;
}

//----- (0069A670) --------------------------------------------------------
void __thiscall StretchEffect::SetBombEffectName(StretchEffect *this, char *pcBombEffName)
{
  char *v2; // eax@1
  unsigned int v3; // edx@3
  char v4; // cl@4

  v2 = pcBombEffName;
  if ( pcBombEffName )
  {
    v3 = this->m_acBombEffectName - pcBombEffName;
    do
    {
      v4 = *v2;
      v2[v3] = *v2;
      ++v2;
    }
    while ( v4 );
  }
  else
  {
    this->m_acBombEffectName[0] = (char)pcBombEffName;
  }
}

//----- (0069A6A0) --------------------------------------------------------
void __thiscall StretchEffect::SetBombSndName(StretchEffect *this, char *pcBombSndName)
{
  if ( !pcBombSndName )
    this->m_acBombEffectName[0] = 0;
}

//----- (0069A6C0) --------------------------------------------------------
unsigned __int16 __thiscall StretchEffect::GetStartChar(StretchEffect *this)
{
  return this->m_kStartCharHandle;
}

//----- (0069A6D0) --------------------------------------------------------
unsigned __int16 __thiscall StretchEffect::GetEndChar(StretchEffect *this)
{
  return this->m_kEndCharHandle;
}

//----- (0069A6E0) --------------------------------------------------------
void *__thiscall StretchEffect::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return StretchEffect::_scalar_deleting_destructor_((StretchEffect *)((char *)this - 8), a2);
}

//----- (0069A6F0) --------------------------------------------------------
void *__thiscall StretchEffect::_scalar_deleting_destructor_(StretchEffect *this, unsigned int a2)
{
  Effect *v2; // esi@1

  v2 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&StretchEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)StretchEffect::_vftable_;
  DamageInfoSet::_DamageInfoSet(&this->m_kDamageInfoSet);
  Effect::_Effect(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C7510: using guessed type int (__stdcall *StretchEffect___vftable_[3])(int);
// 9C7524: using guessed type int (__thiscall *StretchEffect___vftable_)(void *p, char);

//----- (0069A770) --------------------------------------------------------
void __thiscall WeddingEffect::WeddingEffect(WeddingEffect *this, NiNode *pkNode, bool bCreateProgramEff)
{
  WeddingEffect *v3; // esi@1

  v3 = this;
  Effect::Effect(&this->baseclass_0, pkNode, bCreateProgramEff, 0);
  v3->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingEffect::_vftable_;
  v3->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)WeddingEffect::_vftable_;
  NpNs_MoveToTarget::NpNs_MoveToTarget(&v3->m_kMoveToTarget);
  *(_DWORD *)&v3->m_Newlywed = -1;
}
// 9C75AC: using guessed type int (__stdcall *WeddingEffect___vftable_[3])(int);
// 9C75C4: using guessed type int (__thiscall *WeddingEffect___vftable_)(void *p, char);

//----- (0069A7F0) --------------------------------------------------------
void __thiscall WeddingEffect::_WeddingEffect(WeddingEffect *this)
{
  Effect *v1; // esi@1

  v1 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)WeddingEffect::_vftable_;
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&this->m_kMoveToTarget);
  Effect::_Effect(v1);
}
// 9C75AC: using guessed type int (__stdcall *WeddingEffect___vftable_[3])(int);
// 9C75C4: using guessed type int (__thiscall *WeddingEffect___vftable_)(void *p, char);

//----- (0069A860) --------------------------------------------------------
bool __thiscall WeddingEffect::IsEnd(WeddingEffect *this, float fTime)
{
  return CharMgr::GetChar(&g_kCharMgr, this->m_Newlywed) == 0;
}

//----- (0069A880) --------------------------------------------------------
void __thiscall WeddingEffect::Update(WeddingEffect *this, float fTime)
{
  int v2; // edi@0
  int v3; // ST04_4@1
  WeddingEffect *v4; // edi@1
  Char *v5; // eax@1
  Char *v6; // ebx@1
  int v7; // eax@2
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // edx@2
  NiPoint3 result; // [sp+10h] [bp-18h]@2
  NiPoint3 kPos; // [sp+1Ch] [bp-Ch]@2
  NpNs_MoveToTargetVtbl *fTimea; // [sp+30h] [bp+8h]@2
  NpNs_MoveToTargetVtbl *fTimeb; // [sp+30h] [bp+8h]@2

  v3 = v2;
  v4 = this;
  Effect::Update(&this->baseclass_0, fTime);
  ((void (__thiscall *)(NpNs_MoveToTarget *, _DWORD, int))v4->m_kMoveToTarget.vfptr->Update)(
    &v4->m_kMoveToTarget,
    LODWORD(fTime),
    v3);
  v5 = CharMgr::GetChar(&g_kCharMgr, v4->m_Newlywed);
  v6 = v5;
  if ( v5 )
  {
    fTimea = v4->m_kMoveToTarget.vfptr;
    LODWORD(kPos.x) = Char::GetHairPos(v5, &result);
    ((void (__thiscall *)(NpNs_MoveToTarget *))fTimea->StartMove)(&v4->m_kMoveToTarget);
    fTimeb = v4->m_kMoveToTarget.vfptr;
    LODWORD(result.z) = Char::GetHairPos(v6, &result);
    fTimeb->SetCurrentPos(&v4->m_kMoveToTarget, LODWORD(result.z));
    v7 = (int)v4->m_kMoveToTarget.vfptr->GetCurrentPos(&v4->m_kMoveToTarget);
    LODWORD(kPos.x) = *(_DWORD *)v7;
    LODWORD(kPos.y) = *(_DWORD *)(v7 + 4);
    v8 = v4->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
    LODWORD(kPos.z) = *(_DWORD *)(v7 + 8);
    v8(&v4->baseclass_0.baseclass_0, (unsigned int)&kPos);
    v4->baseclass_0.baseclass_0.vfptr[21].__vecDelDtor((NiRefObject *)v4, 1u);
  }
  else
  {
    v4->m_kMoveToTarget.vfptr->Stop(&v4->m_kMoveToTarget);
    ((void (__thiscall *)(WeddingEffect *))v4->baseclass_0.baseclass_0.vfptr[21].__vecDelDtor)(v4);
  }
}
// 69A880: could not find valid save-restore pair for ebx
// 69A880: could not find valid save-restore pair for edi
// 69A880: could not find valid save-restore pair for esi

//----- (0069A980) --------------------------------------------------------
void __thiscall WeddingEffect::Start(WeddingEffect *this, float fTime)
{
  Effect::Start(&this->baseclass_0, fTime);
}

//----- (0069A9A0) --------------------------------------------------------
NiRTTI *__thiscall WeddingEffect::GetRTTI(WeddingEffect *this)
{
  return &WeddingEffect::m_RTTI;
}

//----- (0069A9B0) --------------------------------------------------------
void *__thiscall WeddingEffect::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return WeddingEffect::_vector_deleting_destructor_((WeddingEffect *)((char *)this - 8), a2);
}

//----- (0069A9C0) --------------------------------------------------------
void *__thiscall WeddingEffect::_vector_deleting_destructor_(WeddingEffect *this, unsigned int a2)
{
  Effect *v2; // esi@1

  v2 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)WeddingEffect::_vftable_;
  NpNs_MoveToTarget::_NpNs_MoveToTarget(&this->m_kMoveToTarget);
  Effect::_Effect(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C75AC: using guessed type int (__stdcall *WeddingEffect___vftable_[3])(int);
// 9C75C4: using guessed type int (__thiscall *WeddingEffect___vftable_)(void *p, char);

//----- (0069AA40) --------------------------------------------------------
bool __thiscall TextEff::IsAlive(TextEff *this, float fTime)
{
  return this->m_bAlive && fTime - this->m_fStartTime <= this->m_fLifeTime;
}

//----- (0069AA70) --------------------------------------------------------
void __thiscall TextEff::SetStartTime(TextEff *this, float fTime)
{
  this->m_fStartTime = fTime;
  this->m_fLastUpdateTime = fTime;
}

//----- (0069AA80) --------------------------------------------------------
void __thiscall TextEff::TextEff(TextEff *this)
{
  TextEff *v1; // esi@1
  int v2; // ebx@1
  void *v3; // eax@1
  int v4; // eax@2
  NiNode *v5; // edi@3

  v1 = this;
  v2 = 0;
  this->vfptr = (TextEffVtbl *)&TextEff::_vftable_;
  this->m_spNode.m_pObject = 0;
  this->m_fStartTime = 0.0;
  this->m_kCharHandle = -1;
  this->m_bAlive = 1;
  this->m_uiWidth = 0;
  this->m_uiHeight = 0;
  v3 = operator new(0xE8u);
  if ( v3 )
  {
    NiNode::NiNode((NiNode *)v3, 0);
    v2 = v4;
  }
  v5 = v1->m_spNode.m_pObject;
  if ( v5 != (NiNode *)v2 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spNode.m_pObject = (NiNode *)v2;
    if ( v2 )
      InterlockedIncrement((volatile LONG *)(v2 + 4));
  }
  v1->m_fLifeTime = TextEff::ms_fDefLifeTime;
}
// 9C7624: using guessed type int (__thiscall *TextEff___vftable_)(void *p, char);
// A8197C: using guessed type float TextEff__ms_fDefLifeTime;

//----- (0069AB50) --------------------------------------------------------
void __thiscall TextEff::_TextEff(TextEff *this)
{
  TextEff *v1; // edi@1
  NiNode *v2; // esi@1
  NiNode *v3; // edi@6

  v1 = this;
  this->vfptr = (TextEffVtbl *)&TextEff::_vftable_;
  v2 = this->m_spNode.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spNode.m_pObject = 0;
  }
  v3 = v1->m_spNode.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}
// 9C7624: using guessed type int (__thiscall *TextEff___vftable_)(void *p, char);

//----- (0069ABF0) --------------------------------------------------------
void __thiscall TextEff::AddGeometry(TextEff *this, NiScreenElements *pkGeom, unsigned int uiWidth, unsigned int uiHeight)
{
  float v4; // ST14_4@1
  unsigned int v5; // eax@1
  NiObjectNET *v6; // eax@3
  NiTimeController *v7; // eax@4

  v4 = (double)this->m_uiWidth;
  pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v4;
  pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = 0.0;
  pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 0.0;
  v5 = this->m_uiHeight;
  if ( v5 < uiHeight )
    this->m_uiHeight = uiHeight + v5;
  this->m_uiWidth += uiWidth;
  ((void (__stdcall *)(_DWORD, _DWORD))this->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    pkGeom,
    0);
  v6 = (NiObjectNET *)NiAVObject::GetProperty(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
  if ( v6 )
  {
    v7 = NiObjectNET::GetController(v6, &NiAlphaController::m_RTTI);
    if ( v7 )
      v7->m_fFrequency = TextEff::ms_fDefLifeTime;
  }
  NiAVObject::UpdateEffects(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::UpdateProperties(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
}
// A8197C: using guessed type float TextEff__ms_fDefLifeTime;

//----- (0069ACA0) --------------------------------------------------------
void __thiscall TextEff::AddNode(TextEff *this, NiNode *pkNode, unsigned int uiWidth, unsigned int uiHeight)
{
  TextEff *v4; // edi@1
  float v5; // ST18_4@1
  unsigned int v6; // eax@1

  v4 = this;
  v5 = (double)this->m_uiWidth;
  pkNode->baseclass_0.m_kLocal.m_Translate.x = v5;
  pkNode->baseclass_0.m_kLocal.m_Translate.y = 0.0;
  pkNode->baseclass_0.m_kLocal.m_Translate.z = 0.0;
  v6 = this->m_uiHeight;
  if ( v6 < uiHeight )
    this->m_uiHeight = uiHeight + v6;
  this->m_uiWidth += uiWidth;
  pkNode->baseclass_0.m_uFlags |= 1u;
  ((void (__stdcall *)(_DWORD, _DWORD))this->m_spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    pkNode,
    0);
  NiAVObject::UpdateEffects(&pkNode->baseclass_0);
  NiAVObject::UpdateProperties(&pkNode->baseclass_0);
  NiAVObject::Update(&pkNode->baseclass_0, 0.0, 0);
  if ( pkNode->m_kChildren.m_uiESize != 1 )
    v4->m_fLifeTime = v4->m_fLifeTime + TextEff::ms_fShowDelay;
}
// B5ADE4: using guessed type float TextEff__ms_fShowDelay;

//----- (0069AD40) --------------------------------------------------------
void __thiscall TextEff::Update(TextEff *this, float fTime, NiCamera *pkWorldCamera, PgWinCamera *pkScreenCamera)
{
  TextEff *v4; // edi@1
  Char *v5; // eax@1
  double v6; // st7@3
  double v7; // st5@3
  NiCamera *v8; // esi@4
  float v9; // edx@6
  double v10; // st5@6
  unsigned int v11; // esi@6
  double v12; // st7@6
  double v13; // st7@6
  NiNode *v14; // eax@6
  float v15; // ST20_4@6
  unsigned int v16; // ebx@6
  double v17; // st7@7
  NiNode *v18; // eax@8
  NiAVObject *v19; // eax@9
  NiPoint3 kWorldPos; // [sp+1Ch] [bp-30h]@4
  NiPoint3 kCharHeightPos; // [sp+28h] [bp-24h]@3
  float v22; // [sp+34h] [bp-18h]@3
  double v23; // [sp+38h] [bp-14h]@3
  float fInvFmN; // [sp+40h] [bp-Ch]@3
  float fScreenY; // [sp+44h] [bp-8h]@4
  float fScreenX; // [sp+48h] [bp-4h]@4
  float fShowTimea; // [sp+58h] [bp+Ch]@6
  float fShowTimeb; // [sp+58h] [bp+Ch]@6
  float fShowTimec; // [sp+58h] [bp+Ch]@6
  float fShowTimed; // [sp+58h] [bp+Ch]@6
  float fShowTimee; // [sp+58h] [bp+Ch]@6
  float fShowTimef; // [sp+58h] [bp+Ch]@6
  float fShowTimeg; // [sp+58h] [bp+Ch]@6
  float fShowTimeh; // [sp+58h] [bp+Ch]@6
  float fShowTimei; // [sp+58h] [bp+Ch]@6
  float fShowTime; // [sp+58h] [bp+Ch]@6

  v4 = this;
  v5 = CharMgr::GetChar(&g_kCharMgr, this->m_kCharHandle);
  if ( v5
    && (Char::GetHeightPos(v5, &kCharHeightPos),
        kCharHeightPos.z = kCharHeightPos.z + 10.0,
        v22 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - kCharHeightPos.x,
        *(float *)&v23 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - kCharHeightPos.y,
        *((float *)&v23 + 1) = pkCamera->baseclass_0.m_kLocal.m_Translate.z - kCharHeightPos.z,
        v6 = (float)v23,
        v7 = *((float *)&v23 + 1),
        v23 = TextEff::ms_fMaxDistance,
        fInvFmN = v6 * v6 + v22 * v22 + v7 * v7,
        fInvFmN = sqrt(fInvFmN),
        fInvFmN <= (double)TextEff::ms_fMaxDistance) )
  {
    v8 = pkWorldCamera;
    LODWORD(kWorldPos.x) = (_DWORD)kCharHeightPos.x;
    kWorldPos.y = kCharHeightPos.y;
    kWorldPos.z = kCharHeightPos.z;
    if ( NiCamera::WorldPtToScreenPt(pkWorldCamera, &kWorldPos, &fScreenX, &fScreenY, 0.0000099999997) )
    {
      v4->m_spNode.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
      v22 = pkWorldCamera->baseclass_0.m_kLocal.m_Translate.x - kWorldPos.x;
      *(float *)&v23 = pkWorldCamera->baseclass_0.m_kLocal.m_Translate.y - kWorldPos.y;
      *((float *)&v23 + 1) = pkWorldCamera->baseclass_0.m_kLocal.m_Translate.z - kWorldPos.z;
      fShowTimea = (float)v23 * (float)v23 + v22 * v22 + *((float *)&v23 + 1) * *((float *)&v23 + 1);
      fShowTimeb = sqrt(fShowTimea);
      *((float *)&v23 + 1) = fShowTimeb;
      fShowTimec = v8->m_kViewFrustum.m_fFar - v8->m_kViewFrustum.m_fNear;
      fInvFmN = 1.0 / fShowTimec;
      fShowTimed = (double)PgWin::ms_uiScreenWidth * fScreenX;
      fScreenX = fShowTimed - (double)(v4->m_uiWidth >> 1);
      fShowTimee = 1.0 - fScreenY;
      fShowTimef = fShowTimee * (double)PgWin::ms_uiScreenHeight;
      fScreenY = fShowTimef - (double)v4->m_uiHeight;
      v9 = fScreenY;
      fShowTimeg = -(v8->m_kViewFrustum.m_fFar * v8->m_kViewFrustum.m_fNear * fInvFmN);
      v10 = v8->m_kViewFrustum.m_fFar;
      v11 = 0;
      v12 = fShowTimeg;
      fShowTimeh = fInvFmN * v10;
      fShowTimei = (fShowTimeh * *((float *)&v23 + 1) + v12) / *((float *)&v23 + 1);
      v13 = fShowTimei
          * (pkScreenCamera->baseclass_0.m_kViewFrustum.m_fFar - pkScreenCamera->baseclass_0.m_kViewFrustum.m_fNear)
          + pkScreenCamera->baseclass_0.m_kViewFrustum.m_fNear;
      v14 = v4->m_spNode.m_pObject;
      v14->baseclass_0.m_kLocal.m_Translate.x = fScreenX;
      v14->baseclass_0.m_kLocal.m_Translate.y = v9;
      v15 = v13;
      v14->baseclass_0.m_kLocal.m_Translate.z = v15;
      fShowTime = v4->m_fStartTime;
      v16 = v4->m_spNode.m_pObject->m_kChildren.m_uiESize;
      if ( v16 )
      {
        do
        {
          v17 = fShowTime;
          if ( fTime >= (double)fShowTime )
          {
            v18 = v4->m_spNode.m_pObject;
            if ( v18->m_kChildren.m_uiSize > v11 )
            {
              v19 = v18->m_kChildren.m_pBase[v11].m_pObject;
              if ( v19 )
              {
                if ( v19->m_uFlags & 1 )
                {
                  v19->m_uFlags &= 0xFFFEu;
                  NiTimeController::StartAnimations(&v19->baseclass_0, fShowTime);
                  v17 = fShowTime;
                }
              }
            }
          }
          ++v11;
          fShowTime = v17 + TextEff::ms_fShowDelay;
        }
        while ( v11 < v16 );
      }
      v4->m_fLastUpdateTime = fTime;
    }
    else
    {
      v4->m_spNode.m_pObject->baseclass_0.m_uFlags |= 1u;
    }
  }
  else
  {
    v4->m_bAlive = 0;
  }
}
// 69AD40: could not find valid save-restore pair for ebx
// A81980: using guessed type float TextEff__ms_fMaxDistance;
// B5ADE4: using guessed type float TextEff__ms_fShowDelay;

//----- (0069B000) --------------------------------------------------------
void *__thiscall TextEff::_scalar_deleting_destructor_(TextEff *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  TextEff::_TextEff(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0069B030) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>(NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
}
// 9C775C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);

//----- (0069B040) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C775C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);

//----- (0069B070) --------------------------------------------------------
void __thiscall TextEffMgr::GeomRes::_GeomRes(TextEffMgr::GeomRes *this)
{
  NiScreenElements *v1; // esi@1

  v1 = this->m_spGeom.m_pObject;
  if ( v1
    && !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v1 )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v1,
        1u);
  }
}

//----- (0069B0A0) --------------------------------------------------------
void __thiscall TextEffMgr::Draw(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1
  NiAVObject *v2; // ST04_4@1
  NiCamera *v3; // ST00_4@1
  NiVisibleArray m_kVisible; // [sp+0h] [bp-B0h]@1
  NiCullingProcess m_kCuller; // [sp+10h] [bp-A0h]@1
  unsigned int v6; // [sp+A0h] [bp-10h]@1
  int v7; // [sp+ACh] [bp-4h]@1
  int v8; // [sp+B0h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v1 = this;
  m_kVisible.m_ppkArray = 0;
  m_kVisible.m_uiCurrentSize = 0;
  m_kVisible.m_uiAllocatedSize = 0;
  m_kVisible.m_uiGrowBy = 1024;
  NiVisibleArray::SetAllocatedSize(&m_kVisible, 0x400u);
  v7 = 0;
  NiCullingProcess::NiCullingProcess(&m_kCuller, &m_kVisible);
  v2 = (NiAVObject *)v1->m_pkScene;
  v3 = (NiCamera *)v1->m_spScreenSpaceCamera.m_pObject;
  LOBYTE(v7) = 1;
  NiDrawScene(v3, v2, &m_kCuller, 0);
  LOBYTE(v7) = 0;
  NiCullingProcess::_NiCullingProcess(&m_kCuller);
  operator delete(m_kVisible.m_ppkArray);
}
// A85C00: using guessed type int __security_cookie;

//----- (0069B170) --------------------------------------------------------
NiNode *__thiscall TextEffMgr::CreateControllNode(TextEffMgr *this, NiTransformController *pkMoveCtrl, NiTransformController *pkNoiseCtrl, NiTransformController *pkSizeCtrl, NiAlphaController *pkAlphaCtrl, NiScreenElements *pkGeom)
{
  void *v6; // eax@1
  int v7; // esi@1
  NiNode *v8; // eax@2
  NiNode *v9; // ebx@2
  void *v10; // eax@4
  int v11; // eax@5
  NiProperty *v12; // eax@6
  void *v13; // eax@7
  int v14; // eax@8
  int v15; // edi@8

  v6 = operator new(0xE8u);
  v7 = 0;
  if ( v6 )
  {
    NiNode::NiNode((NiNode *)v6, 0);
    v9 = v8;
  }
  else
  {
    v9 = 0;
  }
  v10 = operator new(0xE8u);
  if ( v10 )
  {
    NiNode::NiNode((NiNode *)v10, 0);
    v7 = v11;
  }
  ((void (__stdcall *)(int))pkMoveCtrl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v7);
  v12 = NiAVObject::GetProperty(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 3);
  ((void (__stdcall *)(NiProperty *))pkAlphaCtrl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v12);
  if ( pkSizeCtrl )
  {
    v13 = operator new(0xE8u);
    if ( v13 )
    {
      NiNode::NiNode((NiNode *)v13, 0);
      v15 = v14;
    }
    else
    {
      v15 = 0;
    }
    ((void (__stdcall *)(int))pkSizeCtrl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v15);
    (*(void (__thiscall **)(int, NiScreenElements *, _DWORD))(*(_DWORD *)v15 + 116))(v15, pkGeom, 0);
  }
  (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 116))(v7);
  ((void (__cdecl *)(int))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v7);
  return v9;
}

//----- (0069B290) --------------------------------------------------------
void __thiscall TextEffMgr::Add(TextEffMgr *this, TextEff *pkTextEff)
{
  TextEffMgr *v2; // esi@1
  int v3; // eax@1
  NiTListItem<TextEff *> *v4; // ecx@1
  NiNode *v5; // ecx@4

  v2 = this;
  v3 = ((int (*)(void))this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem)();
  *(_DWORD *)(v3 + 8) = pkTextEff;
  *(_DWORD *)v3 = 0;
  *(_DWORD *)(v3 + 4) = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  v4 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
  if ( v4 )
    v4->m_pkNext = (NiTListItem<TextEff *> *)v3;
  else
    v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<TextEff *> *)v3;
  ++*(_DWORD *)&v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v5 = v2->m_pkScene;
  v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<TextEff *> *)v3;
  ((void (__stdcall *)(_DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    pkTextEff->m_spNode.m_pObject,
    1);
  NiAVObject::UpdateProperties(&pkTextEff->m_spNode.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&pkTextEff->m_spNode.m_pObject->baseclass_0);
  NiAVObject::Update(&pkTextEff->m_spNode.m_pObject->baseclass_0, 0.0, 1);
}

//----- (0069B300) --------------------------------------------------------
void __thiscall TextEffMgr::ReleaseGeometry(TextEffMgr *this)
{
  char *v1; // edi@1
  signed int v2; // ebx@2
  int v3; // esi@3
  NiScreenElements *v4; // esi@10
  NiScreenElements *v5; // esi@15
  NiScreenElements *v6; // esi@20
  NiScreenElements *v7; // esi@25
  NiNode *v8; // esi@30
  signed int v9; // [sp+Ch] [bp-8h]@1
  TextEffMgr *v10; // [sp+10h] [bp-4h]@1

  v10 = this;
  v1 = (char *)&this->m_akNumGeomRes[0][0].m_spGeom;
  v9 = 6;
  do
  {
    v2 = 10;
    do
    {
      v3 = *(_DWORD *)v1;
      if ( *(_DWORD *)v1 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
        *(_DWORD *)v1 = 0;
      }
      v1 += 12;
      --v2;
    }
    while ( v2 );
    --v9;
  }
  while ( v9 );
  v4 = v10->m_kMissGeomRes.m_spGeom.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v10->m_kMissGeomRes.m_spGeom.m_pObject = 0;
  }
  v5 = v10->m_kBlockGeomRes.m_spGeom.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v10->m_kBlockGeomRes.m_spGeom.m_pObject = 0;
  }
  v6 = v10->m_kResistGeomRes.m_spGeom.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v10->m_kResistGeomRes.m_spGeom.m_pObject = 0;
  }
  v7 = v10->m_kImmuneRes.m_spGeom.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v10->m_kImmuneRes.m_spGeom.m_pObject = 0;
  }
  v8 = v10->m_kCriEffect.spCriticalEffect.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    v10->m_kCriEffect.spCriticalEffect.m_pObject = 0;
  }
}

//----- (0069B450) --------------------------------------------------------
bool __thiscall TextEffMgr::LoadController(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1
  char *v2; // eax@3
  NiObjectNET *v3; // eax@4
  NiNode *v4; // esi@5
  bool v5; // zf@7
  NiTimeController *v7; // eax@11
  NiTransformController *v8; // edi@11
  NiTimeController *v9; // ebx@11
  NiTransformController *v10; // eax@18
  NiNode *v11; // ecx@22
  NiAVObject *v12; // eax@22
  NiObjectNET *v13; // eax@25
  NiTimeController *v14; // eax@25
  NiAlphaController *v15; // eax@25
  char *v16; // eax@26
  char *v17; // eax@26
  NiObjectNET *v18; // eax@27
  NiTimeController *v19; // eax@28
  NiTransformController *v20; // eax@28
  NiNode *v21; // ecx@29
  NiObjectNET *v22; // eax@29
  NiTimeController *v23; // eax@30
  NiTransformController *v24; // eax@30
  NiObjectNET *v25; // eax@31
  NiTimeController *v26; // eax@32
  NiTransformController *v27; // eax@32
  NiAVObject *v28; // eax@33
  NiObjectNET *v29; // eax@34
  NiTimeController *v30; // eax@34
  NiAlphaController *v31; // esi@34
  NiPointer<NiNode> spNode; // [sp+4h] [bp-10h]@1
  int v33; // [sp+10h] [bp-4h]@1

  v1 = this;
  spNode.m_pObject = 0;
  v33 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acCtrl, "NormalHitCtrl.nif");
  PgUtil::LoadNodeNifFile(v2, &spNode, 0);
  if ( !spNode.m_pObject )
    return 0;
  v3 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Move");
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v33 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_8:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = NiObjectNET::GetController(v3, &NiTransformController::m_RTTI);
  v8 = v1->m_spNormalHitMoveCtrl.m_pObject;
  v9 = v7;
  if ( (NiTimeController *)v8 != v7 )
  {
    if ( v8
      && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v1->m_spNormalHitMoveCtrl.m_pObject = (NiTransformController *)v9;
    if ( v9 )
      InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.m_uiRefCount);
  }
  v10 = v1->m_spNormalHitMoveCtrl.m_pObject;
  if ( !v10 )
  {
    v4 = spNode.m_pObject;
    v33 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_8;
  }
  v10->baseclass_0.baseclass_0.baseclass_0.m_uFlags = v10->baseclass_0.baseclass_0.baseclass_0.m_uFlags & 0xFFF7 | 1;
  v11 = spNode.m_pObject;
  v1->m_fNormalHitLifeTime = v1->m_spNormalHitMoveCtrl.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_fHiKeyTime;
  v12 = (NiAVObject *)((int (__stdcall *)(_DWORD))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Plane01");
  if ( !v12
    || (v13 = (NiObjectNET *)NiAVObject::GetProperty(v12, 3),
        v14 = NiObjectNET::GetController(v13, &NiAlphaController::m_RTTI),
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&v1->m_spNormalHitAlphaCtrl,
          (NiD3DDefaultShader *)v14),
        (v15 = v1->m_spNormalHitAlphaCtrl.m_pObject) == 0)
    || (v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 0xFFF7 | 1,
        v16 = Folder::Ctrl(),
        v17 = Folder::Merge(v16, "CriticalHitCtrl.nif"),
        PgUtil::LoadNodeNifFile(v17, &spNode, 0),
        !spNode.m_pObject)
    || (v18 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Move")) == 0
    || (v19 = NiObjectNET::GetController(v18, &NiTransformController::m_RTTI),
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&v1->m_spCriticalHitMoveCtrl,
          (NiD3DDefaultShader *)v19),
        (v20 = v1->m_spCriticalHitMoveCtrl.m_pObject) == 0)
    || (v20->baseclass_0.baseclass_0.baseclass_0.m_uFlags = v20->baseclass_0.baseclass_0.baseclass_0.m_uFlags & 0xFFF7 | 1,
        v21 = spNode.m_pObject,
        v1->m_fCriticalHitLifeTime = v1->m_spCriticalHitMoveCtrl.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_fHiKeyTime,
        (v22 = (NiObjectNET *)((int (__stdcall *)(_DWORD))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("noise")) == 0)
    || (v23 = NiObjectNET::GetController(v22, &NiTransformController::m_RTTI),
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&v1->m_spCriticalHitNoiseCtrl,
          (NiD3DDefaultShader *)v23),
        (v24 = v1->m_spCriticalHitNoiseCtrl.m_pObject) == 0)
    || (v24->baseclass_0.baseclass_0.baseclass_0.m_uFlags = v24->baseclass_0.baseclass_0.baseclass_0.m_uFlags & 0xFFF7 | 1,
        (v25 = (NiObjectNET *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("size")) == 0)
    || (v26 = NiObjectNET::GetController(v25, &NiTransformController::m_RTTI),
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&v1->m_spCriticalHitSizeCtrl,
          (NiD3DDefaultShader *)v26),
        (v27 = v1->m_spCriticalHitSizeCtrl.m_pObject) == 0)
    || (v27->baseclass_0.baseclass_0.baseclass_0.m_uFlags = v27->baseclass_0.baseclass_0.baseclass_0.m_uFlags & 0xFFF7 | 1,
        (v28 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Plane01")) == 0) )
  {
    v33 = -1;
LABEL_24:
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v29 = (NiObjectNET *)NiAVObject::GetProperty(v28, 3);
  v30 = NiObjectNET::GetController(v29, &NiAlphaController::m_RTTI);
  NiPointer<PopupMenuWin>::operator_(
    (NiPointer<NiD3DDefaultShader> *)&v1->m_spCriticalHitAlphaCtrl,
    (NiD3DDefaultShader *)v30);
  v31 = v1->m_spCriticalHitAlphaCtrl.m_pObject;
  v33 = -1;
  if ( !v31 )
    goto LABEL_24;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 0xFFF7 | 1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0069B7D0) --------------------------------------------------------
void __thiscall TextEffMgr::ReleaseController(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1
  NiTransformController *v2; // edi@1
  NiTransformController *v3; // edi@6
  NiAlphaController *v4; // edi@11
  NiTransformController *v5; // edi@16
  NiTransformController *v6; // edi@21
  NiAlphaController *v7; // edi@26
  NiTransformController *v8; // edi@31

  v1 = this;
  v2 = this->m_spNormalHitMoveCtrl.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spNormalHitMoveCtrl.m_pObject = 0;
  }
  v3 = v1->m_spNormalHitNoiseCtrl.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spNormalHitNoiseCtrl.m_pObject = 0;
  }
  v4 = v1->m_spNormalHitAlphaCtrl.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spNormalHitAlphaCtrl.m_pObject = 0;
  }
  v5 = v1->m_spCriticalHitMoveCtrl.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spCriticalHitMoveCtrl.m_pObject = 0;
  }
  v6 = v1->m_spCriticalHitNoiseCtrl.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spCriticalHitNoiseCtrl.m_pObject = 0;
  }
  v7 = v1->m_spCriticalHitAlphaCtrl.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v1->m_spCriticalHitAlphaCtrl.m_pObject = 0;
  }
  v8 = v1->m_spCriticalHitSizeCtrl.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    v1->m_spCriticalHitSizeCtrl.m_pObject = 0;
  }
}

//----- (0069B910) --------------------------------------------------------
void __thiscall TextEffMgr::_TextEffMgr(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1
  char *v2; // edi@1
  int v3; // edi@1
  NiAlphaController *v4; // edi@5
  NiTransformController *v5; // edi@9
  NiTransformController *v6; // edi@13
  NiTransformController *v7; // edi@17
  NiAlphaController *v8; // edi@21
  NiTransformController *v9; // edi@25
  NiTransformController *v10; // edi@29
  PgWinCamera *v11; // edi@33
  NiScreenElements *v12; // edi@37
  NiScreenElements *v13; // edi@41
  NiScreenElements *v14; // edi@45
  NiScreenElements *v15; // edi@49
  NiTListItem<TextEff *> *v16; // edi@53
  NiTListItem<TextEff *> *v17; // ST0C_4@54

  v1 = this;
  v2 = (char *)&this->m_kCriEffect;
  NsEffect::_NsEffect(&this->m_kCriEffect.kEffect);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v2 + 4));
  v3 = *(_DWORD *)v2;
  if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
  v4 = v1->m_spCriticalHitAlphaCtrl.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->m_spCriticalHitSizeCtrl.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_spCriticalHitNoiseCtrl.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_spCriticalHitMoveCtrl.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  v8 = v1->m_spNormalHitAlphaCtrl.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  v9 = v1->m_spNormalHitNoiseCtrl.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  v10 = v1->m_spNormalHitMoveCtrl.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
  v11 = v1->m_spScreenSpaceCamera.m_pObject;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v12 = v1->m_kImmuneRes.m_spGeom.m_pObject;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v12,
      1u);
  v13 = v1->m_kResistGeomRes.m_spGeom.m_pObject;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v13,
      1u);
  v14 = v1->m_kBlockGeomRes.m_spGeom.m_pObject;
  if ( v14
    && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v14,
      1u);
  v15 = v1->m_kMissGeomRes.m_spGeom.m_pObject;
  if ( v15
    && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v15,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_akNumGeomRes,
    0xCu,
    60,
    (void (__thiscall *)(void *))TextEffMgr::GeomRes::_GeomRes);
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&PgTList<TextEff__>::_vftable_;
  v16 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v16 )
  {
    v17 = v16;
    v16 = v16->m_pkNext;
    v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *> *)v1,
      v17);
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
}
// 9C775C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);
// 9C777C: using guessed type int (__thiscall *PgTList_TextEff _____vftable_)(void *p, char);

//----- (0069BBC0) --------------------------------------------------------
void __thiscall TextEffMgr::AddNumTextEff(TextEffMgr *this, unsigned __int16 kHandle, int iNum, TextEffMgr::TextEffColor eColor, bool bCritical)
{
  TextEffMgr *v5; // esi@1
  Char *v6; // eax@1
  int v7; // eax@2
  float v8; // ST34_4@2
  float v9; // ST30_4@2
  float v10; // ST38_4@2
  float v11; // ST38_4@2
  float v12; // ST38_4@2
  TextEff *v13; // edi@3
  void *v14; // eax@4
  TextEff *v15; // eax@5
  int v16; // eax@7
  char v17; // cl@8
  int v18; // edi@10
  NiObject *v19; // ebx@11
  NiObject *v20; // ST28_4@11
  NiObject *v21; // ST24_4@11
  NiObject *v22; // ST0C_4@11
  NiObject *v23; // ST08_4@11
  NiObject *v24; // ST04_4@11
  NiObject *v25; // eax@11
  NiNode *v26; // eax@11
  unsigned int v27; // edx@11
  NiObject *v28; // ebx@12
  NiObject *v29; // ST0C_4@12
  NiObject *v30; // eax@12
  NiObject *v31; // [sp+0h] [bp-7Ch]@10
  int v32; // [sp+1Ch] [bp-60h]@9
  int i; // [sp+20h] [bp-5Ch]@9
  TextEff *v34; // [sp+24h] [bp-58h]@5
  char acNumStr[64]; // [sp+2Ch] [bp-50h]@7
  unsigned int v36; // [sp+6Ch] [bp-10h]@1
  int v37; // [sp+78h] [bp-4h]@4
  int v38; // [sp+7Ch] [bp+0h]@1

  v36 = (unsigned int)&v38 ^ __security_cookie;
  v5 = this;
  v6 = CharMgr::GetChar(&g_kCharMgr, kHandle);
  if ( v6 )
  {
    v7 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[6].Deaffect)(v6);
    v8 = pkCamera->baseclass_0.m_kLocal.m_Translate.x - *(float *)v7;
    v9 = pkCamera->baseclass_0.m_kLocal.m_Translate.y - *(float *)(v7 + 4);
    v10 = pkCamera->baseclass_0.m_kLocal.m_Translate.z - *(float *)(v7 + 8);
    v11 = v9 * v9 + v8 * v8 + v10 * v10;
    v12 = sqrt(v11);
    if ( TextEff::ms_fMaxDistance >= (double)v12 )
    {
      v13 = 0;
      if ( v5->m_akNumGeomRes[eColor][0].m_spGeom.m_pObject )
      {
        v14 = operator new(0x24u);
        v37 = 0;
        if ( v14 )
        {
          TextEff::TextEff((TextEff *)v14);
          v13 = v15;
          v34 = v15;
        }
        else
        {
          v34 = 0;
        }
        v13->m_kCharHandle = kHandle;
        v13->m_fLifeTime = v5->m_fNormalHitLifeTime;
        v37 = -1;
        sprintf(acNumStr, "%u");
        v16 = (int)acNumStr;
        do
          v17 = *(_BYTE *)v16++;
        while ( v17 );
        v32 = v16 - (_DWORD)&acNumStr[1];
        i = 0;
        if ( v16 - (signed int)&acNumStr[1] > 0 )
        {
          do
          {
            v18 = (int)((char *)v5->m_akNumGeomRes[eColor] + 4 * (3 * acNumStr[i] - 144));
            v31 = NiObject::Clone(*(NiObject **)(v18 + 8));
            if ( bCritical )
            {
              v19 = (NiObject *)v5->m_spCriticalHitSizeCtrl.m_pObject;
              v20 = (NiObject *)v5->m_spCriticalHitNoiseCtrl.m_pObject;
              v21 = (NiObject *)v5->m_spCriticalHitMoveCtrl.m_pObject;
              v22 = NiObject::Clone(&v5->m_spCriticalHitAlphaCtrl.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              v23 = NiObject::Clone(v19);
              v24 = NiObject::Clone(v20);
              v25 = NiObject::Clone(v21);
              v26 = TextEffMgr::CreateControllNode(
                      v5,
                      (NiTransformController *)v25,
                      (NiTransformController *)v24,
                      (NiTransformController *)v23,
                      (NiAlphaController *)v22,
                      (NiScreenElements *)v31);
              v27 = *(_DWORD *)v18 + 10;
            }
            else
            {
              v28 = (NiObject *)v5->m_spNormalHitMoveCtrl.m_pObject;
              v29 = NiObject::Clone(&v5->m_spNormalHitAlphaCtrl.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              v30 = NiObject::Clone(v28);
              v26 = TextEffMgr::CreateControllNode(
                      v5,
                      (NiTransformController *)v30,
                      0,
                      0,
                      (NiAlphaController *)v29,
                      (NiScreenElements *)v31);
              v27 = *(_DWORD *)v18;
            }
            TextEff::AddNode(v34, v26, v27, *(_DWORD *)(v18 + 4));
            ++i;
          }
          while ( i < v32 );
          v13 = v34;
        }
        TextEffMgr::Add(v5, v13);
        TextEff::SetStartTime(v13, Timer::ms_fCurTime);
      }
    }
  }
}
// A81980: using guessed type float TextEff__ms_fMaxDistance;
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0069BDF0) --------------------------------------------------------
void __thiscall TextEffMgr::AddMissTextEff(TextEffMgr *this, unsigned __int16 kHandle)
{
  TextEffMgr *v2; // edi@1
  int v3; // esi@1
  Char *v4; // eax@2
  NiPoint3 *v5; // eax@3
  void *v6; // eax@4
  int v7; // eax@5
  unsigned int v8; // ST08_4@6
  unsigned int v9; // ST04_4@6
  NiObject *v10; // eax@6

  v2 = this;
  v3 = 0;
  if ( this->m_kMissGeomRes.m_spGeom.m_pObject )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( v4 )
    {
      v5 = (NiPoint3 *)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
      if ( (double)TextEff::ms_fMaxDistance >= World::GetDistanceToCamera(&g_kWorld, v5) )
      {
        v6 = operator new(0x24u);
        if ( v6 )
        {
          TextEff::TextEff((TextEff *)v6);
          v3 = v7;
        }
        *(_WORD *)(v3 + 4) = kHandle;
        v8 = v2->m_kMissGeomRes.m_uiHeight;
        v9 = v2->m_kMissGeomRes.m_uiWidth;
        v10 = NiObject::Clone(&v2->m_kMissGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        TextEff::AddGeometry((TextEff *)v3, (NiScreenElements *)v10, v9, v8);
        TextEff::SetStartTime((TextEff *)v3, Timer::ms_fCurTime);
        TextEffMgr::Add(v2, (TextEff *)v3);
      }
    }
  }
}
// A81980: using guessed type float TextEff__ms_fMaxDistance;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0069BEE0) --------------------------------------------------------
void __thiscall TextEffMgr::AddResistTextEff(TextEffMgr *this, unsigned __int16 kHandle)
{
  TextEffMgr *v2; // edi@1
  int v3; // esi@1
  Char *v4; // eax@2
  NiPoint3 *v5; // eax@3
  void *v6; // eax@4
  int v7; // eax@5
  unsigned int v8; // ST08_4@6
  unsigned int v9; // ST04_4@6
  NiObject *v10; // eax@6

  v2 = this;
  v3 = 0;
  if ( this->m_kResistGeomRes.m_spGeom.m_pObject )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( v4 )
    {
      v5 = (NiPoint3 *)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
      if ( (double)TextEff::ms_fMaxDistance >= World::GetDistanceToCamera(&g_kWorld, v5) )
      {
        v6 = operator new(0x24u);
        if ( v6 )
        {
          TextEff::TextEff((TextEff *)v6);
          v3 = v7;
        }
        *(_WORD *)(v3 + 4) = kHandle;
        v8 = v2->m_kResistGeomRes.m_uiHeight;
        v9 = v2->m_kResistGeomRes.m_uiWidth;
        v10 = NiObject::Clone(&v2->m_kResistGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        TextEff::AddGeometry((TextEff *)v3, (NiScreenElements *)v10, v9, v8);
        TextEff::SetStartTime((TextEff *)v3, Timer::ms_fCurTime);
        TextEffMgr::Add(v2, (TextEff *)v3);
      }
    }
  }
}
// A81980: using guessed type float TextEff__ms_fMaxDistance;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0069BFD0) --------------------------------------------------------
void __thiscall TextEffMgr::AddBlockTextEff(TextEffMgr *this, unsigned __int16 kHandle)
{
  TextEffMgr *v2; // edi@1
  int v3; // esi@1
  Char *v4; // eax@2
  NiPoint3 *v5; // eax@3
  void *v6; // eax@4
  int v7; // eax@5
  unsigned int v8; // ST08_4@6
  unsigned int v9; // ST04_4@6
  NiObject *v10; // eax@6

  v2 = this;
  v3 = 0;
  if ( this->m_kBlockGeomRes.m_spGeom.m_pObject )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( v4 )
    {
      v5 = (NiPoint3 *)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
      if ( (double)TextEff::ms_fMaxDistance >= World::GetDistanceToCamera(&g_kWorld, v5) )
      {
        v6 = operator new(0x24u);
        if ( v6 )
        {
          TextEff::TextEff((TextEff *)v6);
          v3 = v7;
        }
        *(_WORD *)(v3 + 4) = kHandle;
        v8 = v2->m_kBlockGeomRes.m_uiHeight;
        v9 = v2->m_kBlockGeomRes.m_uiWidth;
        v10 = NiObject::Clone(&v2->m_kBlockGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        TextEff::AddGeometry((TextEff *)v3, (NiScreenElements *)v10, v9, v8);
        TextEff::SetStartTime((TextEff *)v3, Timer::ms_fCurTime);
        TextEffMgr::Add(v2, (TextEff *)v3);
      }
    }
  }
}
// A81980: using guessed type float TextEff__ms_fMaxDistance;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0069C0C0) --------------------------------------------------------
void __thiscall TextEffMgr::AddImmuneTextEff(TextEffMgr *this, unsigned __int16 kHandle)
{
  TextEffMgr *v2; // edi@1
  int v3; // esi@1
  Char *v4; // eax@2
  NiPoint3 *v5; // eax@3
  void *v6; // eax@4
  int v7; // eax@5
  unsigned int v8; // ST08_4@6
  unsigned int v9; // ST04_4@6
  NiObject *v10; // eax@6

  v2 = this;
  v3 = 0;
  if ( this->m_kImmuneRes.m_spGeom.m_pObject )
  {
    v4 = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( v4 )
    {
      v5 = (NiPoint3 *)((int (__thiscall *)(Char *))v4->baseclass_0.vfptr[6].Deaffect)(v4);
      if ( (double)TextEff::ms_fMaxDistance >= World::GetDistanceToCamera(&g_kWorld, v5) )
      {
        v6 = operator new(0x24u);
        if ( v6 )
        {
          TextEff::TextEff((TextEff *)v6);
          v3 = v7;
        }
        *(_WORD *)(v3 + 4) = kHandle;
        v8 = v2->m_kImmuneRes.m_uiHeight;
        v9 = v2->m_kImmuneRes.m_uiWidth;
        v10 = NiObject::Clone(&v2->m_kImmuneRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        TextEff::AddGeometry((TextEff *)v3, (NiScreenElements *)v10, v9, v8);
        TextEff::SetStartTime((TextEff *)v3, Timer::ms_fCurTime);
        TextEffMgr::Add(v2, (TextEff *)v3);
      }
    }
  }
}
// A81980: using guessed type float TextEff__ms_fMaxDistance;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0069C1B0) --------------------------------------------------------
void __thiscall TextEffMgr::Remove(TextEffMgr *this, TextEff *pkTextEff)
{
  TextEff *v2; // esi@1
  TextEffMgr *v3; // edi@1
  NiTListItem<TextEff *> *v4; // eax@1
  int v5; // ecx@2
  TextEff *v6; // edx@2
  TextEff *v7; // edi@8

  v2 = pkTextEff;
  v3 = this;
  v4 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v4 )
  {
    while ( 1 )
    {
      v5 = (int)&v4->m_element;
      v6 = (TextEff *)v4;
      v4 = v4->m_pkNext;
      if ( pkTextEff == *(TextEff **)v5 )
        break;
      if ( !v4 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v6 = 0;
  }
  pkTextEff = v6;
  if ( v6 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v3,
      (void **)&pkTextEff);
  ((void (__stdcall *)(_DWORD, _DWORD))v3->m_pkScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
    &pkTextEff,
    v2->m_spNode.m_pObject);
  if ( pkTextEff )
  {
    v7 = pkTextEff;
    if ( !InterlockedDecrement((volatile LONG *)&pkTextEff->m_kCharHandle) )
    {
      if ( v7 )
        v7->vfptr->__vecDelDtor(v7, 1u);
    }
  }
  v2->vfptr->__vecDelDtor(v2, 1u);
}

//----- (0069C230) --------------------------------------------------------
void __thiscall TextEffMgr::RemoveAll(TextEffMgr *this)
{
  signed int v1; // esi@0
  TextEffMgr *v2; // edi@1
  NiTListItem<TextEff *> *v3; // ebx@1
  TextEff *v4; // esi@3
  void *v5; // eax@3
  int v6; // ecx@4
  void *v7; // edx@4
  int v8; // edi@10
  signed int v9; // [sp-4h] [bp-18h]@2
  int v10; // [sp+8h] [bp-Ch]@9
  void *kPos; // [sp+Ch] [bp-8h]@7
  TextEffMgr *v12; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v12 = this;
  if ( v3 )
  {
    v9 = v1;
    do
    {
      v4 = v3->m_element;
      v5 = v2->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v3 = v3->m_pkNext;
      if ( v5 )
      {
        while ( 1 )
        {
          v6 = (int)((char *)v5 + 8);
          v7 = v5;
          v5 = *(void **)v5;
          if ( v4 == *(TextEff **)v6 )
            break;
          if ( !v5 )
            goto LABEL_6;
        }
      }
      else
      {
LABEL_6:
        v7 = 0;
      }
      kPos = v7;
      if ( v7 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v2,
          &kPos);
      ((void (__stdcall *)(int *, NiNode *, signed int))v2->m_pkScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v10,
        v4->m_spNode.m_pObject,
        v9);
      if ( v10 )
      {
        v8 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v8 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
        }
        v2 = v12;
      }
      v9 = 1;
      ((void (__thiscall *)(TextEff *))v4->vfptr->__vecDelDtor)(v4);
    }
    while ( v3 );
  }
}
// 69C230: could not find valid save-restore pair for esi

//----- (0069C2D0) --------------------------------------------------------
void __thiscall TextEffMgr::Update(TextEffMgr *this, float fTime, NiCamera *pkWorldCamera)
{
  TextEffMgr *v3; // edi@1
  NiTListItem<TextEff *> *v4; // esi@1
  TextEff *v5; // ebx@2
  NiTListItem<TextEff *> *v6; // esi@5
  NiCamera *v7; // ebx@6
  TextEff **v8; // eax@7
  float v9; // esi@11
  Char *v10; // eax@16
  NiNode *v11; // eax@18
  NiNode *v12; // edi@18
  double v13; // st7@18
  NiPoint3 kWorldPos; // [sp+1Ch] [bp-28h]@17
  float v15; // [sp+28h] [bp-1Ch]@18
  float v16; // [sp+2Ch] [bp-18h]@18
  float v17; // [sp+30h] [bp-14h]@18
  NiPoint3 kCharHeightPos; // [sp+34h] [bp-10h]@17

  v3 = this;
  v4 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4->m_element;
    v4 = v4->m_pkNext;
    if ( !TextEff::IsAlive(v5, fTime) )
      TextEffMgr::Remove(v3, v5);
  }
  v6 = v3->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v6 )
  {
    v7 = pkWorldCamera;
    do
    {
      v8 = &v6->m_element;
      v6 = v6->m_pkNext;
      TextEff::Update(*v8, fTime, v7, v3->m_spScreenSpaceCamera.m_pObject);
    }
    while ( v6 );
  }
  NiAVObject::Update(&v3->m_spScreenSpaceCamera.m_pObject->baseclass_0.baseclass_0, fTime, 1);
  NiAVObject::Update(&v3->m_pkScene->baseclass_0, fTime, 1);
  if ( CNSTimer_MarkCheck::Update(&v3->m_kCriEffect.kMarkCheck, fTime) == 1
    && v3->m_kCriEffect.spCriticalEffect.m_pObject )
  {
    ((void (__stdcall *)(float *, NiNode *))v3->m_pkScene->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &fTime,
      v3->m_kCriEffect.spCriticalEffect.m_pObject);
    if ( fTime != 0.0 )
    {
      v9 = fTime;
      if ( !InterlockedDecrement((volatile LONG *)(LODWORD(fTime) + 4)) )
      {
        if ( LODWORD(v9) )
          (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v9))(LODWORD(v9), 1);
      }
    }
    v3->m_kCriEffect.bLive = 0;
  }
  if ( v3->m_kCriEffect.bLive )
  {
    v10 = CharMgr::GetChar(&g_kCharMgr, v3->m_kCriEffect.kHandle);
    if ( v10 )
    {
      Char::GetHeightPos(v10, &kCharHeightPos);
      kCharHeightPos.z = kCharHeightPos.z + 20.0;
      LODWORD(kWorldPos.x) = (_DWORD)kCharHeightPos.x;
      kWorldPos.y = kCharHeightPos.y;
      kWorldPos.z = kCharHeightPos.z;
      if ( NiCamera::WorldPtToScreenPt(pkCamera, &kWorldPos, &fTime, (float *)&pkWorldCamera, 0.0000099999997) )
      {
        *(float *)&pkWorldCamera = 1.0 - *(float *)&pkWorldCamera;
        *(float *)&pkWorldCamera = *(float *)&pkWorldCamera * (double)PgWin::ms_uiScreenHeight;
        v11 = v3->m_kCriEffect.spCriticalEffect.m_pObject;
        fTime = (double)PgWin::ms_uiScreenWidth * fTime;
        v11->baseclass_0.m_uFlags &= 0xFFFEu;
        v12 = v3->m_kCriEffect.spCriticalEffect.m_pObject;
        v15 = fTime;
        v13 = *(float *)&pkWorldCamera;
        v12->baseclass_0.m_kLocal.m_Translate.x = fTime;
        v16 = v13;
        v12->baseclass_0.m_kLocal.m_Translate.y = v16;
        v17 = 0.0;
        v12->baseclass_0.m_kLocal.m_Translate.z = 0.0;
      }
      else
      {
        v3->m_kCriEffect.spCriticalEffect.m_pObject->baseclass_0.m_uFlags |= 1u;
      }
    }
  }
}

//----- (0069C4D0) --------------------------------------------------------
void __thiscall TextEffMgr::CopyProperty(TextEffMgr *this, NiScreenElements *pkGeom, NiTriShape *pkTriShape)
{
  NiObject *v3; // eax@1
  NiObject *v4; // eax@2
  NiObject *v5; // eax@3
  NiObject *v6; // eax@4
  NiObject *v7; // eax@5
  NiObject *v8; // eax@6
  NiObject *v9; // eax@7
  NiObject *v10; // eax@8

  v3 = (NiObject *)NiAVObject::GetProperty(&pkTriShape->baseclass_0.baseclass_0.baseclass_0, 0);
  if ( v3 )
  {
    v4 = NiObject::Clone(v3);
    NiAVObject::AttachProperty(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (NiProperty *)v4);
  }
  v5 = (NiObject *)NiAVObject::GetProperty(&pkTriShape->baseclass_0.baseclass_0.baseclass_0, 8);
  if ( v5 )
  {
    v6 = NiObject::Clone(v5);
    NiAVObject::AttachProperty(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (NiProperty *)v6);
  }
  v7 = (NiObject *)NiAVObject::GetProperty(&pkTriShape->baseclass_0.baseclass_0.baseclass_0, 3);
  if ( v7 )
  {
    v8 = NiObject::Clone(v7);
    NiAVObject::AttachProperty(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (NiProperty *)v8);
  }
  v9 = (NiObject *)NiAVObject::GetProperty(&pkTriShape->baseclass_0.baseclass_0.baseclass_0, 9);
  if ( v9 )
  {
    v10 = NiObject::Clone(v9);
    NiAVObject::AttachProperty(&pkGeom->baseclass_0.baseclass_0.baseclass_0.baseclass_0, (NiProperty *)v10);
  }
}

//----- (0069C560) --------------------------------------------------------
bool __thiscall TextEffMgr::CreateGeometry(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1
  char *v2; // eax@3
  signed int v3; // ebx@5
  NiAVObject *v4; // eax@6
  NiScreenElementsData *v5; // edi@7
  void *v6; // eax@8
  int v7; // eax@9
  int v8; // ecx@11
  NiScreenElements **v9; // edi@11
  int v10; // edx@19
  int v11; // eax@19
  NiScreenElements *v12; // ecx@19
  NiAVObject *v13; // eax@21
  NiNode *v14; // esi@22
  bool result; // al@29
  NiScreenElementsData *v16; // edi@30
  void *v17; // eax@31
  int v18; // eax@32
  int v19; // edi@32
  NiScreenElements *v20; // ebx@34
  int v21; // eax@41
  NiAVObject *v22; // ecx@41
  NiAVObject *v23; // eax@41
  NiTriShape *v24; // ebx@41
  NiScreenElementsData *v25; // edi@42
  void *v26; // eax@43
  NiD3DDefaultShader *v27; // eax@44
  int v28; // edx@46
  NiAVObject *v29; // ecx@46
  NiAVObject *v30; // eax@46
  NiTriShape *v31; // ebx@46
  NiScreenElementsData *v32; // edi@47
  void *v33; // eax@49
  NiD3DDefaultShader *v34; // eax@50
  int v35; // eax@52
  NiAVObject *v36; // ecx@52
  NiAVObject *v37; // eax@52
  NiTriShape *v38; // ebx@52
  NiScreenElementsData *v39; // edi@53
  void *v40; // eax@54
  NiD3DDefaultShader *v41; // eax@55
  int v42; // eax@57
  NiAVObject *v43; // ecx@57
  char *v44; // eax@57
  NiNode *v45; // eax@57
  volatile LONG *v46; // [sp+20h] [bp-ACh]@23
  void *apcShapeName[6]; // [sp+34h] [bp-98h]@4
  char *format; // [sp+4Ch] [bp-80h]@5
  char **v49; // [sp+50h] [bp-7Ch]@4
  NiTriShape *pkTriShape; // [sp+54h] [bp-78h]@6
  int uiLeft; // [sp+58h] [bp-74h]@7
  int v52; // [sp+5Ch] [bp-70h]@4
  int v53; // [sp+60h] [bp-6Ch]@9
  int uiTop; // [sp+64h] [bp-68h]@7
  void *v55; // [sp+68h] [bp-64h]@8
  unsigned int uiHeight; // [sp+6Ch] [bp-60h]@7
  unsigned int uiWidth; // [sp+70h] [bp-5Ch]@7
  void *pkGeometry; // [sp+74h] [bp-58h]@6
  NiPointer<NiNode> spNode; // [sp+78h] [bp-54h]@1
  char acTriShapeName[64]; // [sp+7Ch] [bp-50h]@6
  unsigned int v61; // [sp+BCh] [bp-10h]@1
  int v62; // [sp+C8h] [bp-4h]@1
  int v63; // [sp+CCh] [bp+0h]@1

  v61 = (unsigned int)&v63 ^ __security_cookie;
  v1 = this;
  spNode.m_pObject = 0;
  v62 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acEffect, "Number.nif");
  PgUtil::LoadNodeNifFile(v2, &spNode, 0);
  if ( !spNode.m_pObject )
    return 0;
  apcShapeName[0] = "W20p%02d";
  apcShapeName[1] = "R20p%02d";
  apcShapeName[2] = "Y20p%02d";
  apcShapeName[3] = "G20p%02d";
  apcShapeName[4] = "S%02d";
  apcShapeName[5] = "H%02d";
  v52 = 2;
  v49 = (char **)apcShapeName;
  while ( 2 )
  {
    v3 = 0;
    format = *v49;
    do
    {
      pkGeometry = 0;
      sprintf(acTriShapeName, format);
      v4 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(acTriShapeName);
      PgUtil::CatchGeometry(v4, (NiGeometry **)&pkGeometry);
      pkTriShape = (NiTriShape *)pkGeometry;
      if ( !pkGeometry )
        goto LABEL_24;
      v5 = PgUtil::CreateScreenGeometryDataFromTriShapeData(
             *((NiTriShapeData **)pkGeometry + 46),
             &uiLeft,
             &uiTop,
             &uiWidth,
             &uiHeight,
             0.0,
             0.0);
      if ( !v5 )
        goto LABEL_22;
      v6 = operator new(0xC4u);
      v55 = v6;
      LOBYTE(v62) = 1;
      if ( v6 )
      {
        NiScreenElements::NiScreenElements((NiScreenElements *)v6, v5);
        v53 = v7;
      }
      else
      {
        v53 = 0;
        v7 = 0;
      }
      v8 = (int)(&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr)[v3 + v52];
      v9 = (NiScreenElements **)((char *)v1 + 12 * (v3 + v52));
      LOBYTE(v62) = 0;
      v55 = (void *)v8;
      if ( v8 != v7 )
      {
        if ( v8 )
        {
          if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v55 )
            (**(void (__stdcall ***)(_DWORD))v55)(1);
          v7 = v53;
        }
        *v9 = (NiScreenElements *)v7;
        if ( v7 )
          InterlockedIncrement((volatile LONG *)(v7 + 4));
      }
      TextEffMgr::CopyProperty(v1, *v9, pkTriShape);
      v10 = uiHeight;
      v11 = (int)((char *)v1 + 12 * (v52 + v3 - 2));
      *(_DWORD *)(v11 + 16) = uiWidth;
      v12 = *v9;
      *(_DWORD *)(v11 + 20) = v10;
      NiAVObject::UpdateEffects(&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      NiAVObject::UpdateProperties(&(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      NiAVObject::Update(&(*v9)->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
      ++v3;
    }
    while ( v3 < 10 );
    ++v49;
    v52 += 10;
    if ( v52 < 62 )
      continue;
    break;
  }
  pkGeometry = 0;
  v13 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Miss");
  PgUtil::CatchGeometry(v13, (NiGeometry **)&pkGeometry);
  pkTriShape = (NiTriShape *)pkGeometry;
  if ( !pkGeometry )
    goto LABEL_22;
  v16 = PgUtil::CreateScreenGeometryDataFromTriShapeData(
          *((NiTriShapeData **)pkGeometry + 46),
          &uiLeft,
          &uiTop,
          &uiWidth,
          &uiHeight,
          0.0,
          0.0);
  if ( !v16 )
    goto LABEL_24;
  v17 = operator new(0xC4u);
  v55 = v17;
  LOBYTE(v62) = 2;
  if ( v17 )
  {
    NiScreenElements::NiScreenElements((NiScreenElements *)v17, v16);
    v19 = v18;
  }
  else
  {
    v19 = 0;
  }
  v20 = v1->m_kMissGeomRes.m_spGeom.m_pObject;
  LOBYTE(v62) = 0;
  if ( v20 != (NiScreenElements *)v19 )
  {
    if ( v20
      && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v20 )
      v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v20,
        1u);
    v1->m_kMissGeomRes.m_spGeom.m_pObject = (NiScreenElements *)v19;
    if ( v19 )
      InterlockedIncrement((volatile LONG *)(v19 + 4));
  }
  TextEffMgr::CopyProperty(v1, v1->m_kMissGeomRes.m_spGeom.m_pObject, pkTriShape);
  v21 = uiHeight;
  v22 = (NiAVObject *)v1->m_kMissGeomRes.m_spGeom.m_pObject;
  v1->m_kMissGeomRes.m_uiWidth = uiWidth;
  v1->m_kMissGeomRes.m_uiHeight = v21;
  NiAVObject::UpdateEffects(v22);
  NiAVObject::UpdateProperties(&v1->m_kMissGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->m_kMissGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  pkGeometry = 0;
  v23 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Block");
  PgUtil::CatchGeometry(v23, (NiGeometry **)&pkGeometry);
  v24 = (NiTriShape *)pkGeometry;
  if ( !pkGeometry )
    goto LABEL_22;
  v25 = PgUtil::CreateScreenGeometryDataFromTriShapeData(
          *((NiTriShapeData **)pkGeometry + 46),
          &uiLeft,
          &uiTop,
          &uiWidth,
          &uiHeight,
          0.0,
          0.0);
  if ( !v25 )
  {
LABEL_24:
    v14 = spNode.m_pObject;
    v62 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v46 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_26;
  }
  v26 = operator new(0xC4u);
  v55 = v26;
  LOBYTE(v62) = 3;
  if ( v26 )
    NiScreenElements::NiScreenElements((NiScreenElements *)v26, v25);
  else
    v27 = 0;
  LOBYTE(v62) = 0;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_kBlockGeomRes.m_spGeom, v27);
  TextEffMgr::CopyProperty(v1, v1->m_kBlockGeomRes.m_spGeom.m_pObject, v24);
  v28 = uiHeight;
  v1->m_kBlockGeomRes.m_uiWidth = uiWidth;
  v29 = (NiAVObject *)v1->m_kBlockGeomRes.m_spGeom.m_pObject;
  v1->m_kBlockGeomRes.m_uiHeight = v28;
  NiAVObject::UpdateEffects(v29);
  NiAVObject::UpdateProperties(&v1->m_kBlockGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v1->m_kBlockGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  pkGeometry = 0;
  v30 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Resist");
  PgUtil::CatchGeometry(v30, (NiGeometry **)&pkGeometry);
  v31 = (NiTriShape *)pkGeometry;
  if ( !pkGeometry )
  {
LABEL_22:
    v14 = spNode.m_pObject;
    v62 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v46 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_26:
    if ( !InterlockedDecrement(v46) )
    {
      if ( v14 )
        v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    }
    return 0;
  }
  v32 = PgUtil::CreateScreenGeometryDataFromTriShapeData(
          *((NiTriShapeData **)pkGeometry + 46),
          &uiLeft,
          &uiTop,
          &uiWidth,
          &uiHeight,
          0.0,
          0.0);
  if ( v32
    && ((v33 = operator new(0xC4u), v55 = v33, LOBYTE(v62) = 4, !v33) ? (v34 = 0) : NiScreenElements::NiScreenElements(
                                                                                      (NiScreenElements *)v33,
                                                                                      v32),
        (LOBYTE(v62) = 0,
         NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_kResistGeomRes.m_spGeom, v34),
         TextEffMgr::CopyProperty(v1, v1->m_kResistGeomRes.m_spGeom.m_pObject, v31),
         v35 = uiWidth,
         v1->m_kResistGeomRes.m_uiHeight = uiHeight,
         v36 = (NiAVObject *)v1->m_kResistGeomRes.m_spGeom.m_pObject,
         v1->m_kResistGeomRes.m_uiWidth = v35,
         NiAVObject::UpdateEffects(v36),
         NiAVObject::UpdateProperties(&v1->m_kResistGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0),
         NiAVObject::Update(
           &v1->m_kResistGeomRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           0.0,
           1),
         pkGeometry = 0,
         v37 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Immune"),
         PgUtil::CatchGeometry(v37, (NiGeometry **)&pkGeometry),
         (v38 = (NiTriShape *)pkGeometry) != 0)
     && (v39 = PgUtil::CreateScreenGeometryDataFromTriShapeData(
                 *((NiTriShapeData **)pkGeometry + 46),
                 &uiLeft,
                 &uiTop,
                 &uiWidth,
                 &uiHeight,
                 0.0,
                 0.0)) != 0) )
  {
    v40 = operator new(0xC4u);
    v55 = v40;
    LOBYTE(v62) = 5;
    if ( v40 )
      NiScreenElements::NiScreenElements((NiScreenElements *)v40, v39);
    else
      v41 = 0;
    LOBYTE(v62) = 0;
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_kImmuneRes.m_spGeom, v41);
    TextEffMgr::CopyProperty(v1, v1->m_kImmuneRes.m_spGeom.m_pObject, v38);
    v42 = uiWidth;
    v1->m_kImmuneRes.m_uiHeight = uiHeight;
    v43 = (NiAVObject *)v1->m_kImmuneRes.m_spGeom.m_pObject;
    v1->m_kImmuneRes.m_uiWidth = v42;
    NiAVObject::UpdateEffects(v43);
    NiAVObject::UpdateProperties(&v1->m_kImmuneRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v1->m_kImmuneRes.m_spGeom.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    Folder::Effect();
    v44 = fs("%s\\CriticalEffect.nif");
    v45 = Ns_LoadNifFile(v44, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v1->m_kCriEffect, (NiD3DDefaultShader *)v45);
    v62 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 1;
  }
  else
  {
    v62 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0069CBF0) --------------------------------------------------------
void __thiscall TextEffMgr::AddDamage(TextEffMgr *this, unsigned __int16 kHandle, int iNum)
{
  int v3; // edi@1
  TextEffMgr *v4; // esi@1
  unsigned __int16 v5; // bx@3
  Char *v6; // eax@10
  char v7; // al@12
  int v8; // edi@12
  TextEffMgr *v9; // ecx@12
  NiNode *v10; // ecx@13
  NiNode *v11; // eax@13
  int v12; // edi@23
  char v13; // al@27
  bool v14; // [sp+Ch] [bp-10h]@12
  Char *pkChar; // [sp+24h] [bp+8h]@11

  v3 = iNum;
  v4 = this;
  if ( iNum & 0x2000000 )
  {
    TextEffMgr::AddBlockTextEff(this, kHandle);
    return;
  }
  v5 = kHandle;
  if ( iNum & 0x1000000 )
    TextEffMgr::AddResistTextEff(this, kHandle);
  if ( iNum & 0x20000000 )
  {
    TextEffMgr::AddMissTextEff(v4, kHandle);
    return;
  }
  if ( v3 & 0x100000 )
  {
    TextEffMgr::AddImmuneTextEff(v4, kHandle);
    return;
  }
  if ( !(iNum & 0x4000000) )
  {
    v6 = CharMgr::GetChar(&g_kCharMgr, kHandle);
    if ( iNum & 0x40000000 )
    {
      pkChar = v6;
      if ( !v6 )
        return;
      v7 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[1].Affect)(v6);
      v8 = (unsigned __int16)iNum;
      v14 = 1;
      v9 = v4;
      if ( v7 )
      {
        TextEffMgr::AddNumTextEff(v4, v5, v8, 0, 1);
        NsEffect::SetEffectNode(&v4->m_kCriEffect.kEffect, &v4->m_kCriEffect.spCriticalEffect.m_pObject->baseclass_0);
        NsEffect::Start(&v4->m_kCriEffect.kEffect, Timer::ms_fCurTime);
        v4->m_kCriEffect.kMarkCheck.m_fMarkTime = v4->m_kCriEffect.kEffect.m_fMaxTime;
        CNSTimer_MarkCheck::ReSet(&v4->m_kCriEffect.kMarkCheck, Timer::ms_fCurTime, OVER);
        v10 = v4->m_pkScene;
        v11 = v4->m_kCriEffect.spCriticalEffect.m_pObject;
        v4->m_kCriEffect.bLive = 1;
        v4->m_kCriEffect.kHandle = v5;
        ((void (__stdcall *)(NiNode *, signed int))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v11,
          1);
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_Critical01);
        if ( !EffectMgr::JustCreateAttachEffect(&g_kEffectMgr, "Critical_Chest", pkChar, PKCS7, Timer::ms_fCurTime, 1) )
          OutputDebugStringA("don't exist Critical Effect by /resmenu/critical_chest.nif");
        if ( AbStateInfectee::IsInList(&pkChar->baseclass_0, STA_COMMONSTUN02) )
          ((void (__thiscall *)(Char *))pkChar->baseclass_0.vfptr[12].AddAbStateByAbstateIndex)(pkChar);
        NiAVObject::UpdateProperties(&v4->m_kCriEffect.spCriticalEffect.m_pObject->baseclass_0);
        NiAVObject::UpdateEffects(&v4->m_kCriEffect.spCriticalEffect.m_pObject->baseclass_0);
        return;
      }
LABEL_29:
      TextEffMgr::AddNumTextEff(v9, v5, v8, YELLOW, v14);
      return;
    }
    if ( iNum & 0x10000000 )
    {
      if ( v6 )
        TextEffMgr::AddNumTextEff(v4, kHandle, (unsigned __int16)iNum, HEAL, 0);
    }
    else
    {
      if ( !((unsigned int)((char *)loc_7FFFFF + 1) & iNum) )
      {
        if ( !v6 )
          return;
        v13 = ((int (__thiscall *)(Char *))v6->baseclass_0.vfptr[1].Affect)(v6);
        v8 = (unsigned __int16)iNum;
        v14 = 0;
        v9 = v4;
        if ( v13 )
        {
          TextEffMgr::AddNumTextEff(v4, kHandle, v8, RED, 0);
          return;
        }
        goto LABEL_29;
      }
      if ( v6 )
      {
        v12 = (unsigned __int16)iNum;
        if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[1].Affect)(v6) )
          TextEffMgr::AddNumTextEff(v4, kHandle, v12, SKILL_DAMAGE_FROM_MOB, 0);
        else
          TextEffMgr::AddNumTextEff(v4, kHandle, v12, SKILL_DAMAGE_FROM_MAINUSER, 0);
      }
    }
  }
}
// 7FFFFF: using guessed type int loc_7FFFFF();
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0069CE30) --------------------------------------------------------
void __thiscall TextEffMgr::TextEffMgr(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1

  v1 = this;
  *(_DWORD *)&this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&PgTList<TextEff__>::_vftable_;
  _eh_vector_constructor_iterator_(
    this->m_akNumGeomRes,
    0xCu,
    60,
    (void (__thiscall *)(void *))TextEffMgr::GeomRes::GeomRes,
    (void (__thiscall *)(void *))TextEffMgr::GeomRes::_GeomRes);
  v1->m_kMissGeomRes.m_spGeom.m_pObject = 0;
  v1->m_kBlockGeomRes.m_spGeom.m_pObject = 0;
  v1->m_kResistGeomRes.m_spGeom.m_pObject = 0;
  v1->m_kImmuneRes.m_spGeom.m_pObject = 0;
  v1->m_spScreenSpaceCamera.m_pObject = 0;
  v1->m_spNormalHitMoveCtrl.m_pObject = 0;
  v1->m_spNormalHitNoiseCtrl.m_pObject = 0;
  v1->m_spNormalHitAlphaCtrl.m_pObject = 0;
  v1->m_spCriticalHitMoveCtrl.m_pObject = 0;
  v1->m_spCriticalHitNoiseCtrl.m_pObject = 0;
  v1->m_spCriticalHitSizeCtrl.m_pObject = 0;
  v1->m_spCriticalHitAlphaCtrl.m_pObject = 0;
  v1->m_kCriEffect.spCriticalEffect.m_pObject = 0;
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&v1->m_kCriEffect.kMarkCheck);
  NsEffect::NsEffect(&v1->m_kCriEffect.kEffect);
}
// 9C777C: using guessed type int (__thiscall *PgTList_TextEff _____vftable_)(void *p, char);

//----- (0069CF10) --------------------------------------------------------
bool __thiscall TextEffMgr::Init(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1
  void *v2; // eax@1
  int v3; // ebx@1
  int v4; // eax@2
  PgWinCamera *v5; // edi@3
  PgWinCamera *v6; // ebx@10
  NiRenderer *v7; // edi@10
  NiRoom *v8; // ecx@10
  NiAVObject *v9; // ecx@18
  NiProperty *v10; // eax@18
  void *v11; // eax@18
  void *v12; // edi@18
  void *v13; // eax@23
  int v14; // eax@24
  int v15; // edi@24
  NiAVObject *v16; // ecx@26
  NiProperty *v17; // eax@26
  bool result; // al@28
  void *v19; // [sp+2Ch] [bp-14h]@1
  NiPointer<NiRoom> element; // [sp+30h] [bp-10h]@10
  int v21; // [sp+3Ch] [bp-4h]@1

  v1 = this;
  v2 = operator new(0x130u);
  v19 = v2;
  v3 = 0;
  v21 = 0;
  if ( v2 )
  {
    PgWinCamera::PgWinCamera((PgWinCamera *)v2);
    v3 = v4;
  }
  v5 = v1->m_spScreenSpaceCamera.m_pObject;
  v21 = -1;
  if ( v5 != (PgWinCamera *)v3 )
  {
    if ( v5
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spScreenSpaceCamera.m_pObject = (PgWinCamera *)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
  }
  v6 = v1->m_spScreenSpaceCamera.m_pObject;
  v7 = v6->m_spRenderer.m_pObject;
  v8 = (NiRoom *)NiRenderer::ms_pkRenderer;
  element.m_pObject = (NiRoom *)NiRenderer::ms_pkRenderer;
  if ( v7 != NiRenderer::ms_pkRenderer )
  {
    if ( v7 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.m_uiRefCount) && v7 )
        v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      v8 = element.m_pObject;
    }
    v6->m_spRenderer.m_pObject = (NiRenderer *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  PgWinCamera::UpdateRenderTargetBounds(v1->m_spScreenSpaceCamera.m_pObject);
  NiAVObject::Update(&v1->m_spScreenSpaceCamera.m_pObject->baseclass_0.baseclass_0, 0.0, 1);
  v9 = (NiAVObject *)v1->m_spScreenSpaceCamera.m_pObject->m_spScene.m_pObject;
  v1->m_pkScene = (NiNode *)v9;
  v10 = NiAVObject::GetProperty(v9, 11);
  LOWORD(v10[1].baseclass_0.baseclass_0.baseclass_0.vfptr) = (unsigned int)v10[1].baseclass_0.baseclass_0.baseclass_0.vfptr & 0xFFFD | 1;
  v11 = operator new(0x20u);
  v12 = v11;
  v19 = v11;
  v21 = 1;
  if ( v11 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v11);
    *(_DWORD *)v12 = &NiAlphaProperty::_vftable_;
    *((_WORD *)v12 + 14) = 236;
    *((_BYTE *)v12 + 30) = 0;
  }
  else
  {
    v12 = 0;
  }
  *((_WORD *)v12 + 14) |= 1u;
  v19 = v1->m_pkScene;
  element.m_pObject = (NiRoom *)v12;
  InterlockedIncrement((volatile LONG *)v12 + 1);
  v21 = 2;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v19 + 156),
    &element);
  v21 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v12 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v12)(v12, 1);
  v13 = operator new(0x60u);
  v19 = v13;
  v21 = 3;
  if ( v13 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v13);
    v15 = v14;
  }
  else
  {
    v15 = 0;
  }
  ++*(_DWORD *)(v15 + 88);
  *(float *)(v15 + 68) = 1.0;
  *(float *)(v15 + 72) = 1.0;
  *(float *)(v15 + 76) = 1.0;
  v16 = (NiAVObject *)v1->m_pkScene;
  v21 = -1;
  v17 = NiAVObject::GetProperty(v16, 3);
  NiAVObject::DetachProperty(&v1->m_pkScene->baseclass_0, v17);
  element.m_pObject = (NiRoom *)v1->m_pkScene;
  v19 = (void *)v15;
  InterlockedIncrement((volatile LONG *)(v15 + 4));
  v21 = 4;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&element.m_pObject->baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v19);
  v21 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v15)(v15, 1);
  NiAVObject::UpdateProperties(&v1->m_pkScene->baseclass_0);
  NiAVObject::UpdateEffects(&v1->m_pkScene->baseclass_0);
  result = TextEffMgr::CreateGeometry(v1);
  if ( result )
    result = TextEffMgr::LoadController(v1) != 0;
  return result;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (0069D1D0) --------------------------------------------------------
void __thiscall TextEffMgr::Terminate(TextEffMgr *this)
{
  TextEffMgr *v1; // esi@1
  NiNode *v2; // edi@1
  PgWinCamera *v3; // edi@6

  v1 = this;
  v2 = this->m_kCriEffect.spCriticalEffect.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_kCriEffect.spCriticalEffect.m_pObject = 0;
  }
  TextEffMgr::ReleaseGeometry(v1);
  TextEffMgr::ReleaseController(v1);
  TextEffMgr::RemoveAll(v1);
  v3 = v1->m_spScreenSpaceCamera.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spScreenSpaceCamera.m_pObject = 0;
  }
  v1->m_pkScene = 0;
}

//----- (0069D250) --------------------------------------------------------
void __thiscall TextEffMgr::GeomRes::GeomRes(TextEffMgr::GeomRes *this)
{
  this->m_spGeom.m_pObject = 0;
}

//----- (0069D260) --------------------------------------------------------
void __thiscall NiTPointerList<TextEff__>::_NiTPointerList<TextEff__>(NiTPointerList<TextEff *> *this)
{
  NiTPointerList<TextEff *> *v1; // edi@1
  NiTListItem<TextEff *> *v2; // esi@1
  NiTListItem<TextEff *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
}
// 9C775C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);
// 9C776C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);

//----- (0069D2E0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,TextEff *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<TextEff *> *v3; // esi@1
  NiTListItem<TextEff *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C775C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);
// 9C776C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);

//----- (0069D370) --------------------------------------------------------
void __thiscall PgTList<TextEff__>::_PgTList<TextEff__>(PgTList<TextEff *> *this)
{
  PgTList<TextEff *> *v1; // edi@1
  NiTListItem<TextEff *> *v2; // esi@1
  NiTListItem<TextEff *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&PgTList<TextEff__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
}
// 9C775C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);
// 9C777C: using guessed type int (__thiscall *PgTList_TextEff _____vftable_)(void *p, char);

//----- (0069D3F0) --------------------------------------------------------
void *__thiscall PgTList<TextEff__>::_vector_deleting_destructor_(PgTList<TextEff *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<TextEff *> *v3; // esi@1
  NiTListItem<TextEff *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,TextEff *>Vtbl *)&PgTList<TextEff__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_TextEff__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C775C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__TextEff _____vftable_)(void *p, char);
// 9C777C: using guessed type int (__thiscall *PgTList_TextEff _____vftable_)(void *p, char);

//----- (0069D480) --------------------------------------------------------
void __thiscall CBlindEffect::FastEnd(CBlindEffect *this)
{
  char *v1; // eax@4

  if ( this->m_spBlindScreen.m_pObject && this->m_fFadeMaxTime >= 1.0 && this->m_fFullCurTime >= 1.0 )
  {
    v1 = (char *)&this->m_fFullCurTime;
    if ( this->m_fFadeMaxTime <= (double)this->m_fFullCurTime )
      v1 = (char *)&this->m_fFadeMaxTime;
    this->m_fFullCurTime = *(float *)v1 / this->m_fFadeMaxTime;
    this->m_fFadeMaxTime = this->m_fFadeMaxTime / this->m_fFadeMaxTime;
  }
}

//----- (0069D4D0) --------------------------------------------------------
void __thiscall CBlindEffect::CBlindEffect(CBlindEffect *this)
{
  CBlindEffect *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->m_fFullCurTime = 0.0;
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&CBlindEffect::_vftable_;
  v1->m_fFadeMaxTime = 0.0;
  v1->m_fCurNowTime = 0.0;
  v1->m_spBlindScreen.m_pObject = 0;
  v1->m_spTexture.m_pObject = 0;
  v1->m_fFadeInTime = 0.0;
  v1->m_IsRunBlindEffect = 0;
  v1->m_fMaxLengthTime = 0.0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C779C: using guessed type int (__thiscall *CBlindEffect___vftable_)(void *p, char);

//----- (0069D510) --------------------------------------------------------
bool __thiscall CBlindEffect::Stop(CBlindEffect *this)
{
  CBlindEffect *v1; // esi@1
  NiScreenElements *v2; // edi@1
  bool result; // al@6

  v1 = this;
  v2 = this->m_spBlindScreen.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spBlindScreen.m_pObject = 0;
  }
  v1->m_fCurNowTime = 0.0;
  v1->m_IsRunBlindEffect = 0;
  v1->m_fFadeInTime = 0.0;
  result = 1;
  v1->m_fMaxLengthTime = 0.0;
  return result;
}

//----- (0069D560) --------------------------------------------------------
void __thiscall CBlindEffect::Draw(CBlindEffect *this, NiRenderer *pRender)
{
  CBlindEffect *v2; // edi@1

  v2 = this;
  if ( this->m_spBlindScreen.m_pObject )
  {
    if ( pRender->m_eFrameState == 1 || pRender->m_eOffScreenFrameState == 1 )
    {
      if ( pRender->m_bRenderTargetGroupActive == 1 )
        pRender->baseclass_0.baseclass_0.vfptr[71].__vecDelDtor((NiRefObject *)pRender, 0);
    }
    NiScreenElements::Draw(v2->m_spBlindScreen.m_pObject, pRender);
  }
}

//----- (0069D5B0) --------------------------------------------------------
void __thiscall CBlindEffect::Update(CBlindEffect *this, float fAccolTime)
{
  double v2; // st7@1
  CBlindEffect *v3; // esi@1
  double v4; // st6@2
  float *v5; // ecx@5
  float *v6; // eax@7
  NiScreenElements *v7; // ecx@9
  double v8; // st7@10
  NiScreenElementsData *v9; // ecx@10
  double v10; // st6@10
  float v11; // ST10_4@10
  float v12; // ST0C_4@10
  float v13; // ST08_4@10
  float *v14; // eax@13
  double v15; // st7@15
  NiScreenElements *v16; // eax@15
  NiScreenElements *v17; // edi@16
  NiColorA kCommonValue; // [sp+14h] [bp-28h]@9
  float fLeft; // [sp+24h] [bp-18h]@10
  float fTop; // [sp+28h] [bp-14h]@10
  float fWidth; // [sp+2Ch] [bp-10h]@10
  float fHeight; // [sp+30h] [bp-Ch]@5
  float v23; // [sp+34h] [bp-8h]@5
  float ftime; // [sp+38h] [bp-4h]@5

  v2 = 0.0;
  v3 = this;
  if ( this->m_fFullCurTime <= 0.0 )
  {
    v17 = this->m_spBlindScreen.m_pObject;
    if ( v17 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v17 )
        v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v17,
          1u);
      v2 = 0.0;
      v3->m_spBlindScreen.m_pObject = 0;
    }
    v3->m_fCurNowTime = v2;
    v3->m_IsRunBlindEffect = 0;
    v3->m_fFadeInTime = v2;
    v3->m_fMaxLengthTime = v2;
  }
  else
  {
    v4 = fAccolTime;
    if ( 0.0 == this->m_fCurNowTime )
      this->m_fCurNowTime = fAccolTime;
    this->m_fFullCurTime = this->m_fFullCurTime - (v4 - this->m_fCurNowTime);
    this->m_fCurNowTime = v4;
    if ( this->m_fFullCurTime < (double)this->m_fFadeMaxTime )
    {
      v5 = &v23;
      ftime = (v3->m_fFadeMaxTime - v3->m_fFullCurTime + 1.0) / (v3->m_fFadeMaxTime + 1.0);
      v23 = 0.0;
      fHeight = 1.0;
      if ( ftime >= 0.0 )
        v5 = &ftime;
      v6 = v5;
      if ( *v5 >= 1.0 )
        v6 = &fHeight;
      v7 = v3->m_spBlindScreen.m_pObject;
      kCommonValue.r = 0.0;
      kCommonValue.g = 0.0;
      kCommonValue.b = 0.0;
      kCommonValue.a = *v6;
      NiScreenElementsData::SetColors(
        (NiScreenElementsData *)v7->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
        0,
        &kCommonValue);
      if ( ftime > 0.8799999952316284 )
      {
        fHeight = sqrt(ftime);
        ftime = fHeight;
        NiScreenElementsData::GetRectangle(
          (NiScreenElementsData *)v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
          0,
          &fLeft,
          &fTop,
          &fWidth,
          &fHeight);
        v8 = 0.25 * ftime;
        v9 = (NiScreenElementsData *)v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
        v10 = ftime * 0.550000011920929;
        v23 = fHeight + v8;
        v11 = v23;
        v23 = fWidth + v10;
        v12 = v23;
        v23 = fTop - v8 * 0.5;
        v13 = v23;
        v23 = fLeft - 0.5 * v10;
        NiScreenElementsData::SetRectangle(v9, 0, v23, v13, v12, v11);
      }
      NiAVObject::Update(&v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, fAccolTime, 1);
    }
    if ( v3->m_fFadeInTime < (double)v3->m_fFullCurTime )
    {
      fAccolTime = v3->m_fMaxLengthTime - v3->m_fFullCurTime;
      fAccolTime = sqrt(fAccolTime);
      fAccolTime = 1.0 / (fAccolTime * 10.0);
      fLeft = 0.1;
      v14 = &fLeft;
      if ( fAccolTime >= 0.1000000014901161 )
        v14 = &fAccolTime;
      kCommonValue.r = 0.0;
      kCommonValue.g = 0.0;
      kCommonValue.b = 0.0;
      v15 = *v14;
      v16 = v3->m_spBlindScreen.m_pObject;
      kCommonValue.a = v15;
      NiScreenElementsData::SetColors(
        (NiScreenElementsData *)v16->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
        0,
        &kCommonValue);
    }
  }
}

//----- (0069D7F0) --------------------------------------------------------
void __thiscall CBlindEffect::_CBlindEffect(CBlindEffect *this)
{
  CBlindEffect *v1; // esi@1
  NiScreenElements *v2; // edi@1
  NiDynamicTexture *v3; // edi@6
  NiScreenElements *v4; // edi@10

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&CBlindEffect::_vftable_;
  v2 = this->m_spBlindScreen.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spBlindScreen.m_pObject = 0;
  }
  v1->m_IsRunBlindEffect = 0;
  v1->m_fCurNowTime = 0.0;
  v1->m_fFadeInTime = 0.0;
  v1->m_fMaxLengthTime = 0.0;
  v3 = v1->m_spTexture.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spBlindScreen.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C779C: using guessed type int (__thiscall *CBlindEffect___vftable_)(void *p, char);

//----- (0069D8D0) --------------------------------------------------------
bool __thiscall CBlindEffect::Start(CBlindEffect *this, float fFullTime, float fFadeTime)
{
  CBlindEffect *v3; // esi@1
  void *v4; // edi@1
  int v5; // ebx@1
  void *v6; // eax@2
  NiScreenElementsData *v7; // eax@3
  int v8; // eax@5
  NiScreenElements *v9; // edi@6
  NiScreenElements *v10; // eax@13
  void *v11; // eax@13
  void *v12; // edi@13
  void *v13; // eax@18
  int v14; // edi@18
  char *v15; // eax@25
  void *v16; // eax@25
  const char *v17; // ecx@26
  int v18; // eax@28
  int v19; // edi@28
  bool v20; // cf@32
  NiColorA kCommonValue; // [sp+28h] [bp-44h]@13
  NiPointer<NiRoom> element; // [sp+38h] [bp-34h]@2
  void *v24; // [sp+3Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ProgressBarName; // [sp+40h] [bp-2Ch]@25
  unsigned int v26; // [sp+5Ch] [bp-10h]@1
  int v27; // [sp+68h] [bp-4h]@1
  int v28; // [sp+6Ch] [bp+0h]@1

  v26 = (unsigned int)&v28 ^ __security_cookie;
  v3 = this;
  this->m_fFullCurTime = fFullTime;
  this->m_fFadeMaxTime = fFadeTime;
  this->m_fCurNowTime = 0.0;
  this->m_fFadeInTime = fFullTime / 0.800000011920929;
  this->m_fMaxLengthTime = fFullTime;
  v4 = operator new(0xC4u);
  v24 = v4;
  v5 = 0;
  v27 = 0;
  if ( v4 )
  {
    v6 = operator new(0x70u);
    element.m_pObject = (NiRoom *)v6;
    LOBYTE(v27) = 1;
    if ( v6 )
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v6, 0, 1, 1u, 1, 1, 4, 1, 2, 1);
    else
      v7 = 0;
    LOBYTE(v27) = 0;
    NiScreenElements::NiScreenElements((NiScreenElements *)v4, v7);
    v5 = v8;
  }
  v9 = v3->m_spBlindScreen.m_pObject;
  v27 = -1;
  if ( v9 != (NiScreenElements *)v5 )
  {
    if ( v9
      && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v9,
        1u);
    v3->m_spBlindScreen.m_pObject = (NiScreenElements *)v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)(v5 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  NiScreenElementsData::SetRectangle(
    (NiScreenElementsData *)v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    0.0,
    0.0,
    1.0,
    1.0);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiScreenElementsData::SetTextures(
    (NiScreenElementsData *)v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    0,
    -2.0,
    -0.69999999,
    3.0,
    1.7);
  v10 = v3->m_spBlindScreen.m_pObject;
  kCommonValue.r = 0.0;
  kCommonValue.g = 0.0;
  kCommonValue.b = 0.0;
  kCommonValue.a = 0.1;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v10->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v11 = operator new(0x28u);
  v12 = v11;
  v24 = v11;
  v27 = 2;
  if ( v11 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v11);
    *(_DWORD *)v12 = &NiVertexColorProperty::_vftable_;
    *((_WORD *)v12 + 14) = 0;
    *((_DWORD *)v12 + 8) = 0;
    *((_DWORD *)v12 + 9) = 1;
  }
  else
  {
    v12 = 0;
  }
  *((_DWORD *)v12 + 9) = 0;
  *((_DWORD *)v12 + 8) = 1;
  v24 = v3->m_spBlindScreen.m_pObject;
  element.m_pObject = (NiRoom *)v12;
  InterlockedIncrement((volatile LONG *)v12 + 1);
  v27 = 3;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)((char *)v24 + 156),
    &element);
  v27 = -1;
  if ( !InterlockedDecrement((volatile LONG *)v12 + 1) )
    (**(void (__thiscall ***)(void *, signed int))v12)(v12, 1);
  v13 = operator new(0x20u);
  v14 = (int)v13;
  v24 = v13;
  v27 = 4;
  if ( v13 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v13);
    *(_DWORD *)v14 = &NiAlphaProperty::_vftable_;
    *(_WORD *)(v14 + 28) = 236;
    *(_BYTE *)(v14 + 30) = 0;
  }
  else
  {
    v14 = 0;
  }
  *(_WORD *)(v14 + 28) = *(_WORD *)(v14 + 28) & 0xFECF | 0xCF;
  element.m_pObject = (NiRoom *)v3->m_spBlindScreen.m_pObject;
  v24 = (void *)v14;
  InterlockedIncrement((volatile LONG *)(v14 + 4));
  v27 = 5;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&element.m_pObject->baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v24);
  v27 = -1;
  if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v14)(v14, 1);
  if ( !Folder::m_bInit )
    Folder::Init();
  v15 = Folder::Merge(&Folder::m_acEffect, "BlindEffect.dds");
  ProgressBarName.baseclass_0._Myres = 15;
  ProgressBarName.baseclass_0._Mysize = 0;
  ProgressBarName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&ProgressBarName, v15, strlen(v15));
  v27 = 6;
  v16 = operator new(0x44u);
  v24 = v16;
  LOBYTE(v27) = 7;
  if ( v16 )
  {
    v17 = *(const char **)&ProgressBarName;
    if ( ProgressBarName.baseclass_0._Myres < 0x10 )
      v17 = (const char *)&ProgressBarName;
    NiTexturingProperty::NiTexturingProperty((NiTexturingProperty *)v16, v17);
    v19 = v18;
  }
  else
  {
    v19 = 0;
  }
  LOBYTE(v27) = 6;
  NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)v19, 0);
  NiTexturingProperty::SetBaseFilterMode((NiTexturingProperty *)v19, 0);
  *(_DWORD *)(v19 + 28) = 2;
  element.m_pObject = (NiRoom *)v3->m_spBlindScreen.m_pObject;
  v24 = (void *)v19;
  InterlockedIncrement((volatile LONG *)(v19 + 4));
  LOBYTE(v27) = 8;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&element.m_pObject->baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&v24);
  LOBYTE(v27) = 6;
  if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v19)(v19, 1);
  NiAVObject::UpdateProperties(&v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v3->m_spBlindScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  v20 = ProgressBarName.baseclass_0._Myres < 0x10;
  v3->m_IsRunBlindEffect = 1;
  if ( !v20 )
    operator delete(*(void **)&ProgressBarName);
  return 1;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0069DCC0) --------------------------------------------------------
void *__thiscall CBlindEffect::_vector_deleting_destructor_(CBlindEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CBlindEffect::_CBlindEffect(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0069DCF0) --------------------------------------------------------
void __thiscall CameraEffect::SetColor(CameraEffect *this, char ucR, char ucG, char ucB)
{
  this->m_Color.r = (double)(unsigned __int8)ucR / 255.0;
  this->m_Color.g = (double)(unsigned __int8)ucG / 255.0;
  this->m_Color.b = (double)(unsigned __int8)ucB / 255.0;
}

//----- (0069DD30) --------------------------------------------------------
void __thiscall CameraEffect::SetAngleBoundary(CameraEffect *this, float fAngle, float *pkVar, float fBoundary)
{
  double v4; // st7@2
  double v5; // st6@2
  double v6; // st5@2
  double v7; // st5@5
  double v8; // qt1@5
  double v9; // qt2@6
  double v10; // st5@6
  double v11; // st6@6
  double v12; // qtt@7
  double v13; // st5@7
  double v14; // st7@7
  double v15; // qt0@8
  double v16; // st5@8
  float fAnglea; // [sp+8h] [bp+8h]@5

  if ( pkVar )
  {
    v4 = fAngle;
    v5 = 0.0;
    v6 = fBoundary;
    if ( fAngle >= 0.0 && v6 >= v4 )
    {
      *pkVar = fAngle;
      return;
    }
    while ( 1 )
    {
      v9 = v6;
      v10 = v5;
      v11 = v9;
      if ( v10 <= v4 )
      {
        v15 = v10;
        v16 = v4;
        v14 = v15;
        if ( v16 <= v11 )
        {
          *pkVar = v16;
          return;
        }
        v13 = v16 - v11;
      }
      else
      {
        v12 = v10;
        v13 = v4 + v11;
        v14 = v12;
      }
      fAnglea = v13;
      v7 = v14;
      v4 = fAnglea;
      v8 = v7;
      v6 = v11;
      v5 = v8;
    }
  }
}

//----- (0069DDA0) --------------------------------------------------------
void __thiscall CameraEffect::SetColor(CameraEffect *this, float fR, float fG, float fB)
{
  this->m_Color.r = fR;
  this->m_Color.g = fG;
  this->m_Color.b = fB;
  this->m_Color.a = 0.0;
}

//----- (0069DDE0) --------------------------------------------------------
void __thiscall CameraEffect::SetAngle(CameraEffect *this, float fAngleLR, float fAngleUD)
{
  CameraEffect *v3; // edx@1

  CameraEffect::SetAngleBoundary(this, fAngleLR, &this->m_fAngleLR, 360.0);
  CameraEffect::SetAngleBoundary(v3, fAngleUD, &v3->m_fAngleUD, 90.0);
}

//----- (0069DE20) --------------------------------------------------------
void __thiscall CameraEffect::Stop(CameraEffect *this)
{
  CameraEffect *v1; // esi@1
  NiScreenElements *v2; // edi@1
  int v3; // edi@6
  int v4; // ecx@6
  float v5; // ecx@6
  NiTListItem<unsigned int> *v6; // esi@6
  NiTListItem<unsigned int> *v7; // ST00_4@7

  v1 = this;
  v2 = this->m_spFadeScreen.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spFadeScreen.m_pObject = 0;
  }
  v1->m_bLoop = 0;
  v1->m_fStartTime = 0.0;
  v1->m_eScheduleType = 0;
  v1->m_fFadeTime = 0.0;
  v3 = (int)&v1->m_kListSchedule;
  LODWORD(v1->m_Color.r) = NiColorA::BLACK;
  LODWORD(v1->m_Color.g) = dword_A88D9C;
  LODWORD(v1->m_Color.b) = dword_A88DA0;
  v4 = dword_A88DA4;
  v1->m_fAlphaRange = 1.0;
  LODWORD(v1->m_Color.a) = v4;
  v1->m_bLoop = 0;
  LODWORD(v1->m_MovePos.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_MovePos.y = NiPoint3::ZERO.y;
  v5 = NiPoint3::ZERO.z;
  v1->m_fAngleLR = -1.0;
  v1->m_fAngleUD = -1.0;
  v1->m_MovePos.z = v5;
  v6 = v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v6 )
  {
    v7 = v6;
    v6 = v6->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 8))(v3, v7);
  }
  *(_DWORD *)(v3 + 12) = 0;
  *(_DWORD *)(v3 + 4) = 0;
  *(_DWORD *)(v3 + 8) = 0;
}
// A88D98: using guessed type int NiColorA__BLACK;
// A88D9C: using guessed type int dword_A88D9C;
// A88DA0: using guessed type int dword_A88DA0;
// A88DA4: using guessed type int dword_A88DA4;

//----- (0069DEE0) --------------------------------------------------------
void __thiscall CameraEffect::Draw(CameraEffect *this, NiRenderer *pRender)
{
  CameraEffect *v2; // edi@1
  NiScreenElements *v3; // ecx@6

  v2 = this;
  if ( pRender )
  {
    if ( pRender->m_eFrameState == 1 || pRender->m_eOffScreenFrameState == 1 )
    {
      if ( pRender->m_bRenderTargetGroupActive == 1 )
        pRender->baseclass_0.baseclass_0.vfptr[71].__vecDelDtor((NiRefObject *)pRender, 0);
    }
    v3 = v2->m_spFadeScreen.m_pObject;
    if ( v3 )
      NiScreenElements::Draw(v3, pRender);
  }
}

//----- (0069DF30) --------------------------------------------------------
void __thiscall CameraEffect::UpdateSchedule(CameraEffect *this, float fCurTime, float fAlphaRatio, unsigned int uiSchedule)
{
  double v4; // st7@5
  void *v5; // edx@6
  float *v6; // eax@8
  double v7; // st7@10
  void *v8; // edx@11
  float *v9; // eax@13
  NiScreenElements *v10; // eax@17
  CameraEffect *v11; // [sp+0h] [bp-4h]@1

  v11 = this;
  if ( fAlphaRatio >= 1.0 )
  {
    this->m_eScheduleType = 0;
    return;
  }
  if ( uiSchedule == 2 )
  {
    v8 = &uiSchedule;
    *(float *)&uiSchedule = 0.0;
    *(float *)&v11 = 1.0;
    if ( fAlphaRatio >= 0.0 )
      v8 = &fAlphaRatio;
    v9 = (float *)v8;
    if ( *(float *)v8 >= 1.0 )
      v9 = (float *)&v11;
    v7 = 1.0 - *v9;
  }
  else
  {
    if ( uiSchedule != 3 )
    {
      v4 = 0.0;
      goto LABEL_17;
    }
    v5 = &uiSchedule;
    *(float *)&uiSchedule = 0.0;
    *(float *)&v11 = 1.0;
    if ( fAlphaRatio >= 0.0 )
      v5 = &fAlphaRatio;
    v6 = (float *)v5;
    if ( *(float *)v5 >= 1.0 )
      v6 = (float *)&v11;
    v7 = *v6 + 0.0;
  }
  v4 = v7 * this->m_fAlphaRange;
LABEL_17:
  v10 = this->m_spFadeScreen.m_pObject;
  this->m_Color.a = v4;
  if ( v10 )
    NiScreenElementsData::SetColors(
      (NiScreenElementsData *)v10->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
      0,
      &this->m_Color);
}

//----- (0069DFF0) --------------------------------------------------------
void __thiscall CameraEffect::SetSchedule(CameraEffect *this, unsigned int uiState, unsigned int uiCount)
{
  CameraEffect *v3; // ebx@1
  char *v4; // esi@1
  NiTListItem<unsigned int> *v5; // edi@1
  unsigned int v6; // ecx@1
  NiTListItem<unsigned int> *v7; // ST00_4@2
  unsigned int v8; // edi@4
  unsigned int v9; // eax@4
  int v10; // eax@15
  int v11; // ecx@15
  int v12; // eax@18
  int v13; // ecx@18
  bool v14; // zf@21
  int v15; // eax@22
  int v16; // ecx@22
  unsigned int *v17; // [sp-4h] [bp-10h]@8

  v3 = this;
  v4 = (char *)&this->m_kListSchedule;
  this->m_bLoop = 0;
  v5 = this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v6 = 0;
  if ( v5 )
  {
    do
    {
      v7 = v5;
      v5 = v5->m_pkNext;
      (*(void (__thiscall **)(char *, NiTListItem<unsigned int> *))(*(_DWORD *)v4 + 8))(v4, v7);
    }
    while ( v5 );
    v6 = 0;
  }
  v8 = uiState;
  v9 = uiState - 1;
  *((_DWORD *)v4 + 3) = v6;
  *((_DWORD *)v4 + 1) = v6;
  *((_DWORD *)v4 + 2) = v6;
  v3->m_eScheduleType = v6;
  switch ( v9 )
  {
    case 0u:
      uiState = 3;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      return;
    case 1u:
      uiState = 2;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      uiState = 6;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      return;
    case 2u:
    case 3u:
      uiState = 3;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      if ( v8 == 3 )
      {
        uiState = 4;
        v17 = &uiState;
      }
      else
      {
        if ( v8 != 4 )
          goto LABEL_12;
        uiState = 5;
        v17 = &uiState;
      }
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)v17);
LABEL_12:
      uiState = 2;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      uiState = 6;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      return;
    case 4u:
      if ( uiCount > v6 )
      {
        uiState = uiCount;
        do
        {
          v10 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 4))(v4);
          *(_DWORD *)(v10 + 8) = 3;
          *(_DWORD *)v10 = 0;
          *(_DWORD *)(v10 + 4) = *((_DWORD *)v4 + 2);
          v11 = *((_DWORD *)v4 + 2);
          if ( v11 )
            *(_DWORD *)v11 = v10;
          else
            *((_DWORD *)v4 + 1) = v10;
          ++*((_DWORD *)v4 + 3);
          *((_DWORD *)v4 + 2) = v10;
          v12 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 4))(v4);
          *(_DWORD *)(v12 + 8) = 2;
          *(_DWORD *)v12 = 0;
          *(_DWORD *)(v12 + 4) = *((_DWORD *)v4 + 2);
          v13 = *((_DWORD *)v4 + 2);
          if ( v13 )
            *(_DWORD *)v13 = v12;
          else
            *((_DWORD *)v4 + 1) = v12;
          ++*((_DWORD *)v4 + 3);
          v14 = uiState-- == 1;
          *((_DWORD *)v4 + 2) = v12;
        }
        while ( !v14 );
      }
      v15 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v4 + 4))(v4);
      *(_DWORD *)(v15 + 8) = 6;
      *(_DWORD *)v15 = 0;
      *(_DWORD *)(v15 + 4) = *((_DWORD *)v4 + 2);
      v16 = *((_DWORD *)v4 + 2);
      if ( v16 )
      {
        *(_DWORD *)v16 = v15;
        ++*((_DWORD *)v4 + 3);
        *((_DWORD *)v4 + 2) = v15;
      }
      else
      {
        ++*((_DWORD *)v4 + 3);
        *((_DWORD *)v4 + 1) = v15;
        *((_DWORD *)v4 + 2) = v15;
      }
      return;
    case 5u:
      uiState = 3;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      uiState = 2;
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)v4,
        (NiD3DXEffectParameter *const *)&uiState);
      v3->m_bLoop = 1;
      return;
    default:
      return;
  }
}

//----- (0069E1F0) --------------------------------------------------------
void __thiscall CameraEffect::_CameraEffect(CameraEffect *this)
{
  CameraEffect *v1; // ebx@1
  int v2; // esi@1
  NiTListItem<unsigned int> *v3; // edi@1
  NiTListItem<unsigned int> *v4; // eax@1
  NiTListItem<unsigned int> *v5; // ST00_4@2
  NiScreenElements *v6; // esi@4

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&CameraEffect::_vftable_;
  CameraEffect::Stop(this);
  v2 = (int)&v1->m_kListSchedule;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&PgTList<unsigned_int>::_vftable_;
  v3 = v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = 0;
  if ( v3 )
  {
    do
    {
      v5 = v3;
      v3 = v3->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(&v1->m_kListSchedule, v5);
    }
    while ( v3 );
    v4 = 0;
  }
  *(_DWORD *)&v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v4;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v4;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v4;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_int>::_vftable_;
  v6 = v1->m_spFadeScreen.m_pObject;
  if ( (NiTListItem<unsigned int> *)v6 != v4
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 98BF14: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned int____vftable_)(void *p, char);
// 98BF84: using guessed type int (__thiscall *PgTList_unsigned int____vftable_)(void *p, char);
// 9C77BC: using guessed type int (__thiscall *CameraEffect___vftable_)(void *p, char);

//----- (0069E2C0) --------------------------------------------------------
void __thiscall CameraEffect::ClearMove(CameraEffect *this)
{
  _BYTE v1[12]; // ST00_12@1

  CameraEffect::Stop(this);
  *(_DWORD *)v1 = (_DWORD)NiPoint3::ZERO.x;
  *(_QWORD *)&v1[4] = *(_QWORD *)&NiPoint3::ZERO.y;
  World::SetCameraJumpData(&g_kWorld, *(NiPoint3 *)v1, -1.0, -1.0, 0.0);
}

//----- (0069E310) --------------------------------------------------------
void __thiscall CameraEffect::Update(CameraEffect *this, float fCurTime)
{
  double v2; // st7@1
  CameraEffect *v3; // esi@1
  NiTListItem<unsigned int> *v4; // eax@3
  bool v5; // zf@4
  float v6; // ST0C_4@7
  float v7; // ST0C_4@8
  _BYTE v8[12]; // ST00_12@9
  _BYTE v9[12]; // ST00_12@10
  float AlphaRatio; // [sp+20h] [bp+8h]@6

  v2 = fCurTime;
  v3 = this;
  if ( *(_DWORD *)&this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0]
    && !this->m_eScheduleType )
  {
    v4 = this->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( !v4 )
      return;
    this->m_eScheduleType = v4->m_element;
    NiTPointerListBase<DFALL<AttackSequence__>_AttackSequence__>::Remove(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiLight *> *)&this->m_kListSchedule,
      (NiLight *const *)&this->m_eScheduleType);
    v2 = fCurTime;
    v5 = v3->m_bLoop == 0;
    v3->m_fStartTime = fCurTime;
    if ( !v5 )
    {
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kListSchedule,
        (NiD3DXEffectParameter *const *)&v3->m_eScheduleType);
      v2 = fCurTime;
    }
  }
  AlphaRatio = (v2 - v3->m_fStartTime) / v3->m_fFadeTime;
  switch ( v3->m_eScheduleType )
  {
    case 2u:
      v6 = v2;
      CameraEffect::UpdateSchedule(v3, v6, AlphaRatio, 2u);
      break;
    case 3u:
      v7 = v2;
      CameraEffect::UpdateSchedule(v3, v7, AlphaRatio, 3u);
      break;
    case 4u:
    case 5u:
      *(_DWORD *)v8 = LODWORD(v3->m_MovePos.x);
      *(_QWORD *)&v8[4] = *(_QWORD *)&v3->m_MovePos.y;
      World::SetCameraJumpData(&g_kWorld, *(NiPoint3 *)v8, v3->m_fAngleLR, v3->m_fAngleUD, v3->m_fDist);
      if ( v3->m_eScheduleType == 5 )
      {
        CharMgr::RemoveFarCharWithoutMainChar(&g_kCharMgr);
        *(_DWORD *)v9 = (_DWORD)NiPoint3::ZERO.x;
        *(_QWORD *)&v9[4] = *(_QWORD *)&NiPoint3::ZERO.y;
        World::SetCameraJumpData(&g_kWorld, *(NiPoint3 *)v9, -1.0, -1.0, 0.0);
      }
      v3->m_eScheduleType = 0;
      break;
    case 6u:
      CameraEffect::Stop(v3);
      break;
    default:
      return;
  }
}

//----- (0069E480) --------------------------------------------------------
bool __thiscall CameraEffect::Start(CameraEffect *this, float fStartTime, float fFadeTime, unsigned int uiState, unsigned int uiCount)
{
  CameraEffect *v5; // edi@1
  int v6; // ebx@1
  void *v7; // esi@2
  void *v8; // eax@3
  NiScreenElementsData *v9; // eax@4
  int v10; // eax@6
  NiScreenElements *v11; // esi@7
  NiScreenElements *v12; // eax@14
  void *v14; // eax@16
  void *v15; // esi@16
  void *v16; // eax@20
  void *v17; // esi@20

  v5 = this;
  this->m_fStartTime = fStartTime;
  this->m_fFadeTime = fFadeTime;
  CameraEffect::SetSchedule(this, uiState, uiCount);
  v6 = 0;
  if ( !v5->m_spFadeScreen.m_pObject )
  {
    v7 = operator new(0xC4u);
    if ( v7 )
    {
      v8 = operator new(0x70u);
      if ( v8 )
        NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v8, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      else
        v9 = 0;
      NiScreenElements::NiScreenElements((NiScreenElements *)v7, v9);
      v6 = v10;
    }
    v11 = v5->m_spFadeScreen.m_pObject;
    if ( v11 != (NiScreenElements *)v6 )
    {
      if ( v11
        && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v11,
          1u);
      v5->m_spFadeScreen.m_pObject = (NiScreenElements *)v6;
      if ( v6 )
        InterlockedIncrement((volatile LONG *)(v6 + 4));
    }
    v12 = v5->m_spFadeScreen.m_pObject;
    if ( !v12
      || ((NiScreenElementsData::Insert(
             (NiScreenElementsData *)v12->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
             4u,
             0,
             0),
           NiScreenElementsData::SetRectangle(
             (NiScreenElementsData *)v5->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
             0,
             0.0,
             0.0,
             1.0,
             1.0),
           NiScreenElementsData::UpdateBound((NiScreenElementsData *)v5->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject),
           v14 = operator new(0x28u),
           (v15 = v14) == 0) ? (v15 = 0) : (NiObjectNET::NiObjectNET((NiObjectNET *)v14),
                                            *(_DWORD *)v15 = &NiVertexColorProperty::_vftable_,
                                            *((_WORD *)v15 + 14) = 0,
                                            *((_DWORD *)v15 + 8) = 0,
                                            *((_DWORD *)v15 + 9) = 1),
          !v15
       || ((*((_DWORD *)v15 + 8) = 1,
            *((_DWORD *)v15 + 9) = 0,
            NiAVObject::AttachProperty(
              &v5->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
              (NiProperty *)v15),
            v16 = operator new(0x20u),
            (v17 = v16) == 0) ? (v17 = 0) : (NiObjectNET::NiObjectNET((NiObjectNET *)v16),
                                             *(_DWORD *)v17 = &NiAlphaProperty::_vftable_,
                                             *((_WORD *)v17 + 14) = 236,
                                             *((_BYTE *)v17 + 30) = 0),
           !v17)) )
      return 0;
    *((_WORD *)v17 + 14) = *((_WORD *)v17 + 14) & 0xFEED | 0xED;
    NiAVObject::AttachProperty(
      &v5->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      (NiProperty *)v17);
    NiAVObject::UpdateProperties(&v5->m_spFadeScreen.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
  return 1;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (0069E6B0) --------------------------------------------------------
void __thiscall CameraEffect::CameraEffect(CameraEffect *this)
{
  CameraEffect *v1; // esi@1
  int v2; // eax@1
  float v3; // eax@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&CameraEffect::_vftable_;
  v1->m_spFadeScreen.m_pObject = 0;
  v1->m_fStartTime = 0.0;
  v1->m_fFadeTime = 0.0;
  LODWORD(v1->m_Color.r) = NiColorA::BLACK;
  LODWORD(v1->m_Color.g) = dword_A88D9C;
  LODWORD(v1->m_Color.b) = dword_A88DA0;
  v2 = dword_A88DA4;
  v1->m_fAlphaRange = 1.0;
  LODWORD(v1->m_Color.a) = v2;
  v1->m_bLoop = 0;
  LODWORD(v1->m_MovePos.x) = (_DWORD)NiPoint3::ZERO.x;
  v1->m_MovePos.y = NiPoint3::ZERO.y;
  v3 = NiPoint3::ZERO.z;
  v1->m_fAngleLR = -1.0;
  v1->m_fAngleUD = -1.0;
  v1->m_MovePos.z = v3;
  v1->m_eScheduleType = 0;
  v1->m_pkCameraCtrl = 0;
  v1->m_fDist = 0.0;
  *(_DWORD *)&v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kListSchedule.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned int>Vtbl *)&PgTList<unsigned_int>::_vftable_;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 98BF84: using guessed type int (__thiscall *PgTList_unsigned int____vftable_)(void *p, char);
// 9C77BC: using guessed type int (__thiscall *CameraEffect___vftable_)(void *p, char);
// A88D98: using guessed type int NiColorA__BLACK;
// A88D9C: using guessed type int dword_A88D9C;
// A88DA0: using guessed type int dword_A88DA0;
// A88DA4: using guessed type int dword_A88DA4;

//----- (0069E750) --------------------------------------------------------
void *__thiscall CameraEffect::_scalar_deleting_destructor_(CameraEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  CameraEffect::_CameraEffect(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0069E780) --------------------------------------------------------
unsigned __int16 __thiscall ClientEffect::GetTargetChar(ClientEffect *this)
{
  return this->m_kTargetCharHandle;
}

//----- (0069E790) --------------------------------------------------------
void __thiscall ClientEffect::SetTargetChar(ClientEffect *this, unsigned __int16 kHandle)
{
  ClientEffect *v2; // esi@1
  Char *v3; // eax@1
  NiRefObjectVtbl *v4; // edi@2
  int v5; // eax@2

  v2 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, this->m_kTargetCharHandle);
  if ( v3 )
  {
    v4 = v2->baseclass_0.baseclass_0.vfptr;
    v5 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[6].Deaffect)(v3);
    v4[7].__vecDelDtor((NiRefObject *)v2, v5);
    v2->m_kTargetCharHandle = kHandle;
  }
  else
  {
    v2->m_kTargetCharHandle = kHandle;
  }
}

//----- (0069E7F0) --------------------------------------------------------
void __thiscall ClientEffect::SetTargetPos(ClientEffect *this, NiPoint3 kPos)
{
  ClientEffect *v2; // esi@1
  float v3; // ecx@1
  float v4; // edx@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor)(&kPos);
  v3 = kPos.y;
  v4 = kPos.z;
  LODWORD(v2->m_kTargetPos.x) = (_DWORD)kPos.x;
  v2->m_kTargetPos.y = v3;
  v2->m_kTargetPos.z = v4;
}

//----- (0069E830) --------------------------------------------------------
void __thiscall ClientEffect::SetOffsetPos(ClientEffect *this, NiPoint3 kPos)
{
  LODWORD(this->m_kOffSet.x) = (_DWORD)kPos.x;
  this->m_kOffSet.y = kPos.y;
  this->m_kOffSet.z = kPos.z;
}

//----- (0069E860) --------------------------------------------------------
void __thiscall ClientEffect::_ClientEffect(ClientEffect *this)
{
  Effect *v1; // esi@1

  v1 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClientEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ClientEffect::_vftable_;
  EffectMgr::RemoveClientEff(&g_kEffectMgr, &this->baseclass_0);
  Effect::_Effect(v1);
}
// 9C77C4: using guessed type int (__stdcall *ClientEffect___vftable_[3])(int);
// 9C77DC: using guessed type int (__thiscall *ClientEffect___vftable_)(void *p, char);

//----- (0069E8D0) --------------------------------------------------------
void __thiscall ClientEffect::Stop(ClientEffect *this)
{
  this->baseclass_0.m_bStopFlag = 1;
}

//----- (0069E8E0) --------------------------------------------------------
bool __thiscall ClientEffect::LengthOfView(ClientEffect *this)
{
  ClientEffect *v1; // esi@1
  int v2; // eax@1
  float v3; // ST10_4@1
  float v4; // ST14_4@1
  float v5; // ST18_4@1
  NiPoint3 *v6; // eax@1
  float v7; // ST04_4@1
  float v8; // ST08_4@1
  float v9; // ST0C_4@1
  float v10; // ST2C_4@1
  float v11; // ST2C_4@1
  Char *v12; // esi@1
  Char *v13; // ecx@2
  double v14; // st7@4
  float v15; // ST2C_4@7
  float fLengthToMainChar; // [sp+28h] [bp-8h]@1

  v1 = this;
  v2 = ((int (*)(void))this->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)();
  LODWORD(v3) = *(_DWORD *)v2;
  LODWORD(v4) = *(_DWORD *)(v2 + 4);
  LODWORD(v5) = *(_DWORD *)(v2 + 8);
  v6 = World::GetCameraLookAtPos(&g_kWorld);
  v7 = v6->x - v3;
  v8 = v6->y - v4;
  v9 = v6->z - v5;
  v10 = v8 * v8 + v7 * v7 + v9 * v9;
  v11 = sqrt(v10);
  v12 = v1->baseclass_0.m_pkCaster;
  fLengthToMainChar = v11;
  if ( v12 )
  {
    v13 = v12;
  }
  else
  {
    v13 = g_pkMainChar;
    v12 = g_pkMainChar;
  }
  if ( Char::IsNPC(v13) )
    v14 = v12->m_fMaxViewLength + 500.0;
  else
    v14 = v12->m_fMaxViewLength;
  v15 = v14;
  return fLengthToMainChar <= (double)v15;
}

//----- (0069E9C0) --------------------------------------------------------
void __thiscall ClientEffect::ClientEffect(ClientEffect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster)
{
  ClientEffect *v4; // esi@1

  v4 = this;
  Effect::Effect(&this->baseclass_0, pkNode, bCreateProgramEff, pkCaster);
  v4->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClientEffect::_vftable_;
  v4->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ClientEffect::_vftable_;
  v4->m_kTargetCharHandle = -1;
  v4->m_kTargetPos.x = 0.0;
  v4->m_kTargetPos.y = 0.0;
  v4->m_kTargetPos.z = 0.0;
  v4->m_kOffSet.x = 0.0;
  v4->m_kOffSet.y = 0.0;
  v4->m_kOffSet.z = 0.0;
}
// 9C77C4: using guessed type int (__stdcall *ClientEffect___vftable_[3])(int);
// 9C77DC: using guessed type int (__thiscall *ClientEffect___vftable_)(void *p, char);

//----- (0069EA20) --------------------------------------------------------
void __thiscall ClientEffect::Update(ClientEffect *this, float fTime)
{
  int v2; // edi@0
  int v3; // esi@0
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  ClientEffect *v6; // esi@1
  NiRefObjectVtbl *v7; // edi@1
  bool v8; // al@1
  Char *v9; // eax@1
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // edx@2
  NiPoint3 kPos; // [sp+Ch] [bp-Ch]@1

  v4 = v3;
  v5 = v2;
  v6 = this;
  Effect::Update(&this->baseclass_0, fTime);
  v7 = v6->baseclass_0.baseclass_0.vfptr;
  v8 = ClientEffect::LengthOfView(v6);
  ((void (__thiscall *)(ClientEffect *, _DWORD, int, int, _DWORD))v7[21].__vecDelDtor)(v6, v8, v5, v4, (_DWORD)kPos.x);
  v9 = CharMgr::GetChar(&g_kCharMgr, v6->m_kTargetCharHandle);
  if ( v9 )
  {
    Char::GetHeightPos(v9, &kPos);
    v10 = v6->baseclass_0.baseclass_0.vfptr[7].__vecDelDtor;
    LODWORD(kPos.x) = &kPos;
    kPos.y = v6->m_kOffSet.y + kPos.y;
    kPos.z = v6->m_kOffSet.z + kPos.z;
    v10(&v6->baseclass_0.baseclass_0, (unsigned int)&kPos);
  }
}
// 69EA20: could not find valid save-restore pair for edi
// 69EA20: could not find valid save-restore pair for esi

//----- (0069EAB0) --------------------------------------------------------
void *__thiscall ClientEffect::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return ClientEffect::_vector_deleting_destructor_((ClientEffect *)((char *)this - 8), a2);
}

//----- (0069EAC0) --------------------------------------------------------
void *__thiscall ClientEffect::_vector_deleting_destructor_(ClientEffect *this, unsigned int a2)
{
  Effect *v2; // esi@1

  v2 = (Effect *)this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ClientEffect::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)ClientEffect::_vftable_;
  EffectMgr::RemoveClientEff(&g_kEffectMgr, &this->baseclass_0);
  Effect::_Effect(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C77C4: using guessed type int (__stdcall *ClientEffect___vftable_[3])(int);
// 9C77DC: using guessed type int (__thiscall *ClientEffect___vftable_)(void *p, char);

//----- (0069EB40) --------------------------------------------------------
void __thiscall LookAtEffect::_LookAtEffect(LookAtEffect *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LookAtEffect::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)LookAtEffect::_vftable_;
  ClientEffect::_ClientEffect(&this->baseclass_0);
}
// 9C7844: using guessed type int (__stdcall *LookAtEffect___vftable_[3])(int);
// 9C785C: using guessed type int (__thiscall *LookAtEffect___vftable_)(void *p, char);

//----- (0069EB60) --------------------------------------------------------
void __thiscall LookAtEffect::LookAtEffect(LookAtEffect *this, NiNode *pkNode, bool bCreateProgramEff, Char *pkCaster)
{
  LookAtEffect *v4; // esi@1

  v4 = this;
  ClientEffect::ClientEffect(&this->baseclass_0, pkNode, bCreateProgramEff, pkCaster);
  v4->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LookAtEffect::_vftable_;
  v4->baseclass_0.baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)LookAtEffect::_vftable_;
}
// 9C7844: using guessed type int (__stdcall *LookAtEffect___vftable_[3])(int);
// 9C785C: using guessed type int (__thiscall *LookAtEffect___vftable_)(void *p, char);

//----- (0069EB90) --------------------------------------------------------
void __thiscall LookAtEffect::CalcDir(LookAtEffect *this)
{
  LookAtEffect *v1; // esi@1
  int v2; // eax@1
  double v3; // st7@1
  NiPoint3 kEffDir; // [sp+4h] [bp-18h]@1
  float v5; // [sp+10h] [bp-Ch]@1
  float v6; // [sp+14h] [bp-8h]@1
  float v7; // [sp+18h] [bp-4h]@1

  v1 = this;
  v2 = ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.vfptr[8].__vecDelDtor)();
  v5 = v1->m_kLookAtPos.x - *(float *)v2;
  v6 = v1->m_kLookAtPos.y - *(float *)(v2 + 4);
  v3 = v1->m_kLookAtPos.z - *(float *)(v2 + 8);
  kEffDir.y = v6;
  v7 = v3;
  kEffDir.x = v5;
  kEffDir.z = v7;
  NiPoint3::Unitize(&kEffDir);
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr[10].__vecDelDtor((NiRefObject *)v1, (unsigned int)&kEffDir);
}

//----- (0069EC00) --------------------------------------------------------
void __thiscall LookAtEffect::Update(LookAtEffect *this, float fTime)
{
  ClientEffect *v2; // esi@1

  v2 = (ClientEffect *)this;
  LookAtEffect::CalcDir(this);
  ClientEffect::Update(v2, fTime);
}

//----- (0069EC20) --------------------------------------------------------
void __thiscall LookAtEffect::Start(LookAtEffect *this, float fTime)
{
  Effect *v2; // esi@1

  v2 = (Effect *)this;
  LookAtEffect::CalcDir(this);
  Effect::Start(v2, fTime);
}

//----- (0069EC40) --------------------------------------------------------
void *__thiscall LookAtEffect::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return LookAtEffect::_scalar_deleting_destructor_((LookAtEffect *)((char *)this - 8), a2);
}

//----- (0069EC50) --------------------------------------------------------
void *__thiscall LookAtEffect::_scalar_deleting_destructor_(LookAtEffect *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&LookAtEffect::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IEffectDestroyMessengerVtbl *)LookAtEffect::_vftable_;
  ClientEffect::_ClientEffect(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C7844: using guessed type int (__stdcall *LookAtEffect___vftable_[3])(int);
// 9C785C: using guessed type int (__thiscall *LookAtEffect___vftable_)(void *p, char);

//----- (0069EC80) --------------------------------------------------------
float __cdecl SoundGroup::GetMasterGain()
{
  double v0; // st7@1
  float result; // st7@2

  v0 = SoundGroup::ms_fMasterGain;
  LODWORD(result) = LODWORD(v0);
  return result;
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (0069EC90) --------------------------------------------------------
void __thiscall SoundGroup::SetMaxRange(SoundGroup *this, float fMax)
{
  this->m_fSoundMaxRange = fMax;
}

//----- (0069ECA0) --------------------------------------------------------
void __thiscall SoundGroup::SetTableSize(SoundGroup *this, unsigned int dwTableSize)
{
  SoundGroup *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  v3 = operator new__(4 * dwTableSize);
  v2->m_ppcTable = (char **)v3;
  memset((char *)v3, 0, 4 * dwTableSize);
  v2->m_dwTableSize = dwTableSize;
}

//----- (0069ECF0) --------------------------------------------------------
void __thiscall SoundGroup::SetTable(SoundGroup *this, unsigned int dwIndex, char *acFn)
{
  SoundGroup *v3; // edi@1
  char **v4; // eax@1
  char *v5; // eax@5
  char v6; // cl@6
  char *v7; // edx@7
  char *v8; // ecx@7
  char v9; // al@8

  v3 = this;
  v4 = this->m_ppcTable;
  if ( v4 && dwIndex < this->m_dwTableSize )
  {
    if ( v4[dwIndex] )
    {
      operator delete__(v4[dwIndex]);
      v3->m_ppcTable[dwIndex] = 0;
    }
    v5 = acFn;
    do
      v6 = *v5++;
    while ( v6 );
    v3->m_ppcTable[dwIndex] = (char *)operator new__(v5 - (acFn + 1) + 1);
    v7 = v3->m_ppcTable[dwIndex];
    v8 = acFn;
    do
    {
      v9 = *v8;
      *v7++ = *v8++;
    }
    while ( v9 );
  }
}

//----- (0069ED70) --------------------------------------------------------
bool __thiscall SoundGroup::SetChannelCount(SoundGroup *this, SoundMgr *rkMgr, unsigned int dwChannelCount)
{
  SoundGroup *v3; // esi@1
  unsigned int v4; // eax@1

  v3 = this;
  SoundMgr::ReleaseChannel(rkMgr, this->m_dwOccupyingChannelCount);
  v4 = SoundMgr::AllocateChannel(rkMgr, dwChannelCount);
  v3->m_dwOccupyingChannelCount = v4;
  return v4 == dwChannelCount;
}

//----- (0069EDB0) --------------------------------------------------------
bool __thiscall SoundGroup::Initialize(SoundGroup *this, SoundMgr *rkMgr, unsigned int dwChannelCount)
{
  SoundGroup *v3; // esi@1
  NiAudioSystem *v4; // eax@1
  bool result; // al@2
  unsigned int v6; // eax@3

  v3 = this;
  v4 = NiAudioSystem::GetAudioSystem();
  v3->m_pkAudioSystem = (NiMilesAudioSystem *)v4;
  if ( v4 )
  {
    SoundMgr::ReleaseChannel(rkMgr, v3->m_dwOccupyingChannelCount);
    v6 = SoundMgr::AllocateChannel(rkMgr, dwChannelCount);
    v3->m_dwOccupyingChannelCount = v6;
    result = v6 == dwChannelCount;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0069EE00) --------------------------------------------------------
char *__thiscall SoundGroup::GetFilenameFrom(SoundGroup *this, SoundIndex *rkIndex)
{
  char *result; // eax@1
  char **v3; // edx@2

  result = rkIndex->m_acFilename;
  if ( !result )
  {
    v3 = this->m_ppcTable;
    if ( v3 && rkIndex->m_dwIndex < this->m_dwTableSize )
      result = v3[rkIndex->m_dwIndex];
    else
      result = 0;
  }
  return result;
}

//----- (0069EE30) --------------------------------------------------------
void __thiscall SoundGroup::Terminate(SoundGroup *this)
{
  SoundGroup *v1; // esi@1
  unsigned int v2; // edi@2

  v1 = this;
  if ( this->m_ppcTable )
  {
    v2 = 0;
    if ( this->m_dwTableSize )
    {
      do
        operator delete__(v1->m_ppcTable[v2++]);
      while ( v2 < v1->m_dwTableSize );
    }
  }
  operator delete__(v1->m_ppcTable);
  v1->m_ppcTable = 0;
  v1->m_dwTableSize = 0;
}

//----- (0069EE80) --------------------------------------------------------
void __thiscall SoundGroup::SetEnable(SoundGroup *this, bool bEnable)
{
  this->m_bEnable = bEnable;
}

//----- (0069EE90) --------------------------------------------------------
void __thiscall SoundGroup::GetSoundMinMax(SoundGroup *this, float *fMin, float *fMax)
{
  if ( fMin )
  {
    if ( fMax )
    {
      *fMin = this->m_fSoundMin;
      *fMax = SoundGroup::ms_fSoundMax;
    }
  }
}
// A81B00: using guessed type float SoundGroup__ms_fSoundMax;

//----- (0069EEC0) --------------------------------------------------------
NiTList<NiAudioSource *> *__thiscall SoundGroupDynamic::GetPlayingSourceList(SoundGroupDynamic *this)
{
  return &this->baseclass_0.m_kPlayingSourceList;
}

//----- (0069EED0) --------------------------------------------------------
void __thiscall SoundGroupDynamic::Terminate(SoundGroupDynamic *this)
{
  SoundGroupDynamic *v1; // esi@1

  v1 = this;
  SoundGroup::Terminate(&this->baseclass_0);
  v1->baseclass_0.vfptr->UnloadAllSound((SoundGroup *)v1);
}

//----- (0069EEF0) --------------------------------------------------------
void __cdecl SoundGroup::SetMasterGain(float fVolume)
{
  NiTListItem<NiD3DShaderInterface *> *v1; // esi@1
  NiD3DShaderInterface *v2; // ecx@2

  v1 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
  SoundGroup::ms_fMasterGain = fVolume;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead )
  {
    do
    {
      v2 = v1->m_element;
      v1 = v1->m_pkNext;
      ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.vfptr[10].__vecDelDtor)(*(float *)&v2[1].baseclass_0.baseclass_0.m_uiRefCount);
    }
    while ( v1 );
  }
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (0069EF30) --------------------------------------------------------
int __cdecl SoundGroup::StopAllSoundWholeGroup()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // esi@1
  int (*v1)(void); // edx@2
  int result; // eax@2

  v0 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = (int (*)(void))v0->m_element->baseclass_0.baseclass_0.vfptr[9].__vecDelDtor;
      v0 = v0->m_pkNext;
      result = v1();
    }
    while ( v0 );
  }
  return result;
}

//----- (0069EF60) --------------------------------------------------------
void __cdecl SoundGroup::UpdateWholeGroup(float fTime)
{
  NiTListItem<NiD3DShaderInterface *> *v1; // esi@1
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@2

  v1 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead )
  {
    do
    {
      v2 = v1->m_element->baseclass_0.baseclass_0.vfptr[11].__vecDelDtor;
      v1 = v1->m_pkNext;
      ((void (__stdcall *)(_DWORD))v2)(LODWORD(fTime));
    }
    while ( v1 );
  }
}

//----- (0069EF90) --------------------------------------------------------
void __cdecl SoundGroup::TerminateWholeGroup()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // eax@2
  NiTListItem<NiD3DShaderInterface *> *v1; // ecx@2
  NiD3DShaderInterface *v2; // esi@5

  while ( *(_DWORD *)&SoundGroup::ms_kSoundGroupList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v0 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
    v1 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead->m_pkNext;
    SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead = v1;
    if ( v1 )
      v1->m_pkPrev = 0;
    else
      SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkTail = 0;
    v2 = v0->m_element;
    SoundGroup::ms_kSoundGroupList.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&SoundGroup::ms_kSoundGroupList,
      v0);
    --*(_DWORD *)&SoundGroup::ms_kSoundGroupList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( v2 )
      v2->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v2, 1u);
  }
}

//----- (0069EFF0) --------------------------------------------------------
void __cdecl SoundGroup::SetEnableWholeGroup(bool bEnable)
{
  NiTListItem<NiD3DShaderInterface *> *v1; // esi@1
  void *(__thiscall *v2)(NiRefObject *, unsigned int); // edx@2

  v1 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead )
  {
    do
    {
      v2 = v1->m_element->baseclass_0.baseclass_0.vfptr[17].__vecDelDtor;
      v1 = v1->m_pkNext;
      ((void (__stdcall *)(_DWORD))v2)(bEnable);
    }
    while ( v1 );
  }
}

//----- (0069F020) --------------------------------------------------------
int __cdecl SoundGroup::UnloadAllSoundWholeGroup()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // esi@1
  int (*v1)(void); // edx@2
  int result; // eax@2

  v0 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = (int (*)(void))v0->m_element->baseclass_0.baseclass_0.vfptr[15].__vecDelDtor;
      v0 = v0->m_pkNext;
      result = v1();
    }
    while ( v0 );
  }
  return result;
}

//----- (0069F050) --------------------------------------------------------
int __cdecl SoundGroup::DetachAllSoundWholeGroup()
{
  NiTListItem<NiD3DShaderInterface *> *v0; // esi@1
  int (*v1)(void); // edx@2
  int result; // eax@2

  v0 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = (int (*)(void))v0->m_element->baseclass_0.baseclass_0.vfptr[16].__vecDelDtor;
      v0 = v0->m_pkNext;
      result = v1();
    }
    while ( v0 );
  }
  return result;
}

//----- (0069F080) --------------------------------------------------------
bool __thiscall SoundGroup::IsChannelFull(SoundGroup *this)
{
  return *(_DWORD *)&this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] >= this->m_dwOccupyingChannelCount;
}

//----- (0069F090) --------------------------------------------------------
bool __thiscall SoundGroup::IsOutofMaxRange(SoundGroup *this, NiPoint3 *rkPoint)
{
  double v2; // st7@1
  NiMilesAudioSystem *v3; // ecx@1
  float v4; // ST18_4@2
  NiMilesListener *v5; // eax@2
  float v6; // ST00_4@2
  float v7; // ST04_4@2
  float v8; // ST08_4@2
  bool result; // al@3
  float rkPointa; // [sp+24h] [bp+8h]@2

  v2 = this->m_fSoundMaxRange;
  v3 = this->m_pkAudioSystem;
  if ( v3 )
  {
    v5 = NiMilesAudioSystem::GetListener(v3);
    v6 = v5->baseclass_0.baseclass_0.m_kWorld.m_Translate.x - rkPoint->x;
    v7 = v5->baseclass_0.baseclass_0.m_kWorld.m_Translate.y - rkPoint->y;
    v8 = v5->baseclass_0.baseclass_0.m_kWorld.m_Translate.z - rkPoint->z;
    rkPointa = v6 * v6 + v7 * v7 + v8 * v8;
    v4 = v2 * v2;
    result = v4 < (double)rkPointa;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0069F130) --------------------------------------------------------
bool __thiscall SoundGroup::IsOutofMaxRange(SoundGroup *this, NiAVObject *pkObj)
{
  bool result; // al@2

  if ( pkObj )
    result = SoundGroup::IsOutofMaxRange(this, &pkObj->m_kWorld.m_Translate);
  else
    result = 0;
  return result;
}

//----- (0069F150) --------------------------------------------------------
bool __thiscall SoundGroup::LoadSound(SoundGroup *this, NiAudioSource *pkSource, char *pcFilename, bool bStreamed)
{
  SoundGroup *v4; // ebx@1
  bool result; // al@3
  float v6; // ST1C_4@4
  char acFileName[256]; // [sp+1Ch] [bp-104h]@3
  unsigned int v8; // [sp+11Ch] [bp-4h]@1
  int v9; // [sp+120h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v4 = this;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  pkSource->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor(
    (NiRefObject *)pkSource,
    (unsigned int)acFileName);
  pkSource->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[32].__vecDelDtor((NiRefObject *)pkSource, bStreamed);
  result = ((int (__thiscall *)(NiAudioSource *))pkSource->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(pkSource);
  if ( result )
  {
    v6 = v4->m_fGain * SoundGroup::ms_fMasterGain;
    pkSource->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor(
      (NiRefObject *)pkSource,
      LODWORD(v6));
    result = 1;
  }
  return result;
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0069F220) --------------------------------------------------------
void __thiscall SoundGroup::SetGain(SoundGroup *this, float fVolume)
{
  NiTListItem<NiAudioSource *> *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@2
  float v4; // ST08_4@2

  v2 = this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  this->m_fGain = fVolume;
  while ( v2 )
  {
    v3 = v2->m_element->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor;
    v2 = v2->m_pkNext;
    v4 = SoundGroup::ms_fMasterGain * fVolume;
    ((void (__stdcall *)(_DWORD))v3)(LODWORD(v4));
  }
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (0069F270) --------------------------------------------------------
NiPointer<NiAudioSource> *__thiscall SoundGroup::CreateSource(SoundGroup *this, NiPointer<NiAudioSource> *result, unsigned int uiType)
{
  SoundGroup *v3; // esi@1
  NiPointer<NiAudioSource> *v4; // eax@2
  NiMilesAudioSystem *v5; // ecx@3
  int v6; // eax@5

  v3 = this;
  if ( this->m_bEnable && (v5 = this->m_pkAudioSystem) != 0 && NiMilesAudioSystem::GetDefaultProvider(v5) )
  {
    v6 = ((int (__stdcall *)(_DWORD))v3->m_pkAudioSystem->baseclass_0.baseclass_0.baseclass_0.vfptr[17].__vecDelDtor)(uiType);
    result->m_pObject = (NiAudioSource *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)(v6 + 4));
    v4 = result;
  }
  else
  {
    v4 = result;
    result->m_pObject = 0;
  }
  return v4;
}

//----- (0069F2D0) --------------------------------------------------------
void __thiscall SoundGroup::ClearSource(SoundGroup *this, NiAudioSource *pkSource)
{
  NiAudioSource *v2; // esi@1
  NiNode *v3; // ecx@2
  NiAudioSource *v4; // edi@4

  v2 = pkSource;
  if ( pkSource )
  {
    v3 = pkSource->baseclass_0.m_pkParent;
    if ( v3 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &pkSource,
        pkSource);
      if ( pkSource )
      {
        v4 = pkSource;
        if ( !InterlockedDecrement((volatile LONG *)&pkSource->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v4 )
            v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        }
      }
    }
    ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)(v2);
  }
}

//----- (0069F330) --------------------------------------------------------
void __thiscall SoundGroup::StopAllSound(SoundGroup *this)
{
  NiTListItem<NiAudioSource *> *v1; // esi@1
  void (*v2)(void); // edx@2

  v1 = this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  while ( v1 )
  {
    v2 = (void (*)(void))v1->m_element->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor;
    v1 = v1->m_pkNext;
    v2();
  }
}

//----- (0069F350) --------------------------------------------------------
bool __thiscall SoundGroup::Check3DSoundPlayable(SoundGroup *this, NiPoint3 *rkPoint)
{
  bool result; // al@2

  if ( *(_DWORD *)&this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] < this->m_dwOccupyingChannelCount )
    result = SoundGroup::IsOutofMaxRange(this, rkPoint) == 0;
  else
    result = 0;
  return result;
}

//----- (0069F380) --------------------------------------------------------
bool __thiscall SoundGroup::Check3DSoundPlayable(SoundGroup *this, NiAVObject *pkObj)
{
  bool result; // al@2

  if ( pkObj )
    result = ((int (__stdcall *)(_DWORD))this->vfptr->Check3DSoundPlayable)(&pkObj->m_kWorld.m_Translate);
  else
    result = 0;
  return result;
}

//----- (0069F3B0) --------------------------------------------------------
void __thiscall SoundGroup::SetMinDistance(SoundGroup *this, float fMinDist)
{
  NiTListItem<NiAudioSource *> *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@2

  v2 = this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  this->m_fSoundMin = fMinDist;
  while ( v2 )
  {
    v3 = v2->m_element->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor;
    v2 = v2->m_pkNext;
    ((void (__stdcall *)(_DWORD, _DWORD))v3)(LODWORD(fMinDist), LODWORD(SoundGroup::ms_fSoundMax));
  }
}
// A81B00: using guessed type float SoundGroup__ms_fSoundMax;

//----- (0069F3F0) --------------------------------------------------------
void __thiscall SoundGroup::SetMaxDistance(SoundGroup *this, float fMaxDist)
{
  SoundGroup *v2; // edi@1
  NiTListItem<NiAudioSource *> *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@2

  v2 = this;
  v3 = this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  this->m_fSoundMax = fMaxDist;
  while ( v3 )
  {
    v4 = v3->m_element->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor;
    v3 = v3->m_pkNext;
    ((void (__stdcall *)(_DWORD, _DWORD))v4)(v2->m_fSoundMin, v2->m_fSoundMax);
  }
}

//----- (0069F430) --------------------------------------------------------
bool __thiscall SoundGroupStatic::IsUniqueSource(SoundGroupStatic *this, NiMilesSource *pkSource)
{
  SoundGroupStatic *v2; // edi@1
  unsigned int v4; // esi@3
  NiMilesSource *v5; // ebx@4
  NiMilesSource *v6; // ecx@5
  void *v7; // ST0C_4@7

  v2 = this;
  if ( !this->m_pspSourceTable )
    return 0;
  v4 = 0;
  if ( !this->baseclass_0.m_dwTableSize )
    return 1;
  v5 = pkSource;
  while ( 1 )
  {
    v6 = (NiMilesSource *)v2->m_pspSourceTable[v4].m_pObject;
    if ( !v6 || v6 == v5 )
      goto LABEL_9;
    v7 = NiMilesSource::GetFileImage(v6);
    if ( v7 == NiMilesSource::GetFileImage(v5) )
      return 0;
    v5 = pkSource;
LABEL_9:
    ++v4;
    if ( v4 >= v2->baseclass_0.m_dwTableSize )
      return 1;
  }
}

//----- (0069F4A0) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupStatic::GetSoundDirectly(SoundGroupStatic *this, unsigned int dwSoundIndex)
{
  NiPointer<NiAudioSource> *v2; // eax@1
  NiAudioSource *result; // eax@2

  v2 = this->m_pspSourceTable;
  if ( v2 && dwSoundIndex < this->baseclass_0.m_dwTableSize )
    result = v2[dwSoundIndex].m_pObject;
  else
    result = 0;
  return result;
}

//----- (0069F4C0) --------------------------------------------------------
void __thiscall SoundGroupStatic::StopSound(SoundGroupStatic *this, SoundIndex *rkIndex)
{
  NiPointer<NiAudioSource> *v2; // edx@2
  NiAudioSource *v3; // ecx@4

  if ( !rkIndex->m_acFilename )
  {
    v2 = this->m_pspSourceTable;
    if ( v2 )
    {
      if ( rkIndex->m_dwIndex < this->baseclass_0.m_dwTableSize )
      {
        v3 = v2[rkIndex->m_dwIndex].m_pObject;
        if ( v3 )
          ((void (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)();
      }
    }
  }
}

//----- (0069F4F0) --------------------------------------------------------
void __thiscall SoundGroupStatic::Terminate(SoundGroupStatic *this)
{
  SoundGroupStatic *v1; // esi@1
  void *v2; // eax@1
  void *v3; // edi@2

  v1 = this;
  SoundGroup::Terminate(&this->baseclass_0);
  v1->baseclass_0.vfptr->UnloadAllSound((SoundGroup *)v1);
  v2 = v1->m_pspSourceTable;
  if ( v2 )
  {
    v3 = (char *)v2 - 4;
    _eh_vector_destructor_iterator_(
      v2,
      4u,
      *((_DWORD *)v2 - 1),
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    operator delete__(v3);
  }
  v1->m_pspSourceTable = 0;
}

//----- (0069F530) --------------------------------------------------------
void __thiscall SoundGroupStatic::UnloadAllSound(SoundGroupStatic *this)
{
  SoundGroupStatic *v1; // ebx@1
  NiTListItem<NiAudioSource *> *v2; // esi@1
  NiTListItem<NiAudioSource *> *v3; // ST00_4@2
  unsigned int v4; // eax@3
  NiPointer<NiAudioSource> *v5; // ecx@5
  NiAudioSource *v6; // esi@5
  int v7; // edi@5
  unsigned int i; // [sp+Ch] [bp-4h]@4

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr->DetachAllSound)();
  v2 = v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *> *)&v1->baseclass_0.m_kPlayingSourceList,
      v3);
  }
  v4 = 0;
  *(_DWORD *)&v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  if ( v1->m_pspSourceTable )
  {
    i = 0;
    if ( v1->baseclass_0.m_dwTableSize > 0 )
    {
      do
      {
        v5 = v1->m_pspSourceTable;
        v6 = v5[v4].m_pObject;
        v7 = (int)&v5[v4];
        if ( v6 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v6 )
              v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
          }
          v4 = i;
          *(_DWORD *)v7 = 0;
        }
        ++v4;
        i = v4;
      }
      while ( v4 < v1->baseclass_0.m_dwTableSize );
    }
  }
}

//----- (0069F5C0) --------------------------------------------------------
void __thiscall SoundGroupStatic::DetachAllSound(SoundGroupStatic *this)
{
  SoundGroupStatic *v1; // edi@1
  unsigned int v2; // esi@2
  NiAudioSource *v3; // eax@3
  int v4; // ebx@6
  int v5; // [sp+4h] [bp-4h]@5

  v1 = this;
  if ( this->m_pspSourceTable )
  {
    v2 = 0;
    if ( this->baseclass_0.m_dwTableSize )
    {
      do
      {
        v3 = v1->m_pspSourceTable[v2].m_pObject;
        if ( v3 )
        {
          if ( v3->baseclass_0.m_pkParent )
          {
            ((void (__stdcall *)(int *, NiAudioSource *))v1->m_pspSourceTable[v2].m_pObject->baseclass_0.m_pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
              &v5,
              v1->m_pspSourceTable[v2].m_pObject);
            if ( v5 )
            {
              v4 = v5;
              if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
              {
                if ( v4 )
                  (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
              }
            }
          }
        }
        ++v2;
      }
      while ( v2 < v1->baseclass_0.m_dwTableSize );
    }
  }
}

//----- (0069F630) --------------------------------------------------------
void __thiscall SoundGroupStatic::DetachSound(SoundGroupStatic *this, SoundIndex *rkIndex)
{
  NiPointer<NiAudioSource> *v2; // edx@2
  unsigned int v3; // eax@3
  NiAudioSource *v4; // ecx@4
  NiNode *v5; // ecx@5

  if ( !rkIndex->m_acFilename )
  {
    v2 = this->m_pspSourceTable;
    if ( v2 )
    {
      v3 = rkIndex->m_dwIndex;
      if ( rkIndex->m_dwIndex < this->baseclass_0.m_dwTableSize )
      {
        v4 = v2[v3].m_pObject;
        if ( v4 )
        {
          v5 = v4->baseclass_0.m_pkParent;
          if ( v5 )
          {
            ((void (__stdcall *)(_DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
              &rkIndex,
              v2[v3].m_pObject);
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkIndex);
          }
        }
      }
    }
  }
}

//----- (0069F680) --------------------------------------------------------
bool __thiscall SoundGroupDynamic::IsUniqueSource(SoundGroupDynamic *this, NiMilesSource *pkSource)
{
  NiTListItem<NiPointer<NiAudioSource> > *v2; // esi@1
  NiMilesSource *v3; // ecx@2
  void *v4; // ebx@4
  bool result; // al@6

  v2 = this->m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = (NiMilesSource *)v2->m_element.m_pObject;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3 != pkSource )
        {
          v4 = NiMilesSource::GetFileImage(v3);
          if ( v4 == NiMilesSource::GetFileImage(pkSource) )
            break;
        }
      }
      if ( !v2 )
        goto LABEL_6;
    }
    result = 0;
  }
  else
  {
LABEL_6:
    result = 1;
  }
  return result;
}

//----- (0069F6D0) --------------------------------------------------------
void __thiscall SoundGroupDynamic::UnloadAllSound(SoundGroupDynamic *this)
{
  SoundGroupDynamic *v1; // edi@1
  NiTListItem<NiAudioSource *> *v2; // esi@1
  NiTListItem<NiAudioSource *> *v3; // ST00_4@2
  NiTListItem<void *> *v4; // esi@3
  NiTListItem<void *> *v5; // ST00_4@4
  NiTListItem<NiPointer<NiAudioSource> > *v6; // esi@5
  NiTListItem<NiPointer<NiAudioSource> > *v7; // ST00_4@6
  NiTListItem<NiPointer<NiAudioSource> > *v8; // esi@7
  NiTListItem<NiPointer<NiAudioSource> > *v9; // ST00_4@8
  NiTListItem<NiPointer<NiAudioSource> > *v10; // esi@9
  NiTListItem<NiPointer<NiAudioSource> > *v11; // ST00_4@10

  v1 = this;
  ((void (*)(void))this->baseclass_0.vfptr->DetachAllSound)();
  v2 = v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *> *)&v1->baseclass_0.m_kPlayingSourceList,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  v4 = v1->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v4 )
  {
    v5 = v4;
    v4 = v4->m_pkNext;
    v1->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,void *> *)&v1->m_kUniqueSourceList,
      v5);
  }
  *(_DWORD *)&v1->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v6 = v1->m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead;
  while ( v6 )
  {
    v7 = v6;
    v6 = v6->m_pkNext;
    v1->m_kActiveSourceList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *)&v1->m_kActiveSourceList,
      v7);
  }
  *(_DWORD *)&v1->m_kActiveSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kActiveSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  v8 = v1->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead;
  while ( v8 )
  {
    v9 = v8;
    v8 = v8->m_pkNext;
    v1->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *)&v1->m_kAmbientSourceRecycleList,
      v9);
  }
  *(_DWORD *)&v1->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v10 = v1->m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead;
  while ( v10 )
  {
    v11 = v10;
    v10 = v10->m_pkNext;
    v1->m_k3DSourceRecycleList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *)&v1->m_k3DSourceRecycleList,
      v11);
  }
  *(_DWORD *)&v1->m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
}

//----- (0069F7A0) --------------------------------------------------------
void __thiscall SoundGroupDynamic::DetachAllSound(SoundGroupDynamic *this)
{
  NiTListItem<NiPointer<NiAudioSource> > *v1; // esi@1
  NiAudioSource *v2; // eax@2
  NiNode *v3; // ecx@2
  int v4; // edi@4
  int v5; // [sp+4h] [bp-4h]@3

  v1 = this->m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead;
  while ( v1 )
  {
    v2 = v1->m_element.m_pObject;
    v3 = v2->baseclass_0.m_pkParent;
    v1 = v1->m_pkNext;
    if ( v3 )
    {
      ((void (__stdcall *)(int *, NiAudioSource *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v5,
        v2);
      if ( v5 )
      {
        v4 = v5;
        if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
        {
          if ( v4 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        }
      }
    }
  }
}

//----- (0069F800) --------------------------------------------------------
void __thiscall SoundGroup::Update(SoundGroup *this, float fTime)
{
  SoundGroup *v2; // ebx@1
  NiTListItem<NiAudioSource *> *v3; // edi@1
  NiAudioSource *v4; // esi@2

  v2 = this;
  v3 = this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3->m_element;
    v3 = v3->m_pkNext;
    if ( !((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v4)
      && SoundGroup::IsOutofMaxRange(v2, &v4->baseclass_0.m_kWorld.m_Translate) )
      ((void (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(v4);
  }
  v2->vfptr->UpdatePlayingSource(v2);
}

//----- (0069F860) --------------------------------------------------------
void __thiscall SoundGroup::UpdatePlayingSource(SoundGroup *this)
{
  NiTListItem<NiAudioSource *> *v1; // edi@1
  NiAudioSource *v2; // esi@2
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@2
  NiNode *v4; // ecx@3
  int v5; // esi@5
  SoundGroup *v6; // [sp+4h] [bp-Ch]@1
  NiTListItem<NiAudioSource *> *kCurrIter; // [sp+8h] [bp-8h]@2
  int v8; // [sp+Ch] [bp-4h]@4

  v1 = this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  v6 = this;
  while ( v1 )
  {
    v2 = v1->m_element;
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor;
    kCurrIter = v1;
    v1 = v1->m_pkNext;
    if ( ((int (__thiscall *)(NiAudioSource *))v3)(v2) != 1 )
    {
      v4 = v2->baseclass_0.m_pkParent;
      if ( v4 )
      {
        ((void (__stdcall *)(int *, NiAudioSource *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
          &v8,
          v2);
        if ( v8 )
        {
          v5 = v8;
          if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
          {
            if ( v5 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
          }
        }
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v6->m_kPlayingSourceList,
        (void **)&kCurrIter);
    }
  }
}

//----- (0069F8F0) --------------------------------------------------------
NiPointer<NiAudioSource> *__thiscall SoundGroup::Create3DSource(SoundGroup *this, NiPointer<NiAudioSource> *result, char *pcFileName, bool bStreamed)
{
  int v4; // esi@1
  SoundGroup *v5; // edi@1
  int v6; // eax@3
  void (__thiscall *v7)(_DWORD, _DWORD); // eax@18
  int v9; // [sp+34h] [bp-124h]@3
  int v10; // [sp+38h] [bp-120h]@6
  int v11; // [sp+3Ch] [bp-11Ch]@1
  float v12; // [sp+40h] [bp-118h]@1
  NiPointer<NiAudioSource> spSource; // [sp+44h] [bp-114h]@1
  char acFileName[256]; // [sp+48h] [bp-110h]@13
  unsigned int v15; // [sp+148h] [bp-10h]@1
  int v16; // [sp+154h] [bp-4h]@1
  int v17; // [sp+158h] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v4 = 0;
  v11 = 0;
  v5 = this;
  LODWORD(v12) = pcFileName;
  spSource.m_pObject = 0;
  v16 = 1;
  if ( this->m_pkAudioSystem && this->m_bEnable )
  {
    v6 = *(_DWORD *)((int (__stdcall *)(int *, _DWORD))this->vfptr->CreateSource)(&v9, 0);
    if ( v6 )
    {
      v4 = v6;
      spSource.m_pObject = (NiAudioSource *)v6;
      InterlockedIncrement((volatile LONG *)(v6 + 4));
    }
    LOBYTE(v16) = 1;
    if ( v9 )
    {
      v10 = v9;
      if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) )
      {
        if ( v10 )
          (**(void (__stdcall ***)(_DWORD))v10)(1);
      }
    }
    if ( v4 )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      sprintf(acFileName, "%s%s");
      (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 136))(v4, acFileName);
      (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 128))(v4, bStreamed);
      if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 148))(v4) )
      {
        v7 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4 + 188);
        v12 = v5->m_fGain * SoundGroup::ms_fMasterGain;
        v7(v4, LODWORD(v12));
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))*(void (__thiscall **)(int, float, _DWORD))(*(_DWORD *)v4 + 180))(
          v4,
          v5->m_fSoundMin,
          LODWORD(SoundGroup::ms_fSoundMax));
        result->m_pObject = (NiAudioSource *)v4;
        InterlockedIncrement((volatile LONG *)(v4 + 4));
      }
      else
      {
        if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        spSource.m_pObject = 0;
        result->m_pObject = 0;
      }
      v11 = 1;
      LOBYTE(v16) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spSource);
    }
    else
    {
      result->m_pObject = 0;
    }
  }
  else
  {
    result->m_pObject = 0;
  }
  return result;
}
// A81B00: using guessed type float SoundGroup__ms_fSoundMax;
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0069FAE0) --------------------------------------------------------
NiPointer<NiAudioSource> *__thiscall SoundGroup::CreateAmbientSource(SoundGroup *this, NiPointer<NiAudioSource> *result, char *pcFileName, bool bStreamed)
{
  int v4; // esi@1
  SoundGroup *v5; // edi@1
  int v6; // eax@3
  void (__thiscall *v7)(_DWORD, _DWORD); // edx@15
  int v9; // [sp+2Ch] [bp-124h]@6
  int v10; // [sp+30h] [bp-120h]@3
  int v11; // [sp+34h] [bp-11Ch]@1
  NiPointer<NiAudioSource> spSource; // [sp+38h] [bp-118h]@1
  float v13; // [sp+3Ch] [bp-114h]@1
  char acFileName[256]; // [sp+40h] [bp-110h]@12
  unsigned int v15; // [sp+140h] [bp-10h]@1
  int v16; // [sp+14Ch] [bp-4h]@1
  int v17; // [sp+150h] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v4 = 0;
  v11 = 0;
  v5 = this;
  LODWORD(v13) = pcFileName;
  spSource.m_pObject = 0;
  v16 = 1;
  if ( !this->m_pkAudioSystem || !this->m_bEnable )
  {
    result->m_pObject = 0;
    return result;
  }
  v6 = *(_DWORD *)((int (__stdcall *)(int *, signed int))this->vfptr->CreateSource)(&v10, 1);
  if ( v6 )
  {
    v4 = v6;
    spSource.m_pObject = (NiAudioSource *)v6;
    InterlockedIncrement((volatile LONG *)(v6 + 4));
  }
  LOBYTE(v16) = 1;
  if ( v10 )
  {
    v9 = v10;
    if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
    {
      if ( v9 )
        (**(void (__stdcall ***)(_DWORD))v9)(1);
    }
  }
  if ( !v4 )
    goto LABEL_18;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 136))(v4, acFileName);
  (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 128))(v4, bStreamed);
  if ( !(unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 148))(v4)
    || !bStreamed && !NiMilesSource::GetFileImage((NiMilesSource *)v4) )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
LABEL_18:
    result->m_pObject = 0;
    return result;
  }
  v7 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4 + 188);
  v13 = v5->m_fGain * SoundGroup::ms_fMasterGain;
  v7(v4, LODWORD(v13));
  result->m_pObject = (NiAudioSource *)v4;
  InterlockedIncrement((volatile LONG *)(v4 + 4));
  v11 = 1;
  LOBYTE(v16) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spSource);
  return result;
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0069FCB0) --------------------------------------------------------
void __thiscall SoundGroupStatic::SetTableSize(SoundGroupStatic *this, unsigned int dwTableSize)
{
  SoundGroupStatic *v2; // edi@1
  void *v3; // eax@1
  unsigned int v4; // ecx@1
  void *v5; // eax@1
  int v6; // ebx@2

  v2 = this;
  v3 = operator new__(4 * dwTableSize);
  v2->baseclass_0.m_ppcTable = (char **)v3;
  memset((char *)v3, 0, 4 * dwTableSize);
  v2->baseclass_0.m_dwTableSize = dwTableSize;
  v4 = 4 * dwTableSize | -((unsigned __int64)dwTableSize >> 30 != 0);
  v5 = operator new__((v4 + 4) | -__CFADD__(v4, 4));
  if ( v5 )
  {
    v6 = (int)((char *)v5 + 4);
    *(_DWORD *)v5 = dwTableSize;
    _eh_vector_constructor_iterator_(
      (char *)v5 + 4,
      4u,
      dwTableSize,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    v2->m_pspSourceTable = (NiPointer<NiAudioSource> *)v6;
  }
  else
  {
    v2->m_pspSourceTable = 0;
  }
}

//----- (0069FD90) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupStatic::GetSound(SoundGroupStatic *this, SoundIndex *rkIndex, bool bStreamed)
{
  SoundGroupStatic *v3; // esi@1
  SoundIndex *v4; // edi@1
  NiAudioSource *result; // eax@2
  NiPointer<NiAudioSource> *v6; // ecx@3
  char *v7; // eax@6
  NiPointer<NiPixelData> *v8; // eax@7

  v3 = this;
  v4 = rkIndex;
  if ( rkIndex->m_acFilename
    || (v6 = this->m_pspSourceTable) == 0
    || rkIndex->m_dwIndex >= v3->baseclass_0.m_dwTableSize )
    return 0;
  result = v6[rkIndex->m_dwIndex].m_pObject;
  if ( result )
    return result;
  v7 = SoundGroup::GetFilenameFrom(&v3->baseclass_0, rkIndex);
  if ( !v7 )
    return 0;
  v8 = (NiPointer<NiPixelData> *)v3->baseclass_0.vfptr->CreateAmbientSource(
                                   (SoundGroup *)v3,
                                   (NiPointer<NiAudioSource> *)&rkIndex,
                                   v7,
                                   bStreamed);
  NiPointer<NiActorManager>::operator_((NiPointer<NiPixelData> *)&v3->m_pspSourceTable[v4->m_dwIndex], v8);
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkIndex);
  return v3->m_pspSourceTable[v4->m_dwIndex].m_pObject;
}

//----- (0069FE50) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupStatic::Get3DSound(SoundGroupStatic *this, SoundIndex *rkIndex, bool bStreamed)
{
  SoundGroupStatic *v3; // esi@1
  SoundIndex *v4; // edi@1
  NiAudioSource *result; // eax@2
  NiPointer<NiAudioSource> *v6; // ecx@3
  char *v7; // eax@6
  NiPointer<NiPixelData> *v8; // eax@7

  v3 = this;
  v4 = rkIndex;
  if ( rkIndex->m_acFilename
    || (v6 = this->m_pspSourceTable) == 0
    || rkIndex->m_dwIndex >= v3->baseclass_0.m_dwTableSize )
    return 0;
  result = v6[rkIndex->m_dwIndex].m_pObject;
  if ( result )
    return result;
  v7 = SoundGroup::GetFilenameFrom(&v3->baseclass_0, rkIndex);
  if ( !v7 )
    return 0;
  v8 = (NiPointer<NiPixelData> *)v3->baseclass_0.vfptr->Create3DSource(
                                   (SoundGroup *)v3,
                                   (NiPointer<NiAudioSource> *)&rkIndex,
                                   v7,
                                   bStreamed);
  NiPointer<NiActorManager>::operator_((NiPointer<NiPixelData> *)&v3->m_pspSourceTable[v4->m_dwIndex], v8);
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkIndex);
  return v3->m_pspSourceTable[v4->m_dwIndex].m_pObject;
}

//----- (0069FF10) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupStatic::PlaySoundA(SoundGroupStatic *this, SoundIndex *rkIndex, bool bLoop, bool bStreamed)
{
  SoundGroupStatic *v4; // edi@1
  NiAudioSource *result; // eax@2
  NiAudioSource *v6; // eax@4
  NiAudioSource *v7; // esi@4
  unsigned int v8; // [sp+4h] [bp-Ch]@6
  float bLoopa; // [sp+1Ch] [bp+Ch]@8

  v4 = this;
  if ( this->baseclass_0.m_bEnable
    && *(_DWORD *)&this->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] < this->baseclass_0.m_dwOccupyingChannelCount )
  {
    v6 = SoundGroupStatic::GetSound(this, rkIndex, bStreamed);
    v7 = v6;
    *(_DWORD *)&bStreamed = v6;
    if ( v6 )
    {
      v8 = !bLoop;
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor((NiRefObject *)v6, v8);
      bLoopa = v4->baseclass_0.m_fGain * SoundGroup::ms_fMasterGain;
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor((NiRefObject *)v7, LODWORD(bLoopa));
      ((void (__thiscall *)(NiAudioSource *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[54].__vecDelDtor)(v7);
      NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v4->baseclass_0.m_kPlayingSourceList,
        (NiD3DXEffectParameter *const *)&bStreamed);
      result = v7;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (0069FFB0) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupStatic::Play3DSound(SoundGroupStatic *this, SoundIndex *rkIndex, NiPoint3 *rkPoint, bool bLoop)
{
  SoundGroupStatic *v4; // edi@1
  NiAudioSource *result; // eax@2
  NiPoint3 *v6; // ebx@3
  NiPoint3 *v7; // eax@5
  NiAudioSource *v8; // esi@5
  void (__thiscall *v9)(_DWORD, _DWORD); // eax@6
  int v10; // [sp+8h] [bp-10h]@7

  v4 = this;
  if ( this->baseclass_0.m_bEnable )
  {
    v6 = rkPoint;
    if ( (unsigned __int8)((int (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr->Check3DSoundPlayable)(rkPoint) )
    {
      v7 = (NiPoint3 *)SoundGroupStatic::Get3DSound(v4, rkIndex, 0);
      v8 = (NiAudioSource *)v7;
      rkPoint = v7;
      if ( v7 )
      {
        v9 = *(void (__thiscall **)(_DWORD, _DWORD))(LODWORD(v7->x) + 208);
        v10 = !bLoop;
        v9(v8, v10);
        ((void (__thiscall *)(NiAudioSource *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[54].__vecDelDtor)(v8);
        v8->baseclass_0.m_kWorld.m_Translate.x = v6->x;
        v8->baseclass_0.m_kWorld.m_Translate.y = v6->y;
        v8->baseclass_0.m_kWorld.m_Translate.z = v6->z;
        v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor(
          (NiRefObject *)v8,
          COERCE_UNSIGNED_INT(0.0));
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v4->baseclass_0.m_kPlayingSourceList,
          (NiD3DXEffectParameter *const *)&rkPoint);
        result = v8;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006A0060) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupStatic::Play3DSound(SoundGroupStatic *this, SoundIndex *rkIndex, NiNode *pkNode, bool bLoop)
{
  int v4; // esi@0
  SoundGroupStatic *v5; // ebx@1
  NiAudioSource *result; // eax@2
  NiNode *v7; // edi@3
  NiNode *v8; // eax@6
  NiAudioSource *v9; // esi@6
  void *(__thiscall *v10)(NiRefObject *, unsigned int); // eax@7
  NiNode *v11; // ecx@10
  int v12; // [sp+1Ch] [bp-10h]@8
  int v13; // [sp+20h] [bp-Ch]@6

  v5 = this;
  if ( this->baseclass_0.m_bEnable )
  {
    v7 = pkNode;
    if ( pkNode
      && (unsigned __int8)((int (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr->Check3DSoundPlayable)(&pkNode->baseclass_0.m_kWorld.m_Translate) )
    {
      v13 = v4;
      v8 = (NiNode *)SoundGroupStatic::Get3DSound(v5, rkIndex, 0);
      v9 = (NiAudioSource *)v8;
      pkNode = v8;
      if ( v8 )
      {
        v10 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
        v12 = !bLoop;
        ((void (__thiscall *)(NiAudioSource *, int, int))v10)(v9, v12, v13);
        v11 = v9->baseclass_0.m_pkParent;
        if ( v7 != v11 )
        {
          if ( v11 )
          {
            ((void (__stdcall *)(bool *, NiAudioSource *))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
              &bLoop,
              v9);
            NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&bLoop);
          }
          ((void (__thiscall *)(NiNode *, NiAudioSource *, _DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v7,
            v9,
            0);
        }
        NiAVObject::Update(&v7->baseclass_0, 0.0, 1);
        ((void (__thiscall *)(NiAudioSource *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[54].__vecDelDtor)(v9);
        ((void (__thiscall *)(NiAudioSource *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(v9);
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v5->baseclass_0.m_kPlayingSourceList,
          (NiD3DXEffectParameter *const *)&pkNode);
        result = v9;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006A0140) --------------------------------------------------------
void __thiscall SoundGroupStatic::UnloadSound(SoundGroupStatic *this, SoundIndex *rkIndex)
{
  SoundIndex *v2; // edi@1
  SoundGroupStatic *v3; // esi@1
  NiPointer<NiAudioSource> *v4; // ecx@2
  NiAudioSource *v5; // ecx@4
  SoundIndex *v6; // eax@7
  NiAudioSource *v7; // edx@8
  int v8; // ecx@9
  NiPointer<NiAudioSource> *v9; // edx@13
  NiAudioSource *v10; // esi@13
  int v11; // edi@13

  v2 = rkIndex;
  v3 = this;
  if ( !rkIndex->m_acFilename )
  {
    v4 = this->m_pspSourceTable;
    if ( v4 )
    {
      if ( rkIndex->m_dwIndex < v3->baseclass_0.m_dwTableSize )
      {
        v5 = v4[rkIndex->m_dwIndex].m_pObject;
        if ( v5 )
        {
          if ( ((int (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)() == 1 )
            ((void (*)(void))v3->m_pspSourceTable[v2->m_dwIndex].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)();
          v6 = (SoundIndex *)v3->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
          if ( v6 )
          {
            v7 = v3->m_pspSourceTable[v2->m_dwIndex].m_pObject;
            while ( 1 )
            {
              v8 = (int)&v6[1];
              rkIndex = v6;
              v6 = (SoundIndex *)v6->m_dwIndex;
              if ( *(NiAudioSource **)v8 == v7 )
                break;
              if ( !v6 )
                goto LABEL_13;
            }
            NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
              (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->baseclass_0.m_kPlayingSourceList,
              (void **)&rkIndex);
          }
LABEL_13:
          v9 = v3->m_pspSourceTable;
          v10 = v9[v2->m_dwIndex].m_pObject;
          v11 = (int)&v9[v2->m_dwIndex];
          if ( v10 )
          {
            if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v10 )
                v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
            }
            *(_DWORD *)v11 = 0;
          }
        }
      }
    }
  }
}

//----- (006A0200) --------------------------------------------------------
void __thiscall SoundGroupDynamic::MarkAsRecentlyUsed(SoundGroupDynamic *this, NiAudioSource *pkSource)
{
  SoundGroupDynamic *v2; // ebx@1
  NiTListItem<void *> *v3; // esi@1
  NiAudioSource *v4; // edi@1
  void *v5; // ebx@2
  void *v6; // edi@5
  int v7; // eax@5
  NiTListItem<void *> *v8; // ecx@5
  NiTListItem<void *> *v9; // esi@8
  void *v10; // ebx@9
  SoundGroupDynamic *v11; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = this->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v4 = pkSource;
  v11 = this;
  if ( v3 )
  {
    while ( 1 )
    {
      v5 = v3->m_element;
      v3 = v3->m_pkNext;
      if ( v5 == NiMilesSource::GetFileImage((NiMilesSource *)v4) )
        break;
      if ( !v3 )
      {
        v2 = v11;
        goto LABEL_5;
      }
    }
    v9 = v11->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v9 )
    {
      while ( 1 )
      {
        v10 = v9->m_element;
        pkSource = (NiAudioSource *)v9;
        v9 = v9->m_pkNext;
        if ( NiMilesSource::GetFileImage((NiMilesSource *)v4) == v10 )
          break;
        if ( !v9 )
          return;
      }
      SpTList<void__>::MoveToHead(&v11->m_kUniqueSourceList, (void **)&pkSource);
    }
  }
  else
  {
LABEL_5:
    v6 = NiMilesSource::GetFileImage((NiMilesSource *)v4);
    v7 = (int)v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,void *> *)&v2->m_kUniqueSourceList);
    *(_DWORD *)(v7 + 8) = v6;
    *(_DWORD *)(v7 + 4) = 0;
    *(_DWORD *)v7 = v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    v8 = v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v8 )
    {
      v8->m_pkPrev = (NiTListItem<void *> *)v7;
      ++*(_DWORD *)&v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<void *> *)v7;
    }
    else
    {
      ++*(_DWORD *)&v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<void *> *)v7;
      v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<void *> *)v7;
    }
  }
}

//----- (006A02D0) --------------------------------------------------------
void __thiscall SoundGroup::SoundGroup(SoundGroup *this)
{
  SoundGroup *v1; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v2; // eax@1

  v1 = this;
  this->vfptr = (SoundGroupVtbl *)&SoundGroup::_vftable_;
  *(_DWORD *)&this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kPlayingSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *>Vtbl *)&NiTList<NiAudioSource__>::_vftable_;
  this->m_fSoundMaxRange = 5000.0;
  this->m_ppcTable = 0;
  this->m_dwTableSize = 0;
  this->m_fGain = 1.0;
  this->m_fSoundMin = SoundGroup::ms_fSoundMin;
  this->m_bEnable = 0;
  v2 = SoundGroup::ms_kSoundGroupList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&SoundGroup::ms_kSoundGroupList);
  v2->m_element = (NiD3DShaderInterface *)v1;
  v2->m_pkNext = 0;
  v2->m_pkPrev = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkTail;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkTail )
    SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkTail->m_pkNext = v2;
  else
    SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead = v2;
  ++*(_DWORD *)&SoundGroup::ms_kSoundGroupList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkTail = v2;
}
// 9C792C: using guessed type int (__thiscall *NiTList_NiAudioSource _____vftable_)(void *p, char);
// 9C7944: using guessed type int (__stdcall *SoundGroup___vftable_)(int result, int uiType);
// A81B04: using guessed type float SoundGroup__ms_fSoundMin;

//----- (006A0390) --------------------------------------------------------
void __thiscall SoundGroup::_SoundGroup(SoundGroup *this)
{
  SoundGroup *v1; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v2; // eax@1
  int v3; // ecx@2
  void *v4; // edx@2
  int v5; // edi@7
  NiTListItem<NiAudioSource *> *v6; // esi@7
  NiTListItem<NiAudioSource *> *v7; // ST00_4@8
  void *kPos; // [sp+4h] [bp-10h]@5
  int v9; // [sp+10h] [bp-4h]@1

  v1 = this;
  this->vfptr = (SoundGroupVtbl *)&SoundGroup::_vftable_;
  v9 = 0;
  SoundGroup::Terminate(this);
  v2 = SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead;
  if ( SoundGroup::ms_kSoundGroupList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v3 = (int)&v2->m_element;
      v4 = v2;
      v2 = v2->m_pkNext;
      if ( v1 == *(SoundGroup **)v3 )
        break;
      if ( !v2 )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v4 = 0;
  }
  kPos = v4;
  if ( v4 )
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(&SoundGroup::ms_kSoundGroupList, &kPos);
  v5 = (int)&v1->m_kPlayingSourceList;
  v1->m_kPlayingSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *>Vtbl *)&NiTPointerListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
  v6 = v1->m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  v9 = 1;
  while ( v6 )
  {
    v7 = v6;
    v6 = v6->m_pkNext;
    (*(void (__thiscall **)(int, NiTListItem<NiAudioSource *> *))(*(_DWORD *)v5 + 8))(v5, v7);
  }
  *(_DWORD *)(v5 + 12) = 0;
  *(_DWORD *)(v5 + 4) = 0;
  *(_DWORD *)(v5 + 8) = 0;
  *(_DWORD *)v5 = &NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
}
// 9C78EC: using guessed type int (__thiscall *NiTListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);
// 9C790C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);
// 9C7944: using guessed type int (__stdcall *SoundGroup___vftable_)(int result, int uiType);

//----- (006A0450) --------------------------------------------------------
void __thiscall SoundGroupStatic::SoundGroupStatic(SoundGroupStatic *this)
{
  SoundGroupStatic *v1; // esi@1

  v1 = this;
  SoundGroup::SoundGroup(&this->baseclass_0);
  v1->baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupStatic::_vftable_;
  v1->m_pspSourceTable = 0;
}
// 9C7994: using guessed type int (__stdcall *SoundGroupStatic___vftable_)(int result, int uiType);

//----- (006A0470) --------------------------------------------------------
void __thiscall SoundGroupStatic::_SoundGroupStatic(SoundGroupStatic *this)
{
  SoundGroup *v1; // esi@1
  void *v2; // eax@1
  void *v3; // edi@2

  v1 = (SoundGroup *)this;
  this->baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupStatic::_vftable_;
  SoundGroup::Terminate(&this->baseclass_0);
  v1->vfptr->UnloadAllSound(v1);
  v2 = v1[1].vfptr;
  if ( v2 )
  {
    v3 = (char *)v2 - 4;
    _eh_vector_destructor_iterator_(
      v2,
      4u,
      *((_DWORD *)v2 - 1),
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
    operator delete__(v3);
  }
  v1[1].vfptr = 0;
  SoundGroup::_SoundGroup(v1);
}
// 9C7994: using guessed type int (__stdcall *SoundGroupStatic___vftable_)(int result, int uiType);

//----- (006A0500) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupDynamic::PlaySoundA(SoundGroupDynamic *this, SoundIndex *rkIndex, bool bLoop, bool bStreamed)
{
  SoundGroupDynamic *v4; // esi@1
  char *v5; // eax@3
  char **v6; // ecx@4
  NiAudioSource *v7; // esi@8
  int v9; // [sp-8h] [bp-18h]@0
  int v10; // [sp-4h] [bp-14h]@0
  NiD3DXEffectParameter *element; // [sp+0h] [bp-10h]@8
  int v12; // [sp+4h] [bp-Ch]@8
  int v13; // [sp+Ch] [bp-4h]@7

  v4 = this;
  if ( this->baseclass_0.m_bEnable )
  {
    if ( *(_DWORD *)&this->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] < this->baseclass_0.m_dwOccupyingChannelCount )
    {
      v5 = rkIndex->m_acFilename;
      if ( v5
        || (v6 = this->baseclass_0.m_ppcTable) != 0
        && rkIndex->m_dwIndex < v4->baseclass_0.m_dwTableSize
        && (v5 = v6[rkIndex->m_dwIndex]) != 0 )
      {
        v4->baseclass_0.vfptr->CreateAmbientSource((SoundGroup *)v4, (NiPointer<NiAudioSource> *)&rkIndex, v5, 0);
        v13 = 0;
        if ( rkIndex )
        {
          (*(void (__stdcall **)(int, int, NiD3DXEffectParameter *, int))(rkIndex->m_dwIndex + 216))(
            v9,
            v10,
            element,
            v12);
          element = (NiD3DXEffectParameter *)rkIndex;
          NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v4->baseclass_0.m_kPlayingSourceList,
            &element);
          NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v4->m_kActiveSourceList,
            (NiPointer<NiDX92DBufferData> *)&rkIndex);
          SoundGroupDynamic::MarkAsRecentlyUsed(v4, (NiAudioSource *)rkIndex);
          v7 = (NiAudioSource *)rkIndex;
          v13 = -1;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkIndex);
          return v7;
        }
        v13 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkIndex);
      }
    }
  }
  return 0;
}

//----- (006A0610) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupDynamic::Play3DSound(SoundGroupDynamic *this, SoundIndex *rkIndex, NiNode *pkNode, bool bLoop)
{
  SoundGroupDynamic *v4; // esi@1
  NiNode *v5; // edi@2
  char *v6; // eax@4
  char **v7; // ecx@5
  NiNode *v8; // ST18_4@12
  NiNode *v9; // esi@12
  int v11; // [sp+20h] [bp-1Ch]@10

  v4 = this;
  if ( !this->baseclass_0.m_bEnable
    || (v5 = pkNode) == 0
    || !(unsigned __int8)((int (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr->Check3DSoundPlayable)(&pkNode->baseclass_0.m_kWorld.m_Translate)
    || (v6 = rkIndex->m_acFilename) == 0
    && ((v7 = v4->baseclass_0.m_ppcTable) == 0
     || rkIndex->m_dwIndex >= v4->baseclass_0.m_dwTableSize
     || (v6 = v7[rkIndex->m_dwIndex]) == 0) )
    return 0;
  v4->baseclass_0.vfptr->Create3DSource((SoundGroup *)v4, (NiPointer<NiAudioSource> *)&pkNode, v6, 0);
  if ( !pkNode )
  {
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNode);
    return 0;
  }
  v11 = !bLoop;
  ((void (__cdecl *)(int))pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(v11);
  v8 = pkNode;
  ((void (__thiscall *)(NiNode *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v5);
  NiAVObject::Update(&v5->baseclass_0, 0.0, 1);
  ((void (__cdecl *)(NiNode *, _DWORD))pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[54].__vecDelDtor)(
    v8,
    0);
  ((void (__stdcall *)(_DWORD))pkNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[63].__vecDelDtor)(0.0);
  *(_DWORD *)&bLoop = pkNode;
  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v4->baseclass_0.m_kPlayingSourceList,
    (NiD3DXEffectParameter *const *)&bLoop);
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v4->m_kActiveSourceList,
    (NiPointer<NiDX92DBufferData> *)&pkNode);
  SoundGroupDynamic::MarkAsRecentlyUsed(v4, (NiAudioSource *)pkNode);
  v9 = pkNode;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkNode);
  return (NiAudioSource *)v9;
}

//----- (006A0780) --------------------------------------------------------
NiAudioSource *__thiscall SoundGroupDynamic::Play3DSound(SoundGroupDynamic *this, SoundIndex *rkIndex, NiPoint3 *rkPoint, bool bLoop)
{
  SoundGroupDynamic *v4; // esi@1
  NiPoint3 *v5; // edi@2
  char *v6; // eax@3
  char **v7; // ecx@4
  NiPoint3 *v8; // eax@11
  NiPoint3 *v9; // esi@11
  int v11; // [sp+14h] [bp-1Ch]@9
  int v12; // [sp+18h] [bp-18h]@0
  int v13; // [sp+1Ch] [bp-14h]@0
  int v14; // [sp+20h] [bp-10h]@0

  v4 = this;
  if ( !this->baseclass_0.m_bEnable
    || (v5 = rkPoint,
        !(unsigned __int8)((int (__stdcall *)(NiPoint3 *))this->baseclass_0.vfptr->Check3DSoundPlayable)(rkPoint))
    || (v6 = rkIndex->m_acFilename) == 0
    && ((v7 = v4->baseclass_0.m_ppcTable) == 0
     || rkIndex->m_dwIndex >= v4->baseclass_0.m_dwTableSize
     || (v6 = v7[rkIndex->m_dwIndex]) == 0) )
    return 0;
  v4->baseclass_0.vfptr->Create3DSource((SoundGroup *)v4, (NiPointer<NiAudioSource> *)&rkPoint, v6, 0);
  if ( !rkPoint )
  {
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkPoint);
    return 0;
  }
  v11 = !bLoop;
  (*(void (__stdcall **)(int, int, int, int))(LODWORD(rkPoint->x) + 208))(v11, v12, v13, v14);
  v8 = rkPoint;
  rkPoint[11].z = v5->x;
  v8[12].x = v5->y;
  v8[12].y = v5->z;
  (*(void (**)(void))(LODWORD(rkPoint->x) + 216))();
  (*(void (__stdcall **)(_DWORD))(LODWORD(rkPoint->x) + 252))(0.0);
  *(_DWORD *)&bLoop = rkPoint;
  NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v4->baseclass_0.m_kPlayingSourceList,
    (NiD3DXEffectParameter *const *)&bLoop);
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v4->m_kActiveSourceList,
    (NiPointer<NiDX92DBufferData> *)&rkPoint);
  SoundGroupDynamic::MarkAsRecentlyUsed(v4, (NiAudioSource *)rkPoint);
  v9 = rkPoint;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkPoint);
  return (NiAudioSource *)v9;
}

//----- (006A08E0) --------------------------------------------------------
NiPointer<NiAudioSource> *__thiscall SoundGroupDynamic::CreateSource(SoundGroupDynamic *this, NiPointer<NiAudioSource> *result, unsigned int uiType)
{
  SoundGroupDynamic *v3; // esi@1
  NiPointer<NiAudioSource> *v4; // eax@2
  NiPointer<NiAudioSource> *v5; // edi@6
  NiPointer<NiPixelData> *v6; // ST04_4@7
  int v7; // eax@7
  NiPointer<NiPixelData> *v8; // ST04_4@10
  int v9; // esi@12
  unsigned int v10; // esi@15
  bool v11; // zf@15
  int v12; // [sp+0h] [bp-14h]@1
  int thisa; // [sp+4h] [bp-10h]@7
  int v14; // [sp+10h] [bp-4h]@7

  v3 = this;
  v12 = 0;
  if ( !this->baseclass_0.m_bEnable )
    goto LABEL_2;
  if ( !uiType )
  {
    if ( !*(_DWORD *)&this->m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
    {
      v5 = result;
      SoundGroup::CreateSource(&this->baseclass_0, result, 0);
      return v5;
    }
    uiType = 0;
    v8 = (NiPointer<NiPixelData> *)&this->m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead->m_element;
    v14 = 0;
    NiPointer<NiActorManager>::operator_((NiPointer<NiPixelData> *)&uiType, v8);
    NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::RemoveHead(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v3->m_k3DSourceRecycleList,
      (NiPointer<PgWin> *)&v12);
    v7 = v12;
LABEL_11:
    if ( v7 )
    {
      v9 = v7;
      if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) )
      {
        if ( v9 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
      }
    }
    v10 = uiType;
    v5 = result;
    result->m_pObject = (NiAudioSource *)uiType;
    v11 = v10 == 0;
    if ( v10 )
    {
      InterlockedIncrement((volatile LONG *)(v10 + 4));
      v11 = v10 == 0;
    }
    v14 = -1;
    if ( !v11 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
    }
    return v5;
  }
  if ( uiType != 1 )
  {
LABEL_2:
    v4 = result;
    result->m_pObject = 0;
    return v4;
  }
  if ( *(_DWORD *)&this->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    uiType = 0;
    v6 = (NiPointer<NiPixelData> *)&this->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead->m_element;
    v14 = 1;
    NiPointer<NiActorManager>::operator_((NiPointer<NiPixelData> *)&uiType, v6);
    NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::RemoveHead(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v3->m_kAmbientSourceRecycleList,
      (NiPointer<PgWin> *)&thisa);
    v7 = thisa;
    goto LABEL_11;
  }
  v5 = result;
  SoundGroup::CreateSource(&this->baseclass_0, result, 1u);
  return v5;
}

//----- (006A0A20) --------------------------------------------------------
void __thiscall SoundGroupDynamic::PushInRecycleList(SoundGroupDynamic *this, NiAudioSource *pkSource)
{
  SoundGroupDynamic *v2; // ebx@1
  NiAudioSource *v3; // esi@1
  NiNode *v4; // ecx@2
  NiAudioSource *v5; // edi@4
  int v6; // eax@8
  volatile LONG *v7; // edi@10
  int v8; // ecx@10
  NiAudioSource **v9; // [sp-14h] [bp-20h]@10

  v2 = this;
  v3 = pkSource;
  if ( pkSource )
  {
    v4 = pkSource->baseclass_0.m_pkParent;
    if ( v4 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &pkSource,
        pkSource);
      if ( pkSource )
      {
        v5 = pkSource;
        if ( !InterlockedDecrement((volatile LONG *)&pkSource->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v5 )
            v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
        }
      }
    }
    ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)(v3);
  }
  v6 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(v3);
  if ( v6 )
  {
    if ( v6 != 1 )
      return;
    v7 = (volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    pkSource = v3;
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v9 = &pkSource;
    v8 = (int)&v2->m_kAmbientSourceRecycleList;
  }
  else
  {
    v7 = (volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    pkSource = v3;
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v9 = &pkSource;
    v8 = (int)&v2->m_k3DSourceRecycleList;
  }
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)v8,
    (NiPointer<NiDX92DBufferData> *)v9);
  if ( !InterlockedDecrement(v7) )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
}

//----- (006A0B10) --------------------------------------------------------
void __thiscall SoundGroupDynamic::KeepUniqueSourceCountUnder(SoundGroupDynamic *this, unsigned int dwMaxSound)
{
  SoundGroupDynamic *v2; // edi@1
  unsigned int v3; // eax@1
  NiTListItem<NiPointer<NiAudioSource> > *v4; // ebx@2
  NiTListItem<void *> *v5; // edx@2
  NiAudioSource *v6; // esi@3
  void *v7; // eax@3
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // edx@4
  NiNode *v9; // ecx@5
  int v10; // edi@7
  PgWin *v11; // esi@12
  NiTListItem<void *> *v12; // ecx@19
  NiTListItem<void *> *v13; // eax@19
  NiPointer<PgWin> result; // [sp+4h] [bp-18h]@11
  NiTListItem<NiPointer<NiAudioSource> > *kCurrIter; // [sp+8h] [bp-14h]@3
  int v16; // [sp+Ch] [bp-10h]@6
  void *pvResourceData; // [sp+10h] [bp-Ch]@2
  SoundGroupDynamic *v18; // [sp+14h] [bp-8h]@1
  int iPlayingSourceCount; // [sp+18h] [bp-4h]@2
  int iUnloadedSourceCount; // [sp+24h] [bp+8h]@2

  v2 = this;
  v3 = *(_DWORD *)&this->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  v18 = this;
  if ( v3 <= dwMaxSound )
    return;
  v4 = this->m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead;
  pvResourceData = this->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail->m_element;
  v5 = 0;
  iPlayingSourceCount = 0;
  iUnloadedSourceCount = 0;
  if ( !v4 )
    goto LABEL_19;
  do
  {
    v6 = v4->m_element.m_pObject;
    kCurrIter = v4;
    v4 = v4->m_pkNext;
    v7 = NiMilesSource::GetFileImage((NiMilesSource *)v6);
    if ( pvResourceData == v7 )
    {
      v8 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor;
      ++iPlayingSourceCount;
      if ( ((int (__thiscall *)(NiAudioSource *))v8)(v6) != 1 )
      {
        v9 = v6->baseclass_0.m_pkParent;
        if ( v9 )
        {
          ((void (__stdcall *)(int *, NiAudioSource *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
            &v16,
            v6);
          if ( v16 )
          {
            v10 = v16;
            if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v10 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
            v2 = v18;
          }
        }
        ((void (__thiscall *)(NiAudioSource *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[38].__vecDelDtor)(v6);
        SoundGroupDynamic::PushInRecycleList(v2, v6);
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v2->m_kActiveSourceList,
          &result,
          (void **)&kCurrIter);
        if ( result.m_pObject )
        {
          v11 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v11 )
              v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                (NiRefObject *)v11,
                1u);
          }
        }
        ++iUnloadedSourceCount;
      }
    }
  }
  while ( v4 );
  if ( iPlayingSourceCount == iUnloadedSourceCount )
  {
    v5 = 0;
LABEL_19:
    v12 = v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v13 = v12->m_pkPrev;
    v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v13;
    if ( v13 == v5 )
      v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v5;
    else
      v13->m_pkNext = v5;
    v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,void *> *)&v2->m_kUniqueSourceList,
      v12);
    --*(_DWORD *)&v2->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  }
}

//----- (006A0C40) --------------------------------------------------------
void __thiscall SoundGroupDynamic::UpdatePlayingSource(SoundGroupDynamic *this)
{
  SoundGroupDynamic *v1; // ebx@1
  NiTListItem<NiAudioSource *> *v2; // eax@1
  NiAudioSource *v3; // esi@4
  NiRefObjectVtbl *v4; // edx@4
  PgWin *v5; // [sp+0h] [bp-1Ch]@7
  NiPointer<PgWin> result; // [sp+4h] [bp-18h]@6
  NiTListItem<NiAudioSource *> *kCurrIter; // [sp+8h] [bp-14h]@4
  NiTListItem<NiAudioSource *> *iter; // [sp+Ch] [bp-10h]@3
  int v9; // [sp+18h] [bp-4h]@6

  v1 = this;
  v2 = this->baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      kCurrIter = v2;
      iter = v2->m_pkNext;
      if ( ((int (__thiscall *)(NiAudioSource *))v4[57].__vecDelDtor)(v3) != 1 )
      {
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v1->baseclass_0.m_kPlayingSourceList,
          (void **)&kCurrIter);
        if ( !v1->baseclass_0.vfptr->IsUniqueSource((SoundGroup *)v1, (NiMilesSource *)v3) )
        {
          SoundGroupDynamic::PushInRecycleList(v1, v3);
          kCurrIter = (NiTListItem<NiAudioSource *> *)v3;
          InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
          v9 = 0;
          NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v1->m_kActiveSourceList,
            &result,
            (NiPointer<PgWin> *)&kCurrIter);
          if ( result.m_pObject )
          {
            v5 = result.m_pObject;
            if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v5 )
                ((void (__stdcall *)(signed int))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
            }
          }
          v9 = -1;
          if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
        }
      }
      if ( !iter )
        break;
      v2 = iter;
    }
  }
}

//----- (006A0D50) --------------------------------------------------------
void __thiscall SoundGroupDynamic::Update(SoundGroupDynamic *this, float fTime)
{
  SoundGroupDynamic *v2; // esi@1

  v2 = this;
  SoundGroup::Update(&this->baseclass_0, fTime);
  SoundGroupDynamic::KeepUniqueSourceCountUnder(v2, v2->m_dwMaxUniqueSourceCount);
}

//----- (006A0D80) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_void__>::RemoveTail(NiTPointerListBase<NiTPointerAllocator<unsigned int>,void *> *this)
{
  NiTPointerListBase<NiTPointerAllocator<unsigned int>,void *> *v1; // esi@1
  NiTListItem<void *> *v2; // ecx@1
  NiTListItem<void *> *v3; // eax@1
  void *v4; // edi@4

  v1 = this;
  v2 = this->baseclass_0.m_pkTail;
  v3 = v2->m_pkPrev;
  v1->baseclass_0.m_pkTail = v3;
  if ( v3 )
    v3->m_pkNext = 0;
  else
    v1->baseclass_0.m_pkHead = 0;
  v4 = v2->m_element;
  v1->baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,void *> *)v1, v2);
  --*(_DWORD *)&v1->baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  return v4;
}

//----- (006A0DC0) --------------------------------------------------------
void __thiscall SpTList<void__>::MoveToHead(SpTList<void *> *this, void **iter)
{
  void *v2; // eax@1

  v2 = *iter;
  if ( *iter && v2 != this->baseclass_0.baseclass_0.baseclass_0.m_pkHead )
  {
    if ( v2 == this->baseclass_0.baseclass_0.baseclass_0.m_pkTail )
      this->baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<void *> *)*((_DWORD *)v2 + 1);
    **((_DWORD **)v2 + 1) = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
      *(_DWORD *)(*(_DWORD *)v2 + 4) = *((_DWORD *)v2 + 1);
    *((_DWORD *)v2 + 1) = 0;
    *(_DWORD *)v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    this->baseclass_0.baseclass_0.baseclass_0.m_pkHead->m_pkPrev = (NiTListItem<void *> *)v2;
    this->baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<void *> *)v2;
  }
}

//----- (006A0E10) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_NiTListBase<DFALL<SoundGroup__>_SoundGroup__>(NiTListBase<DFALL<SoundGroup *>,SoundGroup *> *this)
{
  this->vfptr = (NiTListBase<DFALL<SoundGroup *>,SoundGroup *>Vtbl *)&NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_vftable_;
}
// 9C78DC: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroup ___SoundGroup _____vftable_)(void *p, char);

//----- (006A0E20) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>(NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *> *this)
{
  this->vfptr = (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *>Vtbl *)&NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
}
// 9C78EC: using guessed type int (__thiscall *NiTListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);

//----- (006A0E30) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_vector_deleting_destructor_(NiTListBase<DFALL<SoundGroup *>,SoundGroup *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<SoundGroup *>,SoundGroup *>Vtbl *)&NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C78DC: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroup ___SoundGroup _____vftable_)(void *p, char);

//----- (006A0E60) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vector_deleting_destructor_(NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *>Vtbl *)&NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C78EC: using guessed type int (__thiscall *NiTListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);

//----- (006A0E90) --------------------------------------------------------
void __thiscall NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::DeleteItem(NiTMap<char const *,NiD3DGlobalConstantEntry *> *this, NiTMapItem<char const *,NiD3DGlobalConstantEntry *> *pkItem)
{
  pkItem->m_val = 0;
  operator delete(pkItem);
}

//----- (006A0EB0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<SoundGroup__>_SoundGroup__>::_vector_deleting_destructor_(NiTList<SoundGroup *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<SoundGroup *> *v3; // esi@1
  NiTListItem<SoundGroup *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SoundGroup *>,SoundGroup *>Vtbl *)&NiTPointerListBase<DFALL<SoundGroup__>_SoundGroup__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<SoundGroup__>_SoundGroup__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C78DC: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroup ___SoundGroup _____vftable_)(void *p, char);
// 9C78FC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SoundGroup ___SoundGroup _____vftable_)(void *p, char);

//----- (006A0F40) --------------------------------------------------------
void __thiscall NiTList<NiAudioSource__>::_NiTList<NiAudioSource__>(NiTList<NiAudioSource *> *this)
{
  NiTList<NiAudioSource *> *v1; // edi@1
  NiTListItem<NiAudioSource *> *v2; // esi@1
  NiTListItem<NiAudioSource *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *>Vtbl *)&NiTPointerListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *>Vtbl *)&NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
}
// 9C78EC: using guessed type int (__thiscall *NiTListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);
// 9C790C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);

//----- (006A0FC0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vector_deleting_destructor_(NiTList<NiAudioSource *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiAudioSource *> *v3; // esi@1
  NiTListItem<NiAudioSource *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiAudioSource *>,NiAudioSource *>Vtbl *)&NiTPointerListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<NiAudioSource__>_NiAudioSource__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C78EC: using guessed type int (__thiscall *NiTListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);
// 9C790C: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiAudioSource ___NiAudioSource _____vftable_)(void *p, char);

//----- (006A1050) --------------------------------------------------------
void *__thiscall SoundGroup::_scalar_deleting_destructor_(SoundGroup *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SoundGroup::_SoundGroup(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006A1080) --------------------------------------------------------
void *__thiscall SoundGroupMainChar::_scalar_deleting_destructor_(SoundGroupStatic *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SoundGroupStatic::_SoundGroupStatic(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006A10C0) --------------------------------------------------------
void __thiscall SoundGroupBgm::SetFadeDurationTime(SoundGroupBgm *this, float fDuration)
{
  this->m_fDurationToFade = fDuration;
}

//----- (006A10D0) --------------------------------------------------------
void __thiscall SoundGroupBgm::SetCrossFade(SoundGroupBgm *this, bool bCross)
{
  this->m_bCrossFade = bCross;
}

//----- (006A10E0) --------------------------------------------------------
bool __thiscall SoundGroupBgm::Initialize(SoundGroupBgm *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount)
{
  SoundGroup *v3; // esi@1
  bool result; // al@1

  v3 = (SoundGroup *)this;
  result = SoundGroup::Initialize(&this->baseclass_0.baseclass_0, rkMgr, dwOccupyingChannelCount);
  if ( result )
  {
    v3->vfptr->SetTableSize(v3, 2u);
    SoundGroup::SetTable(v3, 0, "bogus");
    SoundGroup::SetTable(v3, 1u, "bogus");
    result = 1;
  }
  return result;
}

//----- (006A1130) --------------------------------------------------------
bool __thiscall SoundGroupBgm::IsBGMPlaying(SoundGroupBgm *this)
{
  NiAudioSource *v1; // eax@1
  int v2; // eax@2

  v1 = SoundGroupStatic::GetSoundDirectly(&this->baseclass_0, this->m_iCurrSourceIndex);
  if ( !v1
    || (v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)(v1),
        v2 != 1) )
    LOBYTE(v2) = 0;
  return v2;
}

//----- (006A1160) --------------------------------------------------------
void __thiscall IAmbientArea::Update(IAmbientArea *this, float x, float y)
{
  IAmbientArea *v3; // esi@1
  bool v4; // bl@1
  int v5; // eax@3

  v3 = this;
  v4 = ((int (__stdcall *)(_DWORD, _DWORD))this->vfptr->IsInside)(LODWORD(x), LODWORD(y));
  if ( v4 )
  {
    if ( !v3->m_bWasInside )
    {
      v5 = (**(int (__stdcall ***)(_DWORD))v3->m_pkSoundMgr)(v3);
      v3->m_bWasInside = v4;
      v3->m_iIndex = v5;
      return;
    }
  }
  else
  {
    if ( v3->m_bWasInside )
    {
      if ( v3->m_iIndex >= 0 )
        ((void (__stdcall *)(_DWORD))v3->m_pkSoundMgr->vfptr->OnExitArea)(v3);
    }
  }
  v3->m_bWasInside = v4;
}

//----- (006A11C0) --------------------------------------------------------
void __thiscall IAmbientArea::SetVolume(IAmbientArea *this, int iVolume)
{
  this->m_iVolume = iVolume;
}

//----- (006A11D0) --------------------------------------------------------
void __thiscall CircleAmbientArea::Create(CircleAmbientArea *this, float fX, float fY, float fRadius)
{
  this->m_fX = fX;
  this->m_fY = fY;
  this->m_fRadius = fRadius;
}

//----- (006A11F0) --------------------------------------------------------
bool __thiscall CircleAmbientArea::IsInside(CircleAmbientArea *this, float x, float y)
{
  float v3; // ST00_4@1
  double v4; // st7@1
  float dy; // [sp+Ch] [bp+8h]@1
  float dya; // [sp+Ch] [bp+8h]@1
  float dyb; // [sp+Ch] [bp+8h]@1

  v3 = this->m_fX - x;
  dy = this->m_fY - y;
  dya = dy * dy + v3 * v3;
  v4 = dya;
  dyb = this->m_fRadius * this->m_fRadius;
  return dyb > v4;
}

//----- (006A1250) --------------------------------------------------------
float __thiscall CircleAmbientArea::GetRadius(CircleAmbientArea *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fRadius;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (006A1260) --------------------------------------------------------
void __thiscall SoundGroupAmbient::SetGain(SoundGroupAmbient *this, float fVolume)
{
  SoundGroup *v2; // esi@1

  v2 = (SoundGroup *)this;
  ((void (__stdcall *)(_DWORD))this->m_k3DAmbient.baseclass_0.baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVolume));
  SoundGroup::SetGain(v2, fVolume);
}

//----- (006A1290) --------------------------------------------------------
void __thiscall SoundGroupInterface::SetGain(SoundGroupInterface *this, float fVolume)
{
  SoundGroupInterface *v2; // esi@1
  float v3; // ST08_4@1
  float fVolumea; // [sp+14h] [bp+8h]@1

  v2 = this;
  v3 = SoundGroup::ms_fMasterGain * fVolume;
  SoundGroup::SetGain(&this->baseclass_0.baseclass_0.baseclass_0, v3);
  fVolumea = SoundGroup::ms_fMasterGain * fVolume;
  ((void (__stdcall *)(_DWORD))v2->m_kDynamicGroup.baseclass_0.vfptr->SetGain)(LODWORD(fVolumea));
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (006A12E0) --------------------------------------------------------
void __thiscall SoundGroupInterface::SetEnable(SoundGroupInterface *this, bool bEnable)
{
  SoundGroupInterface *v2; // esi@1

  v2 = this;
  SoundGroup::SetEnable(&this->baseclass_0.baseclass_0.baseclass_0, bEnable);
  v2->m_kDynamicGroup.baseclass_0.vfptr->SetEnable((SoundGroup *)&v2->m_kDynamicGroup, bEnable);
}

//----- (006A1310) --------------------------------------------------------
bool __thiscall SoundGroupMainChar::Initialize(SoundGroupMainChar *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount)
{
  SoundGroup *v3; // esi@1
  bool result; // al@1

  v3 = (SoundGroup *)this;
  result = SoundGroup::Initialize(&this->baseclass_0.baseclass_0.baseclass_0, rkMgr, dwOccupyingChannelCount);
  if ( result )
  {
    v3->vfptr->SetTableSize(v3, 2u);
    SoundGroup::SetTable(v3, 0, "run_nor.wav");
    result = 1;
  }
  return result;
}

//----- (006A1350) --------------------------------------------------------
void __thiscall SoundGroupBgm::SetGain(SoundGroupBgm *this, float fVolume)
{
  SoundGroupBgm *v2; // edi@1
  NiTListItem<NiAudioSource *> *v3; // esi@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // edx@2
  float v5; // ST0C_4@2

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead;
  this->baseclass_0.baseclass_0.m_fGain = fVolume;
  while ( v3 )
  {
    v4 = v3->m_element->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor;
    v3 = v3->m_pkNext;
    v5 = v2->m_fBgmVol * fVolume * SoundGroup::ms_fMasterGain;
    ((void (__stdcall *)(_DWORD))v4)(LODWORD(v5));
  }
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (006A13B0) --------------------------------------------------------
NiPoint2 *__thiscall CircleAmbientArea::GetCenter(CircleAmbientArea *this, NiPoint2 *result)
{
  NiPoint2 *v2; // eax@1

  v2 = result;
  result->x = this->m_fX;
  result->y = this->m_fY;
  return v2;
}

//----- (006A13D0) --------------------------------------------------------
void __thiscall SoundGroupAmbient::Update(SoundGroupAmbient *this, float fTime)
{
  SoundGroupAmbient *v2; // esi@1
  int v3; // eax@1
  NiTListItem<IAmbientArea *> *v4; // edi@1
  IAmbientArea *v5; // esi@2
  bool v6; // bl@2
  int kPos; // [sp+18h] [bp-10h]@1
  int kPos_4; // [sp+1Ch] [bp-Ch]@1
  SoundGroupAmbient *v9; // [sp+24h] [bp-4h]@1

  v2 = this;
  v9 = this;
  v3 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
  v4 = v2->m_kAreaList.baseclass_0.baseclass_0.m_pkHead;
  kPos = *(_DWORD *)v3;
  kPos_4 = *(_DWORD *)(v3 + 4);
  if ( v4 )
  {
    do
    {
      v5 = v4->m_element;
      v4 = v4->m_pkNext;
      v6 = ((int (__thiscall *)(IAmbientArea *, int, int))v5->vfptr->IsInside)(v5, kPos, kPos_4);
      if ( v6 )
      {
        if ( !v5->m_bWasInside )
          v5->m_iIndex = (**(int (__stdcall ***)(IAmbientArea *))v5->m_pkSoundMgr)(v5);
      }
      else
      {
        if ( v5->m_bWasInside && v5->m_iIndex >= 0 )
          ((void (__stdcall *)(IAmbientArea *))v5->m_pkSoundMgr->vfptr->OnExitArea)(v5);
      }
      v5->m_bWasInside = v6;
    }
    while ( v4 );
    v2 = v9;
  }
  SoundGroup::Update(&v2->baseclass_0.baseclass_0, fTime);
}

//----- (006A1480) --------------------------------------------------------
bool __thiscall SoundGroupAmbient::Initialize(SoundGroupAmbient *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount)
{
  SoundGroupAmbient *v3; // esi@1
  bool result; // al@2

  v3 = this;
  if ( SoundGroup::Initialize(&this->baseclass_0.baseclass_0, rkMgr, 3u)
    && (v3->baseclass_0.baseclass_0.vfptr->SetTableSize((SoundGroup *)v3, 3u),
        v3->m_k3DAmbient.baseclass_0.baseclass_0.baseclass_0.vfptr->Initialize(
          (SoundGroup *)&v3->m_k3DAmbient,
          rkMgr,
          dwOccupyingChannelCount - 3)) )
  {
    v3->m_k3DAmbient.baseclass_0.baseclass_0.m_dwMaxUniqueSourceCount = 10;
    v3->m_fPlaying2DVolume[0] = 0.0;
    v3->m_fPlaying2DVolume[1] = 0.0;
    result = 1;
    v3->m_fPlaying2DVolume[2] = 0.0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006A14F0) --------------------------------------------------------
void __thiscall SoundGroupAmbient::SetAmbientVolumeSync(SoundGroupAmbient *this)
{
  SoundGroupAmbient *v1; // edi@1
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v2; // esi@1
  SoundGroupAmbient::PlayingAreaInfo *v3; // eax@2
  float v4; // ST14_4@2
  unsigned int v5; // esi@3
  int v6; // ebx@4
  NiAudioSource *v7; // eax@5
  float v8; // ST14_4@6

  v1 = this;
  v2 = this->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element;
    v2 = v2->m_pkNext;
    v4 = v3->fVolume * v1->baseclass_0.baseclass_0.m_fGain * SoundGroup::ms_fMasterGain;
    ((void (__stdcall *)(_DWORD))v3->pkSource->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor)(LODWORD(v4));
  }
  v5 = 0;
  if ( v1->baseclass_0.baseclass_0.m_dwOccupyingChannelCount )
  {
    v6 = (int)v1->m_fPlaying2DVolume;
    do
    {
      v7 = SoundGroupStatic::GetSoundDirectly(&v1->baseclass_0, v5);
      if ( v7 )
      {
        v8 = v1->baseclass_0.baseclass_0.m_fGain * *(float *)v6 * SoundGroup::ms_fMasterGain;
        v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor((NiRefObject *)v7, LODWORD(v8));
      }
      ++v5;
      v6 += 4;
    }
    while ( v5 < v1->baseclass_0.baseclass_0.m_dwOccupyingChannelCount );
  }
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (006A1580) --------------------------------------------------------
bool __thiscall SoundGroupInterface::Initialize(SoundGroupInterface *this, SoundMgr *rkMgr, unsigned int dwOccupyingChannelCount)
{
  SoundGroupInterface *v3; // esi@1
  bool result; // al@2

  v3 = this;
  if ( SoundGroup::Initialize(&this->baseclass_0.baseclass_0.baseclass_0, rkMgr, dwOccupyingChannelCount)
    && (v3->baseclass_0.baseclass_0.baseclass_0.vfptr->SetTableSize((SoundGroup *)v3, 67u),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0, "interface\\KDSUCCESS.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 1u, "interface\\KDFAIL.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 2u, "interface\\ISSUE.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 3u, "interface\\WEAPONTITLE.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 4u, "interface\\SFX_CLICK.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 5u, "interface\\SFX_QITEMGET.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 6u, "interface\\SFX_RITEMGET.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 7u, "interface\\SFX_STARTQUEST.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 8u, "interface\\SFX_ENDQUEST.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 9u, "interface\\SFX_LVUP.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0xBu, "interface\\SFX_SLOTEND.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0xCu, "interface\\SFX_UPBEST.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0xDu, "interface\\SFX_UPGOOD.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0xEu, "interface\\SFX_UPWORST.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0xFu, "interface\\SFX_LEARNSKILL.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x10u, "interface\\SFX_MoneyGet.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x11u, "interface\\CharCreate.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x12u, "interface\\CharCreateArc.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x13u, "interface\\CharCreateClass.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x14u, "interface\\CharCreateClr.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x15u, "interface\\CharCreateFig.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x16u, "interface\\CharCreateMag.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x17u, "interface\\CharCreateSex.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x18u, "interface\\SFX_ConFriend.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x19u, "interface\\SFX_KQLast.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x1Au, "interface\\SFX_SoulStone.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x1Bu, "interface\\SFX_WDClosed.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x1Cu, "interface\\SFX_UChatJ.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x1Du, "interface\\SFX_UChatM.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x1Eu, "interface\\SFX_OXField.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x1Fu, "interface\\SFX_Critical01.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x20u, "interface\\DiceConnect.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x21u, "interface\\DiceStartBetting.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x22u, "interface\\DiceBettingLogo.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x23u, "interface\\DiceOutMoney.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x24u, "interface\\DiceChipsPiledUp_Pair.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x25u, "interface\\DiceChipsPiledUp_Single.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x26u, "interface\\DiceBettingCheckUp.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x27u, "interface\\Cast_Clock.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x28u, "interface\\Cast_Alarm.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x29u, "interface\\Dice_CoinClick.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x2Au, "interface\\DiceRoll_Pair.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x2Bu, "interface\\DiceRoll_Single01.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x2Cu, "interface\\DiceFinalResult.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x2Du, "interface\\Dice_fanfare.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x2Eu, "interface\\MysteryVaultAlarm.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x2Fu, "interface\\PutOnClear.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x30u, "interface\\Collect_CardOpen.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x31u, "interface\\Collect_CardReward.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x32u, "interface\\GB_SM_Bet.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x33u, "interface\\GB_SM_Cancle.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x34u, "interface\\GB_SM_FullBet.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x35u, "interface\\GB_SM_Lose.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x36u, "interface\\GB_SM_Open.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x37u, "interface\\GB_SM_ReelEnd.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x38u, "interface\\GB_SM_ReelLoop.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x39u, "interface\\GB_SM_ReelStart.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x3Au, "interface\\GB_SM_Reset.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x3Bu, "interface\\GB_SM_Spin.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x3Cu, "interface\\GB_SM_Stop.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x3Du, "interface\\GB_SM_Win.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x3Eu, "interface\\CharCreateJok.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x3Fu, "interface\\SFX_ItemSort.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x40u, "interface\\SFX_MBoxGet.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x41u, "interface\\SFX_ItemPutRing.wav"),
        SoundGroup::SetTable(&v3->baseclass_0.baseclass_0.baseclass_0, 0x42u, "interface\\RandomOptionProgress.wav"),
        v3->m_kDynamicGroup.baseclass_0.vfptr->Initialize(
          (SoundGroup *)&v3->m_kDynamicGroup,
          rkMgr,
          dwOccupyingChannelCount - 1)) )
  {
    v3->m_kDynamicGroup.m_dwMaxUniqueSourceCount = 7;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006A1980) --------------------------------------------------------
void __thiscall SoundGroupInterface::PlaySoundDynamic(SoundGroupInterface *this, char *pcFilename)
{
  SoundGroupInterface *v2; // esi@1
  char *v3; // eax@1
  NiAudioSource *(__thiscall *v4)(SoundGroup *, SoundIndex *, bool, bool); // edx@1
  char v5; // [sp+4h] [bp-8h]@1
  char *v6; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = fs("interface\\%s.wav");
  v4 = v2->m_kDynamicGroup.baseclass_0.vfptr->PlaySoundA;
  v6 = v3;
  v4(&v2->m_kDynamicGroup.baseclass_0, (SoundIndex *)&v5, 0, 0);
}

//----- (006A19C0) --------------------------------------------------------
void __thiscall SoundGroupBgm::NextBgm(SoundGroupBgm *this, bool bLoop)
{
  SoundGroupBgm *v2; // esi@1
  char *v3; // eax@3
  NiAudioSource *v4; // edi@5
  NiRefObjectVtbl *v5; // ebx@6
  float v6; // ST1C_4@6
  double v7; // st7@6
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // eax@6
  float v9; // ST18_4@6
  NiAudioSource *(__thiscall *v10)(SoundGroup *, SoundIndex *, bool, bool); // edx@6
  int v11; // [sp+2Ch] [bp-10h]@5
  int v12; // [sp+30h] [bp-Ch]@5
  SoundIndex rkIndex; // [sp+34h] [bp-8h]@2

  v2 = this;
  if ( SoundGroupStatic::GetSoundDirectly(&this->baseclass_0, this->m_iCurrSourceIndex) )
  {
    rkIndex.m_dwIndex = v2->m_iCurrSourceIndex;
    rkIndex.m_acFilename = 0;
    SoundGroupStatic::UnloadSound(&v2->baseclass_0, &rkIndex);
  }
  v3 = (char *)&v2->m_kNextBgmFn;
  if ( v2->m_kNextBgmFn.baseclass_0._Myres >= 0x10 )
    v3 = *(char **)v3;
  SoundGroup::SetTable(&v2->baseclass_0.baseclass_0, v2->m_iCurrSourceIndex, v3);
  v11 = v2->m_iCurrSourceIndex;
  v12 = 0;
  v4 = SoundGroupStatic::GetSound(&v2->baseclass_0, (SoundIndex *)&v11, 1);
  if ( v4 )
  {
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor(
      (NiRefObject *)v4,
      COERCE_UNSIGNED_INT(0.0));
    v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = v2->m_fDurationToFade;
    v7 = NiGetCurrentTimeInSec();
    v8 = v5[49].__vecDelDtor;
    v9 = v7;
    *(float *)&rkIndex.m_acFilename = v2->m_fBgmVol * v2->baseclass_0.baseclass_0.m_fGain * SoundGroup::ms_fMasterGain;
    ((void (__thiscall *)(NiAudioSource *, char *, _DWORD, _DWORD))v8)(
      v4,
      rkIndex.m_acFilename,
      LODWORD(v9),
      LODWORD(v6));
    v10 = v2->baseclass_0.baseclass_0.vfptr->PlaySoundA;
    rkIndex.m_dwIndex = v2->m_iCurrSourceIndex;
    rkIndex.m_acFilename = 0;
    v10(&v2->baseclass_0.baseclass_0, &rkIndex, bLoop, 1);
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor(
      (NiRefObject *)v4,
      COERCE_UNSIGNED_INT(0.0));
    v2->m_eState = 4;
    v2->m_bPlayStarted = 1;
  }
  else
  {
    v2->m_eState = 5;
    v2->m_bPlayStarted = 0;
  }
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (006A1AD0) --------------------------------------------------------
void __thiscall SoundGroupAmbient::OnExitArea(SoundGroupAmbient *this, IAmbientArea *pkArea)
{
  SoundGroupAmbient *v2; // ebx@1
  MapAmbienceSoundInfo::SoundType v3; // eax@1
  NiAudioSource *v4; // esi@3
  NiRefObjectVtbl *v5; // edi@5
  float v6; // ST04_4@5
  NiTListItem<void *> *v7; // eax@7
  int v8; // edx@8
  void *v9; // esi@9
  NiTListItem<NiAudioSource *> *v10; // eax@12
  NiAudioSource *v11; // esi@13
  NiAudioSource *v12; // ecx@14
  void *v13; // eax@18
  SoundIndex rkIndex; // [sp+18h] [bp-8h]@5

  v2 = this;
  v3 = pkArea->m_eSoundType;
  if ( v3 )
  {
    if ( v3 == 1 )
    {
      v7 = this->m_k3DAmbient.baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
      if ( v7 )
      {
        v8 = pkArea->m_iIndex;
        while ( 1 )
        {
          v9 = v7->m_element;
          pkArea = (IAmbientArea *)v7;
          v7 = v7->m_pkNext;
          if ( v8 == *(_DWORD *)v9 )
            break;
          if ( !v7 )
            return;
        }
        v10 = SoundGroupDynamic::GetPlayingSourceList((SoundGroupDynamic *)&this->baseclass_0.baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_kAllocator)->baseclass_0.baseclass_0.m_pkHead;
        if ( v10 )
        {
          v11 = (NiAudioSource *)*((_DWORD *)v9 + 1);
          while ( 1 )
          {
            v12 = v10->m_element;
            v10 = v10->m_pkNext;
            if ( v12 == v11 )
              break;
            if ( !v10 )
              goto LABEL_18;
          }
          ((void (*)(void))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)();
        }
LABEL_18:
        v13 = NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
                (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v2->m_k3DAmbient.baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead,
                (void **)&pkArea);
        operator delete(v13);
      }
    }
  }
  else
  {
    if ( pkArea->m_iIndex >= 0 )
    {
      v4 = SoundGroupStatic::GetSoundDirectly((SoundGroupStatic *)this - 1, pkArea->m_iIndex);
      if ( v4 )
      {
        if ( ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)(v4) == 1 )
        {
          v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v6 = NiGetCurrentTimeInSec();
          ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v5[49].__vecDelDtor)(v4, 0.0, LODWORD(v6), 3.0);
          ((void (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(v4);
          rkIndex.m_dwIndex = pkArea->m_iIndex;
          rkIndex.m_acFilename = 0;
          SoundGroupStatic::UnloadSound((SoundGroupStatic *)v2 - 1, &rkIndex);
        }
      }
    }
  }
}

//----- (006A1BF0) --------------------------------------------------------
void __thiscall SoundGroupBgm::SoundGroupBgm(SoundGroupBgm *this)
{
  SoundGroupBgm *v1; // esi@1

  v1 = this;
  SoundGroupStatic::SoundGroupStatic(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupBgm::_vftable_;
  v1->m_kNextBgmFn.baseclass_0._Mysize = 0;
  v1->m_kNextBgmFn.baseclass_0._Myres = 15;
  v1->m_kNextBgmFn.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_fDurationToFade = 6.0;
  v1->m_fPlayEndTime = -1.0;
  v1->m_iOldSourceIndex = 1;
  v1->m_bCrossFade = 1;
  *(_WORD *)&v1->m_bRandomPlayOn = 0;
  v1->m_fBgmVol = 0.0;
  v1->m_iCurrSourceIndex = 0;
  v1->m_uiBgmCount = 0;
  v1->m_eState = 5;
  v1->m_kCurrPlayingMapID = -1;
}
// 9C834C: using guessed type int (__stdcall *SoundGroupBgm___vftable_)(int result, int uiType);

//----- (006A1C60) --------------------------------------------------------
void __thiscall SoundGroupBgm::StopBGM(SoundGroupBgm *this)
{
  SoundGroupBgm *v1; // esi@1
  NiAudioSource *v2; // eax@3
  NiAudioSource *v3; // eax@5
  NiAudioSource *v4; // eax@6
  NiAudioSource *v5; // edi@6
  NiRefObjectVtbl *v6; // ebx@8
  float v7; // ST14_4@8
  float v8; // ST10_4@8
  NiAudioSource *v9; // eax@9
  NiAudioSource *v10; // edi@9
  NiRefObjectVtbl *v11; // ebx@11
  float v12; // ST14_4@11
  float v13; // ST10_4@11
  bool v14; // cf@12

  v1 = this;
  if ( 0.0 == this->m_fDurationToFade )
  {
    if ( SoundGroupStatic::GetSoundDirectly(&this->baseclass_0, this->m_iCurrSourceIndex) )
    {
      v2 = SoundGroupStatic::GetSoundDirectly(&v1->baseclass_0, v1->m_iCurrSourceIndex);
      ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(v2);
      v1->m_eState = 5;
    }
    if ( SoundGroupStatic::GetSoundDirectly(&v1->baseclass_0, v1->m_iOldSourceIndex) )
    {
      v3 = SoundGroupStatic::GetSoundDirectly(&v1->baseclass_0, v1->m_iOldSourceIndex);
      ((void (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(v3);
      v1->m_eState = 5;
    }
  }
  else
  {
    v4 = SoundGroupStatic::GetSoundDirectly(&this->baseclass_0, this->m_iCurrSourceIndex);
    v5 = v4;
    if ( v4
      && ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)(v4) == 1 )
    {
      v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = v1->m_fDurationToFade;
      v8 = NiGetCurrentTimeInSec();
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v6[49].__vecDelDtor)(v5, 0.0, LODWORD(v8), LODWORD(v7));
      v1->m_eState = 2;
    }
    v9 = SoundGroupStatic::GetSoundDirectly(&v1->baseclass_0, v1->m_iOldSourceIndex);
    v10 = v9;
    if ( v9
      && ((int (__thiscall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)(v9) == 1 )
    {
      v11 = v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v12 = v1->m_fDurationToFade;
      v13 = NiGetCurrentTimeInSec();
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v11[49].__vecDelDtor)(v10, 0.0, LODWORD(v13), LODWORD(v12));
      v1->m_eState = 2;
    }
  }
  *(_WORD *)&v1->m_bRandomPlayOn = 0;
  v14 = v1->m_kNextBgmFn.baseclass_0._Myres < 0x10;
  v1->m_kNextBgmFn.baseclass_0._Mysize = 0;
  if ( v14 )
    v1->m_kNextBgmFn.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  else
    **(_BYTE **)&v1->m_kNextBgmFn.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (006A1D90) --------------------------------------------------------
int __thiscall SoundGroupAmbient::OnEnterArea(SoundGroupAmbient *this, IAmbientArea *pkArea)
{
  IAmbientArea *v2; // ebx@1
  MapAmbienceSoundInfo::SoundType v3; // eax@1
  void *v4; // edi@1
  unsigned int v5; // esi@2
  char *v7; // eax@6
  int (__thiscall *v8)(_DWORD, _DWORD, _DWORD, _DWORD); // eax@8
  NiAudioSource *v9; // eax@9
  NiAudioSource *v10; // ecx@9
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // eax@9
  NiTListItem<void *> *v12; // eax@11
  char v13; // dl@11
  void *v14; // ecx@12
  NiTListItem<NiAudioSource *> *v15; // ecx@16
  NiRefObjectVtbl *v16; // eax@17
  const char *v17; // esi@17
  char *v18; // eax@17
  unsigned int v19; // esi@17
  const char v20; // cl@17
  int v21; // eax@24
  float v22; // edx@24
  int v23; // eax@24
  double v24; // st7@24
  bool v25; // cf@24
  int v26; // eax@24
  int v27; // esi@26
  float (__thiscall *v28)(IAmbientArea *); // eax@27
  double v29; // st7@27
  bool v30; // zf@28
  float v31; // ST18_4@29
  void *v32; // eax@29
  double v33; // st7@29
  int v34; // edx@29
  NiPoint3 kPoint3; // [sp+28h] [bp-20h]@24
  char v36; // [sp+34h] [bp-14h]@24
  int v37; // [sp+38h] [bp-10h]@26
  float pkInfo; // [sp+3Ch] [bp-Ch]@8
  NiD3DXEffectParameter *element; // [sp+40h] [bp-8h]@1
  NiTListItem<NiAudioSource *> *iTimes; // [sp+44h] [bp-4h]@17
  float fRadiusa; // [sp+50h] [bp+8h]@9
  float fRadiusb; // [sp+50h] [bp+8h]@9
  float fRadius; // [sp+50h] [bp+8h]@27
  float fRadiusc; // [sp+50h] [bp+8h]@29
  float fRadiusd; // [sp+50h] [bp+8h]@29
  float fRadiuse; // [sp+50h] [bp+8h]@29

  v2 = pkArea;
  v3 = pkArea->m_eSoundType;
  v4 = this;
  element = (NiD3DXEffectParameter *)this;
  if ( !v3 )
  {
    v5 = 0;
    if ( *((_DWORD *)this - 15) )
    {
      while ( SoundGroupStatic::GetSoundDirectly((SoundGroupStatic *)v4 - 1, v5) )
      {
        ++v5;
        if ( v5 >= *((_DWORD *)v4 - 15) )
          return 0;
      }
      v7 = (char *)&pkArea->m_kSndFilename;
      if ( pkArea->m_kSndFilename.baseclass_0._Myres >= 0x10 )
        v7 = *(char **)v7;
      SoundGroup::SetTable((SoundGroup *)((char *)v4 - 64), v5, v7);
      v8 = *(int (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*((_DWORD *)v4 - 16) + 24);
      LODWORD(pkInfo) = v5;
      element = 0;
      if ( v8((char *)v4 - 64, &pkInfo, 1, 1) )
      {
        LODWORD(pkInfo) = v5;
        element = 0;
        v9 = SoundGroupStatic::GetSound((SoundGroupStatic *)v4 - 1, (SoundIndex *)&pkInfo, 1);
        v10 = v9;
        v11 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor;
        fRadiusa = (double)pkArea->m_iVolume * 0.009999999776482582;
        *((float *)v4 + v5 + 41) = fRadiusa;
        fRadiusb = fRadiusa * *((float *)v4 - 7) * SoundGroup::ms_fMasterGain;
        v11(&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0, LODWORD(fRadiusb));
        return v5;
      }
    }
    return 0;
  }
  if ( v3 == 1 )
  {
    v12 = this->m_k3DAmbient.baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v13 = 0;
    if ( !v12 )
      goto LABEL_24;
    do
    {
      v14 = v12->m_element;
      v12 = v12->m_pkNext;
      if ( *(_DWORD *)v14 == pkArea->m_iIndex )
        v13 = 1;
    }
    while ( v12 );
    if ( v13
      && (v15 = SoundGroupDynamic::GetPlayingSourceList((SoundGroupDynamic *)((char *)v4 + 20))->baseclass_0.baseclass_0.m_pkHead) != 0 )
    {
      while ( 1 )
      {
        v16 = v15->m_element->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        iTimes = v15->m_pkNext;
        v17 = (const char *)((int (*)(void))v16[35].__vecDelDtor)();
        v18 = IAmbientArea::GetSndFilename(v2);
        v19 = (unsigned int)&v17[strlen(v17) - strlen(v18)];
        v20 = *v18;
        if ( !*v18 )
          break;
        while ( v20 == *(_BYTE *)v19 )
        {
          v20 = (v18++)[1];
          ++v19;
          if ( !v20 )
            return 0;
        }
        v2 = pkArea;
        if ( !iTimes )
        {
          v4 = element;
          goto LABEL_24;
        }
        v15 = iTimes;
      }
    }
    else
    {
LABEL_24:
      v21 = (int)v2->vfptr->GetCenter(v2, (NiPoint2 *)&v36);
      LODWORD(v22) = *(_DWORD *)(v21 + 4);
      LODWORD(pkInfo) = *(_DWORD *)v21;
      kPoint3.x = pkInfo;
      element = (NiD3DXEffectParameter *)LODWORD(v22);
      kPoint3.y = v22;
      v23 = ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
      v24 = *(float *)(v23 + 8);
      v25 = v2->m_kSndFilename.baseclass_0._Myres < 0x10;
      kPoint3.z = *(float *)(v23 + 8);
      v26 = (int)&v2->m_kSndFilename;
      if ( !v25 )
        v26 = *(_DWORD *)v26;
      v37 = v26;
      v27 = (*(int (__thiscall **)(char *, char *, NiPoint3 *, signed int))(*((_DWORD *)v4 + 5) + 32))(
              (char *)v4 + 20,
              &v36,
              &kPoint3,
              1);
      if ( v27 )
      {
        v28 = v2->vfptr->GetRadius;
        iTimes = (NiTListItem<NiAudioSource *> *)8;
        v28(v2);
        fRadius = v24;
        v29 = fRadius;
        do
        {
          v30 = iTimes == (NiTListItem<NiAudioSource *> *)1;
          iTimes = (NiTListItem<NiAudioSource *> *)((char *)iTimes - 1);
          fRadius = fRadius * 0.5;
        }
        while ( !v30 );
        v31 = v29;
        fRadiusc = fRadius * SoundGroup::ms_fSoundMin;
        (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v27 + 180))(v27, LODWORD(fRadiusc), LODWORD(v31));
        v32 = operator new(0xCu);
        *(_DWORD *)v32 = v2->m_iIndex;
        *((_DWORD *)v32 + 1) = v27;
        v33 = (double)v2->m_iVolume;
        v34 = *(_DWORD *)v27;
        element = (NiD3DXEffectParameter *)v32;
        fRadiusd = v33 * 0.009999999776482582;
        *((float *)v32 + 2) = fRadiusd;
        fRadiuse = fRadiusd * *((float *)v4 - 7) * SoundGroup::ms_fMasterGain;
        (*(void (__thiscall **)(int, _DWORD))(v34 + 188))(v27, LODWORD(fRadiuse));
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)((char *)v4 + 148),
          &element);
      }
    }
    return 0;
  }
  return -1;
}
// A81B04: using guessed type float SoundGroup__ms_fSoundMin;
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;

//----- (006A2050) --------------------------------------------------------
bool __thiscall SoundGroupFieldEffect::Check3DSoundPlayable(SoundGroupFieldEffect *this, NiPoint3 *rkPoint)
{
  SoundGroupFieldEffect *v2; // ebx@1
  NiMilesListener *v3; // eax@2
  NiPoint3 *v4; // ecx@2
  NiTListItem<NiAudioSource *> *v5; // esi@3
  NiAudioSource *v6; // edi@4
  NiMilesListener *v7; // eax@4
  int v8; // esi@9
  bool result; // al@12
  void *currIter; // [sp+0h] [bp-24h]@4
  NiPoint3 *fDistanceSqr; // [sp+4h] [bp-20h]@4
  float v12; // [sp+8h] [bp-1Ch]@4
  float v13; // [sp+Ch] [bp-18h]@4
  float fTryingSourceDistance; // [sp+10h] [bp-14h]@2
  float farthestIter; // [sp+14h] [bp-10h]@2
  int v16; // [sp+20h] [bp-4h]@11

  v2 = this;
  if ( SoundGroup::IsChannelFull(&this->baseclass_0.baseclass_0) )
  {
    v3 = NiMilesAudioSystem::GetListener(v2->baseclass_0.baseclass_0.m_pkAudioSystem);
    v4 = rkPoint;
    fTryingSourceDistance = rkPoint->x - v3->baseclass_0.baseclass_0.m_kWorld.m_Translate.x;
    *(float *)&rkPoint = rkPoint->y - v3->baseclass_0.baseclass_0.m_kWorld.m_Translate.y;
    farthestIter = v4->z - v3->baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
    fTryingSourceDistance = *(float *)&rkPoint * *(float *)&rkPoint
                          + fTryingSourceDistance * fTryingSourceDistance
                          + farthestIter * farthestIter;
    if ( fTryingSourceDistance >= v2->baseclass_0.baseclass_0.m_fSoundMaxRange
                                * v2->baseclass_0.baseclass_0.m_fSoundMaxRange
      || (v5 = v2->baseclass_0.baseclass_0.m_kPlayingSourceList.baseclass_0.baseclass_0.m_pkHead,
          *(float *)&rkPoint = 0.0,
          farthestIter = 0.0,
          !v5) )
      goto LABEL_17;
    do
    {
      v6 = v5->m_element;
      currIter = v5;
      v5 = v5->m_pkNext;
      v7 = NiMilesAudioSystem::GetListener(v2->baseclass_0.baseclass_0.m_pkAudioSystem);
      v12 = v6->baseclass_0.m_kWorld.m_Translate.x - v7->baseclass_0.baseclass_0.m_kWorld.m_Translate.x;
      v13 = v6->baseclass_0.m_kWorld.m_Translate.y - v7->baseclass_0.baseclass_0.m_kWorld.m_Translate.y;
      *(float *)&fDistanceSqr = v6->baseclass_0.m_kWorld.m_Translate.z
                              - v7->baseclass_0.baseclass_0.m_kWorld.m_Translate.z;
      *(float *)&fDistanceSqr = v13 * v13 + v12 * v12 + *(float *)&fDistanceSqr * *(float *)&fDistanceSqr;
      if ( *(float *)&rkPoint < (double)*(float *)&fDistanceSqr )
      {
        rkPoint = fDistanceSqr;
        LODWORD(farthestIter) = currIter;
      }
    }
    while ( v5 );
    if ( *(float *)&rkPoint > 0.0
      && fTryingSourceDistance < (double)*(float *)&rkPoint
      && (v8 = *(_DWORD *)(LODWORD(farthestIter) + 8)) != 0 )
    {
      (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v8 + 220))(*(_DWORD *)(LODWORD(farthestIter) + 8));
      if ( !v2->baseclass_0.baseclass_0.vfptr->IsUniqueSource((SoundGroup *)v2, (NiMilesSource *)v8) )
      {
        SoundGroupDynamic::PushInRecycleList(&v2->baseclass_0, (NiAudioSource *)v8);
        rkPoint = (NiPoint3 *)v8;
        InterlockedIncrement((volatile LONG *)(v8 + 4));
        v16 = 0;
        NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v2->baseclass_0.m_kActiveSourceList,
          (NiPointer<PgWin> *)&fDistanceSqr,
          (NiPointer<PgWin> *)&rkPoint);
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&fDistanceSqr);
        v16 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&rkPoint);
      }
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v2->baseclass_0.baseclass_0.m_kPlayingSourceList,
        (void **)&farthestIter);
      result = 1;
    }
    else
    {
LABEL_17:
      result = 0;
    }
  }
  else
  {
    result = SoundGroup::IsOutofMaxRange(&v2->baseclass_0.baseclass_0, rkPoint) == 0;
  }
  return result;
}

//----- (006A2270) --------------------------------------------------------
void __thiscall SoundGroupAmbient::ClearArea(SoundGroupAmbient *this)
{
  SoundGroupAmbient *v1; // esi@1
  NiTListItem<IAmbientArea *> *v2; // eax@2
  NiTListItem<IAmbientArea *> *v3; // ecx@2
  IAmbientArea *v4; // edi@5

  v1 = this;
  ((void (*)(void))this->baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
  while ( *(_DWORD *)&v1->m_kAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
  {
    v2 = v1->m_kAreaList.baseclass_0.baseclass_0.m_pkHead;
    v3 = v2->m_pkNext;
    v1->m_kAreaList.baseclass_0.baseclass_0.m_pkHead = v2->m_pkNext;
    if ( v3 )
      v3->m_pkPrev = 0;
    else
      v1->m_kAreaList.baseclass_0.baseclass_0.m_pkTail = 0;
    v4 = v2->m_element;
    v1->m_kAreaList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *> *)&v1->m_kAreaList,
      v2);
    --*(_DWORD *)&v1->m_kAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    if ( v4 )
    {
      if ( v4->m_kSndFilename.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&v4->m_kSndFilename.baseclass_0.___u0.baseclass_0.dummy[0]);
      v4->m_kSndFilename.baseclass_0._Myres = 15;
      v4->m_kSndFilename.baseclass_0._Mysize = 0;
      v4->m_kSndFilename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      operator delete(v4);
    }
  }
}

//----- (006A22F0) --------------------------------------------------------
void __thiscall SoundGroupAmbient::_SoundGroupAmbient(SoundGroupAmbient *this)
{
  SoundGroupAmbient *v1; // ebx@1
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *i; // edx@1
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v3; // eax@2
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v4; // ecx@2
  void *v5; // edi@5
  int v6; // esi@6
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v7; // edi@6
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v8; // ST00_4@7
  int v9; // esi@9
  NiTListItem<IAmbientArea *> *v10; // edi@9
  NiTListItem<IAmbientArea *> *v11; // eax@9
  NiTListItem<IAmbientArea *> *v12; // ST00_4@10

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupAmbient::_vftable_;
  this->baseclass_40.vfptr = (IAmbientSoundManagerVtbl *)&SoundGroupAmbient::_vftable_;
  SoundGroupAmbient::ClearArea(this);
  for ( i = 0; *(_DWORD *)&v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]; i = 0 )
  {
    v3 = v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkHead;
    v4 = v3->m_pkNext;
    v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkHead = v3->m_pkNext;
    if ( v4 == i )
      v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkTail = i;
    else
      v4->m_pkPrev = i;
    v5 = v3->m_element;
    v1->m_kPlayingAreaList.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *)&v1->m_kPlayingAreaList,
      v3);
    --*(_DWORD *)&v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    operator delete(v5);
  }
  v6 = (int)&v1->m_kPlayingAreaList;
  v1->m_kPlayingAreaList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *>Vtbl *)&NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
  v7 = v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkHead;
  if ( v7 != i )
  {
    do
    {
      v8 = v7;
      v7 = v7->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 8))(&v1->m_kPlayingAreaList, v8);
    }
    while ( v7 );
    i = 0;
  }
  *(_DWORD *)&v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = i;
  v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkHead = i;
  v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkTail = i;
  *(_DWORD *)v6 = &NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
  SoundGroupDynamic::_SoundGroupDynamic(&v1->m_k3DAmbient.baseclass_0.baseclass_0);
  v9 = (int)&v1->m_kAreaList;
  v1->m_kAreaList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *>Vtbl *)&NiTPointerListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
  v10 = v1->m_kAreaList.baseclass_0.baseclass_0.m_pkHead;
  v11 = 0;
  if ( v10 )
  {
    do
    {
      v12 = v10;
      v10 = v10->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v9 + 8))(&v1->m_kAreaList, v12);
    }
    while ( v10 );
    v11 = 0;
  }
  *(_DWORD *)&v1->m_kAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = v11;
  v1->m_kAreaList.baseclass_0.baseclass_0.m_pkHead = v11;
  v1->m_kAreaList.baseclass_0.baseclass_0.m_pkTail = v11;
  *(_DWORD *)v9 = &NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
  SoundGroupStatic::_SoundGroupStatic(&v1->baseclass_0);
}
// 9C82D8: using guessed type int (__thiscall *NiTListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);
// 9C82E8: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);
// 9C8328: using guessed type int (__thiscall *NiTPointerListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);
// 9C8338: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);
// 9C83BC: using guessed type int (__stdcall *SoundGroupAmbient___vftable_)(float fRadius);
// 9C83CC: using guessed type int (__stdcall *SoundGroupAmbient___vftable_)(int result, int uiType);

//----- (006A2440) --------------------------------------------------------
void __thiscall IAmbientArea::SetSndFilename(IAmbientArea *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rkSndFn)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_kSndFilename,
    rkSndFn,
    0,
    0xFFFFFFFFu);
}

//----- (006A2460) --------------------------------------------------------
void __thiscall SoundGroupAmbient::LoadAreaTable(SoundGroupAmbient *this, char *pcFn)
{
  char *v2; // eax@3
  unsigned int v3; // esi@4
  void *v4; // edi@5
  void *v5; // eax@7
  void *v6; // esi@8
  float v7; // ST20_4@10
  int v8; // eax@10
  float v9; // ST28_4@10
  double v10; // st7@10
  float v11; // ST30_4@10
  char v12; // dl@11
  int v13; // edx@14
  int v14; // ecx@15
  int v15; // eax@17
  NiTListItem<IAmbientArea *> *v16; // ecx@17
  unsigned int v17; // [sp-10h] [bp-50h]@1
  SoundGroupAmbient *v18; // [sp+4h] [bp-3Ch]@1
  unsigned int i; // [sp+Ch] [bp-34h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+14h] [bp-2Ch]@10
  unsigned int v21; // [sp+30h] [bp-10h]@1
  int v22; // [sp+3Ch] [bp-4h]@12
  int v23; // [sp+40h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v17 = (unsigned int)&v23 ^ __security_cookie;
  v18 = this;
  SoundGroupAmbient::ClearArea(this);
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = fs("%s\\AmbienceSound\\%s.shn");
  if ( ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::Load(v2, 0) )
  {
    v3 = 0;
    i = 0;
    if ( ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::GetTotal() )
    {
      do
      {
        v4 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable + 4),
               v3);
        if ( *((float *)v4 + 35) > -0.0000099999997 && *((float *)v4 + 35) < 0.0000099999997 )
        {
          v5 = operator new(0x40u);
          if ( v5 )
          {
            *((_DWORD *)v5 + 6) = 15;
            *((_DWORD *)v5 + 5) = 0;
            *((_BYTE *)v5 + 4) = 0;
            *((_BYTE *)v5 + 44) = 0;
            *((_DWORD *)v5 + 12) = 0;
            *((_DWORD *)v5 + 10) = 0;
            *((_DWORD *)v5 + 8) = 100;
            *(_DWORD *)v5 = &CircleAmbientArea::_vftable_;
            v6 = v5;
          }
          else
          {
            v6 = 0;
          }
          v7 = *((float *)v4 + 32);
          v8 = (int)((char *)v4 + 32);
          v9 = *((float *)v4 + 33);
          thisa.baseclass_0._Myres = 15;
          v10 = *((float *)v4 + 34);
          thisa.baseclass_0._Mysize = 0;
          v11 = v10;
          thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          *((float *)v6 + 13) = v7;
          *((float *)v6 + 14) = v9;
          *((float *)v6 + 15) = v11;
          do
            v12 = *(_BYTE *)v8++;
          while ( v12 );
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &thisa,
            (const char *)v4 + 32,
            v8 - (_DWORD)((char *)v4 + 33));
          v22 = 0;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v6 + 4),
            &thisa,
            0,
            0xFFFFFFFFu);
          v22 = -1;
          if ( thisa.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&thisa);
          v13 = *((_DWORD *)v4 + 37);
          thisa.baseclass_0._Myres = 15;
          thisa.baseclass_0._Mysize = 0;
          thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          *((_DWORD *)v6 + 8) = v13;
          if ( v18 )
            v14 = (int)&v18->baseclass_40;
          else
            v14 = 0;
          *((_DWORD *)v6 + 12) = v14;
          *((_DWORD *)v6 + 9) = *((_DWORD *)v4 + 38);
          v15 = (int)v18->m_kAreaList.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *> *)&v18->m_kAreaList);
          *(_DWORD *)(v15 + 8) = v6;
          *(_DWORD *)v15 = 0;
          *(_DWORD *)(v15 + 4) = v18->m_kAreaList.baseclass_0.baseclass_0.m_pkTail;
          v16 = v18->m_kAreaList.baseclass_0.baseclass_0.m_pkTail;
          if ( v16 )
            v16->m_pkNext = (NiTListItem<IAmbientArea *> *)v15;
          else
            v18->m_kAreaList.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<IAmbientArea *> *)v15;
          ++*(_DWORD *)&v18->m_kAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
          v3 = i;
          v18->m_kAreaList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<IAmbientArea *> *)v15;
        }
        ++v3;
        i = v3;
      }
      while ( v3 < ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::GetTotal() );
    }
    if ( ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable )
    {
      (**(void (__cdecl ***)(_DWORD))ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable)(v17);
      if ( ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable )
        (*(void (__stdcall **)(signed int))(*(_DWORD *)ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable
                                          + 8))(1);
      ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable = 0;
    }
  }
}
// 9C83AC: using guessed type int (__stdcall *CircleAmbientArea___vftable_)(float dy, float y);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B5B168: using guessed type int ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab___ms_pkTable;

//----- (006A26A0) --------------------------------------------------------
void __thiscall SoundGroupBgm::PlayBGM(SoundGroupBgm *this, char *acFn, bool bLoop, float fBgmVol)
{
  SoundGroupBgm *v4; // esi@1
  bool v5; // cf@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // edi@1
  const char *v7; // eax@2
  NiAudioSource *v8; // edi@8
  NiRefObjectVtbl *v9; // ebx@11
  float v10; // ST28_4@11
  float v11; // ST24_4@11
  unsigned int v12; // ecx@12
  int v13; // eax@12
  char *v14; // ST28_4@12
  NiAudioSource *v15; // edi@14
  NiRefObjectVtbl *v16; // ebx@15
  float v17; // ST28_4@15
  double v18; // st7@15
  void *(__thiscall *v19)(NiRefObject *, unsigned int); // eax@15
  float v20; // ST24_4@15
  NiAudioSource *(__thiscall *v21)(SoundGroup *, SoundIndex *, bool, bool); // edx@15
  int v22; // [sp+3Ch] [bp-144h]@14
  int v23; // [sp+40h] [bp-140h]@14
  int v24; // [sp+44h] [bp-13Ch]@15
  int v25; // [sp+48h] [bp-138h]@15
  SoundIndex rkIndex; // [sp+4Ch] [bp-134h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+54h] [bp-12Ch]@5
  char temp[256]; // [sp+70h] [bp-110h]@7
  unsigned int v29; // [sp+170h] [bp-10h]@1
  int v30; // [sp+17Ch] [bp-4h]@5
  int v31; // [sp+180h] [bp+0h]@1

  v29 = (unsigned int)&v31 ^ __security_cookie;
  v4 = this;
  v5 = this->m_kNextBgmFn.baseclass_0._Myres < 0x10;
  v6 = &this->m_kNextBgmFn;
  rkIndex.m_acFilename = acFn;
  if ( v5 )
    v7 = (const char *)&this->m_kNextBgmFn;
  else
    v7 = *(const char **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( _strcmpi(acFn, v7) )
  {
    v4->m_fBgmVol = fBgmVol;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, acFn, strlen(acFn));
    v30 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v6, &thisa);
    v30 = -1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    temp[0] = 0;
    memset(&temp[1], 0, 0xFFu);
    OutputDebugStringA("************************************************************************\n");
    sprintf(temp, "*************** name%s**************************\n");
    OutputDebugStringA("************************************************************************\n");
    OutputDebugStringA(temp);
    if ( v4->baseclass_0.baseclass_0.m_bEnable )
    {
      OutputDebugStringA("-----------------------enable skipeed---------------------\n");
      v8 = SoundGroupStatic::GetSoundDirectly(&v4->baseclass_0, v4->m_iCurrSourceIndex);
      if ( v8
        && ((int (__thiscall *)(NiAudioSource *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)(v8) == 1
        && 0.0 != v4->m_fDurationToFade )
      {
        v9 = v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v10 = v4->m_fDurationToFade;
        v11 = NiGetCurrentTimeInSec();
        ((void (__thiscall *)(NiAudioSource *, _DWORD, _DWORD, _DWORD))v9[49].__vecDelDtor)(
          v8,
          0.0,
          LODWORD(v11),
          LODWORD(v10));
        if ( v4->m_bCrossFade )
        {
          v12 = v4->m_iOldSourceIndex;
          v13 = v4->m_iCurrSourceIndex;
          v14 = rkIndex.m_acFilename;
          v4->m_iCurrSourceIndex = v12;
          v4->m_iOldSourceIndex = v13;
          SoundGroup::SetTable(&v4->baseclass_0.baseclass_0, v12, v14);
          if ( SoundGroupStatic::GetSoundDirectly(&v4->baseclass_0, v4->m_iCurrSourceIndex) )
          {
            rkIndex.m_dwIndex = v4->m_iCurrSourceIndex;
            rkIndex.m_acFilename = 0;
            SoundGroupStatic::UnloadSound(&v4->baseclass_0, &rkIndex);
          }
          v22 = v4->m_iCurrSourceIndex;
          v23 = 0;
          v15 = SoundGroupStatic::GetSound(&v4->baseclass_0, (SoundIndex *)&v22, 1);
          if ( v15 )
          {
            v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor(
              (NiRefObject *)v15,
              COERCE_UNSIGNED_INT(0.000099999997));
            v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v17 = v4->m_fDurationToFade;
            v18 = NiGetCurrentTimeInSec();
            v19 = v16[49].__vecDelDtor;
            v20 = v18;
            *(float *)&rkIndex.m_acFilename = v4->baseclass_0.baseclass_0.m_fGain
                                            * v4->m_fBgmVol
                                            * SoundGroup::ms_fMasterGain;
            ((void (__thiscall *)(NiAudioSource *, char *, _DWORD, _DWORD))v19)(
              v15,
              rkIndex.m_acFilename,
              LODWORD(v20),
              LODWORD(v17));
            v21 = v4->baseclass_0.baseclass_0.vfptr->PlaySoundA;
            v24 = v4->m_iCurrSourceIndex;
            v25 = 0;
            v21(&v4->baseclass_0.baseclass_0, (SoundIndex *)&v24, bLoop, 1);
            v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[47].__vecDelDtor(
              (NiRefObject *)v15,
              COERCE_UNSIGNED_INT(0.000099999997));
            v4->m_eState = 4;
            v4->m_bPlayStarted = 1;
          }
        }
        else
        {
          v4->m_eState = 1;
        }
      }
      else
      {
        SoundGroupBgm::NextBgm(v4, bLoop);
      }
    }
  }
}
// A81B08: using guessed type float SoundGroup__ms_fMasterGain;
// A85C00: using guessed type int __security_cookie;

//----- (006A2990) --------------------------------------------------------
void __thiscall SoundGroupBgm::Update(SoundGroupBgm *this, float fTime)
{
  double v2; // st7@0
  SoundGroupBgm *v3; // esi@1
  NiAudioSource *v4; // eax@2
  NiAudioSource *v5; // eax@6
  NiAudioSource *v6; // edi@6
  SoundGroupBgm::State v7; // eax@9
  NiAudioSource *v8; // eax@10
  NiAudioSource *v9; // eax@14
  NiAudioSource *v10; // edi@14
  unsigned __int16 v11; // ax@18
  MapViewInfo *v12; // eax@19
  MapViewInfo *v13; // edi@19
  unsigned int v14; // edx@20
  double v15; // st7@20
  unsigned int v16; // eax@21
  int v17; // eax@23
  SoundIndex rkIndex; // [sp+Ch] [bp-8h]@8

  v3 = this;
  if ( this->baseclass_0.baseclass_0.m_bEnable )
  {
    v4 = SoundGroupStatic::GetSoundDirectly(&this->baseclass_0, this->m_iCurrSourceIndex);
    if ( v4
      && ((int (__thiscall *)(NiAudioSource *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)(v4) != 1
      && v3->m_bPlayStarted )
    {
      v2 = fTime;
      *(_WORD *)&v3->m_bRandomPlayOn = 1;
      v3->m_fPlayEndTime = fTime;
      v3->m_eState = 5;
    }
    v5 = SoundGroupStatic::GetSoundDirectly(&v3->baseclass_0, v3->m_iOldSourceIndex);
    v6 = v5;
    if ( v5 )
    {
      ((void (__thiscall *)(NiAudioSource *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)(v5);
      if ( v2 < 0.0000099999997 )
      {
        ((void (__thiscall *)(NiAudioSource *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(v6);
        rkIndex.m_dwIndex = v3->m_iOldSourceIndex;
        rkIndex.m_acFilename = 0;
        SoundGroupStatic::UnloadSound(&v3->baseclass_0, &rkIndex);
        v3->m_eState = 5;
      }
    }
    v7 = v3->m_eState;
    if ( v7 == 1 )
    {
      v8 = SoundGroupStatic::GetSoundDirectly(&v3->baseclass_0, v3->m_iCurrSourceIndex);
      if ( v8 )
      {
        ((void (__thiscall *)(NiAudioSource *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)(v8);
        if ( v2 < 0.0000099999997 )
          SoundGroupBgm::NextBgm(v3, 0);
      }
    }
    else
    {
      if ( v7 == 2 )
      {
        v9 = SoundGroupStatic::GetSoundDirectly(&v3->baseclass_0, v3->m_iCurrSourceIndex);
        v10 = v9;
        if ( v9 )
        {
          ((void (__thiscall *)(NiAudioSource *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[48].__vecDelDtor)(v9);
          if ( v2 < 0.0000099999997 )
          {
            ((void (__thiscall *)(NiAudioSource *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[55].__vecDelDtor)(v10);
            v3->m_eState = 5;
          }
        }
      }
    }
    if ( !v3->m_bRandomPlayOn )
      goto LABEL_33;
    v11 = v3->m_kCurrPlayingMapID;
    if ( v11 == -1 )
    {
      *(float *)&rkIndex.m_acFilename = fTime - v3->m_fPlayEndTime;
      if ( *(float *)&rkIndex.m_acFilename <= 180.0 )
        goto LABEL_33;
      if ( rand() % 3 != 1 )
      {
        v3->m_fPlayEndTime = fTime;
        goto LABEL_33;
      }
    }
    else
    {
      v12 = IIDTableBase<MapViewInfo_MapViewInfoTab_unsigned_short>::GetByID(v11, 1);
      v13 = v12;
      if ( !v12
        || (v14 = 274877907 * (unsigned __int64)v12->BGMDlyTime >> 32,
            *(float *)&rkIndex.m_acFilename = fTime - v3->m_fPlayEndTime,
            v15 = *(float *)&rkIndex.m_acFilename,
            rkIndex.m_acFilename = (char *)(((signed int)v14 >> 6) + (v14 >> 31)),
            (double)(signed int)rkIndex.m_acFilename >= v15) )
        goto LABEL_33;
      v16 = rand() % v3->m_uiBgmCount;
      if ( v16 != v3->m_uiCurrPlayingBgmIndex )
      {
        v3->m_uiCurrPlayingBgmIndex = v16;
        if ( !v16 )
        {
          SoundGroupBgm::PlayBGM(v3, v13->BGM_Name_01, 0, 1.0);
          v3->m_bRandomPlayOn = 0;
          goto LABEL_33;
        }
        v17 = v16 - 1;
        if ( !v17 )
        {
          SoundGroupBgm::PlayBGM(v3, v13->BGM_Name_02, 0, 1.0);
          v3->m_bRandomPlayOn = 0;
          goto LABEL_33;
        }
        if ( v17 == 1 )
        {
          SoundGroupBgm::PlayBGM(v3, v13->BGM_Name_03, 0, 1.0);
          v3->m_bRandomPlayOn = 0;
LABEL_33:
          SoundGroup::Update(&v3->baseclass_0.baseclass_0, fTime);
          return;
        }
LABEL_31:
        v3->m_bRandomPlayOn = 0;
        goto LABEL_33;
      }
    }
    SoundGroupBgm::NextBgm(v3, 0);
    goto LABEL_31;
  }
}

//----- (006A2BE0) --------------------------------------------------------
void __thiscall SoundGroupBgm::PlayBGM(SoundGroupBgm *this, unsigned __int16 id, bool bLoop)
{
  SoundGroupBgm *v3; // esi@1
  int v4; // edi@2
  int v5; // eax@4
  int v6; // edi@5
  unsigned int v7; // eax@14
  int v8; // eax@15

  v3 = this;
  if ( this->baseclass_0.baseclass_0.m_bEnable )
  {
    this->m_fBgmVol = 1.0;
    v4 = ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<MapViewInfo_MapViewInfoTab>::ms_pkTable,
                            id) )
    {
      if ( id <= *(_WORD *)(v4 + 200) )
      {
        v5 = *(_DWORD *)(v4 + 196) + 4 * id;
        if ( *(_DWORD *)v5 )
        {
          v6 = *(_DWORD *)v5;
          if ( *(_DWORD *)v5 )
          {
            v3->m_kCurrPlayingMapID = id;
            if ( *(_BYTE *)(v6 + 14) == 45 )
            {
              v3->m_uiBgmCount = 0;
            }
            else
            {
              if ( *(_BYTE *)(v6 + 46) == 45 )
              {
                v3->m_uiBgmCount = 1;
              }
              else
              {
                if ( *(_BYTE *)(v6 + 78) == 45 )
                  v3->m_uiBgmCount = 2;
                else
                  v3->m_uiBgmCount = 3;
              }
            }
            if ( v3->m_uiBgmCount )
            {
              v3->m_fBgmVol = (double)*(unsigned int *)(v6 + 164) / 100.0;
              v7 = rand() % v3->m_uiBgmCount;
              v3->m_uiCurrPlayingBgmIndex = v7;
              if ( v7 )
              {
                v8 = v7 - 1;
                if ( v8 )
                {
                  if ( v8 == 1 )
                    SoundGroupBgm::PlayBGM(v3, (char *)(v6 + 78), bLoop, v3->m_fBgmVol);
                }
                else
                {
                  SoundGroupBgm::PlayBGM(v3, (char *)(v6 + 46), bLoop, v3->m_fBgmVol);
                }
              }
              else
              {
                SoundGroupBgm::PlayBGM(v3, (char *)(v6 + 14), bLoop, v3->m_fBgmVol);
              }
            }
          }
        }
      }
    }
  }
}
// A97F30: using guessed type int ITableBase_MapViewInfo_MapViewInfoTab___ms_pkTable;

//----- (006A2D20) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_void__>(NiTListBase<NiTPointerAllocator<unsigned int>,void *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
}
// 9C82B8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);

//----- (006A2D30) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>(NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *this)
{
  this->vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
}
// 9C82C8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A2D40) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>(NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *> *this)
{
  this->vfptr = (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *>Vtbl *)&NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
}
// 9C82D8: using guessed type int (__thiscall *NiTListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);

//----- (006A2D50) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>(NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *this)
{
  this->vfptr = (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *>Vtbl *)&NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
}
// 9C82E8: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);

//----- (006A2D60) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,void *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C82B8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);

//----- (006A2D90) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_scalar_deleting_destructor_(NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C82C8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A2DC0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vector_deleting_destructor_(NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *>Vtbl *)&NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C82D8: using guessed type int (__thiscall *NiTListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);

//----- (006A2DF0) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vector_deleting_destructor_(NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *>Vtbl *)&NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C82E8: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);

//----- (006A2E20) --------------------------------------------------------
unsigned int __cdecl ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// B5B168: using guessed type int ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab___ms_pkTable;

//----- (006A2E40) --------------------------------------------------------
void *__thiscall SpTList<void__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,void *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<void *> *v3; // esi@1
  NiTListItem<void *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C82B8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);
// 9C82F8: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);

//----- (006A2ED0) --------------------------------------------------------
void __thiscall NiTPointerList<void__>::_NiTPointerList<void__>(SpTList<void *> *this)
{
  SpTList<void *> *v1; // edi@1
  NiTListItem<void *> *v2; // esi@1
  NiTListItem<void *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,void *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
}
// 9C82B8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);
// 9C82F8: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);

//----- (006A2F50) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C82C8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C8308: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A2FE0) --------------------------------------------------------
void *__thiscall ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::_vector_deleting_destructor_(MapAmbienceSoundInfoTab *this, unsigned int a2)
{
  MapAmbienceSoundInfoTab *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ITableBase<MapAmbienceSoundInfo,MapAmbienceSoundInfoTab>Vtbl *)&ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8318: using guessed type int (__cdecl *ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A3060) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vector_deleting_destructor_(NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v3; // esi@1
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *>Vtbl *)&NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C82E8: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);
// 9C8338: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);

//----- (006A30F0) --------------------------------------------------------
void __thiscall NiTList<IAmbientArea__>::_NiTList<IAmbientArea__>(NiTList<IAmbientArea *> *this)
{
  NiTList<IAmbientArea *> *v1; // edi@1
  NiTListItem<IAmbientArea *> *v2; // esi@1
  NiTListItem<IAmbientArea *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *>Vtbl *)&NiTPointerListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *>Vtbl *)&NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
}
// 9C82D8: using guessed type int (__thiscall *NiTListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);
// 9C8328: using guessed type int (__thiscall *NiTPointerListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);

//----- (006A3170) --------------------------------------------------------
void __thiscall NiTList<SoundGroupAmbient::PlayingAreaInfo__>::_NiTList<SoundGroupAmbient::PlayingAreaInfo__>(NiTList<SoundGroupAmbient::PlayingAreaInfo *> *this)
{
  NiTList<SoundGroupAmbient::PlayingAreaInfo *> *v1; // edi@1
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v2; // esi@1
  NiTListItem<SoundGroupAmbient::PlayingAreaInfo *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *>Vtbl *)&NiTPointerListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *>Vtbl *)&NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo__>_SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
}
// 9C82E8: using guessed type int (__thiscall *NiTListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);
// 9C8338: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SoundGroupAmbient__PlayingAreaInfo ___SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);

//----- (006A31F0) --------------------------------------------------------
void __thiscall NiTList<NiPointer<NiAudioSource>>::_NiTList<NiPointer<NiAudioSource>>(NiTList<NiPointer<NiAudioSource> > *this)
{
  NiTList<NiPointer<NiAudioSource> > *v1; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v2; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
}
// 9C82C8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C8308: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A3270) --------------------------------------------------------
char *__thiscall IAmbientArea::GetSndFilename(IAmbientArea *this)
{
  char *result; // eax@1

  result = (char *)&this->m_kSndFilename;
  if ( this->m_kSndFilename.baseclass_0._Myres >= 0x10 )
    result = *(char **)result;
  return result;
}

//----- (006A3280) --------------------------------------------------------
void __thiscall SoundGroupDynamic::_SoundGroupDynamic(SoundGroupDynamic *this)
{
  char *v1; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v2; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // ST00_4@2
  char *v4; // esi@4
  NiTListItem<NiPointer<NiAudioSource> > *v5; // edi@4
  NiTListItem<NiPointer<NiAudioSource> > *v6; // ST00_4@5
  char *v7; // esi@7
  NiTListItem<NiPointer<NiAudioSource> > *v8; // edi@7
  NiTListItem<NiPointer<NiAudioSource> > *v9; // ST00_4@8
  char *v10; // esi@10
  NiTListItem<void *> *v11; // edi@10
  NiTListItem<void *> *v12; // ST00_4@11
  SoundGroupDynamic *thisa; // [sp+4h] [bp-10h]@1

  thisa = this;
  v1 = (char *)&this->m_k3DSourceRecycleList;
  this->m_k3DSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v2 = this->m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    do
    {
      v3 = v2;
      v2 = v2->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v1 + 8))(v1, v3);
    }
    while ( v2 );
    this = thisa;
  }
  *((_DWORD *)v1 + 3) = 0;
  *((_DWORD *)v1 + 1) = 0;
  *((_DWORD *)v1 + 2) = 0;
  *(_DWORD *)v1 = &NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v4 = (char *)&this->m_kAmbientSourceRecycleList;
  this->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v5 = this->m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead;
  if ( v5 )
  {
    do
    {
      v6 = v5;
      v5 = v5->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4 + 8))(v4, v6);
    }
    while ( v5 );
    this = thisa;
  }
  *((_DWORD *)v4 + 3) = 0;
  *((_DWORD *)v4 + 1) = 0;
  *((_DWORD *)v4 + 2) = 0;
  *(_DWORD *)v4 = &NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v7 = (char *)&this->m_kActiveSourceList;
  this->m_kActiveSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v8 = this->m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead;
  if ( v8 )
  {
    do
    {
      v9 = v8;
      v8 = v8->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 8))(v7, v9);
    }
    while ( v8 );
    this = thisa;
  }
  *((_DWORD *)v7 + 3) = 0;
  *((_DWORD *)v7 + 1) = 0;
  *((_DWORD *)v7 + 2) = 0;
  *(_DWORD *)v7 = &NiTListBase<DFALL<NiPointer<NiAudioSource>>_NiPointer<NiAudioSource>>::_vftable_;
  v10 = (char *)&this->m_kUniqueSourceList;
  this->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
  v11 = this->m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v11 )
  {
    do
    {
      v12 = v11;
      v11 = v11->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v10 + 8))(v10, v12);
    }
    while ( v11 );
    this = thisa;
  }
  *((_DWORD *)v10 + 3) = 0;
  *((_DWORD *)v10 + 1) = 0;
  *((_DWORD *)v10 + 2) = 0;
  *(_DWORD *)v10 = &NiTListBase<NiTPointerAllocator<unsigned_int>_void__>::_vftable_;
  SoundGroup::_SoundGroup(&this->baseclass_0);
}
// 9C82B8: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);
// 9C82C8: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C82F8: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__void _____vftable_)(void *p, char);
// 9C8308: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiPointer_NiAudioSource___NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A33C0) --------------------------------------------------------
void __thiscall MapAmbienceSoundInfoTab::MapAmbienceSoundInfoTab(MapAmbienceSoundInfoTab *this)
{
  MapAmbienceSoundInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (ITableBase<MapAmbienceSoundInfo,MapAmbienceSoundInfoTab>Vtbl *)&ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab_::ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.vfptr = (ITableBase<MapAmbienceSoundInfo,MapAmbienceSoundInfoTab>Vtbl *)&MapAmbienceSoundInfoTab::_vftable_;
}
// 9C8318: using guessed type int (__cdecl *ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C839C: using guessed type int (__cdecl *MapAmbienceSoundInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// B5B16C: using guessed type int _local static guard_;

//----- (006A3400) --------------------------------------------------------
void *__thiscall SoundGroupBgm::_vector_deleting_destructor_(SoundGroupBgm *this, unsigned int a2)
{
  SoundGroupBgm *v2; // esi@1

  v2 = this;
  if ( this->m_kNextBgmFn.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kNextBgmFn.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_kNextBgmFn.baseclass_0._Myres = 15;
  v2->m_kNextBgmFn.baseclass_0._Mysize = 0;
  v2->m_kNextBgmFn.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  SoundGroupStatic::_SoundGroupStatic(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006A3450) --------------------------------------------------------
bool __cdecl ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable;
  if ( !ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xC4u);
    if ( v3 )
      MapAmbienceSoundInfoTab::MapAmbienceSoundInfoTab((MapAmbienceSoundInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read(
         (CDataReader *)(ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable + 4),
         acFn)
    && (v4 = *(_DWORD *)(ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 1054 )
  {
    v5 = acFn;
    v6 = ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<MapAmbienceSoundInfo_MapAmbienceSoundInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B5B168: using guessed type int ITableBase_MapAmbienceSoundInfo_MapAmbienceSoundInfoTab___ms_pkTable;

//----- (006A3540) --------------------------------------------------------
void *__thiscall SoundGroupAmbient::_vector_deleting_destructor_(SoundGroupAmbient *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SoundGroupAmbient::_SoundGroupAmbient(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006A3570) --------------------------------------------------------
void __thiscall SoundMgr::SetDistFactor(SoundMgr *this, float fVal)
{
  this->m_fDistanceFactor = fVal;
}

//----- (006A3580) --------------------------------------------------------
void __thiscall SoundMgr::TerminateSoundGroups(SoundMgr *this)
{
  SoundMgr *v1; // esi@1
  SoundGroupBgm *v2; // ecx@1
  SoundGroupFieldEffect *v3; // ecx@3
  SoundGroupInterface *v4; // ecx@5
  SoundGroupAmbient *v5; // ecx@7
  SoundGroup3DAmbient *v6; // ecx@9
  SoundGroupMainChar *v7; // ecx@11
  SoundGroupNPCVoice *v8; // ecx@13

  v1 = this;
  v2 = this->m_pkBGMGroup;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v3 = v1->m_pkEffectGroup;
  v1->m_pkBGMGroup = 0;
  if ( v3 )
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v4 = v1->m_pkInterfaceGroup;
  v1->m_pkEffectGroup = 0;
  if ( v4 )
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v5 = v1->m_pkAmbientGroup;
  v1->m_pkInterfaceGroup = 0;
  if ( v5 )
    ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v6 = v1->m_pk3DAmbientGroup;
  v1->m_pkAmbientGroup = 0;
  if ( v6 )
    ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v7 = v1->m_pkMainCharGroup;
  v1->m_pk3DAmbientGroup = 0;
  if ( v7 )
    ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v8 = v1->m_pkNPCVoiceGroup;
  v1->m_pkMainCharGroup = 0;
  if ( v8 )
    ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
  v1->m_pkNPCVoiceGroup = 0;
}

//----- (006A3610) --------------------------------------------------------
void __thiscall SoundMgr::Enable(SoundMgr *this, bool b)
{
  this->m_bEnable = b;
  SoundGroup::SetEnableWholeGroup(b);
}

//----- (006A3630) --------------------------------------------------------
bool __thiscall SoundMgr::GetEnable(SoundMgr *this)
{
  return this->m_bEnable;
}

//----- (006A3640) --------------------------------------------------------
void __thiscall SoundMgr::PlayBGM(SoundMgr *this, unsigned __int16 id)
{
  SoundGroupBgm *v2; // ecx@1

  v2 = this->m_pkBGMGroup;
  if ( v2 )
    SoundGroupBgm::PlayBGM(v2, id, 0);
}

//----- (006A3660) --------------------------------------------------------
bool __thiscall SoundMgr::PlayBGM(SoundMgr *this, char *pcFileName)
{
  SoundGroupBgm *v2; // ecx@1

  v2 = this->m_pkBGMGroup;
  if ( v2 )
    SoundGroupBgm::PlayBGM(v2, pcFileName, 1, 1.0);
  return 1;
}

//----- (006A3690) --------------------------------------------------------
bool __thiscall SoundMgr::PlayBGM(SoundMgr *this, char *pcFileName, bool bLoop)
{
  SoundGroupBgm *v3; // ecx@1

  v3 = this->m_pkBGMGroup;
  if ( v3 )
    SoundGroupBgm::PlayBGM(v3, pcFileName, bLoop, 1.0);
  return 1;
}

//----- (006A36C0) --------------------------------------------------------
void __thiscall SoundMgr::StopBGM(SoundMgr *this)
{
  SoundGroupBgm *v1; // ecx@1

  v1 = this->m_pkBGMGroup;
  if ( v1 )
    SoundGroupBgm::StopBGM(v1);
}

//----- (006A3700) --------------------------------------------------------
NiMilesListener *__thiscall SoundMgr::GetListener(SoundMgr *this)
{
  return this->m_pkListener;
}

//----- (006A3710) --------------------------------------------------------
NiAudioSource *__thiscall SoundMgr::Create3DSource(SoundMgr *this, char *pcFileName, bool bLoop, float fMin, float fMax)
{
  int v5; // esi@0
  NiAudioSource *v6; // esi@3
  bool v7; // zf@4
  NiRefObjectVtbl *v8; // eax@4
  NiAudioSource *result; // eax@6
  int v10; // [sp+18h] [bp-4h]@3

  if ( this->m_pkAudioSystem && this->m_bEnable )
  {
    v10 = v5;
    v6 = (NiAudioSource *)((int (__stdcall *)(_DWORD))this->m_pkAudioSystem->baseclass_0.baseclass_0.baseclass_0.vfptr[17].__vecDelDtor)(0);
    if ( !v6 )
      return 0;
    ((void (__thiscall *)(NiAudioSource *, char *, int))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(
      v6,
      pcFileName,
      v10);
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[32].__vecDelDtor((NiRefObject *)v6, 0);
    v7 = ((int (__thiscall *)(NiAudioSource *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v6) == 0;
    v8 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    if ( v7 )
    {
      ((void (__thiscall *)(NiAudioSource *))v8->__vecDelDtor)(v6);
      return 0;
    }
    v8[47].__vecDelDtor((NiRefObject *)v6, COERCE_UNSIGNED_INT(1.0));
    ((void (__thiscall *)(NiAudioSource *, _DWORD, _DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
      v6,
      LODWORD(fMin),
      LODWORD(fMax));
    ((void (__thiscall *)(NiAudioSource *))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor)(v6);
    result = v6;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 6A3710: could not find valid save-restore pair for esi

//----- (006A37E0) --------------------------------------------------------
unsigned int __thiscall SoundMgr::AllocateChannel(SoundMgr *this, unsigned int dwChannelCount)
{
  unsigned int result; // eax@1

  result = this->m_dwAvailableChannelCount;
  if ( this->m_dwAvailableChannelCount < dwChannelCount )
  {
    this->m_dwAvailableChannelCount = 0;
  }
  else
  {
    this->m_dwAvailableChannelCount = result - dwChannelCount;
    result = dwChannelCount;
  }
  return result;
}

//----- (006A3800) --------------------------------------------------------
void __thiscall SoundMgr::ReleaseChannel(SoundMgr *this, unsigned int dwChannelCount)
{
  this->m_dwAvailableChannelCount += dwChannelCount;
}

//----- (006A3810) --------------------------------------------------------
void __thiscall SoundMgr::SetMasterVolume(SoundMgr *this, float fVol)
{
  SoundGroup::SetMasterGain(fVol);
}

//----- (006A3830) --------------------------------------------------------
void __thiscall SoundMgr::MuteSound(SoundMgr *this, bool b)
{
  if ( this->m_pkBGMGroup )
  {
    if ( b == 1 )
    {
      this->m_fOldMasterVolume = SoundGroup::GetMasterGain();
      SoundGroup::SetMasterGain(0.0);
    }
    else
    {
      SoundGroup::SetMasterGain(this->m_fOldMasterVolume);
    }
  }
}

//----- (006A3880) --------------------------------------------------------
void __thiscall SoundMgr::SetAmbientVolumeSync(SoundMgr *this)
{
  SoundGroupAmbient *v1; // ecx@1

  v1 = this->m_pkAmbientGroup;
  if ( v1 )
    SoundGroupAmbient::SetAmbientVolumeSync(v1);
}

//----- (006A3890) --------------------------------------------------------
void __thiscall SoundMgr::HoldSound(SoundMgr *this, bool b)
{
  SoundMgr *v2; // esi@1

  v2 = this;
  if ( b == 1 )
  {
    if ( this->m_pkBGMGroup )
    {
      ((void (__stdcall *)(_DWORD))this->m_pkBGMGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkAmbientGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pk3DAmbientGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetEnable)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkEffectGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetEnable)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkMainCharGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetEnable)(1);
      ((void (__stdcall *)(_DWORD))v2->m_pkNPCVoiceGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(1);
      SoundGroup::StopAllSoundWholeGroup();
    }
  }
  else
  {
    if ( this->m_pkBGMGroup )
    {
      ((void (__stdcall *)(_DWORD))this->m_pkBGMGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkAmbientGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pk3DAmbientGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetEnable)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkEffectGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetEnable)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkMainCharGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetEnable)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkNPCVoiceGroup->baseclass_0.baseclass_0.vfptr->SetEnable)(0);
      SoundGroup::StopAllSoundWholeGroup();
    }
  }
}

//----- (006A3970) --------------------------------------------------------
void __thiscall SoundMgr::Terminate(SoundMgr *this)
{
  SoundMgr *v1; // ebx@1
  NiTListItem<NiPointer<NiAudioSource> > *v2; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // eax@1
  NiTListItem<NiPointer<NiAudioSource> > *v4; // ST00_4@2
  NiNode *v5; // esi@4
  NiAudioSource *v6; // esi@9
  NiAudioSystem *v7; // eax@14

  v1 = this;
  SoundGroup::StopAllSoundWholeGroup();
  v2 = v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v3 = 0;
  if ( v2 )
  {
    do
    {
      v4 = v2;
      v2 = v2->m_pkNext;
      v1->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *)&v1->m_kList,
        v4);
    }
    while ( v2 );
    v3 = 0;
  }
  *(_DWORD *)&v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v3;
  v1->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v3;
  v5 = v1->m_spListeneerNode.m_pObject;
  if ( (NiTListItem<NiPointer<NiAudioSource> > *)v5 != v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spListeneerNode.m_pObject = 0;
    v3 = 0;
  }
  v6 = v1->m_spBGM.m_pObject;
  if ( (NiTListItem<NiPointer<NiAudioSource> > *)v6 != v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spBGM.m_pObject = 0;
    v3 = 0;
  }
  v1->m_pkListener = (NiMilesListener *)v3;
  v1->m_pkAudioSystem = (NiMilesAudioSystem *)v3;
  SoundMgr::TerminateSoundGroups(v1);
  SoundGroup::TerminateWholeGroup();
  v7 = NiAudioSystem::GetAudioSystem();
  ((void (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v7);
}

//----- (006A3A20) --------------------------------------------------------
NiAudioSource *__thiscall SoundMgr::CreateAmbientSource(SoundMgr *this, char *pcFileName, bool bLoop)
{
  int v3; // edi@0
  NiAudioSource *v4; // esi@3
  int v5; // ST0C_4@6
  NiRefObjectVtbl *v6; // edi@6
  char *v7; // eax@6
  bool v8; // zf@6
  NiRefObjectVtbl *v9; // eax@6
  NiAudioSource *result; // eax@8

  if ( this->m_pkAudioSystem && this->m_bEnable )
  {
    v4 = (NiAudioSource *)((int (__stdcall *)(signed int))this->m_pkAudioSystem->baseclass_0.baseclass_0.baseclass_0.vfptr[17].__vecDelDtor)(1);
    if ( !v4 )
      return 0;
    if ( !Folder::m_bInit )
      Folder::Init();
    v5 = v3;
    v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v7 = Folder::Merge(&Folder::m_acSound, pcFileName);
    ((void (__thiscall *)(NiAudioSource *, char *, int))v6[34].__vecDelDtor)(v4, v7, v5);
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[32].__vecDelDtor((NiRefObject *)v4, 0);
    v8 = ((int (__thiscall *)(NiAudioSource *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v4) == 0;
    v9 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    if ( v8 )
    {
      ((void (__thiscall *)(NiAudioSource *))v9->__vecDelDtor)(v4);
      return 0;
    }
    ((void (__thiscall *)(NiAudioSource *))v9[47].__vecDelDtor)(v4);
    if ( bLoop )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor((NiRefObject *)v4, 0);
    result = v4;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A3AE0) --------------------------------------------------------
void __thiscall SoundMgr::PlayInterfaceSound(SoundMgr *this, SoundGroupInterface::SndIndex eSndIndex)
{
  SoundGroupStatic *v2; // ecx@1
  SoundIndex rkIndex; // [sp+0h] [bp-8h]@1

  v2 = (SoundGroupStatic *)this->m_pkInterfaceGroup;
  rkIndex.m_dwIndex = eSndIndex;
  rkIndex.m_acFilename = 0;
  SoundGroupStatic::PlaySoundA(v2, &rkIndex, 0, 0);
}

//----- (006A3B10) --------------------------------------------------------
void __thiscall SoundMgr::PlayInterfaceSound(SoundMgr *this, char *pcFileName)
{
  SoundGroupInterface::PlaySoundDynamic(this->m_pkInterfaceGroup, pcFileName);
}

//----- (006A3B20) --------------------------------------------------------
void __thiscall SoundMgr::SetBgVolume(SoundMgr *this, float fVol)
{
  ((void (__stdcall *)(_DWORD))this->m_pkBGMGroup->baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
}

//----- (006A3B40) --------------------------------------------------------
void __thiscall SoundMgr::SetEffectVolume(SoundMgr *this, float fVol)
{
  SoundMgr *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkEffectGroup->baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
  ((void (__stdcall *)(_DWORD))v2->m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
  ((void (__stdcall *)(_DWORD))v2->m_pkNPCVoiceGroup->baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
  ((void (__stdcall *)(_DWORD))v2->m_pkMainCharGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
}

//----- (006A3B90) --------------------------------------------------------
void __thiscall SoundMgr::SetVoiceVolume(SoundMgr *this, float fVol)
{
  ((void (__stdcall *)(_DWORD))this->m_pkNPCVoiceGroup->baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
}

//----- (006A3BB0) --------------------------------------------------------
void __thiscall SoundMgr::SetEnvEffectVolume(SoundMgr *this, float fVol)
{
  SoundMgr *v2; // esi@1

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkAmbientGroup->baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
  ((void (__stdcall *)(_DWORD))v2->m_pk3DAmbientGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->SetGain)(LODWORD(fVol));
}

//----- (006A3BE0) --------------------------------------------------------
unsigned int __cdecl GetNpcVoiceFileCount(char *pcFileName)
{
  unsigned int v1; // edi@1
  char *v2; // eax@4
  _iobuf *v3; // eax@4

  v1 = 0;
  while ( 1 )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v2 = fs("%s\\%s%02d.wav");
    v3 = fopen(v2, "rb");
    if ( !v3 )
      break;
    ++v1;
    fclose(v3);
  }
  return v1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A3C40) --------------------------------------------------------
void __thiscall SoundMgr::PlayNPCVoice(SoundMgr *this, unsigned __int16 id)
{
  SoundMgr *v2; // ebx@1
  int v3; // esi@2
  int v4; // ecx@4
  SoundGroupNPCVoice *v5; // esi@7
  char v6; // [sp+8h] [bp-110h]@7
  char *v7; // [sp+Ch] [bp-10Ch]@7
  char acFileName[260]; // [sp+10h] [bp-108h]@6
  unsigned int v9; // [sp+114h] [bp-4h]@1
  int v10; // [sp+118h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  if ( this->m_bNPCVoiceExist )
  {
    v3 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                            ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                            id) )
    {
      if ( id <= *(_WORD *)(v3 + 200) )
      {
        v4 = *(_DWORD *)(v3 + 196);
        if ( *(_DWORD *)(v4 + 4 * id) )
        {
          if ( *(_DWORD *)(v4 + 4 * id) )
          {
            sprintf(acFileName, "resvoice\\%s\\%s");
            if ( GetNpcVoiceFileCount(acFileName) )
            {
              rand();
              v5 = v2->m_pkNPCVoiceGroup;
              v7 = fs("%s%02d.wav");
              v5->baseclass_0.baseclass_0.vfptr->PlaySoundA((SoundGroup *)v5, (SoundIndex *)&v6, 1, 0);
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;

//----- (006A3D20) --------------------------------------------------------
void __thiscall SoundMgr::PlayGenderVoice(SoundMgr *this, char *pcFileName)
{
  SoundMgr *v2; // edi@1
  SoundGroupNPCVoice *v3; // ecx@7
  char *v4; // [sp-Ch] [bp-124h]@3
  const char *v5; // [sp-8h] [bp-120h]@3
  char v6; // [sp+8h] [bp-110h]@7
  int v7; // [sp+Ch] [bp-10Ch]@7
  char acFileName[260]; // [sp+10h] [bp-108h]@3
  unsigned int v9; // [sp+114h] [bp-4h]@1
  int v10; // [sp+118h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  if ( pcFileName )
  {
    if ( User::GetMainCharGender(&g_kUser) )
    {
      if ( User::GetMainCharGender(&g_kUser) != 1 )
      {
LABEL_7:
        v3 = v2->m_pkNPCVoiceGroup;
        v7 = (int)acFileName;
        ((void (__stdcall *)(char *, signed int, _DWORD))v3->baseclass_0.baseclass_0.vfptr->PlaySoundA)(&v6, 1, 0);
        return;
      }
      v5 = "MaleVoice\\%s.wav";
      v4 = acFileName;
    }
    else
    {
      v5 = "FemaleVoice\\%s.wav";
      v4 = acFileName;
    }
    sprintf(v4, v5);
    goto LABEL_7;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006A3DC0) --------------------------------------------------------
void __thiscall SoundMgr::PlayItemDropSound(SoundMgr *this, unsigned __int16 id, NiPoint3 *rkPos)
{
  int v3; // esi@1
  SoundMgr *v4; // ebx@1
  int v5; // ecx@3
  char *v6; // eax@5
  SoundGroupFieldEffect *v7; // ecx@5
  char v8; // [sp+Ch] [bp-8h]@5
  char *v9; // [sp+10h] [bp-4h]@5

  v3 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                          id) )
  {
    if ( id <= *(_WORD *)(v3 + 200) )
    {
      v5 = *(_DWORD *)(v3 + 196);
      if ( *(_DWORD *)(v5 + 4 * id) )
      {
        if ( *(_DWORD *)(v5 + 4 * id) )
        {
          v6 = fs("%s.wav");
          v7 = v4->m_pkEffectGroup;
          v9 = v6;
          ((void (__stdcall *)(char *, NiPoint3 *, _DWORD))v7->baseclass_0.baseclass_0.vfptr->Play3DSound)(
            &v8,
            rkPos,
            0);
        }
      }
    }
  }
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (006A3E40) --------------------------------------------------------
void __thiscall SoundMgr::PlayItemPutSound(SoundMgr *this, unsigned __int16 id)
{
  int v2; // esi@1
  int v3; // ecx@3
  int v4; // eax@4

  v2 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                          id) )
  {
    if ( id <= *(_WORD *)(v2 + 200) )
    {
      v3 = *(_DWORD *)(v2 + 196);
      if ( *(_DWORD *)(v3 + 4 * id) )
      {
        v4 = *(_DWORD *)(v3 + 4 * id);
        if ( v4 )
          SoundGroupInterface::PlaySoundDynamic(g_kSoundMgr.m_pkInterfaceGroup, (char *)(v4 + 344));
      }
    }
  }
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (006A3EA0) --------------------------------------------------------
void __thiscall SoundMgr::PlayItemEquipSound(SoundMgr *this, unsigned __int16 id)
{
  int v2; // esi@1
  int v3; // ecx@3
  int v4; // eax@4

  v2 = ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ItemViewInfo_ItemViewInfoTab>::ms_pkTable,
                          id) )
  {
    if ( id <= *(_WORD *)(v2 + 200) )
    {
      v3 = *(_DWORD *)(v2 + 196);
      if ( *(_DWORD *)(v3 + 4 * id) )
      {
        v4 = *(_DWORD *)(v3 + 4 * id);
        if ( v4 )
          SoundGroupInterface::PlaySoundDynamic(g_kSoundMgr.m_pkInterfaceGroup, (char *)(v4 + 312));
      }
    }
  }
}
// A97F58: using guessed type int ITableBase_ItemViewInfo_ItemViewInfoTab___ms_pkTable;

//----- (006A3F00) --------------------------------------------------------
void __thiscall SoundMgr::_SoundMgr(SoundMgr *this)
{
  char *v1; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v2; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // ST00_4@2
  NiAudioSource *v4; // esi@3
  NiNode *v5; // esi@7
  SoundMgr *v6; // [sp+4h] [bp-10h]@1

  v6 = this;
  v1 = (char *)&this->m_kList;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&PgTList<NiPointer<NiAudioSource>>::_vftable_;
  v2 = this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v1 + 8))(v1, v3);
  }
  *((_DWORD *)v1 + 3) = 0;
  *((_DWORD *)v1 + 1) = 0;
  *((_DWORD *)v1 + 2) = 0;
  *(_DWORD *)v1 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
  v4 = v6->m_spBGM.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v6->m_spListeneerNode.m_pObject;
  if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  }
}
// 9C84F0: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85A4: using guessed type int (__thiscall *PgTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A3FD0) --------------------------------------------------------
void __thiscall SoundMgr::CreateSound(SoundMgr *this, ActionEffectInfo *pkInfo, NiPoint3 *kPos)
{
  SoundMgr *v3; // esi@1
  char v4; // cl@2
  char *v5; // eax@6
  SoundGroupFieldEffect *v6; // ecx@6
  char v7; // [sp+8h] [bp-Ch]@6
  char *v8; // [sp+Ch] [bp-8h]@6
  unsigned int v9; // [sp+10h] [bp-4h]@1
  int v10; // [sp+14h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  if ( pkInfo )
  {
    v4 = pkInfo->SoundFile[0];
    if ( v4 != 45 )
    {
      if ( v4 != 48 && v4 != 32 )
      {
        if ( v3->m_pkEffectGroup )
        {
          v5 = fs("%s.wav");
          v6 = v3->m_pkEffectGroup;
          v8 = v5;
          ((void (__stdcall *)(char *, NiPoint3 *, _DWORD))v6->baseclass_0.baseclass_0.vfptr->Play3DSound)(&v7, kPos, 0);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006A4040) --------------------------------------------------------
void __thiscall SoundMgr::CreateSound(SoundMgr *this, char *pcSndName, NiPoint3 *kPos)
{
  SoundMgr *v3; // esi@1
  char *v4; // eax@2
  SoundGroupFieldEffect *v5; // ecx@2
  char v6; // [sp+8h] [bp-Ch]@2
  char *v7; // [sp+Ch] [bp-8h]@2
  unsigned int v8; // [sp+10h] [bp-4h]@1
  int v9; // [sp+14h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  if ( this->m_pkEffectGroup )
  {
    v4 = fs("%s.wav");
    v5 = v3->m_pkEffectGroup;
    v7 = v4;
    ((void (__stdcall *)(char *, NiPoint3 *, _DWORD))v5->baseclass_0.baseclass_0.vfptr->Play3DSound)(&v6, kPos, 0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006A40A0) --------------------------------------------------------
void __thiscall SoundMgr::SoundMgr(SoundMgr *this)
{
  SoundMgr *v1; // esi@1
  char *v2; // eax@3

  v1 = this;
  this->m_spListeneerNode.m_pObject = 0;
  this->m_spBGM.m_pObject = 0;
  *(_DWORD *)&this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&PgTList<NiPointer<NiAudioSource>>::_vftable_;
  this->m_fDistanceFactor = 1.0;
  this->m_pkListener = 0;
  this->m_pkAudioSystem = 0;
  this->m_bBGMStart = 0.0;
  this->m_bEnable = 0;
  this->m_fOldMasterVolume = 0.0;
  this->m_bBGMPlayedAndDone = 0;
  this->m_pkBGMGroup = 0;
  this->m_pkEffectGroup = 0;
  this->m_pkInterfaceGroup = 0;
  this->m_pkAmbientGroup = 0;
  this->m_pk3DAmbientGroup = 0;
  this->m_pkMainCharGroup = 0;
  this->m_pkNPCVoiceGroup = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSound, "resvoice");
  v1->m_bNPCVoiceExist = GetFileAttributesA(v2) == 16;
}
// 9C85A4: using guessed type int (__thiscall *PgTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A4160) --------------------------------------------------------
void __thiscall SoundMgr::Update(SoundMgr *this, float fTime, NiCamera *pkCamera)
{
  SoundMgr *v3; // edi@1
  NiAudioSource *v4; // ecx@1
  NiAudioSource *v5; // ecx@8
  float v6; // eax@9
  float v7; // edx@12
  int v8; // esi@12
  int v9; // eax@12
  NiCamera *v10; // esi@20
  NiMilesListener *v11; // eax@21
  float v12; // ecx@22
  float v13; // edx@22
  NiMilesListener *v14; // ecx@22
  NiMilesListener *v15; // ecx@22
  NiMilesAudioSystem *v16; // edi@23
  float v17; // [sp+2Ch] [bp-34h]@22
  float v18; // [sp+30h] [bp-30h]@22
  float v19; // [sp+34h] [bp-2Ch]@22
  NiPoint3 kPos; // [sp+38h] [bp-28h]@22
  PgWin *v21; // [sp+44h] [bp-1Ch]@14
  NiPointer<PgWin> result; // [sp+48h] [bp-18h]@13
  NiPointer<PgWin> element; // [sp+4Ch] [bp-14h]@13
  float fPastTimeSinceDone; // [sp+50h] [bp-10h]@6
  int v25; // [sp+5Ch] [bp-4h]@13
  float pkCameraa; // [sp+6Ch] [bp+Ch]@22

  v3 = this;
  v4 = this->m_spBGM.m_pObject;
  if ( v4 )
  {
    if ( ((int (*)(void))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[57].__vecDelDtor)() != 1
      && 0.0 != v3->m_bBGMStart )
    {
      v3->m_bBGMPlayedAndDone = 1;
      v3->m_fBGMDoneTime = fTime;
      v3->m_bBGMStart = 0.0;
    }
    if ( v3->m_bBGMPlayedAndDone )
    {
      fPastTimeSinceDone = fTime - v3->m_fBGMDoneTime;
      if ( fPastTimeSinceDone > 180.0 )
      {
        if ( rand() % 3 == 1 )
        {
          v5 = v3->m_spBGM.m_pObject;
          v3->m_bBGMStart = 1.0;
          v3->m_bBGMPlayedAndDone = 0;
          ((void (*)(void))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[54].__vecDelDtor)();
        }
      }
    }
  }
  LODWORD(v6) = v3->m_kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( LODWORD(v6) )
  {
    while ( 1 )
    {
      LODWORD(v7) = *LODWORD(v6);
      v8 = *(_DWORD *)(LODWORD(v6) + 8);
      v9 = *(_DWORD *)v8;
      fPastTimeSinceDone = v7;
      if ( (*(int (__thiscall **)(int))(v9 + 228))(v8) != 1 )
      {
        (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 220))(v8);
        element.m_pObject = (PgWin *)v8;
        InterlockedIncrement((volatile LONG *)(v8 + 4));
        v25 = 0;
        NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v3->m_kList,
          &result,
          &element);
        if ( result.m_pObject )
        {
          v21 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v21 )
              ((void (__stdcall *)(signed int))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
          }
        }
        v25 = -1;
        if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
      }
      if ( fPastTimeSinceDone == 0.0 )
        break;
      v6 = fPastTimeSinceDone;
    }
  }
  v10 = pkCamera;
  if ( pkCamera )
  {
    v11 = v3->m_pkListener;
    if ( v11 )
    {
      v12 = pkCamera->baseclass_0.m_kWorld.m_Translate.x;
      v13 = pkCamera->baseclass_0.m_kWorld.m_Translate.y;
      pkCameraa = v3->m_fDistanceFactor;
      kPos.x = v12;
      kPos.z = v10->baseclass_0.m_kWorld.m_Translate.z;
      kPos.x = v12 * pkCameraa;
      LODWORD(v11->baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
      kPos.y = v13 * pkCameraa;
      v11->baseclass_0.baseclass_0.m_kLocal.m_Translate.y = kPos.y;
      kPos.z = pkCameraa * kPos.z;
      v11->baseclass_0.baseclass_0.m_kLocal.m_Translate.z = kPos.z;
      v14 = v3->m_pkListener;
      kPos.x = v10->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][1];
      kPos.y = v10->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][1];
      kPos.z = v10->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1];
      ((void (__stdcall *)(NiPoint3 *))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[32].__vecDelDtor)(&kPos);
      v15 = v3->m_pkListener;
      v17 = v10->baseclass_0.m_kWorld.m_Rotate.m_pEntry[0][0];
      v18 = v10->baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0];
      v19 = v10->baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0];
      ((void (__stdcall *)(float *))v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(&v17);
      NiAVObject::Update(&v3->m_pkListener->baseclass_0.baseclass_0, fTime, 1);
      ((void (*)(void))v3->m_pkListener->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)();
      NiAVObject::Update(&v3->m_spListeneerNode.m_pObject->baseclass_0, fTime, 1);
    }
  }
  v16 = v3->m_pkAudioSystem;
  if ( v16 )
    ((void (__thiscall *)(NiMilesAudioSystem *, _DWORD, signed int))v16->baseclass_0.baseclass_0.baseclass_0.vfptr[22].__vecDelDtor)(
      v16,
      LODWORD(fTime),
      1);
  SoundGroup::UpdateWholeGroup(fTime);
}

//----- (006A43D0) --------------------------------------------------------
void __thiscall SoundMgr::CreateSound(SoundMgr *this, ActionEffectInfo *pkInfo, Char *pkCaster, Char *pkTarget)
{
  char v4; // al@2
  NiNode *v5; // eax@6
  NiPoint3 kPos; // [sp+0h] [bp-Ch]@7

  if ( pkInfo )
  {
    v4 = pkInfo->SoundFile[0];
    if ( v4 != 45 )
    {
      if ( v4 != 48 && v4 != 32 && pkCaster )
      {
        v5 = pkCaster->m_spScene.m_pObject;
        if ( v5 )
        {
          kPos.x = v5->baseclass_0.m_kWorld.m_Translate.x;
          kPos.y = v5->baseclass_0.m_kWorld.m_Translate.y;
          kPos.z = v5->baseclass_0.m_kWorld.m_Translate.z;
          SoundMgr::CreateSound(this, pkInfo->SoundFile, &kPos);
        }
      }
    }
  }
}

//----- (006A4430) --------------------------------------------------------
void __thiscall SoundMgr::CreateSound(SoundMgr *this, ActionInfo *pkInfo, int iIndex, Char *pkCaster, Char *pkTarget)
{
  Char *v5; // ebx@1
  bool v6; // zf@2
  int v7; // eax@2
  unsigned int v8; // esi@5
  NiNode *v9; // ecx@8
  Char *v10; // eax@8
  char *v11; // eax@34
  SoundGroupFieldEffect *v12; // ecx@34
  char v13; // [sp+Ch] [bp-1Ch]@34
  char *v14; // [sp+10h] [bp-18h]@34
  NiPoint3 kPos; // [sp+14h] [bp-14h]@33
  SoundMgr *v16; // [sp+20h] [bp-8h]@1
  unsigned int v17; // [sp+24h] [bp-4h]@1
  int v18; // [sp+28h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v5 = pkTarget;
  v6 = pkInfo->SndRandPlay == 0;
  v16 = this;
  if ( v6 )
  {
    v8 = pkInfo->SndPos[iIndex];
  }
  else
  {
    v7 = rand() & 0x80000001;
    v6 = v7 == 0;
    if ( v7 < 0 )
      v6 = ((v7 - 1) | 0xFFFFFFFE) == -1;
    if ( v6 )
      v8 = pkInfo->SndPos[1];
    else
      v8 = pkInfo->SndPos[0];
  }
  v9 = 0;
  v10 = 0;
  if ( !pkTarget )
    v5 = pkCaster;
  switch ( v8 )
  {
    case 0u:
    case 3u:
      if ( pkCaster != (Char *)-776 )
        v9 = pkCaster->m_kCharShape.m_apkLinkNode[1];
      v10 = pkCaster;
      goto LABEL_31;
    case 1u:
      if ( pkCaster != (Char *)-776 )
        v9 = pkCaster->m_kCharShape.m_apkLinkNode[5];
      v10 = pkCaster;
      goto LABEL_31;
    case 2u:
      if ( pkCaster != (Char *)-776 )
        v9 = pkCaster->m_kCharShape.m_apkLinkNode[11];
      v10 = pkCaster;
      goto LABEL_31;
    case 4u:
      if ( pkCaster != (Char *)-776 )
        v9 = pkCaster->m_kCharShape.m_apkLinkNode[17];
      v10 = pkCaster;
      goto LABEL_31;
    case 5u:
      if ( pkCaster != (Char *)-776 )
        v9 = pkCaster->m_kCharShape.m_apkLinkNode[18];
      v10 = pkCaster;
      goto LABEL_31;
    case 8u:
      v9 = pkCaster->m_spScene.m_pObject;
      v10 = pkCaster;
      goto LABEL_31;
    case 9u:
      v9 = v5->m_spScene.m_pObject;
      goto LABEL_30;
    case 6u:
    case 7u:
    case 0xAu:
      if ( v5 != (Char *)-776 )
        v9 = v5->m_kCharShape.m_apkLinkNode[5];
LABEL_30:
      v10 = v5;
LABEL_31:
      if ( !v9 )
        goto LABEL_32;
      break;
    default:
LABEL_32:
      v9 = v10->m_spScene.m_pObject;
      break;
  }
  kPos.x = v9->baseclass_0.m_kWorld.m_Translate.x;
  kPos.y = v9->baseclass_0.m_kWorld.m_Translate.y;
  v6 = v16->m_pkEffectGroup == 0;
  kPos.z = v9->baseclass_0.m_kWorld.m_Translate.z;
  if ( !v6 )
  {
    v11 = fs("%s.wav");
    v12 = v16->m_pkEffectGroup;
    v14 = v11;
    ((void (__stdcall *)(char *, NiPoint3 *, _DWORD))v12->baseclass_0.baseclass_0.vfptr->Play3DSound)(&v13, &kPos, 0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006A45D0) --------------------------------------------------------
bool __thiscall SoundMgr::InitializeSoundGroups(SoundMgr *this)
{
  SoundMgr *v1; // esi@1
  void *v2; // eax@1
  SoundGroupBgm *v3; // eax@2
  void *v4; // eax@6
  SoundGroupInterface *v5; // eax@7
  void *v6; // eax@11
  SoundGroupFieldEffect *v7; // eax@12
  void *v8; // eax@16
  SoundGroupAmbient *v9; // eax@17
  void *v10; // eax@21
  SoundGroup3DAmbient *v11; // eax@22
  void *v12; // eax@26
  void *v13; // edi@26
  SoundGroupMainChar *v14; // ecx@27
  void *v15; // eax@31
  SoundGroupNPCVoice *v16; // eax@32
  char bFailed; // [sp+33h] [bp-Dh]@1

  v1 = this;
  bFailed = 0;
  v2 = operator new(0x88u);
  if ( v2 )
    SoundGroupBgm::SoundGroupBgm((SoundGroupBgm *)v2);
  else
    v3 = 0;
  v1->m_pkBGMGroup = v3;
  if ( !v3->baseclass_0.baseclass_0.vfptr->Initialize((SoundGroup *)v3, v1, 2u) )
    bFailed = 1;
  v4 = operator new(0xC0u);
  if ( v4 )
    SoundGroupInterface::SoundGroupInterface((SoundGroupInterface *)v4);
  else
    v5 = 0;
  v1->m_pkInterfaceGroup = v5;
  if ( !v5->baseclass_0.baseclass_0.baseclass_0.vfptr->Initialize((SoundGroup *)v5, v1, 6u) )
    bFailed |= 1u;
  v6 = operator new(0x80u);
  if ( v6 )
    SoundGroupFieldEffect::SoundGroupFieldEffect((SoundGroupFieldEffect *)v6);
  else
    v7 = 0;
  v1->m_pkEffectGroup = v7;
  if ( !v7->baseclass_0.baseclass_0.vfptr->Initialize((SoundGroup *)v7, v1, 6u) )
    bFailed |= 1u;
  SoundGroup::SetMinDistance(&v1->m_pkEffectGroup->baseclass_0.baseclass_0, 100.0);
  v8 = operator new(0xF0u);
  if ( v8 )
    SoundGroupAmbient::SoundGroupAmbient((SoundGroupAmbient *)v8);
  else
    v9 = 0;
  v1->m_pkAmbientGroup = v9;
  if ( !v9->baseclass_0.baseclass_0.vfptr->Initialize((SoundGroup *)v9, v1, 8u) )
    bFailed |= 1u;
  v10 = operator new(0x80u);
  if ( v10 )
    SoundGroup3DAmbient::SoundGroup3DAmbient((SoundGroup3DAmbient *)v10);
  else
    v11 = 0;
  v1->m_pk3DAmbientGroup = v11;
  if ( !v11->baseclass_0.baseclass_0.baseclass_0.vfptr->Initialize((SoundGroup *)v11, v1, 3u) )
    bFailed |= 1u;
  v1->m_pk3DAmbientGroup->baseclass_0.baseclass_0.m_dwMaxUniqueSourceCount = 10;
  v12 = operator new(0x40u);
  v13 = v12;
  if ( v12 )
  {
    SoundGroupStatic::SoundGroupStatic((SoundGroupStatic *)v12);
    *(_DWORD *)v13 = &SoundGroupMainChar::_vftable_;
    v14 = (SoundGroupMainChar *)v13;
  }
  else
  {
    v14 = 0;
  }
  v1->m_pkMainCharGroup = v14;
  if ( !(unsigned __int8)((int (__stdcall *)(_DWORD, _DWORD))v14->baseclass_0.baseclass_0.baseclass_0.vfptr->Initialize)(
                           v1,
                           1) )
    bFailed |= 1u;
  v15 = operator new(0x80u);
  if ( v15 )
    SoundGroupNPCVoice::SoundGroupNPCVoice((SoundGroupNPCVoice *)v15);
  else
    v16 = 0;
  v1->m_pkNPCVoiceGroup = v16;
  if ( !v16->baseclass_0.baseclass_0.vfptr->Initialize((SoundGroup *)v16, v1, 1u) )
    bFailed |= 1u;
  v1->m_pkNPCVoiceGroup->baseclass_0.m_dwMaxUniqueSourceCount = 2;
  return bFailed == 0;
}
// 9C8514: using guessed type int (__stdcall *SoundGroupMainChar___vftable_)(int result, int uiType);

//----- (006A4810) --------------------------------------------------------
bool __thiscall SoundMgr::Init(SoundMgr *this)
{
  unsigned int v1; // ST1C_4@1
  SoundMgr *v2; // ebx@1
  NiAudioSystem *v3; // eax@1
  bool result; // al@1
  void *v5; // eax@3
  int v6; // edi@3
  int v7; // eax@4
  NiNode *v8; // esi@5
  NiRefObjectVtbl *v9; // esi@14
  char *v10; // eax@14
  void *v11; // eax@15
  int v12; // eax@18
  void *v13; // esi@20
  NiMilesListener *v14; // eax@23
  void *v15; // eax@23
  NiD3DDefaultShader *v16; // eax@24
  void *kPos; // [sp+2Ch] [bp-38h]@15
  NiProviderInfo *pkProvider; // [sp+30h] [bp-34h]@3
  char acTofind[31]; // [sp+34h] [bp-30h]@15
  unsigned int v20; // [sp+54h] [bp-10h]@1
  int v21; // [sp+60h] [bp-4h]@3
  int v22; // [sp+64h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v1 = (unsigned int)&v22 ^ __security_cookie;
  v2 = this;
  v3 = NiAudioSystem::GetAudioSystem();
  v2->m_pkAudioSystem = (NiMilesAudioSystem *)v3;
  ((void (__thiscall *)(NiAudioSystem *, HWND, unsigned int))v3->baseclass_0.baseclass_0.vfptr[33].__vecDelDtor)(
    v3,
    g_hMainWnd,
    v1);
  v2->m_dwAvailableChannelCount = 100;
  result = SoundMgr::InitializeSoundGroups(v2);
  if ( !result )
  {
    v2->m_bEnable = 0;
    return result;
  }
  v5 = operator new(0xE8u);
  pkProvider = (NiProviderInfo *)v5;
  v6 = 0;
  v21 = 0;
  if ( v5 )
  {
    NiNode::NiNode((NiNode *)v5, 0);
    v6 = v7;
  }
  v8 = v2->m_spListeneerNode.m_pObject;
  v21 = -1;
  if ( v8 != (NiNode *)v6 )
  {
    if ( v8
      && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v2->m_spListeneerNode.m_pObject = (NiNode *)v6;
    if ( v6 )
      InterlockedIncrement((volatile LONG *)(v6 + 4));
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v9 = v2->m_pkAudioSystem->baseclass_0.baseclass_0.baseclass_0.vfptr;
  v10 = Folder::Merge(&Folder::m_acMain, "miles");
  if ( !(unsigned __int8)v9[15].__vecDelDtor((NiRefObject *)v2->m_pkAudioSystem, (unsigned int)v10) )
    goto LABEL_29;
  v11 = NiMilesAudioSystem::GetFirstProvider(v2->m_pkAudioSystem, &kPos);
  memcpy(acTofind, "Miles Fast 2D Positional Audio", 0x1Cu);
  *(_WORD *)&acTofind[28] = *(_WORD *)"io";
  pkProvider = (NiProviderInfo *)v11;
  acTofind[30] = aMilesFast2dPos[30];
  if ( v11 )
  {
    while ( 1 )
    {
      strstr(*(char **)v11, acTofind);
      if ( v12 )
        break;
      pkProvider = NiMilesAudioSystem::GetNextProvider(v2->m_pkAudioSystem, &kPos);
      if ( !pkProvider )
        goto LABEL_20;
      v11 = pkProvider;
    }
    v13 = pkProvider;
    goto LABEL_23;
  }
LABEL_20:
  v13 = NiMilesAudioSystem::GetFirstProvider(v2->m_pkAudioSystem, &kPos);
  if ( !v13 )
  {
LABEL_29:
    v2->m_bEnable = 0;
    SoundGroup::SetEnableWholeGroup(0);
    return 0;
  }
LABEL_23:
  NiMilesAudioSystem::SetDefaultProvider(v2->m_pkAudioSystem, (NiProviderInfo *)v13);
  ((void (__stdcall *)(_DWORD))v2->m_pkAudioSystem->baseclass_0.baseclass_0.baseclass_0.vfptr[26].__vecDelDtor)(1.0);
  v14 = NiMilesAudioSystem::GetListener(v2->m_pkAudioSystem);
  v2->m_pkListener = v14;
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[39].__vecDelDtor(
    (NiRefObject *)v14,
    (unsigned int)v13);
  v15 = operator new(0xE8u);
  pkProvider = (NiProviderInfo *)v15;
  v21 = 1;
  if ( v15 )
    NiNode::NiNode((NiNode *)v15, 0);
  else
    v16 = 0;
  v21 = -1;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spListeneerNode, v16);
  NiAVObject::Update(&v2->m_spListeneerNode.m_pObject->baseclass_0, 0.0, 1);
  ((void (__stdcall *)(NiPoint3 *))v2->m_pkListener->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(&World::ms_kNorthDir);
  ((void (__stdcall *)(NiPoint3 *))v2->m_pkListener->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[32].__vecDelDtor)(&World::ms_kUpDir);
  ((void (*)(void))v2->m_pkAudioSystem->baseclass_0.baseclass_0.baseclass_0.vfptr[20].__vecDelDtor)();
  v2->m_bEnable = 1;
  SoundGroup::SetEnableWholeGroup(1);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A4A70) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
}
// 9C84F0: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A4A80) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C84F0: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A4AB0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C84F0: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C8500: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A4B40) --------------------------------------------------------
void __thiscall NiTPointerList<NiPointer<NiAudioSource>>::_NiTPointerList<NiPointer<NiAudioSource>>(NiTPointerList<NiPointer<NiAudioSource> > *this)
{
  NiTPointerList<NiPointer<NiAudioSource> > *v1; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v2; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
}
// 9C84F0: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C8500: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A4BC0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<IAmbientArea *>,IAmbientArea *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<IAmbientArea *> *v3; // esi@1
  NiTListItem<IAmbientArea *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *>Vtbl *)&NiTPointerListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<IAmbientArea__>_IAmbientArea__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C82D8: using guessed type int (__thiscall *NiTListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);
// 9C8328: using guessed type int (__thiscall *NiTPointerListBase_DFALL_IAmbientArea ___IAmbientArea _____vftable_)(void *p, char);

//----- (006A4C50) --------------------------------------------------------
void __thiscall PgTList<NiPointer<NiAudioSource>>::_PgTList<NiPointer<NiAudioSource>>(PgTList<NiPointer<NiAudioSource> > *this)
{
  PgTList<NiPointer<NiAudioSource> > *v1; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v2; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&PgTList<NiPointer<NiAudioSource>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
}
// 9C84F0: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85A4: using guessed type int (__thiscall *PgTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A4CD0) --------------------------------------------------------
void *__thiscall PgTList<NiPointer<NiAudioSource>>::_vector_deleting_destructor_(PgTList<NiPointer<NiAudioSource> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<NiAudioSource> > *v3; // esi@1
  NiTListItem<NiPointer<NiAudioSource> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiAudioSource> >Vtbl *)&PgTList<NiPointer<NiAudioSource>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiAudioSource>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C84F0: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85A4: using guessed type int (__thiscall *PgTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);

//----- (006A4D60) --------------------------------------------------------
NiPointer<PgWin> *__thiscall NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *this, NiPointer<PgWin> *result, NiPointer<PgWin> *element)
{
  NiTListItem<NiPointer<PgWin> > *v3; // eax@1
  int v4; // edx@2
  void *v5; // esi@2
  void *v6; // eax@4
  void *v7; // eax@6
  void *v8; // esi@6
  signed int v9; // ebx@6
  int v10; // eax@11
  int v11; // ebx@13
  int v12; // esi@18
  int v14; // [sp+0h] [bp-18h]@6
  void *kPos; // [sp+4h] [bp-14h]@5
  int v16; // [sp+8h] [bp-10h]@1
  int v17; // [sp+14h] [bp-4h]@6

  v16 = 0;
  v3 = this->baseclass_0.m_pkHead;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = (int)&v3->m_element;
      v5 = v3;
      v3 = v3->m_pkNext;
      if ( element->m_pObject == *(PgWin **)v4 )
        break;
      if ( !v3 )
        goto LABEL_4;
    }
    v6 = v5;
  }
  else
  {
LABEL_4:
    v6 = 0;
  }
  kPos = v6;
  if ( v6 )
  {
    v7 = NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::RemovePos(
           this,
           (NiPointer<PgWin> *)&v14,
           &kPos);
    v8 = element;
    v9 = 1;
    v17 = 1;
  }
  else
  {
    v8 = element->m_pObject;
    element = (NiPointer<PgWin> *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)v8 + 1);
    v7 = &element;
    v9 = 2;
  }
  v10 = *(_DWORD *)v7;
  result->m_pObject = (PgWin *)v10;
  if ( v10 )
    InterlockedIncrement((volatile LONG *)(v10 + 4));
  v11 = v9 | 4;
  if ( v11 & 2 )
  {
    v11 &= 0xFFFFFFFDu;
    v16 = v11;
    if ( v8 )
    {
      if ( !InterlockedDecrement((volatile LONG *)v8 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v8)(v8, 1);
    }
  }
  v17 = 0;
  if ( v11 & 1 )
  {
    v12 = v14;
    v16 = v11 & 0xFFFFFFFE;
    if ( v14 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v12 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
    }
  }
  return result;
}

//----- (006A4E80) --------------------------------------------------------
void *__thiscall SoundGroupFieldEffect::_scalar_deleting_destructor_(SoundGroupNPCVoice *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SoundGroupDynamic::_SoundGroupDynamic(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006A4EB0) --------------------------------------------------------
void __thiscall SoundGroupInterface::SoundGroupInterface(SoundGroupInterface *this)
{
  SoundGroupInterface *v1; // ebx@1

  v1 = this;
  SoundGroupStatic::SoundGroupStatic(&this->baseclass_0.baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupInterface::_vftable_;
  SoundGroup::SoundGroup(&v1->m_kDynamicGroup.baseclass_0);
  v1->m_kDynamicGroup.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupDynamic::_vftable_;
  *(_DWORD *)&v1->m_kDynamicGroup.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kDynamicGroup.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kDynamicGroup.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kDynamicGroup.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&SpTList<void__>::_vftable_;
  *(_DWORD *)&v1->m_kDynamicGroup.m_kActiveSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kDynamicGroup.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kDynamicGroup.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kDynamicGroup.m_kActiveSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  v1->m_kDynamicGroup.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->m_kDynamicGroup.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kDynamicGroup.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kDynamicGroup.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kDynamicGroup.m_k3DSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->m_kDynamicGroup.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kDynamicGroup.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kDynamicGroup.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
}
// 9C8584: using guessed type int (__thiscall *NiTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85B4: using guessed type int (__thiscall *SpTList_void _____vftable_)(void *p, char);
// 9C85C4: using guessed type int (__stdcall *SoundGroupDynamic___vftable_)(NiPointer<NiAudioSource> *result, int spSource);
// 9C8614: using guessed type int (__stdcall *SoundGroupInterface___vftable_)(int result, int uiType);

//----- (006A4F80) --------------------------------------------------------
void *__thiscall SoundGroupInterface::_scalar_deleting_destructor_(SoundGroupInterface *this, unsigned int a2)
{
  SoundGroupStatic *v2; // esi@1

  v2 = (SoundGroupStatic *)this;
  SoundGroupDynamic::_SoundGroupDynamic(&this->m_kDynamicGroup);
  SoundGroupStatic::_SoundGroupStatic(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006A4FF0) --------------------------------------------------------
void __thiscall SoundGroupFieldEffect::SoundGroupFieldEffect(SoundGroupFieldEffect *this)
{
  SoundGroupFieldEffect *v1; // esi@1

  v1 = this;
  SoundGroup::SoundGroup(&this->baseclass_0.baseclass_0);
  *(_DWORD *)&v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&SpTList<void__>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupFieldEffect::_vftable_;
}
// 9C8584: using guessed type int (__thiscall *NiTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85B4: using guessed type int (__thiscall *SpTList_void _____vftable_)(void *p, char);
// 9C8664: using guessed type int (__stdcall *SoundGroupFieldEffect___vftable_)(NiPointer<NiAudioSource> *result, int spSource);

//----- (006A5040) --------------------------------------------------------
void __thiscall SoundGroup3DAmbient::SoundGroup3DAmbient(SoundGroup3DAmbient *this)
{
  SoundGroup3DAmbient *v1; // esi@1

  v1 = this;
  SoundGroup::SoundGroup(&this->baseclass_0.baseclass_0.baseclass_0);
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&SpTList<void__>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroup3DAmbient::_vftable_;
}
// 9C8584: using guessed type int (__thiscall *NiTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85B4: using guessed type int (__thiscall *SpTList_void _____vftable_)(void *p, char);
// 9C86B4: using guessed type int (__stdcall *SoundGroup3DAmbient___vftable_)(NiPointer<NiAudioSource> *result, int spSource);

//----- (006A5090) --------------------------------------------------------
void __thiscall SoundGroupNPCVoice::SoundGroupNPCVoice(SoundGroupNPCVoice *this)
{
  SoundGroupNPCVoice *v1; // esi@1

  v1 = this;
  SoundGroup::SoundGroup(&this->baseclass_0.baseclass_0);
  *(_DWORD *)&v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&SpTList<void__>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupNPCVoice::_vftable_;
}
// 9C8584: using guessed type int (__thiscall *NiTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85B4: using guessed type int (__thiscall *SpTList_void _____vftable_)(void *p, char);
// 9C8704: using guessed type int (__stdcall *SoundGroupNPCVoice___vftable_)(NiPointer<NiAudioSource> *result, int spSource);

//----- (006A50E0) --------------------------------------------------------
void __thiscall SoundGroupAmbient::SoundGroupAmbient(SoundGroupAmbient *this)
{
  SoundGroupAmbient *v1; // edi@1

  v1 = this;
  SoundGroupStatic::SoundGroupStatic(&this->baseclass_0);
  v1->baseclass_40.vfptr = (IAmbientSoundManagerVtbl *)IAmbientSoundManager::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroupAmbient::_vftable_;
  v1->baseclass_40.vfptr = (IAmbientSoundManagerVtbl *)&SoundGroupAmbient::_vftable_;
  *(_DWORD *)&v1->m_kAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kAreaList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kAreaList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kAreaList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<IAmbientArea *>,IAmbientArea *>Vtbl *)&NiTList<IAmbientArea__>::_vftable_;
  SoundGroup::SoundGroup(&v1->m_k3DAmbient.baseclass_0.baseclass_0.baseclass_0);
  *(_DWORD *)&v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kUniqueSourceList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,void *>Vtbl *)&SpTList<void__>::_vftable_;
  *(_DWORD *)&v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kActiveSourceList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_kAmbientSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<NiAudioSource> >,NiPointer<NiAudioSource> >Vtbl *)&NiTList<NiPointer<NiAudioSource>>::_vftable_;
  *(_DWORD *)&v1->m_k3DAmbient.baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.m_k3DSourceRecycleList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_k3DAmbient.baseclass_0.baseclass_0.baseclass_0.vfptr = (SoundGroupVtbl *)&SoundGroup3DAmbient::_vftable_;
  *(_DWORD *)&v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kPlayingAreaList.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kPlayingAreaList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SoundGroupAmbient::PlayingAreaInfo *>,SoundGroupAmbient::PlayingAreaInfo *>Vtbl *)&NiTList<SoundGroupAmbient::PlayingAreaInfo__>::_vftable_;
}
// 9C83BC: using guessed type int (__stdcall *SoundGroupAmbient___vftable_)(float fRadius);
// 9C83CC: using guessed type int (__stdcall *SoundGroupAmbient___vftable_)(int result, int uiType);
// 9C84E4: using guessed type int (*IAmbientSoundManager___vftable_[2])();
// 9C8564: using guessed type int (__thiscall *NiTList_IAmbientArea _____vftable_)(void *p, char);
// 9C8574: using guessed type int (__thiscall *NiTList_SoundGroupAmbient__PlayingAreaInfo _____vftable_)(void *p, char);
// 9C8584: using guessed type int (__thiscall *NiTList_NiPointer_NiAudioSource_____vftable_)(void *p, char);
// 9C85B4: using guessed type int (__thiscall *SpTList_void _____vftable_)(void *p, char);
// 9C86B4: using guessed type int (__stdcall *SoundGroup3DAmbient___vftable_)(NiPointer<NiAudioSource> *result, int spSource);

//----- (006A51F0) --------------------------------------------------------
void __thiscall MachineOpt::WinPos::WinPos(MachineOpt::WinPos *this, char *pcWinName, float fX, float fY)
{
  char *v4; // eax@1
  MachineOpt::WinPos *v5; // esi@1
  char v6; // cl@2
  unsigned int v7; // edi@3
  void *v8; // eax@3

  v4 = pcWinName;
  v5 = this;
  do
    v6 = *v4++;
  while ( v6 );
  v7 = v4 - (pcWinName + 1) + 1;
  v8 = operator new__(v7);
  v5->m_pcWinName = (char *)v8;
  memcpy((char *)v8, pcWinName, v7);
  v5->m_fXPosRate = fX;
  v5->m_fYPosRate = fY;
}

//----- (006A5240) --------------------------------------------------------
void __thiscall MachineOpt::WinPos::WinPos(MachineOpt::WinPos *this)
{
  this->m_pcWinName = 0;
}

//----- (006A5250) --------------------------------------------------------
void __thiscall MachineOpt::WinPos::_WinPos(MachineOpt::WinPos *this)
{
  operator delete__(this->m_pcWinName);
}

//----- (006A5260) --------------------------------------------------------
bool __thiscall MachineOpt::WinPos::Save(MachineOpt::WinPos *this, _iobuf *fp)
{
  MachineOpt::WinPos *v2; // edi@1
  char *v3; // eax@1
  bool result; // al@2
  int v5; // edx@3
  char v6; // cl@4
  unsigned int uiLen; // [sp+4h] [bp-4h]@5

  v2 = this;
  v3 = this->m_pcWinName;
  if ( this->m_pcWinName )
  {
    v5 = (int)(v3 + 1);
    do
      v6 = *v3++;
    while ( v6 );
    uiLen = (unsigned int)&v3[-v5 + 1];
    if ( fwrite(&uiLen, 4u, 1u, fp) == 1
      && fwrite(v2->m_pcWinName, uiLen, 1u, fp) == 1
      && fwrite(&v2->m_fXPosRate, 4u, 1u, fp) == 1 )
      result = fwrite(&v2->m_fYPosRate, 4u, 1u, fp) == 1;
    else
      result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006A5300) --------------------------------------------------------
bool __thiscall MachineOpt::WinPos::Load(MachineOpt::WinPos *this, _iobuf *fp)
{
  MachineOpt::WinPos *v2; // edi@1
  bool result; // al@4
  void *v4; // eax@5
  unsigned int v5; // ST04_4@5
  unsigned int uiLen; // [sp+8h] [bp-4h]@3

  v2 = this;
  if ( this->m_pcWinName )
    operator delete__(this->m_pcWinName);
  if ( fread(&uiLen, 4u, 1u, fp) != 1
    || (v4 = operator new__(uiLen), v5 = uiLen, v2->m_pcWinName = (char *)v4, fread(v4, v5, 1u, fp) != 1)
    || fread(&v2->m_fXPosRate, 4u, 1u, fp) != 1 )
    result = 0;
  else
    result = fread(&v2->m_fYPosRate, 4u, 1u, fp) == 1;
  return result;
}

//----- (006A5390) --------------------------------------------------------
bool __cdecl MachineOpt::Load(_iobuf *fp)
{
  return 1;
}

//----- (006A53A0) --------------------------------------------------------
bool __cdecl MachineOpt::Save(_iobuf *fp)
{
  return 1;
}

//----- (006A53B0) --------------------------------------------------------
float __cdecl MachineOpt::GetCurGama()
{
  double v0; // st7@1
  float result; // st7@2

  v0 = MachineOpt::ms_kGraphicOption.fCurGama;
  LODWORD(result) = LODWORD(v0);
  return result;
}

//----- (006A53C0) --------------------------------------------------------
void __thiscall MachineOpt::SoundOption::SetDefault(MachineOpt::SoundOption *this)
{
  *(_DWORD *)&this->kVersion.year = *(_DWORD *)&CURRENT_SOUND_OPTION_VERSION;
  *(_WORD *)&this->kVersion.hour = *(_WORD *)&CURRENT_SOUND_OPTION_VERSION.hour;
  this->uiMasterVolume = 50;
  this->uiBgVolume = 50;
  this->uiEffectVolume = 50;
  this->uiEnvEffectVolume = 50;
  this->uiVoiceVolume = 50;
}

//----- (006A53F0) --------------------------------------------------------
signed int __cdecl MachineOpt::SetDefaultSoundOption()
{
  signed int result; // eax@1

  MachineOpt::ms_kSoundOption = *(_DWORD *)&CURRENT_SOUND_OPTION_VERSION;
  result = 50;
  word_A825E4 = *(_WORD *)&CURRENT_SOUND_OPTION_VERSION.hour;
  dword_A825E8 = 50;
  dword_A825EC = 50;
  dword_A825F0 = 50;
  dword_A825F4 = 50;
  dword_A825F8 = 50;
  return result;
}
// A825E0: using guessed type int MachineOpt__ms_kSoundOption;
// A825E4: using guessed type __int16 word_A825E4;
// A825E8: using guessed type int dword_A825E8;
// A825EC: using guessed type int dword_A825EC;
// A825F0: using guessed type int dword_A825F0;
// A825F4: using guessed type int dword_A825F4;
// A825F8: using guessed type int dword_A825F8;

//----- (006A5430) --------------------------------------------------------
MachineOpt::SoundOption *__cdecl MachineOpt::GetSoundOption()
{
  return (MachineOpt::SoundOption *)&MachineOpt::ms_kSoundOption;
}
// A825E0: using guessed type int MachineOpt__ms_kSoundOption;

//----- (006A5440) --------------------------------------------------------
void __cdecl MachineOpt::SetSoundOption(MachineOpt::SoundOption *rkOption)
{
  memcpy(&MachineOpt::ms_kSoundOption, rkOption, 0x1Cu);
}
// A825E0: using guessed type int MachineOpt__ms_kSoundOption;

//----- (006A5460) --------------------------------------------------------
void __cdecl MachineOpt::SetChatWinFilter(unsigned int uiMode, unsigned int uiOption)
{
  dword_B5BB2E[uiMode] = uiOption;
}
// B5BB2E: using guessed type int dword_B5BB2E[];

//----- (006A5480) --------------------------------------------------------
void __cdecl MachineOpt::SetSysMsgWinFilter(unsigned int uiOption)
{
  dword_B5BB42 = uiOption;
}
// B5BB42: using guessed type int dword_B5BB42;

//----- (006A5490) --------------------------------------------------------
bool __cdecl MachineOpt::GetGlowEffect()
{
  return MachineOpt::ms_kGraphicOption.bGlowEnable;
}

//----- (006A54A0) --------------------------------------------------------
bool __cdecl MachineOpt::GetLightEffect()
{
  return MachineOpt::ms_kGraphicOption.bLightEnable;
}

//----- (006A54B0) --------------------------------------------------------
int __cdecl MachineOpt::GetReadNum(_iobuf *fp, int size)
{
  int result; // eax@2
  int v3; // edi@5

  if ( size )
  {
    if ( fp )
    {
      fseek(fp, 0, 2);
      v3 = ftell(fp);
      fseek(fp, 0, 0);
      result = v3 / size;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006A5500) --------------------------------------------------------
bool __cdecl MachineOpt::WriteOptFile(_iobuf *fp, void *pData, unsigned int size)
{
  bool result; // al@4

  if ( fp && pData && size )
  {
    fwrite(pData, size, 1u, fp);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006A5530) --------------------------------------------------------
bool __cdecl MachineOpt::IsValidateFile(_iobuf *fp, int dataSize)
{
  int v2; // edi@1

  fseek(fp, 0, 2);
  v2 = ftell(fp);
  fseek(fp, 0, 0);
  return v2 % dataSize == 0;
}

//----- (006A5570) --------------------------------------------------------
void __thiscall MachineOpt::UserLoginOption::SetDefault(MachineOpt::UserLoginOption *this)
{
  MachineOpt::UserLoginOption *v1; // esi@1
  char *v2; // eax@1

  v1 = this;
  v2 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
  strncpy(v1->username, v2, 0x40u);
  v1->u32NewBieFlags.value |= 0xFFFFFFFEu;
  v1->BufXPos = 0.126;
  v1->BufYPos = 0.125;
  v1->bFriendAddAllow = 1;
  *(_DWORD *)&v1->BufWidth = 1310920;
  v1->DBufXPos = 0.126;
  *(_DWORD *)&v1->DBufWidth = 1310920;
  *(_DWORD *)&v1->ChargedBufWidth = 1310920;
  v1->DBufYPos = 0.15360001;
  v1->bTargetOfTerget = 0;
  v1->FullMapAlpha = 0.89999998;
  v1->ChargedBufXPos = 0.126;
  v1->ChargedBufYPos = 0.1816;
}

//----- (006A55F0) --------------------------------------------------------
void __cdecl MachineOpt::SetGameOpt(PROTO_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD *pkProto)
{
  unsigned int v1; // eax@1
  signed int v2; // edx@2
  PROTO_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD *v3; // eax@3

  v1 = pkProto->nGameOptionDataCnt;
  if ( v1 <= 0x1C )
  {
    v2 = 0;
    if ( (unsigned __int16)v1 > 0u )
    {
      v3 = pkProto + 2;
      do
      {
        switch ( v3[-1].nGameOptionDataCnt )
        {
          case 0u:
            byte_B5BB1E = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 1u:
            byte_B5BB1F = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 2u:
          case 0x15u:
            byte_B5BB20 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 3u:
            byte_B5BB21 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 4u:
            byte_B5BB22 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 5u:
            byte_B5BB23 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 6u:
            byte_B5BB24 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 7u:
            byte_B5BB25 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 8u:
            byte_B5BB26 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 9u:
            byte_B5BB4B = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0xAu:
            byte_B5BB4C = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0xBu:
            byte_B5BB4D = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0xCu:
            byte_B5BB28 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0xDu:
            byte_B5BB29 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0xEu:
            byte_B5BB2A = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0xFu:
            byte_B5BB2B = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x10u:
            byte_B5BB2C = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x11u:
            byte_B5BB2D = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x12u:
            byte_B5BB4A = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x13u:
            byte_B5BB46 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x14u:
            byte_B5BB47 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x16u:
            byte_B5BB48 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x17u:
            byte_B5BB49 = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          case 0x1Bu:
            byte_B5BB4E = LOBYTE(v3->nGameOptionDataCnt) != 0;
            break;
          default:
            break;
        }
        ++v2;
        v3 = (PROTO_NC_CHAR_OPTION_IMPROVE_GET_GAMEOPTION_CMD *)((char *)v3 + 3);
      }
      while ( v2 < pkProto->nGameOptionDataCnt );
    }
  }
}
// B5BB1E: using guessed type char byte_B5BB1E;
// B5BB1F: using guessed type char byte_B5BB1F;
// B5BB20: using guessed type char byte_B5BB20;
// B5BB21: using guessed type char byte_B5BB21;
// B5BB22: using guessed type char byte_B5BB22;
// B5BB23: using guessed type char byte_B5BB23;
// B5BB24: using guessed type char byte_B5BB24;
// B5BB25: using guessed type char byte_B5BB25;
// B5BB26: using guessed type char byte_B5BB26;
// B5BB28: using guessed type char byte_B5BB28;
// B5BB29: using guessed type char byte_B5BB29;
// B5BB2A: using guessed type char byte_B5BB2A;
// B5BB2B: using guessed type char byte_B5BB2B;
// B5BB2C: using guessed type char byte_B5BB2C;
// B5BB2D: using guessed type char byte_B5BB2D;
// B5BB46: using guessed type char byte_B5BB46;
// B5BB47: using guessed type char byte_B5BB47;
// B5BB48: using guessed type char byte_B5BB48;
// B5BB49: using guessed type char byte_B5BB49;
// B5BB4A: using guessed type char byte_B5BB4A;
// B5BB4B: using guessed type char byte_B5BB4B;
// B5BB4C: using guessed type char byte_B5BB4C;
// B5BB4D: using guessed type char byte_B5BB4D;
// B5BB4E: using guessed type char byte_B5BB4E;

//----- (006A5830) --------------------------------------------------------
int __cdecl MachineOpt::MakeDefaultKey()
{
  int result; // eax@1

  word_B5B1F0 = 16;
  word_B5B1F8 = 17;
  result = 0;
  LOWORD(MachineOpt::m_keyMap) = 0;
  word_B5B172[0] = 30976;
  dword_B5B178 = 452984833;
  dword_B5B180 = 1124073474;
  dword_B5B1B0 = 1442840584;
  dword_B5B188 = 1224736771;
  dword_B5B190 = 1258291204;
  dword_B5B198 = 1275068421;
  dword_B5B1A8 = 1207959559;
  dword_B5B1E8 = 1476395023;
  dword_B5B1E0 = -570425330;
  dword_B5B2B8 = 1291845673;
  dword_B5B2C0 = 1426063402;
  dword_B5B2B0 = 1342177320;
  dword_B5B218 = 1375731733;
  dword_B5B1A0 = 1174405126;
  word_B5B1F2 = 18176;
  dword_B5B210 = 20;
  word_B5B1FA = 0;
  dword_B5B208 = 19;
  word_B5B200 = 18;
  word_B5B202 = 0;
  dword_B5B1B8 = 218103817;
  dword_B5B1C0 = 1309736970;
  dword_B5B1C8 = 1192296459;
  dword_B5B220 = 1091633174;
  dword_B5B1D0 = 1343291404;
  dword_B5B1D8 = 1460731917;
  dword_B5B2D8 = 45;
  dword_B5B228 = 1459617815;
  dword_B5B230 = 1392508952;
  dword_B5B238 = 25;
  dword_B5B240 = 1090519066;
  dword_B5B248 = 1140850715;
  dword_B5B258 = 536870941;
  dword_B5B250 = 1509949468;
  dword_B5B260 = 637534238;
  dword_B5B268 = 671088671;
  dword_B5B270 = 620757024;
  dword_B5B278 = 654311457;
  dword_B5B290 = 1358954532;
  dword_B5B298 = 1157627941;
  dword_B5B280 = 603979810;
  dword_B5B288 = 1409286179;
  dword_B5B2A0 = -184549338;
  dword_B5B2A8 = 1107296295;
  dword_B5B2C8 = 1510998059;
  dword_B5B2D0 = 44;
  dword_B5B2E0 = 587202606;
  dword_B5B2E8 = 822083631;
  dword_B5B2F0 = 838860848;
  dword_B5B2F8 = 855638065;
  dword_B5B300 = 872415282;
  dword_B5B308 = 889192499;
  dword_B5B310 = 905969716;
  dword_B5B318 = 922746933;
  dword_B5B320 = 939524150;
  dword_B5B328 = 956301367;
  dword_B5B330 = 805306424;
  dword_B5B338 = -1124073415;
  dword_B5B340 = -1157627846;
  dword_B5B348 = 823132219;
  dword_B5B350 = 839909436;
  dword_B5B358 = 856686653;
  dword_B5B360 = 873463870;
  dword_B5B368 = 890241087;
  dword_B5B370 = 907018304;
  dword_B5B378 = 923795521;
  dword_B5B380 = 940572738;
  dword_B5B388 = 957349955;
  dword_B5B390 = 806355012;
  dword_B5B398 = -1123024827;
  dword_B5B3A0 = -1156579258;
  dword_B5B3A8 = 823263303;
  dword_B5B3B0 = 840040520;
  dword_B5B3B8 = 856817737;
  dword_B5B3C0 = 873594954;
  dword_B5B3C8 = 890372171;
  dword_B5B3D0 = 907149388;
  dword_B5B3D8 = 923926605;
  dword_B5B3E0 = 940703822;
  dword_B5B3E8 = 957481039;
  dword_B5B3F0 = 806486096;
  dword_B5B3F8 = -1122893743;
  dword_B5B400 = -1156448174;
  dword_B5B408 = 83;
  dword_B5B410 = 84;
  dword_B5B418 = 85;
  dword_B5B420 = 86;
  dword_B5B428 = 87;
  dword_B5B430 = 88;
  dword_B5B438 = 89;
  dword_B5B440 = 90;
  dword_B5B448 = 91;
  dword_B5B450 = 92;
  dword_B5B458 = 93;
  dword_B5B460 = 94;
  return result;
}
// B5B170: using guessed type struct MachineOpt__stKeyMapData *MachineOpt__m_keyMap;
// B5B172: using guessed type __int16 word_B5B172[];
// B5B178: using guessed type int dword_B5B178;
// B5B180: using guessed type int dword_B5B180;
// B5B188: using guessed type int dword_B5B188;
// B5B190: using guessed type int dword_B5B190;
// B5B198: using guessed type int dword_B5B198;
// B5B1A0: using guessed type int dword_B5B1A0;
// B5B1A8: using guessed type int dword_B5B1A8;
// B5B1B0: using guessed type int dword_B5B1B0;
// B5B1B8: using guessed type int dword_B5B1B8;
// B5B1C0: using guessed type int dword_B5B1C0;
// B5B1C8: using guessed type int dword_B5B1C8;
// B5B1D0: using guessed type int dword_B5B1D0;
// B5B1D8: using guessed type int dword_B5B1D8;
// B5B1E0: using guessed type int dword_B5B1E0;
// B5B1E8: using guessed type int dword_B5B1E8;
// B5B1F0: using guessed type __int16 word_B5B1F0;
// B5B1F2: using guessed type __int16 word_B5B1F2;
// B5B1F8: using guessed type __int16 word_B5B1F8;
// B5B1FA: using guessed type __int16 word_B5B1FA;
// B5B200: using guessed type __int16 word_B5B200;
// B5B202: using guessed type __int16 word_B5B202;
// B5B208: using guessed type int dword_B5B208;
// B5B210: using guessed type int dword_B5B210;
// B5B218: using guessed type int dword_B5B218;
// B5B220: using guessed type int dword_B5B220;
// B5B228: using guessed type int dword_B5B228;
// B5B230: using guessed type int dword_B5B230;
// B5B238: using guessed type int dword_B5B238;
// B5B240: using guessed type int dword_B5B240;
// B5B248: using guessed type int dword_B5B248;
// B5B250: using guessed type int dword_B5B250;
// B5B258: using guessed type int dword_B5B258;
// B5B260: using guessed type int dword_B5B260;
// B5B268: using guessed type int dword_B5B268;
// B5B270: using guessed type int dword_B5B270;
// B5B278: using guessed type int dword_B5B278;
// B5B280: using guessed type int dword_B5B280;
// B5B288: using guessed type int dword_B5B288;
// B5B290: using guessed type int dword_B5B290;
// B5B298: using guessed type int dword_B5B298;
// B5B2A0: using guessed type int dword_B5B2A0;
// B5B2A8: using guessed type int dword_B5B2A8;
// B5B2B0: using guessed type int dword_B5B2B0;
// B5B2B8: using guessed type int dword_B5B2B8;
// B5B2C0: using guessed type int dword_B5B2C0;
// B5B2C8: using guessed type int dword_B5B2C8;
// B5B2D0: using guessed type int dword_B5B2D0;
// B5B2D8: using guessed type int dword_B5B2D8;
// B5B2E0: using guessed type int dword_B5B2E0;
// B5B2E8: using guessed type int dword_B5B2E8;
// B5B2F0: using guessed type int dword_B5B2F0;
// B5B2F8: using guessed type int dword_B5B2F8;
// B5B300: using guessed type int dword_B5B300;
// B5B308: using guessed type int dword_B5B308;
// B5B310: using guessed type int dword_B5B310;
// B5B318: using guessed type int dword_B5B318;
// B5B320: using guessed type int dword_B5B320;
// B5B328: using guessed type int dword_B5B328;
// B5B330: using guessed type int dword_B5B330;
// B5B338: using guessed type int dword_B5B338;
// B5B340: using guessed type int dword_B5B340;
// B5B348: using guessed type int dword_B5B348;
// B5B350: using guessed type int dword_B5B350;
// B5B358: using guessed type int dword_B5B358;
// B5B360: using guessed type int dword_B5B360;
// B5B368: using guessed type int dword_B5B368;
// B5B370: using guessed type int dword_B5B370;
// B5B378: using guessed type int dword_B5B378;
// B5B380: using guessed type int dword_B5B380;
// B5B388: using guessed type int dword_B5B388;
// B5B390: using guessed type int dword_B5B390;
// B5B398: using guessed type int dword_B5B398;
// B5B3A0: using guessed type int dword_B5B3A0;
// B5B3A8: using guessed type int dword_B5B3A8;
// B5B3B0: using guessed type int dword_B5B3B0;
// B5B3B8: using guessed type int dword_B5B3B8;
// B5B3C0: using guessed type int dword_B5B3C0;
// B5B3C8: using guessed type int dword_B5B3C8;
// B5B3D0: using guessed type int dword_B5B3D0;
// B5B3D8: using guessed type int dword_B5B3D8;
// B5B3E0: using guessed type int dword_B5B3E0;
// B5B3E8: using guessed type int dword_B5B3E8;
// B5B3F0: using guessed type int dword_B5B3F0;
// B5B3F8: using guessed type int dword_B5B3F8;
// B5B400: using guessed type int dword_B5B400;
// B5B408: using guessed type int dword_B5B408;
// B5B410: using guessed type int dword_B5B410;
// B5B418: using guessed type int dword_B5B418;
// B5B420: using guessed type int dword_B5B420;
// B5B428: using guessed type int dword_B5B428;
// B5B430: using guessed type int dword_B5B430;
// B5B438: using guessed type int dword_B5B438;
// B5B440: using guessed type int dword_B5B440;
// B5B448: using guessed type int dword_B5B448;
// B5B450: using guessed type int dword_B5B450;
// B5B458: using guessed type int dword_B5B458;
// B5B460: using guessed type int dword_B5B460;

//----- (006A5C20) --------------------------------------------------------
void __cdecl MachineOpt::SetKeyMap(PROTO_NC_CHAR_OPTION_IMPROVE_GET_KEYMAP_CMD *pkProto)
{
  signed int v1; // ecx@1
  PROTO_NC_CHAR_OPTION_IMPROVE_GET_KEYMAP_CMD *v2; // eax@2

  v1 = 0;
  if ( pkProto->nKeyMapDataCnt > 0u )
  {
    v2 = pkProto + 1;
    do
    {
      HIBYTE(word_B5B172[4 * v2->nKeyMapDataCnt]) = HIBYTE(v2[1].nKeyMapDataCnt);
      LOBYTE(word_B5B172[4 * v2->nKeyMapDataCnt]) = LOBYTE(v2[1].nKeyMapDataCnt);
      ++v1;
      v2 += 2;
    }
    while ( v1 < pkProto->nKeyMapDataCnt );
  }
}
// B5B172: using guessed type __int16 word_B5B172[];

//----- (006A5C70) --------------------------------------------------------
void __thiscall MachineOpt::StKeyMappingBuffer::StKeyMappingBuffer(MachineOpt::StKeyMappingBuffer *this)
{
  MachineOpt::StKeyMappingBuffer *v1; // esi@1
  unsigned int v2; // ecx@1
  int v3; // eax@1
  __int16 v4; // [sp+Ah] [bp-2h]@0

  v1 = this;
  LOBYTE(v4) = 0;
  *(_DWORD *)&this->m_kVersion.year = 336005085;
  *(_WORD *)&this->m_kVersion.hour = v4;
  this->uiTotal = 117;
  v2 = 0;
  v3 = (int)&v1->stKeyMapBuff[0].keyValue;
  do
  {
    *(_WORD *)(v3 - 1) = 0;
    ++v2;
    v3 += 2;
  }
  while ( v2 < v1->uiTotal );
  MachineOpt::MakeDefaultKey();
}

//----- (006A5CC0) --------------------------------------------------------
void __thiscall MachineOpt::StShortCutSizeOption::StShortCutSizeOption(MachineOpt::StShortCutSizeOption *this)
{
  __int16 v1; // [sp+6h] [bp-2h]@0

  LOBYTE(v1) = 0;
  *(_WORD *)&this->m_kVersion.month = 0;
  *(_DWORD *)&this->m_kVersion.year = 402849797;
  *(_WORD *)&this->m_kVersion.hour = v1;
}

//----- (006A5CF0) --------------------------------------------------------
void __thiscall MachineOpt::StSaveWinPosOption::StSaveWinPosOption(MachineOpt::StSaveWinPosOption *this)
{
  __int16 v1; // [sp+6h] [bp-2h]@0

  LOBYTE(v1) = 0;
  *(_WORD *)&this->m_kVersion.month = 0;
  *(_DWORD *)&this->m_kVersion.year = 402720727;
  *(_WORD *)&this->m_kVersion.hour = v1;
  this->uiTotalNum = 27;
}

//----- (006A5D30) --------------------------------------------------------
void __thiscall MachineOpt::GraphicOption::SetDefault(MachineOpt::GraphicOption *this)
{
  __int16 v1; // [sp+6h] [bp-2h]@0

  this->fCurGama = 1.0;
  this->fViewTerrainRate = 1.0;
  *(_DWORD *)&this->m_kVersion.year = 402849797;
  this->fViewObjectLength = 5000.0;
  LOBYTE(v1) = 0;
  this->farrLODLength[0] = 200.0;
  *(_WORD *)&this->m_kVersion.hour = v1;
  this->farrLODLength[1] = 500.0;
  this->nCharShadowLevel = 0;
  this->bViewOutLine = 1;
  this->nAntiAliasLevel = 0;
  this->fLODAdjust = 1.0;
  this->ui_DisplayResolutionWidth = 1024;
  this->ui_DisplayResolutionHeight = 768;
  this->bWindowFullMode = 1;
  this->ui_DisplayMultisample = 0;
  *(_DWORD *)&this->bGlowEnable = 16842752;
  this->bScreenShotEnable = 1;
}

//----- (006A5DB0) --------------------------------------------------------
void __thiscall MachineOpt::GameOption::SetDefault(MachineOpt::GameOption *this)
{
  signed int v1; // eax@1
  __int16 v2; // [sp+6h] [bp-2h]@0

  v1 = 0;
  *(_DWORD *)&this->m_kVersion.year = 403376086;
  LOBYTE(v2) = 0;
  *(_WORD *)&this->m_kVersion.hour = v2;
  *(_DWORD *)&this->bMyNameCheck = 16843009;
  *(_DWORD *)&this->bItemNameCheck = 16777472;
  *(_DWORD *)&this->bSpeechCheck = 1;
  *(_DWORD *)&this->bParCheck = 0;
  this->bChatInputCheck = 1;
  *(_DWORD *)&this->bNamePanelCheck = 16843009;
  do
  {
    switch ( v1 )
    {
      case 0:
        this->kChatOption.uiChatWinFilter[0] = -261;
        break;
      case 1:
        this->kChatOption.uiChatWinFilter[1] = 8;
        break;
      case 2:
        this->kChatOption.uiChatWinFilter[2] = 8208;
        break;
      case 3:
        this->kChatOption.uiChatWinFilter[3] = 32;
        break;
      case 4:
        this->kChatOption.uiChatWinFilter[4] = 4096;
        break;
      default:
        break;
    }
    ++v1;
  }
  while ( v1 < 5 );
  this->kChatOption.uiSysMsgWinFilter = 260;
  *(_WORD *)&this->bChattingHideCheck = 257;
}

//----- (006A5E60) --------------------------------------------------------
_iobuf *__cdecl MachineOpt::SaveGraphicOption()
{
  _iobuf *result; // eax@3
  _iobuf *v1; // esi@3
  char acFileName[256]; // [sp+0h] [bp-104h]@3
  unsigned int v3; // [sp+100h] [bp-4h]@1
  int v4; // [sp+104h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  result = fopen(acFileName, "wb");
  v1 = result;
  if ( result )
  {
    fwrite(&MachineOpt::ms_kGraphicOption, 0x3Du, 1u, result);
    result = (_iobuf *)fclose(v1);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A5EE0) --------------------------------------------------------
_iobuf *__cdecl MachineOpt::LoadGraphicOption()
{
  _iobuf *result; // eax@3
  _iobuf *v1; // esi@3
  _iobuf *v2; // esi@9
  Version kVersion; // [sp+0h] [bp-10Ch]@4
  char acFileName[256]; // [sp+8h] [bp-104h]@3
  unsigned int v5; // [sp+108h] [bp-4h]@1
  int v6; // [sp+10Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  result = fopen(acFileName, "rb");
  v1 = result;
  if ( result )
  {
    *(_DWORD *)&kVersion.year = 0;
    kVersion.hour = 0;
    fread(&kVersion, 6u, 1u, result);
    if ( kVersion.year == MachineOpt::ms_kGraphicOption.m_kVersion.year
      && kVersion.month == MachineOpt::ms_kGraphicOption.m_kVersion.month
      && kVersion.date == MachineOpt::ms_kGraphicOption.m_kVersion.date
      && kVersion.hour == MachineOpt::ms_kGraphicOption.m_kVersion.hour )
    {
      fclose(v1);
      result = fopen(acFileName, "rb");
      v2 = result;
      if ( result )
      {
        fread(&MachineOpt::ms_kGraphicOption, 0x3Du, 1u, result);
        result = (_iobuf *)fclose(v2);
        MachineOpt::ms_kGraphicOption.farrLODLength[0] = 200.0;
        MachineOpt::ms_kGraphicOption.farrLODLength[1] = 500.0;
      }
    }
    else
    {
      result = (_iobuf *)fclose(v1);
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A6010) --------------------------------------------------------
_iobuf *__cdecl MachineOpt::SaveGameOption()
{
  _iobuf *result; // eax@3
  _iobuf *v1; // esi@3
  char acFileName[256]; // [sp+0h] [bp-104h]@3
  unsigned int v3; // [sp+100h] [bp-4h]@1
  int v4; // [sp+104h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  result = fopen(acFileName, "wb");
  v1 = result;
  if ( result )
  {
    fwrite(&MachineOpt::ms_kGameOption, 0x37u, 1u, result);
    result = (_iobuf *)fclose(v1);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A6090) --------------------------------------------------------
bool __cdecl MachineOpt::LoadGameOption()
{
  _iobuf *v0; // eax@3
  _iobuf *v1; // esi@3
  _iobuf *v3; // eax@10
  _iobuf *v4; // esi@10
  Version kVersion; // [sp+0h] [bp-10Ch]@4
  char acFileName[256]; // [sp+8h] [bp-104h]@3
  unsigned int v7; // [sp+108h] [bp-4h]@1
  int v8; // [sp+10Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  v0 = fopen(acFileName, "rb");
  v1 = v0;
  if ( !v0 )
    return 0;
  *(_DWORD *)&kVersion.year = 0;
  kVersion.hour = 0;
  fread(&kVersion, 6u, 1u, v0);
  if ( kVersion.year != MachineOpt::ms_kGameOption
    || kVersion.month != byte_B5BB1A
    || kVersion.date != byte_B5BB1B
    || kVersion.hour != byte_B5BB1C )
  {
    fclose(v1);
    return 0;
  }
  fclose(v1);
  v3 = fopen(acFileName, "rb");
  v4 = v3;
  if ( !v3 )
    return 0;
  fread(&MachineOpt::ms_kGameOption, 0x37u, 1u, v3);
  fclose(v4);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B5BB1A: using guessed type char byte_B5BB1A;
// B5BB1B: using guessed type char byte_B5BB1B;
// B5BB1C: using guessed type char byte_B5BB1C;

//----- (006A61B0) --------------------------------------------------------
bool __cdecl MachineOpt::SaveWinPos(_iobuf *fp)
{
  int v1; // ebx@1
  int v2; // esi@2
  const void *v3; // eax@2
  int v4; // edx@3
  char v5; // cl@4
  bool result; // al@10
  int uiTotal; // [sp+Ch] [bp-8h]@1
  unsigned int buffer; // [sp+10h] [bp-4h]@5

  uiTotal = dword_A8259C;
  fwrite(&uiTotal, 4u, 1u, fp);
  v1 = dword_A82594;
  if ( dword_A82594 )
  {
    while ( 1 )
    {
      v2 = *(_DWORD *)(v1 + 8);
      v3 = *(const void **)v2;
      v1 = *(_DWORD *)v1;
      if ( !*(_DWORD *)v2 )
        break;
      v4 = (int)((char *)v3 + 1);
      do
      {
        v5 = *(_BYTE *)v3;
        v3 = (char *)v3 + 1;
      }
      while ( v5 );
      buffer = (unsigned int)((char *)v3 + -v4 + 1);
      if ( fwrite(&buffer, 4u, 1u, fp) != 1 )
        break;
      if ( fwrite(*(const void **)v2, buffer, 1u, fp) != 1
        || fwrite((const void *)(v2 + 4), 4u, 1u, fp) != 1
        || fwrite((const void *)(v2 + 8), 4u, 1u, fp) != 1 )
        break;
      if ( !v1 )
        goto LABEL_10;
    }
    result = 0;
  }
  else
  {
LABEL_10:
    result = 1;
  }
  return result;
}
// A82594: using guessed type int dword_A82594;
// A8259C: using guessed type int dword_A8259C;

//----- (006A6270) --------------------------------------------------------
void __cdecl MachineOpt::RemoveAllWinPos()
{
  int v0; // esi@1
  void **v1; // edi@2
  int v2; // esi@5
  int v3; // ST08_4@6

  v0 = dword_A82594;
  while ( v0 )
  {
    v1 = *(void ***)(v0 + 8);
    v0 = *(_DWORD *)v0;
    if ( v1 )
    {
      operator delete__(*v1);
      operator delete(v1);
    }
  }
  v2 = dword_A82594;
  while ( v2 )
  {
    v3 = v2;
    v2 = *(_DWORD *)v2;
    MachineOpt::ms_kWinPosList[2](&MachineOpt::ms_kWinPosList, v3);
  }
  dword_A8259C = 0;
  dword_A82594 = 0;
  dword_A82598 = 0;
}
// A82590: using guessed type int (__thiscall **MachineOpt__ms_kWinPosList)(void *p, char);
// A82594: using guessed type int dword_A82594;
// A82598: using guessed type int dword_A82598;
// A8259C: using guessed type int dword_A8259C;

//----- (006A62F0) --------------------------------------------------------
int __cdecl MachineOpt::CatchOrgGama()
{
  return (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD))NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr->__vecDelDtor
          + 22))(
           NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr,
           0,
           &MachineOpt::ms_kOrgGamaRamp);
}

//----- (006A6310) --------------------------------------------------------
int __cdecl MachineOpt::RestoreOrgGama()
{
  return (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr->__vecDelDtor
          + 21))(
           NiRenderer::ms_pkRenderer[1].baseclass_0.baseclass_0.vfptr,
           0,
           0,
           &MachineOpt::ms_kOrgGamaRamp);
}

//----- (006A6330) --------------------------------------------------------
void __cdecl BuildGammaRamp(_D3DGAMMARAMP *rkGammaRamp, float fGamma, float fContrast, float fBrightness)
{
  JUMPOUT(loc_6A6367);
}

//----- (006A6400) --------------------------------------------------------
void __cdecl GammaControl(float fGamma, float fContrast, float fBrightness)
{
  _D3DGAMMARAMP kGammaRamp; // [sp+10h] [bp-604h]@1
  unsigned int v4; // [sp+610h] [bp-4h]@1
  int v5; // [sp+614h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  BuildGammaRamp(&kGammaRamp, fGamma, fContrast, fBrightness);
}
// A85C00: using guessed type int __security_cookie;

//----- (006A6470) --------------------------------------------------------
_iobuf *__cdecl MachineOpt::SaveSoundOption()
{
  _iobuf *result; // eax@3
  _iobuf *v1; // esi@3
  char acFileName[256]; // [sp+0h] [bp-104h]@3
  unsigned int v3; // [sp+100h] [bp-4h]@1
  int v4; // [sp+104h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  result = fopen(acFileName, "wb");
  v1 = result;
  if ( result )
  {
    fwrite(&MachineOpt::ms_kSoundOption, 0x1Cu, 1u, result);
    result = (_iobuf *)fclose(v1);
  }
  return result;
}
// A825E0: using guessed type int MachineOpt__ms_kSoundOption;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A64F0) --------------------------------------------------------
_iobuf *__cdecl MachineOpt::LoadSoundOption()
{
  _iobuf *result; // eax@3
  _iobuf *v1; // esi@3
  _iobuf *v2; // esi@9
  Version kVersion; // [sp+0h] [bp-10Ch]@4
  char acFileName[256]; // [sp+8h] [bp-104h]@3
  unsigned int v5; // [sp+108h] [bp-4h]@1
  int v6; // [sp+10Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  result = fopen(acFileName, "rb");
  v1 = result;
  if ( result )
  {
    *(_DWORD *)&kVersion.year = 0;
    kVersion.hour = 0;
    fread(&kVersion, 6u, 1u, result);
    if ( kVersion.year == CURRENT_SOUND_OPTION_VERSION.year
      && kVersion.month == CURRENT_SOUND_OPTION_VERSION.month
      && kVersion.date == CURRENT_SOUND_OPTION_VERSION.date
      && kVersion.hour == CURRENT_SOUND_OPTION_VERSION.hour )
    {
      fclose(v1);
      result = fopen(acFileName, "rb");
      v2 = result;
      if ( result )
      {
        fread(&MachineOpt::ms_kSoundOption, 0x1Cu, 1u, result);
        result = (_iobuf *)fclose(v2);
      }
    }
    else
    {
      fclose(v1);
      word_A825E4 = *(_WORD *)&CURRENT_SOUND_OPTION_VERSION.hour;
      result = (_iobuf *)50;
      MachineOpt::ms_kSoundOption = *(_DWORD *)&CURRENT_SOUND_OPTION_VERSION;
      dword_A825E8 = 50;
      dword_A825EC = 50;
      dword_A825F0 = 50;
      dword_A825F4 = 50;
      dword_A825F8 = 50;
    }
  }
  return result;
}
// A825E0: using guessed type int MachineOpt__ms_kSoundOption;
// A825E4: using guessed type __int16 word_A825E4;
// A825E8: using guessed type int dword_A825E8;
// A825EC: using guessed type int dword_A825EC;
// A825F0: using guessed type int dword_A825F0;
// A825F4: using guessed type int dword_A825F4;
// A825F8: using guessed type int dword_A825F8;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A6640) --------------------------------------------------------
void __thiscall MachineOpt::SoundOption::SoundOption(MachineOpt::SoundOption *this)
{
  this->kVersion.year = 0;
  this->kVersion.hour = 0;
  *(_WORD *)&this->kVersion.month = 0;
  *(_DWORD *)&this->kVersion.year = *(_DWORD *)&CURRENT_SOUND_OPTION_VERSION;
  *(_WORD *)&this->kVersion.hour = *(_WORD *)&CURRENT_SOUND_OPTION_VERSION.hour;
  this->uiMasterVolume = 50;
  this->uiBgVolume = 50;
  this->uiEffectVolume = 50;
  this->uiEnvEffectVolume = 50;
  this->uiVoiceVolume = 50;
}

//----- (006A6680) --------------------------------------------------------
void __cdecl MachineOpt::SetGlowEffect(bool bEnable)
{
  CDataDocument *v1; // eax@1
  CBaseObject *v2; // eax@1
  CBaseObject *v3; // edi@1
  CRTTI *v4; // eax@2
  CAbstractProperty *v5; // eax@2
  type_info *v6; // ebx@2
  CAbstractProperty *v7; // esi@2
  type_info *v8; // eax@2

  MachineOpt::ms_kGraphicOption.bGlowEnable = bEnable;
  v1 = CDataDocument::Instance();
  v2 = CDataDocument::GetObjectByName(v1, "GlowScreenEffect");
  v3 = v2;
  if ( v2 )
  {
    v4 = (CRTTI *)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2);
    v5 = CRTTI::FindProperty(v4, "Enable");
    v6 = CPropertyType<bool>::ms_rTypeInfo;
    v7 = v5;
    v8 = v5->vfptr->GetTypeInfo(v5);
    if ( type_info::operator__(v6, v8) )
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v7->vfptr[1].GetTypeInfo)(v7, v3, bEnable);
  }
}

//----- (006A66F0) --------------------------------------------------------
void __cdecl MachineOpt::SetLightEffect(bool bEnable)
{
  CDataDocument *v1; // eax@1
  CBaseObject *v2; // eax@1
  CBaseObject *v3; // edi@1
  CRTTI *v4; // eax@2
  CAbstractProperty *v5; // eax@2
  type_info *v6; // ebx@2
  CAbstractProperty *v7; // esi@2
  type_info *v8; // eax@2

  MachineOpt::ms_kGraphicOption.bLightEnable = bEnable;
  v1 = CDataDocument::Instance();
  v2 = CDataDocument::GetObjectByName(v1, "WorldSetting");
  v3 = v2;
  if ( v2 )
  {
    v4 = (CRTTI *)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v2);
    v5 = CRTTI::FindProperty(v4, "Ground_DL_Enable");
    v6 = CPropertyType<bool>::ms_rTypeInfo;
    v7 = v5;
    v8 = v5->vfptr->GetTypeInfo(v5);
    if ( type_info::operator__(v6, v8) )
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v7->vfptr[1].GetTypeInfo)(v7, v3, bEnable);
  }
}

//----- (006A6760) --------------------------------------------------------
_iobuf *__cdecl MachineOpt::MakeDefaultOptFile()
{
  char *v0; // eax@3
  _iobuf *result; // eax@3
  _iobuf *v2; // esi@3

  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = Folder::Merge(&Folder::m_acSystem, "FPLIST.ons");
  result = fopen(v0, "wb");
  v2 = result;
  if ( result )
  {
    fwrite(&MachineOpt::ms_kUserLoginOption, 0x6Eu, 1u, result);
    result = (_iobuf *)fclose(v2);
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A67B0) --------------------------------------------------------
void __thiscall MachineOpt::GraphicOption::GraphicOption(MachineOpt::GraphicOption *this)
{
  this->m_kVersion.year = 0;
  this->fViewTerrainLength = 5000.0;
  *(_WORD *)&this->m_kVersion.month = 0;
  this->m_kVersion.hour = 0;
  MachineOpt::GraphicOption::SetDefault(this);
}

//----- (006A67E0) --------------------------------------------------------
void __thiscall MachineOpt::GameOption::GameOption(MachineOpt::GameOption *this)
{
  this->m_kVersion.year = 0;
  *(_WORD *)&this->m_kVersion.month = 0;
  this->m_kVersion.hour = 0;
  MachineOpt::GameOption::SetDefault(this);
}

//----- (006A6800) --------------------------------------------------------
bool __cdecl MachineOpt::Load()
{
  MachineOpt::LoadGraphicOption();
  MachineOpt::LoadSoundOption();
  return 1;
}

//----- (006A6810) --------------------------------------------------------
bool __cdecl MachineOpt::Save()
{
  MachineOpt::SaveGraphicOption();
  MachineOpt::SaveSoundOption();
  return 1;
}

//----- (006A6830) --------------------------------------------------------
bool __cdecl MachineOpt::RegistereWinPostion(PgWin *pkWin)
{
  PgWin *v1; // esi@1
  char *v2; // ebx@1
  bool result; // al@2
  MachineOpt::WinPos *v4; // eax@3
  void *v5; // eax@4
  int v6; // eax@5
  int v7; // esi@5
  int v8; // eax@7
  float fYPosRate; // [sp+1Ch] [bp-10h]@3
  float fXPosRate; // [sp+34h] [bp+8h]@3

  v1 = pkWin;
  v2 = (char *)((int (__thiscall *)(PgWin *))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)(pkWin);
  if ( *v2 )
  {
    fXPosRate = (double)((int (__thiscall *)(PgWin *))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(pkWin)
              / (double)PgWin::ms_uiScreenWidth;
    fYPosRate = (double)((int (__thiscall *)(PgWin *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1)
              / (double)PgWin::ms_uiScreenHeight;
    v4 = MachineOpt::GetWinPosInList(v1);
    if ( v4 )
    {
      v4->m_fXPosRate = fXPosRate;
      v4->m_fYPosRate = fYPosRate;
      result = 1;
    }
    else
    {
      v5 = operator new(0xCu);
      if ( v5 )
      {
        MachineOpt::WinPos::WinPos((MachineOpt::WinPos *)v5, v2, fXPosRate, fYPosRate);
        v7 = v6;
      }
      else
      {
        v7 = 0;
      }
      v8 = ((int (__thiscall *)(int (__thiscall ***)(void *, char)))MachineOpt::ms_kWinPosList[1])(&MachineOpt::ms_kWinPosList);
      *(_DWORD *)(v8 + 8) = v7;
      *(_DWORD *)v8 = 0;
      *(_DWORD *)(v8 + 4) = dword_A82598;
      if ( dword_A82598 )
      {
        *(_DWORD *)dword_A82598 = v8;
        ++dword_A8259C;
        dword_A82598 = v8;
        result = 1;
      }
      else
      {
        ++dword_A8259C;
        dword_A82594 = v8;
        dword_A82598 = v8;
        result = 1;
      }
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A82590: using guessed type int (__thiscall **MachineOpt__ms_kWinPosList)(void *p, char);
// A82594: using guessed type int dword_A82594;
// A82598: using guessed type int dword_A82598;
// A8259C: using guessed type int dword_A8259C;

//----- (006A69C0) --------------------------------------------------------
bool __cdecl MachineOpt::SetWinPostion(PgWin *pkWin)
{
  bool result; // al@2

  if ( MachineOpt::GetWinPosInList(pkWin) )
  {
    ((void (__thiscall *)(_DWORD))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(pkWin);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 6A69C0: could not find valid save-restore pair for ebx

//----- (006A6A40) --------------------------------------------------------
bool __cdecl MachineOpt::LoadWinPos(_iobuf *fp)
{
  unsigned int v1; // edi@1
  void *v2; // eax@2
  MachineOpt::WinPos *v3; // esi@3
  int v4; // eax@6
  bool result; // al@10
  unsigned int uiTotal; // [sp+Ch] [bp-4h]@1

  MachineOpt::RemoveAllWinPos();
  fread(&uiTotal, 4u, 1u, fp);
  v1 = 0;
  if ( uiTotal )
  {
    while ( 1 )
    {
      v2 = operator new(0xCu);
      if ( v2 )
      {
        *(_DWORD *)v2 = 0;
        v3 = (MachineOpt::WinPos *)v2;
      }
      else
      {
        v3 = 0;
      }
      if ( !MachineOpt::WinPos::Load(v3, fp) )
        break;
      v4 = ((int (__thiscall *)(_DWORD))MachineOpt::ms_kWinPosList[1])(&MachineOpt::ms_kWinPosList);
      *(_DWORD *)(v4 + 8) = v3;
      *(_DWORD *)v4 = 0;
      *(_DWORD *)(v4 + 4) = dword_A82598;
      if ( dword_A82598 )
        *(_DWORD *)dword_A82598 = v4;
      else
        dword_A82594 = v4;
      ++dword_A8259C;
      ++v1;
      dword_A82598 = v4;
      if ( v1 >= uiTotal )
        goto LABEL_10;
    }
    if ( v3 )
    {
      operator delete__(v3->m_pcWinName);
      operator delete(v3);
    }
    result = 0;
  }
  else
  {
LABEL_10:
    result = 1;
  }
  return result;
}
// A82590: using guessed type int (__thiscall **MachineOpt__ms_kWinPosList)(void *p, char);
// A82594: using guessed type int dword_A82594;
// A82598: using guessed type int dword_A82598;
// A8259C: using guessed type int dword_A8259C;

//----- (006A6B00) --------------------------------------------------------
void __cdecl MachineOpt::SetCurGama(float fGama)
{
  _D3DGAMMARAMP rkGammaRamp; // [sp+10h] [bp-604h]@1
  unsigned int v2; // [sp+610h] [bp-4h]@1
  int v3; // [sp+614h] [bp+0h]@1

  v2 = (unsigned int)&v3 ^ __security_cookie;
  MachineOpt::ms_kGraphicOption.fCurGama = fGama;
  BuildGammaRamp(&rkGammaRamp, fGama, 1.0, 0.0);
}
// A85C00: using guessed type int __security_cookie;

//----- (006A6B70) --------------------------------------------------------
void __cdecl MachineOpt::SetViewOutLine(bool bView)
{
  MachineOpt::ms_kGraphicOption.bViewOutLine = bView;
  if ( Engine3D::ms_spToonExtraData )
    Engine3D::ms_spToonExtraData->m_bOn = bView;
  CharMgr::OutLineEnable(&g_kCharMgr, bView);
}

//----- (006A6BA0) --------------------------------------------------------
bool __cdecl MachineOpt::LoadUserInfo()
{
  int v0; // edi@0
  _iobuf *v1; // eax@3
  _iobuf *v2; // esi@3
  bool result; // al@4
  int v4; // edi@5
  int v5; // edi@5
  int v6; // ebx@6
  char *v7; // eax@7
  int v8; // ebx@7
  int v9; // [sp-Ch] [bp-1C0h]@5
  unsigned int v10; // [sp-4h] [bp-1B8h]@0
  MachineOpt::UserLoginOption data; // [sp+0h] [bp-1B4h]@8
  char acFileName[256]; // [sp+70h] [bp-144h]@3
  char userName[64]; // [sp+170h] [bp-44h]@7
  unsigned int v14; // [sp+1B0h] [bp-4h]@1
  int v15; // [sp+1B4h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  v1 = fopen(acFileName, "rb");
  v2 = v1;
  if ( v1 )
  {
    v9 = v0;
    fseek(v1, 0, 2);
    v4 = ftell(v2);
    fseek(v2, 0, 0);
    v5 = v4 / 110;
    if ( v5 > 100 || (fseek(v2, 0, 2), v6 = ftell(v2), fseek(v2, 0, 0), v6 % 110) )
    {
      fclose(v2);
      MachineOpt::UserLoginOption::SetDefault(&MachineOpt::ms_kUserLoginOption);
      result = 0;
    }
    else
    {
      userName[0] = 0;
      memset(&userName[1], 0, 0x3Fu);
      v7 = (char *)((int (__stdcall *)(signed int, int, _DWORD))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(
                     64,
                     v9,
                     "FPLIST.ons");
      strncpy(userName, v7, v10);
      v8 = 0;
      if ( v5 <= 0 )
      {
LABEL_11:
        MachineOpt::UserLoginOption::SetDefault(&MachineOpt::ms_kUserLoginOption);
      }
      else
      {
        while ( 1 )
        {
          memset(data.username, 0, 0x6Eu);
          fread(&data, 0x6Eu, 1u, v2);
          if ( !&data )
          {
            fclose(v2);
            return 0;
          }
          if ( !strncmp(userName, data.username, 0x40u) )
            break;
          ++v8;
          if ( v8 >= v5 )
            goto LABEL_11;
        }
        MachineOpt::UserLoginOption::operator_(&MachineOpt::ms_kUserLoginOption, &data);
      }
      fclose(v2);
      result = 1;
    }
  }
  else
  {
    MachineOpt::UserLoginOption::SetDefault(&MachineOpt::ms_kUserLoginOption);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A6D80) --------------------------------------------------------
bool __cdecl MachineOpt::SaveUserInfo()
{
  int v0; // ebx@0
  int v1; // edi@0
  _iobuf *v2; // eax@3
  _iobuf *v3; // esi@3
  int v5; // ST28_4@5
  int v6; // edi@5
  int v7; // edi@5
  char *v8; // eax@5
  int v9; // ebx@6
  int v10; // ebx@7
  const void *v11; // [sp-10h] [bp-1C4h]@13
  unsigned int v12; // [sp-Ch] [bp-1C0h]@13
  unsigned int v13; // [sp-8h] [bp-1BCh]@13
  unsigned int v14; // [sp-4h] [bp-1B8h]@0
  _iobuf *v15; // [sp-4h] [bp-1B8h]@13
  MachineOpt::UserLoginOption data; // [sp+0h] [bp-1B4h]@7
  char acFileName[256]; // [sp+70h] [bp-144h]@3
  char userName[64]; // [sp+170h] [bp-44h]@5
  unsigned int v19; // [sp+1B0h] [bp-4h]@1
  int v20; // [sp+1B4h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  sprintf(acFileName, "%s%s");
  v2 = fopen(acFileName, "rb+");
  v3 = v2;
  if ( !v2 )
  {
    MachineOpt::MakeDefaultOptFile();
    return 0;
  }
  v5 = v1;
  fseek(v2, 0, 2);
  v6 = ftell(v3);
  fseek(v3, 0, 0);
  v7 = v6 / 110;
  userName[0] = 0;
  memset(&userName[1], 0, 0x3Fu);
  v8 = (char *)((int (__stdcall *)(signed int, int, int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(
                 64,
                 v5,
                 v0);
  strncpy(userName, v8, v14);
  if ( v7 <= 100 )
  {
    fseek(v3, 0, 2);
    v9 = ftell(v3);
    fseek(v3, 0, 0);
    if ( !(v9 % 110) )
    {
      v10 = 0;
      data.u32NewBieFlags.value = 0;
      MachineOpt::UserLoginOption::SetDefault(&data);
      if ( v7 <= 0 )
      {
LABEL_10:
        if ( v7 == 100 )
        {
          fclose(v3);
          MachineOpt::MakeDefaultOptFile();
          fclose(v3);
          return 1;
        }
        memset(data.username, 0, 0x6Eu);
        MachineOpt::UserLoginOption::operator_(&data, &MachineOpt::ms_kUserLoginOption);
        fseek(v3, 0, 2);
        if ( !&data )
          goto LABEL_17;
        v15 = v3;
        v13 = 1;
        v12 = 110;
        v11 = &data;
      }
      else
      {
        while ( 1 )
        {
          fread(&data, 0x6Eu, 1u, v3);
          if ( !strncmp(data.username, userName, 0x40u) )
            break;
          ++v10;
          if ( v10 >= v7 )
            goto LABEL_10;
        }
        fseek(v3, -110, 1);
        if ( !&MachineOpt::ms_kUserLoginOption )
          goto LABEL_17;
        v15 = v3;
        v13 = 1;
        v12 = 110;
        v11 = &MachineOpt::ms_kUserLoginOption;
      }
      fwrite(v11, v12, v13, v15);
LABEL_17:
      fclose(v3);
      return 1;
    }
  }
  fclose(v3);
  MachineOpt::MakeDefaultOptFile();
  return 0;
}
// 6A6D80: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A6FB0) --------------------------------------------------------
void __cdecl MachineOpt::KeyMapConvertOldtoNew()
{
  void *v0; // eax@1
  signed int v1; // edi@2
  int v2; // esi@3
  std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node *v3; // eax@3
  PgFrameWork *v4; // eax@5
  void *v5; // eax@7
  void **v6; // ecx@7
  void *v7; // esi@8
  void *v8; // eax@9
  void *v9; // ecx@9
  void *v10; // esi@10
  std::exception this; // [sp+0h] [bp-2Ch]@13
  std::list<int,std::allocator<int> > lstChange; // [sp+Ch] [bp-20h]@1
  char *_What; // [sp+18h] [bp-14h]@13
  int i; // [sp+1Ch] [bp-10h]@2
  int v15; // [sp+28h] [bp-4h]@2

  lstChange.baseclass_0.baseclass_0._Mysize = 0;
  v0 = operator new(0xCu);
  if ( !v0 )
  {
    _What = 0;
    std::exception::exception(&this, (const char *const *)&_What);
    this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&lstChange.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v0;
  *(_DWORD *)v0 = v0;
  *(_DWORD *)(*(_DWORD *)&lstChange + 4) = *(_DWORD *)&lstChange;
  v1 = 0;
  v15 = 0;
  i = 0;
  do
  {
    v2 = *(_DWORD *)&lstChange + 4;
    v3 = std::_List_val<char___std::allocator<char__>>::_Buynode(
           (std::_List_val<ItemViewDummy *,std::allocator<ItemViewDummy *> > *)&lstChange,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)&lstChange,
           *(std::_List_nod<ItemViewDummy *,std::allocator<ItemViewDummy *> >::_Node **)(*(_DWORD *)&lstChange + 4),
           (ItemViewDummy *const *)&i);
    if ( 1073741822 - lstChange.baseclass_0.baseclass_0._Mysize < 1 )
      std::_Xlength_error("list<T> too long");
    ++lstChange.baseclass_0.baseclass_0._Mysize;
    *(_DWORD *)v2 = v3;
    ++v1;
    v3->_Prev->_Next = v3;
    i = v1;
  }
  while ( v1 < 95 );
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v4 )
    GameFrameWork::SendKeyRemappingReq((GameFrameWork *)v4, &lstChange);
  v5 = (void *)**(_DWORD **)&lstChange;
  **(_DWORD **)&lstChange = *(_DWORD *)&lstChange;
  *(_DWORD *)(*(_DWORD *)&lstChange + 4) = *(_DWORD *)&lstChange;
  v6 = *(void ***)&lstChange;
  lstChange.baseclass_0.baseclass_0._Mysize = 0;
  if ( v5 != *(void **)&lstChange )
  {
    do
    {
      v7 = *(void **)v5;
      operator delete(v5);
      v6 = *(void ***)&lstChange;
      v5 = v7;
    }
    while ( v7 != *(void **)&lstChange );
  }
  v8 = *v6;
  *v6 = v6;
  *(_DWORD *)(*(_DWORD *)&lstChange + 4) = *(_DWORD *)&lstChange;
  v9 = *(void **)&lstChange;
  lstChange.baseclass_0.baseclass_0._Mysize = 0;
  if ( v8 != *(void **)&lstChange )
  {
    do
    {
      v10 = *(void **)v8;
      operator delete(v8);
      v9 = *(void **)&lstChange;
      v8 = v10;
    }
    while ( v10 != *(void **)&lstChange );
  }
  operator delete(v9);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006A7100) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>(NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_;
}
// 9C888C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MachineOpt__WinPos _____vftable_)(void *p, char);

//----- (006A7110) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C888C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MachineOpt__WinPos _____vftable_)(void *p, char);

//----- (006A7140) --------------------------------------------------------
MachineOpt::UserLoginOption *__thiscall MachineOpt::UserLoginOption::operator_(MachineOpt::UserLoginOption *this, MachineOpt::UserLoginOption *__that)
{
  MachineOpt::UserLoginOption *result; // eax@1
  MachineOpt::UserLoginOption *v3; // esi@1
  signed int v4; // edx@1

  result = this;
  v3 = this;
  v4 = 64;
  do
  {
    v3->username[0] = v3->username[(char *)__that - (char *)this];
    v3 = (MachineOpt::UserLoginOption *)((char *)v3 + 1);
    --v4;
  }
  while ( v4 );
  this->bFriendAddAllow = __that->bFriendAddAllow;
  this->BufXPos = __that->BufXPos;
  this->BufYPos = __that->BufYPos;
  this->BufWidth = __that->BufWidth;
  this->BufHeight = __that->BufHeight;
  this->DBufXPos = __that->DBufXPos;
  this->DBufYPos = __that->DBufYPos;
  this->DBufWidth = __that->DBufWidth;
  this->DBufHeight = __that->DBufHeight;
  this->FullMapAlpha = __that->FullMapAlpha;
  this->u32NewBieFlags.value = __that->u32NewBieFlags.value;
  this->ChargedBufXPos = __that->ChargedBufXPos;
  this->ChargedBufYPos = __that->ChargedBufYPos;
  this->ChargedBufWidth = __that->ChargedBufWidth;
  this->ChargedBufHeight = __that->ChargedBufHeight;
  this->bTargetOfTerget = __that->bTargetOfTerget;
  return result;
}

//----- (006A71E0) --------------------------------------------------------
MachineOpt::WinPos *__cdecl MachineOpt::GetWinPosInList(PgWin *pkWin)
{
  const char *v1; // edi@1
  MachineOpt::WinPos *result; // eax@2
  int v3; // esi@3

  v1 = (const char *)((int (*)(void))pkWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[34].__vecDelDtor)();
  if ( *v1 )
  {
    v3 = dword_A82594;
    if ( dword_A82594 )
    {
      while ( 1 )
      {
        result = *(MachineOpt::WinPos **)(v3 + 8);
        v3 = *(_DWORD *)v3;
        if ( !strcmp(v1, result->m_pcWinName) )
          break;
        if ( !v3 )
          goto LABEL_6;
      }
    }
    else
    {
LABEL_6:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A82594: using guessed type int dword_A82594;

//----- (006A7260) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MachineOpt::WinPos *> *v3; // esi@1
  NiTListItem<MachineOpt::WinPos *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C888C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MachineOpt__WinPos _____vftable_)(void *p, char);
// 9C889C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MachineOpt__WinPos _____vftable_)(void *p, char);

//----- (006A72F0) --------------------------------------------------------
void __thiscall NiTPointerList<MachineOpt::WinPos__>::_NiTPointerList<MachineOpt::WinPos__>(NiTPointerList<MachineOpt::WinPos *> *this)
{
  NiTPointerList<MachineOpt::WinPos *> *v1; // edi@1
  NiTListItem<MachineOpt::WinPos *> *v2; // esi@1
  NiTListItem<MachineOpt::WinPos *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_;
}
// 9C888C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MachineOpt__WinPos _____vftable_)(void *p, char);
// 9C889C: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__MachineOpt__WinPos _____vftable_)(void *p, char);

//----- (006A7370) --------------------------------------------------------
void *__thiscall PgTList<MachineOpt::WinPos__>::_vector_deleting_destructor_(PgTList<MachineOpt::WinPos *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<MachineOpt::WinPos *> *v3; // esi@1
  NiTListItem<MachineOpt::WinPos *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,MachineOpt::WinPos *>Vtbl *)&PgTList<MachineOpt::WinPos__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_MachineOpt::WinPos__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C888C: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__MachineOpt__WinPos _____vftable_)(void *p, char);
// 9C88BC: using guessed type int (__thiscall *PgTList_MachineOpt__WinPos _____vftable_)(void *p, char);

//----- (006A7400) --------------------------------------------------------
bool __thiscall NiD3DShaderInterface::SetupGeometry(NiD3DShaderInterface *this, NiGeometry *pkGeometry)
{
  return 1;
}

//----- (006A7410) --------------------------------------------------------
void __thiscall OptMgr::_OptMgr(OptMgr *this)
{
  this->baseclass_0.vfptr = (OptionVtbl *)&Option::_vftable_;
}
// 9C88CC: using guessed type int (__thiscall *Option___vftable_)(void *p, char);

//----- (006A7420) --------------------------------------------------------
bool __thiscall OptMgr::SaveChar(OptMgr *this)
{
  return 1;
}

//----- (006A7430) --------------------------------------------------------
bool __thiscall OptMgr::LoadChar(OptMgr *this)
{
  return 1;
}

//----- (006A7440) --------------------------------------------------------
bool __thiscall OptMgr::SaveUser(OptMgr *this)
{
  return 1;
}

//----- (006A7450) --------------------------------------------------------
bool __thiscall OptMgr::LoadUser(OptMgr *this)
{
  return 1;
}

//----- (006A7460) --------------------------------------------------------
bool __thiscall OptMgr::SaveMachine(OptMgr *this)
{
  return 1;
}

//----- (006A7470) --------------------------------------------------------
bool __thiscall OptMgr::LoadMachine(OptMgr *this)
{
  return 1;
}

//----- (006A7480) --------------------------------------------------------
void __thiscall OptMgr::OptMgr(OptMgr *this)
{
  this->baseclass_0.m_kVersion.year = 0;
  *(_WORD *)&this->baseclass_0.m_kVersion.month = 0;
  this->baseclass_0.m_kVersion.hour = 0;
  this->baseclass_0.vfptr = (OptionVtbl *)&OptMgr::_vftable_;
}
// 9C88E4: using guessed type int (__thiscall *OptMgr___vftable_)(void *p, char);

//----- (006A74A0) --------------------------------------------------------
void *__thiscall Option::_scalar_deleting_destructor_(OptMgr *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (OptionVtbl *)&Option::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C88CC: using guessed type int (__thiscall *Option___vftable_)(void *p, char);

//----- (006A74D0) --------------------------------------------------------
bool __cdecl ActSkillViewInfoTab::CheckActionTable()
{
  bool result; // al@2
  int v1; // eax@3
  unsigned int v2; // esi@5
  void *v3; // eax@6
  signed int v4; // edi@7
  char *v5; // esi@7
  char v6; // bl@9
  ActionInfoSet *v7; // eax@9
  ActionInfoSet *v8; // eax@10
  signed int v9; // edi@12
  char *v10; // esi@12
  char v11; // bl@14
  ActionInfoSet *v12; // eax@14
  ActionInfoSet *v13; // eax@15
  signed int v14; // edi@17
  char *v15; // esi@17
  char v16; // bl@19
  ActionInfoSet *v17; // eax@19
  ActionInfoSet *v18; // eax@20
  void *pkSkillInfo; // [sp+0h] [bp-24h]@6
  unsigned int i; // [sp+4h] [bp-20h]@5
  int aiChrClsTab[6]; // [sp+8h] [bp-1Ch]@5
  unsigned int v22; // [sp+20h] [bp-4h]@1
  int v23; // [sp+24h] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  if ( ActionInfoTable::GetCharActionInfo(11, 0)
    && (v1 = *(_DWORD *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)(v1 + 40) )
  {
    v2 = 0;
    aiChrClsTab[0] = 11;
    aiChrClsTab[1] = 1;
    aiChrClsTab[2] = 6;
    aiChrClsTab[3] = 16;
    aiChrClsTab[4] = 21;
    aiChrClsTab[5] = 26;
    i = 0;
    if ( ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::GetTotal() )
    {
      do
      {
        v3 = CDataReader::GetRecord(
               (CDataReader *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 4),
               v2);
        pkSkillInfo = v3;
        if ( *(_WORD *)v3 < 0x7D0u )
        {
          v4 = 0;
          v5 = (char *)v3 + 95;
          do
          {
            if ( *v5 != 45 )
            {
              v6 = LOBYTE(aiChrClsTab[v4]);
              v7 = ActionInfoTable::GetCharActionInfo(LOBYTE(aiChrClsTab[v4]), 0);
              if ( ActionInfoSet::IsActionExist(v7, v5) )
              {
                v8 = ActionInfoTable::GetCharActionInfo(v6, 1);
                ActionInfoSet::IsActionExist(v8, v5);
              }
            }
            ++v4;
          }
          while ( v4 < 6 );
          v9 = 0;
          v10 = (char *)pkSkillInfo + 127;
          do
          {
            if ( *v10 != 45 )
            {
              v11 = LOBYTE(aiChrClsTab[v9]);
              v12 = ActionInfoTable::GetCharActionInfo(LOBYTE(aiChrClsTab[v9]), 0);
              if ( ActionInfoSet::IsActionExist(v12, v10) )
              {
                v13 = ActionInfoTable::GetCharActionInfo(v11, 1);
                ActionInfoSet::IsActionExist(v13, v10);
              }
            }
            ++v9;
          }
          while ( v9 < 6 );
          v14 = 0;
          v15 = (char *)pkSkillInfo + 159;
          do
          {
            if ( *v15 != 45 )
            {
              v16 = LOBYTE(aiChrClsTab[v14]);
              v17 = ActionInfoTable::GetCharActionInfo(LOBYTE(aiChrClsTab[v14]), 0);
              if ( ActionInfoSet::IsActionExist(v17, v15) )
              {
                v18 = ActionInfoTable::GetCharActionInfo(v16, 1);
                ActionInfoSet::IsActionExist(v18, v15);
              }
            }
            ++v14;
          }
          while ( v14 < 6 );
          v2 = i;
        }
        ++v2;
        i = v2;
      }
      while ( v2 < ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::GetTotal() );
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (006A7670) --------------------------------------------------------
unsigned int __cdecl Skill::GetTotalLearnActSkill()
{
  return Skill::ms_uiTotalLearnActSkill;
}
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A7680) --------------------------------------------------------
Skill::LearnSkillInfo *__cdecl Skill::GetLearnActSkillInfo(unsigned int uiIndex)
{
  Skill::LearnSkillInfo *result; // eax@2

  if ( uiIndex < Skill::ms_uiTotalLearnActSkill )
    result = (Skill::LearnSkillInfo *)&Skill::ms_akLearnActSkillInfo[6 * uiIndex];
  else
    result = 0;
  return result;
}
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A76A0) --------------------------------------------------------
bool __cdecl Skill::IsLearnSkill(unsigned __int16 kSkillID)
{
  unsigned int v1; // eax@1
  int v2; // ecx@2
  bool result; // al@5

  v1 = 0;
  if ( Skill::ms_uiTotalLearnActSkill )
  {
    v2 = (int)Skill::ms_akLearnActSkillInfo;
    while ( *(_WORD *)v2 != kSkillID )
    {
      ++v1;
      v2 += 6;
      if ( v1 >= Skill::ms_uiTotalLearnActSkill )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A76E0) --------------------------------------------------------
bool __cdecl Skill::IsLearnPassiveSkill(unsigned __int16 kSkillID)
{
  unsigned int v1; // eax@1
  bool result; // al@4

  v1 = 0;
  if ( Skill::ms_uiTotalLearnPassiveSkill )
  {
    while ( *(_WORD *)&Skill::ms_akLearnPassiveSkillInfo[2 * v1] != kSkillID )
    {
      ++v1;
      if ( v1 >= Skill::ms_uiTotalLearnPassiveSkill )
        goto LABEL_4;
    }
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// B67770: using guessed type int Skill__ms_uiTotalLearnPassiveSkill;

//----- (006A7710) --------------------------------------------------------
bool __cdecl Skill::UnLearnSkill(unsigned __int16 kSkillID)
{
  int v1; // edi@1
  bool result; // al@2
  char v3; // dl@3
  int v4; // ecx@4
  int v5; // eax@4
  int v6; // esi@4
  Skill::LearnProdSkillInfo tempSkillInfo[3000]; // [sp+0h] [bp-5DC4h]@3
  unsigned int v8; // [sp+5DC0h] [bp-4h]@1
  int v9; // [sp+5DC4h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = Skill::ms_uiTotalLearnProductSkill;
  if ( Skill::ms_uiTotalLearnProductSkill )
  {
    memcpy((char *)tempSkillInfo, Skill::ms_akLearnProductSkillInfo, 8 * Skill::ms_uiTotalLearnProductSkill);
    memset(Skill::ms_akLearnProductSkillInfo, 0, 8 * v1);
    v3 = 0;
    if ( !v1 )
      goto LABEL_14;
    v4 = (int)Skill::ms_akLearnProductSkillInfo;
    v5 = (int)tempSkillInfo;
    v6 = v1;
    do
    {
      if ( *(_WORD *)v5 == kSkillID )
      {
        v3 = 1;
      }
      else
      {
        *(_DWORD *)v4 = *(_DWORD *)v5;
        *(_DWORD *)(v4 + 4) = *(_DWORD *)(v5 + 4);
        v4 += 8;
      }
      v5 += 8;
      --v6;
    }
    while ( v6 );
    if ( v3 )
    {
      Skill::ms_uiTotalLearnProductSkill = v1 - 1;
      result = 1;
    }
    else
    {
LABEL_14:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A77E0) --------------------------------------------------------
bool __cdecl Skill::UnLearnActiveSkill(unsigned __int16 kSkillID)
{
  int v1; // edi@1
  bool result; // al@2
  char v3; // dl@3
  int v4; // ecx@4
  int v5; // eax@4
  int v6; // esi@4
  Skill::LearnSkillInfo tempSkillInfo[3000]; // [sp+0h] [bp-4654h]@3
  unsigned int v8; // [sp+4650h] [bp-4h]@1
  int v9; // [sp+4654h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = Skill::ms_uiTotalLearnActSkill;
  if ( Skill::ms_uiTotalLearnActSkill )
  {
    memcpy((char *)tempSkillInfo, Skill::ms_akLearnActSkillInfo, 6 * Skill::ms_uiTotalLearnActSkill);
    memset(Skill::ms_akLearnActSkillInfo, 0, 6 * v1);
    v3 = 0;
    if ( !v1 )
      goto LABEL_14;
    v4 = (int)Skill::ms_akLearnActSkillInfo;
    v5 = (int)tempSkillInfo;
    v6 = v1;
    do
    {
      if ( *(_WORD *)v5 == kSkillID )
      {
        v3 = 1;
      }
      else
      {
        *(_DWORD *)v4 = *(_DWORD *)v5;
        *(_WORD *)(v4 + 4) = *(_WORD *)(v5 + 4);
        v4 += 6;
      }
      v5 += 6;
      --v6;
    }
    while ( v6 );
    if ( v3 )
    {
      Skill::ms_uiTotalLearnActSkill = v1 - 1;
      result = 1;
    }
    else
    {
LABEL_14:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A78B0) --------------------------------------------------------
bool __cdecl Skill::UnLearnPassiveSkill(unsigned __int16 kSkillID)
{
  int v1; // edi@1
  bool result; // al@2
  char v3; // bl@3
  unsigned int v4; // ecx@3
  int v5; // edx@4
  __int16 v6; // ax@5
  __int16 tempSkillInfo[3000]; // [sp+0h] [bp-1774h]@3
  unsigned int v8; // [sp+1770h] [bp-4h]@1
  int v9; // [sp+1774h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = Skill::ms_uiTotalLearnPassiveSkill;
  if ( Skill::ms_uiTotalLearnPassiveSkill )
  {
    memcpy((char *)tempSkillInfo, Skill::ms_akLearnPassiveSkillInfo, 2 * Skill::ms_uiTotalLearnPassiveSkill);
    memset(Skill::ms_akLearnPassiveSkillInfo, 0, 2 * v1);
    v3 = 0;
    v4 = 0;
    if ( !v1 )
      goto LABEL_14;
    v5 = (int)Skill::ms_akLearnPassiveSkillInfo;
    do
    {
      v6 = tempSkillInfo[v4];
      if ( v6 == kSkillID )
      {
        v3 = 1;
      }
      else
      {
        *(_WORD *)v5 = v6;
        v5 += 2;
      }
      ++v4;
    }
    while ( v4 < v1 );
    if ( v3 )
    {
      Skill::ms_uiTotalLearnPassiveSkill = v1 - 1;
      result = 1;
    }
    else
    {
LABEL_14:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B67770: using guessed type int Skill__ms_uiTotalLearnPassiveSkill;

//----- (006A7970) --------------------------------------------------------
unsigned int __cdecl Skill::GetRestEmpowerPoint()
{
  return Skill::ms_uiRestEmpowerPoint;
}
// B6775C: using guessed type int Skill__ms_uiRestEmpowerPoint;

//----- (006A7980) --------------------------------------------------------
void __cdecl Skill::SetRestEmpowerPoint(unsigned int uiPoint)
{
  Skill::ms_uiRestEmpowerPoint = uiPoint;
}
// B6775C: using guessed type int Skill__ms_uiRestEmpowerPoint;

//----- (006A7990) --------------------------------------------------------
void __cdecl Skill::SetRestEmpowerPointInEdit(int iPoint)
{
  Skill::ms_uiRestEmpowerPointInEdit = iPoint;
}
// B67760: using guessed type int Skill__ms_uiRestEmpowerPointInEdit;

//----- (006A79A0) --------------------------------------------------------
int __cdecl Skill::GetRestEmpowerPointInEdit()
{
  return Skill::ms_uiRestEmpowerPointInEdit;
}
// B67760: using guessed type int Skill__ms_uiRestEmpowerPointInEdit;

//----- (006A79B0) --------------------------------------------------------
unsigned int __cdecl Skill::GetAntiEmpowerPoint()
{
  return Skill::ms_uiAntiEmpowerPoint;
}
// B67764: using guessed type int Skill__ms_uiAntiEmpowerPoint;

//----- (006A79C0) --------------------------------------------------------
void __cdecl Skill::SetAntiEmpowerPoint(unsigned int uiPoint)
{
  Skill::ms_uiAntiEmpowerPoint = uiPoint;
}
// B67764: using guessed type int Skill__ms_uiAntiEmpowerPoint;

//----- (006A79D0) --------------------------------------------------------
void __cdecl Skill::SetAntiEmpowerPointInEdit(unsigned int uiPoint)
{
  Skill::ms_uiAntiEmpowerPointInEdit = uiPoint;
}
// B67768: using guessed type int Skill__ms_uiAntiEmpowerPointInEdit;

//----- (006A79E0) --------------------------------------------------------
unsigned int __cdecl Skill::GetAntiEmpowerPointInEdit()
{
  return Skill::ms_uiAntiEmpowerPointInEdit;
}
// B67768: using guessed type int Skill__ms_uiAntiEmpowerPointInEdit;

//----- (006A79F0) --------------------------------------------------------
bool __cdecl Skill::GetEmpowerResetable()
{
  return Skill::ms_bResetable;
}
// B6776C: using guessed type char Skill__ms_bResetable;

//----- (006A7A00) --------------------------------------------------------
Skill::LearnSkillInfo *__cdecl Skill::GetLearnActSkillInfo(unsigned __int16 kSkillID)
{
  unsigned int v1; // eax@1
  int v2; // ecx@2
  Skill::LearnSkillInfo *result; // eax@5

  v1 = 0;
  if ( Skill::ms_uiTotalLearnActSkill )
  {
    v2 = (int)Skill::ms_akLearnActSkillInfo;
    while ( *(_WORD *)v2 != kSkillID )
    {
      ++v1;
      v2 += 6;
      if ( v1 >= Skill::ms_uiTotalLearnActSkill )
        goto LABEL_5;
    }
    result = (Skill::LearnSkillInfo *)&Skill::ms_akLearnActSkillInfo[6 * v1];
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A7A40) --------------------------------------------------------
void __cdecl Skill::ClearLearnActSkillInfo()
{
  int v0; // ecx@1
  int *v1; // eax@2

  v0 = Skill::ms_uiTotalLearnActSkill;
  if ( Skill::ms_uiTotalLearnActSkill )
  {
    v1 = &dword_B6310A;
    do
    {
      *v1 = 0;
      v1 = (int *)((char *)v1 + 6);
      --v0;
    }
    while ( v0 );
  }
}
// B6310A: using guessed type int dword_B6310A;
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A7A60) --------------------------------------------------------
void __cdecl Skill::SetEmpowerResetable(bool bResetable)
{
  Skill::ms_bResetable = bResetable;
}
// B6776C: using guessed type char Skill__ms_bResetable;

//----- (006A7A70) --------------------------------------------------------
void __cdecl Skill::ClearLearnPassiveSkill()
{
  Skill::ms_uiTotalLearnPassiveSkill = 0;
}
// B67770: using guessed type int Skill__ms_uiTotalLearnPassiveSkill;

//----- (006A7A80) --------------------------------------------------------
bool __cdecl Skill::LearnPassiveSkill(unsigned __int16 kSkillID)
{
  int v1; // eax@1
  bool result; // al@2

  v1 = Skill::ms_uiTotalLearnPassiveSkill;
  if ( (unsigned int)Skill::ms_uiTotalLearnPassiveSkill <= 0xBB8 )
  {
    *(_WORD *)&Skill::ms_akLearnPassiveSkillInfo[2 * Skill::ms_uiTotalLearnPassiveSkill] = kSkillID;
    Skill::ms_uiTotalLearnPassiveSkill = v1 + 1;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// B67770: using guessed type int Skill__ms_uiTotalLearnPassiveSkill;

//----- (006A7AB0) --------------------------------------------------------
unsigned __int16 __cdecl Skill::GetLearnPassiveSkillInfo(unsigned int uiIndex)
{
  unsigned __int16 result; // ax@2

  if ( uiIndex < Skill::ms_uiTotalLearnPassiveSkill )
    result = *(_WORD *)&Skill::ms_akLearnPassiveSkillInfo[2 * uiIndex];
  else
    result = -1;
  return result;
}
// B67770: using guessed type int Skill__ms_uiTotalLearnPassiveSkill;

//----- (006A7AD0) --------------------------------------------------------
unsigned int __cdecl Skill::GetTotalLearnPassiveSkill()
{
  return Skill::ms_uiTotalLearnPassiveSkill;
}
// B67770: using guessed type int Skill__ms_uiTotalLearnPassiveSkill;

//----- (006A7AE0) --------------------------------------------------------
Skill::LearnProdSkillInfo *__cdecl Skill::GetLearnProductSkill(unsigned int uiIndex)
{
  Skill::LearnProdSkillInfo *result; // eax@2

  if ( uiIndex < Skill::ms_uiTotalLearnProductSkill )
    result = (Skill::LearnProdSkillInfo *)&Skill::ms_akLearnProductSkillInfo[8 * uiIndex];
  else
    result = 0;
  return result;
}
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A7B00) --------------------------------------------------------
Skill::LearnProdSkillInfo *__cdecl Skill::GetLearnProductSkill(unsigned __int16 kSkillID)
{
  unsigned int v1; // eax@1
  Skill::LearnProdSkillInfo *result; // eax@4

  v1 = 0;
  if ( Skill::ms_uiTotalLearnProductSkill )
  {
    while ( *(_WORD *)&Skill::ms_akLearnProductSkillInfo[8 * v1] != kSkillID )
    {
      ++v1;
      if ( v1 >= Skill::ms_uiTotalLearnProductSkill )
        goto LABEL_4;
    }
    result = (Skill::LearnProdSkillInfo *)&Skill::ms_akLearnProductSkillInfo[8 * v1];
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A7B30) --------------------------------------------------------
unsigned int __cdecl Skill::GetTotalLearnProductSkill()
{
  return Skill::ms_uiTotalLearnProductSkill;
}
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A7B40) --------------------------------------------------------
bool __cdecl Skill::IsProduceBaseSkill(unsigned __int16 kSkillID)
{
  return (unsigned __int16)(kSkillID - 29100) <= 0x63u;
}

//----- (006A7B60) --------------------------------------------------------
bool __cdecl Skill::IsProduceSkill(unsigned __int16 kSkillID)
{
  return (unsigned __int16)(kSkillID - 20000) <= 0x270Eu;
}

//----- (006A7B80) --------------------------------------------------------
bool __cdecl Skill::IsGatherSkill(unsigned __int16 kSkillID)
{
  return (unsigned __int16)(kSkillID - 29000) <= 0x63u;
}

//----- (006A7BA0) --------------------------------------------------------
bool __cdecl Skill::IsRideSkill(unsigned __int16 kSkillID)
{
  return kSkillID == 29206;
}

//----- (006A7BC0) --------------------------------------------------------
Skill::EmpowerInfo *__cdecl Skill::GetEmpowerInfo(Skill::EmpowerInfo *result, unsigned __int16 kSkillID)
{
  int v2; // ecx@1
  unsigned int v3; // eax@2
  int v4; // ecx@3
  Skill::EmpowerInfo *v5; // eax@7
  int v6; // ecx@8

  v2 = 0;
  if ( kSkillID >= 0x4E20u )
    goto LABEL_7;
  v3 = 0;
  if ( !Skill::ms_uiTotalLearnActSkill )
  {
LABEL_6:
    v2 = ::v2;
LABEL_7:
    v5 = result;
    *(_DWORD *)&result->cDamageUp = v2;
    return v5;
  }
  v4 = (int)Skill::ms_akLearnActSkillInfo;
  while ( *(_WORD *)v4 != kSkillID )
  {
    ++v3;
    v4 += 6;
    if ( v3 >= Skill::ms_uiTotalLearnActSkill )
      goto LABEL_6;
  }
  v6 = *(int *)((char *)&dword_B6310A + 6 * v3);
  v5 = result;
  *(_DWORD *)&result->cDamageUp = v6;
  return v5;
}
// B6310A: using guessed type int dword_B6310A;
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A7C20) --------------------------------------------------------
int __cdecl Skill::Terminate()
{
  NiTListItem<NiPointer<NiDX92DBufferData> > *v0; // esi@1
  NiTListItem<NiPointer<NiDX92DBufferData> > *v1; // ST00_4@2
  int result; // eax@2

  v0 = Skill::m_kUseList.baseclass_0.m_pkHead;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = v0;
      v0 = v0->m_pkNext;
      result = ((int (__thiscall *)(_DWORD, _DWORD))Skill::m_kUseList.baseclass_0.vfptr->DeleteItem)(
                 &Skill::m_kUseList,
                 v1);
    }
    while ( v0 );
  }
  *(_DWORD *)&Skill::m_kUseList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  Skill::m_kUseList.baseclass_0.m_pkHead = 0;
  Skill::m_kUseList.baseclass_0.m_pkTail = 0;
  return result;
}

//----- (006A7C70) --------------------------------------------------------
bool __cdecl Skill::IsLearnProdSkill(unsigned __int16 kSkillID)
{
  int v1; // esi@1
  int v2; // ecx@3
  int v3; // eax@4
  const char *v4; // esi@5
  unsigned int v6; // eax@8

  v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kSkillID) )
  {
    if ( kSkillID <= *(_WORD *)(v1 + 200) )
    {
      v2 = *(_DWORD *)(v1 + 196);
      if ( *(_DWORD *)(v2 + 4 * kSkillID) )
      {
        v3 = *(_DWORD *)(v2 + 4 * kSkillID);
        if ( v3 )
        {
          v4 = (const char *)(v3 + 2);
          if ( !strcmp((const char *)(v3 + 2), "Herbing") || !strcmp(v4, "WoodCutting") )
            return 1;
        }
      }
    }
  }
  v6 = 0;
  if ( Skill::ms_uiTotalLearnProductSkill )
  {
    while ( *(_WORD *)&Skill::ms_akLearnProductSkillInfo[8 * v6] != kSkillID )
    {
      ++v6;
      if ( v6 >= Skill::ms_uiTotalLearnProductSkill )
        return 0;
    }
    return 1;
  }
  return 0;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A7D50) --------------------------------------------------------
bool __cdecl Skill::LearnSkill(unsigned __int16 kSkillID, Skill::EmpowerInfo *pkInfo, unsigned int dwSkillExp)
{
  int v3; // esi@1
  bool result; // al@2
  int v5; // eax@9
  int v6; // eax@12

  v3 = Skill::ms_uiTotalLearnActSkill;
  if ( (unsigned int)Skill::ms_uiTotalLearnActSkill > 0xBB8 )
    return 0;
  if ( kSkillID >= 0x4E20u && kSkillID < 0x7210u || kSkillID == 29206 || kSkillID == 29207 || kSkillID == 29208 )
  {
    v6 = Skill::ms_uiTotalLearnProductSkill;
    *(_WORD *)&Skill::ms_akLearnProductSkillInfo[8 * Skill::ms_uiTotalLearnProductSkill] = kSkillID;
    dword_B5BBDC[2 * v6] = dwSkillExp;
    Skill::ms_uiTotalLearnProductSkill = v6 + 1;
    return 1;
  }
  if ( kSkillID >= 0x7210u )
    return 1;
  v5 = 6 * Skill::ms_uiTotalLearnActSkill;
  *(_WORD *)&Skill::ms_akLearnActSkillInfo[6 * Skill::ms_uiTotalLearnActSkill] = kSkillID;
  if ( pkInfo )
  {
    *((_BYTE *)&dword_B6310A + v5) = pkInfo->cDamageUp;
    *((_BYTE *)&dword_B6310A + v5 + 2) = pkInfo->cLongKeepTime;
    *((_BYTE *)&dword_B6310A + v5 + 3) = pkInfo->cShortCoolTime;
    *((_BYTE *)&dword_B6310A + v5 + 1) = pkInfo->cSmallSp;
    Skill::ms_uiTotalLearnActSkill = v3 + 1;
    result = 1;
  }
  else
  {
    *(int *)((char *)&dword_B6310A + v5) = 0;
    Skill::ms_uiTotalLearnActSkill = v3 + 1;
    result = 1;
  }
  return result;
}
// B5BBDC: using guessed type int dword_B5BBDC[];
// B6310A: using guessed type int dword_B6310A;
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A7E30) --------------------------------------------------------
bool __cdecl Skill::IsSkillUsePossible(unsigned __int16 kSkillID)
{
  int v1; // esi@1
  int v2; // eax@2
  int v3; // ecx@5
  NiTListItem<NiPointer<NiDX92DBufferData> > *v4; // ecx@8
  __int16 v5; // dx@9
  NiDX92DBufferData *v6; // eax@10
  bool result; // al@13

  v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kSkillID) )
  {
    if ( kSkillID <= *(_WORD *)(v1 + 200) )
    {
      v3 = *(_DWORD *)(v1 + 196);
      if ( *(_DWORD *)(v3 + 4 * kSkillID) )
        v2 = *(_DWORD *)(v3 + 4 * kSkillID);
      else
        v2 = 0;
    }
    else
    {
      v2 = 0;
    }
  }
  else
  {
    v2 = 0;
  }
  v4 = Skill::m_kUseList.baseclass_0.m_pkHead;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    v5 = *(_WORD *)v2;
    while ( 1 )
    {
      v6 = v4->m_element.m_pObject;
      v4 = v4->m_pkNext;
      if ( HIWORD(v6->baseclass_0.m_pkBuffer) == v5 )
      {
        if ( *(float *)&v6->m_pkPixelFormat - 0.300000011920929 > Timer::ms_fCurTime
                                                                - *(float *)&v6[1].baseclass_0.baseclass_0.vfptr )
          break;
      }
      if ( !v4 )
        goto LABEL_13;
    }
    result = 0;
  }
  else
  {
LABEL_13:
    result = 1;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A7ED0) --------------------------------------------------------
void __cdecl Skill::AddSysMsg(const char *pcText)
{
  char *v1; // eax@3
  _iobuf *v2; // esi@3
  const char *v3; // eax@4
  const char v4; // cl@5
  char *v5; // edi@6
  char v6; // al@7
  int v7; // eax@8
  char v8; // cl@9
  char v9; // [sp-1h] [bp-205h]@6
  char acText[512]; // [sp+0h] [bp-204h]@4
  unsigned int v11; // [sp+200h] [bp-4h]@1
  int v12; // [sp+204h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  if ( !Folder::m_bInit )
    Folder::Init();
  v1 = Folder::Merge(&Folder::m_acMain, "Log\\SkillLog.txt");
  v2 = fopen(v1, "a+");
  if ( v2 )
  {
    memset(acText, 0, 0x200u);
    v3 = pcText;
    do
    {
      v4 = *v3;
      v3[acText - pcText] = *v3;
      ++v3;
    }
    while ( v4 );
    v5 = &v9;
    do
      v6 = (v5++)[1];
    while ( v6 );
    v7 = (int)acText;
    *(_WORD *)v5 = word_9C8974;
    do
      v8 = *(_BYTE *)v7++;
    while ( v8 );
    fwrite(acText, 1u, v7 - (_DWORD)&acText[1], v2);
    fclose(v2);
  }
}
// 9C8974: using guessed type __int16 word_9C8974;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A7FB0) --------------------------------------------------------
float __cdecl Skill::GetLastCoolTimeByItemActionID(unsigned __int16 kActionID)
{
  NiTListItem<NiPointer<NiDX92DBufferData> > *v1; // eax@1
  NiDX92DBufferData *v2; // ecx@2
  double v3; // st7@4
  float v4; // ST00_4@5
  float result; // st7@6

  v1 = Skill::m_kUseList.baseclass_0.m_pkHead;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v2 = v1->m_element.m_pObject;
      v1 = v1->m_pkNext;
      if ( LOWORD(v2->baseclass_0.m_pkBuffer) == kActionID )
        break;
      if ( !v1 )
        goto LABEL_4;
    }
    v4 = *(float *)&v2->m_pkPixelFormat - (Timer::ms_fCurTime - *(float *)&v2[1].baseclass_0.baseclass_0.vfptr);
    v3 = v4;
  }
  else
  {
LABEL_4:
    v3 = 0.0;
  }
  LODWORD(result) = LODWORD(v3);
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006A7FF0) --------------------------------------------------------
float __cdecl Skill::GetLastCoolTime(unsigned __int16 kSkillID)
{
  int v1; // esi@1
  int v2; // ecx@2
  int v3; // ecx@5
  NiTListItem<NiPointer<NiDX92DBufferData> > *v4; // eax@8
  __int16 v5; // dx@9
  NiDX92DBufferData *v6; // ecx@10
  double v7; // st7@12
  float v8; // ST0C_4@13
  float result; // st7@14

  v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                   + 16))(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable) )
  {
    if ( kSkillID <= *(_WORD *)(v1 + 200) )
    {
      v3 = *(_DWORD *)(v1 + 196);
      if ( *(_DWORD *)(v3 + 4 * kSkillID) )
        v2 = *(_DWORD *)(v3 + 4 * kSkillID);
      else
        v2 = 0;
    }
    else
    {
      v2 = 0;
    }
  }
  else
  {
    v2 = 0;
  }
  v4 = Skill::m_kUseList.baseclass_0.m_pkHead;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    v5 = *(_WORD *)v2;
    while ( 1 )
    {
      v6 = v4->m_element.m_pObject;
      v4 = v4->m_pkNext;
      if ( HIWORD(v6->baseclass_0.m_pkBuffer) == v5 )
        break;
      if ( !v4 )
        goto LABEL_12;
    }
    v8 = *(float *)&v6->m_pkPixelFormat - (Timer::ms_fCurTime - *(float *)&v6[1].baseclass_0.baseclass_0.vfptr);
    v7 = v8;
  }
  else
  {
LABEL_12:
    v7 = 0.0;
  }
  LODWORD(result) = LODWORD(v7);
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A8080) --------------------------------------------------------
void __cdecl Skill::ApplyCoolTimeToInterface()
{
  NiTListItem<NiPointer<NiDX92DBufferData> > *v0; // edi@1
  NiDX92DBufferData *v1; // esi@2
  float v2; // ST18_4@2
  unsigned __int16 v3; // ax@2
  float v4; // ST18_4@3

  v0 = Skill::m_kUseList.baseclass_0.m_pkHead;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = v0->m_element.m_pObject;
      v0 = v0->m_pkNext;
      v2 = Timer::ms_fCurTime - *(float *)&v1[1].baseclass_0.baseclass_0.vfptr;
      IconWin::StartCoolTime(HIWORD(v1->baseclass_0.m_pkBuffer), Timer::ms_fCurTime, *(float *)&v1->m_pkPixelFormat, v2);
      v3 = LOWORD(v1->baseclass_0.m_pkBuffer);
      if ( v3 != -1 )
      {
        v4 = Timer::ms_fCurTime - *(float *)&v1[1].baseclass_0.baseclass_0.vfptr;
        IconWin::StartCoolTimebyItemUse(v3, Timer::ms_fCurTime, *(float *)&v1->m_pkPixelFormat, v4);
      }
    }
    while ( v0 );
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006A8110) --------------------------------------------------------
int __cdecl Skill::ClearLearnSkill()
{
  NiTListItem<NiPointer<NiDX92DBufferData> > *v0; // esi@1
  NiTListItem<NiPointer<NiDX92DBufferData> > *v1; // ST00_4@2
  int result; // eax@2

  v0 = Skill::m_kUseList.baseclass_0.m_pkHead;
  Skill::ms_uiTotalLearnActSkill = 0;
  Skill::ms_uiTotalLearnProductSkill = 0;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    do
    {
      v1 = v0;
      v0 = v0->m_pkNext;
      result = ((int (__thiscall *)(_DWORD, _DWORD))Skill::m_kUseList.baseclass_0.vfptr->DeleteItem)(
                 &Skill::m_kUseList,
                 v1);
    }
    while ( v0 );
  }
  *(_DWORD *)&Skill::m_kUseList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  Skill::m_kUseList.baseclass_0.m_pkHead = 0;
  Skill::m_kUseList.baseclass_0.m_pkTail = 0;
  return result;
}
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A8160) --------------------------------------------------------
void __cdecl Skill::InitPassiveSkill(PROTO_NC_CHAR_SKILL_PASSIVE_CMD *pkProto)
{
  unsigned int v1; // edx@1
  signed int v2; // eax@1
  PROTO_NC_CHAR_SKILL_PASSIVE_CMD *v3; // ecx@2

  v1 = 0;
  Skill::ms_uiTotalLearnPassiveSkill = 0;
  v2 = 0;
  if ( pkProto->number > 0u )
  {
    v3 = pkProto + 1;
    do
    {
      if ( v1 <= 0xBB8 )
      {
        *(_WORD *)&Skill::ms_akLearnPassiveSkillInfo[2 * v1++] = v3->number;
        Skill::ms_uiTotalLearnPassiveSkill = v1;
      }
      ++v2;
      ++v3;
    }
    while ( v2 < pkProto->number );
  }
}
// B67770: using guessed type int Skill__ms_uiTotalLearnPassiveSkill;

//----- (006A81B0) --------------------------------------------------------
bool __cdecl Skill::AmILearnAnyProdBaseSkill()
{
  signed int v0; // ebx@1
  int v1; // esi@2
  int v2; // ecx@4
  int v3; // eax@5
  const char *v4; // esi@6
  unsigned int v5; // eax@8

  v0 = 29100;
  while ( 1 )
  {
    v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            (unsigned __int16)v0) )
    {
      if ( (unsigned __int16)v0 <= *(_WORD *)(v1 + 200) )
      {
        v2 = *(_DWORD *)(v1 + 196);
        if ( *(_DWORD *)(v2 + 4 * (unsigned __int16)v0) )
        {
          v3 = *(_DWORD *)(v2 + 4 * (unsigned __int16)v0);
          if ( v3 )
          {
            v4 = (const char *)(v3 + 2);
            if ( !strcmp((const char *)(v3 + 2), "Herbing") )
              return 1;
            if ( !strcmp(v4, "WoodCutting") )
              return 1;
          }
        }
      }
    }
    v5 = 0;
    if ( Skill::ms_uiTotalLearnProductSkill )
    {
      while ( *(_WORD *)&Skill::ms_akLearnProductSkillInfo[8 * v5] != (_WORD)v0 )
      {
        ++v5;
        if ( v5 >= Skill::ms_uiTotalLearnProductSkill )
          goto LABEL_11;
      }
      return 1;
    }
LABEL_11:
    ++v0;
    if ( v0 >= 29200 )
      return 0;
  }
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A82A0) --------------------------------------------------------
int __cdecl Skill::GetCountOfILearnAnyProdBaseSkill()
{
  signed int v0; // ebx@1
  int v1; // esi@2
  int v2; // ecx@4
  int v3; // eax@5
  const char *v4; // esi@6
  unsigned int v5; // eax@8
  int Count; // [sp+Ch] [bp-4h]@1

  Count = 0;
  v0 = 29100;
  do
  {
    v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                              + 16))(
                             ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                             (unsigned __int16)v0)
      || (unsigned __int16)v0 > *(_WORD *)(v1 + 200)
      || (v2 = *(_DWORD *)(v1 + 196), !*(_DWORD *)(v2 + 4 * (unsigned __int16)v0))
      || (v3 = *(_DWORD *)(v2 + 4 * (unsigned __int16)v0)) == 0
      || (v4 = (const char *)(v3 + 2), strcmp((const char *)(v3 + 2), "Herbing")) && strcmp(v4, "WoodCutting") )
    {
      v5 = 0;
      if ( !Skill::ms_uiTotalLearnProductSkill )
        goto LABEL_13;
      while ( *(_WORD *)&Skill::ms_akLearnProductSkillInfo[8 * v5] != (_WORD)v0 )
      {
        ++v5;
        if ( v5 >= Skill::ms_uiTotalLearnProductSkill )
          goto LABEL_13;
      }
    }
    ++Count;
LABEL_13:
    ++v0;
  }
  while ( v0 <= 29105 );
  return Count;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// B67774: using guessed type int Skill__ms_uiTotalLearnProductSkill;

//----- (006A8390) --------------------------------------------------------
bool __cdecl Skill::IsMovingSkill(unsigned __int16 kSkillID)
{
  int v1; // esi@1
  int v2; // ecx@3
  int v3; // eax@4

  v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  return (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            kSkillID)
      && kSkillID <= *(_WORD *)(v1 + 200)
      && (v2 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v2 + 4 * kSkillID))
      && (v3 = *(_DWORD *)(v2 + 4 * kSkillID)) != 0
      && *(_BYTE *)(v3 + 192);
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A83F0) --------------------------------------------------------
bool __cdecl Skill::IsSkillUsePossibleByItemActionID(unsigned __int16 ActionID)
{
  ItemAction *v1; // edx@1
  bool result; // al@2
  NiTListItem<NiPointer<NiDX92DBufferData> > *v3; // ecx@3
  NiDX92DBufferData *v4; // eax@4

  v1 = ItemActionTab::GetByItemActionID(ActionID);
  if ( v1 )
  {
    v3 = Skill::m_kUseList.baseclass_0.m_pkHead;
    if ( Skill::m_kUseList.baseclass_0.m_pkHead )
    {
      while ( 1 )
      {
        v4 = v3->m_element.m_pObject;
        v3 = v3->m_pkNext;
        if ( v4 )
        {
          if ( v4->m_pkSurface == (IDirect3DSurface9 *)v1->CoolGroupActionID
            && *(float *)&v4->m_pkPixelFormat - 0.300000011920929 > Timer::ms_fCurTime
                                                                  - *(float *)&v4[1].baseclass_0.baseclass_0.vfptr )
            break;
        }
        if ( !v3 )
          goto LABEL_8;
      }
      result = 0;
    }
    else
    {
LABEL_8:
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006A8460) --------------------------------------------------------
void __cdecl Skill::RecordSkillUseByItemActionID(unsigned __int16 kActionID, float fCurTime, float fStartTime, float fMaxCoolTime)
{
  unsigned __int16 v4; // bx@1
  ItemAction *v5; // edi@1
  NiTListItem<NiPointer<NiDX92DBufferData> > *v6; // eax@2
  NiDX92DBufferData *v7; // ecx@3
  void *v8; // eax@5
  void *v9; // esi@5
  ItemAction *v10; // ecx@14
  double v11; // st6@14
  double v12; // st7@14
  double v13; // st7@16
  double v14; // st6@16
  double v15; // st5@16
  float v16; // ST10_4@16
  float v17; // ST0C_4@16
  float v18; // ST08_4@16
  unsigned int v19; // esi@16
  ItemAction *v20; // eax@17
  ItemAction *v21; // ebx@17
  unsigned __int16 v22; // ax@18
  void *v23; // eax@20
  void *v24; // esi@20
  double v25; // st7@23
  int v26; // eax@23
  NiPointer<NiDX92DBufferData> element; // [sp+24h] [bp-1Ch]@23
  unsigned int i; // [sp+28h] [bp-18h]@16
  float v29; // [sp+2Ch] [bp-14h]@16
  ItemAction *pkItemAction; // [sp+30h] [bp-10h]@1
  int v31; // [sp+3Ch] [bp-4h]@11

  v4 = kActionID;
  v5 = 0;
  pkItemAction = ItemActionTab::GetByItemActionID(kActionID);
  if ( pkItemAction )
  {
    v6 = Skill::m_kUseList.baseclass_0.m_pkHead;
    if ( Skill::m_kUseList.baseclass_0.m_pkHead )
    {
      while ( 1 )
      {
        v7 = v6->m_element.m_pObject;
        v6 = v6->m_pkNext;
        if ( LOWORD(v7->baseclass_0.m_pkBuffer) == v4 )
          break;
        if ( !v6 )
          goto LABEL_5;
      }
      v9 = v7;
    }
    else
    {
LABEL_5:
      v8 = operator new(0x18u);
      v9 = v8;
      if ( v8 )
      {
        *(_DWORD *)v8 = &NiRefObject::_vftable_;
        *((_DWORD *)v8 + 1) = 0;
        InterlockedIncrement(&NiRefObject::ms_uiObjects);
        *(_DWORD *)v9 = &SkillUseRecord::_vftable_;
      }
      else
      {
        v9 = 0;
      }
      *(_DWORD *)&kActionID = v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)v9 + 1);
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
        &Skill::m_kUseList,
        (NiPointer<NiDX92DBufferData> *)&kActionID);
      v31 = -1;
      if ( v9 && !InterlockedDecrement((volatile LONG *)v9 + 1) )
        (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    }
    v10 = pkItemAction;
    v11 = fMaxCoolTime;
    *((_WORD *)v9 + 4) = v4;
    *((_DWORD *)v9 + 3) = v10->CoolGroupActionID;
    v12 = v11;
    if ( v11 <= 0.0 )
    {
      *(_DWORD *)&kActionID = v10->CoolTime;
      v12 = (double)kActionID / 1000.0;
    }
    *(float *)&kActionID = v12;
    v13 = *(float *)&kActionID;
    *((float *)v9 + 4) = *(float *)&kActionID;
    v14 = fCurTime;
    v15 = fStartTime;
    v29 = fCurTime - fStartTime;
    *((float *)v9 + 5) = v29;
    v16 = v15;
    v17 = v13;
    v18 = v14;
    IconWin::StartCoolTimebyItemUse(v4, v18, v17, v16);
    v19 = 0;
    i = 0;
    if ( ItemActionTab::GetTotal() )
    {
      do
      {
        v20 = ItemActionTab::GetByItemActionID(v19);
        v21 = v20;
        if ( v20 == v5 )
          break;
        v22 = v20->CoolGroupActionID;
        if ( v22 == pkItemAction->CoolGroupActionID && v22 > (unsigned __int16)v5 )
        {
          v23 = operator new(0x18u);
          v24 = v23;
          if ( v23 == v5 )
          {
            v24 = 0;
          }
          else
          {
            *(_DWORD *)v23 = &NiRefObject::_vftable_;
            *((_DWORD *)v23 + 1) = v5;
            InterlockedIncrement(&NiRefObject::ms_uiObjects);
            *(_DWORD *)v24 = &SkillUseRecord::_vftable_;
          }
          v25 = *(float *)&kActionID;
          *((_WORD *)v24 + 4) = v21->ItemActionID;
          v26 = v21->CoolGroupActionID;
          *((float *)v24 + 4) = v25;
          *((float *)v24 + 5) = v29;
          *((_DWORD *)v24 + 3) = v26;
          element.m_pObject = (NiDX92DBufferData *)v24;
          InterlockedIncrement((volatile LONG *)v24 + 1);
          v31 = 1;
          NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
            &Skill::m_kUseList,
            &element);
          v31 = -1;
          if ( !InterlockedDecrement((volatile LONG *)v24 + 1) )
            (**(void (__thiscall ***)(void *, signed int))v24)(v24, 1);
          IconWin::StartCoolTimebyItemUse(v21->ItemActionID, fCurTime, *(float *)&kActionID, fStartTime);
          v19 = i;
          v5 = 0;
        }
        ++v19;
        i = v19;
      }
      while ( v19 < ItemActionTab::GetTotal() );
    }
  }
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C89CC: using guessed type int (__thiscall *SkillUseRecord___vftable_)(void *p, char);

//----- (006A86C0) --------------------------------------------------------
void __cdecl SkillEmpowerRequest::Register(unsigned __int16 kSkillID, Skill::EmpowerInfo kInfo)
{
  void *v2; // eax@1
  void *v3; // esi@1
  NiTListItem<NiD3DShaderInterface *> *v4; // eax@1

  v2 = operator new(6u);
  v3 = v2;
  *(_WORD *)v2 = kSkillID;
  *((_BYTE *)v2 + 2) = kInfo.cDamageUp;
  *((_BYTE *)v2 + 4) = kInfo.cLongKeepTime;
  *((_BYTE *)v2 + 5) = kInfo.cShortCoolTime;
  *((_BYTE *)v2 + 3) = kInfo.cSmallSp;
  v4 = SkillEmpowerRequest::ms_kReqList.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&SkillEmpowerRequest::ms_kReqList);
  v4->m_element = (NiD3DShaderInterface *)v3;
  v4->m_pkNext = 0;
  v4->m_pkPrev = SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkTail;
  if ( SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkTail )
  {
    SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkTail->m_pkNext = v4;
    ++*(_DWORD *)&SkillEmpowerRequest::ms_kReqList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkTail = v4;
  }
  else
  {
    ++*(_DWORD *)&SkillEmpowerRequest::ms_kReqList.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead = v4;
    SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkTail = v4;
  }
}

//----- (006A8740) --------------------------------------------------------
void __cdecl Skill::Update(float fTime)
{
  NiTListItem<NiPointer<NiDX92DBufferData> > *v1; // eax@1
  NiDX92DBufferData *v2; // esi@4
  PgWin *v3; // ebx@7
  char v4; // bl@13
  std::vector<IconWin *,std::allocator<IconWin *> > *v5; // esi@13
  int v6; // ecx@13
  unsigned int v7; // edx@13
  int v8; // ecx@14
  NiPointer<PgWin> result; // [sp+0h] [bp-18h]@6
  NiPointer<PgWin> element; // [sp+4h] [bp-14h]@6
  NiTListItem<NiPointer<NiDX92DBufferData> > *kIter; // [sp+8h] [bp-10h]@3
  int v12; // [sp+14h] [bp-4h]@6

  v1 = Skill::m_kUseList.baseclass_0.m_pkHead;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v2 = v1->m_element.m_pObject;
      kIter = v1->m_pkNext;
      if ( v2 && *(float *)&v2->m_pkPixelFormat <= fTime - *(float *)&v2[1].baseclass_0.baseclass_0.vfptr )
      {
        element.m_pObject = (PgWin *)v2;
        InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount);
        v12 = 0;
        NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&Skill::m_kUseList,
          &result,
          &element);
        if ( result.m_pObject )
        {
          v3 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v3 )
              v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
          }
        }
        v12 = -1;
        if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) )
          v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
      if ( !kIter )
        break;
      v1 = kIter;
    }
  }
  v4 = 0;
  v5 = IconWin::GetCoolTimeIconList();
  v6 = *(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = 0;
  if ( (signed int)((char *)v5->baseclass_0._Mylast - *(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    do
    {
      v8 = *(_DWORD *)(v6 + 4 * v7);
      if ( *(_BYTE *)(v8 + 377) )
      {
        v4 = 1;
        *(_BYTE *)(v8 + 377) = 0;
      }
      v6 = *(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
      ++v7;
    }
    while ( v7 < (signed int)((char *)v5->baseclass_0._Mylast - *(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 );
    if ( v4 )
      Skill::ApplyCoolTimeToInterface();
  }
}

//----- (006A8870) --------------------------------------------------------
void __cdecl Skill::SetLastCoolTimeByItemActionID(unsigned __int16 kActionID, float fLastCoolTime)
{
  unsigned __int16 v2; // di@1
  unsigned int v3; // esi@1
  ItemAction *v4; // eax@1
  NiTListItem<NiPointer<NiDX92DBufferData> > *v5; // ecx@2
  double v6; // st7@2
  NiDX92DBufferData *v7; // edx@3
  double v8; // st7@8
  float v9; // ST0C_4@8
  float fDelay; // [sp+20h] [bp+8h]@6
  NiPixelFormat *fDelaya; // [sp+20h] [bp+8h]@8
  float fDelayb; // [sp+20h] [bp+8h]@8

  v2 = kActionID;
  v3 = kActionID;
  v4 = ItemActionTab::GetByItemActionID(kActionID);
  if ( v4 )
  {
    while ( 1 )
    {
      v5 = Skill::m_kUseList.baseclass_0.m_pkHead;
      v6 = fLastCoolTime;
      if ( Skill::m_kUseList.baseclass_0.m_pkHead )
        break;
LABEL_6:
      fDelay = (double)v4->CoolTime / 1000.0 - v6;
      Skill::RecordSkillUseByItemActionID(v2, Timer::ms_fCurTime, fDelay, fLastCoolTime);
      v4 = ItemActionTab::GetByItemActionID(v3);
      if ( !v4 )
        return;
    }
    while ( 1 )
    {
      v7 = v5->m_element.m_pObject;
      v5 = v5->m_pkNext;
      if ( v7 )
      {
        if ( LOWORD(v7->baseclass_0.m_pkBuffer) == v4->ItemActionID )
          break;
      }
      if ( !v5 )
        goto LABEL_6;
    }
    *(float *)&fDelaya = v6 + Timer::ms_fCurTime - *(float *)&v7[1].baseclass_0.baseclass_0.vfptr;
    v8 = *(float *)&fDelaya;
    v7->m_pkPixelFormat = fDelaya;
    fDelayb = Timer::ms_fCurTime - *(float *)&v7[1].baseclass_0.baseclass_0.vfptr;
    v9 = v8;
    IconWin::StartCoolTimebyItemUse(v4->ItemActionID, Timer::ms_fCurTime, v9, fDelayb);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006A8950) --------------------------------------------------------
void __cdecl SkillEmpowerRequest::Applicate(unsigned __int16 kSkillID)
{
  NiTListItem<NiD3DShaderInterface *> *v1; // ecx@1
  NiTListItem<NiD3DShaderInterface *> *v2; // edx@1
  NiD3DShaderInterface *v3; // eax@2
  char v4; // dl@5
  char v5; // bl@5
  int v6; // edx@6
  void *v7; // esi@6
  int v8; // esi@11
  int v9; // ecx@11
  unsigned int v10; // eax@11
  int v11; // edi@12
  char *v12; // eax@16
  void *kPos; // [sp+0h] [bp-8h]@9
  Skill::EmpowerInfo kEmpowerInfo; // [sp+4h] [bp-4h]@5

  v1 = SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead;
  v2 = SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead;
  if ( SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( LOWORD(v3->baseclass_0.baseclass_0.vfptr) == kSkillID )
        break;
      if ( !v2 )
        return;
    }
    kEmpowerInfo.cLongKeepTime = LOBYTE(v3->baseclass_0.baseclass_0.m_uiRefCount);
    kEmpowerInfo.cShortCoolTime = BYTE1(v3->baseclass_0.baseclass_0.m_uiRefCount);
    v4 = BYTE3(v3->baseclass_0.baseclass_0.vfptr);
    v5 = BYTE2(v3->baseclass_0.baseclass_0.vfptr);
    kEmpowerInfo.cDamageUp = BYTE2(v3->baseclass_0.baseclass_0.vfptr);
    kEmpowerInfo.cSmallSp = v4;
    if ( SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead )
    {
      while ( 1 )
      {
        v6 = (int)&v1->m_element;
        v7 = v1;
        v1 = v1->m_pkNext;
        if ( v3 == *(NiD3DShaderInterface **)v6 )
          break;
        if ( !v1 )
          goto LABEL_8;
      }
    }
    else
    {
LABEL_8:
      v7 = 0;
    }
    kPos = v7;
    if ( v7 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        &SkillEmpowerRequest::ms_kReqList,
        &kPos);
    v8 = Skill::ms_uiRestEmpowerPoint;
    v9 = v5 + kEmpowerInfo.cLongKeepTime + kEmpowerInfo.cShortCoolTime + kEmpowerInfo.cSmallSp;
    v10 = 0;
    if ( Skill::ms_uiTotalLearnActSkill )
    {
      v11 = (int)Skill::ms_akLearnActSkillInfo;
      while ( *(_WORD *)v11 != kSkillID )
      {
        ++v10;
        v11 += 6;
        if ( v10 >= Skill::ms_uiTotalLearnActSkill )
          return;
      }
      v12 = &Skill::ms_akLearnActSkillInfo[6 * v10];
      if ( v12 )
      {
        v12[2] += kEmpowerInfo.cDamageUp;
        v12[3] += kEmpowerInfo.cSmallSp;
        v12[4] += kEmpowerInfo.cLongKeepTime;
        v12[5] += kEmpowerInfo.cShortCoolTime;
        Skill::ms_uiRestEmpowerPoint = v8 - v9;
      }
    }
  }
}
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;
// B6775C: using guessed type int Skill__ms_uiRestEmpowerPoint;

//----- (006A8A50) --------------------------------------------------------
void __cdecl SkillEmpowerRequest::Cancel(unsigned __int16 kSkillID)
{
  void *v1; // ecx@0
  NiTListItem<NiD3DShaderInterface *> *v2; // eax@1
  NiTListItem<NiD3DShaderInterface *> *v3; // ecx@1
  void *v4; // esi@2
  int v5; // ecx@6
  void *v6; // edx@6
  void *kPos; // [sp+0h] [bp-4h]@1

  kPos = v1;
  v2 = SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead;
  v3 = SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead;
  if ( SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      v3 = v3->m_pkNext;
      if ( *(_WORD *)v4 == kSkillID )
        break;
      if ( !v3 )
        return;
    }
    if ( SkillEmpowerRequest::ms_kReqList.baseclass_0.m_pkHead )
    {
      while ( 1 )
      {
        v5 = (int)&v2->m_element;
        v6 = v2;
        v2 = v2->m_pkNext;
        if ( v4 == *(void **)v5 )
          break;
        if ( !v2 )
          goto LABEL_8;
      }
    }
    else
    {
LABEL_8:
      v6 = 0;
    }
    kPos = v6;
    if ( v6 )
      NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
        &SkillEmpowerRequest::ms_kReqList,
        &kPos);
    operator delete(v4);
  }
}

//----- (006A8AC0) --------------------------------------------------------
bool __cdecl Skill::IsBuildMiniRoomSkill(unsigned __int16 kSkillID)
{
  ActiveSkillViewInfo *v1; // eax@1
  bool result; // al@2

  v1 = ActSkillViewInfoTab::GetByInxName("MiniRoomSkill");
  if ( v1 )
    result = v1->ID == kSkillID;
  else
    result = 0;
  return result;
}

//----- (006A8AF0) --------------------------------------------------------
void __cdecl Skill::DecreaseRecordTime(unsigned __int16 kID)
{
  NiTListItem<NiPointer<NiDX92DBufferData> > *v1; // eax@1
  NiDX92DBufferData *v2; // esi@4
  PgWin *v3; // ebx@7
  NiPointer<PgWin> result; // [sp+0h] [bp-18h]@6
  NiPointer<PgWin> element; // [sp+4h] [bp-14h]@6
  NiTListItem<NiPointer<NiDX92DBufferData> > *kIter; // [sp+8h] [bp-10h]@3
  int v7; // [sp+14h] [bp-4h]@6

  v1 = Skill::m_kUseList.baseclass_0.m_pkHead;
  if ( Skill::m_kUseList.baseclass_0.m_pkHead )
  {
    while ( 1 )
    {
      v2 = v1->m_element.m_pObject;
      kIter = v1->m_pkNext;
      if ( v2 && HIWORD(v2->baseclass_0.m_pkBuffer) == kID )
      {
        element.m_pObject = (PgWin *)v2;
        InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount);
        v7 = 0;
        NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&Skill::m_kUseList,
          &result,
          &element);
        if ( result.m_pObject )
        {
          v3 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v3 )
              v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
          }
        }
        v7 = -1;
        if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) )
          v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
      if ( !kIter )
        break;
      v1 = kIter;
    }
  }
}

//----- (006A8BD0) --------------------------------------------------------
bool __cdecl Skill::Init()
{
  char *v0; // eax@3
  bool result; // al@4
  char *v2; // eax@7
  char *v3; // eax@10
  char *v4; // eax@13

  if ( !Folder::m_bInit )
    Folder::Init();
  v0 = Folder::Merge(&Folder::m_acSystem, "ActiveSkill.shn");
  if ( !ITableBase<ActiveSkillInfo_ActSkillInfoTab>::Load(v0, 1) )
    goto LABEL_16;
  ActSkillInfoTab::GenerateCRCSum();
  if ( !Folder::m_bInit )
    Folder::Init();
  v2 = Folder::Merge(&Folder::m_acSystem, "ActiveSkillView.shn");
  if ( !ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::Load(v2, 1) )
    goto LABEL_16;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acSystem, "PassiveSkill.shn");
  if ( ITableBase<PassiveSkillInfo_PasSkillInfoTab>::Load(v3, 1) )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v4 = Folder::Merge(&Folder::m_acSystem, "PassiveSkillView.shn");
    result = ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::Load(v4, 1) != 0;
  }
  else
  {
LABEL_16:
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006A8CA0) --------------------------------------------------------
unsigned __int16 __cdecl Skill::GetBaseSkillID(unsigned __int16 kSkillID, int *riMaxLevel)
{
  int v2; // esi@1
  int v3; // eax@2
  int v4; // edx@5
  signed int v5; // ebx@8
  const char *v6; // eax@9
  unsigned int v7; // esi@9
  char *v8; // edx@10
  const char v9; // cl@11
  char *v10; // eax@12
  ActiveSkillInfo *v11; // eax@12
  int v12; // edi@13
  int v13; // esi@14
  int v14; // eax@16
  unsigned __int16 result; // ax@20
  unsigned __int16 kBaseSkillID; // [sp+Ch] [bp-2Ch]@13
  int *v17; // [sp+10h] [bp-28h]@1
  char acSkillName[32]; // [sp+14h] [bp-24h]@10
  unsigned int v19; // [sp+34h] [bp-4h]@1
  int v20; // [sp+38h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v2 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  v17 = riMaxLevel;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kSkillID) )
  {
    if ( kSkillID <= *(_WORD *)(v2 + 200) )
    {
      v4 = *(_DWORD *)(v2 + 196);
      if ( *(_DWORD *)(v4 + 4 * kSkillID) )
        v3 = *(_DWORD *)(v4 + 4 * kSkillID);
      else
        v3 = 0;
    }
    else
    {
      v3 = 0;
    }
  }
  else
  {
    v3 = 0;
  }
  v5 = 1;
  if ( !v3 )
  {
    *v17 = 1;
    return -1;
  }
  v6 = (const char *)(v3 + 2);
  v7 = strlen(v6);
  if ( (signed int)v7 > 31 )
    return -1;
  v8 = (char *)(acSkillName - v6);
  do
  {
    v9 = *v6;
    v6[(_DWORD)v8] = *v6;
    ++v6;
  }
  while ( v9 );
  *((_BYTE *)&v17 + v7 + 2) = 0;
  v10 = fs("%s%02d");
  v11 = ActSkillInfoTab::GetByInxName(v10);
  if ( !v11 )
    return -1;
  kBaseSkillID = v11->ID;
  v12 = v11->ID;
  while ( 1 )
  {
    v13 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                             ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                             v12)
      || (unsigned __int16)v12 > *(_WORD *)(v13 + 200)
      || (v14 = *(_DWORD *)(v13 + 196) + 4 * (unsigned __int16)v12, !*(_DWORD *)v14)
      || !*(_DWORD *)v14 )
    {
      result = kBaseSkillID;
      *v17 = v5;
      return result;
    }
    if ( strcmp((const char *)(*(_DWORD *)v14 + 2), fs("%s%02d")) )
      break;
    ++v12;
    ++v5;
  }
  result = kBaseSkillID;
  *v17 = v5;
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A8E40) --------------------------------------------------------
Skill::EmpowerInfo *__cdecl Skill::GetAccumulatedEmpowerInfo(Skill::EmpowerInfo *result, unsigned __int16 kSkillID)
{
  int v2; // edi@2
  int v3; // edx@4
  int v4; // eax@5
  const char *v5; // eax@6
  unsigned int v6; // esi@6
  char *v7; // edx@7
  const char v8; // cl@8
  char *v9; // eax@9
  ActiveSkillInfo *v10; // eax@9
  int v11; // edi@10
  int v12; // esi@11
  int v13; // eax@13
  unsigned int v14; // eax@15
  int v15; // ecx@17
  char *v17; // eax@21
  int iLevel; // [sp+8h] [bp-28h]@9
  char acSkillName[32]; // [sp+Ch] [bp-24h]@7
  unsigned int v20; // [sp+2Ch] [bp-4h]@1
  int v21; // [sp+30h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  *(_DWORD *)&result->cDamageUp = 0;
  if ( kSkillID < 0x4E20u )
  {
    v2 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            kSkillID) )
    {
      if ( kSkillID <= *(_WORD *)(v2 + 200) )
      {
        v3 = *(_DWORD *)(v2 + 196);
        if ( *(_DWORD *)(v3 + 4 * kSkillID) )
        {
          v4 = *(_DWORD *)(v3 + 4 * kSkillID);
          if ( v4 )
          {
            v5 = (const char *)(v4 + 2);
            v6 = strlen(v5);
            if ( (signed int)v6 <= 31 )
            {
              v7 = (char *)(acSkillName - v5);
              do
              {
                v8 = *v5;
                v5[(_DWORD)v7] = *v5;
                ++v5;
              }
              while ( v8 );
              *((_BYTE *)&iLevel + v6 + 2) = 0;
              v9 = fs("%s%02d");
              v10 = ActSkillInfoTab::GetByInxName(v9);
              if ( v10 )
              {
                v11 = v10->ID;
                for ( iLevel = 1; ; ++iLevel )
                {
                  v12 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
                  if ( !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                                         + 16))(
                                           ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                                           v11) )
                    break;
                  if ( (unsigned __int16)v11 > *(_WORD *)(v12 + 200) )
                    break;
                  v13 = *(_DWORD *)(v12 + 196) + 4 * (unsigned __int16)v11;
                  if ( !*(_DWORD *)v13 )
                    break;
                  if ( !*(_DWORD *)v13 )
                    break;
                  v14 = strcmp((const char *)(*(_DWORD *)v13 + 2), fs("%s%02d"));
                  if ( v14 )
                    break;
                  if ( !Skill::ms_uiTotalLearnActSkill )
                    break;
                  v15 = (int)Skill::ms_akLearnActSkillInfo;
                  while ( *(_WORD *)v15 != (_WORD)v11 )
                  {
                    ++v14;
                    v15 += 6;
                    if ( v14 >= Skill::ms_uiTotalLearnActSkill )
                      return result;
                  }
                  v17 = &Skill::ms_akLearnActSkillInfo[6 * v14];
                  if ( !v17 )
                    break;
                  result->cDamageUp += v17[2];
                  result->cSmallSp += v17[3];
                  result->cLongKeepTime += v17[4];
                  result->cShortCoolTime += v17[5];
                  ++v11;
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// B67758: using guessed type int Skill__ms_uiTotalLearnActSkill;

//----- (006A9000) --------------------------------------------------------
unsigned int __cdecl Skill::GetEmpowerAppliedCoolTime(unsigned __int16 kSkillID)
{
  int v1; // esi@1
  int v2; // eax@3
  int v3; // ecx@4
  unsigned int result; // eax@6
  Skill::EmpowerInfo kInfo; // [sp+8h] [bp-4h]@1

  Skill::GetAccumulatedEmpowerInfo(&kInfo, kSkillID);
  v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kSkillID)
    && kSkillID <= *(_WORD *)(v1 + 200)
    && (v2 = *(_DWORD *)(v1 + 196) + 4 * kSkillID, *(_DWORD *)v2)
    && (v3 = *(_DWORD *)v2) != 0 )
  {
    if ( kInfo.cShortCoolTime )
      result = *(_DWORD *)(v3 + 207) - *(_DWORD *)(v3 + 4 * kInfo.cShortCoolTime + 503);
    else
      result = *(_DWORD *)(v3 + 207);
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A9080) --------------------------------------------------------
unsigned int __cdecl Skill::GetEmpowerAppliedSP(unsigned __int16 kSkillID)
{
  int v1; // esi@1
  int v2; // eax@3
  int v3; // ecx@4
  unsigned int result; // eax@6
  Skill::EmpowerInfo kInfo; // [sp+8h] [bp-4h]@1

  Skill::GetAccumulatedEmpowerInfo(&kInfo, kSkillID);
  v1 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kSkillID)
    && kSkillID <= *(_WORD *)(v1 + 200)
    && (v2 = *(_DWORD *)(v1 + 196) + 4 * kSkillID, *(_DWORD *)v2)
    && (v3 = *(_DWORD *)v2) != 0 )
  {
    if ( kInfo.cSmallSp )
      result = *(_DWORD *)(v3 + 160) - *(_DWORD *)(v3 + 4 * kInfo.cSmallSp + 463);
    else
      result = *(_DWORD *)(v3 + 160);
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A9100) --------------------------------------------------------
void __cdecl Skill::RecordSkillUse(unsigned __int16 kSkillID, float fCurTime, float fStartTime, float fMaxCoolTime)
{
  int v4; // esi@1
  int v5; // ecx@3
  int v6; // edi@4
  NiTListItem<NiPointer<NiDX92DBufferData> > *v7; // eax@5
  NiDX92DBufferData *v8; // ecx@6
  void *v9; // eax@8
  int v10; // esi@8
  int v11; // ebx@10
  unsigned __int16 v12; // cx@17
  double v13; // st7@17
  NiDX92DBufferData *v14; // esi@18
  double v15; // st7@21
  float v16; // ST10_4@21
  unsigned int v17; // esi@21
  void *v18; // ebx@22
  void *v19; // eax@26
  int v20; // eax@27
  int v21; // esi@27
  double v22; // st7@29
  int v23; // eax@29
  double v24; // st7@29
  int pkInfo; // [sp+28h] [bp-20h]@4
  NiPointer<NiDX92DBufferData> element; // [sp+2Ch] [bp-1Ch]@20
  unsigned int i; // [sp+30h] [bp-18h]@12
  float v28; // [sp+34h] [bp-14h]@21
  float fDlyTime; // [sp+38h] [bp-10h]@21
  int v30; // [sp+44h] [bp-4h]@14

  v4 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                           + 16))(
                          ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                          kSkillID) )
  {
    if ( kSkillID <= *(_WORD *)(v4 + 200) )
    {
      v5 = *(_DWORD *)(v4 + 196);
      if ( *(_DWORD *)(v5 + 4 * kSkillID) )
      {
        v6 = *(_DWORD *)(v5 + 4 * kSkillID);
        pkInfo = v6;
        if ( v6 )
        {
          v7 = Skill::m_kUseList.baseclass_0.m_pkHead;
          if ( Skill::m_kUseList.baseclass_0.m_pkHead )
          {
            while ( 1 )
            {
              v8 = v7->m_element.m_pObject;
              v7 = v7->m_pkNext;
              if ( HIWORD(v8->baseclass_0.m_pkBuffer) == *(_WORD *)v6 )
                break;
              if ( !v7 )
                goto LABEL_8;
            }
            v11 = (int)v8;
          }
          else
          {
LABEL_8:
            v9 = operator new(0x18u);
            v10 = (int)v9;
            if ( v9 )
            {
              *(_DWORD *)v9 = &NiRefObject::_vftable_;
              *((_DWORD *)v9 + 1) = 0;
              InterlockedIncrement(&NiRefObject::ms_uiObjects);
              *(_DWORD *)v10 = &SkillUseRecord::_vftable_;
            }
            else
            {
              v10 = 0;
            }
            v11 = v10;
            i = v10;
            if ( v10 )
              InterlockedIncrement((volatile LONG *)(v10 + 4));
            v30 = 0;
            NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
              &Skill::m_kUseList,
              (NiPointer<NiDX92DBufferData> *)&i);
            v30 = -1;
            if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
          }
          v12 = kSkillID;
          *(_WORD *)(v11 + 10) = kSkillID;
          *(_DWORD *)(v11 + 12) = *(_DWORD *)(v6 + 211);
          v13 = fMaxCoolTime;
          if ( fMaxCoolTime <= 0.0 )
          {
            v14 = *(NiDX92DBufferData **)(v6 + 207);
            Skill::GetAccumulatedEmpowerInfo((Skill::EmpowerInfo *)&i, kSkillID);
            if ( BYTE3(i) )
              v14 = (NiDX92DBufferData *)((char *)v14 - *(_DWORD *)(v6 + 4 * SBYTE3(i) + 503));
            element.m_pObject = v14;
            v13 = (double)(unsigned int)v14 / 1000.0;
            v12 = kSkillID;
          }
          fDlyTime = v13;
          v15 = fDlyTime;
          *(float *)(v11 + 16) = fDlyTime;
          v28 = fCurTime - fStartTime;
          *(float *)(v11 + 20) = v28;
          v16 = v15;
          IconWin::StartCoolTime(v12, fCurTime, v16, fStartTime);
          v17 = 0;
          i = 0;
          if ( ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal() )
          {
            do
            {
              v18 = CDataReader::GetRecord(
                      (CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4),
                      v17);
              if ( !v18 )
                break;
              if ( *(_WORD *)v18 != kSkillID
                && *(_DWORD *)((char *)v18 + 211) == *(_DWORD *)(v6 + 211)
                && *(_DWORD *)(v6 + 215) )
              {
                v19 = operator new(0x18u);
                if ( v19 )
                {
                  SkillUseRecord::SkillUseRecord((SkillUseRecord *)v19);
                  v21 = v20;
                }
                else
                {
                  v21 = 0;
                }
                v22 = fDlyTime;
                *(_WORD *)(v21 + 10) = *(_WORD *)v18;
                v23 = *(_DWORD *)((char *)v18 + 211);
                *(float *)(v21 + 16) = v22;
                v24 = v28;
                *(_DWORD *)(v21 + 12) = v23;
                *(float *)(v21 + 20) = v24;
                element.m_pObject = (NiDX92DBufferData *)v21;
                InterlockedIncrement((volatile LONG *)(v21 + 4));
                v30 = 1;
                NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
                  &Skill::m_kUseList,
                  &element);
                v30 = -1;
                if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) )
                  (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
                IconWin::StartCoolTime(*(_WORD *)v18, fCurTime, fDlyTime, fStartTime);
                v17 = i;
                v6 = pkInfo;
              }
              ++v17;
              i = v17;
            }
            while ( v17 < ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal() );
          }
        }
      }
    }
  }
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C89CC: using guessed type int (__thiscall *SkillUseRecord___vftable_)(void *p, char);
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A93D0) --------------------------------------------------------
void __cdecl Skill::InitSkill(PROTO_NC_CHAR_CLIENT_SKILL_CMD *pkProto)
{
  PROTO_NC_CHAR_CLIENT_SKILL_CMD *v1; // edi@1
  signed int v2; // ebx@3
  int v3; // esi@4
  unsigned __int8 v4; // al@5
  char v5; // dl@5
  char v6; // cl@5
  unsigned int v7; // eax@5
  unsigned __int16 v8; // dx@5
  float v9; // ST1C_4@8
  float fCoolTime; // [sp+18h] [bp-4h]@6

  v1 = pkProto;
  if ( pkProto->PartMark._bf0 & 1 )
    Skill::ClearLearnSkill();
  Skill::m_uiMaxSkillNum = v1->nMaxNum;
  Skill::ms_uiRestEmpowerPoint = v1->restempow;
  Skill::ms_uiAntiEmpowerPoint = 5;
  v2 = 0;
  if ( v1->skill.number > 0u )
  {
    v3 = (int)((char *)&v1[1].skill.chrregnum + 3);
    do
    {
      v4 = *(_BYTE *)(v3 - 1);
      LOBYTE(pkProto) = *(_BYTE *)(v3 - 1) & 0xF;
      v5 = *(_BYTE *)v3 & 0xF;
      v6 = *(_BYTE *)v3 >> 4;
      BYTE1(pkProto) = v4 >> 4;
      v7 = *(_DWORD *)(v3 + 1);
      BYTE2(pkProto) = v5;
      v8 = *(_WORD *)(v3 - 7);
      BYTE3(pkProto) = v6;
      Skill::LearnSkill(v8, (Skill::EmpowerInfo *)&pkProto, v7);
      if ( *(_DWORD *)(v3 - 5) )
      {
        fCoolTime = (double)Skill::GetEmpowerAppliedCoolTime(*(_WORD *)(v3 - 7))
                  - (double)*(unsigned int *)(v3 - 5) * 1000.0;
        if ( fCoolTime < 0.0 )
          fCoolTime = 0.0;
        v9 = fCoolTime / 1000.0;
        Skill::RecordSkillUse(*(_WORD *)(v3 - 7), Timer::ms_fCurTime, v9, 0.0);
      }
      ++v2;
      v3 += 12;
    }
    while ( v2 < v1->skill.number );
  }
  SkillIcon::RefreshSkillInfoAll();
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// B6775C: using guessed type int Skill__ms_uiRestEmpowerPoint;
// B67764: using guessed type int Skill__ms_uiAntiEmpowerPoint;
// B67778: using guessed type int Skill__m_uiMaxSkillNum;

//----- (006A94E0) --------------------------------------------------------
void __cdecl Skill::SetLastCoolTime(unsigned __int16 kSkillID, float fLastCoolTime)
{
  int v2; // esi@1
  unsigned __int16 *v3; // esi@2
  int v4; // ecx@5
  NiTListItem<NiPointer<NiDX92DBufferData> > *v5; // eax@8
  NiDX92DBufferData *v6; // ecx@9
  double v7; // st7@12
  float v8; // ST08_4@12
  NiPixelFormat *fDelay; // [sp+24h] [bp+Ch]@12
  float fDelaya; // [sp+24h] [bp+Ch]@12

  while ( 1 )
  {
    v2 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable
                                                             + 16))(
                            ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable,
                            kSkillID) )
    {
      if ( kSkillID <= *(_WORD *)(v2 + 200) )
      {
        v4 = *(_DWORD *)(v2 + 196);
        v3 = (unsigned __int16 *)(*(_DWORD *)(v4 + 4 * kSkillID) ? *(_DWORD *)(v4 + 4 * kSkillID) : 0);
      }
      else
      {
        v3 = 0;
      }
    }
    else
    {
      v3 = 0;
    }
    v5 = Skill::m_kUseList.baseclass_0.m_pkHead;
    if ( Skill::m_kUseList.baseclass_0.m_pkHead )
      break;
LABEL_11:
    Skill::RecordSkillUse(kSkillID, Timer::ms_fCurTime, 0.0, fLastCoolTime);
  }
  while ( 1 )
  {
    v6 = v5->m_element.m_pObject;
    v5 = v5->m_pkNext;
    if ( HIWORD(v6->baseclass_0.m_pkBuffer) == *v3 )
      break;
    if ( !v5 )
      goto LABEL_11;
  }
  *(float *)&fDelay = Timer::ms_fCurTime + fLastCoolTime - *(float *)&v6[1].baseclass_0.baseclass_0.vfptr;
  v7 = *(float *)&fDelay;
  v6->m_pkPixelFormat = fDelay;
  fDelaya = Timer::ms_fCurTime - *(float *)&v6[1].baseclass_0.baseclass_0.vfptr;
  v8 = v7;
  IconWin::StartCoolTime(*v3, Timer::ms_fCurTime, v8, fDelaya);
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A95C0) --------------------------------------------------------
void __thiscall SkillUseRecord::SkillUseRecord(SkillUseRecord *this)
{
  SkillUseRecord *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&SkillUseRecord::_vftable_;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C89CC: using guessed type int (__thiscall *SkillUseRecord___vftable_)(void *p, char);

//----- (006A95F0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> > *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_;
}
// 9C89AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_SkillUseRecord_____vftable_)(void *p, char);

//----- (006A9600) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>(NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq *>,SkillEmpowerRequest::EmpowerReq *> *this)
{
  this->vfptr = (NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq *>,SkillEmpowerRequest::EmpowerReq *>Vtbl *)&NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vftable_;
}
// 9C89BC: using guessed type int (__thiscall *NiTListBase_DFALL_SkillEmpowerRequest__EmpowerReq ___SkillEmpowerRequest__EmpowerReq _____vftable_)(void *p, char);

//----- (006A9610) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> > *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C89AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_SkillUseRecord_____vftable_)(void *p, char);

//----- (006A9640) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vector_deleting_destructor_(NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq *>,SkillEmpowerRequest::EmpowerReq *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq *>,SkillEmpowerRequest::EmpowerReq *>Vtbl *)&NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C89BC: using guessed type int (__thiscall *NiTListBase_DFALL_SkillEmpowerRequest__EmpowerReq ___SkillEmpowerRequest__EmpowerReq _____vftable_)(void *p, char);

//----- (006A9670) --------------------------------------------------------
unsigned int __cdecl ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006A9690) --------------------------------------------------------
void *__thiscall ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::_vector_deleting_destructor_(ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab> *this, unsigned int a2)
{
  ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab>Vtbl *)&ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C89FC: using guessed type int (__cdecl *ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A9710) --------------------------------------------------------
void *__thiscall IIDTableBase<PassiveSkillViewInfo_PasSkillViewInfoTab_unsigned_short>::_scalar_deleting_destructor_(PasSkillViewInfoTab *this, unsigned int a2)
{
  PasSkillViewInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab>Vtbl *)&IIDTableBase<PassiveSkillViewInfo_PasSkillViewInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab>Vtbl *)&ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C89FC: using guessed type int (__cdecl *ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8A0C: using guessed type int (__cdecl *IIDTableBase_PassiveSkillViewInfo_PasSkillViewInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A97A0) --------------------------------------------------------
void *__thiscall ITableBase<ActiveSkillInfo_ActSkillInfoTab>::_scalar_deleting_destructor_(ITableBase<ActiveSkillInfo,ActSkillInfoTab> *this, unsigned int a2)
{
  ITableBase<ActiveSkillInfo,ActSkillInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<ActiveSkillInfo,ActSkillInfoTab>Vtbl *)&ITableBase<ActiveSkillInfo_ActSkillInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8A24: using guessed type int (__cdecl *ITableBase_ActiveSkillInfo_ActSkillInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A9820) --------------------------------------------------------
void *__thiscall ITableBase<PassiveSkillInfo_PasSkillInfoTab>::_scalar_deleting_destructor_(ITableBase<PassiveSkillInfo,PasSkillInfoTab> *this, unsigned int a2)
{
  ITableBase<PassiveSkillInfo,PasSkillInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<PassiveSkillInfo,PasSkillInfoTab>Vtbl *)&ITableBase<PassiveSkillInfo_PasSkillInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8A4C: using guessed type int (__cdecl *ITableBase_PassiveSkillInfo_PasSkillInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A98A0) --------------------------------------------------------
void *__thiscall IIDTableBase<PassiveSkillInfo_PasSkillInfoTab_unsigned_short>::_vector_deleting_destructor_(PasSkillInfoTab *this, unsigned int a2)
{
  PasSkillInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillInfo,PasSkillInfoTab>Vtbl *)&IIDTableBase<PassiveSkillInfo_PasSkillInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillInfo,PasSkillInfoTab>Vtbl *)&ITableBase<PassiveSkillInfo_PasSkillInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8A4C: using guessed type int (__cdecl *ITableBase_PassiveSkillInfo_PasSkillInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8A5C: using guessed type int (__cdecl *IIDTableBase_PassiveSkillInfo_PasSkillInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A9930) --------------------------------------------------------
bool __thiscall IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::IsValidID(IIDTableBase<SubAbStateInfo,SubAbStateInfoTab,unsigned short> *this, unsigned __int16 ID)
{
  return ID != -1;
}

//----- (006A9950) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<SkillUseRecord> > *v3; // esi@1
  NiTListItem<NiPointer<SkillUseRecord> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C89AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_SkillUseRecord_____vftable_)(void *p, char);
// 9C89DC: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_SkillUseRecord_____vftable_)(void *p, char);

//----- (006A99E0) --------------------------------------------------------
void __thiscall NiTPointerList<NiPointer<SkillUseRecord>>::_NiTPointerList<NiPointer<SkillUseRecord>>(NiTPointerList<NiPointer<SkillUseRecord> > *this)
{
  NiTPointerList<NiPointer<SkillUseRecord> > *v1; // edi@1
  NiTListItem<NiPointer<SkillUseRecord> > *v2; // esi@1
  NiTListItem<NiPointer<SkillUseRecord> > *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> >Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> > *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> >Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_;
}
// 9C89AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_SkillUseRecord_____vftable_)(void *p, char);
// 9C89DC: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__NiPointer_SkillUseRecord_____vftable_)(void *p, char);

//----- (006A9A60) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_scalar_deleting_destructor_(NiTList<SkillEmpowerRequest::EmpowerReq *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<SkillEmpowerRequest::EmpowerReq *> *v3; // esi@1
  NiTListItem<SkillEmpowerRequest::EmpowerReq *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq *>,SkillEmpowerRequest::EmpowerReq *>Vtbl *)&NiTPointerListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<SkillEmpowerRequest::EmpowerReq__>_SkillEmpowerRequest::EmpowerReq__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C89BC: using guessed type int (__thiscall *NiTListBase_DFALL_SkillEmpowerRequest__EmpowerReq ___SkillEmpowerRequest__EmpowerReq _____vftable_)(void *p, char);
// 9C89EC: using guessed type int (__thiscall *NiTPointerListBase_DFALL_SkillEmpowerRequest__EmpowerReq ___SkillEmpowerRequest__EmpowerReq _____vftable_)(void *p, char);

//----- (006A9AF0) --------------------------------------------------------
void *__thiscall ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::_scalar_deleting_destructor_(ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab> *this, unsigned int a2)
{
  ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab> *v2; // esi@1

  v2 = this;
  this->vfptr = (ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab>Vtbl *)&ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&this->m_kDataReader);
  CDataReader::_CDataReader(&v2->m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8A74: using guessed type int (__cdecl *ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A9B70) --------------------------------------------------------
void *__thiscall ActSkillViewInfoTab::_scalar_deleting_destructor_(ActSkillViewInfoTab *this, unsigned int a2)
{
  ActSkillViewInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab>Vtbl *)&IIDTableBase<ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab>Vtbl *)&ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8A74: using guessed type int (__cdecl *ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8A84: using guessed type int (__cdecl *IIDTableBase_ActiveSkillViewInfo_ActSkillViewInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A9C00) --------------------------------------------------------
void *__thiscall PgTList<NiPointer<SkillUseRecord>>::_vector_deleting_destructor_(PgTList<NiPointer<SkillUseRecord> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<SkillUseRecord> > *v3; // esi@1
  NiTListItem<NiPointer<SkillUseRecord> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<SkillUseRecord> >Vtbl *)&PgTList<NiPointer<SkillUseRecord>>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_NiPointer<SkillUseRecord>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C89AC: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__NiPointer_SkillUseRecord_____vftable_)(void *p, char);
// 9C8AAC: using guessed type int (__thiscall *PgTList_NiPointer_SkillUseRecord_____vftable_)(void *p, char);

//----- (006A9C90) --------------------------------------------------------
void __thiscall ActSkillViewInfoTab::ActSkillViewInfoTab(ActSkillViewInfoTab *this)
{
  ActSkillViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab>Vtbl *)&ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab_::ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillViewInfo,ActSkillViewInfoTab>Vtbl *)&ActSkillViewInfoTab::_vftable_;
}
// 9C8A74: using guessed type int (__cdecl *ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8ABC: using guessed type int (__cdecl *ActSkillViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// B67788: using guessed type int _local static guard_;

//----- (006A9CE0) --------------------------------------------------------
void __thiscall PasSkillViewInfoTab::PasSkillViewInfoTab(PasSkillViewInfoTab *this)
{
  PasSkillViewInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab>Vtbl *)&ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab_::ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillViewInfo,PasSkillViewInfoTab>Vtbl *)&PasSkillViewInfoTab::_vftable_;
}
// 9C89FC: using guessed type int (__cdecl *ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8AD4: using guessed type int (__cdecl *PasSkillViewInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// B6777C: using guessed type int _local static guard_;

//----- (006A9D30) --------------------------------------------------------
unsigned __int16 __thiscall PasSkillViewInfoTab::GetID(BRAccUpgradeInfoTab *this, BRAccUpgradeInfo *pkRecord)
{
  return pkRecord->ID;
}

//----- (006A9D40) --------------------------------------------------------
unsigned __int16 __thiscall PasSkillViewInfoTab::GetInvalidID(PasSkillViewInfoTab *this)
{
  return -1;
}

//----- (006A9D50) --------------------------------------------------------
void __thiscall ActSkillInfoTab::ActSkillInfoTab(ActSkillInfoTab *this)
{
  ActSkillInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillInfo,ActSkillInfoTab>Vtbl *)&ITableBase<ActiveSkillInfo_ActSkillInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_ActiveSkillInfo_ActSkillInfoTab_::ITableBase_ActiveSkillInfo_ActSkillInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillInfo,ActSkillInfoTab>Vtbl *)&ActSkillInfoTab::_vftable_;
}
// 9C8A24: using guessed type int (__cdecl *ITableBase_ActiveSkillInfo_ActSkillInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8AF0: using guessed type int (__cdecl *ActSkillInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// B67780: using guessed type int _local static guard_;

//----- (006A9DA0) --------------------------------------------------------
void *__thiscall IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::_scalar_deleting_destructor_(ActSkillInfoTab *this, unsigned int a2)
{
  ActSkillInfoTab *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->baseclass_0.m_pkRecordIDMap;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillInfo,ActSkillInfoTab>Vtbl *)&IIDTableBase<ActiveSkillInfo_ActSkillInfoTab_unsigned_short>::_vftable_;
  operator delete__(v3);
  v2->baseclass_0.baseclass_0.vfptr = (ITableBase<ActiveSkillInfo,ActSkillInfoTab>Vtbl *)&ITableBase<ActiveSkillInfo_ActSkillInfoTab>::_vftable_;
  CDataReader::ClearBF(&v2->baseclass_0.baseclass_0.m_kDataReader);
  CDataReader::_CDataReader(&v2->baseclass_0.baseclass_0.m_kDataReader);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8A24: using guessed type int (__cdecl *ITableBase_ActiveSkillInfo_ActSkillInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8A34: using guessed type int (__cdecl *IIDTableBase_ActiveSkillInfo_ActSkillInfoTab_unsigned short____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);

//----- (006A9E30) --------------------------------------------------------
void __thiscall PasSkillInfoTab::PasSkillInfoTab(PasSkillInfoTab *this)
{
  PasSkillInfoTab *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillInfo,PasSkillInfoTab>Vtbl *)&ITableBase<PassiveSkillInfo_PasSkillInfoTab>::_vftable_;
  CDataReader::CDataReader(&this->baseclass_0.baseclass_0.m_kDataReader);
  if ( !(_local_static_guard_ & 1) )
  {
    _local_static_guard_ |= 1u;
    atexit(ITableBase_PassiveSkillInfo_PasSkillInfoTab_::ITableBase_PassiveSkillInfo_PasSkillInfoTab__::_2_::_dynamic_atexit_destructor_for____instance____);
  }
  v1->baseclass_0.baseclass_0.m_acFilename[0] = 0;
  v1->baseclass_0.m_pkRecordIDMap = 0;
  v1->baseclass_0.m_tMostLargeID = 0;
  v1->baseclass_0.baseclass_0.vfptr = (ITableBase<PassiveSkillInfo,PasSkillInfoTab>Vtbl *)&PasSkillInfoTab::_vftable_;
}
// 9C8A4C: using guessed type int (__cdecl *ITableBase_PassiveSkillInfo_PasSkillInfoTab____vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// 9C8B08: using guessed type int (__cdecl *PasSkillInfoTab___vftable_)(int, int tmpPath, int pkKeys, int uiNumKeys);
// B67784: using guessed type int _local static guard_;

//----- (006A9E80) --------------------------------------------------------
bool __cdecl ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable;
  if ( !ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      ActSkillViewInfoTab::ActSkillViewInfoTab((ActSkillViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 27613 )
  {
    v5 = acFn;
    v6 = ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ActiveSkillViewInfo_ActSkillViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98768: using guessed type int ITableBase_ActiveSkillViewInfo_ActSkillViewInfoTab___ms_pkTable;

//----- (006A9F60) --------------------------------------------------------
bool __cdecl ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable;
  if ( !ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      PasSkillViewInfoTab::PasSkillViewInfoTab((PasSkillViewInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 2384 )
  {
    v5 = acFn;
    v6 = ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<PassiveSkillViewInfo_PasSkillViewInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98A38: using guessed type int ITableBase_PassiveSkillViewInfo_PasSkillViewInfoTab___ms_pkTable;

//----- (006AA040) --------------------------------------------------------
bool __cdecl ITableBase<ActiveSkillInfo_ActSkillInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable;
  if ( !ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      ActSkillInfoTab::ActSkillInfoTab((ActSkillInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 86355 )
  {
    v5 = acFn;
    v6 = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;

//----- (006AA120) --------------------------------------------------------
bool __cdecl ITableBase<PassiveSkillInfo_PasSkillInfoTab>::Load(char *acFn, bool bErrorWhenOpenFailed)
{
  int v2; // eax@1
  void *v3; // eax@2
  int v4; // eax@7
  char *v5; // ecx@9
  int v6; // edx@9
  char v7; // al@10
  bool result; // al@11

  v2 = ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable;
  if ( !ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable )
  {
    v3 = operator new(0xCCu);
    if ( v3 )
      PasSkillInfoTab::PasSkillInfoTab((PasSkillInfoTab *)v2);
    else
      v2 = 0;
    ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable = v2;
  }
  CDataReader::ClearBF((CDataReader *)(v2 + 4));
  if ( CDataReader::Read((CDataReader *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4), acFn)
    && (v4 = *(_DWORD *)(ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 56)) != 0
    && *(_DWORD *)v4 == 8436 )
  {
    v5 = acFn;
    v6 = ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 68;
    do
    {
      v7 = *v5;
      *(_BYTE *)v6++ = *v5++;
    }
    while ( v7 );
    result = (*(int (**)(void))(*(_DWORD *)ITableBase<PassiveSkillInfo_PasSkillInfoTab>::ms_pkTable + 4))() != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A98774: using guessed type int ITableBase_PassiveSkillInfo_PasSkillInfoTab___ms_pkTable;

//----- (006AA200) --------------------------------------------------------
PartyMemberInfo *__thiscall Party::GetMemberInfo(Party *this, unsigned int uiIndex)
{
  PartyMemberInfo *result; // eax@2

  if ( uiIndex < this->m_uiTotalMember )
    result = &this->m_akMemberInfo[uiIndex];
  else
    result = 0;
  return result;
}

//----- (006AA220) --------------------------------------------------------
void __thiscall Party::ClearMemberInfo(Party *this)
{
  this->m_bIsMePartyMaster = 0;
  this->m_uiTotalMember = 0;
}

//----- (006AA230) --------------------------------------------------------
int __thiscall Party::GetBelongType(Party *this)
{
  return this->m_iBelongType;
}

//----- (006AA240) --------------------------------------------------------
void __thiscall Party::SetBelongType(Party *this, int iType)
{
  this->m_iBelongType = iType;
}

//----- (006AA250) --------------------------------------------------------
void __thiscall Party::SetLootType(Party *this, char nItemGrade, char nItemLooting)
{
  if ( (unsigned __int8)nItemLooting < 4u )
  {
    if ( (unsigned __int8)nItemGrade < 4u )
    {
      this->m_eLootType = (unsigned __int8)nItemLooting;
      this->m_eItemType = (unsigned __int8)nItemGrade;
    }
  }
}

//----- (006AA280) --------------------------------------------------------
void __thiscall Party::_Party(Party *this)
{
  this->vfptr = (PartyVtbl *)&Party::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_akMemberInfo,
    0x44u,
    5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}
// 9C8B24: using guessed type int (__thiscall *Party___vftable_)(void *p, char);

//----- (006AA2A0) --------------------------------------------------------
void __thiscall Party::SetJoinProposeData(Party *this, PROTO_NC_PARTY_JOINPROPOSE_REQ *p)
{
  this->m_bDuringJoinPropose = 1;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[0] = *(_QWORD *)&p->mastername.n5_name[0];
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[8] = *(_QWORD *)&p->mastername.n5_name[8];
  *(_DWORD *)&this->m_kJoinProposeCharID.n5_name[16] = *(_DWORD *)&p->mastername.n5_name[16];
  this->m_fJoinProposeStartTime = Timer::ms_fCurTime;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006AA2E0) --------------------------------------------------------
void __thiscall Party::ClearJoinProposeData(Party *this)
{
  this->m_bDuringJoinPropose = 0;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kJoinProposeCharID.n5_name[0] = 0;
  strncpy(this->m_kJoinProposeCharID.n5_name, byte_9C8B1E, 0x14u);
}

//----- (006AA310) --------------------------------------------------------
PartyMemberInfo *__thiscall Party::GetMemberInfo(Party *this, Name5 kCharID)
{
  unsigned int v2; // esi@1
  unsigned int v3; // edx@1
  char *v4; // eax@2
  PartyMemberInfo *result; // eax@7

  v2 = this->m_uiTotalMember;
  v3 = 0;
  if ( v2 )
  {
    v4 = &this->m_akMemberInfo[0].m_kCharID.n5_name[8];
    while ( __PAIR__(*((_DWORD *)v4 - 1), *((_DWORD *)v4 - 2)) != *(_QWORD *)&kCharID
         || *(_QWORD *)v4 != *(_QWORD *)&kCharID.n5_name[8]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&kCharID.n5_name[16] )
    {
      ++v3;
      v4 += 68;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = &this->m_akMemberInfo[v3];
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}

//----- (006AA370) --------------------------------------------------------
void __thiscall Party::SetMemberList(Party *this, PROTO_NC_PARTY_MEMBER_LIST_CMD *p)
{
  Party *v2; // esi@1
  PROTO_NC_PARTY_MEMBER_LIST_CMD *v3; // edi@1
  Name5 *v4; // eax@1
  int v5; // ecx@4
  int v6; // edx@4
  char v7; // al@10
  unsigned int v8; // eax@12
  Name5 *kMainCharID; // [sp+Ch] [bp-4h]@1
  unsigned int i; // [sp+18h] [bp+8h]@3

  v2 = this;
  v3 = p;
  this->m_uiTotalMember = 0;
  this->m_bIsMePartyMaster = 0;
  this->m_uiTotalMember = p->membercount;
  v4 = User::GetMainCharID(&g_kUser);
  kMainCharID = v4;
  v2->m_bIsMePartyMaster = 0;
  if ( v2->m_uiTotalMember > 0 )
  {
    *(_DWORD *)&v2->m_kPartyMasterID.n5_name[0] = *(_DWORD *)&p[1].membercount;
    *(_DWORD *)&v2->m_kPartyMasterID.n5_name[4] = *(_DWORD *)&p[5].membercount;
    *(_DWORD *)&v2->m_kPartyMasterID.n5_name[8] = *(_DWORD *)&p[9].membercount;
    *(_DWORD *)&v2->m_kPartyMasterID.n5_name[12] = *(_DWORD *)&p[13].membercount;
    *(_DWORD *)&v2->m_kPartyMasterID.n5_name[16] = *(_DWORD *)&p[17].membercount;
  }
  i = 0;
  if ( v2->m_uiTotalMember > 0 )
  {
    v5 = (int)&v2->m_akMemberInfo[0].m_kCharID.n5_name[8];
    v6 = (int)&v3[9];
    do
    {
      if ( *(_DWORD *)&v4->n5_name[0] != *(_DWORD *)(v6 - 8)
        || *(_DWORD *)&v4->n5_name[4] != *(_DWORD *)(v6 - 4)
        || *(_DWORD *)&v4->n5_name[8] != *(_DWORD *)v6
        || *(_DWORD *)&v4->n5_name[12] != *(_DWORD *)(v6 + 4)
        || *(_DWORD *)&v4->n5_name[16] != *(_DWORD *)(v6 + 8) )
      {
        *(_DWORD *)(v5 - 8) = *(_DWORD *)(v6 - 8);
        *(_DWORD *)(v5 - 4) = *(_DWORD *)(v6 - 4);
        *(_DWORD *)v5 = *(_DWORD *)v6;
        *(_DWORD *)(v5 + 4) = *(_DWORD *)(v6 + 4);
        *(_DWORD *)(v5 + 8) = *(_DWORD *)(v6 + 8);
        *(_BYTE *)(v5 + 12) = *(_BYTE *)(v6 + 12);
        *(_DWORD *)(v5 + 16) = 0;
        *(_DWORD *)(v5 + 20) = 0;
        *(_DWORD *)(v5 + 24) = 0;
        *(_DWORD *)(v5 + 28) = 0;
        *(_DWORD *)(v5 + 32) = 0;
        v7 = *(_BYTE *)(v6 + 13);
        *(float *)(v5 + 48) = 0.0;
        *(_BYTE *)(v5 + 44) = v7;
        *(float *)(v5 + 52) = 0.0;
        v4 = kMainCharID;
        *(_BYTE *)(v5 + 45) = 0;
        *(_BYTE *)(v5 + 56) = 0;
        *(_DWORD *)(v5 + 36) = 0;
        *(_DWORD *)(v5 + 40) = 0;
        v5 += 68;
      }
      v6 += 22;
      ++i;
    }
    while ( i < v2->m_uiTotalMember );
  }
  v8 = v2->m_uiTotalMember;
  if ( v8 > 0 )
    v2->m_uiTotalMember = v8 - 1;
}

//----- (006AA480) --------------------------------------------------------
PartyMemberInfo *__thiscall Party::AddMember(Party *this, PROTO_NC_PARTY_JOIN_ACK *p)
{
  Party *v2; // esi@1
  PartyMemberInfo *result; // eax@2
  Name5 *v4; // eax@3
  Name5 *v5; // eax@10
  int v6; // ecx@11

  v2 = this;
  if ( this->m_uiTotalMember < 4 )
  {
    v4 = User::GetMainCharID(&g_kUser);
    if ( *(_DWORD *)&v4->n5_name[0] != *(_DWORD *)&p->memberid.n5_name[0]
      || *(_DWORD *)&v4->n5_name[4] != *(_DWORD *)&p->memberid.n5_name[4]
      || *(_DWORD *)&v4->n5_name[8] != *(_DWORD *)&p->memberid.n5_name[8]
      || *(_DWORD *)&v4->n5_name[12] != *(_DWORD *)&p->memberid.n5_name[12]
      || *(_DWORD *)&v4->n5_name[16] != *(_DWORD *)&p->memberid.n5_name[16] )
    {
      if ( !v2->m_uiTotalMember )
      {
        v2->m_bIsMePartyMaster = 1;
        v5 = User::GetMainCharID(&g_kUser);
        *(_DWORD *)&v2->m_kPartyMasterID.n5_name[0] = *(_DWORD *)&v5->n5_name[0];
        *(_DWORD *)&v2->m_kPartyMasterID.n5_name[4] = *(_DWORD *)&v5->n5_name[4];
        *(_DWORD *)&v2->m_kPartyMasterID.n5_name[8] = *(_DWORD *)&v5->n5_name[8];
        *(_DWORD *)&v2->m_kPartyMasterID.n5_name[12] = *(_DWORD *)&v5->n5_name[12];
        *(_DWORD *)&v2->m_kPartyMasterID.n5_name[16] = *(_DWORD *)&v5->n5_name[16];
      }
      v6 = 17 * v2->m_uiTotalMember;
      *(_DWORD *)&v2->m_akMemberInfo[v2->m_uiTotalMember].m_kCharID.n5_name[0] = *(_DWORD *)&p->memberid.n5_name[0];
      *(_QWORD *)&v2->m_akMemberInfo[4 * v6 / 0x44u].m_kCharID.n5_name[4] = *(_QWORD *)&p->memberid.n5_name[4];
      *(_QWORD *)&v2->m_akMemberInfo[4 * v6 / 0x44u].m_kCharID.n5_name[12] = *(_QWORD *)&p->memberid.n5_name[12];
      v2->m_akMemberInfo[v2->m_uiTotalMember].m_ucStatus = 1;
      v2->m_akMemberInfo[v2->m_uiTotalMember].m_fX = 0.0;
      v2->m_akMemberInfo[v2->m_uiTotalMember].m_fY = 0.0;
      v2->m_akMemberInfo[v2->m_uiTotalMember++].m_byChrClass = p->charclass;
      result = (PartyMemberInfo *)&v2->m_kPartyMasterID.n5_name[68 * v2->m_uiTotalMember + 16];
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006AA590) --------------------------------------------------------
void __thiscall Party::MemberLogout(Party *this, PROTO_NC_PARTY_LOGOUTINFO_CMD *p)
{
  _BYTE v2[20]; // ST00_20@1
  PartyMemberInfo *v3; // eax@1

  *(_DWORD *)v2 = *(_DWORD *)&p->memberid.n5_name[0];
  *(_QWORD *)&v2[4] = *(_QWORD *)&p->memberid.n5_name[4];
  *(_QWORD *)&v2[12] = *(_QWORD *)&p->memberid.n5_name[12];
  v3 = Party::GetMemberInfo(this, *(Name5 *)v2);
  if ( v3 )
    v3->m_ucStatus = 0;
}

//----- (006AA5D0) --------------------------------------------------------
void __thiscall Party::MemberLogin(Party *this, PROTO_NC_PARTY_LOGININFO_CMD *p)
{
  _BYTE v2[20]; // ST00_20@1
  PartyMemberInfo *v3; // eax@1

  *(_DWORD *)v2 = *(_DWORD *)&p->memberid.n5_name[0];
  *(_QWORD *)&v2[4] = *(_QWORD *)&p->memberid.n5_name[4];
  *(_QWORD *)&v2[12] = *(_QWORD *)&p->memberid.n5_name[12];
  v3 = Party::GetMemberInfo(this, *(Name5 *)v2);
  if ( v3 )
    v3->m_ucStatus = 1;
}

//----- (006AA610) --------------------------------------------------------
void __thiscall Party::ChangePartyMaster(Party *this, Name5 kCharID)
{
  Party *v2; // esi@1
  Name5 *v3; // eax@1

  v2 = this;
  v3 = User::GetMainCharID(&g_kUser);
  v2->m_bIsMePartyMaster = *(_QWORD *)&kCharID == *(_QWORD *)&v3->n5_name[0]
                        && *(_QWORD *)&kCharID.n5_name[8] == *(_QWORD *)&v3->n5_name[8]
                        && *(_DWORD *)&kCharID.n5_name[16] == *(_DWORD *)&v3->n5_name[16];
  *(_DWORD *)&v2->m_kPartyMasterID.n5_name[0] = *(_DWORD *)&kCharID;
  *(_DWORD *)&v2->m_kPartyMasterID.n5_name[12] = *(_DWORD *)&kCharID.n5_name[12];
  *(_QWORD *)&v2->m_kPartyMasterID.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
  *(_DWORD *)&v2->m_kPartyMasterID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
}

//----- (006AA680) --------------------------------------------------------
Name5 *__thiscall Party::GetPartyMasterID(Party *this, Name5 *result)
{
  Name5 *v2; // eax@1

  v2 = result;
  *(_QWORD *)&result->n5_name[0] = *(_QWORD *)&this->m_kPartyMasterID.n5_name[0];
  *(_DWORD *)&result->n5_name[8] = *(_DWORD *)&this->m_kPartyMasterID.n5_name[8];
  *(_QWORD *)&result->n5_name[12] = *(_QWORD *)&this->m_kPartyMasterID.n5_name[12];
  return v2;
}

//----- (006AA6B0) --------------------------------------------------------
bool __thiscall Party::IsMePartyMaster(Party *this)
{
  Party *v1; // esi@1
  Name5 *v2; // eax@1
  int v3; // eax@6

  v1 = this;
  v2 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)&v1->m_kPartyMasterID.n5_name[0] != *(_DWORD *)&v2->n5_name[0]
    || *(_DWORD *)&v1->m_kPartyMasterID.n5_name[4] != *(_DWORD *)&v2->n5_name[4]
    || *(_DWORD *)&v1->m_kPartyMasterID.n5_name[8] != *(_DWORD *)&v2->n5_name[8]
    || *(_DWORD *)&v1->m_kPartyMasterID.n5_name[12] != *(_DWORD *)&v2->n5_name[12]
    || *(_DWORD *)&v1->m_kPartyMasterID.n5_name[16] != *(_DWORD *)&v2->n5_name[16] )
    v3 = 0;
  else
    LOBYTE(v3) = 1;
  return v3;
}

//----- (006AA700) --------------------------------------------------------
Name5 *__thiscall Party::GetLooterID(Party *this, Name5 *result)
{
  Name5 *v2; // eax@1

  v2 = result;
  *(_QWORD *)&result->n5_name[0] = *(_QWORD *)&this->m_kLooterID.n5_name[0];
  *(_DWORD *)&result->n5_name[8] = *(_DWORD *)&this->m_kLooterID.n5_name[8];
  *(_QWORD *)&result->n5_name[12] = *(_QWORD *)&this->m_kLooterID.n5_name[12];
  return v2;
}

//----- (006AA730) --------------------------------------------------------
void __thiscall Party::SetLooterID(Party *this, Name5 kLooterID)
{
  *(_QWORD *)&this->m_kLooterID.n5_name[0] = *(_QWORD *)&kLooterID;
  *(_QWORD *)&this->m_kLooterID.n5_name[8] = *(_QWORD *)&kLooterID.n5_name[8];
  *(_DWORD *)&this->m_kLooterID.n5_name[16] = *(_DWORD *)&kLooterID.n5_name[16];
}

//----- (006AA760) --------------------------------------------------------
void __thiscall Party::ChangeUserName(Party *this, Name5 *OldName, Name5 *NewName)
{
  Party *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1
  PartyMemberInfo *v5; // eax@1
  Name5 *v6; // eax@3
  int v7; // eax@8
  int v8; // ecx@8
  int v9; // edx@8
  int v10; // eax@8
  int v11; // ecx@8
  Name5 result; // [sp+20h] [bp-14h]@3

  v3 = this;
  *(_DWORD *)v4 = *(_DWORD *)&OldName->n5_name[0];
  *(_QWORD *)&v4[4] = *(_QWORD *)&OldName->n5_name[4];
  *(_QWORD *)&v4[12] = *(_QWORD *)&OldName->n5_name[12];
  v5 = Party::GetMemberInfo(this, *(Name5 *)v4);
  if ( v5 )
  {
    *(_QWORD *)&v5->m_kCharID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v5->m_kCharID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v5->m_kCharID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
  }
  v6 = Party::GetLooterID(v3, &result);
  if ( *(_DWORD *)&v6->n5_name[0] == *(_DWORD *)&OldName->n5_name[0]
    && *(_DWORD *)&v6->n5_name[4] == *(_DWORD *)&OldName->n5_name[4]
    && *(_DWORD *)&v6->n5_name[8] == *(_DWORD *)&OldName->n5_name[8]
    && *(_DWORD *)&v6->n5_name[12] == *(_DWORD *)&OldName->n5_name[12]
    && *(_DWORD *)&v6->n5_name[16] == *(_DWORD *)&OldName->n5_name[16] )
  {
    v7 = *(_DWORD *)&NewName->n5_name[0];
    v8 = *(_DWORD *)&NewName->n5_name[4];
    *(_QWORD *)&result.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    v9 = *(_DWORD *)&NewName->n5_name[16];
    *(_DWORD *)&v3->m_kLooterID.n5_name[0] = v7;
    v10 = *(_DWORD *)&result.n5_name[8];
    *(_DWORD *)&v3->m_kLooterID.n5_name[4] = v8;
    v11 = *(_DWORD *)&result.n5_name[12];
    *(_DWORD *)&v3->m_kLooterID.n5_name[8] = v10;
    *(_DWORD *)&v3->m_kLooterID.n5_name[12] = v11;
    *(_DWORD *)&v3->m_kLooterID.n5_name[16] = v9;
  }
  if ( *(_DWORD *)&v3->m_kPartyMasterID.n5_name[0] == *(_DWORD *)&OldName->n5_name[0]
    && *(_DWORD *)&v3->m_kPartyMasterID.n5_name[4] == *(_DWORD *)&OldName->n5_name[4]
    && *(_DWORD *)&v3->m_kPartyMasterID.n5_name[8] == *(_DWORD *)&OldName->n5_name[8]
    && *(_DWORD *)&v3->m_kPartyMasterID.n5_name[12] == *(_DWORD *)&OldName->n5_name[12]
    && *(_DWORD *)&v3->m_kPartyMasterID.n5_name[16] == *(_DWORD *)&OldName->n5_name[16] )
  {
    *(_QWORD *)&v3->m_kPartyMasterID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v3->m_kPartyMasterID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v3->m_kPartyMasterID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
  }
  if ( *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[0] == *(_DWORD *)&OldName->n5_name[0]
    && *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[4] == *(_DWORD *)&OldName->n5_name[4]
    && *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[8] == *(_DWORD *)&OldName->n5_name[8]
    && *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[12] == *(_DWORD *)&OldName->n5_name[12] )
  {
    if ( *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[16] == *(_DWORD *)&OldName->n5_name[16] )
    {
      *(_QWORD *)&v3->m_kJoinProposeCharID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
      *(_QWORD *)&v3->m_kJoinProposeCharID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
      *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
    }
  }
}

//----- (006AA8B0) --------------------------------------------------------
void __thiscall Party::Party(Party *this)
{
  Party *v1; // esi@1

  v1 = this;
  this->vfptr = (PartyVtbl *)&Party::_vftable_;
  *(_QWORD *)&this->m_kPartyMasterID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kPartyMasterID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kPartyMasterID.n5_name[0] = 0;
  *(_QWORD *)&this->m_kLooterID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kLooterID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kLooterID.n5_name[0] = 0;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kJoinProposeCharID.n5_name[0] = 0;
  _eh_vector_constructor_iterator_(
    this->m_akMemberInfo,
    0x44u,
    5,
    (void (__thiscall *)(void *))Name5::Name5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_fJoinProposeStartTime = 0.0;
  v1->m_bIsMePartyMaster = 1;
  v1->m_iBelongType = 1;
  v1->m_bDuringJoinPropose = 0;
  v1->m_eLootingType = 0;
  v1->m_eLootType = 0;
  v1->m_eItemType = 0;
}
// 9C8B24: using guessed type int (__thiscall *Party___vftable_)(void *p, char);

//----- (006AA930) --------------------------------------------------------
void __thiscall Party::Clear(Party *this)
{
  Party *v1; // esi@1

  v1 = this;
  this->m_bIsMePartyMaster = 0;
  this->m_uiTotalMember = 0;
  this->m_bDuringJoinPropose = 0;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kJoinProposeCharID.n5_name[0] = 0;
  strncpy(this->m_kJoinProposeCharID.n5_name, byte_9C8B1E, 0x14u);
  v1->m_iBelongType = 1;
  v1->m_eLootType = 0;
  v1->m_eItemType = 0;
  *(_DWORD *)&v1->m_kLooterID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kLooterID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kLooterID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kLooterID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kLooterID.n5_name[0] = 0;
  strncpy(v1->m_kLooterID.n5_name, &byte_9C8B1C, 0x14u);
  *(_DWORD *)&v1->m_kPartyMasterID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kPartyMasterID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kPartyMasterID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kPartyMasterID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kPartyMasterID.n5_name[0] = 0;
  strncpy(v1->m_kPartyMasterID.n5_name, &byte_9C8B1D, 0x14u);
}

//----- (006AA9B0) --------------------------------------------------------
void __thiscall Party::DeleteMember(Party *this, Name5 kDelCharID)
{
  Party *v2; // esi@1
  Name5 *v3; // eax@1
  unsigned int v4; // edx@4
  unsigned int v5; // ecx@4
  int v6; // eax@5
  int v7; // eax@12
  double v8; // st7@13

  v2 = this;
  v3 = User::GetMainCharID(&g_kUser);
  if ( *(_QWORD *)&v3->n5_name[0] != *(_QWORD *)&kDelCharID
    || *(_QWORD *)&v3->n5_name[8] != *(_QWORD *)&kDelCharID.n5_name[8]
    || *(_DWORD *)&v3->n5_name[16] != *(_DWORD *)&kDelCharID.n5_name[16] )
  {
    v4 = v2->m_uiTotalMember;
    v5 = 0;
    if ( v4 )
    {
      v6 = (int)&v2->m_akMemberInfo[0].m_kCharID.n5_name[8];
      while ( __PAIR__(*(_DWORD *)(v6 - 4), *(_DWORD *)(v6 - 8)) != *(_QWORD *)&kDelCharID
           || *(_QWORD *)v6 != *(_QWORD *)&kDelCharID.n5_name[8]
           || *(_DWORD *)(v6 + 8) != *(_DWORD *)&kDelCharID.n5_name[16] )
      {
        ++v5;
        v6 += 68;
        if ( v5 >= v4 )
          return;
      }
      if ( v5 < v4 - 1 )
      {
        v7 = (int)&v2->m_akMemberInfo[v5].m_kCharID.n5_name[4];
        do
        {
          *(_DWORD *)(v7 - 4) = *(_DWORD *)(v7 + 64);
          *(_DWORD *)v7 = *(_DWORD *)(v7 + 68);
          *(_DWORD *)(v7 + 4) = *(_DWORD *)(v7 + 72);
          *(_DWORD *)(v7 + 8) = *(_DWORD *)(v7 + 76);
          *(_DWORD *)(v7 + 12) = *(_DWORD *)(v7 + 80);
          *(_BYTE *)(v7 + 16) = *(_BYTE *)(v7 + 84);
          *(_DWORD *)(v7 + 20) = *(_DWORD *)(v7 + 88);
          *(_DWORD *)(v7 + 24) = *(_DWORD *)(v7 + 92);
          *(_DWORD *)(v7 + 28) = *(_DWORD *)(v7 + 96);
          *(_DWORD *)(v7 + 32) = *(_DWORD *)(v7 + 100);
          *(_DWORD *)(v7 + 36) = *(_DWORD *)(v7 + 104);
          *(_DWORD *)(v7 + 40) = *(_DWORD *)(v7 + 108);
          *(_DWORD *)(v7 + 44) = *(_DWORD *)(v7 + 112);
          *(_BYTE *)(v7 + 48) = *(_BYTE *)(v7 + 116);
          *(_BYTE *)(v7 + 49) = *(_BYTE *)(v7 + 117);
          ++v5;
          v8 = *(float *)(v7 + 120);
          v7 += 68;
          *(float *)(v7 - 16) = v8;
          *(float *)(v7 - 12) = *(float *)(v7 + 56);
          *(_BYTE *)(v7 - 8) = *(_BYTE *)(v7 + 60);
        }
        while ( v5 < v2->m_uiTotalMember - 1 );
      }
      --v2->m_uiTotalMember;
    }
  }
}

//----- (006AAAD0) --------------------------------------------------------
void __thiscall Name5::Name5(PROTO_CHAT_RESTRICT_INFO *this)
{
  *(_QWORD *)&this->sCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->sCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->sCharID.n5_name[0] = 0;
}

//----- (006AAAF0) --------------------------------------------------------
void *__thiscall Party::_vector_deleting_destructor_(Party *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (PartyVtbl *)&Party::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_akMemberInfo,
    0x44u,
    5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C8B24: using guessed type int (__thiscall *Party___vftable_)(void *p, char);

//----- (006AAB30) --------------------------------------------------------
unsigned int __cdecl ActSkillInfoTab::CheckCRC()
{
  int v0; // edi@1
  unsigned int v1; // esi@1
  unsigned int result; // eax@1
  void *v3; // ebx@2
  void *v4; // ST10_4@2
  void *v5; // ST18_4@2
  void *v6; // ST20_4@2
  void *v7; // STAC_4@2
  void *v8; // ST28_4@2
  void *v9; // ST30_4@2
  void *v10; // ST24_4@2
  void *v11; // STB4_4@2
  void *v12; // ST38_4@2
  void *v13; // ST40_4@2
  void *v14; // ST48_4@2
  void *v15; // ST50_4@2
  void *v16; // ST58_4@2
  void *v17; // ST60_4@2
  void *v18; // ST68_4@2
  void *v19; // ST70_4@2
  void *v20; // ST64_4@2
  void *v21; // STBC_4@2
  void *v22; // ST3C_4@2
  void *v23; // STC4_4@2
  void *v24; // ST78_4@2
  void *v25; // ST80_4@2
  void *v26; // ST88_4@2
  void *v27; // ST90_4@2
  void *v28; // ST98_4@2
  void *v29; // STA0_4@2
  void *v30; // STA8_4@2
  void *v31; // STB0_4@2
  void *v32; // STB8_4@2
  void *v33; // STC0_4@2
  void *v34; // STC8_4@2
  void *v35; // STD0_4@2
  void *v36; // ST1C_4@2
  void *v37; // ST74_4@2
  void *v38; // ST44_4@2
  void *v39; // ST7C_4@2
  void *v40; // ST2C_4@2
  void *v41; // ST84_4@2
  void *v42; // ST4C_4@2
  void *v43; // ST8C_4@2
  void *v44; // ST14_4@2
  void *v45; // ST94_4@2
  void *v46; // ST54_4@2
  void *v47; // ST9C_4@2
  void *v48; // ST34_4@2
  void *v49; // STA4_4@2
  void *v50; // ST5C_4@2
  void *v51; // ST6C_4@2
  void *v52; // STCC_4@2
  int v53; // eax@2

  v0 = 0;
  v1 = 0;
  result = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal();
  if ( result )
  {
    do
    {
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v11 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v12 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v13 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v15 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v17 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v18 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v19 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v20 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v21 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v22 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v23 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v24 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v25 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v26 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v27 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v28 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v29 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v30 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v31 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v32 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v33 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v34 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v35 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v36 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v37 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v38 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v39 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v40 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v41 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v42 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v43 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v44 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v45 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v46 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v47 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v48 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v49 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v50 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v51 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v52 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v1);
      v53 = *((_DWORD *)v18 + 46)
          + *((_DWORD *)v19 + 47)
          + *(_DWORD *)((char *)v24 + 199)
          + *(_DWORD *)((char *)v25 + 203)
          + *(_DWORD *)((char *)v26 + 207)
          + *(_DWORD *)((char *)v27 + 211)
          + *(_DWORD *)((char *)v28 + 215)
          + *(_DWORD *)((char *)v29 + 219)
          + *(_DWORD *)((char *)v30 + 223)
          + *(_DWORD *)((char *)v31 + 227)
          + *(_DWORD *)((char *)v32 + 231)
          + *(_DWORD *)((char *)v33 + 235)
          + *(_DWORD *)((char *)v34 + 239)
          + *(_DWORD *)((char *)v35 + 243)
          + *(_DWORD *)((char *)v36 + 247)
          + *(_DWORD *)((char *)v37 + 251)
          + *(_DWORD *)((char *)v38 + 255)
          + *(_DWORD *)((char *)v39 + 259)
          + *(_DWORD *)((char *)v40 + 263)
          + *(_DWORD *)((char *)v41 + 267)
          + *(_DWORD *)((char *)v42 + 303)
          + *(_DWORD *)((char *)v43 + 307)
          + *(_DWORD *)((char *)v44 + 343)
          + *(_DWORD *)((char *)v45 + 347)
          + *(_DWORD *)((char *)v46 + 383)
          + *(_DWORD *)((char *)v47 + 387)
          + *(_DWORD *)((char *)v48 + 423)
          + *(_DWORD *)((char *)v49 + 427)
          + *(_DWORD *)((char *)v50 + 527)
          + *((_WORD *)v7 + 73)
          + *((_WORD *)v10 + 78)
          + *((_WORD *)v11 + 79)
          + *((_BYTE *)v20 + 192)
          + *(_WORD *)((char *)v21 + 193)
          + *(_WORD *)((char *)v22 + 195)
          + *(_WORD *)((char *)v23 + 197)
          + *((_BYTE *)v51 + 667)
          + *((_BYTE *)v52 + 668)
          + *(_WORD *)((char *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4),
                                 v1++)
                     + 669);
      v0 = (*(_DWORD *)((char *)v3 + 98)
          + *(_DWORD *)((char *)v4 + 102)
          + *(_DWORD *)((char *)v5 + 106)
          + *(_DWORD *)((char *)v6 + 110)
          + *((_DWORD *)v8 + 37)
          + *((_DWORD *)v9 + 38)
          + *((_DWORD *)v12 + 40)
          + *((_DWORD *)v13 + 41)
          + *((_DWORD *)v14 + 42)
          + *((_DWORD *)v15 + 43)
          + *((_DWORD *)v16 + 44)
          + *((_DWORD *)v17 + 45)
          + v53
          + v0) ^ 0x92;
      result = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal();
    }
    while ( v1 < result );
  }
  if ( v0 != ActSkillInfoTab::crcSum )
    terminate();
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// B67944: using guessed type int ActSkillInfoTab__crcSum;

//----- (006AB150) --------------------------------------------------------
unsigned int __cdecl ActSkillInfoTab::GenerateCRCSum()
{
  unsigned int v0; // esi@1
  unsigned int result; // eax@1
  void *v2; // edi@2
  void *v3; // ebx@2
  void *v4; // ST10_4@2
  void *v5; // ST18_4@2
  void *v6; // ST5C_4@2
  void *v7; // ST20_4@2
  void *v8; // ST28_4@2
  void *v9; // STAC_4@2
  void *v10; // ST24_4@2
  void *v11; // ST30_4@2
  void *v12; // ST38_4@2
  void *v13; // ST40_4@2
  void *v14; // ST48_4@2
  void *v15; // ST50_4@2
  void *v16; // ST58_4@2
  void *v17; // ST60_4@2
  void *v18; // ST68_4@2
  void *v19; // STB4_4@2
  void *v20; // ST64_4@2
  void *v21; // STBC_4@2
  void *v22; // ST3C_4@2
  void *v23; // ST70_4@2
  void *v24; // ST78_4@2
  void *v25; // ST80_4@2
  void *v26; // ST88_4@2
  void *v27; // ST90_4@2
  void *v28; // ST98_4@2
  void *v29; // STA0_4@2
  void *v30; // STA8_4@2
  void *v31; // STB0_4@2
  void *v32; // STB8_4@2
  void *v33; // STC0_4@2
  void *v34; // STC8_4@2
  void *v35; // STCC_4@2
  void *v36; // ST1C_4@2
  void *v37; // ST74_4@2
  void *v38; // ST44_4@2
  void *v39; // ST7C_4@2
  void *v40; // ST2C_4@2
  void *v41; // ST84_4@2
  void *v42; // ST4C_4@2
  void *v43; // ST8C_4@2
  void *v44; // ST14_4@2
  void *v45; // ST94_4@2
  void *v46; // ST54_4@2
  void *v47; // ST9C_4@2
  void *v48; // ST34_4@2
  void *v49; // STA4_4@2
  void *v50; // STC4_4@2
  void *v51; // ST6C_4@2
  int v52; // eax@2

  v0 = 0;
  ActSkillInfoTab::crcSum = 0;
  result = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal();
  if ( result )
  {
    do
    {
      v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v4 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v6 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v10 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v11 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v12 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v13 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v15 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v16 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v17 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v18 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v19 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v20 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v21 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v22 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v23 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v24 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v25 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v26 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v27 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v28 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v29 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v30 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v31 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v32 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v33 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v34 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v35 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v36 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v37 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v38 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v39 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v40 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v41 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v42 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v43 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v44 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v45 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v46 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v47 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v48 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v49 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v50 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v51 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4), v0);
      v52 = *((_DWORD *)v17 + 46)
          + *((_DWORD *)v18 + 47)
          + *(_DWORD *)((char *)v23 + 199)
          + *(_DWORD *)((char *)v24 + 203)
          + *(_DWORD *)((char *)v25 + 207)
          + *(_DWORD *)((char *)v26 + 211)
          + *(_DWORD *)((char *)v27 + 215)
          + *(_DWORD *)((char *)v28 + 219)
          + *(_DWORD *)((char *)v29 + 223)
          + *(_DWORD *)((char *)v30 + 227)
          + *(_DWORD *)((char *)v31 + 231)
          + *(_DWORD *)((char *)v32 + 235)
          + *(_DWORD *)((char *)v33 + 239)
          + *(_DWORD *)((char *)v34 + 243)
          + *(_DWORD *)((char *)v35 + 247)
          + *(_DWORD *)((char *)v36 + 251)
          + *(_DWORD *)((char *)v37 + 255)
          + *(_DWORD *)((char *)v38 + 259)
          + *(_DWORD *)((char *)v39 + 263)
          + *(_DWORD *)((char *)v40 + 267)
          + *(_DWORD *)((char *)v41 + 303)
          + *(_DWORD *)((char *)v42 + 307)
          + *(_DWORD *)((char *)v43 + 343)
          + *(_DWORD *)((char *)v44 + 347)
          + *(_DWORD *)((char *)v45 + 383)
          + *(_DWORD *)((char *)v46 + 387)
          + *(_DWORD *)((char *)v47 + 423)
          + *(_DWORD *)((char *)v48 + 427)
          + *(_DWORD *)((char *)v49 + 527)
          + *((_WORD *)v6 + 73)
          + *((_WORD *)v9 + 78)
          + *((_WORD *)v10 + 79)
          + *((_BYTE *)v19 + 192)
          + *(_WORD *)((char *)v20 + 193)
          + *(_WORD *)((char *)v21 + 195)
          + *(_WORD *)((char *)v22 + 197)
          + *((_BYTE *)v50 + 667)
          + *((_BYTE *)v51 + 668)
          + *(_WORD *)((char *)CDataReader::GetRecord(
                                 (CDataReader *)(ITableBase<ActiveSkillInfo_ActSkillInfoTab>::ms_pkTable + 4),
                                 v0++)
                     + 669);
      ActSkillInfoTab::crcSum = (ActSkillInfoTab::crcSum
                               + *(_DWORD *)((char *)v2 + 98)
                               + *(_DWORD *)((char *)v3 + 102)
                               + *(_DWORD *)((char *)v4 + 106)
                               + *(_DWORD *)((char *)v5 + 110)
                               + *((_DWORD *)v7 + 37)
                               + *((_DWORD *)v8 + 38)
                               + *((_DWORD *)v11 + 40)
                               + *((_DWORD *)v12 + 41)
                               + *((_DWORD *)v13 + 42)
                               + *((_DWORD *)v14 + 43)
                               + *((_DWORD *)v15 + 44)
                               + *((_DWORD *)v16 + 45)
                               + v52) ^ 0x92;
      result = ITableBase<ActiveSkillInfo_ActSkillInfoTab>::GetTotal();
    }
    while ( v0 < result );
  }
  return result;
}
// A98720: using guessed type int ITableBase_ActiveSkillInfo_ActSkillInfoTab___ms_pkTable;
// B67944: using guessed type int ActSkillInfoTab__crcSum;

//----- (006AB760) --------------------------------------------------------
bool __thiscall ActSkillInfoTab::DataProcess(ActSkillInfoTab *this)
{
  ActSkillInfoTab *v1; // ebx@1
  bool v2; // al@1
  unsigned int i; // edi@2
  CDataReader::HEAD *v4; // eax@3
  void *v5; // eax@5
  const char *v6; // ecx@5
  int v7; // eax@5
  int v8; // esi@5
  char v9; // dl@6
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *v10; // eax@7
  int v11; // esi@7
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v12; // ST04_4@7
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v13; // ST00_4@7
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v14; // eax@7
  char v15; // [sp+0h] [bp-58h]@8
  ItemInfo *_Val2; // [sp+8h] [bp-50h]@7
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> result; // [sp+Ch] [bp-4Ch]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+2Ch] [bp-2Ch]@5
  unsigned int v19; // [sp+48h] [bp-10h]@1
  int v20; // [sp+54h] [bp-4h]@7
  int v21; // [sp+58h] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v1 = this;
  v2 = IIDTableBase<PassiveSkillInfo_PasSkillInfoTab_unsigned_short>::DataProcess((IIDTableBase<SubAbStateInfo,SubAbStateInfoTab,unsigned short> *)this);
  if ( v2 )
  {
    for ( i = 0; ; ++i )
    {
      v4 = v1->baseclass_0.baseclass_0.m_kDataReader.m_pHead;
      if ( !v4 )
        break;
      if ( i >= v4->nNumOfRecord )
        break;
      v5 = CDataReader::GetRecord(&v1->baseclass_0.baseclass_0.m_kDataReader, i);
      v6 = (char *)v5 + 2;
      v7 = (int)((char *)v5 + 2);
      strName.baseclass_0._Myres = 15;
      strName.baseclass_0._Mysize = 0;
      strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v8 = v7 + 1;
      do
        v9 = *(_BYTE *)v7++;
      while ( v9 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, v6, v7 - v8);
      v20 = 0;
      _Val2 = (ItemInfo *)CDataReader::GetRecord(&v1->baseclass_0.baseclass_0.m_kDataReader, i);
      v10 = std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___ItemInfo__>(
              &result,
              &strName,
              &_Val2);
      v11 = **(_DWORD **)&stru_B6794C;
      v12 = *(std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node **)(**(_DWORD **)&stru_B6794C + 4);
      v13 = (std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *)**(_DWORD **)&stru_B6794C;
      LOBYTE(v20) = 1;
      v14 = std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo__>>(
              &stru_B6794C,
              v13,
              v12,
              v10);
      if ( 134217726 - stru_B6794C.baseclass_0._Mysize < 1 )
        std::_Xlength_error("list<T> too long");
      ++stru_B6794C.baseclass_0._Mysize;
      *(_DWORD *)(v11 + 4) = v14;
      v14->_Prev->_Next = v14;
      std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Insert(
        &ActSkillInfoTab::m_hashMap_ByNameIndex,
        (std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *)&v15,
        (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *)(**(_DWORD **)&stru_B6794C + 8),
        **(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > **)&stru_B6794C);
      if ( result.baseclass_0.first.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&result);
      result.baseclass_0.first.baseclass_0._Myres = 15;
      result.baseclass_0.first.baseclass_0._Mysize = 0;
      result.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v20 = -1;
      if ( strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strName);
    }
    v2 = 1;
  }
  return v2;
}
// A85C00: using guessed type int __security_cookie;

//----- (006AB8E0) --------------------------------------------------------
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___ItemInfo__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, ItemInfo **_Val2)
{
  ItemInfo *v3; // edi@1

  v3 = *_Val2;
  result->baseclass_0.first.baseclass_0._Myres = 15;
  result->baseclass_0.first.baseclass_0._Mysize = 0;
  result->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &result->baseclass_0.first,
    _Val1,
    0,
    0xFFFFFFFFu);
  result->baseclass_0.second = v3;
  return result;
}

//----- (006AB920) --------------------------------------------------------
int std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>(...)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *v3; // esi@1
  void *v4; // eax@1
  stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v5; // edx@2
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *v6; // edi@2
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *v7; // eax@2
  std::exception thisa; // [sp+0h] [bp-1Ch]@7
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *v11; // [sp+Ch] [bp-10h]@1
  int v12; // [sp+18h] [bp-4h]@2

  v3 = this;
  v11 = this;
  this->baseclass_0.___u0.baseclass_0.dummy[0] = _Parg->comp.baseclass_0.dummy[0];
  this->_List.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x28u);
  if ( !v4 )
  {
    _Parg = 0;
    std::exception::exception(&thisa, (const char *const *)&_Parg);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v4;
  *(_DWORD *)v4 = v4;
  *(_DWORD *)(*(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = 0;
  *(_DWORD *)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3->_Vec.baseclass_0._Mylast = 0;
  v3->_Vec.baseclass_0._Myend = 0;
  v5 = *(stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > **)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3->_Max_bucket_size = 1.0;
  v6 = *(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > **)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = v3->_Vec.baseclass_0._Mylast;
  LOBYTE(v12) = 1;
  _Parg = v5;
  if ( v6 != v7 )
    v3->_Vec.baseclass_0._Mylast = v6;
  __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
    (std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *)&v3->_Vec,
    *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0],
    0x10u,
    (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Parg);
  v3->_Mask = 7;
  v3->_Maxidx = 8;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006ABA20) --------------------------------------------------------
void __thiscall ITask::FinishThisDownward(ITask *this)
{
  ITask *v1; // edi@1
  NiTListItem<NiPointer<ITask> > *v2; // esi@1
  ITask *v3; // ecx@2

  v1 = this;
  v2 = this->m_kChildTaskList.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2->m_element.m_pObject;
    v2 = v2->m_pkNext;
    ITask::FinishThisDownward(v3);
  }
  v1->m_eTaskState = 2;
}

//----- (006ABA50) --------------------------------------------------------
bool __thiscall ITask::ProcessNetMsg(ITask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  NiTListItem<NiPointer<ITask> > *v5; // esi@1
  bool i; // bl@1
  ITask *v7; // edi@2
  char v8; // bl@2

  v5 = this->m_kChildTaskList.baseclass_0.baseclass_0.m_pkHead;
  for ( i = 0; v5; i = ITask::ProcessNetMsg(v7, iDepart, iCommand, iRevBytes, pvData) | v8 )
  {
    v7 = v5->m_element.m_pObject;
    v5 = v5->m_pkNext;
    v8 = ((int (__thiscall *)(ITask *, int, int, int, void *))v7->baseclass_0.vfptr[4].__vecDelDtor)(
           v7,
           iDepart,
           iCommand,
           iRevBytes,
           pvData) | i;
  }
  return i;
}

//----- (006ABAB0) --------------------------------------------------------
bool __cdecl ITask::ProcessNetMsgAll(int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  return ITask::ProcessNetMsg(&ITask::ms_kRootTask, iDepart, iCommand, iRevBytes, pvData);
}

//----- (006ABAD0) --------------------------------------------------------
bool __thiscall ITask::IsFinished(ITask *this)
{
  return this->m_eTaskState == 2
      && !*(_DWORD *)&this->m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0]
      && !*(_DWORD *)&this->m_kChildTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
}

//----- (006ABAF0) --------------------------------------------------------
void __thiscall ITask::DirectDispatchToChildren(ITask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ITask *v4; // edi@1
  IDirectMessengerVtbl *v5; // esi@2

  v4 = this->m_pkParentTask;
  while ( v4 )
  {
    v5 = v4->baseclass_8.vfptr;
    v4 = (ITask *)v4->baseclass_0.vfptr;
    (*((void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))v5->SetMessageNum + 1))(
      &v5->SetMessageNum,
      iMsgTag,
      pvBody,
      pkFrom);
    (*((void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))v5->SetMessageNum + 4))(
      &v5->SetMessageNum,
      iMsgTag,
      pvBody,
      pkFrom);
  }
}

//----- (006ABB40) --------------------------------------------------------
void __thiscall ITask::DirectDispatchToParent(ITask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ITask::TaskState i; // esi@1

  for ( i = this->m_eTaskState; i; i = *(_DWORD *)(i + 28) )
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)(i + 8) + 4))(i + 8, iMsgTag, pvBody, pkFrom);
}

//----- (006ABB80) --------------------------------------------------------
void __cdecl ITask::DirectDispatchAll(int iMsg, void *pvBody)
{
  if ( ITask::ms_kRootTask.baseclass_8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))ITask::ms_kRootTask.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      iMsg,
      pvBody,
      &ITask::ms_kRootTask.baseclass_8);
    if ( ITask::ms_kRootTask.baseclass_8.m_pkMsgHooker )
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))ITask::ms_kRootTask.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToChildren)(
        iMsg,
        pvBody,
        &ITask::ms_kRootTask.baseclass_8);
  }
  ITask::ms_kRootTask.baseclass_8.vfptr->DirectDispatchToChildren(
    &ITask::ms_kRootTask.baseclass_8,
    iMsg,
    pvBody,
    &ITask::ms_kRootTask.baseclass_8);
}

//----- (006ABBE0) --------------------------------------------------------
void __thiscall ITask::UpdateChildTask(ITask *this, float fTime)
{
  ITask *v2; // ebx@1
  NiTListItem<NiPointer<ITask> > *v3; // edi@1
  ITask *v4; // esi@2
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // edx@3
  PgWin *v6; // esi@8
  NiPointer<PgWin> result; // [sp+10h] [bp-8h]@7
  NiTListItem<NiPointer<ITask> > *kCurrIter; // [sp+14h] [bp-4h]@2

  v2 = this;
  v3 = this->m_kChildTaskList.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3->m_element.m_pObject;
    kCurrIter = v3;
    v3 = v3->m_pkNext;
    ITask::UpdateChildTask(v4, fTime);
    if ( !v4->m_eTaskState )
    {
      v5 = v4->baseclass_0.vfptr[1].__vecDelDtor;
      v4->m_eTaskState = 1;
      ((void (__thiscall *)(_DWORD))v5)(v4);
    }
    v4->baseclass_0.vfptr[3].__vecDelDtor((NiRefObject *)v4, LODWORD(fTime));
    if ( v4->m_eTaskState == 2 )
    {
      if ( !*(_DWORD *)&v4->m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
      {
        if ( !*(_DWORD *)&v4->m_kChildTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
        {
          ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(v4);
          NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<ListItem>>::RemovePos(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v2->m_kChildTaskList,
            &result,
            (void **)&kCurrIter);
          if ( result.m_pObject )
          {
            v6 = result.m_pObject;
            if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v6 )
                v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
                  (NiRefObject *)v6,
                  1u);
            }
          }
        }
      }
    }
  }
}

//----- (006ABCA0) --------------------------------------------------------
void __thiscall ITask::UpdateSerialTask(ITask *this, float fTime)
{
  ITask *v2; // edi@1
  NiTListItem<NiPointer<ITask> > *v3; // eax@1
  ITask *v4; // esi@2
  float v5; // esi@8

  v2 = this;
  v3 = this->m_kSerialTaskList.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    v4 = v3->m_element.m_pObject;
    if ( !v4->m_eTaskState )
      ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[1].__vecDelDtor)(v4);
    v4->baseclass_0.vfptr[3].__vecDelDtor((NiRefObject *)v4, LODWORD(fTime));
    if ( v4->m_eTaskState == 2 )
    {
      if ( !*(_DWORD *)&v4->m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
      {
        if ( !*(_DWORD *)&v4->m_kChildTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] )
        {
          ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[2].__vecDelDtor)(v4);
          NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::RemoveHead(
            (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v2->m_kSerialTaskList,
            (NiPointer<PgWin> *)&fTime);
          if ( fTime != 0.0 )
          {
            v5 = fTime;
            if ( !InterlockedDecrement((volatile LONG *)(LODWORD(fTime) + 4)) )
            {
              if ( LODWORD(v5) )
                (*(void (__thiscall **)(_DWORD, _DWORD))*LODWORD(v5))(LODWORD(v5), 1);
            }
          }
        }
      }
    }
  }
}

//----- (006ABD30) --------------------------------------------------------
void __thiscall ITask::Update(ITask *this, float fTime)
{
  ITask *v2; // esi@1

  v2 = this;
  ITask::UpdateChildTask(this, fTime);
  ITask::UpdateSerialTask(v2, fTime);
}

//----- (006ABD60) --------------------------------------------------------
NiPointer<ITask> *__thiscall ITask::DetachChildTask(ITask *this, NiPointer<ITask> *result, ITask *pkTask)
{
  ITask *v3; // ebx@1
  ITask *v4; // esi@1

  v3 = this;
  v4 = pkTask;
  if ( pkTask )
    InterlockedIncrement((volatile LONG *)&pkTask->baseclass_0.m_uiRefCount);
  NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::Remove(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<PgWin> > *)&v3->m_kChildTaskList,
    (NiPointer<PgWin> *)result,
    (NiPointer<PgWin> *)&pkTask);
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.m_uiRefCount) )
    v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  if ( result->m_pObject )
    result->m_pObject->m_pkParentTask = 0;
  return result;
}

//----- (006ABE10) --------------------------------------------------------
void __cdecl ITask::FinishTaskAll()
{
  NiTListItem<NiPointer<ITask> > *v0; // edx@1

  v0 = ITask::ms_kRootTask.m_kChildTaskList.baseclass_0.baseclass_0.m_pkHead;
  if ( ITask::ms_kRootTask.m_kChildTaskList.baseclass_0.baseclass_0.m_pkHead )
  {
    do
      ITask::FinishThisDownward(v0->m_element.m_pObject);
    while ( v0 );
  }
  ITask::ms_kRootTask.m_eTaskState = 2;
  ITask::UpdateChildTask(&ITask::ms_kRootTask, 0.0);
  ITask::UpdateSerialTask(&ITask::ms_kRootTask, 0.0);
}

//----- (006ABE60) --------------------------------------------------------
void __cdecl ITask::UpdateTaskAll(float fTime)
{
  ITask::UpdateChildTask(&ITask::ms_kRootTask, fTime);
  ITask::UpdateSerialTask(&ITask::ms_kRootTask, fTime);
}

//----- (006ABE90) --------------------------------------------------------
void __thiscall ITask::AttachParentTask(ITask *this, ITask *pkParent)
{
  ITask *v2; // esi@1
  ITask *v3; // ecx@1
  ITask *v4; // edi@2
  NiPointer<ITask> result; // [sp+4h] [bp-4h]@2

  v2 = this;
  v3 = this->m_pkParentTask;
  if ( v3 )
  {
    ITask::DetachChildTask(v3, &result, v2);
    v4 = result.m_pObject;
    if ( !result.m_pObject )
    {
LABEL_6:
      v2->m_pkParentTask = pkParent;
      return;
    }
    if ( InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.m_uiRefCount) )
    {
      v2->m_pkParentTask = pkParent;
    }
    else
    {
      if ( v4 )
      {
        v4->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        goto LABEL_6;
      }
      v2->m_pkParentTask = pkParent;
    }
  }
  else
  {
    v2->m_pkParentTask = pkParent;
  }
}

//----- (006ABF10) --------------------------------------------------------
void __thiscall ITask::AttachChildTask(ITask *this, ITask *pkTask)
{
  ITask *v2; // edi@1
  ITask *v3; // esi@1
  volatile LONG *v4; // ebx@1

  v2 = this;
  v3 = pkTask;
  v4 = (volatile LONG *)&pkTask->baseclass_0.m_uiRefCount;
  InterlockedIncrement((volatile LONG *)&pkTask->baseclass_0.m_uiRefCount);
  ITask::AttachParentTask(v3, v2);
  pkTask = v3;
  if ( v3 )
    InterlockedIncrement(v4);
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiDX92DBufferData> > *)&v2->m_kChildTaskList,
    (NiPointer<NiDX92DBufferData> *)&pkTask);
  if ( v3 && !InterlockedDecrement(v4) )
    v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  if ( !InterlockedDecrement(v4) )
  {
    if ( v3 )
      v3->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (006ABFC0) --------------------------------------------------------
void __thiscall ITask::ITask(ITask *this, ITask *pkParent)
{
  ITask *v2; // esi@1
  ITask *v3; // ecx@1

  v2 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v2->baseclass_8.vfptr = (IDirectMessengerVtbl *)&IDirectMessenger::_vftable_;
  v2->baseclass_8.m_pkMsgHooker = 0;
  v2->baseclass_8.m_uiMessageNum = 0;
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&ITask::_vftable_;
  v2->baseclass_8.vfptr = (IDirectMessengerVtbl *)&ITask::_vftable_;
  *(_DWORD *)&v2->m_kChildTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2->m_kChildTaskList.baseclass_0.baseclass_0.m_pkHead = 0;
  v2->m_kChildTaskList.baseclass_0.baseclass_0.m_pkTail = 0;
  v2->m_kChildTaskList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTList<NiPointer<ITask>>::_vftable_;
  *(_DWORD *)&v2->m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v2->m_kSerialTaskList.baseclass_0.baseclass_0.m_pkHead = 0;
  v2->m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = 0;
  v2->m_kSerialTaskList.baseclass_0.baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTList<NiPointer<ITask>>::_vftable_;
  v3 = pkParent;
  v2->m_pkParentTask = 0;
  v2->m_eTaskState = 0;
  v2->m_eTaskType = 0;
  if ( !pkParent )
  {
    if ( v2 == &ITask::ms_kRootTask )
      return;
    v3 = &ITask::ms_kRootTask;
  }
  ITask::AttachChildTask(v3, v2);
}
// 979484: using guessed type int (__stdcall *IDirectMessenger___vftable_)(int uiFlags);
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9C8B2C: using guessed type int (__thiscall *NiTList_NiPointer_ITask_____vftable_)(void *p, char);
// 9C8B3C: using guessed type int (__stdcall *ITask___vftable_)(int uiFlags);
// 9C8B58: using guessed type int (__thiscall *ITask___vftable_)(void *p, char);

//----- (006AC080) --------------------------------------------------------
void *__thiscall NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> > *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<NiPointer<ITask> > *v3; // esi@1
  NiTListItem<NiPointer<ITask> > *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >Vtbl *)&NiTPointerListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<NiPointer<ITask>>_NiPointer<ITask>>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 98BB80: using guessed type int (__thiscall *NiTListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);
// 98BB98: using guessed type int (__thiscall *NiTPointerListBase_DFALL_NiPointer_ITask___NiPointer_ITask_____vftable_)(void *p, char);

//----- (006AC110) --------------------------------------------------------
void *__thiscall ProductTask::_scalar_deleting_destructor_(ProductTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ITask::_ITask(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006AC140) --------------------------------------------------------
void __thiscall ItemUseTask::SetInventoryIndex(ItemUseTask *this, unsigned int uiInventoryIndex)
{
  this->m_uiInventoryIndex = uiInventoryIndex;
}

//----- (006AC150) --------------------------------------------------------
void __thiscall ItemUseTask::SetGameFrameWork(ItemUseTask *this, GameFrameWork *pkGameFrameWork)
{
  this->m_pkGameFrameWork = pkGameFrameWork;
}

//----- (006AC160) --------------------------------------------------------
bool __cdecl ItemUseTask::InitCastingProgress()
{
  bool result; // al@1

  result = (char)ItemUseTask::ms_pkCastingProgressWin;
  if ( ItemUseTask::ms_pkCastingProgressWin )
    result = PgWinMgr::ShowWin(&Pgg_kWinMgr, ItemUseTask::ms_pkCastingProgressWin);
  return result;
}

//----- (006AC180) --------------------------------------------------------
void __thiscall ItemUseTask::NcUserConnectionChangeIDItemUseReq(ItemUseTask *this, int iSlotNum)
{
  BYTE3(iSlotNum) = iSlotNum;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Du, 0x10u, (char *)&iSlotNum + 3, 1);
}

//----- (006AC1B0) --------------------------------------------------------
void __thiscall ItemUseTask::OnIdle(ItemUseTask *this, float fTime)
{
  ItemUseTask *v2; // esi@1

  v2 = this;
  if ( this->m_eState == 4 && (unsigned __int8)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[7].GetAbstateColor)() )
  {
    if ( ItemUseTask::ms_pkCastingProgressWin )
      CastingProgressWin::CastingFail((CastingProgressWin *)ItemUseTask::ms_pkCastingProgressWin);
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x19u, 0, 0);
    v2->baseclass_0.baseclass_0.m_eTaskState = 2;
  }
}

//----- (006AC200) --------------------------------------------------------
bool __thiscall ItemUseTask::OnProcessNetMsg(ItemUseTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  ItemUseTask *v5; // esi@1
  ItemUseTask::State v7; // eax@6

  v5 = this;
  if ( iDepart != 12 )
    return 0;
  if ( iCommand == 22 )
  {
    this->baseclass_0.baseclass_0.m_eTaskState = 2;
    return 1;
  }
  if ( iCommand != 26 )
    return 0;
  if ( this->m_bCompleteRecved || (v7 = this->m_eState, v7 != 3) && v7 != 4 )
    return 1;
  Skill::RecordSkillUse(this->m_pkSkillInfo->ID, Timer::ms_fCurTime, 0.0, 0.0);
  if ( v5->m_eState == 4 )
    CastingProgressWin::CastingSuccess((CastingProgressWin *)ItemUseTask::ms_pkCastingProgressWin);
  v5->m_bCompleteRecved = 1;
  return 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006AC290) --------------------------------------------------------
bool __thiscall ItemUseTask::ItemNameCheck(ItemUseTask *this, Item *pkItem, const char *pkName)
{
  ItemViewInfo *v3; // eax@1
  bool result; // al@2

  v3 = pkItem->m_pkViewInfo;
  if ( v3 )
  {
    if ( strcmp(v3->InxName, pkName) )
      result = 0;
    else
      result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006AC2F0) --------------------------------------------------------
bool __thiscall ItemUseTask::UsePutOnBelongClear(ItemUseTask *this, Item *pkItem, unsigned int uiInvenIdx)
{
  PgFrameWork *v3; // eax@2
  InventoryWin *v4; // ecx@3
  CursorState *v5; // eax@5
  bool result; // al@5

  if ( pkItem
    && (v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)) != 0
    && (v4 = (InventoryWin *)v3[19].m_BackFrameID) != 0
    && pkItem->m_pkInfo->ItemFunc == 6 )
  {
    InventoryWin::ms_uiMode = 8;
    InventoryWin::SetSenderInvPos(v4, uiInvenIdx);
    v5 = Singleton<CursorState>::getInstance();
    CursorState::SetState(v5, PUT_ON_BELONG_CLEAR);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (006AC360) --------------------------------------------------------
void __thiscall ItemUseTask::OnUseItemRepairKit(ItemUseTask *this, Item *pkItem, unsigned int uiInvenInx)
{
  PgFrameWork *v3; // eax@2
  GameFrameWork *v4; // edi@2
  char *v5; // eax@4
  PgWin *v6; // esi@5
  char *v7; // eax@7
  ItemRepairWin *v8; // ebx@8
  InvWin *v9; // eax@11

  if ( pkItem )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = (GameFrameWork *)v3;
    if ( v3 )
    {
      if ( dword_B30F24 )
      {
        v5 = TextData2::Get(0x75F1A1Cu);
        GameFrameWork::AddSysMsg(v4, v5);
      }
      else
      {
        v6 = (PgWin *)v3[19].m_BackFrameID;
        if ( v6 )
        {
          if ( InventoryWin::ms_uiMode )
          {
            v7 = TextData2::Get(0xB2F6D62Fu);
            GameFrameWork::AddSysMsg(v4, v7);
          }
          else
          {
            v8 = (ItemRepairWin *)v3[33].m_kMsgQ.m_uiAlloced;
            if ( v8 )
            {
              if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v6) )
                PgWinMgr::CloseWin(&Pgg_kWinMgr, v6);
              v9 = InventoryWin::GetInvWin((InventoryWin *)v6, uiInvenInx);
              InvWin::SetLock(v9, 1);
              InventoryWin::ms_uiMode = 6;
              PgWinMgr::DoModal(&Pgg_kWinMgr, v6, 0, 0, 0);
              ItemRepairWin::SetItemRepairKitSlot(v8, uiInvenInx);
              dword_B30F24 = 1;
            }
          }
        }
      }
    }
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F24: using guessed type int dword_B30F24;

//----- (006AC450) --------------------------------------------------------
void __thiscall ItemUseTask::OnUseItemAddSocket(ItemUseTask *this, Item *pkItem, unsigned int uiInvenIdx)
{
  PgFrameWork *v3; // eax@2
  GameFrameWork *v4; // edi@2
  char *v5; // eax@4
  void *v6; // esi@5
  char *v7; // eax@8
  unsigned int v8; // ST00_4@9
  InvWin *v9; // eax@9

  if ( pkItem )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = (GameFrameWork *)v3;
    if ( v3 )
    {
      if ( dword_B30F28 )
      {
        v5 = TextData::Get(0x226625A6u);
        GameFrameWork::AddSysMsg(v4, v5);
      }
      else
      {
        v6 = v3[19].m_BackFrameID;
        if ( v6 && Inventory::FindEnchantSoketAdd(&g_kInventory, (ITEM_INVEN *)&pkItem) )
        {
          if ( InventoryWin::ms_uiMode )
          {
            v7 = TextData::Get(0x226625A6u);
            GameFrameWork::AddSysMsg(v4, v7);
          }
          else
          {
            v8 = uiInvenIdx;
            *((_DWORD *)v6 + 367) = uiInvenIdx;
            v9 = InventoryWin::GetInvWin((InventoryWin *)v6, v8);
            InvWin::SetLock(v9, 1);
            InventoryWin::ms_uiMode = 7;
            dword_B30F28 = 1;
          }
        }
      }
    }
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F28: using guessed type int dword_B30F28;

//----- (006AC510) --------------------------------------------------------
void __thiscall ItemUseTask::OnUseItemRandomOptRecoveryCount(ItemUseTask *this, Item *pkItem, unsigned int uiInvenIdx)
{
  PgFrameWork *v3; // eax@2
  GameFrameWork *v4; // esi@2
  char *v5; // eax@4
  void *v6; // edi@5
  char *v7; // eax@7
  char *v8; // eax@9

  if ( pkItem )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = (GameFrameWork *)v3;
    if ( v3 )
    {
      if ( dword_B30F2C )
      {
        v5 = TextData::Get(0x226625A6u);
        GameFrameWork::AddSysMsg(v4, v5);
      }
      else
      {
        v6 = v3[19].m_BackFrameID;
        if ( v6 )
        {
          if ( InventoryWin::ms_uiMode )
          {
            v7 = TextData::Get(0x226625A6u);
            GameFrameWork::AddSysMsg(v4, v7);
          }
          else
          {
            if ( Inventory::GetRandomOptRecoverItemCount(&g_kInventory, (ITEM_INVEN *)&pkItem) )
            {
              *((_DWORD *)v6 + 371) = uiInvenIdx;
              InventoryWin::ms_uiMode = 9;
              dword_B30F2C = 1;
            }
            else
            {
              v8 = TextData3::Get(0x97BEF7C3u);
              GameFrameWork::AddSysMsg(v4, v8);
            }
          }
        }
      }
    }
  }
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// B30F2C: using guessed type int dword_B30F2C;

//----- (006AC5E0) --------------------------------------------------------
void __thiscall ItemUseTask::OnStart(ItemUseTask *this)
{
  ItemUseTask *v1; // ebx@1
  PgFrameWork *v2; // eax@1
  PgFrameWork *v3; // esi@1
  unsigned int v4; // eax@4
  void *v5; // eax@8
  ItemInfo *v6; // edi@11
  mhRepairObjWin *v7; // ecx@13
  int v8; // eax@20
  void *(__thiscall *v9)(NiRefObject *, unsigned int); // edx@20
  int v10; // eax@24
  ItemInfo *v11; // eax@27
  char *v12; // eax@29
  PgFrameWork *v13; // eax@30
  GameFrameWork *v14; // esi@30
  Item *v15; // eax@32
  ActionEffectItem *v16; // eax@32
  ActiveSkillInfo *v17; // edi@36
  Item *v18; // esi@37
  Item *v19; // edi@39
  unsigned int v20; // esi@39
  std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > v21; // ecx@40
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // eax@40
  ItemUseTask *v23; // esi@44
  char *v24; // eax@44
  MsgBox *v25; // eax@44
  void *v26; // edi@63
  unsigned int v27; // eax@75
  Item *v28; // eax@76
  ItemViewInfo *v29; // eax@77
  const char *v30; // esi@78
  unsigned int v31; // edi@89
  unsigned int v32; // esi@91
  std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > v33; // ecx@92
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v34; // eax@92
  unsigned int v35; // esi@95
  std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > v36; // ecx@96
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v37; // eax@96
  unsigned int v38; // esi@102
  std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > v39; // ecx@103
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v40; // eax@103
  char *v41; // eax@106
  MsgBox *v42; // eax@106
  char *v43; // eax@107
  MsgBox *v44; // eax@107
  char *v45; // eax@109
  NiObjectNET *v46; // eax@109
  char *v47; // eax@110
  NiObjectNET *v48; // esi@111
  ItemViewInfo *v49; // eax@113
  unsigned int v50; // esi@115
  Item *v51; // edi@119
  RIDING *v52; // eax@121
  const char *v53; // esi@123
  char *v54; // eax@131
  MsgBox *v55; // eax@131
  unsigned int v56; // [sp-18h] [bp-94h]@7
  unsigned int v57; // [sp-18h] [bp-94h]@118
  IDirectMessenger::DispatchTo v58; // [sp-14h] [bp-90h]@7
  unsigned int v59; // [sp-10h] [bp-8Ch]@1
  ITEM_INVEN kInven; // [sp+0h] [bp-7Ch]@23
  GameFrameWork *pkGame; // [sp+4h] [bp-78h]@1
  PROTO_NC_ITEM_USE_REQ kProto; // [sp+8h] [bp-74h]@127
  ItemInfo *pkItemInfo; // [sp+Ch] [bp-70h]@11
  ItemUseTask *v64; // [sp+10h] [bp-6Ch]@1
  Item *pkItem; // [sp+14h] [bp-68h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strEquipItemName; // [sp+18h] [bp-64h]@95
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+34h] [bp-48h]@102
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > stritemName; // [sp+50h] [bp-2Ch]@39
  unsigned int v69; // [sp+6Ch] [bp-10h]@1
  int v70; // [sp+78h] [bp-4h]@39
  int v71; // [sp+7Ch] [bp+0h]@1

  v69 = (unsigned int)&v71 ^ __security_cookie;
  v59 = (unsigned int)&v71 ^ __security_cookie;
  v1 = this;
  v64 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = v2;
  pkGame = (GameFrameWork *)v2;
  if ( !v2
    || !v2[19].m_BackFrameID
    || InventoryWin::ms_uiMode == 8
    || (v4 = v1->m_uiInventoryIndex, v4 >= 0xC0)
    || (pkItem = g_kInventory.m_aspInv[v4].m_pObject) == 0 )
    goto LABEL_10;
  if ( UserTrade::IsTrading() )
  {
    v58 = 0;
    v56 = -1951743271;
LABEL_8:
    v5 = TextData::Get(v56);
LABEL_9:
    IDirectMessenger::DirectDispatch(&v1->baseclass_0.baseclass_0.baseclass_8, 25, v5, v58);
LABEL_10:
    v1->baseclass_0.baseclass_0.m_eTaskState = 2;
    return;
  }
  v6 = pkItem->m_pkInfo;
  pkItemInfo = v6;
  if ( v6->ItemFunc == 2 )
  {
    if ( dword_AA501C == 2 )
    {
      v7 = *(mhRepairObjWin **)&v3[30].m_bInit;
      if ( v7 )
      {
        if ( v3[19].m_BackFrameID )
        {
          mhRepairObjWin::SetRepairKitSlot(v7, LOBYTE(v1->m_uiInventoryIndex));
          InventoryWin::LockAllItem((InventoryWin *)v3[19].m_BackFrameID);
        }
      }
    }
  }
  if ( !strcmp(v6->InxName, "EnchantSocketAdd")
    || !strcmp(v6->InxName, "EnchantSocketReload")
    || !strcmp(v6->InxName, "RandomOption_Recover") )
  {
    v1->m_eState = 1;
LABEL_130:
    v57 = -588327666;
    goto LABEL_131;
  }
  if ( v6->ItemFunc == 1 )
  {
    v8 = ((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[4].__vecDelDtor)(pkItem);
    v9 = pkItem->baseclass_0.vfptr[3].__vecDelDtor;
    v64 = (ItemUseTask *)v8;
    if ( ((int (__thiscall *)(Item *))v9)(pkItem) != v8 )
    {
      ItemUseTask::OnUseItemRepairKit(v1, pkItem, v1->m_uiInventoryIndex);
      v1->baseclass_0.baseclass_0.m_eTaskState = 2;
      return;
    }
    v1->m_eState = 1;
    goto LABEL_130;
  }
  if ( Inventory::FindMysteryVault(&g_kInventory, &kInven) )
  {
    v10 = kInven.Inven & 0x3FF;
    if ( v10 == v1->m_uiInventoryIndex )
    {
      if ( (unsigned int)v10 < 0xC0 )
      {
        if ( g_kInventory.m_aspInv[v10].m_pObject )
        {
          v11 = pkItem->m_pkInfo;
          if ( v11 )
          {
            if ( v11->DemandLv > User::Lv(&g_kUser) )
            {
              v58 = 0;
              v12 = TextData2::Get(0x3B54509Bu);
              v5 = fs(v12);
              goto LABEL_9;
            }
            v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
            v14 = (GameFrameWork *)v13;
            if ( v13 )
            {
              GameFrameWork::CloseMysteryVaultWin((GameFrameWork *)v13);
              GameFrameWork::NcCharSaveUIStateSaveReq(v14, 0);
            }
          }
        }
      }
    }
  }
  v15 = pkItem;
  v1->m_pkSkillInfo = 0;
  v1->m_ItemActionID = -1;
  v16 = ActionEffectItemTab::GetByItemID(v15->m_kStruct.itemid);
  if ( v16 )
    v1->m_ItemActionID = v16->ItemActionID;
  if ( pkItemInfo->ItemUseSkill[0] != 45 )
    v1->m_pkSkillInfo = ActSkillInfoTab::GetByInxName(pkItemInfo->ItemUseSkill);
  v17 = v1->m_pkSkillInfo;
  if ( v17 )
  {
    if ( strcmp(v17->InxName, "UseSilverWings")
      && strcmp(v17->InxName, "UseRide")
      && !Skill::IsSkillUsePossible(v17->ID) )
    {
      v58 = 0;
      v56 = -2047355183;
      goto LABEL_8;
    }
    if ( CharShape::IsSpactralGlowEnable(&g_pkMainChar->m_kCharShape) )
    {
      if ( !strcmp(v1->m_pkSkillInfo->InxName, "UseRide")
        && AbStateInfectee::FindNomalAbstate(&g_pkMainChar->baseclass_0, STA_HIDE) )
      {
        v58 = 0;
        v5 = TextData2::Get(0x20548D7Fu);
        goto LABEL_9;
      }
    }
    else
    {
      if ( (unsigned __int8)((int (__cdecl *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[20].SetAbStateProperty)(v59)
        || CharShape::IsSpactralGlowEnable(&g_pkMainChar->m_kCharShape) )
      {
        v58 = 0;
        v56 = 577119654;
        goto LABEL_8;
      }
    }
    v18 = pkItem;
    if ( v1->m_pkSkillInfo->CastTime )
    {
      if ( (unsigned __int8)((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[1].__vecDelDtor)(pkItem) != 34 )
      {
        v1->m_eState = 4;
        if ( ItemUseTask::ms_pkCastingProgressWin
          || (ItemUseTask::ms_pkCastingProgressWin = (PgWin *)CastingProgressWin::CreateWin(0, 1),
              ((void (__stdcall *)(IDirectMessenger *))ItemUseTask::ms_pkCastingProgressWin->baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_8),
              PgWinMgr::ShowWin(&Pgg_kWinMgr, ItemUseTask::ms_pkCastingProgressWin),
              ((void (__stdcall *)(_DWORD))ItemUseTask::ms_pkCastingProgressWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0),
              ItemUseTask::ms_pkCastingProgressWin) )
        {
          Char::ActItemCasting(g_pkMainChar);
          CastingProgressWin::StartCasting(
            (CastingProgressWin *)ItemUseTask::ms_pkCastingProgressWin,
            v1->m_pkSkillInfo->CastTime,
            0);
        }
      }
    }
    else
    {
      v1->m_eState = 3;
    }
    if ( (unsigned __int8)((int (__thiscall *)(Item *))v18->baseclass_0.vfptr[1].__vecDelDtor)(v18) == 34 )
    {
      GameFrameWork::UseActiveSkillItem(pkGame, v1->m_uiInventoryIndex, v1->m_pkSkillInfo->ID);
      v1->baseclass_0.baseclass_0.m_eTaskState = 2;
      return;
    }
  }
  else
  {
    v18 = pkItem;
    v1->m_eState = 5;
  }
  if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, v18->m_pkInfo->BT_Inx) )
  {
    v19 = pkItem;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &stritemName,
      pkItem->m_pkInfo->Name);
    v70 = 0;
    v20 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&stritemName, "(", 0, 1u);
    if ( v20 != -1 )
    {
      v21 = *(std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > *)&std::basic_string<char_std::char_traits<char>_std::allocator<char>>::end(
                                                                                                  &stritemName,
                                                                                                  (std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *)&pkGame)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v22 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&stritemName;
      if ( stritemName.baseclass_0._Myres < 0x10 )
        v22 = &stritemName;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(
        &stritemName,
        (std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> >)((char *)v22 + v20),
        v21,
        &byte_9C8B7D);
    }
    if ( !Item::GetPutOnBelongState(v19) )
    {
      v23 = v64;
      v64->m_eState = 2;
      v24 = TextData2::Get(0x80CCAFE1u);
      v25 = MsgBox::Modal(MSGBOX_OKCANCEL, v24);
      ((void (__stdcall *)(IDirectMessenger *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v23->baseclass_0.baseclass_0.baseclass_8);
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&stritemName);
      return;
    }
    v70 = -1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&stritemName);
    v1 = v64;
    v18 = pkItem;
    v26 = pkItemInfo;
  }
  else
  {
    v26 = pkItemInfo;
    if ( pkItemInfo->ItemGradeType == 4
      && (unsigned __int8)((int (__thiscall *)(Item *))v18->baseclass_0.vfptr[1].__vecDelDtor)(v18) != 24
      && (!((int (__thiscall *)(Item *))v18->baseclass_0.vfptr[11].__vecDelDtor)(v18)
       || ((int (__thiscall *)(Item *))v18->baseclass_0.vfptr[11].__vecDelDtor)(v18)
       && !*(_BYTE *)((int (__thiscall *)(_DWORD))v18->baseclass_0.vfptr[11].__vecDelDtor)(v18)) )
    {
      v27 = v1->m_uiInventoryIndex;
      v1->m_eState = 1;
      if ( v27 < 0xC0 )
      {
        v28 = g_kInventory.m_aspInv[v27].m_pObject;
        pkItem = v28;
        if ( v28 )
        {
          v29 = v28->m_pkViewInfo;
          if ( v29 )
          {
            v30 = v29->InxName;
            if ( strcmp(v29->InxName, "Roar") )
            {
              if ( strcmp(v30, "ProdReload01") )
              {
                if ( pkItemInfo->Type )
                {
                  if ( pkItemInfo->ItemFunc == 2 )
                  {
                    v45 = TextData::Get(0xDCEED50Eu);
                    v46 = (NiObjectNET *)MsgBox::Modal(MSGBOX_OKCANCEL, v45);
                  }
                  else
                  {
                    v47 = TextData::Get(0xDCEED50Eu);
                    v46 = (NiObjectNET *)MsgBox::Modeless(MSGBOX_OKCANCEL, v47);
                  }
                  v48 = v46;
                  NiObjectNET::SetName(v46, "MsgBoxAskUseItemWin");
                  (*(void (__thiscall **)(char **, IDirectMessenger *))v48[8].m_pcName)(
                    &v48[8].m_pcName,
                    &v1->baseclass_0.baseclass_0.baseclass_8);
                }
                else
                {
                  v31 = 0;
                  do
                  {
                    if ( g_kInventory.m_aspEquip[v31].m_pObject )
                    {
                      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                        &stritemName,
                        pkItem->m_pkInfo->Name);
                      v70 = 1;
                      v32 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(
                              &stritemName,
                              "(",
                              0,
                              1u);
                      if ( v32 != -1 )
                      {
                        v33 = *(std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > *)&std::basic_string<char_std::char_traits<char>_std::allocator<char>>::end(&stritemName, (std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *)&pkGame)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
                        v34 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&stritemName;
                        if ( stritemName.baseclass_0._Myres < 0x10 )
                          v34 = &stritemName;
                        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(
                          &stritemName,
                          (std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> >)((char *)v34 + v32),
                          v33,
                          &byte_9C8B7E);
                      }
                      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                        &strEquipItemName,
                        g_kInventory.m_aspEquip[v31].m_pObject->m_pkInfo->Name);
                      LOBYTE(v70) = 2;
                      v35 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(
                              &strEquipItemName,
                              "(",
                              0,
                              1u);
                      if ( v35 != -1 )
                      {
                        v36 = *(std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > *)&std::basic_string<char_std::char_traits<char>_std::allocator<char>>::end(&strEquipItemName, (std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *)&pkItemInfo)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
                        v37 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strEquipItemName;
                        if ( strEquipItemName.baseclass_0._Myres < 0x10 )
                          v37 = &strEquipItemName;
                        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(
                          &strEquipItemName,
                          (std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> >)((char *)v37 + v35),
                          v36,
                          &byte_9C8B7F);
                      }
                      if ( std::operator__<char_std::char_traits<char>_std::allocator<char>>(
                             &stritemName,
                             &strEquipItemName) )
                      {
                        v43 = TextData::Get(0x93F290Eu);
                        v44 = MsgBox::Modal(MSGBOX_OKCANCEL, v43);
                        ((void (__stdcall *)(IDirectMessenger *))v44->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v64->baseclass_0.baseclass_0.baseclass_8);
                        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strEquipItemName);
                        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&stritemName);
                        return;
                      }
                      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strEquipItemName);
                      v70 = -1;
                      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&stritemName);
                    }
                    ++v31;
                  }
                  while ( v31 < 0x1E );
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                    &thisa,
                    pkItem->m_pkInfo->Name);
                  v70 = 3;
                  v38 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&thisa, "(", 0, 1u);
                  if ( v38 != -1 )
                  {
                    v39 = *(std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > *)&std::basic_string<char_std::char_traits<char>_std::allocator<char>>::end(&thisa, (std::_String_iterator<char,std::char_traits<char>,std::allocator<char> > *)&pkGame)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
                    v40 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
                    if ( thisa.baseclass_0._Myres < 0x10 )
                      v40 = &thisa;
                    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(
                      &thisa,
                      (std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> >)((char *)v40 + v38),
                      v39,
                      byte_9C8BA9);
                  }
                  v41 = TextData::Get(0xDCEED50Eu);
                  v42 = MsgBox::Modal(MSGBOX_OKCANCEL, v41);
                  ((void (__stdcall *)(IDirectMessenger *))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v64->baseclass_0.baseclass_0.baseclass_8);
                  std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
                }
              }
              else
              {
                if ( v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                {
                  ((void (__stdcall *)(signed int, unsigned int *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                    67,
                    &v1->m_uiInventoryIndex,
                    &v1->baseclass_0.baseclass_0.baseclass_8);
                  if ( v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                    ((void (__stdcall *)(signed int, unsigned int *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                      67,
                      &v1->m_uiInventoryIndex,
                      &v1->baseclass_0.baseclass_0.baseclass_8);
                }
                v1->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                  &v1->baseclass_0.baseclass_0.baseclass_8,
                  67,
                  &v1->m_uiInventoryIndex,
                  &v1->baseclass_0.baseclass_0.baseclass_8);
                v1->baseclass_0.baseclass_0.m_eTaskState = 2;
              }
            }
            else
            {
              if ( v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(signed int, unsigned int *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  52,
                  &v1->m_uiInventoryIndex,
                  &v1->baseclass_0.baseclass_0.baseclass_8);
                if ( v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(signed int, unsigned int *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    52,
                    &v1->m_uiInventoryIndex,
                    &v1->baseclass_0.baseclass_0.baseclass_8);
              }
              v1->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v1->baseclass_0.baseclass_0.baseclass_8,
                52,
                &v1->m_uiInventoryIndex,
                &v1->baseclass_0.baseclass_0.baseclass_8);
              v1->baseclass_0.baseclass_0.m_eTaskState = 2;
            }
          }
        }
      }
      return;
    }
  }
  if ( !*(_DWORD *)((char *)v26 + 118) )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v18->baseclass_0.vfptr[1].__vecDelDtor)(v18) == 13 )
    {
      v1->m_eState = 5;
      if ( v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          53,
          &v1->m_uiInventoryIndex,
          &v1->baseclass_0.baseclass_0.baseclass_8);
        if ( v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            53,
            &v1->m_uiInventoryIndex,
            &v1->baseclass_0.baseclass_0.baseclass_8);
      }
      v1->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_8,
        53,
        &v1->m_uiInventoryIndex,
        &v1->baseclass_0.baseclass_0.baseclass_8);
      v1->baseclass_0.baseclass_0.m_eTaskState = 2;
      return;
    }
    if ( !*(_DWORD *)((char *)v26 + 118) )
    {
      v49 = pkItem->m_pkViewInfo;
      if ( !v49 )
        return;
      if ( !strcmp(v49->InxName, "ProposeRing") )
      {
        v1->m_eState = 5;
        v50 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
        if ( v50 )
        {
          if ( !Char::IsNPC((Char *)g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0])
            && !(unsigned __int8)(*(int (__thiscall **)(unsigned int))(*(_DWORD *)v50 + 32))(v50) )
          {
            (*(void (__thiscall **)(unsigned int))(*(_DWORD *)v50 + 84))(v50);
            v57 = -1865630753;
LABEL_131:
            v54 = TextData::Get(v57);
            v55 = MsgBox::Modal(MSGBOX_OKCANCEL, v54);
            ((void (__stdcall *)(IDirectMessenger *))v55->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_8);
            return;
          }
        }
      }
    }
  }
  v51 = pkItem;
  if ( (unsigned __int8)((int (__thiscall *)(Item *))pkItem->baseclass_0.vfptr[1].__vecDelDtor)(pkItem) == 22 )
  {
    if ( (unsigned __int8)((int (__cdecl *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[15].SetAbStateProperty)(v59) )
    {
      v52 = RidePetTable::GetByID(g_pkMainChar->m_kRidePetCtl.m_uiID);
      if ( v52 )
      {
        if ( v52->UseTime || (v53 = v52->FeedType, !strcmp(v52->FeedType, "-")) )
        {
          v58 = 0;
          v56 = 1906944922;
          goto LABEL_8;
        }
        if ( strcmp(v51->m_pkInfo->InxName, v53) )
        {
          v58 = 0;
          v56 = -1141985811;
          goto LABEL_8;
        }
      }
    }
  }
  kProto.invenslot = LOBYTE(v1->m_uiInventoryIndex);
  kProto.invenType = 9;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x15u, &kProto, 2);
  v1->m_bCompleteRecved = 0;
}
// A85C00: using guessed type int __security_cookie;
// A988D0: using guessed type int InventoryWin__ms_uiMode;
// AA501C: using guessed type int dword_AA501C;

//----- (006AD1D0) --------------------------------------------------------
void __thiscall ItemUseTask::DirectMessage(ItemUseTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ItemUseTask *v4; // edi@1
  int v5; // eax@8
  char *v6; // ebx@8
  Item *v7; // esi@9
  char *v8; // eax@11
  GuildNameChangeWin *v9; // esi@11
  char *v10; // eax@11
  PgFrameWork *v11; // eax@11
  boost::_bi::bind_t<void,boost::_mfi::mf2<void,GameFrameWork,int,int>,boost::_bi::list3<boost::_bi::value<GameFrameWork *>,boost::arg<1>,boost::_bi::value<unsigned int> > > v12; // ST00_16@11
  char *v13; // eax@13
  GuildCombatPropensityChangeWin *v14; // esi@13
  PgFrameWork *v15; // eax@13
  boost::_bi::bind_t<void,boost::_mfi::mf2<void,GameFrameWork,int,int>,boost::_bi::list3<boost::_bi::value<GameFrameWork *>,boost::arg<1>,boost::_bi::value<unsigned int> > > v16; // ST00_16@13
  char *v17; // eax@13
  ItemInfo *v18; // ecx@14
  bool v19; // zf@14
  ItemViewInfo *v20; // eax@16
  ItemFuncEnum v21; // ecx@17
  const char *v22; // esi@19
  PgFrameWork *v23; // ebx@32
  EnchantGemDeleteWin *v24; // esi@32
  PgFrameWork *v25; // esi@42
  NiPoint3 *v26; // eax@43
  mhRepairObjWin *v27; // ecx@43
  char *v28; // eax@46
  unsigned int v29; // eax@51
  Item *v30; // eax@52
  ItemInfo *v31; // eax@53
  PgFrameWork *v32; // esi@55
  boost::function<void __cdecl(char const *),std::allocator<void> > v33; // [sp-Ch] [bp-2Ch]@11
  char *v34; // [sp-8h] [bp-28h]@13
  char *v35; // [sp-4h] [bp-24h]@13
  __int64 v36; // [sp+14h] [bp-Ch]@11
  ItemInfo *pkItemInfo; // [sp+1Ch] [bp-4h]@14

  v4 = this;
  if ( iMsgTag == 27 )
  {
    if ( !pvBody )
      return;
    if ( *(_DWORD *)pvBody )
    {
      if ( *(_DWORD *)pvBody == 1 )
      {
        v29 = *(_DWORD *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        if ( v29 < 0xC0 )
        {
          v30 = g_kInventory.m_aspInv[v29].m_pObject;
          if ( v30 )
          {
            v31 = v30->m_pkInfo;
            if ( v31 )
            {
              if ( v31->ItemFunc == 2 )
              {
                v32 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                mhRepairObjWin::SetRepairKitSlot(*(mhRepairObjWin **)&v32[30].m_bInit, 0);
                InventoryWin::UnLockAllItem((InventoryWin *)v32[19].m_BackFrameID);
              }
            }
          }
        }
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
    }
    else
    {
      v5 = *(_DWORD *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
      v6 = (char *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator;
      iMsgTag = v5;
      if ( (unsigned int)v5 >= 0xC0 || (v7 = g_kInventory.m_aspInv[v5].m_pObject, (pvBody = v7) == 0) )
        goto LABEL_5;
      if ( ItemUseTask::ItemNameCheck((ItemUseTask *)((char *)this - 8), v7, "GuildName") )
      {
        v8 = TextData2::Get(0xC6E5A5D5u);
        v9 = GuildNameChangeWin::Modeless(v8);
        v10 = TextData2::Get(0x68E2CED0u);
        GuildNameChangeWin::SetCommentText(v9, v10);
        v11 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        HIDWORD(v36) = *(_DWORD *)v6;
        iMsgTag = (int)&v33;
        v12.f_.f_ = (void (__thiscall *)(GameFrameWork *, int, int))GameFrameWork::NcGuildRenameReq;
        v12.l_.a1_.t_ = (GameFrameWork *)v11;
        *(_QWORD *)&v12.l_.a2_.dummy[0] = v36;
        boost::function<void___cdecl__char_const____std::allocator<void>>::function<void___cdecl__char_const____std::allocator<void>>(
          (boost::function<void __cdecl(int),std::allocator<void> > *)&v33,
          v12,
          0);
        GuildNameChangeWin::RegisterCallBack(v9, v33);
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
        return;
      }
      if ( ItemUseTask::ItemNameCheck((ItemUseTask *)((char *)v4 - 8), v7, "GuildTendency") )
      {
        v13 = TextData2::Get(0x2A3B081Cu);
        v14 = GuildCombatPropensityChangeWin::Modeless(v13);
        v15 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        HIDWORD(v36) = *(_DWORD *)v6;
        iMsgTag = (int)&v33;
        v16.f_.f_ = GameFrameWork::NcGuildRetypeReq;
        v16.l_.a1_.t_ = (GameFrameWork *)v15;
        *(_QWORD *)&v16.l_.a2_.dummy[0] = v36;
        boost::function<void___cdecl__char_const____std::allocator<void>>::function<void___cdecl__char_const____std::allocator<void>>(
          (boost::function<void __cdecl(int),std::allocator<void> > *)&v33,
          v16,
          0);
        GuildCombatPropensityChangeWin::RegisterCallBack(
          v14,
          (boost::function<void __cdecl(int),std::allocator<void> >)v33);
        v35 = TextData2::Get(0xDAD2CFCFu);
        v34 = TextData2::Get(0x354C4285u);
        v17 = TextData2::Get(0x9497CCD3u);
        GuildCombatPropensityChangeWin::SetTextMsg(v14, v17, v34, v35);
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
        return;
      }
      v18 = v7->m_pkInfo;
      v19 = v18->Type == 0;
      pkItemInfo = v7->m_pkInfo;
      if ( v19 )
      {
        GameFrameWork::NcItemEquipReq((GameFrameWork *)v4->m_uiCoolTime, *v6);
        LOBYTE(v4->m_eState) = 0;
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
        return;
      }
      v20 = v7->m_pkViewInfo;
      if ( !v20 )
        goto LABEL_5;
      v21 = v18->ItemFunc;
      if ( v21 == 4 || v21 == 5 )
      {
        ItemUseTask::NcUserConnectionChangeIDItemUseReq((ItemUseTask *)((char *)v4 - 8), iMsgTag);
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
      else
      {
        v22 = v20->InxName;
        if ( strcmp(v20->InxName, "Roar") )
        {
          if ( strcmp(v22, "GoddessWing") )
          {
            if ( !strcmp(v22, "EnchantSocketAdd") )
            {
              ItemUseTask::OnUseItemAddSocket((ItemUseTask *)((char *)v4 - 8), (Item *)pvBody, iMsgTag);
              v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
              return;
            }
            if ( strcmp(pkItemInfo->InxName, "EnchantSocketReload") )
            {
              if ( !strcmp(pkItemInfo->InxName, "RandomOption_Recover") )
              {
                ItemUseTask::OnUseItemRandomOptRecoveryCount((ItemUseTask *)((char *)v4 - 8), (Item *)pvBody, iMsgTag);
                v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
                return;
              }
              if ( pkItemInfo->ItemFunc == 1 )
              {
                ItemUseTask::OnUseItemRepairKit((ItemUseTask *)((char *)v4 - 8), (Item *)pvBody, iMsgTag);
                v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
                return;
              }
              if ( ItemUseTask::UsePutOnBelongClear((ItemUseTask *)((char *)v4 - 8), (Item *)pvBody, iMsgTag) == 1 )
                goto LABEL_5;
              if ( pkItemInfo->ItemFunc == 2 )
              {
                v25 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                if ( dword_AA501C == 2 )
                {
                  MiniHouseIndoor::SetState(&g_kWorld.m_MiniHouseIndoorMode, MH_STATE_REPAIR);
                  v26 = (NiPoint3 *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)();
                  SoundMgr::CreateSound(&g_kSoundMgr, "SFX_EndureKit", v26);
                  v27 = *(mhRepairObjWin **)&v25[30].m_bInit;
                  if ( v27 && v25[19].m_BackFrameID )
                  {
                    mhRepairObjWin::SetRepairKitSlot(v27, *v6);
                    InventoryWin::LockAllItem((InventoryWin *)v25[19].m_BackFrameID);
                    v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
                    return;
                  }
                }
                else
                {
                  v28 = TextData2::Get(0x746155E1u);
                  GameFrameWork::AddSysMsg((GameFrameWork *)v25, v28);
                }
                v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
              }
              else
              {
                LOBYTE(iMsgTag) = *v6;
                BYTE1(iMsgTag) = 9;
                NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x15u, &iMsgTag, 2);
                LOBYTE(v4->m_eState) = 0;
              }
            }
            else
            {
              v23 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
              v24 = (EnchantGemDeleteWin *)v23[27].m_kMsgQ.m_pBase;
              if ( Inventory::FindEnchantSoketReload(&g_kInventory, (ITEM_INVEN *)&iMsgTag) && v24 )
              {
                GameFrameWork::CloseEnchantGemWin((GameFrameWork *)v23, 1, 1);
                EnchantGemDeleteWin::SetClearItemInven(v24, (ITEM_INVEN *)&iMsgTag);
                PgWinMgr::ShowWin(&Pgg_kWinMgr, &v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
              }
              v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
            }
          }
          else
          {
            if ( v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
            {
              (*(void (__stdcall **)(signed int, NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >::AntiBloatAllocator *, ItemUseTask *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 4))(
                53,
                &v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator,
                v4);
              if ( v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
                (*(void (__stdcall **)(signed int, NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >::AntiBloatAllocator *, ItemUseTask *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 20))(
                  53,
                  &v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator,
                  v4);
            }
            ((void (__thiscall *)(ItemUseTask *, signed int, NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >::AntiBloatAllocator *, ItemUseTask *))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
              v4,
              53,
              &v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator,
              v4);
            v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
          }
        }
        else
        {
          if ( v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
          {
            (*(void (__stdcall **)(signed int, NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >::AntiBloatAllocator *, ItemUseTask *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 4))(
              52,
              &v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator,
              v4);
            if ( v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount )
              (*(void (__stdcall **)(signed int, NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >::AntiBloatAllocator *, ItemUseTask *))(*(_DWORD *)v4->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 20))(
                52,
                &v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator,
                v4);
          }
          ((void (__thiscall *)(ItemUseTask *, signed int, NiTListBase<DFALL<NiPointer<ITask> >,NiPointer<ITask> >::AntiBloatAllocator *, ItemUseTask *))v4->baseclass_0.baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
            v4,
            52,
            &v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator,
            v4);
          v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
        }
      }
    }
  }
  else
  {
    if ( iMsgTag == 39
      && this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail == (NiTListItem<NiPointer<ITask> > *)4 )
    {
      CastingProgressWin::CastingFail((CastingProgressWin *)ItemUseTask::ms_pkCastingProgressWin);
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x19u, 0, 0);
LABEL_5:
      v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      return;
    }
  }
}
// AA501C: using guessed type int dword_AA501C;

//----- (006AD7B0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // esi@1
  unsigned int v7; // edx@1
  unsigned int v8; // edi@1
  unsigned int v9; // ebx@2
  unsigned int v10; // ecx@5
  unsigned int v11; // ebx@5
  unsigned int v12; // eax@9
  unsigned int v13; // ecx@9
  unsigned int v14; // edx@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@16
  unsigned int v16; // eax@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // ecx@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // eax@24
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v19; // ecx@26
  unsigned int v20; // eax@32
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // ecx@33
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // eax@36
  unsigned int v23; // eax@38
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v24; // ecx@39
  int v25; // eax@42
  unsigned int v26; // eax@45
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v27; // ecx@46
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v28; // eax@49
  unsigned int v29; // eax@51
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v30; // ecx@52
  unsigned int v31; // eax@57
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v32; // ecx@59
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v33; // eax@62
  unsigned int v34; // ecx@64
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v35; // eax@65
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v36; // ecx@71
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v37; // eax@74
  unsigned int v38; // eax@76
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v39; // ecx@77
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v40; // eax@80
  unsigned int v41; // eax@82
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v42; // eax@86
  bool v43; // cf@91
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@92
  int v45; // [sp-10h] [bp-18h]@68
  unsigned int v46; // [sp-Ch] [bp-14h]@42
  unsigned int v47; // [sp-8h] [bp-10h]@42
  unsigned int _Nm; // [sp+10h] [bp+8h]@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Righta; // [sp+18h] [bp+10h]@83
  unsigned int _Newsize; // [sp+20h] [bp+18h]@9

  v6 = this;
  v7 = this->baseclass_0._Mysize;
  v8 = _Off;
  if ( v7 < _Off || (v9 = _Right->baseclass_0._Mysize, v9 < _Roff) )
    std::_Xout_of_range("invalid string position");
  if ( v7 - _Off < _N0 )
    _N0 = v7 - _Off;
  v10 = v9 - _Roff;
  v11 = _Count;
  if ( v10 < _Count )
    v11 = v10;
  if ( -1 - v11 <= v7 - _N0 )
    std::_Xlength_error("string too long");
  _Nm = v7 - _Off - _N0;
  v12 = v7 - _N0 + v11;
  v13 = v6->baseclass_0._Mysize;
  _Newsize = v12;
  if ( v13 < v12 )
  {
    if ( v12 > 0xFFFFFFFE )
      std::_Xlength_error("string too long");
    v14 = v6->baseclass_0._Myres;
    if ( v14 >= v12 )
    {
      if ( !v12 )
      {
        v6->baseclass_0._Mysize = 0;
        if ( v14 < 0x10 )
          v15 = v6;
        else
          v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        v15->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
    }
    else
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v6, v12, v13);
    }
  }
  if ( v6 == _Right )
  {
    if ( v11 > _N0 )
    {
      if ( _Roff > v8 )
      {
        v31 = v6->baseclass_0._Myres;
        if ( v8 + _N0 <= _Roff )
        {
          if ( v31 < 0x10 )
            v32 = v6;
          else
            v32 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
          if ( v31 < 0x10 )
            v33 = v6;
          else
            v33 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
          memmove((char *)v33 + v8 + v11, (char *)v32 + v8 + _N0, _Nm);
          v34 = v6->baseclass_0._Myres;
          if ( v34 < 0x10 )
            v35 = v6;
          else
            v35 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
          if ( v34 < 0x10 )
          {
            v47 = v11;
            v46 = (unsigned int)((char *)v35 + _Roff - _N0 + v11);
            v45 = (int)((char *)v6 + v8);
          }
          else
          {
            v47 = v11;
            v46 = (unsigned int)((char *)v35 + _Roff - _N0 + v11);
            v45 = v8 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
          }
          goto LABEL_90;
        }
        if ( v31 < 0x10 )
          v36 = v6;
        else
          v36 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v31 < 0x10 )
          v37 = v6;
        else
          v37 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        memmove((char *)v37 + v8, (char *)v36 + _Roff, _N0);
        v38 = v6->baseclass_0._Myres;
        if ( v38 < 0x10 )
          v39 = v6;
        else
          v39 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v38 < 0x10 )
          v40 = v6;
        else
          v40 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        memmove((char *)v40 + v8 + v11, (char *)v39 + v8 + _N0, _Nm);
        v41 = v6->baseclass_0._Myres;
        if ( v41 < 0x10 )
          _Righta = v6;
        else
          _Righta = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v41 < 0x10 )
          v42 = v6;
        else
          v42 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        v47 = v11 - _N0;
        v25 = (int)((char *)v42 + v8 + _N0);
        v46 = (unsigned int)((char *)_Righta + _Roff + v11);
      }
      else
      {
        v26 = v6->baseclass_0._Myres;
        if ( v26 < 0x10 )
          v27 = v6;
        else
          v27 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v26 < 0x10 )
          v28 = v6;
        else
          v28 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        memmove((char *)v28 + v8 + v11, (char *)v27 + v8 + _N0, _Nm);
        v29 = v6->baseclass_0._Myres;
        if ( v29 < 0x10 )
          v30 = v6;
        else
          v30 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v29 < 0x10 )
        {
          v47 = v11;
          v46 = (unsigned int)((char *)v30 + _Roff);
          v25 = (int)((char *)v6 + v8);
        }
        else
        {
          v47 = v11;
          v46 = (unsigned int)((char *)v30 + _Roff);
          v25 = v8 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
        }
      }
    }
    else
    {
      v20 = v6->baseclass_0._Myres;
      if ( v20 < 0x10 )
        v21 = v6;
      else
        v21 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v20 < 0x10 )
        v22 = v6;
      else
        v22 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
      memmove((char *)v22 + v8, (char *)v21 + _Roff, v11);
      v23 = v6->baseclass_0._Myres;
      if ( v23 < 0x10 )
        v24 = v6;
      else
        v24 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v23 < 0x10 )
      {
        v47 = _Nm;
        v46 = (unsigned int)((char *)v24 + v8 + _N0);
        v25 = (int)((char *)v6 + v8 + v11);
      }
      else
      {
        v47 = _Nm;
        v46 = (unsigned int)((char *)v24 + v8 + _N0);
        v25 = v11 + v8 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
      }
    }
    v45 = v25;
LABEL_90:
    memmove((char *)v45, (char *)v46, v47);
    goto LABEL_91;
  }
  v16 = v6->baseclass_0._Myres;
  if ( v16 < 0x10 )
    v17 = v6;
  else
    v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v16 < 0x10 )
    v18 = v6;
  else
    v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
  memmove((char *)v18 + v8 + v11, (char *)v17 + v8 + _N0, _Nm);
  v19 = _Right;
  if ( _Right->baseclass_0._Myres >= 0x10 )
    v19 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v6->baseclass_0._Myres < 0x10 )
    memcpy((char *)v6 + v8, (char *)v19 + _Roff, v11);
  else
    memcpy((char *)(v8 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0]), (char *)v19 + _Roff, v11);
LABEL_91:
  v43 = v6->baseclass_0._Myres < 0x10;
  v6->baseclass_0._Mysize = _Newsize;
  if ( v43 )
  {
    result = v6;
    v6->baseclass_0.___u0.baseclass_0.dummy[_Newsize] = 0;
  }
  else
  {
    *(_BYTE *)(*(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] + _Newsize) = 0;
    result = v6;
  }
  return result;
}

//----- (006ADAD0) --------------------------------------------------------
boost::detail::function::unusable *__cdecl boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_char_const___int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>_void_char_const__>::invoke(boost::detail::function::unusable *result, boost::detail::function::any_pointer function_obj_ptr, int a0)
{
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD))function_obj_ptr.obj_ptr)(
    *((_DWORD *)function_obj_ptr.obj_ptr + 1),
    a0,
    *((_DWORD *)function_obj_ptr.obj_ptr + 3));
  return result;
}

//----- (006ADAF0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, unsigned int _N0, const char *_Ptr, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // esi@1
  unsigned int v6; // edx@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // ecx@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // ecx@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@12
  unsigned int v10; // edx@13
  unsigned int v11; // ebx@15
  unsigned int v12; // ecx@17
  unsigned int v13; // eax@19
  unsigned int v14; // edx@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // edi@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // edx@24
  unsigned int v17; // edi@29
  unsigned int v18; // edx@31
  unsigned int v19; // edx@34
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v20; // eax@35
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // eax@46
  bool v22; // cf@48
  unsigned int _Nm; // [sp+8h] [bp-4h]@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_N0a; // [sp+18h] [bp+Ch]@42

  v5 = this;
  if ( !_Ptr )
    goto LABEL_54;
  v6 = this->baseclass_0._Myres;
  if ( v6 >= 0x10 )
    this = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (unsigned int)_Ptr < (unsigned int)this
    || (v6 < 0x10 ? (v7 = v5) : (v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0]),
        (unsigned int)((char *)v7 + v5->baseclass_0._Mysize) <= (unsigned int)_Ptr) )
  {
LABEL_54:
    v10 = v5->baseclass_0._Mysize;
    if ( v10 < _Off )
      std::_Xout_of_range("invalid string position");
    v11 = _N0;
    if ( v10 - _Off < _N0 )
      v11 = v10 - _Off;
    v12 = _Count;
    if ( -1 - _Count <= v10 - v11 )
      std::_Xlength_error("string too long");
    v13 = v10 - _Off - v11;
    _Nm = v10 - _Off - v11;
    if ( _Count < v11 )
    {
      v14 = v5->baseclass_0._Myres;
      if ( v14 < 0x10 )
        v15 = v5;
      else
        v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v14 < 0x10 )
        v16 = v5;
      else
        v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
      memmove((char *)v16 + _Off + _Count, (char *)v15 + _Off + v11, v13);
      v12 = _Count;
    }
    if ( v12 || v11 )
    {
      v17 = v12 + v5->baseclass_0._Mysize - v11;
      if ( v17 > 0xFFFFFFFE )
        std::_Xlength_error("string too long");
      v18 = v5->baseclass_0._Myres;
      if ( v18 >= v17 )
      {
        if ( !v17 )
        {
          v5->baseclass_0._Mysize = 0;
          if ( v18 < 0x10 )
          {
            result = v5;
            v5->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            **(_BYTE **)&v5->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            result = v5;
          }
          return result;
        }
        goto LABEL_33;
      }
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v5, v17, v5->baseclass_0._Mysize);
      v12 = _Count;
      if ( v17 )
      {
LABEL_33:
        if ( v11 < v12 )
        {
          v19 = v5->baseclass_0._Myres;
          if ( v19 < 0x10 )
            v20 = v5;
          else
            v20 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
          if ( v19 < 0x10 )
            _N0a = v5;
          else
            _N0a = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
          memmove((char *)_N0a + _Off + v12, (char *)v20 + _Off + v11, _Nm);
          v12 = _Count;
        }
        if ( v5->baseclass_0._Myres < 0x10 )
          v21 = v5;
        else
          v21 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
        memcpy((char *)v21 + _Off, (char *)_Ptr, v12);
        v22 = v5->baseclass_0._Myres < 0x10;
        v5->baseclass_0._Mysize = v17;
        if ( !v22 )
        {
          *(_BYTE *)(*(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0] + v17) = 0;
          return v5;
        }
        v5->baseclass_0.___u0.baseclass_0.dummy[v17] = 0;
        return v5;
      }
    }
    return v5;
  }
  if ( v6 < 0x10 )
    v8 = v5;
  else
    v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(
           v5,
           _Off,
           _N0,
           v5,
           _Ptr - (const char *)v8,
           _Count);
}

//----- (006ADCC0) --------------------------------------------------------
void __thiscall boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_char_const___int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>>(boost::function1<void,int,std::allocator<void> > *this, boost::_bi::bind_t<void,boost::_mfi::mf2<void,GameFrameWork,int,int>,boost::_bi::list3<boost::_bi::value<GameFrameWork *>,boost::arg<1>,boost::_bi::value<unsigned int> > > f)
{
  boost::function1<void,int,std::allocator<void> > *v2; // esi@1
  void *v3; // eax@2
  NiUnsharedGeometryGroup thisa; // [sp+4h] [bp-20h]@1
  unsigned int v5; // [sp+10h] [bp-14h]@1
  int (__thiscall **pExceptionObject)(void *, char); // [sp+14h] [bp-10h]@5
  char *_What; // [sp+20h] [bp-4h]@5

  v2 = this;
  thisa.baseclass_0.m_uiRefCount = (unsigned int)f.l_.a1_.t_;
  thisa.baseclass_0.vfptr = (NiGeometryGroupVtbl *)f.f_.f_;
  thisa.baseclass_0.m_pkD3DDevice = *(IDirect3DDevice9 **)&f.l_.a2_.dummy[0];
  v5 = f.l_.a3_.t_;
  if ( !NiD3DTimeSyncController::CanBeExtracted(&thisa) )
  {
    v2->invoker = boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_char_const___int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>_void_char_const__>::invoke;
    v2->baseclass_0.manager = boost::detail::function::functor_manager<boost::_bi::bind_t<void_boost::_mfi::mf1<void_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>_std::allocator<void>>::manage;
    v3 = operator new(0x10u);
    if ( !v3 )
    {
      _What = 0;
      std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
      pExceptionObject = &std::bad_alloc::_vftable_;
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
    }
    *(_DWORD *)v3 = thisa.baseclass_0.vfptr;
    *((_DWORD *)v3 + 1) = thisa.baseclass_0.m_uiRefCount;
    *((_DWORD *)v3 + 2) = thisa.baseclass_0.m_pkD3DDevice;
    *((_DWORD *)v3 + 3) = v5;
    v2->baseclass_0.functor.obj_ptr = v3;
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006ADD60) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > _First, std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char> > _Last, const char *_Ptr)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // esi@2
  unsigned int v5; // ecx@5
  unsigned int v6; // esi@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *thisa; // [sp+Ch] [bp-4h]@1

  thisa = this;
  if ( this->baseclass_0._Myres < 0x10 )
    v4 = this;
  else
    v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( _Last )
    v5 = *(_DWORD *)&_Last - *(_DWORD *)&_First;
  else
    v5 = 0;
  if ( _First )
    v6 = *(_DWORD *)&_First - (_DWORD)v4;
  else
    v6 = 0;
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::replace(thisa, v6, v5, _Ptr, strlen(_Ptr));
}

//----- (006ADDC0) --------------------------------------------------------
void __thiscall boost::function<void___cdecl__char_const____std::allocator<void>>::function<void___cdecl__char_const____std::allocator<void>>(boost::function<void __cdecl(int),std::allocator<void> > *this, boost::_bi::bind_t<void,boost::_mfi::mf2<void,GameFrameWork,int,int>,boost::_bi::list3<boost::_bi::value<GameFrameWork *>,boost::arg<1>,boost::_bi::value<unsigned int> > > f, int __formal)
{
  boost::_bi::bind_t<void,boost::_mfi::mf2<void,GameFrameWork,int,int>,boost::_bi::list3<boost::_bi::value<GameFrameWork *>,boost::arg<1>,boost::_bi::value<unsigned int> > > v3; // ST00_16@1

  this->baseclass_0.baseclass_0.manager = 0;
  this->baseclass_0.baseclass_0.functor.obj_ptr = 0;
  this->baseclass_0.invoker = 0;
  *(_QWORD *)&v3.f_.f_ = *(_QWORD *)&f;
  *(_QWORD *)&v3.l_.a2_.dummy[0] = *(_QWORD *)&f.l_.a2_.dummy[0];
  boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_char_const___int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>>(
    &this->baseclass_0,
    v3);
}

//----- (006ADE00) --------------------------------------------------------
const unsigned int __thiscall EntryInfo::GetTotalBettingMoney(EntryInfo *this)
{
  const unsigned int result; // eax@1
  char *v2; // ecx@1
  signed int v3; // esi@1
  int v4; // edx@2
  int v5; // edx@4
  int v6; // edx@8

  result = 0;
  v2 = (char *)&this->m_BettingInfo.nBetMoney[2];
  v3 = 13;
  do
  {
    v4 = *((_DWORD *)v2 - 2);
    if ( v4 )
      result += v4;
    v5 = *((_DWORD *)v2 - 1);
    if ( v5 )
      result += v5;
    if ( *(_DWORD *)v2 )
      result += *(_DWORD *)v2;
    v6 = *((_DWORD *)v2 + 1);
    if ( v6 )
      result += v6;
    v2 += 16;
    --v3;
  }
  while ( v3 );
  return result;
}

//----- (006ADE40) --------------------------------------------------------
void __thiscall MHDiceGameTask::OpenDiceWin(MHDiceGameTask *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenDiceGameWin((GameFrameWork *)v1);
}

//----- (006ADE60) --------------------------------------------------------
void __thiscall MHDiceGameTask::OpenHelpWin(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkDiceHelpWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v1->m_pkDiceHelpWin->baseclass_0.baseclass_0.baseclass_0);
  else
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkDiceHelpWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (006ADEA0) --------------------------------------------------------
void __thiscall MHDiceGameTask::OpenDiceRateWin(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkDiceRateSheetWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v1->m_pkDiceRateSheetWin->baseclass_0.baseclass_0.baseclass_0);
  else
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkDiceRateSheetWin->baseclass_0.baseclass_0.baseclass_0);
}

//----- (006ADEE0) --------------------------------------------------------
void __thiscall MHDiceGameTask::OnCloseWin(MHDiceGameTask *this, PgWin *pkWin)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, pkWin);
}

//----- (006ADEF0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_RESULT_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_RESULT_CMD *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  MiniHouseDiceGameWin *v3; // ecx@2

  v2 = this;
  if ( pkProto->nError == 7400 )
  {
    this->m_eDiceSaiGameStatus = 3;
    DiceTaiSai::ConvertDice(&this->m_DiceTaiSai, pkProto->nDiceInfo.nNumber, &this->m_nDiceVariety);
    v2->m_DiceAniCode[0] = 100 * pkProto->nDiceInfo.nNumber[0];
    v2->m_DiceAniCode[1] = 100 * pkProto->nDiceInfo.nNumber[1];
    v3 = v2->m_pkDiceGameWin;
    v2->m_DiceAniCode[2] = 100 * pkProto->nDiceInfo.nNumber[2];
    MiniHouseDiceGameWin::DiceAnimationStart(v3, v2->m_DiceAniCode);
  }
  return 1;
}

//----- (006ADF70) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_CMD *pkProto)
{
  int result; // eax@1

  result = 1;
  if ( pkProto->nError == 7392 )
    this->m_eDiceSaiGameStatus = 2;
  return result;
}

//----- (006ADFA0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RANK_REQ *pkProto)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 0x16u, 0, 0);
  return 1;
}

//----- (006ADFC0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_REQ *pkProto)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 0x20u, 0, 0);
  return 1;
}

//----- (006ADFE0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_REQ *pkProto)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 0xBu, pkProto, 2);
  return 1;
}

//----- (006AE000) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_REQ *pkProto)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 0xFu, pkProto, 2);
  return 1;
}

//----- (006AE020) --------------------------------------------------------
bool __thiscall MHDiceGameTask::IsDicegamePlaying(MHDiceGameTask *this)
{
  return this->m_bIsEnterGameRoom;
}

//----- (006AE030) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_LARGE_AMOUNT_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_REQ *pkProto)
{
  if ( pkProto )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 0x28u, pkProto, 4);
  return 1;
}

//----- (006AE060) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_LARGE_AMOUNT_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_ACK *pkProto)
{
  return 1;
}

//----- (006AE070) --------------------------------------------------------
bool __thiscall MHDiceGameTask::IsGambleMode(MHDiceGameTask *this)
{
  MHDiceGameTask::DICE_GAME_MODE v1; // eax@1

  v1 = this->m_eDiceGameMode;
  return v1 == 2 || v1 == 4;
}

//----- (006AE090) --------------------------------------------------------
void __cdecl MHDiceGameTask::Terminate()
{
  int v0; // esi@1

  v0 = MHDiceGameTask::ms_spMHDiceGameTask;
  if ( MHDiceGameTask::ms_spMHDiceGameTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(MHDiceGameTask::ms_spMHDiceGameTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    MHDiceGameTask::ms_spMHDiceGameTask = 0;
  }
}
// B6797C: using guessed type int MHDiceGameTask__ms_spMHDiceGameTask;

//----- (006AE0D0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_REQ(MHDiceGameTask *this)
{
  PgFrameWork *v1; // eax@2
  int result; // eax@2

  if ( this->m_bInitialFinished )
  {
    if ( !this->m_bIsEnterGameRoom )
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 1u, 0, 0);
    result = 1;
  }
  else
  {
    v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1, "Initialize Failed. Join not enable");
    result = 0;
  }
  return result;
}

//----- (006AE120) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_TIMER_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_TIMER_CMD *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  MiniHouseDiceGameWin *v3; // eax@2
  PgWinSpr *v4; // ebx@2
  PgWinSpr *v5; // edi@2
  float v6; // ST10_4@2
  int v7; // eax@2
  float v8; // ST14_4@2
  MiniHouseDiceGameWin *v9; // eax@2
  PgWinSpr *v10; // edi@2
  PgWinSpr *v11; // ebx@2
  float v12; // ST10_4@2
  signed int v13; // eax@2
  float v14; // ST14_4@2
  MiniHouseDiceGameWin *v15; // esi@2
  PgWinSpr *v16; // edi@2
  int (*v17)(void); // edx@2
  NiRefObjectVtbl *v18; // esi@2
  int v19; // eax@2
  int result; // eax@2

  v2 = this;
  if ( pkProto->bIsStart )
  {
    this->m_nLengthInOneGame = pkProto->nTimer / 10;
    result = 1;
  }
  else
  {
    this->m_IsClockCastPlaying = 0;
    this->m_IsClockAlramPlaying = 0;
    this->m_fTimerPosOnPregress = 0.0;
    v3 = this->m_pkDiceGameWin;
    this->m_fClockAlramTime = 0.0;
    v4 = v3->m_spTimer.m_pObject;
    v5 = v3->m_spTimerFill.m_pObject;
    v6 = (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3->m_spTimerFill.m_pObject)
       - 8.0;
    v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5)
       - 10;
    v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v6;
    v8 = (double)v7;
    v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v8;
    v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
    v9 = v2->m_pkDiceGameWin;
    v10 = v9->m_spTimerFill.m_pObject;
    v11 = v9->m_spTimerBack.m_pObject;
    v12 = (double)((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v9->m_spTimerFill.m_pObject);
    v13 = ((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v10);
    v11->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v12;
    v14 = (double)v13;
    v11->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v14;
    v11->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
    v15 = v2->m_pkDiceGameWin;
    v16 = v15->m_spTimerBack.m_pObject;
    v17 = (int (*)(void))v15->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
    v18 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = v17();
    v18[117].__vecDelDtor((NiRefObject *)v16, v19);
    ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
    result = 1;
  }
  return result;
}

//----- (006AE270) --------------------------------------------------------
void __thiscall MHDiceGameTask::DirectMessage(MHDiceGameTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  MHDiceGameTask *v4; // edi@1
  int v5; // esi@5
  int v6; // eax@10
  float v7; // esi@14
  float v8; // esi@19
  unsigned __int16 v9; // [sp-14h] [bp-18h]@12
  unsigned __int16 v10; // [sp-10h] [bp-14h]@12
  void *v11; // [sp-Ch] [bp-10h]@12
  int v12; // [sp-8h] [bp-Ch]@12

  v4 = this;
  if ( iMsgTag != 27 || !pvBody )
    return;
  if ( *(_DWORD *)pvBody )
  {
    if ( *(_DWORD *)pvBody != 1 || COERCE_SIGNED_INT(v8 = this->m_kTimer.m_fElapsedTime) == 0 )
      return;
    if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v8) + 4)) && LODWORD(v8) )
      (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v8))(LODWORD(v8), 1);
    goto LABEL_23;
  }
  if ( !*(_DWORD *)&this->m_bIsGusetStatus )
  {
    v6 = LODWORD(this->m_nInvenRemainMoney);
    if ( v6 == 2 || v6 == 4 )
    {
      v12 = 0;
      v11 = 0;
      v10 = 104;
      v9 = 47;
    }
    else
    {
      v12 = 0;
      v11 = 0;
      v10 = 5;
      v9 = 43;
    }
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, v9, v10, v11, v12);
    PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v7 = v4->m_kTimer.m_fElapsedTime;
    if ( !LODWORD(v7) )
      return;
    if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v7) + 4)) && LODWORD(v7) )
    {
      (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v7))(LODWORD(v7), 1);
      LODWORD(v4->m_kTimer.m_fElapsedTime) = 0;
      return;
    }
LABEL_23:
    LODWORD(v4->m_kTimer.m_fElapsedTime) = 0;
    return;
  }
  v5 = *(_DWORD *)&this->m_bIsGusetStatus;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
    {
      if ( v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    }
    *(_DWORD *)&v4->m_bIsGusetStatus = 0;
  }
}

//----- (006AE390) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  int result; // eax@4
  PgFrameWork *v4; // esi@6
  char *v5; // eax@6

  v2 = this;
  if ( pkProto->nError == 7376 )
  {
    if ( this->m_eDiceSaiGameStatus == 1 )
    {
      ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->StopAllSound)();
      ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
    }
    v2->m_eDiceSaiGameStatus = 2;
    result = 1;
  }
  else
  {
    if ( pkProto->nError == 7384 )
    {
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v5 = ErrMsgTable::GetErrMsg(pkProto->nError);
      GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
    }
    result = 1;
  }
  return result;
}

//----- (006AE420) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_ACK *pkProto)
{
  PgFrameWork *v2; // eax@1

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, (PgWin *)v2[21].m_kMsgQ.m_uiTail);
  return 1;
}

//----- (006AE450) --------------------------------------------------------
void __thiscall MHDiceGameTask::UpdateDiceTaisaiGame(MHDiceGameTask *this, float fTime)
{
  MHDiceGameTask *v2; // esi@1
  MHDiceGameTask::DICE_GAME_MODE v3; // eax@1
  void *v4; // ecx@4

  v2 = this;
  v3 = this->m_eDiceGameMode;
  if ( v3 != 2 && v3 != 4 )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      return;
    v4 = v2->m_pkDiceGameWin;
  }
  else
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      return;
    v4 = v2->m_pkGambleDiceGameWin;
  }
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 324))(LODWORD(fTime));
}

//----- (006AE4B0) --------------------------------------------------------
void __thiscall MHDiceGameTask::OnStart(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  DICE_Dividind *v2; // eax@1
  DICE_Dividind *v3; // ebx@1
  DividendRate v4; // edi@3
  bool v5; // al@5
  unsigned int v6; // edi@6
  void *v7; // eax@10
  DividendRate v8; // edi@12
  bool v9; // al@15
  void *pkGBInfo; // [sp+14h] [bp-4h]@10

  v1 = this;
  this->m_eDiceSaiGameStatus = 1;
  this->m_eDiceSaiGameMode = 2;
  v2 = DiceDividIndTab::GetByIndex(0);
  v3 = v2;
  if ( v2 )
  {
    DiceTaiSai::Init(&v1->m_DiceTaiSai, v2->AnyTriple);
    v4 = 0;
    do
    {
      DiceTaiSaiDividind::Init(&v1->m_Dividind, v4, v3->DividendRate[v4]);
      ++v4;
    }
    while ( (signed int)v4 < 15 );
    v5 = DiceTaiSaiDividind::isInitFinishe(&v1->m_Dividind);
    v1->m_bInitialFinished = v5;
    if ( v5 )
    {
      v1->m_eBettingAmount = 0;
      v6 = 0;
      if ( !ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::GetTotal() )
        goto LABEL_19;
      while ( !CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable + 4),
                 v6) )
      {
        ++v6;
        if ( v6 >= ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::GetTotal() )
        {
          v1->m_bGBInitialFinished = 0;
          return;
        }
      }
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable + 4), v6);
      pkGBInfo = v7;
      if ( v7 )
      {
        v8 = 0;
        while ( 1 )
        {
          DiceTaiSaiDividind::Init(&v1->m_GBDividind, v8, *((_WORD *)v7 + v8));
          ++v8;
          if ( (signed int)v8 >= 15 )
            break;
          v7 = pkGBInfo;
        }
        v9 = DiceTaiSaiDividind::isInitFinishe(&v1->m_GBDividind);
        v1->m_bGBInitialFinished = v9;
        if ( v9 )
        {
          LODWORD(v1->m_nExchangedCoin) = 0;
          HIDWORD(v1->m_nExchangedCoin) = 0;
          LODWORD(v1->m_nExchangeableCoin) = 0;
          HIDWORD(v1->m_nExchangeableCoin) = 0;
          v1->m_eDiceGameMode = 0;
          v1->m_kDestPos.x = 0.0;
          v1->m_kDestPos.y = 0.0;
          v1->m_kDestPos.z = 0.0;
          v1->m_nNpcHandle = -1;
          v1->m_nWhereStand = 0;
          v1->m_hMobID = 260;
        }
      }
      else
      {
LABEL_19:
        v1->m_bGBInitialFinished = 0;
      }
    }
  }
  else
  {
    v1->m_bInitialFinished = 0;
  }
}
// A97E84: using guessed type int ITableBase_GB_DICE_Dividind_GBDiceDividIndTab___ms_pkTable;

//----- (006AE630) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *pkProto)
{
  PROTO_NC_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *v2; // ebx@3
  int v3; // edi@5
  unsigned int v4; // esi@5
  void *v5; // eax@9
  int result; // eax@12
  Char *pkChar; // [sp+Ch] [bp-8h]@4
  signed int i; // [sp+10h] [bp-4h]@2

  if ( pkProto && (i = 0, pkProto->nGamerCnt) )
  {
    v2 = pkProto + 3;
    while ( 1 )
    {
      pkChar = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)&v2[-2].nGamerCnt);
      if ( !pkChar )
        break;
      v3 = *(_DWORD *)&v2->nGamerCnt;
      v4 = 0;
      if ( ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
      {
        while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                                      v4)
                          + 105) != v3 )
        {
          ++v4;
          if ( v4 >= ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
            goto LABEL_11;
        }
        v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4), v4);
        if ( v5 )
          ((void (__stdcall *)(_DWORD))pkChar->baseclass_0.vfptr[14].SetAbStateProperty)(*(_BYTE *)v5);
      }
LABEL_11:
      v2 += 6;
      ++i;
      if ( i >= pkProto->nGamerCnt )
        goto LABEL_12;
    }
    result = 0;
  }
  else
  {
LABEL_12:
    result = 1;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (006AE6F0) --------------------------------------------------------
void __thiscall MHDiceGameTask::CheckBettingChip(MHDiceGameTask *this, DICE_TAISAI_BETTING idx, bool bUser)
{
  DICE_TAISAI_BETTING v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // edx@1
  signed int v6; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v7; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *j; // eax@6
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // eax@9
  MHDiceGameTask::DICE_GAME_MODE v10; // eax@15
  double v11; // st7@18
  int v12; // eax@19
  double v13; // st7@30
  int v14; // eax@31
  signed int nBettingPlayer; // [sp+Ch] [bp-4h]@1
  float fPecent; // [sp+18h] [bp+8h]@18
  float fPecenta; // [sp+18h] [bp+8h]@30

  v3 = idx;
  v4 = this->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = v4->_Left;
  v6 = 0;
  nBettingPlayer = 0;
  if ( v4->_Left != v4 )
  {
    do
    {
      if ( v5->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[idx] )
        ++v6;
      if ( !v5->_Isnil )
      {
        v7 = v5->_Right;
        if ( v7->_Isnil )
        {
          for ( i = v5->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v5 != i->_Right )
              break;
            v5 = i;
          }
          v5 = i;
        }
        else
        {
          v5 = v5->_Right;
          for ( j = v7->_Left; !j->_Isnil; j = j->_Left )
            v5 = j;
        }
      }
    }
    while ( v5 != v4 );
    nBettingPlayer = v6;
  }
  v10 = this->m_eDiceGameMode;
  if ( v10 == 1 )
  {
    if ( v6 )
    {
      fPecent = (double)nBettingPlayer / (double)this->m_nNumberOfEntrant;
      v11 = fPecent;
      if ( fPecent >= 0.2 )
      {
        if ( v11 >= 0.4 )
        {
          if ( v11 >= 0.6 )
          {
            v12 = 3;
            if ( v11 >= 0.8 )
              v12 = 4;
          }
          else
          {
            v12 = 2;
          }
        }
        else
        {
          v12 = 1;
        }
      }
      else
      {
        v12 = 0;
      }
      MiniHouseDiceGameWin::OnVisibleChip(this->m_pkDiceGameWin, v3, 1, v12, bUser);
    }
    else
    {
      MiniHouseDiceGameWin::OnVisibleChip(this->m_pkDiceGameWin, idx, 0, 0, 0);
    }
  }
  else
  {
    if ( v10 == 2 )
    {
      if ( v6 )
      {
        fPecenta = (double)nBettingPlayer / (double)this->m_nNumberOfEntrant;
        v13 = fPecenta;
        if ( fPecenta >= 0.2 )
        {
          if ( v13 >= 0.4 )
          {
            if ( v13 >= 0.6 )
            {
              v14 = 3;
              if ( v13 >= 0.8 )
                v14 = 4;
            }
            else
            {
              v14 = 2;
            }
          }
          else
          {
            v14 = 1;
          }
        }
        else
        {
          v14 = 0;
        }
        GambleDiceGameWin::OnVisibleChip(this->m_pkGambleDiceGameWin, v3, 1, v14, bUser);
      }
      else
      {
        GambleDiceGameWin::OnVisibleChip(this->m_pkGambleDiceGameWin, idx, 0, 0, 0);
      }
    }
  }
}

//----- (006AE8D0) --------------------------------------------------------
unsigned int __thiscall MHDiceGameTask::GetTotalBettingMoney(MHDiceGameTask *this, DICE_TAISAI_BETTING index)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // edx@1
  unsigned int result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *j; // ecx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // ecx@7

  v2 = this->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  result = 0;
  while ( v3 != v2 )
  {
    result += v3->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[index];
    if ( !v3->_Isnil )
    {
      v5 = v3->_Right;
      if ( v5->_Isnil )
      {
        for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
        {
          if ( v3 != i->_Right )
            break;
          v3 = i;
        }
        v3 = i;
      }
      else
      {
        v3 = v3->_Right;
        for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
          v3 = j;
      }
    }
  }
  return result;
}

//----- (006AE950) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_ACK *pkProto)
{
  int *v2; // ebx@1
  MHDiceGameTask *v3; // esi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v5; // edi@1
  int v6; // eax@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v7; // eax@4
  int v8; // ebx@4
  int v9; // ecx@5
  DICE_TAISAI_BETTING v10; // eax@7
  BETTING_LEVEL_MONEY v11; // ST0C_4@9
  MiniHouseDiceGameWin *v12; // ecx@9
  DICE_TAISAI_BETTING v13; // ST08_4@9
  unsigned int v14; // eax@9
  PgFrameWork *v15; // esi@11
  char *v16; // eax@11
  D3DXCOLOR *v17; // eax@11
  D3DXCOLOR v18; // ST04_16@11
  char *v19; // eax@11
  char v20; // [sp+Ch] [bp-1Ch]@11
  char v21; // [sp+1Ch] [bp-Ch]@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > result; // [sp+20h] [bp-8h]@1
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *thisa; // [sp+24h] [bp-4h]@1

  v2 = (int *)pkProto;
  v3 = this;
  thisa = (std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&this->map_BettingReq;
  v4 = std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::find(
         &this->map_BettingReq.baseclass_0,
         &result,
         &pkProto->nBettingIndex);
  v5 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node **)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == v3->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v6 = 0;
  }
  else
  {
    if ( *(_WORD *)v2 == 7344 )
    {
      pkProto = (PROTO_NC_DICE_TAISAI_BETTING_ACK *)g_pkMainChar->m_kHandle;
      v7 = std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
             &v3->map_ParticipantInfo.baseclass_0,
             (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&v21,
             (const unsigned __int16 *)&pkProto);
      v8 = *(_DWORD *)&v7->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v7->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v5 + 20);
        if ( v9 )
          *(_DWORD *)(v8 + 4 * *(_DWORD *)(*(_DWORD *)&v5 + 16) + 16) += v9;
      }
      v10 = *(_DWORD *)(*(_DWORD *)&v5 + 16);
      if ( *(_DWORD *)(v8 + 4 * v10 + 16) )
        MiniHouseDiceGameWin::SetMarkButton(v3->m_pkDiceGameWin, v10, BET_BETTING, 0);
      v11 = v3->m_eBettingAmount;
      v12 = v3->m_pkDiceGameWin;
      v13 = *(_DWORD *)(*(_DWORD *)&v5 + 16);
      v3->m_eDiceSaiGameStatus = 1;
      MiniHouseDiceGameWin::ChipAnimation(v12, v13, v11, 0);
      v14 = EntryInfo::GetTotalBettingMoney((EntryInfo *)(v8 + 16));
      MiniHouseDiceGameWin::SetMoneyWin(v3->m_pkDiceGameWin, v14);
    }
    else
    {
      if ( *(_WORD *)v2 == 7354 )
      {
        v15 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        v16 = ErrMsgTable::GetErrMsg(*(_WORD *)v2);
        GameFrameWork::AddSysMsg((GameFrameWork *)v15, v16);
        v17 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v20, Center_Announcement);
        *(_QWORD *)&v18.r = *(_QWORD *)&v17->r;
        *(_QWORD *)&v18.b = *(_QWORD *)&v17->b;
        v19 = ErrMsgTable::GetErrMsg(*(_WORD *)v2);
        GameFrameWork::AddAnnounceMsg((GameFrameWork *)v15, v19, COERCE_D3DXCOLOR(v18.r));
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v15[28].m_kMsgQ.m_uiHead);
      }
    }
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
      thisa,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&pkProto,
      v5);
    v6 = 1;
  }
  return v6;
}

//----- (006AEAB0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CMD *pkProto)
{
  PROTO_NC_DICE_TAISAI_BETTING_CMD *v2; // esi@1
  MHDiceGameTask *v3; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // eax@2
  unsigned int v5; // ecx@3

  v2 = pkProto;
  v3 = this;
  if ( pkProto->nPlayerHnd == g_pkMainChar->m_kHandle )
    return 1;
  v4 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&this->map_ParticipantInfo.baseclass_0, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&pkProto, &pkProto->nPlayerHnd)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v4 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v5 = v2->BettingInfo.nMoney;
    if ( v5 )
      v4->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[v2->BettingInfo.nBetting] += v5;
    v3->m_eDiceSaiGameStatus = 1;
    MHDiceGameTask::CheckBettingChip(v3, v2->BettingInfo.nBetting, 0);
    return 1;
  }
  return 0;
}

//----- (006AEB20) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK *pkProto)
{
  int *v2; // edi@1
  MHDiceGameTask *v3; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v4; // ebx@1
  int v5; // eax@2
  __int16 v6; // ax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v7; // eax@4
  int v8; // edi@4
  DICE_TAISAI_BETTING v9; // eax@6
  unsigned int v10; // eax@8
  PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK **v11; // eax@8
  PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK *v12; // ecx@8
  char v13; // bl@8
  PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK *v14; // edi@9
  signed int v15; // eax@10
  int v16; // ecx@10
  PgFrameWork *v17; // edi@17
  char *v18; // eax@17
  D3DXCOLOR *v19; // eax@17
  D3DXCOLOR v20; // ST04_16@17
  char *v21; // eax@17
  unsigned __int16 v22; // dx@17
  MiniHouseDiceGameWin *v23; // ecx@17
  PgFrameWork *v24; // esi@20
  D3DXCOLOR *v25; // eax@20
  D3DXCOLOR v26; // ST04_16@20
  char *v27; // eax@20
  PgFrameWork *v28; // esi@24
  char *v29; // eax@25
  char v30; // [sp+Ch] [bp-20h]@17
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+1Ch] [bp-10h]@4
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *thisa; // [sp+20h] [bp-Ch]@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > itr; // [sp+24h] [bp-8h]@1
  DICE_TAISAI_BETTING bettingIdx; // [sp+28h] [bp-4h]@1

  v2 = (int *)pkProto;
  v3 = this;
  thisa = (std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&this->map_BettingReq;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::find(&this->map_BettingReq.baseclass_0, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *)&bettingIdx, &pkProto->nBettingCancelIndex)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  itr = v4;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)v4 == v3->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v5 = 0;
  }
  else
  {
    v6 = *(_WORD *)v2;
    if ( *(_WORD *)v2 == 7360 )
    {
      pkProto = (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK *)g_pkMainChar->m_kHandle;
      v7 = std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
             &v3->map_ParticipantInfo.baseclass_0,
             &result,
             (const unsigned __int16 *)&pkProto);
      v8 = *(_DWORD *)&v7->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v7->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
        *(_DWORD *)(v8 + 4 * *(_DWORD *)(*(_DWORD *)&v4 + 16) + 16) -= *(_DWORD *)(*(_DWORD *)&v4 + 20);
      v9 = *(_DWORD *)(*(_DWORD *)&v4 + 16);
      if ( !*(_DWORD *)(v8 + 4 * v9 + 16) )
        MiniHouseDiceGameWin::SetMarkButton(v3->m_pkDiceGameWin, v9, 0, 0);
      bettingIdx = *(_DWORD *)(*(_DWORD *)&v4 + 16);
      v10 = EntryInfo::GetTotalBettingMoney((EntryInfo *)(v8 + 16));
      MiniHouseDiceGameWin::SetMoneyWin(v3->m_pkDiceGameWin, v10);
      v11 = (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK **)v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v12 = *v11;
      v13 = 0;
      pkProto = v12;
      if ( (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK **)v12 == v11 )
        goto LABEL_29;
      v14 = (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK *)v11;
      do
      {
        v15 = 0;
        v16 = (int)&v12[4];
        while ( !*(_DWORD *)v16 )
        {
          ++v15;
          v16 += 4;
          if ( v15 >= 52 )
            goto LABEL_15;
        }
        v13 = 1;
LABEL_15:
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *)&pkProto);
        v12 = pkProto;
      }
      while ( pkProto != v14 );
      if ( !v13 )
      {
LABEL_29:
        v17 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        v18 = TextData2::Get(0x8AA5ACB9u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v17, v18);
        v19 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v30, Center_Announcement);
        *(_QWORD *)&v20.r = *(_QWORD *)&v19->r;
        *(_QWORD *)&v20.b = *(_QWORD *)&v19->b;
        v21 = TextData2::Get(0x8AA5ACB9u);
        GameFrameWork::AddAnnounceMsg((GameFrameWork *)v17, v21, COERCE_D3DXCOLOR(v20.r));
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v17[28].m_kMsgQ.m_uiHead);
        v22 = LOWORD(v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
        v23 = v3->m_pkDiceGameWin;
        v3->m_eDiceSaiGameStatus = 0;
        v3->m_nNumberOfEntrant = v22;
        MiniHouseDiceGameWin::TurnOnLight(v23, 1, 0, 0);
      }
      MHDiceGameTask::CheckBettingChip(v3, bettingIdx, 0);
      v4 = itr;
    }
    else
    {
      if ( v6 == 7371 )
      {
        v24 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        v25 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v30, Center_Announcement);
        *(_QWORD *)&v26.r = *(_QWORD *)&v25->r;
        *(_QWORD *)&v26.b = *(_QWORD *)&v25->b;
        v27 = ErrMsgTable::GetErrMsg(*(_WORD *)v2);
        GameFrameWork::AddAnnounceMsg((GameFrameWork *)v24, v27, COERCE_D3DXCOLOR(v26.r));
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v24[28].m_kMsgQ.m_uiHead);
      }
      else
      {
        if ( 7368 == v6 || 7372 == v6 || 7369 == v6 )
        {
          v28 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v28 )
          {
            v29 = fs("%d");
            GameFrameWork::AddSysMsg((GameFrameWork *)v28, v29);
          }
        }
      }
    }
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
      thisa,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&pkProto,
      v4);
    v5 = 1;
  }
  return v5;
}

//----- (006AED90) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CANCEL_CMD *pkProto)
{
  PROTO_NC_DICE_TAISAI_BETTING_CANCEL_CMD *v2; // ebx@1
  MHDiceGameTask *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // eax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v6; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v7; // edi@4
  signed int v8; // eax@5
  int v9; // ecx@5
  PgFrameWork *v10; // edi@12
  char *v11; // eax@12
  D3DXCOLOR *v12; // eax@12
  D3DXCOLOR v13; // ST04_16@12
  char *v14; // eax@12
  unsigned __int16 v15; // dx@12
  MiniHouseDiceGameWin *v16; // ecx@12
  D3DXCOLOR result; // [sp+Ch] [bp-14h]@12
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > itr; // [sp+1Ch] [bp-4h]@3

  v2 = pkProto;
  v3 = this;
  if ( pkProto->nPlayerHnd == g_pkMainChar->m_kHandle )
    return 1;
  v4 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&this->map_ParticipantInfo.baseclass_0, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&pkProto, &pkProto->nPlayerHnd)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v4 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v4->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[v2->BettingCancelInfo.nBetting] -= v2->BettingCancelInfo.nMoney;
    v5 = v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v6 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)v5->_Left;
    BYTE3(pkProto) = 0;
    itr = v6;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v6 == v5 )
      goto LABEL_18;
    v7 = v5;
    do
    {
      v8 = 0;
      v9 = *(_DWORD *)&v6 + 16;
      while ( !*(_DWORD *)v9 )
      {
        ++v8;
        v9 += 4;
        if ( v8 >= 52 )
          goto LABEL_10;
      }
      BYTE3(pkProto) = 1;
LABEL_10:
      std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(&itr.baseclass_0.baseclass_0);
      v6 = itr;
    }
    while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)itr != v7 );
    if ( !BYTE3(pkProto) )
    {
LABEL_18:
      v10 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v11 = TextData2::Get(0x8AA5ACB9u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v10, v11);
      v12 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
      *(_QWORD *)&v13.r = *(_QWORD *)&v12->r;
      *(_QWORD *)&v13.b = *(_QWORD *)&v12->b;
      v14 = TextData2::Get(0x8AA5ACB9u);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v10, v14, COERCE_D3DXCOLOR(v13.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v10[28].m_kMsgQ.m_uiHead);
      v15 = LOWORD(v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
      v16 = v3->m_pkDiceGameWin;
      v3->m_eDiceSaiGameStatus = 0;
      v3->m_nNumberOfEntrant = v15;
      MiniHouseDiceGameWin::TurnOnLight(v16, 1, 0, 0);
    }
    MHDiceGameTask::CheckBettingChip(v3, v2->BettingCancelInfo.nBetting, 0);
    return 1;
  }
  return 0;
}

//----- (006AEEE0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_REQ(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  int v2; // edx@1
  DICE_TAISAI_GAME_STATUS v3; // ebx@1
  signed int v4; // eax@1
  int v5; // ecx@1
  char *v7; // eax@11
  MsgBox *v8; // eax@11
  PgFrameWork *v9; // esi@12
  char *v10; // eax@12
  D3DXCOLOR *v11; // eax@12
  D3DXCOLOR v12; // ST04_16@12
  char *v13; // eax@12
  char v14; // [sp+Ch] [bp-18h]@12
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+1Ch] [bp-8h]@1
  unsigned __int16 _Keyval[2]; // [sp+20h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
  v2 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
                     &this->map_ParticipantInfo.baseclass_0,
                     &result,
                     _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v3 = v1->m_eDiceSaiGameStatus;
  v4 = 0;
  v5 = v2 + 16;
  while ( !*(_DWORD *)v5 )
  {
    ++v4;
    v5 += 4;
    if ( v4 >= 52 )
      goto LABEL_4;
  }
  if ( !v1->m_spExitConfirmWin.m_pObject && v3 == 1 && !v1->m_bOutReserveOnMiniHouse )
  {
    v7 = TextData2::Get(0xCCF40DFDu);
    v8 = MsgBox::Modeless(MSGBOX_OKCANCEL, v7);
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v1->m_spExitConfirmWin,
      (NiD3DDefaultShader *)v8);
    v1->m_spExitConfirmWin.m_pObject->baseclass_e8.vfptr->SetMsgHooker(
      &v1->m_spExitConfirmWin.m_pObject->baseclass_e8,
      &v1->baseclass_0.baseclass_8);
    return 1;
  }
LABEL_4:
  if ( v3 == 2 || v3 == 3 )
  {
    *(_BYTE *)(v2 + 228) = 1;
    v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v10 = TextData2::Get(0xDFD0BFCDu);
    GameFrameWork::AddSysMsg((GameFrameWork *)v9, v10);
    v11 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v14, Center_Announcement);
    *(_QWORD *)&v12.r = *(_QWORD *)&v11->r;
    *(_QWORD *)&v12.b = *(_QWORD *)&v11->b;
    v13 = TextData2::Get(0xDFD0BFCDu);
    GameFrameWork::AddAnnounceMsg((GameFrameWork *)v9, v13, COERCE_D3DXCOLOR(v12.r));
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v9[28].m_kMsgQ.m_uiHead);
  }
  else
  {
    if ( !v1->m_spExitConfirmWin.m_pObject )
    {
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 5u, 0, 0);
      return 1;
    }
  }
  return 1;
}

//----- (006AF050) --------------------------------------------------------
void __thiscall MHDiceGameTask::OnIdle(MHDiceGameTask *this, float fTime)
{
  int v2; // edi@0
  MHDiceGameTask *v3; // esi@1
  char v4; // al@3
  char v5; // dl@5
  char v6; // dl@11
  double v7; // st7@16
  MHDiceGameTask::DICE_GAME_MODE v8; // eax@17
  MiniHouseDiceGameWin *v9; // ecx@19
  double v10; // st7@21
  float v11; // ST14_4@21
  DICE_TAISAI_GAME_STATUS v12; // eax@22
  MiniHouseDiceGameWin *v13; // ecx@31
  MiniHouseDiceGameWin *v14; // ecx@32
  DICE_TAISAI_GAME_STATUS v15; // eax@38
  DICE_TAISAI_GAME_STATUS v16; // eax@42
  int v17; // edi@43
  double v18; // st7@43
  bool v19; // c0@43
  bool v20; // c3@43
  double v21; // st7@43
  MiniHouseDiceGameWin *v22; // eax@45
  PgWinSpr *v23; // ebx@45
  NiRefObjectVtbl *v24; // edx@45
  int v25; // eax@45
  NiRefObjectVtbl *v26; // edx@45
  float v27; // ST14_4@45
  double v28; // st7@45
  void (*v29)(void); // edx@45
  MiniHouseDiceGameWin *v30; // eax@45
  PgWinSpr *v31; // edi@45
  NiAVObject *v32; // ebx@45
  float v33; // ST10_4@45
  bool v34; // zf@45
  double v35; // st7@50
  double v36; // st7@50
  double v37; // st6@50
  MiniHouseDiceGameWin *v38; // eax@54
  PgWinSpr *v39; // edi@54
  PgWinSpr *v40; // ebx@54
  signed int v41; // eax@54
  NiRefObjectVtbl *v42; // edx@54
  double v43; // st7@54
  void *(__thiscall *v44)(NiRefObject *, unsigned int); // eax@54
  signed int v45; // eax@54
  double v46; // st7@56
  DICE_TAISAI_BETTING v47; // edi@59
  int v48; // ebx@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v49; // eax@63
  int v50; // ebx@64
  signed int v51; // edi@64
  DICE_TAISAI_BETTING v52; // eax@65
  mhDiceRankWin *v53; // ecx@74
  DICE_TAISAI_BETTING v54; // edi@78
  int v55; // ebx@78
  signed int v56; // edi@82
  DICE_TAISAI_BETTING v57; // eax@83
  double v58; // st7@87
  SlotMachineWin *v59; // ecx@91
  double v60; // st7@91
  double v61; // st7@91
  float v62; // ST14_4@91
  GambleDiceGameWin *v63; // ecx@93
  double v64; // st7@95
  float v65; // ST14_4@95
  DICE_TAISAI_GAME_STATUS v66; // eax@96
  GambleDiceGameWin *v67; // ecx@105
  GambleDiceGameWin *v68; // ecx@106
  DICE_TAISAI_GAME_STATUS v69; // eax@112
  DICE_TAISAI_GAME_STATUS v70; // eax@116
  int v71; // eax@117
  double v72; // st7@117
  double v73; // st7@117
  double v74; // st7@119
  bool v75; // c0@119
  bool v76; // c3@119
  double v77; // st7@119
  GambleDiceGameWin *v78; // eax@121
  PgWinSpr *v79; // ebx@121
  NiAVObject *v80; // edx@121
  NiRefObjectVtbl *v81; // eax@121
  float v82; // ST14_4@121
  double v83; // st7@121
  void (*v84)(void); // edx@121
  GambleDiceGameWin *v85; // eax@121
  PgWinSpr *v86; // edi@121
  NiAVObject *v87; // ebx@121
  float v88; // ST10_4@121
  double v89; // st7@126
  double v90; // st7@126
  double v91; // st6@126
  GambleDiceGameWin *v92; // eax@130
  PgWinSpr *v93; // edi@130
  NiAVObject *v94; // ebx@130
  signed int v95; // eax@130
  NiRefObjectVtbl *v96; // edx@130
  double v97; // st7@130
  void *(__thiscall *v98)(NiRefObject *, unsigned int); // eax@130
  float v99; // ST10_4@130
  float v100; // ST0C_4@130
  double v101; // st7@132
  DICE_TAISAI_BETTING v102; // edi@135
  int v103; // ebx@135
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v104; // eax@139
  int v105; // ebx@140
  signed int v106; // edi@140
  DICE_TAISAI_BETTING v107; // eax@141
  mhDiceRankWin *v108; // ecx@150
  DICE_TAISAI_BETTING v109; // edi@156
  int v110; // ebx@156
  signed int v111; // edi@160
  DICE_TAISAI_BETTING v112; // eax@161
  double v113; // st7@165
  NpcDialogWin *v114; // ecx@168
  signed int v115; // edi@173
  char *v116; // [sp+8h] [bp-1FCh]@23
  char *v117; // [sp+8h] [bp-1FCh]@97
  const char *v118; // [sp+Ch] [bp-1F8h]@23
  const char *v119; // [sp+Ch] [bp-1F8h]@97
  __int64 v120; // [sp+10h] [bp-1F4h]@145
  unsigned int v121; // [sp+14h] [bp-1F0h]@69
  NiPoint3 kPos; // [sp+24h] [bp-1E0h]@3
  NiAVObject *itr; // [sp+30h] [bp-1D4h]@3
  unsigned __int16 _Keyval[2]; // [sp+34h] [bp-1D0h]@16
  DiceTaiSaiPrizeWinning nDiceWinPos; // [sp+38h] [bp-1CCh]@59
  DiceTaiSaiPrizeWinning pPrizeWinningBet; // [sp+9Ch] [bp-168h]@64
  char pcScript[256]; // [sp+100h] [bp-104h]@22
  unsigned int v128; // [sp+200h] [bp-4h]@1
  int v129; // [sp+204h] [bp+0h]@1

  v128 = (unsigned int)&v129 ^ __security_cookie;
  v3 = this;
  if ( !this->m_bIsEnterGameRoom )
  {
    if ( this->m_eDiceGameMode != 3 )
      goto LABEL_8;
    v4 = ((int (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
    kPos.x = kPos.x - v3->m_kDestPos.x;
    kPos.y = kPos.y - v3->m_kDestPos.y;
    kPos.z = 0.0 - v3->m_kDestPos.z;
    *(float *)&itr = kPos.z * kPos.z + kPos.x * kPos.x + kPos.y * kPos.y;
    *(float *)&itr = sqrt(*(float *)&itr);
    if ( *(float *)&itr >= 5.0 || v3->m_nNpcHandle == -1 )
    {
      if ( *(float *)&itr <= 200.0 )
        goto LABEL_8;
    }
    else
    {
      v5 = v3->m_nWhereStand;
      LOWORD(itr) = v3->m_nNpcHandle;
      BYTE2(itr) = v5;
      MHDiceGameTask::NcGambleDiceTaisaiGameJoinReq(v3, (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_REQ *)&itr);
    }
    v3->m_eDiceGameMode = 0;
LABEL_8:
    if ( v3->m_eDiceGameMode == 5 )
    {
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].SetAbStateProperty)(&kPos);
      kPos.x = kPos.x - v3->m_kDestPos.x;
      kPos.y = kPos.y - v3->m_kDestPos.y;
      kPos.z = 0.0 - v3->m_kDestPos.z;
      *(float *)&itr = kPos.x * kPos.x + kPos.y * kPos.y + kPos.z * kPos.z;
      *(float *)&itr = sqrt(*(float *)&itr);
      if ( *(float *)&itr >= 30.0 || v3->m_nNpcHandle == -1 )
      {
        if ( *(float *)&itr > 300.0 )
          v3->m_eDiceGameMode = 0;
      }
      else
      {
        v6 = v3->m_nWhereStand;
        LOWORD(itr) = v3->m_nNpcHandle;
        BYTE2(itr) = v6;
        MHDiceGameTask::NcGambleSlotmachineGameJoinReq(v3, (PROTO_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_REQ *)&itr);
        v3->m_eDiceGameMode = 0;
      }
    }
    return;
  }
  if ( this->m_bIsResetTimer )
  {
    *(float *)_Keyval = this->m_kTimer.m_fObjectTime;
    *(float *)&itr = fTime - this->m_kTimer.m_fStartTime;
    v7 = *(float *)&itr;
    this->m_kTimer.m_fObjectTime = *(float *)&itr;
    this->m_kTimer.m_fElapsedTime = v7 - *(float *)_Keyval;
  }
  else
  {
    this->m_kTimer.m_fStartTime = fTime;
    this->m_kTimer.m_fObjectTime = 0.0;
    this->m_kTimer.m_fElapsedTime = 0.0;
    this->m_bIsResetTimer = 1;
  }
  v8 = this->m_eDiceGameMode;
  if ( v8 == 2 )
  {
    v63 = this->m_pkGambleDiceGameWin;
    if ( !v63
      || v3->m_fAlphaValueOfDiceWindow >= 1.0
      || (*(float *)&itr = v3->m_kTimer.m_fElapsedTime + v3->m_fAlphaValueOfDiceWindow,
          v64 = *(float *)&itr,
          v3->m_fAlphaValueOfDiceWindow = *(float *)&itr,
          v65 = v64,
          ((void (__stdcall *)(_DWORD))v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(v65)),
          v3->m_fAlphaValueOfDiceWindow < 1.0) )
    {
LABEL_106:
      v68 = v3->m_pkGambleDiceGameWin;
      if ( !v68 || v3->m_bComeinMHOnResultStauts )
        goto LABEL_168;
      if ( !v3->m_eDiceSaiGameStatus )
        GambleDiceGameWin::UpdateTimeText(v68, 0.0, 0);
      if ( v3->m_eDiceSaiGameMode )
      {
        v92 = v3->m_pkGambleDiceGameWin;
        v93 = v92->m_spTimerFill.m_pObject;
        v94 = (NiAVObject *)v92->m_spTimer.m_pObject;
        v95 = ((int (__thiscall *)(PgWinSpr *))v93->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v93);
        v96 = v93->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        *(_DWORD *)_Keyval = v95;
        v97 = (double)v95;
        v98 = v96[41].__vecDelDtor;
        *(float *)_Keyval = v97 - 10.0;
        v99 = *(float *)_Keyval;
        *(_DWORD *)_Keyval = ((int (__thiscall *)(PgWinSpr *))v98)(v93);
        v100 = (double)*(signed int *)_Keyval;
        NiAVObject::SetTranslate(v94, v100, v99, 1.0);
        v3->m_fTimerPosOnPregress = 0.0;
      }
      else
      {
        if ( !v3->m_IsBettingStartPlaying )
        {
          v69 = v3->m_eDiceSaiGameStatus;
          if ( v69 == 1 || !v69 )
          {
            if ( v3->m_kTimer.m_fObjectTime > 2.0 )
            {
              v3->m_IsBettingStartPlaying = 1;
              SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceStartBetting);
            }
          }
        }
        v70 = v3->m_eDiceSaiGameStatus;
        if ( v70 == 1 )
        {
          v71 = ((int (__stdcall *)(int))v3->m_pkGambleDiceGameWin->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
          v72 = v3->m_kTimer.m_fElapsedTime + v3->m_fClockAlramTime;
          LODWORD(kPos.z) = v71 - 25;
          v3->m_fClockAlramTime = v72;
          v73 = (double)SLODWORD(kPos.z);
          if ( v71 - 25 < 0 )
            v73 = v73 + 4294967300.0;
          *(float *)_Keyval = v73;
          v74 = v3->m_fTimerPosOnPregress;
          v75 = *(float *)_Keyval < v74;
          v76 = *(float *)_Keyval == v74;
          v77 = *(float *)_Keyval;
          if ( !(v75 | v76) )
          {
            *(_DWORD *)_Keyval = v3->m_nLengthInOneGame;
            v3->m_fTimerPosOnPregress = v77 / (double)*(signed int *)_Keyval * v3->m_kTimer.m_fElapsedTime
                                      + v3->m_fTimerPosOnPregress;
          }
          v78 = v3->m_pkGambleDiceGameWin;
          v79 = v78->m_spTimerFill.m_pObject;
          v80 = (NiAVObject *)v78->m_spTimer.m_pObject;
          v81 = v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          itr = v80;
          *(_DWORD *)_Keyval = ((int (__thiscall *)(PgWinSpr *))v81[42].__vecDelDtor)(v79) - 10;
          v82 = (double)*(signed int *)_Keyval;
          *(float *)_Keyval = (double)((int (__thiscall *)(PgWinSpr *))v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v79)
                            + v3->m_fTimerPosOnPregress;
          NiAVObject::SetTranslate(itr, *(float *)_Keyval, v82, 1.0);
          v83 = v3->m_fTimerPosOnPregress;
          v84 = (void (*)(void))v3->m_pkGambleDiceGameWin->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
          *(_DWORD *)_Keyval = HIWORD(itr) | 0xC00;
          *(_QWORD *)&kPos.y = (signed __int64)v83;
          v84();
          v85 = v3->m_pkGambleDiceGameWin;
          v86 = v85->m_spTimerFill.m_pObject;
          v87 = (NiAVObject *)v85->m_spTimerBack.m_pObject;
          *(_DWORD *)_Keyval = ((int (__thiscall *)(PgWinSpr *))v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v85->m_spTimerFill.m_pObject);
          v88 = (double)*(signed int *)_Keyval;
          *(float *)_Keyval = (double)((int (__thiscall *)(PgWinSpr *))v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v86)
                            + v3->m_fTimerPosOnPregress
                            + 8.0;
          NiAVObject::SetTranslate(v87, *(float *)_Keyval, v88, 1.0);
          v34 = v3->m_IsClockCastPlaying == 0;
          v3->m_fClockCastTime = v3->m_kTimer.m_fElapsedTime + v3->m_fClockCastTime;
          if ( v34 )
          {
            v3->m_IsClockCastPlaying = 1;
            SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Cast_Clock);
            v3->m_fClockCastTime = 0.0;
          }
          if ( !v3->m_IsClockAlramPlaying )
          {
            *(_DWORD *)_Keyval = v3->m_nLengthInOneGame;
            if ( (double)*(signed int *)_Keyval - v3->m_fClockAlramTime < 5.0 )
            {
              ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->StopAllSound)();
              ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
              SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Cast_Alarm);
              v3->m_IsClockAlramPlaying = 1;
            }
          }
          v89 = v3->m_kTimer.m_fElapsedTime + v3->m_fDiplayLightTime;
          *(_DWORD *)_Keyval = v3->m_nLengthInOneGame;
          *(float *)&itr = v89;
          v90 = *(float *)&itr;
          v3->m_fDiplayLightTime = *(float *)&itr;
          v91 = (double)*(signed int *)_Keyval;
          *(float *)&itr = v91 - v3->m_fClockAlramTime;
          if ( *(float *)&itr / v91 * 0.1000000014901161 < v90 )
          {
            GambleDiceGameWin::TurnOnLight(v3->m_pkGambleDiceGameWin, 0, 1, 0);
            v3->m_fDiplayLightTime = 0.0;
            GambleDiceGameWin::UpdateTimeText(v3->m_pkGambleDiceGameWin, *(float *)&itr, 1);
          }
        }
        else
        {
          if ( v70 == 3 )
          {
            v3->m_fTimerPosOnPregress = 0.0;
            GambleDiceGameWin::UpdateTimeText(v3->m_pkGambleDiceGameWin, 0.0, 0);
          }
        }
      }
      if ( v3->m_eDiceSaiGameStatus != 3 )
        goto LABEL_168;
      PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      *(float *)&itr = v3->m_kTimer.m_fElapsedTime + v3->m_fDiceResultTime;
      v101 = *(float *)&itr;
      v3->m_fDiceResultTime = *(float *)&itr;
      if ( v101 > 0.30000001 && !v3->m_bIsNonBettingOver )
      {
        *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
        itr = *(NiAVObject **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
                                 &v3->map_ParticipantInfo.baseclass_0,
                                 (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&kPos.z,
                                 _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)itr == v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
          return;
        DiceTaiSai::get_PrizeWinningBet(&v3->m_DiceTaiSai, v3->m_nDiceVariety, &nDiceWinPos);
        v102 = 0;
        v103 = (int)&itr->baseclass_0.m_ppkExtra;
        do
        {
          if ( !*(_DWORD *)v103 )
            GambleDiceGameWin::ShowResult(v3->m_pkGambleDiceGameWin, v102, 0, 1);
          ++v102;
          v103 += 4;
        }
        while ( (signed int)v102 < 52 );
        v104 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)itr;
        v3->m_bIsNonBettingOver = 1;
        if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v104 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
        {
          v105 = 0;
          DiceTaiSai::get_PrizeWinningBet(&v3->m_DiceTaiSai, v3->m_nDiceVariety, &pPrizeWinningBet);
          v106 = 0;
          if ( (unsigned __int8)pPrizeWinningBet.nPrizeWinningBetCnt <= 0u )
            goto LABEL_184;
          do
          {
            v107 = pPrizeWinningBet.PrizeWinningBetInfo[v106].nBetting;
            if ( *((_DWORD *)&itr->baseclass_0.m_ppkExtra + v107) )
              v105 += DiceTaiSaiDividind::get_DividindMoney(
                        &v3->m_GBDividind,
                        v107,
                        pPrizeWinningBet.PrizeWinningBetInfo[v106].nSingle,
                        *((_DWORD *)&itr->baseclass_0.m_ppkExtra + v107));
            ++v106;
          }
          while ( v106 < (unsigned __int8)pPrizeWinningBet.nPrizeWinningBetCnt );
          if ( v105 )
            v120 = v105 - v105 * (unsigned int)v3->m_nGetSystemTaxRate / 0x3E8;
          else
LABEL_184:
            v120 = 0i64;
          GambleDiceGameWin::SetMoneyWin(v3->m_pkGambleDiceGameWin, v120);
        }
      }
      if ( v3->m_fDiceResultTime <= 3.5 )
        goto LABEL_168;
      if ( !v3->m_bIsResultOver )
      {
        v108 = v3->m_pkDiceRankWin;
        if ( v108
          && (unsigned __int8)((int (*)(void))v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
        {
          if ( v3->m_pkDiceRankWin->m_nCurSelTab == 1 )
            MHDiceGameTask::NcGambleDiceTaisaiAllRankReq(v3);
          else
            MHDiceGameTask::NcGambleDiceTaisaiCurrRankReq(v3);
        }
        *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
        itr = *(NiAVObject **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
                                 &v3->map_ParticipantInfo.baseclass_0,
                                 (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&kPos.z,
                                 _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)itr == v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
          return;
        DiceTaiSai::get_PrizeWinningBet(&v3->m_DiceTaiSai, v3->m_nDiceVariety, &pPrizeWinningBet);
        v109 = 0;
        v110 = (int)&itr->baseclass_0.m_ppkExtra;
        do
        {
          if ( *(_DWORD *)v110 )
            GambleDiceGameWin::ShowResult(v3->m_pkGambleDiceGameWin, v109, 0, 0);
          ++v109;
          v110 += 4;
        }
        while ( (signed int)v109 < 52 );
        v111 = 0;
        if ( pPrizeWinningBet.nPrizeWinningBetCnt )
        {
          do
          {
            v112 = pPrizeWinningBet.PrizeWinningBetInfo[v111].nBetting;
            if ( *((_DWORD *)&itr->baseclass_0.m_ppkExtra + v112) )
              GambleDiceGameWin::ShowResult(v3->m_pkGambleDiceGameWin, v112, 1, 0);
            ++v111;
          }
          while ( v111 < (unsigned __int8)pPrizeWinningBet.nPrizeWinningBetCnt );
        }
        v3->m_bIsResultOver = 1;
      }
      *(float *)&itr = v3->m_kTimer.m_fElapsedTime + v3->m_fDiplayLightTime;
      v113 = *(float *)&itr;
      v3->m_fDiplayLightTime = *(float *)&itr;
      if ( v113 <= 0.1000000014901161 )
        goto LABEL_168;
      GambleDiceGameWin::TurnOnLight(v3->m_pkGambleDiceGameWin, 0, 0, 1);
LABEL_167:
      v3->m_fDiplayLightTime = 0.0;
LABEL_168:
      v114 = v3->m_pkNpcDlgWin;
      if ( v114
        && (unsigned __int8)((int (*)(void))v114->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
      {
        if ( !*(_BYTE *)(g_pkMouse + 129)
          || v3->m_eDiceSaiGameStatus
          || (NpcDialogWin::CloseDialog(v3->m_pkNpcDlgWin), v3->m_bGameStartClick) )
        {
          v115 = 1;
        }
        else
        {
          v115 = 1;
          v3->m_bGameStartClick = 1;
          if ( v3->m_eDiceGameMode == 1 )
            MiniHouseDiceGameWin::GameStartEff(v3->m_pkDiceGameWin);
          else
            GambleDiceGameWin::GameStartEff(v3->m_pkGambleDiceGameWin);
        }
        if ( v3->m_eDiceSaiGameStatus == v115 )
        {
          NpcDialogWin::CloseDialog(v3->m_pkNpcDlgWin);
          if ( !v3->m_bGameStartClick )
          {
            v3->m_bGameStartClick = 1;
            if ( v3->m_eDiceGameMode == v115 )
              MiniHouseDiceGameWin::GameStartEff(v3->m_pkDiceGameWin);
            else
              GambleDiceGameWin::GameStartEff(v3->m_pkGambleDiceGameWin);
          }
        }
      }
      return;
    }
    ((void (__stdcall *)(signed int))v3->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    memset(pcScript, 0, 0x100u);
    v66 = v3->m_eDiceSaiGameStatus;
    if ( v66 )
    {
      if ( v66 != 3 && v66 == 2 )
      {
LABEL_102:
        if ( v3->m_eDiceSaiGameStatus == 1 )
        {
          if ( !v3->m_bGameStartClick )
          {
            v67 = v3->m_pkGambleDiceGameWin;
            v3->m_bGameStartClick = 1;
            GambleDiceGameWin::GameStartEff(v67);
          }
        }
        else
        {
          NpcDialogWin::OpenNpcScriptDialog(v3->m_pkNpcDlgWin, 0x21DDu, pcScript, 0);
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
        }
        goto LABEL_106;
      }
      TextData2::Get(0x2232FDAAu);
      v119 = "%s";
      v117 = pcScript;
    }
    else
    {
      TextData2::Get(0x367E5072u);
      v119 = "%s";
      v117 = pcScript;
    }
    sprintf(v117, v119);
    goto LABEL_102;
  }
  if ( v8 == 4 )
  {
    if ( this->m_fAlphaValueOfDiceWindow < 1.0 )
    {
      v60 = this->m_kTimer.m_fElapsedTime + this->m_fAlphaValueOfDiceWindow;
      v59 = this->m_pkSlotMachineWin;
      *(float *)&itr = v60;
      v61 = *(float *)&itr;
      v3->m_fAlphaValueOfDiceWindow = *(float *)&itr;
      v62 = v61;
      ((void (__stdcall *)(_DWORD))v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(v62));
      if ( v3->m_fAlphaValueOfDiceWindow >= 1.0 )
        v3->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v3->m_pkSlotMachineWin,
          1u);
    }
    return;
  }
  v9 = this->m_pkDiceGameWin;
  if ( !v9
    || v3->m_fAlphaValueOfDiceWindow >= 1.0
    || (*(float *)&itr = v3->m_kTimer.m_fElapsedTime + v3->m_fAlphaValueOfDiceWindow,
        v10 = *(float *)&itr,
        v3->m_fAlphaValueOfDiceWindow = *(float *)&itr,
        v11 = v10,
        ((void (__stdcall *)(_DWORD))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(v11)),
        v3->m_fAlphaValueOfDiceWindow < 1.0) )
    goto LABEL_32;
  ((void (__stdcall *)(signed int))v3->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  memset(pcScript, 0, 0x100u);
  v12 = v3->m_eDiceSaiGameStatus;
  if ( !v12 )
  {
    TextData2::Get(0x367E5072u);
    v118 = "%s";
    v116 = pcScript;
LABEL_27:
    sprintf(v116, v118);
    goto LABEL_28;
  }
  if ( v12 == 3 || v12 != 2 )
  {
    TextData2::Get(0x2232FDAAu);
    v118 = "%s";
    v116 = pcScript;
    goto LABEL_27;
  }
LABEL_28:
  if ( v3->m_eDiceSaiGameStatus == 1 )
  {
    if ( !v3->m_bGameStartClick )
    {
      v13 = v3->m_pkDiceGameWin;
      v3->m_bGameStartClick = 1;
      MiniHouseDiceGameWin::GameStartEff(v13);
    }
  }
  else
  {
    NpcDialogWin::OpenNpcScriptDialog(v3->m_pkNpcDlgWin, 0x104u, pcScript, 0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
  }
LABEL_32:
  v14 = v3->m_pkDiceGameWin;
  if ( !v14 || v3->m_bComeinMHOnResultStauts )
    goto LABEL_168;
  if ( !v3->m_eDiceSaiGameStatus )
    MiniHouseDiceGameWin::UpdateTimeText(v14, 0.0, 0);
  if ( v3->m_eDiceSaiGameMode )
  {
    v38 = v3->m_pkDiceGameWin;
    v39 = v38->m_spTimerFill.m_pObject;
    v40 = v38->m_spTimer.m_pObject;
    v41 = ((int (__thiscall *)(PgWinSpr *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v39);
    v42 = v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    *(_DWORD *)_Keyval = v41;
    v43 = (double)v41;
    v44 = v42[42].__vecDelDtor;
    kPos.x = v43;
    v45 = ((int (__thiscall *)(PgWinSpr *))v44)(v39);
    *(_DWORD *)_Keyval = v45;
    LODWORD(v40->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
    kPos.y = (double)v45 - 10.0;
    v40->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = kPos.y;
    kPos.z = 1.0;
    v40->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
    v3->m_fTimerPosOnPregress = 0.0;
  }
  else
  {
    if ( !v3->m_IsBettingStartPlaying )
    {
      v15 = v3->m_eDiceSaiGameStatus;
      if ( v15 == 1 || !v15 )
      {
        if ( v3->m_kTimer.m_fObjectTime > 2.0 )
        {
          v3->m_IsBettingStartPlaying = 1;
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceStartBetting);
        }
      }
    }
    v16 = v3->m_eDiceSaiGameStatus;
    if ( v16 == 1 )
    {
      v17 = ((int (__stdcall *)(int))v3->m_pkDiceGameWin->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2)
          - 25;
      v3->m_fClockAlramTime = v3->m_kTimer.m_fElapsedTime + v3->m_fClockAlramTime;
      *(float *)_Keyval = (double)(unsigned int)v17;
      v18 = v3->m_fTimerPosOnPregress;
      v19 = *(float *)_Keyval < v18;
      v20 = *(float *)_Keyval == v18;
      v21 = *(float *)_Keyval;
      if ( !(v19 | v20) )
      {
        *(_DWORD *)_Keyval = v3->m_nLengthInOneGame;
        v3->m_fTimerPosOnPregress = v21 / (double)*(signed int *)_Keyval * v3->m_kTimer.m_fElapsedTime
                                  + v3->m_fTimerPosOnPregress;
      }
      v22 = v3->m_pkDiceGameWin;
      v23 = v22->m_spTimerFill.m_pObject;
      v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      itr = (NiAVObject *)v22->m_spTimer.m_pObject;
      v25 = ((int (__thiscall *)(PgWinSpr *))v24[42].__vecDelDtor)(v23);
      v26 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      *(_DWORD *)_Keyval = v25 - 10;
      v27 = (double)(v25 - 10);
      *(float *)_Keyval = (double)((int (__thiscall *)(PgWinSpr *))v26[41].__vecDelDtor)(v23)
                        + v3->m_fTimerPosOnPregress;
      NiAVObject::SetTranslate(itr, *(float *)_Keyval, v27, 1.0);
      v28 = v3->m_fTimerPosOnPregress;
      v29 = (void (*)(void))v3->m_pkDiceGameWin->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
      *(_DWORD *)_Keyval = HIWORD(itr) | 0xC00;
      *(_QWORD *)&kPos.y = (signed __int64)v28;
      v29();
      v30 = v3->m_pkDiceGameWin;
      v31 = v30->m_spTimerFill.m_pObject;
      v32 = (NiAVObject *)v30->m_spTimerBack.m_pObject;
      *(_DWORD *)_Keyval = ((int (__thiscall *)(PgWinSpr *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v30->m_spTimerFill.m_pObject);
      v33 = (double)*(signed int *)_Keyval;
      *(float *)_Keyval = (double)((int (__thiscall *)(PgWinSpr *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v31)
                        + v3->m_fTimerPosOnPregress
                        + 8.0;
      NiAVObject::SetTranslate(v32, *(float *)_Keyval, v33, 1.0);
      v34 = v3->m_IsClockCastPlaying == 0;
      v3->m_fClockCastTime = v3->m_kTimer.m_fElapsedTime + v3->m_fClockCastTime;
      if ( v34 )
      {
        v3->m_IsClockCastPlaying = 1;
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Cast_Clock);
        v3->m_fClockCastTime = 0.0;
      }
      if ( !v3->m_IsClockAlramPlaying )
      {
        *(_DWORD *)_Keyval = v3->m_nLengthInOneGame;
        if ( (double)*(signed int *)_Keyval - v3->m_fClockAlramTime < 5.0 )
        {
          ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->StopAllSound)();
          ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Cast_Alarm);
          v3->m_IsClockAlramPlaying = 1;
        }
      }
      v35 = v3->m_kTimer.m_fElapsedTime + v3->m_fDiplayLightTime;
      *(_DWORD *)_Keyval = v3->m_nLengthInOneGame;
      *(float *)&itr = v35;
      v36 = *(float *)&itr;
      v3->m_fDiplayLightTime = *(float *)&itr;
      v37 = (double)*(signed int *)_Keyval;
      *(float *)&itr = v37 - v3->m_fClockAlramTime;
      if ( *(float *)&itr / v37 * 0.1000000014901161 < v36 )
      {
        MiniHouseDiceGameWin::TurnOnLight(v3->m_pkDiceGameWin, 0, 1, 0);
        v3->m_fDiplayLightTime = 0.0;
        MiniHouseDiceGameWin::UpdateTimeText(v3->m_pkDiceGameWin, *(float *)&itr, 1);
      }
    }
    else
    {
      if ( v16 == 3 )
      {
        v3->m_fTimerPosOnPregress = 0.0;
        MiniHouseDiceGameWin::UpdateTimeText(v3->m_pkDiceGameWin, 0.0, 0);
      }
    }
  }
  if ( v3->m_eDiceSaiGameStatus != 3 )
    goto LABEL_168;
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  *(float *)&itr = v3->m_kTimer.m_fElapsedTime + v3->m_fDiceResultTime;
  v46 = *(float *)&itr;
  v3->m_fDiceResultTime = *(float *)&itr;
  if ( v46 > 0.30000001 && !v3->m_bIsNonBettingOver )
  {
    *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
    itr = *(NiAVObject **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
                             &v3->map_ParticipantInfo.baseclass_0,
                             (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&kPos.z,
                             _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)itr == v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
      return;
    DiceTaiSai::get_PrizeWinningBet(&v3->m_DiceTaiSai, v3->m_nDiceVariety, &nDiceWinPos);
    v47 = 0;
    v48 = (int)&itr->baseclass_0.m_ppkExtra;
    do
    {
      if ( !*(_DWORD *)v48 )
        MiniHouseDiceGameWin::ShowResult(v3->m_pkDiceGameWin, v47, 0, 1);
      ++v47;
      v48 += 4;
    }
    while ( (signed int)v47 < 52 );
    v49 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)itr;
    v3->m_bIsNonBettingOver = 1;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v49 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      v50 = 0;
      DiceTaiSai::get_PrizeWinningBet(&v3->m_DiceTaiSai, v3->m_nDiceVariety, &pPrizeWinningBet);
      v51 = 0;
      if ( (unsigned __int8)pPrizeWinningBet.nPrizeWinningBetCnt <= 0u )
        goto LABEL_185;
      do
      {
        v52 = pPrizeWinningBet.PrizeWinningBetInfo[v51].nBetting;
        if ( *((_DWORD *)&itr->baseclass_0.m_ppkExtra + v52) )
          v50 += DiceTaiSaiDividind::get_DividindMoney(
                   &v3->m_Dividind,
                   v52,
                   pPrizeWinningBet.PrizeWinningBetInfo[v51].nSingle,
                   *((_DWORD *)&itr->baseclass_0.m_ppkExtra + v52));
        ++v51;
      }
      while ( v51 < (unsigned __int8)pPrizeWinningBet.nPrizeWinningBetCnt );
      if ( v50 )
        v121 = v50 - v50 * (unsigned int)v3->m_nGetSystemTaxRate / 0x3E8;
      else
LABEL_185:
        v121 = 0;
      MiniHouseDiceGameWin::SetMoneyWin(v3->m_pkDiceGameWin, v121);
    }
  }
  if ( v3->m_fDiceResultTime <= 3.5 )
    goto LABEL_168;
  if ( v3->m_bIsResultOver )
    goto LABEL_87;
  v53 = v3->m_pkDiceRankWin;
  if ( v53
    && (unsigned __int8)((int (*)(void))v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() == 1 )
    MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_REQ(v3, 0);
  *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
  itr = *(NiAVObject **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
                           &v3->map_ParticipantInfo.baseclass_0,
                           (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&kPos.z,
                           _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)itr != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    DiceTaiSai::get_PrizeWinningBet(&v3->m_DiceTaiSai, v3->m_nDiceVariety, &pPrizeWinningBet);
    v54 = 0;
    v55 = (int)&itr->baseclass_0.m_ppkExtra;
    do
    {
      if ( *(_DWORD *)v55 )
        MiniHouseDiceGameWin::ShowResult(v3->m_pkDiceGameWin, v54, 0, 0);
      ++v54;
      v55 += 4;
    }
    while ( (signed int)v54 < 52 );
    v56 = 0;
    if ( pPrizeWinningBet.nPrizeWinningBetCnt )
    {
      do
      {
        v57 = pPrizeWinningBet.PrizeWinningBetInfo[v56].nBetting;
        if ( *((_DWORD *)&itr->baseclass_0.m_ppkExtra + v57) )
          MiniHouseDiceGameWin::ShowResult(v3->m_pkDiceGameWin, v57, 1, 0);
        ++v56;
      }
      while ( v56 < (unsigned __int8)pPrizeWinningBet.nPrizeWinningBetCnt );
    }
    v3->m_bIsResultOver = 1;
LABEL_87:
    *(float *)&itr = v3->m_kTimer.m_fElapsedTime + v3->m_fDiplayLightTime;
    v58 = *(float *)&itr;
    v3->m_fDiplayLightTime = *(float *)&itr;
    if ( v58 <= 0.1000000014901161 )
      goto LABEL_168;
    MiniHouseDiceGameWin::TurnOnLight(v3->m_pkDiceGameWin, 0, 0, 1);
    goto LABEL_167;
  }
}
// 6AF050: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;
// A98170: using guessed type int g_pkMouse;

//----- (006B03D0) --------------------------------------------------------
unsigned int __thiscall MHDiceGameTask::GetAbleMoney(MHDiceGameTask *this, DICE_TAISAI_BETTING index, unsigned int EnableMaximuMoney)
{
  MHDiceGameTask *v3; // esi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v4; // eax@1
  int v5; // ebx@1
  int v7; // edx@3
  MHDiceGameTask::DICE_GAME_MODE v8; // ecx@3
  unsigned int v9; // eax@7
  unsigned int v10; // edi@18
  unsigned __int64 v11; // qax@22
  unsigned int v12; // esi@22
  const unsigned int v13; // esi@24
  unsigned int v14; // eax@24
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+8h] [bp-Ch]@1
  unsigned __int16 _Keyval[2]; // [sp+10h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
  v4 = std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
         &this->map_ParticipantInfo.baseclass_0,
         &result,
         _Keyval);
  v5 = *(_DWORD *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    return 0;
  v7 = *(_DWORD *)(v5 + 4 * index + 16);
  v8 = v3->m_eDiceGameMode;
  if ( v8 != 2 && v8 != 4 )
  {
    switch ( v3->m_eBettingAmount )
    {
      case 5:
        return EnableMaximuMoney - v7;
      case 0:
$LN18_65:
        v9 = 100;
        goto LABEL_15;
      case 4:
        v9 = 1000000;
        goto LABEL_15;
      case 3:
        v9 = 100000;
        goto LABEL_15;
      case 2:
LABEL_12:
        v9 = 10000;
        goto LABEL_15;
      case 1:
LABEL_13:
        v9 = 1000;
        goto LABEL_15;
      default:
        break;
    }
  }
  else
  {
    switch ( v3->m_eBettingAmount )
    {
      case 4:
        return EnableMaximuMoney - v7;
      case 1:
        v9 = 500;
        goto LABEL_15;
      case 0:
        goto $LN18_65;
      case 3:
        goto LABEL_12;
      case 2:
        goto LABEL_13;
      default:
        break;
    }
  }
  v9 = EnableMaximuMoney;
LABEL_15:
  if ( PgWin::ms_bCtrlPressed )
    v9 = EnableMaximuMoney;
  if ( v9 + v7 <= EnableMaximuMoney )
    v10 = v9;
  else
    v10 = EnableMaximuMoney - v7;
  if ( v8 != 2 && v8 != 4 )
  {
    v13 = EntryInfo::GetTotalBettingMoney((EntryInfo *)(v5 + 16));
    v14 = (unsigned __int64)User::GetMoney(&g_kUser) - v13;
    if ( v10 > v14 )
      v10 = v14;
  }
  else
  {
    v11 = User::Coin(&g_kUser);
    *(_DWORD *)_Keyval = HIDWORD(v11);
    v12 = v11 - EntryInfo::GetTotalBettingMoney((EntryInfo *)(v5 + 16));
    if ( v10 > v12 )
      return v12;
  }
  return v10;
}
// B7030D: using guessed type bool PgWin__ms_bCtrlPressed;

//----- (006B0530) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_BETTING_INFO_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_BETTING_INFO_CMD *pkProto)
{
  PROTO_NC_DICE_TAISAI_GAME_BETTING_INFO_CMD *v2; // ebx@1
  MHDiceGameTask *v3; // edi@1
  int v4; // esi@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // eax@5
  int v6; // ecx@6
  int v7; // eax@10
  int v8; // esi@15
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v9; // eax@16
  int v10; // ecx@17
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+Ch] [bp-4h]@5
  signed int i; // [sp+18h] [bp+8h]@3
  signed int ia; // [sp+18h] [bp+8h]@14

  v2 = pkProto;
  v3 = this;
  if ( !(pkProto->PartMask & 1) || this->m_eStatusOfInfoTrans )
  {
    v7 = 1;
    if ( pkProto->PartMask & 2 && this->m_eStatusOfInfoTrans == 1 )
    {
      ia = 0;
      if ( v2->nBettingCnt > 0u )
      {
        v8 = (int)((char *)&v2[1].nBettingCnt + 1);
        do
        {
          v9 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&v3->map_ParticipantInfo.baseclass_0, &result, (const unsigned __int16 *)(v8 - 2))->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          if ( v9 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
          {
            v10 = *(_DWORD *)(v8 + 4);
            if ( v10 )
              v9->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[*(_DWORD *)v8] += v10;
            MHDiceGameTask::CheckBettingChip(v3, *(DICE_TAISAI_BETTING *)v8, 0);
          }
          v8 += 10;
          ++ia;
        }
        while ( ia < v2->nBettingCnt );
      }
      v7 = 1;
      if ( v2->PartMask & 2 )
        v3->m_eStatusOfInfoTrans = 0;
    }
  }
  else
  {
    i = 0;
    if ( v2->nBettingCnt > 0u )
    {
      v4 = (int)((char *)&v2[1].nBettingCnt + 1);
      do
      {
        v5 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&v3->map_ParticipantInfo.baseclass_0, &result, (const unsigned __int16 *)(v4 - 2))->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        if ( v5 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
        {
          v6 = *(_DWORD *)(v4 + 4);
          if ( v6 )
            v5->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[*(_DWORD *)v4] += v6;
          MHDiceGameTask::CheckBettingChip(v3, *(DICE_TAISAI_BETTING *)v4, 0);
        }
        v4 += 10;
        ++i;
      }
      while ( i < v2->nBettingCnt );
    }
    v7 = 1;
    if ( !(v2->PartMask & 2) )
      v3->m_eStatusOfInfoTrans = 1;
  }
  return v7;
}

//----- (006B0650) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_REQ *pkProto)
{
  PROTO_NC_DICE_TAISAI_BETTING_REQ *v2; // esi@1
  unsigned __int16 v3; // dx@2
  unsigned __int16 v4; // ax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v5; // edx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v6; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v7; // eax@9
  PROTO_NC_DICE_TAISAI_BETTING_REQ **v8; // eax@11
  DICE_TAISAI_BETTING v9; // edx@14
  std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *v10; // edi@14
  unsigned int v11; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v12; // eax@14
  std::pair<unsigned short,DiceTaiSaiBetting> _Val; // [sp+8h] [bp-Ch]@12

  v2 = pkProto;
  if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      do
      {
        v4 = this->m_nReqCount;
        this->m_nReqCount = v4 + 1;
        v2->nBettingIndex = v4;
        v5 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        v6 = v5->_Parent;
        while ( !v6->_Isnil )
        {
          if ( v6->_Myval.baseclass_0.first >= v2->nBettingIndex )
          {
            v5 = v6;
            v6 = v6->_Left;
          }
          else
          {
            v6 = v6->_Right;
          }
        }
        v7 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        pkProto = (PROTO_NC_DICE_TAISAI_BETTING_REQ *)v5;
        if ( v5 == v7 || v2->nBettingIndex < v5->_Myval.baseclass_0.first )
        {
          _Val.baseclass_0.second.nMoney = (unsigned int)v7;
          v8 = (PROTO_NC_DICE_TAISAI_BETTING_REQ **)&_Val.baseclass_0.second.nMoney;
        }
        else
        {
          v8 = &pkProto;
        }
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)*v8 != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
  }
  else
  {
    v3 = this->m_nReqCount;
    this->m_nReqCount = v3 + 1;
    v2->nBettingIndex = v3;
  }
  v9 = v2->BettingInfo.nBetting;
  v10 = (std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *)&this->map_BettingReq;
  _Val.baseclass_0.first = v2->nBettingIndex;
  v11 = v2->BettingInfo.nMoney;
  _Val.baseclass_0.second.nBetting = v9;
  _Val.baseclass_0.second.nMoney = v11;
  v12 = std::_Tree_val<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Buynode<std::pair<unsigned_short_DiceTaiSaiBetting>>(
          &this->map_BettingReq.baseclass_0.baseclass_0,
          &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Linsert(
    v10,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *)&_Val.baseclass_0.second,
    v12,
    0);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 0x1Au, v2, 10);
  return 1;
}

//----- (006B0730) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_REQ(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BETTING_CANCEL_REQ *pkProto)
{
  PROTO_NC_DICE_TAISAI_BETTING_CANCEL_REQ *v2; // esi@1
  unsigned __int16 v3; // dx@2
  unsigned __int16 v4; // ax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v5; // edx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v6; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v7; // eax@9
  PROTO_NC_DICE_TAISAI_BETTING_CANCEL_REQ **v8; // eax@11
  DICE_TAISAI_BETTING v9; // edx@14
  std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *v10; // edi@14
  unsigned int v11; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v12; // eax@14
  std::pair<unsigned short,DiceTaiSaiBetting> _Val; // [sp+8h] [bp-Ch]@12

  v2 = pkProto;
  if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      do
      {
        v4 = this->m_nReqCount;
        this->m_nReqCount = v4 + 1;
        v2->nBettingCancelIndex = v4;
        v5 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        v6 = v5->_Parent;
        while ( !v6->_Isnil )
        {
          if ( v6->_Myval.baseclass_0.first >= v2->nBettingCancelIndex )
          {
            v5 = v6;
            v6 = v6->_Left;
          }
          else
          {
            v6 = v6->_Right;
          }
        }
        v7 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        pkProto = (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_REQ *)v5;
        if ( v5 == v7 || v2->nBettingCancelIndex < v5->_Myval.baseclass_0.first )
        {
          _Val.baseclass_0.second.nMoney = (unsigned int)v7;
          v8 = (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_REQ **)&_Val.baseclass_0.second.nMoney;
        }
        else
        {
          v8 = &pkProto;
        }
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)*v8 != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
  }
  else
  {
    v3 = this->m_nReqCount;
    this->m_nReqCount = v3 + 1;
    v2->nBettingCancelIndex = v3;
  }
  v9 = v2->BettingCancelInfo.nBetting;
  v10 = (std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *)&this->map_BettingReq;
  _Val.baseclass_0.first = v2->nBettingCancelIndex;
  v11 = v2->BettingCancelInfo.nMoney;
  _Val.baseclass_0.second.nBetting = v9;
  _Val.baseclass_0.second.nMoney = v11;
  v12 = std::_Tree_val<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Buynode<std::pair<unsigned_short_DiceTaiSaiBetting>>(
          &this->map_BettingReq.baseclass_0.baseclass_0,
          &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Linsert(
    v10,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *)&_Val.baseclass_0.second,
    v12,
    0);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Bu, 0x1Du, v2, 10);
  return 1;
}

//----- (006B0810) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_LEAVE_CMD *pkProto)
{
  PROTO_NC_DICE_TAISAI_GAME_LEAVE_CMD *v2; // esi@1
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v3; // ebx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v5; // edi@1
  MHDiceGameTask *v6; // ecx@1
  DICE_TAISAI_BETTING v8; // esi@5
  MHDiceGameTask *v9; // ebx@9
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v10; // eax@9
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v11; // ecx@9
  signed int v12; // eax@10
  int v13; // edx@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v14; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *j; // eax@15
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // eax@18
  PgFrameWork *v17; // esi@23
  Char *v18; // eax@24
  D3DXCOLOR *v19; // eax@25
  D3DXCOLOR v20; // ST08_16@25
  char *v21; // eax@25
  char *v22; // eax@25
  unsigned __int16 v23; // dx@26
  char v24; // [sp+Ch] [bp-18h]@25
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+1Ch] [bp-8h]@1
  MHDiceGameTask *v26; // [sp+20h] [bp-4h]@1
  const unsigned __int16 *pkProtoa; // [sp+2Ch] [bp+8h]@1

  v2 = pkProto;
  pkProtoa = &pkProto->nPlayerHnd;
  v3 = (std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *)&this->map_ParticipantInfo;
  v26 = this;
  v4 = std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
         &this->map_ParticipantInfo.baseclass_0,
         &result,
         pkProtoa);
  v5 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v6 = v26;
  if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == v26->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    return 0;
  if ( v2->bReserve )
  {
    *(_BYTE *)(*(_DWORD *)&v5 + 228) = 1;
    return 1;
  }
  if ( v26->m_eDiceSaiGameStatus == 1 )
  {
    v8 = 0;
    do
    {
      if ( *(_DWORD *)(*(_DWORD *)&v5 + 4 * v8 + 16) )
      {
        *(_DWORD *)(*(_DWORD *)&v5 + 4 * v8 + 16) = 0;
        MHDiceGameTask::CheckBettingChip(v6, v8, 0);
        v6 = v26;
      }
      ++v8;
    }
    while ( (signed int)v8 < 52 );
  }
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(
    v3,
    &result,
    v5);
  v9 = v26;
  v10 = v26->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v11 = v10->_Left;
  if ( v10->_Left != v10 )
  {
LABEL_10:
    v12 = 0;
    v13 = (int)&v11->_Myval.baseclass_0.second;
    while ( !*(_DWORD *)v13 )
    {
      ++v12;
      v13 += 4;
      if ( v12 >= 52 )
      {
        if ( !v11->_Isnil )
        {
          v14 = v11->_Right;
          if ( v14->_Isnil )
          {
            for ( i = v11->_Parent; !i->_Isnil; i = i->_Parent )
            {
              if ( v11 != i->_Right )
                break;
              v11 = i;
            }
            v11 = i;
          }
          else
          {
            v11 = v11->_Right;
            for ( j = v14->_Left; !j->_Isnil; j = j->_Left )
              v11 = j;
          }
        }
        if ( v11 != v26->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
          goto LABEL_10;
        goto LABEL_23;
      }
    }
    return 1;
  }
LABEL_23:
  v17 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v17 )
  {
    v18 = CharMgr::GetChar(&g_kCharMgr, *pkProtoa);
    if ( v18 )
    {
      ((void (__thiscall *)(Char *))v18->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v18);
      v19 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v24, Center_Announcement);
      *(_QWORD *)&v20.r = *(_QWORD *)&v19->r;
      *(_QWORD *)&v20.b = *(_QWORD *)&v19->b;
      v21 = TextData2::Get(0x37452093u);
      v22 = fs(v21);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v17, v22, COERCE_D3DXCOLOR(v20.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v17[28].m_kMsgQ.m_uiHead);
    }
  }
  v23 = LOWORD(v9->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
  v9->m_eDiceSaiGameStatus = 0;
  v9->m_nNumberOfEntrant = v23;
  return 1;
}

//----- (006B09D0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BET_START_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BET_START_CMD *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // edx@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *j; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // eax@8
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v8; // ecx@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v9; // eax@13
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+8h] [bp-10Ch]@16
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > itr; // [sp+Ch] [bp-108h]@13
  char pcScript[256]; // [sp+10h] [bp-104h]@19
  unsigned int v14; // [sp+110h] [bp-4h]@1
  int v15; // [sp+114h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  if ( pkProto )
  {
    this->m_eDiceSaiGameMode = pkProto->bModeType;
    MiniHouseDiceGameWin::UpdateHistory(this->m_pkDiceGameWin, pkProto->CurrentRollingDice.nNumber, 0);
    v3 = v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v4 = v3->_Left;
    if ( v3->_Left != v3 )
    {
      do
      {
        memset(&v4->_Myval.baseclass_0.second, 0, 0xD0u);
        if ( !v4->_Isnil )
        {
          v5 = v4->_Right;
          if ( v5->_Isnil )
          {
            for ( i = v4->_Parent; !i->_Isnil; i = i->_Parent )
            {
              if ( v4 != i->_Right )
                break;
              v4 = i;
            }
            v4 = i;
          }
          else
          {
            v4 = v4->_Right;
            for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
              v4 = j;
          }
        }
      }
      while ( v4 != v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    MiniHouseDiceGameWin::AllReset(v2->m_pkDiceGameWin);
    v8 = v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v2->m_eDiceSaiGameStatus = 0;
    v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)v8->_Left;
    itr = v9;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v9 != v8 )
    {
      do
      {
        if ( *(_BYTE *)(*(_DWORD *)&v9 + 228) == 1 )
        {
          if ( *(_WORD *)(*(_DWORD *)&v9 + 12) == g_pkMainChar->m_kHandle )
          {
            MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_REQ(v2);
            return 1;
          }
          v9 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(&v2->map_ParticipantInfo.baseclass_0, &result, v9)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          itr = v9;
        }
        else
        {
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(&itr.baseclass_0);
          v9 = itr;
        }
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v9 != v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    memset(pcScript, 0, 0x100u);
    TextData2::Get(0x367E5072u);
    sprintf(pcScript, "%s");
    NpcDialogWin::OpenNpcScriptDialog(v2->m_pkNpcDlgWin, 0x104u, pcScript, 0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    v2->m_nNumberOfEntrant = LOWORD(v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear((std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&v2->map_BettingReq);
    v2->m_fClockAlramTime = 0.0;
    v2->m_fClockCastTime = 0.0;
    v2->m_bIsResetTimer = 0;
    *(_WORD *)&v2->m_IsClockCastPlaying = 0;
    v2->m_IsBettingStartPlaying = 0;
    v2->m_bGameStartClick = 0;
    v2->m_bComeinMHOnResultStauts = 0;
    *(_WORD *)&v2->m_bPrintDiceResult[0] = 0;
    v2->m_bPrintDiceResult[2] = 0;
    v2->m_fDiceResultTime = 0.0;
    v2->m_fDiplayLightTime = 0.0;
    *(_WORD *)&v2->m_bIsNonBettingOver = 0;
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B0BC0) --------------------------------------------------------
void __thiscall MHDiceGameTask::OnBetting(MHDiceGameTask *this, DICE_TAISAI_BETTING index)
{
  MHDiceGameTask *v2; // esi@1
  MHDiceGameTask::DICE_GAME_MODE v3; // eax@1
  unsigned int v4; // eax@2
  unsigned int v5; // edi@2
  unsigned int v6; // eax@7
  unsigned int v7; // eax@7
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_REQ pkProto; // [sp+Ch] [bp-10h]@5
  unsigned int v9; // [sp+18h] [bp-4h]@1
  int v10; // [sp+1Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = this->m_eDiceGameMode;
  if ( v3 == 1 )
  {
    v4 = DiceTaiSaiDividind::get_MaxBettingMoney(&this->m_Dividind, index, this->m_nMaxBetMoney);
    v5 = MHDiceGameTask::GetAbleMoney(v2, index, v4);
    if ( v5 > User::GetMoney(&g_kUser) )
      v5 = User::GetMoney(&g_kUser);
    if ( v5 )
    {
      pkProto.BettingInfo.nBetting = index;
      pkProto.BettingInfo.nMoney = v5;
      MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_REQ(v2, (PROTO_NC_DICE_TAISAI_BETTING_REQ *)&pkProto);
    }
  }
  else
  {
    if ( v3 == 2 )
    {
      v6 = DiceTaiSaiDividind::get_MaxBettingMoney(&this->m_GBDividind, index, this->m_nMaxBetMoney);
      v7 = MHDiceGameTask::GetAbleMoney(v2, index, v6);
      if ( v7 > v2->m_nInvenRemainMoney )
        v7 = LODWORD(v2->m_nInvenRemainMoney);
      if ( v7 )
      {
        pkProto.BettingInfo.nMoney = v7;
        pkProto.BettingInfo.nBetting = index;
        MHDiceGameTask::NcGambleDiceTaisaiGameBettingReq(v2, &pkProto);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006B0CB0) --------------------------------------------------------
void __thiscall MHDiceGameTask::OnBettingCancel(MHDiceGameTask *this, DICE_TAISAI_BETTING index)
{
  MHDiceGameTask *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // eax@1
  unsigned int v4; // eax@2
  MHDiceGameTask::DICE_GAME_MODE v5; // edi@2
  BETTING_LEVEL_MONEY v6; // edx@4
  unsigned int v7; // ecx@5
  unsigned __int16 _Keyval[2]; // [sp+4h] [bp-18h]@1
  unsigned int CheckMoney; // [sp+8h] [bp-14h]@1
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_REQ pkProto; // [sp+Ch] [bp-10h]@21
  unsigned int v11; // [sp+18h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
  v3 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&this->map_ParticipantInfo.baseclass_0, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&CheckMoney, _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v3 != v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v4 = v3->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[index];
    v5 = v2->m_eDiceGameMode;
    if ( v5 != 2 && v5 != 4 )
    {
      v6 = v2->m_eBettingAmount;
      switch ( v6 )
      {
        case 2:
$LN20_62:
          v7 = 10000;
          break;
        case 0:
$LN17_70:
          v7 = 100;
          break;
        case 4:
          v7 = 1000000;
          break;
        case 3:
          v7 = 100000;
          break;
        case 1:
LABEL_11:
          v7 = 1000;
          break;
        default:
          goto LABEL_12;
      }
    }
    else
    {
      v6 = v2->m_eBettingAmount;
      switch ( v6 )
      {
        case 3:
          goto $LN20_62;
        case 1:
          v7 = 500;
          goto LABEL_13;
        case 0:
          goto $LN17_70;
        case 2:
          goto LABEL_11;
        default:
          break;
      }
LABEL_12:
      v7 = CheckMoney;
    }
LABEL_13:
    if ( PgWin::ms_bCtrlPressed )
      v7 = v4;
    if ( v6 == 5 || v6 == 4 || v7 > v4 )
      v7 = v4;
    if ( v7 )
    {
      if ( v5 == 1 )
      {
        pkProto.BettingCancelInfo.nMoney = v7;
        pkProto.BettingCancelInfo.nBetting = index;
        MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_REQ(v2, (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_REQ *)&pkProto);
      }
      else
      {
        if ( v5 == 2 )
        {
          pkProto.BettingCancelInfo.nMoney = v7;
          pkProto.BettingCancelInfo.nBetting = index;
          MHDiceGameTask::NcGambleDiceTaisaiGameBettingCancelReq(v2, &pkProto);
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// B7030D: using guessed type bool PgWin__ms_bCtrlPressed;

//----- (006B0DF0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_JOIN_CMD *pkProto)
{
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // eax@1
  Char *v4; // edi@1
  PgFrameWork *v5; // esi@1
  char *v6; // eax@3
  char *v7; // eax@3
  D3DXCOLOR *v8; // eax@3
  D3DXCOLOR v9; // ST08_16@3
  char *v10; // eax@3
  char *v11; // eax@3
  std::pair<unsigned short,EntryInfo> _Val; // [sp+Ch] [bp-1CCh]@1
  char v14; // [sp+E8h] [bp-F0h]@3
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> result; // [sp+F0h] [bp-E8h]@1
  MHDiceGameTask *v16; // [sp+F8h] [bp-E0h]@1
  char v17; // [sp+FCh] [bp-DCh]@1
  char v18; // [sp+1D0h] [bp-8h]@1
  unsigned int v19; // [sp+1D4h] [bp-4h]@1
  int v20; // [sp+1D8h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v18 = 0;
  memset(&v17, 0, 0xD0u);
  _Val.baseclass_0.first = pkProto->nPlayerHnd;
  memcpy(&_Val.baseclass_0.second, &v17, sizeof(_Val.baseclass_0.second));
  v2 = (std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *)&this->map_ParticipantInfo;
  v16 = this;
  v3 = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(
         &this->map_ParticipantInfo.baseclass_0.baseclass_0,
         &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(
    v2,
    &result,
    v3,
    0);
  v4 = CharMgr::GetChar(&g_kCharMgr, pkProto->nPlayerHnd);
  v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v5 && v4 )
  {
    ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
    v6 = TextData2::Get(0x7F90C3D5u);
    v7 = fs(v6);
    GameFrameWork::AddSysMsg((GameFrameWork *)v5, v7);
    v8 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v14, Center_Announcement);
    *(_QWORD *)&v9.r = *(_QWORD *)&v8->r;
    *(_QWORD *)&v9.b = *(_QWORD *)&v8->b;
    v10 = TextData2::Get(0x7F90C3D5u);
    v11 = fs(v10);
    GameFrameWork::AddAnnounceMsg((GameFrameWork *)v5, v11, COERCE_D3DXCOLOR(v9.r));
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v5[28].m_kMsgQ.m_uiHead);
  }
  if ( !v16->m_eDiceSaiGameStatus )
    v16->m_nNumberOfEntrant = LOWORD(v16->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B0F50) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_LEAVE_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  MiniHouseDiceGameWin *v3; // ecx@2
  PgFrameWork *v4; // edi@2
  char *v5; // eax@3
  D3DXCOLOR *v6; // eax@3
  D3DXCOLOR v7; // ST04_16@3
  char *v8; // eax@3
  D3DXCOLOR result; // [sp+Ch] [bp-10h]@3

  v2 = this;
  if ( pkProto->nError == 7312 )
  {
    v3 = this->m_pkDiceGameWin;
    v2->m_bIsEnterGameRoom = 0;
    MiniHouseDiceGameWin::AllReset(v3);
    v2->m_pkDiceGameWin->m_pStartEffect.m_pObject->baseclass_0.m_uFlags |= 1u;
    std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::clear(&v2->map_ParticipantInfo.baseclass_0);
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear((std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&v2->map_BettingReq);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkMiniGameWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkDiceHelpWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkDiceRateSheetWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkDiceHelpWin = 0;
    v2->m_pkMiniGameWin = 0;
    v2->m_pkDiceGameWin = 0;
    v2->m_pkDiceRankWin = 0;
    v2->m_pkDiceRateSheetWin = 0;
    v2->m_pkNpcDlgWin = 0;
    ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
    ((void (*)(void))g_kSoundMgr.m_pkBGMGroup->baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
    World::PlayBGM(&g_kWorld);
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      v5 = TextData2::Get(0x47351B29u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
      v6 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
      *(_QWORD *)&v7.r = *(_QWORD *)&v6->r;
      *(_QWORD *)&v7.b = *(_QWORD *)&v6->b;
      v8 = TextData2::Get(0x47351B29u);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v4, v8, COERCE_D3DXCOLOR(v7.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v4[28].m_kMsgQ.m_uiHead);
      if ( v2->m_bOutReserveOnMiniHouse )
        GameFrameWork::MiniHouseIndoorModeOut((GameFrameWork *)v4);
    }
  }
  return 1;
}

//----- (006B10C0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK *pkProto)
{
  PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK *v2; // esi@1
  PgFrameWork *v3; // eax@2
  PgFrameWork *v4; // ebx@2
  Item *v5; // eax@2
  char *v6; // eax@3
  char *v7; // eax@3
  char *v8; // eax@3
  char *v9; // eax@3
  char *v10; // eax@3
  char *v11; // eax@3
  MHDiceRewardMoneyWin *v12; // esi@5
  char *v13; // eax@5
  char *v14; // eax@5
  char v16; // [sp+0h] [bp-98h]@3
  __int16 v17; // [sp+64h] [bp-34h]@3
  char v18; // [sp+66h] [bp-32h]@3
  PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK *v19; // [sp+68h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+6Ch] [bp-2Ch]@3
  unsigned int v21; // [sp+88h] [bp-10h]@1
  int v22; // [sp+94h] [bp-4h]@3
  int v23; // [sp+98h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v2 = pkProto;
  v19 = pkProto;
  if ( pkProto->nError == 7424 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = v3;
    v5 = ItemIcon::GetItem(*(ItemIcon **)(v3[30].baseclass_0.m_uiMessageNum + 3592));
    if ( v5 )
    {
      memcpy(&v16, &v5->m_kStruct, 0x64u);
      v17 = *(_WORD *)((char *)&v5->m_kStruct.itemattr.binditem.portal[9].y + 1);
      v18 = BYTE3(v5->m_kStruct.itemattr.binditem.portal[9].y);
      strText.baseclass_0._Myres = 15;
      strText.baseclass_0._Mysize = 0;
      strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v22 = 0;
      v6 = TextData2::Get(0x8B877FCEu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strText, v6, strlen(v6));
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v7 = TextData2::Get(0x32363030u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, v7, strlen(v7));
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v8 = TextData2::Get(0xCBCFFE36u);
      v9 = fs(v8);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, v9, strlen(v9));
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v10 = TextData2::Get(0xF7E91119u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, v10, strlen(v10));
      v11 = *(char **)&strText;
      if ( strText.baseclass_0._Myres < 0x10 )
        v11 = (char *)&strText;
      MHDiceRewardMoneyWin::SetTitle1((MHDiceRewardMoneyWin *)v4[21].m_BackFrameID, v11);
      v12 = (MHDiceRewardMoneyWin *)v4[21].m_BackFrameID;
      v13 = TextData2::Get(0x253F7F8Au);
      v14 = fs(v13);
      MHDiceRewardMoneyWin::SetTitle2(v12, v14);
      v22 = -1;
      if ( strText.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strText);
      v2 = v19;
      strText.baseclass_0._Myres = 15;
      strText.baseclass_0._Mysize = 0;
      strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    MHDiceRewardMoneyWin::SetAmout((MHDiceRewardMoneyWin *)v4[21].m_BackFrameID, v2->nExpectIncomeMoney);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)v4[21].m_BackFrameID);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B1310) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall MHDiceGameTask::GetMoneyToString(MHDiceGameTask *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, unsigned int Money)
{
  MHDiceGameTask *v3; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // ebx@1
  unsigned int v5; // edi@1
  MHDiceGameTask::DICE_GAME_MODE v6; // eax@2
  int v7; // eax@4
  char v8; // cl@5
  char *v9; // eax@6
  int v10; // eax@9
  char v11; // cl@10
  char *v12; // eax@11
  const void *v13; // edx@11
  char v14; // cl@12
  unsigned int v15; // eax@13
  void *v16; // edi@13
  char v17; // cl@14
  unsigned int v18; // eax@17
  void *v19; // edi@17
  char v20; // cl@18
  char *v21; // eax@19
  char *v22; // ecx@19
  char v23; // dl@20
  unsigned int v24; // eax@21
  const void *v25; // esi@21
  void *v26; // edi@21
  char v27; // cl@22
  unsigned int v28; // eax@25
  void *v29; // edi@25
  char v30; // cl@26
  char *v31; // eax@27
  char *v32; // ecx@27
  char v33; // dl@28
  unsigned int v34; // eax@29
  const void *v35; // esi@29
  void *v36; // edi@29
  char v37; // cl@30
  unsigned int v38; // eax@33
  void *v39; // edi@33
  char v40; // cl@34
  char *v41; // eax@35
  char *v42; // ecx@35
  char v43; // dl@36
  unsigned int v44; // eax@37
  const void *v45; // esi@37
  void *v46; // edi@37
  char v47; // cl@38
  int v48; // eax@40
  char v49; // cl@41
  void *v51; // [sp-14h] [bp-248h]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMoney; // [sp+8h] [bp-22Ch]@1
  char acStr2[256]; // [sp+24h] [bp-210h]@2
  char acStr1[256]; // [sp+124h] [bp-110h]@2
  unsigned int v55; // [sp+224h] [bp-10h]@1
  int v56; // [sp+230h] [bp-4h]@1
  int v57; // [sp+234h] [bp+0h]@1

  v55 = (unsigned int)&v57 ^ __security_cookie;
  v3 = this;
  v4 = result;
  strMoney.baseclass_0._Myres = 15;
  strMoney.baseclass_0._Mysize = 0;
  strMoney.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v56 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strMoney, &byte_9C8C9B, 0);
  v5 = Money;
  if ( Money )
  {
    memset(acStr1, 0, 0x100u);
    memset(acStr2, 0, 0x100u);
    v6 = v3->m_eDiceGameMode;
    if ( v6 == 2 || v6 == 4 )
    {
      sprintf(acStr1, "%d ");
      v7 = (int)acStr1;
      do
        v8 = *(_BYTE *)v7++;
      while ( v8 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &strMoney,
        acStr1,
        v7 - (_DWORD)&acStr1[1]);
      v9 = TextData2::Get(0x96A2F6DFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strMoney, v9, strlen(v9));
      result->baseclass_0._Myres = 15;
      result->baseclass_0._Mysize = 0;
      result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, &strMoney);
      if ( strMoney.baseclass_0._Myres >= 0x10 )
      {
        v51 = *(void **)&strMoney;
LABEL_45:
        operator delete(v51);
        return v4;
      }
      return v4;
    }
    if ( User::GetGem(Money) )
    {
      User::GetGem(Money);
      sprintf(acStr1, "%I64d");
      v10 = 0;
      do
      {
        v11 = acStr1[v10];
        acStr2[v10++] = v11;
      }
      while ( v11 );
      v12 = TextData::Get(0x475F9699u);
      v13 = v12;
      do
        v14 = *v12++;
      while ( v14 );
      v15 = v12 - v13;
      v16 = &strMoney.baseclass_0._Alval + 3;
      do
      {
        v17 = *((_BYTE *)v16 + 1);
        v16 = (char *)v16 + 1;
      }
      while ( v17 );
      memcpy(v16, v13, v15);
      v5 = Money;
    }
    if ( User::GetGold(v5) )
    {
      User::GetGold(v5);
      sprintf(acStr1, "%I64d");
      v18 = strlen(acStr1) + 1;
      v19 = &strMoney.baseclass_0._Alval + 3;
      do
      {
        v20 = *((_BYTE *)v19 + 1);
        v19 = (char *)v19 + 1;
      }
      while ( v20 );
      memcpy(v19, acStr1, v18);
      v21 = TextData::Get(0x47A395A3u);
      v22 = v21;
      do
        v23 = *v21++;
      while ( v23 );
      v24 = v21 - v22;
      v25 = v22;
      v26 = &strMoney.baseclass_0._Alval + 3;
      do
      {
        v27 = *((_BYTE *)v26 + 1);
        v26 = (char *)v26 + 1;
      }
      while ( v27 );
      memcpy(v26, v25, v24);
      v5 = Money;
    }
    if ( User::GetSilver(v5) )
    {
      User::GetSilver(v5);
      sprintf(acStr1, "%I64d");
      v28 = strlen(acStr1) + 1;
      v29 = &strMoney.baseclass_0._Alval + 3;
      do
      {
        v30 = *((_BYTE *)v29 + 1);
        v29 = (char *)v29 + 1;
      }
      while ( v30 );
      memcpy(v29, acStr1, v28);
      v31 = TextData::Get(0x98B595EFu);
      v32 = v31;
      do
        v33 = *v31++;
      while ( v33 );
      v34 = v31 - v32;
      v35 = v32;
      v36 = &strMoney.baseclass_0._Alval + 3;
      do
      {
        v37 = *((_BYTE *)v36 + 1);
        v36 = (char *)v36 + 1;
      }
      while ( v37 );
      memcpy(v36, v35, v34);
      v5 = Money;
    }
    if ( User::GetCopper(v5) )
    {
      User::GetCopper(v5);
      sprintf(acStr1, "%I64d");
      v38 = strlen(acStr1) + 1;
      v39 = &strMoney.baseclass_0._Alval + 3;
      do
      {
        v40 = *((_BYTE *)v39 + 1);
        v39 = (char *)v39 + 1;
      }
      while ( v40 );
      memcpy(v39, acStr1, v38);
      v41 = TextData::Get(0x88AF99F5u);
      v42 = v41;
      do
        v43 = *v41++;
      while ( v43 );
      v44 = v41 - v42;
      v45 = v42;
      v46 = &strMoney.baseclass_0._Alval + 3;
      do
      {
        v47 = *((_BYTE *)v46 + 1);
        v46 = (char *)v46 + 1;
      }
      while ( v47 );
      memcpy(v46, v45, v44);
    }
    v48 = (int)acStr2;
    do
      v49 = *(_BYTE *)v48++;
    while ( v49 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &strMoney,
      acStr2,
      v48 - (_DWORD)&acStr2[1]);
    v4 = result;
  }
  v4->baseclass_0._Myres = 15;
  v4->baseclass_0._Mysize = 0;
  v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v4, &strMoney);
  if ( strMoney.baseclass_0._Myres >= 0x10 )
  {
    v51 = *(void **)&strMoney;
    goto LABEL_45;
  }
  return v4;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B1740) --------------------------------------------------------
bool __thiscall MHDiceGameTask::ShutDownGambleHouse(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  MHDiceGameTask::DICE_GAME_MODE v2; // eax@1
  GambleDiceGameWin *v3; // ecx@4
  PgFrameWork *v4; // edi@4
  char *v5; // eax@5
  D3DXCOLOR *v6; // eax@5
  D3DXCOLOR v7; // ST04_16@5
  char *v8; // eax@5
  bool v9; // al@6
  D3DXCOLOR result; // [sp+Ch] [bp-10h]@5

  v1 = this;
  v2 = this->m_eDiceGameMode;
  if ( (v2 == 2 || v2 == 4) && this->m_bIsEnterGameRoom )
  {
    v3 = this->m_pkGambleDiceGameWin;
    v1->m_bIsEnterGameRoom = 0;
    GambleDiceGameWin::AllReset(v3);
    v1->m_pkGambleDiceGameWin->m_pStartEffect.m_pObject->baseclass_0.m_uFlags |= 1u;
    std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::clear(&v1->map_ParticipantInfo.baseclass_0);
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear((std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&v1->map_BettingReq);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkMiniGameWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkDiceHelpWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkDiceRateSheetWin->baseclass_0.baseclass_0.baseclass_0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    v1->m_pkDiceHelpWin = 0;
    v1->m_pkMiniGameWin = 0;
    v1->m_pkGambleDiceGameWin = 0;
    v1->m_pkDiceRankWin = 0;
    v1->m_pkDiceRateSheetWin = 0;
    v1->m_pkNpcDlgWin = 0;
    ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
    ((void (*)(void))g_kSoundMgr.m_pkBGMGroup->baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
    World::PlayBGM(&g_kWorld);
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      v5 = TextData2::Get(0x47351B29u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
      v6 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
      *(_QWORD *)&v7.r = *(_QWORD *)&v6->r;
      *(_QWORD *)&v7.b = *(_QWORD *)&v6->b;
      v8 = TextData2::Get(0x47351B29u);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v4, v8, COERCE_D3DXCOLOR(v7.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v4[28].m_kMsgQ.m_uiHead);
    }
    v1->m_eDiceGameMode = 0;
    v9 = 1;
  }
  else
  {
    v9 = 0;
  }
  return v9;
}

//----- (006B18C0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_GAME_JOIN_ACK *pkProto)
{
  MHDiceGameTask *v2; // ebx@1
  PgFrameWork *v3; // edi@1
  unsigned __int16 v4; // ax@2
  D3DXCOLOR *v5; // eax@4
  D3DXCOLOR v6; // ST04_16@4
  char *v7; // eax@4
  char *v9; // eax@7
  char *v10; // eax@7
  MsgBox *v11; // eax@7
  char *v12; // eax@12
  MiniHouseDiceGameWin *v13; // ecx@14
  signed int v14; // edi@14
  bool v15; // zf@16
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v16; // eax@18
  float v17; // edx@18
  unsigned __int16 v18; // dx@19
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v19; // eax@19
  PgWin *v20; // ecx@19
  MiniHouseDiceGameWin *v21; // eax@19
  PgWinSpr *v22; // esi@19
  PgWinSpr *v23; // edi@19
  signed int v24; // eax@19
  NiRefObjectVtbl *v25; // edx@19
  double v26; // st7@19
  void *(__thiscall *v27)(NiRefObject *, unsigned int); // eax@19
  double v28; // st7@19
  int v29; // eax@19
  int v30; // edi@20
  unsigned int v31; // eax@24
  char *v32; // eax@25
  char *v33; // eax@25
  PgWinText *v34; // ecx@25
  DICE_TAISAI_GAME_STATUS v35; // eax@30
  double v36; // st7@31
  int v37; // eax@34
  int v38; // ecx@34
  int v39; // esi@34
  double v40; // st6@34
  MiniHouseDiceGameWin *v41; // eax@34
  PgWinSpr *v42; // edi@34
  NiRefObjectVtbl *v43; // edx@34
  signed int v44; // eax@34
  NiRefObjectVtbl *v45; // edx@34
  double v46; // st7@34
  void *(__thiscall *v47)(NiRefObject *, unsigned int); // eax@34
  double v48; // st7@34
  float v49; // eax@34
  void *(__thiscall *v50)(NiRefObject *, unsigned int); // edx@34
  MiniHouseDiceGameWin *v51; // eax@34
  PgWinSpr *v52; // esi@34
  PgWinSpr *v53; // edi@34
  void *(__thiscall *v54)(NiRefObject *, unsigned int); // edx@34
  double v55; // st7@34
  MiniHouseDiceGameWin *v56; // eax@35
  int v57; // eax@35
  NiRefObjectVtbl *v58; // esi@35
  MiniHouseDiceGameWin *v59; // eax@35
  PgWinSpr *v60; // esi@35
  void *(__thiscall *v61)(NiRefObject *, unsigned int); // edx@35
  float v62; // ecx@36
  DICE_TAISAI_GAME_STATUS v63; // eax@36
  MiniHouseDiceGameWin *v64; // ecx@40
  unsigned int v65; // [sp+4h] [bp-210h]@1
  std::pair<unsigned short,EntryInfo> _Val; // [sp+14h] [bp-200h]@18
  D3DXCOLOR result; // [sp+F0h] [bp-124h]@4
  float i; // [sp+100h] [bp-114h]@16
  __int64 v69; // [sp+104h] [bp-110h]@1
  char *arrayNum; // [sp+10Ch] [bp-108h]@14
  char v71; // [sp+110h] [bp-104h]@18
  char v72; // [sp+1E4h] [bp-30h]@18
  void *p; // [sp+1E8h] [bp-2Ch]@25
  int v74; // [sp+1F8h] [bp-1Ch]@29
  unsigned int v75; // [sp+1FCh] [bp-18h]@27
  unsigned int v76; // [sp+204h] [bp-10h]@1
  int v77; // [sp+210h] [bp-4h]@25
  int v78; // [sp+214h] [bp+0h]@1

  v76 = (unsigned int)&v78 ^ __security_cookie;
  v65 = (unsigned int)&v78 ^ __security_cookie;
  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  HIDWORD(v69) = v3;
  if ( !v3 )
    return 0;
  v4 = pkProto->nError;
  if ( pkProto->nError != 7296 )
  {
    if ( v4 == 7302 )
    {
      v5 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
      *(_QWORD *)&v6.r = *(_QWORD *)&v5->r;
      *(_QWORD *)&v6.b = *(_QWORD *)&v5->b;
      v7 = ErrMsgTable::GetErrMsg(pkProto->nError);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v3, v7, COERCE_D3DXCOLOR(v6.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v3[28].m_kMsgQ.m_uiHead);
      return 0;
    }
    if ( v4 == 7308 )
    {
      if ( !v2->m_spLowLevelWarnigWin.m_pObject )
      {
        v9 = TextData2::Get(0x236E0F79u);
        v10 = fs(v9);
        v11 = MsgBox::Modal(MSGBOX_OK, v10);
        NiPointer<PopupMenuWin>::operator_(
          (NiPointer<NiD3DDefaultShader> *)&v2->m_spLowLevelWarnigWin,
          (NiD3DDefaultShader *)v11);
        v2->m_spLowLevelWarnigWin.m_pObject->baseclass_e8.vfptr->SetMsgHooker(
          &v2->m_spLowLevelWarnigWin.m_pObject->baseclass_e8,
          &v2->baseclass_0.baseclass_8);
        return 0;
      }
    }
    else
    {
      if ( v4 == 7300 || v4 == 7303 || v4 == 7304 || v4 == 7318 )
      {
        v12 = fs("%d");
        GameFrameWork::AddSysMsg((GameFrameWork *)v3, v12);
      }
    }
    return 0;
  }
  v2->m_eDiceSaiGameMode = 0;
  v2->m_fAlphaValueOfDiceWindow = 0.0;
  v13 = *(MiniHouseDiceGameWin **)&v3[21].m_bInit;
  v2->m_pkDiceGameWin = v13;
  v2->m_pkMiniGameWin = (mhMinimizeDiceGameWin *)v3[22].baseclass_0.vfptr;
  v2->m_pkDiceHelpWin = (mhDiceHelpWin *)v3[22].baseclass_0.m_pkMsgHooker;
  v2->m_pkDiceRankWin = (mhDiceRankWin *)v3[22].baseclass_0.m_uiMessageNum;
  v2->m_pkDiceRateSheetWin = (mhDiceRateSheetWin *)v3[22].m_kMsgQ.m_pBase;
  v2->m_pkNpcDlgWin = (NpcDialogWin *)v3[22].m_kMsgQ.m_uiAlloced;
  ((void (__stdcall *)(_DWORD, unsigned int))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(
    0.0,
    v65);
  ((void (__stdcall *)(_DWORD))v2->m_pkDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::clear(&v2->map_ParticipantInfo.baseclass_0);
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear((std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&v2->map_BettingReq);
  v2->m_eDiceSaiGameStatus = pkProto->nGameStatus;
  v2->m_nLengthInOneGame = ((signed int)(1717986919 * (unsigned __int64)pkProto->nTimer >> 32) >> 2)
                         + ((unsigned int)(1717986919 * (unsigned __int64)pkProto->nTimer >> 32) >> 31);
  v2->m_nInterval = SLOWORD(pkProto->nInterval) / 10;
  v2->m_nGameCnt = pkProto->nGamerCnt;
  v2->m_nGetSystemTaxRate = pkProto->nGetSysRate;
  v2->m_nMaxBetMoney = LODWORD(pkProto->nMaxBetMoney);
  MiniHouseDiceGameWin::UpdateHistory(v2->m_pkDiceGameWin, 0, 1);
  v14 = 6;
  arrayNum = (char *)&pkProto->DiceHistory[6];
  do
  {
    MiniHouseDiceGameWin::UpdateHistory(v2->m_pkDiceGameWin, arrayNum, 0);
    arrayNum -= 3;
    --v14;
  }
  while ( v14 >= 0 );
  v15 = v2->m_nGameCnt == 0;
  i = 0.0;
  if ( !v15 )
  {
    arrayNum = (char *)&pkProto[1];
    do
    {
      v72 = 0;
      memset(&v71, 0, 0xD0u);
      _Val.baseclass_0.first = *(_WORD *)arrayNum;
      memcpy(&_Val.baseclass_0.second, &v71, sizeof(_Val.baseclass_0.second));
      v16 = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(
              &v2->map_ParticipantInfo.baseclass_0.baseclass_0,
              &_Val);
      std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(
        &v2->map_ParticipantInfo.baseclass_0,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *)&result.b,
        v16,
        0);
      LODWORD(v17) = v2->m_nGameCnt;
      arrayNum += 2;
      ++LODWORD(i);
    }
    while ( SLODWORD(i) < SLODWORD(v17) );
  }
  v2->m_nNumberOfEntrant = v2->m_nGameCnt;
  v18 = g_pkMainChar->m_kHandle;
  v72 = 0;
  memset(&v71, 0, 0xD0u);
  _Val.baseclass_0.first = v18;
  memcpy(&_Val.baseclass_0.second, &v71, sizeof(_Val.baseclass_0.second));
  v19 = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(
          &v2->map_ParticipantInfo.baseclass_0.baseclass_0,
          &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(
    &v2->map_ParticipantInfo.baseclass_0,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *)&result.b,
    v19,
    0);
  v20 = (PgWin *)v2->m_pkDiceGameWin;
  ++v2->m_nNumberOfEntrant;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v20);
  MiniHouseDiceGameWin::SetMoneyWin(v2->m_pkDiceGameWin, 0);
  v21 = v2->m_pkDiceGameWin;
  v22 = v21->m_spTimerFill.m_pObject;
  v23 = v21->m_spTimer.m_pObject;
  v24 = ((int (__thiscall *)(PgWinSpr *))v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v22);
  v25 = v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v24 -= 8;
  LODWORD(i) = v24;
  v26 = (double)v24;
  v27 = v25[42].__vecDelDtor;
  *(float *)&arrayNum = v26;
  i = (double)(((int (__thiscall *)(PgWinSpr *))v27)(v22) - 10);
  result.g = *(float *)&arrayNum;
  v28 = i;
  LODWORD(v23->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x) = arrayNum;
  result.b = v28;
  v23->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = result.b;
  result.a = 1.0;
  v23->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
  ((void (__stdcall *)(signed int))v2->m_pkDiceGameWin->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v29 = *(_DWORD *)(HIDWORD(v69) + 1072);
  if ( *(_DWORD *)(v29 + 388) )
  {
    if ( *(_DWORD *)(v29 + 392) < 0x10u )
      v30 = v29 + 372;
    else
      v30 = *(_DWORD *)(v29 + 372);
  }
  else
  {
    v30 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v29 + 444) + 484))(*(_DWORD *)(v29 + 444));
  }
  v15 = strcmp(
          (const char *)v30,
          (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)()) == 0;
  v31 = v2->m_nMaxBetMoney;
  v2->m_bIsGusetStatus = !v15;
  if ( v31 )
  {
    MHDiceGameTask::GetMoneyToString(
      v2,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
      v31);
    v77 = 0;
    v32 = TextData2::Get(0x7D8E7F83u);
    v33 = fs(v32);
    v34 = v2->m_pkDiceGameWin->m_spTitleText.m_pObject;
    if ( v34 )
      ((void (__stdcall *)(char *))v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v33);
    v77 = -1;
    if ( v75 >= 0x10 )
      operator delete(p);
    v75 = 15;
    v74 = 0;
    LOBYTE(p) = 0;
  }
  v35 = v2->m_eDiceSaiGameStatus;
  v2->m_bIsResetTimer = 0;
  *(_WORD *)&v2->m_IsClockCastPlaying = 0;
  v2->m_IsBettingStartPlaying = 0;
  v2->m_bGameStartClick = 0;
  if ( v35 == 1 )
  {
    HIDWORD(v69) = v2->m_nLengthInOneGame - v2->m_nInterval;
    v2->m_fClockAlramTime = (double)SHIDWORD(v69);
    v36 = 0.0;
  }
  else
  {
    v36 = 0.0;
    v2->m_fClockAlramTime = 0.0;
  }
  v2->m_fClockCastTime = v36;
  *(_WORD *)&v2->m_bIsNonBettingOver = 0;
  v2->m_fTimerPosOnPregress = v36;
  if ( v35 == 1 )
  {
    v37 = ((int (*)(void))v2->m_pkDiceGameWin->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v38 = v2->m_nInterval;
    v39 = v37 - 25;
    LODWORD(i) = v2->m_nLengthInOneGame;
    HIDWORD(v69) = v37 - 25;
    v40 = (double)(unsigned int)(v37 - 25) / (double)SLODWORD(i);
    v41 = v2->m_pkDiceGameWin;
    v2->m_fTimerPosOnPregress = (double)(LODWORD(i) - v38) * v40 + v2->m_fTimerPosOnPregress;
    v42 = v41->m_spTimerFill.m_pObject;
    v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    LODWORD(i) = v41->m_spTimer.m_pObject;
    v44 = ((int (__thiscall *)(PgWinSpr *))v43[41].__vecDelDtor)(v42);
    v45 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    HIDWORD(v69) = v44;
    v46 = (double)v44;
    v47 = v45[42].__vecDelDtor;
    result.g = v46 + v2->m_fTimerPosOnPregress;
    HIDWORD(v69) = ((int (__thiscall *)(PgWinSpr *))v47)(v42) - 10;
    v48 = (double)SHIDWORD(v69);
    v49 = i;
    *(_DWORD *)(LODWORD(i) + 88) = LODWORD(result.g);
    result.b = v48;
    *(_DWORD *)(LODWORD(v49) + 92) = LODWORD(result.b);
    result.a = 1.0;
    *(float *)(LODWORD(v49) + 96) = 1.0;
    v50 = v2->m_pkDiceGameWin->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
    v69 = (signed __int64)v2->m_fTimerPosOnPregress;
    ((void (__cdecl *)(_DWORD))v50)(v39 - v69);
    v51 = v2->m_pkDiceGameWin;
    v52 = v51->m_spTimerFill.m_pObject;
    v53 = v51->m_spTimerBack.m_pObject;
    HIDWORD(v69) = ((int (__thiscall *)(PgWinSpr *))v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v51->m_spTimerFill.m_pObject);
    v54 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    result.g = (double)SHIDWORD(v69) + v2->m_fTimerPosOnPregress + 8.0;
    HIDWORD(v69) = ((int (__thiscall *)(PgWinSpr *))v54)(v52);
    v55 = (double)SHIDWORD(v69);
  }
  else
  {
    v56 = v2->m_pkDiceGameWin;
    v2->m_fTimerPosOnPregress = v36;
    v57 = ((int (*)(void))v56->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v58 = v2->m_pkDiceGameWin->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v69 = (signed __int64)v2->m_fTimerPosOnPregress;
    ((void (__cdecl *)(_DWORD))v58[117].__vecDelDtor)(v57 - 7 - v69);
    v59 = v2->m_pkDiceGameWin;
    v60 = v59->m_spTimerFill.m_pObject;
    v53 = v59->m_spTimerBack.m_pObject;
    HIDWORD(v69) = ((int (__thiscall *)(PgWinSpr *))v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v59->m_spTimerFill.m_pObject);
    v61 = v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    result.g = (double)SHIDWORD(v69) + v2->m_fTimerPosOnPregress + 8.0;
    HIDWORD(v69) = ((int (__thiscall *)(PgWinSpr *))v61)(v60);
    v55 = (double)SHIDWORD(v69);
  }
  result.b = v55;
  v62 = result.b;
  v53->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = result.g;
  result.a = 1.0;
  v53->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v62;
  v53->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceConnect);
  SoundMgr::StopBGM(&g_kSoundMgr);
  v63 = v2->m_eDiceSaiGameStatus;
  v2->m_bOutReserveOnMiniHouse = 0;
  v2->m_bComeinMHOnResultStauts = v63 == 2 || v63 == 3;
  *(_WORD *)&v2->m_bPrintDiceResult[0] = 0;
  v2->m_bPrintDiceResult[2] = 0;
  MiniHouseDiceGameWin::TurnOnLight(v2->m_pkDiceGameWin, 1, 0, 0);
  v64 = v2->m_pkDiceGameWin;
  v2->m_eBettingAmount = 0;
  MiniHouseDiceGameWin::OnBettingAmout(v64, 0, 0);
  MiniHouseDiceGameWin::EnableBetLevelBtn(v2->m_pkDiceGameWin, v2->m_nMaxBetMoney);
  v2->m_bIsEnterGameRoom = 1;
  v2->m_eDiceGameMode = 1;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B2180) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall MHDiceGameTask::GetBettingInfo(MHDiceGameTask *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, DICE_TAISAI_BETTING index)
{
  MHDiceGameTask *v3; // ebx@1
  DICE_TAISAI_BETTING v4; // edi@1
  char *v5; // eax@2
  char *v6; // eax@2
  char *v7; // eax@2
  char *v8; // eax@2
  char *v9; // eax@4
  char *v10; // eax@4
  char *v11; // eax@4
  char *v12; // eax@4
  char *v13; // eax@6
  char *v14; // eax@6
  char *v15; // eax@6
  char *v16; // eax@6
  char *v17; // eax@8
  char *v18; // eax@8
  char *v19; // eax@8
  char *v20; // eax@8
  char *v21; // eax@10
  char *v22; // eax@10
  char *v23; // eax@10
  char *v24; // eax@10
  char *v25; // eax@12
  char *v26; // eax@12
  char *v27; // eax@14
  char *v28; // eax@14
  char *v29; // eax@14
  char *v30; // eax@14
  char *v31; // eax@15
  char *v32; // eax@15
  MHDiceGameTask::DICE_GAME_MODE v33; // eax@17
  int v34; // ecx@19
  unsigned int v35; // eax@21
  char *v36; // eax@22
  int v37; // eax@24
  char v38; // cl@25
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v39; // eax@26
  unsigned int v40; // edi@27
  bool v41; // cf@29
  char *v42; // eax@29
  int v43; // eax@31
  char v44; // cl@32
  unsigned int v45; // eax@34
  char *v46; // eax@35
  int v47; // eax@37
  char v48; // cl@38
  const char *v50; // [sp-14h] [bp-150h]@10
  unsigned int v51; // [sp-14h] [bp-150h]@19
  char v52; // [sp+0h] [bp-13Ch]@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v53; // [sp+4h] [bp-138h]@1
  int v54; // [sp+8h] [bp-134h]@1
  unsigned __int16 _Keyval[2]; // [sp+Ch] [bp-130h]@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > resulta; // [sp+10h] [bp-12Ch]@22
  char acStr[256]; // [sp+2Ch] [bp-110h]@22
  unsigned int v58; // [sp+12Ch] [bp-10h]@1
  int v59; // [sp+138h] [bp-4h]@1
  int v60; // [sp+13Ch] [bp+0h]@1

  v58 = (unsigned int)&v60 ^ __security_cookie;
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  v3 = this;
  v53 = result;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = index;
  v59 = 0;
  v54 = 1;
  if ( (signed int)index >= 2 )
  {
    if ( (signed int)index >= 4 )
    {
      if ( (signed int)index >= 10 )
      {
        if ( (signed int)index >= 16 )
        {
          if ( (signed int)index >= 17 )
          {
            if ( (signed int)index >= 31 )
            {
              if ( (signed int)index >= 46 )
              {
                v31 = TextData2::Get(0x8DEAA2C7u);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v31);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, "\n");
                v32 = TextData2::Get(0x2F3DE70Bu);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v32);
                v50 = "\n";
              }
              else
              {
                v27 = TextData2::Get(0x2E507E74u);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v27);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, "\n");
                v28 = TextData2::Get(0x72F2D1B9u);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v28);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, "\n");
                TextData2::Get(0xF2F8202Du);
                v29 = TextData2::Get(0x30481A25u);
                v30 = fs(v29);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v30);
                v50 = "\n";
              }
            }
            else
            {
              v25 = TextData2::Get(0xDFD0BEE9u);
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v25);
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, "\n");
              v26 = TextData2::Get(0x3215028Bu);
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v26);
              v50 = "\n";
            }
          }
          else
          {
            v21 = TextData2::Get(0x94A5C5C3u);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v21);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, "\n");
            v22 = TextData2::Get(0xD8471808u);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v22);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, "\n");
            TextData2::Get(0xF22C1D2Du);
            v23 = TextData2::Get(0x30481A25u);
            v24 = fs(v23);
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v24);
            v50 = "\n";
          }
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(result, v50);
        }
        else
        {
          v17 = TextData2::Get(0x354C7E7Bu);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v17, strlen(v17));
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
          v18 = TextData2::Get(0x79EED1C0u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v18, strlen(v18));
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
          TextData2::Get(0x222D1C2Du);
          v19 = TextData2::Get(0x30481A25u);
          v20 = fs(v19);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v20, strlen(v20));
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
          v4 = index;
        }
      }
      else
      {
        v13 = TextData2::Get(0x7D7870E5u);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v13, strlen(v13));
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
        v14 = TextData2::Get(0xC2BC1238u);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v14, strlen(v14));
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
        TextData2::Get(0xF2F8232Du);
        v15 = TextData2::Get(0x30481A25u);
        v16 = fs(v15);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v16, strlen(v16));
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
        v4 = index;
      }
    }
    else
    {
      v9 = TextData2::Get(0x8F6E81D2u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v9, strlen(v9));
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
      v10 = TextData2::Get(0xD4B22325u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v10, strlen(v10));
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
      TextData2::Get(0xF2F81C2Du);
      v11 = TextData2::Get(0x30481A25u);
      v12 = fs(v11);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v12, strlen(v12));
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
      v4 = index;
    }
  }
  else
  {
    v5 = TextData2::Get(0x7495D5CEu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v5, strlen(v5));
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
    v6 = TextData2::Get(0xB8372813u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v6, strlen(v6));
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
    TextData2::Get(0xF2F81C2Du);
    v7 = TextData2::Get(0x30481A25u);
    v8 = fs(v7);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, v8, strlen(v8));
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
    v4 = index;
  }
  v33 = v3->m_eDiceGameMode;
  if ( v33 != 2 && v33 != 4 )
  {
    v51 = v3->m_nMaxBetMoney;
    v34 = (int)&v3->m_Dividind;
  }
  else
  {
    v51 = v3->m_nMaxBetMoney;
    v34 = (int)&v3->m_GBDividind;
  }
  v35 = DiceTaiSaiDividind::get_MaxBettingMoney((DiceTaiSaiDividind *)v34, v4, v51);
  if ( v35 )
  {
    MHDiceGameTask::GetMoneyToString(v3, &resulta, v35);
    v59 = 1;
    v36 = TextData2::Get(0xFAE5AB1Bu);
    sprintf(acStr, v36);
    LOBYTE(v59) = 0;
    if ( resulta.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&resulta);
  }
  v37 = (int)acStr;
  do
    v38 = *(_BYTE *)v37++;
  while ( v38 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, acStr, v37 - (_DWORD)&acStr[1]);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
  *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
  v39 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&v3->map_ParticipantInfo.baseclass_0, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&v52, _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v39 == v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v40 = 0;
  }
  else
  {
    v40 = v39->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[index];
    if ( v40 )
    {
      v41 = MHDiceGameTask::GetMoneyToString(
              v3,
              &resulta,
              v39->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[index])->baseclass_0._Myres < 0x10;
      v59 = 2;
      v42 = TextData2::Get(0x33521D16u);
      sprintf(acStr, v42);
      LOBYTE(v59) = 0;
      if ( resulta.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&resulta);
      v43 = (int)acStr;
      do
        v44 = *(_BYTE *)v43++;
      while ( v44 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
        result,
        acStr,
        v43 - (_DWORD)&acStr[1]);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, "\n", 1u);
    }
  }
  v45 = MHDiceGameTask::GetTotalBettingMoney(v3, index) - v40;
  if ( v45 )
  {
    MHDiceGameTask::GetMoneyToString(v3, &resulta, v45);
    v59 = 3;
    v46 = TextData2::Get(0x4E2EFD57u);
    sprintf(acStr, v46);
    LOBYTE(v59) = 0;
    if ( resulta.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&resulta);
    v47 = (int)acStr;
    do
      v48 = *(_BYTE *)v47++;
    while ( v48 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, acStr, v47 - (_DWORD)&acStr[1]);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B28B0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_LARGE_AMOUNT_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_CMD *pkProto)
{
  PgFrameWork *v2; // eax@2
  bool v3; // zf@2
  PgFrameWork *v4; // ebx@2
  int v5; // edi@3
  Char *v6; // esi@4
  bool v7; // cf@6
  D3DXCOLOR *v8; // eax@6
  D3DXCOLOR v9; // ST0C_16@6
  char *v10; // eax@6
  char *v11; // eax@6
  PgWin *v12; // ST18_4@8
  int v13; // edx@9
  char v15; // [sp+0h] [bp-4Ch]@6
  PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_CMD *v16; // [sp+10h] [bp-3Ch]@1
  MHDiceGameTask *thisa; // [sp+14h] [bp-38h]@1
  int i; // [sp+18h] [bp-34h]@2
  PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_CMD *v19; // [sp+1Ch] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+20h] [bp-2Ch]@6
  unsigned int v21; // [sp+3Ch] [bp-10h]@1
  int v22; // [sp+48h] [bp-4h]@6
  int v23; // [sp+4Ch] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  thisa = this;
  v16 = pkProto;
  if ( pkProto )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v3 = pkProto->nGamerCnt == 0;
    v4 = v2;
    i = 0;
    if ( !v3 )
    {
      v5 = (int)&pkProto[3];
      v19 = pkProto + 3;
      do
      {
        v6 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)(v5 - 2));
        if ( v6 && *(_DWORD *)v5 )
        {
          v7 = MHDiceGameTask::GetMoneyToString(thisa, &result, *(_DWORD *)v5)->baseclass_0._Myres < 0x10;
          v22 = 0;
          v8 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v15, Center_Announcement);
          *(_QWORD *)&v9.r = *(_QWORD *)&v8->r;
          *(_QWORD *)&v9.b = *(_QWORD *)&v8->b;
          ((void (__thiscall *)(Char *))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
          v10 = TextData2::Get(0x4746208Au);
          v11 = fs(v10);
          GameFrameWork::AddAnnounceMsg((GameFrameWork *)v4, v11, COERCE_D3DXCOLOR(v9.r));
          v22 = -1;
          if ( result.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&result);
          v12 = (PgWin *)v4[28].m_kMsgQ.m_uiHead;
          result.baseclass_0._Myres = 15;
          result.baseclass_0._Mysize = 0;
          result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          PgWinMgr::SetTopWin(&Pgg_kWinMgr, v12);
          v5 = (int)v19;
        }
        v13 = v16->nGamerCnt;
        v5 += 6;
        ++i;
        v19 = (PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_CMD *)v5;
      }
      while ( i < v13 );
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B2A30) --------------------------------------------------------
void __thiscall MHDiceGameTask::_MHDiceGameTask(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  PgWin *v2; // edi@1
  PgWin *v3; // edi@5
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v4; // ST08_4@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v5; // ST04_4@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v6; // ST08_4@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v7; // ST04_4@9
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > result; // [sp+0h] [bp-18h]@9
  std::map<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> > > *v9; // [sp+4h] [bp-14h]@9
  MHDiceGameTask *v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+14h] [bp-4h]@1

  v1 = this;
  v10 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MHDiceGameTask::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&MHDiceGameTask::_vftable_;
  v11 = 6;
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&this->m_GBDividind);
  v2 = v1->m_spLowLevelWarnigWin.m_pObject;
  LOBYTE(v11) = 5;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spExitConfirmWin.m_pObject;
  LOBYTE(v11) = 4;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_Dividind);
  LOBYTE(v11) = 2;
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_DiceTaiSai);
  v9 = &v1->map_BettingReq;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v11) = 7;
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&v1->map_BettingReq,
    &result,
    v5,
    v4);
  operator delete(v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)&v1->map_ParticipantInfo;
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v11) = 8;
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(
    &v1->map_ParticipantInfo.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&v9,
    v7,
    v6);
  operator delete(v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v11 = -1;
  ITask::_ITask(&v1->baseclass_0);
}
// 9C8D94: using guessed type int (__stdcall *MHDiceGameTask___vftable_)(int uiFlags);
// 9C8DB0: using guessed type int (__thiscall *MHDiceGameTask___vftable_)(void *p, char);

//----- (006B2B60) --------------------------------------------------------
void __thiscall MHDiceGameTask::MHDiceGameTask(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@2
  PgWin *v4; // edi@3
  PgWin *v5; // edi@8
  int (__thiscall **pExceptionObject)(void *, char); // [sp+0h] [bp-30h]@16
  std::exception thisa; // [sp+Ch] [bp-24h]@14
  MHDiceGameTask *v8; // [sp+18h] [bp-18h]@1
  int v9; // [sp+1Ch] [bp-14h]@16
  char *_What; // [sp+20h] [bp-10h]@14
  int v11; // [sp+2Ch] [bp-4h]@1

  v1 = this;
  v8 = this;
  ITask::ITask(&this->baseclass_0, 0);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MHDiceGameTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&MHDiceGameTask::_vftable_;
  v11 = 0;
  v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0xECu);
  if ( !v2 )
  {
    v9 = 0;
    std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&v9);
    pExceptionObject = &std::bad_alloc::_vftable_;
    _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
  }
  v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  LOBYTE(v11) = 1;
  v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x1Cu);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  NiStepBoolKey::NiStepBoolKey((NiDX9SourceTextureData *)&v1->m_DiceTaiSai);
  DiceTaiSaiDividind::DiceTaiSaiDividind(&v1->m_Dividind);
  v1->m_kTimer.m_fStartTime = 0.0;
  v1->m_kTimer.m_fObjectTime = 0.0;
  v1->m_kTimer.m_fElapsedTime = 0.0;
  v1->m_spExitConfirmWin.m_pObject = 0;
  v1->m_spLowLevelWarnigWin.m_pObject = 0;
  LOBYTE(v11) = 6;
  DiceTaiSaiDividind::DiceTaiSaiDividind(&v1->m_GBDividind);
  v1->m_pkDiceHelpWin = 0;
  v1->m_pkMiniGameWin = 0;
  v1->m_pkDiceGameWin = 0;
  v1->m_pkDiceRankWin = 0;
  v1->m_pkDiceRateSheetWin = 0;
  v1->m_pkNpcDlgWin = 0;
  v1->m_eStatusOfInfoTrans = 0;
  v1->m_nReqCount = 0;
  v4 = v1->m_spExitConfirmWin.m_pObject;
  LOBYTE(v11) = 7;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spExitConfirmWin.m_pObject = 0;
  }
  v5 = v1->m_spLowLevelWarnigWin.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spLowLevelWarnigWin.m_pObject = 0;
  }
  v1->m_pkSlotMachineWin = 0;
  v1->m_fDiplayLightTime = 0.0;
  v1->m_pkGBSlotHelpWin = 0;
  v1->m_fDiceResultTime = 0.0;
  v1->m_pkGBSlotRankWin = 0;
  v1->m_pkMiniSlotMachineWin = 0;
  *(_WORD *)&v1->m_bIsNonBettingOver = 0;
  v1->m_bIsEnterGameRoom = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C8D94: using guessed type int (__stdcall *MHDiceGameTask___vftable_)(int uiFlags);
// 9C8DB0: using guessed type int (__thiscall *MHDiceGameTask___vftable_)(void *p, char);

//----- (006B2D80) --------------------------------------------------------
void __cdecl MHDiceGameTask::Create(IDirectMessenger *pkMsgHooker)
{
  int v1; // eax@1
  void *v2; // eax@2
  int v3; // eax@3
  int v4; // esi@3
  int v5; // edi@7

  v1 = MHDiceGameTask::ms_spMHDiceGameTask;
  if ( MHDiceGameTask::ms_spMHDiceGameTask )
  {
LABEL_13:
    (**(void (__stdcall ***)(_DWORD))(v1 + 8))(pkMsgHooker);
    return;
  }
  v2 = operator new(0x15D8u);
  if ( v2 )
  {
    MHDiceGameTask::MHDiceGameTask((MHDiceGameTask *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  v1 = MHDiceGameTask::ms_spMHDiceGameTask;
  if ( MHDiceGameTask::ms_spMHDiceGameTask == v4 )
  {
LABEL_12:
    if ( !v1 )
      return;
    goto LABEL_13;
  }
  if ( MHDiceGameTask::ms_spMHDiceGameTask )
  {
    v5 = MHDiceGameTask::ms_spMHDiceGameTask;
    if ( !InterlockedDecrement((volatile LONG *)(MHDiceGameTask::ms_spMHDiceGameTask + 4)) )
    {
      if ( v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    }
  }
  MHDiceGameTask::ms_spMHDiceGameTask = v4;
  if ( v4 )
  {
    InterlockedIncrement((volatile LONG *)(v4 + 4));
    v1 = MHDiceGameTask::ms_spMHDiceGameTask;
    goto LABEL_12;
  }
}
// B6797C: using guessed type int MHDiceGameTask__ms_spMHDiceGameTask;

//----- (006B2E50) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_ACK(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_RANK_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1

  v2 = this;
  if ( pkProto->nError == 7448 && this->m_pkDiceGameWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v2->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    mhDiceRankWin::UpdateRankList(v2->m_pkDiceRankWin, pkProto);
    mhDiceRankWin::UpdateViewList(v2->m_pkDiceRankWin);
  }
  return 1;
}

//----- (006B2EC0) --------------------------------------------------------
bool __thiscall MHDiceGameTask::OnProcessNetMsg(MHDiceGameTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  bool result; // al@5

  if ( iDepart == 4 )
  {
    if ( iCommand != 222 )
      return 0;
    MHDiceGameTask::Recv_NC_CHAR_CLIENT_COININFO_CMD(this, (PROTO_NC_CHAR_COININFO_CMD *)pvData);
    return 1;
  }
  if ( iDepart == 43 )
  {
    switch ( iCommand )
    {
      case 2:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_ACK(this, (PROTO_NC_DICE_TAISAI_GAME_JOIN_ACK *)pvData);
        return 1;
      case 3:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_CMD(this, (PROTO_NC_DICE_TAISAI_GAME_JOIN_CMD *)pvData);
        return 1;
      case 4:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_BETTING_INFO_CMD(
          this,
          (PROTO_NC_DICE_TAISAI_GAME_BETTING_INFO_CMD *)pvData);
        return 1;
      case 5:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_REQ(this);
        return 1;
      case 6:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_ACK(this, (PROTO_NC_DICE_TAISAI_GAME_LEAVE_ACK *)pvData);
        return 1;
      case 7:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_CMD(this, (PROTO_NC_DICE_TAISAI_GAME_LEAVE_CMD *)pvData);
        return 1;
      case 25:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_ACK(this, (PROTO_NC_DICE_TAISAI_RANK_ACK *)pvData);
        return 1;
      case 27:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_ACK(this, (PROTO_NC_DICE_TAISAI_BETTING_ACK *)pvData);
        return 1;
      case 28:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CMD(this, (PROTO_NC_DICE_TAISAI_BETTING_CMD *)pvData);
        return 1;
      case 30:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_ACK(this, (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_ACK *)pvData);
        return 1;
      case 31:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_BETTING_CANCEL_CMD(this, (PROTO_NC_DICE_TAISAI_BETTING_CANCEL_CMD *)pvData);
        return 1;
      case 33:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_ACK(this, (PROTO_NC_DICE_TAISAI_DICE_ROLL_ACK *)pvData);
        return 1;
      case 34:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_CMD(this, (PROTO_NC_DICE_TAISAI_DICE_ROLL_CMD *)pvData);
        return 1;
      case 38:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_RESULT_CMD(
          this,
          (PROTO_NC_DICE_TAISAI_DICE_ROLL_RESULT_CMD *)pvData);
        return 1;
      case 39:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD(
          this,
          (PROTO_NC_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *)pvData);
        return 1;
      case 42:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_LARGE_AMOUNT_CMD(this, (PROTO_NC_DICE_TAISAI_LARGE_AMOUNT_CMD *)pvData);
        return 1;
      case 43:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_BET_START_CMD(this, (PROTO_NC_DICE_TAISAI_BET_START_CMD *)pvData);
        return 1;
      case 44:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_TIMER_CMD(this, (PROTO_NC_DICE_TAISAI_TIMER_CMD *)pvData);
        return 1;
      case 14:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK(
          this,
          (PROTO_NC_DICE_TAISAI_EXPECT_INCOME_MONEY_ACK *)pvData);
        return 1;
      case 18:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_ACK(
          this,
          (PROTO_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_ACK *)pvData);
        return 1;
      case 10:
        MHDiceGameTask::Recv_NC_DICE_TAISAI_BOARD_FOLD_CMD(this, (PROTO_NC_DICE_TAISAI_BOARD_FOLD_CMD *)pvData);
        return 1;
      default:
        return 0;
      case 8:
      case 9:
        return 1;
    }
    return 1;
  }
  if ( iDepart != 47 )
    return 0;
  switch ( iCommand )
  {
    case 3:
      MHDiceGameTask::Recv_NC_GAMBLE_GAMBLEHOUSE_EXIT_ACK(this, (PROTO_NC_GAMBLE_GAMBLEHOUSE_EXIT_ACK *)pvData);
      result = 1;
      break;
    case 4:
      MHDiceGameTask::Recv_NC_GAMBLE_COIN_CHANGE_CMD(this, (PROTO_NC_GAMBLE_COIN_CHANGE_CMD *)pvData);
      result = 1;
      break;
    case 5:
      MHDiceGameTask::Recv_NC_GAMBLE_EXCHANGECOIN_CHANGE_CMD(this, (PROTO_NC_GAMBLE_EXCHANGECOIN_CHANGE_CMD *)pvData);
      result = 1;
      break;
    case 12:
      MHDiceGameTask::Recv_NC_GAMBLE_COIN_EXCHANGEMACHINE_UI_OPEN_CMD(
        this,
        (PROTO_NC_GAMBLE_COIN_EXCHANGEMACHINE_UI_OPEN_CMD *)pvData);
      result = 1;
      break;
    case 16:
      MHDiceGameTask::Recv_NC_GAMBLE_COIN_BUY_ACK(this, (PROTO_NC_GAMBLE_COIN_BUY_ACK *)pvData);
      result = 1;
      break;
    case 20:
      MHDiceGameTask::Recv_NC_GAMBLE_COIN_SELL_ACK(this, (PROTO_NC_GAMBLE_COIN_SELL_ACK *)pvData);
      result = 1;
      break;
    case 24:
      MHDiceGameTask::Recv_NC_GAMBLE_TYPE_AND_WHERE_STAND_ACK(this, (PROTO_NC_GAMBLE_TYPE_AND_WHERE_STAND_ACK *)pvData);
      result = 1;
      break;
    case 14:
      MHDiceGameTask::Recv_NC_GAMBLE_COIN_VIPCARD_UI_OPEN_ACK(this, (PROTO_NC_GAMBLE_COIN_VIPCARD_UI_OPEN_ACK *)pvData);
      result = 1;
      break;
    case 101:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *)pvData);
      result = 1;
      break;
    case 102:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_CMD *)pvData);
      result = 1;
      break;
    case 103:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_BETTING_INFO_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_BETTING_INFO_CMD *)pvData);
      result = 1;
      break;
    case 105:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_ACK(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_ACK *)pvData);
      result = 1;
      break;
    case 106:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_CMD *)pvData);
      result = 1;
      break;
    case 110:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK(this, (PROTO_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK *)pvData);
      result = 1;
      break;
    case 112:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK *)pvData);
      result = 1;
      break;
    case 114:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_ACK(this, (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_ACK *)pvData);
      result = 1;
      break;
    case 115:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CMD(this, (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CMD *)pvData);
      result = 1;
      break;
    case 117:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK *)pvData);
      result = 1;
      break;
    case 118:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD *)pvData);
      result = 1;
      break;
    case 123:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_CMD *)pvData);
      result = 1;
      break;
    case 124:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *)pvData);
      result = 1;
      break;
    case 126:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_ACK(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_ACK *)pvData);
      result = 1;
      break;
    case 127:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD *)pvData);
      result = 1;
      break;
    case 128:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BET_START_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_BET_START_CMD *)pvData);
      result = 1;
      break;
    case 129:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_TIMER_CMD(this, (PROTO_NC_GAMBLE_DICE_TAISAI_TIMER_CMD *)pvData);
      result = 1;
      break;
    case 119:
      MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_CMD(
        this,
        (PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_CMD *)pvData);
      result = 1;
      break;
    case 28:
      MHDiceGameTask::Recv_NC_GAMBLE_ENTER_PLAYER_DIRECT_CMD(this, (PROTO_NC_GAMBLE_ENTER_PLAYER_DIRECT_CMD *)pvData);
      result = 1;
      break;
    case 27:
      MHDiceGameTask::Recv_NC_GAMBLE_COIN_USE_COINITEM_MESSAGE_CMD(
        this,
        (PROTO_NC_GAMBLE_COIN_USE_COINITEM_MESSAGE_CMD *)pvData);
      result = 1;
      break;
    case 201:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_ACK(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_ACK *)pvData);
      result = 1;
      break;
    case 203:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_GAME_LEAVE_ACK(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_GAME_LEAVE_ACK *)pvData);
      result = 1;
      break;
    case 205:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_START_ACK(this, (PROTO_NC_GAMBLE_SLOTMACHINE_START_ACK *)pvData);
      result = 1;
      break;
    case 207:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_STOPBUTTON_ACK(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_STOPBUTTON_ACK *)pvData);
      result = 1;
      break;
    case 209:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK *)pvData);
      result = 1;
      break;
    case 210:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_STAND_UP_CMD(this, (PROTO_NC_GAMBLE_SLOTMACHINE_STAND_UP_CMD *)pvData);
      result = 1;
      break;
    case 216:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD *)pvData);
      result = 1;
      break;
    case 218:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK *)pvData);
      result = 1;
      break;
    case 220:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK *)pvData);
      result = 1;
      break;
    case 221:
      MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_SOMEONE_GET_JACKPOT_CMD(
        this,
        (PROTO_NC_GAMBLE_SLOTMACHINE_SOMEONE_GET_JACKPOT_CMD *)pvData);
      result = 1;
      break;
    case 30:
      MHDiceGameTask::Recv_NC_GAMBLE_PLAYERACT_CMD(this, (PROTO_NC_GAMBLE_PLAYERACT_CMD *)pvData);
      result = 1;
      break;
    default:
      return 0;
  }
  return result;
}

//----- (006B34C0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (006B34F0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (006B3510) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Max(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (006B3530) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *__cdecl std::_Tree_val<std::_Tmap_traits<PgNsTerrain::val_float_PgNsTerrain::EVGLess_boost::fast_pool_allocator<std::pair<PgNsTerrain::val_float>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (006B3550) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // edx@1
  int v3; // ecx@2
  int j; // edx@3
  int i; // edx@6

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( !*(_BYTE *)(*(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0] + 233) )
  {
    v3 = *(_DWORD *)(v2 + 8);
    if ( *(_BYTE *)(v3 + 233) )
    {
      for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) )
      {
        if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)(i + 8) )
          break;
        *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
      }
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    }
    else
    {
      for ( j = *(_DWORD *)v3; !*(_BYTE *)(j + 233); j = *(_DWORD *)j )
        v3 = j;
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v3;
    }
  }
  return result;
}

//----- (006B35B0) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 233) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 233) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 233) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 233) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 233) )
    goto LABEL_11;
  return result;
}

//----- (006B3630) --------------------------------------------------------
std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *__thiscall std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__(std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *this)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 25) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 25) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 25) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 25) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 25); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 25) )
    goto LABEL_11;
  return result;
}

//----- (006B3690) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (006B36F0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v4->_Parent )
  {
    v4->_Parent = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (006B3750) --------------------------------------------------------
unsigned int __cdecl ITableBase<DICE_Dividind_DiceDividIndTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E80: using guessed type int ITableBase_DICE_Dividind_DiceDividIndTab___ms_pkTable;

//----- (006B3770) --------------------------------------------------------
unsigned int __cdecl ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<GB_DICE_Dividind_GBDiceDividIndTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E84: using guessed type int ITableBase_GB_DICE_Dividind_GBDiceDividIndTab___ms_pkTable;

//----- (006B3790) --------------------------------------------------------
DICE_Dividind *__cdecl DiceDividIndTab::GetByIndex(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  DICE_Dividind *result; // eax@4

  v1 = uiIndex;
  if ( uiIndex >= ITableBase<DICE_Dividind_DiceDividIndTab>::GetTotal() )
  {
LABEL_4:
    result = 0;
  }
  else
  {
    while ( !CDataReader::GetRecord((CDataReader *)(ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable + 4), v1) )
    {
      ++v1;
      if ( v1 >= ITableBase<DICE_Dividind_DiceDividIndTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (DICE_Dividind *)CDataReader::GetRecord(
                                (CDataReader *)(ITableBase<DICE_Dividind_DiceDividIndTab>::ms_pkTable + 4),
                                v1);
  }
  return result;
}
// A97E80: using guessed type int ITableBase_DICE_Dividind_DiceDividIndTab___ms_pkTable;

//----- (006B37E0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (006B3840) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Lrotate(std::_Tree<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> > *this, std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<PgNsTerrain::val,float,PgNsTerrain::EVGLess,boost::fast_pool_allocator<std::pair<PgNsTerrain::val,float>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mutex,32>,0> >::_Node *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v3->_Parent )
  {
    v3->_Parent = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (006B38A0) --------------------------------------------------------
DiceRankInfo *__cdecl std::_Move<DiceRankInfo___DiceRankInfo__>(DiceRankInfo *_First, DiceRankInfo *_Last, DiceRankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  char *v4; // ecx@2
  DiceRankInfo *result; // eax@2
  unsigned int v6; // esi@3

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = &_First->sCharID.n5_name[8];
    result = _Dest;
    do
    {
      *(_DWORD *)&result->sCharID.n5_name[0] = *((_DWORD *)v4 - 2);
      *(_DWORD *)&result->sCharID.n5_name[4] = *((_DWORD *)v4 - 1);
      *(_DWORD *)&result->sCharID.n5_name[8] = *(_DWORD *)v4;
      *(_DWORD *)&result->sCharID.n5_name[12] = *((_DWORD *)v4 + 1);
      *(_DWORD *)&result->sCharID.n5_name[16] = *((_DWORD *)v4 + 2);
      v6 = *((_DWORD *)v4 + 3);
      v4 += 24;
      result->nWinCnt = v6;
      ++result;
    }
    while ( (DiceRankInfo *)(v4 - 8) != _Last );
  }
  return result;
}

//----- (006B38F0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v29; // ecx@52
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0x15555554 )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (006B3B20) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const unsigned __int16 v10; // di@2
  std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
                          (std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>_std::less<unsigned_int>_boost::fast_pool_allocator<std::pair<unsigned_int_boost::shared_ptr<PgNsTerrain::CPgBlockObject>>_boost::default_user_allocator_new_delete_boost::details::pool::win32_mutex_32>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject>,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,boost::shared_ptr<PgNsTerrain::CPgBlockObject> >,boos *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( LOWORD(v11->_Myval.baseclass_0.first) >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>_0>>::_Insert(
                        (std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        (std::_Tree_nod<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> >::_Node *)v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (006B3C00) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *result, const unsigned __int16 *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (006B3C80) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *result, const unsigned __int16 *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (006B3CF0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Newnode)
{
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v5; // edi@1
  unsigned int v6; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v8; // ecx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v9; // ecx@7
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v10; // ecx@9
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v11; // esi@11
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v12; // eax@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v13; // ecx@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v14; // ecx@13
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v15; // eax@15
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v16; // ecx@17
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v17; // ecx@19
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v18; // eax@23
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v19; // ecx@23
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v20; // edx@23
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v21; // edx@25
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v22; // edx@27
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v23; // edx@36
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v24; // edx@38
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v25; // eax@44

  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Mysize;
  if ( v6 >= 0x129E411 )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v7 = _Newnode;
  this->baseclass_0.baseclass_0._Mysize = v6 + 1;
  _Newnode->_Parent = _Wherenode;
  v8 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v8 )
  {
    v8->_Parent = _Newnode;
    v5->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    v5->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v9 = v5->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Left )
        v9->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v10 = v5->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v10->_Right )
        v10->_Right = _Newnode;
    }
  }
  v11 = _Newnode;
  while ( !v11->_Parent->_Color )
  {
    v12 = v11->_Parent;
    v13 = v12->_Parent;
    if ( v12 == v13->_Left )
    {
      v14 = v13->_Right;
      if ( v14->_Color )
      {
        if ( v11 == v12->_Right )
        {
          v11 = v11->_Parent;
          v15 = v12->_Right;
          v11->_Right = v15->_Left;
          if ( !v15->_Left->_Isnil )
            v15->_Left->_Parent = v11;
          v15->_Parent = v11->_Parent;
          v16 = v5->baseclass_0.baseclass_0._Myhead;
          if ( v11 == v16->_Parent )
          {
            v16->_Parent = v15;
          }
          else
          {
            v17 = v11->_Parent;
            if ( v11 == v17->_Left )
              v17->_Left = v15;
            else
              v17->_Right = v15;
          }
          v15->_Left = v11;
          v11->_Parent = v15;
        }
        v11->_Parent->_Color = 1;
        v11->_Parent->_Parent->_Color = 0;
        v18 = v11->_Parent->_Parent;
        v19 = v18->_Left;
        v18->_Left = v18->_Left->_Right;
        v20 = v19->_Right;
        if ( !v20->_Isnil )
          v20->_Parent = v18;
        v19->_Parent = v18->_Parent;
        v21 = v5->baseclass_0.baseclass_0._Myhead;
        if ( v18 == v21->_Parent )
        {
          v21->_Parent = v19;
          v19->_Right = v18;
        }
        else
        {
          v22 = v18->_Parent;
          if ( v18 == v22->_Right )
          {
            v22->_Right = v19;
            v19->_Right = v18;
          }
          else
          {
            v22->_Left = v19;
            v19->_Right = v18;
          }
        }
LABEL_42:
        v7 = _Newnode;
        v18->_Parent = v19;
        continue;
      }
    }
    else
    {
      v14 = v13->_Left;
      if ( v14->_Color )
      {
        if ( v11 == v12->_Left )
        {
          v11 = v11->_Parent;
          std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Rrotate(
            v5,
            v12);
        }
        v11->_Parent->_Color = 1;
        v11->_Parent->_Parent->_Color = 0;
        v18 = v11->_Parent->_Parent;
        v19 = v18->_Right;
        v18->_Right = v19->_Left;
        if ( !v19->_Left->_Isnil )
          v19->_Left->_Parent = v18;
        v19->_Parent = v18->_Parent;
        v23 = v5->baseclass_0.baseclass_0._Myhead;
        if ( v18 == v23->_Parent )
        {
          v23->_Parent = v19;
        }
        else
        {
          v24 = v18->_Parent;
          if ( v18 == v24->_Left )
            v24->_Left = v19;
          else
            v24->_Right = v19;
        }
        v19->_Left = v18;
        goto LABEL_42;
      }
    }
    v12->_Color = 1;
    v14->_Color = 1;
    v11->_Parent->_Parent->_Color = 0;
    v11 = v11->_Parent->_Parent;
  }
  v5->baseclass_0.baseclass_0._Myhead->_Parent->_Color = 1;
  v25 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7;
  return v25;
}

//----- (006B3F00) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::pair<unsigned short,EntryInfo> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *result; // eax@1
  std::pair<unsigned short,EntryInfo> *v4; // edx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)operator new(0xECu);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    memcpy(&result->_Myval.baseclass_0.second, &v4->baseclass_0.second, sizeof(result->_Myval.baseclass_0.second));
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006B3F80) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Buynode<std::pair<unsigned_short_DiceTaiSaiBetting>>(std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *this, std::pair<unsigned short,DiceTaiSaiBetting> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *result; // eax@1
  std::pair<unsigned short,DiceTaiSaiBetting> *v4; // edx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)operator new(0x1Cu);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second.nBetting = v4->baseclass_0.second.nBetting;
    result->_Myval.baseclass_0.second.nMoney = v4->baseclass_0.second.nMoney;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006B4000) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *result, std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > _Where)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v6; // esi@8
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v7; // ecx@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v10; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *i; // ecx@36
  int v15; // eax@38
  unsigned int v16; // eax@59
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v17; // eax@61
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 233) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 233) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 233) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = thisa->baseclass_0.baseclass_0._Myhead;
    if ( v8->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v3 )
    {
      v8->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( thisa->baseclass_0.baseclass_0._Myhead->_Left == (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 233) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v4);
        v7 = thisa;
      }
      v7->baseclass_0.baseclass_0._Myhead->_Left = v9;
    }
    v10 = v7->baseclass_0.baseclass_0._Myhead;
    if ( v10->_Right == (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 233) )
        v10->_Right = (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v6;
      else
        v10->_Right = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 233) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 233) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = thisa->baseclass_0.baseclass_0._Myhead;
  if ( v11->_Parent == (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v3 )
  {
    v11->_Parent = (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 232);
  *(_BYTE *)(*(_DWORD *)&v5 + 232) = *(_BYTE *)(*(_DWORD *)&v3 + 232);
  *(_BYTE *)(*(_DWORD *)&v3 + 232) = v13;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 232) == 1 )
  {
    for ( i = thisa;
          (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v4 != i->baseclass_0.baseclass_0._Myhead->_Parent;
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 232) != 1 )
        break;
      v15 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v15 + 232) )
        {
          *(_BYTE *)(v15 + 232) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 232) = 0;
          std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v6);
          v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 233) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v15 + 232) != 1 || *(_BYTE *)(*(_DWORD *)(v15 + 8) + 232) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 232) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v15 + 232) = 1;
            *(_BYTE *)(v15 + 232) = 0;
            std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Rrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v15);
            v15 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v15 + 232) = *(_BYTE *)(*(_DWORD *)&v6 + 232);
          *(_BYTE *)(*(_DWORD *)&v6 + 232) = 1;
          *(_BYTE *)(*(_DWORD *)(v15 + 8) + 232) = 1;
          std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Lrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v15 + 232) )
        {
          *(_BYTE *)(v15 + 232) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 232) = 0;
          std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v6);
          v15 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v15 + 233) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v15 + 8) + 232) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 232) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v15 + 232) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v15 + 8) + 232) = 1;
            *(_BYTE *)(v15 + 232) = 0;
            std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Lrotate(
              i,
              (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v15);
            v15 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v15 + 232) = *(_BYTE *)(*(_DWORD *)&v6 + 232);
          *(_BYTE *)(*(_DWORD *)&v6 + 232) = 1;
          *(_BYTE *)(*(_DWORD *)v15 + 232) = 1;
          std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Rrotate(
            i,
            *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v6);
          break;
        }
      }
      *(_BYTE *)(v15 + 232) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 232) = 1;
  }
  operator delete(*(void **)&_Erasednode);
  v16 = thisa->baseclass_0.baseclass_0._Mysize;
  if ( v16 )
    thisa->baseclass_0.baseclass_0._Mysize = v16 - 1;
  v17 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v17;
}

//----- (006B42E0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Rootnode)
{
  void *v2; // edi@1
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // esi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    operator delete(v2);
  }
}

//----- (006B4320) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const unsigned __int16 v10; // di@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Insert(
                          v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Insert(
                        v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (006B4400) --------------------------------------------------------
void __thiscall std::map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>::_map<NiAVObject___World::AniObjectType_std::less<NiAVObject__>_std::allocator<std::pair<NiAVObject___const_World::AniObjectType>>>(std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *this)
{
  std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (006B4460) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::clear(std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *this)
{
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // esi@1

  v1 = this;
  v2 = this->baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Parent;
  v4 = v2->_Parent;
  if ( !v3->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Erase(
        v1,
        v4->_Right);
      v4 = v4->_Left;
      operator delete(v3);
      v3 = v4;
    }
    while ( !v4->_Isnil );
  }
  v1->baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Left = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0._Mysize = 0;
}

//----- (006B44C0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v6; // ecx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v7; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v8; // edx@5
  int v9; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v10; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > i; // eax@10
  char v13; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _First;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)_First != v5->_Left
    || (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)_Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v8 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 233) )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v9 + 233) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 233);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v10 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)v9;
                !*(_BYTE *)(*(_DWORD *)&j + 233);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)**(_DWORD **)&j )
            v10 = j;
          _First = v10;
        }
      }
      std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&v13,
        v8);
    }
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::clear(v4);
    v7 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v4->baseclass_0.baseclass_0._Myhead->_Left;
  }
  return v7;
}

//----- (006B4580) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_DICE_TAISAI_BOARD_FOLD_CMD(MHDiceGameTask *this, PROTO_NC_DICE_TAISAI_BOARD_FOLD_CMD *pkProto)
{
  MHDiceGameTask *data; // [sp+0h] [bp-4h]@1

  data = this;
  if ( this->m_bIsEnterGameRoom )
  {
    LOWORD(data) = 7312;
    MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_ACK(this, (PROTO_NC_DICE_TAISAI_GAME_LEAVE_ACK *)&data);
  }
  return 1;
}

//----- (006B45B0) --------------------------------------------------------
void __thiscall std::map<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>>::_map<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>>(std::map<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> > > *this)
{
  std::map<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> > > *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+0h] [bp-14h]@1
  std::map<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> > > *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(v1->baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (006B4610) --------------------------------------------------------
void __thiscall mhDiceRankWin::UpdateRankList(mhDiceRankWin *this, PROTO_NC_DICE_TAISAI_RANK_ACK *pkProto)
{
  mhDiceRankWin *v2; // ebx@1
  DiceRankInfo *v3; // eax@2
  DiceRankInfo *v4; // ecx@2
  DiceRankInfo *v5; // eax@4
  DiceRankInfo *v6; // ecx@4
  signed int v7; // ebx@6
  char *v8; // esi@7
  int v9; // ecx@8
  unsigned int v10; // edx@8
  unsigned int v11; // eax@8
  int v12; // ecx@8
  unsigned int v13; // edx@8
  signed int v14; // ebx@9
  DiceRankInfo *v15; // esi@10
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *thisa; // [sp+8h] [bp-24h]@2
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+Ch] [bp-20h]@0
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *__formala; // [sp+Ch] [bp-20h]@4
  DiceRankInfo kInfo; // [sp+10h] [bp-1Ch]@8
  unsigned int v20; // [sp+28h] [bp-4h]@1
  int v21; // [sp+2Ch] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  if ( pkProto )
  {
    v3 = this->m_CarrerRankList.baseclass_0._Mylast;
    v4 = *(DiceRankInfo **)&this->m_CarrerRankList.baseclass_0.___u0.baseclass_0.dummy[0];
    thisa = &v2->m_CarrerRankList;
    if ( v4 != v3 )
      v2->m_CarrerRankList.baseclass_0._Mylast = std::_Move<DiceRankInfo___DiceRankInfo__>(v3, v3, v4, __formal);
    v5 = v2->m_CurRankList.baseclass_0._Mylast;
    v6 = *(DiceRankInfo **)&v2->m_CurRankList.baseclass_0.___u0.baseclass_0.dummy[0];
    __formala = &v2->m_CurRankList;
    if ( v6 != v5 )
      v2->m_CurRankList.baseclass_0._Mylast = std::_Move<DiceRankInfo___DiceRankInfo__>(
                                                v5,
                                                v5,
                                                v6,
                                                (std::_Nonscalar_ptr_iterator_tag)__formala);
    v7 = 0;
    if ( pkProto->nRankHistoryCnt )
    {
      v8 = (char *)pkProto->RankHistory;
      do
      {
        v9 = *((_DWORD *)v8 + 1);
        v10 = *((_DWORD *)v8 + 2);
        *(_DWORD *)&kInfo.sCharID.n5_name[0] = *(_DWORD *)v8;
        v11 = *((_DWORD *)v8 + 3);
        *(_DWORD *)&kInfo.sCharID.n5_name[4] = v9;
        v12 = *((_DWORD *)v8 + 4);
        *(_QWORD *)&kInfo.sCharID.n5_name[8] = __PAIR__(v11, v10);
        v13 = *((_DWORD *)v8 + 5);
        *(_DWORD *)&kInfo.sCharID.n5_name[16] = v12;
        kInfo.nWinCnt = v13;
        std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(thisa, &kInfo);
        ++v7;
        v8 += 24;
      }
      while ( v7 < pkProto->nRankHistoryCnt );
    }
    v14 = 0;
    if ( pkProto->nRankCurrCnt )
    {
      v15 = (DiceRankInfo *)&pkProto[1];
      do
      {
        std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(__formala, v15);
        ++v14;
        ++v15;
      }
      while ( v14 < pkProto->nRankCurrCnt );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006B4710) --------------------------------------------------------
void *__thiscall MHDiceGameTask::_scalar_deleting_destructor_(MHDiceGameTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MHDiceGameTask::_MHDiceGameTask(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006B4740) --------------------------------------------------------
bool __thiscall StatPointReqTask::IsWaitingServerReply(StatPointReqTask *this)
{
  StatPointReqTask::State v1; // eax@1

  v1 = this->m_eState;
  return v1 == 1 || v1 == 2;
}

//----- (006B4760) --------------------------------------------------------
void __thiscall StatPointReqTask::ReqDecPoint(StatPointReqTask *this, StatDistribute eSD)
{
  StatPointReqTask *v2; // esi@1
  StatPointReqTask::State v3; // eax@1
  PROTO_NC_CHAR_STAT_DECPOINT_REQ kProto; // [sp+7h] [bp-1h]@5

  v2 = this;
  v3 = this->m_eState;
  if ( v3 != 1 && v3 != 2 && Inventory::GetStatInitialPoint(&g_kInventory) )
  {
    if ( User::GetStatDistribute(&g_kUser, eSD) > 0 )
    {
      kProto.stat = eSD;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x62u, &kProto, 1);
      v2->m_eState = 2;
    }
  }
}

//----- (006B47D0) --------------------------------------------------------
int __cdecl StatPointReqTask::ClearState()
{
  int result; // eax@1

  result = StatPointReqTask::ms_spInstance;
  if ( StatPointReqTask::ms_spInstance )
    *(_DWORD *)(StatPointReqTask::ms_spInstance + 64) = 0;
  return result;
}
// B67984: using guessed type int StatPointReqTask__ms_spInstance;

//----- (006B47F0) --------------------------------------------------------
void __thiscall StatPointReqTask::ReqIncPoint(StatPointReqTask *this, StatDistribute eSD)
{
  StatPointReqTask *v2; // esi@1
  StatPointReqTask::State v3; // eax@1

  v2 = this;
  v3 = this->m_eState;
  if ( v3 != 1 && v3 != 2 )
  {
    if ( n > 0 )
    {
      BYTE3(eSD) = eSD;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x5Cu, (char *)&eSD + 3, 1);
      v2->m_eState = 1;
    }
  }
}

//----- (006B4840) --------------------------------------------------------
bool __thiscall StatPointReqTask::OnProcessNetMsg(StatPointReqTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  StatPointReqTask *v5; // esi@1
  int v6; // esi@3
  bool result; // al@6
  int v8; // esi@7
  char *v9; // edi@7
  void *v10; // edi@11
  int v11; // esi@11
  bool v12; // zf@11
  int v13; // esi@15
  char *v14; // edi@15

  v5 = this;
  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( iDepart == 4 )
  {
    switch ( iCommand )
    {
      case 95:
        v5->m_eState = 0;
        v6 = (int)&v5->baseclass_0.baseclass_8;
        if ( *(_DWORD *)(v6 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 4))(29, 0, v6);
          if ( *(_DWORD *)(v6 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 20))(29, 0, v6);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 29, 0, v6);
        User::StatChangeByDistributePoint(&g_kUser, *(_BYTE *)pvData, 1);
        result = 1;
        break;
      case 97:
        v5->m_eState = 0;
        v8 = (int)&v5->baseclass_0.baseclass_8;
        v9 = fs("err: %d");
        if ( *(_DWORD *)(v8 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 4))(25, v9, v8);
          if ( *(_DWORD *)(v8 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 20))(25, v9, v8);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 20))(v8, 25, v9, v8);
        result = 1;
        break;
      case 101:
        v10 = pvData;
        v5->m_eState = 0;
        v11 = (int)&v5->baseclass_0.baseclass_8;
        v12 = *(_DWORD *)(v11 + 4) == 0;
        LOBYTE(pvData) = *(_BYTE *)v10;
        if ( !v12 )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 4))(29, &pvData, v11);
          if ( *(_DWORD *)(v11 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 20))(29, &pvData, v11);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v11 + 20))(v11, 29, &pvData, v11);
        User::StatChangeByDistributePoint(&g_kUser, *(_BYTE *)v10, -1);
        result = 1;
        break;
      case 103:
        v5->m_eState = 0;
        v13 = (int)&v5->baseclass_0.baseclass_8;
        v14 = fs("err: %d");
        if ( *(_DWORD *)(v13 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v13 + 4) + 4))(25, v14, v13);
          if ( *(_DWORD *)(v13 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v13 + 4) + 20))(25, v14, v13);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v13 + 20))(v13, 25, v14, v13);
        result = 1;
        break;
      default:
        goto LABEL_19;
    }
  }
  else
  {
LABEL_19:
    result = 0;
  }
  return result;
}

//----- (006B4A30) --------------------------------------------------------
void __thiscall StatPointReqTask::OnStart(StatPointReqTask *this)
{
  StatPointReqTask *v1; // esi@1
  int v2; // edi@3

  v1 = this;
  this->m_eState = 0;
  if ( (StatPointReqTask *)StatPointReqTask::ms_spInstance != this )
  {
    if ( StatPointReqTask::ms_spInstance )
    {
      v2 = StatPointReqTask::ms_spInstance;
      if ( !InterlockedDecrement((volatile LONG *)(StatPointReqTask::ms_spInstance + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    StatPointReqTask::ms_spInstance = (int)v1;
    InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount);
  }
}
// B67984: using guessed type int StatPointReqTask__ms_spInstance;

//----- (006B4A80) --------------------------------------------------------
void __thiscall ItemMallInfo::Encoding(ItemMallInfo *this)
{
  ItemMallInfo *v1; // esi@1
  char *v2; // edi@1
  signed int v3; // ecx@1
  signed int v4; // edx@3
  int v5; // eax@3

  v1 = this;
  v2 = (char *)this->m_pData;
  v3 = 64;
  do
  {
    if ( *(_DWORD *)v2 != -1 )
    {
      *(_DWORD *)v2 ^= v1->m_EncodeTable[1];
      *((_DWORD *)v2 + 1) ^= v1->m_EncodeTable[2];
      v4 = 2;
      v5 = (int)(v2 + 9);
      do
      {
        *(_BYTE *)(v5 - 1) ^= v1->m_EncodeTable[((_BYTE)v4 - 2) & 0x1F];
        *(_BYTE *)v5 ^= v1->m_EncodeTable[((_BYTE)v4 - 1) & 0x1F];
        *(_BYTE *)(v5 + 1) ^= v1->m_EncodeTable[v4 & 0x1F];
        *(_BYTE *)(v5 + 2) ^= v1->m_EncodeTable[((_BYTE)v4 + 1) & 0x1F];
        v4 += 4;
        v5 += 4;
      }
      while ( v4 - 2 < 128 );
    }
    v2 += 136;
    --v3;
  }
  while ( v3 );
}

//----- (006B4B40) --------------------------------------------------------
bool __thiscall ItemMallInfo::SaveToFile(ItemMallInfo *this, const char *FileName)
{
  ItemMallInfo *v2; // edi@1
  _iobuf *v3; // eax@1
  signed int v4; // ebx@1
  const void *v5; // esi@1
  _iobuf *fp; // [sp+14h] [bp+8h]@1

  v2 = this;
  v3 = fopen(FileName, "wb");
  v2->m_pHeader.TotalChunkCount ^= v2->m_EncodeTable[0];
  fp = v3;
  fwrite(v2, 1u, 4u, v3);
  ItemMallInfo::Encoding(v2);
  v4 = 0;
  v5 = v2->m_pData;
  do
  {
    if ( *(_DWORD *)v5 == -1 )
      break;
    fwrite(v5, 1u, 0x88u, fp);
    ++v4;
    v5 = (char *)v5 + 136;
  }
  while ( v4 < 64 );
  ItemMallInfo::Encoding(v2);
  fclose(fp);
  return 1;
}

//----- (006B4BD0) --------------------------------------------------------
int __thiscall ItemMallInfo::GetEndIndex(ItemMallInfo *this, int LocaleNum)
{
  int result; // eax@1
  char *v3; // edx@2
  char *v4; // ecx@9

  result = 0;
  if ( LocaleNum == -1 )
  {
    v4 = (char *)this->m_pData;
    while ( *(_DWORD *)v4 != -1 )
    {
      ++result;
      v4 += 136;
      if ( result >= 64 )
        return -1;
    }
  }
  else
  {
    v3 = (char *)this->m_pData;
    while ( 1 )
    {
      if ( *(_DWORD *)v3 == -1 )
      {
        --result;
        return result;
      }
      if ( *(_DWORD *)v3 > LocaleNum )
        break;
      ++result;
      v3 += 136;
      if ( result >= 64 )
        return -1;
    }
    --result;
  }
  return result;
}

//----- (006B4C40) --------------------------------------------------------
void __thiscall ItemMallInfo::SetData(ItemMallInfo *this, int Index, int LocaleNum, int URLNum, const char *Path)
{
  char *v5; // ecx@1
  const char *v6; // eax@1
  int v7; // edx@1
  const char v8; // cl@2

  ++this->m_pHeader.TotalChunkCount;
  v5 = (char *)this + 136 * Index;
  *((_DWORD *)v5 + 1) = LocaleNum;
  *((_DWORD *)v5 + 2) = URLNum;
  v6 = Path;
  v7 = v5 + 12 - Path;
  do
  {
    v8 = *v6;
    v6[v7] = *v6;
    ++v6;
  }
  while ( v8 );
}

//----- (006B4C80) --------------------------------------------------------
void __thiscall ItemMallInfo::AddData(ItemMallInfo *this, int LocaleNum, int URLNum, const char *Path)
{
  int v4; // esi@1
  ItemMallInfo *v5; // ebx@1
  int v6; // eax@1
  signed int v7; // ecx@1
  int v8; // edx@1
  int v9; // eax@5
  void *v10; // edi@8
  bool v11; // zf@9
  int v12; // ebx@11
  const char *v13; // eax@11
  int v14; // ebx@11
  const char v15; // cl@12
  int v16; // ebx@14
  const char *v17; // eax@14
  int v18; // ebx@14
  const char v19; // cl@15
  int v20; // [sp+8h] [bp-4h]@8

  v4 = LocaleNum;
  v5 = this;
  v6 = ItemMallInfo::GetEndIndex(this, LocaleNum);
  v7 = 0;
  v8 = (int)v5->m_pData;
  while ( *(_DWORD *)v8 != -1 )
  {
    ++v7;
    v8 += 136;
    if ( v7 >= 64 )
    {
      v7 = -1;
      break;
    }
  }
  v9 = v6 + 1;
  if ( v9 >= v7 )
  {
    ++v5->m_pHeader.TotalChunkCount;
    v16 = (int)((char *)v5 + 136 * v9);
    v17 = Path;
    *(_DWORD *)(v16 + 4) = LocaleNum;
    *(_DWORD *)(v16 + 8) = URLNum;
    v18 = v16 + 12 - (_DWORD)Path;
    do
    {
      v19 = *v17;
      v17[v18] = *v17;
      ++v17;
    }
    while ( v19 );
  }
  else
  {
    if ( v7 + 1 < 64 )
    {
      if ( v7 >= v9 )
      {
        v10 = &v5->m_pData[v7 + 1];
        v20 = v7 - v9 + 1;
        do
        {
          v11 = v20-- == 1;
          memcpy(v10, (char *)v10 - 136, 0x88u);
          v10 = (char *)v10 - 136;
        }
        while ( !v11 );
        v4 = LocaleNum;
      }
      ++v5->m_pHeader.TotalChunkCount;
      v12 = (int)((char *)v5 + 136 * v9);
      *(_DWORD *)(v12 + 8) = URLNum;
      v13 = Path;
      *(_DWORD *)(v12 + 4) = v4;
      v14 = v12 + 12 - (_DWORD)Path;
      do
      {
        v15 = *v13;
        v13[v14] = *v13;
        ++v13;
      }
      while ( v15 );
    }
  }
}

//----- (006B4D70) --------------------------------------------------------
tagItemMallFileData *__thiscall ItemMallInfo::GetData(ItemMallInfo *this, int LocaleNum, int URLNum)
{
  signed int v3; // edx@1
  char *v4; // esi@1
  int v5; // eax@2

  v3 = 0;
  v4 = (char *)this->m_pData;
  while ( 1 )
  {
    v5 = *(_DWORD *)v4;
    if ( *(_DWORD *)v4 == -1 || LocaleNum < v5 )
      return 0;
    if ( LocaleNum == v5 && URLNum == *((_DWORD *)v4 + 1) )
      break;
    ++v3;
    v4 += 136;
    if ( v3 >= 64 )
      return 0;
  }
  return &this->m_pData[v3];
}

//----- (006B4DC0) --------------------------------------------------------
int __thiscall ItemMallInfo::GetTotalLocaleNum(ItemMallInfo *this)
{
  int result; // eax@1
  signed int v2; // edi@1
  signed int v3; // edx@1
  char *v4; // esi@1

  result = 0;
  v2 = -1;
  v3 = 0;
  v4 = (char *)this->m_pData;
  do
  {
    if ( *(_DWORD *)v4 == -1 )
      break;
    if ( v2 != *(_DWORD *)v4 )
    {
      ++result;
      v2 = *(_DWORD *)v4;
    }
    ++v3;
    v4 += 136;
  }
  while ( v3 < 64 );
  return result;
}

//----- (006B4DF0) --------------------------------------------------------
int __thiscall ItemMallInfo::GetTotalURLNum(ItemMallInfo *this, int LocaleNum)
{
  int result; // eax@1
  signed int v3; // esi@2
  char *v4; // edx@2
  int v5; // ecx@3

  result = -1;
  if ( (unsigned int)LocaleNum > 0x3F )
  {
    result = -1;
  }
  else
  {
    v3 = 0;
    v4 = (char *)this->m_pData;
    do
    {
      v5 = *(_DWORD *)v4;
      if ( *(_DWORD *)v4 == -1 || LocaleNum < v5 )
        break;
      if ( LocaleNum == v5 )
        result = *((_DWORD *)v4 + 1);
      ++v3;
      v4 += 136;
    }
    while ( v3 < 64 );
  }
  return result;
}

//----- (006B4E30) --------------------------------------------------------
int __thiscall ItemMallInfo::GetTotalChunkNum(ItemMallInfo *this)
{
  return this->m_pHeader.TotalChunkCount;
}

//----- (006B4E40) --------------------------------------------------------
void __thiscall ItemMallInfo::Clear(ItemMallInfo *this)
{
  ItemMallInfo *v1; // esi@1

  v1 = this;
  memset((char *)this->m_pData, -1, 0x2200u);
  v1->m_pHeader.TotalChunkCount = 0;
}

//----- (006B4E60) --------------------------------------------------------
void __thiscall ItemMallInfo::ItemMallInfo(ItemMallInfo *this)
{
  ItemMallInfo *v1; // esi@1

  v1 = this;
  memset((char *)this->m_pData, -1, 0x2200u);
  v1->m_pHeader.TotalChunkCount = 0;
  *(_DWORD *)&v1->m_EncodeTable[0] = 689917234;
  *(_DWORD *)&v1->m_EncodeTable[4] = -1803431516;
  *(_DWORD *)&v1->m_EncodeTable[8] = 1482386196;
  *(_DWORD *)&v1->m_EncodeTable[12] = -953543731;
  *(_DWORD *)&v1->m_EncodeTable[16] = 710606797;
  *(_DWORD *)&v1->m_EncodeTable[20] = -1975659615;
  *(_DWORD *)&v1->m_EncodeTable[24] = 972304835;
  *(_DWORD *)&v1->m_EncodeTable[28] = 1276858049;
}

//----- (006B4EE0) --------------------------------------------------------
bool __thiscall ItemMallInfo::LoadFromFile(ItemMallInfo *this, const char *FileName)
{
  ItemMallInfo *v2; // esi@1
  _iobuf *v3; // edi@1
  bool result; // al@2
  void *v5; // ebx@3
  int i; // edi@5
  _iobuf *fp; // [sp+10h] [bp+8h]@1

  v2 = this;
  v3 = fopen(FileName, "rb");
  fp = v3;
  if ( v3 )
  {
    v5 = v2->m_pData;
    memset((char *)v2->m_pData, -1, 0x2200u);
    v2->m_pHeader.TotalChunkCount = 0;
    fread(v2, 1u, 4u, v3);
    v2->m_pHeader.TotalChunkCount ^= v2->m_EncodeTable[0];
    if ( v2->m_pHeader.TotalChunkCount <= 64 )
    {
      for ( i = 0; i < v2->m_pHeader.TotalChunkCount; v5 = (char *)v5 + 136 )
      {
        fread(v5, 1u, 0x88u, fp);
        ++i;
      }
      ItemMallInfo::Encoding(v2);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006B4F80) --------------------------------------------------------
bool __cdecl SaveSurfaceToJPG(char *acFn, IDirect3DSurface9 *pkSurf)
{
  bool result; // al@2
  bool v3; // bl@6
  JpgImage::ImageInfo kInfo; // [sp+8h] [bp-48h]@6
  JpgImage kJpg; // [sp+18h] [bp-38h]@1
  _D3DLOCKED_RECT kLock; // [sp+24h] [bp-2Ch]@5
  _D3DSURFACE_DESC kSurfDesc; // [sp+2Ch] [bp-24h]@3
  unsigned int v8; // [sp+4Ch] [bp-4h]@1
  int v9; // [sp+50h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  JpgImage::JpgImage(&kJpg);
  if ( !pkSurf
    || ((int (__stdcall *)(IDirect3DSurface9 *, _D3DSURFACE_DESC *))pkSurf->baseclass_0.baseclass_0.lpVtbl[4].QueryInterface)(
         pkSurf,
         &kSurfDesc)
    || kSurfDesc.Format != 20
    || ((int (__stdcall *)(IDirect3DSurface9 *, _D3DLOCKED_RECT *, _DWORD, _DWORD))pkSurf->baseclass_0.baseclass_0.lpVtbl[4].AddRef)(
         pkSurf,
         &kLock,
         0,
         0) )
  {
    result = 0;
  }
  else
  {
    kInfo.dwHeight = kSurfDesc.Height;
    kInfo.dwWidth = kSurfDesc.Width;
    kInfo.dwPitch = kLock.Pitch;
    kInfo.pbyBits = (char *)kLock.pBits;
    kJpg.m_eInputColorOrder = 2;
    kJpg.m_iQuality = 100;
    v3 = JpgImage::Save(&kJpg, acFn, &kInfo);
    pkSurf->baseclass_0.baseclass_0.lpVtbl[4].Release((IUnknown *)pkSurf);
    result = v3;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B5040) --------------------------------------------------------
IDirect3DSurface9 *__cdecl CloneSurfaceToR8G8B8(IDirect3DSurface9 *pkSrcSurf, tagRECT *pkRect, IDirect3DDevice9 *pkDevice)
{
  IDirect3DDevice9 *v3; // edi@1
  int v4; // ecx@4
  int v5; // edx@4
  int v6; // eax@4
  int v7; // esi@4
  unsigned int v8; // eax@12
  unsigned int v9; // ecx@12
  bool v10; // zf@17
  IDirect3DSurface9 *result; // eax@17
  IDirect3DSurface9 *pkDestSurf; // [sp+10h] [bp-38h]@16
  _D3DSURFACE_DESC kSurfDesc; // [sp+14h] [bp-34h]@2
  tagRECT SaveRect; // [sp+34h] [bp-14h]@4
  unsigned int v15; // [sp+44h] [bp-4h]@1
  int v16; // [sp+48h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = pkDevice;
  if ( pkDevice
    && !((int (__stdcall *)(IDirect3DSurface9 *, _D3DSURFACE_DESC *))pkSrcSurf->baseclass_0.baseclass_0.lpVtbl[4].QueryInterface)(
          pkSrcSurf,
          &kSurfDesc) )
  {
    if ( pkRect )
    {
      v4 = pkRect->left;
      v5 = pkRect->top;
      v6 = pkRect->right;
      v7 = pkRect->bottom;
      SaveRect.left = v4;
      SaveRect.top = v5;
      SaveRect.right = v6;
      SaveRect.bottom = v7;
      if ( v4 < 0 )
      {
        v4 = 0;
        SaveRect.left = 0;
      }
      if ( v5 < 0 )
      {
        v5 = 0;
        SaveRect.top = 0;
      }
      if ( (signed int)kSurfDesc.Width < v6 )
      {
        v6 = kSurfDesc.Width;
        SaveRect.right = kSurfDesc.Width;
      }
      if ( (signed int)kSurfDesc.Height < v7 )
      {
        v7 = kSurfDesc.Height;
        SaveRect.bottom = kSurfDesc.Height;
      }
      v3 = pkDevice;
      v8 = v6 - v4;
      v9 = v7 - v5;
    }
    else
    {
      v8 = kSurfDesc.Width;
      v9 = kSurfDesc.Height;
      SaveRect.left = 0;
      SaveRect.top = 0;
      SaveRect.right = kSurfDesc.Width;
      SaveRect.bottom = kSurfDesc.Height;
    }
    if ( (signed int)v8 > 0
      && (signed int)v9 > 0
      && ((int (__stdcall *)(IDirect3DDevice9 *, unsigned int, unsigned int, signed int, signed int, IDirect3DSurface9 **, _DWORD))v3->baseclass_0.lpVtbl[12].QueryInterface)(
           v3,
           v8,
           v9,
           20,
           3,
           &pkDestSurf,
           0) >= 0 )
    {
      v10 = D3DXLoadSurfaceFromSurface(pkDestSurf, 0, 0, pkSrcSurf, 0, &SaveRect, 1, 0) == 0;
      result = pkDestSurf;
      if ( v10 )
        return result;
      pkDestSurf->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)pkDestSurf);
    }
  }
  return 0;
}
// 915440: using guessed type int __stdcall D3DXLoadSurfaceFromSurface(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// A85C00: using guessed type int __security_cookie;

//----- (006B5160) --------------------------------------------------------
bool __cdecl SaveSurfaceToFileInRect(char *acFn, IDirect3DSurface9 *pkSurf, tagRECT *pkRect, IDirect3DDevice9 *pkDevice)
{
  IDirect3DSurface9 *v5; // eax@3
  IDirect3DSurface9 *v6; // esi@3

  if ( !pkDevice )
    return 0;
  v5 = CloneSurfaceToR8G8B8(pkSurf, pkRect, pkDevice);
  v6 = v5;
  if ( v5 )
  {
    if ( SaveSurfaceToJPG(acFn, v5) )
    {
      v6->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v6);
      return 1;
    }
    v6->baseclass_0.baseclass_0.lpVtbl->Release((IUnknown *)v6);
  }
  return 0;
}

//----- (006B51B0) --------------------------------------------------------
bool __cdecl ScreenShot_InFileName(NiRenderer *pkRenderer, HWND__ *hWnd, char *pcFilename, int iFilenameLen, const char *pkCreateFileName)
{
  int v5; // esi@0
  NiRefObjectVtbl *v7; // esi@3
  tagRECT *v8; // ebx@7
  const char *v9; // eax@10
  const char v10; // cl@11
  const char *v11; // eax@17
  const char v12; // cl@18
  int v13; // [sp-4h] [bp-138h]@3
  IDirect3DSurface9 *pkSurf; // [sp+8h] [bp-12Ch]@5
  tagRECT kWinRect; // [sp+Ch] [bp-128h]@8
  _D3DDISPLAYMODE kD3DDM; // [sp+1Ch] [bp-118h]@4
  char szFileName[260]; // [sp+2Ch] [bp-108h]@10
  unsigned int v18; // [sp+130h] [bp-4h]@1
  int v19; // [sp+134h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  if ( !pkRenderer )
    return 0;
  v13 = v5;
  v7 = pkRenderer[1].baseclass_0.baseclass_0.vfptr;
  if ( !v7
    || (*(int (__stdcall **)(NiRefObjectVtbl *, _DWORD, _D3DDISPLAYMODE *))((int (__stdcall **)(_DWORD, _DWORD, _DWORD))v7->__vecDelDtor
                                                                          + 8))(
         v7,
         0,
         &kD3DDM) < 0
    || (*(int (__stdcall **)(NiRefObjectVtbl *, unsigned int, unsigned int, signed int, signed int, IDirect3DSurface9 **, _DWORD))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v7->__vecDelDtor + 36))(
         v7,
         kD3DDM.Width,
         kD3DDM.Height,
         21,
         3,
         &pkSurf,
         0) < 0 )
    return 0;
  if ( (*(int (__stdcall **)(NiRefObjectVtbl *, _DWORD, IDirect3DSurface9 *, int))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))v7->__vecDelDtor
                                                                                 + 33))(
         v7,
         0,
         pkSurf,
         v13) >= 0 )
  {
    v8 = 0;
    if ( hWnd && GetWindowRect(hWnd, &kWinRect) )
      v8 = &kWinRect;
    szFileName[0] = 0;
    memset(&szFileName[1], 0, 0x103u);
    v9 = pkCreateFileName;
    do
    {
      v10 = *v9;
      v9[szFileName - pkCreateFileName] = *v9;
      ++v9;
    }
    while ( v10 );
    if ( !SaveSurfaceToFileInRect(szFileName, pkSurf, v8, (IDirect3DDevice9 *)v7) )
    {
      ((void (__cdecl *)(IDirect3DSurface9 *))pkSurf->baseclass_0.baseclass_0.lpVtbl->Release)(pkSurf);
      return 0;
    }
    if ( pcFilename && (signed int)strlen(pkCreateFileName) < iFilenameLen )
    {
      v11 = pkCreateFileName;
      do
      {
        v12 = *v11;
        v11[pcFilename - pkCreateFileName] = *v11;
        ++v11;
      }
      while ( v12 );
    }
  }
  ((void (__cdecl *)(IDirect3DSurface9 *))pkSurf->baseclass_0.baseclass_0.lpVtbl->Release)(pkSurf);
  return 1;
}
// 6B51B0: could not find valid save-restore pair for esi
// A85C00: using guessed type int __security_cookie;

//----- (006B5340) --------------------------------------------------------
bool __cdecl ScreenShot(NiRenderer *pkRenderer, HWND__ *hWnd, char *pcFilename, int iFilenameLen)
{
  char *v4; // eax@1
  int v5; // edx@1
  char v6; // cl@2
  size_t v7; // ST24_4@3
  char *v8; // eax@3
  signed int v9; // esi@3
  _iobuf *v10; // eax@7
  char *v12; // [sp-10h] [bp-330h]@5
  const char *v13; // [sp-Ch] [bp-32Ch]@5
  char acFullPath[260]; // [sp+10h] [bp-310h]@1
  char acFullPathFilename[260]; // [sp+114h] [bp-20Ch]@3
  char acFilename[260]; // [sp+218h] [bp-108h]@3
  unsigned int v17; // [sp+31Ch] [bp-4h]@1
  int v18; // [sp+320h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  memset(acFullPath, 0, 0x104u);
  PgSHGetPathFromIDList(acFullPath);
  v4 = TextData2::Get(0x283C958Du);
  v5 = (int)(v4 + 1);
  do
    v6 = *v4++;
  while ( v6 );
  v7 = (size_t)&v4[-v5];
  v8 = TextData2::Get(0x283C958Du);
  strncat(acFullPath, v8, v7);
  _mkdir(acFullPath);
  acFullPathFilename[0] = 0;
  memset(&acFullPathFilename[1], 0, 0x103u);
  acFilename[0] = 0;
  memset(&acFilename[1], 0, 0x103u);
  v9 = -1;
  while ( 1 )
  {
    ++v9;
    if ( v9 >= 1000 )
    {
      v13 = "%s%d.jpg";
      v12 = acFilename;
    }
    else
    {
      v13 = "%s%03d.jpg";
      v12 = acFilename;
    }
    sprintf(v12, v13);
    sprintf(acFullPathFilename, "%s\\%s");
    v10 = fopen(acFullPathFilename, "rb");
    if ( !v10 )
      break;
    fclose(v10);
  }
  return ScreenShot_InFileName(pkRenderer, hWnd, pcFilename, iFilenameLen, acFullPathFilename);
}
// A85C00: using guessed type int __security_cookie;

//----- (006B54C0) --------------------------------------------------------
bool __cdecl ScreenShot_UserName(NiRenderer *pkRenderer, HWND__ *hWnd, char *pcFilename, int iFilenameLen)
{
  unsigned int v4; // ST24_4@1
  const char *v5; // eax@1
  char *v6; // esi@5
  signed int v7; // edi@5
  _iobuf *v8; // eax@9
  bool v9; // bl@11
  int nIndex; // [sp+0h] [bp-35Ch]@3
  char *v12; // [sp+4h] [bp-358h]@1
  int v13; // [sp+8h] [bp-354h]@3
  HWND__ *v14; // [sp+Ch] [bp-350h]@1
  NiRenderer *v15; // [sp+10h] [bp-34Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strUserName; // [sp+14h] [bp-348h]@1
  _SYSTEMTIME st; // [sp+30h] [bp-32Ch]@1
  char acFullPathFilename[260]; // [sp+40h] [bp-31Ch]@5
  char szUserInfoFileName[260]; // [sp+144h] [bp-218h]@1
  char acFilename[260]; // [sp+248h] [bp-114h]@5
  unsigned int v21; // [sp+34Ch] [bp-10h]@1
  int v22; // [sp+358h] [bp-4h]@1
  int v23; // [sp+35Ch] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v4 = (unsigned int)&v23 ^ __security_cookie;
  v15 = pkRenderer;
  v14 = hWnd;
  v12 = pcFilename;
  GetLocalTime(&st);
  szUserInfoFileName[0] = 0;
  memset(&szUserInfoFileName[1], 0, 0x103u);
  v5 = (const char *)((int (__stdcall *)(unsigned int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
  strUserName.baseclass_0._Myres = 15;
  strUserName.baseclass_0._Mysize = 0;
  strUserName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strUserName, v5, strlen(v5));
  v22 = 0;
  if ( !strUserName.baseclass_0._Mysize )
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strUserName, "NoName", 6u);
  nIndex = Server::GetSelectServerIndex(&g_kServer);
  v13 = 0;
  sprintf(szUserInfoFileName, "%04d_%02d_%02d_%02d_%02d_%02d_w%d_%s");
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMain, SCREENSHOT_PATHNAME);
  _mkdir(v6);
  acFullPathFilename[0] = 0;
  memset(&acFullPathFilename[1], 0, 0x103u);
  acFilename[0] = 0;
  memset(&acFilename[1], 0, 0x103u);
  v7 = -1;
  while ( 1 )
  {
    ++v7;
    if ( v7 )
      sprintf(acFilename, "%s_%d.jpg");
    else
      sprintf(acFilename, "%s.jpg");
    sprintf(acFullPathFilename, "%s\\%s");
    v8 = fopen(acFullPathFilename, "rb");
    if ( !v8 )
      break;
    fclose(v8);
  }
  v9 = ScreenShot_InFileName(v15, v14, v12, iFilenameLen, acFullPathFilename);
  if ( strUserName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strUserName);
  return v9;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006B5750) --------------------------------------------------------
void __thiscall JpgImage::JpgImage(JpgImage *this)
{
  this->m_eSampling = 1;
  this->m_iQuality = 75;
  this->m_eInputColorOrder = 1;
}

//----- (006B5770) --------------------------------------------------------
bool __thiscall JpgImage::Save(JpgImage *this, char *acFn, JpgImage::ImageInfo *rkInfo)
{
  int v3; // eax@0
  void *v4; // esp@1
  JpgImage *v5; // edi@1
  int v6; // ecx@2
  _JPEG_CORE_PROPERTIES jcprops; // [sp+4h] [bp-4E84h]@1
  unsigned int v8; // [sp+4E6Ch] [bp-1Ch]@1
  int v9; // [sp+4E78h] [bp-10h]@1
  _EXCEPTION_DISPOSITION (__cdecl *v10)(_EXCEPTION_RECORD *, _EXCEPTION_REGISTRATION_RECORD *, _CONTEXT *, void *); // [sp+4E7Ch] [bp-Ch]@1
  unsigned int v11; // [sp+4E80h] [bp-8h]@1
  int v12; // [sp+4E84h] [bp-4h]@1
  int v13; // [sp+4E88h] [bp+0h]@1

  v10 = _except_handler4;
  v9 = v3;
  v4 = alloca(20080);
  v11 = __security_cookie ^ (unsigned int)&unk_A65188;
  v8 = (unsigned int)&v13 ^ __security_cookie;
  v5 = this;
  v12 = 0;
  if ( !ijlInit((int)&jcprops, (int)&jcprops) )
  {
    v6 = rkInfo->dwPitch - 3 * rkInfo->dwWidth;
    jcprops.DIBWidth = rkInfo->dwWidth;
    jcprops.DIBHeight = rkInfo->dwHeight;
    jcprops.DIBBytes = rkInfo->pbyBits;
    jcprops.DIBPadBytes = v6;
    jcprops.DIBChannels = 3;
    jcprops.DIBColor = v5->m_eInputColorOrder;
    jcprops.JPGFile = acFn;
    jcprops.JPGWidth = jcprops.DIBWidth;
    jcprops.JPGHeight = jcprops.DIBHeight;
    jcprops.JPGChannels = 3;
    jcprops.JPGColor = 3;
    jcprops.JPGSubsampling = v5->m_eSampling;
    jcprops.jquality = v5->m_iQuality;
    ijlWrite(jcprops.JPGSubsampling, &jcprops, IJL_JFILE_WRITEWHOLEIMAGE);
  }
  v12 = -2;
  JUMPOUT(loc_6B5893);
}
// 6B5770: could not find valid save-restore pair for ebx
// 6B5770: could not find valid save-restore pair for edi
// 6B5770: could not find valid save-restore pair for esi
// 6B5893: using guessed type int __stdcall loc_6B5893(int acFn, int rkInfo);
// A85C00: using guessed type int __security_cookie;

//----- (006B58A0) --------------------------------------------------------
void __cdecl std::fill<std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>___std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>>(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *_First, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *_Last, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *_Val)
{
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *i; // eax@1

  for ( i = _First; i != _Last; ++i )
    *(_DWORD *)&i->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&_Val->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
}

//----- (006B58C0) --------------------------------------------------------
int ____Uninit_move_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__PAV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVie(...)
{
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v6; // ecx@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&v6->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    ++v6;
  }
  return result;
}

//----- (006B58F0) --------------------------------------------------------
int ____Uninit_fill_n_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__IV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVi(...)
{
  unsigned int v6; // ecx@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v7; // eax@2

  v6 = _Count;
  if ( _Count )
  {
    v7 = _First;
    do
    {
      if ( v7 )
        *(_DWORD *)&v7->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)&_Pval->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      ++v7;
      --v6;
    }
    while ( v6 );
  }
}

//----- (006B5920) --------------------------------------------------------
void __thiscall ProduceInfoTable::MaterialInfo::MaterialInfo(ProduceInfoTable::MaterialInfo *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > InxName)
{
  ProduceInfoTable::MaterialInfo *v2; // esi@1
  bool v3; // cf@1

  v2 = this;
  this->m_InxName.baseclass_0._Myres = 15;
  this->m_InxName.baseclass_0._Mysize = 0;
  this->m_InxName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_InxName,
    &InxName,
    0,
    0xFFFFFFFFu);
  v3 = InxName.baseclass_0._Myres < 0x10;
  *(_DWORD *)&v2->m_MasteryType[0] = 0;
  *(_WORD *)&v2->m_MasteryType[4] = 0;
  v2->m_MasteryType[6] = 0;
  if ( !v3 )
    operator delete(*(void **)&InxName);
}

//----- (006B59A0) --------------------------------------------------------
ProduceInfoTable::MaterialInfo *__cdecl ProduceInfoTable::GetMaterialInfo(std::basic_string<char,std::char_traits<char>,std::allocator<char> > Material)
{
  ProduceInfoTable::MaterialInfo *v1; // esi@2
  ProduceInfoTable::MaterialInfo *v2; // eax@4
  std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > result; // [sp+0h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v4 = 0;
  std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(
    &ProduceInfoTable::m_MaterialMap,
    &result,
    &Material);
  if ( result == *(_DWORD *)&stru_B679D4 )
  {
    if ( Material.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&Material);
    v2 = 0;
  }
  else
  {
    v1 = *(ProduceInfoTable::MaterialInfo **)(*(_DWORD *)&result + 36);
    if ( Material.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&Material);
    v2 = v1;
  }
  return v2;
}

//----- (006B5A40) --------------------------------------------------------
void __cdecl ProduceInfoTable::SetMaterialInfo(std::basic_string<char,std::char_traits<char>,std::allocator<char> > Material, int iMasteryType)
{
  unsigned int v2; // esi@1
  signed int v3; // ecx@1
  unsigned int v4; // edi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@3
  int v6; // eax@5
  void *v7; // esi@11
  void *v8; // eax@12
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *> *v9; // eax@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v10; // [sp-28h] [bp-68h]@12
  int v11; // [sp-18h] [bp-58h]@12
  signed int v12; // [sp-14h] [bp-54h]@12
  void *v13; // [sp-10h] [bp-50h]@9
  unsigned int v14; // [sp-Ch] [bp-4Ch]@1
  char v15; // [sp+0h] [bp-40h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // [sp+4h] [bp-3Ch]@12
  int v17; // [sp+8h] [bp-38h]@1
  void *pkMaterialInfo; // [sp+Ch] [bp-34h]@10
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *> result; // [sp+10h] [bp-30h]@14
  unsigned int v20; // [sp+30h] [bp-10h]@1
  int v21; // [sp+3Ch] [bp-4h]@1
  int v22; // [sp+40h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v14 = (unsigned int)&v22 ^ __security_cookie;
  v17 = iMasteryType;
  v2 = Material.baseclass_0._Mysize;
  v21 = 0;
  v3 = Material.baseclass_0._Mysize;
  if ( Material.baseclass_0._Mysize >= 1 )
    v3 = 1;
  v4 = Material.baseclass_0._Myres;
  v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Material;
  if ( Material.baseclass_0._Myres < 0x10 )
    v5 = &Material;
  v6 = std::char_traits<char>::compare(v5->baseclass_0.___u0.baseclass_0.dummy, "-", v3);
  if ( !v6 )
  {
    if ( v2 >= 1 )
    {
      LOBYTE(v6) = v2 != 1;
      if ( !v6 )
      {
        if ( v4 < 0x10 )
          return;
        v13 = *(void **)&Material;
        goto LABEL_19;
      }
    }
  }
  std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>_0>>::lower_bound(
    &ProduceInfoTable::m_MaterialMap,
    (std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > *)&pkMaterialInfo,
    &Material);
  if ( pkMaterialInfo == *(void **)&stru_B679D4 )
  {
    v7 = operator new(0x24u);
    pkMaterialInfo = v7;
    LOBYTE(v21) = 1;
    if ( v7 )
    {
      v16 = &v10;
      v12 = 15;
      v11 = 0;
      v10.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v10, &Material, 0, 0xFFFFFFFFu);
      ProduceInfoTable::MaterialInfo::MaterialInfo((ProduceInfoTable::MaterialInfo *)v7, v10);
    }
    else
    {
      v8 = 0;
    }
    *((_BYTE *)v8 + v17 + 28) = 1;
    pkMaterialInfo = v8;
    LOBYTE(v21) = 0;
    v9 = std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___ProduceInfoTable::MaterialInfo____>(
           &result,
           &Material,
           (ProduceInfoTable::MaterialInfo **)&pkMaterialInfo);
    LOBYTE(v21) = 2;
    ___insert_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_ProduceInfoTable___std______Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_ProduceInfoTable__V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_Produce(
      (std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,st *)&ProduceInfoTable::m_MaterialMap,
      (std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ProduceInfoTable::MaterialInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> *)&v15,
      v9);
    if ( result.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
  }
  else
  {
    *(_BYTE *)(*((_DWORD *)pkMaterialInfo + 9) + v17 + 28) = 1;
  }
  if ( Material.baseclass_0._Myres >= 0x10 )
  {
    v13 = *(void **)&Material;
LABEL_19:
    operator delete(v13);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006B5BC0) --------------------------------------------------------
void __cdecl ProduceInfoTable::BuildMeterialMap()
{
  int v0; // eax@1
  unsigned int v1; // edi@4
  void *v2; // eax@5
  void *v3; // esi@5
  int v4; // eax@6
  char v5; // dl@7
  int v6; // eax@8
  char v7; // dl@9
  int v8; // eax@10
  char v9; // dl@11
  int v10; // eax@12
  char v11; // dl@13
  int v12; // eax@14
  char v13; // dl@15
  int v14; // eax@16
  char v15; // dl@17
  int v16; // eax@18
  char v17; // dl@19
  char v18; // [sp-20h] [bp-38h]@6
  int v19; // [sp-10h] [bp-28h]@6
  signed int v20; // [sp-Ch] [bp-24h]@6
  int v21; // [sp-4h] [bp-1Ch]@6
  char *v22; // [sp+Ch] [bp-Ch]@6
  unsigned int i; // [sp+10h] [bp-8h]@4
  unsigned int v24; // [sp+14h] [bp-4h]@2

  v0 = *(_DWORD *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 56);
  if ( v0 )
    v24 = *(_DWORD *)(v0 + 40);
  else
    v24 = 0;
  v1 = 0;
  for ( i = 0; v1 < v24; i = v1 )
  {
    v2 = CDataReader::GetRecord((CDataReader *)(ITableBase<ProduceInfo_ProduceInfoTable>::ms_pkTable + 4), v1);
    v3 = v2;
    if ( v2 )
    {
      v21 = *(_DWORD *)((char *)v2 + 422);
      v4 = (int)((char *)v2 + 134);
      v20 = 15;
      v19 = 0;
      v18 = 0;
      v22 = (char *)v3 + 135;
      do
        v5 = *(_BYTE *)v4++;
      while ( v5 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 134,
        v4 - (_DWORD)v22);
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v21 = *(_DWORD *)((char *)v3 + 422);
      v6 = (int)((char *)v3 + 170);
      v20 = 15;
      v19 = 0;
      v18 = 0;
      v22 = (char *)v3 + 171;
      do
        v7 = *(_BYTE *)v6++;
      while ( v7 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 170,
        v6 - (_DWORD)v22);
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v21 = *(_DWORD *)((char *)v3 + 422);
      v8 = (int)((char *)v3 + 206);
      v20 = 15;
      v19 = 0;
      v18 = 0;
      v22 = (char *)v3 + 207;
      do
        v9 = *(_BYTE *)v8++;
      while ( v9 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 206,
        v8 - (_DWORD)v22);
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v21 = *(_DWORD *)((char *)v3 + 422);
      v10 = (int)((char *)v3 + 242);
      v20 = 15;
      v19 = 0;
      v18 = 0;
      v22 = (char *)v3 + 243;
      do
        v11 = *(_BYTE *)v10++;
      while ( v11 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 242,
        v10 - (_DWORD)v22);
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v21 = *(_DWORD *)((char *)v3 + 422);
      v12 = (int)((char *)v3 + 278);
      v20 = 15;
      v19 = 0;
      v18 = 0;
      v22 = (char *)v3 + 279;
      do
        v13 = *(_BYTE *)v12++;
      while ( v13 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 278,
        v12 - (_DWORD)v22);
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v21 = *(_DWORD *)((char *)v3 + 422);
      v14 = (int)((char *)v3 + 314);
      v20 = 15;
      v19 = 0;
      v18 = 0;
      v22 = (char *)v3 + 315;
      do
        v15 = *(_BYTE *)v14++;
      while ( v15 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 314,
        v14 - (_DWORD)v22);
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v21 = *(_DWORD *)((char *)v3 + 422);
      v16 = (int)((char *)v3 + 350);
      v20 = 15;
      v19 = 0;
      v18 = 0;
      v22 = (char *)v3 + 351;
      do
        v17 = *(_BYTE *)v16++;
      while ( v17 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 350,
        v16 - (_DWORD)v22);
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v21 = *(_DWORD *)((char *)v3 + 422);
      v20 = 15;
      v19 = 0;
      v22 = &v18;
      v18 = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        (const char *)v3 + 386,
        strlen((const char *)v3 + 386));
      ProduceInfoTable::SetMaterialInfo(
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v18,
        v21);
      v1 = i;
    }
    ++v1;
  }
}
// A97E28: using guessed type int ITableBase_ProduceInfo_ProduceInfoTable___ms_pkTable;

//----- (006B5E40) --------------------------------------------------------
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *> *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>___ProduceInfoTable::MaterialInfo____>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *> *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, ProduceInfoTable::MaterialInfo **_Val2)
{
  result->baseclass_0.first.baseclass_0._Mysize = 0;
  result->baseclass_0.first.baseclass_0._Myres = 15;
  result->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &result->baseclass_0.first,
    _Val1,
    0,
    0xFFFFFFFFu);
  result->baseclass_0.second = *_Val2;
  return result;
}

//----- (006B5E80) --------------------------------------------------------
int ___insert_U__pair_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_ProduceInfoTable___std______Hash_V___Hmap_traits_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_ProduceInfoTable__V__hash_compare_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__U__less_V__basic_string_DU__char_traits_D_std__V__allocator_D_2__std___2__stdext__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__PAUMaterialInfo_Produce(...)
{
  std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ProduceInfoTable::MaterialInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,st *v3; // ebx@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node **v4; // eax@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v5; // edi@1
  std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node *v6; // eax@1
  unsigned int v7; // ecx@1

  v3 = this;
  v4 = *(std::_List_nod<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > >::_Node ***)&this->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = *v4;
  v6 = std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ActiveSkillInfo__>>(
         (std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > *)&this->_List,
         *v4,
         (*v4)->_Prev,
         (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *> *)_Val);
  v7 = v3->_List.baseclass_0.baseclass_0._Mysize;
  if ( 134217726 - v7 < 1 )
    std::_Xlength_error("list<T> too long");
  v3->_List.baseclass_0.baseclass_0._Mysize = v7 + 1;
  v5->_Prev = v6;
  v6->_Prev->_Next = v6;
  std::_Hash<std::_Hmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_ProduceInfoTable::MaterialInfo___stdext::hash_compare<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ProduceInfoTable::MaterialInfo__>>_0>>::_Insert(
    (std::_Hash<std::_Hmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,ItemInfo *,stdext::hash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,s *)v3,
    (std::pair<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *)result,
    (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> *)(**(_DWORD **)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 8),
    **(std::_List_iterator<std::_List_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,ItemInfo *> > > > **)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
  return result;
}

//----- (006B5F00) --------------------------------------------------------
char __thiscall CClientQuest::GetQuestPlayerLevel(CClientQuest *this)
{
  return User::Lv(&g_kUser);
}

//----- (006B5F10) --------------------------------------------------------
unsigned __int16 __thiscall CClientQuest::GetQuestPlayerItemLot(CClientQuest *this, unsigned __int16 nItemID)
{
  return Inventory::GetItemCnt(&g_kInventory, nItemID);
}

//----- (006B5F20) --------------------------------------------------------
char __thiscall CClientQuest::GetQuestPlayerRace(CClientQuest *this)
{
  char v1; // al@1

  v1 = User::GetMainCharClass(&g_kUser);
  return CharClass::GetRace(v1);
}

//----- (006B5F40) --------------------------------------------------------
char __thiscall CClientQuest::GetQuestPlayerClass(CClientQuest *this)
{
  return User::GetMainCharClass(&g_kUser);
}

//----- (006B5F50) --------------------------------------------------------
char __thiscall CClientQuest::GetQuestPlayerGender(CClientQuest *this)
{
  return User::GetMainCharGender(&g_kUser);
}

//----- (006B5F60) --------------------------------------------------------
void __thiscall CClientQuest::SetQuestResetTime(CClientQuest *this, PROTO_NC_QUEST_RESET_TIME_CMD *pkReSet_Time)
{
  if ( pkReSet_Time )
  {
    this->baseclass_0.m_QuestRestTime.tResetYearQuest = pkReSet_Time->tResetYearQuest;
    this->baseclass_0.m_QuestRestTime.tResetMonthQuest = pkReSet_Time->tResetMonthQuest;
    this->baseclass_0.m_QuestRestTime.tResetWeekQuest = pkReSet_Time->tResetWeekQuest;
    this->baseclass_0.m_QuestRestTime.tResetDayQuest = pkReSet_Time->tResetDayQuest;
  }
}

//----- (006B5FA0) --------------------------------------------------------
void __thiscall CClientQuest::Occure_LevelChange(CClientQuest *this, unsigned __int16 nQuestID, char nPlayerLevel, char nDoneLevel)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B5FB0) --------------------------------------------------------
void __thiscall CClientQuest::Occure_DestroyItem(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nItemID, unsigned __int16 nCurrentLot, unsigned __int16 nDoneCount)
{
  QuestDataMgr::m_bUpdate = 1;
  CQuestWin2::ms_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A9A76C: using guessed type bool CQuestWin2__ms_bUpdate;

//----- (006B5FC0) --------------------------------------------------------
void __thiscall CClientQuest::Occure_CheckLocation(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nLocation)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B5FD0) --------------------------------------------------------
void __thiscall CClientQuest::Occure_RaceChange(CClientQuest *this, unsigned __int16 nQuestID, char nRace)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B5FE0) --------------------------------------------------------
void __thiscall CClientQuest::Occure_ClassChange(CClientQuest *this, unsigned __int16 nQuestID, char nClass)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B5FF0) --------------------------------------------------------
void __thiscall CClientQuest::Occure_TimeProcess(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 RunningTimeSec, unsigned __int16 TimeLimitSec)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B6000) --------------------------------------------------------
void __thiscall CClientQuest::Occure_NewStatusReward(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B6010) --------------------------------------------------------
void __thiscall CClientQuest::Occure_NewStatusFailed(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B6020) --------------------------------------------------------
void __thiscall CClientQuest::Occure_NewStatusIng(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData)
{
  QuestDataMgr::m_bUpdate = 1;
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;

//----- (006B6030) --------------------------------------------------------
void __thiscall CClientQuest::_Send_NC_QUEST_CLIENT_SCENARIO_DONE_REQ(CClientQuest *this, unsigned __int16 kID)
{
  GameFrameWork::NcQuestClientScenarioDoneReq((GameFrameWork *)this->m_pkFrameWork, kID);
}

//----- (006B6040) --------------------------------------------------------
void __thiscall CClientQuest::Occure_TakeItem(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nItemID, unsigned __int16 nCurrentLot, unsigned __int16 nDoneCount)
{
  int v5; // esi@1
  int (__thiscall *v6)(_DWORD, _DWORD); // edx@1
  int v7; // eax@3
  GameFrameWork *v8; // esi@9
  D3DXCOLOR *v9; // eax@10
  D3DXCOLOR v10; // ST08_16@10
  D3DXCOLOR result; // [sp+Ch] [bp-11Ch]@10
  CClientQuest *v12; // [sp+1Ch] [bp-10Ch]@1
  float v13; // [sp+20h] [bp-108h]@7
  char szText[256]; // [sp+24h] [bp-104h]@8
  unsigned int v15; // [sp+124h] [bp-4h]@1
  int v16; // [sp+128h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  QuestDataMgr::m_bUpdate = 1;
  CQuestWin2::ms_bUpdate = 1;
  v6 = *(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16);
  v12 = this;
  if ( (unsigned __int8)v6(ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable, nItemID) )
  {
    if ( nItemID <= *(_WORD *)(v5 + 200) )
    {
      v7 = *(_DWORD *)(v5 + 196) + 4 * nItemID;
      if ( *(_DWORD *)v7 )
      {
        if ( *(_DWORD *)v7 )
        {
          if ( nCurrentLot && nDoneCount )
            v13 = (double)(100 * nCurrentLot) / (double)nDoneCount;
          sprintf(szText, "%s %d/%d %d%%");
        }
      }
    }
  }
  v8 = (GameFrameWork *)v12->m_pkFrameWork;
  if ( v8 )
  {
    v9 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    *(_QWORD *)&v10.r = *(_QWORD *)&v9->r;
    *(_QWORD *)&v10.b = *(_QWORD *)&v9->b;
    GameFrameWork::AddAnnounceMsg(v8, szText, COERCE_D3DXCOLOR(v10.r));
  }
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// A9A76C: using guessed type bool CQuestWin2__ms_bUpdate;

//----- (006B6170) --------------------------------------------------------
void __thiscall CClientQuest::Occure_ScenarioDone(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nScenarioID)
{
  ScenarioMgr::GetScenarioMgr();
}

//----- (006B6180) --------------------------------------------------------
void __thiscall CClientQuest::QuestResultMessage(CClientQuest *this, QUEST_DATA::QUEST_REWARD *pReward)
{
  PgFrameWork *v2; // edi@1
  __int64 v3; // ST08_8@3
  int v4; // eax@3
  char *v5; // eax@4
  char *v6; // eax@4
  int v7; // eax@5
  char *v8; // eax@6
  char *v9; // eax@6
  int v10; // eax@7
  char *v11; // eax@8
  char *v12; // eax@8
  int v13; // eax@9
  char *v14; // eax@10
  char *v15; // eax@10
  char *v16; // eax@11
  char *v17; // eax@13
  char *v18; // ST0C_4@14
  char *v19; // eax@15
  MiniHouse *v20; // eax@17
  char *v21; // eax@17
  char *v22; // eax@18
  unsigned int v23; // [sp-14h] [bp-240h]@14
  const char *v24; // [sp-10h] [bp-23Ch]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strResult; // [sp+0h] [bp-22Ch]@3
  char szValue[256]; // [sp+1Ch] [bp-210h]@4
  char szResult[256]; // [sp+11Ch] [bp-110h]@11
  unsigned int v28; // [sp+21Ch] [bp-10h]@1
  int v29; // [sp+228h] [bp-4h]@3
  int v30; // [sp+22Ch] [bp+0h]@1

  v28 = (unsigned int)&v30 ^ __security_cookie;
  v2 = this->m_pkFrameWork;
  if ( v2 )
  {
    switch ( pReward->Type )
    {
      case 1:
        strResult.baseclass_0._Myres = 15;
        strResult.baseclass_0._Mysize = 0;
        strResult.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v3 = pReward->Value.Exp;
        v29 = 0;
        v4 = User::GetGem(v3);
        if ( v4 )
        {
          v5 = _itoa(v4, szValue, 10);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v5);
          v6 = TextData::Get(0x475F9699u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v6);
        }
        v7 = User::GetGold(pReward->Value.Exp);
        if ( v7 )
        {
          v8 = _itoa(v7, szValue, 10);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v8);
          v9 = TextData::Get(0x47A395A3u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v9);
        }
        v10 = User::GetSilver(pReward->Value.Exp);
        if ( v10 )
        {
          v11 = _itoa(v10, szValue, 10);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v11);
          v12 = TextData::Get(0x98B595EFu);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v12);
        }
        v13 = User::GetCopper(pReward->Value.Exp);
        if ( v13 )
        {
          v14 = _itoa(v13, szValue, 10);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v14);
          v15 = TextData::Get(0x88AF99F5u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strResult, v15);
        }
        v16 = TextData::Get(0x52210D7Du);
        sprintf(szResult, v16);
        GameFrameWork::AddSysMsg((GameFrameWork *)v2, szResult);
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strResult);
        return;
      case 2:
        if ( Item::Create(LOWORD(pReward->Value.Exp)) )
        {
          v17 = TextData::Get(0x5A181220u);
          sprintf(szResult, v17);
          v24 = szResult;
          goto LABEL_19;
        }
        return;
      case 3:
        v18 = IIDTableBase<AbnormalStateInfo_AbnormalStateInfoTab_unsigned_short>::GetByID(
                pReward->Value.Abstate.AbstateID,
                1)->InxName;
        v23 = 1634423897;
        goto LABEL_15;
      case 4:
        v23 = 1377894173;
LABEL_15:
        v19 = TextData::Get(v23);
        sprintf(szResult, v19);
        v24 = szResult;
        goto LABEL_19;
      case 6:
        v20 = MiniHouseTable::GetByHandle(LOBYTE(pReward->Value.Exp));
        ItemInfoTab::GetByInxName(v20->ItemID);
        v21 = TextData::Get(0xA97656B1u);
        sprintf(szResult, v21);
        v24 = szResult;
        goto LABEL_19;
      case 7:
        CCharacterTitleData::GetTitleString(
          &g_characterTitleData,
          LOBYTE(pReward->Value.Exp),
          BYTE1(pReward->Value.Exp));
        v22 = TextData::Get(0x59270770u);
        sprintf(szValue, v22);
        v24 = szValue;
LABEL_19:
        GameFrameWork::AddSysMsg((GameFrameWork *)v2, v24);
        break;
      default:
        return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006B64C0) --------------------------------------------------------
void __thiscall CClientQuest::Occure_Quest_Done(CClientQuest *this, PLAYER_QUEST_INFO *pQuestInfo, QUEST_DATA *pQuestData)
{
  CClientQuest *v3; // esi@1
  char *v4; // eax@2
  GameFrameWork *v5; // ecx@2
  signed int v6; // ebx@3
  QUEST_DATA::QUEST_REWARD *v7; // edi@3
  char v8; // al@4
  int v9; // eax@7
  tm tmServerTime; // [sp+Ch] [bp-A8h]@11
  char szQuestResult[128]; // [sp+30h] [bp-84h]@2
  unsigned int v12; // [sp+B0h] [bp-4h]@1
  int v13; // [sp+B4h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = this;
  if ( pQuestInfo )
  {
    CQuestData::GetQuestName(this->baseclass_0.m_pQuestData, pQuestInfo->ID);
    v4 = TextData::Get(0x52210D1Bu);
    sprintf(szQuestResult, v4);
    v5 = (GameFrameWork *)v3->m_pkFrameWork;
    if ( v5 )
    {
      GameFrameWork::AddSysMsg(v5, szQuestResult);
      v6 = 0;
      v7 = pQuestData->Reward;
      do
      {
        v8 = v7->Use;
        if ( v7->Use )
        {
          if ( v8 == 1 || v8 == 2 && (v9 = CClientQuest::GetRewardIndex(v3, pQuestInfo->ID), v9 >= 0) && v6 == v9 )
            CClientQuest::QuestResultMessage(v3, v7);
        }
        ++v6;
        ++v7;
      }
      while ( v6 < 12 );
      memcpy(&tmServerTime, &Timer::ms_dLastServerTime, sizeof(tmServerTime));
      pQuestInfo->Data.EndTime = _mktime64(&tmServerTime);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006B65B0) --------------------------------------------------------
CQuest *__cdecl QuestDataMgr::GetQuest()
{
  char *v0; // eax@13
  char *v2; // eax@18
  unsigned __int16 v3; // ax@20

  if ( !(_S3_9 & 1) )
  {
    _S3_9 |= 1u;
    CDataReader::CDataReader(&QuestDialog);
    atexit(QuestDataMgr::GetQuest_::_2_::_dynamic_atexit_destructor_for__QuestDialog__);
  }
  if ( !(_S3_9 & 2) )
  {
    _S3_9 |= 2u;
    CQuestData::CQuestData(&kQuestData, &QuestDialog);
    atexit(QuestDataMgr::GetQuest_::_2_::_dynamic_atexit_destructor_for__kQuestData__);
  }
  if ( !(_S3_9 & 4) )
  {
    _S3_9 |= 4u;
    CClientQuest::CClientQuest(&kQuest, &kQuestData);
    atexit(QuestDataMgr::GetQuest_::_2_::_dynamic_atexit_destructor_for__kQuest__);
  }
  if ( !bLoad )
  {
    if ( !Folder::m_bInit )
      Folder::Init();
    v0 = Folder::Merge(&Folder::m_acSystem, "QuestDialog.shn");
    if ( !CDataReader::Read(&QuestDialog, v0) )
      return 0;
    if ( !bLoad )
    {
      if ( !Folder::m_bInit )
        Folder::Init();
      v2 = Folder::Merge(&Folder::m_acSystem, "QuestData.shn");
      if ( !CQuestData::Read(&kQuestData, v2, 1) )
        return 0;
      if ( kQuestData.m_pDataHead )
        v3 = kQuestData.m_pDataHead->NumOfQuest;
      else
        v3 = 0;
      CQuest::InitQuestBF(&kQuest.baseclass_0, v3);
      bLoad = 1;
    }
  }
  return (CQuest *)&kQuest;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006B6740) --------------------------------------------------------
void __thiscall CClientQuest::Occure_NPCMobKill(CClientQuest *this, unsigned __int16 nQuestID, unsigned __int16 nNPCMobID, int nCurrentCount, int nDoneCount)
{
  int v5; // esi@1
  int v6; // edx@1
  int (__thiscall *v7)(_DWORD, _DWORD); // eax@1
  int v8; // eax@3
  int v9; // edi@3
  int (__stdcall *v10)(_DWORD); // eax@8
  int v11; // edx@10
  CQuest *v12; // eax@12
  CQuestData *v13; // ecx@13
  QUEST_DATA *v14; // eax@16
  int v15; // eax@19
  char v16; // al@22
  GameFrameWork *v17; // esi@34
  void *v18; // eax@37
  D3DXCOLOR v19; // ST08_16@41
  const char *v20; // [sp-14h] [bp-148h]@23
  D3DXCOLOR *v21; // [sp-14h] [bp-148h]@38
  char v22; // [sp-10h] [bp-144h]@36
  char v23; // [sp-Ch] [bp-140h]@36
  char v24; // [sp-8h] [bp-13Ch]@36
  char v25; // [sp-4h] [bp-138h]@36
  D3DXCOLOR result; // [sp+Ch] [bp-128h]@38
  void *pkMobInfo; // [sp+1Ch] [bp-118h]@4
  QUEST_DATA *lpQuest; // [sp+20h] [bp-114h]@1
  int v29; // [sp+24h] [bp-110h]@1
  int i; // [sp+28h] [bp-10Ch]@1
  float v31; // [sp+2Ch] [bp-108h]@7
  char szText[256]; // [sp+30h] [bp-104h]@32
  unsigned int v33; // [sp+130h] [bp-4h]@1
  int v34; // [sp+134h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v5 = ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  QuestDataMgr::m_bUpdate = 1;
  CQuestWin2::ms_bUpdate = 1;
  v6 = *(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable;
  lpQuest = (QUEST_DATA *)this;
  i = nQuestID;
  v7 = *(int (__thiscall **)(_DWORD, _DWORD))(v6 + 16);
  v29 = nNPCMobID;
  if ( (unsigned __int8)v7(ITableBase<MobInfo_MobInfoTab>::ms_pkTable, nNPCMobID) )
  {
    if ( nNPCMobID <= *(_WORD *)(v5 + 200) )
    {
      v8 = *(_DWORD *)(v5 + 196);
      v9 = 4 * nNPCMobID;
      if ( *(_DWORD *)(v8 + v9) )
      {
        pkMobInfo = *(void **)(v8 + v9);
        if ( pkMobInfo )
        {
          if ( nCurrentCount && nDoneCount )
            v31 = (double)(100 * nCurrentCount) / (double)nDoneCount;
          v10 = *(int (__stdcall **)(_DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 16);
          LODWORD(v31) = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
          if ( (unsigned __int8)v10(v29) )
          {
            if ( (unsigned __int16)v29 <= *(_WORD *)(LODWORD(v31) + 200) )
            {
              v11 = *(_DWORD *)(LODWORD(v31) + 196);
              if ( *(_DWORD *)(v9 + v11) )
              {
                if ( *(_DWORD *)(v9 + v11) )
                {
                  v12 = QuestDataMgr::GetQuest();
                  v13 = v12 ? v12->m_pQuestData : lpQuest;
                  v14 = v13 ? CQuestData::GetQuestData(v13, i) : lpQuest;
                  if ( v14 )
                  {
                    v15 = (int)&v14->End.NPCMobList[0].TargetGroup;
                    i = 0;
                    LODWORD(v31) = v15;
                    do
                    {
                      if ( !*(_BYTE *)(v15 - 6) )
                        break;
                      if ( *(_WORD *)(v15 - 4) == (_WORD)v29 )
                      {
                        v16 = *(_BYTE *)v15;
                        if ( !v16 )
                        {
                          v20 = "%s %d/%d %d%%";
LABEL_32:
                          sprintf(szText, v20);
                          goto LABEL_33;
                        }
                        if ( v16 == 1 )
                        {
                          v20 = "%s %d/%d %d%%";
                          goto LABEL_32;
                        }
                        if ( v16 == 2 )
                        {
                          v20 = "%s %d/%d %d%%";
                          goto LABEL_32;
                        }
                        if ( v16 == 3 )
                        {
                          v20 = "%s %d/%d %d%%";
                          goto LABEL_32;
                        }
                        if ( v16 == 4 )
                        {
                          v20 = "%s %d/%d %d%%";
                          goto LABEL_32;
                        }
                      }
LABEL_33:
                      v15 = LODWORD(v31) + 8;
                      ++i;
                      LODWORD(v31) += 8;
                    }
                    while ( i < 5 );
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  v17 = *(GameFrameWork **)&lpQuest->Action[0].IfType;
  if ( v17 )
  {
    if ( *(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable )
    {
      v18 = CDataReader::GetRecord(
              (CDataReader *)(*(_DWORD *)ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable + 4),
              0x32u);
      v25 = -1;
      if ( !v18 )
      {
        v24 = -1;
        v23 = 0;
        v22 = -1;
        v21 = &result;
LABEL_41:
        Color::GetDxColor(v21, v22, v23, v24, v25);
        *(_QWORD *)&v19.r = *(_QWORD *)&result;
        *(_QWORD *)&v19.b = *(_QWORD *)&result.b;
        GameFrameWork::AddAnnounceMsg(v17, szText, COERCE_D3DXCOLOR(v19.r));
        return;
      }
      v24 = *((_BYTE *)v18 + 6);
      v23 = *((_BYTE *)v18 + 5);
      v22 = *((_BYTE *)v18 + 4);
    }
    else
    {
      v25 = -1;
      v24 = -1;
      v23 = ITableBase<ColorInfoType_ColorInfoTable>::ms_pkTable[0];
      v22 = -1;
    }
    v21 = &result;
    goto LABEL_41;
  }
}
// A82E48: using guessed type bool QuestDataMgr__m_bUpdate;
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;
// A9A76C: using guessed type bool CQuestWin2__ms_bUpdate;

//----- (006B6A30) --------------------------------------------------------
int __thiscall CClientQuest::GetRewardIndex(CClientQuest *this, int nQuestID)
{
  CClientQuest *v2; // esi@1
  std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *v3; // edi@1
  int result; // eax@2
  int v5; // esi@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > iterFind; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&this->m_listRewardOfDoneQuest;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_listRewardOfDoneQuest,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&iterFind,
    (OscTarget *)&nQuestID);
  if ( v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead == (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)iterFind )
  {
    result = -1;
  }
  else
  {
    v5 = *(_DWORD *)(*(_DWORD *)&iterFind + 16);
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      v3,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&nQuestID,
      iterFind);
    result = v5;
  }
  return result;
}

//----- (006B6A80) --------------------------------------------------------
void __thiscall CClientQuest::CClientQuest(CClientQuest *this, CQuestData *pQuestData)
{
  CClientQuest *v2; // esi@1
  void *v3; // eax@1
  std::exception thisa; // [sp+0h] [bp-1Ch]@3
  CClientQuest *v5; // [sp+Ch] [bp-10h]@1
  int v6; // [sp+18h] [bp-4h]@1

  v2 = this;
  v5 = this;
  CQuest::CQuest(&this->baseclass_0, pQuestData);
  v2->baseclass_0.vfptr = (CQuestVtbl *)&CClientQuest::_vftable_;
  v6 = 0;
  v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x18u);
  if ( !v3 )
  {
    pQuestData = 0;
    std::exception::exception(&thisa, (const char *const *)&pQuestData);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v2->m_listRewardOfDoneQuest.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v2->m_pkFrameWork = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C8EF4: using guessed type int (__stdcall *CClientQuest___vftable_)(__int16 kID);

//----- (006B6B60) --------------------------------------------------------
void __thiscall DialogParser::DialogParser(DialogParser *this)
{
  this->m_pcCurrentStr = 0;
}

//----- (006B6B70) --------------------------------------------------------
void __thiscall QuestDialogParser::StartParsing(QuestDialogParser *this, CQuest *pkQuest, unsigned int wID)
{
  QuestDialogParser *v3; // esi@1
  CQuestData *v4; // ecx@2
  const char *v5; // eax@3

  v3 = this;
  if ( pkQuest )
  {
    v4 = pkQuest->m_pQuestData;
    if ( v4 )
    {
      v5 = CQuestData::GetDialog(v4, wID);
      if ( v5 )
      {
        if ( *v5 )
          v3->baseclass_0.m_pcCurrentStr = (char *)v5;
      }
    }
  }
}

//----- (006B6BA0) --------------------------------------------------------
char *__thiscall DialogParser::ParseBracedToken(DialogParser *this, char **rpcStr)
{
  char *v2; // edi@1
  char *v3; // eax@2
  signed int v4; // ebx@3
  char v5; // al@6
  char *result; // eax@9

  acToken[0] = 0;
  v2 = acToken;
  if ( **rpcStr == 91 && (v3 = *rpcStr + 1, *rpcStr = v3, *v3) )
  {
    v4 = 0;
    while ( 1 )
    {
      if ( v4 > 127 )
      {
        *v2 = 0;
        return v2;
      }
      if ( **rpcStr == 93 )
        break;
      v5 = **rpcStr;
      *v2 = v5;
      ++*rpcStr;
      ++v2;
      ++v4;
      if ( IsDBCSLeadByte(v5) )
      {
        *v2++ = **rpcStr;
        ++v4;
        ++*rpcStr;
      }
      if ( !**rpcStr )
        goto LABEL_9;
    }
    ++*rpcStr;
    *v2 = 0;
    result = acToken;
  }
  else
  {
LABEL_9:
    result = 0;
  }
  return result;
}

//----- (006B6C30) --------------------------------------------------------
DialogParser::TokenType __thiscall DialogParser::Parse(DialogParser *this, DialogParser::TokenDetail *rkDetail)
{
  DialogParser *v2; // esi@1
  char *v3; // ecx@1
  DialogParser::TokenType result; // eax@2
  char v5; // al@3
  char *v6; // eax@7
  int v7; // eax@13
  char *v8; // eax@15
  int v9; // eax@18
  int v10; // eax@23
  int v11; // eax@28
  int v12; // eax@35
  int v13; // eax@42
  int v14; // eax@49
  char *v15; // eax@54
  int v16; // eax@57
  int v17; // eax@64
  int v18; // eax@71
  char *v19; // eax@76
  int v20; // eax@79
  char *v21; // eax@84
  int v22; // eax@87
  char *v23; // edi@96
  BYTE v24; // al@97
  int v25; // ecx@104

  v2 = this;
  v3 = this->m_pcCurrentStr;
  if ( !v3 || (v5 = *v3) == 0 )
    return 11;
  if ( v5 == 10 )
  {
    v2->m_pcCurrentStr = v3 + 1;
    return 2;
  }
  if ( v5 != 91 )
  {
    if ( v5 == 93 )
    {
      v2->m_pcCurrentStr = v3 + 1;
      return 14;
    }
    v23 = v3;
    while ( 1 )
    {
      v24 = *v2->m_pcCurrentStr;
      if ( v24 == 10 || v24 == 91 )
      {
LABEL_104:
        v25 = v2->m_pcCurrentStr - v23;
        rkDetail->kNormal.pcNormalStr = v23;
        rkDetail->kNormal.iLength = v25;
        return 0;
      }
      if ( v24 == 93 )
        break;
      if ( IsDBCSLeadByte(v24) )
        v2->m_pcCurrentStr += 2;
      else
        ++v2->m_pcCurrentStr;
      if ( !*v2->m_pcCurrentStr )
        goto LABEL_104;
    }
    ++v2->m_pcCurrentStr;
    return 14;
  }
  v6 = DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr);
  if ( !v6 )
    return 14;
  if ( !strcmp(v6, "NAME") )
    return 1;
  if ( !strcmp(v6, "BUTTON") )
  {
    PgUtil::WhileSpace(&v2->m_pcCurrentStr);
    if ( *v2->m_pcCurrentStr )
    {
      do
      {
        if ( *v2->m_pcCurrentStr == 61 )
          break;
        v7 = (int)(v2->m_pcCurrentStr + 1);
        v2->m_pcCurrentStr = (char *)v7;
      }
      while ( *(_BYTE *)v7 );
    }
    ++v2->m_pcCurrentStr;
    PgUtil::WhileSpace(&v2->m_pcCurrentStr);
    if ( DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr) )
    {
      rkDetail->kNormal.pcNormalStr = fs("%s");
      PgUtil::WhileSpace(&v2->m_pcCurrentStr);
      v8 = DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr);
      if ( v8 )
      {
        rkDetail->kNormal.iLength = atoi(v8);
        if ( *v2->m_pcCurrentStr )
        {
          do
          {
            if ( *v2->m_pcCurrentStr == 10 )
              break;
            v9 = (int)(v2->m_pcCurrentStr + 1);
            v2->m_pcCurrentStr = (char *)v9;
          }
          while ( *(_BYTE *)v9 );
        }
LABEL_65:
        if ( *v2->m_pcCurrentStr == 10 )
          ++v2->m_pcCurrentStr;
        return 7;
      }
    }
    return 14;
  }
  if ( strcmp(v6, "BUTTON_NPC") )
  {
    if ( strcmp(v6, "LINE") )
    {
      if ( strcmp(v6, "SHOW_REWARD") )
      {
        if ( strcmp(v6, "EVENT") )
        {
          if ( strcmp(v6, "SCENARIO") )
          {
            if ( !strcmp(v6, "NEXT") )
            {
              TextData::Get(0x96ADFCF0u);
              rkDetail->kNormal.pcNormalStr = fs("%s");
              rkDetail->kNormal.iLength = 1;
              if ( *v2->m_pcCurrentStr )
              {
                do
                {
                  if ( *v2->m_pcCurrentStr == 10 )
                    break;
                  v17 = (int)(v2->m_pcCurrentStr + 1);
                  v2->m_pcCurrentStr = (char *)v17;
                }
                while ( *(_BYTE *)v17 );
              }
              goto LABEL_65;
            }
            if ( strcmp(v6, "MENU") )
            {
              if ( strcmp(v6, "EMOTION") )
              {
                if ( strcmp(v6, "DELAY") )
                {
                  if ( strcmp(v6, "END") )
                    result = 14;
                  else
                    result = 16;
                  return result;
                }
                PgUtil::WhileSpace(&v2->m_pcCurrentStr);
                v21 = DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr);
                if ( !v21 )
                  return 14;
                rkDetail->kNormal.pcNormalStr = (char *)atoi(v21);
                if ( *v2->m_pcCurrentStr )
                {
                  do
                  {
                    if ( *v2->m_pcCurrentStr == 10 )
                      break;
                    v22 = (int)(v2->m_pcCurrentStr + 1);
                    v2->m_pcCurrentStr = (char *)v22;
                  }
                  while ( *(_BYTE *)v22 );
                }
                if ( *v2->m_pcCurrentStr == 10 )
                  ++v2->m_pcCurrentStr;
                result = 15;
              }
              else
              {
                PgUtil::WhileSpace(&v2->m_pcCurrentStr);
                v19 = DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr);
                if ( !v19 )
                  return 14;
                rkDetail->kNormal.pcNormalStr = (char *)atoi(v19);
                if ( *v2->m_pcCurrentStr )
                {
                  do
                  {
                    if ( *v2->m_pcCurrentStr == 10 )
                      break;
                    v20 = (int)(v2->m_pcCurrentStr + 1);
                    v2->m_pcCurrentStr = (char *)v20;
                  }
                  while ( *(_BYTE *)v20 );
                }
                if ( *v2->m_pcCurrentStr == 10 )
                  ++v2->m_pcCurrentStr;
                result = 13;
              }
            }
            else
            {
              if ( *v2->m_pcCurrentStr )
              {
                do
                {
                  if ( *v2->m_pcCurrentStr == 10 )
                    break;
                  v18 = (int)(v2->m_pcCurrentStr + 1);
                  v2->m_pcCurrentStr = (char *)v18;
                }
                while ( *(_BYTE *)v18 );
              }
              if ( *v2->m_pcCurrentStr == 10 )
                ++v2->m_pcCurrentStr;
              result = 12;
            }
          }
          else
          {
            PgUtil::WhileSpace(&v2->m_pcCurrentStr);
            v15 = DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr);
            if ( !v15 )
              return 14;
            rkDetail->kNormal.pcNormalStr = (char *)atoi(v15);
            if ( *v2->m_pcCurrentStr )
            {
              do
              {
                if ( *v2->m_pcCurrentStr == 10 )
                  break;
                v16 = (int)(v2->m_pcCurrentStr + 1);
                v2->m_pcCurrentStr = (char *)v16;
              }
              while ( *(_BYTE *)v16 );
            }
            if ( *v2->m_pcCurrentStr == 10 )
              ++v2->m_pcCurrentStr;
            result = 9;
          }
        }
        else
        {
          if ( *v2->m_pcCurrentStr )
          {
            do
            {
              if ( *v2->m_pcCurrentStr == 10 )
                break;
              v14 = (int)(v2->m_pcCurrentStr + 1);
              v2->m_pcCurrentStr = (char *)v14;
            }
            while ( *(_BYTE *)v14 );
          }
          if ( *v2->m_pcCurrentStr == 10 )
            ++v2->m_pcCurrentStr;
          result = 6;
        }
      }
      else
      {
        if ( *v2->m_pcCurrentStr )
        {
          do
          {
            if ( *v2->m_pcCurrentStr == 10 )
              break;
            v13 = (int)(v2->m_pcCurrentStr + 1);
            v2->m_pcCurrentStr = (char *)v13;
          }
          while ( *(_BYTE *)v13 );
        }
        if ( *v2->m_pcCurrentStr == 10 )
          ++v2->m_pcCurrentStr;
        result = 3;
      }
    }
    else
    {
      if ( *v2->m_pcCurrentStr )
      {
        do
        {
          if ( *v2->m_pcCurrentStr == 10 )
            break;
          v12 = (int)(v2->m_pcCurrentStr + 1);
          v2->m_pcCurrentStr = (char *)v12;
        }
        while ( *(_BYTE *)v12 );
      }
      if ( *v2->m_pcCurrentStr == 10 )
        ++v2->m_pcCurrentStr;
      result = 4;
    }
  }
  else
  {
    PgUtil::WhileSpace(&v2->m_pcCurrentStr);
    if ( *v2->m_pcCurrentStr )
    {
      do
      {
        if ( *v2->m_pcCurrentStr == 61 )
          break;
        v10 = (int)(v2->m_pcCurrentStr + 1);
        v2->m_pcCurrentStr = (char *)v10;
      }
      while ( *(_BYTE *)v10 );
    }
    ++v2->m_pcCurrentStr;
    PgUtil::WhileSpace(&v2->m_pcCurrentStr);
    if ( !DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr)
      || (rkDetail->kNormal.pcNormalStr = fs("%s"),
          PgUtil::WhileSpace(&v2->m_pcCurrentStr),
          !DialogParser::ParseBracedToken(v2, &v2->m_pcCurrentStr)) )
      return 14;
    rkDetail->kNormal.iLength = (int)fs("%s");
    if ( *v2->m_pcCurrentStr )
    {
      do
      {
        if ( *v2->m_pcCurrentStr == 10 )
          break;
        v11 = (int)(v2->m_pcCurrentStr + 1);
        v2->m_pcCurrentStr = (char *)v11;
      }
      while ( *(_BYTE *)v11 );
    }
    if ( *v2->m_pcCurrentStr == 10 )
      ++v2->m_pcCurrentStr;
    result = 8;
  }
  return result;
}

//----- (006B72B0) --------------------------------------------------------
void __thiscall DialogParser::StartParsing(DialogParser *this, char *pcText, unsigned int uiSeqID)
{
  DialogParser *v3; // esi@1
  int v4; // edi@4
  DialogParser::TokenType i; // eax@4
  char rkDetail; // [sp+4h] [bp-8h]@4

  v3 = this;
  if ( pcText )
  {
    if ( *pcText )
    {
      this->m_pcCurrentStr = pcText;
      if ( uiSeqID )
      {
        v4 = 0;
        for ( i = DialogParser::Parse(this, (DialogParser::TokenDetail *)&rkDetail);
              i != 11;
              i = DialogParser::Parse(v3, (DialogParser::TokenDetail *)&rkDetail) )
        {
          if ( i == 16 )
            ++v4;
          if ( v4 == uiSeqID )
            break;
        }
      }
    }
  }
}

//----- (006B7310) --------------------------------------------------------
int __thiscall QuestHelperMgr::GetConditionCnt(QuestHelperMgr *this, QUEST_DATA *lpQuest)
{
  int result; // eax@1

  result = 0;
  if ( lpQuest->End.NPCMobList[1].bNPCMob )
    result = 1;
  if ( lpQuest->End.NPCMobList[2].bNPCMob )
    ++result;
  if ( lpQuest->End.NPCMobList[3].bNPCMob )
    ++result;
  if ( lpQuest->End.NPCMobList[4].bNPCMob )
    ++result;
  if ( lpQuest->End.ItemList[0].bItem )
    ++result;
  if ( lpQuest->End.ItemList[1].bItem )
    ++result;
  if ( lpQuest->End.ItemList[2].bItem )
    ++result;
  if ( lpQuest->End.ItemList[3].bItem )
    ++result;
  if ( lpQuest->End.ItemList[4].bItem )
    ++result;
  if ( lpQuest->End.bLevel )
    ++result;
  if ( lpQuest->End.bLocation )
    ++result;
  return result;
}

//----- (006B7380) --------------------------------------------------------
bool __thiscall QuestHelperMgr::IsQuestByMob(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID)
{
  bool result; // al@2
  int v4; // edx@3
  int v5; // eax@3
  char *v6; // ecx@4
  signed int v7; // ecx@8
  char *v8; // eax@8

  if ( lpQuest )
  {
    v4 = lpQuest->NumOfAction;
    v5 = 0;
    if ( v4 > 0 )
    {
      v6 = (char *)&lpQuest->Action[0].IfTarget;
      while ( *(v6 - 4) )
      {
        if ( *(_DWORD *)v6 == Mob_ID )
          return 1;
        ++v5;
        v6 += 32;
        if ( v5 >= v4 )
          break;
      }
    }
    v7 = 0;
    v8 = (char *)&lpQuest->End.NPCMobList[0].NPCMobID;
    do
    {
      if ( !*(v8 - 2) )
        break;
      if ( *(_WORD *)v8 == Mob_ID )
        return 1;
      ++v7;
      v8 += 8;
    }
    while ( v7 < 5 );
    result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006B7400) --------------------------------------------------------
bool __thiscall QuestHelperMgr::IsStartRewardQuest(QuestHelperMgr *this, QUEST_DATA *lpQuest)
{
  return !lpQuest->End.NPCMobList[1].bNPCMob
      && !lpQuest->End.ItemList[0].bItem
      && lpQuest->Start.NPCID != lpQuest->End.NPCMobList[0].NPCMobID;
}

//----- (006B7430) --------------------------------------------------------
QUEST_DATA *__thiscall QuestHelperMgr::GetPQData(QuestHelperMgr *this, unsigned __int16 Quest_ID)
{
  NiTListItem<QUEST_DATA *> *v2; // ecx@1
  QUEST_DATA *result; // eax@2

  v2 = this->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      result = v2->m_element;
      v2 = v2->m_pkNext;
      if ( result )
      {
        if ( result->ID == Quest_ID )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006B7460) --------------------------------------------------------
void __thiscall QuestHelperMgr::Terminate(QuestHelperMgr *this)
{
  if ( *(_DWORD *)&this->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
    NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)this);
  if ( dword_A83280 )
    NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)&QuestHelperMgr::ms_pQuestMCList);
}
// A83274: using guessed type int (__thiscall **QuestHelperMgr__ms_pQuestMCList)(void *p, char);
// A83280: using guessed type int dword_A83280;

//----- (006B7480) --------------------------------------------------------
bool __thiscall QuestHelperMgr::IsQuestProgress(QuestHelperMgr *this, unsigned __int16 Quest_ID)
{
  NiTListItem<QUEST_DATA *> *v2; // eax@1
  QUEST_DATA *v3; // ecx@2
  bool result; // al@5

  v2 = this->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v2 )
  {
    while ( 1 )
    {
      v3 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v3 )
      {
        if ( v3->ID == Quest_ID )
          break;
      }
      if ( !v2 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006B74C0) --------------------------------------------------------
bool __thiscall QuestHelperMgr::IsConditionProgress(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID)
{
  CQuest *v3; // eax@1
  QUEST_DATA *v4; // esi@1
  bool result; // al@6
  signed int v6; // edi@7
  char *v7; // ebx@7
  signed int v8; // esi@10
  PLAYER_QUEST_INFO *v9; // eax@10
  int v10; // edi@15
  int v11; // edx@16
  signed int v12; // esi@19
  unsigned __int16 *v13; // eax@19
  CQuest *pQuest; // [sp+4h] [bp-4h]@1
  int pQuesta; // [sp+4h] [bp-4h]@15

  v3 = QuestDataMgr::GetQuest();
  v4 = lpQuest;
  pQuest = v3;
  if ( (lpQuest->End.NPCMobList[1].bNPCMob
     || lpQuest->End.ItemList[0].bItem
     || lpQuest->Start.NPCID == lpQuest->End.NPCMobList[0].NPCMobID)
    && !lpQuest->End.bLevel )
  {
    if ( CQuest::GetNewQuestStatus(v3, lpQuest->ID) == 6 )
    {
      v6 = 0;
      v7 = (char *)&lpQuest->End.NPCMobList[0].NPCMobID;
      do
      {
        if ( !*(v7 - 2) )
          break;
        if ( *(_WORD *)v7 == Mob_ID )
        {
          v8 = 0;
          v9 = CQuest::GetQuestInfo(pQuest, lpQuest->ID);
          if ( v9 )
            v8 = v9->Data.End_NPCMobCount[v6];
          if ( v8 < (unsigned __int8)v7[3] )
            return 1;
          v4 = lpQuest;
        }
        ++v6;
        v7 += 8;
      }
      while ( v6 < 5 );
      v10 = 0;
      pQuesta = v4->NumOfAction;
      if ( pQuesta > 0 )
      {
        v11 = (int)v4->Action;
        do
        {
          if ( !*(_BYTE *)v11 )
            break;
          if ( *(_DWORD *)(v11 + 4) == Mob_ID )
          {
            v12 = 0;
            v13 = &lpQuest->End.ItemList[0].ItemID;
            while ( *((_BYTE *)v13 - 2) )
            {
              if ( *(_DWORD *)(v11 + 12) == *v13 )
                return (signed int)Inventory::GetItemCnt(&g_kInventory, *v13) < lpQuest->End.ItemList[v12].ItemLot;
              ++v12;
              v13 += 3;
              if ( v12 >= 5 )
                break;
            }
          }
          ++v10;
          v11 += 32;
        }
        while ( v10 < pQuesta );
      }
      result = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006B75F0) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddMobCoordinate(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID)
{
  unsigned int v3; // esi@1
  int v4; // eax@4
  void *v5; // eax@8
  void *v6; // esi@8
  int v7; // eax@8
  unsigned int v8; // ebx@11
  void *v9; // eax@12
  void *v10; // edi@12
  void *v11; // eax@14
  void *v12; // esi@14
  int v13; // eax@14
  int v14; // [sp+8h] [bp-4h]@5

  v3 = 0;
  if ( ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() )
  {
    do
    {
      if ( *((_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4),
                        v3)
           + 1) == Mob_ID )
        break;
      ++v3;
    }
    while ( v3 < ITableBase<MobCoordinate_MobCoordinateTab>::GetTotal() );
  }
  v4 = *(_DWORD *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 56);
  if ( v4 )
    v14 = *(_DWORD *)(v4 + 40);
  else
    v14 = 0;
  if ( v3 == v14 )
  {
    v5 = operator new(8u);
    v6 = v5;
    *(_DWORD *)v5 = lpQuest;
    *((_DWORD *)v5 + 1) = 0;
    v7 = ((int (__thiscall *)(int (__thiscall ***)(void *, char)))QuestHelperMgr::ms_pQuestMCList[1])(&QuestHelperMgr::ms_pQuestMCList);
    *(_DWORD *)(v7 + 8) = v6;
    *(_DWORD *)v7 = 0;
    *(_DWORD *)(v7 + 4) = dword_A8327C;
    if ( dword_A8327C )
    {
      *(_DWORD *)dword_A8327C = v7;
      ++dword_A83280;
      dword_A8327C = v7;
    }
    else
    {
      ++dword_A83280;
      dword_A83278 = v7;
      dword_A8327C = v7;
    }
  }
  else
  {
    v8 = v3;
    do
    {
      v9 = CDataReader::GetRecord((CDataReader *)(ITableBase<MobCoordinate_MobCoordinateTab>::ms_pkTable + 4), v8);
      v10 = v9;
      if ( !v9 || *((_WORD *)v9 + 1) != Mob_ID )
        break;
      v11 = operator new(8u);
      v12 = v11;
      *(_DWORD *)v11 = lpQuest;
      *((_DWORD *)v11 + 1) = v10;
      v13 = ((int (__thiscall *)(int (__thiscall ***)(void *, char)))QuestHelperMgr::ms_pQuestMCList[1])(&QuestHelperMgr::ms_pQuestMCList);
      *(_DWORD *)(v13 + 8) = v12;
      *(_DWORD *)v13 = 0;
      *(_DWORD *)(v13 + 4) = dword_A8327C;
      if ( dword_A8327C )
        *(_DWORD *)dword_A8327C = v13;
      else
        dword_A83278 = v13;
      ++dword_A83280;
      ++v8;
      dword_A8327C = v13;
    }
    while ( v8 != v14 );
  }
}
// A83274: using guessed type int (__thiscall **QuestHelperMgr__ms_pQuestMCList)(void *p, char);
// A83278: using guessed type int dword_A83278;
// A8327C: using guessed type int dword_A8327C;
// A83280: using guessed type int dword_A83280;
// A97F3C: using guessed type int ITableBase_MobCoordinate_MobCoordinateTab___ms_pkTable;

//----- (006B7740) --------------------------------------------------------
void __thiscall QuestHelperMgr::RemoveMobCoordinate(QuestHelperMgr *this, unsigned __int16 Quest_ID)
{
  int v2; // edx@1
  int v3; // esi@1
  int v4; // ecx@4
  int v5; // eax@4
  int v6; // eax@6
  int v7; // ecx@9
  int v8; // eax@10
  int v9; // ecx@13
  int v10; // edx@13
  int v11; // [sp-8h] [bp-10h]@7

  v2 = dword_A83278;
  v3 = dword_A83278;
  if ( dword_A83278 )
  {
    while ( 1 )
    {
      v4 = **(_DWORD **)(v3 + 8);
      v5 = v3;
      v3 = *(_DWORD *)v3;
      if ( *(_WORD *)(v4 + 4) == Quest_ID )
      {
        if ( v5 == v2 )
        {
          v6 = *(_DWORD *)v2;
          dword_A83278 = v6;
          if ( v6 )
          {
            *(_DWORD *)(v6 + 4) = 0;
            v11 = v2;
          }
          else
          {
            dword_A8327C = 0;
            v11 = v2;
          }
        }
        else
        {
          v7 = dword_A8327C;
          if ( v5 == dword_A8327C )
          {
            v8 = *(_DWORD *)(dword_A8327C + 4);
            dword_A8327C = v8;
            if ( v8 )
            {
              *(_DWORD *)v8 = 0;
              v11 = v7;
            }
            else
            {
              dword_A83278 = 0;
              v11 = v7;
            }
          }
          else
          {
            v9 = *(_DWORD *)(v5 + 4);
            v10 = *(_DWORD *)v5;
            if ( v9 )
              *(_DWORD *)v9 = v10;
            if ( v10 )
              *(_DWORD *)(v10 + 4) = v9;
            v11 = v5;
          }
        }
        QuestHelperMgr::ms_pQuestMCList[2](&QuestHelperMgr::ms_pQuestMCList, v11);
        --dword_A83280;
      }
      if ( !v3 )
        break;
      v2 = dword_A83278;
    }
  }
}
// A83274: using guessed type int (__thiscall **QuestHelperMgr__ms_pQuestMCList)(void *p, char);
// A83278: using guessed type int dword_A83278;
// A8327C: using guessed type int dword_A8327C;
// A83280: using guessed type int dword_A83280;

//----- (006B7800) --------------------------------------------------------
void __thiscall QuestHelperMgr::RemoveMobGroup(QuestHelperMgr *this, unsigned __int16 Quest_ID)
{
  QuestHelperMgr *v2; // esi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v3; // edi@1
  QuestHelperMgr::ProgressQuestMobGroup *v4; // ecx@4
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v5; // eax@4
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v6; // ecx@5
  int v7; // esi@5
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v8; // eax@6
  void (__thiscall *v9)(_DWORD, _DWORD); // edx@8
  int v10; // ecx@9
  int v11; // eax@10
  void (__thiscall *v12)(_DWORD, _DWORD); // edx@12
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v13; // ecx@13
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v14; // edx@13
  QuestHelperMgr *v15; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = this->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  v15 = this;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = v3->m_element;
      v5 = v3;
      v3 = v3->m_pkNext;
      if ( v4->Quest_ID == Quest_ID )
      {
        v6 = v2->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        v7 = (int)&v2->m_pPQMobGroupList;
        if ( v5 == v6 )
        {
          v8 = v6->m_pkNext;
          *(_DWORD *)(v7 + 4) = v6->m_pkNext;
          if ( v8 )
          {
            v8->m_pkPrev = 0;
            (*(void (__thiscall **)(int, NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *))(*(_DWORD *)v7 + 8))(
              v7,
              v6);
          }
          else
          {
            v9 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 8);
            *(_DWORD *)(v7 + 8) = 0;
            v9(v7, v6);
          }
        }
        else
        {
          v10 = *(_DWORD *)(v7 + 8);
          if ( v5 == (NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *)v10 )
          {
            v11 = *(_DWORD *)(v10 + 4);
            *(_DWORD *)(v7 + 8) = v11;
            if ( v11 )
            {
              *(_DWORD *)v11 = 0;
              (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 8))(v7, v10);
            }
            else
            {
              v12 = *(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 8);
              *(_DWORD *)(v7 + 4) = 0;
              v12(v7, v10);
            }
          }
          else
          {
            v13 = v5->m_pkPrev;
            v14 = v5->m_pkNext;
            if ( v13 )
              v13->m_pkNext = v14;
            if ( v14 )
              v14->m_pkPrev = v13;
            (*(void (__thiscall **)(int, NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *))(*(_DWORD *)v7 + 8))(
              v7,
              v5);
          }
        }
        --*(_DWORD *)(v7 + 12);
      }
      if ( !v3 )
        break;
      v2 = v15;
    }
  }
}

//----- (006B78D0) --------------------------------------------------------
const char *__thiscall QuestHelperMgr::GetConditionText(QuestHelperMgr *this)
{
  const char *result; // eax@1

  result = (const char *)&this->m_kConditionText;
  if ( this->m_kConditionText.baseclass_0._Myres >= 0x10 )
    result = *(const char **)result;
  return result;
}

//----- (006B78E0) --------------------------------------------------------
void __thiscall QuestHelperMgr::MoveConditionToolTip(QuestHelperMgr *this, NiPoint3 kMobHeightPos)
{
  int v2; // edi@0
  int v3; // esi@0
  QuestHelperMgr *v4; // esi@1
  _BYTE v5[12]; // ST0C_12@1
  float v6; // ST08_4@1
  float v7; // ST04_4@1
  int v8; // eax@2
  int v9; // [sp+1Ch] [bp-14h]@1
  NiPoint3 k2DOrthoPos; // [sp+20h] [bp-10h]@1
  unsigned int v11; // [sp+2Ch] [bp-4h]@4

  v9 = v3;
  k2DOrthoPos.z = kMobHeightPos.z + 3.0;
  v4 = this;
  *(_QWORD *)v5 = *(_QWORD *)&kMobHeightPos;
  *(_DWORD *)&v5[8] = LODWORD(k2DOrthoPos.z);
  v6 = (double)PgWin::ms_uiScreenHeight;
  v7 = (double)PgWin::ms_uiScreenWidth;
  if ( PgUtil::Get2DOrthoPosFrom3DPos(pkCamera, v7, v6, *(NiPoint3 *)v5, &k2DOrthoPos) )
  {
    v8 = (int)&v4->m_kConditionText;
    if ( v4->m_kConditionText.baseclass_0._Myres >= 0x10 )
      v8 = *(_DWORD *)v8;
    ((void (__stdcall *)(int, int, int))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[107].__vecDelDtor)(
      v8,
      v2,
      v9);
    v11 = (unsigned int)(((int (*)(void))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)()
                       - 2 * LODWORD(g_pkToolTipWin[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][1])) >> 1;
    k2DOrthoPos.x = k2DOrthoPos.x - ((double)v11 + 5.0);
    v11 = ((int (*)(void))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)()
        - 2 * LODWORD(g_pkToolTipWin[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]);
    k2DOrthoPos.y = k2DOrthoPos.y - ((double)v11 + 38.0);
    ((void (__thiscall *)(PgWin *))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(g_pkToolTipWin);
  }
}
// 6B78E0: could not find valid save-restore pair for edi
// 6B78E0: could not find valid save-restore pair for esi

//----- (006B7A20) --------------------------------------------------------
void __thiscall QuestHelperMgr::_QuestHelperMgr(QuestHelperMgr *this)
{
  QuestHelperMgr *v1; // esi@1
  NiTListItem<QUEST_DATA *> *v2; // eax@1
  char *v3; // ebx@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v4; // edi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v5; // ST00_4@2
  NiTListItem<QUEST_DATA *> *v6; // edi@6
  NiTListItem<QUEST_DATA *> *v7; // ST00_4@7

  v1 = this;
  v2 = 0;
  v3 = (char *)&this->m_pPQMobGroupList;
  this->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&PgTList<QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  v4 = this->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v4 )
  {
    do
    {
      v5 = v4;
      v4 = v4->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 8))(v3, v5);
    }
    while ( v4 );
    v2 = 0;
  }
  *((_DWORD *)v3 + 3) = v2;
  *((_DWORD *)v3 + 1) = v2;
  *((_DWORD *)v3 + 2) = v2;
  *(_DWORD *)v3 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  if ( v1->m_kConditionText.baseclass_0._Myres >= 0x10 )
  {
    operator delete(*(void **)&v1->m_kConditionText.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2 = 0;
  }
  v1->m_kConditionText.baseclass_0._Myres = 15;
  v1->m_kConditionText.baseclass_0._Mysize = (unsigned int)v2;
  v1->m_kConditionText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&PgTList<QUEST_DATA__>::_vftable_;
  v6 = v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v6 != v2 )
  {
    do
    {
      v7 = v6;
      v6 = v6->m_pkNext;
      v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
        (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *)v1,
        v7);
    }
    while ( v6 );
    v2 = 0;
  }
  *(_DWORD *)&v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = v2;
  v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v2;
  v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v2;
  v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
}
// 9C90B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);
// 9C90D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);
// 9C9124: using guessed type int (__thiscall *PgTList_QUEST_DATA _____vftable_)(void *p, char);
// 9C914C: using guessed type int (__thiscall *PgTList_QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B7B00) --------------------------------------------------------
void __thiscall QuestHelperMgr::RemoveProgressQuest(QuestHelperMgr *this, unsigned __int16 Quest_ID)
{
  QuestHelperMgr *v2; // edi@1
  NiTListItem<QUEST_DATA *> *v3; // eax@1
  unsigned __int16 v4; // si@2
  QUEST_DATA *v5; // ecx@3

  v2 = this;
  QuestDataMgr::GetQuest();
  v3 = v2->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v3 )
  {
    v4 = Quest_ID;
    while ( 1 )
    {
      v5 = v3->m_element;
      *(_DWORD *)&Quest_ID = v3;
      v3 = v3->m_pkNext;
      if ( v5->ID == v4 )
        break;
      if ( !v3 )
        return;
    }
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)v2,
      (void **)&Quest_ID);
    QuestHelperMgr::RemoveMobCoordinate(v2, v4);
    QuestHelperMgr::RemoveMobGroup(v2, v4);
  }
}

//----- (006B7B60) --------------------------------------------------------
void __thiscall QuestHelperMgr::ClearConditionText(QuestHelperMgr *this)
{
  bool v1; // cf@1

  v1 = this->m_kConditionText.baseclass_0._Myres < 0x10;
  this->m_kConditionText.baseclass_0._Mysize = 0;
  if ( v1 )
    this->m_kConditionText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  else
    **(_BYTE **)&this->m_kConditionText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (006B7B80) --------------------------------------------------------
void __thiscall QuestHelperMgr::QuestHelperMgr(QuestHelperMgr *this)
{
  *(_DWORD *)&this->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&PgTList<QUEST_DATA__>::_vftable_;
  this->m_kConditionText.baseclass_0._Myres = 15;
  this->m_kConditionText.baseclass_0._Mysize = 0;
  this->m_kConditionText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  *(_DWORD *)&this->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  this->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  this->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  this->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&PgTList<QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
}
// 9C9124: using guessed type int (__thiscall *PgTList_QUEST_DATA _____vftable_)(void *p, char);
// 9C914C: using guessed type int (__thiscall *PgTList_QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B7BC0) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddMobID(QuestHelperMgr *this, QUEST_DATA *lpQuest)
{
  NiTListItem<unsigned short> *v2; // esi@1
  signed int v3; // ebx@1
  QUEST_DATA *v4; // edx@2
  unsigned __int16 v5; // di@6
  NiTListItem<unsigned short> *v6; // eax@6
  int v7; // ecx@7
  NiTListItem<unsigned short> *v8; // edx@7
  NiTListItem<unsigned short> *v9; // eax@11
  QUEST_DATA *v10; // edi@16
  bool v11; // zf@16
  char *v12; // ebx@17
  unsigned __int16 v13; // di@19
  NiTListItem<unsigned short> *v14; // eax@19
  int v15; // ecx@20
  NiTListItem<unsigned short> *v16; // edx@20
  NiTListItem<unsigned short> *v17; // eax@24
  int v18; // edx@29
  unsigned __int16 v19; // ax@31
  NiTListItem<unsigned short> *v20; // esi@32
  NiTListItem<unsigned short> *v21; // ST04_4@33
  PgTList<unsigned short> kList; // [sp+0h] [bp-24h]@1
  QuestHelperMgr *thisa; // [sp+10h] [bp-14h]@1
  int i; // [sp+14h] [bp-10h]@16
  int v25; // [sp+20h] [bp-4h]@1

  thisa = this;
  v2 = 0;
  *(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&PgTList<unsigned_short>::_vftable_;
  v25 = 0;
  v3 = 0;
  do
  {
    v4 = lpQuest;
    if ( (v3 || lpQuest->End.bLevel || QuestHelperMgr::IsStartRewardQuest(thisa, lpQuest))
      && v4->End.NPCMobList[v3].bNPCMob )
    {
      v5 = v4->End.NPCMobList[v3].NPCMobID;
      v6 = v2;
      if ( !v2 )
        goto LABEL_11;
      while ( 1 )
      {
        v7 = (int)&v6->m_element;
        v8 = v6;
        v6 = v6->m_pkNext;
        if ( v5 == *(_WORD *)v7 )
          break;
        if ( !v6 )
          goto LABEL_11;
      }
      if ( !v8 )
      {
LABEL_11:
        v9 = kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *)&kList);
        v9->m_element = v5;
        v9->m_pkNext = 0;
        v9->m_pkPrev = kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail )
        {
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v9;
          v2 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
        }
        else
        {
          v2 = v9;
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v9;
        }
        ++*(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v9;
      }
    }
    ++v3;
  }
  while ( v3 < 5 );
  v10 = lpQuest;
  v11 = lpQuest->NumOfAction == 0;
  i = 0;
  if ( !v11 )
  {
    v12 = (char *)&lpQuest->Action[0].IfTarget;
    do
    {
      if ( *(v12 - 4) )
      {
        v13 = *(_WORD *)v12;
        v14 = v2;
        if ( !v2 )
          goto LABEL_24;
        while ( 1 )
        {
          v15 = (int)&v14->m_element;
          v16 = v14;
          v14 = v14->m_pkNext;
          if ( v13 == *(_WORD *)v15 )
            break;
          if ( !v14 )
            goto LABEL_24;
        }
        if ( !v16 )
        {
LABEL_24:
          v17 = kList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *)&kList);
          v17->m_element = v13;
          v17->m_pkNext = 0;
          v17->m_pkPrev = kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
          if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail )
          {
            kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail->m_pkNext = v17;
            v2 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          }
          else
          {
            v2 = v17;
            kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = v17;
          }
          ++*(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = v17;
        }
        v10 = lpQuest;
      }
      v18 = v10->NumOfAction;
      v12 += 32;
      ++i;
    }
    while ( i < v18 );
  }
  if ( v2 )
  {
    do
    {
      v19 = v2->m_element;
      v2 = v2->m_pkNext;
      QuestHelperMgr::AddMobCoordinate(thisa, v10, v19);
    }
    while ( v2 );
    v20 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead )
    {
      do
      {
        v21 = v20;
        v20 = v20->m_pkNext;
        kList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
          (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *)&kList,
          v21);
      }
      while ( v20 );
    }
  }
}
// 9C9134: using guessed type int (__thiscall *PgTList_unsigned short____vftable_)(void *p, char);

//----- (006B7D70) --------------------------------------------------------
QuestHelperMgr *__cdecl QuestHelperMgr::GetInstance()
{
  QuestHelperMgr *result; // eax@1

  result = QuestHelperMgr::m_pkInstance;
  if ( !QuestHelperMgr::m_pkInstance )
  {
    result = (QuestHelperMgr *)operator new(0x40u);
    if ( result )
    {
      *(_DWORD *)&result->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
      result->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
      result->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
      result->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&PgTList<QUEST_DATA__>::_vftable_;
      result->m_kConditionText.baseclass_0._Mysize = 0;
      result->m_kConditionText.baseclass_0._Myres = 15;
      result->m_kConditionText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      *(_DWORD *)&result->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
      result->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
      result->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
      result->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&PgTList<QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
      QuestHelperMgr::m_pkInstance = result;
    }
    else
    {
      result = 0;
      QuestHelperMgr::m_pkInstance = 0;
    }
  }
  return result;
}
// 9C9124: using guessed type int (__thiscall *PgTList_QUEST_DATA _____vftable_)(void *p, char);
// 9C914C: using guessed type int (__thiscall *PgTList_QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B7DD0) --------------------------------------------------------
void __cdecl QuestHelperMgr::ReleaseInstance()
{
  void *v0; // esi@2

  if ( QuestHelperMgr::m_pkInstance )
  {
    v0 = QuestHelperMgr::m_pkInstance;
    QuestHelperMgr::_QuestHelperMgr(QuestHelperMgr::m_pkInstance);
    operator delete(v0);
    QuestHelperMgr::m_pkInstance = 0;
  }
}

//----- (006B7E00) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddMobGroup(QuestHelperMgr *this, QUEST_DATA *lpQuest)
{
  char *v2; // ebx@1
  int v3; // esi@4
  int v4; // edi@4
  int v5; // eax@6
  int v6; // esi@7
  void *v7; // eax@8
  void *v8; // edi@8
  const char *v9; // ecx@10
  int v10; // eax@10
  int v11; // esi@10
  char v12; // dl@11
  int v13; // eax@12
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v14; // ecx@12
  char *v15; // ebx@18
  int v16; // esi@21
  int v17; // edi@21
  int v18; // eax@23
  int v19; // esi@24
  void *v20; // eax@25
  void *v21; // edi@25
  const char *v22; // ecx@27
  int v23; // eax@27
  int v24; // esi@27
  char v25; // dl@28
  int v26; // eax@29
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v27; // ecx@29
  QuestHelperMgr *v28; // [sp+Ch] [bp-8h]@1
  signed int i; // [sp+10h] [bp-4h]@1
  signed int ia; // [sp+10h] [bp-4h]@17

  v28 = this;
  i = 0;
  v2 = (char *)&lpQuest->End.NPCMobList[0].NPCMobID;
  do
  {
    if ( !*(v2 - 2) )
      break;
    if ( v2[4] == 2 )
    {
      v3 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
      v4 = *(_WORD *)v2;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                              *(_WORD *)v2) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
        {
          v5 = *(_DWORD *)(v3 + 196) + 4 * v4;
          if ( *(_DWORD *)v5 )
          {
            v6 = *(_DWORD *)v5;
            if ( *(_DWORD *)v5 )
            {
              v7 = operator new(0x20u);
              v8 = 0;
              if ( v7 )
              {
                *((_DWORD *)v7 + 5) = 0;
                *((_DWORD *)v7 + 6) = 15;
                *((_BYTE *)v7 + 4) = 0;
                v8 = v7;
              }
              *(_WORD *)v8 = lpQuest->ID;
              *((_WORD *)v8 + 1) = *(_WORD *)v2;
              v9 = (const char *)(v6 + 213);
              v10 = v6 + 213;
              v11 = v6 + 214;
              do
                v12 = *(_BYTE *)v10++;
              while ( v12 );
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v8 + 4),
                v9,
                v10 - v11);
              v13 = (int)v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *)&v28->m_pPQMobGroupList);
              *(_DWORD *)(v13 + 8) = v8;
              *(_DWORD *)v13 = 0;
              *(_DWORD *)(v13 + 4) = v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
              v14 = v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
              if ( v14 )
                v14->m_pkNext = (NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *)v13;
              else
                v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *)v13;
              ++*(_DWORD *)&v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
              v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *)v13;
            }
          }
        }
      }
    }
    v2 += 8;
    ++i;
  }
  while ( i < 5 );
  ia = 0;
  if ( lpQuest->NumOfAction )
  {
    v15 = (char *)&lpQuest->Action[0].IfTarget;
    do
    {
      if ( !*(v15 - 4) )
        break;
      if ( v15[24] == 2 )
      {
        v16 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
        v17 = *(_WORD *)v15;
        if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                              + 16))(
                                ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                                *(_WORD *)v15) )
        {
          if ( (unsigned __int16)v17 <= *(_WORD *)(v16 + 200) )
          {
            v18 = *(_DWORD *)(v16 + 196) + 4 * v17;
            if ( *(_DWORD *)v18 )
            {
              v19 = *(_DWORD *)v18;
              if ( *(_DWORD *)v18 )
              {
                v20 = operator new(0x20u);
                v21 = 0;
                if ( v20 )
                {
                  *((_DWORD *)v20 + 5) = 0;
                  *((_DWORD *)v20 + 6) = 15;
                  *((_BYTE *)v20 + 4) = 0;
                  v21 = v20;
                }
                *(_WORD *)v21 = lpQuest->ID;
                v22 = (const char *)(v19 + 213);
                v23 = v19 + 213;
                *((_WORD *)v21 + 1) = *(_WORD *)v15;
                v24 = v19 + 214;
                do
                  v25 = *(_BYTE *)v23++;
                while ( v25 );
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v21 + 4),
                  v22,
                  v23 - v24);
                v26 = (int)v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *)&v28->m_pPQMobGroupList);
                *(_DWORD *)(v26 + 8) = v21;
                *(_DWORD *)v26 = 0;
                *(_DWORD *)(v26 + 4) = v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
                v27 = v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
                if ( v27 )
                  v27->m_pkNext = (NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *)v26;
                else
                  v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *)v26;
                ++*(_DWORD *)&v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
                v28->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *)v26;
              }
            }
          }
        }
      }
      v15 += 32;
      ++ia;
    }
    while ( ia < lpQuest->NumOfAction );
  }
}
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (006B8030) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddQuestNameText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText)
{
  QuestHelperMgr *v3; // esi@1
  CQuest *v4; // eax@1
  char *v5; // eax@1
  int v6; // esi@1
  const char *v7; // ecx@2

  v3 = this;
  v4 = QuestDataMgr::GetQuest();
  CQuestData::GetQuestName(v4->m_pQuestData, lpQuest->ID);
  v6 = (int)&v3->m_kConditionText;
  v5 = fs("{color,yellow,%s}");
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
    v5,
    strlen(v5));
  if ( *(_DWORD *)(v6 + 20) < 0x10u )
    v7 = (const char *)v6;
  else
    v7 = *(const char **)v6;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(kText, v7, 0, *(_DWORD *)(v6 + 16)) == -1 )
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      kText,
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
      0,
      0xFFFFFFFFu);
}

//----- (006B80B0) --------------------------------------------------------
bool __thiscall QuestHelperMgr::IsMobGroup(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 *Mob_ID)
{
  QuestHelperMgr *v3; // ebx@1
  int v4; // edi@1
  int v5; // esi@1
  int (__thiscall *v6)(_DWORD, _DWORD, _DWORD); // edx@1
  int v7; // eax@3
  int v8; // eax@4
  const char *v9; // ecx@7
  int v10; // eax@7
  int v11; // esi@7
  char v12; // dl@8
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v13; // edi@9
  QuestHelperMgr::ProgressQuestMobGroup *v14; // ebx@10
  const char *v15; // edx@12
  const char *v16; // eax@12
  unsigned int v17; // esi@14
  unsigned int v18; // ecx@14
  bool v20; // cf@27
  void *v21; // [sp-10h] [bp-40h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > GroupName; // [sp+4h] [bp-2Ch]@1
  unsigned int v23; // [sp+20h] [bp-10h]@1
  int v24; // [sp+2Ch] [bp-4h]@1
  int v25; // [sp+30h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v3 = this;
  GroupName.baseclass_0._Myres = 15;
  GroupName.baseclass_0._Mysize = 0;
  GroupName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v4 = *Mob_ID;
  v5 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
  v6 = *(int (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable + 16);
  v24 = 0;
  if ( !(unsigned __int8)v6(
                           ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                           v4,
                           (unsigned int)&v25 ^ __security_cookie)
    || (unsigned __int16)v4 > *(_WORD *)(v5 + 200)
    || (v7 = *(_DWORD *)(v5 + 196) + 4 * v4, !*(_DWORD *)v7)
    || (v8 = *(_DWORD *)v7) == 0 )
  {
    if ( GroupName.baseclass_0._Myres >= 0x10 )
    {
      v21 = *(void **)&GroupName;
LABEL_24:
      operator delete(v21);
      return 0;
    }
    return 0;
  }
  v9 = (const char *)(v8 + 213);
  v10 = v8 + 213;
  v11 = v10 + 1;
  do
    v12 = *(_BYTE *)v10++;
  while ( v12 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&GroupName, v9, v10 - v11);
  v13 = v3->m_pPQMobGroupList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( !v13 )
  {
LABEL_22:
    if ( GroupName.baseclass_0._Myres >= 0x10 )
    {
      v21 = *(void **)&GroupName;
      goto LABEL_24;
    }
    return 0;
  }
  while ( 1 )
  {
    v14 = v13->m_element;
    v13 = v13->m_pkNext;
    if ( v14 )
    {
      if ( v14->Quest_ID == lpQuest->ID )
      {
        v15 = *(const char **)&GroupName;
        v16 = (const char *)&v14->GroupName;
        if ( GroupName.baseclass_0._Myres < 0x10 )
          v15 = (const char *)&GroupName;
        v17 = v14->GroupName.baseclass_0._Mysize;
        v18 = GroupName.baseclass_0._Mysize;
        if ( v17 < GroupName.baseclass_0._Mysize )
          v18 = v14->GroupName.baseclass_0._Mysize;
        if ( v14->GroupName.baseclass_0._Myres >= 0x10 )
          v16 = *(const char **)v16;
        if ( !std::char_traits<char>::compare(v16, v15, v18)
          && v17 >= GroupName.baseclass_0._Mysize
          && v17 == GroupName.baseclass_0._Mysize )
          break;
      }
    }
    if ( !v13 )
      goto LABEL_22;
  }
  v20 = GroupName.baseclass_0._Myres < 0x10;
  *Mob_ID = v14->Mob_ID;
  if ( !v20 )
    operator delete(*(void **)&GroupName);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (006B8230) --------------------------------------------------------
void __thiscall QuestHelperMgr::Init(QuestHelperMgr *this)
{
  QuestHelperMgr *v1; // esi@1
  CQuest *v2; // eax@1
  CQuestData *v3; // edi@1
  unsigned int v4; // ebx@1
  QUEST_DATA *v5; // edi@4
  int v6; // eax@5
  NiTListItem<QUEST_DATA *> *v7; // ecx@5
  NiTListItem<QUEST_DATA *> *v8; // edi@10
  QUEST_DATA *v9; // ebx@11
  CQuest *pQuest; // [sp+Ch] [bp-8h]@1
  CQuestData *pQData; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = QuestDataMgr::GetQuest();
  v3 = v2->m_pQuestData;
  pQuest = v2;
  pQData = v2->m_pQuestData;
  v4 = 0;
  if ( CQuestData::GetNumOfQuestData(v3) > 0u )
  {
    while ( 1 )
    {
      v5 = CQuestData::GetQuestDataByIndex(v3, v4);
      if ( CQuest::IsDoingQuest(pQuest, v5->ID) )
      {
        v6 = (int)v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *)v1);
        *(_DWORD *)(v6 + 8) = v5;
        *(_DWORD *)v6 = 0;
        *(_DWORD *)(v6 + 4) = v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        v7 = v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
        if ( v7 )
          v7->m_pkNext = (NiTListItem<QUEST_DATA *> *)v6;
        else
          v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<QUEST_DATA *> *)v6;
        ++*(_DWORD *)&v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
        v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<QUEST_DATA *> *)v6;
      }
      ++v4;
      if ( (signed int)v4 >= CQuestData::GetNumOfQuestData(pQData) )
        break;
      v3 = pQData;
    }
  }
  v8 = v1->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v8 )
  {
    v9 = v8->m_element;
    v8 = v8->m_pkNext;
    QuestHelperMgr::AddMobID(v1, v9);
    QuestHelperMgr::AddMobGroup(v1, v9);
  }
}

//----- (006B82F0) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddProgressQuest(QuestHelperMgr *this, unsigned __int16 Quest_ID)
{
  QuestHelperMgr *v2; // esi@1
  CQuest *v3; // eax@1
  CQuestData *v4; // edi@1
  unsigned int v5; // ebx@1
  QUEST_DATA *v6; // edi@4
  int v7; // eax@7
  NiTListItem<QUEST_DATA *> *v8; // ecx@7
  CQuestData *pQData; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = QuestDataMgr::GetQuest();
  v4 = v3->m_pQuestData;
  pQData = v3->m_pQuestData;
  v5 = 0;
  if ( CQuestData::GetNumOfQuestData(v3->m_pQuestData) > 0u )
  {
    while ( 1 )
    {
      v6 = CQuestData::GetQuestDataByIndex(v4, v5);
      if ( v6->ID == Quest_ID )
        break;
      ++v5;
      if ( (signed int)v5 >= CQuestData::GetNumOfQuestData(pQData) )
        return;
      v4 = pQData;
    }
    v7 = (int)v2->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *)v2);
    *(_DWORD *)(v7 + 8) = v6;
    *(_DWORD *)v7 = 0;
    *(_DWORD *)(v7 + 4) = v2->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v8 = v2->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v8 )
      v8->m_pkNext = (NiTListItem<QUEST_DATA *> *)v7;
    else
      v2->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<QUEST_DATA *> *)v7;
    ++*(_DWORD *)&v2->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v2->m_lpProgressQuestList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<QUEST_DATA *> *)v7;
    QuestHelperMgr::AddMobID(v2, v6);
    QuestHelperMgr::AddMobGroup(v2, v6);
  }
}

//----- (006B8390) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddMobConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText, unsigned __int16 Mob_ID, bool bCheckMob)
{
  CQuest *v5; // eax@1
  char *v6; // ebx@1
  char v7; // kr10_1@6
  char *v8; // eax@6
  char *v9; // eax@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // eax@6
  int v11; // ecx@7
  char v12; // kr11_1@8
  char *v13; // eax@8
  char *v14; // eax@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@8
  char v16; // kr12_1@10
  char *v17; // eax@13
  int v18; // edi@14
  int v19; // ebx@14
  int v20; // edx@16
  char v21; // cl@18
  char *v22; // eax@19
  char *v23; // eax@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v24; // eax@28
  char *v25; // [sp-20h] [bp-98h]@21
  signed int i; // [sp+8h] [bp-70h]@1
  char *v27; // [sp+Ch] [bp-6Ch]@1
  QuestHelperMgr *v28; // [sp+10h] [bp-68h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+14h] [bp-64h]@6
  int v30; // [sp+30h] [bp-48h]@8
  unsigned int v31; // [sp+44h] [bp-34h]@8
  int v32; // [sp+4Ch] [bp-2Ch]@28
  unsigned int v33; // [sp+60h] [bp-18h]@28
  unsigned int v34; // [sp+68h] [bp-10h]@1
  int v35; // [sp+74h] [bp-4h]@6
  int v36; // [sp+78h] [bp+0h]@1

  v34 = (unsigned int)&v36 ^ __security_cookie;
  v28 = this;
  v5 = QuestDataMgr::GetQuest();
  v6 = (char *)&lpQuest->End.NPCMobList[0].NPCMobID;
  CQuest::GetQuestInfo(v5, lpQuest->ID);
  i = 0;
  v27 = (char *)&lpQuest->End.NPCMobList[0].NPCMobID;
  while ( *(v6 - 2) )
  {
    if ( v6[2] != 1 )
    {
      if ( v6[2] != 2 )
      {
        if ( v6[2] != 3
          || (v7 = (*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
                     ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
                     *(_WORD *)v6),
              v8 = TextData::Get(0x8DECE4E2u),
              fs(v8),
              v9 = fs("- %s"),
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                &v28->m_kConditionText,
                v9,
                strlen(v9)),
              v10 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                      &result,
                      "\n",
                      &v28->m_kConditionText),
              v35 = 2,
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(kText, v10, 0, 0xFFFFFFFFu),
              v35 = -1,
              result.baseclass_0._Myres < 0x10) )
          goto LABEL_31;
        v11 = *(_DWORD *)&result;
        goto LABEL_30;
      }
      v12 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
              ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
              *(_WORD *)v6);
      v13 = TextData::Get(0x3C497E96u);
      fs(v13);
      v14 = fs("- %s");
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v28->m_kConditionText,
        v14,
        strlen(v14));
      v15 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v30,
              "\n",
              &v28->m_kConditionText);
      v35 = 1;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(kText, v15, 0, 0xFFFFFFFFu);
      v35 = -1;
      if ( v31 >= 0x10 )
      {
        v11 = v30;
LABEL_30:
        operator delete((void *)v11);
        goto LABEL_31;
      }
      goto LABEL_31;
    }
    v16 = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<MobInfo_MobInfoTab>::ms_pkTable + 16))(
            ITableBase<MobInfo_MobInfoTab>::ms_pkTable,
            *(_WORD *)v6);
    if ( bCheckMob == 1 && *(_WORD *)v6 != Mob_ID )
      goto LABEL_31;
    if ( !v6[4] )
    {
      v17 = fs("- %d/%d %s");
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v28->m_kConditionText,
        v17,
        strlen(v17));
      goto LABEL_28;
    }
    v18 = ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable;
    v19 = *(_WORD *)v6;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<MobViewInfo_MobViewInfoTab>::ms_pkTable,
                            v19) )
    {
      if ( (unsigned __int16)v19 <= *(_WORD *)(v18 + 200) )
      {
        v20 = *(_DWORD *)(v18 + 196);
        if ( *(_DWORD *)(v20 + 4 * v19) )
        {
          if ( *(_DWORD *)(v20 + 4 * v19) )
          {
            v21 = v27[4];
            if ( v21 == 1 )
            {
              v22 = fs("- %d/%d %s");
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                &v28->m_kConditionText,
                v22,
                strlen(v22));
            }
            else
            {
              if ( v21 == 2 )
              {
                v25 = "- %d/%d %s";
LABEL_26:
                v23 = fs(v25);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(
                  &v28->m_kConditionText,
                  v23);
                goto LABEL_27;
              }
              if ( v21 == 3 )
              {
                v25 = "- %d/%d %s";
                goto LABEL_26;
              }
              if ( v21 == 4 )
              {
                v25 = "- %d/%d %s";
                goto LABEL_26;
              }
            }
          }
        }
      }
    }
LABEL_27:
    v6 = v27;
LABEL_28:
    v24 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v32,
            "\n",
            &v28->m_kConditionText);
    v35 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(kText, v24, 0, 0xFFFFFFFFu);
    v35 = -1;
    if ( v33 >= 0x10 )
    {
      v11 = v32;
      goto LABEL_30;
    }
LABEL_31:
    v6 += 8;
    ++i;
    v27 = v6;
    if ( i >= 5 )
      return;
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F2C: using guessed type int ITableBase_MobInfo_MobInfoTab___ms_pkTable;
// A97F5C: using guessed type int ITableBase_MobViewInfo_MobViewInfoTab___ms_pkTable;

//----- (006B87B0) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddItemConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText, unsigned __int16 Item_ID, bool bCheckItem)
{
  unsigned __int16 *v5; // ebx@1
  char v6; // kr04_1@5
  char *v7; // eax@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // eax@5
  QuestHelperMgr *v9; // [sp+4h] [bp-34h]@1
  signed int i; // [sp+8h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+Ch] [bp-2Ch]@5
  unsigned int v12; // [sp+28h] [bp-10h]@1
  int v13; // [sp+34h] [bp-4h]@5
  int v14; // [sp+38h] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v9 = this;
  i = 0;
  v5 = &lpQuest->End.ItemList[0].ItemID;
  do
  {
    if ( !*((_BYTE *)v5 - 2) )
      break;
    if ( bCheckItem != 1 || *v5 == Item_ID )
    {
      v6 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
             ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
             *v5);
      Inventory::GetItemCnt(&g_kInventory, *v5);
      v7 = fs("- %d/%d %s");
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v9->m_kConditionText, v7, strlen(v7));
      v8 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, "\n", &v9->m_kConditionText);
      v13 = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(kText, v8, 0, 0xFFFFFFFFu);
      v13 = -1;
      if ( result.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&result);
      result.baseclass_0._Myres = 15;
      result.baseclass_0._Mysize = 0;
      result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    v5 += 3;
    ++i;
  }
  while ( i < 5 );
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006B8920) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddLevelConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText)
{
  QuestHelperMgr *v3; // edi@1
  char *v4; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+0h] [bp-2Ch]@2
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@2
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  if ( lpQuest->End.bLevel )
  {
    v4 = fs("- Level : %d");
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v3->m_kConditionText, v4, strlen(v4));
    v5 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, "\n", &v3->m_kConditionText);
    v8 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(kText, v5, 0, 0xFFFFFFFFu);
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006B89E0) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddLocationConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText)
{
  QuestHelperMgr *v3; // edi@1
  char *v4; // eax@2
  char *v5; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+0h] [bp-2Ch]@2
  unsigned int v8; // [sp+1Ch] [bp-10h]@1
  int v9; // [sp+28h] [bp-4h]@2
  int v10; // [sp+2Ch] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  if ( lpQuest->End.bLocation )
  {
    v4 = TextData::Get(0x39323D31u);
    fs(v4);
    v5 = fs("- %s");
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v3->m_kConditionText, v5, strlen(v5));
    v6 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, "\n", &v3->m_kConditionText);
    v9 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(kText, v6, 0, 0xFFFFFFFFu);
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006B8AC0) --------------------------------------------------------
bool __thiscall QuestHelperMgr::CreateConditionToolTip(QuestHelperMgr *this, unsigned __int16 Mob_ID, QUEST_DATA *lpQuest, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *kText)
{
  QuestHelperMgr *v4; // ebx@1
  signed int v5; // ebx@4
  char *v6; // edi@5
  signed int v7; // ebx@10
  char *v8; // edi@10
  bool result; // al@15
  QuestHelperMgr *thisa; // [sp+8h] [bp-4h]@1

  v4 = this;
  thisa = this;
  if ( QuestHelperMgr::IsConditionProgress(this, lpQuest, Mob_ID) )
  {
    if ( kText->baseclass_0._Mysize )
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(kText, "\n", 1u);
    QuestHelperMgr::AddQuestNameText(v4, lpQuest, kText);
    v5 = 0;
    if ( lpQuest->NumOfAction )
    {
      v6 = (char *)&lpQuest->Action[0].IfTarget;
      do
      {
        if ( !*(v6 - 4) )
          break;
        if ( *(_DWORD *)v6 == Mob_ID )
          QuestHelperMgr::AddItemConditionText(thisa, lpQuest, kText, *((_WORD *)v6 + 4), 1);
        ++v5;
        v6 += 32;
      }
      while ( v5 < lpQuest->NumOfAction );
    }
    v7 = 0;
    v8 = (char *)&lpQuest->End.NPCMobList[0].NPCMobID;
    do
    {
      if ( !*(v8 - 2) )
        break;
      if ( *(_WORD *)v8 == Mob_ID )
        QuestHelperMgr::AddMobConditionText(thisa, lpQuest, kText, Mob_ID, 1);
      ++v7;
      v8 += 8;
    }
    while ( v7 < 5 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006B8B90) --------------------------------------------------------
const char *__thiscall QuestHelperMgr::AddConditionText(QuestHelperMgr *this, QUEST_DATA *lpQuest, unsigned __int16 Mob_ID)
{
  QuestHelperMgr *v3; // esi@1
  int v4; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  kText.baseclass_0._Myres = 15;
  kText.baseclass_0._Mysize = 0;
  kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v8 = 0;
  QuestHelperMgr::AddQuestNameText(this, lpQuest, &kText);
  QuestHelperMgr::AddLevelConditionText(v3, lpQuest, &kText);
  QuestHelperMgr::AddMobConditionText(v3, lpQuest, &kText, Mob_ID, 1);
  QuestHelperMgr::AddItemConditionText(v3, lpQuest, &kText, 0xFFFFu, 0);
  QuestHelperMgr::AddLocationConditionText(v3, lpQuest, &kText);
  v4 = (int)&v3->m_kConditionText;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v4,
    &kText,
    0,
    0xFFFFFFFFu);
  if ( *(_DWORD *)(v4 + 20) >= 0x10u )
    v4 = *(_DWORD *)v4;
  if ( kText.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kText);
  return (const char *)v4;
}
// A85C00: using guessed type int __security_cookie;

//----- (006B8C70) --------------------------------------------------------
void __thiscall QuestHelperMgr::AddConditionToolTip(QuestHelperMgr *this, Char *pkChar)
{
  QuestHelperMgr *v2; // ebx@1
  unsigned __int16 v3; // si@2
  bool v4; // cf@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // ecx@3
  int v6; // eax@4
  int v7; // edi@7
  int v8; // eax@8
  int v9; // esi@9
  bool v10; // zf@18
  unsigned __int16 Handle; // [sp+4h] [bp-3Ch]@2
  signed __int16 OldMobID; // [sp+8h] [bp-38h]@7
  signed __int16 OldQuestID; // [sp+Ch] [bp-34h]@7
  unsigned int Mob_ID; // [sp+10h] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > kText; // [sp+14h] [bp-2Ch]@7
  unsigned int v16; // [sp+30h] [bp-10h]@1
  int v17; // [sp+3Ch] [bp-4h]@7
  int v18; // [sp+40h] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  if ( pkChar )
  {
    v3 = pkChar->m_kHandle;
    Mob_ID = pkChar->m_kCharShape.m_kMobID;
    Handle = v3;
    if ( this->m_OldHandleNum != v3 )
    {
      ToolTipWin::ClearTipText((ToolTipWin *)g_pkToolTipWin);
      v4 = v2->m_kConditionText.baseclass_0._Myres < 0x10;
      v5 = &v2->m_kConditionText;
      v2->m_kConditionText.baseclass_0._Mysize = 0;
      v6 = (int)(v4 ? &v2->m_kConditionText : *(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0]);
      *(_BYTE *)v6 = 0;
      if ( dword_A83280 )
      {
        OldMobID = -1;
        OldQuestID = -1;
        kText.baseclass_0._Myres = 15;
        kText.baseclass_0._Mysize = 0;
        kText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v17 = 0;
        v7 = dword_A83278;
        if ( dword_A83278 )
        {
          do
          {
            v8 = *(_DWORD *)(v7 + 8);
            v7 = *(_DWORD *)v7;
            if ( v8 )
            {
              v9 = *(_DWORD *)v8;
              if ( *(_DWORD *)v8 )
              {
                if ( (_WORD)Mob_ID != OldMobID || *(_WORD *)(v9 + 4) != OldQuestID )
                {
                  if ( !*(_BYTE *)(v9 + 89) )
                  {
                    if ( QuestHelperMgr::IsQuestByMob(v2, (QUEST_DATA *)v9, Mob_ID) )
                    {
                      QuestHelperMgr::IsMobGroup(v2, (QUEST_DATA *)v9, (unsigned __int16 *)&Mob_ID);
                      if ( QuestHelperMgr::CreateConditionToolTip(v2, Mob_ID, (QUEST_DATA *)v9, &kText) )
                      {
                        OldMobID = Mob_ID;
                        OldQuestID = *(_WORD *)(v9 + 4);
                      }
                    }
                  }
                }
              }
            }
          }
          while ( v7 );
          v5 = &v2->m_kConditionText;
          v3 = Handle;
        }
        v10 = kText.baseclass_0._Mysize == 0;
        v2->m_OldHandleNum = v3;
        if ( !v10 )
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v5, &kText, 0, 0xFFFFFFFFu);
        if ( kText.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&kText);
      }
    }
  }
}
// A83278: using guessed type int dword_A83278;
// A83280: using guessed type int dword_A83280;
// A85C00: using guessed type int __security_cookie;

//----- (006B8DE0) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll(NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *this)
{
  NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *v1; // edi@1
  NiTListItem<NSFParsedShader *> *v2; // esi@1
  NiTListItem<NSFParsedShader *> *v3; // ST00_4@2

  v1 = this;
  v2 = this->m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->vfptr->DeleteItem(v1, v3);
  }
  *(_DWORD *)&v1->m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_pkHead = 0;
  v1->m_pkTail = 0;
}

//----- (006B8E20) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>(NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_;
}
// 9C9094: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestMC _____vftable_)(void *p, char);

//----- (006B8E30) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>(NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
}
// 9C90B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);

//----- (006B8E40) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
}
// 9C90D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B8E50) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
}
// 9C90E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);

//----- (006B8E60) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C9094: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestMC _____vftable_)(void *p, char);

//----- (006B8E90) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C90B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);

//----- (006B8EC0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C90D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B8EF0) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vector_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C90E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);

//----- (006B8F20) --------------------------------------------------------
void __thiscall NiTPointerList<QuestMC__>::_NiTPointerList<QuestMC__>(NiTPointerList<QuestMC *> *this)
{
  NiTPointerList<QuestMC *> *v1; // edi@1
  NiTListItem<QuestMC *> *v2; // esi@1
  NiTListItem<QuestMC *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_;
}
// 9C9094: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestMC _____vftable_)(void *p, char);
// 9C90A4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QuestMC _____vftable_)(void *p, char);

//----- (006B8FB0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QuestMC *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QuestMC *> *v3; // esi@1
  NiTListItem<QuestMC *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C9094: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestMC _____vftable_)(void *p, char);
// 9C90A4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QuestMC _____vftable_)(void *p, char);

//----- (006B9040) --------------------------------------------------------
void __thiscall NiTPointerList<QUEST_DATA__>::_NiTPointerList<QUEST_DATA__>(NiTPointerList<QUEST_DATA *> *this)
{
  NiTPointerList<QUEST_DATA *> *v1; // edi@1
  NiTListItem<QUEST_DATA *> *v2; // esi@1
  NiTListItem<QUEST_DATA *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem((NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *)v1, v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
}
// 9C90B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);
// 9C90C4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);

//----- (006B90C0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QUEST_DATA *> *v3; // esi@1
  NiTListItem<QUEST_DATA *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C90B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);
// 9C90C4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);

//----- (006B9150) --------------------------------------------------------
void __thiscall NiTPointerList<unsigned_short>::_NiTPointerList<unsigned_short>(NiTPointerList<unsigned short> *this)
{
  NiTPointerList<unsigned short> *v1; // edi@1
  NiTListItem<unsigned short> *v2; // esi@1
  NiTListItem<unsigned short> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
}
// 9C90E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);
// 9C90F4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);

//----- (006B91D0) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,unsigned short> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<unsigned short> *v3; // esi@1
  NiTListItem<unsigned short> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C90E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);
// 9C90F4: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);

//----- (006B9260) --------------------------------------------------------
void __thiscall PgTList<QUEST_DATA__>::_PgTList<QUEST_DATA__>(PgTList<QUEST_DATA *> *this)
{
  PgTList<QUEST_DATA *> *v1; // edi@1
  NiTListItem<QUEST_DATA *> *v2; // esi@1
  NiTListItem<QUEST_DATA *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&PgTList<QUEST_DATA__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
}
// 9C90B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);
// 9C9124: using guessed type int (__thiscall *PgTList_QUEST_DATA _____vftable_)(void *p, char);

//----- (006B92E0) --------------------------------------------------------
void __thiscall NiTPointerMap<char_const___unsigned_short>::DeleteItem(NiTPointerMap<char const *,unsigned short> *this, NiTMapItem<char const *,unsigned short> *pkItem)
{
  bool v2; // zf@1

  pkItem->m_val = 0;
  EnterCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
  dword_B6DFE8 = GetCurrentThreadId();
  ++dword_B6DFEC;
  pkItem->m_key = 0;
  pkItem->m_pkNext = (NiTMapItem<char const *,unsigned short> *)NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem;
  v2 = dword_B6DFEC-- == 1;
  NiTAbstractPoolAllocator<unsigned_int>::ms_pkFreeMem = (int)pkItem;
  if ( v2 )
    dword_B6DFE8 = 0;
  LeaveCriticalSection(&NiTAbstractPoolAllocator<unsigned_int>::ms_kCriticalSection);
}
// 6B92E0: could not find valid save-restore pair for esi
// B6DFCC: using guessed type int NiTAbstractPoolAllocator_unsigned int___ms_pkFreeMem;
// B6DFE8: using guessed type int dword_B6DFE8;
// B6DFEC: using guessed type int dword_B6DFEC;

//----- (006B9340) --------------------------------------------------------
void __thiscall PgTList<unsigned_short>::_PgTList<unsigned_short>(PgTList<unsigned short> *this)
{
  PgTList<unsigned short> *v1; // edi@1
  NiTListItem<unsigned short> *v2; // esi@1
  NiTListItem<unsigned short> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&PgTList<unsigned_short>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
}
// 9C90E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);
// 9C9134: using guessed type int (__thiscall *PgTList_unsigned short____vftable_)(void *p, char);

//----- (006B93C0) --------------------------------------------------------
void *__thiscall PgTList<QuestMC__>::_scalar_deleting_destructor_(PgTList<QuestMC *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QuestMC *> *v3; // esi@1
  NiTListItem<QuestMC *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestMC *>Vtbl *)&PgTList<QuestMC__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestMC__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C9094: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestMC _____vftable_)(void *p, char);
// 9C9114: using guessed type int (__thiscall *PgTList_QuestMC _____vftable_)(void *p, char);

//----- (006B9450) --------------------------------------------------------
void *__thiscall PgTList<QUEST_DATA__>::_scalar_deleting_destructor_(PgTList<QUEST_DATA *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QUEST_DATA *> *v3; // esi@1
  NiTListItem<QUEST_DATA *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QUEST_DATA *>Vtbl *)&PgTList<QUEST_DATA__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QUEST_DATA__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C90B4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QUEST_DATA _____vftable_)(void *p, char);
// 9C9124: using guessed type int (__thiscall *PgTList_QUEST_DATA _____vftable_)(void *p, char);

//----- (006B94E0) --------------------------------------------------------
void __thiscall NiTPointerList<QuestHelperMgr::ProgressQuestMobGroup__>::_NiTPointerList<QuestHelperMgr::ProgressQuestMobGroup__>(NiTPointerList<QuestHelperMgr::ProgressQuestMobGroup *> *this)
{
  NiTPointerList<QuestHelperMgr::ProgressQuestMobGroup *> *v1; // edi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v2; // esi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
}
// 9C90D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);
// 9C9104: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B9560) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vector_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v3; // esi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C90D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);
// 9C9104: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B95F0) --------------------------------------------------------
void *__thiscall PgTList<unsigned_short>::_vector_deleting_destructor_(PgTList<unsigned short> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<unsigned short> *v3; // esi@1
  NiTListItem<unsigned short> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,unsigned short>Vtbl *)&PgTList<unsigned_short>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_unsigned_short>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C90E4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__unsigned short____vftable_)(void *p, char);
// 9C9134: using guessed type int (__thiscall *PgTList_unsigned short____vftable_)(void *p, char);

//----- (006B9680) --------------------------------------------------------
void *__thiscall PgTList<QuestHelperMgr::ProgressQuestMobGroup__>::_scalar_deleting_destructor_(PgTList<QuestHelperMgr::ProgressQuestMobGroup *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v3; // esi@1
  NiTListItem<QuestHelperMgr::ProgressQuestMobGroup *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,QuestHelperMgr::ProgressQuestMobGroup *>Vtbl *)&PgTList<QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_QuestHelperMgr::ProgressQuestMobGroup__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C90D4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);
// 9C914C: using guessed type int (__thiscall *PgTList_QuestHelperMgr__ProgressQuestMobGroup _____vftable_)(void *p, char);

//----- (006B9710) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, const char *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  unsigned int v3; // edi@1
  unsigned int v4; // eax@1
  bool v5; // cf@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@5

  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = result->baseclass_0._Mysize;
  v4 = _Right->baseclass_0._Mysize + strlen(_Left);
  if ( v3 <= v4
    && result->baseclass_0._Myres != v4
    && std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Grow(result, v4, 1) )
  {
    v5 = result->baseclass_0._Myres < 0x10;
    result->baseclass_0._Mysize = v3;
    if ( v5 )
      v6 = result;
    else
      v6 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&result->baseclass_0.___u0.baseclass_0.dummy[0];
    v6->baseclass_0.___u0.baseclass_0.dummy[v3] = 0;
  }
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, _Left, strlen(_Left));
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(result, _Right, 0, 0xFFFFFFFFu);
  return result;
}

//----- (006B97E0) --------------------------------------------------------
void __thiscall Scenario::_Scenario(Scenario *this)
{
  this->vfptr = (ScenarioVtbl *)&Scenario::_vftable_;
}
// 9C915C: using guessed type int (__stdcall *Scenario___vftable_)(int);

//----- (006B9810) --------------------------------------------------------
void __thiscall ScenarioMgr::StopScenario(ScenarioMgr *this, unsigned __int16 kID)
{
  TutorialMgr *v2; // ecx@2
  TutorialMgr *v3; // ecx@4
  TutorialMgr *v4; // ecx@8
  TutorialMgr *v5; // ecx@10
  TutorialMgr *v6; // ecx@12
  TutorialMgr *v7; // ecx@14
  TutorialMgr *v8; // ecx@16
  TutorialMgr *v9; // ecx@18

  switch ( kID )
  {
    case 1u:
      v2 = this->m_pTutorialMgr;
      if ( v2 )
        v2->m_kWaitEvent_OpenInventoryWin.bOn = 0;
      break;
    case 2u:
      v3 = this->m_pTutorialMgr;
      if ( v3 )
        v3->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.bOn = 0;
      break;
    case 3u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_OnHPSoulStoneUse_Key.bOn = 0;
        this->m_pTutorialMgr->m_kWaitEvent_OnSPSoulStoneUse_Key.bOn = 0;
      }
      break;
    case 4u:
      v4 = this->m_pTutorialMgr;
      if ( v4 )
        v4->m_kWaitEvent_OpenItemUpgradeWin.bOn = 0;
      break;
    case 5u:
      v5 = this->m_pTutorialMgr;
      if ( v5 )
        v5->m_kWaitEvent_On_NC_ITEM_UPGRADE_ACK.bOn = 0;
      break;
    case 6u:
      v6 = this->m_pTutorialMgr;
      if ( v6 )
        v6->m_kWaitEvent_OpenWeaponTitleWin.bOn = 0;
      break;
    case 7u:
      v7 = this->m_pTutorialMgr;
      if ( v7 )
        v7->m_kWaitEvent_On_NC_WT_LICENSE_ACK.bOn = 0;
      break;
    case 8u:
      v8 = this->m_pTutorialMgr;
      if ( v8 )
        v8->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.bOn = 0;
      break;
    case 9u:
      v9 = this->m_pTutorialMgr;
      if ( v9 )
        v9->m_kWaitEvent_OnShortCutSkill.bOn = 0;
      break;
    default:
      return;
  }
}

//----- (006B98F0) --------------------------------------------------------
void __thiscall TutorialMgr::SendResult(TutorialMgr *this, unsigned __int16 kID, char kCmd)
{
  GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, kID, kCmd, 1u);
}

//----- (006B9910) --------------------------------------------------------
void __thiscall TutorialMgr::On_NC_SKILL_SKILL_LEARNSUC_CMD(TutorialMgr *this)
{
  unsigned __int16 v1; // dx@2
  char v2; // ST04_1@2

  if ( this->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.bOn )
  {
    v1 = this->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.kID;
    v2 = this->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.kCmd;
    this->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.bOn = 0;
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, v1, v2, 1u);
  }
}

//----- (006B9930) --------------------------------------------------------
void __thiscall TutorialMgr::OnShortCutSkill(TutorialMgr *this)
{
  unsigned __int16 v1; // dx@2
  char v2; // ST04_1@2

  if ( this->m_kWaitEvent_OnShortCutSkill.bOn )
  {
    v1 = this->m_kWaitEvent_OnShortCutSkill.kID;
    v2 = this->m_kWaitEvent_OnShortCutSkill.kCmd;
    this->m_kWaitEvent_OnShortCutSkill.bOn = 0;
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, v1, v2, 1u);
  }
}

//----- (006B9950) --------------------------------------------------------
void __thiscall TutorialMgr::OpenItemUpgradeWin(TutorialMgr *this)
{
  unsigned __int16 v1; // dx@2
  char v2; // ST04_1@2

  if ( this->m_kWaitEvent_OpenItemUpgradeWin.bOn )
  {
    v1 = this->m_kWaitEvent_OpenItemUpgradeWin.kID;
    v2 = this->m_kWaitEvent_OpenItemUpgradeWin.kCmd;
    this->m_kWaitEvent_OpenItemUpgradeWin.bOn = 0;
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, v1, v2, 1u);
  }
}

//----- (006B9970) --------------------------------------------------------
void __thiscall TutorialMgr::OnSPSoulStoneUse_Key(TutorialMgr *this)
{
  bool v1; // zf@2

  if ( this->m_kWaitEvent_OnSPSoulStoneUse_Key.bOn )
  {
    v1 = this->m_kWaitEvent_OnHPSoulStoneUse_Key.bOn == 0;
    this->m_kWaitEvent_OnSPSoulStoneUse_Key.bOn = 0;
    if ( v1 )
      GameFrameWork::NcQuestScriptCmdAck(
        (GameFrameWork *)this->m_pkFrameWork,
        this->m_kWaitEvent_OnSPSoulStoneUse_Key.kID,
        this->m_kWaitEvent_OnSPSoulStoneUse_Key.kCmd,
        1u);
  }
}

//----- (006B99A0) --------------------------------------------------------
void __thiscall TutorialMgr::OnHPSoulStoneUse_Key(TutorialMgr *this)
{
  bool v1; // zf@2

  if ( this->m_kWaitEvent_OnHPSoulStoneUse_Key.bOn )
  {
    v1 = this->m_kWaitEvent_OnSPSoulStoneUse_Key.bOn == 0;
    this->m_kWaitEvent_OnHPSoulStoneUse_Key.bOn = 0;
    if ( v1 )
      GameFrameWork::NcQuestScriptCmdAck(
        (GameFrameWork *)this->m_pkFrameWork,
        this->m_kWaitEvent_OnHPSoulStoneUse_Key.kID,
        this->m_kWaitEvent_OnHPSoulStoneUse_Key.kCmd,
        1u);
  }
}

//----- (006B99D0) --------------------------------------------------------
void __thiscall TutorialMgr::On_NC_ITEM_EQUIP_ACK(TutorialMgr *this)
{
  unsigned __int16 v1; // dx@2
  char v2; // ST04_1@2

  if ( this->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.bOn )
  {
    v1 = this->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.kID;
    v2 = this->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.kCmd;
    this->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.bOn = 0;
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, v1, v2, 1u);
  }
}

//----- (006B99F0) --------------------------------------------------------
void __thiscall TutorialMgr::OpenInventoryWin(TutorialMgr *this)
{
  unsigned __int16 v1; // dx@2
  char v2; // ST04_1@2

  if ( this->m_kWaitEvent_OpenInventoryWin.bOn )
  {
    v1 = this->m_kWaitEvent_OpenInventoryWin.kID;
    v2 = this->m_kWaitEvent_OpenInventoryWin.kCmd;
    this->m_kWaitEvent_OpenInventoryWin.bOn = 0;
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, v1, v2, 1u);
  }
}

//----- (006B9A10) --------------------------------------------------------
void __thiscall TutorialMgr::OnOpenWeaponTitleWin(TutorialMgr *this)
{
  unsigned __int16 v1; // dx@2
  char v2; // ST04_1@2

  if ( this->m_kWaitEvent_OpenWeaponTitleWin.bOn )
  {
    v1 = this->m_kWaitEvent_OpenWeaponTitleWin.kID;
    v2 = this->m_kWaitEvent_OpenWeaponTitleWin.kCmd;
    this->m_kWaitEvent_OpenWeaponTitleWin.bOn = 0;
    GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, v1, v2, 1u);
  }
}

//----- (006B9A30) --------------------------------------------------------
void __thiscall ScenarioMgr::RunScenario(ScenarioMgr *this, unsigned __int16 kID, unsigned __int16 nQuestID, char kCmd)
{
  ScenarioMgr *v4; // esi@1
  char v5; // cl@7
  GameFrameWork **v6; // esi@10
  void *v7; // eax@18
  int v8; // eax@19

  v4 = this;
  switch ( kID )
  {
    case 1u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_OpenInventoryWin.bOn = 1;
        this->m_pTutorialMgr->m_kWaitEvent_OpenInventoryWin.kID = nQuestID;
        this->m_pTutorialMgr->m_kWaitEvent_OpenInventoryWin.kCmd = kCmd;
        GameFrameWork::CloseInventoryWin((GameFrameWork *)this->m_pTutorialMgr->m_pkFrameWork);
      }
      break;
    case 2u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.bOn = 1;
        this->m_pTutorialMgr->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.kID = nQuestID;
        this->m_pTutorialMgr->m_kWaitEvent_On_NC_ITEM_EQUIP_ACK.kCmd = kCmd;
        GameFrameWork::UnEquip((GameFrameWork *)this->m_pTutorialMgr->m_pkFrameWork, 0xCu);
      }
      break;
    case 3u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_OnHPSoulStoneUse_Key.bOn = 1;
        this->m_pTutorialMgr->m_kWaitEvent_OnHPSoulStoneUse_Key.kID = nQuestID;
        v5 = kCmd;
        v4->m_pTutorialMgr->m_kWaitEvent_OnHPSoulStoneUse_Key.kCmd = kCmd;
        v4->m_pTutorialMgr->m_kWaitEvent_OnSPSoulStoneUse_Key.bOn = 1;
        v4->m_pTutorialMgr->m_kWaitEvent_OnSPSoulStoneUse_Key.kID = nQuestID;
        v4->m_pTutorialMgr->m_kWaitEvent_OnSPSoulStoneUse_Key.kCmd = v5;
      }
      break;
    case 4u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_OpenItemUpgradeWin.bOn = 1;
        this->m_pTutorialMgr->m_kWaitEvent_OpenItemUpgradeWin.kID = nQuestID;
        this->m_pTutorialMgr->m_kWaitEvent_OpenItemUpgradeWin.kCmd = kCmd;
      }
      break;
    case 5u:
      v6 = (GameFrameWork **)this->m_pTutorialMgr;
      if ( v6 )
        GameFrameWork::CloseItemUpgradeWin(*v6, 0);
      break;
    case 6u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_OpenWeaponTitleWin.bOn = 1;
        this->m_pTutorialMgr->m_kWaitEvent_OpenWeaponTitleWin.kID = nQuestID;
        this->m_pTutorialMgr->m_kWaitEvent_OpenWeaponTitleWin.kCmd = kCmd;
      }
      break;
    case 8u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.bOn = 1;
        this->m_pTutorialMgr->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.kID = nQuestID;
        this->m_pTutorialMgr->m_kWaitEvent_On_NC_SKILL_SKILL_LEARNSUC_CMD.kCmd = kCmd;
      }
      break;
    case 9u:
      if ( this->m_pTutorialMgr )
      {
        this->m_pTutorialMgr->m_kWaitEvent_OnShortCutSkill.bOn = 1;
        this->m_pTutorialMgr->m_kWaitEvent_OnShortCutSkill.kID = nQuestID;
        this->m_pTutorialMgr->m_kWaitEvent_OnShortCutSkill.kCmd = kCmd;
      }
      break;
    case 0xFu:
      v7 = operator new(0x28u);
      if ( v7 )
        Scenario_15::Scenario_15((Scenario_15 *)v7, v4->m_pTutorialMgr->m_pkFrameWork, kID, nQuestID, kCmd);
      else
        v8 = 0;
      *(_DWORD *)&kCmd = v8;
      std::list<enum__ABSTATEINDEX_std::allocator<enum__ABSTATEINDEX>>::push_back(
        (std::list<enum ABSTATEINDEX,std::allocator<enum ABSTATEINDEX> > *)v4,
        (ABSTATEINDEX *)&kCmd);
      break;
    default:
      return;
  }
}

//----- (006B9CE0) --------------------------------------------------------
void __thiscall ScenarioMgr::Update(ScenarioMgr *this, float fTime)
{
  int v2; // ecx@1
  int v3; // ebx@1
  void *v4; // esi@2
  int v5; // edi@2
  int v6; // [sp+10h] [bp-8h]@1
  ScenarioMgr *v7; // [sp+14h] [bp-4h]@1

  v7 = this;
  v2 = *(_DWORD *)&this->m_listScenatio.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *(_DWORD *)v2;
  v6 = v2;
  while ( v3 != v6 )
  {
    v4 = (void *)v3;
    v5 = *(_DWORD *)(v3 + 8);
    v3 = *(_DWORD *)v3;
    if ( v5 && !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 4))(v5, LODWORD(fTime)) )
    {
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 8))(v5, 1);
      if ( v4 != *(void **)&v7->m_listScenatio.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
      {
        **((_DWORD **)v4 + 1) = *(_DWORD *)v4;
        *(_DWORD *)(*(_DWORD *)v4 + 4) = *((_DWORD *)v4 + 1);
        operator delete(v4);
        --v7->m_listScenatio.baseclass_0.baseclass_0._Mysize;
      }
    }
  }
}

//----- (006B9D60) --------------------------------------------------------
bool __thiscall Scenario::Stop(Scenario *this, float fTime)
{
  GameFrameWork::NcQuestScriptCmdAck((GameFrameWork *)this->m_pkFrameWork, this->m_nQuestID, this->m_kCmd, 1u);
  return 1;
}

//----- (006B9D80) --------------------------------------------------------
void __thiscall Scenario_15::Scenario_15(Scenario_15 *this, PgFrameWork *pkFrameWork, unsigned __int16 kID, unsigned __int16 nQuestID, char kCmd)
{
  Scenario_15 *v5; // esi@1
  float kCmda; // [sp+38h] [bp+14h]@1

  v5 = this;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  this->baseclass_0.m_kID = kID;
  this->baseclass_0.m_nQuestID = nQuestID;
  this->baseclass_0.m_kCmd = kCmd;
  this->baseclass_0.vfptr = (ScenarioVtbl *)&Scenario_15::_vftable_;
  CNSTimer_MarkCheck::CNSTimer_MarkCheck(&this->m_kMarkCheck);
  v5->m_kMarkCheck.m_fMarkTime = 10.0;
  CNSTimer_MarkCheck::ReSet(&v5->m_kMarkCheck, Timer::ms_fCurTime, OVER);
  g_kServer.m_fOldGameTimeWhenSet = g_kServer.m_fGameTimeWhenSet;
  g_kServer.m_fOldAppTimeWhenSet = g_kServer.m_fAppTimeWhenSet;
  g_kServer.m_fOldOneDayTime = Server::ONE_DAY_TIME;
  kCmda = Server::GetGameTime(&g_kServer, Timer::ms_fCurTime);
  Server::ONE_DAY_TIME = 1.0;
  g_kServer.m_fGameTimeWhenSet = kCmda;
  g_kServer.m_fAppTimeWhenSet = Timer::ms_fCurTime;
}
// 9C916C: using guessed type int (__stdcall *Scenario_15___vftable_)(int);
// A81188: using guessed type float Server__ONE_DAY_TIME;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006B9E70) --------------------------------------------------------
void *__thiscall Scenario_15::_vector_deleting_destructor_(Scenario_15 *this, unsigned int a2)
{
  Scenario_15 *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (ScenarioVtbl *)&Scenario_15::_vftable_;
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&this->m_kMarkCheck);
  v2->baseclass_0.vfptr = (ScenarioVtbl *)&Scenario::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C915C: using guessed type int (__stdcall *Scenario___vftable_)(int);
// 9C916C: using guessed type int (__stdcall *Scenario_15___vftable_)(int);

//----- (006B9EE0) --------------------------------------------------------
bool __thiscall Scenario_15::Update(Scenario_15 *this, float fTime)
{
  Scenario_15 *v2; // esi@1
  bool result; // al@2

  v2 = this;
  if ( CNSTimer_MarkCheck::Update(&this->m_kMarkCheck, Timer::ms_fCurTime) == 1 )
  {
    ((void (__thiscall *)(_DWORD, _DWORD))v2->baseclass_0.vfptr->Stop)(v2, LODWORD(fTime));
    g_kServer.m_fGameTimeWhenSet = g_kServer.m_fOldGameTimeWhenSet;
    result = 0;
    g_kServer.m_fAppTimeWhenSet = g_kServer.m_fOldAppTimeWhenSet;
    Server::ONE_DAY_TIME = g_kServer.m_fOldOneDayTime;
  }
  else
  {
    result = 1;
  }
  return result;
}
// A81188: using guessed type float Server__ONE_DAY_TIME;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006B9F40) --------------------------------------------------------
void __thiscall CGuildMonster::CGuildMonster(CGuildMonster *this)
{
  CGuildMonster *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  CGuildMonster *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@2

  v1 = this;
  v4 = this;
  this->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v1);
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006B9FF0) --------------------------------------------------------
CGuildMonster *__cdecl CGuildMonster::GetInstance()
{
  CGuildMonster *result; // eax@1
  void *v1; // eax@2

  result = (CGuildMonster *)CGuildMonster::m_pInstance;
  if ( !CGuildMonster::m_pInstance )
  {
    v1 = operator new(0x10u);
    if ( v1 )
    {
      CGuildMonster::CGuildMonster(result);
      CGuildMonster::m_pInstance = (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)result;
    }
    else
    {
      result = 0;
      CGuildMonster::m_pInstance = 0;
    }
  }
  return result;
}

//----- (006BA070) --------------------------------------------------------
void __cdecl CGuildMonster::ReleaseInstance()
{
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v0; // esi@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v1; // ST08_4@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v2; // ST04_4@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-14h]@2
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v4; // [sp+4h] [bp-10h]@2
  int v5; // [sp+10h] [bp-4h]@2

  if ( CGuildMonster::m_pInstance )
  {
    v0 = CGuildMonster::m_pInstance;
    v4 = CGuildMonster::m_pInstance;
    v5 = 0;
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear(CGuildMonster::m_pInstance);
    v1 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v0->baseclass_0.baseclass_0._Myhead;
    v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v0->baseclass_0.baseclass_0._Myhead->_Left;
    v5 = 1;
    std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
      v0,
      &result,
      v2,
      v1);
    operator delete(v0->baseclass_0.baseclass_0._Myhead);
    operator delete(v0);
    CGuildMonster::m_pInstance = 0;
  }
}

//----- (006BA100) --------------------------------------------------------
void __thiscall GuildListTask::OnStart(GuildListTask *this)
{
  GuildListTask *v1; // esi@1
  GuildListWin *v2; // eax@1
  int v3; // edx@2
  IDirectMessenger *v4; // eax@5

  v1 = this;
  v2 = GuildListWin::CreateWin(0);
  GuildListTask::m_pkGuildListWin = v2;
  if ( v1 )
    v3 = (int)&v1->baseclass_0.baseclass_8;
  else
    v3 = 0;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v3);
  if ( v1 )
    v4 = &v1->baseclass_0.baseclass_8;
  else
    v4 = 0;
  GuildListTask::m_pkGuildListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &GuildListTask::m_pkGuildListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    v4);
}

//----- (006BA150) --------------------------------------------------------
void __cdecl GuildListTask::OnNCGuildListReq(int iIndex)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 3u, 0, 0);
}

//----- (006BA180) --------------------------------------------------------
bool __thiscall GuildListTask::OnProcessNetMsg(GuildListTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  bool result; // al@3

  if ( iDepart == 29 && iCommand == 4 )
  {
    this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_LIST_ACK(
      (CGuildList *)&this->baseclass_40,
      (PROTO_NC_GUILD_LIST_ACK *)pvData);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006BA1B0) --------------------------------------------------------
int __thiscall GuildListTask::Recv_NC_GUILD_LIST_ACK(GuildListTask *this, PROTO_NC_GUILD_LIST_ACK *pkProto)
{
  signed int v2; // edi@4
  SHINE_GUILD_LIST_NEW *v3; // ebx@5

  if ( pkProto->Error == 3137 )
  {
    if ( pkProto->PartMask & 1 )
      GuildListWin::Clear(GuildListTask::m_pkGuildListWin);
    v2 = 0;
    if ( pkProto->nGuildListCnt > 0u )
    {
      v3 = (SHINE_GUILD_LIST_NEW *)&pkProto[1];
      do
      {
        GuildListWin::SetGuildList(GuildListTask::m_pkGuildListWin, v3, pkProto->TotalNumOfGuild);
        ++v2;
        ++v3;
      }
      while ( v2 < pkProto->nGuildListCnt );
    }
    if ( pkProto->PartMask & 2 )
    {
      GuildListWin::DisplayInfoSetting(GuildListTask::m_pkGuildListWin, 0);
      return 1;
    }
  }
  else
  {
    if ( pkProto->Error == 7216 )
      GuildListWin::ShowFormerList(GuildListTask::m_pkGuildListWin);
  }
  return 1;
}

//----- (006BA240) --------------------------------------------------------
bool __cdecl GuildListTask::ShowGuildListWin()
{
  bool result; // al@1

  result = ((int (*)(void))GuildListTask::m_pkGuildListWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  if ( !result )
  {
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 3u, 0, 0);
    result = PgWinMgr::ShowWin(&Pgg_kWinMgr, &GuildListTask::m_pkGuildListWin->baseclass_0.baseclass_0.baseclass_0);
  }
  return result;
}

//----- (006BA280) --------------------------------------------------------
GuildListWin *__cdecl GuildListTask::GetGuildListWin()
{
  return GuildListTask::m_pkGuildListWin;
}

//----- (006BA290) --------------------------------------------------------
void __cdecl GuildListTask::Terminate()
{
  int v0; // esi@1

  v0 = GuildListTask::ms_spGuildListTask;
  if ( GuildListTask::ms_spGuildListTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(GuildListTask::ms_spGuildListTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    GuildListTask::ms_spGuildListTask = 0;
  }
}
// B67C7C: using guessed type int GuildListTask__ms_spGuildListTask;

//----- (006BA2D0) --------------------------------------------------------
void __thiscall GuildListTask::_GuildListTask(GuildListTask *this)
{
  GuildListTask *v1; // esi@1
  GuildListTask *v2; // ST08_4@1
  CGuildList *v3; // ecx@1

  v1 = this;
  v2 = this;
  v3 = (CGuildList *)&this->baseclass_40;
  v2->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildListTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildListTask::_vftable_;
  v3->vfptr = (CGuildListVtbl *)GuildListTask::_vftable_;
  CGuildList::_CGuildList(v3);
  ITask::_ITask(&v1->baseclass_0);
}
// 9C9188: using guessed type int (__stdcall *GuildListTask___vftable_[2])(int);
// 9C9194: using guessed type int (__stdcall *GuildListTask___vftable_)(int uiFlags);
// 9C91B0: using guessed type int (__thiscall *GuildListTask___vftable_)(void *p, char);

//----- (006BA340) --------------------------------------------------------
void __thiscall GuildListTask::GuildListTask(GuildListTask *this)
{
  GuildListTask *v1; // esi@1

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  CGuildList::CGuildList(&v1->baseclass_40.baseclass_0);
  v1->baseclass_40.baseclass_0.vfptr = (CGuildListVtbl *)CClientGuildList::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildListTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildListTask::_vftable_;
  v1->baseclass_40.baseclass_0.vfptr = (CGuildListVtbl *)GuildListTask::_vftable_;
}
// 9C917C: using guessed type int (__stdcall *CClientGuildList___vftable_[2])(int);
// 9C9188: using guessed type int (__stdcall *GuildListTask___vftable_[2])(int);
// 9C9194: using guessed type int (__stdcall *GuildListTask___vftable_)(int uiFlags);
// 9C91B0: using guessed type int (__thiscall *GuildListTask___vftable_)(void *p, char);

//----- (006BA3B0) --------------------------------------------------------
void __cdecl GuildListTask::Create(IDirectMessenger *pkMsgHooker)
{
  int v1; // eax@1
  void *v2; // eax@2
  int v3; // esi@2
  int v4; // edi@7

  v1 = GuildListTask::ms_spGuildListTask;
  if ( !GuildListTask::ms_spGuildListTask )
  {
    v2 = operator new(0x4Cu);
    v3 = (int)v2;
    if ( v2 )
    {
      ITask::ITask((ITask *)v2, 0);
      CGuildList::CGuildList((CGuildList *)(v3 + 64));
      *(_DWORD *)(v3 + 64) = CClientGuildList::_vftable_;
      *(_DWORD *)v3 = &GuildListTask::_vftable_;
      *(_DWORD *)(v3 + 8) = &GuildListTask::_vftable_;
      *(_DWORD *)(v3 + 64) = GuildListTask::_vftable_;
    }
    else
    {
      v3 = 0;
    }
    v1 = GuildListTask::ms_spGuildListTask;
    if ( GuildListTask::ms_spGuildListTask != v3 )
    {
      if ( GuildListTask::ms_spGuildListTask )
      {
        v4 = GuildListTask::ms_spGuildListTask;
        if ( !InterlockedDecrement((volatile LONG *)(GuildListTask::ms_spGuildListTask + 4)) )
        {
          if ( v4 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        }
      }
      v1 = v3;
      GuildListTask::ms_spGuildListTask = v3;
      if ( v3 )
      {
        InterlockedIncrement((volatile LONG *)(v3 + 4));
        v1 = GuildListTask::ms_spGuildListTask;
      }
    }
  }
  (**(void (__cdecl ***)(_DWORD))(v1 + 8))(pkMsgHooker);
}
// 9C917C: using guessed type int (__stdcall *CClientGuildList___vftable_[2])(int);
// 9C9188: using guessed type int (__stdcall *GuildListTask___vftable_[2])(int);
// 9C9194: using guessed type int (__stdcall *GuildListTask___vftable_)(int uiFlags);
// 9C91B0: using guessed type int (__thiscall *GuildListTask___vftable_)(void *p, char);
// B67C7C: using guessed type int GuildListTask__ms_spGuildListTask;

//----- (006BA4A0) --------------------------------------------------------
void *__thiscall GuildListTask::_scalar_deleting_destructor_(GuildListTask *this, unsigned int a2)
{
  GuildListTask *v2; // esi@1
  GuildListTask *v3; // ST0C_4@1
  CGuildList *v4; // ecx@1

  v2 = this;
  v3 = this;
  v4 = (CGuildList *)&this->baseclass_40;
  v3->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildListTask::_vftable_;
  v2->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildListTask::_vftable_;
  v4->vfptr = (CGuildListVtbl *)GuildListTask::_vftable_;
  CGuildList::_CGuildList(v4);
  ITask::_ITask(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C9188: using guessed type int (__stdcall *GuildListTask___vftable_[2])(int);
// 9C9194: using guessed type int (__stdcall *GuildListTask___vftable_)(int uiFlags);
// 9C91B0: using guessed type int (__thiscall *GuildListTask___vftable_)(void *p, char);

//----- (006BA520) --------------------------------------------------------
unsigned int __thiscall CClientGuildMember::GetNumOfOnlineMembers(CClientGuildMember *this)
{
  int v1; // edx@1
  unsigned int result; // eax@1
  char *v3; // ecx@2

  v1 = this->baseclass_0.m_NumOfMembers;
  result = 0;
  if ( this->baseclass_0.m_NumOfMembers )
  {
    v3 = (char *)&this->baseclass_0.m_Members[0].dLogonInfo;
    do
    {
      if ( *v3 & 1 )
        ++result;
      v3 += 110;
      --v1;
    }
    while ( v1 );
  }
  return result;
}

//----- (006BA540) --------------------------------------------------------
GUILD_MEMBER_CLIENT *__thiscall CClientGuildMember::GetGuildMaster(CClientGuildMember *this)
{
  int v1; // esi@1
  int v2; // eax@1
  char *v3; // edx@2
  GUILD_MEMBER_CLIENT *result; // eax@5

  v1 = this->baseclass_0.m_NumOfMembers;
  v2 = 0;
  if ( v1 <= 0 )
  {
LABEL_5:
    result = 0;
  }
  else
  {
    v3 = &this->baseclass_0.m_Members[0].nGrade;
    while ( *v3 )
    {
      ++v2;
      v3 += 110;
      if ( v2 >= v1 )
        goto LABEL_5;
    }
    result = &this->baseclass_0.m_Members[v2];
  }
  return result;
}

//----- (006BA580) --------------------------------------------------------
void __thiscall GuildMemberTask::OnFinish(GuildMemberTask *this)
{
  int v1; // esi@1

  v1 = GuildMemberTask::ms_spGuildMemberTask;
  if ( GuildMemberTask::ms_spGuildMemberTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(GuildMemberTask::ms_spGuildMemberTask + 4)) )
    {
      if ( v1 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    }
    GuildMemberTask::ms_spGuildMemberTask = 0;
  }
}
// B67C80: using guessed type int GuildMemberTask__ms_spGuildMemberTask;

//----- (006BA5C0) --------------------------------------------------------
CClientGuildMember *__cdecl GuildMemberTask::GetGuildMember()
{
  CClientGuildMember *result; // eax@2

  if ( GuildMemberTask::ms_spGuildMemberTask )
    result = (CClientGuildMember *)(GuildMemberTask::ms_spGuildMemberTask + 64);
  else
    result = 0;
  return result;
}
// B67C80: using guessed type int GuildMemberTask__ms_spGuildMemberTask;

//----- (006BA5D0) --------------------------------------------------------
int __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_LOGOFF_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_LOGOFF_CMD *pkProto)
{
  return CGuildMember::Recv_NC_GUILD_MEMBER_LOGOFF_CMD((CGuildMember *)this, pkProto) != 0;
}

//----- (006BA600) --------------------------------------------------------
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_MEMBER_LEAVE_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_LEAVE_CMD *pkProto)
{
  _BYTE v2[20]; // ST00_20@2
  CClientGuildAcademy *v3; // eax@2
  CClientGuildAcademy *v4; // eax@3

  if ( CGuildMember::Recv_NC_GUILD_MEMBER_LEAVE_CMD(&this->baseclass_40.baseclass_0, pkProto) )
  {
    *(_QWORD *)v2 = *(_QWORD *)&pkProto->CharID.n5_name[0];
    *(_QWORD *)&v2[8] = *(_QWORD *)&pkProto->CharID.n5_name[8];
    *(_DWORD *)&v2[16] = *(_DWORD *)&pkProto->CharID.n5_name[16];
    v3 = GuildAcademyTask::GetGuildAcademy();
    if ( CClientGuildAcademy::IsGuildAcademyMaster(v3, *(Name5 *)v2) )
    {
      v4 = GuildAcademyTask::GetGuildAcademy();
      *(_DWORD *)&v4->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] = 0;
      *(_DWORD *)&v4->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[12] = 0;
      *(_DWORD *)&v4->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8] = 0;
      *(_DWORD *)&v4->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[4] = 0;
      *(_DWORD *)&v4->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] = 0;
      strncpy(v4->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name, byte_9C91C5, 0x14u);
    }
  }
}

//----- (006BA680) --------------------------------------------------------
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD *pkProto)
{
  GuildMemberTask *v2; // edi@1
  CClientGuild *v3; // eax@1
  int v4; // ecx@3
  CClientGuildAcademyMember *v5; // eax@6
  Name5 *v6; // eax@7
  GuildAcademySelectWin *v7; // eax@16

  v2 = this;
  v3 = GuildTask::GetGuild();
  if ( !CClientGuild::AmIGuildMember(v3)
    || (!GuildMemberTask::ms_spGuildMemberTask ? (v4 = 0) : (v4 = GuildMemberTask::ms_spGuildMemberTask + 64),
        (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 80))(pkProto)) )
  {
    v5 = GuildAcademyMemberTask::GetGuildAcademyMember();
    if ( v5->baseclass_0.vfptr->Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD((CGuildAcademyMember *)v5, pkProto) )
    {
      v6 = User::GetMainCharID(&g_kUser);
      if ( *(_DWORD *)&v6->n5_name[0] == *(_DWORD *)&pkProto->Member.sName.n5_name[0]
        && *(_DWORD *)&v6->n5_name[4] == *(_DWORD *)&pkProto->Member.sName.n5_name[4]
        && *(_DWORD *)&v6->n5_name[8] == *(_DWORD *)&pkProto->Member.sName.n5_name[8]
        && *(_DWORD *)&v6->n5_name[12] == *(_DWORD *)&pkProto->Member.sName.n5_name[12]
        && *(_DWORD *)&v6->n5_name[16] == *(_DWORD *)&pkProto->Member.sName.n5_name[16] )
        GuildAcademyTask::GetGuildAcademy()->m_bIsGuildAcademyMember = 0;
      if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          71,
          0,
          &v2->baseclass_0.baseclass_8);
        if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            71,
            0,
            &v2->baseclass_0.baseclass_8);
      }
      v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v2->baseclass_0.baseclass_8,
        71,
        0,
        &v2->baseclass_0.baseclass_8);
      v7 = GuildAcademySelectTask::GetGuildAcademySelectWin();
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v7) )
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
    }
  }
}
// B67C80: using guessed type int GuildMemberTask__ms_spGuildMemberTask;

//----- (006BA780) --------------------------------------------------------
void __thiscall GuildMemberTask::DirectMessage(GuildMemberTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildMemberTask *v4; // esi@1
  int v5; // eax@2
  IDirectMessenger *v6; // eax@3
  unsigned int v7; // ecx@7
  unsigned int v8; // edx@7
  int v9; // eax@7
  unsigned int v10; // eax@9
  unsigned int v11; // ecx@9
  int v12; // edx@9
  GuildMemberTask::State v13; // eax@12
  IDirectMessenger *v14; // eax@13
  int v15; // edx@17
  int v16; // eax@17
  int v17; // ecx@17
  int v18; // edx@17
  int v19; // eax@17
  int v20; // ecx@17
  int v21; // edx@17
  int v22; // eax@17
  int v23; // eax@19
  int v24; // ecx@19
  int v25; // edx@19
  int v26; // eax@19
  int v27; // ecx@19
  int v28; // edx@19
  int v29; // eax@19
  int v30; // ecx@19
  void *v31; // [sp-10h] [bp-54h]@7
  void *v32; // [sp-10h] [bp-54h]@17
  int v33; // [sp-Ch] [bp-50h]@7
  int v34; // [sp-Ch] [bp-50h]@17
  int pProto; // [sp+4h] [bp-40h]@17
  int v36; // [sp+8h] [bp-3Ch]@17
  int v37; // [sp+Ch] [bp-38h]@17
  int v38; // [sp+10h] [bp-34h]@17
  int v39; // [sp+14h] [bp-30h]@17
  int v40; // [sp+18h] [bp-2Ch]@17
  int v41; // [sp+1Ch] [bp-28h]@17
  int v42; // [sp+20h] [bp-24h]@17
  int v43; // [sp+24h] [bp-20h]@17
  char v44; // [sp+28h] [bp-1Ch]@17
  PROTO_NC_GUILD_MEMBER_JOIN_ACK kProto; // [sp+2Ch] [bp-18h]@7
  unsigned int v46; // [sp+40h] [bp-4h]@1
  int v47; // [sp+44h] [bp+0h]@1

  v46 = (unsigned int)&v47 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag != 27 )
    return;
  v5 = *(_DWORD *)&this->baseclass_40.baseclass_0.m_Members[399].sMap.n3_name[10];
  if ( v5 )
    v6 = (IDirectMessenger *)(v5 + 232);
  else
    v6 = 0;
  if ( pkFrom == v6 )
  {
    if ( *(_DWORD *)pvBody )
    {
      if ( *(_DWORD *)pvBody != 1 )
      {
LABEL_11:
        *(_DWORD *)&v4->baseclass_40.baseclass_0.m_Members[399].sMap.n3_name[10] = 0;
        goto LABEL_12;
      }
      v10 = *(_DWORD *)&this->m_pkInviteFrom.n5_name[16];
      v11 = *(_DWORD *)&this->m_kGuildNameToJoin.n4_name[0];
      *(_DWORD *)&kProto.GuildName.n4_name[0] = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[12];
      v12 = *(_DWORD *)&v4->m_kGuildNameToJoin.n4_name[4];
      *(_QWORD *)&kProto.GuildName.n4_name[4] = __PAIR__(v11, v10);
      v33 = 17;
      *(_DWORD *)&kProto.GuildName.n4_name[12] = v12;
      kProto.JoinAck = 0;
      v31 = &kProto;
    }
    else
    {
      v7 = *(_DWORD *)&this->m_pkInviteFrom.n5_name[16];
      v8 = *(_DWORD *)&v4->m_kGuildNameToJoin.n4_name[0];
      *(_DWORD *)&kProto.GuildName.n4_name[0] = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[12];
      v9 = *(_DWORD *)&v4->m_kGuildNameToJoin.n4_name[4];
      *(_QWORD *)&kProto.GuildName.n4_name[4] = __PAIR__(v8, v7);
      v33 = 17;
      *(_DWORD *)&kProto.GuildName.n4_name[12] = v9;
      kProto.JoinAck = 1;
      v31 = &kProto;
    }
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xCu, v31, v33);
    goto LABEL_11;
  }
LABEL_12:
  v13 = v4->m_eState;
  if ( v13 )
    v14 = (IDirectMessenger *)(v13 + 232);
  else
    v14 = 0;
  if ( pkFrom == v14 )
  {
    if ( *(_DWORD *)pvBody )
    {
      if ( *(_DWORD *)pvBody != 1 )
      {
LABEL_21:
        v4->m_eState = 0;
        return;
      }
      v23 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[16];
      v24 = *(_DWORD *)&v4->m_kGuildNameToJoin.n4_name[0];
      pProto = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[12];
      v25 = *(_DWORD *)&v4->m_kGuildNameToJoin.n4_name[4];
      v36 = v23;
      v26 = (int)v4->m_pkGuildJoinReqDlg;
      v37 = v24;
      v27 = (int)v4->m_pkGuildAcademyMemJoinDlg;
      v38 = v25;
      v28 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[0];
      v39 = v26;
      v29 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[4];
      v40 = v27;
      v30 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[8];
      v41 = v28;
      v34 = 37;
      v42 = v29;
      v43 = v30;
      v44 = 0;
      v32 = &pProto;
    }
    else
    {
      v15 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[16];
      v16 = *(_DWORD *)&v4->m_kGuildNameToJoin.n4_name[0];
      pProto = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[12];
      v17 = *(_DWORD *)&v4->m_kGuildNameToJoin.n4_name[4];
      v36 = v15;
      v18 = (int)v4->m_pkGuildJoinReqDlg;
      v37 = v16;
      v19 = (int)v4->m_pkGuildAcademyMemJoinDlg;
      v38 = v17;
      v20 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[0];
      v39 = v18;
      v21 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[4];
      v40 = v19;
      v22 = *(_DWORD *)&v4->m_pkInviteFrom.n5_name[8];
      v41 = v20;
      v34 = 37;
      v42 = v21;
      v43 = v22;
      v44 = 1;
      v32 = &pProto;
    }
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x2Cu, v32, v34);
    goto LABEL_21;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006BA950) --------------------------------------------------------
void __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_JOIN_REQ(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_JOIN_REQ *pkProto)
{
  int v2; // ebx@1
  GuildMemberTask *v3; // edi@1
  MHDiceGameTask *v4; // ecx@2
  int v5; // eax@7
  unsigned int v6; // edx@7
  int v7; // eax@8
  int v8; // ecx@8
  int v9; // edx@8
  int v10; // eax@8
  int v11; // ecx@8
  int v12; // edx@8
  int v13; // eax@8
  int v14; // ecx@8
  int v15; // ecx@8
  char *v16; // eax@8
  char *v17; // eax@8
  MsgBox *v18; // eax@8
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-5Ch]@2
  MHDiceGameTask *v20; // [sp+4h] [bp-58h]@3
  bool v21; // [sp+Bh] [bp-51h]@2
  PROTO_NC_GUILD_MEMBER_JOIN_ACK kProto; // [sp+Ch] [bp-50h]@7
  char acWhoSentRequest[21]; // [sp+20h] [bp-3Ch]@8
  char acGuildName[17]; // [sp+38h] [bp-24h]@8
  unsigned int v25; // [sp+4Ch] [bp-10h]@1
  int v26; // [sp+58h] [bp-4h]@2
  int v27; // [sp+5Ch] [bp+0h]@1

  v25 = (unsigned int)&v27 ^ __security_cookie;
  v2 = 0;
  v3 = this;
  if ( byte_B5BB2B )
    goto LABEL_13;
  v4 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v26 = 0;
  v21 = MHDiceGameTask::IsDicegamePlaying(v4);
  v26 = -1;
  if ( result.m_pObject )
  {
    v20 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v20 )
        ((void (__stdcall *)(signed int))v20->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
    }
  }
  if ( v21 )
  {
LABEL_13:
    v5 = *(_DWORD *)&pkProto->GuildName.n4_name[0];
    v6 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
    *(_DWORD *)&kProto.GuildName.n4_name[4] = *(_DWORD *)&pkProto->GuildName.n4_name[4];
    *(_DWORD *)&kProto.GuildName.n4_name[0] = v5;
    *(_QWORD *)&kProto.GuildName.n4_name[8] = __PAIR__(*(_DWORD *)&pkProto->GuildName.n4_name[12], v6);
    kProto.JoinAck = 0;
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xCu, &kProto, 17);
  }
  else
  {
    v7 = *(_DWORD *)&pkProto->FromCharID.n5_name[4];
    v8 = *(_DWORD *)&pkProto->FromCharID.n5_name[8];
    *(_DWORD *)acWhoSentRequest = *(_DWORD *)&pkProto->FromCharID.n5_name[0];
    v9 = *(_DWORD *)&pkProto->FromCharID.n5_name[12];
    *(_DWORD *)&acWhoSentRequest[4] = v7;
    v10 = *(_DWORD *)&pkProto->FromCharID.n5_name[16];
    *(_DWORD *)&acWhoSentRequest[8] = v8;
    v11 = *(_DWORD *)&pkProto->GuildName.n4_name[4];
    *(_DWORD *)&acWhoSentRequest[12] = v9;
    v12 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
    *(_DWORD *)&acWhoSentRequest[16] = v10;
    v13 = *(_DWORD *)&pkProto->GuildName.n4_name[0];
    *(_DWORD *)&acGuildName[4] = v11;
    v14 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
    *(_DWORD *)&v3->baseclass_40.baseclass_0.m_Members[399].sIntro[53] = v13;
    *(_DWORD *)&acGuildName[8] = v12;
    *(_DWORD *)&v3->baseclass_40.baseclass_0.m_Members[399].sIntro[57] = *(_DWORD *)&pkProto->GuildName.n4_name[4];
    *(_DWORD *)acGuildName = v13;
    *(_DWORD *)&v3->baseclass_40.baseclass_0.m_Members[399].sIntro[61] = *(_DWORD *)&pkProto->GuildName.n4_name[8];
    *(_DWORD *)&acGuildName[12] = v14;
    v15 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
    acWhoSentRequest[20] = 0;
    acGuildName[16] = 0;
    *(int *)((char *)&v3->baseclass_40.baseclass_0.m_Members[399].dLogonInfo._bf0 + 1) = v15;
    v16 = TextData::Get(0x210BFF34u);
    v17 = fs(v16);
    v18 = MsgBox::Modeless(MSGBOX_OKCANCEL, v17);
    *(_DWORD *)&v3->baseclass_40.baseclass_0.m_Members[399].sIntro[25] = v18;
    if ( v3 != (GuildMemberTask *)64 )
      v2 = (int)((char *)v3 - 56);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v18->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      v2);
  }
}
// A85C00: using guessed type int __security_cookie;
// B5BB2B: using guessed type char byte_B5BB2B;

//----- (006BAAD0) --------------------------------------------------------
void __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_JOIN_ERR(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_JOIN_ERR *pkProto)
{
  signed int v2; // eax@1
  int v3; // ecx@7
  char *v4; // eax@7
  char *v5; // eax@7
  PgFrameWork *v6; // eax@8
  GameFrameWork *v7; // esi@9
  char *v8; // eax@9
  int v9; // eax@10
  char *v10; // eax@14
  unsigned int v11; // [sp-4h] [bp-20h]@6
  unsigned int v12; // [sp-4h] [bp-20h]@8
  char acGuildName[17]; // [sp+4h] [bp-18h]@7
  unsigned int v14; // [sp+18h] [bp-4h]@1
  int v15; // [sp+1Ch] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = pkProto->Error;
  if ( v2 <= 3294 )
  {
    if ( v2 != 3294 )
    {
      if ( v2 < 3288 )
        return;
      if ( v2 <= 3292 )
      {
        *(_QWORD *)acGuildName = *(_QWORD *)&pkProto->GuildName.n4_name[0];
        v3 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
        *(_DWORD *)&acGuildName[8] = *(_DWORD *)&pkProto->GuildName.n4_name[8];
        *(_DWORD *)&acGuildName[12] = v3;
        acGuildName[16] = 0;
        v4 = TextData::Get(0x31824D8Eu);
        v5 = fs(v4);
        MsgBox::Modeless(MSGBOX_OK, v5);
        return;
      }
      if ( v2 != 3293 )
        return;
      v11 = 136443514;
      goto LABEL_14;
    }
    v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v12 = -1227573459;
LABEL_9:
    v7 = (GameFrameWork *)v6;
    v8 = TextData2::Get(v12);
    GameFrameWork::AddSysMsg(v7, v8);
    return;
  }
  v9 = v2 - 7121;
  if ( v9 )
  {
    if ( v9 != 2 )
      return;
    v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v12 = 140082800;
    goto LABEL_9;
  }
  v11 = 1904563679;
LABEL_14:
  v10 = TextData2::Get(v11);
  MsgBox::Modeless(MSGBOX_OK, v10);
}
// A85C00: using guessed type int __security_cookie;

//----- (006BABF0) --------------------------------------------------------
int __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_VANISH_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_VANISH_CMD *pkProto)
{
  GuildMemberTask *v2; // ebx@1
  int result; // eax@1
  _BYTE v4[20]; // ST00_20@2
  CClientGuildAcademy *v5; // eax@2
  CClientGuildAcademy *v6; // eax@3
  int v7; // edi@3
  Name5 *v8; // eax@5
  CClientGuild *v9; // eax@10
  char *v10; // eax@10
  int v11; // esi@10
  char *v12; // edi@10
  int v13; // esi@14
  char acMyGuildName[17]; // [sp+Ch] [bp-18h]@10
  unsigned int v15; // [sp+20h] [bp-4h]@1
  int v16; // [sp+24h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v2 = this;
  result = CGuildMember::Recv_NC_GUILD_MEMBER_LEAVE_CMD(
             (CGuildMember *)this,
             (PROTO_NC_GUILD_MEMBER_LEAVE_CMD *)pkProto);
  if ( result )
  {
    *(_QWORD *)v4 = *(_QWORD *)&pkProto->CharID.n5_name[0];
    *(_QWORD *)&v4[8] = *(_QWORD *)&pkProto->CharID.n5_name[8];
    *(_DWORD *)&v4[16] = *(_DWORD *)&pkProto->CharID.n5_name[16];
    v5 = GuildAcademyTask::GetGuildAcademy();
    if ( CClientGuildAcademy::IsGuildAcademyMaster(v5, *(Name5 *)v4) )
    {
      v6 = GuildAcademyTask::GetGuildAcademy();
      v7 = 0;
      *(_DWORD *)&v6->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] = 0;
      *(_DWORD *)&v6->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[12] = 0;
      *(_DWORD *)&v6->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8] = 0;
      *(_DWORD *)&v6->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[4] = 0;
      *(_DWORD *)&v6->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] = 0;
      strncpy(v6->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name, &byte_9C91C4, 0x14u);
    }
    else
    {
      v7 = 0;
    }
    v8 = User::GetMainCharID(&g_kUser);
    if ( *(_DWORD *)&pkProto->CharID.n5_name[0] == *(_DWORD *)&v8->n5_name[0]
      && *(_DWORD *)&pkProto->CharID.n5_name[4] == *(_DWORD *)&v8->n5_name[4]
      && *(_DWORD *)&pkProto->CharID.n5_name[8] == *(_DWORD *)&v8->n5_name[8]
      && *(_DWORD *)&pkProto->CharID.n5_name[12] == *(_DWORD *)&v8->n5_name[12]
      && *(_DWORD *)&pkProto->CharID.n5_name[16] == *(_DWORD *)&v8->n5_name[16] )
    {
      GuildTask::GetGuild()->baseclass_0.m_bIsGuild = v7;
      v9 = GuildTask::GetGuild();
      *(_DWORD *)acMyGuildName = *(_DWORD *)&v9->baseclass_0.m_Guild.sName.n4_name[0];
      *(_DWORD *)&acMyGuildName[4] = *(_DWORD *)&v9->baseclass_0.m_Guild.sName.n4_name[4];
      *(_DWORD *)&acMyGuildName[8] = *(_DWORD *)&v9->baseclass_0.m_Guild.sName.n4_name[8];
      *(_DWORD *)&acMyGuildName[12] = *(_DWORD *)&v9->baseclass_0.m_Guild.sName.n4_name[12];
      acMyGuildName[16] = 0;
      v10 = TextData::Get(0x89E6C3E3u);
      v11 = (int)((char *)v2 - 56);
      v12 = fs(v10);
      if ( *(&v2->baseclass_0.baseclass_0.m_uiRefCount - 14) )
      {
        (*(void (__stdcall **)(signed int, char *, char *))(**(_DWORD **)(v11 + 4) + 4))(25, v12, (char *)v2 - 56);
        if ( *(_DWORD *)(v11 + 4) )
          (*(void (__stdcall **)(signed int, char *, char *))(**(_DWORD **)(v11 + 4) + 20))(25, v12, (char *)v2 - 56);
      }
      (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v11 + 20))(
        (char *)v2 - 56,
        25,
        v12,
        (char *)v2 - 56);
      LOWORD(v2->baseclass_0.baseclass_0.m_uiRefCount) = 0;
      v7 = 0;
    }
    v13 = (int)((char *)v2 - 56);
    if ( *((_DWORD *)v2 - 13) != v7 )
    {
      (*(void (__stdcall **)(signed int, int, char *))(**(_DWORD **)(v13 + 4) + 4))(41, v7, (char *)v2 - 56);
      if ( *(_DWORD *)(v13 + 4) != v7 )
        (*(void (__stdcall **)(signed int, int, char *))(**(_DWORD **)(v13 + 4) + 20))(41, v7, (char *)v2 - 56);
    }
    (*(void (__thiscall **)(char *, signed int, int, char *))(*(_DWORD *)v13 + 20))(
      (char *)v2 - 56,
      41,
      v7,
      (char *)v2 - 56);
    if ( *(_DWORD *)(v13 + 4) != v7 )
    {
      (*(void (__stdcall **)(signed int, int, char *))(**(_DWORD **)(v13 + 4) + 4))(71, v7, (char *)v2 - 56);
      if ( *(_DWORD *)(v13 + 4) != v7 )
        (*(void (__stdcall **)(signed int, int, char *))(**(_DWORD **)(v13 + 4) + 20))(71, v7, (char *)v2 - 56);
    }
    (*(void (__thiscall **)(char *, signed int, int, char *))(*(_DWORD *)v13 + 20))(
      (char *)v2 - 56,
      71,
      v7,
      (char *)v2 - 56);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006BADD0) --------------------------------------------------------
void __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_INVITE_ACK(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_INVITE_ACK *pkProto)
{
  char *v2; // esi@2
  char *v3; // edi@2

  if ( pkProto->Error == 3287 )
  {
    v2 = (char *)this - 56;
    v3 = TextData::Get(0xBBAFBBE5u);
    if ( *((_DWORD *)v2 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 4))(25, v3, v2);
      if ( *((_DWORD *)v2 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(25, v3, v2);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 25, v3, v2);
  }
}

//----- (006BAE40) --------------------------------------------------------
int __thiscall GuildMemberTask::Recv_NC_GUILD_MEMBER_LOGON_CMD(GuildMemberTask *this, PROTO_NC_GUILD_MEMBER_LOGON_CMD *pkProto)
{
  int result; // eax@1
  char *v3; // eax@3
  int v4; // ecx@8
  int v5; // edx@8
  int v6; // eax@8
  int v7; // eax@8
  char *v8; // eax@8
  int v9; // esi@8
  char *v10; // edi@8
  GuildMemberTask *v11; // [sp+4h] [bp-20h]@1
  char acCharName[21]; // [sp+8h] [bp-1Ch]@3
  unsigned int v13; // [sp+20h] [bp-4h]@1
  int v14; // [sp+24h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v11 = this;
  result = CGuildMember::Recv_NC_GUILD_MEMBER_LOGON_CMD((CGuildMember *)this, pkProto);
  if ( result )
  {
    if ( byte_B5BB47 )
    {
      v3 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
      *(_DWORD *)&acCharName[16] = 0;
      *(_DWORD *)&acCharName[12] = 0;
      *(_DWORD *)&acCharName[8] = 0;
      *(_DWORD *)&acCharName[4] = 0;
      *(_DWORD *)acCharName = 0;
      strncpy(acCharName, v3, 0x14u);
      if ( *(_DWORD *)&pkProto->CharID.n5_name[0] != *(_DWORD *)acCharName
        || *(_DWORD *)&pkProto->CharID.n5_name[4] != *(_DWORD *)&acCharName[4]
        || *(_DWORD *)&pkProto->CharID.n5_name[8] != *(_DWORD *)&acCharName[8]
        || *(_DWORD *)&pkProto->CharID.n5_name[12] != *(_DWORD *)&acCharName[12]
        || *(_DWORD *)&pkProto->CharID.n5_name[16] != *(_DWORD *)&acCharName[16] )
      {
        v4 = *(_DWORD *)&pkProto->CharID.n5_name[8];
        v5 = *(_DWORD *)&pkProto->CharID.n5_name[12];
        *(_DWORD *)acCharName = *(_DWORD *)&pkProto->CharID.n5_name[0];
        v6 = *(_DWORD *)&pkProto->CharID.n5_name[4];
        *(_DWORD *)&acCharName[8] = v4;
        *(_DWORD *)&acCharName[4] = v6;
        v7 = *(_DWORD *)&pkProto->CharID.n5_name[16];
        *(_DWORD *)&acCharName[12] = v5;
        *(_DWORD *)&acCharName[16] = v7;
        acCharName[20] = 0;
        v8 = TextData::Get(0x868973E4u);
        v9 = (int)((char *)v11 - 56);
        v10 = fs(v8);
        if ( *(&v11->baseclass_0.baseclass_0.m_uiRefCount - 14) )
        {
          (*(void (__stdcall **)(signed int, char *, char *))(**(_DWORD **)(v9 + 4) + 4))(25, v10, (char *)v11 - 56);
          if ( *(_DWORD *)(v9 + 4) )
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 20))(25, v10, v9);
        }
        (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
      }
    }
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B5BB47: using guessed type char byte_B5BB47;

//----- (006BAF60) --------------------------------------------------------
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_INVITE_ACK(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_INVITE_ACK *pkProto)
{
  GuildMemberTask *v2; // esi@1
  int v3; // ecx@1
  char *v4; // eax@3
  char *v5; // eax@10
  char *v6; // ebx@10
  int v7; // esi@18
  char *v8; // edi@18
  unsigned int v9; // [sp-8h] [bp-28h]@14
  char acname[21]; // [sp+4h] [bp-1Ch]@2
  unsigned int v11; // [sp+1Ch] [bp-4h]@1
  int v12; // [sp+20h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  v3 = pkProto->Error;
  if ( (_WORD)v3 != 6016 )
  {
    *(_QWORD *)acname = *(_QWORD *)&pkProto->sInviteTargetCharID.n5_name[0];
    *(_DWORD *)&acname[8] = *(_DWORD *)&pkProto->sInviteTargetCharID.n5_name[8];
    *(_QWORD *)&acname[12] = *(_QWORD *)&pkProto->sInviteTargetCharID.n5_name[12];
    acname[20] = 0;
    switch ( v3 )
    {
      case 6080:
        v4 = TextData::Get(0xB1DBBE52u);
        goto LABEL_18;
      case 6081:
      case 6082:
      case 6087:
        v4 = TextData::Get(0x7DDDB5F7u);
        goto LABEL_18;
      case 6083:
        v4 = TextData::Get(0xBBAFBBE5u);
        goto LABEL_18;
      case 6084:
        v4 = TextData::Get(0x80D5CBDBu);
        goto LABEL_18;
      case 6085:
        v4 = TextData::Get(0xC4C9EA1Fu);
        goto LABEL_18;
      case 6086:
        v4 = TextData::Get(0x23542449u);
        goto LABEL_18;
      case 6088:
        v4 = TextData::Get(0x96E2E7DDu);
        goto LABEL_18;
      case 6089:
        v5 = TextData::Get(0xBDBBBE16u);
        v6 = fs(v5);
        if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            v6,
            &v2->baseclass_0.baseclass_8);
          if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              v6,
              &v2->baseclass_0.baseclass_8);
        }
        v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
          &v2->baseclass_0.baseclass_8,
          25,
          v6,
          &v2->baseclass_0.baseclass_8);
        goto $LN138_4;
      case 6090:
$LN138_4:
        v9 = 1441837268;
        goto LABEL_17;
      case 6091:
        v9 = 1286371709;
        goto LABEL_17;
      case 6092:
        v9 = -158644368;
LABEL_17:
        v4 = TextData2::Get(v9);
LABEL_18:
        v7 = (int)&v2->baseclass_0.baseclass_8;
        v8 = v4;
        if ( *(_DWORD *)(v7 + 4) )
        {
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 4))(25, v4, v7);
          if ( *(_DWORD *)(v7 + 4) )
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 20))(25, v8, v7);
        }
        (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
        break;
      default:
        return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006BB120) --------------------------------------------------------
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ *pkProto)
{
  GuildMemberTask *v2; // edi@1
  int v3; // eax@2
  unsigned int v4; // edx@2
  unsigned int v5; // eax@2
  MHDiceGameTask *v6; // ecx@3
  int v7; // eax@8
  int v8; // edx@8
  int v9; // eax@8
  int v10; // eax@9
  int v11; // ecx@9
  int v12; // edx@9
  int v13; // eax@9
  int v14; // ecx@9
  int v15; // edx@9
  int v16; // eax@9
  int v17; // ecx@9
  int v18; // eax@9
  char *v19; // eax@9
  char *v20; // eax@9
  MsgBox *v21; // eax@9
  MHDiceGameTask *v22; // [sp+0h] [bp-84h]@4
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-80h]@3
  bool v24; // [sp+Bh] [bp-79h]@3
  PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_ACK kProto; // [sp+Ch] [bp-78h]@2
  int pProto; // [sp+34h] [bp-50h]@8
  int v27; // [sp+38h] [bp-4Ch]@8
  int v28; // [sp+3Ch] [bp-48h]@8
  int v29; // [sp+40h] [bp-44h]@8
  char v30; // [sp+44h] [bp-40h]@8
  char acWhoSentRequest[21]; // [sp+48h] [bp-3Ch]@9
  char acGuildName[17]; // [sp+60h] [bp-24h]@9
  unsigned int v33; // [sp+74h] [bp-10h]@1
  int v34; // [sp+80h] [bp-4h]@3
  int v35; // [sp+84h] [bp+0h]@1

  v33 = (unsigned int)&v35 ^ __security_cookie;
  v2 = this;
  if ( byte_B5BB2B )
  {
    v3 = *(_DWORD *)&pkProto->GuildName.n4_name[0];
    v4 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
    *(_DWORD *)&kProto.GuildName.n4_name[4] = *(_DWORD *)&pkProto->GuildName.n4_name[4];
    *(_DWORD *)&kProto.GuildName.n4_name[0] = v3;
    v5 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
    *(_QWORD *)&kProto.sInviteSourceCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kProto.sInviteSourceCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kProto.sInviteSourceCharID.n5_name[0] = 0;
    *(_QWORD *)&kProto.GuildName.n4_name[8] = __PAIR__(v5, v4);
    kProto.JoinAck = 0;
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xCu, &kProto, 37);
  }
  else
  {
    v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    v34 = 0;
    v24 = MHDiceGameTask::IsDicegamePlaying(v6);
    v34 = -1;
    if ( result.m_pObject )
    {
      v22 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v22 )
          ((void (__stdcall *)(signed int))v22->baseclass_0.baseclass_0.vfptr->__vecDelDtor)(1);
      }
    }
    if ( v24 )
    {
      v7 = *(_DWORD *)&pkProto->GuildName.n4_name[0];
      v8 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
      v27 = *(_DWORD *)&pkProto->GuildName.n4_name[4];
      pProto = v7;
      v9 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
      v28 = v8;
      v29 = v9;
      v30 = 0;
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xCu, &pProto, 17);
    }
    else
    {
      v10 = *(_DWORD *)&pkProto->sInviteSourceCharID.n5_name[4];
      v11 = *(_DWORD *)&pkProto->sInviteSourceCharID.n5_name[8];
      *(_DWORD *)acWhoSentRequest = *(_DWORD *)&pkProto->sInviteSourceCharID.n5_name[0];
      v12 = *(_DWORD *)&pkProto->sInviteSourceCharID.n5_name[12];
      *(_DWORD *)&acWhoSentRequest[4] = v10;
      v13 = *(_DWORD *)&pkProto->sInviteSourceCharID.n5_name[16];
      *(_DWORD *)&acWhoSentRequest[8] = v11;
      v14 = *(_DWORD *)&pkProto->GuildName.n4_name[4];
      *(_DWORD *)&acWhoSentRequest[12] = v12;
      v15 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
      *(_DWORD *)&acWhoSentRequest[16] = v13;
      v16 = *(_DWORD *)&pkProto->GuildName.n4_name[0];
      *(_DWORD *)&acGuildName[4] = v14;
      v17 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
      *(_DWORD *)&v2->m_kGuildNameToJoin.n4_name[0] = v16;
      *(_DWORD *)&acGuildName[8] = v15;
      *(_DWORD *)&v2->m_kGuildNameToJoin.n4_name[4] = *(_DWORD *)&pkProto->GuildName.n4_name[4];
      *(_DWORD *)acGuildName = v16;
      *(_DWORD *)&v2->m_kGuildNameToJoin.n4_name[8] = *(_DWORD *)&pkProto->GuildName.n4_name[8];
      *(_DWORD *)&acGuildName[12] = v17;
      *(_DWORD *)&v2->m_kGuildNameToJoin.n4_name[12] = *(_DWORD *)&pkProto->GuildName.n4_name[12];
      *(_QWORD *)&v2->m_pkInviteFrom.n5_name[0] = *(_QWORD *)&pkProto->sInviteSourceCharID.n5_name[0];
      *(_QWORD *)&v2->m_pkInviteFrom.n5_name[8] = *(_QWORD *)&pkProto->sInviteSourceCharID.n5_name[8];
      v18 = *(_DWORD *)&pkProto->sInviteSourceCharID.n5_name[16];
      acWhoSentRequest[20] = 0;
      acGuildName[16] = 0;
      *(_DWORD *)&v2->m_pkInviteFrom.n5_name[16] = v18;
      v19 = TextData::Get(0x210BFF34u);
      v20 = fs(v19);
      v21 = MsgBox::Modeless(MSGBOX_OKCANCEL, v20);
      v2->m_pkGuildAcademyMemJoinDlg = v21;
      ((void (__stdcall *)(IDirectMessenger *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_8);
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// B5BB2B: using guessed type char byte_B5BB2B;

//----- (006BB310) --------------------------------------------------------
void __thiscall GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_ERR(GuildMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_ERR *pkProto)
{
  int v2; // edx@1
  GuildMemberTask *v3; // esi@1
  int v4; // ecx@1
  int v5; // edx@1
  int v6; // eax@1
  char *v7; // eax@3
  char *v8; // eax@3
  int v9; // esi@11
  char *v10; // edi@11
  unsigned int v11; // [sp-Ch] [bp-28h]@2
  unsigned int v12; // [sp-8h] [bp-24h]@7
  char acname[17]; // [sp+4h] [bp-18h]@1
  unsigned int v14; // [sp+18h] [bp-4h]@1
  int v15; // [sp+1Ch] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = *(_DWORD *)&pkProto->GuildName.n4_name[4];
  v3 = this;
  *(_DWORD *)acname = *(_DWORD *)&pkProto->GuildName.n4_name[0];
  v4 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
  *(_DWORD *)&acname[4] = v2;
  v5 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
  v6 = pkProto->Error - 6096;
  *(_DWORD *)&acname[8] = v4;
  *(_DWORD *)&acname[12] = v5;
  acname[16] = 0;
  switch ( v6 )
  {
    case 0:
      v11 = -1111769578;
      goto LABEL_3;
    case 1:
      v11 = 1723912175;
LABEL_3:
      v7 = TextData::Get(v11);
      v8 = fs(v7);
      goto LABEL_11;
    case 2:
    case 4:
      v8 = TextData::Get(0xC4C9EA1Fu);
      goto LABEL_11;
    case 3:
      v8 = TextData::Get(0x66C0CFEFu);
      goto LABEL_11;
    case 5:
      v12 = 1904563679;
      goto LABEL_10;
    case 6:
      v12 = 140082800;
      goto LABEL_10;
    case 7:
      v12 = 136443514;
LABEL_10:
      v8 = TextData2::Get(v12);
LABEL_11:
      v9 = (int)&v3->baseclass_0.baseclass_8;
      v10 = v8;
      if ( *(_DWORD *)(v9 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 4))(25, v8, v9);
        if ( *(_DWORD *)(v9 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v9 + 4) + 20))(25, v10, v9);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
      break;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006BB430) --------------------------------------------------------
bool __thiscall GuildMemberTask::OnProcessNetMsg(GuildMemberTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildMemberTask *v5; // esi@1
  bool result; // al@5
  int v7; // esi@16
  int v8; // esi@20
  int v9; // esi@25
  int v10; // esi@29
  int v11; // esi@34
  int v12; // esi@39
  int v13; // esi@43
  int v14; // esi@48
  int v15; // esi@53

  v5 = this;
  if ( iDepart == 4 )
    return 0;
  if ( iDepart != 29 )
  {
    if ( iDepart == 38 )
    {
      switch ( iCommand )
      {
        case 42:
          GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_INVITE_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_INVITE_ACK *)pvData);
          result = 1;
          break;
        case 43:
          GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ(
            this,
            (PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_REQ *)pvData);
          result = 1;
          break;
        case 46:
          GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD(
            this,
            (PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD *)pvData);
          result = 1;
          break;
        case 45:
          GuildMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_ERR(
            this,
            (PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_ERR *)pvData);
          result = 1;
          break;
        default:
          return 0;
      }
      return result;
    }
    return 0;
  }
  switch ( iCommand )
  {
    case 10:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_INVITE_ACK(&this->baseclass_40, pvData);
      result = 1;
      break;
    case 11:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_JOIN_REQ(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_JOIN_REQ *)pvData);
      result = 1;
      break;
    case 15:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_VANISH_ACK(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_VANISH_ACK *)pvData);
      result = 1;
      break;
    case 23:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_GRADE_ACK(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_GRADE_ACK *)pvData);
      result = 1;
      break;
    case 29:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_LEAVE_ACK(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_LEAVE_ACK *)pvData);
      result = 1;
      break;
    case 33:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_INTRO_ACK(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_INTRO_ACK *)pvData);
      result = 1;
      break;
    case 27:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_LIST_ACK(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_LIST_ACK *)pvData);
      v7 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v7 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 4))(41, 0, v7);
        if ( *(_DWORD *)(v7 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 20))(41, 0, v7);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20))(v7, 41, 0, v7);
      result = 1;
      break;
    case 54:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_JOIN_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_JOIN_CMD *)pvData);
      v8 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v8 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 4))(41, 0, v8);
        if ( *(_DWORD *)(v8 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 20))(41, 0, v8);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 20))(v8, 41, 0, v8);
      result = 1;
      break;
    case 55:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_VANISH_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_VANISH_CMD *)pvData);
      result = 1;
      break;
    case 56:
      GuildMemberTask::On_Recv_NC_GUILD_MEMBER_LEAVE_CMD(this, (PROTO_NC_GUILD_MEMBER_LEAVE_CMD *)pvData);
      v9 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v9 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v9 + 4) + 4))(41, 0, v9);
        if ( *(_DWORD *)(v9 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v9 + 4) + 20))(41, 0, v9);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 20))(v9, 41, 0, v9);
      result = 1;
      break;
    case 57:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_GRADE_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_GRADE_CMD *)pvData);
      v10 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v10 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 4))(41, 0, v10);
        if ( *(_DWORD *)(v10 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 20))(41, 0, v10);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v10 + 20))(v10, 41, 0, v10);
      result = 1;
      break;
    case 58:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_FLAGS_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_FLAGS_CMD *)pvData);
      result = 1;
      break;
    case 59:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_EXP_RATIO_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_EXP_RATIO_CMD *)pvData);
      v11 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v11 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 4))(41, 0, v11);
        if ( *(_DWORD *)(v11 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 20))(41, 0, v11);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v11 + 20))(v11, 41, 0, v11);
      result = 1;
      break;
    case 60:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_INTRO_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_INTRO_CMD *)pvData);
      result = 1;
      break;
    case 61:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_LOGON_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_LOGON_CMD *)pvData);
      v12 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v12 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v12 + 4) + 4))(41, 0, v12);
        if ( *(_DWORD *)(v12 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v12 + 4) + 20))(41, 0, v12);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v12 + 20))(v12, 41, 0, v12);
      result = 1;
      break;
    case 62:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_LOGOFF_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_LOGOFF_CMD *)pvData);
      v13 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v13 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v13 + 4) + 4))(41, 0, v13);
        if ( *(_DWORD *)(v13 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v13 + 4) + 20))(41, 0, v13);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v13 + 20))(v13, 41, 0, v13);
      result = 1;
      break;
    case 63:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_PARTY_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_PARTY_CMD *)pvData);
      result = 1;
      break;
    case 64:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_LEVEL_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_LEVEL_CMD *)pvData);
      v14 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v14 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v14 + 4) + 4))(41, 0, v14);
        if ( *(_DWORD *)(v14 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v14 + 4) + 20))(41, 0, v14);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v14 + 20))(v14, 41, 0, v14);
      result = 1;
      break;
    case 65:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_MAP_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_MAP_CMD *)pvData);
      result = 1;
      break;
    case 66:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MEMBER_CLASS_CMD(
        (CGuildMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_MEMBER_CLASS_CMD *)pvData);
      v15 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v15 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v15 + 4) + 4))(41, 0, v15);
        if ( *(_DWORD *)(v15 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v15 + 4) + 20))(41, 0, v15);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v15 + 20))(v15, 41, 0, v15);
      result = 1;
      break;
    case 13:
      GuildMemberTask::Recv_NC_GUILD_MEMBER_JOIN_ERR(this, (PROTO_NC_GUILD_MEMBER_JOIN_ERR *)pvData);
      result = 1;
      break;
    default:
      return 0;
  }
  return result;
}

//----- (006BB950) --------------------------------------------------------
void __thiscall GuildMemberTask::GuildMemberTask(GuildMemberTask *this)
{
  GuildMemberTask *v1; // esi@1
  int v2; // ebx@3

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  CGuildMember::CGuildMember(&v1->baseclass_40.baseclass_0);
  v1->baseclass_40.baseclass_0.vfptr = (CGuildMemberVtbl *)CClientGuildMember::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildMemberTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildMemberTask::_vftable_;
  v1->baseclass_40.baseclass_0.vfptr = (CGuildMemberVtbl *)GuildMemberTask::_vftable_;
  *(_DWORD *)&v1->m_pkInviteFrom.n5_name[16] = 0;
  *(_DWORD *)&v1->m_pkInviteFrom.n5_name[12] = 0;
  *(_DWORD *)&v1->m_pkInviteFrom.n5_name[8] = 0;
  *(_DWORD *)&v1->m_pkInviteFrom.n5_name[4] = 0;
  *(_DWORD *)&v1->m_pkInviteFrom.n5_name[0] = 0;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[12] = 0;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[8] = 0;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[4] = 0;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[0] = 0;
  if ( (GuildMemberTask *)GuildMemberTask::ms_spGuildMemberTask != v1 )
  {
    if ( GuildMemberTask::ms_spGuildMemberTask )
    {
      v2 = GuildMemberTask::ms_spGuildMemberTask;
      if ( !InterlockedDecrement((volatile LONG *)(GuildMemberTask::ms_spGuildMemberTask + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    GuildMemberTask::ms_spGuildMemberTask = (int)v1;
    InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount);
  }
  v1->m_pkGuildJoinReqDlg = 0;
}
// 9C91CC: using guessed type int (__stdcall *CClientGuildMember___vftable_[21])(int);
// 9C9224: using guessed type int (__stdcall *GuildMemberTask___vftable_[21])(int pkProto);
// 9C927C: using guessed type int (__stdcall *GuildMemberTask___vftable_)(int uiFlags);
// 9C9298: using guessed type int (__thiscall *GuildMemberTask___vftable_)(void *p, char);
// B67C80: using guessed type int GuildMemberTask__ms_spGuildMemberTask;

//----- (006BBA50) --------------------------------------------------------
void *__thiscall GuildMemberTask::_scalar_deleting_destructor_(GuildMemberTask *this, unsigned int a2)
{
  ITask *v2; // esi@1

  v2 = (ITask *)this;
  CGuildMember::_CGuildMember(&this->baseclass_40.baseclass_0);
  ITask::_ITask(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006BBAC0) --------------------------------------------------------
void __thiscall GuildTournamentEnemyInfo::_GuildTournamentEnemyInfo(GuildTournamentEnemyInfo *this)
{
  this->GuildRegNo = 0;
  *(_DWORD *)&this->acGuildName[0] = 0;
  *(_DWORD *)&this->acGuildName[4] = 0;
  *(_DWORD *)&this->acGuildName[8] = 0;
  *(_DWORD *)&this->acGuildName[12] = 0;
  *(_DWORD *)&this->acGuildName[16] = 0;
  *(_DWORD *)&this->acGuildName[20] = 0;
  *(_DWORD *)&this->acGuildName[24] = 0;
  *(_DWORD *)&this->acGuildName[28] = 0;
  this->uiStatus = 1;
}

//----- (006BBAF0) --------------------------------------------------------
bool __thiscall CClientGuild::AmIGuildMember(CClientGuild *this)
{
  return this->baseclass_0.m_bIsGuild != 0;
}

//----- (006BBB00) --------------------------------------------------------
bool __thiscall CClientGuild::AmIGuildMaster(CClientGuild *this)
{
  Name5 *v1; // ST00_4@2
  CGuildMember *v2; // eax@2
  GUILD_MEMBER_CLIENT *v3; // eax@2
  bool result; // al@3

  if ( this->baseclass_0.m_bIsGuild
    && (v1 = User::GetMainCharID(&g_kUser),
        v2 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v3 = CGuildMember::Get(v2, v1)) != 0) )
    result = v3->nGrade == 0;
  else
    result = 0;
  return result;
}

//----- (006BBB30) --------------------------------------------------------
bool __thiscall CClientGuild::CanIVanishMember(CClientGuild *this)
{
  CGuild *v1; // esi@1
  Name5 *v2; // ST00_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2
  bool result; // al@3

  v1 = (CGuild *)this;
  if ( this->baseclass_0.m_bIsGuild
    && (v2 = User::GetMainCharID(&g_kUser),
        v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v4 = CGuildMember::Get(v3, v2)) != 0) )
    result = CGuild::IsSetVanish(v1, v4) == 0;
  else
    result = 0;
  return result;
}

//----- (006BBB70) --------------------------------------------------------
bool __thiscall CClientGuild::CanIAppoint(CClientGuild *this)
{
  CGuild *v1; // esi@1
  Name5 *v2; // ST00_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2
  bool result; // al@3

  v1 = (CGuild *)this;
  if ( this->baseclass_0.m_bIsGuild
    && (v2 = User::GetMainCharID(&g_kUser),
        v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v4 = CGuildMember::Get(v3, v2)) != 0) )
    result = CGuild::IsSetMemberGrade(v1, v4) == 0;
  else
    result = 0;
  return result;
}

//----- (006BBBB0) --------------------------------------------------------
bool __thiscall CClientGuild::CanIInvite(CClientGuild *this)
{
  CGuild *v1; // esi@1
  Name5 *v2; // ST00_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2
  bool result; // al@3

  v1 = (CGuild *)this;
  if ( this->baseclass_0.m_bIsGuild
    && (v2 = User::GetMainCharID(&g_kUser),
        v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v4 = CGuildMember::Get(v3, v2)) != 0) )
    result = CGuild::IsSetInvite(v1, v4) == 0;
  else
    result = 0;
  return result;
}

//----- (006BBBF0) --------------------------------------------------------
bool __thiscall CClientGuild::CanIWriteNotice(CClientGuild *this)
{
  CGuild *v1; // esi@1
  Name5 *v2; // ST00_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2
  bool result; // al@3

  v1 = (CGuild *)this;
  if ( this->baseclass_0.m_bIsGuild
    && (v2 = User::GetMainCharID(&g_kUser),
        v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v4 = CGuildMember::Get(v3, v2)) != 0) )
    result = CGuild::IsSetNotify(v1, v4) == 0;
  else
    result = 0;
  return result;
}

//----- (006BBC30) --------------------------------------------------------
bool __thiscall CClientGuild::CanIDismissGuild(CClientGuild *this)
{
  CGuild *v1; // esi@1
  Name5 *v2; // ST00_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2
  bool result; // al@3

  v1 = (CGuild *)this;
  if ( this->baseclass_0.m_bIsGuild
    && (v2 = User::GetMainCharID(&g_kUser),
        v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v4 = CGuildMember::Get(v3, v2)) != 0) )
    result = CGuild::IsSetDismiss(v1, v4) == 0;
  else
    result = 0;
  return result;
}

//----- (006BBC70) --------------------------------------------------------
bool __thiscall CClientGuild::CanIApplyGuildWar(CClientGuild *this)
{
  CGuild *v1; // esi@1
  Name5 *v2; // ST00_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2
  bool result; // al@3

  v1 = (CGuild *)this;
  if ( this->baseclass_0.m_bIsGuild
    && (v2 = User::GetMainCharID(&g_kUser),
        v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v4 = CGuildMember::Get(v3, v2)) != 0) )
    result = CGuild::IsSetWar(v1, v4) == 0;
  else
    result = 0;
  return result;
}

//----- (006BBCB0) --------------------------------------------------------
bool __thiscall CClientGuild::CanIUseStorage(CClientGuild *this)
{
  CGuild *v1; // esi@1
  Name5 *v2; // ST00_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2
  bool result; // al@3

  v1 = (CGuild *)this;
  if ( this->baseclass_0.m_bIsGuild
    && (v2 = User::GetMainCharID(&g_kUser),
        v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v4 = CGuildMember::Get(v3, v2)) != 0) )
    result = CGuild::IsUseStorage(v1, v4);
  else
    result = 0;
  return result;
}

//----- (006BBCF0) --------------------------------------------------------
bool __thiscall CClientGuild::CanIForbidChat(CClientGuild *this)
{
  Name5 *v1; // ST00_4@2
  CGuildMember *v2; // eax@2
  GUILD_MEMBER_CLIENT *v3; // eax@2
  bool result; // al@3

  if ( this->baseclass_0.m_bIsGuild
    && (v1 = User::GetMainCharID(&g_kUser),
        v2 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
        (v3 = CGuildMember::Get(v2, v1)) != 0) )
    result = v3->nGrade < 4u;
  else
    result = 0;
  return result;
}

//----- (006BBD20) --------------------------------------------------------
bool __thiscall CClientGuild::IsEnemyGuild(CClientGuild *this, unsigned int regnum)
{
  CGuildWar::GUILD_WAR_LIST *v2; // eax@1
  bool result; // al@4

  v2 = this->baseclass_0.m_GuildWar.m_pGuildWarListTop;
  if ( v2 )
  {
    while ( v2->WarInfo.nNo != regnum )
    {
      v2 = v2->pLinkDn;
      if ( !v2 )
        goto LABEL_4;
    }
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (006BBD50) --------------------------------------------------------
bool __thiscall CClientGuild::IsAttackableEnemyGuild(CClientGuild *this, unsigned int regnum)
{
  CGuildWar::GUILD_WAR_LIST *v2; // eax@1
  bool result; // al@5

  v2 = this->baseclass_0.m_GuildWar.m_pGuildWarListTop;
  if ( v2 )
  {
    while ( v2->WarInfo.nNo != regnum || v2->WarInfo.nWarStatus != 2 )
    {
      v2 = v2->pLinkDn;
      if ( !v2 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006BBDC0) --------------------------------------------------------
bool __thiscall CClientGuild::IsWarEngaging(CClientGuild *this)
{
  CGuildWar::GUILD_WAR_LIST *v1; // eax@2
  bool result; // al@5

  if ( this->baseclass_0.m_GuildWar.m_NumOfWarList && (v1 = this->baseclass_0.m_GuildWar.m_pGuildWarListTop) != 0 )
  {
    while ( v1->WarInfo.nWarStatus != 2 )
    {
      v1 = v1->pLinkDn;
      if ( !v1 )
        goto LABEL_5;
    }
    result = 1;
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (006BBDF0) --------------------------------------------------------
bool __thiscall CClientGuild::IsGttEnemyGuild(CClientGuild *this, unsigned int regnum)
{
  return regnum == this->m_GttEnemyInfo.GuildRegNo;
}

//----- (006BBE10) --------------------------------------------------------
bool __thiscall CClientGuild::IsGttAttackableEnemyGuild(CClientGuild *this, unsigned int regnum)
{
  return this->m_GttEnemyInfo.GuildRegNo == regnum && this->m_GttEnemyInfo.uiStatus == 2;
}

//----- (006BBE40) --------------------------------------------------------
bool __thiscall CClientGuild::IsGttEngaging(CClientGuild *this)
{
  return this->m_GttEnemyInfo.uiStatus == 2;
}

//----- (006BBE50) --------------------------------------------------------
void __thiscall CClientGuild::ReqHistoryList(CClientGuild *this)
{
  CClientGuild *v1; // esi@1
  Name5 *v2; // ST0C_4@2
  CGuildMember *v3; // eax@2
  GUILD_MEMBER_CLIENT *v4; // eax@2

  v1 = this;
  if ( this->baseclass_0.m_bIsGuild )
  {
    if ( (v2 = User::GetMainCharID(&g_kUser),
          v3 = (CGuildMember *)GuildMemberTask::GetGuildMember(),
          (v4 = CGuildMember::Get(v3, v2)) != 0)
      && !v4->nGrade
      || v1->baseclass_0.m_bIsGuild )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0xFDu, 0, 0);
  }
}

//----- (006BBEA0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_WAR_START_CMD(GuildTask *this, PROTO_NC_GUILD_WAR_START_CMD *pCmd)
{
  return CGuild::Recv_NC_GUILD_WAR_START_CMD((CGuild *)this, pCmd) != 0;
}

//----- (006BBEC0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_WAR_COOLDOWN_DONE_CMD(GuildTask *this, PROTO_NC_GUILD_WAR_COOLDOWN_DONE_CMD *pCmd)
{
  GuildTask *v2; // esi@1
  int result; // eax@1

  v2 = this;
  result = CGuild::Recv_NC_GUILD_WAR_COOLDOWN_DONE_CMD((CGuild *)this, pCmd);
  if ( result )
  {
    CGuildWar::Del(
      (CGuildWar *)&v2->baseclass_40.baseclass_0.m_Guild.sNotify[449],
      (unsigned int)v2->baseclass_0.baseclass_8.m_pkMsgHooker);
    result = 1;
  }
  return result;
}

//----- (006BBF00) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_TYPE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_TYPE_CMD *pkCmd)
{
  char v2; // al@1
  GuildTask *v3; // esi@1
  unsigned int v4; // edi@2

  v2 = pkCmd->nMatchType;
  v3 = this;
  if ( pkCmd->nMatchType != 11 )
  {
    v4 = (unsigned __int8)v2;
    if ( v2 == 1 )
      CGuildTournament::Clear(&this->baseclass_40.m_GuildTournament);
    GuildTournamentScheduleWin::SetGuildTournamentMatchType(v3->m_pkGuildTournamentScheduleWin, v4);
  }
  return 0;
}

//----- (006BBF40) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_GRADE_CMD(GuildTask *this, PROTO_NC_GUILD_GRADE_CMD *pCmd)
{
  BYTE1(this->baseclass_0.m_kChildTaskList.baseclass_0.baseclass_0.m_pkTail) = pCmd->Grade;
  return 1;
}

//----- (006BBF60) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_SKILLPOINT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_SKILLPOINT_CMD *pkCmd)
{
  GuildTask *v2; // esi@1

  v2 = this;
  if ( pkCmd )
  {
    if ( this->m_pkGTTMiniSkillWin
      && !(unsigned __int8)((int (*)(void))this->m_pkGTTSkillWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGTTMiniSkillWin->baseclass_0.baseclass_0.baseclass_0);
    GTTSkillWin::SetSkillPoint(v2->m_pkGTTSkillWin, pkCmd->wSkillPoint);
    GTTMiniSkillWin::SetSkillPoint(v2->m_pkGTTMiniSkillWin, pkCmd->wSkillPoint);
  }
  return 0;
}

//----- (006BBFD0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_SCORE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_SCORE_CMD *pkCmd)
{
  PROTO_NC_GUILD_TOURNAMENT_SCORE_CMD *v2; // esi@1
  GuildTask *v3; // edi@1
  signed int v4; // ebx@3
  unsigned int v6; // eax@9
  unsigned int v7; // ebx@11
  TOURNAMENT_PLAYER_SCORE *pkCmda; // [sp+10h] [bp+8h]@4
  TOURNAMENT_PLAYER_SCORE *pkCmdb; // [sp+10h] [bp+8h]@12

  v2 = pkCmd;
  v3 = this;
  if ( pkCmd )
  {
    if ( pkCmd->PartMask == 1 )
    {
      GTStatusMiniWin::Clear(this->m_pkGTStatusMiniWin);
      GTStatusWin::Clear(v3->m_pkGTStatusWin);
      v4 = 0;
      if ( (signed int)pkCmd->unPlayerNum > 0 )
      {
        pkCmda = (TOURNAMENT_PLAYER_SCORE *)&pkCmd[1];
        do
        {
          GTStatusMiniWin::SetGTStatus(v3->m_pkGTStatusMiniWin, v2);
          GTStatusWin::SetRankInfo(v3->m_pkGTStatusWin, pkCmda, v2->regNumber);
          GTStatusWin::SetGuildInfo(v3->m_pkGTStatusWin, v2->regNumber, v2->unAllScore);
          ++pkCmda;
          ++v4;
        }
        while ( v4 < (signed int)v2->unPlayerNum );
      }
      if ( !(unsigned __int8)((int (*)(void))v3->m_pkGTStatusWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkGTStatusMiniWin->baseclass_0.baseclass_0.baseclass_0);
        return 0;
      }
    }
    else
    {
      if ( !pkCmd->PartMask )
      {
        v6 = pkCmd->unPlayerNum;
        if ( v6 )
        {
          v7 = 0;
          if ( v6 )
          {
            pkCmdb = (TOURNAMENT_PLAYER_SCORE *)&pkCmd[1];
            do
            {
              GTStatusMiniWin::SetGTStatus(v3->m_pkGTStatusMiniWin, v2);
              GTStatusWin::SetRankInfo(v3->m_pkGTStatusWin, pkCmdb, v2->regNumber);
              GTStatusWin::SetGuildInfo(v3->m_pkGTStatusWin, v2->regNumber, v2->unAllScore);
              ++pkCmdb;
              ++v7;
            }
            while ( v7 < v2->unPlayerNum );
          }
        }
        else
        {
          GTStatusMiniWin::SetGTStatus(this->m_pkGTStatusMiniWin, pkCmd);
          GTStatusWin::SetGuildInfo(v3->m_pkGTStatusWin, pkCmd->regNumber, pkCmd->unAllScore);
        }
        if ( !(unsigned __int8)((int (*)(void))v3->m_pkGTStatusWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
          PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkGTStatusMiniWin->baseclass_0.baseclass_0.baseclass_0);
      }
    }
  }
  return 0;
}

//----- (006BC130) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_END_TIME(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_BEFORE_END_TIME_MSG_CMD *pkTime)
{
  if ( pkTime && pkTime->unEndTime == 5 )
    GTTDiceWin::SetCount(this->m_pkGTTDiceWin, 1);
  return 0;
}

//----- (006BC160) --------------------------------------------------------
void __thiscall GuildTournamentImprove::Init(GuildTournamentImprove *this)
{
  this->m_uiGTTType = -1;
  this->m_DiceInfo.AGuild = 0;
  this->m_DiceInfo.AGuildDelegate = -1;
  this->m_GTTScore.AGuild = 0;
  this->m_GTTScore.AGuildScore = 0;
  this->m_DiceInfo.BGuild = 0;
  this->m_DiceInfo.BGuildDelegate = -1;
  this->m_GTTScore.BGuild = 0;
  this->m_GTTScore.BGuildScore = 0;
  this->m_RedTeam = 0;
  this->m_BlueTeam = 0;
}

//----- (006BC190) --------------------------------------------------------
char *__thiscall CClientGuild::FindGttEnemyInfo(CClientGuild *this, unsigned int RegNo)
{
  CClientGuild *v2; // esi@1
  unsigned int v3; // ecx@1
  char *result; // eax@1
  int v5; // edx@2
  int v6; // ecx@6
  int v7; // edx@6
  int v8; // ecx@6
  int v9; // edx@6
  int v10; // ecx@6
  char v11; // dl@7
  char acGuildName[17]; // [sp+8h] [bp-18h]@6
  unsigned int v13; // [sp+1Ch] [bp-4h]@1
  int v14; // [sp+20h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v2 = this;
  v3 = 0;
  result = v2->m_acGuildName;
  *(_DWORD *)&v2->m_acGuildName[0] = 0;
  *(_DWORD *)&v2->m_acGuildName[4] = 0;
  *(_DWORD *)&v2->m_acGuildName[8] = 0;
  *(_DWORD *)&v2->m_acGuildName[12] = 0;
  *(_DWORD *)&v2->m_acGuildName[16] = 0;
  *(_DWORD *)&v2->m_acGuildName[20] = 0;
  *(_DWORD *)&v2->m_acGuildName[24] = 0;
  *(_DWORD *)&v2->m_acGuildName[28] = 0;
  if ( RegNo )
  {
    v5 = (int)&v2->m_GuildTournament.m_TournamentList[0].baseclass_0.nGuildNo;
    while ( *(_DWORD *)v5 != RegNo )
    {
      ++v3;
      v5 += 21;
      if ( v3 >= 0x1F )
        goto LABEL_5;
    }
    v6 = v3;
    v7 = *(_DWORD *)&v2->m_GuildTournament.m_TournamentList[v6].sGuildName.n4_name[0];
    v8 = (int)&v2->m_GuildTournament.m_TournamentList[v6].sGuildName;
    *(_DWORD *)acGuildName = v7;
    *(_DWORD *)&acGuildName[4] = *(_DWORD *)(v8 + 4);
    v9 = *(_DWORD *)(v8 + 8);
    *(_DWORD *)&acGuildName[12] = *(_DWORD *)(v8 + 12);
    v10 = (int)acGuildName;
    *(_DWORD *)&acGuildName[8] = v9;
    acGuildName[16] = 0;
    do
    {
      v11 = *(_BYTE *)v10;
      *(_BYTE *)(result - acGuildName + v10) = *(_BYTE *)v10;
      ++v10;
    }
    while ( v11 );
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006BC240) --------------------------------------------------------
void __cdecl GuildTask::SetListRefreshEnable(bool bEnable)
{
  if ( GuildTask::ms_spGuildTask )
    *(_BYTE *)(GuildTask::ms_spGuildTask + 3008) = bEnable;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC260) --------------------------------------------------------
float __cdecl GuildTask::GetPassedTimeSinceRefresh()
{
  float v0; // ST00_4@2
  double v1; // st7@2
  float result; // st7@4

  if ( GuildTask::ms_spGuildTask )
  {
    v0 = Timer::ms_fCurTime - *(float *)(GuildTask::ms_spGuildTask + 3004);
    v1 = v0;
  }
  else
  {
    v1 = 0.0;
  }
  LODWORD(result) = LODWORD(v1);
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC290) --------------------------------------------------------
void __cdecl GuildTask::Terminate()
{
  int v0; // esi@1

  v0 = GuildTask::ms_spGuildTask;
  if ( GuildTask::ms_spGuildTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(GuildTask::ms_spGuildTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    GuildTask::ms_spGuildTask = 0;
  }
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC2D0) --------------------------------------------------------
CClientGuild *__cdecl GuildTask::GetGuild()
{
  CClientGuild *result; // eax@2

  if ( GuildTask::ms_spGuildTask )
    result = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
  else
    result = 0;
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC2E0) --------------------------------------------------------
GuildNpcMenuWin *__cdecl GuildTask::GetGuildNpcMenuWin()
{
  return *(GuildNpcMenuWin **)(GuildTask::ms_spGuildTask + 2844);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC2F0) --------------------------------------------------------
GuildMasterMenuWin *__cdecl GuildTask::GetGuildMasterMenuWin()
{
  return GuildMenuWin::GetMasterMenuWin(*(GuildMenuWin **)(GuildTask::ms_spGuildTask + 2848));
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC300) --------------------------------------------------------
GuildTournamentBaseWin *__cdecl GuildTask::GetGuildTournamnetBaseWin()
{
  GuildTournamentBaseWin *result; // eax@2

  if ( GuildTask::ms_spGuildTask )
    result = *(GuildTournamentBaseWin **)(GuildTask::ms_spGuildTask + 2856);
  else
    result = 0;
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC320) --------------------------------------------------------
GuildTournamentScheduleWin *__cdecl GuildTask::GetGuildTournamentScheduleWin()
{
  return *(GuildTournamentScheduleWin **)(GuildTask::ms_spGuildTask + 2860);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC330) --------------------------------------------------------
GuildMenuWin *__cdecl GuildTask::GetGuildMenu()
{
  return *(GuildMenuWin **)(GuildTask::ms_spGuildTask + 2848);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC340) --------------------------------------------------------
GuildSelectWin *__cdecl GuildTask::GetGuildSelectWin()
{
  return *(GuildSelectWin **)(GuildTask::ms_spGuildTask + 2852);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC350) --------------------------------------------------------
GuildTournamentStorageWin *__cdecl GuildTask::GetGuildTournamentStorageWin()
{
  return *(GuildTournamentStorageWin **)(GuildTask::ms_spGuildTask + 2864);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC360) --------------------------------------------------------
void __cdecl GuildTask::SetListReq(bool b)
{
  *(_BYTE *)(GuildTask::ms_spGuildTask + 3009) = b;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC380) --------------------------------------------------------
GTTDiceWin *__cdecl GuildTask::GetGTTDiceWin()
{
  return *(GTTDiceWin **)(GuildTask::ms_spGuildTask + 2868);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC390) --------------------------------------------------------
GTTSkillWin *__cdecl GuildTask::GetGTTSkillWin()
{
  return *(GTTSkillWin **)(GuildTask::ms_spGuildTask + 2872);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC3A0) --------------------------------------------------------
GTTMiniSkillWin *__cdecl GuildTask::GetGTTMiniSkillWin()
{
  return *(GTTMiniSkillWin **)(GuildTask::ms_spGuildTask + 2876);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC3B0) --------------------------------------------------------
GuildTournamentImprove *__cdecl GuildTask::GetGuildTournamentImprove()
{
  return (GuildTournamentImprove *)(GuildTask::ms_spGuildTask + 2888);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC3C0) --------------------------------------------------------
GTIFlagWin *__cdecl GuildTask::GetGTIMyFlagWin()
{
  GTIFlagWin *result; // eax@2

  if ( !GuildTask::ms_spGuildTask || (result = *(GTIFlagWin **)(GuildTask::ms_spGuildTask + 2988)) == 0 )
    result = 0;
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC3E0) --------------------------------------------------------
GTIFlagWin *__cdecl GuildTask::GetGTIEnemyFlagWin()
{
  GTIFlagWin *result; // eax@2

  if ( !GuildTask::ms_spGuildTask || (result = *(GTIFlagWin **)(GuildTask::ms_spGuildTask + 2992)) == 0 )
    result = 0;
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC400) --------------------------------------------------------
void __thiscall GuildTask::OnStart(GuildTask *this)
{
  GuildTask *v1; // esi@1
  GuildNpcMenuWin *v2; // eax@1
  GuildTournamentStorageWin *v3; // eax@1
  int v4; // ecx@1
  PgFrameWork *v5; // eax@1
  GameFrameWork *v6; // ebx@1
  char *v7; // eax@5
  NiNode *v8; // eax@5
  NiNode *v9; // ebx@5
  char *v10; // eax@15
  NiNode *v11; // eax@15
  NiNode *v12; // ebx@15
  char *v13; // eax@25
  NiNode *v14; // eax@25
  NiNode *v15; // ebx@25
  GuildMenuWin *v16; // eax@33
  GuildSelectWin *v17; // eax@33
  void *v18; // eax@33
  ITask *v19; // eax@34
  NiNode *v20; // [sp+0h] [bp-10h]@5
  NiNode *v21; // [sp+0h] [bp-10h]@15
  NiNode *v22; // [sp+0h] [bp-10h]@25

  v1 = this;
  v2 = GuildNpcMenuWin::CreateWin(0);
  v1->m_pkGuildNpcMenuWin = v2;
  ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v1->m_pkGuildTournamentBaseWin = GuildTournamentBaseWin::CreateWin(0);
  v1->m_pkGuildTournamentScheduleWin = GuildTournamentScheduleWin::CreateWin(0);
  v3 = GuildTournamentStorageWin::CreateWin(0);
  v4 = (int)&v1->m_pkGuildTournamentBaseWin->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  v1->m_pkGuildTournamentStorageWin = v3;
  (**(void (__stdcall ***)(_DWORD))v4)(&v1->baseclass_0.baseclass_8);
  v1->m_pkGuildTournamentScheduleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v1->m_pkGuildTournamentScheduleWin->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    &v1->baseclass_0.baseclass_8);
  v1->m_pkGuildTournamentStorageWin->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
    &v1->m_pkGuildTournamentStorageWin->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
    &v1->baseclass_0.baseclass_8);
  v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v6 = (GameFrameWork *)v5;
  if ( v5 )
  {
    GameFrameWork::SetAutoCloseWin(
      (GameFrameWork *)v5,
      &v1->m_pkGuildTournamentBaseWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(v6, &v1->m_pkGuildTournamentScheduleWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(v6, &v1->m_pkGuildTournamentStorageWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(v6, &v1->m_pkGuildNpcMenuWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v1->m_pkGTTDiceWin = GTTDiceWin::CreateWin(0);
  v1->m_pkGTTSkillWin = GTTSkillWin::CreateWin(0);
  v1->m_pkGTTMiniSkillWin = GTTMiniSkillWin::CreateWin(0);
  v1->m_pkGTStatusWin = GTStatusWin::CreateWin(0);
  v1->m_pkGTStatusMiniWin = GTStatusMiniWin::CreateWin(0);
  if ( !Folder::m_bInit )
    Folder::Init();
  v7 = Folder::Merge(&Folder::m_acEffect, "GuildTStart.nif");
  v8 = Ns_LoadNifFile(v7, 0);
  v9 = v1->m_pGTStartEffect.m_pObject;
  v20 = v8;
  if ( v9 != v8 )
  {
    if ( v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v9 )
        v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      v8 = v20;
    }
    v1->m_pGTStartEffect.m_pObject = v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v10 = Folder::Merge(&Folder::m_acEffect, "GuildTWin.nif");
  v11 = Ns_LoadNifFile(v10, 0);
  v12 = v1->m_pGTWinEffect.m_pObject;
  v21 = v11;
  if ( v12 != v11 )
  {
    if ( v12 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v12 )
        v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      v11 = v21;
    }
    v1->m_pGTWinEffect.m_pObject = v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( !Folder::m_bInit )
    Folder::Init();
  v13 = Folder::Merge(&Folder::m_acEffect, "GuildTLose.nif");
  v14 = Ns_LoadNifFile(v13, 0);
  v15 = v1->m_pGTLoseEffect.m_pObject;
  v22 = v14;
  if ( v15 != v14 )
  {
    if ( v15 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v15 )
        v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      v14 = v22;
    }
    v1->m_pGTLoseEffect.m_pObject = v14;
    if ( v14 )
      InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v1->m_pkGTIBlueFlagWin = GTIFlagWin::CreateWin(0, 0);
  v1->m_pkGTIRedFlagWin = GTIFlagWin::CreateWin(0, 1u);
  v16 = GuildMenuWin::CreateWin(0);
  v1->m_pkGuildMenuWin = v16;
  ((void (__stdcall *)(_DWORD))v16->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v17 = GuildSelectWin::CreateWin(0);
  v1->m_pkGuildSelectWin = v17;
  ((void (__stdcall *)(_DWORD))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v1->m_eState = 0;
  v18 = operator new(0xAC58u);
  if ( v18 )
    GuildMemberTask::GuildMemberTask((GuildMemberTask *)v18);
  else
    v19 = 0;
  ITask::AttachChildTask(&v1->baseclass_0, v19);
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006BC740) --------------------------------------------------------
void __thiscall GuildTask::OnIdle(GuildTask *this, float fTime)
{
  GuildTask *v2; // esi@1

  v2 = this;
  if ( this->baseclass_40.baseclass_0.m_bIsGuild && this->m_bListRefreshEnable )
  {
    if ( fTime - this->m_fPrevRefreshTime > 10.0 )
    {
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x26u, 0, 0);
      v2->m_fPrevRefreshTime = fTime;
    }
  }
}

//----- (006BC790) --------------------------------------------------------
void __thiscall GuildTask::DirectMessage(GuildTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildTask *v4; // esi@1
  void *v5; // edi@13
  void *v6; // [sp-Ch] [bp-10h]@16
  int v7; // [sp-8h] [bp-Ch]@16

  v4 = this;
  switch ( iMsgTag )
  {
    case 44:
      if ( *(_WORD *)pvBody == 29 && *((_WORD *)pvBody + 1) == 5 )
      {
        if ( !this->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail )
        {
          NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 5u, *((void **)pvBody + 1), *((_DWORD *)pvBody + 2));
          v4->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<GUILD_HISTORY *> *)1;
        }
      }
      return;
    case 43:
      GuildMenuWin::OpenMasterMenuWin((GuildMenuWin *)this->m_eState);
      return;
    case 42:
      PgWinMgr::ShowWin(&Pgg_kWinMgr, (PgWin *)this->m_eState);
      return;
    case 47:
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &this->m_pkGuildNpcMenuWin->baseclass_0.baseclass_0.baseclass_0);
      return;
    case 45:
      if ( this->baseclass_0.baseclass_0.m_uiRefCount )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)this->baseclass_0.baseclass_0.m_uiRefCount + 4))(
          45,
          0,
          this);
        if ( v4->baseclass_0.baseclass_0.m_uiRefCount )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v4->baseclass_0.baseclass_0.m_uiRefCount + 20))(
            45,
            0,
            v4);
      }
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD, _DWORD))v4->baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(
        v4,
        45,
        0,
        v4);
      return;
    case 27:
      v5 = pvBody;
      if ( !BYTE2(this->m_spGuildNameCache.m_pObject) || !pvBody )
        goto LABEL_20;
      if ( *(_DWORD *)pvBody )
      {
        if ( *(_DWORD *)pvBody != 1 )
          goto LABEL_20;
        v7 = 1;
        BYTE3(pvBody) = 0;
        v6 = (char *)&pvBody + 3;
      }
      else
      {
        v7 = 1;
        BYTE3(pvBody) = 1;
        v6 = (char *)&pvBody + 3;
      }
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x1Du, 0x9Cu, v6, v7);
      BYTE2(v4->m_spGuildNameCache.m_pObject) = 0;
LABEL_20:
      if ( LOBYTE(v4->m_pGTWinEffect.m_pObject) && v5 && !*(_DWORD *)v5 )
      {
        NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0xB9u, 0, 0);
        LOBYTE(v4->m_pGTWinEffect.m_pObject) = 0;
      }
      return;
    default:
      return;
  }
}

//----- (006BC930) --------------------------------------------------------
int __cdecl GuildTask::InvalidateGuildWindow()
{
  int v0; // esi@1

  v0 = GuildTask::ms_spGuildTask + 8;
  if ( *(_DWORD *)(GuildTask::ms_spGuildTask + 12) )
  {
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(GuildTask::ms_spGuildTask + 12) + 4))(
      41,
      0,
      GuildTask::ms_spGuildTask + 8);
    if ( *(_DWORD *)(v0 + 4) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v0 + 4) + 20))(41, 0, v0);
  }
  return (*(int (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v0 + 20))(v0, 41, 0, v0);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BC980) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_WAR_END_CMD(GuildTask *this, PROTO_NC_GUILD_WAR_END_CMD *pCmd)
{
  CGuild *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = (CGuild *)this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GuildWarKillCountWin::SetText((GuildWarKillCountWin *)v3[29].baseclass_0.m_uiMessageNum, 0.2, &pcText1, &pcText2);
  return CGuild::Recv_NC_GUILD_WAR_END_CMD(v2, pCmd) != 0;
}

//----- (006BC9D0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_LIST_ACK(GuildTask *this, int iRevBytes, void *pvData)
{
  int v3; // eax@1
  GuildTask *v4; // esi@1
  int v5; // ecx@2
  char *v6; // eax@2
  signed int v7; // edx@2
  char *v9; // esi@9
  char *v10; // edi@9
  char *v11; // esi@13

  v3 = *(_WORD *)pvData;
  v4 = this;
  if ( (_WORD)v3 == 3392 )
  {
    CGuildTournament::Clear(&this->baseclass_40.m_GuildTournament);
    v4->baseclass_40.m_GuildTournament.m_Time_Start = *(_DWORD *)((char *)pvData + 2);
    v4->baseclass_40.m_GuildTournament.m_Time_Practic = *(_DWORD *)((char *)pvData + 6);
    v4->baseclass_40.m_GuildTournament.m_Time_PracticEnd = *(_DWORD *)((char *)pvData + 10);
    v4->baseclass_40.m_GuildTournament.m_Time_Match_161 = *(_DWORD *)((char *)pvData + 14);
    v4->baseclass_40.m_GuildTournament.m_Time_Match_162 = *(_DWORD *)((char *)pvData + 18);
    v4->baseclass_40.m_GuildTournament.m_Time_Match_8 = *(_DWORD *)((char *)pvData + 22);
    v4->baseclass_40.m_GuildTournament.m_Time_Match_4 = *(_DWORD *)((char *)pvData + 26);
    v4->baseclass_40.m_GuildTournament.m_Time_Match_2 = *(_DWORD *)((char *)pvData + 30);
    v4->baseclass_40.m_GuildTournament.m_Time_Match_End = *(_DWORD *)((char *)pvData + 34);
    v5 = (int)&v4->baseclass_40.m_GuildTournament.m_TournamentList[0].sGuildName.n4_name[8];
    v6 = (char *)pvData + 376;
    v7 = 31;
    do
    {
      *(_DWORD *)(v5 - 12) = *((_DWORD *)v6 - 3);
      *(_BYTE *)(v5 - 13) = *(v6 - 13);
      *(_DWORD *)(v5 - 8) = *((_DWORD *)v6 - 2);
      *(_DWORD *)(v5 - 4) = *((_DWORD *)v6 - 1);
      *(_DWORD *)v5 = *(_DWORD *)v6;
      *(_DWORD *)(v5 + 4) = *((_DWORD *)v6 + 1);
      v6 += 21;
      v5 += 21;
      --v7;
    }
    while ( v7 );
    GuildTournamentScheduleWin::ClearList(v4->m_pkGuildTournamentScheduleWin);
    GuildTournamentScheduleWin::SetGuildTournamentMatchType(
      v4->m_pkGuildTournamentScheduleWin,
      *((_BYTE *)pvData + 362));
    if ( GuildTournamentScheduleWin::SetGuildTournamentList(
           v4->m_pkGuildTournamentScheduleWin,
           (PROTO_NC_GUILD_TOURNAMENT_LIST_ACK *)pvData) )
    {
      if ( v4->m_bListReq )
      {
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v4->m_pkGuildTournamentScheduleWin->baseclass_0.baseclass_0.baseclass_0);
        v4->m_bListReq = 0;
      }
      return 1;
    }
    return 0;
  }
  if ( v3 == 3393 )
  {
    v11 = (char *)&this->baseclass_0.baseclass_8;
    if ( this->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))this->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        "DB Get Error",
        &this->baseclass_0.baseclass_8);
      if ( *((_DWORD *)v11 + 1) )
        (*(void (__stdcall **)(signed int, _DWORD, char *))(**((_DWORD **)v11 + 1) + 20))(25, "DB Get Error", v11);
    }
    (*(void (__thiscall **)(char *, signed int, _DWORD, char *))(*(_DWORD *)v11 + 20))(v11, 25, "DB Get Error", v11);
    return 0;
  }
  v9 = (char *)&this->baseclass_0.baseclass_8;
  v10 = fs("Error : %d\n");
  if ( *((_DWORD *)v9 + 1) )
  {
    (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v9 + 1) + 4))(25, v10, v9);
    if ( *((_DWORD *)v9 + 1) )
      (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v9 + 1) + 20))(25, v10, v9);
  }
  (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
  return 0;
}

//----- (006BCB90) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENTSTOP_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENTSTOP_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  PgWin *v3; // esi@7

  v2 = this;
  this->baseclass_40.m_GttEnemyInfo.uiStatus = 1;
  this->baseclass_40.m_GttEnemyInfo.GuildRegNo = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[0] = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[4] = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[8] = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[12] = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[16] = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[20] = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[24] = 0;
  *(_DWORD *)&this->baseclass_40.m_GttEnemyInfo.acGuildName[28] = 0;
  if ( this->m_pkGTTMiniSkillWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->m_pkGTTMiniSkillWin->baseclass_0.baseclass_0.baseclass_0);
  if ( v2->m_pkGTTSkillWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkGTTSkillWin->baseclass_0.baseclass_0.baseclass_0);
  v2->m_GuildTournamentImprove.m_uiGTTType = -1;
  v2->m_GuildTournamentImprove.m_DiceInfo.AGuild = 0;
  v2->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegate = -1;
  v2->m_GuildTournamentImprove.m_GTTScore.AGuild = 0;
  v2->m_GuildTournamentImprove.m_GTTScore.AGuildScore = 0;
  v2->m_GuildTournamentImprove.m_DiceInfo.BGuild = 0;
  v2->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegate = -1;
  v2->m_GuildTournamentImprove.m_GTTScore.BGuild = 0;
  v2->m_GuildTournamentImprove.m_GTTScore.BGuildScore = 0;
  v2->m_GuildTournamentImprove.m_RedTeam = 0;
  v2->m_GuildTournamentImprove.m_BlueTeam = 0;
  GTStatusWin::EndGame(v2->m_pkGTStatusWin, 0);
  GTStatusMiniWin::EndGame(v2->m_pkGTStatusMiniWin, 0);
  if ( v2->m_pkGTIBlueFlagWin )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v2->m_pkGTIBlueFlagWin->baseclass_0.baseclass_0.baseclass_0);
  v3 = (PgWin *)v2->m_pkGTIRedFlagWin;
  if ( v3 )
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  return 0;
}

//----- (006BCCA0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_RENAME_ACK(GuildTask *this, PROTO_NC_GUILD_RENAME_ACK *pkAck)
{
  int v2; // eax@1
  char *v3; // esi@2
  char *v4; // edi@2

  v2 = pkAck->err;
  if ( 6720 != (_WORD)v2 )
  {
    v3 = (char *)&this->baseclass_0.baseclass_8;
    v4 = ErrMsgTable::GetErrMsg(v2);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
  return 1;
}

//----- (006BCD10) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_RETYPE_CMD(GuildTask *this, PROTO_NC_GUILD_RETYPE_CMD *pkCmd)
{
  int v2; // edx@2
  int v3; // eax@6
  char *v4; // esi@8

  if ( GuildTask::ms_spGuildTask )
    v2 = GuildTask::ms_spGuildTask + 64;
  else
    v2 = 0;
  if ( *(_DWORD *)(v2 + 12) == pkCmd->nGuildNo )
  {
    if ( GuildTask::ms_spGuildTask )
      v3 = GuildTask::ms_spGuildTask + 64;
    else
      v3 = 0;
    v4 = (char *)&this->baseclass_0.baseclass_8;
    *(_BYTE *)(v3 + 40) = pkCmd->nType;
    if ( this->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        41,
        0,
        v4);
      if ( *((_DWORD *)v4 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v4 + 1) + 20))(41, 0, v4);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 41, 0, v4);
  }
  return 1;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BCD90) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_USESKILL_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_USESKILL_ACK *pkAck)
{
  int v2; // eax@2
  char *v4; // esi@4
  char *v5; // edi@4

  if ( pkAck )
  {
    v2 = pkAck->err;
    if ( (_WORD)v2 == 6976 )
    {
      GTTSkillWin::StartCoolTime(this->m_pkGTTSkillWin, pkAck->wUseSkillNumber);
      return 0;
    }
    v4 = (char *)&this->baseclass_0.baseclass_8;
    v5 = ErrMsgTable::GetErrMsg(v2);
    if ( *((_DWORD *)v4 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v4 + 1) + 4))(25, v5, v4);
      if ( *((_DWORD *)v4 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v4 + 1) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  }
  return 0;
}

//----- (006BCE10) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_THROW_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_THROW_ACK *pkAck)
{
  int v2; // eax@2
  char *v3; // esi@3
  char *v4; // edi@3

  if ( pkAck )
  {
    v2 = pkAck->err;
    if ( (_WORD)v2 != 6976 )
    {
      v3 = (char *)&this->baseclass_0.baseclass_8;
      v4 = ErrMsgTable::GetErrMsg(v2);
      if ( *((_DWORD *)v3 + 1) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
        if ( *((_DWORD *)v3 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
    }
  }
  return 0;
}

//----- (006BCE80) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_THROW_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_THROW_CMD *pkCmd)
{
  GTTDiceWin *v2; // ecx@6
  int result; // eax@7

  if ( pkCmd )
  {
    if ( this->m_GuildTournamentImprove.m_DiceInfo.AGuild == pkCmd->GuildRegNumber )
    {
      this->m_GuildTournamentImprove.m_GTTScore.AGuild = pkCmd->GuildRegNumber;
      this->m_GuildTournamentImprove.m_GTTScore.AGuildScore = pkCmd->unDiceGameResult;
    }
    if ( this->m_GuildTournamentImprove.m_DiceInfo.BGuild == pkCmd->GuildRegNumber )
    {
      this->m_GuildTournamentImprove.m_GTTScore.BGuild = pkCmd->GuildRegNumber;
      this->m_GuildTournamentImprove.m_GTTScore.BGuildScore = pkCmd->unDiceGameResult;
    }
    v2 = this->m_pkGTTDiceWin;
    if ( g_pkMainChar->m_dwGuildRegNum == pkCmd->GuildRegNumber )
    {
      GTTDiceWin::SetReseultDice(v2, 0, 0);
      result = 1;
    }
    else
    {
      GTTDiceWin::SetReseultDice(v2, 1u, 0);
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006BCF00) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_OBSERVER_ENTER_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_OBSERVER_ENTER_ACK *pkAck)
{
  GuildTask *v2; // esi@1
  int v3; // ecx@2
  PgFrameWork *v4; // eax@3
  int v6; // esi@5
  char *v7; // edi@5

  v2 = this;
  if ( pkAck )
  {
    v3 = pkAck->err;
    if ( (_WORD)v3 == 6976 )
    {
      v2->baseclass_40.m_bOpserver = 1;
      v2->baseclass_40.m_iGTObserverSeedNum = pkAck->nTournamentSeed;
      v2->m_GuildTournamentImprove.m_RedTeam = pkAck->nGuildRed;
      v2->m_GuildTournamentImprove.m_BlueTeam = pkAck->nGuildBlue;
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
      {
        MiniMapWin::ShowGTQuit(*(MiniMapWin **)&v4[15].m_bInit, 1);
        return 0;
      }
    }
    else
    {
      v6 = (int)&v2->baseclass_0.baseclass_8;
      v7 = ErrMsgTable::GetErrMsg(v3);
      if ( *(_DWORD *)(v6 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
        if ( *(_DWORD *)(v6 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
    }
  }
  return 0;
}

//----- (006BCFC0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_ACK *pkAck)
{
  int v2; // eax@1
  char *v3; // esi@2
  char *v4; // edi@2

  v2 = pkAck->err;
  if ( (_WORD)v2 != 6976 )
  {
    v3 = (char *)&this->baseclass_0.baseclass_8;
    v4 = ErrMsgTable::GetErrMsg(v2);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
  return 0;
}

//----- (006BD030) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_MY_GUILD_TOKEN_INFO_ACK(GuildTask *this, PROTO_NC_GUILD_MY_GUILD_TOKEN_INFO_ACK *pkAck)
{
  int result; // eax@3
  char *v3; // esi@4
  char *v4; // edi@4

  if ( pkAck && pkAck->Error == 3137 )
  {
    this->baseclass_40.m_iGuildToken = pkAck->nGuildToken;
    GuildTournamentStorageWin::SetToken(this->m_pkGuildTournamentStorageWin, pkAck->nGuildToken);
    result = 0;
  }
  else
  {
    v3 = (char *)&this->baseclass_0.baseclass_8;
    v4 = ErrMsgTable::GetErrMsg(pkAck->Error);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
    result = 0;
  }
  return result;
}

//----- (006BD0D0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_CMD *pkCmd)
{
  int v2; // eax@2
  Char *v3; // eax@4
  char *v5; // esi@6
  char *v6; // edi@6
  Char *v7; // eax@10

  if ( !pkCmd )
    return 0;
  v2 = pkCmd->err;
  if ( (_WORD)v2 == 6976 )
  {
    v7 = CharMgr::GetChar(&g_kCharMgr, pkCmd->hPlayer);
    if ( v7 )
      Char::ActFlagCapture(v7);
    return 0;
  }
  if ( (_WORD)v2 == 6993 )
  {
    v3 = CharMgr::GetChar(&g_kCharMgr, pkCmd->hPlayer);
    if ( v3 )
    {
      Char::StopFlagCapture(v3);
      return 0;
    }
    return 0;
  }
  v5 = (char *)&this->baseclass_0.baseclass_8;
  v6 = ErrMsgTable::GetErrMsg(v2);
  if ( *((_DWORD *)v5 + 1) )
  {
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 4))(25, v6, v5);
    if ( *((_DWORD *)v5 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 20))(25, v6, v5);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
  return 0;
}

//----- (006BD190) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_OBSERVER_OUT_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_OBSERVER_OUT_ACK *pkAck)
{
  int v2; // eax@1
  char *v3; // esi@2
  char *v4; // edi@2

  v2 = pkAck->err;
  if ( (_WORD)v2 != 6976 )
  {
    v3 = (char *)&this->baseclass_0.baseclass_8;
    v4 = ErrMsgTable::GetErrMsg(v2);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
  return 0;
}

//----- (006BD200) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_STARTMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_STARTMSG_CMD *pkCmd)
{
  NiNode *v2; // eax@3
  float v3; // ST08_4@3

  if ( pkCmd && pkCmd->nStartBeforeTime == 5 )
  {
    v2 = this->m_pGTStartEffect.m_pObject;
    v3 = (double)(PgWin::ms_uiScreenWidth >> 1);
    v2->baseclass_0.m_kLocal.m_Translate.x = v3;
    v2->baseclass_0.m_kLocal.m_Translate.y = -500.0;
    v2->baseclass_0.m_kLocal.m_Translate.z = 0.0;
    PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &this->m_pGTStartEffect.m_pObject->baseclass_0);
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, "GuildTStart");
  }
  return 0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006BD290) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_WORLD_SET_GUILD_TOKEN_CMD(GuildTask *this, PROTO_NC_GUILD_WORLD_SET_GUILD_TOKEN_CMD *pkCmd)
{
  GuildTask *v2; // edi@1

  v2 = this;
  if ( pkCmd )
  {
    this->baseclass_40.m_iGuildToken = pkCmd->nRestGuildToken;
    if ( this->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        41,
        0,
        &this->baseclass_0.baseclass_8);
      if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          41,
          0,
          &v2->baseclass_0.baseclass_8);
    }
    v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v2->baseclass_0.baseclass_8,
      41,
      0,
      &v2->baseclass_0.baseclass_8);
    GuildTournamentStorageWin::SetToken(v2->m_pkGuildTournamentStorageWin, pkCmd->nRestGuildToken);
  }
  return 0;
}

//----- (006BD310) --------------------------------------------------------
GTStatusWin *__cdecl GuildTask::GetGTStatusWin()
{
  return *(GTStatusWin **)(GuildTask::ms_spGuildTask + 2880);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BD320) --------------------------------------------------------
GTStatusMiniWin *__cdecl GuildTask::GetGTStatusMiniWin()
{
  return *(GTStatusMiniWin **)(GuildTask::ms_spGuildTask + 2884);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BD330) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_JOIN_LIST_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_JOIN_LIST_ACK *pkAck)
{
  PROTO_NC_GUILD_TOURNAMENT_JOIN_LIST_ACK *v2; // edi@1
  GuildTask *v3; // esi@1
  signed int v4; // ebx@3
  GuildTournamentBaseWin *v5; // edx@6
  int result; // eax@8
  signed int v7; // ebx@9
  GTRequestListWin *v8; // ecx@14
  char *v9; // esi@16
  char *v10; // edi@16
  SHINE_GUILD_LIST_NEW *pkAcka; // [sp+10h] [bp+8h]@4
  SHINE_GUILD_LIST_NEW *pkAckb; // [sp+10h] [bp+8h]@10

  v2 = pkAck;
  v3 = this;
  if ( pkAck->Error == 7240 )
  {
    if ( pkAck->PartMask & 1 )
    {
      GTRequestListWin::Clear(this->m_pkGuildTournamentBaseWin->m_pkGTRequestListWin);
      v4 = 0;
      if ( pkAck->nJoinGuildNum > 0u )
      {
        pkAcka = (SHINE_GUILD_LIST_NEW *)&pkAck[1];
        do
        {
          GTRequestListWin::SetGuildList(v3->m_pkGuildTournamentBaseWin->m_pkGTRequestListWin, pkAcka, 0);
          ++pkAcka;
          ++v4;
        }
        while ( v4 < v2->nJoinGuildNum );
      }
    }
    else
    {
      v7 = 0;
      if ( pkAck->nJoinGuildNum > 0u )
      {
        pkAckb = (SHINE_GUILD_LIST_NEW *)&pkAck[1];
        do
        {
          GTRequestListWin::SetGuildList(v3->m_pkGuildTournamentBaseWin->m_pkGTRequestListWin, pkAckb, 0);
          ++pkAckb;
          ++v7;
        }
        while ( v7 < v2->nJoinGuildNum );
      }
    }
    v5 = v3->m_pkGuildTournamentBaseWin;
    if ( v5->m_pkGTRequestListWin )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v5->m_pkGTRequestListWin->baseclass_0.baseclass_0.baseclass_0);
    return 0;
  }
  if ( pkAck->Error == 7243 )
  {
    v8 = this->m_pkGuildTournamentBaseWin->m_pkGTRequestListWin;
    if ( !v8 )
      return 0;
    GTRequestListWin::ShowFormerList(v8);
    PgWinMgr::ShowWin(
      &Pgg_kWinMgr,
      &v3->m_pkGuildTournamentBaseWin->m_pkGTRequestListWin->baseclass_0.baseclass_0.baseclass_0);
    result = 0;
  }
  else
  {
    v9 = (char *)&this->baseclass_0.baseclass_8;
    v10 = ErrMsgTable::GetErrMsg(pkAck->Error);
    if ( *((_DWORD *)v9 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v9 + 1) + 4))(25, v10, v9);
      if ( *((_DWORD *)v9 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v9 + 1) + 20))(25, v10, v9);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
    result = 0;
  }
  return result;
}

//----- (006BD490) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_SCAN_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_SCAN_CMD *pkCmd)
{
  PROTO_NC_GUILD_TOURNAMENT_ITEM_SCAN_CMD *v2; // ebx@1
  PgFrameWork *v3; // eax@2
  signed int v4; // esi@4
  SHINE_XY_TYPE *v5; // edi@5
  int result; // eax@9
  PgFrameWork *pkGame; // [sp+Ch] [bp+8h]@2

  v2 = pkCmd;
  if ( pkCmd->nNum )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    pkGame = v3;
    if ( v3 )
      MiniMapWin::ClearGTEnemyPos(*(MiniMapWin **)&v3[15].m_bInit);
    v4 = 0;
    if ( v2->nNum <= 0u )
    {
      result = 0;
    }
    else
    {
      v5 = (SHINE_XY_TYPE *)&v2[1];
      do
      {
        if ( pkGame )
          MiniMapWin::AddGTEnemyPos(*(MiniMapWin **)&pkGame[15].m_bInit, *v5);
        ++v4;
        ++v5;
      }
      while ( v4 < v2->nNum );
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006BD510) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_INFO_CMD(GuildTask *this, PROTO_NC_GUILD_EMBLEM_INFO_CMD *pkCmd)
{
  int result; // eax@2
  PgFrameWork *v3; // eax@3
  GuildWin *v4; // ecx@4

  if ( pkCmd
    && (v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)) != 0
    && (v4 = (GuildWin *)v3[24].baseclass_0.vfptr) != 0 )
  {
    GuildWin::SetEmblem(v4, &pkCmd->EmblemInfo, pkCmd->EmblemState);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006BD560) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_DISMISS_CMD(GuildTask *this, PROTO_NC_GUILD_DISMISS_CMD *pkProto)
{
  int result; // eax@1
  char *v3; // eax@2
  int v4; // ecx@2
  int v5; // edx@2
  char *v6; // eax@2
  char acDateTime[32]; // [sp+4h] [bp-38h]@2
  char acGuildName[17]; // [sp+24h] [bp-18h]@2
  unsigned int v9; // [sp+38h] [bp-4h]@1
  int v10; // [sp+3Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  result = CGuild::Recv_NC_GUILD_DISMISS_CMD((CGuild *)this, pkProto);
  if ( result )
  {
    v3 = TextData2::Get(0x53404A7Au);
    strftime(acDateTime, 0x1Fu, v3, &pkProto->tm_dDismissDate);
    v4 = *(_DWORD *)&pkProto->Name.n4_name[8];
    v5 = *(_DWORD *)&pkProto->Name.n4_name[0];
    *(_DWORD *)&acGuildName[4] = *(_DWORD *)&pkProto->Name.n4_name[4];
    *(_DWORD *)&acGuildName[8] = v4;
    *(_DWORD *)acGuildName = v5;
    *(_DWORD *)&acGuildName[12] = *(_DWORD *)&pkProto->Name.n4_name[12];
    acGuildName[16] = 0;
    v6 = TextData::Get(0x3311999u);
    MsgBox::Modal(MSGBOX_OK, v6);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006BD600) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_WAR_ACK(GuildTask *this, PROTO_NC_GUILD_WAR_ACK *pkProto)
{
  signed int v2; // eax@1
  GuildTask *v3; // esi@1
  void *v4; // eax@10
  int result; // eax@10
  void *v6; // eax@11
  char *v7; // esi@15
  char *v8; // edi@15
  unsigned int v9; // [sp-Ch] [bp-10h]@5
  IDirectMessenger::DispatchTo v10; // [sp-8h] [bp-Ch]@5
  unsigned int v11; // [sp-8h] [bp-Ch]@12

  v2 = pkProto->Error;
  v3 = this;
  if ( (_WORD)v2 == 3137 )
    return 1;
  if ( v2 > 7104 )
  {
    if ( v2 == 7105 )
    {
      v11 = 1499684240;
LABEL_15:
      v7 = (char *)this - 56;
      v8 = TextData2::Get(v11);
      if ( *((_DWORD *)v7 + 1) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v7 + 1) + 4))(25, v8, v7);
        if ( *((_DWORD *)v7 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v7 + 1) + 20))(25, v8, v7);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
    }
    return 1;
  }
  if ( v2 == 7104 )
  {
    v11 = 52170156;
    goto LABEL_15;
  }
  switch ( v2 )
  {
    case 3369:
      v10 = 0;
      v9 = -263905212;
      goto LABEL_10;
    case 3368:
      v10 = 0;
      v9 = -313852025;
      goto LABEL_10;
    case 3364:
      v10 = 0;
      v9 = -509712759;
      goto LABEL_10;
    case 3362:
      v10 = 0;
      v9 = 1803776455;
      goto LABEL_10;
    case 3363:
      v10 = 0;
      v9 = -1394408389;
LABEL_10:
      v4 = TextData::Get(v9);
      IDirectMessenger::DirectDispatch((IDirectMessenger *)((char *)v3 - 56), 25, v4, v10);
      result = 1;
      break;
    case 3360:
    case 3361:
    case 3365:
    case 3366:
    case 3367:
      TextData::Get(0xF0452044u);
      v6 = fs("%s(%d)");
      IDirectMessenger::DirectDispatch((IDirectMessenger *)((char *)v3 - 56), 25, v6, 0);
      result = 1;
      break;
    default:
      return 1;
  }
  return result;
}

//----- (006BD750) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_WAR_ABLE_LIST_ACK(GuildTask *this, PROTO_NC_GUILD_WAR_ABLE_LIST_ACK *pAck)
{
  PROTO_NC_GUILD_WAR_ABLE_LIST_ACK *v2; // esi@1
  GuildTask *v3; // edi@1
  PgFrameWork *v4; // ebx@3
  char *v5; // eax@3
  PgFrameWork *v6; // ebx@5
  char *v7; // eax@5
  signed int v8; // ebx@6
  SHINE_GUILD_WAR_ABLE_INFO *v9; // edi@9
  CGuildWarAble *pAcka; // [sp+14h] [bp+8h]@9

  v2 = pAck;
  v3 = this;
  if ( pAck->Error != 12696 && pAck->Error != 3137 )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v5 = ErrMsgTable::GetErrMsg(pAck->Error);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
  }
  if ( pAck->Error == 3356 )
  {
    v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v7 = TextData3::Get(0x32D6F69u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v6, v7);
  }
  v8 = 0;
  if ( pAck->PartMask & 1 )
  {
    v3->baseclass_40.m_iTotalGuildWarAbleCount = 0;
    CGuildWarAble::Clear(&v3->baseclass_40.m_GuildWarAble);
  }
  v3->baseclass_40.m_iTotalGuildWarAbleCount += pAck->NumOfWarInfo;
  if ( pAck->NumOfWarInfo > 0u )
  {
    pAcka = &v3->baseclass_40.m_GuildWarAble;
    v9 = (SHINE_GUILD_WAR_ABLE_INFO *)&v2[1];
    do
    {
      CGuildWarAble::Add(pAcka, v9);
      ++v8;
      ++v9;
    }
    while ( v8 < v2->NumOfWarInfo );
  }
  return 1;
}

//----- (006BD830) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_JOIN_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_JOIN_ACK *pkProto)
{
  GuildTask *v2; // ebx@1
  char *v3; // esi@2
  char *v4; // edi@2
  char *v5; // edi@5
  int result; // eax@8
  void *v7; // eax@10
  signed int v8; // ecx@12
  char *v9; // edi@27
  char *v10; // edi@31
  char *v11; // edi@35
  char *v12; // edi@39
  char *v13; // edi@43
  char *v14; // edi@47
  char *v15; // edi@52
  unsigned int v16; // ebx@57
  int v17; // eax@59
  char v18; // cl@60
  char *v19; // eax@61
  const void *v20; // edx@61
  char v21; // cl@62
  unsigned int v22; // eax@63
  void *v23; // edi@63
  char v24; // cl@64
  char *v25; // edi@65
  char v26; // al@66
  unsigned int v27; // eax@69
  void *v28; // edi@69
  char v29; // cl@70
  char *v30; // eax@71
  char *v31; // ecx@71
  char v32; // dl@72
  unsigned int v33; // eax@73
  const void *v34; // esi@73
  void *v35; // edi@73
  char v36; // cl@74
  char *v37; // edi@75
  char v38; // al@76
  unsigned int v39; // eax@79
  void *v40; // edi@79
  char v41; // cl@80
  char *v42; // eax@81
  char *v43; // ecx@81
  char v44; // dl@82
  unsigned int v45; // eax@83
  const void *v46; // esi@83
  void *v47; // edi@83
  char v48; // cl@84
  char *v49; // edi@85
  char v50; // al@86
  unsigned int v51; // eax@89
  void *v52; // edi@89
  char v53; // cl@90
  char *v54; // eax@91
  char *v55; // ecx@91
  char v56; // dl@92
  unsigned int v57; // eax@93
  const void *v58; // esi@93
  void *v59; // edi@93
  char v60; // cl@94
  char *v61; // edi@95
  char v62; // al@96
  char *v63; // eax@98
  char *v64; // eax@98
  int v65; // esi@98
  char *v66; // eax@100
  char *v67; // edi@104
  GuildTask *v68; // [sp+Ch] [bp-208h]@1
  char acStr1[256]; // [sp+10h] [bp-204h]@57
  char acStr2[256]; // [sp+110h] [bp-104h]@57
  unsigned int v71; // [sp+210h] [bp-4h]@1
  int v72; // [sp+214h] [bp+0h]@1

  v71 = (unsigned int)&v72 ^ __security_cookie;
  v2 = this;
  v68 = this;
  if ( pkProto->nError == 7232 )
  {
    v3 = (char *)&this->baseclass_0.baseclass_8;
    v4 = TextData::Get(0x83CAC2CEu);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        46,
        v4,
        &v2->baseclass_0.baseclass_8);
      if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          46,
          v4,
          &v2->baseclass_0.baseclass_8);
    }
    (*(void (__thiscall **)(IDirectMessenger *, signed int, char *, IDirectMessenger *))(*(_DWORD *)v3 + 20))(
      &v2->baseclass_0.baseclass_8,
      46,
      v4,
      &v2->baseclass_0.baseclass_8);
    v5 = TextData::Get(0x83CAC2CEu);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v5,
        &v2->baseclass_0.baseclass_8);
      if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v5,
          &v2->baseclass_0.baseclass_8);
    }
    (*(void (__thiscall **)(IDirectMessenger *, signed int, char *, IDirectMessenger *))(*(_DWORD *)v3 + 20))(
      &v2->baseclass_0.baseclass_8,
      25,
      v5,
      &v2->baseclass_0.baseclass_8);
    result = 1;
  }
  else
  {
    if ( CDataReader::GetRecord((CDataReader *)(ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 4), 0) )
      v7 = CDataReader::GetRecord((CDataReader *)(ITableBase<GUILD_TOURNAMENT_REQUIRE_GTRequireTab>::ms_pkTable + 4), 0);
    else
      v7 = 0;
    v8 = pkProto->nError;
    if ( v8 > 7233 )
    {
      switch ( v8 )
      {
        case 7234:
          v15 = TextData::Get(0x76816B99u);
          if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
          {
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              25,
              v15,
              &v2->baseclass_0.baseclass_8);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
              ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                25,
                v15,
                &v2->baseclass_0.baseclass_8);
          }
          v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
            &v2->baseclass_0.baseclass_8,
            25,
            v15,
            &v2->baseclass_0.baseclass_8);
          goto LABEL_108;
        case 7236:
          if ( v7 )
          {
            v16 = *(_DWORD *)((char *)v7 + 3);
            memset(acStr1, 0, 0x100u);
            memset(acStr2, 0, 0x100u);
            if ( v16 )
            {
              if ( User::GetGem(v16) )
              {
                User::GetGem(v16);
                sprintf(acStr1, "%I64d");
                v17 = 0;
                do
                {
                  v18 = acStr1[v17];
                  acStr2[v17++] = v18;
                }
                while ( v18 );
                v19 = TextData::Get(0x475F9699u);
                v20 = v19;
                do
                  v21 = *v19++;
                while ( v21 );
                v22 = v19 - v20;
                v23 = &acStr1[255];
                do
                {
                  v24 = *((_BYTE *)v23 + 1);
                  v23 = (char *)v23 + 1;
                }
                while ( v24 );
                memcpy(v23, v20, v22);
                v25 = &acStr1[255];
                do
                  v26 = (v25++)[1];
                while ( v26 );
                *v25 = byte_9C9330;
              }
              if ( User::GetGold(v16) )
              {
                User::GetGold(v16);
                sprintf(acStr1, "%I64d");
                v27 = strlen(acStr1) + 1;
                v28 = &acStr1[255];
                do
                {
                  v29 = *((_BYTE *)v28 + 1);
                  v28 = (char *)v28 + 1;
                }
                while ( v29 );
                memcpy(v28, acStr1, v27);
                v30 = TextData::Get(0x47A395A3u);
                v31 = v30;
                do
                  v32 = *v30++;
                while ( v32 );
                v33 = v30 - v31;
                v34 = v31;
                v35 = &acStr1[255];
                do
                {
                  v36 = *((_BYTE *)v35 + 1);
                  v35 = (char *)v35 + 1;
                }
                while ( v36 );
                memcpy(v35, v34, v33);
                v37 = &acStr1[255];
                do
                  v38 = (v37++)[1];
                while ( v38 );
                *v37 = byte_9C933C;
              }
              if ( User::GetSilver(v16) )
              {
                User::GetSilver(v16);
                sprintf(acStr1, "%I64d");
                v39 = strlen(acStr1) + 1;
                v40 = &acStr1[255];
                do
                {
                  v41 = *((_BYTE *)v40 + 1);
                  v40 = (char *)v40 + 1;
                }
                while ( v41 );
                memcpy(v40, acStr1, v39);
                v42 = TextData::Get(0x98B595EFu);
                v43 = v42;
                do
                  v44 = *v42++;
                while ( v44 );
                v45 = v42 - v43;
                v46 = v43;
                v47 = &acStr1[255];
                do
                {
                  v48 = *((_BYTE *)v47 + 1);
                  v47 = (char *)v47 + 1;
                }
                while ( v48 );
                memcpy(v47, v46, v45);
                v49 = &acStr1[255];
                do
                  v50 = (v49++)[1];
                while ( v50 );
                *v49 = byte_9C9348;
              }
              if ( User::GetCopper(v16) )
              {
                User::GetCopper(v16);
                sprintf(acStr1, "%I64d");
                v51 = strlen(acStr1) + 1;
                v52 = &acStr1[255];
                do
                {
                  v53 = *((_BYTE *)v52 + 1);
                  v52 = (char *)v52 + 1;
                }
                while ( v53 );
                memcpy(v52, acStr1, v51);
                v54 = TextData::Get(0x88AF99F5u);
                v55 = v54;
                do
                  v56 = *v54++;
                while ( v56 );
                v57 = v54 - v55;
                v58 = v55;
                v59 = &acStr1[255];
                do
                {
                  v60 = *((_BYTE *)v59 + 1);
                  v59 = (char *)v59 + 1;
                }
                while ( v60 );
                memcpy(v59, v58, v57);
                v61 = &acStr1[255];
                do
                  v62 = (v61++)[1];
                while ( v62 );
                *v61 = byte_9C9354;
              }
            }
            v63 = TextData2::Get(0xC7F58A08u);
            v64 = fs(v63);
            v65 = (int)&v68->baseclass_0.baseclass_8;
            break;
          }
          goto LABEL_108;
        case 7237:
          if ( v7 )
          {
            v66 = TextData2::Get(0xC4F4D2F4u);
            v64 = fs(v66);
            v65 = (int)&v2->baseclass_0.baseclass_8;
            break;
          }
          goto LABEL_108;
        case 7238:
          v64 = TextData::Get(0x54A4ABA1u);
          v65 = (int)&v2->baseclass_0.baseclass_8;
          break;
        case 7239:
          v64 = TextData2::Get(0xA3E49BCCu);
          v65 = (int)&v2->baseclass_0.baseclass_8;
          break;
        default:
LABEL_103:
          v64 = fs("Error : %d\n");
          v65 = (int)&v2->baseclass_0.baseclass_8;
          break;
      }
      v67 = v64;
      if ( *(_DWORD *)(v65 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v65 + 4) + 4))(25, v64, v65);
        if ( *(_DWORD *)(v65 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v65 + 4) + 20))(25, v67, v65);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v65 + 20))(v65, 25, v67, v65);
    }
    else
    {
      if ( v8 != 7233 )
      {
        switch ( v8 )
        {
          case 3393:
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                "DB Get Error",
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  "DB Get Error",
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              "DB Get Error",
              &v2->baseclass_0.baseclass_8);
            break;
          case 3394:
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                "DB Set Error",
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  "DB Set Error",
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              "DB Set Error",
              &v2->baseclass_0.baseclass_8);
            break;
          case 3397:
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                "Participation Recording Error",
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  "Participation Recording Error",
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              "Participation Recording Error",
              &v2->baseclass_0.baseclass_8);
            break;
          case 3395:
            v9 = TextData::Get(0xB8C83533u);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                v9,
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  v9,
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              v9,
              &v2->baseclass_0.baseclass_8);
            break;
          case 3396:
            v10 = TextData::Get(0x54A4ABA1u);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                v10,
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  v10,
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              v10,
              &v2->baseclass_0.baseclass_8);
            break;
          case 3400:
            v11 = TextData::Get(0x374D4474u);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                v11,
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  v11,
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              v11,
              &v2->baseclass_0.baseclass_8);
            break;
          case 3399:
            v12 = TextData::Get(0x76816B99u);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                v12,
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  v12,
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              v12,
              &v2->baseclass_0.baseclass_8);
            break;
          case 3401:
            v13 = TextData2::Get(0x9CB4AF28u);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                v13,
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  v13,
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              v13,
              &v2->baseclass_0.baseclass_8);
            break;
          case 3402:
            v14 = TextData2::Get(0x5D6E54CFu);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            {
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                25,
                v14,
                &v2->baseclass_0.baseclass_8);
              if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                  25,
                  v14,
                  &v2->baseclass_0.baseclass_8);
            }
            v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
              &v2->baseclass_0.baseclass_8,
              25,
              v14,
              &v2->baseclass_0.baseclass_8);
            break;
          default:
            goto LABEL_103;
        }
      }
    }
LABEL_108:
    result = 0;
  }
  return result;
}
// 9C9330: using guessed type char byte_9C9330;
// 9C933C: using guessed type char byte_9C933C;
// 9C9348: using guessed type char byte_9C9348;
// 9C9354: using guessed type char byte_9C9354;
// A85C00: using guessed type int __security_cookie;
// A97E7C: using guessed type int ITableBase_GUILD_TOURNAMENT_REQUIRE_GTRequireTab___ms_pkTable;

//----- (006BE080) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENTSTART_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENTSTART_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  int v3; // eax@5
  bool v4; // zf@7
  CClientGuild *v5; // ecx@9
  char *v6; // eax@11
  int v7; // edx@12
  char v8; // cl@13
  int result; // eax@14
  CClientGuild *v10; // ecx@16
  char *v11; // eax@18
  int v12; // edx@19
  char v13; // cl@20
  char *v14; // esi@22
  char *v15; // edi@22

  v2 = this;
  if ( GuildTask::ms_spGuildTask )
  {
    this->m_GuildTournamentImprove.m_uiGTTType = pkCmd->nGuildTourNamentType;
    this->baseclass_40.baseclass_0.m_Guild.nNo = pkCmd->nGuildMyRegNumber;
    this->m_GuildTournamentImprove.m_RedTeam = pkCmd->nGuildA;
    this->m_GuildTournamentImprove.m_BlueTeam = pkCmd->nGuildB;
    if ( pkCmd->nGuildA && pkCmd->nGuildB )
    {
      if ( GuildTask::ms_spGuildTask )
        v3 = GuildTask::ms_spGuildTask + 64;
      else
        v3 = 0;
      v4 = *(_DWORD *)(v3 + 12) == pkCmd->nGuildA;
      this->baseclass_40.m_GttEnemyInfo.uiStatus = 2;
      if ( v4 )
      {
        if ( GuildTask::ms_spGuildTask )
          v5 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
        else
          v5 = 0;
        v6 = CClientGuild::FindGttEnemyInfo(v5, pkCmd->nGuildB);
        if ( v6 )
        {
          v7 = v2->baseclass_40.m_GttEnemyInfo.acGuildName - v6;
          do
          {
            v8 = *v6;
            v6[v7] = *v6;
            ++v6;
          }
          while ( v8 );
        }
        v2->baseclass_40.m_GttEnemyInfo.GuildRegNo = pkCmd->nGuildB;
        result = 1;
      }
      else
      {
        if ( GuildTask::ms_spGuildTask )
          v10 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
        else
          v10 = 0;
        v11 = CClientGuild::FindGttEnemyInfo(v10, pkCmd->nGuildA);
        if ( v11 )
        {
          v12 = v2->baseclass_40.m_GttEnemyInfo.acGuildName - v11;
          do
          {
            v13 = *v11;
            v11[v12] = *v11;
            ++v11;
          }
          while ( v13 );
        }
        v2->baseclass_40.m_GttEnemyInfo.GuildRegNo = pkCmd->nGuildA;
        result = 1;
      }
    }
    else
    {
      v14 = (char *)&this->baseclass_0.baseclass_8;
      v15 = TextData::Get(0x38281F8Bu);
      if ( *((_DWORD *)v14 + 1) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v14 + 1) + 4))(25, v15, v14);
        if ( *((_DWORD *)v14 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v14 + 1) + 20))(25, v15, v14);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v14 + 20))(v14, 25, v15, v14);
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BE1D0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_STORAGEWITHDRAW_CMD(GuildTask *this, PROTO_NC_GUILD_STORAGEWITHDRAW_CMD *pkCmd)
{
  int v2; // eax@2
  int v3; // ecx@3
  int v4; // edi@3
  int v5; // edx@3
  int v6; // ecx@3
  int v7; // edx@3
  int v8; // ebx@3
  int v9; // ecx@5
  char v10; // cl@7
  char *v11; // eax@9
  char *v12; // ebx@9
  char *v13; // eax@13
  char *v14; // ebx@13
  char *v15; // eax@19
  char *v16; // eax@19
  char *v17; // eax@20
  void *v18; // ebx@21
  int v19; // eax@26
  int v20; // ecx@27
  int v21; // edi@27
  int v22; // edx@27
  int v23; // ecx@27
  int v24; // edx@27
  int v25; // ebx@27
  int v26; // ecx@29
  char v27; // cl@31
  char *v28; // eax@32
  char *v29; // ebx@35
  int v30; // ecx@40
  int v31; // edx@40
  unsigned int v32; // eax@40
  int v33; // ecx@40
  int v34; // edx@40
  unsigned int v35; // esi@40
  unsigned int v36; // ebx@40
  unsigned int v37; // edi@40
  int v38; // eax@42
  char v39; // cl@43
  char *v40; // eax@44
  const void *v41; // edx@44
  char v42; // cl@45
  unsigned int v43; // eax@46
  void *v44; // edi@46
  char v45; // cl@47
  char *v46; // edi@48
  char v47; // al@49
  unsigned int v48; // eax@52
  void *v49; // edi@52
  char v50; // cl@53
  char *v51; // eax@54
  char *v52; // ecx@54
  char v53; // dl@55
  unsigned int v54; // eax@56
  const void *v55; // esi@56
  void *v56; // edi@56
  char v57; // cl@57
  char *v58; // edi@58
  char v59; // al@59
  unsigned int v60; // eax@62
  void *v61; // edi@62
  char v62; // cl@63
  char *v63; // eax@64
  char *v64; // ecx@64
  char v65; // dl@65
  unsigned int v66; // eax@66
  const void *v67; // esi@66
  void *v68; // edi@66
  char v69; // cl@67
  char *v70; // edi@68
  char v71; // al@69
  unsigned int v72; // eax@72
  void *v73; // edi@72
  char v74; // cl@73
  char *v75; // eax@74
  char *v76; // ecx@74
  char v77; // dl@75
  unsigned int v78; // eax@76
  const void *v79; // esi@76
  void *v80; // edi@76
  char v81; // cl@77
  char *v82; // edi@78
  char v83; // al@79
  char *v84; // eax@81
  char *v85; // edi@81
  unsigned int Money_4; // [sp+10h] [bp-224h]@40
  GuildTask *v88; // [sp+14h] [bp-220h]@1
  char acStr1[256]; // [sp+18h] [bp-21Ch]@41
  char acStr2[256]; // [sp+118h] [bp-11Ch]@41
  char acCharName[21]; // [sp+218h] [bp-1Ch]@3
  unsigned int v92; // [sp+230h] [bp-4h]@1
  int v93; // [sp+234h] [bp+0h]@1

  v92 = (unsigned int)&v93 ^ __security_cookie;
  v88 = this;
  if ( !pkCmd->type )
  {
    v2 = pkCmd->item;
    if ( (_WORD)v2 != -1 )
    {
      v3 = *(_DWORD *)&pkCmd->charid.n5_name[4];
      v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      *(_DWORD *)acCharName = *(_DWORD *)&pkCmd->charid.n5_name[0];
      v5 = *(_DWORD *)&pkCmd->charid.n5_name[8];
      *(_DWORD *)&acCharName[4] = v3;
      v6 = *(_DWORD *)&pkCmd->charid.n5_name[12];
      *(_DWORD *)&acCharName[8] = v5;
      v7 = *(_DWORD *)&pkCmd->charid.n5_name[16];
      *(_DWORD *)&acCharName[12] = v6;
      *(_DWORD *)&acCharName[16] = v7;
      v8 = v2;
      acCharName[20] = 0;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v2) )
      {
        if ( (unsigned __int16)v8 <= *(_WORD *)(v4 + 200) )
        {
          v9 = *(_DWORD *)(v4 + 196);
          if ( *(_DWORD *)(v9 + 4 * v8) )
          {
            if ( *(_DWORD *)(v9 + 4 * v8) )
            {
              v10 = pkCmd->isBuy;
              if ( v10 )
              {
                if ( v10 == 1 )
                {
                  if ( pkCmd->___u5.lot <= 1 )
                  {
                    v17 = TextData2::Get(0x9496888Eu);
                    v16 = fs(v17);
                  }
                  else
                  {
                    v15 = TextData2::Get(0xE8E5D4EDu);
                    v16 = fs(v15);
                  }
                  v18 = v16;
                  if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
                  {
                    ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                      46,
                      v16,
                      &v88->baseclass_0.baseclass_8);
                    if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
                      ((void (__stdcall *)(signed int, void *, IDirectMessenger *))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                        46,
                        v18,
                        &v88->baseclass_0.baseclass_8);
                  }
                  v88->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                    &v88->baseclass_0.baseclass_8,
                    46,
                    v18,
                    &v88->baseclass_0.baseclass_8);
                }
              }
              else
              {
                if ( pkCmd->___u5.lot <= 1 )
                {
                  v13 = TextData::Get(0xDCB8B8CEu);
                  v14 = fs(v13);
                  if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
                  {
                    ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                      46,
                      v14,
                      &v88->baseclass_0.baseclass_8);
                    if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
                      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                        46,
                        v14,
                        &v88->baseclass_0.baseclass_8);
                  }
                  v88->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                    &v88->baseclass_0.baseclass_8,
                    46,
                    v14,
                    &v88->baseclass_0.baseclass_8);
                  GuildTournamentStorage::Remove(pkCmd->slot);
                  GuildTournamentStorageWin::GTTInvenItemRemoval(v88->m_pkGuildTournamentStorageWin, pkCmd->slot);
                }
                else
                {
                  v11 = TextData::Get(0x3007042Du);
                  v12 = fs(v11);
                  if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
                  {
                    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                      46,
                      v12,
                      &v88->baseclass_0.baseclass_8);
                    if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
                      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                        46,
                        v12,
                        &v88->baseclass_0.baseclass_8);
                  }
                  v88->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                    &v88->baseclass_0.baseclass_8,
                    46,
                    v12,
                    &v88->baseclass_0.baseclass_8);
                }
              }
            }
          }
        }
      }
    }
  }
  if ( pkCmd->type == 1 )
  {
    v19 = pkCmd->item;
    if ( (_WORD)v19 != -1 )
    {
      v20 = *(_DWORD *)&pkCmd->charid.n5_name[4];
      v21 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      *(_DWORD *)acCharName = *(_DWORD *)&pkCmd->charid.n5_name[0];
      v22 = *(_DWORD *)&pkCmd->charid.n5_name[8];
      *(_DWORD *)&acCharName[4] = v20;
      v23 = *(_DWORD *)&pkCmd->charid.n5_name[12];
      *(_DWORD *)&acCharName[8] = v22;
      v24 = *(_DWORD *)&pkCmd->charid.n5_name[16];
      *(_DWORD *)&acCharName[12] = v23;
      *(_DWORD *)&acCharName[16] = v24;
      v25 = v19;
      acCharName[20] = 0;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v19) )
      {
        if ( (unsigned __int16)v25 <= *(_WORD *)(v21 + 200) )
        {
          v26 = *(_DWORD *)(v21 + 196);
          if ( *(_DWORD *)(v26 + 4 * v25) )
          {
            if ( *(_DWORD *)(v26 + 4 * v25) )
            {
              v27 = pkCmd->isBuy;
              if ( v27 )
              {
                if ( v27 != 1 )
                  goto LABEL_39;
                v28 = TextData2::Get(0xE8E5D4EDu);
              }
              else
              {
                v28 = TextData::Get(0x3007042Du);
              }
              v29 = fs(v28);
              if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  46,
                  v29,
                  &v88->baseclass_0.baseclass_8);
                if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    46,
                    v29,
                    &v88->baseclass_0.baseclass_8);
              }
              v88->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v88->baseclass_0.baseclass_8,
                46,
                v29,
                &v88->baseclass_0.baseclass_8);
            }
          }
        }
      }
    }
  }
LABEL_39:
  if ( pkCmd->type == 2 )
  {
    v30 = *(_DWORD *)&pkCmd->charid.n5_name[0];
    v31 = *(_DWORD *)&pkCmd->charid.n5_name[4];
    *(_DWORD *)&acCharName[8] = *(_DWORD *)&pkCmd->charid.n5_name[8];
    v32 = LODWORD(pkCmd->___u5.lot);
    *(_DWORD *)acCharName = v30;
    v33 = *(_DWORD *)&pkCmd->charid.n5_name[12];
    *(_DWORD *)&acCharName[4] = v31;
    v34 = *(_DWORD *)&pkCmd->charid.n5_name[16];
    v35 = HIDWORD(pkCmd->___u5.lot);
    v36 = v32;
    v37 = v35;
    *(_DWORD *)&acCharName[12] = v33;
    *(_DWORD *)&acCharName[16] = v34;
    acCharName[20] = 0;
    Money_4 = v35;
    if ( v35 | v32 )
    {
      memset(acStr1, 0, 0x100u);
      memset(acStr2, 0, 0x100u);
      if ( User::GetGem(__PAIR__(v35, v36)) )
      {
        User::GetGem(__PAIR__(v35, v36));
        sprintf(acStr1, "%I64d");
        v38 = 0;
        do
        {
          v39 = acStr1[v38];
          acStr2[v38++] = v39;
        }
        while ( v39 );
        v40 = TextData::Get(0x475F9699u);
        v41 = v40;
        do
          v42 = *v40++;
        while ( v42 );
        v43 = v40 - v41;
        v44 = &acStr1[255];
        do
        {
          v45 = *((_BYTE *)v44 + 1);
          v44 = (char *)v44 + 1;
        }
        while ( v45 );
        memcpy(v44, v41, v43);
        v46 = &acStr1[255];
        do
          v47 = (v46++)[1];
        while ( v47 );
        *v46 = byte_9C9388;
        v37 = v35;
      }
      if ( User::GetGold(__PAIR__(v37, v36)) )
      {
        User::GetGold(__PAIR__(v37, v36));
        sprintf(acStr1, "%I64d");
        v48 = strlen(acStr1) + 1;
        v49 = &acStr1[255];
        do
        {
          v50 = *((_BYTE *)v49 + 1);
          v49 = (char *)v49 + 1;
        }
        while ( v50 );
        memcpy(v49, acStr1, v48);
        v51 = TextData::Get(0x47A395A3u);
        v52 = v51;
        do
          v53 = *v51++;
        while ( v53 );
        v54 = v51 - v52;
        v55 = v52;
        v56 = &acStr1[255];
        do
        {
          v57 = *((_BYTE *)v56 + 1);
          v56 = (char *)v56 + 1;
        }
        while ( v57 );
        memcpy(v56, v55, v54);
        v58 = &acStr1[255];
        do
          v59 = (v58++)[1];
        while ( v59 );
        *v58 = byte_9C9394;
        v37 = Money_4;
      }
      if ( User::GetSilver(__PAIR__(v37, v36)) )
      {
        User::GetSilver(__PAIR__(v37, v36));
        sprintf(acStr1, "%I64d");
        v60 = strlen(acStr1) + 1;
        v61 = &acStr1[255];
        do
        {
          v62 = *((_BYTE *)v61 + 1);
          v61 = (char *)v61 + 1;
        }
        while ( v62 );
        memcpy(v61, acStr1, v60);
        v63 = TextData::Get(0x98B595EFu);
        v64 = v63;
        do
          v65 = *v63++;
        while ( v65 );
        v66 = v63 - v64;
        v67 = v64;
        v68 = &acStr1[255];
        do
        {
          v69 = *((_BYTE *)v68 + 1);
          v68 = (char *)v68 + 1;
        }
        while ( v69 );
        memcpy(v68, v67, v66);
        v70 = &acStr1[255];
        do
          v71 = (v70++)[1];
        while ( v71 );
        *v70 = byte_9C93A0;
        v37 = Money_4;
      }
      if ( User::GetCopper(__PAIR__(v37, v36)) )
      {
        User::GetCopper(__PAIR__(Money_4, v36));
        sprintf(acStr1, "%I64d");
        v72 = strlen(acStr1) + 1;
        v73 = &acStr1[255];
        do
        {
          v74 = *((_BYTE *)v73 + 1);
          v73 = (char *)v73 + 1;
        }
        while ( v74 );
        memcpy(v73, acStr1, v72);
        v75 = TextData::Get(0x88AF99F5u);
        v76 = v75;
        do
          v77 = *v75++;
        while ( v77 );
        v78 = v75 - v76;
        v79 = v76;
        v80 = &acStr1[255];
        do
        {
          v81 = *((_BYTE *)v80 + 1);
          v80 = (char *)v80 + 1;
        }
        while ( v81 );
        memcpy(v80, v79, v78);
        v82 = &acStr1[255];
        do
          v83 = (v82++)[1];
        while ( v83 );
        *v82 = byte_9C93AC;
      }
      v84 = TextData::Get(0x2AFDFB2Du);
      v85 = fs(v84);
      if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          46,
          v85,
          &v88->baseclass_0.baseclass_8);
        if ( v88->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v88->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            46,
            v85,
            &v88->baseclass_0.baseclass_8);
      }
      v88->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v88->baseclass_0.baseclass_8,
        46,
        v85,
        &v88->baseclass_0.baseclass_8);
    }
  }
  return 0;
}
// 9C9388: using guessed type char byte_9C9388;
// 9C9394: using guessed type char byte_9C9394;
// 9C93A0: using guessed type char byte_9C93A0;
// 9C93AC: using guessed type char byte_9C93AC;
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006BE8E0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_ITEM_GUILD_STORAGE_WITHDRAW_ACK(GuildTask *this, PROTO_NC_ITEM_GUILD_STORAGE_WITHDRAW_ACK *pkProto)
{
  GuildTask *v2; // esi@1
  unsigned __int16 v3; // cx@1
  int result; // eax@2
  int v5; // esi@4
  char *v6; // edi@4
  int v7; // esi@9
  char *v8; // edi@9
  int v9; // esi@14
  char *v10; // edi@14
  int v11; // esi@18
  char *v12; // edi@18

  v2 = this;
  v3 = pkProto->err;
  switch ( v3 )
  {
    case 0x1480u:
      GuildTournamentStorage::SetMoney(pkProto->cen);
      result = 1;
      break;
    case 0x1481u:
      v5 = (int)&v2->baseclass_0.baseclass_8;
      v6 = TextData::Get(0x623167Fu);
      if ( *(_DWORD *)(v5 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v5 + 4) + 4))(25, v6, v5);
        if ( *(_DWORD *)(v5 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v5 + 4) + 20))(25, v6, v5);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
      result = 1;
      break;
    case 0x1482u:
      v7 = (int)&v2->baseclass_0.baseclass_8;
      v8 = TextData::Get(0xA3BFB711u);
      if ( *(_DWORD *)(v7 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 4))(25, v8, v7);
        if ( *(_DWORD *)(v7 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 20))(25, v8, v7);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
      result = 1;
      break;
    case 0x1483u:
      v9 = (int)&v2->baseclass_0.baseclass_8;
      v10 = TextData::Get(0xC62C0E33u);
      if ( *(_DWORD *)(v9 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v9 + 4) + 4))(25, v10, v9);
        if ( *(_DWORD *)(v9 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v9 + 4) + 20))(25, v10, v9);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 20))(v9, 25, v10, v9);
      result = 1;
      break;
    default:
      pkProto->err = 5252;
      v11 = (int)&v2->baseclass_0.baseclass_8;
      v12 = TextData::Get(0x7DCBCCE1u);
      if ( *(_DWORD *)(v11 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 4))(25, v12, v11);
        if ( *(_DWORD *)(v11 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 20))(25, v12, v11);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v11 + 20))(v11, 25, v12, v11);
      result = 1;
      break;
  }
  return result;
}

//----- (006BEA80) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_RECALL_ENTER_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_RECALL_ENTER_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  char *v3; // eax@1
  MsgBox *v4; // eax@1
  int v5; // edx@2
  int result; // eax@4

  v2 = this;
  v3 = TextData::Get(0xCDD2133Du);
  v4 = MsgBox::Modeless(MSGBOX_OKCANCEL, v3);
  if ( v2 )
    v5 = (int)&v2->baseclass_0.baseclass_8;
  else
    v5 = 0;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v5);
  result = 1;
  v2->m_bRecall = 1;
  return result;
}

//----- (006BEAC0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_RECALL_ENTER_ACK(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_RECALL_ENTER_ACK *pkProto)
{
  int v2; // eax@1
  GuildTask *v3; // esi@1
  char *v4; // eax@3
  int v5; // esi@5
  char *v6; // edi@5

  v2 = pkProto->err;
  v3 = this;
  if ( (_WORD)v2 != 5184 )
  {
    if ( v2 == 5188 )
      v4 = TextData::Get(0x80CAB5D5u);
    else
      v4 = fs("Error : %d\n");
    v5 = (int)&v3->baseclass_0.baseclass_8;
    v6 = v4;
    if ( *(_DWORD *)(v5 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v5 + 4) + 4))(25, v4, v5);
      if ( *(_DWORD *)(v5 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v5 + 4) + 20))(25, v6, v5);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
  }
  return 1;
}

//----- (006BEB40) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_RETYPE_ACK(GuildTask *this, PROTO_NC_GUILD_RETYPE_ACK *pkAck)
{
  GuildTask *v2; // esi@1
  char *v3; // eax@2
  int v4; // esi@4
  char *v5; // edi@4

  v2 = this;
  if ( 6744 == pkAck->err )
    v3 = TextData2::Get(0xC7401B23u);
  else
    v3 = ErrMsgTable::GetErrMsg(pkAck->err);
  v4 = (int)&v2->baseclass_0.baseclass_8;
  v5 = v3;
  if ( *(_DWORD *)(v4 + 4) )
  {
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 4))(25, v3, v4);
    if ( *(_DWORD *)(v4 + 4) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  return 1;
}

//----- (006BEBC0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_MY_GUILD_TOURNAMENT_MATCH_TIME_ACK(GuildTask *this, PROTO_NC_GUILD_MY_GUILD_TOURNAMENT_MATCH_TIME_ACK *pkAck)
{
  PgFrameWork *v2; // esi@2
  char v3; // al@2
  char v4; // al@6
  char *v5; // eax@13
  GuildWin *v7; // esi@18
  char *v8; // eax@18
  GuildWin *v9; // esi@22
  char *v10; // eax@22
  char *v11; // eax@22
  char *v12; // esi@23
  char *v13; // edi@23
  unsigned int v14; // [sp-4h] [bp-50h]@4
  char acTime[64]; // [sp+8h] [bp-44h]@13
  unsigned int v16; // [sp+48h] [bp-4h]@1
  int v17; // [sp+4Ch] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  if ( pkAck->Error == 7016 )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v3 = pkAck->GTCondInfo.nMyGTCondition;
    if ( v3 )
    {
      switch ( v3 )
      {
        case 1:
          v4 = pkAck->GTCondInfo.bIsJoin;
          if ( v4 )
          {
            if ( v4 == 1 && v2 )
            {
              v14 = -1767246095;
              goto LABEL_18;
            }
          }
          else
          {
            if ( v2 )
            {
              v14 = -1970695548;
              goto LABEL_18;
            }
          }
          break;
        case 2:
          memset(acTime, 0, 0x40u);
          v5 = TextData2::Get(0x7AA78EA3u);
          strftime(acTime, 0x40u, v5, &pkAck->GTCondInfo.tm_nMatchTime);
          if ( v2 )
          {
            GuildWin::SetNextJoinTime((GuildWin *)v2[24].baseclass_0.vfptr, acTime);
            return 0;
          }
          break;
        case 3:
          if ( v2 )
          {
            v14 = -352651715;
            goto LABEL_18;
          }
          break;
        default:
          if ( v3 == 4 && pkAck->GTCondInfo.nGTGrade && v2 )
          {
            v9 = (GuildWin *)v2[24].baseclass_0.vfptr;
            v10 = TextData2::Get(0xE0FDFDFBu);
            v11 = fs(v10);
            GuildWin::SetNextJoinTime(v9, v11);
            return 0;
          }
          break;
      }
    }
    else
    {
      if ( v2 )
      {
        v14 = 776245648;
LABEL_18:
        v7 = (GuildWin *)v2[24].baseclass_0.vfptr;
        v8 = TextData2::Get(v14);
        GuildWin::SetNextJoinTime(v7, v8);
        return 0;
      }
    }
  }
  else
  {
    v12 = (char *)&this->baseclass_0.baseclass_8;
    v13 = ErrMsgTable::GetErrMsg(pkAck->Error);
    if ( *((_DWORD *)v12 + 1) )
    {
      (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v12 + 1) + 4))(25, v13, v12);
      if ( *((_DWORD *)v12 + 1) )
        (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v12 + 1) + 20))(25, v13, v12);
    }
    (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v12 + 20))(v12, 25, v13, v12);
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (006BED90) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_PLAYERDIEMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_PLAYERDIEMSG_CMD *pkCmd)
{
  int v2; // edi@0
  GuildTask *v3; // ebx@1
  int v4; // ecx@2
  int v5; // edx@2
  int v6; // eax@2
  int v7; // ecx@2
  int v8; // eax@2
  int v9; // edx@2
  int v10; // ecx@2
  int v11; // eax@2
  int v12; // edx@2
  char *v13; // eax@3
  char *v14; // eax@3
  char *v15; // eax@5
  char *v16; // edi@5
  char *v17; // eax@9
  char *v18; // edi@10
  char acName2[21]; // [sp+8h] [bp-34h]@2
  char acName[21]; // [sp+20h] [bp-1Ch]@2
  unsigned int v22; // [sp+38h] [bp-4h]@1
  int v23; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v3 = this;
  if ( !pkCmd )
    return 0;
  v4 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[4];
  v5 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[8];
  *(_DWORD *)acName = *(_DWORD *)&pkCmd->MurderCharID.n5_name[0];
  v6 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[12];
  *(_DWORD *)&acName[4] = v4;
  v7 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[16];
  *(_DWORD *)&acName[12] = v6;
  v8 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[4];
  *(_DWORD *)&acName[8] = v5;
  v9 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[0];
  *(_DWORD *)&acName[16] = v7;
  v10 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[8];
  *(_DWORD *)&acName2[4] = v8;
  v11 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[16];
  *(_DWORD *)acName2 = v9;
  v12 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[12];
  *(_DWORD *)&acName2[8] = v10;
  *(_DWORD *)&acName2[16] = v11;
  acName[20] = 0;
  *(_DWORD *)&acName2[12] = v12;
  acName2[20] = 0;
  if ( !strcmp(
          (const char *)((int (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v2),
          acName2) )
  {
    v13 = TextData2::Get(0xE5F5EC07u);
    v14 = fs(v13);
    goto LABEL_10;
  }
  if ( pkCmd->VictimGuildGrade )
  {
    v17 = TextData2::Get(0x90A3A8EDu);
    v14 = fs(v17);
LABEL_10:
    v18 = v14;
    if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v14,
        &v3->baseclass_0.baseclass_8);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v18,
          &v3->baseclass_0.baseclass_8);
    }
    ((void (__thiscall *)(IDirectMessenger *, signed int, char *))v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent)(
      &v3->baseclass_0.baseclass_8,
      25,
      v18);
    return 0;
  }
  v15 = TextData2::Get(0x4F3D8783u);
  v16 = fs(v15);
  if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v16,
      &v3->baseclass_0.baseclass_8);
    if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v16,
        &v3->baseclass_0.baseclass_8);
  }
  ((void (__thiscall *)(IDirectMessenger *, signed int, char *))v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent)(
    &v3->baseclass_0.baseclass_8,
    25,
    v16);
  return 0;
}
// 6BED90: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;

//----- (006BEF20) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_MANAGERUSERMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_MANAGERUSERMSG_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  int v3; // edx@2
  int v4; // eax@2
  char *v5; // eax@2
  int v6; // esi@2
  char *v7; // edi@2
  char acName[21]; // [sp+4h] [bp-1Ch]@2
  unsigned int v10; // [sp+1Ch] [bp-4h]@1
  int v11; // [sp+20h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  if ( pkCmd )
  {
    v3 = *(_DWORD *)&pkCmd->CharID.n5_name[4];
    *(_DWORD *)acName = *(_DWORD *)&pkCmd->CharID.n5_name[0];
    *(_DWORD *)&acName[8] = *(_DWORD *)&pkCmd->CharID.n5_name[8];
    *(_DWORD *)&acName[4] = v3;
    v4 = *(_DWORD *)&pkCmd->CharID.n5_name[16];
    *(_DWORD *)&acName[12] = *(_DWORD *)&pkCmd->CharID.n5_name[12];
    *(_DWORD *)&acName[16] = v4;
    acName[20] = 0;
    v5 = TextData2::Get(0x91849698u);
    v6 = (int)&v2->baseclass_0.baseclass_8;
    v7 = fs(v5);
    if ( *(_DWORD *)(v6 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
      if ( *(_DWORD *)(v6 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (006BEFD0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_PLAYERKILLMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_PLAYERKILLMSG_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  int v3; // edx@2
  int v4; // ecx@2
  int v5; // edx@2
  int v6; // ecx@2
  int v7; // edx@2
  int v8; // ecx@2
  int v9; // edx@2
  int v10; // ecx@2
  int v11; // edx@2
  char *v12; // eax@2
  int v13; // esi@2
  char *v14; // edi@2
  char acName[21]; // [sp+4h] [bp-34h]@2
  char acName2[21]; // [sp+1Ch] [bp-1Ch]@2
  unsigned int v18; // [sp+34h] [bp-4h]@1
  int v19; // [sp+38h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v2 = this;
  if ( pkCmd )
  {
    v3 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[4];
    *(_DWORD *)acName = *(_DWORD *)&pkCmd->MurderCharID.n5_name[0];
    v4 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[8];
    *(_DWORD *)&acName[4] = v3;
    v5 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[12];
    *(_DWORD *)&acName[8] = v4;
    v6 = *(_DWORD *)&pkCmd->MurderCharID.n5_name[16];
    *(_DWORD *)&acName[12] = v5;
    v7 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[0];
    *(_DWORD *)&acName[16] = v6;
    v8 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[4];
    *(_DWORD *)acName2 = v7;
    v9 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[8];
    *(_DWORD *)&acName2[4] = v8;
    v10 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[12];
    *(_DWORD *)&acName2[8] = v9;
    v11 = *(_DWORD *)&pkCmd->VictimCharID.n5_name[16];
    *(_DWORD *)&acName2[12] = v10;
    acName[20] = 0;
    *(_DWORD *)&acName2[16] = v11;
    acName2[20] = 0;
    v12 = TextData2::Get(0xDD093B47u);
    v13 = (int)&v2->baseclass_0.baseclass_8;
    v14 = fs(v12);
    if ( *(_DWORD *)(v13 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v13 + 4) + 4))(25, v14, v13);
      if ( *(_DWORD *)(v13 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v13 + 4) + 20))(25, v14, v13);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v13 + 20))(v13, 25, v14, v13);
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (006BF0A0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_PICK_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_PICK_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  char *v3; // eax@2
  int v4; // esi@2
  char *v5; // edi@2
  int result; // eax@5

  v2 = this;
  if ( GTIViewInfoTab::GetByIndex(pkCmd->GTIiemID) )
  {
    v3 = TextData2::Get(0xE56A1C4Fu);
    v4 = (int)&v2->baseclass_0.baseclass_8;
    v5 = fs(v3);
    if ( *(_DWORD *)(v4 + 4) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
      if ( *(_DWORD *)(v4 + 4) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006BF120) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_EFFECT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_EFFECT_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  GTIView *v3; // eax@1
  char v4; // cl@2
  char *v5; // eax@6
  int v6; // esi@6
  char *v7; // edi@6
  unsigned int v9; // [sp-Ch] [bp-10h]@3

  v2 = this;
  v3 = GTIViewInfoTab::GetByIndex(pkCmd->GTIiemID);
  if ( v3 )
  {
    v4 = v3->Advantage;
    if ( v4 == 1 )
    {
      v9 = 1710344924;
    }
    else
    {
      if ( v4 != 2 )
        return 1;
      v9 = -1376658999;
    }
    v5 = TextData2::Get(v9);
    v6 = (int)&v2->baseclass_0.baseclass_8;
    v7 = fs(v5);
    if ( *(_DWORD *)(v6 + 4) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
      if ( *(_DWORD *)(v6 + 4) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
    return 1;
  }
  return 0;
}

//----- (006BF1C0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_REFUND_NOTICE_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_REFUND_NOTICE_CMD *pkCmd)
{
  __int64 v2; // qdi@1
  unsigned int v3; // ebx@1
  unsigned int v4; // esi@2
  int v5; // eax@3
  char v6; // cl@4
  char *v7; // eax@5
  const void *v8; // edx@5
  char v9; // cl@6
  unsigned int v10; // eax@7
  void *v11; // edi@7
  char v12; // cl@8
  char *v13; // edi@9
  char v14; // al@10
  unsigned int v15; // eax@13
  void *v16; // edi@13
  char v17; // cl@14
  char *v18; // eax@15
  char *v19; // ecx@15
  char v20; // dl@16
  unsigned int v21; // eax@17
  const void *v22; // esi@17
  void *v23; // edi@17
  char v24; // cl@18
  char *v25; // edi@19
  char v26; // al@20
  unsigned int v27; // eax@23
  void *v28; // edi@23
  char v29; // cl@24
  char *v30; // eax@25
  char *v31; // ecx@25
  char v32; // dl@26
  unsigned int v33; // eax@27
  const void *v34; // esi@27
  void *v35; // edi@27
  char v36; // cl@28
  char *v37; // edi@29
  char v38; // al@30
  unsigned int v39; // eax@33
  void *v40; // edi@33
  char v41; // cl@34
  char *v42; // eax@35
  char *v43; // ecx@35
  char v44; // dl@36
  unsigned int v45; // eax@37
  const void *v46; // esi@37
  void *v47; // edi@37
  char v48; // cl@38
  char *v49; // edi@39
  char v50; // al@40
  char *v51; // eax@42
  char *v52; // eax@42
  unsigned int Money_4; // [sp+10h] [bp-208h]@1
  char acStr1[256]; // [sp+14h] [bp-204h]@1
  char acStr2[256]; // [sp+114h] [bp-104h]@1
  unsigned int v57; // [sp+214h] [bp-4h]@1
  int v58; // [sp+218h] [bp+0h]@1

  v57 = (unsigned int)&v58 ^ __security_cookie;
  HIDWORD(v2) = LODWORD(pkCmd->nRefundMoney);
  LODWORD(v2) = HIDWORD(pkCmd->nRefundMoney);
  v3 = LODWORD(pkCmd->nRefundMoney);
  Money_4 = HIDWORD(pkCmd->nRefundMoney);
  memset(acStr1, 0, 0x100u);
  memset(acStr2, 0, 0x100u);
  if ( v2 )
  {
    HIDWORD(v2) = v2;
    if ( User::GetGem(__PAIR__(v2, v3)) )
    {
      User::GetGem(__PAIR__(v2, v3));
      sprintf(acStr1, "%I64d");
      v5 = 0;
      do
      {
        v6 = acStr1[v5];
        acStr2[v5++] = v6;
      }
      while ( v6 );
      v7 = TextData::Get(0x475F9699u);
      v8 = v7;
      do
        v9 = *v7++;
      while ( v9 );
      v10 = v7 - v8;
      v11 = &acStr1[255];
      do
      {
        v12 = *((_BYTE *)v11 + 1);
        v11 = (char *)v11 + 1;
      }
      while ( v12 );
      memcpy(v11, v8, v10);
      v13 = &acStr1[255];
      do
        v14 = (v13++)[1];
      while ( v14 );
      v4 = Money_4;
      *v13 = byte_9C93E8;
    }
    if ( User::GetGold(__PAIR__(v4, v3)) )
    {
      User::GetGold(__PAIR__(v4, v3));
      sprintf(acStr1, "%I64d");
      v15 = strlen(acStr1) + 1;
      v16 = &acStr1[255];
      do
      {
        v17 = *((_BYTE *)v16 + 1);
        v16 = (char *)v16 + 1;
      }
      while ( v17 );
      memcpy(v16, acStr1, v15);
      v18 = TextData::Get(0x47A395A3u);
      v19 = v18;
      do
        v20 = *v18++;
      while ( v20 );
      v21 = v18 - v19;
      v22 = v19;
      v23 = &acStr1[255];
      do
      {
        v24 = *((_BYTE *)v23 + 1);
        v23 = (char *)v23 + 1;
      }
      while ( v24 );
      memcpy(v23, v22, v21);
      v25 = &acStr1[255];
      do
        v26 = (v25++)[1];
      while ( v26 );
      v4 = Money_4;
      *v25 = byte_9C93F4;
    }
    if ( User::GetSilver(__PAIR__(v4, v3)) )
    {
      User::GetSilver(__PAIR__(v4, v3));
      sprintf(acStr1, "%I64d");
      v27 = strlen(acStr1) + 1;
      v28 = &acStr1[255];
      do
      {
        v29 = *((_BYTE *)v28 + 1);
        v28 = (char *)v28 + 1;
      }
      while ( v29 );
      memcpy(v28, acStr1, v27);
      v30 = TextData::Get(0x98B595EFu);
      v31 = v30;
      do
        v32 = *v30++;
      while ( v32 );
      v33 = v30 - v31;
      v34 = v31;
      v35 = &acStr1[255];
      do
      {
        v36 = *((_BYTE *)v35 + 1);
        v35 = (char *)v35 + 1;
      }
      while ( v36 );
      memcpy(v35, v34, v33);
      v37 = &acStr1[255];
      do
        v38 = (v37++)[1];
      while ( v38 );
      v4 = Money_4;
      *v37 = byte_9C9400;
    }
    if ( User::GetCopper(__PAIR__(v4, v3)) )
    {
      User::GetCopper(__PAIR__(v4, v3));
      sprintf(acStr1, "%I64d");
      v39 = strlen(acStr1) + 1;
      v40 = &acStr1[255];
      do
      {
        v41 = *((_BYTE *)v40 + 1);
        v40 = (char *)v40 + 1;
      }
      while ( v41 );
      memcpy(v40, acStr1, v39);
      v42 = TextData::Get(0x88AF99F5u);
      v43 = v42;
      do
        v44 = *v42++;
      while ( v44 );
      v45 = v42 - v43;
      v46 = v43;
      v47 = &acStr1[255];
      do
      {
        v48 = *((_BYTE *)v47 + 1);
        v47 = (char *)v47 + 1;
      }
      while ( v48 );
      memcpy(v47, v46, v45);
      v49 = &acStr1[255];
      do
        v50 = (v49++)[1];
      while ( v50 );
      *v49 = byte_9C940C;
    }
  }
  v51 = TextData2::Get(0xD0FFFDEEu);
  v52 = fs(v51);
  MsgBox::Modeless(MSGBOX_OK, v52);
  return 1;
}
// 9C93E8: using guessed type char byte_9C93E8;
// 9C93F4: using guessed type char byte_9C93F4;
// 9C9400: using guessed type char byte_9C9400;
// 9C940C: using guessed type char byte_9C940C;
// A85C00: using guessed type int __security_cookie;

//----- (006BF530) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_CHECK_AVAILABILITY_ACK(GuildTask *this, PROTO_NC_GUILD_EMBLEM_CHECK_AVAILABILITY_ACK *pkCmd)
{
  int result; // eax@1
  int v3; // eax@2
  char *v4; // esi@4
  char *v5; // edi@4
  char *v6; // esi@8
  char *v7; // edi@8
  char *v8; // esi@12
  char *v9; // edi@12
  char *v10; // esi@16
  char *v11; // edi@16

  result = (int)pkCmd;
  if ( pkCmd )
  {
    v3 = pkCmd->Error;
    if ( (_WORD)v3 == 14080 )
    {
      result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( result )
      {
        GameFrameWork::GuildEmblemShowWin((GameFrameWork *)result, 1);
LABEL_22:
        result = 1;
      }
    }
    else
    {
      switch ( v3 )
      {
        case 14081:
          v4 = (char *)&this->baseclass_0.baseclass_8;
          v5 = TextData3::Get(0x73A38DDBu);
          if ( *((_DWORD *)v4 + 1) )
          {
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v4 + 1) + 4))(25, v5, v4);
            if ( *((_DWORD *)v4 + 1) )
              (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v4 + 1) + 20))(25, v5, v4);
          }
          (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
          result = 1;
          break;
        case 14082:
          v6 = (char *)&this->baseclass_0.baseclass_8;
          v7 = TextData3::Get(0xC0EE4A29u);
          if ( *((_DWORD *)v6 + 1) )
          {
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v6 + 1) + 4))(25, v7, v6);
            if ( *((_DWORD *)v6 + 1) )
              (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v6 + 1) + 20))(25, v7, v6);
          }
          (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
          result = 1;
          break;
        case 14083:
          v8 = (char *)&this->baseclass_0.baseclass_8;
          v9 = TextData3::Get(0xC44F1605u);
          if ( *((_DWORD *)v8 + 1) )
          {
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v8 + 1) + 4))(25, v9, v8);
            if ( *((_DWORD *)v8 + 1) )
              (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v8 + 1) + 20))(25, v9, v8);
          }
          (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v8 + 20))(v8, 25, v9, v8);
          result = 1;
          break;
        case 14084:
          v10 = (char *)&this->baseclass_0.baseclass_8;
          v11 = TextData3::Get(0x4FA1A77Au);
          if ( *((_DWORD *)v10 + 1) )
          {
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v10 + 1) + 4))(25, v11, v10);
            if ( *((_DWORD *)v10 + 1) )
              (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v10 + 1) + 20))(25, v11, v10);
          }
          (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v10 + 20))(v10, 25, v11, v10);
          result = 1;
          break;
        default:
          goto LABEL_22;
      }
    }
  }
  return result;
}

//----- (006BF6F0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_SAVE_ACK(GuildTask *this, PROTO_NC_GUILD_EMBLEM_SAVE_ACK *pkCmd)
{
  int result; // eax@1
  GuildTask *v3; // esi@1
  int v4; // eax@2
  PgFrameWork *v5; // eax@8
  GuildEmblemWin *v6; // ecx@9
  int v7; // esi@12
  char *v8; // edi@12
  unsigned int v9; // [sp-8h] [bp-Ch]@4

  result = (int)pkCmd;
  v3 = this;
  if ( pkCmd )
  {
    v4 = pkCmd->Error;
    if ( (_WORD)v4 == 14080 )
    {
      v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( !v5 || (v6 = (GuildEmblemWin *)v5[143].m_kMsgQ.m_pBase) == 0 )
        return 0;
      GuildEmblemWin::OnCancelWin(v6);
      v9 = 1939927015;
LABEL_12:
      v7 = (int)&v3->baseclass_0.baseclass_8;
      v8 = TextData3::Get(v9);
      if ( *(_DWORD *)(v7 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 4))(25, v8, v7);
        if ( *(_DWORD *)(v7 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v7 + 4) + 20))(25, v8, v7);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
    }
    else
    {
      switch ( v4 )
      {
        case 14081:
          v9 = 1940098523;
          goto LABEL_12;
        case 14082:
          v9 = -1058125271;
          goto LABEL_12;
        case 14083:
          v9 = -1001449979;
          goto LABEL_12;
        case 14084:
          v9 = 1335994234;
          goto LABEL_12;
        default:
          break;
      }
    }
    result = 1;
  }
  return result;
}

//----- (006BF7D0) --------------------------------------------------------
void __thiscall CClientGuild::ClearHistoryList(CClientGuild *this)
{
  CClientGuild *v1; // edi@1
  NiTListItem<GUILD_HISTORY *> *v2; // esi@1
  int v3; // ebx@2
  void *v4; // eax@3
  NiTListItem<GUILD_HISTORY *> *v5; // esi@6
  NiTListItem<GUILD_HISTORY *> *v6; // ST04_4@7

  v1 = this;
  v2 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( *(_DWORD *)&this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v3 = *(_DWORD *)&this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    do
    {
      v4 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v4 )
        operator delete(v4);
      --v3;
    }
    while ( v3 );
  }
  v5 = v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5;
    v5 = v5->m_pkNext;
    v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *)&v1->m_kHistoryList,
      v6);
  }
  *(_DWORD *)&v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
}

//----- (006BF840) --------------------------------------------------------
void __thiscall GuildTask::_GuildTask(GuildTask *this)
{
  GuildTask *v1; // esi@1
  GuildNameCache *v2; // edi@1
  GuildNameCache *v3; // edi@6
  GuildMemberTask *v4; // edi@10
  NiNode *v5; // edi@14
  NiNode *v6; // edi@18
  NiNode *v7; // edi@22

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTask::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildTask::_vftable_;
  this->baseclass_40.baseclass_0.vfptr = (CGuildVtbl *)&GuildTask::_vftable_;
  v2 = this->m_spGuildNameCache.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spGuildNameCache.m_pObject = 0;
  }
  CClientGuild::ClearHistoryList(&v1->baseclass_40);
  v3 = v1->m_spGuildNameCache.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spGuildMemberTask.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  v5 = v1->m_pGTLoseEffect.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
  v6 = v1->m_pGTWinEffect.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
  v7 = v1->m_pGTStartEffect.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  CClientGuild::_CClientGuild(&v1->baseclass_40);
  ITask::_ITask(&v1->baseclass_0);
}
// 9C949C: using guessed type int (__thiscall *GuildTask___vftable_)(CGuild *this, int pkProto);
// 9C94F0: using guessed type int (__stdcall *GuildTask___vftable_)(int uiFlags);
// 9C950C: using guessed type int (__thiscall *GuildTask___vftable_)(void *p, char);

//----- (006BF9C0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_RESULT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_RESULT_CMD *pkCmd)
{
  int v2; // eax@1
  GuildTask *v3; // ebx@1
  PgFrameWork *v4; // eax@2
  GuildWarInformWin *v5; // esi@3
  D3DXCOLOR *v6; // eax@3
  CClientGuild *v7; // ecx@5
  char *v8; // eax@7
  char *v9; // edx@8
  char v10; // cl@9
  CClientGuild *v11; // ecx@12
  char *v12; // eax@14
  char *v13; // edx@15
  char v14; // cl@16
  char v15; // al@17
  char *v16; // eax@21
  char *v17; // edi@21
  char *v18; // eax@30
  char *v19; // edi@30
  char *v20; // eax@37
  char *v21; // edi@37
  char *v22; // eax@41
  char *v23; // edi@41
  char *v24; // eax@45
  char *v25; // edi@45
  unsigned int v26; // [sp-10h] [bp-6Ch]@18
  D3DXCOLOR result; // [sp+8h] [bp-54h]@3
  char acLoseGuilName[32]; // [sp+18h] [bp-44h]@2
  char acWinGuildName[32]; // [sp+38h] [bp-24h]@2
  unsigned int v30; // [sp+58h] [bp-4h]@1
  int v31; // [sp+5Ch] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  v2 = 0;
  v3 = this;
  if ( !pkCmd->nStatus )
  {
    *(_DWORD *)acWinGuildName = 0;
    *(_DWORD *)&acWinGuildName[4] = 0;
    *(_DWORD *)&acWinGuildName[8] = 0;
    *(_DWORD *)&acWinGuildName[12] = 0;
    *(_DWORD *)&acWinGuildName[16] = 0;
    *(_DWORD *)&acWinGuildName[20] = 0;
    *(_DWORD *)&acWinGuildName[24] = 0;
    *(_DWORD *)&acWinGuildName[28] = 0;
    *(_DWORD *)acLoseGuilName = 0;
    *(_DWORD *)&acLoseGuilName[4] = 0;
    *(_DWORD *)&acLoseGuilName[8] = 0;
    *(_DWORD *)&acLoseGuilName[12] = 0;
    *(_DWORD *)&acLoseGuilName[16] = 0;
    *(_DWORD *)&acLoseGuilName[20] = 0;
    *(_DWORD *)&acLoseGuilName[24] = 0;
    *(_DWORD *)&acLoseGuilName[28] = 0;
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      v5 = (GuildWarInformWin *)v4[31].m_kMsgQ.m_uiHead;
      v6 = ColorInfoTable::GetDxColor(&result, 0);
      GuildWarInformWin::SetColor(v5, v6);
    }
    if ( GuildTask::ms_spGuildTask )
      v7 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
    else
      v7 = 0;
    v8 = CClientGuild::FindGttEnemyInfo(v7, pkCmd->nWinnerGuildNo);
    if ( v8 )
    {
      v9 = (char *)(acWinGuildName - v8);
      do
      {
        v10 = *v8;
        v8[(_DWORD)v9] = *v8;
        ++v8;
      }
      while ( v10 );
    }
    if ( !pkCmd->nLoseGuildNo )
    {
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x7Eu, 0, 0);
      v24 = TextData::Get(0x5F6275A5u);
      v25 = fs(v24);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          46,
          v25,
          &v3->baseclass_0.baseclass_8);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            46,
            v25,
            &v3->baseclass_0.baseclass_8);
      }
      v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v3->baseclass_0.baseclass_8,
        46,
        v25,
        &v3->baseclass_0.baseclass_8);
      return 0;
    }
    if ( GuildTask::ms_spGuildTask )
      v11 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
    else
      v11 = 0;
    v12 = CClientGuild::FindGttEnemyInfo(v11, pkCmd->nLoseGuildNo);
    if ( v12 )
    {
      v13 = (char *)(acLoseGuilName - v12);
      do
      {
        v14 = *v12;
        v12[(_DWORD)v13] = *v12;
        ++v12;
      }
      while ( v14 );
    }
    v15 = pkCmd->nTournamentSeed;
    if ( pkCmd->nTournamentSeed >= 8u )
    {
      if ( (unsigned __int8)v15 > 7u && (unsigned __int8)v15 < 0x10u )
      {
        v16 = TextData::Get(0x13FC594Eu);
        v17 = fs(v16);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            46,
            v17,
            &v3->baseclass_0.baseclass_8);
          if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              46,
              v17,
              &v3->baseclass_0.baseclass_8);
        }
        v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
          &v3->baseclass_0.baseclass_8,
          46,
          v17,
          &v3->baseclass_0.baseclass_8);
        goto LABEL_41;
      }
      if ( (unsigned __int8)v15 <= 0xFu || (unsigned __int8)v15 >= 0x18u )
      {
        if ( (unsigned __int8)v15 > 0x17u && (unsigned __int8)v15 < 0x1Cu )
        {
          v18 = TextData::Get(0xD7CBF230u);
          v19 = fs(v18);
          if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          {
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              46,
              v19,
              &v3->baseclass_0.baseclass_8);
            if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                46,
                v19,
                &v3->baseclass_0.baseclass_8);
          }
          v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
            &v3->baseclass_0.baseclass_8,
            46,
            v19,
            &v3->baseclass_0.baseclass_8);
          goto LABEL_41;
        }
        if ( (unsigned __int8)v15 <= 0x1Bu || (unsigned __int8)v15 >= 0x1Eu )
        {
LABEL_41:
          v22 = TextData::Get(0xDADD1D3Bu);
          v23 = fs(v22);
          if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          {
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              46,
              v23,
              &v3->baseclass_0.baseclass_8);
            if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
              ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                46,
                v23,
                &v3->baseclass_0.baseclass_8);
          }
          v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
            &v3->baseclass_0.baseclass_8,
            46,
            v23,
            &v3->baseclass_0.baseclass_8);
          NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x7Eu, 0, 0);
          return 0;
        }
        v26 = 1719369604;
      }
      else
      {
        v26 = 472124271;
      }
    }
    else
    {
      v26 = 335239502;
    }
    v20 = TextData::Get(v26);
    v21 = fs(v20);
    if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        46,
        v21,
        &v3->baseclass_0.baseclass_8);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          46,
          v21,
          &v3->baseclass_0.baseclass_8);
    }
    v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v3->baseclass_0.baseclass_8,
      46,
      v21,
      &v3->baseclass_0.baseclass_8);
    goto LABEL_41;
  }
  return v2;
}
// A85C00: using guessed type int __security_cookie;
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006BFCF0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_START_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_DICEGAME_START_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  PgFrameWork *v3; // eax@2
  GuildWarInformWin *v4; // edi@3
  D3DXCOLOR *v5; // eax@3
  char *v6; // ebx@4
  int v7; // eax@7
  D3DXCOLOR result; // [sp+4h] [bp-10h]@3

  v2 = this;
  if ( pkCmd )
  {
    this->m_GuildTournamentImprove.m_DiceInfo.AGuild = pkCmd->AGuildRegNumber;
    this->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegate = pkCmd->AGuildDelegate;
    *(_QWORD *)&this->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[0] = *(_QWORD *)&pkCmd->AGuildDelegateName.n5_name[0];
    *(_QWORD *)&this->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[8] = *(_QWORD *)&pkCmd->AGuildDelegateName.n5_name[8];
    *(_DWORD *)&this->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[16] = *(_DWORD *)&pkCmd->AGuildDelegateName.n5_name[16];
    this->m_GuildTournamentImprove.m_DiceInfo.BGuild = pkCmd->BGuildRegNumber;
    this->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegate = pkCmd->BGuildDelegate;
    *(_QWORD *)&this->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[0] = *(_QWORD *)&pkCmd->BGuildDelegateName.n5_name[0];
    *(_QWORD *)&this->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[8] = *(_QWORD *)&pkCmd->BGuildDelegateName.n5_name[8];
    *(_DWORD *)&this->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[16] = *(_DWORD *)&pkCmd->BGuildDelegateName.n5_name[16];
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
    {
      v4 = (GuildWarInformWin *)v3[31].m_kMsgQ.m_uiHead;
      v5 = ColorInfoTable::GetDxColor(&result, 0);
      GuildWarInformWin::SetColor(v4, v5);
    }
    v6 = TextData2::Get(0xAFF00929u);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        46,
        v6,
        &v2->baseclass_0.baseclass_8);
      if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          46,
          v6,
          &v2->baseclass_0.baseclass_8);
    }
    v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v2->baseclass_0.baseclass_8,
      46,
      v6,
      &v2->baseclass_0.baseclass_8);
    GTTDiceWin::InitDice(v2->m_pkGTTDiceWin);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGTTDiceWin->baseclass_0.baseclass_0.baseclass_0);
    v7 = 1;
  }
  else
  {
    v7 = 0;
  }
  return v7;
}

//----- (006BFE40) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_RESULT_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_RESULT_CMD *pkCmd)
{
  GuildTask *v2; // edi@1
  int result; // eax@1
  CClientGuild *v4; // ecx@3
  char *v5; // eax@5
  char *v6; // edx@6
  char v7; // cl@7
  _BYTE v8[20]; // ST00_20@8
  PgFrameWork *v9; // eax@9
  unsigned int v10; // ecx@10
  GuildWarInformWin *v11; // edi@10
  D3DXCOLOR *v12; // eax@13
  int v13; // ecx@14
  int v14; // edx@14
  int v15; // eax@14
  int v16; // ecx@15
  int v17; // edx@15
  int v18; // eax@15
  int v19; // ecx@15
  int v20; // edx@15
  int v21; // eax@15
  int v22; // ecx@15
  int v23; // ecx@16
  int v24; // edx@16
  int v25; // eax@16
  int v26; // ecx@16
  int v27; // edx@16
  int v28; // eax@16
  int v29; // ecx@16
  char *v30; // eax@17
  char *v31; // edi@17
  unsigned int v32; // [sp-10h] [bp-78h]@15
  D3DXCOLOR *v33; // [sp-8h] [bp-70h]@11
  ColorID v34; // [sp-4h] [bp-6Ch]@11
  Char *pkChar; // [sp+Ch] [bp-5Ch]@8
  GuildTask *v36; // [sp+10h] [bp-58h]@1
  char acCaptureGuildName[32]; // [sp+14h] [bp-54h]@2
  char acName[21]; // [sp+34h] [bp-34h]@14
  char acName2[21]; // [sp+4Ch] [bp-1Ch]@11
  unsigned int v40; // [sp+64h] [bp-4h]@1
  int v41; // [sp+68h] [bp+0h]@1

  v40 = (unsigned int)&v41 ^ __security_cookie;
  v2 = this;
  result = 0;
  v36 = this;
  if ( pkCmd )
  {
    *(_DWORD *)acCaptureGuildName = 0;
    *(_DWORD *)&acCaptureGuildName[4] = 0;
    *(_DWORD *)&acCaptureGuildName[8] = 0;
    *(_DWORD *)&acCaptureGuildName[12] = 0;
    *(_DWORD *)&acCaptureGuildName[16] = 0;
    *(_DWORD *)&acCaptureGuildName[20] = 0;
    *(_DWORD *)&acCaptureGuildName[24] = 0;
    *(_DWORD *)&acCaptureGuildName[28] = 0;
    if ( GuildTask::ms_spGuildTask )
      v4 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
    else
      v4 = 0;
    v5 = CClientGuild::FindGttEnemyInfo(v4, pkCmd->gRegGuildNo);
    if ( v5 )
    {
      v6 = (char *)(acCaptureGuildName - v5);
      do
      {
        v7 = *v5;
        v5[(_DWORD)v6] = *v5;
        ++v5;
      }
      while ( v7 );
    }
    *(_DWORD *)v8 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[0];
    *(_QWORD *)&v8[4] = *(_QWORD *)&pkCmd->CIDPlayer.n5_name[4];
    *(_QWORD *)&v8[12] = *(_QWORD *)&pkCmd->CIDPlayer.n5_name[12];
    pkChar = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v8);
    if ( pkCmd->gRegGuildNo )
    {
      v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v9 )
      {
        v10 = v2->m_GuildTournamentImprove.m_BlueTeam;
        v11 = (GuildWarInformWin *)v9[31].m_kMsgQ.m_uiHead;
        if ( v10 == pkCmd->gRegGuildNo )
        {
          v34 = 1;
          v33 = (D3DXCOLOR *)&acName2[4];
        }
        else
        {
          v34 = 0;
          v33 = (D3DXCOLOR *)&acName2[4];
        }
        v12 = ColorInfoTable::GetDxColor(v33, v34);
        GuildWarInformWin::SetColor(v11, v12);
      }
      v13 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[0];
      v14 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[4];
      v15 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[8];
      acName[20] = 0;
      acName2[20] = 0;
      if ( pkCmd->gRegFlagCaptureGuild )
      {
        *(_DWORD *)acName2 = v13;
        v23 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[12];
        *(_DWORD *)&acName2[4] = v14;
        v24 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[16];
        *(_DWORD *)&acName2[8] = v15;
        v25 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[0];
        *(_DWORD *)&acName2[12] = v23;
        v26 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[4];
        *(_DWORD *)&acName2[16] = v24;
        v27 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[8];
        *(_DWORD *)acName = v25;
        v28 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[12];
        *(_DWORD *)&acName[4] = v26;
        v29 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[16];
        *(_DWORD *)&acName[8] = v27;
        *(_DWORD *)&acName[12] = v28;
        *(_DWORD *)&acName[16] = v29;
        v32 = 542672007;
      }
      else
      {
        *(_DWORD *)acName = v13;
        v16 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[12];
        *(_DWORD *)&acName[4] = v14;
        v17 = *(_DWORD *)&pkCmd->CIDPlayer.n5_name[16];
        *(_DWORD *)&acName[8] = v15;
        v18 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[0];
        *(_DWORD *)&acName[12] = v16;
        v19 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[4];
        *(_DWORD *)&acName[16] = v17;
        v20 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[8];
        *(_DWORD *)acName2 = v18;
        v21 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[12];
        *(_DWORD *)&acName2[4] = v19;
        v22 = *(_DWORD *)&pkCmd->CIDFlag.n5_name[16];
        *(_DWORD *)&acName2[8] = v20;
        *(_DWORD *)&acName2[12] = v21;
        *(_DWORD *)&acName2[16] = v22;
        v32 = 341058918;
      }
      v30 = TextData2::Get(v32);
      v31 = fs(v30);
      if ( v36->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v36->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          46,
          v31,
          &v36->baseclass_0.baseclass_8);
        if ( v36->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v36->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            46,
            v31,
            &v36->baseclass_0.baseclass_8);
      }
      v36->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v36->baseclass_0.baseclass_8,
        46,
        v31,
        &v36->baseclass_0.baseclass_8);
      if ( pkChar )
        Char::StopFlagCapture(pkChar);
    }
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C0030) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_USESKILL_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_USESKILL_CMD *pkCmd)
{
  int v2; // eax@1
  GuildTask *v3; // ebx@1
  CClientGuild *v4; // ecx@3
  char *v5; // eax@5
  char *v6; // edx@6
  char v7; // cl@7
  PgFrameWork *v8; // eax@9
  GuildWarInformWin *v9; // edi@10
  D3DXCOLOR *v10; // eax@10
  char *v11; // eax@11
  char *v12; // edi@11
  D3DXCOLOR result; // [sp+8h] [bp-34h]@10
  char acGuildName[32]; // [sp+18h] [bp-24h]@2
  unsigned int v15; // [sp+38h] [bp-4h]@1
  int v16; // [sp+3Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v2 = 0;
  v3 = this;
  if ( pkCmd )
  {
    *(_DWORD *)acGuildName = 0;
    *(_DWORD *)&acGuildName[4] = 0;
    *(_DWORD *)&acGuildName[8] = 0;
    *(_DWORD *)&acGuildName[12] = 0;
    *(_DWORD *)&acGuildName[16] = 0;
    *(_DWORD *)&acGuildName[20] = 0;
    *(_DWORD *)&acGuildName[24] = 0;
    *(_DWORD *)&acGuildName[28] = 0;
    if ( GuildTask::ms_spGuildTask )
      v4 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
    else
      v4 = 0;
    v5 = CClientGuild::FindGttEnemyInfo(v4, pkCmd->regGuildNumber);
    if ( v5 )
    {
      v6 = (char *)(acGuildName - v5);
      do
      {
        v7 = *v5;
        v5[(_DWORD)v6] = *v5;
        ++v5;
      }
      while ( v7 );
    }
    if ( GuildTournamentStateDescTab::GetIndex(pkCmd->wUseSkillNumber) )
    {
      v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v8 )
      {
        v9 = (GuildWarInformWin *)v8[31].m_kMsgQ.m_uiHead;
        v10 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
        GuildWarInformWin::SetColor(v9, v10);
      }
      v11 = TextData2::Get(0x9A889ED5u);
      v12 = fs(v11);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          46,
          v12,
          &v3->baseclass_0.baseclass_8);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            46,
            v12,
            &v3->baseclass_0.baseclass_8);
      }
      v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v3->baseclass_0.baseclass_8,
        46,
        v12,
        &v3->baseclass_0.baseclass_8);
    }
    v2 = 0;
  }
  return v2;
}
// A85C00: using guessed type int __security_cookie;
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C0150) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENTSTOPMSG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENTSTOPMSG_CMD *pkCmd)
{
  int v2; // edi@0
  GuildTask *v3; // ebx@1
  PgFrameWork *v4; // eax@2
  GuildWarInformWin *v5; // edi@3
  D3DXCOLOR *v6; // eax@3
  unsigned int v7; // eax@8
  NiNode *v8; // eax@9
  CClientGuild *v9; // ecx@10
  char *v10; // eax@12
  char *v11; // edx@13
  char v12; // cl@14
  CClientGuild *v13; // ecx@16
  char *v14; // eax@18
  char *v15; // edx@19
  char v16; // cl@20
  char *v17; // eax@22
  char *v18; // edi@22
  NiNode *v19; // eax@28
  CClientGuild *v20; // ecx@29
  char *v21; // eax@31
  char *v22; // edx@32
  char v23; // cl@33
  CClientGuild *v24; // ecx@35
  char *v25; // eax@37
  char *v26; // edx@38
  char v27; // cl@39
  char *v28; // eax@41
  char *v29; // edi@41
  char *v30; // eax@45
  MsgBox *v31; // eax@45
  unsigned int v33; // [sp-8h] [bp-74h]@26
  int v34; // [sp+8h] [bp-64h]@2
  D3DXCOLOR result; // [sp+18h] [bp-54h]@3
  char acAGuildName[32]; // [sp+28h] [bp-44h]@9
  char acBGuildName[32]; // [sp+48h] [bp-24h]@9
  unsigned int v38; // [sp+68h] [bp-4h]@1
  int v39; // [sp+6Ch] [bp+0h]@1

  v38 = (unsigned int)&v39 ^ __security_cookie;
  v3 = this;
  if ( pkCmd )
  {
    v34 = v2;
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v4 )
    {
      v5 = (GuildWarInformWin *)v4[31].m_kMsgQ.m_uiHead;
      v6 = ColorInfoTable::GetDxColor(&result, 0);
      GuildWarInformWin::SetColor(v5, v6);
    }
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkGTTDiceWin->baseclass_0.baseclass_0.baseclass_0);
    if ( (unsigned __int8)((int (__stdcall *)(int))v3->m_pkGTStatusMiniWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v34) )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->m_pkGTStatusMiniWin->baseclass_0.baseclass_0.baseclass_0);
    if ( v3->m_pkGTStatusWin )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v3->m_pkGTStatusWin->baseclass_0.baseclass_0.baseclass_0);
    v7 = g_pkMainChar->m_dwGuildRegNum;
    if ( v7 == pkCmd->WinnerGuild )
    {
      v8 = v3->m_pGTWinEffect.m_pObject;
      result.g = (double)(PgWin::ms_uiScreenWidth >> 1);
      result.b = -500.0;
      v8->baseclass_0.m_kLocal.m_Translate.x = result.g;
      result.a = 0.0;
      v8->baseclass_0.m_kLocal.m_Translate.y = -500.0;
      v8->baseclass_0.m_kLocal.m_Translate.z = result.a;
      PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &v3->m_pGTWinEffect.m_pObject->baseclass_0);
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, "GuildTWin");
      *(_DWORD *)acAGuildName = 0;
      *(_DWORD *)&acAGuildName[4] = 0;
      *(_DWORD *)&acAGuildName[8] = 0;
      *(_DWORD *)&acAGuildName[12] = 0;
      *(_DWORD *)&acAGuildName[16] = 0;
      *(_DWORD *)&acAGuildName[20] = 0;
      *(_DWORD *)&acAGuildName[24] = 0;
      *(_DWORD *)&acAGuildName[28] = 0;
      *(_DWORD *)acBGuildName = 0;
      *(_DWORD *)&acBGuildName[4] = 0;
      *(_DWORD *)&acBGuildName[8] = 0;
      *(_DWORD *)&acBGuildName[12] = 0;
      *(_DWORD *)&acBGuildName[16] = 0;
      *(_DWORD *)&acBGuildName[20] = 0;
      *(_DWORD *)&acBGuildName[24] = 0;
      *(_DWORD *)&acBGuildName[28] = 0;
      if ( GuildTask::ms_spGuildTask )
        v9 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
      else
        v9 = 0;
      v10 = CClientGuild::FindGttEnemyInfo(v9, pkCmd->AGuildRegNumber);
      if ( v10 )
      {
        v11 = (char *)(acAGuildName - v10);
        do
        {
          v12 = *v10;
          v11[(_DWORD)v10] = *v10;
          ++v10;
        }
        while ( v12 );
      }
      if ( GuildTask::ms_spGuildTask )
        v13 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
      else
        v13 = 0;
      v14 = CClientGuild::FindGttEnemyInfo(v13, pkCmd->BGuildRegNumber);
      if ( v14 )
      {
        v15 = (char *)(acBGuildName - v14);
        do
        {
          v16 = *v14;
          v15[(_DWORD)v14] = *v14;
          ++v14;
        }
        while ( v16 );
      }
      if ( g_pkMainChar->m_dwGuildRegNum == pkCmd->AGuildRegNumber )
      {
        v17 = TextData2::Get(0xE303073Du);
        v18 = fs(v17);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            46,
            v18,
            &v3->baseclass_0.baseclass_8);
          if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              46,
              v18,
              &v3->baseclass_0.baseclass_8);
        }
        v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
          &v3->baseclass_0.baseclass_8,
          46,
          v18,
          &v3->baseclass_0.baseclass_8);
        goto LABEL_45;
      }
      v33 = -486340803;
    }
    else
    {
      if ( v7 != pkCmd->LoseGuild )
      {
LABEL_45:
        v30 = TextData2::Get(0x8495E9CDu);
        v31 = MsgBox::Modeless(MSGBOX_OKCANCEL, v30);
        ((void (__cdecl *)(IDirectMessenger *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v3->baseclass_0.baseclass_8);
        v3->m_bGTQuit = 1;
        return 0;
      }
      v19 = v3->m_pGTLoseEffect.m_pObject;
      result.g = (double)(PgWin::ms_uiScreenWidth >> 1);
      result.b = -500.0;
      v19->baseclass_0.m_kLocal.m_Translate.x = result.g;
      result.a = 0.0;
      v19->baseclass_0.m_kLocal.m_Translate.y = -500.0;
      v19->baseclass_0.m_kLocal.m_Translate.z = result.a;
      PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &v3->m_pGTLoseEffect.m_pObject->baseclass_0);
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, "GuildTSLose");
      *(_DWORD *)acBGuildName = 0;
      *(_DWORD *)&acBGuildName[4] = 0;
      *(_DWORD *)&acBGuildName[8] = 0;
      *(_DWORD *)&acBGuildName[12] = 0;
      *(_DWORD *)&acBGuildName[16] = 0;
      *(_DWORD *)&acBGuildName[20] = 0;
      *(_DWORD *)&acBGuildName[24] = 0;
      *(_DWORD *)&acBGuildName[28] = 0;
      *(_DWORD *)acAGuildName = 0;
      *(_DWORD *)&acAGuildName[4] = 0;
      *(_DWORD *)&acAGuildName[8] = 0;
      *(_DWORD *)&acAGuildName[12] = 0;
      *(_DWORD *)&acAGuildName[16] = 0;
      *(_DWORD *)&acAGuildName[20] = 0;
      *(_DWORD *)&acAGuildName[24] = 0;
      *(_DWORD *)&acAGuildName[28] = 0;
      if ( GuildTask::ms_spGuildTask )
        v20 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
      else
        v20 = 0;
      v21 = CClientGuild::FindGttEnemyInfo(v20, pkCmd->AGuildRegNumber);
      if ( v21 )
      {
        v22 = (char *)(acBGuildName - v21);
        do
        {
          v23 = *v21;
          v22[(_DWORD)v21] = *v21;
          ++v21;
        }
        while ( v23 );
      }
      if ( GuildTask::ms_spGuildTask )
        v24 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
      else
        v24 = 0;
      v25 = CClientGuild::FindGttEnemyInfo(v24, pkCmd->BGuildRegNumber);
      if ( v25 )
      {
        v26 = (char *)(acAGuildName - v25);
        do
        {
          v27 = *v25;
          v26[(_DWORD)v25] = *v25;
          ++v25;
        }
        while ( v27 );
      }
      v33 = -485870514;
    }
    v28 = TextData2::Get(v33);
    v29 = fs(v28);
    if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        46,
        v29,
        &v3->baseclass_0.baseclass_8);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          46,
          v29,
          &v3->baseclass_0.baseclass_8);
    }
    v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v3->baseclass_0.baseclass_8,
      46,
      v29,
      &v3->baseclass_0.baseclass_8);
    goto LABEL_45;
  }
  return 0;
}
// 6C0150: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C0550) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_NOTIFY_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_NOTIFY_CMD *pkCmd)
{
  PgFrameWork *v2; // edi@2
  D3DXCOLOR *v3; // eax@4
  D3DXCOLOR v4; // ST08_16@4
  char *v5; // eax@4
  bool v7; // zf@8
  int v8; // edx@8
  int v9; // eax@8
  int v10; // ecx@8
  D3DXCOLOR *v11; // eax@9
  D3DXCOLOR v12; // ST08_16@9
  char *v13; // eax@9
  char *v14; // eax@9
  D3DXCOLOR result; // [sp+8h] [bp-28h]@4
  char acName[17]; // [sp+18h] [bp-18h]@8
  unsigned int v17; // [sp+2Ch] [bp-4h]@1
  int v18; // [sp+30h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  if ( !pkCmd )
    return 0;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( pkCmd->Type == 1 )
  {
    if ( v2 )
    {
      v3 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
      *(_QWORD *)&v4.r = *(_QWORD *)&v3->r;
      *(_QWORD *)&v4.b = *(_QWORD *)&v3->b;
      v5 = TextData2::Get(0x80E5D3CFu);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v2, v5, COERCE_D3DXCOLOR(v4.r));
    }
    return 1;
  }
  if ( pkCmd->Type != 2 || !v2 )
    return 0;
  v7 = pkCmd->nRanking == 1;
  v8 = *(_DWORD *)&pkCmd->sGuildName.n4_name[4];
  v9 = *(_DWORD *)&pkCmd->sGuildName.n4_name[8];
  *(_DWORD *)acName = *(_DWORD *)&pkCmd->sGuildName.n4_name[0];
  v10 = *(_DWORD *)&pkCmd->sGuildName.n4_name[12];
  *(_DWORD *)&acName[4] = v8;
  *(_DWORD *)&acName[8] = v9;
  *(_DWORD *)&acName[12] = v10;
  acName[16] = 0;
  if ( v7 )
  {
    v11 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    *(_QWORD *)&v12.r = *(_QWORD *)&v11->r;
    *(_QWORD *)&v12.b = *(_QWORD *)&v11->b;
    v13 = TextData2::Get(0xF4013244u);
    v14 = fs(v13);
    GameFrameWork::AddAnnounceMsg((GameFrameWork *)v2, v14, COERCE_D3DXCOLOR(v12.r));
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C0690) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_FLAG_CMD(GuildTask *this, PROTO_NC_GUILD_TOURNAMENT_ITEM_FLAG_CMD *pkCmd)
{
  GuildTask *v2; // esi@1
  PgFrameWork *v3; // edi@1
  CClientGuild *v4; // ecx@2
  GuildWarInformWin *v5; // edi@5
  D3DXCOLOR *v6; // eax@5
  unsigned int v7; // eax@6
  PgWin *v8; // eax@9
  char *v9; // eax@14
  int v10; // esi@14
  char *v11; // edi@14
  PgWin *v13; // eax@19
  PgWin *v14; // eax@27
  PgWin *v15; // eax@34
  char *v16; // eax@40
  int v17; // esi@40
  char *v18; // edi@40
  unsigned int v19; // [sp-8h] [bp-24h]@32
  D3DXCOLOR result; // [sp+Ch] [bp-10h]@5

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( GuildTask::ms_spGuildTask )
    v4 = (CClientGuild *)(GuildTask::ms_spGuildTask + 64);
  else
    v4 = 0;
  CClientGuild::FindGttEnemyInfo(v4, pkCmd->nGuildRegNo);
  if ( v3 )
  {
    v5 = (GuildWarInformWin *)v3[31].m_kMsgQ.m_uiHead;
    v6 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    GuildWarInformWin::SetColor(v5, v6);
  }
  v7 = pkCmd->nGuildRegNo;
  if ( v7 != g_pkMainChar->m_dwGuildRegNum )
  {
    if ( pkCmd->FlagScoreMultiple <= 1u )
    {
      if ( v2->m_GuildTournamentImprove.m_BlueTeam == v7 )
      {
        v15 = (PgWin *)v2->m_pkGTIBlueFlagWin;
      }
      else
      {
        if ( v2->m_GuildTournamentImprove.m_RedTeam != v7 )
          goto LABEL_39;
        v15 = (PgWin *)v2->m_pkGTIRedFlagWin;
      }
      if ( v15 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v15);
      goto LABEL_39;
    }
    if ( v2->m_GuildTournamentImprove.m_BlueTeam == v7 )
    {
      v14 = (PgWin *)v2->m_pkGTIBlueFlagWin;
    }
    else
    {
      if ( v2->m_GuildTournamentImprove.m_RedTeam != v7 )
      {
LABEL_32:
        v19 = 556302468;
        goto LABEL_40;
      }
      v14 = (PgWin *)v2->m_pkGTIRedFlagWin;
    }
    if ( v14 )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v14);
    goto LABEL_32;
  }
  if ( pkCmd->FlagScoreMultiple > 1u )
  {
    if ( v2->m_GuildTournamentImprove.m_BlueTeam == v7 )
    {
      v8 = (PgWin *)v2->m_pkGTIBlueFlagWin;
    }
    else
    {
      if ( v2->m_GuildTournamentImprove.m_RedTeam != v7 )
      {
LABEL_14:
        v9 = TextData2::Get(0x21288084u);
        v10 = (int)&v2->baseclass_0.baseclass_8;
        v11 = fs(v9);
        if ( *(_DWORD *)(v10 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 4))(46, v11, v10);
          if ( *(_DWORD *)(v10 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 20))(46, v11, v10);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v10 + 20))(v10, 46, v11, v10);
        return 0;
      }
      v8 = (PgWin *)v2->m_pkGTIRedFlagWin;
    }
    if ( v8 )
      PgWinMgr::ShowWin(&Pgg_kWinMgr, v8);
    goto LABEL_14;
  }
  if ( v2->m_GuildTournamentImprove.m_BlueTeam == v7 )
  {
    v13 = (PgWin *)v2->m_pkGTIBlueFlagWin;
    goto LABEL_22;
  }
  if ( v2->m_GuildTournamentImprove.m_RedTeam == v7 )
  {
    v13 = (PgWin *)v2->m_pkGTIRedFlagWin;
LABEL_22:
    if ( v13 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, v13);
  }
LABEL_39:
  v19 = 606215730;
LABEL_40:
  v16 = TextData2::Get(v19);
  v17 = (int)&v2->baseclass_0.baseclass_8;
  v18 = fs(v16);
  if ( *(_DWORD *)(v17 + 4) )
  {
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v17 + 4) + 4))(46, v18, v17);
    if ( *(_DWORD *)(v17 + 4) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v17 + 4) + 20))(46, v18, v17);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v17 + 20))(v17, 46, v18, v17);
  return 0;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C08A0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_HISTORY_LIST_ACK(GuildTask *this, PROTO_NC_GUILD_HISTORY_LIST_ACK *pkCmd)
{
  int v2; // eax@1
  GuildTask *v3; // ebx@1
  int v4; // eax@2
  int v5; // eax@3
  char *v6; // eax@5
  void *v7; // edi@6
  int result; // eax@10
  void *v9; // esi@13
  PROTO_NC_GUILD_HISTORY_LIST_ACK *v10; // edi@14
  void *v11; // eax@16
  int v12; // eax@18
  NiTListItem<GUILD_HISTORY *> *v13; // ecx@18
  int pkCmda; // [sp+14h] [bp+8h]@14

  v2 = pkCmd->Error;
  v3 = this;
  if ( (_WORD)v2 != 12672 )
  {
    v4 = v2 - 12674;
    if ( !v4 )
    {
      v6 = TextData2::Get(0x2F777071u);
      goto LABEL_6;
    }
    v5 = v4 - 1;
    if ( !v5 )
    {
      v6 = TextData2::Get(0xE76F7C79u);
      goto LABEL_6;
    }
    if ( v5 == 1 )
    {
      v6 = TextData3::Get(0x3716797u);
LABEL_6:
      v7 = v6;
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v6,
          &v3->baseclass_0.baseclass_8);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, void *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v7,
            &v3->baseclass_0.baseclass_8);
      }
      v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v3->baseclass_0.baseclass_8,
        25,
        v7,
        &v3->baseclass_0.baseclass_8);
    }
    return 1;
  }
  CClientGuild::ClearHistoryList(&this->baseclass_40);
  v9 = 0;
  if ( !pkCmd->HistoryCount )
    return 1;
  v10 = pkCmd + 3;
  pkCmda = pkCmd->HistoryCount;
  while ( 1 )
  {
    v11 = operator new(0x20u);
    if ( v11 != v9 )
    {
      *((_DWORD *)v11 + 6) = v9;
      *((_DWORD *)v11 + 5) = v9;
      *((_DWORD *)v11 + 4) = v9;
      *((_DWORD *)v11 + 3) = v9;
      *((_DWORD *)v11 + 2) = v9;
      v9 = v11;
    }
    *(_DWORD *)v9 = *(_DWORD *)&v10[-2].Error;
    *((_DWORD *)v9 + 1) = *((_DWORD *)&v10[-1] - 1);
    *((_DWORD *)v9 + 2) = *(_DWORD *)&v10[-1].Error;
    *((_DWORD *)v9 + 3) = *((_DWORD *)v10 - 1);
    *((_DWORD *)v9 + 4) = *(_DWORD *)&v10->Error;
    *((_DWORD *)v9 + 5) = *(_DWORD *)&v10->HistoryCount;
    *((_DWORD *)v9 + 6) = *(_DWORD *)&v10[1].Error;
    *((_DWORD *)v9 + 7) = *(_DWORD *)&v10[1].HistoryCount;
    v12 = (int)v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *)&v3->baseclass_40.m_kHistoryList);
    *(_DWORD *)(v12 + 8) = v9;
    *(_DWORD *)v12 = 0;
    *(_DWORD *)(v12 + 4) = v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v13 = v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v13 )
      v13->m_pkNext = (NiTListItem<GUILD_HISTORY *> *)v12;
    else
      v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<GUILD_HISTORY *> *)v12;
    v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<GUILD_HISTORY *> *)v12;
    result = 1;
    ++*(_DWORD *)&v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v10 += 4;
    --pkCmda;
    if ( !pkCmda )
      break;
    v9 = 0;
  }
  return result;
}

//----- (006C0A00) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_OFF_MSG_CMD(GuildTask *this, PROTO_NC_GUILD_EMBLEM_OFF_MSG_CMD *pkCmd)
{
  int v2; // eax@2
  PgFrameWork *v3; // edi@3
  D3DXCOLOR *v4; // eax@4
  D3DXCOLOR v5; // ST0C_16@4
  char *v6; // eax@4
  char *v7; // eax@4
  D3DXCOLOR result; // [sp+8h] [bp-10h]@4

  if ( pkCmd && (v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)) != 0 )
  {
    v4 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    *(_QWORD *)&v5.r = *(_QWORD *)&v4->r;
    *(_QWORD *)&v5.b = *(_QWORD *)&v4->b;
    v6 = TextData3::Get(0xC8F15C18u);
    v7 = fs(v6);
    GameFrameWork::AddAnnounceMsg((GameFrameWork *)v3, v7, COERCE_D3DXCOLOR(v5.r));
    v2 = 1;
  }
  else
  {
    v2 = 0;
  }
  return v2;
}

//----- (006C0A90) --------------------------------------------------------
bool __thiscall GuildNameCache::OnProcessNetMsg(GuildNameCache *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildNameCache *v5; // edi@1
  bool result; // al@3
  void *v7; // esi@4
  int v8; // eax@4

  v5 = this;
  if ( iDepart == 29 && iCommand == 119 )
  {
    v7 = pvData;
    v8 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                       (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_kGuildNameCache,
                       (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&iDepart,
                       (const unsigned int *)pvData)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *)v8 != v5->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      if ( !*(_DWORD *)(*(_DWORD *)(v8 + 16) + 16) )
      {
        v0 = *((_DWORD *)v7 + 1);
        v4 = *((_DWORD *)v7 + 2);
        ::v8 = *((_DWORD *)v7 + 3);
        vC = *((_DWORD *)v7 + 4);
        v10 = 1;
        v14 = *((_WORD *)v7 + 10);
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006C0B00) --------------------------------------------------------
void __thiscall GuildNameCache::_GuildNameCache(GuildNameCache *this)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *v1; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *v3; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *j; // eax@6
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *i; // eax@9
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *v6; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *v7; // ebx@14
  char *v8; // esi@14
  std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *v9; // edi@14
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v10; // ST08_4@16
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v11; // ST04_4@16
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@16
  char *v13; // [sp+4h] [bp-14h]@16
  GuildNameCache *v14; // [sp+8h] [bp-10h]@1
  int v15; // [sp+14h] [bp-4h]@1

  v14 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNameCache::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildNameCache::_vftable_;
  v1 = this->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v2 = v1->_Left;
  v15 = 1;
  if ( v2 != v1 )
  {
    do
    {
      if ( v2->_Myval.baseclass_0.second )
      {
        operator delete(v2->_Myval.baseclass_0.second);
        this = v14;
      }
      if ( !v2->_Isnil )
      {
        v3 = v2->_Right;
        if ( v3->_Isnil )
        {
          for ( i = v2->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v2 != i->_Right )
              break;
            v2 = i;
          }
          v2 = i;
        }
        else
        {
          v2 = v2->_Right;
          for ( j = v3->_Left; !j->_Isnil; j = j->_Left )
            v2 = j;
        }
      }
    }
    while ( v2 != this->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  v6 = this->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = (char *)&this->m_kGuildNameCache;
  v9 = v6->_Parent;
  if ( !v7->_Isnil )
  {
    do
    {
      std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Erase(
        (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v8,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v9->_Right);
      v9 = v9->_Left;
      operator delete(v7);
      v7 = v9;
    }
    while ( !v9->_Isnil );
  }
  *(_DWORD *)(*((_DWORD *)v8 + 1) + 4) = *((_DWORD *)v8 + 1);
  **((_DWORD **)v8 + 1) = *((_DWORD *)v8 + 1);
  *(_DWORD *)(*((_DWORD *)v8 + 1) + 8) = *((_DWORD *)v8 + 1);
  *((_DWORD *)v8 + 2) = 0;
  v13 = v8;
  v10 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)*((_DWORD *)v8 + 1);
  v11 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**((_DWORD **)v8 + 1);
  LOBYTE(v15) = 2;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v8,
    &result,
    v11,
    v10);
  operator delete(*((void **)v8 + 1));
  v15 = -1;
  ITask::_ITask(&v14->baseclass_0);
}
// 9C9524: using guessed type int (__stdcall *GuildNameCache___vftable_)(int uiFlags);
// 9C9540: using guessed type int (__thiscall *GuildNameCache___vftable_)(void *p, char);

//----- (006C0C40) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_MOBGUILD_CMD(GuildTask *this, PROTO_NC_GUILD_MOBGUILD_CMD *pkCmd)
{
  unsigned __int16 v2; // bx@1
  unsigned int v3; // edi@1
  CGuildMonster *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v5; // eax@3
  std::pair<unsigned short const ,unsigned long> _Val; // [sp+Ch] [bp-8h]@1

  v2 = pkCmd->mobhandle;
  v3 = pkCmd->mobguild;
  pkCmd = (PROTO_NC_GUILD_MOBGUILD_CMD *)pkCmd->mobhandle;
  v4 = CGuildMonster::GetInstance();
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *)v4,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&_Val.baseclass_0.second,
    (const unsigned __int16 *)&pkCmd);
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)_Val.baseclass_0.second != v4->m_mapGuildMob.baseclass_0.baseclass_0.baseclass_0._Myhead )
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v4,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&pkCmd,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)_Val.baseclass_0.second);
  _Val.baseclass_0.first = v2;
  _Val.baseclass_0.second = v3;
  v5 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
         &v4->m_mapGuildMob.baseclass_0.baseclass_0,
         &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
    &v4->m_mapGuildMob.baseclass_0,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
    v5,
    0);
  return 1;
}

//----- (006C0CB0) --------------------------------------------------------
char *__thiscall GuildNameCache::GetGuildName(GuildNameCache *this, unsigned int dwRegNum)
{
  GuildNameCache *v2; // esi@1
  std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *v3; // edi@1
  int v4; // eax@1
  void *v5; // eax@2
  unsigned int v6; // esi@3
  PROTO_NC_GUILD_NAME_REQ kReq; // [sp+8h] [bp-1Ch]@1
  char acName[17]; // [sp+Ch] [bp-18h]@8
  unsigned int v10; // [sp+20h] [bp-4h]@1
  int v11; // [sp+24h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = this;
  v3 = (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&this->m_kGuildNameCache;
  v4 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                     (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_kGuildNameCache,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&kReq,
                     &dwRegNum)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *)v4 == v2->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v5 = operator new(0x18u);
    if ( v5 )
    {
      *((_DWORD *)v5 + 3) = 0;
      *((_DWORD *)v5 + 2) = 0;
      *((_DWORD *)v5 + 1) = 0;
      *(_DWORD *)v5 = 0;
      v6 = (unsigned int)v5;
    }
    else
    {
      v6 = 0;
    }
    *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
       v3,
       &dwRegNum) = v6;
    *(_DWORD *)(v6 + 16) = 0;
    *(_DWORD *)v6 = 0;
    *(_DWORD *)(v6 + 4) = 0;
    *(_DWORD *)(v6 + 8) = 0;
    *(_DWORD *)(v6 + 12) = 0;
    kReq.nNo = dwRegNum;
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x76u, &kReq, 4);
    return 0;
  }
  if ( *(_DWORD *)(*(_DWORD *)(v4 + 16) + 16) != 1 )
    return 0;
  *(_DWORD *)&acName[4] = ::v5;
  *(_DWORD *)acName = v1;
  *(_DWORD *)&acName[8] = v9;
  *(_DWORD *)&acName[12] = vD;
  acName[16] = 0;
  return fs("%s");
}
// A85C00: using guessed type int __security_cookie;

//----- (006C0DA0) --------------------------------------------------------
void __thiscall GuildNameCache::SetGuildName(GuildNameCache *this, unsigned int dwRegNum, Name4 *rkName)
{
  std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *v3; // edi@1
  void *v4; // eax@2
  unsigned int v5; // esi@2
  Name4 *v6; // eax@4
  unsigned int *v7; // eax@5
  Name4 *v8; // ecx@5
  unsigned int v9; // eax@5
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+8h] [bp-4h]@1

  v3 = (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&this->m_kGuildNameCache;
  if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_kGuildNameCache, &result, &dwRegNum)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == this->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v4 = operator new(0x18u);
    v5 = 0;
    if ( v4 )
    {
      *((_DWORD *)v4 + 3) = 0;
      *((_DWORD *)v4 + 2) = 0;
      *((_DWORD *)v4 + 1) = 0;
      *(_DWORD *)v4 = 0;
      v5 = (unsigned int)v4;
    }
    v6 = rkName;
    *(_DWORD *)(v5 + 16) = 1;
    *(_DWORD *)v5 = *(_DWORD *)&v6->n4_name[0];
    *(_DWORD *)(v5 + 4) = *(_DWORD *)&v6->n4_name[4];
    *(_DWORD *)(v5 + 8) = *(_DWORD *)&v6->n4_name[8];
    *(_DWORD *)(v5 + 12) = *(_DWORD *)&v6->n4_name[12];
    *std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
       v3,
       &dwRegNum) = v5;
    *(_WORD *)(v5 + 20) = -1;
  }
  else
  {
    v7 = std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
           v3,
           &dwRegNum);
    v8 = rkName;
    v9 = *v7;
    *(_DWORD *)v9 = *(_DWORD *)&rkName->n4_name[0];
    *(_DWORD *)(v9 + 4) = *(_DWORD *)&v8->n4_name[4];
    *(_DWORD *)(v9 + 8) = *(_DWORD *)&v8->n4_name[8];
    *(_DWORD *)(v9 + 12) = *(_DWORD *)&v8->n4_name[12];
  }
}

//----- (006C0E50) --------------------------------------------------------
GUILD_EMBLEM_INFO *__thiscall GuildNameCache::GetGuildEmblem(GuildNameCache *this, unsigned int dwRegNum)
{
  GuildNameCache *v2; // esi@1
  std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *v3; // edi@1
  int v4; // eax@1
  void *v5; // eax@2
  void *v6; // esi@3
  unsigned int *v7; // eax@5
  unsigned int v8; // ecx@5
  PROTO_NC_GUILD_NAME_REQ kReq; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&this->m_kGuildNameCache;
  v4 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                     (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_kGuildNameCache,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&kReq,
                     &dwRegNum)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *)v4 == v2->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v5 = operator new(0x18u);
    if ( v5 )
    {
      *((_DWORD *)v5 + 3) = 0;
      *((_DWORD *)v5 + 2) = 0;
      *((_DWORD *)v5 + 1) = 0;
      *(_DWORD *)v5 = 0;
      v6 = v5;
    }
    else
    {
      v6 = 0;
    }
    v7 = std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
           v3,
           &dwRegNum);
    v8 = dwRegNum;
    *v7 = (unsigned int)v6;
    *((_DWORD *)v6 + 4) = 0;
    *(_DWORD *)v6 = 0;
    *((_DWORD *)v6 + 1) = 0;
    *((_DWORD *)v6 + 2) = 0;
    *((_DWORD *)v6 + 3) = 0;
    *((_WORD *)v6 + 10) = -1;
    kReq.nNo = v8;
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x76u, &kReq, 4);
    return 0;
  }
  if ( *(_DWORD *)(*(_DWORD *)(v4 + 16) + 16) != 1 )
    return 0;
  return (GUILD_EMBLEM_INFO *)21;
}

//----- (006C0EF0) --------------------------------------------------------
void __thiscall GuildNameCache::SetGuildEmblem(GuildNameCache *this, unsigned int dwRegNum, GUILD_EMBLEM_INFO *EmblemInfo)
{
  std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *v3; // edi@1
  void *v4; // eax@2
  void *v5; // esi@3
  unsigned int *v6; // eax@5
  GUILD_EMBLEM_INFO *v7; // edx@5
  unsigned int *v8; // eax@6
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+8h] [bp-4h]@1

  v3 = (std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *)&this->m_kGuildNameCache;
  if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_kGuildNameCache, &result, &dwRegNum)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == this->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v4 = operator new(0x18u);
    if ( v4 )
    {
      *((_DWORD *)v4 + 3) = 0;
      *((_DWORD *)v4 + 2) = 0;
      *((_DWORD *)v4 + 1) = 0;
      *(_DWORD *)v4 = 0;
      v5 = v4;
    }
    else
    {
      v5 = 0;
    }
    v6 = std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
           v3,
           &dwRegNum);
    v7 = (GUILD_EMBLEM_INFO *)dwRegNum;
    *v6 = (unsigned int)v5;
    *((_DWORD *)v5 + 4) = 0;
    *(_DWORD *)v5 = 0;
    *((_DWORD *)v5 + 1) = 0;
    *((_DWORD *)v5 + 2) = 0;
    *((_DWORD *)v5 + 3) = 0;
    *((_WORD *)v5 + 10) = -1;
    EmblemInfo = v7;
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 0x76u, &EmblemInfo, 4);
  }
  else
  {
    v8 = std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(
           v3,
           &dwRegNum);
    *(_WORD *)(*v8 + 20) = *(_WORD *)&EmblemInfo->nPTFileNo;
  }
}

//----- (006C0FA0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_RENAME_CMD(GuildTask *this, PROTO_NC_GUILD_RENAME_CMD *pkCmd)
{
  GuildTask *v2; // ebx@1
  int v3; // ecx@2
  int v4; // eax@6
  char *v5; // edi@9

  v2 = this;
  GuildNameCache::SetGuildName(this->m_spGuildNameCache.m_pObject, pkCmd->nGuildNo, &pkCmd->sGuildName);
  if ( GuildTask::ms_spGuildTask )
    v3 = GuildTask::ms_spGuildTask + 64;
  else
    v3 = 0;
  if ( *(_DWORD *)(v3 + 12) == pkCmd->nGuildNo )
  {
    if ( GuildTask::ms_spGuildTask )
      v4 = GuildTask::ms_spGuildTask + 64;
    else
      v4 = 0;
    *(_QWORD *)(v4 + 16) = *(_QWORD *)&pkCmd->sGuildName.n4_name[0];
    *(_QWORD *)(v4 + 24) = *(_QWORD *)&pkCmd->sGuildName.n4_name[8];
  }
  v5 = TextData2::Get(0x80DCC5C0u);
  if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v5,
      &v2->baseclass_0.baseclass_8);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v5,
        &v2->baseclass_0.baseclass_8);
  }
  v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
    &v2->baseclass_0.baseclass_8,
    25,
    v5,
    &v2->baseclass_0.baseclass_8);
  return 1;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C1050) --------------------------------------------------------
void __thiscall GuildTask::GuildTask(GuildTask *this)
{
  GuildTask *v1; // esi@1
  GuildMemberTask *v2; // edi@1
  void *v3; // eax@6
  int v4; // eax@7
  GuildNameCache *v5; // edi@9
  NiNode *v6; // edi@17
  NiNode *v7; // edi@22
  NiNode *v8; // edi@27
  int v9; // [sp+4h] [bp-10h]@7

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  CGuild::CGuild(&v1->baseclass_40.baseclass_0);
  v1->baseclass_40.baseclass_0.vfptr = (CGuildVtbl *)CClientGuild::_vftable_;
  CPartyFinder::CPartyFinder((CPartyFinder *)&v1->baseclass_40.m_GuildWarAble);
  CGuildTournament::CGuildTournament(&v1->baseclass_40.m_GuildTournament);
  *(_DWORD *)&v1->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&PgTList<GUILD_HISTORY__>::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildTask::_vftable_;
  v1->baseclass_40.baseclass_0.vfptr = (CGuildVtbl *)&GuildTask::_vftable_;
  v1->m_GuildTournamentImprove.m_GTTScore.AGuild = 0;
  v1->m_GuildTournamentImprove.m_GTTScore.AGuildScore = 0;
  v1->m_GuildTournamentImprove.m_GTTScore.BGuild = 0;
  v1->m_GuildTournamentImprove.m_GTTScore.BGuildScore = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[16] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[12] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[8] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[4] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegateName.n5_name[0] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[16] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[12] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[8] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[4] = 0;
  *(_DWORD *)&v1->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegateName.n5_name[0] = 0;
  v1->m_pGTStartEffect.m_pObject = 0;
  v1->m_pGTWinEffect.m_pObject = 0;
  v1->m_pGTLoseEffect.m_pObject = 0;
  v1->m_spGuildMemberTask.m_pObject = 0;
  v1->m_spGuildNameCache.m_pObject = 0;
  v2 = v1->m_spGuildMemberTask.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spGuildMemberTask.m_pObject = 0;
  }
  v3 = operator new(0x50u);
  if ( v3 )
  {
    GuildNameCache::GuildNameCache((GuildNameCache *)v3);
    v9 = v4;
  }
  else
  {
    v9 = 0;
    v4 = 0;
  }
  v5 = v1->m_spGuildNameCache.m_pObject;
  if ( v5 != (GuildNameCache *)v4 )
  {
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) && v5 )
        v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v4 = v9;
    }
    v1->m_spGuildNameCache.m_pObject = (GuildNameCache *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)(v4 + 4));
  }
  v1->baseclass_40.m_iTotalGuildWarAbleCount = 0;
  v1->m_fPrevRefreshTime = 0.0;
  v1->baseclass_40.m_iCurrPage = 0;
  v1->m_pkGuildTournamentBaseWin = 0;
  v1->m_pkGuildTournamentScheduleWin = 0;
  v1->m_pkGuildTournamentStorageWin = 0;
  *(_WORD *)&v1->m_bListRefreshEnable = 0;
  v1->m_bRecall = 0;
  v1->m_GuildTournamentImprove.m_uiGTTType = -1;
  v1->m_GuildTournamentImprove.m_DiceInfo.AGuild = 0;
  v1->m_GuildTournamentImprove.m_DiceInfo.AGuildDelegate = -1;
  v1->m_GuildTournamentImprove.m_GTTScore.AGuild = 0;
  v1->m_GuildTournamentImprove.m_GTTScore.AGuildScore = 0;
  v1->m_GuildTournamentImprove.m_DiceInfo.BGuild = 0;
  v1->m_GuildTournamentImprove.m_GTTScore.BGuild = 0;
  v1->m_GuildTournamentImprove.m_GTTScore.BGuildScore = 0;
  v1->m_GuildTournamentImprove.m_RedTeam = 0;
  v1->m_GuildTournamentImprove.m_BlueTeam = 0;
  v1->m_GuildTournamentImprove.m_DiceInfo.BGuildDelegate = -1;
  LODWORD(v1->baseclass_40.m_iGuildToken) = 0;
  HIDWORD(v1->baseclass_40.m_iGuildToken) = 0;
  v1->baseclass_40.m_iGTObserverSeedNum = -1;
  v6 = v1->m_pGTStartEffect.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_pGTStartEffect.m_pObject = 0;
  }
  v7 = v1->m_pGTWinEffect.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v1->m_pGTWinEffect.m_pObject = 0;
  }
  v8 = v1->m_pGTLoseEffect.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v1->m_pGTLoseEffect.m_pObject = 0;
  }
  v1->baseclass_40.m_bOpserver = 0;
  v1->m_bGTQuit = 0;
}
// 9C9434: using guessed type int (__thiscall *PgTList_GUILD_HISTORY _____vftable_)(void *p, char);
// 9C9444: using guessed type int (__stdcall *CClientGuild___vftable_[20])(int pAck);
// 9C949C: using guessed type int (__thiscall *GuildTask___vftable_)(CGuild *this, int pkProto);
// 9C94F0: using guessed type int (__stdcall *GuildTask___vftable_)(int uiFlags);
// 9C950C: using guessed type int (__thiscall *GuildTask___vftable_)(void *p, char);

//----- (006C1330) --------------------------------------------------------
void __cdecl GuildTask::Create(IDirectMessenger *pkMsgHooker)
{
  int v1; // eax@1
  void *v2; // eax@2
  int v3; // eax@3
  int v4; // esi@3
  int v5; // edi@7

  v1 = GuildTask::ms_spGuildTask;
  if ( !GuildTask::ms_spGuildTask )
  {
    v2 = operator new(0xBC8u);
    if ( v2 )
    {
      GuildTask::GuildTask((GuildTask *)v2);
      v4 = v3;
    }
    else
    {
      v4 = 0;
    }
    v1 = GuildTask::ms_spGuildTask;
    if ( GuildTask::ms_spGuildTask != v4 )
    {
      if ( GuildTask::ms_spGuildTask )
      {
        v5 = GuildTask::ms_spGuildTask;
        if ( !InterlockedDecrement((volatile LONG *)(GuildTask::ms_spGuildTask + 4)) )
        {
          if ( v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        }
      }
      v1 = v4;
      GuildTask::ms_spGuildTask = v4;
      if ( v4 )
      {
        InterlockedIncrement((volatile LONG *)(v4 + 4));
        v1 = GuildTask::ms_spGuildTask;
      }
    }
  }
  (**(void (__cdecl ***)(_DWORD))(v1 + 8))(pkMsgHooker);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C13F0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_MAKE_ACK(GuildTask *this, PROTO_NC_GUILD_MAKE_ACK *pkProto)
{
  GuildTask *v2; // edi@1
  char *v3; // eax@2
  int v4; // esi@2
  signed int v5; // eax@6
  int result; // eax@13
  const char *v7; // eax@14
  Name5 *v8; // eax@14
  Name5 *v9; // ST0C_4@14
  CGuild *v10; // eax@14
  int v11; // esi@14
  int v12; // ecx@17
  int v13; // eax@17
  int v14; // ecx@17
  char *v15; // eax@17
  char *v16; // eax@17
  PgFrameWork *v17; // eax@17
  char *v18; // eax@21
  unsigned int v19; // [sp-4h] [bp-40h]@9
  char *v20; // [sp+Ch] [bp-30h]@2
  Name5 thisa; // [sp+10h] [bp-2Ch]@14
  char acGuildName[17]; // [sp+24h] [bp-18h]@17
  unsigned int v23; // [sp+38h] [bp-4h]@1
  int v24; // [sp+3Ch] [bp+0h]@1

  v23 = (unsigned int)&v24 ^ __security_cookie;
  v2 = this;
  *(_DWORD *)&this->baseclass_40.m_acGuildName[8] = 0;
  if ( pkProto->Error == 3272 )
  {
    v3 = TextData::Get(0xFA2A187Fu);
    v4 = (int)((char *)v2 - 56);
    v20 = v3;
    if ( *(&v2->baseclass_0.baseclass_0.m_uiRefCount - 14) )
    {
      (*(void (__stdcall **)(signed int, char *, char *))(**(_DWORD **)(v4 + 4) + 4))(25, v3, (char *)v2 - 56);
      v3 = v20;
      if ( *(_DWORD *)(v4 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, char *))(**(_DWORD **)(v4 + 4) + 20))(25, v20, (char *)v2 - 56);
        v3 = v20;
      }
    }
    (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v4 + 20))(
      (char *)v2 - 56,
      25,
      v3,
      (char *)v2 - 56);
  }
  v5 = pkProto->Error;
  if ( v5 > 6696 )
  {
    if ( (unsigned int)(v5 - 12677) > 1 )
      goto LABEL_22;
LABEL_20:
    v19 = 103959714;
LABEL_21:
    v18 = TextData::Get(v19);
    MsgBox::Modal(MSGBOX_OK, v18);
    goto LABEL_22;
  }
  if ( v5 == 6696 )
    goto LABEL_20;
  switch ( v5 )
  {
    case 3225:
      v19 = 290388830;
      goto LABEL_21;
    case 3226:
    case 3268:
      v19 = -1560220324;
      goto LABEL_21;
    case 3228:
    case 3267:
      v19 = 19721572;
      goto LABEL_21;
    case 3266:
      v19 = -708785094;
      goto LABEL_21;
    case 3137:
      result = CGuild::Recv_NC_GUILD_MAKE_ACK((CGuild *)v2, pkProto);
      if ( !result )
        return result;
      g_pkMainChar->m_dwGuildRegNum = (unsigned int)v2->baseclass_0.baseclass_8.m_pkMsgHooker;
      GuildNameCache::SetGuildName(
        (GuildNameCache *)v2->m_GuildTournamentImprove.m_DiceInfo.BGuild,
        (unsigned int)v2->baseclass_0.baseclass_8.m_pkMsgHooker,
        (Name4 *)&v2->baseclass_0.baseclass_8.m_uiMessageNum);
      v7 = (const char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
      Name5::Name5(&thisa, v7);
      v9 = v8;
      v10 = (CGuild *)GuildAcademyTask::GetGuildAcademy();
      CGuild::MakeAcademy(v10, v9);
      v11 = (int)((char *)v2 - 56);
      if ( *((_DWORD *)v2 - 13) )
      {
        (*(void (__stdcall **)(signed int, _DWORD, char *))(**(_DWORD **)(v11 + 4) + 4))(71, 0, (char *)v2 - 56);
        if ( *(_DWORD *)(v11 + 4) )
          (*(void (__stdcall **)(signed int, _DWORD, char *))(**(_DWORD **)(v11 + 4) + 20))(71, 0, (char *)v2 - 56);
      }
      (*(void (__thiscall **)(char *, signed int, _DWORD, char *))(*(_DWORD *)v11 + 20))(
        (char *)v2 - 56,
        71,
        0,
        (char *)v2 - 56);
      GuildAcademyTask::CreateGuildacademyMasterEffect(g_pkMainChar);
      v12 = *(_DWORD *)&pkProto->Name.n4_name[0];
      v13 = *(_DWORD *)&pkProto->Name.n4_name[8];
      *(_DWORD *)&acGuildName[4] = *(_DWORD *)&pkProto->Name.n4_name[4];
      *(_DWORD *)acGuildName = v12;
      v14 = *(_DWORD *)&pkProto->Name.n4_name[12];
      *(_DWORD *)&acGuildName[8] = v13;
      *(_DWORD *)&acGuildName[12] = v14;
      acGuildName[16] = 0;
      v15 = TextData::Get(0x243F1C56u);
      v16 = fs(v15);
      MsgBox::Modal(MSGBOX_OK, v16);
      v17 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v17 )
        GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v17, BIL_GUILDWAR_1);
      break;
    case 3224:
    case 3227:
    case 3229:
    case 3230:
    case 3269:
    case 3270:
      goto LABEL_20;
    default:
      break;
  }
LABEL_22:
  GuildNpcMenuWin::CloseFoundWin(*(GuildNpcMenuWin **)&v2->baseclass_40.m_acGuildName[12]);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C16C0) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_MY_GUILD_INFO_ACK(GuildTask *this, PROTO_NC_GUILD_MY_GUILD_INFO_ACK *pkProto)
{
  GuildTask *v2; // esi@1
  int result; // eax@1

  v2 = this;
  result = CGuild::Recv_NC_GUILD_MY_GUILD_INFO_ACK((CGuild *)this, pkProto);
  if ( result )
  {
    g_pkMainChar->m_dwGuildRegNum = (unsigned int)v2->baseclass_0.baseclass_8.m_pkMsgHooker;
    GuildNameCache::SetGuildName(
      (GuildNameCache *)v2->m_GuildTournamentImprove.m_DiceInfo.BGuild,
      (unsigned int)v2->baseclass_0.baseclass_8.m_pkMsgHooker,
      (Name4 *)&v2->baseclass_0.baseclass_8.m_uiMessageNum);
    result = 1;
  }
  return result;
}

//----- (006C1710) --------------------------------------------------------
char *__cdecl GuildTask::GetGuildName(unsigned int dwRegNum)
{
  char *result; // eax@1

  result = (char *)GuildTask::ms_spGuildTask;
  if ( GuildTask::ms_spGuildTask )
    result = GuildNameCache::GetGuildName(*(GuildNameCache **)(GuildTask::ms_spGuildTask + 3000), dwRegNum);
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C1730) --------------------------------------------------------
GUILD_EMBLEM_INFO *__cdecl GuildTask::GetEmblemInfo(unsigned int dwRegNum)
{
  GUILD_EMBLEM_INFO *result; // eax@1

  result = (GUILD_EMBLEM_INFO *)GuildTask::ms_spGuildTask;
  if ( GuildTask::ms_spGuildTask )
    result = GuildNameCache::GetGuildEmblem(*(GuildNameCache **)(GuildTask::ms_spGuildTask + 3000), dwRegNum);
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C1750) --------------------------------------------------------
void __cdecl GuildTask::SetGuildEmblem(unsigned int dwRegNum, GUILD_EMBLEM_INFO *pEmblemInfo)
{
  if ( GuildTask::ms_spGuildTask )
    GuildNameCache::SetGuildEmblem(*(GuildNameCache **)(GuildTask::ms_spGuildTask + 3000), dwRegNum, pEmblemInfo);
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C1780) --------------------------------------------------------
int __thiscall GuildTask::Recv_NC_GUILD_EMBLEM_INFO_NOTICE_CMD(GuildTask *this, PROTO_NC_GUILD_EMBLEM_INFO_NOTICE_CMD *pkCmd)
{
  int result; // eax@1

  result = (int)pkCmd;
  if ( pkCmd )
  {
    if ( GuildTask::ms_spGuildTask )
      GuildNameCache::SetGuildEmblem(
        *(GuildNameCache **)(GuildTask::ms_spGuildTask + 3000),
        pkCmd->nGuildNo,
        &pkCmd->EmblemInfo);
    result = 1;
  }
  return result;
}
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C17C0) --------------------------------------------------------
bool __thiscall GuildTask::OnProcessNetMsg(GuildTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildTask *v5; // esi@1
  PgFrameWork *v6; // ebx@1
  GuildAcademyMenuWin *v7; // eax@3
  PgWin *v8; // eax@4
  bool result; // al@8
  int v10; // esi@11
  CClientGuildAcademy *v11; // eax@14
  float v12; // edi@16
  Char *v13; // esi@17
  const char *v14; // eax@19
  int v15; // eax@19
  _BYTE v16[20]; // ST00_20@19
  CClientGuildAcademy *v17; // eax@19
  bool v18; // al@20
  int v19; // esi@74
  int v20; // esi@78
  int v21; // esi@82
  int v22; // esi@92
  IDirectMessenger *v23; // esi@97
  int v24; // ecx@100
  int v25; // eax@100
  int v26; // ecx@100
  char *v27; // eax@100
  void *v28; // edi@100
  IDirectMessenger *v29; // esi@101
  int v30; // ecx@104
  int v31; // edx@104
  int v32; // eax@104
  char *v33; // eax@110
  void *v34; // edi@110
  int v35; // esi@111
  int v36; // ecx@115
  int v37; // eax@115
  int v38; // edx@115
  int v39; // ecx@115
  char *v40; // eax@118
  void *v41; // ST20_4@118
  char *v42; // eax@118
  void *v43; // eax@118
  unsigned int v44; // [sp-8h] [bp-44h]@116
  unsigned int v45; // [sp-4h] [bp-40h]@107
  int pcMsg; // [sp+Ch] [bp-30h]@1
  Name5 thisa; // [sp+10h] [bp-2Ch]@19
  char acGuildName[17]; // [sp+24h] [bp-18h]@100
  unsigned int v49; // [sp+38h] [bp-4h]@1
  int v50; // [sp+3Ch] [bp+0h]@1

  v49 = (unsigned int)&v50 ^ __security_cookie;
  v5 = this;
  pcMsg = 0;
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  switch ( iDepart )
  {
    case 15:
      if ( iCommand != 12 )
        return 0;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0xBu, 0, 0);
      v7 = GuildAcademyTask::GetGuildAcademyMenuWin();
      if ( (unsigned __int8)((int (__thiscall *)(GuildAcademyMenuWin *))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v7) )
      {
        v8 = (PgWin *)GuildAcademyTask::GetGuildAcademyMenuWin();
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v8);
      }
      if ( (unsigned __int8)(*(int (**)(void))(**(_DWORD **)(GuildTask::ms_spGuildTask + 2844) + 260))() )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, *(PgWin **)(GuildTask::ms_spGuildTask + 2844));
      PgWinMgr::ShowWin(&Pgg_kWinMgr, *(PgWin **)(GuildTask::ms_spGuildTask + 2852));
      return 1;
    case 4:
      if ( iCommand != 18 )
        return 0;
      if ( !*(_DWORD *)pvData )
      {
        v5->baseclass_40.baseclass_0.m_bIsGuild = 0;
        return 1;
      }
      v5->baseclass_40.baseclass_0.m_bIsGuild = 1;
      GUILD_CLIENT::operator_(&v5->baseclass_40.baseclass_0.m_Guild, (GUILD_CLIENT *)((char *)pvData + 4));
      g_pkMainChar->m_dwGuildRegNum = v5->baseclass_40.baseclass_0.m_Guild.nNo;
      GuildNameCache::SetGuildName(
        v5->m_spGuildNameCache.m_pObject,
        v5->baseclass_40.baseclass_0.m_Guild.nNo,
        &v5->baseclass_40.baseclass_0.m_Guild.sName);
      v10 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v10 + 4) )
      {
        (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v10 + 4) + 4))(41, 0, v10);
        if ( *(_DWORD *)(v10 + 4) )
          (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v10 + 4) + 20))(41, 0, v10);
      }
      (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v10 + 20))(v10, 41, 0, v10);
      g_pkMainChar->m_GuildAcademyMemberFlag = 0;
      v11 = GuildAcademyTask::GetGuildAcademy();
      if ( CClientGuildAcademy::AmIGuildAcademyMaster(v11) )
      {
        GuildAcademyTask::CreateGuildacademyMasterEffect(g_pkMainChar);
        return 1;
      }
      v12 = fTime;
      if ( !LODWORD(fTime) )
        return 1;
      while ( 1 )
      {
        v13 = *(Char **)(LODWORD(v12) + 8);
        LODWORD(v12) = *LODWORD(v12);
        v18 = v13
           && g_pkMainChar != v13
           && (pcMsg |= 1u,
               v14 = (const char *)((int (__thiscall *)(Char *))v13->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v13),
               Name5::Name5(&thisa, v14),
               *(_QWORD *)v16 = *(_QWORD *)v15,
               *(_QWORD *)&v16[8] = *(_QWORD *)(v15 + 8),
               *(_DWORD *)&v16[16] = *(_DWORD *)(v15 + 16),
               v17 = GuildAcademyTask::GetGuildAcademy(),
               CClientGuildAcademy::IsGuildAcademyMaster(v17, *(Name5 *)v16));
        if ( pcMsg & 1 )
          pcMsg &= 0xFFFFFFFEu;
        if ( v18 )
          break;
        if ( !LODWORD(v12) )
          return 1;
      }
      GuildAcademyTask::CreateGuildacademyMasterEffect(v13);
      return 1;
    case 12:
      if ( iCommand != 39 )
        return 0;
      GuildTask::Recv_NC_ITEM_GUILD_STORAGE_WITHDRAW_ACK(v5, (PROTO_NC_ITEM_GUILD_STORAGE_WITHDRAW_ACK *)pvData);
      return 1;
    case 29:
      switch ( iCommand )
      {
        case 123:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_JOIN_ACK(v5, (PROTO_NC_GUILD_TOURNAMENT_JOIN_ACK *)pvData);
          return 1;
        case 127:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_LIST_ACK(v5, iRevBytes, pvData);
          return 1;
        case 132:
          GuildTask::Recv_NC_GUILD_TOURNAMENTSTOP_CMD(v5, (PROTO_NC_GUILD_TOURNAMENTSTOP_CMD *)pvData);
          return 1;
        case 131:
          GuildTask::Recv_NC_GUILD_TOURNAMENTSTART_CMD(v5, (PROTO_NC_GUILD_TOURNAMENTSTART_CMD *)pvData);
          return 1;
        case 128:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_TYPE_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_TYPE_CMD *)pvData);
          return 1;
        case 144:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_RESULT_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_RESULT_CMD *)pvData);
          return 1;
        case 141:
          GuildTask::Recv_NC_GUILD_MOBGUILD_CMD(v5, (PROTO_NC_GUILD_MOBGUILD_CMD *)pvData);
          return 1;
        case 148:
          GuildTask::Recv_NC_GUILD_STORAGEWITHDRAW_CMD(v5, (PROTO_NC_GUILD_STORAGEWITHDRAW_CMD *)pvData);
          return 1;
        case 155:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_RECALL_ENTER_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_RECALL_ENTER_CMD *)pvData);
          return 1;
        case 157:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_RECALL_ENTER_ACK(v5, (PROTO_NC_GUILD_TOURNAMENT_RECALL_ENTER_ACK *)pvData);
          return 1;
        case 191:
          GuildTask::Recv_NC_GUILD_MY_GUILD_TOKEN_INFO_ACK(v5, (PROTO_NC_GUILD_MY_GUILD_TOKEN_INFO_ACK *)pvData);
          return 1;
        case 206:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_SKILLPOINT_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_SKILLPOINT_CMD *)pvData);
          return 1;
        case 203:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_ACK(v5, (PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_ACK *)pvData);
          return 1;
        case 204:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_CMD *)pvData);
          return 1;
        case 205:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_FLAGCAPTURE_RESULT_CMD(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_FLAGCAPTURE_RESULT_CMD *)pvData);
          return 1;
        case 208:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_USESKILL_ACK(v5, (PROTO_NC_GUILD_TOURNAMENT_USESKILL_ACK *)pvData);
          return 1;
        case 210:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_START_CMD(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_DICEGAME_START_CMD *)pvData);
          return 1;
        case 213:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_THROW_CMD(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_DICEGAME_THROW_CMD *)pvData);
          return 1;
        case 212:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_THROW_ACK(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_DICEGAME_THROW_ACK *)pvData);
          return 1;
        case 214:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_DICEGAME_END_TIME(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_DICEGAME_BEFORE_END_TIME_MSG_CMD *)pvData);
          return 1;
        case 209:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_USESKILL_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_USESKILL_CMD *)pvData);
          return 1;
        case 196:
          GuildTask::Recv_NC_GUILD_MY_GUILD_TOURNAMENT_MATCH_TIME_ACK(
            v5,
            (PROTO_NC_GUILD_MY_GUILD_TOURNAMENT_MATCH_TIME_ACK *)pvData);
          return 1;
        case 222:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_PLAYERDIEMSG_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_PLAYERDIEMSG_CMD *)pvData);
          return 1;
        case 216:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_OBSERVER_ENTER_ACK(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_OBSERVER_ENTER_ACK *)pvData);
          return 1;
        case 220:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_OBSERVER_OUT_ACK(v5, (PROTO_NC_GUILD_TOURNAMENT_OBSERVER_OUT_ACK *)pvData);
          return 1;
        case 225:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_MANAGERUSERMSG_CMD(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_MANAGERUSERMSG_CMD *)pvData);
          return 1;
        case 224:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_STARTMSG_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_STARTMSG_CMD *)pvData);
          return 1;
        case 226:
          GuildTask::Recv_NC_GUILD_TOURNAMENTSTOPMSG_CMD(v5, (PROTO_NC_GUILD_TOURNAMENTSTOPMSG_CMD *)pvData);
          return 1;
        case 194:
          GuildTask::Recv_NC_GUILD_WORLD_SET_GUILD_TOKEN_CMD(v5, (PROTO_NC_GUILD_WORLD_SET_GUILD_TOKEN_CMD *)pvData);
          return 1;
        case 223:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_PLAYERKILLMSG_CMD(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_PLAYERKILLMSG_CMD *)pvData);
          return 1;
        case 221:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_SCORE_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_SCORE_CMD *)pvData);
          return 1;
        case 234:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_JOIN_LIST_ACK(v5, (PROTO_NC_GUILD_TOURNAMENT_JOIN_LIST_ACK *)pvData);
          return 1;
        case 237:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_NOTIFY_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_NOTIFY_CMD *)pvData);
          return 1;
        case 6:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MAKE_ACK(&v5->baseclass_40, pvData);
          return 1;
        case 8:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_DISMISS_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_DISMISS_ACK *)pvData);
          return 1;
        case 17:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_NOTIFY_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_NOTIFY_ACK *)pvData);
          return 1;
        case 19:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MONEY_SUB_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_MONEY_SUB_ACK *)pvData);
          return 1;
        case 21:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_GRADE_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_GRADE_ACK *)pvData);
          return 1;
        case 35:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_WAR_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_WAR_ACK *)pvData);
          return 1;
        case 25:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MY_GUILD_INFO_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_MY_GUILD_INFO_ACK *)pvData);
          return 1;
        case 31:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MONEY_ADD_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_MONEY_ADD_ACK *)pvData);
          return 1;
        case 39:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_WAR_LIST_ACK(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_WAR_LIST_ACK *)pvData);
          v19 = (int)&v5->baseclass_0.baseclass_8;
          if ( *(_DWORD *)(v19 + 4) )
          {
            (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v19 + 4) + 4))(50, 0, v19);
            if ( *(_DWORD *)(v19 + 4) )
              (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v19 + 4) + 20))(50, 0, v19);
          }
          (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v19 + 20))(v19, 50, 0, v19);
          return 1;
        case 37:
          GuildTask::Recv_NC_GUILD_WAR_ABLE_LIST_ACK(v5, (PROTO_NC_GUILD_WAR_ABLE_LIST_ACK *)pvData);
          v20 = (int)&v5->baseclass_0.baseclass_8;
          if ( *(_DWORD *)(v20 + 4) )
          {
            (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v20 + 4) + 4))(51, 0, v20);
            if ( *(_DWORD *)(v20 + 4) )
              (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v20 + 4) + 20))(51, 0, v20);
          }
          (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v20 + 20))(v20, 51, 0, v20);
          return 1;
        case 48:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_DELETE_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_DELETE_CMD *)pvData);
          v21 = (int)&v5->baseclass_0.baseclass_8;
          GuildMemberTask::GetGuildMember()->baseclass_0.m_NumOfMembers = 0;
          if ( *(_DWORD *)(v21 + 4) )
            (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v21 + 4) + 4))(41, 0, v21);
          if ( *(_DWORD *)(v21 + 4) )
            (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v21 + 4) + 20))(41, 0, v21);
          (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v21 + 20))(v21, 41, 0, v21);
          if ( v6 )
            GuildWin::ClearGTInfo((GuildWin *)v6[24].baseclass_0.vfptr);
          return 1;
        case 47:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_DISMISS_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_DISMISS_CMD *)pvData);
          return 1;
        case 43:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MONEY_ADD_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_MONEY_ADD_CMD *)pvData);
          return 1;
        case 44:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_MONEY_SUB_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_MONEY_SUB_CMD *)pvData);
          return 1;
        case 45:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_NOTIFY_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_NOTIFY_CMD *)pvData);
          v22 = (int)&v5->baseclass_0.baseclass_8;
          if ( *(_DWORD *)(v22 + 4) )
          {
            (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v22 + 4) + 4))(41, 0, v22);
            if ( *(_DWORD *)(v22 + 4) )
              (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v22 + 4) + 20))(41, 0, v22);
          }
          (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v22 + 20))(v22, 41, 0, v22);
          return 1;
        case 46:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_GRADE_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_GRADE_CMD *)pvData);
          return 1;
        case 51:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_WAR_START_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_WAR_START_CMD *)pvData);
          v23 = &v5->baseclass_0.baseclass_8;
          if ( v23->m_pkMsgHooker )
          {
            ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v23->m_pkMsgHooker->vfptr->SendDirectMessage)(
              50,
              0,
              v23);
            if ( v23->m_pkMsgHooker )
              ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v23->m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                50,
                0,
                v23);
          }
          v23->vfptr->DirectDispatchToParent(v23, 50, 0, v23);
          v24 = *(_DWORD *)pvData;
          v25 = *((_DWORD *)pvData + 2);
          *(_DWORD *)&acGuildName[4] = *((_DWORD *)pvData + 1);
          *(_DWORD *)acGuildName = v24;
          v26 = *((_DWORD *)pvData + 3);
          *(_DWORD *)&acGuildName[8] = v25;
          *(_DWORD *)&acGuildName[12] = v26;
          acGuildName[16] = 0;
          v27 = TextData::Get(0x69FECEE7u);
          v28 = fs(v27);
          IDirectMessenger::DirectDispatch(v23, 46, v28, 0);
          IDirectMessenger::DirectDispatch(v23, 25, v28, 0);
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_STARTQUEST);
          return 1;
        case 52:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_WAR_END_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_WAR_END_CMD *)pvData);
          v5->m_fPrevRefreshTime = 0.0;
          v29 = &v5->baseclass_0.baseclass_8;
          if ( v29->m_pkMsgHooker )
          {
            ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v29->m_pkMsgHooker->vfptr->SendDirectMessage)(
              50,
              0,
              v29);
            if ( v29->m_pkMsgHooker )
              ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v29->m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                50,
                0,
                v29);
          }
          v29->vfptr->DirectDispatchToParent(v29, 50, 0, v29);
          v30 = *((_DWORD *)pvData + 1);
          v31 = *((_DWORD *)pvData + 2);
          *(_DWORD *)acGuildName = *(_DWORD *)pvData;
          v32 = *((_DWORD *)pvData + 3);
          *(_DWORD *)&acGuildName[4] = v30;
          *(_DWORD *)&acGuildName[8] = v31;
          *(_DWORD *)&acGuildName[12] = v32;
          acGuildName[16] = 0;
          SoundMgr::PlayInterfaceSound(&g_kSoundMgr, SFX_ENDQUEST);
          if ( *((_BYTE *)pvData + 32) )
          {
            if ( *((_BYTE *)pvData + 32) == 1 )
            {
              v45 = -1207779000;
            }
            else
            {
              if ( *((_BYTE *)pvData + 32) != 2 )
                return 1;
              v45 = -1102960848;
            }
          }
          else
          {
            v45 = -130210679;
          }
          v33 = TextData::Get(v45);
          v34 = fs(v33);
          IDirectMessenger::DirectDispatch(v29, 25, v34, 0);
          IDirectMessenger::DirectDispatch(v29, 46, v34, 0);
          result = 1;
          break;
        case 53:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_WAR_COOLDOWN_DONE_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_WAR_COOLDOWN_DONE_CMD *)pvData);
          v5->m_fPrevRefreshTime = 0.0;
          v35 = (int)&v5->baseclass_0.baseclass_8;
          if ( *(_DWORD *)(v35 + 4) )
          {
            (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v35 + 4) + 4))(50, 0, v35);
            if ( *(_DWORD *)(v35 + 4) )
              (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v35 + 4) + 20))(50, 0, v35);
          }
          (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v35 + 20))(v35, 50, 0, v35);
          return 1;
        case 50:
          v5->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_WAR_TARGET_CMD(
            (CGuild *)&v5->baseclass_40,
            (PROTO_NC_GUILD_WAR_TARGET_CMD *)pvData);
          v5->m_fPrevRefreshTime = 0.0;
          acGuildName[16] = 0;
          v36 = *((_DWORD *)pvData + 1);
          v37 = *((_DWORD *)pvData + 3);
          *(_DWORD *)&acGuildName[4] = *((_DWORD *)pvData + 2);
          v38 = *(_DWORD *)((char *)pvData + 146);
          *(_DWORD *)acGuildName = v36;
          v39 = *((_DWORD *)pvData + 4);
          *(_DWORD *)&acGuildName[8] = v37;
          *(_DWORD *)&acGuildName[12] = v39;
          if ( v38 == v5->baseclass_40.baseclass_0.m_Guild.nNo )
            v44 = -1394816978;
          else
            v44 = -1394865106;
          v40 = TextData::Get(v44);
          v41 = fs(v40);
          IDirectMessenger::DirectDispatch(&v5->baseclass_0.baseclass_8, 25, v41, 0);
          IDirectMessenger::DirectDispatch(&v5->baseclass_0.baseclass_8, 46, v41, 0);
          GetGuildWarTimeLeftStr(*(_DWORD *)((char *)pvData + 22), 0);
          v42 = TextData::Get(0xD52147Au);
          v43 = fs(v42);
          IDirectMessenger::DirectDispatch(&v5->baseclass_0.baseclass_8, 25, v43, 0);
          CGuildWar::Add(&v5->baseclass_40.baseclass_0.m_GuildWar, (SHINE_GUILD_WAR_INFO *)pvData);
          if ( v5->baseclass_0.baseclass_8.m_pkMsgHooker )
          {
            ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              50,
              0,
              &v5->baseclass_0.baseclass_8);
            if ( v5->baseclass_0.baseclass_8.m_pkMsgHooker )
              ((void (__stdcall *)(signed int, _DWORD, IDirectMessenger *))v5->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                50,
                0,
                &v5->baseclass_0.baseclass_8);
          }
          v5->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
            &v5->baseclass_0.baseclass_8,
            50,
            0,
            &v5->baseclass_0.baseclass_8);
          return 1;
        case 173:
          GuildTask::Recv_NC_GUILD_RENAME_ACK(v5, (PROTO_NC_GUILD_RENAME_ACK *)pvData);
          return 1;
        case 174:
          GuildTask::Recv_NC_GUILD_RENAME_CMD(v5, (PROTO_NC_GUILD_RENAME_CMD *)pvData);
          return 1;
        case 181:
          GuildTask::Recv_NC_GUILD_RETYPE_ACK(v5, (PROTO_NC_GUILD_RETYPE_ACK *)pvData);
          return 1;
        case 182:
          GuildTask::Recv_NC_GUILD_RETYPE_CMD(v5, (PROTO_NC_GUILD_RETYPE_CMD *)pvData);
          return 1;
        case 240:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_PICK_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_ITEM_PICK_CMD *)pvData);
          return 1;
        case 241:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_EFFECT_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_ITEM_EFFECT_CMD *)pvData);
          return 1;
        case 242:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_FLAG_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_ITEM_FLAG_CMD *)pvData);
          return 1;
        case 243:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_ITEM_SCAN_CMD(v5, (PROTO_NC_GUILD_TOURNAMENT_ITEM_SCAN_CMD *)pvData);
          return 1;
        case 248:
          GuildTask::Recv_NC_GUILD_TOURNAMENT_REFUND_NOTICE_CMD(
            v5,
            (PROTO_NC_GUILD_TOURNAMENT_REFUND_NOTICE_CMD *)pvData);
          return 1;
        case 254:
          GuildTask::Recv_NC_GUILD_HISTORY_LIST_ACK(v5, (PROTO_NC_GUILD_HISTORY_LIST_ACK *)pvData);
          return 1;
        case 258:
          GuildTask::Recv_NC_GUILD_EMBLEM_CHECK_AVAILABILITY_ACK(
            v5,
            (PROTO_NC_GUILD_EMBLEM_CHECK_AVAILABILITY_ACK *)pvData);
          return 1;
        case 262:
          GuildTask::Recv_NC_GUILD_EMBLEM_SAVE_ACK(v5, (PROTO_NC_GUILD_EMBLEM_SAVE_ACK *)pvData);
          return 1;
        case 265:
          GuildTask::Recv_NC_GUILD_EMBLEM_OFF_MSG_CMD(v5, (PROTO_NC_GUILD_EMBLEM_OFF_MSG_CMD *)pvData);
          return 1;
        case 266:
          GuildTask::Recv_NC_GUILD_EMBLEM_INFO_CMD(v5, (PROTO_NC_GUILD_EMBLEM_INFO_CMD *)pvData);
          return 1;
        case 267:
          GuildTask::Recv_NC_GUILD_EMBLEM_INFO_NOTICE_CMD(v5, (PROTO_NC_GUILD_EMBLEM_INFO_NOTICE_CMD *)pvData);
          return 1;
        default:
          return 0;
      }
      return result;
    default:
      return 0;
  }
}
// A85C00: using guessed type int __security_cookie;
// B67C84: using guessed type int GuildTask__ms_spGuildTask;

//----- (006C2880) --------------------------------------------------------
void __thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>(NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *this)
{
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
}
// 9C9414: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);

//----- (006C2890) --------------------------------------------------------
void *__thiscall NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_scalar_deleting_destructor_(NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C9414: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);

//----- (006C28C0) --------------------------------------------------------
void __thiscall NiTPointerList<GUILD_HISTORY__>::_NiTPointerList<GUILD_HISTORY__>(NiTPointerList<GUILD_HISTORY *> *this)
{
  NiTPointerList<GUILD_HISTORY *> *v1; // edi@1
  NiTListItem<GUILD_HISTORY *> *v2; // esi@1
  NiTListItem<GUILD_HISTORY *> *v3; // ST00_4@2

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
  v2 = this->baseclass_0.baseclass_0.m_pkHead;
  while ( v2 )
  {
    v3 = v2;
    v2 = v2->m_pkNext;
    v1->baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *)v1,
      v3);
  }
  *(_DWORD *)&v1->baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->baseclass_0.baseclass_0.m_pkHead = 0;
  v1->baseclass_0.baseclass_0.m_pkTail = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
}
// 9C9414: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);
// 9C9424: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);

//----- (006C2940) --------------------------------------------------------
void *__thiscall NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_scalar_deleting_destructor_(NiTPointerListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<GUILD_HISTORY *> *v3; // esi@1
  NiTListItem<GUILD_HISTORY *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&NiTPointerListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C9414: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);
// 9C9424: using guessed type int (__thiscall *NiTPointerListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);

//----- (006C29D0) --------------------------------------------------------
GUILD_CLIENT *__thiscall GUILD_CLIENT::operator_(GUILD_CLIENT *this, GUILD_CLIENT *__that)
{
  GUILD_CLIENT *result; // eax@1
  char *v3; // esi@1
  unsigned int v4; // ebx@1
  signed int v5; // edi@1
  char *v6; // ecx@3
  signed int v7; // esi@3

  result = this;
  this->nNo = __that->nNo;
  *(_QWORD *)&this->sName.n4_name[0] = *(_QWORD *)&__that->sName.n4_name[0];
  *(_QWORD *)&this->sName.n4_name[8] = *(_QWORD *)&__that->sName.n4_name[8];
  this->nMoney = __that->nMoney;
  this->nType = __that->nType;
  this->nGrade = __that->nGrade;
  this->nFame = __that->nFame;
  this->nStoneLevel = __that->nStoneLevel;
  this->nExp = __that->nExp;
  this->dCreateDate = __that->dCreateDate;
  memcpy(&this->tm_dCreateDate, &__that->tm_dCreateDate, 0x35u);
  memcpy(&this->tm_dWarRequestDate, &__that->tm_dWarRequestDate, sizeof(this->tm_dWarRequestDate));
  memcpy(&this->tm_dWarStartDate, &__that->tm_dWarStartDate, sizeof(this->tm_dWarStartDate));
  memcpy(&this->tm_dWarEndDate, &__that->tm_dWarEndDate, 0x39u);
  memcpy(&this->MyScore, &__that->MyScore, sizeof(this->MyScore));
  memcpy(&this->EnemyScore, &__that->EnemyScore, 0x3Bu);
  memcpy(&this->tm_dDismissDate, &__that->tm_dDismissDate, sizeof(this->tm_dDismissDate));
  v3 = this->sIntro;
  v4 = (char *)__that - (char *)this;
  v5 = 128;
  do
  {
    *v3 = v3[v4];
    ++v3;
    --v5;
  }
  while ( v5 );
  this->dNotifyDate = __that->dNotifyDate;
  memcpy(&this->tm_dNotifyDate, &__that->tm_dNotifyDate, 0x38u);
  v6 = this->sNotify;
  v7 = 512;
  do
  {
    *v6 = v6[v4];
    ++v6;
    --v7;
  }
  while ( v7 );
  return result;
}

//----- (006C2BF0) --------------------------------------------------------
unsigned int __cdecl ITableBase<GTIView_GTIViewInfoTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E94: using guessed type int ITableBase_GTIView_GTIViewInfoTab___ms_pkTable;

//----- (006C2C10) --------------------------------------------------------
void *__thiscall PgTList<GUILD_HISTORY__>::_vector_deleting_destructor_(PgTList<GUILD_HISTORY *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<GUILD_HISTORY *> *v3; // esi@1
  NiTListItem<GUILD_HISTORY *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&PgTList<GUILD_HISTORY__>::_vftable_;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C9414: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);
// 9C9434: using guessed type int (__thiscall *PgTList_GUILD_HISTORY _____vftable_)(void *p, char);

//----- (006C2CA0) --------------------------------------------------------
GTIView *__cdecl GTIViewInfoTab::GetByIndex(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  GTIView *result; // eax@4

  v1 = 0;
  if ( ITableBase<GTIView_GTIViewInfoTab>::GetTotal() )
  {
    while ( *(_BYTE *)CDataReader::GetRecord((CDataReader *)(ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable + 4), v1) != uiIndex )
    {
      ++v1;
      if ( v1 >= ITableBase<GTIView_GTIViewInfoTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (GTIView *)CDataReader::GetRecord((CDataReader *)(ITableBase<GTIView_GTIViewInfoTab>::ms_pkTable + 4), v1);
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97E94: using guessed type int ITableBase_GTIView_GTIViewInfoTab___ms_pkTable;

//----- (006C2CF0) --------------------------------------------------------
void __thiscall CClientGuild::_CClientGuild(CClientGuild *this)
{
  CClientGuild *v1; // esi@1
  unsigned int v2; // eax@1
  char *v3; // edi@1
  NiTListItem<GUILD_HISTORY *> *v4; // ebx@1
  NiTListItem<GUILD_HISTORY *> *v5; // ST00_4@2

  v1 = this;
  v2 = 0;
  v3 = (char *)&this->m_kHistoryList;
  this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&PgTList<GUILD_HISTORY__>::_vftable_;
  v4 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( v4 )
  {
    do
    {
      v5 = v4;
      v4 = v4->m_pkNext;
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 8))(v3, v5);
    }
    while ( v4 );
    v2 = 0;
  }
  *((_DWORD *)v3 + 3) = v2;
  *((_DWORD *)v3 + 1) = v2;
  *((_DWORD *)v3 + 2) = v2;
  *(_DWORD *)v3 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
  v1->m_GttEnemyInfo.GuildRegNo = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[0] = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[4] = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[8] = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[12] = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[16] = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[20] = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[24] = v2;
  *(_DWORD *)&v1->m_GttEnemyInfo.acGuildName[28] = v2;
  v1->m_GttEnemyInfo.uiStatus = 1;
  CGuildTournament::_CGuildTournament(&v1->m_GuildTournament);
  CGuildWarAble::_CGuildWarAble(&v1->m_GuildWarAble);
  CGuild::_CGuild(&v1->baseclass_0);
}
// 9C9414: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);
// 9C9434: using guessed type int (__thiscall *PgTList_GUILD_HISTORY _____vftable_)(void *p, char);

//----- (006C2DE0) --------------------------------------------------------
void *__thiscall GuildTask::_vector_deleting_destructor_(GuildTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildTask::_GuildTask(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006C2E10) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>_0>>::_Insert(...)
{
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5,
      (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < *(_DWORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)this,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v8,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= *(_DWORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 21) )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        1,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (006C2F70) --------------------------------------------------------
unsigned int *__thiscall std::map<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>>::operator__(std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *this, const unsigned int *_Keyval)
{
  std::map<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> > > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v5; // edi@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v6; // eax@8
  unsigned int *result; // eax@8
  std::pair<int const ,int> _Val; // [sp+8h] [bp-8h]@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= *(_DWORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (unsigned int *)(*(_DWORD *)&v5 + 16);
  }
  else
  {
    _Val.baseclass_0.first = *_Keyval;
    _Val.baseclass_0.second = 0;
    v6 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v2,
           &_Val);
    std::_Tree<std::_Tmap_traits<unsigned_long_NiTexture___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiTexture__>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&_Keyval,
      v5,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v6);
    result = (unsigned int *)(_Keyval + 4);
  }
  return result;
}

//----- (006C2FF0) --------------------------------------------------------
void __thiscall GuildNameCache::GuildNameCache(GuildNameCache *this)
{
  GuildNameCache *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  GuildNameCache *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  ITask::ITask(&this->baseclass_0, 0);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildNameCache::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildNameCache::_vftable_;
  v6 = 0;
  v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned long,GuildNameCache::GuildNameStorage *,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,GuildNameCache::GuildNameStorage *> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_kGuildNameCache.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C9524: using guessed type int (__stdcall *GuildNameCache___vftable_)(int uiFlags);
// 9C9540: using guessed type int (__thiscall *GuildNameCache___vftable_)(void *p, char);

//----- (006C30B0) --------------------------------------------------------
void *__thiscall GuildNameCache::_vector_deleting_destructor_(GuildNameCache *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildNameCache::_GuildNameCache(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006C30E0) --------------------------------------------------------
mhReturnType __thiscall mhCollisionManager::DelColliData(mhCollisionManager *this, NiPointer<NiNode> DelNode, mhCollisionType ColliType)
{
  NiNode *v3; // edx@1
  NiNode *v5; // esi@11

  v3 = DelNode.m_pObject;
  if ( !DelNode.m_pObject )
    return (mhReturnType)&DelNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  if ( ColliType )
  {
    if ( ColliType == 1 )
    {
      NiCollisionGroup::RemoveCollider(&this->m_pkCollisionGroup, &DelNode.m_pObject->baseclass_0);
    }
    else
    {
      if ( ColliType != 2 )
        goto LABEL_10;
      NiCollisionGroup::Remove(&this->m_pkCollisionGroup, &DelNode.m_pObject->baseclass_0);
    }
  }
  else
  {
    NiCollisionGroup::RemoveCollidee(&this->m_pkCollisionGroup, &DelNode.m_pObject->baseclass_0);
  }
  v3 = DelNode.m_pObject;
LABEL_10:
  if ( v3 )
  {
    v5 = v3;
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
  return 1;
}

//----- (006C3190) --------------------------------------------------------
mhReturnType __thiscall mhCollisionManager::Create(mhCollisionManager *this, NiNode *RootCollider)
{
  mhReturnType result; // eax@2

  if ( RootCollider )
  {
    NiCollisionGroup::AddCollider(&this->m_pkCollisionGroup, &RootCollider->baseclass_0, 1, -1, 1);
    dword_B67CD0 = 0;
    dword_B67CD4 = 0;
    dword_B67CD8 = 0;
    memset(mhCollisionManager::m_ColliInfo, 0, 0x40u);
    result = 1;
  }
  else
  {
    result = 2;
  }
  return result;
}
// B67CD0: using guessed type int dword_B67CD0;
// B67CD4: using guessed type int dword_B67CD4;
// B67CD8: using guessed type int dword_B67CD8;

//----- (006C31F0) --------------------------------------------------------
mhColliStyle __thiscall mhCollisionManager::Update(mhCollisionManager *this, float fTime, mhGameMainConnectMgr *GameMainConnectMgr)
{
  NiCollisionGroup *v3; // esi@1

  v3 = (NiCollisionGroup *)this;
  if ( mhCollisionManager::m_ColliStyle )
  {
    mhCollisionManager::m_ColliStyle = 0;
    dword_B67CD0 = 0;
    dword_B67CD4 = 0;
    dword_B67CD8 = 0;
    memset(mhCollisionManager::m_ColliInfo, 0, 0x40u);
  }
  NiCollisionGroup::FindCollisions(v3, fTime);
  return mhCollisionManager::m_ColliStyle;
}
// B67C88: using guessed type int mhCollisionManager__m_ColliStyle;
// B67CD0: using guessed type int dword_B67CD0;
// B67CD4: using guessed type int dword_B67CD4;
// B67CD8: using guessed type int dword_B67CD8;

//----- (006C3240) --------------------------------------------------------
mhReturnType __thiscall mhCollisionManager::DelObject(mhCollisionManager *this, mhObject *mhObj, mhCollisionType ColliType)
{
  mhReturnType result; // eax@2
  ResElement *v4; // eax@3
  bool v5; // zf@3
  NiActorManager *v6; // ecx@4
  NiNode *v7; // eax@5
  int v8; // esi@7
  int v9; // esi@10
  ResElement *v10; // eax@14
  NiActorManager *v11; // ecx@15
  ResElement *v12; // eax@18
  NiActorManager *v13; // ecx@19
  ResElement *v14; // eax@22
  NiActorManager *v15; // ecx@23
  NiAVObject *v16; // eax@24
  NiCollisionGroup *v17; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4h] [bp-2Ch]@3
  unsigned int v19; // [sp+20h] [bp-10h]@1
  int v20; // [sp+2Ch] [bp-4h]@3
  int v21; // [sp+30h] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v17 = (NiCollisionGroup *)this;
  if ( mhObj )
  {
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &thisa,
      &mhCollisionParentName_0,
      0,
      0xFFFFFFFFu);
    v4 = mhObj->m_pkResource;
    v5 = v4->m_bIsCanAnimation == 0;
    v20 = 0;
    if ( v5 || (v6 = v4->m_pActorMgr.m_pObject) == 0 )
      v7 = v4->m_pNiNode.m_pObject;
    else
      v7 = (NiNode *)v6->m_spNIFRoot.m_pObject;
    v8 = mhMiscUtil::GetNodeMaxNum(v7, &thisa);
    v20 = -1;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( v8 >= 0 )
    {
      v9 = v8 + 1;
      do
      {
        if ( ColliType )
        {
          if ( ColliType == 1 )
          {
            v12 = mhObj->m_pkResource;
            if ( v12->m_bIsCanAnimation && (v13 = v12->m_pActorMgr.m_pObject) != 0 )
              NiCollisionGroup::RemoveCollider(v17, v13->m_spNIFRoot.m_pObject);
            else
              NiCollisionGroup::RemoveCollider(v17, &v12->m_pNiNode.m_pObject->baseclass_0);
          }
          else
          {
            if ( ColliType == 2 )
            {
              v10 = mhObj->m_pkResource;
              if ( v10->m_bIsCanAnimation && (v11 = v10->m_pActorMgr.m_pObject) != 0 )
                NiCollisionGroup::Remove(v17, v11->m_spNIFRoot.m_pObject);
              else
                NiCollisionGroup::Remove(v17, &v10->m_pNiNode.m_pObject->baseclass_0);
            }
          }
        }
        else
        {
          v14 = mhObj->m_pkResource;
          if ( v14->m_bIsCanAnimation && (v15 = v14->m_pActorMgr.m_pObject) != 0 )
            v16 = v15->m_spNIFRoot.m_pObject;
          else
            v16 = (NiAVObject *)v14->m_pNiNode.m_pObject;
          NiCollisionGroup::RemoveCollidee(v17, v16);
        }
        --v9;
      }
      while ( v9 );
    }
    result = 1;
  }
  else
  {
    result = 4;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C33B0) --------------------------------------------------------
mhColliStyle __cdecl mhCollisionManager::SetCollisionStyleInCallBack(mhColliStyle NewStyle, NiCollisionGroup::Intersect *InterSectInfo, mhConditionBOOL Mainchar, mhConditionBOOL Otherchar)
{
  int v4; // eax@4
  char *v5; // ecx@7
  char *v6; // eax@7
  int v7; // edi@7
  char v8; // dl@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@9
  unsigned int v10; // edi@9
  char v11; // bl@9
  char *v12; // ecx@12
  char *v13; // eax@12
  int v14; // edi@12
  char v15; // dl@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // eax@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // ecx@27
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // ecx@30
  char *v19; // ecx@39
  char *v20; // eax@39
  int v21; // edi@39
  char v22; // dl@40
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v23; // eax@41
  char v24; // bl@41
  int v25; // eax@44
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v26; // ecx@44
  char v28; // [sp+7h] [bp-81h]@16
  char v29; // [sp+7h] [bp-81h]@46
  void *v30; // [sp+8h] [bp-80h]@44
  int v31; // [sp+18h] [bp-70h]@51
  unsigned int v32; // [sp+1Ch] [bp-6Ch]@49
  void *v33; // [sp+24h] [bp-64h]@39
  unsigned int v34; // [sp+34h] [bp-54h]@39
  unsigned int v35; // [sp+38h] [bp-50h]@39
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+40h] [bp-48h]@7
  void *p; // [sp+5Ch] [bp-2Ch]@12
  unsigned int _N0; // [sp+6Ch] [bp-1Ch]@12
  unsigned int v39; // [sp+70h] [bp-18h]@12
  unsigned int v40; // [sp+78h] [bp-10h]@1
  int v41; // [sp+84h] [bp-4h]@9
  int v42; // [sp+88h] [bp+0h]@1

  v40 = (unsigned int)&v42 ^ __security_cookie;
  if ( NewStyle == 1 )
  {
    if ( mhCollisionManager::m_ColliStyle < 2 )
    {
      mhCollisionManager::m_ColliStyle = 1;
      return mhCollisionManager::m_ColliStyle;
    }
    mhCollisionManager::m_ColliStyle = 3;
    v19 = InterSectInfo->pkRoot0->baseclass_0.m_pcName;
    v20 = InterSectInfo->pkRoot0->baseclass_0.m_pcName;
    v35 = 15;
    v34 = 0;
    LOBYTE(v33) = 0;
    v21 = (int)(v20 + 1);
    do
      v22 = *v20++;
    while ( v22 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v33,
      v19,
      (unsigned int)&v20[-v21]);
    v23 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCharColliRootNodeName_0;
    v41 = 0;
    v10 = 16;
    v24 = 1;
    if ( mhCharColliRootNodeName_0.baseclass_0._Myres < 0x10 )
      v23 = &mhCharColliRootNodeName_0;
    if ( !std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v33,
            0,
            v34,
            v23->baseclass_0.___u0.baseclass_0.dummy,
            mhCharColliRootNodeName_0.baseclass_0._Mysize) )
      goto LABEL_61;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v30,
      InterSectInfo->pkRoot1->baseclass_0.m_pcName);
    v26 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCharColliRootNodeName_0;
    v24 = 3;
    v41 = 1;
    if ( mhCharColliRootNodeName_0.baseclass_0._Myres < 0x10 )
      v26 = &mhCharColliRootNodeName_0;
    v29 = 0;
    if ( !std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
            (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v25,
            0,
            *(_DWORD *)(v25 + 16),
            v26->baseclass_0.___u0.baseclass_0.dummy,
            mhCharColliRootNodeName_0.baseclass_0._Mysize) )
LABEL_61:
      v29 = 1;
    if ( v24 & 2 )
    {
      v24 &= 0xFDu;
      if ( v32 >= 0x10 )
        operator delete(v30);
      v32 = 15;
      v31 = 0;
      LOBYTE(v30) = 0;
    }
    if ( v24 & 1 && v35 >= 0x10 )
      operator delete(v33);
    if ( !v29 )
      goto LABEL_35;
    goto LABEL_33;
  }
  if ( NewStyle != 2 )
  {
    mhCollisionManager::m_ColliStyle = NewStyle;
    return mhCollisionManager::m_ColliStyle;
  }
  v4 = mhCollisionManager::m_ColliStyle;
  if ( mhCollisionManager::m_ColliStyle == 1 || (mhCollisionManager::m_ColliStyle = 2, v4 == 3) )
    mhCollisionManager::m_ColliStyle = 3;
  v5 = InterSectInfo->pkRoot0->baseclass_0.m_pcName;
  v6 = InterSectInfo->pkRoot0->baseclass_0.m_pcName;
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v7 = (int)(v6 + 1);
  do
    v8 = *v6++;
  while ( v8 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, v5, (unsigned int)&v6[-v7]);
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCharColliRootNodeName_0;
  v10 = 16;
  v11 = 4;
  v41 = 2;
  if ( mhCharColliRootNodeName_0.baseclass_0._Myres < 0x10 )
    v9 = &mhCharColliRootNodeName_0;
  if ( !std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
          &this,
          0,
          this.baseclass_0._Mysize,
          v9->baseclass_0.___u0.baseclass_0.dummy,
          mhCharColliRootNodeName_0.baseclass_0._Mysize) )
    goto LABEL_62;
  v12 = InterSectInfo->pkRoot1->baseclass_0.m_pcName;
  v13 = InterSectInfo->pkRoot1->baseclass_0.m_pcName;
  v39 = 15;
  _N0 = 0;
  LOBYTE(p) = 0;
  v14 = (int)(v13 + 1);
  do
    v15 = *v13++;
  while ( v15 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
    v12,
    (unsigned int)&v13[-v14]);
  v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCharColliRootNodeName_0;
  v11 = 12;
  v41 = 3;
  if ( mhCharColliRootNodeName_0.baseclass_0._Myres < 0x10 )
    v16 = &mhCharColliRootNodeName_0;
  v10 = 16;
  v28 = 0;
  if ( !std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
          0,
          _N0,
          v16->baseclass_0.___u0.baseclass_0.dummy,
          mhCharColliRootNodeName_0.baseclass_0._Mysize) )
LABEL_62:
    v28 = 1;
  if ( v11 & 8 )
  {
    v11 &= 0xF7u;
    if ( v39 >= v10 )
      operator delete(p);
    v39 = 15;
    _N0 = 0;
    LOBYTE(p) = 0;
  }
  if ( v11 & 4 )
  {
    if ( this.baseclass_0._Myres >= v10 )
      operator delete(*(void **)&this);
    this.baseclass_0._Myres = 15;
    this.baseclass_0._Mysize = 0;
    this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  if ( v28 )
  {
    v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCollisionParentNamePick_0;
    if ( mhCollisionParentNamePick_0.baseclass_0._Myres < v10 )
      v17 = &mhCollisionParentNamePick_0;
    if ( !strncmp(
            InterSectInfo->pkObj0->baseclass_0.m_pcName,
            v17->baseclass_0.___u0.baseclass_0.dummy,
            mhCollisionParentNamePick_0.baseclass_0._Mysize) )
      goto LABEL_63;
    v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCollisionParentNamePick_0;
    if ( mhCollisionParentNamePick_0.baseclass_0._Myres < v10 )
      v18 = &mhCollisionParentNamePick_0;
    if ( !strncmp(
            InterSectInfo->pkObj1->baseclass_0.m_pcName,
            v18->baseclass_0.___u0.baseclass_0.dummy,
            mhCollisionParentNamePick_0.baseclass_0._Mysize) )
    {
LABEL_63:
      dword_B67CD8 = 1;
      dword_B67CD4 = 1;
      return mhCollisionManager::m_ColliStyle;
    }
LABEL_33:
    memcpy(mhCollisionManager::m_ColliInfo, InterSectInfo, 4 * v10);
    if ( Mainchar != 2 )
      dword_B67CD4 = Mainchar;
  }
LABEL_35:
  if ( Otherchar != 2 )
    dword_B67CD0 = Otherchar;
  return mhCollisionManager::m_ColliStyle;
}
// A85C00: using guessed type int __security_cookie;
// B67C88: using guessed type int mhCollisionManager__m_ColliStyle;
// B67CD0: using guessed type int dword_B67CD0;
// B67CD4: using guessed type int dword_B67CD4;
// B67CD8: using guessed type int dword_B67CD8;

//----- (006C3770) --------------------------------------------------------
int __cdecl mhCollisionManager::Callback(NiCollisionGroup::Intersect *kIntersect)
{
  NiAVObject *v1; // esi@1
  NiAVObject *v2; // edi@1
  const char *v3; // eax@3
  const char *v4; // ecx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@6
  bool v6; // bl@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@7
  bool v8; // bl@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@10
  bool v10; // bl@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@11
  bool v12; // bl@11
  char v13; // bl@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // eax@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@15
  char v16; // bl@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // eax@24
  mhColliStyle v20; // [sp-20h] [bp-ACh]@12
  NiCollisionGroup::Intersect *v21; // [sp-1Ch] [bp-A8h]@12
  mhConditionBOOL v22; // [sp-18h] [bp-A4h]@12
  mhConditionBOOL v23; // [sp-14h] [bp-A0h]@12
  char bCharCol; // [sp+Bh] [bp-81h]@1
  char bCharCola; // [sp+Bh] [bp-81h]@15
  char bCharColb; // [sp+Bh] [bp-81h]@24
  char v27; // [sp+Ch] [bp-80h]@24
  char v28; // [sp+28h] [bp-64h]@23
  char v29; // [sp+44h] [bp-48h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+60h] [bp-2Ch]@6
  unsigned int v31; // [sp+7Ch] [bp-10h]@1
  int v32; // [sp+88h] [bp-4h]@6
  int v33; // [sp+8Ch] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v1 = kIntersect->pkRoot0;
  v2 = kIntersect->pkRoot1;
  bCharCol = 0;
  if ( kIntersect->pkRoot0 )
  {
    if ( v2 )
    {
      v3 = v1->baseclass_0.m_pcName;
      if ( v3 )
      {
        v4 = v2->baseclass_0.m_pcName;
        if ( v4 )
        {
          if ( strcmp(v3, v4) )
          {
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
              &this,
              v1->baseclass_0.m_pcName);
            v32 = 0;
            v6 = std::operator__<char_std::char_traits<char>_std::allocator<char>>(v5, &mhCharColliRootNodeName_0);
            v32 = -1;
            std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&this);
            if ( v6 )
            {
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                &this,
                v2->baseclass_0.m_pcName);
              v32 = 1;
              v8 = std::operator__<char_std::char_traits<char>_std::allocator<char>>(v7, &mhOtherCharColliRootName_0);
              v32 = -1;
              std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&this);
              if ( v8 )
                mhCollisionManager::SetCollisionStyleInCallBack(
                  MH_COLSTYLE_OBJ_CHAR,
                  kIntersect,
                  MH_CONDITION_TRUE,
                  MH_CONDITION_HOLD);
              bCharCol = 1;
            }
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
              &this,
              v1->baseclass_0.m_pcName);
            v32 = 2;
            v10 = std::operator__<char_std::char_traits<char>_std::allocator<char>>(v9, &mhOtherCharColliRootName_0);
            v32 = -1;
            std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&this);
            if ( v10 )
            {
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                &this,
                v2->baseclass_0.m_pcName);
              v32 = 3;
              v12 = std::operator__<char_std::char_traits<char>_std::allocator<char>>(v11, &mhCharColliRootNodeName_0);
              v32 = -1;
              std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&this);
              if ( v12 )
              {
                v23 = 1;
                v22 = 2;
                v21 = kIntersect;
                v20 = 2;
LABEL_33:
                mhCollisionManager::SetCollisionStyleInCallBack(v20, v21, v22, v23);
                return 0;
              }
            }
            else
            {
              if ( bCharCol != 1 )
              {
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                  (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v29,
                  v1->baseclass_0.m_pcName);
                v13 = 1;
                v32 = 4;
                if ( std::operator__<char_std::char_traits<char>_std::allocator<char>>(v14, &mhCharColliRootNodeName_0)
                  || (std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                        &this,
                        v2->baseclass_0.m_pcName),
                      v13 = 3,
                      v32 = 5,
                      bCharCola = 0,
                      std::operator__<char_std::char_traits<char>_std::allocator<char>>(v15, &mhCharColliRootNodeName_0)) )
                  bCharCola = 1;
                if ( v13 & 2 )
                {
                  v13 &= 0xFDu;
                  std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&this);
                }
                v32 = -1;
                if ( v13 & 1 )
                {
                  v13 &= 0xFEu;
                  std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v29);
                }
                if ( bCharCola )
                {
                  v23 = 2;
                  v22 = 1;
                  v21 = kIntersect;
                  v20 = 2;
                }
                else
                {
                  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v28,
                    v1->baseclass_0.m_pcName);
                  v16 = v13 | 4;
                  v32 = 6;
                  if ( std::operator__<char_std::char_traits<char>_std::allocator<char>>(
                         v17,
                         &mhOtherCharColliRootName_0)
                    || (std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v27,
                          v2->baseclass_0.m_pcName),
                        v16 |= 8u,
                        v32 = 7,
                        bCharColb = 0,
                        std::operator__<char_std::char_traits<char>_std::allocator<char>>(
                          v18,
                          &mhOtherCharColliRootName_0)) )
                    bCharColb = 1;
                  if ( v16 & 8 )
                  {
                    v16 &= 0xF7u;
                    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v27);
                  }
                  v32 = -1;
                  if ( v16 & 4 )
                    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&v28);
                  if ( bCharColb )
                  {
                    v23 = 1;
                    v22 = 2;
                    v21 = kIntersect;
                    v20 = 2;
                  }
                  else
                  {
                    v23 = 2;
                    v22 = 2;
                    v21 = kIntersect;
                    v20 = 1;
                  }
                }
                goto LABEL_33;
              }
            }
          }
        }
      }
    }
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C3AB0) --------------------------------------------------------
mhReturnType __thiscall mhCollisionManager::AddObject(mhCollisionManager *this, mhObject *mhObj, mhCollisionType ColliType)
{
  mhReturnType result; // eax@2
  ResElement *v4; // eax@3
  bool v5; // zf@3
  NiActorManager *v6; // ecx@4
  NiNode *v7; // eax@5
  int v8; // edi@8
  ResElement *v9; // eax@9
  NiActorManager *v10; // ecx@10
  NiNode *v11; // eax@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // ecx@13
  int v13; // eax@15
  int v14; // ecx@16
  ResElement *v15; // eax@17
  NiActorManager *v16; // ecx@19
  NiActorManager *v17; // ecx@23
  NiAVObject *v18; // eax@24
  int LoadCollNodeNum; // [sp+18h] [bp-34h]@7
  NiCollisionGroup *thisa; // [sp+1Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > CollNodeName; // [sp+20h] [bp-2Ch]@3
  unsigned int v22; // [sp+3Ch] [bp-10h]@1
  int v23; // [sp+48h] [bp-4h]@3
  int v24; // [sp+4Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  thisa = (NiCollisionGroup *)this;
  if ( mhObj )
  {
    CollNodeName.baseclass_0._Myres = 15;
    CollNodeName.baseclass_0._Mysize = 0;
    CollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &CollNodeName,
      &mhCollisionParentName_0,
      0,
      0xFFFFFFFFu);
    v4 = mhObj->m_pkResource;
    v5 = v4->m_bIsCanAnimation == 0;
    v23 = 0;
    if ( v5 || (v6 = v4->m_pActorMgr.m_pObject) == 0 )
      v7 = v4->m_pNiNode.m_pObject;
    else
      v7 = (NiNode *)v6->m_spNIFRoot.m_pObject;
    LoadCollNodeNum = mhMiscUtil::GetNodeMaxNum(v7, &CollNodeName);
    if ( LoadCollNodeNum < 0 )
    {
LABEL_28:
      if ( CollNodeName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&CollNodeName);
      result = 1;
    }
    else
    {
      v8 = 0;
      while ( 1 )
      {
        mhMiscUtil::MakeNodeNameNum(&CollNodeName, v8, 3);
        v9 = mhObj->m_pkResource;
        if ( v9->m_bIsCanAnimation && (v10 = v9->m_pActorMgr.m_pObject) != 0 )
          v11 = (NiNode *)v10->m_spNIFRoot.m_pObject;
        else
          v11 = v9->m_pNiNode.m_pObject;
        v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&CollNodeName;
        if ( CollNodeName.baseclass_0._Myres < 0x10 )
          v12 = &CollNodeName;
        v13 = (int)v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                     (NiRefObject *)v11,
                     (unsigned int)v12);
        if ( !v13 )
          break;
        v14 = *(_DWORD *)(v13 + 172);
        if ( !v14 )
        {
          if ( CollNodeName.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&CollNodeName);
          return 11;
        }
        *(_DWORD *)(v14 + 56) = mhCollisionManager::Callback;
        NiAVObject::Update((NiAVObject *)v13, 0.0, 1);
        v15 = mhObj->m_pkResource;
        if ( ColliType == 1 )
        {
          if ( v15->m_bIsCanAnimation && (v16 = v15->m_pActorMgr.m_pObject) != 0 )
            NiCollisionGroup::AddCollider(thisa, v16->m_spNIFRoot.m_pObject, 0, -1, 1);
          else
            NiCollisionGroup::AddCollider(thisa, &v15->m_pNiNode.m_pObject->baseclass_0, 0, -1, 1);
        }
        else
        {
          if ( v15->m_bIsCanAnimation && (v17 = v15->m_pActorMgr.m_pObject) != 0 )
            v18 = v17->m_spNIFRoot.m_pObject;
          else
            v18 = (NiAVObject *)v15->m_pNiNode.m_pObject;
          NiCollisionGroup::AddCollidee(thisa, v18, 0, -1, 1);
        }
        mhMiscUtil::DelNodeNameNum(&CollNodeName, 3);
        ++v8;
        if ( LoadCollNodeNum < v8 )
          goto LABEL_28;
      }
      if ( CollNodeName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&CollNodeName);
      result = 10;
    }
  }
  else
  {
    result = 4;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C3CA0) --------------------------------------------------------
mhReturnType __thiscall mhCollisionManager::AddColliData(mhCollisionManager *this, NiPointer<NiNode> AddNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ColliNodeName, mhCollisionType ColliType)
{
  NiCollisionGroup *v4; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@2
  int v6; // eax@4
  mhReturnType result; // eax@9
  int v8; // ecx@10

  v4 = (NiCollisionGroup *)this;
  if ( !AddNode.m_pObject )
    return 2;
  v5 = ColliNodeName;
  if ( ColliNodeName->baseclass_0._Myres >= 0x10 )
    v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&ColliNodeName->baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = ((int (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))AddNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v5);
  if ( !v6 )
  {
    if ( AddNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&AddNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( AddNode.m_pObject )
        AddNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)AddNode.m_pObject,
          1u);
    }
    return 2;
  }
  v8 = *(_DWORD *)(v6 + 172);
  if ( v8 )
  {
    *(_DWORD *)(v8 + 56) = mhCollisionManager::Callback;
    NiAVObject::Update((NiAVObject *)v6, 0.0, 1);
    if ( ColliType == 1 )
      NiCollisionGroup::AddCollider(v4, &AddNode.m_pObject->baseclass_0, 0, -1, 1);
    else
      NiCollisionGroup::AddCollidee(v4, &AddNode.m_pObject->baseclass_0, 0, -1, 1);
    if ( AddNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&AddNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && AddNode.m_pObject )
      AddNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)AddNode.m_pObject,
        1u);
    result = 1;
  }
  else
  {
    if ( AddNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&AddNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && AddNode.m_pObject )
      AddNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)AddNode.m_pObject,
        1u);
    result = 11;
  }
  return result;
}

//----- (006C3E00) --------------------------------------------------------
mhReturnType __thiscall mhCollisionManager::MoveColliGroup(mhCollisionManager *this, mhObject *mhObj, mhCollisionType Dest)
{
  ResElement *v3; // eax@1
  NiCollisionGroup *v4; // esi@1
  NiActorManager *v5; // ecx@2
  NiAVObject *v6; // eax@3
  mhReturnType result; // eax@6

  v3 = mhObj->m_pkResource;
  v4 = (NiCollisionGroup *)this;
  if ( v3->m_bIsCanAnimation && (v5 = v3->m_pActorMgr.m_pObject) != 0 )
    v6 = v5->m_spNIFRoot.m_pObject;
  else
    v6 = (NiAVObject *)v3->m_pNiNode.m_pObject;
  if ( v6 )
  {
    if ( Dest == 1 )
      NiCollisionGroup::RemoveCollidee(v4, v6);
    else
      NiCollisionGroup::RemoveCollider(v4, v6);
    mhCollisionManager::AddObject((mhCollisionManager *)v4, mhObj, Dest);
    result = 1;
  }
  else
  {
    result = 2;
  }
  return result;
}

//----- (006C3E60) --------------------------------------------------------
int __cdecl MiniHouseIndoor::SetZeroID()
{
  int result; // eax@1

  result = 0;
  MiniHouseIndoor::AddObjectID = 0;
  MiniHouseIndoor::AddTexID = 0;
  MiniHouseIndoor::AddResObjID = 0;
  return result;
}
// B67CDC: using guessed type int MiniHouseIndoor__AddObjectID;
// B67CE0: using guessed type int MiniHouseIndoor__AddTexID;
// B67CE4: using guessed type int MiniHouseIndoor__AddResObjID;

//----- (006C3E80) --------------------------------------------------------
void __thiscall MiniHouseIndoor::RevChangeEndure(MiniHouseIndoor *this, MHE_STEP e, int iGUID)
{
  this->m_RevChangeEndure.e = e;
  this->m_RevChangeEndure.iCandidateObjID = iGUID;
}

//----- (006C3EA0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::DelUI(MiniHouseIndoor *this, mhUIID DelID)
{
  return 1;
}

//----- (006C3EB0) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::IsNormalState(MiniHouseIndoor *this)
{
  return this->m_eState == 1;
}

//----- (006C3EC0) --------------------------------------------------------
NiAVObject *__thiscall MiniHouseIndoor::MoveSceneType(MiniHouseIndoor *this, mhObject *Obj, mhObjSceneType To, mhObjSceneType From, bool bCallGameFrameNet)
{
  return 0;
}

//----- (006C3ED0) --------------------------------------------------------
tm *__usercall localtime_1<eax>(const int *_Time<eax>)
{
  return _localtime32(_Time);
}

//----- (006C3EE0) --------------------------------------------------------
int __usercall mktime_3<eax>(tm *_Tm<eax>)
{
  return _mktime32(_Tm);
}

//----- (006C3EF0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::SetPickedObj(MiniHouseIndoor *this, mhObject *Picked)
{
  return 0;
}

//----- (006C3F00) --------------------------------------------------------
NiAVObject *__thiscall MiniHouseIndoor::GetLightNode(MiniHouseIndoor *this)
{
  return 0;
}

//----- (006C3F10) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::MakeDefault(MiniHouseIndoor *this)
{
  return 1;
}

//----- (006C3F20) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::DelObject(MiniHouseIndoor *this, int iGUID, int iResGUID)
{
  return 1;
}

//----- (006C3F30) --------------------------------------------------------
int __thiscall MiniHouseIndoor::GetEndureStep(MiniHouseIndoor *this, Item *pItem, int Nowtime)
{
  int result; // eax@1
  int v4; // esi@6
  int v5; // eax@8
  signed int v6; // esi@11
  char v7; // [sp+0h] [bp-B4h]@2
  unsigned int v8; // [sp+19h] [bp-9Bh]@2
  __int16 v9; // [sp+64h] [bp-50h]@2
  char v10; // [sp+66h] [bp-4Eh]@2
  tm ts; // [sp+68h] [bp-4Ch]@6
  tm Time1; // [sp+8Ch] [bp-28h]@6
  unsigned int v13; // [sp+B0h] [bp-4h]@1
  int v14; // [sp+B4h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  result = (int)pItem;
  if ( pItem )
  {
    memcpy(&v7, &pItem->m_kStruct, 0x64u);
    v9 = *(_WORD *)((char *)&pItem->m_kStruct.itemattr.binditem.portal[9].y + 1);
    v10 = BYTE3(pItem->m_kStruct.itemattr.binditem.portal[9].y);
    if ( (unsigned __int8)v8 == 255 )
    {
      result = 100000;
    }
    else
    {
      if ( (_BYTE)v8 )
      {
        Time1.tm_min = v8 >> 25;
        Time1.tm_hour = (v8 >> 19) & 0x3F;
        Time1.tm_mon = ((v8 >> 8) & 0x1F) - 1;
        Time1.tm_sec = 0;
        Time1.tm_mday = (v8 >> 13) & 0x3F;
        Time1.tm_year = (unsigned __int8)v8 + 100;
        Time1.tm_isdst = 0;
        memcpy(&ts, _localtime32(&Nowtime), sizeof(ts));
        v4 = _mktime32(&Time1);
        if ( v4 != -1
          && (!ts.tm_sec ? (v5 = Nowtime) : (ts.tm_sec = 0, v5 = _mktime32(&ts)), v4 > v5 && (v6 = v4 - v5, v6 > 0)) )
          result = v6 / 3600;
        else
          result = 0;
      }
      else
      {
        result = 200000;
      }
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C4080) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::ObjDoAction(MiniHouseIndoor *this, char action, unsigned __int16 Actor, unsigned __int16 ActObj)
{
  MiniHouseIndoor *v4; // edi@1
  Char *v5; // eax@2
  Char *v6; // esi@2
  mhReturnType result; // eax@6

  v4 = this;
  if ( Actor != -1 )
  {
    v5 = CharMgr::GetChar(&g_kCharMgr, Actor);
    v6 = v5;
    if ( v5 )
    {
      if ( !Char::CheckActState(v5, 500000) )
        ((void (__thiscall *)(_DWORD))v6->baseclass_0.vfptr[14].DeleteAbStateByAbstateIndex)(v6);
    }
  }
  if ( ActObj == -1
    || (result = (mhReturnType)mhObjectManager::GetObjectA(&v4->m_ManagerMediator.m_ObjManager, ActObj)) != 0 )
    result = 1;
  return result;
}

//----- (006C40F0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::ObjDoAction(MiniHouseIndoor *this, unsigned __int16 nFurnitureHnd, unsigned __int16 ActorHnd, unsigned __int16 Anihandle, unsigned __int16 NextAnihandle, char ActorIdx, char ActeeIdx)
{
  mhReturnType result; // eax@1

  result = (mhReturnType)mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, nFurnitureHnd);
  if ( result )
  {
    mhObject::SetAct((mhObject *)result, Anihandle, NextAnihandle);
    result = 1;
  }
  return result;
}

//----- (006C4120) --------------------------------------------------------
void __thiscall MiniHouseIndoor::ArrangeModeReq(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // eax@1
  mhGameMainConnectMgr *v2; // ecx@1

  v1 = this;
  v2 = this->m_GameMainConnectMgr;
  if ( v2 )
    mhGameMainConnectMgr::SendDecorateModeReq(v2, v1->m_eState);
}

//----- (006C4140) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::Clear(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  mhReturnType result; // eax@2

  v1 = this;
  if ( mhResTableManager::Clear(&this->m_ManagerMediator.m_ResTableManager) != 1
    || mhObjectManager::Clear(&v1->m_ManagerMediator.m_ObjManager) != 1 )
  {
    result = 0;
  }
  else
  {
    NiCollisionGroup::RemoveAll(&v1->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
    result = 1;
  }
  return result;
}

//----- (006C4170) --------------------------------------------------------
int __thiscall MiniHouseIndoor::GetPickedObjID(MiniHouseIndoor *this)
{
  mhObject *v1; // eax@1
  int result; // eax@2

  v1 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, (NiNode *)this->m_PickedObj);
  if ( v1 )
    result = v1->m_iGUID;
  else
    result = -1;
  return result;
}

//----- (006C4190) --------------------------------------------------------
void __thiscall MiniHouseIndoor::DelScene(MiniHouseIndoor *this, NiAVObject *spNode, mhObjSceneType Dest)
{
  NiAVObject *v3; // esi@2
  volatile LONG *v4; // [sp-4h] [bp-8h]@3

  if ( Dest == 1 )
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->m_spAbStateEffScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &spNode,
      spNode);
    v3 = spNode;
    if ( !spNode )
      return;
    v4 = (volatile LONG *)&spNode->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  }
  else
  {
    ((void (__stdcall *)(_DWORD, _DWORD))this->m_spNormalScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &spNode,
      spNode);
    v3 = spNode;
    if ( !spNode )
      return;
    v4 = (volatile LONG *)&spNode->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
  }
  if ( !InterlockedDecrement(v4) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (006C4200) --------------------------------------------------------
mhObject *__thiscall MiniHouseIndoor::GetObjectA(MiniHouseIndoor *this, NiAVObject *pkNode)
{
  mhObject *result; // eax@1
  mhObjectManager *v3; // esi@2
  NiNode *v4; // eax@2

  result = (mhObject *)pkNode;
  if ( pkNode )
  {
    v3 = &this->m_ManagerMediator.m_ObjManager;
    v4 = mhObjectManager::FindRootNode(&this->m_ManagerMediator.m_ObjManager, (NiNode *)pkNode);
    result = mhObjectManager::GetObjectA(v3, v4);
  }
  return result;
}

//----- (006C4230) --------------------------------------------------------
void __thiscall MiniHouseIndoor::MainCharRunAwayFromObj(MiniHouseIndoor *this, NiPoint3 *CharPos, NiPoint3 *ColiPoint)
{
  MiniHouseIndoor *v3; // edi@1
  Char *v4; // eax@1
  Char *v5; // eax@1
  MainChar *v6; // eax@2
  mhGameMainConnectMgr *v7; // ecx@4
  float v8; // ST10_4@4
  float v9; // ST14_4@4
  float v10; // ST18_4@4
  MainChar *v11; // eax@4
  MainChar *v12; // eax@4
  MainChar *v13; // eax@4
  int uiFirstCode; // [sp+10h] [bp-4h]@1

  v3 = this;
  v4 = (Char *)mhGameMainConnectMgr::GetMainChar(this->m_GameMainConnectMgr);
  Char::GetAniCode(v4, 0, (unsigned int *)&uiFirstCode, 0);
  v5 = (Char *)mhGameMainConnectMgr::GetMainChar(v3->m_GameMainConnectMgr);
  if ( Char::CheckActState(v5, 200000)
    || (v6 = mhGameMainConnectMgr::GetMainChar(v3->m_GameMainConnectMgr),
        JumpProcessor::IsJump(&v6->baseclass_0.m_kJumpProcessor))
    || uiFirstCode == 100000 )
  {
    v7 = v3->m_GameMainConnectMgr;
    v8 = CharPos->x - ColiPoint->x;
    v9 = CharPos->y - ColiPoint->y;
    v10 = CharPos->z - ColiPoint->z;
    CharPos->x = CharPos->x + v8;
    CharPos->y = CharPos->y + v9;
    CharPos->z = CharPos->z + v10;
    v11 = mhGameMainConnectMgr::GetMainChar(v7);
    MainChar::SetStartReserveAct(v11, RESERVEACT_PICKGROUND);
    v12 = mhGameMainConnectMgr::GetMainChar(v3->m_GameMainConnectMgr);
    MainChar::SetRevserveMovePos(v12, CharPos);
    v13 = mhGameMainConnectMgr::GetMainChar(v3->m_GameMainConnectMgr);
    MainChar::StartMoveTarget(v13);
    mhGameMainConnectMgr::SendMainCharPosReq(v3->m_GameMainConnectMgr);
  }
}

//----- (006C4310) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::DelPickedObj(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  mhReturnType result; // eax@1

  v1 = this;
  result = (mhReturnType)mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, (NiNode *)this->m_PickedObj);
  if ( result )
  {
    mhGameMainConnectMgr::SendDelObjReq(v1->m_GameMainConnectMgr, *(_DWORD *)(result + 4));
    result = 1;
  }
  return result;
}

//----- (006C4340) --------------------------------------------------------
#error "6C4428: positive sp value has been found (funcsize=93)"

//----- (006C4430) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::IsPopUpMHItemInvState(MiniHouseIndoor *this)
{
  bool result; // al@1

  result = this->m_bAskReturnToInvState;
  if ( result == 1 )
    result = this->m_iReturnToInvItemID != -1;
  return result;
}

//----- (006C4450) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::SetCharEmotion(MiniHouseIndoor *this, unsigned __int16 TargetObjID, char ActPos, MHEmotion *pkEmotionInfo)
{
  MiniHouseIndoor *v4; // esi@1
  char v6; // bl@4
  PgFrameWork *v7; // eax@10
  unsigned __int16 v8; // ax@11
  void *v9; // [sp-4h] [bp-10h]@7

  v4 = this;
  if ( TargetObjID != -1 )
  {
    v6 = ActPos;
    if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
    {
      if ( v4->m_mhCharEmotionInfo.TargetObjID != TargetObjID )
      {
        v9 = GameFrameWorkID;
LABEL_10:
        v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, v9);
        GameFrameWork::On_NC_MINIHOUSE_FURNITURE_EMOTION_CANCEL_REQ((GameFrameWork *)v7);
        goto LABEL_11;
      }
      if ( v4->m_mhCharEmotionInfo.ActPos != ActPos )
      {
        v9 = GameFrameWorkID;
        goto LABEL_10;
      }
    }
LABEL_11:
    v8 = v4->m_mhCharEmotionInfo.TargetObjID;
    v4->m_mhCharEmotionInfo.OldActPos = v4->m_mhCharEmotionInfo.ActPos;
    v4->m_mhCharEmotionInfo.OldTargetObjID = v8;
    goto LABEL_12;
  }
  if ( this->m_mhCharEmotionInfo.TargetObjID == -1 )
    return 0;
  v6 = ActPos;
  this->m_mhCharEmotionInfo.OldActPos = ActPos;
  this->m_mhCharEmotionInfo.OldTargetObjID = -1;
LABEL_12:
  v4->m_mhCharEmotionInfo.TargetObjID = TargetObjID;
  v4->m_mhCharEmotionInfo.ActPos = v6;
  v4->m_mhCharEmotionInfo.EmotionInfo = pkEmotionInfo;
  return 1;
}

//----- (006C4510) --------------------------------------------------------
void __thiscall MiniHouseIndoor::AddObjSeatInfo(MiniHouseIndoor *this, char ActPos, unsigned __int16 CharhWnd, unsigned __int16 mhObj)
{
  mhObject *v4; // esi@1
  char *v5; // eax@2

  v4 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, mhObj);
  if ( v4 )
  {
    v5 = fs("Add---Object seats %d. char=%d. ActPos = %d\n");
    OutputDebugStringA(v5);
    mhObject::AddObjSeatInfo(v4, ActPos, CharhWnd);
  }
}

//----- (006C4560) --------------------------------------------------------
void __thiscall MiniHouseIndoor::DelObjSeatInfo(MiniHouseIndoor *this, unsigned __int16 CharhWnd)
{
  mhObject *v2; // eax@1

  v2 = mhObjectManager::GetmhEmotionObj(&this->m_ManagerMediator.m_ObjManager, CharhWnd);
  if ( v2 )
    mhObject::DelObjSeatInfo(v2, CharhWnd);
}

//----- (006C4590) --------------------------------------------------------
void __thiscall MiniHouseIndoor::CatchAllGeometry(MiniHouseIndoor *this, NiAVObject *pkObject, PgTList<NiGeometry *> *kList)
{
  NiAVObject *v3; // edi@1
  int v4; // eax@2
  int v5; // eax@5
  NiTimeController *v6; // esi@9
  PgTList<NiGeometry *> *v7; // ebx@10
  NiAVObject *v8; // eax@12
  MiniHouseIndoor *thisa; // [sp+4h] [bp-4h]@1

  v3 = pkObject;
  thisa = this;
  if ( pkObject )
  {
    v4 = ((int (__thiscall *)(_DWORD))pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(pkObject);
    if ( v4 )
    {
      while ( (NiRTTI *)v4 != &NiNode::m_RTTI )
      {
        v4 = *(_DWORD *)(v4 + 4);
        if ( !v4 )
          goto LABEL_5;
      }
      v6 = 0;
      if ( v3[1].baseclass_0.m_ppkExtra )
      {
        v7 = kList;
        do
        {
          if ( v3[1].baseclass_0.m_spControllers.m_pObject > v6 )
            v8 = *(NiAVObject **)(v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount + 4 * (_DWORD)v6);
          else
            v8 = 0;
          MiniHouseIndoor::CatchAllGeometry(thisa, v8, v7);
          v6 = (NiTimeController *)((char *)v6 + 1);
        }
        while ( (NiExtraData **)v6 < v3[1].baseclass_0.m_ppkExtra );
      }
    }
    else
    {
LABEL_5:
      v5 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v3);
      if ( v5 )
      {
        while ( (NiRTTI *)v5 != &NiGeometry::m_RTTI )
        {
          v5 = *(_DWORD *)(v5 + 4);
          if ( !v5 )
            return;
        }
        pkObject = v3;
        NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)kList,
          (NiD3DXEffectParameter *const *)&pkObject);
      }
    }
  }
}

//----- (006C4640) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::RemoveObjScene(MiniHouseIndoor *this, mhObject *RemoveObj)
{
  int v2; // esi@0
  MiniHouseIndoor *v3; // ebx@1
  mhReturnType result; // eax@2
  ResElement *v5; // eax@3
  NiNode *v6; // ecx@3
  NiActorManager *v7; // edx@4
  NiNode *v8; // eax@5
  mhObject *v9; // esi@8
  mhObject *v10; // esi@12

  v3 = this;
  if ( RemoveObj )
  {
    v5 = RemoveObj->m_pkResource;
    v6 = this->m_spNormalScene.m_pObject;
    if ( v5->m_bIsCanAnimation && (v7 = v5->m_pActorMgr.m_pObject) != 0 )
      v8 = (NiNode *)v7->m_spNIFRoot.m_pObject;
    else
      v8 = v5->m_pNiNode.m_pObject;
    ((void (__stdcall *)(mhObject **, NiNode *, int))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
      &RemoveObj,
      v8,
      v2);
    if ( RemoveObj )
    {
      v9 = RemoveObj;
      if ( !InterlockedDecrement((volatile LONG *)&RemoveObj->m_iGUID) )
      {
        if ( v9 )
          v9->vfptr->__vecDelDtor(v9, 1u);
      }
    }
    ((void (__stdcall *)(mhObject **))v3->m_spAbStateEffScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(&RemoveObj);
    if ( RemoveObj )
    {
      v10 = RemoveObj;
      if ( !InterlockedDecrement((volatile LONG *)&RemoveObj->m_iGUID) )
      {
        if ( v10 )
          v10->vfptr->__vecDelDtor(v10, 1u);
      }
    }
    NiAVObject::Update(&v3->m_spNormalScene.m_pObject->baseclass_0, 0.0, 1);
    NiAVObject::Update(&v3->m_spAbStateEffScene.m_pObject->baseclass_0, 0.0, 1);
    result = 1;
  }
  else
  {
    result = 8;
  }
  return result;
}

//----- (006C4730) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::PickedObjMove(MiniHouseIndoor *this, tagPOINT MousePos, mhObjTranslate TranslateMode)
{
  MiniHouseIndoor *v3; // esi@1
  NiAVObject *v4; // eax@1
  mhReturnType result; // eax@2
  float v6; // edx@3
  float v7; // ST1C_4@4
  NiAVObject **v8; // eax@5
  mhObjTranslate v9; // esi@6
  float NowPos_8; // [sp+1Ch] [bp-10h]@3

  v3 = this;
  v4 = this->m_PickedObj;
  if ( v4 )
  {
    v6 = v4->m_kLocal.m_Translate.y;
    NowPos_8 = v4->m_kLocal.m_Translate.z;
    if ( TranslateMode == 5 )
    {
      v4->m_kLocal.m_Translate.x = v4->m_kLocal.m_Translate.x;
      v4->m_kLocal.m_Translate.y = v6;
      v7 = NowPos_8 + 10.0;
      v4->m_kLocal.m_Translate.z = v7;
      NiAVObject::Update(this->m_PickedObj, 0.0, 1);
    }
    v8 = (NiAVObject **)MiniHouseIndoor::GetObjRootScene(v3, (NiPointer<NiNode> *)&TranslateMode);
    NiAVObject::Update(*v8, 0.0, 1);
    if ( TranslateMode )
    {
      v9 = TranslateMode;
      if ( !InterlockedDecrement((volatile LONG *)(TranslateMode + 4)) )
      {
        if ( v9 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
      }
    }
    result = 1;
  }
  else
  {
    result = 2;
  }
  return result;
}

//----- (006C4820) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::PickedObjRotate(MiniHouseIndoor *this, tagPOINT MousePos, mhObjTranslate TranslateMode)
{
  MiniHouseIndoor *v3; // ebx@1
  mhReturnType v4; // eax@2
  long double v5; // st7@3
  long double v6; // st7@4
  NiMatrix3 *v7; // eax@7
  NiNode *v8; // ecx@7
  int v9; // esi@8
  int v10; // [sp+18h] [bp-84h]@7
  float fAngleX; // [sp+1Ch] [bp-80h]@3
  NiMatrix3 oldrot; // [sp+20h] [bp-7Ch]@3
  NiMatrix3 result; // [sp+44h] [bp-58h]@7
  NiMatrix3 rot; // [sp+68h] [bp-34h]@3
  unsigned int v15; // [sp+8Ch] [bp-10h]@1
  int v16; // [sp+98h] [bp-4h]@7
  int v17; // [sp+9Ch] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v3 = this;
  if ( this->m_PickedObj )
  {
    fAngleX = (double)(this->m_MousePosForTrans.x - MousePos.x);
    NiMatrix3::MakeIdentity(&rot);
    NiMatrix3::MakeIdentity(&oldrot);
    v5 = fAngleX;
    if ( fAngleX <= 0.0 )
    {
      fAngleX = fabs(v5);
      v6 = -(fAngleX / 40.0);
    }
    else
    {
      v6 = v5 / 40.0;
    }
    fAngleX = v6;
    v3->m_MousePosForTrans.x = MousePos.x;
    v3->m_MousePosForTrans.y = MousePos.y;
    if ( !TranslateMode )
    {
      NiMatrix3::MakeZRotation(&rot, fAngleX);
      v7 = NiMatrix3::operator_(&v3->m_PickedObj->m_kLocal.m_Rotate, &result, &rot);
      memcpy(&rot, v7, sizeof(rot));
      memcpy(&v3->m_PickedObj->m_kLocal, v7, 0x24u);
      v8 = MiniHouseIndoor::GetObjRootScene(v3, (NiPointer<NiNode> *)&v10)->m_pObject;
      v16 = 0;
      NiAVObject::Update(&v8->baseclass_0, 0.0, 1);
      v16 = -1;
      if ( v10 )
      {
        v9 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
    }
    v4 = 1;
  }
  else
  {
    v4 = 2;
  }
  return v4;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C4990) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::AttachObjToScene(MiniHouseIndoor *this, int iObjGUID, bool bAddCollision)
{
  MiniHouseIndoor *v3; // esi@1
  mhObject *v4; // eax@2
  ResElement *v5; // eax@3
  NiActorManager *v6; // ecx@4
  NiNode *v7; // eax@5

  v3 = this;
  mhObjectManager::AttachScene(&this->m_ManagerMediator.m_ObjManager, iObjGUID, this->m_spNormalScene.m_pObject);
  if ( bAddCollision == 1 )
  {
    v4 = mhObjectManager::GetObjectA(&v3->m_ManagerMediator.m_ObjManager, iObjGUID);
    mhCollisionManager::AddObject(&v3->m_ManagerMediator.m_CollisionManager, v4, 0);
  }
  v5 = mhObjectManager::GetObjectA(&v3->m_ManagerMediator.m_ObjManager, iObjGUID)->m_pkResource;
  if ( v5->m_bIsCanAnimation && (v6 = v5->m_pActorMgr.m_pObject) != 0 )
    v7 = (NiNode *)v6->m_spNIFRoot.m_pObject;
  else
    v7 = v5->m_pNiNode.m_pObject;
  v7->baseclass_0.m_uFlags &= 0xFFFEu;
  NiAVObject::Update(&v3->m_spNormalScene.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::UpdateEffects(&v3->m_spNormalScene.m_pObject->baseclass_0);
  NiAVObject::UpdateProperties(&v3->m_spNormalScene.m_pObject->baseclass_0);
  return 1;
}

//----- (006C4A30) --------------------------------------------------------
void __thiscall MiniHouseIndoor::CloseAllUis(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  MsgBox *v2; // edi@1
  MsgBox *v3; // edi@6

  v1 = this;
  ITask::DirectDispatchAll(57, this);
  ITask::DirectDispatchAll(58, v1);
  ITask::DirectDispatchAll(61, v1);
  ITask::DirectDispatchAll(65, v1);
  ITask::DirectDispatchAll(66, v1);
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_spMsgBox.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_spMsgBox.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spMsgBox.m_pObject = 0;
  }
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &v1->m_spObjEffMsg.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  v3 = v1->m_spObjEffMsg.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v3,
          1u);
    }
    v1->m_spObjEffMsg.m_pObject = 0;
  }
}

//----- (006C4AF0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::CloseUIwin(MiniHouseIndoor *this, mhUIID CloseUIID)
{
  if ( CloseUIID == 10 )
    MiniHouseIndoor::CloseAllUis(this);
  return 1;
}

//----- (006C4B10) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::DelCharColiNode(MiniHouseIndoor *this, NiNode *CharRootNode)
{
  NiNode *v2; // esi@1
  mhReturnType result; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@4
  NiRefObjectVtbl *v5; // edx@6
  int v6; // eax@6
  int v7; // edi@8
  NiPointer<NiNode> v8; // [sp-8h] [bp-20h]@11
  mhCollisionType v9; // [sp-4h] [bp-1Ch]@6
  NiPointer<NiNode> *v10; // [sp+Ch] [bp-Ch]@11
  MiniHouseIndoor *v11; // [sp+10h] [bp-8h]@1
  int v12; // [sp+14h] [bp-4h]@7
  signed int CharRootNodea; // [sp+20h] [bp+8h]@3

  v2 = CharRootNode;
  v11 = this;
  if ( CharRootNode )
  {
    CharRootNodea = 2;
    do
    {
      v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCharColliNodeName_0;
      if ( mhCharColliNodeName_0.baseclass_0._Myres < 0x10 )
        v4 = &mhCharColliNodeName_0;
      v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v9 = (mhCollisionType)v4;
      v6 = (int)v5[18].__vecDelDtor((NiRefObject *)v2, (unsigned int)v4);
      if ( v6 )
      {
        ((void (__thiscall *)(NiNode *, int *, int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
          v2,
          &v12,
          v6);
        if ( v12 )
        {
          v7 = v12;
          if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) )
          {
            if ( v7 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
          }
        }
        v9 = 2;
        v8.m_pObject = v2;
        v10 = &v8;
        InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        mhCollisionManager::DelColliData(&v11->m_ManagerMediator.m_CollisionManager, v8, v9);
      }
      --CharRootNodea;
    }
    while ( CharRootNodea );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006C4BC0) --------------------------------------------------------
int __thiscall MiniHouseIndoor::CheckColiInfoWIthPickedObj(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  NiAVObject *v2; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ecx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@8

  v1 = this;
  v2 = this->m_PickedObj;
  if ( v2 )
  {
    if ( this->m_eState == 3 )
    {
      if ( !dword_B67C98 )
        return 1;
      v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCollisionParentNamePick_1;
      if ( mhCollisionParentNamePick_1.baseclass_0._Myres < 0x10 )
        v3 = &mhCollisionParentNamePick_1;
      if ( !strncmp(
              *(const char **)(dword_B67C98 + 8),
              v3->baseclass_0.___u0.baseclass_0.dummy,
              mhCollisionParentNamePick_1.baseclass_0._Mysize) )
        return 0;
      v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCollisionParentNamePick_1;
      if ( mhCollisionParentNamePick_1.baseclass_0._Myres < 0x10 )
        v5 = &mhCollisionParentNamePick_1;
      if ( !strncmp(
              *(const char **)(dword_B67C9C + 8),
              v5->baseclass_0.___u0.baseclass_0.dummy,
              mhCollisionParentNamePick_1.baseclass_0._Mysize) )
        return 1;
    }
    else
    {
      if ( *(_DWORD *)mhCollisionManager::m_ColliInfo )
      {
        if ( (*(int (__stdcall **)(_DWORD))(**(_DWORD **)mhCollisionManager::m_ColliInfo + 72))(v2->baseclass_0.m_pcName)
          && v1->m_PickedObj->baseclass_0.m_pcName )
          return 0;
        if ( (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_B67C94 + 72))(v1->m_PickedObj->baseclass_0.m_pcName)
          && v1->m_PickedObj->baseclass_0.m_pcName )
          return 1;
      }
    }
  }
  return -1;
}
// B67C94: using guessed type int dword_B67C94;
// B67C98: using guessed type int dword_B67C98;
// B67C9C: using guessed type int dword_B67C9C;

//----- (006C4CA0) --------------------------------------------------------
int __thiscall MiniHouseIndoor::GetEndurePercentage(MiniHouseIndoor *this, Item *pItem, int Nowtime)
{
  int result; // eax@2
  int v4; // ebx@3
  int v5; // edi@5
  int v6; // esi@5
  int v7; // edx@7
  int v8; // eax@8
  MiniHouseFurniture *v9; // eax@9
  MiniHouseEndure *v10; // eax@10
  signed int v11; // eax@12
  float Now; // [sp+Ch] [bp+8h]@13

  if ( pItem )
  {
    v4 = MiniHouseIndoor::GetEndureStep(this, pItem, Nowtime);
    if ( v4 == 100000 )
    {
      result = 100;
    }
    else
    {
      v5 = pItem->m_kStruct.itemid;
      v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v5)
        && (unsigned __int16)v5 <= *(_WORD *)(v6 + 200)
        && (v7 = *(_DWORD *)(v6 + 196), *(_DWORD *)(v7 + 4 * v5))
        && (v8 = *(_DWORD *)(v7 + 4 * v5)) != 0
        && (v9 = MiniHouseFuritureInfoTab::GetObjByName((char *)(v8 + 2))) != 0
        && (v10 = MiniHouseEndureInfoTable::GetByHandle(v9->KeepTime_Endure)) != 0
        && v4
        && (v11 = v10->Endure[0], (_WORD)v11) )
      {
        Now = (double)v4 / (double)v11;
        result = (signed int)(Now * 100.0);
      }
      else
      {
        result = 0;
      }
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006C4D70) --------------------------------------------------------
void __thiscall MiniHouseIndoor::ForceChangeEndure(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  int v2; // eax@1
  mhObject *v3; // eax@2
  mhObject *v4; // edi@2

  v1 = this;
  v2 = this->m_RevChangeEndure.iCandidateObjID;
  if ( (_WORD)v2 != -1 )
  {
    v3 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, v2);
    v4 = v3;
    if ( v3 )
    {
      mhCollisionManager::DelObject(&v1->m_ManagerMediator.m_CollisionManager, v3, MH_COL_ALL);
      MiniHouseIndoor::RemoveObjScene(v1, v4);
      mhObject::SetEndureStep(v4, v1->m_RevChangeEndure.e);
      MiniHouseIndoor::AttachObjToScene(v1, v1->m_RevChangeEndure.iCandidateObjID, 1);
    }
  }
}

//----- (006C4DD0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::DetachFocusEff(MiniHouseIndoor *this, NiNode *pkTarget)
{
  NiTListItem<NiGeometry *> *v2; // edi@2
  NiAVObject *v3; // ecx@3
  NiProperty *v4; // eax@3
  NiProperty *v5; // esi@3
  float v6; // ecx@4
  PgTList<NiGeometry *> kList; // [sp+0h] [bp-1Ch]@2
  int v8; // [sp+18h] [bp-4h]@2

  if ( pkTarget )
  {
    *(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
    kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
    kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&PgTList<NiGeometry__>::_vftable_;
    v8 = 0;
    MiniHouseIndoor::CatchAllGeometry(this, &pkTarget->baseclass_0, &kList);
    v2 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead )
    {
      do
      {
        v3 = (NiAVObject *)v2->m_element;
        v2 = v2->m_pkNext;
        v4 = NiAVObject::GetProperty(v3, 8);
        v5 = v4;
        if ( v4 )
        {
          v6 = v4[1].baseclass_0.m_spControllers.m_pObject->m_fPhase;
          pkTarget = 0;
          if ( LODWORD(v6) )
          {
            (*(void (__stdcall **)(signed int))*LODWORD(v6))(1);
            NiTArray<NiCollisionGroup::Record__>::SetAt(
              (NiTArray<NiVBChip *> *)&v5[1].baseclass_0.m_pcName,
              4u,
              (NiVBChip *const *)&pkTarget);
          }
          NiTexturingProperty::SetMultiTexture((NiTexturingProperty *)v5, 0);
        }
      }
      while ( v2 );
    }
    v8 = -1;
    PgTList<NiGeometry__>::_PgTList<NiGeometry__>(&kList);
  }
}
// 9C4474: using guessed type int (__thiscall *PgTList_NiGeometry _____vftable_)(void *p, char);

//----- (006C4E90) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SendObjEffReq(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // ebx@1
  mhObject *v2; // eax@2
  int v3; // esi@3
  int v4; // edi@3
  int v5; // edx@5
  int v6; // eax@6
  unsigned __int16 *v7; // eax@7

  v1 = this;
  if ( this->m_GameMainConnectMgr )
  {
    v2 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, this->m_ColiObjID);
    if ( v2 )
    {
      v3 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v4 = v2->m_iResGUID;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                            + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v4) )
      {
        if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) )
        {
          v5 = *(_DWORD *)(v3 + 196);
          if ( *(_DWORD *)(v5 + 4 * (unsigned __int16)v4) )
          {
            v6 = *(_DWORD *)(v5 + 4 * (unsigned __int16)v4);
            if ( v6 )
            {
              v7 = (unsigned __int16 *)MHFurnitureObjEffectTab::GetInxName((char *)(v6 + 2));
              if ( v7 )
                mhGameMainConnectMgr::SendObjEffReq(v1->m_GameMainConnectMgr, v1->m_ColiObjID, *v7);
            }
          }
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006C4F10) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::SetMouseDownStartPos(MiniHouseIndoor *this, tagPOINT MousePos, NiPoint3 kGroundPos, mhObjTranslate TranslateMode)
{
  mhReturnType result; // eax@2

  LODWORD(this->m_kMDownGroundPos.x) = (_DWORD)kGroundPos.x;
  this->m_kMDownGroundPos.y = kGroundPos.y;
  this->m_kMDownGroundPos.z = kGroundPos.z;
  this->m_MousePosForTrans.x = MousePos.x;
  this->m_MousePosForTrans.y = MousePos.y;
  this->m_MDownStartCurPos.x = MousePos.x;
  this->m_MDownStartCurPos.y = MousePos.y;
  switch ( TranslateMode )
  {
    case 0:
    case 1:
    case 2:
    case 3:
      MiniHouseIndoor::PickedObjRotate(this, MousePos, TranslateMode);
      result = 1;
      break;
    case 4:
    case 5:
    case 6:
    case 7:
      MiniHouseIndoor::PickedObjMove(this, MousePos, TranslateMode);
      goto LABEL_4;
    default:
LABEL_4:
      result = 1;
      break;
  }
  return result;
}

//----- (006C4FA0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::ClearScene(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  NiNode *v2; // eax@1
  NiNode *v3; // edi@2
  NiNode *v4; // eax@7
  NiNode *v5; // edi@8
  NiNode *v6; // esi@13

  v1 = this;
  v2 = this->m_spNormalScene.m_pObject;
  if ( v2 )
  {
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v2->m_kChildren);
    v3 = v1->m_spNormalScene.m_pObject;
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      v1->m_spNormalScene.m_pObject = 0;
    }
  }
  v4 = v1->m_spAbStateEffScene.m_pObject;
  if ( v4 )
  {
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v4->m_kChildren);
    v5 = v1->m_spAbStateEffScene.m_pObject;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      v1->m_spAbStateEffScene.m_pObject = 0;
    }
  }
  NiCollisionGroup::RemoveAll(&v1->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  v6 = v1->m_spRootScene.m_pObject;
  if ( v6 )
    NiTArray<NiPointer<NiNode>>::RemoveAll((NiTArray<NiPointer<NiGeometry> > *)&v6->m_kChildren);
}

//----- (006C5050) --------------------------------------------------------
void __thiscall MiniHouseIndoor::StartMHCharEmotion(MiniHouseIndoor *this, NiPoint3 *kGroundPos, unsigned int uiPos, int ActionIndex)
{
  MiniHouseIndoor *v4; // edi@1
  char *v5; // eax@1
  mhObject *v6; // ebx@2
  PgFrameWork *v7; // eax@2
  mhObject *v8; // eax@2
  int v9; // esi@7
  int v10; // eax@9
  int v11; // eax@10
  MiniHouseFurniture *v12; // esi@11
  int v13; // ebx@12
  MHEmotion *v14; // eax@12
  char *v15; // eax@12
  int v16; // [sp+8h] [bp-4h]@7

  v4 = this;
  v5 = fs("--ACTPOS%d-- TARID %d\n");
  OutputDebugStringA(v5);
  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
  {
    v6 = mhObjectManager::GetObjectA(&v4->m_ManagerMediator.m_ObjManager, v4->m_mhCharEmotionInfo.TargetObjID);
    v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v8 = mhObjectManager::GetObjectA(&stru_AA4FA8, *(_WORD *)(v7[29].m_kMsgQ.m_uiTail + 510));
    if ( v8 && v6->m_iGUID != v8->m_iGUID )
      v6 = v8;
  }
  else
  {
    v6 = v4->m_FocusObj.m_Object;
  }
  if ( v6 )
  {
    MainChar::SetReserveAct((MainChar *)g_pkMainChar, RESERVEACT_MH_CHAR_EMOTION);
    v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v16 = v6->m_iResGUID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v6->m_iResGUID) )
    {
      if ( (unsigned __int16)v16 <= *(_WORD *)(v9 + 200) )
      {
        v10 = *(_DWORD *)(v9 + 196) + 4 * (unsigned __int16)v16;
        if ( *(_DWORD *)v10 )
        {
          v11 = *(_DWORD *)v10;
          if ( v11 )
          {
            v12 = MiniHouseFuritureInfoTab::GetObjByName((char *)(v11 + 2));
            if ( v12 )
            {
              v13 = v6->m_iGUID;
              v14 = MiniHouseEmotionTab::GetEmotion(v12->MHEmotionID, ActionIndex);
              MiniHouseIndoor::SetCharEmotion(v4, v13, uiPos, v14);
              MiniHouseEmotionTab::GetEmotion(v12->MHEmotionID, ActionIndex);
              v15 = fs("====%s.%d.%d°¡±¸: %d ¿¡¼­ µ¿ÀÛÀ» ÇÏ°ÔµÊ");
              OutputDebugStringA(v15);
            }
          }
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006C51C0) --------------------------------------------------------
char __thiscall MiniHouseIndoor::GetEmptyOfObjSeat(MiniHouseIndoor *this, unsigned __int16 mhObj, unsigned __int16 CharhWnd, char WantedActPos)
{
  mhObject *v4; // eax@1
  mhObject *v5; // esi@1
  char result; // al@2
  ItemInfo *v7; // eax@6
  MiniHouseFurniture *v8; // eax@8
  MiniHouseFurniture *v9; // edi@8
  char v10; // al@9
  signed int v11; // ebx@10

  v4 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, mhObj);
  v5 = v4;
  if ( v4 )
  {
    if ( mhObject::IsEmptyOfObjSeat(v4, WantedActPos) != 1 && mhObject::WhoUseIt(v5, WantedActPos) != CharhWnd )
    {
      v7 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v5->m_iResGUID);
      if ( v7 )
      {
        v8 = MiniHouseFuritureInfoTab::GetObjByName(v7->InxName);
        v9 = v8;
        if ( v8 && (v10 = v8->MaxSlot) != 0 && (v11 = 0, v10) )
        {
          while ( mhObject::IsEmptyOfObjSeat(v5, v11) != 1 )
          {
            ++v11;
            if ( v11 >= v9->MaxSlot )
              goto LABEL_13;
          }
          result = v11;
        }
        else
        {
LABEL_13:
          result = -1;
        }
      }
      else
      {
        result = -1;
      }
    }
    else
    {
      result = WantedActPos;
    }
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (006C5270) --------------------------------------------------------
void __thiscall MiniHouseIndoor::AttachFocusEff(MiniHouseIndoor *this, NiNode *pkTarget)
{
  MiniHouseIndoor *v2; // edi@1
  NiVBChip *v3; // esi@1
  NiTListItem<NiGeometry *> *v4; // ebx@5
  NiAVObject *v5; // ecx@6
  NiProperty *v6; // edi@6
  void *v7; // eax@7
  NiVBChip *v8; // eax@8
  NiVBChip *v9; // ecx@9
  PgTList<NiGeometry *> kList; // [sp+20h] [bp-28h]@5
  NiVBChip *element; // [sp+30h] [bp-18h]@7
  NiProperty *pkOrgTextureProp; // [sp+34h] [bp-14h]@3
  NiAVObject *pkGeom; // [sp+38h] [bp-10h]@2
  int v14; // [sp+44h] [bp-4h]@5

  v2 = this;
  v3 = 0;
  if ( pkTarget )
  {
    if ( PgUtil::CatchGeometry(&this->m_spFocusObjEff.m_pObject->baseclass_0, (NiGeometry **)&pkGeom) )
    {
      pkOrgTextureProp = NiAVObject::GetProperty(pkGeom, 8);
      if ( pkOrgTextureProp )
      {
        if ( ((int (__stdcall *)(_DWORD))v2->m_spFocusObjEff.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EffectNode") )
        {
          *(_DWORD *)&kList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
          kList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
          kList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiGeometry *>Vtbl *)&PgTList<NiGeometry__>::_vftable_;
          v14 = 0;
          MiniHouseIndoor::CatchAllGeometry(v2, &pkTarget->baseclass_0, &kList);
          v4 = kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
          if ( kList.baseclass_0.baseclass_0.baseclass_0.m_pkHead )
          {
            do
            {
              v5 = (NiAVObject *)v4->m_element;
              v4 = v4->m_pkNext;
              v6 = NiAVObject::GetProperty(v5, 8);
              if ( (NiVBChip *)v6 != v3 )
              {
                v7 = operator new(0x18u);
                element = (NiVBChip *)v7;
                LOBYTE(v14) = 1;
                if ( v7 != v3 )
                {
                  NiTexturingProperty::Map::Map(
                    (NiTexturingProperty::Map *)v7,
                    LODWORD(pkOrgTextureProp[1].baseclass_0.m_spControllers.m_pObject->m_fPhase));
                  v3 = v8;
                }
                v9 = (NiVBChip *)LODWORD(v6[1].baseclass_0.m_spControllers.m_pObject->m_fPhase);
                LOBYTE(v14) = 0;
                element = v3;
                if ( v3 != v9 )
                {
                  if ( v9 )
                    (*(void (__stdcall **)(signed int))v9->m_uiIndex)(1);
                  NiTArray<NiCollisionGroup::Record__>::SetAt(
                    (NiTArray<NiVBChip *> *)&v6[1].baseclass_0.m_pcName,
                    4u,
                    &element);
                }
                NiTexturingProperty::SetMultiTexture((NiTexturingProperty *)v6, (NiTexturingProperty::Map *)v3);
                v3 = 0;
              }
            }
            while ( (NiVBChip *)v4 != v3 );
          }
          NiAVObject::Update(&pkTarget->baseclass_0, 0.0, 1);
          NiAVObject::UpdateProperties(&pkTarget->baseclass_0);
          v14 = -1;
          PgTList<NiGeometry__>::_PgTList<NiGeometry__>(&kList);
        }
      }
    }
  }
}
// 9C4474: using guessed type int (__thiscall *PgTList_NiGeometry _____vftable_)(void *p, char);

//----- (006C53D0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::ClearUI(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  std::_Tree_nod<std::_Tmap_traits<enum mhUIID,PgWinFrame *,std::less<enum mhUIID>,std::allocator<std::pair<enum mhUIID const ,PgWinFrame *> >,0> >::_Node *v2; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // eax@1
  MsgBox *v4; // edi@4
  MsgBox *v5; // edi@10
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = this->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
      v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase((std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->m_mapUIGroup, &result, v3)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<enum mhUIID,PgWinFrame *,std::less<enum mhUIID>,std::allocator<std::pair<enum mhUIID const ,PgWinFrame *> >,0> >::_Node *)v3 != v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  if ( v1->m_spMsgBox.m_pObject )
  {
    v4 = v1->m_spMsgBox.m_pObject;
    if ( v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v4,
          1u);
      v1->m_spMsgBox.m_pObject = 0;
    }
  }
  if ( v1->m_spObjEffMsg.m_pObject )
  {
    v5 = v1->m_spObjEffMsg.m_pObject;
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v5,
          1u);
      v1->m_spObjEffMsg.m_pObject = 0;
    }
  }
  OutputDebugStringA("CLEAR UImap OK\n");
  return 1;
}

//----- (006C5490) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::DetachAlphaProp(MiniHouseIndoor *this, NiNode *pDest)
{
  bool result; // al@2
  NiProperty *v3; // eax@3

  if ( pDest )
  {
    v3 = NiAVObject::GetProperty(&pDest->baseclass_0, 0);
    if ( v3 )
    {
      NiAVObject::DetachProperty(&pDest->baseclass_0, v3);
      NiAVObject::UpdateProperties(&pDest->baseclass_0);
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006C54D0) --------------------------------------------------------
NiAVObject *__thiscall MiniHouseIndoor::AddScene(MiniHouseIndoor *this, NiAVObject *spNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ClonedRootName, mhObjSceneType Dest, bool bClone)
{
  MiniHouseIndoor *v5; // ebx@1
  NiObjectNET *v6; // esi@1
  NiAVObject *result; // eax@2
  void *v8; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // edi@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // eax@7
  NiNode *v11; // ecx@14
  NiProperty *v12; // eax@16

  v5 = this;
  v6 = (NiObjectNET *)spNode;
  if ( !spNode )
    goto LABEL_21;
  v8 = operator new(0xE8u);
  if ( v8 )
    NiNode::NiNode((NiNode *)v8, 0);
  v9 = ClonedRootName;
  if ( bClone == 1 )
  {
    v6 = (NiObjectNET *)NiObject::Clone(&spNode->baseclass_0.baseclass_0);
    if ( ClonedRootName->baseclass_0._Myres < 0x10 )
      v10 = ClonedRootName;
    else
      v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&ClonedRootName->baseclass_0.___u0.baseclass_0.dummy[0];
    NiObjectNET::SetName(v6, v10->baseclass_0.___u0.baseclass_0.dummy);
    NiNode::DetachAllEffects((NiNode *)v6);
    NiAVObject::UpdateEffects((NiAVObject *)v6);
  }
  if ( v6 )
  {
    if ( ClonedRootName->baseclass_0._Myres >= 0x10 )
      v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&ClonedRootName->baseclass_0.___u0.baseclass_0.dummy[0];
    v6->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor((NiRefObject *)v6, (unsigned int)v9);
    if ( Dest == 1 )
      v11 = v5->m_spAbStateEffScene.m_pObject;
    else
      v11 = v5->m_spNormalScene.m_pObject;
    ((void (__cdecl *)(_DWORD, _DWORD))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v6,
      0);
    NiAVObject::Update(&v5->m_spAbStateEffScene.m_pObject->baseclass_0, 0.0, 1);
    v12 = NiAVObject::GetProperty((NiAVObject *)v6, 0);
    if ( v12 )
    {
      NiAVObject::DetachProperty((NiAVObject *)v6, v12);
      NiAVObject::UpdateProperties((NiAVObject *)v6);
    }
    result = (NiAVObject *)v6;
  }
  else
  {
LABEL_21:
    result = 0;
  }
  return result;
}

//----- (006C55F0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::DelCharLev(MiniHouseIndoor *this, unsigned __int16 CharhWnd)
{
  MiniHouseIndoor *v2; // esi@1
  mhReturnType result; // eax@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > itResult; // [sp+8h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::find(
    &this->m_mapCharLev.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *)&itResult,
    &CharhWnd);
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)itResult == v2->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    result = 8;
  }
  else
  {
    std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v2->m_mapCharLev,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&CharhWnd,
      itResult);
    result = 1;
  }
  return result;
}

//----- (006C5640) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::AttachAlphaProp(MiniHouseIndoor *this, NiNode *pDest)
{
  bool result; // al@2
  NiProperty *v3; // eax@3
  void *v4; // eax@5
  void *v5; // esi@5

  if ( pDest )
  {
    v3 = NiAVObject::GetProperty(&pDest->baseclass_0, 0);
    if ( v3 )
    {
      NiAVObject::DetachProperty(&pDest->baseclass_0, v3);
      NiAVObject::UpdateProperties(&pDest->baseclass_0);
    }
    v4 = operator new(0x20u);
    v5 = v4;
    if ( v4 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v4);
      *(_DWORD *)v5 = &NiAlphaProperty::_vftable_;
      *((_WORD *)v5 + 14) = 236;
      *((_BYTE *)v5 + 30) = 0;
    }
    else
    {
      v5 = 0;
    }
    *((_WORD *)v5 + 14) = *((_WORD *)v5 + 14) & 0xFA43 | 0x1A43;
    *((_BYTE *)v5 + 30) = 9;
    NiAVObject::AttachProperty(&pDest->baseclass_0, (NiProperty *)v5);
    NiAVObject::UpdateProperties(&pDest->baseclass_0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);

//----- (006C5720) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetForceAlphaState(MiniHouseIndoor *this, mhObject *pObj, bool bAlphaMode)
{
  MiniHouseIndoor *v3; // edi@1
  ResElement *v4; // ecx@2
  NiActorManager *v5; // eax@4
  NiNode *v6; // eax@5
  NiActorManager *v7; // eax@10
  NiNode *v8; // eax@16

  v3 = this;
  if ( pObj )
  {
    v4 = pObj->m_pkResource;
    if ( v4 )
    {
      if ( v4->m_bIsCanAnimation && (v5 = v4->m_pActorMgr.m_pObject) != 0 )
        v6 = (NiNode *)v5->m_spNIFRoot.m_pObject;
      else
        v6 = v4->m_pNiNode.m_pObject;
      if ( v6 )
      {
        if ( bAlphaMode == 1 )
        {
          if ( v4->m_bIsCanAnimation && (v7 = v4->m_pActorMgr.m_pObject) != 0 )
            MiniHouseIndoor::AttachAlphaProp(v3, (NiNode *)v7->m_spNIFRoot.m_pObject);
          else
            MiniHouseIndoor::AttachAlphaProp(v3, v4->m_pNiNode.m_pObject);
        }
        else
        {
          if ( v3->m_PickedObj )
          {
            if ( MiniHouseIndoor::GetPickedObjID(v3) == v3->m_iReturnToInvItemID )
              return;
            v4 = pObj->m_pkResource;
          }
          v8 = ResElement::GetNiNode(v4);
          MiniHouseIndoor::DetachAlphaProp(v3, v8);
        }
      }
    }
  }
}

//----- (006C57C0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetPopUpMHItemInvState(MiniHouseIndoor *this, bool b)
{
  MiniHouseIndoor *v2; // esi@1
  mhObject *v3; // eax@3

  v2 = this;
  if ( this->m_bAskReturnToInvState != b )
  {
    this->m_bAskReturnToInvState = b;
    if ( this->m_iReturnToInvItemID != -1 )
    {
      v3 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, this->m_iReturnToInvItemID);
      MiniHouseIndoor::SetForceAlphaState(v2, v3, v2->m_bAskReturnToInvState);
    }
  }
}

//----- (006C5800) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetRepairObjID(MiniHouseIndoor *this, unsigned __int16 ID)
{
  MiniHouseIndoor *v2; // esi@1
  mhObject *v3; // edi@2
  mhObject *v4; // ebx@2
  ResElement *v5; // eax@3
  NiActorManager *v6; // ecx@4
  NiAVObject *v7; // eax@5
  ResElement *v8; // eax@9
  NiActorManager *v9; // ecx@10
  NiNode *v10; // eax@11
  int v11; // edi@14

  v2 = this;
  if ( this->m_RepairObjID != ID )
  {
    v3 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, ID);
    v4 = mhObjectManager::GetObjectA(&v2->m_ManagerMediator.m_ObjManager, v2->m_RepairObjID);
    v2->m_RepairObjID = ID;
    if ( v3 )
    {
      MiniHouseIndoor::RemoveObjScene(v2, v3);
      v5 = v3->m_pkResource;
      if ( v5->m_bIsCanAnimation && (v6 = v5->m_pActorMgr.m_pObject) != 0 )
        v7 = v6->m_spNIFRoot.m_pObject;
      else
        v7 = (NiAVObject *)v5->m_pNiNode.m_pObject;
      MiniHouseIndoor::AddScene(v2, v7, &v3->m_RootName, MH_OBJSCENE_ABSTATE, 0);
    }
    if ( v4 )
    {
      v8 = v4->m_pkResource;
      if ( v8->m_bIsCanAnimation && (v9 = v8->m_pActorMgr.m_pObject) != 0 )
        v10 = (NiNode *)v9->m_spNIFRoot.m_pObject;
      else
        v10 = v8->m_pNiNode.m_pObject;
      ((void (__stdcall *)(unsigned __int16 *, NiNode *))v2->m_spAbStateEffScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &ID,
        v10);
      if ( ID )
      {
        v11 = ID;
        if ( !InterlockedDecrement((volatile LONG *)(ID + 4)) )
        {
          if ( v11 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v11)(v11, 1);
        }
      }
      MiniHouseIndoor::AttachObjToScene(v2, v4->m_iGUID, 0);
    }
  }
}

//----- (006C58E0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::MakeCharColiNode(MiniHouseIndoor *this, NiNode *CharRootNode, mhCollisionType ColiStyle, float Radius)
{
  unsigned int v4; // edi@1
  MiniHouseIndoor *v5; // esi@1
  mhReturnType result; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@3
  void *v8; // eax@9
  int v9; // eax@10
  int v10; // esi@10
  void *v11; // eax@14
  NiBoundingVolume *v12; // eax@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@17
  float v14; // eax@19
  float v15; // ecx@19
  float v16; // edx@19
  float v17; // eax@19
  float v18; // ecx@19
  void *v19; // eax@19
  int v20; // eax@20
  int v21; // edi@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v22; // eax@22
  NiPointer<NiNode> v23; // [sp+8h] [bp-78h]@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v24; // [sp+Ch] [bp-74h]@22
  unsigned int v25; // [sp+10h] [bp-70h]@19
  unsigned int v26; // [sp+14h] [bp-6Ch]@1
  NiPointer<NiNode> Parent; // [sp+24h] [bp-5Ch]@7
  NiPointer<NiNode> CharNode; // [sp+28h] [bp-58h]@12
  float v29; // [sp+2Ch] [bp-54h]@7
  float v30; // [sp+30h] [bp-50h]@7
  float v31; // [sp+34h] [bp-4Ch]@7
  mhCollisionManager *v32; // [sp+38h] [bp-48h]@7
  float v33; // [sp+3Ch] [bp-44h]@7
  float v34; // [sp+40h] [bp-40h]@7
  float v35; // [sp+44h] [bp-3Ch]@7
  void *v36; // [sp+48h] [bp-38h]@19
  int v37; // [sp+4Ch] [bp-34h]@7
  NiBoundingVolume *pkBV; // [sp+50h] [bp-30h]@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+54h] [bp-2Ch]@22
  unsigned int v40; // [sp+70h] [bp-10h]@1
  unsigned int v41; // [sp+7Ch] [bp-4h]@9
  int v42; // [sp+80h] [bp+0h]@1

  v40 = (unsigned int)&v42 ^ __security_cookie;
  v26 = (unsigned int)&v42 ^ __security_cookie;
  v4 = 0;
  v5 = this;
  if ( CharRootNode )
  {
    v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCharColliNodeName_0;
    if ( mhCharColliNodeName_0.baseclass_0._Myres < 0x10 )
      v7 = &mhCharColliNodeName_0;
    if ( !(int)CharRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                 (NiRefObject *)CharRootNode,
                 (unsigned int)v7)
      || ColiStyle )
    {
      v33 = 0.0;
      Parent.m_pObject = CharRootNode;
      v34 = 0.0;
      v32 = &v5->m_ManagerMediator.m_CollisionManager;
      v35 = 0.0;
      v37 = 2;
      v29 = 0.0;
      v30 = 0.0;
      v31 = Radius + 23.0;
      while ( 1 )
      {
        v8 = operator new(0xE8u);
        pkBV = (NiBoundingVolume *)v8;
        v41 = v4;
        if ( v8 == (void *)v4 )
        {
          v10 = 0;
        }
        else
        {
          NiNode::NiNode((NiNode *)v8, v4);
          v10 = v9;
        }
        CharNode.m_pObject = (NiNode *)v10;
        if ( v10 != v4 )
          InterlockedIncrement((volatile LONG *)(v10 + 4));
        v41 = 1;
        v11 = operator new(0x14u);
        pkBV = (NiBoundingVolume *)v11;
        LOBYTE(v41) = 2;
        if ( v11 == (void *)v4 )
        {
          pkBV = (NiBoundingVolume *)v4;
        }
        else
        {
          NiSphereBV::NiSphereBV((NiSphereBV *)v11, 1.0, &NiPoint3::ZERO);
          v4 = (unsigned int)v12;
          pkBV = v12;
        }
        InterlockedIncrement((volatile LONG *)&CharRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhCharColliNodeName_0;
        LOBYTE(v41) = 3;
        if ( mhCharColliNodeName_0.baseclass_0._Myres < 0x10 )
          v13 = &mhCharColliNodeName_0;
        NiObjectNET::SetName((NiObjectNET *)v10, v13->baseclass_0.___u0.baseclass_0.dummy);
        v14 = v34;
        v15 = v35;
        *(_DWORD *)(v10 + 88) = LODWORD(v33);
        v16 = v29;
        *(_DWORD *)(v10 + 92) = LODWORD(v14);
        v17 = v30;
        *(_DWORD *)(v10 + 96) = LODWORD(v15);
        *(float *)(v4 + 16) = Radius;
        v18 = v31;
        *(_DWORD *)(v4 + 4) = LODWORD(v16);
        *(_DWORD *)(v4 + 8) = LODWORD(v17);
        v25 = 80;
        *(_DWORD *)(v4 + 12) = LODWORD(v18);
        v19 = operator new(v25);
        v36 = v19;
        LOBYTE(v41) = 4;
        if ( v19 )
        {
          NiCollisionData::NiCollisionData((NiCollisionData *)v19, (NiAVObject *)v10);
          v21 = v20;
        }
        else
        {
          v21 = 0;
        }
        LOBYTE(v41) = 3;
        NiCollisionData::SetModelSpaceABV((NiCollisionData *)v21, pkBV);
        v22 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)(v21 + 8);
        v25 = 2;
        v24 = v22;
        *(_DWORD *)(v21 + 36) = 3;
        *(_DWORD *)(v21 + 40) = 2;
        NiCollisionData::SetPrecacheAttributes((NiAVObject *)v24, (NiCollisionData::CollisionMode)v25);
        (*(void (__thiscall **)(int))(*(_DWORD *)v21 + 64))(v21);
        NiAVObject::SetCollisionObject((NiAVObject *)v10, (NiCollisionObject *)v21);
        NiAVObject::Update((NiAVObject *)v10, 0.0, 1);
        (*(void (__thiscall **)(int))(*(_DWORD *)v10 + 64))(v10);
        NiAVObject::UpdateProperties((NiAVObject *)v10);
        ((void (__thiscall *)(NiNode *, int, _DWORD))CharRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          CharRootNode,
          v10,
          0);
        NiAVObject::Update(&CharRootNode->baseclass_0, 0.0, 1);
        ((void (__thiscall *)(NiNode *))CharRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(CharRootNode);
        NiAVObject::UpdateProperties(&CharRootNode->baseclass_0);
        v25 = ColiStyle;
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &thisa,
          &mhCharColliNodeName_0,
          0,
          0xFFFFFFFFu);
        v24 = &thisa;
        v36 = &v23;
        LOBYTE(v41) = 5;
        v23.m_pObject = CharRootNode;
        InterlockedIncrement((volatile LONG *)&CharRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        mhCollisionManager::AddColliData(v32, v23, v24, (mhCollisionType)v25);
        if ( thisa.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&thisa);
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v41) = 1;
        if ( !InterlockedDecrement((volatile LONG *)&CharRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          CharRootNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)CharRootNode,
            1u);
        v41 = -1;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
        --v37;
        if ( !v37 )
          break;
        v4 = 0;
      }
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C5BC0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::DelJoinCharInfo(MiniHouseIndoor *this, unsigned __int16 CharhWnd)
{
  unsigned __int16 v2; // bx@1
  MiniHouseIndoor *v3; // esi@1
  mhReturnType v4; // eax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > result; // [sp+Ch] [bp-4h]@1

  v2 = CharhWnd;
  v3 = this;
  *(_DWORD *)&CharhWnd = CharhWnd;
  std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::find(
    &this->m_mapCharLev.baseclass_0,
    &result,
    &CharhWnd);
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)result != v3->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead )
    std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v3->m_mapCharLev,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&CharhWnd,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)result);
  v4 = (mhReturnType)CharMgr::GetChar(&g_kCharMgr, v2);
  if ( v4 )
    v4 = MiniHouseIndoor::DelCharColiNode(v3, *(NiNode **)(v4 + 700));
  return v4;
}

//----- (006C5C30) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::AddUI(MiniHouseIndoor *this, mhUIID AddID, PgWinFrame *AddWinFrame)
{
  MiniHouseIndoor *v3; // edi@1
  mhReturnType v4; // eax@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v5; // eax@3
  mhUIID it; // [sp+8h] [bp-8h]@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+Ch] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_mapUIGroup,
    &result,
    (OscTarget *)&AddID);
  if ( (std::_Tree_nod<std::_Tmap_traits<enum mhUIID,PgWinFrame *,std::less<enum mhUIID>,std::allocator<std::pair<enum mhUIID const ,PgWinFrame *> >,0> >::_Node *)result == v3->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const)AddWinFrame;
    it = AddID;
    v5 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v3->m_mapUIGroup,
           (std::pair<int const ,int> *)&it);
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v3->m_mapUIGroup,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&it,
      v5,
      0);
    if ( result.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] )
    {
      OutputDebugStringA("Insert UImap OK\n");
      v4 = 1;
    }
    else
    {
      v4 = 0;
    }
  }
  else
  {
    v4 = 5;
  }
  return v4;
}

//----- (006C5CC0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::AddCharLev(MiniHouseIndoor *this, unsigned __int16 CharhWnd, char Level)
{
  std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v4; // eax@1
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> pairResult; // [sp+4h] [bp-8h]@1

  v3 = (std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *)&this->m_mapCharLev;
  *((_BYTE *)&CharhWnd + 2) = Level;
  v4 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_char>>(
         &this->m_mapCharLev.baseclass_0.baseclass_0,
         (std::pair<unsigned short const ,unsigned char> *)&CharhWnd);
  std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Linsert(
    v3,
    &pairResult,
    v4,
    0);
  return pairResult.baseclass_0.second != 0;
}

//----- (006C5D10) --------------------------------------------------------
void __thiscall MiniHouseIndoor::ActMHEmotion(MiniHouseIndoor *this, FURNITURE_EMOTION_INFO *ActionInfo)
{
  unsigned __int16 v2; // ax@1
  Char *v3; // eax@1
  Char *v4; // ebx@1
  mhObject *v5; // eax@3
  mhObject *v6; // edi@3
  ItemInfo *v7; // eax@4
  MiniHouseFurniture *v8; // eax@5
  int v9; // ecx@7
  NiNode *v10; // eax@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // ecx@7
  int v12; // esi@9
  AbStateInfectee::AbstateColor (__thiscall *v13)(AbStateInfectee *); // eax@14
  ResElement *v14; // ecx@14
  NiNode *v15; // eax@14
  NiPoint3 *v16; // eax@14
  NiNode *v17; // eax@14
  NiMatrix3 *v18; // esi@14
  MHEmotion *v19; // eax@14
  NiPoint3 result; // [sp+24h] [bp-ECh]@14
  float v21; // [sp+30h] [bp-E0h]@14
  float v22; // [sp+34h] [bp-DCh]@14
  float v23; // [sp+38h] [bp-D8h]@14
  float fX; // [sp+3Ch] [bp-D4h]@14
  int v25; // [sp+40h] [bp-D0h]@10
  mhObject *pkObj; // [sp+44h] [bp-CCh]@3
  MiniHouseFurniture *pkFur; // [sp+48h] [bp-C8h]@5
  MiniHouseIndoor *v28; // [sp+4Ch] [bp-C4h]@1
  float fY; // [sp+50h] [bp-C0h]@14
  float fZ; // [sp+54h] [bp-BCh]@14
  MHEmotion *pkEmotion; // [sp+58h] [bp-B8h]@6
  NiPoint3 kCharPos; // [sp+5Ch] [bp-B4h]@12
  float fangle; // [sp+68h] [bp-A8h]@14
  NiPoint3 TargetDir; // [sp+6Ch] [bp-A4h]@14
  char v35; // [sp+78h] [bp-98h]@14
  NiMatrix3 mat3ObjRot; // [sp+9Ch] [bp-74h]@14
  NiMatrix3 mat3Rot; // [sp+C0h] [bp-50h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > ActPos; // [sp+E4h] [bp-2Ch]@7
  unsigned int v39; // [sp+100h] [bp-10h]@1
  int v40; // [sp+10Ch] [bp-4h]@7
  int v41; // [sp+110h] [bp+0h]@1

  v39 = (unsigned int)&v41 ^ __security_cookie;
  v2 = ActionInfo->nPlayerHandle;
  v28 = this;
  v3 = CharMgr::GetChar(&g_kCharMgr, v2);
  v4 = v3;
  if ( v3 )
  {
    if ( v3->m_spScene.m_pObject )
    {
      v5 = mhObjectManager::GetObjectA(&stru_AA4FA8, ActionInfo->nFurnitureHnd);
      v6 = v5;
      pkObj = v5;
      if ( v5 )
      {
        v7 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v5->m_iResGUID);
        if ( v7 )
        {
          v8 = MiniHouseFuritureInfoTab::GetObjByName(v7->InxName);
          pkFur = v8;
          if ( v8 )
          {
            pkEmotion = MiniHouseEmotionTab::GetEmotion(v8->MHEmotionID, ActionInfo->nEmotionNo);
            if ( pkEmotion )
            {
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
                &ActPos,
                "ActPos");
              v9 = ActionInfo->nPosition;
              v40 = 0;
              mhMiscUtil::MakeNodeNameNum(&ActPos, v9, 2);
              v10 = ResElement::GetNiNode(v6->m_pkResource);
              v11 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&ActPos;
              if ( ActPos.baseclass_0._Myres < 0x10 )
                v11 = &ActPos;
              v12 = (int)v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                           (NiRefObject *)v10,
                           (unsigned int)v11);
              if ( v12 )
              {
                v25 = v4->m_kHandle;
                if ( (_WORD)v25 != mhGameMainConnectMgr::GetMainChar(v28->m_GameMainConnectMgr)->baseclass_0.m_kHandle )
                  ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[10].Deaffect)(v4);
                LODWORD(kCharPos.x) = *(_DWORD *)(v12 + 140);
                LODWORD(kCharPos.y) = *(_DWORD *)(v12 + 144);
                LODWORD(kCharPos.z) = *(_DWORD *)(v12 + 148);
                if ( pkFur->WALL )
                  World::GetAdvGroundPos(&g_kWorld, kCharPos.x, kCharPos.y, &kCharPos);
                v13 = v4->baseclass_0.vfptr[5].GetAbstateColor;
                v21 = 1.0;
                v22 = 1.0;
                v23 = 1.0;
                ((void (__thiscall *)(Char *, NiPoint3 *, float *))v13)(v4, &kCharPos, &v21);
                v14 = v6->m_pkResource;
                TargetDir.x = 1.0;
                TargetDir.y = -1.0;
                TargetDir.z = 1.0;
                v15 = ResElement::GetNiNode(v14);
                v16 = operator_(&result, &TargetDir, &v15->baseclass_0.m_kLocal.m_Rotate);
                TargetDir.x = v16->x;
                TargetDir.y = v16->y;
                TargetDir.z = v16->z;
                v17 = ResElement::GetNiNode(v6->m_pkResource);
                NiMatrix3::ExtractAngleAndAxis(&v17->baseclass_0.m_kLocal.m_Rotate, &fangle, &fX, &fY, &fZ);
                memcpy(&mat3ObjRot, (const void *)(v12 + 52), sizeof(mat3ObjRot));
                memcpy(&mat3Rot, &ResElement::GetNiNode(pkObj->m_pkResource)->baseclass_0.m_kLocal, sizeof(mat3Rot));
                fangle = NI_PI + fangle;
                TargetDir.x = TargetDir.x * fX;
                TargetDir.y = TargetDir.y * fY;
                TargetDir.z = TargetDir.z * fZ;
                NiMatrix3::MakeRotation(&mat3Rot, fangle, &TargetDir);
                v18 = NiMatrix3::operator_(&mat3Rot, (NiMatrix3 *)&v35, &mat3ObjRot);
                v19 = pkEmotion;
                memcpy(&mat3Rot, v18, sizeof(mat3Rot));
                memcpy(&v4->m_spScene.m_pObject->baseclass_0.m_kLocal, &mat3Rot, 0x24u);
                Char::ActBlendAction(v4, v19->EventCode, v19->LegEventCode);
              }
              std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&ActPos);
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (006C6070) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::ObjEffErrMsg(MiniHouseIndoor *this, unsigned __int16 nEffectHandle, unsigned __int16 err)
{
  MiniHouseFurnitureObjEffect *v3; // eax@1
  MiniHouseFurnitureObjEffect *v4; // esi@1
  __int64 v6; // kr00_8@5
  MainChar *v7; // eax@8
  PgFrameWork *v8; // edi@9
  char *v9; // eax@9
  PgFrameWork *v10; // ecx@9
  MainChar *v11; // eax@10
  PgFrameWork *v12; // edi@11
  char *v13; // eax@11
  PgFrameWork *v14; // esi@13
  char *v15; // eax@13
  char *v16; // esi@15
  char *v17; // esi@18
  char *v18; // esi@21
  char *v19; // esi@23
  char *v20; // [sp-Ch] [bp-12Ch]@9
  MiniHouseIndoor *v21; // [sp+4h] [bp-11Ch]@1
  __int64 i64Copper; // [sp+8h] [bp-118h]@5
  __int64 i64Silver; // [sp+10h] [bp-110h]@5
  char tempbuf[256]; // [sp+1Ch] [bp-104h]@5
  unsigned int v25; // [sp+11Ch] [bp-4h]@1
  int v26; // [sp+120h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v21 = this;
  v3 = MHFurnitureObjEffectTab::GetbyHandle(nEffectHandle);
  v4 = v3;
  if ( !v3 || v3->NeedItem[0] != 45 && !ItemInfoTab::GetByInxName(v3->NeedItem) )
    return 0;
  i64Silver = User::GetSilver(v4->NeedMoney);
  i64Copper = User::GetCopper(v4->NeedMoney);
  v6 = User::GetCopper(v4->NeedMoney);
  memset(tempbuf, 0, 0x100u);
  if ( err == 5831 )
  {
    if ( v6 )
    {
      v16 = (char *)_mbschr(tempbuf, 0);
      if ( v16 )
      {
        TextData::Get(0x47A395A3u);
        sprintf(v16, "%I64d%s");
      }
    }
    if ( i64Silver )
    {
      v17 = (char *)_mbschr(tempbuf, 0);
      if ( v17 )
      {
        TextData::Get(0x98B595EFu);
        sprintf(v17, " %I64d%s");
      }
    }
    if ( i64Copper )
    {
      v18 = (char *)_mbschr(tempbuf, 0);
      if ( v18 )
      {
        TextData::Get(0x88AF99F5u);
        sprintf(v18, " %I64d%s ");
      }
    }
    v19 = (char *)_mbschr(tempbuf, 0);
    TextData2::Get(0xDD18242Eu);
    sprintf(v19, "%s \n");
    v20 = tempbuf;
    v10 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    goto LABEL_24;
  }
  if ( err == 5832 )
  {
    v14 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v15 = TextData2::Get(0x1A5E3B57u);
    v20 = fs(v15);
    v10 = v14;
    goto LABEL_24;
  }
  if ( err != 5839 )
    return 0;
  v7 = mhGameMainConnectMgr::GetMainChar(v21->m_GameMainConnectMgr);
  if ( v4->UseRange[3] <= ((int (__thiscall *)(MainChar *))v7->baseclass_0.baseclass_0.vfptr[5].Deaffect)(v7) )
  {
    v11 = mhGameMainConnectMgr::GetMainChar(v21->m_GameMainConnectMgr);
    if ( v4->UseRange[4] < ((int (__thiscall *)(MainChar *))v11->baseclass_0.baseclass_0.vfptr[5].Deaffect)(v11) )
    {
      v12 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v13 = TextData2::Get(0x84D5CFDFu);
      v20 = fs(v13);
      v10 = v12;
      goto LABEL_24;
    }
    return 0;
  }
  v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v9 = TextData2::Get(0x91B0C2D6u);
  v20 = fs(v9);
  v10 = v8;
LABEL_24:
  GameFrameWork::AddSysMsg((GameFrameWork *)v10, v20);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C6370) --------------------------------------------------------
char __thiscall MiniHouseIndoor::GetCharLev(MiniHouseIndoor *this, unsigned __int16 CharhWnd)
{
  MiniHouseIndoor *v2; // esi@1
  char result; // al@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *itResult; // [sp+8h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::find(
    &this->m_mapCharLev.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *)&itResult,
    &CharhWnd);
  if ( itResult == v2->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead )
    result = 0;
  else
    result = *std::map<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>>::operator__(
                &v2->m_mapCharLev,
                &CharhWnd);
  return result;
}

//----- (006C63C0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::AddJoinCharInfo(MiniHouseIndoor *this, unsigned __int16 CharhWnd, char Level)
{
  unsigned __int16 v3; // di@1
  std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v5; // eax@1
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> result; // [sp+8h] [bp-8h]@1

  v3 = CharhWnd;
  v4 = (std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *)&this->m_mapCharLev;
  *((_BYTE *)&CharhWnd + 2) = Level;
  v5 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_char>>(
         &this->m_mapCharLev.baseclass_0.baseclass_0,
         (std::pair<unsigned short const ,unsigned char> *)&CharhWnd);
  std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Linsert(
    v4,
    &result,
    v5,
    0);
  return CharMgr::GetChar(&g_kCharMgr, v3) != 0;
}

//----- (006C6410) --------------------------------------------------------
char __thiscall MiniHouseIndoor::FindNearestActPos(MiniHouseIndoor *this, mhObject *mhObj, NiPoint3 *kGroundPos)
{
  char result; // al@2
  ResElement *v4; // eax@3
  NiActorManager *v5; // ecx@4
  NiNode *v6; // ecx@5
  NiActorManager *v7; // ecx@9
  NiNode *v8; // eax@10
  float v9; // ST2C_4@12
  float v10; // ST2C_4@12
  void *v11; // edi@12
  signed int v12; // eax@12
  signed int v13; // ecx@13
  bool v14; // cf@14
  int v15; // esi@16
  float v16; // ST2C_4@17
  float v17; // ST2C_4@17
  float v18; // ST2C_4@17
  const char *v19; // ecx@18
  int v20; // eax@18
  int v21; // esi@18
  char v22; // dl@19
  signed int v23; // eax@24
  float kGroundLength; // [sp+0h] [bp-7Ch]@12
  float fLength; // [sp+4h] [bp-78h]@12
  char SelectPos; // [sp+8h] [bp-74h]@12
  signed int i; // [sp+Ch] [bp-70h]@13
  float fleng; // [sp+10h] [bp-6Ch]@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+14h] [bp-68h]@18
  NsFindObjectByName kFindObject; // [sp+30h] [bp-4Ch]@8
  unsigned int v31; // [sp+6Ch] [bp-10h]@1
  int v32; // [sp+78h] [bp-4h]@8
  int v33; // [sp+7Ch] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  if ( mhObj
    && ((v4 = mhObj->m_pkResource, !v4->m_bIsCanAnimation) || (v5 = v4->m_pActorMgr.m_pObject) == 0 ? (v6 = v4->m_pNiNode.m_pObject) : (v6 = (NiNode *)v5->m_spNIFRoot.m_pObject),
        v6) )
  {
    kFindObject.baseclass_0.m_pCallBack = 0;
    kFindObject.baseclass_0.m_nCurLevel = -1;
    kFindObject.baseclass_0.vfptr = (Ns_TourSceneVtbl *)&NsFindObjectByName::_vftable_;
    kFindObject.m_szName.baseclass_0._Myres = 15;
    kFindObject.m_szName.baseclass_0._Mysize = 0;
    kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kFindObject.m_vecObject.baseclass_0._Mylast = 0;
    kFindObject.m_vecObject.baseclass_0._Myend = 0;
    v32 = 0;
    if ( v4->m_bIsCanAnimation && (v7 = v4->m_pActorMgr.m_pObject) != 0 )
      v8 = (NiNode *)v7->m_spNIFRoot.m_pObject;
    else
      v8 = v4->m_pNiNode.m_pObject;
    NsFindObjectByName::FindObject(&kFindObject, v8, "ActPos");
    fLength = 1000000.0;
    SelectPos = 0;
    v9 = kGroundPos->y * kGroundPos->y + kGroundPos->x * kGroundPos->x + kGroundPos->z * kGroundPos->z;
    v10 = sqrt(v9);
    v11 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
    kGroundLength = v10;
    v12 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast
                     - *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    if ( v12 )
    {
      v13 = 0;
      i = 0;
      if ( v12 > 0 )
      {
        v14 = (unsigned int)v12 > 0;
        do
        {
          if ( v14 )
          {
            v15 = *((_DWORD *)v11 + v13);
            if ( v15 )
            {
              v16 = *(float *)(v15 + 144) * *(float *)(v15 + 144)
                  + *(float *)(v15 + 140) * *(float *)(v15 + 140)
                  + *(float *)(v15 + 148) * *(float *)(v15 + 148);
              v17 = sqrt(v16);
              v18 = v17 - kGroundLength;
              fleng = fabs(v18);
              if ( fLength > (double)fleng )
              {
                v19 = *(const char **)(v15 + 8);
                v20 = *(_DWORD *)(v15 + 8);
                thisa.baseclass_0._Myres = 15;
                thisa.baseclass_0._Mysize = 0;
                thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
                v21 = v20 + 1;
                do
                  v22 = *(_BYTE *)v20++;
                while ( v22 );
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v19, v20 - v21);
                LOBYTE(v32) = 1;
                SelectPos = mhMiscUtil::GetNumFromNodeName(&thisa, 6u, 2);
                LOBYTE(v32) = 0;
                if ( thisa.baseclass_0._Myres >= 0x10 )
                  operator delete(*(void **)&thisa);
                v11 = *(void **)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0];
                fLength = fleng;
              }
              v13 = i;
            }
          }
          ++v13;
          v23 = (signed int)((char *)kFindObject.m_vecObject.baseclass_0._Mylast - (char *)v11) >> 2;
          i = v13;
          v14 = v13 < (unsigned int)v23;
        }
        while ( v13 < v23 );
      }
    }
    if ( v11 )
      operator delete(v11);
    *(_DWORD *)&kFindObject.m_vecObject.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kFindObject.m_vecObject.baseclass_0._Mylast = 0;
    kFindObject.m_vecObject.baseclass_0._Myend = 0;
    if ( kFindObject.m_szName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&kFindObject.m_szName.baseclass_0.___u0.baseclass_0.dummy[0]);
    result = SelectPos;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9C335C: using guessed type int (__stdcall *NsFindObjectByName___vftable_)(int _pkObject, int _pData);
// A85C00: using guessed type int __security_cookie;

//----- (006C6640) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::CheckObjEffItem(MiniHouseIndoor *this, MiniHouseFurnitureObjEffect *Obj)
{
  MiniHouseIndoor *v2; // edi@1
  PgFrameWork *v3; // eax@2
  bool result; // al@3

  v2 = this;
  if ( Obj->NeedItem[0] == 45
    || (v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID),
        InventoryWin::FindItem((InventoryWin *)v3[19].m_BackFrameID, Obj->NeedItem) < 0xC1) )
  {
    result = 1;
  }
  else
  {
    MiniHouseIndoor::ObjEffErrMsg(v2, Obj->Handle, 0x16C8u);
    result = 0;
  }
  return result;
}

//----- (006C66A0) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::CheckObjEffMoney(MiniHouseIndoor *this, MiniHouseFurnitureObjEffect *Obj)
{
  MiniHouseIndoor *v2; // ebx@1
  bool result; // al@3

  v2 = this;
  if ( Obj->NeedMoney && User::GetMoney(&g_kUser) < Obj->NeedMoney )
  {
    MiniHouseIndoor::ObjEffErrMsg(v2, Obj->Handle, 0x16C7u);
    result = 0;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006C6700) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetObjEffMsg(MiniHouseIndoor *this, char *msg, int iResGUID, unsigned __int16 ObjID)
{
  MiniHouseIndoor *v4; // esi@1
  unsigned int v5; // eax@1
  int v6; // edi@2
  int v7; // edx@2
  int v8; // edx@4
  int v9; // eax@5
  MiniHouseFurnitureObjEffect *v10; // edi@6
  PgFrameWork *v11; // esi@10
  char *v12; // eax@10
  MsgBox *v13; // eax@13
  PgFrameWork *v14; // eax@13
  Party result; // [sp+4h] [bp-1D8h]@9
  PgMsg::Frame kMsg; // [sp+1B8h] [bp-24h]@13
  unsigned int v17; // [sp+1CCh] [bp-10h]@1
  int v18; // [sp+1D8h] [bp-4h]@9
  int v19; // [sp+1DCh] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  v4 = this;
  v5 = timeGetTime();
  if ( dwLastSendTime_0 + 2000 <= v5 )
  {
    v6 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v7 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    dwLastSendTime_0 = v5;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v7 + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            iResGUID) )
    {
      if ( (unsigned __int16)iResGUID <= *(_WORD *)(v6 + 200) )
      {
        v8 = *(_DWORD *)(v6 + 196);
        if ( *(_DWORD *)(v8 + 4 * (unsigned __int16)iResGUID) )
        {
          v9 = *(_DWORD *)(v8 + 4 * (unsigned __int16)iResGUID);
          if ( v9 )
          {
            v10 = MHFurnitureObjEffectTab::GetInxName((char *)(v9 + 2));
            if ( v10 )
            {
              mhGameMainConnectMgr::GetMainChar(v4->m_GameMainConnectMgr);
              if ( v4->m_eAccount == 2 )
              {
                if ( MiniHouseIndoor::ObjEffErrMsg(v4, v10->Handle, 0x16CFu) != 1
                  && MiniHouseIndoor::CheckObjEffMoney(v4, v10) )
                {
                  MiniHouseIndoor::ClearObjEffMsg(v4);
                  v13 = MsgBox::Modal(MSGBOX_OKCANCEL, msg);
                  NiPointer<PopupMenuWin>::operator_(
                    (NiPointer<NiD3DDefaultShader> *)&v4->m_spObjEffMsg,
                    (NiD3DDefaultShader *)v13);
                  v4->m_ColiObjID = ObjID;
                  PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                  kMsg.m_uiFrameMsg = 232;
                  v14 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                  MsgBox::SetFrameWorkMsgOnClose(v4->m_spObjEffMsg.m_pObject, v14, &kMsg, 0);
                }
              }
              else
              {
                if ( v10->UseRange[0] == 1 )
                {
                  mhGameMainConnectMgr::GetMyParty(v4->m_GameMainConnectMgr, &result);
                  v18 = -1;
                  Party::_Party(&result);
                }
                else
                {
                  v11 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
                  v12 = ErrMsgTable::GetErrMsg(5835);
                  GameFrameWork::AddSysMsg((GameFrameWork *)v11, v12);
                }
              }
            }
          }
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006C68D0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::PickedCopyObjColiNode(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // edi@1
  int v2; // ebx@1
  NiNode *v3; // ecx@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@3
  NiRefObjectVtbl *v5; // edx@5
  NiObjectNET *v6; // esi@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@6
  const char *v8; // eax@8
  NiAVObject *v9; // eax@11
  NiPointer<NiNode> v10; // [sp-1Ch] [bp-88h]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // [sp-18h] [bp-84h]@11
  mhCollisionType v12; // [sp-14h] [bp-80h]@5
  unsigned int v13; // [sp-10h] [bp-7Ch]@1
  NiPointer<NiNode> *v14; // [sp+0h] [bp-6Ch]@11
  int LoadCollNodeNum; // [sp+4h] [bp-68h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+8h] [bp-64h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > CollNodeName; // [sp+24h] [bp-48h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NewCollNodeName; // [sp+40h] [bp-2Ch]@2
  unsigned int v19; // [sp+5Ch] [bp-10h]@1
  int v20; // [sp+68h] [bp-4h]@2
  int v21; // [sp+6Ch] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v13 = (unsigned int)&v21 ^ __security_cookie;
  v1 = this;
  v2 = 0;
  if ( this->m_PickedObj )
  {
    CollNodeName.baseclass_0._Myres = 15;
    CollNodeName.baseclass_0._Mysize = 0;
    CollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &CollNodeName,
      &mhCollisionParentName_1,
      0,
      0xFFFFFFFFu);
    v3 = (NiNode *)v1->m_PickedObj;
    v20 = 0;
    LoadCollNodeNum = mhMiscUtil::GetNodeMaxNum(v3, &CollNodeName);
    NewCollNodeName.baseclass_0._Myres = 15;
    NewCollNodeName.baseclass_0._Mysize = 0;
    NewCollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v20) = 1;
    if ( LoadCollNodeNum >= 0 )
    {
      do
      {
        mhMiscUtil::MakeNodeNameNum(&CollNodeName, v2, 3);
        v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&CollNodeName;
        if ( CollNodeName.baseclass_0._Myres < 0x10 )
          v4 = &CollNodeName;
        v5 = v1->m_PickedObj->baseclass_0.baseclass_0.baseclass_0.vfptr;
        v12 = (mhCollisionType)v4;
        v6 = (NiObjectNET *)((int (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))v5[18].__vecDelDtor)(v4);
        if ( v6 )
        {
          v7 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 &result,
                 &mhCollisionParentNamePick_1,
                 &CollNodeName);
          LOBYTE(v20) = 2;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NewCollNodeName, v7);
          LOBYTE(v20) = 1;
          if ( result.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&result);
          v8 = *(const char **)&NewCollNodeName;
          if ( NewCollNodeName.baseclass_0._Myres < 0x10 )
            v8 = (const char *)&NewCollNodeName;
          NiObjectNET::SetName(v6, v8);
        }
        v9 = v1->m_PickedObj;
        v12 = 1;
        v11 = &NewCollNodeName;
        v14 = &v10;
        v10.m_pObject = (NiNode *)v9;
        if ( v9 )
          InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        mhCollisionManager::AddColliData(&v1->m_ManagerMediator.m_CollisionManager, v10, v11, v12);
        mhMiscUtil::DelNodeNameNum(&CollNodeName, 3);
        ++v2;
      }
      while ( v2 <= LoadCollNodeNum );
      if ( NewCollNodeName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&NewCollNodeName);
      v2 = 0;
    }
    NewCollNodeName.baseclass_0._Myres = 15;
    NewCollNodeName.baseclass_0._Mysize = v2;
    NewCollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( CollNodeName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&CollNodeName);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006C6A70) --------------------------------------------------------
void __thiscall MiniHouseIndoor::DelCopyObjColiNode(MiniHouseIndoor *this, NiNode *DelRoot, mhCollisionType ColiStyle)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@1
  int v4; // edi@1
  int v5; // edi@4
  NiPointer<NiNode> v6; // [sp-18h] [bp-84h]@5
  mhCollisionType v7; // [sp-14h] [bp-80h]@5
  unsigned int v8; // [sp-10h] [bp-7Ch]@1
  NiPointer<NiNode> *v9; // [sp+0h] [bp-6Ch]@5
  mhCollisionManager *thisa; // [sp+4h] [bp-68h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NewCollNodeName; // [sp+8h] [bp-64h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+24h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > CollNodeName; // [sp+40h] [bp-2Ch]@1
  unsigned int v14; // [sp+5Ch] [bp-10h]@1
  int v15; // [sp+68h] [bp-4h]@1
  int v16; // [sp+6Ch] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v8 = (unsigned int)&v16 ^ __security_cookie;
  thisa = (mhCollisionManager *)this;
  CollNodeName.baseclass_0._Myres = 15;
  CollNodeName.baseclass_0._Mysize = 0;
  CollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &CollNodeName,
    &mhCollisionParentName_1,
    0,
    0xFFFFFFFFu);
  v15 = 0;
  NewCollNodeName.baseclass_0._Myres = 15;
  NewCollNodeName.baseclass_0._Mysize = 0;
  NewCollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v15) = 1;
  v3 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
         &result,
         &mhCollisionParentNamePick_1,
         &CollNodeName);
  LOBYTE(v15) = 2;
  v4 = mhMiscUtil::GetNodeMaxNum(DelRoot, v3);
  LOBYTE(v15) = 1;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  if ( v4 >= 0 )
  {
    ++thisa;
    v5 = v4 + 1;
    do
    {
      v7 = ColiStyle;
      v9 = &v6;
      v6.m_pObject = DelRoot;
      if ( DelRoot )
        InterlockedIncrement((volatile LONG *)&DelRoot->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      mhCollisionManager::DelColliData(thisa, v6, v7);
      --v5;
    }
    while ( v5 );
  }
  if ( CollNodeName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&CollNodeName);
}
// A85C00: using guessed type int __security_cookie;

//----- (006C6B70) --------------------------------------------------------
void __thiscall MiniHouseIndoor::ObjColiAct(MiniHouseIndoor *this, mhObject *pkObj)
{
  char v2; // kr00_1@2
  int v3; // ST0C_4@2
  int v4; // ST08_4@2
  char *v5; // eax@2
  char *v6; // eax@2
  unsigned __int16 *v7; // eax@2
  MiniHouseIndoor *thisa; // [sp+4h] [bp-4h]@1

  thisa = this;
  if ( pkObj )
  {
    v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
           ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
           pkObj->m_iResGUID);
    v3 = pkObj->m_iGUID;
    v4 = pkObj->m_iResGUID;
    v5 = TextData2::Get(0x2B622382u);
    v6 = fs(v5);
    MiniHouseIndoor::SetObjEffMsg(thisa, v6, v4, v3);
    v7 = (unsigned __int16 *)MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(pkObj->m_iResGUID, 0xC350u, 0);
    if ( v7 )
      mhGameMainConnectMgr::SendObjActReq(thisa->m_GameMainConnectMgr, *v7, LOWORD(pkObj->m_iGUID));
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006C6C30) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::ClearLight(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // ebx@1
  mhReturnType v2; // eax@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *v3; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v4; // esi@3
  int v5; // edi@5
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *v6; // eax@10
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba result; // [sp+4h] [bp-4h]@10

  v1 = this;
  if ( *((_DWORD *)&this->m_mapLight.baseclass_0.baseclass_0 + 2) )
  {
    v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)*((_DWORD *)&this->m_mapLight.baseclass_0.baseclass_0 + 1);
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)&v3->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s **)&v3->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v3 )
    {
      do
      {
        if ( *(_DWORD *)(*(_DWORD *)&v4 + 40) )
        {
          v5 = *(_DWORD *)(*(_DWORD *)&v4 + 40);
          if ( v5 )
          {
            if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) )
            {
              if ( v5 )
                (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
            }
            *(_DWORD *)(*(_DWORD *)&v4 + 40) = 0;
          }
        }
        v6 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
               (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *)&v1->m_mapLight,
               &result,
               v4);
        v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s *)&v6->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      }
      while ( *(_DWORD *)&v6->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != *((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0
                                                                                                + 1) );
    }
    v2 = *((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 2) == 0;
  }
  else
  {
    v2 = 0;
  }
  return v2;
}

//----- (006C6CC0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetFocusObj(MiniHouseIndoor *this, mhObject *pkObj, bool bObjAct)
{
  MiniHouseIndoor *v3; // edx@1
  mhObject *v4; // esi@1
  mhFocusObj *v5; // ebx@1
  MHE_STEP v6; // eax@3
  ResElement *v7; // eax@7
  NiActorManager *v8; // ecx@9
  ItemInfo *v9; // eax@15
  MHDiceGameTask **v10; // eax@16
  ResElement *v11; // esi@19
  NiActorManager *v12; // eax@21
  NiNode *v13; // eax@22
  ResElement *v14; // eax@25
  NiActorManager *v15; // ecx@26
  NiNode *v16; // esi@27
  MiniHouseIndoor *thisa; // [sp+0h] [bp-10h]@1

  v3 = this;
  thisa = this;
  v4 = this->m_FocusObj.m_Object;
  v5 = &this->m_FocusObj;
  if ( !pkObj )
  {
    mhFocusObj::SetObj(&this->m_FocusObj, 0);
    if ( v4 )
    {
      v6 = v4->m_Endure;
      if ( v6 )
      {
        if ( v6 == 4 )
          v6 = 3;
      }
      else
      {
        v6 = (MHE_STEP)((char *)&pkObj->vfptr + 1);
      }
      v7 = mhObject::GetResElement(v4, v6);
      if ( v7 )
      {
        if ( v7->m_bIsCanAnimation && (v8 = v7->m_pActorMgr.m_pObject) != 0 )
          MiniHouseIndoor::DetachFocusEff(thisa, (NiNode *)v8->m_spNIFRoot.m_pObject);
        else
          MiniHouseIndoor::DetachFocusEff(thisa, v7->m_pNiNode.m_pObject);
      }
    }
    return;
  }
  if ( v4 )
  {
    if ( v4->m_iGUID == pkObj->m_iGUID )
    {
      if ( bObjAct == 1 )
      {
        mhFocusObj::SetObj(&this->m_FocusObj, pkObj);
        v9 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(pkObj->m_iResGUID);
        if ( MiniHouseFuritureInfoTab::GetObjByName(v9->InxName)->GameType == 1 )
        {
          v10 = (MHDiceGameTask **)MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&bObjAct);
          MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_JOIN_REQ(*v10);
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&bObjAct);
        }
        if ( thisa->m_FocusObj.m_eInfo == 2 )
          MiniHouseIndoor::ObjColiAct(thisa, pkObj);
      }
      return;
    }
    v11 = v4->m_pkResource;
    if ( v11 )
    {
      if ( v11->m_bIsCanAnimation && (v12 = v11->m_pActorMgr.m_pObject) != 0 )
        v13 = (NiNode *)v12->m_spNIFRoot.m_pObject;
      else
        v13 = v11->m_pNiNode.m_pObject;
      MiniHouseIndoor::DetachFocusEff(this, v13);
      v3 = thisa;
    }
  }
  v14 = pkObj->m_pkResource;
  if ( v14->m_bIsCanAnimation && (v15 = v14->m_pActorMgr.m_pObject) != 0 )
    v16 = (NiNode *)v15->m_spNIFRoot.m_pObject;
  else
    v16 = v14->m_pNiNode.m_pObject;
  MiniHouseIndoor::AttachFocusEff(v3, v16);
  if ( v16 )
    mhFocusObj::SetObj(v5, pkObj);
}

//----- (006C6E80) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::CancelPickObj(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // edi@1
  NiNode *v2; // eax@1
  mhObject *v3; // ebx@2
  NiNode *v4; // eax@2
  mhObject *v5; // eax@2
  mhReturnType result; // eax@6

  v1 = this;
  v2 = (NiNode *)this->m_PickedObj;
  if ( v2 )
  {
    v3 = this->m_FocusObj.m_Object;
    v4 = mhObjectManager::FindRootNode(&this->m_ManagerMediator.m_ObjManager, v2);
    v5 = mhObjectManager::GetObjectA(&v1->m_ManagerMediator.m_ObjManager, v4);
    if ( v3 && v5 )
    {
      if ( v5->m_iGUID == v3->m_iGUID )
        MiniHouseIndoor::SetFocusObj(&g_kWorld.m_MiniHouseIndoorMode, 0, 1);
    }
    result = MiniHouseIndoor::ReleasePickObj(v1, 1, 1);
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006C6EE0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::MakePickedObjColiNode(MiniHouseIndoor *this, mhState NewState)
{
  MiniHouseIndoor *v2; // esi@1

  v2 = this;
  if ( NewState == 3 )
    MiniHouseIndoor::PickedCopyObjColiNode(this);
  NiAVObject::Update(v2->m_PickedObj, 0.0, 1);
}

//----- (006C6F10) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::Terminate(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // edi@1
  mhGameMainConnectMgr *v2; // esi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // ST08_4@5
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // ST04_4@5
  void *v5; // ST08_4@5
  NiNode *v6; // esi@6
  NiNode *v7; // esi@11
  const char *v9; // [sp-14h] [bp-28h]@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-14h]@5
  mhGameMainConnectMgr *v11; // [sp+4h] [bp-10h]@5
  int v12; // [sp+10h] [bp-4h]@5

  v1 = this;
  if ( MiniHouseIndoor::ClearLight(this) )
    v9 = "----------MiniHouse LightClear OK---------- \n";
  else
    v9 = "----------MiniHouse LightClear ERROR!!!!!!!!!!!---------- \n";
  OutputDebugStringA(v9);
  MiniHouseIndoor::ClearScene(v1);
  NiCollisionGroup::RemoveAll(&v1->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  mhResTableManager::Clear(&v1->m_ManagerMediator.m_ResTableManager);
  mhObjectManager::Clear(&v1->m_ManagerMediator.m_ObjManager);
  MiniHouseIndoor::ClearUI(v1);
  v2 = v1->m_GameMainConnectMgr;
  if ( v2 )
  {
    v11 = v1->m_GameMainConnectMgr;
    v12 = 0;
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v2);
    v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v2->m_mapSendPacketInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v2->m_mapSendPacketInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
    v12 = 1;
    std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v2,
      &result,
      v4,
      v3);
    v5 = v2->m_mapSendPacketInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v12 = -1;
    operator delete(v5);
    operator delete(v2);
    v1->m_GameMainConnectMgr = 0;
  }
  v6 = v1->m_spRootScene.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->m_spRootScene.m_pObject = 0;
  }
  v7 = v1->m_spFocusObjEff.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v1->m_spFocusObjEff.m_pObject = 0;
  }
  return 1;
}

//----- (006C7040) --------------------------------------------------------
bool __thiscall MiniHouseIndoor::ChangeEndure(MiniHouseIndoor *this, MHE_STEP e, int iGUID)
{
  MiniHouseIndoor *v3; // esi@1
  mhObject *v4; // eax@1
  mhObject *v5; // edi@1
  bool result; // al@2
  mhObject *v7; // eax@3
  signed int v8; // eax@4
  bool v9; // bl@8
  int v10; // [sp+Ch] [bp-4h]@3

  v3 = this;
  v4 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, iGUID);
  v5 = v4;
  if ( v4 )
  {
    v10 = v4->m_iGUID;
    v7 = mhObjectManager::GetObjectA(&v3->m_ManagerMediator.m_ObjManager, (NiNode *)v3->m_PickedObj);
    if ( v7 )
      v8 = v7->m_iGUID;
    else
      v8 = -1;
    if ( v10 == v8 )
    {
      v3->m_RevChangeEndure.e = e;
      v3->m_RevChangeEndure.iCandidateObjID = iGUID;
      result = 1;
    }
    else
    {
      MiniHouseIndoor::CancelPickObj(v3);
      mhCollisionManager::DelObject(&v3->m_ManagerMediator.m_CollisionManager, v5, MH_COL_ALL);
      MiniHouseIndoor::RemoveObjScene(v3, v5);
      v9 = mhObject::SetEndureStep(v5, e);
      MiniHouseIndoor::AttachObjToScene(v3, iGUID, 1);
      result = v9 != 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006C70F0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetNonePickedObj(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1

  v1 = this;
  this->m_PickedObj = 0;
  Cursor::SetCursor(0);
  ITask::DirectDispatchAll(63, v1);
  ITask::DirectDispatchAll(64, v1);
  if ( v1->m_RevChangeEndure.iCandidateObjID != -1 )
  {
    if ( MiniHouseIndoor::ChangeEndure(v1, v1->m_RevChangeEndure.e, v1->m_RevChangeEndure.iCandidateObjID) == 1 )
    {
      v1->m_RevChangeEndure.e = 1;
      v1->m_RevChangeEndure.iCandidateObjID = -1;
    }
  }
}

//----- (006C7160) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::ReleasePickObj(MiniHouseIndoor *this, bool bNoCollisionTest, bool bCallGameFrameNet)
{
  MiniHouseIndoor *v3; // esi@1
  NiAVObject *v4; // eax@1
  int v5; // ecx@4
  unsigned __int16 v6; // dx@9
  float v7; // eax@9
  mhGameMainConnectMgr *v8; // ecx@9
  signed int v10; // edi@11
  NiPointer<NiNode> v11; // eax@12
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@15
  float v13; // edi@15
  unsigned int v14; // edi@19
  NiAVObject *v15; // edi@20
  NiProperty *v16; // eax@21
  mhObject *v17; // edx@26
  NiPointer<NiNode> v18; // ecx@26
  float v19; // edi@27
  int v20; // edx@34
  NiNode *v21; // eax@35
  float v22; // edi@37
  double v23; // st7@43
  double v24; // st6@43
  bool v25; // zf@45
  double v26; // st7@45
  int v27; // ecx@45
  NiPointer<NiNode> v28; // [sp+0h] [bp-38h]@12
  mhCollisionType v29; // [sp+4h] [bp-34h]@9
  NiPoint3 NewPos; // [sp+14h] [bp-24h]@9
  float v31; // [sp+20h] [bp-18h]@12
  float NewRotInfo[4]; // [sp+24h] [bp-14h]@26
  unsigned int v33; // [sp+34h] [bp-4h]@1
  int v34; // [sp+38h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v3 = this;
  v4 = this->m_PickedObj;
  if ( v4 )
  {
    if ( mhCollisionManager::m_ColliStyle && !bNoCollisionTest )
      return 0;
    v5 = this->m_eState - 3;
    if ( v5 )
    {
      if ( v5 == 2 )
      {
        if ( bCallGameFrameNet )
        {
          v10 = 2;
          do
          {
            v11.m_pObject = (NiNode *)v3->m_PickedObj;
            v29 = 1;
            LODWORD(v31) = &v28;
            v28.m_pObject = v11.m_pObject;
            if ( v11.m_pObject )
              InterlockedIncrement((volatile LONG *)&v11.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
            mhCollisionManager::DelColliData(&v3->m_ManagerMediator.m_CollisionManager, v28, v29);
            --v10;
          }
          while ( v10 );
          v12 = v3->m_spAbStateEffScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor;
          v29 = (mhCollisionType)v3->m_PickedObj;
          ((void (__stdcall *)(float *, mhCollisionType))v12)(&v31, v29);
          v13 = v31;
          if ( v31 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v31) + 4)) && LODWORD(v13) )
            (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v13))(LODWORD(v13), 1);
          v3->m_PickedCharhWnd = -1;
          MiniHouseIndoor::SetNonePickedObj(v3);
          v14 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
          if ( v14 )
          {
            MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
            v15 = *(NiAVObject **)(v14 + 700);
            if ( v15 )
            {
              v16 = NiAVObject::GetProperty(v15, 0);
              if ( v16 )
              {
                NiAVObject::DetachProperty(v15, v16);
                NiAVObject::UpdateProperties(v15);
              }
            }
          }
          v3->m_eState = 1;
        }
        else
        {
          if ( !mhCollisionManager::m_ColliStyle )
          {
            if ( !v3->m_bForceArrStateHold )
            {
              NewPos.x = v4->m_kLocal.m_Translate.x;
              NewPos.y = v4->m_kLocal.m_Translate.y;
              v6 = v3->m_PickedCharhWnd;
              v7 = v4->m_kLocal.m_Translate.z;
              v29 = (mhCollisionType)&NewPos;
              v8 = v3->m_GameMainConnectMgr;
              NewPos.z = v7;
              if ( !mhGameMainConnectMgr::SendCompulsionMovetoChar(v8, v6, &NewPos) )
                return 13;
            }
          }
        }
        return 1;
      }
      return 0;
    }
    if ( bNoCollisionTest != 1 && mhCollisionManager::m_ColliStyle )
      return 0;
    NewRotInfo[0] = 0.0;
    NewRotInfo[1] = 0.0;
    NewRotInfo[2] = 0.0;
    NewRotInfo[3] = 0.0;
    NewPos.x = v4->m_kLocal.m_Translate.x;
    NewPos.y = v4->m_kLocal.m_Translate.y;
    NewPos.z = v4->m_kLocal.m_Translate.z;
    NiMatrix3::ExtractAngleAndAxis(&v4->m_kLocal.m_Rotate, NewRotInfo, &NewRotInfo[1], &NewRotInfo[2], &NewRotInfo[3]);
    v17 = mhObjectManager::GetObjectA(&v3->m_ManagerMediator.m_ObjManager, (NiNode *)v3->m_PickedObj);
    if ( !v17 )
    {
      ((void (__stdcall *)(float *, NiAVObject *))v3->m_spAbStateEffScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v31,
        v3->m_PickedObj);
      v19 = v31;
      if ( v31 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v31) + 4)) && LODWORD(v19) )
        (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v19))(LODWORD(v19), 1);
      MiniHouseIndoor::SetNonePickedObj(v3);
      v3->m_eState = 1;
      return 0;
    }
    if ( bCallGameFrameNet == 1 )
    {
      if ( !MiniHouseIndoor::IsPopUpMHItemInvState(v3) )
      {
        v21 = ResElement::GetNiNode(*(ResElement **)(v20 + 64));
        MiniHouseIndoor::DetachAlphaProp(v3, v21);
      }
      MiniHouseIndoor::DelCopyObjColiNode(v3, (NiNode *)v3->m_PickedObj, MH_COL_COLLIDER);
      ((void (__stdcall *)(float *, NiAVObject *))v3->m_spAbStateEffScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v31,
        v3->m_PickedObj);
      if ( v31 != 0.0 )
      {
        v22 = v31;
        if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v31) + 4)) )
        {
          if ( LODWORD(v22) )
            (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v22))(LODWORD(v22), 1);
        }
      }
      MiniHouseIndoor::SetNonePickedObj(v3);
      v3->m_eState = 1;
    }
    else
    {
      if ( !bCallGameFrameNet && !v3->m_bForceArrStateHold )
      {
        v23 = NewRotInfo[3];
        v24 = NewRotInfo[0];
        if ( 0.0 == NewRotInfo[3] * NewRotInfo[0] )
        {
          NewRotInfo[3] = 0.001;
          NewRotInfo[0] = 0.001;
          v23 = (float)0.001;
          v24 = (float)0.001;
        }
        v25 = v3->m_bReadytoCreateObj == 1;
        v26 = v23 * v24;
        v29 = (mhCollisionType)&NewPos;
        v28.m_pObject = v18.m_pObject;
        v27 = v17->m_iGUID;
        if ( v25 )
        {
          v31 = v26;
          mhGameMainConnectMgr::SendCreateObjReq(v3->m_GameMainConnectMgr, v27, v31, (NiPoint3 *)v29);
          v3->m_bReadytoCreateObj = 0;
        }
        else
        {
          v31 = v26;
          mhGameMainConnectMgr::SendRearRangeReq(v3->m_GameMainConnectMgr, v27, v31, (NiPoint3 *)v29);
        }
      }
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// B67C88: using guessed type int mhCollisionManager__m_ColliStyle;

//----- (006C74B0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::AddObject(MiniHouseIndoor *this, int iGUID, int iResGUID, NiPoint3 *Pos, float fAngle, char Endure, bool bAddCollision)
{
  MiniHouseIndoor *v7; // ebx@1
  mhResTableElement *v8; // edi@1
  int (__stdcall *v9)(_DWORD, _DWORD); // eax@1
  int v10; // edx@5
  mhReturnType v11; // eax@8
  void *v12; // eax@11
  int v13; // eax@12
  mhResTableElement *v14; // edi@12
  char *v15; // ecx@14
  char *v16; // eax@14
  char v17; // dl@15
  char v19; // dl@21
  int v20; // ecx@21
  mhReturnType v21; // esi@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v22; // [sp-10h] [bp-64h]@16
  int v23; // [sp+0h] [bp-54h]@16
  signed int v24; // [sp+4h] [bp-50h]@16
  unsigned int v25; // [sp+8h] [bp-4Ch]@1
  NiPoint3 *SetPos; // [sp+18h] [bp-3Ch]@1
  mhReturnType RetValue; // [sp+1Ch] [bp-38h]@8
  char *_Ptr; // [sp+20h] [bp-34h]@8
  int ObjBindType; // [sp+24h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > FileName; // [sp+28h] [bp-2Ch]@14
  unsigned int v31; // [sp+44h] [bp-10h]@1
  int v32; // [sp+50h] [bp-4h]@16
  int v33; // [sp+54h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v25 = (unsigned int)&v33 ^ __security_cookie;
  v7 = this;
  SetPos = Pos;
  v8 = mhResTableManager::GetModelElement(&this->m_ManagerMediator.m_ResTableManager, iResGUID);
  v9 = *(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16);
  ObjBindType = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  if ( (unsigned __int8)v9(iResGUID, v25) )
  {
    if ( (unsigned __int16)iResGUID <= *(_WORD *)(ObjBindType + 200) )
    {
      v10 = *(_DWORD *)(ObjBindType + 196);
      if ( *(_DWORD *)(v10 + 4 * (unsigned __int16)iResGUID) )
        ObjBindType = *(_DWORD *)(v10 + 4 * (unsigned __int16)iResGUID);
      else
        ObjBindType = 0;
    }
    else
    {
      ObjBindType = 0;
    }
  }
  else
  {
    ObjBindType = 0;
  }
  _Ptr = (char *)(ObjBindType + 2);
  v11 = (mhReturnType)MiniHouseFuritureInfoTab::GetObjByName((char *)(ObjBindType + 2));
  RetValue = v11;
  if ( !v11 || !ObjBindType )
    return 0;
  if ( !v8 )
  {
    v12 = operator new(0x44u);
    if ( v12 )
    {
      mhResTableElement::mhResTableElement((mhResTableElement *)v12);
      v14 = (mhResTableElement *)v13;
      ObjBindType = v13;
    }
    else
    {
      ObjBindType = 0;
      v14 = 0;
    }
    v15 = _Ptr;
    v16 = _Ptr;
    FileName.baseclass_0._Myres = 15;
    FileName.baseclass_0._Mysize = 0;
    FileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    ++_Ptr;
    do
      v17 = *v16++;
    while ( v17 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&FileName, v15, v16 - _Ptr);
    _Ptr = (char *)&v22;
    v24 = 15;
    v23 = 0;
    v32 = 0;
    v22.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v22,
      &mhResObjDefaultRootName_0,
      0,
      0xFFFFFFFFu);
    mhResTableElement::Create(v14, &FileName, iResGUID, 0, 0, 10, 10000, 0, v22);
    mhResTableManager::AddModelElement(&v7->m_ManagerMediator.m_ResTableManager, v14);
    v8 = mhResTableManager::GetModelElement(&v7->m_ManagerMediator.m_ResTableManager, iResGUID);
    if ( !v8 )
    {
      if ( ObjBindType )
        (**(void (__stdcall ***)(_DWORD))ObjBindType)(1);
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&FileName);
      return 9;
    }
    v32 = -1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&FileName);
    v11 = RetValue;
  }
  v19 = *(_BYTE *)(v11 + 135);
  BYTE1(ObjBindType) = *(_BYTE *)(v11 + 136);
  v20 = *(_BYTE *)(v11 + 137);
  LOBYTE(ObjBindType) = v19;
  LOWORD(v24) = ObjBindType;
  BYTE2(v24) = v20;
  RetValue = mhObjectManager::AddObject(
               &v7->m_ManagerMediator.m_ObjManager,
               iGUID,
               v8,
               -1,
               (mhObject::mhObjBindType)v24,
               &mhObjDefaultRootName_0);
  mhObjectManager::SetPosition(&v7->m_ManagerMediator.m_ObjManager, iGUID, SetPos);
  mhObjectManager::SetRotate(&v7->m_ManagerMediator.m_ObjManager, iGUID, fAngle);
  v21 = RetValue;
  if ( RetValue == 1 )
    MiniHouseIndoor::ChangeEndure(v7, (MHE_STEP)(unsigned __int8)Endure, iGUID);
  return v21;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006C76F0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::SetObjPos(MiniHouseIndoor *this, int iGUID, NiPoint3 *Pos, float angle)
{
  MiniHouseIndoor *v4; // ebx@1
  mhReturnType result; // eax@3
  ResElement *v6; // eax@4
  NiActorManager *v7; // ecx@5
  NiAVObject *v8; // ecx@6
  mhReturnType RetValue; // [sp+20h] [bp+Ch]@1

  v4 = this;
  RetValue = mhObjectManager::SetPosition(&this->m_ManagerMediator.m_ObjManager, iGUID, Pos);
  if ( 0.0 != angle )
    RetValue = mhObjectManager::SetRotate(&v4->m_ManagerMediator.m_ObjManager, iGUID, angle);
  result = (mhReturnType)mhObjectManager::GetObjectA(&v4->m_ManagerMediator.m_ObjManager, iGUID);
  if ( result )
  {
    MiniHouseIndoor::ReleasePickObj(v4, 1, 1);
    v6 = mhObjectManager::GetObjectA(&v4->m_ManagerMediator.m_ObjManager, iGUID)->m_pkResource;
    if ( v6->m_bIsCanAnimation && (v7 = v6->m_pActorMgr.m_pObject) != 0 )
      v8 = v7->m_spNIFRoot.m_pObject;
    else
      v8 = (NiAVObject *)v6->m_pNiNode.m_pObject;
    NiAVObject::Update(v8, 0.0, 1);
    result = RetValue;
  }
  return result;
}

//----- (006C7790) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::DelObject(MiniHouseIndoor *this, int iObjGUID, bool bCallGameFrameNet)
{
  MiniHouseIndoor *v3; // esi@1
  mhObject *v4; // edi@1
  mhReturnType result; // eax@2
  mhObject *v6; // eax@3
  unsigned int ChildCount; // [sp+18h] [bp+Ch]@8

  v3 = this;
  v4 = mhObjectManager::GetObjectA(&this->m_ManagerMediator.m_ObjManager, iObjGUID);
  if ( v4 )
  {
    v6 = v3->m_FocusObj.m_Object;
    if ( v6 && v4->m_iGUID == v6->m_iGUID )
      MiniHouseIndoor::SetFocusObj(&g_kWorld.m_MiniHouseIndoorMode, 0, 1);
    if ( v3->m_PickedObj )
      MiniHouseIndoor::ReleasePickObj(v3, 1, bCallGameFrameNet);
    mhCollisionManager::DelObject(&v3->m_ManagerMediator.m_CollisionManager, v4, MH_COL_ALL);
    ChildCount = v3->m_spNormalScene.m_pObject->m_kChildren.m_uiESize;
    if ( !mhObjectManager::AskDelayedDelObj(&v3->m_ManagerMediator.m_ObjManager, v4) )
      MiniHouseIndoor::RemoveObjScene(v3, v4);
    if ( mhObjectManager::DelObject(&v3->m_ManagerMediator.m_ObjManager, iObjGUID) == 14 )
      result = 1;
    else
      result = ChildCount - 1 == v3->m_spNormalScene.m_pObject->m_kChildren.m_uiESize;
  }
  else
  {
    result = 8;
  }
  return result;
}

//----- (006C7860) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::AddLight(MiniHouseIndoor *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > LightName)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  unsigned int v5; // edi@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // edx@12
  unsigned int v7; // ebx@14
  unsigned int v8; // ecx@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@16
  int v10; // eax@18
  bool v11; // zf@18
  signed int v12; // eax@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@24
  float v14; // edx@26
  float v15; // ecx@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // edx@27
  unsigned int v17; // ebx@29
  unsigned int v18; // ecx@29
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v19; // eax@31
  int v20; // eax@33
  bool v21; // zf@33
  signed int v22; // eax@35
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v23; // eax@39
  float v24; // edx@41
  float v25; // ecx@41
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v26; // edx@42
  unsigned int v27; // ebx@44
  unsigned int v28; // ecx@44
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v29; // eax@46
  int v30; // eax@48
  bool v31; // zf@48
  signed int v32; // eax@50
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v33; // eax@54
  float v34; // edx@56
  float v35; // ecx@56
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v36; // edx@57
  unsigned int v37; // ebx@59
  unsigned int v38; // ecx@59
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v39; // eax@61
  int v40; // eax@63
  bool v41; // zf@63
  signed int v42; // eax@65
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v43; // eax@69
  NiAmbientLight *v44; // edi@74
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *v45; // eax@78
  mhReturnType result; // eax@83
  const char *v47; // [sp-14h] [bp-50h]@26
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiAmbientLight>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st pairResult; // [sp+0h] [bp-3Ch]@1
  NiPointer<NiAmbientLight> NewLight; // [sp+8h] [bp-34h]@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiAmbientLight> > pairNewElement; // [sp+Ch] [bp-30h]@72
  unsigned int v51; // [sp+2Ch] [bp-10h]@1
  int v52; // [sp+38h] [bp-4h]@1
  int v53; // [sp+3Ch] [bp+0h]@1

  v51 = (unsigned int)&v53 ^ __security_cookie;
  *(_DWORD *)&pairResult.baseclass_0.second = this;
  v52 = 0;
  v2 = operator new(0x10Cu);
  NewLight.m_pObject = (NiAmbientLight *)v2;
  LOBYTE(v52) = 1;
  if ( v2 )
  {
    NiAmbientLight::NiAmbientLight((NiAmbientLight *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  NewLight.m_pObject = (NiAmbientLight *)v4;
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v5 = LightName.baseclass_0._Mysize;
  LOBYTE(v52) = 2;
  if ( !LightName.baseclass_0._Mysize )
  {
    LOBYTE(v52) = 0;
    if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    if ( LightName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&LightName);
    return 0;
  }
  v6 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhObjAmbLightMoveNO_0;
  if ( mhObjAmbLightMoveNO_0.baseclass_0._Myres < 0x10 )
    v6 = &mhObjAmbLightMoveNO_0;
  v7 = mhObjAmbLightMoveNO_0.baseclass_0._Mysize;
  v8 = LightName.baseclass_0._Mysize;
  if ( LightName.baseclass_0._Mysize >= mhObjAmbLightMoveNO_0.baseclass_0._Mysize )
    v8 = mhObjAmbLightMoveNO_0.baseclass_0._Mysize;
  v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
  if ( LightName.baseclass_0._Myres < 0x10 )
    v9 = &LightName;
  v10 = std::char_traits<char>::compare(
          v9->baseclass_0.___u0.baseclass_0.dummy,
          v6->baseclass_0.___u0.baseclass_0.dummy,
          v8);
  v11 = v10 == 0;
  if ( !v10 )
  {
    if ( v5 >= v7 )
      v12 = v5 != v7;
    else
      v12 = -1;
    v11 = v12 == 0;
  }
  if ( v11 )
  {
    v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
    if ( LightName.baseclass_0._Myres < 0x10 )
      v13 = &LightName;
    NiObjectNET::SetName((NiObjectNET *)v4, v13->baseclass_0.___u0.baseclass_0.dummy);
    *(_DWORD *)(v4 + 228) = (_DWORD)MoveNOColor_0.r;
    *(_DWORD *)(v4 + 232) = LODWORD(MoveNOColor_0.g);
    *(_DWORD *)(v4 + 236) = LODWORD(MoveNOColor_0.b);
    ++*(_DWORD *)(v4 + 188);
    *(_DWORD *)(v4 + 240) = (_DWORD)MoveNOColor_0.r;
    *(_DWORD *)(v4 + 244) = LODWORD(MoveNOColor_0.g);
    v14 = MoveNOColor_0.b;
    ++*(_DWORD *)(v4 + 188);
    *(_DWORD *)(v4 + 248) = LODWORD(v14);
    *(_DWORD *)(v4 + 252) = (_DWORD)MoveNOColor_0.r;
    *(_DWORD *)(v4 + 256) = LODWORD(MoveNOColor_0.g);
    v15 = MoveNOColor_0.b;
    ++*(_DWORD *)(v4 + 188);
    *(_DWORD *)(v4 + 260) = LODWORD(v15);
    ++*(_DWORD *)(v4 + 188);
    v47 = "----------MiniHouse LightRED OK---------- \n";
  }
  else
  {
    v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhObjAmbLightMoveOK_0;
    if ( mhObjAmbLightMoveOK_0.baseclass_0._Myres < 0x10 )
      v16 = &mhObjAmbLightMoveOK_0;
    v17 = mhObjAmbLightMoveOK_0.baseclass_0._Mysize;
    v18 = v5;
    if ( v5 >= mhObjAmbLightMoveOK_0.baseclass_0._Mysize )
      v18 = mhObjAmbLightMoveOK_0.baseclass_0._Mysize;
    v19 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
    if ( LightName.baseclass_0._Myres < 0x10 )
      v19 = &LightName;
    v20 = std::char_traits<char>::compare(
            v19->baseclass_0.___u0.baseclass_0.dummy,
            v16->baseclass_0.___u0.baseclass_0.dummy,
            v18);
    v21 = v20 == 0;
    if ( !v20 )
    {
      if ( v5 >= v17 )
        v22 = v5 != v17;
      else
        v22 = -1;
      v21 = v22 == 0;
    }
    if ( v21 )
    {
      v23 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
      if ( LightName.baseclass_0._Myres < 0x10 )
        v23 = &LightName;
      NiObjectNET::SetName((NiObjectNET *)v4, v23->baseclass_0.___u0.baseclass_0.dummy);
      *(_DWORD *)(v4 + 228) = (_DWORD)MoveOKColor_0.r;
      *(_DWORD *)(v4 + 232) = LODWORD(MoveOKColor_0.g);
      *(_DWORD *)(v4 + 236) = LODWORD(MoveOKColor_0.b);
      ++*(_DWORD *)(v4 + 188);
      *(_DWORD *)(v4 + 240) = (_DWORD)MoveOKColor_0.r;
      *(_DWORD *)(v4 + 244) = LODWORD(MoveOKColor_0.g);
      v24 = MoveOKColor_0.b;
      ++*(_DWORD *)(v4 + 188);
      *(_DWORD *)(v4 + 248) = LODWORD(v24);
      *(_DWORD *)(v4 + 252) = (_DWORD)MoveOKColor_0.r;
      *(_DWORD *)(v4 + 256) = LODWORD(MoveOKColor_0.g);
      v25 = MoveOKColor_0.b;
      ++*(_DWORD *)(v4 + 188);
      *(_DWORD *)(v4 + 260) = LODWORD(v25);
      ++*(_DWORD *)(v4 + 188);
      v47 = "----------MiniHouse LightGREEN OK---------- \n";
    }
    else
    {
      v26 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhObjAmbLightNormal_0;
      if ( mhObjAmbLightNormal_0.baseclass_0._Myres < 0x10 )
        v26 = &mhObjAmbLightNormal_0;
      v27 = mhObjAmbLightNormal_0.baseclass_0._Mysize;
      v28 = v5;
      if ( v5 >= mhObjAmbLightNormal_0.baseclass_0._Mysize )
        v28 = mhObjAmbLightNormal_0.baseclass_0._Mysize;
      v29 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
      if ( LightName.baseclass_0._Myres < 0x10 )
        v29 = &LightName;
      v30 = std::char_traits<char>::compare(
              v29->baseclass_0.___u0.baseclass_0.dummy,
              v26->baseclass_0.___u0.baseclass_0.dummy,
              v28);
      v31 = v30 == 0;
      if ( !v30 )
      {
        if ( v5 >= v27 )
          v32 = v5 != v27;
        else
          v32 = -1;
        v31 = v32 == 0;
      }
      if ( v31 )
      {
        v33 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
        if ( LightName.baseclass_0._Myres < 0x10 )
          v33 = &LightName;
        NiObjectNET::SetName((NiObjectNET *)v4, v33->baseclass_0.___u0.baseclass_0.dummy);
        *(_DWORD *)(v4 + 228) = (_DWORD)NormalColor_0.r;
        *(_DWORD *)(v4 + 232) = LODWORD(NormalColor_0.g);
        *(_DWORD *)(v4 + 236) = LODWORD(NormalColor_0.b);
        ++*(_DWORD *)(v4 + 188);
        *(_DWORD *)(v4 + 240) = (_DWORD)NormalColor_0.r;
        *(_DWORD *)(v4 + 244) = LODWORD(NormalColor_0.g);
        v34 = NormalColor_0.b;
        ++*(_DWORD *)(v4 + 188);
        *(_DWORD *)(v4 + 248) = LODWORD(v34);
        *(_DWORD *)(v4 + 252) = (_DWORD)NormalColor_0.r;
        *(_DWORD *)(v4 + 256) = LODWORD(NormalColor_0.g);
        v35 = NormalColor_0.b;
        ++*(_DWORD *)(v4 + 188);
        *(_DWORD *)(v4 + 260) = LODWORD(v35);
        ++*(_DWORD *)(v4 + 188);
        v47 = "----------MiniHouse LightNORMAL OK---------- \n";
      }
      else
      {
        v36 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhObjAmbLightRepair_0;
        if ( mhObjAmbLightRepair_0.baseclass_0._Myres < 0x10 )
          v36 = &mhObjAmbLightRepair_0;
        v37 = mhObjAmbLightRepair_0.baseclass_0._Mysize;
        v38 = v5;
        if ( v5 >= mhObjAmbLightRepair_0.baseclass_0._Mysize )
          v38 = mhObjAmbLightRepair_0.baseclass_0._Mysize;
        v39 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
        if ( LightName.baseclass_0._Myres < 0x10 )
          v39 = &LightName;
        v40 = std::char_traits<char>::compare(
                v39->baseclass_0.___u0.baseclass_0.dummy,
                v36->baseclass_0.___u0.baseclass_0.dummy,
                v38);
        v41 = v40 == 0;
        if ( !v40 )
        {
          if ( v5 >= v37 )
            v42 = v5 != v37;
          else
            v42 = -1;
          v41 = v42 == 0;
        }
        if ( !v41 )
        {
          if ( v4 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
          LOBYTE(v52) = 0;
          NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&NewLight);
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&LightName);
          return 0;
        }
        v43 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
        if ( LightName.baseclass_0._Myres < 0x10 )
          v43 = &LightName;
        NiObjectNET::SetName((NiObjectNET *)v4, v43->baseclass_0.___u0.baseclass_0.dummy);
        NiLight::SetAmbientColor((NiLight *)v4, &RepairColor_0);
        NiLight::SetDiffuseColor((NiLight *)v4, &RepairColor_0);
        NiLight::SetSpecularColor((NiLight *)v4, &RepairColor_0);
        ++*(_DWORD *)(v4 + 188);
        v47 = "----------MiniHouse LightYELLOW OK---------- \n";
      }
    }
  }
  *(float *)(v4 + 224) = 1.0;
  OutputDebugStringA(v47);
  pairNewElement.baseclass_0.first.baseclass_0._Myres = 15;
  pairNewElement.baseclass_0.first.baseclass_0._Mysize = 0;
  pairNewElement.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  pairNewElement.baseclass_0.second.m_pObject = 0;
  LOBYTE(v52) = 3;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &pairNewElement.baseclass_0.first,
    &LightName,
    0,
    0xFFFFFFFFu);
  if ( pairNewElement.baseclass_0.second.m_pObject != (NiAmbientLight *)v4 )
  {
    if ( pairNewElement.baseclass_0.second.m_pObject )
    {
      v44 = pairNewElement.baseclass_0.second.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&pairNewElement.baseclass_0.second.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v44 )
          v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v44,
            1u);
      }
    }
    pairNewElement.baseclass_0.second.m_pObject = (NiAmbientLight *)v4;
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  }
  v45 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>>__>(
          (std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std: *)(*(_DWORD *)&pairResult.baseclass_0.second + 196),
          (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<NiTexture> > *)&pairNewElement);
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)(*(_DWORD *)&pairResult.baseclass_0.second + 196),
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocat *)&pairResult,
    (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v45,
    0);
  if ( pairResult.baseclass_0.second )
  {
    LOBYTE(v52) = 2;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *)&pairNewElement);
    LOBYTE(v52) = 0;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    if ( LightName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&LightName);
    result = 1;
  }
  else
  {
    (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    LOBYTE(v52) = 2;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *)&pairNewElement);
    LOBYTE(v52) = 0;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    if ( LightName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&LightName);
    result = 5;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C7E10) --------------------------------------------------------
NiPointer<NiAmbientLight> *__thiscall MiniHouseIndoor::GetLight(MiniHouseIndoor *this, NiPointer<NiAmbientLight> *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > LightName)
{
  NiPointer<NiAmbientLight> *v3; // ebx@1
  char *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v5; // eax@1
  NiPointer<NiAmbientLight> *v6; // edi@1
  unsigned int v7; // ebx@2
  int v8; // eax@2
  unsigned int v9; // edx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // ecx@6
  int v11; // eax@8
  bool v12; // sf@8
  int *v13; // eax@12
  bool v14; // cf@16
  NiTexture *v15; // eax@18
  void *v17; // [sp-14h] [bp-2Ch]@17
  MiniHouseIndoor *v18; // [sp+0h] [bp-18h]@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v19; // [sp+4h] [bp-14h]@1
  NiPointer<NiAmbientLight> *v20; // [sp+8h] [bp-10h]@1
  int v21; // [sp+14h] [bp-4h]@1

  v3 = result;
  v18 = this;
  v20 = result;
  v19 = 0;
  v21 = 0;
  v4 = (char *)&this->m_mapLight;
  v5 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&this->m_mapLight,
         &LightName);
  v6 = (NiPointer<NiAmbientLight> *)*((_DWORD *)v4 + 1);
  v19 = v5;
  if ( (NiPointer<NiAmbientLight> *)v5 == v6 )
    goto LABEL_14;
  v7 = v5->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v8 = (int)&v5->_Myval;
  if ( *(_DWORD *)(v8 + 20) >= 0x10u )
    v8 = *(_DWORD *)v8;
  v9 = LightName.baseclass_0._Mysize;
  if ( LightName.baseclass_0._Mysize >= v7 )
    v9 = v7;
  v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&LightName;
  if ( LightName.baseclass_0._Myres < 0x10 )
    v10 = &LightName;
  v11 = std::char_traits<char>::compare(v10->baseclass_0.___u0.baseclass_0.dummy, (const char *)v8, v9);
  v12 = v11 < 0;
  if ( v11 )
    goto LABEL_11;
  if ( LightName.baseclass_0._Mysize >= v7 )
  {
    v12 = (LightName.baseclass_0._Mysize != v7) < 0;
LABEL_11:
    if ( !v12 )
    {
      v3 = v20;
      v13 = (int *)&v19;
      goto LABEL_15;
    }
  }
  v3 = v20;
LABEL_14:
  v20 = v6;
  v13 = (int *)&v20;
LABEL_15:
  if ( *v13 == *((_DWORD *)&v18->m_mapLight.baseclass_0.baseclass_0 + 1) )
  {
    v14 = LightName.baseclass_0._Myres < 0x10;
    v3->m_pObject = 0;
    if ( !v14 )
    {
      v17 = *(void **)&LightName;
LABEL_22:
      operator delete(v17);
      return v3;
    }
  }
  else
  {
    v15 = std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>>::operator__(
            (std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std:: *)v4,
            &LightName)->m_pObject;
    v3->m_pObject = (NiAmbientLight *)v15;
    if ( v15 )
      InterlockedIncrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    if ( LightName.baseclass_0._Myres >= 0x10 )
    {
      v17 = *(void **)&LightName;
      goto LABEL_22;
    }
  }
  return v3;
}

//----- (006C7F30) --------------------------------------------------------
#error "6C7FED: positive sp value has been found (funcsize=67)"

//----- (006C81E0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::_MiniHouseIndoor(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  NiNode *v2; // edi@1
  MsgBox *v3; // edi@5
  MsgBox *v4; // edi@9
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v5; // ST08_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v6; // ST04_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v7; // ST08_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v8; // ST04_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v9; // ST08_4@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v10; // ST04_4@13
  NiNode *v11; // edi@13
  NiNode *v12; // edi@17
  NiNode *v13; // edi@21
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > result; // [sp+0h] [bp-18h]@13
  std::map<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> > > *v15; // [sp+4h] [bp-14h]@13
  MiniHouseIndoor *v16; // [sp+8h] [bp-10h]@1
  int v17; // [sp+14h] [bp-4h]@1

  v1 = this;
  v16 = this;
  v2 = this->m_spFocusObjEff.m_pObject;
  v17 = 9;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spObjEffMsg.m_pObject;
  LOBYTE(v17) = 8;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_spMsgBox.m_pObject;
  LOBYTE(v17) = 7;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v15 = &v1->m_mapCharLev;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v17) = 10;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_mapCharLev,
    &result,
    v6,
    v5);
  operator delete(v1->m_mapCharLev.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)&v1->m_mapUIGroup;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v17) = 11;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapUIGroup,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&v15,
    v8,
    v7);
  operator delete(v1->m_mapUIGroup.baseclass_0.baseclass_0.baseclass_0._Myhead);
  result = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)&v1->m_mapLight;
  v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&v1->m_mapLight.baseclass_0.baseclass_0 + 1);
  v10 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**((_DWORD **)&v1->m_mapLight.baseclass_0.baseclass_0 + 1);
  LOBYTE(v17) = 12;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *)&v1->m_mapLight,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)&v15,
    v10,
    v9);
  operator delete(*((void **)&v1->m_mapLight.baseclass_0.baseclass_0 + 1));
  v11 = v1->m_spAbStateEffScene.m_pObject;
  LOBYTE(v17) = 3;
  if ( v11
    && !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
  v12 = v1->m_spNormalScene.m_pObject;
  LOBYTE(v17) = 2;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
  v13 = v1->m_spRootScene.m_pObject;
  LOBYTE(v17) = 1;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
  LOBYTE(v17) = 0;
  MiniHouseRoomInfo::_MiniHouseRoomInfo(&v1->m_RoomInfo);
  v17 = 13;
  result = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)&v1->m_ManagerMediator.m_CollisionManager;
  LOBYTE(v17) = 15;
  NiCollisionGroup::RemoveAll(&v1->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  LOBYTE(v17) = 14;
  NiCollisionGroup::_NiCollisionGroup(&v1->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  LOBYTE(v17) = 13;
  mhObjectManager::_mhObjectManager(&v1->m_ManagerMediator.m_ObjManager);
  v17 = -1;
  mhResTableManager::_mhResTableManager(&v1->m_ManagerMediator.m_ResTableManager);
}

//----- (006C83E0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::SetForceArrStateHold(MiniHouseIndoor *this, bool b)
{
  MiniHouseIndoor *v2; // esi@1
  NiNode *v3; // eax@2
  mhReturnType result; // eax@4
  NiNode *v5; // eax@5
  unsigned int v6; // [sp-4h] [bp-24h]@1
  char v7; // [sp+0h] [bp-20h]@1
  int v8; // [sp+10h] [bp-10h]@1
  signed int v9; // [sp+14h] [bp-Ch]@1

  v2 = this;
  v6 = -1;
  v9 = 15;
  v8 = 0;
  v7 = 0;
  if ( b )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v7,
      &mhObjAmbLightMoveNO_0,
      0,
      v6);
    v3 = v2->m_spAbStateEffScene.m_pObject;
    v6 = (unsigned int)v3;
    if ( v3 )
      InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MiniHouseIndoor::ChangeLight(
      v2,
      (NiPointer<NiNode>)v6,
      *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v7);
    result = 1;
    v2->m_bForceArrStateHold = 1;
  }
  else
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v7,
      &mhObjAmbLightMoveOK_0,
      0,
      v6);
    v5 = v2->m_spAbStateEffScene.m_pObject;
    v6 = (unsigned int)v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MiniHouseIndoor::ChangeLight(
      v2,
      (NiPointer<NiNode>)v6,
      *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v7);
    v2->m_bForceArrStateHold = 0;
    result = 1;
  }
  return result;
}

//----- (006C8490) --------------------------------------------------------
void __thiscall MiniHouseIndoor::SetupScene(MiniHouseIndoor *this, NiPointer<NiNode> spRoot)
{
  MiniHouseIndoor *v2; // esi@1
  int v3; // ebx@1
  void *v4; // eax@2
  int v5; // eax@3
  NiNode *v6; // edi@4
  void *v7; // eax@11
  int v8; // eax@12
  int v9; // ebx@12
  NiNode *v10; // edi@14
  NiNode *v11; // eax@21
  NiNode *v12; // eax@23
  NiPointer<NiNode> v13; // [sp+0h] [bp-40h]@21
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v14; // [sp+4h] [bp-3Ch]@21
  int v15; // [sp+14h] [bp-2Ch]@21
  signed int v16; // [sp+18h] [bp-28h]@21
  NiNode *v17; // [sp+1Ch] [bp-24h]@25
  void *v18; // [sp+30h] [bp-10h]@2
  int v19; // [sp+3Ch] [bp-4h]@1

  v2 = this;
  v3 = 0;
  v19 = 0;
  if ( spRoot.m_pObject )
  {
    v4 = operator new(0xE8u);
    v18 = v4;
    LOBYTE(v19) = 1;
    if ( v4 )
    {
      NiNode::NiNode((NiNode *)v4, 0);
      v3 = v5;
    }
    v6 = v2->m_spNormalScene.m_pObject;
    LOBYTE(v19) = 0;
    if ( v6 != (NiNode *)v3 )
    {
      if ( v6
        && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v2->m_spNormalScene.m_pObject = (NiNode *)v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)(v3 + 4));
    }
    v7 = operator new(0xE8u);
    v18 = v7;
    LOBYTE(v19) = 2;
    if ( v7 )
    {
      NiNode::NiNode((NiNode *)v7, 0);
      v9 = v8;
    }
    else
    {
      v9 = 0;
    }
    v10 = v2->m_spAbStateEffScene.m_pObject;
    LOBYTE(v19) = 0;
    if ( v10 != (NiNode *)v9 )
    {
      if ( v10
        && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      v2->m_spAbStateEffScene.m_pObject = (NiNode *)v9;
      if ( v9 )
        InterlockedIncrement((volatile LONG *)(v9 + 4));
    }
    ((void (__stdcall *)(NiNode *, _DWORD))spRoot.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_spAbStateEffScene.m_pObject,
      0);
    ((void (__stdcall *)(NiNode *, _DWORD))spRoot.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_spNormalScene.m_pObject,
      0);
    v18 = &v14;
    v16 = 15;
    v15 = 0;
    v14.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v14,
      &mhObjAmbLightNormal_0,
      0,
      0xFFFFFFFFu);
    v11 = v2->m_spNormalScene.m_pObject;
    v18 = &v13;
    v13.m_pObject = v11;
    if ( v11 )
      InterlockedIncrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MiniHouseIndoor::ChangeLight(v2, v13, v14);
    v18 = &v14;
    v16 = 15;
    v15 = 0;
    v14.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v14,
      &mhObjAmbLightMoveOK_0,
      0,
      0xFFFFFFFFu);
    v12 = v2->m_spAbStateEffScene.m_pObject;
    v18 = &v13;
    v13.m_pObject = v12;
    if ( v12 )
      InterlockedIncrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MiniHouseIndoor::ChangeLight(v2, v13, v14);
    v17 = v2->m_spAbStateEffScene.m_pObject;
    mhManagerMediator::Create(&v2->m_ManagerMediator, v17);
    NiAVObject::Update(&spRoot.m_pObject->baseclass_0, 0.0, 1);
    NiAVObject::UpdateProperties(&spRoot.m_pObject->baseclass_0);
    NiAVObject::UpdateEffects(&spRoot.m_pObject->baseclass_0);
    v19 = -1;
    if ( spRoot.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spRoot.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spRoot.m_pObject )
        spRoot.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spRoot.m_pObject,
          1u);
    }
  }
}

//----- (006C86B0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::SetState(MiniHouseIndoor *this, mhState NewState)
{
  mhReturnType result; // eax@1
  MiniHouseIndoor *v3; // esi@1
  NiNode *v4; // eax@6
  PgFrameWork *v5; // eax@11
  NiPointer<NiNode> v6; // [sp-20h] [bp-28h]@6
  char v7; // [sp-1Ch] [bp-24h]@6
  int v8; // [sp-Ch] [bp-14h]@6
  signed int v9; // [sp-8h] [bp-10h]@6
  const char *v10; // [sp-4h] [bp-Ch]@4

  result = 1;
  v3 = this;
  if ( NewState == 1 )
  {
    if ( this->m_eAccount == 1 )
    {
      this->m_eState = 1;
      return result;
    }
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
    v10 = "mhSelectedObj::pkObj == NULL;\n";
    v3->m_FocusObj.m_Object = 0;
    v3->m_FocusObj.m_eInfo = 0;
    OutputDebugStringA(v10);
  }
  else
  {
    if ( NewState == 2 )
    {
      MiniHouseIndoor::CancelPickObj(this);
      v9 = 15;
      v8 = 0;
      v7 = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v7,
        &mhObjAmbLightRepair_0,
        0,
        0xFFFFFFFFu);
      v4 = v3->m_spAbStateEffScene.m_pObject;
      v6.m_pObject = v4;
      if ( v4 )
        InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      MiniHouseIndoor::ChangeLight(v3, v6, *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v7);
      Cursor::SetCursor((Cursor::Type)11);
    }
    else
    {
      if ( !NewState && this->m_eState == 2 )
      {
        Cursor::SetCursor(0);
        v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        GameFrameWork::SetInvLockAllItems((GameFrameWork *)v5, 0);
      }
    }
  }
  if ( v3->m_eAccount == 2 && NewState == 1 )
  {
    MiniHouseIndoor::CancelPickObj(v3);
    if ( v3->m_eState == 2 )
      Cursor::SetCursor(0);
  }
  v3->m_eState = NewState;
  return 1;
}

//----- (006C87D0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::SetPickedObj(MiniHouseIndoor *this, NiAVObject *Picked, mhState NewState, bool bReadytoCreateObj)
{
  int v4; // ebx@0
  int v5; // edi@0
  MiniHouseIndoor *v6; // esi@1
  mhReturnType result; // eax@2
  int v8; // ST0C_4@3
  int v9; // ST08_4@3
  NiNode *v10; // eax@3
  mhObject *v11; // eax@3
  int v12; // edi@3
  int v13; // ebx@3
  int v14; // edi@4
  int v15; // eax@7
  MiniHouseFurniture *v16; // eax@10
  PgFrameWork *v17; // eax@13
  NiNode *v18; // eax@20
  MainChar *v19; // eax@22
  unsigned __int16 v20; // ax@24
  mhObject *pPickedObj; // [sp+4h] [bp-8h]@3
  NiAVObject *pRootPick; // [sp+8h] [bp-4h]@3

  v6 = this;
  if ( !Picked )
  {
    MiniHouseIndoor::CancelPickObj(this);
    return 4;
  }
  v8 = v4;
  v9 = v5;
  v10 = mhObjectManager::FindRootNode(&this->m_ManagerMediator.m_ObjManager, (NiNode *)Picked);
  pRootPick = (NiAVObject *)v10;
  v11 = mhObjectManager::GetObjectA(&v6->m_ManagerMediator.m_ObjManager, v10);
  v12 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v13 = v11->m_iResGUID;
  pPickedObj = v11;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, int, int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                  + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          v11->m_iResGUID,
                          v9,
                          v8) )
  {
    if ( (unsigned __int16)v13 <= *(_WORD *)(v12 + 200) )
    {
      v15 = *(_DWORD *)(v12 + 196) + 4 * (unsigned __int16)v13;
      if ( *(_DWORD *)v15 )
        v14 = *(_DWORD *)v15;
      else
        v14 = 0;
    }
    else
    {
      v14 = 0;
    }
  }
  else
  {
    v14 = 0;
  }
  v16 = MiniHouseFuritureInfoTab::GetObjByName((char *)(v14 + 2));
  if ( !v16 || !v14 )
    return 0;
  if ( !v16->Grip )
  {
    v17 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    GameFrameWork::AddSysMsg((GameFrameWork *)v17, "ÀÌ°Å °³»Ô ÀâÀ» ¼");
    return 0;
  }
  if ( v6->m_PickedObj )
    MiniHouseIndoor::CancelPickObj(v6);
  if ( MiniHouseIndoor::SetState(v6, NewState) != 1 )
    return 0;
  v6->m_bReadytoCreateObj = bReadytoCreateObj;
  if ( NewState == 3 )
  {
    v6->m_PickedObj = pRootPick;
    v6->m_PickedObj = MiniHouseIndoor::AddScene(v6, pRootPick, &pPickedObj->m_RootName, MH_OBJSCENE_ABSTATE, 1);
    if ( !MiniHouseIndoor::IsPopUpMHItemInvState(v6) )
    {
      v18 = ResElement::GetNiNode(pPickedObj->m_pkResource);
      MiniHouseIndoor::AttachAlphaProp(v6, v18);
    }
    if ( g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] )
    {
      v19 = mhGameMainConnectMgr::GetMainChar(v6->m_GameMainConnectMgr);
      MainChar::SetTargetChar(v19, 0);
    }
  }
  else
  {
    if ( NewState == 5 )
    {
      v20 = *(_WORD *)(g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0] + 548);
      v6->m_PickedCharhWnd = v20;
      if ( !v20 )
        return 0;
      v6->m_PickedObj = MiniHouseIndoor::AddScene(v6, Picked, &mhOtherCharColliRootName_1, MH_OBJSCENE_ABSTATE, 1);
      MiniHouseIndoor::AttachAlphaProp(v6, (NiNode *)Picked);
    }
  }
  if ( v6->m_PickedObj )
  {
    MiniHouseIndoor::MakePickedObjColiNode(v6, NewState);
    Cursor::SetCursor((Cursor::Type)3);
    result = 1;
  }
  else
  {
    v6->m_PickedObj = 0;
    result = 8;
  }
  return result;
}
// 6C87D0: could not find valid save-restore pair for ebx
// 6C87D0: could not find valid save-restore pair for edi
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006C89B0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::Update(MiniHouseIndoor *this, float fTime)
{
  int v2; // ebx@0
  signed int v3; // edi@0
  int v4; // esi@0
  MiniHouseIndoor *v5; // esi@1
  mhGameMainConnectMgr *v6; // eax@1
  mhObject *v7; // eax@2
  mhObject *v8; // edi@2
  MainChar *v9; // eax@4
  float v10; // ecx@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // ecx@8
  bool v12; // zf@9
  NiNode *v13; // eax@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // [sp-1Ch] [bp-34h]@8
  unsigned int v16; // [sp-18h] [bp-30h]@8
  unsigned int v17; // [sp-14h] [bp-2Ch]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v18; // [sp-10h] [bp-28h]@8
  float v19; // [sp+4h] [bp-14h]@15
  signed int v20; // [sp+8h] [bp-10h]@1
  int v21; // [sp+Ch] [bp-Ch]@1
  int v22; // [sp+10h] [bp-8h]@1
  MiniHouseIndoor *v23; // [sp+14h] [bp-4h]@1

  v23 = this;
  v22 = v2;
  v21 = v4;
  v5 = this;
  v6 = this->m_GameMainConnectMgr;
  v20 = v3;
  mhCollisionManager::Update(&this->m_ManagerMediator.m_CollisionManager, fTime, v6);
  MiniHouseRoomInfo::Update(&v5->m_RoomInfo, fTime);
  if ( mhObjectManager::Update(&v5->m_ManagerMediator.m_ObjManager, fTime) == 14 )
  {
    v7 = mhObjectManager::FindDelayedDelObj(&v5->m_ManagerMediator.m_ObjManager);
    v8 = v7;
    if ( v7 )
    {
      MiniHouseIndoor::RemoveObjScene(v5, v7);
      mhObjectManager::RemoveObject(&v5->m_ManagerMediator.m_ObjManager, v8->m_iGUID);
    }
  }
  v9 = mhGameMainConnectMgr::GetMainChar(v5->m_GameMainConnectMgr);
  ((void (__thiscall *)(MainChar *, signed int))v9->baseclass_0.baseclass_0.vfptr[6].Deaffect)(v9, v20);
  if ( !v5->m_bForceArrStateHold )
  {
    if ( mhCollisionManager::m_ColliStyle )
    {
      if ( mhCollisionManager::m_ColliStyle != 1 || !v5->m_PickedObj )
        goto LABEL_15;
      v23 = (MiniHouseIndoor *)&v18;
      v11 = &v18;
      v17 = -1;
      v16 = 0;
      v15 = &mhObjAmbLightMoveNO_0;
    }
    else
    {
      v12 = v5->m_eState == 2;
      v23 = (MiniHouseIndoor *)&v18;
      v11 = &v18;
      v17 = -1;
      v16 = 0;
      if ( v12 )
        v15 = &mhObjAmbLightRepair_0;
      else
        v15 = &mhObjAmbLightMoveOK_0;
    }
    v11->baseclass_0._Myres = 15;
    v11->baseclass_0._Mysize = 0;
    v11->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(v11, v15, v16, v17);
    v13 = v5->m_spAbStateEffScene.m_pObject;
    v23 = (MiniHouseIndoor *)&v17;
    v17 = (unsigned int)v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MiniHouseIndoor::ChangeLight(v5, (NiPointer<NiNode>)v17, v18);
  }
LABEL_15:
  v20 = 1;
  v19 = v10;
  NiAVObject::Update(&v5->m_spRootScene.m_pObject->baseclass_0, fTime, 1);
  return 1;
}
// 6C89B0: could not find valid save-restore pair for ebx
// 6C89B0: could not find valid save-restore pair for edi
// 6C89B0: could not find valid save-restore pair for esi
// B67C88: using guessed type int mhCollisionManager__m_ColliStyle;

//----- (006C8AD0) --------------------------------------------------------
void __thiscall MiniHouseIndoor::UpdateObjCharColiProcess(MiniHouseIndoor *this, NiPoint3 *CharPos)
{
  MiniHouseIndoor *v2; // esi@1
  NiNode *v3; // eax@7
  NiNode *v4; // eax@12
  NiPointer<NiNode> v5; // [sp-20h] [bp-28h]@7
  char v6; // [sp-1Ch] [bp-24h]@7
  int v7; // [sp-Ch] [bp-14h]@7
  signed int v8; // [sp-8h] [bp-10h]@7

  v2 = this;
  if ( !this->m_PickedObj )
  {
    MiniHouseIndoor::MainCharRunAwayFromObj(this, CharPos, &ColiPoint);
    return;
  }
  if ( dword_B67CD4 == 1 )
  {
    if ( MiniHouseIndoor::CheckColiInfoWIthPickedObj(this) == -1 )
    {
      if ( dword_B67CD8 != 1 )
      {
LABEL_10:
        MiniHouseIndoor::MainCharRunAwayFromObj(v2, CharPos, &ColiPoint);
        goto LABEL_11;
      }
      MiniHouseIndoor::MainCharRunAwayFromObj(v2, CharPos, &ColiPoint);
    }
    if ( dword_B67CD8 == 1 )
    {
      v8 = 15;
      v7 = 0;
      v6 = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v6,
        &mhObjAmbLightMoveNO_0,
        0,
        0xFFFFFFFFu);
      v3 = v2->m_spAbStateEffScene.m_pObject;
      v5.m_pObject = v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      MiniHouseIndoor::ChangeLight(v2, v5, *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v6);
      goto LABEL_11;
    }
    goto LABEL_10;
  }
LABEL_11:
  if ( dword_B67CD0 == 1 )
  {
    v8 = 15;
    v7 = 0;
    v6 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v6,
      &mhObjAmbLightMoveNO_0,
      0,
      0xFFFFFFFFu);
    v4 = v2->m_spAbStateEffScene.m_pObject;
    v5.m_pObject = v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MiniHouseIndoor::ChangeLight(v2, v5, *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&v6);
  }
}
// B67CD0: using guessed type int dword_B67CD0;
// B67CD4: using guessed type int dword_B67CD4;
// B67CD8: using guessed type int dword_B67CD8;

//----- (006C8BF0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::Create(MiniHouseIndoor *this, NiPointer<NiNode> spRootScene)
{
  MiniHouseIndoor *v2; // esi@1
  mhReturnType result; // eax@5
  void *v4; // eax@6
  int v5; // eax@7
  NiNode *v6; // edi@9
  PgFrameWork *v7; // eax@18
  NiAVObject *v8; // ecx@19
  char *v9; // eax@21
  int v10; // eax@21
  NiNode *v11; // edi@21
  void *v12; // eax@29
  mhGameMainConnectMgr *v13; // eax@30
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v14; // [sp-2Ch] [bp-3Ch]@17
  int v15; // [sp-1Ch] [bp-2Ch]@17
  NiTexturePalette *v16; // [sp-18h] [bp-28h]@17
  signed int v17; // [sp-14h] [bp-24h]@18
  void *v18; // [sp+0h] [bp-10h]@6
  int v19; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v19 = 0;
  if ( mhResTableManager::Clear(&this->m_ManagerMediator.m_ResTableManager) == 1
    && mhObjectManager::Clear(&v2->m_ManagerMediator.m_ObjManager) == 1 )
    NiCollisionGroup::RemoveAll(&v2->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  memset(&v2->m_BuildingInfo.maxvisiter, 0, 0x85u);
  if ( spRootScene.m_pObject )
  {
    v4 = operator new(0xE8u);
    v18 = v4;
    LOBYTE(v19) = 1;
    if ( v4 )
    {
      NiNode::NiNode((NiNode *)v4, 0);
      v18 = (void *)v5;
    }
    else
    {
      v18 = 0;
      v5 = 0;
    }
    v6 = v2->m_spRootScene.m_pObject;
    LOBYTE(v19) = 0;
    if ( v6 != (NiNode *)v5 )
    {
      if ( v6 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
        v5 = (int)v18;
      }
      v2->m_spRootScene.m_pObject = (NiNode *)v5;
      if ( v5 )
        InterlockedIncrement((volatile LONG *)(v5 + 4));
    }
    ((void (__stdcall *)(NiNode *, _DWORD))spRootScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
      v2->m_spRootScene.m_pObject,
      0);
    v18 = &v14;
    v16 = (NiTexturePalette *)15;
    v15 = 0;
    v14.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v14,
      &mhObjAmbLightMoveOK_0,
      0,
      0xFFFFFFFFu);
    MiniHouseIndoor::AddLight(v2, v14);
    v18 = &v14;
    v16 = (NiTexturePalette *)15;
    v15 = 0;
    v14.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v14,
      &mhObjAmbLightMoveNO_0,
      0,
      0xFFFFFFFFu);
    MiniHouseIndoor::AddLight(v2, v14);
    v18 = &v14;
    v16 = (NiTexturePalette *)15;
    v15 = 0;
    v14.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v14,
      &mhObjAmbLightNormal_0,
      0,
      0xFFFFFFFFu);
    MiniHouseIndoor::AddLight(v2, v14);
    v18 = &v14;
    v16 = (NiTexturePalette *)15;
    v15 = 0;
    v14.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v14,
      &mhObjAmbLightRepair_0,
      0,
      0xFFFFFFFFu);
    MiniHouseIndoor::AddLight(v2, v14);
    if ( v2->m_eState == 2 )
    {
      Cursor::SetCursor(0);
      v17 = 0;
      v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      GameFrameWork::SetInvLockAllItems((GameFrameWork *)v7, v17);
    }
    v8 = (NiAVObject *)v2->m_spRootScene.m_pObject;
    v2->m_eState = 0;
    NiAVObject::UpdateEffects(v8);
    NiAVObject::UpdateProperties(&v2->m_spRootScene.m_pObject->baseclass_0);
    if ( !Folder::m_bInit )
      Folder::Init();
    v17 = 1;
    v16 = 0;
    v9 = Folder::Merge(&Folder::m_acEffect, "FurnitureSelectEffect.nif");
    v10 = (int)PgUtil::LoadNifFile(v9, v16, v17);
    v11 = v2->m_spFocusObjEff.m_pObject;
    v18 = (void *)v10;
    if ( v11 != (NiNode *)v10 )
    {
      if ( v11 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v11 )
          v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
        v10 = (int)v18;
      }
      v2->m_spFocusObjEff.m_pObject = (NiNode *)v10;
      if ( v10 )
        InterlockedIncrement((volatile LONG *)(v10 + 4));
    }
    v12 = operator new(0x10u);
    v18 = v12;
    LOBYTE(v19) = 2;
    if ( v12 )
      mhGameMainConnectMgr::mhGameMainConnectMgr((std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *)v12);
    else
      v13 = 0;
    v2->m_GameMainConnectMgr = v13;
    v19 = -1;
    if ( spRootScene.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spRootScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spRootScene.m_pObject )
        spRootScene.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spRootScene.m_pObject,
          1u);
    }
    result = 1;
  }
  else
  {
    result = 2;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (006C8EB0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::Join(MiniHouseIndoor *this, bool bIsMaster)
{
  MiniHouseIndoor *v2; // esi@1
  NiNode *v3; // eax@10
  NiPointer<NiNode> v5; // [sp+4h] [bp-Ch]@2

  v2 = this;
  this->m_CandidateFocusID = -1;
  if ( bIsMaster == 1 )
  {
    this->m_eAccount = 2;
    MainChar::SetTargetChar((MainChar *)g_pkMainChar, 0);
    v5.m_pObject = (NiNode *)"mhSelectedObj::pkObj == NULL;\n";
    v2->m_FocusObj.m_Object = 0;
    v2->m_FocusObj.m_eInfo = 0;
    OutputDebugStringA((LPCSTR)v5.m_pObject);
    if ( v2->m_eAccount == 2 )
    {
      MiniHouseIndoor::CancelPickObj(v2);
      if ( v2->m_eState == 2 )
        Cursor::SetCursor(0);
    }
    v2->m_eState = 1;
  }
  else
  {
    this->m_eAccount = 1;
    this->m_eState = 1;
  }
  if ( mhResTableManager::Clear(&v2->m_ManagerMediator.m_ResTableManager) == 1
    && mhObjectManager::Clear(&v2->m_ManagerMediator.m_ObjManager) == 1 )
    NiCollisionGroup::RemoveAll(&v2->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  v3 = v2->m_spRootScene.m_pObject;
  v5.m_pObject = v3;
  if ( v3 )
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  MiniHouseIndoor::SetupScene(v2, v5);
  v5.m_pObject = (NiNode *)"mhSelectedObj::pkObj == NULL;\n";
  v2->m_FocusObj.m_Object = 0;
  v2->m_FocusObj.m_eInfo = 0;
  OutputDebugStringA((LPCSTR)v5.m_pObject);
  v5.m_pObject = (NiNode *)1;
  NiAVObject::Update(&v2->m_spNormalScene.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::UpdateEffects(&v2->m_spNormalScene.m_pObject->baseclass_0);
  NiAVObject::UpdateProperties(&v2->m_spNormalScene.m_pObject->baseclass_0);
  return 1;
}

//----- (006C8FD0) --------------------------------------------------------
mhReturnType __thiscall MiniHouseIndoor::Out(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // esi@1
  PgFrameWork *v2; // eax@3
  PgFrameWork *v3; // eax@7
  int v4; // eax@9
  mhObject *v5; // eax@10
  NiNode *v6; // eax@11
  bool v7; // zf@13
  NiPointer<NiNode> v9; // [sp-20h] [bp-2Ch]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v10; // [sp-1Ch] [bp-28h]@11
  int v11; // [sp-Ch] [bp-18h]@11
  signed int v12; // [sp-8h] [bp-14h]@11
  const char *v13; // [sp-4h] [bp-10h]@15
  void *v14; // [sp+8h] [bp-4h]@11

  v1 = this;
  if ( ((int (*)(void))g_pkMainChar->baseclass_0.vfptr[13].GetAbstateColor)() == 4 )
    MainChar::CancelMHEmotion((MainChar *)g_pkMainChar);
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  GameFrameWork::SetCharEmotionUIState((GameFrameWork *)v2, 0);
  ((void (*)(void))g_pkMainChar->baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
  MiniHouseIndoor::CancelPickObj(v1);
  MiniHouseIndoor::ClearScene(v1);
  if ( mhResTableManager::Clear(&v1->m_ManagerMediator.m_ResTableManager) == 1
    && mhObjectManager::Clear(&v1->m_ManagerMediator.m_ObjManager) == 1 )
    NiCollisionGroup::RemoveAll(&v1->m_ManagerMediator.m_CollisionManager.m_pkCollisionGroup);
  if ( v1->m_eState == 2 )
  {
    Cursor::SetCursor(0);
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    GameFrameWork::SetInvLockAllItems((GameFrameWork *)v3, 0);
  }
  v1->m_eState = 0;
  MiniHouseIndoor::CloseAllUis(v1);
  if ( v1->m_bAskReturnToInvState )
  {
    v4 = v1->m_iReturnToInvItemID;
    v1->m_bAskReturnToInvState = 0;
    if ( v4 != -1 )
    {
      v5 = mhObjectManager::GetObjectA(&v1->m_ManagerMediator.m_ObjManager, v4);
      MiniHouseIndoor::SetForceAlphaState(v1, v5, v1->m_bAskReturnToInvState);
    }
  }
  v14 = &v10;
  v12 = 15;
  v11 = 0;
  v10.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v10,
    &mhObjAmbLightMoveOK_0,
    0,
    0xFFFFFFFFu);
  v6 = v1->m_spAbStateEffScene.m_pObject;
  v14 = &v9;
  v9.m_pObject = v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  MiniHouseIndoor::ChangeLight(v1, v9, v10);
  v7 = v1->m_iReturnToInvItemID == -1;
  v1->m_bForceArrStateHold = 0;
  if ( !v7 )
    v1->m_iReturnToInvItemID = -1;
  Inventory::ClearMiniHouseAllItemInv(&g_kInventory);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v1->m_GameMainConnectMgr);
  v13 = "mhSelectedObj::pkObj == NULL;\n";
  v1->m_FocusObj.m_Object = 0;
  v1->m_FocusObj.m_eInfo = 0;
  OutputDebugStringA(v13);
  return 1;
}

//----- (006C9150) --------------------------------------------------------
bool __thiscall mhFocusObj::SetObj(mhFocusObj *this, mhObject *pkObj)
{
  const char *v3; // [sp-4h] [bp-4h]@4

  if ( !pkObj )
  {
    this->m_Object = 0;
    this->m_eInfo = 0;
    OutputDebugStringA("mhSelectedObj::pkObj == NULL;\n");
    return 0;
  }
  if ( this->m_Object )
  {
    if ( pkObj->m_iGUID == this->m_Object->m_iGUID )
    {
      this->m_eInfo = 2;
      OutputDebugStringA("mhSelectedObj::pkObj = m_Object DBLClick;\n");
      return 1;
    }
    v3 = "mhSelectedObj::pkObj Change = m_Object FirstClick;\n";
  }
  else
  {
    v3 = "mhSelectedObj::pkObj NULL= m_Object FirstClick;\n";
  }
  this->m_Object = pkObj;
  this->m_eInfo = 1;
  OutputDebugStringA(v3);
  return 1;
}

//----- (006C91C0) --------------------------------------------------------
void __thiscall Party::Party(Party *this, Party *__that)
{
  this->vfptr = (PartyVtbl *)&Party::_vftable_;
  *(_QWORD *)&this->m_kPartyMasterID.n5_name[0] = *(_QWORD *)&__that->m_kPartyMasterID.n5_name[0];
  *(_QWORD *)&this->m_kPartyMasterID.n5_name[8] = *(_QWORD *)&__that->m_kPartyMasterID.n5_name[8];
  *(_DWORD *)&this->m_kPartyMasterID.n5_name[16] = *(_DWORD *)&__that->m_kPartyMasterID.n5_name[16];
  *(_QWORD *)&this->m_kLooterID.n5_name[0] = *(_QWORD *)&__that->m_kLooterID.n5_name[0];
  *(_QWORD *)&this->m_kLooterID.n5_name[8] = *(_QWORD *)&__that->m_kLooterID.n5_name[8];
  *(_DWORD *)&this->m_kLooterID.n5_name[16] = *(_DWORD *)&__that->m_kLooterID.n5_name[16];
  this->m_iBelongType = __that->m_iBelongType;
  this->m_eLootType = __that->m_eLootType;
  this->m_eItemType = __that->m_eItemType;
  this->m_bDuringJoinPropose = __that->m_bDuringJoinPropose;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[0] = *(_QWORD *)&__that->m_kJoinProposeCharID.n5_name[0];
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[8] = *(_QWORD *)&__that->m_kJoinProposeCharID.n5_name[8];
  *(_DWORD *)&this->m_kJoinProposeCharID.n5_name[16] = *(_DWORD *)&__that->m_kJoinProposeCharID.n5_name[16];
  this->m_fJoinProposeStartTime = __that->m_fJoinProposeStartTime;
  this->m_uiTotalMember = __that->m_uiTotalMember;
  memcpy(this->m_akMemberInfo, __that->m_akMemberInfo, 0x155u);
  this->m_eLootingType = __that->m_eLootingType;
}
// 9C8B24: using guessed type int (__thiscall *Party___vftable_)(void *p, char);

//----- (006C9280) --------------------------------------------------------
unsigned int __cdecl ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E10: using guessed type int ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable___ms_pkTable;

//----- (006C92A0) --------------------------------------------------------
void __thiscall ResElement::ReleaseResElement(ResElement *this)
{
  ResElement *v1; // esi@1
  NiActorManager *v2; // edi@3
  NiNode *v3; // ecx@9
  NiNode *v4; // edi@10

  v1 = this;
  if ( this->m_bIsCanAnimation && this->m_pActorMgr.m_pObject )
  {
    v2 = this->m_pActorMgr.m_pObject;
    if ( v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) )
      {
        if ( v2 )
          v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
      }
      v1->m_pActorMgr.m_pObject = 0;
    }
    v1->m_bIsCanAnimation = 0;
  }
  else
  {
    v3 = this->m_pNiNode.m_pObject;
    if ( v3 )
    {
      NiNode::DetachAllEffects(v3);
      NiAVObject::DetachAllProperties(&v1->m_pNiNode.m_pObject->baseclass_0);
      v4 = v1->m_pNiNode.m_pObject;
      if ( v4 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
        v1->m_pNiNode.m_pObject = 0;
      }
    }
  }
}

//----- (006C9330) --------------------------------------------------------
void __thiscall MiniHouseIndoor::ClearObjEffMsg(MiniHouseIndoor *this)
{
  MiniHouseIndoor *v1; // edi@1
  MsgBox *v2; // esi@1

  v1 = this;
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_spObjEffMsg.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_spObjEffMsg.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v2,
          1u);
    }
    v1->m_spObjEffMsg.m_pObject = 0;
  }
}

//----- (006C9380) --------------------------------------------------------
Party *__thiscall mhGameMainConnectMgr::GetMyParty(mhGameMainConnectMgr *this, Party *result)
{
  Party::Party(result, &g_kParty);
  return result;
}

//----- (006C93B0) --------------------------------------------------------
MiniHouseFurnitureObjEffect *__cdecl MHFurnitureObjEffectTab::GetbyHandle(unsigned __int16 wHandle)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  MiniHouseFurnitureObjEffect *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( *(_WORD *)CDataReader::GetRecord(
                        (CDataReader *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 4),
                        v3) != wHandle )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (MiniHouseFurnitureObjEffect *)CDataReader::GetRecord(
                                              (CDataReader *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable
                                                            + 4),
                                              v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97E08: using guessed type int ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab___ms_pkTable;

//----- (006C9410) --------------------------------------------------------
MiniHouseFurnitureObjEffect *__cdecl MHFurnitureObjEffectTab::GetInxName(char *acName)
{
  int v1; // eax@1
  unsigned int v2; // edi@2
  unsigned int v3; // esi@4
  void *v4; // eax@5
  MiniHouseFurnitureObjEffect *result; // eax@7

  v1 = *(_DWORD *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 56);
  if ( v1 )
    v2 = *(_DWORD *)(v1 + 40);
  else
    v2 = 0;
  v3 = 0;
  if ( v2 )
  {
    while ( 1 )
    {
      v4 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable + 4),
             v3);
      if ( !_mbscmp((const char *)v4 + 2, acName) )
        break;
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_7;
    }
    result = (MiniHouseFurnitureObjEffect *)CDataReader::GetRecord(
                                              (CDataReader *)(ITableBase<MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab>::ms_pkTable
                                                            + 4),
                                              v3);
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}
// A97E08: using guessed type int ITableBase_MiniHouseFurnitureObjEffect_MHFurnitureObjEffectTab___ms_pkTable;

//----- (006C9480) --------------------------------------------------------
MiniHouseEndure *__cdecl MiniHouseEndureInfoTable::GetByHandle(unsigned __int16 wHandle)
{
  unsigned int v1; // esi@1
  MiniHouseEndure *result; // eax@2

  v1 = 0;
  if ( ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::GetTotal() )
  {
    while ( 1 )
    {
      result = (MiniHouseEndure *)CDataReader::GetRecord(
                                    (CDataReader *)(ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::ms_pkTable + 4),
                                    v1);
      if ( result->Handle == wHandle )
        break;
      ++v1;
      if ( v1 >= ITableBase<MiniHouseEndure_MiniHouseEndureInfoTable>::GetTotal() )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}
// A97E10: using guessed type int ITableBase_MiniHouseEndure_MiniHouseEndureInfoTable___ms_pkTable;

//----- (006C94C0) --------------------------------------------------------
MHEmotion *__cdecl MiniHouseEmotionTab::GetEmotion(unsigned __int16 MHEmotionID, int ActionIndex)
{
  unsigned int v2; // esi@1
  MHEmotion *result; // eax@2

  v2 = 0;
  if ( ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() )
  {
    while ( 1 )
    {
      result = (MHEmotion *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 4),
                              v2);
      if ( result->MHEmotionID == MHEmotionID )
      {
        if ( result->ActionIndex == ActionIndex )
          break;
      }
      ++v2;
      if ( v2 >= ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}
// A97E18: using guessed type int ITableBase_MHEmotion_MiniHouseEmotionTab___ms_pkTable;

//----- (006C9510) --------------------------------------------------------
void __thiscall ResElement::ResElement(ResElement *this)
{
  this->vfptr = (ResElementVtbl *)&ResElement::_vftable_;
  this->m_pNiNode.m_pObject = 0;
  this->m_pActorMgr.m_pObject = 0;
  this->m_bIsCanAnimation = 0;
  this->m_FileName.baseclass_0._Myres = 15;
  this->m_FileName.baseclass_0._Mysize = 0;
  this->m_FileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}
// 9C9924: using guessed type int (__thiscall *ResElement___vftable_)(void *p, char);

//----- (006C9540) --------------------------------------------------------
void __thiscall ResElement::_ResElement(ResElement *this)
{
  ResElement *v1; // esi@1
  NiActorManager *v2; // edi@3
  NiNode *v3; // esi@7

  v1 = this;
  this->vfptr = (ResElementVtbl *)&ResElement::_vftable_;
  ResElement::ReleaseResElement(this);
  if ( v1->m_FileName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_FileName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_FileName.baseclass_0._Myres = 15;
  v1->m_FileName.baseclass_0._Mysize = 0;
  v1->m_FileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2 = v1->m_pActorMgr.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_pNiNode.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}
// 9C9924: using guessed type int (__thiscall *ResElement___vftable_)(void *p, char);

//----- (006C9610) --------------------------------------------------------
void *__thiscall ResElement::_vector_deleting_destructor_(ResElement *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ResElement::_ResElement(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006C9640) --------------------------------------------------------
void __thiscall mhResTableElement::mhResTableElement(mhResTableElement *this)
{
  this->baseclass_0.m_pNiNode.m_pObject = 0;
  this->baseclass_0.m_pActorMgr.m_pObject = 0;
  this->baseclass_0.m_bIsCanAnimation = 0;
  this->baseclass_0.m_FileName.baseclass_0._Mysize = 0;
  this->baseclass_0.m_FileName.baseclass_0._Myres = 15;
  this->baseclass_0.m_FileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_eBindType = 0;
  this->m_eAction = 0;
  this->m_iWeight = 0;
  this->m_iLoadingWeight = 0;
  this->baseclass_0.vfptr = (ResElementVtbl *)&mhResTableElement::_vftable_;
  this->m_ElementID = -1;
  this->m_iTexID = -1;
}
// 9C992C: using guessed type int (__thiscall *mhResTableElement___vftable_)(void *p, char);

//----- (006C9680) --------------------------------------------------------
void *__thiscall mhResTableElement::_vector_deleting_destructor_(mhResTableElement *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  mhResTableElement::_mhResTableElement(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006C96B0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *result, const unsigned __int16 *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= *_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || *_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (006C9720) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const unsigned __int16 v10; // di@2
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
                          (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v5,
                          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&_Leftish,
                          1,
                          v8,
                          (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( LOWORD(v11->_Myval) >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
                        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v5,
                        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v4)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (006C9800) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Insert(...)
{
  std::_Tree<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)this,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)result,
      1,
      (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v5,
      (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < *(_WORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)this,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)this,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v8,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= *(_WORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( *(_WORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >,bool> *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 17) )
    {
      std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)result,
        0,
        *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)result,
        1,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v4,
        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (006C9970) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_char>>(std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *this, std::pair<unsigned short const ,unsigned char> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *result; // eax@1
  std::pair<unsigned short const ,unsigned char> *v4; // esi@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)operator new(0x14u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006C99E0) --------------------------------------------------------
char *__thiscall std::map<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>>::operator__(std::map<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> > > *this, const unsigned __int16 *_Keyval)
{
  std::map<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> > > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > v5; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *v6; // eax@8
  char *result; // eax@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 17) )
  {
    if ( *(_WORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= *(_WORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (char *)(*(_DWORD *)&v5 + 14);
  }
  else
  {
    LOWORD(_Keyval) = *_Keyval;
    BYTE2(_Keyval) = 0;
    v6 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_char>>(
           &v2->baseclass_0.baseclass_0,
           (std::pair<unsigned short const ,unsigned char> *)&_Keyval);
    std::_Tree<std::_Tmap_traits<unsigned_short_unsigned_char_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_char>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned char,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned char> >,0> > > *)&_Keyval,
      v5,
      v6);
    result = (char *)(_Keyval + 7);
  }
  return result;
}

//----- (006C9A60) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::mhGameMainConnectMgr(std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *this)
{
  std::map<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > > > *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+4h] [bp-10h]@3
  char *_What; // [sp+10h] [bp-4h]@3

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006C9AD0) --------------------------------------------------------
tagPOINT __thiscall mhGameMainConnectMgr::GetMousePos(mhGameMainConnectMgr *this)
{
  tagPOINT result; // qax@1
  unsigned int v2; // [sp+8h] [bp+8h]@0

  result = (tagPOINT)__PAIR__(PgWin::ms_iMsY, v2);
  *(_DWORD *)v2 = PgWin::ms_iMsX.x;
  *(_DWORD *)(v2 + 4) = result.y;
  return result;
}

//----- (006C9AF0) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::SendObjEffReq(mhGameMainConnectMgr *this, unsigned __int16 nFurniturehWnd, unsigned __int16 nEffHandle)
{
  unsigned __int16 v3; // ax@1

  v3 = nEffHandle;
  nEffHandle = nFurniturehWnd;
  *(&nEffHandle + 1) = v3;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x40u, &nEffHandle, 4);
}

//----- (006C9B20) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::SendCreateObjReq(mhGameMainConnectMgr *this, int iGUID, float fAngle, NiPoint3 *TargetPos)
{
  char kProtoDummy[256]; // [sp+0h] [bp-104h]@1
  unsigned int v5; // [sp+100h] [bp-4h]@1
  int v6; // [sp+104h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  memset(&kProtoDummy[1], 0, 0xFFu);
  *(float *)&kProtoDummy[15] = fAngle;
  *(float *)&kProtoDummy[3] = TargetPos->x;
  *(float *)&kProtoDummy[7] = TargetPos->y;
  *(float *)&kProtoDummy[11] = TargetPos->z;
  *(_WORD *)&kProtoDummy[1] = iGUID;
  kProtoDummy[0] = 1;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x22u, kProtoDummy, 22);
}
// A85C00: using guessed type int __security_cookie;

//----- (006C9BB0) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::SendDecorateModeReq(mhGameMainConnectMgr *this, mhState NowState)
{
  if ( NowState )
  {
    if ( NowState != 1 )
    {
      BYTE3(NowState) = 0;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x1Au, (char *)&NowState + 3, 1);
    }
  }
}

//----- (006C9BE0) --------------------------------------------------------
MainChar *__thiscall mhGameMainConnectMgr::GetMainChar(mhGameMainConnectMgr *this)
{
  return (MainChar *)g_pkMainChar;
}

//----- (006C9BF0) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::SendRearRangeReq(mhGameMainConnectMgr *this, int GUID, float fAngle, NiPoint3 *TargetPos)
{
  char kProtoDummy[256]; // [sp+0h] [bp-104h]@1
  unsigned int v5; // [sp+100h] [bp-4h]@1
  int v6; // [sp+104h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  memset(&kProtoDummy[1], 0, 0xFFu);
  *(float *)&kProtoDummy[3] = TargetPos->x;
  *(float *)&kProtoDummy[7] = TargetPos->y;
  *(float *)&kProtoDummy[11] = TargetPos->z;
  *(_WORD *)&kProtoDummy[1] = GUID;
  *(float *)&kProtoDummy[15] = fAngle;
  kProtoDummy[0] = 1;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x1Fu, kProtoDummy, 22);
}
// A85C00: using guessed type int __security_cookie;

//----- (006C9C80) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::SendMainCharPosReq(mhGameMainConnectMgr *this)
{
  int v1; // eax@1
  float v2; // ST18_4@1
  float v3; // ST1C_4@1
  NiPoint3 *v4; // eax@1
  float v5; // ST14_4@1
  float v6; // ST0C_4@1
  float v7; // ST10_4@1
  unsigned __int16 v8; // [sp-8h] [bp-40h]@2
  void *v9; // [sp-4h] [bp-3Ch]@2
  int kRevPos; // [sp+0h] [bp-38h]@0
  PROTO_NC_ACT_WALK_REQ kProto; // [sp+24h] [bp-14h]@1
  unsigned int v12; // [sp+34h] [bp-4h]@1
  int v13; // [sp+38h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v1 = ((int (__stdcall *)(int))g_pkMainChar->baseclass_0.vfptr[6].Deaffect)(kRevPos);
  LODWORD(v2) = *(_DWORD *)v1;
  LODWORD(v3) = *(_DWORD *)(v1 + 4);
  v4 = MainChar::GetRevserveMovePos((MainChar *)g_pkMainChar);
  v5 = v4->z;
  v6 = v4->x;
  v7 = v4->y;
  kProto.from.x = (signed __int64)v2;
  kProto.from.y = (signed __int64)v3;
  kProto.to.x = (signed __int64)v6;
  kProto.to.y = (signed __int64)v7;
  if ( ((int (__cdecl *)(_DWORD, _DWORD))g_pkMainChar->baseclass_0.vfptr[7].Affect)(LODWORD(v7), LODWORD(v5)) )
  {
    v9 = &kProto;
    v8 = 25;
  }
  else
  {
    v9 = &kProto;
    v8 = 23;
  }
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, v8, v9, 16);
}
// A85C00: using guessed type int __security_cookie;

//----- (006C9D90) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::SendDelObjReq(mhGameMainConnectMgr *this, int iGUID)
{
  char kProtoDummy[128]; // [sp+0h] [bp-84h]@1
  unsigned int v3; // [sp+80h] [bp-4h]@1
  int v4; // [sp+84h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  memset(&kProtoDummy[1], 0, 0x7Fu);
  *(_WORD *)&kProtoDummy[1] = iGUID;
  kProtoDummy[0] = 1;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x25u, kProtoDummy, 6);
}
// A85C00: using guessed type int __security_cookie;

//----- (006C9DF0) --------------------------------------------------------
bool __thiscall mhGameMainConnectMgr::SendCompulsionMovetoChar(mhGameMainConnectMgr *this, unsigned __int16 CharhWnd, NiPoint3 *kMovePos)
{
  bool result; // al@2
  PROTO_NC_MINIHOUSE_COMPULSIONMOVETO_REQ kProto; // [sp+10h] [bp-10h]@1
  unsigned int v5; // [sp+1Ch] [bp-4h]@1
  int v6; // [sp+20h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  kProto.hnd = CharhWnd;
  if ( CharMgr::GetChar(&g_kCharMgr, CharhWnd) )
  {
    kProto.location.x = (signed __int64)kMovePos->x;
    kProto.location.y = (signed __int64)kMovePos->y;
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x28u, &kProto, 10);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006C9EA0) --------------------------------------------------------
void __thiscall mhGameMainConnectMgr::SendObjActReq(mhGameMainConnectMgr *this, unsigned __int16 handle, unsigned __int16 nFurniturehWnd)
{
  mhGameMainConnectMgr *v3; // esi@1
  unsigned int v4; // edi@1
  unsigned int v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v6; // eax@4
  std::pair<unsigned short const ,unsigned long> _Val; // [sp+Ch] [bp-Ch]@1
  PROTO_NC_MINIHOUSE_CHAR_ACTION_REQ Proto; // [sp+14h] [bp-4h]@5

  v3 = this;
  v4 = timeGetTime();
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *)v3,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&_Val.baseclass_0.second,
    &nFurniturehWnd);
  v5 = _Val.baseclass_0.second;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *)_Val.baseclass_0.second == v3->m_mapSendPacketInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    _Val.baseclass_0.first = nFurniturehWnd;
    _Val.baseclass_0.second = v4;
    v6 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
           &v3->m_mapSendPacketInfo.baseclass_0.baseclass_0,
           &_Val);
    std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
      &v3->m_mapSendPacketInfo.baseclass_0,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
      v6,
      0);
  }
  else
  {
    if ( v4 <= *(_DWORD *)(_Val.baseclass_0.second + 16) + 1500 )
      return;
  }
  Proto.nFurnitureHnd = nFurniturehWnd;
  Proto.Handle = handle;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x23u, 0x3Du, &Proto, 4);
  *(_DWORD *)(v5 + 16) = v4;
}

//----- (006C9F30) --------------------------------------------------------
void __thiscall stMINIHOUSEINFO::Clear(stMINIHOUSEINFO *this)
{
  this->handle = -1;
  this->pkNode = 0;
  *(_DWORD *)&this->camp.minihouse = 0;
  *(_DWORD *)&this->camp.dummy[2] = 0;
  *(_DWORD *)&this->camp.dummy[6] = 0;
  *(_QWORD *)&this->charid.n5_name[0] = 0i64;
  *(_QWORD *)&this->charid.n5_name[8] = 0i64;
  *(_DWORD *)&this->charid.n5_name[16] = 0;
  *(_DWORD *)&this->title[0] = 0;
  *(_DWORD *)&this->title[4] = 0;
  *(_DWORD *)&this->title[8] = 0;
  *(_DWORD *)&this->title[12] = 0;
  *(_DWORD *)&this->title[16] = 0;
  this->title[20] = 0;
}

//----- (006C9F80) --------------------------------------------------------
void __thiscall CMiniHouseMgr::RemoveAll(CMiniHouseMgr *this, bool detachScene)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v2; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v3; // esi@1
  stMINIHOUSEINFO *v4; // edi@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v5; // eax@7
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *j; // eax@8
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *i; // eax@11
  CMiniHouseMgr *v8; // [sp+8h] [bp-4h]@1

  v2 = this->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  v8 = this;
  if ( v2->_Left != v2 )
  {
    do
    {
      v4 = v3->_Myval.baseclass_0.second;
      if ( detachScene == 1 )
        World::DetachMiniHouse(&g_kWorld, v4->pkNode);
      if ( v4 )
        operator delete(v4);
      if ( !v3->_Isnil )
      {
        v5 = v3->_Right;
        if ( v5->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v2 );
    this = v8;
  }
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)this);
}

//----- (006CA010) --------------------------------------------------------
unsigned __int16 __thiscall CMiniHouseMgr::GetMiniHouseHandleByNodePtr(CMiniHouseMgr *this, NiNode *pkNode)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v2; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v3; // ecx@1
  stMINIHOUSEINFO *v4; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *v5; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *j; // eax@6
  std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *i; // eax@9
  unsigned __int16 result; // ax@14

  v2 = this->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  if ( v2->_Left == v2 )
  {
LABEL_14:
    result = -1;
  }
  else
  {
    while ( 1 )
    {
      v4 = v3->_Myval.baseclass_0.second;
      if ( v4 )
      {
        if ( v4->pkNode == pkNode )
          break;
      }
      if ( !v3->_Isnil )
      {
        v5 = v3->_Right;
        if ( v5->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
      if ( v3 == v2 )
        goto LABEL_14;
    }
    result = v4->handle;
  }
  return result;
}

//----- (006CA090) --------------------------------------------------------
void __thiscall CMiniHouseMgr::Terminate(CMiniHouseMgr *this)
{
  CMiniHouseMgr::RemoveAll(this, 0);
}

//----- (006CA0A0) --------------------------------------------------------
bool __thiscall CMiniHouseMgr::Remove(CMiniHouseMgr *this, unsigned __int16 kHandle)
{
  CMiniHouseMgr *v2; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // ebx@1
  int v4; // esi@2
  bool result; // al@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > iter; // [sp+8h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    &this->m_mapInfo.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&iter,
    &kHandle);
  v3 = iter;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *)iter == v2->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    result = 0;
  }
  else
  {
    v4 = *(_DWORD *)(*(_DWORD *)&iter + 16);
    World::DetachMiniHouse(&g_kWorld, *(NiNode **)(v4 + 36));
    operator delete((void *)v4);
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v2,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&kHandle,
      v3);
    result = 1;
  }
  return result;
}

//----- (006CA100) --------------------------------------------------------
void __thiscall CMiniHouseMgr::_CMiniHouseMgr(CMiniHouseMgr *this)
{
  CMiniHouseMgr *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-14h]@1
  CMiniHouseMgr *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)this->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)this,
    &result,
    v3,
    v2);
  operator delete(v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (006CA160) --------------------------------------------------------
bool __thiscall CMiniHouseMgr::AddInfo(CMiniHouseMgr *this, PROTO_NC_BRIEFINFO_MINIHOUSEBUILD_CMD *p)
{
  CMiniHouseMgr *v2; // edi@1
  bool result; // al@2
  NiNode *v4; // eax@3
  NiNode *v5; // ebx@3
  CarToonShader *v6; // eax@5
  CarToonShader *v7; // eax@6
  void *v8; // edi@9
  char *v9; // eax@10
  char v10; // dl@11
  unsigned __int16 v11; // ax@12
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v12; // eax@12
  float v13; // ST04_4@12
  float v14; // ST00_4@12
  NiNode *v15; // [sp+8h] [bp-50h]@4
  NiPoint3 kPos; // [sp+18h] [bp-40h]@12
  std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *thisa; // [sp+24h] [bp-34h]@1
  std::pair<unsigned short const ,unsigned long> _Val; // [sp+28h] [bp-30h]@7
  NiMatrix3 rot; // [sp+30h] [bp-28h]@12
  unsigned int v20; // [sp+54h] [bp-4h]@1
  int v21; // [sp+58h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  thisa = (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)this;
  if ( p->handle == -1 )
  {
    result = 0;
  }
  else
  {
    v4 = CharResMgr::GetHouse(&g_kCharResMgr, p->camp.minihouse);
    v5 = v4;
    if ( !v4 )
      goto LABEL_16;
    v15 = v4;
    if ( MachineOpt::ms_kGraphicOption.bViewOutLine )
    {
      v6 = CarToonShader::GetInstance();
      CarToonShader::SetCartoonShader(v6, v15);
    }
    else
    {
      v7 = CarToonShader::GetInstance();
      CarToonShader::SetExceptOutLineCartoonShader(v7, v15);
    }
    std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
      &v2->m_mapInfo.baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&_Val.baseclass_0.second,
      &p->handle);
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *)_Val.baseclass_0.second != v2->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
      CMiniHouseMgr::Remove(v2, p->handle);
    v8 = operator new(0x40u);
    if ( v8 )
    {
      *(_DWORD *)((char *)v8 + 30) = 0;
      *(_DWORD *)((char *)v8 + 26) = 0;
      *(_DWORD *)((char *)v8 + 22) = 0;
      *(_DWORD *)((char *)v8 + 18) = 0;
      *(_DWORD *)((char *)v8 + 14) = 0;
      stMINIHOUSEINFO::Clear((stMINIHOUSEINFO *)v8);
      *(_WORD *)v8 = p->handle;
      *(_QWORD *)((char *)v8 + 14) = *(_QWORD *)&p->charid.n5_name[0];
      *(_QWORD *)((char *)v8 + 22) = *(_QWORD *)&p->charid.n5_name[8];
      *(_DWORD *)((char *)v8 + 30) = *(_DWORD *)&p->charid.n5_name[16];
      *(_DWORD *)((char *)v8 + 2) = *(_DWORD *)&p->camp.minihouse;
      *(_DWORD *)((char *)v8 + 6) = *(_DWORD *)&p->camp.dummy[2];
      *(_DWORD *)((char *)v8 + 10) = *(_DWORD *)&p->camp.dummy[6];
      v9 = p->title;
      _Val.baseclass_0.second = (unsigned int)&p->title[1];
      do
        v10 = *v9++;
      while ( v10 );
      strncpy((char *)v8 + 40, p->title, (unsigned int)&v9[-_Val.baseclass_0.second]);
      NiObjectNET::SetName(
        &v5->baseclass_0.baseclass_0,
        *(const char **)&thisa[1].baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
      *((_DWORD *)v8 + 9) = v5;
      v11 = p->handle;
      _Val.baseclass_0.second = (unsigned int)v8;
      _Val.baseclass_0.first = v11;
      v12 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
              thisa,
              &_Val);
      std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)thisa,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&_Val,
        v12,
        0);
      v14 = (double)p->coord.xy.x;
      v13 = (double)p->coord.xy.y;
      World::GetAdvGroundPos(&g_kWorld, v14, v13, &kPos);
      LODWORD(v5->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)kPos.x;
      v5->baseclass_0.m_kLocal.m_Translate.y = kPos.y;
      v5->baseclass_0.m_kLocal.m_Translate.z = kPos.z;
      _Val.baseclass_0.second = ((unsigned int)p->coord.dir + 90) % 0xB4;
      *(float *)&_Val.baseclass_0.second = (double)(signed int)_Val.baseclass_0.second * (NI_PI + NI_PI) / 180.0;
      NiMatrix3::MakeIdentity(&rot);
      NiMatrix3::MakeZRotation(&rot, *(float *)&_Val.baseclass_0.second);
      memcpy(&v5->baseclass_0.m_kLocal, &rot, 0x24u);
      World::AttachMiniHouse(&g_kWorld, v5);
      result = 1;
    }
    else
    {
LABEL_16:
      result = 0;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (006CA390) --------------------------------------------------------
void __thiscall CMiniHouseMgr::CMiniHouseMgr(CMiniHouseMgr *this)
{
  CMiniHouseMgr *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+4h] [bp-10h]@3
  char *_What; // [sp+10h] [bp-4h]@3

  v1 = this;
  this->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_pcRootNodeName = "_MiniHouse_Node_";
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006CA410) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *result, bool _Addleft, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Wherenode, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Newnode)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v6; // edi@4
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v7; // edx@4
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v8; // edx@7
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v9; // edx@9
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v11; // edx@12
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v12; // esi@12
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v13; // esi@13
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v14; // edx@16
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v15; // esi@18
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v16; // esi@20
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v17; // edx@24
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v18; // esi@24
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v19; // edi@24
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v20; // edi@26
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v21; // edi@28
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v22; // esi@31
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v23; // edx@34
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v24; // esi@34
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v25; // esi@36
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v26; // esi@38
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v27; // edi@44
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v28; // edi@46
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v29; // ecx@52
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *v30; // eax@52

  v5 = this->baseclass_0.baseclass_0._Mysize;
  if ( v5 >= 0x1FFFFFFE )
  {
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  this->baseclass_0.baseclass_0._Mysize = v5 + 1;
  v6 = _Newnode;
  _Newnode->_Parent = _Wherenode;
  v7 = this->baseclass_0.baseclass_0._Myhead;
  if ( _Wherenode == v7 )
  {
    v7->_Parent = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Left = _Newnode;
    this->baseclass_0.baseclass_0._Myhead->_Right = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v8->_Left )
        v8->_Left = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = this->baseclass_0.baseclass_0._Myhead;
      if ( _Wherenode == v9->_Right )
        v9->_Right = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v15->_Parent )
          {
            v15->_Parent = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v20->_Parent )
        {
          v20->_Parent = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_50:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = this->baseclass_0.baseclass_0._Myhead;
          if ( v10 == v25->_Parent )
          {
            v25->_Parent = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = this->baseclass_0.baseclass_0._Myhead;
        if ( v17 == v27->_Parent )
        {
          v27->_Parent = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_50;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = this->baseclass_0.baseclass_0._Myhead->_Parent;
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  v29->_Color = 1;
  return v30;
}

//----- (006CA640) --------------------------------------------------------
mhReturnType __thiscall mhManagerMediator::Create(mhManagerMediator *this, NiNode *RootCollider)
{
  mhCollisionManager::Create(&this->m_CollisionManager, RootCollider);
  return 1;
}

//----- (006CA660) --------------------------------------------------------
bool __thiscall mhObjectManager::IsRootNiNodeName(mhObjectManager *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *TestName)
{
  return 0;
}

//----- (006CA670) --------------------------------------------------------
mhReturnType __thiscall mhObject::SetTexture(mhObject *this, int iTexID)
{
  return 1;
}

//----- (006CA680) --------------------------------------------------------
const int __thiscall mhObject::SetParentGUID(mhObject *this, int iNewParentGUID)
{
  const int result; // eax@1

  result = iNewParentGUID;
  this->m_iParentGUID = iNewParentGUID;
  return result;
}

//----- (006CA690) --------------------------------------------------------
mhReturnType __thiscall mhObject::SetAct(mhObject *this, unsigned __int16 handle, unsigned __int16 nexthandle)
{
  ResElement *v3; // eax@1
  NiActorManager *v4; // eax@5

  v3 = this->m_pkResource;
  return v3
      && v3->m_bIsCanAnimation
      && v3->m_pActorMgr.m_pObject
      && (v3->m_bIsCanAnimation ? (v4 = v3->m_pActorMgr.m_pObject) : (v4 = 0),
          mhObjAniActor::SetAct(&this->m_AniActor, handle, nexthandle, v4));
}

//----- (006CA6E0) --------------------------------------------------------
mhReturnType __thiscall mhObject::SetPos(mhObject *this, NiPoint3 *NewPos)
{
  ResElement *v2; // eax@1
  NiActorManager *v3; // edx@2
  NiNode *v4; // eax@3
  ResElement *v5; // eax@5
  NiActorManager *v6; // ecx@6
  NiAVObject *v7; // ecx@7

  v2 = this->m_pkResource;
  if ( v2->m_bIsCanAnimation && (v3 = v2->m_pActorMgr.m_pObject) != 0 )
    v4 = (NiNode *)v3->m_spNIFRoot.m_pObject;
  else
    v4 = v2->m_pNiNode.m_pObject;
  v4->baseclass_0.m_kLocal.m_Translate.x = NewPos->x;
  v4->baseclass_0.m_kLocal.m_Translate.y = NewPos->y;
  v4->baseclass_0.m_kLocal.m_Translate.z = NewPos->z;
  v5 = this->m_pkResource;
  if ( v5->m_bIsCanAnimation && (v6 = v5->m_pActorMgr.m_pObject) != 0 )
    v7 = v6->m_spNIFRoot.m_pObject;
  else
    v7 = (NiAVObject *)v5->m_pNiNode.m_pObject;
  NiAVObject::Update(v7, 0.0, 1);
  return 1;
}

//----- (006CA740) --------------------------------------------------------
int __thiscall mhObject::Update(mhObject *this, float ftime)
{
  ResElement *v2; // eax@1
  int result; // eax@2

  v2 = this->m_pkResource;
  if ( v2->m_bIsCanAnimation )
    result = ((int (__stdcall *)(_DWORD, _DWORD))this->m_AniActor.baseclass_0.vfptr->update)(
               LODWORD(ftime),
               v2->m_pActorMgr.m_pObject) != 10002 ? 1 : 10002;
  else
    result = 0;
  return result;
}

//----- (006CA780) --------------------------------------------------------
mhReturnType __thiscall mhObject::SetRotAngle(mhObject *this, float fAngle)
{
  mhObject *v2; // ebx@1
  ResElement *v3; // eax@1
  NiActorManager *v4; // ecx@2
  NiNode *v5; // eax@3
  ResElement *v6; // eax@5
  NiActorManager *v7; // ecx@6
  NiAVObject *v8; // ecx@7
  NiMatrix3 rot; // [sp+10h] [bp-28h]@1
  unsigned int v11; // [sp+34h] [bp-4h]@1
  int v12; // [sp+38h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  NiMatrix3::MakeIdentity(&rot);
  NiMatrix3::MakeZRotation(&rot, fAngle);
  v3 = v2->m_pkResource;
  if ( v3->m_bIsCanAnimation && (v4 = v3->m_pActorMgr.m_pObject) != 0 )
    v5 = (NiNode *)v4->m_spNIFRoot.m_pObject;
  else
    v5 = v3->m_pNiNode.m_pObject;
  memcpy(&v5->baseclass_0.m_kLocal, &rot, 0x24u);
  v6 = v2->m_pkResource;
  if ( v6->m_bIsCanAnimation && (v7 = v6->m_pActorMgr.m_pObject) != 0 )
    v8 = v7->m_spNIFRoot.m_pObject;
  else
    v8 = (NiAVObject *)v6->m_pNiNode.m_pObject;
  NiAVObject::Update(v8, 0.0, 1);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006CA810) --------------------------------------------------------
void __thiscall mhObject::ColiAct(mhObject *this)
{
  int v1; // esi@1
  mhObject *v2; // ebx@1
  int v3; // edi@1
  int v4; // ecx@3
  unsigned __int16 *v5; // eax@4
  MiniHouseObjAni *v6; // eax@5

  v1 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v2 = this;
  v3 = LOWORD(this->m_iResGUID);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          LOWORD(this->m_iResGUID)) )
  {
    if ( (unsigned __int16)v3 <= *(_WORD *)(v1 + 200) )
    {
      v4 = *(_DWORD *)(v1 + 196);
      if ( *(_DWORD *)(v4 + 4 * v3) )
      {
        v5 = *(unsigned __int16 **)(v4 + 4 * v3);
        if ( v5 )
        {
          v6 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(*v5, 0xC350u, 0);
          if ( v6 )
            mhObject::SetAct(v2, v6->Handle, v6->NextAniHandle);
        }
      }
    }
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006CA880) --------------------------------------------------------
bool __thiscall mhObject::GetCloseAniState(mhObject *this)
{
  mhObject *v1; // esi@1
  MiniHouseObjAni *v2; // eax@2
  ResElement *v3; // ecx@3
  NiActorManager *v4; // edx@4
  NiActorManager *v5; // ecx@8

  v1 = this;
  return this->m_pkResource->m_bIsCanAnimation == 1
      && (v2 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(this->m_iResGUID, 0x2712u, 0)) != 0
      && ((v3 = v1->m_pkResource, v3->m_bIsCanAnimation) ? (v4 = v3->m_pActorMgr.m_pObject) : (v4 = 0),
          v2->EventCode == v4->m_eTargetID
       && (v3->m_bIsCanAnimation ? (v5 = v3->m_pActorMgr.m_pObject) : (v5 = 0),
           !mhObjAniActor::AskAniGroupState(&v1->m_AniActor, 10002, v5)));
}

//----- (006CA8F0) --------------------------------------------------------
bool __thiscall mhObjectManager::AskDelayedDelObj(mhObjectManager *this, mhObject *pObj)
{
  return MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(pObj->m_iResGUID, 0x2712u, 0) != 0;
}

//----- (006CA920) --------------------------------------------------------
mhObject *__thiscall mhObjectManager::FindDelayedDelObj(mhObjectManager *this)
{
  mhObjectManager *v1; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v3; // esi@1
  mhObject *v4; // edi@2
  MiniHouseObjAni *v5; // eax@3
  ResElement *v6; // ecx@4
  NiActorManager *v7; // edx@5
  NiActorManager *v8; // ecx@9
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v9; // ecx@13
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v10; // eax@14
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *i; // eax@17
  mhObject *result; // eax@22

  v1 = this;
  v2 = this->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  if ( v2->_Left == v2 )
  {
LABEL_22:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      v4 = v3->_Myval.baseclass_0.second;
      if ( v4->m_pkResource->m_bIsCanAnimation == 1 )
      {
        v5 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(v4->m_iResGUID, 0x2712u, 0);
        if ( v5 )
        {
          v6 = v4->m_pkResource;
          v7 = v6->m_bIsCanAnimation ? v6->m_pActorMgr.m_pObject : 0;
          if ( v5->EventCode == v7->m_eTargetID )
          {
            v8 = v6->m_bIsCanAnimation ? v6->m_pActorMgr.m_pObject : 0;
            if ( !mhObjAniActor::AskAniGroupState(&v4->m_AniActor, 10002, v8) )
              break;
          }
        }
      }
      if ( !v3->_Isnil )
      {
        v9 = v3->_Right;
        if ( v9->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v10 = v9->_Left;
          if ( !v9->_Left->_Isnil )
          {
            do
            {
              v9 = v10;
              v10 = v10->_Left;
            }
            while ( !v10->_Isnil );
          }
          v3 = v9;
        }
      }
      if ( v3 == v1->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead )
        goto LABEL_22;
    }
    result = v3->_Myval.baseclass_0.second;
  }
  return result;
}

//----- (006CA9F0) --------------------------------------------------------
int __thiscall mhObjectManager::Update(mhObjectManager *this, float ftime)
{
  mhObjectManager *v2; // edi@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v3; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v4; // esi@1
  int v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v6; // eax@5
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *j; // eax@6
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *i; // eax@9

  v2 = this;
  v3 = this->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Left;
  v5 = 1;
  if ( v3->_Left != v3 )
  {
    do
    {
      if ( ((int (__stdcall *)(_DWORD))v4->_Myval.baseclass_0.second->vfptr->Update)(LODWORD(ftime)) == 10002 )
        v5 = 14;
      if ( !v4->_Isnil )
      {
        v6 = v4->_Right;
        if ( v6->_Isnil )
        {
          for ( i = v4->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v4 != i->_Right )
              break;
            v4 = i;
          }
          v4 = i;
        }
        else
        {
          v4 = v4->_Right;
          for ( j = v6->_Left; !j->_Isnil; j = j->_Left )
            v4 = j;
        }
      }
    }
    while ( v4 != v2->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  return v5;
}

//----- (006CAA80) --------------------------------------------------------
int __thiscall mhObjectManager::FindObjectID(mhObjectManager *this, NiNode *pRootNiNode)
{
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v3; // esi@1
  mhObject *v4; // eax@2
  char *v5; // ecx@3
  ResElement *v6; // eax@4
  NiActorManager *v7; // edx@5
  NiNode *v8; // edx@6
  NiActorManager *v9; // edx@10
  NiNode *v10; // eax@11
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v12; // ecx@20
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v13; // eax@21
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *i; // eax@24
  const char *v15; // [sp-4h] [bp-14h]@16
  mhObjectManager *v16; // [sp+Ch] [bp-4h]@1

  v2 = this->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  v16 = this;
  if ( v2->_Left != v2 )
  {
    do
    {
      v4 = v3->_Myval.baseclass_0.second;
      if ( v4 )
      {
        v5 = pRootNiNode->baseclass_0.baseclass_0.m_pcName;
        if ( v5 )
        {
          v6 = v4->m_pkResource;
          if ( v6->m_bIsCanAnimation && (v7 = v6->m_pActorMgr.m_pObject) != 0 )
            v8 = (NiNode *)v7->m_spNIFRoot.m_pObject;
          else
            v8 = v6->m_pNiNode.m_pObject;
          if ( v8->baseclass_0.baseclass_0.m_pcName )
          {
            if ( v6->m_bIsCanAnimation && (v9 = v6->m_pActorMgr.m_pObject) != 0 )
              v10 = (NiNode *)v9->m_spNIFRoot.m_pObject;
            else
              v10 = v6->m_pNiNode.m_pObject;
            if ( !strcmp(v10->baseclass_0.baseclass_0.m_pcName, v5) )
              return v3->_Myval.baseclass_0.first;
          }
        }
      }
      else
      {
        if ( pRootNiNode->baseclass_0.baseclass_0.m_pcName )
          v15 = "itObj->GetName() Error !!- findObj\n";
        else
          v15 = "pRootName Error !!- findObj\n";
        OutputDebugStringA(v15);
      }
      if ( !v3->_Isnil )
      {
        v12 = v3->_Right;
        if ( v12->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v13 = v12->_Left;
          if ( !v12->_Left->_Isnil )
          {
            do
            {
              v12 = v13;
              v13 = v13->_Left;
            }
            while ( !v13->_Isnil );
          }
          v3 = v12;
        }
      }
    }
    while ( v3 != v16->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  return -1;
}

//----- (006CAB90) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::Clear(mhObjectManager *this)
{
  mhObjectManager *v1; // edi@1
  mhReturnType v2; // eax@2
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v3; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v4; // esi@3
  int v5; // ecx@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v6; // ecx@6
  int v7; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > j; // eax@8
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > i; // eax@11
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-4h]@15

  v1 = this;
  if ( this->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    v3 = this->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v3->_Left;
    if ( v3->_Left != v3 )
    {
      do
      {
        v5 = *(_DWORD *)(*(_DWORD *)&v4 + 16);
        if ( v5 )
          (**(void (__stdcall ***)(_DWORD))v5)(1);
        v6 = v4;
        if ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
        {
          v7 = *(_DWORD *)(*(_DWORD *)&v4 + 8);
          if ( *(_BYTE *)(v7 + 21) )
          {
            for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v4 + 4);
                  !*(_BYTE *)(*(_DWORD *)&i + 21);
                  i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&i + 4) )
            {
              if ( v4 != *(_DWORD *)(*(_DWORD *)&i + 8) )
                break;
              v4 = i;
            }
            v4 = i;
          }
          else
          {
            v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)(*(_DWORD *)&v4 + 8);
            for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)v7;
                  !*(_BYTE *)(*(_DWORD *)&j + 21);
                  j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)**(_DWORD **)&j )
              v4 = j;
          }
        }
        std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
          (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v1,
          &result,
          v6);
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)v4 != v1->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    v2 = v1->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Mysize == 0;
  }
  else
  {
    v2 = 1;
  }
  return v2;
}

//----- (006CAC30) --------------------------------------------------------
void __thiscall mhObject::DelObjSeatInfo(mhObject *this, unsigned __int16 CharhWnd)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v2; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v3; // edx@1
  int v4; // eax@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > j; // eax@5
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > i; // eax@8

  v2 = this->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v2->_Left;
  if ( v2->_Left != v2 )
  {
    while ( *(_WORD *)(*(_DWORD *)&v3 + 14) != CharhWnd )
    {
      if ( !*(_BYTE *)(*(_DWORD *)&v3 + 17) )
      {
        v4 = *(_DWORD *)(*(_DWORD *)&v3 + 8);
        if ( *(_BYTE *)(v4 + 17) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v3 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 17);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&i + 4) )
          {
            if ( v3 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)(*(_DWORD *)&v3 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)v4;
                !*(_BYTE *)(*(_DWORD *)&j + 17);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)**(_DWORD **)&j )
            v3 = j;
        }
      }
      if ( (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)v3 == v2 )
        return;
    }
    std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase(
      (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&this->m_mapEmotionInfo,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&CharhWnd,
      v3);
  }
}

//----- (006CACB0) --------------------------------------------------------
void __thiscall mhObject::AllClearObjSeatInfo(mhObject *this)
{
  mhObject *v1; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v2; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > result; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
      v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_mapEmotionInfo, &result, v3)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)v3 != v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
}

//----- (006CACE0) --------------------------------------------------------
char __thiscall mhObject::GetmhEmotionCharPos(mhObject *this, unsigned __int16 CharhWnd)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v2; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v3; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v4; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *j; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *i; // eax@8
  char result; // al@13

  v2 = this->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  if ( v2->_Left == v2 )
  {
LABEL_13:
    result = -1;
  }
  else
  {
    while ( v3->_Myval.baseclass_0.second != CharhWnd )
    {
      if ( !v3->_Isnil )
      {
        v4 = v3->_Right;
        if ( v4->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
      if ( v3 == v2 )
        goto LABEL_13;
    }
    result = v3->_Myval.baseclass_0.first;
  }
  return result;
}

//----- (006CAD50) --------------------------------------------------------
ResElement *__thiscall mhObject::GetResElement(mhObject *this, MHE_STEP Endure)
{
  mhObject *v2; // esi@1
  ResElement *result; // eax@2
  std::_Tree_nod<std::_Tmap_traits<enum MHE_STEP,ResElement *,std::less<enum MHE_STEP>,std::allocator<std::pair<enum MHE_STEP const ,ResElement *> >,0> >::_Node *it; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_pkModelRes,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&it,
    (OscTarget *)&Endure);
  if ( it == v2->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead )
    result = 0;
  else
    result = it->_Myval.baseclass_0.second;
  return result;
}

//----- (006CAD90) --------------------------------------------------------
bool __thiscall mhObject::SetEndureStep(mhObject *this, MHE_STEP e)
{
  MHE_STEP v2; // esi@1
  mhObject *v3; // ebx@1
  int v4; // eax@2
  int v5; // edx@8
  ResElement *v6; // eax@9
  NiActorManager *v7; // ecx@11
  NiNode *v8; // eax@12
  int v9; // ecx@15
  int v10; // ecx@16
  ResElement *v11; // eax@18
  NiActorManager *v12; // ecx@19
  NiNode *v13; // eax@20
  int v14; // ecx@23
  int v15; // ecx@24
  bool v16; // al@27
  OscTarget *v17; // [sp-8h] [bp-18h]@4
  OscTarget *v18; // [sp-4h] [bp-14h]@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+8h] [bp-8h]@2
  OscTarget _Keyval; // [sp+Ch] [bp-4h]@2

  v2 = e;
  v3 = this;
  if ( e )
  {
    if ( e == 4 )
    {
      v18 = (OscTarget *)&result;
      result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const)3;
      v17 = &_Keyval;
    }
    else
    {
      v18 = (OscTarget *)&result;
      result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const)e;
      v17 = &_Keyval;
    }
    std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
      (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_pkModelRes,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)v17,
      v18);
    v4 = _Keyval;
  }
  else
  {
    _Keyval = 1;
    std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
      (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_pkModelRes,
      &result,
      &_Keyval);
    v4 = (int)result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<enum MHE_STEP,ResElement *,std::less<enum MHE_STEP>,std::allocator<std::pair<enum MHE_STEP const ,ResElement *> >,0> >::_Node *)v4 != v3->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead
    && (v5 = *(_DWORD *)(v4 + 16)) != 0 )
  {
    v6 = v3->m_pkResource;
    if ( v6 )
    {
      if ( v6->m_bIsCanAnimation && (v7 = v6->m_pActorMgr.m_pObject) != 0 )
        v8 = (NiNode *)v7->m_spNIFRoot.m_pObject;
      else
        v8 = v6->m_pNiNode.m_pObject;
      if ( *(_BYTE *)(v5 + 12) && (v9 = *(_DWORD *)(v5 + 8)) != 0 )
        v10 = *(_DWORD *)(v9 + 12);
      else
        v10 = *(_DWORD *)(v5 + 4);
      *(_DWORD *)(v10 + 88) = LODWORD(v8->baseclass_0.m_kLocal.m_Translate.x);
      *(_DWORD *)(v10 + 92) = LODWORD(v8->baseclass_0.m_kLocal.m_Translate.y);
      *(_DWORD *)(v10 + 96) = LODWORD(v8->baseclass_0.m_kLocal.m_Translate.z);
      v11 = v3->m_pkResource;
      if ( v11->m_bIsCanAnimation && (v12 = v11->m_pActorMgr.m_pObject) != 0 )
        v13 = (NiNode *)v12->m_spNIFRoot.m_pObject;
      else
        v13 = v11->m_pNiNode.m_pObject;
      if ( *(_BYTE *)(v5 + 12) && (v14 = *(_DWORD *)(v5 + 8)) != 0 )
        v15 = *(_DWORD *)(v14 + 12);
      else
        v15 = *(_DWORD *)(v5 + 4);
      memcpy((void *)(v15 + 52), &v13->baseclass_0.m_kLocal, 0x24u);
      v2 = e;
    }
    v3->m_Endure = v2;
    v3->m_pkResource = (ResElement *)v5;
    v16 = 1;
  }
  else
  {
    v16 = 0;
  }
  return v16;
}

//----- (006CAEA0) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::RemoveObject(mhObjectManager *this, int iObjGUID)
{
  mhObjectManager *v2; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // esi@1
  mhReturnType result; // eax@2
  int v5; // ecx@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > itResult; // [sp+8h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&itResult,
    (OscTarget *)&iObjGUID);
  v3 = itResult;
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)itResult == v2->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    result = 8;
  }
  else
  {
    v5 = *(_DWORD *)(*(_DWORD *)&itResult + 16);
    if ( v5 )
    {
      (**(void (__stdcall ***)(_DWORD))v5)(1);
      *(_DWORD *)(*(_DWORD *)&v3 + 16) = 0;
    }
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v2,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&iObjGUID,
      v3);
    result = 1;
  }
  return result;
}

//----- (006CAF00) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::DelObject(mhObjectManager *this, int iObjGUID)
{
  mhObjectManager *v2; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> > > v3; // esi@1
  int v5; // eax@3
  MiniHouseObjAni *v6; // eax@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> > > itResult; // [sp+8h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&itResult,
    (OscTarget *)&iObjGUID);
  v3 = itResult;
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)itResult == v2->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead )
    return 8;
  v5 = *(_DWORD *)(*(_DWORD *)&itResult + 16);
  if ( v5 )
  {
    v6 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(*(_DWORD *)(v5 + 8), 0x2712u, 0);
    if ( v6 )
    {
      mhObject::SetAct(*(mhObject **)(*(_DWORD *)&v3 + 16), v6->Handle, v6->NextAniHandle);
      return 14;
    }
    mhObjectManager::RemoveObject(v2, iObjGUID);
  }
  return 1;
}

//----- (006CAF80) --------------------------------------------------------
mhObject *__thiscall mhObjectManager::GetObjectA(mhObjectManager *this, int iObjGUID)
{
  mhObjectManager *v2; // esi@1
  mhObject *result; // eax@2
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *itResult; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&itResult,
    (OscTarget *)&iObjGUID);
  if ( itResult == v2->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead )
    result = 0;
  else
    result = itResult->_Myval.baseclass_0.second;
  return result;
}

//----- (006CAFB0) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::SetRotate(mhObjectManager *this, int iObjGUID, float fAngle)
{
  mhObjectManager *v3; // esi@1
  int v4; // ecx@2
  mhReturnType v5; // eax@3
  int v6; // eax@4
  int v7; // edx@5
  int v8; // eax@6
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+4h] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    &result,
    (OscTarget *)&iObjGUID);
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)result != v3->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead
    && (v4 = *(_DWORD *)(*(_DWORD *)&result + 16)) != 0 )
  {
    v6 = *(_DWORD *)(v4 + 64);
    if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 )
      v8 = *(_DWORD *)(v7 + 12);
    else
      v8 = *(_DWORD *)(v6 + 4);
    if ( v8 )
    {
      mhObject::SetRotAngle((mhObject *)v4, fAngle);
      v5 = 1;
    }
    else
    {
      v5 = 2;
    }
  }
  else
  {
    v5 = 8;
  }
  return v5;
}

//----- (006CB030) --------------------------------------------------------
mhObject *__thiscall mhObjectManager::GetmhEmotionObj(mhObjectManager *this, unsigned __int16 CharhWnd)
{
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v2; // edi@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *v4; // eax@4
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *j; // eax@5
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *i; // eax@8
  mhObject *result; // eax@13

  v2 = this->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  if ( v2->_Left == v2 )
  {
LABEL_13:
    result = 0;
  }
  else
  {
    while ( mhObject::GetmhEmotionCharPos(v3->_Myval.baseclass_0.second, CharhWnd) == -1 )
    {
      if ( !v3->_Isnil )
      {
        v4 = v3->_Right;
        if ( v4->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
      if ( v3 == v2 )
        goto LABEL_13;
    }
    result = v3->_Myval.baseclass_0.second;
  }
  return result;
}

//----- (006CB0B0) --------------------------------------------------------
bool __thiscall mhObject::IsEmptyOfObjSeat(mhObject *this, char ActPos)
{
  mhObject *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *it; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::find(
    &this->m_mapEmotionInfo.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > *)&it,
    &ActPos);
  return it == v2->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
}

//----- (006CB0E0) --------------------------------------------------------
unsigned __int16 __thiscall mhObject::WhoUseIt(mhObject *this, char ActPos)
{
  mhObject *v2; // esi@1
  unsigned __int16 result; // ax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *it; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::find(
    &this->m_mapEmotionInfo.baseclass_0,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > *)&it,
    &ActPos);
  if ( it == v2->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    result = -1;
  else
    result = it->_Myval.baseclass_0.second;
  return result;
}

//----- (006CB120) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::SetPosition(mhObjectManager *this, int iObjGUID, NiPoint3 *SetPos)
{
  mhObjectManager *v3; // esi@1
  int v4; // eax@2
  mhReturnType v5; // eax@3
  int v6; // eax@4
  int v7; // ecx@5
  int v8; // ecx@6
  int v9; // ecx@11
  int v10; // eax@12
  float v11; // edx@14
  double v12; // st7@14
  float v13; // ST14_4@14
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+10h] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    &result,
    (OscTarget *)&iObjGUID);
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)result != v3->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead
    && (v4 = *(_DWORD *)(*(_DWORD *)&result + 16)) != 0 )
  {
    v6 = *(_DWORD *)(v4 + 64);
    if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 )
      v8 = *(_DWORD *)(v7 + 12);
    else
      v8 = *(_DWORD *)(v6 + 4);
    if ( v8 )
    {
      if ( *(_BYTE *)(v6 + 12) && (v9 = *(_DWORD *)(v6 + 8)) != 0 )
        v10 = *(_DWORD *)(v9 + 12);
      else
        v10 = *(_DWORD *)(v6 + 4);
      v11 = SetPos->y;
      v12 = SetPos->z;
      *(float *)(v10 + 88) = SetPos->x;
      v13 = v12;
      *(_DWORD *)(v10 + 92) = LODWORD(v11);
      *(_DWORD *)(v10 + 96) = LODWORD(v13);
      v5 = 1;
    }
    else
    {
      v5 = 2;
    }
  }
  else
  {
    v5 = 8;
  }
  return v5;
}

//----- (006CB1D0) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::SetNodeCullMode(mhObjectManager *this, int iObjGUID, bool bCullMode)
{
  mhObjectManager *v3; // esi@1
  int v4; // eax@2
  int v6; // eax@4
  int v7; // ecx@5
  int v8; // ecx@6
  int v9; // ecx@11
  int v10; // ecx@12
  int v11; // ecx@16
  int v12; // eax@17
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+4h] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    &result,
    (OscTarget *)&iObjGUID);
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)result == v3->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead
    || (v4 = *(_DWORD *)(*(_DWORD *)&result + 16)) == 0 )
    return 8;
  v6 = *(_DWORD *)(v4 + 64);
  if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 )
    v8 = *(_DWORD *)(v7 + 12);
  else
    v8 = *(_DWORD *)(v6 + 4);
  if ( !v8 )
    return 2;
  if ( *(_BYTE *)(v6 + 12) && (v9 = *(_DWORD *)(v6 + 8)) != 0 )
    v10 = *(_DWORD *)(v9 + 12);
  else
    v10 = *(_DWORD *)(v6 + 4);
  if ( (*(_BYTE *)(v10 + 28) & 1) != bCullMode )
  {
    if ( *(_BYTE *)(v6 + 12) && (v11 = *(_DWORD *)(v6 + 8)) != 0 )
      v12 = *(_DWORD *)(v11 + 12);
    else
      v12 = *(_DWORD *)(v6 + 4);
    if ( bCullMode )
    {
      *(_WORD *)(v12 + 28) |= 1u;
      return 1;
    }
    *(_WORD *)(v12 + 28) &= 0xFFFEu;
  }
  return 1;
}

//----- (006CB290) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::AddPosition(mhObjectManager *this, int iObjGUID, NiPoint3 *AddPos)
{
  mhObjectManager *v3; // esi@1
  int v4; // eax@2
  mhReturnType v5; // eax@3
  int v6; // eax@4
  int v7; // ecx@5
  int v8; // ecx@6
  int v9; // ecx@11
  int v10; // ecx@12
  int v11; // ecx@15
  int v12; // eax@16
  float v13; // ST0C_4@18
  float v14; // ST10_4@18
  double v15; // st7@18
  float v16; // ST14_4@18
  float GetOldPos; // [sp+10h] [bp-10h]@14
  float GetOldPos_4; // [sp+14h] [bp-Ch]@14
  float GetOldPos_8; // [sp+18h] [bp-8h]@14
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+1Ch] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    &result,
    (OscTarget *)&iObjGUID);
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)result != v3->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead
    && (v4 = *(_DWORD *)(*(_DWORD *)&result + 16)) != 0 )
  {
    v6 = *(_DWORD *)(v4 + 64);
    if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 )
      v8 = *(_DWORD *)(v7 + 12);
    else
      v8 = *(_DWORD *)(v6 + 4);
    if ( v8 )
    {
      if ( *(_BYTE *)(v6 + 12) && (v9 = *(_DWORD *)(v6 + 8)) != 0 )
        v10 = *(_DWORD *)(v9 + 12);
      else
        v10 = *(_DWORD *)(v6 + 4);
      LODWORD(GetOldPos) = *(_DWORD *)(v10 + 88);
      LODWORD(GetOldPos_4) = *(_DWORD *)(v10 + 92);
      LODWORD(GetOldPos_8) = *(_DWORD *)(v10 + 96);
      if ( *(_BYTE *)(v6 + 12) && (v11 = *(_DWORD *)(v6 + 8)) != 0 )
        v12 = *(_DWORD *)(v11 + 12);
      else
        v12 = *(_DWORD *)(v6 + 4);
      v13 = AddPos->x + GetOldPos;
      v14 = AddPos->y + GetOldPos_4;
      v15 = AddPos->z + GetOldPos_8;
      *(_DWORD *)(v12 + 88) = LODWORD(v13);
      *(_DWORD *)(v12 + 92) = LODWORD(v14);
      v16 = v15;
      *(_DWORD *)(v12 + 96) = LODWORD(v16);
      v5 = 1;
    }
    else
    {
      v5 = 2;
    }
  }
  else
  {
    v5 = 8;
  }
  return v5;
}

//----- (006CB370) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::AttachScene(mhObjectManager *this, const int iObjGUID, NiNode *pDestNiNode)
{
  mhObjectManager *v3; // esi@1
  int v4; // esi@2
  NiNode *v5; // ebx@3
  int v6; // eax@4
  int v7; // ecx@5
  int v8; // ecx@6
  mhReturnType v9; // eax@9
  MiniHouseObjAni *v10; // eax@12
  int v11; // eax@14
  unsigned int v12; // edi@14
  int v13; // ecx@15
  int v14; // eax@16
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+8h] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    &result,
    (OscTarget *)&iObjGUID);
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)result != v3->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead
    && (v4 = *(_DWORD *)(*(_DWORD *)&result + 16)) != 0
    && (v5 = pDestNiNode) != 0 )
  {
    v6 = *(_DWORD *)(v4 + 64);
    if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 )
      v8 = *(_DWORD *)(v7 + 12);
    else
      v8 = *(_DWORD *)(v6 + 4);
    if ( v8 )
    {
      if ( v6 )
      {
        if ( *(_BYTE *)(v6 + 12) == 1 )
        {
          v10 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(*(_DWORD *)(v4 + 8), 0x2711u, 0);
          if ( v10 )
            mhObject::SetAct((mhObject *)v4, v10->Handle, v10->NextAniHandle);
        }
      }
      v11 = *(_DWORD *)(v4 + 64);
      v12 = v5->m_kChildren.m_uiESize;
      if ( *(_BYTE *)(v11 + 12) && (v13 = *(_DWORD *)(v11 + 8)) != 0 )
        v14 = *(_DWORD *)(v13 + 12);
      else
        v14 = *(_DWORD *)(v11 + 4);
      ((void (__thiscall *)(NiNode *, int, _DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        v5,
        v14,
        0);
      v9 = v12 + 1 == v5->m_kChildren.m_uiESize;
    }
    else
    {
      v9 = 2;
    }
  }
  else
  {
    v9 = 8;
  }
  return v9;
}

//----- (006CB460) --------------------------------------------------------
bool __thiscall mhObject::AddResElement(mhObject *this, MHE_STEP Endure, ResElement *pkResEle)
{
  std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *v3; // esi@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v4; // eax@2
  bool result; // al@2
  std::pair<enum MHE_STEP,ResElement *> addEle; // [sp+0h] [bp-8h]@2

  if ( __PAIR__((unsigned int)pkResEle, Endure) > 5 )
  {
    result = 0;
  }
  else
  {
    addEle.baseclass_0.second = pkResEle;
    v3 = (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&this->m_pkModelRes;
    addEle.baseclass_0.first = Endure;
    v4 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&this->m_pkModelRes,
           (std::pair<int const ,int> *)&addEle);
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
      v3,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&addEle,
      v4,
      0);
    result = LOBYTE(addEle.baseclass_0.second) != 0;
  }
  return result;
}

//----- (006CB4B0) --------------------------------------------------------
NiNode *__thiscall mhObjectManager::FindRootNode(mhObjectManager *this, NiNode *pNiNode)
{
  char *v2; // ecx@1
  char *v3; // eax@1
  char v4; // dl@2
  unsigned int v5; // esi@3
  NiNode *result; // eax@6
  unsigned int v7; // edi@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // edx@10
  unsigned int v9; // ecx@12
  const char *v10; // eax@14
  int v11; // eax@16
  NiNode *v12; // eax@19
  const char *v13; // edx@20
  char *v14; // eax@21
  char v15; // cl@22
  NiNode *pkTravel; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NodeName; // [sp+4h] [bp-2Ch]@1
  unsigned int v18; // [sp+20h] [bp-10h]@1
  int v19; // [sp+2Ch] [bp-4h]@3
  int v20; // [sp+30h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v2 = pNiNode->baseclass_0.baseclass_0.m_pcName;
  pkTravel = pNiNode;
  v3 = pNiNode->baseclass_0.baseclass_0.m_pcName;
  NodeName.baseclass_0._Myres = 15;
  NodeName.baseclass_0._Mysize = 0;
  NodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  do
    v4 = *v3++;
  while ( v4 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NodeName, v2, v3 - (v2 + 1));
  v5 = NodeName.baseclass_0._Mysize;
  v19 = 0;
  if ( NodeName.baseclass_0._Mysize )
  {
    v7 = mhObjDefaultRootName_1.baseclass_0._Mysize;
    if ( mhObjDefaultRootName_1.baseclass_0._Mysize < NodeName.baseclass_0._Mysize )
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
        &NodeName,
        mhObjDefaultRootName_1.baseclass_0._Mysize,
        NodeName.baseclass_0._Mysize);
      v5 = NodeName.baseclass_0._Mysize;
      v7 = mhObjDefaultRootName_1.baseclass_0._Mysize;
    }
    if ( v5 )
    {
      while ( 1 )
      {
        v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&mhObjDefaultRootName_1;
        if ( mhObjDefaultRootName_1.baseclass_0._Myres < 0x10 )
          v8 = &mhObjDefaultRootName_1;
        v9 = v5;
        if ( v5 >= v7 )
          v9 = v7;
        v10 = *(const char **)&NodeName;
        if ( NodeName.baseclass_0._Myres < 0x10 )
          v10 = (const char *)&NodeName;
        v11 = std::char_traits<char>::compare(v10, v8->baseclass_0.___u0.baseclass_0.dummy, v9);
        if ( !v11 )
        {
          if ( v5 >= v7 )
          {
            LOBYTE(v11) = v5 != v7;
            if ( !v11 )
              break;
          }
        }
        v12 = pkTravel->baseclass_0.m_pkParent;
        pkTravel = v12;
        if ( !v12 )
        {
          if ( NodeName.baseclass_0._Myres < 0x10 )
            goto LABEL_6;
          operator delete(*(void **)&NodeName);
          return 0;
        }
        v13 = v12->baseclass_0.baseclass_0.m_pcName;
        if ( v13 )
        {
          v14 = v12->baseclass_0.baseclass_0.m_pcName;
          do
            v15 = *v14++;
          while ( v15 );
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&NodeName, v13, v14 - (v13 + 1));
          v7 = mhObjDefaultRootName_1.baseclass_0._Mysize;
          v5 = NodeName.baseclass_0._Mysize;
          if ( mhObjDefaultRootName_1.baseclass_0._Mysize < NodeName.baseclass_0._Mysize )
          {
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
              &NodeName,
              mhObjDefaultRootName_1.baseclass_0._Mysize,
              NodeName.baseclass_0._Mysize);
            v5 = NodeName.baseclass_0._Mysize;
            v7 = mhObjDefaultRootName_1.baseclass_0._Mysize;
          }
        }
      }
    }
    if ( NodeName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NodeName);
    result = pkTravel;
  }
  else
  {
    if ( NodeName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NodeName);
LABEL_6:
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006CB650) --------------------------------------------------------
mhReturnType __thiscall mhObject::Create(mhObject *this, int iGUID, mhResTableElement *pkResElement, int iTexID, mhObject::mhObjBindType btBindType, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName, int iParentGUID)
{
  int v7; // ebx@0
  mhObject *v8; // esi@1
  mhReturnType result; // eax@2
  int v10; // ST0C_4@3
  int v11; // edi@3
  int v12; // ebx@3
  int v13; // eax@5
  void *v14; // ebx@5
  int v15; // eax@6
  MiniHouseFurniture *v16; // eax@7
  void *v17; // eax@10
  ResElement *v18; // edi@11
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v19; // eax@17
  std::pair<enum MHE_STEP,ResElement *> pairNewElement; // [sp+8h] [bp-8h]@17

  v8 = this;
  if ( pkResElement )
  {
    v10 = v7;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &this->m_RootName,
      strRootName,
      0,
      0xFFFFFFFFu);
    v8->m_iGUID = iGUID;
    *(_WORD *)&v8->m_BindType.m_byBindType[0] = *(_WORD *)&btBindType;
    v8->m_BindType.m_byBindType[2] = btBindType.m_byBindType[2];
    v8->m_iParentGUID = iParentGUID;
    v8->m_iResGUID = pkResElement->m_ElementID;
    v8->m_iMHResGUID = -1;
    std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::clear((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v8->m_mapEmotionInfo);
    v11 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v12 = LOWORD(v8->m_iResGUID);
    if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                  + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            LOWORD(v8->m_iResGUID),
                            v10)
      && (unsigned __int16)v12 <= *(_WORD *)(v11 + 200) )
    {
      v13 = *(_DWORD *)(v11 + 196) + 4 * v12;
      v14 = 0;
      if ( *(_DWORD *)v13 )
      {
        v15 = *(_DWORD *)v13;
        if ( v15 )
        {
          v16 = MiniHouseFuritureInfoTab::GetObjByName((char *)(v15 + 2));
          if ( v16 )
            v8->m_iMHResGUID = v16->Handle;
        }
      }
    }
    else
    {
      v14 = 0;
    }
    v17 = operator new(0x2Cu);
    if ( v17 == v14 )
    {
      v18 = 0;
    }
    else
    {
      *(_DWORD *)v17 = &ResElement::_vftable_;
      *((_DWORD *)v17 + 1) = v14;
      *((_DWORD *)v17 + 2) = v14;
      *((_BYTE *)v17 + 12) = 0;
      *((_DWORD *)v17 + 9) = 15;
      *((_DWORD *)v17 + 8) = v14;
      *((_BYTE *)v17 + 16) = 0;
      v18 = (ResElement *)v17;
    }
    if ( ResElement::CloneResElement(v18, &pkResElement->baseclass_0, strRootName) )
    {
      pairNewElement.baseclass_0.first = 1;
      pairNewElement.baseclass_0.second = v18;
      v19 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
              (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v8->m_pkModelRes,
              (std::pair<int const ,int> *)&pairNewElement);
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v8->m_pkModelRes,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&pairNewElement,
        v19,
        0);
      if ( LOBYTE(pairNewElement.baseclass_0.second) )
      {
        mhObject::SetEndureStep(v8, MHE_STEP_1);
        result = 1;
      }
      else
      {
        if ( v18 )
          v18->vfptr->__vecDelDtor(v18, 1u);
        result = 5;
      }
    }
    else
    {
      if ( v18 != v14 )
        v18->vfptr->__vecDelDtor(v18, 1u);
      result = 3;
    }
  }
  else
  {
    result = 4;
  }
  return result;
}
// 6CB650: could not find valid save-restore pair for ebx
// 9C9924: using guessed type int (__thiscall *ResElement___vftable_)(void *p, char);
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006CB7C0) --------------------------------------------------------
void __thiscall mhObject::AddObjSeatInfo(mhObject *this, char ActPos, unsigned __int16 CharhWnd)
{
  mhObject *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v4; // eax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > it; // [sp+8h] [bp-8h]@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > result; // [sp+Ch] [bp-4h]@1

  v3 = this;
  std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::find(
    &this->m_mapEmotionInfo.baseclass_0,
    &result,
    &ActPos);
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)result == v3->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead
    || *(_WORD *)(*(_DWORD *)&result + 14) != CharhWnd )
  {
    *((_WORD *)&ActPos + 1) = CharhWnd;
    v4 = std::_Tree_val<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Buynode<std::pair<unsigned_char_unsigned_short>__>(
           &v3->m_mapEmotionInfo.baseclass_0.baseclass_0,
           (std::pair<unsigned char,unsigned short> *)&ActPos);
    std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Linsert(
      &v3->m_mapEmotionInfo.baseclass_0,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > >,bool> *)&it,
      v4,
      0);
  }
}

//----- (006CB820) --------------------------------------------------------
NiNode *__thiscall mhObjectManager::GetObjectNiNode(mhObjectManager *this, int iObjGUID)
{
  mhObjectManager *v2; // esi@1
  NiNode *result; // eax@2
  int v4; // eax@3
  int v5; // ecx@4
  std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *itResult; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&itResult,
    (OscTarget *)&iObjGUID);
  if ( itResult == v2->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    result = 0;
  }
  else
  {
    v4 = *(_DWORD *)(*std::map<int_mhObject___std::less<int>_std::allocator<std::pair<int_const_mhObject__>>>::operator__(
                        (std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *)v2,
                        &iObjGUID)
                   + 64);
    if ( *(_BYTE *)(v4 + 12) && (v5 = *(_DWORD *)(v4 + 8)) != 0 )
      result = *(NiNode **)(v5 + 12);
    else
      result = *(NiNode **)(v4 + 4);
  }
  return result;
}

//----- (006CB880) --------------------------------------------------------
mhObject *__thiscall mhObjectManager::GetObjectA(mhObjectManager *this, NiNode *pNiNode)
{
  mhObjectManager *v2; // esi@1
  NiNode *v3; // eax@2
  mhObject *result; // eax@3

  v2 = this;
  if ( pNiNode
    && (v3 = mhObjectManager::FindRootNode(this, pNiNode),
        pNiNode = (NiNode *)mhObjectManager::FindObjectID(v2, v3),
        pNiNode != (NiNode *)-1) )
    result = (mhObject *)*std::map<int_mhObject___std::less<int>_std::allocator<std::pair<int_const_mhObject__>>>::operator__(
                            (std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *)v2,
                            (const int *)&pNiNode);
  else
    result = 0;
  return result;
}

//----- (006CB8C0) --------------------------------------------------------
void __thiscall mhObjectManager::_mhObjectManager(mhObjectManager *this)
{
  mhObjectManager *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v2; // ST08_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-14h]@1
  mhObjectManager *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v6 = 0;
  mhObjectManager::Clear(this);
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v6 = 1;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v1,
    &result,
    v3,
    v2);
  operator delete(v1->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (006CB930) --------------------------------------------------------
mhReturnType __thiscall mhObjectManager::AddObject(mhObjectManager *this, int iObjGUID, mhResTableElement *pkResource, int iTexID, mhObject::mhObjBindType btBindType, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName)
{
  mhObjectManager *v6; // ebx@1
  void *v7; // eax@3
  OscTarget v8; // eax@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // eax@6
  _BYTE v10[3]; // ST0C_3@6
  int v11; // edi@9
  int v12; // edx@9
  MiniHouseObjAni *v14; // eax@17
  int v15; // edi@19
  int v16; // eax@20
  char v17; // cl@21
  const char *v18; // eax@24
  void *v19; // eax@27
  void *v20; // esi@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // eax@30
  OscTarget v22; // esi@37
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v23; // eax@37
  std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *v24; // esi@39
  OscTarget v25; // edi@39
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v26; // eax@39
  char v27; // [sp+0h] [bp-98h]@37
  mhObjectManager *v28; // [sp+8h] [bp-90h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left; // [sp+Ch] [bp-8Ch]@1
  int iGUID; // [sp+10h] [bp-88h]@1
  std::pair<int,mhObject *> pairNewElement; // [sp+14h] [bp-84h]@37
  MiniHouseObjAni *pAni; // [sp+1Ch] [bp-7Ch]@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const result; // [sp+20h] [bp-78h]@1
  bool v34; // [sp+27h] [bp-71h]@30
  OscTarget thisa; // [sp+28h] [bp-70h]@1
  void *Input; // [sp+2Ch] [bp-6Ch]@6
  int v37; // [sp+3Ch] [bp-5Ch]@20
  unsigned int v38; // [sp+40h] [bp-58h]@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > LoadFilename; // [sp+48h] [bp-50h]@8
  char acID[24]; // [sp+64h] [bp-34h]@6
  char tempbuf[10]; // [sp+7Ch] [bp-1Ch]@20
  unsigned int v42; // [sp+88h] [bp-10h]@1
  int v43; // [sp+94h] [bp-4h]@3
  int v44; // [sp+98h] [bp+0h]@1

  v42 = (unsigned int)&v44 ^ __security_cookie;
  v6 = this;
  iGUID = iObjGUID;
  thisa = iObjGUID;
  BYTE2(pAni) = btBindType.m_byBindType[2];
  v28 = this;
  _Left = strRootName;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    &result,
    &thisa);
  if ( (std::_Tree_nod<std::_Tmap_traits<int,mhObject *,std::less<int>,std::allocator<std::pair<int const ,mhObject *> >,0> >::_Node *)result != v6->m_mapObject.baseclass_0.baseclass_0.baseclass_0._Myhead
    && *(_DWORD *)(*(_DWORD *)&result + 16) )
    return 1;
  v7 = operator new(0x64u);
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const)v7;
  v43 = 0;
  if ( v7 )
  {
    mhObject::mhObject((mhObject *)v7);
    thisa = v8;
  }
  else
  {
    thisa = 0;
  }
  *(_DWORD *)acID = 0;
  *(_DWORD *)&acID[4] = 0;
  *(_DWORD *)&acID[8] = 0;
  *(_DWORD *)&acID[12] = 0;
  *(_DWORD *)&acID[16] = 0;
  *(_DWORD *)&acID[20] = 0;
  v43 = -1;
  sprintf(acID, "@%d");
  v9 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
         (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&Input,
         _Left,
         acID);
  *(_WORD *)v10 = *(_WORD *)&btBindType;
  v10[2] = BYTE2(pAni);
  v43 = 1;
  mhObject::Create((mhObject *)thisa, iGUID, pkResource, iTexID, *(mhObject::mhObjBindType *)v10, v9, -1);
  if ( v38 >= 0x10 )
    operator delete(Input);
  LoadFilename.baseclass_0._Myres = 15;
  LoadFilename.baseclass_0._Mysize = 0;
  LoadFilename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v43 = 2;
  pAni = 0;
  if ( !pkResource->baseclass_0.m_bIsCanAnimation )
  {
LABEL_19:
    v15 = 2;
    result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const)&pkResource->baseclass_0.m_FileName;
    do
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &LoadFilename,
        *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&result,
        0,
        0xFFFFFFFFu);
      tempbuf[0] = 0;
      *(_DWORD *)&tempbuf[1] = 0;
      *(_DWORD *)&tempbuf[5] = 0;
      tempbuf[9] = 0;
      sprintf(tempbuf, "_0%d");
      v16 = (int)tempbuf;
      v38 = 15;
      v37 = 0;
      LOBYTE(Input) = 0;
      do
        v17 = *(_BYTE *)v16++;
      while ( v17 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&Input,
        tempbuf,
        v16 - (_DWORD)&tempbuf[1]);
      LOBYTE(v43) = 3;
      mhMiscUtil::InputStrFileName(
        &LoadFilename,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&Input);
      LOBYTE(v43) = 2;
      if ( v38 >= 0x10 )
        operator delete(Input);
      v18 = *(const char **)&LoadFilename;
      if ( LoadFilename.baseclass_0._Myres < 0x10 )
        v18 = (const char *)&LoadFilename;
      if ( PathFileExistsA(v18) )
      {
        v19 = operator new(0x2Cu);
        if ( v19 )
        {
          *(_DWORD *)v19 = &ResElement::_vftable_;
          *((_DWORD *)v19 + 1) = 0;
          *((_DWORD *)v19 + 2) = 0;
          *((_BYTE *)v19 + 12) = 0;
          *((_DWORD *)v19 + 9) = 15;
          *((_DWORD *)v19 + 8) = 0;
          *((_BYTE *)v19 + 16) = 0;
          v20 = v19;
        }
        else
        {
          v20 = 0;
        }
        v21 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&Input,
                _Left,
                acID);
        LOBYTE(v43) = 4;
        v34 = ResElement::CreateResElement((ResElement *)v20, &LoadFilename, v21) == 0;
        LOBYTE(v43) = 2;
        if ( v38 >= 0x10 )
          operator delete(Input);
        if ( v34 )
        {
          if ( v20 )
            (**(void (__thiscall ***)(void *, signed int))v20)(v20, 1);
          if ( LoadFilename.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&LoadFilename);
          return 2;
        }
        if ( *((_BYTE *)v20 + 12) && pAni )
          mhObject::SetAct((mhObject *)thisa, pAni->Handle, pAni->NextAniHandle);
        if ( (unsigned int)v15 <= 5 )
        {
          pairNewElement.baseclass_0.second = (mhObject *)v20;
          v22 = thisa;
          pairNewElement.baseclass_0.first = v15;
          v23 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
                  (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)(thisa + 48),
                  (std::pair<int const ,int> *)&pairNewElement);
          std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
            (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)(v22 + 48),
            (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&v27,
            v23,
            0);
        }
      }
      ++v15;
    }
    while ( v15 < 4 );
    v24 = (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v28;
    v25 = thisa;
    pairNewElement.baseclass_0.first = iGUID;
    pairNewElement.baseclass_0.second = (mhObject *)thisa;
    v26 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
            (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v28,
            (std::pair<int const ,int> *)&pairNewElement);
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
      v24,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&pairNewElement,
      v26,
      0);
    if ( !LOBYTE(pairNewElement.baseclass_0.second) )
    {
      if ( v25 )
        (**(void (__thiscall ***)(OscTarget, signed int))v25)(v25, 1);
      if ( LoadFilename.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&LoadFilename);
      return 5;
    }
    if ( LoadFilename.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&LoadFilename);
    return 1;
  }
  v11 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  v12 = *(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const)pkResource->m_ElementID;
  if ( (unsigned __int8)(*(int (__thiscall **)(int, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const))(v12 + 16))(
                          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                          result)
    && *(unsigned __int16 *)&result <= *(_WORD *)(v11 + 200)
    && *(_DWORD *)(*(_DWORD *)(v11 + 196) + 4 * *(unsigned __int16 *)&result) )
  {
    v14 = MiniHouseObjAniInfoTab::GetObjInfobyAniGroup(pkResource->m_ElementID, 0x2711u, 0);
    pAni = v14;
    if ( v14 )
      mhObject::SetAct((mhObject *)thisa, v14->Handle, v14->NextAniHandle);
    goto LABEL_19;
  }
  if ( thisa )
    (**(void (__stdcall ***)(_DWORD))thisa)(1);
  if ( LoadFilename.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&LoadFilename);
  return 0;
}
// 9C9924: using guessed type int (__thiscall *ResElement___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006CBD40) --------------------------------------------------------
void __thiscall mhObjAniActor::_mhObjAniActor(mhObjAniActor *this)
{
  this->baseclass_0.vfptr = (mhObjActorVtbl *)&mhObjActor::_vftable_;
}
// 9C99A8: using guessed type int (__thiscall *mhObjActor___vftable_)(void *p, char);

//----- (006CBD50) --------------------------------------------------------
void *__thiscall mhObjActor::_scalar_deleting_destructor_(mhObjAniActor *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (mhObjActorVtbl *)&mhObjActor::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9C99A8: using guessed type int (__thiscall *mhObjActor___vftable_)(void *p, char);

//----- (006CBD80) --------------------------------------------------------
std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *__cdecl std::_Tree_val<std::_Tset_traits<NiPointer<NiAVObject>_std::less<NiPointer<NiAVObject>>_std::allocator<NiPointer<NiAVObject>>_0>>::_Max(std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *_Pnode)
{
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *result; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *i; // ecx@1

  result = _Pnode;
  for ( i = _Pnode->_Right; !i->_Isnil; i = i->_Right )
    result = i;
  return result;
}

//----- (006CBDA0) --------------------------------------------------------
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::find(std::_Tree<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *this, std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > *result, const char *_Keyval)
{
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v3; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v4; // eax@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > > *v5; // eax@8

  v3 = this->baseclass_0.baseclass_0._Myhead;
  v4 = v3->_Parent;
  while ( !v4->_Isnil )
  {
    if ( v4->_Myval.baseclass_0.first >= (unsigned __int8)*_Keyval )
    {
      v3 = v4;
      v4 = v4->_Left;
    }
    else
    {
      v4 = v4->_Right;
    }
  }
  if ( v3 == this->baseclass_0.baseclass_0._Myhead || (unsigned __int8)*_Keyval < v3->_Myval.baseclass_0.first )
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = this->baseclass_0.baseclass_0._Myhead;
  }
  else
  {
    v5 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v3;
  }
  return v5;
}

//----- (006CBE10) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const int v10; // edi@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v11; // edi@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                          v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                          1,
                          v8,
                          _Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                        v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (006CBEF0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *v4; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v5; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v6; // eax@1
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v7; // esi@1
  bool v8; // cl@1
  const char v9; // dl@2
  std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *v10; // edi@10
  int v11; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > >,bool> *v12; // eax@12
  int v13; // ecx@15
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v5;
  v8 = 1;
  _Addleft = 1;
  if ( !v6->_Isnil )
  {
    v9 = _Node->_Myval.baseclass_0.first;
    do
    {
      v7 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)v6;
      if ( _Leftish )
        v8 = v6->_Myval.baseclass_0.first >= (unsigned __int8)v9;
      else
        v8 = (unsigned __int8)v9 < v6->_Myval.baseclass_0.first;
      _Addleft = v8;
      if ( v8 )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v10 = v7;
  *(_DWORD *)&_Leftish = v7;
  if ( v8 )
  {
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)v7 == v4->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v11 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
                          (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v4,
                          (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&_Leftish,
                          1,
                          v7,
                          (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v12 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
      result->baseclass_0.second = 1;
      return v12;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Effect___std::less<Effect__>_std::allocator<Effect__>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >,std::_Iterator_base0> *)&_Leftish);
    v10 = (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Leftish;
  }
  if ( LOBYTE(v10->_Myval) >= _Node->_Myval.baseclass_0.first )
  {
    operator delete(_Node);
    v12 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v10;
    result->baseclass_0.second = 0;
  }
  else
  {
    v13 = *(_DWORD *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::_Insert(
                        (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)v4,
                        (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&_Leftish,
                        _Addleft,
                        v7,
                        (std::_Tree_nod<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> >::_Node *)_Node)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v12 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v13;
    result->baseclass_0.second = 1;
  }
  return v12;
}

//----- (006CBFD0) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_char_unsigned_short_std::less<unsigned_char>_std::allocator<std::pair<unsigned_char_const_unsigned_short>>_0>>::_Buynode<std::pair<unsigned_char_unsigned_short>__>(std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *this, std::pair<unsigned char,unsigned short> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *result; // eax@1
  std::pair<unsigned char,unsigned short> *v4; // esi@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)operator new(0x14u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006CC040) --------------------------------------------------------
void __thiscall mhObject::mhObject(mhObject *this)
{
  mhObject *v1; // esi@1
  char *v2; // ecx@1
  void *v3; // eax@1
  void *v4; // eax@2
  std::exception thisa; // [sp+0h] [bp-20h]@4
  mhObject *v6; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@4
  int v8; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v6 = this;
  v2 = (char *)&this->m_RootName;
  v6->vfptr = (mhObjectVtbl *)&mhObject::_vftable_;
  v1->m_iGUID = -1;
  v1->m_iResGUID = -1;
  v1->m_iParentGUID = -1;
  *((_DWORD *)v2 + 5) = 15;
  *((_DWORD *)v2 + 4) = 0;
  *v2 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v2,
    &mhObjDefaultRootName_1,
    0,
    0xFFFFFFFFu);
  v1->m_Endure = 0;
  v8 = 0;
  v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v3 = operator new(0x18u);
  if ( !v3 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<enum MHE_STEP,ResElement *,std::less<enum MHE_STEP>,std::allocator<std::pair<enum MHE_STEP const ,ResElement *> >,0> >::_Node *)v3;
  *(_DWORD *)v3 = v3;
  v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_pkResource = 0;
  v1->m_AniActor.baseclass_0.vfptr = (mhObjActorVtbl *)&mhObjAniActor::_vftable_;
  *(_DWORD *)&v1->m_AniActor.m_Handle = -1;
  LOBYTE(v8) = 2;
  v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x14u);
  if ( !v4 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)v4;
  *(_DWORD *)v4 = v4;
  v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  *(_WORD *)&v1->m_BindType.m_byBindType[0] = -1;
  v1->m_BindType.m_byBindType[2] = -1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C99BC: using guessed type int (__thiscall *mhObjAniActor___vftable_)(void *p, char);
// 9C99D0: using guessed type int (__thiscall *mhObject___vftable_)(void *p, char);

//----- (006CC190) --------------------------------------------------------
void __thiscall mhObject::_mhObject(mhObject *this)
{
  mhObject *v1; // esi@1
  unsigned int v2; // eax@1
  signed int v3; // ebx@2
  int v4; // ecx@3
  int v5; // eax@3
  int v6; // eax@8
  int *v7; // eax@10
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v8; // edi@12
  int v9; // ecx@13
  std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *v10; // ecx@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v11; // eax@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v12; // ST08_4@19
  std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > v13; // ST04_4@19
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v14; // ST08_4@19
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v15; // ST04_4@19
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+0h] [bp-1Ch]@15
  mhObject *v17; // [sp+4h] [bp-18h]@1
  int v18; // [sp+8h] [bp-14h]@11
  int v19; // [sp+Ch] [bp-10h]@8
  int v20; // [sp+18h] [bp-4h]@1

  v1 = this;
  v17 = this;
  this->vfptr = (mhObjectVtbl *)&mhObject::_vftable_;
  v2 = this->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Mysize;
  v20 = 3;
  if ( v2 )
  {
    v3 = 0;
    do
    {
      v4 = (int)v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v5 = *(_DWORD *)(v4 + 4);
      while ( !*(_BYTE *)(v5 + 21) )
      {
        if ( *(_DWORD *)(v5 + 12) >= v3 )
        {
          v4 = v5;
          v5 = *(_DWORD *)v5;
        }
        else
        {
          v5 = *(_DWORD *)(v5 + 8);
        }
      }
      v6 = (int)v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v19 = v4;
      if ( v4 == v6 || v3 < *(_DWORD *)(v4 + 12) )
      {
        v18 = v6;
        v7 = &v18;
      }
      else
      {
        v7 = &v19;
      }
      v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)*v7;
      if ( (std::_Tree_nod<std::_Tmap_traits<enum MHE_STEP,ResElement *,std::less<enum MHE_STEP>,std::allocator<std::pair<enum MHE_STEP const ,ResElement *> >,0> >::_Node *)*v7 != v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        v9 = *(_DWORD *)(*(_DWORD *)&v8 + 16);
        if ( v9 )
        {
          (**(void (__stdcall ***)(_DWORD))v9)(1);
          *(_DWORD *)(*(_DWORD *)&v8 + 16) = 0;
        }
        std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
          (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->m_pkModelRes,
          &result,
          v8);
      }
      ++v3;
    }
    while ( v3 < 5 );
  }
  v10 = v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v11 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v10->_Left;
  if ( v10->_Left != v10 )
  {
    do
      v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&std::_Tree<std::_Tset_traits<unsigned_int_std::less<unsigned_int>_std::allocator<unsigned_int>_0>>::erase((std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_mapEmotionInfo, (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&result, v11)->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<unsigned char,unsigned short,std::less<unsigned char>,std::allocator<std::pair<unsigned char const ,unsigned short> >,0> >::_Node *)v11 != v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v1->m_mapEmotionInfo;
  v12 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v13 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > >)v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v20) = 4;
  std::_Tree<std::_Tset_traits<PgWin___std::less<PgWin__>_std::allocator<PgWin__>_0>>::erase(
    (std::_Tree<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > *)&v1->m_mapEmotionInfo,
    (std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<unsigned int,std::less<unsigned int>,std::allocator<unsigned int>,0> > > *)&v18,
    v13,
    v12);
  operator delete(v1->m_mapEmotionInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v1->m_AniActor.baseclass_0.vfptr = (mhObjActorVtbl *)&mhObjActor::_vftable_;
  result = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)&v1->m_pkModelRes;
  v14 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v15 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v20) = 5;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_pkModelRes,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&v18,
    v15,
    v14);
  operator delete(v1->m_pkModelRes.baseclass_0.baseclass_0.baseclass_0._Myhead);
  if ( v1->m_RootName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_RootName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_RootName.baseclass_0._Myres = 15;
  v1->m_RootName.baseclass_0._Mysize = 0;
  v1->m_RootName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}
// 9C99A8: using guessed type int (__thiscall *mhObjActor___vftable_)(void *p, char);
// 9C99D0: using guessed type int (__thiscall *mhObject___vftable_)(void *p, char);

//----- (006CC2F0) --------------------------------------------------------
void *__thiscall mhObject::_scalar_deleting_destructor_(mhObject *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  mhObject::_mhObject(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006CC320) --------------------------------------------------------
int __thiscall mhObjAniActor::PlayEffect(mhObjAniActor *this, unsigned int Index)
{
  return 1;
}

//----- (006CC330) --------------------------------------------------------
int __thiscall mhObjAniActor::PlaySoundA(mhObjAniActor *this, unsigned int Index)
{
  return 1;
}

//----- (006CC340) --------------------------------------------------------
int __thiscall mhObjAniActor::AskAniGroupState(mhObjAniActor *this, int AniGroupID, NiActorManager *ActorMgr)
{
  int result; // eax@2

  if ( ActorMgr
    && NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&ActorMgr->m_kSequenceMap,
         ActorMgr->m_eTargetID,
         (NiVBSet **)&ActorMgr)
    && ActorMgr )
    result = ActorMgr->m_fTransEndTime <= (double)ActorMgr->m_fTransStartTime;
  else
    result = -1;
  return result;
}

//----- (006CC390) --------------------------------------------------------
int __thiscall mhObjAniActor::SetAct(mhObjAniActor *this, unsigned __int16 handle, unsigned __int16 nexthandle, NiActorManager *ActorMgr)
{
  mhObjAniActor *v4; // esi@1
  int result; // eax@2
  MiniHouseObjAni *v6; // eax@3

  v4 = this;
  if ( ActorMgr )
  {
    v6 = MiniHouseObjAniInfoTab::GetObjInfobyhnd(handle);
    if ( v6 )
    {
      v4->m_NextHandle = nexthandle;
      v4->m_Handle = handle;
      result = NiActorManager::SetTargetAnimation(ActorMgr, v6->EventCode) != 0;
    }
    else
    {
      NiActorManager::SetTargetAnimation(ActorMgr, 0x18A88u);
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006CC400) --------------------------------------------------------
int __thiscall mhObjAniActor::update(mhObjAniActor *this, float fTime, NiActorManager *ActorMgr)
{
  NiActorManager *v3; // ebx@1
  mhObjAniActor *v4; // esi@1
  int result; // eax@3
  unsigned __int16 v6; // ax@5
  MiniHouseObjAni *v7; // edi@6
  MiniHouseObjAni *v8; // eax@10
  int v9; // ecx@10
  MiniHouseObjAni *v10; // edi@12
  unsigned __int16 v11; // ax@13
  MiniHouseObjAni *v12; // eax@14
  unsigned __int16 v13; // cx@16
  MiniHouseObjAni *v14; // eax@18

  v3 = ActorMgr;
  v4 = this;
  if ( !NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
          (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&ActorMgr->m_kSequenceMap,
          ActorMgr->m_eTargetID,
          (NiVBSet **)&ActorMgr)
    || !ActorMgr )
    return 0;
  if ( ActorMgr->m_fTransEndTime <= (double)ActorMgr->m_fTransStartTime )
    goto LABEL_21;
  v6 = v4->m_NextHandle;
  if ( v6 == -1 )
  {
    v10 = MiniHouseObjAniInfoTab::GetObjInfobyhnd(v4->m_Handle);
    if ( !v10 )
      goto LABEL_21;
    v11 = v4->m_Handle;
    if ( v10->AniGroupID == 10000 )
    {
      v13 = v10->NextAniHandle;
      if ( v11 == v13 || v13 > 0x2710u )
        goto LABEL_21;
      v14 = MiniHouseObjAniInfoTab::GetObjInfobyhnd(v11);
      v9 = 10002;
      if ( v14->AniGroupID != 10002 )
      {
        mhObjAniActor::SetAct(v4, v10->NextAniHandle, 0xFFFFu, v3);
        v4->m_Handle = v10->NextAniHandle;
        goto LABEL_21;
      }
    }
    else
    {
      v12 = MiniHouseObjAniInfoTab::GetObjInfobyhnd(v11);
      v9 = 10002;
      if ( v12->AniGroupID != 10002 )
      {
        mhObjAniActor::SetAct(v4, v10->NextAniHandle, 0xFFFFu, v3);
        goto LABEL_21;
      }
    }
    return v9;
  }
  v7 = MiniHouseObjAniInfoTab::GetObjInfobyhnd(v6);
  v4->m_NextHandle = -1;
  if ( !v7 )
    goto LABEL_21;
  result = (int)MiniHouseObjAniInfoTab::GetObjInfobyhnd(v7->NextAniHandle);
  if ( !result )
    return result;
  if ( v4->m_Handle == v7->NextAniHandle || *(_WORD *)(result + 5) > 0x2710u )
    goto LABEL_21;
  v8 = MiniHouseObjAniInfoTab::GetObjInfobyhnd(v4->m_Handle);
  v9 = 10002;
  if ( v8->AniGroupID == 10002 )
    return v9;
  mhObjAniActor::SetAct(v4, v7->Handle, v7->NextAniHandle, v3);
LABEL_21:
  NiActorManager::Update(v3, fTime);
  return 1;
}

//----- (006CC580) --------------------------------------------------------
void __thiscall mhResTableElement::_mhResTableElement(mhResTableElement *this)
{
  this->baseclass_0.vfptr = (ResElementVtbl *)&mhResTableElement::_vftable_;
  ResElement::_ResElement(&this->baseclass_0);
}
// 9C992C: using guessed type int (__thiscall *mhResTableElement___vftable_)(void *p, char);

//----- (006CC590) --------------------------------------------------------
mhReturnType __thiscall mhResTableManager::Clear(mhResTableManager *this)
{
  mhResTableManager *v1; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<int,mhResTableElement *,std::less<int>,std::allocator<std::pair<int const ,mhResTableElement *> >,0> >::_Node *v2; // eax@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // esi@2
  int v4; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *v5; // eax@5
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v6; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v7; // esi@6
  int v8; // edi@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *v9; // eax@12
  mhReturnType v10; // eax@16
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+4h] [bp-4h]@5

  v1 = this;
  if ( !this->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Mysize )
    goto LABEL_23;
  v2 = this->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      ResElement::ReleaseResElement(*(ResElement **)(*(_DWORD *)&v3 + 16));
      v4 = *(_DWORD *)(*(_DWORD *)&v3 + 16);
      if ( v4 )
        (**(void (__stdcall ***)(_DWORD))v4)(1);
      v5 = std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
             (std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)v1,
             &result,
             v3);
      v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&v5->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    }
    while ( *(std::_Tree_nod<std::_Tmap_traits<int,mhResTableElement *,std::less<int>,std::allocator<std::pair<int const ,mhResTableElement *> >,0> >::_Node **)&v5->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  v6 = v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v6->_Left;
  if ( v6->_Left != v6 )
  {
    do
    {
      v8 = *(_DWORD *)(*(_DWORD *)&v7 + 16);
      if ( v8 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
        *(_DWORD *)(*(_DWORD *)&v7 + 16) = 0;
      }
      v9 = std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::erase(
             (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)&v1->m_mapResTex,
             (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&result,
             v7);
      v7 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&v9->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    }
    while ( *(std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node **)&v9->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  if ( v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
      NiMessageBox::ms_pfnMessageBox("m_mapResModels is not empty!", "error", 0);
    return 0;
  }
  if ( v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    if ( !NiMessageBox::ms_pfnMessageBox )
      return 0;
    NiMessageBox::ms_pfnMessageBox("m_mapResTex is not empty!", "error", 0);
    v10 = 0;
  }
  else
  {
LABEL_23:
    v10 = 1;
  }
  return v10;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);

//----- (006CC680) --------------------------------------------------------
mhReturnType __thiscall mhResTableElement::Create(mhResTableElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Filename, unsigned __int16 ElementID, mhObjectBindStyle eBindtype, mhObjectAction eAction, int iWeight, int iLoadingWeight, int iTexID, std::basic_string<char,std::char_traits<char>,std::allocator<char> > RootName)
{
  char *v9; // esi@1
  int v10; // eax@1
  char v11; // cl@2
  MiniHouseFurniture *v12; // eax@5
  MiniHouseFurniture *v13; // edi@5
  const char *v14; // esi@5
  int v15; // eax@5
  int v16; // edx@5
  char v17; // cl@6
  mhReturnType result; // eax@12
  NiActorManager *v19; // eax@26
  NiNode *v20; // eax@27
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // [sp-18h] [bp-70h]@14
  mhMiscUtil::ModelType v22; // [sp-14h] [bp-6Ch]@14
  mhResTableElement *thisa; // [sp+0h] [bp-58h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strPath; // [sp+4h] [bp-54h]@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strFileName; // [sp+20h] [bp-38h]@5
  char Num[12]; // [sp+3Ch] [bp-1Ch]@1
  unsigned int v27; // [sp+48h] [bp-10h]@1
  int v28; // [sp+54h] [bp-4h]@1
  int v29; // [sp+58h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v9 = (char *)Filename;
  thisa = this;
  *(_DWORD *)Num = 0;
  *(_DWORD *)&Num[4] = 0;
  *(_DWORD *)&Num[8] = 0;
  v28 = 0;
  sprintf(Num, "%d");
  v10 = (int)Num;
  do
    v11 = *(_BYTE *)v10++;
  while ( v11 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(
    &RootName,
    RootName.baseclass_0._Mysize,
    Num,
    v10 - (_DWORD)&Num[1]);
  if ( Filename->baseclass_0._Myres >= 0x10 )
    v9 = *(char **)&Filename->baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = MiniHouseFuritureInfoTab::GetObjByName(v9);
  v13 = v12;
  strFileName.baseclass_0._Myres = 15;
  strFileName.baseclass_0._Mysize = 0;
  strFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v14 = v12->Backimage;
  v15 = (int)v12->Backimage;
  LOBYTE(v28) = 1;
  v16 = v15 + 1;
  do
    v17 = *(_BYTE *)v15++;
  while ( v17 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strFileName, v14, v15 - v16);
  if ( !v13 )
  {
    if ( strFileName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strFileName);
    strFileName.baseclass_0._Myres = 15;
    strFileName.baseclass_0._Mysize = 0;
    strFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( RootName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&RootName);
    return 3;
  }
  if ( v13->IsAnimation == 1 )
  {
    v22 = 1;
    v21 = &strFileName;
  }
  else
  {
    v22 = 0;
    v21 = &strFileName;
  }
  mhMiscUtil::GetLoadModelFileName(v21, v22);
  strPath.baseclass_0._Myres = 15;
  strPath.baseclass_0._Mysize = 0;
  strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v28) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &strPath,
    &Folder::m_acMHObj,
    strlen(&Folder::m_acMHObj));
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, v14, strlen(v14));
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, "\\", 1u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, &strFileName, 0, 0xFFFFFFFFu);
  if ( ResElement::CreateResElement(&thisa->baseclass_0, &strPath, &RootName) )
  {
    if ( thisa->baseclass_0.m_bIsCanAnimation && (v19 = thisa->baseclass_0.m_pActorMgr.m_pObject) != 0 )
      v20 = (NiNode *)v19->m_spNIFRoot.m_pObject;
    else
      v20 = thisa->baseclass_0.m_pNiNode.m_pObject;
    if ( v20 )
    {
      thisa->m_eBindType = eBindtype;
      thisa->m_eAction = eAction;
      thisa->m_iWeight = iWeight;
      thisa->m_ElementID = ElementID;
      thisa->m_iLoadingWeight = iLoadingWeight;
      thisa->m_iTexID = iTexID;
      if ( strPath.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strPath);
      strPath.baseclass_0._Myres = 15;
      strPath.baseclass_0._Mysize = 0;
      strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( strFileName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strFileName);
      strFileName.baseclass_0._Myres = 15;
      strFileName.baseclass_0._Mysize = 0;
      strFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( RootName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&RootName);
      result = 1;
    }
    else
    {
      if ( strPath.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strPath);
      strPath.baseclass_0._Myres = 15;
      strPath.baseclass_0._Mysize = 0;
      strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( strFileName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strFileName);
      strFileName.baseclass_0._Myres = 15;
      strFileName.baseclass_0._Mysize = 0;
      strFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( RootName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&RootName);
      result = 2;
    }
  }
  else
  {
    if ( strPath.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strPath);
    strPath.baseclass_0._Myres = 15;
    strPath.baseclass_0._Mysize = 0;
    strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strFileName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strFileName);
    strFileName.baseclass_0._Myres = 15;
    strFileName.baseclass_0._Mysize = 0;
    strFileName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( RootName.baseclass_0._Myres < 0x10 )
      return 3;
    operator delete(*(void **)&RootName);
    result = 3;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006CC980) --------------------------------------------------------
mhResTableElement *__thiscall mhResTableManager::GetModelElement(mhResTableManager *this, int ElementID)
{
  mhResTableManager *v2; // esi@1
  mhResTableElement *result; // eax@2
  std::_Tree_nod<std::_Tmap_traits<int,mhResTableElement *,std::less<int>,std::allocator<std::pair<int const ,mhResTableElement *> >,0> >::_Node *itResult; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&itResult,
    (OscTarget *)&ElementID);
  if ( itResult == v2->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead )
    result = 0;
  else
    result = (mhResTableElement *)*std::map<int_mhObject___std::less<int>_std::allocator<std::pair<int_const_mhObject__>>>::operator__(
                                     (std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *)v2,
                                     &ElementID);
  return result;
}

//----- (006CC9C0) --------------------------------------------------------
mhReturnType __thiscall mhResTableManager::AddModelElement(mhResTableManager *this, mhResTableElement *NewElement)
{
  mhResTableElement *v2; // edi@1
  mhResTableManager *v3; // esi@1
  mhReturnType result; // eax@2
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v5; // eax@6
  std::pair<int,mhResTableElement *> pairNewElement; // [sp+8h] [bp-8h]@3

  v2 = NewElement;
  v3 = this;
  if ( NewElement )
  {
    NewElement = (mhResTableElement *)NewElement->m_ElementID;
    std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
      (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)this,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&pairNewElement.baseclass_0.second,
      (OscTarget *)&NewElement);
    if ( pairNewElement.baseclass_0.second != (mhResTableElement *)v3->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead
      && *std::map<int_mhObject___std::less<int>_std::allocator<std::pair<int_const_mhObject__>>>::operator__(
            (std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > > *)v3,
            (const int *)&NewElement) )
    {
      result = 1;
    }
    else
    {
      pairNewElement.baseclass_0.first = v2->m_ElementID;
      pairNewElement.baseclass_0.second = v2;
      v5 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
             (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v3,
             (std::pair<int const ,int> *)&pairNewElement);
      std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::_Linsert(
        (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v3,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > >,bool> *)&pairNewElement,
        v5,
        0);
      result = 4 * (LOBYTE(pairNewElement.baseclass_0.second) == 0) + 1;
    }
  }
  else
  {
    result = (mhReturnType)&NewElement->baseclass_0.m_pNiNode;
  }
  return result;
}

//----- (006CCA60) --------------------------------------------------------
mhReturnType __thiscall mhResTableManager::AddTexElement(mhResTableManager *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *TexFileName, int iTexID)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@3
  NiSourceTexture *v5; // edi@3
  NiSourceTexture *v6; // esi@8
  NiImageConverter *v7; // eax@9
  NiPixelData *v8; // eax@9
  int v9; // ebx@16
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v10; // eax@16
  NiSourceTexture *v11; // esi@20
  char *v12; // eax@22
  mhReturnType v13; // eax@32
  NiTexture::FormatPrefs kPrefs; // [sp+0h] [bp-50h]@11
  std::pair<int,NiPointer<NiSourceTexture> > PairNewElement; // [sp+Ch] [bp-44h]@14
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >,bool> pairResult; // [sp+14h] [bp-3Ch]@1
  char *pcText; // [sp+1Ch] [bp-34h]@1
  NiPointer<NiSourceTexture> spNewTex; // [sp+20h] [bp-30h]@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+24h] [bp-2Ch]@3
  unsigned int v20; // [sp+40h] [bp-10h]@1
  int v21; // [sp+4Ch] [bp-4h]@3
  int v22; // [sp+50h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v3 = TexFileName;
  *(_DWORD *)&pairResult.baseclass_0.second = this;
  pcText = (char *)TexFileName;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &Folder::m_acMHObj, TexFileName);
  v5 = 0;
  v21 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(TexFileName, v4);
  v21 = -1;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  if ( TexFileName->baseclass_0._Myres >= 0x10 )
    v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&TexFileName->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 )
  {
    v7 = NiImageConverter::GetImageConverter();
    v8 = (NiPixelData *)((int (__thiscall *)(NiImageConverter *, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *, _DWORD))v7->baseclass_0.vfptr[2].__vecDelDtor)(
                          v7,
                          v3,
                          0);
    if ( v8 )
    {
      kPrefs.m_ePixelLayout = 6;
      kPrefs.m_eAlphaFmt = 3;
      kPrefs.m_eMipMapped = 0;
      v6 = NiSourceTexture::Create(v8, &kPrefs);
    }
    else
    {
      v6 = 0;
    }
  }
  else
  {
    v6 = 0;
  }
  spNewTex.m_pObject = v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v21 = 1;
  PairNewElement.baseclass_0.second.m_pObject = 0;
  LOBYTE(v21) = 2;
  PairNewElement.baseclass_0.first = iTexID;
  if ( v6 )
  {
    v5 = v6;
    PairNewElement.baseclass_0.second.m_pObject = v6;
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v9 = *(_DWORD *)&pairResult.baseclass_0.second;
  v10 = (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)std::_Tree_val<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Buynode<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>((std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)(*(_DWORD *)&pairResult.baseclass_0.second + 16), (std::pair<unsigned long const ,NiPointer<NiControllerSequence> > *)&PairNewElement);
  std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > *)(v9 + 16),
    &pairResult,
    v10,
    0);
  if ( pairResult.baseclass_0.second )
  {
    LOBYTE(v21) = 1;
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v21 = -1;
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v13 = 1;
  }
  else
  {
    if ( v6 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      v11 = 0;
      spNewTex.m_pObject = 0;
    }
    else
    {
      v11 = spNewTex.m_pObject;
    }
    v12 = pcText;
    if ( *((_DWORD *)pcText + 5) >= 0x10u )
      v12 = *(char **)pcText;
    if ( NiMessageBox::ms_pfnMessageBox )
      NiMessageBox::ms_pfnMessageBox(v12, "Loading Error!", 0);
    LOBYTE(v21) = 1;
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v21 = -1;
    if ( v11 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    v13 = 5;
  }
  return v13;
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006CCC70) --------------------------------------------------------
NiPointer<NiSourceTexture> *__thiscall mhResTableManager::GetTexElement(mhResTableManager *this, NiPointer<NiSourceTexture> *result, int TexID)
{
  mhResTableManager *v3; // edi@1
  NiPointer<NiSourceTexture> *v4; // eax@2
  NiSourceTexture *v5; // eax@3
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *itResult; // [sp+8h] [bp-4h]@1

  v3 = this;
  itResult = 0;
  std::_Tree<std::_Tmap_traits<enum__MHE_STEP_ResElement___std::less<enum__MHE_STEP>_std::allocator<std::pair<enum__MHE_STEP_const_ResElement__>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const ,std::multimap<float,Eff *)&this->m_mapResTex,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<enum OscTarget,std::multimap<float,EffectViewInfo *,std::less<float>,std::allocator<std::pair<float const ,EffectViewInfo *> > > *,std::less<enum OscTarget>,std::allocator<std::pair<enum OscTarget const *)&itResult,
    (OscTarget *)&TexID);
  if ( itResult == v3->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v4 = result;
    result->m_pObject = 0;
  }
  else
  {
    v5 = std::map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>::operator__(
           &v3->m_mapResTex,
           &TexID)->m_pObject;
    result->m_pObject = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    v4 = result;
  }
  return v4;
}

//----- (006CCCE0) --------------------------------------------------------
void __thiscall mhResTableManager::_mhResTableManager(mhResTableManager *this)
{
  mhResTableManager *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v2; // ST08_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > v3; // ST04_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // ST08_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v5; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > result; // [sp+0h] [bp-18h]@1
  std::map<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > > > *v7; // [sp+4h] [bp-14h]@1
  mhResTableManager *v8; // [sp+8h] [bp-10h]@1
  int v9; // [sp+14h] [bp-4h]@1

  v1 = this;
  v8 = this;
  v9 = 1;
  mhResTableManager::Clear(this);
  v7 = &v1->m_mapResTex;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > >)v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v9) = 2;
  std::_Tree<std::_Tmap_traits<unsigned_int_NiPointer<NiNode>_std::less<unsigned_int>_std::allocator<std::pair<unsigned_int_const_NiPointer<NiNode>>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)&v1->m_mapResTex,
    &result,
    v3,
    v2);
  operator delete(v1->m_mapResTex.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v9 = 3;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)v1,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&result,
    v5,
    v4);
  operator delete(v1->m_mapResModel.baseclass_0.baseclass_0.baseclass_0._Myhead);
}

//----- (006CCD80) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right, unsigned int _Roff, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // esi@1
  unsigned int v6; // ecx@1
  unsigned int v7; // eax@2
  unsigned int v8; // edi@3
  unsigned int v9; // eax@3
  int v10; // ebx@8
  unsigned int v11; // eax@10
  unsigned int v12; // eax@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // ecx@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v16; // ecx@22
  unsigned int v17; // edx@23
  unsigned int v18; // eax@25
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v19; // ecx@26
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v20; // eax@34
  bool v21; // cf@37
  int _Num; // [sp+1Ch] [bp+14h]@8

  v5 = this;
  v6 = this->baseclass_0._Mysize;
  if ( v6 < _Off || (v7 = _Right->baseclass_0._Mysize, v7 < _Roff) )
    std::_Xout_of_range("invalid string position");
  v8 = _Count;
  v9 = v7 - _Roff;
  if ( v9 < _Count )
    v8 = v9;
  if ( -1 - v6 <= v8 )
    std::_Xlength_error("string too long");
  if ( !v8 )
    return v5;
  v10 = v6 + v8;
  _Num = v6 + v8;
  if ( v6 + v8 > 0xFFFFFFFE )
    std::_Xlength_error("string too long");
  v11 = v5->baseclass_0._Myres;
  if ( v11 < v10 )
  {
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v5, v6 + v8, v6);
    if ( v10 )
    {
LABEL_12:
      v12 = v5->baseclass_0._Myres;
      if ( v12 < 0x10 )
        v13 = v5;
      else
        v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v12 < 0x10 )
        v15 = v5;
      else
        v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
      memmove((char *)v15 + _Off + v8, (char *)v13 + _Off, v5->baseclass_0._Mysize - _Off);
      v16 = _Right;
      if ( v5 == _Right )
      {
        v17 = _Roff + v8;
        if ( _Off >= _Roff )
          v17 = _Roff;
        v18 = v5->baseclass_0._Myres;
        if ( v18 < 0x10 )
          v19 = v5;
        else
          v19 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v18 < 0x10 )
          memmove((char *)v5 + _Off, (char *)v19 + v17, v8);
        else
          memmove((char *)(_Off + *(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0]), (char *)v19 + v17, v8);
      }
      else
      {
        if ( _Right->baseclass_0._Myres >= 0x10 )
          v16 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v5->baseclass_0._Myres < 0x10 )
          v20 = v5;
        else
          v20 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
        memcpy((char *)v20 + _Off, (char *)v16 + _Roff, v8);
      }
      v21 = v5->baseclass_0._Myres < 0x10;
      v5->baseclass_0._Mysize = _Num;
      if ( !v21 )
      {
        *(_BYTE *)(*(_DWORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[0] + _Num) = 0;
        return v5;
      }
      v5->baseclass_0.___u0.baseclass_0.dummy[_Num] = 0;
    }
    return v5;
  }
  if ( v10 )
    goto LABEL_12;
  v5->baseclass_0._Mysize = 0;
  if ( v11 < 0x10 )
  {
    result = v5;
    v5->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_BYTE **)&v5->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v5;
  }
  return result;
}

//----- (006CCF00) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *this, unsigned int _Off, const char *_Ptr, unsigned int _Count)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // esi@1
  unsigned int v5; // edx@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // ecx@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // ecx@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result; // eax@12
  unsigned int v9; // eax@13
  unsigned int v10; // edi@18
  unsigned int v11; // ecx@20
  unsigned int v12; // eax@22
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // ecx@23
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // eax@30
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@33
  bool v16; // cf@35

  v4 = this;
  if ( !_Ptr )
    goto LABEL_41;
  v5 = this->baseclass_0._Myres;
  if ( v5 >= 0x10 )
    this = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (unsigned int)_Ptr < (unsigned int)this
    || (v5 < 0x10 ? (v6 = v4) : (v6 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0]),
        (unsigned int)((char *)v6 + v4->baseclass_0._Mysize) <= (unsigned int)_Ptr) )
  {
LABEL_41:
    v9 = v4->baseclass_0._Mysize;
    if ( v9 < _Off )
      std::_Xout_of_range("invalid string position");
    if ( -1 - v9 <= _Count )
      std::_Xlength_error("string too long");
    if ( _Count )
    {
      v10 = v9 + _Count;
      if ( v9 + _Count > 0xFFFFFFFE )
        std::_Xlength_error("string too long");
      v11 = v4->baseclass_0._Myres;
      if ( v11 >= v10 )
      {
        if ( !v10 )
        {
          v4->baseclass_0._Mysize = 0;
          if ( v11 < 0x10 )
          {
            result = v4;
            v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            **(_BYTE **)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            result = v4;
          }
          return result;
        }
        goto LABEL_22;
      }
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::_Copy(v4, v10, v9);
      if ( v10 )
      {
LABEL_22:
        v12 = v4->baseclass_0._Myres;
        if ( v12 < 0x10 )
          v13 = v4;
        else
          v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v12 < 0x10 )
          v14 = v4;
        else
          v14 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
        memmove((char *)v14 + _Off + _Count, (char *)v13 + _Off, v4->baseclass_0._Mysize - _Off);
        if ( v4->baseclass_0._Myres < 0x10 )
          v15 = v4;
        else
          v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
        memcpy((char *)v15 + _Off, (char *)_Ptr, _Count);
        v16 = v4->baseclass_0._Myres < 0x10;
        v4->baseclass_0._Mysize = v10;
        if ( !v16 )
        {
          *(_BYTE *)(*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] + v10) = 0;
          return v4;
        }
        v4->baseclass_0.___u0.baseclass_0.dummy[v10] = 0;
        return v4;
      }
    }
    return v4;
  }
  if ( v5 < 0x10 )
    v7 = v4;
  else
    v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(
           v4,
           _Off,
           v4,
           _Ptr - (const char *)v7,
           _Count);
}

//----- (006CD050) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Buynode<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>(std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *this, std::pair<unsigned long const ,NiPointer<NiControllerSequence> > *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *v2; // edi@1
  void *v3; // eax@1
  void *v4; // esi@1
  int v5; // eax@2
  std::pair<unsigned long const ,NiPointer<NiControllerSequence> > *v6; // ecx@3
  NiControllerSequence *v7; // ecx@3
  std::exception thisa; // [sp+8h] [bp-Ch]@6

  v2 = this;
  v3 = operator new(0x18u);
  v4 = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 1) = v2->baseclass_0._Myhead;
  *((_DWORD *)v3 + 2) = v2->baseclass_0._Myhead;
  v5 = (int)((char *)v3 + 12);
  *((_WORD *)v4 + 10) = 0;
  if ( v4 != (void *)-12 )
  {
    v6 = _Val;
    *(_DWORD *)v5 = _Val->baseclass_0.first;
    v7 = v6->baseclass_0.second.m_pObject;
    *((_DWORD *)v4 + 4) = v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.m_uiRefCount);
  }
  return (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v4;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006CD0E0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(std::_Tree<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >,bool> *result, std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *_Node, bool _Leftish)
{
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v4; // edx@1
  std::_Tree<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > *v5; // edi@1
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v6; // ecx@1
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v7; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v8; // esi@1
  bool v9; // cl@1
  const int v10; // ebx@2
  std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *v11; // ebx@10
  int v12; // edx@12
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >,bool> *v13; // eax@12
  int v14; // ecx@15
  NiSourceTexture *v15; // esi@16
  bool _Addleft; // [sp+Ch] [bp-4h]@1

  v4 = _Node;
  v5 = this;
  v6 = this->baseclass_0.baseclass_0._Myhead;
  v7 = v6->_Parent;
  v8 = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v6;
  v9 = 1;
  _Addleft = 1;
  if ( !v7->_Isnil )
  {
    v10 = _Node->_Myval.baseclass_0.first;
    do
    {
      v8 = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v7;
      if ( _Leftish )
        v9 = v7->_Myval.baseclass_0.first >= v10;
      else
        v9 = v10 < v7->_Myval.baseclass_0.first;
      _Addleft = v9;
      if ( v9 )
        v7 = v7->_Left;
      else
        v7 = v7->_Right;
    }
    while ( !v7->_Isnil );
  }
  v11 = v8;
  *(_DWORD *)&_Leftish = v8;
  if ( v9 )
  {
    if ( (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)v8 == v5->baseclass_0.baseclass_0._Myhead->_Left )
    {
      v12 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
                          (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v5,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Leftish,
                          1,
                          v8,
                          (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Node)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v13 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v12;
      result->baseclass_0.second = 1;
      return v13;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Leftish);
    v11 = (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Leftish;
    v4 = _Node;
  }
  if ( (const signed int)v11->_Myval.baseclass_0.first >= v4->_Myval.baseclass_0.first )
  {
    v15 = v4->_Myval.baseclass_0.second.m_pObject;
    if ( v15 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v15 )
          v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      }
      v4 = _Node;
    }
    operator delete(v4);
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    result->baseclass_0.second = 0;
  }
  else
  {
    v14 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
                        (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v5,
                        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)&_Leftish,
                        _Addleft,
                        v8,
                        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v13 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v14;
    result->baseclass_0.second = 1;
  }
  return v13;
}

//----- (006CD1E0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(...)
{
  std::_Tree<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v6; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > > *v7; // eax@2
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v8; // eax@7
  int v9; // ecx@20
  char v10; // [sp+8h] [bp-8h]@20

  v4 = this;
  v5 = this->baseclass_0.baseclass_0._Myhead;
  v6 = _Node;
  if ( !this->baseclass_0.baseclass_0._Mysize )
  {
    std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)this,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v5,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Node);
    return result;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)_Where == v5->_Left )
  {
    if ( _Node->_Myval.baseclass_0.first < *(_DWORD *)(*(_DWORD *)&_Where + 12) )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)this,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)_Where == v5 )
  {
    v8 = v5->_Right;
    if ( v8->_Myval.baseclass_0.first < _Node->_Myval.baseclass_0.first )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)this,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v8,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Node);
      return result;
    }
    goto LABEL_20;
  }
  if ( _Node->_Myval.baseclass_0.first >= *(_DWORD *)(*(_DWORD *)&_Where + 12)
    || (_Node = (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)_Where,
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_long_GuildNameCache::GuildNameStorage___std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_GuildNameCache::GuildNameStorage__>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
        _Node->_Myval.baseclass_0.first >= v6->_Myval.baseclass_0.first) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&_Where + 12) >= v6->_Myval.baseclass_0.first
      || (_Node = (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)_Where,
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&_Node),
          _Node != v4->baseclass_0.baseclass_0._Myhead)
      && v6->_Myval.baseclass_0.first >= _Node->_Myval.baseclass_0.first )
    {
LABEL_20:
      v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Linsert(
                         v4,
                         (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >,bool> *)&v10,
                         v6,
                         0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v7 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v7;
    }
    if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 21) )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)result,
        1,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v6);
      v7 = result;
    }
  }
  else
  {
    if ( _Node->_Right->_Isnil )
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)result,
        0,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)_Node,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v6);
      v7 = result;
    }
    else
    {
      std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > > *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> >::_Node *)v6);
      v7 = result;
    }
  }
  return v7;
}

//----- (006CD340) --------------------------------------------------------
NiPointer<NiSourceTexture> *__thiscall std::map<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>>::operator__(std::map<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > > > *this, const int *_Keyval)
{
  std::map<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > > > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v3; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > > v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > > v5; // edi@1
  const int v6; // ecx@8
  std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *v7; // eax@8
  NiPointer<NiSourceTexture> *result; // eax@8
  std::pair<unsigned long const ,NiPointer<NiControllerSequence> > _Val; // [sp+0h] [bp-18h]@8
  int v10; // [sp+8h] [bp-10h]@8
  int v11; // [sp+14h] [bp-4h]@8

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >)v3->_Parent;
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >)v3;
  while ( !*(_BYTE *)(*(_DWORD *)&v4 + 21) )
  {
    if ( *(_DWORD *)(*(_DWORD *)&v4 + 12) >= *_Keyval )
    {
      v5 = v4;
      v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > >)**(_DWORD **)&v4;
    }
    else
    {
      v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > > *)(*(_DWORD *)&v4 + 8);
    }
  }
  if ( (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)v5 != v2->baseclass_0.baseclass_0.baseclass_0._Myhead
    && *_Keyval >= *(_DWORD *)(*(_DWORD *)&v5 + 12) )
  {
    result = (NiPointer<NiSourceTexture> *)(*(_DWORD *)&v5 + 16);
  }
  else
  {
    v10 = 0;
    v6 = *_Keyval;
    v11 = 0;
    _Val.baseclass_0.first = v6;
    _Val.baseclass_0.second.m_pObject = 0;
    LOBYTE(v11) = 1;
    v7 = (std::_Tree_nod<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> >::_Node *)std::_Tree_val<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::_Buynode<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>((std::_Tree_val<std::_Tmap_traits<unsigned long,NiPointer<NiControllerSequence>,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,NiPointer<NiControllerSequence> > >,0> > *)v2, &_Val);
    std::_Tree<std::_Tmap_traits<int_NiPointer<NiSourceTexture>_std::less<int>_std::allocator<std::pair<int_const_NiPointer<NiSourceTexture>>>_0>>::_Insert(
      &v2->baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,NiPointer<NiSourceTexture>,std::less<int>,std::allocator<std::pair<int const ,NiPointer<NiSourceTexture> > >,0> > > *)&_Keyval,
      v5,
      v7);
    result = (NiPointer<NiSourceTexture> *)(_Keyval + 4);
  }
  return result;
}

//----- (006CD410) --------------------------------------------------------
mhReturnType __thiscall MiniHouseRoomInfo::Update(MiniHouseRoomInfo *this, float fTime)
{
  return 1;
}

//----- (006CD450) --------------------------------------------------------
mhReturnType __thiscall MiniHouseRoomInfo::Out(MiniHouseRoomInfo *this)
{
  return 1;
}

//----- (006CD460) --------------------------------------------------------
void __thiscall MiniHouseRoomInfo::_MiniHouseRoomInfo(MiniHouseRoomInfo *this)
{
  MiniHouseRoomInfo *v1; // esi@1

  v1 = this;
  if ( this->m_SelectedNodeName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_SelectedNodeName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_SelectedNodeName.baseclass_0._Myres = 15;
  v1->m_SelectedNodeName.baseclass_0._Mysize = 0;
  v1->m_SelectedNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (006CD490) --------------------------------------------------------
void __thiscall MiniHouseRoomInfo::SetRoofColiNodeName(MiniHouseRoomInfo *this)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > FullName; // [sp+0h] [bp-20h]@1
  unsigned int v2; // [sp+1Ch] [bp-4h]@1
  int v3; // [sp+20h] [bp+0h]@1

  v2 = (unsigned int)&v3 ^ __security_cookie;
  FullName.baseclass_0._Myres = 15;
  FullName.baseclass_0._Mysize = 0;
  FullName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &FullName,
    &mhRoomDefaultRootName_0,
    0,
    0xFFFFFFFFu);
  if ( FullName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&FullName);
}
// A85C00: using guessed type int __security_cookie;

//----- (006CD4E0) --------------------------------------------------------
void __thiscall MiniHouseRoomInfo::CullNoneTexType(MiniHouseRoomInfo *this, NiPointer<NiNode> CullNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ComponentName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *CullTexStyleName)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@1
  int v5; // edi@3
  int i; // esi@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@4
  int v8; // eax@6
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+0h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > CullOnNodeName; // [sp+1Ch] [bp-2Ch]@1
  unsigned int v11; // [sp+38h] [bp-10h]@1
  int v12; // [sp+44h] [bp-4h]@1
  int v13; // [sp+48h] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  v12 = 0;
  v4 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
         &result,
         &mhRoomDefaultRootName_0,
         ComponentName);
  LOBYTE(v12) = 1;
  std::operator_<char_std::char_traits<char>_std::allocator<char>>(&CullOnNodeName, v4, CullTexStyleName);
  LOBYTE(v12) = 3;
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  result.baseclass_0._Myres = 15;
  result.baseclass_0._Mysize = 0;
  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v5 = mhMiscUtil::GetNodeMaxNum(CullNode.m_pObject, &CullOnNodeName);
  for ( i = 0; i <= v5; ++i )
  {
    mhMiscUtil::MakeNodeNameNum(&CullOnNodeName, i, 3);
    v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&CullOnNodeName;
    if ( CullOnNodeName.baseclass_0._Myres < 0x10 )
      v7 = &CullOnNodeName;
    v8 = ((int (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))CullNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(v7);
    *(_WORD *)(v8 + 28) |= 1u;
    mhMiscUtil::DelNodeNameNum(&CullOnNodeName, 3);
  }
  if ( CullOnNodeName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&CullOnNodeName);
  CullOnNodeName.baseclass_0._Myres = 15;
  CullOnNodeName.baseclass_0._Mysize = 0;
  CullOnNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v12 = -1;
  if ( CullNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&CullNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( CullNode.m_pObject )
      CullNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)CullNode.m_pObject,
        1u);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006CD620) --------------------------------------------------------
mhReturnType __thiscall MiniHouseRoomInfo::Join(MiniHouseRoomInfo *this, NiPointer<NiNode> spMapNode, NiPointer<NiNode> spAttachDest, MiniHouseRoomInfo::TexStyleGroup NewTexStyleGroup)
{
  int v4; // eax@2
  bool v5; // zf@2
  MiniHouseRoomInfo *v6; // esi@2
  int v7; // eax@3
  mhRoomTexStyle v8; // eax@5
  mhRoomTexStyle v9; // eax@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // eax@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // esi@16
  unsigned int v12; // edi@19
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // esi@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v15; // eax@42
  NiRefObjectVtbl *v16; // edx@44
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@46
  int v18; // edx@48
  int v19; // ebx@48
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v20; // eax@49
  bool v21; // cf@51
  int v22; // ecx@51
  int v23; // edx@51
  int v24; // eax@51
  long double v25; // st7@51
  double v26; // st7@51
  const char *v27; // eax@51
  int v28; // ebx@58
  int v29; // esi@58
  unsigned int v30; // edi@58
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v31; // eax@59
  NiRefObjectVtbl *v32; // edx@61
  int v33; // eax@61
  int v34; // ecx@62
  int v35; // edx@62
  long double v36; // st7@62
  int v37; // ecx@62
  double v38; // st7@62
  NiRefObjectVtbl *v39; // edx@62
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v41; // [sp+18h] [bp-154h]@7
  int v42; // [sp+1Ch] [bp-150h]@7
  unsigned int v43; // [sp+20h] [bp-14Ch]@7
  unsigned int v44; // [sp+24h] [bp-148h]@1
  int spObject; // [sp+34h] [bp-138h]@44
  MiniHouseRoomInfo *thisa; // [sp+38h] [bp-134h]@1
  int MaxNodeNum; // [sp+3Ch] [bp-130h]@39
  int j; // [sp+40h] [bp-12Ch]@45
  int NodeNum; // [sp+44h] [bp-128h]@39
  float v50; // [sp+48h] [bp-124h]@51
  int i; // [sp+4Ch] [bp-120h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > **MaxCollNodeNum; // [sp+50h] [bp-11Ch]@40
  mhRoomTexStyle v53; // [sp+54h] [bp-118h]@1
  mhRoomTexStyle v54; // [sp+58h] [bp-114h]@1
  mhRoomTexStyle v55; // [sp+5Ch] [bp-110h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Temp; // [sp+60h] [bp-10Ch]@58
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > NewNodeName; // [sp+7Ch] [bp-F0h]@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > RoomComponentName; // [sp+98h] [bp-D4h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > RoomTexStyleName; // [sp+B4h] [bp-B8h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > RoomCullTexStyleName; // [sp+D0h] [bp-9Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > AllCullComponentNodeName; // [sp+ECh] [bp-80h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+108h] [bp-64h]@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > CollNodeName; // [sp+124h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > AllComponentNodeName; // [sp+140h] [bp-2Ch]@1
  unsigned int v65; // [sp+15Ch] [bp-10h]@1
  int v66; // [sp+168h] [bp-4h]@1
  int v67; // [sp+16Ch] [bp+0h]@1

  v65 = (unsigned int)&v67 ^ __security_cookie;
  v44 = (unsigned int)&v67 ^ __security_cookie;
  v53 = (signed int)NewTexStyleGroup.m_eRoomComponent[0];
  thisa = this;
  v54 = NewTexStyleGroup.m_eRoomComponent[1];
  v55 = NewTexStyleGroup.m_eRoomComponent[2];
  v66 = 0;
  this->m_spRoomNiNode = spMapNode.m_pObject;
  RoomTexStyleName.baseclass_0._Myres = 15;
  RoomTexStyleName.baseclass_0._Mysize = 0;
  RoomTexStyleName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  RoomCullTexStyleName.baseclass_0._Myres = 15;
  RoomCullTexStyleName.baseclass_0._Mysize = 0;
  RoomCullTexStyleName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  RoomComponentName.baseclass_0._Myres = 15;
  RoomComponentName.baseclass_0._Mysize = 0;
  RoomComponentName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  AllComponentNodeName.baseclass_0._Myres = 15;
  AllComponentNodeName.baseclass_0._Mysize = 0;
  AllComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  AllCullComponentNodeName.baseclass_0._Myres = 15;
  AllCullComponentNodeName.baseclass_0._Mysize = 0;
  AllCullComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v66) = 6;
  CollNodeName.baseclass_0._Myres = 15;
  CollNodeName.baseclass_0._Mysize = 0;
  CollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &CollNodeName,
    &mhCollisionParentName_2,
    0,
    0xFFFFFFFFu);
  LOBYTE(v66) = 7;
  i = 0;
  do
  {
    v4 = i;
    v5 = i == 0;
    v6 = thisa;
    thisa->m_RoomTexStyles.m_eRoomComponent[i] = *((_DWORD *)&v53 + i);
    if ( !v5 )
    {
      v7 = v4 - 1;
      if ( v7 )
      {
        if ( v7 != 1 )
          goto LABEL_16;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &RoomComponentName,
          &mhRoomRoofName_1,
          0,
          0xFFFFFFFFu);
        v8 = v6->m_RoomTexStyles.m_eRoomComponent[2];
        if ( v8 )
        {
          if ( v8 != 1 )
            goto LABEL_16;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &RoomTexStyleName,
            &mhRoomTexStyleCustomName_0,
            0,
            0xFFFFFFFFu);
          v43 = -1;
          *(float *)&v42 = 0.0;
          v41 = &mhRoomTexStyleTileName_0;
          goto LABEL_15;
        }
      }
      else
      {
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &RoomComponentName,
          &mhRoomWallName_2,
          0,
          0xFFFFFFFFu);
        v9 = v6->m_RoomTexStyles.m_eRoomComponent[1];
        if ( v9 )
        {
          if ( v9 != 1 )
            goto LABEL_16;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
            &RoomTexStyleName,
            &mhRoomTexStyleCustomName_0,
            0,
            0xFFFFFFFFu);
          v43 = -1;
          *(float *)&v42 = 0.0;
          v41 = &mhRoomTexStyleTileName_0;
          goto LABEL_15;
        }
      }
LABEL_14:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &RoomTexStyleName,
        &mhRoomTexStyleTileName_0,
        0,
        0xFFFFFFFFu);
      v43 = -1;
      *(float *)&v42 = 0.0;
      v41 = &mhRoomTexStyleCustomName_0;
      goto LABEL_15;
    }
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &RoomComponentName,
      &mhRoomFloorName_2,
      0,
      0xFFFFFFFFu);
    if ( !v6->m_RoomTexStyles.m_eRoomComponent[0] )
      goto LABEL_14;
    if ( v6->m_RoomTexStyles.m_eRoomComponent[0] != 1 )
      goto LABEL_16;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &RoomTexStyleName,
      &mhRoomTexStyleCustomName_0,
      0,
      0xFFFFFFFFu);
    v43 = -1;
    *(float *)&v42 = 0.0;
    v41 = &mhRoomTexStyleTileName_0;
LABEL_15:
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&RoomCullTexStyleName, v41, v42, v43);
LABEL_16:
    v10 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
            &NewNodeName,
            &mhRoomDefaultRootName_0,
            &RoomComponentName);
    LOBYTE(v66) = 8;
    v11 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, v10, &RoomTexStyleName);
    if ( &AllComponentNodeName == v11 )
    {
      v12 = 15;
    }
    else
    {
      if ( AllComponentNodeName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&AllComponentNodeName);
      v12 = 15;
      AllComponentNodeName.baseclass_0._Myres = 15;
      AllComponentNodeName.baseclass_0._Mysize = 0;
      AllComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( v11->baseclass_0._Myres >= 0x10 )
      {
        *(_DWORD *)&AllComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0];
        *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
      else
      {
        v43 = v11->baseclass_0._Mysize + 1;
        memmove(AllComponentNodeName.baseclass_0.___u0.baseclass_0.dummy, v11->baseclass_0.___u0.baseclass_0.dummy, v43);
      }
      AllComponentNodeName.baseclass_0._Mysize = v11->baseclass_0._Mysize;
      AllComponentNodeName.baseclass_0._Myres = v11->baseclass_0._Myres;
      v11->baseclass_0._Myres = 15;
      v11->baseclass_0._Mysize = 0;
      v11->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
    result.baseclass_0._Myres = v12;
    result.baseclass_0._Mysize = 0;
    result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v66) = 7;
    if ( NewNodeName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NewNodeName);
    v13 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
            &NewNodeName,
            &mhRoomDefaultRootName_0,
            &RoomComponentName);
    LOBYTE(v66) = 10;
    v14 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, v13, &RoomCullTexStyleName);
    if ( &AllCullComponentNodeName != v14 )
    {
      if ( AllCullComponentNodeName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&AllCullComponentNodeName);
      AllCullComponentNodeName.baseclass_0._Myres = v12;
      AllCullComponentNodeName.baseclass_0._Mysize = 0;
      AllCullComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( v14->baseclass_0._Myres >= 0x10 )
      {
        *(_DWORD *)&AllCullComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v14->baseclass_0.___u0.baseclass_0.dummy[0];
        *(_DWORD *)&v14->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
      else
      {
        v43 = v14->baseclass_0._Mysize + 1;
        memmove(
          AllCullComponentNodeName.baseclass_0.___u0.baseclass_0.dummy,
          v14->baseclass_0.___u0.baseclass_0.dummy,
          v43);
      }
      AllCullComponentNodeName.baseclass_0._Mysize = v14->baseclass_0._Mysize;
      AllCullComponentNodeName.baseclass_0._Myres = v14->baseclass_0._Myres;
      v14->baseclass_0._Myres = v12;
      v14->baseclass_0._Mysize = 0;
      v14->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    }
    if ( result.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result);
    result.baseclass_0._Myres = v12;
    result.baseclass_0._Mysize = 0;
    result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v66) = 7;
    if ( NewNodeName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&NewNodeName);
    MaxNodeNum = mhMiscUtil::GetNodeMaxNum(spMapNode.m_pObject, &AllComponentNodeName);
    for ( NodeNum = 0; NodeNum <= MaxNodeNum; ++NodeNum )
    {
      v43 = (unsigned int)&RoomCullTexStyleName;
      v42 = (int)&RoomComponentName;
      v41 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)spMapNode.m_pObject;
      MaxCollNodeNum = &v41;
      if ( spMapNode.m_pObject )
        InterlockedIncrement((volatile LONG *)&spMapNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      MiniHouseRoomInfo::CullNoneTexType(
        thisa,
        (NiPointer<NiNode>)v41,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v42,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v43);
      mhMiscUtil::MakeNodeNameNum(&AllComponentNodeName, NodeNum, 3);
      v15 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&AllComponentNodeName;
      if ( AllComponentNodeName.baseclass_0._Myres < 0x10 )
        v15 = &AllComponentNodeName;
      v16 = spMapNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v43 = (unsigned int)v15;
      spObject = ((int (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))v16[18].__vecDelDtor)(v15);
      if ( spObject )
      {
        MaxCollNodeNum = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)mhMiscUtil::GetNodeMaxNum(
                                                                                                    spMapNode.m_pObject,
                                                                                                    &CollNodeName);
        for ( j = 0; j <= (signed int)MaxCollNodeNum; ++j )
        {
          mhMiscUtil::MakeNodeNameNum(&CollNodeName, j, 3);
          v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&CollNodeName;
          if ( CollNodeName.baseclass_0._Myres < 0x10 )
            v17 = &CollNodeName;
          v18 = *(_DWORD *)spObject;
          v43 = (unsigned int)v17;
          v19 = (*(int (__stdcall **)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))(v18 + 72))(v17);
          if ( v19 )
          {
            v20 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                    &result,
                    &RoomComponentName,
                    &RoomTexStyleName);
            LOBYTE(v66) = 12;
            std::operator_<char_std::char_traits<char>_std::allocator<char>>(&NewNodeName, v20, &CollNodeName);
            LOBYTE(v66) = 14;
            if ( result.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&result);
            v21 = NewNodeName.baseclass_0._Myres < 0x10;
            v22 = *(_DWORD *)(v19 + 140);
            v50 = *(float *)(v19 + 152);
            v23 = *(_DWORD *)(v19 + 144);
            v24 = *(_DWORD *)(v19 + 148);
            v25 = fabs(v50);
            *(_DWORD *)(v19 + 88) = v22;
            v50 = v25;
            v26 = v50;
            *(_DWORD *)(v19 + 92) = v23;
            *(float *)(v19 + 100) = v26;
            *(_DWORD *)(v19 + 96) = v24;
            v27 = *(const char **)&NewNodeName;
            result.baseclass_0._Myres = 15;
            result.baseclass_0._Mysize = 0;
            result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            memcpy((void *)(v19 + 52), (const void *)(v19 + 104), 0x24u);
            if ( v21 )
              v27 = (const char *)&NewNodeName;
            NiObjectNET::SetName((NiObjectNET *)v19, v27);
            *(_WORD *)(v19 + 28) &= 0xFFFEu;
            ((void (__stdcall *)(int, signed int))spAttachDest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
              v19,
              1);
            LOBYTE(v66) = 7;
            if ( NewNodeName.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&NewNodeName);
          }
          mhMiscUtil::DelNodeNameNum(&CollNodeName, 3);
        }
      }
      mhMiscUtil::DelNodeNameNum(&AllComponentNodeName, 3);
    }
    ++i;
  }
  while ( i < 3 );
  v28 = 0;
  Temp.baseclass_0._Myres = 15;
  Temp.baseclass_0._Mysize = 0;
  Temp.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v66) = 15;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Temp, &mhRoomBlockName_0, 0, 0xFFFFFFFFu);
  v29 = mhMiscUtil::GetNodeMaxNum(spMapNode.m_pObject, &Temp);
  MaxNodeNum = v29;
  v30 = 16;
  if ( v29 >= 0 )
  {
    do
    {
      mhMiscUtil::MakeNodeNameNum(&CollNodeName, v28, 3);
      v31 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&CollNodeName;
      if ( CollNodeName.baseclass_0._Myres < v30 )
        v31 = &CollNodeName;
      v32 = spMapNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v43 = (unsigned int)v31;
      v33 = ((int (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))v32[18].__vecDelDtor)(v31);
      if ( v33 )
      {
        v34 = *(_DWORD *)(v33 + 140);
        v35 = *(_DWORD *)(v33 + 144);
        *(float *)&MaxCollNodeNum = *(float *)(v33 + 152);
        v36 = *(float *)&MaxCollNodeNum;
        *(_DWORD *)(v33 + 88) = v34;
        v37 = *(_DWORD *)(v33 + 148);
        *(_DWORD *)(v33 + 92) = v35;
        *(float *)&MaxCollNodeNum = fabs(v36);
        v38 = *(float *)&MaxCollNodeNum;
        *(_DWORD *)(v33 + 96) = v37;
        *(float *)(v33 + 100) = v38;
        *(_WORD *)(v33 + 28) &= 0xFFFEu;
        memcpy((void *)(v33 + 52), (const void *)(v33 + 104), 0x24u);
        v39 = spAttachDest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v43 = 1;
        v42 = v33;
        ((void (__stdcall *)(int, signed int))v39[29].__vecDelDtor)(v33, 1);
        v29 = MaxNodeNum;
        v30 = 16;
      }
      mhMiscUtil::DelNodeNameNum(&CollNodeName, 3);
      ++v28;
    }
    while ( v28 <= v29 );
  }
  NiAVObject::Update(&spAttachDest.m_pObject->baseclass_0, 0.0, 1);
  NiAVObject::UpdateProperties(&spAttachDest.m_pObject->baseclass_0);
  NiAVObject::UpdateEffects(&spAttachDest.m_pObject->baseclass_0);
  if ( Temp.baseclass_0._Myres >= v30 )
    operator delete(*(void **)&Temp);
  Temp.baseclass_0._Myres = 15;
  Temp.baseclass_0._Mysize = 0;
  Temp.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( CollNodeName.baseclass_0._Myres >= v30 )
    operator delete(*(void **)&CollNodeName);
  CollNodeName.baseclass_0._Myres = 15;
  CollNodeName.baseclass_0._Mysize = 0;
  CollNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( AllCullComponentNodeName.baseclass_0._Myres >= v30 )
    operator delete(*(void **)&AllCullComponentNodeName);
  AllCullComponentNodeName.baseclass_0._Myres = 15;
  AllCullComponentNodeName.baseclass_0._Mysize = 0;
  AllCullComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( AllComponentNodeName.baseclass_0._Myres >= v30 )
    operator delete(*(void **)&AllComponentNodeName);
  AllComponentNodeName.baseclass_0._Myres = 15;
  AllComponentNodeName.baseclass_0._Mysize = 0;
  AllComponentNodeName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( RoomComponentName.baseclass_0._Myres >= v30 )
    operator delete(*(void **)&RoomComponentName);
  RoomComponentName.baseclass_0._Myres = 15;
  RoomComponentName.baseclass_0._Mysize = 0;
  RoomComponentName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( RoomCullTexStyleName.baseclass_0._Myres >= v30 )
    operator delete(*(void **)&RoomCullTexStyleName);
  RoomCullTexStyleName.baseclass_0._Myres = 15;
  RoomCullTexStyleName.baseclass_0._Mysize = 0;
  RoomCullTexStyleName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( RoomTexStyleName.baseclass_0._Myres >= v30 )
    operator delete(*(void **)&RoomTexStyleName);
  RoomTexStyleName.baseclass_0._Myres = 15;
  RoomTexStyleName.baseclass_0._Mysize = 0;
  RoomTexStyleName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v66) = 0;
  if ( spMapNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spMapNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && spMapNode.m_pObject )
    spMapNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)spMapNode.m_pObject,
      1u);
  v66 = -1;
  if ( spAttachDest.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spAttachDest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && spAttachDest.m_pObject )
    spAttachDest.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)spAttachDest.m_pObject,
      1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006CDEB0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Right)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@1

  v3 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(_Left, _Right, 0, 0xFFFFFFFFu);
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, v3);
  return result;
}

//----- (006CDEF0) --------------------------------------------------------
void __cdecl mhMiscUtil::MakeNumToStr(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ResultStr, int Num, int Cipher)
{
  char charNum[10]; // [sp+0h] [bp-10h]@1
  unsigned int v4; // [sp+Ch] [bp-4h]@1
  int v5; // [sp+10h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  *(_DWORD *)charNum = 808464432;
  *(_DWORD *)&charNum[4] = 808464432;
  *(_WORD *)&charNum[8] = 12336;
  _itoa(Num, charNum, 10);
}
// A85C00: using guessed type int __security_cookie;

//----- (006CDF40) --------------------------------------------------------
void __cdecl mhMiscUtil::DelNodeNameNum(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *NodeName, int Cipher)
{
  int v2; // eax@1

  v2 = NodeName->baseclass_0._Mysize;
  if ( Cipher <= v2 )
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(NodeName, v2 - Cipher, Cipher);
}

//----- (006CDF60) --------------------------------------------------------
int __cdecl mhMiscUtil::GetNumFromNodeName(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *SrcName, unsigned int uiStrSize, int Cipher)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1

  v3 = SrcName;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(SrcName, 0, uiStrSize);
  if ( SrcName->baseclass_0._Myres >= 0x10 )
    v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&SrcName->baseclass_0.___u0.baseclass_0.dummy[0];
  return atoi(v3->baseclass_0.___u0.baseclass_0.dummy);
}

//----- (006CDF90) --------------------------------------------------------
void __cdecl mhMiscUtil::InputStrFileName(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Org, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Input)
{
  unsigned int v2; // eax@1
  char _Ptr; // [sp+4h] [bp-4h]@1

  _Ptr = 46;
  v2 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(Org, &_Ptr, 0, 1u);
  if ( v2 )
  {
    if ( v2 < Org->baseclass_0._Mysize )
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(Org, v2, Input, 0, 0xFFFFFFFFu);
  }
}

//----- (006CDFD0) --------------------------------------------------------
void __cdecl mhMiscUtil::MakeNodeNameNum(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *NodeName, int NodeNum, int Cipher)
{
  int i; // edi@3
  unsigned int v4; // ecx@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // edx@6
  unsigned int v6; // eax@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // ecx@9
  unsigned int v8; // edx@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v9; // ecx@15
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // ecx@18
  char v11; // [sp-4h] [bp-1Ch]@12
  char Num[5]; // [sp+Ch] [bp-Ch]@3
  unsigned int v13; // [sp+14h] [bp-4h]@1
  int v14; // [sp+18h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  if ( Cipher <= 6 )
  {
    if ( (unsigned int)NodeNum <= 0x2710 )
    {
      *(_DWORD *)Num = 808464432;
      Num[4] = 48;
      _itoa(NodeNum, Num, 10);
      for ( i = Cipher - 1; i >= 0; --i )
      {
        if ( Num[i] )
        {
          v4 = NodeName->baseclass_0._Myres;
          if ( v4 < 0x10 )
            v5 = NodeName;
          else
            v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&NodeName->baseclass_0.___u0.baseclass_0.dummy[0];
          v6 = (unsigned int)((char *)v5 + NodeName->baseclass_0._Mysize);
          if ( v4 < 0x10 )
            v7 = NodeName;
          else
            v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&NodeName->baseclass_0.___u0.baseclass_0.dummy[0];
          if ( v6 )
          {
            v6 -= (unsigned int)v7;
            v11 = Num[i];
          }
          else
          {
            v11 = Num[i];
          }
        }
        else
        {
          v8 = NodeName->baseclass_0._Myres;
          if ( v8 < 0x10 )
            v9 = NodeName;
          else
            v9 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&NodeName->baseclass_0.___u0.baseclass_0.dummy[0];
          v6 = (unsigned int)((char *)v9 + NodeName->baseclass_0._Mysize);
          if ( v8 < 0x10 )
            v10 = NodeName;
          else
            v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&NodeName->baseclass_0.___u0.baseclass_0.dummy[0];
          if ( v6 )
            v6 -= (unsigned int)v10;
          v11 = 48;
        }
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::insert(NodeName, v6, 1u, v11);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006CE0A0) --------------------------------------------------------
int __cdecl mhMiscUtil::GetNodeMaxNum(NiNode *FindDestNode, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *NodeName)
{
  int result; // eax@4
  int v3; // esi@5
  unsigned int v4; // eax@6
  int RetValue; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > FindName; // [sp+4h] [bp-2Ch]@1
  unsigned int v7; // [sp+20h] [bp-10h]@1
  int v8; // [sp+2Ch] [bp-4h]@1
  int v9; // [sp+30h] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  RetValue = -1;
  FindName.baseclass_0._Myres = 15;
  FindName.baseclass_0._Mysize = 0;
  FindName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&FindName, NodeName, 0, 0xFFFFFFFFu);
  v8 = 0;
  if ( FindDestNode )
  {
    v3 = 0;
    do
    {
      mhMiscUtil::MakeNodeNameNum(&FindName, v3, 3);
      v4 = *(_DWORD *)&FindName;
      if ( FindName.baseclass_0._Myres < 0x10 )
        v4 = (unsigned int)&FindName;
      if ( !(int)FindDestNode->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                   (NiRefObject *)FindDestNode,
                   v4) )
        break;
      RetValue = v3;
      if ( (signed int)FindName.baseclass_0._Mysize >= 3 )
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
          &FindName,
          FindName.baseclass_0._Mysize - 3,
          3u);
      ++v3;
    }
    while ( v3 < 100 );
    if ( FindName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&FindName);
    result = RetValue;
  }
  else
  {
    if ( FindName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&FindName);
    result = -1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006CE190) --------------------------------------------------------
void __cdecl mhMiscUtil::GetLoadModelFileName(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *IndexName, mhMiscUtil::ModelType type)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@5
  void *v4; // [sp-Ch] [bp-54h]@4
  void *p; // [sp+0h] [bp-48h]@5
  unsigned int v6; // [sp+14h] [bp-34h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+1Ch] [bp-2Ch]@3
  unsigned int v8; // [sp+38h] [bp-10h]@1
  int v9; // [sp+44h] [bp-4h]@3
  int v10; // [sp+48h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  if ( !type )
  {
    v3 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
           (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
           IndexName,
           ".nif");
    v9 = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(IndexName, v3);
    if ( v6 < 0x10 )
      return;
    v4 = p;
    goto LABEL_7;
  }
  if ( type == 1 )
  {
    v2 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, IndexName, ".kfm");
    v9 = 1;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(IndexName, v2);
    if ( result.baseclass_0._Myres >= 0x10 )
    {
      v4 = *(void **)&result;
LABEL_7:
      operator delete(v4);
      return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006CE250) --------------------------------------------------------
bool __thiscall ResElement::CloneResElement(ResElement *this, ResElement *pSrcResElement, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName)
{
  NiActorManager *v3; // edx@3
  NiPointer<NiD3DDefaultShader> *v5; // esi@9
  NiActorManager *v6; // eax@9
  NiObjectNET *v7; // eax@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // edx@11
  NiPointer<NiD3DDefaultShader> *v9; // esi@14
  NiObject *v10; // eax@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@16

  if ( !pSrcResElement )
    return 0;
  if ( pSrcResElement->m_bIsCanAnimation )
  {
    v3 = pSrcResElement->m_pActorMgr.m_pObject;
    if ( !v3 || !v3->m_spNIFRoot.m_pObject )
      return 0;
  }
  else
  {
    if ( !pSrcResElement->m_pNiNode.m_pObject )
      return 0;
  }
  this->m_bIsCanAnimation = pSrcResElement->m_bIsCanAnimation;
  if ( pSrcResElement->m_bIsCanAnimation )
  {
    v5 = (NiPointer<NiD3DDefaultShader> *)&this->m_pActorMgr;
    v6 = NiActorManager::Clone(pSrcResElement->m_pActorMgr.m_pObject);
    NiPointer<PopupMenuWin>::operator_(v5, (NiD3DDefaultShader *)v6);
    if ( v5->m_pObject )
    {
      v7 = (NiObjectNET *)v5->m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiImplementation;
      if ( v7 )
      {
        v8 = strRootName;
        if ( strRootName->baseclass_0._Myres >= 0x10 )
          v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strRootName->baseclass_0.___u0.baseclass_0.dummy[0];
        NiObjectNET::SetName(v7, v8->baseclass_0.___u0.baseclass_0.dummy);
        NiAVObject::Update((NiAVObject *)v5->m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiImplementation, 0.0, 1);
        NiAVObject::UpdateProperties((NiAVObject *)v5->m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiImplementation);
        OutputDebugStringA("----------MiniHouse ResNIFElementKFM CLONE Name is = ");
        OutputDebugStringA(*(LPCSTR *)(v5->m_pObject->baseclass_0.baseclass_0.baseclass_0.m_uiImplementation + 8));
        OutputDebugStringA("\n");
        return 1;
      }
    }
    return 0;
  }
  v9 = (NiPointer<NiD3DDefaultShader> *)&this->m_pNiNode;
  v10 = NiObject::Clone(&pSrcResElement->m_pNiNode.m_pObject->baseclass_0.baseclass_0.baseclass_0);
  NiPointer<PopupMenuWin>::operator_(v9, (NiD3DDefaultShader *)v10);
  if ( !v9->m_pObject )
    return 0;
  v11 = strRootName;
  if ( strRootName->baseclass_0._Myres >= 0x10 )
    v11 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strRootName->baseclass_0.___u0.baseclass_0.dummy[0];
  NiObjectNET::SetName((NiObjectNET *)v9->m_pObject, v11->baseclass_0.___u0.baseclass_0.dummy);
  NiAVObject::Update((NiAVObject *)v9->m_pObject, 0.0, 1);
  NiAVObject::UpdateProperties((NiAVObject *)v9->m_pObject);
  OutputDebugStringA("----------MiniHouse ResNIFElementNIF CLONE Name is = ");
  OutputDebugStringA(v9->m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pszName);
  OutputDebugStringA("\n");
  return 1;
}

//----- (006CE380) --------------------------------------------------------
bool __thiscall ResElement::LoadNIF(ResElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strFileName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@1
  ResElement *v4; // ebx@1
  NiNode *v5; // eax@3
  NiNode *v6; // esi@3
  NiNode *v7; // edi@3
  NiObjectNET *v8; // ecx@10
  bool result; // al@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // eax@12

  v3 = strFileName;
  v4 = this;
  if ( strFileName->baseclass_0._Myres >= 0x10 )
    v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strFileName->baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = PgUtil::LoadNifFile(v3->baseclass_0.___u0.baseclass_0.dummy, 0, 1);
  v6 = v4->m_pNiNode.m_pObject;
  v7 = v5;
  if ( v6 != v5 )
  {
    if ( v6
      && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v4->m_pNiNode.m_pObject = v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v8 = (NiObjectNET *)v4->m_pNiNode.m_pObject;
  if ( v8 )
  {
    v10 = strRootName;
    if ( strRootName->baseclass_0._Myres >= 0x10 )
      v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strRootName->baseclass_0.___u0.baseclass_0.dummy[0];
    NiObjectNET::SetName(v8, v10->baseclass_0.___u0.baseclass_0.dummy);
    OutputDebugStringA("----------MiniHouse ResNIFElement MAKE Name is = ");
    OutputDebugStringA(v4->m_pNiNode.m_pObject->baseclass_0.baseclass_0.m_pcName);
    OutputDebugStringA("\n");
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006CE420) --------------------------------------------------------
bool __thiscall ResElement::LoadKFM(ResElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strFileName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@1
  ResElement *v4; // ebx@1
  NiActorManager *v5; // eax@3
  NiActorManager *v6; // esi@3
  NiActorManager *v7; // edi@3
  NiActorManager *v8; // eax@10
  NiObjectNET *v9; // eax@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // edx@12
  bool result; // al@15

  v3 = strFileName;
  v4 = this;
  if ( strFileName->baseclass_0._Myres >= 0x10 )
    v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strFileName->baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = NiActorManager::Create(v3->baseclass_0.___u0.baseclass_0.dummy, 0, 1, 0);
  v6 = v4->m_pActorMgr.m_pObject;
  v7 = v5;
  if ( v6 != v5 )
  {
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v4->m_pActorMgr.m_pObject = v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
  }
  v8 = v4->m_pActorMgr.m_pObject;
  if ( v8 )
  {
    v9 = (NiObjectNET *)v8->m_spNIFRoot.m_pObject;
    if ( v9 )
    {
      v10 = strRootName;
      if ( strRootName->baseclass_0._Myres >= 0x10 )
        v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strRootName->baseclass_0.___u0.baseclass_0.dummy[0];
      NiObjectNET::SetName(v9, v10->baseclass_0.___u0.baseclass_0.dummy);
    }
    v4->m_bIsCanAnimation = 1;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006CE4C0) --------------------------------------------------------
bool __thiscall ResElement::CreateResElement(ResElement *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strFileName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *strRootName)
{
  ResElement *v3; // ebx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@2
  unsigned int v5; // esi@4
  char v6; // al@4
  bool result; // al@5

  v3 = this;
  if ( strFileName->baseclass_0._Myres < 0x10 )
    v4 = strFileName;
  else
    v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strFileName->baseclass_0.___u0.baseclass_0.dummy[0];
  v5 = (unsigned int)((char *)v4 + strFileName->baseclass_0._Mysize);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_FileName,
    strFileName,
    0,
    0xFFFFFFFFu);
  v6 = *(_BYTE *)(v5 - 1);
  if ( v6 == 102 )
  {
    result = ResElement::LoadNIF(v3, strFileName, strRootName);
  }
  else
  {
    if ( v6 == 109 )
      result = ResElement::LoadKFM(v3, strFileName, strRootName);
    else
      result = 0;
  }
  return result;
}

//----- (006CE530) --------------------------------------------------------
void __thiscall mhEditRoomWin::ShowComponent(mhEditRoomWin *this, bool b)
{
  char *v2; // edi@1
  signed int v3; // ebx@1
  int v4; // edi@3
  signed int v5; // ebx@3
  int v6; // edi@5
  signed int v7; // ebx@5
  int v8; // edi@7
  signed int v9; // ebx@7
  mhEditRoomWin *v10; // [sp+Ch] [bp-4h]@1

  v10 = this;
  v2 = (char *)this->m_apkmhItemInvIconWin;
  v3 = 392;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(b);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = (int)v10->m_apkmhItemInvWin;
  v5 = 49;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(b);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  v6 = (int)v10->m_pkItemProp;
  v7 = 4;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(b);
    v6 += 4;
    --v7;
  }
  while ( v7 );
  v8 = (int)v10->m_pkitemDisableBag;
  v9 = 2;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 - 8) + 256))(b);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(b);
    v8 += 4;
    --v9;
  }
  while ( v9 );
  ((void (__stdcall *)(_DWORD))v10->m_pkPanel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
}

//----- (006CE600) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnClose(mhEditRoomWin *this)
{
  HWND__ *v1; // ecx@1

  this->m_bOpen = 0;
  v1 = this->m_hWebWindow;
  if ( v1 )
    DestroyWindow(v1);
}

//----- (006CE620) --------------------------------------------------------
void __thiscall mhEditRoomWin::ReGenPos(mhEditRoomWin *this)
{
  mhEditRoomWin *v1; // esi@1
  int v2; // edx@1
  int v3; // eax@1
  int v4; // ecx@1

  v1 = this;
  v1->m_uiWebXPos = v1->m_uiPlaneWebXPos
                  + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1)
     + v1->m_uiPlaneWebYPos
     + 2;
  v3 = v1->m_uiPlaneWebWidth - 8;
  v4 = v1->m_uiPlaneWebHeight - 10;
  v1->m_uiWebYPos = v2;
  v1->m_uiWebWidth = v3;
  v1->m_uiWebHeight = v4;
}

//----- (006CE680) --------------------------------------------------------
unsigned int __thiscall mhEditRoomWin::GetInvIndex(mhEditRoomWin *this, unsigned int uiInvType, unsigned int uiMHItemInvindex)
{
  unsigned int result; // eax@2

  switch ( uiInvType )
  {
    case 0xDu:
      result = uiMHItemInvindex - 98 < 0x62 ? uiMHItemInvindex - 98 : 0;
      break;
    case 0xEu:
      result = uiMHItemInvindex - 196 < 0x62 ? uiMHItemInvindex - 196 : 0;
      break;
    case 0x10u:
      result = uiMHItemInvindex - 294 < 0x62 ? uiMHItemInvindex - 294 : 0;
      break;
    case 3u:
      result = uiMHItemInvindex < 0x62 ? uiMHItemInvindex : 0;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (006CE710) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnActivePage(mhEditRoomWin *this, unsigned int uiPage)
{
  signed int v2; // edi@2
  char *v3; // esi@2

  if ( uiPage < 2 )
  {
    v2 = 0;
    v3 = (char *)this->m_pkitemDisableBag;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v3 - 2) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(1);
      if ( v2 == uiPage )
      {
        (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v3 - 2) + 256))(1);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
        mhEditRoomWin::m_uiShowBagPage = v2;
      }
      ++v2;
      v3 += 4;
    }
    while ( v2 < 2 );
  }
}
// B67D00: using guessed type int mhEditRoomWin__m_uiShowBagPage;

//----- (006CE790) --------------------------------------------------------
unsigned int __thiscall mhEditRoomWin::GetMHItemInvIndex(mhEditRoomWin *this, unsigned int uiIndex, unsigned int uiInvtype)
{
  unsigned int result; // eax@1
  unsigned int v4; // ecx@2

  result = uiIndex;
  if ( uiIndex >= 0x62 )
  {
LABEL_8:
    result = 0;
  }
  else
  {
    v4 = uiInvtype;
    if ( uiInvtype == 65534 )
      v4 = mhEditRoomWin::m_uiInvType;
    switch ( v4 )
    {
      case 0xDu:
        result = uiIndex + 98;
        break;
      case 0xEu:
        result = uiIndex + 196;
        break;
      case 0x10u:
        result = uiIndex + 294;
        break;
      default:
        goto LABEL_8;
      case 3u:
        return result;
    }
  }
  return result;
}

//----- (006CE810) --------------------------------------------------------
mhItemInvIconWin *__thiscall mhEditRoomWin::GetInvIconWin(mhEditRoomWin *this, unsigned int uiType, unsigned int uiIndex)
{
  mhEditRoomWin *v3; // edi@1
  unsigned int v4; // esi@1
  ItemIcon *v5; // ecx@7
  mhItemInvIconWin *result; // eax@8

  v3 = this;
  v4 = uiIndex;
  if ( uiIndex >= 0x62 )
  {
LABEL_6:
    v4 = 0;
  }
  else
  {
    switch ( mhEditRoomWin::m_uiInvType )
    {
      case 0xDu:
        v4 = uiIndex + 98;
        break;
      case 0xEu:
        v4 = uiIndex + 196;
        break;
      case 0x10u:
        v4 = uiIndex + 294;
        break;
      default:
        goto LABEL_6;
      case 3u:
        break;
    }
  }
  v5 = (ItemIcon *)this->m_apkmhItemInvIconWin[v4];
  if ( v5 )
  {
    ItemIcon::GetItem(v5);
    result = v3->m_apkmhItemInvIconWin[v4];
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006CE8A0) --------------------------------------------------------
void __thiscall mhEditRoomWin::SetWorkTargetWin(mhEditRoomWin *this, mhItemInvIconWin *pIconWin, ITEM_INVEN kInven)
{
  this->m_pkWorkTargetWin = pIconWin;
  this->m_kWorkTargetInven.Inven = kInven.Inven;
}

//----- (006CE8C0) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnHelpLink(mhEditRoomWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MiniHomeEdit");
}

//----- (006CE8F0) --------------------------------------------------------
void __thiscall mhItemInvIconWin::mhItemInvIconWin(mhItemInvIconWin *this)
{
  mhItemInvIconWin *v1; // esi@1

  v1 = this;
  InvWin::InvWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhItemInvIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhItemInvIconWin::_vftable_;
  v1->baseclass_0.baseclass_0.m_pkLotText = 0;
  v1->baseclass_0.m_uiInvIndex = -1;
  v1->baseclass_0.m_uiInvType = 9;
  ItemIcon::SetItem(&v1->baseclass_0.baseclass_0, 0, 1);
  *(_WORD *)&v1->baseclass_0.m_bActive = 0;
}
// 9C9D70: using guessed type int (__stdcall *mhItemInvIconWin___vftable_)(int uiFlags);
// 9C9D8C: using guessed type int (__thiscall *mhItemInvIconWin___vftable_)(void *p, char);

//----- (006CE980) --------------------------------------------------------
void __thiscall mhItemInvIconWin::_mhItemInvIconWin(mhItemInvIconWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhItemInvIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhItemInvIconWin::_vftable_;
  InvWin::_InvWin(&this->baseclass_0);
}
// 9C9D70: using guessed type int (__stdcall *mhItemInvIconWin___vftable_)(int uiFlags);
// 9C9D8C: using guessed type int (__thiscall *mhItemInvIconWin___vftable_)(void *p, char);

//----- (006CE9A0) --------------------------------------------------------
bool __thiscall mhItemInvIconWin::IsUse(mhItemInvIconWin *this)
{
  return this->m_bUse;
}

//----- (006CE9B0) --------------------------------------------------------
void __thiscall mhItemInvIconWin::SetActive(mhItemInvIconWin *this, bool bActive)
{
  this->baseclass_0.m_bActive = bActive;
}

//----- (006CE9C0) --------------------------------------------------------
bool __thiscall mhItemInvIconWin::GetActive(mhItemInvIconWin *this)
{
  return this->baseclass_0.m_bActive;
}

//----- (006CE9D0) --------------------------------------------------------
bool __thiscall mhItemInvIconWin::IsLock(mhItemInvIconWin *this)
{
  return this->baseclass_0.m_bLock;
}

//----- (006CE9E0) --------------------------------------------------------
Item *__thiscall mhEditRoomWin::GetItemByObjID(mhEditRoomWin *this, int iGUID)
{
  return Inventory::GetMHItemByObjID(&g_kInventory, iGUID);
}

//----- (006CE9F0) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnShowWin(mhEditRoomWin *this)
{
  if ( this->baseclass_0.m_pkFrameWork[29].m_BackFrameID )
  {
    if ( dword_AA501C == 2 )
      mhEditRoomWin::ShowComponent(this, 1);
  }
}
// AA501C: using guessed type int dword_AA501C;

//----- (006CEA10) --------------------------------------------------------
void __thiscall mhEditRoomWin::UpdateWebPos(mhEditRoomWin *this)
{
  mhEditRoomWin *v1; // esi@1
  tagRECT rect; // [sp+4h] [bp-14h]@3
  unsigned int v3; // [sp+14h] [bp-4h]@1
  int v4; // [sp+18h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  if ( IsWindow(this->m_hWebWindow) )
  {
    if ( v1->m_bOpen )
    {
      mhEditRoomWin::ReGenPos(v1);
      GetWindowRect(g_hMainWnd, &rect);
      MoveWindow(
        v1->m_hWebWindow,
        rect.left + v1->m_uiWebXPos,
        rect.top + v1->m_uiWebYPos,
        v1->m_uiWebWidth,
        v1->m_uiWebHeight,
        1);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006CEAA0) --------------------------------------------------------
bool __thiscall mhEditRoomWin::ChangePos(mhEditRoomWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  DropContents *v3; // esi@1
  mhEditRoomWin *v4; // ebx@1
  signed int v5; // edi@2
  void *v6; // eax@8
  unsigned int v7; // ecx@10
  bool result; // al@11
  ITEM_INVEN kFrom; // [sp+Ch] [bp-4h]@11

  v3 = pkContents;
  v4 = this;
  switch ( pkContents->m_eSenderType )
  {
    case 0xE:
      v5 = 3;
      goto LABEL_6;
    case 0xF:
      v5 = 13;
      goto LABEL_6;
    case 0x10:
      v5 = 14;
      goto LABEL_6;
    case 0x11:
      v5 = 16;
LABEL_6:
      if ( v5 != mhEditRoomWin::m_uiInvType )
        goto LABEL_12;
      if ( !pkContents->m_eType )
      {
        v6 = pkContents->m_apvParam[0];
        if ( v6 )
          SoundMgr::PlayItemPutSound(&g_kSoundMgr, *((_WORD *)v6 + 4));
      }
      v7 = v3->m_uiSenderIndex;
      switch ( mhEditRoomWin::m_uiInvType )
      {
        case 3u:
        case 0xDu:
        case 0xEu:
        case 0x10u:
          kFrom.Inven = ((_WORD)v5 << 10) | v7 & 0x3FF;
          LOWORD(pkContents) = ((_WORD)v5 << 10) | uiReceiverInvIndex & 0x3FF;
          GameFrameWork::NcItemRelocReq(
            (GameFrameWork *)v4->baseclass_0.m_pkFrameWork,
            &kFrom,
            (ITEM_INVEN *)&pkContents);
          result = 1;
          break;
        default:
          goto LABEL_12;
      }
      goto LABEL_12;
    default:
LABEL_12:
      result = 0;
      break;
  }
  return result;
}

//----- (006CEB90) --------------------------------------------------------
bool __thiscall mhEditRoomWin::IsMHOtherTypeCheck(mhEditRoomWin *this, unsigned int uiSendInvType, unsigned int uiRcvInvType)
{
  bool result; // al@3
  bool v4; // zf@5
  bool v5; // zf@7

  if ( uiSendInvType == uiRcvInvType )
  {
    switch ( uiSendInvType )
    {
      case 3u:
      case 0xDu:
      case 0xEu:
      case 0x10u:
$LN21_65:
        result = 1;
        break;
      default:
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    switch ( uiSendInvType )
    {
      case 0xDu:
        v4 = uiSendInvType == 3;
        goto LABEL_6;
      case 3u:
        v4 = uiSendInvType == 13;
LABEL_6:
        if ( v4 )
          break;
        v5 = uiSendInvType == 14;
        goto LABEL_8;
      case 0xEu:
        if ( uiSendInvType == 3 )
          break;
        v5 = uiSendInvType == 13;
LABEL_8:
        if ( v5 )
          break;
        if ( uiSendInvType == 16 )
          break;
        return 1;
      case 0x10u:
        if ( uiSendInvType != 3 && uiSendInvType != 13 && uiSendInvType != 14 )
          goto $LN21_65;
        break;
      default:
        break;
    }
    result = 0;
  }
  return result;
}

//----- (006CEC50) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnActiveProp(mhEditRoomWin *this, unsigned int uiInvProptype)
{
  mhEditRoomWin *v2; // edi@1
  unsigned int v3; // eax@1
  char *v4; // ecx@1
  signed int v5; // esi@3
  char *v6; // [sp+8h] [bp-8h]@1
  unsigned int i; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = 0;
  v4 = (char *)this->m_pkItemProp;
  i = 0;
  v6 = v4;
  do
  {
    if ( uiInvProptype == v3 )
    {
      *(_BYTE *)(*(_DWORD *)v4 + 380) = 1;
      v5 = 0;
      do
      {
        ((void (__stdcall *)(_DWORD))v2->m_pkItemEnableBag[v5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v2->m_pkitemDisableBag[v5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        if ( !v5 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkItemEnableBag[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          ((void (__stdcall *)(_DWORD))v2->m_pkitemDisableBag[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          mhEditRoomWin::m_uiShowBagPage = 0;
        }
        ++v5;
      }
      while ( v5 < 2 );
      v3 = i;
      v4 = v6;
    }
    else
    {
      *(_BYTE *)(*(_DWORD *)v4 + 380) = 0;
    }
    ++v3;
    v4 += 4;
    i = v3;
    v6 = v4;
  }
  while ( v3 < 4 );
}
// B67D00: using guessed type int mhEditRoomWin__m_uiShowBagPage;

//----- (006CED10) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnActive(mhEditRoomWin *this, unsigned int uiInvType, unsigned int uiPage)
{
  mhEditRoomWin *v3; // ebx@1
  int v4; // esi@6
  signed int v5; // edi@6
  int v6; // eax@8
  int v7; // ecx@8
  unsigned int v8; // esi@9
  int v9; // edi@9
  unsigned int v10; // [sp+Ch] [bp-8h]@2
  signed int InvType; // [sp+1Ch] [bp+8h]@2

  v3 = this;
  switch ( uiInvType )
  {
    case 3u:
      InvType = 0;
      mhEditRoomWin::m_uiInvType = 3;
      v10 = 0;
      goto LABEL_6;
    case 0xDu:
      InvType = 2;
      mhEditRoomWin::m_uiInvType = 13;
      v10 = 1;
      goto LABEL_6;
    case 0xEu:
      InvType = 4;
      mhEditRoomWin::m_uiInvType = 14;
      v10 = 2;
      goto LABEL_6;
    case 0x10u:
      InvType = 6;
      mhEditRoomWin::m_uiInvType = 16;
      v10 = 3;
LABEL_6:
      mhEditRoomWin::OnActiveProp(this, v10);
      v4 = (int)v3->m_apkmhItemInvIconWin;
      v5 = 392;
      do
      {
        *(_BYTE *)(*(_DWORD *)v4 + 456) = 0;
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 324))(0.0);
        v4 += 4;
        --v5;
      }
      while ( v5 );
      v6 = 49 * InvType;
      v7 = 49 * InvType + 49;
      if ( 49 * InvType < v7 )
      {
        v8 = (unsigned int)&v3->m_apkmhItemInvIconWin[v6 + 49 * uiPage];
        v9 = v7 - v6;
        do
        {
          *(_BYTE *)(*(_DWORD *)v8 + 456) = 1;
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 324))(0.0);
          v8 += 4;
          --v9;
        }
        while ( v9 );
      }
      mhEditRoomWin::OnActivePage(v3, uiPage);
      break;
    default:
      return;
  }
}

//----- (006CEE40) --------------------------------------------------------
void __thiscall mhEditRoomWin::UpdateMeWin(mhEditRoomWin *this, float fCurTime)
{
  mhEditRoomWin *v2; // esi@1
  PgFrameWork *v3; // edi@2

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( !PgWin::IsVisible(&v2->baseclass_0.baseclass_0.baseclass_0) )
      return;
    BYTE3(v3[73].m_kMsgQ.m_uiAlloced) = 0;
    PgFrameWork::AddMsg(v3, 0xE0u, 0, 0);
    MoveWindow(v2->m_hWebWindow, -1000, -1000, -999, -999, 0);
    v2->m_bOpen = 0;
  }
  mhEditRoomWin::UpdateWebPos(v2);
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (006CEEC0) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnChangeTab(mhEditRoomWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab)
{
  bool v2; // zf@1
  char *v3; // esi@1
  DirectUserMsgBody_MHInfoTabChanged kBody; // [sp+4h] [bp-4h]@1

  *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 8) + 380) = 0;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  v3 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.eChanged = eTab;
  if ( !v2 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      62,
      &kBody,
      v3);
    if ( *((_DWORD *)v3 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))(**((_DWORD **)v3 + 1) + 20))(
        62,
        &kBody,
        v3);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))(*(_DWORD *)v3 + 20))(
    v3,
    62,
    &kBody,
    v3);
}

//----- (006CEF30) --------------------------------------------------------
bool __thiscall mhEditRoomWin::OpenMHRepairWin(mhEditRoomWin *this, bool b, unsigned __int16 FurID)
{
  mhEditRoomWin *v3; // esi@1
  int v4; // eax@1

  v3 = this;
  v4 = *(_DWORD *)&this->baseclass_0.m_pkFrameWork[30].m_bInit;
  if ( !v4 )
    return 1;
  if ( *(_WORD *)(v4 + 346) == -1 )
  {
    MiniHouseIndoor::SetRepairObjID(&g_kWorld.m_MiniHouseIndoorMode, FurID);
    mhRepairObjWin::SetRepairObjID(*(mhRepairObjWin **)&v3->baseclass_0.m_pkFrameWork[30].m_bInit, FurID);
    GameFrameWork::OpenMHRepairWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, b, 1);
    OutputDebugStringA("¶ç¿");
    return 1;
  }
  OutputDebugStringA("¾ÈµÈ´Ù ¾ÈµÅ ÀÌ¹Ì ÀÖ¾î\n");
  return 0;
}

//----- (006CEFB0) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnRClickEvent(mhEditRoomWin *this, unsigned int uiIndex)
{
  mhEditRoomWin *v2; // ebx@1
  PgFrameWork *v3; // ebx@4
  char *v4; // eax@4
  void *v5; // eax@7
  Item *v6; // eax@8
  __int16 v7; // dx@9
  int v8; // esi@9
  void *v9; // edi@9
  char v10; // [sp+4h] [bp-6Ch]@9
  unsigned __int16 v11; // [sp+7h] [bp-69h]@9
  __int16 v12; // [sp+68h] [bp-8h]@9
  char v13; // [sp+6Ah] [bp-6h]@9
  void *SelectedIcon; // [sp+6Ch] [bp-4h]@7

  v2 = this;
  if ( !PgCursor::ms_pkDrop )
  {
    if ( nowState && dword_AA502C )
    {
      v3 = this->baseclass_0.m_pkFrameWork;
      v4 = TextData2::Get(0x1275B71u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v3, v4);
    }
    else
    {
      if ( nowState == 2 )
        GameFrameWork::AddSysMsg((GameFrameWork *)this->baseclass_0.m_pkFrameWork, "¼");
      v2->m_pkWorkTargetWin = 0;
      v5 = mhEditRoomWin::GetInvIconWin(v2, mhEditRoomWin::m_uiInvType, uiIndex);
      SelectedIcon = v5;
      if ( v5 )
      {
        v6 = ItemIcon::GetItem((ItemIcon *)v5);
        if ( v6 )
        {
          v7 = mhEditRoomWin::m_uiInvType;
          memcpy(&v10, &v6->m_kStruct, 0x64u);
          v12 = *(_WORD *)((char *)&v6->m_kStruct.itemattr.binditem.portal[9].y + 1);
          v13 = BYTE3(v6->m_kStruct.itemattr.binditem.portal[9].y);
          v8 = v11;
          v9 = SelectedIcon;
          v2->m_pkWorkTargetWin = (mhItemInvIconWin *)SelectedIcon;
          v2->m_kWorkTargetInven.Inven = (v7 << 10) | uiIndex & 0x3FF;
          if ( v8 != dword_AA5084 )
          {
            MiniHouseIndoor::SetPopUpMHItemInvState(&g_kWorld.m_MiniHouseIndoorMode, 0);
            GameFrameWork::OnOpenMHPopUpMenuInvObjWin(
              (GameFrameWork *)v2->baseclass_0.m_pkFrameWork,
              *((_BYTE *)v9 + 457),
              v8);
          }
        }
      }
    }
  }
}
// AA502C: using guessed type int dword_AA502C;
// AA5084: using guessed type int dword_AA5084;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (006CF0B0) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnLClickEvent(mhEditRoomWin *this, unsigned int uiInvtype, unsigned int uiIndex)
{
  mhEditRoomWin *v3; // esi@1
  PgFrameWork *v4; // esi@3
  char *v5; // eax@3
  unsigned int v6; // ebx@6
  mhItemInvIconWin *v7; // ecx@12
  Item *v8; // edi@13
  unsigned int v9; // eax@19
  DropContents::ContentsType v10; // edx@19

  v3 = this;
  if ( nowState && dword_AA502C )
  {
    v4 = this->baseclass_0.m_pkFrameWork;
    v5 = TextData2::Get(0x1275B71u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4, v5);
  }
  else
  {
    if ( nowState == 2 )
      GameFrameWork::AddSysMsg((GameFrameWork *)this->baseclass_0.m_pkFrameWork, "¼");
    v6 = uiIndex;
    if ( uiIndex >= 0x62 )
    {
LABEL_11:
      v6 = 0;
    }
    else
    {
      switch ( mhEditRoomWin::m_uiInvType )
      {
        case 0xDu:
          v6 = uiIndex + 98;
          break;
        case 0xEu:
          v6 = uiIndex + 196;
          break;
        case 0x10u:
          v6 = uiIndex + 294;
          break;
        default:
          goto LABEL_11;
        case 3u:
          break;
      }
    }
    v7 = v3->m_apkmhItemInvIconWin[v6];
    if ( !v7->baseclass_0.m_bLock )
    {
      v8 = ItemIcon::GetItem(&v7->baseclass_0.baseclass_0);
      if ( v8 )
      {
        switch ( uiInvtype )
        {
          case 3u:
            v3->m_kDropContents.m_eSenderType = 14;
            break;
          case 0xDu:
            v3->m_kDropContents.m_eSenderType = 15;
            break;
          case 0xEu:
            v3->m_kDropContents.m_eSenderType = 16;
            break;
          case 0x10u:
            v3->m_kDropContents.m_eSenderType = 17;
            break;
          default:
            break;
        }
        v9 = mhEditRoomWin::GetInvIndex(v3, uiInvtype, v6);
        v3->m_kDropContents.m_eType = v10;
        v3->m_kDropContents.m_uiSenderIndex = v9;
        v3->m_kDropContents.m_apvParam[0] = v8;
        v3->m_kDropContents.m_apvParam[1] = (void *)v10;
        v3->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v8->baseclass_0.vfptr[3].__vecDelDtor)(v8);
        v3->m_kDrop.m_pkSender = (PgWin *)v3;
        PgCursor::ms_pkDrop = (int)&v3->m_kDrop;
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, v8->m_kStruct.itemid);
      }
    }
  }
}
// AA502C: using guessed type int dword_AA502C;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (006CF250) --------------------------------------------------------
void __thiscall mhEditRoomWin::OnCommand(mhEditRoomWin *this, unsigned int wParam, int lParam)
{
  mhEditRoomWin *v3; // esi@1

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      mhEditRoomWin::OnChangeTab(this, 0);
      break;
    case 1u:
      mhEditRoomWin::OnChangeTab(this, TE_GUEST_BOOK);
      break;
    case 2u:
      mhEditRoomWin::OnChangeTab(this, TE_EDIT_ROOM);
      break;
    case 3u:
      mhEditRoomWin::OnChangeTab(this, TE_PORTAL_LIST);
      break;
    case 4u:
      mhEditRoomWin::OnChangeTab(this, TE_SETTING);
      break;
    case 5u:
      mhEditRoomWin::OnChangeTab(this, TE_OUT);
      break;
    case 0xAu:
      GameFrameWork::OnCloseMHItemInvenWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xBu:
      mhEditRoomWin::OnLClickEvent(this, mhEditRoomWin::m_uiInvType, lParam);
      break;
    case 0xCu:
      mhEditRoomWin::OnRClickEvent(this, lParam);
      break;
    case 0xDu:
      mhEditRoomWin::OnActive(this, 3u, 0);
      break;
    case 0xEu:
      mhEditRoomWin::OnActive(this, 0xDu, 0);
      break;
    case 0xFu:
      mhEditRoomWin::OnActive(this, 0xEu, 0);
      break;
    case 0x10u:
      mhEditRoomWin::OnActive(this, 0x10u, 0);
      break;
    case 0x11u:
      mhEditRoomWin::OnActive(this, mhEditRoomWin::m_uiInvType, 0);
      break;
    case 0x12u:
      mhEditRoomWin::OnActive(this, mhEditRoomWin::m_uiInvType, 1u);
      break;
    case 0x13u:
      PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xE0u, 0, 0);
      MoveWindow(v3->m_hWebWindow, -1000, -1000, -999, -999, 0);
      v3->m_bOpen = 0;
      break;
    case 0x14u:
      mhEditRoomWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006CF3F0) --------------------------------------------------------
void __thiscall mhItemInvIconWin::DoRAction(mhItemInvIconWin *this)
{
  mhItemInvIconWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->baseclass_0.m_uiInvIndex);
}

//----- (006CF420) --------------------------------------------------------
void __thiscall mhItemInvIconWin::OnFirstHitWin(mhItemInvIconWin *this)
{
  mhItemInvIconWin *v1; // esi@1
  Item *v2; // edi@1
  PgWin *v3; // eax@1
  ItemInfoWin *v4; // ecx@6

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
  v2 = ItemIcon::GetItem(&v1->baseclass_0.baseclass_0);
  v3 = PgWin::GetParentWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v3 && v2 )
  {
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_eButShow == 1 && nowState == 2 )
      mhEditRoomWin::OpenMHRepairWin(
        (mhEditRoomWin *)v3,
        1,
        *(unsigned __int16 *)((char *)&v2->m_kStruct.itemattr.wlot.lot + 1));
    v4 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v4 )
    {
      ItemInfoWin::SetItemInfo(v4, v2);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (006CF490) --------------------------------------------------------
void __thiscall mhItemInvIconWin::DoAction(mhItemInvIconWin *this)
{
  mhItemInvIconWin *v1; // esi@1
  PgWin *v2; // eax@4

  v1 = this;
  if ( !this->baseclass_0.m_bLock )
  {
    if ( nowState == 2 )
    {
      OutputDebugStringA("¾È´ë ¼");
    }
    else
    {
      v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      if ( v2 )
        PgWin::PostCommandMsg(
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
          v2,
          v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
          v1->baseclass_0.m_uiInvIndex);
    }
  }
}

//----- (006CF4E0) --------------------------------------------------------
bool __thiscall mhItemInvIconWin::EatDropInstance(mhItemInvIconWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  mhItemInvIconWin *v4; // edi@1
  bool result; // al@2
  void *v6; // esi@5
  PgWin *v7; // eax@8

  v4 = this;
  if ( !this->baseclass_0.m_bLock && *pkDrop && this->baseclass_0.m_bActive )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( !v6 || *((_DWORD *)v6 + 4) )
    {
LABEL_9:
      result = 0;
    }
    else
    {
      switch ( *((_DWORD *)v6 + 2) )
      {
        case 0xE:
        case 0xF:
        case 0x10:
        case 0x11:
          v7 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          result = mhEditRoomWin::ChangePos((mhEditRoomWin *)v7, (DropContents *)v6, v4->baseclass_0.m_uiInvIndex);
          break;
        default:
          goto LABEL_9;
      }
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006CF560) --------------------------------------------------------
void __thiscall mhItemInvIconWin::SetLock(mhItemInvIconWin *this, bool bLock)
{
  mhItemInvIconWin *v2; // ebx@1
  NiProperty *v3; // edi@2
  void *v4; // eax@3
  void *v5; // esi@3
  NiProperty *v6; // esi@7
  char *v7; // eax@7
  void *v8; // eax@8
  NiProperty *v9; // eax@9
  double v10; // st7@13
  float v11; // ST14_4@15
  float v12; // ST18_4@15
  float v13; // ST1C_4@15

  v2 = this;
  if ( this->baseclass_0.m_bLock != bLock )
  {
    v3 = NiAVObject::GetProperty(
           &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           9);
    if ( !v3 )
    {
      v4 = operator new(0x28u);
      v5 = v4;
      if ( v4 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v4);
        *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
        *((_WORD *)v5 + 14) = 0;
        *((_DWORD *)v5 + 8) = 0;
        *((_DWORD *)v5 + 9) = 1;
      }
      else
      {
        v5 = 0;
      }
      v3 = (NiProperty *)v5;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        (NiProperty *)v5);
    }
    v6 = NiAVObject::GetProperty(
           &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           3);
    v7 = 0;
    if ( !v6 )
    {
      v8 = operator new(0x60u);
      if ( v8 )
        NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v8);
      else
        v9 = 0;
      v6 = v9;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v9);
      v7 = 0;
    }
    v2->baseclass_0.m_bLock = bLock;
    v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = (unsigned int)v7;
    v3[1].baseclass_0.m_pcName = v7;
    ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    if ( bLock )
      v10 = 0.40000001;
    else
      v10 = 1.0;
    v11 = v10;
    v12 = v10;
    v6[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(v11);
    v13 = v10;
    v6[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(v12);
    v6[2].baseclass_0.m_uiExtraDataSize = LODWORD(v13);
    NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (006CF690) --------------------------------------------------------
void __thiscall mhItemInvIconWin::UpdateMeWin(mhItemInvIconWin *this, float fCurTime)
{
  mhItemInvIconWin *v2; // ebx@1
  Item *v3; // esi@3
  int v4; // esi@5
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@11
  bool v6; // [sp+4h] [bp-74h]@7
  unsigned int v7; // [sp+10h] [bp-68h]@5
  __int16 v8; // [sp+74h] [bp-4h]@5
  char v9; // [sp+76h] [bp-2h]@5

  v2 = this;
  switch ( this->baseclass_0.m_uiInvType )
  {
    default:
      OutputDebugStringA("wrong inventype_infomation. minihouseiteminventory icons\n");
      break;
    case 3u:
    case 0xDu:
    case 0xEu:
    case 0x10u:
      break;
  }
  v3 = Inventory::GetMHItemInv(&g_kInventory, v2->baseclass_0.m_uiInvType, v2->baseclass_0.m_uiInvIndex);
  if ( v3 != ItemIcon::GetItem(&v2->baseclass_0.baseclass_0) )
  {
    ItemIcon::SetItem(&v2->baseclass_0.baseclass_0, v3, 1);
    if ( v3 )
    {
      v4 = (int)&v3->m_kStruct;
      memcpy(&v7, (const void *)v4, 0x64u);
      v4 += 100;
      v8 = *(_WORD *)v4;
      v9 = *(_BYTE *)(v4 + 2);
      if ( (v7 >> 16) & 1 )
      {
        if ( v2->baseclass_0.m_bLock )
          goto LABEL_11;
        v6 = 1;
      }
      else
      {
        if ( v2->baseclass_0.m_bLock != 1 )
          goto LABEL_11;
        v6 = 0;
      }
      mhItemInvIconWin::SetLock(v2, v6);
    }
  }
LABEL_11:
  v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  if ( v2->baseclass_0.m_bActive )
  {
    v5(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      1u);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
    if ( !ItemIcon::GetItem(&v2->baseclass_0.baseclass_0) )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v2,
        0);
    InvWin::UpdateMeWin(&v2->baseclass_0, fCurTime);
  }
  else
  {
    v5(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      0);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
  }
}

//----- (006CF7B0) --------------------------------------------------------
void __thiscall mhItemInvIconWin::SetUse(mhItemInvIconWin *this, bool b)
{
  this->m_bUse = b;
  if ( b == 1 )
    mhItemInvIconWin::SetLock(this, 1);
  else
    mhItemInvIconWin::SetLock(this, 0);
}

//----- (006CF7E0) --------------------------------------------------------
void __thiscall mhEditRoomWin::_mhEditRoomWin(mhEditRoomWin *this)
{
  mhEditRoomWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhEditRoomWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhEditRoomWin::_vftable_;
  memset(this->m_apkmhItemInvIconWin, 0, sizeof(this->m_apkmhItemInvIconWin));
  this->m_pkitemDisableBag[0] = 0;
  this->m_pkItemEnableBag[1] = 0;
  this->m_pkitemDisableBag[1] = 0;
  this->m_pkItemEnableBag[0] = 0;
  if ( *(_DWORD *)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  if ( v1->m_Tkey.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_Tkey.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_Tkey.baseclass_0._Mysize = 0;
  v1->m_Tkey.baseclass_0._Myres = 15;
  v1->m_Tkey.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9CA000: using guessed type int (__stdcall *mhEditRoomWin___vftable_)(int uiFlags);
// 9CA01C: using guessed type int (__thiscall *mhEditRoomWin___vftable_)(void *p, char);

//----- (006CF890) --------------------------------------------------------
mhItemInvIconWin *__cdecl mhItemInvIconWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  mhItemInvIconWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1D8u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    InvWin::InvWin((InvWin *)v4);
    LOBYTE(v9) = 1;
    *(_DWORD *)v5 = &mhItemInvIconWin::_vftable_;
    *((_DWORD *)v5 + 58) = &mhItemInvIconWin::_vftable_;
    *((_DWORD *)v5 + 95) = 0;
    *((_DWORD *)v5 + 112) = -1;
    *((_DWORD *)v5 + 113) = 9;
    ItemIcon::SetItem((ItemIcon *)v5, 0, 1);
    *((_WORD *)v5 + 228) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 620))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (mhItemInvIconWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9C9D70: using guessed type int (__stdcall *mhItemInvIconWin___vftable_)(int uiFlags);
// 9C9D8C: using guessed type int (__thiscall *mhItemInvIconWin___vftable_)(void *p, char);

//----- (006CFA10) --------------------------------------------------------
void __thiscall mhEditRoomWin::ShowWeb(mhEditRoomWin *this, char *eKey)
{
  mhEditRoomWin *v2; // esi@1
  int v3; // eax@3
  NiRefObjectVtbl *v4; // edx@3
  int v5; // eax@3
  int v6; // edx@3
  int v7; // edi@3
  int v8; // ebx@3
  int v9; // eax@3
  const char *v10; // eax@6
  HWND__ *v11; // edi@8
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // edx@8
  int v13; // edi@8
  unsigned int v14; // [sp-10h] [bp-64h]@1
  void *v15; // [sp-10h] [bp-64h]@5
  int kRect; // [sp+0h] [bp-54h]@3
  int nHeight; // [sp+10h] [bp-44h]@3
  int nWidth; // [sp+14h] [bp-40h]@3
  NiRect<int> kNiRect; // [sp+18h] [bp-3Ch]@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > WebURL; // [sp+28h] [bp-2Ch]@3
  unsigned int v21; // [sp+44h] [bp-10h]@1
  int v22; // [sp+50h] [bp-4h]@3
  int v23; // [sp+54h] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  v14 = (unsigned int)&v23 ^ __security_cookie;
  v2 = this;
  if ( this->m_bOpen == 1 )
    DestroyWindow(this->m_hWebWindow);
  v3 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
              (NiRefObject *)v2,
              v14);
  v4 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v2->m_uiWebXPos = v2->m_uiPlaneWebXPos + v3;
  v5 = ((int (__thiscall *)(mhEditRoomWin *))v4[42].__vecDelDtor)(v2);
  v6 = v2->m_uiWebXPos;
  v7 = v5 + v2->m_uiPlaneWebYPos + 2;
  nWidth = v2->m_uiPlaneWebWidth - 8;
  v2->m_uiWebWidth = nWidth;
  v8 = 0;
  v9 = v2->m_uiPlaneWebHeight - 10;
  v2->m_uiWebYPos = v7;
  nHeight = v9;
  v2->m_uiWebHeight = v9;
  kRect = v6;
  WebURL.baseclass_0._Myres = 15;
  WebURL.baseclass_0._Mysize = 0;
  WebURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&WebURL, &byte_9C9B38, 0);
  v22 = 0;
  if ( !eKey )
  {
    if ( WebURL.baseclass_0._Myres < 0x10 )
      return;
    v15 = *(void **)&WebURL;
    goto LABEL_13;
  }
  v10 = *(const char **)&WebURL;
  if ( WebURL.baseclass_0._Myres < 0x10 )
    v10 = (const char *)&WebURL;
  v11 = CreateWindowExA(0, "WebCtrl32", v10, 0x90000000u, kRect, v7, nWidth, nHeight, g_hMainWnd, 0, g_hMainInstance, 0);
  ShowWindow(v11, 5);
  v12 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
  v2->m_hWebWindow = v11;
  v2->m_bOpen = 1;
  kNiRect.m_left = 0;
  kNiRect.m_right = 0;
  kNiRect.m_top = 0;
  kNiRect.m_bottom = 0;
  v12(
    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
    (unsigned int)&kNiRect);
  v13 = 0;
  if ( PgWin::ms_uiScreenWidth >= kNiRect.m_right - kNiRect.m_left )
  {
    if ( PgWin::ms_uiScreenHeight >= kNiRect.m_bottom - kNiRect.m_top )
    {
      v13 = ((int (__thiscall *)(mhEditRoomWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v2);
      v8 = ((int (__thiscall *)(mhEditRoomWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
    }
  }
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
    (NiRefObject *)v2,
    v13);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v2,
    v8);
  if ( WebURL.baseclass_0._Myres >= 0x10 )
  {
    v15 = *(void **)&WebURL;
LABEL_13:
    operator delete(v15);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006CFBE0) --------------------------------------------------------
void __thiscall mhEditRoomWin::mhEditRoomWin(mhEditRoomWin *this)
{
  mhEditRoomWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhEditRoomWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhEditRoomWin::_vftable_;
  v1->m_Tkey.baseclass_0._Myres = 15;
  v1->m_Tkey.baseclass_0._Mysize = 0;
  v1->m_Tkey.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.m_uiLot = 0;
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
  memset(v1->m_apkmhItemInvIconWin, 0, sizeof(v1->m_apkmhItemInvIconWin));
  v1->m_pkitemDisableBag[0] = 0;
  v1->m_pkItemEnableBag[1] = 0;
  v1->m_pkitemDisableBag[1] = 0;
  v1->m_pkItemEnableBag[0] = 0;
  mhEditRoomWin::m_uiInvType = 0;
  mhEditRoomWin::m_uiShowBagPage = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_hWebWindow = 0;
  v1->m_uiWebYPos = 0;
  v1->m_uiWebXPos = 0;
  v1->m_uiWebHeight = 0;
  v1->m_uiWebWidth = 0;
  v1->m_bOpen = 0;
  v1->m_uiPlaneWebYPos = 0;
  v1->m_uiPlaneWebXPos = 0;
  v1->m_uiPlaneWebHeight = 0;
  v1->m_uiPlaneWebWidth = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v1->m_Tkey, byte_9C9B39, 0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9CA000: using guessed type int (__stdcall *mhEditRoomWin___vftable_)(int uiFlags);
// 9CA01C: using guessed type int (__thiscall *mhEditRoomWin___vftable_)(void *p, char);
// B67D00: using guessed type int mhEditRoomWin__m_uiShowBagPage;

//----- (006CFD20) --------------------------------------------------------
mhEditRoomWin *__cdecl mhEditRoomWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  mhEditRoomWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0xE70u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    mhEditRoomWin::mhEditRoomWin((mhEditRoomWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (mhEditRoomWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006CFE50) --------------------------------------------------------
bool __thiscall mhItemInvIconWin::Create(mhItemInvIconWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  mhItemInvIconWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->baseclass_0.m_uiInvIndex = uiInvIndex;
    ItemIcon::ShowLotText(&v5->baseclass_0.baseclass_0, 1);
    pkParent = (PgWin *)v5;
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      &IconWin::ms_kCoolTimeIconList,
      (const unsigned int *)&pkParent);
    v5->m_bUse = 0;
    result = 1;
  }
  return result;
}

//----- (006CFEB0) --------------------------------------------------------
bool __thiscall mhEditRoomWin::Create(mhEditRoomWin *this, PgFrameWork *pkFrameWork)
{
  mhEditRoomWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  PgFont *v8; // eax@11
  PgWinText *v9; // edi@11
  NiRefObjectVtbl *v10; // ebx@11
  char *v11; // eax@11
  NiSourceTexture *v12; // eax@11
  PgSprData *v13; // eax@14
  PgSprData *v14; // eax@14
  PgSprData *v15; // eax@16
  PgSprData *v16; // eax@16
  PgWinSpr *v17; // eax@16
  NiNode *v18; // ecx@16
  PgSprData *v19; // eax@16
  char *v20; // eax@16
  char *v21; // eax@16
  char *v22; // eax@16
  char *v23; // eax@16
  char *v24; // eax@16
  char *v25; // eax@16
  unsigned int v26; // edi@16
  int v27; // eax@17
  char v28; // cl@18
  const char *v29; // eax@19
  PgSprData *v30; // ebx@21
  int v31; // eax@21
  char v32; // cl@22
  const char *v33; // eax@23
  char *v34; // eax@25
  int v35; // edi@27
  PgSprData *v36; // edi@28
  PgWin *v37; // ST5C_4@28
  PgWin *v38; // edi@28
  PgFont *v39; // ST58_4@28
  unsigned int v40; // ST54_4@28
  unsigned int v41; // eax@28
  PgWinText *v42; // edi@28
  NiRefObjectVtbl *v43; // ebx@28
  char *v44; // eax@28
  NiRefObjectVtbl *v45; // ebx@28
  PgFont *v46; // eax@28
  PgSprData *v47; // edi@28
  PgWin *v48; // ST60_4@28
  PgWin *v49; // edi@28
  PgFont *v50; // ST5C_4@28
  unsigned int v51; // ST58_4@28
  unsigned int v52; // eax@28
  PgWinText *v53; // edi@28
  NiRefObjectVtbl *v54; // ebx@28
  char *v55; // eax@28
  NiRefObjectVtbl *v56; // ebx@28
  PgFont *v57; // eax@28
  PgSprData *v58; // edi@28
  PgWin *v59; // ST60_4@28
  PgWin *v60; // edi@28
  PgFont *v61; // ST5C_4@28
  unsigned int v62; // ST58_4@28
  unsigned int v63; // eax@28
  PgWinText *v64; // edi@28
  NiRefObjectVtbl *v65; // ebx@28
  char *v66; // eax@28
  NiRefObjectVtbl *v67; // ebx@28
  PgFont *v68; // eax@28
  PgSprData *v69; // edi@28
  PgWin *v70; // ST60_4@28
  PgWin *v71; // edi@28
  PgFont *v72; // ST5C_4@28
  unsigned int v73; // ST58_4@28
  unsigned int v74; // eax@28
  PgWinText *v75; // edi@28
  NiRefObjectVtbl *v76; // ebx@28
  char *v77; // eax@28
  NiRefObjectVtbl *v78; // ebx@28
  PgFont *v79; // eax@28
  signed int v80; // ebx@28
  PgSprData *v81; // eax@28
  InvTabButWin *v82; // eax@28
  NiNode *v83; // ecx@28
  PgSprData *v84; // eax@28
  PgSprData *v85; // eax@28
  InvTabButWin *v86; // eax@28
  NiNode *v87; // edx@28
  PgSprData *v88; // eax@28
  PgSprData *v89; // edi@28
  NiSourceTexture *v90; // edi@28
  PgSprData *v91; // edi@29
  int v92; // edi@30
  PgSprData *v93; // eax@32
  int v94; // ebx@32
  unsigned int v95; // edx@33
  ItemIcon *v96; // eax@52
  void *(__thiscall *v97)(NiRefObject *, unsigned int); // eax@53
  NiNode *v98; // esi@55
  const char *v99; // [sp+58h] [bp-168h]@12
  int *v100; // [sp+5Ch] [bp-164h]@12
  int *v101; // [sp+60h] [bp-160h]@12
  NiSourceTexture *v102; // [sp+64h] [bp-15Ch]@12
  unsigned int v103; // [sp+68h] [bp-158h]@1
  unsigned int v104; // [sp+68h] [bp-158h]@41
  unsigned int uiWidth; // [sp+78h] [bp-148h]@10
  unsigned int uiHeight; // [sp+7Ch] [bp-144h]@10
  ColumnBut *i; // [sp+80h] [bp-140h]@25
  int iOffY; // [sp+84h] [bp-13Ch]@4
  unsigned int j; // [sp+88h] [bp-138h]@17
  int iOffX; // [sp+8Ch] [bp-134h]@4
  unsigned int uiIndex; // [sp+90h] [bp-130h]@16
  NiPointer<NiNode> spNode; // [sp+94h] [bp-12Ch]@1
  int iLeft; // [sp+98h] [bp-128h]@10
  int iTop; // [sp+9Ch] [bp-124h]@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+A0h] [bp-120h]@16
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > pkToolTipText[6]; // [sp+BCh] [bp-104h]@16
  char acShapeName[64]; // [sp+164h] [bp-5Ch]@32
  char acNum[12]; // [sp+1A4h] [bp-1Ch]@16
  unsigned int v119; // [sp+1B0h] [bp-10h]@1
  int v120; // [sp+1BCh] [bp-4h]@1
  int v121; // [sp+1C0h] [bp+0h]@1

  v119 = (unsigned int)&v121 ^ __security_cookie;
  v103 = (unsigned int)&v121 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->m_kWorkTargetInven.Inven = 0;
  v3 = dword_B70448;
  v120 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MiniHomeEdit.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iOffX, &iOffY, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "mhEditRoomWin", 0)
    || !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v120 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = Font::Get(MAIN_MENU);
  v9 = PgWinText::CreateWin(
         iLeft - iOffX,
         iTop - iOffY + 2,
         uiWidth,
         uiHeight,
         v8,
         &v2->baseclass_0.baseclass_0.baseclass_0,
         0,
         0);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v9,
    1u);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v9,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = TextData2::Get(0xE6EC4424u);
  v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v11);
  v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v9,
    0);
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v102 = v12;
    v101 = &iTop;
    v100 = &iLeft;
    v99 = "Theme";
  }
  else
  {
    v102 = 0;
    v101 = &iTop;
    v100 = &iLeft;
    v99 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v99, v100, v101, v102);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffY, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffX, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(
          &spNode.m_pObject->baseclass_0,
          "Panel02",
          &v2->m_uiPlaneWebXPos,
          &v2->m_uiPlaneWebYPos,
          &v2->m_uiPlaneWebWidth,
          &v2->m_uiPlaneWebHeight) )
  {
    v120 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - iOffX, iTop - iOffX, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &iLeft, &iTop, 0);
  v17 = PgWinSpr::CreateWin(iLeft, iTop, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v18 = spNode.m_pObject;
  v2->m_pkPanel = v17;
  v19 = PgSprData::Create(&v18->baseclass_0, "Panel04", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v120) = 1;
  strcpy(acNum, "0");
  *(_DWORD *)&acNum[2] = 0;
  *(_DWORD *)&acNum[6] = 0;
  *(_WORD *)&acNum[10] = 0;
  v20 = TextData2::Get(0x9BA8F7E2u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    pkToolTipText,
    v20);
  LOBYTE(v120) = 2;
  v21 = TextData2::Get(0x4C494A23u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    &pkToolTipText[1],
    v21);
  LOBYTE(v120) = 3;
  v22 = TextData2::Get(0xE6EC4424u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    &pkToolTipText[2],
    v22);
  LOBYTE(v120) = 4;
  v23 = TextData2::Get(0xD7F24143u);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    &pkToolTipText[3],
    v23);
  LOBYTE(v120) = 5;
  v24 = TextData2::Get(0xDEE82F0Du);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    &pkToolTipText[4],
    v24);
  LOBYTE(v120) = 6;
  v25 = TextData2::Get(0xFA4A423Fu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
    &pkToolTipText[5],
    v25);
  LOBYTE(v120) = 7;
  v26 = 0;
  uiIndex = (unsigned int)pkToolTipText;
  do
  {
    j = v26 + 1;
    _itoa(v26 + 1, acNum, 10);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnNor0", 7u);
    v27 = (int)acNum;
    do
      v28 = *(_BYTE *)v27++;
    while ( v28 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &strName,
      acNum,
      v27 - (_DWORD)&acNum[1]);
    v29 = *(const char **)&strName;
    if ( strName.baseclass_0._Myres < 0x10 )
      v29 = (const char *)&strName;
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v29, &iLeft, &iTop, 0);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnOver0", 8u);
    v31 = (int)acNum;
    do
      v32 = *(_BYTE *)v31++;
    while ( v32 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &strName,
      acNum,
      v31 - (_DWORD)&acNum[1]);
    v33 = *(const char **)&strName;
    if ( strName.baseclass_0._Myres < 0x10 )
      v33 = (const char *)&strName;
    PgSprData::Add(v30, &spNode.m_pObject->baseclass_0, v33);
    i = ColumnBut::CreateWin(iLeft, iTop, v30, &v2->baseclass_0.baseclass_0.baseclass_0, v26, 0);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkHouseTabList,
      (const unsigned int *)&i);
    v34 = (char *)uiIndex;
    if ( *(_DWORD *)(uiIndex + 20) >= 0x10u )
      v34 = *(char **)uiIndex;
    PgWin::SetToolTipWinText(
      *(PgWin **)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v26),
      v34);
    v35 = *(_DWORD *)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v26);
    uiIndex += 28;
    *(_DWORD *)(v35 + 272) = g_pkToolTipWin;
    v26 = j;
  }
  while ( j < 6 );
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &iLeft, &iTop, 0);
  PgSprData::Add(v36, &spNode.m_pObject->baseclass_0, "Tab01_On");
  v37 = (PgWin *)ColumnBut::CreateWin(iLeft, iTop, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0);
  v2->m_pkItemProp[0] = (ColumnBut *)v37;
  v38 = v37;
  v39 = Font::Get(0);
  v40 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v38);
  v41 = ((int (__thiscall *)(PgWin *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v38);
  v42 = PgWinText::CreateWin(0, 3, v41, v40, v39, v37, 0, 0);
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v42,
    5,
    v103);
  v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData2::Get(0xB606500Du);
  v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
  v45 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v46 = Font::Get(MENU);
  v45[113].__vecDelDtor((NiRefObject *)v42, (unsigned int)v46);
  SpScreenText::SetShadowOffset(&v42->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v42,
    0);
  v2->m_pkItemProp[0]->m_bCheck = 1;
  v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &iLeft, &iTop, 0);
  PgSprData::Add(v47, &spNode.m_pObject->baseclass_0, "Tab021_On");
  v48 = (PgWin *)ColumnBut::CreateWin(iLeft, iTop, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0);
  v2->m_pkItemProp[1] = (ColumnBut *)v48;
  v49 = v48;
  v50 = Font::Get(0);
  v51 = ((int (__thiscall *)(PgWin *))v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v49);
  v52 = ((int (__thiscall *)(PgWin *))v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v49);
  v53 = PgWinText::CreateWin(0, 3, v52, v51, v50, v48, 0, 0);
  v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v53,
    5u);
  v54 = v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v55 = TextData2::Get(0xA31F47F8u);
  v54[118].__vecDelDtor((NiRefObject *)v53, (unsigned int)v55);
  v56 = v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v57 = Font::Get(MENU);
  v56[113].__vecDelDtor((NiRefObject *)v53, (unsigned int)v57);
  SpScreenText::SetShadowOffset(&v53->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v53,
    0);
  v2->m_pkItemProp[1]->m_bCheck = 0;
  v58 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_Off", &iLeft, &iTop, 0);
  PgSprData::Add(v58, &spNode.m_pObject->baseclass_0, "Tab03_On");
  v59 = (PgWin *)ColumnBut::CreateWin(iLeft, iTop, v58, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0);
  v2->m_pkItemProp[2] = (ColumnBut *)v59;
  v60 = v59;
  v61 = Font::Get(0);
  v62 = ((int (__thiscall *)(PgWin *))v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v60);
  v63 = ((int (__thiscall *)(PgWin *))v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v60);
  v64 = PgWinText::CreateWin(0, 3, v63, v62, v61, v59, 0, 0);
  v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v64,
    5u);
  v65 = v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v66 = TextData2::Get(0xA2C7F5FEu);
  v65[118].__vecDelDtor((NiRefObject *)v64, (unsigned int)v66);
  v67 = v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v68 = Font::Get(MENU);
  v67[113].__vecDelDtor((NiRefObject *)v64, (unsigned int)v68);
  SpScreenText::SetShadowOffset(&v64->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v64,
    0);
  v2->m_pkItemProp[2]->m_bCheck = 0;
  v69 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab04_Off", &iLeft, &iTop, 0);
  PgSprData::Add(v69, &spNode.m_pObject->baseclass_0, "Tab04_On");
  v70 = (PgWin *)ColumnBut::CreateWin(iLeft, iTop, v69, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0);
  v2->m_pkItemProp[3] = (ColumnBut *)v70;
  v71 = v70;
  v72 = Font::Get(0);
  v73 = ((int (__thiscall *)(PgWin *))v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v71);
  v74 = ((int (__thiscall *)(PgWin *))v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v71);
  v75 = PgWinText::CreateWin(0, 3, v74, v73, v72, v70, 0, 0);
  v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v75,
    5u);
  v76 = v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v77 = TextData2::Get(0xE8F1CDE4u);
  v76[118].__vecDelDtor((NiRefObject *)v75, (unsigned int)v77);
  v78 = v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v79 = Font::Get(MENU);
  v78[113].__vecDelDtor((NiRefObject *)v75, (unsigned int)v79);
  SpScreenText::SetShadowOffset(&v75->m_spTextGeom.m_pObject->baseclass_0, 1u);
  v80 = 0;
  v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v75,
    0);
  v2->m_pkItemProp[3]->m_bCheck = 0;
  v81 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvFitTabOn", &iLeft, &iTop, 0);
  v82 = InvTabButWin::CreateWin(iLeft, iTop, v81, &v2->baseclass_0.baseclass_0.baseclass_0, 0);
  v83 = spNode.m_pObject;
  v2->m_pkItemEnableBag[0] = (PgWinBut *)v82;
  v84 = PgSprData::Create(&v83->baseclass_0, "InvFitTabDis", &iLeft, &iTop, 0);
  v2->m_pkitemDisableBag[0] = (PgWinBut *)InvTabButWin::CreateWin(
                                            iLeft,
                                            iTop,
                                            v84,
                                            &v2->baseclass_0.baseclass_0.baseclass_0,
                                            0x11u);
  v85 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "InvSecTabOn", &iLeft, &iTop, 0);
  v86 = InvTabButWin::CreateWin(iLeft, iTop, v85, &v2->baseclass_0.baseclass_0.baseclass_0, 0);
  v87 = spNode.m_pObject;
  v2->m_pkItemEnableBag[1] = (PgWinBut *)v86;
  v88 = PgSprData::Create(&v87->baseclass_0, "InvSecTabDis", &iLeft, &iTop, 0);
  v2->m_pkitemDisableBag[1] = (PgWinBut *)InvTabButWin::CreateWin(
                                            iLeft,
                                            iTop,
                                            v88,
                                            &v2->baseclass_0.baseclass_0.baseclass_0,
                                            0x12u);
  uiIndex = 0;
  v89 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
  PgSprData::Add(v89, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v89, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(iLeft, iTop, v89, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u, 0, 0);
  v90 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v91 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v90);
    PgSprData::Add(v91, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v91, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(iLeft, iTop, v91, &v2->baseclass_0.baseclass_0.baseclass_0, 0x14u, 0, 0);
  }
  i = 0;
  v92 = (int)v2->m_apkmhItemInvIconWin;
  do
  {
    if ( v80 < 49 )
    {
      sprintf(acShapeName, "ItemSlot%02d");
      PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, acShapeName, &iLeft, &iTop, &uiWidth, &uiHeight);
      v93 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &iLeft, &iTop, 0);
      *(_DWORD *)(v92 + 1568) = PgWinSpr::CreateWin(
                                  iLeft - iOffX,
                                  iTop - iOffY,
                                  v93,
                                  &v2->baseclass_0.baseclass_0.baseclass_0,
                                  0,
                                  0);
      j = 0;
      v94 = v92;
      do
      {
        v95 = uiIndex;
        if ( j & 1 )
          v95 = uiIndex + 49;
        *(_DWORD *)v94 = mhItemInvIconWin::CreateWin(
                           iLeft - iOffX + 1,
                           iTop - iOffY + 1,
                           v95,
                           &v2->baseclass_0.baseclass_0.baseclass_0);
        v94 += 196;
        ++j;
      }
      while ( (signed int)j < 8 );
      v80 = (signed int)i;
    }
    if ( uiIndex >= 0x62 )
      uiIndex = 0;
    ItemIcon::SetItem(*(ItemIcon **)v92, 0, 1);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v92 + 516))(11);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v92 + 560))(12);
    if ( v80 >= 0 )
    {
      if ( v80 < 98 )
      {
        v104 = 3;
        goto LABEL_51;
      }
LABEL_43:
      if ( v80 < 196 )
      {
        v104 = 13;
        goto LABEL_51;
      }
LABEL_46:
      if ( v80 < 294 )
      {
        v104 = 14;
        goto LABEL_51;
      }
      goto LABEL_49;
    }
    if ( v80 >= 98 )
      goto LABEL_43;
    if ( v80 >= 196 )
      goto LABEL_46;
    if ( v80 < 294 )
      goto LABEL_52;
LABEL_49:
    if ( v80 >= 392 )
      goto LABEL_52;
    v104 = 16;
LABEL_51:
    InvWin::SetInvType(*(InvWin **)v92, v104);
LABEL_52:
    mhItemInvIconWin::SetLock(*(mhItemInvIconWin **)v92, 0);
    *(_DWORD *)(*(_DWORD *)v92 + 272) = g_pkItemInfoWin;
    *(_DWORD *)(*(_DWORD *)v92 + 304) = 1;
    IconWin::ShowFocus(*(IconWin **)v92, 1);
    v96 = *(ItemIcon **)v92;
    ++uiIndex;
    ++v80;
    v92 += 4;
    v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 0;
    i = (ColumnBut *)v80;
  }
  while ( v80 < 392 );
  v97 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor;
  v2->m_pkWorkTargetWin = 0;
  ((void (__thiscall *)(mhEditRoomWin *))v97)(v2);
  mhEditRoomWin::OnActive(v2, 3u, 0);
  ((void (__thiscall *)(mhEditRoomWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.0,
    0.5);
  LOBYTE(v120) = 1;
  _eh_vector_destructor_iterator_(
    pkToolTipText,
    0x1Cu,
    6,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  if ( strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strName);
  v98 = spNode.m_pObject;
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v120 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v98 )
    v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v98, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D0D00) --------------------------------------------------------
void *__thiscall mhItemInvIconWin::_scalar_deleting_destructor_(mhItemInvIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhItemInvIconWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhItemInvIconWin::_vftable_;
  InvWin::_InvWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9C9D70: using guessed type int (__stdcall *mhItemInvIconWin___vftable_)(int uiFlags);
// 9C9D8C: using guessed type int (__thiscall *mhItemInvIconWin___vftable_)(void *p, char);

//----- (006D0D40) --------------------------------------------------------
void *__thiscall mhEditRoomWin::_vector_deleting_destructor_(mhEditRoomWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  mhEditRoomWin::_mhEditRoomWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006D0D70) --------------------------------------------------------
void __thiscall mhEmotionWin::mhEmotionWin(mhEmotionWin *this)
{
  mhEmotionWin *v1; // esi@1
  int v2; // eax@1
  signed int v3; // edx@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhEmotionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhEmotionWin::_vftable_;
  v1->m_pkFurnitureNameWin = 0;
  v2 = (int)v1->m_pkActBtnNormal;
  v3 = 15;
  do
  {
    *(_DWORD *)(v2 - 60) = 0;
    *(_DWORD *)v2 = 0;
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v1->m_pkMenuBtn[0] = 0;
  v1->m_pkMenuBtnText[0] = 0;
  v1->m_pkMenuBtn[1] = 0;
  v1->m_pkMenuBtnText[1] = 0;
  v1->m_pkMenuBtn[2] = 0;
  v1->m_pkMenuBtnText[2] = 0;
  v1->m_pkMenuBtn[3] = 0;
  v1->m_pkMenuBtnText[3] = 0;
  v1->m_pkMenuBtn[4] = 0;
  v1->m_pkMenuBtnText[4] = 0;
  *(_DWORD *)&v1->m_bCanHold = -65536;
}
// 9CA32C: using guessed type int (__stdcall *mhEmotionWin___vftable_)(int uiFlags);
// 9CA34C: using guessed type int (__thiscall *mhEmotionWin___vftable_)(void *p, char);

//----- (006D0E00) --------------------------------------------------------
void __thiscall mhEmotionWin::_mhEmotionWin(mhEmotionWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhEmotionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhEmotionWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CA32C: using guessed type int (__stdcall *mhEmotionWin___vftable_)(int uiFlags);
// 9CA34C: using guessed type int (__thiscall *mhEmotionWin___vftable_)(void *p, char);

//----- (006D0E30) --------------------------------------------------------
bool __thiscall mhEmotionWin::DoAction(mhEmotionWin *this, char ActionIndex)
{
  return 0;
}

//----- (006D0E40) --------------------------------------------------------
bool __thiscall mhEmotionWin::Create(mhEmotionWin *this, PgFrameWork *pkFrameWork)
{
  mhEmotionWin *v2; // edi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  volatile LONG *v7; // eax@7
  PgSprData *v9; // eax@12
  int v10; // esi@17
  int v11; // ebx@17
  PgWin *v12; // ST28_4@18
  PgFont *v13; // eax@18
  PgWinAbbreviateText *v14; // eax@18
  PgSprData *v15; // eax@18
  int v16; // ebx@18
  int v17; // esi@18
  PgSprData *v18; // ebx@22
  PgWinBut *v19; // eax@22
  bool v20; // sf@22
  unsigned __int8 v21; // of@22
  PgSprData *v22; // ebx@23
  NiPointer<PgSprData::PgHitTester> *v23; // ecx@25
  unsigned int v24; // ebx@25
  PgFont *v25; // eax@25
  PgWinText *v26; // eax@25
  int v27; // ebx@26
  NiPointer<PgSprData::PgHitTester> *v28; // edx@27
  unsigned int v29; // ebx@27
  PgFont *v30; // eax@27
  PgWinText *v31; // eax@27
  NiPointer<PgSprData::PgHitTester> *v32; // edx@28
  unsigned int v33; // ebx@28
  PgFont *v34; // eax@28
  PgWinText *v35; // eax@28
  NiPointer<PgSprData::PgHitTester> *v36; // edx@29
  unsigned int v37; // ebx@29
  PgFont *v38; // eax@29
  PgWinText *v39; // eax@29
  int v40; // ebx@29
  char *v41; // eax@29
  PgWinBut *v42; // eax@30
  NiPointer<PgSprData::PgHitTester> *v43; // ecx@30
  unsigned int v44; // ebx@30
  PgFont *v45; // eax@30
  PgWinText *v46; // eax@30
  NiNode *v47; // esi@33
  unsigned int v48; // [sp+2Ch] [bp-58h]@1
  char *v49; // [sp+30h] [bp-54h]@0
  unsigned int v50; // [sp+30h] [bp-54h]@25
  unsigned int uiHeight; // [sp+3Ch] [bp-48h]@17
  unsigned int uiWidth; // [sp+40h] [bp-44h]@17
  int i; // [sp+44h] [bp-40h]@18
  unsigned int v54; // [sp+48h] [bp-3Ch]@25
  int iYOff; // [sp+4Ch] [bp-38h]@17
  int iXOff; // [sp+50h] [bp-34h]@17
  NiPointer<NiNode> spNode; // [sp+54h] [bp-30h]@1
  char temp[3]; // [sp+58h] [bp-2Ch]@18
  int iTop; // [sp+5Ch] [bp-28h]@12
  int iLeft; // [sp+60h] [bp-24h]@12
  char strbuf[15]; // [sp+64h] [bp-20h]@18
  unsigned int v62; // [sp+74h] [bp-10h]@1
  int v63; // [sp+80h] [bp-4h]@1
  int v64; // [sp+84h] [bp+0h]@1

  v62 = (unsigned int)&v64 ^ __security_cookie;
  v48 = (unsigned int)&v64 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v63 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MyHomeMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeMenu.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v63 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v7 = (volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "mhEmotionWin", 0) )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeMenu.nif Create fail", "Node", 0);
    goto LABEL_15;
  }
  v10 = iLeft;
  v11 = iTop;
  iXOff = iLeft;
  iYOff = iTop;
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
LABEL_15:
    v6 = spNode.m_pObject;
    v63 = -1;
    if ( !spNode.m_pObject )
      return 0;
    v7 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
    if ( !InterlockedDecrement(v7) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v12 = g_pkToolTipWin;
  v13 = Font::Get(MAIN_MENU);
  v14 = PgWinAbbreviateText::CreateWin(
          iLeft - v10,
          iTop - v11 + 1,
          uiWidth,
          uiHeight,
          v13,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0,
          0,
          1,
          v12,
          0xCu);
  v2->m_pkFurnitureNameWin = v14;
  ((void (__thiscall *)(PgWinAbbreviateText *, signed int, unsigned int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v14,
    5,
    v48);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkFurnitureNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxGoldColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkFurnitureNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
  ((void (__stdcall *)(_DWORD))v2->m_pkFurnitureNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = 1;
  temp[0] = 0;
  *(_WORD *)&temp[1] = 0;
  strbuf[0] = 0;
  *(_DWORD *)&strbuf[1] = 0;
  *(_DWORD *)&strbuf[5] = 0;
  *(_DWORD *)&strbuf[9] = 0;
  *(_WORD *)&strbuf[13] = 0;
  i = 1;
  v17 = (int)v2->m_pkMenuBtnText;
  while ( 1 )
  {
    _itoa(v16, temp, 10);
    if ( v16 < 10 )
    {
      temp[1] = temp[0];
      temp[0] = 48;
    }
    sprintf(strbuf, "Btn%sNor");
    v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, strbuf, &iLeft, &iTop, 0);
    *(_DWORD *)(v17 - 80) = v18;
    sprintf(strbuf, "Btn%sClick");
    PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, strbuf);
    sprintf(strbuf, "Btn%sOver");
    PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, strbuf);
    v19 = PgWinBut::CreateWin(iLeft - iXOff, iTop - iYOff, v18, &v2->baseclass_0.baseclass_0.baseclass_0, i - 1, 0, 0);
    *(_DWORD *)(v17 - 140) = v19;
    v21 = __OFSUB__(i, 6);
    v20 = i - 6 < 0;
    v19->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    if ( v20 ^ v21 )
    {
      sprintf(strbuf, "MenuBtn%sNor");
      v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, strbuf, &iLeft, &iTop, 0);
      sprintf(strbuf, "MenuBtn%sClick");
      PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, strbuf);
      sprintf(strbuf, "MenuBtn%sOver");
      PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, strbuf);
      if ( (unsigned int)(i - 1) > 3 )
      {
        v42 = PgWinBut::CreateWin(
                iLeft - iXOff,
                iTop - iYOff,
                v22,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x14u,
                0,
                0);
        *(_DWORD *)(v17 - 20) = v42;
        v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v42,
          0);
        v43 = v22->m_akHitTester.m_pBase;
        v44 = v43->m_pObject->m_uiHeight;
        v54 = v43->m_pObject->m_uiWidth;
        v45 = Font::Get(MAIN_MENU);
        v46 = PgWinText::CreateWin(
                iLeft - iXOff,
                iTop - iYOff + 1,
                v54,
                v44,
                v45,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
        *(_DWORD *)v17 = v46;
        v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
          (NiRefObject *)v46,
          (unsigned int)&Color::m_kDxWhiteColor);
        (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v17 + 472))(&unk_9CA259);
      }
      else
      {
        switch ( i )
        {
          case 1:
            *(_DWORD *)(v17 - 20) = PgWinBut::CreateWin(
                                      iLeft - iXOff,
                                      iTop - iYOff,
                                      v22,
                                      &v2->baseclass_0.baseclass_0.baseclass_0,
                                      0x10u,
                                      0,
                                      0);
            v23 = v22->m_akHitTester.m_pBase;
            v24 = v23->m_pObject->m_uiHeight;
            v54 = v23->m_pObject->m_uiWidth;
            v25 = Font::Get(MAIN_MENU);
            v26 = PgWinText::CreateWin(
                    iLeft - iXOff,
                    iTop - iYOff + 1,
                    v54,
                    v24,
                    v25,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            *(_DWORD *)v17 = v26;
            ((void (__thiscall *)(PgWinText *, D3DXCOLOR *, char *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
              v26,
              &Color::m_kDxWhiteColor,
              v49);
            v50 = -454364479;
            goto LABEL_26;
          case 2:
            *(_DWORD *)(v17 - 20) = PgWinBut::CreateWin(
                                      iLeft - iXOff,
                                      iTop - iYOff,
                                      v22,
                                      &v2->baseclass_0.baseclass_0.baseclass_0,
                                      0x11u,
                                      0,
                                      0);
            v28 = v22->m_akHitTester.m_pBase;
            v29 = v28->m_pObject->m_uiHeight;
            v54 = v28->m_pObject->m_uiWidth;
            v30 = Font::Get(MAIN_MENU);
            v31 = PgWinText::CreateWin(
                    iLeft - iXOff,
                    iTop - iYOff + 1,
                    v54,
                    v29,
                    v30,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            *(_DWORD *)v17 = v31;
            ((void (__thiscall *)(PgWinText *, D3DXCOLOR *, char *))v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
              v31,
              &Color::m_kDxWhiteColor,
              v49);
            v50 = 726287527;
            goto LABEL_26;
          case 3:
            *(_DWORD *)(v17 - 20) = PgWinBut::CreateWin(
                                      iLeft - iXOff,
                                      iTop - iYOff,
                                      v22,
                                      &v2->baseclass_0.baseclass_0.baseclass_0,
                                      0x12u,
                                      0,
                                      0);
            v32 = v22->m_akHitTester.m_pBase;
            v33 = v32->m_pObject->m_uiHeight;
            v54 = v32->m_pObject->m_uiWidth;
            v34 = Font::Get(MAIN_MENU);
            v35 = PgWinText::CreateWin(
                    iLeft - iXOff,
                    iTop - iYOff + 1,
                    v54,
                    v33,
                    v34,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            *(_DWORD *)v17 = v35;
            ((void (__thiscall *)(PgWinText *, D3DXCOLOR *, char *))v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
              v35,
              &Color::m_kDxWhiteColor,
              v49);
            v50 = 1436153803;
LABEL_26:
            v27 = **(_DWORD **)v17;
            v49 = TextData2::Get(v50);
            (*(void (__thiscall **)(_DWORD))(v27 + 472))(*(_DWORD *)v17);
            break;
          case 4:
            *(_DWORD *)(v17 - 20) = PgWinBut::CreateWin(
                                      iLeft - iXOff,
                                      iTop - iYOff,
                                      v22,
                                      &v2->baseclass_0.baseclass_0.baseclass_0,
                                      0x13u,
                                      0,
                                      0);
            v36 = v22->m_akHitTester.m_pBase;
            v37 = v36->m_pObject->m_uiHeight;
            v54 = v36->m_pObject->m_uiWidth;
            v38 = Font::Get(MAIN_MENU);
            v39 = PgWinText::CreateWin(
                    iLeft - iXOff,
                    iTop - iYOff + 1,
                    v54,
                    v37,
                    v38,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            *(_DWORD *)v17 = v39;
            v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
              (NiRefObject *)v39,
              (unsigned int)&Color::m_kDxWhiteColor);
            v40 = **(_DWORD **)v17;
            v41 = TextData::Get(0xDDE7EBEFu);
            (*(void (__thiscall **)(_DWORD, char *))(v40 + 472))(*(_DWORD *)v17, v41);
            break;
        }
      }
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v17 + 488))(5);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v17 + 240))(0);
    }
    v17 += 4;
    ++i;
    if ( i > 15 )
      break;
    v16 = i;
  }
  ((void (__thiscall *)(mhEmotionWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5);
  v47 = spNode.m_pObject;
  v63 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v47 )
    v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D1530) --------------------------------------------------------
void __thiscall mhEmotionWin::SetIconTexture(mhEmotionWin *this, PgWinBut *pkBtn, NiSourceTexture *pkTex, char Index)
{
  NiSourceTexture *v4; // esi@1
  PgWinBut *v5; // edi@2
  unsigned int v6; // eax@3
  unsigned int v7; // ebx@3
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // eax@3
  double v9; // st7@3
  NiRefObjectVtbl *v10; // edx@3
  double v11; // st7@3
  NiRefObjectVtbl *v12; // edx@3
  signed int v13; // ebx@3
  PgSpr *v14; // eax@4
  NiScreenElements *v15; // esi@5
  NiScreenElementsData *v16; // ecx@6
  NiScreenElementsData *v17; // ecx@6
  NiScreenElementsData *v18; // ecx@6
  NiScreenElementsData *v19; // ecx@6
  double v20; // [sp+4h] [bp-24h]@3
  float v21; // [sp+Ch] [bp-1Ch]@6
  float v22; // [sp+10h] [bp-18h]@6
  float v23; // [sp+14h] [bp-14h]@6
  float v24; // [sp+18h] [bp-10h]@6
  NiPoint2 kValue; // [sp+1Ch] [bp-Ch]@6
  float fUVTop; // [sp+24h] [bp-4h]@3
  float fUVRighta; // [sp+30h] [bp+8h]@3
  float fUVRight; // [sp+30h] [bp+8h]@3
  float fUVLefta; // [sp+34h] [bp+Ch]@3
  float fUVLeft; // [sp+34h] [bp+Ch]@3
  unsigned int uiYPosa; // [sp+38h] [bp+10h]@3
  float uiYPos; // [sp+38h] [bp+10h]@3

  v4 = pkTex;
  if ( pkTex )
  {
    v5 = pkBtn;
    if ( pkBtn )
    {
      v6 = ((int (__thiscall *)(NiSourceTexture *))pkTex->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(pkTex);
      v7 = 32 * (unsigned __int8)Index % (v6 >> 5);
      uiYPosa = 32 * (unsigned __int8)Index / (v6 >> 5);
      PgSpr::SetTexture(pkBtn->baseclass_0.m_spSpr.m_pObject, &pkTex->baseclass_0);
      fUVLefta = (double)v7;
      fUVLeft = fUVLefta
              / (double)(unsigned int)((int (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[15].__vecDelDtor)(v4);
      fUVRighta = (double)uiYPosa;
      LODWORD(fUVTop) = ((int (__thiscall *)(NiSourceTexture *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[16].__vecDelDtor)(v4);
      v8 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
      fUVTop = fUVRighta / (double)LODWORD(fUVTop);
      v9 = (double)(v7 + ((int (__thiscall *)(PgWinBut *))v8)(v5));
      v10 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v20 = v9;
      fUVRight = v9 / (double)(unsigned int)((int (__thiscall *)(NiSourceTexture *))v10[15].__vecDelDtor)(v4);
      v11 = (double)(uiYPosa
                   + ((int (__thiscall *)(PgWinBut *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v5));
      v12 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v20 = v11;
      v13 = 0;
      uiYPos = v11 / (double)(unsigned int)((int (__thiscall *)(NiSourceTexture *))v12[16].__vecDelDtor)(v4);
      do
      {
        v14 = v5->baseclass_0.m_spSpr.m_pObject;
        if ( v13 < v14->m_akGeom.m_uiSize )
        {
          v15 = v14->m_akGeom.m_pBase[v13].m_pObject;
          if ( v15 )
          {
            v16 = (NiScreenElementsData *)v15->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
            kValue.x = fUVLeft;
            kValue.y = fUVTop;
            NiScreenElementsData::SetTexture(v16, 0, 0, 0, &kValue);
            v17 = (NiScreenElementsData *)v15->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
            v23 = fUVLeft;
            v24 = uiYPos;
            NiScreenElementsData::SetTexture(v17, 0, 1, 0, (NiPoint2 *)&v23);
            v21 = fUVRight;
            v18 = (NiScreenElementsData *)v15->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
            v22 = uiYPos;
            NiScreenElementsData::SetTexture(v18, 0, 2, 0, (NiPoint2 *)&v21);
            v19 = (NiScreenElementsData *)v15->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
            *(float *)&v20 = fUVRight;
            *((float *)&v20 + 1) = fUVTop;
            NiScreenElementsData::SetTexture(v19, 0, 3, 0, (NiPoint2 *)&v20);
          }
        }
        ++v13;
      }
      while ( v13 < 3 );
    }
  }
}

//----- (006D1720) --------------------------------------------------------
void __thiscall mhEmotionWin::UpdateInfo(mhEmotionWin *this)
{
  mhEmotionWin *v1; // esi@1
  char *v2; // edi@1
  signed int v3; // ebx@1
  NiRefObjectVtbl *v4; // edi@3
  char *v5; // eax@3
  int v6; // edi@3
  signed int v7; // ebx@3
  mhObject *v8; // eax@5
  int v9; // edi@7
  int v10; // ebx@7
  int v11; // eax@9
  int v12; // edi@10
  PgWinBut **v13; // ebx@12
  void *v14; // eax@14
  void *v15; // edi@14
  NiRefObjectVtbl *v16; // edi@22
  PgWinText *v17; // ecx@22
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // edx@22
  char v19; // ST08_1@23
  NiSourceTexture *v20; // eax@23
  int v21; // [sp+0h] [bp-24h]@0
  mhObject *pkObj; // [sp+Ch] [bp-18h]@5
  __int16 v23; // [sp+10h] [bp-14h]@13
  MiniHouseFurniture *pkFur; // [sp+14h] [bp-10h]@11
  signed int i; // [sp+18h] [bp-Ch]@12
  unsigned int RecordNo; // [sp+1Ch] [bp-8h]@13
  int v27; // [sp+20h] [bp-4h]@13

  v1 = this;
  v2 = (char *)this->m_pkMenuBtnText;
  v3 = 5;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 - 5) + 240))(0);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v2 + 468))(&Color::m_kDxGrayColor);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = v1->m_pkMenuBtnText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = TextData2::Get(0xE4EAF2C1u);
  v4[118].__vecDelDtor((NiRefObject *)v1->m_pkMenuBtnText[0], (unsigned int)v5);
  v6 = (int)v1->m_pkActBtn;
  v7 = 15;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 240))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0);
    v6 += 4;
    --v7;
  }
  while ( v7 );
  v8 = mhObjectManager::GetObjectA(&stru_AA4FA8, v1->m_ObjID);
  pkObj = v8;
  if ( !v8
    || (v9 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
        v10 = v8->m_iResGUID,
        !(unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v8->m_iResGUID))
    || (unsigned __int16)v10 > *(_WORD *)(v9 + 200)
    || (v11 = *(_DWORD *)(v9 + 196) + 4 * (unsigned __int16)v10, !*(_DWORD *)v11)
    || (v12 = *(_DWORD *)v11) == 0
    || (pkFur = MiniHouseFuritureInfoTab::GetObjByName((char *)(v12 + 2))) == 0 )
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
    return;
  }
  ((void (__stdcall *)(int))v1->m_pkFurnitureNameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v12 + 34);
  i = 0;
  v13 = v1->m_pkActBtn;
  do
  {
    v23 = pkFur->MHEmotionID;
    v27 = 0;
    RecordNo = 0;
    if ( !ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() )
    {
LABEL_19:
      ((void (__stdcall *)(_DWORD))(*v13)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))(*v13)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      goto LABEL_20;
    }
    while ( 1 )
    {
      v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 4), RecordNo);
      v15 = v14;
      if ( *(_WORD *)v14 != v23 || *((_BYTE *)v14 + 2) != -1 )
        goto LABEL_18;
      if ( i == v27 )
        break;
      ++v27;
LABEL_18:
      ++RecordNo;
      if ( RecordNo >= ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() )
        goto LABEL_19;
    }
    ((void (__stdcall *)(signed int))(*v13)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))(*v13)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v19 = *((_BYTE *)v15 + 44);
    v20 = IconMgr::GetTexture((char *)v15 + 45);
    mhEmotionWin::SetIconTexture(v1, *v13, v20, v19);
    PgWin::SetToolTipWinText(&(*v13)->baseclass_0.baseclass_0, (char *)v15 + 12);
LABEL_20:
    ++v13;
    ++i;
  }
  while ( i < 15 );
  if ( pkFur->GameType == 1 )
  {
    ((void (__stdcall *)(signed int, int))v1->m_pkMenuBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      1,
      v21);
    ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkMenuBtnText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(D3DXCOLOR *))v1->m_pkMenuBtnText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    v16 = v1->m_pkMenuBtnText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    TextData2::Get(0x7B955F84u);
    v17 = v1->m_pkMenuBtnText[0];
    v18 = v16[118].__vecDelDtor;
    goto LABEL_26;
  }
  if ( v1->m_bCanAni == 1 )
  {
    ((void (__stdcall *)(signed int, int))v1->m_pkMenuBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      1,
      v21);
    ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_pkMenuBtnText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v17 = v1->m_pkMenuBtnText[0];
    v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
LABEL_26:
    ((void (__thiscall *)(PgWinText *))v18)(v17);
  }
  MiniHouseIndoor::SetFocusObj(&g_kWorld.m_MiniHouseIndoorMode, pkObj, 0);
  if ( dword_AA501C == 2 )
  {
    if ( v1->m_bCanHold == 1 )
    {
      ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v1->m_pkMenuBtnText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(D3DXCOLOR *))v1->m_pkMenuBtnText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
      ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v1->m_pkMenuBtnText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(D3DXCOLOR *))v1->m_pkMenuBtnText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    }
  }
  ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkMenuBtn[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_pkMenuBtnText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v1->m_pkMenuBtnText[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v1->m_pkMenuBtnText[3],
    (unsigned int)&Color::m_kDxWhiteColor);
}
// A97E18: using guessed type int ITableBase_MHEmotion_MiniHouseEmotionTab___ms_pkTable;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;
// AA501C: using guessed type int dword_AA501C;

//----- (006D1B10) --------------------------------------------------------
void __thiscall mhEmotionWin::SendUIMsg(mhEmotionWin *this, unsigned int uiMsg, int lParam)
{
  mhEmotionWin *v3; // ebx@1
  mhObject *v4; // eax@1
  int v5; // esi@3
  int v6; // edi@3
  int v7; // eax@5
  int v8; // eax@6
  MiniHouseFurniture *v9; // eax@7
  PgFrameWork *v10; // ecx@9

  v3 = this;
  v4 = mhObjectManager::GetObjectA(&stru_AA4FA8, this->m_ObjID);
  if ( v4 )
  {
    v5 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
    v6 = v4->m_iResGUID;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
                            ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                            v4->m_iResGUID)
      && (unsigned __int16)v6 <= *(_WORD *)(v5 + 200)
      && (v7 = *(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)v6, *(_DWORD *)v7)
      && (v8 = *(_DWORD *)v7) != 0
      && (v9 = MiniHouseFuritureInfoTab::GetObjByName((char *)(v8 + 2))) != 0 )
    {
      switch ( uiMsg )
      {
        case 0x10u:
          v10 = v3->baseclass_0.m_pkFrameWork;
          if ( v9->GameType == 1 )
            PgFrameWork::AddMsg(v10, 0xE5u, 0, 0);
          else
            PgFrameWork::AddMsg(v10, 0xDCu, 0, 0);
          break;
        case 0x11u:
          PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0xDEu, 0, 0);
          break;
        case 0x12u:
          PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0xE4u, 0, 0);
          break;
        case 0x13u:
          goto LABEL_14;
        default:
          return;
      }
    }
    else
    {
LABEL_14:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006D1C40) --------------------------------------------------------
void __thiscall mhEmotionWin::OnCommand(mhEmotionWin *this, unsigned int wParam, int lParam)
{
  mhEmotionWin *v3; // esi@1
  mhObject *v4; // eax@2
  ItemInfo *v5; // eax@3
  MiniHouseFurniture *v6; // eax@4
  MHEmotion *v7; // eax@5

  v3 = this;
  if ( wParam > 0xE )
  {
    mhEmotionWin::SendUIMsg(this, wParam, lParam);
  }
  else
  {
    v4 = mhObjectManager::GetObjectA(&stru_AA4FA8, this->m_ObjID);
    if ( v4 )
    {
      v5 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v4->m_iResGUID);
      if ( v5 )
      {
        v6 = MiniHouseFuritureInfoTab::GetObjByName(v5->InxName);
        if ( v6 )
        {
          v7 = MiniHouseEmotionTab::GetMenuEmotion(v6->MHEmotionID, wParam);
          if ( v7 )
          {
            PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0xDDu, v7->ActionIndex, 0);
            PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
            return;
          }
        }
      }
    }
  }
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
}

//----- (006D1CE0) --------------------------------------------------------
void __thiscall mhEmotionWin::OnShowWin(mhEmotionWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  mhEmotionWin::UpdateInfo(this);
  PgWin::OnShowWin(v1);
}

//----- (006D1CF0) --------------------------------------------------------
mhEmotionWin *__cdecl mhEmotionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  mhEmotionWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x200u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    mhEmotionWin::mhEmotionWin((mhEmotionWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (mhEmotionWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006D1E20) --------------------------------------------------------
void *__thiscall mhEmotionWin::_vector_deleting_destructor_(mhEmotionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhEmotionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhEmotionWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CA32C: using guessed type int (__stdcall *mhEmotionWin___vftable_)(int uiFlags);
// 9CA34C: using guessed type int (__thiscall *mhEmotionWin___vftable_)(void *p, char);

//----- (006D1E60) --------------------------------------------------------
NiScreenElements *__thiscall PgSpr::GetGeometry(PgSpr *this, unsigned int uiIndex)
{
  NiScreenElements *result; // eax@2

  if ( uiIndex < this->m_akGeom.m_uiSize )
    result = this->m_akGeom.m_pBase[uiIndex].m_pObject;
  else
    result = 0;
  return result;
}

//----- (006D1E80) --------------------------------------------------------
MHEmotion *__cdecl MiniHouseEmotionTab::GetMenuEmotion(unsigned __int16 MHEmotionID, int IndexCount)
{
  int v2; // edi@1
  unsigned int v3; // esi@1
  MHEmotion *result; // eax@2

  v2 = 0;
  v3 = 0;
  if ( ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() )
  {
    do
    {
      result = (MHEmotion *)CDataReader::GetRecord(
                              (CDataReader *)(ITableBase<MHEmotion_MiniHouseEmotionTab>::ms_pkTable + 4),
                              v3);
      if ( result->MHEmotionID == MHEmotionID && result->ActionViewInfo == -1 )
      {
        if ( IndexCount == v2 )
          return result;
        ++v2;
      }
      ++v3;
    }
    while ( v3 < ITableBase<MHEmotion_MiniHouseEmotionTab>::GetTotal() );
  }
  return 0;
}
// A97E18: using guessed type int ITableBase_MHEmotion_MiniHouseEmotionTab___ms_pkTable;

//----- (006D1EE0) --------------------------------------------------------
void __thiscall mhGuestBookWin::mhGuestBookWin(mhGuestBookWin *this)
{
  mhGuestBookWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_hWebWindow = 0;
  v1->m_uiWebXPos = 0;
  v1->m_uiWebYPos = 0;
  v1->m_uiWebWidth = 0;
  v1->m_uiWebHeight = 0;
  v1->m_bOpen = 0;
  v1->m_uiPlaneWebXPos = 0;
  v1->m_uiPlaneWebYPos = 0;
  v1->m_uiPlaneWebWidth = 0;
  v1->m_uiPlaneWebHeight = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhGuestBookWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhGuestBookWin::_vftable_;
}
// 9CA6A8: using guessed type int (__stdcall *mhGuestBookWin___vftable_)(int uiFlags);
// 9CA6C4: using guessed type int (__thiscall *mhGuestBookWin___vftable_)(void *p, char);

//----- (006D1F40) --------------------------------------------------------
void __thiscall mhGuestBookWin::_mhGuestBookWin(mhGuestBookWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhGuestBookWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhGuestBookWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CA6A8: using guessed type int (__stdcall *mhGuestBookWin___vftable_)(int uiFlags);
// 9CA6C4: using guessed type int (__thiscall *mhGuestBookWin___vftable_)(void *p, char);

//----- (006D1F70) --------------------------------------------------------
void __thiscall mhGuestBookWin::OnClose(mhGuestBookWin *this)
{
  HWND__ *v1; // ST00_4@1

  v1 = this->m_hWebWindow;
  this->m_bOpen = 0;
  DestroyWindow(v1);
}

//----- (006D1F90) --------------------------------------------------------
void __thiscall mhGuestBookWin::ReGenPos(mhGuestBookWin *this)
{
  mhGuestBookWin *v1; // esi@1
  int v2; // edx@1
  unsigned int v3; // eax@1
  unsigned int v4; // ecx@1

  v1 = this;
  v1->m_uiWebXPos = v1->m_uiPlaneWebXPos
                  + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1)
     + v1->m_uiPlaneWebYPos
     + 2;
  v3 = v1->m_uiPlaneWebWidth;
  v4 = v1->m_uiPlaneWebHeight;
  v1->m_uiWebYPos = v2;
  v1->m_uiWebWidth = v3;
  v1->m_uiWebHeight = v4;
}

//----- (006D1FE0) --------------------------------------------------------
void __thiscall mhGuestBookWin::OnHelpLink(mhGuestBookWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MiniHomeGuestRecord");
}

//----- (006D2010) --------------------------------------------------------
void __thiscall mhGuestBookWin::UpdateWebPos(mhGuestBookWin *this)
{
  mhGuestBookWin *v1; // esi@1
  tagRECT rect; // [sp+4h] [bp-14h]@3
  unsigned int v3; // [sp+14h] [bp-4h]@1
  int v4; // [sp+18h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  if ( IsWindow(this->m_hWebWindow) )
  {
    if ( v1->m_bOpen )
    {
      mhGuestBookWin::ReGenPos(v1);
      GetWindowRect(g_hMainWnd, &rect);
      MoveWindow(
        v1->m_hWebWindow,
        rect.left + v1->m_uiWebXPos,
        rect.top + v1->m_uiWebYPos,
        v1->m_uiWebWidth,
        v1->m_uiWebHeight,
        1);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006D20A0) --------------------------------------------------------
void __thiscall mhGuestBookWin::OnChangeTab(mhGuestBookWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab)
{
  char *v2; // esi@1

  v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      62,
      &eTab,
      v2);
    if ( *((_DWORD *)v2 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(62, &eTab, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 62, &eTab, v2);
}

//----- (006D2100) --------------------------------------------------------
void __thiscall mhGuestBookWin::OnCommand(mhGuestBookWin *this, unsigned int wParam, int lParam)
{
  mhGuestBookWin *v3; // esi@1

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      mhGuestBookWin::OnChangeTab(this, 0);
      break;
    case 1u:
      mhGuestBookWin::OnChangeTab(this, TE_GUEST_BOOK);
      break;
    case 2u:
      mhGuestBookWin::OnChangeTab(this, TE_EDIT_ROOM);
      break;
    case 3u:
      mhGuestBookWin::OnChangeTab(this, TE_PORTAL_LIST);
      break;
    case 4u:
      mhGuestBookWin::OnChangeTab(this, TE_SETTING);
      break;
    case 5u:
      mhGuestBookWin::OnChangeTab(this, TE_OUT);
      break;
    case 6u:
      PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xE0u, 0, 0);
      MoveWindow(v3->m_hWebWindow, -1000, -1000, -999, -999, 0);
      v3->m_bOpen = 0;
      break;
    case 7u:
      mhGuestBookWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006D21D0) --------------------------------------------------------
void __thiscall mhGuestBookWin::UpdateMeWin(mhGuestBookWin *this, float fCurTime)
{
  mhGuestBookWin *v2; // esi@1
  PgFrameWork *v3; // edi@2

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( !PgWin::IsVisible(&v2->baseclass_0.baseclass_0.baseclass_0) )
      return;
    BYTE3(v3[73].m_kMsgQ.m_uiAlloced) = 0;
    PgFrameWork::AddMsg(v3, 0xE0u, 0, 0);
    MoveWindow(v2->m_hWebWindow, -1000, -1000, -999, -999, 0);
    v2->m_bOpen = 0;
  }
  mhGuestBookWin::UpdateWebPos(v2);
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (006D2250) --------------------------------------------------------
mhGuestBookWin *__cdecl mhGuestBookWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  mhGuestBookWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x180u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    mhGuestBookWin::mhGuestBookWin((mhGuestBookWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (mhGuestBookWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006D2380) --------------------------------------------------------
void __thiscall mhGuestBookWin::ShowWeb(mhGuestBookWin *this, char *eKey, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *tKey)
{
  mhGuestBookWin *v3; // esi@1
  int v4; // edi@2
  int v5; // ebx@2
  const char *v6; // eax@5
  HWND__ *v7; // edi@7
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // edx@7
  void *v9; // [sp-14h] [bp-60h]@4
  unsigned int v10; // [sp-10h] [bp-5Ch]@1
  int kRect_4; // [sp+4h] [bp-48h]@2
  int kRect_8; // [sp+8h] [bp-44h]@2
  int kRect_12; // [sp+Ch] [bp-40h]@2
  NiRect<int> kNiRect; // [sp+10h] [bp-3Ch]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > WebURL; // [sp+20h] [bp-2Ch]@2
  unsigned int v16; // [sp+3Ch] [bp-10h]@1
  int v17; // [sp+48h] [bp-4h]@2
  int v18; // [sp+4Ch] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v10 = (unsigned int)&v18 ^ __security_cookie;
  v3 = this;
  if ( this->m_bOpen != 1 )
  {
    mhGuestBookWin::ReGenPos(this);
    v4 = v3->m_uiWebXPos;
    v5 = 0;
    kRect_8 = v3->m_uiWebWidth;
    kRect_4 = v3->m_uiWebYPos;
    kRect_12 = v3->m_uiWebHeight;
    WebURL.baseclass_0._Myres = 15;
    WebURL.baseclass_0._Mysize = 0;
    WebURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&WebURL, byte_9CA58D, 0);
    v17 = 0;
    if ( !eKey )
    {
      if ( WebURL.baseclass_0._Myres < 0x10 )
        return;
      v9 = *(void **)&WebURL;
      goto LABEL_12;
    }
    v6 = *(const char **)&WebURL;
    if ( WebURL.baseclass_0._Myres < 0x10 )
      v6 = (const char *)&WebURL;
    v7 = CreateWindowExA(
           0,
           "WebCtrl32",
           v6,
           0x90000000u,
           v4,
           kRect_4,
           kRect_8,
           kRect_12,
           g_hMainWnd,
           0,
           g_hMainInstance,
           0);
    ShowWindow(v7, 5);
    v8 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
    v3->m_hWebWindow = v7;
    v3->m_bOpen = 1;
    kNiRect.m_left = 0;
    kNiRect.m_right = 0;
    kNiRect.m_top = 0;
    kNiRect.m_bottom = 0;
    ((void (__thiscall *)(mhGuestBookWin *, NiRect<int> *, unsigned int))v8)(v3, &kNiRect, v10);
    if ( PgWin::ms_uiScreenWidth >= kNiRect.m_right - kNiRect.m_left )
    {
      if ( PgWin::ms_uiScreenHeight >= kNiRect.m_bottom - kNiRect.m_top )
      {
        ((void (__thiscall *)(mhGuestBookWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
        v5 = ((int (__thiscall *)(mhGuestBookWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
      }
    }
    ((void (__thiscall *)(mhGuestBookWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v3);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
      (NiRefObject *)v3,
      v5);
    SetFocus(g_hMainWnd);
    if ( WebURL.baseclass_0._Myres >= 0x10 )
    {
      v9 = *(void **)&WebURL;
LABEL_12:
      operator delete(v9);
      return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006D2520) --------------------------------------------------------
bool __thiscall mhGuestBookWin::Create(mhGuestBookWin *this, PgFrameWork *pkFrameWork)
{
  mhGuestBookWin *v2; // ebx@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  volatile LONG *v7; // eax@7
  bool result; // al@11
  PgSprData *v9; // eax@12
  int v10; // esi@15
  int v11; // edi@15
  NiSourceTexture *v12; // eax@15
  PgSprData *v13; // eax@18
  NiNode *v14; // esi@19
  PgSprData *v15; // eax@23
  PgSprData *v16; // eax@23
  PgSprData *v17; // eax@23
  PgFont *v18; // eax@25
  PgWinText *v19; // esi@25
  NiRefObjectVtbl *v20; // edi@25
  char *v21; // eax@25
  unsigned int v22; // edi@25
  PgSprData *v23; // esi@25
  NiSourceTexture *v24; // esi@25
  PgSprData *v25; // esi@26
  int v26; // eax@28
  char v27; // cl@29
  const char *v28; // eax@30
  PgSprData *v29; // esi@32
  int v30; // eax@32
  char v31; // cl@33
  const char *v32; // eax@34
  int v33; // eax@36
  char v34; // cl@37
  const char *v35; // eax@38
  PgWinBut *v36; // esi@40
  char *v37; // eax@47
  NiNode *v38; // esi@51
  const char *v39; // [sp-20h] [bp-70h]@16
  int *v40; // [sp-1Ch] [bp-6Ch]@16
  int *v41; // [sp-18h] [bp-68h]@16
  NiSourceTexture *v42; // [sp-14h] [bp-64h]@16
  unsigned int v43; // [sp-10h] [bp-60h]@1
  unsigned int v44; // [sp-10h] [bp-60h]@41
  int v45; // [sp+0h] [bp-50h]@28
  unsigned int uiWidth; // [sp+4h] [bp-4Ch]@23
  unsigned int uiHeight; // [sp+8h] [bp-48h]@23
  int iTop; // [sp+Ch] [bp-44h]@12
  int iLeft; // [sp+10h] [bp-40h]@12
  NiPointer<NiNode> spNode; // [sp+14h] [bp-3Ch]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+18h] [bp-38h]@27
  char acNum[12]; // [sp+34h] [bp-1Ch]@27
  unsigned int v53; // [sp+40h] [bp-10h]@1
  int v54; // [sp+4Ch] [bp-4h]@1
  int v55; // [sp+50h] [bp+0h]@1

  v53 = (unsigned int)&v55 ^ __security_cookie;
  v43 = (unsigned int)&v55 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v54 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MiniHomeGuestRecord.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MiniHomeGuestRecord.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v54 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v7 = (volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "mhGuestBookWin", 0) )
  {
    v6 = spNode.m_pObject;
    v54 = -1;
    if ( spNode.m_pObject )
    {
      v7 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
      if ( !InterlockedDecrement(v7) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v10 = iLeft;
  v11 = iTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v42 = v12;
    v41 = &iTop;
    v40 = &iLeft;
    v39 = "Theme";
  }
  else
  {
    v42 = 0;
    v41 = &iTop;
    v40 = &iLeft;
    v39 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v39, v40, v41, v42);
  PgWinSpr::CreateWin(iLeft - v10, iTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(
         &spNode.m_pObject->baseclass_0,
         "Panel02",
         &v2->m_uiPlaneWebXPos,
         &v2->m_uiPlaneWebYPos,
         &v2->m_uiPlaneWebWidth,
         &v2->m_uiPlaneWebHeight) )
  {
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v18 = Font::Get(MAIN_MENU);
      v19 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
        v19,
        1,
        v43);
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
        (NiRefObject *)v19,
        (unsigned int)&Color::m_kDxWinTitleColor);
      v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v21 = TextData2::Get(0x4C494A23u);
      v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
      v22 = 0;
      v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v19,
        0);
      v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
      PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(iLeft, iTop, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 6u, 0, 0);
      v24 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v24);
        PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(iLeft, iTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
      }
      strName.baseclass_0._Myres = 15;
      strName.baseclass_0._Mysize = 0;
      strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      LOBYTE(v54) = 1;
      strcpy(acNum, "0");
      *(_DWORD *)&acNum[2] = 0;
      *(_DWORD *)&acNum[6] = 0;
      *(_WORD *)&acNum[10] = 0;
      do
      {
        v45 = v22 + 1;
        _itoa(v22 + 1, acNum, 10);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnNor0", 7u);
        v26 = (int)acNum;
        do
          v27 = *(_BYTE *)v26++;
        while ( v27 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
          &strName,
          acNum,
          v26 - (_DWORD)&acNum[1]);
        v28 = *(const char **)&strName;
        if ( strName.baseclass_0._Myres < 0x10 )
          v28 = (const char *)&strName;
        v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v28, &iLeft, &iTop, 0);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnClick0", 9u);
        v30 = (int)acNum;
        do
          v31 = *(_BYTE *)v30++;
        while ( v31 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
          &strName,
          acNum,
          v30 - (_DWORD)&acNum[1]);
        v32 = *(const char **)&strName;
        if ( strName.baseclass_0._Myres < 0x10 )
          v32 = (const char *)&strName;
        PgSprData::Add(v29, &spNode.m_pObject->baseclass_0, v32);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnOver0", 8u);
        v33 = (int)acNum;
        do
          v34 = *(_BYTE *)v33++;
        while ( v34 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
          &strName,
          acNum,
          v33 - (_DWORD)&acNum[1]);
        v35 = *(const char **)&strName;
        if ( strName.baseclass_0._Myres < 0x10 )
          v35 = (const char *)&strName;
        PgSprData::Add(v29, &spNode.m_pObject->baseclass_0, v35);
        v36 = PgWinBut::CreateWin(iLeft, iTop, v29, &v2->baseclass_0.baseclass_0.baseclass_0, v22, 0, 0);
        switch ( v22 )
        {
          case 0u:
            v44 = -1683425310;
            goto LABEL_47;
          case 1u:
            v44 = 1279871523;
            goto LABEL_47;
          case 2u:
            v44 = -420723676;
            goto LABEL_47;
          case 3u:
            v44 = -671989437;
            goto LABEL_47;
          case 4u:
            v44 = -555208947;
            goto LABEL_47;
          case 5u:
            v44 = -95796673;
LABEL_47:
            v37 = TextData2::Get(v44);
            PgWin::SetToolTipWinText(&v36->baseclass_0.baseclass_0, v37);
            break;
          default:
            break;
        }
        ++v22;
        v36->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      }
      while ( v45 < 6 );
      ((void (__thiscall *)(mhGuestBookWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(v2);
      mhGuestBookWin::ReGenPos(v2);
      if ( strName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&strName);
      v38 = spNode.m_pObject;
      strName.baseclass_0._Myres = 15;
      strName.baseclass_0._Mysize = 0;
      strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v54 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v38 )
        v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
      result = 1;
    }
    else
    {
      v54 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    v14 = spNode.m_pObject;
    v54 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v14 )
      return 0;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D2B10) --------------------------------------------------------
void *__thiscall mhGuestBookWin::_scalar_deleting_destructor_(mhGuestBookWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhGuestBookWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhGuestBookWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CA6A8: using guessed type int (__stdcall *mhGuestBookWin___vftable_)(int uiFlags);
// 9CA6C4: using guessed type int (__thiscall *mhGuestBookWin___vftable_)(void *p, char);

//----- (006D2B50) --------------------------------------------------------
void __thiscall mhGuestBookWin2::mhGuestBookWin2(mhGuestBookWin2 *this)
{
  mhGuestBookWin2 *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhGuestBookWin2::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhGuestBookWin2::_vftable_;
  v1->m_bOpen = 0;
}
// 9CA994: using guessed type int (__stdcall *mhGuestBookWin2___vftable_)(int uiFlags);
// 9CA9B4: using guessed type int (__thiscall *mhGuestBookWin2___vftable_)(void *p, char);

//----- (006D2B80) --------------------------------------------------------
void __thiscall mhGuestBookWin2::_mhGuestBookWin2(mhGuestBookWin2 *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhGuestBookWin2::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhGuestBookWin2::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CA994: using guessed type int (__stdcall *mhGuestBookWin2___vftable_)(int uiFlags);
// 9CA9B4: using guessed type int (__thiscall *mhGuestBookWin2___vftable_)(void *p, char);

//----- (006D2BA0) --------------------------------------------------------
void __thiscall mhGuestBookWin2::OnWinClose(mhGuestBookWin2 *this)
{
  PgWin *v1; // esi@1
  HWND__ *v2; // ST00_4@1

  v1 = (PgWin *)this;
  v2 = this->m_hWebWindow;
  this->m_bOpen = 0;
  DestroyWindow(v2);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (006D2BD0) --------------------------------------------------------
void __thiscall mhGuestBookWin2::ReGenPos(mhGuestBookWin2 *this)
{
  mhGuestBookWin2 *v1; // esi@1
  int v2; // edx@1
  int v3; // eax@1
  int v4; // ecx@1

  v1 = this;
  v1->m_uiWebXPos = v1->m_uiPlaneWebXPos
                  + ((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
  v2 = ((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v1)
     + v1->m_uiPlaneWebYPos
     + 2;
  v3 = v1->m_uiPlaneWebWidth - 8;
  v4 = v1->m_uiPlaneWebHeight - 10;
  v1->m_uiWebYPos = v2;
  v1->m_uiWebWidth = v3;
  v1->m_uiWebHeight = v4;
}

//----- (006D2C40) --------------------------------------------------------
void __thiscall mhGuestBookWin2::UpdateWebPos(mhGuestBookWin2 *this)
{
  mhGuestBookWin2 *v1; // esi@1
  tagRECT rect; // [sp+4h] [bp-14h]@3
  unsigned int v3; // [sp+14h] [bp-4h]@1
  int v4; // [sp+18h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  if ( IsWindow(this->m_hWebWindow) )
  {
    if ( v1->m_bOpen )
    {
      mhGuestBookWin2::ReGenPos(v1);
      GetWindowRect(g_hMainWnd, &rect);
      MoveWindow(
        v1->m_hWebWindow,
        rect.left + v1->m_uiWebXPos,
        rect.top + v1->m_uiWebYPos,
        v1->m_uiWebWidth,
        v1->m_uiWebHeight,
        1);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006D2CD0) --------------------------------------------------------
void __thiscall mhGuestBookWin2::OnHelpLink(mhGuestBookWin2 *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "HelpWin");
}

//----- (006D2D00) --------------------------------------------------------
void __thiscall mhGuestBookWin2::OnCommand(mhGuestBookWin2 *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  PgFrameWork *v4; // eax@3
  HWND__ *v5; // ST00_4@5

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v4 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v4, "HelpWin");
    }
  }
  else
  {
    v5 = this->m_hWebWindow;
    this->m_bOpen = 0;
    DestroyWindow(v5);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  }
}

//----- (006D2D60) --------------------------------------------------------
void __thiscall mhGuestBookWin2::UpdateMeWin(mhGuestBookWin2 *this, float fCurTime)
{
  mhGuestBookWin2::UpdateWebPos(this);
}

//----- (006D2D70) --------------------------------------------------------
bool __thiscall mhGuestBookWin2::Create(mhGuestBookWin2 *this, PgFrameWork *pkFrameWork)
{
  mhGuestBookWin2 *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  PgSprData *v9; // eax@9
  NiNode *v10; // esi@12
  bool result; // al@16
  int v12; // ebx@17
  NiNode *v13; // esi@20
  PgFont *v14; // eax@24
  PgWinText *v15; // edi@24
  NiRefObjectVtbl *v16; // ST3C_4@24
  char *v17; // eax@24
  NiSourceTexture *v18; // edi@26
  PgSprData *v19; // eax@26
  PgWinSpr *v20; // eax@26
  PgSprData *v21; // edi@26
  NiSourceTexture *v22; // edi@26
  PgSprData *v23; // edi@27
  unsigned int uiWidth; // [sp+38h] [bp-28h]@17
  unsigned int uiHeight; // [sp+3Ch] [bp-24h]@17
  NiPointer<NiTexturingProperty> spTexProp; // [sp+40h] [bp-20h]@4
  NiSourceTexture *pkTexture; // [sp+44h] [bp-1Ch]@7
  int uiLeft; // [sp+48h] [bp-18h]@9
  int uiTop; // [sp+4Ch] [bp-14h]@9
  NiPointer<NiNode> spNode; // [sp+50h] [bp-10h]@1
  int v31; // [sp+5Ch] [bp-4h]@1
  int iOffY; // [sp+68h] [bp+8h]@17

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v31 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\HelpWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v31) = 1;
  if ( v8 )
    pkTexture = (NiSourceTexture *)v8[1].__vecDelDtor;
  else
    pkTexture = 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, pkTexture);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "mhGuestBookWin2", 0) )
  {
    LOBYTE(v31) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v31 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = uiLeft;
  iOffY = uiTop;
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v14 = Font::Get(0);
    v15 = PgWinText::CreateWin(
            uiLeft - v12,
            uiTop - iOffY,
            uiWidth,
            uiHeight,
            v14,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v15,
      1u);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v15,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = TextData2::Get(0x4C494A23u);
    v16[118].__vecDelDtor((NiRefObject *)v15, (unsigned int)v17);
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v15,
      0);
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "Panel01",
           &v2->m_uiPlaneWebXPos,
           &v2->m_uiPlaneWebYPos,
           &v2->m_uiPlaneWebWidth,
           &v2->m_uiPlaneWebHeight) )
    {
      v18 = pkTexture;
      v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
      v20 = PgWinSpr::CreateWin(uiLeft - v12, uiTop - iOffY, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v20,
        1u);
      v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v18);
      PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(uiLeft - v12, uiTop - iOffY, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
      v22 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v22);
        PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add(v23, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(uiLeft - v12, uiTop - iOffY, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      }
      ((void (__thiscall *)(mhGuestBookWin2 *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
        (NiRefObject *)v2,
        0);
      mhGuestBookWin2::ReGenPos(v2);
      LOBYTE(v31) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v31 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v31) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v31 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v31) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v31 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D31A0) --------------------------------------------------------
mhGuestBookWin2 *__cdecl mhGuestBookWin2::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhGuestBookWin2 *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x180u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhGuestBookWin2::_vftable_;
    *((_DWORD *)v2 + 58) = &mhGuestBookWin2::_vftable_;
    *((_BYTE *)v2 + 364) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhGuestBookWin2 *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CA994: using guessed type int (__stdcall *mhGuestBookWin2___vftable_)(int uiFlags);
// 9CA9B4: using guessed type int (__thiscall *mhGuestBookWin2___vftable_)(void *p, char);

//----- (006D32F0) --------------------------------------------------------
void __thiscall mhGuestBookWin2::ShowWeb(mhGuestBookWin2 *this, char *eKey, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *tKey)
{
  mhGuestBookWin2 *v3; // esi@1
  int v4; // edi@2
  int v5; // ebx@2
  const char *v6; // eax@5
  HWND__ *v7; // edi@7
  void *(__thiscall *v8)(NiRefObject *, unsigned int); // edx@7
  void *v9; // [sp-14h] [bp-60h]@4
  unsigned int v10; // [sp-10h] [bp-5Ch]@1
  int kRect_4; // [sp+4h] [bp-48h]@2
  int kRect_8; // [sp+8h] [bp-44h]@2
  int kRect_12; // [sp+Ch] [bp-40h]@2
  NiRect<int> kNiRect; // [sp+10h] [bp-3Ch]@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > WebURL; // [sp+20h] [bp-2Ch]@2
  unsigned int v16; // [sp+3Ch] [bp-10h]@1
  int v17; // [sp+48h] [bp-4h]@2
  int v18; // [sp+4Ch] [bp+0h]@1

  v16 = (unsigned int)&v18 ^ __security_cookie;
  v10 = (unsigned int)&v18 ^ __security_cookie;
  v3 = this;
  if ( this->m_bOpen != 1 )
  {
    mhGuestBookWin2::ReGenPos(this);
    v4 = v3->m_uiWebXPos;
    v5 = 0;
    kRect_8 = v3->m_uiWebWidth;
    kRect_4 = v3->m_uiWebYPos;
    kRect_12 = v3->m_uiWebHeight;
    WebURL.baseclass_0._Myres = 15;
    WebURL.baseclass_0._Mysize = 0;
    WebURL.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&WebURL, byte_9CA8F5, 0);
    v17 = 0;
    if ( !eKey )
    {
      if ( WebURL.baseclass_0._Myres < 0x10 )
        return;
      v9 = *(void **)&WebURL;
      goto LABEL_12;
    }
    v6 = *(const char **)&WebURL;
    if ( WebURL.baseclass_0._Myres < 0x10 )
      v6 = (const char *)&WebURL;
    v7 = CreateWindowExA(
           0,
           "WebCtrl32",
           v6,
           0x90000000u,
           v4,
           kRect_4,
           kRect_8,
           kRect_12,
           g_hMainWnd,
           0,
           g_hMainInstance,
           0);
    ShowWindow(v7, 5);
    v8 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[52].__vecDelDtor;
    v3->m_hWebWindow = v7;
    v3->m_bOpen = 1;
    kNiRect.m_left = 0;
    kNiRect.m_right = 0;
    kNiRect.m_top = 0;
    kNiRect.m_bottom = 0;
    ((void (__thiscall *)(mhGuestBookWin2 *, NiRect<int> *, unsigned int))v8)(v3, &kNiRect, v10);
    if ( PgWin::ms_uiScreenWidth >= kNiRect.m_right - kNiRect.m_left )
    {
      if ( PgWin::ms_uiScreenHeight >= kNiRect.m_bottom - kNiRect.m_top )
      {
        ((void (__thiscall *)(mhGuestBookWin2 *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
        v5 = ((int (__thiscall *)(mhGuestBookWin2 *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
      }
    }
    ((void (__thiscall *)(mhGuestBookWin2 *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor)(v3);
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
      (NiRefObject *)v3,
      v5);
    SetFocus(g_hMainWnd);
    if ( WebURL.baseclass_0._Myres >= 0x10 )
    {
      v9 = *(void **)&WebURL;
LABEL_12:
      operator delete(v9);
      return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006D3490) --------------------------------------------------------
void *__thiscall mhGuestBookWin2::_vector_deleting_destructor_(mhGuestBookWin2 *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhGuestBookWin2::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhGuestBookWin2::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CA994: using guessed type int (__stdcall *mhGuestBookWin2___vftable_)(int uiFlags);
// 9CA9B4: using guessed type int (__thiscall *mhGuestBookWin2___vftable_)(void *p, char);

//----- (006D34D0) --------------------------------------------------------
void __thiscall mhInfoWin::ClearGuestList(mhInfoWin *this)
{
  mhInfoWin *v1; // esi@1

  v1 = this;
  SlideListWin::RemoveAllList(this->m_GuestNameList);
  SlideListWin::UpdateViewList(v1->m_GuestNameList);
}

//----- (006D34F0) --------------------------------------------------------
void __thiscall mhInfoWin::OnHelpLink(mhInfoWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MiniHomeInfo");
}

//----- (006D3520) --------------------------------------------------------
void __thiscall mhInfoWin::UpdateMeWin(mhInfoWin *this, float fCurTime)
{
  PgWin *v2; // edi@1
  PgFrameWork *v3; // esi@2

  v2 = (PgWin *)this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( PgWin::IsVisible(v2) )
    {
      BYTE3(v3[73].m_kMsgQ.m_uiAlloced) = 0;
      PgFrameWork::AddMsg(v3, 0xE0u, 0, 0);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (006D3570) --------------------------------------------------------
void __thiscall mhInfoWin::RefreshSlideBar(mhInfoWin *this)
{
  mhInfoWin *v1; // esi@1

  v1 = this;
  SlideBar::SetSplitCnt(this->m_pkSlideBarGuestNameList, this->m_GuestNameList->m_nSlideSplitCnt);
  v1->m_GuestNameList->m_nViewStartPos = v1->m_pkSlideBarGuestNameList->m_nCurPos;
  SlideListWin::UpdateViewList(v1->m_GuestNameList);
}

//----- (006D35B0) --------------------------------------------------------
void __thiscall mhInfoWin::OnChangeTab(mhInfoWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab)
{
  bool v2; // zf@1
  char *v3; // esi@1
  DirectUserMsgBody_MHInfoTabChanged kBody; // [sp+4h] [bp-4h]@1

  *(_BYTE *)(**(_DWORD **)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 380) = 0;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  v3 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.eChanged = eTab;
  if ( !v2 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      62,
      &kBody,
      v3);
    if ( *((_DWORD *)v3 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))(**((_DWORD **)v3 + 1) + 20))(
        62,
        &kBody,
        v3);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))(*(_DWORD *)v3 + 20))(
    v3,
    62,
    &kBody,
    v3);
}

//----- (006D3620) --------------------------------------------------------
void __thiscall mhInfoWin::OnCommand(mhInfoWin *this, unsigned int wParam, int lParam)
{
  mhInfoWin *v3; // esi@1
  int v4; // eax@9
  const char *v5; // eax@9
  Char *v6; // eax@9
  unsigned __int16 v7; // ax@10
  PgFrameWork *v8; // ecx@10
  Name5 v9; // [sp-14h] [bp-18h]@9
  unsigned int v10; // [sp-Ch] [bp-10h]@10
  unsigned int v11; // [sp-8h] [bp-Ch]@10
  unsigned int v12; // [sp-4h] [bp-8h]@10

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      mhInfoWin::OnChangeTab(this, 0);
      break;
    case 1u:
      mhInfoWin::OnChangeTab(this, TE_GUEST_BOOK);
      break;
    case 2u:
      mhInfoWin::OnChangeTab(this, TE_EDIT_ROOM);
      break;
    case 3u:
      mhInfoWin::OnChangeTab(this, TE_PORTAL_LIST);
      break;
    case 4u:
      mhInfoWin::OnChangeTab(this, TE_SETTING);
      break;
    case 5u:
      mhInfoWin::OnChangeTab(this, TE_OUT);
      break;
    case 6u:
      mhInfoWin::RefreshSlideBar(this);
      break;
    case 7u:
      v4 = SlideListWin::GetCurSelIndex(this->m_GuestNameList);
      v5 = SlideListWin::GetText(v3->m_GuestNameList, v4, 0);
      Name5::Name5(&v9, v5);
      v6 = CharMgr::GetChar(&g_kCharMgr, v9);
      if ( v6 )
      {
        v7 = v6->m_kHandle;
        v8 = v3->baseclass_0.m_pkFrameWork;
        v12 = 0;
        v11 = 0;
        v10 = 200;
        v3->m_ClickedChar = v7;
        PgFrameWork::AddMsg(v8, v10, v11, v12);
      }
      break;
    case 9u:
      PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xE0u, 0, 0);
      break;
    case 0xAu:
      mhInfoWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006D3740) --------------------------------------------------------
bool __thiscall mhInfoWin::SetData(mhInfoWin *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Name, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Lev, int Column)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // edi@1
  mhInfoWin *v5; // esi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v6; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // eax@8

  v4 = Name;
  v5 = this;
  if ( Name->baseclass_0._Myres < 0x10 )
    v6 = Name;
  else
    v6 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Name->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( SlideListWin::SetText(this->m_GuestNameList, Column, 0, v6->baseclass_0.___u0.baseclass_0.dummy) != 1 )
  {
    if ( Name->baseclass_0._Myres >= 0x10 )
      v4 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Name->baseclass_0.___u0.baseclass_0.dummy[0];
    SlideListWin::AddText(v5->m_GuestNameList, v4->baseclass_0.___u0.baseclass_0.dummy);
  }
  v7 = Lev;
  if ( Lev->baseclass_0._Myres >= 0x10 )
    v7 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Lev->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v5->m_GuestNameList, Column, 1u, v7->baseclass_0.___u0.baseclass_0.dummy);
  SlideListWin::UpdateViewList(v5->m_GuestNameList);
  return 1;
}

//----- (006D37B0) --------------------------------------------------------
void __thiscall mhInfoWin::mhInfoWin(mhInfoWin *this)
{
  mhInfoWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhInfoWin::_vftable_;
  v1->m_FullTitleName.baseclass_0._Mysize = 0;
  v1->m_FullTitleName.baseclass_0._Myres = 15;
  v1->m_FullTitleName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_FullRoomMakerName.baseclass_0._Mysize = 0;
  v1->m_FullRoomMakerName.baseclass_0._Myres = 15;
  v1->m_FullRoomMakerName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_PassWord.baseclass_0._Mysize = 0;
  v1->m_PassWord.baseclass_0._Myres = 15;
  v1->m_PassWord.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_bItemView = 0;
  v1->m_MaxPersonCount = 0;
  v1->m_NowPersonCount = 0;
  *(_DWORD *)&v1->m_ClickedChar = -1;
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
  v1->m_pkTextFieldWin[0] = 0;
  v1->m_pkTextFieldWin[1] = 0;
  v1->m_pkTextFieldWin[2] = 0;
  v1->m_pkTextFieldWin[3] = 0;
  v1->m_GuestNameList = 0;
}
// 9CADE0: using guessed type int (__stdcall *mhInfoWin___vftable_)(int uiFlags);
// 9CADFC: using guessed type int (__thiscall *mhInfoWin___vftable_)(void *p, char);

//----- (006D3860) --------------------------------------------------------
void __thiscall mhInfoWin::_mhInfoWin(mhInfoWin *this)
{
  mhInfoWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhInfoWin::_vftable_;
  if ( *(_DWORD *)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
  if ( v1->m_PassWord.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_PassWord.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_PassWord.baseclass_0._Myres = 15;
  v1->m_PassWord.baseclass_0._Mysize = 0;
  v1->m_PassWord.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->m_FullRoomMakerName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_FullRoomMakerName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_FullRoomMakerName.baseclass_0._Myres = 15;
  v1->m_FullRoomMakerName.baseclass_0._Mysize = 0;
  v1->m_FullRoomMakerName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v1->m_FullTitleName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&v1->m_FullTitleName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->m_FullTitleName.baseclass_0._Mysize = 0;
  v1->m_FullTitleName.baseclass_0._Myres = 15;
  v1->m_FullTitleName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9CADE0: using guessed type int (__stdcall *mhInfoWin___vftable_)(int uiFlags);
// 9CADFC: using guessed type int (__thiscall *mhInfoWin___vftable_)(void *p, char);

//----- (006D3930) --------------------------------------------------------
mhInfoWin *__cdecl mhInfoWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  mhInfoWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1E4u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    mhInfoWin::mhInfoWin((mhInfoWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (mhInfoWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006D3A60) --------------------------------------------------------
void __thiscall mhInfoWin::RefreshInfoPage(mhInfoWin *this)
{
  float v1; // esi@1
  mhInfoWin *v2; // ebx@1
  Char *v3; // edi@2
  char acTemp[8]; // [sp+8h] [bp-Ch]@7
  unsigned int v5; // [sp+10h] [bp-4h]@1
  int v6; // [sp+14h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = fTime;
  v2 = this;
  this->m_NowPersonCount = 0;
  while ( LODWORD(v1) )
  {
    v3 = *(Char **)(LODWORD(v1) + 8);
    LODWORD(v1) = *LODWORD(v1);
    if ( !(unsigned __int8)((int (__thiscall *)(Char *))v3->baseclass_0.vfptr[1].Affect)(v3)
      && !Char::IsNPC(v3)
      && !Char::IsLinkGate(v3) )
      ++v2->m_NowPersonCount;
  }
  *(_DWORD *)acTemp = 0;
  *(_DWORD *)&acTemp[4] = 0;
  sprintf(acTemp, "%d/%d");
  v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
    (NiRefObject *)v2->m_pkTextFieldWin[2],
    (unsigned int)acTemp);
}
// A85C00: using guessed type int __security_cookie;

//----- (006D3B20) --------------------------------------------------------
void __thiscall mhInfoWin::RefreshGuestPage(mhInfoWin *this)
{
  float v1; // edi@1
  mhInfoWin *v2; // esi@1
  SlideListWin *v3; // ecx@1
  float v4; // ecx@4
  int v5; // edi@4
  char v6; // al@5
  int v7; // eax@7
  int v8; // eax@10
  bool v9; // zf@11
  int v10; // eax@11
  char v11; // cl@13
  int (__thiscall *v12)(_DWORD); // eax@14
  const char *v13; // eax@14
  char v14; // cl@19
  unsigned int v15; // [sp-10h] [bp-A4h]@1
  float iter; // [sp+0h] [bp-94h]@4
  mhInfoWin *v17; // [sp+4h] [bp-90h]@1
  int i; // [sp+8h] [bp-8Ch]@1
  int Pos; // [sp+Ch] [bp-88h]@1
  char acLev[3]; // [sp+10h] [bp-84h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+14h] [bp-80h]@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Name; // [sp+30h] [bp-64h]@14
  void *p; // [sp+4Ch] [bp-48h]@20
  int v24; // [sp+5Ch] [bp-38h]@20
  unsigned int v25; // [sp+60h] [bp-34h]@20
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Lev; // [sp+68h] [bp-2Ch]@18
  unsigned int v27; // [sp+84h] [bp-10h]@1
  int v28; // [sp+90h] [bp-4h]@14
  int v29; // [sp+94h] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v15 = (unsigned int)&v29 ^ __security_cookie;
  v1 = fTime;
  v2 = this;
  v3 = this->m_GuestNameList;
  v17 = v2;
  *(_WORD *)acLev = 12336;
  acLev[2] = 48;
  SlideListWin::RemoveAllList(v3);
  SlideListWin::UpdateViewList(v2->m_GuestNameList);
  Pos = 0;
  i = 0;
  if ( unk_AA27FC > 0 )
  {
    while ( 1 )
    {
      LODWORD(v4) = *LODWORD(v1);
      v5 = *(_DWORD *)(LODWORD(v1) + 8);
      iter = v4;
      if ( v5 )
      {
        v6 = MiniHouseIndoor::GetCharLev(&g_kWorld.m_MiniHouseIndoorMode, *(_WORD *)(v5 + 548));
        _itoa((unsigned __int8)v6, acLev, 10);
        if ( !((int (__cdecl *)(unsigned int))v2->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(v15) )
          goto LABEL_28;
        if ( v2->m_FullRoomMakerName.baseclass_0._Mysize )
        {
          v7 = (int)&v2->m_FullRoomMakerName;
          if ( v2->m_FullRoomMakerName.baseclass_0._Myres >= 0x10 )
            v7 = *(_DWORD *)v7;
        }
        else
        {
          v7 = ((int (*)(void))v2->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
        }
        v8 = strcmp((const char *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 84))(v5), (const char *)v7);
        v2 = v17;
        if ( v8 )
        {
LABEL_28:
          v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 84))(v5) == 0;
          v10 = (int)acLev;
          if ( v9 )
          {
            Lev.baseclass_0._Myres = 15;
            Lev.baseclass_0._Mysize = 0;
            Lev.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            do
              v14 = *(_BYTE *)v10++;
            while ( v14 );
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
              &Lev,
              acLev,
              v10 - (_DWORD)&acLev[1]);
            v28 = 2;
            v25 = 15;
            v24 = 0;
            LOBYTE(p) = 0;
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
              "UnKnown",
              7u);
            LOBYTE(v28) = 3;
            mhInfoWin::SetData(
              v2,
              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
              &Lev,
              Pos++);
            if ( v25 >= 0x10 )
              operator delete(p);
            v25 = 15;
            v24 = 0;
            LOBYTE(p) = 0;
            v28 = -1;
            if ( Lev.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&Lev);
            Lev.baseclass_0._Myres = 15;
            Lev.baseclass_0._Mysize = 0;
            Lev.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            thisa.baseclass_0._Myres = 15;
            thisa.baseclass_0._Mysize = 0;
            thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            do
              v11 = *(_BYTE *)v10++;
            while ( v11 );
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
              &thisa,
              acLev,
              v10 - (_DWORD)&acLev[1]);
            v12 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v5 + 84);
            v28 = 0;
            v13 = (const char *)v12(v5);
            Name.baseclass_0._Myres = 15;
            Name.baseclass_0._Mysize = 0;
            Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Name, v13, strlen(v13));
            LOBYTE(v28) = 1;
            mhInfoWin::SetData(v2, &Name, &thisa, Pos++);
            if ( Name.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&Name);
            Name.baseclass_0._Myres = 15;
            Name.baseclass_0._Mysize = 0;
            Name.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            v28 = -1;
            if ( thisa.baseclass_0._Myres >= 0x10 )
              operator delete(*(void **)&thisa);
          }
        }
      }
      ++i;
      if ( i >= unk_AA27FC )
        break;
      v1 = iter;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006D3E30) --------------------------------------------------------
bool __thiscall mhInfoWin::Create(mhInfoWin *this, PgFrameWork *pkFrameWork)
{
  mhInfoWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  int v7; // eax@7
  PgSprData *v9; // eax@13
  int v10; // edi@16
  int v11; // ebx@16
  NiSourceTexture *v12; // eax@16
  PgSprData *v13; // eax@19
  PgSprData *v14; // eax@19
  PgSprData *v15; // eax@19
  PgSprData *v16; // eax@19
  PgSprData *v17; // eax@19
  PgFont *v18; // eax@22
  PgWinText *v19; // edi@22
  NiRefObjectVtbl *v20; // ebx@22
  char *v21; // eax@22
  PgSprData *v22; // edi@22
  NiSourceTexture *v23; // edi@22
  PgSprData *v24; // edi@23
  NiPointer<PgSprData::PgHitTester> *v25; // edx@24
  unsigned int v26; // edi@24
  unsigned int v27; // ebx@24
  PgFont *v28; // eax@24
  PgWinText *v29; // edi@24
  NiRefObjectVtbl *v30; // ebx@24
  char *v31; // eax@24
  PgSprData::PgHitTester *v32; // eax@24
  unsigned int v33; // edi@24
  unsigned int v34; // ebx@24
  PgWin *v35; // ST40_4@24
  PgFont *v36; // eax@24
  PgWinAbbreviateText *v37; // eax@24
  NiPointer<PgSprData::PgHitTester> *v38; // ecx@24
  unsigned int v39; // edi@24
  unsigned int v40; // ebx@24
  PgFont *v41; // eax@24
  PgWinText *v42; // edi@24
  NiRefObjectVtbl *v43; // ebx@24
  char *v44; // eax@24
  PgSprData::PgHitTester *v45; // eax@24
  unsigned int v46; // edi@24
  unsigned int v47; // ebx@24
  PgWin *v48; // ST40_4@24
  PgFont *v49; // eax@24
  PgWinAbbreviateText *v50; // eax@24
  NiPointer<PgSprData::PgHitTester> *v51; // ecx@24
  unsigned int v52; // edi@24
  unsigned int v53; // ebx@24
  PgFont *v54; // eax@24
  PgWinText *v55; // edi@24
  NiRefObjectVtbl *v56; // ebx@24
  char *v57; // eax@24
  PgSprData::PgHitTester *v58; // eax@24
  unsigned int v59; // edi@24
  unsigned int v60; // ebx@24
  PgFont *v61; // eax@24
  PgWinText *v62; // eax@24
  NiPointer<PgSprData::PgHitTester> *v63; // ecx@24
  unsigned int v64; // edi@24
  unsigned int v65; // ebx@24
  PgFont *v66; // eax@24
  PgWinText *v67; // edi@24
  NiRefObjectVtbl *v68; // ebx@24
  char *v69; // eax@24
  PgSprData::PgHitTester *v70; // eax@24
  unsigned int v71; // edi@24
  unsigned int v72; // ebx@24
  PgFont *v73; // eax@24
  PgWinText *v74; // eax@24
  char *v75; // eax@24
  char *v76; // eax@24
  char *v77; // eax@24
  char *v78; // eax@24
  char *v79; // eax@24
  char *v80; // eax@24
  unsigned int v81; // ebx@24
  int v82; // eax@25
  char v83; // cl@26
  const char *v84; // eax@27
  int v85; // eax@29
  char v86; // cl@30
  const char *v87; // eax@31
  char *v88; // eax@33
  int v89; // ebx@35
  SLWCreateInfo::Item *v90; // ebx@36
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v91; // ebx@36
  SLWCreateInfo::Item *v92; // ebx@42
  SLWCreateInfo::Item *v93; // ebx@44
  PgSprData *v94; // eax@46
  SlideListWin *v95; // eax@46
  PgSprData *v96; // eax@46
  SlideBar *v97; // eax@46
  SlideBar *v98; // ebx@46
  int v99; // eax@46
  NiNode *v100; // esi@50
  const char *v101; // [sp-20h] [bp-158h]@17
  int *v102; // [sp-1Ch] [bp-154h]@17
  int *v103; // [sp-18h] [bp-150h]@17
  volatile LONG *v104; // [sp-14h] [bp-14Ch]@8
  NiSourceTexture *v105; // [sp-14h] [bp-14Ch]@17
  unsigned int v106; // [sp-10h] [bp-148h]@1
  unsigned int uiHeight; // [sp+0h] [bp-138h]@19
  unsigned int uiWidth; // [sp+4h] [bp-134h]@19
  SLWCreateInfo kCreateInfo; // [sp+8h] [bp-130h]@36
  char *pcText; // [sp+24h] [bp-114h]@24
  PgSprData *pkSprData; // [sp+28h] [bp-110h]@29
  std::_Nonscalar_ptr_iterator_tag __formal[4]; // [sp+2Ch] [bp-10Ch]@25
  NiPointer<NiNode> spNode; // [sp+30h] [bp-108h]@1
  int iLeft; // [sp+34h] [bp-104h]@13
  int iTop; // [sp+38h] [bp-100h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+3Ch] [bp-FCh]@24
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+58h] [bp-E0h]@36
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > pkToolTipText[6]; // [sp+74h] [bp-C4h]@24
  char acNum[12]; // [sp+11Ch] [bp-1Ch]@24
  unsigned int v120; // [sp+128h] [bp-10h]@1
  int v121; // [sp+134h] [bp-4h]@1
  int v122; // [sp+138h] [bp+0h]@1

  v120 = (unsigned int)&v122 ^ __security_cookie;
  v106 = (unsigned int)&v122 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v121 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MiniHomeInfo.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MiniHomeInfo.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v121 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v7 = (int)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "mhInfoWin", 0) )
  {
    v6 = spNode.m_pObject;
    v121 = -1;
    if ( spNode.m_pObject )
    {
      v7 = (int)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
      v104 = (volatile LONG *)v7;
      goto LABEL_9;
    }
    return 0;
  }
  v10 = iLeft;
  v11 = iTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v105 = v12;
    v103 = &iTop;
    v102 = &iLeft;
    v101 = "Theme";
  }
  else
  {
    v105 = 0;
    v103 = &iTop;
    v102 = &iLeft;
    v101 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v101, v102, v103, v105);
  PgWinSpr::CreateWin(iLeft - v10, iTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel05", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v121 = -1;
    if ( spNode.m_pObject )
    {
      v104 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_9:
      if ( !InterlockedDecrement(v104) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
      return 0;
    }
    return 0;
  }
  v18 = Font::Get(MAIN_MENU);
  v19 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v19,
    1,
    v106);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v19,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData2::Get(0x9BA8F7E2u);
  v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(iLeft, iTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0, 0);
  v23 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v23);
    PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(iLeft, iTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  }
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v26 = v25->m_pObject->m_uiHeight;
  v27 = v25->m_pObject->m_uiWidth;
  v28 = Font::Get(MAIN_MENU);
  v29 = PgWinText::CreateWin(iLeft, iTop, v27, v26, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v29,
    5u);
  v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = TextData2::Get(0xE0F1FCEFu);
  v30[118].__vecDelDtor((NiRefObject *)v29, (unsigned int)v31);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField01", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v33 = v32->m_uiHeight;
  v34 = v32->m_uiWidth;
  v35 = g_pkToolTipWin;
  v36 = Font::Get(MAIN_MENU);
  v37 = PgWinAbbreviateText::CreateWin(
          iLeft,
          iTop,
          v34,
          v33,
          v36,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0,
          0,
          1,
          v35,
          0x1Eu);
  v2->m_pkTextFieldWin[0] = (PgWinText *)v37;
  v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v37,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CABEA);
  v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v39 = v38->m_pObject->m_uiHeight;
  v40 = v38->m_pObject->m_uiWidth;
  v41 = Font::Get(MAIN_MENU);
  v42 = PgWinText::CreateWin(iLeft, iTop, v40, v39, v41, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v42,
    5u);
  v43 = v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v44 = TextData2::Get(0x2218767Du);
  v43[118].__vecDelDtor((NiRefObject *)v42, (unsigned int)v44);
  v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v42,
    0);
  v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v46 = v45->m_uiHeight;
  v47 = v45->m_uiWidth;
  v48 = g_pkToolTipWin;
  v49 = Font::Get(MAIN_MENU);
  v50 = PgWinAbbreviateText::CreateWin(
          iLeft,
          iTop,
          v47,
          v46,
          v49,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0,
          0,
          1,
          v48,
          0x1Eu);
  v2->m_pkTextFieldWin[1] = (PgWinText *)v50;
  v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v50,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CABEB);
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v52 = v51->m_pObject->m_uiHeight;
  v53 = v51->m_pObject->m_uiWidth;
  v54 = Font::Get(MAIN_MENU);
  v55 = PgWinText::CreateWin(iLeft, iTop, v53, v52, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v55,
    5u);
  v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v57 = TextData2::Get(0xA2FAFBE1u);
  v56[118].__vecDelDtor((NiRefObject *)v55, (unsigned int)v57);
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v55,
    0);
  v58 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v59 = v58->m_uiHeight;
  v60 = v58->m_uiWidth;
  v61 = Font::Get(MAIN_MENU);
  v62 = PgWinText::CreateWin(iLeft, iTop, v60, v59, v61, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTextFieldWin[2] = v62;
  v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v62,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CABF5);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v63 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text04", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v64 = v63->m_pObject->m_uiHeight;
  v65 = v63->m_pObject->m_uiWidth;
  v66 = Font::Get(MAIN_MENU);
  v67 = PgWinText::CreateWin(iLeft, iTop, v65, v64, v66, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v67,
    5u);
  v68 = v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v69 = TextData::Get(0x9798BBB1u);
  v68[118].__vecDelDtor((NiRefObject *)v67, (unsigned int)v69);
  v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v67,
    0);
  v70 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField04", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v71 = v70->m_uiHeight;
  v72 = v70->m_uiWidth;
  v73 = Font::Get(MAIN_MENU);
  v74 = PgWinText::CreateWin(iLeft, iTop, v72, v71, v73, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTextFieldWin[3] = v74;
  v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v74,
    5u);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CABF6);
  ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v2->m_pkTextFieldWin[3]->m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v121) = 1;
  strcpy(acNum, "0");
  *(_DWORD *)&acNum[2] = 0;
  *(_DWORD *)&acNum[6] = 0;
  *(_WORD *)&acNum[10] = 0;
  v75 = TextData2::Get(0x9BA8F7E2u);
  pkToolTipText[0].baseclass_0._Myres = 15;
  pkToolTipText[0].baseclass_0._Mysize = 0;
  pkToolTipText[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(pkToolTipText, v75, strlen(v75));
  LOBYTE(v121) = 2;
  v76 = TextData2::Get(0x4C494A23u);
  pkToolTipText[1].baseclass_0._Myres = 15;
  pkToolTipText[1].baseclass_0._Mysize = 0;
  pkToolTipText[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[1], v76, strlen(v76));
  LOBYTE(v121) = 3;
  v77 = TextData2::Get(0xE6EC4424u);
  pkToolTipText[2].baseclass_0._Myres = 15;
  pkToolTipText[2].baseclass_0._Mysize = 0;
  pkToolTipText[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[2], v77, strlen(v77));
  LOBYTE(v121) = 4;
  v78 = TextData2::Get(0xD7F24143u);
  pkToolTipText[3].baseclass_0._Myres = 15;
  pkToolTipText[3].baseclass_0._Mysize = 0;
  pkToolTipText[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[3], v78, strlen(v78));
  LOBYTE(v121) = 5;
  v79 = TextData2::Get(0xDEE82F0Du);
  pkToolTipText[4].baseclass_0._Myres = 15;
  pkToolTipText[4].baseclass_0._Mysize = 0;
  pkToolTipText[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[4], v79, strlen(v79));
  LOBYTE(v121) = 6;
  v80 = TextData2::Get(0xFA4A423Fu);
  pkToolTipText[5].baseclass_0._Myres = 15;
  pkToolTipText[5].baseclass_0._Mysize = 0;
  pkToolTipText[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[5], v80, strlen(v80));
  LOBYTE(v121) = 7;
  v81 = 0;
  pcText = (char *)pkToolTipText;
  do
  {
    *(_DWORD *)&__formal[0].dummy[0] = v81 + 1;
    _itoa(v81 + 1, acNum, 10);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnNor0", 7u);
    v82 = (int)acNum;
    do
      v83 = *(_BYTE *)v82++;
    while ( v83 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &strName,
      acNum,
      v82 - (_DWORD)&acNum[1]);
    v84 = *(const char **)&strName;
    if ( strName.baseclass_0._Myres < 0x10 )
      v84 = (const char *)&strName;
    pkSprData = PgSprData::Create(&spNode.m_pObject->baseclass_0, v84, &iLeft, &iTop, 0);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnOver0", 8u);
    v85 = (int)acNum;
    do
      v86 = *(_BYTE *)v85++;
    while ( v86 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &strName,
      acNum,
      v85 - (_DWORD)&acNum[1]);
    v87 = *(const char **)&strName;
    if ( strName.baseclass_0._Myres < 0x10 )
      v87 = (const char *)&strName;
    PgSprData::Add(pkSprData, &spNode.m_pObject->baseclass_0, v87);
    pkSprData = (PgSprData *)ColumnBut::CreateWin(
                               iLeft,
                               iTop,
                               pkSprData,
                               &v2->baseclass_0.baseclass_0.baseclass_0,
                               v81,
                               0);
    std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
      (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkHouseTabList,
      (const unsigned int *)&pkSprData);
    v88 = pcText;
    if ( *((_DWORD *)pcText + 5) >= 0x10u )
      v88 = *(char **)pcText;
    PgWin::SetToolTipWinText(
      *(PgWin **)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v81),
      v88);
    v89 = *(_DWORD *)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v81);
    pcText += 28;
    *(_DWORD *)(v89 + 272) = g_pkToolTipWin;
    v81 = *(_DWORD *)&__formal[0].dummy[0];
  }
  while ( *(_DWORD *)&__formal[0].dummy[0] < 6u );
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v121) = 8;
  v90 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v90->nItemType = 1;
  v90->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  v91 = &v90->vecNodeName;
  LOBYTE(v121) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v91,
    &thisa);
  LOBYTE(v121) = 8;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v121) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v91,
    &thisa);
  LOBYTE(v121) = 8;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v121) = 11;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    v91,
    &thisa);
  LOBYTE(v121) = 8;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v92 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v92->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
  LOBYTE(v121) = 12;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v92->vecNodeName,
    &thisa);
  LOBYTE(v121) = 8;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v92->pNode = spNode.m_pObject;
  v92->bAbbreviatable = 1;
  v93 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  v93->nItemType = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
  LOBYTE(v121) = 13;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    &v93->vecNodeName,
    &thisa);
  LOBYTE(v121) = 8;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v93->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ColumnBox", &iLeft, &iTop, 0);
  v95 = SlideListWin::CreateWin(iLeft, iTop, v94, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 1u, 0);
  v2->m_GuestNameList = v95;
  v95->m_uiRClickMsg = 7;
  SlideListWin::AddText(v2->m_GuestNameList, &byte_9CABF7);
  SlideListWin::SetCurSelIndex(v2->m_GuestNameList, 0);
  v2->m_GuestNameList->m_nViewStartPos = 0;
  SlideListWin::UpdateViewList(v2->m_GuestNameList);
  v96 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, 0);
  v97 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar",
          "SlideBar_UpBtn",
          "SlideBar_DnBtn",
          v96,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarGuestNameList = v97;
  v97->m_uiClickMsg = 6;
  v2->m_pkSlideBarGuestNameList->m_eType = 1;
  v98 = v2->m_pkSlideBarGuestNameList;
  *(_DWORD *)&__formal[0].dummy[0] = v2->m_pkSlideBarGuestNameList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  (*(void (__thiscall **)(SlideBar *))(*(_DWORD *)&__formal[0].dummy[0] + 168))(v98);
  v99 = ((int (__thiscall *)(SlideBar *))v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v98);
  (*(void (__thiscall **)(SlideBar *, int))(*(_DWORD *)&__formal[0].dummy[0] + 308))(v2->m_pkSlideBarGuestNameList, v99);
  SlideBar::SetSplitCnt(v2->m_pkSlideBarGuestNameList, v2->m_GuestNameList->m_nSlideSplitCnt);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)v2,
    0);
  LOBYTE(v121) = 7;
  if ( *(_DWORD *)&kCreateInfo )
  {
    std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
      *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
      kCreateInfo.m_arrItem.baseclass_0._Mylast,
      &kCreateInfo.m_arrItem.baseclass_0._Alval,
      __formal[0]);
    operator delete(*(void **)&kCreateInfo);
  }
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  LOBYTE(v121) = 1;
  _eh_vector_destructor_iterator_(
    pkToolTipText,
    0x1Cu,
    6,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  if ( strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strName);
  v100 = spNode.m_pObject;
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v121 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v100 )
    v100->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v100, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D4E90) --------------------------------------------------------
void __thiscall mhInfoWin::OnClose(mhInfoWin *this)
{
  mhInfoWin *v1; // esi@1

  v1 = this;
  SlideListWin::RemoveAllList(this->m_GuestNameList);
  SlideListWin::UpdateViewList(v1->m_GuestNameList);
}

//----- (006D4EB0) --------------------------------------------------------
void *__thiscall mhInfoWin::_vector_deleting_destructor_(mhInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  mhInfoWin::_mhInfoWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006D4EE0) --------------------------------------------------------
void __thiscall mhInfoWin::OnShowWin(mhInfoWin *this)
{
  mhInfoWin *v1; // esi@1

  v1 = this;
  mhInfoWin::RefreshGuestPage(this);
  mhInfoWin::RefreshInfoPage(v1);
}

//----- (006D4F10) --------------------------------------------------------
void __thiscall mhInputPassWordWin::OnCommand(mhInputPassWordWin *this, unsigned int wParam, int lParam)
{
  mhInputPassWordWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam != 1 )
      return;
    PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xCDu, 0, 0);
  }
  GameFrameWork::OnCloseMHInputPassWordWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
}

//----- (006D4F60) --------------------------------------------------------
void __thiscall mhInputPassWordWin::mhInputPassWordWin(mhInputPassWordWin *this)
{
  mhInputPassWordWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhInputPassWordWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhInputPassWordWin::_vftable_;
  v1->m_spRoomPassWord.m_pObject = 0;
  v1->mh_hnd = 0;
}
// 9CB0B0: using guessed type int (__stdcall *mhInputPassWordWin___vftable_)(int uiFlags);
// 9CB0CC: using guessed type int (__thiscall *mhInputPassWordWin___vftable_)(void *p, char);

//----- (006D4F90) --------------------------------------------------------
void __thiscall mhInputPassWordWin::_mhInputPassWordWin(mhInputPassWordWin *this)
{
  PgWinFrame *v1; // esi@1
  EditWin *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhInputPassWordWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhInputPassWordWin::_vftable_;
  v2 = this->m_spRoomPassWord.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9CB0B0: using guessed type int (__stdcall *mhInputPassWordWin___vftable_)(int uiFlags);
// 9CB0CC: using guessed type int (__thiscall *mhInputPassWordWin___vftable_)(void *p, char);

//----- (006D5020) --------------------------------------------------------
bool __thiscall mhInputPassWordWin::Create(mhInputPassWordWin *this, PgFrameWork *pkFrameWork)
{
  mhInputPassWordWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool v7; // zf@7
  PgSprData *v9; // edi@11
  unsigned int v10; // ST08_4@11
  EditWin *v11; // eax@11
  EditWin *v12; // edi@11
  EditWin *v13; // ebx@11
  PgFont *v14; // eax@22
  PgWinText *v15; // edi@22
  NiRefObjectVtbl *v16; // ebx@22
  char *v17; // eax@22
  PgSprData *v18; // edi@22
  NiPointer<PgSprData::PgHitTester> *v19; // ecx@22
  unsigned int v20; // edi@22
  unsigned int v21; // ebx@22
  PgFont *v22; // eax@22
  PgWinText *v23; // edi@22
  NiRefObjectVtbl *v24; // ebx@22
  char *v25; // eax@22
  PgSprData *v26; // edi@22
  NiPointer<PgSprData::PgHitTester> *v27; // ecx@22
  unsigned int v28; // edi@22
  unsigned int v29; // ebx@22
  PgFont *v30; // eax@22
  PgWinText *v31; // edi@22
  NiRefObjectVtbl *v32; // ebx@22
  char *v33; // eax@22
  NiNode *v34; // esi@23
  int iXOff; // [sp+44h] [bp-28h]@4
  int iYOff; // [sp+48h] [bp-24h]@4
  unsigned int uiWidth; // [sp+4Ch] [bp-20h]@18
  unsigned int uiHeight; // [sp+50h] [bp-1Ch]@18
  int iLeft; // [sp+54h] [bp-18h]@11
  int iTop; // [sp+58h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-10h]@1
  int v42; // [sp+68h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v42 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\InputPassword.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iXOff, &iYOff, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "mhInputPassWordWin", 0) )
  {
    v6 = spNode.m_pObject;
    v42 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
LABEL_8:
    if ( !v7 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    return 0;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextInput01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - 1, iTop - 2, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v10 = v9->m_akHitTester.m_pBase->m_pObject->m_uiWidth;
  v11 = EditWin::CreateWin(iLeft, iTop, v10, v10, &v2->baseclass_0.baseclass_0.baseclass_0, PASSWD, 8u, 1u, 1, 0, 1);
  v12 = v2->m_spRoomPassWord.m_pObject;
  v13 = v11;
  if ( v12 != v11 )
  {
    if ( v12
      && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v12,
        1u);
    v2->m_spRoomPassWord.m_pObject = v13;
    if ( v13 )
      InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  EditWin::SetImeStatus(v2->m_spRoomPassWord.m_pObject, IS_KOREAN);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v42 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_8;
  }
  v14 = Font::Get(MAIN_MENU);
  v15 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v15,
    5u);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v15,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v17 = TextData::Get(0xA7F6EEE4u);
  v16[118].__vecDelDtor((NiRefObject *)v15, (unsigned int)v17);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor01", &iLeft, &iTop, 0);
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "BtnClick01");
  PgSprData::Add(v18, &spNode.m_pObject->baseclass_0, "BtnOver01");
  PgWinBut::CreateWin(iLeft, iTop, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v19 = v18->m_akHitTester.m_pBase;
  v20 = v19->m_pObject->m_uiHeight;
  v21 = v19->m_pObject->m_uiWidth;
  v22 = Font::Get(MAIN_MENU);
  v23 = PgWinText::CreateWin(iLeft, iTop, v21, v20, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v23,
    5u);
  v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 = TextData::Get(0x4F5F499Fu);
  v24[118].__vecDelDtor((NiRefObject *)v23, (unsigned int)v25);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v23,
    0);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &iLeft, &iTop, 0);
  PgSprData::Add(v26, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v26, &spNode.m_pObject->baseclass_0, "BtnOver02");
  PgWinBut::CreateWin(iLeft, iTop, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v27 = v26->m_akHitTester.m_pBase;
  v28 = v27->m_pObject->m_uiHeight;
  v29 = v27->m_pObject->m_uiWidth;
  v30 = Font::Get(MAIN_MENU);
  v31 = PgWinText::CreateWin(iLeft, iTop, v29, v28, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v31,
    5u);
  v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v33 = TextData::Get(0x88A297E1u);
  v32[118].__vecDelDtor((NiRefObject *)v31, (unsigned int)v33);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  ((void (__thiscall *)(mhInputPassWordWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.43000001);
  v42 = -1;
  if ( spNode.m_pObject )
  {
    v34 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v34 )
        v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D5450) --------------------------------------------------------
mhInputPassWordWin *__cdecl mhInputPassWordWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhInputPassWordWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhInputPassWordWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhInputPassWordWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_WORD *)v2 + 174) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhInputPassWordWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CB0B0: using guessed type int (__stdcall *mhInputPassWordWin___vftable_)(int uiFlags);
// 9CB0CC: using guessed type int (__thiscall *mhInputPassWordWin___vftable_)(void *p, char);

//----- (006D55A0) --------------------------------------------------------
void *__thiscall mhInputPassWordWin::_scalar_deleting_destructor_(mhInputPassWordWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  EditWin *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhInputPassWordWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhInputPassWordWin::_vftable_;
  v3 = this->m_spRoomPassWord.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CB0B0: using guessed type int (__stdcall *mhInputPassWordWin___vftable_)(int uiFlags);
// 9CB0CC: using guessed type int (__thiscall *mhInputPassWordWin___vftable_)(void *p, char);

//----- (006D5650) --------------------------------------------------------
void __thiscall mhJoinWin::OnHelpLink(mhJoinWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MiniHomeEntrance");
}

//----- (006D5690) --------------------------------------------------------
void __thiscall mhJoinWin::_mhJoinWin(mhJoinWin *this)
{
  PgWinFrame *v1; // esi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhJoinWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhJoinWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_spEdit,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v1);
}
// 9CB4F4: using guessed type int (__stdcall *mhJoinWin___vftable_)(int uiFlags);
// 9CB514: using guessed type int (__thiscall *mhJoinWin___vftable_)(void *p, char);

//----- (006D5710) --------------------------------------------------------
bool __thiscall mhJoinWin::Create(mhJoinWin *this, PgFrameWork *pkFrameWork)
{
  mhJoinWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool v7; // zf@8
  bool result; // al@11
  PgSprData *v9; // eax@12
  NiNode *v10; // esi@13
  int v11; // edi@18
  int v12; // ebx@18
  NiSourceTexture *v13; // eax@18
  PgSprData *v14; // eax@21
  PgSprData *v15; // eax@21
  PgSprData *v16; // eax@21
  PgSprData *v17; // eax@21
  PgFont *v18; // eax@25
  PgWinText *v19; // edi@25
  NiRefObjectVtbl *v20; // ebx@25
  char *v21; // eax@25
  PgSprData *v22; // edi@25
  EditWin *v23; // eax@25
  PgSprData *v24; // edi@25
  EditWin *v25; // eax@25
  PgSprData *v26; // edi@25
  EditWin *v27; // eax@25
  PgSprData *v28; // edi@25
  EditWin *v29; // eax@25
  NiPointer<PgSprData::PgHitTester> *v30; // edx@25
  unsigned int v31; // edi@25
  unsigned int v32; // ebx@25
  PgFont *v33; // eax@25
  PgWinText *v34; // edi@25
  NiRefObjectVtbl *v35; // ebx@25
  char *v36; // eax@25
  PgSprData::PgHitTester *v37; // eax@25
  unsigned int v38; // edi@25
  unsigned int v39; // ebx@25
  PgFont *v40; // eax@25
  PgWinText *v41; // edi@25
  NiRefObjectVtbl *v42; // ebx@25
  char *v43; // eax@25
  NiPointer<PgSprData::PgHitTester> *v44; // ecx@25
  unsigned int v45; // edi@25
  unsigned int v46; // ebx@25
  PgFont *v47; // eax@25
  PgWinText *v48; // edi@25
  NiRefObjectVtbl *v49; // ebx@25
  char *v50; // eax@25
  PgSprData::PgHitTester *v51; // eax@25
  unsigned int v52; // edi@25
  unsigned int v53; // ebx@25
  PgFont *v54; // eax@25
  PgWinText *v55; // edi@25
  NiRefObjectVtbl *v56; // ebx@25
  char *v57; // eax@25
  NiPointer<PgSprData::PgHitTester> *v58; // ecx@25
  unsigned int v59; // edi@25
  unsigned int v60; // ebx@25
  PgFont *v61; // eax@25
  PgWinText *v62; // edi@25
  NiRefObjectVtbl *v63; // ebx@25
  char *v64; // eax@25
  PgSprData::PgHitTester *v65; // eax@25
  unsigned int v66; // edi@25
  unsigned int v67; // ebx@25
  PgFont *v68; // eax@25
  PgWinText *v69; // edi@25
  NiRefObjectVtbl *v70; // ebx@25
  char *v71; // eax@25
  NiPointer<PgSprData::PgHitTester> *v72; // ecx@25
  unsigned int v73; // edi@25
  unsigned int v74; // ebx@25
  PgFont *v75; // eax@25
  PgWinText *v76; // edi@25
  NiRefObjectVtbl *v77; // ebx@25
  char *v78; // eax@25
  PgSprData::PgHitTester *v79; // eax@25
  unsigned int v80; // edi@25
  unsigned int v81; // ebx@25
  PgFont *v82; // eax@25
  PgWinText *v83; // edi@25
  NiRefObjectVtbl *v84; // ebx@25
  char *v85; // eax@25
  PgSprData *v86; // edi@25
  NiPointer<PgSprData::PgHitTester> *v87; // edx@25
  unsigned int v88; // edi@25
  unsigned int v89; // ebx@25
  PgFont *v90; // eax@25
  PgWinText *v91; // edi@25
  NiRefObjectVtbl *v92; // ebx@25
  char *v93; // eax@25
  PgSprData *v94; // edi@25
  NiPointer<PgSprData::PgHitTester> *v95; // ecx@25
  unsigned int v96; // edi@25
  unsigned int v97; // ebx@25
  PgFont *v98; // eax@25
  PgWinText *v99; // edi@25
  NiRefObjectVtbl *v100; // ebx@25
  char *v101; // eax@25
  PgSprData *v102; // edi@25
  NiSourceTexture *v103; // edi@25
  PgSprData *v104; // edi@26
  PgSprData *v105; // edi@27
  ColumnBut *v106; // eax@27
  NiNode *v107; // ecx@27
  PgSprData *v108; // edi@27
  NiNode *v109; // esi@28
  const char *v110; // [sp+88h] [bp-40h]@19
  int *v111; // [sp+8Ch] [bp-3Ch]@19
  int *v112; // [sp+90h] [bp-38h]@19
  NiSourceTexture *v113; // [sp+94h] [bp-34h]@19
  unsigned int uiWidth; // [sp+A8h] [bp-20h]@21
  unsigned int uiHeight; // [sp+ACh] [bp-1Ch]@21
  NiPointer<NiNode> spNode; // [sp+B0h] [bp-18h]@1
  int iLeft; // [sp+B4h] [bp-14h]@12
  int iTop; // [sp+B8h] [bp-10h]@12
  int v119; // [sp+C4h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v119 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MiniHomeEntrance.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MiniHomeGuestEntrance.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v119 = -1;
    if ( !v5
      || (v6 = v5,
          InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_9;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, -4, 0, v9, 0, pkFrameWork, "mhJoinWin", 0) )
  {
    v11 = iLeft;
    v12 = iTop;
    v13 = MenuTexMgr::GetTexture(0x13u);
    if ( v13 )
    {
      v113 = v13;
      v112 = &iTop;
      v111 = &iLeft;
      v110 = "Theme";
    }
    else
    {
      v113 = 0;
      v112 = &iTop;
      v111 = &iLeft;
      v110 = "Theme";
    }
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v110, v111, v112, v113);
    PgWinSpr::CreateWin(iLeft - v11, iTop - v12, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v6 = spNode.m_pObject;
      v119 = -1;
      if ( !spNode.m_pObject
        || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        return 0;
      v7 = v6 == 0;
LABEL_9:
      if ( !v7 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      return 0;
    }
    v18 = Font::Get(MAIN_MENU);
    v19 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v21 = TextData::Get(0xFAF63B39u);
    v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField01", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v23 = EditWin::CreateWin(
            iLeft,
            iTop,
            v22->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
            v22->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            NORMAL,
            0x14u,
            1u,
            1,
            0,
            1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spEdit, (NiD3DDefaultShader *)v23);
    EditWin::SetImeStatus(v2->m_spEdit[0].m_pObject, IS_KOREAN);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField04", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25 = EditWin::CreateWin(
            iLeft,
            iTop,
            v24->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
            v24->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            NUMBER,
            2u,
            1u,
            1,
            0,
            1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit[1], (NiD3DDefaultShader *)v25);
    EditWin::SetImeStatus(v2->m_spEdit[1].m_pObject, IS_KOREAN);
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField03", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - 1, iTop - 2, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v27 = EditWin::CreateWin(
            iLeft,
            iTop,
            v26->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
            v26->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            PASSWD,
            8u,
            1u,
            1,
            0,
            1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit[2], (NiD3DDefaultShader *)v27);
    EditWin::SetImeStatus(v2->m_spEdit[2].m_pObject, IS_KOREAN);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField06", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v29 = EditWin::CreateWin(
            iLeft,
            iTop,
            v28->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
            v28->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            MULTILINE,
            0x64u,
            1u,
            1,
            0,
            1);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit[3], (NiD3DDefaultShader *)v29);
    EditWin::SetImeStatus(v2->m_spEdit[3].m_pObject, IS_KOREAN);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v31 = v30->m_pObject->m_uiHeight;
    v32 = v30->m_pObject->m_uiWidth;
    v33 = Font::Get(MAIN_MENU);
    v34 = PgWinText::CreateWin(iLeft, iTop, v32, v31, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v34,
      5u);
    v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v36 = TextData2::Get(0x2218767Du);
    v35[118].__vecDelDtor((NiRefObject *)v34, (unsigned int)v36);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v34,
      0);
    v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v38 = v37->m_uiHeight;
    v39 = v37->m_uiWidth;
    v40 = Font::Get(MAIN_MENU);
    v41 = PgWinText::CreateWin(iLeft, iTop, v39, v38, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v41,
      5u);
    v42 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v43 = TextData2::Get(0x9DAEF6E1u);
    v42[118].__vecDelDtor((NiRefObject *)v41, (unsigned int)v43);
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v41,
      0);
    v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v45 = v44->m_pObject->m_uiHeight;
    v46 = v44->m_pObject->m_uiWidth;
    v47 = Font::Get(MAIN_MENU);
    v48 = PgWinText::CreateWin(iLeft, iTop, v46, v45, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v48,
      5u);
    v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v50 = TextData::Get(0xA7F6EEE4u);
    v49[118].__vecDelDtor((NiRefObject *)v48, (unsigned int)v50);
    v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v48,
      0);
    v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text04", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v52 = v51->m_uiHeight;
    v53 = v51->m_uiWidth;
    v54 = Font::Get(MAIN_MENU);
    v55 = PgWinText::CreateWin(iLeft, iTop, v53, v52, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v55,
      5u);
    v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v57 = TextData2::Get(0x7EC0BBE2u);
    v56[118].__vecDelDtor((NiRefObject *)v55, (unsigned int)v57);
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v55,
      0);
    v58 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text05", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v59 = v58->m_pObject->m_uiHeight;
    v60 = v58->m_pObject->m_uiWidth;
    v61 = Font::Get(MAIN_MENU);
    v62 = PgWinText::CreateWin(iLeft, iTop, v60, v59, v61, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v62,
      5u);
    v63 = v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v64 = TextData2::Get(0xEA563B2Fu);
    v63[118].__vecDelDtor((NiRefObject *)v62, (unsigned int)v64);
    v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v62,
      0);
    v65 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02_1", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v66 = v65->m_uiHeight;
    v67 = v65->m_uiWidth;
    v68 = Font::Get(MAIN_MENU);
    v69 = PgWinText::CreateWin(iLeft, iTop, v67, v66, v68, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v69,
      5u);
    v70 = v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v71 = TextData2::Get(0x725F917Bu);
    v70[118].__vecDelDtor((NiRefObject *)v69, (unsigned int)v71);
    v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v69,
      0);
    v72 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text05_1", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v73 = v72->m_pObject->m_uiHeight;
    v74 = v72->m_pObject->m_uiWidth;
    v75 = Font::Get(MAIN_MENU);
    v76 = PgWinText::CreateWin(iLeft, iTop, v74, v73, v75, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v76,
      5u);
    v77 = v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v78 = TextData2::Get(0x725F917Bu);
    v77[118].__vecDelDtor((NiRefObject *)v76, (unsigned int)v78);
    v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v76,
      0);
    v79 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text06", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v80 = v79->m_uiHeight;
    v81 = v79->m_uiWidth;
    v82 = Font::Get(MAIN_MENU);
    v83 = PgWinText::CreateWin(iLeft, iTop, v81, v80, v82, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v83,
      5u);
    v84 = v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v85 = TextData::Get(0x9798BBB1u);
    v84[118].__vecDelDtor((NiRefObject *)v83, (unsigned int)v85);
    v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v83,
      0);
    v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKBtnNor", &iLeft, &iTop, 0);
    PgSprData::Add(v86, &spNode.m_pObject->baseclass_0, "OKBTNClick");
    PgSprData::Add(v86, &spNode.m_pObject->baseclass_0, "OKBtnOver");
    PgWinBut::CreateWin(iLeft, iTop, v86, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v87 = v86->m_akHitTester.m_pBase;
    v88 = v87->m_pObject->m_uiHeight;
    v89 = v87->m_pObject->m_uiWidth;
    v90 = Font::Get(MAIN_MENU);
    v91 = PgWinText::CreateWin(iLeft, iTop, v89, v88, v90, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v91,
      5u);
    v92 = v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v93 = TextData::Get(0x4F5F499Fu);
    v92[118].__vecDelDtor((NiRefObject *)v91, (unsigned int)v93);
    v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v91,
      0);
    v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v91,
      1u);
    v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelBtnNor", &iLeft, &iTop, 0);
    PgSprData::Add(v94, &spNode.m_pObject->baseclass_0, "CancelBTNClick");
    PgSprData::Add(v94, &spNode.m_pObject->baseclass_0, "CancelBtnOver");
    PgWinBut::CreateWin(iLeft, iTop, v94, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v95 = v94->m_akHitTester.m_pBase;
    v96 = v95->m_pObject->m_uiHeight;
    v97 = v95->m_pObject->m_uiWidth;
    v98 = Font::Get(MAIN_MENU);
    v99 = PgWinText::CreateWin(iLeft, iTop, v97, v96, v98, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v99,
      5u);
    v100 = v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v101 = TextData::Get(0x88B298A0u);
    v100[118].__vecDelDtor((NiRefObject *)v99, (unsigned int)v101);
    v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v99,
      0);
    v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
    PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(iLeft, iTop, v102, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v103 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      v104 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v103);
      PgSprData::Add(v104, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(v104, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(iLeft, iTop, v104, &v2->baseclass_0.baseclass_0.baseclass_0, 4u, 0, 0);
    }
    v105 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02Nor", &iLeft, &iTop, 0);
    PgSprData::Add(v105, &spNode.m_pObject->baseclass_0, "Text02Click");
    v106 = ColumnBut::CreateWin(iLeft, iTop, v105, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0);
    v107 = spNode.m_pObject;
    v2->m_spCheckBox[0] = v106;
    v108 = PgSprData::Create(&v107->baseclass_0, "Text05Nor", &iLeft, &iTop, 0);
    PgSprData::Add(v108, &spNode.m_pObject->baseclass_0, "Text05Click");
    v2->m_spCheckBox[1] = ColumnBut::CreateWin(iLeft, iTop, v108, &v2->baseclass_0.baseclass_0.baseclass_0, 3u, 0);
    v2->m_spCheckBox[0]->m_bCheck = 0;
    v2->m_spCheckBox[1]->m_bCheck = 0;
    ((void (__thiscall *)(mhJoinWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    ((void (__stdcall *)(_DWORD))v2->m_spEdit[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)("2");
    v119 = -1;
    if ( spNode.m_pObject )
    {
      v109 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v109 )
          v109->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v109, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v10 = spNode.m_pObject;
    v119 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D6320) --------------------------------------------------------
void __thiscall mhJoinWin::OnCommand(mhJoinWin *this, unsigned int wParam, int lParam)
{
  mhJoinWin *v3; // esi@1
  int v4; // eax@4
  int v5; // edx@4
  char v6; // cl@5
  ColumnBut *v7; // eax@9
  PgFrameWork *v8; // eax@14

  v3 = this;
  switch ( wParam )
  {
    case 1u:
      GameFrameWork::OnCloseMHConfigRoomInfoWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0u:
      if ( this->m_spCheckBox[0]->m_bCheck == 1 )
      {
        v4 = ((int (*)(void))this->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v5 = v4 + 1;
        do
          v6 = *(_BYTE *)v4++;
        while ( v6 );
        if ( v4 == v5 )
          mhJoinWin::CheckEnable(v3, 0, v3->m_spCheckBox[0]->m_bCheck == 0);
      }
      PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0xC9u, 0, 0);
      break;
    case 2u:
      ((void (*)(void))this->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
      v7 = v3->m_spCheckBox[0];
      LOBYTE(wParam) = v7->m_bCheck == 0;
      v7->m_bCheck = wParam;
      if ( !(_BYTE)wParam )
        ((void (__stdcall *)(signed int))v3->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
      ((void (__stdcall *)(unsigned int))v3->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(wParam);
      ((void (__stdcall *)(unsigned int))v3->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(wParam);
      if ( v3->m_spCheckBox[0]->m_bCheck == 1 )
        PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0xDFu, 0, 0);
      break;
    case 3u:
      this->m_spCheckBox[1]->m_bCheck = this->m_spCheckBox[1]->m_bCheck == 0;
      break;
    case 4u:
      v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v8 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v8, "MiniHomeEntrance");
      break;
    default:
      return;
  }
}

//----- (006D64A0) --------------------------------------------------------
void __thiscall mhJoinWin::OnShowWin(mhJoinWin *this)
{
  mhJoinWin *v1; // esi@1
  char *v2; // eax@1

  v1 = this;
  v2 = TextData2::Get(0xECF6DCD4u);
  ((void (__stdcall *)(_DWORD))v1->m_spEdit[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(v2);
}

//----- (006D64D0) --------------------------------------------------------
void __thiscall mhJoinWin::mhJoinWin(mhJoinWin *this)
{
  mhJoinWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhJoinWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhJoinWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_spEdit,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9CB4F4: using guessed type int (__stdcall *mhJoinWin___vftable_)(int uiFlags);
// 9CB514: using guessed type int (__thiscall *mhJoinWin___vftable_)(void *p, char);

//----- (006D6550) --------------------------------------------------------
mhJoinWin *__cdecl mhJoinWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhJoinWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    LOBYTE(v6) = 1;
    *(_DWORD *)v2 = &mhJoinWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhJoinWin::_vftable_;
    _eh_vector_constructor_iterator_(
      (char *)v2 + 352,
      4u,
      4,
      (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
      (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhJoinWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CB4F4: using guessed type int (__stdcall *mhJoinWin___vftable_)(int uiFlags);
// 9CB514: using guessed type int (__thiscall *mhJoinWin___vftable_)(void *p, char);

//----- (006D66B0) --------------------------------------------------------
void *__thiscall mhJoinWin::_vector_deleting_destructor_(mhJoinWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhJoinWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhJoinWin::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_spEdit,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CB4F4: using guessed type int (__stdcall *mhJoinWin___vftable_)(int uiFlags);
// 9CB514: using guessed type int (__thiscall *mhJoinWin___vftable_)(void *p, char);

//----- (006D6740) --------------------------------------------------------
void __thiscall mhMinimizeWin::mhMinimizeWin(mhMinimizeWin *this)
{
  mhMinimizeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMinimizeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMinimizeWin::_vftable_;
  v1->m_bAutoOnOff = 0;
}
// 9CB7B4: using guessed type int (__stdcall *mhMinimizeWin___vftable_)(int uiFlags);
// 9CB7D4: using guessed type int (__thiscall *mhMinimizeWin___vftable_)(void *p, char);

//----- (006D6770) --------------------------------------------------------
void __thiscall mhMinimizeWin::_mhMinimizeWin(mhMinimizeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMinimizeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMinimizeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CB7B4: using guessed type int (__stdcall *mhMinimizeWin___vftable_)(int uiFlags);
// 9CB7D4: using guessed type int (__thiscall *mhMinimizeWin___vftable_)(void *p, char);

//----- (006D6790) --------------------------------------------------------
void __thiscall mhMinimizeWin::OnCommand(mhMinimizeWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xE1u, 0, 0);
}

//----- (006D67C0) --------------------------------------------------------
bool __thiscall mhMinimizeWin::Create(mhMinimizeWin *this, PgFrameWork *pkFrameWork)
{
  mhMinimizeWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // edi@11
  PgWinBut *v9; // edi@11
  char *v10; // eax@11
  NiNode *v11; // esi@12
  int iLeft; // [sp+14h] [bp-18h]@11
  int iTop; // [sp+18h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v15; // [sp+28h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v15 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MyHomeMinButton.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v2->baseclass_0.m_pkFrameWork = pkFrameWork;
    v8 = PgSprData::Create(&v5->baseclass_0, "MyHomeBtnNor", &iLeft, &iTop, 0);
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "MyHomeBtnClick");
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "MyHomeBtnOver");
    v9 = PgWinBut::CreateWin(0, 0, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v9->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v10 = TextData2::Get(0xD7F9364Eu);
    PgWin::SetToolTipWinText(&v9->baseclass_0.baseclass_0, v10);
    ((void (__thiscall *)(mhMinimizeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.89999998,
      0.30000001);
    v15 = -1;
    if ( spNode.m_pObject )
    {
      v11 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v11 )
          v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      }
    }
    result = 1;
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeMinButton.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v15 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D6980) --------------------------------------------------------
mhMinimizeWin *__cdecl mhMinimizeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhMinimizeWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhMinimizeWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhMinimizeWin::_vftable_;
    *((_BYTE *)v2 + 344) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhMinimizeWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CB7B4: using guessed type int (__stdcall *mhMinimizeWin___vftable_)(int uiFlags);
// 9CB7D4: using guessed type int (__thiscall *mhMinimizeWin___vftable_)(void *p, char);

//----- (006D6AD0) --------------------------------------------------------
void *__thiscall mhMinimizeWin::_vector_deleting_destructor_(mhMinimizeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMinimizeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMinimizeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CB7B4: using guessed type int (__stdcall *mhMinimizeWin___vftable_)(int uiFlags);
// 9CB7D4: using guessed type int (__thiscall *mhMinimizeWin___vftable_)(void *p, char);

//----- (006D6B10) --------------------------------------------------------
void __thiscall mhMouseControlWin::mhMouseControlWin(mhMouseControlWin *this)
{
  mhMouseControlWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_bCtrlDown = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMouseControlWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMouseControlWin::_vftable_;
  v1->m_Btns[0] = 0;
  v1->m_Btns[1] = 0;
  v1->m_Btns[2] = 0;
  v1->m_Btns[3] = 0;
  v1->m_Btns[4] = 0;
  v1->m_Btns[5] = 0;
}
// 9CBA84: using guessed type int (__stdcall *mhMouseControlWin___vftable_)(int uiFlags);
// 9CBAA4: using guessed type int (__thiscall *mhMouseControlWin___vftable_)(void *p, char);

//----- (006D6B60) --------------------------------------------------------
void __thiscall mhMouseControlWin::_mhMouseControlWin(mhMouseControlWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMouseControlWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMouseControlWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CBA84: using guessed type int (__stdcall *mhMouseControlWin___vftable_)(int uiFlags);
// 9CBAA4: using guessed type int (__thiscall *mhMouseControlWin___vftable_)(void *p, char);

//----- (006D6B90) --------------------------------------------------------
void __thiscall mhMouseControlWin::ShowBtn(mhMouseControlWin *this, mhMouseControlWin::BtnIndex eBtn, bool b)
{
  int v3; // ebx@0
  mhMouseControlWin::BtnIndex v4; // eax@1
  mhMouseControlWin *v5; // esi@1
  PgWinSpr *v6; // ecx@4
  PgWinSpr *v7; // ecx@5

  v4 = eBtn;
  v5 = this;
  while ( 2 )
  {
    switch ( v4 )
    {
      case 10:
        mhMouseControlWin::ShowBtn(v5, AllLeft, b);
        mhMouseControlWin::ShowBtn(v5, AllRight, b);
        v4 = 9;
        continue;
      case 0:
        ((void (__stdcall *)(_DWORD, int))v5->m_Btns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          b,
          v3);
        v6 = v5->m_Btns[1];
        goto LABEL_10;
      case 1:
        ((void (__stdcall *)(_DWORD, int))v5->m_Btns[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          b,
          v3);
        v7 = v5->m_Btns[0];
        goto LABEL_6;
      case 2:
        ((void (__stdcall *)(_DWORD, int))v5->m_Btns[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          b,
          v3);
        v6 = v5->m_Btns[3];
        goto LABEL_10;
      case 3:
        ((void (__stdcall *)(_DWORD, int))v5->m_Btns[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          b,
          v3);
        v7 = v5->m_Btns[2];
        goto LABEL_6;
      case 4:
        ((void (__stdcall *)(_DWORD, int))v5->m_Btns[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          b,
          v3);
        v6 = v5->m_Btns[5];
LABEL_10:
        ((void (__cdecl *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b == 0);
        break;
      case 5:
        ((void (__stdcall *)(_DWORD, int))v5->m_Btns[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
          b,
          v3);
        v7 = v5->m_Btns[4];
LABEL_6:
        ((void (__cdecl *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b == 0);
        break;
      case 7:
        ((void (__stdcall *)(_DWORD))v5->m_Btns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        ((void (__stdcall *)(_DWORD))v5->m_Btns[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        break;
      case 8:
        ((void (__stdcall *)(_DWORD))v5->m_Btns[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        ((void (__stdcall *)(_DWORD))v5->m_Btns[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        break;
      case 9:
        ((void (__stdcall *)(_DWORD))v5->m_Btns[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        ((void (__stdcall *)(_DWORD))v5->m_Btns[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(b);
        break;
      default:
        return;
    }
    break;
  }
}

//----- (006D6D40) --------------------------------------------------------
unsigned int __thiscall mhMouseControlWin::GetCenterX(mhMouseControlWin *this)
{
  mhMouseControlWin *v1; // esi@1
  unsigned int result; // eax@2
  int y1; // [sp+4h] [bp-10h]@2
  int y; // [sp+8h] [bp-Ch]@2
  int x; // [sp+Ch] [bp-8h]@2
  unsigned int x1; // [sp+10h] [bp-4h]@2

  v1 = this;
  if ( this->m_Btns[0] )
  {
    ((void (__stdcall *)(int *, int *))this->m_Btns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)(
      &x,
      &y);
    ((void (__stdcall *)(unsigned int *, int *))v1->m_Btns[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)(
      &x1,
      &y1);
    result = (x1 >> 1) + x - 5;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006D6DA0) --------------------------------------------------------
unsigned int __thiscall mhMouseControlWin::GetCenterY(mhMouseControlWin *this)
{
  unsigned int result; // eax@3
  int x; // [sp+0h] [bp-8h]@2
  unsigned int y; // [sp+4h] [bp-4h]@2

  if ( this->m_Btns[0]
    && (((void (__stdcall *)(int *, unsigned int *))this->m_Btns[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[40].__vecDelDtor)(
          &x,
          &y),
        y) )
    result = y >> 1;
  else
    result = 1;
  return result;
}

//----- (006D6DE0) --------------------------------------------------------
void __thiscall mhMouseControlWin::OnShowWin(mhMouseControlWin *this)
{
  mhMouseControlWin *v1; // esi@1
  tagPOINT kPoint; // [sp+4h] [bp-8h]@1

  v1 = this;
  GetCursorPos(&kPoint);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor(
    (NiRefObject *)v1,
    kPoint.x);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor(
    (NiRefObject *)v1,
    kPoint.y);
  v1->m_bCtrlDown = 0;
  mhMouseControlWin::ShowBtn(v1, AllLeft, 0);
  mhMouseControlWin::ShowBtn(v1, AllRight, 0);
  mhMouseControlWin::ShowBtn(v1, CtrlNormal, 1);
}

//----- (006D6E40) --------------------------------------------------------
void __thiscall mhMouseControlWin::OnClose(mhMouseControlWin *this)
{
  mhMouseControlWin::ShowBtn(this, All, 0);
}

//----- (006D6E50) --------------------------------------------------------
void __thiscall mhMouseControlWin::UpdateMeWin(mhMouseControlWin *this, float fCurTime)
{
  mhMouseControlWin *v2; // esi@1
  char v3; // al@3

  v2 = this;
  if ( this->m_bCtrlDown )
  {
    if ( fCurTime > fOldtime + 0.300000011920929 )
    {
      v3 = ((int (*)(void))this->m_Btns[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
      mhMouseControlWin::ShowBtn(v2, CtrlNormal, v3 == 0);
      fOldtime = fCurTime;
    }
  }
}

//----- (006D6EB0) --------------------------------------------------------
bool __thiscall mhMouseControlWin::Create(mhMouseControlWin *this, PgFrameWork *pkFrameWork)
{
  mhMouseControlWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // eax@11
  PgSprData *v9; // eax@11
  PgWinSpr *v10; // eax@11
  NiNode *v11; // edx@11
  PgSprData *v12; // eax@11
  PgWinSpr *v13; // eax@11
  NiNode *v14; // ecx@11
  PgSprData *v15; // eax@11
  PgSprData *v16; // eax@11
  PgWinSpr *v17; // eax@11
  NiNode *v18; // edx@11
  PgSprData *v19; // eax@11
  NiNode *v20; // esi@12
  NiPointer<NiNode> spNode; // [sp+0h] [bp-18h]@1
  int iLeft; // [sp+4h] [bp-14h]@11
  int iTop; // [sp+8h] [bp-10h]@11
  int v24; // [sp+14h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v24 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MyHomeMouseControl.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v2->baseclass_0.m_pkFrameWork = pkFrameWork;
    v8 = PgSprData::Create(&v5->baseclass_0, "TurnL", &iLeft, &iTop, 0);
    v2->m_Btns[0] = PgWinSpr::CreateWin(iLeft, iTop, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TurnLClick", &iLeft, &iTop, 0);
    v10 = PgWinSpr::CreateWin(iLeft, iTop, v9, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v11 = spNode.m_pObject;
    v2->m_Btns[1] = v10;
    v12 = PgSprData::Create(&v11->baseclass_0, "TurnR", &iLeft, &iTop, 0);
    v13 = PgWinSpr::CreateWin(iLeft, iTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v14 = spNode.m_pObject;
    v2->m_Btns[2] = v13;
    v15 = PgSprData::Create(&v14->baseclass_0, "TurnRClick", &iLeft, &iTop, 0);
    v2->m_Btns[3] = PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CtrlNor", &iLeft, &iTop, 0);
    v17 = PgWinSpr::CreateWin(iLeft, iTop, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = spNode.m_pObject;
    v2->m_Btns[4] = v17;
    v19 = PgSprData::Create(&v18->baseclass_0, "CtrlClick", &iLeft, &iTop, 0);
    v2->m_Btns[5] = PgWinSpr::CreateWin(iLeft, iTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v24 = -1;
    if ( spNode.m_pObject )
    {
      v20 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v20 )
          v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
      }
    }
    result = 1;
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeMouseControl.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v24 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D7100) --------------------------------------------------------
mhMouseControlWin *__cdecl mhMouseControlWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhMouseControlWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x174u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhMouseControlWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhMouseControlWin::_vftable_;
    *((_BYTE *)v2 + 368) = 0;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 91) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhMouseControlWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CBA84: using guessed type int (__stdcall *mhMouseControlWin___vftable_)(int uiFlags);
// 9CBAA4: using guessed type int (__thiscall *mhMouseControlWin___vftable_)(void *p, char);

//----- (006D7270) --------------------------------------------------------
void *__thiscall mhMouseControlWin::_vector_deleting_destructor_(mhMouseControlWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMouseControlWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMouseControlWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CBA84: using guessed type int (__stdcall *mhMouseControlWin___vftable_)(int uiFlags);
// 9CBAA4: using guessed type int (__thiscall *mhMouseControlWin___vftable_)(void *p, char);

//----- (006D72B0) --------------------------------------------------------
void __thiscall mhPortalListWin::ShowComponent(mhPortalListWin *this, bool b)
{
  char *v2; // esi@1
  signed int v3; // ebx@1

  v2 = (char *)this->m_Text;
  v3 = 2;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 - 2) + 256))(b);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(b);
    v2 += 4;
    --v3;
  }
  while ( v3 );
}

//----- (006D7300) --------------------------------------------------------
void __thiscall mhPortalListWin::OnHelpLink(mhPortalListWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MiniHomePortalList");
}

//----- (006D7330) --------------------------------------------------------
tm *__usercall localtime_2<eax>(const int *_Time<eax>)
{
  return _localtime32(_Time);
}

//----- (006D7340) --------------------------------------------------------
void __thiscall mhPortalListWin::UpdateMeWin(mhPortalListWin *this, float fCurTime)
{
  PgWin *v2; // edi@1
  PgFrameWork *v3; // esi@2

  v2 = (PgWin *)this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( PgWin::IsVisible(v2) )
    {
      BYTE3(v3[73].m_kMsgQ.m_uiAlloced) = 0;
      PgFrameWork::AddMsg(v3, 0xE0u, 0, 0);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (006D7390) --------------------------------------------------------
void __thiscall mhPortalListWin::OnShowWin(mhPortalListWin *this)
{
  if ( dword_AA501C == 2 )
    mhPortalListWin::ShowComponent(this, 1);
  else
    mhPortalListWin::ShowComponent(this, 0);
}
// AA501C: using guessed type int dword_AA501C;

//----- (006D73B0) --------------------------------------------------------
void __thiscall mhPortalListWin::OnChangeTab(mhPortalListWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab)
{
  bool v2; // zf@1
  char *v3; // esi@1
  DirectUserMsgBody_MHInfoTabChanged kBody; // [sp+4h] [bp-4h]@1

  *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 12) + 380) = 0;
  v2 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker == 0;
  v3 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.eChanged = eTab;
  if ( !v2 )
  {
    ((void (__stdcall *)(signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      62,
      &kBody,
      v3);
    if ( *((_DWORD *)v3 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))(**((_DWORD **)v3 + 1) + 20))(
        62,
        &kBody,
        v3);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_MHInfoTabChanged *, char *))(*(_DWORD *)v3 + 20))(
    v3,
    62,
    &kBody,
    v3);
}

//----- (006D7420) --------------------------------------------------------
bool __thiscall mhPortalListWin::SetData(mhPortalListWin *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *Name, int Column)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // esi@1
  mhPortalListWin *v4; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@2

  v3 = Name;
  v4 = this;
  if ( Name->baseclass_0._Myres < 0x10 )
    v5 = Name;
  else
    v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Name->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( SlideListWin::SetText(this->m_PortalNameList, Column, 0, v5->baseclass_0.___u0.baseclass_0.dummy) != 1 )
  {
    if ( Name->baseclass_0._Myres >= 0x10 )
      v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&Name->baseclass_0.___u0.baseclass_0.dummy[0];
    SlideListWin::AddText(v4->m_PortalNameList, v3->baseclass_0.___u0.baseclass_0.dummy);
  }
  return 1;
}

//----- (006D7470) --------------------------------------------------------
unsigned __int16 __thiscall mhPortalListWin::GetID(mhPortalListWin *this, int iSlideListIndex)
{
  mhPortalListWin *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v3; // ebx@1
  int v4; // esi@3
  int v5; // edi@3
  int v6; // eax@5
  int v7; // esi@6
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v8; // ecx@9
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v9; // eax@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *i; // eax@13
  unsigned __int16 result; // ax@18
  mhPortalListWin *v12; // [sp+Ch] [bp-4h]@1
  const char *pItemStr; // [sp+18h] [bp+8h]@1

  v2 = this;
  v3 = this->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  v12 = this;
  pItemStr = SlideListWin::GetText(this->m_PortalNameList, iSlideListIndex, 0);
  if ( pItemStr && v3 != v2->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    while ( 1 )
    {
      v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v5 = v3->_Myval.baseclass_0.first;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v3->_Myval.baseclass_0.first) )
      {
        if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
        {
          v6 = *(_DWORD *)(v4 + 196) + 4 * v5;
          if ( *(_DWORD *)v6 )
          {
            v7 = *(_DWORD *)v6;
            if ( *(_DWORD *)v6 )
            {
              if ( !strcmp((const char *)(v7 + 34), pItemStr) )
                break;
            }
          }
        }
      }
      if ( !v3->_Isnil )
      {
        v8 = v3->_Right;
        if ( v8->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v9 = v8->_Left;
          if ( !v8->_Left->_Isnil )
          {
            do
            {
              v8 = v9;
              v9 = v9->_Left;
            }
            while ( !v9->_Isnil );
          }
          v3 = v8;
        }
      }
      if ( v3 == v12->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
        goto LABEL_18;
    }
    result = *(_WORD *)v7;
  }
  else
  {
LABEL_18:
    result = -1;
  }
  return result;
}
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006D7590) --------------------------------------------------------
void __thiscall mhPortalListWin::SetToolTipText(mhPortalListWin *this, int column, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *ItemName)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v4; // ecx@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v5; // eax@2
  int v6; // edi@3
  int v7; // esi@3
  int v8; // ecx@5
  int v9; // eax@6
  const char *v10; // ecx@7
  int v11; // eax@7
  int v12; // esi@7
  char v13; // dl@8
  unsigned int v14; // esi@9
  unsigned int v15; // edi@11
  unsigned int v16; // ecx@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v17; // eax@13
  int v18; // eax@15
  bool v19; // zf@15
  signed int v20; // eax@17
  bool v21; // bl@20
  SlideListWin *v22; // ecx@27
  char *v23; // eax@28
  int v24; // [sp-18h] [bp-90h]@27
  char *v25; // [sp-14h] [bp-8Ch]@27
  tm DelTime; // [sp+0h] [bp-78h]@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v27; // [sp+24h] [bp-54h]@1
  mhPortalListWin *v28; // [sp+28h] [bp-50h]@1
  PORTAL_INFO pInfo; // [sp+2Ch] [bp-4Ch]@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > itr; // [sp+34h] [bp-44h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+38h] [bp-40h]@7
  char acDeleteDate[20]; // [sp+54h] [bp-24h]@28
  unsigned int v33; // [sp+68h] [bp-10h]@1
  int v34; // [sp+74h] [bp-4h]@20
  int v35; // [sp+78h] [bp+0h]@1

  v33 = (unsigned int)&v35 ^ __security_cookie;
  v3 = ItemName;
  v19 = ItemName->baseclass_0._Mysize == 0;
  v28 = this;
  v27 = ItemName;
  if ( !v19 )
  {
    v4 = this->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    *(_DWORD *)&pInfo.nPortalItemID = 0;
    HIWORD(pInfo.dEndTime) = 0;
    v5 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v4->_Left;
    itr = v5;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v5 == v4 )
    {
LABEL_26:
      if ( pInfo.dEndTime )
      {
        memcpy(&DelTime, _localtime32(&pInfo.dEndTime), sizeof(DelTime));
        *(_DWORD *)&acDeleteDate[1] = 0;
        *(_DWORD *)&acDeleteDate[5] = 0;
        *(_DWORD *)&acDeleteDate[9] = 0;
        *(_DWORD *)&acDeleteDate[13] = 0;
        *(_WORD *)&acDeleteDate[17] = 0;
        acDeleteDate[19] = 0;
        acDeleteDate[0] = 0;
        sprintf(acDeleteDate, "%04d.%02d.%02d %02d:%02d");
        v23 = TextData::Get(0x7ACAD1D9u);
        v25 = fs(v23);
        v22 = v28->m_PortalNameList;
        v24 = column;
      }
      else
      {
        v25 = TextData2::Get(0x3F4F363Au);
        v24 = column;
        v22 = v28->m_PortalNameList;
      }
      SlideListWin::SetToolTipWinText(v22, v24, v25);
    }
    else
    {
      while ( 1 )
      {
        v6 = *(_WORD *)(*(_DWORD *)&v5 + 12);
        v7 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
        if ( !(unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                                  + 16))(
                                 ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                                 *(_WORD *)(*(_DWORD *)&v5 + 12)) )
          break;
        if ( (unsigned __int16)v6 > *(_WORD *)(v7 + 200) )
          break;
        v8 = *(_DWORD *)(v7 + 196);
        if ( !*(_DWORD *)(v8 + 4 * v6) )
          break;
        v9 = *(_DWORD *)(v8 + 4 * v6);
        if ( !v9 )
          break;
        v10 = (const char *)(v9 + 34);
        v11 = v9 + 34;
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v12 = v11 + 1;
        do
          v13 = *(_BYTE *)v11++;
        while ( v13 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v10, v11 - v12);
        v14 = v3->baseclass_0._Mysize;
        if ( v3->baseclass_0._Myres >= 0x10 )
          v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
        v15 = thisa.baseclass_0._Mysize;
        v16 = thisa.baseclass_0._Mysize;
        if ( thisa.baseclass_0._Mysize >= v14 )
          v16 = v14;
        v17 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
        if ( thisa.baseclass_0._Myres < 0x10 )
          v17 = &thisa;
        v18 = std::char_traits<char>::compare(
                v17->baseclass_0.___u0.baseclass_0.dummy,
                v3->baseclass_0.___u0.baseclass_0.dummy,
                v16);
        v19 = v18 == 0;
        if ( !v18 )
        {
          if ( v15 >= v14 )
            v20 = v15 != v14;
          else
            v20 = -1;
          v19 = v20 == 0;
        }
        v21 = v19;
        v34 = -1;
        if ( thisa.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&thisa);
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( v21 )
        {
          pInfo.dEndTime = *(_DWORD *)(*(_DWORD *)&itr + 16);
          pInfo.nPortalItemID = *(_WORD *)(*(_DWORD *)&itr + 12);
          goto LABEL_26;
        }
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&itr);
        v5 = itr;
        if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)itr == v28->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
          goto LABEL_26;
        v3 = v27;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006D77E0) --------------------------------------------------------
void __thiscall mhPortalListWin::RefreshSlideBar(mhPortalListWin *this)
{
  mhPortalListWin *v1; // esi@1
  int v2; // edi@1
  int v3; // ebx@1
  const char *v4; // eax@3
  int nMaxCount; // [sp+0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4h] [bp-2Ch]@3
  unsigned int v7; // [sp+20h] [bp-10h]@1
  int v8; // [sp+2Ch] [bp-4h]@3
  int v9; // [sp+30h] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  SlideBar::SetSplitCnt(this->m_pkSlideBarPortalList, this->m_PortalNameList->m_nSlideSplitCnt);
  v1->m_PortalNameList->m_nViewStartPos = v1->m_pkSlideBarPortalList->m_nCurPos;
  v2 = 0;
  v3 = (signed int)((char *)v1->m_PortalNameList->m_vecButList.baseclass_0._Mylast
                  - *(_DWORD *)&v1->m_PortalNameList->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  nMaxCount = v3;
  if ( v3 >= 0 )
  {
    do
    {
      if ( SlideListWin::GetText(v1->m_PortalNameList, v2 + v1->m_PortalNameList->m_nViewStartPos, 0) )
      {
        v4 = SlideListWin::GetText(v1->m_PortalNameList, v2 + v1->m_PortalNameList->m_nViewStartPos, 0);
        thisa.baseclass_0._Myres = 15;
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v4, strlen(v4));
        v8 = 0;
        mhPortalListWin::SetToolTipText(v1, v2, &thisa);
        v8 = -1;
        if ( thisa.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&thisa);
        thisa.baseclass_0._Mysize = 0;
        thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        v3 = nMaxCount;
        thisa.baseclass_0._Myres = 15;
      }
      ++v2;
    }
    while ( v2 <= v3 );
  }
  SlideListWin::UpdateViewList(v1->m_PortalNameList);
}
// A85C00: using guessed type int __security_cookie;

//----- (006D7930) --------------------------------------------------------
void __thiscall mhPortalListWin::Refresh(mhPortalListWin *this)
{
  mhPortalListWin *v1; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v3; // ebx@1
  int v4; // esi@2
  int v5; // edi@2
  int v6; // eax@4
  int v7; // eax@5
  const char *v8; // ecx@6
  int v9; // eax@6
  int v10; // esi@6
  char v11; // dl@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@11
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v14; // ecx@18
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *v15; // eax@19
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *i; // eax@22
  unsigned int Column; // [sp+0h] [bp-34h]@1
  mhPortalListWin *v18; // [sp+4h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+8h] [bp-2Ch]@6
  unsigned int v20; // [sp+24h] [bp-10h]@1
  int v21; // [sp+30h] [bp-4h]@8
  int v22; // [sp+34h] [bp+0h]@1

  v20 = (unsigned int)&v22 ^ __security_cookie;
  v1 = this;
  v18 = this;
  SlideListWin::RemoveAllList(this->m_PortalNameList);
  v2 = v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = v2->_Left;
  Column = 0;
  if ( v2->_Left != v2 )
  {
    do
    {
      v4 = ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable;
      v5 = v3->_Myval.baseclass_0.first;
      if ( (unsigned __int8)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable
                                                               + 16))(
                              ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
                              v3->_Myval.baseclass_0.first) )
      {
        if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) )
        {
          v6 = *(_DWORD *)(v4 + 196) + 4 * v5;
          if ( *(_DWORD *)v6 )
          {
            v7 = *(_DWORD *)v6;
            if ( v7 )
            {
              v8 = (const char *)(v7 + 34);
              v9 = v7 + 34;
              thisa.baseclass_0._Myres = 15;
              thisa.baseclass_0._Mysize = 0;
              thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
              v10 = v9 + 1;
              do
                v11 = *(_BYTE *)v9++;
              while ( v11 );
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, v8, v9 - v10);
              v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
              v21 = 0;
              if ( thisa.baseclass_0._Myres < 0x10 )
                v12 = &thisa;
              if ( SlideListWin::SetText(v18->m_PortalNameList, Column, 0, v12->baseclass_0.___u0.baseclass_0.dummy) != 1 )
              {
                v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
                if ( thisa.baseclass_0._Myres < 0x10 )
                  v13 = &thisa;
                SlideListWin::AddText(v18->m_PortalNameList, v13->baseclass_0.___u0.baseclass_0.dummy);
              }
              v21 = -1;
              if ( thisa.baseclass_0._Myres >= 0x10 )
                operator delete(*(void **)&thisa);
              ++Column;
              thisa.baseclass_0._Myres = 15;
              thisa.baseclass_0._Mysize = 0;
              thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            }
          }
        }
      }
      if ( !v3->_Isnil )
      {
        v14 = v3->_Right;
        if ( v14->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v15 = v14->_Left;
          if ( !v14->_Left->_Isnil )
          {
            do
            {
              v14 = v15;
              v15 = v15->_Left;
            }
            while ( !v15->_Isnil );
          }
          v3 = v14;
        }
      }
    }
    while ( v3 != v18->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
    v1 = v18;
  }
  SlideListWin::UpdateViewList(v1->m_PortalNameList);
  mhPortalListWin::RefreshSlideBar(v1);
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006D7AF0) --------------------------------------------------------
void __thiscall mhPortalListWin::_mhPortalListWin(mhPortalListWin *this)
{
  mhPortalListWin *v1; // esi@1
  void *v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v3; // ST08_4@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v4; // ST04_4@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@3
  std::map<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> > > *v6; // [sp+4h] [bp-14h]@3
  mhPortalListWin *v7; // [sp+8h] [bp-10h]@1
  int v8; // [sp+14h] [bp-4h]@1

  v1 = this;
  v7 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhPortalListWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhPortalListWin::_vftable_;
  v2 = *(void **)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = 0;
  if ( v2 )
    operator delete(v2);
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
  v6 = &v1->m_mapPortalInfo;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v8) = 1;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_mapPortalInfo,
    &result,
    v4,
    v3);
  operator delete(v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v8 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9CBEE8: using guessed type int (__stdcall *mhPortalListWin___vftable_)(int uiFlags);
// 9CBF04: using guessed type int (__thiscall *mhPortalListWin___vftable_)(void *p, char);

//----- (006D7BA0) --------------------------------------------------------
void __thiscall mhPortalListWin::OnCommand(mhPortalListWin *this, unsigned int wParam, int lParam)
{
  mhPortalListWin *v3; // esi@1
  PgFrameWork *v4; // edi@9
  int v5; // eax@9
  unsigned __int16 v6; // ax@9
  PgFrameWork *v7; // edi@11
  int v8; // eax@11
  unsigned __int16 v9; // ax@11

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      mhPortalListWin::OnChangeTab(this, 0);
      break;
    case 1u:
      mhPortalListWin::OnChangeTab(this, TE_GUEST_BOOK);
      break;
    case 2u:
      mhPortalListWin::OnChangeTab(this, TE_EDIT_ROOM);
      break;
    case 3u:
      mhPortalListWin::OnChangeTab(this, TE_PORTAL_LIST);
      break;
    case 4u:
      mhPortalListWin::OnChangeTab(this, TE_SETTING);
      break;
    case 5u:
      mhPortalListWin::OnChangeTab(this, TE_OUT);
      break;
    case 6u:
      mhPortalListWin::RefreshSlideBar(this);
      break;
    case 9u:
      v4 = this->baseclass_0.m_pkFrameWork;
      v5 = SlideListWin::GetCurSelIndex(this->m_PortalNameList);
      v6 = mhPortalListWin::GetID(v3, v5);
      GameFrameWork::SendMHPortalOpenReq((GameFrameWork *)v4, v6);
      break;
    case 0xAu:
      GameFrameWork::SendMHPortalCloseReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      break;
    case 0xBu:
      v7 = this->baseclass_0.m_pkFrameWork;
      v8 = SlideListWin::GetCurSelIndex(this->m_PortalNameList);
      v9 = mhPortalListWin::GetID(v3, v8);
      GameFrameWork::SendMHPortalDelReq((GameFrameWork *)v7, v9);
      break;
    case 0xCu:
      PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xE0u, 0, 0);
      break;
    case 0xDu:
      mhPortalListWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006D7CE0) --------------------------------------------------------
bool __thiscall mhPortalListWin::Add(mhPortalListWin *this, PORTAL_INFO Info)
{
  mhPortalListWin *v2; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> >::_Node *v3; // eax@1
  bool result; // al@2
  std::pair<unsigned short,long> pairNewElement; // [sp+8h] [bp-8h]@1

  v2 = this;
  pairNewElement.baseclass_0.second = Info.dEndTime;
  pairNewElement.baseclass_0.first = Info.nPortalItemID;
  v3 = std::_Tree_val<std::_Tmap_traits<unsigned_short_unsigned_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_unsigned_long>>_0>>::_Buynode<std::pair<unsigned_short_const_unsigned_long>>(
         (std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&this->m_mapPortalInfo,
         (std::pair<unsigned short const ,unsigned long> *)&pairNewElement);
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > *)&v2->m_mapPortalInfo,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,unsigned long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,unsigned long> >,0> > >,bool> *)&pairNewElement,
    v3,
    0);
  if ( LOBYTE(pairNewElement.baseclass_0.second) )
  {
    mhPortalListWin::Refresh(v2);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006D7D40) --------------------------------------------------------
bool __thiscall mhPortalListWin::Delete(mhPortalListWin *this, unsigned __int16 ID)
{
  mhPortalListWin *v2; // esi@1
  bool result; // al@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *itResult; // [sp+8h] [bp-4h]@1

  v2 = this;
  std::_Tree<std::_Tmap_traits<unsigned_short_long_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_long>>_0>>::find(
    (std::_Tree<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > *)&this->m_mapPortalInfo,
    (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,stMINIHOUSEINFO *,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,stMINIHOUSEINFO *> >,0> > > *)&itResult,
    &ID);
  if ( itResult == v2->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    result = 0;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase(
      &v2->m_mapPortalInfo.baseclass_0,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&ID,
      (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)itResult);
    mhPortalListWin::Refresh(v2);
    result = 1;
  }
  return result;
}

//----- (006D7DA0) --------------------------------------------------------
void __thiscall mhPortalListWin::mhPortalListWin(mhPortalListWin *this)
{
  mhPortalListWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  mhPortalListWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhPortalListWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhPortalListWin::_vftable_;
  v1->m_pkSlideBarPortalList = 0;
  v1->m_PortalNameList = 0;
  v6 = 0;
  v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_mapPortalInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9CBEE8: using guessed type int (__stdcall *mhPortalListWin___vftable_)(int uiFlags);
// 9CBF04: using guessed type int (__thiscall *mhPortalListWin___vftable_)(void *p, char);

//----- (006D7E80) --------------------------------------------------------
mhPortalListWin *__cdecl mhPortalListWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  mhPortalListWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x190u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    mhPortalListWin::mhPortalListWin((mhPortalListWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (mhPortalListWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006D7FB0) --------------------------------------------------------
bool __thiscall mhPortalListWin::Create(mhPortalListWin *this, PgFrameWork *pkFrameWork)
{
  mhPortalListWin *v2; // esi@1
  char *v3; // eax@3
  NiNode *v4; // eax@3
  NiNode *v5; // esi@7
  bool result; // al@11
  PgSprData *v7; // eax@12
  NiNode *v8; // esi@13
  int v9; // edi@18
  NiSourceTexture *v10; // eax@18
  PgSprData *v11; // eax@21
  PgSprData *v12; // eax@21
  PgSprData *v13; // eax@21
  PgSprData *v14; // eax@21
  PgSprData *v15; // eax@21
  PgFont *v16; // eax@24
  PgWinText *v17; // edi@24
  char *v18; // eax@24
  char *v19; // eax@24
  const char *v20; // edi@24
  char *v21; // ecx@24
  int v22; // eax@24
  char v23; // dl@25
  char *v24; // eax@26
  const char *v25; // edi@26
  char *v26; // ecx@26
  int v27; // eax@26
  char v28; // dl@27
  char *v29; // eax@28
  const char *v30; // edi@28
  char *v31; // ecx@28
  int v32; // eax@28
  char v33; // dl@29
  char *v34; // eax@30
  const char *v35; // edi@30
  char *v36; // ecx@30
  int v37; // eax@30
  char v38; // dl@31
  char *v39; // eax@32
  const char *v40; // edi@32
  char *v41; // ecx@32
  int v42; // eax@32
  char v43; // dl@33
  char *v44; // eax@34
  const char *v45; // edi@34
  char *v46; // ecx@34
  int v47; // eax@34
  char v48; // dl@35
  unsigned int v49; // edi@36
  int v50; // eax@37
  char v51; // cl@38
  const char *v52; // eax@39
  int v53; // eax@41
  char v54; // cl@42
  const char *v55; // eax@43
  char *v56; // eax@45
  int v57; // edi@47
  SLWCreateInfo::Item *v58; // edi@48
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v59; // edi@48
  SLWCreateInfo::Item *v60; // edi@54
  PgSprData *v61; // eax@56
  SlideListWin *v62; // eax@56
  PgSprData *v63; // eax@56
  SlideBar *v64; // eax@56
  SlideBar *v65; // edi@56
  void *(__thiscall *v66)(NiRefObject *, unsigned int); // edx@56
  SlideBar *v67; // ecx@56
  int v68; // eax@56
  int v69; // eax@56
  PgSprData *v70; // edi@56
  NiPointer<PgSprData::PgHitTester> *v71; // edx@56
  unsigned int v72; // edi@56
  PgFont *v73; // eax@56
  PgWinText *v74; // eax@56
  NiRefObjectVtbl *v75; // edi@56
  char *v76; // eax@56
  PgSprData *v77; // edi@56
  NiPointer<PgSprData::PgHitTester> *v78; // ecx@56
  unsigned int v79; // edi@56
  PgFont *v80; // eax@56
  PgWinText *v81; // eax@56
  NiRefObjectVtbl *v82; // edi@56
  char *v83; // eax@56
  PgSprData *v84; // edi@56
  NiSourceTexture *v85; // edi@56
  PgSprData *v86; // edi@57
  NiNode *v87; // esi@62
  const char *v88; // [sp-20h] [bp-158h]@19
  int *v89; // [sp-1Ch] [bp-154h]@19
  int *v90; // [sp-18h] [bp-150h]@19
  volatile LONG *v91; // [sp-14h] [bp-14Ch]@7
  NiSourceTexture *v92; // [sp-14h] [bp-14Ch]@19
  unsigned int v93; // [sp-10h] [bp-148h]@1
  unsigned int uiHeight; // [sp+0h] [bp-138h]@21
  unsigned int uiWidth; // [sp+4h] [bp-134h]@21
  SLWCreateInfo kCreateInfo; // [sp+8h] [bp-130h]@48
  char *pcText; // [sp+24h] [bp-114h]@36
  std::_Nonscalar_ptr_iterator_tag __formal[4]; // [sp+28h] [bp-110h]@37
  NiTexturePalette *iYOff; // [sp+2Ch] [bp-10Ch]@1
  int iTop; // [sp+30h] [bp-108h]@12
  int iLeft; // [sp+34h] [bp-104h]@12
  NiPointer<NiNode> spNode; // [sp+38h] [bp-100h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+3Ch] [bp-FCh]@24
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+58h] [bp-E0h]@48
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > pkToolTipText[6]; // [sp+74h] [bp-C4h]@24
  char acNum[12]; // [sp+11Ch] [bp-1Ch]@24
  unsigned int v107; // [sp+128h] [bp-10h]@1
  int v108; // [sp+134h] [bp-4h]@1
  int v109; // [sp+138h] [bp+0h]@1

  v107 = (unsigned int)&v109 ^ __security_cookie;
  v93 = (unsigned int)&v109 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v108 = 0;
  iYOff = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\MiniHomePortalList.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, iYOff);
  v4 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MiniHomePortalList.nif load fail", "LoadFail", 0);
      v4 = spNode.m_pObject;
    }
    v108 = -1;
    if ( !v4 )
      return 0;
    v5 = v4;
    v91 = (volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "mhPortalListWin", 0) )
  {
    v9 = iLeft;
    iYOff = (NiTexturePalette *)iTop;
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v92 = v10;
      v90 = &iTop;
      v89 = &iLeft;
      v88 = "Theme";
    }
    else
    {
      v92 = 0;
      v90 = &iTop;
      v89 = &iLeft;
      v88 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v88, v89, v90, v92);
    PgWinSpr::CreateWin(iLeft - v9, iTop - (_DWORD)iYOff, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v5 = spNode.m_pObject;
      v108 = -1;
      if ( !spNode.m_pObject )
        return 0;
      v91 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
      if ( !InterlockedDecrement(v91) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
      return 0;
    }
    v16 = Font::Get(MAIN_MENU);
    v17 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v17,
      1,
      v93);
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v17,
      (unsigned int)&Color::m_kDxWinTitleColor);
    iYOff = (NiTexturePalette *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v18 = TextData2::Get(0xD7F24143u);
    ((void (__thiscall *)(PgWinText *, char *))iYOff->baseclass_0.vfptr)(v17, v18);
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v17,
      0);
    strName.baseclass_0._Myres = 15;
    strName.baseclass_0._Mysize = 0;
    strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    LOBYTE(v108) = 1;
    strcpy(acNum, "0");
    *(_DWORD *)&acNum[2] = 0;
    *(_DWORD *)&acNum[6] = 0;
    *(_WORD *)&acNum[10] = 0;
    v19 = TextData2::Get(0x9BA8F7E2u);
    v20 = v19;
    v21 = v19;
    pkToolTipText[0].baseclass_0._Myres = 15;
    pkToolTipText[0].baseclass_0._Mysize = 0;
    pkToolTipText[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v22 = (int)(v19 + 1);
    do
      v23 = *v21++;
    while ( v23 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      pkToolTipText,
      v20,
      (unsigned int)&v21[-v22]);
    LOBYTE(v108) = 2;
    v24 = TextData2::Get(0x4C494A23u);
    v25 = v24;
    v26 = v24;
    pkToolTipText[1].baseclass_0._Myres = 15;
    pkToolTipText[1].baseclass_0._Mysize = 0;
    pkToolTipText[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v27 = (int)(v24 + 1);
    do
      v28 = *v26++;
    while ( v28 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &pkToolTipText[1],
      v25,
      (unsigned int)&v26[-v27]);
    LOBYTE(v108) = 3;
    v29 = TextData2::Get(0xE6EC4424u);
    v30 = v29;
    v31 = v29;
    pkToolTipText[2].baseclass_0._Myres = 15;
    pkToolTipText[2].baseclass_0._Mysize = 0;
    pkToolTipText[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v32 = (int)(v29 + 1);
    do
      v33 = *v31++;
    while ( v33 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &pkToolTipText[2],
      v30,
      (unsigned int)&v31[-v32]);
    LOBYTE(v108) = 4;
    v34 = TextData2::Get(0xD7F24143u);
    v35 = v34;
    v36 = v34;
    pkToolTipText[3].baseclass_0._Myres = 15;
    pkToolTipText[3].baseclass_0._Mysize = 0;
    pkToolTipText[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v37 = (int)(v34 + 1);
    do
      v38 = *v36++;
    while ( v38 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &pkToolTipText[3],
      v35,
      (unsigned int)&v36[-v37]);
    LOBYTE(v108) = 5;
    v39 = TextData2::Get(0xDEE82F0Du);
    v40 = v39;
    v41 = v39;
    pkToolTipText[4].baseclass_0._Myres = 15;
    pkToolTipText[4].baseclass_0._Mysize = 0;
    pkToolTipText[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v42 = (int)(v39 + 1);
    do
      v43 = *v41++;
    while ( v43 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &pkToolTipText[4],
      v40,
      (unsigned int)&v41[-v42]);
    LOBYTE(v108) = 6;
    v44 = TextData2::Get(0xFA4A423Fu);
    v45 = v44;
    v46 = v44;
    pkToolTipText[5].baseclass_0._Myres = 15;
    pkToolTipText[5].baseclass_0._Mysize = 0;
    pkToolTipText[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v47 = (int)(v44 + 1);
    do
      v48 = *v46++;
    while ( v48 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &pkToolTipText[5],
      v45,
      (unsigned int)&v46[-v47]);
    LOBYTE(v108) = 7;
    v49 = 0;
    pcText = (char *)pkToolTipText;
    do
    {
      *(_DWORD *)&__formal[0].dummy[0] = v49 + 1;
      _itoa(v49 + 1, acNum, 10);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnNor0", 7u);
      v50 = (int)acNum;
      do
        v51 = *(_BYTE *)v50++;
      while ( v51 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
        &strName,
        acNum,
        v50 - (_DWORD)&acNum[1]);
      v52 = *(const char **)&strName;
      if ( strName.baseclass_0._Myres < 0x10 )
        v52 = (const char *)&strName;
      iYOff = (NiTexturePalette *)PgSprData::Create(&spNode.m_pObject->baseclass_0, v52, &iLeft, &iTop, 0);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnOver0", 8u);
      v53 = (int)acNum;
      do
        v54 = *(_BYTE *)v53++;
      while ( v54 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
        &strName,
        acNum,
        v53 - (_DWORD)&acNum[1]);
      v55 = *(const char **)&strName;
      if ( strName.baseclass_0._Myres < 0x10 )
        v55 = (const char *)&strName;
      PgSprData::Add((PgSprData *)iYOff, &spNode.m_pObject->baseclass_0, v55);
      iYOff = (NiTexturePalette *)ColumnBut::CreateWin(
                                    iLeft,
                                    iTop,
                                    (PgSprData *)iYOff,
                                    &v2->baseclass_0.baseclass_0.baseclass_0,
                                    v49,
                                    0);
      std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
        (std::vector<unsigned long,std::allocator<unsigned long> > *)&v2->m_pkHouseTabList,
        (const unsigned int *)&iYOff);
      v56 = pcText;
      if ( *((_DWORD *)pcText + 5) >= 0x10u )
        v56 = *(char **)pcText;
      PgWin::SetToolTipWinText(
        *(PgWin **)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v49),
        v56);
      v57 = *(_DWORD *)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v49);
      pcText += 28;
      *(_DWORD *)(v57 + 272) = g_pkToolTipWin;
      v49 = *(_DWORD *)&__formal[0].dummy[0];
    }
    while ( *(_DWORD *)&__formal[0].dummy[0] < 6u );
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v108) = 8;
    v58 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v58->nItemType = 1;
    v58->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    v59 = &v58->vecNodeName;
    LOBYTE(v108) = 9;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v59,
      &thisa);
    LOBYTE(v108) = 8;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v108) = 10;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v59,
      &thisa);
    LOBYTE(v108) = 8;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v108) = 11;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v59,
      &thisa);
    LOBYTE(v108) = 8;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v60 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    v60->nItemType = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
    LOBYTE(v108) = 12;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      &v60->vecNodeName,
      &thisa);
    LOBYTE(v108) = 8;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v60->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v61 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ColumnBox", &iLeft, &iTop, 0);
    v62 = SlideListWin::CreateWin(iLeft, iTop, v61, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
    v2->m_PortalNameList = v62;
    v62->m_uiRClickMsg = 7;
    SlideListWin::AddText(v2->m_PortalNameList, byte_9CBCE9);
    SlideListWin::SetCurSelIndex(v2->m_PortalNameList, 0);
    v2->m_PortalNameList->m_nViewStartPos = 0;
    SlideListWin::SetToolTipWin(v2->m_PortalNameList, g_pkToolTipWin);
    SlideListWin::UpdateViewList(v2->m_PortalNameList);
    v63 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &iLeft, &iTop, 0);
    v64 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            v63,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkSlideBarPortalList = v64;
    v64->m_uiClickMsg = 6;
    v2->m_pkSlideBarPortalList->m_eType = 1;
    v65 = v2->m_pkSlideBarPortalList;
    v66 = v2->m_pkSlideBarPortalList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    v67 = v2->m_pkSlideBarPortalList;
    *(_DWORD *)&__formal[0].dummy[0] = v2->m_pkSlideBarPortalList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v68 = ((int (__thiscall *)(SlideBar *))v66)(v67);
    v69 = (int)v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                 (NiRefObject *)v65,
                 v68);
    (*(void (__thiscall **)(SlideBar *, int))(*(_DWORD *)&__formal[0].dummy[0] + 308))(v2->m_pkSlideBarPortalList, v69);
    SlideBar::SetSplitCnt(v2->m_pkSlideBarPortalList, v2->m_PortalNameList->m_nSlideSplitCnt);
    v70 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKBtnNor", &iLeft, &iTop, 0);
    PgSprData::Add(v70, &spNode.m_pObject->baseclass_0, "OKBTNClick");
    PgSprData::Add(v70, &spNode.m_pObject->baseclass_0, "OKBtnOver");
    v2->m_Btns[0] = PgWinBut::CreateWin(iLeft, iTop, v70, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0, 0);
    v71 = v70->m_akHitTester.m_pBase;
    v72 = v71->m_pObject->m_uiHeight;
    *(_DWORD *)&__formal[0].dummy[0] = v71->m_pObject->m_uiWidth;
    v73 = Font::Get(MAIN_MENU);
    v74 = PgWinText::CreateWin(
            iLeft,
            iTop,
            *(_DWORD *)&__formal[0].dummy[0],
            v72,
            v73,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_Text[0] = v74;
    v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v74,
      5u);
    v75 = v2->m_Text[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v76 = TextData::Get(0x4F5F499Fu);
    v75[118].__vecDelDtor((NiRefObject *)v2->m_Text[0], (unsigned int)v76);
    ((void (__stdcall *)(_DWORD))v2->m_Text[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v77 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CancelBtnNor", &iLeft, &iTop, 0);
    PgSprData::Add(v77, &spNode.m_pObject->baseclass_0, "CancelBTNClick");
    PgSprData::Add(v77, &spNode.m_pObject->baseclass_0, "CancelBtnOver");
    v2->m_Btns[1] = PgWinBut::CreateWin(iLeft, iTop, v77, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
    v78 = v77->m_akHitTester.m_pBase;
    v79 = v78->m_pObject->m_uiHeight;
    *(_DWORD *)&__formal[0].dummy[0] = v78->m_pObject->m_uiWidth;
    v80 = Font::Get(MAIN_MENU);
    v81 = PgWinText::CreateWin(
            iLeft,
            iTop,
            *(_DWORD *)&__formal[0].dummy[0],
            v79,
            v80,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_Text[1] = v81;
    v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v81,
      5u);
    v82 = v2->m_Text[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v83 = TextData::Get(0x88B298A0u);
    v82[118].__vecDelDtor((NiRefObject *)v2->m_Text[1], (unsigned int)v83);
    ((void (__stdcall *)(_DWORD))v2->m_Text[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v84 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
    PgSprData::Add(v84, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v84, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(iLeft, iTop, v84, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    v85 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v85);
      PgSprData::Add(v86, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(v86, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(iLeft, iTop, v86, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
    }
    ((void (__thiscall *)(mhPortalListWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(v2);
    LOBYTE(v108) = 7;
    if ( *(_DWORD *)&kCreateInfo )
    {
      std::_Destroy_range<std::allocator<boost::shared_ptr<SlideListWin::ListItem>>>(
        *(boost::shared_ptr<SLWCreateInfo::Item> **)&kCreateInfo,
        kCreateInfo.m_arrItem.baseclass_0._Mylast,
        &kCreateInfo.m_arrItem.baseclass_0._Alval,
        __formal[0]);
      operator delete(*(void **)&kCreateInfo);
    }
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    LOBYTE(v108) = 1;
    _eh_vector_destructor_iterator_(
      pkToolTipText,
      0x1Cu,
      6,
      (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
    if ( strName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strName);
    v87 = spNode.m_pObject;
    strName.baseclass_0._Myres = 15;
    strName.baseclass_0._Mysize = 0;
    strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v108 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v87 )
      v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v87, 1u);
    result = 1;
  }
  else
  {
    v8 = spNode.m_pObject;
    v108 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D8D20) --------------------------------------------------------
void *__thiscall mhPortalListWin::_vector_deleting_destructor_(mhPortalListWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  mhPortalListWin::_mhPortalListWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006D8D50) --------------------------------------------------------
void __thiscall mhRepairObjWin::mhRepairObjWin(mhRepairObjWin *this)
{
  mhRepairObjWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_tServerTimeStart = 0;
  v1->m_bRevServerTime = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhRepairObjWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhRepairObjWin::_vftable_;
  *(_DWORD *)&v1->m_bSentPacket = -65536;
}
// 9CC26C: using guessed type int (__stdcall *mhRepairObjWin___vftable_)(int uiFlags);
// 9CC28C: using guessed type int (__thiscall *mhRepairObjWin___vftable_)(void *p, char);

//----- (006D8D90) --------------------------------------------------------
void __thiscall mhRepairObjWin::_mhRepairObjWin(mhRepairObjWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhRepairObjWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhRepairObjWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CC26C: using guessed type int (__stdcall *mhRepairObjWin___vftable_)(int uiFlags);
// 9CC28C: using guessed type int (__thiscall *mhRepairObjWin___vftable_)(void *p, char);

//----- (006D8DB0) --------------------------------------------------------
void __thiscall mhRepairObjWin::UpdateTime(mhRepairObjWin *this, unsigned int tCount)
{
  if ( this->m_tServerTimeStart + 60000 < tCount )
  {
    if ( this->m_bRevServerTime == 1 )
    {
      this->m_tServerTime += 60;
      this->m_tServerTimeStart = tCount;
    }
  }
}

//----- (006D8DE0) --------------------------------------------------------
void __thiscall mhRepairObjWin::SetRepairObjID(mhRepairObjWin *this, unsigned __int16 ID)
{
  if ( !this->m_bSentPacket )
    this->m_ID = ID;
}

//----- (006D8E00) --------------------------------------------------------
void __thiscall mhRepairObjWin::SetRepairKitSlot(mhRepairObjWin *this, char bySlot)
{
  if ( !this->m_bSentPacket )
    this->m_nInvenSlot = bySlot;
}

//----- (006D8E20) --------------------------------------------------------
void __thiscall mhRepairObjWin::OnClose(mhRepairObjWin *this)
{
  if ( !this->m_bSentPacket )
  {
    this->m_nInvenSlot = 0;
    this->m_ID = -1;
  }
}

//----- (006D8E40) --------------------------------------------------------
void __thiscall mhRepairObjWin::RepairEnd(mhRepairObjWin *this)
{
  this->m_bSentPacket = 0;
}

//----- (006D8E50) --------------------------------------------------------
tm *__usercall localtime_3<eax>(const int *_Time<eax>)
{
  return _localtime32(_Time);
}

//----- (006D8E60) --------------------------------------------------------
int __usercall mktime_4<eax>(tm *_Tm<eax>)
{
  return _mktime32(_Tm);
}

//----- (006D8E80) --------------------------------------------------------
void __thiscall mhRepairObjWin::SetServerTime(mhRepairObjWin *this, int *pkKQ_Time)
{
  mhRepairObjWin *v2; // ST14_4@1
  const int *v3; // ebx@1
  tm t; // [sp+10h] [bp-28h]@1
  unsigned int v5; // [sp+34h] [bp-4h]@1
  int v6; // [sp+38h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  v3 = &this->m_tServerTime;
  this->m_tServerTime = *pkKQ_Time;
  memcpy(&t, _localtime32(&this->m_tServerTime), sizeof(t));
  this->m_tServerTimeStart = timeGetTime();
  v2->m_bRevServerTime = 1;
  t.tm_sec = 0;
  *v3 = _mktime32(&t);
  _localtime32(v3);
}
// A85C00: using guessed type int __security_cookie;

//----- (006D8F00) --------------------------------------------------------
bool __thiscall mhRepairObjWin::Create(mhRepairObjWin *this, PgFrameWork *pkFrameWork)
{
  mhRepairObjWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@11
  PgSprData *v8; // eax@12
  NiNode *v9; // esi@13
  NiSourceTexture *v10; // eax@18
  PgSprData *v11; // eax@21
  PgFont *v12; // eax@24
  PgWinText *v13; // edi@24
  NiRefObjectVtbl *v14; // ebx@24
  char *v15; // eax@24
  NiSourceTexture *v16; // eax@24
  PgSprData *v17; // eax@24
  PgSprData *v18; // eax@24
  PgSprData *v19; // edi@24
  PgSprData *v20; // eax@24
  PgSprData *v21; // edi@24
  NiPointer<PgSprData::PgHitTester> *v22; // edx@24
  unsigned int v23; // edi@24
  unsigned int v24; // ebx@24
  PgFont *v25; // eax@24
  PgWinText *v26; // eax@24
  NiRefObjectVtbl *v27; // edi@24
  char *v28; // eax@24
  PgSprData *v29; // edi@24
  NiPointer<PgSprData::PgHitTester> *v30; // ecx@24
  unsigned int v31; // edi@24
  unsigned int v32; // ebx@24
  PgFont *v33; // eax@24
  PgWinText *v34; // edi@24
  NiRefObjectVtbl *v35; // ebx@24
  char *v36; // eax@24
  PgSprData::PgHitTester *v37; // eax@24
  unsigned int v38; // edi@24
  unsigned int v39; // ebx@24
  PgFont *v40; // eax@24
  PgWinText *v41; // edi@24
  NiRefObjectVtbl *v42; // ebx@24
  char *v43; // eax@24
  NiPointer<PgSprData::PgHitTester> *v44; // ecx@24
  unsigned int v45; // edi@24
  unsigned int v46; // ebx@24
  PgFont *v47; // eax@24
  PgWinText *v48; // edi@24
  NiRefObjectVtbl *v49; // ebx@24
  char *v50; // eax@24
  PgSprData::PgHitTester *v51; // eax@24
  unsigned int v52; // edi@24
  unsigned int v53; // ebx@24
  PgFont *v54; // eax@24
  PgWinText *v55; // eax@24
  NiPointer<PgSprData::PgHitTester> *v56; // ecx@24
  unsigned int v57; // edi@24
  unsigned int v58; // ebx@24
  PgFont *v59; // eax@24
  PgWinText *v60; // eax@24
  NiPointer<PgSprData::PgHitTester> *v61; // ecx@24
  unsigned int v62; // edi@24
  unsigned int v63; // ebx@24
  PgFont *v64; // eax@24
  PgWinText *v65; // eax@24
  NiNode *v66; // esi@25
  const char *v67; // [sp+5Ch] [bp-48h]@19
  int *v68; // [sp+60h] [bp-44h]@19
  int *v69; // [sp+64h] [bp-40h]@19
  volatile LONG *v70; // [sp+68h] [bp-3Ch]@7
  NiSourceTexture *v71; // [sp+68h] [bp-3Ch]@19
  unsigned int uiWidth; // [sp+7Ch] [bp-28h]@21
  unsigned int uiHeight; // [sp+80h] [bp-24h]@21
  int iXOff; // [sp+84h] [bp-20h]@12
  int iYOff; // [sp+88h] [bp-1Ch]@12
  NiPointer<NiNode> spNode; // [sp+8Ch] [bp-18h]@1
  int iLeft; // [sp+90h] [bp-14h]@19
  int iTop; // [sp+94h] [bp-10h]@19
  int v79; // [sp+A0h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v79 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MyHomeRepairKit.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeRepairKit.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v79 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v70 = (volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iXOff, &iYOff, 0);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v8, 0, pkFrameWork, "mhRepairObjWin", 0) )
  {
    v10 = MenuTexMgr::GetTexture(0x13u);
    if ( v10 )
    {
      v71 = v10;
      v69 = &iTop;
      v68 = &iLeft;
      v67 = "Theme";
    }
    else
    {
      v71 = 0;
      v69 = &iTop;
      v68 = &iLeft;
      v67 = "Theme";
    }
    v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v67, v68, v69, v71);
    PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
    {
      v6 = spNode.m_pObject;
      v79 = -1;
      if ( !spNode.m_pObject )
        return 0;
      v70 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
      if ( !InterlockedDecrement(v70) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
      return 0;
    }
    iXOff = 17;
    iYOff = 0;
    v12 = Font::Get(MAIN_MENU);
    v13 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v13,
      1u);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v13,
      (unsigned int)&Color::m_kDxWinTitleColor);
    v14 = v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v15 = TextData2::Get(0xBCED2F29u);
    v14[118].__vecDelDtor((NiRefObject *)v13, (unsigned int)v15);
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v13,
      0);
    v16 = MenuTexMgr::GetTexture(4u);
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &iLeft, &iTop, v16);
    PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
    PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(iLeft - iXOff, iTop - iYOff, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
    PgWinSpr::CreateWin(iLeft - iXOff, iTop - iYOff, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &iLeft, &iTop, 0);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Over");
    v2->m_pkOkBtn = PgWinBut::CreateWin(
                      iLeft - iXOff,
                      iTop - iYOff,
                      v21,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0,
                      0);
    v22 = v21->m_akHitTester.m_pBase;
    v23 = v22->m_pObject->m_uiHeight;
    v24 = v22->m_pObject->m_uiWidth;
    v25 = Font::Get(MAIN_MENU);
    v26 = PgWinText::CreateWin(
            iLeft - iXOff,
            iTop - iYOff,
            v24,
            v23,
            v25,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkOkText = v26;
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v26,
      5u);
    v27 = v2->m_pkOkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v28 = TextData2::Get(0x538ED2DDu);
    v27[118].__vecDelDtor((NiRefObject *)v2->m_pkOkText, (unsigned int)v28);
    ((void (__stdcall *)(_DWORD))v2->m_pkOkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &iLeft, &iTop, 0);
    PgSprData::Add(v29, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v29, &spNode.m_pObject->baseclass_0, "Btn02Over");
    PgWinBut::CreateWin(iLeft - iXOff, iTop - iYOff, v29, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v30 = v29->m_akHitTester.m_pBase;
    v31 = v30->m_pObject->m_uiHeight;
    v32 = v30->m_pObject->m_uiWidth;
    v33 = Font::Get(MAIN_MENU);
    v34 = PgWinText::CreateWin(
            iLeft - iXOff,
            iTop - iYOff,
            v32,
            v31,
            v33,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v34,
      5u);
    v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v36 = TextData::Get(0x88A297E1u);
    v35[118].__vecDelDtor((NiRefObject *)v34, (unsigned int)v36);
    v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v34,
      0);
    v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v38 = v37->m_uiHeight;
    v39 = v37->m_uiWidth;
    v40 = Font::Get(MAIN_MENU);
    v41 = PgWinText::CreateWin(iLeft, iTop, v39, v38, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v41,
      5u);
    v42 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v43 = TextData2::Get(0x57819E74u);
    v42[118].__vecDelDtor((NiRefObject *)v41, (unsigned int)v43);
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v41,
      0);
    v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v45 = v44->m_pObject->m_uiHeight;
    v46 = v44->m_pObject->m_uiWidth;
    v47 = Font::Get(MAIN_MENU);
    v48 = PgWinText::CreateWin(iLeft, iTop, v46, v45, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v48,
      5u);
    v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v50 = TextData2::Get(0xD8B71D1Au);
    v49[118].__vecDelDtor((NiRefObject *)v48, (unsigned int)v50);
    v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v48,
      0);
    v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
    v52 = v51->m_uiHeight;
    v53 = v51->m_uiWidth;
    v54 = Font::Get(MAIN_MENU);
    v55 = PgWinText::CreateWin(iLeft, iTop, v53, v52, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkTextFieldWin[0] = v55;
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v55,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CC13D);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v56 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextVal02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v57 = v56->m_pObject->m_uiHeight;
    v58 = v56->m_pObject->m_uiWidth;
    v59 = Font::Get(MAIN_MENU);
    v60 = PgWinText::CreateWin(iLeft, iTop, v58, v57, v59, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkTextFieldWin[1] = v60;
    v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v60,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CC13E);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v61 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextVal03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
    v62 = v61->m_pObject->m_uiHeight;
    v63 = v61->m_pObject->m_uiWidth;
    v64 = Font::Get(MAIN_MENU);
    v65 = PgWinText::CreateWin(iLeft, iTop, v63, v62, v64, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_pkTextFieldWin[2] = v65;
    v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v65,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CC13F);
    ((void (__stdcall *)(_DWORD))v2->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__thiscall *)(mhRepairObjWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v79 = -1;
    if ( spNode.m_pObject )
    {
      v66 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v66 )
          v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v66, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v9 = spNode.m_pObject;
    v79 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006D96D0) --------------------------------------------------------
void __thiscall mhRepairObjWin::DoRepair(mhRepairObjWin *this)
{
  mhRepairObjWin *v1; // esi@1
  int v2; // ecx@1
  void *v3; // eax@3
  Item *v4; // edx@3
  ChargedItemEffect *v5; // ebx@3
  MiniHouseEndure *v6; // edi@3
  ItemIcon *v7; // eax@5
  Item *v8; // ebx@6
  Item *v9; // eax@6
  ItemInfo *v10; // edi@8
  ItemInfo *v11; // eax@8
  MiniHouseFurniture *v12; // eax@10
  int v13; // eax@14
  char *v14; // eax@17
  MsgBox *v15; // eax@17
  PgFrameWork *v16; // ST00_4@17
  GameFrameWork *v17; // esi@19
  char *v18; // eax@19
  Item *pkItem; // [sp+4h] [bp-1Ch]@6
  PgMsg::Frame kOkMsg; // [sp+8h] [bp-18h]@17
  unsigned int v21; // [sp+1Ch] [bp-4h]@1
  int v22; // [sp+20h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v1 = this;
  LOBYTE(v2) = this->m_nInvenSlot;
  if ( v1->m_ID == -1 )
  {
    GameFrameWork::OpenMHRepairWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, 0, 0);
    return;
  }
  v3 = v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  v4 = 0;
  v5 = 0;
  v6 = 0;
  if ( v3 )
  {
    v2 = (unsigned __int8)v2;
    if ( (unsigned __int8)v2 < 0xC0u )
    {
      v7 = (ItemIcon *)*((_DWORD *)v3 + v2 + 87);
      if ( v7 )
      {
        v8 = ItemIcon::GetItem(v7);
        v9 = Inventory::GetMHItemByObjID(&g_kInventory, v1->m_ID);
        pkItem = v9;
        if ( !v8
          || !v9
          || (v10 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v9->m_kStruct.itemid),
              v11 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v8->m_kStruct.itemid),
              !v10)
          || !v11
          || (v5 = ChargedEffectTable::GetByInxName(v11->InxName, 0),
              (v12 = MiniHouseFuritureInfoTab::GetObjByName(v10->InxName)) == 0)
          || (v6 = MiniHouseEndureInfoTable::GetByHandle(v12->KeepTime_Endure)) == 0
          || !v5 )
          return;
        v4 = pkItem;
      }
    }
  }
  v13 = MiniHouseIndoor::GetEndureStep(&g_kWorld.m_MiniHouseIndoorMode, v4, v1->m_tServerTime);
  if ( v13 == 100000 || v13 == 200000 )
  {
    v17 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
    v18 = TextData2::Get(0x8240C3Au);
    GameFrameWork::AddSysMsg(v17, v18);
  }
  else
  {
    if ( v13 + v5->EffectValue <= v6->Endure[0] )
    {
      PgFrameWork::AddMsg(v1->baseclass_0.m_pkFrameWork, 0xEBu, 0, 0);
      v1->m_bSentPacket = 1;
    }
    else
    {
      v14 = TextData2::Get(0x768D99EDu);
      v15 = MsgBox::Modal(MSGBOX_OKCANCEL, v14);
      v16 = v1->baseclass_0.m_pkFrameWork;
      kOkMsg.m_uiFrameMsg = 235;
      kOkMsg.m_uiFramelParam = 0;
      MsgBox::SetFrameWorkMsgOnClose(v15, v16, &kOkMsg, 0);
      v1->m_bSentPacket = 1;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006D98D0) --------------------------------------------------------
void __thiscall mhRepairObjWin::OnShowWin(mhRepairObjWin *this)
{
  mhRepairObjWin *v1; // esi@1
  void *v2; // eax@2
  ItemInfo *v3; // ebx@2
  unsigned int v4; // ecx@3
  ItemIcon *v5; // eax@4
  Item *v6; // edi@5
  Item *v7; // eax@5
  ItemInfo *v8; // eax@7
  ChargedItemEffect *v9; // edi@9
  MiniHouseFurniture *v10; // eax@9
  int v11; // edi@12
  int v12; // [sp-8h] [bp-38h]@2
  Item *pkItem; // [sp+4h] [bp-2Ch]@2
  MiniHouseEndure *pkItemEndure; // [sp+8h] [bp-28h]@2
  char tempstr[30]; // [sp+Ch] [bp-24h]@12
  unsigned int v16; // [sp+2Ch] [bp-4h]@1
  int v17; // [sp+30h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v1 = this;
  if ( this->m_ID != -1 )
  {
    ((void (__thiscall *)(mhRepairObjWin *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(this);
    ((void (__cdecl *)(_DWORD))v1->m_pkOkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v1->m_pkOkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v2 = v1->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
    v3 = 0;
    pkItem = 0;
    pkItemEndure = 0;
    if ( !v2
      || (v4 = v1->m_nInvenSlot, v4 >= 0xC0)
      || (v5 = (ItemIcon *)*((_DWORD *)v2 + v4 + 87)) == 0
      || (v6 = ItemIcon::GetItem(v5), v7 = Inventory::GetMHItemByObjID(&g_kInventory, v1->m_ID), pkItem = v7, v6)
      && v7
      && (v3 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v7->m_kStruct.itemid),
          v8 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v6->m_kStruct.itemid),
          v3)
      && v8
      && (v9 = ChargedEffectTable::GetByInxName(v8->InxName, 0),
          (v10 = MiniHouseFuritureInfoTab::GetObjByName(v3->InxName)) != 0)
      && (pkItemEndure = MiniHouseEndureInfoTable::GetByHandle(v10->KeepTime_Endure)) != 0
      && v9 )
    {
      v1->m_bSentPacket = 1;
      tempstr[0] = 0;
      *(_DWORD *)&tempstr[1] = 0;
      *(_DWORD *)&tempstr[5] = 0;
      *(_DWORD *)&tempstr[9] = 0;
      *(_DWORD *)&tempstr[13] = 0;
      *(_DWORD *)&tempstr[17] = 0;
      *(_DWORD *)&tempstr[21] = 0;
      *(_DWORD *)&tempstr[25] = 0;
      tempstr[29] = 0;
      sprintf(tempstr, "%d");
      ((void (__stdcall *)(_DWORD, int))v1->m_pkTextFieldWin[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(
        tempstr,
        v12);
      ((void (__stdcall *)(char *))v1->m_pkTextFieldWin[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v3->Name);
      v11 = 0;
      if ( MiniHouseIndoor::GetEndureStep(&g_kWorld.m_MiniHouseIndoorMode, pkItem, v1->m_tServerTime) )
      {
        if ( pkItemEndure->Endure[0] )
        {
          v11 = MiniHouseIndoor::GetEndurePercentage(&g_kWorld.m_MiniHouseIndoorMode, pkItem, v1->m_tServerTime);
          if ( v11 > 100 )
            v11 = 100;
        }
      }
      *(_DWORD *)tempstr = 0;
      *(_DWORD *)&tempstr[4] = 0;
      *(_DWORD *)&tempstr[8] = 0;
      *(_DWORD *)&tempstr[12] = 0;
      *(_DWORD *)&tempstr[16] = 0;
      *(_DWORD *)&tempstr[20] = 0;
      *(_DWORD *)&tempstr[24] = 0;
      *(_WORD *)&tempstr[28] = 0;
      sprintf(tempstr, "%d/%d (%d%%)");
      ((void (__cdecl *)(_DWORD))v1->m_pkTextFieldWin[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(tempstr);
      if ( v11 < 100 )
      {
        ((void (__stdcall *)(signed int))v1->m_pkOkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v1->m_pkOkText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
          (NiRefObject *)v1->m_pkOkText,
          1u);
      }
    }
  }
}
// 6D98D0: could not find valid save-restore pair for ebx
// 6D98D0: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;

//----- (006D9B80) --------------------------------------------------------
void __thiscall mhRepairObjWin::GetRepairInfos(mhRepairObjWin *this, Item *pkItem, Item *pkKit, ItemInfo *pkItemInfo, ItemInfo *pkItemKit, ChargedItemEffect *pkChargedKit, MiniHouseFurniture *pkItemFurInfo, MiniHouseEndure *pkItemEndure)
{
  mhRepairObjWin *v8; // edi@1
  void *v9; // eax@1
  unsigned int v10; // ecx@2
  ItemIcon *v11; // ecx@3
  Item *v12; // esi@4
  Item *v13; // eax@4
  ItemInfo *v14; // edi@6
  ItemInfo *v15; // eax@6
  MiniHouseFurniture *v16; // eax@8

  v8 = this;
  v9 = this->baseclass_0.m_pkFrameWork[19].m_BackFrameID;
  if ( v9 )
  {
    v10 = this->m_nInvenSlot;
    if ( v10 < 0xC0 )
    {
      v11 = (ItemIcon *)*((_DWORD *)v9 + v10 + 87);
      if ( v11 )
      {
        v12 = ItemIcon::GetItem(v11);
        v13 = Inventory::GetMHItemByObjID(&g_kInventory, v8->m_ID);
        if ( v12 )
        {
          if ( v13 )
          {
            v14 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v13->m_kStruct.itemid);
            v15 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v12->m_kStruct.itemid);
            if ( v14 )
            {
              if ( v15 )
              {
                ChargedEffectTable::GetByInxName(v15->InxName, 0);
                v16 = MiniHouseFuritureInfoTab::GetObjByName(v14->InxName);
                if ( v16 )
                  MiniHouseEndureInfoTable::GetByHandle(v16->KeepTime_Endure);
              }
            }
          }
        }
      }
    }
  }
}

//----- (006D9C30) --------------------------------------------------------
void __thiscall mhRepairObjWin::OnCommand(mhRepairObjWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam == 1 )
      GameFrameWork::OpenMHRepairWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, 0, 0);
  }
  else
  {
    mhRepairObjWin::DoRepair(this);
  }
}

//----- (006D9C60) --------------------------------------------------------
mhRepairObjWin *__cdecl mhRepairObjWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhRepairObjWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x17Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhRepairObjWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhRepairObjWin::_vftable_;
    *((_DWORD *)v2 + 86) = -65536;
    *((_DWORD *)v2 + 91) = 0;
    *((_BYTE *)v2 + 368) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhRepairObjWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CC26C: using guessed type int (__stdcall *mhRepairObjWin___vftable_)(int uiFlags);
// 9CC28C: using guessed type int (__thiscall *mhRepairObjWin___vftable_)(void *p, char);

//----- (006D9DC0) --------------------------------------------------------
void *__thiscall mhRepairObjWin::_vector_deleting_destructor_(mhRepairObjWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhRepairObjWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhRepairObjWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CC26C: using guessed type int (__stdcall *mhRepairObjWin___vftable_)(int uiFlags);
// 9CC28C: using guessed type int (__thiscall *mhRepairObjWin___vftable_)(void *p, char);

//----- (006D9E00) --------------------------------------------------------
void __thiscall mhSettingWin::OnHelpLink(mhSettingWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "MiniHomeSetting");
}

//----- (006D9E30) --------------------------------------------------------
void __thiscall mhSettingWin::UpdateMeWin(mhSettingWin *this, float fCurTime)
{
  PgWin *v2; // esi@1
  PgFrameWork *v3; // ebx@2
  int v4; // esi@3
  signed int v5; // edi@3

  v2 = (PgWin *)this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( PgWin::IsVisible(v2) )
    {
      v4 = (int)&v2[1].baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][2];
      v5 = 4;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 484))(1);
        v4 += 4;
        --v5;
      }
      while ( v5 );
      BYTE3(v3[73].m_kMsgQ.m_uiAlloced) = 0;
      PgFrameWork::AddMsg(v3, 0xE0u, 0, 0);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (006D9EA0) --------------------------------------------------------
void __thiscall mhSettingWin::OnChangeTab(mhSettingWin *this, DirectUserMsgBody_MHInfoTabChanged::TabEnum eTab)
{
  mhSettingWin *v2; // esi@1
  EditWin *v3; // ecx@1
  int v4; // esi@1
  DirectUserMsgBody_MHInfoTabChanged kBody; // [sp+4h] [bp-4h]@1

  v2 = this;
  *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 16) + 380) = 0;
  v3 = this->m_spEdit[2].m_pObject;
  kBody.eChanged = eTab;
  ((void (__stdcall *)(_UNKNOWN *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9CC4D2);
  v4 = (int)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( *(_DWORD *)(v4 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_MHInfoTabChanged *, int))(**(_DWORD **)(v4 + 4) + 4))(
      62,
      &kBody,
      v4);
    if ( *(_DWORD *)(v4 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_MHInfoTabChanged *, int))(**(_DWORD **)(v4 + 4) + 20))(
        62,
        &kBody,
        v4);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_MHInfoTabChanged *, int))(*(_DWORD *)v4 + 20))(
    v4,
    62,
    &kBody,
    v4);
}

//----- (006D9F20) --------------------------------------------------------
void __thiscall mhSettingWin::OnCommand(mhSettingWin *this, unsigned int wParam, int lParam)
{
  mhSettingWin *v3; // esi@1
  int v4; // eax@9
  int v5; // edx@9
  char v6; // cl@10
  char *v7; // eax@13
  MsgBox *v8; // esi@13
  PgFrameWork *v9; // eax@13
  PgMsg::Frame kOkMsg; // [sp+8h] [bp-18h]@13
  unsigned int v11; // [sp+1Ch] [bp-4h]@1
  int v12; // [sp+20h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  switch ( wParam )
  {
    case 0u:
      mhSettingWin::OnChangeTab(this, 0);
      break;
    case 1u:
      mhSettingWin::OnChangeTab(this, TE_GUEST_BOOK);
      break;
    case 2u:
      mhSettingWin::OnChangeTab(this, TE_EDIT_ROOM);
      break;
    case 3u:
      mhSettingWin::OnChangeTab(this, TE_PORTAL_LIST);
      break;
    case 4u:
      mhSettingWin::OnChangeTab(this, TE_SETTING);
      break;
    case 5u:
      mhSettingWin::OnChangeTab(this, TE_OUT);
      break;
    case 7u:
      if ( this->m_spCheckBox[0]->m_bCheck == 1 )
      {
        v4 = ((int (*)(void))this->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
        v5 = v4 + 1;
        do
          v6 = *(_BYTE *)v4++;
        while ( v6 );
        if ( v4 == v5 )
          v3->m_spCheckBox[0]->m_bCheck = v3->m_spCheckBox[0]->m_bCheck == 0;
      }
      v7 = TextData2::Get(0x839089AEu);
      v8 = MsgBox::Modal(MSGBOX_OKCANCEL, v7);
      kOkMsg.m_uiFrameMsg = 201;
      kOkMsg.m_uiFramelParam = 1;
      v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v9 )
        MsgBox::SetFrameWorkMsgOnClose(v8, v9, &kOkMsg, 0);
      break;
    case 8u:
      ((void (*)(void))this->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
      mhSettingWin::CheckEnable(v3, 0, dword_AA501C == 2, v3->m_spCheckBox[0]->m_bCheck == 0);
      if ( v3->m_spCheckBox[0]->m_bCheck == 1 )
        PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0xDFu, 0, 0);
      break;
    case 9u:
      this->m_spCheckBox[1]->m_bCheck = this->m_spCheckBox[1]->m_bCheck == 0;
      break;
    case 0xAu:
      PgFrameWork::AddMsg(this->baseclass_0.m_pkFrameWork, 0xE0u, 0, 0);
      break;
    case 0xBu:
      mhSettingWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}
// A85C00: using guessed type int __security_cookie;
// AA501C: using guessed type int dword_AA501C;

//----- (006DA180) --------------------------------------------------------
void __thiscall mhSettingWin::OnShowWin(mhSettingWin *this)
{
  mhSettingWin *v1; // edi@1
  signed int v2; // esi@2
  EditWin **v3; // esi@6
  signed int v4; // ebx@6

  v1 = this;
  if ( dword_AA501C != 2 )
  {
    v2 = 0;
    do
    {
      v1->m_spCheckBox[v2]->m_bCheck = v1->m_spCheckBox[v2]->m_bCheck;
      ((void (__stdcall *)(_DWORD))v1->m_spCheckBox[v2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      if ( !v2 )
        ((void (__stdcall *)(_DWORD))v1->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
      ++v2;
    }
    while ( v2 < 2 );
    v3 = (EditWin **)v1->m_spEdit;
    v4 = 4;
    do
    {
      ((void (__stdcall *)(_DWORD))(*v3)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
      EditWin::SetEnable(*v3, 0);
      ++v3;
      --v4;
    }
    while ( v4 );
    ((void (__stdcall *)(_DWORD))v1->m_spText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v1->m_spBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1->m_spBtn,
      0);
  }
}
// AA501C: using guessed type int dword_AA501C;

//----- (006DA240) --------------------------------------------------------
void __thiscall mhSettingWin::OnClose(mhSettingWin *this)
{
  mhSettingWin *v1; // edi@1
  signed int v2; // esi@1
  ColumnBut *v3; // eax@2
  bool v4; // cl@2
  EditWin **v5; // esi@5
  signed int v6; // ebx@5
  int v7; // [sp+Ch] [bp-4h]@0

  v1 = this;
  v2 = 0;
  do
  {
    v3 = v1->m_spCheckBox[v2];
    v4 = v3->m_bCheck;
    v3->m_bCheck = v4;
    LOBYTE(v7) = v4;
    ((void (__stdcall *)(signed int))v1->m_spCheckBox[v2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    if ( !v2 )
    {
      ((void (__stdcall *)(signed int))v1->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(int))v1->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7);
    }
    ++v2;
  }
  while ( v2 < 2 );
  v5 = (EditWin **)v1->m_spEdit;
  v6 = 4;
  do
  {
    EditWin::SetEnable(*v5, 1);
    ++v5;
    --v6;
  }
  while ( v6 );
  ((void (__stdcall *)(signed int))v1->m_spText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(signed int))v1->m_spBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
}

//----- (006DA2F0) --------------------------------------------------------
void __thiscall mhSettingWin::mhSettingWin(mhSettingWin *this)
{
  mhSettingWin *v1; // esi@1
  int v2; // ebx@1
  int v3; // edi@2
  signed int v4; // [sp+4h] [bp-10h]@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhSettingWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhSettingWin::_vftable_;
  v1->m_spBtn = 0;
  v1->m_spText = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spEdit,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
  v1->m_spCheckBox[0] = 0;
  v1->m_spCheckBox[1] = 0;
  v2 = (int)v1->m_spEdit;
  v4 = 4;
  do
  {
    v3 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      {
        if ( v3 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v4;
  }
  while ( v4 );
}
// 9CC6A0: using guessed type int (__stdcall *mhSettingWin___vftable_)(int uiFlags);
// 9CC6BC: using guessed type int (__thiscall *mhSettingWin___vftable_)(void *p, char);

//----- (006DA3D0) --------------------------------------------------------
void __thiscall mhSettingWin::_mhSettingWin(mhSettingWin *this)
{
  mhSettingWin *v1; // esi@1
  void *v2; // eax@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhSettingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhSettingWin::_vftable_;
  v2 = *(void **)&this->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
    operator delete(v2);
  *(_DWORD *)&v1->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_pkHouseTabList.baseclass_0._Mylast = 0;
  v1->m_pkHouseTabList.baseclass_0._Myend = 0;
  _eh_vector_destructor_iterator_(
    v1->m_spEdit,
    4u,
    4,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9CC6A0: using guessed type int (__stdcall *mhSettingWin___vftable_)(int uiFlags);
// 9CC6BC: using guessed type int (__thiscall *mhSettingWin___vftable_)(void *p, char);

//----- (006DA470) --------------------------------------------------------
mhSettingWin *__cdecl mhSettingWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  mhSettingWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x188u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    mhSettingWin::mhSettingWin((mhSettingWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (mhSettingWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006DA5A0) --------------------------------------------------------
bool __thiscall mhSettingWin::Create(mhSettingWin *this, PgFrameWork *pkFrameWork)
{
  mhSettingWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  int v7; // eax@7
  PgSprData *v9; // eax@13
  int v10; // edi@16
  int v11; // ebx@16
  NiSourceTexture *v12; // eax@16
  PgSprData *v13; // eax@19
  PgSprData *v14; // eax@19
  PgSprData *v15; // eax@19
  PgSprData *v16; // eax@19
  PgSprData *v17; // eax@19
  PgFont *v18; // eax@22
  PgWinText *v19; // edi@22
  NiRefObjectVtbl *v20; // ebx@22
  char *v21; // eax@22
  PgSprData *v22; // edi@22
  EditWin *v23; // eax@22
  PgSprData *v24; // edi@22
  EditWin *v25; // eax@22
  PgSprData *v26; // edi@22
  EditWin *v27; // eax@22
  PgSprData *v28; // edi@22
  EditWin *v29; // eax@22
  NiPointer<PgSprData::PgHitTester> *v30; // edx@22
  unsigned int v31; // edi@22
  unsigned int v32; // ebx@22
  PgFont *v33; // eax@22
  PgWinText *v34; // edi@22
  NiRefObjectVtbl *v35; // ebx@22
  char *v36; // eax@22
  PgSprData::PgHitTester *v37; // eax@22
  unsigned int v38; // edi@22
  unsigned int v39; // ebx@22
  PgFont *v40; // eax@22
  PgWinText *v41; // edi@22
  NiRefObjectVtbl *v42; // ebx@22
  char *v43; // eax@22
  NiPointer<PgSprData::PgHitTester> *v44; // ecx@22
  unsigned int v45; // edi@22
  unsigned int v46; // ebx@22
  PgFont *v47; // eax@22
  PgWinText *v48; // edi@22
  NiRefObjectVtbl *v49; // ebx@22
  char *v50; // eax@22
  PgSprData::PgHitTester *v51; // eax@22
  unsigned int v52; // edi@22
  unsigned int v53; // ebx@22
  PgFont *v54; // eax@22
  PgWinText *v55; // edi@22
  NiRefObjectVtbl *v56; // ebx@22
  char *v57; // eax@22
  NiPointer<PgSprData::PgHitTester> *v58; // ecx@22
  unsigned int v59; // edi@22
  unsigned int v60; // ebx@22
  PgFont *v61; // eax@22
  PgWinText *v62; // edi@22
  NiRefObjectVtbl *v63; // ebx@22
  char *v64; // eax@22
  PgSprData::PgHitTester *v65; // eax@22
  unsigned int v66; // edi@22
  unsigned int v67; // ebx@22
  PgFont *v68; // eax@22
  PgWinText *v69; // edi@22
  NiRefObjectVtbl *v70; // ebx@22
  char *v71; // eax@22
  NiPointer<PgSprData::PgHitTester> *v72; // ecx@22
  unsigned int v73; // edi@22
  unsigned int v74; // ebx@22
  PgFont *v75; // eax@22
  PgWinText *v76; // edi@22
  NiRefObjectVtbl *v77; // ebx@22
  char *v78; // eax@22
  PgSprData::PgHitTester *v79; // eax@22
  unsigned int v80; // edi@22
  unsigned int v81; // ebx@22
  PgFont *v82; // eax@22
  PgWinText *v83; // edi@22
  NiRefObjectVtbl *v84; // ebx@22
  char *v85; // eax@22
  PgSprData *v86; // edi@22
  NiPointer<PgSprData::PgHitTester> *v87; // edx@22
  unsigned int v88; // edi@22
  unsigned int v89; // ebx@22
  PgFont *v90; // eax@22
  PgWinText *v91; // eax@22
  NiRefObjectVtbl *v92; // edi@22
  char *v93; // eax@22
  PgSprData *v94; // edi@22
  ColumnBut *v95; // eax@22
  NiNode *v96; // edx@22
  PgSprData *v97; // edi@22
  signed int v98; // edi@22
  ColumnBut *v99; // eax@23
  bool v100; // cl@23
  int v101; // edi@26
  signed int v102; // ebx@26
  char *v103; // eax@28
  char *v104; // eax@28
  char *v105; // eax@28
  char *v106; // eax@28
  char *v107; // eax@28
  char *v108; // eax@28
  int v109; // eax@29
  char v110; // cl@30
  const char *v111; // eax@31
  PgSprData *v112; // ebx@33
  int v113; // eax@33
  char v114; // cl@34
  const char *v115; // eax@35
  unsigned int v116; // eax@37
  unsigned int v117; // ebx@38
  ColumnBut **v118; // ecx@39
  signed int v119; // edx@39
  int v120; // eax@40
  int v121; // eax@41
  int v122; // ecx@41
  unsigned int v123; // ecx@43
  int v124; // edx@48
  ColumnBut **v125; // eax@48
  ColumnBut **v126; // ecx@50
  int v127; // edx@51
  int v128; // eax@51
  int v129; // eax@52
  int v130; // ecx@52
  unsigned int v131; // ecx@54
  ColumnBut **v132; // eax@59
  char *v133; // eax@61
  unsigned int v134; // ebx@63
  int v135; // eax@63
  PgSprData *v136; // edi@64
  NiSourceTexture *v137; // edi@64
  PgSprData *v138; // edi@65
  NiNode *v139; // esi@68
  const char *v140; // [sp+90h] [bp-128h]@17
  int *v141; // [sp+94h] [bp-124h]@17
  int *v142; // [sp+98h] [bp-120h]@17
  volatile LONG *v143; // [sp+9Ch] [bp-11Ch]@8
  NiSourceTexture *v144; // [sp+9Ch] [bp-11Ch]@17
  unsigned int v145; // [sp+A0h] [bp-118h]@1
  int v146; // [sp+B0h] [bp-108h]@29
  unsigned int uiWidth; // [sp+B4h] [bp-104h]@19
  int v148; // [sp+B8h] [bp-100h]@39
  unsigned int uiHeight; // [sp+BCh] [bp-FCh]@19
  ColumnBut *pkTab; // [sp+C0h] [bp-F8h]@37
  unsigned int i; // [sp+C4h] [bp-F4h]@28
  char *pcText; // [sp+C8h] [bp-F0h]@23
  NiPointer<NiNode> spNode; // [sp+CCh] [bp-ECh]@1
  int iLeft; // [sp+D0h] [bp-E8h]@13
  int iTop; // [sp+D4h] [bp-E4h]@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strName; // [sp+D8h] [bp-E0h]@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > pkToolTipText[6]; // [sp+F4h] [bp-C4h]@28
  char acNum[12]; // [sp+19Ch] [bp-1Ch]@28
  unsigned int v159; // [sp+1A8h] [bp-10h]@1
  int v160; // [sp+1B4h] [bp-4h]@1
  int v161; // [sp+1B8h] [bp+0h]@1

  v159 = (unsigned int)&v161 ^ __security_cookie;
  v145 = (unsigned int)&v161 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v160 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\MiniHomeSetting.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MiniHomeSetting.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v160 = -1;
    if ( !v5 )
      return 0;
    v6 = v5;
    v7 = (int)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    goto LABEL_8;
  }
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &iLeft, &iTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "mhInfoWin", 0) )
  {
    v6 = spNode.m_pObject;
    v160 = -1;
    if ( spNode.m_pObject )
    {
      v7 = (int)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_8:
      v143 = (volatile LONG *)v7;
      goto LABEL_9;
    }
    return 0;
  }
  v10 = iLeft;
  v11 = iTop;
  v12 = MenuTexMgr::GetTexture(0x13u);
  if ( v12 )
  {
    v144 = v12;
    v142 = &iTop;
    v141 = &iLeft;
    v140 = "Theme";
  }
  else
  {
    v144 = 0;
    v142 = &iTop;
    v141 = &iLeft;
    v140 = "Theme";
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v140, v141, v142, v144);
  PgWinSpr::CreateWin(iLeft - v10, iTop - v11, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &iLeft, &iTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v160 = -1;
    if ( spNode.m_pObject )
    {
      v143 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_9:
      if ( !InterlockedDecrement(v143) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
      return 0;
    }
    return 0;
  }
  v18 = Font::Get(MAIN_MENU);
  v19 = PgWinText::CreateWin(iLeft, iTop, uiWidth, uiHeight, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v19,
    1,
    v145);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v19,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData2::Get(0xDEE82F0Du);
  v20[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField01", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v23 = EditWin::CreateWin(
          iLeft,
          iTop,
          v22->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
          v22->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          NORMAL,
          0x14u,
          1u,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spEdit, (NiD3DDefaultShader *)v23);
  EditWin::SetImeStatus(v2->m_spEdit[0].m_pObject, IS_KOREAN);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField04", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v25 = EditWin::CreateWin(
          iLeft,
          iTop,
          v24->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
          v24->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          NUMBER,
          2u,
          1u,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit[1], (NiD3DDefaultShader *)v25);
  EditWin::SetImeStatus(v2->m_spEdit[1].m_pObject, IS_KOREAN);
  v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField03", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft - 1, iTop - 2, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v27 = EditWin::CreateWin(
          iLeft,
          iTop,
          v26->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
          v26->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          PASSWD,
          8u,
          1u,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit[2], (NiD3DDefaultShader *)v27);
  EditWin::SetImeStatus(v2->m_spEdit[2].m_pObject, IS_KOREAN);
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextField06", &iLeft, &iTop, 0);
  PgWinSpr::CreateWin(iLeft, iTop, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v29 = EditWin::CreateWin(
          iLeft,
          iTop,
          v28->m_akHitTester.m_pBase->m_pObject->m_uiWidth,
          v28->m_akHitTester.m_pBase->m_pObject->m_uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          MULTILINE,
          0x64u,
          1u,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit[3], (NiD3DDefaultShader *)v29);
  EditWin::SetImeStatus(v2->m_spEdit[3].m_pObject, IS_KOREAN);
  v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v31 = v30->m_pObject->m_uiHeight;
  v32 = v30->m_pObject->m_uiWidth;
  v33 = Font::Get(MAIN_MENU);
  v34 = PgWinText::CreateWin(iLeft, iTop, v32, v31, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v34,
    5u);
  v35 = v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v36 = TextData2::Get(0x2218767Du);
  v35[118].__vecDelDtor((NiRefObject *)v34, (unsigned int)v36);
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v34,
    0);
  v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v38 = v37->m_uiHeight;
  v39 = v37->m_uiWidth;
  v40 = Font::Get(MAIN_MENU);
  v41 = PgWinText::CreateWin(iLeft, iTop, v39, v38, v40, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v41,
    5u);
  v42 = v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v43 = TextData2::Get(0x9DAEF6E1u);
  v42[118].__vecDelDtor((NiRefObject *)v41, (unsigned int)v43);
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v41,
    0);
  v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v45 = v44->m_pObject->m_uiHeight;
  v46 = v44->m_pObject->m_uiWidth;
  v47 = Font::Get(MAIN_MENU);
  v48 = PgWinText::CreateWin(iLeft, iTop, v46, v45, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v48,
    5u);
  v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v50 = TextData::Get(0xA7F6EEE4u);
  v49[118].__vecDelDtor((NiRefObject *)v48, (unsigned int)v50);
  v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v48,
    0);
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text04", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v52 = v51->m_uiHeight;
  v53 = v51->m_uiWidth;
  v54 = Font::Get(MAIN_MENU);
  v55 = PgWinText::CreateWin(iLeft, iTop, v53, v52, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v55,
    5u);
  v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v57 = TextData2::Get(0x7EC0BBE2u);
  v56[118].__vecDelDtor((NiRefObject *)v55, (unsigned int)v57);
  v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v55,
    0);
  v58 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text05", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v59 = v58->m_pObject->m_uiHeight;
  v60 = v58->m_pObject->m_uiWidth;
  v61 = Font::Get(MAIN_MENU);
  v62 = PgWinText::CreateWin(iLeft, iTop, v60, v59, v61, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v62,
    5u);
  v63 = v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v64 = TextData2::Get(0xEA563B2Fu);
  v63[118].__vecDelDtor((NiRefObject *)v62, (unsigned int)v64);
  v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v62,
    0);
  v65 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02_1", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v66 = v65->m_uiHeight;
  v67 = v65->m_uiWidth;
  v68 = Font::Get(MAIN_MENU);
  v69 = PgWinText::CreateWin(iLeft, iTop, v67, v66, v68, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v69,
    5u);
  v70 = v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v71 = TextData2::Get(0x725F917Bu);
  v70[118].__vecDelDtor((NiRefObject *)v69, (unsigned int)v71);
  v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v69,
    0);
  v72 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text05_1", &iLeft, &iTop, 0)->m_akHitTester.m_pBase;
  v73 = v72->m_pObject->m_uiHeight;
  v74 = v72->m_pObject->m_uiWidth;
  v75 = Font::Get(MAIN_MENU);
  v76 = PgWinText::CreateWin(iLeft, iTop, v74, v73, v75, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v76,
    5u);
  v77 = v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v78 = TextData2::Get(0x725F917Bu);
  v77[118].__vecDelDtor((NiRefObject *)v76, (unsigned int)v78);
  v76->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v76,
    0);
  v79 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text06", &iLeft, &iTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v80 = v79->m_uiHeight;
  v81 = v79->m_uiWidth;
  v82 = Font::Get(MAIN_MENU);
  v83 = PgWinText::CreateWin(iLeft, iTop, v81, v80, v82, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v83,
    5u);
  v84 = v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v85 = TextData::Get(0x9798BBB1u);
  v84[118].__vecDelDtor((NiRefObject *)v83, (unsigned int)v85);
  v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v83,
    0);
  v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKBtnNor", &iLeft, &iTop, 0);
  PgSprData::Add(v86, &spNode.m_pObject->baseclass_0, "OKBTNClick");
  PgSprData::Add(v86, &spNode.m_pObject->baseclass_0, "OKBtnOver");
  v2->m_spBtn = PgWinBut::CreateWin(iLeft, iTop, v86, &v2->baseclass_0.baseclass_0.baseclass_0, 7u, 0, 0);
  v87 = v86->m_akHitTester.m_pBase;
  v88 = v87->m_pObject->m_uiHeight;
  v89 = v87->m_pObject->m_uiWidth;
  v90 = Font::Get(MAIN_MENU);
  v91 = PgWinText::CreateWin(iLeft, iTop, v89, v88, v90, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_spText = v91;
  v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v91,
    5u);
  v92 = v2->m_spText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v93 = TextData::Get(0x4F5F499Fu);
  v92[118].__vecDelDtor((NiRefObject *)v2->m_spText, (unsigned int)v93);
  ((void (__stdcall *)(_DWORD))v2->m_spText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v94 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02Nor", &iLeft, &iTop, 0);
  PgSprData::Add(v94, &spNode.m_pObject->baseclass_0, "Text02Click");
  v95 = ColumnBut::CreateWin(iLeft, iTop, v94, &v2->baseclass_0.baseclass_0.baseclass_0, 8u, 0);
  v96 = spNode.m_pObject;
  v2->m_spCheckBox[0] = v95;
  v97 = PgSprData::Create(&v96->baseclass_0, "Text05Nor", &iLeft, &iTop, 0);
  PgSprData::Add(v97, &spNode.m_pObject->baseclass_0, "Text05Click");
  v2->m_spCheckBox[1] = ColumnBut::CreateWin(iLeft, iTop, v97, &v2->baseclass_0.baseclass_0.baseclass_0, 9u, 0);
  v98 = 0;
  do
  {
    v99 = v2->m_spCheckBox[v98];
    v100 = v99->m_bCheck;
    v99->m_bCheck = v100;
    LOBYTE(pcText) = v100;
    ((void (__stdcall *)(signed int))v2->m_spCheckBox[v98]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    if ( !v98 )
    {
      ((void (__stdcall *)(signed int))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(char *))v2->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(pcText);
    }
    ++v98;
  }
  while ( v98 < 2 );
  v101 = (int)v2->m_spEdit;
  v102 = 4;
  do
  {
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v101 + 240))(1);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v101 + 460))(&unk_9CC4D1);
    v101 += 4;
    --v102;
  }
  while ( v102 );
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  LOBYTE(v160) = 1;
  strcpy(acNum, "0");
  *(_DWORD *)&acNum[2] = 0;
  *(_DWORD *)&acNum[6] = 0;
  *(_WORD *)&acNum[10] = 0;
  v103 = TextData2::Get(0x9BA8F7E2u);
  pkToolTipText[0].baseclass_0._Myres = 15;
  pkToolTipText[0].baseclass_0._Mysize = 0;
  pkToolTipText[0].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(pkToolTipText, v103, strlen(v103));
  LOBYTE(v160) = 2;
  v104 = TextData2::Get(0x4C494A23u);
  pkToolTipText[1].baseclass_0._Myres = 15;
  pkToolTipText[1].baseclass_0._Mysize = 0;
  pkToolTipText[1].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[1], v104, strlen(v104));
  LOBYTE(v160) = 3;
  v105 = TextData2::Get(0xE6EC4424u);
  pkToolTipText[2].baseclass_0._Myres = 15;
  pkToolTipText[2].baseclass_0._Mysize = 0;
  pkToolTipText[2].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[2], v105, strlen(v105));
  LOBYTE(v160) = 4;
  v106 = TextData2::Get(0xD7F24143u);
  pkToolTipText[3].baseclass_0._Myres = 15;
  pkToolTipText[3].baseclass_0._Mysize = 0;
  pkToolTipText[3].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[3], v106, strlen(v106));
  LOBYTE(v160) = 5;
  v107 = TextData2::Get(0xDEE82F0Du);
  pkToolTipText[4].baseclass_0._Myres = 15;
  pkToolTipText[4].baseclass_0._Mysize = 0;
  pkToolTipText[4].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[4], v107, strlen(v107));
  LOBYTE(v160) = 6;
  v108 = TextData2::Get(0xFA4A423Fu);
  pkToolTipText[5].baseclass_0._Myres = 15;
  pkToolTipText[5].baseclass_0._Mysize = 0;
  pkToolTipText[5].baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&pkToolTipText[5], v108, strlen(v108));
  LOBYTE(v160) = 7;
  i = 0;
  pcText = (char *)pkToolTipText;
  do
  {
    v146 = i + 1;
    _itoa(i + 1, acNum, 10);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnNor0", 7u);
    v109 = (int)acNum;
    do
      v110 = *(_BYTE *)v109++;
    while ( v110 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &strName,
      acNum,
      v109 - (_DWORD)&acNum[1]);
    v111 = *(const char **)&strName;
    if ( strName.baseclass_0._Myres < 0x10 )
      v111 = (const char *)&strName;
    v112 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v111, &iLeft, &iTop, 0);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strName, "BtnOver0", 8u);
    v113 = (int)acNum;
    do
      v114 = *(_BYTE *)v113++;
    while ( v114 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(
      &strName,
      acNum,
      v113 - (_DWORD)&acNum[1]);
    v115 = *(const char **)&strName;
    if ( strName.baseclass_0._Myres < 0x10 )
      v115 = (const char *)&strName;
    PgSprData::Add(v112, &spNode.m_pObject->baseclass_0, v115);
    pkTab = ColumnBut::CreateWin(iLeft, iTop, v112, &v2->baseclass_0.baseclass_0.baseclass_0, i, 0);
    v116 = (unsigned int)v2->m_pkHouseTabList.baseclass_0._Mylast;
    if ( (unsigned int)&pkTab >= v116
      || (v117 = *(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0], v117 > (unsigned int)&pkTab) )
    {
      v126 = v2->m_pkHouseTabList.baseclass_0._Myend;
      if ( (ColumnBut **)v116 == v126 )
      {
        v127 = *(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0];
        v128 = (signed int)(v116 - v127) >> 2;
        if ( (unsigned int)v128 > 0x3FFFFFFE )
LABEL_74:
          std::_Xlength_error("vector<T> too long");
        v129 = v128 + 1;
        v130 = (signed int)((char *)v126 - v127) >> 2;
        if ( v129 > (unsigned int)v130 )
        {
          if ( 1073741823 - ((unsigned int)v130 >> 1) >= v130 )
            v131 = ((unsigned int)v130 >> 1) + v130;
          else
            v131 = 0;
          if ( v131 < v129 )
            v131 = v129;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v2->m_pkHouseTabList,
            v131);
        }
      }
      v132 = v2->m_pkHouseTabList.baseclass_0._Mylast;
      if ( v132 )
        *v132 = pkTab;
    }
    else
    {
      v118 = v2->m_pkHouseTabList.baseclass_0._Myend;
      v119 = (signed int)((char *)&pkTab - v117) >> 2;
      v148 = (signed int)((char *)&pkTab - v117) >> 2;
      if ( (ColumnBut **)v116 == v118 )
      {
        v120 = (signed int)(v116 - v117) >> 2;
        if ( (unsigned int)v120 > 0x3FFFFFFE )
          goto LABEL_74;
        v121 = v120 + 1;
        v122 = (signed int)((char *)v118 - v117) >> 2;
        if ( v121 > (unsigned int)v122 )
        {
          if ( 1073741823 - ((unsigned int)v122 >> 1) >= v122 )
            v123 = ((unsigned int)v122 >> 1) + v122;
          else
            v123 = 0;
          if ( v123 < v121 )
            v123 = v121;
          std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
            (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)&v2->m_pkHouseTabList,
            v123);
          v119 = v148;
        }
      }
      v124 = *(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v119;
      v125 = v2->m_pkHouseTabList.baseclass_0._Mylast;
      if ( v125 )
        *v125 = *(ColumnBut **)v124;
    }
    v133 = pcText;
    ++v2->m_pkHouseTabList.baseclass_0._Mylast;
    if ( *((_DWORD *)v133 + 5) >= 0x10u )
      v133 = *(char **)v133;
    v134 = i;
    PgWin::SetToolTipWinText(
      *(PgWin **)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * i),
      v133);
    v135 = *(_DWORD *)(*(_DWORD *)&v2->m_pkHouseTabList.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v134);
    pcText += 28;
    *(_DWORD *)(v135 + 272) = g_pkToolTipWin;
    i = v146;
  }
  while ( (unsigned int)v146 < 6 );
  v136 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &iLeft, &iTop, 0);
  PgSprData::Add(v136, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v136, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(iLeft, iTop, v136, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
  v137 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v138 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &iLeft, &iTop, v137);
    PgSprData::Add(v138, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v138, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(iLeft, iTop, v138, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  }
  ((void (__thiscall *)(mhSettingWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor)(v2);
  ((void (__thiscall *)(mhSettingWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.43000001);
  LOBYTE(v160) = 1;
  _eh_vector_destructor_iterator_(
    pkToolTipText,
    0x1Cu,
    6,
    (void (__thiscall *)(void *))std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>);
  if ( strName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&strName);
  v139 = spNode.m_pObject;
  strName.baseclass_0._Myres = 15;
  strName.baseclass_0._Mysize = 0;
  strName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v160 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v139 )
    v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v139, 1u);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (006DB7A0) --------------------------------------------------------
void __thiscall mhSettingWin::CheckEnable(mhSettingWin *this, mhSettingWin::CheckBoxIndex eIndex, bool bEnable, bool bShow)
{
  mhSettingWin *v4; // esi@1
  NiRefObjectVtbl *v5; // edx@2

  v4 = this;
  this->m_spCheckBox[eIndex]->m_bCheck = bShow;
  ((void (__stdcall *)(_DWORD))this->m_spCheckBox[eIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(bEnable);
  if ( !eIndex )
  {
    v5 = v4->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    if ( bEnable )
    {
      ((void (__stdcall *)(_DWORD))v5[60].__vecDelDtor)(bEnable);
      ((void (__stdcall *)(_DWORD))v4->m_spEdit[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(bShow);
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v5[121].__vecDelDtor)(1);
    }
  }
}

//----- (006DB820) --------------------------------------------------------
void *__thiscall mhSettingWin::_scalar_deleting_destructor_(mhSettingWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  mhSettingWin::_mhSettingWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006DB850) --------------------------------------------------------
NiTList<PROTO_CHARGEDBUFF_INFO *> *__cdecl ChargedItemList::GetList()
{
  return (NiTList<PROTO_CHARGEDBUFF_INFO *> *)&ChargedItemList::ms_kUsingList;
}
// A83A9C: using guessed type int (__thiscall **ChargedItemList__ms_kUsingList)(void *p, char);

//----- (006DB860) --------------------------------------------------------
void __cdecl ChargedItemList::Clear()
{
  int v0; // eax@2
  int v1; // ecx@2
  void *v2; // esi@5

  while ( dword_A83AA8 )
  {
    v0 = dword_A83AA0;
    v1 = *(_DWORD *)dword_A83AA0;
    dword_A83AA0 = v1;
    if ( v1 )
      *(_DWORD *)(v1 + 4) = 0;
    else
      dword_A83AA4 = 0;
    v2 = *(void **)(v0 + 8);
    ChargedItemList::ms_kUsingList[2](&ChargedItemList::ms_kUsingList, v0);
    --dword_A83AA8;
    operator delete(v2);
  }
}
// A83A9C: using guessed type int (__thiscall **ChargedItemList__ms_kUsingList)(void *p, char);
// A83AA0: using guessed type int dword_A83AA0;
// A83AA4: using guessed type int dword_A83AA4;
// A83AA8: using guessed type int dword_A83AA8;

//----- (006DB8C0) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitedChargedBuffItemCount()
{
  int v0; // ecx@1
  unsigned int result; // eax@1
  int v2; // edx@2

  v0 = dword_A83AA0;
  result = 0;
  while ( v0 )
  {
    v2 = *(_DWORD *)(v0 + 8);
    v0 = *(_DWORD *)v0;
    if ( *(_BYTE *)(v2 + 10) != -1 )
      ++result;
  }
  return result;
}
// A83AA0: using guessed type int dword_A83AA0;

//----- (006DB8F0) --------------------------------------------------------
bool __cdecl ChargedItemList::IsActiveChargedTimeLimitItem(Item *pkItem)
{
  bool result; // al@2

  if ( pkItem
    && pkItem->m_pkInfo->ItemGradeType == 4
    && ((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[11].__vecDelDtor)(pkItem)
    && *(_BYTE *)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[11].__vecDelDtor)(pkItem) )
    result = *(_BYTE *)((int (__thiscall *)(_DWORD))pkItem->baseclass_0.vfptr[11].__vecDelDtor)(pkItem) != -1;
  else
    result = 0;
  return result;
}

//----- (006DB940) --------------------------------------------------------
void __cdecl ChargedItemList::AddUsingItem(PROTO_CHARGEDBUFF_INFO *pkInfo)
{
  void *v1; // eax@1
  void *v2; // esi@1
  int v3; // eax@1

  v1 = operator new(0xEu);
  v2 = v1;
  *(_DWORD *)v1 = pkInfo->ChargedBuffKey;
  *((_DWORD *)v1 + 1) = *(_DWORD *)&pkInfo->ChargedBuffID;
  *((_DWORD *)v1 + 2) = *(int *)((char *)&pkInfo->UseTime._bf0 + 2);
  *((_WORD *)v1 + 6) = HIWORD(pkInfo->EndTime._bf0);
  v3 = ((int (__thiscall *)(_DWORD))ChargedItemList::ms_kUsingList[1])(&ChargedItemList::ms_kUsingList);
  *(_DWORD *)(v3 + 8) = v2;
  *(_DWORD *)v3 = 0;
  *(_DWORD *)(v3 + 4) = dword_A83AA4;
  if ( dword_A83AA4 )
  {
    *(_DWORD *)dword_A83AA4 = v3;
    ++dword_A83AA8;
    dword_A83AA4 = v3;
  }
  else
  {
    ++dword_A83AA8;
    dword_A83AA0 = v3;
    dword_A83AA4 = v3;
  }
}
// A83A9C: using guessed type int (__thiscall **ChargedItemList__ms_kUsingList)(void *p, char);
// A83AA0: using guessed type int dword_A83AA0;
// A83AA4: using guessed type int dword_A83AA4;
// A83AA8: using guessed type int dword_A83AA8;

//----- (006DB9C0) --------------------------------------------------------
void __cdecl ChargedItemList::DelUsingItem(unsigned int ChargedBuffKey)
{
  int v1; // ecx@1
  int v2; // edi@1
  int v3; // edx@2
  int v4; // esi@2
  int v5; // eax@2
  int v6; // ecx@4
  void *v7; // esi@5
  int v8; // ecx@8
  int v9; // ecx@11
  int v10; // edx@11

  v1 = dword_A83AA0;
  v2 = dword_A83AA0;
  while ( v2 )
  {
    v3 = *(_DWORD *)(v2 + 8);
    v4 = v2 + 8;
    v5 = v2;
    v2 = *(_DWORD *)v2;
    if ( *(_DWORD *)v3 == ChargedBuffKey )
    {
      if ( v5 == v1 )
      {
        v5 = v1;
        v6 = *(_DWORD *)v1;
        dword_A83AA0 = v6;
        if ( v6 )
        {
          *(_DWORD *)(v6 + 4) = 0;
          v7 = *(void **)(v5 + 8);
        }
        else
        {
          dword_A83AA4 = 0;
          v7 = *(void **)(v5 + 8);
        }
      }
      else
      {
        if ( v5 == dword_A83AA4 )
        {
          v5 = dword_A83AA4;
          v8 = *(_DWORD *)(dword_A83AA4 + 4);
          dword_A83AA4 = v8;
          if ( v8 )
          {
            *(_DWORD *)v8 = 0;
            v7 = *(void **)(v5 + 8);
          }
          else
          {
            dword_A83AA0 = 0;
            v7 = *(void **)(v5 + 8);
          }
        }
        else
        {
          v9 = *(_DWORD *)(v5 + 4);
          v10 = *(_DWORD *)v5;
          if ( v9 )
            *(_DWORD *)v9 = v10;
          if ( v10 )
            *(_DWORD *)(v10 + 4) = v9;
          v7 = *(void **)v4;
        }
      }
      ChargedItemList::ms_kUsingList[2](&ChargedItemList::ms_kUsingList, v5);
      --dword_A83AA8;
      operator delete(v7);
      v1 = dword_A83AA0;
    }
  }
}
// A83A9C: using guessed type int (__thiscall **ChargedItemList__ms_kUsingList)(void *p, char);
// A83AA0: using guessed type int dword_A83AA0;
// A83AA4: using guessed type int dword_A83AA4;
// A83AA8: using guessed type int dword_A83AA8;

//----- (006DBAB0) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitMiniHouseInvenCount()
{
  unsigned int v0; // ebx@1
  char *v1; // edi@1
  int v2; // esi@2

  v0 = 0;
  v1 = (char *)g_kInventory.m_aspMiniHouseInv;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1
      && *(_DWORD *)(*(_DWORD *)(v2 + 112) + 118) == 4
      && (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 44))(*(_DWORD *)v1)
      && *(_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 44))(v2)
      && *(_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 44))(v2) != -1 )
      ++v0;
    v1 += 4;
  }
  while ( (signed int)v1 < (signed int)g_kInventory.m_aspMiniHouseEquip );
  return v0;
}

//----- (006DBB10) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitMiniHouseEquipCount()
{
  unsigned int v0; // ebx@1
  char *v1; // edi@1
  int v2; // esi@2

  v0 = 0;
  v1 = (char *)g_kInventory.m_aspMiniHouseEquip;
  do
  {
    v2 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1
      && *(_DWORD *)(*(_DWORD *)(v2 + 112) + 118) == 4
      && (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 44))(*(_DWORD *)v1)
      && *(_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 44))(v2)
      && *(_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 44))(v2) != -1 )
      ++v0;
    v1 += 4;
  }
  while ( (signed int)v1 < (signed int)g_kInventory.m_aspMiniHouseFurnitureItemInv );
  return v0;
}

//----- (006DBB70) --------------------------------------------------------
Item *__cdecl ChargedItemList::GetTimeLimitMiniHouseInven(unsigned int uiIndex)
{
  unsigned int v1; // ebx@1
  signed int v2; // edi@1
  Item *v3; // esi@2

  v1 = uiIndex;
  v2 = 0;
  while ( 1 )
  {
    v3 = g_kInventory.m_aspMiniHouseInv[v2].m_pObject;
    if ( !v3
      || v3->m_pkInfo->ItemGradeType != 4
      || !((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(g_kInventory.m_aspMiniHouseInv[v2].m_pObject)
      || !*(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3)
      || *(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3) == -1 )
      goto LABEL_9;
    if ( !v1 )
      return g_kInventory.m_aspMiniHouseInv[v2].m_pObject;
    --v1;
LABEL_9:
    ++v2;
    if ( v2 >= 192 )
      return 0;
  }
}

//----- (006DBBE0) --------------------------------------------------------
Item *__cdecl ChargedItemList::GetTimeLimitMiniHouseEquip(unsigned int uiIndex)
{
  unsigned int v1; // ebx@1
  signed int v2; // edi@1
  Item *v3; // esi@2

  v1 = uiIndex;
  v2 = 0;
  while ( 1 )
  {
    v3 = g_kInventory.m_aspMiniHouseEquip[v2].m_pObject;
    if ( !v3
      || v3->m_pkInfo->ItemGradeType != 4
      || !((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(g_kInventory.m_aspMiniHouseEquip[v2].m_pObject)
      || !*(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3)
      || *(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3) == -1 )
      goto LABEL_9;
    if ( !v1 )
      return g_kInventory.m_aspMiniHouseEquip[v2].m_pObject;
    --v1;
LABEL_9:
    ++v2;
    if ( v2 >= 11 )
      return 0;
  }
}

//----- (006DBC50) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitCharInvenCount()
{
  signed int v0; // edi@1
  unsigned int v1; // ebx@1
  bool v2; // cf@1
  Item *v3; // esi@3

  v0 = 0;
  v1 = 0;
  v2 = 1;
  do
  {
    if ( v2 )
    {
      v3 = g_kInventory.m_aspInv[v0].m_pObject;
      if ( v3 )
      {
        if ( v3->m_pkInfo->ItemGradeType == 4
          && ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(g_kInventory.m_aspInv[v0].m_pObject)
          && *(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3)
          && *(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3) != -1 )
          ++v1;
      }
    }
    ++v0;
    v2 = (unsigned int)v0 < 0xC0;
  }
  while ( v0 < 192 );
  return v1;
}

//----- (006DBCB0) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitCharEquipCount()
{
  signed int v0; // edi@1
  unsigned int v1; // ebx@1
  bool v2; // cf@1
  Item *v3; // esi@3

  v0 = 0;
  v1 = 0;
  v2 = 1;
  do
  {
    if ( v2 )
    {
      v3 = g_kInventory.m_aspEquip[v0].m_pObject;
      if ( v3 )
      {
        if ( v3->m_pkInfo->ItemGradeType == 4
          && ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(g_kInventory.m_aspEquip[v0].m_pObject)
          && *(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3)
          && *(_BYTE *)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[11].__vecDelDtor)(v3) != -1 )
          ++v1;
      }
    }
    ++v0;
    v2 = (unsigned int)v0 < 0x1E;
  }
  while ( v0 < 30 );
  return v1;
}

//----- (006DBD10) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitCharItemCount()
{
  unsigned int v0; // esi@1

  v0 = ChargedItemList::GetTimeLimitCharInvenCount();
  return v0 + ChargedItemList::GetTimeLimitCharEquipCount();
}

//----- (006DBD30) --------------------------------------------------------
Item *__cdecl ChargedItemList::GetTimeLimitCharInven(unsigned int uiIndex)
{
  unsigned int v1; // ebx@1
  signed int v2; // edi@1
  bool v3; // cf@1
  Item *v4; // esi@3

  v1 = uiIndex;
  v2 = 0;
  v3 = 1;
  while ( 1 )
  {
    if ( !v3
      || (v4 = g_kInventory.m_aspInv[v2].m_pObject) == 0
      || v4->m_pkInfo->ItemGradeType != 4
      || !((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[11].__vecDelDtor)(g_kInventory.m_aspInv[v2].m_pObject)
      || !*(_BYTE *)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[11].__vecDelDtor)(v4)
      || *(_BYTE *)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[11].__vecDelDtor)(v4) == -1 )
      goto LABEL_10;
    if ( !v1 )
      return g_kInventory.m_aspInv[v2].m_pObject;
    --v1;
LABEL_10:
    ++v2;
    v3 = (unsigned int)v2 < 0xC0;
    if ( v2 >= 192 )
      return 0;
  }
}

//----- (006DBDB0) --------------------------------------------------------
Item *__cdecl ChargedItemList::GetTimeLimitCharEquip(unsigned int uiIndex)
{
  unsigned int v1; // ebx@1
  signed int v2; // edi@1
  bool v3; // cf@1
  Item *v4; // esi@3

  v1 = uiIndex;
  v2 = 0;
  v3 = 1;
  while ( 1 )
  {
    if ( !v3
      || (v4 = g_kInventory.m_aspEquip[v2].m_pObject) == 0
      || v4->m_pkInfo->ItemGradeType != 4
      || !((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[11].__vecDelDtor)(g_kInventory.m_aspEquip[v2].m_pObject)
      || !*(_BYTE *)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[11].__vecDelDtor)(v4)
      || *(_BYTE *)((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[11].__vecDelDtor)(v4) == -1 )
      goto LABEL_10;
    if ( !v1 )
      return g_kInventory.m_aspEquip[v2].m_pObject;
    --v1;
LABEL_10:
    ++v2;
    v3 = (unsigned int)v2 < 0x1E;
    if ( v2 >= 30 )
      return 0;
  }
}

//----- (006DBE20) --------------------------------------------------------
Item *__cdecl ChargedItemList::GetTimeLimitCharItem(unsigned int uiIndex)
{
  unsigned int v1; // eax@1
  Item *result; // eax@2

  v1 = ChargedItemList::GetTimeLimitCharEquipCount();
  if ( uiIndex >= v1 )
    result = ChargedItemList::GetTimeLimitCharInven(uiIndex - v1);
  else
    result = ChargedItemList::GetTimeLimitCharEquip(uiIndex);
  return result;
}

//----- (006DBE50) --------------------------------------------------------
bool __cdecl ChargedItemList::IsEffecting(EffectEnumerate eEffect)
{
  int v1; // edi@1
  int v2; // eax@2
  __int16 v3; // bx@2
  unsigned int v4; // esi@2
  void *v5; // eax@3
  bool result; // al@9

  v1 = dword_A83AA0;
  if ( dword_A83AA0 )
  {
    while ( 1 )
    {
      v2 = *(_DWORD *)(v1 + 8);
      v1 = *(_DWORD *)v1;
      v3 = *(_WORD *)(v2 + 4);
      v4 = 0;
      if ( ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
      {
        while ( 1 )
        {
          v5 = CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                 v4);
          if ( v5 )
          {
            if ( *(_WORD *)v5 == v3 )
              break;
          }
          ++v4;
          if ( v4 >= ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
            goto LABEL_8;
        }
        if ( *((_DWORD *)v5 + 9) == eEffect )
          break;
      }
LABEL_8:
      if ( !v1 )
        goto LABEL_9;
    }
    result = 1;
  }
  else
  {
LABEL_9:
    result = 0;
  }
  return result;
}
// A83AA0: using guessed type int dword_A83AA0;
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (006DBEC0) --------------------------------------------------------
bool __cdecl ChargedItemList::GetTotalEffectingValue(EffectEnumerate eEffect, unsigned int *rdwTotalEffectValue)
{
  int v2; // edi@1
  bool result; // al@1
  __int16 v4; // bx@2
  unsigned int v5; // esi@2
  void *v6; // eax@3
  bool bEffecting; // [sp+7h] [bp-1h]@1

  *rdwTotalEffectValue = 0;
  v2 = dword_A83AA0;
  result = 0;
  bEffecting = 0;
  if ( dword_A83AA0 )
  {
    do
    {
      v4 = *(_WORD *)(*(_DWORD *)(v2 + 8) + 4);
      v2 = *(_DWORD *)v2;
      v5 = 0;
      if ( ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
      {
        while ( 1 )
        {
          v6 = CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                 v5);
          if ( v6 )
          {
            if ( *(_WORD *)v6 == v4 )
              break;
          }
          ++v5;
          if ( v5 >= ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
            goto LABEL_9;
        }
        if ( *((_DWORD *)v6 + 9) == eEffect )
        {
          *rdwTotalEffectValue += *((_WORD *)v6 + 20);
          bEffecting = 1;
        }
      }
LABEL_9:
      ;
    }
    while ( v2 );
    result = bEffecting;
  }
  return result;
}
// A83AA0: using guessed type int dword_A83AA0;
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (006DBF50) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitMiniHouseItemCount()
{
  unsigned int v0; // esi@1

  v0 = ChargedItemList::GetTimeLimitMiniHouseInvenCount();
  return v0 + ChargedItemList::GetTimeLimitMiniHouseEquipCount();
}

//----- (006DBF70) --------------------------------------------------------
Item *__cdecl ChargedItemList::GetTimeLimitMiniHouseItem(unsigned int uiIndex)
{
  unsigned int v1; // eax@1
  Item *result; // eax@2

  v1 = ChargedItemList::GetTimeLimitMiniHouseEquipCount();
  if ( uiIndex >= v1 )
    result = ChargedItemList::GetTimeLimitMiniHouseInven(uiIndex - v1);
  else
    result = ChargedItemList::GetTimeLimitMiniHouseEquip(uiIndex);
  return result;
}

//----- (006DBFA0) --------------------------------------------------------
unsigned int __cdecl ChargedItemList::GetTimeLimitItemCount()
{
  unsigned int v0; // edi@1
  unsigned int v1; // edi@1
  unsigned int v2; // edi@1

  v0 = ChargedItemList::GetTimeLimitCharInvenCount();
  v1 = ChargedItemList::GetTimeLimitCharEquipCount() + v0;
  v2 = ChargedItemList::GetTimeLimitMiniHouseInvenCount() + v1;
  return v2 + ChargedItemList::GetTimeLimitMiniHouseEquipCount();
}

//----- (006DBFD0) --------------------------------------------------------
const char *__cdecl ChargedItemList::GetEffectID(EffectEnumerate eEffect)
{
  int v1; // edi@1
  int v2; // eax@2
  __int16 v3; // bx@2
  unsigned int v4; // esi@2
  void *v5; // eax@3
  const char *result; // eax@9

  v1 = dword_A83AA0;
  if ( dword_A83AA0 )
  {
    while ( 1 )
    {
      v2 = *(_DWORD *)(v1 + 8);
      v1 = *(_DWORD *)v1;
      v3 = *(_WORD *)(v2 + 4);
      v4 = 0;
      if ( ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
      {
        while ( 1 )
        {
          v5 = CDataReader::GetRecord(
                 (CDataReader *)(ITableBase<ChargedItemEffect_ChargedEffectTable>::ms_pkTable + 4),
                 v4);
          if ( v5 )
          {
            if ( *(_WORD *)v5 == v3 )
              break;
          }
          ++v4;
          if ( v4 >= ITableBase<ChargedItemEffect_ChargedEffectTable>::GetTotal() )
            goto LABEL_8;
        }
        if ( *((_DWORD *)v5 + 9) == eEffect )
          break;
      }
LABEL_8:
      if ( !v1 )
        goto LABEL_9;
    }
    result = (char *)v5 + 2;
  }
  else
  {
LABEL_9:
    result = 0;
  }
  return result;
}
// A83AA0: using guessed type int dword_A83AA0;
// A943A0: using guessed type int ITableBase_ChargedItemEffect_ChargedEffectTable___ms_pkTable;

//----- (006DC040) --------------------------------------------------------
void __thiscall NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>(NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *> *this)
{
  this->vfptr = (NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *>Vtbl *)&NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_vftable_;
}
// 9CC8E0: using guessed type int (__thiscall *NiTListBase_DFALL_PROTO_CHARGEDBUFF_INFO ___PROTO_CHARGEDBUFF_INFO _____vftable_)(void *p, char);

//----- (006DC050) --------------------------------------------------------
void *__thiscall NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_scalar_deleting_destructor_(NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *>Vtbl *)&NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9CC8E0: using guessed type int (__thiscall *NiTListBase_DFALL_PROTO_CHARGEDBUFF_INFO ___PROTO_CHARGEDBUFF_INFO _____vftable_)(void *p, char);

//----- (006DC080) --------------------------------------------------------
void *__thiscall NiTList<PROTO_CHARGEDBUFF_INFO__>::_scalar_deleting_destructor_(NiTPointerListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *> *this, unsigned int a2)
{
  void *v2; // edi@1
  NiTListItem<PROTO_CHARGEDBUFF_INFO *> *v3; // esi@1
  NiTListItem<PROTO_CHARGEDBUFF_INFO *> *v4; // ST00_4@2

  v2 = this;
  this->baseclass_0.vfptr = (NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO *>,PROTO_CHARGEDBUFF_INFO *>Vtbl *)&NiTPointerListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_vftable_;
  v3 = this->baseclass_0.m_pkHead;
  while ( v3 )
  {
    v4 = v3;
    v3 = v3->m_pkNext;
    (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v4);
  }
  *((_DWORD *)v2 + 3) = 0;
  *((_DWORD *)v2 + 1) = 0;
  *((_DWORD *)v2 + 2) = 0;
  *(_DWORD *)v2 = &NiTListBase<DFALL<PROTO_CHARGEDBUFF_INFO__>_PROTO_CHARGEDBUFF_INFO__>::_vftable_;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CC8E0: using guessed type int (__thiscall *NiTListBase_DFALL_PROTO_CHARGEDBUFF_INFO ___PROTO_CHARGEDBUFF_INFO _____vftable_)(void *p, char);
// 9CC8F0: using guessed type int (__thiscall *NiTPointerListBase_DFALL_PROTO_CHARGEDBUFF_INFO ___PROTO_CHARGEDBUFF_INFO _____vftable_)(void *p, char);

//----- (006DC110) --------------------------------------------------------
void __thiscall Net::Net(Net *this)
{
  Net *v1; // esi@1

  v1 = this;
  PgNet::PgNet(&this->baseclass_0);
  v1->m_fLastHeartBeatTime = -1.0;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&Net::_vftable_;
  v1->m_bEnableHeartBeat = 0;
}
// 9CC930: using guessed type int (__thiscall *Net___vftable_)(void *p, char);

//----- (006DC140) --------------------------------------------------------
void __thiscall Net::_Net(Net *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&Net::_vftable_;
  PgNet::_PgNet(&this->baseclass_0);
}
// 9CC930: using guessed type int (__thiscall *Net___vftable_)(void *p, char);

//----- (006DC150) --------------------------------------------------------
bool __thiscall Net::Connect(Net *this)
{
  Net *v1; // esi@1
  bool v2; // bl@1

  v1 = this;
  v2 = PgNet::Connect(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr[8].__vecDelDtor((NiRefObject *)v1, 0);
  return v2;
}

//----- (006DC170) --------------------------------------------------------
bool __thiscall Net::Connect(Net *this, int a1, int a2, int a3, int a4, int port)
{
  return PgNet::Connect(&this->baseclass_0, a1, a2, a3, a4, port);
}

//----- (006DC180) --------------------------------------------------------
void __thiscall Net::Update(Net *this, float fTime)
{
  PgNet::Update(&this->baseclass_0, fTime);
}

//----- (006DC1A0) --------------------------------------------------------
void __thiscall Net::EnableHeartBeat(Net *this, bool b)
{
  this->m_bEnableHeartBeat = b;
}

//----- (006DC1B0) --------------------------------------------------------
void __thiscall Net::NcMiscGameTimeReq(Net *this)
{
  Net *netcmd; // [sp+0h] [bp-4h]@1

  netcmd = this;
  LOWORD(netcmd) = 2061;
  PgNet::SendNetMsg(&this->baseclass_0, &netcmd, 2);
}

//----- (006DC1D0) --------------------------------------------------------
void __thiscall Net::ChangeSeed(Net *this, unsigned __int16 wSeed)
{
  Net *v2; // esi@1
  NiRefObjectVtbl *v3; // eax@1
  PgSocket *v4; // ecx@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.vfptr;
  this->m_fLastHeartBeatTime = Timer::ms_fCurTime;
  ((void (__stdcall *)(_DWORD))v3[8].__vecDelDtor)(1);
  v4 = v2->baseclass_0.m_pkSocket;
  if ( v4 )
    PgSocket::RepositionSendEncryptTableInx(v4, wSeed);
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006DC200) --------------------------------------------------------
bool __thiscall Net::IsPingTimeOver(Net *this)
{
  return Timer::ms_fCurTime - this->m_fLastHeartBeatTime >= 10.0;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006DC220) --------------------------------------------------------
void __thiscall Net::NcMiscHeartbeatAck(Net *this)
{
  Net *v1; // esi@1
  PgFrameWork *v2; // eax@1
  NETCOMMAND netcmd; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  GameFrameWork::ClientSecurity((GameFrameWork *)v2);
  if ( v1->m_bEnableHeartBeat )
  {
    netcmd.protocol = 2053;
    PgNet::SendNetMsg(&v1->baseclass_0, &netcmd, 2);
    v1->m_fLastHeartBeatTime = Timer::ms_fCurTime;
    PgNet::Flush(&v1->baseclass_0);
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006DC280) --------------------------------------------------------
bool __thiscall Net::On_NC_MISC_GAMETIME_ACK(Net *this, int iRevBytes, void *pvData)
{
  Server::SetGameTime(&g_kServer, (PROTO_NC_MISC_GAMETIME_ACK *)pvData, Timer::ms_fCurTime);
  return 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006DC2B0) --------------------------------------------------------
bool __thiscall Net::On_NC_MISC_HEARTBEAT_REQ(Net *this, int iRevBytes, void *pvData)
{
  Net *v3; // esi@1
  PgFrameWork *v4; // eax@2
  __int16 pdata; // [sp+4h] [bp-4h]@3

  v3 = this;
  if ( this->m_bEnableHeartBeat )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    GameFrameWork::ClientSecurity((GameFrameWork *)v4);
    if ( v3->m_bEnableHeartBeat )
    {
      pdata = 2053;
      PgNet::SendNetMsg(&v3->baseclass_0, &pdata, 2);
      v3->m_fLastHeartBeatTime = Timer::ms_fCurTime;
      PgNet::Flush(&v3->baseclass_0);
    }
    PgNet::Flush(&v3->baseclass_0);
  }
  return 1;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006DC320) --------------------------------------------------------
bool __thiscall Net::On_NC_MISC_APEX_SERVER_DATA_CMD(Net *this, int iRevBytes, void *pvData)
{
  return 1;
}

//----- (006DC330) --------------------------------------------------------
void __thiscall NetMgr::SendHeartBeat2WorldMgrServer(NetMgr *this)
{
  NetMgr *v1; // esi@1
  Net *v2; // ecx@1

  v1 = this;
  v2 = this->m_spWorldMgr.m_pObject;
  if ( v2 )
  {
    if ( (unsigned __int8)((int (*)(void))v2->baseclass_0.baseclass_0.vfptr[10].__vecDelDtor)() )
      Net::NcMiscHeartbeatAck(v1->m_spWorldMgr.m_pObject);
  }
}

//----- (006DC350) --------------------------------------------------------
void __thiscall NetMgr::SendNetMsgWorldMgr(NetMgr *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength)
{
  NetMgr *v5; // esi@1
  PgNet *v6; // ecx@1

  v5 = this;
  v6 = (PgNet *)this->m_spWorldMgr.m_pObject;
  if ( v6 )
  {
    command = (department << 10) | command & 0x3FF;
    PgNet::AddNetMsg(v6, &command, 2);
    PgNet::SendNetMsg(&v5->m_spWorldMgr.m_pObject->baseclass_0, pProto, nDataLength);
  }
}

//----- (006DC3A0) --------------------------------------------------------
bool __thiscall Net::ProcessNetMsg(Net *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  bool result; // al@1

  result = 0;
  if ( iDepart == 2 )
  {
    switch ( iCommand )
    {
      case 4:
        result = Net::On_NC_MISC_HEARTBEAT_REQ(this, iRevBytes, pvData);
        break;
      case 14:
        Server::SetGameTime(&g_kServer, (PROTO_NC_MISC_GAMETIME_ACK *)pvData, Timer::ms_fCurTime);
        result = 1;
        break;
      case 25:
        result = 1;
        break;
    }
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006DC400) --------------------------------------------------------
void __thiscall NetMgr::_NetMgr(NetMgr *this)
{
  NetMgr *v1; // edi@1
  Net *v2; // esi@1
  Net *v3; // esi@5

  v1 = this;
  this->vfptr = (NetMgrVtbl *)&NetMgr::_vftable_;
  v2 = this->m_spWorldMgr.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v3 = v1->m_spLogin.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
    v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_spZone,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
}
// 9CC960: using guessed type int (__thiscall *NetMgr___vftable_)(void *p, char);

//----- (006DC4B0) --------------------------------------------------------
bool __thiscall NetMgr::Init(NetMgr *this)
{
  NetMgr *v1; // ebx@1
  void *v2; // eax@1
  void *v3; // esi@1
  void *v4; // edi@1
  Net *v5; // esi@3
  void *v6; // eax@10
  void *v7; // esi@10
  void *v8; // edi@11
  Net *v9; // esi@13
  int v10; // ebx@20
  void *v11; // eax@21
  void *v12; // esi@21
  int v13; // edi@24
  int v14; // edi@31
  int v15; // esi@31
  char *v16; // eax@31
  signed int i; // [sp+4h] [bp-10h]@20

  v1 = this;
  v2 = operator new(0x1006Cu);
  v3 = v2;
  v4 = 0;
  if ( v2 )
  {
    PgNet::PgNet((PgNet *)v2);
    *((float *)v3 + 16401) = -1.0;
    *(_DWORD *)v3 = &Net::_vftable_;
    *((_BYTE *)v3 + 65608) = 0;
    v4 = v3;
  }
  v5 = v1->m_spLogin.m_pObject;
  if ( v5 != v4 )
  {
    if ( v5 && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spLogin.m_pObject = (Net *)v4;
    if ( v4 )
      InterlockedIncrement((volatile LONG *)v4 + 1);
  }
  ((void (__stdcall *)(_DWORD))v1->m_spLogin.m_pObject->baseclass_0.baseclass_0.vfptr[9].__vecDelDtor)("LogIn");
  v6 = operator new(0x1006Cu);
  v7 = v6;
  if ( v6 )
  {
    PgNet::PgNet((PgNet *)v6);
    *((float *)v7 + 16401) = -1.0;
    *(_DWORD *)v7 = &Net::_vftable_;
    *((_BYTE *)v7 + 65608) = 0;
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  v9 = v1->m_spWorldMgr.m_pObject;
  if ( v9 != v8 )
  {
    if ( v9 && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.m_uiRefCount) && v9 )
      v9->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
    v1->m_spWorldMgr.m_pObject = (Net *)v8;
    if ( v8 )
      InterlockedIncrement((volatile LONG *)v8 + 1);
  }
  ((void (__stdcall *)(_DWORD))v1->m_spWorldMgr.m_pObject->baseclass_0.baseclass_0.vfptr[9].__vecDelDtor)("WorldMgr");
  i = 0;
  v10 = (int)v1->m_spZone;
  do
  {
    v11 = operator new(0x1006Cu);
    v12 = v11;
    if ( v11 )
    {
      PgNet::PgNet((PgNet *)v11);
      *((float *)v12 + 16401) = -1.0;
      *(_DWORD *)v12 = &Net::_vftable_;
      *((_BYTE *)v12 + 65608) = 0;
    }
    else
    {
      v12 = 0;
    }
    v13 = *(_DWORD *)v10;
    if ( *(void **)v10 != v12 )
    {
      if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
      *(_DWORD *)v10 = v12;
      if ( v12 )
        InterlockedIncrement((volatile LONG *)v12 + 1);
    }
    v14 = *(_DWORD *)v10;
    v15 = **(_DWORD **)v10;
    v16 = fs("Zone%d");
    (*(void (__thiscall **)(int, char *))(v15 + 36))(v14, v16);
    v10 += 4;
    ++i;
  }
  while ( i < 5 );
  return 1;
}
// 9CC930: using guessed type int (__thiscall *Net___vftable_)(void *p, char);

//----- (006DC6D0) --------------------------------------------------------
void __thiscall NetMgr::Terminate(NetMgr *this)
{
  NetMgr *v1; // edi@1
  Net *v2; // esi@1
  Net *v3; // esi@6
  int v4; // edi@11
  signed int v5; // ebx@11
  int v6; // esi@12

  v1 = this;
  v2 = this->m_spLogin.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spLogin.m_pObject = 0;
  }
  v3 = v1->m_spWorldMgr.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_spWorldMgr.m_pObject = 0;
  }
  v4 = (int)v1->m_spZone;
  v5 = 5;
  do
  {
    v6 = *(_DWORD *)v4;
    if ( *(_DWORD *)v4 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) )
      {
        if ( v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
      }
      *(_DWORD *)v4 = 0;
    }
    v4 += 4;
    --v5;
  }
  while ( v5 );
}

//----- (006DC770) --------------------------------------------------------
void __thiscall NetMgr::Update(NetMgr *this, float fCurTime)
{
  NetMgr *v2; // esi@1
  Net *v3; // ecx@1
  Net *v4; // ecx@3
  Net *v5; // ecx@5

  v2 = this;
  v3 = this->m_spLogin.m_pObject;
  if ( v3 )
    ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(LODWORD(fCurTime));
  v4 = v2->m_spWorldMgr.m_pObject;
  if ( v4 )
    ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(LODWORD(fCurTime));
  v5 = v2->m_spZone[v2->m_iNowConnectedZone].m_pObject;
  if ( v5 )
    ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.vfptr[5].__vecDelDtor)(LODWORD(fCurTime));
}

//----- (006DC7C0) --------------------------------------------------------
void __thiscall NetMgr::CloseAll(NetMgr *this)
{
  NetMgr *v1; // esi@1
  PgNet *v2; // ecx@1
  PgNet *v3; // ecx@3
  PgNet *v4; // ecx@5

  v1 = this;
  v2 = (PgNet *)this->m_spLogin.m_pObject;
  if ( v2 )
    PgNet::Close(v2);
  v3 = (PgNet *)v1->m_spWorldMgr.m_pObject;
  if ( v3 )
    PgNet::Close(v3);
  v4 = (PgNet *)v1->m_spZone[v1->m_iNowConnectedZone].m_pObject;
  if ( v4 )
    PgNet::Close(v4);
}

//----- (006DC7F0) --------------------------------------------------------
void __thiscall NetMgr::SendUserLogOutMsg2WorldMgrServerForCharSelect(NetMgr *this)
{
  NetMgr *v1; // esi@1
  PgNet *v2; // ecx@1
  PgNet *v3; // ecx@3
  DWORD v4; // ebx@5
  PgNet *v5; // ecx@7
  PgNet *v6; // esi@9
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_USER_NORMALLOGOUT_CMD kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spWorldMgr.m_pObject;
  netcmd.protocol = 3096;
  kProto.LogoutType = 1;
  if ( v2 )
  {
    PgNet::AddNetMsg(v2, &netcmd, 2);
    PgNet::SendNetMsg(&v1->m_spWorldMgr.m_pObject->baseclass_0, &kProto, 1);
    PgNet::Flush(&v1->m_spWorldMgr.m_pObject->baseclass_0);
  }
  v3 = (PgNet *)v1->m_spZone[v1->m_iNowConnectedZone].m_pObject;
  if ( v3 )
  {
    PgNet::AddNetMsg(v3, &netcmd, 2);
    PgNet::SendNetMsg(&v1->m_spZone[v1->m_iNowConnectedZone].m_pObject->baseclass_0, &kProto, 1);
    PgNet::Flush(&v1->m_spZone[v1->m_iNowConnectedZone].m_pObject->baseclass_0);
  }
  Sleep(1u);
  v4 = timeGetTime();
  while ( timeGetTime() - v4 < 0x3E8 )
    ;
  v5 = (PgNet *)v1->m_spLogin.m_pObject;
  if ( v5 )
    PgNet::Close(v5);
  v6 = (PgNet *)v1->m_spZone[v1->m_iNowConnectedZone].m_pObject;
  if ( v6 )
    PgNet::Close(v6);
}

//----- (006DC8B0) --------------------------------------------------------
void __thiscall NetMgr::SendUserLogOutMsg2AllServer(NetMgr *this)
{
  NetMgr *v1; // esi@1
  PgNet *v2; // ecx@1
  PgNet *v3; // ecx@3
  PgNet *v4; // ecx@5
  DWORD v5; // ebx@7
  PgNet *v6; // ecx@9
  PgNet *v7; // ecx@11
  PgNet *v8; // esi@13
  NETCOMMAND netcmd; // [sp+4h] [bp-8h]@1
  PROTO_NC_USER_NORMALLOGOUT_CMD kProto; // [sp+Bh] [bp-1h]@1

  v1 = this;
  v2 = (PgNet *)this->m_spLogin.m_pObject;
  netcmd.protocol = 3096;
  kProto.LogoutType = 0;
  if ( v2 )
  {
    PgNet::AddNetMsg(v2, &netcmd, 2);
    PgNet::SendNetMsg(&v1->m_spLogin.m_pObject->baseclass_0, &kProto, 1);
    PgNet::Flush(&v1->m_spLogin.m_pObject->baseclass_0);
  }
  v3 = (PgNet *)v1->m_spWorldMgr.m_pObject;
  if ( v3 )
  {
    PgNet::AddNetMsg(v3, &netcmd, 2);
    PgNet::SendNetMsg(&v1->m_spWorldMgr.m_pObject->baseclass_0, &kProto, 1);
    PgNet::Flush(&v1->m_spWorldMgr.m_pObject->baseclass_0);
  }
  v4 = (PgNet *)v1->m_spZone[v1->m_iNowConnectedZone].m_pObject;
  if ( v4 )
  {
    PgNet::AddNetMsg(v4, &netcmd, 2);
    PgNet::SendNetMsg(&v1->m_spZone[v1->m_iNowConnectedZone].m_pObject->baseclass_0, &kProto, 1);
    PgNet::Flush(&v1->m_spZone[v1->m_iNowConnectedZone].m_pObject->baseclass_0);
  }
  Sleep(1u);
  v5 = timeGetTime();
  while ( timeGetTime() - v5 < 0x3E8 )
    ;
  v6 = (PgNet *)v1->m_spLogin.m_pObject;
  if ( v6 )
    PgNet::Close(v6);
  v7 = (PgNet *)v1->m_spWorldMgr.m_pObject;
  if ( v7 )
    PgNet::Close(v7);
  v8 = (PgNet *)v1->m_spZone[v1->m_iNowConnectedZone].m_pObject;
  if ( v8 )
    PgNet::Close(v8);
}

//----- (006DC9A0) --------------------------------------------------------
void __thiscall NetMgr::SendNetMsgZoneMgr(NetMgr *this, unsigned __int16 department, unsigned __int16 command, void *pProto, int nDataLength)
{
  NetMgr *v5; // esi@1
  int v6; // eax@1
  bool v7; // zf@1
  PgNet **v8; // eax@1

  v5 = this;
  v6 = this->m_iNowConnectedZone;
  v7 = this->m_spZone[v6].m_pObject == 0;
  v8 = (PgNet **)&this->m_spZone[v6];
  if ( !v7 )
  {
    command = (department << 10) | command & 0x3FF;
    PgNet::AddNetMsg(*v8, &command, 2);
    PgNet::SendNetMsg(&v5->m_spZone[v5->m_iNowConnectedZone].m_pObject->baseclass_0, pProto, nDataLength);
  }
}

//----- (006DC9F0) --------------------------------------------------------
Net *__thiscall NetMgr::TryAnotherZone(NetMgr *this, char *pcAddress, int iPort)
{
  NetMgr *v3; // esi@1

  v3 = this;
  ++v3->m_iNowConnectedZone;
  if ( this->m_iNowConnectedZone >= 5 )
    this->m_iNowConnectedZone = 0;
  PgNet::SetAddress(&this->m_spZone[this->m_iNowConnectedZone].m_pObject->baseclass_0, pcAddress);
  PgNet::SetPortA(&v3->m_spZone[v3->m_iNowConnectedZone].m_pObject->baseclass_0, iPort);
  return v3->m_spZone[v3->m_iNowConnectedZone].m_pObject;
}

//----- (006DCA40) --------------------------------------------------------
void __thiscall NetMgr::NetMgr(NetMgr *this)
{
  NetMgr *v1; // esi@1

  v1 = this;
  this->vfptr = (NetMgrVtbl *)&NetMgr::_vftable_;
  _eh_vector_constructor_iterator_(
    this->m_spZone,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spLogin.m_pObject = 0;
  v1->m_spWorldMgr.m_pObject = 0;
  v1->m_iNowConnectedZone = 0;
}
// 9CC960: using guessed type int (__thiscall *NetMgr___vftable_)(void *p, char);

//----- (006DCA70) --------------------------------------------------------
void __thiscall PgNet::ChangeSeed(PgNet *this, unsigned __int16 wSeed)
{
  PgSocket *v2; // ecx@1

  v2 = this->m_pkSocket;
  if ( v2 )
    PgSocket::RepositionSendEncryptTableInx(v2, wSeed);
}

//----- (006DCA90) --------------------------------------------------------
void __thiscall Net::SetName(Net *this, char *pcName)
{
  char *v2; // eax@1
  unsigned int v3; // edx@2
  char v4; // cl@3

  v2 = pcName;
  if ( pcName )
  {
    v3 = this->m_acName - pcName;
    do
    {
      v4 = *v2;
      v2[v3] = *v2;
      ++v2;
    }
    while ( v4 );
  }
}

//----- (006DCAB0) --------------------------------------------------------
void *__thiscall Net::_vector_deleting_destructor_(Net *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&Net::_vftable_;
  PgNet::_PgNet(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CC930: using guessed type int (__thiscall *Net___vftable_)(void *p, char);

//----- (006DCAE0) --------------------------------------------------------
void *__thiscall NetMgr::_scalar_deleting_destructor_(NetMgr *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  NetMgr::_NetMgr(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006DCB10) --------------------------------------------------------
ORToken *__thiscall ORTable::ort_GetTableName(ORTable *this)
{
  return (ORToken *)this;
}

//----- (006DCB50) --------------------------------------------------------
char __thiscall OptionReader::or_ExecColumnName(OptionReader *this, ORTokenReader *token)
{
  ORTable *v2; // eax@1
  char result; // al@2

  v2 = this->or_CurrentTable;
  if ( v2 )
  {
    result = ORTable::ort_ReadColumnName(v2, token) && ORTokenReader::ortr_isEOL(token);
  }
  else
  {
    ORErrorMessage::operator_(&this->or_Argument.errmsg, "ColumnName without table");
    result = 0;
  }
  return result;
}

//----- (006DCBA0) --------------------------------------------------------
char __thiscall ORTable::ort_SetTableName(ORTable *this, ORTokenReader *token)
{
  ORTable *v2; // esi@1
  char *v3; // eax@1
  char result; // al@2

  v2 = this;
  v3 = ORTokenReader::ortr_ReadString(token);
  if ( v3 )
  {
    *(_DWORD *)&v2->ort_TableName.ort_Name[16] = 0;
    *(_DWORD *)&v2->ort_TableName.ort_Name[12] = 0;
    *(_DWORD *)&v2->ort_TableName.ort_Name[8] = 0;
    *(_DWORD *)&v2->ort_TableName.ort_Name[4] = 0;
    *(_DWORD *)&v2->ort_TableName.ort_Name[0] = 0;
    strncpy(v2->ort_TableName.ort_Name, v3, 0x14u);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006DCBE0) --------------------------------------------------------
char __thiscall ORTable::ort_ReadColumnHeader(ORTable *this, ORTokenReader *token, TokenArgument *targ)
{
  ORTokenReader *v3; // ebx@1
  ORTable *v4; // esi@1
  char *v5; // eax@1
  ORColumnHeader *v6; // eax@26
  int v7; // eax@27
  ORTokenReader *v8; // ecx@30
  unsigned __int16 *v10; // [sp-8h] [bp-3Ch]@9
  unsigned __int16 v11; // [sp-4h] [bp-38h]@5
  char *v12; // [sp-4h] [bp-38h]@30
  int i; // [sp+10h] [bp-24h]@1
  __int16 hnd; // [sp+18h] [bp-1Ch]@9
  ORToken type; // [sp+1Ch] [bp-18h]@2
  unsigned int v16; // [sp+30h] [bp-4h]@1
  int v17; // [sp+34h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v3 = token;
  v4 = this;
  this->ort_RecordLength = 0;
  i = 0;
  v5 = ORTokenReader::ortr_ReadString(token);
  if ( v5 )
  {
    while ( 1 )
    {
      *(_QWORD *)&type.ort_Name[12] = 0i64;
      *(_QWORD *)&type.ort_Name[4] = 0i64;
      *(_QWORD *)&type.ort_Name[0] = 0i64;
      strncpy(type.ort_Name, v5, 0x14u);
      ORToken::ort_ToLower(&type);
      if ( *(_QWORD *)&type != *(_QWORD *)ORTable::ort_Index
        || *(_QWORD *)&type.ort_Name[8] != qword_B67D18
        || *(_DWORD *)&type.ort_Name[16] != dword_B67D20 )
      {
        if ( *(_QWORD *)&type == *(_QWORD *)ORTable::ort_String
          && *(_QWORD *)&type.ort_Name[8] == qword_B67D2C
          && *(_DWORD *)&type.ort_Name[16] == dword_B67D34 )
        {
          v11 = 2;
          v10 = (unsigned __int16 *)&hnd;
          goto LABEL_26;
        }
        if ( *(_QWORD *)&type == *(_QWORD *)ORTable::ort_Byte
          && *(_QWORD *)&type.ort_Name[8] == qword_B67D40
          && *(_DWORD *)&type.ort_Name[16] == dword_B67D48 )
        {
          v11 = 3;
          v10 = (unsigned __int16 *)&hnd;
          goto LABEL_26;
        }
        if ( *(_QWORD *)&type != *(_QWORD *)ORTable::ort_Word
          || *(_QWORD *)&type.ort_Name[8] != qword_B67D54
          || *(_DWORD *)&type.ort_Name[16] != dword_B67D5C )
        {
          if ( (*(_QWORD *)&type != *(_QWORD *)ORTable::ort_Dwrd
             || *(_QWORD *)&type.ort_Name[8] != qword_B67D68
             || *(_DWORD *)&type.ort_Name[16] != dword_B67D70)
            && (*(_QWORD *)&type != *(_QWORD *)ORTable::ort_Dword
             || *(_QWORD *)&type.ort_Name[8] != qword_B67D7C
             || *(_DWORD *)&type.ort_Name[16] != dword_B67D84) )
          {
            v12 = "Undefined column type";
LABEL_34:
            v8 = token;
            goto LABEL_35;
          }
          v11 = 5;
        }
        else
        {
          v11 = 4;
        }
      }
      else
      {
        v11 = 1;
      }
      v10 = (unsigned __int16 *)&hnd;
LABEL_26:
      v6 = ORColumnHeaderList::orchl_AllocObject(&v4->ort_HeaderList, v10, v11);
      if ( !v6 )
      {
        v12 = "Too many columns or memory leak";
        goto LABEL_34;
      }
      v3 = token;
      v7 = v6->vfptr->ortr_SetLength(v6, token, targ);
      if ( v7 < 0 )
        return 0;
      v4->ort_RecordLength += v7;
      ++i;
      v5 = ORTokenReader::ortr_ReadString(token);
      if ( !v5 )
      {
        if ( !i )
          break;
        return 1;
      }
    }
  }
  v12 = "At least one column needed";
  v8 = v3;
LABEL_35:
  ORTokenReader::ortr_SetError(v8, v12);
  return 0;
}
// A85C00: using guessed type int __security_cookie;
// B67D18: using guessed type __int64 qword_B67D18;
// B67D20: using guessed type int dword_B67D20;
// B67D2C: using guessed type __int64 qword_B67D2C;
// B67D34: using guessed type int dword_B67D34;
// B67D40: using guessed type __int64 qword_B67D40;
// B67D48: using guessed type int dword_B67D48;
// B67D54: using guessed type __int64 qword_B67D54;
// B67D5C: using guessed type int dword_B67D5C;
// B67D68: using guessed type __int64 qword_B67D68;
// B67D70: using guessed type int dword_B67D70;
// B67D7C: using guessed type __int64 qword_B67D7C;
// B67D84: using guessed type int dword_B67D84;

//----- (006DCE10) --------------------------------------------------------
char __thiscall OptionReader::or_ExecColumnType(OptionReader *this, ORTokenReader *token)
{
  ORTable *v2; // eax@1
  char result; // al@2

  v2 = this->or_CurrentTable;
  if ( v2 )
  {
    result = ORTable::ort_ReadColumnHeader(v2, token, &this->or_Argument);
  }
  else
  {
    ORErrorMessage::operator_(&this->or_Argument.errmsg, "ColumnHeader without table");
    result = 0;
  }
  return result;
}

//----- (006DCE40) --------------------------------------------------------
char __thiscall OptionReader::or_ExecTable(OptionReader *this, ORTokenReader *token)
{
  OptionReader *v2; // edi@1
  int v3; // eax@1
  char *v4; // ecx@1
  int v5; // esi@2
  char *v7; // eax@7

  v2 = this;
  v3 = this->or_TableList.l_Finger.empty;
  v4 = (char *)&this->or_TableList;
  if ( (_WORD)v3 == -1 )
    v5 = 0;
  else
    v5 = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 4))(v3);
  v2->or_CurrentTable = (ORTable *)v5;
  if ( !v5 )
  {
    ORErrorMessage::operator_(&v2->or_Argument.errmsg, "Too many tables");
    return 0;
  }
  v7 = ORTokenReader::ortr_ReadString(token);
  if ( !v7 )
    return 0;
  *(_DWORD *)(v5 + 16) = 0;
  *(_DWORD *)(v5 + 12) = 0;
  *(_DWORD *)(v5 + 8) = 0;
  *(_DWORD *)(v5 + 4) = 0;
  *(_DWORD *)v5 = 0;
  strncpy((char *)v5, v7, 0x14u);
  return 1;
}

//----- (006DCEC0) --------------------------------------------------------
char __thiscall OptionReader::or_Read(OptionReader *this, char *filename)
{
  OptionReader *v2; // esi@1
  _iobuf *v3; // edi@1
  char v5; // bl@3
  unsigned int v6; // edi@5
  unsigned int v7; // ecx@6
  char v8; // al@8
  _iobuf *fp; // [sp+0h] [bp-1038h]@1
  ORTokenReader token; // [sp+4h] [bp-1034h]@3
  ORToken com; // [sp+1014h] [bp-24h]@3
  unsigned int v12; // [sp+1028h] [bp-10h]@1
  int v13; // [sp+1034h] [bp-4h]@3
  int v14; // [sp+1038h] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v2 = this;
  v3 = fopen(filename, "r");
  fp = v3;
  ORErrorMessage::operator_(&v2->or_Argument.errmsg, "Undefined Error");
  if ( !v3 )
  {
    ORErrorMessage::operator_(&v2->or_Argument.errmsg, "File not found");
    return 0;
  }
  ORTokenReader::ORTokenReader(&token, v3, &v2->or_Argument);
  v13 = 0;
  *(_QWORD *)&com.ort_Name[12] = 0i64;
  *(_QWORD *)&com.ort_Name[4] = 0i64;
  *(_DWORD *)&com.ort_Name[0] = 0;
  v5 = 1;
  while ( 1 )
  {
    if ( !ORTokenReader::ortr_ReadCommand(&token, &com) )
      goto LABEL_44;
    v6 = *(_DWORD *)&com;
    if ( *(_DWORD *)&com != *(_DWORD *)OptionReader::or_CommentMark )
      break;
    v7 = *(_DWORD *)&com.ort_Name[12];
    if ( *(_QWORD *)&com.ort_Name[4] != qword_B67D8C || *(_QWORD *)&com.ort_Name[12] != qword_B67D94 )
      goto LABEL_10;
    v8 = ORComment::orc_Exec(&v2->or_Argument.comment, &token);
LABEL_38:
    v5 = v8;
    if ( !v8 )
      goto LABEL_45;
  }
  v7 = *(_DWORD *)&com.ort_Name[12];
LABEL_10:
  if ( *(_QWORD *)&com == *(_QWORD *)OptionReader::or_Brace
    && *(_DWORD *)&com.ort_Name[8] == dword_B67DA4
    && __PAIR__(*(unsigned int *)&com.ort_Name[16], v7) == qword_B67DA8 )
  {
    v8 = ORBrace::orb_Exec(&v2->or_Argument.brace, &token);
    goto LABEL_38;
  }
  if ( *(_QWORD *)&com == *(_QWORD *)OptionReader::or_Ignore
    && *(_DWORD *)&com.ort_Name[8] == dword_B67DB8
    && __PAIR__(*(unsigned int *)&com.ort_Name[16], v7) == qword_B67DBC )
  {
    v8 = ORIgnore::ori_Exec(&v2->or_Argument.ignore, &token);
    goto LABEL_38;
  }
  if ( *(_QWORD *)&com == *(_QWORD *)OptionReader::or_Delimiter
    && *(_DWORD *)&com.ort_Name[8] == dword_B67DCC
    && __PAIR__(*(unsigned int *)&com.ort_Name[16], v7) == qword_B67DD0 )
  {
    v8 = ORDelimiter::ord_Exec(&v2->or_Argument.delimiter, &token);
    goto LABEL_38;
  }
  if ( *(_QWORD *)&com == *(_QWORD *)OptionReader::or_Exchange
    && *(_DWORD *)&com.ort_Name[8] == dword_B67DE0
    && __PAIR__(*(unsigned int *)&com.ort_Name[16], v7) == qword_B67DE4 )
  {
    v8 = ORExchange::ore_Exec(&v2->or_Argument.exchange, &token);
    goto LABEL_38;
  }
  if ( *(_QWORD *)&com == *(_QWORD *)OptionReader::or_Table
    && *(_DWORD *)&com.ort_Name[8] == dword_B67DF4
    && __PAIR__(*(unsigned int *)&com.ort_Name[16], v7) == qword_B67DF8 )
  {
    v8 = OptionReader::or_ExecTable(v2, &token);
    goto LABEL_38;
  }
  if ( ORToken::operator__(&com, &OptionReader::or_ColumnType) )
  {
    v8 = OptionReader::or_ExecColumnType(v2, &token);
    goto LABEL_38;
  }
  if ( ORToken::operator__(&com, &OptionReader::or_ColumnName) )
  {
    v8 = OptionReader::or_ExecColumnName(v2, &token);
    goto LABEL_38;
  }
  if ( ORToken::operator__(&com, &OptionReader::or_Record) )
  {
    v8 = OptionReader::or_ExecRecord(v2, &token);
    goto LABEL_38;
  }
  if ( ORToken::operator__(&com, &OptionReader::or_RecordIn) )
  {
    v8 = OptionReader::or_ExecRecordIn(v2, &token);
    goto LABEL_38;
  }
  if ( __PAIR__(*(unsigned int *)&com.ort_Name[4], v6) != *(_QWORD *)OptionReader::or_End
    || *(_QWORD *)&com.ort_Name[8] != qword_B67E58
    || *(_DWORD *)&com.ort_Name[16] != dword_B67E60 )
  {
    ORErrorMessage::operator_(&v2->or_Argument.errmsg, "Undefined command");
LABEL_44:
    v5 = 0;
  }
LABEL_45:
  fclose(fp);
  v13 = -1;
  ORTokenReader::_ORTokenReader(&token);
  return v5;
}
// A85C00: using guessed type int __security_cookie;
// B67D8C: using guessed type __int64 qword_B67D8C;
// B67D94: using guessed type __int64 qword_B67D94;
// B67DA4: using guessed type int dword_B67DA4;
// B67DA8: using guessed type __int64 qword_B67DA8;
// B67DB8: using guessed type int dword_B67DB8;
// B67DBC: using guessed type __int64 qword_B67DBC;
// B67DCC: using guessed type int dword_B67DCC;
// B67DD0: using guessed type __int64 qword_B67DD0;
// B67DE0: using guessed type int dword_B67DE0;
// B67DE4: using guessed type __int64 qword_B67DE4;
// B67DF4: using guessed type int dword_B67DF4;
// B67DF8: using guessed type __int64 qword_B67DF8;
// B67E58: using guessed type __int64 qword_B67E58;
// B67E60: using guessed type int dword_B67E60;

//----- (006DD220) --------------------------------------------------------
void __thiscall ORTable::_ORTable(ORTable *this)
{
  ORTable *v1; // esi@1
  ORKeyList *v2; // edi@1
  void *v3; // eax@3
  void *v4; // eax@5
  void *v5; // edi@6

  v1 = this;
  v2 = this->ort_PrimaryKey;
  if ( v2 )
  {
    ORKeyList::_ORKeyList(v2);
    operator delete(v2);
  }
  v3 = v1->ort_DataRecord.l_Array;
  v1->ort_DataRecord.vfptr = (List<ORRecord>Vtbl *)List<ORRecord>::_vftable_;
  if ( v3 )
    operator delete__(v3);
  v4 = v1->ort_DataArray.la_Array;
  if ( v4 )
  {
    v5 = (char *)v4 - 4;
    _eh_vector_destructor_iterator_(v4, 0x208u, *((_DWORD *)v4 - 1), (void (__thiscall *)(void *))ORRecord::_ORRecord);
    operator delete__(v5);
  }
  ORColumnHeaderList::_ORColumnHeaderList(&v1->ort_HeaderList);
}
// 9CCAD4: using guessed type int (__stdcall *List_ORRecord____vftable_[3])(__int16 hnd);

//----- (006DD2E0) --------------------------------------------------------
void __thiscall OptionReader::_OptionReader(OptionReader *this)
{
  OptionReader *v1; // esi@1
  void *v2; // eax@1

  v1 = this;
  _eh_vector_destructor_iterator_(this->or_TableArray, 0x23Cu, 32, (void (__thiscall *)(void *))ORTable::_ORTable);
  v2 = v1->or_TableList.l_Array;
  v1->or_TableList.vfptr = (List<ORTable>Vtbl *)List<ORTable>::_vftable_;
  if ( v2 )
    operator delete__(v2);
  ORIgnore::_ORIgnore(&v1->or_Argument.ignore);
  ORBrace::_ORBrace(&v1->or_Argument.brace);
  ORComment::_ORComment(&v1->or_Argument.comment);
  ORExchange::_ORExchange(&v1->or_Argument.exchange);
  ORDelimiter::_ORDelimiter(&v1->or_Argument.delimiter);
  ORErrorMessage::_ORErrorMessage(&v1->or_Argument.errmsg);
}
// 9CCAE4: using guessed type int (__stdcall *List_ORTable____vftable_[3])(__int16 hnd);

//----- (006DD3B0) --------------------------------------------------------
void __thiscall ORTable::ORTable(ORTable *this)
{
  ORTable *v1; // esi@1
  ORKeyList *v2; // ebx@1
  void *v3; // eax@1
  int v4; // ebx@2
  int v5; // eax@2

  v1 = this;
  v2 = 0;
  *(_QWORD *)&this->ort_TableName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->ort_TableName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->ort_TableName.ort_Name[0] = 0;
  ORColumnHeaderList::ORColumnHeaderList(&this->ort_HeaderList);
  v1->ort_DataArray.la_Size = 32;
  v3 = operator new__(0x4104u);
  if ( v3 )
  {
    v4 = (int)((char *)v3 + 4);
    *(_DWORD *)v3 = 32;
    _eh_vector_constructor_iterator_(
      (char *)v3 + 4,
      0x208u,
      32,
      (void (__thiscall *)(void *))ORRecord::ORRecord,
      (void (__thiscall *)(void *))ORRecord::_ORRecord);
    v5 = v4;
    v2 = 0;
  }
  else
  {
    v5 = 0;
  }
  v1->ort_DataArray.la_Array = (ORRecord *)v5;
  List<ORRecord>::List<ORRecord>(&v1->ort_DataRecord, &v1->ort_DataArray);
  v1->ort_PrimaryKey = v2;
}

//----- (006DD490) --------------------------------------------------------
void __thiscall OptionReader::OptionReader(OptionReader *this)
{
  OptionReader *v1; // esi@1
  signed int v2; // edx@1
  int v3; // eax@1
  ListStruct<ORTable> *v4; // ecx@3
  ListStruct<ORTable> *v5; // ecx@6
  bool v6; // zf@6
  int v7; // ecx@6
  ListStruct<ORTable> *v8; // ecx@9
  int v9; // ecx@9
  ListStruct<ORTable> *v10; // ecx@12
  int v11; // ecx@12
  signed int v12; // [sp+0h] [bp-14h]@1
  int v13; // [sp+4h] [bp-10h]@1

  v1 = this;
  ORErrorMessage::ORErrorMessage(&this->or_Argument.errmsg);
  ORDelimiter::ORDelimiter(&v1->or_Argument.delimiter);
  ORExchange::ORExchange(&v1->or_Argument.exchange);
  ORComment::ORComment(&v1->or_Argument.comment);
  ORBrace::ORBrace(&v1->or_Argument.brace);
  ORIgnore::ORIgnore(&v1->or_Argument.ignore);
  v1->or_TableList.vfptr = (List<ORTable>Vtbl *)List<ORTable>::_vftable_;
  v1->or_TableList.l_ListArray = 0;
  List<ORTable>::l_makelist(&v1->or_TableList, 0x20u);
  _eh_vector_constructor_iterator_(
    v1->or_TableArray,
    0x23Cu,
    32,
    (void (__thiscall *)(void *))ORTable::ORTable,
    (void (__thiscall *)(void *))ORTable::_ORTable);
  v1->or_CurrentTable = 0;
  v2 = 2;
  v3 = 0;
  v13 = (int)&v1->or_TableArray[1];
  v12 = 8;
  do
  {
    if ( v2 - 2 < v1->or_TableList.l_MaxSize )
    {
      v4 = v1->or_TableList.l_Array;
      if ( !v4[v3].ls_Content )
        v4[v3].ls_Content = (ORTable *)(v13 - 572);
    }
    if ( v2 - 1 < v1->or_TableList.l_MaxSize )
    {
      v5 = v1->or_TableList.l_Array;
      v6 = v5[v3 + 1].ls_Content == 0;
      v7 = (int)&v5[v3 + 1];
      if ( v6 )
        *(_DWORD *)v7 = v13;
    }
    if ( v2 < v1->or_TableList.l_MaxSize )
    {
      v8 = v1->or_TableList.l_Array;
      v6 = v8[v3 + 2].ls_Content == 0;
      v9 = (int)&v8[v3 + 2];
      if ( v6 )
        *(_DWORD *)v9 = v13 + 572;
    }
    if ( v2 + 1 < v1->or_TableList.l_MaxSize )
    {
      v10 = v1->or_TableList.l_Array;
      v6 = v10[v3 + 3].ls_Content == 0;
      v11 = (int)&v10[v3 + 3];
      if ( v6 )
        *(_DWORD *)v11 = v13 + 1144;
    }
    v13 += 2288;
    v3 += 4;
    v2 += 4;
    --v12;
  }
  while ( v12 );
}
// 9CCAE4: using guessed type int (__stdcall *List_ORTable____vftable_[3])(__int16 hnd);

//----- (006DD630) --------------------------------------------------------
void __thiscall TokenArgument::_TokenArgument(TokenArgument *this)
{
  TokenArgument *v1; // esi@1

  v1 = this;
  ORIgnore::_ORIgnore(&this->ignore);
  ORBrace::_ORBrace(&v1->brace);
  ORComment::_ORComment(&v1->comment);
  ORExchange::_ORExchange(&v1->exchange);
  ORDelimiter::_ORDelimiter(&v1->delimiter);
  ORErrorMessage::_ORErrorMessage(&v1->errmsg);
}

//----- (006DD6C0) --------------------------------------------------------
void __thiscall List<ORRecord>::_List<ORRecord>(List<ORRecord> *this)
{
  void *v1; // ecx@1

  this->vfptr = (List<ORRecord>Vtbl *)List<ORRecord>::_vftable_;
  v1 = this->l_Array;
  if ( v1 )
    operator delete__(v1);
}
// 9CCAD4: using guessed type int (__stdcall *List_ORRecord____vftable_[3])(__int16 hnd);

//----- (006DD6E0) --------------------------------------------------------
void __thiscall List<ORTable>::_List<ORTable>(List<ORTable> *this)
{
  void *v1; // ecx@1

  this->vfptr = (List<ORTable>Vtbl *)List<ORTable>::_vftable_;
  v1 = this->l_Array;
  if ( v1 )
    operator delete__(v1);
}
// 9CCAE4: using guessed type int (__stdcall *List_ORTable____vftable_[3])(__int16 hnd);

//----- (006DD700) --------------------------------------------------------
ORTable *__thiscall List<ORTable>::l_AllocA(List<ORTable> *this, unsigned __int16 hnd)
{
  ListStruct<ORTable> *v3; // esi@3
  int v4; // eax@3
  unsigned __int16 v5; // bx@5
  signed __int16 v6; // si@6
  int v7; // edi@10
  ListStruct<ORTable> *v8; // esi@10

  if ( hnd >= this->l_MaxSize )
    return 0;
  v3 = this->l_Array;
  v4 = hnd;
  if ( v3[v4].ls_IsActiv )
    return 0;
  v5 = v3[v4].ls_Next;
  if ( v5 == hnd )
  {
    v6 = -1;
LABEL_9:
    this->l_Finger.empty = v6;
    goto LABEL_10;
  }
  v3[v3[v4].ls_Prev].ls_Next = v5;
  this->l_Array[this->l_Array[v4].ls_Next].ls_Prev = this->l_Array[v4].ls_Prev;
  if ( this->l_Finger.empty == hnd )
  {
    v6 = this->l_Array[v4].ls_Next;
    goto LABEL_9;
  }
LABEL_10:
  v7 = this->l_Finger.store;
  v8 = this->l_Array;
  if ( (_WORD)v7 == -1 )
  {
    v8[v4].ls_Next = hnd;
    this->l_Array[v4].ls_Prev = hnd;
    this->l_Finger.store = hnd;
  }
  else
  {
    v8[v4].ls_Next = v8[v7].ls_Next;
    this->l_Array[v4].ls_Prev = this->l_Finger.store;
    this->l_Array[this->l_Array[this->l_Finger.store].ls_Next].ls_Prev = hnd;
    this->l_Array[this->l_Finger.store].ls_Next = hnd;
  }
  this->l_Array[v4].ls_IsActiv = 1;
  ++this->l_ListNum;
  return this->l_Array[v4].ls_Content;
}

//----- (006DD800) --------------------------------------------------------
ORTable *__thiscall List<ORTable>::l_AllocZ(List<ORTable> *this, unsigned __int16 hnd)
{
  ListStruct<ORTable> *v3; // esi@3
  int v4; // eax@3
  unsigned __int16 v5; // bx@5
  signed __int16 v6; // si@6
  unsigned __int16 v7; // si@10

  if ( hnd >= this->l_MaxSize )
    return 0;
  v3 = this->l_Array;
  v4 = hnd;
  if ( v3[v4].ls_IsActiv )
    return 0;
  v5 = v3[v4].ls_Next;
  if ( v5 == hnd )
  {
    v6 = -1;
LABEL_9:
    this->l_Finger.empty = v6;
    goto LABEL_10;
  }
  v3[v3[v4].ls_Prev].ls_Next = v5;
  this->l_Array[this->l_Array[v4].ls_Next].ls_Prev = this->l_Array[v4].ls_Prev;
  if ( this->l_Finger.empty == hnd )
  {
    v6 = this->l_Array[v4].ls_Next;
    goto LABEL_9;
  }
LABEL_10:
  v7 = this->l_Finger.store;
  if ( v7 == -1 )
  {
    this->l_Array[v4].ls_Next = hnd;
    this->l_Array[v4].ls_Prev = hnd;
    this->l_Finger.store = hnd;
  }
  else
  {
    this->l_Array[v4].ls_Next = v7;
    this->l_Array[v4].ls_Prev = this->l_Array[this->l_Finger.store].ls_Prev;
    this->l_Array[this->l_Array[this->l_Finger.store].ls_Prev].ls_Next = hnd;
    this->l_Array[this->l_Finger.store].ls_Prev = hnd;
  }
  this->l_Array[v4].ls_IsActiv = 1;
  ++this->l_ListNum;
  return this->l_Array[v4].ls_Content;
}

//----- (006DD900) --------------------------------------------------------
char __thiscall List<ORRecord>::l_Free(List<ORTable> *this, unsigned __int16 hnd)
{
  ListStruct<ORTable> *v2; // edx@2
  int v3; // eax@2
  unsigned __int16 v4; // dx@4
  char result; // al@7

  if ( hnd < this->l_MaxSize && (v2 = this->l_Array, v3 = hnd, v2[v3].ls_IsActiv) && hnd != this->l_Finger.store )
  {
    v2[v2[v3].ls_Prev].ls_Next = v2[v3].ls_Next;
    this->l_Array[this->l_Array[v3].ls_Next].ls_Prev = this->l_Array[v3].ls_Prev;
    v4 = this->l_Finger.empty;
    if ( v4 == -1 )
    {
      this->l_Array[v3].ls_Next = hnd;
      this->l_Array[v3].ls_Prev = hnd;
      this->l_Finger.empty = hnd;
    }
    else
    {
      this->l_Array[v3].ls_Next = v4;
      this->l_Array[v3].ls_Prev = this->l_Array[this->l_Finger.empty].ls_Prev;
      this->l_Array[this->l_Array[this->l_Finger.empty].ls_Prev].ls_Next = hnd;
      this->l_Array[this->l_Finger.empty].ls_Prev = hnd;
    }
    this->l_Array[v3].ls_IsActiv = 0;
    --this->l_ListNum;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006DD9F0) --------------------------------------------------------
char __thiscall List<ORRecord>::l_4AllInList(List<ORTable> *this, ListIteratorDefault<ORTable> *arg)
{
  List<ORTable> *v2; // esi@1
  int v3; // ecx@1
  ListStruct<ORTable> *v4; // edx@2
  int v5; // eax@2
  int v6; // edi@3
  char result; // al@5

  v2 = this;
  v3 = this->l_Array[this->l_Finger.store].ls_Next;
  if ( (unsigned __int16)v3 >= v2->l_MaxSize )
  {
LABEL_5:
    result = 1;
  }
  else
  {
    while ( 1 )
    {
      v4 = v2->l_Array;
      v5 = (unsigned __int16)v3;
      if ( !v4[v5].ls_IsActiv )
        break;
      v6 = v4[v5].ls_Next;
      if ( !arg->vfptr->lid_Call(arg, v4[v5].ls_Content, v3) )
        break;
      v3 = v6;
      if ( (unsigned __int16)v6 >= v2->l_MaxSize )
        goto LABEL_5;
    }
    result = 0;
  }
  return result;
}

//----- (006DDA60) --------------------------------------------------------
bool __thiscall ListIteratorDefault<ORRecord>::lid_Call(NiShaderFactory *this, NiGeometry *pkGeometry, NiShader *pkShader)
{
  return 1;
}

//----- (006DDA70) --------------------------------------------------------
char __thiscall ORToken::operator__(ORToken *this, ORToken *nm)
{
  return *(_DWORD *)&this->ort_Name[0] == *(_DWORD *)&nm->ort_Name[0]
      && *(_DWORD *)&this->ort_Name[4] == *(_DWORD *)&nm->ort_Name[4]
      && *(_DWORD *)&this->ort_Name[8] == *(_DWORD *)&nm->ort_Name[8]
      && *(_DWORD *)&this->ort_Name[12] == *(_DWORD *)&nm->ort_Name[12]
      && *(_DWORD *)&this->ort_Name[16] == *(_DWORD *)&nm->ort_Name[16];
}

//----- (006DDAB0) --------------------------------------------------------
void __thiscall ListArray<ORRecord>::_ListArray<ORRecord>(ListArray<ORRecord> *this)
{
  void *v1; // eax@1
  void *v2; // esi@2

  v1 = this->la_Array;
  if ( this->la_Array )
  {
    v2 = (char *)v1 - 4;
    _eh_vector_destructor_iterator_(v1, 0x208u, *((_DWORD *)v1 - 1), (void (__thiscall *)(void *))ORRecord::_ORRecord);
    operator delete__(v2);
  }
}

//----- (006DDAE0) --------------------------------------------------------
char __thiscall ListEraser<ORRecord>::lid_Call(ListEraser<ORTable> *this, ORTable *ele, unsigned __int16 handle)
{
  ((void (__stdcall *)(_DWORD))this->le_list->vfptr->l_Free)(handle);
  return 1;
}

//----- (006DDB00) --------------------------------------------------------
void __thiscall ListEraser<ORRecord>::_ListEraser<ORRecord>(ListEraser<ORRecord> *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&ListIteratorDefault<ORRecord>::_vftable_;
}
// 9CCAF4: using guessed type int (__stdcall *ListIteratorDefault_ORRecord____vftable_)(int, int pkGeometry);

//----- (006DDB10) --------------------------------------------------------
void __thiscall ListEraser<ORTable>::_ListEraser<ORTable>(ListEraser<ORTable> *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&ListIteratorDefault<ORTable>::_vftable_;
}
// 9CCAFC: using guessed type int (__stdcall *ListIteratorDefault_ORTable____vftable_)(int, int pkGeometry);

//----- (006DDB20) --------------------------------------------------------
void __thiscall List<ORRecord>::l_makelist(List<ORRecord> *this, unsigned __int16 size)
{
  List<ORRecord> *v2; // esi@1
  void *v3; // eax@3
  int v4; // ecx@4
  signed int v5; // eax@4
  int v6; // eax@6
  signed int v7; // ecx@6
  int v8; // eax@8
  ListIteratorDefault<ORTable> arg; // [sp+0h] [bp-14h]@8
  List<ORRecord> *v10; // [sp+4h] [bp-10h]@8
  int v11; // [sp+10h] [bp-4h]@8

  v2 = this;
  this->l_MaxSize = size;
  if ( size == -1 )
  {
    this->l_Array = 0;
  }
  else
  {
    v3 = operator new__(12 * (size + 1));
    v2->l_Array = (ListStruct<ORRecord> *)v3;
    if ( v3 )
    {
      v4 = 0;
      v5 = 0;
      do
      {
        v2->l_Array[v4].ls_Content = 0;
        ++v5;
        ++v4;
      }
      while ( v5 <= v2->l_MaxSize );
      v6 = 0;
      v7 = 0;
      if ( v2->l_MaxSize > 0u )
      {
        do
        {
          v2->l_Array[v6].ls_Prev = v7 - 1;
          v2->l_Array[v6].ls_Next = v7 + 1;
          v2->l_Array[v6].ls_IsActiv = 0;
          ++v7;
          ++v6;
        }
        while ( v7 < v2->l_MaxSize );
      }
      v2->l_Array->ls_Prev = v2->l_MaxSize - 1;
      *((_WORD *)&v2->l_Array[v2->l_MaxSize] - 4) = 0;
      v8 = v2->l_MaxSize;
      v2->l_Finger.store = v8;
      v2->l_Finger.empty = 0;
      v2->l_Array[v8].ls_Prev = v8;
      v2->l_Array[v2->l_MaxSize].ls_Next = v2->l_Array[v2->l_MaxSize].ls_Prev;
      v2->l_Array[v2->l_MaxSize].ls_Content = 0;
      v2->l_Array[v2->l_MaxSize].ls_IsActiv = 1;
      v2->l_ListNum = 0;
      arg.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&ListEraser<ORRecord>::_vftable_;
      v10 = v2;
      v11 = 0;
      List<ORRecord>::l_4AllInList((List<ORTable> *)v2, &arg);
    }
  }
}
// 9CCB04: using guessed type int (__stdcall *ListEraser_ORRecord____vftable_)(int ele, int handle);

//----- (006DDCA0) --------------------------------------------------------
void __thiscall List<ORTable>::l_makelist(List<ORTable> *this, unsigned __int16 size)
{
  List<ORTable> *v2; // esi@1
  void *v3; // eax@3
  int v4; // ecx@4
  signed int v5; // eax@4
  int v6; // eax@6
  signed int v7; // ecx@6
  int v8; // eax@8
  ListIteratorDefault<ORTable> arg; // [sp+0h] [bp-14h]@8
  List<ORTable> *v10; // [sp+4h] [bp-10h]@8
  int v11; // [sp+10h] [bp-4h]@8

  v2 = this;
  this->l_MaxSize = size;
  if ( size == -1 )
  {
    this->l_Array = 0;
  }
  else
  {
    v3 = operator new__(12 * (size + 1));
    v2->l_Array = (ListStruct<ORTable> *)v3;
    if ( v3 )
    {
      v4 = 0;
      v5 = 0;
      do
      {
        v2->l_Array[v4].ls_Content = 0;
        ++v5;
        ++v4;
      }
      while ( v5 <= v2->l_MaxSize );
      v6 = 0;
      v7 = 0;
      if ( v2->l_MaxSize > 0u )
      {
        do
        {
          v2->l_Array[v6].ls_Prev = v7 - 1;
          v2->l_Array[v6].ls_Next = v7 + 1;
          v2->l_Array[v6].ls_IsActiv = 0;
          ++v7;
          ++v6;
        }
        while ( v7 < v2->l_MaxSize );
      }
      v2->l_Array->ls_Prev = v2->l_MaxSize - 1;
      *((_WORD *)&v2->l_Array[v2->l_MaxSize] - 4) = 0;
      v8 = v2->l_MaxSize;
      v2->l_Finger.store = v8;
      v2->l_Finger.empty = 0;
      v2->l_Array[v8].ls_Prev = v8;
      v2->l_Array[v2->l_MaxSize].ls_Next = v2->l_Array[v2->l_MaxSize].ls_Prev;
      v2->l_Array[v2->l_MaxSize].ls_Content = 0;
      v2->l_Array[v2->l_MaxSize].ls_IsActiv = 1;
      v2->l_ListNum = 0;
      arg.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&ListEraser<ORTable>::_vftable_;
      v10 = v2;
      v11 = 0;
      List<ORRecord>::l_4AllInList(v2, &arg);
    }
  }
}
// 9CCB0C: using guessed type int (__stdcall *ListEraser_ORTable____vftable_)(int ele, int handle);

//----- (006DDE20) --------------------------------------------------------
void __thiscall List<ORRecord>::List<ORRecord>(List<ORRecord> *this, ListArray<ORRecord> *array)
{
  ListArray<ORRecord> *v2; // ebx@1
  List<ORRecord> *v3; // esi@1
  int v4; // edi@1
  signed int v5; // eax@4
  int v6; // edx@5
  ListStruct<ORRecord> *v7; // ecx@7

  v2 = array;
  v3 = this;
  v4 = 0;
  this->vfptr = (List<ORRecord>Vtbl *)List<ORRecord>::_vftable_;
  this->l_ListArray = array;
  if ( array->la_Array )
  {
    List<ORRecord>::l_makelist(this, LOWORD(array->la_Size));
    if ( v3->l_Array )
    {
      v5 = 0;
      if ( v3->l_MaxSize > 0u )
      {
        v6 = 0;
        do
        {
          if ( v5 < v3->l_MaxSize )
          {
            v7 = v3->l_Array;
            if ( !v7[v6].ls_Content )
            {
              v7[v6].ls_Content = &v2->la_Array[v4];
              v2 = array;
            }
          }
          ++v5;
          ++v4;
          ++v6;
        }
        while ( v5 < v3->l_MaxSize );
      }
    }
  }
  else
  {
    this->l_Array = 0;
  }
}
// 9CCAD4: using guessed type int (__stdcall *List_ORRecord____vftable_[3])(__int16 hnd);

//----- (006DDEA0) --------------------------------------------------------
ORRecord *__thiscall OrderArgument::oa_Getrecord(OrderArgument *this)
{
  return this->oa_record;
}

//----- (006DDEB0) --------------------------------------------------------
char __thiscall OrderArgument::lid_Call(OrderArgument *this, ORRecord *ele, unsigned __int16 handle)
{
  int v3; // eax@1
  char result; // al@2

  v3 = this->oa_target;
  if ( v3 > 0 )
  {
    this->oa_target = v3 - 1;
    result = 1;
  }
  else
  {
    this->oa_record = ele;
    result = 0;
  }
  return result;
}

//----- (006DDED0) --------------------------------------------------------
char __thiscall ColumnCheckArgument::cca_isfound(ColumnCheckArgument *this)
{
  return this->cca_found;
}

//----- (006DDEE0) --------------------------------------------------------
void *__thiscall TargetColumnFindArgument::rcfa_Getcontent(TargetColumnFindArgument *this)
{
  return this->tcfa_content;
}

//----- (006DDEF0) --------------------------------------------------------
ORRecord *__thiscall RecordDataCompareArgument::rdca_Getrecord(RecordDataCompareArgument *this)
{
  return this->rdca_record;
}

//----- (006DDF00) --------------------------------------------------------
ORTable *__thiscall TableNameCompareArgument::tnca_Gettable(TableNameCompareArgument *this)
{
  return this->tnca_found;
}

//----- (006DDF10) --------------------------------------------------------
ORToken *__thiscall ORColumnHeader::orch_GetColumnName(ORColumnHeader *this)
{
  return &this->orch_ColumnName;
}

//----- (006DDF20) --------------------------------------------------------
int __thiscall ORColumnHeader::orch_GetLength(ORColumnHeader *this)
{
  return this->orch_Length;
}

//----- (006DDF30) --------------------------------------------------------
int __thiscall ORColumnHeader::ortr_SetLength(ORColumnHeader *this, ORTokenReader *token, TokenArgument *targ)
{
  return this->orch_Length;
}

//----- (006DDF40) --------------------------------------------------------
char __thiscall ORColumnHeader::orch_FillCell(ORColumnHeader *this, ORTokenReader *token, ORRecord *datarecord)
{
  ORColumnHeader *v3; // edi@1
  unsigned __int16 v4; // ax@1
  ORField *v5; // eax@1
  ORField *v6; // esi@1
  char result; // al@2
  __int16 hnd; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v4 = ((int (*)(void))this->vfptr->orch_FieldType)();
  v5 = ORRecord::orr_AllocObject(datarecord, (unsigned __int16 *)&hnd, v4);
  v6 = v5;
  if ( v5 )
  {
    ORField::orf_SetColumnHead(v5, v3);
    ORRecord::orr_AllocMemory(datarecord, v6);
    result = v6->vfptr->orf_Read(v6, token);
  }
  else
  {
    ORTokenReader::ortr_SetError(token, "Cannot alloc field memory");
    result = 0;
  }
  return result;
}

//----- (006DDFB0) --------------------------------------------------------
int __thiscall ORColumnHeaderIndex::orch_FieldType(ORColumnHeaderIndex *this)
{
  return 1;
}

//----- (006DDFC0) --------------------------------------------------------
int __thiscall ORColumnHeaderString::ortr_SetLength(ORColumnHeaderString *this, ORTokenReader *token, TokenArgument *targ)
{
  ORTokenReader *v3; // esi@1
  char v4; // al@1
  TokenArgument *v5; // edi@1
  int result; // eax@2
  int v7; // eax@3
  int v8; // ebx@3
  char v9; // al@7
  ORColumnHeaderString *v10; // [sp+8h] [bp-4h]@1

  v3 = token;
  v10 = this;
  v4 = ORTokenReader::ortr_ReadChar(token);
  v5 = targ;
  if ( ORBrace::orb_IsOpen(&targ->brace, v4) )
  {
    BYTE3(token) = 0;
    v7 = ORTokenReader::ortr_ReadNumber(v3, (char *)&token + 3);
    v8 = v7;
    if ( BYTE3(token) )
    {
      if ( v7 > 0 )
      {
        v9 = ORTokenReader::ortr_ReadChar(v3);
        if ( ORBrace::orb_IsClose(&v5->brace, v9) )
        {
          v10->baseclass_0.orch_Length = v8;
          result = v8;
        }
        else
        {
          ORTokenReader::ortr_SetError(v3, "Brace must be closed in same line");
          result = 0;
        }
      }
      else
      {
        ORTokenReader::ortr_SetError(v3, "String length must be bigger then 0");
        result = 0;
      }
    }
    else
    {
      ORTokenReader::ortr_SetError(v3, "Error in string length");
      result = 0;
    }
  }
  else
  {
    ORTokenReader::ortr_SetError(v3, "String need length");
    result = 0;
  }
  return result;
}

//----- (006DE090) --------------------------------------------------------
int __thiscall ORColumnHeaderString::orch_FieldType(ORColumnHeaderString *this)
{
  return 2;
}

//----- (006DE0A0) --------------------------------------------------------
int __thiscall ORColumnHeaderByte::orch_FieldType(ORColumnHeaderByte *this)
{
  return 3;
}

//----- (006DE0B0) --------------------------------------------------------
int __thiscall ORColumnHeaderWord::orch_FieldType(ORColumnHeaderWord *this)
{
  return 4;
}

//----- (006DE0C0) --------------------------------------------------------
int __thiscall ORColumnHeaderDwrd::orch_FieldType(ORColumnHeaderDwrd *this)
{
  return 5;
}

//----- (006DE0D0) --------------------------------------------------------
void __thiscall ORColumnHeaderList::ORColumnHeaderList(ORColumnHeaderList *this)
{
  memset(this, 0, 0x200u);
}

//----- (006DE0F0) --------------------------------------------------------
char __thiscall ORColumnHeaderList::orchl_4AllInList(ORColumnHeaderList *this, ListIteratorDefault<ORColumnHeader> *arg)
{
  ORColumnHeaderList *v2; // ebx@1
  signed int v3; // esi@1
  ORColumnHeader *v4; // eax@2

  v2 = this;
  v3 = 0;
  while ( 1 )
  {
    v4 = v2->orchl_fieldname[v3];
    if ( v4 )
    {
      if ( !arg->vfptr->lid_Call(arg, v4, v3) )
        break;
    }
    ++v3;
    if ( v3 >= 128 )
      return 1;
  }
  return 0;
}

//----- (006DE130) --------------------------------------------------------
void *__thiscall ORTable::ort_RecordBuffer(ORTable *this, char *key)
{
  ORKeyList *v2; // ecx@1
  void *result; // eax@2
  ORRecord *v4; // eax@3

  v2 = this->ort_PrimaryKey;
  if ( v2 )
  {
    v4 = ORKeyList::okl_Searching(v2, key);
    result = ORRecord::orr_GetBuffer(v4);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006DE160) --------------------------------------------------------
int __thiscall RecordNumber::rn_Getnum(RecordNumber *this)
{
  return this->rn_Number;
}

//----- (006DE170) --------------------------------------------------------
void __thiscall MakePrimaryKeyColumn::MakePrimaryKeyColumn(MakePrimaryKeyColumn *this, ORToken *column, ORRecord *rec, ORKeyList *keylist)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&MakePrimaryKeyColumn::_vftable_;
  *(_QWORD *)&this->mpkc_keycolumn.ort_Name[12] = 0i64;
  *(_QWORD *)&this->mpkc_keycolumn.ort_Name[4] = 0i64;
  *(_DWORD *)&this->mpkc_keycolumn.ort_Name[0] = 0;
  *(_QWORD *)&this->mpkc_keycolumn.ort_Name[0] = *(_QWORD *)&column->ort_Name[0];
  *(_QWORD *)&this->mpkc_keycolumn.ort_Name[8] = *(_QWORD *)&column->ort_Name[8];
  *(_DWORD *)&this->mpkc_keycolumn.ort_Name[16] = *(_DWORD *)&column->ort_Name[16];
  this->mpkc_rec = rec;
  this->mpkc_keylist = keylist;
}
// 9CCC6C: using guessed type int (__stdcall *MakePrimaryKeyColumn___vftable_)(int ele, __int16 handle);

//----- (006DE1C0) --------------------------------------------------------
void __thiscall MakePrimaryKeyColumn::_MakePrimaryKeyColumn(MakePrimaryKeyColumn *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&ListIteratorDefault<ORField>::_vftable_;
}
// 9CCC5C: using guessed type int (__stdcall *ListIteratorDefault_ORField____vftable_)(int, int pkGeometry);

//----- (006DE1D0) --------------------------------------------------------
char __thiscall MakePrimaryKeyColumn::lid_Call(MakePrimaryKeyColumn *this, ORField *ele, unsigned __int16 handle)
{
  MakePrimaryKeyColumn *v3; // esi@1
  ORToken *v4; // eax@1
  ORRecord *v5; // ST04_4@7
  ORToken *v6; // eax@7
  char result; // al@8

  v3 = this;
  v4 = ORField::orf_ColumnName(ele);
  if ( *(_DWORD *)&v4->ort_Name[0] != *(_DWORD *)&v3->mpkc_keycolumn.ort_Name[0]
    || *(_DWORD *)&v4->ort_Name[4] != *(_DWORD *)&v3->mpkc_keycolumn.ort_Name[4]
    || *(_DWORD *)&v4->ort_Name[8] != *(_DWORD *)&v3->mpkc_keycolumn.ort_Name[8]
    || *(_DWORD *)&v4->ort_Name[12] != *(_DWORD *)&v3->mpkc_keycolumn.ort_Name[12]
    || *(_DWORD *)&v4->ort_Name[16] != *(_DWORD *)&v3->mpkc_keycolumn.ort_Name[16] )
  {
    result = 1;
  }
  else
  {
    if ( ele->vfptr->orf_GetType(ele) == 1 )
    {
      v5 = v3->mpkc_rec;
      v6 = (ORToken *)ele->vfptr->orf_GetBuffer(ele);
      ORKeyList::okl_AddKey(v3->mpkc_keylist, v6, v5);
    }
    result = 0;
  }
  return result;
}

//----- (006DE240) --------------------------------------------------------
void __thiscall MakePrimaryKey::MakePrimaryKey(MakePrimaryKey *this, char *column, ORKeyList *keylist)
{
  MakePrimaryKey *v3; // esi@1

  v3 = this;
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&MakePrimaryKey::_vftable_;
  *(_QWORD *)&this->mpk_keycolumn.ort_Name[12] = 0i64;
  *(_QWORD *)&this->mpk_keycolumn.ort_Name[4] = 0i64;
  *(_DWORD *)&this->mpk_keycolumn.ort_Name[0] = 0;
  strncpy(this->mpk_keycolumn.ort_Name, column, 0x14u);
  v3->mpk_keylist = keylist;
}
// 9CCC74: using guessed type int (__stdcall *MakePrimaryKey___vftable_)(int ele, __int16 handle);

//----- (006DE280) --------------------------------------------------------
void __thiscall MakePrimaryKey::_MakePrimaryKey(MakePrimaryKey *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&ListIteratorDefault<ORRecord>::_vftable_;
}
// 9CCAF4: using guessed type int (__stdcall *ListIteratorDefault_ORRecord____vftable_)(int, int pkGeometry);

//----- (006DE290) --------------------------------------------------------
char __thiscall MakePrimaryKey::lid_Call(MakePrimaryKey *this, ORRecord *ele, unsigned __int16 handle)
{
  ORKeyList *v3; // edx@1
  unsigned int v4; // esi@1
  unsigned int v5; // eax@1
  MakePrimaryKeyColumn arg; // [sp+0h] [bp-30h]@1
  unsigned int v8; // [sp+20h] [bp-10h]@1
  int v9; // [sp+2Ch] [bp-4h]@1
  int v10; // [sp+30h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this->mpk_keylist;
  *(_DWORD *)&arg.mpkc_keycolumn.ort_Name[0] = *(_DWORD *)&this->mpk_keycolumn.ort_Name[0];
  *(_QWORD *)&arg.mpkc_keycolumn.ort_Name[4] = *(_QWORD *)&this->mpk_keycolumn.ort_Name[4];
  v4 = *(_DWORD *)&this->mpk_keycolumn.ort_Name[12];
  v5 = *(_DWORD *)&this->mpk_keycolumn.ort_Name[16];
  arg.baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&MakePrimaryKeyColumn::_vftable_;
  *(_QWORD *)&arg.mpkc_keycolumn.ort_Name[12] = __PAIR__(v5, v4);
  arg.mpkc_rec = ele;
  arg.mpkc_keylist = v3;
  v9 = 0;
  ORRecord::orr_4AllInList(ele, &arg.baseclass_0);
  return 1;
}
// 9CCC6C: using guessed type int (__stdcall *MakePrimaryKeyColumn___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DE320) --------------------------------------------------------
void __thiscall OrderArgument::OrderArgument(OrderArgument *this, int targ)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&OrderArgument::_vftable_;
  this->oa_target = targ;
  this->oa_record = 0;
}
// 9CCC7C: using guessed type int (__stdcall *OrderArgument___vftable_)(int ele, __int16 handle);

//----- (006DE340) --------------------------------------------------------
void __thiscall OrderArgument::_OrderArgument(OrderArgument *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&ListIteratorDefault<ORRecord>::_vftable_;
}
// 9CCAF4: using guessed type int (__stdcall *ListIteratorDefault_ORRecord____vftable_)(int, int pkGeometry);

//----- (006DE350) --------------------------------------------------------
void __thiscall ColumnNameArgument::ColumnNameArgument(ColumnNameArgument *this, ORTokenReader *token)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORColumnHeader>Vtbl *)&ColumnNameArgument::_vftable_;
  this->cna_token = token;
}
// 9CCC84: using guessed type int (__stdcall *ColumnNameArgument___vftable_)(int ele, __int16 handle);

//----- (006DE370) --------------------------------------------------------
void __thiscall ColumnNameArgument::_ColumnNameArgument(ColumnNameArgument *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORColumnHeader>Vtbl *)&ListIteratorDefault<ORColumnHeader>::_vftable_;
}
// 9CCC64: using guessed type int (__stdcall *ListIteratorDefault_ORColumnHeader____vftable_)(int, int pkGeometry);

//----- (006DE380) --------------------------------------------------------
void __thiscall DataRecordArgument::DataRecordArgument(DataRecordArgument *this, ORTokenReader *token, ORRecord *record)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORColumnHeader>Vtbl *)&DataRecordArgument::_vftable_;
  this->dra_token = token;
  this->dra_datarecord = record;
}
// 9CCC8C: using guessed type int (__stdcall *DataRecordArgument___vftable_)(int ele, __int16 handle);

//----- (006DE3A0) --------------------------------------------------------
void __thiscall DataRecordArgument::_DataRecordArgument(DataRecordArgument *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORColumnHeader>Vtbl *)&ListIteratorDefault<ORColumnHeader>::_vftable_;
}
// 9CCC64: using guessed type int (__stdcall *ListIteratorDefault_ORColumnHeader____vftable_)(int, int pkGeometry);

//----- (006DE3B0) --------------------------------------------------------
char __thiscall DataRecordArgument::lid_Call(DataRecordArgument *this, ORColumnHeader *ele, unsigned __int16 handle)
{
  ORColumnHeader *v3; // ebx@1
  ORRecord *v4; // edi@1
  unsigned __int16 v5; // ax@1
  ORField *v6; // eax@1
  ORField *v7; // esi@1
  char result; // al@2
  ORTokenReader *thisa; // [sp+Ch] [bp-4h]@1

  v3 = ele;
  v4 = this->dra_datarecord;
  thisa = this->dra_token;
  v5 = ele->vfptr->orch_FieldType(ele);
  v6 = ORRecord::orr_AllocObject(v4, (unsigned __int16 *)&ele, v5);
  v7 = v6;
  if ( v6 )
  {
    ORField::orf_SetColumnHead(v6, v3);
    ORRecord::orr_AllocMemory(v4, v7);
    result = v7->vfptr->orf_Read(v7, thisa);
  }
  else
  {
    ORTokenReader::ortr_SetError(thisa, "Cannot alloc field memory");
    result = 0;
  }
  return result;
}

//----- (006DE420) --------------------------------------------------------
void __thiscall ColumnCheckArgument::ColumnCheckArgument(ColumnCheckArgument *this, ORToken *col, char *content)
{
  ColumnCheckArgument *v3; // esi@1

  v3 = this;
  this->cca_column = col;
  this->baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&ColumnCheckArgument::_vftable_;
  this->cca_contentstring = content;
  *(_QWORD *)&this->cca_contentindex.ort_Name[12] = 0i64;
  *(_QWORD *)&this->cca_contentindex.ort_Name[4] = 0i64;
  *(_DWORD *)&this->cca_contentindex.ort_Name[0] = 0;
  strncpy(this->cca_contentindex.ort_Name, content, 0x14u);
  v3->cca_found = 0;
}
// 9CCC94: using guessed type int (__stdcall *ColumnCheckArgument___vftable_)(int ele, __int16 handle);

//----- (006DE470) --------------------------------------------------------
void __thiscall ColumnCheckArgument::_ColumnCheckArgument(ColumnCheckArgument *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&ListIteratorDefault<ORField>::_vftable_;
}
// 9CCC5C: using guessed type int (__stdcall *ListIteratorDefault_ORField____vftable_)(int, int pkGeometry);

//----- (006DE480) --------------------------------------------------------
char __thiscall ColumnCheckArgument::lid_Call(ColumnCheckArgument *this, ORField *ele, unsigned __int16 handle)
{
  ColumnCheckArgument *v3; // edi@1
  ORToken *v4; // esi@1
  ORToken *v5; // eax@1
  char result; // al@8

  v3 = this;
  v4 = this->cca_column;
  v5 = ORField::orf_ColumnName(ele);
  if ( *(_DWORD *)&v5->ort_Name[0] != *(_DWORD *)&v4->ort_Name[0]
    || *(_DWORD *)&v5->ort_Name[4] != *(_DWORD *)&v4->ort_Name[4]
    || *(_DWORD *)&v5->ort_Name[8] != *(_DWORD *)&v4->ort_Name[8]
    || *(_DWORD *)&v5->ort_Name[12] != *(_DWORD *)&v4->ort_Name[12]
    || *(_DWORD *)&v5->ort_Name[16] != *(_DWORD *)&v4->ort_Name[16] )
  {
    result = 1;
  }
  else
  {
    if ( ele->vfptr->orf_CompareContent(ele, v3->cca_contentstring, &v3->cca_contentindex) )
      v3->cca_found = 1;
    result = 0;
  }
  return result;
}

//----- (006DE4F0) --------------------------------------------------------
void __thiscall TargetColumnFindArgument::TargetColumnFindArgument(TargetColumnFindArgument *this, char *target, int *type)
{
  TargetColumnFindArgument *v3; // esi@1

  v3 = this;
  this->baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&TargetColumnFindArgument::_vftable_;
  *(_QWORD *)&this->tcfa_target.ort_Name[12] = 0i64;
  *(_QWORD *)&this->tcfa_target.ort_Name[4] = 0i64;
  *(_DWORD *)&this->tcfa_target.ort_Name[0] = 0;
  strncpy(this->tcfa_target.ort_Name, target, 0x14u);
  v3->tcfa_content = 0;
  v3->tcfa_type = type;
}
// 9CCC9C: using guessed type int (__stdcall *TargetColumnFindArgument___vftable_)(int ele, __int16 handle);

//----- (006DE530) --------------------------------------------------------
void __thiscall TargetColumnFindArgument::_TargetColumnFindArgument(TargetColumnFindArgument *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&ListIteratorDefault<ORField>::_vftable_;
}
// 9CCC5C: using guessed type int (__stdcall *ListIteratorDefault_ORField____vftable_)(int, int pkGeometry);

//----- (006DE540) --------------------------------------------------------
char __thiscall TargetColumnFindArgument::lid_Call(TargetColumnFindArgument *this, ORField *ele, unsigned __int16 handle)
{
  TargetColumnFindArgument *v3; // esi@1
  ORToken *v4; // eax@1
  char result; // al@6

  v3 = this;
  v4 = ORField::orf_ColumnName(ele);
  if ( *(_DWORD *)&v4->ort_Name[0] != *(_DWORD *)&v3->tcfa_target.ort_Name[0]
    || *(_DWORD *)&v4->ort_Name[4] != *(_DWORD *)&v3->tcfa_target.ort_Name[4]
    || *(_DWORD *)&v4->ort_Name[8] != *(_DWORD *)&v3->tcfa_target.ort_Name[8]
    || *(_DWORD *)&v4->ort_Name[12] != *(_DWORD *)&v3->tcfa_target.ort_Name[12]
    || *(_DWORD *)&v4->ort_Name[16] != *(_DWORD *)&v3->tcfa_target.ort_Name[16] )
  {
    result = 1;
  }
  else
  {
    v3->tcfa_content = ele->vfptr->orf_GetBuffer(ele);
    *v3->tcfa_type = ele->vfptr->orf_GetType(ele);
    result = 0;
  }
  return result;
}

//----- (006DE5B0) --------------------------------------------------------
void __thiscall RecordDataCompareArgument::RecordDataCompareArgument(RecordDataCompareArgument *this, char *col, char *content, int skip)
{
  RecordDataCompareArgument *v4; // esi@1

  v4 = this;
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&RecordDataCompareArgument::_vftable_;
  *(_QWORD *)&this->rdca_column.ort_Name[12] = 0i64;
  *(_QWORD *)&this->rdca_column.ort_Name[4] = 0i64;
  *(_DWORD *)&this->rdca_column.ort_Name[0] = 0;
  strncpy(this->rdca_column.ort_Name, col, 0x14u);
  v4->rdca_record = 0;
  v4->rdca_skip = skip;
  v4->rdca_content = content;
}
// 9CCCA4: using guessed type int (__stdcall *RecordDataCompareArgument___vftable_)(int ele, __int16 handle);

//----- (006DE600) --------------------------------------------------------
void __thiscall RecordDataCompareArgument::_RecordDataCompareArgument(RecordDataCompareArgument *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&ListIteratorDefault<ORRecord>::_vftable_;
}
// 9CCAF4: using guessed type int (__stdcall *ListIteratorDefault_ORRecord____vftable_)(int, int pkGeometry);

//----- (006DE610) --------------------------------------------------------
char __thiscall RecordDataCompareArgument::lid_Call(RecordDataCompareArgument *this, ORRecord *ele, unsigned __int16 handle)
{
  RecordDataCompareArgument *v3; // esi@1
  char *v4; // ST04_4@1
  int v5; // eax@2
  ColumnCheckArgument arg; // [sp+0h] [bp-34h]@1
  unsigned int v8; // [sp+24h] [bp-10h]@1
  int v9; // [sp+30h] [bp-4h]@1
  int v10; // [sp+34h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v3 = this;
  v4 = this->rdca_content;
  arg.baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&ColumnCheckArgument::_vftable_;
  arg.cca_column = &this->rdca_column;
  arg.cca_contentstring = v4;
  *(_QWORD *)&arg.cca_contentindex.ort_Name[12] = 0i64;
  *(_QWORD *)&arg.cca_contentindex.ort_Name[4] = 0i64;
  *(_DWORD *)&arg.cca_contentindex.ort_Name[0] = 0;
  strncpy(arg.cca_contentindex.ort_Name, v4, 0x14u);
  arg.cca_found = 0;
  v9 = 0;
  ORRecord::orr_4AllInList(ele, &arg.baseclass_0);
  if ( !arg.cca_found )
    return 1;
  v5 = v3->rdca_skip;
  if ( v5 > 0 )
  {
    v3->rdca_skip = v5 - 1;
    return 1;
  }
  v3->rdca_record = ele;
  return 0;
}
// 9CCC94: using guessed type int (__stdcall *ColumnCheckArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DE6C0) --------------------------------------------------------
void __thiscall TableNameCompareArgument::TableNameCompareArgument(TableNameCompareArgument *this, ORToken *tname)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_QWORD *)&this->tnca_tablename.ort_Name[12] = 0i64;
  *(_QWORD *)&this->tnca_tablename.ort_Name[4] = 0i64;
  *(_DWORD *)&this->tnca_tablename.ort_Name[0] = 0;
  *(_QWORD *)&this->tnca_tablename.ort_Name[0] = *(_QWORD *)&tname->ort_Name[0];
  *(_QWORD *)&this->tnca_tablename.ort_Name[8] = *(_QWORD *)&tname->ort_Name[8];
  *(_DWORD *)&this->tnca_tablename.ort_Name[16] = *(_DWORD *)&tname->ort_Name[16];
  this->tnca_found = 0;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);

//----- (006DE710) --------------------------------------------------------
void __thiscall TableNameCompareArgument::_TableNameCompareArgument(TableNameCompareArgument *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&ListIteratorDefault<ORTable>::_vftable_;
}
// 9CCAFC: using guessed type int (__stdcall *ListIteratorDefault_ORTable____vftable_)(int, int pkGeometry);

//----- (006DE720) --------------------------------------------------------
char __thiscall TableNameCompareArgument::lid_Call(TableNameCompareArgument *this, ORTable *ele, unsigned __int16 handle)
{
  TableNameCompareArgument *v3; // esi@1
  ORToken *v4; // eax@1
  char result; // al@6

  v3 = this;
  v4 = ORTable::ort_GetTableName(ele);
  if ( *(_DWORD *)&v3->tnca_tablename.ort_Name[0] != *(_DWORD *)&v4->ort_Name[0]
    || *(_DWORD *)&v3->tnca_tablename.ort_Name[4] != *(_DWORD *)&v4->ort_Name[4]
    || *(_DWORD *)&v3->tnca_tablename.ort_Name[8] != *(_DWORD *)&v4->ort_Name[8]
    || *(_DWORD *)&v3->tnca_tablename.ort_Name[12] != *(_DWORD *)&v4->ort_Name[12]
    || *(_DWORD *)&v3->tnca_tablename.ort_Name[16] != *(_DWORD *)&v4->ort_Name[16] )
  {
    result = 1;
  }
  else
  {
    v3->tnca_found = ele;
    result = 0;
  }
  return result;
}

//----- (006DE770) --------------------------------------------------------
void __thiscall ORColumnHeader::ORColumnHeader(ORColumnHeader *this)
{
  this->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
  *(_QWORD *)&this->orch_ColumnName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->orch_ColumnName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->orch_ColumnName.ort_Name[0] = 0;
  this->orch_Length = 0;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DE790) --------------------------------------------------------
void __thiscall ORColumnHeader::_ORColumnHeader(ORColumnHeader *this)
{
  this->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DE7A0) --------------------------------------------------------
void __thiscall ORColumnHeader::orch_SetColumnName(ORColumnHeader *this, char *name)
{
  *(_QWORD *)&this->orch_ColumnName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->orch_ColumnName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->orch_ColumnName.ort_Name[0] = 0;
  strncpy(this->orch_ColumnName.ort_Name, name, 0x14u);
}

//----- (006DE7D0) --------------------------------------------------------
void __thiscall ORColumnHeaderIndex::ORColumnHeaderIndex(ORColumnHeaderIndex *this)
{
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[0] = 0;
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderIndex::_vftable_;
  this->baseclass_0.orch_Length = 20;
}
// 9CCCC0: using guessed type int (__stdcall *ORColumnHeaderIndex___vftable_)(int, int token);

//----- (006DE800) --------------------------------------------------------
void __thiscall ORColumnHeaderIndex::_ORColumnHeaderIndex(ORColumnHeaderIndex *this)
{
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DE810) --------------------------------------------------------
void __thiscall ORColumnHeaderString::ORColumnHeaderString(ORColumnHeaderString *this)
{
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[0] = 0;
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderString::_vftable_;
  this->baseclass_0.orch_Length = -1;
}
// 9CCCCC: using guessed type int (__stdcall *ORColumnHeaderString___vftable_)(int result, int targ);

//----- (006DE840) --------------------------------------------------------
void __thiscall ORColumnHeaderString::_ORColumnHeaderString(ORColumnHeaderString *this)
{
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DE850) --------------------------------------------------------
void __thiscall ORColumnHeaderByte::ORColumnHeaderByte(ORColumnHeaderByte *this)
{
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[0] = 0;
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderByte::_vftable_;
  this->baseclass_0.orch_Length = 1;
}
// 9CCCD8: using guessed type int (__stdcall *ORColumnHeaderByte___vftable_)(int, int token);

//----- (006DE880) --------------------------------------------------------
void __thiscall ORColumnHeaderByte::_ORColumnHeaderByte(ORColumnHeaderByte *this)
{
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DE890) --------------------------------------------------------
void __thiscall ORColumnHeaderWord::ORColumnHeaderWord(ORColumnHeaderWord *this)
{
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[0] = 0;
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderWord::_vftable_;
  this->baseclass_0.orch_Length = 2;
}
// 9CCCE4: using guessed type int (__stdcall *ORColumnHeaderWord___vftable_)(int, int token);

//----- (006DE8C0) --------------------------------------------------------
void __thiscall ORColumnHeaderWord::_ORColumnHeaderWord(ORColumnHeaderWord *this)
{
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DE8D0) --------------------------------------------------------
void __thiscall ORColumnHeaderDwrd::ORColumnHeaderDwrd(ORColumnHeaderDwrd *this)
{
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[12] = 0i64;
  *(_QWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[4] = 0i64;
  *(_DWORD *)&this->baseclass_0.orch_ColumnName.ort_Name[0] = 0;
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderDwrd::_vftable_;
  this->baseclass_0.orch_Length = 4;
}
// 9CCCF0: using guessed type int (__stdcall *ORColumnHeaderDwrd___vftable_)(int, int token);

//----- (006DE900) --------------------------------------------------------
void __thiscall ORColumnHeaderDwrd::_ORColumnHeaderDwrd(ORColumnHeaderDwrd *this)
{
  this->baseclass_0.vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DE910) --------------------------------------------------------
ORColumnHeader *__thiscall ORColumnHeaderList::orchl_AllocObject(ORColumnHeaderList *this, unsigned __int16 *hnd, unsigned __int16 type)
{
  ORColumnHeaderList *v3; // ebx@1
  signed int v4; // edi@1
  ORColumnHeader *result; // eax@4

  v3 = this;
  v4 = 0;
  while ( this->orchl_fieldname[v4] )
  {
    ++v4;
    if ( v4 >= 128 )
      return 0;
  }
  switch ( type )
  {
    case 1u:
      result = (ORColumnHeader *)operator new(0x1Cu);
      if ( !result )
        goto LABEL_16;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[16] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[12] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[8] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[4] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[0] = 0;
      result->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderIndex::_vftable_;
      result->orch_Length = 20;
      v3->orchl_fieldname[v4] = result;
      break;
    case 2u:
      result = (ORColumnHeader *)operator new(0x1Cu);
      if ( !result )
        goto LABEL_16;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[16] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[12] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[8] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[4] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[0] = 0;
      result->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderString::_vftable_;
      result->orch_Length = -1;
      v3->orchl_fieldname[v4] = result;
      break;
    case 3u:
      result = (ORColumnHeader *)operator new(0x1Cu);
      if ( !result )
        goto LABEL_16;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[16] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[12] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[8] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[4] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[0] = 0;
      result->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderByte::_vftable_;
      result->orch_Length = 1;
      v3->orchl_fieldname[v4] = result;
      break;
    case 4u:
      result = (ORColumnHeader *)operator new(0x1Cu);
      if ( !result )
        goto LABEL_16;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[16] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[12] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[8] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[4] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[0] = 0;
      result->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderWord::_vftable_;
      result->orch_Length = 2;
      v3->orchl_fieldname[v4] = result;
      break;
    case 5u:
      result = (ORColumnHeader *)operator new(0x1Cu);
      if ( !result )
      {
LABEL_16:
        v3->orchl_fieldname[v4] = 0;
        goto LABEL_17;
      }
      *(_DWORD *)&result->orch_ColumnName.ort_Name[16] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[12] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[8] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[4] = 0;
      *(_DWORD *)&result->orch_ColumnName.ort_Name[0] = 0;
      result->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeaderDwrd::_vftable_;
      result->orch_Length = 4;
      v3->orchl_fieldname[v4] = result;
      break;
    default:
LABEL_17:
      result = v3->orchl_fieldname[v4];
      break;
  }
  return result;
}
// 9CCCC0: using guessed type int (__stdcall *ORColumnHeaderIndex___vftable_)(int, int token);
// 9CCCCC: using guessed type int (__stdcall *ORColumnHeaderString___vftable_)(int result, int targ);
// 9CCCD8: using guessed type int (__stdcall *ORColumnHeaderByte___vftable_)(int, int token);
// 9CCCE4: using guessed type int (__stdcall *ORColumnHeaderWord___vftable_)(int, int token);
// 9CCCF0: using guessed type int (__stdcall *ORColumnHeaderDwrd___vftable_)(int, int token);

//----- (006DEA80) --------------------------------------------------------
char __thiscall ORColumnHeaderList::orchl_FreeObject(ORColumnHeaderList *this, unsigned __int16 hnd, unsigned __int16 type)
{
  ORColumnHeader *v3; // eax@1
  char result; // al@2
  void *v5; // ST00_4@3

  v3 = this->orchl_fieldname[hnd];
  if ( v3 )
  {
    v5 = this->orchl_fieldname[hnd];
    v3->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
    operator delete(v5);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DEAB0) --------------------------------------------------------
char __thiscall ORTable::ort_MakePrimaryKey(ORTable *this, char *column)
{
  ORTable *v2; // esi@1
  ORKeyList *v3; // edi@1
  void *v4; // eax@3
  ORKeyList *v5; // eax@4
  ORKeyList *v6; // edi@4
  char result; // al@7
  void *v8; // edi@9
  MakePrimaryKey arg; // [sp+8h] [bp-2Ch]@8
  unsigned int v10; // [sp+24h] [bp-10h]@1
  int v11; // [sp+30h] [bp-4h]@3
  int v12; // [sp+34h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  v3 = this->ort_PrimaryKey;
  if ( v3 )
  {
    ORKeyList::_ORKeyList(v3);
    operator delete(v3);
  }
  v4 = operator new(0x6004u);
  v11 = 0;
  if ( v4 )
  {
    ORKeyList::ORKeyList((ORKeyList *)v4);
    v6 = v5;
  }
  else
  {
    v6 = 0;
  }
  v11 = -1;
  v2->ort_PrimaryKey = v6;
  if ( v6 )
  {
    arg.baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&MakePrimaryKey::_vftable_;
    *(_QWORD *)&arg.mpk_keycolumn.ort_Name[12] = 0i64;
    *(_QWORD *)&arg.mpk_keycolumn.ort_Name[4] = 0i64;
    *(_DWORD *)&arg.mpk_keycolumn.ort_Name[0] = 0;
    strncpy(arg.mpk_keycolumn.ort_Name, column, 0x14u);
    arg.mpk_keylist = v6;
    v11 = 1;
    List<ORRecord>::l_4AllInList((List<ORTable> *)&v2->ort_DataRecord, (ListIteratorDefault<ORTable> *)&arg);
    if ( !ORKeyList::okl_Sorting(v2->ort_PrimaryKey) )
    {
      v8 = v2->ort_PrimaryKey;
      if ( v8 )
      {
        ORKeyList::_ORKeyList(v2->ort_PrimaryKey);
        operator delete(v8);
      }
      v2->ort_PrimaryKey = 0;
    }
    result = v2->ort_PrimaryKey != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9CCC74: using guessed type int (__stdcall *MakePrimaryKey___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DEBD0) --------------------------------------------------------
char __thiscall ORTable::ort_ReadColumnName(ORTable *this, ORTokenReader *token)
{
  ORTable *v2; // edi@1
  signed int v3; // esi@1
  ORColumnHeader *v4; // eax@2
  ColumnNameArgument arg; // [sp+0h] [bp-14h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v2 = this;
  arg.baseclass_0.vfptr = (ListIteratorDefault<ORColumnHeader>Vtbl *)&ColumnNameArgument::_vftable_;
  arg.cna_token = token;
  v7 = 0;
  v3 = 0;
  while ( 1 )
  {
    v4 = v2->ort_HeaderList.orchl_fieldname[v3];
    if ( v4 )
    {
      if ( !(unsigned __int8)arg.baseclass_0.vfptr->lid_Call(&arg, v4, v3) )
        break;
    }
    ++v3;
    if ( v3 >= 128 )
      return 1;
  }
  return 0;
}
// 9CCC84: using guessed type int (__stdcall *ColumnNameArgument___vftable_)(int ele, __int16 handle);

//----- (006DEC60) --------------------------------------------------------
void *__thiscall ORRecord::orr_GetFieldData(ORRecord *this, char *targetcolumn, int *type)
{
  ORRecord *v3; // edi@1
  TargetColumnFindArgument arg; // [sp+0h] [bp-30h]@1
  unsigned int v6; // [sp+20h] [bp-10h]@1
  int v7; // [sp+2Ch] [bp-4h]@1
  int v8; // [sp+30h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  arg.baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&TargetColumnFindArgument::_vftable_;
  *(_QWORD *)&arg.tcfa_target.ort_Name[12] = 0i64;
  *(_QWORD *)&arg.tcfa_target.ort_Name[4] = 0i64;
  *(_DWORD *)&arg.tcfa_target.ort_Name[0] = 0;
  strncpy(arg.tcfa_target.ort_Name, targetcolumn, 0x14u);
  arg.tcfa_content = 0;
  arg.tcfa_type = type;
  v7 = 0;
  ORRecord::orr_4AllInList(v3, &arg.baseclass_0);
  return arg.tcfa_content;
}
// 9CCC9C: using guessed type int (__stdcall *TargetColumnFindArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DECF0) --------------------------------------------------------
void *__thiscall ORTable::ort_FindData(ORTable *this, char *column, char *key, int *type)
{
  ORTable *v4; // esi@1
  ORKeyList *v5; // ecx@1
  void *result; // eax@2
  ORRecord *v7; // eax@4

  v4 = this;
  v5 = this->ort_PrimaryKey;
  if ( v5 )
  {
    result = ORKeyList::okl_Searching(v5, key);
    if ( result )
    {
      v7 = ORKeyList::okl_Searching(v4->ort_PrimaryKey, key);
      result = ORRecord::orr_GetFieldData(v7, column, type);
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006DED40) --------------------------------------------------------
void *__thiscall ORTable::ort_FindData(ORTable *this, char *column, char *content, char *targetcolumn, int skip, int *type)
{
  ORTable *v6; // edi@1
  ORRecord *v7; // edi@2
  void *result; // eax@2
  RecordDataCompareArgument arg; // [sp+0h] [bp-54h]@1
  int (__stdcall **v10)(int, __int16); // [sp+24h] [bp-30h]@2
  char dest[4]; // [sp+28h] [bp-2Ch]@2
  int v12; // [sp+2Ch] [bp-28h]@2
  int v13; // [sp+30h] [bp-24h]@2
  int v14; // [sp+34h] [bp-20h]@2
  int v15; // [sp+38h] [bp-1Ch]@2
  void *v16; // [sp+3Ch] [bp-18h]@2
  int *v17; // [sp+40h] [bp-14h]@2
  unsigned int v18; // [sp+44h] [bp-10h]@1
  int v19; // [sp+50h] [bp-4h]@1
  int v20; // [sp+54h] [bp+0h]@1

  v18 = (unsigned int)&v20 ^ __security_cookie;
  v6 = this;
  arg.baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&RecordDataCompareArgument::_vftable_;
  *(_QWORD *)&arg.rdca_column.ort_Name[12] = 0i64;
  *(_QWORD *)&arg.rdca_column.ort_Name[4] = 0i64;
  *(_DWORD *)&arg.rdca_column.ort_Name[0] = 0;
  strncpy(arg.rdca_column.ort_Name, column, 0x14u);
  arg.rdca_content = content;
  arg.rdca_record = 0;
  arg.rdca_skip = skip;
  v19 = 0;
  List<ORRecord>::l_4AllInList((List<ORTable> *)&v6->ort_DataRecord, (ListIteratorDefault<ORTable> *)&arg);
  if ( arg.rdca_record )
  {
    v7 = arg.rdca_record;
    v10 = &TargetColumnFindArgument::_vftable_;
    v15 = 0;
    v14 = 0;
    v13 = 0;
    v12 = 0;
    *(_DWORD *)dest = 0;
    strncpy(dest, targetcolumn, 0x14u);
    v16 = 0;
    v17 = type;
    LOBYTE(v19) = 1;
    ORRecord::orr_4AllInList(v7, (ListIteratorDefault<ORField> *)&v10);
    result = v16;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9CCC9C: using guessed type int (__stdcall *TargetColumnFindArgument___vftable_)(int ele, __int16 handle);
// 9CCCA4: using guessed type int (__stdcall *RecordDataCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DEE30) --------------------------------------------------------
void *__thiscall ORTable::ort_RecordBuffer(ORTable *this, int order)
{
  void *result; // eax@2
  OrderArgument arg; // [sp+0h] [bp-18h]@1
  int v4; // [sp+14h] [bp-4h]@1

  arg.baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&OrderArgument::_vftable_;
  arg.oa_target = order;
  arg.oa_record = 0;
  v4 = 0;
  List<ORRecord>::l_4AllInList((List<ORTable> *)&this->ort_DataRecord, (ListIteratorDefault<ORTable> *)&arg);
  if ( arg.oa_record )
    result = ORRecord::orr_GetBuffer(arg.oa_record);
  else
    result = 0;
  return result;
}
// 9CCC7C: using guessed type int (__stdcall *OrderArgument___vftable_)(int ele, __int16 handle);

//----- (006DEEB0) --------------------------------------------------------
void *__thiscall ORTable::ort_RecordBuffer(ORTable *this, char *column, char *content, int skip)
{
  ORTable *v4; // edi@1
  void *result; // eax@2
  RecordDataCompareArgument arg; // [sp+0h] [bp-34h]@1
  unsigned int v7; // [sp+24h] [bp-10h]@1
  int v8; // [sp+30h] [bp-4h]@1
  int v9; // [sp+34h] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v4 = this;
  arg.baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&RecordDataCompareArgument::_vftable_;
  *(_QWORD *)&arg.rdca_column.ort_Name[12] = 0i64;
  *(_QWORD *)&arg.rdca_column.ort_Name[4] = 0i64;
  *(_DWORD *)&arg.rdca_column.ort_Name[0] = 0;
  strncpy(arg.rdca_column.ort_Name, column, 0x14u);
  arg.rdca_content = content;
  arg.rdca_record = 0;
  arg.rdca_skip = skip;
  v8 = 0;
  List<ORRecord>::l_4AllInList((List<ORTable> *)&v4->ort_DataRecord, (ListIteratorDefault<ORTable> *)&arg);
  if ( arg.rdca_record )
    result = ORRecord::orr_GetBuffer(arg.rdca_record);
  else
    result = 0;
  return result;
}
// 9CCCA4: using guessed type int (__stdcall *RecordDataCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DEF60) --------------------------------------------------------
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, char *key)
{
  void *result; // eax@2
  ORKeyList *v4; // ecx@3
  ORRecord *v5; // eax@4
  TableNameCompareArgument tname; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[0] = *(_QWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[8] = *(_QWORD *)&table.ort_Name[8];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[16] = *(_DWORD *)&table.ort_Name[16];
  tname.tnca_found = 0;
  v8 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found && (v4 = tname.tnca_found->ort_PrimaryKey) != 0 )
  {
    v5 = ORKeyList::okl_Searching(v4, key);
    result = ORRecord::orr_GetBuffer(v5);
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF010) --------------------------------------------------------
void *__thiscall OptionReader::or_SelectFromOrder(OptionReader *this, ORToken table, int order)
{
  void *result; // eax@3
  ListIteratorDefault<ORTable> arg; // [sp+0h] [bp-38h]@2
  int v5; // [sp+4h] [bp-34h]@2
  ORRecord *thisa; // [sp+8h] [bp-30h]@2
  TableNameCompareArgument tname; // [sp+Ch] [bp-2Ch]@1
  unsigned int v8; // [sp+28h] [bp-10h]@1
  int v9; // [sp+34h] [bp-4h]@1
  int v10; // [sp+38h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[0] = *(_QWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[8] = *(_QWORD *)&table.ort_Name[8];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[16] = *(_DWORD *)&table.ort_Name[16];
  tname.tnca_found = 0;
  v9 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found
    && (arg.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&OrderArgument::_vftable_,
        v5 = order,
        thisa = 0,
        LOBYTE(v9) = 1,
        List<ORRecord>::l_4AllInList((List<ORTable> *)&tname.tnca_found->ort_DataRecord, &arg),
        thisa) )
    result = ORRecord::orr_GetBuffer(thisa);
  else
    result = 0;
  return result;
}
// 9CCC7C: using guessed type int (__stdcall *OrderArgument___vftable_)(int ele, __int16 handle);
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF0E0) --------------------------------------------------------
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, char *key, int *type)
{
  void *result; // eax@2
  ORKeyList *v6; // ecx@3
  ORKeyList **v7; // esi@3
  ORRecord *v8; // eax@5
  TableNameCompareArgument tname; // [sp+4h] [bp-2Ch]@1
  unsigned int v10; // [sp+20h] [bp-10h]@1
  int v11; // [sp+2Ch] [bp-4h]@1
  int v12; // [sp+30h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[0] = *(_QWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[8] = *(_QWORD *)&table.ort_Name[8];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[16] = *(_DWORD *)&table.ort_Name[16];
  tname.tnca_found = 0;
  v11 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found
    && (v6 = tname.tnca_found->ort_PrimaryKey, v7 = &tname.tnca_found->ort_PrimaryKey, v6)
    && ORKeyList::okl_Searching(v6, key) )
  {
    v8 = ORKeyList::okl_Searching(*v7, key);
    result = ORRecord::orr_GetFieldData(v8, targetcolumn, type);
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF1B0) --------------------------------------------------------
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, char *column, char *content, int skip)
{
  void *result; // eax@2
  TableNameCompareArgument tname; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[0] = *(_DWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[4] = *(_QWORD *)&table.ort_Name[4];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[12] = *(_QWORD *)&table.ort_Name[12];
  tname.tnca_found = 0;
  v8 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found )
    result = ORTable::ort_RecordBuffer(tname.tnca_found, column, content, skip);
  else
    result = 0;
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF260) --------------------------------------------------------
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, char *column, char *content, int skip, int *type)
{
  void *result; // eax@2
  TableNameCompareArgument tname; // [sp+8h] [bp-2Ch]@1
  unsigned int v9; // [sp+24h] [bp-10h]@1
  int v10; // [sp+30h] [bp-4h]@1
  int v11; // [sp+34h] [bp+0h]@1

  v9 = (unsigned int)&v11 ^ __security_cookie;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[0] = *(_DWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[4] = *(_QWORD *)&table.ort_Name[4];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[12] = *(_QWORD *)&table.ort_Name[12];
  tname.tnca_found = 0;
  v10 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found )
    result = ORTable::ort_FindData(tname.tnca_found, column, content, targetcolumn, skip, type);
  else
    result = 0;
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF320) --------------------------------------------------------
char __thiscall OptionReader::or_MakePrimaryKey(OptionReader *this, ORToken table, char *column)
{
  char result; // al@2
  TableNameCompareArgument tname; // [sp+0h] [bp-2Ch]@1
  unsigned int v5; // [sp+1Ch] [bp-10h]@1
  int v6; // [sp+28h] [bp-4h]@1
  int v7; // [sp+2Ch] [bp+0h]@1

  v5 = (unsigned int)&v7 ^ __security_cookie;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[0] = *(_QWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[8] = *(_QWORD *)&table.ort_Name[8];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[16] = *(_DWORD *)&table.ort_Name[16];
  tname.tnca_found = 0;
  v6 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found )
    result = ORTable::ort_MakePrimaryKey(tname.tnca_found, column);
  else
    result = 0;
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF3C0) --------------------------------------------------------
int __thiscall OptionReader::or_SelectCount(OptionReader *this)
{
  return this->or_TableList.l_ListNum;
}

//----- (006DF3D0) --------------------------------------------------------
void __thiscall RecordNumber::RecordNumber(RecordNumber *this, char *col, char *cnt)
{
  RecordNumber *v3; // esi@1

  v3 = this;
  this->rn_Number = 0;
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&RecordNumber::_vftable_;
  *(_QWORD *)&this->rn_column.ort_Name[12] = 0i64;
  *(_QWORD *)&this->rn_column.ort_Name[4] = 0i64;
  *(_DWORD *)&this->rn_column.ort_Name[0] = 0;
  strncpy(this->rn_column.ort_Name, col, 0x14u);
  v3->rn_content = cnt;
}
// 9CCCFC: using guessed type int (__stdcall *RecordNumber___vftable_)(int ele, __int16 handle);

//----- (006DF410) --------------------------------------------------------
void __thiscall RecordNumber::_RecordNumber(RecordNumber *this)
{
  this->baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&ListIteratorDefault<ORRecord>::_vftable_;
}
// 9CCAF4: using guessed type int (__stdcall *ListIteratorDefault_ORRecord____vftable_)(int, int pkGeometry);

//----- (006DF420) --------------------------------------------------------
char __thiscall RecordNumber::lid_Call(RecordNumber *this, ORRecord *ele, unsigned __int16 handle)
{
  RecordNumber *v3; // esi@1
  char *v4; // ST04_4@1
  char result; // al@2
  ColumnCheckArgument arg; // [sp+0h] [bp-34h]@1
  unsigned int v7; // [sp+24h] [bp-10h]@1
  int v8; // [sp+30h] [bp-4h]@1
  int v9; // [sp+34h] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  v4 = this->rn_content;
  arg.baseclass_0.vfptr = (ListIteratorDefault<ORField>Vtbl *)&ColumnCheckArgument::_vftable_;
  arg.cca_column = &this->rn_column;
  arg.cca_contentstring = v4;
  *(_QWORD *)&arg.cca_contentindex.ort_Name[12] = 0i64;
  *(_QWORD *)&arg.cca_contentindex.ort_Name[4] = 0i64;
  *(_DWORD *)&arg.cca_contentindex.ort_Name[0] = 0;
  strncpy(arg.cca_contentindex.ort_Name, v4, 0x14u);
  arg.cca_found = 0;
  v8 = 0;
  ORRecord::orr_4AllInList(ele, &arg.baseclass_0);
  if ( arg.cca_found )
  {
    result = 1;
    ++v3->rn_Number;
  }
  else
  {
    result = 1;
  }
  return result;
}
// 9CCC94: using guessed type int (__stdcall *ColumnCheckArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF4D0) --------------------------------------------------------
int __thiscall ORTable::ort_RecordNum(ORTable *this, char *column, char *content)
{
  ORTable *v3; // edi@1
  RecordNumber rn; // [sp+0h] [bp-30h]@1
  unsigned int v6; // [sp+20h] [bp-10h]@1
  int v7; // [sp+2Ch] [bp-4h]@1
  int v8; // [sp+30h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  rn.baseclass_0.vfptr = (ListIteratorDefault<ORRecord>Vtbl *)&RecordNumber::_vftable_;
  rn.rn_Number = 0;
  *(_QWORD *)&rn.rn_column.ort_Name[12] = 0i64;
  *(_QWORD *)&rn.rn_column.ort_Name[4] = 0i64;
  *(_DWORD *)&rn.rn_column.ort_Name[0] = 0;
  strncpy(rn.rn_column.ort_Name, column, 0x14u);
  rn.rn_content = content;
  v7 = 0;
  List<ORRecord>::l_4AllInList((List<ORTable> *)&v3->ort_DataRecord, (ListIteratorDefault<ORTable> *)&rn);
  return rn.rn_Number;
}
// 9CCCFC: using guessed type int (__stdcall *RecordNumber___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF570) --------------------------------------------------------
int __thiscall ORTable::ort_RecordNum(ORTable *this)
{
  return this->ort_DataRecord.l_ListNum;
}

//----- (006DF580) --------------------------------------------------------
char __thiscall ColumnNameArgument::lid_Call(ColumnNameArgument *this, ORColumnHeader *ele, unsigned __int16 handle)
{
  ColumnNameArgument *v3; // esi@1
  char *v4; // eax@1
  char result; // al@2

  v3 = this;
  v4 = ORTokenReader::ortr_ReadString(this->cna_token);
  if ( v4 )
  {
    *(_QWORD *)&ele->orch_ColumnName.ort_Name[12] = 0i64;
    *(_QWORD *)&ele->orch_ColumnName.ort_Name[4] = 0i64;
    *(_DWORD *)&ele->orch_ColumnName.ort_Name[0] = 0;
    strncpy(ele->orch_ColumnName.ort_Name, v4, 0x14u);
    result = 1;
  }
  else
  {
    ORTokenReader::ortr_SetError(v3->cna_token, "Column type-name mismatch");
    result = 0;
  }
  return result;
}

//----- (006DF5D0) --------------------------------------------------------
void __thiscall ORColumnHeaderList::_ORColumnHeaderList(ORColumnHeaderList *this)
{
  ORColumnHeaderList *v1; // edi@1
  signed int v2; // esi@1
  ORColumnHeader *v3; // eax@2
  void *v4; // ST00_4@3

  v1 = this;
  v2 = 0;
  do
  {
    v3 = v1->orchl_fieldname[v2];
    if ( v3 )
    {
      v4 = v1->orchl_fieldname[v2];
      v3->vfptr = (ORColumnHeaderVtbl *)&ORColumnHeader::_vftable_;
      operator delete(v4);
    }
    ++v2;
  }
  while ( v2 < 128 );
}
// 9CCCB4: using guessed type int (__stdcall *ORColumnHeader___vftable_)(int, int token);

//----- (006DF600) --------------------------------------------------------
char __thiscall ORTable::ort_ReadData(ORTable *this, ORTokenReader *token)
{
  ORTable *v2; // ebx@1
  int v3; // eax@1
  ORRecord *v4; // edi@2
  char result; // al@4
  DataRecordArgument arg; // [sp+0h] [bp-18h]@8
  int v7; // [sp+14h] [bp-4h]@8

  v2 = this;
  v3 = this->ort_DataRecord.l_Finger.empty;
  if ( (_WORD)v3 != -1 )
  {
    v4 = this->ort_DataRecord.vfptr->l_AllocZ(&this->ort_DataRecord, v3);
    if ( v4 )
      goto LABEL_11;
  }
  if ( !List<ORRecord>::l_Enlargement(&v2->ort_DataRecord, 8) )
  {
    ORTokenReader::ortr_SetError(token, "Too many records");
    return 0;
  }
  if ( v2->ort_DataRecord.l_Finger.empty != -1
    && (v4 = v2->ort_DataRecord.vfptr->l_AllocZ(&v2->ort_DataRecord, v2->ort_DataRecord.l_Finger.empty)) != 0 )
  {
LABEL_11:
    ORRecord::orr_MakeBuffer(v4, v2->ort_RecordLength);
    arg.baseclass_0.vfptr = (ListIteratorDefault<ORColumnHeader>Vtbl *)&DataRecordArgument::_vftable_;
    arg.dra_token = token;
    arg.dra_datarecord = v4;
    v7 = 0;
    result = ORColumnHeaderList::orchl_4AllInList(&v2->ort_HeaderList, &arg.baseclass_0);
  }
  else
  {
    ORTokenReader::ortr_SetError(token, "Record alloc error after list enlargement");
    result = 0;
  }
  return result;
}
// 9CCC8C: using guessed type int (__stdcall *DataRecordArgument___vftable_)(int ele, __int16 handle);

//----- (006DF720) --------------------------------------------------------
char __thiscall OptionReader::or_ExecRecordIn(OptionReader *this, ORTokenReader *token)
{
  OptionReader *v2; // esi@1
  char *v3; // eax@1
  char *v5; // [sp-14h] [bp-54h]@2
  TableNameCompareArgument tname; // [sp+0h] [bp-40h]@6
  ORToken table; // [sp+1Ch] [bp-24h]@6
  unsigned int v8; // [sp+30h] [bp-10h]@1
  int v9; // [sp+3Ch] [bp-4h]@6
  int v10; // [sp+40h] [bp+0h]@1

  v8 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  v3 = ORTokenReader::ortr_ReadString(token);
  if ( !v3 )
  {
    v5 = "#recordin has no table name";
LABEL_3:
    ORErrorMessage::operator_(&v2->or_Argument.errmsg, v5);
    return 0;
  }
  *(_QWORD *)&table.ort_Name[12] = 0i64;
  *(_QWORD *)&table.ort_Name[4] = 0i64;
  *(_QWORD *)&table.ort_Name[0] = 0i64;
  strncpy(table.ort_Name, v3, 0x14u);
  *(_QWORD *)&tname.tnca_tablename.ort_Name[0] = *(_QWORD *)&table;
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[8] = *(_QWORD *)&table.ort_Name[8];
  *(_DWORD *)&tname.tnca_tablename.ort_Name[16] = *(_DWORD *)&table.ort_Name[16];
  tname.tnca_found = 0;
  v9 = 0;
  List<ORRecord>::l_4AllInList(&v2->or_TableList, &tname.baseclass_0);
  if ( !tname.tnca_found )
  {
    v5 = "Unknown table name";
    goto LABEL_3;
  }
  if ( !ORTable::ort_ReadData(tname.tnca_found, token) || !ORTokenReader::ortr_isEOL(token) )
    return 0;
  return 1;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DF820) --------------------------------------------------------
char __thiscall OptionReader::or_ExecRecord(OptionReader *this, ORTokenReader *token)
{
  ORTable *v2; // eax@1
  char result; // al@2

  v2 = this->or_CurrentTable;
  if ( v2 )
  {
    result = ORTable::ort_ReadData(v2, token) && ORTokenReader::ortr_isEOL(token);
  }
  else
  {
    ORErrorMessage::operator_(&this->or_Argument.errmsg, "Record without table");
    result = 0;
  }
  return result;
}

//----- (006DF870) --------------------------------------------------------
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, int key)
{
  OptionReader *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1
  char buf[16]; // [sp+4h] [bp-14h]@1
  unsigned int v7; // [sp+14h] [bp-4h]@1
  int v8; // [sp+18h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v3 = this;
  sprintf(buf, "%d");
  *(_QWORD *)v4 = *(_QWORD *)&table;
  *(_QWORD *)&v4[8] = *(_QWORD *)&table.ort_Name[8];
  *(_DWORD *)&v4[16] = *(_DWORD *)&table.ort_Name[16];
  return OptionReader::or_SelectFrom(v3, *(ORToken *)v4, buf);
}
// A85C00: using guessed type int __security_cookie;

//----- (006DF8E0) --------------------------------------------------------
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, int key, int *type)
{
  OptionReader *v5; // esi@1
  _BYTE v6[20]; // ST04_20@1
  char buf[16]; // [sp+Ch] [bp-14h]@1
  unsigned int v9; // [sp+1Ch] [bp-4h]@1
  int v10; // [sp+20h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v5 = this;
  sprintf(buf, "%d");
  *(_QWORD *)v6 = *(_QWORD *)&table;
  *(_QWORD *)&v6[8] = *(_QWORD *)&table.ort_Name[8];
  *(_DWORD *)&v6[16] = *(_DWORD *)&table.ort_Name[16];
  return OptionReader::or_Select(v5, targetcolumn, *(ORToken *)v6, buf, type);
}
// A85C00: using guessed type int __security_cookie;

//----- (006DF960) --------------------------------------------------------
void *__thiscall OptionReader::or_SelectFrom(OptionReader *this, ORToken table, char *column, int content, int skip)
{
  OptionReader *v5; // esi@1
  void *result; // eax@2
  ListIteratorDefault<ORTable> arg; // [sp+0h] [bp-3Ch]@1
  __int64 v8; // [sp+4h] [bp-38h]@1
  int v9; // [sp+Ch] [bp-30h]@1
  __int64 v10; // [sp+10h] [bp-2Ch]@1
  ORTable *thisa; // [sp+18h] [bp-24h]@1
  char buf[16]; // [sp+1Ch] [bp-20h]@1
  unsigned int v13; // [sp+2Ch] [bp-10h]@1
  int v14; // [sp+38h] [bp-4h]@1
  int v15; // [sp+3Ch] [bp+0h]@1

  v13 = (unsigned int)&v15 ^ __security_cookie;
  v5 = this;
  sprintf(buf, "%d");
  v8 = *(_QWORD *)&table;
  arg.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  v9 = *(_DWORD *)&table.ort_Name[8];
  v10 = *(_QWORD *)&table.ort_Name[12];
  thisa = 0;
  v14 = 0;
  List<ORRecord>::l_4AllInList(&v5->or_TableList, &arg);
  if ( thisa )
    result = ORTable::ort_RecordBuffer(thisa, column, buf, skip);
  else
    result = 0;
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DFA20) --------------------------------------------------------
void *__thiscall OptionReader::or_Select(OptionReader *this, char *targetcolumn, ORToken table, char *column, int content, int skip, int *type)
{
  OptionReader *v7; // esi@1
  _BYTE v8[20]; // ST04_20@1
  char buf[16]; // [sp+14h] [bp-14h]@1
  unsigned int v11; // [sp+24h] [bp-4h]@1
  int v12; // [sp+28h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v7 = this;
  sprintf(buf, "%d");
  *(_QWORD *)v8 = *(_QWORD *)&table;
  *(_QWORD *)&v8[8] = *(_QWORD *)&table.ort_Name[8];
  *(_DWORD *)&v8[16] = *(_DWORD *)&table.ort_Name[16];
  return OptionReader::or_Select(v7, targetcolumn, *(ORToken *)v8, column, buf, skip, type);
}
// A85C00: using guessed type int __security_cookie;

//----- (006DFAB0) --------------------------------------------------------
int __thiscall OptionReader::or_SelectCountFrom(OptionReader *this, ORToken table)
{
  int result; // eax@2
  TableNameCompareArgument tname; // [sp+0h] [bp-2Ch]@1
  unsigned int v4; // [sp+1Ch] [bp-10h]@1
  int v5; // [sp+28h] [bp-4h]@1
  int v6; // [sp+2Ch] [bp+0h]@1

  v4 = (unsigned int)&v6 ^ __security_cookie;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[0] = *(_QWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[8] = *(_QWORD *)&table.ort_Name[8];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[16] = *(_DWORD *)&table.ort_Name[16];
  tname.tnca_found = 0;
  v5 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found )
    result = tname.tnca_found->ort_DataRecord.l_ListNum;
  else
    result = -1;
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DFB50) --------------------------------------------------------
int __thiscall OptionReader::or_SelectCountFrom(OptionReader *this, ORToken table, char *column, char *content)
{
  int result; // eax@2
  ORTable *v5; // ebx@3
  TableNameCompareArgument tname; // [sp+0h] [bp-4Ch]@1
  ListIteratorDefault<ORTable> arg; // [sp+1Ch] [bp-30h]@3
  int v8; // [sp+20h] [bp-2Ch]@3
  char dest[4]; // [sp+24h] [bp-28h]@3
  int v10; // [sp+28h] [bp-24h]@3
  int v11; // [sp+2Ch] [bp-20h]@3
  int v12; // [sp+30h] [bp-1Ch]@3
  int v13; // [sp+34h] [bp-18h]@3
  char *v14; // [sp+38h] [bp-14h]@3
  unsigned int v15; // [sp+3Ch] [bp-10h]@1
  int v16; // [sp+48h] [bp-4h]@1
  int v17; // [sp+4Ch] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[0] = *(_QWORD *)&table;
  *(_QWORD *)&tname.tnca_tablename.ort_Name[8] = *(_QWORD *)&table.ort_Name[8];
  tname.baseclass_0.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&TableNameCompareArgument::_vftable_;
  *(_DWORD *)&tname.tnca_tablename.ort_Name[16] = *(_DWORD *)&table.ort_Name[16];
  tname.tnca_found = 0;
  v16 = 0;
  List<ORRecord>::l_4AllInList(&this->or_TableList, &tname.baseclass_0);
  if ( tname.tnca_found )
  {
    v5 = tname.tnca_found;
    arg.vfptr = (ListIteratorDefault<ORTable>Vtbl *)&RecordNumber::_vftable_;
    v8 = 0;
    v13 = 0;
    v12 = 0;
    v11 = 0;
    v10 = 0;
    *(_DWORD *)dest = 0;
    strncpy(dest, column, 0x14u);
    v14 = content;
    LOBYTE(v16) = 1;
    List<ORRecord>::l_4AllInList((List<ORTable> *)&v5->ort_DataRecord, &arg);
    result = v8;
  }
  else
  {
    result = -1;
  }
  return result;
}
// 9CCCAC: using guessed type int (__stdcall *TableNameCompareArgument___vftable_)(int ele, __int16 handle);
// 9CCCFC: using guessed type int (__stdcall *RecordNumber___vftable_)(int ele, __int16 handle);
// A85C00: using guessed type int __security_cookie;

//----- (006DFC30) --------------------------------------------------------
int __thiscall OptionReader::or_SelectCountFrom(OptionReader *this, ORToken table, char *column, int content)
{
  OptionReader *v4; // esi@1
  _BYTE v5[20]; // ST00_20@1
  char buf[16]; // [sp+8h] [bp-14h]@1
  unsigned int v8; // [sp+18h] [bp-4h]@1
  int v9; // [sp+1Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v4 = this;
  sprintf(buf, "%d");
  *(_QWORD *)v5 = *(_QWORD *)&table;
  *(_QWORD *)&v5[8] = *(_QWORD *)&table.ort_Name[8];
  *(_DWORD *)&v5[16] = *(_DWORD *)&table.ort_Name[16];
  return OptionReader::or_SelectCountFrom(v4, *(ORToken *)v5, column, buf);
}
// A85C00: using guessed type int __security_cookie;

//----- (006DFCA0) --------------------------------------------------------
char __thiscall List<ORRecord>::l_Enlargement(List<ORRecord> *this, int extsize)
{
  List<ORRecord> *v2; // esi@1
  ListArray<ORRecord> *v3; // eax@2
  int v4; // ebx@2
  int v5; // edi@3
  signed __int64 v6; // qax@3
  void *v7; // eax@3
  void *v8; // ebx@6
  int v9; // eax@6
  ORRecord *v11; // eax@14
  void *v12; // ecx@14
  int v13; // edx@14
  int v14; // ecx@16
  int v15; // eax@17
  int v16; // eax@19
  int v17; // ecx@19
  void *v18; // ST10_4@19
  void **v19; // ecx@19
  void *v20; // eax@19
  void *v21; // ebx@20
  ListArray<ORRecord> *v22; // edx@21
  int i; // [sp+0h] [bp-14h]@9
  int j; // [sp+4h] [bp-10h]@10
  ORRecord *extsizea; // [sp+1Ch] [bp+8h]@5

  v2 = this;
  if ( this->l_Finger.empty != -1 || (v3 = this->l_ListArray, v4 = 0, !v3) )
    return 0;
  v5 = extsize + v3->la_Size;
  v6 = 520i64 * (unsigned int)(extsize + v3->la_Size);
  v7 = operator new__(((v6 | -(BYTE4(v6) != 0)) + 4) | -__CFADD__(v6 | -(BYTE4(v6) != 0), 4));
  if ( v7 )
  {
    v4 = (int)((char *)v7 + 4);
    *(_DWORD *)v7 = v5;
    _eh_vector_constructor_iterator_(
      (char *)v7 + 4,
      0x208u,
      v5,
      (void (__thiscall *)(void *))ORRecord::ORRecord,
      (void (__thiscall *)(void *))ORRecord::_ORRecord);
  }
  extsizea = (ORRecord *)v4;
  if ( !v4 )
    return 0;
  v8 = operator new__(12 * (v5 + 1));
  v9 = 0;
  if ( !v8 )
  {
    ORRecord::_ORRecord(extsizea);
    operator delete(extsizea);
    return 0;
  }
  i = 0;
  if ( v2->l_ListArray->la_Size > 0 )
  {
    for ( j = 0; ; v9 = j )
    {
      ORRecord::l_Clone((ORRecord *)((char *)extsizea + v9), (ORRecord *)((char *)v2->l_ListArray->la_Array + v9));
      j += 520;
      ++i;
      if ( i >= v2->l_ListArray->la_Size )
        break;
    }
  }
  memcpy((char *)v8, (char *)v2->l_Array, 12 * v2->l_ListArray->la_Size);
  *((_WORD *)v8 + 6 * v2->l_Array[v2->l_Finger.store].ls_Next + 3) = v5;
  *((_WORD *)v8 + 6 * v2->l_Array[v2->l_Finger.store].ls_Prev + 2) = v5;
  if ( v5 > 0 )
  {
    v11 = extsizea;
    v12 = v8;
    v13 = v5;
    do
    {
      *(_DWORD *)v12 = v11;
      ++v11;
      v12 = (char *)v12 + 12;
      --v13;
    }
    while ( v13 );
  }
  v14 = v2->l_MaxSize;
  if ( v14 < v5 )
  {
    v15 = (int)((char *)v8 + 12 * v14 + 4);
    do
    {
      *(_WORD *)v15 = v14 + 1;
      *(_BYTE *)(v15 + 4) = 0;
      *(_WORD *)(v15 + 2) = v14++ - 1;
      v15 += 12;
    }
    while ( v14 < v5 );
  }
  *((_WORD *)v8 + 6 * v2->l_MaxSize + 3) = v5 - 1;
  *((_WORD *)v8 + 6 * v5 - 4) = v2->l_MaxSize;
  v16 = (int)((char *)v8 + 12 * v5);
  v17 = (int)&v2->l_Array[v2->l_MaxSize];
  *(_DWORD *)v16 = *(_DWORD *)v17;
  *(_DWORD *)(v16 + 4) = *(_DWORD *)(v17 + 4);
  *(_DWORD *)(v16 + 8) = *(_DWORD *)(v17 + 8);
  v18 = v2->l_Array;
  v2->l_Finger.empty = v2->l_MaxSize;
  operator delete__(v18);
  v19 = (void **)v2->l_ListArray;
  v2->l_Array = (ListStruct<ORRecord> *)v8;
  v20 = *v19;
  if ( *v19 )
  {
    v21 = (char *)v20 - 4;
    _eh_vector_destructor_iterator_(v20, 0x208u, *((_DWORD *)v20 - 1), (void (__thiscall *)(void *))ORRecord::_ORRecord);
    operator delete__(v21);
  }
  v2->l_ListArray->la_Array = extsizea;
  v22 = v2->l_ListArray;
  v2->l_MaxSize = v5;
  v22->la_Size = (unsigned __int16)v5;
  v2->l_Finger.store = v5;
  return 1;
}

//----- (006DFF10) --------------------------------------------------------
void __thiscall ORKeyList::_ORKeyList(ORKeyList *this)
{
  _eh_vector_destructor_iterator_(
    this,
    0x18u,
    1024,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (006DFF30) --------------------------------------------------------
void __thiscall ORKeyList::okl_AddKey(ORKeyList *this, ORToken *field, ORRecord *rec)
{
  int v3; // eax@1
  char *v4; // eax@2

  v3 = this->okl_KeyNum;
  if ( v3 < 1024 )
  {
    v4 = (char *)this + 24 * v3;
    *(_QWORD *)v4 = *(_QWORD *)&field->ort_Name[0];
    *((_QWORD *)v4 + 1) = *(_QWORD *)&field->ort_Name[8];
    *((_DWORD *)v4 + 4) = *(_DWORD *)&field->ort_Name[16];
    this->okl_Element[this->okl_KeyNum++].rec = rec;
  }
}

//----- (006DFF90) --------------------------------------------------------
int __cdecl ORKeyList::okl_KeyCompare(const void *a, const void *b)
{
  int v2; // edx@1
  int v3; // esi@1
  int result; // eax@2

  v2 = *(_DWORD *)b;
  v3 = *(_DWORD *)a;
  if ( *(_DWORD *)b != *(_DWORD *)a
    || (v2 = *((_DWORD *)b + 1), v3 = *((_DWORD *)a + 1), v2 != v3)
    || (v2 = *((_DWORD *)b + 2), v3 = *((_DWORD *)a + 2), v2 != v3)
    || (v2 = *((_DWORD *)b + 3), v3 = *((_DWORD *)a + 3), v2 != v3) )
    result = v2 - v3;
  else
    result = *((_DWORD *)b + 4) - *((_DWORD *)a + 4);
  return result;
}

//----- (006DFFD0) --------------------------------------------------------
void __thiscall ORKeyList::ORKeyList(ORKeyList *this)
{
  ORKeyList *v1; // esi@1

  v1 = this;
  _eh_vector_constructor_iterator_(
    this,
    0x18u,
    1024,
    (void (__thiscall *)(void *))Name5::Name5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->okl_KeyNum = 0;
}

//----- (006E0000) --------------------------------------------------------
char __thiscall ORKeyList::okl_Sorting(ORKeyList *this)
{
  int v1; // eax@1
  char result; // al@3

  v1 = this->okl_KeyNum;
  if ( v1 && v1 < 1024 )
  {
    qsort(this, v1, 0x18u, ORKeyList::okl_KeyCompare);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006E0030) --------------------------------------------------------
ORRecord *__thiscall ORKeyList::okl_Searching(ORKeyList *this, char *index)
{
  ORKeyList *v2; // esi@1
  void *v3; // eax@1
  ORRecord *result; // eax@2
  ORToken indexkey; // [sp+8h] [bp-18h]@1
  unsigned int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+20h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&indexkey.ort_Name[12] = 0i64;
  *(_QWORD *)&indexkey.ort_Name[4] = 0i64;
  *(_DWORD *)&indexkey.ort_Name[0] = 0;
  strncpy(indexkey.ort_Name, index, 0x14u);
  v3 = bsearch(&indexkey, v2, v2->okl_KeyNum, 0x18u, ORKeyList::okl_KeyCompare);
  if ( v3 )
    result = (ORRecord *)*((_DWORD *)v3 + 5);
  else
    result = 0;
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006E00B0) --------------------------------------------------------
void __thiscall ORField::ORField(ORField *this)
{
  this->vfptr = (ORFieldVtbl *)ORField::_vftable_;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E00C0) --------------------------------------------------------
void __thiscall ORField::_ORField(ORField *this)
{
  this->vfptr = (ORFieldVtbl *)ORField::_vftable_;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E00D0) --------------------------------------------------------
ORToken *__thiscall ORField::orf_ColumnName(ORField *this)
{
  return ORColumnHeader::orch_GetColumnName(this->orf_Header);
}

//----- (006E00E0) --------------------------------------------------------
void __thiscall ORField::orf_SetColumnHead(ORField *this, ORColumnHeader *hd)
{
  this->orf_Header = hd;
}

//----- (006E00F0) --------------------------------------------------------
void __thiscall ORFieldIndex::ORFieldIndex(ORFieldIndex *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)&ORFieldIndex::_vftable_;
  this->orfi_Index = 0;
}
// 9CCDA0: using guessed type int (__stdcall *ORFieldIndex___vftable_)(int contentstring, int contentindex);

//----- (006E0100) --------------------------------------------------------
void __thiscall ORFieldIndex::_ORFieldIndex(ORFieldIndex *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)ORField::_vftable_;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E0110) --------------------------------------------------------
int __thiscall ORFieldIndex::orf_Alloc(ORFieldIndex *this, char *pnt)
{
  this->orfi_Index = (ORToken *)pnt;
  return ORColumnHeader::orch_GetLength(this->baseclass_0.orf_Header);
}

//----- (006E0130) --------------------------------------------------------
void *__thiscall ORFieldIndex::orf_GetBuffer(ORFieldIndex *this)
{
  return this->orfi_Index;
}

//----- (006E0140) --------------------------------------------------------
int __thiscall ORFieldIndex::orf_GetType(ORFieldIndex *this)
{
  return 1;
}

//----- (006E0150) --------------------------------------------------------
void __thiscall ORFieldString::ORFieldString(ORFieldString *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)&ORFieldString::_vftable_;
  this->orfs_String = 0;
}
// 9CCDB8: using guessed type int (__stdcall *ORFieldString___vftable_)(int contentstring, int contentindex);

//----- (006E0160) --------------------------------------------------------
void __thiscall ORFieldString::_ORFieldString(ORFieldString *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)ORField::_vftable_;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E0170) --------------------------------------------------------
int __thiscall ORFieldString::orf_Alloc(ORFieldString *this, char *pnt)
{
  this->orfs_String = pnt;
  return ORColumnHeader::orch_GetLength(this->baseclass_0.orf_Header);
}

//----- (006E0190) --------------------------------------------------------
char __thiscall ORFieldString::orf_CompareContent(ORFieldString *this, char *contentstring, ORToken *contentindex)
{
  char result; // al@2

  if ( strcmp(this->orfs_String, contentstring) )
    result = 0;
  else
    result = 1;
  return result;
}

//----- (006E01E0) --------------------------------------------------------
void *__thiscall ORFieldString::orf_GetBuffer(ORFieldString *this)
{
  return this->orfs_String;
}

//----- (006E01F0) --------------------------------------------------------
int __thiscall ORFieldString::orf_GetType(ORFieldString *this)
{
  return 2;
}

//----- (006E0200) --------------------------------------------------------
void __thiscall ORFieldByte::ORFieldByte(ORFieldByte *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)&ORFieldByte::_vftable_;
  this->orfb_Byte = 0;
}
// 9CCDD0: using guessed type int (__stdcall *ORFieldByte___vftable_)(int num, int contentindex);

//----- (006E0210) --------------------------------------------------------
void __thiscall ORFieldByte::_ORFieldByte(ORFieldByte *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)ORField::_vftable_;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E0220) --------------------------------------------------------
int __thiscall ORFieldByte::orf_Alloc(ORFieldByte *this, char *pnt)
{
  this->orfb_Byte = pnt;
  return ORColumnHeader::orch_GetLength(this->baseclass_0.orf_Header);
}

//----- (006E0240) --------------------------------------------------------
char __thiscall ORFieldByte::orf_Read(ORFieldByte *this, ORTokenReader *token)
{
  ORFieldByte *v2; // esi@1
  int v3; // eax@1
  char v4; // al@3
  char result; // [sp+Bh] [bp-1h]@1

  v2 = this;
  result = 0;
  v3 = ORTokenReader::ortr_ReadNumber(token, &result);
  if ( result && v3 < 256 )
  {
    *v2->orfb_Byte = v3;
    v4 = 1;
  }
  else
  {
    ORTokenReader::ortr_SetError(token, "Cannot read byte data");
    v4 = 0;
  }
  return v4;
}

//----- (006E0290) --------------------------------------------------------
char __thiscall ORFieldByte::orf_CompareContent(ORFieldByte *this, char *contentstring, ORToken *contentindex)
{
  ORFieldByte *v3; // esi@1

  v3 = this;
  sscanf(contentstring, "%d");
  return contentstring == (char *)*v3->orfb_Byte;
}

//----- (006E02C0) --------------------------------------------------------
void *__thiscall ORFieldByte::orf_GetBuffer(ORFieldByte *this)
{
  return this->orfb_Byte;
}

//----- (006E02D0) --------------------------------------------------------
int __thiscall ORFieldByte::orf_GetType(ORFieldByte *this)
{
  return 3;
}

//----- (006E02E0) --------------------------------------------------------
void __thiscall ORFieldWord::ORFieldWord(ORFieldWord *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)&ORFieldWord::_vftable_;
  this->orfw_Word = 0;
}
// 9CCDE8: using guessed type int (__stdcall *ORFieldWord___vftable_)(int num, int contentindex);

//----- (006E02F0) --------------------------------------------------------
void __thiscall ORFieldWord::_ORFieldWord(ORFieldWord *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)ORField::_vftable_;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E0300) --------------------------------------------------------
int __thiscall ORFieldWord::orf_Alloc(ORFieldWord *this, char *pnt)
{
  this->orfw_Word = (unsigned __int16 *)pnt;
  return ORColumnHeader::orch_GetLength(this->baseclass_0.orf_Header);
}

//----- (006E0320) --------------------------------------------------------
char __thiscall ORFieldWord::orf_Read(ORFieldWord *this, ORTokenReader *token)
{
  ORFieldWord *v2; // esi@1
  int v3; // eax@1
  char v4; // al@3
  char result; // [sp+Bh] [bp-1h]@1

  v2 = this;
  result = 0;
  v3 = ORTokenReader::ortr_ReadNumber(token, &result);
  if ( result && v3 < 65536 )
  {
    *v2->orfw_Word = v3;
    v4 = 1;
  }
  else
  {
    ORTokenReader::ortr_SetError(token, "Cannot read word data");
    v4 = 0;
  }
  return v4;
}

//----- (006E0370) --------------------------------------------------------
char __thiscall ORFieldWord::orf_CompareContent(ORFieldWord *this, char *contentstring, ORToken *contentindex)
{
  ORFieldWord *v3; // esi@1

  v3 = this;
  sscanf(contentstring, "%d");
  return contentstring == (char *)*v3->orfw_Word;
}

//----- (006E03A0) --------------------------------------------------------
void *__thiscall ORFieldWord::orf_GetBuffer(ORFieldWord *this)
{
  return this->orfw_Word;
}

//----- (006E03B0) --------------------------------------------------------
int __thiscall ORFieldWord::orf_GetType(ORFieldWord *this)
{
  return 4;
}

//----- (006E03C0) --------------------------------------------------------
void __thiscall ORFieldDwrd::ORFieldDwrd(ORFieldDwrd *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)&ORFieldDwrd::_vftable_;
  this->orfd_Dwrd = 0;
}
// 9CCE00: using guessed type int (__stdcall *ORFieldDwrd___vftable_)(int num, int contentindex);

//----- (006E03D0) --------------------------------------------------------
void __thiscall ORFieldDwrd::_ORFieldDwrd(ORFieldDwrd *this)
{
  this->baseclass_0.vfptr = (ORFieldVtbl *)ORField::_vftable_;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E03E0) --------------------------------------------------------
int __thiscall ORFieldDwrd::orf_Alloc(ORFieldDwrd *this, char *pnt)
{
  this->orfd_Dwrd = (unsigned int *)pnt;
  return ORColumnHeader::orch_GetLength(this->baseclass_0.orf_Header);
}

//----- (006E0400) --------------------------------------------------------
char __thiscall ORFieldDwrd::orf_Read(ORFieldDwrd *this, ORTokenReader *token)
{
  ORFieldDwrd *v2; // esi@1
  int v3; // eax@1
  char v4; // al@2
  char result; // [sp+Bh] [bp-1h]@1

  v2 = this;
  result = 0;
  v3 = ORTokenReader::ortr_ReadNumber(token, &result);
  if ( result )
  {
    *v2->orfd_Dwrd = v3;
    v4 = 1;
  }
  else
  {
    ORTokenReader::ortr_SetError(token, "Cannot read dwrd data");
    v4 = 0;
  }
  return v4;
}

//----- (006E0450) --------------------------------------------------------
char __thiscall ORFieldDwrd::orf_CompareContent(ORFieldDwrd *this, char *contentstring, ORToken *contentindex)
{
  ORFieldDwrd *v3; // esi@1

  v3 = this;
  sscanf(contentstring, "%d");
  return contentstring == *(char **)v3->orfd_Dwrd;
}

//----- (006E0480) --------------------------------------------------------
void *__thiscall ORFieldDwrd::orf_GetBuffer(ORFieldDwrd *this)
{
  return this->orfd_Dwrd;
}

//----- (006E0490) --------------------------------------------------------
int __thiscall ORFieldDwrd::orf_GetType(ORFieldDwrd *this)
{
  return 5;
}

//----- (006E04A0) --------------------------------------------------------
void __thiscall ORRecord::ORRecord(ORRecord *this)
{
  this->orr_Buffer = 0;
  memset(this, 0, 0x200u);
}

//----- (006E04C0) --------------------------------------------------------
void __thiscall ORRecord::l_Clone(ORRecord *this, ORRecord *rec)
{
  memcpy(this, rec, 0x208u);
  memset(rec, 0, 0x200u);
  rec->orr_Buffer = 0;
}

//----- (006E04F0) --------------------------------------------------------
void *__thiscall ORRecord::orr_GetBuffer(ORRecord *this)
{
  return this->orr_Buffer;
}

//----- (006E0500) --------------------------------------------------------
void __thiscall ORRecord::orr_MakeBuffer(ORRecord *this, int recorelength)
{
  ORRecord *v2; // esi@1

  v2 = this;
  this->orr_Buffer = (char *)operator new__(recorelength);
  v2->orr_Pointer = 0;
}

//----- (006E0530) --------------------------------------------------------
void __thiscall ORRecord::orr_AllocMemory(ORRecord *this, ORField *cell)
{
  this->orr_Pointer += ((int (__stdcall *)(_DWORD))cell->vfptr->orf_Alloc)(&this->orr_Buffer[this->orr_Pointer]);
}

//----- (006E0560) --------------------------------------------------------
ORField *__thiscall ORRecord::orr_AllocObject(ORRecord *this, unsigned __int16 *hnd, unsigned __int16 type)
{
  ORRecord *v3; // edi@1
  signed int v4; // esi@1
  ORField *result; // eax@4

  v3 = this;
  v4 = 0;
  while ( this->orr_FieldArray[v4] )
  {
    ++v4;
    if ( v4 >= 128 )
      return 0;
  }
  switch ( type )
  {
    case 1u:
      result = (ORField *)operator new(0xCu);
      if ( !result )
        goto LABEL_16;
      result[1].vfptr = 0;
      result->vfptr = (ORFieldVtbl *)&ORFieldIndex::_vftable_;
      v3->orr_FieldArray[v4] = result;
      break;
    case 2u:
      result = (ORField *)operator new(0xCu);
      if ( !result )
        goto LABEL_16;
      result[1].vfptr = 0;
      result->vfptr = (ORFieldVtbl *)&ORFieldString::_vftable_;
      v3->orr_FieldArray[v4] = result;
      break;
    case 3u:
      result = (ORField *)operator new(0xCu);
      if ( !result )
        goto LABEL_16;
      result[1].vfptr = 0;
      result->vfptr = (ORFieldVtbl *)&ORFieldByte::_vftable_;
      v3->orr_FieldArray[v4] = result;
      break;
    case 4u:
      result = (ORField *)operator new(0xCu);
      if ( !result )
        goto LABEL_16;
      result[1].vfptr = 0;
      result->vfptr = (ORFieldVtbl *)&ORFieldWord::_vftable_;
      v3->orr_FieldArray[v4] = result;
      break;
    case 5u:
      result = (ORField *)operator new(0xCu);
      if ( !result )
      {
LABEL_16:
        v3->orr_FieldArray[v4] = 0;
        goto LABEL_17;
      }
      result[1].vfptr = 0;
      result->vfptr = (ORFieldVtbl *)&ORFieldDwrd::_vftable_;
      v3->orr_FieldArray[v4] = result;
      break;
    default:
LABEL_17:
      result = v3->orr_FieldArray[v4];
      break;
  }
  return result;
}
// 9CCDA0: using guessed type int (__stdcall *ORFieldIndex___vftable_)(int contentstring, int contentindex);
// 9CCDB8: using guessed type int (__stdcall *ORFieldString___vftable_)(int contentstring, int contentindex);
// 9CCDD0: using guessed type int (__stdcall *ORFieldByte___vftable_)(int num, int contentindex);
// 9CCDE8: using guessed type int (__stdcall *ORFieldWord___vftable_)(int num, int contentindex);
// 9CCE00: using guessed type int (__stdcall *ORFieldDwrd___vftable_)(int num, int contentindex);

//----- (006E0670) --------------------------------------------------------
char __thiscall ORRecord::orr_FreeObject(ORRecord *this, unsigned __int16 hnd, unsigned __int16 type)
{
  ORField *v3; // eax@1
  char result; // al@2
  void *v5; // ST00_4@3

  v3 = this->orr_FieldArray[hnd];
  if ( v3 )
  {
    v5 = this->orr_FieldArray[hnd];
    v3->vfptr = (ORFieldVtbl *)ORField::_vftable_;
    operator delete(v5);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E06A0) --------------------------------------------------------
char __thiscall ORRecord::orr_4AllInList(ORRecord *this, ListIteratorDefault<ORField> *arg)
{
  ORRecord *v2; // ebx@1
  signed int v3; // esi@1
  ORField *v4; // eax@2

  v2 = this;
  v3 = 0;
  while ( 1 )
  {
    v4 = v2->orr_FieldArray[v3];
    if ( v4 )
    {
      if ( !arg->vfptr->lid_Call(arg, v4, v3) )
        break;
    }
    ++v3;
    if ( v3 >= 128 )
      return 1;
  }
  return 0;
}

//----- (006E06E0) --------------------------------------------------------
char __thiscall ORFieldIndex::orf_Read(ORFieldIndex *this, ORTokenReader *token)
{
  ORFieldIndex *v2; // esi@1
  char *v3; // eax@1
  char result; // al@2
  ORToken *v5; // ST00_4@3

  v2 = this;
  v3 = ORTokenReader::ortr_ReadString(token);
  if ( v3 )
  {
    v5 = v2->orfi_Index;
    *(_DWORD *)&v5->ort_Name[16] = 0;
    *(_DWORD *)&v5->ort_Name[12] = 0;
    *(_DWORD *)&v5->ort_Name[8] = 0;
    *(_DWORD *)&v5->ort_Name[4] = 0;
    *(_DWORD *)&v5->ort_Name[0] = 0;
    strncpy(v5->ort_Name, v3, 0x14u);
    result = 1;
  }
  else
  {
    ORTokenReader::ortr_SetError(token, "Cannot read index data");
    result = 0;
  }
  return result;
}

//----- (006E0730) --------------------------------------------------------
char __thiscall ORFieldIndex::orf_CompareContent(ORFieldIndex *this, char *contentstring, ORToken *contentindex)
{
  ORToken *v3; // eax@1

  v3 = this->orfi_Index;
  return *(_DWORD *)&contentindex->ort_Name[0] == *(_DWORD *)&v3->ort_Name[0]
      && *(_DWORD *)&contentindex->ort_Name[4] == *(_DWORD *)&v3->ort_Name[4]
      && *(_DWORD *)&contentindex->ort_Name[8] == *(_DWORD *)&v3->ort_Name[8]
      && *(_DWORD *)&contentindex->ort_Name[12] == *(_DWORD *)&v3->ort_Name[12]
      && *(_DWORD *)&contentindex->ort_Name[16] == *(_DWORD *)&v3->ort_Name[16];
}

//----- (006E0770) --------------------------------------------------------
char __thiscall ORFieldString::orf_Read(ORFieldString *this, ORTokenReader *token)
{
  ORFieldString *v2; // esi@1
  char *v3; // edi@1
  char result; // al@2
  unsigned __int16 v5; // ax@3
  int v6; // eax@3

  v2 = this;
  v3 = ORTokenReader::ortr_ReadString(token);
  if ( v3 )
  {
    v5 = ORColumnHeader::orch_GetLength(v2->baseclass_0.orf_Header);
    memset(v2->orfs_String, 0, v5);
    v6 = ORColumnHeader::orch_GetLength(v2->baseclass_0.orf_Header);
    strncpy(v2->orfs_String, v3, v6);
    result = 1;
  }
  else
  {
    ORTokenReader::ortr_SetError(token, "Cannot read string data");
    result = 0;
  }
  return result;
}

//----- (006E07E0) --------------------------------------------------------
void __thiscall ORRecord::_ORRecord(ORRecord *this)
{
  ORRecord *v1; // edi@1
  signed int v2; // esi@3
  ORField *v3; // eax@4
  void *v4; // ST00_4@5

  v1 = this;
  if ( this->orr_Buffer )
    operator delete(this->orr_Buffer);
  v2 = 0;
  do
  {
    v3 = v1->orr_FieldArray[v2];
    if ( v3 )
    {
      v4 = v1->orr_FieldArray[v2];
      v3->vfptr = (ORFieldVtbl *)ORField::_vftable_;
      operator delete(v4);
    }
    ++v2;
  }
  while ( v2 < 128 );
}
// 9CCD88: using guessed type int (*ORField___vftable_[5])();

//----- (006E0830) --------------------------------------------------------
ORToken *__thiscall ORToken::ort_ToLower(ORToken *this)
{
  ORToken *result; // eax@1
  char *v2; // edx@1
  signed int v3; // esi@1
  unsigned __int8 v4; // bl@2
  char v5; // bl@5
  char v6; // bl@8
  char v7; // bl@11
  char v8; // bl@14

  result = this;
  v2 = &this->ort_Name[1];
  v3 = 4;
  do
  {
    v4 = *(v2 - 1);
    if ( v4 >= 0x41u && v4 <= 0x5Au )
      *(v2 - 1) = v4 + 32;
    v5 = *v2;
    if ( (unsigned __int8)*v2 >= 0x41u && (unsigned __int8)v5 <= 0x5Au )
      *v2 = v5 + 32;
    v6 = v2[1];
    if ( (unsigned __int8)v6 >= 0x41u && (unsigned __int8)v6 <= 0x5Au )
      v2[1] = v6 + 32;
    v7 = v2[2];
    if ( (unsigned __int8)v7 >= 0x41u && (unsigned __int8)v7 <= 0x5Au )
      v2[2] = v7 + 32;
    v8 = v2[3];
    if ( (unsigned __int8)v8 >= 0x41u )
    {
      if ( (unsigned __int8)v8 <= 0x5Au )
        v2[3] = v8 + 32;
    }
    v2 += 5;
    --v3;
  }
  while ( v3 );
  return result;
}

//----- (006E08B0) --------------------------------------------------------
void __thiscall ORLinebuffer::ORLinebuffer(ORLinebuffer *this, _iobuf *fp)
{
  this->orlb_fp = fp;
  this->orlb_Pointer = 0;
  this->orlb_LineLen = -1;
}

//----- (006E08F0) --------------------------------------------------------
char __thiscall ORLinebuffer::orlb_Lineread(ORLinebuffer *this)
{
  ORLinebuffer *v1; // esi@1
  const char *v2; // edi@1
  char result; // al@2

  v1 = this;
  v2 = this->orlb_Buffer;
  if ( fgets(this->orlb_Buffer, 2048, this->orlb_fp) )
  {
    v1->orlb_LineLen = strlen(v2);
    v1->orlb_Pointer = 0;
    result = 1;
  }
  else
  {
    v1->orlb_LineLen = -1;
    result = 0;
  }
  return result;
}

//----- (006E0940) --------------------------------------------------------
void __thiscall ORLinebuffer::orlb_Clear(ORLinebuffer *this)
{
  this->orlb_Pointer = 0;
  this->orlb_LineLen = -1;
}

//----- (006E0960) --------------------------------------------------------
void __thiscall ORLinebuffer::orlb_FunGetc(ORLinebuffer *this)
{
  int v1; // eax@1

  v1 = this->orlb_Pointer;
  if ( v1 > 0 )
    this->orlb_Pointer = v1 - 1;
}

//----- (006E0980) --------------------------------------------------------
int __thiscall ORLinebuffer::orlb_FGetc(ORLinebuffer *this)
{
  int v1; // edx@1
  int result; // eax@2

  v1 = this->orlb_Pointer;
  if ( this->orlb_LineLen >= v1 )
  {
    result = this->orlb_Buffer[v1];
    this->orlb_Pointer = v1 + 1;
  }
  else
  {
    result = 999;
  }
  return result;
}

//----- (006E09B0) --------------------------------------------------------
void __thiscall ORDelimiter::ORDelimiter(ORDelimiter *this)
{
  this->ord_Number = 0;
}

//----- (006E09D0) --------------------------------------------------------
char __thiscall ORDelimiter::operator__(ORDelimiter *this, int chr)
{
  char result; // al@2
  int v3; // edx@3
  int v4; // eax@3

  if ( chr > 32 )
  {
    v3 = this->ord_Number;
    v4 = 0;
    if ( v3 <= 0 )
    {
LABEL_6:
      result = 0;
    }
    else
    {
      while ( this->ord_Array[v4] != chr )
      {
        ++v4;
        if ( v4 >= v3 )
          goto LABEL_6;
      }
      result = 1;
    }
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006E0A10) --------------------------------------------------------
void __thiscall ORIgnore::ORIgnore(ORIgnore *this)
{
  this->ori_Number = 0;
}

//----- (006E0A30) --------------------------------------------------------
char __thiscall ORIgnore::operator__(ORIgnore *this, int chr)
{
  int v2; // edx@1
  int v3; // eax@1
  char result; // al@4

  v2 = this->ori_Number;
  v3 = 0;
  if ( v2 <= 0 )
  {
LABEL_4:
    result = 0;
  }
  else
  {
    while ( this->ori_Array[v3] != chr )
    {
      ++v3;
      if ( v3 >= v2 )
        goto LABEL_4;
    }
    result = 1;
  }
  return result;
}

//----- (006E0A60) --------------------------------------------------------
void __thiscall ORExchange::ORExchange(ORExchange *this)
{
  this->ore_Number = 0;
}

//----- (006E0A80) --------------------------------------------------------
int __thiscall ORExchange::operator__(ORExchange *this, int chr)
{
  int result; // eax@1
  int v3; // esi@1
  int v4; // edx@1

  result = chr;
  v3 = this->ore_Number;
  v4 = 0;
  if ( v3 > 0 )
  {
    while ( this->ore_Array[v4].from != chr )
    {
      ++v4;
      if ( v4 >= v3 )
        return result;
    }
    result = this->ore_Array[v4].to;
  }
  return result;
}

//----- (006E0AB0) --------------------------------------------------------
void __thiscall ORComment::ORComment(ORComment *this)
{
  this->orc_Comment = 59;
}

//----- (006E0AD0) --------------------------------------------------------
char __thiscall ORComment::operator__(ORComment *this, int chr)
{
  return chr == this->orc_Comment;
}

//----- (006E0AE0) --------------------------------------------------------
void __thiscall ORBrace::ORBrace(ORBrace *this)
{
  *(_WORD *)&this->orc_Open = 23899;
}

//----- (006E0B00) --------------------------------------------------------
char __thiscall ORBrace::orb_IsOpen(ORBrace *this, int chr)
{
  return this->orc_Open == chr;
}

//----- (006E0B10) --------------------------------------------------------
char __thiscall ORBrace::orb_IsClose(ORBrace *this, int chr)
{
  return this->orc_Close == chr;
}

//----- (006E0B40) --------------------------------------------------------
void __thiscall ORErrorMessage::orem_Clear(ORErrorMessage *this)
{
  this->orem_Line = 0;
  this->orem_Message = "Noerr";
  this->orem_Err = 0;
}

//----- (006E0B60) --------------------------------------------------------
void __thiscall ORErrorMessage::operator_(ORErrorMessage *this, char *msg)
{
  this->orem_Message = msg;
  this->orem_Err = 1;
}

//----- (006E0B80) --------------------------------------------------------
void __thiscall ORErrorMessage::orem_NextLine(ORErrorMessage *this)
{
  ++this->orem_Line;
}

//----- (006E0B90) --------------------------------------------------------
int __thiscall ORErrorMessage::orem_GetLine(ORErrorMessage *this)
{
  return this->orem_Line;
}

//----- (006E0BA0) --------------------------------------------------------
char *__thiscall ORErrorMessage::orem_GetMessage(ORErrorMessage *this)
{
  return this->orem_Message;
}

//----- (006E0BB0) --------------------------------------------------------
void __thiscall ORTokenReader::ORTokenReader(ORTokenReader *this, _iobuf *fp, TokenArgument *argument)
{
  this->ortr_LineBuffer.orlb_fp = fp;
  this->ortr_LineBuffer.orlb_Pointer = 0;
  this->ortr_LineBuffer.orlb_LineLen = -1;
  this->ortr_Argument = argument;
}

//----- (006E0BF0) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_SkipBlank(ORTokenReader *this)
{
  int v1; // edx@1
  int result; // eax@2
  TokenArgument *v3; // esi@3
  int v4; // edi@6
  int v5; // edx@6

  while ( 1 )
  {
    v1 = this->ortr_LineBuffer.orlb_Pointer;
    if ( this->ortr_LineBuffer.orlb_LineLen < v1 )
      break;
    result = this->ortr_LineBuffer.orlb_Buffer[v1];
    this->ortr_LineBuffer.orlb_Pointer = v1 + 1;
    if ( result == 999 )
      break;
    v3 = this->ortr_Argument;
    if ( result == v3->comment.orc_Comment )
    {
      this->ortr_LineBuffer.orlb_Pointer = 0;
      this->ortr_LineBuffer.orlb_LineLen = -1;
    }
    else
    {
      if ( result > 32 )
      {
        v4 = v3->delimiter.ord_Number;
        v5 = 0;
        if ( v4 <= 0 )
          return result;
        while ( v3->delimiter.ord_Array[v5] != result )
        {
          ++v5;
          if ( v5 >= v4 )
            return result;
        }
      }
    }
  }
  return 999;
}

//----- (006E0C70) --------------------------------------------------------
void __thiscall ORTokenReader::ortr_SetError(ORTokenReader *this, char *err)
{
  TokenArgument *v2; // eax@1

  v2 = this->ortr_Argument;
  v2->errmsg.orem_Message = err;
  v2->errmsg.orem_Err = 1;
}

//----- (006E0C90) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_ReadNumber8(ORTokenReader *this, char *result)
{
  int v2; // eax@1
  int v3; // esi@2
  int v4; // edx@3
  int v5; // edx@5

  v2 = 0;
  while ( 1 )
  {
    v3 = this->ortr_LineBuffer.orlb_Pointer;
    if ( this->ortr_LineBuffer.orlb_LineLen < v3 )
      break;
    v4 = this->ortr_LineBuffer.orlb_Buffer[v3];
    this->ortr_LineBuffer.orlb_Pointer = v3 + 1;
    if ( (unsigned int)(v4 - 48) > 7 )
      break;
    v2 = v4 + 8 * v2 - 48;
    *result = 1;
  }
  v5 = this->ortr_LineBuffer.orlb_Pointer;
  if ( v5 > 0 )
    this->ortr_LineBuffer.orlb_Pointer = v5 - 1;
  return v2;
}

//----- (006E0CF0) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_ReadNumber10(ORTokenReader *this, char *result)
{
  int v2; // eax@1
  int v3; // esi@2
  int v4; // edx@3
  int v5; // edx@5

  v2 = 0;
  while ( 1 )
  {
    v3 = this->ortr_LineBuffer.orlb_Pointer;
    if ( this->ortr_LineBuffer.orlb_LineLen < v3 )
      break;
    v4 = this->ortr_LineBuffer.orlb_Buffer[v3];
    this->ortr_LineBuffer.orlb_Pointer = v3 + 1;
    if ( (unsigned int)(v4 - 48) > 9 )
      break;
    v2 = v4 + 10 * v2 - 48;
    *result = 1;
  }
  v5 = this->ortr_LineBuffer.orlb_Pointer;
  if ( v5 > 0 )
    this->ortr_LineBuffer.orlb_Pointer = v5 - 1;
  return v2;
}

//----- (006E0D50) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_ReadNumber16(ORTokenReader *this, char *result)
{
  int v2; // eax@1
  int v3; // esi@2
  int v4; // edx@3
  int v5; // edx@9

  v2 = 0;
  while ( 1 )
  {
    v3 = this->ortr_LineBuffer.orlb_Pointer;
    if ( this->ortr_LineBuffer.orlb_LineLen < v3 )
      break;
    v4 = this->ortr_LineBuffer.orlb_Buffer[v3];
    this->ortr_LineBuffer.orlb_Pointer = v3 + 1;
    if ( (unsigned int)(v4 - 48) > 9 )
    {
      if ( (unsigned int)(v4 - 65) > 5 )
      {
        if ( (unsigned int)(v4 - 97) > 5 )
          break;
        v2 = v4 - 87 + 16 * v2;
        *result = 1;
      }
      else
      {
        v2 = v4 - 55 + 16 * v2;
        *result = 1;
      }
    }
    else
    {
      v2 = v4 - 48 + 16 * v2;
      *result = 1;
    }
  }
  v5 = this->ortr_LineBuffer.orlb_Pointer;
  if ( v5 > 0 )
    this->ortr_LineBuffer.orlb_Pointer = v5 - 1;
  return v2;
}

//----- (006E0DD0) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_GetOctal(ORTokenReader *this)
{
  int v1; // ebx@1
  int result; // eax@1
  signed int v3; // edi@1
  int v4; // edx@2
  int v5; // esi@3

  v1 = this->ortr_LineBuffer.orlb_LineLen;
  result = 0;
  v3 = 0;
  while ( 1 )
  {
    v4 = this->ortr_LineBuffer.orlb_Pointer;
    if ( v1 < v4 )
      break;
    v5 = this->ortr_LineBuffer.orlb_Buffer[v4];
    this->ortr_LineBuffer.orlb_Pointer = v4 + 1;
    if ( (unsigned int)(v5 - 48) > 7 )
      break;
    ++v3;
    result = v5 + 8 * result - 48;
    if ( v3 >= 3 )
      return result;
  }
  return 999;
}

//----- (006E0E20) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_GetDigit(ORTokenReader *this)
{
  int v1; // ebx@1
  int result; // eax@1
  signed int v3; // edi@1
  int v4; // edx@2
  int v5; // esi@3

  v1 = this->ortr_LineBuffer.orlb_LineLen;
  result = 0;
  v3 = 0;
  while ( 1 )
  {
    v4 = this->ortr_LineBuffer.orlb_Pointer;
    if ( v1 < v4 )
      break;
    v5 = this->ortr_LineBuffer.orlb_Buffer[v4];
    this->ortr_LineBuffer.orlb_Pointer = v4 + 1;
    if ( (unsigned int)(v5 - 48) > 9 )
      break;
    ++v3;
    result = v5 + 10 * result - 48;
    if ( v3 >= 3 )
      return result;
  }
  return 999;
}

//----- (006E0E70) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_GetHexa(ORTokenReader *this)
{
  int v1; // ebx@1
  int result; // eax@1
  signed int v3; // edi@1
  int v4; // esi@2
  int v5; // edx@3
  int v6; // edx@4

  v1 = this->ortr_LineBuffer.orlb_LineLen;
  result = 0;
  v3 = 0;
  while ( 1 )
  {
    v4 = this->ortr_LineBuffer.orlb_Pointer;
    if ( v1 < v4 )
      break;
    v5 = this->ortr_LineBuffer.orlb_Buffer[v4];
    this->ortr_LineBuffer.orlb_Pointer = v4 + 1;
    if ( (unsigned int)(v5 - 48) > 9 )
    {
      if ( (unsigned int)(v5 - 65) > 5 )
      {
        if ( (unsigned int)(v5 - 97) > 5 )
          return 999;
        v6 = v5 - 87;
      }
      else
      {
        v6 = v5 - 55;
      }
    }
    else
    {
      v6 = v5 - 48;
    }
    ++v3;
    result = v6 + 16 * result;
    if ( v3 >= 2 )
      return result;
  }
  return 999;
}

//----- (006E0EE0) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_ReadNumber(ORTokenReader *this, char *result)
{
  int v2; // eax@1
  int v3; // ecx@1
  int v4; // eax@2
  bool v5; // zf@3
  int v6; // eax@3
  int v7; // edx@8
  int v8; // eax@9

  v2 = ORTokenReader::ortr_SkipBlank(this);
  if ( v2 == 45 )
  {
    v4 = -ORTokenReader::ortr_ReadNumber((ORTokenReader *)v3, result);
  }
  else
  {
    v5 = v2 == 48;
    v6 = *(_DWORD *)(v3 + 2056);
    if ( v5 )
    {
      if ( *(_DWORD *)(v3 + 2052) >= v6 && (v7 = *(_BYTE *)(v6 + v3 + 4), *(_DWORD *)(v3 + 2056) = v6 + 1, v7 == 120) )
      {
        v4 = ORTokenReader::ortr_ReadNumber16((ORTokenReader *)v3, result);
      }
      else
      {
        v8 = *(_DWORD *)(v3 + 2056);
        if ( v8 > 0 )
          *(_DWORD *)(v3 + 2056) = v8 - 1;
        *result = 1;
        v4 = ORTokenReader::ortr_ReadNumber8((ORTokenReader *)v3, result);
      }
    }
    else
    {
      if ( v6 > 0 )
        *(_DWORD *)(v3 + 2056) = v6 - 1;
      v4 = ORTokenReader::ortr_ReadNumber10((ORTokenReader *)v3, result);
    }
  }
  return v4;
}

//----- (006E0F60) --------------------------------------------------------
char __thiscall ORTokenReader::ortr_isEOL(ORTokenReader *this)
{
  int v1; // ecx@1
  char result; // al@2
  int v3; // eax@3

  if ( ORTokenReader::ortr_SkipBlank(this) == 999 )
  {
    result = 1;
  }
  else
  {
    v3 = *(_DWORD *)(v1 + 2060);
    *(_DWORD *)(v3 + 4) = "Extra data exist";
    *(_BYTE *)(v3 + 8) = 1;
    result = 0;
  }
  return result;
}

//----- (006E0F90) --------------------------------------------------------
int __thiscall ORTokenReader::ortr_ReadChar(ORTokenReader *this)
{
  int result; // eax@1
  int v2; // ecx@1
  int v3; // ecx@2
  int v4; // eax@4
  signed int v5; // edx@5
  int v6; // ecx@14

  result = ORTokenReader::ortr_SkipBlank(this);
  if ( result == 999 )
  {
    v3 = *(_DWORD *)(v2 + 2060);
    *(_DWORD *)(v3 + 4) = "Unexpected EOF";
    *(_BYTE *)(v3 + 8) = 1;
    return result;
  }
  if ( result == 92 )
  {
    v4 = *(_DWORD *)(v2 + 2056);
    if ( *(_DWORD *)(v2 + 2052) >= v4 )
    {
      v5 = *(_BYTE *)(v4 + v2 + 4);
      *(_DWORD *)(v2 + 2056) = v4 + 1;
    }
    else
    {
      v5 = 999;
    }
    result = 999;
    if ( v5 == 100 )
    {
      result = ORTokenReader::ortr_GetDigit((ORTokenReader *)v2);
    }
    else
    {
      if ( v5 == 111 )
      {
        result = ORTokenReader::ortr_GetOctal((ORTokenReader *)v2);
      }
      else
      {
        if ( v5 != 120 )
        {
LABEL_14:
          v6 = *(_DWORD *)(v2 + 2060);
          *(_DWORD *)(v6 + 4) = "Invalid character";
          *(_BYTE *)(v6 + 8) = 1;
          return result;
        }
        result = ORTokenReader::ortr_GetHexa((ORTokenReader *)v2);
      }
    }
    if ( result < 256 )
      return result;
    goto LABEL_14;
  }
  return result;
}

//----- (006E1020) --------------------------------------------------------
char *__thiscall ORTokenReader::ortr_ReadString(ORTokenReader *this)
{
  ORTokenReader *v1; // esi@1
  int v2; // eax@2
  TokenArgument *v3; // ecx@2
  int v4; // edi@2
  int v5; // edx@2
  int v6; // ecx@7
  int v7; // eax@8
  int v8; // ebx@8
  TokenArgument *v9; // edx@9
  int v10; // edi@9
  int v11; // ecx@9
  int v12; // eax@17
  int v13; // eax@20
  int v14; // ebx@25
  TokenArgument *v15; // edi@27
  TokenArgument *v16; // esi@31
  char *result; // eax@32
  int v18; // [sp+10h] [bp-Ch]@8
  signed int i; // [sp+18h] [bp-4h]@6

  v1 = this;
  while ( 1 )
  {
    v2 = ORTokenReader::ortr_SkipBlank(v1);
    v3 = v1->ortr_Argument;
    v4 = v3->ignore.ori_Number;
    v5 = 0;
    if ( v4 <= 0 )
      break;
    while ( v3->ignore.ori_Array[v5] != v2 )
    {
      ++v5;
      if ( v5 >= v4 )
        goto LABEL_5;
    }
  }
LABEL_5:
  if ( v2 == 999 )
  {
LABEL_32:
    result = 0;
  }
  else
  {
    v1->ortr_Buffer[0] = v2;
    i = 1;
    do
    {
      v6 = v1->ortr_LineBuffer.orlb_Pointer;
      if ( v1->ortr_LineBuffer.orlb_LineLen < v6 )
        break;
      v7 = v1->ortr_LineBuffer.orlb_Buffer[v6];
      v8 = v6 + 1;
      v18 = v6 + 1;
      v1->ortr_LineBuffer.orlb_Pointer = v6 + 1;
      if ( v7 == 999 )
        break;
      v9 = v1->ortr_Argument;
      v10 = v9->ignore.ori_Number;
      v11 = 0;
      if ( v10 <= 0 )
      {
LABEL_13:
        if ( v9->brace.orc_Open == v7 || v9->brace.orc_Close == v7 )
        {
          if ( v8 > 0 )
            v1->ortr_LineBuffer.orlb_Pointer = v8 - 1;
          break;
        }
        if ( v7 == 92 )
        {
          if ( v1->ortr_LineBuffer.orlb_LineLen < v8 )
            goto LABEL_31;
          v12 = v1->ortr_LineBuffer.orlb_Buffer[v8];
          v1->ortr_LineBuffer.orlb_Pointer = v8 + 1;
          if ( v12 == 100 )
          {
            v13 = ORTokenReader::ortr_GetDigit(v1);
          }
          else
          {
            if ( v12 == 111 )
            {
              v13 = ORTokenReader::ortr_GetOctal(v1);
            }
            else
            {
              if ( v12 != 120 )
                goto LABEL_31;
              v13 = ORTokenReader::ortr_GetHexa(v1);
            }
          }
          if ( v13 >= 256 )
          {
LABEL_31:
            v16 = v1->ortr_Argument;
            v16->errmsg.orem_Message = "Invalid character";
            v16->errmsg.orem_Err = 1;
            goto LABEL_32;
          }
          v14 = v13;
        }
        else
        {
          v14 = v7;
        }
        v15 = v1->ortr_Argument;
        if ( ORDelimiter::operator__(&v15->delimiter, v14) )
          break;
        v1->ortr_Buffer[i] = ORExchange::operator__(&v15->exchange, v14);
      }
      else
      {
        while ( v9->ignore.ori_Array[v11] != v7 )
        {
          ++v11;
          if ( v11 >= v10 )
          {
            v8 = v18;
            goto LABEL_13;
          }
        }
        --i;
      }
      ++i;
    }
    while ( i < 2048 );
    v1->ortr_Buffer[i] = 0;
    result = v1->ortr_Buffer;
  }
  return result;
}

//----- (006E11C0) --------------------------------------------------------
char *__thiscall ORToken::ort_GetString(ORToken *this, char *buf)
{
  char *result; // eax@1

  result = buf;
  *(_QWORD *)buf = *(_QWORD *)&this->ort_Name[0];
  *((_QWORD *)buf + 1) = *(_QWORD *)&this->ort_Name[8];
  *((_DWORD *)buf + 4) = *(_DWORD *)&this->ort_Name[16];
  buf[20] = 0;
  return result;
}

//----- (006E11F0) --------------------------------------------------------
char __thiscall ORDelimiter::ord_Exec(ORDelimiter *this, ORTokenReader *token)
{
  ORDelimiter *v2; // esi@1
  TokenArgument *v3; // eax@2
  char result; // al@3
  int v5; // eax@4

  v2 = this;
  if ( this->ord_Number >= 32 )
  {
    v3 = token->ortr_Argument;
    v3->errmsg.orem_Message = "Too many delimiters";
    v3->errmsg.orem_Err = 1;
    return 0;
  }
  v5 = ORTokenReader::ortr_ReadChar(token);
  if ( v5 >= 256 )
    return 0;
  v2->ord_Array[v2->ord_Number] = v5;
  result = 1;
  ++v2->ord_Number;
  return result;
}

//----- (006E1240) --------------------------------------------------------
char __thiscall ORIgnore::ori_Exec(ORIgnore *this, ORTokenReader *token)
{
  ORIgnore *v2; // esi@1
  TokenArgument *v3; // eax@2
  char result; // al@3
  int v5; // eax@4

  v2 = this;
  if ( this->ori_Number >= 32 )
  {
    v3 = token->ortr_Argument;
    v3->errmsg.orem_Message = "Too many delimiters";
    v3->errmsg.orem_Err = 1;
    return 0;
  }
  v5 = ORTokenReader::ortr_ReadChar(token);
  if ( v5 >= 256 )
    return 0;
  v2->ori_Array[v2->ori_Number] = v5;
  result = 1;
  ++v2->ori_Number;
  return result;
}

//----- (006E1290) --------------------------------------------------------
char __thiscall ORExchange::ore_Exec(ORExchange *this, ORTokenReader *token)
{
  ORExchange *v2; // esi@1
  TokenArgument *v3; // eax@2
  char result; // al@2
  int v5; // eax@3
  int v6; // eax@4

  v2 = this;
  if ( this->ore_Number < 32 )
  {
    v5 = ORTokenReader::ortr_ReadChar(token);
    if ( v5 < 256 && (v2->ore_Array[v2->ore_Number].from = v5, v6 = ORTokenReader::ortr_ReadChar(token), v6 < 256) )
    {
      v2->ore_Array[v2->ore_Number].to = v6;
      result = 1;
      ++v2->ore_Number;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    v3 = token->ortr_Argument;
    v3->errmsg.orem_Message = "Too many exchange";
    v3->errmsg.orem_Err = 1;
    result = 0;
  }
  return result;
}

//----- (006E1300) --------------------------------------------------------
char __thiscall ORComment::orc_Exec(ORComment *this, ORTokenReader *token)
{
  ORComment *v2; // esi@1
  int v3; // eax@1
  char result; // al@2

  v2 = this;
  v3 = ORTokenReader::ortr_ReadChar(token);
  if ( v3 < 256 )
  {
    v2->orc_Comment = v3;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006E1330) --------------------------------------------------------
char __thiscall ORBrace::orb_Exec(ORBrace *this, ORTokenReader *token)
{
  ORBrace *v2; // esi@1
  int v3; // eax@1
  char result; // al@2
  int v5; // eax@3

  v2 = this;
  v3 = ORTokenReader::ortr_ReadChar(token);
  if ( v3 >= 256 || (v2->orc_Open = v3, v5 = ORTokenReader::ortr_ReadChar(token), v5 >= 256) )
  {
    result = 0;
  }
  else
  {
    v2->orc_Close = v5;
    result = 1;
  }
  return result;
}

//----- (006E1370) --------------------------------------------------------
void __thiscall ORErrorMessage::ORErrorMessage(ORErrorMessage *this)
{
  this->orem_Line = 0;
  this->orem_Message = "Noerr";
  this->orem_Err = 0;
}

//----- (006E1390) --------------------------------------------------------
ORToken *__thiscall ORTokenReader::ortr_ReadCommand(ORTokenReader *this, ORToken *com)
{
  ORTokenReader *v2; // esi@1
  char *v3; // edi@1
  TokenArgument *v4; // eax@3
  int v5; // eax@3
  ORTokenReader *v6; // ecx@3
  TokenArgument *v7; // esi@5
  ORToken *result; // eax@5
  TokenArgument *v9; // esi@6
  char *v10; // eax@7

  v2 = this;
  v3 = this->ortr_LineBuffer.orlb_Buffer;
  do
  {
    if ( !fgets(v3, 2048, v2->ortr_LineBuffer.orlb_fp) )
    {
      v2->ortr_LineBuffer.orlb_LineLen = -1;
      v9 = v2->ortr_Argument;
      v9->errmsg.orem_Message = "Unexpected EOF";
      v9->errmsg.orem_Err = 1;
      return 0;
    }
    v2->ortr_LineBuffer.orlb_LineLen = strlen(v3);
    v4 = v2->ortr_Argument;
    v2->ortr_LineBuffer.orlb_Pointer = 0;
    ++v4->errmsg.orem_Line;
    v5 = ORTokenReader::ortr_SkipBlank(v2);
  }
  while ( v5 == 999 );
  if ( v5 == 35 )
  {
    v10 = ORTokenReader::ortr_ReadString(v6);
    *(_QWORD *)&com->ort_Name[12] = 0i64;
    *(_QWORD *)&com->ort_Name[4] = 0i64;
    *(_DWORD *)&com->ort_Name[0] = 0;
    strncpy(com->ort_Name, v10, 0x14u);
    ORToken::ort_ToLower(com);
    result = com;
  }
  else
  {
    v7 = v2->ortr_Argument;
    v7->errmsg.orem_Message = "# comment expected";
    v7->errmsg.orem_Err = 1;
    result = 0;
  }
  return result;
}

//----- (006E1460) --------------------------------------------------------
void __thiscall WeddingEntryWin::WeddingEntryWin(WeddingEntryWin *this)
{
  WeddingEntryWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkCongratulator = 0;
  v1->m_pkBridegroom = 0;
  v1->m_pkBride = 0;
  v1->m_pkWedding = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingEntryWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingEntryWin::_vftable_;
}
// 9CCFFC: using guessed type int (__stdcall *WeddingEntryWin___vftable_)(int uiFlags);
// 9CD01C: using guessed type int (__thiscall *WeddingEntryWin___vftable_)(void *p, char);

//----- (006E14A0) --------------------------------------------------------
void __thiscall WeddingEntryWin::_WeddingEntryWin(WeddingEntryWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingEntryWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingEntryWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CCFFC: using guessed type int (__stdcall *WeddingEntryWin___vftable_)(int uiFlags);
// 9CD01C: using guessed type int (__thiscall *WeddingEntryWin___vftable_)(void *p, char);

//----- (006E14C0) --------------------------------------------------------
void __thiscall WeddingEntryWin::OnCmdGetIn(WeddingEntryWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x58u, 0, 0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (006E14F0) --------------------------------------------------------
void __thiscall WeddingEntryWin::OnCommand(WeddingEntryWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x58u, 0, 0);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  }
}

//----- (006E1540) --------------------------------------------------------
bool __thiscall WeddingEntryWin::Create(WeddingEntryWin *this, PgFrameWork *pkFrameWork)
{
  WeddingEntryWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  NiSourceTexture *v11; // eax@15
  PgSprData *v12; // eax@18
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@18
  PgFont *v15; // eax@20
  NiRefObjectVtbl *v16; // STD0_4@20
  char *v17; // STB4_4@20
  PgSprData::PgHitTester *v18; // eax@20
  unsigned int v19; // STD0_4@20
  PgFont *v20; // eax@20
  NiRefObjectVtbl *v21; // STD0_4@20
  char *v22; // STAC_4@20
  PgSprData::PgHitTester *v23; // eax@20
  unsigned int v24; // STD0_4@20
  PgFont *v25; // eax@20
  PgWinText *v26; // eax@20
  NiPointer<PgSprData::PgHitTester> *v27; // ecx@20
  unsigned int v28; // STD0_4@20
  PgFont *v29; // eax@20
  NiRefObjectVtbl *v30; // STD0_4@20
  char *v31; // STAC_4@20
  PgSprData::PgHitTester *v32; // eax@20
  unsigned int v33; // STD0_4@20
  PgFont *v34; // eax@20
  PgWinText *v35; // eax@20
  NiPointer<PgSprData::PgHitTester> *v36; // ecx@20
  unsigned int v37; // STD0_4@20
  PgFont *v38; // eax@20
  NiRefObjectVtbl *v39; // STD0_4@20
  char *v40; // STAC_4@20
  PgSprData::PgHitTester *v41; // eax@20
  unsigned int v42; // STD0_4@20
  PgFont *v43; // eax@20
  PgWinText *v44; // eax@20
  NiPointer<PgSprData::PgHitTester> *v45; // ecx@20
  unsigned int v46; // STD0_4@20
  PgFont *v47; // eax@20
  NiRefObjectVtbl *v48; // STD0_4@20
  char *v49; // STAC_4@20
  PgSprData::PgHitTester *v50; // eax@20
  unsigned int v51; // STD0_4@20
  PgFont *v52; // eax@20
  PgWinText *v53; // eax@20
  NiPointer<PgSprData::PgHitTester> *v54; // ecx@20
  unsigned int v55; // STD0_4@20
  PgFont *v56; // eax@20
  PgWinText *v57; // edi@20
  char *v58; // eax@20
  PgSprData *v59; // edi@20
  PgWinBut *v60; // eax@20
  PgWinBut *v61; // edi@20
  PgWin *v62; // STA4_4@20
  PgFont *v63; // STA0_4@20
  unsigned int v64; // ST9C_4@20
  unsigned int v65; // eax@20
  PgWinText *v66; // edi@20
  char *v67; // eax@20
  PgSprData *v68; // edi@20
  PgWinBut *v69; // eax@20
  PgWinBut *v70; // edi@20
  PgWin *v71; // STA4_4@20
  PgFont *v72; // STA0_4@20
  unsigned int v73; // ST9C_4@20
  unsigned int v74; // eax@20
  PgWinText *v75; // edi@20
  NiRefObjectVtbl *v76; // ebx@20
  char *v77; // eax@20
  const char *v78; // [sp+B0h] [bp-48h]@16
  int *v79; // [sp+B4h] [bp-44h]@16
  int *v80; // [sp+B8h] [bp-40h]@16
  NiSourceTexture *v81; // [sp+BCh] [bp-3Ch]@16
  unsigned int uiWidth; // [sp+D4h] [bp-24h]@18
  unsigned int uiHeight; // [sp+D8h] [bp-20h]@18
  int iYOff; // [sp+DCh] [bp-1Ch]@15
  NiPointer<NiNode> spNode; // [sp+E0h] [bp-18h]@1
  int uiLeft; // [sp+E4h] [bp-14h]@11
  int uiTop; // [sp+E8h] [bp-10h]@11
  int v88; // [sp+F4h] [bp-4h]@1
  PgWinText *pkTextWin; // [sp+100h] [bp+8h]@20
  PgSprData *pkTextWina; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWinb; // [sp+100h] [bp+8h]@20
  PgWinText *pkTextWinc; // [sp+100h] [bp+8h]@20
  PgSprData *pkTextWind; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWine; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWinf; // [sp+100h] [bp+8h]@20
  PgWinText *pkTextWing; // [sp+100h] [bp+8h]@20
  PgSprData *pkTextWinh; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWini; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWinj; // [sp+100h] [bp+8h]@20
  PgWinText *pkTextWink; // [sp+100h] [bp+8h]@20
  PgSprData *pkTextWinl; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWinm; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWinn; // [sp+100h] [bp+8h]@20
  PgWinText *pkTextWino; // [sp+100h] [bp+8h]@20
  PgSprData *pkTextWinp; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWinq; // [sp+100h] [bp+8h]@20
  unsigned int pkTextWinr; // [sp+100h] [bp+8h]@20
  NiRefObjectVtbl *pkTextWins; // [sp+100h] [bp+8h]@20
  NiRefObjectVtbl *pkTextWint; // [sp+100h] [bp+8h]@20

  v2 = this;
  spNode.m_pObject = 0;
  v88 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v88 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\WeddingEntry.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "WeddingProposeInputWin", 0) )
  {
    v4 = spNode.m_pObject;
    v88 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  iYOff = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v81 = v11;
    v80 = &uiTop;
    v79 = &uiLeft;
    v78 = "Theme";
  }
  else
  {
    v81 = 0;
    v80 = &uiTop;
    v79 = &uiLeft;
    v78 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v78, v79, v80, v81);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v88 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v15 = Font::Get(0);
  pkTextWin = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop,
                uiWidth,
                uiHeight,
                v15,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
  ((void (__thiscall *)(PgWinText *))pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(pkTextWin);
  ((void (__cdecl *)(__int64 *, signed int))pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
    &Color::m_kDxWinTitleColor,
    5);
  v16 = pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v17 = TextData::Get(0xE3FEFE20u);
  ((void (__thiscall *)(PgWinText *))v16[118].__vecDelDtor)(pkTextWin);
  ((void (__cdecl *)(_DWORD, char *))pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
    0,
    v17);
  pkTextWina = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, v3);
  PgSprData::Add(pkTextWina, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWina, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v10, uiTop - iYOff, pkTextWina, &v2->baseclass_0.baseclass_0.baseclass_0);
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, v3)->m_akHitTester.m_pBase->m_pObject;
  pkTextWinb = v18->m_uiHeight;
  v19 = v18->m_uiWidth;
  v20 = Font::Get(0);
  pkTextWinc = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop,
                 v19,
                 pkTextWinb,
                 v20,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
  pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWinc,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v21 = pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v22 = TextData::Get(0x2D51287Fu);
  v21[118].__vecDelDtor((NiRefObject *)pkTextWinc, (unsigned int)v22);
  ((void (__stdcall *)(_DWORD))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWind = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01_Field", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, pkTextWind, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v23 = pkTextWind->m_akHitTester.m_pBase->m_pObject;
  pkTextWine = v23->m_uiHeight;
  v24 = v23->m_uiWidth;
  v25 = Font::Get(0);
  v26 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop + 2,
          v24,
          pkTextWine,
          v25,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkBridegroom = v26;
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v26,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkBridegroom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkBridegroom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkBridegroom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCEDF);
  v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, v3)->m_akHitTester.m_pBase;
  pkTextWinf = v27->m_pObject->m_uiHeight;
  v28 = v27->m_pObject->m_uiWidth;
  v29 = Font::Get(0);
  pkTextWing = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop,
                 v28,
                 pkTextWinf,
                 v29,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
  pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWing,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v30 = pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v31 = TextData::Get(0xDE02D6EBu);
  v30[118].__vecDelDtor((NiRefObject *)pkTextWing, (unsigned int)v31);
  ((void (__stdcall *)(_DWORD))pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWinh = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02_Field", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, pkTextWinh, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v32 = pkTextWinh->m_akHitTester.m_pBase->m_pObject;
  pkTextWini = v32->m_uiHeight;
  v33 = v32->m_uiWidth;
  v34 = Font::Get(0);
  v35 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop + 2,
          v33,
          pkTextWini,
          v34,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkBride = v35;
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v35,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkBride->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkBride->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkBride->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCEE6);
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, v3)->m_akHitTester.m_pBase;
  pkTextWinj = v36->m_pObject->m_uiHeight;
  v37 = v36->m_pObject->m_uiWidth;
  v38 = Font::Get(0);
  pkTextWink = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop,
                 v37,
                 pkTextWinj,
                 v38,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
  pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWink,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v39 = pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v40 = TextData::Get(0x274B5F5Bu);
  v39[118].__vecDelDtor((NiRefObject *)pkTextWink, (unsigned int)v40);
  ((void (__stdcall *)(_DWORD))pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWinl = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03_Field", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, pkTextWinl, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v41 = pkTextWinl->m_akHitTester.m_pBase->m_pObject;
  pkTextWinm = v41->m_uiHeight;
  v42 = v41->m_uiWidth;
  v43 = Font::Get(0);
  v44 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop + 2,
          v42,
          pkTextWinm,
          v43,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkCongratulator = v44;
  v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v44,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkCongratulator->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkCongratulator->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkCongratulator->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCEE7);
  v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text04", &uiLeft, &uiTop, v3)->m_akHitTester.m_pBase;
  pkTextWinn = v45->m_pObject->m_uiHeight;
  v46 = v45->m_pObject->m_uiWidth;
  v47 = Font::Get(0);
  pkTextWino = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop,
                 v46,
                 pkTextWinn,
                 v47,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
  pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWino,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v48 = pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v49 = TextData::Get(0x86E6B8C0u);
  v48[118].__vecDelDtor((NiRefObject *)pkTextWino, (unsigned int)v49);
  ((void (__stdcall *)(_DWORD))pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWinp = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text04_Field", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, pkTextWinp, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v50 = pkTextWinp->m_akHitTester.m_pBase->m_pObject;
  pkTextWinq = v50->m_uiHeight;
  v51 = v50->m_uiWidth;
  v52 = Font::Get(0);
  v53 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop + 2,
          v51,
          pkTextWinq,
          v52,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkWedding = v53;
  v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v53,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkWedding->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkWedding->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkWedding->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCEFF);
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text05", &uiLeft, &uiTop, v3)->m_akHitTester.m_pBase;
  pkTextWinr = v54->m_pObject->m_uiHeight;
  v55 = v54->m_pObject->m_uiWidth;
  v56 = Font::Get(0);
  v57 = PgWinText::CreateWin(uiLeft - v10, uiTop, v55, pkTextWinr, v56, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v57,
    5u);
  v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v57,
    (unsigned int)&Color::m_kDxWhiteColor);
  pkTextWins = v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v58 = TextData::Get(0x759FEBE9u);
  pkTextWins[118].__vecDelDtor((NiRefObject *)v57, (unsigned int)v58);
  v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v57,
    0);
  v59 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v59, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add(v59, &spNode.m_pObject->baseclass_0, "Btn01Over");
  v60 = PgWinBut::CreateWin(uiLeft, uiTop, v59, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v61 = v60;
  v62 = (PgWin *)v60;
  v63 = Font::Get(0);
  v64 = ((int (__thiscall *)(PgWinBut *))v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v61);
  v65 = ((int (__thiscall *)(PgWinBut *))v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v61);
  v66 = PgWinText::CreateWin(0, 1, v65, v64, v63, v62, 0, 0);
  v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v66,
    5u);
  pkTextWint = v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v67 = TextData::Get(0xE71DE12Cu);
  pkTextWint[118].__vecDelDtor((NiRefObject *)v66, (unsigned int)v67);
  v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v66,
    0);
  v68 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v68, &spNode.m_pObject->baseclass_0, "Btn02Click");
  PgSprData::Add(v68, &spNode.m_pObject->baseclass_0, "Btn02Over");
  v69 = PgWinBut::CreateWin(uiLeft, uiTop, v68, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v70 = v69;
  v71 = (PgWin *)v69;
  v72 = Font::Get(0);
  v73 = ((int (__thiscall *)(PgWinBut *))v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v70);
  v74 = ((int (__thiscall *)(PgWinBut *))v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v70);
  v75 = PgWinText::CreateWin(0, 1, v74, v73, v72, v71, 0, 0);
  v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v75,
    5u);
  v76 = v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v77 = TextData::Get(0xDF01DB26u);
  v76[118].__vecDelDtor((NiRefObject *)v75, (unsigned int)v77);
  v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v75,
    0);
  ((void (__thiscall *)(WeddingEntryWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v88 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006E2060) --------------------------------------------------------
void __thiscall WeddingEntryWin::SetWeddingEntryData(WeddingEntryWin *this, PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK *pkProto)
{
  WeddingEntryWin *v2; // edi@1
  int v3; // eax@1
  int v4; // edx@1
  int v5; // ecx@1
  int v6; // eax@1
  PgWinText *v7; // ecx@1
  int v8; // eax@1
  int v9; // edx@1
  int v10; // ecx@1
  int v11; // eax@1
  PgWinText *v12; // ecx@1
  char *v13; // eax@2
  char *v14; // eax@4
  char acWeddingStart[32]; // [sp+8h] [bp-5Ch]@4
  char acEnterTime[32]; // [sp+28h] [bp-3Ch]@2
  char acname[21]; // [sp+48h] [bp-1Ch]@1
  unsigned int v18; // [sp+60h] [bp-4h]@1
  int v19; // [sp+64h] [bp+0h]@1

  v18 = (unsigned int)&v19 ^ __security_cookie;
  v2 = this;
  ((void (__stdcall *)(_UNKNOWN *))this->m_pkBridegroom->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCF06);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkBride->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCF07);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkCongratulator->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCF0E);
  ((void (__stdcall *)(_UNKNOWN *))v2->m_pkWedding->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CCF0F);
  v3 = *(_DWORD *)&pkProto->GroomID.n5_name[0];
  v4 = *(_DWORD *)&pkProto->GroomID.n5_name[8];
  *(_DWORD *)&acname[4] = *(_DWORD *)&pkProto->GroomID.n5_name[4];
  v5 = *(_DWORD *)&pkProto->GroomID.n5_name[16];
  *(_DWORD *)acname = v3;
  v6 = *(_DWORD *)&pkProto->GroomID.n5_name[12];
  *(_DWORD *)&acname[16] = v5;
  v7 = v2->m_pkBridegroom;
  *(_DWORD *)&acname[8] = v4;
  *(_DWORD *)&acname[12] = v6;
  acname[20] = 0;
  ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acname);
  v8 = *(_DWORD *)&pkProto->BrideID.n5_name[0];
  v9 = *(_DWORD *)&pkProto->BrideID.n5_name[8];
  *(_DWORD *)&acname[4] = *(_DWORD *)&pkProto->BrideID.n5_name[4];
  v10 = *(_DWORD *)&pkProto->BrideID.n5_name[16];
  *(_DWORD *)acname = v8;
  v11 = *(_DWORD *)&pkProto->BrideID.n5_name[12];
  *(_DWORD *)&acname[16] = v10;
  v12 = v2->m_pkBride;
  *(_DWORD *)&acname[8] = v9;
  *(_DWORD *)&acname[12] = v11;
  acname[20] = 0;
  ((void (__stdcall *)(_DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acname);
  if ( pkProto != (PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK *)-66 )
  {
    v13 = TextData2::Get(0xD8DB2709u);
    strftime(acEnterTime, 0x1Fu, v13, &pkProto->tm_EnterStart);
  }
  ((void (__stdcall *)(_DWORD))v2->m_pkCongratulator->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acEnterTime);
  if ( pkProto != (PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK *)-102 )
  {
    v14 = TextData2::Get(0xD8DB2709u);
    strftime(acWeddingStart, 0x1Fu, v14, &pkProto->tm_WeddingStart);
  }
  ((void (__stdcall *)(_DWORD))v2->m_pkWedding->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acWeddingStart);
}
// A85C00: using guessed type int __security_cookie;

//----- (006E21C0) --------------------------------------------------------
WeddingEntryWin *__cdecl WeddingEntryWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WeddingEntryWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x168u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WeddingEntryWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WeddingEntryWin::_vftable_;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 89) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WeddingEntryWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CCFFC: using guessed type int (__stdcall *WeddingEntryWin___vftable_)(int uiFlags);
// 9CD01C: using guessed type int (__thiscall *WeddingEntryWin___vftable_)(void *p, char);

//----- (006E2320) --------------------------------------------------------
void *__thiscall WeddingEntryWin::_scalar_deleting_destructor_(WeddingEntryWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingEntryWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingEntryWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CCFFC: using guessed type int (__stdcall *WeddingEntryWin___vftable_)(int uiFlags);
// 9CD01C: using guessed type int (__thiscall *WeddingEntryWin___vftable_)(void *p, char);

//----- (006E2360) --------------------------------------------------------
void __thiscall WeddingInfoWin::WeddingInfoWin(WeddingInfoWin *this)
{
  WeddingInfoWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingInfoWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingInfoWin::_vftable_;
  CNSTimer_Interval::CNSTimer_Interval(&v1->m_kTimerInterval);
  v1->m_pkName = 0;
  v1->m_pkLevel = 0;
  v1->m_pkLogState = 0;
  v1->m_pkInArea = 0;
  v1->m_pkWeddingState = 0;
  v1->m_pkWeddingAnniversary = 0;
}
// 9CD4A8: using guessed type int (__stdcall *WeddingInfoWin___vftable_)(int uiFlags);
// 9CD4C4: using guessed type int (__thiscall *WeddingInfoWin___vftable_)(void *p, char);

//----- (006E23F0) --------------------------------------------------------
void __thiscall WeddingInfoWin::_WeddingInfoWin(WeddingInfoWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingInfoWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CD4A8: using guessed type int (__stdcall *WeddingInfoWin___vftable_)(int uiFlags);
// 9CD4C4: using guessed type int (__thiscall *WeddingInfoWin___vftable_)(void *p, char);

//----- (006E2410) --------------------------------------------------------
void __thiscall WeddingInfoWin::OnShowWin(WeddingInfoWin *this)
{
  CLIENT_MARRYINFO *v1; // eax@1

  v1 = WeddingTask::GetMarryInfo();
  if ( v1 )
  {
    if ( v1->MarryStatus )
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x93u, 0, 0);
  }
}

//----- (006E2440) --------------------------------------------------------
void __thiscall WeddingInfoWin::OnHelpLink(WeddingInfoWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "WeddingInfo");
}

//----- (006E2470) --------------------------------------------------------
void __thiscall WeddingInfoWin::OnChangeTab(WeddingInfoWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab)
{
  char *v2; // esi@1

  v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      40,
      &eTab,
      v2);
    if ( *((_DWORD *)v2 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(40, &eTab, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 40, &eTab, v2);
}

//----- (006E24D0) --------------------------------------------------------
void __thiscall WeddingInfoWin::UpdateMeWin(WeddingInfoWin *this, float fCurTime)
{
  WeddingInfoWin *v2; // esi@1
  CLIENT_MARRYINFO *v3; // eax@1

  v2 = this;
  v3 = WeddingTask::GetMarryInfo();
  if ( v3 && v3->MarryStatus && !(v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uFlags & 1) )
  {
    if ( CNSTimer_Interval::IsRun_GetCount(&v2->m_kTimerInterval, fCurTime) )
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 4u, 0x93u, 0, 0);
  }
}

//----- (006E2520) --------------------------------------------------------
void __thiscall WeddingInfoWin::OnWinClose(WeddingInfoWin *this)
{
  WeddingInfoWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GameFrameWork::CloseCommunityWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (006E2550) --------------------------------------------------------
void __thiscall WeddingInfoWin::DeleteWedInfo(WeddingInfoWin *this, Name5 *PartnerName)
{
  WeddingInfoWin *v2; // esi@1
  CLIENT_MARRYINFO *v3; // eax@1

  v2 = this;
  v3 = WeddingTask::GetMarryInfo();
  if ( v3
    && *(_DWORD *)&v3->WifeName.n5_name[0] == *(_DWORD *)&PartnerName->n5_name[0]
    && *(_DWORD *)&v3->WifeName.n5_name[4] == *(_DWORD *)&PartnerName->n5_name[4]
    && *(_DWORD *)&v3->WifeName.n5_name[8] == *(_DWORD *)&PartnerName->n5_name[8]
    && *(_DWORD *)&v3->WifeName.n5_name[12] == *(_DWORD *)&PartnerName->n5_name[12] )
  {
    if ( *(_DWORD *)&v3->WifeName.n5_name[16] == *(_DWORD *)&PartnerName->n5_name[16] )
    {
      v3->MarryStatus = 0;
      v3->MarryDate._bf0 = 0;
      *(_DWORD *)&v3->WifeName.n5_name[0] = 0;
      *(_DWORD *)&v3->WifeName.n5_name[4] = 0;
      *(_DWORD *)&v3->WifeName.n5_name[8] = 0;
      *(_DWORD *)&v3->WifeName.n5_name[12] = 0;
      *(_DWORD *)&v3->WifeName.n5_name[16] = 0;
      v3->WifeRegistNumber = -1;
      ((void (__stdcall *)(_DWORD))v2->m_pkName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2D2);
      ((void (__stdcall *)(_DWORD))v2->m_pkLevel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2D3);
      ((void (__stdcall *)(_DWORD))v2->m_pkLogState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2E1);
      ((void (__stdcall *)(_DWORD))v2->m_pkInArea->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2E2);
      ((void (__stdcall *)(_DWORD))v2->m_pkWeddingState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2E3);
      ((void (__stdcall *)(_DWORD))v2->m_pkWeddingAnniversary->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2ED);
    }
  }
}

//----- (006E2650) --------------------------------------------------------
bool __thiscall WeddingInfoWin::Create(WeddingInfoWin *this, PgFrameWork *pkFrameWork)
{
  WeddingInfoWin *v2; // esi@1
  NiNode *v3; // esi@2
  bool result; // al@6
  NiTexturePalette *v5; // edi@7
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@14
  PgFont *v13; // eax@16
  char *v14; // eax@16
  PgSprData *v15; // eax@18
  PgFont *v16; // eax@18
  char *v17; // eax@18
  PgFont *v18; // eax@18
  char *v19; // eax@18
  NiAVObject *v20; // eax@18
  NiProperty *v21; // eax@18
  PgSprData *v22; // eax@20
  char *v23; // eax@20
  char *v24; // eax@20
  char *v25; // eax@20
  char *v26; // eax@20
  char *v27; // eax@20
  char *v28; // eax@20
  PgSprData::PgHitTester *v29; // eax@20
  PgFont *v30; // eax@20
  char *v31; // STB8_4@20
  PgSprData::PgHitTester *v32; // eax@20
  PgFont *v33; // eax@20
  char *v34; // eax@20
  PgSprData::PgHitTester *v35; // eax@20
  PgFont *v36; // eax@20
  char *v37; // eax@20
  PgSprData::PgHitTester *v38; // eax@20
  PgFont *v39; // eax@20
  char *v40; // eax@20
  PgSprData::PgHitTester *v41; // eax@20
  PgFont *v42; // eax@20
  char *v43; // eax@20
  PgSprData::PgHitTester *v44; // eax@20
  PgFont *v45; // eax@20
  char *v46; // eax@20
  PgSprData::PgHitTester *v47; // eax@20
  PgFont *v48; // eax@20
  NiTexturingProperty **v49; // eax@20
  char *v50; // eax@20
  PgSprData::PgHitTester *v51; // eax@20
  NiTexturingProperty *v52; // edx@20
  unsigned int v53; // eax@20
  PgWin *v54; // STA8_4@20
  PgFont *v55; // eax@20
  NiPointer<PgSprData::PgHitTester> *v56; // ecx@20
  unsigned int v57; // eax@20
  PgFont *v58; // eax@20
  PgWinText *v59; // eax@20
  PgSprData::PgHitTester *v60; // eax@20
  unsigned int v61; // edx@20
  PgFont *v62; // eax@20
  PgWinText *v63; // eax@20
  PgSprData::PgHitTester *v64; // eax@20
  PgFont *v65; // eax@20
  PgWinText *v66; // eax@20
  NiPointer<PgSprData::PgHitTester> *v67; // ecx@20
  PgFont *v68; // eax@20
  NiTexturingProperty **v69; // eax@20
  char *v70; // eax@20
  PgSprData::PgHitTester *v71; // eax@20
  PgFont *v72; // eax@20
  PgWinText *v73; // eax@20
  NiPointer<PgSprData::PgHitTester> *v74; // ecx@20
  PgFont *v75; // eax@20
  NiTexturingProperty **v76; // eax@20
  char *v77; // eax@20
  PgSprData::PgHitTester *v78; // eax@20
  PgFont *v79; // eax@20
  PgWinText *v80; // eax@20
  const char *v81; // [sp+B0h] [bp-48h]@12
  int *v82; // [sp+B4h] [bp-44h]@12
  int *v83; // [sp+B8h] [bp-40h]@12
  NiSourceTexture *v84; // [sp+BCh] [bp-3Ch]@12
  NiPointer<NiTexturingProperty> spTexProp; // [sp+D0h] [bp-28h]@18
  unsigned int v86; // [sp+D4h] [bp-24h]@16
  unsigned int uiWidth; // [sp+D8h] [bp-20h]@14
  unsigned int uiHeight; // [sp+DCh] [bp-1Ch]@14
  NiPointer<NiNode> spNode; // [sp+E0h] [bp-18h]@1
  int uiLeft; // [sp+E4h] [bp-14h]@10
  int uiTop; // [sp+E8h] [bp-10h]@10
  int v92; // [sp+F4h] [bp-4h]@1
  PgWinText *pkBut; // [sp+100h] [bp+8h]@16
  PgSprData *pkButa; // [sp+100h] [bp+8h]@16
  PgSprData *pkButb; // [sp+100h] [bp+8h]@17
  PgWinText *pkButc; // [sp+100h] [bp+8h]@18
  PgWinText *pkButd; // [sp+100h] [bp+8h]@18
  PgSprData *pkBute; // [sp+100h] [bp+8h]@20
  PgWinBut *pkButf; // [sp+100h] [bp+8h]@20
  PgSprData *pkButg; // [sp+100h] [bp+8h]@20
  PgWinBut *pkButh; // [sp+100h] [bp+8h]@20
  PgSprData *pkButi; // [sp+100h] [bp+8h]@20
  PgWinBut *pkButj; // [sp+100h] [bp+8h]@20
  PgSprData *pkButk; // [sp+100h] [bp+8h]@20
  PgWinBut *pkButl; // [sp+100h] [bp+8h]@20
  PgSprData *pkButm; // [sp+100h] [bp+8h]@20
  PgWinBut *pkButn; // [sp+100h] [bp+8h]@20
  PgSprData *pkButo; // [sp+100h] [bp+8h]@20
  PgWinBut *pkButp; // [sp+100h] [bp+8h]@20
  unsigned int pkButq; // [sp+100h] [bp+8h]@20
  PgWinText *pkButr; // [sp+100h] [bp+8h]@20
  unsigned int pkButs; // [sp+100h] [bp+8h]@20
  PgWinText *pkButt; // [sp+100h] [bp+8h]@20
  unsigned int pkButu; // [sp+100h] [bp+8h]@20
  PgWinText *pkButv; // [sp+100h] [bp+8h]@20
  unsigned int pkButw; // [sp+100h] [bp+8h]@20
  PgWinText *pkButx; // [sp+100h] [bp+8h]@20
  unsigned int pkButy; // [sp+100h] [bp+8h]@20
  PgWinText *pkButz; // [sp+100h] [bp+8h]@20
  unsigned int pkButba; // [sp+100h] [bp+8h]@20
  PgWinText *pkButbb; // [sp+100h] [bp+8h]@20
  unsigned int pkButbc; // [sp+100h] [bp+8h]@20
  NiTexturingProperty **pkButbd; // [sp+100h] [bp+8h]@20
  PgSprData *pkButbe; // [sp+100h] [bp+8h]@20
  unsigned int pkButbf; // [sp+100h] [bp+8h]@20
  unsigned int pkButbg; // [sp+100h] [bp+8h]@20
  NiTexturingProperty **pkButbh; // [sp+100h] [bp+8h]@20
  PgSprData *pkButbi; // [sp+100h] [bp+8h]@20
  unsigned int pkButbj; // [sp+100h] [bp+8h]@20
  unsigned int pkButbk; // [sp+100h] [bp+8h]@20
  NiTexturingProperty **pkButbl; // [sp+100h] [bp+8h]@20
  PgSprData *pkButbm; // [sp+100h] [bp+8h]@20
  unsigned int pkButbn; // [sp+100h] [bp+8h]@20

  v2 = this;
  spNode.m_pObject = 0;
  v92 = 0;
  if ( !MenuTexMgr::GetTexture(4u) )
    goto LABEL_23;
  v5 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "\\Game\\WeddingInfo.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, v5);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "WeddingInfoWin", 0) )
  {
LABEL_23:
    v3 = spNode.m_pObject;
    v92 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v84 = v10;
    v83 = &uiTop;
    v82 = &uiLeft;
    v81 = "Theme";
  }
  else
  {
    v84 = 0;
    v83 = &uiTop;
    v82 = &uiLeft;
    v81 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v81, v82, v83, v84);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v13 = Font::Get(0);
    pkBut = PgWinText::CreateWin(
              uiLeft - v8,
              uiTop,
              uiWidth,
              uiHeight,
              v13,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
    pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkBut,
      1u);
    ((void (__stdcall *)(__int64 *))pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    v86 = (unsigned int)pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v14 = TextData::Get(0xE3504941u);
    (*(void (__thiscall **)(PgWinText *, char *))(v86 + 472))(pkBut, v14);
    ((void (__stdcall *)(_DWORD))pkBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkButa = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkButa, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkButa, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkButa, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
    MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      pkButb = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, 0);
      PgSprData::Add(pkButb, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pkButb, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkButb, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, 0, 0);
    }
    v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text04", &uiLeft, &uiTop, 0);
    v16 = Font::Get(TITLEBOLD);
    pkButc = PgWinText::CreateWin(
               uiLeft - v8,
               uiTop - v9,
               uiWidth,
               uiHeight,
               v16,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
    pkButc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkButc,
      5u);
    v86 = (unsigned int)pkButc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v17 = TextData::Get(0xC8F53F44u);
    (*(void (__thiscall **)(PgWinText *, char *))(v86 + 472))(pkButc, v17);
    ((void (__stdcall *)(_DWORD))pkButc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    PgSprData::Create(&spNode.m_pObject->baseclass_0, "Category", &uiLeft, &uiTop, 0);
    v18 = Font::Get(TITLEBOLD);
    pkButd = PgWinText::CreateWin(
               uiLeft - v8,
               uiTop - v9,
               uiWidth,
               uiHeight,
               v18,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
    pkButd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkButd,
      5u);
    v86 = (unsigned int)pkButd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = TextData3::Get(0x2E4A1B0Bu);
    (*(void (__thiscall **)(_DWORD, _DWORD))(v86 + 472))(pkButd, v19);
    ((void (__stdcall *)(_DWORD))pkButd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v20 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Base");
    v21 = NiAVObject::GetProperty(v20, 8);
    spTexProp.m_pObject = (NiTexturingProperty *)v21;
    if ( v21 )
      InterlockedIncrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    LOBYTE(v92) = 1;
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Base", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkBute = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FriendNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkBute, &spNode.m_pObject->baseclass_0, "FriendClick");
    PgSprData::Add(pkBute, &spNode.m_pObject->baseclass_0, "FriendOver");
    pkButf = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkBute, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    v23 = TextData::Get(0xDCF3EDF4u);
    PgWin::SetToolTipWinText(&pkButf->baseclass_0.baseclass_0, v23);
    pkButf->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    pkButg = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkButg, &spNode.m_pObject->baseclass_0, "GuildClick");
    PgSprData::Add(pkButg, &spNode.m_pObject->baseclass_0, "GuildOver");
    pkButh = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkButg, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
    v24 = TextData::Get(0x9BEAF4F4u);
    PgWin::SetToolTipWinText(&pkButh->baseclass_0.baseclass_0, v24);
    pkButh->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    pkButi = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MasterNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkButi, &spNode.m_pObject->baseclass_0, "MasterClick");
    PgSprData::Add(pkButi, &spNode.m_pObject->baseclass_0, "MasterOver");
    pkButj = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkButi, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
    v25 = TextData::Get(0xF44C3A3Cu);
    PgWin::SetToolTipWinText(&pkButj->baseclass_0.baseclass_0, v25);
    pkButj->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    pkButk = PgSprData::Create(&spNode.m_pObject->baseclass_0, "WeddingNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkButk, &spNode.m_pObject->baseclass_0, "WeddingClick");
    PgSprData::Add(pkButk, &spNode.m_pObject->baseclass_0, "WeddingOver");
    pkButl = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkButk, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
    v26 = TextData::Get(0xC8F53F44u);
    PgWin::SetToolTipWinText(&pkButl->baseclass_0.baseclass_0, v26);
    pkButl->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    pkButm = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatchNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkButm, &spNode.m_pObject->baseclass_0, "PartyMatchClick");
    PgSprData::Add(pkButm, &spNode.m_pObject->baseclass_0, "PartyMatchOver");
    pkButn = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkButm, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
    v27 = TextData::Get(0x1C4B503Eu);
    PgWin::SetToolTipWinText(&pkButn->baseclass_0.baseclass_0, v27);
    pkButn->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    pkButo = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademyNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(pkButo, &spNode.m_pObject->baseclass_0, "GuildAcademyClick");
    PgSprData::Add(pkButo, &spNode.m_pObject->baseclass_0, "GuildAcademyOver");
    pkButp = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkButo, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
    v28 = TextData::Get(0x253B184Cu);
    PgWin::SetToolTipWinText(&pkButp->baseclass_0.baseclass_0, v28);
    pkButp->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Friend", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    pkButq = v29->m_uiHeight;
    v86 = v29->m_uiWidth;
    v30 = Font::Get(TITLEBOLD);
    pkButr = PgWinText::CreateWin(uiLeft, uiTop, v86, pkButq, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinText *))pkButr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(pkButr);
    v86 = (unsigned int)pkButr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v31 = TextData::Get(0xDCF3EDF4u);
    (*(void (__thiscall **)(PgWinText *))(v86 + 472))(pkButr);
    ((void (__cdecl *)(_DWORD, char *, signed int))pkButr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
      0,
      v31,
      1);
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HolyPromise", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    pkButs = v32->m_uiHeight;
    v86 = v32->m_uiWidth;
    v33 = Font::Get(TITLEBOLD);
    pkButt = PgWinText::CreateWin(uiLeft, uiTop, v86, pkButs, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    ((void (__thiscall *)(PgWinText *))pkButt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(pkButt);
    v86 = (unsigned int)pkButt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v34 = TextData::Get(0xF44C3A3Cu);
    (*(void (__thiscall **)(_DWORD, _DWORD))(v86 + 472))(pkButt, v34);
    ((void (__stdcall *)(_DWORD))pkButt->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    pkButu = v35->m_uiHeight;
    v86 = v35->m_uiWidth;
    v36 = Font::Get(TITLEBOLD);
    pkButv = PgWinText::CreateWin(uiLeft, uiTop, v86, pkButu, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkButv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkButv,
      1u);
    v86 = (unsigned int)pkButv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v37 = TextData::Get(0x9BEAF4F4u);
    (*(void (__thiscall **)(_DWORD, _DWORD))(v86 + 472))(pkButv, v37);
    ((void (__stdcall *)(_DWORD))pkButv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademy", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    pkButw = v38->m_uiHeight;
    v86 = v38->m_uiWidth;
    v39 = Font::Get(TITLEBOLD);
    pkButx = PgWinText::CreateWin(uiLeft, uiTop, v86, pkButw, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkButx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkButx,
      1u);
    v86 = (unsigned int)pkButx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v40 = TextData::Get(0x253B184Cu);
    (*(void (__thiscall **)(_DWORD, _DWORD))(v86 + 472))(pkButx, v40);
    ((void (__stdcall *)(_DWORD))pkButx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v41 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Wedding", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    pkButy = v41->m_uiHeight;
    v86 = v41->m_uiWidth;
    v42 = Font::Get(TITLEBOLD);
    pkButz = PgWinText::CreateWin(uiLeft, uiTop, v86, pkButy, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkButz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkButz,
      1u);
    v86 = (unsigned int)pkButz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v43 = TextData::Get(0xC8F53F44u);
    (*(void (__thiscall **)(_DWORD, _DWORD))(v86 + 472))(pkButz, v43);
    ((void (__stdcall *)(_DWORD))pkButz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatch", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    pkButba = v44->m_uiHeight;
    v86 = v44->m_uiWidth;
    v45 = Font::Get(TITLEBOLD);
    pkButbb = PgWinText::CreateWin(uiLeft, uiTop, v86, pkButba, v45, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkButbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkButbb,
      1u);
    v86 = (unsigned int)pkButbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v46 = TextData::Get(0x1C4B503Eu);
    (*(void (__thiscall **)(_DWORD, _DWORD))(v86 + 472))(pkButbb, v46);
    ((void (__stdcall *)(_DWORD))pkButbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    LOBYTE(v92) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
    pkButbc = v47->m_uiHeight;
    spTexProp.m_pObject = (NiTexturingProperty *)v47->m_uiWidth;
    v48 = Font::Get(0);
    v49 = (NiTexturingProperty **)PgWinText::CreateWin(
                                    uiLeft - v8,
                                    uiTop - v9 + 1,
                                    (unsigned int)spTexProp.m_pObject,
                                    pkButbc,
                                    v48,
                                    &v2->baseclass_0.baseclass_0.baseclass_0,
                                    0,
                                    0);
    pkButbd = v49;
    spTexProp.m_pObject = *v49;
    v50 = TextData::Get(0x3EC0776Du);
    ((void (__thiscall *)(NiTexturingProperty **, char *))spTexProp.m_pObject[6].m_pkShaderMaps)(pkButbd, v50);
    ((void (__stdcall *)(_DWORD))(*pkButbd)[3].m_kMaps.vfptr)(0);
    pkButbe = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01_Field", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkButbe, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v51 = pkButbe->m_akHitTester.m_pBase->m_pObject;
    v52 = (NiTexturingProperty *)v51->m_uiHeight;
    v53 = v51->m_uiWidth;
    v54 = g_pkToolTipWin;
    spTexProp.m_pObject = v52;
    v86 = v53;
    v55 = Font::Get(0);
    v2->m_pkName = PgWinAbbreviateText::CreateWin(
                     uiLeft - v8 + 5,
                     uiTop - v9 + 5,
                     v86,
                     (unsigned int)spTexProp.m_pObject,
                     v55,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0,
                     0,
                     1,
                     v54,
                     0x1Eu);
    v56 = pkButbe->m_akHitTester.m_pBase;
    v57 = v56->m_pObject->m_uiWidth;
    spTexProp.m_pObject = (NiTexturingProperty *)v56->m_pObject->m_uiHeight;
    v86 = v57;
    v58 = Font::Get(0);
    v59 = PgWinText::CreateWin(
            uiLeft - v8 + 5,
            uiTop - v9 + 22,
            v86,
            (unsigned int)spTexProp.m_pObject,
            v58,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkLevel = v59;
    v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v59,
      0);
    v60 = pkButbe->m_akHitTester.m_pBase->m_pObject;
    v61 = v60->m_uiWidth;
    spTexProp.m_pObject = (NiTexturingProperty *)v60->m_uiHeight;
    v86 = v61;
    v62 = Font::Get(0);
    v63 = PgWinText::CreateWin(
            uiLeft - v8 + 5,
            uiTop - v9 + 35,
            v86,
            (unsigned int)spTexProp.m_pObject,
            v62,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkLogState = v63;
    v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v63,
      0);
    v64 = pkButbe->m_akHitTester.m_pBase->m_pObject;
    pkButbf = v64->m_uiHeight;
    spTexProp.m_pObject = (NiTexturingProperty *)v64->m_uiWidth;
    v65 = Font::Get(0);
    v66 = PgWinText::CreateWin(
            uiLeft - v8 + 5,
            uiTop - v9 + 47,
            (unsigned int)spTexProp.m_pObject,
            pkButbf,
            v65,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkInArea = v66;
    v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v66,
      0);
    v67 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    pkButbg = v67->m_pObject->m_uiHeight;
    spTexProp.m_pObject = (NiTexturingProperty *)v67->m_pObject->m_uiWidth;
    v68 = Font::Get(0);
    v69 = (NiTexturingProperty **)PgWinText::CreateWin(
                                    uiLeft - v8,
                                    uiTop - v9 + 1,
                                    (unsigned int)spTexProp.m_pObject,
                                    pkButbg,
                                    v68,
                                    &v2->baseclass_0.baseclass_0.baseclass_0,
                                    0,
                                    0);
    pkButbh = v69;
    spTexProp.m_pObject = *v69;
    v70 = TextData::Get(0xD912252Fu);
    ((void (__thiscall *)(NiTexturingProperty **, char *))spTexProp.m_pObject[6].m_pkShaderMaps)(pkButbh, v70);
    ((void (__stdcall *)(_DWORD))(*pkButbh)[3].m_kMaps.vfptr)(0);
    pkButbi = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02_Field", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkButbi, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v71 = pkButbi->m_akHitTester.m_pBase->m_pObject;
    pkButbj = v71->m_uiHeight;
    spTexProp.m_pObject = (NiTexturingProperty *)v71->m_uiWidth;
    v72 = Font::Get(0);
    v73 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)spTexProp.m_pObject,
            pkButbj,
            v72,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkWeddingState = v73;
    v73->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v73,
      5u);
    ((void (__stdcall *)(_DWORD))v2->m_pkWeddingState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v74 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
    pkButbk = v74->m_pObject->m_uiHeight;
    spTexProp.m_pObject = (NiTexturingProperty *)v74->m_pObject->m_uiWidth;
    v75 = Font::Get(0);
    v76 = (NiTexturingProperty **)PgWinText::CreateWin(
                                    uiLeft - v8,
                                    uiTop - v9 + 1,
                                    (unsigned int)spTexProp.m_pObject,
                                    pkButbk,
                                    v75,
                                    &v2->baseclass_0.baseclass_0.baseclass_0,
                                    0,
                                    0);
    pkButbl = v76;
    spTexProp.m_pObject = *v76;
    v77 = TextData::Get(0x2F5A867Eu);
    ((void (__thiscall *)(_DWORD, _DWORD))spTexProp.m_pObject[6].m_pkShaderMaps)(pkButbl, v77);
    ((void (__stdcall *)(_DWORD))(*pkButbl)[3].m_kMaps.vfptr)(0);
    pkButbm = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03_Field", &uiLeft, &uiTop, 0);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop, pkButbm, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v78 = pkButbm->m_akHitTester.m_pBase->m_pObject;
    pkButbn = v78->m_uiHeight;
    spTexProp.m_pObject = (NiTexturingProperty *)v78->m_uiWidth;
    v79 = Font::Get(0);
    v80 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 1,
            (unsigned int)spTexProp.m_pObject,
            pkButbn,
            v79,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v2->m_pkWeddingAnniversary = v80;
    v80->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v80,
      5u);
    ((void (__stdcall *)(_DWORD))v2->m_pkWeddingAnniversary->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__thiscall *)(WeddingInfoWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    CNSTimer_Interval::ReSet(&v2->m_kTimerInterval, Timer::ms_fCurTime);
    v2->m_kTimerInterval.m_fCheckTime = 5.0;
    v92 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 1;
  }
  else
  {
    v92 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006E3690) --------------------------------------------------------
void __thiscall WeddingInfoWin::OnCommand(WeddingInfoWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      WeddingInfoWin::OnWinClose(this);
      break;
    case 0xCu:
      WeddingInfoWin::OnChangeTab(this, 0);
      break;
    case 0xDu:
      WeddingInfoWin::OnChangeTab(this, TE_GUILD);
      break;
    case 0xEu:
      WeddingInfoWin::OnChangeTab(this, TE_PARTYMATCH);
      break;
    case 0xFu:
      WeddingInfoWin::OnChangeTab(this, TE_HOLYPROMISE);
      break;
    case 0x10u:
      WeddingInfoWin::OnChangeTab(this, TE_GUILDACADEMY);
      break;
    case 0x11u:
      WeddingInfoWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006E3710) --------------------------------------------------------
void __thiscall WeddingInfoWin::SetWeddingInfo(WeddingInfoWin *this, PROTO_NC_CHAR_WEDDING_PARTNER_INFO_ACK *pkProto)
{
  WeddingInfoWin *v2; // esi@1
  CLIENT_MARRYINFO *v3; // eax@1
  CLIENT_MARRYINFO *v4; // edi@1
  char v5; // al@2
  int v6; // eax@5
  int v7; // edx@5
  int v8; // ecx@5
  int v9; // eax@5
  PgWinAbbreviateText *v10; // edx@5
  NiRefObjectVtbl *v11; // ST1C_4@5
  char *v12; // eax@5
  char *v13; // eax@5
  NiRefObjectVtbl *v14; // ST1C_4@5
  char *v15; // eax@5
  char *v16; // eax@5
  NiRefObjectVtbl *v17; // ST1C_4@5
  char *v18; // ST0C_4@5
  unsigned int v19; // eax@5
  int v20; // ecx@5
  char *v21; // eax@5
  NiRefObjectVtbl *v22; // edi@6
  char *v23; // eax@6
  char *v24; // eax@6
  NiRefObjectVtbl *v25; // edi@7
  char *v26; // eax@7
  char *v27; // eax@7
  PgWinText *v28; // ecx@7
  void *(__thiscall *v29)(NiRefObject *, unsigned int); // edx@7
  int v30; // eax@8
  char *v31; // eax@8
  NiRefObjectVtbl *v32; // edi@8
  char *v33; // eax@8
  char *v34; // eax@8
  NiRefObjectVtbl *v35; // edi@13
  char *v36; // eax@13
  char *v37; // [sp-4h] [bp-F8h]@3
  unsigned int v38; // [sp-4h] [bp-F8h]@10
  tm pkJoinTime; // [sp+10h] [bp-E4h]@8
  tm pkWeddingAnniversary; // [sp+34h] [bp-C0h]@5
  char acWeddingAnniversary[64]; // [sp+58h] [bp-9Ch]@5
  char acTime[64]; // [sp+98h] [bp-5Ch]@8
  char acName[21]; // [sp+D8h] [bp-1Ch]@5
  unsigned int v44; // [sp+F0h] [bp-4h]@1
  int v45; // [sp+F4h] [bp+0h]@1

  v44 = (unsigned int)&v45 ^ __security_cookie;
  v2 = this;
  v3 = WeddingTask::GetMarryInfo();
  v4 = v3;
  if ( v3 )
  {
    v5 = v3->MarryStatus;
    if ( !v4->MarryStatus )
    {
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD252);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkLevel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD253);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkLogState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD25A);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkInArea->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD25B);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkWeddingState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD26B);
      v37 = (char *)&unk_9CD272;
LABEL_15:
      v28 = v2->m_pkWeddingAnniversary;
      goto LABEL_16;
    }
    if ( v5 == 2 )
    {
      v6 = *(_DWORD *)&v4->WifeName.n5_name[0];
      v7 = *(_DWORD *)&v4->WifeName.n5_name[8];
      *(_DWORD *)&acName[4] = *(_DWORD *)&v4->WifeName.n5_name[4];
      v8 = *(_DWORD *)&v4->WifeName.n5_name[16];
      *(_DWORD *)acName = v6;
      v9 = *(_DWORD *)&v4->WifeName.n5_name[12];
      *(_DWORD *)&acName[16] = v8;
      *(_DWORD *)&acName[8] = v7;
      v10 = v2->m_pkName;
      *(_DWORD *)&acName[12] = v9;
      acName[20] = 0;
      v11 = v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v12 = TextData::Get(0xA503DADAu);
      v13 = fs(v12);
      v11[118].__vecDelDtor((NiRefObject *)v2->m_pkName, (unsigned int)v13);
      v14 = v2->m_pkLevel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v15 = TextData::Get(0xEF03E3DEu);
      v16 = fs(v15);
      v14[118].__vecDelDtor((NiRefObject *)v2->m_pkLevel, (unsigned int)v16);
      v17 = v2->m_pkWeddingState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v18 = TextData::Get(0xFD10DFDAu);
      v17[118].__vecDelDtor((NiRefObject *)v2->m_pkWeddingState, (unsigned int)v18);
      pkWeddingAnniversary.tm_min = 0;
      pkWeddingAnniversary.tm_hour = 0;
      pkWeddingAnniversary.tm_mday = 0;
      pkWeddingAnniversary.tm_year = 0;
      pkWeddingAnniversary.tm_sec = 0;
      pkWeddingAnniversary.tm_mon = 0;
      pkWeddingAnniversary.tm_wday = 0;
      pkWeddingAnniversary.tm_yday = 0;
      pkWeddingAnniversary.tm_isdst = 0;
      v19 = v4->MarryDate._bf0;
      v20 = ((unsigned int)v4->MarryDate._bf0 >> 19) & 0x3F;
      pkWeddingAnniversary.tm_year = (unsigned __int8)v4->MarryDate._bf0 + 100;
      pkWeddingAnniversary.tm_hour = v20;
      pkWeddingAnniversary.tm_min = v19 >> 25;
      pkWeddingAnniversary.tm_mday = (v19 >> 13) & 0x3F;
      pkWeddingAnniversary.tm_mon = ((v19 >> 8) & 0x1F) - 1;
      v21 = TextData2::Get(0x49121793u);
      strftime(acWeddingAnniversary, 0x3Fu, v21, &pkWeddingAnniversary);
      ((void (__stdcall *)(_DWORD))v2->m_pkWeddingAnniversary->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acWeddingAnniversary);
      if ( pkProto->PartnerInfo.Connected )
      {
        v22 = v2->m_pkLogState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        TextData::Get(0xDF0C2F2Bu);
        v23 = TextData::Get(0x3B71153Cu);
        v24 = fs(v23);
        v22[118].__vecDelDtor((NiRefObject *)v2->m_pkLogState, (unsigned int)v24);
        if ( !IIDTableBase<MapInfo_MapInfoTab_unsigned_short>::GetByID(pkProto->PartnerInfo.CurrentMap, 1) )
          return;
        v25 = v2->m_pkInArea->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v26 = TextData::Get(0x41482147u);
        v27 = fs(v26);
        v28 = v2->m_pkInArea;
        v29 = v25[118].__vecDelDtor;
        v37 = v27;
        goto LABEL_17;
      }
      pkJoinTime.tm_min = 0;
      pkJoinTime.tm_hour = 0;
      pkJoinTime.tm_mday = 0;
      pkJoinTime.tm_mon = 0;
      pkJoinTime.tm_year = 0;
      pkJoinTime.tm_sec = 0;
      pkJoinTime.tm_wday = 0;
      pkJoinTime.tm_yday = 0;
      pkJoinTime.tm_isdst = 0;
      v30 = pkProto->PartnerInfo.LastConnect._bf0;
      pkJoinTime.tm_year = (unsigned __int8)pkProto->PartnerInfo.LastConnect._bf0 + 100;
      pkJoinTime.tm_hour = ((unsigned int)v30 >> 19) & 0x3F;
      pkJoinTime.tm_mon = (((unsigned int)v30 >> 8) & 0x1F) - 1;
      pkJoinTime.tm_min = (unsigned int)v30 >> 25;
      pkJoinTime.tm_mday = ((unsigned int)v30 >> 13) & 0x3F;
      v31 = TextData2::Get(0x49121793u);
      strftime(acTime, 0x40u, v31, &pkJoinTime);
      v32 = v2->m_pkLogState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v33 = TextData::Get(0x3B71153Cu);
      v34 = fs(v33);
      v32[118].__vecDelDtor((NiRefObject *)v2->m_pkLogState, (unsigned int)v34);
      v28 = v2->m_pkInArea;
      v37 = (char *)&unk_9CD273;
LABEL_16:
      v29 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor;
LABEL_17:
      v29(&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, (unsigned int)v37);
      return;
    }
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD27A);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkLevel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD27B);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkLogState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD282);
    ((void (__stdcall *)(_UNKNOWN *))v2->m_pkInArea->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD283);
    if ( v4->MarryStatus == 1 )
    {
      v38 = -166846146;
    }
    else
    {
      if ( v4->MarryStatus != 3 )
      {
LABEL_14:
        v37 = (char *)&unk_9CD28D;
        goto LABEL_15;
      }
      v38 = -317904859;
    }
    v35 = v2->m_pkWeddingState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v36 = TextData::Get(v38);
    v35[118].__vecDelDtor((NiRefObject *)v2->m_pkWeddingState, (unsigned int)v36);
    goto LABEL_14;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006E3B70) --------------------------------------------------------
void __thiscall WeddingInfoWin::SetWeddingInfo(WeddingInfoWin *this)
{
  WeddingInfoWin *v1; // esi@1
  CLIENT_MARRYINFO *v2; // eax@1
  CLIENT_MARRYINFO *v3; // edi@1
  char v4; // al@4
  NiRefObjectVtbl *v5; // edi@6
  char *v6; // eax@6
  unsigned int v7; // [sp-4h] [bp-Ch]@5

  v1 = this;
  v2 = WeddingTask::GetMarryInfo();
  v3 = v2;
  if ( v2 )
  {
    if ( v2->MarryStatus != 2 )
    {
      ((void (__stdcall *)(_DWORD))v1->m_pkWeddingAnniversary->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD28E);
      ((void (__stdcall *)(_DWORD))v1->m_pkName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD28F);
      ((void (__stdcall *)(_DWORD))v1->m_pkLevel->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD297);
      ((void (__stdcall *)(_DWORD))v1->m_pkLogState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2A1);
      ((void (__stdcall *)(_DWORD))v1->m_pkInArea->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2A2);
    }
    v4 = v3->MarryStatus;
    if ( v3->MarryStatus == 1 )
    {
      v7 = -166846146;
LABEL_6:
      v5 = v1->m_pkWeddingState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v6 = TextData::Get(v7);
      v5[118].__vecDelDtor((NiRefObject *)v1->m_pkWeddingState, (unsigned int)v6);
      return;
    }
    if ( v4 == 3 )
    {
      v7 = -317904859;
      goto LABEL_6;
    }
    if ( v4 == 2 )
    {
      v7 = -49225766;
      goto LABEL_6;
    }
    ((void (__stdcall *)(_DWORD))v1->m_pkWeddingState->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CD2A3);
  }
}

//----- (006E3C50) --------------------------------------------------------
void __thiscall WeddingInfoWin::ChangeUserName(WeddingInfoWin *this, Name5 *OldName, Name5 *NewName)
{
  WeddingInfoWin *v3; // esi@1
  CLIENT_MARRYINFO *v4; // eax@1

  v3 = this;
  v4 = WeddingTask::GetMarryInfo();
  if ( v4
    && *(_DWORD *)&v4->WifeName.n5_name[0] == *(_DWORD *)&OldName->n5_name[0]
    && *(_DWORD *)&v4->WifeName.n5_name[4] == *(_DWORD *)&OldName->n5_name[4]
    && *(_DWORD *)&v4->WifeName.n5_name[8] == *(_DWORD *)&OldName->n5_name[8]
    && *(_DWORD *)&v4->WifeName.n5_name[12] == *(_DWORD *)&OldName->n5_name[12] )
  {
    if ( *(_DWORD *)&v4->WifeName.n5_name[16] == *(_DWORD *)&OldName->n5_name[16] )
    {
      *(_QWORD *)&v4->WifeName.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
      *(_QWORD *)&v4->WifeName.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
      *(_DWORD *)&v4->WifeName.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
      WeddingInfoWin::SetWeddingInfo(v3);
    }
  }
}

//----- (006E3CD0) --------------------------------------------------------
WeddingInfoWin *__cdecl WeddingInfoWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  WeddingInfoWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x18Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    WeddingInfoWin::WeddingInfoWin((WeddingInfoWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (WeddingInfoWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006E3E00) --------------------------------------------------------
void *__thiscall WeddingInfoWin::_scalar_deleting_destructor_(WeddingInfoWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingInfoWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingInfoWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CD4A8: using guessed type int (__stdcall *WeddingInfoWin___vftable_)(int uiFlags);
// 9CD4C4: using guessed type int (__thiscall *WeddingInfoWin___vftable_)(void *p, char);

//----- (006E3E40) --------------------------------------------------------
void __thiscall WeddingProposeInputWin::OnHelpLink(WeddingProposeInputWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "WeddingProposeInput");
}

//----- (006E3E70) --------------------------------------------------------
void __thiscall WeddingProposeInputWin::OnShowWin(WeddingProposeInputWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9CD702);
}

//----- (006E3E90) --------------------------------------------------------
void __thiscall WeddingProposeInputWin::WeddingProposeInputWin(WeddingProposeInputWin *this)
{
  WeddingProposeInputWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeInputWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeInputWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
  v1->m_pkTitle = 0;
  v1->m_pkMessage = 0;
}
// 9CD800: using guessed type int (__stdcall *WeddingProposeInputWin___vftable_)(int uiFlags);
// 9CD81C: using guessed type int (__thiscall *WeddingProposeInputWin___vftable_)(void *p, char);

//----- (006E3EC0) --------------------------------------------------------
void __thiscall WeddingProposeInputWin::_WeddingProposeInputWin(WeddingProposeInputWin *this)
{
  PgWinFrame *v1; // esi@1
  EditWin *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeInputWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeInputWin::_vftable_;
  v2 = this->m_spEdit.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9CD800: using guessed type int (__stdcall *WeddingProposeInputWin___vftable_)(int uiFlags);
// 9CD81C: using guessed type int (__thiscall *WeddingProposeInputWin___vftable_)(void *p, char);

//----- (006E3F50) --------------------------------------------------------
bool __thiscall WeddingProposeInputWin::Create(WeddingProposeInputWin *this, PgFrameWork *pkFrameWork)
{
  WeddingProposeInputWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  NiSourceTexture *v11; // eax@15
  PgSprData *v12; // eax@18
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@18
  PgSprData *v15; // eax@18
  PgFont *v16; // eax@20
  PgWinText *v17; // eax@20
  char *v18; // eax@20
  PgSprData::PgHitTester *v19; // eax@22
  PgFont *v20; // eax@22
  PgWinText *v21; // eax@22
  NiRefObjectVtbl *v22; // edi@22
  char *v23; // eax@22
  EditWin *v24; // eax@23
  PgSprData *v25; // edi@23
  PgWinBut *v26; // eax@23
  PgWinBut *v27; // edi@23
  PgWin *v28; // ST38_4@23
  PgFont *v29; // ST34_4@23
  unsigned int v30; // ST30_4@23
  unsigned int v31; // eax@23
  PgWinText *v32; // edi@23
  NiRefObjectVtbl *v33; // ebx@23
  char *v34; // eax@23
  const char *v35; // [sp+28h] [bp-44h]@16
  int *v36; // [sp+2Ch] [bp-40h]@16
  int *v37; // [sp+30h] [bp-3Ch]@16
  NiSourceTexture *v38; // [sp+34h] [bp-38h]@16
  unsigned int uiWidth; // [sp+48h] [bp-24h]@18
  unsigned int uiHeight; // [sp+4Ch] [bp-20h]@18
  unsigned int iYOff; // [sp+50h] [bp-1Ch]@15
  int uiLeft; // [sp+54h] [bp-18h]@11
  unsigned int uiTop; // [sp+58h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-10h]@1
  int v45; // [sp+68h] [bp-4h]@1
  NiRefObjectVtbl *pkTexture8a; // [sp+74h] [bp+8h]@20
  PgSprData *pkTexture8b; // [sp+74h] [bp+8h]@20
  NiSourceTexture *pkTexture8; // [sp+74h] [bp+8h]@20
  PgSprData *pkTexture8c; // [sp+74h] [bp+8h]@21
  PgSprData *pkTexture8d; // [sp+74h] [bp+8h]@22
  unsigned int pkTexture8e; // [sp+74h] [bp+8h]@22

  v2 = this;
  spNode.m_pObject = 0;
  v45 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v45 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\WeddingProposeInput.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, (int *)&uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "WeddingProposeInputWin", 0) )
  {
    v4 = spNode.m_pObject;
    v45 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  iYOff = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v38 = v11;
    v37 = (int *)&uiTop;
    v36 = &uiLeft;
    v35 = "Theme";
  }
  else
  {
    v38 = 0;
    v37 = (int *)&uiTop;
    v36 = &uiLeft;
    v35 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v35, v36, v37, v38);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, (int *)&uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, (int *)&uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, (int *)&uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, (int *)&uiTop, &uiWidth, &uiHeight) )
    goto LABEL_26;
  v16 = Font::Get(0);
  v17 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop,
          uiWidth,
          uiHeight,
          v16,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkTitle = v17;
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  ((void (__stdcall *)(__int64 *))v2->m_pkTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
  pkTexture8a = v2->m_pkTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData::Get(0x84C0B9CAu);
  pkTexture8a[118].__vecDelDtor((NiRefObject *)v2->m_pkTitle, (unsigned int)v18);
  ((void (__stdcall *)(_DWORD))v2->m_pkTitle->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTexture8b = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, (int *)&uiTop, v3);
  PgSprData::Add(pkTexture8b, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTexture8b, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v10, uiTop - iYOff, pkTexture8b, &v2->baseclass_0.baseclass_0.baseclass_0);
  pkTexture8 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTexture8c = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, (int *)&uiTop, pkTexture8);
    PgSprData::Add(pkTexture8c, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTexture8c, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - iYOff, pkTexture8c, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  pkTexture8d = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, (int *)&uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, pkTexture8d, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19 = pkTexture8d->m_akHitTester.m_pBase->m_pObject;
  pkTexture8e = v19->m_uiHeight;
  iYOff = v19->m_uiWidth;
  v20 = Font::Get(0);
  v21 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop,
          iYOff,
          pkTexture8e,
          v20,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v2->m_pkMessage = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkMessage->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  v22 = v2->m_pkMessage->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData::Get(0x20440A48u);
  v22[118].__vecDelDtor((NiRefObject *)v2->m_pkMessage, (unsigned int)v23);
  ((void (__stdcall *)(_DWORD))v2->m_pkMessage->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( !PgUtil::GetTriShapeRect(
          &spNode.m_pObject->baseclass_0,
          "Text01_Field",
          &uiLeft,
          (int *)&uiTop,
          &uiWidth,
          &uiHeight) )
  {
LABEL_26:
    v45 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v24 = EditWin::CreateWin(
          uiLeft,
          uiTop + 2,
          uiWidth,
          uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          MULTILINE,
          0x25u,
          0,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v24);
  EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
  v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, (int *)&uiTop, v3);
  PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "Btn01Over");
  v26 = PgWinBut::CreateWin(uiLeft, uiTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v27 = v26;
  v28 = (PgWin *)v26;
  v29 = Font::Get(0);
  v30 = ((int (__thiscall *)(PgWinBut *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v27);
  v31 = ((int (__thiscall *)(PgWinBut *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v27);
  v32 = PgWinText::CreateWin(0, 1, v31, v30, v29, v28, 0, 0);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v32,
    5u);
  v33 = v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v34 = TextData::Get(0xA6BE8DE4u);
  v33[118].__vecDelDtor((NiRefObject *)v32, (unsigned int)v34);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v32,
    0);
  ((void (__thiscall *)(WeddingProposeInputWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
  v45 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006E4540) --------------------------------------------------------
void __thiscall WeddingProposeInputWin::OnCmdOk(WeddingProposeInputWin *this)
{
  WeddingProposeInputWin *v1; // ebx@1
  EditWin *v2; // ecx@1
  char *v3; // eax@1
  char *v4; // eax@1
  unsigned int v5; // eax@2
  char *v6; // edi@4
  PROTO_NC_ACT_WEDDING_PROPOSEREQ_REQ kProto; // [sp+4h] [bp-2Ch]@1
  unsigned int v8; // [sp+2Ch] [bp-4h]@1
  int v9; // [sp+30h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = this->m_spEdit.m_pObject;
  *(_DWORD *)&kProto.propose_word[0] = 0;
  *(_DWORD *)&kProto.propose_word[4] = 0;
  *(_DWORD *)&kProto.propose_word[8] = 0;
  *(_DWORD *)&kProto.propose_word[12] = 0;
  *(_DWORD *)&kProto.propose_word[16] = 0;
  *(_DWORD *)&kProto.propose_word[20] = 0;
  *(_DWORD *)&kProto.propose_word[24] = 0;
  *(_DWORD *)&kProto.propose_word[28] = 0;
  *(_DWORD *)&kProto.propose_word[32] = 0;
  kProto.propose_word[36] = 0;
  v3 = (char *)((int (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v4 = TextFilterTable::FilterSlander(v3);
  if ( v4 )
  {
    memcpy(kProto.propose_word, v4, 0x24u);
    kProto.propose_word[36] = v4[36];
    v5 = g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[0];
    if ( v5 )
    {
      kProto.to = *(_WORD *)(v5 + 548);
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x4Fu, &kProto, 39);
    }
    else
    {
      v6 = TextData::Get(0xE8F3BFE1u);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v6,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
        if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v6,
            &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
        25,
        v6,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006E4640) --------------------------------------------------------
void __thiscall WeddingProposeInputWin::OnCommand(WeddingProposeInputWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@3

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "WeddingProposeInput");
    }
  }
  else
  {
    WeddingProposeInputWin::OnCmdOk(this);
  }
}

//----- (006E4680) --------------------------------------------------------
WeddingProposeInputWin *__cdecl WeddingProposeInputWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WeddingProposeInputWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x164u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WeddingProposeInputWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WeddingProposeInputWin::_vftable_;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WeddingProposeInputWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CD800: using guessed type int (__stdcall *WeddingProposeInputWin___vftable_)(int uiFlags);
// 9CD81C: using guessed type int (__thiscall *WeddingProposeInputWin___vftable_)(void *p, char);

//----- (006E47D0) --------------------------------------------------------
void *__thiscall WeddingProposeInputWin::_scalar_deleting_destructor_(WeddingProposeInputWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  EditWin *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeInputWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeInputWin::_vftable_;
  v3 = this->m_spEdit.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CD800: using guessed type int (__stdcall *WeddingProposeInputWin___vftable_)(int uiFlags);
// 9CD81C: using guessed type int (__thiscall *WeddingProposeInputWin___vftable_)(void *p, char);

//----- (006E4870) --------------------------------------------------------
void __thiscall WeddingProposeOutputWin::OnHelpLink(WeddingProposeOutputWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "WeddingProposeOutput");
}

//----- (006E48A0) --------------------------------------------------------
void __thiscall WeddingProposeOutputWin::OnCmdAgree(WeddingProposeOutputWin *this)
{
  PgWin *v1; // ebx@1
  unsigned __int16 v2; // ax@1
  EditWin *v3; // ecx@1
  char *v4; // eax@1
  char *v5; // eax@1
  PROTO_NC_ACT_WEDDING_PROPOSEACK_ACK kProto; // [sp+4h] [bp-2Ch]@1
  unsigned int v7; // [sp+2Ch] [bp-4h]@1
  int v8; // [sp+30h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = (PgWin *)this;
  v2 = this->m_kFromHandle;
  v3 = this->m_spSendEdit.m_pObject;
  kProto.from = v2;
  *(_DWORD *)&kProto.response_word[0] = 0;
  *(_DWORD *)&kProto.response_word[4] = 0;
  *(_DWORD *)&kProto.response_word[8] = 0;
  *(_DWORD *)&kProto.response_word[12] = 0;
  *(_DWORD *)&kProto.response_word[16] = 0;
  *(_DWORD *)&kProto.response_word[20] = 0;
  *(_DWORD *)&kProto.response_word[24] = 0;
  *(_DWORD *)&kProto.response_word[28] = 0;
  *(_DWORD *)&kProto.response_word[32] = 0;
  kProto.response_word[36] = 0;
  kProto.reply = 1;
  v4 = (char *)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v5 = TextFilterTable::FilterSlander(v4);
  if ( v5 )
  {
    memcpy(kProto.response_word, v5, 0x24u);
    kProto.response_word[36] = v5[36];
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x51u, &kProto, 40);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006E4940) --------------------------------------------------------
void __thiscall WeddingProposeOutputWin::OnCmdRefusal(WeddingProposeOutputWin *this)
{
  PgWin *v1; // ebx@1
  unsigned __int16 v2; // ax@1
  EditWin *v3; // ecx@1
  char *v4; // eax@1
  char *v5; // eax@1
  PROTO_NC_ACT_WEDDING_PROPOSEACK_ACK kProto; // [sp+4h] [bp-2Ch]@1
  unsigned int v7; // [sp+2Ch] [bp-4h]@1
  int v8; // [sp+30h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = (PgWin *)this;
  v2 = this->m_kFromHandle;
  v3 = this->m_spSendEdit.m_pObject;
  kProto.from = v2;
  *(_DWORD *)&kProto.response_word[0] = 0;
  *(_DWORD *)&kProto.response_word[4] = 0;
  *(_DWORD *)&kProto.response_word[8] = 0;
  *(_DWORD *)&kProto.response_word[12] = 0;
  *(_DWORD *)&kProto.response_word[16] = 0;
  *(_DWORD *)&kProto.response_word[20] = 0;
  *(_DWORD *)&kProto.response_word[24] = 0;
  *(_DWORD *)&kProto.response_word[28] = 0;
  *(_DWORD *)&kProto.response_word[32] = 0;
  kProto.response_word[36] = 0;
  kProto.reply = 0;
  v4 = (char *)((int (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v5 = TextFilterTable::FilterSlander(v4);
  if ( v5 )
  {
    memcpy(kProto.response_word, v5, 0x24u);
    kProto.response_word[36] = v5[36];
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x51u, &kProto, 40);
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006E49E0) --------------------------------------------------------
void __thiscall WeddingProposeOutputWin::WeddingProposeOutputWin(WeddingProposeOutputWin *this)
{
  WeddingProposeOutputWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeOutputWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeOutputWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
  v1->m_spSendEdit.m_pObject = 0;
  v1->m_pkAnswer = 0;
  v1->m_pkMessage = 0;
  v1->m_pkProposeMessage = 0;
}
// 9CDB7C: using guessed type int (__stdcall *WeddingProposeOutputWin___vftable_)(int uiFlags);
// 9CDB9C: using guessed type int (__thiscall *WeddingProposeOutputWin___vftable_)(void *p, char);

//----- (006E4A20) --------------------------------------------------------
void __thiscall WeddingProposeOutputWin::_WeddingProposeOutputWin(WeddingProposeOutputWin *this)
{
  WeddingProposeOutputWin *v1; // esi@1
  EditWin *v2; // edi@1
  EditWin *v3; // edi@5

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeOutputWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeOutputWin::_vftable_;
  v2 = this->m_spSendEdit.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_spEdit.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9CDB7C: using guessed type int (__stdcall *WeddingProposeOutputWin___vftable_)(int uiFlags);
// 9CDB9C: using guessed type int (__thiscall *WeddingProposeOutputWin___vftable_)(void *p, char);

//----- (006E4AD0) --------------------------------------------------------
bool __thiscall WeddingProposeOutputWin::Create(WeddingProposeOutputWin *this, PgFrameWork *pkFrameWork)
{
  WeddingProposeOutputWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // edi@15
  NiSourceTexture *v11; // eax@15
  PgSprData *v12; // eax@18
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@18
  PgSprData *v15; // eax@18
  PgFont *v16; // eax@20
  NiRefObjectVtbl *v17; // ST5C_4@20
  char *v18; // ST48_4@20
  PgSprData::PgHitTester *v19; // eax@22
  unsigned int v20; // ST5C_4@22
  PgFont *v21; // eax@22
  PgWinText *v22; // eax@22
  EditWin *v23; // eax@23
  NiPointer<PgSprData::PgHitTester> *v24; // ecx@23
  unsigned int v25; // ST5C_4@23
  PgFont *v26; // eax@23
  PgWinText *v27; // eax@23
  NiRefObjectVtbl *v28; // edi@23
  char *v29; // eax@23
  EditWin *v30; // eax@24
  PgSprData *v31; // edi@24
  PgWinBut *v32; // eax@24
  PgWinBut *v33; // edi@24
  PgWin *v34; // ST40_4@24
  PgFont *v35; // ST3C_4@24
  unsigned int v36; // ST38_4@24
  unsigned int v37; // eax@24
  PgWinText *v38; // edi@24
  PgSprData *v39; // edi@24
  PgWinBut *v40; // eax@24
  PgWinBut *v41; // edi@24
  PgWin *v42; // ST34_4@24
  PgFont *v43; // ST30_4@24
  unsigned int v44; // ST2C_4@24
  unsigned int v45; // eax@24
  PgWinText *v46; // edi@24
  NiRefObjectVtbl *v47; // ebx@24
  char *v48; // eax@24
  const char *v49; // [sp+3Ch] [bp-48h]@16
  int *v50; // [sp+40h] [bp-44h]@16
  int *v51; // [sp+44h] [bp-40h]@16
  NiSourceTexture *v52; // [sp+48h] [bp-3Ch]@16
  int iYOff; // [sp+60h] [bp-24h]@15
  unsigned int uiWidth; // [sp+64h] [bp-20h]@18
  unsigned int uiHeight; // [sp+68h] [bp-1Ch]@18
  NiPointer<NiNode> spNode; // [sp+6Ch] [bp-18h]@1
  int uiLeft; // [sp+70h] [bp-14h]@11
  int uiTop; // [sp+74h] [bp-10h]@11
  int v59; // [sp+80h] [bp-4h]@1
  PgWinText *pkTextWina; // [sp+8Ch] [bp+8h]@20
  NiSourceTexture *pkTextWin; // [sp+8Ch] [bp+8h]@20
  PgSprData *pkTextWinb; // [sp+8Ch] [bp+8h]@21
  PgSprData *pkTextWinc; // [sp+8Ch] [bp+8h]@22
  unsigned int pkTextWind; // [sp+8Ch] [bp+8h]@22
  PgSprData *pkTextWine; // [sp+8Ch] [bp+8h]@23
  unsigned int pkTextWinf; // [sp+8Ch] [bp+8h]@23
  NiRefObjectVtbl *pkTextWing; // [sp+8Ch] [bp+8h]@24

  v2 = this;
  spNode.m_pObject = 0;
  v59 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v59 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\WeddingProposeOutput.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "WeddingProposeOutputWin", 0) )
  {
    v4 = spNode.m_pObject;
    v59 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  iYOff = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v52 = v11;
    v51 = &uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  else
  {
    v52 = 0;
    v51 = &uiTop;
    v50 = &uiLeft;
    v49 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v49, v50, v51, v52);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_27;
  v16 = Font::Get(0);
  pkTextWina = PgWinText::CreateWin(
                 uiLeft - v10,
                 uiTop,
                 uiWidth,
                 uiHeight,
                 v16,
                 &v2->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
  pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)pkTextWina,
    5u);
  ((void (__stdcall *)(__int64 *))pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
  v17 = pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v18 = TextData::Get(0x84C0B9CAu);
  v17[118].__vecDelDtor((NiRefObject *)pkTextWina, (unsigned int)v18);
  ((void (__stdcall *)(_DWORD))pkTextWina->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  pkTextWin = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWinb = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTextWin);
    PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWinb, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop, pkTextWinb, &v2->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
  }
  pkTextWinc = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, pkTextWinc, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v19 = pkTextWinc->m_akHitTester.m_pBase->m_pObject;
  pkTextWind = v19->m_uiHeight;
  v20 = v19->m_uiWidth;
  v21 = Font::Get(0);
  v22 = PgWinText::CreateWin(uiLeft - v10, uiTop, v20, pkTextWind, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkMessage = v22;
  v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v22,
    5u);
  ((void (__stdcall *)(D3DXCOLOR *))v2->m_pkMessage->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkMessage->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01_Field", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v23 = EditWin::CreateWin(
                uiLeft,
                uiTop + 2,
                uiWidth,
                uiHeight,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                MULTILINE,
                0x25u,
                0,
                1,
                0,
                0),
        NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v23),
        EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN),
        pkTextWine = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, v3),
        PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, pkTextWine, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0),
        v24 = pkTextWine->m_akHitTester.m_pBase,
        pkTextWinf = v24->m_pObject->m_uiHeight,
        v25 = v24->m_pObject->m_uiWidth,
        v26 = Font::Get(0),
        v27 = PgWinText::CreateWin(
                uiLeft - v10,
                uiTop,
                v25,
                pkTextWinf,
                v26,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0),
        v2->m_pkAnswer = v27,
        v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)v27,
          5u),
        v28 = v2->m_pkAnswer->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v29 = TextData::Get(0x20ADDDEu),
        v28[118].__vecDelDtor((NiRefObject *)v2->m_pkAnswer, (unsigned int)v29),
        ((void (__stdcall *)(_DWORD))v2->m_pkAnswer->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text02_Field", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
LABEL_27:
    v59 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v30 = EditWin::CreateWin(
          uiLeft,
          uiTop + 2,
          uiWidth,
          uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          NORMAL,
          0x14u,
          1u,
          1,
          0,
          1);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spSendEdit, (NiD3DDefaultShader *)v30);
  EditWin::SetImeStatus(v2->m_spSendEdit.m_pObject, IS_KOREAN);
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v31, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add(v31, &spNode.m_pObject->baseclass_0, "Btn01Over");
  v32 = PgWinBut::CreateWin(uiLeft, uiTop, v31, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v33 = v32;
  v34 = (PgWin *)v32;
  v35 = Font::Get(0);
  v36 = ((int (__thiscall *)(PgWinBut *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v33);
  v37 = ((int (__thiscall *)(PgWinBut *))v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v33);
  v38 = PgWinText::CreateWin(0, 1, v37, v36, v35, v34, 0, 0);
  ((void (__thiscall *)(PgWinText *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v38);
  pkTextWing = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData::Get(0xDD03DFE0u);
  ((void (__thiscall *)(PgWinText *))pkTextWing[118].__vecDelDtor)(v38);
  ((void (__thiscall *)(PgWinText *))v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v38);
  v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, v3);
  PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Btn02Click");
  PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Btn02Over");
  v40 = PgWinBut::CreateWin(uiLeft, uiTop, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v41 = v40;
  v42 = (PgWin *)v40;
  v43 = Font::Get(0);
  v44 = ((int (__thiscall *)(PgWinBut *))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v41);
  v45 = ((int (__thiscall *)(PgWinBut *))v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v41);
  v46 = PgWinText::CreateWin(0, 1, v45, v44, v43, v42, 0, 0);
  ((void (__thiscall *)(PgWinText *))v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v46);
  v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v48 = TextData::Get(0xFC131F1Fu);
  v47[118].__vecDelDtor((NiRefObject *)v46, (unsigned int)v48);
  v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v46,
    0);
  ((void (__thiscall *)(WeddingProposeOutputWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  v59 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006E5230) --------------------------------------------------------
void __thiscall WeddingProposeOutputWin::OnCommand(WeddingProposeOutputWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@4

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      WeddingProposeOutputWin::OnCmdRefusal(this);
    }
    else
    {
      if ( wParam == 2 )
      {
        v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        if ( v3 )
          GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "WeddingProposeOutput");
      }
    }
  }
  else
  {
    WeddingProposeOutputWin::OnCmdAgree(this);
  }
}

//----- (006E5280) --------------------------------------------------------
void __thiscall WeddingProposeOutputWin::SetProposeData(WeddingProposeOutputWin *this, PROTO_NC_ACT_WEDDING_PROPOSEACK_REQ *pkProto)
{
  WeddingProposeOutputWin *v2; // esi@1
  Char *v3; // eax@1
  NiRefObjectVtbl *v4; // ebx@1
  char *v5; // eax@1
  char *v6; // eax@1

  v2 = this;
  this->m_kFromHandle = pkProto->from;
  v3 = CharMgr::GetChar(&g_kCharMgr, pkProto->from);
  v4 = v2->m_pkMessage->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  ((void (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v3);
  v5 = TextData::Get(0x1F64505Fu);
  v6 = fs(v5);
  v4[118].__vecDelDtor((NiRefObject *)v2->m_pkMessage, (unsigned int)v6);
  ((void (__stdcall *)(_DWORD))v2->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(pkProto->propose_word);
  ((void (__stdcall *)(_DWORD))v2->m_spSendEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9CDA5B);
}

//----- (006E5310) --------------------------------------------------------
WeddingProposeOutputWin *__cdecl WeddingProposeOutputWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  WeddingProposeOutputWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &WeddingProposeOutputWin::_vftable_;
    *((_DWORD *)v2 + 58) = &WeddingProposeOutputWin::_vftable_;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 91) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 89) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (WeddingProposeOutputWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CDB7C: using guessed type int (__stdcall *WeddingProposeOutputWin___vftable_)(int uiFlags);
// 9CDB9C: using guessed type int (__thiscall *WeddingProposeOutputWin___vftable_)(void *p, char);

//----- (006E5470) --------------------------------------------------------
void *__thiscall WeddingProposeOutputWin::_vector_deleting_destructor_(WeddingProposeOutputWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  WeddingProposeOutputWin::_WeddingProposeOutputWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006E54A0) --------------------------------------------------------
void __thiscall WeddingProposeResultWin::OnHelpLink(WeddingProposeResultWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "WeddingProposeResult");
}

//----- (006E54D0) --------------------------------------------------------
void __thiscall WeddingProposeResultWin::OnCommand(WeddingProposeResultWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@3

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "WeddingProposeResult");
    }
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (006E5520) --------------------------------------------------------
void __thiscall WeddingProposeResultWin::WeddingProposeResultWin(WeddingProposeResultWin *this)
{
  WeddingProposeResultWin *v1; // esi@1
  EditWin *v2; // edi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeResultWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeResultWin::_vftable_;
  v1->m_pkWeddingMessage.m_pObject = 0;
  v1->m_pkReply = 0;
  v2 = v1->m_pkWeddingMessage.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v2,
          1u);
    }
    v1->m_pkWeddingMessage.m_pObject = 0;
  }
}
// 9CDEEC: using guessed type int (__stdcall *WeddingProposeResultWin___vftable_)(int uiFlags);
// 9CDF0C: using guessed type int (__thiscall *WeddingProposeResultWin___vftable_)(void *p, char);

//----- (006E55C0) --------------------------------------------------------
void __thiscall WeddingProposeResultWin::_WeddingProposeResultWin(WeddingProposeResultWin *this)
{
  PgWinFrame *v1; // esi@1
  EditWin *v2; // edi@1

  v1 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeResultWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeResultWin::_vftable_;
  v2 = this->m_pkWeddingMessage.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  PgWinFrame::_PgWinFrame(v1);
}
// 9CDEEC: using guessed type int (__stdcall *WeddingProposeResultWin___vftable_)(int uiFlags);
// 9CDF0C: using guessed type int (__thiscall *WeddingProposeResultWin___vftable_)(void *p, char);

//----- (006E5650) --------------------------------------------------------
bool __thiscall WeddingProposeResultWin::Create(WeddingProposeResultWin *this, PgFrameWork *pkFrameWork)
{
  WeddingProposeResultWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  int v10; // ebx@15
  NiSourceTexture *v11; // eax@15
  PgSprData *v12; // eax@18
  PgSprData *v13; // eax@18
  PgSprData *v14; // eax@18
  PgSprData *v15; // eax@18
  PgFont *v16; // eax@20
  PgWinText *v17; // edi@20
  NiRefObjectVtbl *v18; // ST54_4@20
  char *v19; // eax@20
  PgSprData *v20; // edi@20
  NiSourceTexture *v21; // edi@20
  PgSprData *v22; // edi@21
  PgSprData *v23; // edi@22
  NiPointer<PgSprData::PgHitTester> *v24; // ecx@22
  unsigned int v25; // edi@22
  unsigned int v26; // ST54_4@22
  PgFont *v27; // eax@22
  PgWinText *v28; // edi@22
  NiRefObjectVtbl *v29; // ST54_4@22
  char *v30; // eax@22
  PgSprData *v31; // edi@22
  NiPointer<PgSprData::PgHitTester> *v32; // ecx@22
  unsigned int v33; // edi@22
  PgFont *v34; // eax@22
  PgWinText *v35; // eax@22
  EditWin *v36; // eax@23
  PgSprData *v37; // edi@23
  PgWinBut *v38; // eax@23
  PgWinBut *v39; // edi@23
  PgWin *v40; // ST38_4@23
  PgFont *v41; // ST34_4@23
  unsigned int v42; // ST30_4@23
  unsigned int v43; // eax@23
  PgWinText *v44; // edi@23
  NiRefObjectVtbl *v45; // ebx@23
  char *v46; // eax@23
  const char *v47; // [sp+30h] [bp-48h]@16
  int *v48; // [sp+34h] [bp-44h]@16
  int *v49; // [sp+38h] [bp-40h]@16
  NiSourceTexture *v50; // [sp+3Ch] [bp-3Ch]@16
  unsigned int uiWidth; // [sp+54h] [bp-24h]@18
  unsigned int uiHeight; // [sp+58h] [bp-20h]@18
  NiSourceTexture *pkTexture; // [sp+5Ch] [bp-1Ch]@1
  NiPointer<NiNode> spNode; // [sp+60h] [bp-18h]@1
  int uiLeft; // [sp+64h] [bp-14h]@11
  int uiTop; // [sp+68h] [bp-10h]@11
  int v57; // [sp+74h] [bp-4h]@1
  int iYOff; // [sp+80h] [bp+8h]@15
  unsigned int iYOffa; // [sp+80h] [bp+8h]@22

  v2 = this;
  spNode.m_pObject = 0;
  v57 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
    goto LABEL_5;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "\\Game\\WeddingProposeResult.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "WeddingProposeResultWin", 0) )
  {
    v4 = spNode.m_pObject;
    v57 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v10 = uiLeft;
  iYOff = uiTop;
  v11 = MenuTexMgr::GetTexture(0x13u);
  if ( v11 )
  {
    v50 = v11;
    v49 = &uiTop;
    v48 = &uiLeft;
    v47 = "Theme";
  }
  else
  {
    v50 = 0;
    v49 = &uiTop;
    v48 = &uiLeft;
    v47 = "Theme";
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v47, v48, v49, v50);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v15 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop, v15, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_26;
  v16 = Font::Get(0);
  v17 = PgWinText::CreateWin(
          uiLeft - v10,
          uiTop,
          uiWidth,
          uiHeight,
          v16,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v17,
    5u);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v17,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v18 = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v19 = TextData::Get(0x94C274D7u);
  v18[118].__vecDelDtor((NiRefObject *)v17, (unsigned int)v19);
  v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v17,
    0);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v20, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v10, uiTop - iYOff, v20, &v2->baseclass_0.baseclass_0.baseclass_0);
  v21 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v21);
    PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v10, uiTop - iYOff, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v24 = v23->m_akHitTester.m_pBase;
  v25 = v24->m_pObject->m_uiHeight;
  v26 = v24->m_pObject->m_uiWidth;
  v27 = Font::Get(0);
  v28 = PgWinText::CreateWin(uiLeft - v10, uiTop, v26, v25, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v28,
    5u);
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v28,
    (unsigned int)&Color::m_kDxWhiteColor);
  v29 = v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v30 = TextData::Get(0x20ADDDEu);
  v29[118].__vecDelDtor((NiRefObject *)v28, (unsigned int)v30);
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v28,
    0);
  v31 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text02_Field", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v10, uiTop - iYOff, v31, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v32 = v31->m_akHitTester.m_pBase;
  v33 = v32->m_pObject->m_uiHeight;
  iYOffa = v32->m_pObject->m_uiWidth;
  v34 = Font::Get(0);
  v35 = PgWinText::CreateWin(uiLeft - v10, uiTop, iYOffa, v33, v34, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkReply = v35;
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v35,
    (unsigned int)&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_DWORD))v2->m_pkReply->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01_Field", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_26:
    v57 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v36 = EditWin::CreateWin(
          uiLeft,
          uiTop + 2,
          uiWidth,
          uiHeight,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          MULTILINE,
          0x80u,
          0,
          1,
          0,
          0);
  NiPointer<PopupMenuWin>::operator_(
    (NiPointer<NiD3DDefaultShader> *)&v2->m_pkWeddingMessage,
    (NiD3DDefaultShader *)v36);
  EditWin::SetImeStatus(v2->m_pkWeddingMessage.m_pObject, IS_KOREAN);
  v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v37, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add(v37, &spNode.m_pObject->baseclass_0, "Btn01Over");
  v38 = PgWinBut::CreateWin(uiLeft, uiTop, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v39 = v38;
  v40 = (PgWin *)v38;
  v41 = Font::Get(0);
  v42 = ((int (__thiscall *)(PgWinBut *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v39);
  v43 = ((int (__thiscall *)(PgWinBut *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v39);
  v44 = PgWinText::CreateWin(0, 1, v43, v42, v41, v40, 0, 0);
  v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v44,
    5u);
  v45 = v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v46 = TextData::Get(0xA6BE8DE4u);
  v45[118].__vecDelDtor((NiRefObject *)v44, (unsigned int)v46);
  v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v44,
    0);
  ((void (__thiscall *)(WeddingProposeResultWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(v2);
  v57 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006E5CB0) --------------------------------------------------------
void __thiscall WeddingProposeResultWin::SetProposeResult(WeddingProposeResultWin *this, PROTO_NC_ACT_WEDDING_PROPOSEREQ_ACK *pkProto, bool bYes)
{
  WeddingProposeResultWin *v3; // esi@1
  Char *v4; // eax@1
  EditWin *v5; // esi@1
  NiRefObjectVtbl *v6; // edi@1
  char *v7; // eax@2
  char *v8; // eax@2
  char *v9; // eax@3
  char *v10; // eax@3

  v3 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkReply->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CDDDB);
  ((void (__stdcall *)(_DWORD))v3->m_pkWeddingMessage.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9CDDE2);
  ((void (__stdcall *)(_DWORD))v3->m_pkReply->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pkProto->response_word);
  v4 = CharMgr::GetChar(&g_kCharMgr, pkProto->to);
  v5 = v3->m_pkWeddingMessage.m_pObject;
  v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  if ( bYes )
  {
    ((void (*)(void))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    v7 = TextData::Get(0x1C624F72u);
    v8 = fs(v7);
    v6[115].__vecDelDtor((NiRefObject *)v5, (unsigned int)v8);
  }
  else
  {
    ((void (*)(void))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    v9 = TextData::Get(0xEE51F60Du);
    v10 = fs(v9);
    v6[115].__vecDelDtor((NiRefObject *)v5, (unsigned int)v10);
  }
}

//----- (006E5D80) --------------------------------------------------------
WeddingProposeResultWin *__cdecl WeddingProposeResultWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  WeddingProposeResultWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    WeddingProposeResultWin::WeddingProposeResultWin((WeddingProposeResultWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (WeddingProposeResultWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006E5EB0) --------------------------------------------------------
void *__thiscall WeddingProposeResultWin::_vector_deleting_destructor_(WeddingProposeResultWin *this, unsigned int a2)
{
  PgWinFrame *v2; // esi@1
  EditWin *v3; // edi@1

  v2 = (PgWinFrame *)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingProposeResultWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&WeddingProposeResultWin::_vftable_;
  v3 = this->m_pkWeddingMessage.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  PgWinFrame::_PgWinFrame(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CDEEC: using guessed type int (__stdcall *WeddingProposeResultWin___vftable_)(int uiFlags);
// 9CDF0C: using guessed type int (__thiscall *WeddingProposeResultWin___vftable_)(void *p, char);

//----- (006E5F50) --------------------------------------------------------
void __thiscall WeddingTask::OnStart(WeddingTask *this)
{
  WeddingTask *v1; // esi@1

  v1 = this;
  this->m_pkWeddingProposeInputWin = WeddingProposeInputWin::CreateWin(0);
  v1->m_pkWeddingProposeOutputWin = WeddingProposeOutputWin::CreateWin(0);
  v1->m_pkWeddingProposeResultWin = WeddingProposeResultWin::CreateWin(0);
  v1->m_pkWeddingEntryWin = WeddingEntryWin::CreateWin(0);
}

//----- (006E5F80) --------------------------------------------------------
void __thiscall WeddingTask::DirectMessage(WeddingTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  WeddingTask *v4; // esi@1

  v4 = this;
  if ( iMsgTag == 27 && pvBody && !*(_DWORD *)pvBody )
  {
    if ( LOBYTE(this->m_pkWeddingProposeResultWin) )
    {
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0x5Eu, 0, 0);
      LOBYTE(v4->m_pkWeddingProposeResultWin) = 0;
    }
  }
}

//----- (006E5FC0) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_PROPOSE_WORD_REQ(WeddingTask *this)
{
  WeddingTask *v1; // esi@1

  v1 = this;
  if ( this->m_pkWeddingProposeInputWin
    && !(unsigned __int8)((int (*)(void))this->m_pkWeddingProposeInputWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkWeddingProposeInputWin->baseclass_0.baseclass_0.baseclass_0);
  return 1;
}

//----- (006E5FF0) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_PROPOSEACK_REQ(WeddingTask *this, PROTO_NC_ACT_WEDDING_PROPOSEACK_REQ *pkProto)
{
  WeddingTask *v2; // esi@1

  v2 = this;
  WeddingProposeOutputWin::SetProposeData(this->m_pkWeddingProposeOutputWin, pkProto);
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkWeddingProposeOutputWin->baseclass_0.baseclass_0.baseclass_0);
  return 1;
}

//----- (006E6020) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_SOMEONE(WeddingTask *this, PROTO_NC_ACT_WEDDING_SOMEONE *pkProto)
{
  return 1;
}

//----- (006E6030) --------------------------------------------------------
WeddingProposeInputWin *__cdecl WeddingTask::GetWeddingProposeInputWin()
{
  return *(WeddingProposeInputWin **)(WeddingTask::ms_spWeddingTask + 96);
}
// B67E64: using guessed type int WeddingTask__ms_spWeddingTask;

//----- (006E6040) --------------------------------------------------------
CLIENT_MARRYINFO *__cdecl WeddingTask::GetMarryInfo()
{
  return (CLIENT_MARRYINFO *)(WeddingTask::ms_spWeddingTask + 64);
}
// B67E64: using guessed type int WeddingTask__ms_spWeddingTask;

//----- (006E6050) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_PROPOSEREQ_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_PROPOSEREQ_ACK *pkProto)
{
  WeddingTask *v2; // esi@1
  int v3; // eax@1
  int result; // eax@3
  char *v5; // esi@4
  char *v6; // edi@4

  v2 = this;
  v3 = pkProto->err;
  if ( (_WORD)v3 == 4800 )
  {
    WeddingProposeResultWin::SetProposeResult(this->m_pkWeddingProposeResultWin, pkProto, 1);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkWeddingProposeResultWin->baseclass_0.baseclass_0.baseclass_0);
    result = 1;
  }
  else
  {
    if ( (_WORD)v3 == 4810 )
    {
      WeddingProposeResultWin::SetProposeResult(this->m_pkWeddingProposeResultWin, pkProto, 0);
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkWeddingProposeResultWin->baseclass_0.baseclass_0.baseclass_0);
      result = 1;
    }
    else
    {
      v5 = (char *)&this->baseclass_0.baseclass_8;
      v6 = ErrMsgTable::GetErrMsg(v3);
      if ( *((_DWORD *)v5 + 1) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 4))(25, v6, v5);
        if ( *((_DWORD *)v5 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 20))(25, v6, v5);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
      result = 1;
    }
  }
  return result;
}

//----- (006E6110) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_HALL_GUEST_ENTER_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_ACK *pkProto)
{
  int v2; // eax@1
  char *v3; // esi@2
  char *v4; // edi@2

  v2 = pkProto->err;
  if ( (_WORD)v2 != 4928 )
  {
    v3 = (char *)&this->baseclass_0.baseclass_8;
    v4 = ErrMsgTable::GetErrMsg(v2);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
  return 1;
}

//----- (006E6180) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_CHAR_WEDDING_PARTNER_INFO_ACK(WeddingTask *this, PROTO_NC_CHAR_WEDDING_PARTNER_INFO_ACK *pkProto)
{
  PgFrameWork *v2; // eax@1

  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v2 )
    WeddingInfoWin::SetWeddingInfo((WeddingInfoWin *)v2[24].baseclass_0.m_uiMessageNum, pkProto);
  return 1;
}

//----- (006E61B0) --------------------------------------------------------
void __cdecl WeddingTask::Terminate()
{
  int v0; // esi@1

  v0 = WeddingTask::ms_spWeddingTask;
  if ( WeddingTask::ms_spWeddingTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(WeddingTask::ms_spWeddingTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    WeddingTask::ms_spWeddingTask = 0;
  }
}
// B67E64: using guessed type int WeddingTask__ms_spWeddingTask;

//----- (006E61F0) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_HALL_RESERV_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_HALL_RESERV_ACK *pkProto)
{
  int v2; // eax@1
  char *v3; // eax@3
  char *v4; // eax@5
  char *v5; // eax@5
  char *v6; // eax@8
  char *v7; // esi@10
  char *v8; // edi@10
  unsigned int v10; // [sp-8h] [bp-30h]@4
  char acDateTime[32]; // [sp+4h] [bp-24h]@3
  unsigned int v12; // [sp+24h] [bp-4h]@1
  int v13; // [sp+28h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = pkProto->err;
  if ( (_WORD)v2 == 4864 )
  {
    if ( pkProto != (PROTO_NC_ACT_WEDDING_HALL_RESERV_ACK *)-10 )
    {
      v3 = TextData2::Get(0xD8DB2709u);
      strftime(acDateTime, 0x1Fu, v3, &pkProto->tm_ReservedTime);
    }
    v10 = 2063520462;
LABEL_5:
    v4 = TextData::Get(v10);
    v5 = fs(v4);
    MsgBox::Modeless(MSGBOX_OK, v5);
    return 1;
  }
  if ( (_WORD)v2 == 4870 )
  {
    if ( pkProto != (PROTO_NC_ACT_WEDDING_HALL_RESERV_ACK *)-10 )
    {
      v6 = TextData2::Get(0xD8DB2709u);
      strftime(acDateTime, 0x1Fu, v6, &pkProto->tm_ReservedTime);
    }
    v10 = -1995915053;
    goto LABEL_5;
  }
  v7 = (char *)&this->baseclass_0.baseclass_8;
  v8 = ErrMsgTable::GetErrMsg(v2);
  if ( *((_DWORD *)v7 + 1) )
  {
    (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 4))(25, v8, v7);
    if ( *((_DWORD *)v7 + 1) )
      (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 20))(25, v8, v7);
  }
  (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006E62F0) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK(WeddingTask *this, PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK *pkProto)
{
  WeddingTask *v2; // esi@1
  PgFrameWork *v3; // ebx@2
  char *v4; // eax@4
  char *v5; // eax@4
  int result; // eax@5
  char *v7; // eax@10
  char *v8; // esi@11
  char *v9; // edi@11

  v2 = this;
  if ( pkProto->err == 4928 )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v3 )
    {
      if ( Timer::TimeCheck(&pkProto->tm_EnterStart)
        && Timer::TimeCheck(&pkProto->tm_WeddingStart)
        && Timer::TimeCheck(&pkProto->tm_WeddingEnd) )
      {
        WeddingEntryWin::SetWeddingEntryData(v2->m_pkWeddingEntryWin, pkProto);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkWeddingEntryWin->baseclass_0.baseclass_0.baseclass_0);
        return 1;
      }
      v4 = TextData3::Get(0x80703D5Du);
      v5 = fs(v4);
      GameFrameWork::AddSysMsg((GameFrameWork *)v3, v5);
    }
    return 0;
  }
  if ( pkProto->err == 4930 )
  {
    v7 = TextData::Get(0xEE1DE136u);
    MsgBox::Modeless(MSGBOX_OK, v7);
    result = 1;
  }
  else
  {
    v8 = (char *)&this->baseclass_0.baseclass_8;
    v9 = ErrMsgTable::GetErrMsg(pkProto->err);
    if ( *((_DWORD *)v8 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v8 + 1) + 4))(25, v9, v8);
      if ( *((_DWORD *)v8 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v8 + 1) + 20))(25, v9, v8);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 20))(v8, 25, v9, v8);
    result = 1;
  }
  return result;
}

//----- (006E6420) --------------------------------------------------------
int __thiscall WeddingTask::Recv_NC_ACT_WEDDING_DIVORCE_REQ_ACK(WeddingTask *this, PROTO_ERRORCODE *pkProto)
{
  unsigned __int16 v2; // ax@1
  WeddingTask *v3; // esi@1
  char *v4; // esi@2
  char *v5; // edi@2
  char *v6; // eax@7
  MsgBox *v7; // eax@7
  int v8; // edx@8
  char *v9; // eax@12
  MsgBox *v10; // eax@12
  char *v11; // esi@16
  char *v12; // edi@16
  char *v13; // esi@21
  char *v14; // edi@21
  char *v15; // eax@26
  char *v16; // esi@27
  char *v17; // edi@27

  v2 = pkProto->err;
  v3 = this;
  if ( pkProto->err == 4992 )
  {
    v4 = (char *)&this->baseclass_0.baseclass_8;
    v5 = TextData::Get(0x69B4ABA3u);
    if ( *((_DWORD *)v4 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v4 + 1) + 4))(25, v5, v4);
      if ( *((_DWORD *)v4 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v4 + 1) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  }
  else
  {
    switch ( v2 )
    {
      case 0x1384u:
        v6 = TextData::Get(0xCAEDDB1Du);
        v7 = MsgBox::Modeless(MSGBOX_DENIALCLOSE, v6);
        if ( v3 )
          v8 = (int)&v3->baseclass_0.baseclass_8;
        else
          v8 = 0;
        ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v8);
        v3->m_bDivorce = 1;
        break;
      case 0x1385u:
        v9 = TextData::Get(0xA6E6E51u);
        v10 = MsgBox::Modeless(MSGBOX_OK, v9);
        if ( v3 )
          ((void (__stdcall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v3->baseclass_0.baseclass_8);
        else
          ((void (__stdcall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(0);
        break;
      case 0x1386u:
        v11 = (char *)&this->baseclass_0.baseclass_8;
        v12 = TextData::Get(0x7CBCC7B9u);
        if ( *((_DWORD *)v11 + 1) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v11 + 1) + 4))(25, v12, v11);
          if ( *((_DWORD *)v11 + 1) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v11 + 1) + 20))(25, v12, v11);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v11 + 20))(v11, 25, v12, v11);
        break;
      case 0x1387u:
        v13 = (char *)&this->baseclass_0.baseclass_8;
        v14 = TextData::Get(0x1030E51Du);
        if ( *((_DWORD *)v13 + 1) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v13 + 1) + 4))(25, v14, v13);
          if ( *((_DWORD *)v13 + 1) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v13 + 1) + 20))(25, v14, v13);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v13 + 20))(v13, 25, v14, v13);
        break;
      case 0x1389u:
        v15 = TextData2::Get(0x89C0CDB9u);
        MsgBox::Modeless(MSGBOX_OK, v15);
        break;
      default:
        v16 = (char *)&this->baseclass_0.baseclass_8;
        v17 = ErrMsgTable::GetErrMsg(pkProto->err);
        if ( *((_DWORD *)v16 + 1) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v16 + 1) + 4))(25, v17, v16);
          if ( *((_DWORD *)v16 + 1) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v16 + 1) + 20))(25, v17, v16);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v16 + 20))(v16, 25, v17, v16);
        break;
    }
  }
  return 1;
}

//----- (006E6640) --------------------------------------------------------
void __thiscall WeddingTask::_WeddingTask(WeddingTask *this)
{
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingTask::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&WeddingTask::_vftable_;
  ITask::_ITask(&this->baseclass_0);
}
// 9CE130: using guessed type int (__stdcall *WeddingTask___vftable_)(int uiFlags);
// 9CE14C: using guessed type int (__thiscall *WeddingTask___vftable_)(void *p, char);

//----- (006E6660) --------------------------------------------------------
bool __thiscall WeddingTask::OnProcessNetMsg(WeddingTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  PgFrameWork *v6; // eax@14
  PgFrameWork *v7; // eax@16

  if ( iDepart != 4 )
  {
    if ( iDepart == 8 )
    {
      switch ( iCommand )
      {
        case 78:
          WeddingTask::Recv_NC_ACT_WEDDING_PROPOSE_WORD_REQ(this);
          return 1;
        case 80:
          WeddingTask::Recv_NC_ACT_WEDDING_PROPOSEACK_REQ(this, (PROTO_NC_ACT_WEDDING_PROPOSEACK_REQ *)pvData);
          return 1;
        case 82:
          WeddingTask::Recv_NC_ACT_WEDDING_PROPOSEREQ_ACK(this, (PROTO_NC_ACT_WEDDING_PROPOSEREQ_ACK *)pvData);
          return 1;
        case 89:
          WeddingTask::Recv_NC_ACT_WEDDING_HALL_GUEST_ENTER_ACK(
            this,
            (PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_ACK *)pvData);
          return 1;
        case 87:
          WeddingTask::Recv_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK(
            this,
            (PROTO_NC_ACT_WEDDING_HALL_GUEST_ENTER_READY_ACK *)pvData);
          return 1;
        case 93:
          WeddingTask::Recv_NC_ACT_WEDDING_DIVORCE_REQ_ACK(this, (PROTO_ERRORCODE *)pvData);
          return 1;
        case 84:
          WeddingTask::Recv_NC_ACT_WEDDING_HALL_RESERV_ACK(this, (PROTO_NC_ACT_WEDDING_HALL_RESERV_ACK *)pvData);
          return 1;
        default:
          return 0;
        case 90:
          return 1;
      }
      return 1;
    }
    return 0;
  }
  if ( iCommand == 129 )
  {
    this->m_MarryInfo.MarryStatus = *((_BYTE *)pvData + 8) & 0xF;
    this->m_MarryInfo.MarryDate._bf0 = *(_DWORD *)((char *)pvData + 9);
    *(_QWORD *)&this->m_MarryInfo.WifeName.n5_name[0] = *(_QWORD *)((char *)pvData + 17);
    *(_QWORD *)&this->m_MarryInfo.WifeName.n5_name[8] = *(_QWORD *)((char *)pvData + 25);
    *(_DWORD *)&this->m_MarryInfo.WifeName.n5_name[16] = *(_DWORD *)((char *)pvData + 33);
    this->m_MarryInfo.WifeRegistNumber = *(_DWORD *)((char *)pvData + 37);
    v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v7 )
      WeddingInfoWin::SetWeddingInfo((WeddingInfoWin *)v7[24].baseclass_0.m_uiMessageNum);
    return 1;
  }
  if ( iCommand != 148 )
    return 0;
  v6 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v6 )
  {
    WeddingInfoWin::SetWeddingInfo(
      (WeddingInfoWin *)v6[24].baseclass_0.m_uiMessageNum,
      (PROTO_NC_CHAR_WEDDING_PARTNER_INFO_ACK *)pvData);
    return 1;
  }
  return 1;
}

//----- (006E67D0) --------------------------------------------------------
void __thiscall WeddingTask::WeddingTask(WeddingTask *this)
{
  WeddingTask *v1; // esi@1

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  v1->m_pkWeddingProposeInputWin = 0;
  v1->m_pkWeddingProposeOutputWin = 0;
  v1->m_pkWeddingProposeResultWin = 0;
  v1->m_pkWeddingEntryWin = 0;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&WeddingTask::_vftable_;
  v1->m_MarryInfo.MarryStatus = 0;
  v1->m_MarryInfo.MarryDate._bf0 = 0;
  *(_DWORD *)&v1->m_MarryInfo.WifeName.n5_name[0] = 0;
  *(_DWORD *)&v1->m_MarryInfo.WifeName.n5_name[4] = 0;
  *(_DWORD *)&v1->m_MarryInfo.WifeName.n5_name[8] = 0;
  *(_DWORD *)&v1->m_MarryInfo.WifeName.n5_name[12] = 0;
  *(_DWORD *)&v1->m_MarryInfo.WifeName.n5_name[16] = 0;
  v1->m_MarryInfo.WifeRegistNumber = -1;
  v1->m_bDivorce = 0;
}
// 9CE130: using guessed type int (__stdcall *WeddingTask___vftable_)(int uiFlags);
// 9CE14C: using guessed type int (__thiscall *WeddingTask___vftable_)(void *p, char);

//----- (006E6820) --------------------------------------------------------
void __cdecl WeddingTask::Create(IDirectMessenger *pkMsgHooker)
{
  int v1; // eax@1
  void *v2; // eax@2
  int v3; // eax@3
  int v4; // esi@3
  int v5; // edi@7

  v1 = WeddingTask::ms_spWeddingTask;
  if ( !WeddingTask::ms_spWeddingTask )
  {
    v2 = operator new(0x74u);
    if ( v2 )
    {
      WeddingTask::WeddingTask((WeddingTask *)v2);
      v4 = v3;
    }
    else
    {
      v4 = 0;
    }
    v1 = WeddingTask::ms_spWeddingTask;
    if ( WeddingTask::ms_spWeddingTask != v4 )
    {
      if ( WeddingTask::ms_spWeddingTask )
      {
        v5 = WeddingTask::ms_spWeddingTask;
        if ( !InterlockedDecrement((volatile LONG *)(WeddingTask::ms_spWeddingTask + 4)) )
        {
          if ( v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        }
      }
      v1 = v4;
      WeddingTask::ms_spWeddingTask = v4;
      if ( v4 )
      {
        InterlockedIncrement((volatile LONG *)(v4 + 4));
        v1 = WeddingTask::ms_spWeddingTask;
      }
    }
  }
  (**(void (__cdecl ***)(_DWORD))(v1 + 8))(pkMsgHooker);
}
// B67E64: using guessed type int WeddingTask__ms_spWeddingTask;

//----- (006E68E0) --------------------------------------------------------
void *__thiscall WeddingTask::_scalar_deleting_destructor_(WeddingTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&WeddingTask::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&WeddingTask::_vftable_;
  ITask::_ITask(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CE130: using guessed type int (__stdcall *WeddingTask___vftable_)(int uiFlags);
// 9CE14C: using guessed type int (__thiscall *WeddingTask___vftable_)(void *p, char);

//----- (006E6910) --------------------------------------------------------
bool __thiscall DirectionControllers::IsRunDirection(DirectionControllers *this)
{
  return this->m_spCurrentController.m_pObject != 0;
}

//----- (006E6920) --------------------------------------------------------
void __thiscall DirectionController::Update(DirectionController *this, float fAccolTime)
{
  DirectionController *v2; // edi@1
  NiPointer<TimerController> *v3; // esi@1

  v2 = this;
  v3 = *(NiPointer<TimerController> **)&this->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( this->m_vecRunTimers.baseclass_0._Mylast != v3 )
  {
    do
    {
      ((void (__stdcall *)(_DWORD))v3->m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(LODWORD(fAccolTime));
      ++v3;
    }
    while ( v2->m_vecRunTimers.baseclass_0._Mylast != v3 );
  }
}

//----- (006E6950) --------------------------------------------------------
bool __thiscall DirectionController::IsRuntimer(DirectionController *this)
{
  DirectionController *v1; // edi@1
  TimerController **v2; // esi@1
  bool result; // al@4

  v1 = this;
  v2 = *(TimerController ***)&this->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (TimerController **)this->m_vecRunTimers.baseclass_0._Mylast == v2 )
  {
LABEL_4:
    result = 0;
  }
  else
  {
    while ( !TimerController::IsEnable(*v2) )
    {
      ++v2;
      if ( (TimerController **)v1->m_vecRunTimers.baseclass_0._Mylast == v2 )
        goto LABEL_4;
    }
    result = 1;
  }
  return result;
}

//----- (006E6980) --------------------------------------------------------
bool __thiscall DirectionController::RunTimer(DirectionController *this)
{
  DirectionController *v1; // edi@1
  TimerController **v2; // esi@1

  v1 = this;
  v2 = *(TimerController ***)&this->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (TimerController **)this->m_vecRunTimers.baseclass_0._Mylast != v2 )
  {
    do
    {
      TimerController::OnTimerEnable(*v2, 1);
      ++v2;
    }
    while ( (TimerController **)v1->m_vecRunTimers.baseclass_0._Mylast != v2 );
  }
  return 1;
}

//----- (006E69B0) --------------------------------------------------------
void __thiscall DirectionControllers::Update(DirectionControllers *this, float fAccolTime)
{
  DirectionControllers *v2; // ebx@1
  DirectionController *v3; // edi@1
  NiPointer<TimerController> *i; // esi@2
  DirectionController *v5; // edi@4
  TimerController **v6; // esi@4
  DirectionController *v7; // esi@7

  v2 = this;
  v3 = this->m_spCurrentController.m_pObject;
  if ( v3 )
  {
    for ( i = *(NiPointer<TimerController> **)&v3->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0];
          v3->m_vecRunTimers.baseclass_0._Mylast != i;
          ++i )
      ((void (__stdcall *)(_DWORD))i->m_pObject->baseclass_0.vfptr[1].__vecDelDtor)(LODWORD(fAccolTime));
    v5 = v2->m_spCurrentController.m_pObject;
    v6 = *(TimerController ***)&v5->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( (TimerController **)v5->m_vecRunTimers.baseclass_0._Mylast == v6 )
    {
LABEL_7:
      v7 = v2->m_spCurrentController.m_pObject;
      if ( v7 )
      {
        if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount) )
        {
          if ( v7 )
            v7->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
        }
        v2->m_spCurrentController.m_pObject = 0;
      }
    }
    else
    {
      while ( !TimerController::IsEnable(*v6) )
      {
        ++v6;
        if ( (TimerController **)v5->m_vecRunTimers.baseclass_0._Mylast == v6 )
          goto LABEL_7;
      }
    }
  }
}

//----- (006E6A40) --------------------------------------------------------
bool __thiscall DirectionControllers::DoRunDirection(DirectionControllers *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rStrName)
{
  DirectionControllers *v2; // edi@1
  bool result; // al@2
  DirectionController *v4; // edi@4
  TimerController **i; // esi@4

  v2 = this;
  if ( this->m_spCurrentController.m_pObject
    || (std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::find(
          (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)&this->m_mapDirectionCtrls,
          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)&rStrName,
          rStrName),
        *((std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v2->m_mapDirectionCtrls.baseclass_0.baseclass_0
        + 1) == rStrName) )
  {
    result = 0;
  }
  else
  {
    NiPointer<NiActorManager>::operator_(
      (NiPointer<NiPixelData> *)&v2->m_spCurrentController,
      (NiPointer<NiPixelData> *)&rStrName[1].baseclass_0.___u0._Bx._Buf[12]);
    v4 = v2->m_spCurrentController.m_pObject;
    for ( i = *(TimerController ***)&v4->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0];
          (TimerController **)v4->m_vecRunTimers.baseclass_0._Mylast != i;
          ++i )
      TimerController::OnTimerEnable(*i, 1);
    result = 1;
  }
  return result;
}

//----- (006E6AA0) --------------------------------------------------------
bool __thiscall DirectionController::AddTimer(DirectionController *this, NiPointer<TimerController> spTimer)
{
  TimerController *v2; // esi@1

  std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
    (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)&this->m_vecRunTimers,
    (NiPointer<PgSprData> *)&spTimer);
  v2 = spTimer.m_pObject;
  if ( spTimer.m_pObject && !InterlockedDecrement((volatile LONG *)&spTimer.m_pObject->baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  return 1;
}

//----- (006E6B20) --------------------------------------------------------
bool __thiscall DirectionControllers::AddController(DirectionControllers *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *rStrName, NiPointer<DirectionController> spController)
{
  DirectionControllers *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v4; // eax@1
  unsigned int v5; // ecx@2
  int v6; // eax@2
  int *v7; // eax@5
  DirectionController *v8; // esi@8
  bool v9; // al@12
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController> > *v10; // eax@13
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v11; // eax@13
  DirectionController *v12; // esi@14
  char v13; // [sp+0h] [bp-3Ch]@13
  int v14; // [sp+4h] [bp-38h]@6
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v15; // [sp+8h] [bp-34h]@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController> > result; // [sp+Ch] [bp-30h]@13
  unsigned int v17; // [sp+2Ch] [bp-10h]@1
  int v18; // [sp+38h] [bp-4h]@1
  int v19; // [sp+3Ch] [bp+0h]@1

  v17 = (unsigned int)&v19 ^ __security_cookie;
  v3 = this;
  v18 = 0;
  v4 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)&this->m_mapDirectionCtrls,
         rStrName);
  v15 = v4;
  if ( v4 == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&v3->m_mapDirectionCtrls.baseclass_0.baseclass_0
             + 1) )
    goto LABEL_20;
  v5 = v4->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v6 = (int)&v4->_Myval;
  if ( *(_DWORD *)(v6 + 20) >= 0x10u )
    v6 = *(_DWORD *)v6;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         rStrName,
         0,
         rStrName->baseclass_0._Mysize,
         (const char *)v6,
         v5) < 0 )
  {
LABEL_20:
    v14 = *((_DWORD *)&v3->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1);
    v7 = &v14;
  }
  else
  {
    v7 = (int *)&v15;
  }
  if ( *((_DWORD *)&v3->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1) == *v7 )
  {
    v10 = std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>__>(
            &result,
            rStrName,
            &spController);
    LOBYTE(v18) = 1;
    v11 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>>>(
            &v3->m_mapDirectionCtrls.baseclass_0.baseclass_0,
            v10);
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)&v3->m_mapDirectionCtrls,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocat *)&v13,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v11,
      0);
    LOBYTE(v18) = 0;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiNode>>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *)&result);
    v18 = -1;
    if ( spController.m_pObject )
    {
      v12 = spController.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spController.m_pObject->baseclass_0.m_uiRefCount) )
      {
        if ( v12 )
          v12->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
      }
    }
    v9 = 1;
  }
  else
  {
    v8 = spController.m_pObject;
    v18 = -1;
    if ( spController.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spController.m_pObject->baseclass_0.m_uiRefCount) )
    {
      if ( v8 )
        v8->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    }
    v9 = 0;
  }
  return v9;
}
// A85C00: using guessed type int __security_cookie;

//----- (006E6C60) --------------------------------------------------------
NiPointer<DirectionControllers> *__cdecl CreateMetamorphosisDirection(NiPointer<DirectionControllers> *result, Char *pChar)
{
  void *v2; // eax@1
  int v3; // eax@2
  void *v4; // eax@6
  int v5; // edi@6
  void *v6; // eax@11
  int v7; // eax@12
  int v8; // edi@12
  PgSprData *v9; // esi@18
  void *v10; // eax@21
  int v11; // eax@22
  int v12; // esi@22
  volatile LONG *v13; // esi@41
  void *v14; // eax@44
  int v15; // edi@44
  void *v16; // eax@49
  int v17; // eax@50
  int v18; // edi@50
  PgSprData *v19; // esi@56
  void *v20; // eax@59
  int v21; // eax@60
  int v22; // esi@60
  volatile LONG *v23; // esi@79
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v25; // [sp+0h] [bp-78h]@16
  int v26; // [sp+4h] [bp-74h]@16
  Char *v27; // [sp+8h] [bp-70h]@16
  DirectionController *v28; // [sp+Ch] [bp-6Ch]@16
  int v29; // [sp+10h] [bp-68h]@16
  signed int v30; // [sp+14h] [bp-64h]@16
  volatile LONG *v31; // [sp+18h] [bp-60h]@7
  unsigned int v32; // [sp+1Ch] [bp-5Ch]@1
  int v33; // [sp+2Ch] [bp-4Ch]@1
  NiPointer<DirectionController> spUnMetamorDirection; // [sp+34h] [bp-44h]@16
  NiPointer<TimerController> spUnMetaActionEvent; // [sp+38h] [bp-40h]@14
  NiPointer<DirectionController> spMetamorDirection; // [sp+3Ch] [bp-3Ch]@9
  DirectionControllers **v37; // [sp+40h] [bp-38h]@1
  volatile LONG *v38; // [sp+44h] [bp-34h]@7
  NiPointer<PgSprData> _Val; // [sp+48h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+4Ch] [bp-2Ch]@26
  unsigned int v41; // [sp+68h] [bp-10h]@1
  int v42; // [sp+74h] [bp-4h]@1
  int v43; // [sp+78h] [bp+0h]@1

  v41 = (unsigned int)&v43 ^ __security_cookie;
  v32 = (unsigned int)&v43 ^ __security_cookie;
  v37 = (DirectionControllers **)result;
  v33 = 0;
  v2 = operator new(0x1Cu);
  _Val.m_pObject = (PgSprData *)v2;
  v42 = 1;
  if ( v2 )
    DirectionControllers::DirectionControllers((DirectionControllers *)v2);
  else
    v3 = 0;
  result->m_pObject = (DirectionControllers *)v3;
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v42 = 0;
  v33 = 1;
  v4 = operator new(0x18u);
  v5 = (int)v4;
  if ( v4 )
  {
    v31 = &NiRefObject::ms_uiObjects;
    *(_DWORD *)v4 = &NiRefObject::_vftable_;
    *((_DWORD *)v4 + 1) = 0;
    InterlockedIncrement(v31);
    *(_DWORD *)v5 = &DirectionController::_vftable_;
    *(_DWORD *)(v5 + 8) = 0;
    *(_DWORD *)(v5 + 12) = 0;
    *(_DWORD *)(v5 + 16) = 0;
    v38 = (volatile LONG *)v5;
  }
  else
  {
    v38 = 0;
    v5 = 0;
  }
  spMetamorDirection.m_pObject = (DirectionController *)v5;
  if ( v5 )
    InterlockedIncrement((volatile LONG *)(v5 + 4));
  v42 = 2;
  v6 = operator new(0x48u);
  _Val.m_pObject = (PgSprData *)v6;
  LOBYTE(v42) = 3;
  if ( v6 )
  {
    TimerController::TimerController((TimerController *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  spUnMetaActionEvent.m_pObject = (TimerController *)v8;
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  _Val.m_pObject = (PgSprData *)&v25;
  v30 = 15;
  v29 = 0;
  LOBYTE(v42) = 4;
  v25.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v25, "Metamorphosis", 0xDu);
  TimerController::SetEventName((TimerController *)v8, v25);
  TimerController::SetDelayTime((TimerController *)v8, 0.0);
  _Val.m_pObject = (PgSprData *)&v29;
  *(_DWORD *)&v25.baseclass_0.___u0.baseclass_0.dummy[0] = Char::ActAction_BaseMode;
  v26 = 0;
  v27 = pChar;
  v29 = 0;
  v30 = 0;
  *(float *)&v31 = 0.0;
  v28 = spUnMetamorDirection.m_pObject;
  boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>>(
    (boost::function1<void,char const *,std::allocator<void> > *)&v29,
    *(boost::_bi::bind_t<bool,boost::_mfi::mf1<bool,Char,char const *>,boost::_bi::list2<boost::_bi::value<Char *>,boost::arg<1> > > *)&v25);
  TimerController::SetCallBackFunc(
    (TimerController *)v8,
    *(boost::function<void __cdecl(char const *),std::allocator<void> > *)&v29);
  _Val.m_pObject = (PgSprData *)v8;
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  LOBYTE(v42) = 5;
  std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
    (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)(v38 + 2),
    &_Val);
  v9 = _Val.m_pObject;
  LOBYTE(v42) = 4;
  if ( _Val.m_pObject && !InterlockedDecrement((volatile LONG *)&_Val.m_pObject->baseclass_0.m_uiRefCount) )
    v9->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
  v10 = operator new(0x48u);
  _Val.m_pObject = (PgSprData *)v10;
  LOBYTE(v42) = 6;
  if ( v10 )
  {
    TimerController::TimerController((TimerController *)v10);
    v12 = v11;
  }
  else
  {
    v12 = 0;
  }
  spUnMetamorDirection.m_pObject = (DirectionController *)v12;
  if ( v12 )
    InterlockedIncrement((volatile LONG *)(v12 + 4));
  LOBYTE(v42) = 7;
  TimerController::SetDelayTime((TimerController *)v12, 2.0);
  _Val.m_pObject = (PgSprData *)&v25;
  v30 = 15;
  v29 = 0;
  v25.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v25, "bird_idle", 9u);
  TimerController::SetEventName((TimerController *)v12, v25);
  _Val.m_pObject = (PgSprData *)&v29;
  *(_DWORD *)&v25.baseclass_0.___u0.baseclass_0.dummy[0] = Char::ActAction_BaseMode;
  v26 = 0;
  v27 = pChar;
  this.baseclass_0._Mysize = 0;
  v29 = 0;
  v30 = 0;
  *(float *)&v31 = 0.0;
  v28 = spUnMetamorDirection.m_pObject;
  boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>>(
    (boost::function1<void,char const *,std::allocator<void> > *)&v29,
    *(boost::_bi::bind_t<bool,boost::_mfi::mf1<bool,Char,char const *>,boost::_bi::list2<boost::_bi::value<Char *>,boost::arg<1> > > *)&v25);
  TimerController::SetCallBackFunc(
    (TimerController *)v12,
    *(boost::function<void __cdecl(char const *),std::allocator<void> > *)&v29);
  _Val.m_pObject = (PgSprData *)v12;
  if ( v12 )
    InterlockedIncrement((volatile LONG *)(v12 + 4));
  LOBYTE(v42) = 8;
  std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
    (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)(v38 + 2),
    &_Val);
  LOBYTE(v42) = 7;
  if ( _Val.m_pObject && !InterlockedDecrement((volatile LONG *)&_Val.m_pObject->baseclass_0.m_uiRefCount) )
    ((void (__stdcall *)(signed int))_Val.m_pObject->baseclass_0.vfptr->__vecDelDtor)(1);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, "Metamorphosis", 0xDu);
  LOBYTE(v42) = 9;
  _Val.m_pObject = (PgSprData *)&v31;
  v31 = v38;
  if ( v38 )
    InterlockedIncrement(v38 + 1);
  DirectionControllers::AddController(*v37, &this, (NiPointer<DirectionController>)v31);
  if ( this.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this);
  LOBYTE(v42) = 4;
  if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
  LOBYTE(v42) = 2;
  if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
  v13 = v38;
  LOBYTE(v42) = 0;
  if ( v38 && !InterlockedDecrement(v38 + 1) )
    (*(void (__thiscall **)(volatile LONG *, signed int))*v13)(v13, 1);
  v14 = operator new(0x18u);
  v15 = (int)v14;
  if ( v14 )
  {
    v31 = &NiRefObject::ms_uiObjects;
    *(_DWORD *)v14 = &NiRefObject::_vftable_;
    *((_DWORD *)v14 + 1) = 0;
    InterlockedIncrement(v31);
    *(_DWORD *)v15 = &DirectionController::_vftable_;
    *(_DWORD *)(v15 + 8) = 0;
    *(_DWORD *)(v15 + 12) = 0;
    *(_DWORD *)(v15 + 16) = 0;
    v38 = (volatile LONG *)v15;
  }
  else
  {
    v38 = 0;
    v15 = 0;
  }
  spUnMetamorDirection.m_pObject = (DirectionController *)v15;
  if ( v15 )
    InterlockedIncrement((volatile LONG *)(v15 + 4));
  v42 = 10;
  v16 = operator new(0x48u);
  spUnMetaActionEvent.m_pObject = (TimerController *)v16;
  LOBYTE(v42) = 11;
  if ( v16 )
  {
    TimerController::TimerController((TimerController *)v16);
    v18 = v17;
  }
  else
  {
    v18 = 0;
  }
  spUnMetaActionEvent.m_pObject = (TimerController *)v18;
  if ( v18 )
    InterlockedIncrement((volatile LONG *)(v18 + 4));
  spMetamorDirection.m_pObject = (DirectionController *)&v25;
  v30 = 15;
  v29 = 0;
  LOBYTE(v42) = 12;
  v25.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v25, "UnMetamorphosis", 0xFu);
  TimerController::SetEventName((TimerController *)v18, v25);
  TimerController::SetDelayTime((TimerController *)v18, 0.0);
  spMetamorDirection.m_pObject = (DirectionController *)&v29;
  *(_DWORD *)&v25.baseclass_0.___u0.baseclass_0.dummy[0] = Char::ActAction_BaseMode;
  v26 = 0;
  v27 = pChar;
  v29 = 0;
  v30 = 0;
  *(float *)&v31 = 0.0;
  v28 = spUnMetamorDirection.m_pObject;
  boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>>(
    (boost::function1<void,char const *,std::allocator<void> > *)&v29,
    *(boost::_bi::bind_t<bool,boost::_mfi::mf1<bool,Char,char const *>,boost::_bi::list2<boost::_bi::value<Char *>,boost::arg<1> > > *)&v25);
  TimerController::SetCallBackFunc(
    (TimerController *)v18,
    *(boost::function<void __cdecl(char const *),std::allocator<void> > *)&v29);
  _Val.m_pObject = (PgSprData *)v18;
  if ( v18 )
    InterlockedIncrement((volatile LONG *)(v18 + 4));
  LOBYTE(v42) = 13;
  std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
    (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)(v38 + 2),
    &_Val);
  v19 = _Val.m_pObject;
  LOBYTE(v42) = 12;
  if ( _Val.m_pObject && !InterlockedDecrement((volatile LONG *)&_Val.m_pObject->baseclass_0.m_uiRefCount) )
    v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
  v20 = operator new(0x48u);
  spMetamorDirection.m_pObject = (DirectionController *)v20;
  LOBYTE(v42) = 14;
  if ( v20 )
  {
    TimerController::TimerController((TimerController *)v20);
    v22 = v21;
  }
  else
  {
    v22 = 0;
  }
  spMetamorDirection.m_pObject = (DirectionController *)v22;
  if ( v22 )
    InterlockedIncrement((volatile LONG *)(v22 + 4));
  LOBYTE(v42) = 15;
  TimerController::SetDelayTime((TimerController *)v22, 2.0);
  _Val.m_pObject = (PgSprData *)&v25;
  v30 = 15;
  v29 = 0;
  v25.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&v25, "dummy", 5u);
  TimerController::SetEventName((TimerController *)v22, v25);
  _Val.m_pObject = (PgSprData *)&v29;
  this.baseclass_0._Myres = (unsigned int)pChar;
  *(_DWORD *)&v25.baseclass_0.___u0.baseclass_0.dummy[0] = Char::Shape_UnMetamorphosis;
  v26 = 0;
  v27 = pChar;
  this.baseclass_0._Mysize = 0;
  v29 = 0;
  v30 = 0;
  *(float *)&v31 = 0.0;
  v28 = spUnMetamorDirection.m_pObject;
  boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>>(
    (boost::function1<void,char const *,std::allocator<void> > *)&v29,
    *(boost::_bi::bind_t<bool,boost::_mfi::mf1<bool,Char,char const *>,boost::_bi::list2<boost::_bi::value<Char *>,boost::arg<1> > > *)&v25);
  TimerController::SetCallBackFunc(
    (TimerController *)v22,
    *(boost::function<void __cdecl(char const *),std::allocator<void> > *)&v29);
  _Val.m_pObject = (PgSprData *)v22;
  if ( v22 )
    InterlockedIncrement((volatile LONG *)(v22 + 4));
  LOBYTE(v42) = 16;
  std::vector<NiPointer<PgSprData>_std::allocator<NiPointer<PgSprData>>>::push_back(
    (std::vector<NiPointer<PgSprData>,std::allocator<NiPointer<PgSprData> > > *)(v38 + 2),
    &_Val);
  LOBYTE(v42) = 15;
  if ( _Val.m_pObject && !InterlockedDecrement((volatile LONG *)&_Val.m_pObject->baseclass_0.m_uiRefCount) )
    ((void (__stdcall *)(signed int))_Val.m_pObject->baseclass_0.vfptr->__vecDelDtor)(1);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, "UnMetamorphosis", 0xFu);
  LOBYTE(v42) = 17;
  _Val.m_pObject = (PgSprData *)&v31;
  v31 = v38;
  if ( v38 )
    InterlockedIncrement(v38 + 1);
  DirectionControllers::AddController(*v37, &this, (NiPointer<DirectionController>)v31);
  if ( this.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this);
  LOBYTE(v42) = 12;
  if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v22)(v22, 1);
  LOBYTE(v42) = 10;
  if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
  v23 = v38;
  LOBYTE(v42) = 0;
  if ( v38 && !InterlockedDecrement(v38 + 1) )
    (*(void (__thiscall **)(volatile LONG *, signed int))*v23)(v23, 1);
  return (NiPointer<DirectionControllers> *)v37;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9CE1B8: using guessed type int (__thiscall *DirectionController___vftable_)(void *p, std::_Nonscalar_ptr_iterator_tag __formal);
// A85C00: using guessed type int __security_cookie;

//----- (006E72D0) --------------------------------------------------------
boost::detail::function::any_pointer __cdecl boost::detail::function::functor_manager<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_int_int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>_std::allocator<void>>::manager(boost::detail::function::any_pointer function_obj_ptr, boost::detail::function::functor_manager_operation_type op, boost::detail::function::function_obj_tag __formal)
{
  boost::detail::function::any_pointer result; // eax@2
  std::exception this; // [sp+0h] [bp-Ch]@4

  if ( op )
  {
    operator delete(function_obj_ptr.obj_ptr);
    result.obj_ptr = 0;
  }
  else
  {
    result.obj_ptr = operator new(0x10u);
    if ( !result.obj_ptr )
    {
      op = 0;
      std::exception::exception(&this, (const char *const *)&op);
      this.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&this, &_TI2_AVbad_alloc_std__);
    }
    *(_DWORD *)result.obj_ptr = *(_DWORD *)function_obj_ptr.obj_ptr;
    *((_DWORD *)result.obj_ptr + 1) = *((_DWORD *)function_obj_ptr.obj_ptr + 1);
    *((_DWORD *)result.obj_ptr + 2) = *((_DWORD *)function_obj_ptr.obj_ptr + 2);
    *((_DWORD *)result.obj_ptr + 3) = *((_DWORD *)function_obj_ptr.obj_ptr + 3);
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006E7350) --------------------------------------------------------
boost::detail::function::any_pointer __cdecl boost::detail::function::functor_manager<boost::_bi::bind_t<void_boost::_mfi::mf1<void_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>_std::allocator<void>>::manage(boost::detail::function::any_pointer functor_ptr, boost::detail::function::functor_manager_operation_type op)
{
  return boost::detail::function::functor_manager<boost::_bi::bind_t<void_boost::_mfi::mf2<void_GameFrameWork_int_int>_boost::_bi::list3<boost::_bi::value<GameFrameWork__>_boost::arg<1>_boost::_bi::value<unsigned_int>>>_std::allocator<void>>::manager(
           functor_ptr,
           op,
           0);
}

//----- (006E7370) --------------------------------------------------------
boost::detail::function::unusable *__cdecl boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>_void_char_const__>::invoke(boost::detail::function::unusable *result, boost::detail::function::any_pointer function_obj_ptr, const char *a0)
{
  (*(void (__thiscall **)(_DWORD, _DWORD))function_obj_ptr.obj_ptr)(
    *((_DWORD *)function_obj_ptr.obj_ptr + 1) + *((_DWORD *)function_obj_ptr.obj_ptr + 2),
    a0);
  return result;
}

//----- (006E7390) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::find(...)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // edi@1
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v5; // eax@1
  unsigned int v6; // ecx@2
  int v7; // eax@2
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *v8; // eax@5
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *_Where; // [sp+18h] [bp+Ch]@1

  v3 = _Keyval;
  v4 = this;
  v5 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)this,
         _Keyval);
  _Where = v5;
  if ( v5 == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&v4->baseclass_0
             + 1) )
    goto LABEL_9;
  v6 = v5->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v7 = (int)&v5->_Myval;
  if ( *(_DWORD *)(v7 + 20) >= 0x10u )
    v7 = *(_DWORD *)v7;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         v3,
         0,
         v3->baseclass_0._Mysize,
         (const char *)v7,
         v6) < 0 )
  {
LABEL_9:
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *((_DWORD *)&v4->baseclass_0 + 1);
  }
  else
  {
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  }
  return v8;
}

//----- (006E7400) --------------------------------------------------------
void __thiscall boost::function1<void_char_const___std::allocator<void>>::assign_to<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>>(boost::function1<void,char const *,std::allocator<void> > *this, boost::_bi::bind_t<bool,boost::_mfi::mf1<bool,Char,char const *>,boost::_bi::list2<boost::_bi::value<Char *>,boost::arg<1> > > f)
{
  boost::function1<void,char const *,std::allocator<void> > *v2; // esi@1
  void *v3; // eax@2
  NiUnsharedGeometryGroup thisa; // [sp+4h] [bp-20h]@1
  int v5; // [sp+10h] [bp-14h]@1
  int (__thiscall **pExceptionObject)(void *, char); // [sp+14h] [bp-10h]@5
  char *_What; // [sp+20h] [bp-4h]@5

  v2 = this;
  thisa.baseclass_0.m_uiRefCount = *((_DWORD *)&f.f_.f_ + 1);
  thisa.baseclass_0.vfptr = (NiGeometryGroupVtbl *)f.f_.f_;
  thisa.baseclass_0.m_pkD3DDevice = (IDirect3DDevice9 *)f.l_.a1_.t_;
  v5 = *(_DWORD *)&f.l_.a2_.dummy[0];
  if ( !NiD3DTimeSyncController::CanBeExtracted(&thisa) )
  {
    v2->invoker = boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<bool_boost::_mfi::mf1<bool_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>_void_char_const__>::invoke;
    v2->baseclass_0.manager = boost::detail::function::functor_manager<boost::_bi::bind_t<void_boost::_mfi::mf1<void_Char_char_const__>_boost::_bi::list2<boost::_bi::value<Char__>_boost::arg<1>>>_std::allocator<void>>::manage;
    v3 = operator new(0x10u);
    if ( !v3 )
    {
      _What = 0;
      std::exception::exception((std::exception *)&pExceptionObject, (const char *const *)&_What);
      pExceptionObject = &std::bad_alloc::_vftable_;
      _CxxThrowException(&pExceptionObject, &_TI2_AVbad_alloc_std__);
    }
    *(_DWORD *)v3 = thisa.baseclass_0.vfptr;
    *((_DWORD *)v3 + 1) = thisa.baseclass_0.m_uiRefCount;
    *((_DWORD *)v3 + 2) = thisa.baseclass_0.m_pkD3DDevice;
    *((_DWORD *)v3 + 3) = v5;
    v2->baseclass_0.functor.obj_ptr = v3;
  }
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006E74A0) --------------------------------------------------------
void __cdecl std::_Dest_val<std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>(std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > > *_Alval, std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *_Pdest)
{
  INsFile_NodeCreater *v2; // esi@1

  v2 = _Pdest->baseclass_0.second.m_pObject;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  if ( _Pdest->baseclass_0.first.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Pdest->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Pdest->baseclass_0.first.baseclass_0._Myres = 15;
  _Pdest->baseclass_0.first.baseclass_0._Mysize = 0;
  _Pdest->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (006E7530) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Linsert(...)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v4; // edx@1
  int v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v6; // edi@1
  bool v7; // al@1
  unsigned int v8; // ecx@2
  const char *v9; // eax@4
  const char *v10; // edx@6
  unsigned int v11; // esi@8
  unsigned int v12; // ecx@8
  int v13; // eax@12
  bool v14; // sf@12
  unsigned int v15; // edi@17
  unsigned int v16; // esi@19
  unsigned int v17; // edx@21
  const char *v18; // ecx@24
  int v19; // eax@26
  bool v20; // sf@26
  signed int v21; // eax@28
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v22; // esi@37
  int v23; // ecx@40
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocat *v24; // eax@40
  bool v25; // cf@42
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > *v26; // ebx@42
  unsigned int v27; // edx@42
  const char *v28; // eax@43
  bool v29; // [sp-Ch] [bp-2Ch]@39
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v30; // [sp-8h] [bp-28h]@39
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v31; // [sp-4h] [bp-24h]@39
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Wherenode; // [sp+Ch] [bp-14h]@4
  unsigned int v33; // [sp+10h] [bp-10h]@2
  unsigned int v34; // [sp+14h] [bp-Ch]@2
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *thisa; // [sp+18h] [bp-8h]@1
  char _Addleft; // [sp+1Ch] [bp-4h]@1

  v4 = _Node;
  v5 = *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 4);
  v6 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)*((_DWORD *)&this->baseclass_0 + 1);
  v7 = 1;
  thisa = this;
  _Addleft = 1;
  if ( !*(_BYTE *)(v5 + 45) )
  {
    v8 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
    v34 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
    v33 = _Node->_Myval.baseclass_0.first.baseclass_0._Myres;
    while ( 1 )
    {
      _Wherenode = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v5;
      v9 = (const char *)(v5 + 12);
      if ( _Leftish )
      {
        if ( v33 < 0x10 )
          v10 = (const char *)&v4->_Myval;
        else
          v10 = *(const char **)&v4->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
        v11 = *(_DWORD *)(v5 + 28);
        v12 = v11;
        if ( v11 >= v34 )
          v12 = v34;
        if ( *(_DWORD *)(v5 + 32) >= 0x10u )
          v9 = *(const char **)v9;
        v13 = std::char_traits<char>::compare(v9, v10, v12);
        v14 = v13 < 0;
        if ( !v13 )
        {
          if ( v11 < v34 )
          {
            v7 = 0;
            goto LABEL_32;
          }
          v14 = (v11 != v34) < 0;
        }
        v7 = !v14;
      }
      else
      {
        v15 = *(_DWORD *)(v5 + 28);
        if ( *(_DWORD *)(v5 + 32) >= 0x10u )
          v9 = *(const char **)v9;
        v16 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
        if ( v8 < v16 )
          v16 = v8;
        v17 = v16;
        if ( v16 >= v15 )
          v17 = *(_DWORD *)(v5 + 28);
        if ( v33 < 0x10 )
          v18 = (const char *)&_Node->_Myval;
        else
          v18 = *(const char **)&_Node->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
        v19 = std::char_traits<char>::compare(v18, v9, v17);
        v20 = v19 < 0;
        if ( !v19 )
        {
          if ( v16 >= v15 )
            v21 = v16 != v15;
          else
            v21 = -1;
          v20 = v21 < 0;
        }
        v7 = v20;
      }
LABEL_32:
      _Addleft = v7;
      if ( v7 )
        v5 = *(_DWORD *)v5;
      else
        v5 = *(_DWORD *)(v5 + 8);
      v4 = _Node;
      if ( *(_BYTE *)(v5 + 45) )
      {
        v6 = _Wherenode;
        this = thisa;
        break;
      }
      v8 = v34;
    }
  }
  v22 = v6;
  *(_DWORD *)&_Leftish = v6;
  if ( v7 )
  {
    if ( v6 == **((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string ***)&this->baseclass_0
                + 1) )
    {
      v31 = v4;
      v30 = v6;
      v29 = 1;
LABEL_40:
      v23 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Insert(
                          this,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pa *)&_Leftish,
                          v29,
                          v30,
                          v31)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v24 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v23;
      result->baseclass_0.second = 1;
      return v24;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *)&_Leftish);
    v22 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)_Leftish;
    v4 = _Node;
  }
  v25 = v4->_Myval.baseclass_0.first.baseclass_0._Myres < 0x10;
  v26 = &v4->_Myval;
  v27 = v4->_Myval.baseclass_0.first.baseclass_0._Mysize;
  if ( v25 )
    v28 = (const char *)v26;
  else
    v28 = *(const char **)&v26->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         &v22->_Myval.baseclass_0.first,
         0,
         v22->_Myval.baseclass_0.first.baseclass_0._Mysize,
         v28,
         v27) < 0 )
  {
    v31 = _Node;
    v30 = v6;
    v29 = _Addleft;
    this = thisa;
    goto LABEL_40;
  }
  std::_Dest_val<std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>(
    (std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,NiPointer<INsFile_NodeCreater> > > *)&thisa->baseclass_0
  + 13,
    v26);
  operator delete(_Node);
  v24 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v22;
  result->baseclass_0.second = 0;
  return v24;
}

//----- (006E76E0) --------------------------------------------------------
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController> > *__cdecl std::make_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>__>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Val1, NiPointer<DirectionController> *_Val2)
{
  DirectionController *v3; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+4h] [bp-2Ch]@1
  unsigned int v6; // [sp+20h] [bp-10h]@1
  int v7; // [sp+2Ch] [bp-4h]@1
  int v8; // [sp+30h] [bp+0h]@1

  v6 = (unsigned int)&v8 ^ __security_cookie;
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&this, _Val1, 0, 0xFFFFFFFFu);
  result->baseclass_0.first.baseclass_0._Myres = 15;
  result->baseclass_0.first.baseclass_0._Mysize = 0;
  v7 = 0;
  result->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&result->baseclass_0.first, &this);
  v3 = _Val2->m_pObject;
  result->baseclass_0.second.m_pObject = _Val2->m_pObject;
  if ( v3 )
    InterlockedIncrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount);
  if ( this.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this);
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006E7790) --------------------------------------------------------
void *__thiscall DirectionController::_scalar_deleting_destructor_(DirectionController *this, unsigned int __formal)
{
  DirectionController *v2; // esi@1
  NiPointer<PgSprData> *v3; // eax@1

  v2 = this;
  v3 = *(NiPointer<PgSprData> **)&this->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 )
  {
    std::_Destroy_range<std::allocator<NiPointer<PgSprData>>>(
      v3,
      (NiPointer<PgSprData> *)this->m_vecRunTimers.baseclass_0._Mylast,
      (std::allocator<NiPointer<PgSprData> > *)&this->m_vecRunTimers.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)__formal);
    operator delete(*(void **)&v2->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v2->m_vecRunTimers.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_vecRunTimers.baseclass_0._Mylast = 0;
  v2->m_vecRunTimers.baseclass_0._Myend = 0;
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
  if ( __formal & 1 )
    operator delete(v2);
  return v2;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (006E7830) --------------------------------------------------------
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>>>(...)
{
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v2; // esi@1
  void *v3; // edi@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController> > *v4; // ebx@3
  DirectionController *v5; // eax@3
  int v7; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@6
  char *v9; // [sp+Ch] [bp-1Ch]@2
  char *v10; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v12; // [sp+18h] [bp-10h]@1
  int v13; // [sp+24h] [bp-4h]@2

  v12 = &v7;
  v2 = this;
  v3 = operator new(0x30u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v3 + 22) = 0;
  v13 = 0;
  v10 = (char *)v3 + 12;
  v9 = (char *)v3 + 12;
  LOBYTE(v13) = 1;
  if ( v3 != (void *)-12 )
  {
    v4 = _Val;
    *((_DWORD *)v3 + 8) = 15;
    *((_DWORD *)v3 + 7) = 0;
    *((_BYTE *)v3 + 12) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 12),
      &v4->baseclass_0.first);
    v5 = v4->baseclass_0.second.m_pObject;
    *((_DWORD *)v3 + 10) = v5;
    if ( v5 )
      InterlockedIncrement((volatile LONG *)&v5->baseclass_0.m_uiRefCount);
  }
  return (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006E7920) --------------------------------------------------------
void __thiscall DirectionControllers::DirectionControllers(DirectionControllers *this)
{
  DirectionControllers *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  DirectionControllers *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&DirectionControllers::_vftable_;
  v6 = 0;
  *((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 2) = 0;
  v2 = operator new(0x30u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1) = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0
                                                                                       + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0
                                                                                       + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1) + 45) = 1;
  v1->m_spCurrentController.m_pObject = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9CE1C0: using guessed type int (__thiscall *DirectionControllers___vftable_)(void *p, char);

//----- (006E79E0) --------------------------------------------------------
void __thiscall DirectionControllers::_DirectionControllers(DirectionControllers *this)
{
  DirectionControllers *v1; // edi@1
  DirectionController *v2; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v3; // ST08_4@5
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s v4; // ST04_4@5
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba result; // [sp+0h] [bp-18h]@5
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<DirectionController>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<c *v6; // [sp+4h] [bp-14h]@5
  DirectionControllers *v7; // [sp+8h] [bp-10h]@1
  int v8; // [sp+14h] [bp-4h]@1

  v1 = this;
  v7 = this;
  v2 = this->m_spCurrentController.m_pObject;
  v8 = 1;
  if ( v2 && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.m_uiRefCount) && v2 )
    v2->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
  v6 = &v1->m_mapDirectionCtrls;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)*((_DWORD *)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1);
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<s)**((_DWORD **)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1);
  LOBYTE(v8) = 2;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<DirectionController>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<DirectionController>>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<NiTexture>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::cha *)&v1->m_mapDirectionCtrls,
    &result,
    v4,
    v3);
  operator delete(*((void **)&v1->m_mapDirectionCtrls.baseclass_0.baseclass_0 + 1));
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (006E7A80) --------------------------------------------------------
void *__thiscall DirectionControllers::_scalar_deleting_destructor_(DirectionControllers *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  DirectionControllers::_DirectionControllers(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006E7AB0) --------------------------------------------------------
int __thiscall TimerController::GetLoopMaxCount(TimerController *this)
{
  return this->m_nLoopMaxCount;
}

//----- (006E7AC0) --------------------------------------------------------
void __thiscall TimerController::SetLoopMaxCount(TimerController *this, int val)
{
  this->m_nLoopMaxCount = val;
}

//----- (006E7AD0) --------------------------------------------------------
int __thiscall TimerController::GetCurRunCount(TimerController *this)
{
  return this->m_nLoopCurCount;
}

//----- (006E7AE0) --------------------------------------------------------
void __thiscall TimerController::SetDelayTime(TimerController *this, float fDelayTime)
{
  this->m_nLoopCurCount = 0;
  this->m_fMaxDelayTime = fDelayTime;
  this->m_fCurDelayTime = fDelayTime;
}

//----- (006E7B00) --------------------------------------------------------
float __thiscall TimerController::GetDelayTime(TimerController *this)
{
  double v1; // st7@1
  float result; // st7@2

  v1 = this->m_fMaxDelayTime;
  LODWORD(result) = LODWORD(v1);
  return result;
}

//----- (006E7B10) --------------------------------------------------------
bool __thiscall TimerController::OnTimerEnable(TimerController *this, bool bEnable)
{
  int v2; // eax@1

  LOBYTE(v2) = bEnable;
  this->m_fFirstTime = 0.0;
  this->m_bEnable = bEnable;
  if ( bEnable )
  {
    v2 = this->m_nLoopMaxCount;
    if ( v2 )
    {
      this->m_nLoopCurCount = v2;
      LOBYTE(v2) = this->m_bEnable;
    }
    else
    {
      this->m_bEnable = 0;
    }
  }
  return v2;
}

//----- (006E7B40) --------------------------------------------------------
bool __thiscall TimerController::IsEnable(TimerController *this)
{
  return this->m_bEnable;
}

//----- (006E7B50) --------------------------------------------------------
bool __thiscall TimerController::UpdateCheckTime(TimerController *this, float DeltaTime)
{
  double v2; // st7@2
  int v3; // eax@3
  double v4; // st6@3
  bool v5; // sf@3
  unsigned __int8 v6; // of@3
  float *v7; // eax@3
  int v8; // eax@5
  bool result; // al@6
  TimerController *v10; // [sp+0h] [bp-4h]@1

  v10 = this;
  if ( this->m_bEnable
    && (DeltaTime = this->m_fCurDelayTime - DeltaTime, v2 = DeltaTime, this->m_fCurDelayTime = DeltaTime, v2 <= 0.0) )
  {
    v3 = this->m_nLoopCurCount - 1;
    v4 = v2 + this->m_fMaxDelayTime;
    v10 = (TimerController *)v3;
    v6 = __OFSUB__(v3, -1);
    v5 = v3 + 1 < 0;
    this->m_fCurDelayTime = v4;
    DeltaTime = -6.8056469e38;
    v7 = &DeltaTime;
    if ( !(v5 ^ v6) )
      v7 = (float *)&v10;
    v8 = *(_DWORD *)v7;
    this->m_nLoopCurCount = v8;
    if ( v8 )
    {
      ((void (__stdcall *)(TimerController *))this->baseclass_0.vfptr[2].__vecDelDtor)(v10);
      result = 1;
    }
    else
    {
      this->m_bEnable = 0;
      this->m_fFirstTime = 0.0;
      ((void (__stdcall *)(TimerController *))this->baseclass_0.vfptr[2].__vecDelDtor)(v10);
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006E7BE0) --------------------------------------------------------
void __thiscall TimerController::Update(TimerController *this, float fAccolTime)
{
  TimerController *v2; // esi@1
  float v3; // ST08_4@4

  v2 = this;
  if ( this->m_bEnable )
  {
    if ( 0.0 == this->m_fFirstTime )
      this->m_fFirstTime = fAccolTime;
    v3 = fAccolTime - this->m_fFirstTime;
    TimerController::UpdateCheckTime(this, v3);
    v2->m_fFirstTime = fAccolTime;
  }
}

//----- (006E7C20) --------------------------------------------------------
void __thiscall TimerController::TimerController(TimerController *this)
{
  TimerController *v1; // esi@1

  v1 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v1->baseclass_0.vfptr = (NiRefObjectVtbl *)&TimerController::_vftable_;
  v1->m_CallBackFunction.baseclass_0.baseclass_0.manager = 0;
  v1->m_CallBackFunction.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v1->m_CallBackFunction.baseclass_0.invoker = 0;
  v1->m_strEventName.baseclass_0._Mysize = 0;
  v1->m_strEventName.baseclass_0._Myres = 15;
  v1->m_strEventName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_fCurDelayTime = 0.0;
  v1->m_fMaxDelayTime = 0.0;
  v1->m_nLoopCurCount = 1;
  v1->m_fFirstTime = 0.0;
  v1->m_nLoopMaxCount = 1;
  v1->m_bEnable = 0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9CE1C8: using guessed type int (__thiscall *TimerController___vftable_)(void *p, char);

//----- (006E7C80) --------------------------------------------------------
void __thiscall TimerController::TimerController(TimerController *this, float fDelayTime)
{
  TimerController *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  this->baseclass_0.m_uiRefCount = 0;
  InterlockedIncrement(&NiRefObject::ms_uiObjects);
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&TimerController::_vftable_;
  v2->m_CallBackFunction.baseclass_0.baseclass_0.manager = 0;
  v2->m_CallBackFunction.baseclass_0.baseclass_0.functor.obj_ptr = 0;
  v2->m_CallBackFunction.baseclass_0.invoker = 0;
  v2->m_strEventName.baseclass_0._Mysize = 0;
  v2->m_strEventName.baseclass_0._Myres = 15;
  v2->m_strEventName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_fCurDelayTime = 0.0;
  v2->m_fMaxDelayTime = fDelayTime;
  v2->m_nLoopCurCount = 1;
  v2->m_nLoopMaxCount = 1;
  v2->m_bEnable = 0;
  v2->m_fFirstTime = 0.0;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);
// 9CE1C8: using guessed type int (__thiscall *TimerController___vftable_)(void *p, char);

//----- (006E7CE0) --------------------------------------------------------
void __thiscall TimerController::OnTimerMessage(TimerController *this)
{
  bool v1; // cf@1
  char *v2; // eax@1
  int v3; // [sp-10h] [bp-40h]@1
  std::exception thisa; // [sp+Ch] [bp-24h]@4
  char *_What; // [sp+18h] [bp-18h]@4
  char v6; // [sp+1Fh] [bp-11h]@6
  int *v7; // [sp+20h] [bp-10h]@1
  int v8; // [sp+2Ch] [bp-4h]@1

  v7 = &v3;
  v1 = this->m_strEventName.baseclass_0._Myres < 0x10;
  v2 = (char *)&this->m_strEventName;
  v8 = 0;
  if ( !v1 )
    v2 = *(char **)v2;
  if ( !this->m_CallBackFunction.baseclass_0.baseclass_0.manager )
  {
    _What = "call to empty boost::function";
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&boost::bad_function_call::_vftable_;
    LOBYTE(v8) = 1;
    boost::throw_exception<boost::bad_function_call>((boost::bad_function_call *)&thisa);
  }
  this->m_CallBackFunction.baseclass_0.invoker(
    (boost::detail::function::unusable *)&v6,
    (boost::detail::function::any_pointer)this->m_CallBackFunction.baseclass_0.baseclass_0.functor.obj_ptr,
    v2);
}
// 996FDC: using guessed type int (__thiscall *boost__bad_function_call___vftable_)(void *p, char);

//----- (006E7D80) --------------------------------------------------------
void __thiscall TimerController::SetCallBackFunc(TimerController *this, boost::function<void __cdecl(char const *),std::allocator<void> > Func)
{
  int v2; // eax@1
  char *v3; // esi@1
  boost::detail::function::any_pointer (__cdecl *v4)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // ecx@1
  boost::detail::function::any_pointer (__cdecl *v5)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edi@1
  boost::detail::function::unusable *(__cdecl *v6)(boost::detail::function::unusable *, boost::detail::function::any_pointer, const char *); // ebx@1
  boost::detail::function::any_pointer (__cdecl *v7)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type); // edx@4
  int v8; // edx@4
  char v9; // [sp+0h] [bp-18h]@3
  int v10; // [sp+14h] [bp-4h]@1

  v2 = 0;
  v3 = (char *)&this->m_CallBackFunction;
  v4 = Func.baseclass_0.baseclass_0.manager;
  v5 = 0;
  v6 = 0;
  v10 = 0;
  if ( (_DWORD)Func.baseclass_0.baseclass_0.manager )
  {
    v6 = Func.baseclass_0.invoker;
    v5 = Func.baseclass_0.baseclass_0.manager;
    v2 = (int)Func.baseclass_0.baseclass_0.manager(
                (boost::detail::function::any_pointer)Func.baseclass_0.baseclass_0.functor.obj_ptr,
                0);
    v4 = Func.baseclass_0.baseclass_0.manager;
  }
  if ( v3 != &v9 )
  {
    v7 = v5;
    v5 = *(boost::detail::function::any_pointer (__cdecl **)(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type))v3;
    *(_DWORD *)v3 = v7;
    v8 = v2;
    v2 = *((_DWORD *)v3 + 1);
    *((_DWORD *)v3 + 1) = v8;
    *((_DWORD *)v3 + 2) = v6;
  }
  if ( v5 )
  {
    v5((boost::detail::function::any_pointer)v2, destroy_functor_tag);
    v4 = Func.baseclass_0.baseclass_0.manager;
  }
  v10 = -1;
  if ( v4 )
    v4(Func.baseclass_0.baseclass_0.functor, destroy_functor_tag);
}

//----- (006E7E20) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall TimerController::GetEventName(TimerController *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    result,
    &this->m_strEventName,
    0,
    0xFFFFFFFFu);
  return result;
}

//----- (006E7E50) --------------------------------------------------------
void __thiscall TimerController::SetEventName(TimerController *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > val)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_strEventName,
    &val,
    0,
    0xFFFFFFFFu);
  if ( val.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&val);
}

//----- (006E7EB0) --------------------------------------------------------
void *__thiscall TimerController::_scalar_deleting_destructor_(TimerController *this, unsigned int a2)
{
  TimerController *v2; // esi@1
  bool v3; // cf@1
  int v5; // [sp+Ch] [bp-4h]@1

  v2 = this;
  v3 = this->m_strEventName.baseclass_0._Myres < 0x10;
  v5 = 0;
  if ( !v3 )
    operator delete(*(void **)&this->m_strEventName.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_strEventName.baseclass_0._Myres = 15;
  v2->m_strEventName.baseclass_0._Mysize = 0;
  v2->m_strEventName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( v2->m_CallBackFunction.baseclass_0.baseclass_0.manager )
    v2->m_CallBackFunction.baseclass_0.baseclass_0.functor.obj_ptr = (void *)v2->m_CallBackFunction.baseclass_0.baseclass_0.manager(
                                                                               (boost::detail::function::any_pointer)v2->m_CallBackFunction.baseclass_0.baseclass_0.functor.obj_ptr,
                                                                               destroy_functor_tag);
  v2->m_CallBackFunction.baseclass_0.baseclass_0.manager = 0;
  v2->m_CallBackFunction.baseclass_0.invoker = 0;
  v2->baseclass_0.vfptr = (NiRefObjectVtbl *)&NiRefObject::_vftable_;
  InterlockedDecrement(&NiRefObject::ms_uiObjects);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97CA4C: using guessed type int (__thiscall *NiRefObject___vftable_)(void *p, char);

//----- (006E7F60) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::GuildAcademyHallOfFameWin(GuildAcademyHallOfFameWin *this)
{
  GuildAcademyHallOfFameWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkGuildName = 0;
  v1->m_pkGuildFoundingDay = 0;
  v1->m_pkTotalGraduate = 0;
  v1->m_pListWinHallOfFame = 0;
  v1->m_pSlideBarHallOfFame = 0;
  v1->m_NumberOfGraduate = 0;
  v1->m_nSortColumn = 0;
  *(_DWORD *)&v1->m_bReverse1 = 0;
  v1->m_bReverse5 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyHallOfFameWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyHallOfFameWin::_vftable_;
}
// 9CE4C8: using guessed type int (__stdcall *GuildAcademyHallOfFameWin___vftable_)(int uiFlags);
// 9CE4E4: using guessed type int (__thiscall *GuildAcademyHallOfFameWin___vftable_)(void *p, char);

//----- (006E7FC0) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::_GuildAcademyHallOfFameWin(GuildAcademyHallOfFameWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyHallOfFameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyHallOfFameWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CE4C8: using guessed type int (__stdcall *GuildAcademyHallOfFameWin___vftable_)(int uiFlags);
// 9CE4E4: using guessed type int (__thiscall *GuildAcademyHallOfFameWin___vftable_)(void *p, char);

//----- (006E8010) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle01(GuildAcademyHallOfFameWin *this)
{
  GuildAcademyHallOfFameWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinHallOfFame;
  if ( v2 )
  {
    v3 = v1->m_bReverse1 == 0;
    v1->m_nSortColumn = 0;
    v1->m_bReverse1 = v3;
    SlideListWin::Sort(v2, 0, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinHallOfFame);
  }
}

//----- (006E8050) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle02(GuildAcademyHallOfFameWin *this)
{
  GuildAcademyHallOfFameWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinHallOfFame;
  if ( v2 )
  {
    v3 = v1->m_bReverse2 == 0;
    v1->m_nSortColumn = 1;
    v1->m_bReverse2 = v3;
    SlideListWin::Sort(v2, 1, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinHallOfFame);
  }
}

//----- (006E8090) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle03(GuildAcademyHallOfFameWin *this)
{
  GuildAcademyHallOfFameWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinHallOfFame;
  if ( v2 )
  {
    v3 = v1->m_bReverse3 == 0;
    v1->m_nSortColumn = 2;
    v1->m_bReverse3 = v3;
    SlideListWin::Sort(v2, 2, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinHallOfFame);
  }
}

//----- (006E80D0) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle04(GuildAcademyHallOfFameWin *this)
{
  GuildAcademyHallOfFameWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinHallOfFame;
  if ( v2 )
  {
    v3 = v1->m_bReverse4 == 0;
    v1->m_nSortColumn = 3;
    v1->m_bReverse4 = v3;
    SlideListWin::Sort(v2, 3, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinHallOfFame);
  }
}

//----- (006E8110) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnSortByTitle05(GuildAcademyHallOfFameWin *this)
{
  GuildAcademyHallOfFameWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinHallOfFame;
  if ( v2 )
  {
    v3 = v1->m_bReverse5 == 0;
    v1->m_nSortColumn = 4;
    v1->m_bReverse5 = v3;
    SlideListWin::Sort(v2, 4, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinHallOfFame);
  }
}

//----- (006E8150) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnHelpLink(GuildAcademyHallOfFameWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildAcademyHonor");
}

//----- (006E8180) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::UpdateMeWin(GuildAcademyHallOfFameWin *this, float fCurTime)
{
  GuildAcademyHallOfFameWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinHallOfFame, v2->m_pSlideBarHallOfFame);
}

//----- (006E81B0) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnClickWinCloseBtn(GuildAcademyHallOfFameWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (006E81E0) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnClickOKBtn(GuildAcademyHallOfFameWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (006E8210) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnSlideBar(GuildAcademyHallOfFameWin *this)
{
  GuildAcademyHallOfFameWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarHallOfFame;
  if ( v2 )
  {
    v3 = v1->m_pListWinHallOfFame;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinHallOfFame->m_nViewStartPos = v1->m_pSlideBarHallOfFame->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinHallOfFame);
    }
  }
}

//----- (006E8260) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::OnCommand(GuildAcademyHallOfFameWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      GuildAcademyHallOfFameWin::OnClickWinCloseBtn(this);
      break;
    case 0x14u:
      GuildAcademyHallOfFameWin::OnClickOKBtn(this);
      break;
    case 0xDu:
      GuildAcademyHallOfFameWin::OnSlideBar(this);
      break;
    case 0xEu:
      GuildAcademyHallOfFameWin::OnSortByTitle01(this);
      break;
    case 0xFu:
      GuildAcademyHallOfFameWin::OnSortByTitle02(this);
      break;
    case 0x10u:
      GuildAcademyHallOfFameWin::OnSortByTitle03(this);
      break;
    case 0x11u:
      GuildAcademyHallOfFameWin::OnSortByTitle04(this);
      break;
    case 0x12u:
      GuildAcademyHallOfFameWin::OnSortByTitle05(this);
      break;
    case 0x15u:
      GuildAcademyHallOfFameWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006E8300) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::AddListItem_DefInfo(GuildAcademyHallOfFameWin *this, EACH_GRADUATE_DATA *pkData)
{
  GuildAcademyHallOfFameWin *v2; // ebx@1
  SlideListWin *v3; // ecx@1
  int v4; // eax@2
  int v5; // edx@2
  int v6; // eax@2
  int v7; // edi@2
  void *v8; // eax@2
  const char *v9; // eax@3
  char *v10; // eax@5
  char acDateTime2[32]; // [sp+8h] [bp-5Ch]@5
  char acDateTime[32]; // [sp+28h] [bp-3Ch]@5
  char acname[21]; // [sp+48h] [bp-1Ch]@2
  unsigned int v14; // [sp+60h] [bp-4h]@1
  int v15; // [sp+64h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinHallOfFame;
  if ( v3 )
  {
    v4 = *(_DWORD *)&pkData->sName.n5_name[0];
    *(_DWORD *)&acname[4] = *(_DWORD *)&pkData->sName.n5_name[4];
    v5 = *(_DWORD *)&pkData->sName.n5_name[12];
    *(_DWORD *)acname = v4;
    v6 = *(_DWORD *)&pkData->sName.n5_name[8];
    *(_DWORD *)&acname[12] = v5;
    *(_DWORD *)&acname[8] = v6;
    *(_DWORD *)&acname[16] = *(_DWORD *)&pkData->sName.n5_name[16];
    acname[20] = 0;
    v7 = SlideListWin::AddText(v3, acname);
    v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pkData->ClassID);
    if ( v8 )
      v9 = (char *)v8 + 21;
    else
      v9 = &byte_9788EB;
    SlideListWin::SetText(v2->m_pListWinHallOfFame, v7, 1u, v9);
    v10 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinHallOfFame, v7, 2u, v10);
    strftime(acDateTime, 0x20u, "%Y-%m-%d", &pkData->tm_dJoinDate);
    SlideListWin::SetText(v2->m_pListWinHallOfFame, v7, 3u, acDateTime);
    strftime(acDateTime2, 0x20u, "%Y-%m-%d", &pkData->tm_dGraduateDate);
    SlideListWin::SetText(v2->m_pListWinHallOfFame, v7, 4u, acDateTime2);
    SlideListWin::SetData(v2->m_pListWinHallOfFame, v7, (unsigned int)pkData);
    SlideListWin::SetFontSize(v2->m_pListWinHallOfFame, v7, 1);
    SlideListWin::SetFontColor(v2->m_pListWinHallOfFame, v7, 255, 255, 255);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (006E8440) --------------------------------------------------------
void __thiscall GuildAcademyHallOfFameWin::On_Recv_NC_GUILD_ACADEMY_GET_GRADUATE_ACK(GuildAcademyHallOfFameWin *this, PROTO_NC_GUILD_ACADEMY_GET_GRADUATE_ACK *pkProto)
{
  int v2; // edx@1
  GuildAcademyHallOfFameWin *v3; // esi@1
  int v4; // ecx@1
  int v5; // eax@1
  PgWinText *v6; // ecx@1
  NiRefObjectVtbl *v7; // ebx@1
  char *v8; // eax@1
  SlideListWin *v9; // ecx@1
  SlideListWin *v10; // ebx@3
  int v11; // eax@4
  int v12; // ebx@4
  EACH_GRADUATE_DATA *v13; // edi@5
  char acDateTime[32]; // [sp+Ch] [bp-38h]@1
  char acname[17]; // [sp+2Ch] [bp-18h]@1
  unsigned int v16; // [sp+40h] [bp-4h]@1
  int v17; // [sp+44h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = *(_DWORD *)&pkProto->GraduateData.sGuildName.n4_name[8];
  v3 = this;
  v4 = *(_DWORD *)&pkProto->GraduateData.sGuildName.n4_name[4];
  *(_DWORD *)acname = *(_DWORD *)&pkProto->GraduateData.sGuildName.n4_name[0];
  v5 = *(_DWORD *)&pkProto->GraduateData.sGuildName.n4_name[12];
  *(_DWORD *)&acname[4] = v4;
  v6 = v3->m_pkGuildName;
  *(_DWORD *)&acname[8] = v2;
  *(_DWORD *)&acname[12] = v5;
  acname[16] = 0;
  ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acname);
  strftime(acDateTime, 0x20u, "%Y-%m-%d", &pkProto->GraduateData.tm_dGuildMakeDate);
  ((void (__stdcall *)(_DWORD))v3->m_pkGuildFoundingDay->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDateTime);
  v7 = v3->m_pkTotalGraduate->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v8 = fs("%d");
  v7[118].__vecDelDtor((NiRefObject *)v3->m_pkTotalGraduate, (unsigned int)v8);
  v9 = v3->m_pListWinHallOfFame;
  if ( v9 )
  {
    if ( pkProto->PartMask & 1 )
    {
      SlideListWin::RemoveAllList(v9);
      SlideBar::SetSplitCnt(v3->m_pSlideBarHallOfFame, 0);
      v10 = v3->m_pListWinHallOfFame;
      v10->m_fCurSlideBtnPos = 0.0;
      v10->m_nViewStartPos = (signed int)((double)v10->m_nSlideSplitCnt * 0.0);
      v3->m_pListWinHallOfFame->m_nViewStartPos = 0;
    }
    v11 = pkProto->GraduateData.NumOfEachGraduateData;
    v12 = 0;
    v3->m_NumberOfGraduate = v11;
    if ( v11 > 0 )
    {
      v13 = (EACH_GRADUATE_DATA *)&pkProto[1];
      do
      {
        GuildAcademyHallOfFameWin::AddListItem_DefInfo(v3, v13);
        ++v12;
        ++v13;
      }
      while ( v12 < v3->m_NumberOfGraduate );
    }
    SlideListWin::Sort(v3->m_pListWinHallOfFame, v3->m_nSortColumn, 0, 0);
    SlideListWin::AlignText(v3->m_pListWinHallOfFame, 4u);
    SlideListWin::AlignText(v3->m_pListWinHallOfFame, 0, 5u);
    SlideListWin::AlignText(v3->m_pListWinHallOfFame, 1u, 5u);
    SlideListWin::AlignText(v3->m_pListWinHallOfFame, 2u, 5u);
    SlideListWin::AlignText(v3->m_pListWinHallOfFame, 3u, 5u);
    SlideListWin::AlignText(v3->m_pListWinHallOfFame, 4u, 5u);
    SlideListWin::UpdateViewList(v3->m_pListWinHallOfFame);
    SlideBar::SetSplitCnt(v3->m_pSlideBarHallOfFame, v3->m_pListWinHallOfFame->m_nSlideSplitCnt);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006E8610) --------------------------------------------------------
GuildAcademyHallOfFameWin *__cdecl GuildAcademyHallOfFameWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildAcademyHallOfFameWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x17Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildAcademyHallOfFameWin::GuildAcademyHallOfFameWin((GuildAcademyHallOfFameWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildAcademyHallOfFameWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006E8740) --------------------------------------------------------
bool __thiscall GuildAcademyHallOfFameWin::Create(GuildAcademyHallOfFameWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyHallOfFameWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  NiSourceTexture *v18; // eax@25
  PgSprData *v19; // eax@25
  PgFont *v20; // eax@27
  PgWinText *v21; // eax@27
  NiRefObjectVtbl *v22; // edx@27
  char *v23; // eax@27
  PgSprData *v24; // eax@29
  PgSprData *v25; // eax@29
  NiPointer<PgSprData::PgHitTester> *v26; // ecx@29
  void *v27; // eax@29
  PgFont *v28; // eax@29
  PgWinText *v29; // eax@29
  void *v30; // edx@29
  int v31; // eax@29
  void *v32; // edx@29
  void *v33; // eax@29
  PgWin *v34; // ST90_4@29
  PgFont *v35; // eax@29
  PgWinAbbreviateText *v36; // eax@29
  PgSprData::PgHitTester *v37; // eax@29
  void *v38; // edx@29
  PgFont *v39; // eax@29
  PgWinText *v40; // eax@29
  void *v41; // ecx@29
  char *v42; // eax@29
  int v43; // eax@29
  void *v44; // edx@29
  PgFont *v45; // eax@29
  PgWinText *v46; // eax@29
  PgSprData::PgHitTester *v47; // eax@29
  void *v48; // edx@29
  PgFont *v49; // eax@29
  PgWinText *v50; // eax@29
  void *v51; // ecx@29
  char *v52; // eax@29
  int v53; // eax@29
  void *v54; // edx@29
  PgFont *v55; // eax@29
  PgWinText *v56; // eax@29
  SLWCreateInfo::Item *v57; // eax@29
  void *v58; // eax@29
  void *v59; // eax@29
  void *v60; // eax@29
  void *v61; // eax@29
  void *v62; // eax@29
  void *v63; // eax@29
  PgSprData *v64; // eax@29
  SlideListWin *v65; // eax@29
  PgSprData *v66; // eax@29
  SlideBar *v67; // eax@29
  int v68; // eax@29
  void *v69; // edx@29
  PgFont *v70; // eax@29
  PgWinText *v71; // eax@29
  NiRefObjectVtbl *v72; // edx@29
  char *v73; // eax@29
  int v74; // ecx@29
  void *v75; // eax@29
  PgFont *v76; // eax@29
  PgWinText *v77; // eax@29
  NiRefObjectVtbl *v78; // edx@29
  char *v79; // eax@29
  int v80; // ecx@29
  void *v81; // eax@29
  PgFont *v82; // eax@29
  PgWinText *v83; // eax@29
  NiRefObjectVtbl *v84; // edx@29
  char *v85; // eax@29
  int v86; // ecx@29
  void *v87; // eax@29
  PgFont *v88; // eax@29
  PgWinText *v89; // eax@29
  NiRefObjectVtbl *v90; // edx@29
  char *v91; // eax@29
  int v92; // ecx@29
  void *v93; // eax@29
  PgFont *v94; // eax@29
  PgWinText *v95; // eax@29
  NiRefObjectVtbl *v96; // edx@29
  char *v97; // eax@29
  int v98; // ecx@29
  void *v99; // eax@29
  PgFont *v100; // eax@29
  PgWinText *v101; // edi@29
  NiRefObjectVtbl *v102; // ebx@29
  char *v103; // eax@29
  const char *v104; // [sp+88h] [bp-8Ch]@23
  int *v105; // [sp+8Ch] [bp-88h]@23
  int *v106; // [sp+90h] [bp-84h]@23
  NiSourceTexture *v107; // [sp+94h] [bp-80h]@23
  unsigned int v108; // [sp+98h] [bp-7Ch]@1
  unsigned int uiWidth; // [sp+A8h] [bp-6Ch]@25
  unsigned int uiHeight; // [sp+ACh] [bp-68h]@25
  SLWCreateInfo kCreateInfo; // [sp+B0h] [bp-64h]@29
  NiPointer<NiTexturingProperty> spTexProp; // [sp+CCh] [bp-48h]@4
  NiSourceTexture *pkTexture; // [sp+D0h] [bp-44h]@7
  NiSourceTexture *pkTexture8; // [sp+D4h] [bp-40h]@27
  int uiLeft; // [sp+D8h] [bp-3Ch]@15
  int uiTop; // [sp+DCh] [bp-38h]@15
  NiPointer<NiNode> spNode; // [sp+E0h] [bp-34h]@1
  void *pkTextWin; // [sp+E4h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+E8h] [bp-2Ch]@29
  unsigned int v120; // [sp+104h] [bp-10h]@1
  int v121; // [sp+110h] [bp-4h]@1
  int v122; // [sp+114h] [bp+0h]@1

  v120 = (unsigned int)&v122 ^ __security_cookie;
  v108 = (unsigned int)&v122 ^ __security_cookie;
  v2 = this;
  pkTextWin = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v121 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildAcademyHonor.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v121) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v121) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v121 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, (PgFrameWork *)pkTextWin, "GuildAcademyRanking", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v107 = v16;
      v106 = &uiTop;
      v105 = &uiLeft;
      v104 = "Theme";
    }
    else
    {
      v107 = 0;
      v106 = &uiTop;
      v105 = &uiLeft;
      v104 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v104, v105, v106, v107);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = MenuTexMgr::GetTexture(0x12u);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v18);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v20 = Font::Get(MAIN_MENU);
      v21 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              uiWidth,
              uiHeight,
              v20,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v21;
      ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v22[122].__vecDelDtor)(v21, 1, v108);
      (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v23 = TextData::Get(0x73F2C2B5u);
      (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v23);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xBu,
        0,
        0);
      pkTexture8 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(
          uiLeft - v14,
          uiTop - v15,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x15u,
          0,
          0);
      }
      v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild01", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase;
      v27 = (void *)v26->m_pObject->m_uiWidth;
      pkTexture8 = (NiSourceTexture *)v26->m_pObject->m_uiHeight;
      pkTextWin = v27;
      v28 = Font::Get(0);
      v29 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v28,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v29;
      pkTexture8 = (NiSourceTexture *)v30;
      TextData::Get(0xD8ECE04Du);
      (*(void (__thiscall **)(void *))&pkTexture8[6].m_bStatic)(pkTextWin);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title1Desc", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v31 = **((_DWORD **)pkTextWin + 9);
      v32 = *(void **)(v31 + 24);
      v33 = *(void **)(v31 + 20);
      v34 = g_pkToolTipWin;
      pkTexture8 = (NiSourceTexture *)v32;
      pkTextWin = v33;
      v35 = Font::Get(0);
      v36 = PgWinAbbreviateText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v35,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0,
              0,
              1,
              v34,
              0x1Eu);
      v2->m_pkGuildName = (PgWinText *)v36;
      v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v36,
        5u);
      ((void (__stdcall *)(_DWORD))v2->m_pkGuildName->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)("-");
      v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild02", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
      v38 = (void *)v37->m_uiWidth;
      pkTexture8 = (NiSourceTexture *)v37->m_uiHeight;
      pkTextWin = v38;
      v39 = Font::Get(0);
      v40 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v39,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v41 = v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v40;
      pkTexture8 = (NiSourceTexture *)v41;
      v42 = TextData::Get(0x6F877BF6u);
      (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v42);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title2Desc", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v43 = **((_DWORD **)pkTextWin + 9);
      v44 = *(void **)(v43 + 20);
      pkTexture8 = *(NiSourceTexture **)(v43 + 24);
      pkTextWin = v44;
      v45 = Font::Get(0);
      v46 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v45,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkGuildFoundingDay = v46;
      v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v46,
        5u);
      ((void (__stdcall *)(_DWORD))v2->m_pkGuildFoundingDay->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild03", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
      v48 = (void *)v47->m_uiWidth;
      pkTexture8 = (NiSourceTexture *)v47->m_uiHeight;
      pkTextWin = v48;
      v49 = Font::Get(0);
      v50 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v49,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v51 = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v50;
      pkTexture8 = (NiSourceTexture *)v51;
      v52 = TextData::Get(0x3533398Bu);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v52);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title3Desc", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v53 = **((_DWORD **)pkTextWin + 9);
      v54 = *(void **)(v53 + 20);
      pkTexture8 = *(NiSourceTexture **)(v53 + 24);
      pkTextWin = v54;
      v55 = Font::Get(0);
      v56 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v55,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkTotalGraduate = v56;
      v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v56,
        5u);
      ((void (__stdcall *)(_DWORD))v2->m_pkTotalGraduate->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v121) = 2;
      v57 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v57->nItemType = 1;
      v57->pNode = spNode.m_pObject;
      pkTextWin = v57;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      LOBYTE(v121) = 3;
      pkTextWin = (char *)pkTextWin + 72;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarClick");
      LOBYTE(v121) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v121) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v58 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v58;
      *(_DWORD *)v58 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column01");
      LOBYTE(v121) = 6;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v59 = pkTextWin;
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      *((_BYTE *)v59 + 88) = 1;
      v60 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v60;
      *(_DWORD *)v60 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column02");
      LOBYTE(v121) = 7;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      v61 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v61;
      *(_DWORD *)v61 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column03");
      LOBYTE(v121) = 8;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      v62 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v62;
      *(_DWORD *)v62 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column04");
      LOBYTE(v121) = 9;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      v63 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v63;
      *(_DWORD *)v63 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column05");
      LOBYTE(v121) = 10;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v121) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v64 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
      v65 = SlideListWin::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              v64,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              0);
      v2->m_pListWinHallOfFame = v65;
      v65->m_uiLClickMsg = 19;
      SlideListWin::UpdateViewList(v2->m_pListWinHallOfFame);
      v66 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
      v67 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v66,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pSlideBarHallOfFame = v67;
      v67->m_uiClickMsg = 13;
      v2->m_pSlideBarHallOfFame->m_eType = 1;
      SlideBar::SetSplitCnt(v2->m_pSlideBarHallOfFame, v2->m_pListWinHallOfFame->m_nSlideSplitCnt);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xEu,
        0,
        0);
      v68 = **((_DWORD **)pkTextWin + 9);
      v69 = *(void **)(v68 + 20);
      pkTexture8 = *(NiSourceTexture **)(v68 + 24);
      pkTextWin = v69;
      v70 = Font::Get(MAIN_MENU);
      v71 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v70,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v72 = v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v71;
      v72[122].__vecDelDtor((NiRefObject *)v71, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v73 = TextData::Get(0x4EA49695u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v73);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xFu,
        0,
        0);
      v74 = *((_DWORD *)pkTextWin + 9);
      v75 = *(void **)(*(_DWORD *)v74 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v74 + 24);
      pkTextWin = v75;
      v76 = Font::Get(MAIN_MENU);
      v77 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v76,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v78 = v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v77;
      v78[122].__vecDelDtor((NiRefObject *)v77, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v79 = TextData::Get(0x4A5F8BA3u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v79);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x10u,
        0,
        0);
      v80 = *((_DWORD *)pkTextWin + 9);
      v81 = *(void **)(*(_DWORD *)v80 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v80 + 24);
      pkTextWin = v81;
      v82 = Font::Get(MAIN_MENU);
      v83 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v82,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v84 = v83->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v83;
      v84[122].__vecDelDtor((NiRefObject *)v83, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v85 = TextData::Get(0x403E237Fu);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v85);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x11u,
        0,
        0);
      v86 = *((_DWORD *)pkTextWin + 9);
      v87 = *(void **)(*(_DWORD *)v86 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v86 + 24);
      pkTextWin = v87;
      v88 = Font::Get(MAIN_MENU);
      v89 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v88,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v90 = v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v89;
      v90[122].__vecDelDtor((NiRefObject *)v89, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v91 = TextData::Get(0x2445899Eu);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v91);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x12u,
        0,
        0);
      v92 = *((_DWORD *)pkTextWin + 9);
      v93 = *(void **)(*(_DWORD *)v92 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v92 + 24);
      pkTextWin = v93;
      v94 = Font::Get(MAIN_MENU);
      v95 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v94,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v96 = v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v95;
      v96[122].__vecDelDtor((NiRefObject *)v95, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v97 = TextData::Get(0xC6DFB9BBu);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v97);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x14u,
        0,
        0);
      v98 = *((_DWORD *)pkTextWin + 9);
      v99 = *(void **)(*(_DWORD *)v98 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v98 + 24);
      pkTexture = (NiSourceTexture *)v99;
      v100 = Font::Get(MAIN_MENU);
      v101 = PgWinText::CreateWin(
               uiLeft - v14,
               uiTop - v15 + 1,
               (unsigned int)pkTexture,
               (unsigned int)pkTexture8,
               v100,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v101,
        5u);
      v102 = v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v103 = TextData::Get(0x4F5F499Fu);
      v102[118].__vecDelDtor((NiRefObject *)v101, (unsigned int)v103);
      v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v101,
        0);
      ((void (__thiscall *)(GuildAcademyHallOfFameWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.40000001,
        0.5);
      LOBYTE(v121) = 1;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      LOBYTE(v121) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v121 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v121) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v121 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v121) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v121 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006E9790) --------------------------------------------------------
void *__thiscall GuildAcademyHallOfFameWin::_scalar_deleting_destructor_(GuildAcademyHallOfFameWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyHallOfFameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyHallOfFameWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CE4C8: using guessed type int (__stdcall *GuildAcademyHallOfFameWin___vftable_)(int uiFlags);
// 9CE4E4: using guessed type int (__thiscall *GuildAcademyHallOfFameWin___vftable_)(void *p, char);

//----- (006E97D0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardInvWin::GuildAcademyItemRewardInvWin(GuildAcademyItemRewardInvWin *this)
{
  GuildAcademyItemRewardInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyItemRewardInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyItemRewardInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
  v1->m_bDisable = 0;
}
// 9CE930: using guessed type int (__stdcall *GuildAcademyItemRewardInvWin___vftable_)(int uiFlags);
// 9CE94C: using guessed type int (__thiscall *GuildAcademyItemRewardInvWin___vftable_)(void *p, char);

//----- (006E9850) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardInvWin::_GuildAcademyItemRewardInvWin(GuildAcademyItemRewardInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyItemRewardInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyItemRewardInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 9CE930: using guessed type int (__stdcall *GuildAcademyItemRewardInvWin___vftable_)(int uiFlags);
// 9CE94C: using guessed type int (__thiscall *GuildAcademyItemRewardInvWin___vftable_)(void *p, char);

//----- (006E9870) --------------------------------------------------------
bool __thiscall GuildAcademyItemRewardInvWin::Create(GuildAcademyItemRewardInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  GuildAcademyItemRewardInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (006E98B0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardInvWin::OnFirstHitWin(GuildAcademyItemRewardInvWin *this)
{
  GuildAcademyItemRewardInvWin *v1; // esi@1
  ItemInfoWin *v2; // edi@3
  Item *v3; // eax@4

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(0.0);
  if ( ItemIcon::GetItem(&v1->baseclass_0) && !v1->m_bDisable )
  {
    v2 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v2 )
    {
      v3 = ItemIcon::GetItem(&v1->baseclass_0);
      ItemInfoWin::SetItemInfo(v2, v3);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (006E9900) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardInvWin::Show(GuildAcademyItemRewardInvWin *this, bool b)
{
  ItemIcon::Show(&this->baseclass_0, b);
}

//----- (006E9910) --------------------------------------------------------
bool __thiscall GuildAcademyItemRewardInvWin::IsDisable(GuildAcademyItemRewardInvWin *this)
{
  return this->m_bDisable;
}

//----- (006E9920) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::DirectMessage(GuildAcademyItemRewardWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x45u, 0, 0);
  }
}

//----- (006E9950) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::InitializeRewardItem(GuildAcademyItemRewardWin *this)
{
  EditWin **v1; // esi@1
  signed int v2; // edi@1

  v1 = this->m_pkItemCountEditWin;
  v2 = 51;
  do
  {
    ItemIcon::SetItem((ItemIcon *)*(v1 - 51), 0, 1);
    ((void (__stdcall *)(_DWORD))(*v1)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9CE733);
    EditWin::SetEnable(*v1, 0);
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (006E99A0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::resetInven(GuildAcademyItemRewardWin *this, unsigned int uiIndex)
{
  GuildAcademyItemRewardWin *v2; // esi@1

  v2 = this;
  ItemIcon::SetItem(&this->m_apkInvWin[uiIndex]->baseclass_0, 0, 1);
  ((void (__stdcall *)(_DWORD))v2->m_pkItemCountEditWin[uiIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9CE751);
  EditWin::SetEnable(v2->m_pkItemCountEditWin[uiIndex], 0);
}

//----- (006E99F0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnClose(GuildAcademyItemRewardWin *this)
{
  PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_CLOSE_CMD kProto; // [sp+1h] [bp-1h]@1

  kProto.nCloseType = 2;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Fu, &kProto, 1);
}

//----- (006E9A10) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnHelpLink(GuildAcademyItemRewardWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildAcademyItemGift");
}

//----- (006E9A40) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::GuildAcademyItemRewardWin(GuildAcademyItemRewardWin *this)
{
  GuildAcademyItemRewardWin *v1; // esi@1
  int v2; // eax@1
  signed int v3; // edx@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyItemRewardWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyItemRewardWin::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v2 = (int)v1->m_pkItemCountEditWin;
  v3 = 51;
  do
  {
    *(_DWORD *)(v2 - 204) = 0;
    *(_DWORD *)v2 = 0;
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v1->m_pkCopperText = 0;
  v1->m_pkSilverText = 0;
  v1->m_pkGoldText = 0;
  v1->m_pkGemText = 0;
  v1->m_pkGuildAcademyInfo1 = 0;
  v1->m_pkGuildAcademyInfo2 = 0;
  v1->m_bFromReq = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9CEBBC: using guessed type int (__stdcall *GuildAcademyItemRewardWin___vftable_)(int uiFlags);
// 9CEBDC: using guessed type int (__thiscall *GuildAcademyItemRewardWin___vftable_)(void *p, char);

//----- (006E9AD0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::_GuildAcademyItemRewardWin(GuildAcademyItemRewardWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyItemRewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyItemRewardWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9CEBBC: using guessed type int (__stdcall *GuildAcademyItemRewardWin___vftable_)(int uiFlags);
// 9CEBDC: using guessed type int (__thiscall *GuildAcademyItemRewardWin___vftable_)(void *p, char);

//----- (006E9B00) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::SetRewardItem(GuildAcademyItemRewardWin *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *pAck)
{
  GuildAcademyItemRewardWin *v2; // ebx@1
  PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *v3; // edi@2
  int v4; // esi@3
  Item *v5; // eax@3
  int v6; // edi@5
  CClientGuildAcademy *v7; // eax@10
  int v8; // esi@15
  Item *pkItem; // [sp+8h] [bp-3Ch]@3
  signed int i; // [sp+10h] [bp-34h]@1
  PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *v11; // [sp+14h] [bp-30h]@2
  signed int j; // [sp+18h] [bp-2Ch]@4
  signed int ja; // [sp+18h] [bp-2Ch]@15
  PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_REQ kProto; // [sp+1Fh] [bp-25h]@18
  char acItemCount[32]; // [sp+20h] [bp-24h]@10
  unsigned int v16; // [sp+40h] [bp-4h]@1
  int v17; // [sp+44h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  i = 0;
  if ( pAck->NumOfRewardGood )
  {
    v3 = pAck + 2;
    v11 = pAck + 2;
    do
    {
      v4 = LOBYTE(v3[-1].Error);
      v5 = Item::Create(*((_WORD *)v3 - 1));
      pkItem = v5;
      if ( v5 )
      {
        ItemIcon::SetItem(*((ItemIcon **)&v2->m_kDropContents.ui_InvIndex + v4), v5, 1);
        ItemIcon::ShowLotText(*((ItemIcon **)&v2->m_kDropContents.ui_InvIndex + v4), 0);
        j = 0;
        if ( LOBYTE(v3->Error) )
        {
          v6 = (int)&v3[1].NumOfRewardGood;
          do
          {
            switch ( *(_DWORD *)(v6 - 4) )
            {
              case 2:
                ((void (__stdcall *)(_DWORD))v2->m_apkInvWin[v4 + 41]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)("1");
                break;
              case 3:
                sprintf(acItemCount, "%I64d");
                ((void (__stdcall *)(_DWORD))v2->m_apkInvWin[v4 + 41]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(acItemCount);
                v7 = GuildAcademyTask::GetGuildAcademy();
                if ( CClientGuildAcademy::AmIGuildAcademyMaster(v7) )
                  EditWin::SetEnable((EditWin *)v2->m_apkInvWin[v4 + 41], 1);
                break;
              case 4:
                ((void (__stdcall *)(_DWORD))v2->m_apkInvWin[v4 + 41]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)("1");
                pkItem->m_kStruct.itemattr.blot.lot = *(_BYTE *)v6;
                break;
            }
            v6 += 12;
            ++j;
          }
          while ( j < SLOBYTE(v11->Error) );
          v3 = v11;
        }
        v8 = (int)v2->m_pkItemCountEditWin;
        ja = 51;
        do
        {
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v8 + 484))(1);
          v8 += 4;
          --ja;
        }
        while ( ja );
      }
      v3 = (PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *)((char *)v3 + 16);
      ++i;
      v11 = v3;
    }
    while ( i < pAck->NumOfRewardGood );
  }
  kProto.nOpenType = 2;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Du, &kProto, 1);
  v2->m_bFromReq = 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006E9CB0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnClickWinCloseBtn(GuildAcademyItemRewardWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (006E9CE0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnInvLClick(GuildAcademyItemRewardWin *this, unsigned int uiInvIndex)
{
  GuildAcademyItemRewardWin *v2; // esi@1
  CClientGuildAcademy *v3; // eax@1
  Item *v4; // edi@2

  v2 = this;
  v3 = GuildAcademyTask::GetGuildAcademy();
  if ( CClientGuildAcademy::AmIGuildAcademyMaster(v3) )
  {
    v4 = ItemIcon::GetItem(&v2->m_apkInvWin[uiInvIndex]->baseclass_0);
    if ( v4 )
    {
      v2->m_kDropContents.m_eSenderType = 20;
      v2->m_kDropContents.m_eType = 0;
      v2->m_kDropContents.m_apvParam[0] = v4;
      v2->m_kDropContents.m_apvParam[1] = 0;
      v2->m_kDropContents.m_uiSenderIndex = uiInvIndex;
      v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
      v2->m_kDrop.m_pkSender = (PgWin *)v2;
      PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
      SoundMgr::PlayItemPutSound(&g_kSoundMgr, v4->m_kStruct.itemid);
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (006E9D70) --------------------------------------------------------
bool __thiscall GuildAcademyItemRewardWin::IsExist(GuildAcademyItemRewardWin *this, Item *item)
{
  unsigned int v2; // esi@1
  Item *v3; // eax@2
  int v4; // ebx@4

  v2 = 0;
  while ( 1 )
  {
    v3 = GuildAcademyStorage::Get(v2);
    if ( v3 )
    {
      if ( item->m_kStruct.itemid == v3->m_kStruct.itemid )
      {
        v4 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[9].__vecDelDtor)(v3);
        if ( ((int (__thiscall *)(_DWORD))item->baseclass_0.vfptr[9].__vecDelDtor)(item) == v4 )
          break;
      }
    }
    ++v2;
    if ( (signed int)v2 >= 72 )
      return 0;
  }
  return 1;
}

//----- (006E9DD0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardInvWin::DoAction(GuildAcademyItemRewardInvWin *this)
{
  GuildAcademyItemRewardInvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_bDisable )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (006E9E00) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardInvWin::DoRAction(GuildAcademyItemRewardInvWin *this)
{
  GuildAcademyItemRewardInvWin *v1; // esi@1
  PgWin *v2; // eax@2

  v1 = this;
  if ( !this->m_bDisable )
  {
    v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    if ( v2 )
      PgWin::PostCommandMsg(
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v2,
        v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
        v1->m_uiInvIndex);
  }
}

//----- (006E9E30) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::UpdateAcademyInfo(GuildAcademyItemRewardWin *this)
{
  GuildAcademyItemRewardWin *v1; // esi@1
  CClientGuildAcademyMember *v2; // ebx@1
  NiRefObjectVtbl *v3; // ST24_4@1
  char *v4; // eax@1
  char *v5; // eax@1
  __int64 v6; // qax@1
  __int64 v7; // qax@1
  __int64 v8; // qax@1
  __int64 v9; // qax@1
  char acStr[128]; // [sp+10h] [bp-84h]@1
  unsigned int v11; // [sp+90h] [bp-4h]@1
  int v12; // [sp+94h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  GuildTask::GetGuild();
  GuildAcademyTask::GetGuildAcademy();
  v2 = GuildAcademyMemberTask::GetGuildAcademyMember();
  ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v3 = v1->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  CClientGuildAcademyMember::GetNumOfOnlineMembers(v2);
  v4 = TextData::Get(0xCF512932u);
  v5 = fs(v4);
  v3[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildAcademyInfo1, (unsigned int)v5);
  ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfo2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v6 = GuildAcademyStorage::GetMoney();
  User::GetGem(v6);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v7 = GuildAcademyStorage::GetMoney();
  User::GetGold(v7);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v8 = GuildAcademyStorage::GetMoney();
  User::GetSilver(v8);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v9 = GuildAcademyStorage::GetMoney();
  User::GetCopper(v9);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (006E9FD0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnClickInitializeBtn(GuildAcademyItemRewardWin *this)
{
  GuildAcademyItemRewardWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1
  CClientGuildAcademy *v4; // eax@3
  int v5; // eax@4
  unsigned int v6; // eax@5
  void *v7; // eax@7
  void *v8; // edi@7
  char *v9; // eax@14
  MsgBox *v10; // eax@14
  int key; // [sp+Ch] [bp-10h]@4
  char *v12; // [sp+10h] [bp-Ch]@4
  char *v13; // [sp+14h] [bp-8h]@4
  char *v14; // [sp+18h] [bp-4h]@4

  v1 = this;
  v2 = (char *)this->m_pkItemCountEditWin;
  v3 = 51;
  do
  {
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 484))(1);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = GuildAcademyTask::GetGuildAcademy();
  if ( CClientGuildAcademy::AmIGuildAcademyMaster(v4) )
  {
    v9 = TextData::Get(0x909494C4u);
    v10 = MsgBox::Modal(MSGBOX_OKCANCEL, v9);
    v1->m_pkMsgBox = v10;
    ((void (__stdcall *)(IDirectMessenger *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  else
  {
    v12 = &byte_9788EB;
    v13 = &byte_9788EB;
    v14 = &byte_9788EB;
    key = -982641618;
    v5 = *(_DWORD *)(ITableBase<TextDataType_TextData>::ms_pkTable + 56);
    if ( v5 )
      v6 = *(_DWORD *)(v5 + 40);
    else
      v6 = 0;
    v7 = bsearch(&key, TextData::ms_apkNode, v6, 0x10u, TextDataNodeComp);
    v8 = v7;
    if ( v7 )
    {
      if ( strcmp(*((const char **)v7 + 2), "None") )
        SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v8 + 2));
      if ( strcmp(*((const char **)v8 + 3), "None") )
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v8 + 3));
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, *((const char **)v8 + 1));
    }
    else
    {
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, &byte_9788EB);
    }
  }
}
// A94350: using guessed type int ITableBase_TextDataType_TextData___ms_pkTable;

//----- (006EA140) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnClickGuildAcademyStorageBtn(GuildAcademyItemRewardWin *this)
{
  GuildAcademyItemRewardWin *v1; // esi@1
  GuildAcademyStorageWin *v2; // eax@1
  CClientGuild *v3; // eax@2
  char *v4; // eax@3
  PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_REQ kProto; // [sp+7h] [bp-1h]@4

  v1 = this;
  v2 = GuildAcademyTask::GetGuildAcademyStorageWin();
  if ( !(unsigned __int8)((int (__thiscall *)(GuildAcademyStorageWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    v3 = GuildTask::GetGuild();
    if ( CClientGuild::AmIGuildMember(v3) )
    {
      kProto.nOpenType = 0;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Du, &kProto, 1);
    }
    else
    {
      v4 = TextData::Get(0x7290F5A0u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v4);
    }
  }
}

//----- (006EA1B0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardInvWin::SetDisable(GuildAcademyItemRewardInvWin *this, bool bDisable)
{
  GuildAcademyItemRewardInvWin *v2; // ebx@1
  NiProperty *v3; // edi@2
  void *v4; // eax@3
  void *v5; // esi@3
  NiProperty *v6; // esi@7
  char *v7; // eax@7
  void *v8; // eax@8
  NiProperty *v9; // eax@9
  double v10; // st7@13
  float v11; // ST14_4@15
  float v12; // ST18_4@15
  float v13; // ST1C_4@15

  v2 = this;
  if ( this->m_bDisable != bDisable )
  {
    v3 = NiAVObject::GetProperty(
           &this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           9);
    if ( !v3 )
    {
      v4 = operator new(0x28u);
      v5 = v4;
      if ( v4 )
      {
        NiObjectNET::NiObjectNET((NiObjectNET *)v4);
        *(_DWORD *)v5 = &NiVertexColorProperty::_vftable_;
        *((_WORD *)v5 + 14) = 0;
        *((_DWORD *)v5 + 8) = 0;
        *((_DWORD *)v5 + 9) = 1;
      }
      else
      {
        v5 = 0;
      }
      v3 = (NiProperty *)v5;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        (NiProperty *)v5);
    }
    v6 = NiAVObject::GetProperty(
           &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
           3);
    v7 = 0;
    if ( !v6 )
    {
      v8 = operator new(0x60u);
      if ( v8 )
        NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v8);
      else
        v9 = 0;
      v6 = v9;
      NiAVObject::AttachProperty(
        &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
        v9);
      v7 = 0;
    }
    v2->m_bDisable = bDisable;
    v3[1].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount = (unsigned int)v7;
    v3[1].baseclass_0.m_pcName = v7;
    ++v6[3].baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
    if ( bDisable )
      v10 = 0.40000001;
    else
      v10 = 1.0;
    v11 = v10;
    v12 = v10;
    v6[2].baseclass_0.m_spControllers.m_pObject = (NiTimeController *)LODWORD(v11);
    v13 = v10;
    v6[2].baseclass_0.m_ppkExtra = (NiExtraData **)LODWORD(v12);
    v6[2].baseclass_0.m_uiExtraDataSize = LODWORD(v13);
    NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  }
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);

//----- (006EA2E0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::UpdateMeWin(GuildAcademyItemRewardWin *this, float fCurTime)
{
  GuildAcademyItemRewardWin::UpdateAcademyInfo(this);
}

//----- (006EA2F0) --------------------------------------------------------
bool __thiscall GuildAcademyItemRewardWin::DropOnInv(GuildAcademyItemRewardWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  unsigned int v3; // ebx@0
  GuildAcademyItemRewardWin *v4; // edi@1
  CClientGuildAcademy *v5; // eax@1
  char *v6; // eax@2
  bool result; // al@2
  DropContents::SenderType v8; // eax@3
  char *v9; // eax@5
  void *v10; // esi@6
  int v11; // eax@7
  char *v12; // eax@11
  int v13; // ebx@14
  char *v14; // eax@15
  Item *v15; // ebx@16
  unsigned int v16; // esi@22
  unsigned int v17; // [sp-8h] [bp-Ch]@13
  signed int pkContentsa; // [sp+Ch] [bp+8h]@22
  int uiReceiverInvIndexb; // [sp+10h] [bp+Ch]@22
  int uiReceiverInvIndexa; // [sp+10h] [bp+Ch]@22
  int uiReceiverInvIndexc; // [sp+10h] [bp+Ch]@25

  v4 = this;
  v5 = GuildAcademyTask::GetGuildAcademy();
  if ( !CClientGuildAcademy::AmIGuildAcademyMaster(v5) )
  {
    v6 = TextData::Get(0x186E6673u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, v6);
    return 0;
  }
  v8 = pkContents->m_eSenderType;
  if ( v8 != 19 && v8 != 20 )
  {
    v9 = TextData::Get(0x1D6C5880u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, v9);
    return 0;
  }
  v10 = pkContents->m_apvParam[0];
  if ( !v10 || (v11 = *((_DWORD *)v10 + 28)) == 0 )
    return 0;
  if ( *(_DWORD *)(v11 + 118) == 4
    && (*(int (__thiscall **)(void *))(*(_DWORD *)v10 + 44))(pkContents->m_apvParam[0])
    && !(*(int (__thiscall **)(void *))(*(_DWORD *)v10 + 44))(v10) )
  {
    v12 = TextData::Get(0x60915CF4u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, v12);
    return 0;
  }
  v17 = v3;
  if ( (unsigned __int8)(*(int (__thiscall **)(void *))(*(_DWORD *)v10 + 4))(v10) != 24
    || (v13 = (*(int (__thiscall **)(void *))(*(_DWORD *)v10 + 16))(v10),
        (*(int (__thiscall **)(void *))(*(_DWORD *)v10 + 12))(v10) == v13) )
  {
    v15 = Item::Create(*((_WORD *)v10 + 4));
    if ( v15->baseclass_0.vfptr[3].__vecDelDtor((NiRefObject *)v15, v17) )
      v15->baseclass_0.vfptr[2].__vecDelDtor((NiRefObject *)v15, 0);
    v15->m_kStruct.itemattr.blot.lot = (*(int (__thiscall **)(void *))(*(_DWORD *)v10 + 36))(v10);
    ((void (__thiscall *)(Item *))v15->baseclass_0.vfptr[9].__vecDelDtor)(v15);
    if ( (unsigned __int8)((int (__thiscall *)(Item *))v15->baseclass_0.vfptr[1].__vecDelDtor)(v15)
      && (unsigned __int8)((int (__thiscall *)(Item *))v15->baseclass_0.vfptr[1].__vecDelDtor)(v15) != 1
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v15->baseclass_0.vfptr[1].__vecDelDtor)(v15) != 2
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v15->baseclass_0.vfptr[1].__vecDelDtor)(v15) != 14 )
    {
      v16 = uiReceiverInvIndex;
      EditWin::SetEnable(v4->m_pkItemCountEditWin[uiReceiverInvIndex], 0);
      uiReceiverInvIndexb = (int)&v4->m_pkItemCountEditWin[uiReceiverInvIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115];
      fs("%d");
      (*(void (__thiscall **)(EditWin *))uiReceiverInvIndexb)(v4->m_pkItemCountEditWin[v16]);
      uiReceiverInvIndexa = (int)v4->m_pkItemCountEditWin;
      pkContentsa = 51;
      do
      {
        (*(void (__stdcall **)(signed int))(**(_DWORD **)uiReceiverInvIndexa + 484))(1);
        uiReceiverInvIndexa += 4;
        --pkContentsa;
      }
      while ( pkContentsa );
    }
    else
    {
      v16 = uiReceiverInvIndex;
      EditWin::SetEnable(v4->m_pkItemCountEditWin[uiReceiverInvIndex], 1);
      ((void (*)(void))v4->m_pkItemCountEditWin[uiReceiverInvIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
      uiReceiverInvIndexc = (int)&v4->m_pkItemCountEditWin[uiReceiverInvIndex]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115];
      fs("%d");
      (*(void (__thiscall **)(EditWin *))uiReceiverInvIndexc)(v4->m_pkItemCountEditWin[v16]);
    }
    ItemIcon::SetItem(&v4->m_apkInvWin[v16]->baseclass_0, v15, 1);
    ItemIcon::ShowLotText(&v4->m_apkInvWin[v16]->baseclass_0, 0);
    GuildAcademyItemRewardInvWin::SetDisable(v4->m_apkInvWin[v16], 0);
    result = 1;
  }
  else
  {
    v14 = TextData::Get(0x60915CF4u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v4->baseclass_0.m_pkFrameWork, v14);
    result = 0;
  }
  return result;
}
// 6EA2F0: could not find valid save-restore pair for ebx

//----- (006EA560) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::On_GuildAcademyStorage_Cell_Changed(GuildAcademyItemRewardWin *this)
{
  GuildAcademyItemRewardWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1
  Item *v4; // eax@2
  bool v5; // al@3
  ItemIcon *v6; // ecx@3

  v1 = this;
  v2 = (char *)this->m_apkInvWin;
  v3 = 51;
  do
  {
    v4 = ItemIcon::GetItem(*(ItemIcon **)v2);
    if ( v4 )
    {
      v5 = GuildAcademyItemRewardWin::IsExist(v1, v4);
      v6 = *(ItemIcon **)v2;
      if ( v5 )
      {
        GuildAcademyItemRewardInvWin::SetDisable((GuildAcademyItemRewardInvWin *)v6, 0);
      }
      else
      {
        GuildAcademyItemRewardInvWin::SetDisable((GuildAcademyItemRewardInvWin *)v6, 1);
        EditWin::SetEnable(*((EditWin **)v2 + 51), 0);
      }
    }
    v2 += 4;
    --v3;
  }
  while ( v3 );
}

//----- (006EA5B0) --------------------------------------------------------
bool __thiscall GuildAcademyItemRewardInvWin::EatDropInstance(GuildAcademyItemRewardInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  GuildAcademyItemRewardInvWin *v4; // edi@1
  bool result; // al@2
  void *v6; // esi@3
  PgWin *v7; // eax@5

  v4 = this;
  if ( *pkDrop )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( v6 )
    {
      v7 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      result = GuildAcademyItemRewardWin::DropOnInv(
                 (GuildAcademyItemRewardWin *)v7,
                 (DropContents *)v6,
                 v4->m_uiInvIndex);
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006EA5F0) --------------------------------------------------------
GuildAcademyItemRewardInvWin *__cdecl GuildAcademyItemRewardInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  GuildAcademyItemRewardInvWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1C8u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v4);
    LOBYTE(v9) = 1;
    *(_DWORD *)v5 = &GuildAcademyItemRewardInvWin::_vftable_;
    *((_DWORD *)v5 + 58) = &GuildAcademyItemRewardInvWin::_vftable_;
    *((_DWORD *)v5 + 112) = -1;
    ItemIcon::SetItem((ItemIcon *)v5, 0, 1);
    *((_BYTE *)v5 + 452) = 0;
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 616))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (GuildAcademyItemRewardInvWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9CE930: using guessed type int (__stdcall *GuildAcademyItemRewardInvWin___vftable_)(int uiFlags);
// 9CE94C: using guessed type int (__thiscall *GuildAcademyItemRewardInvWin___vftable_)(void *p, char);

//----- (006EA760) --------------------------------------------------------
GuildAcademyItemRewardWin *__cdecl GuildAcademyItemRewardWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildAcademyItemRewardWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x368u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildAcademyItemRewardWin::GuildAcademyItemRewardWin((GuildAcademyItemRewardWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildAcademyItemRewardWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006EA890) --------------------------------------------------------
bool __thiscall GuildAcademyItemRewardWin::Create(GuildAcademyItemRewardWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyItemRewardWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  NiSourceTexture *v18; // eax@25
  PgSprData *v19; // eax@25
  PgFont *v20; // eax@27
  int v21; // STC4_4@27
  char *v22; // eax@27
  PgSprData *v23; // eax@29
  PgSprData *v24; // eax@29
  PgFont *v25; // eax@30
  PgWinText *v26; // eax@30
  PgFont *v27; // eax@30
  PgWinText *v28; // eax@30
  char *v29; // eax@30
  PgSprData *v30; // eax@30
  PgFont *v31; // ST9C_4@30
  unsigned int v32; // ST98_4@30
  unsigned int v33; // eax@30
  NiSourceTexture *v34; // STA8_4@30
  NiNode *v35; // edx@30
  PgSprData *v36; // eax@30
  PgFont *v37; // ST9C_4@30
  unsigned int v38; // ST98_4@30
  unsigned int v39; // eax@30
  NiSourceTexture *v40; // STA8_4@30
  NiNode *v41; // edx@30
  PgSprData *v42; // eax@30
  PgFont *v43; // ST9C_4@30
  unsigned int v44; // ST98_4@30
  unsigned int v45; // eax@30
  NiSourceTexture *v46; // STA8_4@30
  NiNode *v47; // edx@30
  PgSprData *v48; // eax@30
  PgFont *v49; // ST9C_4@30
  unsigned int v50; // ST98_4@30
  unsigned int v51; // eax@30
  char *v52; // STBC_4@31
  PgSprData::PgHitTester *v53; // eax@31
  unsigned int v54; // STC0_4@31
  PgFont *v55; // eax@31
  int v56; // eax@32
  int v57; // STBC_4@33
  char *v58; // eax@33
  PgSprData *v59; // eax@33
  EditWin *v60; // eax@33
  PgSprData::PgHitTester *v61; // eax@34
  unsigned int v62; // STBC_4@34
  PgFont *v63; // eax@34
  int v64; // STBC_4@34
  char *v65; // eax@34
  PgSprData::PgHitTester *v66; // eax@34
  unsigned int v67; // STBC_4@34
  PgFont *v68; // eax@34
  PgSprData::PgHitTester *v69; // eax@34
  unsigned int v70; // STBC_4@34
  PgFont *v71; // eax@34
  int v72; // STBC_4@34
  char *v73; // eax@34
  PgSprData::PgHitTester *v74; // eax@34
  unsigned int v75; // STBC_4@34
  PgFont *v76; // eax@34
  int v77; // STBC_4@34
  char *v78; // eax@34
  PgSprData::PgHitTester *v79; // eax@34
  unsigned int v80; // STBC_4@34
  PgFont *v81; // eax@34
  int v82; // STBC_4@34
  char *v83; // eax@34
  int v84; // STBC_4@35
  char *v85; // eax@35
  PgSprData *v86; // eax@35
  ItemIcon *v87; // eax@35
  NiNode *v88; // esi@38
  const char *v89; // [sp+9Ch] [bp-58h]@23
  int *v90; // [sp+A0h] [bp-54h]@23
  int *v91; // [sp+A4h] [bp-50h]@23
  NiSourceTexture *v92; // [sp+A8h] [bp-4Ch]@23
  signed int v93; // [sp+C4h] [bp-30h]@30
  NiPointer<NiTexturingProperty> spTexProp; // [sp+C8h] [bp-2Ch]@4
  unsigned int i; // [sp+CCh] [bp-28h]@30
  unsigned int uiWidth; // [sp+D0h] [bp-24h]@25
  unsigned int uiHeight; // [sp+D4h] [bp-20h]@25
  NiSourceTexture *pkTexture; // [sp+D8h] [bp-1Ch]@7
  NiPointer<NiNode> spNode; // [sp+DCh] [bp-18h]@1
  int uiLeft; // [sp+E0h] [bp-14h]@15
  int uiTop; // [sp+E4h] [bp-10h]@15
  int v102; // [sp+F0h] [bp-4h]@1
  PgWinText *pkTextWinc; // [sp+FCh] [bp+8h]@27
  PgSprData *pkTextWind; // [sp+FCh] [bp+8h]@27
  NiSourceTexture *pkTextWin; // [sp+FCh] [bp+8h]@27
  PgSprData *pkTextWine; // [sp+FCh] [bp+8h]@28
  int pkTextWinf; // [sp+FCh] [bp+8h]@30
  PgWin *pkTextWing; // [sp+FCh] [bp+8h]@30
  PgWinText *pkTextWinh; // [sp+FCh] [bp+8h]@30
  PgWin *pkTextWini; // [sp+FCh] [bp+8h]@30
  PgWinText *pkTextWinj; // [sp+FCh] [bp+8h]@30
  PgWin *pkTextWink; // [sp+FCh] [bp+8h]@30
  PgWinText *pkTextWinl; // [sp+FCh] [bp+8h]@30
  PgWin *pkTextWinm; // [sp+FCh] [bp+8h]@30
  PgWinText *pkTextWinn; // [sp+FCh] [bp+8h]@30
  char *pkTextWino; // [sp+FCh] [bp+8h]@31
  PgSprData *pkTextWinp; // [sp+FCh] [bp+8h]@31
  unsigned int pkTextWinq; // [sp+FCh] [bp+8h]@31
  PgWinText *pkTextWinr; // [sp+FCh] [bp+8h]@31
  int pkTextWina; // [sp+FCh] [bp+8h]@32
  unsigned int pkTextWins; // [sp+FCh] [bp+8h]@34
  PgWinText *pkTextWint; // [sp+FCh] [bp+8h]@34
  unsigned int pkTextWinu; // [sp+FCh] [bp+8h]@34
  PgWinText *pkTextWinv; // [sp+FCh] [bp+8h]@34
  PgSprData *pkTextWinw; // [sp+FCh] [bp+8h]@34
  unsigned int pkTextWinx; // [sp+FCh] [bp+8h]@34
  PgWinText *pkTextWiny; // [sp+FCh] [bp+8h]@34
  PgSprData *pkTextWinz; // [sp+FCh] [bp+8h]@34
  unsigned int pkTextWinba; // [sp+FCh] [bp+8h]@34
  PgWinText *pkTextWinbb; // [sp+FCh] [bp+8h]@34
  PgSprData *pkTextWinbc; // [sp+FCh] [bp+8h]@34
  unsigned int pkTextWinbd; // [sp+FCh] [bp+8h]@34
  PgWinText *pkTextWinbe; // [sp+FCh] [bp+8h]@34
  IconWin **pkTextWinb; // [sp+FCh] [bp+8h]@34

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v102 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildAcademyItemGift.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v102) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v102) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v102 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "GuildAcademyItemCompensation", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v92 = v16;
      v91 = &uiTop;
      v90 = &uiLeft;
      v89 = "Theme";
    }
    else
    {
      v92 = 0;
      v91 = &uiTop;
      v90 = &uiLeft;
      v89 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v89, v90, v91, v92);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = MenuTexMgr::GetTexture(0x12u);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v18);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      goto LABEL_45;
    v20 = Font::Get(MAIN_MENU);
    pkTextWinc = PgWinText::CreateWin(
                   uiLeft - v14,
                   uiTop - v15,
                   uiWidth,
                   uiHeight,
                   v20,
                   &v2->baseclass_0.baseclass_0.baseclass_0,
                   0,
                   0);
    pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)pkTextWinc,
      1u);
    ((void (__stdcall *)(__int64 *))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    v21 = (int)&pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v22 = TextData::Get(0xC605FF25u);
    (*(void (__thiscall **)(PgWinText *, char *))v21)(pkTextWinc, v22);
    ((void (__stdcall *)(_DWORD))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWind = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(pkTextWind, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWind, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
    pkTextWin = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      pkTextWine = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTextWin);
      PgSprData::Add(pkTextWine, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(pkTextWine, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWine, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, 0, 0);
    }
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GuildInfoText", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v25 = Font::Get(MAIN_MENU);
      v26 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 - 5,
              uiWidth,
              uiHeight,
              v25,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkGuildAcademyInfo1 = v26;
      v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v26,
        4u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CE722);
      ((void (__stdcall *)(_DWORD))v2->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v27 = Font::Get(MAIN_MENU);
      v28 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 30,
              uiWidth,
              uiHeight - 30,
              v27,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkGuildAcademyInfo2 = v28;
      v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v28,
        4u);
      pkTextWinf = (int)&v2->m_pkGuildAcademyInfo2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v29 = TextData::Get(0xF54672A1u);
      (*(void (__thiscall **)(PgWinText *, char *))pkTextWinf)(v2->m_pkGuildAcademyInfo2, v29);
      ((void (__stdcall *)(_DWORD))v2->m_pkGuildAcademyInfo2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GemInput01", &uiLeft, &uiTop, pkTexture);
      pkTextWing = (PgWin *)PgWinSpr::CreateWin(
                              uiLeft - v14,
                              uiTop - v15,
                              v30,
                              &v2->baseclass_0.baseclass_0.baseclass_0,
                              0,
                              0);
      v31 = Font::Get(0);
      v32 = ((int (*)(void))pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v33 = ((int (*)(void))pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      pkTextWinh = PgWinText::CreateWin(0, 1, v33, v32, v31, pkTextWing, 0, 0);
      pkTextWinh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWinh,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))pkTextWinh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CE723);
      ((void (__stdcall *)(_DWORD))pkTextWinh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v34 = pkTexture;
      v35 = spNode.m_pObject;
      v2->m_pkGemText = pkTextWinh;
      v36 = PgSprData::Create(&v35->baseclass_0, "GoldInput01", &uiLeft, &uiTop, v34);
      pkTextWini = (PgWin *)PgWinSpr::CreateWin(
                              uiLeft - v14,
                              uiTop - v15,
                              v36,
                              &v2->baseclass_0.baseclass_0.baseclass_0,
                              0,
                              0);
      v37 = Font::Get(0);
      v38 = ((int (*)(void))pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v39 = ((int (*)(void))pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      pkTextWinj = PgWinText::CreateWin(0, 1, v39, v38, v37, pkTextWini, 0, 0);
      pkTextWinj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWinj,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))pkTextWinj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CE72A);
      ((void (__stdcall *)(_DWORD))pkTextWinj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v40 = pkTexture;
      v41 = spNode.m_pObject;
      v2->m_pkGoldText = pkTextWinj;
      v42 = PgSprData::Create(&v41->baseclass_0, "SilverInput01", &uiLeft, &uiTop, v40);
      pkTextWink = (PgWin *)PgWinSpr::CreateWin(
                              uiLeft - v14,
                              uiTop - v15,
                              v42,
                              &v2->baseclass_0.baseclass_0.baseclass_0,
                              0,
                              0);
      v43 = Font::Get(0);
      v44 = ((int (*)(void))pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v45 = ((int (*)(void))pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      pkTextWinl = PgWinText::CreateWin(0, 1, v45, v44, v43, pkTextWink, 0, 0);
      pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWinl,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CE72B);
      ((void (__stdcall *)(_DWORD))pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v46 = pkTexture;
      v47 = spNode.m_pObject;
      v2->m_pkSilverText = pkTextWinl;
      v48 = PgSprData::Create(&v47->baseclass_0, "CopperInput01", &uiLeft, &uiTop, v46);
      pkTextWinm = (PgWin *)PgWinSpr::CreateWin(
                              uiLeft - v14,
                              uiTop - v15,
                              v48,
                              &v2->baseclass_0.baseclass_0.baseclass_0,
                              0,
                              0);
      v49 = Font::Get(0);
      v50 = ((int (*)(void))pkTextWinm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v51 = ((int (*)(void))pkTextWinm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      pkTextWinn = PgWinText::CreateWin(0, 1, v51, v50, v49, pkTextWinm, 0, 0);
      pkTextWinn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWinn,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))pkTextWinn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CE732);
      ((void (__stdcall *)(_DWORD))pkTextWinn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v2->m_pkCopperText = pkTextWinn;
      i = 10;
      v93 = 50;
      do
      {
        pkTextWino = fs("Level%02d");
        v52 = fs("%02dLv");
        pkTextWinp = PgSprData::Create(&spNode.m_pObject->baseclass_0, pkTextWino, &uiLeft, &uiTop, pkTexture);
        PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, pkTextWinp, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v53 = pkTextWinp->m_akHitTester.m_pBase->m_pObject;
        pkTextWinq = v53->m_uiHeight;
        v54 = v53->m_uiWidth;
        v55 = Font::Get(0);
        pkTextWinr = PgWinText::CreateWin(
                       uiLeft - v14,
                       uiTop - v15 + 1,
                       v54,
                       pkTextWinq,
                       v55,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0);
        pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinr,
          5u);
        ((void (__stdcall *)(char *))pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v52);
        ((void (__stdcall *)(_DWORD))pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        ++i;
        --v93;
      }
      while ( v93 );
      v56 = 0;
      pkTextWina = (int)v2->m_pkItemCountEditWin;
      do
      {
        v57 = v56 + 1;
        v58 = fs("Count%02d");
        v59 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v58, &uiLeft, &uiTop, pkTexture);
        PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v59, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v60 = EditWin::CreateWin(
                uiLeft - v14 + 2,
                uiTop - v15 + 4,
                uiWidth,
                uiHeight,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                NUMBER,
                3u,
                3u,
                0,
                0,
                1);
        *(_DWORD *)pkTextWina = v60;
        EditWin::SetEnable(v60, 0);
        v56 = v57;
        pkTextWina += 4;
      }
      while ( v57 < 51 );
      v61 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Count52", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
      pkTextWins = v61->m_uiHeight;
      v62 = v61->m_uiWidth;
      v63 = Font::Get(0);
      pkTextWint = PgWinText::CreateWin(
                     uiLeft - v14,
                     uiTop - v15 + 1,
                     v62,
                     pkTextWins,
                     v63,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0);
      v64 = (int)&pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v65 = TextData::Get(0xD5D1C1BEu);
      (*(void (__thiscall **)(PgWinText *, char *))v64)(pkTextWint, v65);
      ((void (__stdcall *)(_DWORD))pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v66 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Count53", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
      pkTextWinu = v66->m_uiHeight;
      v67 = v66->m_uiWidth;
      v68 = Font::Get(0);
      pkTextWinv = PgWinText::CreateWin(
                     uiLeft - v14,
                     uiTop - v15 + 1,
                     v67,
                     pkTextWinu,
                     v68,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0);
      pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
        (NiRefObject *)pkTextWinv,
        (unsigned int)"60 Lv");
      ((void (__stdcall *)(_DWORD))pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkTextWinw = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWinw, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add(pkTextWinw, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWinw, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
      v69 = pkTextWinw->m_akHitTester.m_pBase->m_pObject;
      pkTextWinx = v69->m_uiHeight;
      v70 = v69->m_uiWidth;
      v71 = Font::Get(MAIN_MENU);
      pkTextWiny = PgWinText::CreateWin(
                     uiLeft - v14,
                     uiTop - v15 + 1,
                     v70,
                     pkTextWinx,
                     v71,
                     &v2->baseclass_0.baseclass_0.baseclass_0,
                     0,
                     0);
      pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWiny,
        5u);
      v72 = (int)&pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v73 = TextData::Get(0x9BF9F4F6u);
      (*(void (__thiscall **)(PgWinText *, char *))v72)(pkTextWiny, v73);
      ((void (__stdcall *)(_DWORD))pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkTextWinz = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWinz, &spNode.m_pObject->baseclass_0, "Btn02Click");
      PgSprData::Add(pkTextWinz, &spNode.m_pObject->baseclass_0, "Btn02Over");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWinz, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
      v74 = pkTextWinz->m_akHitTester.m_pBase->m_pObject;
      pkTextWinba = v74->m_uiHeight;
      v75 = v74->m_uiWidth;
      v76 = Font::Get(MAIN_MENU);
      pkTextWinbb = PgWinText::CreateWin(
                      uiLeft - v14,
                      uiTop - v15 + 1,
                      v75,
                      pkTextWinba,
                      v76,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
      pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWinbb,
        5u);
      v77 = (int)&pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v78 = TextData::Get(0x9005EDF9u);
      (*(void (__thiscall **)(PgWinText *, char *))v77)(pkTextWinbb, v78);
      ((void (__stdcall *)(_DWORD))pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      pkTextWinbc = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(pkTextWinbc, &spNode.m_pObject->baseclass_0, "Btn03Click");
      PgSprData::Add(pkTextWinbc, &spNode.m_pObject->baseclass_0, "Btn03Over");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, pkTextWinbc, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
      v79 = pkTextWinbc->m_akHitTester.m_pBase->m_pObject;
      pkTextWinbd = v79->m_uiHeight;
      v80 = v79->m_uiWidth;
      v81 = Font::Get(MAIN_MENU);
      pkTextWinbe = PgWinText::CreateWin(
                      uiLeft - v14,
                      uiTop - v15 + 1,
                      v80,
                      pkTextWinbd,
                      v81,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
      pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)pkTextWinbe,
        5u);
      v82 = (int)&pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v83 = TextData::Get(0x958A94C3u);
      (*(void (__thiscall **)(PgWinText *, char *))v82)(pkTextWinbe, v83);
      ((void (__stdcall *)(_DWORD))pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      i = 0;
      pkTextWinb = (IconWin **)v2->m_apkInvWin;
      do
      {
        v84 = i + 1;
        v85 = fs("IconSlot%02d");
        v86 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v85, &uiLeft, &uiTop, pkTexture);
        PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v86, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v87 = (ItemIcon *)GuildAcademyItemRewardInvWin::CreateWin(
                            uiLeft - v14 + 1,
                            uiTop - v15 + 1,
                            i,
                            &v2->baseclass_0.baseclass_0.baseclass_0);
        *pkTextWinb = (IconWin *)v87;
        ItemIcon::SetItem(v87, 0, 1);
        ((void (__stdcall *)(signed int))(*pkTextWinb)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor)(12);
        (*pkTextWinb)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = (PgWin *)g_pkItemInfoWin;
        IconWin::ShowFocus(*pkTextWinb, 1);
        ++pkTextWinb;
        i = v84;
      }
      while ( v84 < 51 );
      ((void (__thiscall *)(GuildAcademyItemRewardWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.30000001,
        0.5);
      LOBYTE(v102) = 0;
      if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spTexProp.m_pObject,
          1u);
      v88 = spNode.m_pObject;
      v102 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v88 )
        v88->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v88, 1u);
      result = 1;
    }
    else
    {
LABEL_45:
      LOBYTE(v102) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v102 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v102) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v102 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006EB710) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnClickApplyBtn(GuildAcademyItemRewardWin *this)
{
  GuildAcademyItemRewardWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1
  CClientGuildAcademy *v4; // eax@3
  char *v5; // eax@4
  GUILD_ACADEMY_REWARD_ITEM *v6; // edi@5
  unsigned int v7; // ebx@5
  int v8; // esi@5
  Item *v9; // esi@7
  NiRefObjectVtbl *v10; // edx@7
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // eax@7
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@18
  int v13; // esi@18
  __int64 v14; // kr00_8@18
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@20
  const char *v16; // eax@20
  int v17; // ebx@20
  char *v18; // esi@24
  int v19; // eax@25
  int v20; // eax@26
  signed int v21; // ecx@26
  unsigned int v22; // ecx@28
  int v23; // esi@33
  int v24; // eax@34
  int v25; // eax@36
  int v26; // eax@37
  signed int v27; // ecx@37
  unsigned int v28; // ecx@39
  REWARD_ITEM_OPTION v29; // edx@45
  PgNet *v30; // esi@49
  int v31; // edi@49
  int v32; // ebx@49
  void *v33; // edi@50
  char *v34; // eax@51
  char *v35; // eax@51
  void *v36; // [sp-14h] [bp-54h]@52
  unsigned int v37; // [sp-10h] [bp-50h]@1
  GuildAcademyItemRewardWin *v38; // [sp+0h] [bp-40h]@1
  std::vector<GUILD_ACADEMY_REWARD_ITEM,std::allocator<GUILD_ACADEMY_REWARD_ITEM> > sRewarditem; // [sp+4h] [bp-3Ch]@5
  int netcmd; // [sp+14h] [bp-2Ch]@5
  EditWin **v41; // [sp+18h] [bp-28h]@1
  PROTO_NC_GUILD_ACADEMY_SET_REWARD_ITEM_REQ kProto; // [sp+1Fh] [bp-21h]@50
  GUILD_ACADEMY_REWARD_ITEM temp; // [sp+20h] [bp-20h]@7
  unsigned int v44; // [sp+30h] [bp-10h]@1
  int v45; // [sp+3Ch] [bp-4h]@5
  int v46; // [sp+40h] [bp+0h]@1

  v44 = (unsigned int)&v46 ^ __security_cookie;
  v37 = (unsigned int)&v46 ^ __security_cookie;
  v1 = this;
  v2 = (char *)this->m_pkItemCountEditWin;
  v38 = this;
  v41 = this->m_pkItemCountEditWin;
  v3 = 51;
  do
  {
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 484))(1);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = GuildAcademyTask::GetGuildAcademy();
  if ( !CClientGuildAcademy::AmIGuildAcademyMaster(v4) )
  {
    v5 = TextData::Get(0x186E6673u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v5);
    return;
  }
  v6 = 0;
  v7 = 0;
  *(_DWORD *)&sRewarditem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  sRewarditem.baseclass_0._Mylast = 0;
  sRewarditem.baseclass_0._Myend = 0;
  v8 = (int)v41;
  v45 = 0;
  netcmd = 0;
  do
  {
    if ( !ItemIcon::GetItem(*(ItemIcon **)(v8 - 204)) )
      goto LABEL_48;
    v9 = ItemIcon::GetItem(*(ItemIcon **)(v8 - 204));
    v10 = v9->baseclass_0.vfptr;
    temp.nItemID = v9->m_kStruct.itemid;
    v11 = v10[1].__vecDelDtor;
    temp.nLevel = netcmd + 10;
    temp.NumOfItemOption = 1;
    if ( (unsigned __int8)((int (__thiscall *)(Item *))v11)(v9)
      && (unsigned __int8)((int (__thiscall *)(Item *))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 1
      && (unsigned __int8)((int (__thiscall *)(Item *))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 2
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 14
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 22
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 14
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 19
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 20
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 25
      && (unsigned __int8)((int (__thiscall *)(_DWORD))v9->baseclass_0.vfptr[1].__vecDelDtor)(v9) != 12 )
    {
      if ( v9->m_pkInfo->UpLimit )
      {
        v12 = v9->baseclass_0.vfptr[9].__vecDelDtor;
        temp.ItemOption[0].nOptionType = 4;
        v14 = ((int (__thiscall *)(Item *))v12)(v9);
        HIDWORD(temp.ItemOption[0].nOptionData) = HIDWORD(v14);
        v13 = v14;
      }
      else
      {
        v13 = 0;
        temp.ItemOption[0].nOptionType = 2;
        HIDWORD(temp.ItemOption[0].nOptionData) = 0;
      }
    }
    else
    {
      v15 = (*v41)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor;
      temp.ItemOption[0].nOptionType = 3;
      v16 = (const char *)((int (__cdecl *)(unsigned int))v15)(v37);
      v17 = atoi(v16);
      if ( v17 > (unsigned int)((int (__thiscall *)(Item *))v9->baseclass_0.vfptr[4].__vecDelDtor)(v9) )
      {
        ((void (__thiscall *)(Item *))v9->baseclass_0.vfptr[4].__vecDelDtor)(v9);
        v34 = TextData::Get(0xB9E7482Cu);
        v35 = fs(v34);
        GameFrameWork::AddSysMsg((GameFrameWork *)v38->baseclass_0.m_pkFrameWork, v35);
        if ( !*(_DWORD *)&sRewarditem )
          return;
        v36 = *(void **)&sRewarditem;
        goto LABEL_57;
      }
      v13 = v17;
      v7 = *(_DWORD *)&sRewarditem;
      HIDWORD(temp.ItemOption[0].nOptionData) = 0;
    }
    LODWORD(temp.ItemOption[0].nOptionData) = v13;
    if ( &temp >= v6 || v7 > (unsigned int)&temp )
    {
      if ( v6 == sRewarditem.baseclass_0._Myend )
      {
        v25 = (signed int)((char *)v6 - v7) >> 4;
        if ( (unsigned int)v25 > 0xFFFFFFE )
LABEL_53:
          std::_Xlength_error("vector<T> too long");
        v26 = v25 + 1;
        v27 = (signed int)((char *)sRewarditem.baseclass_0._Myend - v7) >> 4;
        if ( v26 > (unsigned int)v27 )
        {
          if ( 268435455 - ((unsigned int)v27 >> 1) >= v27 )
            v28 = ((unsigned int)v27 >> 1) + v27;
          else
            v28 = 0;
          if ( v28 < v26 )
            v28 = v26;
          std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::reserve(
            (std::vector<NiColorA,std::allocator<NiColorA> > *)&sRewarditem,
            v28);
          v6 = sRewarditem.baseclass_0._Mylast;
          v7 = *(_DWORD *)&sRewarditem;
        }
      }
      if ( !v6 )
        goto LABEL_47;
      v29 = temp.ItemOption[0].nOptionType;
      v24 = HIDWORD(temp.ItemOption[0].nOptionData);
      *(_DWORD *)&v6->nLevel = *(_DWORD *)&temp;
      v6->ItemOption[0].nOptionType = v29;
      LODWORD(v6->ItemOption[0].nOptionData) = v13;
    }
    else
    {
      v18 = (char *)&temp - v7;
      if ( v6 == sRewarditem.baseclass_0._Myend )
      {
        v19 = (signed int)((char *)v6 - v7) >> 4;
        if ( (unsigned int)v19 > 0xFFFFFFE )
          goto LABEL_53;
        v20 = v19 + 1;
        v21 = (signed int)((char *)sRewarditem.baseclass_0._Myend - v7) >> 4;
        if ( v20 > (unsigned int)v21 )
        {
          if ( 268435455 - ((unsigned int)v21 >> 1) >= v21 )
            v22 = ((unsigned int)v21 >> 1) + v21;
          else
            v22 = 0;
          if ( v22 < v20 )
            v22 = v20;
          std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::reserve(
            (std::vector<NiColorA,std::allocator<NiColorA> > *)&sRewarditem,
            v22);
          v6 = sRewarditem.baseclass_0._Mylast;
          v7 = *(_DWORD *)&sRewarditem;
        }
      }
      v23 = v7 + ((unsigned int)v18 & 0xFFFFFFF0);
      if ( !v6 )
        goto LABEL_47;
      *(_DWORD *)&v6->nLevel = *(_DWORD *)v23;
      v6->ItemOption[0].nOptionType = *(_DWORD *)(v23 + 4);
      LODWORD(v6->ItemOption[0].nOptionData) = *(_DWORD *)(v23 + 8);
      v24 = *(_DWORD *)(v23 + 12);
    }
    HIDWORD(v6->ItemOption[0].nOptionData) = v24;
LABEL_47:
    ++v6;
    sRewarditem.baseclass_0._Mylast = v6;
LABEL_48:
    v8 = (int)(v41 + 1);
    ++netcmd;
    ++v41;
  }
  while ( netcmd < 51 );
  v30 = (PgNet *)g_kNetMgr.m_spWorldMgr.m_pObject;
  v31 = (signed int)((char *)v6 - v7) >> 4;
  v32 = v31;
  if ( g_kNetMgr.m_spWorldMgr.m_pObject )
  {
    LOWORD(netcmd) = -26563;
    PgNet::AddNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &netcmd, 2);
    kProto.NumOfRewardGood = v31;
    PgNet::AddNetMsg(v30, &kProto, 1);
    v33 = *(void **)&sRewarditem;
    PgNet::SendNetMsg(v30, *(void **)&sRewarditem, 16 * v32);
  }
  else
  {
    v33 = *(void **)&sRewarditem;
  }
  if ( v33 )
  {
    v36 = v33;
LABEL_57:
    operator delete(v36);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006EBAB0) --------------------------------------------------------
void __thiscall GuildAcademyItemRewardWin::OnCommand(GuildAcademyItemRewardWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      GuildAcademyItemRewardWin::OnClickWinCloseBtn(this);
      break;
    case 0xEu:
      GuildAcademyItemRewardWin::OnClickApplyBtn(this);
      break;
    case 0xFu:
      GuildAcademyItemRewardWin::OnClickInitializeBtn(this);
      break;
    case 0x10u:
      GuildAcademyItemRewardWin::OnClickGuildAcademyStorageBtn(this);
      break;
    case 0xCu:
      GuildAcademyItemRewardWin::OnInvLClick(this, lParam);
      break;
    case 0x11u:
      GuildAcademyItemRewardWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006EBB20) --------------------------------------------------------
void *__thiscall GuildAcademyItemRewardInvWin::_scalar_deleting_destructor_(GuildAcademyItemRewardInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyItemRewardInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyItemRewardInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CE930: using guessed type int (__stdcall *GuildAcademyItemRewardInvWin___vftable_)(int uiFlags);
// 9CE94C: using guessed type int (__thiscall *GuildAcademyItemRewardInvWin___vftable_)(void *p, char);

//----- (006EBB60) --------------------------------------------------------
void *__thiscall GuildAcademyItemRewardWin::_scalar_deleting_destructor_(GuildAcademyItemRewardWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyItemRewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyItemRewardWin::_vftable_;
  this->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  this->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9CEBBC: using guessed type int (__stdcall *GuildAcademyItemRewardWin___vftable_)(int uiFlags);
// 9CEBDC: using guessed type int (__thiscall *GuildAcademyItemRewardWin___vftable_)(void *p, char);

//----- (006EBBB0) --------------------------------------------------------
NiColorA *__thiscall std::allocator<NiColorA>::allocate(std::allocator<NiColorA> *this, unsigned int _Count)
{
  NiColorA *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0xFFFFFFF || (result = (NiColorA *)operator new(16 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006EBC10) --------------------------------------------------------
NiColorA *__cdecl std::_Uninit_move<GUILD_ACADEMY_REWARD_ITEM___GUILD_ACADEMY_REWARD_ITEM___std::allocator<GUILD_ACADEMY_REWARD_ITEM>_GUILD_ACADEMY_REWARD_ITEM>(NiColorA *_First, NiColorA *_Last, NiColorA *_Dest, std::allocator<NiColorA> *_Al, NiColorA *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  NiColorA *v6; // ecx@1
  NiColorA *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
    {
      result->r = v6->r;
      result->g = v6->g;
      result->b = v6->b;
      result->a = v6->a;
    }
    ++v6;
  }
  return result;
}

//----- (006EBC50) --------------------------------------------------------
void __thiscall std::vector<CollectWin::sRewardInfo_std::allocator<CollectWin::sRewardInfo>>::reserve(std::vector<NiColorA,std::allocator<NiColorA> > *this, unsigned int _Count)
{
  std::vector<NiColorA,std::allocator<NiColorA> > *v2; // esi@1
  void *v3; // ebx@4
  NiColorA *v4; // ST04_4@4
  NiColorA *v5; // ST00_4@4
  int v6; // edi@4
  int v7; // [sp-10h] [bp-24h]@1
  void *_Ptr; // [sp+0h] [bp-14h]@4
  int *v9; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@4

  v9 = &v7;
  v2 = this;
  if ( _Count > 0xFFFFFFF )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 4 < _Count )
  {
    v3 = std::allocator<NiColorA>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(NiColorA **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = v3;
    v10 = 0;
    std::_Uninit_move<GUILD_ACADEMY_REWARD_ITEM___GUILD_ACADEMY_REWARD_ITEM___std::allocator<GUILD_ACADEMY_REWARD_ITEM>_GUILD_ACADEMY_REWARD_ITEM>(
      v5,
      v4,
      (NiColorA *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = (int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->baseclass_0._Myend = (NiColorA *)((char *)v3 + 16 * _Count);
    v2->baseclass_0._Mylast = (NiColorA *)((char *)v3 + (v6 & 0xFFFFFFF0));
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v3;
  }
}

//----- (006EBD20) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::GuildAcademyMenuWin(GuildAcademyMenuWin *this)
{
  GuildAcademyMenuWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyMenuWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyMenuWin::_vftable_;
}
// 9CEFB8: using guessed type int (__stdcall *GuildAcademyMenuWin___vftable_)(int uiFlags);
// 9CEFD4: using guessed type int (__thiscall *GuildAcademyMenuWin___vftable_)(void *p, char);

//----- (006EBD40) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::_GuildAcademyMenuWin(GuildAcademyMenuWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CEFB8: using guessed type int (__stdcall *GuildAcademyMenuWin___vftable_)(int uiFlags);
// 9CEFD4: using guessed type int (__thiscall *GuildAcademyMenuWin___vftable_)(void *p, char);

//----- (006EBD80) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnClickJoinBtn(GuildAcademyMenuWin *this)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
}

//----- (006EBDA0) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnClickCheckRankingBtn(GuildAcademyMenuWin *this)
{
  PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_REQ pkProto; // [sp+0h] [bp-4h]@1

  pkProto.nRoundTime = 0;
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x4Du, &pkProto, 4);
}

//----- (006EBDD0) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnClickMoneyCompensationBtn(GuildAcademyMenuWin *this)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x31u, 0, 0);
}

//----- (006EBDF0) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnClickItemCompensationBtn(GuildAcademyMenuWin *this)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x35u, 0, 0);
}

//----- (006EBE10) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnClickPrevMenuBtn(GuildAcademyMenuWin *this)
{
  GuildAcademyMenuWin *v1; // esi@1
  PgWin *v2; // esi@1
  unsigned int YPos; // [sp+4h] [bp-8h]@1
  unsigned int XPos; // [sp+8h] [bp-4h]@1

  v1 = this;
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
    v1,
    &XPos,
    &YPos);
  v2 = (PgWin *)GuildTask::GetGuildSelectWin();
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[43].__vecDelDtor((NiRefObject *)v2, XPos);
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[44].__vecDelDtor((NiRefObject *)v2, YPos);
  if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
    PgWinMgr::ShowWin(&Pgg_kWinMgr, v2);
}

//----- (006EBE80) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnHelpLink(GuildAcademyMenuWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildMenu");
}

//----- (006EBEB0) --------------------------------------------------------
bool __thiscall GuildAcademyMenuWin::Create(GuildAcademyMenuWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyMenuWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // ebx@10
  int v9; // edi@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // ebx@13
  NiSourceTexture *v15; // ebx@13
  PgSprData *v16; // ebx@14
  NiNode *v17; // esi@16
  PgFont *v18; // eax@21
  PgWinText *v19; // ebx@21
  char *v20; // eax@21
  PgSprData *v21; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v22; // edx@21
  unsigned int v23; // ebx@21
  PgFont *v24; // eax@21
  PgWinText *v25; // ebx@21
  char *v26; // eax@21
  PgSprData *v27; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v28; // edx@21
  unsigned int v29; // ebx@21
  PgFont *v30; // eax@21
  PgWinText *v31; // ebx@21
  char *v32; // eax@21
  PgSprData *v33; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v34; // edx@21
  unsigned int v35; // ebx@21
  PgFont *v36; // eax@21
  PgWinText *v37; // ebx@21
  char *v38; // eax@21
  PgSprData *v39; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v40; // edx@21
  unsigned int v41; // ebx@21
  PgFont *v42; // eax@21
  PgWinText *v43; // ebx@21
  char *v44; // eax@21
  PgSprData *v45; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v46; // edx@21
  unsigned int v47; // ebx@21
  PgFont *v48; // eax@21
  PgWinText *v49; // ebx@21
  char *v50; // eax@21
  PgSprData *v51; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v52; // edx@21
  unsigned int v53; // ebx@21
  PgFont *v54; // eax@21
  PgWinText *v55; // ebx@21
  char *v56; // eax@21
  PgSprData *v57; // ebx@21
  NiPointer<PgSprData::PgHitTester> *v58; // edx@21
  unsigned int v59; // ebx@21
  PgFont *v60; // eax@21
  PgWinText *v61; // edi@21
  NiRefObjectVtbl *v62; // ebx@21
  char *v63; // eax@21
  NiNode *v64; // esi@22
  const char *v65; // [sp+60h] [bp-40h]@11
  int *v66; // [sp+64h] [bp-3Ch]@11
  int *v67; // [sp+68h] [bp-38h]@11
  NiSourceTexture *v68; // [sp+6Ch] [bp-34h]@11
  unsigned int uiWidth; // [sp+80h] [bp-20h]@15
  unsigned int uiHeight; // [sp+84h] [bp-1Ch]@15
  int uiLeft; // [sp+88h] [bp-18h]@4
  int uiTop; // [sp+8Ch] [bp-14h]@4
  NiPointer<NiNode> spNode; // [sp+90h] [bp-10h]@1
  int v74; // [sp+9Ch] [bp-4h]@1
  int iYOff; // [sp+A8h] [bp+8h]@10
  NiRefObjectVtbl *iYOffa; // [sp+A8h] [bp+8h]@21
  unsigned int iYOffb; // [sp+A8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffc; // [sp+A8h] [bp+8h]@21
  unsigned int iYOffd; // [sp+A8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffe; // [sp+A8h] [bp+8h]@21
  unsigned int iYOfff; // [sp+A8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffg; // [sp+A8h] [bp+8h]@21
  unsigned int iYOffh; // [sp+A8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffi; // [sp+A8h] [bp+8h]@21
  unsigned int iYOffj; // [sp+A8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffk; // [sp+A8h] [bp+8h]@21
  unsigned int iYOffl; // [sp+A8h] [bp+8h]@21
  NiRefObjectVtbl *iYOffm; // [sp+A8h] [bp+8h]@21
  unsigned int iYOffn; // [sp+A8h] [bp+8h]@21

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v74 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildMenu.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildAcademyMenuWin", 0) )
  {
    v6 = spNode.m_pObject;
    v74 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v68 = v10;
    v67 = &uiTop;
    v66 = &uiLeft;
    v65 = "Theme";
  }
  else
  {
    v68 = 0;
    v67 = &uiTop;
    v66 = &uiLeft;
    v65 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v65, v66, v67, v68);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0.baseclass_0);
  v15 = MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, v15);
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop - iYOff, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0x15u, 0, 0);
  }
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v18 = Font::Get(0);
    v19 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop,
            uiWidth,
            uiHeight,
            v18,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v19,
      1u);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v19,
      (unsigned int)&Color::m_kDxWinTitleColor);
    iYOffa = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v20 = TextData::Get(0x253B184Cu);
    iYOffa[118].__vecDelDtor((NiRefObject *)v19, (unsigned int)v20);
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v19,
      0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(v21, &spNode.m_pObject->baseclass_0, "Btn01Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v21, &v2->baseclass_0.baseclass_0.baseclass_0, 0xAu, 0, 0);
    v22 = v21->m_akHitTester.m_pBase;
    v23 = v22->m_pObject->m_uiHeight;
    iYOffb = v22->m_pObject->m_uiWidth;
    v24 = Font::Get(0);
    v25 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffb, v23, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v25,
      5u);
    iYOffc = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v26 = TextData::Get(0x4AAD92A3u);
    iYOffc[118].__vecDelDtor((NiRefObject *)v25, (unsigned int)v26);
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v25,
      0);
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v27, &spNode.m_pObject->baseclass_0, "Btn02Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
    v28 = v27->m_akHitTester.m_pBase;
    v29 = v28->m_pObject->m_uiHeight;
    iYOffd = v28->m_pObject->m_uiWidth;
    v30 = Font::Get(0);
    v31 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffd, v29, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v31,
      5u);
    iYOffe = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v32 = TextData::Get(0x23312946u);
    iYOffe[118].__vecDelDtor((NiRefObject *)v31, (unsigned int)v32);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v33, &spNode.m_pObject->baseclass_0, "Btn03Click");
    PgSprData::Add(v33, &spNode.m_pObject->baseclass_0, "Btn03Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v33, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
    v34 = v33->m_akHitTester.m_pBase;
    v35 = v34->m_pObject->m_uiHeight;
    iYOfff = v34->m_pObject->m_uiWidth;
    v36 = Font::Get(0);
    v37 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOfff, v35, v36, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v37,
      5u);
    iYOffg = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v38 = TextData::Get(0xED4F2825u);
    iYOffg[118].__vecDelDtor((NiRefObject *)v37, (unsigned int)v38);
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v37,
      0);
    v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Btn04Click");
    PgSprData::Add(v39, &spNode.m_pObject->baseclass_0, "Btn04Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
    v40 = v39->m_akHitTester.m_pBase;
    v41 = v40->m_pObject->m_uiHeight;
    iYOffh = v40->m_pObject->m_uiWidth;
    v42 = Font::Get(0);
    v43 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffh, v41, v42, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v43,
      5u);
    iYOffi = v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v44 = TextData::Get(0xFD2D3B43u);
    iYOffi[118].__vecDelDtor((NiRefObject *)v43, (unsigned int)v44);
    v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v43,
      0);
    v45 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn05Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v45, &spNode.m_pObject->baseclass_0, "Btn05Click");
    PgSprData::Add(v45, &spNode.m_pObject->baseclass_0, "Btn05Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v45, &v2->baseclass_0.baseclass_0.baseclass_0, 0x10u, 0, 0);
    v46 = v45->m_akHitTester.m_pBase;
    v47 = v46->m_pObject->m_uiHeight;
    iYOffj = v46->m_pObject->m_uiWidth;
    v48 = Font::Get(0);
    v49 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffj, v47, v48, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v49,
      5u);
    iYOffk = v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v50 = TextData::Get(0xE903174Cu);
    iYOffk[118].__vecDelDtor((NiRefObject *)v49, (unsigned int)v50);
    v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v49,
      0);
    v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn06Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v51, &spNode.m_pObject->baseclass_0, "Btn06Click");
    PgSprData::Add(v51, &spNode.m_pObject->baseclass_0, "Btn06Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v51, &v2->baseclass_0.baseclass_0.baseclass_0, 0x11u, 0, 0);
    v52 = v51->m_akHitTester.m_pBase;
    v53 = v52->m_pObject->m_uiHeight;
    iYOffl = v52->m_pObject->m_uiWidth;
    v54 = Font::Get(0);
    v55 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffl, v53, v54, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v55,
      5u);
    iYOffm = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v56 = TextData::Get(0x91B58A99u);
    iYOffm[118].__vecDelDtor((NiRefObject *)v55, (unsigned int)v56);
    v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v55,
      0);
    v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn07Nor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v57, &spNode.m_pObject->baseclass_0, "Btn07Click");
    PgSprData::Add(v57, &spNode.m_pObject->baseclass_0, "Btn07Over");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v57, &v2->baseclass_0.baseclass_0.baseclass_0, 0x12u, 0, 0);
    v58 = v57->m_akHitTester.m_pBase;
    v59 = v58->m_pObject->m_uiHeight;
    iYOffn = v58->m_pObject->m_uiWidth;
    v60 = Font::Get(0);
    v61 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffn, v59, v60, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v61,
      5u);
    v62 = v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v63 = TextData2::Get(0x4D562842u);
    v62[118].__vecDelDtor((NiRefObject *)v61, (unsigned int)v63);
    v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v61,
      0);
    ((void (__thiscall *)(GuildAcademyMenuWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    v74 = -1;
    if ( spNode.m_pObject )
    {
      v64 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v64 )
          v64->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v64, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v17 = spNode.m_pObject;
    v74 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v17 )
      v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006EC7F0) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnClickHallOfFameBtn(GuildAcademyMenuWin *this)
{
  GuildAcademyMenuWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  CClientGuildAcademy *v3; // eax@2
  int v4; // esi@3
  char *v5; // edi@3
  char *v6; // eax@7
  PROTO_NC_GUILD_ACADEMY_GET_GRADUATE_REQ pkProto; // [sp+8h] [bp-14h]@7
  unsigned int v8; // [sp+18h] [bp-4h]@1
  int v9; // [sp+1Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v2)
    || (v3 = GuildAcademyTask::GetGuildAcademy(), CClientGuildAcademy::AmIGuildAcademyMember(v3)) )
  {
    *(_QWORD *)&pkProto.sGuildName.n4_name[8] = 0i64;
    *(_QWORD *)&pkProto.sGuildName.n4_name[0] = 0i64;
    v6 = GuildTask::GetGuildName(g_pkMainChar->m_dwGuildRegNum);
    *(_QWORD *)&pkProto.sGuildName.n4_name[8] = 0i64;
    *(_QWORD *)&pkProto.sGuildName.n4_name[0] = 0i64;
    strncpy(pkProto.sGuildName.n4_name, v6, 0x10u);
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x49u, &pkProto, 16);
  }
  else
  {
    v4 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v5 = TextData::Get(0x1D2F7C72u);
    if ( *(_DWORD *)(v4 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
      if ( *(_DWORD *)(v4 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006EC8E0) --------------------------------------------------------
GuildAcademyMenuWin *__cdecl GuildAcademyMenuWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildAcademyMenuWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildAcademyMenuWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildAcademyMenuWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildAcademyMenuWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CEFB8: using guessed type int (__stdcall *GuildAcademyMenuWin___vftable_)(int uiFlags);
// 9CEFD4: using guessed type int (__thiscall *GuildAcademyMenuWin___vftable_)(void *p, char);

//----- (006ECA20) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnClickLeaveBtn(GuildAcademyMenuWin *this)
{
  GuildAcademyMenuWin *v1; // ebx@1
  CClientGuildAcademy *v2; // eax@1
  char *v3; // edi@2
  int v4; // eax@6
  void *v5; // eax@7
  int v6; // esi@7

  v1 = this;
  v2 = GuildAcademyTask::GetGuildAcademy();
  if ( CClientGuildAcademy::AmIGuildAcademyMember(v2) )
  {
    v4 = ISingletonTask<GuildAcademyLeaveTask>::ms_pkSingletonTask;
    if ( !ISingletonTask<GuildAcademyLeaveTask>::ms_pkSingletonTask )
    {
      v5 = operator new(0x48u);
      v6 = (int)v5;
      if ( v5 )
      {
        ITask::ITask((ITask *)v5, 0);
        *(_DWORD *)v6 = &GuildAcademyLeaveTask::_vftable_;
        *(_DWORD *)(v6 + 8) = &GuildAcademyLeaveTask::_vftable_;
        v4 = v6;
      }
      else
      {
        v4 = 0;
      }
      ISingletonTask<GuildAcademyLeaveTask>::ms_pkSingletonTask = v4;
    }
    (**(void (__cdecl ***)(_DWORD))(v4 + 8))(v1->baseclass_0.m_pkFrameWork);
  }
  else
  {
    v3 = TextData::Get(0x26A937Cu);
    if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v3,
        &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      if ( v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
        ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v3,
          &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    }
    ((void (__cdecl *)(_DWORD))v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->DirectDispatchToParent)(25);
  }
}
// 9CF22C: using guessed type int (__stdcall *GuildAcademyLeaveTask___vftable_)(int uiFlags);
// 9CF248: using guessed type int (__thiscall *GuildAcademyLeaveTask___vftable_)(void *p, char);
// B67E70: using guessed type int ISingletonTask_GuildAcademyLeaveTask___ms_pkSingletonTask;

//----- (006ECB30) --------------------------------------------------------
void __thiscall GuildAcademyMenuWin::OnCommand(GuildAcademyMenuWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xAu:
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
      break;
    case 0xBu:
      GuildAcademyMenuWin::OnClickCheckRankingBtn(this);
      break;
    case 0xCu:
      GuildAcademyMenuWin::OnClickHallOfFameBtn(this);
      break;
    case 0xFu:
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x31u, 0, 0);
      break;
    case 0x10u:
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x35u, 0, 0);
      break;
    case 0x11u:
      GuildAcademyMenuWin::OnClickLeaveBtn(this);
      break;
    case 0x12u:
      GuildAcademyMenuWin::OnClickPrevMenuBtn(this);
      break;
    case 0x15u:
      GuildAcademyMenuWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006ECBF0) --------------------------------------------------------
void *__thiscall GuildAcademyMenuWin::_scalar_deleting_destructor_(GuildAcademyMenuWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyMenuWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyMenuWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CEFB8: using guessed type int (__stdcall *GuildAcademyMenuWin___vftable_)(int uiFlags);
// 9CEFD4: using guessed type int (__thiscall *GuildAcademyMenuWin___vftable_)(void *p, char);

//----- (006ECC30) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildAcademyLeaveTask>::_scalar_deleting_destructor_(GuildAcademyLeaveTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildAcademyLeaveTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildAcademyLeaveTask>::_vftable_;
  ISingletonTask<GuildAcademyLeaveTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CF1F8: using guessed type int (__stdcall *ISingletonTask_GuildAcademyLeaveTask____vftable_)(int uiFlags);
// 9CF214: using guessed type int (__thiscall *ISingletonTask_GuildAcademyLeaveTask____vftable_)(void *p, char);
// B67E70: using guessed type int ISingletonTask_GuildAcademyLeaveTask___ms_pkSingletonTask;

//----- (006ECC70) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::GuildAcademyMoneyRewardWin(GuildAcademyMoneyRewardWin *this)
{
  GuildAcademyMoneyRewardWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkGuildAcademyInfo1 = 0;
  v1->m_pkGuildAcademyInfo2 = 0;
  v1->m_pkGemText = 0;
  v1->m_pkGoldText = 0;
  v1->m_pkSilverText = 0;
  v1->m_pkCopperText = 0;
  v1->m_pkMsgBox = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyMoneyRewardWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyMoneyRewardWin::_vftable_;
  v1->m_pkMoneyEditWin[0] = 0;
  v1->m_pkMoneyEditWin[1] = 0;
  v1->m_pkMoneyEditWin[2] = 0;
  v1->m_pkMoneyEditWin[3] = 0;
  v1->m_pkMoneyEditWin[4] = 0;
  v1->m_pkMoneyEditWin[5] = 0;
  v1->m_pkMoneyEditWin[6] = 0;
  v1->m_pkMoneyEditWin[7] = 0;
  v1->m_pkMoneyEditWin[8] = 0;
  v1->m_pkMoneyEditWin[9] = 0;
  v1->m_pkMoneyEditWin[10] = 0;
  v1->m_pkMoneyEditWin[11] = 0;
  v1->m_pkMoneyEditWin[12] = 0;
  v1->m_pkMoneyEditWin[13] = 0;
  v1->m_pkMoneyEditWin[14] = 0;
  v1->m_pkMoneyEditWin[15] = 0;
  v1->m_pkMoneyEditWin[16] = 0;
  v1->m_pkMoneyEditWin[17] = 0;
  v1->m_pkMoneyEditWin[18] = 0;
  v1->m_pkMoneyEditWin[19] = 0;
  v1->m_pkMoneyEditWin[20] = 0;
  v1->m_pkMoneyEditWin[21] = 0;
  v1->m_pkMoneyEditWin[22] = 0;
  v1->m_pkMoneyEditWin[23] = 0;
  v1->m_pkMoneyEditWin[24] = 0;
  v1->m_pkMoneyEditWin[25] = 0;
  v1->m_pkMoneyEditWin[26] = 0;
  v1->m_pkMoneyEditWin[27] = 0;
  v1->m_pkMoneyEditWin[28] = 0;
  v1->m_pkMoneyEditWin[29] = 0;
  v1->m_pkMoneyEditWin[30] = 0;
  v1->m_pkMoneyEditWin[31] = 0;
  v1->m_pkMoneyEditWin[32] = 0;
  v1->m_pkMoneyEditWin[33] = 0;
  v1->m_pkMoneyEditWin[34] = 0;
  v1->m_pkMoneyEditWin[35] = 0;
  v1->m_pkMoneyEditWin[36] = 0;
  v1->m_pkMoneyEditWin[37] = 0;
  v1->m_pkMoneyEditWin[38] = 0;
  v1->m_pkMoneyEditWin[39] = 0;
  v1->m_bFromReq = 0;
}
// 9CF494: using guessed type int (__stdcall *GuildAcademyMoneyRewardWin___vftable_)(int uiFlags);
// 9CF4B4: using guessed type int (__thiscall *GuildAcademyMoneyRewardWin___vftable_)(void *p, char);

//----- (006ECDB0) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::_GuildAcademyMoneyRewardWin(GuildAcademyMoneyRewardWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyMoneyRewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyMoneyRewardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CF494: using guessed type int (__stdcall *GuildAcademyMoneyRewardWin___vftable_)(int uiFlags);
// 9CF4B4: using guessed type int (__thiscall *GuildAcademyMoneyRewardWin___vftable_)(void *p, char);

//----- (006ECDD0) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::DirectMessage(GuildAcademyMoneyRewardWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 27 && pvBody )
  {
    if ( !*(_DWORD *)pvBody )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x41u, 0, 0);
  }
}

//----- (006ECE00) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::InitializeRewardMoney(GuildAcademyMoneyRewardWin *this, PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK *pAck)
{
  char *v2; // esi@1
  signed int v3; // ebx@1
  signed int v4; // edi@2

  v2 = (char *)this->m_pkMoneyEditWin;
  v3 = 10;
  do
  {
    v4 = 4;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 460))(&unk_9CF287);
      v2 += 4;
      --v4;
    }
    while ( v4 );
    --v3;
  }
  while ( v3 );
}

//----- (006ECE40) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::SetMoneyValue(GuildAcademyMoneyRewardWin *this, int index, __int64 money)
{
  GuildAcademyMoneyRewardWin *v3; // ebx@1
  GuildAcademyMoneyRewardWin *v4; // ST24_4@1
  void *(__thiscall *v5)(NiRefObject *, unsigned int); // eax@1
  int v6; // ebx@1
  char acMoneyStr[32]; // [sp+14h] [bp-24h]@1
  unsigned int v8; // [sp+34h] [bp-4h]@1
  int v9; // [sp+38h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v3 = this;
  v4 = this;
  User::GetGem(money);
  sprintf(acMoneyStr, "%I64d");
  v5 = v3->m_pkMoneyEditWin[4 * index]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor;
  v6 = (int)((char *)v3 + 16 * index);
  ((void (__stdcall *)(_DWORD))v5)(acMoneyStr);
  User::GetGold(money);
  sprintf(acMoneyStr, "%I64d");
  (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 376) + 460))(acMoneyStr);
  User::GetSilver(money);
  sprintf(acMoneyStr, "%I64d");
  (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v6 + 380) + 460))(*(_DWORD *)(v6 + 380), acMoneyStr);
  User::GetCopper(money);
  sprintf(acMoneyStr, "%I64d");
  (*((void (__stdcall **)(_DWORD))(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[4 * (index + 24)]->__vecDelDtor
   + 115))(acMoneyStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (006ECF50) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::SetEnable(GuildAcademyMoneyRewardWin *this, bool b)
{
  EditWin **v2; // esi@1
  signed int v3; // edi@1

  v2 = this->m_pkMoneyEditWin;
  v3 = 40;
  do
  {
    EditWin::SetEnable(*v2, b);
    ++v2;
    --v3;
  }
  while ( v3 );
}

//----- (006ECF80) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::OnClose(GuildAcademyMoneyRewardWin *this)
{
  PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_CLOSE_CMD kProto; // [sp+1h] [bp-1h]@1

  kProto.nCloseType = 1;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Fu, &kProto, 1);
}

//----- (006ECFA0) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::OnHelpLink(GuildAcademyMoneyRewardWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildAcademyGift");
}

//----- (006ECFD0) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::OnClickWinCloseBtn(GuildAcademyMoneyRewardWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, v1);
}

//----- (006ED000) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::SetRewardMoney(GuildAcademyMoneyRewardWin *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK *pAck)
{
  GuildAcademyMoneyRewardWin *v2; // edi@1
  char *v3; // esi@2
  int v4; // ebx@2
  int v5; // [sp-14h] [bp-18h]@4
  __int64 v6; // [sp-10h] [bp-14h]@4

  v2 = this;
  if ( pAck->NumOfRewardGood > 0 )
  {
    v3 = (char *)&pAck[1].Error + 1;
    v4 = pAck->NumOfRewardGood;
    do
    {
      switch ( *(v3 - 1) )
      {
        case 0xA:
          v6 = *(_QWORD *)v3;
          v5 = 0;
          goto LABEL_14;
        case 0x10:
          v6 = *(_QWORD *)v3;
          v5 = 1;
          goto LABEL_14;
        case 0x15:
          v6 = *(_QWORD *)v3;
          v5 = 2;
          goto LABEL_14;
        case 0x1A:
          v6 = *(_QWORD *)v3;
          v5 = 3;
          goto LABEL_14;
        case 0x1F:
          v6 = *(_QWORD *)v3;
          v5 = 4;
          goto LABEL_14;
        case 0x24:
          v6 = *(_QWORD *)v3;
          v5 = 5;
          goto LABEL_14;
        case 0x29:
          v6 = *(_QWORD *)v3;
          v5 = 6;
          goto LABEL_14;
        case 0x2E:
          v6 = *(_QWORD *)v3;
          v5 = 7;
          goto LABEL_14;
        case 0x33:
          v6 = *(_QWORD *)v3;
          v5 = 8;
          goto LABEL_14;
        case 0x38:
          v6 = *(_QWORD *)v3;
          v5 = 9;
LABEL_14:
          GuildAcademyMoneyRewardWin::SetMoneyValue(v2, v5, v6);
          break;
        default:
          break;
      }
      v3 += 9;
      --v4;
    }
    while ( v4 );
  }
  LOBYTE((&pAck)[1]) = 1;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Du, &(&pAck)[1], 1);
  v2->m_bFromReq = 1;
}

//----- (006ED140) --------------------------------------------------------
bool __thiscall GuildAcademyMoneyRewardWin::Create(GuildAcademyMoneyRewardWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyMoneyRewardWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  NiSourceTexture *v18; // eax@25
  PgSprData *v19; // eax@25
  PgFont *v20; // eax@27
  char *v21; // eax@27
  PgSprData *v22; // eax@29
  PgSprData *v23; // eax@29
  PgFont *v24; // eax@30
  PgWinText *v25; // eax@30
  PgFont *v26; // eax@30
  PgWinText *v27; // eax@30
  char *v28; // eax@30
  PgSprData *v29; // eax@30
  PgFont *v30; // ST88_4@30
  unsigned int v31; // ST84_4@30
  unsigned int v32; // eax@30
  NiSourceTexture *v33; // ST94_4@30
  NiNode *v34; // edx@30
  PgSprData *v35; // eax@30
  PgFont *v36; // ST88_4@30
  unsigned int v37; // ST84_4@30
  unsigned int v38; // eax@30
  NiSourceTexture *v39; // ST94_4@30
  NiNode *v40; // edx@30
  PgSprData *v41; // eax@30
  PgFont *v42; // ST88_4@30
  unsigned int v43; // ST84_4@30
  unsigned int v44; // eax@30
  NiSourceTexture *v45; // ST94_4@30
  NiNode *v46; // edx@30
  PgSprData *v47; // eax@30
  PgFont *v48; // ST88_4@30
  unsigned int v49; // ST84_4@30
  unsigned int v50; // eax@30
  char *v51; // STAC_4@31
  PgSprData::PgHitTester *v52; // eax@31
  unsigned int v53; // STB0_4@31
  PgFont *v54; // eax@31
  signed int v55; // eax@36
  char *v56; // eax@43
  PgSprData *v57; // eax@43
  EditWin *v58; // eax@43
  int v59; // ecx@43
  EditWin **v60; // STA8_4@43
  NiPointer<PgSprData::PgHitTester> *v61; // ecx@45
  unsigned int v62; // STA8_4@45
  PgFont *v63; // eax@45
  int v64; // STA8_4@45
  char *v65; // eax@45
  PgSprData::PgHitTester *v66; // eax@45
  unsigned int v67; // STA8_4@45
  PgFont *v68; // eax@45
  int v69; // STA8_4@45
  char *v70; // eax@45
  PgSprData::PgHitTester *v71; // eax@45
  unsigned int v72; // STA8_4@45
  PgFont *v73; // eax@45
  PgWinText *v74; // edi@45
  NiRefObjectVtbl *v75; // ebx@45
  char *v76; // eax@45
  NiNode *v77; // esi@47
  const char *v78; // [sp+88h] [bp-64h]@23
  int *v79; // [sp+8Ch] [bp-60h]@23
  int *v80; // [sp+90h] [bp-5Ch]@23
  NiSourceTexture *v81; // [sp+94h] [bp-58h]@23
  int v82; // [sp+A8h] [bp-44h]@31
  NiPointer<NiTexturingProperty> spTexProp; // [sp+B4h] [bp-38h]@4
  NiRefObjectVtbl *i; // [sp+B8h] [bp-34h]@27
  int tempNum2; // [sp+BCh] [bp-30h]@30
  unsigned int uiWidth; // [sp+C0h] [bp-2Ch]@25
  unsigned int uiHeight; // [sp+C4h] [bp-28h]@25
  int tempNum; // [sp+C8h] [bp-24h]@30
  char *tempString; // [sp+CCh] [bp-20h]@31
  NiSourceTexture *pkTexture; // [sp+D0h] [bp-1Ch]@7
  NiPointer<NiNode> spNode; // [sp+D4h] [bp-18h]@1
  int uiLeft; // [sp+D8h] [bp-14h]@15
  int uiTop; // [sp+DCh] [bp-10h]@15
  int v94; // [sp+E8h] [bp-4h]@1
  PgWinText *jb; // [sp+F4h] [bp+8h]@27
  PgSprData *jc; // [sp+F4h] [bp+8h]@27
  NiSourceTexture *j; // [sp+F4h] [bp+8h]@27
  PgSprData *jd; // [sp+F4h] [bp+8h]@28
  int je; // [sp+F4h] [bp+8h]@30
  PgWin *jf; // [sp+F4h] [bp+8h]@30
  PgWinText *jg; // [sp+F4h] [bp+8h]@30
  PgWin *jh; // [sp+F4h] [bp+8h]@30
  PgWinText *ji; // [sp+F4h] [bp+8h]@30
  PgWin *jj; // [sp+F4h] [bp+8h]@30
  PgWinText *jk; // [sp+F4h] [bp+8h]@30
  PgWin *jl; // [sp+F4h] [bp+8h]@30
  PgWinText *jm; // [sp+F4h] [bp+8h]@30
  unsigned int jn; // [sp+F4h] [bp+8h]@31
  PgWinText *jo; // [sp+F4h] [bp+8h]@31
  signed int ja; // [sp+F4h] [bp+8h]@36
  PgSprData *jp; // [sp+F4h] [bp+8h]@45
  unsigned int jq; // [sp+F4h] [bp+8h]@45
  PgWinText *jr; // [sp+F4h] [bp+8h]@45
  PgSprData *js; // [sp+F4h] [bp+8h]@45
  unsigned int jt; // [sp+F4h] [bp+8h]@45
  PgWinText *ju; // [sp+F4h] [bp+8h]@45
  PgSprData *jv; // [sp+F4h] [bp+8h]@45
  unsigned int jw; // [sp+F4h] [bp+8h]@45

  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v94 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildAcademyGift.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v94) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v94) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v94 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "GuildAcademyMoneyCompensation", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v81 = v16;
      v80 = &uiTop;
      v79 = &uiLeft;
      v78 = "Theme";
    }
    else
    {
      v81 = 0;
      v80 = &uiTop;
      v79 = &uiLeft;
      v78 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v78, v79, v80, v81);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = MenuTexMgr::GetTexture(0x12u);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v18);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      goto LABEL_54;
    v20 = Font::Get(MAIN_MENU);
    jb = PgWinText::CreateWin(
           uiLeft - v14,
           uiTop - v15,
           uiWidth,
           uiHeight,
           v20,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
    jb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)jb,
      1u);
    ((void (__stdcall *)(__int64 *))jb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    i = jb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 118;
    v21 = TextData::Get(0x739A99BBu);
    i->__vecDelDtor(jb, v21);
    ((void (__stdcall *)(_DWORD))jb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    jc = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(jc, &spNode.m_pObject->baseclass_0, "ClsClick");
    PgSprData::Add(jc, &spNode.m_pObject->baseclass_0, "ClsOver");
    PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, jc, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
    j = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
    {
      jd = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, j);
      PgSprData::Add(jd, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
      PgSprData::Add(jd, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, jd, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
    }
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v23, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "GuildInfoText", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v24 = Font::Get(MAIN_MENU);
      v25 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 - 5,
              uiWidth,
              uiHeight,
              v24,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkGuildAcademyInfo1 = v25;
      v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v25,
        4u);
      ((void (__stdcall *)(_UNKNOWN *))v2->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CF276);
      ((void (__stdcall *)(_DWORD))v2->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v26 = Font::Get(MAIN_MENU);
      v27 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 30,
              uiWidth,
              uiHeight - 30,
              v26,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkGuildAcademyInfo2 = v27;
      v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v27,
        4u);
      je = (int)&v2->m_pkGuildAcademyInfo2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v28 = TextData::Get(0xF54672A1u);
      (*(void (__thiscall **)(PgWinText *, char *))je)(v2->m_pkGuildAcademyInfo2, v28);
      ((void (__stdcall *)(_DWORD))v2->m_pkGuildAcademyInfo2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GemInput11", &uiLeft, &uiTop, pkTexture);
      jf = (PgWin *)PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v29, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v30 = Font::Get(0);
      v31 = ((int (*)(void))jf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v32 = ((int (*)(void))jf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      jg = PgWinText::CreateWin(0, 1, v32, v31, v30, jf, 0, 0);
      jg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)jg,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))jg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CF277);
      ((void (__stdcall *)(_DWORD))jg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v33 = pkTexture;
      v34 = spNode.m_pObject;
      v2->m_pkGemText = jg;
      v35 = PgSprData::Create(&v34->baseclass_0, "GoldInput11", &uiLeft, &uiTop, v33);
      jh = (PgWin *)PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v36 = Font::Get(0);
      v37 = ((int (*)(void))jh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v38 = ((int (*)(void))jh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      ji = PgWinText::CreateWin(0, 1, v38, v37, v36, jh, 0, 0);
      ji->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)ji,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))ji->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CF27E);
      ((void (__stdcall *)(_DWORD))ji->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v39 = pkTexture;
      v40 = spNode.m_pObject;
      v2->m_pkGoldText = ji;
      v41 = PgSprData::Create(&v40->baseclass_0, "SilverInput11", &uiLeft, &uiTop, v39);
      jj = (PgWin *)PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v41, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v42 = Font::Get(0);
      v43 = ((int (*)(void))jj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v44 = ((int (*)(void))jj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      jk = PgWinText::CreateWin(0, 1, v44, v43, v42, jj, 0, 0);
      jk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)jk,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))jk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CF27F);
      ((void (__stdcall *)(_DWORD))jk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v45 = pkTexture;
      v46 = spNode.m_pObject;
      v2->m_pkSilverText = jk;
      v47 = PgSprData::Create(&v46->baseclass_0, "CopperInput11", &uiLeft, &uiTop, v45);
      jl = (PgWin *)PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v47, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v48 = Font::Get(0);
      v49 = ((int (*)(void))jl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
      v50 = ((int (*)(void))jl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
      jm = PgWinText::CreateWin(0, 1, v50, v49, v48, jl, 0, 0);
      jm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)jm,
        6u);
      ((void (__stdcall *)(_UNKNOWN *))jm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9CF286);
      ((void (__stdcall *)(_DWORD))jm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      v2->m_pkCopperText = jm;
      tempNum = 10;
      tempNum2 = 15;
      i = 0;
      do
      {
        v82 = (int)((char *)&i->__vecDelDtor + 1);
        tempString = fs("Level%02d");
        v51 = fs("%d ~ %dLv");
        v52 = PgSprData::Create(&spNode.m_pObject->baseclass_0, tempString, &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase->m_pObject;
        jn = v52->m_uiHeight;
        v53 = v52->m_uiWidth;
        v54 = Font::Get(0);
        jo = PgWinText::CreateWin(
               uiLeft - v14,
               uiTop - v15 + 1,
               v53,
               jn,
               v54,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
        jo->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
          (NiRefObject *)jo,
          (unsigned int)v51);
        ((void (__stdcall *)(_DWORD))jo->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        if ( i )
          tempNum += 5;
        else
          tempNum += 6;
        tempNum2 += 5;
        i = (NiRefObjectVtbl *)((char *)i + 1);
      }
      while ( v82 < 10 );
      i = 0;
      tempNum2 = 93;
      do
      {
        v55 = 0;
        for ( ja = 0; ; v55 = ja )
        {
          switch ( v55 )
          {
            case 0:
              tempString = "GemInput";
              break;
            case 1:
              tempString = "GoldInput";
              break;
            case 2:
              tempString = "SilverInput";
              break;
            case 3:
              tempString = "CopperInput";
              break;
            default:
              break;
          }
          v56 = fs("%s%02d");
          v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v56, &uiLeft, &uiTop, pkTexture);
          PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v57, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
          v58 = EditWin::CreateWin(
                  uiLeft - v14 + 2,
                  uiTop - v15 + 4,
                  uiWidth,
                  uiHeight,
                  &v2->baseclass_0.baseclass_0.baseclass_0,
                  NUMBER,
                  3u,
                  3u,
                  0,
                  0,
                  1);
          v59 = ja + tempNum2;
          (&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[ja + tempNum2] = (NiRefObjectVtbl *)v58;
          v60 = (EditWin **)((char *)v2 + 4 * v59);
          v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
            (NiRefObject *)v58,
            (unsigned int)"0");
          EditWin::SetEnable(*v60, 0);
          ++ja;
          if ( ja >= 4 )
            break;
        }
        i = (NiRefObjectVtbl *)((char *)i + 1);
        tempNum2 += 4;
      }
      while ( tempNum2 < 133 );
      jp = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(jp, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add(jp, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, jp, &v2->baseclass_0.baseclass_0.baseclass_0, 0xCu, 0, 0);
      v61 = jp->m_akHitTester.m_pBase;
      jq = v61->m_pObject->m_uiHeight;
      v62 = v61->m_pObject->m_uiWidth;
      v63 = Font::Get(MAIN_MENU);
      jr = PgWinText::CreateWin(
             uiLeft - v14,
             uiTop - v15 + 1,
             v62,
             jq,
             v63,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
      jr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)jr,
        5u);
      v64 = (int)&jr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v65 = TextData::Get(0x9BF9F4F6u);
      (*(void (__thiscall **)(PgWinText *, char *))v64)(jr, v65);
      ((void (__stdcall *)(_DWORD))jr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      js = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(js, &spNode.m_pObject->baseclass_0, "Btn02Click");
      PgSprData::Add(js, &spNode.m_pObject->baseclass_0, "Btn02Over");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, js, &v2->baseclass_0.baseclass_0.baseclass_0, 0xDu, 0, 0);
      v66 = js->m_akHitTester.m_pBase->m_pObject;
      jt = v66->m_uiHeight;
      v67 = v66->m_uiWidth;
      v68 = Font::Get(MAIN_MENU);
      ju = PgWinText::CreateWin(
             uiLeft - v14,
             uiTop - v15 + 1,
             v67,
             jt,
             v68,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
      ju->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)ju,
        5u);
      v69 = (int)&ju->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v70 = TextData::Get(0x9005EDF9u);
      (*(void (__thiscall **)(PgWinText *, char *))v69)(ju, v70);
      ((void (__stdcall *)(_DWORD))ju->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      jv = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add(jv, &spNode.m_pObject->baseclass_0, "Btn03Click");
      PgSprData::Add(jv, &spNode.m_pObject->baseclass_0, "Btn03Over");
      PgWinBut::CreateWin(uiLeft - v14, uiTop - v15, jv, &v2->baseclass_0.baseclass_0.baseclass_0, 0xEu, 0, 0);
      v71 = jv->m_akHitTester.m_pBase->m_pObject;
      jw = v71->m_uiHeight;
      v72 = v71->m_uiWidth;
      v73 = Font::Get(MAIN_MENU);
      v74 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              v72,
              jw,
              v73,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v74,
        5u);
      v75 = v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v76 = TextData::Get(0x958A94C3u);
      v75[118].__vecDelDtor((NiRefObject *)v74, (unsigned int)v76);
      v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v74,
        0);
      ((void (__thiscall *)(GuildAcademyMoneyRewardWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.40000001,
        0.5);
      LOBYTE(v94) = 0;
      if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spTexProp.m_pObject,
          1u);
      v77 = spNode.m_pObject;
      v94 = -1;
      if ( spNode.m_pObject
        && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v77 )
        v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v77, 1u);
      result = 1;
    }
    else
    {
LABEL_54:
      LOBYTE(v94) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v94 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v94) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v94 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006EDE70) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::OnClickApplyBtn(GuildAcademyMoneyRewardWin *this)
{
  GuildAcademyMoneyRewardWin *v1; // ebx@1
  CClientGuildAcademy *v2; // eax@1
  int v3; // esi@2
  signed int v4; // edi@2
  int v5; // esi@4
  const char *v6; // eax@5
  int v7; // ebx@5
  const char *v8; // eax@5
  int v9; // eax@5
  int v10; // ecx@5
  const char *v11; // eax@5
  int v12; // ST30_4@5
  const char *v13; // eax@5
  int v14; // eax@5
  __int64 v15; // qax@5
  PgNet *v16; // edi@6
  int v17; // edx@7
  signed int v18; // eax@7
  char *v19; // esi@7
  int v20; // ecx@8
  int v21; // ecx@8
  char *v22; // eax@11
  int netcmd; // [sp+8h] [bp-B8h]@5
  PROTO_NC_GUILD_ACADEMY_SET_REWARD_MONEY_REQ kProto; // [sp+Fh] [bp-B1h]@7
  GUILD_ACADEMY_REWARD_MONEY temp[10]; // [sp+10h] [bp-B0h]@7
  __int64 Money[10]; // [sp+6Ch] [bp-54h]@5
  unsigned int v27; // [sp+BCh] [bp-4h]@1
  int v28; // [sp+C0h] [bp+0h]@1

  v27 = (unsigned int)&v28 ^ __security_cookie;
  v1 = this;
  v2 = GuildAcademyTask::GetGuildAcademy();
  if ( CClientGuildAcademy::AmIGuildAcademyMaster(v2) )
  {
    v3 = (int)v1->m_pkMoneyEditWin;
    v4 = 40;
    do
    {
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v3 + 484))(1);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v5 = (int)&v1->m_pkMoneyEditWin[1];
    do
    {
      v6 = (const char *)(*(int (**)(void))(**(_DWORD **)(v5 - 4) + 452))();
      v7 = atoi(v6);
      v8 = (const char *)(*(int (**)(void))(**(_DWORD **)v5 + 452))();
      v9 = atoi(v8);
      v10 = *(_DWORD *)(v5 + 4);
      netcmd = v9;
      v11 = (const char *)(*(int (**)(void))(*(_DWORD *)v10 + 452))();
      v12 = atoi(v11);
      v13 = (const char *)(*(int (**)(void))(**(_DWORD **)(v5 + 8) + 452))();
      v14 = atoi(v13);
      v15 = User::ConvertMoney(v14, v12, netcmd, v7);
      LODWORD(Money[v4]) = v15;
      HIDWORD(Money[v4++]) = HIDWORD(v15);
      v5 += 16;
    }
    while ( v4 < 10 );
    v16 = (PgNet *)g_kNetMgr.m_spWorldMgr.m_pObject;
    if ( g_kNetMgr.m_spWorldMgr.m_pObject )
    {
      LOWORD(netcmd) = -26567;
      PgNet::AddNetMsg(&g_kNetMgr.m_spWorldMgr.m_pObject->baseclass_0, &netcmd, 2);
      kProto.NumOfRewardGood = 10;
      PgNet::AddNetMsg(v16, &kProto, 1);
      temp[0].nCen = Money[0];
      temp[0].nLevel = 10;
      v18 = 1;
      v19 = (char *)&temp[1].nCen;
      do
      {
        LOBYTE(v17) = 4 * v18;
        v19 += 9;
        v20 = v17 + v18 + 11;
        v17 = LODWORD(Money[v18]);
        *(v19 - 10) = v20;
        v21 = HIDWORD(Money[v18]);
        *(_DWORD *)(v19 - 9) = v17;
        *(_DWORD *)(v19 - 5) = v21;
        ++v18;
      }
      while ( v18 < 10 );
      PgNet::SendNetMsg(v16, temp, 90);
    }
  }
  else
  {
    v22 = TextData::Get(0x186E6673u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v22);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006EE040) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::OnClickInitializeBtn(GuildAcademyMoneyRewardWin *this)
{
  GuildAcademyMoneyRewardWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1
  CClientGuildAcademy *v4; // eax@3
  int v5; // eax@4
  unsigned int v6; // eax@5
  void *v7; // eax@7
  void *v8; // edi@7
  char *v9; // eax@8
  MsgBox *v10; // eax@14
  char *v11; // eax@15
  int key; // [sp+Ch] [bp-10h]@4
  char *v13; // [sp+10h] [bp-Ch]@4
  char *v14; // [sp+14h] [bp-8h]@4
  char *v15; // [sp+18h] [bp-4h]@4

  v1 = this;
  v2 = (char *)this->m_pkMoneyEditWin;
  v3 = 40;
  do
  {
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 484))(1);
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = GuildAcademyTask::GetGuildAcademy();
  if ( CClientGuildAcademy::AmIGuildAcademyMaster(v4) )
  {
    v13 = &byte_9788EB;
    v14 = &byte_9788EB;
    v15 = &byte_9788EB;
    key = -1869310780;
    v5 = *(_DWORD *)(ITableBase<TextDataType_TextData>::ms_pkTable + 56);
    if ( v5 )
      v6 = *(_DWORD *)(v5 + 40);
    else
      v6 = 0;
    v7 = bsearch(&key, TextData::ms_apkNode, v6, 0x10u, TextDataNodeComp);
    v8 = v7;
    if ( v7 )
    {
      if ( strcmp(*((const char **)v7 + 2), "None") )
        SoundMgr::PlayGenderVoice(&g_kSoundMgr, *((char **)v8 + 2));
      if ( strcmp(*((const char **)v8 + 3), "None") )
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, *((char **)v8 + 3));
      v9 = (char *)*((_DWORD *)v8 + 1);
    }
    else
    {
      v9 = &byte_9788EB;
    }
    v10 = MsgBox::Modal(MSGBOX_OKCANCEL, v9);
    v1->m_pkMsgBox = v10;
    ((void (__stdcall *)(IDirectMessenger *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  }
  else
  {
    v11 = TextData::Get(0xC56E142Eu);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v11);
  }
}
// A94350: using guessed type int ITableBase_TextDataType_TextData___ms_pkTable;

//----- (006EE1A0) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::OnClickGuildStorageBtn(GuildAcademyMoneyRewardWin *this)
{
  GuildAcademyMoneyRewardWin *v1; // esi@1
  GuildAcademyStorageWin *v2; // eax@1
  CClientGuild *v3; // eax@2
  char *v4; // eax@4
  PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_REQ kProto; // [sp+7h] [bp-1h]@3

  v1 = this;
  v2 = GuildAcademyTask::GetGuildAcademyStorageWin();
  if ( !(unsigned __int8)((int (__thiscall *)(GuildAcademyStorageWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v2) )
  {
    v3 = GuildTask::GetGuild();
    if ( CClientGuild::AmIGuildMember(v3) )
    {
      kProto.nOpenType = 0;
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Du, &kProto, 1);
    }
    else
    {
      v4 = TextData::Get(0x7290F5A0u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v4);
    }
  }
}

//----- (006EE210) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::UpdateAcademyInfo(GuildAcademyMoneyRewardWin *this)
{
  GuildAcademyMoneyRewardWin *v1; // esi@1
  CClientGuildAcademyMember *v2; // ebx@1
  NiRefObjectVtbl *v3; // ST24_4@1
  char *v4; // eax@1
  char *v5; // eax@1
  __int64 v6; // qax@1
  __int64 v7; // qax@1
  __int64 v8; // qax@1
  __int64 v9; // qax@1
  char acStr[128]; // [sp+10h] [bp-84h]@1
  unsigned int v11; // [sp+90h] [bp-4h]@1
  int v12; // [sp+94h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  GuildTask::GetGuild();
  GuildAcademyTask::GetGuildAcademy();
  v2 = GuildAcademyMemberTask::GetGuildAcademyMember();
  ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v3 = v1->m_pkGuildAcademyInfo1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  CClientGuildAcademyMember::GetNumOfOnlineMembers(v2);
  v4 = TextData::Get(0xCF512932u);
  v5 = fs(v4);
  v3[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildAcademyInfo1, (unsigned int)v5);
  ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfo2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v6 = GuildAcademyStorage::GetMoney();
  User::GetGem(v6);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v7 = GuildAcademyStorage::GetMoney();
  User::GetGold(v7);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v8 = GuildAcademyStorage::GetMoney();
  User::GetSilver(v8);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v9 = GuildAcademyStorage::GetMoney();
  User::GetCopper(v9);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
}
// A85C00: using guessed type int __security_cookie;

//----- (006EE3B0) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::OnCommand(GuildAcademyMoneyRewardWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@6

  switch ( wParam )
  {
    case 0xBu:
      GuildAcademyMoneyRewardWin::OnClickWinCloseBtn(this);
      break;
    case 0xCu:
      GuildAcademyMoneyRewardWin::OnClickApplyBtn(this);
      break;
    case 0xDu:
      GuildAcademyMoneyRewardWin::OnClickInitializeBtn(this);
      break;
    case 0xEu:
      GuildAcademyMoneyRewardWin::OnClickGuildStorageBtn(this);
      break;
    case 0xFu:
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v3 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v3, "GuildAcademyGift");
      break;
    default:
      return;
  }
}

//----- (006EE430) --------------------------------------------------------
void __thiscall GuildAcademyMoneyRewardWin::UpdateMeWin(GuildAcademyMoneyRewardWin *this, float fCurTime)
{
  GuildAcademyMoneyRewardWin::UpdateAcademyInfo(this);
}

//----- (006EE440) --------------------------------------------------------
GuildAcademyMoneyRewardWin *__cdecl GuildAcademyMoneyRewardWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildAcademyMoneyRewardWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x218u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildAcademyMoneyRewardWin::GuildAcademyMoneyRewardWin((GuildAcademyMoneyRewardWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildAcademyMoneyRewardWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006EE570) --------------------------------------------------------
void *__thiscall GuildAcademyMoneyRewardWin::_scalar_deleting_destructor_(GuildAcademyMoneyRewardWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyMoneyRewardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyMoneyRewardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CF494: using guessed type int (__stdcall *GuildAcademyMoneyRewardWin___vftable_)(int uiFlags);
// 9CF4B4: using guessed type int (__thiscall *GuildAcademyMoneyRewardWin___vftable_)(void *p, char);

//----- (006EE5B0) --------------------------------------------------------
void __thiscall GuildAcademyNoticeEditorWin::GuildAcademyNoticeEditorWin(GuildAcademyNoticeEditorWin *this)
{
  GuildAcademyNoticeEditorWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyNoticeEditorWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyNoticeEditorWin::_vftable_;
  v1->m_pkEditWin = 0;
}
// 9CF7BC: using guessed type int (__stdcall *GuildAcademyNoticeEditorWin___vftable_)(int uiFlags);
// 9CF7DC: using guessed type int (__thiscall *GuildAcademyNoticeEditorWin___vftable_)(void *p, char);

//----- (006EE5E0) --------------------------------------------------------
void __thiscall GuildAcademyNoticeEditorWin::_GuildAcademyNoticeEditorWin(GuildAcademyNoticeEditorWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyNoticeEditorWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyNoticeEditorWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CF7BC: using guessed type int (__stdcall *GuildAcademyNoticeEditorWin___vftable_)(int uiFlags);
// 9CF7DC: using guessed type int (__thiscall *GuildAcademyNoticeEditorWin___vftable_)(void *p, char);

//----- (006EE600) --------------------------------------------------------
void __thiscall GuildAcademyNoticeEditorWin::OnClose(GuildAcademyNoticeEditorWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (006EE620) --------------------------------------------------------
void __thiscall GuildAcademyNoticeEditorWin::OnShowWin(GuildAcademyNoticeEditorWin *this)
{
  GuildAcademyNoticeEditorWin *v1; // esi@1

  v1 = this;
  ((void (*)(void))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)();
  ((void (*)(void))v1->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (006EE650) --------------------------------------------------------
bool __thiscall GuildAcademyNoticeEditorWin::Create(GuildAcademyNoticeEditorWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyNoticeEditorWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  bool result; // al@9
  int v8; // edi@10
  int v9; // ebx@10
  NiSourceTexture *v10; // eax@10
  PgSprData *v11; // eax@13
  PgSprData *v12; // eax@13
  PgSprData *v13; // eax@13
  PgSprData *v14; // edi@13
  NiNode *v15; // esi@14
  PgFont *v16; // eax@19
  PgWinText *v17; // edi@19
  char *v18; // eax@19
  PgSprData *v19; // edi@19
  NiPointer<PgSprData::PgHitTester> *v20; // edx@19
  unsigned int v21; // edi@19
  PgFont *v22; // eax@19
  PgWinText *v23; // edi@19
  char *v24; // eax@19
  PgSprData *v25; // edi@19
  NiPointer<PgSprData::PgHitTester> *v26; // edx@19
  unsigned int v27; // edi@19
  PgFont *v28; // eax@19
  PgWinText *v29; // edi@19
  NiRefObjectVtbl *v30; // ebx@19
  char *v31; // eax@19
  NiNode *v32; // esi@20
  const char *v33; // [sp+20h] [bp-40h]@11
  int *v34; // [sp+24h] [bp-3Ch]@11
  int *v35; // [sp+28h] [bp-38h]@11
  NiSourceTexture *v36; // [sp+2Ch] [bp-34h]@11
  unsigned int uiWidth; // [sp+40h] [bp-20h]@13
  unsigned int uiHeight; // [sp+44h] [bp-1Ch]@13
  NiPointer<NiNode> spNode; // [sp+48h] [bp-18h]@1
  int uiLeft; // [sp+4Ch] [bp-14h]@4
  int uiTop; // [sp+50h] [bp-10h]@4
  int v42; // [sp+5Ch] [bp-4h]@1
  int iYOff; // [sp+68h] [bp+8h]@10
  NiRefObjectVtbl *iYOffa; // [sp+68h] [bp+8h]@19
  unsigned int iYOffb; // [sp+68h] [bp+8h]@19
  NiRefObjectVtbl *iYOffc; // [sp+68h] [bp+8h]@19
  unsigned int iYOffd; // [sp+68h] [bp+8h]@19

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v42 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildEditor.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildAcademyNoticeEditorWin", 0) )
  {
    v6 = spNode.m_pObject;
    v42 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
    return 0;
  }
  v8 = uiTop;
  v9 = uiLeft;
  iYOff = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v36 = v10;
    v35 = &uiTop;
    v34 = &uiLeft;
    v33 = "Theme";
  }
  else
  {
    v36 = 0;
    v35 = &uiTop;
    v34 = &uiLeft;
    v33 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v33, v34, v35, v36);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop - v8, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v9, uiTop, v13, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v14, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinCloseBut::CreateWin(uiLeft - v9, uiTop - iYOff, v14, &v2->baseclass_0.baseclass_0.baseclass_0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v16 = Font::Get(0);
    v17 = PgWinText::CreateWin(
            uiLeft - v9,
            uiTop,
            uiWidth,
            uiHeight,
            v16,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v17,
      1u);
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
      (NiRefObject *)v17,
      (unsigned int)&Color::m_kDxWinTitleColor);
    iYOffa = v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v18 = TextData::Get(0x3D25058Eu);
    iYOffa[118].__vecDelDtor((NiRefObject *)v17, (unsigned int)v18);
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v17,
      0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddFrndNor", &uiLeft, &uiTop, 0);
    PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "AddFrndClick");
    PgSprData::Add(v19, &spNode.m_pObject->baseclass_0, "AddFrndOver");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v20 = v19->m_akHitTester.m_pBase;
    v21 = v20->m_pObject->m_uiHeight;
    iYOffb = v20->m_pObject->m_uiWidth;
    v22 = Font::Get(0);
    v23 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffb, v21, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v23,
      5u);
    iYOffc = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v24 = TextData::Get(0x4F5F499Fu);
    iYOffc[118].__vecDelDtor((NiRefObject *)v23, (unsigned int)v24);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v23,
      0);
    v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "AddFrndNor01", &uiLeft, &uiTop, 0);
    PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "AddFrndClick01");
    PgSprData::Add(v25, &spNode.m_pObject->baseclass_0, "AddFrndOver01");
    PgWinBut::CreateWin(uiLeft - v9, uiTop, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v26 = v25->m_akHitTester.m_pBase;
    v27 = v26->m_pObject->m_uiHeight;
    iYOffd = v26->m_pObject->m_uiWidth;
    v28 = Font::Get(0);
    v29 = PgWinText::CreateWin(uiLeft - v9, uiTop + 1, iYOffd, v27, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v29,
      5u);
    v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v31 = TextData::Get(0x88A297E1u);
    v30[118].__vecDelDtor((NiRefObject *)v29, (unsigned int)v31);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v2->m_pkEditWin = EditWin::CreateWin(
                        uiLeft,
                        uiTop,
                        uiWidth,
                        uiHeight,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        MULTILINE,
                        0x190u,
                        4u,
                        0,
                        0,
                        1);
    ((void (__thiscall *)(GuildAcademyNoticeEditorWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v42 = -1;
    if ( spNode.m_pObject )
    {
      v32 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v32 )
          v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v32, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v15 = spNode.m_pObject;
    v42 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v15 )
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006EEB60) --------------------------------------------------------
GuildAcademyNoticeEditorWin *__cdecl GuildAcademyNoticeEditorWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildAcademyNoticeEditorWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildAcademyNoticeEditorWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildAcademyNoticeEditorWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildAcademyNoticeEditorWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CF7BC: using guessed type int (__stdcall *GuildAcademyNoticeEditorWin___vftable_)(int uiFlags);
// 9CF7DC: using guessed type int (__thiscall *GuildAcademyNoticeEditorWin___vftable_)(void *p, char);

//----- (006EECA0) --------------------------------------------------------
void __thiscall GuildAcademyNoticeEditorWin::OnCommand(GuildAcademyNoticeEditorWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // edi@1
  int v4; // eax@4
  char *v5; // esi@4
  char v6; // cl@6
  GuildAcademyNotifyTask *v7; // eax@7

  v3 = (PgWin *)this;
  if ( wParam )
  {
    if ( wParam == 1 )
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    v4 = ((int (*)(void))this->m_pkEditWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v5 = (char *)v4;
    if ( v4 && *(_BYTE *)v4 )
    {
      do
        v6 = *(_BYTE *)v4++;
      while ( v6 );
      v7 = ISingletonTask<GuildAcademyNotifyTask>::Run();
      GuildAcademyNotifyTask::SetInfo(v7, v5);
    }
    PgWinMgr::CloseWin(&Pgg_kWinMgr, v3);
  }
}

//----- (006EED40) --------------------------------------------------------
void *__thiscall GuildAcademyNoticeEditorWin::_vector_deleting_destructor_(GuildAcademyNoticeEditorWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyNoticeEditorWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyNoticeEditorWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CF7BC: using guessed type int (__stdcall *GuildAcademyNoticeEditorWin___vftable_)(int uiFlags);
// 9CF7DC: using guessed type int (__thiscall *GuildAcademyNoticeEditorWin___vftable_)(void *p, char);

//----- (006EED80) --------------------------------------------------------
void *__thiscall ISingletonTask<GuildAcademyNotifyTask>::_vector_deleting_destructor_(ISingletonTask<GuildAcademyNotifyTask> *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildAcademyNotifyTask>::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildAcademyNotifyTask>::_vftable_;
  ISingletonTask<GuildAcademyNotifyTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CFA00: using guessed type int (__stdcall *ISingletonTask_GuildAcademyNotifyTask____vftable_)(int uiFlags);
// 9CFA1C: using guessed type int (__thiscall *ISingletonTask_GuildAcademyNotifyTask____vftable_)(void *p, char);
// B67E74: using guessed type int ISingletonTask_GuildAcademyNotifyTask___ms_pkSingletonTask;

//----- (006EEDC0) --------------------------------------------------------
GuildAcademyNotifyTask *__cdecl ISingletonTask<GuildAcademyNotifyTask>::Run()
{
  GuildAcademyNotifyTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildAcademyNotifyTask *)ISingletonTask<GuildAcademyNotifyTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildAcademyNotifyTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildAcademyNotifyTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildAcademyNotifyTask::_vftable_;
      *(_DWORD *)(v2 + 84) = 15;
      *(_DWORD *)(v2 + 80) = 0;
      *(_BYTE *)(v2 + 64) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildAcademyNotifyTask *)v2;
    ISingletonTask<GuildAcademyNotifyTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9CFA34: using guessed type int (__stdcall *GuildAcademyNotifyTask___vftable_)(int uiFlags);
// 9CFA50: using guessed type int (__thiscall *GuildAcademyNotifyTask___vftable_)(void *p, char);
// B67E74: using guessed type int ISingletonTask_GuildAcademyNotifyTask___ms_pkSingletonTask;

//----- (006EEE50) --------------------------------------------------------
void *__thiscall GuildAcademyNotifyTask::_scalar_deleting_destructor_(GuildAcademyNotifyTask *this, unsigned int a2)
{
  GuildAcademyNotifyTask *v2; // esi@1

  v2 = this;
  if ( this->m_kNoticeMsg.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&this->m_kNoticeMsg.baseclass_0.___u0.baseclass_0.dummy[0]);
  v2->m_kNoticeMsg.baseclass_0._Myres = 15;
  v2->m_kNoticeMsg.baseclass_0._Mysize = 0;
  v2->m_kNoticeMsg.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildAcademyNotifyTask>::_vftable_;
  v2->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildAcademyNotifyTask>::_vftable_;
  ISingletonTask<GuildAcademyNotifyTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&v2->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CFA00: using guessed type int (__stdcall *ISingletonTask_GuildAcademyNotifyTask____vftable_)(int uiFlags);
// 9CFA1C: using guessed type int (__thiscall *ISingletonTask_GuildAcademyNotifyTask____vftable_)(void *p, char);
// B67E74: using guessed type int ISingletonTask_GuildAcademyNotifyTask___ms_pkSingletonTask;

//----- (006EEEB0) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::GuildAcademyRankingWin(GuildAcademyRankingWin *this)
{
  GuildAcademyRankingWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkAggregationDate = 0;
  v1->m_pListWinRanking = 0;
  v1->m_pSlideBarRanking = 0;
  v1->m_pSlideBar = 0;
  v1->m_nSortColumn = 0;
  *(_DWORD *)&v1->m_bReverse1 = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyRankingWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyRankingWin::_vftable_;
}
// 9CFD34: using guessed type int (__stdcall *GuildAcademyRankingWin___vftable_)(int uiFlags);
// 9CFD54: using guessed type int (__thiscall *GuildAcademyRankingWin___vftable_)(void *p, char);

//----- (006EEF00) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::_GuildAcademyRankingWin(GuildAcademyRankingWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyRankingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyRankingWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9CFD34: using guessed type int (__stdcall *GuildAcademyRankingWin___vftable_)(int uiFlags);
// 9CFD54: using guessed type int (__thiscall *GuildAcademyRankingWin___vftable_)(void *p, char);

//----- (006EEF20) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnClickWinCloseBtn(GuildAcademyRankingWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (006EEF60) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnSortByTitle01(GuildAcademyRankingWin *this)
{
  GuildAcademyRankingWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinRanking;
  if ( v2 )
  {
    v3 = v1->m_bReverse1 == 0;
    v1->m_nSortColumn = 0;
    v1->m_bReverse1 = v3;
    SlideListWin::Sort(v2, 0, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinRanking);
  }
}

//----- (006EEFA0) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnSortByTitle02(GuildAcademyRankingWin *this)
{
  GuildAcademyRankingWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinRanking;
  if ( v2 )
  {
    v3 = v1->m_bReverse2 == 0;
    v1->m_nSortColumn = 1;
    v1->m_bReverse2 = v3;
    SlideListWin::Sort(v2, 1, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinRanking);
  }
}

//----- (006EEFE0) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnSortByTitle03(GuildAcademyRankingWin *this)
{
  GuildAcademyRankingWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinRanking;
  if ( v2 )
  {
    v3 = v1->m_bReverse3 == 0;
    v1->m_nSortColumn = 2;
    v1->m_bReverse3 = v3;
    SlideListWin::Sort(v2, 2, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinRanking);
  }
}

//----- (006EF020) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnSortByTitle04(GuildAcademyRankingWin *this)
{
  GuildAcademyRankingWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinRanking;
  if ( v2 )
  {
    v3 = v1->m_bReverse4 == 0;
    v1->m_nSortColumn = 3;
    v1->m_bReverse4 = v3;
    SlideListWin::Sort(v2, 3, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinRanking);
  }
}

//----- (006EF060) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnClickThisWeekRankingBtn(GuildAcademyRankingWin *this)
{
  PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_REQ kProto; // [sp+0h] [bp-4h]@1

  kProto.nRoundTime = 0;
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x4Du, &kProto, 4);
}

//----- (006EF090) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnClickLastWeekRankingBtn(GuildAcademyRankingWin *this)
{
  PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_REQ kProto; // [sp+0h] [bp-4h]@1

  kProto.nRoundTime = 1;
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x4Du, &kProto, 4);
}

//----- (006EF0C0) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnClickOKBtn(GuildAcademyRankingWin *this)
{
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
}

//----- (006EF0D0) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnHelpLink(GuildAcademyRankingWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildAcademyRanking");
}

//----- (006EF100) --------------------------------------------------------
tm *__usercall localtime_4<eax>(const int *_Time<eax>)
{
  return _localtime32(_Time);
}

//----- (006EF110) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::UpdateMeWin(GuildAcademyRankingWin *this, float fCurTime)
{
  GuildAcademyRankingWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinRanking, v2->m_pSlideBarRanking);
}

//----- (006EF140) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnSlideBar(GuildAcademyRankingWin *this)
{
  GuildAcademyRankingWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pSlideBarRanking;
  if ( v2 )
  {
    v3 = v1->m_pListWinRanking;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinRanking->m_nViewStartPos = v1->m_pSlideBarRanking->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinRanking);
    }
  }
}

//----- (006EF190) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::AddListItem_DefInfo(GuildAcademyRankingWin *this, GUILD_ACADEMY_EACH_RANKING_DATA *pkData)
{
  GuildAcademyRankingWin *v2; // edi@1
  char *v3; // eax@2
  int v4; // eax@2
  unsigned int v5; // ebx@2
  int v6; // eax@2
  SlideListWin *v7; // ecx@2
  int v8; // ecx@2
  int v9; // eax@2
  int v10; // ecx@2
  int v11; // eax@2
  SlideListWin *v12; // ecx@2
  char *v13; // eax@2
  char acname2[21]; // [sp+8h] [bp-30h]@2
  char acname[17]; // [sp+20h] [bp-18h]@2
  unsigned int v16; // [sp+34h] [bp-4h]@1
  int v17; // [sp+38h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  if ( this->m_pListWinRanking )
  {
    v3 = fs("%d");
    v4 = SlideListWin::AddText(v2->m_pListWinRanking, v3);
    *(_QWORD *)acname = *(_QWORD *)&pkData->sGuildName.n4_name[0];
    v5 = v4;
    v6 = *(_DWORD *)&pkData->sGuildName.n4_name[8];
    *(_DWORD *)&acname[12] = *(_DWORD *)&pkData->sGuildName.n4_name[12];
    v7 = v2->m_pListWinRanking;
    *(_DWORD *)&acname[8] = v6;
    acname[16] = 0;
    SlideListWin::SetText(v7, v5, 1u, acname);
    v8 = *(_DWORD *)&pkData->sName.n5_name[4];
    v9 = *(_DWORD *)&pkData->sName.n5_name[0];
    *(_DWORD *)&acname2[8] = *(_DWORD *)&pkData->sName.n5_name[8];
    *(_DWORD *)&acname2[4] = v8;
    v10 = *(_DWORD *)&pkData->sName.n5_name[16];
    *(_DWORD *)acname2 = v9;
    v11 = *(_DWORD *)&pkData->sName.n5_name[12];
    *(_DWORD *)&acname2[16] = v10;
    v12 = v2->m_pListWinRanking;
    *(_DWORD *)&acname2[12] = v11;
    acname2[20] = 0;
    SlideListWin::SetText(v12, v5, 2u, acname2);
    v13 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinRanking, v5, 3u, v13);
    SlideListWin::SetData(v2->m_pListWinRanking, v5, (unsigned int)pkData);
    SlideListWin::SetFontSize(v2->m_pListWinRanking, v5, 1);
    SlideListWin::SetFontColor(v2->m_pListWinRanking, v5, 200, 255, 200);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006EF2A0) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::ChangeUserName(GuildAcademyRankingWin *this, Name5 *OldName, Name5 *NewName)
{
  GuildAcademyRankingWin *v3; // edi@1
  SlideListWin *v4; // ecx@1
  int v5; // eax@2
  int v6; // edx@2
  int v7; // eax@2
  unsigned int v8; // esi@4
  SlideListWin *v9; // ecx@5
  const char *dwData; // [sp+8h] [bp-38h]@5
  char acNewName[21]; // [sp+Ch] [bp-34h]@2
  char acOldName[21]; // [sp+24h] [bp-1Ch]@2
  unsigned int v13; // [sp+3Ch] [bp-4h]@1
  int v14; // [sp+40h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = this;
  v4 = this->m_pListWinRanking;
  if ( v4 )
  {
    *(_QWORD *)acNewName = *(_QWORD *)&NewName->n5_name[0];
    *(_DWORD *)&acNewName[8] = *(_DWORD *)&NewName->n5_name[8];
    v5 = *(_DWORD *)&NewName->n5_name[16];
    *(_DWORD *)&acNewName[12] = *(_DWORD *)&NewName->n5_name[12];
    *(_DWORD *)&acNewName[16] = v5;
    *(_QWORD *)acOldName = *(_QWORD *)&OldName->n5_name[0];
    *(_DWORD *)&acOldName[8] = *(_DWORD *)&OldName->n5_name[8];
    v6 = *(_DWORD *)&OldName->n5_name[12];
    v7 = *(_DWORD *)&OldName->n5_name[16];
    acNewName[20] = 0;
    *(_DWORD *)&acOldName[12] = v6;
    *(_DWORD *)&acOldName[16] = v7;
    acOldName[20] = 0;
    if ( acOldName[0] )
    {
      if ( acNewName[0] )
      {
        v8 = 0;
        if ( SlideListWin::GetItemSize(v4) )
        {
          do
          {
            v9 = v3->m_pListWinRanking;
            dwData = 0;
            SlideListWin::GetData(v9, v8, (unsigned int *)&dwData);
            if ( dwData )
            {
              if ( !_strcmpi(acOldName, dwData) )
                SlideListWin::SetText(v3->m_pListWinRanking, v8, 2u, acNewName);
            }
            ++v8;
          }
          while ( v8 < SlideListWin::GetItemSize(v3->m_pListWinRanking) );
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006EF380) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::OnCommand(GuildAcademyRankingWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
    case 0x15u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 0xDu:
      GuildAcademyRankingWin::OnSlideBar(this);
      break;
    case 0xEu:
      GuildAcademyRankingWin::OnSortByTitle01(this);
      break;
    case 0xFu:
      GuildAcademyRankingWin::OnSortByTitle02(this);
      break;
    case 0x10u:
      GuildAcademyRankingWin::OnSortByTitle03(this);
      break;
    case 0x11u:
      GuildAcademyRankingWin::OnSortByTitle04(this);
      break;
    case 0x13u:
      GuildAcademyRankingWin::OnClickThisWeekRankingBtn(this);
      break;
    case 0x14u:
      GuildAcademyRankingWin::OnClickLastWeekRankingBtn(this);
      break;
    case 0x16u:
      GuildAcademyRankingWin::OnHelpLink(this);
      break;
    default:
      return;
  }
}

//----- (006EF420) --------------------------------------------------------
void __thiscall GuildAcademyRankingWin::On_Recv_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK(GuildAcademyRankingWin *this, PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK *pkProto)
{
  GuildAcademyRankingWin *v2; // esi@1
  tm *v3; // eax@2
  SlideListWin *v4; // ecx@3
  signed int v5; // ebx@6
  GUILD_ACADEMY_EACH_RANKING_DATA *pkData; // [sp+8h] [bp-28h]@7
  char acDate[32]; // [sp+Ch] [bp-24h]@2
  unsigned int v8; // [sp+2Ch] [bp-4h]@1
  int v9; // [sp+30h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  if ( pkProto->RankData.NumOfEachRankingData )
  {
    v3 = _localtime32(&pkProto->RankData.dAggregationDate);
    strftime(acDate, 0x20u, "%Y-%m-%d", v3);
    ((void (__stdcall *)(_DWORD))v2->m_pkAggregationDate->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acDate);
  }
  v4 = v2->m_pListWinRanking;
  if ( v4 )
  {
    if ( pkProto->PartMask & 1 )
      SlideListWin::RemoveAllList(v4);
    v5 = 0;
    if ( (signed int)pkProto->RankData.NumOfEachRankingData > 0 )
    {
      pkData = (GUILD_ACADEMY_EACH_RANKING_DATA *)&pkProto[1];
      do
      {
        GuildAcademyRankingWin::AddListItem_DefInfo(v2, pkData);
        ++pkData;
        ++v5;
      }
      while ( v5 < (signed int)pkProto->RankData.NumOfEachRankingData );
    }
    SlideListWin::Sort(v2->m_pListWinRanking, 0, 0, 1);
    SlideListWin::AlignText(v2->m_pListWinRanking, 4u);
    SlideListWin::AlignText(v2->m_pListWinRanking, 0, 5u);
    SlideListWin::AlignText(v2->m_pListWinRanking, 1u, 5u);
    SlideListWin::AlignText(v2->m_pListWinRanking, 2u, 5u);
    SlideListWin::AlignText(v2->m_pListWinRanking, 3u, 5u);
    SlideListWin::UpdateViewList(v2->m_pListWinRanking);
    SlideBar::SetSplitCnt(v2->m_pSlideBarRanking, v2->m_pListWinRanking->m_nSlideSplitCnt);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006EF540) --------------------------------------------------------
GuildAcademyRankingWin *__cdecl GuildAcademyRankingWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GuildAcademyRankingWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x170u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GuildAcademyRankingWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GuildAcademyRankingWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
    *((_DWORD *)v2 + 88) = 0;
    *((_DWORD *)v2 + 89) = 0;
    *((_DWORD *)v2 + 90) = 0;
    *((_DWORD *)v2 + 91) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GuildAcademyRankingWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9CFD34: using guessed type int (__stdcall *GuildAcademyRankingWin___vftable_)(int uiFlags);
// 9CFD54: using guessed type int (__thiscall *GuildAcademyRankingWin___vftable_)(void *p, char);

//----- (006EF6A0) --------------------------------------------------------
bool __thiscall GuildAcademyRankingWin::Create(GuildAcademyRankingWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyRankingWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  NiSourceTexture *v18; // eax@25
  PgSprData *v19; // eax@25
  PgFont *v20; // eax@27
  PgWinText *v21; // eax@27
  NiRefObjectVtbl *v22; // edx@27
  char *v23; // eax@27
  PgSprData *v24; // eax@29
  PgSprData *v25; // eax@29
  NiPointer<PgSprData::PgHitTester> *v26; // ecx@29
  void *v27; // eax@29
  PgFont *v28; // eax@29
  PgWinText *v29; // eax@29
  void *v30; // edx@29
  int v31; // ecx@29
  void *v32; // eax@29
  PgFont *v33; // eax@29
  PgWinText *v34; // eax@29
  SLWCreateInfo::Item *v35; // eax@29
  void *v36; // eax@29
  void *v37; // eax@29
  void *v38; // eax@29
  void *v39; // eax@29
  void *v40; // eax@29
  void *v41; // eax@29
  PgSprData *v42; // eax@29
  SlideListWin *v43; // eax@29
  PgSprData *v44; // eax@29
  SlideBar *v45; // eax@29
  int v46; // eax@29
  void *v47; // edx@29
  PgFont *v48; // eax@29
  PgWinText *v49; // eax@29
  NiRefObjectVtbl *v50; // edx@29
  char *v51; // eax@29
  int v52; // ecx@29
  void *v53; // eax@29
  PgFont *v54; // eax@29
  PgWinText *v55; // eax@29
  NiRefObjectVtbl *v56; // edx@29
  char *v57; // eax@29
  int v58; // ecx@29
  void *v59; // eax@29
  PgFont *v60; // eax@29
  PgWinText *v61; // eax@29
  NiRefObjectVtbl *v62; // edx@29
  char *v63; // eax@29
  int v64; // ecx@29
  void *v65; // eax@29
  PgFont *v66; // eax@29
  PgWinText *v67; // eax@29
  NiRefObjectVtbl *v68; // edx@29
  char *v69; // eax@29
  int v70; // ecx@29
  void *v71; // eax@29
  PgFont *v72; // eax@29
  PgWinText *v73; // eax@29
  NiRefObjectVtbl *v74; // edx@29
  char *v75; // eax@29
  int v76; // ecx@29
  void *v77; // eax@29
  PgFont *v78; // eax@29
  PgWinText *v79; // eax@29
  NiRefObjectVtbl *v80; // edx@29
  char *v81; // eax@29
  int v82; // ecx@29
  void *v83; // eax@29
  PgFont *v84; // eax@29
  PgWinText *v85; // edi@29
  NiRefObjectVtbl *v86; // ebx@29
  char *v87; // eax@29
  const char *v88; // [sp+74h] [bp-8Ch]@23
  int *v89; // [sp+78h] [bp-88h]@23
  int *v90; // [sp+7Ch] [bp-84h]@23
  NiSourceTexture *v91; // [sp+80h] [bp-80h]@23
  unsigned int v92; // [sp+84h] [bp-7Ch]@1
  unsigned int uiWidth; // [sp+94h] [bp-6Ch]@25
  unsigned int uiHeight; // [sp+98h] [bp-68h]@25
  SLWCreateInfo kCreateInfo; // [sp+9Ch] [bp-64h]@29
  NiPointer<NiTexturingProperty> spTexProp; // [sp+B8h] [bp-48h]@4
  NiSourceTexture *pkTexture; // [sp+BCh] [bp-44h]@7
  NiSourceTexture *pkTexture8; // [sp+C0h] [bp-40h]@27
  int uiLeft; // [sp+C4h] [bp-3Ch]@15
  int uiTop; // [sp+C8h] [bp-38h]@15
  NiPointer<NiNode> spNode; // [sp+CCh] [bp-34h]@1
  void *pkTextWin; // [sp+D0h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+D4h] [bp-2Ch]@29
  unsigned int v104; // [sp+F0h] [bp-10h]@1
  int v105; // [sp+FCh] [bp-4h]@1
  int v106; // [sp+100h] [bp+0h]@1

  v104 = (unsigned int)&v106 ^ __security_cookie;
  v92 = (unsigned int)&v106 ^ __security_cookie;
  v2 = this;
  pkTextWin = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v105 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildAcademyRanking.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v105) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v105) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v105 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, (PgFrameWork *)pkTextWin, "GuildAcademyRanking", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v91 = v16;
      v90 = &uiTop;
      v89 = &uiLeft;
      v88 = "Theme";
    }
    else
    {
      v91 = 0;
      v90 = &uiTop;
      v89 = &uiLeft;
      v88 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v88, v89, v90, v91);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = MenuTexMgr::GetTexture(0x12u);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v18);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v20 = Font::Get(MAIN_MENU);
      v21 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              uiWidth,
              uiHeight,
              v20,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v21;
      ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v22[122].__vecDelDtor)(v21, 1, v92);
      (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v23 = TextData::Get(0x78ACC6BCu);
      (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v23);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xBu,
        0,
        0);
      pkTexture8 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(
          uiLeft - v14,
          uiTop - v15,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x16u,
          0,
          0);
      }
      v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v25 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "FinalRecruitDate", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase;
      v27 = (void *)v26->m_pObject->m_uiWidth;
      pkTexture8 = (NiSourceTexture *)v26->m_pObject->m_uiHeight;
      pkTextWin = v27;
      v28 = Font::Get(0);
      v29 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v28,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v30 = v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v29;
      pkTexture8 = (NiSourceTexture *)v30;
      TextData::Get(0x13A97372u);
      (*(void (__thiscall **)(void *))&pkTexture8[6].m_bStatic)(pkTextWin);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Date", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v31 = *((_DWORD *)pkTextWin + 9);
      v32 = *(void **)(*(_DWORD *)v31 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v31 + 24);
      pkTextWin = v32;
      v33 = Font::Get(0);
      v34 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v33,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v2->m_pkAggregationDate = v34;
      v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v34,
        5u);
      ((void (__stdcall *)(_DWORD))v2->m_pkAggregationDate->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v105) = 2;
      v35 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v35->nItemType = 1;
      v35->pNode = spNode.m_pObject;
      pkTextWin = v35;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      LOBYTE(v105) = 3;
      pkTextWin = (char *)pkTextWin + 72;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v105) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarClick");
      LOBYTE(v105) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v105) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v105) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v105) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v36 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v36;
      *(_DWORD *)v36 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column01");
      LOBYTE(v105) = 6;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v105) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      v37 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v37;
      *(_DWORD *)v37 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column02");
      LOBYTE(v105) = 7;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v105) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v38 = pkTextWin;
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      *((_BYTE *)v38 + 88) = 1;
      v39 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v39;
      *(_DWORD *)v39 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column03");
      LOBYTE(v105) = 8;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v105) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v40 = pkTextWin;
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      *((_BYTE *)v40 + 88) = 1;
      v41 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v41;
      *(_DWORD *)v41 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column04");
      LOBYTE(v105) = 9;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v105) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v42 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
      v43 = SlideListWin::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              v42,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              0);
      v2->m_pListWinRanking = v43;
      v43->m_uiLClickMsg = 18;
      SlideListWin::UpdateViewList(v2->m_pListWinRanking);
      v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
      v45 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v44,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pSlideBarRanking = v45;
      v45->m_uiClickMsg = 13;
      v2->m_pSlideBarRanking->m_eType = 1;
      SlideBar::SetSplitCnt(v2->m_pSlideBarRanking, v2->m_pListWinRanking->m_nSlideSplitCnt);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xEu,
        0,
        0);
      v46 = **((_DWORD **)pkTextWin + 9);
      v47 = *(void **)(v46 + 20);
      pkTexture8 = *(NiSourceTexture **)(v46 + 24);
      pkTextWin = v47;
      v48 = Font::Get(MAIN_MENU);
      v49 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v48,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v50 = v49->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v49;
      v50[122].__vecDelDtor((NiRefObject *)v49, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v51 = TextData::Get(0x9BAADEE3u);
      (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v51);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xFu,
        0,
        0);
      v52 = *((_DWORD *)pkTextWin + 9);
      v53 = *(void **)(*(_DWORD *)v52 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v52 + 24);
      pkTextWin = v53;
      v54 = Font::Get(MAIN_MENU);
      v55 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v54,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v56 = v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v55;
      v56[122].__vecDelDtor((NiRefObject *)v55, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v57 = TextData::Get(0xD8ECE04Du);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v57);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x10u,
        0,
        0);
      v58 = *((_DWORD *)pkTextWin + 9);
      v59 = *(void **)(*(_DWORD *)v58 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v58 + 24);
      pkTextWin = v59;
      v60 = Font::Get(MAIN_MENU);
      v61 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v60,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v62 = v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v61;
      v62[122].__vecDelDtor((NiRefObject *)v61, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v63 = TextData::Get(0x92B39CE7u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v63);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x11u,
        0,
        0);
      v64 = *((_DWORD *)pkTextWin + 9);
      v65 = *(void **)(*(_DWORD *)v64 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v64 + 24);
      pkTextWin = v65;
      v66 = Font::Get(MAIN_MENU);
      v67 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v66,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v68 = v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v67;
      v68[122].__vecDelDtor((NiRefObject *)v67, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v69 = TextData::Get(0xA4AD92A3u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v69);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x13u,
        0,
        0);
      v70 = *((_DWORD *)pkTextWin + 9);
      v71 = *(void **)(*(_DWORD *)v70 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v70 + 24);
      pkTextWin = v71;
      v72 = Font::Get(MAIN_MENU);
      v73 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v72,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v74 = v73->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v73;
      v74[122].__vecDelDtor((NiRefObject *)v73, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v75 = TextData::Get(0x5592667Cu);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v75);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x14u,
        0,
        0);
      v76 = *((_DWORD *)pkTextWin + 9);
      v77 = *(void **)(*(_DWORD *)v76 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v76 + 24);
      pkTextWin = v77;
      v78 = Font::Get(MAIN_MENU);
      v79 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v78,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v80 = v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v79;
      v80[122].__vecDelDtor((NiRefObject *)v79, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v81 = TextData::Get(0x4D937075u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v81);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x15u,
        0,
        0);
      v82 = *((_DWORD *)pkTextWin + 9);
      v83 = *(void **)(*(_DWORD *)v82 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v82 + 24);
      pkTexture = (NiSourceTexture *)v83;
      v84 = Font::Get(MAIN_MENU);
      v85 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTexture,
              (unsigned int)pkTexture8,
              v84,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v85,
        5u);
      v86 = v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v87 = TextData::Get(0x4F5F499Fu);
      v86[118].__vecDelDtor((NiRefObject *)v85, (unsigned int)v87);
      v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v85,
        0);
      ((void (__thiscall *)(GuildAcademyRankingWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.40000001,
        0.5);
      LOBYTE(v105) = 1;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      LOBYTE(v105) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v105 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v105) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v105 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v105) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v105 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006F0530) --------------------------------------------------------
void *__thiscall GuildAcademyRankingWin::_scalar_deleting_destructor_(GuildAcademyRankingWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyRankingWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyRankingWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9CFD34: using guessed type int (__stdcall *GuildAcademyRankingWin___vftable_)(int uiFlags);
// 9CFD54: using guessed type int (__thiscall *GuildAcademyRankingWin___vftable_)(void *p, char);

//----- (006F0580) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnSortByTitle01(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v3 = v1->m_bReverse1 == 0;
    v1->m_nSortColumn = 0;
    v1->m_bReverse1 = v3;
    SlideListWin::Sort(v2, 0, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (006F05C0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnSortByTitle02(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v3 = v1->m_bReverse2 == 0;
    v1->m_nSortColumn = 1;
    v1->m_bReverse2 = v3;
    SlideListWin::Sort(v2, 1, v3, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (006F0600) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnSortByTitle03(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v3 = v1->m_bReverse3 == 0;
    v1->m_nSortColumn = 2;
    v1->m_bReverse3 = v3;
    SlideListWin::Sort(v2, 2, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (006F0640) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnSortByTitle04(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v3 = v1->m_bReverse4 == 0;
    v1->m_nSortColumn = 3;
    v1->m_bReverse4 = v3;
    SlideListWin::Sort(v2, 3, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (006F0680) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnSortByTitle05(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinGuild;
  if ( v2 )
  {
    v3 = v1->m_bReverse5 == 0;
    v1->m_nSortColumn = 4;
    v1->m_bReverse5 = v3;
    SlideListWin::Sort(v2, 4, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinGuild);
  }
}

//----- (006F06C0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnClickRankingBtn(GuildAcademySelectWin *this)
{
  PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_REQ pkProto; // [sp+0h] [bp-4h]@1

  pkProto.nRoundTime = 0;
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x4Du, &pkProto, 4);
}

//----- (006F0720) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnHelpLink(GuildAcademySelectWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildAcademySelect");
}

//----- (006F0750) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::ProcessMeInput(GuildAcademySelectWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (006F07D0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnSlideBar(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  SlideBar *v2; // ecx@1
  SlideListWin *v3; // eax@2

  v1 = this;
  v2 = this->m_pkSlideBarGuildList;
  if ( v2 )
  {
    v3 = v1->m_pListWinGuild;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v2, v3->m_nSlideSplitCnt);
      v1->m_pListWinGuild->m_nViewStartPos = v1->m_pkSlideBarGuildList->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pListWinGuild);
    }
  }
}

//----- (006F0820) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::AddListItem_DefInfo(GuildAcademySelectWin *this, SHINE_GUILD_ACADEMY_LIST *pkData)
{
  GuildAcademySelectWin *v2; // edi@1
  SlideListWin *v3; // ecx@1
  int v4; // edx@2
  int v5; // eax@2
  int v6; // ecx@2
  int v7; // edx@2
  unsigned int v8; // ebx@2
  int v9; // ecx@2
  int v10; // edx@2
  SlideListWin *v11; // ecx@2
  char *v12; // eax@2
  char *v13; // eax@2
  char *v14; // eax@2
  char acname2[21]; // [sp+8h] [bp-30h]@2
  char acname[17]; // [sp+20h] [bp-18h]@2
  unsigned int v17; // [sp+34h] [bp-4h]@1
  int v18; // [sp+38h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinGuild;
  if ( v3 )
  {
    v4 = *(_DWORD *)&pkData->GuildName.n4_name[4];
    *(_DWORD *)acname = *(_DWORD *)&pkData->GuildName.n4_name[0];
    *(_DWORD *)&acname[8] = *(_DWORD *)&pkData->GuildName.n4_name[8];
    *(_DWORD *)&acname[4] = v4;
    *(_DWORD *)&acname[12] = *(_DWORD *)&pkData->GuildName.n4_name[12];
    acname[16] = 0;
    v5 = SlideListWin::AddText(v3, acname);
    v6 = *(_DWORD *)&pkData->GuildMasterName.n5_name[0];
    v7 = *(_DWORD *)&pkData->GuildMasterName.n5_name[4];
    v8 = v5;
    *(_DWORD *)&acname2[8] = *(_DWORD *)&pkData->GuildMasterName.n5_name[8];
    *(_DWORD *)acname2 = v6;
    v9 = *(_DWORD *)&pkData->GuildMasterName.n5_name[12];
    *(_DWORD *)&acname2[4] = v7;
    v10 = *(_DWORD *)&pkData->GuildMasterName.n5_name[16];
    *(_DWORD *)&acname2[12] = v9;
    v11 = v2->m_pListWinGuild;
    *(_DWORD *)&acname2[16] = v10;
    acname2[20] = 0;
    SlideListWin::SetText(v11, v5, 1u, acname2);
    v12 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuild, v8, 2u, v12);
    v13 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuild, v8, 3u, v13);
    v14 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinGuild, v8, 4u, v14);
    SlideListWin::SetData(v2->m_pListWinGuild, v8, (unsigned int)pkData);
    SlideListWin::SetFontSize(v2->m_pListWinGuild, v8, 1);
    SlideListWin::SetFontColor(v2->m_pListWinGuild, v8, 200, 200, 255);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F0950) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::DirectMessage(GuildAcademySelectWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildAcademySelectWin *v4; // edi@1
  float v5; // eax@2
  IDirectMessenger *v6; // eax@3
  SlideListWin *v7; // ecx@7
  int v8; // eax@7
  char *v9; // eax@7
  PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_REQ kProto; // [sp+4h] [bp-14h]@7
  unsigned int v11; // [sp+14h] [bp-4h]@1
  int v12; // [sp+18h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 27 )
  {
    v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][2];
    if ( LODWORD(v5) )
      v6 = (IDirectMessenger *)(LODWORD(v5) + 232);
    else
      v6 = 0;
    if ( pkFrom == v6 )
    {
      if ( !*(_DWORD *)pvBody )
      {
        v7 = (SlideListWin *)LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]);
        *(_QWORD *)&kProto.sGuildName.n4_name[8] = 0i64;
        *(_QWORD *)&kProto.sGuildName.n4_name[0] = 0i64;
        v8 = SlideListWin::GetCurSelIndex(v7);
        v9 = (char *)SlideListWin::GetText(
                       LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
                       v8,
                       0);
        *(_QWORD *)&kProto.sGuildName.n4_name[8] = 0i64;
        *(_QWORD *)&kProto.sGuildName.n4_name[0] = 0i64;
        strncpy(kProto.sGuildName.n4_name, v9, 0x10u);
        LOBYTE(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][2]) = 1;
        ISingletonTask<GuildAcademyJoinReqTask>::Run();
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x11u, &kProto, 16);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F0A00) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnClickJoinBtn(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  char *v2; // eax@2
  int v3; // esi@2
  char *v4; // edi@2
  CClientGuildAcademy *v5; // eax@6
  int v6; // esi@7
  char *v7; // edi@7
  int v8; // esi@12
  char *v9; // edi@12
  int v10; // eax@16
  char *v11; // eax@16
  char *v12; // eax@16
  MsgBox *v13; // eax@16

  v1 = this;
  if ( User::Lv(&g_kUser) < 0x3C )
  {
    v5 = GuildAcademyTask::GetGuildAcademy();
    if ( CClientGuildAcademy::AmIGuildAcademyMember(v5) )
    {
      v6 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v7 = TextData::Get(0xFA2A187Fu);
      if ( *(_DWORD *)(v6 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
        if ( *(_DWORD *)(v6 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
    }
    else
    {
      if ( SlideListWin::GetCurSelIndex(v1->m_pListWinGuild) >= 0 )
      {
        v10 = SlideListWin::GetCurSelIndex(v1->m_pListWinGuild);
        SlideListWin::GetText(v1->m_pListWinGuild, v10, 0);
        v11 = TextData::Get(0x7398D1CBu);
        v12 = fs(v11);
        v13 = MsgBox::Modal(MSGBOX_OKCANCEL, v12);
        v1->m_pkMsgBox = v13;
        ((void (__stdcall *)(_DWORD))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
      }
      else
      {
        v8 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
        v9 = TextData::Get(0x919486CCu);
        if ( *(_DWORD *)(v8 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 4))(25, v9, v8);
          if ( *(_DWORD *)(v8 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 20))(25, v9, v8);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 20))(v8, 25, v9, v8);
      }
    }
  }
  else
  {
    v2 = TextData::Get(0x6E82B0C0u);
    v3 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v4 = fs(v2);
    if ( *(_DWORD *)(v3 + 4) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v3 + 4) + 4))(25, v4, v3);
      if ( *(_DWORD *)(v3 + 4) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v3 + 4) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
}

//----- (006F0B80) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnClickHallOfFameBtn(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  int v3; // esi@2
  char *v4; // edi@2
  int v5; // eax@6
  char *v6; // eax@6
  PROTO_NC_GUILD_ACADEMY_GET_GRADUATE_REQ Proto; // [sp+8h] [bp-14h]@1
  unsigned int v8; // [sp+18h] [bp-4h]@1
  int v9; // [sp+1Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pListWinGuild;
  *(_QWORD *)&Proto.sGuildName.n4_name[8] = 0i64;
  *(_QWORD *)&Proto.sGuildName.n4_name[0] = 0i64;
  if ( SlideListWin::GetCurSelIndex(v2) >= 0 )
  {
    v5 = SlideListWin::GetCurSelIndex(v1->m_pListWinGuild);
    v6 = (char *)SlideListWin::GetText(v1->m_pListWinGuild, v5, 0);
    *(_QWORD *)&Proto.sGuildName.n4_name[8] = 0i64;
    *(_QWORD *)&Proto.sGuildName.n4_name[0] = 0i64;
    strncpy(Proto.sGuildName.n4_name, v6, 0x10u);
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x49u, &Proto, 16);
  }
  else
  {
    v3 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v4 = TextData::Get(0x919486CCu);
    if ( *(_DWORD *)(v3 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 4) + 4))(25, v4, v3);
      if ( *(_DWORD *)(v3 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 4) + 20))(25, v4, v3);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F0C70) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::On_Recv_NC_GUILD_ACADEMY_LIST_ACK(GuildAcademySelectWin *this, PROTO_NC_GUILD_ACADEMY_LIST_ACK *pkProto)
{
  GuildAcademySelectWin *v2; // edi@1
  SlideListWin *v3; // ecx@1
  unsigned int v4; // eax@4
  char *v5; // esi@5
  SlideListWin *v6; // ecx@6
  int v7; // edx@7
  int v8; // eax@7
  int v9; // ecx@7
  int v10; // edx@7
  unsigned int v11; // ebx@7
  int v12; // ecx@7
  int v13; // edx@7
  SlideListWin *v14; // ecx@7
  char *v15; // eax@7
  char *v16; // eax@7
  char *v17; // eax@7
  int i; // [sp+8h] [bp-34h]@4
  int v19; // [sp+Ch] [bp-30h]@7
  int v20; // [sp+10h] [bp-2Ch]@7
  int v21; // [sp+14h] [bp-28h]@7
  int v22; // [sp+18h] [bp-24h]@7
  int v23; // [sp+1Ch] [bp-20h]@7
  char v24; // [sp+20h] [bp-1Ch]@7
  char szText[4]; // [sp+24h] [bp-18h]@7
  int v26; // [sp+28h] [bp-14h]@7
  int v27; // [sp+2Ch] [bp-10h]@7
  int v28; // [sp+30h] [bp-Ch]@7
  char v29; // [sp+34h] [bp-8h]@7
  unsigned int v30; // [sp+38h] [bp-4h]@1
  int v31; // [sp+3Ch] [bp+0h]@1

  v30 = (unsigned int)&v31 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinGuild;
  if ( v3 )
  {
    if ( pkProto->PartMask & 1 )
      SlideListWin::RemoveAllList(v3);
    v4 = pkProto->NumOfGuildAcademy;
    v2->m_TotalNumOfGuild = v4;
    i = 0;
    if ( (signed int)v4 > 0 )
    {
      v5 = &pkProto[3].PartMask;
      do
      {
        v6 = v2->m_pListWinGuild;
        if ( v6 )
        {
          v7 = *((_DWORD *)v5 - 5);
          *(_DWORD *)szText = *((_DWORD *)v5 - 6);
          v27 = *((_DWORD *)v5 - 4);
          v26 = v7;
          v28 = *((_DWORD *)v5 - 3);
          v29 = 0;
          v8 = SlideListWin::AddText(v6, szText);
          v9 = *((_DWORD *)v5 - 2);
          v10 = *((_DWORD *)v5 - 1);
          v11 = v8;
          v21 = *(_DWORD *)v5;
          v19 = v9;
          v12 = *((_DWORD *)v5 + 1);
          v20 = v10;
          v13 = *((_DWORD *)v5 + 2);
          v22 = v12;
          v14 = v2->m_pListWinGuild;
          v23 = v13;
          v24 = 0;
          SlideListWin::SetText(v14, v8, 1u, (const char *)&v19);
          v15 = fs("%d");
          SlideListWin::SetText(v2->m_pListWinGuild, v11, 2u, v15);
          v16 = fs("%d");
          SlideListWin::SetText(v2->m_pListWinGuild, v11, 3u, v16);
          v17 = fs("%d");
          SlideListWin::SetText(v2->m_pListWinGuild, v11, 4u, v17);
          SlideListWin::SetData(v2->m_pListWinGuild, v11, (unsigned int)(v5 - 24));
          SlideListWin::SetFontSize(v2->m_pListWinGuild, v11, 1);
          SlideListWin::SetFontColor(v2->m_pListWinGuild, v11, 200, 200, 255);
        }
        v5 += 42;
        ++i;
      }
      while ( i < v2->m_TotalNumOfGuild );
    }
    SlideListWin::Sort(v2->m_pListWinGuild, 3, 1, 1);
    SlideListWin::AlignText(v2->m_pListWinGuild, 4u);
    SlideListWin::AlignText(v2->m_pListWinGuild, 0, 5u);
    SlideListWin::AlignText(v2->m_pListWinGuild, 1u, 5u);
    SlideListWin::AlignText(v2->m_pListWinGuild, 2u, 5u);
    SlideListWin::AlignText(v2->m_pListWinGuild, 3u, 5u);
    SlideListWin::AlignText(v2->m_pListWinGuild, 4u, 5u);
    SlideListWin::UpdateViewList(v2->m_pListWinGuild);
    SlideBar::SetSplitCnt(v2->m_pkSlideBarGuildList, v2->m_pListWinGuild->m_nSlideSplitCnt);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F0E80) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::UpdateTimer(GuildAcademySelectWin *this, float fTime)
{
  GuildAcademySelectWin *v2; // esi@1
  double v3; // st7@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v4; // [sp-1Ch] [bp-24h]@2
  int v5; // [sp-Ch] [bp-14h]@2
  signed int v6; // [sp-8h] [bp-10h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // [sp+4h] [bp-4h]@2
  float fDeltaTime; // [sp+10h] [bp+8h]@2

  v2 = this;
  if ( this->m_bTimer != 1 )
  {
    v3 = fTime - this->m_fOldTime;
    v7 = &v4;
    v6 = 15;
    fDeltaTime = v3;
    v5 = 0;
    v4.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v4,
      "SearchAcademy_ListCoolTime",
      0x1Au);
    if ( (double)CSingleDataMap::GetValue(&g_kSingleDataMap, v4) <= fDeltaTime )
      v2->m_bTimer = 1;
  }
}

//----- (006F0EF0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::UpdateMeWin(GuildAcademySelectWin *this, float fCurTime)
{
  GuildAcademySelectWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinGuild, v2->m_pkSlideBarGuildList);
  GuildAcademySelectWin::UpdateTimer(v2, fCurTime);
}

//----- (006F0F40) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::AddGuildInfo(GuildAcademySelectWin *this, GuildAcademySelectWin::GuildInfo *kGuildInfo)
{
  GuildAcademySelectWin *v2; // ebx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@1
  int v4; // edx@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // eax@5
  int v6; // edx@9
  unsigned int v7; // ST10_4@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v8; // eax@9
  int v9; // ecx@13
  unsigned int v10; // ST0C_4@13
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v11; // eax@13
  int v12; // eax@17
  unsigned int v13; // ST08_4@17
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // eax@17
  int v15; // edx@21
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-168h]@17
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > osstream; // [sp+98h] [bp-D0h]@1
  int iLastIndex; // [sp+130h] [bp-38h]@3
  GuildAcademySelectWin *v19; // [sp+134h] [bp-34h]@1
  int v20; // [sp+138h] [bp-30h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+13Ch] [bp-2Ch]@1
  unsigned int v22; // [sp+158h] [bp-10h]@1
  int v23; // [sp+164h] [bp-4h]@1
  int v24; // [sp+168h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v2 = this;
  v19 = this;
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v23 = 0;
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(
    &osstream.___u0.baseclass_0,
    &kGuildInfo->m_strGuildName);
  v3 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v23) = 1;
  if ( v3->baseclass_0._Myres >= 0x10 )
    v3 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
  iLastIndex = SlideListWin::AddText(v2->m_pListWinGuild, v3->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v4 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v20 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v4] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v23 = 2;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v23 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v23 = 3;
  std::operator<<<char_std::char_traits<char>_std::allocator<char>>(
    &osstream.___u0.baseclass_0,
    &kGuildInfo->m_MasterName);
  v5 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v23) = 4;
  if ( v5->baseclass_0._Myres >= 0x10 )
    v5 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v19->m_pListWinGuild, iLastIndex, 1u, v5->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v6 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v20 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v6] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v23 = 5;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v23 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v7 = kGuildInfo->m_unGuildMember;
  v23 = 6;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v7);
  v8 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v23) = 7;
  if ( v8->baseclass_0._Myres >= 0x10 )
    v8 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v8->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v19->m_pListWinGuild, iLastIndex, 2u, v8->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v9 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v20 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v9] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v23 = 8;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v23 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &osstream,
    2);
  v10 = kGuildInfo->m_unGuildAcademy;
  v23 = 9;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&osstream.___u0.baseclass_0, v10);
  v11 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&osstream, &result);
  LOBYTE(v23) = 10;
  if ( v11->baseclass_0._Myres >= 0x10 )
    v11 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v11->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v19->m_pListWinGuild, iLastIndex, 3u, v11->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v12 = *(_DWORD *)(*(_DWORD *)&osstream + 4);
  v20 = (int)osstream.gap50;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[v12] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v23 = 11;
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v23 = -1;
  *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
  std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>(
    &thisa,
    2);
  v13 = kGuildInfo->m_unGuildGraduates;
  v23 = 12;
  std::basic_ostream<char_std::char_traits<char>>::operator<<(&thisa.___u0.baseclass_0, v13);
  v14 = std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::str(&thisa, &result);
  LOBYTE(v23) = 13;
  if ( v14->baseclass_0._Myres >= 0x10 )
    v14 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v14->baseclass_0.___u0.baseclass_0.dummy[0];
  SlideListWin::SetText(v19->m_pListWinGuild, iLastIndex, 4u, v14->baseclass_0.___u0.baseclass_0.dummy);
  if ( result.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&result);
  v15 = *(_DWORD *)(*(_DWORD *)&thisa + 4);
  result.baseclass_0._Myres = 15;
  result.baseclass_0._Mysize = 0;
  result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v20 = (int)thisa.gap50;
  *(_DWORD *)&thisa.___u0.baseclass_0.dummy[v15] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  v23 = 14;
  *(_DWORD *)&thisa.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
  std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_Tidy((std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > *)&thisa.___u0.baseclass_0.dummy[4]);
  std::basic_streambuf<char_std::char_traits<char>>::_basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&thisa.___u0.baseclass_0.dummy[4]);
  *(_DWORD *)&thisa.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&thisa + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
  v23 = -1;
  *(_DWORD *)&thisa.gap50[0] = &std::ios_base::_vftable_;
  std::ios_base::_Ios_base_dtor((std::ios_base *)thisa.gap50);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// A85C00: using guessed type int __security_cookie;

//----- (006F13D0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::GuildAcademySelectWin(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademySelectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademySelectWin::_vftable_;
  v1->m_spEdit.m_pObject = 0;
  *(_DWORD *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuildInfo.baseclass_0._Mylast = 0;
  v1->m_vecGuildInfo.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSearch.baseclass_0._Mylast = 0;
  v1->m_vecSearch.baseclass_0._Myend = 0;
  v1->m_nSortColumn = 0;
  v1->m_pkSlideBarGuildList = 0;
  v1->m_pkSlideBar = 0;
  v1->m_pListWinGuild = 0;
  v1->m_TotalNumOfGuild = 0;
  *(_DWORD *)&v1->m_bFromReq = 0;
  *(_WORD *)&v1->m_bReverse4 = 0;
  *(_DWORD *)&v1->m_acSearchName[0] = 0;
  *(_DWORD *)&v1->m_acSearchName[4] = 0;
  *(_DWORD *)&v1->m_acSearchName[8] = 0;
  *(_DWORD *)&v1->m_acSearchName[12] = 0;
  *(_DWORD *)&v1->m_acSearchName[16] = 0;
  *(_DWORD *)&v1->m_acSearchName[20] = 0;
  *(_DWORD *)&v1->m_acSearchName[24] = 0;
  *(_DWORD *)&v1->m_acSearchName[28] = 0;
  v1->m_fOldTime = 0.0;
  v1->m_bTimer = 1;
}
// 9D02D4: using guessed type int (__stdcall *GuildAcademySelectWin___vftable_)(int uiFlags);
// 9D02F4: using guessed type int (__thiscall *GuildAcademySelectWin___vftable_)(void *p, char);

//----- (006F1490) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::_GuildAcademySelectWin(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  GuildListWin::GuildInfo *v2; // eax@1
  GuildListWin::GuildInfo *v3; // eax@3
  EditWin *v4; // edi@5
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+0h] [bp-10h]@1

  v1 = this;
  __formal.dummy[0] = (char)this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademySelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademySelectWin::_vftable_;
  v2 = *(GuildListWin::GuildInfo **)&this->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v2 )
  {
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v2,
      (GuildListWin::GuildInfo *)this->m_vecSearch.baseclass_0._Mylast,
      (std::allocator<GuildListWin::GuildInfo> *)&this->m_vecSearch.baseclass_0._Alval,
      (std::_Nonscalar_ptr_iterator_tag)this);
    operator delete(*(void **)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecSearch.baseclass_0._Mylast = 0;
  v1->m_vecSearch.baseclass_0._Myend = 0;
  v3 = *(GuildListWin::GuildInfo **)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v3 )
  {
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v3,
      (GuildListWin::GuildInfo *)v1->m_vecGuildInfo.baseclass_0._Mylast,
      (std::allocator<GuildListWin::GuildInfo> *)&v1->m_vecGuildInfo.baseclass_0._Alval,
      __formal);
    operator delete(*(void **)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0]);
  }
  *(_DWORD *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_vecGuildInfo.baseclass_0._Mylast = 0;
  v1->m_vecGuildInfo.baseclass_0._Myend = 0;
  v4 = v1->m_spEdit.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D02D4: using guessed type int (__stdcall *GuildAcademySelectWin___vftable_)(int uiFlags);
// 9D02F4: using guessed type int (__thiscall *GuildAcademySelectWin___vftable_)(void *p, char);

//----- (006F15A0) --------------------------------------------------------
GuildAcademySelectWin *__cdecl GuildAcademySelectWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildAcademySelectWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1C8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildAcademySelectWin::GuildAcademySelectWin((GuildAcademySelectWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildAcademySelectWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006F16D0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::ClearAcademyList(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1
  GuildAcademySelectWin::GuildInfo *v2; // eax@1
  GuildListWin::GuildInfo *v3; // ecx@1
  GuildListWin::GuildInfo *v4; // edi@2
  GuildListWin::GuildInfo *v5; // eax@3
  GuildListWin::GuildInfo *v6; // ecx@3
  GuildListWin::GuildInfo *v7; // edi@4
  SlideListWin *v8; // edi@5
  std::_Nonscalar_ptr_iterator_tag __formal; // [sp+8h] [bp-4h]@0

  v1 = this;
  v2 = this->m_vecGuildInfo.baseclass_0._Mylast;
  v3 = *(GuildListWin::GuildInfo **)&this->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (GuildAcademySelectWin::GuildInfo *)v3 != v2 )
  {
    v4 = std::_Move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo__>(
           (GuildListWin::GuildInfo *)v2,
           (GuildListWin::GuildInfo *)v2,
           v3,
           __formal);
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v4,
      (GuildListWin::GuildInfo *)v1->m_vecGuildInfo.baseclass_0._Mylast,
      (std::allocator<GuildListWin::GuildInfo> *)&v1->m_vecGuildInfo.baseclass_0._Alval,
      __formal);
    v1->m_vecGuildInfo.baseclass_0._Mylast = (GuildAcademySelectWin::GuildInfo *)v4;
  }
  v5 = (GuildListWin::GuildInfo *)v1->m_vecSearch.baseclass_0._Mylast;
  v6 = *(GuildListWin::GuildInfo **)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v6 != v5 )
  {
    v7 = std::_Move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo__>(v5, v5, v6, __formal);
    std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
      v7,
      (GuildListWin::GuildInfo *)v1->m_vecSearch.baseclass_0._Mylast,
      (std::allocator<GuildListWin::GuildInfo> *)&v1->m_vecSearch.baseclass_0._Alval,
      __formal);
    v1->m_vecSearch.baseclass_0._Mylast = (GuildAcademySelectWin::GuildInfo *)v7;
  }
  SlideListWin::RemoveAllList(v1->m_pListWinGuild);
  v1->m_pListWinGuild->m_nSlideSplitCnt = 0;
  v8 = v1->m_pListWinGuild;
  v8->m_fCurSlideBtnPos = 0.0;
  v8->m_nViewStartPos = (signed int)((double)v8->m_nSlideSplitCnt * 0.0);
  v1->m_pListWinGuild->m_nViewStartPos = 0;
  SlideBar::SetSplitCnt(v1->m_pkSlideBarGuildList, 0);
  *(_DWORD *)&v1->m_acSearchName[0] = 0;
  *(_DWORD *)&v1->m_acSearchName[4] = 0;
  *(_DWORD *)&v1->m_acSearchName[8] = 0;
  *(_DWORD *)&v1->m_acSearchName[12] = 0;
  *(_DWORD *)&v1->m_acSearchName[16] = 0;
  *(_DWORD *)&v1->m_acSearchName[20] = 0;
  *(_DWORD *)&v1->m_acSearchName[24] = 0;
  *(_DWORD *)&v1->m_acSearchName[28] = 0;
  ((void (__stdcall *)(_DWORD))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9CFF96);
}

//----- (006F1800) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnClickWinCloseBtn(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GuildAcademySelectWin::ClearAcademyList(v1);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (006F1840) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::ShowAll(GuildAcademySelectWin *this)
{
  PgFrameWork *v1; // esi@2
  char *v2; // eax@3

  if ( this->m_bTimer )
  {
    this->m_bTimer = 0;
    this->m_fOldTime = Timer::ms_fCurTime;
    GuildAcademySelectWin::ClearAcademyList(this);
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
  }
  else
  {
    v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v1 )
    {
      v2 = TextData3::Get(0x32D6F69u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v1, v2);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (006F18B0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::SetGuildList(GuildAcademySelectWin *this, SHINE_GUILD_ACADEMY_LIST *pkList)
{
  GuildAcademySelectWin *v2; // edi@1
  int v3; // edx@2
  int v4; // ecx@2
  int v5; // eax@2
  char v6; // cl@3
  int v7; // edx@4
  int v8; // ecx@4
  int v9; // eax@4
  int v10; // edx@4
  int v11; // eax@4
  char v12; // cl@5
  unsigned int v13; // eax@6
  unsigned int v14; // ecx@6
  GuildAcademySelectWin::GuildInfo kGuildInfo; // [sp+0h] [bp-80h]@1
  char acName[17]; // [sp+44h] [bp-3Ch]@2
  char acName2[17]; // [sp+58h] [bp-28h]@4
  char v18; // [sp+6Ch] [bp-14h]@4
  unsigned int v19; // [sp+70h] [bp-10h]@1
  int v20; // [sp+7Ch] [bp-4h]@1
  int v21; // [sp+80h] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  kGuildInfo.m_strGuildName.baseclass_0._Myres = 15;
  kGuildInfo.m_strGuildName.baseclass_0._Mysize = 0;
  kGuildInfo.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kGuildInfo.m_MasterName.baseclass_0._Myres = 15;
  kGuildInfo.m_MasterName.baseclass_0._Mysize = 0;
  kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v20 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &kGuildInfo.m_strGuildName,
    &byte_9788EB,
    0);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&kGuildInfo.m_MasterName, &byte_9788EB, 0);
  if ( pkList )
  {
    v3 = *(_DWORD *)&pkList->GuildName.n4_name[8];
    v4 = *(_DWORD *)&pkList->GuildName.n4_name[4];
    *(_DWORD *)acName = *(_DWORD *)&pkList->GuildName.n4_name[0];
    *(_DWORD *)&acName[12] = *(_DWORD *)&pkList->GuildName.n4_name[12];
    v5 = (int)acName;
    *(_DWORD *)&acName[8] = v3;
    *(_DWORD *)&acName[4] = v4;
    acName[16] = 0;
    do
      v6 = *(_BYTE *)v5++;
    while ( v6 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kGuildInfo.m_strGuildName,
      acName,
      v5 - (_DWORD)&acName[1]);
    v7 = *(_DWORD *)&pkList->GuildMasterName.n5_name[0];
    v8 = *(_DWORD *)&pkList->GuildMasterName.n5_name[8];
    *(_DWORD *)&acName2[4] = *(_DWORD *)&pkList->GuildMasterName.n5_name[4];
    v9 = *(_DWORD *)&pkList->GuildMasterName.n5_name[16];
    *(_DWORD *)acName2 = v7;
    v10 = *(_DWORD *)&pkList->GuildMasterName.n5_name[12];
    *(_DWORD *)&acName2[16] = v9;
    v11 = (int)acName2;
    *(_DWORD *)&acName2[12] = v10;
    *(_DWORD *)&acName2[8] = v8;
    v18 = 0;
    acName2[16] = 0;
    do
      v12 = *(_BYTE *)v11++;
    while ( v12 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &kGuildInfo.m_MasterName,
      acName2,
      v11 - (_DWORD)&acName2[1]);
    v13 = pkList->NumOfAcademyMembers;
    v14 = pkList->NumOfGraduate;
    kGuildInfo.m_unGuildMember = pkList->NumOfGuildMembers;
    kGuildInfo.m_unGuildAcademy = v13;
    kGuildInfo.m_unGuildGraduates = v14;
  }
  std::vector<GuildAcademySelectWin::GuildInfo_std::allocator<GuildAcademySelectWin::GuildInfo>>::push_back(
    (std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *)&v2->m_vecGuildInfo,
    (GuildListWin::GuildInfo *)&kGuildInfo);
  if ( kGuildInfo.m_MasterName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
  kGuildInfo.m_MasterName.baseclass_0._Myres = 15;
  kGuildInfo.m_MasterName.baseclass_0._Mysize = 0;
  kGuildInfo.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( kGuildInfo.m_strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&kGuildInfo);
}
// A85C00: using guessed type int __security_cookie;

//----- (006F1A10) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::Sort(GuildAcademySelectWin *this)
{
  std::_Sort<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::Order>(
    *(GuildAcademySelectWin::GuildInfo **)&this->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0],
    this->m_vecSearch.baseclass_0._Mylast,
    (signed int)((char *)this->m_vecSearch.baseclass_0._Mylast
               - *(_DWORD *)&this->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0])
  / 68,
    this->OrderSort);
}

//----- (006F1A60) --------------------------------------------------------
bool __thiscall GuildAcademySelectWin::Create(GuildAcademySelectWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademySelectWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  NiSourceTexture *v18; // eax@25
  PgSprData *v19; // eax@25
  PgFont *v20; // eax@27
  PgWinText *v21; // eax@27
  NiRefObjectVtbl *v22; // edx@27
  char *v23; // eax@27
  PgSprData *v24; // eax@29
  SLWCreateInfo::Item *v25; // eax@29
  void *v26; // eax@29
  void *v27; // eax@29
  void *v28; // eax@29
  void *v29; // eax@29
  void *v30; // eax@29
  void *v31; // eax@29
  void *v32; // eax@29
  PgSprData *v33; // eax@29
  SlideListWin *v34; // eax@29
  PgSprData *v35; // eax@29
  SlideBar *v36; // eax@29
  NiRefObjectVtbl *v37; // eax@29
  void *v38; // ecx@29
  int (*v39)(void); // eax@29
  int v40; // eax@29
  int v41; // eax@29
  int v42; // eax@29
  void *v43; // edx@29
  PgFont *v44; // eax@29
  PgWinText *v45; // eax@29
  NiRefObjectVtbl *v46; // edx@29
  char *v47; // eax@29
  int v48; // ecx@29
  void *v49; // eax@29
  PgFont *v50; // eax@29
  PgWinText *v51; // eax@29
  NiRefObjectVtbl *v52; // edx@29
  char *v53; // eax@29
  int v54; // ecx@29
  void *v55; // eax@29
  PgFont *v56; // eax@29
  PgWinText *v57; // eax@29
  NiRefObjectVtbl *v58; // edx@29
  char *v59; // eax@29
  int v60; // ecx@29
  void *v61; // eax@29
  PgFont *v62; // eax@29
  PgWinText *v63; // eax@29
  NiRefObjectVtbl *v64; // edx@29
  char *v65; // eax@29
  int v66; // ecx@29
  void *v67; // eax@29
  PgFont *v68; // eax@29
  PgWinText *v69; // eax@29
  NiRefObjectVtbl *v70; // edx@29
  char *v71; // eax@29
  int v72; // ecx@29
  void *v73; // eax@29
  PgFont *v74; // eax@29
  PgWinText *v75; // eax@29
  NiRefObjectVtbl *v76; // edx@29
  char *v77; // eax@29
  int v78; // ecx@29
  void *v79; // eax@29
  PgFont *v80; // eax@29
  PgWinText *v81; // eax@29
  NiRefObjectVtbl *v82; // edx@29
  char *v83; // eax@29
  int v84; // ecx@29
  void *v85; // eax@29
  PgFont *v86; // eax@29
  PgWinText *v87; // eax@29
  NiRefObjectVtbl *v88; // edx@29
  char *v89; // eax@29
  NiPointer<PgSprData::PgHitTester> *v90; // ecx@29
  void *v91; // eax@29
  PgFont *v92; // eax@29
  PgWinText *v93; // eax@29
  NiRefObjectVtbl *v94; // edx@29
  char *v95; // eax@29
  EditWin *v96; // eax@29
  int v97; // ecx@29
  void *v98; // eax@29
  PgFont *v99; // eax@29
  PgWinText *v100; // eax@29
  NiRefObjectVtbl *v101; // edx@29
  char *v102; // eax@29
  int v103; // ecx@29
  void *v104; // eax@29
  PgFont *v105; // eax@29
  PgWinText *v106; // edi@29
  NiRefObjectVtbl *v107; // ebx@29
  char *v108; // eax@29
  const char *v109; // [sp+9Ch] [bp-8Ch]@23
  int *v110; // [sp+A0h] [bp-88h]@23
  int *v111; // [sp+A4h] [bp-84h]@23
  NiSourceTexture *v112; // [sp+A8h] [bp-80h]@23
  unsigned int v113; // [sp+ACh] [bp-7Ch]@1
  unsigned int uiWidth; // [sp+BCh] [bp-6Ch]@25
  unsigned int uiHeight; // [sp+C0h] [bp-68h]@25
  SLWCreateInfo kCreateInfo; // [sp+C4h] [bp-64h]@29
  NiPointer<NiTexturingProperty> spTexProp; // [sp+E0h] [bp-48h]@4
  NiSourceTexture *pkTexture; // [sp+E4h] [bp-44h]@7
  NiSourceTexture *pkTexture8; // [sp+E8h] [bp-40h]@27
  int uiLeft; // [sp+ECh] [bp-3Ch]@15
  int uiTop; // [sp+F0h] [bp-38h]@15
  NiPointer<NiNode> spNode; // [sp+F4h] [bp-34h]@1
  void *pkTextWin; // [sp+F8h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+FCh] [bp-2Ch]@29
  unsigned int v125; // [sp+118h] [bp-10h]@1
  int v126; // [sp+124h] [bp-4h]@1
  int v127; // [sp+128h] [bp+0h]@1

  v125 = (unsigned int)&v127 ^ __security_cookie;
  v113 = (unsigned int)&v127 ^ __security_cookie;
  v2 = this;
  pkTextWin = pkFrameWork;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v126 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildAcademySelect.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v126) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v126) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v126 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, (PgFrameWork *)pkTextWin, "GuildAcademySelect", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v112 = v16;
      v111 = &uiTop;
      v110 = &uiLeft;
      v109 = "Theme";
    }
    else
    {
      v112 = 0;
      v111 = &uiTop;
      v110 = &uiLeft;
      v109 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v109, v110, v111, v112);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v18 = MenuTexMgr::GetTexture(0x12u);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, v18);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    {
      v20 = Font::Get(MAIN_MENU);
      v21 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              uiWidth,
              uiHeight,
              v20,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v21;
      ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v22[122].__vecDelDtor)(v21, 1, v113);
      (*(void (__stdcall **)(__int64 *))(*(_DWORD *)pkTextWin + 468))(&Color::m_kDxWinTitleColor);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v23 = TextData::Get(0x369271A4u);
      (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v23);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xBu,
        0,
        0);
      pkTexture8 = MenuTexMgr::GetTexture(4u);
      if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      {
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, pkTexture8);
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
        PgWinBut::CreateWin(
          uiLeft - v14,
          uiTop - v15,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x19u,
          0,
          0);
      }
      v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane", &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
      kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
      kCreateInfo.m_bMakeData = 0;
      kCreateInfo.m_nOffX = 0;
      kCreateInfo.m_nOffY = 0;
      LOBYTE(v126) = 2;
      v25 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
      v25->nItemType = 1;
      v25->pNode = spNode.m_pObject;
      pkTextWin = v25;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarNor");
      LOBYTE(v126) = 3;
      pkTextWin = (char *)pkTextWin + 72;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarClick");
      LOBYTE(v126) = 4;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "ColumnBarOver");
      LOBYTE(v126) = 5;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkTextWin,
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v26 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v26;
      *(_DWORD *)v26 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column01");
      LOBYTE(v126) = 6;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v27 = pkTextWin;
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      *((_BYTE *)v27 + 88) = 1;
      v28 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v28;
      *(_DWORD *)v28 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column02");
      LOBYTE(v126) = 7;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      v29 = pkTextWin;
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      *((_BYTE *)v29 + 88) = 1;
      v30 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v30;
      *(_DWORD *)v30 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column03");
      LOBYTE(v126) = 8;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      v31 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v31;
      *(_DWORD *)v31 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column04");
      LOBYTE(v126) = 9;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      v32 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
      pkTextWin = v32;
      *(_DWORD *)v32 = 2;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
        &thisa,
        "Column05");
      LOBYTE(v126) = 10;
      std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
        (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
        &thisa);
      LOBYTE(v126) = 2;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
      *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
      kCreateInfo.m_nOffX = 5;
      kCreateInfo.m_nOffY = 0;
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, pkTexture);
      v34 = SlideListWin::CreateWin(
              uiLeft - v14,
              uiTop - v15,
              v33,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              &kCreateInfo,
              0,
              0);
      v2->m_pListWinGuild = v34;
      v34->m_uiRClickMsg = 23;
      v2->m_pListWinGuild->m_uiLClickMsg = 24;
      SlideListWin::UpdateViewList(v2->m_pListWinGuild);
      SLWCreateInfo::Clear(&kCreateInfo);
      SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
      v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
      v36 = SlideBar::CreateWin(
              spNode.m_pObject,
              "SlideBar",
              "SlideBar_UpBtn",
              "SlideBar_DnBtn",
              v35,
              0,
              &v2->baseclass_0.baseclass_0.baseclass_0);
      v2->m_pkSlideBarGuildList = v36;
      v36->m_uiClickMsg = 17;
      v2->m_pkSlideBarGuildList->m_eType = 1;
      v37 = v2->m_pkSlideBarGuildList->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v38 = v2->m_pkSlideBarGuildList;
      pkTextWin = v37;
      v39 = (int (*)(void))v37[42].__vecDelDtor;
      pkTexture8 = (NiSourceTexture *)v38;
      v40 = v39();
      v41 = ((int (__cdecl *)(int))pkTexture8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v40);
      (*(void (__thiscall **)(SlideBar *, int))((void (__thiscall **)(_DWORD, _DWORD))pkTextWin + 77))(
        v2->m_pkSlideBarGuildList,
        v41);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x12u,
        0,
        0);
      v42 = **((_DWORD **)pkTextWin + 9);
      v43 = *(void **)(v42 + 20);
      pkTexture8 = *(NiSourceTexture **)(v42 + 24);
      pkTextWin = v43;
      v44 = Font::Get(MAIN_MENU);
      v45 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v44,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v46 = v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v45;
      v46[122].__vecDelDtor((NiRefObject *)v45, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v47 = TextData::Get(0x4EA49695u);
      (*(void (__thiscall **)(void *, char *))&pkTexture8[6].m_bStatic)(pkTextWin, v47);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x13u,
        0,
        0);
      v48 = *((_DWORD *)pkTextWin + 9);
      v49 = *(void **)(*(_DWORD *)v48 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v48 + 24);
      pkTextWin = v49;
      v50 = Font::Get(MAIN_MENU);
      v51 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v50,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v52 = v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v51;
      v52[122].__vecDelDtor((NiRefObject *)v51, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v53 = TextData::Get(0x92B39CE7u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v53);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x14u,
        0,
        0);
      v54 = *((_DWORD *)pkTextWin + 9);
      v55 = *(void **)(*(_DWORD *)v54 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v54 + 24);
      pkTextWin = v55;
      v56 = Font::Get(MAIN_MENU);
      v57 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v56,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v58 = v57->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v57;
      v58[122].__vecDelDtor((NiRefObject *)v57, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v59 = TextData::Get(0x75867FA9u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v59);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x15u,
        0,
        0);
      v60 = *((_DWORD *)pkTextWin + 9);
      v61 = *(void **)(*(_DWORD *)v60 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v60 + 24);
      pkTextWin = v61;
      v62 = Font::Get(MAIN_MENU);
      v63 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v62,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v64 = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v63;
      v64[122].__vecDelDtor((NiRefObject *)v63, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v65 = TextData::Get(0x86A3E3E4u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v65);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x16u,
        0,
        0);
      v66 = *((_DWORD *)pkTextWin + 9);
      v67 = *(void **)(*(_DWORD *)v66 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v66 + 24);
      pkTextWin = v67;
      v68 = Font::Get(MAIN_MENU);
      v69 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v68,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v70 = v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v69;
      v70[122].__vecDelDtor((NiRefObject *)v69, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v71 = TextData::Get(0xEA472B3Cu);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v71);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xCu,
        0,
        0);
      v72 = *((_DWORD *)pkTextWin + 9);
      v73 = *(void **)(*(_DWORD *)v72 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v72 + 24);
      pkTextWin = v73;
      v74 = Font::Get(MAIN_MENU);
      v75 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v74,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v76 = v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v75;
      v76[122].__vecDelDtor((NiRefObject *)v75, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v77 = TextData::Get(0xD0502C33u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v77);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xDu,
        0,
        0);
      v78 = *((_DWORD *)pkTextWin + 9);
      v79 = *(void **)(*(_DWORD *)v78 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v78 + 24);
      pkTextWin = v79;
      v80 = Font::Get(MAIN_MENU);
      v81 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v80,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v82 = v81->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v81;
      v82[122].__vecDelDtor((NiRefObject *)v81, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v83 = TextData::Get(0x73F2C2B5u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v83);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, pkTexture);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0xEu,
        0,
        0);
      v84 = *((_DWORD *)pkTextWin + 9);
      v85 = *(void **)(*(_DWORD *)v84 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v84 + 24);
      pkTextWin = v85;
      v86 = Font::Get(MAIN_MENU);
      v87 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTextWin,
              (unsigned int)pkTexture8,
              v86,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v88 = v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v87;
      v88[122].__vecDelDtor((NiRefObject *)v87, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v89 = TextData::Get(0x23312946u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v89);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      v90 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, pkTexture)->m_akHitTester.m_pBase;
      v91 = (void *)v90->m_pObject->m_uiWidth;
      pkTexture8 = (NiSourceTexture *)v90->m_pObject->m_uiHeight;
      pkTexture = (NiSourceTexture *)v91;
      v92 = Font::Get(0);
      v93 = PgWinText::CreateWin(
              uiLeft - v14,
              uiTop - v15 + 1,
              (unsigned int)pkTexture,
              (unsigned int)pkTexture8,
              v92,
              &v2->baseclass_0.baseclass_0.baseclass_0,
              0,
              0);
      v94 = v93->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v93;
      v94[122].__vecDelDtor((NiRefObject *)v93, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v95 = TextData3::Get(0xB306566u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v95);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Search_Input", &uiLeft, &uiTop, 0);
      PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v96 = EditWin::CreateWin(
              uiLeft,
              uiTop + 2,
              *(_DWORD *)(**((_DWORD **)pkTextWin + 9) + 20),
              *(_DWORD *)(**((_DWORD **)pkTextWin + 9) + 24),
              &v2->baseclass_0.baseclass_0.baseclass_0,
              NORMAL,
              0x14u,
              1u,
              1,
              0,
              1);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spEdit, (NiD3DDefaultShader *)v96);
      EditWin::SetImeStatus(v2->m_spEdit.m_pObject, IS_KOREAN);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SearchBtnNor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "SearchBtnClick");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "SearchBtnOver");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x1Au,
        0,
        0);
      v97 = *((_DWORD *)pkTextWin + 9);
      v98 = *(void **)(*(_DWORD *)v97 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v97 + 24);
      pkTexture = (NiSourceTexture *)v98;
      v99 = Font::Get(0);
      v100 = PgWinText::CreateWin(
               uiLeft - v14,
               uiTop - v15 + 1,
               (unsigned int)pkTexture,
               (unsigned int)pkTexture8,
               v99,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v101 = v100->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTextWin = v100;
      v101[122].__vecDelDtor((NiRefObject *)v100, 5u);
      pkTexture8 = *(NiSourceTexture **)pkTextWin;
      v102 = TextData3::Get(0x67775F79u);
      (*(void (__thiscall **)(_DWORD, _DWORD))&pkTexture8[6].m_bStatic)(pkTextWin, v102);
      (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
      pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn04Nor", &uiLeft, &uiTop, 0);
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn04Click");
      PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn04Over");
      PgWinBut::CreateWin(
        uiLeft - v14,
        uiTop - v15,
        (PgSprData *)pkTextWin,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0x1Bu,
        0,
        0);
      v103 = *((_DWORD *)pkTextWin + 9);
      v104 = *(void **)(*(_DWORD *)v103 + 20);
      pkTexture8 = *(NiSourceTexture **)(*(_DWORD *)v103 + 24);
      pkTexture = (NiSourceTexture *)v104;
      v105 = Font::Get(0);
      v106 = PgWinText::CreateWin(
               uiLeft - v14,
               uiTop - v15 + 1,
               (unsigned int)pkTexture,
               (unsigned int)pkTexture8,
               v105,
               &v2->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v106,
        5u);
      v107 = v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v108 = TextData3::Get(0x7272A2EDu);
      v107[118].__vecDelDtor((NiRefObject *)v106, (unsigned int)v108);
      v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v106,
        0);
      ((void (__thiscall *)(GuildAcademySelectWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
        v2,
        PgWin::ms_uiScreenWidth,
        PgWin::ms_uiScreenHeight,
        0.40000001,
        0.5);
      LOBYTE(v126) = 1;
      SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      LOBYTE(v126) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v126 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 1;
    }
    else
    {
      LOBYTE(v126) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v126 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v126) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v126 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006F2C00) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::DisplayInfoSetting(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // edi@1
  int v2; // esi@1
  signed int v3; // ecx@1
  int v4; // ebx@3
  std::locale *v5; // eax@3
  std::locale v6; // esi@4
  unsigned int v7; // eax@4
  int v8; // esi@7
  int v9; // esi@7
  std::basic_ostream<char,std::char_traits<char> > *v10; // eax@11
  int v11; // eax@12
  char *v12; // edx@14
  char v13; // cl@15
  const char *v14; // esi@16
  int v15; // eax@16
  char *v16; // edx@18
  char v17; // cl@19
  int v18; // ebx@26
  unsigned int v19; // eax@27
  int v20; // esi@30
  int v21; // esi@30
  GuildAcademySelectWin::GuildInfo *v22; // ecx@33
  GuildAcademySelectWin::GuildInfo *v23; // esi@34
  GuildAcademySelectWin::GuildInfo *v24; // ebx@34
  signed int v25; // edx@34
  int v26; // esi@34
  int v27; // ebx@36
  PgFrameWork *v28; // esi@39
  char *v29; // eax@40
  std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> > osstream; // [sp+8h] [bp-108h]@3
  std::locale v31; // [sp+A0h] [bp-70h]@4
  std::_Lockit thisa; // [sp+A4h] [bp-6Ch]@4
  std::locale result; // [sp+A8h] [bp-68h]@3
  char v34; // [sp+ACh] [bp-64h]@27
  int v35; // [sp+B0h] [bp-60h]@1
  unsigned int i; // [sp+B4h] [bp-5Ch]@1
  int v37; // [sp+B8h] [bp-58h]@2
  void *_Pred; // [sp+BCh] [bp-54h]@3
  char strGuildName[32]; // [sp+C0h] [bp-50h]@14
  char strMasterName[32]; // [sp+E0h] [bp-30h]@18
  unsigned int v41; // [sp+100h] [bp-10h]@1
  int v42; // [sp+10Ch] [bp-4h]@3
  int v43; // [sp+110h] [bp+0h]@1

  v41 = (unsigned int)&v43 ^ __security_cookie;
  v1 = this;
  v35 = 0;
  v2 = *(_DWORD *)&this->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = (signed int)((char *)this->m_vecGuildInfo.baseclass_0._Mylast - v2);
  i = 0;
  if ( v3 / 68 )
  {
    v37 = 0;
    do
    {
      v4 = v2 + v37;
      *(_DWORD *)&osstream.___u0.baseclass_0.dummy[0] = &std::basic_stringstream<char_std::char_traits<char>_std::allocator<char>>::_vbtable_;
      v35 |= 1u;
      v42 = 0;
      *(_DWORD *)&osstream.gap50[0] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
      std::ios_base::_Init((std::ios_base *)osstream.gap50);
      *(_DWORD *)&osstream.gap50[56] = (char *)&osstream + 4;
      *(_DWORD *)&osstream.gap50[60] = 0;
      v5 = std::ios_base::getloc((std::ios_base *)osstream.gap50, &result);
      v42 = 2;
      _Pred = std::use_facet<std::ctype<char>>(v5);
      LOBYTE(v42) = 1;
      if ( result )
      {
        v6 = result;
        v31 = result;
        std::_Lockit::_Lockit(&thisa, 0);
        v7 = *(_DWORD *)(*(_DWORD *)&v6 + 4);
        if ( v7 && v7 < 0xFFFFFFFF )
          *(_DWORD *)(*(_DWORD *)&v6 + 4) = v7 - 1;
        v8 = -(*(_DWORD *)(*(_DWORD *)&v6 + 4) == 0);
        std::_Lockit::__Lockit(&thisa);
        v9 = *(_DWORD *)&v31 & v8;
        if ( v9 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
      }
      osstream.gap50[64] = (*(int (__stdcall **)(signed int))(*(_DWORD *)_Pred + 24))(32);
      if ( !*(_DWORD *)&osstream.gap50[56] )
        std::ios_base::clear((std::ios_base *)osstream.gap50, *(_DWORD *)&osstream.gap50[12] | 4, 0);
      *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
      v42 = 3;
      std::basic_streambuf<char_std::char_traits<char>>::basic_streambuf<char_std::char_traits<char>>((std::basic_streambuf<char,std::char_traits<char> > *)&osstream.___u0.baseclass_0.dummy[4]);
      *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
      *(_QWORD *)&osstream.___u0.baseclass_0.dummy[64] = 17179869184i64;
      v42 = 5;
      v10 = std::operator<<<std::char_traits<char>>(&osstream.___u0.baseclass_0, " ");
      std::operator<<<char_std::char_traits<char>_std::allocator<char>>(
        v10,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v4);
      if ( *(_DWORD *)(v4 + 20) < 0x10u )
        v11 = v4;
      else
        v11 = *(_DWORD *)v4;
      v12 = &strGuildName[-v11];
      do
      {
        v13 = *(_BYTE *)v11;
        v12[v11] = *(_BYTE *)v11;
        ++v11;
      }
      while ( v13 );
      _strlwr(strGuildName);
      _strlwr(v1->m_acSearchName);
      v14 = _mbsstr(strGuildName, v1->m_acSearchName);
      v15 = v4 + 28;
      if ( *(_DWORD *)(v4 + 48) >= 0x10u )
        v15 = *(_DWORD *)v15;
      v16 = &strMasterName[-v15];
      do
      {
        v17 = *(_BYTE *)v15;
        v16[v15] = *(_BYTE *)v15;
        ++v15;
      }
      while ( v17 );
      _strlwr(strMasterName);
      if ( v14 || _mbsstr(strMasterName, v1->m_acSearchName) )
        std::vector<GuildAcademySelectWin::GuildInfo_std::allocator<GuildAcademySelectWin::GuildInfo>>::push_back(
          (std::vector<GuildListWin::GuildInfo,std::allocator<GuildListWin::GuildInfo> > *)&v1->m_vecSearch,
          (GuildListWin::GuildInfo *)v4);
      *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostringstream<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
      v42 = 6;
      *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_stringbuf<char_std::char_traits<char>_std::allocator<char>>::_vftable_;
      if ( osstream.___u0.baseclass_0.dummy[68] & 1 )
        operator delete((void *)**(_DWORD **)&osstream.___u0.baseclass_0.dummy[20]);
      **(_DWORD **)&osstream.___u0.baseclass_0.dummy[20] = 0;
      **(_DWORD **)&osstream.___u0.baseclass_0.dummy[36] = 0;
      **(_DWORD **)&osstream.___u0.baseclass_0.dummy[52] = 0;
      **(_DWORD **)&osstream.___u0.baseclass_0.dummy[24] = 0;
      **(_DWORD **)&osstream.___u0.baseclass_0.dummy[40] = 0;
      **(_DWORD **)&osstream.___u0.baseclass_0.dummy[56] = 0;
      *(_QWORD *)&osstream.___u0.baseclass_0.dummy[64] &= 0xFFFFFFFE00000000ui64;
      *(_DWORD *)&osstream.___u0.baseclass_0.dummy[4] = &std::basic_streambuf<char_std::char_traits<char>>::_vftable_;
      LOBYTE(v42) = 7;
      _Pred = *(void **)&osstream.___u0.baseclass_0.dummy[60];
      if ( *(_DWORD *)&osstream.___u0.baseclass_0.dummy[60] )
      {
        v18 = **(_DWORD **)&osstream.___u0.baseclass_0.dummy[60];
        if ( **(_DWORD **)&osstream.___u0.baseclass_0.dummy[60] )
        {
          std::_Lockit::_Lockit((std::_Lockit *)&v34, 0);
          v19 = *(_DWORD *)(v18 + 4);
          if ( v19 && v19 < 0xFFFFFFFF )
            *(_DWORD *)(v18 + 4) = v19 - 1;
          v20 = -(*(_DWORD *)(v18 + 4) == 0);
          std::_Lockit::__Lockit((std::_Lockit *)&v34);
          v21 = v18 & v20;
          if ( v21 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v21)(v21, 1);
        }
        operator delete(_Pred);
      }
      LOBYTE(v42) = 6;
      std::_Mutex::__Mutex((std::_Mutex *)&osstream.___u0.baseclass_0.dummy[8]);
      *(_DWORD *)&osstream.___u0.baseclass_0.dummy[*(_DWORD *)(*(_DWORD *)&osstream + 4)] = &std::basic_ostream<char_std::char_traits<char>>::_vftable_;
      v42 = -1;
      *(_DWORD *)&osstream.gap50[0] = &std::ios_base::_vftable_;
      std::ios_base::_Ios_base_dtor((std::ios_base *)osstream.gap50);
      v2 = *(_DWORD *)&v1->m_vecGuildInfo.baseclass_0.___u0.baseclass_0.dummy[0];
      v22 = v1->m_vecGuildInfo.baseclass_0._Mylast;
      v37 += 68;
      ++i;
    }
    while ( i < (signed int)((char *)v22 - v2) / 68 );
  }
  v23 = v1->m_vecSearch.baseclass_0._Mylast;
  v24 = *(GuildAcademySelectWin::GuildInfo **)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0];
  LOBYTE(_Pred) = v1->OrderSort.dummy[0];
  std::_Sort<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::Order>(
    v24,
    v23,
    v23 - v24,
    (GuildAcademySelectWin::Order)_Pred);
  v25 = (signed int)((unsigned __int64)(2021161081i64
                                      * (unsigned int)((char *)v1->m_vecSearch.baseclass_0._Mylast
                                                     - *(_DWORD *)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 5;
  v26 = v25 + ((unsigned int)v25 >> 31);
  if ( v26 )
  {
    SlideListWin::RemoveAllList(v1->m_pListWinGuild);
    if ( v26 )
    {
      v27 = 0;
      do
      {
        GuildAcademySelectWin::AddGuildInfo(
          v1,
          (GuildAcademySelectWin::GuildInfo *)(v27 + *(_DWORD *)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0]));
        v27 += 68;
        --v26;
      }
      while ( v26 );
    }
  }
  else
  {
    v28 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v28 )
    {
      v29 = TextData3::Get(0xB5D1D1A8u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v28, v29);
    }
  }
  SlideListWin::UpdateViewList(v1->m_pListWinGuild);
}
// 989294: using guessed type int (__thiscall *std__ios_base___vftable_)(void *p, char);
// 98935C: using guessed type int (__thiscall *std__basic_streambuf_char_std__char_traits_char_____vftable_)(void *p, char);
// 997008: using guessed type int (__stdcall *std__basic_ostream_char_std__char_traits_char_____vftable_)(char);
// 997014: using guessed type int (__thiscall *std__basic_stringbuf_char_std__char_traits_char__std__allocator_char_____vftable_)(void *p, char);
// 9970A8: using guessed type int (__stdcall *std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vftable_)(char);
// A85C00: using guessed type int __security_cookie;

//----- (006F3090) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnSearch(GuildAcademySelectWin *this)
{
  GuildAcademySelectWin *v1; // edi@1
  int v2; // eax@1
  int v3; // ebx@1
  int v4; // edx@1
  char v5; // cl@2
  int v6; // esi@3
  PgFrameWork *v7; // ebx@3
  char *v8; // eax@6
  char *v9; // eax@8
  GuildListWin::GuildInfo *v10; // eax@9
  GuildListWin::GuildInfo *v11; // ecx@9
  GuildListWin::GuildInfo *v12; // esi@10
  int v13; // eax@11
  int v14; // esi@11
  char v15; // cl@12
  SlideListWin *v16; // esi@13
  BYTE dbcs; // [sp+Ch] [bp-4h]@3

  v1 = this;
  v2 = ((int (*)(void))this->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  v3 = v2;
  v4 = v2 + 1;
  do
    v5 = *(_BYTE *)v2++;
  while ( v5 );
  v6 = v2 - v4;
  PgEditWin::SetCaretPos(v1->m_spEdit.m_pObject->m_spEditWin.m_pObject, v2 - v4);
  dbcs = *(_BYTE *)v3;
  v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v7 )
  {
    if ( IsDBCSLeadByte(dbcs) )
    {
      if ( (unsigned int)v6 < 2 )
      {
        v8 = TextData3::Get(0x96D0CDB6u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v7, v8);
        return;
      }
    }
    else
    {
      if ( (unsigned int)v6 < 1 )
      {
        v9 = TextData3::Get(0x96D0CDB6u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v7, v9);
        return;
      }
    }
    v10 = (GuildListWin::GuildInfo *)v1->m_vecSearch.baseclass_0._Mylast;
    v11 = *(GuildListWin::GuildInfo **)&v1->m_vecSearch.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v11 != v10 )
    {
      v12 = std::_Move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo__>(
              v10,
              v10,
              v11,
              (std::_Nonscalar_ptr_iterator_tag)dbcs);
      std::_Destroy_range<std::allocator<GTRequestListWin::GuildInfo>>(
        v12,
        (GuildListWin::GuildInfo *)v1->m_vecSearch.baseclass_0._Mylast,
        (std::allocator<GuildListWin::GuildInfo> *)&v1->m_vecSearch.baseclass_0._Alval,
        (std::_Nonscalar_ptr_iterator_tag)dbcs);
      v1->m_vecSearch.baseclass_0._Mylast = (GuildAcademySelectWin::GuildInfo *)v12;
    }
    *(_DWORD *)&v1->m_acSearchName[0] = 0;
    *(_DWORD *)&v1->m_acSearchName[4] = 0;
    *(_DWORD *)&v1->m_acSearchName[8] = 0;
    *(_DWORD *)&v1->m_acSearchName[12] = 0;
    *(_DWORD *)&v1->m_acSearchName[16] = 0;
    *(_DWORD *)&v1->m_acSearchName[20] = 0;
    *(_DWORD *)&v1->m_acSearchName[24] = 0;
    *(_DWORD *)&v1->m_acSearchName[28] = 0;
    v13 = ((int (*)(void))v1->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v14 = (int)&v1->m_acSearchName[-v13];
    do
    {
      v15 = *(_BYTE *)v13;
      *(_BYTE *)(v14 + v13) = *(_BYTE *)v13;
      ++v13;
    }
    while ( v15 );
    SlideBar::SetSplitCnt(v1->m_pkSlideBarGuildList, 0);
    v1->m_pListWinGuild->m_nSlideSplitCnt = 0;
    v16 = v1->m_pListWinGuild;
    v16->m_fCurSlideBtnPos = 0.0;
    v16->m_nViewStartPos = (signed int)((double)v16->m_nSlideSplitCnt * 0.0);
    v1->m_pListWinGuild->m_nViewStartPos = 0;
    GuildAcademySelectWin::DisplayInfoSetting(v1);
  }
}

//----- (006F3220) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnCommand(GuildAcademySelectWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      GuildAcademySelectWin::OnClickWinCloseBtn(this);
      break;
    case 0xCu:
      GuildAcademySelectWin::OnClickJoinBtn(this);
      break;
    case 0xDu:
      GuildAcademySelectWin::OnClickHallOfFameBtn(this);
      break;
    case 0xEu:
      GuildAcademySelectWin::OnClickRankingBtn(this);
      break;
    case 0x11u:
      GuildAcademySelectWin::OnSlideBar(this);
      break;
    case 0x12u:
      GuildAcademySelectWin::OnSortByTitle01(this);
      break;
    case 0x13u:
      GuildAcademySelectWin::OnSortByTitle02(this);
      break;
    case 0x14u:
      GuildAcademySelectWin::OnSortByTitle03(this);
      break;
    case 0x15u:
      GuildAcademySelectWin::OnSortByTitle04(this);
      break;
    case 0x16u:
      GuildAcademySelectWin::OnSortByTitle05(this);
      break;
    case 0x19u:
      GuildAcademySelectWin::OnHelpLink(this);
      break;
    case 0x1Au:
      GuildAcademySelectWin::OnSearch(this);
      break;
    case 0x1Bu:
      GuildAcademySelectWin::ShowAll(this);
      break;
    default:
      return;
  }
}

//----- (006F32F0) --------------------------------------------------------
void __thiscall GuildAcademySelectWin::OnEditEnd(GuildAcademySelectWin *this, unsigned int wParam, int lParam)
{
  GuildAcademySelectWin *v3; // esi@1
  EditWin *v4; // edi@1
  NiRefObjectVtbl *v5; // ebx@1
  int v6; // eax@1

  v3 = this;
  v4 = this->m_spEdit.m_pObject;
  v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v6 = ((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)(this->m_spEdit.m_pObject);
  v5[115].__vecDelDtor((NiRefObject *)v4, v6);
  ((void (*)(void))v3->m_spEdit.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  GuildAcademySelectWin::OnSearch(v3);
}

//----- (006F3330) --------------------------------------------------------
GuildAcademyJoinReqTask *__cdecl ISingletonTask<GuildAcademyJoinReqTask>::Run()
{
  GuildAcademyJoinReqTask *result; // eax@1
  void *v1; // eax@2

  result = (GuildAcademyJoinReqTask *)ISingletonTask<GuildAcademyJoinReqTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildAcademyJoinReqTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    if ( v1 )
    {
      GuildAcademyJoinReqTask::GuildAcademyJoinReqTask(result);
      ISingletonTask<GuildAcademyJoinReqTask>::ms_pkSingletonTask = (int)result;
    }
    else
    {
      result = 0;
      ISingletonTask<GuildAcademyJoinReqTask>::ms_pkSingletonTask = 0;
    }
  }
  return result;
}
// B67E78: using guessed type int ISingletonTask_GuildAcademyJoinReqTask___ms_pkSingletonTask;

//----- (006F33B0) --------------------------------------------------------
bool __thiscall GuildAcademySelectWin::Order::operator__(GuildAcademySelectWin::Order *this, GuildAcademySelectWin::GuildInfo *GuildInfo2, GuildAcademySelectWin::GuildInfo *GuildInfo)
{
  unsigned int v3; // ecx@1
  unsigned int v4; // eax@1
  bool result; // al@2
  unsigned int v6; // eax@4
  unsigned int v7; // ecx@4
  bool v8; // cf@4
  const char *v9; // eax@7

  v3 = GuildInfo->m_unGuildAcademy;
  v4 = GuildInfo2->m_unGuildAcademy;
  if ( v4 < v3 )
    return 0;
  if ( v4 == v3 )
  {
    v6 = GuildInfo2->m_unGuildMember;
    v7 = GuildInfo->m_unGuildMember;
    v8 = v7 < v6;
    if ( v7 == v6 )
    {
      if ( GuildInfo2->m_unGuildGraduates == GuildInfo->m_unGuildGraduates )
      {
        v9 = (const char *)(GuildInfo->m_strGuildName.baseclass_0._Myres < 0x10 ? GuildInfo : *(_DWORD *)&GuildInfo->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0]);
        if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
               &GuildInfo2->m_strGuildName,
               0,
               GuildInfo2->m_strGuildName.baseclass_0._Mysize,
               v9,
               GuildInfo->m_strGuildName.baseclass_0._Mysize) < 0 )
          return std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                   &GuildInfo2->m_strGuildName,
                   &GuildInfo->m_strGuildName) != 0;
      }
      v8 = GuildInfo->m_unGuildGraduates < GuildInfo2->m_unGuildGraduates;
    }
    result = v8;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (006F3430) --------------------------------------------------------
void __cdecl std::_Push_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, int _Hole, int _Top, GuildAcademySelectWin::GuildInfo *_Val, GuildAcademySelectWin::Order _Pred)
{
  int v5; // edi@1
  int v6; // eax@1
  int v7; // ecx@4
  unsigned int v8; // eax@4
  GuildAcademySelectWin::GuildInfo *v9; // esi@4
  unsigned int v10; // ecx@4
  unsigned int v11; // eax@6
  unsigned int v12; // ecx@6
  bool v13; // cf@6
  const char *v14; // eax@9
  GuildAcademySelectWin::GuildInfo *v15; // eax@13
  bool v16; // al@15
  GuildAcademySelectWin::GuildInfo *v17; // edi@19
  GuildAcademySelectWin::GuildInfo *v18; // esi@20
  int _Idx; // [sp+18h] [bp+Ch]@1

  v5 = _Hole;
  v6 = (_Hole - 1) / 2;
  _Idx = (_Hole - 1) / 2;
  if ( _Top < v5 )
  {
    while ( 1 )
    {
      v7 = 17 * v6;
      v8 = _First[v6].m_unGuildAcademy;
      v9 = &_First[4 * v7 / 0x44u];
      v10 = _Val->m_unGuildAcademy;
      if ( v8 < v10 )
        goto LABEL_20;
      if ( v8 == v10 )
        break;
LABEL_19:
      v17 = &_First[v5];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v17->m_strGuildName,
        &v9->m_strGuildName,
        0,
        0xFFFFFFFFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v17->m_MasterName,
        &v9->m_MasterName,
        0,
        0xFFFFFFFFu);
      v17->m_unGuildMember = v9->m_unGuildMember;
      v17->m_unGuildAcademy = v9->m_unGuildAcademy;
      v17->m_unGuildGraduates = v9->m_unGuildGraduates;
      v5 = _Idx;
      _Idx = (_Idx - 1) / 2;
      if ( _Top >= v5 )
        goto LABEL_20;
      v6 = _Idx;
    }
    v11 = v9->m_unGuildMember;
    v12 = _Val->m_unGuildMember;
    v13 = v12 < v11;
    if ( v12 == v11 )
    {
      if ( v9->m_unGuildGraduates == _Val->m_unGuildGraduates )
      {
        v14 = (const char *)(_Val->m_strGuildName.baseclass_0._Myres < 0x10 ? _Val : *(_DWORD *)&_Val->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0]);
        if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
               &v9->m_strGuildName,
               0,
               v9->m_strGuildName.baseclass_0._Mysize,
               v14,
               _Val->m_strGuildName.baseclass_0._Mysize) < 0 )
        {
          if ( _Val->m_strGuildName.baseclass_0._Myres < 0x10 )
            v15 = _Val;
          else
            v15 = *(GuildAcademySelectWin::GuildInfo **)&_Val->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
          v16 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                  &v9->m_strGuildName,
                  0,
                  v9->m_strGuildName.baseclass_0._Mysize,
                  v15->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy,
                  _Val->m_strGuildName.baseclass_0._Mysize) != 0;
LABEL_18:
          if ( !v16 )
            goto LABEL_20;
          goto LABEL_19;
        }
      }
      v13 = _Val->m_unGuildGraduates < v9->m_unGuildGraduates;
    }
    v16 = v13;
    goto LABEL_18;
  }
LABEL_20:
  v18 = &_First[v5];
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_First[v5].m_strGuildName,
    &_Val->m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &v18->m_MasterName,
    &_Val->m_MasterName,
    0,
    0xFFFFFFFFu);
  v18->m_unGuildMember = _Val->m_unGuildMember;
  v18->m_unGuildAcademy = _Val->m_unGuildAcademy;
  v18->m_unGuildGraduates = _Val->m_unGuildGraduates;
}

//----- (006F3570) --------------------------------------------------------
GuildListWin::GuildInfo *__cdecl std::_Move<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo__>(GuildListWin::GuildInfo *_First, GuildListWin::GuildInfo *_Last, GuildListWin::GuildInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  GuildListWin::GuildInfo *v4; // edi@2
  char *v5; // esi@2
  unsigned int v6; // ecx@3
  GuildListWin::GuildInfo *result; // eax@4

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = _Dest;
    v5 = (char *)&_First->m_unGuildType;
    do
    {
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_strGuildName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5 - 2,
        0,
        0xFFFFFFFFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v4->m_MasterName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5 - 1,
        0,
        0xFFFFFFFFu);
      v4->m_unGuildType = *(_DWORD *)v5;
      v4->m_unGuildGrade = *((_DWORD *)v5 + 1);
      v6 = *((_DWORD *)v5 + 2);
      v5 += 68;
      v4->m_unGuildTotalMember = v6;
      ++v4;
    }
    while ( (GuildListWin::GuildInfo *)(v5 - 56) != _Last );
    result = v4;
  }
  return result;
}

//----- (006F35D0) --------------------------------------------------------
void __cdecl std::_Med3<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Mid, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred)
{
  if ( GuildAcademySelectWin::Order::operator__(&_Pred, _Mid, _First) )
    std::swap<GTRequestListWin::GuildInfo>((GuildListWin::GuildInfo *)_Mid, (GuildListWin::GuildInfo *)_First);
  if ( GuildAcademySelectWin::Order::operator__(&_Pred, _Last, _Mid) )
    std::swap<GTRequestListWin::GuildInfo>((GuildListWin::GuildInfo *)_Last, (GuildListWin::GuildInfo *)_Mid);
  if ( GuildAcademySelectWin::Order::operator__(&_Pred, _Mid, _First) )
    std::swap<GTRequestListWin::GuildInfo>((GuildListWin::GuildInfo *)_Mid, (GuildListWin::GuildInfo *)_First);
}

//----- (006F3630) --------------------------------------------------------
void __cdecl std::_Adjust_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, int _Hole, int _Bottom, GuildAcademySelectWin::GuildInfo *_Val, GuildAcademySelectWin::Order _Pred)
{
  int v5; // ebx@1
  int v6; // esi@1
  bool v7; // zf@1
  GuildAcademySelectWin::GuildInfo *v8; // ebx@2
  unsigned int v9; // eax@2
  unsigned int v10; // ecx@2
  int v11; // edi@2
  unsigned int v12; // eax@4
  unsigned int v13; // ecx@4
  bool v14; // cf@4
  const char *v15; // eax@7
  unsigned int v16; // eax@10
  bool v17; // al@12
  GuildAcademySelectWin::GuildInfo *v18; // edi@17
  GuildAcademySelectWin::GuildInfo *v19; // ebx@17
  GuildAcademySelectWin::GuildInfo *v20; // esi@20
  GuildAcademySelectWin::GuildInfo *v21; // edi@20
  int _Top; // [sp+Ch] [bp-4h]@1

  v5 = _Bottom;
  v6 = 2 * _Hole + 2;
  _Top = _Hole;
  v7 = v6 == _Bottom;
  if ( v6 < _Bottom )
  {
    while ( 1 )
    {
      v8 = &_First[v6];
      v9 = v8->m_unGuildAcademy;
      v10 = *((_DWORD *)v8 - 2);
      v11 = (int)&v8[-1];
      if ( v9 < v10 )
        goto LABEL_17;
      if ( v9 != v10 )
        goto LABEL_16;
      v12 = v8->m_unGuildMember;
      v13 = *(_DWORD *)(v11 + 56);
      v14 = v13 < v12;
      if ( v13 != v12 )
        goto LABEL_14;
      if ( v8->m_unGuildGraduates != *(_DWORD *)(v11 + 64) )
        break;
      v15 = (const char *)(*(_DWORD *)(v11 + 20) < 0x10u ? &v8[-1] : *(_DWORD *)v11);
      if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
             &_First[v6].m_strGuildName,
             0,
             v8->m_strGuildName.baseclass_0._Mysize,
             v15,
             *(_DWORD *)(v11 + 16)) >= 0 )
        break;
      v16 = *(_DWORD *)(v11 + 16);
      if ( *(_DWORD *)(v11 + 20) >= 0x10u )
        v11 = *(_DWORD *)v11;
      v17 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
              &v8->m_strGuildName,
              0,
              v8->m_strGuildName.baseclass_0._Mysize,
              (const char *)v11,
              v16) != 0;
LABEL_15:
      if ( v17 )
LABEL_16:
        --v6;
LABEL_17:
      v18 = &_First[v6];
      v19 = &_First[_Hole];
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_First[_Hole].m_strGuildName,
        &_First[v6].m_strGuildName,
        0,
        0xFFFFFFFFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &v19->m_MasterName,
        &v18->m_MasterName,
        0,
        0xFFFFFFFFu);
      v19->m_unGuildMember = v18->m_unGuildMember;
      _Hole = v6;
      v19->m_unGuildAcademy = v18->m_unGuildAcademy;
      v6 = 2 * v6 + 2;
      v19->m_unGuildGraduates = v18->m_unGuildGraduates;
      if ( v6 >= _Bottom )
      {
        v5 = _Bottom;
        v7 = v6 == _Bottom;
        goto LABEL_19;
      }
    }
    v14 = *(_DWORD *)(v11 + 64) < v8->m_unGuildGraduates;
LABEL_14:
    v17 = v14;
    goto LABEL_15;
  }
LABEL_19:
  if ( v7 )
  {
    v20 = &_First[v5 - 1];
    v21 = &_First[_Hole];
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &_First[_Hole].m_strGuildName,
      &_First[v5 - 1].m_strGuildName,
      0,
      0xFFFFFFFFu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &v21->m_MasterName,
      &v20->m_MasterName,
      0,
      0xFFFFFFFFu);
    v21->m_unGuildMember = v20->m_unGuildMember;
    v21->m_unGuildAcademy = v20->m_unGuildAcademy;
    v21->m_unGuildGraduates = v20->m_unGuildGraduates;
    _Hole = v5 - 1;
  }
  std::_Push_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(
    _First,
    _Hole,
    _Top,
    _Val,
    _Pred);
}

//----- (006F37A0) --------------------------------------------------------
void __cdecl std::_Median<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Mid, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred)
{
  unsigned int v4; // eax@1
  int v5; // eax@2
  int v6; // ebx@2
  GuildAcademySelectWin::GuildInfo *v7; // edx@2
  unsigned int v8; // esi@2
  GuildAcademySelectWin::GuildInfo *v9; // ST30_4@2
  GuildAcademySelectWin::GuildInfo *_Firsta; // [sp+Ch] [bp+8h]@2

  v4 = _Last - _First;
  if ( (signed int)v4 <= 40 )
  {
    std::_Med3<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(_First, _Mid, _Last, _Pred);
  }
  else
  {
    v5 = (signed int)(v4 + 1) / 8;
    v6 = 136 * v5;
    v7 = &_First[2 * v5];
    v8 = 68 * v5;
    v9 = _First;
    _Firsta = &_First[v5];
    std::_Med3<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(v9, _Firsta, v7, _Pred);
    std::_Med3<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(
      &_Mid[-v8 / 0x44u],
      _Mid,
      &_Mid[v8 / 0x44],
      _Pred);
    std::_Med3<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(
      &_Last[-v6 / 0x44u],
      &_Last[-v8 / 0x44u],
      _Last,
      _Pred);
    std::_Med3<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(
      _Firsta,
      _Mid,
      &_Last[-v8 / 0x44u],
      _Pred);
  }
}

//----- (006F3860) --------------------------------------------------------
void __cdecl std::_Make_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred, int *__formal, GuildAcademySelectWin::GuildInfo *a5)
{
  int v5; // edi@1
  char *v6; // esi@2
  unsigned int v7; // ecx@3
  unsigned int v8; // edx@3
  int _Bottom; // [sp+0h] [bp-5Ch]@1
  GuildAcademySelectWin::GuildInfo _Val; // [sp+8h] [bp-54h]@3
  unsigned int v11; // [sp+4Ch] [bp-10h]@1
  int v12; // [sp+58h] [bp-4h]@3
  int v13; // [sp+5Ch] [bp+0h]@1

  v11 = (unsigned int)&v13 ^ __security_cookie;
  _Bottom = _Last - _First;
  v5 = _Bottom / 2;
  if ( _Bottom / 2 > 0 )
  {
    v6 = (char *)&_First[v5].m_unGuildMember;
    do
    {
      v6 -= 68;
      --v5;
      _Val.m_strGuildName.baseclass_0._Myres = 15;
      _Val.m_strGuildName.baseclass_0._Mysize = 0;
      _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_strGuildName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6 - 2,
        0,
        0xFFFFFFFFu);
      v12 = 0;
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.m_MasterName,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6 - 1,
        0,
        0xFFFFFFFFu);
      v7 = *((_DWORD *)v6 + 1);
      v8 = *((_DWORD *)v6 + 2);
      _Val.m_unGuildMember = *(_DWORD *)v6;
      _Val.m_unGuildAcademy = v7;
      _Val.m_unGuildGraduates = v8;
      v12 = 1;
      std::_Adjust_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(
        _First,
        v5,
        _Bottom,
        &_Val,
        _Pred);
      v12 = -1;
      if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
      _Val.m_MasterName.baseclass_0._Myres = 15;
      _Val.m_MasterName.baseclass_0._Mysize = 0;
      _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
    }
    while ( v5 > 0 );
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F39A0) --------------------------------------------------------
void __cdecl std::_Insertion_sort1<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order_GuildAcademySelectWin::GuildInfo>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred, GuildAcademySelectWin::GuildInfo *__formal)
{
  GuildAcademySelectWin::GuildInfo *v4; // esi@1
  GuildAcademySelectWin::GuildInfo *v5; // edi@2
  int v6; // ebx@3
  unsigned int v7; // edx@3
  unsigned int v8; // ecx@3
  unsigned int v9; // eax@3
  unsigned int v10; // eax@3
  unsigned int v11; // eax@5
  bool v12; // cf@5
  unsigned int v13; // ecx@7
  const char *v14; // edx@8
  const char *v15; // eax@12
  int v16; // eax@14
  unsigned int v17; // ecx@14
  bool v18; // sf@14
  unsigned int v19; // eax@15
  const char *v20; // edx@19
  const char *v21; // eax@23
  int v22; // eax@25
  bool v23; // zf@25
  unsigned int v24; // eax@26
  bool v25; // al@27
  unsigned int v26; // edx@34
  unsigned int v27; // eax@34
  int v28; // esi@35
  unsigned int v29; // eax@36
  unsigned int v30; // eax@38
  bool v31; // cf@38
  int v32; // edi@40
  const char *v33; // edx@41
  unsigned int v34; // ecx@43
  const char *v35; // eax@45
  int v36; // eax@47
  unsigned int v37; // ecx@47
  bool v38; // sf@47
  unsigned int v39; // eax@48
  const char *v40; // edx@52
  const char *v41; // eax@56
  int v42; // eax@58
  bool v43; // zf@58
  unsigned int v44; // eax@59
  bool v45; // al@60
  unsigned int v46; // ecx@68
  unsigned int v47; // edx@68
  GuildAcademySelectWin::GuildInfo *_Next; // [sp+4h] [bp-58h]@2
  GuildAcademySelectWin::GuildInfo _Val; // [sp+8h] [bp-54h]@3
  unsigned int v50; // [sp+4Ch] [bp-10h]@1
  int v51; // [sp+58h] [bp-4h]@3
  int v52; // [sp+5Ch] [bp+0h]@1

  v50 = (unsigned int)&v52 ^ __security_cookie;
  v4 = _First;
  if ( _First == _Last || (v5 = _First + 1, _Next = _First + 1, &_First[1] == _Last) )
    return;
  do
  {
    v6 = (int)v5;
    _Val.m_strGuildName.baseclass_0._Myres = 15;
    _Val.m_strGuildName.baseclass_0._Mysize = 0;
    _Val.m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &_Val.m_strGuildName,
      &v5->m_strGuildName,
      0,
      0xFFFFFFFFu);
    v51 = 0;
    _Val.m_MasterName.baseclass_0._Mysize = 0;
    _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    _Val.m_MasterName.baseclass_0._Myres = 15;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &_Val.m_MasterName,
      &v5->m_MasterName,
      0,
      0xFFFFFFFFu);
    v7 = v5->m_unGuildMember;
    v8 = v5->m_unGuildAcademy;
    v9 = v5->m_unGuildGraduates;
    _Val.m_unGuildMember = v5->m_unGuildMember;
    _Val.m_unGuildAcademy = v8;
    _Val.m_unGuildGraduates = v9;
    v10 = v4->m_unGuildAcademy;
    v51 = 1;
    if ( v8 >= v10 )
    {
      if ( v8 != v10 )
        goto LABEL_34;
      v11 = v4->m_unGuildMember;
      v12 = v11 < v7;
      if ( v11 == v7 )
      {
        if ( _Val.m_unGuildGraduates == v4->m_unGuildGraduates )
        {
          v13 = v4->m_strGuildName.baseclass_0._Mysize;
          if ( v4->m_strGuildName.baseclass_0._Myres < 0x10 )
            v14 = (const char *)v4;
          else
            v14 = *(const char **)&v4->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
          if ( _Val.m_strGuildName.baseclass_0._Mysize < v13 )
            v13 = _Val.m_strGuildName.baseclass_0._Mysize;
          v15 = *(const char **)&_Val;
          if ( _Val.m_strGuildName.baseclass_0._Myres < 0x10 )
            v15 = (const char *)&_Val;
          v16 = std::char_traits<char>::compare(v15, v14, v13);
          v17 = _Val.m_strGuildName.baseclass_0._Mysize;
          v18 = v16 < 0;
          if ( !v16 )
          {
            v19 = v4->m_strGuildName.baseclass_0._Mysize;
            if ( _Val.m_strGuildName.baseclass_0._Mysize < v19 )
            {
LABEL_18:
              if ( v4->m_strGuildName.baseclass_0._Myres < 0x10 )
                v20 = (const char *)v4;
              else
                v20 = *(const char **)&v4->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
              if ( _Val.m_strGuildName.baseclass_0._Mysize >= v4->m_strGuildName.baseclass_0._Mysize )
                v17 = v4->m_strGuildName.baseclass_0._Mysize;
              v21 = *(const char **)&_Val;
              if ( _Val.m_strGuildName.baseclass_0._Myres < 0x10 )
                v21 = (const char *)&_Val;
              v22 = std::char_traits<char>::compare(v21, v20, v17);
              v23 = v22 == 0;
              if ( !v22 )
              {
                v24 = v4->m_strGuildName.baseclass_0._Mysize;
                if ( _Val.m_strGuildName.baseclass_0._Mysize < v24 )
                {
                  v8 = _Val.m_unGuildAcademy;
                  v7 = _Val.m_unGuildMember;
                  v25 = 1;
                  goto LABEL_33;
                }
                v23 = _Val.m_strGuildName.baseclass_0._Mysize == v24;
              }
              v8 = _Val.m_unGuildAcademy;
              v7 = _Val.m_unGuildMember;
              v25 = !v23;
LABEL_33:
              if ( v25 )
              {
LABEL_34:
                std::_Move_backward<GuildListWin::GuildInfo___GuildListWin::GuildInfo__>(
                  (GuildListWin::GuildInfo *)v4,
                  (GuildListWin::GuildInfo *)v5,
                  (GuildListWin::GuildInfo *)&v5[1],
                  (std::_Nonscalar_ptr_iterator_tag)_First);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                  &v4->m_strGuildName,
                  &_Val.m_strGuildName,
                  0,
                  0xFFFFFFFFu);
                std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                  &v4->m_MasterName,
                  &_Val.m_MasterName,
                  0,
                  0xFFFFFFFFu);
                v26 = _Val.m_unGuildAcademy;
                v27 = _Val.m_unGuildGraduates;
                v4->m_unGuildMember = _Val.m_unGuildMember;
                v4->m_unGuildAcademy = v26;
                v4->m_unGuildGraduates = v27;
                goto LABEL_69;
              }
              goto LABEL_35;
            }
            v18 = (_Val.m_strGuildName.baseclass_0._Mysize != v19) < 0;
          }
          if ( v18 )
            goto LABEL_18;
          v8 = _Val.m_unGuildAcademy;
          v7 = _Val.m_unGuildMember;
        }
        v12 = v4->m_unGuildGraduates < _Val.m_unGuildGraduates;
      }
      v25 = v12;
      goto LABEL_33;
    }
LABEL_35:
    v28 = (int)&v5->m_strGuildName.baseclass_0._Myres;
    while ( 1 )
    {
      v29 = *(_DWORD *)(v28 - 28);
      v28 -= 68;
      if ( v8 < v29 )
        break;
      if ( v8 != v29 )
        goto LABEL_67;
      v30 = *(_DWORD *)(v28 + 36);
      v31 = v30 < v7;
      if ( v30 != v7 )
        goto LABEL_65;
      if ( _Val.m_unGuildGraduates != *(_DWORD *)(v28 + 44) )
        goto LABEL_64;
      v32 = v28 - 20;
      if ( *(_DWORD *)v28 < 0x10u )
        v33 = (const char *)(v28 - 20);
      else
        v33 = *(const char **)v32;
      v34 = _Val.m_strGuildName.baseclass_0._Mysize;
      if ( _Val.m_strGuildName.baseclass_0._Mysize >= *(_DWORD *)(v28 - 4) )
        v34 = *(_DWORD *)(v28 - 4);
      v35 = *(const char **)&_Val;
      if ( _Val.m_strGuildName.baseclass_0._Myres < 0x10 )
        v35 = (const char *)&_Val;
      v36 = std::char_traits<char>::compare(v35, v33, v34);
      v37 = _Val.m_strGuildName.baseclass_0._Mysize;
      v38 = v36 < 0;
      if ( !v36 )
      {
        v39 = *(_DWORD *)(v28 - 4);
        if ( _Val.m_strGuildName.baseclass_0._Mysize < v39 )
          goto LABEL_51;
        v38 = (_Val.m_strGuildName.baseclass_0._Mysize != v39) < 0;
      }
      if ( !v38 )
      {
        v5 = _Next;
LABEL_64:
        v31 = *(_DWORD *)(v28 + 44) < _Val.m_unGuildGraduates;
LABEL_65:
        v45 = v31;
        goto LABEL_66;
      }
LABEL_51:
      if ( *(_DWORD *)v28 < 0x10u )
        v40 = (const char *)(v28 - 20);
      else
        v40 = *(const char **)v32;
      if ( _Val.m_strGuildName.baseclass_0._Mysize >= *(_DWORD *)(v28 - 4) )
        v37 = *(_DWORD *)(v28 - 4);
      v41 = *(const char **)&_Val;
      if ( _Val.m_strGuildName.baseclass_0._Myres < 0x10 )
        v41 = (const char *)&_Val;
      v42 = std::char_traits<char>::compare(v41, v40, v37);
      v43 = v42 == 0;
      if ( !v42 )
      {
        v44 = *(_DWORD *)(v28 - 4);
        if ( _Val.m_strGuildName.baseclass_0._Mysize < v44 )
        {
          v5 = _Next;
          v45 = 1;
          goto LABEL_66;
        }
        v43 = _Val.m_strGuildName.baseclass_0._Mysize == v44;
      }
      v5 = _Next;
      v45 = !v43;
LABEL_66:
      if ( !v45 )
        break;
LABEL_67:
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v28 - 20),
        0,
        0xFFFFFFFFu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 + 28),
        (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v28 + 8),
        0,
        0xFFFFFFFFu);
      *(_DWORD *)(v6 + 56) = *(_DWORD *)(v28 + 36);
      v8 = _Val.m_unGuildAcademy;
      *(_DWORD *)(v6 + 60) = *(_DWORD *)(v28 + 40);
      v7 = _Val.m_unGuildMember;
      *(_DWORD *)(v6 + 64) = *(_DWORD *)(v28 + 44);
      v6 = v28 - 20;
      v5 = _Next;
    }
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
      &_Val.m_strGuildName,
      0,
      0xFFFFFFFFu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v6 + 28),
      &_Val.m_MasterName,
      0,
      0xFFFFFFFFu);
    v46 = _Val.m_unGuildAcademy;
    v47 = _Val.m_unGuildGraduates;
    v4 = _First;
    *(_DWORD *)(v6 + 56) = _Val.m_unGuildMember;
    *(_DWORD *)(v6 + 60) = v46;
    *(_DWORD *)(v6 + 64) = v47;
LABEL_69:
    v51 = -1;
    if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Val.m_MasterName.baseclass_0._Myres = 15;
    _Val.m_MasterName.baseclass_0._Mysize = 0;
    _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Val);
    ++v5;
    _Next = v5;
  }
  while ( v5 != _Last );
}
// A85C00: using guessed type int __security_cookie;

//----- (006F3D40) --------------------------------------------------------
void __cdecl std::_Pop_heap_0<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred, GuildAcademySelectWin::GuildInfo *__formal)
{
  GuildAcademySelectWin::GuildInfo _Val; // [sp+0h] [bp-54h]@1
  unsigned int v5; // [sp+44h] [bp-10h]@1
  int v6; // [sp+50h] [bp-4h]@1
  int v7; // [sp+54h] [bp+0h]@1

  v5 = (unsigned int)&v7 ^ __security_cookie;
  GuildListWin::GuildInfo::GuildInfo((GuildListWin::GuildInfo *)&_Val, (GuildListWin::GuildInfo *)&_Last[-1]);
  v6 = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &_Last[-1].m_strGuildName,
    &_First->m_strGuildName,
    0,
    0xFFFFFFFFu);
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)&_Last->m_MasterName - 68),
    &_First->m_MasterName,
    0,
    0xFFFFFFFFu);
  *(&_Last->m_unGuildMember - 17) = _First->m_unGuildMember;
  *(&_Last->m_unGuildAcademy - 17) = _First->m_unGuildAcademy;
  *(&_Last->m_unGuildGraduates - 17) = _First->m_unGuildGraduates;
  std::_Adjust_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(
    _First,
    0,
    (signed int)((char *)_Last - (char *)_First - 68) / 68,
    &_Val,
    _Pred);
  if ( _Val.m_MasterName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0]);
  _Val.m_MasterName.baseclass_0._Myres = 15;
  _Val.m_MasterName.baseclass_0._Mysize = 0;
  _Val.m_MasterName.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( _Val.m_strGuildName.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&_Val);
}
// A85C00: using guessed type int __security_cookie;

//----- (006F3E40) --------------------------------------------------------
std::pair<GuildAcademySelectWin::GuildInfo *,GuildAcademySelectWin::GuildInfo *> *__cdecl std::_Unguarded_partition<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(std::pair<GuildAcademySelectWin::GuildInfo *,GuildAcademySelectWin::GuildInfo *> *result, GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred)
{
  unsigned int v4; // esi@1
  unsigned int v5; // ebx@1
  int v6; // edi@1
  int v7; // esi@2
  unsigned int v8; // eax@3
  unsigned int v9; // ecx@3
  unsigned int v10; // eax@5
  unsigned int v11; // ecx@5
  bool v12; // cf@5
  const char *v13; // eax@8
  const char *v14; // eax@12
  bool v15; // al@14
  unsigned int v16; // eax@19
  unsigned int v17; // ecx@19
  unsigned int v18; // eax@21
  unsigned int v19; // ecx@21
  bool v20; // cf@21
  const char *v21; // edi@23
  const char *v22; // eax@24
  int v23; // eax@29
  bool v24; // al@29
  unsigned int v25; // eax@37
  unsigned int v26; // ecx@37
  unsigned int v27; // eax@39
  unsigned int v28; // ecx@39
  bool v29; // cf@39
  const char *v30; // eax@42
  const char *v31; // eax@46
  bool v32; // al@48
  unsigned int v33; // eax@52
  unsigned int v34; // ecx@52
  unsigned int v35; // eax@54
  unsigned int v36; // ecx@54
  bool v37; // cf@54
  const char *v38; // ecx@57
  const char *v39; // ecx@61
  bool v40; // al@63
  unsigned int v41; // eax@71
  unsigned int v42; // ecx@71
  const char *v43; // edx@73
  unsigned int v44; // eax@73
  unsigned int v45; // ecx@73
  bool v46; // cf@73
  unsigned int v47; // edi@75
  unsigned int v48; // esi@77
  unsigned int v49; // ecx@77
  const char *v50; // eax@80
  int v51; // eax@82
  bool v52; // sf@82
  const char *v53; // edx@86
  unsigned int v54; // ecx@88
  const char *v55; // eax@91
  int v56; // eax@93
  bool v57; // zf@93
  bool v58; // al@95
  unsigned int v59; // eax@103
  unsigned int v60; // ecx@103
  bool v61; // cf@103
  const char *v62; // edx@105
  unsigned int v63; // ebx@105
  unsigned int v64; // edi@105
  unsigned int v65; // esi@107
  unsigned int v66; // ecx@107
  const char *v67; // eax@109
  int v68; // eax@111
  bool v69; // sf@111
  const char *v70; // eax@116
  bool v71; // al@118
  GuildListWin::GuildInfo *v72; // ST08_4@122
  unsigned int v73; // edi@124
  bool v74; // zf@124
  unsigned int v75; // eax@125
  unsigned int v76; // ecx@125
  unsigned int v77; // eax@127
  unsigned int v78; // ecx@127
  bool v79; // cf@127
  unsigned int v80; // edx@129
  const char *v81; // ecx@130
  const char *v82; // esi@135
  signed int v83; // eax@141
  int v84; // eax@148
  bool v85; // sf@150
  unsigned int v86; // esi@151
  unsigned int v87; // eax@151
  const char *v88; // edx@155
  unsigned int v89; // ecx@157
  unsigned int v90; // esi@157
  const char *v91; // eax@160
  int v92; // eax@162
  bool v93; // zf@162
  unsigned int v94; // eax@163
  bool v95; // al@164
  unsigned int v96; // ecx@170
  unsigned int v97; // eax@170
  unsigned int v98; // eax@172
  unsigned int v99; // ecx@172
  bool v100; // cf@172
  const char *v101; // edx@174
  unsigned int v102; // edi@174
  unsigned int v103; // esi@176
  unsigned int v104; // ecx@176
  const char *v105; // eax@179
  int v106; // eax@181
  bool v107; // sf@181
  const char *v108; // edx@185
  unsigned int v109; // ecx@187
  const char *v110; // eax@190
  int v111; // eax@192
  bool v112; // zf@192
  bool v113; // al@194
  GuildListWin::GuildInfo *v114; // esi@204
  GuildListWin::GuildInfo *v115; // ST08_4@208
  GuildListWin::GuildInfo *v116; // edi@209
  std::pair<GuildAcademySelectWin::GuildInfo *,GuildAcademySelectWin::GuildInfo *> *v117; // eax@214
  unsigned int _Glast; // [sp+Ch] [bp-10h]@69
  GuildListWin::GuildInfo *_Plast; // [sp+10h] [bp-Ch]@1
  GuildAcademySelectWin::GuildInfo *_Pfirst; // [sp+14h] [bp-8h]@1
  unsigned int _Pfirsta; // [sp+14h] [bp-8h]@125
  unsigned int _Gfirst; // [sp+18h] [bp-4h]@69

  v4 = (unsigned int)&_First[(signed int)(_Last - _First) / 2];
  std::_Median<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(
    _First,
    &_First[(signed int)(_Last - _First) / 2],
    _Last - 1,
    _Pred);
  v5 = v4;
  v6 = v4 + 68;
  _Pfirst = &_First[(signed int)(_Last - _First) / 2];
  _Plast = (GuildListWin::GuildInfo *)(v4 + 68);
  if ( (unsigned int)_First < v4 )
  {
    v7 = v4 - 52;
    while ( 1 )
    {
      v8 = *(_DWORD *)(v7 + 44);
      v9 = *(_DWORD *)(v7 + 112);
      if ( v8 < v9 )
        goto LABEL_19;
      if ( v8 != v9 )
        goto LABEL_35;
      v10 = *(_DWORD *)(v7 + 40);
      v11 = *(_DWORD *)(v7 + 108);
      v12 = v11 < v10;
      if ( v11 != v10 )
        goto LABEL_17;
      if ( *(_DWORD *)(v7 + 48) != *(_DWORD *)(v7 + 116) )
        goto LABEL_16;
      v13 = (const char *)(*(_DWORD *)(v7 + 72) < 0x10u ? v5 : *(_DWORD *)v5);
      if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
             (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v7 - 16),
             0,
             *(_DWORD *)v7,
             v13,
             *(_DWORD *)(v7 + 68)) >= 0 )
        break;
      if ( *(_DWORD *)(v7 + 72) < 0x10u )
        v14 = (const char *)v5;
      else
        v14 = *(const char **)v5;
      v6 = (int)_Plast;
      v15 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(v7 - 16),
              0,
              *(_DWORD *)v7,
              v14,
              *(_DWORD *)(v7 + 68)) != 0;
LABEL_18:
      if ( v15 )
        goto LABEL_35;
LABEL_19:
      v16 = *(_DWORD *)(v7 + 112);
      v17 = *(_DWORD *)(v7 + 44);
      if ( v16 >= v17 )
      {
        if ( v16 != v17 )
          goto LABEL_35;
        v18 = *(_DWORD *)(v7 + 108);
        v19 = *(_DWORD *)(v7 + 40);
        v20 = v19 < v18;
        if ( v19 == v18 )
        {
          if ( *(_DWORD *)(v7 + 116) == *(_DWORD *)(v7 + 48) )
          {
            v21 = (const char *)(v7 - 16);
            if ( *(_DWORD *)(v7 + 4) < 0x10u )
              v22 = (const char *)(v7 - 16);
            else
              v22 = *(const char **)v21;
            if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                   (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5,
                   0,
                   *(_DWORD *)(v7 + 68),
                   v22,
                   *(_DWORD *)v7) < 0 )
            {
              if ( *(_DWORD *)(v7 + 4) >= 0x10u )
                v21 = *(const char **)v21;
              v23 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5,
                      0,
                      *(_DWORD *)(v7 + 68),
                      v21,
                      *(_DWORD *)v7);
              v6 = (int)_Plast;
              v24 = v23 != 0;
LABEL_33:
              if ( v24 )
                goto LABEL_35;
              goto LABEL_34;
            }
            v6 = (int)_Plast;
          }
          v20 = *(_DWORD *)(v7 + 48) < *(_DWORD *)(v7 + 116);
        }
        v24 = v20;
        goto LABEL_33;
      }
LABEL_34:
      v5 -= 68;
      v7 -= 68;
      if ( (unsigned int)_First >= v5 )
      {
LABEL_35:
        _Pfirst = (GuildAcademySelectWin::GuildInfo *)v5;
        goto LABEL_36;
      }
    }
    v6 = (int)_Plast;
LABEL_16:
    v12 = *(_DWORD *)(v7 + 116) < *(_DWORD *)(v7 + 48);
LABEL_17:
    v15 = v12;
    goto LABEL_18;
  }
LABEL_36:
  if ( v6 < (unsigned int)_Last )
  {
    while ( 1 )
    {
      v25 = *(_DWORD *)(v6 + 60);
      v26 = *(_DWORD *)(v5 + 60);
      if ( v25 < v26 )
        goto LABEL_52;
      if ( v25 != v26 )
        goto LABEL_68;
      v27 = *(_DWORD *)(v6 + 56);
      v28 = *(_DWORD *)(v5 + 56);
      v29 = v28 < v27;
      if ( v28 != v27 )
        goto LABEL_50;
      if ( *(_DWORD *)(v6 + 64) != *(_DWORD *)(v5 + 64) )
        break;
      v30 = (const char *)(*(_DWORD *)(v5 + 20) < 0x10u ? v5 : *(_DWORD *)v5);
      if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
             (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
             0,
             *(_DWORD *)(v6 + 16),
             v30,
             *(_DWORD *)(v5 + 16)) >= 0 )
        break;
      if ( *(_DWORD *)(v5 + 20) < 0x10u )
        v31 = (const char *)v5;
      else
        v31 = *(const char **)v5;
      v32 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
              (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v6,
              0,
              *(_DWORD *)(v6 + 16),
              v31,
              *(_DWORD *)(v5 + 16)) != 0;
LABEL_51:
      if ( v32 )
        goto LABEL_68;
LABEL_52:
      v33 = *(_DWORD *)(v5 + 60);
      v34 = *(_DWORD *)(v6 + 60);
      if ( v33 >= v34 )
      {
        if ( v33 != v34 )
          goto LABEL_68;
        v35 = *(_DWORD *)(v5 + 56);
        v36 = *(_DWORD *)(v6 + 56);
        v37 = v36 < v35;
        if ( v36 == v35 )
        {
          if ( *(_DWORD *)(v5 + 64) == *(_DWORD *)(v6 + 64) )
          {
            v38 = (const char *)(*(_DWORD *)(v6 + 20) < 0x10u ? v6 : *(_DWORD *)v6);
            if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                   (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5,
                   0,
                   *(_DWORD *)(v5 + 16),
                   v38,
                   *(_DWORD *)(v6 + 16)) < 0 )
            {
              if ( *(_DWORD *)(v6 + 20) < 0x10u )
                v39 = (const char *)v6;
              else
                v39 = *(const char **)v6;
              v40 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5,
                      0,
                      *(_DWORD *)(v5 + 16),
                      v39,
                      *(_DWORD *)(v6 + 16)) != 0;
LABEL_66:
              if ( v40 )
                goto LABEL_68;
              goto LABEL_67;
            }
          }
          v37 = *(_DWORD *)(v6 + 64) < *(_DWORD *)(v5 + 64);
        }
        v40 = v37;
        goto LABEL_66;
      }
LABEL_67:
      v6 += 68;
      if ( v6 >= (unsigned int)_Last )
      {
LABEL_68:
        _Plast = (GuildListWin::GuildInfo *)v6;
        goto LABEL_69;
      }
    }
    v29 = *(_DWORD *)(v5 + 64) < *(_DWORD *)(v6 + 64);
LABEL_50:
    v32 = v29;
    goto LABEL_51;
  }
LABEL_69:
  _Gfirst = v6;
  _Glast = v5;
  while ( 2 )
  {
    while ( 2 )
    {
      if ( _Gfirst < (unsigned int)_Last )
      {
        while ( 1 )
        {
          v41 = *(_DWORD *)(v5 + 60);
          v42 = *(_DWORD *)(_Gfirst + 60);
          if ( v41 < v42 )
          {
LABEL_101:
            if ( *(_DWORD *)(_Gfirst + 60) < *(_DWORD *)(v5 + 60) )
              goto LABEL_122;
            if ( *(_DWORD *)(_Gfirst + 60) != *(_DWORD *)(v5 + 60) )
              goto LABEL_124;
            v59 = *(_DWORD *)(_Gfirst + 56);
            v60 = *(_DWORD *)(v5 + 56);
            v61 = v60 < v59;
            if ( v60 == v59 )
            {
              if ( *(_DWORD *)(_Gfirst + 64) == *(_DWORD *)(v5 + 64) )
              {
                v62 = (const char *)_Pfirst;
                v63 = _Pfirst->m_strGuildName.baseclass_0._Myres;
                v64 = _Pfirst->m_strGuildName.baseclass_0._Mysize;
                if ( v63 >= 0x10 )
                  v62 = *(const char **)&_Pfirst->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
                v65 = *(_DWORD *)(_Gfirst + 16);
                v66 = v65;
                if ( v65 >= v64 )
                  v66 = _Pfirst->m_strGuildName.baseclass_0._Mysize;
                v67 = (const char *)_Gfirst;
                if ( *(_DWORD *)(_Gfirst + 20) >= 0x10u )
                  v67 = *(const char **)_Gfirst;
                v68 = std::char_traits<char>::compare(v67, v62, v66);
                v69 = v68 < 0;
                if ( !v68 )
                {
                  if ( v65 >= v64 )
                  {
                    LOBYTE(v68) = v65 != v64;
                    v69 = v68 < 0;
                    goto LABEL_114;
                  }
LABEL_115:
                  if ( v63 < 0x10 )
                    v70 = (const char *)_Pfirst;
                  else
                    v70 = *(const char **)&_Pfirst->m_strGuildName.baseclass_0.___u0.baseclass_0.dummy[0];
                  v71 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
                          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)_Gfirst,
                          0,
                          v65,
                          v70,
                          v64) != 0;
LABEL_121:
                  v5 = (unsigned int)_Pfirst;
                  if ( v71 )
                    goto LABEL_124;
LABEL_122:
                  v72 = _Plast;
                  ++_Plast;
                  std::swap<GTRequestListWin::GuildInfo>(v72, (GuildListWin::GuildInfo *)_Gfirst);
                  goto LABEL_123;
                }
LABEL_114:
                if ( v69 )
                  goto LABEL_115;
              }
              v61 = _Pfirst->m_unGuildGraduates < *(_DWORD *)(_Gfirst + 64);
            }
            v71 = v61;
            goto LABEL_121;
          }
          if ( v41 == v42 )
            break;
LABEL_123:
          _Gfirst += 68;
          if ( _Gfirst >= (unsigned int)_Last )
            goto LABEL_124;
        }
        v43 = (const char *)_Gfirst;
        v44 = *(_DWORD *)(v5 + 56);
        v45 = *(_DWORD *)(_Gfirst + 56);
        v46 = v45 < v44;
        if ( v45 == v44 )
        {
          if ( *(_DWORD *)(v5 + 64) == *(_DWORD *)(_Gfirst + 64) )
          {
            v47 = *(_DWORD *)(_Gfirst + 16);
            if ( *(_DWORD *)(_Gfirst + 20) >= 0x10u )
              v43 = *(const char **)_Gfirst;
            v48 = *(_DWORD *)(v5 + 16);
            v49 = v48;
            if ( v48 >= v47 )
              v49 = *(_DWORD *)(_Gfirst + 16);
            if ( *(_DWORD *)(v5 + 20) < 0x10u )
              v50 = (const char *)v5;
            else
              v50 = *(const char **)v5;
            v51 = std::char_traits<char>::compare(v50, v43, v49);
            v52 = v51 < 0;
            if ( !v51 )
            {
              if ( v48 < v47 )
              {
LABEL_86:
                v53 = (const char *)_Gfirst;
                if ( *(_DWORD *)(_Gfirst + 20) >= 0x10u )
                  v53 = *(const char **)_Gfirst;
                v54 = v48;
                if ( v48 >= v47 )
                  v54 = v47;
                if ( *(_DWORD *)(v5 + 20) < 0x10u )
                  v55 = (const char *)v5;
                else
                  v55 = *(const char **)v5;
                v56 = std::char_traits<char>::compare(v55, v53, v54);
                v57 = v56 == 0;
                if ( !v56 )
                {
                  if ( v48 < v47 )
                  {
                    v58 = 1;
                    goto LABEL_100;
                  }
                  v57 = v48 == v47;
                }
                v58 = !v57;
LABEL_100:
                if ( !v58 )
                  goto LABEL_101;
                goto LABEL_123;
              }
              LOBYTE(v51) = v48 != v47;
              v52 = v51 < 0;
            }
            if ( v52 )
              goto LABEL_86;
          }
          v46 = *(_DWORD *)(_Gfirst + 64) < *(_DWORD *)(v5 + 64);
        }
        v58 = v46;
        goto LABEL_100;
      }
LABEL_124:
      v73 = _Glast;
      v74 = _Glast == (_DWORD)_First;
      if ( _Glast <= (unsigned int)_First )
        goto LABEL_204;
      do
      {
        v75 = *(_DWORD *)(v73 - 8);
        v76 = *(_DWORD *)(v5 + 60);
        v73 -= 68;
        _Pfirsta = v73;
        if ( v75 < v76 )
          goto LABEL_170;
        if ( v75 != v76 )
          goto LABEL_202;
        v77 = *(_DWORD *)(v73 + 56);
        v78 = *(_DWORD *)(v5 + 56);
        v79 = v78 < v77;
        if ( v78 != v77 )
          goto LABEL_168;
        if ( *(_DWORD *)(v73 + 64) != *(_DWORD *)(v5 + 64) )
          goto LABEL_167;
        v80 = *(_DWORD *)(v5 + 16);
        if ( *(_DWORD *)(v5 + 20) < 0x10u )
          v81 = (const char *)v5;
        else
          v81 = *(const char **)v5;
        if ( *(_DWORD *)(v73 + 16) < v80 )
          v80 = *(_DWORD *)(v73 + 16);
        if ( *(_DWORD *)(v73 + 20) < 0x10u )
          v82 = (const char *)v73;
        else
          v82 = *(const char **)v73;
        if ( v80 < 4 )
        {
LABEL_140:
          if ( !v80 )
            goto LABEL_149;
        }
        else
        {
          while ( *(_DWORD *)v82 == *(_DWORD *)v81 )
          {
            v80 -= 4;
            v81 += 4;
            v82 += 4;
            if ( v80 < 4 )
              goto LABEL_140;
          }
        }
        v83 = (unsigned __int8)*v82 - (unsigned __int8)*v81;
        if ( *v82 != *v81 )
          goto LABEL_148;
        if ( v80 > 1 )
        {
          v83 = (unsigned __int8)v82[1] - (unsigned __int8)v81[1];
          if ( v82[1] != v81[1] )
            goto LABEL_148;
          if ( v80 > 2 )
          {
            v83 = (unsigned __int8)v82[2] - (unsigned __int8)v81[2];
            if ( v82[2] != v81[2] )
              goto LABEL_148;
            if ( v80 > 3 )
            {
              v83 = (unsigned __int8)v82[3] - (unsigned __int8)v81[3];
LABEL_148:
              v84 = (v83 >> 31) | 1;
              goto LABEL_150;
            }
          }
        }
LABEL_149:
        v84 = 0;
LABEL_150:
        v85 = v84 < 0;
        if ( !v84 )
        {
          v86 = *(_DWORD *)(v5 + 16);
          v87 = *(_DWORD *)(v73 + 16);
          if ( v87 < v86 )
            goto LABEL_154;
          v85 = (v87 != v86) < 0;
        }
        if ( !v85 )
        {
LABEL_167:
          v79 = *(_DWORD *)(v5 + 64) < *(_DWORD *)(v73 + 64);
LABEL_168:
          v95 = v79;
          goto LABEL_169;
        }
LABEL_154:
        if ( *(_DWORD *)(v5 + 20) < 0x10u )
          v88 = (const char *)v5;
        else
          v88 = *(const char **)v5;
        v89 = *(_DWORD *)(v5 + 16);
        v90 = *(_DWORD *)(v73 + 16);
        if ( v90 < v89 )
          v89 = *(_DWORD *)(v73 + 16);
        if ( *(_DWORD *)(v73 + 20) < 0x10u )
          v91 = (const char *)v73;
        else
          v91 = *(const char **)v73;
        v92 = std::char_traits<char>::compare(v91, v88, v89);
        v93 = v92 == 0;
        if ( !v92 )
        {
          v94 = *(_DWORD *)(v5 + 16);
          if ( v90 < v94 )
          {
            v95 = 1;
            goto LABEL_169;
          }
          v93 = v90 == v94;
        }
        v95 = !v93;
LABEL_169:
        if ( v95 )
          goto LABEL_202;
LABEL_170:
        v96 = *(_DWORD *)(v5 + 60);
        v97 = *(_DWORD *)(v73 + 60);
        if ( v96 >= v97 )
        {
          if ( v96 != v97 )
            break;
          v98 = *(_DWORD *)(v5 + 56);
          v99 = *(_DWORD *)(v73 + 56);
          v100 = v99 < v98;
          if ( v99 == v98 )
          {
            if ( *(_DWORD *)(v5 + 64) == *(_DWORD *)(v73 + 64) )
            {
              v101 = (const char *)v73;
              v102 = *(_DWORD *)(v73 + 16);
              if ( *(_DWORD *)(_Pfirsta + 20) >= 0x10u )
                v101 = *(const char **)_Pfirsta;
              v103 = *(_DWORD *)(v5 + 16);
              v104 = v103;
              if ( v103 >= v102 )
                v104 = *(_DWORD *)(_Pfirsta + 16);
              if ( *(_DWORD *)(v5 + 20) < 0x10u )
                v105 = (const char *)v5;
              else
                v105 = *(const char **)v5;
              v106 = std::char_traits<char>::compare(v105, v101, v104);
              v107 = v106 < 0;
              if ( !v106 )
              {
                if ( v103 < v102 )
                  goto LABEL_185;
                LOBYTE(v106) = v103 != v102;
                v107 = v106 < 0;
              }
              if ( v107 )
              {
LABEL_185:
                v108 = (const char *)_Pfirsta;
                if ( *(_DWORD *)(_Pfirsta + 20) >= 0x10u )
                  v108 = *(const char **)_Pfirsta;
                v109 = v103;
                if ( v103 >= v102 )
                  v109 = v102;
                if ( *(_DWORD *)(v5 + 20) < 0x10u )
                  v110 = (const char *)v5;
                else
                  v110 = *(const char **)v5;
                v111 = std::char_traits<char>::compare(v110, v108, v109);
                v112 = v111 == 0;
                if ( !v111 )
                {
                  if ( v103 < v102 )
                  {
                    v113 = 1;
LABEL_199:
                    if ( v113 )
                      break;
                    v73 = _Pfirsta;
                    goto LABEL_201;
                  }
                  v112 = v103 == v102;
                }
                v113 = !v112;
                goto LABEL_199;
              }
            }
            v100 = *(_DWORD *)(_Pfirsta + 64) < *(_DWORD *)(v5 + 64);
          }
          v113 = v100;
          goto LABEL_199;
        }
LABEL_201:
        v5 -= 68;
        std::swap<GTRequestListWin::GuildInfo>((GuildListWin::GuildInfo *)v5, (GuildListWin::GuildInfo *)v73);
LABEL_202:
        _Glast = v73;
      }
      while ( (unsigned int)_First < v73 );
      v73 = _Glast;
      v74 = _Glast == (_DWORD)_First;
      _Pfirst = (GuildAcademySelectWin::GuildInfo *)v5;
LABEL_204:
      v114 = (GuildListWin::GuildInfo *)_Gfirst;
      if ( !v74 )
      {
        v116 = (GuildListWin::GuildInfo *)(v73 - 68);
        _Glast = (unsigned int)v116;
        if ( (GuildAcademySelectWin::GuildInfo *)_Gfirst == _Last )
        {
          v5 -= 68;
          _Pfirst = (GuildAcademySelectWin::GuildInfo *)v5;
          if ( v116 != (GuildListWin::GuildInfo *)v5 )
            std::swap<GTRequestListWin::GuildInfo>(v116, (GuildListWin::GuildInfo *)v5);
          --_Plast;
          std::swap<GTRequestListWin::GuildInfo>((GuildListWin::GuildInfo *)v5, _Plast);
        }
        else
        {
          std::swap<GTRequestListWin::GuildInfo>((GuildListWin::GuildInfo *)_Gfirst, v116);
          _Gfirst += 68;
        }
        continue;
      }
      break;
    }
    if ( (GuildAcademySelectWin::GuildInfo *)_Gfirst != _Last )
    {
      if ( _Plast != (GuildListWin::GuildInfo *)_Gfirst )
        std::swap<GTRequestListWin::GuildInfo>((GuildListWin::GuildInfo *)v5, _Plast);
      v115 = (GuildListWin::GuildInfo *)v5;
      v5 += 68;
      ++_Plast;
      _Pfirst = (GuildAcademySelectWin::GuildInfo *)v5;
      _Gfirst += 68;
      std::swap<GTRequestListWin::GuildInfo>(v115, v114);
      continue;
    }
    break;
  }
  v117 = result;
  result->baseclass_0.first = (GuildAcademySelectWin::GuildInfo *)v5;
  result->baseclass_0.second = (GuildAcademySelectWin::GuildInfo *)_Plast;
  return v117;
}

//----- (006F4560) --------------------------------------------------------
void __cdecl std::_Sort_heap<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, GuildAcademySelectWin::Order _Pred)
{
  GuildAcademySelectWin::GuildInfo *v3; // esi@1
  signed int i; // edi@1

  v3 = _Last;
  for ( i = (char *)_Last - (char *)_First; i / 68 > 1; --v3 )
  {
    std::_Pop_heap_0<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(
      _First,
      v3,
      _Pred,
      0);
    i -= 68;
  }
}

//----- (006F45C0) --------------------------------------------------------
void *__thiscall GuildAcademySelectWin::_vector_deleting_destructor_(GuildAcademySelectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildAcademySelectWin::_GuildAcademySelectWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006F45F0) --------------------------------------------------------
void __cdecl std::_Sort<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::Order>(GuildAcademySelectWin::GuildInfo *_First, GuildAcademySelectWin::GuildInfo *_Last, int _Ideal, GuildAcademySelectWin::Order _Pred)
{
  GuildAcademySelectWin::GuildInfo *v4; // ebx@1
  GuildAcademySelectWin::GuildInfo *v5; // edi@1
  int v6; // eax@1
  signed int v7; // esi@2
  std::pair<GuildAcademySelectWin::GuildInfo *,GuildAcademySelectWin::GuildInfo *> _Mid; // [sp+Ch] [bp-8h]@4

  v4 = _First;
  v5 = _Last;
  v6 = _Last - _First;
  if ( v6 <= 32 )
    goto LABEL_8;
  v7 = _Ideal;
  while ( v7 > 0 )
  {
    std::_Unguarded_partition<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(&_Mid, v4, v5, _Pred);
    v7 = v7 / 2 / 2 + v7 / 2;
    if ( ((signed int)_Mid.baseclass_0.first - (signed int)v4) / 68 >= (signed int)(v5 - _Mid.baseclass_0.second) )
    {
      std::_Sort<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::Order>(
        _Mid.baseclass_0.second,
        v5,
        v7,
        _Pred);
      v5 = _Mid.baseclass_0.first;
    }
    else
    {
      std::_Sort<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::Order>(
        v4,
        _Mid.baseclass_0.first,
        v7,
        _Pred);
      v4 = _Mid.baseclass_0.second;
    }
    v6 = v5 - v4;
    if ( v6 <= 32 )
      goto LABEL_8;
  }
  if ( v6 <= 32 )
  {
LABEL_8:
    if ( v6 > 1 )
      std::_Insertion_sort1<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order_GuildAcademySelectWin::GuildInfo>(
        v4,
        v5,
        _Pred,
        0);
  }
  else
  {
    if ( (signed int)(v5 - v4) > 1 )
      std::_Make_heap<GuildAcademySelectWin::GuildInfo___int_GuildAcademySelectWin::GuildInfo_GuildAcademySelectWin::Order>(
        v4,
        v5,
        _Pred,
        0,
        0);
    std::_Sort_heap<GuildAcademySelectWin::GuildInfo___GuildAcademySelectWin::Order>(v4, v5, _Pred);
  }
}

//----- (006F4730) --------------------------------------------------------
void __thiscall GuildAcademyStorageTabWin::GuildAcademyStorageTabWin(GuildAcademyStorageTabWin *this)
{
  GuildAcademyStorageTabWin *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageTabWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageTabWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.m_bDroppable = 1;
}
// 9D0740: using guessed type int (__stdcall *GuildAcademyStorageTabWin___vftable_)(int uiFlags);
// 9D075C: using guessed type int (__thiscall *GuildAcademyStorageTabWin___vftable_)(void *p, char);

//----- (006F4760) --------------------------------------------------------
void __thiscall GuildAcademyStorageTabWin::_GuildAcademyStorageTabWin(GuildAcademyStorageTabWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageTabWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageTabWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9D0740: using guessed type int (__stdcall *GuildAcademyStorageTabWin___vftable_)(int uiFlags);
// 9D075C: using guessed type int (__thiscall *GuildAcademyStorageTabWin___vftable_)(void *p, char);

//----- (006F4780) --------------------------------------------------------
bool __thiscall GuildAcademyStorageTabWin::Create(GuildAcademyStorageTabWin *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  return PgWinBut::Create(&this->baseclass_0, iXPos, iYPos, pkSprData, pkParent, uiCmdMsg, 0, 0) != 0;
}

//----- (006F47B0) --------------------------------------------------------
void __thiscall GuildAcademyStorageInvWin::GuildAcademyStorageInvWin(GuildAcademyStorageInvWin *this)
{
  GuildAcademyStorageInvWin *v1; // esi@1

  v1 = this;
  ItemIcon::ItemIcon(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageInvWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageInvWin::_vftable_;
  v1->m_uiInvIndex = -1;
  ItemIcon::SetItem(&v1->baseclass_0, 0, 1);
}
// 9D0994: using guessed type int (__stdcall *GuildAcademyStorageInvWin___vftable_)(int uiFlags);
// 9D09B4: using guessed type int (__thiscall *GuildAcademyStorageInvWin___vftable_)(void *p, char);

//----- (006F4820) --------------------------------------------------------
void __thiscall GuildAcademyStorageInvWin::_GuildAcademyStorageInvWin(GuildAcademyStorageInvWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
}
// 9D0994: using guessed type int (__stdcall *GuildAcademyStorageInvWin___vftable_)(int uiFlags);
// 9D09B4: using guessed type int (__thiscall *GuildAcademyStorageInvWin___vftable_)(void *p, char);

//----- (006F4840) --------------------------------------------------------
bool __thiscall GuildAcademyStorageInvWin::Create(GuildAcademyStorageInvWin *this, int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  GuildAcademyStorageInvWin *v5; // esi@1
  bool result; // al@1

  v5 = this;
  result = ItemIcon::Create(&this->baseclass_0, iXPos, iYPos, pkParent);
  if ( result )
  {
    v5->m_uiInvIndex = uiInvIndex;
    result = 1;
  }
  return result;
}

//----- (006F4880) --------------------------------------------------------
void __thiscall GuildAcademyStorageInvWin::OnFirstHitWin(GuildAcademyStorageInvWin *this)
{
  GuildAcademyStorageInvWin *v1; // esi@1
  ItemInfoWin *v2; // edi@2
  Item *v3; // eax@3

  v1 = this;
  if ( ItemIcon::GetItem(&this->baseclass_0) )
  {
    v2 = (ItemInfoWin *)v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin;
    if ( v2 )
    {
      v3 = ItemIcon::GetItem(&v1->baseclass_0);
      ItemInfoWin::SetItemInfo(v2, v3);
      PgWin::OnFirstHitWin(&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (006F48F0) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnOk(GuildAcademyStorageWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  GameFrameWork::OnCloseGuildAcademyStorage((GameFrameWork *)v1);
}

//----- (006F4910) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnCancel(GuildAcademyStorageWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  GameFrameWork::OnCloseGuildAcademyStorage((GameFrameWork *)v1);
}

//----- (006F4940) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnDrawingMoneyWinOk(GuildAcademyStorageWin *this, __int64 i64Money)
{
  PROTO_NC_ITEM_WITHDRAW_REQ kProto; // [sp+0h] [bp-8h]@1

  kProto.cen = i64Money;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x2Fu, &kProto, 8);
}

//----- (006F4970) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnDepositMoneyWinOk(GuildAcademyStorageWin *this, __int64 i64Money)
{
  PROTO_NC_ITEM_DEPOSIT_REQ kProto; // [sp+0h] [bp-8h]@1

  kProto.cen = i64Money;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0xCu, 0x31u, &kProto, 8);
}

//----- (006F49A0) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::ResetContents(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // ebx@1
  ItemIcon **v2; // esi@1
  signed int v3; // edi@2
  unsigned int v4; // esi@4
  ItemIcon **v5; // edi@4
  Item *v6; // eax@5

  v1 = this;
  v2 = (ItemIcon **)this->m_apkInvWin;
  if ( this->m_apkInvWin[0] )
  {
    v3 = 36;
    do
    {
      ItemIcon::SetItem(*v2, 0, 1);
      ++v2;
      --v3;
    }
    while ( v3 );
    v4 = 0;
    v5 = (ItemIcon **)v1->m_apkInvWin;
    do
    {
      v6 = GuildAcademyStorage::Get(v4 + 36 * v1->m_uiCurPage);
      ItemIcon::SetItem(*v5, v6, 1);
      ++v4;
      ++v5;
    }
    while ( v4 < 0x24 );
  }
}

//----- (006F4A10) --------------------------------------------------------
GuildAcademyStorageInvWin *__thiscall GuildAcademyStorageWin::GetInvWin(GuildAcademyStorageWin *this, unsigned int uiIndex)
{
  GuildAcademyStorageInvWin *result; // eax@2

  if ( uiIndex < 0x48 )
    result = this->m_apkInvWin[uiIndex];
  else
    result = 0;
  return result;
}

//----- (006F4A30) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnHelpLink(GuildAcademyStorageWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "NPCBank");
}

//----- (006F4A60) --------------------------------------------------------
bool __thiscall GuildAcademyStorageTabWin::EatDropInstance(GuildAcademyStorageTabWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  PgCursor::ms_bKeepDrop = 1;
  ((void (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)();
  return 1;
}
// B70478: using guessed type char PgCursor__ms_bKeepDrop;

//----- (006F4A80) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::GuildAcademyStorageWin(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageWin::_vftable_;
  v1->m_kDrop.m_pkSender = 0;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  v1->m_kDropContents.m_uiLot = 0;
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDropContents.m_kItemID = -1;
  v1->m_uiCurPage = 0;
  v1->m_pkTitleTextWin = 0;
  v1->m_pkMoneyWin = 0;
  v1->m_kDrop.m_pkContents = &v1->m_kDropContents;
  v1->m_apkInvWin[0] = 0;
  v1->m_apkInvWin[1] = 0;
  v1->m_apkInvWin[2] = 0;
  v1->m_apkInvWin[3] = 0;
  v1->m_apkInvWin[4] = 0;
  v1->m_apkInvWin[5] = 0;
  v1->m_apkInvWin[6] = 0;
  v1->m_apkInvWin[7] = 0;
  v1->m_apkInvWin[8] = 0;
  v1->m_apkInvWin[9] = 0;
  v1->m_apkInvWin[10] = 0;
  v1->m_apkInvWin[11] = 0;
  v1->m_apkInvWin[12] = 0;
  v1->m_apkInvWin[13] = 0;
  v1->m_apkInvWin[14] = 0;
  v1->m_apkInvWin[15] = 0;
  v1->m_apkInvWin[16] = 0;
  v1->m_apkInvWin[17] = 0;
  v1->m_apkInvWin[18] = 0;
  v1->m_apkInvWin[19] = 0;
  v1->m_apkInvWin[20] = 0;
  v1->m_apkInvWin[21] = 0;
  v1->m_apkInvWin[22] = 0;
  v1->m_apkInvWin[23] = 0;
  v1->m_apkInvWin[24] = 0;
  v1->m_apkInvWin[25] = 0;
  v1->m_apkInvWin[26] = 0;
  v1->m_apkInvWin[27] = 0;
  v1->m_apkInvWin[28] = 0;
  v1->m_apkInvWin[29] = 0;
  v1->m_apkInvWin[30] = 0;
  v1->m_apkInvWin[31] = 0;
  v1->m_apkInvWin[32] = 0;
  v1->m_apkInvWin[33] = 0;
  v1->m_apkInvWin[34] = 0;
  v1->m_apkInvWin[35] = 0;
  v1->m_pkCopperText = 0;
  v1->m_pkSilverText = 0;
  v1->m_pkGoldText = 0;
  v1->m_pkGemText = 0;
  v1->m_bDivide = 0;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9D0C24: using guessed type int (__stdcall *GuildAcademyStorageWin___vftable_)(int uiFlags);
// 9D0C44: using guessed type int (__thiscall *GuildAcademyStorageWin___vftable_)(void *p, char);

//----- (006F4BE0) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::_GuildAcademyStorageWin(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageWin::_vftable_;
  v2 = (PgWin *)this->m_pkMoneyWin;
  if ( v2 )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v2);
  v1->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v1->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9D0C24: using guessed type int (__stdcall *GuildAcademyStorageWin___vftable_)(int uiFlags);
// 9D0C44: using guessed type int (__thiscall *GuildAcademyStorageWin___vftable_)(void *p, char);

//----- (006F4C70) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::ResetPage(GuildAcademyStorageWin *this)
{
  this->m_uiCurPage = 0;
  GuildAcademyStorageWin::ResetContents(this);
}

//----- (006F4C80) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnTab1(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_uiCurPage = 0;
  GuildAcademyStorageWin::ResetContents(v1);
}

//----- (006F4CC0) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnTab2(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  v1->m_uiCurPage = 1;
  GuildAcademyStorageWin::ResetContents(v1);
}

//----- (006F4D00) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnShowWin(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // esi@1

  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v1->m_uiCurPage = 0;
  GuildAcademyStorageWin::ResetContents(v1);
}

//----- (006F4D40) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnClose(GuildAcademyStorageWin *this)
{
  PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_CLOSE_CMD kProto; // [sp+1h] [bp-1h]@1

  kProto.nCloseType = 0;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x26u, 0x6Fu, &kProto, 1);
  InventoryWin::ms_uiMode = 0;
}
// A988D0: using guessed type int InventoryWin__ms_uiMode;

//----- (006F4D70) --------------------------------------------------------
void __thiscall GuildAcademyStorageInvWin::DoAction(GuildAcademyStorageInvWin *this)
{
  GuildAcademyStorageInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiCmdMsg,
      v1->m_uiInvIndex);
}

//----- (006F4DA0) --------------------------------------------------------
void __thiscall GuildAcademyStorageInvWin::DoRAction(GuildAcademyStorageInvWin *this)
{
  GuildAcademyStorageInvWin *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(
      &v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
      v2,
      v1->baseclass_0.baseclass_0.baseclass_0.m_uiRCmdMsg,
      v1->m_uiInvIndex);
}

//----- (006F4DD0) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnInvShiftLClick(GuildAcademyStorageWin *this, unsigned int uiInvIndex)
{
  GuildAcademyStorageWin *v2; // esi@1
  Item *v3; // edi@1
  GameFrameWork *v4; // ebx@3
  char *v5; // ST0C_4@3
  int v6; // eax@3

  v2 = this;
  v3 = ItemIcon::GetItem(&this->m_apkInvWin[uiInvIndex]->baseclass_0);
  if ( v3 )
  {
    v2->m_bDivide = 0;
    if ( (unsigned int)((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3) > 1 )
    {
      v2->m_bDivide = 1;
      LOWORD(GuildAcademyStorageWin::ms_kFrom) = GuildAcademyStorageWin::ms_kFrom & 0x3FF;
      LOWORD(GuildAcademyStorageWin::ms_kFrom) = (GuildAcademyStorageWin::ms_kFrom ^ (unsigned __int16)((_WORD)uiInvIndex + 36 * LOWORD(v2->m_uiCurPage))) & 0x3FF ^ GuildAcademyStorageWin::ms_kFrom;
      v4 = (GameFrameWork *)v2->baseclass_0.m_pkFrameWork;
      v5 = TextData::Get(0xFBF1412Eu);
      v6 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.vfptr[3].__vecDelDtor)(v3);
      GameFrameWork::OnOpenDivideWin(v4, &v2->baseclass_0.baseclass_0.baseclass_0, 0x17u, v6 - 1, v5, 2u);
    }
  }
}
// B67E7C: using guessed type int GuildAcademyStorageWin__ms_kFrom;

//----- (006F4E90) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnInvRClick(GuildAcademyStorageWin *this, unsigned int uiInvIndex)
{
  GuildAcademyStorageWin *v2; // edi@1
  CClientGuild *v3; // eax@1
  Item *v4; // eax@2
  Item *v5; // esi@2
  unsigned int v6; // eax@5
  char *v7; // eax@6
  __int16 v8; // cx@7
  PgFrameWork *v9; // esi@8
  ITEM_INVEN kTo; // [sp+4h] [bp-8h]@7
  ITEM_INVEN kFrom; // [sp+8h] [bp-4h]@7

  v2 = this;
  v3 = GuildTask::GetGuild();
  if ( CClientGuild::CanIUseStorage(v3) )
  {
    v4 = ItemIcon::GetItem(&v2->m_apkInvWin[uiInvIndex]->baseclass_0);
    v5 = v4;
    if ( v4 )
    {
      if ( !PgCursor::ms_pkDrop && IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v4->m_kStruct.itemid) )
      {
        v6 = Inventory::GetInvIdxLotIsNotMax(&g_kInventory, v5);
        if ( v6 == -1 )
        {
          v7 = TextData::Get(0x91A8CDCEu);
          GameFrameWork::AddSysMsg((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, v7);
        }
        else
        {
          v8 = 36 * LOWORD(v2->m_uiCurPage);
          kTo.Inven = v6 & 0x3FF | 0x2400;
          kFrom.Inven = (uiInvIndex + v8) & 0x3FF;
          if ( (kTo.Inven & 0x3FF) != -1 )
          {
            GameFrameWork::NcItemRelocReq((GameFrameWork *)v2->baseclass_0.m_pkFrameWork, &kFrom, &kTo);
            SoundMgr::PlayItemPutSound(&g_kSoundMgr, v5->m_kStruct.itemid);
            v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
            if ( !(unsigned __int8)(*(int (**)(void))(*(_DWORD *)v9[19].m_BackFrameID + 260))() )
              GameFrameWork::OpenInventoryWin((GameFrameWork *)v9);
          }
        }
      }
    }
  }
}
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (006F4FC0) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnDeposit(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  MoneyWin *v3; // ecx@2
  char *v4; // eax@3
  char *v5; // eax@3

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v2) )
  {
    v3 = v1->m_pkMoneyWin;
    if ( v3 )
    {
      MoneyWin::Open(v3, &v1->baseclass_0.baseclass_0.baseclass_0, 0x14u, 0, &byte_9D052F);
      v4 = TextData::Get(0x2CB89180u);
      MoneyWin::SetTitle1(v1->m_pkMoneyWin, v4);
      v5 = TextData::Get(0x382C423Du);
      MoneyWin::SetTitle2(v1->m_pkMoneyWin, v5);
    }
  }
}

//----- (006F5020) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnDrawing(GuildAcademyStorageWin *this)
{
  GuildAcademyStorageWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  MoneyWin *v3; // ecx@2
  char *v4; // eax@3
  char *v5; // eax@3
  char *v6; // eax@4

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::CanIUseStorage(v2) )
  {
    v3 = v1->m_pkMoneyWin;
    if ( v3 )
    {
      MoneyWin::Open(v3, &v1->baseclass_0.baseclass_0.baseclass_0, 0x15u, 0, &byte_9D053B);
      v4 = TextData::Get(0x89B68F88u);
      MoneyWin::SetTitle1(v1->m_pkMoneyWin, v4);
      v5 = TextData::Get(0xD5F0EF45u);
      MoneyWin::SetTitle2(v1->m_pkMoneyWin, v5);
    }
  }
  else
  {
    v6 = TextData::Get(0x6BCCC8E3u);
    GameFrameWork::AddSysMsg((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, v6);
  }
}

//----- (006F50A0) --------------------------------------------------------
bool __thiscall GuildAcademyStorageWin::DropOnInv(GuildAcademyStorageWin *this, DropContents *pkContents, unsigned int uiReceiverInvIndex)
{
  CClientGuild *v3; // eax@1
  DropContents::SenderType v4; // edx@2
  unsigned int v6; // edi@7
  PgFrameWork *v7; // eax@7
  unsigned int v8; // ebx@7
  unsigned __int16 v9; // si@7
  unsigned int v10; // ecx@7
  InventoryWin *v11; // eax@10
  InvWin *v12; // eax@11
  ItemIcon *v13; // ecx@12
  Item *v14; // eax@14
  GameFrameWork *v15; // ecx@16
  unsigned __int16 v16; // ax@19
  void *v17; // ebx@20
  unsigned __int16 v18; // ST0C_2@22
  SHINE_PUT_ON_BELONGED_ITEM v19; // eax@22
  GameFrameWork *v20; // esi@23
  int v21; // eax@27
  int v22; // eax@28
  char *v23; // eax@32
  Item *v24; // edi@35
  Item *v25; // eax@41
  GuildAcademyStorageWin *v26; // esi@43
  Item *v27; // eax@45
  unsigned int v28; // [sp-10h] [bp-28h]@23
  unsigned int pkDivideWin; // [sp+0h] [bp-18h]@7
  DropContents::SenderType eSenderType; // [sp+4h] [bp-14h]@2
  Item *pkTargetItem; // [sp+8h] [bp-10h]@14
  ITEM_INVEN kTo; // [sp+Ch] [bp-Ch]@19
  GuildAcademyStorageWin *v33; // [sp+10h] [bp-8h]@1
  ITEM_INVEN kFrom; // [sp+14h] [bp-4h]@5
  int pkInfo; // [sp+20h] [bp+8h]@21

  v33 = this;
  v3 = GuildTask::GetGuild();
  if ( !CClientGuild::AmIGuildMember(v3) )
    return 0;
  v4 = pkContents->m_eSenderType;
  eSenderType = v4;
  if ( v4 )
  {
    if ( v4 != 19 )
      return 0;
    kFrom.Inven &= 0x3FF;
  }
  else
  {
    kFrom.Inven = kFrom.Inven & 0x3FF | 0x2400;
  }
  v6 = pkContents->m_uiSenderIndex;
  v7 = v33->baseclass_0.m_pkFrameWork;
  v8 = pkContents->m_uiSenderIndex & 0x3FF;
  v9 = v8 | kFrom.Inven & 0xFC00;
  kFrom.Inven = v8 | kFrom.Inven & 0xFC00;
  v10 = v7[20].m_kMsgQ.m_uiHead;
  pkDivideWin = v10;
  if ( v10 && *(_DWORD *)(v10 + 348) )
  {
    if ( (kFrom.Inven & 0xFC00) == 9216 )
    {
      v11 = (InventoryWin *)v7[19].m_BackFrameID;
      if ( !v11 )
        goto LABEL_19;
      v12 = InventoryWin::GetInvWin(v11, v6);
      if ( !v12 )
        goto LABEL_18;
      v13 = (ItemIcon *)v12;
    }
    else
    {
      v13 = (ItemIcon *)v33->m_apkInvWin[v6 % 0x24];
    }
    v14 = ItemIcon::GetItem(v13);
    v9 = v8 | kFrom.Inven & 0xFC00;
    kFrom.Inven = v8 | kFrom.Inven & 0xFC00;
    pkTargetItem = v14;
    if ( v14 )
    {
      if ( (unsigned int)((int (__thiscall *)(Item *))v14->baseclass_0.vfptr[3].__vecDelDtor)(v14) > 1 )
      {
        v15 = (GameFrameWork *)v33->baseclass_0.m_pkFrameWork;
        LOWORD(uiReceiverInvIndex) = ((_WORD)uiReceiverInvIndex + 36 * LOWORD(v33->m_uiCurPage)) & 0x3FF;
        GameFrameWork::NcItemSplitReq(v15, &kFrom, (ITEM_INVEN *)&uiReceiverInvIndex, *(_DWORD *)(pkDivideWin + 348));
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, pkTargetItem->m_kStruct.itemid);
        return 1;
      }
      v9 = kFrom.Inven;
    }
LABEL_18:
    v4 = eSenderType;
  }
LABEL_19:
  v16 = ((_WORD)uiReceiverInvIndex + 36 * LOWORD(v33->m_uiCurPage)) & 0x3FF;
  kTo.Inven = ((_WORD)uiReceiverInvIndex + 36 * LOWORD(v33->m_uiCurPage)) & 0x3FF;
  if ( v4 )
  {
    if ( v4 == 19 )
    {
      v25 = ItemIcon::GetItem(&v33->m_apkInvWin[v6 % 0x24]->baseclass_0);
      if ( v25 )
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, v25->m_kStruct.itemid);
      v26 = v33;
      if ( v33->m_bDivide )
      {
        v33->m_bDivide = 0;
        if ( !pkDivideWin )
          return 0;
        v27 = GuildAcademyStorage::Get(kFrom.Inven & 0x3FF);
        if ( v27 )
        {
          if ( (unsigned int)((int (__thiscall *)(Item *))v27->baseclass_0.vfptr[3].__vecDelDtor)(v27) > 1 )
          {
            GameFrameWork::NcItemSplitReq(
              (GameFrameWork *)v26->baseclass_0.m_pkFrameWork,
              &kFrom,
              &kTo,
              *(_DWORD *)(pkDivideWin + 348));
            return 1;
          }
        }
      }
    }
  }
  else
  {
    v17 = pkContents->m_apvParam[0];
    if ( v17 )
    {
      pkInfo = *((_DWORD *)v17 + 28);
      if ( pkInfo )
      {
        v18 = v16 >> 10;
        uiReceiverInvIndex = 0;
        v19 = Item::GetPutOnBelongState((Item *)v17);
        if ( !CItemAuthorityBase::IA_CanInvenReloc(
                &g_kItemAuthority,
                *(E_BelongType *)(pkInfo + 274),
                v19,
                v9 >> 10,
                v18,
                (E_RELOC_ERR *)&uiReceiverInvIndex) )
        {
          v20 = (GameFrameWork *)v33->baseclass_0.m_pkFrameWork;
          v28 = -2102363671;
LABEL_32:
          v23 = TextData::Get(v28);
          GameFrameWork::AddSysMsg(v20, v23);
          return 0;
        }
        if ( CItemAuthorityBase::IA_IsDataPutOnBelonged(&g_kItemAuthority, *(E_BelongType *)(pkInfo + 274))
          && Item::GetPutOnBelongState((Item *)v17) == 1 )
        {
          v28 = -857857511;
LABEL_31:
          v20 = (GameFrameWork *)v33->baseclass_0.m_pkFrameWork;
          goto LABEL_32;
        }
      }
      v21 = (*(int (__thiscall **)(void *))(*(_DWORD *)v17 + 44))(v17);
      if ( v21 )
      {
        v22 = *(_DWORD *)v21 & 0xFF;
        if ( v22 )
        {
          if ( v22 != 255 )
          {
            v28 = -1634432127;
            goto LABEL_31;
          }
        }
      }
    }
    if ( v6 < 0xC0 )
    {
      v24 = g_kInventory.m_aspInv[v6].m_pObject;
      if ( v24 )
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, v24->m_kStruct.itemid);
    }
  }
  if ( !((*(_DWORD *)&kFrom.Inven ^ *(_DWORD *)&kTo.Inven) & 0xFC00)
    && !((*(_DWORD *)&kFrom.Inven ^ *(_DWORD *)&kTo.Inven) & 0x3FF) )
    return 0;
  GameFrameWork::NcItemRelocReq((GameFrameWork *)v33->baseclass_0.m_pkFrameWork, &kFrom, &kTo);
  return 1;
}

//----- (006F5440) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::UpdateMeWin(GuildAcademyStorageWin *this, float fCurTime)
{
  GuildAcademyStorageWin *v2; // ebx@1
  __int64 v3; // qax@1
  __int64 v4; // qax@1
  __int64 v5; // qax@1
  __int64 v6; // qax@1
  signed int v7; // esi@1
  int v8; // edi@1
  char *v9; // eax@11
  unsigned int v10; // [sp-4h] [bp-9Ch]@3
  int dwValue; // [sp+Ch] [bp-8Ch]@1
  int iUsing; // [sp+10h] [bp-88h]@1
  char acStr[128]; // [sp+14h] [bp-84h]@1
  unsigned int v14; // [sp+94h] [bp-4h]@1
  int v15; // [sp+98h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  v3 = GuildAcademyStorage::GetMoney();
  User::GetGem(v3);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v4 = GuildAcademyStorage::GetMoney();
  User::GetGold(v4);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v5 = GuildAcademyStorage::GetMoney();
  User::GetSilver(v5);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  v6 = GuildAcademyStorage::GetMoney();
  User::GetCopper(v6);
  sprintf(acStr, "%I64d");
  ((void (__stdcall *)(_DWORD))v2->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acStr);
  ChargedItemList::GetTotalEffectingValue(EE_MORESTORAGE, (unsigned int *)&dwValue);
  iUsing = dwValue + 2;
  v7 = 0;
  v8 = (int)v2->m_apkTabBtn;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 16) + 256))(v7 >= iUsing);
    if ( v7 < iUsing )
    {
      if ( v7 == v2->m_uiCurPage )
      {
        if ( v7 < 2 )
          v10 = 1094882428;
        else
          v10 = 844332920;
      }
      else
      {
        if ( v7 < 2 )
          v10 = -453449421;
        else
          v10 = -521536994;
      }
    }
    else
    {
      v10 = -470466502;
    }
    v9 = TextData::Get(v10);
    PgWin::SetToolTipWinText(*(PgWin **)v8, v9);
    ++v7;
    v8 += 4;
  }
  while ( v7 < 2 );
}
// A85C00: using guessed type int __security_cookie;

//----- (006F55F0) --------------------------------------------------------
bool __thiscall GuildAcademyStorageInvWin::EatDropInstance(GuildAcademyStorageInvWin *this, PgWinDrop **pkDrop, int iDropXPos, int iDropYPos)
{
  GuildAcademyStorageInvWin *v4; // edi@1
  bool result; // al@2
  void *v6; // esi@3
  PgWin *v7; // eax@5

  v4 = this;
  if ( *pkDrop )
  {
    v6 = (*pkDrop)->m_pkContents;
    if ( v6 )
    {
      v7 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      result = GuildAcademyStorageWin::DropOnInv((GuildAcademyStorageWin *)v7, (DropContents *)v6, v4->m_uiInvIndex);
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006F5630) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnInvLClick(GuildAcademyStorageWin *this, unsigned int uiInvIndex)
{
  GuildAcademyStorageWin *v2; // esi@1
  CClientGuild *v3; // eax@1
  Item *v4; // eax@4
  Item *v5; // edi@4
  int v6; // edx@5

  v2 = this;
  v3 = GuildTask::GetGuild();
  if ( CClientGuild::CanIUseStorage(v3) )
  {
    if ( *(_BYTE *)(g_pkKeyboard + 38) & 4 )
    {
      GuildAcademyStorageWin::OnInvShiftLClick(v2, uiInvIndex);
    }
    else
    {
      v4 = ItemIcon::GetItem(&v2->m_apkInvWin[uiInvIndex]->baseclass_0);
      v5 = v4;
      if ( v4 )
      {
        v6 = 9 * v2->m_uiCurPage;
        v2->m_kDropContents.m_eType = 0;
        v2->m_kDropContents.m_eSenderType = 19;
        v2->m_kDropContents.m_apvParam[1] = 0;
        v2->m_kDropContents.m_apvParam[0] = v4;
        v2->m_kDropContents.m_uiSenderIndex = uiInvIndex + 4 * v6;
        v2->m_kDropContents.m_uiLot = ((int (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
        v2->m_kDrop.m_pkSender = (PgWin *)v2;
        PgCursor::ms_pkDrop = (int)&v2->m_kDrop;
        SoundMgr::PlayItemPutSound(&g_kSoundMgr, v5->m_kStruct.itemid);
      }
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (006F56F0) --------------------------------------------------------
void __thiscall GuildAcademyStorageWin::OnCommand(GuildAcademyStorageWin *this, unsigned int wParam, int lParam)
{
  GuildAcademyStorageWin *v3; // esi@1
  Item *v4; // eax@13
  int v5; // ecx@14

  v3 = this;
  switch ( wParam )
  {
    case 0xAu:
      GuildAcademyStorageWin::OnInvLClick(this, lParam);
      break;
    case 0xBu:
      GuildAcademyStorageWin::OnInvRClick(this, lParam);
      break;
    case 0xEu:
      GuildAcademyStorageWin::OnOk(this);
      break;
    case 0xFu:
      GuildAcademyStorageWin::OnCancel(this);
      break;
    case 0x10u:
      GuildAcademyStorageWin::OnTab1(this);
      break;
    case 0x11u:
      GuildAcademyStorageWin::OnTab2(this);
      break;
    case 0x12u:
      GuildAcademyStorageWin::OnDeposit(this);
      break;
    case 0x13u:
      GuildAcademyStorageWin::OnDrawing(this);
      break;
    case 0x14u:
      GuildAcademyStorageWin::OnDepositMoneyWinOk(this, *(_QWORD *)lParam);
      break;
    case 0x15u:
      GuildAcademyStorageWin::OnDrawingMoneyWinOk(this, *(_QWORD *)lParam);
      break;
    case 0x17u:
      if ( lParam )
      {
        v4 = ItemIcon::GetItem(&this->m_apkInvWin[(GuildAcademyStorageWin::ms_kFrom & 0x3FF) % 36]->baseclass_0);
        if ( v4 )
        {
          v3->m_kDropContents.m_eSenderType = 19;
          v3->m_kDropContents.m_eType = 0;
          v5 = GuildAcademyStorageWin::ms_kFrom & 0x3FF;
          v3->m_kDropContents.m_apvParam[0] = v4;
          v3->m_kDropContents.m_uiSenderIndex = v5;
          v3->m_kDropContents.m_apvParam[1] = 0;
          ((void (__thiscall *)(_DWORD))v4->baseclass_0.vfptr[3].__vecDelDtor)(v4);
          v3->m_kDropContents.m_uiLot = lParam;
          v3->m_kDrop.m_pkSender = (PgWin *)v3;
          PgCursor::ms_pkDrop = (int)&v3->m_kDrop;
        }
      }
      break;
    default:
      return;
    case 0x18u:
      GuildAcademyStorageWin::OnHelpLink(this);
      break;
  }
}
// B67E7C: using guessed type int GuildAcademyStorageWin__ms_kFrom;
// B70474: using guessed type int PgCursor__ms_pkDrop;

//----- (006F5860) --------------------------------------------------------
GuildAcademyStorageTabWin *__cdecl GuildAcademyStorageTabWin::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg)
{
  void *v5; // eax@1
  void *v6; // esi@1
  PgWin *v7; // edi@8
  GuildAcademyStorageTabWin *v8; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@1

  v5 = operator new(0x144u);
  v6 = v5;
  result.m_pObject = (PgWin *)v5;
  v10 = 0;
  if ( v5 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v5);
    *(_DWORD *)v6 = &GuildAcademyStorageTabWin::_vftable_;
    *((_DWORD *)v6 + 58) = &GuildAcademyStorageTabWin::_vftable_;
    *((_BYTE *)v6 + 254) = 1;
  }
  else
  {
    v6 = 0;
  }
  if ( v6 )
    InterlockedIncrement((volatile LONG *)v6 + 1);
  v10 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v6);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int))(*(_DWORD *)v6 + 560))(
                          v6,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 356))(v6);
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = (GuildAcademyStorageTabWin *)v6;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v6);
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
    }
    v10 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v6 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v6)(v6, 1);
    v8 = 0;
  }
  return v8;
}
// 9D0740: using guessed type int (__stdcall *GuildAcademyStorageTabWin___vftable_)(int uiFlags);
// 9D075C: using guessed type int (__thiscall *GuildAcademyStorageTabWin___vftable_)(void *p, char);

//----- (006F59C0) --------------------------------------------------------
GuildAcademyStorageInvWin *__cdecl GuildAcademyStorageInvWin::CreateWin(int iXPos, int iYPos, unsigned int uiInvIndex, PgWin *pkParent)
{
  void *v4; // eax@1
  void *v5; // esi@1
  PgWin *v6; // edi@8
  GuildAcademyStorageInvWin *v7; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v9; // [sp+10h] [bp-4h]@1

  v4 = operator new(0x1C4u);
  v5 = v4;
  result.m_pObject = (PgWin *)v4;
  v9 = 0;
  if ( v4 )
  {
    ItemIcon::ItemIcon((ItemIcon *)v4);
    LOBYTE(v9) = 1;
    *(_DWORD *)v5 = &GuildAcademyStorageInvWin::_vftable_;
    *((_DWORD *)v5 + 58) = &GuildAcademyStorageInvWin::_vftable_;
    *((_DWORD *)v5 + 112) = -1;
    ItemIcon::SetItem((ItemIcon *)v5, 0, 1);
  }
  else
  {
    v5 = 0;
  }
  if ( v5 )
    InterlockedIncrement((volatile LONG *)v5 + 1);
  v9 = 2;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v5);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, PgWin *))(*(_DWORD *)v5 + 616))(
                          v5,
                          iXPos,
                          iYPos,
                          uiInvIndex,
                          pkParent) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v5 + 356))(v5);
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = (GuildAcademyStorageInvWin *)v5;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v5);
    if ( result.m_pObject )
    {
      v6 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    v9 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v5 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v5)(v5, 1);
    v7 = 0;
  }
  return v7;
}
// 9D0994: using guessed type int (__stdcall *GuildAcademyStorageInvWin___vftable_)(int uiFlags);
// 9D09B4: using guessed type int (__thiscall *GuildAcademyStorageInvWin___vftable_)(void *p, char);

//----- (006F5B20) --------------------------------------------------------
GuildAcademyStorageWin *__cdecl GuildAcademyStorageWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildAcademyStorageWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x278u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildAcademyStorageWin::GuildAcademyStorageWin((GuildAcademyStorageWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildAcademyStorageWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006F5C50) --------------------------------------------------------
bool __thiscall GuildAcademyStorageWin::Create(GuildAcademyStorageWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyStorageWin *v2; // esi@1
  void *v3; // edi@1
  NiNode *v4; // esi@2
  bool result; // al@6
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@16
  PgWinSpr *v13; // eax@16
  PgSprData *v14; // eax@16
  PgFont *v15; // eax@18
  PgWinText *v16; // eax@18
  NiRefObjectVtbl *v17; // edx@18
  char *v18; // eax@18
  PgSprData *v19; // eax@18
  PgSprData *v20; // eax@19
  ItemIcon *v21; // eax@19
  IconWin **v22; // ecx@19
  PgSprData *v23; // eax@20
  GuildAcademyStorageTabWin *v24; // eax@20
  NiSourceTexture *v25; // edx@20
  PgSprData *v26; // eax@20
  PgWinSpr *v27; // eax@20
  PgSprData *v28; // eax@20
  PgWinSpr *v29; // eax@20
  PgSprData *v30; // eax@20
  PgWinSpr *v31; // eax@20
  PgSprData *v32; // eax@20
  GuildAcademyStorageTabWin *v33; // eax@20
  NiSourceTexture *v34; // edx@20
  PgSprData *v35; // eax@20
  PgWinSpr *v36; // eax@20
  PgSprData *v37; // eax@20
  PgWinSpr *v38; // eax@20
  PgSprData *v39; // eax@20
  PgWinSpr *v40; // eax@20
  void *v41; // ST94_4@20
  PgFont *v42; // ST90_4@20
  unsigned int v43; // ST8C_4@20
  unsigned int v44; // eax@20
  PgWinText *v45; // eax@20
  NiRefObjectVtbl *v46; // edx@20
  char *v47; // eax@20
  void *v48; // ST94_4@20
  PgFont *v49; // ST90_4@20
  unsigned int v50; // ST8C_4@20
  unsigned int v51; // eax@20
  PgWinText *v52; // eax@20
  NiRefObjectVtbl *v53; // edx@20
  char *v54; // eax@20
  PgSprData *v55; // eax@20
  void *v56; // ST94_4@20
  PgFont *v57; // ST90_4@20
  unsigned int v58; // ST8C_4@20
  unsigned int v59; // eax@20
  PgWinText *v60; // eax@20
  NiRefObjectVtbl *v61; // edx@20
  NiSourceTexture *v62; // ST9C_4@20
  NiNode *v63; // edx@20
  PgSprData *v64; // eax@20
  void *v65; // ST94_4@20
  PgFont *v66; // ST90_4@20
  unsigned int v67; // ST8C_4@20
  unsigned int v68; // eax@20
  PgWinText *v69; // eax@20
  NiRefObjectVtbl *v70; // edx@20
  NiSourceTexture *v71; // ST9C_4@20
  PgSprData *v72; // eax@20
  void *v73; // ST94_4@20
  PgFont *v74; // ST90_4@20
  unsigned int v75; // ST8C_4@20
  unsigned int v76; // eax@20
  PgWinText *v77; // eax@20
  NiRefObjectVtbl *v78; // edx@20
  NiSourceTexture *v79; // ST9C_4@20
  NiNode *v80; // edx@20
  PgSprData *v81; // eax@20
  void *v82; // ST94_4@20
  PgFont *v83; // ST90_4@20
  unsigned int v84; // ST8C_4@20
  unsigned int v85; // eax@20
  PgWinText *v86; // eax@20
  NiRefObjectVtbl *v87; // edx@20
  NiSourceTexture *v88; // ST9C_4@20
  NiNode *v89; // edx@20
  NiNode *v90; // esi@21
  const char *v91; // [sp+90h] [bp-7Ch]@12
  int *v92; // [sp+94h] [bp-78h]@12
  int *v93; // [sp+98h] [bp-74h]@12
  NiSourceTexture *v94; // [sp+9Ch] [bp-70h]@12
  unsigned int v95; // [sp+A0h] [bp-6Ch]@1
  unsigned int uiHeight; // [sp+B0h] [bp-5Ch]@16
  unsigned int uiWidth; // [sp+B4h] [bp-58h]@16
  PgFrameWork *v98; // [sp+B8h] [bp-54h]@1
  unsigned int v99; // [sp+BCh] [bp-50h]@19
  unsigned int i; // [sp+C0h] [bp-4Ch]@7
  NiSourceTexture *pkTexture; // [sp+C4h] [bp-48h]@1
  NiPointer<NiNode> spNode; // [sp+C8h] [bp-44h]@1
  int uiTop; // [sp+CCh] [bp-40h]@10
  int uiLeft; // [sp+D0h] [bp-3Ch]@10
  PgSprData *pkTextWin; // [sp+D4h] [bp-38h]@14
  char acShapeName[33]; // [sp+D8h] [bp-34h]@19
  unsigned int v107; // [sp+FCh] [bp-10h]@1
  int v108; // [sp+108h] [bp-4h]@1
  int v109; // [sp+10Ch] [bp+0h]@1

  v107 = (unsigned int)&v109 ^ __security_cookie;
  v95 = (unsigned int)&v109 ^ __security_cookie;
  v2 = this;
  v98 = pkFrameWork;
  spNode.m_pObject = 0;
  v108 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  pkTexture = (NiSourceTexture *)v3;
  if ( !v3 )
    goto LABEL_27;
  i = (unsigned int)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\NPCBank.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, (NiTexturePalette *)i);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v7, 0, pkFrameWork, "StorageWin", 0) )
  {
LABEL_27:
    v4 = spNode.m_pObject;
    v108 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v94 = v10;
    v93 = &uiTop;
    v92 = &uiLeft;
    v91 = "Theme";
  }
  else
  {
    v94 = 0;
    v93 = &uiTop;
    v92 = &uiLeft;
    v91 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v91, v92, v93, v94);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "ClsOver");
  PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0xFu, 0, 0);
  i = (unsigned int)MenuTexMgr::GetTexture(4u);
  if ( ((int (__stdcall *)(_DWORD, unsigned int))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(
         "HelpLinkNor",
         v95) )
  {
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, (NiSourceTexture *)i);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x18u, 0, 0);
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, pkTexture);
  v13 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  ((void (__thiscall *)(PgWinSpr *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v13);
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, pkTexture);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v15 = Font::Get(0);
    v16 = PgWinText::CreateWin(
            uiLeft - v8,
            uiTop - v9 + 2,
            uiWidth,
            uiHeight,
            v15,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    v17 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v16;
    ((void (__thiscall *)(PgWinText *, signed int, _DWORD))v17[122].__vecDelDtor)(v16, 5, 0);
    ((void (__stdcall *)(__int64 *))pkTextWin->baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor);
    i = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v18 = TextData::Get(0x1F46265Au);
    (*(void (__thiscall **)(PgSprData *, char *))i)(pkTextWin, v18);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, pkTexture);
    PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    i = 0;
    pkTextWin = (PgSprData *)v2->m_apkInvWin;
    do
    {
      v99 = i + 1;
      sprintf(acShapeName, "IconSlot%03d");
      v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acShapeName, &uiLeft, &uiTop, pkTexture);
      PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v21 = (ItemIcon *)GuildAcademyStorageInvWin::CreateWin(
                          uiLeft - v8 + 1,
                          uiTop - v9 + 1,
                          i,
                          &v2->baseclass_0.baseclass_0.baseclass_0);
      pkTextWin->baseclass_0.vfptr = (NiRefObjectVtbl *)v21;
      ItemIcon::SetItem(v21, 0, 1);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 129))(10);
      (*((void (__stdcall **)(_DWORD))pkTextWin->baseclass_0.vfptr->__vecDelDtor + 140))(11);
      v22 = (IconWin **)pkTextWin;
      pkTextWin->baseclass_0.vfptr[68].__vecDelDtor = (void *(__thiscall *)(NiRefObject *, unsigned int))g_pkItemInfoWin;
      IconWin::ShowFocus(*v22, 1);
      pkTextWin = (PgSprData *)((char *)pkTextWin + 4);
      i = v99;
    }
    while ( (signed int)v99 < 36 );
    v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, pkTexture);
    v24 = GuildAcademyStorageTabWin::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            v23,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x10u);
    v25 = pkTexture;
    v2->m_apkTabBtn[0] = (PgWinBut *)v24;
    v24->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Dis", &uiLeft, &uiTop, v25);
    v27 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v26, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabDisableSpr[0] = v27;
    ((void (__thiscall *)(PgWinSpr *))v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v27);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabDisableSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_On", &uiLeft, &uiTop, pkTexture);
    v29 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabOnSpr[0] = v29;
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v29,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v30 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num01", &uiLeft, &uiTop, 0);
    v31 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v30, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v31,
      0);
    v32 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, pkTexture);
    v33 = GuildAcademyStorageTabWin::CreateWin(
            uiLeft - v8,
            uiTop - v9,
            v32,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0x11u);
    v34 = pkTexture;
    v2->m_apkTabBtn[1] = (PgWinBut *)v33;
    v33->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v35 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Dis", &uiLeft, &uiTop, v34);
    v36 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v35, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabDisableSpr[1] = v36;
    v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v36,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabDisableSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v37 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_On", &uiLeft, &uiTop, pkTexture);
    v38 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v37, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v2->m_apkTabOnSpr[1] = v38;
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v38,
      0);
    ((void (__stdcall *)(_DWORD))v2->m_apkTabOnSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v39 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num02", &uiLeft, &uiTop, 0);
    v40 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v39, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v40,
      0);
    ((void (__stdcall *)(signed int))v2->m_apkTabOnSpr[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v2->m_apkTabDisableSpr[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "DrawNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "DrawClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "DrawOver");
    v41 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x13u, 0, 0);
    pkTextWin = (PgSprData *)v41;
    v42 = Font::Get(0);
    v43 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v44 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v45 = PgWinText::CreateWin(0, 1, v44, v43, v42, (PgWin *)v41, 0, 0);
    v46 = v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v45;
    v46[122].__vecDelDtor((NiRefObject *)v45, 5u);
    v99 = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v47 = TextData::Get(0x89B68F88u);
    (*(void (__thiscall **)(PgSprData *, char *))v99)(pkTextWin, v47);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PayNor", &uiLeft, &uiTop, pkTexture);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PayClick");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "PayOver");
    v48 = PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0x12u, 0, 0);
    pkTextWin = (PgSprData *)v48;
    v49 = Font::Get(0);
    v50 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v51 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v52 = PgWinText::CreateWin(0, 1, v51, v50, v49, (PgWin *)v48, 0, 0);
    v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v52;
    v53[122].__vecDelDtor((NiRefObject *)v52, 5u);
    v99 = (unsigned int)&pkTextWin->baseclass_0.vfptr[118];
    v54 = TextData::Get(0x2CB89180u);
    (*(void (__thiscall **)(PgSprData *, char *))v99)(pkTextWin, v54);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v55 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GemInput", &uiLeft, &uiTop, pkTexture);
    v56 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v55, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v56;
    v57 = Font::Get(0);
    v58 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v59 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v60 = PgWinText::CreateWin(0, 1, v59, v58, v57, (PgWin *)v56, 0, 0);
    v61 = v60->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v60;
    v61[122].__vecDelDtor((NiRefObject *)v60, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D0525);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v62 = pkTexture;
    v63 = spNode.m_pObject;
    v2->m_pkGemText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v63->baseclass_0, "GemBtn", &uiLeft, &uiTop, v62);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GemBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GemBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v64 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GoldInput", &uiLeft, &uiTop, pkTexture);
    v65 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v64, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v65;
    v66 = Font::Get(0);
    v67 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v68 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v69 = PgWinText::CreateWin(0, 1, v68, v67, v66, (PgWin *)v65, 0, 0);
    v70 = v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v69;
    v70[122].__vecDelDtor((NiRefObject *)v69, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D0526);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v71 = pkTexture;
    v2->m_pkGoldText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GoldBtn", &uiLeft, &uiTop, v71);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GoldBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "GoldBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v72 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SilverInput", &uiLeft, &uiTop, pkTexture);
    v73 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v72, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v73;
    v74 = Font::Get(0);
    v75 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v76 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v77 = PgWinText::CreateWin(0, 1, v76, v75, v74, (PgWin *)v73, 0, 0);
    v78 = v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v77;
    v78[122].__vecDelDtor((NiRefObject *)v77, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D0527);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v79 = pkTexture;
    v80 = spNode.m_pObject;
    v2->m_pkSilverText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v80->baseclass_0, "SilverBtn", &uiLeft, &uiTop, v79);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "SilverBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "SilverBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v81 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CopperInput", &uiLeft, &uiTop, pkTexture);
    v82 = PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v81, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    pkTextWin = (PgSprData *)v82;
    v83 = Font::Get(0);
    v84 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[37].__vecDelDtor)();
    v85 = ((int (*)(void))pkTextWin->baseclass_0.vfptr[36].__vecDelDtor)();
    v86 = PgWinText::CreateWin(0, 1, v85, v84, v83, (PgWin *)v82, 0, 0);
    v87 = v86->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pkTextWin = (PgSprData *)v86;
    v87[122].__vecDelDtor((NiRefObject *)v86, 6u);
    ((void (__stdcall *)(_UNKNOWN *))pkTextWin->baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D052E);
    ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.vfptr[60].__vecDelDtor)(0);
    v88 = pkTexture;
    v89 = spNode.m_pObject;
    v2->m_pkCopperText = (PgWinText *)pkTextWin;
    pkTextWin = PgSprData::Create(&v89->baseclass_0, "CopperBtn", &uiLeft, &uiTop, v88);
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CopperBtn");
    PgSprData::Add(pkTextWin, &spNode.m_pObject->baseclass_0, "CopperBtn");
    PgWinBut::CreateWin(uiLeft - v8, uiTop - v9, pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    ((void (__thiscall *)(GuildAcademyStorageWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    v2->m_pkMoneyWin = MoneyWin::CreateWin(v98);
    v108 = -1;
    if ( spNode.m_pObject )
    {
      v90 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v90 )
          v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v90, 1u);
      }
    }
    result = 1;
  }
  else
  {
    v108 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006F69A0) --------------------------------------------------------
void *__thiscall GuildAcademyStorageTabWin::_scalar_deleting_destructor_(GuildAcademyStorageTabWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageTabWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageTabWin::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D0740: using guessed type int (__stdcall *GuildAcademyStorageTabWin___vftable_)(int uiFlags);
// 9D075C: using guessed type int (__thiscall *GuildAcademyStorageTabWin___vftable_)(void *p, char);

//----- (006F69E0) --------------------------------------------------------
void *__thiscall GuildAcademyStorageInvWin::_scalar_deleting_destructor_(GuildAcademyStorageInvWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageInvWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageInvWin::_vftable_;
  ItemIcon::_ItemIcon(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D0994: using guessed type int (__stdcall *GuildAcademyStorageInvWin___vftable_)(int uiFlags);
// 9D09B4: using guessed type int (__thiscall *GuildAcademyStorageInvWin___vftable_)(void *p, char);

//----- (006F6A20) --------------------------------------------------------
void *__thiscall GuildAcademyStorageWin::_scalar_deleting_destructor_(GuildAcademyStorageWin *this, unsigned int a2)
{
  GuildAcademyStorageWin *v2; // esi@1
  PgWin *v3; // eax@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyStorageWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyStorageWin::_vftable_;
  v3 = (PgWin *)this->m_pkMoneyWin;
  if ( v3 )
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, v3);
  v2->m_kDropContents.vfptr = (DropContentsVtbl *)&DropContents::_vftable_;
  v2->m_kDrop.vfptr = (PgWinDropVtbl *)&PgWinDrop::_vftable_;
  PgWinFrame::_PgWinFrame(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 97C4E0: using guessed type int (__thiscall *PgWinDrop___vftable_)(void *p, char);
// 97C4E8: using guessed type int (__thiscall *DropContents___vftable_)(void *p, char);
// 9D0C24: using guessed type int (__stdcall *GuildAcademyStorageWin___vftable_)(int uiFlags);
// 9D0C44: using guessed type int (__thiscall *GuildAcademyStorageWin___vftable_)(void *p, char);

//----- (006F6AE0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSortByTitle01(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinMember;
  if ( v2 )
  {
    v1->m_nSortColumn = 0;
    SlideListWin::Sort(v2, 0, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinMember);
  }
}

//----- (006F6B10) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSortByTitle02(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinMember;
  if ( v2 )
  {
    v1->m_nSortColumn = 1;
    SlideListWin::Sort(v2, 1, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinMember);
  }
}

//----- (006F6B40) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSortByTitle03(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // al@2

  v1 = this;
  v2 = this->m_pListWinMember;
  if ( v2 )
  {
    v3 = v1->m_bReverse3 == 0;
    v1->m_nSortColumn = 2;
    v1->m_bReverse3 = v3;
    SlideListWin::Sort(v2, 2, v3, 1);
    SlideListWin::UpdateViewList(v1->m_pListWinMember);
  }
}

//----- (006F6B80) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSortByTitle04(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinMember;
  if ( v2 )
  {
    v1->m_nSortColumn = 3;
    SlideListWin::Sort(v2, 3, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinMember);
  }
}

//----- (006F6BB0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSortByTitle05(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  SlideListWin *v2; // ecx@1

  v1 = this;
  v2 = this->m_pListWinMember;
  if ( v2 )
  {
    v1->m_nSortColumn = 4;
    SlideListWin::Sort(v2, 4, 0, 0);
    SlideListWin::UpdateViewList(v1->m_pListWinMember);
  }
}

//----- (006F6BE0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnClickJoinBtn(GuildAcademyWin *this)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
}

//----- (006F6C50) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnHelpLink(GuildAcademyWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "GuildAcademyWin");
}

//----- (006F6C80) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnWinClose(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1

  v1 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  GameFrameWork::CloseCommunityWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}

//----- (006F6CB0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnTopWin(GuildAcademyWin *this)
{
  GameFrameWork::SetTopFriendAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
}

//----- (006F6CC0) --------------------------------------------------------
void __thiscall GuildAcademyWin::ProcessMeInput(GuildAcademyWin *this, bool *bHit)
{
  PgWinFrame *v2; // esi@1

  v2 = (PgWinFrame *)this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
  {
    if ( dword_B70350 )
      ++dword_B70350;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      ++PgWin::ms_kbRbutPressed.m_iBool;
    PgWinFrame::ProcessMeInput(v2, bHit);
    PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
    if ( PgWin::ms_kbRbutPressed.m_iBool )
      --PgWin::ms_kbRbutPressed.m_iBool;
    byte_B7034C = 0;
    if ( dword_B70350 )
      --dword_B70350;
  }
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;

//----- (006F6D40) --------------------------------------------------------
void __thiscall GuildAcademyWin::UpdateMeWin(GuildAcademyWin *this, float fCurTime)
{
  GuildAcademyWin *v2; // esi@1
  PgFrameWork *v3; // eax@1
  GameFrameWork *v4; // edi@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v4 = (GameFrameWork *)v3;
  if ( v3 )
  {
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWinNotice, v2->m_pkSlideBarNotice);
    GameFrameWork::UpdateUIScroll(v4, v2->m_pListWinMember, v2->m_pkSlideBarMemberList);
    GameFrameWork::UpdateUIScroll(v4, v2->m_pListWinHistory, v2->m_pkSlideBarHistory);
  }
}

//----- (006F6DA0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnLClick(GuildAcademyWin *this, int nItemIndex)
{
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
}

//----- (006F6DC0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnRClick(GuildAcademyWin *this, int nItemIndex)
{
  GuildAcademyWin *v2; // esi@1
  int v3; // edi@3
  int v4; // ebx@3
  int v5; // eax@3
  Name5 *v6; // eax@4
  CClientGuild *v7; // eax@10
  CClientGuild *v8; // eax@12
  CClientGuild *v9; // eax@14
  PopupMenuWin *v10; // ecx@16
  void *pkMemberClient; // [sp+Ch] [bp-4h]@3

  v2 = this;
  if ( (PgWin *)this == g_pkToolTipWin->m_pkToolTipParentWin )
    ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v3 = PgWin::ms_iMsX.x;
  v4 = PgWin::ms_iMsY;
  v5 = SlideListWin::GetCurSelIndex(v2->m_pListWinMember);
  SlideListWin::GetData(v2->m_pListWinMember, v5, (unsigned int *)&pkMemberClient);
  if ( pkMemberClient )
  {
    v6 = User::GetMainCharID(&g_kUser);
    if ( *(_DWORD *)pkMemberClient != *(_DWORD *)&v6->n5_name[0]
      || *((_DWORD *)pkMemberClient + 1) != *(_DWORD *)&v6->n5_name[4]
      || *((_DWORD *)pkMemberClient + 2) != *(_DWORD *)&v6->n5_name[8]
      || *((_DWORD *)pkMemberClient + 3) != *(_DWORD *)&v6->n5_name[12]
      || *((_DWORD *)pkMemberClient + 4) != *(_DWORD *)&v6->n5_name[16] )
    {
      ((void (__stdcall *)(int, int))v2->m_pkMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        v3,
        v4);
      PopupMenuWin::Clear(v2->m_pkMemberPopupMenu);
      PopupMenuWin::AddMenu(v2->m_pkMemberPopupMenu, &v2->m_spPopupWhisperChat.m_pObject->baseclass_0);
      v7 = GuildTask::GetGuild();
      if ( CClientGuild::CanIForbidChat(v7) )
      {
        PopupMenuWin::AddMenu(v2->m_pkMemberPopupMenu, &v2->m_spPopupForbidChat.m_pObject->baseclass_0);
        PopupMenuWin::AddMenu(v2->m_pkMemberPopupMenu, &v2->m_spPopupPermitChat.m_pObject->baseclass_0);
      }
      v8 = GuildTask::GetGuild();
      if ( CClientGuild::CanIInvite(v8) )
        PopupMenuWin::AddMenu(v2->m_pkMemberPopupMenu, &v2->m_spPopupInviteGuild.m_pObject->baseclass_0);
      v9 = GuildTask::GetGuild();
      if ( CClientGuild::AmIGuildMaster(v9) )
        PopupMenuWin::AddMenu(v2->m_pkMemberPopupMenu, &v2->m_spPopupVanish.m_pObject->baseclass_0);
      v10 = v2->m_pkMemberPopupMenu;
      if ( v10->m_dwMenuCount )
      {
        PopupMenuWin::FinishMenu(v10, 0);
        PgWinMgr::OpenPopupWin(
          &Pgg_kWinMgr,
          0,
          &v2->m_pkMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        ((void (__stdcall *)(signed int))v2->m_pkMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      }
      else
      {
        PopupMenuWin::Clear(v10);
      }
    }
    else
    {
      PopupMenuWin::Clear(v2->m_pkMemberPopupMenu);
      PgWinMgr::ClosePopupWin(&Pgg_kWinMgr, &v2->m_pkMemberPopupMenu->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
  }
}

//----- (006F6F70) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnChangeTab(GuildAcademyWin *this, DirectUserMsgBody_CommunityTabChanged::TabEnum eTab)
{
  char *v2; // esi@1

  v2 = (char *)&this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  if ( this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      40,
      &eTab,
      v2);
    if ( *((_DWORD *)v2 + 1) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v2 + 1) + 20))(40, &eTab, v2);
  }
  (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 20))(v2, 40, &eTab, v2);
}

//----- (006F6FD0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSlideBar(GuildAcademyWin *this, SlideBar *pkSlideBar, SlideListWin *pkSlideListWin)
{
  if ( pkSlideBar )
  {
    if ( pkSlideListWin )
    {
      SlideBar::SetSplitCnt(pkSlideBar, pkSlideListWin->m_nSlideSplitCnt);
      pkSlideListWin->m_nViewStartPos = pkSlideBar->m_nCurPos;
      SlideListWin::UpdateViewList(pkSlideListWin);
    }
  }
}

//----- (006F7010) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnEditNotice(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  CClientGuild *v2; // eax@1
  char *v3; // eax@2

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMaster(v2) )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkNoticeEditor->baseclass_0.baseclass_0.baseclass_0);
  }
  else
  {
    v3 = TextData::Get(0x43C1E7Au);
    MsgBox::Modal(MSGBOX_OK, v3);
  }
}

//----- (006F7050) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnClickMasterTeleportBtn(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  CClientGuildAcademy *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@4
  char *v5; // edi@4
  void *pkMemberClient; // [sp+8h] [bp-34h]@2
  PROTO_NC_GUILD_ACADEMY_MASTER_TELEPORT_REQ kProto; // [sp+Ch] [bp-30h]@3
  char acname[21]; // [sp+20h] [bp-1Ch]@3
  unsigned int v9; // [sp+38h] [bp-4h]@1
  int v10; // [sp+3Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = this;
  v2 = GuildAcademyTask::GetGuildAcademy();
  if ( CClientGuildAcademy::AmIGuildAcademyMaster(v2) )
  {
    v3 = SlideListWin::GetCurSelIndex(v1->m_pListWinMember);
    if ( SlideListWin::GetData(v1->m_pListWinMember, v3, (unsigned int *)&pkMemberClient) )
    {
      *(_DWORD *)acname = *(_DWORD *)pkMemberClient;
      *(_DWORD *)&acname[4] = *((_DWORD *)pkMemberClient + 1);
      *(_DWORD *)&acname[8] = *((_DWORD *)pkMemberClient + 2);
      *(_DWORD *)&acname[12] = *((_DWORD *)pkMemberClient + 3);
      *(_DWORD *)&acname[16] = *((_DWORD *)pkMemberClient + 4);
      acname[20] = 0;
      *(_QWORD *)&kProto.sTargetCharID.n5_name[12] = 0i64;
      *(_QWORD *)&kProto.sTargetCharID.n5_name[4] = 0i64;
      *(_DWORD *)&kProto.sTargetCharID.n5_name[0] = 0;
      strncpy(kProto.sTargetCharID.n5_name, acname, 0x14u);
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x1Fu, &kProto, 20);
    }
  }
  else
  {
    v4 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v5 = TextData::Get(0x3D634B4Eu);
    if ( *(_DWORD *)(v4 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 4))(25, v5, v4);
      if ( *(_DWORD *)(v4 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v4 + 4) + 20))(25, v5, v4);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F7180) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnClickInvitePartyBtn(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  int v2; // esi@2
  char *v3; // edi@2
  CClientGuild *v4; // eax@6
  CClientGuildAcademy *v5; // eax@7
  int v6; // esi@8
  char *v7; // edi@8
  int v8; // eax@12
  GameFrameWork *v9; // ecx@13
  void *pkMemberClient; // [sp+8h] [bp-20h]@12
  char acname[21]; // [sp+Ch] [bp-1Ch]@13
  unsigned int v12; // [sp+24h] [bp-4h]@1
  int v13; // [sp+28h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v1 = this;
  if ( SlideListWin::GetCurSelIndex(this->m_pListWinMember) >= 0 )
  {
    v4 = GuildTask::GetGuild();
    if ( CClientGuild::AmIGuildMember(v4)
      || (v5 = GuildAcademyTask::GetGuildAcademy(), CClientGuildAcademy::AmIGuildAcademyMember(v5)) )
    {
      v8 = SlideListWin::GetCurSelIndex(v1->m_pListWinMember);
      if ( SlideListWin::GetData(v1->m_pListWinMember, v8, (unsigned int *)&pkMemberClient) )
      {
        *(_DWORD *)acname = *(_DWORD *)pkMemberClient;
        *(_DWORD *)&acname[4] = *((_DWORD *)pkMemberClient + 1);
        *(_DWORD *)&acname[8] = *((_DWORD *)pkMemberClient + 2);
        *(_DWORD *)&acname[12] = *((_DWORD *)pkMemberClient + 3);
        v9 = (GameFrameWork *)v1->baseclass_0.m_pkFrameWork;
        *(_DWORD *)&acname[16] = *((_DWORD *)pkMemberClient + 4);
        acname[20] = 0;
        GameFrameWork::NcPartyJoinReq(v9, acname);
      }
    }
    else
    {
      v6 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
      v7 = TextData::Get(0x1D2F7C72u);
      if ( *(_DWORD *)(v6 + 4) )
      {
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
        if ( *(_DWORD *)(v6 + 4) )
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
      }
      (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
    }
  }
  else
  {
    v2 = (int)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
    v3 = TextData::Get(0x8AA587D4u);
    if ( *(_DWORD *)(v2 + 4) )
    {
      (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v2 + 4) + 4))(25, v3, v2);
      if ( *(_DWORD *)(v2 + 4) )
        (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v2 + 4) + 20))(25, v3, v2);
    }
    (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v2 + 20))(v2, 25, v3, v2);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F72E0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSlideBarMemberList(GuildAcademyWin *this)
{
  SlideListWin *v1; // esi@1
  SlideBar *v2; // edi@1

  v1 = this->m_pListWinMember;
  v2 = this->m_pkSlideBarMemberList;
  if ( v2 )
  {
    if ( v1 )
    {
      SlideBar::SetSplitCnt(v2, v1->m_nSlideSplitCnt);
      v1->m_nViewStartPos = v2->m_nCurPos;
      SlideListWin::UpdateViewList(v1);
    }
  }
}

//----- (006F7320) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSlideBarNotice(GuildAcademyWin *this)
{
  SlideListWin *v1; // esi@1
  SlideBar *v2; // edi@1

  v1 = this->m_pListWinNotice;
  v2 = this->m_pkSlideBarNotice;
  if ( v2 )
  {
    if ( v1 )
    {
      SlideBar::SetSplitCnt(v2, v1->m_nSlideSplitCnt);
      v1->m_nViewStartPos = v2->m_nCurPos;
      SlideListWin::UpdateViewList(v1);
    }
  }
}

//----- (006F7360) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnSlideBarHistory(GuildAcademyWin *this)
{
  SlideListWin *v1; // esi@1
  SlideBar *v2; // edi@1

  v1 = this->m_pListWinHistory;
  v2 = this->m_pkSlideBarHistory;
  if ( v2 )
  {
    if ( v1 )
    {
      SlideBar::SetSplitCnt(v2, v1->m_nSlideSplitCnt);
      v1->m_nViewStartPos = v2->m_nCurPos;
      SlideListWin::UpdateViewList(v1);
    }
  }
}

//----- (006F73A0) --------------------------------------------------------
char *__thiscall GuildAcademyWin::GetHistoryText(GuildAcademyWin *this, GUILD_HISTORY_MSG_TYPE hisType)
{
  char *result; // eax@2

  switch ( hisType )
  {
    case 100:
      result = TextData3::Get(0x4C8D4E49u);
      break;
    case 101:
      result = TextData3::Get(0x4C3D0909u);
      break;
    case 102:
      result = TextData3::Get(0x5435FF50u);
      break;
    case 103:
      result = TextData3::Get(0x498B5859u);
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (006F7410) --------------------------------------------------------
void __thiscall GuildAcademyWin::AddListItem_DefInfo(GuildAcademyWin *this, GUILD_ACADEMY_MEMBER_CLIENT *pkData)
{
  GuildAcademyWin *v2; // edi@1
  SlideListWin *v3; // ecx@1
  int v4; // eax@4
  int v5; // edx@4
  int v6; // eax@4
  int v7; // ebx@4
  void *v8; // eax@4
  const char *v9; // eax@5
  char *v10; // eax@7
  char *v11; // eax@7
  char *v12; // eax@7
  int v13; // [sp-10h] [bp-34h]@8
  int v14; // [sp-Ch] [bp-30h]@8
  int v15; // [sp-8h] [bp-2Ch]@8
  char acname[21]; // [sp+8h] [bp-1Ch]@4
  unsigned int v17; // [sp+20h] [bp-4h]@1
  int v18; // [sp+24h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  v3 = this->m_pListWinMember;
  if ( v3 && (!v2->m_bShowOnlineOnly || pkData->dLogonInfo._bf0 & 1) )
  {
    v4 = *(_DWORD *)&pkData->sName.n5_name[0];
    *(_DWORD *)&acname[4] = *(_DWORD *)&pkData->sName.n5_name[4];
    v5 = *(_DWORD *)&pkData->sName.n5_name[12];
    *(_DWORD *)acname = v4;
    v6 = *(_DWORD *)&pkData->sName.n5_name[8];
    *(_DWORD *)&acname[12] = v5;
    *(_DWORD *)&acname[8] = v6;
    *(_DWORD *)&acname[16] = *(_DWORD *)&pkData->sName.n5_name[16];
    acname[20] = 0;
    v7 = SlideListWin::AddText(v3, acname);
    v8 = CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pkData->nClassID);
    if ( v8 )
      v9 = (char *)v8 + 21;
    else
      v9 = &byte_9788EB;
    SlideListWin::SetText(v2->m_pListWinMember, v7, 1u, v9);
    v10 = fs("%d");
    SlideListWin::SetText(v2->m_pListWinMember, v7, 2u, v10);
    v11 = TextData::Get(0x1844307Bu);
    SlideListWin::SetText(v2->m_pListWinMember, v7, 3u, v11);
    v12 = fs("%d-%d-%d");
    SlideListWin::SetText(v2->m_pListWinMember, v7, 4u, v12);
    SlideListWin::SetData(v2->m_pListWinMember, v7, (unsigned int)pkData);
    SlideListWin::SetFontSize(v2->m_pListWinMember, v7, 1);
    if ( pkData->dLogonInfo._bf0 & 1 )
    {
      v15 = 0;
      v14 = 255;
      v13 = 255;
    }
    else
    {
      v15 = 200;
      v14 = 200;
      v13 = 200;
    }
    SlideListWin::SetFontColor(v2->m_pListWinMember, v7, v13, v14, v15);
  }
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (006F7580) --------------------------------------------------------
void __thiscall GuildAcademyWin::ViewAllInfo(GuildAcademyWin *this, PROTO_FRIEND_INFO *pData)
{
  GuildAcademyWin *v2; // edi@1
  int v3; // ecx@1
  int v4; // edx@1
  int v5; // eax@1
  int v6; // ecx@1
  char *v7; // eax@1
  char *v8; // eax@4
  int v9; // eax@4
  char *v10; // eax@7
  char *v11; // eax@9
  char *v12; // [sp-Ch] [bp-B0h]@2
  char *v13; // [sp-8h] [bp-ACh]@2
  unsigned int v14; // [sp-4h] [bp-A8h]@5
  char szdata[128]; // [sp+8h] [bp-9Ch]@1
  char acname[21]; // [sp+88h] [bp-1Ch]@1
  unsigned int v17; // [sp+A0h] [bp-4h]@1
  int v18; // [sp+A4h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  ToolTipWin::ClearTipText((ToolTipWin *)g_pkToolTipWin);
  v3 = *(_DWORD *)&pData->charid.n5_name[4];
  v4 = *(_DWORD *)&pData->charid.n5_name[8];
  *(_DWORD *)acname = *(_DWORD *)&pData->charid.n5_name[0];
  v5 = *(_DWORD *)&pData->charid.n5_name[12];
  *(_DWORD *)&acname[4] = v3;
  v6 = *(_DWORD *)&pData->charid.n5_name[16];
  *(_DWORD *)&acname[12] = v5;
  *(_DWORD *)&acname[16] = v6;
  *(_DWORD *)&acname[8] = v4;
  acname[20] = 0;
  ((void (__stdcall *)(_DWORD, _DWORD, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    0,
    acname,
    1,
    255,
    255,
    0);
  ((void (__stdcall *)(signed int, _UNKNOWN *, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    1,
    &unk_9D0E7E,
    255,
    255,
    255,
    0);
  CDataReader::GetRecord((CDataReader *)(ITableBase<ClassName_CharClass>::ms_pkTable + 4), pData->classid);
  v7 = TextData::Get(0x95A9DAEDu);
  sprintf(szdata, v7);
  ((void (__stdcall *)(signed int, _DWORD, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    2,
    szdata,
    255,
    255,
    255,
    0);
  sprintf(szdata, "LV : %d");
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    3,
    szdata,
    255,
    255,
    255,
    0);
  if ( pData->isparty )
  {
    v13 = TextData::Get(0xEFE6FA48u);
    v12 = szdata;
  }
  else
  {
    v13 = TextData::Get(0xA0989BF4u);
    v12 = szdata;
  }
  sprintf(v12, v13);
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    4,
    szdata,
    255,
    255,
    255,
    0);
  MapInfoTab::GetByMapName(&pData->map);
  v8 = TextData::Get(0xDE353F4Du);
  sprintf(szdata, v8);
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    5,
    szdata,
    255,
    255,
    255,
    0);
  v9 = pData->logininfo._bf0;
  if ( pData->logininfo._bf0 & 1 )
  {
    v14 = -1886347311;
LABEL_9:
    v11 = TextData::Get(v14);
    sprintf(szdata, v11);
    goto LABEL_10;
  }
  if ( !(v9 & 0xFFE) )
  {
    v14 = -1797065253;
    goto LABEL_9;
  }
  v10 = TextData2::Get(0xF1ECBD28u);
  sprintf(szdata, v10);
LABEL_10:
  ((void (__stdcall *)(signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    6,
    szdata,
    255,
    255,
    255,
    0);
  ((void (__stdcall *)(signed int, char *, signed int, signed int, signed int, _DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[137].__vecDelDtor)(
    7,
    pData->statustitle,
    255,
    255,
    255,
    0);
  ((void (__stdcall *)(GuildAcademyWin *))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[139].__vecDelDtor)(v2);
  ((void (__stdcall *)(int, int))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
    PgWin::ms_iMsX.x,
    PgWin::ms_iMsY);
}
// A85C00: using guessed type int __security_cookie;
// A94348: using guessed type int ITableBase_ClassName_CharClass___ms_pkTable;

//----- (006F7870) --------------------------------------------------------
void __thiscall GuildAcademyWin::InvalidateGuildAcademyHistoryList(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // edi@1
  SlideListWin *v2; // ecx@1
  CClientGuildAcademy *v3; // eax@2
  NiTListItem<GUILD_HISTORY *> *v4; // ecx@3
  int v5; // eax@3
  unsigned int v6; // esi@6
  NiTListItem<GUILD_HISTORY *> *v7; // ecx@6
  char *v8; // eax@12
  int v9; // ebx@12
  unsigned int v10; // [sp-Ch] [bp-38h]@7
  NiTListItem<GUILD_HISTORY *> *kIter; // [sp+4h] [bp-28h]@6
  int v12; // [sp+8h] [bp-24h]@4
  char *pkHistoryText; // [sp+Ch] [bp-20h]@11
  char acName[21]; // [sp+10h] [bp-1Ch]@6
  unsigned int v15; // [sp+28h] [bp-4h]@1
  int v16; // [sp+2Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  v2 = this->m_pListWinHistory;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    v3 = GuildAcademyTask::GetGuildAcademy();
    if ( v3 )
    {
      v4 = v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      v5 = *(_DWORD *)&v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( v5 )
      {
        v12 = v5;
        while ( 1 )
        {
          v6 = (unsigned int)v4->m_element;
          v7 = v4->m_pkNext;
          *(_DWORD *)acName = *(_DWORD *)(v6 + 8);
          *(_DWORD *)&acName[4] = *(_DWORD *)(v6 + 12);
          kIter = v7;
          *(_DWORD *)&acName[8] = *(_DWORD *)(v6 + 16);
          *(_DWORD *)&acName[12] = *(_DWORD *)(v6 + 20);
          *(_DWORD *)&acName[16] = *(_DWORD *)(v6 + 24);
          acName[20] = 0;
          switch ( *(_DWORD *)(v6 + 28) )
          {
            case 0x64:
              v10 = 1284329033;
              goto LABEL_11;
            case 0x65:
              v10 = 1279068425;
              goto LABEL_11;
            case 0x66:
              v10 = 1412824912;
              goto LABEL_11;
            case 0x67:
              v10 = 1233868889;
LABEL_11:
              pkHistoryText = TextData3::Get(v10);
              if ( pkHistoryText )
              {
                v8 = fs("%d-%d-%d");
                v9 = SlideListWin::AddText(v1->m_pListWinHistory, v8);
                SlideListWin::SetText(v1->m_pListWinHistory, v9, 1u, acName);
                SlideListWin::SetText(v1->m_pListWinHistory, v9, 2u, pkHistoryText);
                SlideListWin::SetData(v1->m_pListWinHistory, v9, v6);
                SlideListWin::SetFontSize(v1->m_pListWinHistory, v9, 1);
              }
              break;
            default:
              break;
          }
          --v12;
          if ( !v12 )
            break;
          v4 = kIter;
        }
      }
      SlideListWin::AlignText(v1->m_pListWinHistory, 4u);
      SlideListWin::AlignText(v1->m_pListWinHistory, 0, 5u);
      SlideListWin::AlignText(v1->m_pListWinHistory, 1u, 4u);
      SlideListWin::AlignText(v1->m_pListWinHistory, 2u, 4u);
      SlideListWin::UpdateViewList(v1->m_pListWinHistory);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F7A10) --------------------------------------------------------
void __thiscall GuildAcademyWin::UpdateViewList(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  CClientGuildAcademyMember *v2; // ebx@3
  signed int v3; // edi@3
  GUILD_ACADEMY_MEMBER_CLIENT *pkData; // [sp+4h] [bp-4h]@4

  v1 = this;
  if ( this->m_pListWinMember
    && (unsigned __int8)((int (*)(void))this->m_pListWinMember->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    SlideListWin::RemoveAllList(v1->m_pListWinMember);
    v2 = GuildAcademyMemberTask::GetGuildAcademyMember();
    v3 = 0;
    if ( v2->baseclass_0.m_NumOfAcademyMembers > 0u )
    {
      pkData = v2->baseclass_0.m_AcademyMembers;
      do
      {
        if ( v1->m_bDefaultView )
          GuildAcademyWin::AddListItem_DefInfo(v1, pkData);
        ++pkData;
        ++v3;
      }
      while ( v3 < v2->baseclass_0.m_NumOfAcademyMembers );
    }
    SlideListWin::Sort(v1->m_pListWinMember, v1->m_nSortColumn, 0, 0);
    SlideListWin::AlignText(v1->m_pListWinMember, 4u);
    SlideListWin::AlignText(v1->m_pListWinMember, 0, 5u);
    SlideListWin::AlignText(v1->m_pListWinMember, 1u, 5u);
    SlideListWin::AlignText(v1->m_pListWinMember, 2u, 5u);
    SlideListWin::AlignText(v1->m_pListWinMember, 3u, 5u);
    SlideListWin::AlignText(v1->m_pListWinMember, 4u, 5u);
    SlideListWin::UpdateViewList(v1->m_pListWinMember);
    SlideBar::SetSplitCnt(v1->m_pkSlideBarMemberList, v1->m_pListWinMember->m_nSlideSplitCnt);
  }
}

//----- (006F7B20) --------------------------------------------------------
void __thiscall GuildAcademyWin::ChangeUserName(GuildAcademyWin *this, Name5 OldName, Name5 NewName)
{
  GuildAcademyWin *v3; // ebx@1
  SlideListWin *v4; // ecx@1
  CClientGuildAcademy *v5; // esi@2
  CClientGuildAcademyMember *v6; // edi@2
  GuildAcademyRankingWin *v7; // eax@2
  int v8; // edx@2
  int v9; // eax@2
  int v10; // ecx@3
  NiRefObjectVtbl *v11; // esi@12
  char *v12; // eax@12
  int v13; // eax@14
  char acNewName[21]; // [sp+8h] [bp-1Ch]@8
  unsigned int v15; // [sp+20h] [bp-4h]@1
  int v16; // [sp+24h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = this;
  v4 = this->m_pListWinMember;
  if ( v4 )
  {
    SlideListWin::RemoveAllList(v4);
    v5 = GuildAcademyTask::GetGuildAcademy();
    v6 = GuildAcademyMemberTask::GetGuildAcademyMember();
    v7 = GuildAcademyTask::GetGuildAcademyRankingWin();
    GuildAcademyRankingWin::ChangeUserName(v7, &OldName, &NewName);
    v8 = v6->baseclass_0.m_NumOfAcademyMembers;
    v9 = 0;
    if ( v8 <= 0 )
    {
LABEL_8:
      *(_QWORD *)&acNewName[8] = *(_QWORD *)&NewName.n5_name[8];
      *(_QWORD *)acNewName = *(_QWORD *)&NewName;
      *(_DWORD *)&acNewName[16] = *(_DWORD *)&NewName.n5_name[16];
      acNewName[20] = 0;
      if ( NewName.n5_name[0]
        && *(_QWORD *)&v5->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] == *(_QWORD *)&OldName
        && *(_QWORD *)&v5->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8] == *(_QWORD *)&OldName.n5_name[8] )
      {
        if ( *(_DWORD *)&v5->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] == *(_DWORD *)&OldName.n5_name[16] )
        {
          *(_DWORD *)&v5->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] = *(_DWORD *)&NewName;
          *(_QWORD *)&v5->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[4] = *(_QWORD *)&NewName.n5_name[4];
          *(_QWORD *)&v5->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[12] = *(_QWORD *)&NewName.n5_name[12];
          v11 = v3->m_pkGuildAcademyInfoTxt[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v12 = fs("¾ÆÄ«µ¥¹Ì ¸¶½ºÅÍ : %s");
          v11[118].__vecDelDtor((NiRefObject *)v3->m_pkGuildAcademyInfoTxt[0], (unsigned int)v12);
        }
      }
    }
    else
    {
      v10 = (int)&v6->baseclass_0.m_AcademyMembers[0].sName.n5_name[8];
      while ( __PAIR__(*(_DWORD *)(v10 - 4), *(_DWORD *)(v10 - 8)) != *(_QWORD *)&OldName
           || *(_QWORD *)v10 != *(_QWORD *)&OldName.n5_name[8]
           || *(_DWORD *)(v10 + 8) != *(_DWORD *)&OldName.n5_name[16] )
      {
        ++v9;
        v10 += 109;
        if ( v9 >= v8 )
          goto LABEL_8;
      }
      v13 = (int)&v6->baseclass_0.m_AcademyMembers[v9];
      *(_QWORD *)v13 = *(_QWORD *)&NewName;
      *(_QWORD *)(v13 + 8) = *(_QWORD *)&NewName.n5_name[8];
      *(_DWORD *)(v13 + 16) = *(_DWORD *)&NewName.n5_name[16];
      GuildAcademyWin::UpdateViewList(v3);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F7CC0) --------------------------------------------------------
void __thiscall GuildAcademyWin::InvalidateAcademy(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  CClientGuild *v2; // ebx@2
  CClientGuildAcademy *v3; // edi@2
  CClientGuild *v4; // eax@2
  int v5; // ebx@7
  int v6; // ecx@10
  int v7; // edx@10
  int v8; // ecx@10
  PgWinText *v9; // edx@10
  NiRefObjectVtbl *v10; // ebx@10
  char *v11; // eax@10
  char *v12; // eax@10
  NiRefObjectVtbl *v13; // ebx@10
  char *v14; // eax@10
  char *v15; // eax@10
  NiRefObjectVtbl *v16; // ebx@10
  char *v17; // eax@10
  char *v18; // eax@10
  NiRefObjectVtbl *v19; // ebx@10
  char *v20; // eax@10
  char *v21; // eax@10
  char *v22; // eax@10
  char *v23; // eax@10
  int v24; // ecx@14
  int v25; // edx@14
  int v26; // ecx@14
  int v27; // edx@14
  char *v28; // eax@14
  char *v29; // eax@14
  char *v30; // eax@14
  char *v31; // eax@14
  int v32; // eax@14
  char v33; // cl@15
  SlideListWin *v34; // eax@16
  int v35; // edx@18
  void *v36; // eax@19
  int v37; // eax@22
  char v38; // cl@23
  char *v39; // edi@25
  int v40; // eax@27
  int v41; // edi@27
  unsigned int v42; // eax@27
  unsigned int v43; // ebx@31
  const void *v44; // eax@33
  SlideListWin *v45; // ecx@35
  const char *v46; // eax@38
  signed int v47; // [sp-14h] [bp-4A4h]@3
  unsigned int v48; // [sp-10h] [bp-4A0h]@1
  HDC__ *hDC; // [sp+0h] [bp-490h]@22
  unsigned int found; // [sp+4h] [bp-48Ch]@27
  char _Ptr; // [sp+8h] [bp-488h]@24
  CClientGuild *lengthSize; // [sp+Ch] [bp-484h]@2
  CClientGuildAcademyMember *pkTestWin; // [sp+10h] [bp-480h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strNotice; // [sp+14h] [bp-47Ch]@22
  char pcTemp[512]; // [sp+30h] [bp-460h]@14
  char acStr[256]; // [sp+230h] [bp-260h]@22
  char buffer[256]; // [sp+330h] [bp-160h]@31
  char acDateTime[32]; // [sp+430h] [bp-60h]@14
  char acAuthor[21]; // [sp+450h] [bp-40h]@14
  char acname[21]; // [sp+468h] [bp-28h]@10
  unsigned int v61; // [sp+480h] [bp-10h]@1
  int v62; // [sp+48Ch] [bp-4h]@24
  int v63; // [sp+490h] [bp+0h]@1

  v61 = (unsigned int)&v63 ^ __security_cookie;
  v48 = (unsigned int)&v63 ^ __security_cookie;
  v1 = this;
  GuildAcademyWin::UpdateViewList(this);
  if ( !v1->m_kTabIndex )
  {
    v2 = GuildTask::GetGuild();
    lengthSize = v2;
    v3 = GuildAcademyTask::GetGuildAcademy();
    pkTestWin = GuildAcademyMemberTask::GetGuildAcademyMember();
    v4 = GuildTask::GetGuild();
    v47 = CClientGuild::AmIGuildMaster(v4) ? 1 : 0;
    ((void (__stdcall *)(signed int))v1->m_pkEditNoticeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v47);
    if ( CClientGuildAcademy::AmIGuildAcademyMember(v3) || CClientGuild::AmIGuildMember(v2) )
    {
      v6 = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[4];
      v7 = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8];
      *(_DWORD *)acname = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0];
      *(_DWORD *)&acname[12] = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[12];
      *(_DWORD *)&acname[4] = v6;
      v8 = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16];
      *(_DWORD *)&acname[8] = v7;
      v9 = v1->m_pkGuildAcademyInfoTxt[0];
      *(_DWORD *)&acname[16] = v8;
      acname[20] = 0;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = TextData3::Get(0x70B4C7CAu);
      v12 = fs(v11);
      v10[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildAcademyInfoTxt[0], (unsigned int)v12);
      ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfoTxt[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v13 = v1->m_pkGuildAcademyInfoTxt[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      CClientGuildAcademyMember::GetNumOfOnlineMembers(pkTestWin);
      v14 = TextData3::Get(0x9DA4BDA3u);
      v15 = fs(v14);
      v13[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildAcademyInfoTxt[1], (unsigned int)v15);
      ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfoTxt[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v16 = v1->m_pkGuildAcademyInfoTxt[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v17 = TextData3::Get(0x5F67u);
      v18 = fs(v17);
      v16[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildAcademyInfoTxt[2], (unsigned int)v18);
      ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfoTxt[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v19 = v1->m_pkGuildAcademyInfoTxt[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v20 = TextData3::Get(0x7C862DFCu);
      v21 = fs(v20);
      v19[118].__vecDelDtor((NiRefObject *)v1->m_pkGuildAcademyInfoTxt[3], (unsigned int)v21);
      ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfoTxt[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      pkTestWin = (CClientGuildAcademyMember *)&v1->m_pkGuildAcademyInfoTxt[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
      v22 = TextData2::Get(0xEFCFDD01u);
      v23 = fs(v22);
      ((void (__thiscall *)(PgWinText *, char *))pkTestWin->baseclass_0.vfptr)(v1->m_pkGuildAcademyInfoTxt[4], v23);
      ((void (__stdcall *)(signed int))v1->m_pkGuildAcademyInfoTxt[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    }
    else
    {
      v5 = (int)v1->m_pkGuildAcademyInfoTxt;
      pkTestWin = (CClientGuildAcademyMember *)5;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0);
        v5 += 4;
        pkTestWin = (CClientGuildAcademyMember *)((char *)pkTestWin - 1);
      }
      while ( pkTestWin );
    }
    SlideListWin::RemoveAllList(v1->m_pListWinNotice);
    if ( CClientGuild::AmIGuildMember(lengthSize) || CClientGuildAcademy::AmIGuildAcademyMember(v3) )
    {
      if ( v3->baseclass_0.m_GuildAcademy.sNotify[0] )
      {
        v24 = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sNotifyCharID.n5_name[0];
        v25 = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sNotifyCharID.n5_name[4];
        *(_DWORD *)&acAuthor[8] = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sNotifyCharID.n5_name[8];
        *(_DWORD *)acAuthor = v24;
        v26 = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sNotifyCharID.n5_name[12];
        *(_DWORD *)&acAuthor[4] = v25;
        v27 = *(_DWORD *)&v3->baseclass_0.m_GuildAcademy.sNotifyCharID.n5_name[16];
        *(_DWORD *)&acAuthor[12] = v26;
        *(_DWORD *)&acAuthor[16] = v27;
        acAuthor[20] = 0;
        pcTemp[0] = 0;
        memset(&pcTemp[1], 0, 0x1FFu);
        TextData2::Get(0x1A2B4123u);
        sprintf(pcTemp, "%s");
        strftime(acDateTime, 0x1Fu, pcTemp, &v3->baseclass_0.m_GuildAcademy.tm_dNotifyDate);
        SlideListWin::AddText(v1->m_pListWinNotice, &byte_9D0E7F);
        v28 = TextData3::Get(0xB454C62u);
        SlideListWin::AddText(v1->m_pListWinNotice, v28);
        SlideListWin::AddText(v1->m_pListWinNotice, &byte_9D0E86);
        TextData::Get(0x8693CAE1u);
        v29 = fs("%s : %s");
        SlideListWin::AddText(v1->m_pListWinNotice, v29);
        TextData::Get(0x83936495u);
        v30 = fs("%s : %s");
        SlideListWin::AddText(v1->m_pListWinNotice, v30);
        SlideListWin::AddText(v1->m_pListWinNotice, &byte_9D0E87);
        TextData::Get(0xE5E1C0D9u);
        v31 = fs("%s :");
        SlideListWin::AddText(v1->m_pListWinNotice, v31);
        SlideListWin::AddText(v1->m_pListWinNotice, byte_9D0E9E);
        v32 = (int)v3->baseclass_0.m_GuildAcademy.sNotify;
        do
        {
          v33 = *(_BYTE *)v32;
          *(_BYTE *)(v32 + pcTemp - v3->baseclass_0.m_GuildAcademy.sNotify) = *(_BYTE *)v32;
          ++v32;
        }
        while ( v33 );
        v34 = v1->m_pListWinNotice;
        if ( (signed int)((char *)v34->m_vecButList.baseclass_0._Mylast
                        - *(_DWORD *)&v34->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
        {
          v35 = *(_DWORD *)&v34->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0];
          if ( (*(_DWORD *)(*(_DWORD *)v35 + 336) - *(_DWORD *)(*(_DWORD *)v35 + 332)) >> 2 )
            v36 = (void *)**(_DWORD **)(*(_DWORD *)v35 + 332);
          else
            v36 = 0;
          pkTestWin = (CClientGuildAcademyMember *)v36;
        }
        else
        {
          pkTestWin = 0;
        }
        hDC = *(HDC__ **)(*(_DWORD *)(*(_DWORD *)&pkTestWin->baseclass_0.m_AcademyMembers[2].sIntro[43] + 312) + 192);
        acStr[0] = 0;
        memset(&acStr[1], 0, 0xFFu);
        v37 = (int)pcTemp;
        strNotice.baseclass_0._Myres = 15;
        strNotice.baseclass_0._Mysize = 0;
        strNotice.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        do
          v38 = *(_BYTE *)v37++;
        while ( v38 );
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &strNotice,
          pcTemp,
          v37 - (_DWORD)&pcTemp[1]);
        v62 = 0;
        _Ptr = 10;
        while ( 1 )
        {
          memset(acStr, 0, 0x100u);
          v39 = *(char **)&strNotice;
          if ( strNotice.baseclass_0._Myres < 0x10 )
            v39 = (char *)&strNotice;
          v40 = ((int (__cdecl *)(unsigned int))pkTestWin->baseclass_0.vfptr[3].Recv_NC_GUILD_ACADEMY_MEMBER_LIST_ACK)(v48);
          v41 = PgUtil::StringPixelCopy(acStr, v39, hDC, v40 - 10);
          v42 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strNotice, &_Ptr, 0, 1u);
          found = v42;
          if ( !v41 )
            break;
          if ( v42 > v41 || (lengthSize = (CClientGuild *)v42, v42 == -1) )
            lengthSize = (CClientGuild *)v41;
          buffer[0] = 0;
          memset(&buffer[1], 0, 0xFFu);
          v43 = (unsigned int)lengthSize;
          if ( strNotice.baseclass_0._Mysize < (unsigned int)lengthSize )
            v43 = strNotice.baseclass_0._Mysize;
          v44 = *(const void **)&strNotice;
          if ( strNotice.baseclass_0._Myres < 0x10 )
            v44 = &strNotice;
          memcpy_s(buffer, 0x100u, v44, v43);
          v45 = v1->m_pListWinNotice;
          buffer[v43] = 0;
          SlideListWin::AddText(v45, buffer);
          if ( found > v41 )
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
              &strNotice,
              0,
              (unsigned int)lengthSize);
          else
            std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
              &strNotice,
              0,
              (unsigned int)((char *)&lengthSize->baseclass_0.vfptr + 1));
        }
        v46 = *(const char **)&strNotice;
        if ( strNotice.baseclass_0._Myres < 0x10 )
          v46 = (const char *)&strNotice;
        SlideListWin::AddText(v1->m_pListWinNotice, v46);
        SlideListWin::AlignText(v1->m_pListWinNotice, 4u);
        SlideListWin::UpdateViewList(v1->m_pListWinNotice);
        SlideBar::SetSplitCnt(v1->m_pkSlideBarNotice, v1->m_pListWinMember->m_nSlideSplitCnt);
        v62 = -1;
        if ( strNotice.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&strNotice);
        strNotice.baseclass_0._Myres = 15;
        strNotice.baseclass_0._Mysize = 0;
        strNotice.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      }
    }
  }
  GuildAcademyWin::InvalidateGuildAcademyHistoryList(v1);
}
// A85C00: using guessed type int __security_cookie;

//----- (006F83D0) --------------------------------------------------------
void __thiscall GuildAcademyWin::DeleteUser(GuildAcademyWin *this, Name5 kName)
{
  GuildAcademyWin *v2; // esi@1
  CClientGuildAcademyMember *v3; // eax@2
  PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD pkProto; // [sp+4h] [bp-18h]@2
  unsigned int v5; // [sp+18h] [bp-4h]@1
  int v6; // [sp+1Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  if ( this->m_pListWinMember )
  {
    v3 = GuildAcademyMemberTask::GetGuildAcademyMember();
    *(_QWORD *)&pkProto.CharID.n5_name[0] = *(_QWORD *)&kName;
    *(_QWORD *)&pkProto.CharID.n5_name[8] = *(_QWORD *)&kName.n5_name[8];
    *(_DWORD *)&pkProto.CharID.n5_name[16] = *(_DWORD *)&kName.n5_name[16];
    if ( !v3 || v3->baseclass_0.vfptr->Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD((CGuildAcademyMember *)v3, &pkProto) )
      GuildAcademyWin::InvalidateAcademy(v2);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F8440) --------------------------------------------------------
void __thiscall GuildAcademyWin::_GuildAcademyWin(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  PopupMenuText *v2; // edi@1
  PopupMenuText *v3; // edi@5
  PopupMenuText *v4; // edi@9
  PopupMenuText *v5; // edi@13
  PopupMenuText *v6; // edi@17
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v7; // ST08_4@21
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v8; // ST04_4@21
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@21
  std::map<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> > > *v10; // [sp+4h] [bp-14h]@21
  GuildAcademyWin *v11; // [sp+8h] [bp-10h]@1
  int v12; // [sp+14h] [bp-4h]@1

  v1 = this;
  v11 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyWin::_vftable_;
  v2 = this->m_spPopupVanish.m_pObject;
  v12 = 5;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_spPopupPermitChat.m_pObject;
  LOBYTE(v12) = 4;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_spPopupForbidChat.m_pObject;
  LOBYTE(v12) = 3;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->m_spPopupInviteGuild.m_pObject;
  LOBYTE(v12) = 2;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v6 = v1->m_spPopupWhisperChat.m_pObject;
  LOBYTE(v12) = 1;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v10 = &v1->map_WinIndex;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v8 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v12) = 6;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->map_WinIndex,
    &result,
    v8,
    v7);
  operator delete(v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v12 = -1;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D1550: using guessed type int (__stdcall *GuildAcademyWin___vftable_)(int uiFlags);
// 9D156C: using guessed type int (__thiscall *GuildAcademyWin___vftable_)(void *p, char);

//----- (006F8590) --------------------------------------------------------
void __thiscall GuildAcademyWin::DirectMessage(GuildAcademyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildAcademyWin *v4; // edi@1
  float v5; // ecx@1
  int v6; // eax@2
  Name5 *v7; // esi@8
  int v8; // edx@10
  GuildAcademyMemberVanishTask *v9; // eax@11
  unsigned __int16 v10; // [sp-Ch] [bp-34h]@9
  void *v11; // [sp-8h] [bp-30h]@9
  int v12; // [sp-4h] [bp-2Ch]@9
  Name5 *pkMemberClient; // [sp+8h] [bp-20h]@7
  PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_REQ kProto; // [sp+Ch] [bp-1Ch]@8
  char v15; // [sp+20h] [bp-8h]@8
  unsigned int v16; // [sp+24h] [bp-4h]@1
  int v17; // [sp+28h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v4 = this;
  v5 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale;
  if ( LODWORD(v5) )
  {
    v6 = SlideListWin::GetCurSelIndex(LODWORD(v5));
    if ( v6 >= 0 )
    {
      switch ( iMsgTag )
      {
        case 9:
        case 12:
          if ( (PgWin *)((char *)v4 - 232) == g_pkToolTipWin->m_pkToolTipParentWin )
            ((void (__stdcall *)(_DWORD))g_pkToolTipWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          break;
        case 71:
          GuildAcademyWin::InvalidateAcademy((GuildAcademyWin *)((char *)v4 - 232));
          break;
        case 15:
          SlideListWin::GetData(
            LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_fScale),
            v6,
            (unsigned int *)&pkMemberClient);
          switch ( *(_DWORD *)pvBody )
          {
            case 0x3EE:
              v7 = pkMemberClient;
              Name5::n_string(pkMemberClient, kProto.sChatBanCancelTargetCharID.n5_name);
              v15 = 0;
              *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[0] = *(_QWORD *)&v7->n5_name[0];
              *(_QWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[8] = *(_QWORD *)&v7->n5_name[8];
              *(_DWORD *)&GameFrameWork::m_kWhisperCharID.n5_name[16] = *(_DWORD *)&v7->n5_name[16];
              GameFrameWork::OnWhisperChatStart(
                LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
                kProto.sChatBanCancelTargetCharID.n5_name);
              return;
            case 0x3EF:
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[12] = 0i64;
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[4] = 0i64;
              *(_DWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[0] = 0;
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[0] = *(_QWORD *)&pkMemberClient->n5_name[0];
              *(_DWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[8] = *(_DWORD *)&pkMemberClient->n5_name[8];
              v12 = 20;
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[12] = *(_DWORD *)&pkMemberClient->n5_name[12];
              v11 = &kProto;
              *(_DWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[16] = *(_DWORD *)&pkMemberClient->n5_name[16];
              v10 = 41;
              goto LABEL_14;
            case 0x3F0:
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[8] = 0i64;
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[0] = 0i64;
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[0] = *(_QWORD *)&pkMemberClient->n5_name[0];
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[8] = *(_DWORD *)&pkMemberClient->n5_name[8];
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[12] = *(_DWORD *)&pkMemberClient->n5_name[12];
              v8 = *(_DWORD *)&pkMemberClient->n5_name[16];
              v12 = 20;
              v11 = &kProto;
              v10 = 33;
              goto LABEL_13;
            case 0x3F2:
              v9 = ISingletonTask<GuildAcademyMemberVanishTask>::Run();
              GuildAcademyMemberVanishTask::SetInfo(v9, pkMemberClient);
              break;
            case 0x3F1:
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[8] = 0i64;
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[0] = 0i64;
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[0] = *(_QWORD *)&pkMemberClient->n5_name[0];
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[8] = *(_DWORD *)&pkMemberClient->n5_name[8];
              *(_QWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[12] = *(_DWORD *)&pkMemberClient->n5_name[12];
              v8 = *(_DWORD *)&pkMemberClient->n5_name[16];
              v12 = 20;
              v11 = &kProto;
              v10 = 138;
LABEL_13:
              *(_DWORD *)&kProto.sChatBanCancelTargetCharID.n5_name[16] = v8;
LABEL_14:
              NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, v10, v11, v12);
              break;
            default:
              return;
          }
          return;
        default:
          return;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006F8810) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnTab01(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v3; // esi@1
  PgWin *const v4; // ecx@2
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v5; // eax@8
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *j; // eax@9
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *i; // eax@12
  signed int v8; // [sp-4h] [bp-Ch]@4

  v1 = this;
  v2 = this->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  this->m_kTabIndex = 0;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      v4 = v3->_Myval.baseclass_0.first;
      if ( v4 )
      {
        if ( v3->_Myval.baseclass_0.second )
          v8 = 0;
        else
          v8 = 1;
        ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v8);
      }
      if ( !v3->_Isnil )
      {
        v5 = v3->_Right;
        if ( v5->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  GuildAcademyWin::InvalidateAcademy(v1);
  v1->m_pkTab01->m_bCheck = 1;
  v1->m_pkTab02->m_bCheck = 0;
  v1->m_pkTab03->m_bCheck = 0;
}

//----- (006F88D0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnTab02(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v4; // eax@6
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *j; // eax@7
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *i; // eax@10
  int v7; // [sp-4h] [bp-Ch]@3

  v1 = this;
  v2 = this->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  this->m_kTabIndex = 1;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      v7 = v3->_Myval.baseclass_0.second == 1;
      ((void (__stdcall *)(int))v3->_Myval.baseclass_0.first->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7);
      if ( !v3->_Isnil )
      {
        v4 = v3->_Right;
        if ( v4->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  GuildAcademyWin::InvalidateAcademy(v1);
  v1->m_pkTab01->m_bCheck = 0;
  v1->m_pkTab02->m_bCheck = 1;
  v1->m_pkTab03->m_bCheck = 0;
}

//----- (006F8990) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnTab03(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // edi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *v4; // eax@6
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *j; // eax@7
  std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *i; // eax@10
  int v7; // [sp-4h] [bp-Ch]@3

  v1 = this;
  v2 = this->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  this->m_kTabIndex = 2;
  v3 = v2->_Left;
  if ( v2->_Left != v2 )
  {
    do
    {
      v7 = v3->_Myval.baseclass_0.second == 2;
      ((void (__stdcall *)(int))v3->_Myval.baseclass_0.first->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v7);
      if ( !v3->_Isnil )
      {
        v4 = v3->_Right;
        if ( v4->_Isnil )
        {
          for ( i = v3->_Parent; !i->_Isnil; i = i->_Parent )
          {
            if ( v3 != i->_Right )
              break;
            v3 = i;
          }
          v3 = i;
        }
        else
        {
          v3 = v3->_Right;
          for ( j = v4->_Left; !j->_Isnil; j = j->_Left )
            v3 = j;
        }
      }
    }
    while ( v3 != v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  GuildAcademyWin::InvalidateAcademy(v1);
  v1->m_pkTab01->m_bCheck = 0;
  v1->m_pkTab02->m_bCheck = 0;
  v1->m_pkTab03->m_bCheck = 1;
}

//----- (006F8A50) --------------------------------------------------------
void __thiscall GuildAcademyWin::GuildAcademyWin(GuildAcademyWin *this)
{
  GuildAcademyWin *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  GuildAcademyWin *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyWin::_vftable_;
  v6 = 0;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<PgWin *,unsigned int,std::less<PgWin *>,std::allocator<std::pair<PgWin * const,unsigned int> >,0> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->map_WinIndex.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  v1->m_spPopupWhisperChat.m_pObject = 0;
  v1->m_spPopupInviteGuild.m_pObject = 0;
  v1->m_spPopupForbidChat.m_pObject = 0;
  v1->m_spPopupPermitChat.m_pObject = 0;
  v1->m_spPopupVanish.m_pObject = 0;
  *(_WORD *)&v1->m_bShowOnlineOnly = 256;
  v1->m_nSortColumn = 0;
  v1->m_pkSlideBarMemberList = 0;
  v1->m_pkSlideBarNotice = 0;
  v1->m_pkSlideBar = 0;
  v1->m_pListWinMember = 0;
  v1->m_pListWinNotice = 0;
  v1->m_pkTitle1 = 0;
  v1->m_pkTitle2 = 0;
  v1->m_pkTitle3 = 0;
  v1->m_kTabIndex = 0;
  v1->m_pkGuildAcademyInfoTxt[0] = 0;
  v1->m_pkGuildAcademyInfoTxt[1] = 0;
  v1->m_pkGuildAcademyInfoTxt[2] = 0;
  v1->m_pkGuildAcademyInfoTxt[3] = 0;
  v1->m_pkGuildAcademyInfoTxt[4] = 0;
  v1->m_pkMemberPopupMenu = 0;
  v1->m_bReverse3 = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9D1550: using guessed type int (__stdcall *GuildAcademyWin___vftable_)(int uiFlags);
// 9D156C: using guessed type int (__thiscall *GuildAcademyWin___vftable_)(void *p, char);

//----- (006F8BB0) --------------------------------------------------------
GuildAcademyWin *__cdecl GuildAcademyWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GuildAcademyWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1DCu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GuildAcademyWin::GuildAcademyWin((GuildAcademyWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GuildAcademyWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (006F8CE0) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnCommand(GuildAcademyWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0xBu:
      GuildAcademyWin::OnWinClose(this);
      break;
    case 0xDu:
      GuildAcademyWin::OnClickJoinBtn(this);
      break;
    case 0xEu:
      GuildAcademyWin::OnClickMasterTeleportBtn(this);
      break;
    case 0xFu:
      GuildAcademyWin::OnClickInvitePartyBtn(this);
      break;
    case 0x12u:
      GuildAcademyWin::OnSlideBarMemberList(this);
      break;
    case 0x13u:
      GuildAcademyWin::OnSlideBarNotice(this);
      break;
    case 0x14u:
      GuildAcademyWin::OnSortByTitle01(this);
      break;
    case 0x15u:
      GuildAcademyWin::OnSortByTitle02(this);
      break;
    case 0x16u:
      GuildAcademyWin::OnSortByTitle03(this);
      break;
    case 0x17u:
      GuildAcademyWin::OnSortByTitle04(this);
      break;
    case 0x18u:
      GuildAcademyWin::OnSortByTitle05(this);
      break;
    case 0x1Au:
      GuildAcademyWin::OnLClick(this, lParam);
      break;
    case 0x19u:
      GuildAcademyWin::OnRClick(this, lParam);
      break;
    case 0x1Bu:
      GuildAcademyWin::OnChangeTab(this, 0);
      break;
    case 0x1Cu:
      GuildAcademyWin::OnChangeTab(this, TE_GUILD);
      break;
    case 0x1Eu:
      GuildAcademyWin::OnChangeTab(this, TE_PARTYMATCH);
      break;
    case 0x1Du:
      GuildAcademyWin::OnChangeTab(this, TE_WEDDING);
      break;
    case 0x1Fu:
      GuildAcademyWin::OnChangeTab(this, TE_HOLYPROMISE);
      break;
    case 0xCu:
      GuildAcademyWin::OnEditNotice(this);
      break;
    case 0x20u:
      GuildAcademyWin::OnHelpLink(this);
      break;
    case 0x21u:
      GuildAcademyWin::OnTab01(this);
      break;
    case 0x22u:
      GuildAcademyWin::OnTab02(this);
      break;
    case 0x23u:
      GuildAcademyWin::OnTab03(this);
      break;
    case 0x27u:
      GuildAcademyWin::OnSlideBarHistory(this);
      break;
    default:
      return;
  }
}

//----- (006F8E60) --------------------------------------------------------
void __thiscall GuildAcademyWin::OnShowWin(GuildAcademyWin *this)
{
  unsigned int v1; // eax@1
  int v2; // eax@2

  v1 = this->m_kTabIndex;
  if ( v1 )
  {
    v2 = v1 - 1;
    if ( v2 )
    {
      if ( v2 == 1 )
        GuildAcademyWin::OnTab03(this);
    }
    else
    {
      GuildAcademyWin::OnTab02(this);
    }
  }
  else
  {
    GuildAcademyWin::OnTab01(this);
  }
}

//----- (006F8E90) --------------------------------------------------------
bool __thiscall GuildAcademyWin::Create(GuildAcademyWin *this, PgFrameWork *pkFrameWork)
{
  GuildAcademyWin *v2; // esi@1
  NiTexturePalette *v3; // ebx@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  int v8; // edi@11
  int v9; // ebx@11
  NiSourceTexture *v10; // eax@11
  PgSprData *v11; // eax@14
  PgSprData *v12; // eax@14
  PgFont *v13; // eax@17
  PgWinText *v14; // edi@17
  char *v15; // eax@17
  PgSprData *v16; // edi@17
  PgSprData *v17; // ST134_4@17
  int v18; // edi@17
  PgSprData *v19; // eax@19
  PgSprData *v20; // eax@19
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v21; // eax@19
  PgSprData *v22; // eax@19
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v23; // eax@19
  PgSprData *v24; // eax@19
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v25; // eax@19
  PgFont *v26; // eax@19
  PgWinText *v27; // eax@19
  NiRefObjectVtbl *v28; // edx@19
  char *v29; // eax@19
  PgFont *v30; // eax@19
  PgWinText *v31; // eax@19
  NiRefObjectVtbl *v32; // edx@19
  char *v33; // eax@19
  SLWCreateInfo::Item *v34; // eax@19
  char *v35; // eax@27
  PgSprData *v36; // eax@35
  SlideListWin *v37; // eax@35
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v38; // eax@35
  SLWCreateInfo::Item *v39; // eax@35
  PgSprData *v40; // eax@39
  SlideListWin *v41; // eax@39
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v42; // eax@39
  SLWCreateInfo::Item *v43; // eax@39
  char *v44; // eax@47
  char *v45; // eax@49
  char *v46; // eax@51
  PgSprData *v47; // eax@51
  SlideListWin *v48; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v49; // eax@51
  void *v50; // eax@51
  SlideBar *v51; // eax@51
  const int v52; // edx@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v53; // eax@51
  SlideBar *v54; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v55; // eax@51
  SlideBar *v56; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v57; // eax@51
  ColumnBut *v58; // eax@51
  char *v59; // edx@51
  int v60; // eax@51
  void *v61; // edx@51
  PgFont *v62; // eax@51
  PgWinText *v63; // eax@51
  NiRefObjectVtbl *v64; // edx@51
  char *v65; // eax@51
  ColumnBut *v66; // eax@51
  char *v67; // edx@51
  int v68; // eax@51
  void *v69; // edx@51
  PgFont *v70; // eax@51
  PgWinText *v71; // eax@51
  NiRefObjectVtbl *v72; // edx@51
  char *v73; // eax@51
  ColumnBut *v74; // eax@51
  char *v75; // edx@51
  int v76; // eax@51
  void *v77; // edx@51
  PgFont *v78; // eax@51
  PgWinText *v79; // eax@51
  NiRefObjectVtbl *v80; // edx@51
  char *v81; // eax@51
  int v82; // ecx@51
  void *v83; // eax@51
  PgFont *v84; // eax@51
  PgWinText *v85; // eax@51
  NiRefObjectVtbl *v86; // edx@51
  char *v87; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v88; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v89; // eax@51
  int v90; // ecx@51
  void *v91; // eax@51
  PgFont *v92; // eax@51
  char *v93; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v94; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v95; // eax@51
  int v96; // ecx@51
  void *v97; // eax@51
  PgFont *v98; // eax@51
  PgWinText *v99; // eax@51
  NiRefObjectVtbl *v100; // edx@51
  char *v101; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v102; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v103; // eax@51
  int v104; // ecx@51
  void *v105; // eax@51
  PgFont *v106; // eax@51
  PgWinText *v107; // eax@51
  NiRefObjectVtbl *v108; // edx@51
  char *v109; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v110; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v111; // eax@51
  int v112; // ecx@51
  void *v113; // eax@51
  PgFont *v114; // eax@51
  PgWinText *v115; // eax@51
  NiRefObjectVtbl *v116; // edx@51
  char *v117; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v118; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v119; // eax@51
  int v120; // ecx@51
  void *v121; // eax@51
  PgFont *v122; // eax@51
  PgWinText *v123; // eax@51
  NiRefObjectVtbl *v124; // edx@51
  char *v125; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v126; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v127; // eax@51
  int v128; // ecx@51
  void *v129; // eax@51
  PgFont *v130; // eax@51
  PgWinText *v131; // eax@51
  NiRefObjectVtbl *v132; // edx@51
  char *v133; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v134; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v135; // eax@51
  int v136; // ecx@51
  void *v137; // eax@51
  PgFont *v138; // eax@51
  PgWinText *v139; // eax@51
  NiRefObjectVtbl *v140; // edx@51
  char *v141; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v142; // eax@51
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v143; // eax@51
  PgFont *v144; // eax@52
  PgWinText *v145; // eax@52
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v146; // eax@52
  int v147; // ecx@53
  unsigned int v148; // eax@53
  PgFont *v149; // eax@53
  PgWinText *v150; // eax@53
  NiRefObjectVtbl *v151; // edx@53
  char *v152; // eax@53
  int v153; // ecx@53
  unsigned int v154; // eax@53
  PgFont *v155; // eax@53
  PgWinText *v156; // eax@53
  NiRefObjectVtbl *v157; // edx@53
  char *v158; // eax@53
  int v159; // ecx@53
  unsigned int v160; // eax@53
  PgFont *v161; // eax@53
  PgWinText *v162; // eax@53
  NiRefObjectVtbl *v163; // edx@53
  char *v164; // eax@53
  PgWinBut *v165; // eax@53
  char *v166; // ecx@53
  int v167; // ecx@53
  int v168; // edx@53
  unsigned int v169; // ecx@53
  PgWin *v170; // ST138_4@53
  PgFont *v171; // eax@53
  PgWinText *v172; // eax@53
  NiRefObjectVtbl *v173; // edx@53
  char *v174; // eax@53
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v175; // eax@53
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *v176; // eax@53
  PgSprData *v177; // eax@53
  int v178; // edi@53
  char *v179; // eax@53
  char *v180; // eax@53
  char *v181; // eax@53
  char *v182; // eax@53
  char *v183; // eax@53
  PgWinBut *v184; // edi@53
  char *v185; // eax@53
  NiPointer<PgSprData::PgHitTester> *v186; // edx@53
  unsigned int v187; // edi@53
  unsigned int v188; // ebx@53
  PgFont *v189; // eax@53
  PgWinText *v190; // edi@53
  NiRefObjectVtbl *v191; // ebx@53
  char *v192; // eax@53
  PgSprData::PgHitTester *v193; // eax@53
  unsigned int v194; // edi@53
  unsigned int v195; // ebx@53
  PgFont *v196; // eax@53
  PgWinText *v197; // edi@53
  NiRefObjectVtbl *v198; // ebx@53
  char *v199; // eax@53
  NiPointer<PgSprData::PgHitTester> *v200; // ecx@53
  unsigned int v201; // edi@53
  unsigned int v202; // ebx@53
  PgFont *v203; // eax@53
  PgWinText *v204; // edi@53
  NiRefObjectVtbl *v205; // ebx@53
  char *v206; // eax@53
  PgSprData::PgHitTester *v207; // eax@53
  unsigned int v208; // edi@53
  unsigned int v209; // ebx@53
  PgFont *v210; // eax@53
  PgWinText *v211; // edi@53
  NiRefObjectVtbl *v212; // ebx@53
  char *v213; // eax@53
  NiPointer<PgSprData::PgHitTester> *v214; // ecx@53
  unsigned int v215; // edi@53
  unsigned int v216; // ebx@53
  PgFont *v217; // eax@53
  PgWinText *v218; // edi@53
  NiRefObjectVtbl *v219; // ebx@53
  char *v220; // eax@53
  PgSprData::PgHitTester *v221; // eax@53
  unsigned int v222; // edi@53
  unsigned int v223; // ebx@53
  PgFont *v224; // eax@53
  PgWinText *v225; // edi@53
  NiRefObjectVtbl *v226; // ebx@53
  char *v227; // eax@53
  NiSourceTexture *v228; // eax@53
  PopupMenuWin *v229; // eax@53
  char *v230; // eax@53
  PopupMenuText *v231; // eax@53
  char *v232; // eax@53
  PopupMenuText *v233; // eax@53
  char *v234; // eax@53
  PopupMenuText *v235; // eax@53
  char *v236; // eax@53
  PopupMenuText *v237; // eax@53
  char *v238; // eax@53
  PopupMenuText *v239; // eax@53
  NiNode *v240; // esi@54
  const char *v241; // [sp+134h] [bp-A4h]@12
  int *v242; // [sp+138h] [bp-A0h]@12
  int *v243; // [sp+13Ch] [bp-9Ch]@12
  volatile LONG *v244; // [sp+140h] [bp-98h]@6
  NiSourceTexture *v245; // [sp+140h] [bp-98h]@12
  unsigned int v246; // [sp+144h] [bp-94h]@1
  char v247; // [sp+154h] [bp-84h]@52
  SLWCreateInfo kCreateInfo; // [sp+15Ch] [bp-7Ch]@19
  unsigned int uiWidth; // [sp+178h] [bp-60h]@14
  unsigned int uiHeight; // [sp+17Ch] [bp-5Ch]@14
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> result; // [sp+180h] [bp-58h]@19
  int iOffX; // [sp+188h] [bp-50h]@11
  std::pair<int const ,int> _Val; // [sp+18Ch] [bp-4Ch]@19
  const int pkButWin; // [sp+194h] [bp-44h]@19
  unsigned int v255; // [sp+198h] [bp-40h]@17
  int uiLeft; // [sp+19Ch] [bp-3Ch]@4
  int uiTop; // [sp+1A0h] [bp-38h]@4
  NiPointer<NiNode> spNode; // [sp+1A4h] [bp-34h]@1
  char *pkTextWin; // [sp+1A8h] [bp-30h]@18
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+1ACh] [bp-2Ch]@19
  unsigned int v261; // [sp+1C8h] [bp-10h]@1
  int v262; // [sp+1D4h] [bp-4h]@1
  int v263; // [sp+1D8h] [bp+0h]@1

  v261 = (unsigned int)&v263 ^ __security_cookie;
  v246 = (unsigned int)&v263 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v262 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GuildAcademyWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "GuildAcademyWin", 0) )
  {
    v6 = spNode.m_pObject;
    v262 = -1;
    if ( spNode.m_pObject )
    {
      v244 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_7;
    }
    return 0;
  }
  v8 = uiLeft;
  v9 = uiTop;
  iOffX = uiLeft;
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v245 = v10;
    v243 = &uiTop;
    v242 = &uiLeft;
    v241 = "Theme";
  }
  else
  {
    v245 = 0;
    v243 = &uiTop;
    v242 = &uiLeft;
    v241 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v241, v242, v243, v245);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "IconSlot", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v8, uiTop - v9, v12, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v6 = spNode.m_pObject;
    v262 = -1;
    if ( spNode.m_pObject )
    {
      v244 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_7:
      if ( !InterlockedDecrement(v244) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v13 = Font::Get(MAIN_MENU);
  v14 = PgWinText::CreateWin(
          uiLeft - v8,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v13,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    v14,
    1,
    v246);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
    (NiRefObject *)v14,
    (unsigned int)&Color::m_kDxWinTitleColor);
  v255 = (unsigned int)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
  v15 = TextData::Get(0xE3504941u);
  (*(void (__thiscall **)(PgWinText *, char *))v255)(v14, v15);
  v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v14,
    0);
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ClsNor", &uiLeft, &uiTop, 0);
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "ClsClick");
  PgSprData::Add(v16, &spNode.m_pObject->baseclass_0, "ClsOver");
  v17 = v16;
  v18 = iOffX;
  PgWinBut::CreateWin(uiLeft - iOffX, uiTop - v9, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0xBu, 0, 0);
  if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
  {
    pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "HelpLinkNor", &uiLeft, &uiTop, 0);
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkClick");
    PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "HelpLinkOver");
    PgWinBut::CreateWin(
      uiLeft - v18,
      uiTop - v9,
      (PgSprData *)pkTextWin,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      0x20u,
      0,
      0);
  }
  v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, 0);
  PgWinSpr::CreateWin(uiLeft - v18, uiTop - v9, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v20 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel02", &uiLeft, &uiTop, 0);
  _Val.baseclass_0.first = (const int)PgWinSpr::CreateWin(
                                        uiLeft - v18,
                                        uiTop - v9,
                                        v20,
                                        &v2->baseclass_0.baseclass_0.baseclass_0,
                                        0,
                                        0);
  _Val.baseclass_0.second = 1;
  v21 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v21,
    0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel03", &uiLeft, &uiTop, 0);
  _Val.baseclass_0.first = (const int)PgWinSpr::CreateWin(
                                        uiLeft - v18,
                                        uiTop - v9,
                                        v22,
                                        &v2->baseclass_0.baseclass_0.baseclass_0,
                                        0,
                                        0);
  _Val.baseclass_0.second = 2;
  v23 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v23,
    0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel04", &uiLeft, &uiTop, 0);
  _Val.baseclass_0.first = (const int)PgWinSpr::CreateWin(
                                        uiLeft - v18,
                                        uiTop - v9,
                                        v24,
                                        &v2->baseclass_0.baseclass_0.baseclass_0,
                                        0,
                                        0);
  _Val.baseclass_0.second = 0;
  v25 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v25,
    0);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, 0);
  v26 = Font::Get(TITLEBOLD);
  v27 = PgWinText::CreateWin(
          uiLeft - v18,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v26,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v28 = v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v27;
  v28[122].__vecDelDtor((NiRefObject *)v27, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v29 = TextData::Get(0x253B184Cu);
  (*(void (__thiscall **)(char *, char *))v255)(pkTextWin, v29);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  PgSprData::Create(&spNode.m_pObject->baseclass_0, "Category", &uiLeft, &uiTop, 0);
  v30 = Font::Get(TITLEBOLD);
  v31 = PgWinText::CreateWin(
          uiLeft - v18,
          uiTop - v9,
          uiWidth,
          uiHeight,
          v30,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v32 = v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v31;
  v32[122].__vecDelDtor((NiRefObject *)v31, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v33 = TextData3::Get(0x2E4A1B0Bu);
  (*(void (__thiscall **)(char *, char *))v255)(pkTextWin, v33);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
  kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
  kCreateInfo.m_bMakeData = 0;
  kCreateInfo.m_nOffX = 0;
  kCreateInfo.m_nOffY = 0;
  LOBYTE(v262) = 1;
  v34 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v34->nItemType = 1;
  pkTextWin = (char *)v34;
  v34->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
  LOBYTE(v262) = 2;
  pkButWin = (const int)(pkTextWin + 72);
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
  LOBYTE(v262) = 3;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkButWin,
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
  LOBYTE(v262) = 4;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkButWin,
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column01", 8u);
  LOBYTE(v262) = 5;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v35 = pkTextWin;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  v35[88] = 1;
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column02", 8u);
  LOBYTE(v262) = 6;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column03", 8u);
  LOBYTE(v262) = 7;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column04", 8u);
  LOBYTE(v262) = 8;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column05", 8u);
  LOBYTE(v262) = 9;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText01", &uiLeft, &uiTop, 0);
  v37 = SlideListWin::CreateWin(
          uiLeft - iOffX,
          uiTop - v9,
          v36,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pListWinMember = v37;
  v37->m_uiLClickMsg = 26;
  v2->m_pListWinMember->m_uiRClickMsg = 25;
  SlideListWin::UpdateViewList(v2->m_pListWinMember);
  _Val.baseclass_0.first = (const int)v2->m_pListWinMember;
  _Val.baseclass_0.second = 1;
  v38 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v38,
    0);
  SLWCreateInfo::Clear(&kCreateInfo);
  v39 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v39->nItemType = 1;
  v39->pNode = spNode.m_pObject;
  pkTextWin = (char *)v39;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor01", 0xEu);
  LOBYTE(v262) = 10;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column06", 8u);
  LOBYTE(v262) = 11;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText02", &uiLeft, &uiTop, 0);
  v41 = SlideListWin::CreateWin(
          uiLeft - iOffX,
          uiTop - v9,
          v40,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          &kCreateInfo,
          0,
          0);
  v2->m_pListWinNotice = v41;
  v41->m_bCheckEnable = 0;
  SlideListWin::UpdateViewList(v2->m_pListWinNotice);
  _Val.baseclass_0.first = (const int)v2->m_pListWinNotice;
  _Val.baseclass_0.second = 0;
  v42 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v42,
    0);
  SLWCreateInfo::Clear(&kCreateInfo);
  v43 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
  v43->nItemType = 1;
  pkTextWin = (char *)v43;
  v43->pNode = spNode.m_pObject;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Nor", 0xEu);
  LOBYTE(v262) = 12;
  pkButWin = (const int)(pkTextWin + 72);
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Click", 0x10u);
  LOBYTE(v262) = 13;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkButWin,
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBar01Over", 0xFu);
  LOBYTE(v262) = 14;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkButWin,
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnHis01", 0xBu);
  LOBYTE(v262) = 15;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v44 = pkTextWin;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  v44[88] = 1;
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnHis02", 0xBu);
  LOBYTE(v262) = 16;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v45 = pkTextWin;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  v45[88] = 1;
  pkTextWin = (char *)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
  *(_DWORD *)pkTextWin = 2;
  thisa.baseclass_0._Myres = 15;
  thisa.baseclass_0._Mysize = 0;
  thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnHis03", 0xBu);
  LOBYTE(v262) = 17;
  std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
    (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(pkTextWin + 72),
    &thisa);
  LOBYTE(v262) = 1;
  if ( thisa.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&thisa);
  v46 = pkTextWin;
  *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
  v46[88] = 1;
  SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
  v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SubText03", &uiLeft, &uiTop, 0);
  v48 = SlideListWin::CreateWin(uiLeft, uiTop, v47, &v2->baseclass_0.baseclass_0.baseclass_0, &kCreateInfo, 0, 0);
  v2->m_pListWinHistory = v48;
  _Val.baseclass_0.first = (const int)v48;
  _Val.baseclass_0.second = 2;
  v49 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v49,
    0);
  v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, 0);
  pkTextWin = (char *)v50;
  v51 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar02",
          "SlideBar_UpBtn02",
          "SlideBar_DnBtn02",
          (PgSprData *)v50,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarMemberList = v51;
  v51->m_uiClickMsg = 18;
  v2->m_pkSlideBarMemberList->m_eType = 1;
  v52 = (const int)v2->m_pkSlideBarMemberList;
  _Val.baseclass_0.second = 1;
  _Val.baseclass_0.first = v52;
  v53 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v53,
    0);
  v54 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar01",
          "SlideBar_UpBtn01",
          "SlideBar_DnBtn01",
          (PgSprData *)pkTextWin,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarNotice = v54;
  v54->m_uiClickMsg = 19;
  v2->m_pkSlideBarNotice->m_eType = 1;
  _Val.baseclass_0.first = (const int)v2->m_pkSlideBarNotice;
  _Val.baseclass_0.second = 0;
  v55 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v55,
    0);
  v56 = SlideBar::CreateWin(
          spNode.m_pObject,
          "SlideBar03",
          "SlideBar_UpBtn03",
          "SlideBar_DnBtn03",
          (PgSprData *)pkTextWin,
          0,
          &v2->baseclass_0.baseclass_0.baseclass_0);
  v2->m_pkSlideBarHistory = v56;
  v56->m_uiClickMsg = 39;
  v2->m_pkSlideBarHistory->m_eType = 1;
  _Val.baseclass_0.first = (const int)v2->m_pkSlideBarHistory;
  _Val.baseclass_0.second = 2;
  v57 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v57,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab01_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab01_On");
  v58 = ColumnBut::CreateWin(
          uiLeft - iOffX,
          uiTop - v9,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x21u,
          0);
  v59 = pkTextWin;
  v2->m_pkTab01 = v58;
  v60 = **((_DWORD **)v59 + 9);
  v61 = *(void **)(v60 + 20);
  v255 = *(_DWORD *)(v60 + 24);
  pkButWin = (const int)v61;
  v62 = Font::Get(MAIN_MENU);
  v63 = PgWinText::CreateWin(
          uiLeft - iOffX,
          uiTop - v9 + 1,
          pkButWin,
          v255,
          v62,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v64 = v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v63;
  v64[122].__vecDelDtor((NiRefObject *)v63, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v65 = TextData3::Get(0x25581D98u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v65);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab02_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab02_On");
  v66 = ColumnBut::CreateWin(
          uiLeft - iOffX,
          uiTop - v9,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x22u,
          0);
  v67 = pkTextWin;
  v2->m_pkTab02 = v66;
  v68 = **((_DWORD **)v67 + 9);
  v69 = *(void **)(v68 + 20);
  v255 = *(_DWORD *)(v68 + 24);
  pkButWin = (const int)v69;
  v70 = Font::Get(MAIN_MENU);
  v71 = PgWinText::CreateWin(
          uiLeft - iOffX,
          uiTop - v9 + 1,
          pkButWin,
          v255,
          v70,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v72 = v71->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v71;
  v72[122].__vecDelDtor((NiRefObject *)v71, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v73 = TextData3::Get(0x2CA1668Bu);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v73);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Tab03_Off", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Tab03_On");
  v74 = ColumnBut::CreateWin(
          uiLeft - iOffX,
          uiTop - v9,
          (PgSprData *)pkTextWin,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0x23u,
          0);
  v75 = pkTextWin;
  v2->m_pkTab03 = v74;
  v76 = **((_DWORD **)v75 + 9);
  v77 = *(void **)(v76 + 20);
  v255 = *(_DWORD *)(v76 + 24);
  pkButWin = (const int)v77;
  v78 = Font::Get(MAIN_MENU);
  v79 = PgWinText::CreateWin(
          uiLeft - iOffX,
          uiTop - v9 + 1,
          pkButWin,
          v255,
          v78,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v80 = v79->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v79;
  v80[122].__vecDelDtor((NiRefObject *)v79, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v81 = TextData3::Get(0x8BA56B9Du);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v81);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  v2->m_pkTab01->m_bCheck = 1;
  v2->m_pkTab02->m_bCheck = 0;
  v2->m_pkTab03->m_bCheck = 0;
  SlideBar::SetSplitCnt(v2->m_pkSlideBarMemberList, v2->m_pListWinMember->m_nSlideSplitCnt);
  SlideBar::SetSplitCnt(v2->m_pkSlideBarNotice, v2->m_pListWinNotice->m_nSlideSplitCnt);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title01Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title01Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x14u,
                          0,
                          0);
  v82 = *((_DWORD *)pkTextWin + 9);
  v83 = *(void **)(*(_DWORD *)v82 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v82 + 24);
  pkTextWin = (char *)v83;
  v84 = Font::Get(MAIN_MENU);
  v85 = PgWinText::CreateWin(
          uiLeft - iOffX,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          v255,
          v84,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v86 = v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v85;
  v86[122].__vecDelDtor((NiRefObject *)v85, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v87 = TextData::Get(0x4EA49695u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v87);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 1;
  v88 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v88,
    0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 1;
  v89 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v89,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title02Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title02Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x15u,
                          0,
                          0);
  v90 = *((_DWORD *)pkTextWin + 9);
  v91 = *(void **)(*(_DWORD *)v90 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v90 + 24);
  pkTextWin = (char *)v91;
  v92 = Font::Get(MAIN_MENU);
  pkTextWin = (char *)PgWinText::CreateWin(
                        uiLeft - iOffX,
                        uiTop - v9 + 1,
                        (unsigned int)pkTextWin,
                        v255,
                        v92,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
  (*(void (__thiscall **)(char *, signed int))(*(_DWORD *)pkTextWin + 488))(pkTextWin, 5);
  v255 = *(_DWORD *)pkTextWin + 472;
  v93 = TextData::Get(0x4A5F8BA3u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v93);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 1;
  v94 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v94,
    0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 1;
  v95 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
          (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
          &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v95,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title03Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title03Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x16u,
                          0,
                          0);
  v96 = *((_DWORD *)pkTextWin + 9);
  v97 = *(void **)(*(_DWORD *)v96 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v96 + 24);
  pkTextWin = (char *)v97;
  v98 = Font::Get(MAIN_MENU);
  v99 = PgWinText::CreateWin(
          uiLeft - iOffX,
          uiTop - v9 + 1,
          (unsigned int)pkTextWin,
          v255,
          v98,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          0,
          0);
  v100 = v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v99;
  v100[122].__vecDelDtor((NiRefObject *)v99, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v101 = TextData::Get(0x8BF7ED01u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v101);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 1;
  v102 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v102,
    0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 1;
  v103 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v103,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title04Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title04Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x17u,
                          0,
                          0);
  v104 = *((_DWORD *)pkTextWin + 9);
  v105 = *(void **)(*(_DWORD *)v104 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v104 + 24);
  pkTextWin = (char *)v105;
  v106 = Font::Get(MAIN_MENU);
  v107 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           (unsigned int)pkTextWin,
           v255,
           v106,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v108 = v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v107;
  v108[122].__vecDelDtor((NiRefObject *)v107, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v109 = TextData::Get(0xB8E4BFECu);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v109);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 1;
  v110 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v110,
    0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 1;
  v111 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v111,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Title05Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Title05Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x18u,
                          0,
                          0);
  v112 = *((_DWORD *)pkTextWin + 9);
  v113 = *(void **)(*(_DWORD *)v112 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v112 + 24);
  pkTextWin = (char *)v113;
  v114 = Font::Get(MAIN_MENU);
  v115 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           (unsigned int)pkTextWin,
           v255,
           v114,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v116 = v115->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v115;
  v116[122].__vecDelDtor((NiRefObject *)v115, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v117 = TextData::Get(0xEE01D3E7u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v117);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 1;
  v118 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v118,
    0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 1;
  v119 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v119,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "TitleHis01Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitleHis01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitelHis01Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0,
                          0);
  v120 = *((_DWORD *)pkTextWin + 9);
  v121 = *(void **)(*(_DWORD *)v120 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v120 + 24);
  pkTextWin = (char *)v121;
  v122 = Font::Get(MAIN_MENU);
  v123 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           (unsigned int)pkTextWin,
           v255,
           v122,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v124 = v123->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v123;
  v124[122].__vecDelDtor((NiRefObject *)v123, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v125 = TextData3::Get(0x8D927778u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v125);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 2;
  v126 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v126,
    0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 2;
  v127 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v127,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "TitleHis02Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitleHis02Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitelHis02Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0,
                          0);
  v128 = *((_DWORD *)pkTextWin + 9);
  v129 = *(void **)(*(_DWORD *)v128 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v128 + 24);
  pkTextWin = (char *)v129;
  v130 = Font::Get(MAIN_MENU);
  v131 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           (unsigned int)pkTextWin,
           v255,
           v130,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v132 = v131->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v131;
  v132[122].__vecDelDtor((NiRefObject *)v131, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v133 = TextData3::Get(0xE7C0CC1Bu);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v133);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 2;
  v134 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v134,
    0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 2;
  v135 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v135,
    0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "TitleHis03Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitleHis03Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "TitelHis03Over");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - iOffX,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0,
                          0);
  v136 = *((_DWORD *)pkTextWin + 9);
  v137 = *(void **)(*(_DWORD *)v136 + 20);
  v255 = *(_DWORD *)(*(_DWORD *)v136 + 24);
  pkTextWin = (char *)v137;
  v138 = Font::Get(MAIN_MENU);
  v139 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           (unsigned int)pkTextWin,
           v255,
           v138,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v140 = v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v139;
  v140[122].__vecDelDtor((NiRefObject *)v139, 5u);
  v255 = *(_DWORD *)pkTextWin + 472;
  v141 = TextData3::Get(0x9B957B82u);
  (*(void (__thiscall **)(_DWORD, _DWORD))v255)(pkTextWin, v141);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  _Val.baseclass_0.first = (const int)pkTextWin;
  _Val.baseclass_0.second = 2;
  v142 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v142,
    0);
  _Val.baseclass_0.first = pkButWin;
  _Val.baseclass_0.second = 2;
  v143 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           &_Val);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    &result,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v143,
    0);
  PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  _Val.baseclass_0.second = (signed int)((double)uiHeight * 0.2000000029802322);
  *(_DWORD *)&result.baseclass_0.second = 0;
  pkTextWin = (char *)-v9;
  pkButWin = (const int)v2->m_pkGuildAcademyInfoTxt;
  v255 = 5;
  do
  {
    v144 = Font::Get(MAIN_MENU);
    v145 = PgWinText::CreateWin(
             uiLeft - iOffX,
             (int)&pkTextWin[uiTop],
             uiWidth,
             uiHeight,
             v144,
             &v2->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    *(_DWORD *)pkButWin = v145;
    v145->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v145,
      0);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)pkButWin + 472))(&unk_9D0E7D);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)pkButWin + 240))(0);
    *(_DWORD *)&result.baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)pkButWin;
    v146 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
             (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
             (std::pair<int const ,int> *)&result);
    std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
      (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
      (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&v247,
      (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v146,
      0);
    pkButWin += 4;
    pkTextWin += _Val.baseclass_0.second;
    --v255;
  }
  while ( v255 );
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn01Over");
  PgWinBut::CreateWin(
    uiLeft - iOffX,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    0xDu,
    0,
    0);
  v147 = *((_DWORD *)pkTextWin + 9);
  v148 = *(_DWORD *)(*(_DWORD *)v147 + 20);
  _Val.baseclass_0.second = *(_DWORD *)(*(_DWORD *)v147 + 24);
  v255 = v148;
  v149 = Font::Get(MAIN_MENU);
  v150 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           v255,
           _Val.baseclass_0.second,
           v149,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v151 = v150->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v150;
  ((void (__thiscall *)(PgWinText *))v151[122].__vecDelDtor)(v150);
  _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
  v152 = TextData::Get(0xD0502C33u);
  (*(void (__thiscall **)(char *, char *))_Val.baseclass_0.second)(pkTextWin, v152);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn02Over");
  PgWinBut::CreateWin(
    uiLeft - iOffX,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    0xEu,
    0,
    0);
  v153 = *((_DWORD *)pkTextWin + 9);
  v154 = *(_DWORD *)(*(_DWORD *)v153 + 20);
  _Val.baseclass_0.second = *(_DWORD *)(*(_DWORD *)v153 + 24);
  v255 = v154;
  v155 = Font::Get(MAIN_MENU);
  v156 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           v255,
           _Val.baseclass_0.second,
           v155,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v157 = v156->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v156;
  v157[122].__vecDelDtor((NiRefObject *)v156, 5u);
  _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
  v158 = TextData::Get(0x26579485u);
  (*(void (__thiscall **)(char *, char *))_Val.baseclass_0.second)(pkTextWin, v158);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn03Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn03Over");
  PgWinBut::CreateWin(
    uiLeft - iOffX,
    uiTop - v9,
    (PgSprData *)pkTextWin,
    &v2->baseclass_0.baseclass_0.baseclass_0,
    0xFu,
    0,
    0);
  v159 = *((_DWORD *)pkTextWin + 9);
  v160 = *(_DWORD *)(*(_DWORD *)v159 + 20);
  _Val.baseclass_0.second = *(_DWORD *)(*(_DWORD *)v159 + 24);
  v255 = v160;
  v161 = Font::Get(MAIN_MENU);
  v162 = PgWinText::CreateWin(
           uiLeft - iOffX,
           uiTop - v9 + 1,
           v255,
           _Val.baseclass_0.second,
           v161,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  v163 = v162->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v162;
  v163[122].__vecDelDtor((NiRefObject *)v162, 5u);
  _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
  v164 = TextData::Get(0x2B3D9AB4u);
  (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v164);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn05Nor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn05Click");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "Btn05Over");
  v165 = PgWinBut::CreateWin(
           uiLeft - iOffX,
           uiTop - v9,
           (PgSprData *)pkTextWin,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0xCu,
           0,
           0);
  v166 = pkTextWin;
  v2->m_pkEditNoticeBtn = v165;
  v167 = **((_DWORD **)v166 + 9);
  v168 = *(_DWORD *)(v167 + 24);
  v169 = *(_DWORD *)(v167 + 20);
  v170 = (PgWin *)v165;
  _Val.baseclass_0.second = v168;
  v255 = v169;
  v171 = Font::Get(MAIN_MENU);
  v172 = PgWinText::CreateWin(0, 0, v255, _Val.baseclass_0.second, v171, v170, 0, 0);
  v173 = v172->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  pkTextWin = (char *)v172;
  v173[122].__vecDelDtor((NiRefObject *)v172, 5u);
  _Val.baseclass_0.second = *(_DWORD *)pkTextWin + 472;
  v174 = TextData::Get(0x92D1BCF5u);
  (*(void (__thiscall **)(_DWORD, _DWORD))_Val.baseclass_0.second)(pkTextWin, v174);
  (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
  ((void (__stdcall *)(_DWORD))v2->m_pkEditNoticeBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  *(_DWORD *)&result.baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v2->m_pkEditNoticeBtn;
  *(_DWORD *)&result.baseclass_0.second = 0;
  v175 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           (std::pair<int const ,int> *)&result);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&v247,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v175,
    0);
  *(_DWORD *)&result.baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = pkTextWin;
  *(_DWORD *)&result.baseclass_0.second = 0;
  v176 = std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(
           (std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)&v2->map_WinIndex,
           (std::pair<int const ,int> *)&result);
  std::_Tree<std::_Tmap_traits<HWND_____PgWin___std::less<HWND____>_std::allocator<std::pair<HWND_____const_PgWin__>>_0>>::_Linsert(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v2->map_WinIndex,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >,bool> *)&v247,
    (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> >::_Node *)v176,
    0);
  v177 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Base", &uiLeft, &uiTop, 0);
  v178 = iOffX;
  PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - v9, v177, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "FriendNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "FriendClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "FriendOver");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - v178,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x1Bu,
                          0,
                          0);
  v179 = TextData::Get(0xDCF3EDF4u);
  PgWin::SetToolTipWinText((PgWin *)pkButWin, v179);
  *(_DWORD *)(pkButWin + 272) = g_pkToolTipWin;
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildOver");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - v178,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x1Cu,
                          0,
                          0);
  v180 = TextData::Get(0x9BEAF4F4u);
  PgWin::SetToolTipWinText((PgWin *)pkButWin, v180);
  *(_DWORD *)(pkButWin + 272) = g_pkToolTipWin;
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademyNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "GuildAcademyOver");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - v178,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0xAu,
                          0,
                          0);
  v181 = TextData::Get(0x253B184Cu);
  PgWin::SetToolTipWinText((PgWin *)pkButWin, v181);
  *(_DWORD *)(pkButWin + 272) = g_pkToolTipWin;
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "MasterNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "MasterClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "MasterOver");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - v178,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x1Fu,
                          0,
                          0);
  v182 = TextData::Get(0xF44C3A3Cu);
  PgWin::SetToolTipWinText((PgWin *)pkButWin, v182);
  *(_DWORD *)(pkButWin + 272) = g_pkToolTipWin;
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "WeddingNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "WeddingOver");
  pkButWin = (const int)PgWinBut::CreateWin(
                          uiLeft - v178,
                          uiTop - v9,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0x1Du,
                          0,
                          0);
  v183 = TextData::Get(0xC8F53F44u);
  PgWin::SetToolTipWinText((PgWin *)pkButWin, v183);
  *(_DWORD *)(pkButWin + 272) = g_pkToolTipWin;
  pkTextWin = (char *)PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatchNor", &uiLeft, &uiTop, 0);
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchClick");
  PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "PartyMatchOver");
  v184 = PgWinBut::CreateWin(
           uiLeft - v178,
           uiTop - v9,
           (PgSprData *)pkTextWin,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0x1Eu,
           0,
           0);
  v185 = TextData::Get(0x1C4B503Eu);
  PgWin::SetToolTipWinText(&v184->baseclass_0.baseclass_0, v185);
  v184->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v186 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Friend", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v187 = v186->m_pObject->m_uiHeight;
  v188 = v186->m_pObject->m_uiWidth;
  v189 = Font::Get(TITLEBOLD);
  v190 = PgWinText::CreateWin(uiLeft, uiTop, v188, v187, v189, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v190->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v190,
    1u);
  v191 = v190->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v192 = TextData::Get(0xDCF3EDF4u);
  v191[118].__vecDelDtor((NiRefObject *)v190, (unsigned int)v192);
  v190->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v190,
    0);
  v193 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Guild", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v194 = v193->m_uiHeight;
  v195 = v193->m_uiWidth;
  v196 = Font::Get(TITLEBOLD);
  v197 = PgWinText::CreateWin(uiLeft, uiTop, v195, v194, v196, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v197->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v197,
    1u);
  v198 = v197->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v199 = TextData::Get(0x9BEAF4F4u);
  v198[118].__vecDelDtor((NiRefObject *)v197, (unsigned int)v199);
  v197->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v197,
    0);
  v200 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GuildAcademy", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v201 = v200->m_pObject->m_uiHeight;
  v202 = v200->m_pObject->m_uiWidth;
  v203 = Font::Get(TITLEBOLD);
  v204 = PgWinText::CreateWin(uiLeft, uiTop, v202, v201, v203, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v204->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v204,
    1u);
  v205 = v204->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v206 = TextData::Get(0x253B184Cu);
  v205[118].__vecDelDtor((NiRefObject *)v204, (unsigned int)v206);
  v204->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v204,
    0);
  v207 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HolyPromise", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v208 = v207->m_uiHeight;
  v209 = v207->m_uiWidth;
  v210 = Font::Get(TITLEBOLD);
  v211 = PgWinText::CreateWin(uiLeft, uiTop, v209, v208, v210, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v211->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v211,
    1u);
  v212 = v211->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v213 = TextData::Get(0xF44C3A3Cu);
  v212[118].__vecDelDtor((NiRefObject *)v211, (unsigned int)v213);
  v211->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v211,
    0);
  v214 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Wedding", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase;
  v215 = v214->m_pObject->m_uiHeight;
  v216 = v214->m_pObject->m_uiWidth;
  v217 = Font::Get(TITLEBOLD);
  v218 = PgWinText::CreateWin(uiLeft, uiTop, v216, v215, v217, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v218->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v218,
    1u);
  v219 = v218->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v220 = TextData::Get(0xC8F53F44u);
  v219[118].__vecDelDtor((NiRefObject *)v218, (unsigned int)v220);
  v218->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v218,
    0);
  v221 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "PartyMatch", &uiLeft, &uiTop, 0)->m_akHitTester.m_pBase->m_pObject;
  v222 = v221->m_uiHeight;
  v223 = v221->m_uiWidth;
  v224 = Font::Get(TITLEBOLD);
  v225 = PgWinText::CreateWin(uiLeft, uiTop, v223, v222, v224, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v225->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v225,
    1u);
  v226 = v225->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v227 = TextData::Get(0x1C4B503Eu);
  v226[118].__vecDelDtor((NiRefObject *)v225, (unsigned int)v227);
  v225->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v225,
    0);
  v228 = MenuTexMgr::GetTexture(1u);
  v229 = PopupMenuWin::CreateWin(v228, 4u, 4u, 0);
  v2->m_pkMemberPopupMenu = v229;
  ((void (__stdcall *)(IDirectMessenger *))v229->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
  v230 = TextData::Get(0xBEEF0012u);
  v231 = PopupMenuText::CreateWin(v230, 0, 0, 0, 0, 0, 0);
  v231->baseclass_0.m_ePopupMenuID = 1006;
  NiPointer<PopupMenuWin>::operator_(
    (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupWhisperChat,
    (NiD3DDefaultShader *)v231);
  v232 = TextData::Get(0x2C517CA2u);
  v233 = PopupMenuText::CreateWin(v232, 0, 0, 0, 0, 0, 0);
  v233->baseclass_0.m_ePopupMenuID = 1007;
  NiPointer<PopupMenuWin>::operator_(
    (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupInviteGuild,
    (NiD3DDefaultShader *)v233);
  v234 = TextData::Get(0xD7E44E28u);
  v235 = PopupMenuText::CreateWin(v234, 0, 0, 0, 0, 0, 0);
  v235->baseclass_0.m_ePopupMenuID = 1008;
  NiPointer<PopupMenuWin>::operator_(
    (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupForbidChat,
    (NiD3DDefaultShader *)v235);
  v236 = TextData3::Get(0xF3D8756u);
  v237 = PopupMenuText::CreateWin(v236, 0, 0, 0, 0, 0, 0);
  v237->baseclass_0.m_ePopupMenuID = 1009;
  NiPointer<PopupMenuWin>::operator_(
    (NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupPermitChat,
    (NiD3DDefaultShader *)v237);
  v238 = TextData::Get(0xA9A897DDu);
  v239 = PopupMenuText::CreateWin(v238, 0, 0, 0, 0, 0, 0);
  v239->baseclass_0.m_ePopupMenuID = 1010;
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spPopupVanish, (NiD3DDefaultShader *)v239);
  v2->m_pkNoticeEditor = GuildAcademyNoticeEditorWin::CreateWin(0);
  ((void (__thiscall *)(GuildAcademyWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.40000001,
    0.5);
  LOBYTE(v262) = 0;
  SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
  v262 = -1;
  if ( spNode.m_pObject )
  {
    v240 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v240 )
        v240->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v240, 1u);
    }
  }
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (006FB730) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Buynode<std::pair<NiNode___Avatar__>>(std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *this, std::pair<int const ,int> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *result; // eax@1
  std::pair<int const ,int> *v4; // edx@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)operator new(0x18u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (006FB7A0) --------------------------------------------------------
GuildAcademyMemberVanishTask *__cdecl ISingletonTask<GuildAcademyMemberVanishTask>::Run()
{
  GuildAcademyMemberVanishTask *result; // eax@1
  void *v1; // eax@2
  int v2; // esi@2

  result = (GuildAcademyMemberVanishTask *)ISingletonTask<GuildAcademyMemberVanishTask>::ms_pkSingletonTask;
  if ( !ISingletonTask<GuildAcademyMemberVanishTask>::ms_pkSingletonTask )
  {
    v1 = operator new(0x5Cu);
    v2 = (int)v1;
    if ( v1 )
    {
      ITask::ITask((ITask *)v1, 0);
      *(_DWORD *)v2 = &GuildAcademyMemberVanishTask::_vftable_;
      *(_DWORD *)(v2 + 8) = &GuildAcademyMemberVanishTask::_vftable_;
      *(_DWORD *)(v2 + 84) = 0;
      *(_DWORD *)(v2 + 80) = 0;
      *(_DWORD *)(v2 + 76) = 0;
      *(_DWORD *)(v2 + 72) = 0;
      *(_DWORD *)(v2 + 68) = 0;
    }
    else
    {
      v2 = 0;
    }
    result = (GuildAcademyMemberVanishTask *)v2;
    ISingletonTask<GuildAcademyMemberVanishTask>::ms_pkSingletonTask = v2;
  }
  return result;
}
// 9D151C: using guessed type int (__stdcall *GuildAcademyMemberVanishTask___vftable_)(int uiFlags);
// 9D1538: using guessed type int (__thiscall *GuildAcademyMemberVanishTask___vftable_)(void *p, char);
// B67E80: using guessed type int ISingletonTask_GuildAcademyMemberVanishTask___ms_pkSingletonTask;

//----- (006FB830) --------------------------------------------------------
void *__thiscall GuildAcademyMemberVanishTask::_vector_deleting_destructor_(GuildAcademyMemberVanishTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildAcademyMemberVanishTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildAcademyMemberVanishTask>::_vftable_;
  ISingletonTask<GuildAcademyMemberVanishTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D14E8: using guessed type int (__stdcall *ISingletonTask_GuildAcademyMemberVanishTask____vftable_)(int uiFlags);
// 9D1504: using guessed type int (__thiscall *ISingletonTask_GuildAcademyMemberVanishTask____vftable_)(void *p, char);
// B67E80: using guessed type int ISingletonTask_GuildAcademyMemberVanishTask___ms_pkSingletonTask;

//----- (006FB870) --------------------------------------------------------
void *__thiscall GuildAcademyWin::_scalar_deleting_destructor_(GuildAcademyWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildAcademyWin::_GuildAcademyWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006FB8A0) --------------------------------------------------------
void __thiscall GuildAcademyJoinReqTask::SetTargetID(GuildAcademyJoinReqTask *this, char *pcName)
{
  char *v2; // eax@1
  char *v3; // ecx@1
  int v4; // eax@1
  char v5; // dl@2

  v2 = this->m_acTargetID;
  *(_DWORD *)&this->m_acTargetID[0] = 0;
  *(_DWORD *)&this->m_acTargetID[4] = 0;
  *(_DWORD *)&this->m_acTargetID[8] = 0;
  *(_DWORD *)&this->m_acTargetID[12] = 0;
  this->m_acTargetID[16] = 0;
  v3 = pcName;
  v4 = v2 - pcName;
  do
  {
    v5 = *v3;
    v3[v4] = *v3;
    ++v3;
  }
  while ( v5 );
}

//----- (006FB8D0) --------------------------------------------------------
void __thiscall GuildAcademyJoinReqTask::OnStart(GuildAcademyJoinReqTask *this)
{
  GuildAcademyJoinReqTask *v1; // esi@1
  char *v2; // eax@2

  v1 = this;
  if ( !GuildAcademySelectTask::GetGuildAcademySelectWin()->m_bFromReq )
  {
    v1->m_pkInputBox = InputBox::CreateWin();
    v2 = TextData::Get(0x381C213Cu);
    InputBox::SetText(v1->m_pkInputBox, v2);
    v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v1->baseclass_0.baseclass_0.baseclass_8);
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.5,
      0.5);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (006FB950) --------------------------------------------------------
void __thiscall GuildAcademyJoinReqTask::DirectMessage(GuildAcademyJoinReqTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  int v4; // esi@3
  char *v5; // edi@3
  char v6; // dl@4
  PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_REQ kProto; // [sp+0h] [bp-14h]@3
  unsigned int v8; // [sp+10h] [bp-4h]@1
  int v9; // [sp+14h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  if ( iMsgTag == 28 )
  {
    if ( *(_DWORD *)pvBody )
    {
      this->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
    }
    else
    {
      this->m_eState = 0;
      this->m_pkInputBox = 0;
      *(_DWORD *)&this->m_acTargetID[0] = 0;
      *(_DWORD *)&this->m_acTargetID[4] = 0;
      v4 = *((_DWORD *)pvBody + 1);
      *(_QWORD *)&kProto.sGuildName.n4_name[8] = 0i64;
      *(_QWORD *)&kProto.sGuildName.n4_name[0] = 0i64;
      v5 = (char *)&this->m_eState;
      do
      {
        v6 = *(_BYTE *)v4;
        *v5++ = *(_BYTE *)v4++;
      }
      while ( v6 );
      *(_QWORD *)&kProto.sGuildName.n4_name[8] = 0i64;
      *(_QWORD *)&kProto.sGuildName.n4_name[0] = 0i64;
      strncpy(kProto.sGuildName.n4_name, (char *)&this->m_eState, 0x10u);
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x11u, &kProto, 16);
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006FBA00) --------------------------------------------------------
void __thiscall GuildAcademyJoinReqTask::GuildAcademyJoinReqTask(GuildAcademyJoinReqTask *this)
{
  GuildAcademyJoinReqTask *v1; // esi@1

  v1 = this;
  ITask::ITask(&this->baseclass_0.baseclass_0, 0);
  v1->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyJoinReqTask::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyJoinReqTask::_vftable_;
  v1->m_acTargetID[0] = 0;
}
// 9D17EC: using guessed type int (__stdcall *GuildAcademyJoinReqTask___vftable_)(int uiFlags);
// 9D1808: using guessed type int (__thiscall *GuildAcademyJoinReqTask___vftable_)(void *p, char);

//----- (006FBA20) --------------------------------------------------------
void __thiscall GuildAcademyJoinReqTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_ACK(GuildAcademyJoinReqTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_ACK *pkProto)
{
  int v2; // ecx@4
  int v3; // eax@4
  int v4; // ecx@4
  char *v5; // eax@4
  char *v6; // eax@4
  int v7; // eax@5
  int v8; // edx@5
  int v9; // eax@5
  PgFrameWork *v10; // edi@5
  signed int v11; // eax@5
  char *v12; // eax@8
  char *v13; // eax@9
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v14; // [sp-1Ch] [bp-44h]@13
  signed int v15; // [sp-10h] [bp-38h]@2
  signed int v16; // [sp-Ch] [bp-34h]@2
  void *v17; // [sp-8h] [bp-30h]@2
  int v18; // [sp-4h] [bp-2Ch]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v19; // [sp+Ch] [bp-1Ch]@13
  char acName[17]; // [sp+10h] [bp-18h]@4
  unsigned int v21; // [sp+24h] [bp-4h]@1
  int v22; // [sp+28h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  if ( GuildAcademySelectTask::GetGuildAcademySelectWin()->m_bFromReq )
  {
    v18 = 0;
    v17 = 0;
    v16 = 11;
    v15 = 38;
    GuildAcademySelectTask::GetGuildAcademySelectWin()->m_bFromReq = 0;
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, v15, v16, v17, v18);
  }
  if ( pkProto->Error == 6024 )
  {
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 7u, 0, 0);
    v2 = *(_DWORD *)&pkProto->GuildName.n4_name[0];
    v3 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
    *(_DWORD *)&acName[4] = *(_DWORD *)&pkProto->GuildName.n4_name[4];
    *(_DWORD *)acName = v2;
    v4 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
    v18 = (int)acName;
    *(_DWORD *)&acName[8] = v3;
    *(_DWORD *)&acName[12] = v4;
    acName[16] = 0;
    v5 = TextData::Get(0x2F9B6F74u);
    v6 = fs(v5);
    MsgBox::Modeless(MSGBOX_OK, v6);
  }
  else
  {
    v7 = *(_DWORD *)&pkProto->GuildName.n4_name[0];
    v8 = *(_DWORD *)&pkProto->GuildName.n4_name[8];
    *(_DWORD *)&acName[4] = *(_DWORD *)&pkProto->GuildName.n4_name[4];
    *(_DWORD *)acName = v7;
    v9 = *(_DWORD *)&pkProto->GuildName.n4_name[12];
    *(_DWORD *)&acName[8] = v8;
    *(_DWORD *)&acName[12] = v9;
    acName[16] = 0;
    v10 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v11 = pkProto->Error;
    if ( v11 <= 12728 )
    {
      if ( v11 == 12728 )
      {
        v19 = &v14;
        v17 = (void *)15;
        v16 = 0;
        v14.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &v14,
          "Academy_CannotJoinNotTime",
          0x19u);
        v18 = CSingleDataMap::GetValue(&g_kSingleDataMap, v14);
        v13 = TextData3::Get(0x4EFCD1ACu);
LABEL_14:
        v12 = fs(v13);
LABEL_15:
        GameFrameWork::AddSysMsg((GameFrameWork *)v10, v12);
      }
      else
      {
        switch ( v11 )
        {
          case 6025:
          case 6026:
            v12 = TextData::Get(0x6E784590u);
            goto LABEL_15;
          case 6027:
            v18 = (int)acName;
            v13 = TextData::Get(0x66C0CFEFu);
            goto LABEL_14;
          case 6028:
            v18 = (int)acName;
            v13 = TextData::Get(0x516E736Fu);
            goto LABEL_14;
          case 6029:
            v12 = TextData::Get(0x7574F8CBu);
            goto LABEL_15;
          case 6030:
            v18 = (int)acName;
            v13 = TextData::Get(0x516E736Fu);
            goto LABEL_14;
          default:
            return;
        }
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006FBBF0) --------------------------------------------------------
bool __thiscall GuildAcademyJoinReqTask::OnProcessNetMsg(GuildAcademyJoinReqTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyJoinReqTask *v5; // esi@1
  bool result; // al@3

  v5 = this;
  if ( iDepart == 38 && iCommand == 18 )
  {
    if ( GuildAcademySelectTask::GetGuildAcademySelectWin()->m_bFromReq )
    {
      GuildAcademySelectTask::GetGuildAcademySelectWin()->m_bFromReq = 0;
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
    }
    GuildAcademyJoinReqTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_ACK(
      v5,
      (PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_ACK *)pvData);
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006FBC50) --------------------------------------------------------
void *__thiscall GuildAcademyJoinReqTask::_scalar_deleting_destructor_(GuildAcademyJoinReqTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ISingletonTask<GuildAcademyJoinReqTask>::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&ISingletonTask<GuildAcademyJoinReqTask>::_vftable_;
  ISingletonTask<GuildAcademyJoinReqTask>::ms_pkSingletonTask = 0;
  ITask::_ITask(&this->baseclass_0.baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D17B8: using guessed type int (__stdcall *ISingletonTask_GuildAcademyJoinReqTask____vftable_)(int uiFlags);
// 9D17D4: using guessed type int (__thiscall *ISingletonTask_GuildAcademyJoinReqTask____vftable_)(void *p, char);
// B67E78: using guessed type int ISingletonTask_GuildAcademyJoinReqTask___ms_pkSingletonTask;

//----- (006FBC90) --------------------------------------------------------
void __thiscall GuildAcademyLeaveTask::DirectMessage(GuildAcademyLeaveTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  int v4; // eax@2
  IDirectMessenger *v5; // eax@3

  if ( iMsgTag == 27 )
  {
    v4 = *(_DWORD *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
    if ( v4 )
      v5 = (IDirectMessenger *)(v4 + 232);
    else
      v5 = 0;
    if ( pkFrom == v5 )
    {
      if ( *(_DWORD *)pvBody )
      {
        this->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
      else
      {
        this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x1Bu, 0, 0);
      }
    }
  }
}

//----- (006FBCE0) --------------------------------------------------------
void __thiscall GuildAcademyLeaveTask::OnStart(GuildAcademyLeaveTask *this)
{
  GuildAcademyLeaveTask *v1; // esi@1
  char *v2; // eax@1
  char *v3; // eax@1
  MsgBox *v4; // eax@1

  v1 = this;
  this->m_eState = 0;
  GuildTask::GetGuildName(g_pkMainChar->m_dwGuildRegNum);
  v2 = TextData::Get(0x86D6CFB9u);
  v3 = fs(v2);
  v4 = MsgBox::Modeless(MSGBOX_OKCANCEL, v3);
  v1->m_pkMsgBox = v4;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_8);
}

//----- (006FBD40) --------------------------------------------------------
void __thiscall GuildAcademyLeaveTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_ACK(GuildAcademyLeaveTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_ACK *pkProto)
{
  PgFrameWork *v2; // esi@1
  int v3; // eax@1
  GuildAcademySelectWin *v4; // eax@2
  CClientGuild *v5; // eax@4
  int v6; // edx@4
  char *v7; // eax@4
  char *v8; // eax@4
  CClientGuildAcademy *v9; // eax@4
  char *v10; // eax@6
  char *v11; // eax@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > v12; // [sp-1Ch] [bp-3Ch]@10
  int v13; // [sp-4h] [bp-24h]@4
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v14; // [sp+4h] [bp-1Ch]@10
  char acMyGuildAcademyName[17]; // [sp+8h] [bp-18h]@4
  unsigned int v16; // [sp+1Ch] [bp-4h]@1
  int v17; // [sp+20h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = pkProto->Error;
  if ( (_WORD)v3 == 6016 )
  {
    GuildAcademyTask::GetGuildAcademy()->m_bIsGuildAcademyMember = 0;
    GuildAcademyMemberTask::GetGuildAcademyMember()->baseclass_0.m_NumOfAcademyMembers = 0;
    GuildAcademyWin::InvalidateAcademy((GuildAcademyWin *)v2[24].m_kMsgQ.m_uiTail);
    v4 = GuildAcademySelectTask::GetGuildAcademySelectWin();
    if ( (unsigned __int8)((int (__thiscall *)(GuildAcademySelectWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v4) )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
    v5 = GuildTask::GetGuild();
    *(_DWORD *)acMyGuildAcademyName = *(_DWORD *)&v5->baseclass_0.m_Guild.sName.n4_name[0];
    *(_DWORD *)&acMyGuildAcademyName[4] = *(_DWORD *)&v5->baseclass_0.m_Guild.sName.n4_name[4];
    *(_DWORD *)&acMyGuildAcademyName[8] = *(_DWORD *)&v5->baseclass_0.m_Guild.sName.n4_name[8];
    v6 = *(_DWORD *)&v5->baseclass_0.m_Guild.sName.n4_name[12];
    v13 = (int)acMyGuildAcademyName;
    *(_DWORD *)&acMyGuildAcademyName[12] = v6;
    acMyGuildAcademyName[16] = 0;
    v7 = TextData::Get(0x629B6588u);
    v8 = fs(v7);
    MsgBox::Modeless(MSGBOX_OK, v8);
    v9 = GuildAcademyTask::GetGuildAcademy();
    CClientGuildAcademy::ClearHistoryList(v9);
    GuildAcademyTask::InvalidateGuildAcademyWin();
  }
  else
  {
    switch ( v3 )
    {
      case 6048:
        v10 = TextData::Get(0x26A937Cu);
        goto LABEL_11;
      case 6049:
        v10 = TextData::Get(0x8AE7DEB7u);
        goto LABEL_11;
      case 6036:
      case 6050:
        v10 = TextData::Get(0x6BBB00C3u);
        goto LABEL_11;
      case 6051:
        v10 = TextData::Get(0xCEF8D8D4u);
        goto LABEL_11;
      case 6052:
        v14 = &v12;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &v12,
          "Guild_CannotLeaveTime");
        v13 = CSingleDataMap::GetValue(&g_kSingleDataMap, v12);
        v11 = TextData2::Get(0xFD4F187Eu);
        v10 = fs(v11);
LABEL_11:
        GameFrameWork::AddSysMsg((GameFrameWork *)v2, v10);
        break;
      default:
        return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006FBF00) --------------------------------------------------------
bool __thiscall GuildAcademyLeaveTask::OnProcessNetMsg(GuildAcademyLeaveTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyLeaveTask *v5; // esi@1
  bool result; // al@3

  v5 = this;
  if ( iDepart == 38 && iCommand == 28 )
  {
    GuildAcademyLeaveTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_ACK(
      this,
      (PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_ACK *)pvData);
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006FBF30) --------------------------------------------------------
void __thiscall GuildAcademyMasterAppointTask::SetInfo(GuildAcademyMasterAppointTask *this, Name5 *rkTargetName)
{
  *(_QWORD *)&this->m_kTargetName.n5_name[0] = *(_QWORD *)&rkTargetName->n5_name[0];
  *(_QWORD *)&this->m_kTargetName.n5_name[8] = *(_QWORD *)&rkTargetName->n5_name[8];
  *(_DWORD *)&this->m_kTargetName.n5_name[16] = *(_DWORD *)&rkTargetName->n5_name[16];
}

//----- (006FBF60) --------------------------------------------------------
void __thiscall GuildAcademyMasterInitializeTask::SetInfo(GuildAcademyMasterInitializeTask *this, Name5 *rkTargetName)
{
  *(_QWORD *)&this->m_kTargetName.n5_name[0] = *(_QWORD *)&rkTargetName->n5_name[0];
  *(_QWORD *)&this->m_kTargetName.n5_name[8] = *(_QWORD *)&rkTargetName->n5_name[8];
  *(_DWORD *)&this->m_kTargetName.n5_name[16] = *(_DWORD *)&rkTargetName->n5_name[16];
}

//----- (006FBF90) --------------------------------------------------------
void __thiscall GuildAcademyMasterInitializeTask::DirectMessage(GuildAcademyMasterInitializeTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildAcademyMasterInitializeTask *v4; // eax@1
  int v5; // ecx@2
  IDirectMessenger *v6; // ecx@3
  GuildAcademyMasterInitializeTask::State v7; // ecx@7
  unsigned int v8; // edx@7
  PROTO_NC_GUILD_ACADEMY_SET_MASTER_REQ kProto; // [sp+0h] [bp-18h]@7
  unsigned int v10; // [sp+14h] [bp-4h]@1
  int v11; // [sp+18h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 27 )
  {
    v5 = *(_DWORD *)&this->m_kTargetName.n5_name[12];
    if ( v5 )
      v6 = (IDirectMessenger *)(v5 + 232);
    else
      v6 = 0;
    if ( pkFrom == v6 )
    {
      if ( *(_DWORD *)pvBody )
      {
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
      else
      {
        v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
        v7 = v4->m_eState;
        *(_DWORD *)&kProto.sName.n5_name[0] = *(_DWORD *)&v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        v8 = *(_DWORD *)&v4->m_kTargetName.n5_name[0];
        *(_DWORD *)&kProto.sName.n5_name[4] = v7;
        *(_QWORD *)&kProto.sName.n5_name[8] = __PAIR__(*(_DWORD *)&v4->m_kTargetName.n5_name[4], v8);
        *(_DWORD *)&kProto.sName.n5_name[16] = *(_DWORD *)&v4->m_kTargetName.n5_name[8];
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x59u, &kProto, 20);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006FC030) --------------------------------------------------------
void __thiscall GuildAcademyMasterAppointTask::OnStart(GuildAcademyMasterAppointTask *this)
{
  GuildAcademyMasterAppointTask *v1; // esi@1
  int v2; // eax@1
  int v3; // edx@1
  int v4; // ecx@1
  int v5; // eax@1
  int v6; // ecx@1
  char *v7; // eax@1
  char *v8; // eax@1
  MsgBox *v9; // eax@1
  char pcTargetName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v11; // [sp+1Ch] [bp-4h]@1
  int v12; // [sp+20h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  v2 = *(_DWORD *)&this->m_kTargetName.n5_name[0];
  v3 = *(_DWORD *)&this->m_kTargetName.n5_name[8];
  v4 = *(_DWORD *)&this->m_kTargetName.n5_name[4];
  *(_DWORD *)pcTargetName = v2;
  v5 = *(_DWORD *)&v1->m_kTargetName.n5_name[12];
  *(_DWORD *)&pcTargetName[8] = v3;
  *(_DWORD *)&pcTargetName[4] = v4;
  v6 = *(_DWORD *)&v1->m_kTargetName.n5_name[16];
  *(_DWORD *)&pcTargetName[12] = v5;
  *(_DWORD *)&pcTargetName[16] = v6;
  pcTargetName[20] = 0;
  v1->m_eState = 0;
  v7 = TextData::Get(0x5F4D8E83u);
  v8 = fs(v7);
  v9 = MsgBox::Modal(MSGBOX_OKCANCEL, v8);
  v1->m_pkMsgBox = v9;
  ((void (__stdcall *)(IDirectMessenger *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_8);
}
// A85C00: using guessed type int __security_cookie;

//----- (006FC0B0) --------------------------------------------------------
void __thiscall GuildAcademyMasterAppointTask::DirectMessage(GuildAcademyMasterAppointTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildAcademyMasterAppointTask *v4; // esi@1
  int v5; // eax@2
  IDirectMessenger *v6; // eax@3
  unsigned int v7; // eax@7
  GuildAcademyMasterAppointTask::State v8; // edx@7
  unsigned int v9; // ecx@7
  PROTO_NC_GUILD_ACADEMY_SET_MASTER_REQ kProto; // [sp+4h] [bp-18h]@7
  unsigned int v11; // [sp+18h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 27 )
  {
    v5 = *(_DWORD *)&this->m_kTargetName.n5_name[12];
    if ( v5 )
      v6 = (IDirectMessenger *)(v5 + 232);
    else
      v6 = 0;
    if ( pkFrom == v6 )
    {
      if ( *(_DWORD *)pvBody )
      {
        this->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
      else
      {
        v7 = *(_DWORD *)&this->m_kTargetName.n5_name[0];
        v8 = this->m_eState;
        *(_DWORD *)&kProto.sName.n5_name[0] = *(_DWORD *)&this->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        v9 = *(_DWORD *)&this->m_kTargetName.n5_name[4];
        *(_QWORD *)&kProto.sName.n5_name[4] = __PAIR__(v7, v8);
        *(_QWORD *)&kProto.sName.n5_name[12] = __PAIR__(*(_DWORD *)&v4->m_kTargetName.n5_name[8], v9);
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x59u, &kProto, 20);
        v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (006FC150) --------------------------------------------------------
bool __thiscall GuildAcademyMasterAppointTask::OnProcessNetMsg(GuildAcademyMasterAppointTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyMasterAppointTask *v5; // edi@1
  bool result; // al@3
  PgFrameWork *v7; // esi@4
  char *v8; // eax@7
  unsigned int v9; // [sp-8h] [bp-Ch]@8

  v5 = this;
  if ( iDepart == 38 && iCommand == 90 )
  {
    v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v7 )
    {
      switch ( *(_WORD *)pvData )
      {
        case 0x17FF:
          v8 = TextData::Get(0x66B58AC6u);
          goto LABEL_16;
        case 0x17F0:
          v9 = -1028153776;
          goto LABEL_15;
        case 0x17F1:
          v9 = 119595846;
          goto LABEL_15;
        case 0x17F2:
          v9 = -1298033450;
          goto LABEL_15;
        case 0x17F3:
          v9 = 1519628516;
          goto LABEL_15;
        case 0x17F4:
          v9 = -1330088484;
          goto LABEL_15;
        case 0x17F5:
          v9 = -580578418;
          goto LABEL_15;
        case 0x17F6:
          v9 = -1882157593;
LABEL_15:
          v8 = TextData3::Get(v9);
LABEL_16:
          GameFrameWork::AddSysMsg((GameFrameWork *)v7, v8);
          break;
        default:
          break;
      }
      v5->baseclass_0.baseclass_0.m_eTaskState = 2;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006FC240) --------------------------------------------------------
void __thiscall GuildAcademyMasterInitializeTask::OnStart(GuildAcademyMasterInitializeTask *this)
{
  GuildAcademyMasterInitializeTask *v1; // esi@1
  char *v2; // eax@1
  MsgBox *v3; // eax@1

  v1 = this;
  this->m_eState = 0;
  v2 = TextData::Get(0x44A2A5Eu);
  v3 = MsgBox::Modal(MSGBOX_OKCANCEL, v2);
  v1->m_pkMsgBox = v3;
  ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_8);
}

//----- (006FC280) --------------------------------------------------------
bool __thiscall GuildAcademyMasterInitializeTask::OnProcessNetMsg(GuildAcademyMasterInitializeTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyMasterInitializeTask *v5; // edi@1
  bool result; // al@3
  PgFrameWork *v7; // esi@4
  char *v8; // eax@7
  unsigned int v9; // [sp-8h] [bp-Ch]@8

  v5 = this;
  if ( iDepart == 38 && iCommand == 90 )
  {
    v7 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v7 )
    {
      switch ( *(_WORD *)pvData )
      {
        case 0x17FF:
          v8 = TextData::Get(0x66B58AC6u);
          goto LABEL_16;
        case 0x17F0:
          v9 = -1028153776;
          goto LABEL_15;
        case 0x17F1:
          v9 = 119595846;
          goto LABEL_15;
        case 0x17F2:
          v9 = -1298033450;
          goto LABEL_15;
        case 0x17F3:
          v9 = 1519628516;
          goto LABEL_15;
        case 0x17F4:
          v9 = -1330088484;
          goto LABEL_15;
        case 0x17F5:
          v9 = -580578418;
          goto LABEL_15;
        case 0x17F6:
          v9 = -1882157593;
LABEL_15:
          v8 = TextData3::Get(v9);
LABEL_16:
          GameFrameWork::AddSysMsg((GameFrameWork *)v7, v8);
          break;
        default:
          break;
      }
      v5->baseclass_0.baseclass_0.m_eTaskState = 2;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006FC370) --------------------------------------------------------
unsigned int __thiscall CClientGuildAcademyMember::GetNumOfOnlineMembers(CClientGuildAcademyMember *this)
{
  int v1; // edx@1
  unsigned int result; // eax@1
  char *v3; // ecx@2

  v1 = this->baseclass_0.m_NumOfAcademyMembers;
  result = 0;
  if ( this->baseclass_0.m_NumOfAcademyMembers )
  {
    v3 = (char *)&this->baseclass_0.m_AcademyMembers[0].dLogonInfo;
    do
    {
      if ( *v3 & 1 )
        ++result;
      v3 += 109;
      --v1;
    }
    while ( v1 );
  }
  return result;
}

//----- (006FC3B0) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LIST_ACK(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LIST_ACK *pkProto)
{
  return CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LIST_ACK(&this->baseclass_40.baseclass_0, pkProto) != 0;
}

//----- (006FC3D0) --------------------------------------------------------
CClientGuildAcademyMember *__cdecl GuildAcademyMemberTask::GetGuildAcademyMember()
{
  CClientGuildAcademyMember *result; // eax@2

  if ( GuildAcademyMemberTask::ms_spGuildAcademyMemberTask )
    result = (CClientGuildAcademyMember *)(GuildAcademyMemberTask::ms_spGuildAcademyMemberTask + 64);
  else
    result = 0;
  return result;
}
// B67E84: using guessed type int GuildAcademyMemberTask__ms_spGuildAcademyMemberTask;

//----- (006FC3E0) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD *pkProto)
{
  return CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD(&this->baseclass_40.baseclass_0, pkProto) != 0;
}

//----- (006FC410) --------------------------------------------------------
void __thiscall GuildAcademyMemberTask::OnFinish(GuildAcademyMemberTask *this)
{
  int v1; // esi@1

  v1 = GuildAcademyMemberTask::ms_spGuildAcademyMemberTask;
  if ( GuildAcademyMemberTask::ms_spGuildAcademyMemberTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(GuildAcademyMemberTask::ms_spGuildAcademyMemberTask + 4)) )
    {
      if ( v1 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
    }
    GuildAcademyMemberTask::ms_spGuildAcademyMemberTask = 0;
  }
}
// B67E84: using guessed type int GuildAcademyMemberTask__ms_spGuildAcademyMemberTask;

//----- (006FC450) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD *pkProto)
{
  GuildAcademyMemberTask *v2; // ebx@1
  int result; // eax@1
  GuildAcademySelectWin *v4; // eax@2
  int v5; // ecx@4
  int v6; // edx@4
  int v7; // ecx@4
  int v8; // edx@4
  char *v9; // eax@4
  char *v10; // edi@4
  char acname[21]; // [sp+8h] [bp-1Ch]@4
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  result = CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD(&this->baseclass_40.baseclass_0, pkProto);
  if ( result )
  {
    v4 = GuildAcademySelectTask::GetGuildAcademySelectWin();
    if ( (unsigned __int8)((int (__thiscall *)(GuildAcademySelectWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v4) )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
    v5 = *(_DWORD *)&pkProto->Member.sName.n5_name[0];
    v6 = *(_DWORD *)&pkProto->Member.sName.n5_name[4];
    *(_DWORD *)&acname[8] = *(_DWORD *)&pkProto->Member.sName.n5_name[8];
    *(_DWORD *)acname = v5;
    v7 = *(_DWORD *)&pkProto->Member.sName.n5_name[12];
    *(_DWORD *)&acname[4] = v6;
    v8 = *(_DWORD *)&pkProto->Member.sName.n5_name[16];
    *(_DWORD *)&acname[12] = v7;
    *(_DWORD *)&acname[16] = v8;
    acname[20] = 0;
    v9 = TextData::Get(0xAAED2111u);
    v10 = fs(v9);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v10,
        &v2->baseclass_0.baseclass_8);
      if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v10,
          &v2->baseclass_0.baseclass_8);
    }
    v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v2->baseclass_0.baseclass_8,
      25,
      v10,
      &v2->baseclass_0.baseclass_8);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FC540) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD *pkProto)
{
  GuildAcademyMemberTask *v2; // ebx@1
  int result; // eax@1
  GuildAcademySelectWin *v4; // eax@2
  int v5; // ecx@4
  int v6; // edx@4
  int v7; // ecx@4
  int v8; // edx@4
  char *v9; // eax@4
  char *v10; // edi@4
  char acname[21]; // [sp+8h] [bp-1Ch]@4
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  result = CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD(&this->baseclass_40.baseclass_0, pkProto);
  if ( result )
  {
    v4 = GuildAcademySelectTask::GetGuildAcademySelectWin();
    if ( (unsigned __int8)((int (__thiscall *)(GuildAcademySelectWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v4) )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
    v5 = *(_DWORD *)&pkProto->CharID.n5_name[0];
    v6 = *(_DWORD *)&pkProto->CharID.n5_name[4];
    *(_DWORD *)&acname[8] = *(_DWORD *)&pkProto->CharID.n5_name[8];
    *(_DWORD *)acname = v5;
    v7 = *(_DWORD *)&pkProto->CharID.n5_name[12];
    *(_DWORD *)&acname[4] = v6;
    v8 = *(_DWORD *)&pkProto->CharID.n5_name[16];
    *(_DWORD *)&acname[12] = v7;
    *(_DWORD *)&acname[16] = v8;
    acname[20] = 0;
    v9 = TextData::Get(0xBC1932FFu);
    v10 = fs(v9);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v10,
        &v2->baseclass_0.baseclass_8);
      if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v10,
          &v2->baseclass_0.baseclass_8);
    }
    v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v2->baseclass_0.baseclass_8,
      25,
      v10,
      &v2->baseclass_0.baseclass_8);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FC630) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_VANISH_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_VANISH_CMD *pkProto)
{
  int v2; // edi@0
  GuildAcademyMemberTask *v3; // ebx@1
  int result; // eax@1
  GuildAcademySelectWin *v5; // eax@2
  Name5 *v6; // eax@4
  int v7; // ecx@4
  CClientGuildAcademy *v8; // eax@9
  char *v9; // eax@9
  char *v10; // edi@9
  CClientGuildAcademy *v11; // eax@12
  int v12; // edx@13
  int v13; // ecx@13
  int v14; // edx@13
  char *v15; // eax@13
  char *v16; // edi@13
  int v17; // [sp-4h] [bp-28h]@4
  int v18; // [sp+8h] [bp-1Ch]@13
  char acMyGuildAcademyName[17]; // [sp+Ch] [bp-18h]@9
  unsigned int v20; // [sp+20h] [bp-4h]@1
  int v21; // [sp+24h] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  v3 = this;
  result = CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD(
             &this->baseclass_40.baseclass_0,
             (PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD *)pkProto);
  if ( result )
  {
    v5 = GuildAcademySelectTask::GetGuildAcademySelectWin();
    if ( (unsigned __int8)((int (__thiscall *)(GuildAcademySelectWin *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v5) )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xBu, 0, 0);
    v17 = v2;
    v6 = User::GetMainCharID(&g_kUser);
    v7 = *(_DWORD *)&pkProto->CharID.n5_name[0];
    if ( *(_DWORD *)&pkProto->CharID.n5_name[0] != *(_DWORD *)&v6->n5_name[0]
      || *(_DWORD *)&pkProto->CharID.n5_name[4] != *(_DWORD *)&v6->n5_name[4]
      || *(_DWORD *)&pkProto->CharID.n5_name[8] != *(_DWORD *)&v6->n5_name[8]
      || *(_DWORD *)&pkProto->CharID.n5_name[12] != *(_DWORD *)&v6->n5_name[12]
      || *(_DWORD *)&pkProto->CharID.n5_name[16] != *(_DWORD *)&v6->n5_name[16] )
    {
      v12 = *(_DWORD *)&pkProto->CharID.n5_name[4];
      *(_DWORD *)&acMyGuildAcademyName[4] = *(_DWORD *)&pkProto->CharID.n5_name[8];
      v18 = v7;
      v13 = *(_DWORD *)&pkProto->CharID.n5_name[12];
      *(_DWORD *)acMyGuildAcademyName = v12;
      v14 = *(_DWORD *)&pkProto->CharID.n5_name[16];
      *(_DWORD *)&acMyGuildAcademyName[8] = v13;
      *(_DWORD *)&acMyGuildAcademyName[12] = v14;
      acMyGuildAcademyName[16] = 0;
      v15 = TextData::Get(0xCCEDD5FFu);
      v16 = fs(v15);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v16,
          &v3->baseclass_0.baseclass_8);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v16,
            &v3->baseclass_0.baseclass_8);
      }
      ((void (__thiscall *)(IDirectMessenger *, signed int, char *, IDirectMessenger *, int))v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent)(
        &v3->baseclass_0.baseclass_8,
        25,
        v16,
        &v3->baseclass_0.baseclass_8,
        v17);
    }
    else
    {
      GuildAcademyTask::GetGuildAcademy()->m_bIsGuildAcademyMember = 0;
      v8 = GuildAcademyTask::GetGuildAcademy();
      *(_DWORD *)acMyGuildAcademyName = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[0];
      *(_DWORD *)&acMyGuildAcademyName[4] = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[4];
      *(_DWORD *)&acMyGuildAcademyName[8] = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[8];
      *(_DWORD *)&acMyGuildAcademyName[12] = *(_DWORD *)&v8->baseclass_0.m_Guild.sName.n4_name[12];
      acMyGuildAcademyName[16] = 0;
      v9 = TextData::Get(0x7498906Du);
      v10 = fs(v9);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v10,
          &v3->baseclass_0.baseclass_8);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v10,
            &v3->baseclass_0.baseclass_8);
      }
      ((void (__thiscall *)(IDirectMessenger *, signed int, char *, IDirectMessenger *, int))v3->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent)(
        &v3->baseclass_0.baseclass_8,
        25,
        v10,
        &v3->baseclass_0.baseclass_8,
        v17);
      v3->baseclass_40.baseclass_0.m_NumOfAcademyMembers = 0;
      v11 = GuildAcademyTask::GetGuildAcademy();
      CClientGuildAcademy::ClearHistoryList(v11);
      GuildAcademyTask::InvalidateGuildAcademyWin();
    }
    result = 1;
  }
  return result;
}
// 6FC630: could not find valid save-restore pair for edi
// A85C00: using guessed type int __security_cookie;

//----- (006FC800) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD(GuildAcademyMemberTask *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD *pkProto)
{
  int result; // eax@1
  char *v3; // eax@3
  int v4; // ecx@8
  int v5; // edx@8
  int v6; // eax@8
  int v7; // eax@8
  char *v8; // eax@8
  char *v9; // edi@8
  GuildAcademyMemberTask *v10; // [sp+4h] [bp-20h]@1
  char acCharName[21]; // [sp+8h] [bp-1Ch]@3
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v10 = this;
  result = CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD(&this->baseclass_40.baseclass_0, pkProto);
  if ( result )
  {
    if ( byte_B5BB47 )
    {
      v3 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
      *(_DWORD *)&acCharName[16] = 0;
      *(_DWORD *)&acCharName[12] = 0;
      *(_DWORD *)&acCharName[8] = 0;
      *(_DWORD *)&acCharName[4] = 0;
      *(_DWORD *)acCharName = 0;
      strncpy(acCharName, v3, 0x14u);
      if ( *(_DWORD *)&pkProto->CharID.n5_name[0] != *(_DWORD *)acCharName
        || *(_DWORD *)&pkProto->CharID.n5_name[4] != *(_DWORD *)&acCharName[4]
        || *(_DWORD *)&pkProto->CharID.n5_name[8] != *(_DWORD *)&acCharName[8]
        || *(_DWORD *)&pkProto->CharID.n5_name[12] != *(_DWORD *)&acCharName[12]
        || *(_DWORD *)&pkProto->CharID.n5_name[16] != *(_DWORD *)&acCharName[16] )
      {
        v4 = *(_DWORD *)&pkProto->CharID.n5_name[8];
        v5 = *(_DWORD *)&pkProto->CharID.n5_name[12];
        *(_DWORD *)acCharName = *(_DWORD *)&pkProto->CharID.n5_name[0];
        v6 = *(_DWORD *)&pkProto->CharID.n5_name[4];
        *(_DWORD *)&acCharName[8] = v4;
        *(_DWORD *)&acCharName[4] = v6;
        v7 = *(_DWORD *)&pkProto->CharID.n5_name[16];
        *(_DWORD *)&acCharName[12] = v5;
        *(_DWORD *)&acCharName[16] = v7;
        acCharName[20] = 0;
        v8 = TextData::Get(0x67DEDEC2u);
        v9 = fs(v8);
        if ( v10->baseclass_0.baseclass_8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v10->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            v9,
            &v10->baseclass_0.baseclass_8);
          if ( v10->baseclass_0.baseclass_8.m_pkMsgHooker )
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v10->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              v9,
              &v10->baseclass_0.baseclass_8);
        }
        v10->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
          &v10->baseclass_0.baseclass_8,
          25,
          v9,
          &v10->baseclass_0.baseclass_8);
      }
    }
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B5BB47: using guessed type char byte_B5BB47;

//----- (006FC930) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_ACK(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_ACK *pkProto)
{
  int v3; // eax@1
  char *v4; // esi@10
  char *v5; // edi@10
  unsigned int v7; // [sp-8h] [bp-Ch]@3

  v3 = pkProto->Error;
  if ( (_WORD)v3 != 6064 )
  {
    switch ( v3 )
    {
      case 6065:
        v7 = 2109134283;
        goto LABEL_10;
      case 6066:
        v7 = 489651314;
        goto LABEL_10;
      case 6067:
        v7 = 252460580;
        goto LABEL_10;
      case 6068:
        v7 = 662462590;
        goto LABEL_10;
      case 6069:
        v7 = -822552364;
        goto LABEL_10;
      case 6070:
        v7 = 946227955;
        goto LABEL_10;
      case 6071:
        v7 = 592716873;
LABEL_10:
        v4 = (char *)&this->baseclass_0.baseclass_8;
        v5 = TextData::Get(v7);
        if ( *((_DWORD *)v4 + 1) )
        {
          (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v4 + 1) + 4))(25, v5, v4);
          if ( *((_DWORD *)v4 + 1) )
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v4 + 1) + 20))(25, v5, v4);
        }
        (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v4 + 20))(v4, 25, v5, v4);
        break;
      default:
        return 1;
    }
  }
  return 1;
}

//----- (006FCA00) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CMD(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CMD *pkProto)
{
  int v3; // edx@1
  GuildAcademyMemberTask *v4; // ebx@1
  int v5; // ecx@1
  int v6; // eax@1
  int v7; // ecx@1
  int v8; // edx@1
  int v9; // eax@1
  int v10; // ecx@1
  int v11; // edx@1
  int v12; // eax@1
  Name5 *v13; // eax@1
  char *v14; // eax@6
  char *v15; // edi@6
  char *v16; // eax@10
  char *v17; // edi@10
  char acTargetName[21]; // [sp+Ch] [bp-34h]@1
  char acSourceName[21]; // [sp+24h] [bp-1Ch]@1
  unsigned int v21; // [sp+3Ch] [bp-4h]@1
  int v22; // [sp+40h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v3 = *(_DWORD *)&pkProto->sChatBanSourceCharID.n5_name[8];
  v4 = this;
  v5 = *(_DWORD *)&pkProto->sChatBanSourceCharID.n5_name[4];
  *(_DWORD *)acSourceName = *(_DWORD *)&pkProto->sChatBanSourceCharID.n5_name[0];
  v6 = *(_DWORD *)&pkProto->sChatBanSourceCharID.n5_name[12];
  *(_DWORD *)&acSourceName[4] = v5;
  v7 = *(_DWORD *)&pkProto->sChatBanSourceCharID.n5_name[16];
  *(_DWORD *)&acSourceName[8] = v3;
  v8 = *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[0];
  *(_DWORD *)&acSourceName[12] = v6;
  v9 = *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[4];
  *(_DWORD *)&acSourceName[16] = v7;
  v10 = *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[8];
  *(_DWORD *)acTargetName = v8;
  v11 = *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[12];
  *(_DWORD *)&acTargetName[4] = v9;
  v12 = *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[16];
  *(_DWORD *)&acTargetName[8] = v10;
  acSourceName[20] = 0;
  *(_DWORD *)&acTargetName[12] = v11;
  *(_DWORD *)&acTargetName[16] = v12;
  acTargetName[20] = 0;
  v13 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[0] != *(_DWORD *)&v13->n5_name[0]
    || *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[4] != *(_DWORD *)&v13->n5_name[4]
    || *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[8] != *(_DWORD *)&v13->n5_name[8]
    || *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[12] != *(_DWORD *)&v13->n5_name[12]
    || *(_DWORD *)&pkProto->sChatBanTargetCharID.n5_name[16] != *(_DWORD *)&v13->n5_name[16] )
  {
    v16 = TextData::Get(0x90E835Fu);
    v17 = fs(v16);
    if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v17,
        &v4->baseclass_0.baseclass_8);
      if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v17,
          &v4->baseclass_0.baseclass_8);
    }
    v4->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v4->baseclass_0.baseclass_8,
      25,
      v17,
      &v4->baseclass_0.baseclass_8);
  }
  else
  {
    v14 = TextData::Get(0xB8BEA83Du);
    v15 = fs(v14);
    if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v15,
        &v4->baseclass_0.baseclass_8);
      if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v15,
          &v4->baseclass_0.baseclass_8);
    }
    v4->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v4->baseclass_0.baseclass_8,
      25,
      v15,
      &v4->baseclass_0.baseclass_8);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FCB60) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_ACK(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_ACK *pkProto)
{
  int v3; // eax@1
  GuildAcademyMemberTask *v4; // esi@1
  char *v5; // eax@3
  int v6; // esi@13
  char *v7; // edi@13
  unsigned int v9; // [sp-8h] [bp-Ch]@8

  v3 = pkProto->Error;
  v4 = this;
  if ( (_WORD)v3 != 12712 )
  {
    switch ( v3 )
    {
      case 12713:
        v5 = TextData::Get(0x7DB6D5CBu);
        goto LABEL_13;
      case 12714:
        v5 = TextData::Get(0x1D2F7C72u);
        goto LABEL_13;
      case 12715:
        v5 = TextData::Get(0xF0C3E24u);
        goto LABEL_13;
      case 12716:
        v5 = TextData::Get(0x277C607Eu);
        goto LABEL_13;
      case 12717:
        v5 = TextData::Get(0xCEF8D8D4u);
        goto LABEL_13;
      case 12718:
        v9 = 316858968;
        goto LABEL_12;
      case 12719:
        v5 = TextData::Get(0x23542449u);
        goto LABEL_13;
      case 12720:
        v9 = 1549616082;
        goto LABEL_12;
      case 12721:
        v9 = 1752181446;
LABEL_12:
        v5 = TextData3::Get(v9);
LABEL_13:
        v6 = (int)&v4->baseclass_0.baseclass_8;
        v7 = v5;
        if ( *(_DWORD *)(v6 + 4) )
        {
          (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 4))(25, v5, v6);
          if ( *(_DWORD *)(v6 + 4) )
            (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
        }
        (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
        break;
      default:
        return 1;
    }
  }
  return 1;
}

//----- (006FCC60) --------------------------------------------------------
int __thiscall GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_CMD(GuildAcademyMemberTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_CMD *pkProto)
{
  int v3; // edx@1
  GuildAcademyMemberTask *v4; // ebx@1
  int v5; // ecx@1
  int v6; // eax@1
  int v7; // ecx@1
  int v8; // edx@1
  int v9; // eax@1
  int v10; // ecx@1
  int v11; // edx@1
  int v12; // eax@1
  Name5 *v13; // eax@1
  char *v14; // eax@6
  char *v15; // edi@6
  char *v16; // eax@10
  char *v17; // edi@10
  char acTargetName[21]; // [sp+Ch] [bp-34h]@1
  char acSourceName[21]; // [sp+24h] [bp-1Ch]@1
  unsigned int v21; // [sp+3Ch] [bp-4h]@1
  int v22; // [sp+40h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v3 = *(_DWORD *)&pkProto->sChatBanCancelSourceCharID.n5_name[8];
  v4 = this;
  v5 = *(_DWORD *)&pkProto->sChatBanCancelSourceCharID.n5_name[4];
  *(_DWORD *)acSourceName = *(_DWORD *)&pkProto->sChatBanCancelSourceCharID.n5_name[0];
  v6 = *(_DWORD *)&pkProto->sChatBanCancelSourceCharID.n5_name[12];
  *(_DWORD *)&acSourceName[4] = v5;
  v7 = *(_DWORD *)&pkProto->sChatBanCancelSourceCharID.n5_name[16];
  *(_DWORD *)&acSourceName[8] = v3;
  v8 = *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[0];
  *(_DWORD *)&acSourceName[12] = v6;
  v9 = *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[4];
  *(_DWORD *)&acSourceName[16] = v7;
  v10 = *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[8];
  *(_DWORD *)acTargetName = v8;
  v11 = *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[12];
  *(_DWORD *)&acTargetName[4] = v9;
  v12 = *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[16];
  *(_DWORD *)&acTargetName[8] = v10;
  acSourceName[20] = 0;
  *(_DWORD *)&acTargetName[12] = v11;
  *(_DWORD *)&acTargetName[16] = v12;
  acTargetName[20] = 0;
  v13 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[0] != *(_DWORD *)&v13->n5_name[0]
    || *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[4] != *(_DWORD *)&v13->n5_name[4]
    || *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[8] != *(_DWORD *)&v13->n5_name[8]
    || *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[12] != *(_DWORD *)&v13->n5_name[12]
    || *(_DWORD *)&pkProto->sChatBanCancelTargetCharID.n5_name[16] != *(_DWORD *)&v13->n5_name[16] )
  {
    v16 = TextData3::Get(0x62F1DFAEu);
    v17 = fs(v16);
    if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v17,
        &v4->baseclass_0.baseclass_8);
      if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v17,
          &v4->baseclass_0.baseclass_8);
    }
    v4->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v4->baseclass_0.baseclass_8,
      25,
      v17,
      &v4->baseclass_0.baseclass_8);
  }
  else
  {
    v14 = TextData3::Get(0x539D9A66u);
    v15 = fs(v14);
    if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v15,
        &v4->baseclass_0.baseclass_8);
      if ( v4->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v4->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v15,
          &v4->baseclass_0.baseclass_8);
    }
    v4->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v4->baseclass_0.baseclass_8,
      25,
      v15,
      &v4->baseclass_0.baseclass_8);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FCDC0) --------------------------------------------------------
bool __thiscall GuildAcademyMemberTask::OnProcessNetMsg(GuildAcademyMemberTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyMemberTask *v5; // esi@1
  int v6; // esi@4
  bool result; // al@7
  int v8; // esi@8
  int v9; // esi@12
  int v10; // esi@16
  int v11; // esi@21
  int v12; // esi@25
  int v13; // esi@30
  int v14; // esi@35

  v5 = this;
  if ( iDepart == 4 )
  {
    if ( iCommand == 151 && *(_DWORD *)pvData )
      NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0xDu, 0, 0);
    return 0;
  }
  if ( iDepart != 38 )
    return 0;
  switch ( iCommand )
  {
    case 14:
      CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LIST_ACK(
        &this->baseclass_40.baseclass_0,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_LIST_ACK *)pvData);
      v6 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v6 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 4))(71, 0, v6);
        if ( *(_DWORD *)(v6 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 20))(71, 0, v6);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 71, 0, v6);
      result = 1;
      break;
    case 19:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD(
        this,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD *)pvData);
      v8 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v8 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 4))(71, 0, v8);
        if ( *(_DWORD *)(v8 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 20))(71, 0, v8);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 20))(v8, 71, 0, v8);
      result = 1;
      break;
    case 24:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_VANISH_CMD(
        this,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_VANISH_CMD *)pvData);
      v9 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v9 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v9 + 4) + 4))(71, 0, v9);
        if ( *(_DWORD *)(v9 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v9 + 4) + 20))(71, 0, v9);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 20))(v9, 71, 0, v9);
      result = 1;
      break;
    case 96:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD(
        this,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD *)pvData);
      v10 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v10 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 4))(71, 0, v10);
        if ( *(_DWORD *)(v10 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 + 4) + 20))(71, 0, v10);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v10 + 20))(v10, 71, 0, v10);
      result = 1;
      break;
    case 100:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD(
        (CGuildAcademyMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD *)pvData);
      result = 1;
      break;
    case 97:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD(
        this,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD *)pvData);
      v11 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v11 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 4))(71, 0, v11);
        if ( *(_DWORD *)(v11 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v11 + 4) + 20))(71, 0, v11);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v11 + 20))(v11, 71, 0, v11);
      result = 1;
      break;
    case 98:
      CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD(
        &this->baseclass_40.baseclass_0,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD *)pvData);
      v12 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v12 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v12 + 4) + 4))(71, 0, v12);
        if ( *(_DWORD *)(v12 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v12 + 4) + 20))(71, 0, v12);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v12 + 20))(v12, 71, 0, v12);
      result = 1;
      break;
    case 101:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_ACADEMY_MEMBER_PARTY_CMD(
        (CGuildAcademyMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_PARTY_CMD *)pvData);
      result = 1;
      break;
    case 102:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_ACADEMY_MEMBER_LEVEL_CMD(
        (CGuildAcademyMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_LEVEL_CMD *)pvData);
      v13 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v13 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v13 + 4) + 4))(71, 0, v13);
        if ( *(_DWORD *)(v13 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v13 + 4) + 20))(71, 0, v13);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v13 + 20))(v13, 71, 0, v13);
      result = 1;
      break;
    case 99:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_ACADEMY_MEMBER_MAP_CMD(
        (CGuildAcademyMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_MAP_CMD *)pvData);
      result = 1;
      break;
    case 103:
      this->baseclass_40.baseclass_0.vfptr->Recv_NC_GUILD_ACADEMY_MEMBER_CLASS_CMD(
        (CGuildAcademyMember *)&this->baseclass_40,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_CLASS_CMD *)pvData);
      v14 = (int)&v5->baseclass_0.baseclass_8;
      if ( *(_DWORD *)(v14 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v14 + 4) + 4))(71, 0, v14);
        if ( *(_DWORD *)(v14 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v14 + 4) + 20))(71, 0, v14);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v14 + 20))(v14, 71, 0, v14);
      result = 1;
      break;
    case 34:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_ACK(
        this,
        iRevBytes,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_ACK *)pvData);
      result = 1;
      break;
    case 35:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CMD(
        this,
        iRevBytes,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CMD *)pvData);
      result = 1;
      break;
    case 139:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_ACK(
        this,
        iRevBytes,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_ACK *)pvData);
      result = 1;
      break;
    case 140:
      GuildAcademyMemberTask::On_Recv_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_CMD(
        this,
        iRevBytes,
        (PROTO_NC_GUILD_ACADEMY_MEMBER_CHAT_BAN_CANCEL_CMD *)pvData);
      result = 1;
      break;
    default:
      return 0;
  }
  return result;
}

//----- (006FD290) --------------------------------------------------------
void __thiscall GuildAcademyMemberTask::GuildAcademyMemberTask(GuildAcademyMemberTask *this)
{
  GuildAcademyMemberTask *v1; // esi@1
  int v2; // edi@3

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  CGuildAcademyMember::CGuildAcademyMember(&v1->baseclass_40.baseclass_0);
  v1->baseclass_40.baseclass_0.vfptr = (CGuildAcademyMemberVtbl *)CClientGuildAcademyMember::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyMemberTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyMemberTask::_vftable_;
  v1->baseclass_40.baseclass_0.vfptr = (CGuildAcademyMemberVtbl *)GuildAcademyMemberTask::_vftable_;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[12] = 0;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[8] = 0;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[4] = 0;
  *(_DWORD *)&v1->m_kGuildNameToJoin.n4_name[0] = 0;
  if ( (GuildAcademyMemberTask *)GuildAcademyMemberTask::ms_spGuildAcademyMemberTask != v1 )
  {
    if ( GuildAcademyMemberTask::ms_spGuildAcademyMemberTask )
    {
      v2 = GuildAcademyMemberTask::ms_spGuildAcademyMemberTask;
      if ( !InterlockedDecrement((volatile LONG *)(GuildAcademyMemberTask::ms_spGuildAcademyMemberTask + 4)) )
      {
        if ( v2 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      }
    }
    GuildAcademyMemberTask::ms_spGuildAcademyMemberTask = (int)v1;
    InterlockedIncrement((volatile LONG *)&v1->baseclass_0.baseclass_0.m_uiRefCount);
  }
  v1->m_pkGuildAcademyJoinReqDlg = 0;
}
// 9D1838: using guessed type int (__stdcall *CClientGuildAcademyMember___vftable_[12])(int pAck);
// 9D186C: using guessed type int (__stdcall *GuildAcademyMemberTask___vftable_[12])(int pAck);
// 9D18A0: using guessed type int (__stdcall *GuildAcademyMemberTask___vftable_)(int uiFlags);
// 9D18BC: using guessed type int (__thiscall *GuildAcademyMemberTask___vftable_)(void *p, char);
// B67E84: using guessed type int GuildAcademyMemberTask__ms_spGuildAcademyMemberTask;

//----- (006FD370) --------------------------------------------------------
void *__thiscall GuildAcademyMemberTask::_scalar_deleting_destructor_(GuildAcademyMemberTask *this, unsigned int a2)
{
  ITask *v2; // esi@1

  v2 = (ITask *)this;
  CGuildAcademyMember::_CGuildAcademyMember(&this->baseclass_40.baseclass_0);
  ITask::_ITask(v2);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (006FD3E0) --------------------------------------------------------
void __thiscall GuildAcademyNotifyTask::OnStart(GuildAcademyNotifyTask *this)
{
  GuildAcademyNotifyTask *v1; // esi@1
  int v2; // edi@1
  void *v3; // eax@1
  void *v4; // ebx@1
  int v5; // eax@1
  int v6; // edx@3
  char v7; // cl@4

  v1 = this;
  v2 = this->m_kNoticeMsg.baseclass_0._Mysize + 3;
  v3 = operator new__(this->m_kNoticeMsg.baseclass_0._Mysize + 3);
  v4 = v3;
  *(_WORD *)v3 = LOWORD(v1->m_kNoticeMsg.baseclass_0._Mysize) + 1;
  v5 = (int)&v1->m_kNoticeMsg;
  if ( v1->m_kNoticeMsg.baseclass_0._Myres >= 0x10 )
    v5 = *(_DWORD *)v5;
  v6 = (int)((char *)v4 + -v5 + 2);
  do
  {
    v7 = *(_BYTE *)v5;
    *(_BYTE *)(v6 + v5) = *(_BYTE *)v5;
    ++v5;
  }
  while ( v7 );
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x24u, v4, v2);
  operator delete__(v4);
}

//----- (006FD440) --------------------------------------------------------
bool __thiscall GuildAcademyNotifyTask::OnProcessNetMsg(GuildAcademyNotifyTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyNotifyTask *v5; // ebx@1
  bool result; // al@3
  char *v7; // esi@10
  char *v8; // edi@10
  unsigned int v9; // [sp-Ch] [bp-10h]@5

  v5 = this;
  if ( iDepart == 38 && iCommand == 37 )
  {
    switch ( *(_WORD *)pvData )
    {
      case 0x17B8:
        v9 = -1018169760;
        goto LABEL_10;
      case 0x17B9:
        v9 = 1988193177;
        goto LABEL_10;
      case 0x17BA:
        v9 = 71048826;
        goto LABEL_10;
      case 0x17BB:
        v9 = -723960768;
        goto LABEL_10;
      case 0x17BC:
        v9 = -822552364;
LABEL_10:
        v7 = (char *)&this->baseclass_0.baseclass_0.baseclass_8;
        v8 = TextData::Get(v9);
        if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            v8,
            &v5->baseclass_0.baseclass_0.baseclass_8);
          if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              v8,
              &v5->baseclass_0.baseclass_0.baseclass_8);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20))(
          &v5->baseclass_0.baseclass_0.baseclass_8,
          25,
          v8,
          &v5->baseclass_0.baseclass_0.baseclass_8);
        break;
      default:
        break;
    }
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006FD500) --------------------------------------------------------
void __thiscall GuildAcademyNotifyTask::SetInfo(GuildAcademyNotifyTask *this, char *pcNotice)
{
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this->m_kNoticeMsg,
    pcNotice,
    strlen(pcNotice));
}

//----- (006FD530) --------------------------------------------------------
void __thiscall GuildAcademySelectTask::OnStart(GuildAcademySelectTask *this)
{
  GuildAcademySelectTask *v1; // esi@1
  PgFrameWork *v2; // edi@1
  GuildAcademySelectWin *v3; // eax@1
  int v4; // edx@2

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = GuildAcademySelectWin::CreateWin(0);
  GuildAcademySelectTask::m_pkGuildAcademySelectWin = (PgWin *)v3;
  if ( v1 )
    v4 = (int)&v1->baseclass_0.baseclass_8;
  else
    v4 = 0;
  ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(v4);
  if ( v2 )
    GameFrameWork::SetAutoCloseWin((GameFrameWork *)v2, GuildAcademySelectTask::m_pkGuildAcademySelectWin);
}

//----- (006FD590) --------------------------------------------------------
void __cdecl GuildAcademySelectTask::OnNCGuildListReq(int iIndex)
{
  NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x1Du, 3u, 0, 0);
}

//----- (006FD5C0) --------------------------------------------------------
bool __cdecl GuildAcademySelectTask::ShowGuildAcademySelectWin()
{
  bool result; // al@1

  result = ((int (*)(void))GuildAcademySelectTask::m_pkGuildAcademySelectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)();
  if ( !result )
    result = PgWinMgr::ShowWin(&Pgg_kWinMgr, GuildAcademySelectTask::m_pkGuildAcademySelectWin);
  return result;
}

//----- (006FD5F0) --------------------------------------------------------
GuildAcademySelectWin *__cdecl GuildAcademySelectTask::GetGuildAcademySelectWin()
{
  return (GuildAcademySelectWin *)GuildAcademySelectTask::m_pkGuildAcademySelectWin;
}

//----- (006FD600) --------------------------------------------------------
void __cdecl GuildAcademySelectTask::Terminate()
{
  int v0; // esi@1

  v0 = GuildAcademySelectTask::ms_spGuildAcademySelectTask;
  if ( GuildAcademySelectTask::ms_spGuildAcademySelectTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(GuildAcademySelectTask::ms_spGuildAcademySelectTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    GuildAcademySelectTask::ms_spGuildAcademySelectTask = 0;
  }
}
// B67E8C: using guessed type int GuildAcademySelectTask__ms_spGuildAcademySelectTask;

//----- (006FD640) --------------------------------------------------------
int __thiscall GuildAcademySelectTask::On_Recv_NC_GUILD_ACADEMY_LIST_ACK(GuildAcademySelectTask *this, PROTO_NC_GUILD_ACADEMY_LIST_ACK *pkProto)
{
  signed int v2; // esi@2
  SHINE_GUILD_ACADEMY_LIST *v3; // edi@3
  char *v5; // esi@8
  char *v6; // edi@8

  if ( pkProto->Error == 6312 )
  {
    v2 = 0;
    if ( (signed int)pkProto->NumOfGuildAcademy > 0 )
    {
      v3 = (SHINE_GUILD_ACADEMY_LIST *)&pkProto[1];
      do
      {
        GuildAcademySelectWin::SetGuildList(
          (GuildAcademySelectWin *)GuildAcademySelectTask::m_pkGuildAcademySelectWin,
          v3);
        ++v2;
        ++v3;
      }
      while ( v2 < (signed int)pkProto->NumOfGuildAcademy );
    }
    GuildAcademySelectWin::On_Recv_NC_GUILD_ACADEMY_LIST_ACK(
      (GuildAcademySelectWin *)GuildAcademySelectTask::m_pkGuildAcademySelectWin,
      pkProto);
    if ( !(unsigned __int8)((int (*)(void))GuildAcademySelectTask::m_pkGuildAcademySelectWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, GuildAcademySelectTask::m_pkGuildAcademySelectWin);
      return 1;
    }
  }
  else
  {
    if ( pkProto->Error == 6313 )
    {
      v5 = (char *)&this->baseclass_0.baseclass_8;
      v6 = TextData::Get(0xCEF8D8D4u);
      if ( *((_DWORD *)v5 + 1) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 4))(25, v6, v5);
        if ( *((_DWORD *)v5 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 20))(25, v6, v5);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
    }
  }
  return 1;
}

//----- (006FD720) --------------------------------------------------------
void __thiscall GuildAcademySelectTask::_GuildAcademySelectTask(GuildAcademySelectTask *this)
{
  GuildAcademySelectTask *v1; // esi@1
  GuildAcademySelectTask *v2; // ST08_4@1
  CGuildList *v3; // ecx@1

  v1 = this;
  v2 = this;
  v3 = (CGuildList *)&this->baseclass_40;
  v2->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademySelectTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildAcademySelectTask::_vftable_;
  v3->vfptr = (CGuildListVtbl *)GuildAcademySelectTask::_vftable_;
  CGuildList::_CGuildList(v3);
  ITask::_ITask(&v1->baseclass_0);
}
// 9D18E0: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_[2])(int);
// 9D18EC: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_)(int uiFlags);
// 9D1908: using guessed type int (__thiscall *GuildAcademySelectTask___vftable_)(void *p, char);

//----- (006FD790) --------------------------------------------------------
bool __thiscall GuildAcademySelectTask::OnProcessNetMsg(GuildAcademySelectTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  bool result; // al@3

  if ( iDepart == 38 && iCommand == 12 )
  {
    GuildAcademySelectTask::On_Recv_NC_GUILD_ACADEMY_LIST_ACK(this, (PROTO_NC_GUILD_ACADEMY_LIST_ACK *)pvData);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006FD7C0) --------------------------------------------------------
void __thiscall GuildAcademySelectTask::GuildAcademySelectTask(GuildAcademySelectTask *this)
{
  GuildAcademySelectTask *v1; // esi@1

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  CGuildList::CGuildList(&v1->baseclass_40.baseclass_0);
  v1->baseclass_40.baseclass_0.vfptr = (CGuildListVtbl *)CClientGuildAcademySelectList::_vftable_;
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademySelectTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildAcademySelectTask::_vftable_;
  v1->baseclass_40.baseclass_0.vfptr = (CGuildListVtbl *)GuildAcademySelectTask::_vftable_;
}
// 9D18D4: using guessed type int (__stdcall *CClientGuildAcademySelectList___vftable_[2])(int);
// 9D18E0: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_[2])(int);
// 9D18EC: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_)(int uiFlags);
// 9D1908: using guessed type int (__thiscall *GuildAcademySelectTask___vftable_)(void *p, char);

//----- (006FD830) --------------------------------------------------------
void __cdecl GuildAcademySelectTask::Create(IDirectMessenger *pkMsgHooker)
{
  int v1; // eax@1
  void *v2; // eax@2
  int v3; // esi@2
  int v4; // edi@7

  v1 = GuildAcademySelectTask::ms_spGuildAcademySelectTask;
  if ( !GuildAcademySelectTask::ms_spGuildAcademySelectTask )
  {
    v2 = operator new(0x4Cu);
    v3 = (int)v2;
    if ( v2 )
    {
      ITask::ITask((ITask *)v2, 0);
      CGuildList::CGuildList((CGuildList *)(v3 + 64));
      *(_DWORD *)(v3 + 64) = CClientGuildAcademySelectList::_vftable_;
      *(_DWORD *)v3 = &GuildAcademySelectTask::_vftable_;
      *(_DWORD *)(v3 + 8) = &GuildAcademySelectTask::_vftable_;
      *(_DWORD *)(v3 + 64) = GuildAcademySelectTask::_vftable_;
    }
    else
    {
      v3 = 0;
    }
    v1 = GuildAcademySelectTask::ms_spGuildAcademySelectTask;
    if ( GuildAcademySelectTask::ms_spGuildAcademySelectTask != v3 )
    {
      if ( GuildAcademySelectTask::ms_spGuildAcademySelectTask )
      {
        v4 = GuildAcademySelectTask::ms_spGuildAcademySelectTask;
        if ( !InterlockedDecrement((volatile LONG *)(GuildAcademySelectTask::ms_spGuildAcademySelectTask + 4)) )
        {
          if ( v4 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        }
      }
      v1 = v3;
      GuildAcademySelectTask::ms_spGuildAcademySelectTask = v3;
      if ( v3 )
      {
        InterlockedIncrement((volatile LONG *)(v3 + 4));
        v1 = GuildAcademySelectTask::ms_spGuildAcademySelectTask;
      }
    }
  }
  (**(void (__cdecl ***)(_DWORD))(v1 + 8))(pkMsgHooker);
}
// 9D18D4: using guessed type int (__stdcall *CClientGuildAcademySelectList___vftable_[2])(int);
// 9D18E0: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_[2])(int);
// 9D18EC: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_)(int uiFlags);
// 9D1908: using guessed type int (__thiscall *GuildAcademySelectTask___vftable_)(void *p, char);
// B67E8C: using guessed type int GuildAcademySelectTask__ms_spGuildAcademySelectTask;

//----- (006FD920) --------------------------------------------------------
void *__thiscall GuildAcademySelectTask::_scalar_deleting_destructor_(GuildAcademySelectTask *this, unsigned int a2)
{
  GuildAcademySelectTask *v2; // esi@1
  GuildAcademySelectTask *v3; // ST0C_4@1
  CGuildList *v4; // ecx@1

  v2 = this;
  v3 = this;
  v4 = (CGuildList *)&this->baseclass_40;
  v3->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademySelectTask::_vftable_;
  v2->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildAcademySelectTask::_vftable_;
  v4->vfptr = (CGuildListVtbl *)GuildAcademySelectTask::_vftable_;
  CGuildList::_CGuildList(v4);
  ITask::_ITask(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D18E0: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_[2])(int);
// 9D18EC: using guessed type int (__stdcall *GuildAcademySelectTask___vftable_)(int uiFlags);
// 9D1908: using guessed type int (__thiscall *GuildAcademySelectTask___vftable_)(void *p, char);

//----- (006FD9A0) --------------------------------------------------------
bool __thiscall CClientGuildAcademy::AmIGuildAcademyMember(CClientGuildAcademy *this)
{
  return this->m_bIsGuildAcademyMember != 0;
}

//----- (006FD9B0) --------------------------------------------------------
bool __thiscall CClientGuildAcademy::IsGuildWar(CClientGuildAcademy *this)
{
  return this->m_bGuildWarStart != 0;
}

//----- (006FD9C0) --------------------------------------------------------
void __thiscall GuildAcademyTask::OnStart(GuildAcademyTask *this)
{
  GuildAcademyTask *v1; // esi@1
  PgFrameWork *v2; // edi@1
  GuildAcademyMenuWin *v3; // eax@1
  GuildAcademyRankingWin *v4; // eax@1
  GuildAcademyHallOfFameWin *v5; // eax@1
  GuildAcademyMoneyRewardWin *v6; // eax@1
  GuildAcademyItemRewardWin *v7; // eax@1
  GuildAcademyStorageWin *v8; // eax@1
  void *v9; // eax@3
  ITask *v10; // eax@4

  v1 = this;
  v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = GuildAcademyMenuWin::CreateWin(0);
  v1->m_pkGuildAcademyMenuWin = v3;
  ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v4 = GuildAcademyRankingWin::CreateWin(v2);
  v1->m_pkGuildAcademyRankingWin = v4;
  ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v5 = GuildAcademyHallOfFameWin::CreateWin(v2);
  v1->m_pkGuildAcademyHallOfFameWin = v5;
  ((void (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v6 = GuildAcademyMoneyRewardWin::CreateWin(v2);
  v1->m_pkGuildAcademyMoneyRewardWin = v6;
  ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v7 = GuildAcademyItemRewardWin::CreateWin(v2);
  v1->m_pkGuildAcademyItemRewardWin = v7;
  ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  v8 = GuildAcademyStorageWin::CreateWin(v2);
  v1->m_pkGuildAcademyStorageWin = v8;
  ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_8);
  if ( v2 )
  {
    GameFrameWork::SetAutoCloseWin(
      (GameFrameWork *)v2,
      &v1->m_pkGuildAcademyMenuWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(
      (GameFrameWork *)v2,
      &v1->m_pkGuildAcademyRankingWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(
      (GameFrameWork *)v2,
      &v1->m_pkGuildAcademyHallOfFameWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(
      (GameFrameWork *)v2,
      &v1->m_pkGuildAcademyMoneyRewardWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(
      (GameFrameWork *)v2,
      &v1->m_pkGuildAcademyItemRewardWin->baseclass_0.baseclass_0.baseclass_0);
    GameFrameWork::SetAutoCloseWin(
      (GameFrameWork *)v2,
      &v1->m_pkGuildAcademyStorageWin->baseclass_0.baseclass_0.baseclass_0);
  }
  v9 = operator new(0x2AF4u);
  if ( v9 )
    GuildAcademyMemberTask::GuildAcademyMemberTask((GuildAcademyMemberTask *)v9);
  else
    v10 = 0;
  ITask::AttachChildTask(&v1->baseclass_0, v10);
}

//----- (006FDB60) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_DELETE_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_DELETE_CMD *pCmd)
{
  int result; // eax@1

  result = 0;
  if ( this->baseclass_40.baseclass_0.m_bIsGuildAcademy )
  {
    this->baseclass_40.baseclass_0.m_bIsGuildAcademy = 0;
    this->baseclass_40.m_bIsGuildAcademyMember = 0;
    result = 1;
  }
  return result;
}

//----- (006FDB90) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_DISMISS_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_DISMISS_CMD *pCmd)
{
  return this->baseclass_40.baseclass_0.m_bIsGuildAcademy != 0;
}

//----- (006FDBB0) --------------------------------------------------------
bool __thiscall CClientGuildAcademy::AmIGuildAcademyMaster(CClientGuildAcademy *this)
{
  CClientGuildAcademy *v1; // esi@1
  Name5 *v2; // eax@1
  int v3; // eax@6

  v1 = this;
  v2 = User::GetMainCharID(&g_kUser);
  if ( *(_DWORD *)&v2->n5_name[0] != *(_DWORD *)&v1->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0]
    || *(_DWORD *)&v2->n5_name[4] != *(_DWORD *)&v1->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[4]
    || *(_DWORD *)&v2->n5_name[8] != *(_DWORD *)&v1->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8]
    || *(_DWORD *)&v2->n5_name[12] != *(_DWORD *)&v1->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[12]
    || *(_DWORD *)&v2->n5_name[16] != *(_DWORD *)&v1->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] )
    v3 = 0;
  else
    LOBYTE(v3) = 1;
  return v3;
}

//----- (006FDC10) --------------------------------------------------------
bool __thiscall CClientGuildAcademy::IsGuildAcademyMaster(CClientGuildAcademy *this, Name5 charID)
{
  int v2; // eax@4

  if ( *(_QWORD *)&charID != *(_QWORD *)&this->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0]
    || *(_QWORD *)&charID.n5_name[8] != *(_QWORD *)&this->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8]
    || *(_DWORD *)&charID.n5_name[16] != *(_DWORD *)&this->baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] )
    v2 = 0;
  else
    LOBYTE(v2) = 1;
  return v2;
}

//----- (006FDC70) --------------------------------------------------------
void __thiscall CClientGuildAcademy::ReqHistoryList(CClientGuildAcademy *this)
{
  CClientGuildAcademy *v1; // esi@1
  CClientGuild *v2; // eax@1
  CClientGuild *v3; // eax@2

  v1 = this;
  v2 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMaster(v2)
    || (v3 = GuildTask::GetGuild(), CClientGuild::AmIGuildMember(v3))
    || CClientGuildAcademy::AmIGuildAcademyMaster(v1)
    || v1->m_bIsGuildAcademyMember )
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x8Fu, 0, 0);
}

//----- (006FDCC0) --------------------------------------------------------
void __cdecl GuildAcademyTask::Terminate()
{
  int v0; // esi@1

  v0 = GuildAcademyTask::ms_spGuildAcademyTask;
  if ( GuildAcademyTask::ms_spGuildAcademyTask )
  {
    if ( !InterlockedDecrement((volatile LONG *)(GuildAcademyTask::ms_spGuildAcademyTask + 4)) )
    {
      if ( v0 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v0)(v0, 1);
    }
    GuildAcademyTask::ms_spGuildAcademyTask = 0;
  }
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDD00) --------------------------------------------------------
int __cdecl GuildAcademyTask::InvalidateGuildAcademyWin()
{
  int v0; // esi@1

  v0 = GuildAcademyTask::ms_spGuildAcademyTask + 8;
  if ( *(_DWORD *)(GuildAcademyTask::ms_spGuildAcademyTask + 12) )
  {
    (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(GuildAcademyTask::ms_spGuildAcademyTask + 12) + 4))(
      71,
      0,
      GuildAcademyTask::ms_spGuildAcademyTask + 8);
    if ( *(_DWORD *)(v0 + 4) )
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v0 + 4) + 20))(71, 0, v0);
  }
  return (*(int (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v0 + 20))(v0, 71, 0, v0);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDD50) --------------------------------------------------------
CClientGuildAcademy *__cdecl GuildAcademyTask::GetGuildAcademy()
{
  CClientGuildAcademy *result; // eax@2

  if ( GuildAcademyTask::ms_spGuildAcademyTask )
    result = (CClientGuildAcademy *)(GuildAcademyTask::ms_spGuildAcademyTask + 64);
  else
    result = 0;
  return result;
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDD60) --------------------------------------------------------
GuildAcademyMenuWin *__cdecl GuildAcademyTask::GetGuildAcademyMenuWin()
{
  return *(GuildAcademyMenuWin **)(GuildAcademyTask::ms_spGuildAcademyTask + 2036);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDD70) --------------------------------------------------------
GuildAcademyRankingWin *__cdecl GuildAcademyTask::GetGuildAcademyRankingWin()
{
  return *(GuildAcademyRankingWin **)(GuildAcademyTask::ms_spGuildAcademyTask + 2040);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDD80) --------------------------------------------------------
GuildAcademyHallOfFameWin *__cdecl GuildAcademyTask::GetGuildAcademyHallOfFameWin()
{
  return *(GuildAcademyHallOfFameWin **)(GuildAcademyTask::ms_spGuildAcademyTask + 2044);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDD90) --------------------------------------------------------
GuildAcademyMoneyRewardWin *__cdecl GuildAcademyTask::GetGuildAcademyMoneyRewardWin()
{
  return *(GuildAcademyMoneyRewardWin **)(GuildAcademyTask::ms_spGuildAcademyTask + 2048);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDDA0) --------------------------------------------------------
GuildAcademyItemRewardWin *__cdecl GuildAcademyTask::GetGuildAcademyItemRewardWin()
{
  return *(GuildAcademyItemRewardWin **)(GuildAcademyTask::ms_spGuildAcademyTask + 2052);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDDB0) --------------------------------------------------------
GuildAcademyStorageWin *__cdecl GuildAcademyTask::GetGuildAcademyStorageWin()
{
  return *(GuildAcademyStorageWin **)(GuildAcademyTask::ms_spGuildAcademyTask + 2056);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDDC0) --------------------------------------------------------
GuildSelectWin *__cdecl GuildAcademyTask::GetGuildSelectWin()
{
  return *(GuildSelectWin **)(GuildAcademyTask::ms_spGuildAcademyTask + 2060);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDDD0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_NOTIFY_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *pCmd)
{
  GuildAcademyTask *v2; // ebx@1
  int result; // eax@3
  PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *v4; // eax@4
  char v5; // cl@5

  v2 = this;
  if ( GuildTask::GetGuild()->baseclass_0.m_bIsGuild || v2->baseclass_40.m_bIsGuildAcademyMember )
  {
    memcpy(&v2->baseclass_40.baseclass_0.m_GuildAcademy.tm_dNotifyDate, &pCmd->tm_dNotifyDate, 0x34u);
    v4 = pCmd + 1;
    *(_DWORD *)&v2->baseclass_40.baseclass_0.m_GuildAcademy.sNotifyCharID.n5_name[16] = *(_DWORD *)&pCmd->sNotifyCharID.n5_name[16];
    do
    {
      v5 = LOBYTE(v4->dNotifyDate);
      *((_BYTE *)&v4->dNotifyDate + v2->baseclass_40.baseclass_0.m_GuildAcademy.sNotify - (char *)&pCmd[1]) = LOBYTE(v4->dNotifyDate);
      v4 = (PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *)((char *)v4 + 1);
    }
    while ( v5 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (006FDE60) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_MY_GUILD_ACADEMY_INFO_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_MY_GUILD_ACADEMY_INFO_ACK *pAck)
{
  int v2; // esi@0
  char *v3; // esi@2
  int v5; // [sp-4h] [bp-4h]@2

  if ( pAck->Error == 6584 )
  {
    this->baseclass_40.baseclass_0.m_GuildAcademy.dAcademyBuffUntilTime = *(_DWORD *)&pAck[17].Error;
    this->baseclass_40.baseclass_0.m_GuildAcademy.nAcademyPoint = *(_DWORD *)&pAck[13].Error;
    v5 = v2;
    v3 = (char *)&this->baseclass_0.baseclass_8;
    this->baseclass_40.baseclass_0.m_GuildAcademy.nAcademyRank = *(_DWORD *)&pAck[15].Error;
    if ( this->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, _DWORD, char *))this->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        71,
        0,
        v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(signed int, _DWORD, char *))(**((_DWORD **)v3 + 1) + 20))(71, 0, v3);
    }
    (*(void (__thiscall **)(char *, signed int, _DWORD, char *, int))(*(_DWORD *)v3 + 20))(v3, 71, 0, v3, v5);
    if ( *((_DWORD *)v3 + 1) )
    {
      (*(void (__stdcall **)(signed int, _DWORD, char *))(**((_DWORD **)v3 + 1) + 4))(41, 0, v3);
      if ( *((_DWORD *)v3 + 1) )
        (*(void (__stdcall **)(signed int, _DWORD, char *))(**((_DWORD **)v3 + 1) + 20))(41, 0, v3);
    }
    (*(void (__thiscall **)(char *, signed int, _DWORD))(*(_DWORD *)v3 + 20))(v3, 41, 0);
  }
  return 1;
}
// 6FDE60: could not find valid save-restore pair for esi

//----- (006FDF10) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACADEMY_MASTER_CMD(GuildAcademyTask *this, PROTO_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACADEMY_MASTER_CMD *pkProto)
{
  _BYTE v2[20]; // ST00_20@1
  int v3; // esi@1

  *(_QWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] = *(_QWORD *)&pkProto->sMasterID.n5_name[0];
  *(_QWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8] = *(_QWORD *)&pkProto->sMasterID.n5_name[8];
  *(_DWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] = *(_DWORD *)&pkProto->sMasterID.n5_name[16];
  *(_DWORD *)v2 = *(_DWORD *)&pkProto->sMasterID.n5_name[0];
  *(_QWORD *)&v2[4] = *(_QWORD *)&pkProto->sMasterID.n5_name[4];
  *(_QWORD *)&v2[12] = *(_QWORD *)&pkProto->sMasterID.n5_name[12];
  CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v2);
  v3 = GuildAcademyTask::ms_spGuildAcademyTask + 8;
  if ( *(_DWORD *)(GuildAcademyTask::ms_spGuildAcademyTask + 12) )
  {
    (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(GuildAcademyTask::ms_spGuildAcademyTask + 12) + 4))(
      71,
      0,
      GuildAcademyTask::ms_spGuildAcademyTask + 8);
    if ( *(_DWORD *)(v3 + 4) )
      (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v3 + 4) + 20))(71, 0, v3);
  }
  (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v3 + 20))(v3, 71, 0, v3);
  return 1;
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FDFC0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_CHAR_GUILD_ACADEMY_CMD(GuildAcademyTask *this, PROTO_NC_CHAR_GUILD_ACADEMY_CMD *pkProto)
{
  GuildAcademyTask *v2; // esi@1
  float v3; // edi@3
  Char *v4; // ecx@4
  char *v5; // eax@5
  char *v6; // eax@5
  bool v7; // al@10
  int v8; // esi@16
  int v10; // [sp+Ch] [bp-1Ch]@1
  char dest[4]; // [sp+10h] [bp-18h]@5
  int v12; // [sp+14h] [bp-14h]@5
  int v13; // [sp+18h] [bp-10h]@5
  int v14; // [sp+1Ch] [bp-Ch]@5
  int v15; // [sp+20h] [bp-8h]@5
  unsigned int v16; // [sp+24h] [bp-4h]@1
  int v17; // [sp+28h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v2 = this;
  v10 = 0;
  if ( pkProto->nGuildAcademyNo )
  {
    GUILD_ACADEMY_CLIENT::operator_(&this->baseclass_40.baseclass_0.m_GuildAcademy, (GUILD_ACADEMY_CLIENT *)&pkProto[1]);
    g_pkMainChar->m_dwGuildRegNum = pkProto->nGuildAcademyNo;
    if ( pkProto->isGuildAcademyMember )
    {
      v2->baseclass_40.m_bIsGuildAcademyMember = 1;
      g_pkMainChar->m_GuildAcademyMemberFlag = 1;
      v3 = fTime;
      if ( LODWORD(fTime) )
      {
        do
        {
          v4 = *(Char **)(LODWORD(v3) + 8);
          LODWORD(v3) = *LODWORD(v3);
          v7 = g_pkMainChar != v4
            && (v10 |= 1u,
                v5 = (char *)((int (*)(void))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(),
                v15 = 0,
                v14 = 0,
                v13 = 0,
                v12 = 0,
                *(_DWORD *)dest = 0,
                strncpy(dest, v5, 0x14u),
                v6 = (char *)&GuildAcademyTask::GetGuildAcademy()->baseclass_0.m_GuildAcademy,
                *(_DWORD *)dest == *(_DWORD *)v6)
            && v12 == *((_DWORD *)v6 + 1)
            && v13 == *((_DWORD *)v6 + 2)
            && v14 == *((_DWORD *)v6 + 3)
            && v15 == *((_DWORD *)v6 + 4);
          if ( v10 & 1 )
            v10 &= 0xFFFFFFFEu;
        }
        while ( !v7 && LODWORD(v3) );
      }
    }
    v8 = (int)&v2->baseclass_0.baseclass_8;
    if ( *(_DWORD *)(v8 + 4) )
    {
      (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v8 + 4) + 4))(71, 0, v8);
      if ( *(_DWORD *)(v8 + 4) )
        (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v8 + 4) + 20))(71, 0, v8);
    }
    (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v8 + 20))(v8, 71, 0, v8);
  }
  else
  {
    this->baseclass_40.m_bIsGuildAcademyMember = 0;
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FE110) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_CMD *pkCmd)
{
  __int64 v2; // qdi@4
  int v3; // eax@4
  int v4; // ecx@4
  int v5; // edx@4
  int v6; // eax@4
  int v7; // eax@8
  char v8; // cl@9
  char *v9; // eax@10
  const void *v10; // edx@10
  char v11; // cl@11
  unsigned int v12; // eax@12
  void *v13; // edi@12
  char v14; // cl@13
  unsigned int v15; // eax@16
  void *v16; // edi@16
  char v17; // cl@17
  char *v18; // eax@18
  const void *v19; // esi@18
  char v20; // cl@19
  unsigned int v21; // eax@20
  void *v22; // edi@20
  char v23; // cl@21
  unsigned int v24; // eax@24
  void *v25; // edi@24
  char v26; // cl@25
  char *v27; // eax@26
  const void *v28; // esi@26
  char v29; // cl@27
  unsigned int v30; // eax@28
  void *v31; // edi@28
  char v32; // cl@29
  unsigned int v33; // eax@32
  void *v34; // edi@32
  char v35; // cl@33
  char *v36; // eax@34
  const void *v37; // esi@34
  char v38; // cl@35
  unsigned int v39; // eax@36
  void *v40; // edi@36
  char v41; // cl@37
  char *v42; // eax@40
  char *v43; // edi@40
  CClientGuild *v44; // eax@44
  int v45; // ecx@48
  int v46; // edx@48
  unsigned __int16 v47; // ax@48
  int v48; // ecx@48
  int v49; // edx@48
  char *v50; // eax@50
  char *v51; // eax@50
  CClientGuild *v52; // eax@51
  int v53; // edx@53
  int v54; // eax@53
  int v55; // edi@53
  int v56; // ecx@53
  int v57; // edx@53
  char v58; // kr00_1@53
  char *v59; // eax@54
  char *v60; // edi@54
  CClientGuild *v61; // eax@58
  char *v62; // eax@60
  void *v63; // edi@61
  unsigned int v65; // [sp-14h] [bp-248h]@49
  unsigned int v66; // [sp-Ch] [bp-240h]@45
  unsigned __int64 Money; // [sp+Ch] [bp-228h]@4
  GuildAcademyTask *v68; // [sp+14h] [bp-220h]@1
  char acStr1[256]; // [sp+18h] [bp-21Ch]@7
  char acStr2[256]; // [sp+118h] [bp-11Ch]@7
  char acname[21]; // [sp+218h] [bp-1Ch]@4
  unsigned int v72; // [sp+230h] [bp-4h]@1
  int v73; // [sp+234h] [bp+0h]@1

  v72 = (unsigned int)&v73 ^ __security_cookie;
  v68 = this;
  if ( pkCmd->type )
  {
    if ( pkCmd->type == 1 )
    {
      if ( !HIDWORD(pkCmd->___u5.lot) && !LODWORD(pkCmd->___u5.lot) )
        return 1;
      v45 = *(_DWORD *)&pkCmd->charid.n5_name[0];
      v46 = *(_DWORD *)&pkCmd->charid.n5_name[4];
      *(_DWORD *)&acname[8] = *(_DWORD *)&pkCmd->charid.n5_name[8];
      v47 = pkCmd->item;
      *(_DWORD *)acname = v45;
      v48 = *(_DWORD *)&pkCmd->charid.n5_name[12];
      *(_DWORD *)&acname[4] = v46;
      v49 = *(_DWORD *)&pkCmd->charid.n5_name[16];
      *(_DWORD *)&acname[12] = v48;
      *(_DWORD *)&acname[16] = v49;
      acname[20] = 0;
      IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v47);
      if ( pkCmd->who == 3 )
      {
        v65 = 1194699638;
      }
      else
      {
        v52 = GuildTask::GetGuild();
        if ( !CClientGuild::AmIGuildMember(v52) )
          return 1;
        v65 = -1530873404;
      }
      v50 = TextData::Get(v65);
      v51 = fs(v50);
      goto LABEL_61;
    }
    if ( pkCmd->type != 2
      || (v2 = pkCmd->___u5.lot,
          Money = pkCmd->___u5.lot,
          GuildAcademyStorage::SetMoney(pkCmd->storage_cen),
          v3 = *(_DWORD *)&pkCmd->charid.n5_name[4],
          v4 = *(_DWORD *)&pkCmd->charid.n5_name[8],
          *(_DWORD *)acname = *(_DWORD *)&pkCmd->charid.n5_name[0],
          v5 = *(_DWORD *)&pkCmd->charid.n5_name[12],
          *(_DWORD *)&acname[4] = v3,
          v6 = *(_DWORD *)&pkCmd->charid.n5_name[16],
          *(_DWORD *)&acname[8] = v4,
          *(_DWORD *)&acname[12] = v5,
          *(_DWORD *)&acname[16] = v6,
          acname[20] = 0,
          SHIDWORD(v2) < 0)
      || SHIDWORD(v2) <= 0 && !(_DWORD)v2 )
      return 1;
    memset(acStr1, 0, 0x100u);
    memset(acStr2, 0, 0x100u);
    if ( User::GetGem(v2) )
    {
      User::GetGem(v2);
      sprintf(acStr1, "%I64d");
      v7 = 0;
      do
      {
        v8 = acStr1[v7];
        acStr2[v7++] = v8;
      }
      while ( v8 );
      v9 = TextData::Get(0x475F9699u);
      v10 = v9;
      do
        v11 = *v9++;
      while ( v11 );
      v12 = v9 - v10;
      v13 = &acStr1[255];
      do
      {
        v14 = *((_BYTE *)v13 + 1);
        v13 = (char *)v13 + 1;
      }
      while ( v14 );
      memcpy(v13, v10, v12);
      v2 = Money;
    }
    if ( User::GetGold(v2) )
    {
      User::GetGold(v2);
      sprintf(acStr1, "%I64d");
      v15 = strlen(acStr1) + 1;
      v16 = &acStr1[255];
      do
      {
        v17 = *((_BYTE *)v16 + 1);
        v16 = (char *)v16 + 1;
      }
      while ( v17 );
      memcpy(v16, acStr1, v15);
      v18 = TextData::Get(0x47A395A3u);
      v19 = v18;
      do
        v20 = *v18++;
      while ( v20 );
      v21 = v18 - v19;
      v22 = &acStr1[255];
      do
      {
        v23 = *((_BYTE *)v22 + 1);
        v22 = (char *)v22 + 1;
      }
      while ( v23 );
      memcpy(v22, v19, v21);
      v2 = Money;
    }
    if ( User::GetSilver(v2) )
    {
      User::GetSilver(v2);
      sprintf(acStr1, "%I64d");
      v24 = strlen(acStr1) + 1;
      v25 = &acStr1[255];
      do
      {
        v26 = *((_BYTE *)v25 + 1);
        v25 = (char *)v25 + 1;
      }
      while ( v26 );
      memcpy(v25, acStr1, v24);
      v27 = TextData::Get(0x98B595EFu);
      v28 = v27;
      do
        v29 = *v27++;
      while ( v29 );
      v30 = v27 - v28;
      v31 = &acStr1[255];
      do
      {
        v32 = *((_BYTE *)v31 + 1);
        v31 = (char *)v31 + 1;
      }
      while ( v32 );
      memcpy(v31, v28, v30);
      v2 = Money;
    }
    if ( User::GetCopper(v2) )
    {
      User::GetCopper(v2);
      sprintf(acStr1, "%I64d");
      v33 = strlen(acStr1) + 1;
      v34 = &acStr1[255];
      do
      {
        v35 = *((_BYTE *)v34 + 1);
        v34 = (char *)v34 + 1;
      }
      while ( v35 );
      memcpy(v34, acStr1, v33);
      v36 = TextData::Get(0x88AF99F5u);
      v37 = v36;
      do
        v38 = *v36++;
      while ( v38 );
      v39 = v36 - v37;
      v40 = &acStr1[255];
      do
      {
        v41 = *((_BYTE *)v40 + 1);
        v40 = (char *)v40 + 1;
      }
      while ( v41 );
      memcpy(v40, v37, v39);
    }
    if ( pkCmd->who == 3 )
    {
      v42 = TextData::Get(0xF346442Bu);
      v43 = fs(v42);
      if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v43,
          &v68->baseclass_0.baseclass_8);
        if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v43,
            &v68->baseclass_0.baseclass_8);
      }
      v68->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v68->baseclass_0.baseclass_8,
        25,
        v43,
        &v68->baseclass_0.baseclass_8);
      return 1;
    }
    v44 = GuildTask::GetGuild();
    if ( !CClientGuild::AmIGuildMember(v44) )
      return 1;
    v66 = 1502634657;
LABEL_60:
    v62 = TextData::Get(v66);
    v51 = fs(v62);
LABEL_61:
    v63 = v51;
    if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
    {
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
        25,
        v51,
        &v68->baseclass_0.baseclass_8);
      if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
        ((void (__stdcall *)(signed int, void *, IDirectMessenger *))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
          25,
          v63,
          &v68->baseclass_0.baseclass_8);
    }
    v68->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
      &v68->baseclass_0.baseclass_8,
      25,
      v63,
      &v68->baseclass_0.baseclass_8);
    return 1;
  }
  v53 = *(_DWORD *)&pkCmd->charid.n5_name[4];
  v54 = *(_DWORD *)&pkCmd->charid.n5_name[8];
  v55 = pkCmd->item;
  *(_DWORD *)acname = *(_DWORD *)&pkCmd->charid.n5_name[0];
  v56 = *(_DWORD *)&pkCmd->charid.n5_name[12];
  *(_DWORD *)&acname[4] = v53;
  v57 = *(_DWORD *)&pkCmd->charid.n5_name[16];
  *(_DWORD *)&acname[12] = v56;
  *(_DWORD *)&acname[16] = v57;
  *(_DWORD *)&acname[8] = v54;
  acname[20] = 0;
  v58 = (*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable + 16))(
          ITableBase<ItemInfo_ItemInfoTab>::ms_pkTable,
          v55);
  if ( pkCmd->who != 3 )
  {
    v61 = GuildTask::GetGuild();
    if ( !CClientGuild::AmIGuildMember(v61) )
      return 1;
    v66 = 1164733048;
    goto LABEL_60;
  }
  v59 = TextData::Get(0x96830AC4u);
  v60 = fs(v59);
  if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v60,
      &v68->baseclass_0.baseclass_8);
    if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v60,
        &v68->baseclass_0.baseclass_8);
  }
  v68->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
    &v68->baseclass_0.baseclass_8,
    25,
    v60,
    &v68->baseclass_0.baseclass_8);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A97F54: using guessed type int ITableBase_ItemInfo_ItemInfoTab___ms_pkTable;

//----- (006FE6B0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_CMD *pkCmd)
{
  GuildAcademyTask *v2; // ebx@1
  CClientGuild *v3; // eax@1
  unsigned int v4; // edi@5
  unsigned int v5; // ebx@5
  int v6; // eax@5
  int v7; // ecx@5
  int v8; // edx@5
  int v9; // eax@5
  int v10; // eax@9
  char v11; // cl@10
  char *v12; // eax@11
  const void *v13; // edx@11
  char v14; // cl@12
  unsigned int v15; // eax@13
  void *v16; // edi@13
  char v17; // cl@14
  unsigned int v18; // eax@17
  void *v19; // edi@17
  char v20; // cl@18
  char *v21; // eax@19
  char *v22; // ecx@19
  char v23; // dl@20
  unsigned int v24; // eax@21
  const void *v25; // esi@21
  void *v26; // edi@21
  char v27; // cl@22
  unsigned int v28; // eax@25
  void *v29; // edi@25
  char v30; // cl@26
  char *v31; // eax@27
  char *v32; // ecx@27
  char v33; // dl@28
  unsigned int v34; // eax@29
  const void *v35; // esi@29
  void *v36; // edi@29
  char v37; // cl@30
  unsigned int v38; // eax@33
  void *v39; // edi@33
  char v40; // cl@34
  char *v41; // eax@35
  char *v42; // ecx@35
  char v43; // dl@36
  unsigned int v44; // eax@37
  const void *v45; // esi@37
  void *v46; // edi@37
  char v47; // cl@38
  char *v48; // eax@40
  char *v49; // edi@40
  unsigned __int16 v50; // ax@44
  int v51; // ecx@45
  int v52; // edx@45
  int v53; // ecx@45
  int v54; // edx@45
  char *v55; // ST1C_4@45
  char *v56; // eax@45
  char *v57; // edi@45
  unsigned __int16 v58; // ax@49
  int v59; // ecx@50
  int v60; // edx@50
  int v61; // ecx@50
  int v62; // edx@50
  char *v63; // ST1C_4@50
  char *v64; // eax@50
  char *v65; // edi@50
  unsigned int Money; // [sp+8h] [bp-228h]@5
  GuildAcademyTask *v68; // [sp+10h] [bp-220h]@1
  char acStr1[256]; // [sp+14h] [bp-21Ch]@8
  char acStr2[256]; // [sp+114h] [bp-11Ch]@8
  char acname[21]; // [sp+214h] [bp-1Ch]@5
  unsigned int v72; // [sp+22Ch] [bp-4h]@1
  int v73; // [sp+230h] [bp+0h]@1

  v72 = (unsigned int)&v73 ^ __security_cookie;
  v2 = this;
  v68 = this;
  v3 = GuildTask::GetGuild();
  if ( CClientGuild::AmIGuildMember(v3) )
  {
    if ( pkCmd->type )
    {
      if ( pkCmd->type == 1 )
      {
        v50 = pkCmd->item;
        if ( v50 != -1 )
        {
          v51 = *(_DWORD *)&pkCmd->charid.n5_name[4];
          *(_DWORD *)acname = *(_DWORD *)&pkCmd->charid.n5_name[0];
          v52 = *(_DWORD *)&pkCmd->charid.n5_name[8];
          *(_DWORD *)&acname[4] = v51;
          v53 = *(_DWORD *)&pkCmd->charid.n5_name[12];
          *(_DWORD *)&acname[8] = v52;
          v54 = *(_DWORD *)&pkCmd->charid.n5_name[16];
          *(_DWORD *)&acname[12] = v53;
          *(_DWORD *)&acname[16] = v54;
          acname[20] = 0;
          v55 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v50)->Name;
          v56 = TextData::Get(0xAAFFB2DFu);
          v57 = fs(v56);
          if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
          {
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              25,
              v57,
              &v2->baseclass_0.baseclass_8);
            if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
              ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                25,
                v57,
                &v2->baseclass_0.baseclass_8);
          }
          v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
            &v2->baseclass_0.baseclass_8,
            25,
            v57,
            &v2->baseclass_0.baseclass_8);
        }
      }
      else
      {
        if ( pkCmd->type == 2 )
        {
          v4 = LODWORD(pkCmd->___u5.lot);
          v5 = HIDWORD(pkCmd->___u5.lot);
          Money = LODWORD(pkCmd->___u5.lot);
          GuildAcademyStorage::SetMoney(pkCmd->storage_cen);
          v6 = *(_DWORD *)&pkCmd->charid.n5_name[4];
          v7 = *(_DWORD *)&pkCmd->charid.n5_name[8];
          *(_DWORD *)acname = *(_DWORD *)&pkCmd->charid.n5_name[0];
          v8 = *(_DWORD *)&pkCmd->charid.n5_name[12];
          *(_DWORD *)&acname[4] = v6;
          v9 = *(_DWORD *)&pkCmd->charid.n5_name[16];
          *(_DWORD *)&acname[8] = v7;
          *(_DWORD *)&acname[12] = v8;
          *(_DWORD *)&acname[16] = v9;
          acname[20] = 0;
          if ( (v5 & 0x80000000u) == 0 )
          {
            if ( (signed int)v5 > 0 || v4 )
            {
              memset(acStr1, 0, 0x100u);
              memset(acStr2, 0, 0x100u);
              if ( User::GetGem(__PAIR__(v5, v4)) )
              {
                User::GetGem(__PAIR__(v5, v4));
                sprintf(acStr1, "%I64d");
                v10 = 0;
                do
                {
                  v11 = acStr1[v10];
                  acStr2[v10++] = v11;
                }
                while ( v11 );
                v12 = TextData::Get(0x475F9699u);
                v13 = v12;
                do
                  v14 = *v12++;
                while ( v14 );
                v15 = v12 - v13;
                v16 = &acStr1[255];
                do
                {
                  v17 = *((_BYTE *)v16 + 1);
                  v16 = (char *)v16 + 1;
                }
                while ( v17 );
                memcpy(v16, v13, v15);
                v4 = Money;
              }
              if ( User::GetGold(__PAIR__(v5, v4)) )
              {
                User::GetGold(__PAIR__(v5, v4));
                sprintf(acStr1, "%I64d");
                v18 = strlen(acStr1) + 1;
                v19 = &acStr1[255];
                do
                {
                  v20 = *((_BYTE *)v19 + 1);
                  v19 = (char *)v19 + 1;
                }
                while ( v20 );
                memcpy(v19, acStr1, v18);
                v21 = TextData::Get(0x47A395A3u);
                v22 = v21;
                do
                  v23 = *v21++;
                while ( v23 );
                v24 = v21 - v22;
                v25 = v22;
                v26 = &acStr1[255];
                do
                {
                  v27 = *((_BYTE *)v26 + 1);
                  v26 = (char *)v26 + 1;
                }
                while ( v27 );
                memcpy(v26, v25, v24);
                v4 = Money;
              }
              if ( User::GetSilver(__PAIR__(v5, v4)) )
              {
                User::GetSilver(__PAIR__(v5, v4));
                sprintf(acStr1, "%I64d");
                v28 = strlen(acStr1) + 1;
                v29 = &acStr1[255];
                do
                {
                  v30 = *((_BYTE *)v29 + 1);
                  v29 = (char *)v29 + 1;
                }
                while ( v30 );
                memcpy(v29, acStr1, v28);
                v31 = TextData::Get(0x98B595EFu);
                v32 = v31;
                do
                  v33 = *v31++;
                while ( v33 );
                v34 = v31 - v32;
                v35 = v32;
                v36 = &acStr1[255];
                do
                {
                  v37 = *((_BYTE *)v36 + 1);
                  v36 = (char *)v36 + 1;
                }
                while ( v37 );
                memcpy(v36, v35, v34);
                v4 = Money;
              }
              if ( User::GetCopper(__PAIR__(v5, v4)) )
              {
                User::GetCopper(__PAIR__(v5, v4));
                sprintf(acStr1, "%I64d");
                v38 = strlen(acStr1) + 1;
                v39 = &acStr1[255];
                do
                {
                  v40 = *((_BYTE *)v39 + 1);
                  v39 = (char *)v39 + 1;
                }
                while ( v40 );
                memcpy(v39, acStr1, v38);
                v41 = TextData::Get(0x88AF99F5u);
                v42 = v41;
                do
                  v43 = *v41++;
                while ( v43 );
                v44 = v41 - v42;
                v45 = v42;
                v46 = &acStr1[255];
                do
                {
                  v47 = *((_BYTE *)v46 + 1);
                  v46 = (char *)v46 + 1;
                }
                while ( v47 );
                memcpy(v46, v45, v44);
              }
              v48 = TextData::Get(0x837E95AFu);
              v49 = fs(v48);
              if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v49,
                  &v68->baseclass_0.baseclass_8);
                if ( v68->baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v68->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v49,
                    &v68->baseclass_0.baseclass_8);
              }
              v68->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v68->baseclass_0.baseclass_8,
                25,
                v49,
                &v68->baseclass_0.baseclass_8);
            }
          }
        }
      }
    }
    else
    {
      v58 = pkCmd->item;
      if ( v58 != -1 )
      {
        v59 = *(_DWORD *)&pkCmd->charid.n5_name[4];
        *(_DWORD *)acname = *(_DWORD *)&pkCmd->charid.n5_name[0];
        v60 = *(_DWORD *)&pkCmd->charid.n5_name[8];
        *(_DWORD *)&acname[4] = v59;
        v61 = *(_DWORD *)&pkCmd->charid.n5_name[12];
        *(_DWORD *)&acname[8] = v60;
        v62 = *(_DWORD *)&pkCmd->charid.n5_name[16];
        *(_DWORD *)&acname[12] = v61;
        *(_DWORD *)&acname[16] = v62;
        acname[20] = 0;
        v63 = IIDTableBase<ItemInfo_ItemInfoTab_unsigned_short>::GetByID(v58)->Name;
        v64 = TextData::Get(0x5EA05E90u);
        v65 = fs(v64);
        if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
        {
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
            25,
            v65,
            &v2->baseclass_0.baseclass_8);
          if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
              25,
              v65,
              &v2->baseclass_0.baseclass_8);
        }
        v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
          &v2->baseclass_0.baseclass_8,
          25,
          v65,
          &v2->baseclass_0.baseclass_8);
      }
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FEBB0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_ACK *pAck)
{
  signed int v3; // eax@1
  PgFrameWork *v4; // esi@2
  char *v6; // esi@15
  char *v7; // edi@15
  unsigned int v8; // [sp-8h] [bp-Ch]@7

  v3 = pAck->Error;
  if ( (_WORD)v3 != 6560 )
  {
    if ( v3 > 6561 )
    {
      switch ( v3 )
      {
        case 6562:
          v8 = -1023072970;
          goto LABEL_15;
        case 6564:
          v8 = -584508371;
          goto LABEL_15;
        case 6565:
          v8 = -1018169760;
          goto LABEL_15;
        case 6566:
          v8 = 1988193177;
          goto LABEL_15;
        case 6567:
          v8 = -723960768;
          goto LABEL_15;
        default:
          return 1;
      }
      return 1;
    }
    if ( v3 == 6561 )
    {
      v8 = -2004191329;
    }
    else
    {
      if ( v3 != 6115 )
        return 1;
      v8 = -1547716847;
    }
LABEL_15:
    v6 = (char *)&this->baseclass_0.baseclass_8;
    v7 = TextData::Get(v8);
    if ( *((_DWORD *)v6 + 1) )
    {
      (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v6 + 1) + 4))(25, v7, v6);
      if ( *((_DWORD *)v6 + 1) )
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v6 + 1) + 20))(25, v7, v6);
    }
    (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
    return 1;
  }
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !(unsigned __int8)(*(int (**)(void))(*(_DWORD *)v4[19].m_BackFrameID + 260))() )
  {
    GameFrameWork::OpenInventoryWin((GameFrameWork *)v4);
    return 1;
  }
  return 1;
}

//----- (006FECC0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_ACK *pAck)
{
  int v3; // eax@1
  PgFrameWork *v4; // esi@2
  char *v6; // esi@13
  char *v7; // edi@13
  unsigned int v8; // [sp-8h] [bp-Ch]@5

  v3 = pAck->Error;
  if ( (_WORD)v3 == 6112 )
  {
    v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( !(unsigned __int8)(*(int (**)(void))(*(_DWORD *)v4[19].m_BackFrameID + 260))() )
    {
      GameFrameWork::OpenInventoryWin((GameFrameWork *)v4);
      return 1;
    }
  }
  else
  {
    switch ( v3 )
    {
      case 6113:
        v8 = -2004191329;
        goto LABEL_13;
      case 6114:
        v8 = -2114199841;
        goto LABEL_13;
      case 6115:
        v8 = -1547716847;
        goto LABEL_13;
      case 6116:
        v8 = 756689201;
        goto LABEL_13;
      case 6117:
        v8 = 1808582883;
        goto LABEL_13;
      case 6118:
        v8 = -1018169760;
        goto LABEL_13;
      case 6119:
        v8 = 1988193177;
        goto LABEL_13;
      case 6120:
        v8 = -723960768;
LABEL_13:
        v6 = (char *)&this->baseclass_0.baseclass_8;
        v7 = TextData::Get(v8);
        if ( *((_DWORD *)v6 + 1) )
        {
          (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v6 + 1) + 4))(25, v7, v6);
          if ( *((_DWORD *)v6 + 1) )
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v6 + 1) + 20))(25, v7, v6);
        }
        (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
        break;
      default:
        return 1;
    }
  }
  return 1;
}

//----- (006FEDD0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK *pAck)
{
  GuildAcademyTask *v2; // esi@1
  int v3; // eax@1
  CClientGuildAcademy *v4; // ecx@4
  bool v5; // al@6
  char *v7; // esi@12
  char *v8; // edi@12
  unsigned int v9; // [sp-8h] [bp-Ch]@8

  v2 = this;
  v3 = pAck->Error;
  if ( (_WORD)v3 != 6272 )
  {
    switch ( v3 )
    {
      case 6273:
        v9 = -822552364;
        goto LABEL_12;
      case 6274:
      case 6276:
        v9 = 489651314;
        goto LABEL_12;
      case 6275:
        v9 = -1018169760;
        goto LABEL_12;
      case 6277:
        v9 = -723960768;
LABEL_12:
        v7 = (char *)&this->baseclass_0.baseclass_8;
        v8 = TextData::Get(v9);
        if ( *((_DWORD *)v7 + 1) )
        {
          (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 4))(25, v8, v7);
          if ( *((_DWORD *)v7 + 1) )
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 20))(25, v8, v7);
        }
        (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
        break;
      default:
        return 1;
    }
    return 1;
  }
  GuildAcademyMoneyRewardWin::SetRewardMoney(this->m_pkGuildAcademyMoneyRewardWin, pAck);
  GuildAcademyMoneyRewardWin::UpdateAcademyInfo(v2->m_pkGuildAcademyMoneyRewardWin);
  if ( (unsigned __int8)((int (*)(void))v2->m_pkGuildAcademyMoneyRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    return 1;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGuildAcademyMoneyRewardWin->baseclass_0.baseclass_0.baseclass_0);
  if ( GuildAcademyTask::ms_spGuildAcademyTask )
    v4 = (CClientGuildAcademy *)(GuildAcademyTask::ms_spGuildAcademyTask + 64);
  else
    v4 = 0;
  v5 = CClientGuildAcademy::AmIGuildAcademyMaster(v4);
  GuildAcademyMoneyRewardWin::SetEnable(v2->m_pkGuildAcademyMoneyRewardWin, v5);
  return 1;
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FEEF0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_REWARD_MONEY_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_SET_REWARD_MONEY_ACK *pAck)
{
  GuildAcademyTask *v3; // esi@1
  char *v4; // eax@2
  int result; // eax@2
  int v6; // esi@8
  char *v7; // edi@8
  unsigned int v8; // [sp-4h] [bp-Ch]@4

  v3 = this;
  if ( pAck->Error == 6336 )
  {
    v4 = TextData::Get(0xCBFE0E1Fu);
    MsgBox::Modeless(MSGBOX_OK, v4);
    result = 1;
  }
  else
  {
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x31u, 0, 0);
    switch ( pAck->Error )
    {
      case 0x1881u:
        v8 = -822552364;
        goto LABEL_8;
      case 0x1882u:
      case 0x1884u:
        v8 = 489651314;
        goto LABEL_8;
      case 0x1883u:
        v8 = -1018169760;
        goto LABEL_8;
      case 0x1885u:
        v8 = -723960768;
LABEL_8:
        v6 = (int)&v3->baseclass_0.baseclass_8;
        v7 = TextData::Get(v8);
        if ( *(_DWORD *)(v6 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
          if ( *(_DWORD *)(v6 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
        break;
      default:
        break;
    }
    result = 1;
  }
  return result;
}

//----- (006FEFD0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK *pAck)
{
  char *v3; // eax@2
  char *v5; // esi@7
  char *v6; // edi@7
  unsigned int v7; // [sp-8h] [bp-Ch]@3

  switch ( pAck->Error )
  {
    case 0x1950u:
      GuildAcademyMoneyRewardWin::InitializeRewardMoney(this->m_pkGuildAcademyMoneyRewardWin, pAck);
      v3 = TextData::Get(0x33489E69u);
      MsgBox::Modeless(MSGBOX_OK, v3);
      return 1;
    case 0x1951u:
      v7 = -822552364;
      goto LABEL_7;
    case 0x1952u:
    case 0x1954u:
      v7 = 1988193177;
      goto LABEL_7;
    case 0x1953u:
      v7 = -1018169760;
      goto LABEL_7;
    case 0x1955u:
      v7 = -723960768;
LABEL_7:
      v5 = (char *)&this->baseclass_0.baseclass_8;
      v6 = TextData::Get(v7);
      if ( *((_DWORD *)v5 + 1) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 4))(25, v6, v5);
        if ( *((_DWORD *)v5 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 20))(25, v6, v5);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
      break;
    default:
      return 1;
  }
  return 1;
}

//----- (006FF0A0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *pAck)
{
  GuildAcademyTask *v2; // esi@1
  int v3; // eax@1
  char *v5; // esi@9
  char *v6; // edi@9
  unsigned int v7; // [sp-8h] [bp-Ch]@5

  v2 = this;
  v3 = pAck->Error;
  if ( (_WORD)v3 == 6280 )
  {
    GuildAcademyItemRewardWin::SetRewardItem(this->m_pkGuildAcademyItemRewardWin, pAck);
    GuildAcademyItemRewardWin::UpdateAcademyInfo(v2->m_pkGuildAcademyItemRewardWin);
    if ( !(unsigned __int8)((int (*)(void))v2->m_pkGuildAcademyItemRewardWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGuildAcademyItemRewardWin->baseclass_0.baseclass_0.baseclass_0);
      return 1;
    }
  }
  else
  {
    switch ( v3 )
    {
      case 6281:
        v7 = -822552364;
        goto LABEL_9;
      case 6283:
        v7 = -1018169760;
        goto LABEL_9;
      case 6284:
        v7 = 1988193177;
        goto LABEL_9;
      case 6282:
      case 6285:
        v7 = 489651314;
LABEL_9:
        v5 = (char *)&this->baseclass_0.baseclass_8;
        v6 = TextData::Get(v7);
        if ( *((_DWORD *)v5 + 1) )
        {
          (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v5 + 1) + 4))(25, v6, v5);
          if ( *((_DWORD *)v5 + 1) )
            (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v5 + 1) + 20))(25, v6, v5);
        }
        (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
        break;
      default:
        return 1;
    }
  }
  return 1;
}

//----- (006FF190) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_REWARD_ITEM_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_SET_REWARD_ITEM_ACK *pAck)
{
  GuildAcademyTask *v3; // esi@1
  char *v4; // eax@2
  int result; // eax@2
  int v6; // esi@8
  char *v7; // edi@8
  unsigned int v8; // [sp-4h] [bp-Ch]@4

  v3 = this;
  if ( pAck->Error == 6408 )
  {
    v4 = TextData::Get(0xCBFE0E1Fu);
    MsgBox::Modeless(MSGBOX_OK, v4);
    result = 1;
  }
  else
  {
    NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x35u, 0, 0);
    switch ( pAck->Error )
    {
      case 0x1909u:
        v8 = -822552364;
        goto LABEL_8;
      case 0x190Au:
      case 0x190Cu:
        v8 = 1988193177;
        goto LABEL_8;
      case 0x190Bu:
        v8 = -1018169760;
        goto LABEL_8;
      case 0x190Du:
        v8 = 489651314;
LABEL_8:
        v6 = (int)&v3->baseclass_0.baseclass_8;
        v7 = TextData::Get(v8);
        if ( *(_DWORD *)(v6 + 4) )
        {
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 4))(25, v7, v6);
          if ( *(_DWORD *)(v6 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v6 + 4) + 20))(25, v7, v6);
        }
        (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v6 + 20))(v6, 25, v7, v6);
        break;
      default:
        break;
    }
    result = 1;
  }
  return result;
}

//----- (006FF270) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_CLEAR_REWARD_ITEM_ACK(GuildAcademyTask *this, int iRevBytes, PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_ITEM_ACK *pAck)
{
  char *v3; // eax@2
  char *v5; // esi@7
  char *v6; // edi@7
  unsigned int v7; // [sp-8h] [bp-Ch]@3

  switch ( pAck->Error )
  {
    case 0x1998u:
      GuildAcademyItemRewardWin::InitializeRewardItem(this->m_pkGuildAcademyItemRewardWin);
      v3 = TextData::Get(0x33489E69u);
      MsgBox::Modeless(MSGBOX_OK, v3);
      return 1;
    case 0x1999u:
      v7 = -822552364;
      goto LABEL_7;
    case 0x199Au:
    case 0x199Cu:
      v7 = 1988193177;
      goto LABEL_7;
    case 0x199Bu:
      v7 = -1018169760;
      goto LABEL_7;
    case 0x199Du:
      v7 = -723960768;
LABEL_7:
      v5 = (char *)&this->baseclass_0.baseclass_8;
      v6 = TextData::Get(v7);
      if ( *((_DWORD *)v5 + 1) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 4))(25, v6, v5);
        if ( *((_DWORD *)v5 + 1) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**((_DWORD **)v5 + 1) + 20))(25, v6, v5);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
      break;
    default:
      return 1;
  }
  return 1;
}

//----- (006FF340) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_GRADUATE_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_GRADUATE_ACK *pAck)
{
  GuildAcademyTask *v2; // esi@1
  int v3; // eax@1
  int v5; // eax@4
  int v6; // eax@5
  char *v7; // esi@10
  char *v8; // edi@10
  unsigned int v9; // [sp-8h] [bp-Ch]@7

  v2 = this;
  v3 = pAck->Error;
  if ( (_WORD)v3 != 6568 )
  {
    v5 = v3 - 6569;
    if ( v5 )
    {
      v6 = v5 - 1;
      if ( v6 )
      {
        if ( v6 != 1 )
          return 1;
        v9 = -723960768;
      }
      else
      {
        v9 = -1018169760;
      }
    }
    else
    {
      v9 = -822552364;
    }
    v7 = (char *)&this->baseclass_0.baseclass_8;
    v8 = TextData::Get(v9);
    if ( *((_DWORD *)v7 + 1) )
    {
      (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 4))(25, v8, v7);
      if ( *((_DWORD *)v7 + 1) )
        (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 20))(25, v8, v7);
    }
    (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
    return 1;
  }
  GuildAcademyHallOfFameWin::On_Recv_NC_GUILD_ACADEMY_GET_GRADUATE_ACK(this->m_pkGuildAcademyHallOfFameWin, pAck);
  if ( !(unsigned __int8)((int (*)(void))v2->m_pkGuildAcademyHallOfFameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGuildAcademyHallOfFameWin->baseclass_0.baseclass_0.baseclass_0);
    return 1;
  }
  return 1;
}

//----- (006FF400) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK *pAck)
{
  GuildAcademyTask *v2; // esi@1
  int v3; // eax@1
  int v5; // eax@4
  int v6; // eax@5
  char *v7; // esi@10
  char *v8; // edi@10
  unsigned int v9; // [sp-8h] [bp-Ch]@7

  v2 = this;
  v3 = pAck->Error;
  if ( (_WORD)v3 != 6576 )
  {
    v5 = v3 - 6577;
    if ( v5 )
    {
      v6 = v5 - 1;
      if ( v6 )
      {
        if ( v6 != 1 )
          return 1;
        v9 = -723960768;
      }
      else
      {
        v9 = -1018169760;
      }
    }
    else
    {
      v9 = -822552364;
    }
    v7 = (char *)&this->baseclass_0.baseclass_8;
    v8 = TextData::Get(v9);
    if ( *((_DWORD *)v7 + 1) )
    {
      (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 4))(25, v8, v7);
      if ( *((_DWORD *)v7 + 1) )
        (*(void (__stdcall **)(signed int, char *, char *))(**((_DWORD **)v7 + 1) + 20))(25, v8, v7);
    }
    (*(void (__thiscall **)(char *, signed int, char *, char *))(*(_DWORD *)v7 + 20))(v7, 25, v8, v7);
    return 1;
  }
  GuildAcademyRankingWin::On_Recv_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK(this->m_pkGuildAcademyRankingWin, pAck);
  if ( !(unsigned __int8)((int (*)(void))v2->m_pkGuildAcademyRankingWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGuildAcademyRankingWin->baseclass_0.baseclass_0.baseclass_0);
    return 1;
  }
  return 1;
}

//----- (006FF4C0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_MASTER_TELEPORT_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_MASTER_TELEPORT_ACK *pAck)
{
  signed int v2; // eax@1
  GuildAcademyTask *v3; // esi@1
  char *v4; // eax@4
  int v5; // esi@10
  char *v6; // edi@10

  v2 = pAck->Error;
  v3 = this;
  if ( v2 <= 15872 )
  {
    if ( v2 == 15872 )
    {
      v4 = TextData3::Get(0x1554484Eu);
LABEL_10:
      v5 = (int)&v3->baseclass_0.baseclass_8;
      v6 = v4;
      if ( *(_DWORD *)(v5 + 4) )
      {
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v5 + 4) + 4))(25, v4, v5);
        if ( *(_DWORD *)(v5 + 4) )
          (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v5 + 4) + 20))(25, v6, v5);
      }
      (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v5 + 20))(v5, 25, v6, v5);
    }
    else
    {
      switch ( v2 )
      {
        case 6056:
        case 6057:
          v4 = TextData::Get(0xCEF8D8D4u);
          goto LABEL_10;
        case 6058:
          v4 = TextData::Get(0xC34FF660u);
          goto LABEL_10;
        case 6059:
          v4 = TextData::Get(0xF0C3E24u);
          goto LABEL_10;
        case 6061:
          v4 = TextData::Get(0x96E2E7DDu);
          goto LABEL_10;
        case 6062:
          v4 = TextData::Get(0x3D634B4Eu);
          goto LABEL_10;
        default:
          return 1;
      }
    }
  }
  return 1;
}

//----- (006FF5A0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_MASTER_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_SET_MASTER_CMD *pkCmd)
{
  GuildAcademyTask *v2; // edi@1
  _BYTE v3[20]; // ST00_20@1
  int v4; // eax@1
  int v5; // ecx@1
  int v6; // eax@1
  int v7; // ecx@1
  char *v8; // eax@1
  char *v9; // ebx@1
  char acname[21]; // [sp+20h] [bp-1Ch]@1
  unsigned int v12; // [sp+38h] [bp-4h]@1
  int v13; // [sp+3Ch] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] = *(_QWORD *)&pkCmd->sName.n5_name[0];
  *(_QWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8] = *(_QWORD *)&pkCmd->sName.n5_name[8];
  *(_DWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] = *(_DWORD *)&pkCmd->sName.n5_name[16];
  *(_DWORD *)v3 = *(_DWORD *)&pkCmd->sName.n5_name[0];
  *(_QWORD *)&v3[4] = *(_QWORD *)&pkCmd->sName.n5_name[4];
  *(_QWORD *)&v3[12] = *(_QWORD *)&pkCmd->sName.n5_name[12];
  CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v3);
  v4 = *(_DWORD *)&pkCmd->sName.n5_name[0];
  v5 = *(_DWORD *)&pkCmd->sName.n5_name[4];
  *(_DWORD *)&acname[8] = *(_DWORD *)&pkCmd->sName.n5_name[8];
  *(_DWORD *)acname = v4;
  v6 = *(_DWORD *)&pkCmd->sName.n5_name[12];
  *(_DWORD *)&acname[4] = v5;
  v7 = *(_DWORD *)&pkCmd->sName.n5_name[16];
  *(_DWORD *)&acname[12] = v6;
  *(_DWORD *)&acname[16] = v7;
  acname[20] = 0;
  v8 = TextData::Get(0x323435Fu);
  v9 = fs(v8);
  if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v9,
      &v2->baseclass_0.baseclass_8);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v9,
        &v2->baseclass_0.baseclass_8);
  }
  v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
    &v2->baseclass_0.baseclass_8,
    25,
    v9,
    &v2->baseclass_0.baseclass_8);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FF6A0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_MASTER_BY_LEAVE_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_SET_MASTER_BY_LEAVE_CMD *pkCmd)
{
  GuildAcademyTask *v2; // edi@1
  _BYTE v3[20]; // ST00_20@1
  int v4; // eax@1
  int v5; // ecx@1
  int v6; // eax@1
  int v7; // ecx@1
  char *v8; // eax@1
  char *v9; // ebx@1
  char acname[21]; // [sp+20h] [bp-1Ch]@1
  unsigned int v12; // [sp+38h] [bp-4h]@1
  int v13; // [sp+3Ch] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[0] = *(_QWORD *)&pkCmd->sNewAcademyMasterName.n5_name[0];
  *(_QWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[8] = *(_QWORD *)&pkCmd->sNewAcademyMasterName.n5_name[8];
  *(_DWORD *)&this->baseclass_40.baseclass_0.m_GuildAcademy.sAcademyMasterName.n5_name[16] = *(_DWORD *)&pkCmd->sNewAcademyMasterName.n5_name[16];
  *(_DWORD *)v3 = *(_DWORD *)&pkCmd->sNewAcademyMasterName.n5_name[0];
  *(_QWORD *)&v3[4] = *(_QWORD *)&pkCmd->sNewAcademyMasterName.n5_name[4];
  *(_QWORD *)&v3[12] = *(_QWORD *)&pkCmd->sNewAcademyMasterName.n5_name[12];
  CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v3);
  v4 = *(_DWORD *)&pkCmd->sNewAcademyMasterName.n5_name[0];
  v5 = *(_DWORD *)&pkCmd->sNewAcademyMasterName.n5_name[4];
  *(_DWORD *)&acname[8] = *(_DWORD *)&pkCmd->sNewAcademyMasterName.n5_name[8];
  *(_DWORD *)acname = v4;
  v6 = *(_DWORD *)&pkCmd->sNewAcademyMasterName.n5_name[12];
  *(_DWORD *)&acname[4] = v5;
  v7 = *(_DWORD *)&pkCmd->sNewAcademyMasterName.n5_name[16];
  *(_DWORD *)&acname[12] = v6;
  *(_DWORD *)&acname[16] = v7;
  acname[20] = 0;
  v8 = TextData::Get(0x323435Fu);
  v9 = fs(v8);
  if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
  {
    ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
      25,
      v9,
      &v2->baseclass_0.baseclass_8);
    if ( v2->baseclass_0.baseclass_8.m_pkMsgHooker )
      ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v2->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
        25,
        v9,
        &v2->baseclass_0.baseclass_8);
  }
  v2->baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
    &v2->baseclass_0.baseclass_8,
    25,
    v9,
    &v2->baseclass_0.baseclass_8);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (006FF7A0) --------------------------------------------------------
void __thiscall CClientGuildAcademy::ClearHistoryList(CClientGuildAcademy *this)
{
  CClientGuildAcademy *v1; // edi@1
  NiTListItem<GUILD_HISTORY *> *v2; // esi@1
  int v3; // ebx@2
  void *v4; // eax@3
  NiTListItem<GUILD_HISTORY *> *v5; // esi@6
  NiTListItem<GUILD_HISTORY *> *v6; // ST04_4@7

  v1 = this;
  v2 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  if ( *(_DWORD *)&this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] )
  {
    v3 = *(_DWORD *)&this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    do
    {
      v4 = v2->m_element;
      v2 = v2->m_pkNext;
      if ( v4 )
        operator delete(v4);
      --v3;
    }
    while ( v3 );
  }
  v5 = v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v5 )
  {
    v6 = v5;
    v5 = v5->m_pkNext;
    v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr->DeleteItem(
      (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *)&v1->m_kHistoryList,
      v6);
  }
  *(_DWORD *)&v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
}

//----- (006FF810) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_HISTORY_LIST_ACK(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_HISTORY_LIST_ACK *pkCmd)
{
  int v2; // eax@1
  GuildAcademyTask *v3; // ebx@1
  int v4; // eax@2
  int v5; // eax@3
  char *v6; // esi@6
  char *v7; // edi@6
  int result; // eax@10
  void *v9; // esi@13
  PROTO_NC_GUILD_ACADEMY_HISTORY_LIST_ACK *v10; // edi@14
  void *v11; // eax@16
  int v12; // eax@18
  NiTListItem<GUILD_HISTORY *> *v13; // ecx@18
  unsigned int v14; // [sp-4h] [bp-10h]@5
  int pkCmda; // [sp+14h] [bp+8h]@14

  v2 = pkCmd->Error;
  v3 = this;
  if ( (_WORD)v2 != 12680 )
  {
    v4 = v2 - 12682;
    if ( !v4 )
    {
      v14 = -1222909615;
      goto LABEL_6;
    }
    v5 = v4 - 1;
    if ( !v5 )
    {
      v14 = -1076635299;
      goto LABEL_6;
    }
    if ( v5 == 1 )
    {
      v14 = -1660818118;
LABEL_6:
      v6 = (char *)&this->baseclass_0.baseclass_8;
      v7 = TextData3::Get(v14);
      if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v7,
          &v3->baseclass_0.baseclass_8);
        if ( v3->baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v3->baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v7,
            &v3->baseclass_0.baseclass_8);
      }
      (*(void (__thiscall **)(IDirectMessenger *, signed int, char *, IDirectMessenger *))(*(_DWORD *)v6 + 20))(
        &v3->baseclass_0.baseclass_8,
        25,
        v7,
        &v3->baseclass_0.baseclass_8);
    }
    return 1;
  }
  CClientGuildAcademy::ClearHistoryList(&this->baseclass_40);
  v9 = 0;
  if ( !pkCmd->HistoryCount )
    return 1;
  v10 = pkCmd + 3;
  pkCmda = pkCmd->HistoryCount;
  while ( 1 )
  {
    v11 = operator new(0x20u);
    if ( v11 != v9 )
    {
      *((_DWORD *)v11 + 6) = v9;
      *((_DWORD *)v11 + 5) = v9;
      *((_DWORD *)v11 + 4) = v9;
      *((_DWORD *)v11 + 3) = v9;
      *((_DWORD *)v11 + 2) = v9;
      v9 = v11;
    }
    *(_DWORD *)v9 = *(_DWORD *)&v10[-2].Error;
    *((_DWORD *)v9 + 1) = *((_DWORD *)&v10[-1] - 1);
    *((_DWORD *)v9 + 2) = *(_DWORD *)&v10[-1].Error;
    *((_DWORD *)v9 + 3) = *((_DWORD *)v10 - 1);
    *((_DWORD *)v9 + 4) = *(_DWORD *)&v10->Error;
    *((_DWORD *)v9 + 5) = *(_DWORD *)&v10->HistoryCount;
    *((_DWORD *)v9 + 6) = *(_DWORD *)&v10[1].Error;
    *((_DWORD *)v9 + 7) = *(_DWORD *)&v10[1].HistoryCount;
    v12 = (int)v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr->NewItem((NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *> *)&v3->baseclass_40.m_kHistoryList);
    *(_DWORD *)(v12 + 8) = v9;
    *(_DWORD *)v12 = 0;
    *(_DWORD *)(v12 + 4) = v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    v13 = v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail;
    if ( v13 )
      v13->m_pkNext = (NiTListItem<GUILD_HISTORY *> *)v12;
    else
      v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = (NiTListItem<GUILD_HISTORY *> *)v12;
    v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<GUILD_HISTORY *> *)v12;
    result = 1;
    ++*(_DWORD *)&v3->baseclass_40.m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
    v10 += 4;
    --pkCmda;
    if ( !pkCmda )
      break;
    v9 = 0;
  }
  return result;
}

//----- (006FF960) --------------------------------------------------------
bool __thiscall CClientGuildAcademy::FindEnemyGuildAcademyMember(CClientGuildAcademy *this, unsigned int GuildRegNum)
{
  CClientGuildAcademy *v2; // esi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > > v3; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *v4; // esi@1
  bool result; // al@3
  unsigned int v6; // edi@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > > iter; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = *(std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > > *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->m_kGuildWarInfo, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&iter, &GuildRegNum)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v4 = v2->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  iter = v3;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)v3 == v4 )
  {
LABEL_8:
    result = 0;
  }
  else
  {
    if ( *(_BYTE *)(*(_DWORD *)&v3 + 16) != 2 )
    {
      v6 = GuildRegNum;
      while ( *(_DWORD *)(*(_DWORD *)&v3 + 12) != v6 || *(_BYTE *)(*(_DWORD *)&v3 + 16) != 2 )
      {
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<int_int_std::less<int>_std::allocator<std::pair<int_const_int>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned int,unsigned int,std::less<unsigned int>,boost::fast_pool_allocator<std::pair<unsigned int,unsigned int>,boost::default_user_allocator_new_delete,boost::details::pool::win32_mute *)&iter);
        v3 = iter;
        if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)iter == v4 )
          goto LABEL_8;
      }
    }
    result = 1;
  }
  return result;
}

//----- (006FF9D0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_END_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_WAR_END_CMD *pkCmd)
{
  PROTO_NC_GUILD_ACADEMY_WAR_END_CMD *v2; // edi@1
  GuildAcademyTask *v3; // esi@1
  PROTO_NC_GUILD_ACADEMY_WAR_END_CMD *v4; // ST04_4@2
  int v5; // eax@2

  v2 = pkCmd;
  v3 = this;
  if ( pkCmd )
  {
    v4 = pkCmd;
    this->baseclass_40.m_bGuildWarStart = 0;
    v5 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                       (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->baseclass_40.m_kGuildWarInfo,
                       (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&pkCmd,
                       &v4->EnemyGuildNo)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)v5 != v3->baseclass_40.m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
      *(_BYTE *)(v5 + 16) = v2->WarStatus;
  }
  return 1;
}

//----- (006FFA10) --------------------------------------------------------
void __thiscall GuildAcademyTask::_GuildAcademyTask(GuildAcademyTask *this)
{
  GuildAcademyTask *v1; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *v2; // ecx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > v3; // eax@1
  GuildAcademyMemberTask *v4; // edi@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > result; // [sp+0h] [bp-14h]@2
  GuildAcademyTask *v6; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = this;
  v6 = this;
  this->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyTask::_vftable_;
  this->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyTask::_vftable_;
  this->baseclass_40.baseclass_0.vfptr = (CGuildVtbl *)GuildAcademyTask::_vftable_;
  v2 = this->baseclass_40.m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > >)v2->_Left;
  v7 = 2;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)v3 != v2 )
  {
    do
      v3 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > > *)&std::_Tree<std::_Tmap_traits<int_mhResTableElement___std::less<int>_std::allocator<std::pair<int_const_mhResTableElement__>>_0>>::erase((std::_Tree<std::_Tmap_traits<unsigned short,long,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,long> >,0> > *)&v1->baseclass_40.m_kGuildWarInfo, &result, v3)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    while ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)v3 != v1->baseclass_40.m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
  }
  std::_Tree<std::_Tmap_traits<unsigned_short_Char___std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_Char__>>_0>>::clear((std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->baseclass_40.m_kGuildWarInfo);
  v1->baseclass_40.m_bGuildWarStart = 0;
  CClientGuildAcademy::ClearHistoryList(&v1->baseclass_40);
  v4 = v1->m_spGuildAcademyMemberTask.m_pObject;
  LOBYTE(v7) = 1;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.m_uiRefCount) && v4 )
    v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  LOBYTE(v7) = 0;
  CClientGuildAcademy::_CClientGuildAcademy(&v1->baseclass_40);
  v7 = -1;
  ITask::_ITask(&v1->baseclass_0);
}
// 9D1964: using guessed type int (__stdcall *GuildAcademyTask___vftable_[20])(int pAck);
// 9D19B8: using guessed type int (__stdcall *GuildAcademyTask___vftable_)(int uiFlags);
// 9D19D4: using guessed type int (__thiscall *GuildAcademyTask___vftable_)(void *p, char);

//----- (006FFAF0) --------------------------------------------------------
void __thiscall GuildAcademyTask::GuildAcademyTask(GuildAcademyTask *this)
{
  GuildAcademyTask *v1; // esi@1
  GuildAcademyMemberTask *v2; // edi@1

  v1 = this;
  ITask::ITask(&this->baseclass_0, 0);
  CClientGuildAcademy::CClientGuildAcademy(&v1->baseclass_40);
  v1->baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GuildAcademyTask::_vftable_;
  v1->baseclass_0.baseclass_8.vfptr = (IDirectMessengerVtbl *)&GuildAcademyTask::_vftable_;
  v1->baseclass_40.baseclass_0.vfptr = (CGuildVtbl *)GuildAcademyTask::_vftable_;
  v1->m_spGuildAcademyMemberTask.m_pObject = 0;
  v1->baseclass_40.m_bIsGuildAcademyMember = 0;
  v2 = v1->m_spGuildAcademyMemberTask.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spGuildAcademyMemberTask.m_pObject = 0;
  }
  v1->m_pkGuildAcademyMenuWin = 0;
  v1->m_pkGuildAcademyRankingWin = 0;
  v1->m_pkGuildAcademyHallOfFameWin = 0;
  v1->m_pkGuildAcademyMoneyRewardWin = 0;
  v1->m_pkGuildAcademyItemRewardWin = 0;
  v1->m_pkGuildAcademyStorageWin = 0;
}
// 9D1964: using guessed type int (__stdcall *GuildAcademyTask___vftable_[20])(int pAck);
// 9D19B8: using guessed type int (__stdcall *GuildAcademyTask___vftable_)(int uiFlags);
// 9D19D4: using guessed type int (__thiscall *GuildAcademyTask___vftable_)(void *p, char);

//----- (006FFBC0) --------------------------------------------------------
void __cdecl GuildAcademyTask::Create(IDirectMessenger *pkMsgHooker)
{
  int v1; // eax@1
  void *v2; // eax@2
  int v3; // eax@3
  int v4; // esi@3
  int v5; // edi@7

  v1 = GuildAcademyTask::ms_spGuildAcademyTask;
  if ( !GuildAcademyTask::ms_spGuildAcademyTask )
  {
    v2 = operator new(0x810u);
    if ( v2 )
    {
      GuildAcademyTask::GuildAcademyTask((GuildAcademyTask *)v2);
      v4 = v3;
    }
    else
    {
      v4 = 0;
    }
    v1 = GuildAcademyTask::ms_spGuildAcademyTask;
    if ( GuildAcademyTask::ms_spGuildAcademyTask != v4 )
    {
      if ( GuildAcademyTask::ms_spGuildAcademyTask )
      {
        v5 = GuildAcademyTask::ms_spGuildAcademyTask;
        if ( !InterlockedDecrement((volatile LONG *)(GuildAcademyTask::ms_spGuildAcademyTask + 4)) )
        {
          if ( v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        }
      }
      v1 = v4;
      GuildAcademyTask::ms_spGuildAcademyTask = v4;
      if ( v4 )
      {
        InterlockedIncrement((volatile LONG *)(v4 + 4));
        v1 = GuildAcademyTask::ms_spGuildAcademyTask;
      }
    }
  }
  (**(void (__cdecl ***)(_DWORD))(v1 + 8))(pkMsgHooker);
}
// B67E90: using guessed type int GuildAcademyTask__ms_spGuildAcademyTask;

//----- (006FFC80) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_INFO_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_WAR_INFO_LIST_CMD *pkCmd)
{
  int v2; // eax@1
  signed int v3; // edi@2
  PROTO_NC_GUILD_ACADEMY_WAR_INFO_LIST_CMD *v4; // esi@3
  char v5; // dl@4
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > >,bool> result; // [sp+4h] [bp-14h]@4
  std::pair<unsigned long const ,unsigned char> _Val; // [sp+Ch] [bp-Ch]@4
  GuildAcademyTask *v8; // [sp+14h] [bp-4h]@1

  v2 = 0;
  v8 = this;
  if ( pkCmd )
  {
    v3 = 0;
    if ( pkCmd->NumOfWarInfo > 0u )
    {
      v4 = pkCmd + 3;
      do
      {
        v5 = LOBYTE(v4->NumOfWarInfo);
        _Val.baseclass_0.first = *(_DWORD *)&v4[-2].NumOfWarInfo;
        _Val.baseclass_0.second = v5;
        std::_Tree<std::_Tmap_traits<unsigned_long_unsigned_char_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_unsigned_char>>_1>>::insert<std::pair<unsigned_long_const_unsigned_char>>(
          &v8->baseclass_40.m_kGuildWarInfo.baseclass_0,
          &result,
          &_Val);
        if ( LOBYTE(v4->NumOfWarInfo) == 2 )
          v8->baseclass_40.m_bGuildWarStart = 1;
        ++v3;
        v4 = (PROTO_NC_GUILD_ACADEMY_WAR_INFO_LIST_CMD *)((char *)v4 + 5);
      }
      while ( v3 < pkCmd->NumOfWarInfo );
    }
    v2 = 1;
  }
  return v2;
}

//----- (006FFCF0) --------------------------------------------------------
int __thiscall GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_START_CMD(GuildAcademyTask *this, PROTO_NC_GUILD_ACADEMY_WAR_START_CMD *pkCmd)
{
  PROTO_NC_GUILD_ACADEMY_WAR_START_CMD *v2; // edi@1
  GuildAcademyTask *v3; // esi@1
  PROTO_NC_GUILD_ACADEMY_WAR_START_CMD *v4; // ST04_4@2
  int v5; // eax@2
  int v6; // eax@3
  char v7; // al@4
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > >,bool> result; // [sp+8h] [bp-10h]@4
  std::pair<unsigned long const ,unsigned char> _Val; // [sp+10h] [bp-8h]@4

  v2 = pkCmd;
  v3 = this;
  if ( pkCmd )
  {
    v4 = pkCmd;
    this->baseclass_40.m_bGuildWarStart = 1;
    v5 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_long_NiPointer<NiControllerSequence>_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_NiPointer<NiControllerSequence>>>_0>>::find(
                       (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&this->baseclass_40.m_kGuildWarInfo,
                       (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > *)&pkCmd,
                       &v4->EnemyGuildNo)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)v5 == v3->baseclass_40.m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      v7 = v2->WarStatus;
      _Val.baseclass_0.first = v2->EnemyGuildNo;
      _Val.baseclass_0.second = v7;
      std::_Tree<std::_Tmap_traits<unsigned_long_unsigned_char_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_unsigned_char>>_1>>::insert<std::pair<unsigned_long_const_unsigned_char>>(
        &v3->baseclass_40.m_kGuildWarInfo.baseclass_0,
        &result,
        &_Val);
      v3->baseclass_40.m_bGuildWarStart = 1;
      v6 = 1;
    }
    else
    {
      *(_BYTE *)(v5 + 16) = v2->WarStatus;
      v3->baseclass_40.m_bGuildWarStart = 1;
      v6 = 1;
    }
  }
  else
  {
    v6 = 0;
  }
  return v6;
}

//----- (006FFD80) --------------------------------------------------------
bool __thiscall GuildAcademyTask::OnProcessNetMsg(GuildAcademyTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyTask *v5; // esi@1
  bool result; // al@4
  int v7; // esi@12
  int v8; // esi@19

  v5 = this;
  switch ( iDepart )
  {
    case 45:
      if ( iCommand != 14 )
        goto LABEL_39;
      GuildAcademyTask::On_Recv_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACADEMY_MASTER_CMD(
        this,
        (PROTO_NC_USER_CONNECTION_CHANGE_CHAR_ID_ACADEMY_MASTER_CMD *)pvData);
$LN22_63:
      result = 1;
      break;
    case 4:
      if ( iCommand != 151 )
        goto LABEL_39;
      GuildAcademyTask::On_Recv_NC_CHAR_GUILD_ACADEMY_CMD(this, (PROTO_NC_CHAR_GUILD_ACADEMY_CMD *)pvData);
      result = 1;
      break;
    case 12:
      if ( iCommand == 48 )
      {
        GuildAcademyTask::On_Recv_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_ACK(
          this,
          iRevBytes,
          (PROTO_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_ACK *)pvData);
        result = 1;
      }
      else
      {
        if ( iCommand != 50 )
          goto LABEL_39;
        GuildAcademyTask::On_Recv_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_ACK(
          this,
          iRevBytes,
          (PROTO_NC_ITEM_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_ACK *)pvData);
        result = 1;
      }
      break;
    case 38:
      switch ( iCommand )
      {
        case 18:
        case 28:
        case 47:
          goto $LN22_63;
        case 95:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_DELETE_CMD(this, (PROTO_NC_GUILD_ACADEMY_DELETE_CMD *)pvData);
          v7 = (int)&v5->baseclass_0.baseclass_8;
          GuildAcademyMemberTask::GetGuildAcademyMember()->baseclass_0.m_NumOfAcademyMembers = 0;
          if ( *(_DWORD *)(v7 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 4))(41, 0, v7);
          if ( *(_DWORD *)(v7 + 4) )
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v7 + 4) + 20))(41, 0, v7);
          (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 20))(v7, 41, 0, v7);
          return 1;
        case 32:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_MASTER_TELEPORT_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_MASTER_TELEPORT_ACK *)pvData);
          return 1;
        case 8:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_MY_GUILD_ACADEMY_INFO_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_MY_GUILD_ACADEMY_INFO_ACK *)pvData);
          return 1;
        case 38:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_NOTIFY_CMD(this, (PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *)pvData);
          v8 = (int)&v5->baseclass_0.baseclass_8;
          if ( *(_DWORD *)(v8 + 4) )
          {
            (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 4))(71, 0, v8);
            if ( *(_DWORD *)(v8 + 4) )
              (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 4) + 20))(71, 0, v8);
          }
          (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 20))(v8, 71, 0, v8);
          return 1;
        case 50:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_GET_REWARD_MONEY_ACK *)pvData);
          return 1;
        case 58:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_REWARD_MONEY_ACK(
            this,
            iRevBytes,
            (PROTO_NC_GUILD_ACADEMY_SET_REWARD_MONEY_ACK *)pvData);
          return 1;
        case 66:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK(
            this,
            iRevBytes,
            (PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_MONEY_ACK *)pvData);
          return 1;
        case 54:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_GET_REWARD_ITEM_ACK *)pvData);
          return 1;
        case 62:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_REWARD_ITEM_ACK(
            this,
            iRevBytes,
            (PROTO_NC_GUILD_ACADEMY_SET_REWARD_ITEM_ACK *)pvData);
          return 1;
        case 70:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_CLEAR_REWARD_ITEM_ACK(
            this,
            iRevBytes,
            (PROTO_NC_GUILD_ACADEMY_CLEAR_REWARD_ITEM_ACK *)pvData);
          return 1;
        case 74:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_GRADUATE_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_GET_GRADUATE_ACK *)pvData);
          return 1;
        case 78:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_GET_RANKING_LIST_ACK *)pvData);
          return 1;
        case 115:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_CMD(
            this,
            (PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_WITHDRAW_CMD *)pvData);
          return 1;
        case 117:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_CMD(
            this,
            (PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_DEPOSIT_CMD *)pvData);
          return 1;
        case 91:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_MASTER_CMD(
            this,
            (PROTO_NC_GUILD_ACADEMY_SET_MASTER_CMD *)pvData);
          return 1;
        case 129:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_SET_MASTER_BY_LEAVE_CMD(
            this,
            (PROTO_NC_GUILD_ACADEMY_SET_MASTER_BY_LEAVE_CMD *)pvData);
          return 1;
        case 124:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_INFO_CMD(
            this,
            (PROTO_NC_GUILD_ACADEMY_WAR_INFO_LIST_CMD *)pvData);
          return 1;
        case 125:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_START_CMD(this, (PROTO_NC_GUILD_ACADEMY_WAR_START_CMD *)pvData);
          return 1;
        case 126:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_WAR_END_CMD(this, (PROTO_NC_GUILD_ACADEMY_WAR_END_CMD *)pvData);
          return 1;
        case 144:
          GuildAcademyTask::On_Recv_NC_GUILD_ACADEMY_HISTORY_LIST_ACK(
            this,
            (PROTO_NC_GUILD_ACADEMY_HISTORY_LIST_ACK *)pvData);
          return 1;
        default:
          goto LABEL_39;
      }
      goto LABEL_39;
    default:
LABEL_39:
      result = 0;
      break;
  }
  return result;
}

//----- (00700160) --------------------------------------------------------
GUILD_ACADEMY_CLIENT *__thiscall GUILD_ACADEMY_CLIENT::operator_(GUILD_ACADEMY_CLIENT *this, GUILD_ACADEMY_CLIENT *__that)
{
  GUILD_ACADEMY_CLIENT *result; // eax@1
  char *v3; // esi@1
  unsigned int v4; // ebx@1
  signed int v5; // edi@1
  char *v6; // ecx@3
  signed int v7; // esi@3

  result = this;
  *(_QWORD *)&this->sAcademyMasterName.n5_name[0] = *(_QWORD *)&__that->sAcademyMasterName.n5_name[0];
  *(_QWORD *)&this->sAcademyMasterName.n5_name[8] = *(_QWORD *)&__that->sAcademyMasterName.n5_name[8];
  *(_DWORD *)&this->sAcademyMasterName.n5_name[16] = *(_DWORD *)&__that->sAcademyMasterName.n5_name[16];
  this->nNumAcademyMembers = __that->nNumAcademyMembers;
  this->nMaxAcademyMembers = __that->nMaxAcademyMembers;
  this->nAcademyPoint = __that->nAcademyPoint;
  this->nAcademyRank = __that->nAcademyRank;
  this->dAcademyBuffUntilTime = __that->dAcademyBuffUntilTime;
  v3 = this->sIntro;
  v4 = (char *)__that - (char *)this;
  v5 = 128;
  do
  {
    *v3 = v3[v4];
    ++v3;
    --v5;
  }
  while ( v5 );
  this->dNotifyDate = __that->dNotifyDate;
  memcpy(&this->tm_dNotifyDate, &__that->tm_dNotifyDate, 0x38u);
  v6 = this->sNotify;
  v7 = 512;
  do
  {
    *v6 = v6[v4];
    ++v6;
    --v7;
  }
  while ( v7 );
  return result;
}

//----- (00700240) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *__thiscall std::_Tree_val<std::_Tmap_traits<unsigned_long_unsigned_char_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_unsigned_char>>_1>>::_Buynode<std::pair<unsigned_long_const_unsigned_char>>(std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > *this, std::pair<unsigned long const ,unsigned char> *_Val)
{
  std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *result; // eax@1
  std::pair<unsigned long const ,unsigned char> *v4; // esi@3
  std::exception thisa; // [sp+4h] [bp-Ch]@5

  v2 = this;
  result = (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)operator new(0x18u);
  if ( !result )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  result->_Left = v2->baseclass_0._Myhead;
  result->_Parent = v2->baseclass_0._Myhead;
  result->_Right = v2->baseclass_0._Myhead;
  *(_WORD *)&result->_Color = 0;
  if ( result != (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)-12 )
  {
    v4 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v4->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (007002B0) --------------------------------------------------------
std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > >,bool> *__thiscall std::_Tree<std::_Tmap_traits<unsigned_long_unsigned_char_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_unsigned_char>>_1>>::insert<std::pair<unsigned_long_const_unsigned_char>>(std::_Tree<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > *this, std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > >,bool> *result, std::pair<unsigned long const ,unsigned char> *_Val)
{
  std::_Tree<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > *v3; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *v4; // eax@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *v5; // edx@1
  std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *v6; // ecx@1
  bool v7; // zf@1
  const unsigned int v8; // edi@2
  int v9; // ecx@7
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> > >,bool> *v10; // eax@7

  v3 = this;
  v4 = std::_Tree_val<std::_Tmap_traits<unsigned_long_unsigned_char_std::less<unsigned_long>_std::allocator<std::pair<unsigned_long_const_unsigned_char>>_1>>::_Buynode<std::pair<unsigned_long_const_unsigned_char>>(
         &this->baseclass_0,
         _Val);
  v5 = v3->baseclass_0.baseclass_0._Myhead;
  v6 = v5->_Parent;
  v7 = v6->_Isnil == 0;
  LOBYTE(_Val) = 1;
  if ( v7 )
  {
    v8 = v4->_Myval.baseclass_0.first;
    do
    {
      v5 = v6;
      LOBYTE(_Val) = v8 < v6->_Myval.baseclass_0.first;
      if ( (_BYTE)_Val )
        v6 = v6->_Left;
      else
        v6 = v6->_Right;
    }
    while ( !v6->_Isnil );
  }
  v9 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<NiNode___Char___std::less<NiNode__>_std::allocator<std::pair<NiNode___const_Char__>>_0>>::_Insert(
                     (std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > *)v3,
                     (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> > > *)&_Val,
                     (bool)_Val,
                     (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v5,
                     (std::_Tree_nod<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Node *)v4)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v10 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  result->baseclass_0.second = 1;
  return v10;
}

//----- (00700320) --------------------------------------------------------
void __thiscall CClientGuildAcademy::_CClientGuildAcademy(CClientGuildAcademy *this)
{
  CClientGuildAcademy *v1; // ebx@1
  int v2; // eax@1
  char *v3; // esi@1
  NiTListItem<GUILD_HISTORY *> *v4; // edi@1
  NiTListItem<GUILD_HISTORY *> *v5; // ST08_4@2
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v6; // ST08_4@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > v7; // ST04_4@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > > result; // [sp+0h] [bp-18h]@4
  PgTList<GUILD_HISTORY *> *v9; // [sp+4h] [bp-14h]@1
  CClientGuildAcademy *v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+14h] [bp-4h]@1

  v1 = this;
  v10 = this;
  v2 = 0;
  v11 = 0;
  v3 = (char *)&this->m_kHistoryList;
  v9 = &this->m_kHistoryList;
  this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&PgTList<GUILD_HISTORY__>::_vftable_;
  v4 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  LOBYTE(v11) = 2;
  if ( v4 )
  {
    do
    {
      v5 = v4;
      v4 = v4->m_pkNext;
      (*(void (__thiscall **)(char *, NiTListItem<GUILD_HISTORY *> *))(*(_DWORD *)v3 + 8))(v3, v5);
    }
    while ( v4 );
    v2 = 0;
  }
  *((_DWORD *)v3 + 3) = v2;
  *((_DWORD *)v3 + 1) = v2;
  *((_DWORD *)v3 + 2) = v2;
  *(_DWORD *)v3 = &NiTListBase<NiTPointerAllocator<unsigned_int>_GUILD_HISTORY__>::_vftable_;
  v9 = (PgTList<GUILD_HISTORY *> *)&v1->m_kGuildWarInfo;
  v6 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v7 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > >)v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left;
  LOBYTE(v11) = 4;
  std::_Tree<std::_Tmap_traits<int_WorldMapWin::UserLocationView___std::less<int>_std::allocator<std::pair<int_const_WorldMapWin::UserLocationView__>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<unsigned long,unsigned long,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned long> >,0> > *)&v1->m_kGuildWarInfo,
    &result,
    v7,
    v6);
  operator delete(v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead);
  v11 = -1;
  CGuild::_CGuild(&v1->baseclass_0);
}
// 9C9414: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__GUILD_HISTORY _____vftable_)(void *p, char);
// 9C9434: using guessed type int (__thiscall *PgTList_GUILD_HISTORY _____vftable_)(void *p, char);

//----- (007003E0) --------------------------------------------------------
void __thiscall CClientGuildAcademy::CClientGuildAcademy(CClientGuildAcademy *this)
{
  CClientGuildAcademy *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  CClientGuildAcademy *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  CGuild::CGuild(&this->baseclass_0);
  v1->baseclass_0.vfptr = (CGuildVtbl *)CClientGuildAcademy::_vftable_;
  v6 = 0;
  v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Mysize = 0;
  v2 = operator new(0x18u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead = (std::_Tree_nod<std::_Tmap_traits<unsigned long,unsigned char,std::less<unsigned long>,std::allocator<std::pair<unsigned long const ,unsigned char> >,1> >::_Node *)v2;
  *(_DWORD *)v2 = v2;
  v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Parent = v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Right = v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Color = 1;
  v1->m_kGuildWarInfo.baseclass_0.baseclass_0.baseclass_0._Myhead->_Isnil = 1;
  *(_DWORD *)&v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,GUILD_HISTORY *>Vtbl *)&PgTList<GUILD_HISTORY__>::_vftable_;
  v1->m_bGuildWarStart = 0;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);
// 9C9434: using guessed type int (__thiscall *PgTList_GUILD_HISTORY _____vftable_)(void *p, char);
// 9D19EC: using guessed type int (__stdcall *CClientGuildAcademy___vftable_[20])(int pAck);

//----- (007004C0) --------------------------------------------------------
void *__thiscall GuildAcademyTask::_scalar_deleting_destructor_(GuildAcademyTask *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GuildAcademyTask::_GuildAcademyTask(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (007004F0) --------------------------------------------------------
void __thiscall GuildAcademyMemberVanishTask::SetInfo(GuildAcademyMemberVanishTask *this, Name5 *rkTargetName)
{
  *(_QWORD *)&this->m_kTargetName.n5_name[0] = *(_QWORD *)&rkTargetName->n5_name[0];
  *(_QWORD *)&this->m_kTargetName.n5_name[8] = *(_QWORD *)&rkTargetName->n5_name[8];
  *(_DWORD *)&this->m_kTargetName.n5_name[16] = *(_DWORD *)&rkTargetName->n5_name[16];
}

//----- (00700520) --------------------------------------------------------
void __thiscall GuildAcademyMemberVanishTask::OnStart(GuildAcademyMemberVanishTask *this)
{
  GuildAcademyMemberVanishTask *v1; // esi@1
  int v2; // eax@1
  int v3; // edx@1
  int v4; // ecx@1
  int v5; // eax@1
  int v6; // ecx@1
  char *v7; // eax@1
  char *v8; // eax@1
  MsgBox *v9; // eax@1
  char pcTargetName[21]; // [sp+4h] [bp-1Ch]@1
  unsigned int v11; // [sp+1Ch] [bp-4h]@1
  int v12; // [sp+20h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = this;
  v2 = *(_DWORD *)&this->m_kTargetName.n5_name[0];
  v3 = *(_DWORD *)&this->m_kTargetName.n5_name[8];
  v4 = *(_DWORD *)&this->m_kTargetName.n5_name[4];
  *(_DWORD *)pcTargetName = v2;
  v5 = *(_DWORD *)&v1->m_kTargetName.n5_name[12];
  *(_DWORD *)&pcTargetName[8] = v3;
  *(_DWORD *)&pcTargetName[4] = v4;
  v6 = *(_DWORD *)&v1->m_kTargetName.n5_name[16];
  *(_DWORD *)&pcTargetName[12] = v5;
  *(_DWORD *)&pcTargetName[16] = v6;
  pcTargetName[20] = 0;
  v1->m_eState = 0;
  v7 = TextData::Get(0xC1E4B8E3u);
  v8 = fs(v7);
  v9 = MsgBox::Modeless(MSGBOX_OKCANCEL, v8);
  v1->m_pkMsgBox = v9;
  ((void (__stdcall *)(IDirectMessenger *))v9->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker)(&v1->baseclass_0.baseclass_0.baseclass_8);
}
// A85C00: using guessed type int __security_cookie;

//----- (007005A0) --------------------------------------------------------
void __thiscall GuildAcademyMemberVanishTask::DirectMessage(GuildAcademyMemberVanishTask *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GuildAcademyMemberVanishTask *v4; // eax@1
  int v5; // ecx@2
  IDirectMessenger *v6; // ecx@3
  GuildAcademyMemberVanishTask::State v7; // ecx@7
  unsigned int v8; // edx@7
  PROTO_NC_GUILD_MEMBER_VANISH_REQ kProto; // [sp+0h] [bp-18h]@7
  unsigned int v10; // [sp+14h] [bp-4h]@1
  int v11; // [sp+18h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v4 = this;
  if ( iMsgTag == 27 )
  {
    v5 = *(_DWORD *)&this->m_kTargetName.n5_name[12];
    if ( v5 )
      v6 = (IDirectMessenger *)(v5 + 232);
    else
      v6 = 0;
    if ( pkFrom == v6 )
    {
      if ( *(_DWORD *)pvBody )
      {
        v4->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker = (IDirectMessenger *)2;
      }
      else
      {
        v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_pkTail = (NiTListItem<NiPointer<ITask> > *)1;
        v7 = v4->m_eState;
        *(_DWORD *)&kProto.CharID.n5_name[0] = *(_DWORD *)&v4->baseclass_0.baseclass_0.m_kSerialTaskList.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0];
        v8 = *(_DWORD *)&v4->m_kTargetName.n5_name[0];
        *(_DWORD *)&kProto.CharID.n5_name[4] = v7;
        *(_QWORD *)&kProto.CharID.n5_name[8] = __PAIR__(*(_DWORD *)&v4->m_kTargetName.n5_name[4], v8);
        *(_DWORD *)&kProto.CharID.n5_name[16] = *(_DWORD *)&v4->m_kTargetName.n5_name[8];
        NetMgr::SendNetMsgWorldMgr(&g_kNetMgr, 0x26u, 0x16u, &kProto, 20);
      }
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00700640) --------------------------------------------------------
bool __thiscall GuildAcademyMemberVanishTask::OnProcessNetMsg(GuildAcademyMemberVanishTask *this, int iDepart, int iCommand, int iRevBytes, void *pvData)
{
  GuildAcademyMemberVanishTask *v5; // ebx@1
  bool result; // al@3
  int v7; // edx@4
  int v8; // ecx@4
  int v9; // edx@4
  int v10; // ecx@4
  signed int v11; // eax@4
  char *v12; // edi@8
  char *v13; // edi@12
  char *v14; // edi@16
  char *v15; // edi@20
  char *v16; // edi@24
  char *v17; // edi@28
  char *v18; // edi@32
  char *v19; // edi@36
  char *v20; // edi@40
  char *v21; // eax@44
  char *v22; // edi@44
  char acCharName[21]; // [sp+4h] [bp-1Ch]@4
  unsigned int v24; // [sp+1Ch] [bp-4h]@1
  int v25; // [sp+20h] [bp+0h]@1

  v24 = (unsigned int)&v25 ^ __security_cookie;
  v5 = this;
  if ( iDepart == 38 && iCommand == 23 )
  {
    v7 = *((_DWORD *)pvData + 1);
    *(_DWORD *)acCharName = *(_DWORD *)pvData;
    v8 = *((_DWORD *)pvData + 2);
    *(_DWORD *)&acCharName[4] = v7;
    v9 = *((_DWORD *)pvData + 3);
    *(_DWORD *)&acCharName[8] = v8;
    v10 = *((_DWORD *)pvData + 4);
    v11 = *((_WORD *)pvData + 10);
    *(_DWORD *)&acCharName[12] = v9;
    *(_DWORD *)&acCharName[16] = v10;
    acCharName[20] = 0;
    if ( (_WORD)v11 == 6016 )
    {
      v21 = TextData::Get(0xCCEDD5FFu);
      v22 = fs(v21);
      if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
      {
        ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
          25,
          v22,
          &v5->baseclass_0.baseclass_0.baseclass_8);
        if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
          ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
            25,
            v22,
            &v5->baseclass_0.baseclass_0.baseclass_8);
      }
      v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
        &v5->baseclass_0.baseclass_0.baseclass_8,
        25,
        v22,
        &v5->baseclass_0.baseclass_0.baseclass_8);
    }
    else
    {
      if ( v11 <= 12729 )
      {
        if ( v11 == 12729 )
        {
          v20 = TextData3::Get(0xAED5B21Eu);
          if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
          {
            ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
              25,
              v20,
              &v5->baseclass_0.baseclass_0.baseclass_8);
            if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              ((void (__stdcall *)(signed int, char *, IDirectMessenger *))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                25,
                v20,
                &v5->baseclass_0.baseclass_0.baseclass_8);
          }
          v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
            &v5->baseclass_0.baseclass_0.baseclass_8,
            25,
            v20,
            &v5->baseclass_0.baseclass_0.baseclass_8);
        }
        else
        {
          switch ( v11 )
          {
            case 6040:
              v12 = TextData::Get(0xC34FF660u);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v12,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v12,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v12,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            case 6041:
              v13 = TextData::Get(0x76816B99u);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v13,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v13,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v13,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            case 6042:
              v14 = TextData::Get(0xF0C3E24u);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v14,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v14,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v14,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            case 6043:
              v15 = TextData::Get(0x84B2CBE5u);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v15,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v15,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v15,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            case 6044:
              v16 = TextData::Get(0x889B9BBAu);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v16,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v16,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v16,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            case 6045:
              v17 = TextData::Get(0xD4D93C40u);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v17,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v17,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v17,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            case 6046:
              v18 = TextData::Get(0xD4D93C40u);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v18,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v18,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v18,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            case 6047:
              v19 = TextData::Get(0xCEF8D8D4u);
              if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
              {
                ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->SendDirectMessage)(
                  25,
                  v19,
                  &v5->baseclass_0.baseclass_0.baseclass_8);
                if ( v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker )
                  ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v5->baseclass_0.baseclass_0.baseclass_8.m_pkMsgHooker->vfptr->DirectDispatchToParent)(
                    25,
                    v19,
                    &v5->baseclass_0.baseclass_0.baseclass_8);
              }
              v5->baseclass_0.baseclass_0.baseclass_8.vfptr->DirectDispatchToParent(
                &v5->baseclass_0.baseclass_0.baseclass_8,
                25,
                v19,
                &v5->baseclass_0.baseclass_0.baseclass_8);
              break;
            default:
              break;
          }
        }
      }
    }
    v5->baseclass_0.baseclass_0.m_eTaskState = 2;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00700A10) --------------------------------------------------------
void __thiscall GuildAcademyStorage::GuildAcademyStorage(GuildAcademyStorage *this)
{
  ;
}

//----- (00700A30) --------------------------------------------------------
__int64 __cdecl GuildAcademyStorage::GetMoney()
{
  return GuildAcademyStorage::ms_i64Money;
}
// B67E98: using guessed type __int64 GuildAcademyStorage__ms_i64Money;

//----- (00700A40) --------------------------------------------------------
void __cdecl GuildAcademyStorage::SetMoney(__int64 i64Money)
{
  GuildAcademyStorage::ms_i64Money = i64Money;
}
// B67E98: using guessed type __int64 GuildAcademyStorage__ms_i64Money;

//----- (00700A60) --------------------------------------------------------
void __cdecl GuildAcademyStorage::Clear()
{
  unsigned int v0; // edi@1
  int v1; // esi@2

  v0 = 0;
  do
  {
    v1 = GuildAcademyStorage::ms_aspInv[v0];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      GuildAcademyStorage::ms_aspInv[v0] = 0;
    }
    ++v0;
  }
  while ( v0 < 72 );
  GuildAcademyStorage::ms_i64Money = 0i64;
}
// B67E98: using guessed type __int64 GuildAcademyStorage__ms_i64Money;
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700AC0) --------------------------------------------------------
bool __cdecl GuildAcademyStorage::IsEmpty(unsigned int uiIndex)
{
  bool result; // al@2

  if ( uiIndex < 0x48 )
    result = GuildAcademyStorage::ms_aspInv[uiIndex] == 0;
  else
    result = 0;
  return result;
}
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700AE0) --------------------------------------------------------
Item *__cdecl GuildAcademyStorage::Get(unsigned int uiIndex)
{
  Item *result; // eax@2

  if ( uiIndex < 0x48 )
    result = (Item *)GuildAcademyStorage::ms_aspInv[uiIndex];
  else
    result = 0;
  return result;
}
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700B00) --------------------------------------------------------
void __cdecl GuildAcademyStorage::Add(Item *pkItem, unsigned int uiIndex)
{
  int v2; // esi@2

  if ( uiIndex < 0x48 )
  {
    v2 = GuildAcademyStorage::ms_aspInv[uiIndex];
    if ( (Item *)v2 != pkItem )
    {
      if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1);
      GuildAcademyStorage::ms_aspInv[uiIndex] = (int)pkItem;
      if ( pkItem )
        InterlockedIncrement((volatile LONG *)&pkItem->baseclass_0.m_uiRefCount);
    }
  }
}
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700B60) --------------------------------------------------------
void __cdecl GuildAcademyStorage::Remove(unsigned int uiIndex)
{
  int v1; // esi@2

  if ( uiIndex < 0x48 )
  {
    v1 = GuildAcademyStorage::ms_aspInv[uiIndex];
    if ( v1 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) )
      {
        if ( v1 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1);
      }
      GuildAcademyStorage::ms_aspInv[uiIndex] = 0;
    }
  }
}
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700BB0) --------------------------------------------------------
unsigned int __cdecl GuildAcademyStorage::GetEmpty()
{
  unsigned int result; // eax@1

  result = 0;
  while ( GuildAcademyStorage::ms_aspInv[result] )
  {
    ++result;
    if ( result >= 0x48 )
      return -1;
  }
  return result;
}
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700BD0) --------------------------------------------------------
unsigned int __cdecl GuildAcademyStorage::GetInvIdxLotIsNotMax(Item *pkItem)
{
  unsigned int v1; // edi@1
  int v2; // esi@2
  unsigned int v3; // ST0C_4@4
  unsigned int result; // eax@6

  v1 = 0;
  do
  {
    v2 = GuildAcademyStorage::ms_aspInv[v1];
    if ( v2 )
    {
      if ( *(_WORD *)(v2 + 8) == pkItem->m_kStruct.itemid )
      {
        v3 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 16))(GuildAcademyStorage::ms_aspInv[v1]);
        if ( v3 > (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 12))(v2) )
          return v1;
      }
    }
    ++v1;
  }
  while ( v1 < 0x48 );
  result = 0;
  while ( GuildAcademyStorage::ms_aspInv[result] )
  {
    ++result;
    if ( result >= 0x48 )
      return -1;
  }
  return result;
}
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700C50) --------------------------------------------------------
bool __cdecl GuildAcademyStorage::SetContents(PROTO_NC_GUILD_ACADEMY_REWARD_STORAGE_OPEN_ACK *pkProto)
{
  int v1; // ecx@1
  PROTO_ITEMPACKET_INFORM *v2; // edi@1
  Item *v3; // eax@3
  int v4; // esi@3
  int v5; // edi@7
  int *v6; // ebx@7
  int uiBuffSize; // [sp+4h] [bp-18h]@3
  int v9; // [sp+8h] [bp-14h]@2
  char *pcBuff; // [sp+Ch] [bp-10h]@1
  int v11; // [sp+18h] [bp-4h]@5

  GuildAcademyStorage::Clear();
  GuildAcademyStorage::ms_i64Money = pkProto->cen;
  v1 = pkProto->itemcounter;
  v2 = (PROTO_ITEMPACKET_INFORM *)&pkProto[1];
  pcBuff = (char *)&pkProto[1];
  if ( v1 )
  {
    v9 = v1;
    do
    {
      v3 = Item::Create(v2, (ITEM_INVEN *)&pkProto, (unsigned int *)&uiBuffSize);
      v4 = (int)v3;
      if ( v3 )
        InterlockedIncrement((volatile LONG *)&v3->baseclass_0.m_uiRefCount);
      v11 = 0;
      if ( (unsigned __int16)pkProto & 0xFC00 || ((unsigned __int16)pkProto & 0x3FFu) >= 0x48 )
      {
        if ( v4 )
        {
          if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
          v4 = 0;
        }
      }
      else
      {
        v5 = GuildAcademyStorage::ms_aspInv[(unsigned __int16)pkProto & 0x3FF];
        v6 = &GuildAcademyStorage::ms_aspInv[(unsigned __int16)pkProto & 0x3FF];
        if ( v5 != v4 )
        {
          if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
          *v6 = v4;
          if ( v4 )
            InterlockedIncrement((volatile LONG *)(v4 + 4));
        }
      }
      v2 = (PROTO_ITEMPACKET_INFORM *)&pcBuff[uiBuffSize];
      v11 = -1;
      pcBuff += uiBuffSize;
      if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      --v9;
    }
    while ( v9 );
  }
  return 1;
}
// B67E98: using guessed type __int64 GuildAcademyStorage__ms_i64Money;
// B67EA0: using guessed type int GuildAcademyStorage__ms_aspInv[];

//----- (00700DA0) --------------------------------------------------------
bool __thiscall RaidInfo::SetItemLootingType(RaidInfo *this, char nItemGrade, char nItemLooting)
{
  bool result; // al@3

  if ( (unsigned __int8)nItemLooting >= 4u || (unsigned __int8)nItemGrade >= 4u )
  {
    result = 0;
  }
  else
  {
    this->m_eItemType = (unsigned __int8)nItemGrade;
    this->m_eLootType = (unsigned __int8)nItemLooting;
    result = 1;
  }
  return result;
}

//----- (00700DD0) --------------------------------------------------------
bool __thiscall RaidInfo::IsMeRaidMember(RaidInfo *this)
{
  return this->m_uiTotalMemberOnRaid != 0;
}

//----- (00700DE0) --------------------------------------------------------
void __thiscall RaidInfo::SetBelongType(RaidInfo *this, int iType)
{
  this->m_iBelongType = iType;
}

//----- (00700DF0) --------------------------------------------------------
int __thiscall RaidInfo::GetBelongType(RaidInfo *this)
{
  return this->m_iBelongType;
}

//----- (00700E00) --------------------------------------------------------
Char *__thiscall RaidInfo::GetCharByIndex(RaidInfo *this, unsigned int uiIdx)
{
  unsigned int v2; // edx@1
  unsigned int v3; // edi@1
  char *v4; // esi@3
  signed int v5; // edx@3
  Name5 *v6; // eax@4
  int v7; // ecx@4
  unsigned int v8; // edx@4
  int v9; // ecx@4
  int v10; // esi@4
  Char *result; // eax@5
  _BYTE v12[20]; // ST00_20@6
  Name5 kCharID; // [sp+8h] [bp-14h]@4

  v2 = uiIdx / 5;
  v3 = uiIdx % 5;
  if ( uiIdx / 5 >= 4
    || v3 >= 5
    || (v4 = (char *)&this->m_MemberInfo[v2],
        v5 = (signed int)((unsigned __int64)(2021161081i64
                                           * (unsigned int)((char *)this->m_MemberInfo[v2].baseclass_0._Mylast
                                                          - *(_DWORD *)v4)) >> 32) >> 5,
        v3 >= v5 + ((unsigned int)v5 >> 31)) )
  {
    result = 0;
  }
  else
  {
    v6 = User::GetMainCharID(&g_kUser);
    v7 = *(_DWORD *)&v6->n5_name[4];
    *(_DWORD *)&kCharID.n5_name[0] = *(_DWORD *)&v6->n5_name[0];
    v8 = *(_DWORD *)&v6->n5_name[8];
    *(_DWORD *)&kCharID.n5_name[4] = v7;
    *(_QWORD *)&kCharID.n5_name[8] = __PAIR__(*(_DWORD *)&v6->n5_name[12], v8);
    v9 = *(_DWORD *)v4;
    *(_DWORD *)&kCharID.n5_name[16] = *(_DWORD *)&v6->n5_name[16];
    v10 = v9 + 68 * v3;
    if ( Name5::operator__((Name5 *)(v9 + 68 * v3), &kCharID) )
    {
      result = g_pkMainChar;
    }
    else
    {
      *(_DWORD *)v12 = *(_DWORD *)v10;
      *(_QWORD *)&v12[4] = *(_QWORD *)(v10 + 4);
      *(_QWORD *)&v12[12] = *(_QWORD *)(v10 + 12);
      result = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v12);
    }
  }
  return result;
}

//----- (00700EE0) --------------------------------------------------------
bool __thiscall RaidInfo::MemberInfomUpdate(RaidInfo *this, PROTO_NC_RAID_MEMBERINFORM_CMD *p)
{
  unsigned int v2; // eax@1
  unsigned int v3; // esi@1
  unsigned int v4; // eax@3
  signed int v5; // edx@3
  char *v6; // ecx@3
  bool result; // al@4

  v2 = p->nPartyIndex;
  v3 = p->nSlotIndex;
  if ( v2 > 4
    || v3 > 5
    || (v4 = v2,
        v5 = (signed int)((char *)this->m_MemberInfo[4 * v4 / 0x10].baseclass_0._Mylast
                        - *(_DWORD *)&this->m_MemberInfo[4 * v4 / 0x10].baseclass_0.___u0.baseclass_0.dummy[0]),
        v6 = (char *)&this->m_MemberInfo[4 * v4 / 0x10],
        v5 / 68 <= v3) )
  {
    result = 0;
  }
  else
  {
    *(_DWORD *)(68 * v3 + *(_DWORD *)v6 + 28) = p->hp;
    *(_DWORD *)(68 * v3 + *(_DWORD *)v6 + 32) = p->sp;
    *(_BYTE *)(68 * v3 + *(_DWORD *)v6 + 64) = 1;
    *(_DWORD *)(68 * v3 + *(_DWORD *)v6 + 44) = p->lp;
    result = 1;
  }
  return result;
}

//----- (00700F70) --------------------------------------------------------
void __thiscall RaidInfo::ChangeRaidLooter(RaidInfo *this, Name5 kCharID)
{
  RaidInfo *v2; // esi@1
  Name5 *v3; // eax@1

  v2 = this;
  v3 = User::GetMainCharID(&g_kUser);
  v2->m_bIsMeRaidLooter = *(_QWORD *)&kCharID == *(_QWORD *)&v3->n5_name[0]
                       && *(_QWORD *)&kCharID.n5_name[8] == *(_QWORD *)&v3->n5_name[8]
                       && *(_DWORD *)&kCharID.n5_name[16] == *(_DWORD *)&v3->n5_name[16];
  *(_DWORD *)&v2->m_kRaidLooterID.n5_name[0] = *(_DWORD *)&kCharID;
  *(_DWORD *)&v2->m_kRaidLooterID.n5_name[12] = *(_DWORD *)&kCharID.n5_name[12];
  *(_QWORD *)&v2->m_kRaidLooterID.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
  *(_DWORD *)&v2->m_kRaidLooterID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
}

//----- (00700FD0) --------------------------------------------------------
void __thiscall RaidInfo::ChangeRaidLeader(RaidInfo *this, Name5 kCharID)
{
  RaidInfo *v2; // esi@1
  Name5 *v3; // eax@1

  v2 = this;
  v3 = User::GetMainCharID(&g_kUser);
  v2->m_bIsMeRaidLeader = *(_QWORD *)&kCharID == *(_QWORD *)&v3->n5_name[0]
                       && *(_QWORD *)&kCharID.n5_name[8] == *(_QWORD *)&v3->n5_name[8]
                       && *(_DWORD *)&kCharID.n5_name[16] == *(_DWORD *)&v3->n5_name[16];
  *(_DWORD *)&v2->m_kRaidLeaderID.n5_name[0] = *(_DWORD *)&kCharID;
  *(_DWORD *)&v2->m_kRaidLeaderID.n5_name[12] = *(_DWORD *)&kCharID.n5_name[12];
  *(_QWORD *)&v2->m_kRaidLeaderID.n5_name[4] = *(_QWORD *)&kCharID.n5_name[4];
  *(_DWORD *)&v2->m_kRaidLeaderID.n5_name[16] = *(_DWORD *)&kCharID.n5_name[16];
}

//----- (00701030) --------------------------------------------------------
void __thiscall RaidInfo::ResetMemberInfo(RaidInfo *this, RaidMemberInfo *pkMember)
{
  *(_QWORD *)&pkMember->m_kCharID.n5_name[12] = 0i64;
  *(_QWORD *)&pkMember->m_kCharID.n5_name[4] = 0i64;
  *(_DWORD *)&pkMember->m_kCharID.n5_name[0] = 0;
  strncpy(pkMember->m_kCharID.n5_name, &byte_9D1A40, 0x14u);
  pkMember->m_fX = 0.0;
  pkMember->m_byChrClass = 0;
  pkMember->m_fY = 0.0;
  pkMember->m_iLv = 0;
  pkMember->m_iHP = 0;
  pkMember->m_iSP = 0;
  pkMember->m_iMaxHP = 0;
  pkMember->m_iMaxSP = 0;
  pkMember->m_bShow = 0;
  pkMember->m_iLP = 0;
  pkMember->m_iMaxLP = 0;
}

//----- (00701090) --------------------------------------------------------
RaidMemberInfo *__thiscall RaidInfo::GetRaidMemberInfo(RaidInfo *this, Name5 kCharID)
{
  RaidMemberInfo *result; // eax@2
  signed int v3; // ebx@3
  char *v4; // edi@3
  signed int v5; // edx@4
  bool v6; // zf@4
  int v7; // esi@4
  unsigned int v8; // edx@4
  int v9; // eax@5

  if ( this->m_uiTotalMemberOnRaid )
  {
    v3 = 0;
    v4 = (char *)this->m_MemberInfo;
    while ( 1 )
    {
      v5 = (signed int)((unsigned __int64)(2021161081i64 * (*((_DWORD *)v4 + 1) - *(_DWORD *)v4)) >> 32) >> 5;
      v6 = v5 + ((unsigned int)v5 >> 31) == 0;
      v7 = v5 + ((unsigned int)v5 >> 31);
      v8 = 0;
      if ( !v6 )
        break;
LABEL_10:
      ++v3;
      v4 += 16;
      if ( v3 >= 4 )
        return 0;
    }
    v9 = *(_DWORD *)v4;
    while ( *(_QWORD *)v9 != *(_QWORD *)&kCharID
         || *(_QWORD *)(v9 + 8) != *(_QWORD *)&kCharID.n5_name[8]
         || *(_DWORD *)(v9 + 16) != *(_DWORD *)&kCharID.n5_name[16] )
    {
      ++v8;
      v9 += 68;
      if ( v8 >= v7 )
        goto LABEL_10;
    }
    result = (RaidMemberInfo *)(*(_DWORD *)&this->m_MemberInfo[v3].baseclass_0.___u0.baseclass_0.dummy[0] + 68 * v8);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00701140) --------------------------------------------------------
bool __thiscall RaidInfo::MemberLoginInfo(RaidInfo *this, Name5 kCharID, unsigned int partyIdx, unsigned int slotIdx, bool IsLogin)
{
  char *v5; // esi@1
  bool result; // al@2
  unsigned int v7; // eax@3

  v5 = (char *)&this->m_MemberInfo[partyIdx];
  if ( (signed int)((char *)this->m_MemberInfo[partyIdx].baseclass_0._Mylast - *(_DWORD *)v5) / 68 <= slotIdx
    || (v7 = *(_DWORD *)v5 + 68 * slotIdx, *(_QWORD *)(*(_DWORD *)v5 + 68 * slotIdx) != *(_QWORD *)&kCharID)
    || *(_QWORD *)(v7 + 8) != *(_QWORD *)&kCharID.n5_name[8]
    || *(_DWORD *)(v7 + 16) != *(_DWORD *)&kCharID.n5_name[16] )
  {
    result = 0;
  }
  else
  {
    *(_BYTE *)(v7 + 20) = IsLogin != 0;
    result = 1;
  }
  return result;
}

//----- (007011C0) --------------------------------------------------------
RaidMemberInfo *__thiscall RaidInfo::GetRaidMemberInfoByIndex(RaidInfo *this, unsigned int uiIdx)
{
  unsigned int v2; // edx@1
  unsigned int v3; // edi@1
  char *v4; // esi@3
  signed int v5; // edx@3
  RaidMemberInfo *result; // eax@4

  v2 = uiIdx / 5;
  v3 = uiIdx % 5;
  if ( uiIdx / 5 >= 4
    || v3 >= 5
    || (v4 = (char *)&this->m_MemberInfo[v2],
        v5 = (signed int)((unsigned __int64)(2021161081i64
                                           * (unsigned int)((char *)this->m_MemberInfo[v2].baseclass_0._Mylast
                                                          - *(_DWORD *)v4)) >> 32) >> 5,
        v3 >= v5 + ((unsigned int)v5 >> 31)) )
    result = 0;
  else
    result = (RaidMemberInfo *)(*(_DWORD *)v4 + 68 * v3);
  return result;
}

//----- (00701220) --------------------------------------------------------
void __thiscall RaidInfo::FindIndexByName(RaidInfo *this, char *strName, unsigned int *PatryIdx, unsigned int *slotIndex)
{
  unsigned int v4; // ecx@1
  unsigned int v5; // edx@2
  unsigned int v6; // esi@2
  int v7; // edi@4
  signed int v8; // edx@4
  int v9; // eax@5
  int v10; // edx@6
  int v11; // eax@6
  RaidInfo *v12; // [sp+Ch] [bp-28h]@1
  char acstr[21]; // [sp+18h] [bp-1Ch]@6
  unsigned int v14; // [sp+30h] [bp-4h]@1
  int v15; // [sp+34h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v12 = this;
  v4 = 0;
  while ( 1 )
  {
    v5 = v4 / 5;
    v6 = v4 % 5;
    if ( v4 / 5 < 4 )
    {
      if ( v6 < 5 )
      {
        v7 = (int)&v12->m_MemberInfo[v5];
        v8 = (signed int)((unsigned __int64)(2021161081i64
                                           * (unsigned int)((char *)v12->m_MemberInfo[v5].baseclass_0._Mylast
                                                          - *(_DWORD *)v7)) >> 32) >> 5;
        if ( v6 < v8 + ((unsigned int)v8 >> 31) )
        {
          v9 = *(_DWORD *)v7 + 68 * v6;
          if ( v9 )
          {
            *(_DWORD *)acstr = *(_DWORD *)v9;
            *(_DWORD *)&acstr[4] = *(_DWORD *)(v9 + 4);
            *(_DWORD *)&acstr[8] = *(_DWORD *)(v9 + 8);
            v10 = *(_DWORD *)(v9 + 12);
            v11 = *(_DWORD *)(v9 + 16);
            *(_DWORD *)&acstr[12] = v10;
            *(_DWORD *)&acstr[16] = v11;
            acstr[20] = 0;
            if ( !strcmp(acstr, strName) )
              break;
          }
        }
      }
    }
    ++v4;
    if ( v4 >= 0x14 )
      return;
  }
  *PatryIdx = v4 / 5;
  *slotIndex = v4 % 5;
}
// A85C00: using guessed type int __security_cookie;

//----- (00701340) --------------------------------------------------------
bool __thiscall RaidInfo::IsLeader(RaidInfo *this, Name5 kCharID)
{
  return *(_QWORD *)&this->m_kRaidLeaderID.n5_name[0] == *(_QWORD *)&kCharID
      && *(_QWORD *)&this->m_kRaidLeaderID.n5_name[8] == *(_QWORD *)&kCharID.n5_name[8]
      && *(_DWORD *)&this->m_kRaidLeaderID.n5_name[16] == *(_DWORD *)&kCharID.n5_name[16];
}

//----- (00701380) --------------------------------------------------------
bool __thiscall RaidInfo::IsLooter(RaidInfo *this, Name5 kCharID)
{
  return *(_QWORD *)&this->m_kRaidLooterID.n5_name[0] == *(_QWORD *)&kCharID
      && *(_QWORD *)&this->m_kRaidLooterID.n5_name[8] == *(_QWORD *)&kCharID.n5_name[8]
      && *(_DWORD *)&this->m_kRaidLooterID.n5_name[16] == *(_DWORD *)&kCharID.n5_name[16];
}

//----- (007013C0) --------------------------------------------------------
bool __thiscall RaidInfo::IsSubLeader(RaidInfo *this, Name5 kCharID)
{
  signed int v2; // edx@1
  unsigned int v3; // edi@1
  int v4; // esi@1
  int v5; // eax@2
  bool result; // al@7

  v2 = (signed int)((unsigned __int64)(1717986919i64
                                     * (unsigned int)((char *)this->m_SubLeaderList.baseclass_0._Mylast
                                                    - *(_DWORD *)&this->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
  v3 = 0;
  v4 = v2 + ((unsigned int)v2 >> 31);
  if ( v4 )
  {
    v5 = *(_DWORD *)&this->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0];
    while ( *(_QWORD *)v5 != *(_QWORD *)&kCharID
         || *(_QWORD *)(v5 + 8) != *(_QWORD *)&kCharID.n5_name[8]
         || *(_DWORD *)(v5 + 16) != *(_DWORD *)&kCharID.n5_name[16] )
    {
      ++v3;
      v5 += 20;
      if ( v3 >= v4 )
        goto LABEL_7;
    }
    result = 1;
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}

//----- (00701430) --------------------------------------------------------
void __thiscall RaidInfo::ChangeUserName(RaidInfo *this, Name5 *OldName, Name5 *NewName)
{
  RaidInfo *v3; // esi@1
  _BYTE v4[20]; // ST00_20@1
  RaidMemberInfo *v5; // eax@1

  v3 = this;
  *(_DWORD *)v4 = *(_DWORD *)&OldName->n5_name[0];
  *(_QWORD *)&v4[4] = *(_QWORD *)&OldName->n5_name[4];
  *(_QWORD *)&v4[12] = *(_QWORD *)&OldName->n5_name[12];
  v5 = RaidInfo::GetRaidMemberInfo(this, *(Name5 *)v4);
  if ( v5 )
  {
    *(_QWORD *)&v5->m_kCharID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v5->m_kCharID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v5->m_kCharID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
  }
  if ( *(_DWORD *)&v3->m_kRaidLooterID.n5_name[0] == *(_DWORD *)&OldName->n5_name[0]
    && *(_DWORD *)&v3->m_kRaidLooterID.n5_name[4] == *(_DWORD *)&OldName->n5_name[4]
    && *(_DWORD *)&v3->m_kRaidLooterID.n5_name[8] == *(_DWORD *)&OldName->n5_name[8]
    && *(_DWORD *)&v3->m_kRaidLooterID.n5_name[12] == *(_DWORD *)&OldName->n5_name[12]
    && *(_DWORD *)&v3->m_kRaidLooterID.n5_name[16] == *(_DWORD *)&OldName->n5_name[16] )
  {
    *(_QWORD *)&v3->m_kRaidLooterID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
    *(_QWORD *)&v3->m_kRaidLooterID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
    *(_DWORD *)&v3->m_kRaidLooterID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
  }
  if ( *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[0] == *(_DWORD *)&OldName->n5_name[0]
    && *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[4] == *(_DWORD *)&OldName->n5_name[4]
    && *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[8] == *(_DWORD *)&OldName->n5_name[8]
    && *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[12] == *(_DWORD *)&OldName->n5_name[12] )
  {
    if ( *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[16] == *(_DWORD *)&OldName->n5_name[16] )
    {
      *(_QWORD *)&v3->m_kJoinProposeCharID.n5_name[0] = *(_QWORD *)&NewName->n5_name[0];
      *(_QWORD *)&v3->m_kJoinProposeCharID.n5_name[8] = *(_QWORD *)&NewName->n5_name[8];
      *(_DWORD *)&v3->m_kJoinProposeCharID.n5_name[16] = *(_DWORD *)&NewName->n5_name[16];
    }
  }
}

//----- (00701520) --------------------------------------------------------
bool __thiscall RaidInfo::AddMember(RaidInfo *this, PROTO_NC_RAID_MEMBER_JOIN_BROAD_CMD *p)
{
  int v3; // eax@3
  char v4; // dl@3
  unsigned __int16 v5; // di@5
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v6; // edi@8
  unsigned int v7; // eax@9
  unsigned int v8; // ecx@9
  unsigned int v9; // edx@9
  Name5 *v10; // eax@9
  int v11; // esi@14
  RaidMemberInfo *v12; // ebx@14
  Name5 *v13; // ebx@15
  Name5 *v14; // eax@15
  RaidInfo *thisa; // [sp+8h] [bp-4Ch]@1
  RaidMemberInfo kMemberInfo; // [sp+Ch] [bp-48h]@9
  unsigned int v17; // [sp+50h] [bp-4h]@1
  int v18; // [sp+54h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  thisa = this;
  if ( !p || (LOBYTE(v3) = p->nPartyIndex, v4 = p->nSlotIndex, (unsigned __int8)v3 > 5u) || (unsigned __int8)v4 > 5u )
    return 0;
  v3 = (unsigned __int8)v3;
  v5 = this->m_PartyInfo[(unsigned __int8)v3].nPartyNo;
  if ( v5 != -1 )
  {
    if ( v5 == p->nPartyNo )
      goto LABEL_8;
    return 0;
  }
  if ( v4 )
    return 0;
  this->m_PartyInfo[v3].nPartyNo = p->nPartyNo;
LABEL_8:
  this->m_PartyInfo[v3].nPartyIndex = p->nPartyIndex;
  v6 = &this->m_MemberInfo[v3];
  if ( (signed int)((char *)this->m_MemberInfo[v3].baseclass_0._Mylast
                  - *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0])
     / 68 > (unsigned int)(unsigned __int8)v4 )
  {
    v11 = 68 * (unsigned __int8)v4;
    v12 = (RaidMemberInfo *)(68 * (unsigned __int8)v4 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0]);
    if ( Name5::operator__(&v12->m_kCharID, &p->sCharID) )
    {
      RaidInfo::ResetMemberInfo(thisa, v12);
      Name5::operator_((Name5 *)(v11 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0]), &p->sCharID);
      v13 = (Name5 *)(v11 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0]);
      v14 = User::GetMainCharID(&g_kUser);
      if ( Name5::operator__(v13, v14) )
        *(_BYTE *)(v11 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] + 64) = 1;
      *(_BYTE *)(v11 + *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] + 20) = 1;
    }
  }
  else
  {
    *(_QWORD *)&kMemberInfo.m_kCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kMemberInfo.m_kCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kMemberInfo.m_kCharID.n5_name[0] = 0;
    RaidInfo::ResetMemberInfo(this, &kMemberInfo);
    v7 = *(_DWORD *)&p->sCharID.n5_name[4];
    v8 = *(_DWORD *)&p->sCharID.n5_name[8];
    *(_DWORD *)&kMemberInfo.m_kCharID.n5_name[0] = *(_DWORD *)&p->sCharID.n5_name[0];
    v9 = *(_DWORD *)&p->sCharID.n5_name[12];
    *(_QWORD *)&kMemberInfo.m_kCharID.n5_name[4] = __PAIR__(v8, v7);
    *(_QWORD *)&kMemberInfo.m_kCharID.n5_name[12] = __PAIR__(*(_DWORD *)&p->sCharID.n5_name[16], v9);
    v10 = User::GetMainCharID(&g_kUser);
    if ( Name5::operator__(&kMemberInfo.m_kCharID, v10) )
      kMemberInfo.m_bShow = 1;
    kMemberInfo.m_ucStatus = 1;
    std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::push_back(v6, &kMemberInfo);
  }
  ++thisa->m_uiTotalMemberOnRaid;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (007016C0) --------------------------------------------------------
bool __thiscall RaidInfo::Replace(RaidInfo *this, PROTO_NC_RAID_SLOT_MOVE_BROAD_CMD *p)
{
  unsigned int v2; // ebx@1
  unsigned int v3; // esi@1
  unsigned int v4; // edi@1
  RaidInfo *v5; // edx@1
  unsigned int v6; // ecx@1
  int v7; // edi@6
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v8; // ebx@6
  signed int v9; // edx@6
  int v10; // edi@6
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v11; // eax@8
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v12; // ecx@11
  int v13; // ebx@12
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v14; // edi@14
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v15; // eax@17
  RaidMemberInfo *v16; // ecx@17
  int v17; // ecx@17
  int v18; // ebx@17
  int v19; // eax@17
  RaidMemberInfo *v20; // eax@19
  RaidMemberInfo *v21; // edi@21
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v22; // ebx@25
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v23; // eax@25
  int v24; // edi@31
  int v25; // edx@31
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v26; // eax@31
  char *v27; // eax@35
  RaidInfo *v28; // esi@35
  RaidMemberInfo *v30; // [sp-4h] [bp-B0h]@11
  RaidMemberInfo PostSlot; // [sp+Ch] [bp-A0h]@12
  RaidInfo *v32; // [sp+50h] [bp-5Ch]@1
  unsigned int uiPostSlotIdx; // [sp+54h] [bp-58h]@1
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *thisa; // [sp+58h] [bp-54h]@6
  unsigned int slotIdx; // [sp+5Ch] [bp-50h]@1
  unsigned int ToGroupNum; // [sp+60h] [bp-4Ch]@6
  RaidMemberInfo kMember; // [sp+64h] [bp-48h]@7
  unsigned int v38; // [sp+A8h] [bp-4h]@1
  int v39; // [sp+ACh] [bp+0h]@1

  v38 = (unsigned int)&v39 ^ __security_cookie;
  v2 = p->PostPosition.nPartyIndex;
  v3 = p->PrePosition.nSlotIndex;
  v4 = p->PrePosition.nPartyIndex;
  v5 = this;
  v6 = p->PostPosition.nSlotIndex;
  v32 = v5;
  slotIdx = v2;
  uiPostSlotIdx = v6;
  if ( v4 > 4 || v3 > 5 || v2 > 4 || v6 > 5 )
    return 0;
  if ( v4 != v2 )
  {
    v15 = &v5->m_MemberInfo[v4];
    v16 = v5->m_MemberInfo[v4].baseclass_0._Mylast;
    thisa = v15;
    v17 = (signed int)((char *)v16 - *(_DWORD *)&v15->baseclass_0.___u0.baseclass_0.dummy[0]) / 68;
    v18 = (int)&v32->m_MemberInfo[v2];
    v19 = (*(_DWORD *)(v18 + 4) - *(_DWORD *)v18) / 68;
    if ( v3 >= v17 )
    {
      v3 = uiPostSlotIdx;
      if ( uiPostSlotIdx >= v19 )
        return 0;
      ToGroupNum = v4;
      v4 = slotIdx;
    }
    else
    {
      if ( uiPostSlotIdx < v19 )
      {
        *(_QWORD *)&kMember.m_kCharID.n5_name[12] = 0i64;
        *(_QWORD *)&kMember.m_kCharID.n5_name[4] = 0i64;
        *(_DWORD *)&kMember.m_kCharID.n5_name[0] = 0;
        v20 = thisa->baseclass_0._Mylast;
        if ( *(RaidMemberInfo **)&thisa->baseclass_0.___u0.baseclass_0.dummy[0] == v20 )
          goto LABEL_39;
        if ( *(_DWORD *)v18 != *(_DWORD *)(v18 + 4) )
        {
          v21 = (RaidMemberInfo *)(*(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0] + 68 * v3);
          RaidMemberInfo::operator_(
            &kMember,
            (RaidMemberInfo *)(*(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0] + 68 * v3));
          RaidMemberInfo::operator_(v21, (RaidMemberInfo *)(68 * uiPostSlotIdx + *(_DWORD *)v18));
          RaidMemberInfo::operator_((RaidMemberInfo *)(68 * uiPostSlotIdx + *(_DWORD *)v18), &kMember);
          goto LABEL_35;
        }
        if ( *(RaidMemberInfo **)&thisa->baseclass_0.___u0.baseclass_0.dummy[0] != v20 )
        {
          ToGroupNum = slotIdx;
        }
        else
        {
LABEL_39:
          v3 = uiPostSlotIdx;
          ToGroupNum = v4;
          v4 = slotIdx;
        }
        v22 = &v32->m_MemberInfo[v4];
        RaidMemberInfo::operator_(
          &kMember,
          (RaidMemberInfo *)(68 * v3 + *(_DWORD *)&v22->baseclass_0.___u0.baseclass_0.dummy[0]));
        v23 = *(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0];
        if ( v3 )
          *(_DWORD *)&v23 += 68 * v3;
        std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::erase(
          v22,
          (std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&slotIdx,
          v23);
        v30 = &kMember;
        v12 = &v32->m_MemberInfo[ToGroupNum];
LABEL_34:
        std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::push_back(v12, v30);
        goto LABEL_35;
      }
      ToGroupNum = slotIdx;
    }
    v24 = v4;
    v25 = *(_DWORD *)&v32->m_MemberInfo[4 * v24 / 0x10u].baseclass_0.___u0.baseclass_0.dummy[0];
    *(_QWORD *)&kMember.m_kCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kMember.m_kCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kMember.m_kCharID.n5_name[0] = 0;
    RaidMemberInfo::operator_(&kMember, (RaidMemberInfo *)(68 * v3 + v25));
    v26 = *(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v3 )
      *(_DWORD *)&v26 += 68 * v3;
    std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::erase(
      &v32->m_MemberInfo[4 * v24 / 0x10u],
      (std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&slotIdx,
      v26);
    v30 = &kMember;
    v12 = &v32->m_MemberInfo[ToGroupNum];
    goto LABEL_34;
  }
  v7 = (int)((char *)v5 + 16 * v4);
  v8 = (std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *)(v7 + 132);
  v9 = (signed int)((unsigned __int64)(2021161081i64 * (*(_DWORD *)(v7 + 136) - *(_DWORD *)(v7 + 132))) >> 32) >> 5;
  ToGroupNum = v7;
  v10 = v9 + ((unsigned int)v9 >> 31);
  thisa = v8;
  if ( v3 < v10 )
  {
    *(_QWORD *)&kMember.m_kCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kMember.m_kCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kMember.m_kCharID.n5_name[0] = 0;
    slotIdx = 68 * v3 + *(_DWORD *)&v8->baseclass_0.___u0.baseclass_0.dummy[0];
    RaidMemberInfo::operator_(&kMember, (RaidMemberInfo *)slotIdx);
    if ( uiPostSlotIdx >= v10 )
    {
      v11 = *(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v3 )
        *(_DWORD *)&v11 += 68 * v3;
      if ( v11 == *(_DWORD *)(ToGroupNum + 136) )
        goto LABEL_35;
      std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::erase(
        thisa,
        (std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&ToGroupNum,
        v11);
      v30 = &kMember;
      v12 = thisa;
      goto LABEL_34;
    }
    v13 = 68 * uiPostSlotIdx;
    memcpy(
      &PostSlot,
      (const void *)(68 * uiPostSlotIdx + *(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0]),
      sizeof(PostSlot));
    RaidMemberInfo::operator_((RaidMemberInfo *)slotIdx, &PostSlot);
    RaidMemberInfo::operator_(
      (RaidMemberInfo *)(v13 + *(_DWORD *)&thisa->baseclass_0.___u0.baseclass_0.dummy[0]),
      &kMember);
LABEL_35:
    v27 = (char *)((int (*)(void))g_pkMainChar->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)();
    v28 = v32;
    RaidInfo::FindIndexByName(v32, v27, &ToGroupNum, &slotIdx);
    v28->m_uiMePartyIdx = ToGroupNum;
    return 1;
  }
  if ( v6 < v10 )
  {
    v14 = *(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&v8->baseclass_0.___u0.baseclass_0.dummy[0];
    *(_QWORD *)&kMember.m_kCharID.n5_name[12] = 0i64;
    *(_QWORD *)&kMember.m_kCharID.n5_name[4] = 0i64;
    *(_DWORD *)&kMember.m_kCharID.n5_name[0] = 0;
    RaidMemberInfo::operator_(&kMember, (RaidMemberInfo *)(*(_DWORD *)&v14 + 68 * v3));
    if ( uiPostSlotIdx )
      *(_DWORD *)&v14 += 68 * uiPostSlotIdx;
    std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::erase(
      v8,
      (std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&ToGroupNum,
      v14);
    v30 = &kMember;
    v12 = v8;
    goto LABEL_34;
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00701A60) --------------------------------------------------------
bool __thiscall RaidInfo::ConvertPartyToRaid(RaidInfo *this, PROTO_NC_RAID_MAKE_BROAD_CMD *p)
{
  RaidInfo *v2; // esi@1
  signed int v3; // eax@1
  char *v4; // ecx@1
  char *v5; // edx@1
  __int16 v6; // bx@2
  unsigned int v7; // ebx@3
  _BYTE v9[20]; // ST00_20@5
  char *v10; // edi@6
  int v11; // ebx@6
  _BYTE v12[20]; // ST00_20@8
  PartyMemberInfo *v13; // eax@8
  Name5 *v14; // eax@11
  Name5 *v15; // eax@17
  Name5 *v16; // eax@22
  int v17; // ecx@22
  unsigned int v18; // edx@22
  int v19; // eax@22
  unsigned int v20; // ecx@22
  bool v21; // cf@22
  signed int v22; // edx@25
  int v23; // esi@25
  const void *v24; // esi@27
  void *v25; // eax@27
  _BYTE v26[20]; // ST00_20@29
  PartyMemberInfo *v27; // eax@29
  char v28; // cl@30
  char v29; // dl@30
  double v30; // st7@30
  int v31; // ecx@30
  int v32; // edx@30
  int v33; // ecx@30
  int v34; // edx@30
  int v35; // ecx@30
  unsigned int v36; // edx@30
  int v37; // edx@30
  int v38; // eax@30
  unsigned int i; // [sp+Ch] [bp-58h]@5
  RaidInfo *v40; // [sp+10h] [bp-54h]@1
  int v41; // [sp+14h] [bp-50h]@6
  char *v42; // [sp+18h] [bp-4Ch]@6
  RaidMemberInfo kRaidMemberInfo; // [sp+1Ch] [bp-48h]@5
  unsigned int v44; // [sp+60h] [bp-4h]@1
  int v45; // [sp+64h] [bp+0h]@1

  v44 = (unsigned int)&v45 ^ __security_cookie;
  v2 = this;
  v40 = this;
  v3 = 0;
  v4 = &this->m_PartyInfo[0].nPartyIndex;
  v5 = (char *)p->nRaidPartyNo;
  do
  {
    v6 = *(_WORD *)v5;
    *v4 = v3;
    *((_WORD *)v4 - 1) = v6;
    ++v3;
    v5 += 2;
    v4 += 4;
  }
  while ( v3 < 4 );
  v7 = 0;
  if ( !g_kParty.m_uiTotalMember )
    return 0;
  *(_DWORD *)v9 = *(_DWORD *)&v2->m_kRaidLeaderID.n5_name[0];
  *(_QWORD *)&v9[4] = *(_QWORD *)&v2->m_kRaidLeaderID.n5_name[4];
  *(_QWORD *)&v9[12] = *(_QWORD *)&v2->m_kRaidLeaderID.n5_name[12];
  Party::GetMemberInfo(&g_kParty, *(Name5 *)v9);
  *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[12] = 0i64;
  *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[4] = 0i64;
  *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[0] = 0;
  i = 0;
  if ( g_kParty.m_uiTotalMember == -1 )
    goto LABEL_40;
  v10 = &p->sFirstPartyCharID[0].n5_name[8];
  v11 = (int)v2->m_MemberInfo;
  v41 = 0;
  v42 = &p->sFirstPartyCharID[0].n5_name[8];
  do
  {
    if ( (*(_DWORD *)(v11 + 4) - *(_DWORD *)v11) / 68 <= i )
    {
      v15 = User::GetMainCharID(&g_kUser);
      if ( *((_DWORD *)v10 - 2) != *(_DWORD *)&v15->n5_name[0]
        || *((_DWORD *)v10 - 1) != *(_DWORD *)&v15->n5_name[4]
        || *(_DWORD *)v10 != *(_DWORD *)&v15->n5_name[8]
        || *((_DWORD *)v10 + 1) != *(_DWORD *)&v15->n5_name[12]
        || *((_DWORD *)v10 + 2) != *(_DWORD *)&v15->n5_name[16] )
      {
        *(_DWORD *)v26 = *((_DWORD *)v10 - 2);
        *(_DWORD *)&v26[4] = *((_DWORD *)v10 - 1);
        *(_DWORD *)&v26[8] = *(_DWORD *)v10;
        *(_QWORD *)&v26[12] = *(_QWORD *)(v10 + 4);
        v27 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v26);
        if ( !v27 )
          return 0;
        v28 = v27->m_byChrClass;
        v29 = v27->m_ucStatus;
        kRaidMemberInfo.m_fX = v27->m_fX;
        v30 = v27->m_fY;
        kRaidMemberInfo.m_byChrClass = v28;
        v31 = v27->m_iLv;
        kRaidMemberInfo.m_fY = v30;
        kRaidMemberInfo.m_ucStatus = v29;
        v32 = v27->m_iHP;
        kRaidMemberInfo.m_iLv = v31;
        v33 = v27->m_iSP;
        kRaidMemberInfo.m_iHP = v32;
        v34 = v27->m_iMaxHP;
        kRaidMemberInfo.m_iSP = v33;
        v35 = v27->m_iMaxSP;
        kRaidMemberInfo.m_iMaxHP = v34;
        v36 = *(_DWORD *)&v27->m_kCharID.n5_name[0];
        kRaidMemberInfo.m_iMaxSP = v35;
        *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[0] = __PAIR__(*(_DWORD *)&v27->m_kCharID.n5_name[4], v36);
        *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[8] = *(_QWORD *)&v27->m_kCharID.n5_name[8];
        LOBYTE(v35) = v27->m_bShow;
        *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[16] = *(_DWORD *)&v27->m_kCharID.n5_name[16];
        v37 = v27->m_iLP;
        v38 = v27->m_iMaxLP;
        kRaidMemberInfo.m_bShow = v35;
        v20 = *(_DWORD *)(v11 + 4);
        kRaidMemberInfo.m_iLP = v37;
        kRaidMemberInfo.m_iMaxLP = v38;
        v21 = (unsigned int)&kRaidMemberInfo < v20;
      }
      else
      {
        v16 = User::GetMainCharID(&g_kUser);
        v17 = *(_DWORD *)&v16->n5_name[4];
        *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[0] = *(_DWORD *)&v16->n5_name[0];
        v18 = *(_DWORD *)&v16->n5_name[8];
        *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[4] = v17;
        *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[8] = __PAIR__(*(_DWORD *)&v16->n5_name[12], v18);
        *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[16] = *(_DWORD *)&v16->n5_name[16];
        kRaidMemberInfo.m_byChrClass = User::GetMainCharClass(&g_kUser);
        kRaidMemberInfo.m_iLv = User::Lv(&g_kUser);
        kRaidMemberInfo.m_iHP = User::HP(&g_kUser);
        kRaidMemberInfo.m_iSP = User::SP(&g_kUser);
        kRaidMemberInfo.m_iMaxHP = User::MaxHP(&g_kUser);
        kRaidMemberInfo.m_iMaxSP = User::MaxSP(&g_kUser);
        kRaidMemberInfo.m_bShow = 1;
        kRaidMemberInfo.m_ucStatus = 1;
        kRaidMemberInfo.m_iLP = User::LP(&g_kUser);
        v19 = User::MaxLP(&g_kUser);
        v20 = *(_DWORD *)(v11 + 4);
        kRaidMemberInfo.m_iMaxLP = v19;
        v21 = (unsigned int)&kRaidMemberInfo < v20;
      }
      if ( v21 && *(_DWORD *)v11 <= (unsigned int)&kRaidMemberInfo )
      {
        v22 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)((char *)&kRaidMemberInfo - *(_DWORD *)v11)) >> 32) >> 5;
        v23 = v22 + ((unsigned int)v22 >> 31);
        if ( v20 == *(_DWORD *)(v11 + 8) )
          std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::_Reserve(
            (std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *)v11,
            1u);
        v24 = (const void *)(*(_DWORD *)v11 + 68 * v23);
        v25 = *(void **)(v11 + 4);
        if ( !v25 )
          goto LABEL_36;
      }
      else
      {
        if ( v20 == *(_DWORD *)(v11 + 8) )
          std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::_Reserve(
            (std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *)v11,
            1u);
        v25 = *(void **)(v11 + 4);
        if ( !v25 )
          goto LABEL_37;
        v24 = &kRaidMemberInfo;
      }
      memcpy(v25, v24, 0x44u);
      v10 = v42;
LABEL_36:
      v2 = v40;
LABEL_37:
      *(_DWORD *)(v11 + 4) += 68;
      ++v2->m_uiTotalMemberOnRaid;
      goto LABEL_38;
    }
    *(_DWORD *)v12 = *((_DWORD *)v10 - 2);
    *(_DWORD *)&v12[4] = *((_DWORD *)v10 - 1);
    *(_DWORD *)&v12[8] = *(_DWORD *)v10;
    *(_QWORD *)&v12[12] = *(_QWORD *)(v10 + 4);
    v13 = Party::GetMemberInfo(&g_kParty, *(Name5 *)v12);
    if ( v13 )
    {
      *(_BYTE *)(*(_DWORD *)v11 + v41 + 20) = v13->m_ucStatus;
      if ( !*(_BYTE *)(v41 + *(_DWORD *)v11 + 20) )
        *(_BYTE *)(v41 + *(_DWORD *)v11 + 64) = 0;
    }
    else
    {
      v14 = User::GetMainCharID(&g_kUser);
      if ( *((_DWORD *)v10 - 2) == *(_DWORD *)&v14->n5_name[0]
        && *((_DWORD *)v10 - 1) == *(_DWORD *)&v14->n5_name[4]
        && *(_DWORD *)v10 == *(_DWORD *)&v14->n5_name[8]
        && *((_DWORD *)v10 + 1) == *(_DWORD *)&v14->n5_name[12]
        && *((_DWORD *)v10 + 2) == *(_DWORD *)&v14->n5_name[16] )
        *(_BYTE *)(*(_DWORD *)v11 + v41 + 20) = 1;
    }
LABEL_38:
    v41 += 68;
    v10 += 20;
    ++i;
    v42 = v10;
  }
  while ( i < g_kParty.m_uiTotalMember + 1 );
  v7 = 0;
LABEL_40:
  v2->m_uiMePartyIdx = v7;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00701E20) --------------------------------------------------------
bool __thiscall RaidInfo::MemberInfoDetailInfo(RaidInfo *this, PROTO_NC_RAID_MEMBERCLASS_CMD *p)
{
  RaidInfo *v2; // edi@1
  PROTO_NC_RAID_MEMBERCLASS_CMD *v3; // esi@2
  unsigned int v4; // ecx@3
  int v5; // edx@5
  int v6; // eax@5
  int v7; // edx@5
  int v8; // eax@5
  int v9; // ecx@6
  signed int v10; // edx@6
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v11; // ebx@6
  double v12; // st7@7
  unsigned int v13; // ecx@7
  int v14; // eax@7
  int v15; // eax@7
  int v16; // edx@7
  int v17; // ecx@7
  int v18; // eax@7
  int v19; // ecx@7
  int v20; // edx@7
  int v21; // eax@7
  int v22; // edx@9
  double v23; // st7@9
  Name5 *v24; // eax@11
  int v25; // edx@15
  int v26; // eax@15
  int v27; // eax@17
  int v28; // edi@17
  int v29; // eax@17
  Name5 *v30; // ST20_4@17
  Name5 *v31; // eax@17
  Name5 *v32; // eax@20
  bool result; // al@27
  RaidInfo *v34; // [sp+10h] [bp-70h]@1
  unsigned int uiIdx; // [sp+14h] [bp-6Ch]@3
  signed int i; // [sp+18h] [bp-68h]@1
  unsigned int uiSlot; // [sp+1Ch] [bp-64h]@3
  RaidMemberInfo kRaidMemberInfo; // [sp+20h] [bp-60h]@7
  char acstr[21]; // [sp+64h] [bp-1Ch]@5
  unsigned int v40; // [sp+7Ch] [bp-4h]@1
  int v41; // [sp+80h] [bp+0h]@1

  v40 = (unsigned int)&v41 ^ __security_cookie;
  v2 = this;
  v34 = this;
  i = 0;
  if ( p->nNum )
  {
    v3 = p + 13;
    while ( 1 )
    {
      v4 = v3[-10].nNum;
      uiIdx = v4;
      uiSlot = v3[-9].nNum;
      if ( v4 > 4 )
        break;
      if ( (unsigned int)v3[-9].nNum > 5 )
        break;
      v2->m_PartyInfo[v4].nPartyNo = *(_WORD *)&v3[-12].nNum;
      v2->m_PartyInfo[v4].nPartyIndex = v4;
      v5 = *(_DWORD *)&v3[-4].nNum;
      *(_DWORD *)acstr = *(_DWORD *)&v3[-8].nNum;
      v6 = *(_DWORD *)&v3->nNum;
      *(_DWORD *)&acstr[4] = v5;
      v7 = *(_DWORD *)&v3[4].nNum;
      *(_DWORD *)&acstr[8] = v6;
      v8 = *(_DWORD *)&v3[8].nNum;
      *(_DWORD *)&acstr[12] = v7;
      *(_DWORD *)&acstr[16] = v8;
      acstr[20] = 0;
      if ( strcmp(acstr, (const char *)&unk_9D1A3C) )
      {
        v9 = v4;
        v10 = (signed int)((char *)v2->m_MemberInfo[4 * v9 / 0x10u].baseclass_0._Mylast
                         - *(_DWORD *)&v2->m_MemberInfo[4 * v9 / 0x10u].baseclass_0.___u0.baseclass_0.dummy[0]);
        v11 = &v2->m_MemberInfo[4 * v9 / 0x10u];
        if ( v10 / 68 == uiSlot )
        {
          *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[12] = 0i64;
          *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[4] = 0i64;
          *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[0] = 0;
          RaidInfo::ResetMemberInfo(v2, &kRaidMemberInfo);
          v12 = (double)*(signed int *)&v3[38].nNum;
          v13 = *(_DWORD *)&v3->nNum;
          v14 = *(_DWORD *)&v3[-4].nNum;
          *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[0] = *(_DWORD *)&v3[-8].nNum;
          *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[8] = __PAIR__(*(_DWORD *)&v3[4].nNum, v13);
          LOBYTE(v13) = v3[12].nNum;
          *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[4] = v14;
          v15 = *(_DWORD *)&v3[8].nNum;
          v16 = v3[13].nNum;
          kRaidMemberInfo.m_byChrClass = v13;
          v17 = *(_DWORD *)&v3[18].nNum;
          *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[16] = v15;
          v18 = *(_DWORD *)&v3[14].nNum;
          kRaidMemberInfo.m_iMaxSP = v17;
          v19 = *(_DWORD *)&v3[38].nNum;
          kRaidMemberInfo.m_iLv = v16;
          v20 = *(_DWORD *)&v3[26].nNum;
          kRaidMemberInfo.m_iMaxHP = v18;
          v21 = *(_DWORD *)&v3[30].nNum;
          kRaidMemberInfo.m_iHP = v20;
          kRaidMemberInfo.m_iSP = v21;
          if ( v19 < 0 )
            v12 = v12 + 4294967300.0;
          v22 = *(_DWORD *)&v3[42].nNum;
          kRaidMemberInfo.m_fX = v12;
          v23 = (double)*(signed int *)&v3[42].nNum;
          if ( v22 < 0 )
            v23 = v23 + 4294967300.0;
          kRaidMemberInfo.m_fY = v23;
          v24 = User::GetMainCharID(&g_kUser);
          if ( *(_QWORD *)&kRaidMemberInfo == *(_QWORD *)&v24->n5_name[0]
            && *(_QWORD *)&kRaidMemberInfo.m_kCharID.n5_name[8] == *(_QWORD *)&v24->n5_name[8]
            && *(_DWORD *)&kRaidMemberInfo.m_kCharID.n5_name[16] == *(_DWORD *)&v24->n5_name[16] )
            kRaidMemberInfo.m_bShow = 1;
          v25 = *(_DWORD *)&v3[34].nNum;
          v26 = *(_DWORD *)&v3[22].nNum;
          kRaidMemberInfo.m_ucStatus = 1;
          kRaidMemberInfo.m_iLP = v25;
          kRaidMemberInfo.m_iMaxLP = v26;
          std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::push_back(v11, &kRaidMemberInfo);
          ++v2->m_uiTotalMemberOnRaid;
        }
        else
        {
          if ( v10 / 68 > uiSlot )
          {
            v27 = *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0];
            v28 = 68 * uiSlot;
            *(_DWORD *)(*(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 68 * uiSlot) = *(_DWORD *)&v3[-8].nNum;
            *(_DWORD *)(v27 + 68 * uiSlot + 4) = *(_DWORD *)&v3[-4].nNum;
            *(_DWORD *)(v27 + 68 * uiSlot + 8) = *(_DWORD *)&v3->nNum;
            v29 = 68 * uiSlot + v27;
            *(_DWORD *)(v29 + 12) = *(_DWORD *)&v3[4].nNum;
            *(_DWORD *)(v29 + 16) = *(_DWORD *)&v3[8].nNum;
            *(_BYTE *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 52) = v3[12].nNum;
            *(_DWORD *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 24) = v3[13].nNum;
            *(_DWORD *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 36) = *(_DWORD *)&v3[14].nNum;
            *(_DWORD *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 40) = *(_DWORD *)&v3[18].nNum;
            *(_DWORD *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 28) = *(_DWORD *)&v3[26].nNum;
            *(_DWORD *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 32) = *(_DWORD *)&v3[30].nNum;
            *(float *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 56) = (double)*(unsigned int *)&v3[38].nNum;
            *(float *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 60) = (double)*(unsigned int *)&v3[42].nNum;
            v30 = (Name5 *)(68 * uiSlot + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0]);
            v31 = User::GetMainCharID(&g_kUser);
            if ( Name5::operator__(v30, v31) )
              *(_BYTE *)(v28 + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 64) = 0;
            *(_DWORD *)(v28 + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 44) = *(_DWORD *)&v3[34].nNum;
            *(_DWORD *)(v28 + *(_DWORD *)&v11->baseclass_0.___u0.baseclass_0.dummy[0] + 48) = *(_DWORD *)&v3[22].nNum;
            v2 = v34;
          }
        }
        v32 = User::GetMainCharID(&g_kUser);
        if ( *(_DWORD *)&v3[-8].nNum == *(_DWORD *)&v32->n5_name[0]
          && *(_DWORD *)&v3[-4].nNum == *(_DWORD *)&v32->n5_name[4]
          && *(_DWORD *)&v3->nNum == *(_DWORD *)&v32->n5_name[8]
          && *(_DWORD *)&v3[4].nNum == *(_DWORD *)&v32->n5_name[12] )
        {
          if ( *(_DWORD *)&v3[8].nNum == *(_DWORD *)&v32->n5_name[16] )
            v2->m_uiMePartyIdx = uiIdx;
        }
      }
      v3 += 58;
      ++i;
      if ( i >= p->nNum )
        goto LABEL_27;
    }
    result = 0;
  }
  else
  {
LABEL_27:
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00702130) --------------------------------------------------------
void __thiscall RaidInfo::SetRaidSubLeader(RaidInfo *this, Name5 kCharID, bool bUp)
{
  RaidInfo *v3; // edi@1
  std::vector<Name5,std::allocator<Name5> > *v4; // ecx@2
  signed int v5; // edx@2
  int v6; // esi@2
  unsigned int v7; // edx@3
  int v8; // eax@4
  Name5 *v9; // eax@10
  int v10; // eax@14
  RaidInfo *v11; // esi@20
  Name5 *v12; // eax@20
  RaidInfo *__formal; // [sp+Ch] [bp-4h]@1

  v3 = this;
  __formal = this;
  if ( bUp )
  {
    v4 = &this->m_SubLeaderList;
    v5 = (signed int)((unsigned __int64)(1717986919i64
                                       * (unsigned int)((char *)v3->m_SubLeaderList.baseclass_0._Mylast
                                                      - *(_DWORD *)&v3->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v6 = v5 + ((unsigned int)v5 >> 31);
    if ( v6 != 4 )
    {
      v7 = 0;
      if ( v6 )
      {
        v8 = *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
        while ( *(_QWORD *)v8 != *(_QWORD *)&kCharID
             || *(_QWORD *)(v8 + 8) != *(_QWORD *)&kCharID.n5_name[8]
             || *(_DWORD *)(v8 + 16) != *(_DWORD *)&kCharID.n5_name[16] )
        {
          ++v7;
          v8 += 20;
          if ( v7 >= v6 )
          {
            v3 = __formal;
            goto LABEL_10;
          }
        }
      }
      else
      {
LABEL_10:
        std::vector<Name5_std::allocator<Name5>>::push_back(v4, &kCharID);
        v9 = User::GetMainCharID(&g_kUser);
        if ( *(_QWORD *)&kCharID == *(_QWORD *)&v9->n5_name[0]
          && *(_QWORD *)&kCharID.n5_name[8] == *(_QWORD *)&v9->n5_name[8] )
        {
          if ( *(_DWORD *)&kCharID.n5_name[16] == *(_DWORD *)&v9->n5_name[16] )
            v3->m_bIsMeRaidSubLeader = 1;
        }
      }
    }
  }
  else
  {
    v10 = *(_DWORD *)&this->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( (Name5 *)v10 != this->m_SubLeaderList.baseclass_0._Mylast )
    {
      while ( *(_QWORD *)v10 != *(_QWORD *)&kCharID
           || *(_QWORD *)(v10 + 8) != *(_QWORD *)&kCharID.n5_name[8]
           || *(_DWORD *)(v10 + 16) != *(_DWORD *)&kCharID.n5_name[16] )
      {
        v10 += 20;
        if ( (Name5 *)v10 == this->m_SubLeaderList.baseclass_0._Mylast )
          return;
      }
      v11 = this;
      std::_Move<Name5___Name5__>(
        (Name5 *)(v10 + 20),
        this->m_SubLeaderList.baseclass_0._Mylast,
        (Name5 *)v10,
        (std::_Nonscalar_ptr_iterator_tag)this);
      --v11->m_SubLeaderList.baseclass_0._Mylast;
      v12 = User::GetMainCharID(&g_kUser);
      if ( *(_QWORD *)&kCharID == *(_QWORD *)&v12->n5_name[0]
        && *(_QWORD *)&kCharID.n5_name[8] == *(_QWORD *)&v12->n5_name[8]
        && *(_DWORD *)&kCharID.n5_name[16] == *(_DWORD *)&v12->n5_name[16] )
        __formal->m_bIsMeRaidSubLeader = 0;
    }
  }
}

//----- (007022B0) --------------------------------------------------------
void __thiscall RaidInfo::ClearRaidInfo(RaidInfo *this)
{
  RaidInfo *v1; // esi@1
  char *v2; // ecx@1
  RaidMemberInfo **v3; // edi@1
  RaidMemberInfo *v4; // edx@2
  RaidMemberInfo *v5; // eax@3
  bool v6; // zf@4
  Name5 *v7; // eax@5
  signed int __formal; // [sp+Ch] [bp-8h]@1
  char *v13; // [sp+10h] [bp-4h]@1

  v1 = this;
  v2 = &this->m_PartyInfo[0].nPartyIndex;
  v13 = v2;
  v3 = &v1->m_MemberInfo[0].baseclass_0._Mylast;
  __formal = 4;
  do
  {
    *((_WORD *)v2 - 1) = -1;
    *v2 = 0;
    v4 = *(v3 - 1);
    if ( v4 != *v3 )
    {
      v5 = std::_Move<RaidMemberInfo___RaidMemberInfo__>(*v3, *v3, v4, (std::_Nonscalar_ptr_iterator_tag)__formal);
      v2 = v13;
      *v3 = v5;
    }
    v2 += 4;
    v3 += 4;
    v6 = __formal-- == 1;
    v13 = v2;
  }
  while ( !v6 );
  v7 = *(Name5 **)&v1->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v7 != v1->m_SubLeaderList.baseclass_0._Mylast )
    v1->m_SubLeaderList.baseclass_0._Mylast = v7;
  v1->m_bIsMeRaidLooter = 0;
  *(_WORD *)&v1->m_bIsMeRaidLeader = 0;
  v1->m_uiTotalMemberOnRaid = 0;
  *(_DWORD *)&v1->m_kRaidLeaderID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kRaidLeaderID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kRaidLeaderID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kRaidLeaderID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kRaidLeaderID.n5_name[0] = 0;
  strncpy(v1->m_kRaidLeaderID.n5_name, &byte_9D1A3D, 0x14u);
  *(_DWORD *)&v1->m_kRaidLooterID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kRaidLooterID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kRaidLooterID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kRaidLooterID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kRaidLooterID.n5_name[0] = 0;
  strncpy(v1->m_kRaidLooterID.n5_name, &byte_9D1A3E, 0x14u);
  v1->m_eLootType = 0;
  v1->m_eItemType = 0;
  v1->m_bDuringJoinPropose = 0;
  *(_DWORD *)&v1->m_kJoinProposeCharID.n5_name[16] = 0;
  *(_DWORD *)&v1->m_kJoinProposeCharID.n5_name[12] = 0;
  *(_DWORD *)&v1->m_kJoinProposeCharID.n5_name[8] = 0;
  *(_DWORD *)&v1->m_kJoinProposeCharID.n5_name[4] = 0;
  *(_DWORD *)&v1->m_kJoinProposeCharID.n5_name[0] = 0;
  strncpy(v1->m_kJoinProposeCharID.n5_name, &byte_9D1A3F, 0x14u);
  v1->m_bIsDisplayNotice = 1;
  v1->m_uiMePartyIdx = 4;
}

//----- (007023E0) --------------------------------------------------------
void __thiscall RaidInfo::RaidInfo(RaidInfo *this)
{
  RaidInfo *v1; // esi@1

  v1 = this;
  this->vfptr = (RaidInfoVtbl *)&RaidInfo::_vftable_;
  *(_QWORD *)&this->m_kRaidLeaderID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kRaidLeaderID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kRaidLeaderID.n5_name[0] = 0;
  *(_DWORD *)&this->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->m_SubLeaderList.baseclass_0._Mylast = 0;
  this->m_SubLeaderList.baseclass_0._Myend = 0;
  *(_QWORD *)&this->m_kRaidLooterID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kRaidLooterID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kRaidLooterID.n5_name[0] = 0;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_kJoinProposeCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_kJoinProposeCharID.n5_name[0] = 0;
  this->m_PartyInfo[0].nPartyIndex = 0;
  this->m_PartyInfo[1].nPartyIndex = 0;
  this->m_PartyInfo[2].nPartyIndex = 0;
  this->m_PartyInfo[3].nPartyIndex = 0;
  this->m_PartyInfo[0].nPartyNo = -1;
  this->m_PartyInfo[1].nPartyNo = -1;
  this->m_PartyInfo[2].nPartyNo = -1;
  this->m_PartyInfo[3].nPartyNo = -1;
  _eh_vector_constructor_iterator_(
    this->m_MemberInfo,
    0x10u,
    4,
    (void (__thiscall *)(void *))CPartyFinder::CPartyFinder,
    (void (__thiscall *)(void *))__1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a);
  RaidInfo::ClearRaidInfo(v1);
}
// 9D1A48: using guessed type int (__thiscall *RaidInfo___vftable_)(void *p, char);

//----- (007024B0) --------------------------------------------------------
bool __thiscall RaidInfo::SetMember(RaidInfo *this, PROTO_NC_RAID_MEMBER_LIST_CMD *p)
{
  unsigned int v2; // edi@1
  char *v3; // esi@1
  int v4; // ecx@2
  int v5; // edx@2
  int v6; // eax@2
  int v7; // ecx@2
  unsigned int v8; // ecx@3
  int v9; // ebx@3
  unsigned int v10; // edi@3
  unsigned int v11; // edx@4
  unsigned int v12; // ecx@4
  char v13; // al@4
  int v14; // edx@4
  int v15; // eax@9
  RaidInfo *v17; // [sp+Ch] [bp-68h]@1
  unsigned int i; // [sp+10h] [bp-64h]@1
  RaidMemberInfo kInfo; // [sp+14h] [bp-60h]@4
  char acstr[21]; // [sp+58h] [bp-1Ch]@2
  unsigned int v21; // [sp+70h] [bp-4h]@1
  int v22; // [sp+74h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v2 = 0;
  v17 = this;
  i = 0;
  v3 = &p->memberarray[0].memberid.n5_name[8];
  do
  {
    v4 = *((_DWORD *)v3 - 1);
    v5 = *(_DWORD *)v3;
    *(_DWORD *)acstr = *((_DWORD *)v3 - 2);
    v6 = *((_DWORD *)v3 + 1);
    *(_DWORD *)&acstr[4] = v4;
    v7 = *((_DWORD *)v3 + 2);
    *(_DWORD *)&acstr[12] = v6;
    *(_DWORD *)&acstr[16] = v7;
    *(_DWORD *)&acstr[8] = v5;
    acstr[20] = 0;
    if ( strcmp(acstr, (const char *)&unk_9D1A41) )
    {
      v8 = v2 % 5;
      v9 = *(_DWORD *)&v17->m_MemberInfo[v2 / 5].baseclass_0.___u0.baseclass_0.dummy[0];
      v10 = (unsigned int)&v17->m_MemberInfo[v2 / 5];
      if ( v8 < (*(_DWORD *)(v10 + 4) - v9) / 68 )
      {
        if ( !v3[12] )
          *(_BYTE *)(v9 + 68 * v8 + 64) = 0;
        *(_BYTE *)(68 * v8 + *(_DWORD *)v10 + 20) = v3[12];
        v15 = 68 * v8 + *(_DWORD *)v10;
        *(_DWORD *)v15 = *((_DWORD *)v3 - 2);
        *(_DWORD *)(v15 + 4) = *((_DWORD *)v3 - 1);
        *(_DWORD *)(v15 + 8) = *(_DWORD *)v3;
        *(_DWORD *)(v15 + 12) = *((_DWORD *)v3 + 1);
        *(_DWORD *)(v15 + 16) = *((_DWORD *)v3 + 2);
      }
      else
      {
        *(_QWORD *)&kInfo.m_kCharID.n5_name[12] = 0i64;
        *(_QWORD *)&kInfo.m_kCharID.n5_name[4] = 0i64;
        *(_DWORD *)&kInfo.m_kCharID.n5_name[0] = 0;
        strncpy(kInfo.m_kCharID.n5_name, &byte_9D1A40, 0x14u);
        v11 = *((_DWORD *)v3 - 2);
        kInfo.m_fX = 0.0;
        v12 = *((_DWORD *)v3 - 1);
        kInfo.m_fY = 0.0;
        v13 = v3[12];
        *(_QWORD *)&kInfo.m_kCharID.n5_name[0] = __PAIR__(v12, v11);
        *(_QWORD *)&kInfo.m_kCharID.n5_name[8] = *(_QWORD *)v3;
        v14 = *((_DWORD *)v3 + 2);
        kInfo.m_byChrClass = 0;
        kInfo.m_iLv = 0;
        kInfo.m_iHP = 0;
        kInfo.m_iSP = 0;
        kInfo.m_iMaxHP = 0;
        kInfo.m_iMaxSP = 0;
        kInfo.m_bShow = 0;
        kInfo.m_iLP = 0;
        kInfo.m_iMaxLP = 0;
        kInfo.m_ucStatus = v13;
        *(_DWORD *)&kInfo.m_kCharID.n5_name[16] = v14;
        if ( !v13 )
          kInfo.m_bShow = 0;
        std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::push_back(
          (std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *)v10,
          &kInfo);
        ++v17->m_uiTotalMemberOnRaid;
      }
      v2 = i;
    }
    ++v2;
    v3 += 21;
    i = v2;
  }
  while ( (signed int)v2 < 20 );
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00702670) --------------------------------------------------------
bool __thiscall RaidInfo::DeleteMember(RaidInfo *this, Name5 kID, std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > nPartyIdx, char nSlotIdx)
{
  RaidInfo *v4; // esi@1
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v5; // ecx@3
  std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > v6; // edx@4
  int v7; // eax@4
  unsigned int v8; // ebx@9
  int v9; // edi@9
  _BYTE v10[20]; // ST04_20@9
  _BYTE v11[20]; // ST00_20@10
  _BYTE v12[20]; // ST04_20@11
  _BYTE v13[20]; // ST04_20@12
  bool result; // al@13

  v4 = this;
  if ( (unsigned __int8)nPartyIdx.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] > 4u
    || (unsigned __int8)nSlotIdx > 5u
    || (v5 = &this->m_MemberInfo[(unsigned __int8)nPartyIdx.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]],
        (signed int)((char *)v4->m_MemberInfo[(unsigned __int8)nPartyIdx.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]].baseclass_0._Mylast
                   - *(_DWORD *)&v4->m_MemberInfo[(unsigned __int8)nPartyIdx.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]].baseclass_0.___u0.baseclass_0.dummy[0])
      / 68 <= (unsigned int)(unsigned __int8)nSlotIdx) )
  {
    result = 0;
  }
  else
  {
    v6 = *(std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (unsigned __int8)nSlotIdx;
    if ( nSlotIdx )
    {
      do
      {
        --v7;
        if ( (RaidMemberInfo *)v6 == v4->m_MemberInfo[(unsigned __int8)nPartyIdx.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]].baseclass_0._Mylast )
          break;
        *(_DWORD *)&v6 += 68;
      }
      while ( v7 );
    }
    if ( (RaidMemberInfo *)v6 != v4->m_MemberInfo[(unsigned __int8)nPartyIdx.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0]].baseclass_0._Mylast )
    {
      std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::erase(v5, &nPartyIdx, v6);
      --v4->m_uiTotalMemberOnRaid;
    }
    v9 = *(_DWORD *)&kID.n5_name[16];
    v8 = *(_DWORD *)&kID.n5_name[12];
    *(_QWORD *)v10 = *(_QWORD *)&kID;
    *(_QWORD *)&v10[8] = *(_QWORD *)&kID.n5_name[8];
    *(_DWORD *)&v10[16] = *(_DWORD *)&kID.n5_name[16];
    if ( RaidInfo::IsSubLeader(v4, *(Name5 *)v10) )
    {
      *(_QWORD *)v11 = *(_QWORD *)&kID;
      *(_DWORD *)&v11[8] = *(_DWORD *)&kID.n5_name[8];
      *(_QWORD *)&v11[12] = *(_QWORD *)&kID.n5_name[12];
      RaidInfo::SetRaidSubLeader(v4, *(Name5 *)v11, 0);
      v9 = *(_DWORD *)&kID.n5_name[16];
      v8 = *(_DWORD *)&kID.n5_name[12];
    }
    *(_QWORD *)v12 = *(_QWORD *)&kID;
    *(_QWORD *)&v12[8] = __PAIR__(v8, *(unsigned int *)&kID.n5_name[8]);
    *(_DWORD *)&v12[16] = v9;
    if ( RaidInfo::IsLooter(v4, *(Name5 *)v12) )
    {
      *(_DWORD *)v13 = *(_DWORD *)&v4->m_kRaidLeaderID.n5_name[0];
      *(_QWORD *)&v13[4] = *(_QWORD *)&v4->m_kRaidLeaderID.n5_name[4];
      *(_QWORD *)&v13[12] = *(_QWORD *)&v4->m_kRaidLeaderID.n5_name[12];
      RaidInfo::ChangeRaidLooter(v4, *(Name5 *)v13);
    }
    result = 1;
  }
  return result;
}

//----- (007027B0) --------------------------------------------------------
bool __thiscall RaidInfo::DeleteMember(RaidInfo *this, Name5 kID)
{
  bool result; // al@1
  RaidInfo *v3; // esi@1
  _BYTE v4[20]; // ST00_20@2
  int nSlotIdx; // [sp+4h] [bp-24h]@2
  int nPartyIdx; // [sp+8h] [bp-20h]@2
  char acName[21]; // [sp+Ch] [bp-1Ch]@1
  unsigned int v8; // [sp+24h] [bp-4h]@1
  int v9; // [sp+28h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  result = kID.n5_name[0];
  v3 = this;
  *(_QWORD *)&acName[8] = *(_QWORD *)&kID.n5_name[8];
  *(_QWORD *)acName = *(_QWORD *)&kID;
  *(_DWORD *)&acName[16] = *(_DWORD *)&kID.n5_name[16];
  acName[20] = 0;
  if ( kID.n5_name[0] )
  {
    RaidInfo::FindIndexByName(this, acName, (unsigned int *)&nPartyIdx, (unsigned int *)&nSlotIdx);
    *(_QWORD *)v4 = *(_QWORD *)&kID;
    *(_QWORD *)&v4[8] = *(_QWORD *)&kID.n5_name[8];
    *(_DWORD *)&v4[16] = *(_DWORD *)&kID.n5_name[16];
    result = RaidInfo::DeleteMember(v3, *(Name5 *)v4, nPartyIdx, nSlotIdx);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00702850) --------------------------------------------------------
RaidMemberInfo *__thiscall RaidMemberInfo::operator_(RaidMemberInfo *this, RaidMemberInfo *__that)
{
  RaidMemberInfo *result; // eax@1

  result = this;
  *(_QWORD *)&this->m_kCharID.n5_name[0] = *(_QWORD *)&__that->m_kCharID.n5_name[0];
  *(_QWORD *)&this->m_kCharID.n5_name[8] = *(_QWORD *)&__that->m_kCharID.n5_name[8];
  *(_DWORD *)&this->m_kCharID.n5_name[16] = *(_DWORD *)&__that->m_kCharID.n5_name[16];
  this->m_ucStatus = __that->m_ucStatus;
  this->m_iLv = __that->m_iLv;
  this->m_iHP = __that->m_iHP;
  this->m_iSP = __that->m_iSP;
  this->m_iMaxHP = __that->m_iMaxHP;
  this->m_iMaxSP = __that->m_iMaxSP;
  this->m_iLP = __that->m_iLP;
  this->m_iMaxLP = __that->m_iMaxLP;
  this->m_byChrClass = __that->m_byChrClass;
  this->m_byInform = __that->m_byInform;
  this->m_fX = __that->m_fX;
  this->m_fY = __that->m_fY;
  this->m_bShow = __that->m_bShow;
  return result;
}

//----- (007028D0) --------------------------------------------------------
Name5 *__cdecl std::_Move<Name5___Name5__>(Name5 *_First, Name5 *_Last, Name5 *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  char *v4; // ecx@2
  Name5 *result; // eax@2
  int v6; // esi@3

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = &_First->n5_name[8];
    result = _Dest;
    do
    {
      *(_DWORD *)&result->n5_name[0] = *((_DWORD *)v4 - 2);
      *(_DWORD *)&result->n5_name[4] = *((_DWORD *)v4 - 1);
      *(_DWORD *)&result->n5_name[8] = *(_DWORD *)v4;
      *(_DWORD *)&result->n5_name[12] = *((_DWORD *)v4 + 1);
      v6 = *((_DWORD *)v4 + 2);
      v4 += 20;
      *(_DWORD *)&result->n5_name[16] = v6;
      ++result;
    }
    while ( (Name5 *)(v4 - 8) != _Last );
  }
  return result;
}

//----- (00702920) --------------------------------------------------------
RaidMemberInfo *__cdecl std::_Move<RaidMemberInfo___RaidMemberInfo__>(RaidMemberInfo *_First, RaidMemberInfo *_Last, RaidMemberInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  char *v4; // ecx@2
  RaidMemberInfo *result; // eax@2

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = &_First->m_kCharID.n5_name[8];
    result = _Dest;
    do
    {
      *(_DWORD *)&result->m_kCharID.n5_name[0] = *((_DWORD *)v4 - 2);
      *(_DWORD *)&result->m_kCharID.n5_name[4] = *((_DWORD *)v4 - 1);
      *(_DWORD *)&result->m_kCharID.n5_name[8] = *(_DWORD *)v4;
      *(_DWORD *)&result->m_kCharID.n5_name[12] = *((_DWORD *)v4 + 1);
      *(_DWORD *)&result->m_kCharID.n5_name[16] = *((_DWORD *)v4 + 2);
      result->m_ucStatus = v4[12];
      result->m_iLv = *((_DWORD *)v4 + 4);
      result->m_iHP = *((_DWORD *)v4 + 5);
      result->m_iSP = *((_DWORD *)v4 + 6);
      result->m_iMaxHP = *((_DWORD *)v4 + 7);
      result->m_iMaxSP = *((_DWORD *)v4 + 8);
      result->m_iLP = *((_DWORD *)v4 + 9);
      result->m_iMaxLP = *((_DWORD *)v4 + 10);
      result->m_byChrClass = v4[44];
      result->m_byInform = v4[45];
      v4 += 68;
      ++result;
      *((float *)result - 3) = *((float *)v4 - 5);
      *((float *)result - 2) = *((float *)v4 - 4);
      *((_BYTE *)result - 4) = *(v4 - 12);
    }
    while ( (RaidMemberInfo *)(v4 - 8) != _Last );
  }
  return result;
}

//----- (007029C0) --------------------------------------------------------
RaidMemberInfo *__cdecl std::_Uninit_move<RaidMemberInfo___RaidMemberInfo___std::allocator<RaidMemberInfo>_RaidMemberInfo>(RaidMemberInfo *_First, RaidMemberInfo *_Last, RaidMemberInfo *_Dest, std::allocator<RaidMemberInfo> *_Al, RaidMemberInfo *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  RaidMemberInfo *v6; // edx@1
  RaidMemberInfo *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
      memcpy(result, v6, 0x44u);
    ++v6;
  }
  return result;
}

//----- (00702A00) --------------------------------------------------------
void __thiscall std::vector<Name5_std::allocator<Name5>>::reserve(std::vector<Name5,std::allocator<Name5> > *this, unsigned int _Count)
{
  std::vector<Name5,std::allocator<Name5> > *v2; // esi@1
  void *v3; // eax@4
  CollectCardChoiceWin::sRegistCardInfo *v4; // ST04_4@4
  CollectCardChoiceWin::sRegistCardInfo *v5; // ST00_4@4
  Name5 *v6; // ebx@4
  signed int v7; // edx@4
  int v8; // edi@4
  Name5 *i; // eax@5
  char *v10; // eax@8
  int v11; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v13; // [sp+4h] [bp-10h]@1
  int v14; // [sp+10h] [bp-4h]@4

  v13 = &v11;
  v2 = this;
  if ( _Count > 0xCCCCCCC )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 20 < _Count )
  {
    v3 = std::allocator<CollectWin::sCardInfo>::allocate(
           (std::allocator<CollectWin::sCardInfo> *)&this->baseclass_0._Alval,
           _Count);
    v4 = (CollectCardChoiceWin::sRegistCardInfo *)v2->baseclass_0._Mylast;
    v5 = *(CollectCardChoiceWin::sRegistCardInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v14 = 0;
    std::_Uninit_move<CollectCardChoiceWin::sRegistCardInfo___CollectCardChoiceWin::sRegistCardInfo___std::allocator<CollectCardChoiceWin::sRegistCardInfo>_CollectCardChoiceWin::sRegistCardInfo>(
      v5,
      v4,
      (CollectCardChoiceWin::sRegistCardInfo *)v3,
      (std::allocator<CollectCardChoiceWin::sRegistCardInfo> *)&v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = *(Name5 **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (signed int)((unsigned __int64)(1717986919i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v8 = v7 + ((unsigned int)v7 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      for ( i = v2->baseclass_0._Mylast; v6 != i; ++v6 )
        ;
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v10 = _Ptr;
    v2->baseclass_0._Myend = (Name5 *)&_Ptr[20 * _Count];
    v2->baseclass_0._Mylast = (Name5 *)&v10[20 * v8];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v10;
  }
}

//----- (00702B10) --------------------------------------------------------
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::reserve(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, unsigned int _Count)
{
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v2; // esi@1
  void *v3; // eax@4
  RaidMemberInfo *v4; // ST04_4@4
  RaidMemberInfo *v5; // ST00_4@4
  RaidMemberInfo *v6; // ebx@4
  signed int v7; // edx@4
  int v8; // edi@4
  RaidMemberInfo *i; // eax@5
  char *v10; // eax@8
  int v11; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v13; // [sp+4h] [bp-10h]@1
  int v14; // [sp+10h] [bp-4h]@4

  v13 = &v11;
  v2 = this;
  if ( _Count > 0x3C3C3C3 )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 68 < _Count )
  {
    v3 = std::allocator<GuildAcademySelectWin::GuildInfo>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(RaidMemberInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v14 = 0;
    std::_Uninit_move<RaidMemberInfo___RaidMemberInfo___std::allocator<RaidMemberInfo>_RaidMemberInfo>(
      v5,
      v4,
      (RaidMemberInfo *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = *(RaidMemberInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (signed int)((unsigned __int64)(2021161081i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 5;
    v8 = v7 + ((unsigned int)v7 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      for ( i = v2->baseclass_0._Mylast; v6 != i; ++v6 )
        ;
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v10 = _Ptr;
    v2->baseclass_0._Myend = (RaidMemberInfo *)&_Ptr[68 * _Count];
    v2->baseclass_0._Mylast = (RaidMemberInfo *)&v10[68 * v8];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v10;
  }
}

//----- (00702C20) --------------------------------------------------------
std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *__thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::erase(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *result, std::_Vector_const_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > _Where)
{
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v3; // esi@1
  std::_Vector_iterator<std::_Vector_val<RaidMemberInfo,std::allocator<RaidMemberInfo> > > *v4; // eax@1

  v3 = this;
  std::_Move<RaidMemberInfo___RaidMemberInfo__>(
    (RaidMemberInfo *)(*(_DWORD *)&_Where + 68),
    this->baseclass_0._Mylast,
    *(RaidMemberInfo **)&_Where,
    (std::_Nonscalar_ptr_iterator_tag)_Where.___u0.baseclass_0.baseclass_0.dummy[0]);
  v4 = result;
  --v3->baseclass_0._Mylast;
  *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v4;
}

//----- (00702C50) --------------------------------------------------------
void __thiscall std::vector<Name5_std::allocator<Name5>>::_Reserve(std::vector<Name5,std::allocator<Name5> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 20;
  if ( 214748364 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 20;
  if ( v3 > v4 )
  {
    if ( 214748364 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<Name5_std::allocator<Name5>>::reserve(this, v5);
  }
}

//----- (00702CD0) --------------------------------------------------------
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::_Reserve(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 68;
  if ( 63161283 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 68;
  if ( v3 > v4 )
  {
    if ( 63161283 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::reserve(this, v5);
  }
}

//----- (00702D50) --------------------------------------------------------
void *__thiscall RaidInfo::_vector_deleting_destructor_(RaidInfo *this, unsigned int a2)
{
  RaidInfo *v2; // esi@1

  v2 = this;
  this->vfptr = (RaidInfoVtbl *)&RaidInfo::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_MemberInfo,
    0x10u,
    4,
    (void (__thiscall *)(void *))__1__vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__a);
  if ( *(_DWORD *)&v2->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v2->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v2->m_SubLeaderList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_SubLeaderList.baseclass_0._Mylast = 0;
  v2->m_SubLeaderList.baseclass_0._Myend = 0;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D1A48: using guessed type int (__thiscall *RaidInfo___vftable_)(void *p, char);

//----- (00702DE0) --------------------------------------------------------
void __thiscall std::vector<Name5_std::allocator<Name5>>::push_back(std::vector<Name5,std::allocator<Name5> > *this, Name5 *_Val)
{
  std::vector<Name5,std::allocator<Name5> > *v2; // edi@1
  Name5 *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  int v6; // ecx@5
  Name5 *v7; // eax@5
  Name5 *v8; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<Name5_std::allocator<Name5>>::_Reserve(v2, 1u);
    v8 = v2->baseclass_0._Mylast;
    if ( v8 )
    {
      *(_QWORD *)&v8->n5_name[0] = *(_QWORD *)&_Val->n5_name[0];
      *(_QWORD *)&v8->n5_name[8] = *(_QWORD *)&_Val->n5_name[8];
      *(_DWORD *)&v8->n5_name[16] = *(_DWORD *)&_Val->n5_name[16];
    }
  }
  else
  {
    v4 = (signed int)((unsigned __int64)(1717986919i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 3;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<Name5_std::allocator<Name5>>::_Reserve(v2, 1u);
    v6 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 20 * v5;
    v7 = v2->baseclass_0._Mylast;
    if ( v7 )
    {
      *(_DWORD *)&v7->n5_name[0] = *(_DWORD *)v6;
      *(_DWORD *)&v7->n5_name[4] = *(_DWORD *)(v6 + 4);
      *(_DWORD *)&v7->n5_name[8] = *(_DWORD *)(v6 + 8);
      *(_DWORD *)&v7->n5_name[12] = *(_DWORD *)(v6 + 12);
      *(_DWORD *)&v7->n5_name[16] = *(_DWORD *)(v6 + 16);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (00702E90) --------------------------------------------------------
void __thiscall std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::push_back(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *this, RaidMemberInfo *_Val)
{
  RaidMemberInfo *v2; // esi@1
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v3; // ebx@1
  RaidMemberInfo *v4; // ecx@1
  signed int v5; // edx@3
  int v6; // esi@3
  void *v7; // edi@8

  v2 = _Val;
  v3 = this;
  v4 = this->baseclass_0._Mylast;
  if ( _Val >= v4 || *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v4 == v3->baseclass_0._Myend )
      std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::_Reserve(v3, 1u);
  }
  else
  {
    v5 = (signed int)((unsigned __int64)(2021161081i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 5;
    v6 = v5 + ((unsigned int)v5 >> 31);
    if ( v4 == v3->baseclass_0._Myend )
      std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::_Reserve(v3, 1u);
    v2 = (RaidMemberInfo *)(*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + 68 * v6);
  }
  v7 = v3->baseclass_0._Mylast;
  if ( v7 )
    memcpy(v7, v2, 0x44u);
  ++v3->baseclass_0._Mylast;
}

//----- (00702F00) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::ExpeditionMemberAddWin(ExpeditionMemberAddWin *this)
{
  ExpeditionMemberAddWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionMemberAddWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionMemberAddWin::_vftable_;
  v1->m_pkInputBox = 0;
}
// 9D2490: using guessed type int (__stdcall *ExpeditionMemberAddWin___vftable_)(int uiFlags);
// 9D24AC: using guessed type int (__thiscall *ExpeditionMemberAddWin___vftable_)(void *p, char);

//----- (00702F30) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::_ExpeditionMemberAddWin(ExpeditionMemberAddWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionMemberAddWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionMemberAddWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D2490: using guessed type int (__stdcall *ExpeditionMemberAddWin___vftable_)(int uiFlags);
// 9D24AC: using guessed type int (__thiscall *ExpeditionMemberAddWin___vftable_)(void *p, char);

//----- (00702F50) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::SetTargetName(ExpeditionMemberAddWin *this, const char *szName)
{
  if ( szName )
    ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(szName);
}

//----- (00702F90) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::OnClose(ExpeditionMemberAddWin *this)
{
  ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
}

//----- (00702FB0) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::OnShowWin(ExpeditionMemberAddWin *this)
{
  ((void (*)(void))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
}

//----- (00702FC0) --------------------------------------------------------
void __thiscall ExpeditionWin::OnHelpLink(ExpeditionWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "RaidWin");
}

//----- (00702FF0) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::OpenPopupWin(ExpeditionPartyWin *this, unsigned int focusSlot)
{
  ExpeditionPartyWin *v2; // esi@1

  v2 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
  {
    if ( !v2->m_bOpenPopUp )
    {
      v2->m_bOpenPopUp = 1;
      v2->m_uiFocusSlotNum = focusSlot;
    }
  }
}

//----- (00703030) --------------------------------------------------------
void __thiscall ExpeditionLootSelectWin::ExpeditionLootSelectWin(ExpeditionLootSelectWin *this)
{
  ExpeditionLootSelectWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionLootSelectWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionLootSelectWin::_vftable_;
}
// 9D26D0: using guessed type int (__stdcall *ExpeditionLootSelectWin___vftable_)(int uiFlags);
// 9D26EC: using guessed type int (__thiscall *ExpeditionLootSelectWin___vftable_)(void *p, char);

//----- (00703050) --------------------------------------------------------
void __thiscall ExpeditionLootSelectWin::_ExpeditionLootSelectWin(ExpeditionLootSelectWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionLootSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionLootSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D26D0: using guessed type int (__stdcall *ExpeditionLootSelectWin___vftable_)(int uiFlags);
// 9D26EC: using guessed type int (__thiscall *ExpeditionLootSelectWin___vftable_)(void *p, char);

//----- (00703070) --------------------------------------------------------
void __thiscall ExpeditionLootSelectWin::OnSlideBtnUp(ExpeditionLootSelectWin *this)
{
  SlideBar::OnClick1(this->m_pkSlideBarEx);
}

//----- (00703090) --------------------------------------------------------
void __thiscall ExpeditionLootOptionWin::OnHelpLink(ExpeditionLootOptionWin *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v1, "RaidRootOption");
}

//----- (007030C0) --------------------------------------------------------
void __thiscall EntryIconWin::_EntryIconWin(EntryIconWin *this)
{
  EntryIconWin *v1; // esi@1
  NiScreenElements *v2; // edi@1
  NiScreenElements *v3; // edi@6
  NiMaterialProperty *v4; // edi@11
  NiMaterialProperty *v5; // edi@16
  PgWinLRBut *v6; // edi@21
  PgWinSpr *v7; // edi@26
  PgWinSpr *v8; // edi@31
  int v9; // ebx@36
  int v10; // edi@37
  PgWinSpr *v11; // edi@43
  PgWinLRBut *v12; // edi@48
  NiMaterialProperty *v13; // edi@52
  NiMaterialProperty *v14; // edi@56
  NiScreenElements *v15; // edi@60
  NiScreenElements *v16; // edi@64
  PgWinSpr *v17; // edi@68
  PgWinSpr *v18; // edi@72
  PgWinSpr *v19; // edi@76
  PgWinText *v20; // edi@80
  PgWinText *v21; // edi@84
  PgWinAbbreviateText *v22; // edi@88
  signed int v23; // [sp+4h] [bp-10h]@36

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EntryIconWin::_vftable_;
  this->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EntryIconWin::_vftable_;
  v2 = this->m_spBackImagePlane.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spBackImagePlane.m_pObject = 0;
  }
  v3 = v1->m_spSubImagePlane.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spSubImagePlane.m_pObject = 0;
  }
  v4 = v1->m_spMtrlProp.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_spMtrlProp.m_pObject = 0;
  }
  v5 = v1->m_spFixedMtrlProp.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    v1->m_spFixedMtrlProp.m_pObject = 0;
  }
  v6 = v1->m_spLRBut.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v1->m_spLRBut.m_pObject = 0;
  }
  v7 = v1->m_spMemberMark.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v1->m_spMemberMark.m_pObject = 0;
  }
  v8 = v1->m_spLootingMark.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v8,
        1u);
    v1->m_spLootingMark.m_pObject = 0;
  }
  v9 = (int)v1->m_spClassBar;
  v23 = 6;
  do
  {
    v10 = *(_DWORD *)v9;
    if ( *(_DWORD *)v9 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
      *(_DWORD *)v9 = 0;
    }
    v9 += 4;
    --v23;
  }
  while ( v23 );
  v11 = v1->m_spPosBar.m_pObject;
  if ( v11 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v11,
        1u);
    v1->m_spPosBar.m_pObject = 0;
  }
  v12 = v1->m_spLRBut.m_pObject;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v12,
      1u);
  NiObjectNET::_NiObjectNET(&v1->m_spAlphaProp.baseclass_0.baseclass_0);
  v13 = v1->m_spFixedMtrlProp.m_pObject;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
  v14 = v1->m_spMtrlProp.m_pObject;
  if ( v14
    && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
  v15 = v1->m_spSubImagePlane.m_pObject;
  if ( v15
    && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v15,
      1u);
  v16 = v1->m_spBackImagePlane.m_pObject;
  if ( v16
    && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v16 )
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v16,
      1u);
  v17 = v1->m_spPosBar.m_pObject;
  if ( v17
    && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v17 )
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v17,
      1u);
  v18 = v1->m_spLootingMark.m_pObject;
  if ( v18
    && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v18 )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v18,
      1u);
  v19 = v1->m_spMemberMark.m_pObject;
  if ( v19
    && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v19 )
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v19,
      1u);
  v20 = v1->m_spClassText.m_pObject;
  if ( v20
    && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v20 )
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v20,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spClassBar,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v21 = v1->m_spLevelText.m_pObject;
  if ( v21
    && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v21 )
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v21,
      1u);
  v22 = v1->m_spNameText.m_pObject;
  if ( v22
    && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v22 )
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v22,
      1u);
  PgWin::_PgWin(&v1->baseclass_0);
}
// 9D2910: using guessed type int (__stdcall *EntryIconWin___vftable_)(int uiFlags);
// 9D292C: using guessed type int (__thiscall *EntryIconWin___vftable_)(void *p, char);

//----- (007034A0) --------------------------------------------------------
void __thiscall EntryIconWin::InitLeaderLooterMark(EntryIconWin *this)
{
  EntryIconWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
}

//----- (007034F0) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::OnMemberAddOk(ExpeditionMemberAddWin *this)
{
  ExpeditionMemberAddWin *v1; // edi@1
  char *v2; // eax@1
  _BYTE v3[20]; // ST04_20@4
  Name5 kNullID; // [sp+Ch] [bp-2Ch]@1
  Name5 kCharID; // [sp+20h] [bp-18h]@1
  unsigned int v6; // [sp+34h] [bp-4h]@1
  int v7; // [sp+38h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = this;
  v2 = (char *)((int (*)(void))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
  *(_QWORD *)&kCharID.n5_name[12] = 0i64;
  *(_QWORD *)&kCharID.n5_name[4] = 0i64;
  *(_QWORD *)&kCharID.n5_name[0] = 0i64;
  strncpy(kCharID.n5_name, v2, 0x14u);
  *(_QWORD *)&kNullID.n5_name[12] = 0i64;
  *(_QWORD *)&kNullID.n5_name[4] = 0i64;
  *(_QWORD *)&kNullID.n5_name[0] = 0i64;
  strncpy(kNullID.n5_name, &byte_9D1A86, 0x14u);
  if ( *(_QWORD *)&kCharID != *(_QWORD *)&kNullID
    || *(_QWORD *)&kCharID.n5_name[8] != *(_QWORD *)&kNullID.n5_name[8]
    || *(_DWORD *)&kCharID.n5_name[16] != *(_DWORD *)&kNullID.n5_name[16] )
  {
    *(_QWORD *)v3 = *(_QWORD *)&kCharID;
    *(_QWORD *)&v3[8] = *(_QWORD *)&kCharID.n5_name[8];
    *(_DWORD *)&v3[16] = *(_DWORD *)&kCharID.n5_name[16];
    GameFrameWork::NcRaidInvitationReq((GameFrameWork *)v1->baseclass_0.m_pkFrameWork, *(Name5 *)v3);
  }
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9D1A87);
  GameFrameWork::CloseRaidMemberAddWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
}
// A85C00: using guessed type int __security_cookie;

//----- (007035D0) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::OnMemberAddCancel(ExpeditionMemberAddWin *this)
{
  ExpeditionMemberAddWin *v1; // esi@1

  v1 = this;
  ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9D1AB9);
  GameFrameWork::CloseRaidMemberAddWin((GameFrameWork *)v1->baseclass_0.m_pkFrameWork);
  PgWinMgr::CloseWin(&Pgg_kWinMgr, &v1->baseclass_0.baseclass_0.baseclass_0);
}

//----- (00703600) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::OnCommand(ExpeditionMemberAddWin *this, unsigned int wParam, int lParam)
{
  ExpeditionMemberAddWin *v3; // esi@1

  v3 = this;
  if ( wParam )
  {
    if ( wParam == 1 )
    {
      ((void (__stdcall *)(_DWORD))this->m_pkInputBox->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor)(&unk_9D1AB9);
      GameFrameWork::CloseRaidMemberAddWin((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
    }
  }
  else
  {
    ExpeditionMemberAddWin::OnMemberAddOk(this);
  }
}

//----- (00703650) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::OnEditEnd(ExpeditionMemberAddWin *this, unsigned int wParam, int lParam)
{
  ExpeditionMemberAddWin::OnMemberAddOk(this);
}

//----- (00703660) --------------------------------------------------------
void __thiscall ExpeditionWin::_ExpeditionWin(ExpeditionWin *this)
{
  ExpeditionWin *v1; // esi@1
  char *v2; // ebx@1
  int v3; // edi@2
  PgWinSpr *v4; // edi@8
  PgWinBut *v5; // edi@13
  PgWinBut *v6; // edi@18
  PgWinBut *v7; // edi@23
  PgWinAbbreviateText *v8; // edi@28
  PgWinText *v9; // edi@33
  PgWinText *v10; // edi@38
  PgWinSpr *v11; // edi@43
  PgWinSpr *v12; // edi@48
  PopupMenuWin *v13; // edi@53
  PopupMenuWin *v14; // edi@57
  PgWinText *v15; // edi@61
  PgWinSpr *v16; // edi@65
  PgWinBut *v17; // edi@69
  PgWinBut *v18; // edi@73
  PgWinBut *v19; // edi@77
  PgWinSpr *v20; // edi@81
  PgWinSpr *v21; // edi@85
  PgWinSpr *v22; // edi@89
  PgWinSpr *v23; // edi@93
  PgWinText *v24; // edi@97
  PgWinText *v25; // edi@101
  PgWinAbbreviateText *v26; // edi@105
  signed int v27; // [sp+4h] [bp-10h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionWin::_vftable_;
  v2 = (char *)this->m_spEntry;
  v27 = 20;
  do
  {
    v3 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v27;
  }
  while ( v27 );
  v4 = v1->m_spMovingSlorSpr.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spMovingSlorSpr.m_pObject = 0;
  }
  v5 = v1->m_spCreateBtn.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spCreateBtn.m_pObject = 0;
  }
  v6 = v1->m_spLeaveBtn.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v1->m_spLeaveBtn.m_pObject = 0;
  }
  v7 = v1->m_spInviteBtn.m_pObject;
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v7 )
      v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v7,
        1u);
    v1->m_spInviteBtn.m_pObject = 0;
  }
  v8 = v1->m_spNameText.m_pObject;
  if ( v8 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v8,
        1u);
    v1->m_spNameText.m_pObject = 0;
  }
  v9 = v1->m_spLevelText.m_pObject;
  if ( v9 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v9,
        1u);
    v1->m_spLevelText.m_pObject = 0;
  }
  v10 = v1->m_spClassText.m_pObject;
  if ( v10 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v10,
        1u);
    v1->m_spClassText.m_pObject = 0;
  }
  v11 = v1->m_spMemberMark.m_pObject;
  if ( v11 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v11,
        1u);
    v1->m_spMemberMark.m_pObject = 0;
  }
  v12 = v1->m_spLootingMark.m_pObject;
  if ( v12 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v12 )
      v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v12,
        1u);
    v1->m_spLootingMark.m_pObject = 0;
  }
  v13 = v1->m_spItemGradePopupMenu.m_pObject;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v13,
      1u);
  v14 = v1->m_spLootTypePopupMenu.m_pObject;
  if ( v14
    && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v14,
      1u);
  v15 = v1->m_spLootName.m_pObject;
  if ( v15
    && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v15,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spText,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBtn,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v16 = v1->m_spCreateSpr.m_pObject;
  if ( v16
    && !InterlockedDecrement((volatile LONG *)&v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v16 )
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v16,
      1u);
  v17 = v1->m_spInviteBtn.m_pObject;
  if ( v17
    && !InterlockedDecrement((volatile LONG *)&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v17 )
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v17,
      1u);
  v18 = v1->m_spLeaveBtn.m_pObject;
  if ( v18
    && !InterlockedDecrement((volatile LONG *)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v18 )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v18,
      1u);
  v19 = v1->m_spCreateBtn.m_pObject;
  if ( v19
    && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v19 )
    v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v19,
      1u);
  v20 = v1->m_spMovingSlorSpr.m_pObject;
  if ( v20
    && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v20 )
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v20,
      1u);
  v21 = v1->m_spClassBar.m_pObject;
  if ( v21
    && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v21 )
    v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v21,
      1u);
  v22 = v1->m_spLootingMark.m_pObject;
  if ( v22
    && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v22 )
    v22->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v22,
      1u);
  v23 = v1->m_spMemberMark.m_pObject;
  if ( v23
    && !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v23 )
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v23,
      1u);
  v24 = v1->m_spClassText.m_pObject;
  if ( v24
    && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v24 )
    v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v24,
      1u);
  v25 = v1->m_spLevelText.m_pObject;
  if ( v25
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v25,
      1u);
  v26 = v1->m_spNameText.m_pObject;
  if ( v26
    && !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v26 )
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v26,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spEntry,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D2AF8: using guessed type int (__stdcall *ExpeditionWin___vftable_)(int uiFlags);
// 9D2B14: using guessed type int (__thiscall *ExpeditionWin___vftable_)(void *p, char);

//----- (00703B20) --------------------------------------------------------
void __thiscall ExpeditionWin::ClickReset(ExpeditionWin *this)
{
  ExpeditionWin *v1; // esi@1
  unsigned int v2; // eax@2

  v1 = this;
  if ( this->m_bIsSelecteSlot )
  {
    v2 = this->m_uiSelectedNumber[0];
    this->m_bIsSelecteSlot = 0;
    *(_BYTE *)(*(&this->m_uiSelectPartyID + v2) + 412) = 0;
    ((void (__stdcall *)(_DWORD))this->m_spMovingSlorSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
  v1->m_uiSelectedNumber[1] = 0;
  v1->m_uiSelectedNumber[0] = 0;
  v1->m_uiSelectPartyID = 4;
}

//----- (00703B80) --------------------------------------------------------
void __thiscall ExpeditionWin::DirectMessage(ExpeditionWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 15 )
  {
    switch ( *(_DWORD *)pvBody )
    {
      case 0x404:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText),
          0);
        break;
      case 0x405:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText),
          1);
        break;
      case 0x406:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText),
          2);
        break;
      case 0x408:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pcToolTipWinText),
          3);
        break;
      case 0x40E:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          0,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipParentWin));
        break;
      case 0x40F:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          1,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipParentWin));
        break;
      case 0x410:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          2,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipParentWin));
        break;
      case 0x411:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          3,
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipParentWin));
        break;
      default:
        return;
    }
  }
}

//----- (00703C90) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::_ExpeditionPartyWin(ExpeditionPartyWin *this)
{
  char *v1; // edi@1
  char *v2; // ebx@1
  int v3; // esi@2
  int v4; // esi@7
  int v5; // esi@12
  int v6; // esi@18
  int v7; // esi@23
  int v8; // esi@29
  PgWinSpr *v9; // esi@35
  PgWinBut *v10; // esi@40
  PgWinBut *v11; // esi@45
  PgWinBut *v12; // esi@50
  PgWinBut *v13; // esi@54
  PgWinSpr *v14; // esi@58
  ExpeditionPartyWin *thisa; // [sp+0h] [bp-18h]@1
  signed int v16; // [sp+4h] [bp-14h]@1
  signed int v17; // [sp+8h] [bp-10h]@17

  thisa = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionPartyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionPartyWin::_vftable_;
  v1 = (char *)this->m_apkAbstateBufIcon;
  v2 = (char *)this->m_spParticipant;
  v16 = 5;
  do
  {
    v3 = *((_DWORD *)v2 - 5);
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *((_DWORD *)v2 - 5) = 0;
    }
    v4 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)v2 = 0;
    }
    v5 = *((_DWORD *)v2 + 5);
    if ( v5 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      *((_DWORD *)v2 + 5) = 0;
    }
    v17 = 10;
    do
    {
      v6 = *((_DWORD *)v1 - 50);
      if ( v6 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
        *((_DWORD *)v1 - 50) = 0;
      }
      v7 = *(_DWORD *)v1;
      if ( *(_DWORD *)v1 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v7)(v7, 1);
        *(_DWORD *)v1 = 0;
      }
      v1 += 4;
      --v17;
    }
    while ( v17 );
    v8 = *((_DWORD *)v2 - 10);
    if ( v8 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
      *((_DWORD *)v2 - 10) = 0;
    }
    PgWinMgr::DestroyWin(&Pgg_kWinMgr, *((PgWin **)v2 + 118));
    v2 += 4;
    --v16;
  }
  while ( v16 );
  v9 = thisa->m_spPanel.m_pObject;
  if ( v9 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v9,
        1u);
    thisa->m_spPanel.m_pObject = 0;
  }
  v10 = thisa->m_spMaxBtn.m_pObject;
  if ( v10 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v10 )
      v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v10,
        1u);
    thisa->m_spMaxBtn.m_pObject = 0;
  }
  v11 = thisa->m_spMinBtn.m_pObject;
  if ( v11 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v11,
        1u);
    thisa->m_spMinBtn.m_pObject = 0;
  }
  _eh_vector_destructor_iterator_(
    thisa->m_spPopupMenu,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v12 = thisa->m_spMaxBtn.m_pObject;
  if ( v12
    && !InterlockedDecrement((volatile LONG *)&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v12,
      1u);
  v13 = thisa->m_spMinBtn.m_pObject;
  if ( v13
    && !InterlockedDecrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v13,
      1u);
  v14 = thisa->m_spPanel.m_pObject;
  if ( v14
    && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v14,
      1u);
  _eh_vector_destructor_iterator_(
    thisa->m_apkAbstateBufIcon,
    4u,
    50,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    thisa->m_apkAbstateBuf,
    4u,
    50,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    thisa->m_spParticipantName,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    thisa->m_spParticipant,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    thisa->m_spMember,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    thisa->m_spLRBut,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  PgWinFrame::_PgWinFrame(&thisa->baseclass_0);
}
// 9D2D38: using guessed type int (__stdcall *ExpeditionPartyWin___vftable_)(int uiFlags);
// 9D2D54: using guessed type int (__thiscall *ExpeditionPartyWin___vftable_)(void *p, char);

//----- (00703FF0) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::DirectMessage(ExpeditionPartyWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  ExpeditionPartyWin *v4; // edi@1
  signed int v5; // eax@3
  PgWinSpr *v6; // ecx@9
  void (__thiscall *v7)(_DWORD, _DWORD, _DWORD); // edx@13
  int v8; // eax@14
  int v9; // eax@16
  int v10; // ecx@18
  int iSy; // [sp+8h] [bp-8h]@13
  int iSx; // [sp+Ch] [bp-4h]@13

  v4 = this;
  if ( (unsigned __int8)(*(int (__thiscall **)(char *))(*((_DWORD *)this - 58) + 260))((char *)this - 232) )
  {
    if ( iMsgTag == 15 )
    {
      v5 = 0;
      switch ( *(_DWORD *)pvBody )
      {
        case 0x3F7:
          v5 = 1;
          break;
        case 0x3F8:
          v5 = 2;
          break;
        case 0x3F9:
          v5 = 4;
          break;
        case 0x3FA:
          v5 = 8;
          break;
        case 0x3FB:
          v5 = 16;
          break;
        default:
          break;
      }
      v6 = v4->m_apkAbstateBuf[4][9].m_pObject;
      if ( *((_BYTE *)pvBody + 4) )
        v4->m_apkAbstateBufIcon[0][(_DWORD)v6 + 6].m_pObject = (unsigned int)v4->m_apkAbstateBufIcon[0][(_DWORD)v6 + 6].m_pObject | v5;
      else
        v4->m_apkAbstateBufIcon[0][(_DWORD)v6 + 6].m_pObject = (unsigned int)v4->m_apkAbstateBufIcon[0][(_DWORD)v6 + 6].m_pObject & ~v5;
    }
    if ( pkFrom )
    {
      v7 = *(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*((_DWORD *)v4 - 58) + 224);
      iSx = PgWin::ms_iMsX.x;
      iSy = PgWin::ms_iMsY;
      v7((char *)v4 - 232, &iSx, &iSy);
      if ( iSx >= 0 )
      {
        v8 = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 144))((char *)v4 - 232);
        if ( iSx < v8 )
        {
          if ( iSy >= 0 )
          {
            v9 = (*(int (__thiscall **)(char *))(*((_DWORD *)v4 - 58) + 148))((char *)v4 - 232);
            if ( iSy < v9 )
            {
              if ( iMsgTag == 4 )
              {
                v10 = *(_DWORD *)(LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0])
                                + 1228);
                if ( v10 )
                {
                  if ( *(_BYTE *)(v10 + 344) )
                  {
                    *(_BYTE *)(v10 + 344) = 0;
                    ExpeditionWin::ClickReset((ExpeditionWin *)v10);
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

//----- (00704130) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::AlignBuf(ExpeditionPartyWin *this, int row, int column)
{
  char *v3; // esi@1
  signed int v4; // edi@2
  int v5; // ebx@3
  int v6; // ST20_4@3
  int v7; // eax@3
  int v8; // ebx@3
  int v9; // ST20_4@3
  int v10; // eax@3
  int v11; // ebx@3
  int v12; // ST20_4@3
  int v13; // eax@3
  int v14; // ebx@3
  int v15; // ST20_4@3
  int v16; // eax@3
  signed int v17; // [sp+Ch] [bp-14h]@1
  char *v18; // [sp+10h] [bp-10h]@1
  ExpeditionPartyWin *v19; // [sp+14h] [bp-Ch]@1
  char *v20; // [sp+18h] [bp-8h]@1
  char *columna; // [sp+2Ch] [bp+Ch]@1

  v19 = this;
  v3 = (char *)this->m_apkAbstateBufIcon;
  v18 = (char *)&this->m_spParticipant[column];
  v20 = (char *)this->m_spParticipant;
  columna = (char *)&this->m_spParticipant[column];
  v17 = 5;
  do
  {
    (*(void (**)(void))(**(_DWORD **)v20 + 168))();
    v4 = 0;
    do
    {
      v5 = **((_DWORD **)v3 - 50);
      v6 = *((_DWORD *)v3 - 50);
      v7 = (*(int (**)(void))(**(_DWORD **)v18 + 164))();
      (*(void (__thiscall **)(int, unsigned int))(v5 + 172))(v6, v4 + v7 + v19->m_uiHpBarWidth + 1);
      v8 = **((_DWORD **)v3 - 50);
      v9 = *((_DWORD *)v3 - 50);
      v10 = (*(int (**)(void))(**(_DWORD **)columna + 168))();
      (*(void (__thiscall **)(int, int))(v8 + 176))(v9, v10);
      v11 = **(_DWORD **)v3;
      v12 = *(_DWORD *)v3;
      v13 = (*(int (**)(void))(**(_DWORD **)v18 + 164))();
      (*(void (__thiscall **)(int, unsigned int))(v11 + 172))(v12, v4 + v13 + v19->m_uiHpBarWidth + 3);
      v14 = **(_DWORD **)v3;
      v15 = *(_DWORD *)v3;
      v16 = (*(int (**)(void))(**(_DWORD **)columna + 168))();
      (*(void (__thiscall **)(int, int))(v14 + 176))(v15, v16 + 2);
      v4 += 20;
      v3 += 4;
    }
    while ( v4 < 200 );
    v20 += 4;
    columna += 4;
    --v17;
  }
  while ( v17 );
  v19->m_uiVisiableNums = row;
}

//----- (00704260) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::SetOption(ExpeditionPartyWin *this, unsigned int uiIndex, unsigned int uiOpt)
{
  ExpeditionPartyWin *v3; // edi@1
  char *v4; // esi@1
  int v5; // esi@4
  int v6; // esi@7
  int v7; // esi@10
  int v8; // esi@13
  DirectUserMsgBody_PopupMenuSetCheckBox kBody; // [sp+Ch] [bp-8h]@1

  v3 = this;
  v4 = (char *)&this->m_spPopupMenu[uiIndex].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1015;
  kBody.bCheck = uiOpt & 1;
  if ( *((_DWORD *)v4 + 1) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v4 + 1) + 4))(
      16,
      &kBody,
      v4);
    if ( *((_DWORD *)v4 + 1) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(**((_DWORD **)v4 + 1) + 16))(
        16,
        &kBody,
        v4);
  }
  (*(void (__thiscall **)(char *, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, char *))(*(_DWORD *)v4 + 16))(
    v4,
    16,
    &kBody,
    v4);
  v5 = (int)&v3->m_spPopupMenu[uiIndex].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1016;
  kBody.bCheck = (uiOpt >> 1) & 1;
  if ( *(_DWORD *)(v5 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 4))(
      16,
      &kBody,
      v5);
    if ( *(_DWORD *)(v5 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v5 + 4) + 16))(
        16,
        &kBody,
        v5);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v5 + 16))(
    v5,
    16,
    &kBody,
    v5);
  v6 = (int)&v3->m_spPopupMenu[uiIndex].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1017;
  kBody.bCheck = (uiOpt >> 2) & 1;
  if ( *(_DWORD *)(v6 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 4))(
      16,
      &kBody,
      v6);
    if ( *(_DWORD *)(v6 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v6 + 4) + 16))(
        16,
        &kBody,
        v6);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v6 + 16))(
    v6,
    16,
    &kBody,
    v6);
  v7 = (int)&v3->m_spPopupMenu[uiIndex].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1018;
  kBody.bCheck = (uiOpt >> 3) & 1;
  if ( *(_DWORD *)(v7 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 4))(
      16,
      &kBody,
      v7);
    if ( *(_DWORD *)(v7 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v7 + 4) + 16))(
        16,
        &kBody,
        v7);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v7 + 16))(
    v7,
    16,
    &kBody,
    v7);
  v8 = (int)&v3->m_spPopupMenu[uiIndex].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8;
  kBody.iPopupMenuID = 1019;
  kBody.bCheck = (uiOpt >> 4) & 1;
  if ( *(_DWORD *)(v8 + 4) )
  {
    (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v8 + 4) + 4))(
      16,
      &kBody,
      v8);
    if ( *(_DWORD *)(v8 + 4) )
      (*(void (__stdcall **)(signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(**(_DWORD **)(v8 + 4) + 16))(
        16,
        &kBody,
        v8);
  }
  (*(void (__thiscall **)(int, signed int, DirectUserMsgBody_PopupMenuSetCheckBox *, int))(*(_DWORD *)v8 + 16))(
    v8,
    16,
    &kBody,
    v8);
  v3->m_uiBuffViewOption[uiIndex] = uiOpt;
}

//----- (00704460) --------------------------------------------------------
void __thiscall ExpeditionLootSelectWin::OnSlideBar(ExpeditionLootSelectWin *this)
{
  ExpeditionLootSelectWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pSeletMemberList;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarEx;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
      v1->m_pSeletMemberList->m_nViewStartPos = v1->m_pkSlideBarEx->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pSeletMemberList);
    }
  }
}

//----- (007044B0) --------------------------------------------------------
void __thiscall ExpeditionLootOptionWin::ExpeditionLootOptionWin(ExpeditionLootOptionWin *this)
{
  ExpeditionLootOptionWin *v1; // esi@1
  PopupMenuWin *v2; // edi@1
  PopupMenuWin *v3; // edi@6

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionLootOptionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionLootOptionWin::_vftable_;
  v1->m_spPopupMenu.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spBtn,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spText,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spDicePopupMenu.m_pObject = 0;
  v1->m_spLootName.m_pObject = 0;
  v2 = v1->m_spPopupMenu.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spPopupMenu.m_pObject = 0;
  }
  v3 = v1->m_spDicePopupMenu.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v3,
          1u);
    }
    v1->m_spDicePopupMenu.m_pObject = 0;
  }
}
// 9D2F78: using guessed type int (__stdcall *ExpeditionLootOptionWin___vftable_)(int uiFlags);
// 9D2F94: using guessed type int (__thiscall *ExpeditionLootOptionWin___vftable_)(void *p, char);

//----- (007045C0) --------------------------------------------------------
void __thiscall ExpeditionLootOptionWin::_ExpeditionLootOptionWin(ExpeditionLootOptionWin *this)
{
  ExpeditionLootOptionWin *v1; // ebx@1
  int v2; // edi@1
  int v3; // esi@2
  int v4; // esi@7
  PgWinText *v5; // esi@13
  PgWinText *v6; // esi@18
  LOOTING_TYPE v7; // esi@23
  PgWinText *v8; // esi@28
  PopupMenuWin *v9; // esi@32
  PopupMenuWin *v10; // esi@36
  signed int v11; // [sp+4h] [bp-10h]@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionLootOptionWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionLootOptionWin::_vftable_;
  PgWinMgr::DestroyWin(&Pgg_kWinMgr, &this->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  v2 = (int)v1->m_spText;
  v11 = 5;
  do
  {
    v3 = *(_DWORD *)(v2 - 20);
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      *(_DWORD *)(v2 - 20) = 0;
    }
    v4 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v11;
  }
  while ( v11 );
  v5 = v1->m_spLootName.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spLootName.m_pObject = 0;
  }
  v6 = v1->m_spText[0].m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v6,
        1u);
    v1->m_spText[0].m_pObject = 0;
  }
  v7 = v1->m_eLootType[0];
  if ( v7 )
  {
    if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 )
      (**(void (__thiscall ***)(LOOTING_TYPE, signed int))v7)(v7, 1);
    v1->m_eLootType[0] = 0;
  }
  v8 = v1->m_spLootName.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  v9 = v1->m_spDicePopupMenu.m_pObject;
  if ( v9
    && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v9,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spText,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBtn,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v10 = v1->m_spPopupMenu.m_pObject;
  if ( v10
    && !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v10,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D2F78: using guessed type int (__stdcall *ExpeditionLootOptionWin___vftable_)(int uiFlags);
// 9D2F94: using guessed type int (__thiscall *ExpeditionLootOptionWin___vftable_)(void *p, char);

//----- (007047D0) --------------------------------------------------------
void __thiscall ExpeditionLootOptionWin::DirectMessage(ExpeditionLootOptionWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  if ( iMsgTag == 15 )
  {
    switch ( *(_DWORD *)pvBody )
    {
      case 0x404:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
          0);
        break;
      case 0x405:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
          1);
        break;
      case 0x406:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
          2);
        break;
      case 0x408:
        GameFrameWork::NcRaidLootingTypeReq(
          LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Rotate.m_pEntry[1][0]),
          LOBYTE(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[1][0]),
          3);
        break;
      default:
        return;
    }
  }
}

//----- (00704850) --------------------------------------------------------
void __thiscall ExpeditionLootOptionWin::SetLooter(ExpeditionLootOptionWin *this, const char *name)
{
  if ( name )
    ((void (__stdcall *)(_DWORD))this->m_spLootName.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(name);
}

//----- (00704870) --------------------------------------------------------
void __thiscall EntryIconWin::EntryIconWin(EntryIconWin *this)
{
  EntryIconWin *v1; // esi@1

  v1 = this;
  PgWin::PgWin(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&EntryIconWin::_vftable_;
  v1->baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&EntryIconWin::_vftable_;
  v1->m_spNameText.m_pObject = 0;
  v1->m_spLevelText.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spClassBar,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spClassText.m_pObject = 0;
  v1->m_spMemberMark.m_pObject = 0;
  v1->m_spLootingMark.m_pObject = 0;
  v1->m_spPosBar.m_pObject = 0;
  v1->m_spBackImagePlane.m_pObject = 0;
  v1->m_spSubImagePlane.m_pObject = 0;
  v1->m_spMtrlProp.m_pObject = 0;
  v1->m_spFixedMtrlProp.m_pObject = 0;
  NiObjectNET::NiObjectNET(&v1->m_spAlphaProp.baseclass_0.baseclass_0);
  v1->m_spAlphaProp.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&NiAlphaProperty::_vftable_;
  v1->m_spAlphaProp.m_ucAlphaTestRef = 0;
  v1->m_spAlphaProp.m_uFlags = 236;
  v1->m_spLRBut.m_pObject = 0;
  v1->m_kAlphaControl.fTimeLeftToAppear = 1.0;
  v1->m_bIsKeep = 0;
  v1->m_kAlphaControl.fAlphaValue = 0.0;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// 9D2910: using guessed type int (__stdcall *EntryIconWin___vftable_)(int uiFlags);
// 9D292C: using guessed type int (__thiscall *EntryIconWin___vftable_)(void *p, char);

//----- (00704970) --------------------------------------------------------
void __thiscall EntryIconWin::OnCommand(EntryIconWin *this, unsigned int wParam, int lParam)
{
  EntryIconWin *v3; // esi@1
  PgWin *v4; // eax@2
  unsigned int v5; // edx@3

  v3 = this;
  if ( wParam == this->m_uiCmdMsg )
  {
    v4 = PgWin::GetParentWin(&this->baseclass_0);
    if ( !v4 )
      return;
    v5 = v3->m_uiCmdMsg;
    goto LABEL_7;
  }
  if ( wParam == this->m_uiRCmdMsg )
  {
    v4 = PgWin::GetParentWin(&this->baseclass_0);
    if ( v4 )
    {
      v5 = v3->m_uiRCmdMsg;
LABEL_7:
      PgWin::PostCommandMsg(&v3->baseclass_0, v4, v5, v3->m_uiInvIndex);
      return;
    }
  }
}

//----- (007049C0) --------------------------------------------------------
void __thiscall EntryIconWin::ShowLeaderLooterMark(EntryIconWin *this)
{
  EntryIconWin *v1; // esi@1
  RaidMemberInfo *v2; // eax@1
  RaidMemberInfo *v3; // edi@1
  _BYTE v4[20]; // ST00_20@2
  PgWin *v5; // ebx@3
  char *v6; // eax@3
  void *(__thiscall *v7)(NiRefObject *, unsigned int); // eax@3
  _BYTE v8[20]; // ST00_20@4
  PgWin *v9; // ebx@5
  char *v10; // eax@5
  _BYTE v11[20]; // ST00_20@8
  PgWin *v12; // edi@10
  char *v13; // eax@10
  void *(__thiscall *v14)(NiRefObject *, unsigned int); // eax@10
  signed int v15; // [sp+10h] [bp-10h]@5
  float v16; // [sp+10h] [bp-10h]@10

  v1 = this;
  v2 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, this->m_uiInvIndex - 1);
  v3 = v2;
  if ( !v2 )
  {
    ((void (__stdcall *)(_DWORD))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v1->m_spLootingMark.m_pObject,
      0);
    return;
  }
  *(_DWORD *)v4 = *(_DWORD *)&v2->m_kCharID.n5_name[0];
  *(_QWORD *)&v4[4] = *(_QWORD *)&v2->m_kCharID.n5_name[4];
  *(_QWORD *)&v4[12] = *(_QWORD *)&v2->m_kCharID.n5_name[12];
  if ( RaidInfo::IsLeader(&g_kRaidinfo, *(Name5 *)v4) )
  {
    v5 = (PgWin *)v1->m_spMemberMark.m_pObject;
    v6 = TextData2::Get(0x84936ABEu);
    PgWin::SetToolTipWinText(v5, v6);
    v1->m_spMemberMark.m_pObject->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    ((void (__stdcall *)(signed int))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v7 = v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
  }
  else
  {
    *(_DWORD *)v8 = *(_DWORD *)&v3->m_kCharID.n5_name[0];
    *(_QWORD *)&v8[4] = *(_QWORD *)&v3->m_kCharID.n5_name[4];
    *(_QWORD *)&v8[12] = *(_QWORD *)&v3->m_kCharID.n5_name[12];
    if ( RaidInfo::IsSubLeader(&g_kRaidinfo, *(Name5 *)v8) )
    {
      v9 = (PgWin *)v1->m_spMemberMark.m_pObject;
      v10 = TextData2::Get(0xDDE0AFBDu);
      PgWin::SetToolTipWinText(v9, v10);
      v1->m_spMemberMark.m_pObject->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
      ((void (__stdcall *)(signed int))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
      ((void (__stdcall *)(signed int))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v7 = v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
      v15 = 1;
      goto LABEL_8;
    }
    v7 = v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
  }
  v15 = 0;
LABEL_8:
  ((void (__stdcall *)(signed int))v7)(v15);
  *(_DWORD *)v11 = *(_DWORD *)&v3->m_kCharID.n5_name[0];
  *(_QWORD *)&v11[4] = *(_QWORD *)&v3->m_kCharID.n5_name[4];
  *(_QWORD *)&v11[12] = *(_QWORD *)&v3->m_kCharID.n5_name[12];
  if ( RaidInfo::IsLooter(&g_kRaidinfo, *(Name5 *)v11) && g_kRaidinfo.m_eLootType == 2 )
  {
    v12 = (PgWin *)v1->m_spLootingMark.m_pObject;
    v13 = TextData2::Get(0x799878B4u);
    PgWin::SetToolTipWinText(v12, v13);
    v1->m_spLootingMark.m_pObject->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    ((void (__stdcall *)(signed int))v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor)(1);
    ((void (__stdcall *)(signed int))v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    v14 = v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor;
    v16 = 1.0;
  }
  else
  {
    v14 = v1->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
    v16 = 0.0;
  }
  ((void (__stdcall *)(_DWORD))v14)(LODWORD(v16));
  ((void (__stdcall *)(_DWORD))v1->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(1.0);
}

//----- (00704C50) --------------------------------------------------------
bool __thiscall ExpeditionMemberAddWin::Create(ExpeditionMemberAddWin *this, PgFrameWork *pkFrameWork)
{
  ExpeditionMemberAddWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiTexturePalette *v4; // edi@1
  char *v5; // eax@3
  NiAVObject *v6; // eax@4
  NiProperty *v7; // eax@4
  NiProperty *v8; // edi@4
  NiRefObjectVtbl *v9; // eax@6
  PgSprData *v10; // eax@8
  NiNode *v11; // esi@11
  NiSourceTexture *v13; // eax@16
  PgSprData *v14; // eax@19
  PgWinSpr *v15; // eax@19
  PgFont *v16; // eax@21
  unsigned int v17; // edi@21
  unsigned int v18; // ST14_4@21
  int v19; // eax@21
  EditWin *v20; // edi@21
  char *v21; // eax@21
  PgSprData *v22; // edi@21
  NiPointer<PgSprData::PgHitTester> *v23; // edx@21
  unsigned int v24; // edi@21
  PgFont *v25; // eax@21
  PgWinText *v26; // edi@21
  char *v27; // eax@21
  PgSprData *v28; // edi@21
  NiPointer<PgSprData::PgHitTester> *v29; // edx@21
  unsigned int v30; // edi@21
  unsigned int v31; // ebx@21
  PgFont *v32; // eax@21
  PgWinText *v33; // edi@21
  NiRefObjectVtbl *v34; // ebx@21
  char *v35; // eax@21
  EditWin *v36; // eax@21
  NiTexturingProperty *v37; // edi@21
  NiNode *v38; // edi@23
  const char *v39; // [sp+24h] [bp-50h]@17
  int *v40; // [sp+28h] [bp-4Ch]@17
  int *v41; // [sp+2Ch] [bp-48h]@17
  NiSourceTexture *v42; // [sp+30h] [bp-44h]@17
  UIUtil ui; // [sp+44h] [bp-30h]@21
  NiPointer<NiTexturingProperty> spTexProp; // [sp+58h] [bp-1Ch]@4
  int uiLeft; // [sp+5Ch] [bp-18h]@8
  int uiTop; // [sp+60h] [bp-14h]@8
  NiPointer<NiNode> spNode; // [sp+64h] [bp-10h]@1
  int v48; // [sp+70h] [bp-4h]@1
  NiRefObjectVtbl *pkFrameWorka; // [sp+7Ch] [bp+8h]@21
  unsigned int pkFrameWorkb; // [sp+7Ch] [bp+8h]@21
  NiRefObjectVtbl *pkFrameWorkc; // [sp+7Ch] [bp+8h]@21

  v2 = this;
  v3 = 0;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v4 = dword_B70448;
  v48 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\MessageWin.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v7 = NiAVObject::GetProperty(v6, 8);
  v8 = v7;
  spTexProp.m_pObject = (NiTexturingProperty *)v7;
  if ( v7 )
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v9 = v8[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v48) = 1;
  if ( v9 )
    v3 = (NiSourceTexture *)v9[1].__vecDelDtor;
  v10 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Panel01", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v10, 0, pkFrameWork, "ExpeditionMemberAddWin", 0) )
  {
    LOBYTE(v48) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v11 = spNode.m_pObject;
    v48 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    return 0;
  }
  v13 = MenuTexMgr::GetTexture(0x13u);
  if ( v13 )
  {
    v42 = v13;
    v41 = &uiTop;
    v40 = &uiLeft;
    v39 = "Theme";
  }
  else
  {
    v42 = 0;
    v41 = &uiTop;
    v40 = &uiLeft;
    v39 = "Theme";
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v39, v40, v41, v42);
  v15 = PgWinSpr::CreateWin(uiLeft, uiTop, v14, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v15,
      0);
  v16 = Font::Get(0);
  v17 = v16->m_uiDefHeight;
  v18 = v16->m_uiDefHeight;
  v19 = ((int (__thiscall *)(ExpeditionMemberAddWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2);
  v20 = EditWin::CreateWin(
          8,
          v17 + 3,
          v19 - 16,
          v18,
          &v2->baseclass_0.baseclass_0.baseclass_0,
          MULTILINE,
          0x64u,
          1u,
          1,
          0,
          1);
  EditWin::SetImeStatus(v20, IS_KOREAN);
  pkFrameWorka = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = TextData2::Get(0x89694B76u);
  pkFrameWorka[115].__vecDelDtor((NiRefObject *)v20, (unsigned int)v21);
  EditWin::SetEnable(v20, 0);
  v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor02", &uiLeft, &uiTop, v3);
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "BtnClick02");
  PgSprData::Add(v22, &spNode.m_pObject->baseclass_0, "BtnOver02");
  PgWinBut::CreateWin(uiLeft, uiTop, v22, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
  v23 = v22->m_akHitTester.m_pBase;
  v24 = v23->m_pObject->m_uiHeight;
  pkFrameWorkb = v23->m_pObject->m_uiWidth;
  v25 = Font::Get(0);
  v26 = PgWinText::CreateWin(uiLeft, uiTop + 1, pkFrameWorkb, v24, v25, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v26,
    5u);
  pkFrameWorkc = v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = TextData::Get(0x43706657u);
  pkFrameWorkc[118].__vecDelDtor((NiRefObject *)v26, (unsigned int)v27);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BtnNor03", &uiLeft, &uiTop, v3);
  PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "BtnClick03");
  PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "BtnOver03");
  PgWinBut::CreateWin(uiLeft, uiTop, v28, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  v29 = v28->m_akHitTester.m_pBase;
  v30 = v29->m_pObject->m_uiHeight;
  v31 = v29->m_pObject->m_uiWidth;
  v32 = Font::Get(0);
  v33 = PgWinText::CreateWin(uiLeft, uiTop + 1, v31, v30, v32, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v33,
    5u);
  v34 = v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v35 = TextData::Get(0x88A297E1u);
  v34[118].__vecDelDtor((NiRefObject *)v33, (unsigned int)v35);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v48) = 2;
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v36 = UIUtil::CreateEdit(&ui, "LotInput", 16, NORMAL, 0, 1);
  v2->m_pkInputBox = v36;
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
    (NiRefObject *)v36,
    (unsigned int)&unk_9D1A85);
  ((void (__stdcall *)(_DWORD))v2->m_pkInputBox->m_spEditWin.m_pObject->baseclass_0.vfptr[15].__vecDelDtor)(0);
  ((void (__thiscall *)(ExpeditionMemberAddWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v48) = 1;
  UIUtil::_UIUtil(&ui);
  v37 = spTexProp.m_pObject;
  LOBYTE(v48) = 0;
  if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v37, 1u);
  v38 = spNode.m_pObject;
  v48 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v38 )
    v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (007050F0) --------------------------------------------------------
void __thiscall ExpeditionWin::ExpeditionWin(ExpeditionWin *this)
{
  ExpeditionWin *v1; // esi@1
  PgWinAbbreviateText *v2; // edi@1
  PgWinText *v3; // edi@6
  PgWinText *v4; // edi@11
  PgWinSpr *v5; // edi@16
  PgWinSpr *v6; // edi@21

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_spEntry,
    4u,
    20,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spNameText.m_pObject = 0;
  v1->m_spLevelText.m_pObject = 0;
  v1->m_spClassText.m_pObject = 0;
  v1->m_spMemberMark.m_pObject = 0;
  v1->m_spLootingMark.m_pObject = 0;
  v1->m_spClassBar.m_pObject = 0;
  v1->m_spMovingSlorSpr.m_pObject = 0;
  v1->m_spCreateBtn.m_pObject = 0;
  v1->m_spLeaveBtn.m_pObject = 0;
  v1->m_spInviteBtn.m_pObject = 0;
  v1->m_spCreateSpr.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spBtn,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spText,
    4u,
    2,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spLootName.m_pObject = 0;
  v1->m_spLootTypePopupMenu.m_pObject = 0;
  v1->m_spItemGradePopupMenu.m_pObject = 0;
  v1->m_bIsSelect = 0;
  v1->m_bIsSelecteSlot = 0;
  v1->m_uiSelectedNumber[1] = 0;
  v1->m_uiSelectedNumber[0] = 0;
  v1->m_uiSelectPartyID = 4;
  v2 = v1->m_spNameText.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_spNameText.m_pObject = 0;
  }
  v3 = v1->m_spLevelText.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_spLevelText.m_pObject = 0;
  }
  v4 = v1->m_spClassText.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_spClassText.m_pObject = 0;
  }
  v5 = v1->m_spMemberMark.m_pObject;
  if ( v5 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v5,
        1u);
    v1->m_spMemberMark.m_pObject = 0;
  }
  v6 = v1->m_spLootingMark.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v6,
          1u);
    }
    v1->m_spLootingMark.m_pObject = 0;
  }
}
// 9D2AF8: using guessed type int (__stdcall *ExpeditionWin___vftable_)(int uiFlags);
// 9D2B14: using guessed type int (__thiscall *ExpeditionWin___vftable_)(void *p, char);

//----- (00705300) --------------------------------------------------------
void __thiscall ExpeditionWin::OnCommand(ExpeditionWin *this, unsigned int wParam, int lParam)
{
  ExpeditionWin *v3; // esi@1
  PgWin *v4; // esi@3
  PgFrameWork *v5; // esi@11
  char *v6; // eax@11
  unsigned int v7; // edi@19
  PgWin *v8; // ebx@20
  Char *v9; // eax@27
  RaidMemberInfo *v10; // eax@32
  RaidMemberInfo *v11; // edi@32
  _BYTE v12[20]; // ST00_20@33
  void *(__thiscall *v13)(NiRefObject *, unsigned int); // eax@34
  _BYTE v14[20]; // ST00_20@36
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@38
  _BYTE v16[20]; // ST00_20@39
  bool v17; // zf@39
  void *(__thiscall *v18)(NiRefObject *, unsigned int); // edx@50
  void *(__thiscall *v19)(NiRefObject *, unsigned int); // edx@51
  PgWinText *v20; // ebx@54
  NiRefObjectVtbl *v21; // edi@54
  int v22; // eax@54
  PgWinAbbreviateText *v23; // ebx@54
  NiRefObjectVtbl *v24; // edi@54
  int v25; // eax@54
  unsigned int v26; // eax@57
  unsigned int v27; // ecx@57
  const char *v28; // eax@65
  unsigned int v29; // edi@65
  PgWinBut *v30; // edi@73
  int v31; // ebx@73
  int v32; // ebx@73
  int v33; // eax@73
  int v34; // edi@73
  int v35; // eax@73
  int v36; // edi@73
  int v37; // eax@73
  PopupMenuWin *v38; // esi@73
  PgWinBut *v39; // edi@77
  int v40; // ebx@77
  int v41; // ebx@77
  int v42; // eax@77
  int v43; // edi@77
  int v44; // eax@77
  int v45; // edi@77
  int v46; // eax@77
  unsigned int v47; // [sp+Ch] [bp-10h]@10
  signed int v48; // [sp+Ch] [bp-10h]@35
  float v49; // [sp+Ch] [bp-10h]@38
  signed int v50; // [sp+Ch] [bp-10h]@43
  int v51; // [sp+10h] [bp-Ch]@0
  D3DXCOLOR *v52; // [sp+10h] [bp-Ch]@51
  int wParama; // [sp+24h] [bp+8h]@73
  int wParamb; // [sp+24h] [bp+8h]@77
  PopupMenuWin *lParama; // [sp+28h] [bp+Ch]@73
  PopupMenuWin *lParamb; // [sp+28h] [bp+Ch]@77

  v3 = this;
  switch ( wParam )
  {
    case 1u:
    case 6u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      PgWin::OnClose(&v3->baseclass_0.baseclass_0.baseclass_0);
      return;
    case 2u:
      v4 = (PgWin *)this->baseclass_0.m_pkFrameWork[34].baseclass_0.m_uiMessageNum;
      if ( v4 )
      {
        if ( !(unsigned __int8)((int (__thiscall *)(PgWin *))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v4) )
          PgWinMgr::ShowWin(&Pgg_kWinMgr, v4);
      }
      return;
    case 3u:
      if ( g_kRaidinfo.m_uiTotalMemberOnRaid )
      {
        v47 = 826544367;
        goto LABEL_11;
      }
      if ( g_kParty.m_uiTotalMember && Party::IsMePartyMaster(&g_kParty) )
        GameFrameWork::NcRaidMakeReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork);
      return;
    case 4u:
      if ( g_kRaidinfo.m_uiTotalMemberOnRaid )
        GameFrameWork::NcRaidLeaveReq((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      return;
    case 5u:
      if ( g_kRaidinfo.m_bIsMeRaidLeader || g_kRaidinfo.m_bIsMeRaidSubLeader )
      {
        GameFrameWork::OpenRaidMemberAddWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork);
      }
      else
      {
        v47 = 69861649;
LABEL_11:
        v5 = this->baseclass_0.m_pkFrameWork;
        v6 = TextData2::Get(v47);
        GameFrameWork::AddSysMsg((GameFrameWork *)v5, v6);
      }
      return;
    case 7u:
    case 8u:
    case 9u:
    case 0xAu:
      if ( !this->m_bIsSelecteSlot )
      {
        v7 = wParam - 7;
        if ( wParam - 7 < 4 )
        {
          v8 = (PgWin *)GameFrameWork::GetRaidPartyWin((GameFrameWork *)this->baseclass_0.m_pkFrameWork, v7);
          if ( *(RaidMemberInfo **)&g_kRaidinfo.m_MemberInfo[v7].baseclass_0.___u0.baseclass_0.dummy[0] != g_kRaidinfo.m_MemberInfo[v7].baseclass_0._Mylast )
          {
            if ( v8
              && !(unsigned __int8)((int (__thiscall *)(PgWin *))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v8) )
            {
              PgWinMgr::ShowWin(&Pgg_kWinMgr, v8);
              v3->m_bIsSelect = 1;
              v3->m_uiSelectPartyID = v7;
            }
          }
        }
      }
      return;
    case 0x10u:
      if ( !lParam )
        return;
      if ( lParam <= 0 )
        goto LABEL_29;
      if ( (unsigned int)(lParam - 1) >= 0x14 )
        return;
      v9 = RaidInfo::GetCharByIndex(&g_kRaidinfo, lParam - 1);
      if ( v9 )
        GameFrameWork::TargetCharReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v9);
LABEL_29:
      if ( !g_kRaidinfo.m_bIsMeRaidLeader )
        return;
      if ( !v3->m_uiSelectedNumber[0] )
      {
        if ( (signed int)((char *)g_kRaidinfo.m_MemberInfo[(lParam - 1) / 5].baseclass_0._Mylast
                        - *(_DWORD *)&g_kRaidinfo.m_MemberInfo[(lParam - 1) / 5].baseclass_0.___u0.baseclass_0.dummy[0])
           / 68 <= (unsigned int)((lParam - 1) % 5) )
          return;
        v3->m_uiSelectedNumber[0] = lParam;
        *(_BYTE *)(*(&v3->m_uiSelectPartyID + lParam) + 412) = 1;
        v10 = RaidInfo::GetRaidMemberInfoByIndex(&g_kRaidinfo, lParam - 1);
        v11 = v10;
        if ( !v10 )
        {
          ((void (__stdcall *)(_DWORD, int))v3->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
            0,
            v51);
          v19 = v3->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
          v52 = 0;
LABEL_54:
          ((void (__cdecl *)(D3DXCOLOR *))v19)(v52);
          v20 = v3->m_spLevelText.m_pObject;
          v21 = v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v22 = (*(int (**)(void))(**(_DWORD **)(*(&v3->m_uiSelectPartyID + lParam) + 312) + 484))();
          v21[118].__vecDelDtor((NiRefObject *)v20, v22);
          v23 = v3->m_spNameText.m_pObject;
          v24 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v25 = (*(int (**)(void))(**(_DWORD **)(*(&v3->m_uiSelectPartyID + lParam) + 308) + 484))();
          v24[118].__vecDelDtor((NiRefObject *)v23, v25);
          ((void (__stdcall *)(signed int))v3->m_spMovingSlorSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          goto LABEL_56;
        }
        *(_DWORD *)v12 = *(_DWORD *)&v10->m_kCharID.n5_name[0];
        *(_QWORD *)&v12[4] = *(_QWORD *)&v10->m_kCharID.n5_name[4];
        *(_QWORD *)&v12[12] = *(_QWORD *)&v10->m_kCharID.n5_name[12];
        if ( RaidInfo::IsLeader(&g_kRaidinfo, *(Name5 *)v12) )
        {
          ((void (__stdcall *)(signed int))v3->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
          v13 = v3->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
        }
        else
        {
          *(_DWORD *)v16 = *(_DWORD *)&v11->m_kCharID.n5_name[0];
          *(_QWORD *)&v16[4] = *(_QWORD *)&v11->m_kCharID.n5_name[4];
          *(_QWORD *)&v16[12] = *(_QWORD *)&v11->m_kCharID.n5_name[12];
          v17 = RaidInfo::IsSubLeader(&g_kRaidinfo, *(Name5 *)v16) == 0;
          v13 = v3->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
          if ( !v17 )
          {
            ((void (__stdcall *)(signed int))v13)(1);
            v13 = v3->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
            v48 = 1;
LABEL_36:
            ((void (__stdcall *)(signed int))v13)(v48);
            *(_DWORD *)v14 = *(_DWORD *)&v11->m_kCharID.n5_name[0];
            *(_QWORD *)&v14[4] = *(_QWORD *)&v11->m_kCharID.n5_name[4];
            *(_QWORD *)&v14[12] = *(_QWORD *)&v11->m_kCharID.n5_name[12];
            if ( RaidInfo::IsLooter(&g_kRaidinfo, *(Name5 *)v14) && g_kRaidinfo.m_eLootType == 2 )
            {
              ((void (__stdcall *)(signed int))v3->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
              v15 = v3->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor;
              v49 = 1.0;
            }
            else
            {
              v15 = v3->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor;
              v49 = 0.0;
            }
            ((void (__stdcall *)(_DWORD))v15)(LODWORD(v49));
            ((void (__stdcall *)(_DWORD))v3->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(1.0);
            switch ( CharClass::GetBaseClassID(v11->m_byChrClass) )
            {
              case 1:
                ((void (__stdcall *)(_DWORD))v3->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
                v50 = 1;
                break;
              case 6:
                ((void (__stdcall *)(signed int))v3->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(1);
                v50 = 1;
                break;
              case 0xB:
                ((void (__stdcall *)(signed int))v3->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(2);
                v50 = 1;
                break;
              case 0x10:
                ((void (__stdcall *)(signed int))v3->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(3);
                v50 = 1;
                break;
              case 0x15:
                ((void (__stdcall *)(signed int))v3->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(4);
                v50 = 1;
                break;
              case 0x1A:
                ((void (__stdcall *)(signed int))v3->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(5);
                v50 = 1;
                break;
              default:
                v50 = 0;
                break;
            }
            ((void (__stdcall *)(signed int))v3->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(v50);
            v18 = v3->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
            if ( v11->m_ucStatus )
            {
              ((void (__stdcall *)(D3DXCOLOR *, int))v18)(&Color::m_kDxWhiteColor, v51);
              v19 = v3->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
              v52 = &Color::m_kDxWhiteColor;
            }
            else
            {
              ((void (__stdcall *)(_UNKNOWN *, int))v18)(&Color::m_kDxGrayColor, v51);
              v19 = v3->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
              v52 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
            }
            goto LABEL_54;
          }
        }
        v48 = 0;
        goto LABEL_36;
      }
      v3->m_uiSelectedNumber[1] = lParam;
LABEL_56:
      if ( v3->m_bIsSelecteSlot )
      {
        v26 = v3->m_uiSelectedNumber[0];
        v27 = v3->m_uiSelectedNumber[1];
        v3->m_bIsSelecteSlot = 0;
        if ( v26 == v27 )
        {
          *(_BYTE *)(*(&v3->m_uiSelectPartyID + v26) + 412) = 0;
        }
        else
        {
          if ( v26 && v27 )
          {
            *(_BYTE *)(*(&v3->m_uiSelectPartyID + v26) + 412) = 0;
            *(_BYTE *)(*(&v3->m_uiSelectPartyID + v3->m_uiSelectedNumber[1]) + 412) = 0;
            GameFrameWork::NcRaidSlotMoveReq(
              (GameFrameWork *)v3->baseclass_0.m_pkFrameWork,
              v3->m_uiSelectedNumber[0] - 1,
              v3->m_uiSelectedNumber[1] - 1);
          }
        }
        ((void (__stdcall *)(_DWORD))v3->m_spMovingSlorSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v3->m_uiSelectedNumber[1] = 0;
        v3->m_uiSelectedNumber[0] = 0;
      }
      else
      {
        v3->m_bIsSelecteSlot = 1;
      }
      return;
    case 0x11u:
      if ( (unsigned int)(lParam - 1) < 0x14 )
      {
        v28 = (const char *)((int (*)(void))this->m_spEntry[lParam - 1].m_pObject->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
        v29 = (unsigned int)v28;
        if ( v28 )
        {
          if ( strcmp(v28, (const char *)&unk_9D1ABA)
            && (unsigned __int8)((int (__thiscall *)(ExpeditionWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
            PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0x81u, v29, 0);
        }
      }
      return;
    case 0x12u:
      ExpeditionWin::OnHelpLink(this);
      return;
    case 0x13u:
      if ( g_kRaidinfo.m_bIsMeRaidLeader )
      {
        if ( !(unsigned __int8)((int (*)(void))this->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          v30 = v3->m_spBtn[0].m_pObject;
          lParama = v3->m_spLootTypePopupMenu.m_pObject;
          wParama = (int)&lParama->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77];
          v31 = ((int (__thiscall *)(PgWinBut *))v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3->m_spBtn[0].m_pObject);
          v32 = ((int (__thiscall *)(ExpeditionWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3)
              + v31;
          v33 = ((int (__thiscall *)(PgWinBut *))v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v30);
          v34 = (int)v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                       (NiRefObject *)v30,
                       v32 + v33);
          v35 = ((int (__thiscall *)(ExpeditionWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
          (*(void (__thiscall **)(PopupMenuWin *, int))wParama)(lParama, v35 + v34);
          v36 = ((int (*)(void))v3->m_spBtn[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          v37 = ((int (*)(void))v3->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          ((void (__stdcall *)(int, int))v3->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
            v36 - 22,
            v37);
          PgWinMgr::OpenPopupWin(
            &Pgg_kWinMgr,
            0,
            &v3->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          v38 = v3->m_spLootTypePopupMenu.m_pObject;
          goto LABEL_78;
        }
        PgWinMgr::ClosePopupWin(
          &Pgg_kWinMgr,
          &v3->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
      return;
    case 0x14u:
      if ( g_kRaidinfo.m_bIsMeRaidLeader )
      {
        if ( (unsigned __int8)((int (*)(void))this->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
        {
          PgWinMgr::ClosePopupWin(
            &Pgg_kWinMgr,
            &v3->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
        }
        else
        {
          v39 = v3->m_spBtn[1].m_pObject;
          lParamb = v3->m_spItemGradePopupMenu.m_pObject;
          wParamb = (int)&lParamb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77];
          v40 = ((int (__thiscall *)(PgWinBut *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3->m_spBtn[1].m_pObject);
          v41 = ((int (__thiscall *)(ExpeditionWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3)
              + v40;
          v42 = ((int (__thiscall *)(PgWinBut *))v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v39);
          v43 = (int)v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                       (NiRefObject *)v39,
                       v41 + v42);
          v44 = ((int (__thiscall *)(ExpeditionWin *))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3);
          (*(void (__thiscall **)(PopupMenuWin *, int))wParamb)(lParamb, v44 + v43);
          v45 = ((int (*)(void))v3->m_spBtn[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
          v46 = ((int (*)(void))v3->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
          ((void (__stdcall *)(int, int))v3->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[135].__vecDelDtor)(
            v45 - 22,
            v46);
          PgWinMgr::OpenPopupWin(
            &Pgg_kWinMgr,
            0,
            &v3->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
          v38 = v3->m_spItemGradePopupMenu.m_pObject;
LABEL_78:
          v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
            (NiRefObject *)v38,
            0);
        }
      }
      return;
    default:
      return;
  }
}

//----- (00705C00) --------------------------------------------------------
void __thiscall ExpeditionWin::SetLootingType(ExpeditionWin *this, char nLootingType)
{
  ExpeditionWin *v2; // esi@1
  PgWinText *v3; // ebx@2
  NiRefObjectVtbl *v4; // edi@2
  char *v5; // eax@2
  PgWinText *v6; // ebx@3
  NiRefObjectVtbl *v7; // edi@3
  char *v8; // eax@3
  PgWinText *v9; // ebx@4
  NiRefObjectVtbl *v10; // edi@4
  char *v11; // eax@4

  v2 = this;
  switch ( nLootingType )
  {
    case 0:
      v3 = this->m_spText[0].m_pObject;
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = TextData::Get(0xE54F4142u);
      v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v5);
      v2->m_eLootType = (unsigned __int8)nLootingType;
      return;
    case 1:
      v6 = this->m_spText[0].m_pObject;
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData::Get(0x78A8A1CFu);
      goto LABEL_6;
    case 2:
      v9 = this->m_spText[0].m_pObject;
      v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v11 = TextData2::Get(0x799878B4u);
      v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v11);
      v2->m_eLootType = (unsigned __int8)nLootingType;
      return;
    case 3:
      v6 = this->m_spText[0].m_pObject;
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData2::Get(0x2C518D68u);
LABEL_6:
      v7[118].__vecDelDtor((NiRefObject *)v6, (unsigned int)v8);
      break;
    default:
      break;
  }
  v2->m_eLootType = (unsigned __int8)nLootingType;
}

//----- (00705CE0) --------------------------------------------------------
void __thiscall ExpeditionWin::SetItemGrade(ExpeditionWin *this, char nItemGrade)
{
  ExpeditionWin *v2; // esi@1
  PgWinText *v3; // ebx@5
  NiRefObjectVtbl *v4; // edi@5
  char *v5; // eax@5
  PgWinText *v6; // ebx@7
  NiRefObjectVtbl *v7; // edi@7
  char *v8; // eax@7
  unsigned int v9; // [sp-Ch] [bp-10h]@2
  unsigned int v10; // [sp-Ch] [bp-10h]@3

  v2 = this;
  switch ( nItemGrade )
  {
    case 0:
      v9 = 225928826;
      goto LABEL_5;
    case 1:
      v10 = 225994362;
      goto LABEL_7;
    case 2:
      v9 = 226059898;
LABEL_5:
      v3 = this->m_spText[1].m_pObject;
      v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v5 = TextData3::Get(v9);
      v4[118].__vecDelDtor((NiRefObject *)v3, (unsigned int)v5);
      v2->m_eItemType = (unsigned __int8)nItemGrade;
      return;
    case 3:
      v10 = 226125434;
LABEL_7:
      v6 = this->m_spText[1].m_pObject;
      v7 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v8 = TextData3::Get(v10);
      v7[118].__vecDelDtor((NiRefObject *)v6, (unsigned int)v8);
      break;
    default:
      break;
  }
  v2->m_eItemType = (unsigned __int8)nItemGrade;
}

//----- (00705D80) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::ExpeditionPartyWin(ExpeditionPartyWin *this)
{
  ExpeditionPartyWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionPartyWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionPartyWin::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_spLRBut,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spMember,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spParticipant,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spParticipantName,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBuf,
    4u,
    50,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_apkAbstateBufIcon,
    4u,
    50,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spPanel.m_pObject = 0;
  v1->m_spMinBtn.m_pObject = 0;
  v1->m_spMaxBtn.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spPopupMenu,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_bExtend = 1;
  v1->m_uiGroupNum = 0;
  v1->m_uiBuffViewOption[0] = 0;
  v1->m_uiBuffViewOption[1] = 0;
  v1->m_uiBuffViewOption[2] = 0;
  v1->m_uiBuffViewOption[3] = 0;
  v1->m_uiBuffViewOption[4] = 0;
}
// 9D2D38: using guessed type int (__stdcall *ExpeditionPartyWin___vftable_)(int uiFlags);
// 9D2D54: using guessed type int (__thiscall *ExpeditionPartyWin___vftable_)(void *p, char);

//----- (00705EF0) --------------------------------------------------------
bool __thiscall ExpeditionPartyWin::Create(ExpeditionPartyWin *this, PgFrameWork *pkFrameWork, unsigned int index)
{
  ExpeditionPartyWin *v3; // edi@1
  NiTexturePalette *v4; // esi@1
  char *v5; // eax@3
  NiAVObject *v6; // eax@4
  NiProperty *v7; // eax@4
  NiProperty *v8; // esi@4
  NiRefObjectVtbl *v9; // eax@6
  NiSourceTexture *v10; // eax@7
  NiNode *v11; // esi@10
  bool result; // al@14
  PgSprData *v13; // eax@15
  NiNode *v14; // esi@18
  int v15; // esi@22
  int v16; // ebx@22
  PgWinSpr *v17; // eax@22
  PgWinBut *v18; // eax@22
  char *v19; // eax@22
  PgFont *v20; // eax@24
  PgWinText *v21; // esi@24
  PgWinBut *v22; // eax@24
  PgWinBut *v23; // eax@24
  NiAVObject *v24; // eax@24
  NiProperty *v25; // eax@24
  NiTexturingProperty::Map *v26; // eax@24
  int v27; // ebx@27
  PgSprData *v28; // esi@28
  PgWinSpr *v29; // eax@28
  int v30; // esi@28
  int v31; // eax@33
  PgWin *v32; // ST60_4@35
  PgFont *v33; // eax@35
  PgWinAbbreviateText *v34; // eax@35
  int v35; // esi@35
  int v36; // eax@40
  int v37; // esi@42
  PgWinLRBut *v38; // eax@42
  int v39; // esi@42
  int v40; // eax@47
  int v41; // esi@49
  bool v42; // zf@49
  NiTexturingProperty *v43; // esi@51
  NiNode *v44; // esi@53
  NiTexturePalette *v45; // esi@57
  char *v46; // eax@59
  NiTexturingProperty *v47; // esi@60
  NiNode *v48; // esi@62
  int v49; // esi@66
  PgSprData *v50; // eax@68
  int v51; // eax@68
  int v52; // ebx@68
  AbstateIcon *v53; // eax@76
  int v54; // ebx@76
  int v55; // eax@81
  signed int v56; // ebx@85
  PopupMenuWin **v57; // esi@85
  NiSourceTexture *v58; // eax@86
  PopupMenuWin *v59; // eax@86
  int v60; // ecx@86
  int v61; // eax@91
  char *v62; // eax@93
  PopupMenuTextCheck *v63; // eax@93
  char *v64; // eax@93
  PopupMenuTextCheck *v65; // eax@93
  char *v66; // eax@93
  PopupMenuTextCheck *v67; // eax@93
  char *v68; // eax@93
  PopupMenuTextCheck *v69; // eax@93
  char *v70; // eax@93
  PopupMenuTextCheck *v71; // eax@93
  NiTexturingProperty *v72; // esi@94
  NiNode *v73; // esi@96
  unsigned int v74; // [sp+68h] [bp-26Ch]@1
  int v75; // [sp+68h] [bp-26Ch]@50
  int iPosY; // [sp+78h] [bp-25Ch]@68
  int iPosX; // [sp+7Ch] [bp-258h]@68
  UIUtil ui; // [sp+80h] [bp-254h]@22
  int iOffY; // [sp+94h] [bp-240h]@22
  NiSourceTexture *pkTexture; // [sp+98h] [bp-23Ch]@25
  NiPointer<NiTexturingProperty> spTexProp; // [sp+9Ch] [bp-238h]@4
  unsigned int uiHeight; // [sp+A0h] [bp-234h]@22
  unsigned int uiWidth; // [sp+A4h] [bp-230h]@22
  int v84; // [sp+A8h] [bp-22Ch]@27
  int iOffX; // [sp+ACh] [bp-228h]@22
  int uiTop; // [sp+B0h] [bp-224h]@15
  int uiLeft; // [sp+B4h] [bp-220h]@15
  PopupMenuWin *v88; // [sp+B8h] [bp-21Ch]@27
  void *YPos; // [sp+BCh] [bp-218h]@28
  NiPointer<NiNode> spNode; // [sp+C0h] [bp-214h]@1
  char acStr[256]; // [sp+C4h] [bp-210h]@22
  char acNodeName[128]; // [sp+1C4h] [bp-110h]@28
  char acNodeMember[128]; // [sp+244h] [bp-90h]@28
  unsigned int v94; // [sp+2C4h] [bp-10h]@1
  int v95; // [sp+2D0h] [bp-4h]@1
  int v96; // [sp+2D4h] [bp+0h]@1

  v94 = (unsigned int)&v96 ^ __security_cookie;
  v74 = (unsigned int)&v96 ^ __security_cookie;
  v3 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v4 = dword_B70448;
  v95 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v5 = Folder::Merge(&Folder::m_acMenu, "Game\\RaidPartyWin.nif");
  PgUtil::LoadNodeNifFile(v5, &spNode, v4);
  if ( !spNode.m_pObject )
    return 0;
  v6 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Panel01");
  v7 = NiAVObject::GetProperty(v6, 8);
  v8 = v7;
  spTexProp.m_pObject = (NiTexturingProperty *)v7;
  if ( v7 )
    InterlockedIncrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v9 = v8[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v95) = 1;
  if ( !v9 || (v10 = (NiSourceTexture *)v9[1].__vecDelDtor) == 0 )
  {
    LOBYTE(v95) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v11 = spNode.m_pObject;
    v95 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v11 )
        v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    }
    return 0;
  }
  v13 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Party01Member01NameText", &uiLeft, &uiTop, v10);
  if ( PgWinFrame::Create(&v3->baseclass_0, 0, 0, v13, 0, pkFrameWork, "ExpedtionPartyWin", 0) )
  {
    v15 = uiLeft;
    v16 = uiTop;
    iOffX = uiLeft;
    iOffY = uiTop;
    UIUtil::UIUtil(&ui);
    LOBYTE(v95) = 2;
    UIUtil::SetParent(&ui, &v3->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, v15, v16);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    v17 = UIUtil::CreateSpr(&ui, "Panel01", 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spPanel, (NiD3DDefaultShader *)v17);
    ((void (__stdcall *)(_DWORD))v3->m_spPanel.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    v18 = UIUtil::CreateBtn(&ui, 0, "Party01Nor", "Party01Click", "Party01Over", 0, 0);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
    acStr[0] = 0;
    memset(&acStr[1], 0, 0xFFu);
    v19 = TextData2::Get(0x5F5D33Eu);
    sprintf(acStr, v19);
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "Party01Member01NameText",
           &uiLeft,
           &uiTop,
           &uiWidth,
           &uiHeight) )
    {
      v20 = Font::Get(BOLD);
      v21 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v20, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
        (NiRefObject *)v21,
        5u);
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor(
        (NiRefObject *)v21,
        (unsigned int)&Color::m_kDxWhiteColor);
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor(
        (NiRefObject *)v21,
        (unsigned int)acStr);
      v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
        (NiRefObject *)v21,
        0);
      UIUtil::CreateBtn(&ui, 1u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
      v22 = UIUtil::CreateBtn(&ui, 2u, "MaxNor", "MaxClick", "MaxOver", 0, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spMaxBtn, (NiD3DDefaultShader *)v22);
      v23 = UIUtil::CreateBtn(&ui, 3u, "MinNor", "MinClick", "MinOver", 0, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_spMinBtn, (NiD3DDefaultShader *)v23);
      v24 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HP_Fighter");
      v25 = NiAVObject::GetProperty(v24, 8);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&spTexProp, (NiD3DDefaultShader *)v25);
      v26 = *spTexProp.m_pObject->m_kMaps.m_pBase;
      if ( v26 )
        pkTexture = (NiSourceTexture *)v26->m_spTexture.m_pObject;
      else
        pkTexture = 0;
      v84 = 1;
      v27 = (int)v3->m_spParticipantName;
      v88 = (PopupMenuWin *)5;
      do
      {
        v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "HP_Fighter", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "HP_Cleric");
        PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "HP_Archer");
        PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "HP_Mage");
        PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "HP_Joker");
        PgSprData::Add(v28, &spNode.m_pObject->baseclass_0, "HP_Sentinel");
        acNodeName[0] = 0;
        memset(&acNodeName[1], 0, 0x7Fu);
        sprintf(acNodeName, "%s%.2dName");
        acNodeMember[0] = 0;
        memset(&acNodeMember[1], 0, 0x7Fu);
        sprintf(acNodeMember, "Party01Member%.2d");
        PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, acNodeMember, &uiLeft, &uiTop, &uiWidth, &uiHeight);
        v29 = PgWinSpr::CreateWin(uiLeft - iOffX, uiTop - iOffY, v28, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
        v30 = *(_DWORD *)(v27 - 20);
        YPos = v29;
        if ( (PgWinSpr *)v30 != v29 )
        {
          if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) && v30 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v30)(v30, 1);
          v31 = (int)YPos;
          *(_DWORD *)(v27 - 20) = YPos;
          if ( v31 )
            InterlockedIncrement((volatile LONG *)(v31 + 4));
        }
        PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, acNodeName, &uiLeft, &uiTop, &uiWidth, &uiHeight);
        v32 = g_pkToolTipWin;
        v33 = Font::Get(BOLD);
        v34 = PgWinAbbreviateText::CreateWin(
                uiLeft - iOffX,
                uiTop - iOffY,
                uiWidth,
                uiHeight,
                v33,
                &v3->baseclass_0.baseclass_0.baseclass_0,
                "2",
                0,
                0,
                1,
                v32,
                0x14u);
        v35 = *(_DWORD *)v27;
        YPos = v34;
        if ( (PgWinAbbreviateText *)v35 != v34 )
        {
          if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v35 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v35)(v35, 1);
          v36 = (int)YPos;
          *(_DWORD *)v27 = YPos;
          if ( v36 )
            InterlockedIncrement((volatile LONG *)(v36 + 4));
        }
        (*(void (__stdcall **)(signed int, unsigned int))(**(_DWORD **)v27 + 488))(4, v74);
        v37 = uiLeft;
        YPos = (void *)uiTop;
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v27 + 240))(0);
        v38 = PgWinLRBut::CreateWin(
                v37 - 4,
                (int)((char *)YPos - 12),
                uiWidth,
                uiHeight + 12,
                &v3->baseclass_0.baseclass_0.baseclass_0,
                4u,
                5u);
        v39 = *(_DWORD *)(v27 - 60);
        YPos = v38;
        if ( (PgWinLRBut *)v39 != v38 )
        {
          if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) && v39 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v39)(v39, 1);
          v40 = (int)YPos;
          *(_DWORD *)(v27 - 60) = YPos;
          if ( v40 )
            InterlockedIncrement((volatile LONG *)(v40 + 4));
        }
        v41 = v84;
        v74 = v84;
        (*(void (**)(void))(**(_DWORD **)(v27 - 60) + 520))();
        (*(void (__stdcall **)(int))(**(_DWORD **)(v27 - 60) + 564))(v41);
        v27 += 4;
        v42 = v88 == (PopupMenuWin *)1;
        v88 = (PopupMenuWin *)((char *)v88 - 1);
        v84 = v41 + 1;
      }
      while ( !v42 );
      v3->m_uiHpBarWidth = ((int (__cdecl *)(unsigned int))v3->m_spParticipant[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v74);
      if ( MenuTexMgr::GetTexture(4u) )
      {
        v45 = dword_B70448;
        if ( !Folder::m_bInit )
          Folder::Init();
        v46 = Folder::Merge(&Folder::m_acMenu, "Game\\BuffDeBuffWin.nif");
        PgUtil::LoadNodeNifFile(v46, &spNode, v45);
        if ( spNode.m_pObject )
        {
          v49 = (int)v3->m_apkAbstateBufIcon;
          pkTexture = (NiSourceTexture *)5;
          do
          {
            v84 = 1;
            YPos = (void *)10;
            do
            {
              PgUtil::GetTriShapeRect(
                &spNode.m_pObject->baseclass_0,
                "CharBuffBox00",
                &iPosX,
                &iPosY,
                &uiWidth,
                &uiHeight);
              v50 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CharBuffBox00", &uiLeft, &uiTop, 0);
              v51 = (int)PgWinSpr::CreateWin(
                           uiLeft + uiWidth * v84 - iOffX,
                           uiTop - iOffY,
                           v50,
                           &v3->baseclass_0.baseclass_0.baseclass_0,
                           0,
                           0);
              v52 = *(_DWORD *)(v49 - 200);
              v88 = (PopupMenuWin *)v51;
              if ( v52 != v51 )
              {
                if ( v52 )
                {
                  if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v52 )
                    (**(void (__thiscall ***)(_DWORD, _DWORD))v52)(v52, 1);
                  v51 = (int)v88;
                }
                *(_DWORD *)(v49 - 200) = v51;
                if ( v51 )
                  InterlockedIncrement((volatile LONG *)(v51 + 4));
              }
              (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v49 - 200) + 240))(0, v75);
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v49 - 200) + 256))(0);
              v53 = AbstateIcon::CreateWin(
                      uiWidth * v84 - iOffX + iPosX + 2,
                      iPosY - iOffY + 2,
                      uiWidth - 4,
                      uiHeight - 4,
                      &v3->baseclass_0.baseclass_0.baseclass_0,
                      0);
              v54 = *(_DWORD *)v49;
              v88 = (PopupMenuWin *)v53;
              if ( (AbstateIcon *)v54 != v53 )
              {
                if ( v54 && !InterlockedDecrement((volatile LONG *)(v54 + 4)) && v54 )
                  (**(void (__thiscall ***)(_DWORD, _DWORD))v54)(v54, 1);
                v55 = (int)v88;
                *(_DWORD *)v49 = v88;
                if ( v55 )
                  InterlockedIncrement((volatile LONG *)(v55 + 4));
              }
              v75 = 0;
              (*(void (**)(void))(**(_DWORD **)v49 + 240))();
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v49 + 256))(0);
              ++v84;
              v49 += 4;
              YPos = (char *)YPos - 1;
            }
            while ( YPos );
            pkTexture = (NiSourceTexture *)((char *)pkTexture - 1);
          }
          while ( pkTexture );
          ExpeditionPartyWin::AlignBuf(v3, 10, 0);
          v3->m_uiGroupNum = index;
          v3->m_bOpenPopUp = 0;
          v56 = 0;
          v57 = (PopupMenuWin **)v3->m_spPopupMenu;
          do
          {
            v58 = MenuTexMgr::GetTexture(1u);
            v59 = PopupMenuWin::CreateWin(v58, 4u, 4u, 0);
            v60 = (int)*v57;
            v88 = v59;
            iOffX = v60;
            if ( (PopupMenuWin *)v60 != v59 )
            {
              if ( v60 && !InterlockedDecrement((volatile LONG *)(v60 + 4)) && iOffX )
                (**(void (__stdcall ***)(_DWORD))iOffX)(1);
              v61 = (int)v88;
              *v57 = v88;
              if ( v61 )
                InterlockedIncrement((volatile LONG *)(v61 + 4));
            }
            (*v57)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
              &(*v57)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
              &v3->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
            PopupMenuWin::Clear(*v57);
            v62 = TextData2::Get(0x3569283Du);
            v63 = PopupMenuTextCheck::CreateWin(v62, 0, 0, 0, 0, 0);
            v63->baseclass_0.m_ePopupMenuID = 1015;
            PopupMenuWin::AddMenu(*v57, &v63->baseclass_0);
            v64 = TextData2::Get(0x356C3181u);
            v65 = PopupMenuTextCheck::CreateWin(v64, 0, 0, 0, 0, 0);
            v65->baseclass_0.m_ePopupMenuID = 1016;
            PopupMenuWin::AddMenu(*v57, &v65->baseclass_0);
            v66 = TextData2::Get(0x3566338Fu);
            v67 = PopupMenuTextCheck::CreateWin(v66, 0, 0, 0, 0, 0);
            v67->baseclass_0.m_ePopupMenuID = 1017;
            PopupMenuWin::AddMenu(*v57, &v67->baseclass_0);
            v68 = TextData2::Get(0xDB1D2246u);
            v69 = PopupMenuTextCheck::CreateWin(v68, 0, 0, 0, 0, 0);
            v69->baseclass_0.m_ePopupMenuID = 1018;
            PopupMenuWin::AddMenu(*v57, &v69->baseclass_0);
            v70 = TextData2::Get(0xDE13DBE2u);
            v71 = PopupMenuTextCheck::CreateWin(v70, 0, 0, 0, 0, 0);
            v71->baseclass_0.m_ePopupMenuID = 1019;
            PopupMenuWin::AddMenu(*v57, &v71->baseclass_0);
            PopupMenuWin::FinishMenu(*v57, 0);
            ((void (__stdcall *)(_DWORD))(*v57)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
            ExpeditionPartyWin::SetOption(v3, v56++, 0);
            ++v57;
          }
          while ( v56 < 5 );
          ((void (__thiscall *)(ExpeditionPartyWin *, unsigned int, unsigned int, _DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
            v3,
            PgWin::ms_uiScreenWidth,
            PgWin::ms_uiScreenHeight,
            0.40000001,
            0.5);
          LOBYTE(v95) = 1;
          UIUtil::_UIUtil(&ui);
          v72 = spTexProp.m_pObject;
          LOBYTE(v95) = 0;
          if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v72->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v72, 1u);
          v73 = spNode.m_pObject;
          v95 = -1;
          if ( spNode.m_pObject
            && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v73 )
            v73->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v73, 1u);
          result = 1;
        }
        else
        {
          LOBYTE(v95) = 1;
          UIUtil::_UIUtil(&ui);
          v47 = spTexProp.m_pObject;
          LOBYTE(v95) = 0;
          if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
            v47->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v47, 1u);
          v48 = spNode.m_pObject;
          v95 = -1;
          if ( !spNode.m_pObject
            || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            || !v48 )
            return 0;
          v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v48, 1u);
          result = 0;
        }
      }
      else
      {
        LOBYTE(v95) = 1;
        UIUtil::_UIUtil(&ui);
        v43 = spTexProp.m_pObject;
        LOBYTE(v95) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v43, 1u);
        v44 = spNode.m_pObject;
        v95 = -1;
        if ( !spNode.m_pObject
          || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          || !v44 )
          return 0;
        v44->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v44, 1u);
        result = 0;
      }
    }
    else
    {
      LOBYTE(v95) = 1;
      UIUtil::_UIUtil(&ui);
      LOBYTE(v95) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v95 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v95) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v14 = spNode.m_pObject;
    v95 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v14 )
      return 0;
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (00706C10) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::SetBuffUI(ExpeditionPartyWin *this, Char *pkMember, StateType type, int *AbstateNums, int index)
{
  NiTListItem<AbStateInst *> *v5; // eax@1
  unsigned int v6; // edi@1
  int v7; // esi@5
  AbStateInst *v8; // eax@5
  int v9; // ebx@5
  int v10; // edx@9
  AbstateIcon **v11; // esi@16
  double v12; // st7@16
  char *v13; // eax@20
  AbstateIcon *v14; // ST18_4@20
  char *v15; // eax@20
  char *v16; // eax@20
  AbstateIcon *v17; // ecx@20
  unsigned int v18; // [sp-8h] [bp-18h]@18
  char *v19; // [sp-4h] [bp-14h]@20
  NiTListItem<AbStateInst *> *kIter; // [sp+4h] [bp-Ch]@5
  AbStateInst *pkAbState; // [sp+8h] [bp-8h]@5
  ExpeditionPartyWin *v22; // [sp+Ch] [bp-4h]@1
  int pkInfo; // [sp+18h] [bp+8h]@6

  v22 = this;
  v5 = AbStateInfectee::GetAbStateList(&pkMember->baseclass_0)->baseclass_0.baseclass_0.m_pkHead;
  v6 = *AbstateNums;
  if ( !v5 )
  {
    *AbstateNums = v6;
    return;
  }
  while ( v6 < 0xA )
  {
    v7 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
    kIter = v5->m_pkNext;
    v8 = v5->m_element;
    v9 = v8->kID;
    pkAbState = v8;
    if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(*(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable
                                                          + 16))(
                            ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                            v9) )
    {
      if ( (unsigned __int16)v9 <= *(_WORD *)(v7 + 200) )
      {
        v10 = *(_DWORD *)(v7 + 196);
        if ( *(_DWORD *)(v10 + 4 * v9) )
          pkInfo = *(_DWORD *)(v10 + 4 * v9);
        else
          pkInfo = 0;
      }
      else
      {
        pkInfo = 0;
      }
    }
    else
    {
      pkInfo = 0;
    }
    if ( *(_BYTE *)(pkInfo + 526) )
    {
      if ( v22->m_uiVisiableNums - 1 >= v6 )
      {
        if ( *(_DWORD *)(pkInfo + 522) != type )
          goto LABEL_24;
        v11 = (AbstateIcon **)((char *)v22->m_apkAbstateBufIcon + 4 * (10 * index + v6));
        AbstateIcon::SetAbstate(*v11, pkAbState->kID);
        v12 = pkAbState->fLifeTime;
        if ( (unsigned int)(signed int)v12 > 0x927C0 )
        {
          v19 = (char *)(pkInfo + 70);
          v17 = *v11;
        }
        else
        {
          if ( (signed int)v12 < 60 )
            v18 = -1733121819;
          else
            v18 = -1666406160;
          v13 = TextData::Get(v18);
          fs(v13);
          v14 = *v11;
          v15 = TextData::Get(0xEC4E4530u);
          v16 = fs(v15);
          v17 = v14;
          v19 = v16;
        }
        PgWin::SetToolTipWinText(&v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v19);
        (*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
        ((void (__cdecl *)(signed int))(*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        ((void (__cdecl *)(signed int))(*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
        (*v11)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[62].__vecDelDtor(
          (NiRefObject *)*v11,
          1u);
        ((void (__stdcall *)(signed int))v22->m_apkAbstateBuf[0][v6 + 10 * index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      }
      else
      {
        ((void (__stdcall *)(_DWORD))v22->m_apkAbstateBuf[0][10 * index + v6].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        ((void (__stdcall *)(_DWORD))v22->m_apkAbstateBufIcon[0][v6 + 10 * index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      }
      ++v6;
    }
LABEL_24:
    if ( !kIter )
    {
      *AbstateNums = v6;
      return;
    }
    v5 = kIter;
  }
  *AbstateNums = v6;
}
// 706C10: could not find valid save-restore pair for ebx
// 706C10: could not find valid save-restore pair for esi
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (00706E40) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::OnCommand(ExpeditionPartyWin *this, unsigned int wParam, int lParam)
{
  ExpeditionPartyWin *v3; // esi@1
  PgWinBut *v4; // ecx@3
  int v5; // esi@3
  signed int v6; // edi@3
  PgWinBut *v7; // ecx@6
  int v8; // esi@6
  signed int v9; // edi@6
  const char *v10; // eax@11
  unsigned int v11; // edi@11
  char *v12; // eax@17
  Char *v13; // eax@19
  char *v14; // eax@21

  v3 = this;
  switch ( wParam )
  {
    case 1u:
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
      PgWin::OnClose(&v3->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 2u:
      v4 = this->m_spMaxBtn.m_pObject;
      v3->m_bExtend = 1;
      ((void (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v3->m_spMaxBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v3->m_spMinBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v3->m_spMinBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v3->m_spPanel.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      v5 = (int)v3->m_spParticipantName;
      v6 = 5;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 - 20) + 256))(1);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(1);
        v5 += 4;
        --v6;
      }
      while ( v6 );
      break;
    case 3u:
      v7 = this->m_spMaxBtn.m_pObject;
      v3->m_bExtend = 0;
      ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v3->m_spMaxBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
      ((void (__stdcall *)(_DWORD))v3->m_spMinBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v3->m_spMinBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v3->m_spPanel.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
      v8 = (int)v3->m_spParticipantName;
      v9 = 5;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 - 20) + 256))(0);
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(0);
        v8 += 4;
        --v9;
      }
      while ( v9 );
      break;
    case 5u:
      if ( lParam >= 0 )
      {
        if ( (unsigned int)(lParam - 1) < 5 )
        {
          v10 = (const char *)((int (*)(void))this->m_spParticipantName[(lParam - 1) % 5u].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
          v11 = (unsigned int)v10;
          if ( v10 )
          {
            if ( strcmp(v10, (const char *)&unk_9D1B67)
              && (unsigned __int8)((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v3) )
              PgFrameWork::AddMsg(v3->baseclass_0.m_pkFrameWork, 0x81u, v11, 0);
          }
        }
      }
      break;
    case 4u:
      if ( lParam >= 0 )
      {
        if ( (unsigned int)(lParam - 1) < 0x14 )
        {
          v12 = (char *)((int (*)(void))this->m_spParticipantName[(lParam - 1) % 5u].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)();
          if ( v12 )
          {
            if ( strcmp(v12, (const char *)&unk_9D1B86) )
            {
              v13 = CharMgr::GetChar(&g_kCharMgr, v12);
              if ( v13 )
              {
                GameFrameWork::TargetCharReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v13);
              }
              else
              {
                v14 = TextData2::Get(0x304B7C53u);
                GameFrameWork::AddSysMsg((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, v14);
              }
            }
          }
        }
      }
      break;
    default:
      return;
  }
}

//----- (00707100) --------------------------------------------------------
bool __thiscall ExpeditionLootOptionWin::Create(ExpeditionLootOptionWin *this, PgFrameWork *pkFrameWork)
{
  ExpeditionLootOptionWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  NiSourceTexture *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  D3DXCOLOR v18; // ST2C_16@25
  char *v19; // eax@25
  PgWinText *v20; // eax@25
  D3DXCOLOR v21; // ST2C_16@25
  char *v22; // eax@25
  PgWinText *v23; // eax@25
  D3DXCOLOR v24; // ST2C_16@25
  char *v25; // eax@25
  PgWinText *v26; // eax@25
  D3DXCOLOR v27; // ST2C_16@25
  char *v28; // eax@25
  PgWinText *v29; // eax@25
  D3DXCOLOR v30; // ST2C_16@25
  char *v31; // eax@25
  PgWinText *v32; // eax@25
  D3DXCOLOR v33; // ST2C_16@25
  char *v34; // eax@25
  PgWinText *v35; // eax@25
  PgWin *v36; // edi@25
  D3DXCOLOR v37; // ST2C_16@25
  char *v38; // eax@25
  PgWinBut *v39; // eax@25
  PgWinBut *v40; // eax@25
  PgWinBut *v41; // eax@25
  PgWinBut *v42; // eax@25
  PgWinBut *v43; // eax@25
  int v44; // edi@25
  PgWin *v45; // ebx@26
  D3DXCOLOR v46; // ST2C_16@26
  char *v47; // eax@26
  PgWinText *v48; // eax@26
  int v49; // ebx@26
  NiSourceTexture *v50; // edi@35
  NiSourceTexture *v51; // eax@37
  PopupMenuWin *v52; // eax@37
  PopupMenuWin *v53; // edi@37
  PopupMenuWin *v54; // ebx@37
  char *v55; // eax@44
  PopupMenuText *v56; // eax@44
  char *v57; // eax@44
  PopupMenuText *v58; // eax@44
  char *v59; // eax@44
  PopupMenuText *v60; // eax@44
  char *v61; // eax@44
  PopupMenuText *v62; // eax@44
  D3DXCOLOR v63; // ST2C_16@44
  PgWinText *v64; // eax@44
  PgWinText *v65; // edi@44
  PgWinText *v66; // ebx@44
  NiTexturingProperty *v67; // esi@51
  NiNode *v68; // esi@53
  const char *v69; // [sp+30h] [bp-54h]@23
  int *v70; // [sp+34h] [bp-50h]@23
  int *v71; // [sp+38h] [bp-4Ch]@23
  NiSourceTexture *v72; // [sp+3Ch] [bp-48h]@23
  UIUtil ui; // [sp+50h] [bp-34h]@25
  NiPointer<NiTexturingProperty> spTexProp; // [sp+64h] [bp-20h]@4
  int v75; // [sp+68h] [bp-1Ch]@25
  int uiLeft; // [sp+6Ch] [bp-18h]@15
  int uiTop; // [sp+70h] [bp-14h]@15
  NiPointer<NiNode> spNode; // [sp+74h] [bp-10h]@1
  int v79; // [sp+80h] [bp-4h]@1
  PgWinText *pkFrameWorka; // [sp+8Ch] [bp+8h]@26

  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v79 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\RaidRootOption.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v79) = 1;
  if ( !v8 || (v9 = (NiSourceTexture *)v8[1].__vecDelDtor) == 0 )
  {
    LOBYTE(v79) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v79 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "ExpeditionRootOptionWin", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v72 = v16;
      v71 = &uiTop;
      v70 = &uiLeft;
      v69 = "Theme";
    }
    else
    {
      v72 = 0;
      v71 = &uiTop;
      v70 = &uiLeft;
      v69 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v69, v70, v71, v72);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    UIUtil::UIUtil(&ui);
    LOBYTE(v79) = 2;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, v14, v15);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    UIUtil::CreateSpr(&ui, "Panel01", 0);
    UIUtil::CreateSpr(&ui, "Panel02", 0);
    *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v19 = TextData2::Get(0xBC907078u);
    v20 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v19, COERCE_D3DXCOLOR(v18.r), 5u);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v20,
      1u);
    *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v22 = TextData2::Get(0x5D49726Bu);
    v23 = UIUtil::CreateTextNoSpr(&ui, "RootItemText01", v22, COERCE_D3DXCOLOR(v21.r), 5u);
    v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v23,
      1u);
    *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v25 = TextData2::Get(0x5544186Eu);
    v26 = UIUtil::CreateTextNoSpr(&ui, "RootItemText02", v25, COERCE_D3DXCOLOR(v24.r), 5u);
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v26,
      1u);
    *(_QWORD *)&v27.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v27.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v28 = TextData2::Get(0x5549182Eu);
    v29 = UIUtil::CreateTextNoSpr(&ui, "RootItemText03", v28, COERCE_D3DXCOLOR(v27.r), 5u);
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v29,
      1u);
    *(_QWORD *)&v30.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v30.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v31 = TextData2::Get(0x61406A86u);
    v32 = UIUtil::CreateTextNoSpr(&ui, "RootItemText04", v31, COERCE_D3DXCOLOR(v30.r), 5u);
    v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v32,
      1u);
    *(_QWORD *)&v33.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v33.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v34 = TextData2::Get(0x59986183u);
    v35 = UIUtil::CreateTextNoSpr(&ui, "RootItemText05", v34, COERCE_D3DXCOLOR(v33.r), 5u);
    v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v35,
      1u);
    UIUtil::CreateBtn(&ui, 0, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    v36 = (PgWin *)UIUtil::CreateBtn(&ui, 7u, "BtnNor", "BtnClick", "BtnOver", 0, 0);
    *(_QWORD *)&v37.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v37.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v38 = TextData2::Get(0x64462634u);
    UIUtil::CreateAttachedText(&ui, v36, v38, COERCE_D3DXCOLOR(v37.r), 5u);
    v39 = UIUtil::CreateBtn(&ui, 1u, "RootItem01Nor", "RootItem01Click", "RootItem01Over", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spBtn, (NiD3DDefaultShader *)v39);
    v40 = UIUtil::CreateBtn(&ui, 2u, "RootItem02Nor", "RootItem02Click", "RootItem02Over", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBtn[1], (NiD3DDefaultShader *)v40);
    v41 = UIUtil::CreateBtn(&ui, 3u, "RootItem03Nor", "RootItem03Click", "RootItem03Over", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBtn[2], (NiD3DDefaultShader *)v41);
    v42 = UIUtil::CreateBtn(&ui, 4u, "RootItem04Nor", "RootItem04Click", "RootItem04Over", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBtn[3], (NiD3DDefaultShader *)v42);
    v43 = UIUtil::CreateBtn(&ui, 5u, "RootItem05Nor", "RootItem05Click", "RootItem05Over", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBtn[4], (NiD3DDefaultShader *)v43);
    v44 = (int)v2->m_spText;
    v75 = 4;
    do
    {
      v45 = *(PgWin **)(v44 - 20);
      *(_QWORD *)&v46.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v46.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v47 = TextData::Get(0xE54F4142u);
      v48 = UIUtil::CreateAttachedText(&ui, v45, v47, COERCE_D3DXCOLOR(v46.r), 5u);
      v49 = *(_DWORD *)v44;
      pkFrameWorka = v48;
      if ( *(PgWinText **)v44 != v48 )
      {
        if ( v49 )
        {
          if ( !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v49 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v49)(v49, 1);
          v48 = pkFrameWorka;
        }
        *(_DWORD *)v44 = v48;
        if ( v48 )
          InterlockedIncrement((volatile LONG *)&v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      *(_DWORD *)(v44 + 20) = 0;
      v44 += 4;
      --v75;
    }
    while ( v75 );
    v50 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      UIUtil::CreateBtn(&ui, 8u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v50);
    v51 = MenuTexMgr::GetTexture(1u);
    v52 = PopupMenuWin::CreateWin(v51, 4u, 4u, 0);
    v53 = v2->m_spPopupMenu.m_pObject;
    v54 = v52;
    if ( v53 != v52 )
    {
      if ( v53
        && !InterlockedDecrement((volatile LONG *)&v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v53 )
        v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v53,
          1u);
      v2->m_spPopupMenu.m_pObject = v54;
      if ( v54 )
        InterlockedIncrement((volatile LONG *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spPopupMenu.m_pObject);
    v55 = TextData::Get(0xE54F4142u);
    v56 = PopupMenuText::CreateWin(v55, 0, 0, 0, 0, 0, 0);
    v56->baseclass_0.m_ePopupMenuID = 1028;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v56->baseclass_0);
    v57 = TextData::Get(0x78A8A1CFu);
    v58 = PopupMenuText::CreateWin(v57, 0, 0, 0, 0, 0, 0);
    v58->baseclass_0.m_ePopupMenuID = 1029;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v58->baseclass_0);
    v59 = TextData2::Get(0x799878B4u);
    v60 = PopupMenuText::CreateWin(v59, 0, 0, 0, 0, 0, 0);
    v60->baseclass_0.m_ePopupMenuID = 1030;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v60->baseclass_0);
    v61 = TextData2::Get(0x2C518D68u);
    v62 = PopupMenuText::CreateWin(v61, 0, 0, 0, 0, 0, 0);
    v62->baseclass_0.m_ePopupMenuID = 1032;
    PopupMenuWin::AddMenu(v2->m_spPopupMenu.m_pObject, &v62->baseclass_0);
    PopupMenuWin::FinishMenu(v2->m_spPopupMenu.m_pObject, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    *(_QWORD *)&v63.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v63.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v64 = UIUtil::CreateTextNoSpr(&ui, "RootName", &byte_9D1B87, COERCE_D3DXCOLOR(v63.r), 5u);
    v65 = v2->m_spLootName.m_pObject;
    v66 = v64;
    if ( v65 != v64 )
    {
      if ( v65
        && !InterlockedDecrement((volatile LONG *)&v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v65 )
        v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v65,
          1u);
      v2->m_spLootName.m_pObject = v66;
      if ( v66 )
        InterlockedIncrement((volatile LONG *)&v66->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(signed int))v2->m_spLootName.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(1);
    ((void (__thiscall *)(ExpeditionLootOptionWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.1,
      0.30000001);
    LOBYTE(v79) = 1;
    UIUtil::_UIUtil(&ui);
    v67 = spTexProp.m_pObject;
    LOBYTE(v79) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v67->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v67, 1u);
    v68 = spNode.m_pObject;
    v79 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v68 )
      v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v68, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v79) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v79 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (00707A00) --------------------------------------------------------
void __thiscall ExpeditionLootOptionWin::OnCommand(ExpeditionLootOptionWin *this, unsigned int wParam, int lParam)
{
  ExpeditionLootOptionWin *v3; // esi@1
  PgWin *v4; // edi@2
  PgWin *v5; // edi@6
  NiRefObjectVtbl *v6; // ebx@7
  int v7; // eax@7
  int v8; // eax@7
  PgFrameWork *v9; // esi@8
  char *v10; // eax@8
  PgWin *v11; // ST04_4@11
  PgWinBut *v12; // edi@11
  int v13; // ST14_4@11
  int v14; // ebx@11
  int v15; // ebx@11
  int v16; // eax@11
  int v17; // ebx@11
  int v18; // eax@11
  PgFrameWork *v19; // eax@12
  PopupMenuWin *wParama; // [sp+14h] [bp+8h]@11

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      v4 = (PgWin *)this->baseclass_0.m_pkFrameWork[34].m_kMsgQ.m_pBase;
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(this->baseclass_0.m_pkFrameWork[34].m_kMsgQ.m_pBase) )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v4);
      PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
      PgWin::OnClose(&v3->baseclass_0.baseclass_0.baseclass_0);
      break;
    case 7u:
      if ( g_kRaidinfo.m_bIsMeRaidLeader )
      {
        v5 = (PgWin *)this->baseclass_0.m_pkFrameWork[34].m_kMsgQ.m_pBase;
        if ( !(unsigned __int8)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(this->baseclass_0.m_pkFrameWork[34].m_kMsgQ.m_pBase) )
        {
          PgWinMgr::ShowWin(&Pgg_kWinMgr, v5);
          v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v7 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
          v8 = (int)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                      (NiRefObject *)v3,
                      v7 + 150);
          v6[77].__vecDelDtor((NiRefObject *)v5, v8);
        }
      }
      else
      {
        v9 = this->baseclass_0.m_pkFrameWork;
        v10 = TextData2::Get(0xD5F3BA10u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v9, v10);
      }
      break;
    case 1u:
    case 2u:
    case 3u:
    case 4u:
    case 5u:
      if ( g_kRaidinfo.m_bIsMeRaidLeader
        && !(unsigned __int8)((int (*)(void))this->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      {
        v11 = (PgWin *)v3->m_spPopupMenu.m_pObject;
        v3->m_uiSelectLootSlot = wParam - 1;
        PgWinMgr::ClosePopupWin(&Pgg_kWinMgr, v11);
        v12 = v3->m_spBtn[v3->m_uiSelectLootSlot].m_pObject;
        wParama = v3->m_spPopupMenu.m_pObject;
        v13 = (int)&wParama->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77];
        v14 = ((int (__thiscall *)(_DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3->m_spBtn[v3->m_uiSelectLootSlot].m_pObject);
        v15 = ((int (__thiscall *)(_DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v12)
            + v14;
        v16 = ((int (__thiscall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v3);
        v17 = (int)v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                     (NiRefObject *)v3,
                     v15 + v16);
        v18 = ((int (__thiscall *)(_DWORD))v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v12);
        (*(void (__thiscall **)(_DWORD, _DWORD))v13)(wParama, v18 + v17);
        PgWinMgr::OpenPopupWin(
          &Pgg_kWinMgr,
          0,
          &v3->m_spPopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
      }
      break;
    case 8u:
      v19 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      if ( v19 )
        GameFrameWork::OpenPlayGuideSearchList((GameFrameWork *)v19, "RaidRootOption");
      break;
    default:
      return;
  }
}

//----- (00707C10) --------------------------------------------------------
void __thiscall ExpeditionLootOptionWin::SetLootingType(ExpeditionLootOptionWin *this, char nItemGrade, char nLootingType)
{
  char v3; // bl@1
  ExpeditionLootOptionWin *v4; // esi@1
  NiRefObjectVtbl *v5; // edi@2
  char *v6; // eax@2
  unsigned int v7; // [sp-8h] [bp-10h]@4
  PgWinText *nItemGradea; // [sp+10h] [bp+8h]@2

  v3 = nItemGrade;
  v4 = this;
  switch ( nLootingType )
  {
    case 0:
      v5 = this->m_spText[(unsigned __int8)nItemGrade].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      nItemGradea = this->m_spText[(unsigned __int8)nItemGrade].m_pObject;
      v6 = TextData::Get(0xE54F4142u);
      goto LABEL_7;
    case 1:
      v5 = this->m_spText[(unsigned __int8)nItemGrade].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      nItemGradea = this->m_spText[(unsigned __int8)nItemGrade].m_pObject;
      v6 = TextData::Get(0x78A8A1CFu);
      goto LABEL_7;
    case 2:
      v7 = 2040035508;
      goto LABEL_6;
    case 3:
      v7 = 743542120;
LABEL_6:
      v5 = this->m_spText[(unsigned __int8)nItemGrade].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      nItemGradea = this->m_spText[(unsigned __int8)nItemGrade].m_pObject;
      v6 = TextData2::Get(v7);
LABEL_7:
      v5[118].__vecDelDtor((NiRefObject *)nItemGradea, (unsigned int)v6);
      break;
    default:
      break;
  }
  v4->m_eLootType[(unsigned __int8)v3] = (unsigned __int8)nLootingType;
}

//----- (00707CC0) --------------------------------------------------------
bool __thiscall EntryIconWin::Create(EntryIconWin *this, NiAVObject *pkObject, int group, int index, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg)
{
  EntryIconWin *v7; // esi@1
  NiAVObject *v8; // eax@2
  NiProperty *v9; // eax@2
  NiProperty *v10; // edi@2
  NiRefObjectVtbl *v11; // eax@4
  NiRefObjectVtbl *v12; // edx@7
  NiTexturingProperty *v13; // ecx@7
  char *v15; // eax@11
  PgWinSpr *v16; // eax@11
  unsigned int v17; // ecx@11
  int v18; // eax@16
  char *v19; // eax@18
  PgWinSpr *v20; // eax@18
  unsigned int v21; // ecx@18
  int v22; // eax@23
  char *v23; // eax@25
  PgWinSpr *v24; // eax@25
  unsigned int v25; // ecx@25
  int v26; // eax@30
  char *v27; // eax@32
  PgWinSpr *v28; // eax@32
  unsigned int v29; // ecx@32
  int v30; // eax@37
  char *v31; // eax@39
  PgWinSpr *v32; // eax@39
  unsigned int v33; // ecx@39
  int v34; // eax@44
  char *v35; // eax@46
  PgWinSpr *v36; // eax@46
  unsigned int v37; // ecx@46
  int v38; // eax@51
  char *v39; // eax@53
  PgWinSpr *v40; // eax@53
  PgWinSpr *v41; // edi@53
  PgWinSpr *v42; // ebx@53
  int v43; // edi@60
  signed int v44; // ebx@60
  int (*v45)(void); // edx@62
  int v46; // edi@62
  int (*v47)(void); // edx@62
  int v48; // ebx@62
  int (*v49)(void); // edx@62
  int v50; // eax@62
  PgWinSpr *v51; // ecx@62
  unsigned int v52; // eax@62
  PgWinLRBut *v53; // eax@62
  PgWinLRBut *v54; // edi@62
  PgWinLRBut *v55; // ebx@62
  int v56; // edx@69
  void *v57; // edi@69
  void *v58; // eax@70
  NiScreenElementsData *v59; // eax@71
  int v60; // eax@71
  int v61; // ebx@71
  int v62; // eax@72
  NiScreenElements *v63; // edi@74
  float v64; // ST50_4@81
  float v65; // ST4C_4@81
  float v66; // ST48_4@81
  float v67; // ST44_4@81
  NiScreenElements *v68; // eax@81
  void *v69; // edi@81
  void *v70; // eax@82
  NiScreenElementsData *v71; // eax@83
  int v72; // eax@83
  int v73; // ebx@83
  int v74; // eax@84
  NiScreenElements *v75; // edi@86
  NiScreenElementsData *v76; // eax@93
  float v77; // ST50_4@93
  float v78; // ST4C_4@93
  float v79; // ST48_4@93
  float v80; // ST44_4@93
  NiScreenElements *v81; // eax@93
  void *v82; // eax@93
  int v83; // eax@94
  int v84; // ebx@94
  NiMaterialProperty *v85; // edi@96
  NiMaterialProperty *v86; // eax@103
  float v87; // edx@103
  NiMaterialProperty *v88; // eax@103
  float v89; // ecx@103
  float v90; // edx@103
  float v91; // ecx@103
  NiMaterialProperty *v92; // eax@103
  float v93; // edx@103
  float v94; // ecx@103
  NiMaterialProperty *v95; // eax@103
  int v96; // edi@103
  void *v97; // eax@108
  int v98; // edi@108
  unsigned int v99; // eax@113
  int v100; // ecx@113
  PgSprData *v101; // edi@120
  PgWinSpr *v102; // eax@120
  PgWinSpr *v103; // edi@120
  int v104; // eax@125
  NiTexturingProperty *v105; // esi@128
  PgFont *v106; // eax@130
  PgWinText *v107; // eax@130
  PgWinText *v108; // edi@130
  int v109; // eax@135
  PgWin *v110; // ST48_4@138
  PgFont *v111; // eax@138
  PgWinAbbreviateText *v112; // eax@138
  PgWinAbbreviateText *v113; // edi@138
  int v114; // eax@143
  PgSprData *v115; // edi@145
  PgWinSpr *v116; // eax@145
  PgWinSpr *v117; // ebx@145
  PgWinSpr *v118; // edi@145
  NiTexturingProperty *v119; // esi@152
  unsigned int v120; // [sp+50h] [bp-278h]@1
  int v121; // [sp+50h] [bp-278h]@127
  UIUtil ui; // [sp+68h] [bp-260h]@2
  NiPointer<NiTexturingProperty> spTexProp; // [sp+7Ch] [bp-24Ch]@2
  unsigned int v124; // [sp+80h] [bp-248h]@1
  unsigned int uiHeight; // [sp+84h] [bp-244h]@120
  unsigned int uiWidth; // [sp+88h] [bp-240h]@120
  NiColorA kCommonValue; // [sp+8Ch] [bp-23Ch]@81
  unsigned int v128; // [sp+9Ch] [bp-22Ch]@1
  int uiLeft; // [sp+A0h] [bp-228h]@120
  int uiTop; // [sp+A4h] [bp-224h]@120
  NiScreenElements *posY; // [sp+A8h] [bp-220h]@62
  PgWinSpr *Height; // [sp+ACh] [bp-21Ch]@11
  PgWinSpr *posX; // [sp+B0h] [bp-218h]@1
  unsigned int Width; // [sp+B4h] [bp-214h]@11
  char acNodeLevel[128]; // [sp+B8h] [bp-210h]@2
  char acNodeChief[128]; // [sp+138h] [bp-190h]@2
  char acNodeName[128]; // [sp+1B8h] [bp-110h]@2
  char acNodeLoot[128]; // [sp+238h] [bp-90h]@2
  unsigned int v139; // [sp+2B8h] [bp-10h]@1
  int v140; // [sp+2C4h] [bp-4h]@2
  int v141; // [sp+2C8h] [bp+0h]@1

  v139 = (unsigned int)&v141 ^ __security_cookie;
  v120 = (unsigned int)&v141 ^ __security_cookie;
  v7 = this;
  v124 = uiCmdMsg;
  posX = (PgWinSpr *)index;
  v128 = uiRCmdMsg;
  if ( !PgWin::Create(&this->baseclass_0, 0, 0, 1u, 1u, 0, "EntryIconWin", 0) )
    return 0;
  UIUtil::UIUtil(&ui);
  v140 = 0;
  UIUtil::SetParent(&ui, &v7->baseclass_0);
  UIUtil::SetUIGeom(&ui, pkObject);
  acNodeChief[0] = 0;
  memset(&acNodeChief[1], 0, 0x7Fu);
  acNodeLoot[0] = 0;
  memset(&acNodeLoot[1], 0, 0x7Fu);
  acNodeLevel[0] = 0;
  memset(&acNodeLevel[1], 0, 0x7Fu);
  acNodeName[0] = 0;
  memset(&acNodeName[1], 0, 0x7Fu);
  v8 = (NiAVObject *)pkObject->baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor(
                       (NiRefObject *)pkObject,
                       (unsigned int)"Frame");
  v9 = NiAVObject::GetProperty(v8, 8);
  v10 = v9;
  spTexProp.m_pObject = (NiTexturingProperty *)v9;
  if ( v9 )
    InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v11 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v140) = 1;
  if ( !v11 || !v11[1].__vecDelDtor )
  {
    LOBYTE(v140) = 0;
    if ( InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
LABEL_9:
      v140 = -1;
      UIUtil::_UIUtil(&ui);
      return 0;
    }
    v12 = v10->baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = (NiTexturingProperty *)v10;
LABEL_8:
    v12->__vecDelDtor(v13, 1);
    goto LABEL_9;
  }
  v7->m_uiInvIndex = (unsigned int)((char *)&(&posX->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[group]
                                  + group
                                  + 1);
  sprintf(acNodeChief, "Party%.2dMember%.2dChief");
  sprintf(acNodeLoot, "Party%.2dMember%.2dRoot");
  sprintf(acNodeLevel, "Party%.2dMember%.2dLevel");
  sprintf(acNodeName, "Party%.2dMember%.2dName");
  v15 = fs("Party%.2dMember%.2d");
  v16 = UIUtil::CreateSpr(&ui, v15, 0);
  v17 = (unsigned int)v7->m_spPosBar.m_pObject;
  Height = v16;
  Width = v17;
  if ( (PgWinSpr *)v17 != v16 )
  {
    if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && Width )
      (**(void (__stdcall ***)(_DWORD))Width)(1);
    v18 = (int)Height;
    v7->m_spPosBar.m_pObject = Height;
    if ( v18 )
      InterlockedIncrement((volatile LONG *)(v18 + 4));
  }
  ((void (__stdcall *)(_DWORD, unsigned int))v7->m_spPosBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(
    1.0,
    v120);
  v19 = fs("Party%.2dMember%.2dClassFighter");
  v20 = UIUtil::CreateSpr(&ui, v19, 0);
  v21 = (unsigned int)v7->m_spClassBar[0].m_pObject;
  Height = v20;
  Width = v21;
  if ( (PgWinSpr *)v21 != v20 )
  {
    if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && Width )
      (**(void (__stdcall ***)(_DWORD))Width)(1);
    v22 = (int)Height;
    v7->m_spClassBar[0].m_pObject = Height;
    if ( v22 )
      InterlockedIncrement((volatile LONG *)(v22 + 4));
  }
  v23 = fs("Party%.2dMember%.2dClassCleric");
  v24 = UIUtil::CreateSpr(&ui, v23, 0);
  v25 = (unsigned int)v7->m_spClassBar[1].m_pObject;
  Height = v24;
  Width = v25;
  if ( (PgWinSpr *)v25 != v24 )
  {
    if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && Width )
      (**(void (__stdcall ***)(_DWORD))Width)(1);
    v26 = (int)Height;
    v7->m_spClassBar[1].m_pObject = Height;
    if ( v26 )
      InterlockedIncrement((volatile LONG *)(v26 + 4));
  }
  v27 = fs("Party%.2dMember%.2dClassArcher");
  v28 = UIUtil::CreateSpr(&ui, v27, 0);
  v29 = (unsigned int)v7->m_spClassBar[2].m_pObject;
  Height = v28;
  Width = v29;
  if ( (PgWinSpr *)v29 != v28 )
  {
    if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) && Width )
      (**(void (__stdcall ***)(_DWORD))Width)(1);
    v30 = (int)Height;
    v7->m_spClassBar[2].m_pObject = Height;
    if ( v30 )
      InterlockedIncrement((volatile LONG *)(v30 + 4));
  }
  v31 = fs("Party%.2dMember%.2dClassMage");
  v32 = UIUtil::CreateSpr(&ui, v31, 0);
  v33 = (unsigned int)v7->m_spClassBar[3].m_pObject;
  Height = v32;
  Width = v33;
  if ( (PgWinSpr *)v33 != v32 )
  {
    if ( v33 && !InterlockedDecrement((volatile LONG *)(v33 + 4)) && Width )
      (**(void (__stdcall ***)(_DWORD))Width)(1);
    v34 = (int)Height;
    v7->m_spClassBar[3].m_pObject = Height;
    if ( v34 )
      InterlockedIncrement((volatile LONG *)(v34 + 4));
  }
  v35 = fs("Party%.2dMember%.2dClassJoker");
  v36 = UIUtil::CreateSpr(&ui, v35, 0);
  v37 = (unsigned int)v7->m_spClassBar[4].m_pObject;
  Height = v36;
  Width = v37;
  if ( (PgWinSpr *)v37 != v36 )
  {
    if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) && Width )
      (**(void (__stdcall ***)(_DWORD))Width)(1);
    v38 = (int)Height;
    v7->m_spClassBar[4].m_pObject = Height;
    if ( v38 )
      InterlockedIncrement((volatile LONG *)(v38 + 4));
  }
  v39 = fs("Party%.2dMember%.2dClassSentinel");
  v40 = UIUtil::CreateSpr(&ui, v39, 0);
  v41 = v7->m_spClassBar[5].m_pObject;
  v42 = v40;
  if ( v41 != v40 )
  {
    if ( v41
      && !InterlockedDecrement((volatile LONG *)&v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v41 )
      v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v41,
        1u);
    v7->m_spClassBar[5].m_pObject = v42;
    if ( v42 )
      InterlockedIncrement((volatile LONG *)&v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v43 = (int)v7->m_spClassBar;
  v44 = 6;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v43 + 256))(0);
    v43 += 4;
    --v44;
  }
  while ( v44 );
  v45 = (int (*)(void))v7->m_spPosBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor;
  LOBYTE(v140) = 2;
  v46 = v45();
  v47 = (int (*)(void))v7->m_spPosBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
  posX = (PgWinSpr *)v46;
  v48 = v47();
  v49 = (int (*)(void))v7->m_spPosBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
  posY = (NiScreenElements *)v48;
  v50 = v49();
  v51 = v7->m_spPosBar.m_pObject;
  Width = v50;
  v52 = ((int (*)(void))v51->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)();
  Height = (PgWinSpr *)v52;
  v53 = PgWinLRBut::CreateWin(v46, v48, Width, v52, &v7->baseclass_0, v124, v128);
  v54 = v7->m_spLRBut.m_pObject;
  v55 = v53;
  if ( v54 != v53 )
  {
    if ( v54
      && !InterlockedDecrement((volatile LONG *)&v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v54 )
      v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v54,
        1u);
    v7->m_spLRBut.m_pObject = v55;
    if ( v55 )
      InterlockedIncrement((volatile LONG *)&v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v56 = v128;
  v7->m_uiCmdMsg = v124;
  v7->m_uiRCmdMsg = v56;
  v57 = operator new(0xC4u);
  v128 = (unsigned int)v57;
  LOBYTE(v140) = 3;
  if ( v57 )
  {
    v58 = operator new(0x70u);
    v124 = (unsigned int)v58;
    LOBYTE(v140) = 4;
    if ( v58 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v58, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      LOBYTE(v140) = 3;
      NiScreenElements::NiScreenElements((NiScreenElements *)v57, v59);
      v61 = v60;
    }
    else
    {
      LOBYTE(v140) = 3;
      NiScreenElements::NiScreenElements((NiScreenElements *)v57, 0);
      v61 = v62;
    }
  }
  else
  {
    v61 = 0;
  }
  v63 = v7->m_spSubImagePlane.m_pObject;
  LOBYTE(v140) = 2;
  if ( v63 != (NiScreenElements *)v61 )
  {
    if ( v63
      && !InterlockedDecrement((volatile LONG *)&v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v63 )
      v63->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v63,
        1u);
    v7->m_spSubImagePlane.m_pObject = (NiScreenElements *)v61;
    if ( v61 )
      InterlockedIncrement((volatile LONG *)(v61 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v7->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  v64 = (double)(signed int)Height;
  v65 = (double)(signed int)Width;
  v66 = (double)(signed int)posY;
  v67 = (double)(signed int)posX;
  NiScreenElementsData::SetRectangle(
    (NiScreenElementsData *)v7->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    v67,
    v66,
    v65,
    v64);
  v68 = v7->m_spSubImagePlane.m_pObject;
  kCommonValue.r = 0.0;
  kCommonValue.g = 0.0;
  kCommonValue.b = 0.0;
  kCommonValue.a = 0.0;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v68->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v69 = operator new(0xC4u);
  v128 = (unsigned int)v69;
  LOBYTE(v140) = 5;
  if ( v69 )
  {
    v70 = operator new(0x70u);
    v124 = (unsigned int)v70;
    LOBYTE(v140) = 6;
    if ( v70 )
    {
      NiScreenElementsData::NiScreenElementsData((NiScreenElementsData *)v70, 0, 1, 0, 1, 1, 4, 1, 2, 1);
      LOBYTE(v140) = 5;
      NiScreenElements::NiScreenElements((NiScreenElements *)v69, v71);
      v73 = v72;
    }
    else
    {
      LOBYTE(v140) = 5;
      NiScreenElements::NiScreenElements((NiScreenElements *)v69, 0);
      v73 = v74;
    }
  }
  else
  {
    v73 = 0;
  }
  v75 = v7->m_spBackImagePlane.m_pObject;
  LOBYTE(v140) = 2;
  if ( v75 != (NiScreenElements *)v73 )
  {
    if ( v75
      && !InterlockedDecrement((volatile LONG *)&v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v75 )
      v75->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v75,
        1u);
    v7->m_spBackImagePlane.m_pObject = (NiScreenElements *)v73;
    if ( v73 )
      InterlockedIncrement((volatile LONG *)(v73 + 4));
  }
  NiScreenElementsData::Insert(
    (NiScreenElementsData *)v7->m_spBackImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    4u,
    0,
    0);
  v76 = (NiScreenElementsData *)v7->m_spBackImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject;
  v77 = (double)(signed int)((char *)&Height->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount
                           + 2);
  v128 = Width + 6;
  v78 = (double)(signed int)(Width + 6);
  posY = (NiScreenElements *)((char *)posY - 4);
  posX = (PgWinSpr *)((char *)posX - 4);
  v79 = (double)(signed int)posY;
  v80 = (double)(signed int)posX;
  NiScreenElementsData::SetRectangle(v76, 0, v80, v79, v78, v77);
  v81 = v7->m_spBackImagePlane.m_pObject;
  kCommonValue.r = 0.0;
  kCommonValue.g = 0.0;
  kCommonValue.b = 0.0;
  kCommonValue.a = 0.0;
  NiScreenElementsData::SetColors(
    (NiScreenElementsData *)v81->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject,
    0,
    &kCommonValue);
  v82 = operator new(0x60u);
  posX = (PgWinSpr *)v82;
  LOBYTE(v140) = 7;
  if ( v82 )
  {
    NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v82);
    v84 = v83;
  }
  else
  {
    v84 = 0;
  }
  v85 = v7->m_spFixedMtrlProp.m_pObject;
  LOBYTE(v140) = 2;
  if ( v85 != (NiMaterialProperty *)v84 )
  {
    if ( v85
      && !InterlockedDecrement((volatile LONG *)&v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v85 )
      v85->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v85, 1u);
    v7->m_spFixedMtrlProp.m_pObject = (NiMaterialProperty *)v84;
    if ( v84 )
      InterlockedIncrement((volatile LONG *)(v84 + 4));
  }
  v86 = v7->m_spFixedMtrlProp.m_pObject;
  kCommonValue.g = 255.0;
  v86->m_amb.r = 255.0;
  kCommonValue.b = 0.0;
  ++v86->m_uiRevID;
  kCommonValue.g = 255.0;
  v86->m_amb.g = kCommonValue.b;
  v87 = kCommonValue.g;
  kCommonValue.b = 0.0;
  v86->m_amb.b = 0.0;
  kCommonValue.a = 0.0;
  v88 = v7->m_spFixedMtrlProp.m_pObject;
  ++v88->m_uiRevID;
  kCommonValue.g = 255.0;
  v89 = kCommonValue.b;
  v88->m_diff.r = v87;
  v90 = kCommonValue.a;
  kCommonValue.b = 0.0;
  v88->m_diff.g = v89;
  kCommonValue.a = 0.0;
  v91 = kCommonValue.g;
  v88->m_diff.b = v90;
  v92 = v7->m_spFixedMtrlProp.m_pObject;
  ++v92->m_uiRevID;
  v93 = kCommonValue.b;
  v92->m_emit.r = v91;
  v94 = kCommonValue.a;
  v92->m_emit.g = v93;
  v92->m_emit.b = v94;
  v95 = v7->m_spFixedMtrlProp.m_pObject;
  ++v95->m_uiRevID;
  v95->m_fAlpha = 0.0;
  v96 = (int)v7->m_spFixedMtrlProp.m_pObject;
  posY = v7->m_spSubImagePlane.m_pObject;
  posX = (PgWinSpr *)v96;
  if ( v96 )
    InterlockedIncrement((volatile LONG *)(v96 + 4));
  LOBYTE(v140) = 8;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&posY->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&posX);
  LOBYTE(v140) = 2;
  if ( v96 && !InterlockedDecrement((volatile LONG *)(v96 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v96)(v96, 1);
  v97 = operator new(0x20u);
  v98 = (int)v97;
  posX = (PgWinSpr *)v97;
  LOBYTE(v140) = 9;
  if ( v97 )
  {
    NiObjectNET::NiObjectNET((NiObjectNET *)v97);
    *(_DWORD *)v98 = &NiAlphaProperty::_vftable_;
    *(_WORD *)(v98 + 28) = 236;
    *(_BYTE *)(v98 + 30) = 0;
  }
  else
  {
    v98 = 0;
  }
  *(_WORD *)(v98 + 28) |= 1u;
  posY = v7->m_spSubImagePlane.m_pObject;
  posX = (PgWinSpr *)v98;
  InterlockedIncrement((volatile LONG *)(v98 + 4));
  LOBYTE(v140) = 10;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&posY->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&posX);
  LOBYTE(v140) = 2;
  if ( !InterlockedDecrement((volatile LONG *)(v98 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v98)(v98, 1);
  v99 = (unsigned int)v7->m_spFixedMtrlProp.m_pObject;
  v100 = (int)v7->m_spBackImagePlane.m_pObject;
  Width = v99;
  posY = (NiScreenElements *)v100;
  posX = (PgWinSpr *)v99;
  if ( v99 )
    InterlockedIncrement((volatile LONG *)(v99 + 4));
  LOBYTE(v140) = 11;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&posY->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&posX);
  LOBYTE(v140) = 2;
  if ( Width && !InterlockedDecrement((volatile LONG *)(Width + 4)) )
    (**(void (__stdcall ***)(_DWORD))Width)(1);
  posY = v7->m_spBackImagePlane.m_pObject;
  posX = (PgWinSpr *)v98;
  InterlockedIncrement((volatile LONG *)(v98 + 4));
  LOBYTE(v140) = 12;
  NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NiPSysModifier>>::AddHead(
    (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiRoom> > *)&posY->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kPropertyList,
    (NiPointer<NiRoom> *)&posX);
  LOBYTE(v140) = 2;
  if ( !InterlockedDecrement((volatile LONG *)(v98 + 4)) )
    (**(void (__thiscall ***)(_DWORD, _DWORD))v98)(v98, 1);
  NiAVObject::UpdateProperties(&v7->m_spBackImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v7->m_spBackImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  NiScreenElementsData::UpdateBound((NiScreenElementsData *)v7->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
  NiAVObject::UpdateProperties(&v7->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
  NiAVObject::Update(&v7->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
  ((void (__thiscall *)(EntryIconWin *, NiScreenElements *, _DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    v7,
    v7->m_spSubImagePlane.m_pObject,
    0);
  NiAVObject::UpdateProperties(&v7->baseclass_0.baseclass_0.baseclass_0);
  v101 = PgSprData::Create(pkObject, "Chief01", &uiLeft, &uiTop, 0);
  PgSprData::Add(v101, pkObject, "Chief02");
  PgSprData::Add(v101, pkObject, "Rooter");
  PgUtil::GetTriShapeRect(pkObject, acNodeChief, &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v102 = PgWinSpr::CreateWin(uiLeft, uiTop, v101, &v7->baseclass_0, 0, 0);
  v103 = v7->m_spMemberMark.m_pObject;
  posX = v102;
  if ( v103 != v102 )
  {
    if ( v103
      && !InterlockedDecrement((volatile LONG *)&v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v103 )
      v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v103,
        1u);
    v104 = (int)posX;
    v7->m_spMemberMark.m_pObject = posX;
    if ( v104 )
      InterlockedIncrement((volatile LONG *)(v104 + 4));
  }
  ((void (__cdecl *)(_DWORD))v7->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v7->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
  if ( !PgUtil::GetTriShapeRect(pkObject, acNodeLevel, &uiLeft, &uiTop, &uiWidth, &uiHeight) )
    goto LABEL_157;
  v106 = Font::Get(SMALL);
  v107 = PgWinText::CreateWin(uiLeft, uiTop, uiWidth, uiHeight, v106, &v7->baseclass_0, 0, 0);
  v108 = v7->m_spLevelText.m_pObject;
  posX = (PgWinSpr *)v107;
  if ( v108 != v107 )
  {
    if ( v108
      && !InterlockedDecrement((volatile LONG *)&v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v108 )
      v108->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v108,
        1u);
    v109 = (int)posX;
    v7->m_spLevelText.m_pObject = (PgWinText *)posX;
    if ( v109 )
      InterlockedIncrement((volatile LONG *)(v109 + 4));
  }
  ((void (__stdcall *)(signed int))v7->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(6);
  ((void (__stdcall *)(D3DXCOLOR *))v7->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
  ((void (__stdcall *)(_UNKNOWN *))v7->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D1A6A);
  ((void (__stdcall *)(_DWORD))v7->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( !PgUtil::GetTriShapeRect(pkObject, acNodeName, &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
LABEL_157:
    v105 = spTexProp.m_pObject;
    LOBYTE(v140) = 0;
    if ( InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      goto LABEL_9;
    v12 = v105->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v13 = v105;
    goto LABEL_8;
  }
  v110 = g_pkToolTipWin;
  v111 = Font::Get(SMALL);
  v112 = PgWinAbbreviateText::CreateWin(
           uiLeft,
           uiTop,
           uiWidth,
           uiHeight,
           v111,
           &v7->baseclass_0,
           0,
           0,
           0,
           1,
           v110,
           0xAu);
  v113 = v7->m_spNameText.m_pObject;
  posX = (PgWinSpr *)v112;
  if ( v113 != v112 )
  {
    if ( v113
      && !InterlockedDecrement((volatile LONG *)&v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v113 )
      v113->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v113,
        1u);
    v114 = (int)posX;
    v7->m_spNameText.m_pObject = (PgWinAbbreviateText *)posX;
    if ( v114 )
      InterlockedIncrement((volatile LONG *)(v114 + 4));
  }
  ((void (__stdcall *)(signed int, int))v7->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
    4,
    v121);
  ((void (__stdcall *)(_DWORD))v7->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_UNKNOWN *))v7->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D1A6B);
  v115 = PgSprData::Create(pkObject, "Rooter", &uiLeft, &uiTop, 0);
  PgUtil::GetTriShapeRect(pkObject, acNodeLoot, &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v116 = PgWinSpr::CreateWin(uiLeft, uiTop, v115, &v7->baseclass_0, 0, 0);
  v117 = v7->m_spLootingMark.m_pObject;
  v118 = v116;
  if ( v117 != v116 )
  {
    if ( v117
      && !InterlockedDecrement((volatile LONG *)&v117->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v117 )
      v117->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v117,
        1u);
    v7->m_spLootingMark.m_pObject = v118;
    if ( v118 )
      InterlockedIncrement((volatile LONG *)&v118->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  ((void (__cdecl *)(_DWORD))v7->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v7->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v7->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  v7->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
    (NiRefObject *)v7->m_spLootingMark.m_pObject,
    0);
  v119 = spTexProp.m_pObject;
  LOBYTE(v140) = 0;
  if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    v119->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v119, 1u);
  v140 = -1;
  UIUtil::_UIUtil(&ui);
  return 1;
}
// 9794B4: using guessed type int (__thiscall *NiAlphaProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (00708D20) --------------------------------------------------------
void __thiscall EntryIconWin::UpdateMeWin(EntryIconWin *this, float fCurTime)
{
  EntryIconWin *v2; // esi@1
  char v3; // bl@1
  double v4; // st7@2
  float v5; // ST24_4@7
  double v6; // st7@11
  float v7; // ST24_4@13
  PgWinLRBut *v8; // ecx@14
  float v9; // ST24_4@17
  NiMaterialProperty *v10; // eax@19
  float v11; // ST24_4@20
  int v12; // edi@20
  signed int v13; // ebx@20
  float v14; // ST24_4@21

  v2 = this;
  v3 = ((int (__stdcall *)(int, int))this->m_spLRBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
         PgWin::ms_iMsX.x,
         PgWin::ms_iMsY);
  if ( !v2->m_bIsKeep )
  {
    EntryIconWin::ShowLeaderLooterMark(v2);
    v4 = 0.0;
    if ( v3 )
    {
      if ( v2->m_kAlphaControl.fTimeLeftToAppear > 0.0 )
        v2->m_kAlphaControl.fTimeLeftToAppear = v2->m_kAlphaControl.fTimeLeftToAppear - Timer::ms_fDeltaTime * 10.0;
      if ( v2->m_kAlphaControl.fTimeLeftToAppear > 0.0
        || (((void (__stdcall *)(signed int))v2->m_spLRBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1),
            v2->m_kAlphaControl.fAlphaValue >= 1.0) )
        goto LABEL_20;
      v5 = Timer::ms_fDeltaTime + Timer::ms_fDeltaTime + v2->m_kAlphaControl.fAlphaValue;
      v2->m_kAlphaControl.fAlphaValue = v5;
      if ( v5 > 0.69999999 )
        v2->m_kAlphaControl.fAlphaValue = 0.69999999;
      if ( v2->m_kAlphaControl.fAlphaValue < 0.69999999 )
        JUMPOUT(*(int *)loc_708E1A);
      v6 = (float)0.69999999;
    }
    else
    {
      if ( v2->m_kAlphaControl.fAlphaValue <= 0.0 )
      {
        ((void (__stdcall *)(_DWORD))v2->m_spLRBut.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        v6 = 0.0;
      }
      else
      {
        v7 = v2->m_kAlphaControl.fAlphaValue - (Timer::ms_fDeltaTime + Timer::ms_fDeltaTime);
        v2->m_kAlphaControl.fAlphaValue = v7;
        if ( v7 <= 0.0 )
        {
          v8 = v2->m_spLRBut.m_pObject;
          v2->m_kAlphaControl.fAlphaValue = 0.0;
          v2->m_kAlphaControl.fTimeLeftToAppear = 1.0;
          ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          v4 = 0.0;
        }
        if ( v4 < v2->m_kAlphaControl.fAlphaValue )
          JUMPOUT(*(int *)loc_708EA5);
        v9 = v4;
        v6 = v9;
      }
    }
    v10 = v2->m_spFixedMtrlProp.m_pObject;
    ++v10->m_uiRevID;
    v10->m_fAlpha = v6;
LABEL_20:
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v2->m_spBackImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v2->m_spBackImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v2->m_spBackImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    NiScreenElementsData::UpdateBound((NiScreenElementsData *)v2->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.m_spModelData.m_pObject);
    NiAVObject::UpdateProperties(&v2->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v2->m_spSubImagePlane.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
      (NiRefObject *)v2,
      COERCE_UNSIGNED_INT(v2->m_spFixedMtrlProp.m_pObject->m_fAlpha));
    v11 = 1.0 - v2->m_spFixedMtrlProp.m_pObject->m_fAlpha;
    ((void (__stdcall *)(_DWORD))v2->m_spPosBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(v11));
    v12 = (int)v2->m_spClassBar;
    v13 = 6;
    do
    {
      v14 = 1.0 - v2->m_spFixedMtrlProp.m_pObject->m_fAlpha;
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 276))(LODWORD(v14));
      v12 += 4;
      --v13;
    }
    while ( v13 );
  }
}
// 708E1A: using guessed type int __thiscall(EntryIconWin *this, float fCurTime);
// 708EA5: using guessed type int __thiscall(EntryIconWin *this, float fCurTime);
// A97640: using guessed type float Timer__ms_fDeltaTime;

//----- (00708FC0) --------------------------------------------------------
void __thiscall ExpeditionMemberAddWin::UpdateMeWin(ExpeditionMemberAddWin *this, float fCurTime)
{
  ExpeditionMemberAddWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(this->baseclass_0.m_pkFrameWork[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00709020) --------------------------------------------------------
EntryIconWin *__cdecl EntryIconWin::CreateWin(NiAVObject *pkObject, int group, int index, PgWin *pkParent, unsigned int uiCmdMsg, unsigned int uiRCmdMsg)
{
  void *v6; // eax@1
  int v7; // eax@2
  int v8; // esi@2
  PgWin *v9; // edi@8
  EntryIconWin *v10; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@1

  v6 = operator new(0x1A0u);
  result.m_pObject = (PgWin *)v6;
  v12 = 0;
  if ( v6 )
  {
    EntryIconWin::EntryIconWin((EntryIconWin *)v6);
    v8 = v7;
  }
  else
  {
    v8 = 0;
  }
  if ( v8 )
    InterlockedIncrement((volatile LONG *)(v8 + 4));
  v12 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v8);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, NiAVObject *, int, int, PgWin *, unsigned int, unsigned int))(*(_DWORD *)v8 + 452))(
                          v8,
                          pkObject,
                          group,
                          index,
                          pkParent,
                          uiCmdMsg,
                          uiRCmdMsg) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8);
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = (EntryIconWin *)v8;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v8);
    if ( result.m_pObject )
    {
      v9 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v9 )
          v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
      }
    }
    v12 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
    v10 = 0;
  }
  return v10;
}

//----- (00709160) --------------------------------------------------------
ExpeditionMemberAddWin *__cdecl ExpeditionMemberAddWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ExpeditionMemberAddWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ExpeditionMemberAddWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ExpeditionMemberAddWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ExpeditionMemberAddWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D2490: using guessed type int (__stdcall *ExpeditionMemberAddWin___vftable_)(int uiFlags);
// 9D24AC: using guessed type int (__thiscall *ExpeditionMemberAddWin___vftable_)(void *p, char);

//----- (007092A0) --------------------------------------------------------
ExpeditionWin *__cdecl ExpeditionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ExpeditionWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x20Cu);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ExpeditionWin::ExpeditionWin((ExpeditionWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ExpeditionWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (007093D0) --------------------------------------------------------
bool __thiscall ExpeditionWin::Create(ExpeditionWin *this, PgFrameWork *pkFrameWork)
{
  ExpeditionWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  NiSourceTexture *v9; // eax@7
  NiNode *v10; // esi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // esi@18
  int v14; // edi@22
  int v15; // ebx@22
  NiSourceTexture *v16; // eax@22
  PgSprData *v17; // eax@25
  D3DXCOLOR v18; // ST9C_16@25
  char *v19; // eax@25
  PgWinText *v20; // eax@25
  PgWinBut *v21; // eax@25
  PgWin *v22; // edi@25
  D3DXCOLOR v23; // ST9C_16@25
  char *v24; // eax@25
  PgWinBut *v25; // eax@25
  PgWin *v26; // ebx@25
  D3DXCOLOR v27; // ST9C_16@25
  char *v28; // eax@25
  PgWinBut *v29; // eax@25
  PgWin *v30; // ebx@25
  D3DXCOLOR v31; // ST9C_16@25
  char *v32; // eax@25
  PgWin *v33; // ebx@25
  char *v34; // eax@25
  PgWinBut *v35; // edi@25
  PgWinSpr *v36; // eax@25
  PgWin *v37; // ebx@25
  char *v38; // eax@25
  NiSourceTexture *v39; // edi@25
  D3DXCOLOR v40; // ST9C_16@27
  char *v41; // eax@27
  PgWinText *v42; // eax@27
  D3DXCOLOR v43; // ST9C_16@27
  char *v44; // eax@27
  PgWinText *v45; // eax@27
  PgWinBut *v46; // eax@27
  PgWinBut *v47; // eax@27
  D3DXCOLOR v48; // ST9C_16@27
  int v49; // edi@27
  char *v50; // eax@27
  PgWinText *v51; // eax@27
  D3DXCOLOR v52; // ST9C_16@27
  char *v53; // eax@27
  PgWinText *v54; // eax@27
  signed int v55; // ebx@27
  NiSourceTexture *v56; // eax@29
  PopupMenuWin *v57; // eax@29
  PopupMenuWin *v58; // edi@29
  PopupMenuWin *v59; // ebx@29
  char *v60; // eax@36
  PopupMenuText *v61; // eax@36
  char *v62; // eax@36
  PopupMenuText *v63; // eax@36
  char *v64; // eax@36
  PopupMenuText *v65; // eax@36
  char *v66; // eax@36
  PopupMenuText *v67; // eax@36
  NiSourceTexture *v68; // eax@36
  PopupMenuWin *v69; // eax@36
  PopupMenuWin *v70; // ebx@36
  char *v71; // eax@43
  PopupMenuText *v72; // eax@43
  char *v73; // eax@43
  PopupMenuText *v74; // eax@43
  char *v75; // eax@43
  PopupMenuText *v76; // eax@43
  char *v77; // eax@43
  PopupMenuText *v78; // eax@43
  signed int v79; // edi@43
  char *v80; // STA4_4@44
  char *v81; // STA0_4@44
  char *v82; // eax@44
  PgWin *v83; // ebx@44
  D3DXCOLOR v84; // ST9C_16@44
  char *v85; // eax@44
  char *v86; // eax@44
  int v87; // eax@45
  EntryIconWin *v88; // eax@47
  EntryIconWin *v89; // edi@47
  EntryIconWin *v90; // ebx@47
  EntryIconWin *v91; // edi@54
  int v92; // eax@55
  PgWinSpr *v93; // eax@62
  PgWinSpr *v94; // edi@62
  PgWinSpr *v95; // ebx@62
  PgSprData *v96; // edi@69
  PgWinSpr *v97; // eax@69
  PgWinSpr *v98; // edi@69
  PgWinSpr *v99; // ebx@69
  PgSprData *v100; // edi@76
  PgWinSpr *v101; // eax@76
  PgWinSpr *v102; // edi@76
  PgWinSpr *v103; // ebx@76
  PgSprData *v104; // edi@83
  PgWinSpr *v105; // eax@83
  PgWinSpr *v106; // edi@83
  PgWinSpr *v107; // ebx@83
  PgWin *v108; // STA4_4@90
  PgFont *v109; // eax@90
  PgWinText *v110; // eax@90
  PgWinText *v111; // edi@90
  PgWinText *v112; // ebx@90
  PgWin *v113; // ST94_4@97
  PgFont *v114; // eax@97
  PgWinAbbreviateText *v115; // eax@97
  PgWinAbbreviateText *v116; // edi@97
  PgWinAbbreviateText *v117; // ebx@97
  NiTexturingProperty *v118; // esi@104
  NiNode *v119; // esi@106
  const char *v120; // [sp+A0h] [bp-70h]@23
  int *v121; // [sp+A4h] [bp-6Ch]@23
  int *v122; // [sp+A8h] [bp-68h]@23
  NiSourceTexture *v123; // [sp+ACh] [bp-64h]@23
  UIUtil ui; // [sp+C0h] [bp-50h]@22
  NiPointer<NiTexturingProperty> spTexProp; // [sp+D4h] [bp-3Ch]@4
  int iXPos; // [sp+D8h] [bp-38h]@25
  int iYPos; // [sp+DCh] [bp-34h]@25
  int i; // [sp+E0h] [bp-30h]@45
  int j; // [sp+E4h] [bp-2Ch]@46
  int uiLeftPos; // [sp+E8h] [bp-28h]@69
  int uiTopPos; // [sp+ECh] [bp-24h]@69
  unsigned int uiWidth; // [sp+F0h] [bp-20h]@69
  unsigned int uiHeight; // [sp+F4h] [bp-1Ch]@69
  int uiLeft; // [sp+F8h] [bp-18h]@15
  int uiTop; // [sp+FCh] [bp-14h]@15
  NiPointer<NiNode> spNode; // [sp+100h] [bp-10h]@1
  int v137; // [sp+10Ch] [bp-4h]@1
  PopupMenuWin *pkFrameWorka; // [sp+118h] [bp+8h]@36
  signed int pkFrameWorkb; // [sp+118h] [bp+8h]@43
  int pkFrameWorkc; // [sp+118h] [bp+8h]@46

  v2 = this;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v137 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\RaidWin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v137) = 1;
  if ( !v8 || (v9 = (NiSourceTexture *)v8[1].__vecDelDtor) == 0 )
  {
    LOBYTE(v137) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v137 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, pkFrameWork, "RaidWin", 0) )
  {
    v14 = uiLeft;
    v15 = uiTop;
    UIUtil::UIUtil(&ui);
    LOBYTE(v137) = 2;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, v14, v15);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    v16 = MenuTexMgr::GetTexture(0x13u);
    if ( v16 )
    {
      v123 = v16;
      v122 = &uiTop;
      v121 = &uiLeft;
      v120 = "Theme";
    }
    else
    {
      v123 = 0;
      v122 = &uiTop;
      v121 = &uiLeft;
      v120 = "Theme";
    }
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v120, v121, v122, v123);
    PgWinSpr::CreateWin(uiLeft - v14, uiTop - v15, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    UIUtil::CreateSpr(&ui, "Plane", 0);
    UIUtil::CreateSpr(&ui, "Plane01", 0);
    *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v19 = TextData2::Get(0xFDF7DB2Eu);
    v20 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v19, COERCE_D3DXCOLOR(v18.r), 5u);
    v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v20,
      1u);
    UIUtil::CreateBtn(&ui, 1u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    v21 = UIUtil::CreateBtn(&ui, 5u, "OKNor03", "OKClick03", "OKOver03", "OKDisable03", 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spInviteBtn, (NiD3DDefaultShader *)v21);
    v22 = (PgWin *)v2->m_spInviteBtn.m_pObject;
    *(_QWORD *)&v23.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v23.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v24 = TextData2::Get(0xFAF92532u);
    UIUtil::CreateAttachedText(&ui, v22, v24, COERCE_D3DXCOLOR(v23.r), 5u);
    v25 = UIUtil::CreateBtn(&ui, 3u, "OKNor01", "OKClick01", "OKOver01", "OKDisable01", 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spCreateBtn, (NiD3DDefaultShader *)v25);
    v26 = (PgWin *)v2->m_spCreateBtn.m_pObject;
    *(_QWORD *)&v27.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v27.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v28 = TextData2::Get(0xF2E8292Cu);
    UIUtil::CreateAttachedText(&ui, v26, v28, COERCE_D3DXCOLOR(v27.r), 5u);
    v29 = UIUtil::CreateBtn(&ui, 4u, "OKNor02", "OKClick02", "OKOver02", "OKDisable02", 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spLeaveBtn, (NiD3DDefaultShader *)v29);
    v30 = (PgWin *)v2->m_spLeaveBtn.m_pObject;
    *(_QWORD *)&v31.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v31.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v32 = TextData2::Get(0x7E4D726u);
    UIUtil::CreateAttachedText(&ui, v30, v32, COERCE_D3DXCOLOR(v31.r), 5u);
    v2->m_spCreateBtn.m_pObject->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v33 = (PgWin *)v2->m_spCreateBtn.m_pObject;
    v34 = TextData2::Get(0xA885CBFCu);
    PgWin::SetToolTipWinText(v33, v34);
    v35 = v2->m_spCreateBtn.m_pObject;
    iXPos = 0;
    iYPos = 0;
    ((void (__thiscall *)(PgWinBut *, int *, int *))v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
      v35,
      &iXPos,
      &iYPos);
    v36 = UIUtil::CreateSpr(&ui, "OKNor01", 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spCreateSpr, (NiD3DDefaultShader *)v36);
    ((void (__stdcall *)(int, int))v2->m_spCreateSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
      iXPos,
      iYPos);
    v2->m_spCreateSpr.m_pObject->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v37 = (PgWin *)v2->m_spCreateSpr.m_pObject;
    v38 = TextData2::Get(0xA885CBFCu);
    PgWin::SetToolTipWinText(v37, v38);
    ((void (__stdcall *)(_DWORD))v2->m_spCreateSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.0);
    v2->m_spCreateSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v2->m_spCreateSpr.m_pObject,
      1u);
    v39 = MenuTexMgr::GetTexture(4u);
    if ( ((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("HelpLinkNor") )
      UIUtil::CreateBtn(&ui, 0x12u, "HelpLinkNor", "HelpLinkOver", "HelpLinkClick", 0, v39);
    *(_QWORD *)&v40.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v40.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v41 = TextData3::Get(0x949172F1u);
    v42 = UIUtil::CreateTextNoSpr(&ui, "GainMethod", v41, COERCE_D3DXCOLOR(v40.r), 5u);
    v42->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v42,
      4u);
    *(_QWORD *)&v43.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v43.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v44 = TextData3::Get(0xCF47F72Du);
    v45 = UIUtil::CreateTextNoSpr(&ui, "ItemGrade", v44, COERCE_D3DXCOLOR(v43.r), 5u);
    v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v45,
      4u);
    v46 = UIUtil::CreateBtn(&ui, 0x13u, "GainMethodNor", "GainMethodClick", "GainMethodOver", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spBtn, (NiD3DDefaultShader *)v46);
    v47 = UIUtil::CreateBtn(&ui, 0x14u, "ItemGradeNor", "ItemGradeClick", "ItemGradeOver", 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spBtn[1], (NiD3DDefaultShader *)v47);
    *(_QWORD *)&v48.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v48.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v49 = (int)v2->m_spText;
    v50 = TextData::Get(0xE54F4142u);
    v51 = UIUtil::CreateTextNoSpr(&ui, "GainMethod_Text", v50, COERCE_D3DXCOLOR(v48.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)v2->m_spText, (NiD3DDefaultShader *)v51);
    *(_QWORD *)&v52.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v52.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v53 = TextData3::Get(0xD77667Au);
    v54 = UIUtil::CreateTextNoSpr(&ui, "ItemGrade_Text", v53, COERCE_D3DXCOLOR(v52.r), 5u);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spText[1], (NiD3DDefaultShader *)v54);
    v55 = 2;
    do
    {
      (*(void (__stdcall **)(signed int))(**(_DWORD **)v49 + 488))(4);
      v49 += 4;
      --v55;
    }
    while ( v55 );
    v2->m_eLootType = 0;
    v2->m_eItemType = 0;
    v56 = MenuTexMgr::GetTexture(1u);
    v57 = PopupMenuWin::CreateWin(v56, 4u, 4u, 0);
    v58 = v2->m_spLootTypePopupMenu.m_pObject;
    v59 = v57;
    if ( v58 != v57 )
    {
      if ( v58
        && !InterlockedDecrement((volatile LONG *)&v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v58 )
        v58->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v58,
          1u);
      v2->m_spLootTypePopupMenu.m_pObject = v59;
      if ( v59 )
        InterlockedIncrement((volatile LONG *)&v59->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spLootTypePopupMenu.m_pObject);
    v60 = TextData::Get(0xE54F4142u);
    v61 = PopupMenuText::CreateWin(v60, 0, 0, 0, 0, 0, 0);
    v61->baseclass_0.m_ePopupMenuID = 1028;
    PopupMenuWin::AddMenu(v2->m_spLootTypePopupMenu.m_pObject, &v61->baseclass_0);
    v62 = TextData::Get(0x78A8A1CFu);
    v63 = PopupMenuText::CreateWin(v62, 0, 0, 0, 0, 0, 0);
    v63->baseclass_0.m_ePopupMenuID = 1029;
    PopupMenuWin::AddMenu(v2->m_spLootTypePopupMenu.m_pObject, &v63->baseclass_0);
    v64 = TextData2::Get(0x799878B4u);
    v65 = PopupMenuText::CreateWin(v64, 0, 0, 0, 0, 0, 0);
    v65->baseclass_0.m_ePopupMenuID = 1030;
    PopupMenuWin::AddMenu(v2->m_spLootTypePopupMenu.m_pObject, &v65->baseclass_0);
    v66 = TextData2::Get(0x2C518D68u);
    v67 = PopupMenuText::CreateWin(v66, 0, 0, 0, 0, 0, 0);
    v67->baseclass_0.m_ePopupMenuID = 1032;
    PopupMenuWin::AddMenu(v2->m_spLootTypePopupMenu.m_pObject, &v67->baseclass_0);
    PopupMenuWin::FinishMenu(v2->m_spLootTypePopupMenu.m_pObject, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spLootTypePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v68 = MenuTexMgr::GetTexture(1u);
    v69 = PopupMenuWin::CreateWin(v68, 4u, 4u, 0);
    v70 = v2->m_spItemGradePopupMenu.m_pObject;
    pkFrameWorka = v69;
    if ( v70 != v69 )
    {
      if ( v70
        && !InterlockedDecrement((volatile LONG *)&v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v70 )
        v70->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v70,
          1u);
      v2->m_spItemGradePopupMenu.m_pObject = pkFrameWorka;
      if ( pkFrameWorka )
        InterlockedIncrement((volatile LONG *)&pkFrameWorka->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v2->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr->SetMsgHooker(
      &v2->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_e8,
      &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_e8);
    PopupMenuWin::Clear(v2->m_spItemGradePopupMenu.m_pObject);
    v71 = TextData3::Get(0xD77667Au);
    v72 = PopupMenuText::CreateWin(v71, 0, 0, 0, 0, 0, 0);
    v72->baseclass_0.m_ePopupMenuID = 1038;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v72->baseclass_0);
    v73 = TextData3::Get(0xD78667Au);
    v74 = PopupMenuText::CreateWin(v73, 0, 0, 0, 0, 0, 0);
    v74->baseclass_0.m_ePopupMenuID = 1039;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v74->baseclass_0);
    v75 = TextData3::Get(0xD79667Au);
    v76 = PopupMenuText::CreateWin(v75, 0, 0, 0, 0, 0, 0);
    v76->baseclass_0.m_ePopupMenuID = 1040;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v76->baseclass_0);
    v77 = TextData3::Get(0xD7A667Au);
    v78 = PopupMenuText::CreateWin(v77, 0, 0, 0, 0, 0, 0);
    v78->baseclass_0.m_ePopupMenuID = 1041;
    PopupMenuWin::AddMenu(v2->m_spItemGradePopupMenu.m_pObject, &v78->baseclass_0);
    PopupMenuWin::FinishMenu(v2->m_spItemGradePopupMenu.m_pObject, 0);
    ((void (__stdcall *)(_DWORD))v2->m_spItemGradePopupMenu.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v79 = 1;
    pkFrameWorkb = 4;
    do
    {
      v80 = fs("Party%.2dOver");
      v81 = fs("Party%.2dClick");
      v82 = fs("Party%.2dNor");
      v83 = (PgWin *)UIUtil::CreateBtn(&ui, v79 + 6, v82, v81, v80, 0, 0);
      *(_QWORD *)&v84.r = *(_QWORD *)&Color::m_kDxWhiteColor;
      *(_QWORD *)&v84.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
      v85 = TextData2::Get(0x5F5D33Eu);
      v86 = fs(v85);
      UIUtil::CreateAttachedText(&ui, v83, v86, COERCE_D3DXCOLOR(v84.r), 5u);
      ++v79;
      --pkFrameWorkb;
    }
    while ( pkFrameWorkb );
    i = 0;
    v87 = (int)v2->m_spEntry;
    do
    {
      j = 0;
      pkFrameWorkc = v87;
      do
      {
        v88 = EntryIconWin::CreateWin(
                &spNode.m_pObject->baseclass_0,
                i,
                j,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0x10u,
                0x11u);
        v89 = *(EntryIconWin **)pkFrameWorkc;
        v90 = v88;
        if ( *(EntryIconWin **)pkFrameWorkc != v88 )
        {
          if ( v89
            && !InterlockedDecrement((volatile LONG *)&v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v89 )
            v89->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
              (NiRefObject *)v89,
              1u);
          *(_DWORD *)pkFrameWorkc = v90;
          if ( v90 )
            InterlockedIncrement((volatile LONG *)&v90->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        v91 = *(EntryIconWin **)pkFrameWorkc;
        if ( *(_DWORD *)pkFrameWorkc )
        {
          v92 = ((int (__thiscall *)(_DWORD))v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(*(_DWORD *)pkFrameWorkc);
          if ( v92 )
          {
            while ( (NiRTTI *)v92 != &PgWin::m_RTTI )
            {
              v92 = *(_DWORD *)(v92 + 4);
              if ( !v92 )
                goto LABEL_60;
            }
            ((void (__thiscall *)(ExpeditionWin *, EntryIconWin *, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
              v2,
              v91,
              0);
            NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
            NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 1);
          }
        }
LABEL_60:
        pkFrameWorkc += 4;
        ++j;
      }
      while ( j < 5 );
      v87 = pkFrameWorkc;
      ++i;
    }
    while ( i < 4 );
    v93 = UIUtil::CreateSpr(&ui, "Party01Member01", 0);
    v94 = v2->m_spMovingSlorSpr.m_pObject;
    v95 = v93;
    if ( v94 != v93 )
    {
      if ( v94
        && !InterlockedDecrement((volatile LONG *)&v94->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v94 )
        v94->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v94,
          1u);
      v2->m_spMovingSlorSpr.m_pObject = v95;
      if ( v95 )
        InterlockedIncrement((volatile LONG *)&v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v2->m_spMovingSlorSpr.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Party01Member01", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v96 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Chief01", &uiLeft, &uiTop, 0);
    PgSprData::Add(v96, &spNode.m_pObject->baseclass_0, "Chief02");
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "Party01Member01Chief",
      &uiLeftPos,
      &uiTopPos,
      &uiWidth,
      &uiHeight);
    v97 = PgWinSpr::CreateWin(uiLeft, uiTop, v96, &v2->m_spMovingSlorSpr.m_pObject->baseclass_0, 0, 0);
    v98 = v2->m_spMemberMark.m_pObject;
    v99 = v97;
    if ( v98 != v97 )
    {
      if ( v98
        && !InterlockedDecrement((volatile LONG *)&v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v98 )
        v98->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v98,
          1u);
      v2->m_spMemberMark.m_pObject = v99;
      if ( v99 )
        InterlockedIncrement((volatile LONG *)&v99->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v2->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spMemberMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v100 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Rooter", &uiLeft, &uiTop, 0);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Party01Member01Root", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v101 = PgWinSpr::CreateWin(
             uiLeft - uiLeftPos,
             uiTop - uiTopPos,
             v100,
             &v2->m_spMovingSlorSpr.m_pObject->baseclass_0,
             0,
             0);
    v102 = v2->m_spLootingMark.m_pObject;
    v103 = v101;
    if ( v102 != v101 )
    {
      if ( v102
        && !InterlockedDecrement((volatile LONG *)&v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v102 )
        v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v102,
          1u);
      v2->m_spLootingMark.m_pObject = v103;
      if ( v103 )
        InterlockedIncrement((volatile LONG *)&v103->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v2->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spLootingMark.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v104 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Party01Member01ClassFighter", &uiLeft, &uiTop, 0);
    PgSprData::Add(v104, &spNode.m_pObject->baseclass_0, "Party01Member01ClassCleric");
    PgSprData::Add(v104, &spNode.m_pObject->baseclass_0, "Party01Member01ClassArcher");
    PgSprData::Add(v104, &spNode.m_pObject->baseclass_0, "Party01Member01ClassMage");
    PgSprData::Add(v104, &spNode.m_pObject->baseclass_0, "Party01Member01ClassJoker");
    PgSprData::Add(v104, &spNode.m_pObject->baseclass_0, "Party01Member01ClassSentinel");
    PgUtil::GetTriShapeRect(
      &spNode.m_pObject->baseclass_0,
      "Party01Member01Level",
      &uiLeft,
      &uiTop,
      &uiWidth,
      &uiHeight);
    v105 = PgWinSpr::CreateWin(
             uiLeft - uiLeftPos,
             uiTop - uiTopPos,
             v104,
             &v2->m_spMovingSlorSpr.m_pObject->baseclass_0,
             0,
             0);
    v106 = v2->m_spClassBar.m_pObject;
    v107 = v105;
    if ( v106 != v105 )
    {
      if ( v106
        && !InterlockedDecrement((volatile LONG *)&v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v106 )
        v106->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v106,
          1u);
      v2->m_spClassBar.m_pObject = v107;
      if ( v107 )
        InterlockedIncrement((volatile LONG *)&v107->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(_DWORD))v2->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v2->m_spClassBar.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    v108 = (PgWin *)v2->m_spMovingSlorSpr.m_pObject;
    v109 = Font::Get(SMALL);
    v110 = PgWinText::CreateWin(uiLeft - uiLeftPos, uiTop - uiTopPos, uiWidth, uiHeight, v109, v108, 0, 0);
    v111 = v2->m_spLevelText.m_pObject;
    v112 = v110;
    if ( v111 != v110 )
    {
      if ( v111
        && !InterlockedDecrement((volatile LONG *)&v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v111 )
        v111->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v111,
          1u);
      v2->m_spLevelText.m_pObject = v112;
      if ( v112 )
        InterlockedIncrement((volatile LONG *)&v112->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(signed int))v2->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(6);
    ((void (__stdcall *)(D3DXCOLOR *))v2->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWhiteColor);
    ((void (__stdcall *)(_DWORD))v2->m_spLevelText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Party01Member01Name", &uiLeft, &uiTop, &uiWidth, &uiHeight);
    v113 = (PgWin *)v2->m_spMovingSlorSpr.m_pObject;
    v114 = Font::Get(SMALL);
    v115 = PgWinAbbreviateText::CreateWin(
             uiLeft - uiLeftPos,
             uiTop - uiTopPos,
             uiWidth,
             uiHeight,
             v114,
             v113,
             0,
             0,
             0,
             1,
             0,
             0xAu);
    v116 = v2->m_spNameText.m_pObject;
    v117 = v115;
    if ( v116 != v115 )
    {
      if ( v116
        && !InterlockedDecrement((volatile LONG *)&v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v116 )
        v116->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v116,
          1u);
      v2->m_spNameText.m_pObject = v117;
      if ( v117 )
        InterlockedIncrement((volatile LONG *)&v117->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(signed int))v2->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(4);
    ((void (__stdcall *)(_DWORD))v2->m_spNameText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    ((void (__thiscall *)(ExpeditionWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.1,
      0.40000001);
    LOBYTE(v137) = 1;
    UIUtil::_UIUtil(&ui);
    v118 = spTexProp.m_pObject;
    LOBYTE(v137) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v118->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v118, 1u);
    v119 = spNode.m_pObject;
    v137 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v119 )
      v119->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v119, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v137) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v137 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    ((void (__thiscall *)(NiNode *))v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor)(v13);
    result = 0;
  }
  return result;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0070A490) --------------------------------------------------------
ExpeditionPartyWin *__cdecl ExpeditionPartyWin::CreateWin(PgFrameWork *pkFrameWork, unsigned int index)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  ExpeditionPartyWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x384u);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    ExpeditionPartyWin::ExpeditionPartyWin((ExpeditionPartyWin *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *, unsigned int))(*(_DWORD *)v4 + 540))(
                          v4,
                          pkFrameWork,
                          index) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (ExpeditionPartyWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}

//----- (0070A5C0) --------------------------------------------------------
ExpeditionLootSelectWin *__cdecl ExpeditionLootSelectWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  ExpeditionLootSelectWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &ExpeditionLootSelectWin::_vftable_;
    *((_DWORD *)v2 + 58) = &ExpeditionLootSelectWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (ExpeditionLootSelectWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D26D0: using guessed type int (__stdcall *ExpeditionLootSelectWin___vftable_)(int uiFlags);
// 9D26EC: using guessed type int (__thiscall *ExpeditionLootSelectWin___vftable_)(void *p, char);

//----- (0070A700) --------------------------------------------------------
ExpeditionLootOptionWin *__cdecl ExpeditionLootOptionWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  ExpeditionLootOptionWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A4u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    ExpeditionLootOptionWin::ExpeditionLootOptionWin((ExpeditionLootOptionWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (ExpeditionLootOptionWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0070A830) --------------------------------------------------------
void __thiscall ExpeditionLootSelectWin::OnCommand(ExpeditionLootSelectWin *this, unsigned int wParam, int lParam)
{
  ExpeditionLootSelectWin *v3; // esi@1
  int v4; // eax@4
  const char *v5; // edi@5
  char *v6; // eax@5
  _BYTE v7[20]; // ST00_20@7
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+0h] [bp-40h]@5
  Name5 kCharID; // [sp+1Ch] [bp-24h]@7
  unsigned int v10; // [sp+30h] [bp-10h]@1
  int v11; // [sp+3Ch] [bp-4h]@5
  int v12; // [sp+40h] [bp+0h]@1

  v10 = (unsigned int)&v12 ^ __security_cookie;
  v3 = this;
  if ( wParam )
  {
    if ( wParam == 3 )
    {
      ExpeditionLootSelectWin::OnSlideBar(this);
    }
    else
    {
      if ( wParam == 4 )
      {
        v4 = SlideListWin::GetCurSelIndex(this->m_pSeletMemberList);
        if ( v4 >= 0 )
        {
          v5 = SlideListWin::GetText(v3->m_pSeletMemberList, v4, 0);
          strText.baseclass_0._Myres = 15;
          strText.baseclass_0._Mysize = 0;
          strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&strText, v5, strlen(v5));
          v6 = *(char **)&strText;
          v11 = 0;
          if ( strText.baseclass_0._Myres < 0x10 )
            v6 = (char *)&strText;
          *(_QWORD *)&kCharID.n5_name[12] = 0i64;
          *(_QWORD *)&kCharID.n5_name[4] = 0i64;
          *(_QWORD *)&kCharID.n5_name[0] = 0i64;
          strncpy(kCharID.n5_name, v6, 0x14u);
          *(_QWORD *)v7 = *(_QWORD *)&kCharID;
          *(_QWORD *)&v7[8] = *(_QWORD *)&kCharID.n5_name[8];
          *(_DWORD *)&v7[16] = *(_DWORD *)&kCharID.n5_name[16];
          GameFrameWork::NcRaidSetLooterReq((GameFrameWork *)v3->baseclass_0.m_pkFrameWork, *(Name5 *)v7);
          PgWinMgr::CloseWin(&Pgg_kWinMgr, &v3->baseclass_0.baseclass_0.baseclass_0);
          PgWin::OnClose(&v3->baseclass_0.baseclass_0.baseclass_0);
          if ( strText.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strText);
        }
      }
    }
  }
  else
  {
    PgWinMgr::CloseWin(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0);
    PgWin::OnClose(&v3->baseclass_0.baseclass_0.baseclass_0);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0070A980) --------------------------------------------------------
void __thiscall ExpeditionWin::UpdateMeWin(ExpeditionWin *this, float fCurTime)
{
  ExpeditionWin *v2; // esi@1
  PgWinSpr *v3; // ebx@7
  NiRefObjectVtbl *v4; // edi@7
  char v5; // al@7
  unsigned int v6; // eax@16
  int v7; // edi@17
  PgCursor *v8; // eax@19
  PgCursor *v9; // eax@21
  int v10; // ebx@21
  int v11; // edi@21
  NiRefObjectVtbl *v12; // edx@21
  int v13; // eax@21
  int v14; // eax@21
  int v15; // edi@22
  signed int v16; // ebx@23
  signed int v17; // esi@24
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v18; // esi@28
  void *v19; // ebx@30
  RaidMemberInfo *v20; // edi@30
  int v21; // esi@31
  int v22; // edi@31
  void (__stdcall *v23)(_DWORD, _DWORD); // edx@32
  int v24; // eax@35
  int v25; // ebx@37
  int v26; // edi@37
  char *v27; // eax@37
  int v28; // eax@38
  char v29; // al@39
  int v30; // ecx@47
  bool v31; // zf@54
  int v32; // [sp-10h] [bp-58h]@5
  int v33; // [sp-10h] [bp-58h]@9
  int v34; // [sp-10h] [bp-58h]@12
  D3DXCOLOR *v35; // [sp-Ch] [bp-54h]@0
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > kInfo; // [sp+0h] [bp-48h]@30
  int v37; // [sp+10h] [bp-38h]@31
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v38; // [sp+14h] [bp-34h]@21
  int v39; // [sp+18h] [bp-30h]@22
  NiPointer<EntryIconWin> *v40; // [sp+1Ch] [bp-2Ch]@21
  char acstr[21]; // [sp+20h] [bp-28h]@38
  unsigned int v42; // [sp+38h] [bp-10h]@1
  int v43; // [sp+44h] [bp-4h]@30
  int v44; // [sp+48h] [bp+0h]@1

  v42 = (unsigned int)&v44 ^ __security_cookie;
  v2 = this;
  if ( !(unsigned __int8)((int (__stdcall *)(unsigned int))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)((unsigned int)&v44 ^ __security_cookie) )
    goto LABEL_15;
  if ( !v2->m_bIsSelect )
  {
    v32 = !RaidInfo::IsMeRaidMember(&g_kRaidinfo) && Party::IsMePartyMaster(&g_kParty);
    ((void (__stdcall *)(int))v2->m_spCreateBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v32);
    v3 = v2->m_spCreateSpr.m_pObject;
    v4 = v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v5 = ((int (*)(void))v2->m_spCreateBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)();
    v4[60].__vecDelDtor((NiRefObject *)v3, v5 == 0);
    v33 = g_kRaidinfo.m_bIsMeRaidLeader || g_kRaidinfo.m_bIsMeRaidSubLeader;
    ((void (__stdcall *)(int))v2->m_spInviteBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v33);
    v34 = RaidInfo::IsMeRaidMember(&g_kRaidinfo) != 0;
    ((void (__stdcall *)(int))v2->m_spLeaveBtn.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v34);
LABEL_15:
    if ( !v2->m_bIsSelect )
      goto LABEL_20;
  }
  v6 = v2->m_uiSelectPartyID;
  if ( v6 < 4 )
  {
    v7 = *(&v2->baseclass_0.m_pkFrameWork[33].m_kMsgQ.m_uiTail + v6);
    if ( v7 )
    {
      if ( (unsigned __int8)(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 260))(v7) )
      {
        v8 = Cursor::GetPgCursor();
        (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v7 + 308))(
          v7,
          v8->baseclass_0.m_iScreenSpaceX,
          v8->baseclass_0.m_iScreenSpaceY);
      }
    }
  }
LABEL_20:
  if ( v2->m_bIsSelecteSlot )
  {
    v9 = Cursor::GetPgCursor();
    v10 = v9->baseclass_0.m_iScreenSpaceX;
    v11 = v9->baseclass_0.m_iScreenSpaceY;
    v12 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v38 = (std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *)v2->m_spMovingSlorSpr.m_pObject;
    v40 = (NiPointer<EntryIconWin> *)(*(_DWORD *)&v38->baseclass_0.___u0.baseclass_0.dummy[0] + 308);
    v13 = ((int (__thiscall *)(ExpeditionWin *))v12[42].__vecDelDtor)(v2);
    v14 = (int)v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor(
                 (NiRefObject *)v2,
                 v11 - v13 + 5);
    ((void (__thiscall *)(std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *, int))v40->m_pObject)(
      v38,
      v10 - v14);
  }
  v40 = v2->m_spEntry;
  v15 = (int)v2->m_spEntry;
  v39 = 4;
  do
  {
    v16 = 5;
    do
    {
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(*(_DWORD *)v15 + 308) + 472))(&unk_9D1ABB);
      (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)(*(_DWORD *)v15 + 312) + 472))(&unk_9D1B27);
      v17 = 316;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v17 + *(_DWORD *)v15) + 256))(0);
        v17 += 4;
      }
      while ( v17 < 340 );
      v15 += 4;
      --v16;
    }
    while ( v16 );
    --v39;
  }
  while ( v39 );
  v18 = g_kRaidinfo.m_MemberInfo;
  v38 = g_kRaidinfo.m_MemberInfo;
  v39 = (int)v40;
  do
  {
    if ( *(RaidMemberInfo **)&v18->baseclass_0.___u0.baseclass_0.dummy[0] != v18->baseclass_0._Mylast )
    {
      std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>(
        &kInfo,
        v18);
      v19 = *(void **)&kInfo;
      v20 = 0;
      v43 = 0;
      if ( (signed int)((char *)kInfo.baseclass_0._Mylast - *(_DWORD *)&kInfo) / 68 )
      {
        v21 = v39;
        v22 = *(_DWORD *)&kInfo + 24;
        v37 = *(_DWORD *)&kInfo + 24;
        v40 = (NiPointer<EntryIconWin> *)((signed int)((char *)kInfo.baseclass_0._Mylast - *(_DWORD *)&kInfo) / 68);
        do
        {
          v23 = *(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(*(_DWORD *)v21 + 312) + 468);
          if ( *(_BYTE *)(v22 - 4) )
          {
            v23(&Color::m_kDxWhiteColor, v35);
            v35 = &Color::m_kDxWhiteColor;
          }
          else
          {
            v23(&Color::m_kDxGrayColor, v35);
            v35 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
          }
          (*(void (**)(void))(**(_DWORD **)(*(_DWORD *)v21 + 308) + 468))();
          v24 = *(_DWORD *)v21;
          if ( *(_DWORD *)v22 )
          {
            v25 = *(_DWORD *)(v24 + 312);
            v26 = *(_DWORD *)v25;
            v27 = fs("%d");
            (*(void (__thiscall **)(int, char *))(v26 + 472))(v25, v27);
            v22 = v37;
            v19 = *(void **)&kInfo;
          }
          else
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v24 + 312) + 472))("?");
          }
          *(_DWORD *)acstr = *(_DWORD *)(v22 - 24);
          *(_DWORD *)&acstr[4] = *(_DWORD *)(v22 - 20);
          *(_DWORD *)&acstr[8] = *(_DWORD *)(v22 - 16);
          v28 = *(_DWORD *)v21;
          *(_DWORD *)&acstr[12] = *(_DWORD *)(v22 - 12);
          *(_DWORD *)&acstr[16] = *(_DWORD *)(v22 - 8);
          acstr[20] = 0;
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v28 + 308) + 472))(acstr);
          switch ( *(_BYTE *)(v22 + 28) )
          {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
              v29 = 1;
              break;
            case 6:
            case 7:
            case 8:
            case 9:
            case 0xA:
              v29 = 6;
              break;
            case 0xB:
            case 0xC:
            case 0xD:
            case 0xE:
            case 0xF:
              v29 = 11;
              break;
            case 0x10:
            case 0x11:
            case 0x12:
            case 0x13:
            case 0x14:
              v29 = 16;
              break;
            case 0x15:
            case 0x16:
            case 0x17:
            case 0x18:
            case 0x19:
              v29 = 21;
              break;
            case 0x1A:
            case 0x1B:
              v29 = 26;
              break;
            default:
              v29 = 0;
              break;
          }
          switch ( v29 )
          {
            case 1:
              v30 = *(_DWORD *)(*(_DWORD *)v21 + 316);
              goto LABEL_53;
            case 6:
              v30 = *(_DWORD *)(*(_DWORD *)v21 + 320);
              goto LABEL_53;
            case 0xB:
              v30 = *(_DWORD *)(*(_DWORD *)v21 + 324);
              goto LABEL_53;
            case 0x10:
              v30 = *(_DWORD *)(*(_DWORD *)v21 + 328);
              goto LABEL_53;
            case 0x15:
              v30 = *(_DWORD *)(*(_DWORD *)v21 + 332);
              goto LABEL_53;
            case 0x1A:
              v30 = *(_DWORD *)(*(_DWORD *)v21 + 336);
LABEL_53:
              (*(void (__stdcall **)(signed int))(*(_DWORD *)v30 + 256))(1);
              break;
            default:
              break;
          }
          v22 += 68;
          v21 += 4;
          v31 = v40 == (NiPointer<EntryIconWin> *)1;
          v40 = (NiPointer<EntryIconWin> *)((char *)v40 - 1);
          v37 = v22;
        }
        while ( !v31 );
        v18 = v38;
        v20 = 0;
      }
      v43 = -1;
      if ( v19 != v20 )
        operator delete(v19);
      *(_DWORD *)&kInfo.baseclass_0.___u0.baseclass_0.dummy[0] = v20;
      kInfo.baseclass_0._Mylast = v20;
      kInfo.baseclass_0._Myend = v20;
    }
    v39 += 20;
    ++v18;
    v38 = v18;
  }
  while ( (signed int)v18 < (signed int)&unk_B68084 );
}
// A85C00: using guessed type int __security_cookie;

//----- (0070AE40) --------------------------------------------------------
void __thiscall ExpeditionPartyWin::UpdateMeWin(ExpeditionPartyWin *this, float fCurTime)
{
  ExpeditionPartyWin *v2; // ebx@1
  int v3; // esi@6
  signed int v4; // edi@7
  int v5; // eax@8
  char *v6; // edi@9
  int v7; // edi@11
  int v8; // esi@12
  signed int v9; // eax@13
  PgWinAbbreviateText *v10; // ecx@16
  double v11; // st7@18
  char v12; // al@22
  Name5 *v13; // eax@37
  unsigned int v14; // ecx@37
  void *v15; // eax@40
  _BYTE v16[20]; // ST00_20@41
  NiTListItem<AbStateInst *> *v17; // eax@43
  int v18; // eax@44
  int v19; // esi@44
  int v20; // edx@44
  int v21; // eax@45
  int v22; // eax@48
  int v23; // eax@52
  bool v24; // zf@53
  PgWinSpr *v25; // esi@63
  int v26; // eax@63
  int v27; // ecx@63
  int v28; // eax@63
  int v29; // esi@63
  signed int v30; // edx@64
  int v31; // eax@67
  int v32; // edx@67
  NiRefObjectVtbl *v33; // edx@67
  int v34; // ebx@67
  int v35; // eax@67
  NiRefObjectVtbl *v36; // edx@67
  int v37; // ebx@67
  int v38; // eax@67
  Char *v39; // esi@68
  unsigned int v40; // [sp-10h] [bp-88h]@1
  D3DXCOLOR *v41; // [sp-10h] [bp-88h]@17
  signed int v42; // [sp-10h] [bp-88h]@30
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > kInfo; // [sp+0h] [bp-78h]@11
  Name5 kCharID; // [sp+10h] [bp-68h]@37
  int v45; // [sp+24h] [bp-54h]@67
  int v46; // [sp+28h] [bp-50h]@11
  int iBufXpos; // [sp+2Ch] [bp-4Ch]@63
  __int64 v48; // [sp+30h] [bp-48h]@18
  ExpeditionPartyWin *thisa; // [sp+38h] [bp-40h]@1
  int BufNum; // [sp+3Ch] [bp-3Ch]@37
  char *pkChar; // [sp+40h] [bp-38h]@3
  int y; // [sp+44h] [bp-34h]@3
  unsigned int j; // [sp+48h] [bp-30h]@6
  unsigned int uiBuffNums; // [sp+4Ch] [bp-2Ch]@18
  char acstr[21]; // [sp+50h] [bp-28h]@16
  unsigned int v56; // [sp+68h] [bp-10h]@1
  int v57; // [sp+74h] [bp-4h]@11
  int v58; // [sp+78h] [bp+0h]@1

  v56 = (unsigned int)&v58 ^ __security_cookie;
  v40 = (unsigned int)&v58 ^ __security_cookie;
  v2 = this;
  v24 = this->m_bOpenPopUp == 0;
  thisa = this;
  if ( !v24 && this->m_uiFocusSlotNum != 5 )
  {
    ((void (__stdcall *)(char **, int *))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[45].__vecDelDtor)(
      &pkChar,
      &y);
    if ( !(unsigned __int8)((int (__cdecl *)(unsigned int))v2->m_spPopupMenu[v2->m_uiFocusSlotNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)(v40) )
    {
      ((void (__stdcall *)(char *, int))v2->m_spPopupMenu[v2->m_uiFocusSlotNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[77].__vecDelDtor)(
        pkChar + 100,
        y);
      PgWinMgr::OpenPopupWin(
        &Pgg_kWinMgr,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        &v2->m_spPopupMenu[v2->m_uiFocusSlotNum].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    }
    v2->m_bOpenPopUp = 0;
  }
  pkChar = (char *)v2->m_spParticipantName;
  v3 = (int)v2->m_apkAbstateBuf;
  j = 5;
  do
  {
    v4 = 10;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 248))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 200) + 256))(0);
      v5 = *(_DWORD *)(v3 + 200);
      v3 += 4;
      --v4;
      *(_BYTE *)(v5 + 382) = 0;
    }
    while ( v4 );
    v6 = pkChar;
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)pkChar - 5) + 256))(0);
    (*(void (__stdcall **)(_UNKNOWN *))(**(_DWORD **)v6 + 472))(&unk_9D1B66);
    v24 = j-- == 1;
    pkChar = v6 + 4;
  }
  while ( !v24 );
  if ( v2->m_bExtend )
  {
    std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>(
      &kInfo,
      &g_kRaidinfo.m_MemberInfo[v2->m_uiGroupNum]);
    v7 = 0;
    v57 = 0;
    v46 = (signed int)((char *)kInfo.baseclass_0._Mylast - *(_DWORD *)&kInfo) / 68;
    if ( (signed int)((char *)kInfo.baseclass_0._Mylast - *(_DWORD *)&kInfo) / 68 )
    {
      while ( 1 )
      {
        v8 = *(_DWORD *)&kInfo + 68 * v7;
        if ( !*(_DWORD *)(*(_DWORD *)&kInfo + 68 * v7 + 28) )
          break;
        v11 = (double)*(signed int *)(v8 + 28) / (double)*(signed int *)(v8 + 36) * (double)v2->m_uiHpBarWidth;
        y = HIWORD(uiBuffNums) | 0xC00;
        v48 = (signed __int64)v11;
        v9 = (signed __int64)v11;
        if ( (unsigned int)v9 >= 1 )
          goto LABEL_14;
        v9 = 1;
LABEL_16:
        ((void (__stdcall *)(signed int, unsigned int))v2->m_spParticipant[v7].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(
          v9,
          v40);
        *(_DWORD *)acstr = *(_DWORD *)v8;
        *(_DWORD *)&acstr[4] = *(_DWORD *)(v8 + 4);
        *(_DWORD *)&acstr[8] = *(_DWORD *)(v8 + 8);
        *(_DWORD *)&acstr[12] = *(_DWORD *)(v8 + 12);
        v10 = v2->m_spParticipantName[v7].m_pObject;
        *(_DWORD *)&acstr[16] = *(_DWORD *)(v8 + 16);
        acstr[20] = 0;
        if ( *(_BYTE *)(v8 + 20) )
          v41 = &Color::m_kDxWhiteColor;
        else
          v41 = (D3DXCOLOR *)&Color::m_kDxGrayColor;
        ((void (__stdcall *)(D3DXCOLOR *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v41);
        ((void (__stdcall *)(_DWORD))v2->m_spParticipantName[v7].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(acstr);
        switch ( *(_BYTE *)(v8 + 52) )
        {
          case 1:
          case 2:
          case 3:
          case 4:
          case 5:
            v12 = 1;
            break;
          case 6:
          case 7:
          case 8:
          case 9:
          case 0xA:
            v12 = 6;
            break;
          case 0xB:
          case 0xC:
          case 0xD:
          case 0xE:
          case 0xF:
            v12 = 11;
            break;
          case 0x10:
          case 0x11:
          case 0x12:
          case 0x13:
          case 0x14:
            v12 = 16;
            break;
          case 0x15:
          case 0x16:
          case 0x17:
          case 0x18:
          case 0x19:
            v12 = 21;
            break;
          case 0x1A:
          case 0x1B:
            v12 = 26;
            break;
          default:
            v12 = 0;
            break;
        }
        switch ( v12 )
        {
          case 1:
            v42 = 0;
            goto LABEL_36;
          case 6:
            v42 = 1;
            goto LABEL_36;
          case 0xB:
            v42 = 2;
            goto LABEL_36;
          case 0x10:
            v42 = 3;
            goto LABEL_36;
          case 0x15:
            v42 = 4;
            goto LABEL_36;
          case 0x1A:
            v42 = 5;
LABEL_36:
            ((void (__stdcall *)(signed int))v2->m_spParticipant[v7].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(v42);
            break;
          default:
            break;
        }
        v40 = 1;
        ((void (*)(void))v2->m_spParticipant[v7].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)();
        BufNum = 0;
        v13 = User::GetMainCharID(&g_kUser);
        v14 = *(_DWORD *)&v13->n5_name[0];
        *(_QWORD *)&kCharID.n5_name[4] = *(_QWORD *)&v13->n5_name[4];
        *(_QWORD *)&kCharID.n5_name[12] = *(_QWORD *)&v13->n5_name[12];
        if ( *(_QWORD *)v8 != __PAIR__(*(unsigned int *)&kCharID.n5_name[4], v14)
          || *(_QWORD *)(v8 + 8) != *(_QWORD *)&kCharID.n5_name[8]
          || *(_DWORD *)(v8 + 16) != *(_DWORD *)&kCharID.n5_name[16] )
        {
          *(_DWORD *)v16 = *(_DWORD *)v8;
          *(_QWORD *)&v16[4] = *(_QWORD *)(v8 + 4);
          *(_QWORD *)&v16[12] = *(_QWORD *)(v8 + 12);
          v15 = CharMgr::GetChar(&g_kCharMgr, *(Name5 *)v16);
        }
        else
        {
          v15 = g_pkMainChar;
          v2->m_apkAbstateBufIcon[v7][0].m_pObject->m_bEraseEnable = 1;
          v2->m_apkAbstateBufIcon[v7][1].m_pObject->m_bEraseEnable = 1;
          v2->m_apkAbstateBufIcon[v7][2].m_pObject->m_bEraseEnable = 1;
          v2->m_apkAbstateBufIcon[v7][3].m_pObject->m_bEraseEnable = 1;
          BYTE2((&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)[2 * (5 * v7 + 80)][95].__vecDelDtor) = 1;
        }
        pkChar = (char *)v15;
        if ( v15 )
        {
          v17 = AbStateInfectee::GetAbStateList((AbStateInfectee *)v15)->baseclass_0.baseclass_0.m_pkHead;
          uiBuffNums = 0;
          j = (unsigned int)v17;
          while ( j )
          {
            v18 = *(_WORD *)(*(_DWORD *)(j + 8) + 20);
            v19 = ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
            j = *(_DWORD *)j;
            v20 = *(_DWORD *)ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable;
            y = v18;
            if ( (unsigned __int8)(*(int (__thiscall **)(int, int))(v20 + 16))(
                                    ITableBase<AbnormalStateViewInfo_AbnormalStateViewInfoTab>::ms_pkTable,
                                    v18) )
            {
              if ( (unsigned __int16)y <= *(_WORD *)(v19 + 200) )
              {
                v22 = *(_DWORD *)(v19 + 196) + 4 * (unsigned __int16)y;
                if ( *(_DWORD *)v22 )
                  v21 = *(_DWORD *)v22;
                else
                  v21 = 0;
              }
              else
              {
                v21 = 0;
              }
            }
            else
            {
              v21 = 0;
            }
            if ( *(_BYTE *)(v21 + 526) )
            {
              v23 = *(_DWORD *)(v21 + 522);
              if ( v23 == 1 )
              {
                v24 = (v2->m_uiBuffViewOption[v7] & 1) == 0;
                goto LABEL_60;
              }
              if ( v23 == 2 )
              {
                v24 = (v2->m_uiBuffViewOption[v7] & 2) == 0;
                goto LABEL_60;
              }
              if ( v23 == 3 )
              {
                v24 = (v2->m_uiBuffViewOption[v7] & 4) == 0;
                goto LABEL_60;
              }
              if ( !v23 )
              {
                v24 = (v2->m_uiBuffViewOption[v7] & 8) == 0;
LABEL_60:
                if ( !v24 )
                  ++uiBuffNums;
                continue;
              }
            }
          }
          v25 = v2->m_spPanel.m_pObject;
          y = ((int (__thiscall *)(PgWinSpr *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v2->m_spPanel.m_pObject);
          v26 = ((int (__thiscall *)(PgWinSpr *))v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v25);
          v27 = v26 + y;
          v28 = 0;
          iBufXpos = v27;
          j = 0;
          y = 0;
          v29 = (int)v2->m_apkAbstateBufIcon[v7];
          do
          {
            v30 = 0;
            if ( j >= uiBuffNums && uiBuffNums )
              v30 = 16;
            v31 = v30 + v28;
            v32 = **(_DWORD **)(v29 - 200);
            HIDWORD(v48) = iBufXpos + v31;
            (*(void (__stdcall **)(int))(v32 + 172))(iBufXpos + v31);
            v33 = v2->m_spParticipant[v7].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v34 = **(_DWORD **)(v29 - 200);
            v45 = *(_DWORD *)(v29 - 200);
            v35 = ((int (__cdecl *)(unsigned int))v33[42].__vecDelDtor)(v40);
            (*(void (__thiscall **)(int, int))(v34 + 176))(v45, v35);
            (*(void (__stdcall **)(int))(**(_DWORD **)v29 + 172))(HIDWORD(v48) + 2);
            v36 = thisa->m_spParticipant[v7].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            v37 = **(_DWORD **)v29;
            HIDWORD(v48) = *(_DWORD *)v29;
            v38 = ((int (*)(void))v36[42].__vecDelDtor)();
            (*(void (__thiscall **)(_DWORD, int))(v37 + 176))(HIDWORD(v48), v38 + 2);
            ++j;
            v2 = thisa;
            v28 = y + 20;
            v29 += 4;
            y = v28;
          }
          while ( (unsigned int)v28 < 0xC8 );
          v39 = (Char *)pkChar;
          if ( thisa->m_uiBuffViewOption[v7] & 1 )
            ExpeditionPartyWin::SetBuffUI(thisa, (Char *)pkChar, Skill, &BufNum, v7);
          if ( v2->m_uiBuffViewOption[v7] & 2 )
            ExpeditionPartyWin::SetBuffUI(v2, v39, Scroll, &BufNum, v7);
          if ( v2->m_uiBuffViewOption[v7] & 4 )
            ExpeditionPartyWin::SetBuffUI(v2, v39, Potion, &BufNum, v7);
          if ( v2->m_uiBuffViewOption[v7] & 8 )
            ExpeditionPartyWin::SetBuffUI(v2, v39, 0, &BufNum, v7);
          if ( v2->m_uiBuffViewOption[v7] & 0x10 )
            ExpeditionPartyWin::SetBuffUI(v2, v39, Debuff, &BufNum, v7);
        }
        ++v7;
        if ( v7 >= (unsigned int)v46 )
          goto LABEL_79;
      }
      v9 = 1;
LABEL_14:
      if ( v9 > v2->m_uiHpBarWidth )
        v9 = v2->m_uiHpBarWidth;
      goto LABEL_16;
    }
LABEL_79:
    if ( *(_DWORD *)&kInfo )
      operator delete(*(void **)&kInfo);
  }
}
// A85C00: using guessed type int __security_cookie;
// A97F68: using guessed type int ITableBase_AbnormalStateViewInfo_AbnormalStateViewInfoTab___ms_pkTable;

//----- (0070B530) --------------------------------------------------------
void __thiscall ExpeditionLootSelectWin::UpdateMeWin(ExpeditionLootSelectWin *this, float fCurTime)
{
  ExpeditionLootSelectWin *v2; // edi@1
  SlideListWin *v3; // ecx@1
  signed int v4; // ebx@1
  int v5; // esi@2
  unsigned int v6; // ecx@4
  unsigned int v7; // edx@4
  unsigned int v8; // edi@4
  unsigned int v9; // ebx@4
  int v10; // eax@7
  RaidMemberInfo *v11; // eax@11
  PgFrameWork *v12; // eax@14
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > kInfo; // [sp+0h] [bp-60h]@2
  ExpeditionLootSelectWin *v14; // [sp+10h] [bp-50h]@1
  int v15; // [sp+14h] [bp-4Ch]@3
  std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *v16; // [sp+18h] [bp-48h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+1Ch] [bp-44h]@1
  char acstr[21]; // [sp+38h] [bp-28h]@4
  unsigned int v19; // [sp+50h] [bp-10h]@1
  int v20; // [sp+5Ch] [bp-4h]@1
  int v21; // [sp+60h] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  v14 = this;
  strText.baseclass_0._Myres = 15;
  strText.baseclass_0._Mysize = 0;
  strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3 = this->m_pSeletMemberList;
  v20 = 0;
  SlideListWin::RemoveAllList(v3);
  v4 = (signed int)g_kRaidinfo.m_MemberInfo;
  v16 = g_kRaidinfo.m_MemberInfo;
  do
  {
    std::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>::vector<RaidMemberInfo_std::allocator<RaidMemberInfo>>(
      &kInfo,
      (std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *)v4);
    v5 = *(_DWORD *)&kInfo;
    LOBYTE(v20) = 1;
    if ( (signed int)((char *)kInfo.baseclass_0._Mylast - *(_DWORD *)&kInfo) / 68 )
    {
      v15 = (signed int)((char *)kInfo.baseclass_0._Mylast - *(_DWORD *)&kInfo) / 68;
      do
      {
        v6 = *(_DWORD *)(v5 + 4);
        v7 = *(_DWORD *)(v5 + 8);
        v8 = *(_DWORD *)(v5 + 12);
        v9 = *(_DWORD *)(v5 + 16);
        *(_DWORD *)acstr = *(_DWORD *)v5;
        *(_DWORD *)&acstr[4] = v6;
        *(_DWORD *)&acstr[8] = v7;
        *(_DWORD *)&acstr[12] = v8;
        *(_DWORD *)&acstr[16] = v9;
        acstr[20] = 0;
        if ( *(_DWORD *)acstr != *(_DWORD *)&g_kRaidinfo.m_kRaidLooterID.n5_name[0]
          || __PAIR__(v6, v7) != __PAIR__(
                                   *(unsigned int *)&g_kRaidinfo.m_kRaidLooterID.n5_name[4],
                                   *(unsigned int *)&g_kRaidinfo.m_kRaidLooterID.n5_name[8])
          || __PAIR__(v9, v8) != *(_QWORD *)&g_kRaidinfo.m_kRaidLooterID.n5_name[12] )
        {
          v2 = v14;
          SlideListWin::AddText(v14->m_pSeletMemberList, acstr);
        }
        else
        {
          v2 = v14;
          v10 = SlideListWin::AddText(v14->m_pSeletMemberList, acstr);
          SlideListWin::SetFontColor(v2->m_pSeletMemberList, v10, 0, 255, 255, 0);
        }
        v5 += 68;
        --v15;
      }
      while ( v15 );
      v5 = *(_DWORD *)&kInfo;
      v4 = (signed int)v16;
    }
    v11 = 0;
    LOBYTE(v20) = 0;
    if ( v5 )
    {
      operator delete((void *)v5);
      v11 = 0;
    }
    v4 += 16;
    *(_DWORD *)&kInfo.baseclass_0.___u0.baseclass_0.dummy[0] = v11;
    kInfo.baseclass_0._Mylast = v11;
    kInfo.baseclass_0._Myend = v11;
    v16 = (std::vector<RaidMemberInfo,std::allocator<RaidMemberInfo> > *)v4;
  }
  while ( v4 < (signed int)&unk_B68084 );
  SlideListWin::UpdateViewList(v2->m_pSeletMemberList);
  v12 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v12 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v12, v2->m_pSeletMemberList, v2->m_pkSlideBarEx);
}
// A85C00: using guessed type int __security_cookie;

//----- (0070B6E0) --------------------------------------------------------
bool __thiscall ExpeditionLootSelectWin::Create(ExpeditionLootSelectWin *this, PgFrameWork *pkFrameWork)
{
  ExpeditionLootSelectWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // edi@10
  bool result; // al@14
  PgSprData *v12; // eax@15
  NiNode *v13; // edi@18
  int v14; // edi@22
  D3DXCOLOR v15; // ST18_16@22
  char *v16; // eax@22
  PgWinText *v17; // eax@22
  SLWCreateInfo::Item *v18; // edi@22
  std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *v19; // edi@22
  SLWCreateInfo::Item *v20; // edi@28
  NiSourceTexture *v21; // edi@30
  PgSprData *v22; // eax@30
  SlideListWin *v23; // eax@30
  PgSprData *v24; // eax@30
  SlideBar *v25; // eax@30
  SlideBar *v26; // edi@30
  int v27; // eax@30
  NiTexturingProperty *v28; // esi@30
  NiNode *v29; // esi@32
  unsigned int v30; // [sp+18h] [bp-88h]@1
  UIUtil ui; // [sp+28h] [bp-78h]@22
  SLWCreateInfo kCreateInfo; // [sp+3Ch] [bp-64h]@22
  NiPointer<NiTexturingProperty> spTexProp; // [sp+58h] [bp-48h]@4
  NiSourceTexture *pkTexture; // [sp+5Ch] [bp-44h]@7
  NiRefObjectVtbl *iOffX; // [sp+60h] [bp-40h]@22
  int iOffY; // [sp+64h] [bp-3Ch]@1
  int uiTop; // [sp+68h] [bp-38h]@15
  int uiLeft; // [sp+6Ch] [bp-34h]@15
  NiPointer<NiNode> spNode; // [sp+70h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+74h] [bp-2Ch]@22
  unsigned int v41; // [sp+90h] [bp-10h]@1
  int v42; // [sp+9Ch] [bp-4h]@1
  int v43; // [sp+A0h] [bp+0h]@1

  v41 = (unsigned int)&v43 ^ __security_cookie;
  v30 = (unsigned int)&v43 ^ __security_cookie;
  v2 = this;
  iOffY = (int)pkFrameWork;
  spNode.m_pObject = 0;
  this->baseclass_0.m_pkFrameWork = pkFrameWork;
  v3 = dword_B70448;
  v42 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\RaidRootSelect.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v42) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v42) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v42 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, (PgFrameWork *)iOffY, "ExpeditionRootSelectWin", 0) )
  {
    v14 = uiLeft;
    iOffY = uiTop;
    iOffX = (NiRefObjectVtbl *)uiLeft;
    UIUtil::UIUtil(&ui);
    LOBYTE(v42) = 2;
    UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
    UIUtil::SetOffset(&ui, v14, iOffY);
    UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
    UIUtil::CreateSpr(&ui, "Panel01", 0);
    *(_QWORD *)&v15.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v15.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v16 = TextData2::Get(0x64462634u);
    v17 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v16, COERCE_D3DXCOLOR(v15.r), 5u);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v17,
      1,
      v30);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v42) = 3;
    v18 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v18->nItemType = 1;
    v18->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarNor", 0xCu);
    v19 = &v18->vecNodeName;
    LOBYTE(v42) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v19,
      &thisa);
    LOBYTE(v42) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarOver", 0xDu);
    LOBYTE(v42) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v19,
      &thisa);
    LOBYTE(v42) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "ColumnBarClick", 0xEu);
    LOBYTE(v42) = 6;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      v19,
      &thisa);
    LOBYTE(v42) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v20 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    v20->nItemType = 2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, "Column", 6u);
    LOBYTE(v42) = 7;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      &v20->vecNodeName,
      &thisa);
    LOBYTE(v42) = 3;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v20->pNode = spNode.m_pObject;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_nOffX = 3;
    kCreateInfo.m_nOffY = 0;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v21 = pkTexture;
    v22 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Textbox", &uiLeft, &uiTop, pkTexture);
    v23 = SlideListWin::CreateWin(
            uiLeft - (_DWORD)iOffX,
            uiTop - iOffY,
            v22,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pSeletMemberList = v23;
    v23->m_uiLClickMsg = 4;
    SlideListWin::AlignText(v2->m_pSeletMemberList, 0);
    SlideListWin::UpdateViewList(v2->m_pSeletMemberList);
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, v21);
    v25 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            v24,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pkSlideBarEx = v25;
    v25->m_uiClickMsg = 3;
    v2->m_pkSlideBarEx->m_eType = 1;
    v26 = v2->m_pkSlideBarEx;
    iOffX = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    ((void (__thiscall *)(SlideBar *))iOffX[42].__vecDelDtor)(v26);
    v27 = ((int (__thiscall *)(SlideBar *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v26);
    iOffX[77].__vecDelDtor((NiRefObject *)v2->m_pkSlideBarEx, v27);
    SlideBar::SetSplitCnt(v2->m_pkSlideBarEx, v2->m_pSeletMemberList->m_nSlideSplitCnt);
    UIUtil::CreateBtn(&ui, 0, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    ((void (__thiscall *)(ExpeditionLootSelectWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.69999999,
      0.1);
    LOBYTE(v42) = 2;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    LOBYTE(v42) = 1;
    UIUtil::_UIUtil(&ui);
    v28 = spTexProp.m_pObject;
    LOBYTE(v42) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
    v29 = spNode.m_pObject;
    v42 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v29 )
      v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v29, 1u);
    result = 1;
  }
  else
  {
    LOBYTE(v42) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v13 = spNode.m_pObject;
    v42 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0070BC40) --------------------------------------------------------
void *__thiscall ExpeditionMemberAddWin::_vector_deleting_destructor_(ExpeditionMemberAddWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionMemberAddWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionMemberAddWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D2490: using guessed type int (__stdcall *ExpeditionMemberAddWin___vftable_)(int uiFlags);
// 9D24AC: using guessed type int (__thiscall *ExpeditionMemberAddWin___vftable_)(void *p, char);

//----- (0070BC80) --------------------------------------------------------
void *__thiscall ExpeditionLootSelectWin::_vector_deleting_destructor_(ExpeditionLootSelectWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ExpeditionLootSelectWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ExpeditionLootSelectWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D26D0: using guessed type int (__stdcall *ExpeditionLootSelectWin___vftable_)(int uiFlags);
// 9D26EC: using guessed type int (__thiscall *ExpeditionLootSelectWin___vftable_)(void *p, char);

//----- (0070BCC0) --------------------------------------------------------
void *__thiscall EntryIconWin::_scalar_deleting_destructor_(EntryIconWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  EntryIconWin::_EntryIconWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0070BCF0) --------------------------------------------------------
void *__thiscall ExpeditionWin::_scalar_deleting_destructor_(ExpeditionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ExpeditionWin::_ExpeditionWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0070BD20) --------------------------------------------------------
void *__thiscall ExpeditionPartyWin::_vector_deleting_destructor_(ExpeditionPartyWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ExpeditionPartyWin::_ExpeditionPartyWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0070BD50) --------------------------------------------------------
void *__thiscall ExpeditionLootOptionWin::_vector_deleting_destructor_(ExpeditionLootOptionWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  ExpeditionLootOptionWin::_ExpeditionLootOptionWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0070BD90) --------------------------------------------------------
void __cdecl ConvertCommaNumber(__int64 i64Val, char *pNumberString)
{
  char *v2; // eax@1
  char v3; // dl@2
  int v4; // eax@3
  char v5; // dl@4
  char v6; // dl@4
  char v7; // dl@4
  char v8; // al@4
  char v9; // dl@6
  char v10; // dl@6
  char v11; // al@6
  char v12; // dl@8
  char v13; // al@8
  char comma2[4]; // [sp+Ch] [bp-Ch]@1
  char comma1[4]; // [sp+10h] [bp-8h]@4
  char comma0[4]; // [sp+14h] [bp-4h]@4

  sprintf(pNumberString, "%I64d");
  v2 = pNumberString;
  *(_DWORD *)comma2 = pNumberString + 1;
  do
    v3 = *v2++;
  while ( v3 );
  v4 = (int)&v2[-*(_DWORD *)comma2];
  if ( v4 <= 9 )
  {
    if ( v4 <= 6 )
    {
      if ( v4 > 3 )
      {
        *(_WORD *)&comma2[1] = 0;
        *(_DWORD *)comma1 = 0;
        comma2[3] = 0;
        *(_WORD *)comma2 = (unsigned __int8)pNumberString[v4 - 3];
        v12 = pNumberString[v4 - 2];
        v13 = pNumberString[v4 - 1];
        comma2[1] = v12;
        comma2[2] = v13;
        comma2[3] = 0;
        sprintf(pNumberString, "%I64d,%s");
      }
    }
    else
    {
      comma2[0] = pNumberString[v4 - 3];
      v9 = pNumberString[v4 - 2];
      *(_WORD *)&comma2[1] = 0;
      comma2[1] = v9;
      comma2[2] = pNumberString[v4 - 1];
      comma1[0] = pNumberString[v4 - 6];
      v10 = pNumberString[v4 - 5];
      v11 = pNumberString[v4 - 4];
      comma1[1] = v10;
      comma1[2] = v11;
      comma2[3] = 0;
      comma1[3] = 0;
      sprintf(pNumberString, "%I64d,%s,%s");
    }
  }
  else
  {
    comma0[0] = pNumberString[v4 - 3];
    v5 = pNumberString[v4 - 2];
    *(_WORD *)&comma0[1] = 0;
    comma0[1] = v5;
    comma0[2] = pNumberString[v4 - 1];
    comma1[0] = pNumberString[v4 - 6];
    v6 = pNumberString[v4 - 5];
    *(_WORD *)&comma1[1] = 0;
    comma1[1] = v6;
    comma1[2] = pNumberString[v4 - 4];
    comma2[0] = pNumberString[v4 - 9];
    v7 = pNumberString[v4 - 8];
    v8 = pNumberString[v4 - 7];
    comma2[1] = v7;
    comma2[2] = v8;
    comma0[3] = 0;
    comma1[3] = 0;
    comma2[3] = 0;
    sprintf(pNumberString, "%I64d,%s,%s,%s");
  }
}

//----- (0070BF40) --------------------------------------------------------
void __thiscall CoinEditWin::CoinEditWin(CoinEditWin *this)
{
  CoinEditWin *v1; // esi@1

  v1 = this;
  EditWin::EditWin(&this->baseclass_0);
  LODWORD(v1->i64Money) = 0;
  HIDWORD(v1->i64Money) = 0;
  v1->m_pkMoneyText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CoinEditWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CoinEditWin::_vftable_;
}
// 9D363C: using guessed type int (__stdcall *CoinEditWin___vftable_)(int uiFlags);
// 9D365C: using guessed type int (__thiscall *CoinEditWin___vftable_)(void *p, char);

//----- (0070BF70) --------------------------------------------------------
void __thiscall CoinEditWin::_CoinEditWin(CoinEditWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CoinEditWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CoinEditWin::_vftable_;
  EditWin::_EditWin(&this->baseclass_0);
}
// 9D363C: using guessed type int (__stdcall *CoinEditWin___vftable_)(int uiFlags);
// 9D365C: using guessed type int (__thiscall *CoinEditWin___vftable_)(void *p, char);

//----- (0070BF90) --------------------------------------------------------
void __thiscall CoinEditWin::InputNumberDone(CoinEditWin *this)
{
  CoinEditWin *v1; // esi@1
  char pNumberString[64]; // [sp+4h] [bp-44h]@1
  unsigned int v3; // [sp+44h] [bp-4h]@1
  int v4; // [sp+48h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = this;
  pNumberString[0] = 0;
  memset(&pNumberString[1], 0, 0x3Fu);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
    (NiRefObject *)v1,
    (unsigned int)&unk_9D31E5);
  ((void (__stdcall *)(signed int))v1->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  if ( v1->i64Money )
  {
    ConvertCommaNumber(v1->i64Money, pNumberString);
    ((void (__stdcall *)(_DWORD))v1->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
  }
  else
  {
    ((void (__stdcall *)(_UNKNOWN *))v1->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D31E6);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0070C050) --------------------------------------------------------
void __thiscall CoinExchangeWin::CoinExchangeWin(CoinExchangeWin *this)
{
  CoinExchangeWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkTabMoneyBut = 0;
  v1->m_pkExchangeBut = 0;
  v1->m_pkTab01 = 0;
  v1->m_pkTab02 = 0;
  v1->m_pkTabText1 = 0;
  v1->m_pkTabText2 = 0;
  v1->m_pkExchangeableCoinText = 0;
  v1->m_pkBottomText = 0;
  v1->m_pkCoinEdit = 0;
  v1->m_pkText01 = 0;
  v1->m_pkText02 = 0;
  v1->m_uiCurFoscus = 0;
  LODWORD(v1->m_i64Coin) = 0;
  HIDWORD(v1->m_i64Coin) = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CoinExchangeWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CoinExchangeWin::_vftable_;
}
// 9D3850: using guessed type int (__stdcall *CoinExchangeWin___vftable_)(int uiFlags);
// 9D386C: using guessed type int (__thiscall *CoinExchangeWin___vftable_)(void *p, char);

//----- (0070C0D0) --------------------------------------------------------
void __thiscall CoinExchangeWin::_CoinExchangeWin(CoinExchangeWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CoinExchangeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CoinExchangeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D3850: using guessed type int (__stdcall *CoinExchangeWin___vftable_)(int uiFlags);
// 9D386C: using guessed type int (__thiscall *CoinExchangeWin___vftable_)(void *p, char);

//----- (0070C0F0) --------------------------------------------------------
void __thiscall CoinExchangeWin::SetEditFocus(CoinExchangeWin *this, unsigned int uiFocus)
{
  CoinExchangeWin *v2; // edx@1
  CoinEditWin *v3; // ecx@1

  v2 = this;
  v3 = this->m_pkCoinEdit;
  if ( v3 )
  {
    v2->m_uiCurFoscus = uiFocus;
    if ( uiFocus )
    {
      if ( uiFocus == 1 )
        ((void (*)(void))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
    }
    else
    {
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
    }
  }
}

//----- (0070C130) --------------------------------------------------------
void __thiscall CoinExchangeWin::SetExchangeableCoin(CoinExchangeWin *this, __int64 coin)
{
  CoinExchangeWin *v2; // esi@1
  char pNumberString[64]; // [sp+4h] [bp-44h]@1
  unsigned int v4; // [sp+44h] [bp-4h]@1
  int v5; // [sp+48h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  v2 = this;
  pNumberString[0] = 0;
  memset(&pNumberString[1], 0, 0x3Fu);
  ConvertCommaNumber(coin, pNumberString);
  ((void (__stdcall *)(_DWORD))v2->m_pkExchangeableCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pNumberString);
}
// A85C00: using guessed type int __security_cookie;

//----- (0070C190) --------------------------------------------------------
void __thiscall GambleWin::GambleWin(GambleWin *this)
{
  GambleWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleWin::_vftable_;
}
// 9D3A90: using guessed type int (__stdcall *GambleWin___vftable_)(int uiFlags);
// 9D3AAC: using guessed type int (__thiscall *GambleWin___vftable_)(void *p, char);

//----- (0070C1B0) --------------------------------------------------------
void __thiscall GambleWin::_GambleWin(GambleWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D3A90: using guessed type int (__stdcall *GambleWin___vftable_)(int uiFlags);
// 9D3AAC: using guessed type int (__thiscall *GambleWin___vftable_)(void *p, char);

//----- (0070C1D0) --------------------------------------------------------
void __thiscall GambleMiniWin::GambleMiniWin(GambleMiniWin *this)
{
  GambleMiniWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleMiniWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleMiniWin::_vftable_;
}
// 9D3CD0: using guessed type int (__stdcall *GambleMiniWin___vftable_)(int uiFlags);
// 9D3CEC: using guessed type int (__thiscall *GambleMiniWin___vftable_)(void *p, char);

//----- (0070C1F0) --------------------------------------------------------
void __thiscall GambleMiniWin::_GambleMiniWin(GambleMiniWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleMiniWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleMiniWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D3CD0: using guessed type int (__stdcall *GambleMiniWin___vftable_)(int uiFlags);
// 9D3CEC: using guessed type int (__thiscall *GambleMiniWin___vftable_)(void *p, char);

//----- (0070C210) --------------------------------------------------------
void __thiscall GambleMiniWin::OnCommand(GambleMiniWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@2

  if ( !wParam )
  {
    v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    GameFrameWork::OnOpenGambleHouseWin((GameFrameWork *)v3, 0);
  }
}

//----- (0070C240) --------------------------------------------------------
void __thiscall GambleHouseCardWin::GambleHouseCardWin(GambleHouseCardWin *this)
{
  GambleHouseCardWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->m_pkMyCoinText = 0;
  v1->m_pkAbleCoinText = 0;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleHouseCardWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleHouseCardWin::_vftable_;
}
// 9D3F10: using guessed type int (__stdcall *GambleHouseCardWin___vftable_)(int uiFlags);
// 9D3F2C: using guessed type int (__thiscall *GambleHouseCardWin___vftable_)(void *p, char);

//----- (0070C270) --------------------------------------------------------
void __thiscall GambleHouseCardWin::_GambleHouseCardWin(GambleHouseCardWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleHouseCardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleHouseCardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D3F10: using guessed type int (__stdcall *GambleHouseCardWin___vftable_)(int uiFlags);
// 9D3F2C: using guessed type int (__thiscall *GambleHouseCardWin___vftable_)(void *p, char);

//----- (0070C290) --------------------------------------------------------
void __thiscall GambleHouseCardWin::OnCommand(GambleHouseCardWin *this, unsigned int wParam, int lParam)
{
  if ( !wParam )
    PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
}

//----- (0070C2B0) --------------------------------------------------------
void __thiscall CoinEditWin::SetFocus(CoinEditWin *this)
{
  int v1; // edi@0
  CoinEditWin *v2; // esi@1
  PgWinEditText *v3; // ecx@2
  int v4; // ST0C_4@4
  NiRefObjectVtbl *v5; // edi@4
  char *v6; // eax@4

  v2 = this;
  if ( this->baseclass_0.m_bEnalbe )
  {
    EditWin::ms_pkCurEditWin = (PgWin *)this;
    ((void (*)(void))this->baseclass_0.m_spEditWin.m_pObject->baseclass_0.vfptr[3].__vecDelDtor)();
    v3 = v2->baseclass_0.m_spTextWin.m_pObject;
    v2->baseclass_0.m_uiLastBlinkTime = 0;
    v2->baseclass_0.m_iShowCaret = 0;
    ((void (__stdcall *)(signed int))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    if ( v2->i64Money )
    {
      v4 = v1;
      v5 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v6 = fs("%I64d");
      ((void (__thiscall *)(CoinEditWin *, char *, int))v5[115].__vecDelDtor)(v2, v6, v4);
      ((void (__cdecl *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
    else
    {
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[115].__vecDelDtor(
        (NiRefObject *)v2,
        (unsigned int)&unk_9D31E7);
      ((void (__stdcall *)(_DWORD))v2->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    }
  }
}
// 70C2B0: could not find valid save-restore pair for edi

//----- (0070C370) --------------------------------------------------------
void __thiscall CoinExchangeWin::OnShowWin(CoinExchangeWin *this)
{
  CoinExchangeWin *v1; // esi@1
  CoinEditWin *v2; // ecx@1
  CoinEditWin *v3; // eax@3
  MHDiceGameTask *v4; // edi@4
  unsigned __int64 v5; // qax@9
  unsigned int v6; // edi@9
  unsigned __int64 v7; // kr00_8@10
  PgFrameWork *v8; // eax@11
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-50h]@3
  MHDiceGameTask *pkTask; // [sp+14h] [bp-48h]@3
  char pNumberString; // [sp+18h] [bp-44h]@9
  char dst; // [sp+19h] [bp-43h]@9
  unsigned int v13; // [sp+58h] [bp-4h]@1
  int v14; // [sp+5Ch] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v1 = this;
  PgWin::OnShowWin(&this->baseclass_0.baseclass_0.baseclass_0);
  v2 = v1->m_pkCoinEdit;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 1;
    ((void (*)(void))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[120].__vecDelDtor)();
  }
  v3 = v1->m_pkCoinEdit;
  LODWORD(v1->m_i64Coin) = 0;
  HIDWORD(v1->m_i64Coin) = 0;
  LODWORD(v3->i64Money) = 0;
  HIDWORD(v3->i64Money) = 0;
  CoinEditWin::InputNumberDone(v1->m_pkCoinEdit);
  pkTask = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( pkTask )
  {
    if ( v1->m_pkTab01->m_bCheck )
    {
      v5 = User::ExchangeableCoin(&g_kUser);
      pkTask = (MHDiceGameTask *)HIDWORD(v5);
      v6 = v5;
      pNumberString = 0;
      memset(&dst, 0, 0x3Fu);
      ConvertCommaNumber(__PAIR__((unsigned int)pkTask, v6), &pNumberString);
      ((void (__stdcall *)(char *))v1->m_pkExchangeableCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&pNumberString);
    }
    else
    {
      v7 = User::Coin(&g_kUser);
      pkTask = (MHDiceGameTask *)HIDWORD(v7);
      pNumberString = 0;
      memset(&dst, 0, 0x3Fu);
      ConvertCommaNumber(__PAIR__((unsigned int)pkTask, (unsigned int)v7), &pNumberString);
      ((void (__stdcall *)(char *))v1->m_pkExchangeableCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&pNumberString);
    }
  }
  v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v8 )
    GameFrameWork::OpenPlayGuideWin((GameFrameWork *)v8, BIL_GBHOUSE_2);
}
// A85C00: using guessed type int __security_cookie;

//----- (0070C4E0) --------------------------------------------------------
void __thiscall CoinExchangeWin::OnClose(CoinExchangeWin *this)
{
  CoinExchangeWin *v1; // esi@1
  CoinEditWin *v2; // ecx@1

  v1 = this;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 8u, 0xBu, 0, 0);
  v2 = v1->m_pkCoinEdit;
  if ( v2 )
  {
    v1->m_uiCurFoscus = 0;
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[121].__vecDelDtor)(1);
  }
  ((void (__stdcall *)(_DWORD))v1->m_pkExchangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D31EA);
  ((void (__stdcall *)(_DWORD))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D31EB);
  ((void (__stdcall *)(_DWORD))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D31F2);
  ((void (__stdcall *)(_DWORD))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D31F3);
}

//----- (0070C580) --------------------------------------------------------
void __thiscall GambleWin::OnCommand(GambleWin *this, unsigned int wParam, int lParam)
{
  PgFrameWork *v3; // eax@3
  MHDiceGameTask *v4; // edi@4
  unsigned int v5; // esi@5

  if ( wParam )
  {
    if ( wParam == 1 )
    {
      v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      GameFrameWork::OnOpenGambleHouseWin((GameFrameWork *)v3, 0);
    }
  }
  else
  {
    v4 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam)->m_pObject;
    if ( wParam )
    {
      v5 = wParam;
      if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      }
    }
    if ( v4 )
      MHDiceGameTask::NcGambleGambleHouseExitReq(v4);
  }
}

//----- (0070C600) --------------------------------------------------------
void __thiscall GambleWin::ChangeCoin(GambleWin *this)
{
  GambleWin *v1; // esi@1
  MHDiceGameTask *v2; // edi@2
  __int64 v3; // kr00_8@6
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-90h]@1
  __int64 i64Val; // [sp+10h] [bp-8Ch]@1
  char pCoinString[64]; // [sp+18h] [bp-84h]@6
  char pExchageString[64]; // [sp+58h] [bp-44h]@6
  unsigned int v8; // [sp+98h] [bp-4h]@1
  int v9; // [sp+9Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  HIDWORD(i64Val) = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
  if ( HIDWORD(i64Val) )
  {
    pCoinString[0] = 0;
    memset(&pCoinString[1], 0, 0x3Fu);
    pExchageString[0] = 0;
    memset(&pExchageString[1], 0, 0x3Fu);
    v3 = User::Coin(&g_kUser);
    i64Val = User::ExchangeableCoin(&g_kUser);
    ConvertCommaNumber(v3, pCoinString);
    ConvertCommaNumber(i64Val, pExchageString);
    ((void (__stdcall *)(_DWORD))v1->m_pkMyCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pCoinString);
    ((void (__stdcall *)(_DWORD))v1->m_pkAbleCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pExchageString);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0070C720) --------------------------------------------------------
void __thiscall GambleHouseCardWin::ChangeCoin(GambleHouseCardWin *this)
{
  GambleHouseCardWin *v1; // esi@1
  MHDiceGameTask *v2; // edi@2
  __int64 v3; // kr00_8@6
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-90h]@1
  __int64 i64Val; // [sp+10h] [bp-8Ch]@1
  char pCoinString[64]; // [sp+18h] [bp-84h]@6
  char pExchageString[64]; // [sp+58h] [bp-44h]@6
  unsigned int v8; // [sp+98h] [bp-4h]@1
  int v9; // [sp+9Ch] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = this;
  HIDWORD(i64Val) = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
  if ( HIDWORD(i64Val) )
  {
    pCoinString[0] = 0;
    memset(&pCoinString[1], 0, 0x3Fu);
    pExchageString[0] = 0;
    memset(&pExchageString[1], 0, 0x3Fu);
    v3 = User::Coin(&g_kUser);
    i64Val = User::ExchangeableCoin(&g_kUser);
    ConvertCommaNumber(v3, pCoinString);
    ConvertCommaNumber(i64Val, pExchageString);
    ((void (__stdcall *)(_DWORD))v1->m_pkMyCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pCoinString);
    ((void (__stdcall *)(_DWORD))v1->m_pkAbleCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pExchageString);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0070C840) --------------------------------------------------------
void __thiscall CoinExchangeWin::OnEditEnd(CoinExchangeWin *this, unsigned int wParam, int lParam)
{
  CoinExchangeWin *v3; // esi@1
  const char *v4; // eax@2
  __int64 v5; // qax@2
  int v6; // ecx@2
  GBHouse *v7; // eax@3
  __int64 v8; // qax@4
  unsigned int v9; // ebx@4
  unsigned int v10; // edi@4
  NiRefObjectVtbl *v11; // ST20_4@4
  char *v12; // ST10_4@4
  NiRefObjectVtbl *v13; // ST20_4@4
  char *v14; // eax@4
  NiRefObjectVtbl *v15; // ST20_4@4
  char *v16; // ST10_4@4
  NiRefObjectVtbl *v17; // ST20_4@4
  char *v18; // eax@4
  GBHouse *v19; // eax@5
  __int64 v20; // qax@6
  unsigned int v21; // ebx@6
  unsigned int v22; // edi@6
  unsigned __int64 v23; // qax@6
  __int64 v24; // kr00_8@9
  NiRefObjectVtbl *v25; // ST20_4@9
  NiRefObjectVtbl *v26; // ST20_4@9
  NiRefObjectVtbl *v27; // ST20_4@9
  char *v28; // eax@9
  NiRefObjectVtbl *v29; // ST20_4@9
  char *v30; // ST10_4@9
  unsigned int v31; // [sp-4h] [bp-Ch]@13
  GBHouse *pkHouse; // [sp+4h] [bp-4h]@5

  v3 = this;
  if ( this->m_uiCurFoscus == 1 )
  {
    v4 = (const char *)((int (*)(void))this->m_pkCoinEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v5 = _atoi64(v4);
    LODWORD(v3->m_i64Coin) = v5;
    v6 = LODWORD(v3->m_i64Coin);
    LODWORD(v5) = v3->m_pkCoinEdit;
    HIDWORD(v3->m_i64Coin) = HIDWORD(v5);
    *(_DWORD *)(v5 + 328) = v6;
    *(_DWORD *)(v5 + 332) = HIDWORD(v3->m_i64Coin);
    CoinEditWin::InputNumberDone(v3->m_pkCoinEdit);
    if ( v3->m_pkTab01->m_bCheck )
    {
      v7 = GBHouseTab::GetByIndex(0);
      if ( v7 )
      {
        v8 = v7->GB_GameMoney * v3->m_i64Coin;
        v9 = HIDWORD(v8);
        v10 = v8;
        v11 = v3->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetGem(v8);
        v12 = fs("%I64d");
        v11[118].__vecDelDtor((NiRefObject *)v3->m_pkGemText, (unsigned int)v12);
        v13 = v3->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetGold(__PAIR__(v9, v10));
        v14 = fs("%I64d");
        v13[118].__vecDelDtor((NiRefObject *)v3->m_pkGoldText, (unsigned int)v14);
        v15 = v3->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetSilver(__PAIR__(v9, v10));
        v16 = fs("%I64d");
        v15[118].__vecDelDtor((NiRefObject *)v3->m_pkSilverText, (unsigned int)v16);
        v17 = v3->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetCopper(__PAIR__(v9, v10));
        v18 = fs("%I64d");
        v17[118].__vecDelDtor((NiRefObject *)v3->m_pkCopperText, (unsigned int)v18);
      }
    }
    else
    {
      v19 = GBHouseTab::GetByIndex(0);
      pkHouse = v19;
      if ( v19 )
      {
        v20 = v19->GB_GameMoney * v3->m_i64Coin;
        v21 = HIDWORD(v20);
        v22 = v20;
        v23 = (unsigned __int64)pkHouse->GB_ExchangeTax * v20 / 0x3E8;
        if ( v21 | v22 && !v23 )
          v23 = 1i64;
        v24 = __PAIR__(v21, v22) - v23;
        v25 = v3->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetGem(__PAIR__(v21, v22) - v23);
        fs("%I64d");
        ((void (__thiscall *)(PgWinText *))v25[118].__vecDelDtor)(v3->m_pkGemText);
        v26 = v3->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetGold(v24);
        fs("%I64d");
        ((void (__thiscall *)(PgWinText *))v26[118].__vecDelDtor)(v3->m_pkGoldText);
        v27 = v3->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetSilver(v24);
        v28 = fs("%I64d");
        v27[118].__vecDelDtor((NiRefObject *)v3->m_pkSilverText, (unsigned int)v28);
        v29 = v3->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        User::GetCopper(v24);
        v30 = fs("%I64d");
        v29[118].__vecDelDtor((NiRefObject *)v3->m_pkCopperText, (unsigned int)v30);
      }
    }
    v31 = SHIDWORD(v3->m_i64Coin) >= 0 && (SHIDWORD(v3->m_i64Coin) > 0 || LODWORD(v3->m_i64Coin));
    v3->m_pkExchangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v3->m_pkExchangeBut,
      v31);
  }
}
// 70C840: could not find valid save-restore pair for ebx
// 70C840: could not find valid save-restore pair for edi

//----- (0070CB20) --------------------------------------------------------
void __thiscall CoinExchangeWin::OnExchange(CoinExchangeWin *this)
{
  CoinExchangeWin *v1; // esi@1
  const char *v2; // eax@2
  __int64 v3; // qax@2
  int v4; // ecx@2
  CoinEditWin *v5; // eax@3
  int v6; // ebx@3
  MHDiceGameTask *v7; // edi@5
  MHDiceGameTask *v8; // ebx@6
  char *v9; // eax@15
  unsigned __int64 v10; // [sp-Ch] [bp-20h]@11
  int iCoin; // [sp+8h] [bp-Ch]@3
  int iCoin_4; // [sp+Ch] [bp-8h]@3
  NiPointer<MHDiceGameTask> result; // [sp+10h] [bp-4h]@5

  v1 = this;
  if ( (unsigned __int8)((int (*)(void))this->m_pkCoinEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)() )
  {
    v2 = (const char *)((int (*)(void))v1->m_pkCoinEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)();
    v3 = _atoi64(v2);
    LODWORD(v1->m_i64Coin) = v3;
    v4 = LODWORD(v1->m_i64Coin);
    LODWORD(v3) = v1->m_pkCoinEdit;
    HIDWORD(v1->m_i64Coin) = HIDWORD(v3);
    *(_DWORD *)(v3 + 328) = v4;
    *(_DWORD *)(v3 + 332) = HIDWORD(v1->m_i64Coin);
    CoinEditWin::InputNumberDone(v1->m_pkCoinEdit);
  }
  v5 = v1->m_pkCoinEdit;
  v6 = HIDWORD(v5->i64Money);
  iCoin = LODWORD(v5->i64Money);
  iCoin_4 = v6;
  if ( v6 || LODWORD(v5->i64Money) )
  {
    v7 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    if ( result.m_pObject )
    {
      v8 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v8 )
          v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
      }
      v6 = iCoin_4;
    }
    if ( v7 )
    {
      HIDWORD(v10) = v6;
      if ( v1->m_pkTab01->m_bCheck )
      {
        LODWORD(v10) = iCoin;
        MHDiceGameTask::NcGambleCoinBuyReq(v7, v10);
        PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
        return;
      }
      LODWORD(v10) = iCoin;
      MHDiceGameTask::NcGambleCoinSellReq(v7, v10);
    }
    PgWin::PostMsg(&v1->baseclass_0.baseclass_0.baseclass_0, &v1->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  else
  {
    v9 = TextData::Get(0x3BAFA08Du);
    MsgBox::Modal(MSGBOX_OK, v9);
  }
}

//----- (0070CC60) --------------------------------------------------------
void __thiscall CoinExchangeWin::OnTAB1(CoinExchangeWin *this)
{
  CoinExchangeWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1
  NiRefObjectVtbl *v4; // edi@1
  char *v5; // eax@1
  NiRefObjectVtbl *v6; // edi@1
  char *v7; // eax@1
  CoinEditWin *v8; // eax@1
  MHDiceGameTask *v9; // edi@1
  unsigned __int64 v10; // kr00_8@6
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-50h]@1
  __int64 nExchangeableCoin; // [sp+10h] [bp-4Ch]@2
  char pNumberString; // [sp+18h] [bp-44h]@6
  char dst; // [sp+19h] [bp-43h]@6
  unsigned int v15; // [sp+58h] [bp-4h]@1
  int v16; // [sp+5Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  this->m_pkTab01->m_bCheck = 1;
  this->m_pkTab02->m_bCheck = 0;
  v2 = this->m_pkText01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData2::Get(0xC2BD3C17u);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkText01, (unsigned int)v3);
  v4 = v1->m_pkText02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = TextData2::Get(0x40603B82u);
  v4[118].__vecDelDtor((NiRefObject *)v1->m_pkText02, (unsigned int)v5);
  v6 = v1->m_pkBottomText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = TextData2::Get(0xCB54363Bu);
  v6[118].__vecDelDtor((NiRefObject *)v1->m_pkBottomText, (unsigned int)v7);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D320B);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D3212);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D3213);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D322A);
  v8 = v1->m_pkCoinEdit;
  LODWORD(v8->i64Money) = 0;
  HIDWORD(v8->i64Money) = 0;
  CoinEditWin::InputNumberDone(v1->m_pkCoinEdit);
  ((void (__stdcall *)(_DWORD))v1->m_pkExchangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v9 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    HIDWORD(nExchangeableCoin) = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( HIDWORD(nExchangeableCoin) )
        (*(void (__stdcall **)(signed int))*HIDWORD(nExchangeableCoin))(1);
    }
  }
  if ( v9 )
  {
    v10 = User::ExchangeableCoin(&g_kUser);
    HIDWORD(nExchangeableCoin) = HIDWORD(v10);
    pNumberString = 0;
    memset(&dst, 0, 0x3Fu);
    ConvertCommaNumber(__PAIR__(HIDWORD(nExchangeableCoin), (unsigned int)v10), &pNumberString);
    ((void (__stdcall *)(char *))v1->m_pkExchangeableCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&pNumberString);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0070CE10) --------------------------------------------------------
void __thiscall CoinExchangeWin::OnTAB2(CoinExchangeWin *this)
{
  CoinExchangeWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1
  NiRefObjectVtbl *v4; // edi@1
  char *v5; // eax@1
  NiRefObjectVtbl *v6; // edi@1
  char *v7; // eax@1
  CoinEditWin *v8; // eax@1
  MHDiceGameTask *v9; // edi@1
  unsigned __int64 v10; // kr00_8@6
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-50h]@1
  __int64 nCoin; // [sp+10h] [bp-4Ch]@2
  char pNumberString; // [sp+18h] [bp-44h]@6
  char dst; // [sp+19h] [bp-43h]@6
  unsigned int v15; // [sp+58h] [bp-4h]@1
  int v16; // [sp+5Ch] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  this->m_pkTab01->m_bCheck = 0;
  this->m_pkTab02->m_bCheck = 1;
  v2 = this->m_pkText01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData2::Get(0x3544492Bu);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkText01, (unsigned int)v3);
  v4 = v1->m_pkText02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v5 = TextData2::Get(0x828D8F7Bu);
  v4[118].__vecDelDtor((NiRefObject *)v1->m_pkText02, (unsigned int)v5);
  v6 = v1->m_pkBottomText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v7 = TextData2::Get(0x2C2A4A36u);
  v6[118].__vecDelDtor((NiRefObject *)v1->m_pkBottomText, (unsigned int)v7);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D322B);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D3232);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D3233);
  ((void (__stdcall *)(_UNKNOWN *))v1->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D3245);
  v8 = v1->m_pkCoinEdit;
  LODWORD(v8->i64Money) = 0;
  HIDWORD(v8->i64Money) = 0;
  CoinEditWin::InputNumberDone(v1->m_pkCoinEdit);
  ((void (__stdcall *)(_DWORD))v1->m_pkExchangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v9 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    HIDWORD(nCoin) = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( HIDWORD(nCoin) )
        (*(void (__stdcall **)(signed int))*HIDWORD(nCoin))(1);
    }
  }
  if ( v9 )
  {
    v10 = User::Coin(&g_kUser);
    HIDWORD(nCoin) = HIDWORD(v10);
    pNumberString = 0;
    memset(&dst, 0, 0x3Fu);
    ConvertCommaNumber(__PAIR__(HIDWORD(nCoin), (unsigned int)v10), &pNumberString);
    ((void (__stdcall *)(char *))v1->m_pkExchangeableCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&pNumberString);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0070CFC0) --------------------------------------------------------
void __thiscall CoinExchangeWin::UpdateMeWin(CoinExchangeWin *this, float fCurTime)
{
  int v2; // ebx@0
  int v3; // edi@0
  CoinExchangeWin *v4; // esi@1
  const char *v5; // eax@2
  int v6; // ebx@2
  int v7; // edi@2
  __int64 v8; // kr00_8@2
  GBHouse *v9; // eax@3
  __int64 v10; // qax@4
  unsigned int v11; // ebx@4
  unsigned int v12; // edi@4
  NiRefObjectVtbl *v13; // ST24_4@4
  char *v14; // eax@4
  NiRefObjectVtbl *v15; // ST24_4@4
  char *v16; // ST14_4@4
  NiRefObjectVtbl *v17; // ST24_4@4
  char *v18; // eax@4
  NiRefObjectVtbl *v19; // ST24_4@4
  NiRefObjectVtbl *v20; // eax@4
  GBHouse *v21; // eax@5
  __int64 v22; // qax@6
  unsigned int v23; // ebx@6
  unsigned int v24; // edi@6
  unsigned __int64 v25; // qax@6
  __int64 v26; // kr08_8@9
  NiRefObjectVtbl *v27; // ST24_4@9
  char *v28; // eax@9
  NiRefObjectVtbl *v29; // ST24_4@9
  char *v30; // ST14_4@9
  NiRefObjectVtbl *v31; // ST24_4@9
  char *v32; // eax@9
  NiRefObjectVtbl *v33; // ST24_4@9
  int v34; // [sp-4h] [bp-14h]@2
  GBHouse *pkHouse; // [sp+Ch] [bp-4h]@5

  v4 = this;
  if ( !(unsigned __int8)((int (*)(void))this->m_pkCoinEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)() )
    return;
  v34 = v2;
  v5 = (const char *)((int (__stdcall *)(int))v4->m_pkCoinEdit->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[113].__vecDelDtor)(v3);
  v8 = _atoi64(v5);
  v7 = HIDWORD(v8);
  v6 = v8;
  if ( v4->m_pkTab01->m_bCheck )
  {
    v9 = GBHouseTab::GetByIndex(0);
    if ( v9 )
    {
      v10 = v9->GB_GameMoney * v8;
      v11 = HIDWORD(v10);
      v12 = v10;
      v13 = v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetGem(v10);
      v14 = fs("%I64d");
      ((void (__thiscall *)(PgWinText *, char *, int))v13[118].__vecDelDtor)(v4->m_pkGemText, v14, v34);
      v15 = v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetGold(__PAIR__(v11, v12));
      v16 = fs("%I64d");
      v15[118].__vecDelDtor((NiRefObject *)v4->m_pkGoldText, (unsigned int)v16);
      v17 = v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetSilver(__PAIR__(v11, v12));
      v18 = fs("%I64d");
      v17[118].__vecDelDtor((NiRefObject *)v4->m_pkSilverText, (unsigned int)v18);
      v19 = v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetCopper(__PAIR__(v11, v12));
      fs("%I64d");
      v20 = v19;
LABEL_10:
      ((void (__thiscall *)(PgWinText *))v20[118].__vecDelDtor)(v4->m_pkCopperText);
      v7 = HIDWORD(v8);
      v6 = v8;
      goto LABEL_11;
    }
  }
  else
  {
    v21 = GBHouseTab::GetByIndex(0);
    pkHouse = v21;
    if ( v21 )
    {
      v22 = v21->GB_GameMoney * v8;
      v23 = HIDWORD(v22);
      v24 = v22;
      v25 = (unsigned __int64)pkHouse->GB_ExchangeTax * v22 / 0x3E8;
      if ( v23 | v24 && !v25 )
        v25 = 1i64;
      v26 = __PAIR__(v23, v24) - v25;
      v27 = v4->m_pkGemText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetGem(__PAIR__(v23, v24) - v25);
      v28 = fs("%I64d");
      v27[118].__vecDelDtor((NiRefObject *)v4->m_pkGemText, (unsigned int)v28);
      v29 = v4->m_pkGoldText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetGold(v26);
      v30 = fs("%I64d");
      v29[118].__vecDelDtor((NiRefObject *)v4->m_pkGoldText, (unsigned int)v30);
      v31 = v4->m_pkSilverText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetSilver(v26);
      v32 = fs("%I64d");
      v31[118].__vecDelDtor((NiRefObject *)v4->m_pkSilverText, (unsigned int)v32);
      v33 = v4->m_pkCopperText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      User::GetCopper(v26);
      fs("%I64d");
      v20 = v33;
      goto LABEL_10;
    }
  }
LABEL_11:
  if ( v7 || v6 )
    ((void (__cdecl *)(signed int))v4->m_pkExchangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  else
    ((void (__thiscall *)(PgWinBut *))v4->m_pkExchangeBut->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v4->m_pkExchangeBut);
}
// 70CFC0: could not find valid save-restore pair for ebx

//----- (0070D270) --------------------------------------------------------
bool __thiscall GambleWin::Create(GambleWin *this, PgFrameWork *pkFrameWork)
{
  GambleWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  PgWin *v13; // edi@18
  D3DXCOLOR v14; // ST1C_16@18
  char *v15; // eax@18
  PgWinText *v16; // eax@18
  D3DXCOLOR v17; // ST1C_16@18
  char *v18; // eax@18
  PgWinText *v19; // edi@18
  NiRefObjectVtbl *v20; // ebx@18
  PgFont *v21; // eax@18
  D3DXCOLOR v22; // ST1C_16@18
  char *v23; // eax@18
  PgWinText *v24; // eax@18
  D3DXCOLOR v25; // ST1C_16@18
  char *v26; // eax@18
  PgWinText *v27; // eax@18
  D3DXCOLOR v28; // ST1C_16@18
  PgWinText *v29; // eax@18
  D3DXCOLOR v30; // ST1C_16@18
  PgWinText *v31; // eax@18
  D3DXCOLOR v32; // ST14_16@18
  PgWinText *v33; // eax@18
  D3DXCOLOR v34; // ST14_16@18
  PgWinText *v35; // eax@18
  NiNode *v36; // esi@19
  const char *v37; // [sp+20h] [bp-4Ch]@16
  int *v38; // [sp+24h] [bp-48h]@16
  int *v39; // [sp+28h] [bp-44h]@16
  NiSourceTexture *v40; // [sp+2Ch] [bp-40h]@16
  UIUtil ui; // [sp+40h] [bp-2Ch]@18
  int uiLeft; // [sp+54h] [bp-18h]@11
  int uiTop; // [sp+58h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+5Ch] [bp-10h]@1
  int v45; // [sp+68h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v45 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v45 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\GB_MoneyInfoMax.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "GambleWin", 0) )
  {
    v4 = spNode.m_pObject;
    v45 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v40 = v10;
    v39 = &uiTop;
    v38 = &uiLeft;
    v37 = "Theme";
  }
  else
  {
    v40 = 0;
    v39 = &uiTop;
    v38 = &uiLeft;
    v37 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v37, v38, v39, v40);
  PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v45) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v12 = UIUtil::CreateSpr(&ui, "Panel01", 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  UIUtil::CreateBtn(&ui, 1u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  v13 = (PgWin *)UIUtil::CreateBtn(&ui, 0, "BtnNor", "BtnClick", "BtnOver", 0, 0);
  *(_QWORD *)&v14.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v14.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v15 = TextData2::Get(0x31525197u);
  v16 = UIUtil::CreateAttachedText(&ui, v13, v15, COERCE_D3DXCOLOR(v14.r), 5u);
  v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v16,
    0);
  *(_QWORD *)&v17.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v17.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v18 = TextData2::Get(0x2B548F7Fu);
  v19 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v18, COERCE_D3DXCOLOR(v17.r), 5u);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  v20 = v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v21 = Font::Get(MAIN_MENU);
  v20[113].__vecDelDtor((NiRefObject *)v19, (unsigned int)v21);
  *(_QWORD *)&v22.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v22.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v23 = TextData2::Get(0x3544492Bu);
  v24 = UIUtil::CreateTextNoSpr(&ui, "Text01", v23, COERCE_D3DXCOLOR(v22.r), 5u);
  v24->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v24,
    0);
  *(_QWORD *)&v25.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v25.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v26 = TextData2::Get(0xC2BD3C17u);
  v27 = UIUtil::CreateTextNoSpr(&ui, "Text02", v26, COERCE_D3DXCOLOR(v25.r), 5u);
  v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v27,
    0);
  *(_QWORD *)&v28.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v28.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v29 = UIUtil::CreateTextNoSpr(&ui, "TextCoin01", "Coin", COERCE_D3DXCOLOR(v28.r), 5u);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  *(_QWORD *)&v30.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v30.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v31 = UIUtil::CreateTextNoSpr(&ui, "TextCoin02", "Coin", COERCE_D3DXCOLOR(v30.r), 5u);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  *(_QWORD *)&v32.r = Color::m_kDxBlueColor;
  *(_QWORD *)&v32.b = qword_A745F8;
  v33 = UIUtil::CreateText(&ui, "Text03", "000,000,000", 0, COERCE_D3DXCOLOR(v32.r), 5u, 0, 0);
  v2->m_pkMyCoinText = v33;
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  *(_QWORD *)&v34.r = Color::m_kDxBlueColor;
  *(_QWORD *)&v34.b = qword_A745F8;
  v35 = UIUtil::CreateText(&ui, "Text04", "000,000,000", 0, COERCE_D3DXCOLOR(v34.r), 5u, 0, 0);
  v2->m_pkAbleCoinText = v35;
  v35->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v35,
    0);
  PgWin::InitPosRightTop(
    &v2->baseclass_0.baseclass_0.baseclass_0,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    1.0,
    0.30000001);
  LOBYTE(v45) = 0;
  UIUtil::_UIUtil(&ui);
  v45 = -1;
  if ( spNode.m_pObject )
  {
    v36 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v36 )
        v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v36, 1u);
    }
  }
  return 1;
}
// A745F0: using guessed type __int64 Color__m_kDxBlueColor;
// A745F8: using guessed type __int64 qword_A745F8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0070D780) --------------------------------------------------------
void __thiscall GambleWin::OnShowWin(GambleWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GambleWin::ChangeCoin(this);
  PgWin::OnShowWin(v1);
}

//----- (0070D790) --------------------------------------------------------
bool __thiscall GambleMiniWin::Create(GambleMiniWin *this, PgFrameWork *pkFrameWork)
{
  GambleMiniWin *v2; // edi@1
  NiTexturePalette *v3; // esi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // esi@11
  PgWinBut *v9; // esi@11
  char *v10; // eax@11
  NiNode *v11; // esi@12
  int iLeft; // [sp+14h] [bp-18h]@11
  int iTop; // [sp+18h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v15; // [sp+28h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v15 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GB_MoneyInfoMin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v2->baseclass_0.m_pkFrameWork = pkFrameWork;
    v8 = PgSprData::Create(&v5->baseclass_0, "MinimumNor", &iLeft, &iTop, 0);
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "MinimumClick");
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "MinimumOver");
    v9 = PgWinBut::CreateWin(0, 0, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v9->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v10 = TextData2::Get(0xD7F9364Eu);
    PgWin::SetToolTipWinText(&v9->baseclass_0.baseclass_0, v10);
    PgWin::InitPosRightTop(
      &v2->baseclass_0.baseclass_0.baseclass_0,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.98000002,
      0.30000001);
    v15 = -1;
    if ( spNode.m_pObject )
    {
      v11 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v11 )
          v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      }
    }
    result = 1;
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\GB_MoneyInfoMin.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v15 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0070D940) --------------------------------------------------------
bool __thiscall GambleHouseCardWin::Create(GambleHouseCardWin *this, PgFrameWork *pkFrameWork)
{
  GambleHouseCardWin *v2; // esi@1
  NiSourceTexture *v3; // edi@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // ebx@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  D3DXCOLOR v13; // ST18_16@18
  char *v14; // eax@18
  PgWinText *v15; // edi@18
  NiRefObjectVtbl *v16; // ebx@18
  PgFont *v17; // eax@18
  D3DXCOLOR v18; // ST18_16@18
  char *v19; // eax@18
  PgWinText *v20; // eax@18
  D3DXCOLOR v21; // ST18_16@18
  char *v22; // eax@18
  PgWinText *v23; // eax@18
  D3DXCOLOR v24; // ST18_16@18
  char *v25; // eax@18
  PgWinText *v26; // eax@18
  D3DXCOLOR v27; // ST18_16@18
  char *v28; // eax@18
  PgWinText *v29; // eax@18
  D3DXCOLOR v30; // ST10_16@18
  PgWinText *v31; // eax@18
  D3DXCOLOR v32; // ST10_16@18
  PgWinText *v33; // eax@18
  NiNode *v34; // esi@19
  const char *v35; // [sp+1Ch] [bp-4Ch]@16
  int *v36; // [sp+20h] [bp-48h]@16
  int *v37; // [sp+24h] [bp-44h]@16
  NiSourceTexture *v38; // [sp+28h] [bp-40h]@16
  UIUtil ui; // [sp+3Ch] [bp-2Ch]@18
  int uiLeft; // [sp+50h] [bp-18h]@11
  int uiTop; // [sp+54h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+58h] [bp-10h]@1
  int v43; // [sp+64h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v43 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v43 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\GB_MoneyCard.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "GambleHouseCardWin", 0) )
  {
    v4 = spNode.m_pObject;
    v43 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v38 = v10;
    v37 = &uiTop;
    v36 = &uiLeft;
    v35 = "Theme";
  }
  else
  {
    v38 = 0;
    v37 = &uiTop;
    v36 = &uiLeft;
    v35 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v35, v36, v37, v38);
  PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v43) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v12 = UIUtil::CreateSpr(&ui, "Panel01", 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  UIUtil::CreateBtn(&ui, 0, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v14 = TextData2::Get(0xD1F84B38u);
  v15 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v14, COERCE_D3DXCOLOR(v13.r), 5u);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v16 = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v17 = Font::Get(MAIN_MENU);
  v16[113].__vecDelDtor((NiRefObject *)v15, (unsigned int)v17);
  *(_QWORD *)&v18.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v18.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v19 = TextData2::Get(0x3544492Bu);
  v20 = UIUtil::CreateTextNoSpr(&ui, "Text01", v19, COERCE_D3DXCOLOR(v18.r), 5u);
  v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v20,
    0);
  *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v22 = TextData2::Get(0xC2BD3C17u);
  v23 = UIUtil::CreateTextNoSpr(&ui, "Text02", v22, COERCE_D3DXCOLOR(v21.r), 5u);
  v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v23,
    0);
  *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v25 = TextData2::Get(0x96A2F6DFu);
  v26 = UIUtil::CreateTextNoSpr(&ui, "TextCoin01", v25, COERCE_D3DXCOLOR(v24.r), 5u);
  v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v26,
    0);
  *(_QWORD *)&v27.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v27.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v28 = TextData2::Get(0x96A2F6DFu);
  v29 = UIUtil::CreateTextNoSpr(&ui, "TextCoin02", v28, COERCE_D3DXCOLOR(v27.r), 5u);
  v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v29,
    0);
  *(_QWORD *)&v30.r = Color::m_kDxBlueColor;
  *(_QWORD *)&v30.b = qword_A745F8;
  v31 = UIUtil::CreateText(&ui, "Text03", "000,000,000", 0, COERCE_D3DXCOLOR(v30.r), 5u, 0, 0);
  v2->m_pkMyCoinText = v31;
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  *(_QWORD *)&v32.r = Color::m_kDxBlueColor;
  *(_QWORD *)&v32.b = qword_A745F8;
  v33 = UIUtil::CreateText(&ui, "Text04", "000,000,000", 0, COERCE_D3DXCOLOR(v32.r), 5u, 0, 0);
  v2->m_pkAbleCoinText = v33;
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  ((void (__thiscall *)(GambleHouseCardWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  LOBYTE(v43) = 0;
  UIUtil::_UIUtil(&ui);
  v43 = -1;
  if ( spNode.m_pObject )
  {
    v34 = spNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v34 )
        v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v34, 1u);
    }
  }
  return 1;
}
// A745F0: using guessed type __int64 Color__m_kDxBlueColor;
// A745F8: using guessed type __int64 qword_A745F8;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0070DDF0) --------------------------------------------------------
void __thiscall GambleHouseCardWin::OnShowWin(GambleHouseCardWin *this)
{
  PgWin *v1; // esi@1

  v1 = (PgWin *)this;
  GambleHouseCardWin::ChangeCoin(this);
  PgWin::OnShowWin(v1);
}

//----- (0070DE00) --------------------------------------------------------
bool __thiscall CoinEditWin::Create(CoinEditWin *this, int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick)
{
  CoinEditWin *v12; // esi@1
  PgFont *v13; // eax@1
  PgFont *v14; // edi@1
  PgFont *v15; // ebx@1
  bool result; // al@9
  unsigned int v17; // edi@11
  PgEditWin *v18; // eax@14
  PgFont *v19; // eax@14
  bool v20; // zf@14
  PgWinEditText **v21; // edi@14
  NiD3DDefaultShader *v22; // eax@15
  PgWinEditText *v23; // eax@16
  NiScreenElementsData *v24; // edi@20
  void *v25; // eax@20
  int v26; // ebx@20
  int v27; // eax@21
  NiScreenElements *v28; // edi@22
  void *v29; // eax@29
  int v30; // eax@30
  float v31; // ecx@32
  NiAVObject *v32; // ecx@32
  void *v33; // eax@32
  void *v34; // edi@32
  void *v35; // eax@33
  NiAVObject *v36; // ecx@35
  NiScreenElements *v37; // eax@35
  float v38; // ecx@35
  float v39; // edx@35
  PgFont *v40; // eax@35
  PgWinText *v41; // eax@35
  HINSTANCE__ *v42; // [sp-4h] [bp-80h]@12
  HWND__ *v43; // [sp+0h] [bp-7Ch]@12
  unsigned int v44; // [sp+4h] [bp-78h]@12
  unsigned int v45; // [sp+8h] [bp-74h]@12
  int v46; // [sp+Ch] [bp-70h]@12
  bool v47; // [sp+10h] [bp-6Ch]@12
  tagRECT *v48; // [sp+14h] [bp-68h]@12
  HFONT__ *v49; // [sp+18h] [bp-64h]@12
  unsigned int v50; // [sp+1Ch] [bp-60h]@1
  tagSIZE kSize; // [sp+2Ch] [bp-50h]@20
  float v52; // [sp+34h] [bp-48h]@32
  float v53; // [sp+38h] [bp-44h]@32
  float v54; // [sp+3Ch] [bp-40h]@32
  int v55; // [sp+40h] [bp-3Ch]@1
  unsigned int uiStyle; // [sp+44h] [bp-38h]@1
  int iLimitLength; // [sp+48h] [bp-34h]@1
  unsigned int v58; // [sp+4Ch] [bp-30h]@1
  PgWin *v59; // [sp+50h] [bp-2Ch]@1
  unsigned int v60; // [sp+54h] [bp-28h]@1
  unsigned int v61; // [sp+58h] [bp-24h]@1
  tagRECT kRect; // [sp+5Ch] [bp-20h]@11
  unsigned int v63; // [sp+6Ch] [bp-10h]@1
  int v64; // [sp+78h] [bp-4h]@20
  int v65; // [sp+7Ch] [bp+0h]@1

  v63 = (unsigned int)&v65 ^ __security_cookie;
  v50 = (unsigned int)&v65 ^ __security_cookie;
  v61 = uiWidth;
  uiStyle = eType;
  v12 = this;
  LOBYTE(v55) = bClearTextOnEnd;
  v60 = uiHeight;
  v59 = pkParent;
  iLimitLength = uiLimitTextLen;
  v58 = uiStopFlag;
  v13 = Font::Get(eFontType);
  v14 = v12->baseclass_0.m_spFont.m_pObject;
  v15 = v13;
  if ( v14 != v13 )
  {
    if ( v14 && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.m_uiRefCount) && v14 )
      v14->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    v12->baseclass_0.m_spFont.m_pObject = v15;
    if ( v15 )
      InterlockedIncrement((volatile LONG *)&v15->baseclass_0.baseclass_0.m_uiRefCount);
  }
  if ( v12->baseclass_0.m_spFont.m_pObject
    && PgWin::Create(&v12->baseclass_0.baseclass_0, iXPos, iYPos, v61, v60, v59, 0, 0) )
  {
    kRect.top = iYPos;
    v17 = uiStyle;
    kRect.left = iXPos;
    kRect.right = iXPos + v61;
    kRect.bottom = iYPos + v60;
    if ( uiStyle == 1342181380 )
    {
      v49 = v12->baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont;
      v48 = &kRect;
      v47 = v55;
      v46 = iLimitLength;
      v45 = v58;
      v44 = uiStyle;
      v43 = g_hMainWnd;
      v42 = g_hMainInstance;
    }
    else
    {
      v49 = 0;
      v48 = 0;
      v47 = v55;
      v46 = iLimitLength;
      v45 = v58;
      v44 = uiStyle;
      v43 = g_hMainWnd;
      v42 = g_hMainInstance;
    }
    v18 = PgEditWin::CreateWin(v42, v43, v44, v45, v46, v47, v48, v49);
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v12->baseclass_0.m_spEditWin,
      (NiD3DDefaultShader *)v18);
    v19 = v12->baseclass_0.m_spFont.m_pObject;
    v12->baseclass_0.m_eType = uiStyle;
    v20 = v17 == 1342177312;
    v21 = (PgWinEditText **)&v12->baseclass_0.m_spTextWin;
    if ( v20 )
    {
      v22 = (NiD3DDefaultShader *)PgWinPasswdText::CreateWin(0, 0, v61, v60, v19, &v12->baseclass_0.baseclass_0, 0, 0);
      NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v12->baseclass_0.m_spTextWin, v22);
    }
    else
    {
      v23 = PgWinEditText::CreateWin(0, 0, v61, v60, v19, &v12->baseclass_0.baseclass_0, 0, 0);
      NiPointer<PopupMenuWin>::operator_(
        (NiPointer<NiD3DDefaultShader> *)&v12->baseclass_0.m_spTextWin,
        (NiD3DDefaultShader *)v23);
      if ( uiStyle == 1342181380 )
      {
        (*v21)->baseclass_0.m_spTextGeom.m_pObject->baseclass_0.m_bAutoWordWrap = 1;
        PgWinEditText::SetAutoAlign(*v21, 0);
      }
    }
    ((void (__stdcall *)(PgWinEditText *, unsigned int))v12->baseclass_0.m_spEditWin.m_pObject->baseclass_0.vfptr[22].__vecDelDtor)(
      *v21,
      v50);
    v12->baseclass_0.m_bForceFocusWhenClick = bForceFocusWhenClick;
    if ( bForceFocusWhenClick )
      PgWinBut::CreateWin(0, 0, v61, v60, &v12->baseclass_0.baseclass_0, 0, 0, 0);
    SelectObject(
      v12->baseclass_0.m_spFont.m_pObject->baseclass_0.m_kFontRenderStuff.hDC,
      v12->baseclass_0.m_spFont.m_pObject->baseclass_0.m_hFont);
    PgFont::GetTextSize(v12->baseclass_0.m_spFont.m_pObject, "|", 1, &kSize);
    v24 = PgUtil::CreateScreenGeometryData(2u, kSize.cy + 2);
    v25 = operator new(0xC4u);
    v59 = (PgWin *)v25;
    v26 = 0;
    v64 = 0;
    if ( v25 )
    {
      NiScreenElements::NiScreenElements((NiScreenElements *)v25, v24);
      v26 = v27;
    }
    v28 = v12->baseclass_0.m_spCaret.m_pObject;
    v64 = -1;
    if ( v28 != (NiScreenElements *)v26 )
    {
      if ( v28
        && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v28 )
        v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v28,
          1u);
      v12->baseclass_0.m_spCaret.m_pObject = (NiScreenElements *)v26;
      if ( v26 )
        InterlockedIncrement((volatile LONG *)(v26 + 4));
    }
    v29 = operator new(0x60u);
    v59 = (PgWin *)v29;
    v64 = 1;
    if ( v29 )
      NiMaterialProperty::NiMaterialProperty((NiMaterialProperty *)v29);
    else
      v30 = 0;
    ++*(_DWORD *)(v30 + 88);
    v52 = 1.0;
    v53 = 1.0;
    v54 = 1.0;
    *(float *)(v30 + 68) = 1.0;
    v31 = v54;
    *(float *)(v30 + 72) = 1.0;
    *(_DWORD *)(v30 + 76) = LODWORD(v31);
    v32 = (NiAVObject *)v12->baseclass_0.m_spCaret.m_pObject;
    v64 = -1;
    NiAVObject::AttachProperty(v32, (NiProperty *)v30);
    v33 = operator new(0x28u);
    v34 = v33;
    v59 = (PgWin *)v33;
    v64 = 2;
    if ( v33 )
    {
      NiObjectNET::NiObjectNET((NiObjectNET *)v33);
      *(_DWORD *)v34 = &NiVertexColorProperty::_vftable_;
      *((_WORD *)v34 + 14) = 0;
      *((_DWORD *)v34 + 8) = 0;
      *((_DWORD *)v34 + 9) = 1;
      v35 = v34;
    }
    else
    {
      v35 = 0;
    }
    *((_DWORD *)v35 + 8) = 0;
    *((_DWORD *)v35 + 9) = 0;
    v36 = (NiAVObject *)v12->baseclass_0.m_spCaret.m_pObject;
    v64 = -1;
    NiAVObject::AttachProperty(v36, (NiProperty *)v35);
    v37 = v12->baseclass_0.m_spCaret.m_pObject;
    v38 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v53 = -2.0;
    v39 = v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v38;
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v53;
    v37->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = v39;
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor(
      (NiRefObject *)v12,
      (unsigned int)v12->baseclass_0.m_spCaret.m_pObject);
    NiAVObject::UpdateProperties(&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0);
    NiAVObject::Update(&v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
    v40 = Font::Get(MAIN_MENU);
    v41 = PgWinText::CreateWin(-2, -3, v61, v60, v40, &v12->baseclass_0.baseclass_0, 0, 0);
    v12->m_pkMoneyText = v41;
    v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
      (NiRefObject *)v41,
      5u);
    ((void (__stdcall *)(_UNKNOWN *))v12->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D31CF);
    ((void (__stdcall *)(_DWORD))v12->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
    ((void (__stdcall *)(_DWORD))v12->m_pkMoneyText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 97943C: using guessed type int (__thiscall *NiVertexColorProperty___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0070E240) --------------------------------------------------------
void __thiscall CoinExchangeWin::OnCommand(CoinExchangeWin *this, unsigned int wParam, int lParam)
{
  switch ( wParam )
  {
    case 0u:
      CoinExchangeWin::OnTAB2(this);
      break;
    case 1u:
      CoinExchangeWin::OnTAB1(this);
      break;
    case 2u:
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
      break;
    case 4u:
      CoinExchangeWin::OnExchange(this);
      break;
    default:
      return;
  }
}

//----- (0070E2A0) --------------------------------------------------------
CoinEditWin *__cdecl CoinEditWin::CreateWin(int iXPos, int iYPos, unsigned int uiWidth, unsigned int uiHeight, PgWin *pkParent, EditWin::Type eType, unsigned int uiLimitTextLen, unsigned int uiStopFlag, bool bClearTextOnEnd, Font::Type eFontType, bool bForceFocusWhenClick)
{
  void *v11; // eax@1
  void *v12; // esi@1
  PgWin *v13; // edi@8
  CoinEditWin *v14; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v16; // [sp+10h] [bp-4h]@1

  v11 = operator new(0x158u);
  v12 = v11;
  result.m_pObject = (PgWin *)v11;
  v16 = 0;
  if ( v11 )
  {
    EditWin::EditWin((EditWin *)v11);
    *(_DWORD *)v12 = &CoinEditWin::_vftable_;
    *((_DWORD *)v12 + 58) = &CoinEditWin::_vftable_;
    *((_DWORD *)v12 + 82) = 0;
    *((_DWORD *)v12 + 83) = 0;
    *((_DWORD *)v12 + 84) = 0;
  }
  else
  {
    v12 = 0;
  }
  if ( v12 )
    InterlockedIncrement((volatile LONG *)v12 + 1);
  v16 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v12);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, unsigned int, unsigned int, PgWin *, EditWin::Type, unsigned int, unsigned int, _DWORD, Font::Type, _DWORD))(*(_DWORD *)v12 + 492))(
                          v12,
                          iXPos,
                          iYPos,
                          uiWidth,
                          uiHeight,
                          pkParent,
                          eType,
                          uiLimitTextLen,
                          uiStopFlag,
                          bClearTextOnEnd,
                          eFontType,
                          bForceFocusWhenClick) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v12 + 356))(v12);
    v16 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v12 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v12)(v12, 1);
    v14 = (CoinEditWin *)v12;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v12);
    if ( result.m_pObject )
    {
      v13 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v13 )
          v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
      }
    }
    v16 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v12 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v12)(v12, 1);
    v14 = 0;
  }
  return v14;
}
// 9D363C: using guessed type int (__stdcall *CoinEditWin___vftable_)(int uiFlags);
// 9D365C: using guessed type int (__thiscall *CoinEditWin___vftable_)(void *p, char);

//----- (0070E420) --------------------------------------------------------
CoinExchangeWin *__cdecl CoinExchangeWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  CoinExchangeWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x1A8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    CoinExchangeWin::CoinExchangeWin((CoinExchangeWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (CoinExchangeWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0070E550) --------------------------------------------------------
bool __thiscall CoinExchangeWin::Create(CoinExchangeWin *this, PgFrameWork *pkFrameWork)
{
  CoinExchangeWin *v2; // esi@1
  NiSourceTexture *v3; // ebx@1
  NiNode *v4; // esi@2
  bool v5; // zf@4
  NiTexturePalette *v7; // edi@8
  char *v8; // eax@10
  PgSprData *v9; // eax@11
  NiSourceTexture *v10; // eax@15
  PgSprData *v11; // eax@18
  PgWinSpr *v12; // eax@18
  D3DXCOLOR v13; // ST48_16@18
  char *v14; // eax@18
  PgWinText *v15; // edi@18
  PgFont *v16; // eax@18
  PgSprData *v17; // edi@18
  NiPointer<PgSprData::PgHitTester> *v18; // ecx@18
  unsigned int v19; // edi@18
  PgFont *v20; // eax@18
  PgWinText *v21; // eax@18
  NiRefObjectVtbl *v22; // edi@18
  char *v23; // eax@18
  PgSprData *v24; // edi@18
  PgSprData::PgHitTester *v25; // eax@18
  unsigned int v26; // edi@18
  PgFont *v27; // eax@18
  PgWinText *v28; // eax@18
  NiRefObjectVtbl *v29; // edi@18
  char *v30; // eax@18
  D3DXCOLOR v31; // ST48_16@18
  char *v32; // eax@18
  PgWinText *v33; // eax@18
  D3DXCOLOR v34; // ST48_16@18
  char *v35; // eax@18
  PgWinText *v36; // eax@18
  D3DXCOLOR v37; // ST48_16@18
  char *v38; // eax@18
  PgWinText *v39; // eax@18
  D3DXCOLOR v40; // ST48_16@18
  PgWinText *v41; // eax@18
  D3DXCOLOR v42; // ST48_16@18
  PgWinText *v43; // eax@18
  D3DXCOLOR v44; // ST40_16@18
  PgWinText *v45; // eax@18
  NiRefObjectVtbl *v46; // edi@18
  PgFont *v47; // eax@18
  D3DXCOLOR v48; // ST48_16@18
  char *v49; // eax@18
  PgWinText *v50; // eax@18
  NiRefObjectVtbl *v51; // edi@18
  PgFont *v52; // eax@18
  PgWinBut *v53; // eax@18
  D3DXCOLOR v54; // ST48_16@18
  char *v55; // eax@18
  PgWinText *v56; // eax@18
  D3DXCOLOR v57; // ST40_16@18
  D3DXCOLOR v58; // ST40_16@18
  D3DXCOLOR v59; // ST40_16@18
  D3DXCOLOR v60; // ST40_16@18
  PgSprData *v61; // eax@18
  NiNode *v62; // esi@20
  const char *v63; // [sp+4Ch] [bp-54h]@16
  int *v64; // [sp+50h] [bp-50h]@16
  int *v65; // [sp+54h] [bp-4Ch]@16
  NiSourceTexture *v66; // [sp+58h] [bp-48h]@16
  UIUtil ui; // [sp+6Ch] [bp-34h]@18
  unsigned int uiWidth; // [sp+80h] [bp-20h]@18
  unsigned int uiHeight; // [sp+84h] [bp-1Ch]@18
  int uiLeft; // [sp+88h] [bp-18h]@11
  int uiTop; // [sp+8Ch] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+90h] [bp-10h]@1
  int v73; // [sp+9Ch] [bp-4h]@1
  NiRefObjectVtbl *bResult; // [sp+A8h] [bp+8h]@18
  unsigned int bResulta; // [sp+A8h] [bp+8h]@18
  unsigned int bResultb; // [sp+A8h] [bp+8h]@18

  v2 = this;
  spNode.m_pObject = 0;
  v73 = 0;
  v3 = MenuTexMgr::GetTexture(4u);
  if ( !v3 )
  {
    v4 = spNode.m_pObject;
    v73 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = spNode.m_pObject == 0;
LABEL_5:
    if ( !v5 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    return 0;
  }
  v7 = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v8 = Folder::Merge(&Folder::m_acMenu, "Game\\GB_ChangeCoin.nif");
  PgUtil::LoadNodeNifFile(v8, &spNode, v7);
  if ( !spNode.m_pObject )
    return 0;
  v9 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v3);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v9, 0, pkFrameWork, "CoinExchangeWin", 0) )
  {
    v4 = spNode.m_pObject;
    v73 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v5 = v4 == 0;
    goto LABEL_5;
  }
  v10 = MenuTexMgr::GetTexture(0x13u);
  if ( v10 )
  {
    v66 = v10;
    v65 = &uiTop;
    v64 = &uiLeft;
    v63 = "Theme";
  }
  else
  {
    v66 = 0;
    v65 = &uiTop;
    v64 = &uiLeft;
    v63 = "Theme";
  }
  v11 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v63, v64, v65, v66);
  PgWinSpr::CreateWin(uiLeft, uiTop, v11, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v73) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v12 = UIUtil::CreateSpr(&ui, "Panel01", 0);
  v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v12,
    0);
  *(_QWORD *)&v13.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v13.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v14 = TextData2::Get(0x2C497E6Eu);
  v15 = UIUtil::CreateTextNoSpr(&ui, "WinTitle", v14, COERCE_D3DXCOLOR(v13.r), 5u);
  bResult = v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v16 = Font::Get(MAIN_MENU);
  bResult[113].__vecDelDtor((NiRefObject *)v15, (unsigned int)v16);
  v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v15,
    0);
  v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CoinChangeOff", &uiLeft, &uiTop, v3);
  PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "CoinChangeOn");
  v2->m_pkTab01 = ColumnBut::CreateWin(uiLeft, uiTop, v17, &v2->baseclass_0.baseclass_0.baseclass_0, 1u, 0);
  v18 = v17->m_akHitTester.m_pBase;
  v19 = v18->m_pObject->m_uiHeight;
  bResulta = v18->m_pObject->m_uiWidth;
  v20 = Font::Get(MAIN_MENU);
  v21 = PgWinText::CreateWin(uiLeft, uiTop, bResulta, v19, v20, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTabText1 = v21;
  v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v21,
    5u);
  v22 = v2->m_pkTabText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = TextData2::Get(0x1D383984u);
  v22[118].__vecDelDtor((NiRefObject *)v2->m_pkTabText1, (unsigned int)v23);
  ((void (__stdcall *)(_DWORD))v2->m_pkTabText1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MoneyChangeOff", &uiLeft, &uiTop, v3);
  PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "MoneyChangeOn");
  v2->m_pkTab02 = ColumnBut::CreateWin(uiLeft, uiTop, v24, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v25 = v24->m_akHitTester.m_pBase->m_pObject;
  v26 = v25->m_uiHeight;
  bResultb = v25->m_uiWidth;
  v27 = Font::Get(MAIN_MENU);
  v28 = PgWinText::CreateWin(uiLeft, uiTop, bResultb, v26, v27, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v2->m_pkTabText2 = v28;
  v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
    (NiRefObject *)v28,
    5u);
  v29 = v2->m_pkTabText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v30 = TextData2::Get(0x70D0E1C9u);
  v29[118].__vecDelDtor((NiRefObject *)v2->m_pkTabText2, (unsigned int)v30);
  ((void (__stdcall *)(_DWORD))v2->m_pkTabText2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  *(_QWORD *)&v31.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v31.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v32 = TextData2::Get(0xC2BD3C17u);
  v33 = UIUtil::CreateTextNoSpr(&ui, "Text01", v32, COERCE_D3DXCOLOR(v31.r), 5u);
  v2->m_pkText01 = v33;
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  *(_QWORD *)&v34.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v34.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v35 = TextData2::Get(0x204F376Cu);
  v36 = UIUtil::CreateTextNoSpr(&ui, "Text02", v35, COERCE_D3DXCOLOR(v34.r), 5u);
  v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v36,
    0);
  *(_QWORD *)&v37.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v37.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v38 = TextData2::Get(0x40603B82u);
  v39 = UIUtil::CreateTextNoSpr(&ui, "Text03", v38, COERCE_D3DXCOLOR(v37.r), 5u);
  v2->m_pkText02 = v39;
  v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v39,
    0);
  *(_QWORD *)&v40.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v40.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v41 = UIUtil::CreateTextNoSpr(&ui, "TextCoin01", "Coin", COERCE_D3DXCOLOR(v40.r), 5u);
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v41,
    0);
  *(_QWORD *)&v42.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v42.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v43 = UIUtil::CreateTextNoSpr(&ui, "TextCoin02", "Coin", COERCE_D3DXCOLOR(v42.r), 5u);
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v43,
    0);
  *(_QWORD *)&v44.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v44.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v45 = UIUtil::CreateText(&ui, "Text04", "000,000,000,000", 0, COERCE_D3DXCOLOR(v44.r), 5u, 0, 0);
  v2->m_pkExchangeableCoinText = v45;
  v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v45,
    0);
  v46 = v2->m_pkExchangeableCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v47 = Font::Get(MAIN_MENU);
  v46[113].__vecDelDtor((NiRefObject *)v2->m_pkExchangeableCoinText, (unsigned int)v47);
  ((void (__stdcall *)(signed int))v2->m_pkExchangeableCoinText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  *(_QWORD *)&v48.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v48.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v49 = TextData2::Get(0xCB54363Bu);
  v50 = UIUtil::CreateTextNoSpr(&ui, "Text06", v49, COERCE_D3DXCOLOR(v48.r), 5u);
  v2->m_pkBottomText = v50;
  v51 = v50->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v52 = Font::Get(MAIN_MENU);
  v51[113].__vecDelDtor((NiRefObject *)v2->m_pkBottomText, (unsigned int)v52);
  ((void (__stdcall *)(_DWORD))v2->m_pkBottomText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v53 = UIUtil::CreateBtn(&ui, 4u, "ChangeBtnNor", "ChangeBtnClick", "ChangeBtnOver", "ChangeBtnOff", 0);
  v2->m_pkExchangeBut = v53;
  v53->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v53,
    0);
  *(_QWORD *)&v54.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v54.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v55 = TextData::Get(0xA7F8ECE9u);
  v56 = UIUtil::CreateAttachedText(&ui, &v2->m_pkExchangeBut->baseclass_0.baseclass_0, v55, COERCE_D3DXCOLOR(v54.r), 5u);
  v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v56,
    0);
  UIUtil::CreateBtn(&ui, 2u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  *(_QWORD *)&v57.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v57.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkCopperText = UIUtil::CreateText(&ui, "CopperInput", "0", 0, COERCE_D3DXCOLOR(v57.r), 5u, 0, 0);
  *(_QWORD *)&v58.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v58.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkSilverText = UIUtil::CreateText(&ui, "SilverInput", "0", 0, COERCE_D3DXCOLOR(v58.r), 5u, 0, 0);
  *(_QWORD *)&v59.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v59.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkGoldText = UIUtil::CreateText(&ui, "GoldInput", "0", 0, COERCE_D3DXCOLOR(v59.r), 5u, 0, 0);
  *(_QWORD *)&v60.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v60.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v2->m_pkGemText = UIUtil::CreateText(&ui, "GemInput", "0", 0, COERCE_D3DXCOLOR(v60.r), 5u, 0, 0);
  BYTE3(bResultb) = PgUtil::GetTriShapeRect(
                      &spNode.m_pObject->baseclass_0,
                      "Text05",
                      &uiLeft,
                      &uiTop,
                      &uiWidth,
                      &uiHeight);
  v61 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text05", &uiLeft, &uiTop, v3);
  PgWinSpr::CreateWin(uiLeft, uiTop, v61, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( BYTE3(bResultb) )
    v2->m_pkCoinEdit = CoinEditWin::CreateWin(
                         uiLeft + 2,
                         uiTop + 4,
                         uiWidth,
                         uiHeight,
                         &v2->baseclass_0.baseclass_0.baseclass_0,
                         NUMBER,
                         0xCu,
                         3u,
                         0,
                         0,
                         1);
  ((void (__thiscall *)(CoinExchangeWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5,
    0.5);
  CoinExchangeWin::OnTAB1(v2);
  LOBYTE(v73) = 0;
  UIUtil::_UIUtil(&ui);
  v62 = spNode.m_pObject;
  v73 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v62 )
    v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v62, 1u);
  return 1;
}
// A9541C: using guessed type char Folder__m_bInit;

//----- (0070EE60) --------------------------------------------------------
GambleWin *__cdecl GambleWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GambleWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GambleWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GambleWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GambleWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D3A90: using guessed type int (__stdcall *GambleWin___vftable_)(int uiFlags);
// 9D3AAC: using guessed type int (__thiscall *GambleWin___vftable_)(void *p, char);

//----- (0070EFA0) --------------------------------------------------------
GambleMiniWin *__cdecl GambleMiniWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GambleMiniWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GambleMiniWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GambleMiniWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GambleMiniWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D3CD0: using guessed type int (__stdcall *GambleMiniWin___vftable_)(int uiFlags);
// 9D3CEC: using guessed type int (__thiscall *GambleMiniWin___vftable_)(void *p, char);

//----- (0070F0E0) --------------------------------------------------------
GambleHouseCardWin *__cdecl GambleHouseCardWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GambleHouseCardWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GambleHouseCardWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GambleHouseCardWin::_vftable_;
    *((_DWORD *)v2 + 86) = 0;
    *((_DWORD *)v2 + 87) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GambleHouseCardWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D3F10: using guessed type int (__stdcall *GambleHouseCardWin___vftable_)(int uiFlags);
// 9D3F2C: using guessed type int (__thiscall *GambleHouseCardWin___vftable_)(void *p, char);

//----- (0070F230) --------------------------------------------------------
void *__thiscall CoinEditWin::_scalar_deleting_destructor_(CoinEditWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CoinEditWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CoinEditWin::_vftable_;
  EditWin::_EditWin(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D363C: using guessed type int (__stdcall *CoinEditWin___vftable_)(int uiFlags);
// 9D365C: using guessed type int (__thiscall *CoinEditWin___vftable_)(void *p, char);

//----- (0070F270) --------------------------------------------------------
void *__thiscall CoinExchangeWin::_vector_deleting_destructor_(CoinExchangeWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&CoinExchangeWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&CoinExchangeWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D3850: using guessed type int (__stdcall *CoinExchangeWin___vftable_)(int uiFlags);
// 9D386C: using guessed type int (__thiscall *CoinExchangeWin___vftable_)(void *p, char);

//----- (0070F2B0) --------------------------------------------------------
void *__thiscall GambleWin::_scalar_deleting_destructor_(GambleWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D3A90: using guessed type int (__stdcall *GambleWin___vftable_)(int uiFlags);
// 9D3AAC: using guessed type int (__thiscall *GambleWin___vftable_)(void *p, char);

//----- (0070F2F0) --------------------------------------------------------
void *__thiscall GambleMiniWin::_scalar_deleting_destructor_(GambleMiniWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleMiniWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleMiniWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D3CD0: using guessed type int (__stdcall *GambleMiniWin___vftable_)(int uiFlags);
// 9D3CEC: using guessed type int (__thiscall *GambleMiniWin___vftable_)(void *p, char);

//----- (0070F330) --------------------------------------------------------
void *__thiscall GambleHouseCardWin::_vector_deleting_destructor_(GambleHouseCardWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleHouseCardWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleHouseCardWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D3F10: using guessed type int (__stdcall *GambleHouseCardWin___vftable_)(int uiFlags);
// 9D3F2C: using guessed type int (__thiscall *GambleHouseCardWin___vftable_)(void *p, char);

//----- (0070F370) --------------------------------------------------------
unsigned int __cdecl ITableBase<GBHouse_GBHouseTab>::GetTotal()
{
  int v0; // eax@1
  unsigned int result; // eax@2

  v0 = *(_DWORD *)(ITableBase<GBHouse_GBHouseTab>::ms_pkTable + 56);
  if ( v0 )
    result = *(_DWORD *)(v0 + 40);
  else
    result = 0;
  return result;
}
// A97E88: using guessed type int ITableBase_GBHouse_GBHouseTab___ms_pkTable;

//----- (0070F390) --------------------------------------------------------
GBHouse *__cdecl GBHouseTab::GetByIndex(unsigned int uiIndex)
{
  unsigned int v1; // esi@1
  GBHouse *result; // eax@4

  v1 = uiIndex;
  if ( uiIndex >= ITableBase<GBHouse_GBHouseTab>::GetTotal() )
  {
LABEL_4:
    result = 0;
  }
  else
  {
    while ( !CDataReader::GetRecord((CDataReader *)(ITableBase<GBHouse_GBHouseTab>::ms_pkTable + 4), v1) )
    {
      ++v1;
      if ( v1 >= ITableBase<GBHouse_GBHouseTab>::GetTotal() )
        goto LABEL_4;
    }
    result = (GBHouse *)CDataReader::GetRecord((CDataReader *)(ITableBase<GBHouse_GBHouseTab>::ms_pkTable + 4), v1);
  }
  return result;
}
// A97E88: using guessed type int ITableBase_GBHouse_GBHouseTab___ms_pkTable;

//----- (0070F3E0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_EXCHANGEMACHINE_UI_OPEN_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_EXCHANGEMACHINE_UI_OPEN_CMD *pkProto)
{
  int result; // eax@2

  if ( pkProto )
  {
    result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( !result )
      return result;
    GameFrameWork::OnOpenExchangeCoinWin((GameFrameWork *)result);
  }
  return 1;
}

//----- (0070F420) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_VIPCARD_UI_OPEN_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_VIPCARD_UI_OPEN_ACK *pkProto)
{
  PgFrameWork *v2; // eax@2

  if ( pkProto )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( 10264 == pkProto->nError )
    {
      if ( v2 )
        GameFrameWork::OnOpenVipCardWin((GameFrameWork *)v2);
    }
  }
  return 1;
}

//----- (0070F460) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleGambleHouseExitReq(MHDiceGameTask *this)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 2u, 0, 0);
}

//----- (0070F480) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleCoinVipcardUIopenReq(MHDiceGameTask *this, char uSlotNum)
{
  *(&uSlotNum + 3) = uSlotNum;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xDu, &uSlotNum + 3, 1);
}

//----- (0070F4B0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleCoinBuyReq(MHDiceGameTask *this, unsigned __int64 Coin)
{
  PROTO_NC_GAMBLE_COIN_BUY_REQ kProto; // [sp+0h] [bp-8h]@1

  kProto.nCoin = Coin;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xFu, &kProto, 8);
}

//----- (0070F4E0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleCoinSellReq(MHDiceGameTask *this, unsigned __int64 Coin)
{
  PROTO_NC_GAMBLE_COIN_SELL_REQ kProto; // [sp+0h] [bp-8h]@1

  kProto.nCoin = Coin;
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x13u, &kProto, 8);
}

//----- (0070F510) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleTypeAndWhereStandReq(MHDiceGameTask *this, unsigned __int16 nNpcHandle)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x17u, &nNpcHandle, 2);
}

//----- (0070F540) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_ACK *pkProto)
{
  if ( pkProto->nError == 9760 )
    MHDiceGameTask::ShutDownGambleHouse(this);
  return 1;
}

//----- (0070F560) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiAllRankReq(MHDiceGameTask *this)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x6Bu, 0, 0);
}

//----- (0070F580) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiCurrRankReq(MHDiceGameTask *this)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x6Fu, 0, 0);
}

//----- (0070F5A0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_CMD *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  GambleDiceGameWin *v3; // ecx@2

  v2 = this;
  if ( pkProto->nError == 9840 )
  {
    this->m_eDiceSaiGameStatus = 3;
    DiceTaiSai::ConvertDice(&this->m_DiceTaiSai, pkProto->nDiceInfo.nNumber, &this->m_nDiceVariety);
    v2->m_DiceAniCode[0] = 100 * pkProto->nDiceInfo.nNumber[0];
    v2->m_DiceAniCode[1] = 100 * pkProto->nDiceInfo.nNumber[1];
    v3 = v2->m_pkGambleDiceGameWin;
    v2->m_DiceAniCode[2] = 100 * pkProto->nDiceInfo.nNumber[2];
    GambleDiceGameWin::DiceAnimationStart(v3, v2->m_DiceAniCode);
  }
  return 1;
}

//----- (0070F620) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_ACK *pkProto)
{
  return 1;
}

//----- (0070F630) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameLargeAmountReq(MHDiceGameTask *this, unsigned int Money)
{
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x7Du, &Money, 4);
}

//----- (0070F660) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_CMD *pkProto)
{
  int result; // eax@1

  result = 1;
  if ( pkProto->nError == 9824 )
    this->m_eDiceSaiGameStatus = 2;
  return result;
}

//----- (0070F690) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_GAMBLEHOUSE_EXIT_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_GAMBLEHOUSE_EXIT_ACK *pkProto)
{
  MHDiceGameTask *v2; // ebx@1
  int result; // eax@2
  int v4; // esi@2
  PgWin *v5; // esi@4
  MHDiceGameTask::DICE_GAME_MODE v6; // eax@6

  v2 = this;
  if ( pkProto )
  {
    result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v4 = result;
    if ( !result )
      return result;
    if ( pkProto->nError == 10240 )
    {
      GameFrameWork::OnOpenGambleHouseWin((GameFrameWork *)result, 1);
      v5 = *(PgWin **)(v4 + 816);
      if ( v5 )
        PgWinMgr::CloseWin(&Pgg_kWinMgr, v5);
      v6 = v2->m_eDiceGameMode;
      if ( v6 == 2 )
      {
        MHDiceGameTask::ShutDownGambleHouse(v2);
        return 1;
      }
      if ( v6 == 4 )
        MHDiceGameTask::ShutDownSlotMachine(v2);
    }
  }
  return 1;
}

//----- (0070F720) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_CHANGE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_CHANGE_CMD *pkProto)
{
  int result; // eax@2
  int v3; // esi@2
  GambleHouseCardWin *v4; // ecx@3
  GambleWin *v5; // ecx@5

  if ( pkProto )
  {
    result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v3 = result;
    if ( !result )
      return result;
    User::SetCoin(&g_kUser, pkProto->nCoin);
    v4 = *(GambleHouseCardWin **)(v3 + 812);
    if ( v4 )
      GambleHouseCardWin::ChangeCoin(v4);
    v5 = *(GambleWin **)(v3 + 820);
    if ( v5 )
      GambleWin::ChangeCoin(v5);
  }
  return 1;
}

//----- (0070F790) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_EXCHANGECOIN_CHANGE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_EXCHANGECOIN_CHANGE_CMD *pkProto)
{
  int result; // eax@2
  int v3; // esi@2
  GambleHouseCardWin *v4; // ecx@3
  GambleWin *v5; // ecx@5
  CoinExchangeWin *v6; // esi@7
  __int64 v7; // qax@8

  if ( pkProto )
  {
    result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v3 = result;
    if ( !result )
      return result;
    User::SetExchangeableCoin(&g_kUser, pkProto->nExchangeCoin);
    v4 = *(GambleHouseCardWin **)(v3 + 812);
    if ( v4 )
      GambleHouseCardWin::ChangeCoin(v4);
    v5 = *(GambleWin **)(v3 + 820);
    if ( v5 )
      GambleWin::ChangeCoin(v5);
    v6 = *(CoinExchangeWin **)(v3 + 816);
    if ( v6 )
    {
      v7 = User::ExchangeableCoin(&g_kUser);
      CoinExchangeWin::SetExchangeableCoin(v6, v7);
    }
  }
  return 1;
}

//----- (0070F810) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameJoinReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_REQ *pkProto)
{
  MHDiceGameTask *v2; // edi@1
  Char *v3; // eax@3
  NiPoint3 *v4; // eax@4
  float v5; // ecx@4
  double v6; // st6@4
  char v7; // al@6
  NiPoint3 kDir; // [sp+Ch] [bp-54h]@6
  NiPoint3 result; // [sp+18h] [bp-48h]@4
  NiPoint3 kPos; // [sp+24h] [bp-3Ch]@4
  float v11; // [sp+30h] [bp-30h]@6
  float fAngle; // [sp+34h] [bp-2Ch]@4
  NiMatrix3 thisa; // [sp+38h] [bp-28h]@6
  unsigned int v14; // [sp+5Ch] [bp-4h]@1
  int v15; // [sp+60h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  if ( pkProto && this->m_bInitialFinished )
  {
    v3 = CharMgr::GetChar(&g_kCharMgr, this->m_nNpcHandle);
    if ( v3 )
    {
      v4 = Char::GetDirToChar(g_pkMainChar, &result, v3);
      v5 = v4->y;
      kPos.x = v4->x;
      kPos.y = v5;
      kPos.z = 0.0;
      NiPoint3::Unitize(&kPos);
      result.z = kPos.y * 0.0 - kPos.x;
      fAngle = kPos.y + kPos.x * 0.0 + 0.0 * kPos.z;
      fAngle = NiACos(fAngle) * 57.2957763671875;
      v6 = fAngle * 0.5;
      if ( result.z > 0.0 )
        v6 = 180.0 - v6;
      fAngle = v6;
      v7 = (signed int)fAngle;
      pkProto->nDirect = v7;
      v11 = (NI_PI + NI_PI) * (double)(unsigned __int8)v7 / 180.0;
      NiMatrix3::MakeZRotation(&thisa, v11);
      NiMatrix3::operator_(&thisa, &kDir, &World::ms_kNorthDir);
      ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].Affect)(&kDir);
    }
    if ( !MHDiceGameTask::IsDicegamePlaying(v2) )
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x64u, pkProto, 4);
  }
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (0070F980) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_TIMER_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_TIMER_CMD *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  GambleDiceGameWin *v3; // eax@2
  PgWinSpr *v4; // ebx@2
  PgWinSpr *v5; // edi@2
  float v6; // ST10_4@2
  int v7; // eax@2
  float v8; // ST14_4@2
  GambleDiceGameWin *v9; // eax@2
  PgWinSpr *v10; // edi@2
  PgWinSpr *v11; // ebx@2
  float v12; // ST10_4@2
  signed int v13; // eax@2
  float v14; // ST14_4@2
  GambleDiceGameWin *v15; // esi@2
  PgWinSpr *v16; // edi@2
  int (*v17)(void); // edx@2
  NiRefObjectVtbl *v18; // esi@2
  int v19; // eax@2
  int result; // eax@2

  v2 = this;
  if ( pkProto->bIsStart )
  {
    this->m_nLengthInOneGame = pkProto->nTimer / 10;
    result = 1;
  }
  else
  {
    this->m_IsClockCastPlaying = 0;
    this->m_IsClockAlramPlaying = 0;
    this->m_fTimerPosOnPregress = 0.0;
    v3 = this->m_pkGambleDiceGameWin;
    this->m_fClockAlramTime = 0.0;
    v4 = v3->m_spTimer.m_pObject;
    v5 = v3->m_spTimerFill.m_pObject;
    v6 = (double)((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v3->m_spTimerFill.m_pObject)
       - 8.0;
    v7 = ((int (__thiscall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v5)
       - 10;
    v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v6;
    v8 = (double)v7;
    v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v8;
    v4->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
    v9 = v2->m_pkGambleDiceGameWin;
    v10 = v9->m_spTimerFill.m_pObject;
    v11 = v9->m_spTimerBack.m_pObject;
    v12 = (double)((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v9->m_spTimerFill.m_pObject);
    v13 = ((int (__thiscall *)(_DWORD))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v10);
    v11->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = v12;
    v14 = (double)v13;
    v11->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v14;
    v11->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
    v15 = v2->m_pkGambleDiceGameWin;
    v16 = v15->m_spTimerBack.m_pObject;
    v17 = (int (*)(void))v15->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor;
    v18 = v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v19 = v17();
    v18[117].__vecDelDtor((NiRefObject *)v16, v19);
    ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
    result = 1;
  }
  return result;
}

//----- (0070FAD0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_CHAR_CLIENT_COININFO_CMD(MHDiceGameTask *this, PROTO_NC_CHAR_COININFO_CMD *pkProto)
{
  PgFrameWork *v2; // eax@2
  PgFrameWork *v3; // esi@2
  GambleHouseCardWin *v4; // ecx@3
  GambleWin *v5; // ecx@5
  CoinExchangeWin *v6; // esi@7
  __int64 v7; // qax@8

  if ( pkProto )
  {
    User::SetCoin(&g_kUser, pkProto->nCoin);
    User::SetExchangeableCoin(&g_kUser, pkProto->nExchangedCoin);
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v3 = v2;
    if ( v2 )
    {
      v4 = (GambleHouseCardWin *)v2[22].m_kMsgQ.m_uiHead;
      if ( v4 )
        GambleHouseCardWin::ChangeCoin(v4);
      v5 = (GambleWin *)v3[22].m_BackFrameID;
      if ( v5 )
        GambleWin::ChangeCoin(v5);
      v6 = (CoinExchangeWin *)v3[22].m_kMsgQ.m_uiTail;
      if ( v6 )
      {
        v7 = User::ExchangeableCoin(&g_kUser);
        CoinExchangeWin::SetExchangeableCoin(v6, v7);
      }
    }
  }
  return 1;
}

//----- (0070FB60) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_ENTER_PLAYER_DIRECT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_ENTER_PLAYER_DIRECT_CMD *pkProto)
{
  Char *v2; // esi@2
  int result; // eax@4
  NiPoint3 kDir; // [sp+Ch] [bp-38h]@3
  float v5; // [sp+18h] [bp-2Ch]@3
  NiMatrix3 thisa; // [sp+1Ch] [bp-28h]@3
  unsigned int v7; // [sp+40h] [bp-4h]@1
  int v8; // [sp+44h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  if ( pkProto )
  {
    v2 = CharMgr::GetChar(&g_kCharMgr, pkProto->nHandle);
    if ( v2 )
    {
      v5 = (NI_PI + NI_PI) * (double)pkProto->nDirect / 180.0;
      NiMatrix3::MakeZRotation(&thisa, v5);
      NiMatrix3::operator_(&thisa, &kDir, &World::ms_kNorthDir);
      ((void (__thiscall *)(Char *, NiPoint3 *))v2->baseclass_0.vfptr[6].Affect)(v2, &kDir);
    }
    result = 1;
  }
  else
  {
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (0070FC10) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_BUY_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_BUY_ACK *pkProto)
{
  int result; // eax@2
  int v3; // esi@2
  char *v4; // eax@7
  unsigned int v5; // [sp-4h] [bp-Ch]@4

  if ( !pkProto )
    return 1;
  result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v3 = result;
  if ( !result )
    return result;
  if ( pkProto->nError == 10253 )
  {
    v5 = -976467685;
LABEL_7:
    v4 = TextData2::Get(v5);
    GameFrameWork::AddSysMsg((GameFrameWork *)v3, v4);
    return 1;
  }
  if ( pkProto->nError == 10252 )
  {
    v5 = 102344819;
    goto LABEL_7;
  }
  return 1;
}

//----- (0070FC80) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_SELL_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_SELL_ACK *pkProto)
{
  int result; // eax@2
  int v3; // esi@2
  char *v4; // eax@4

  if ( pkProto )
  {
    result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v3 = result;
    if ( !result )
      return result;
    if ( pkProto->nError == 10260 )
    {
      v4 = TextData2::Get(0x768675A6u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v3, v4);
    }
  }
  return 1;
}

//----- (0070FCE0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_TYPE_AND_WHERE_STAND_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_TYPE_AND_WHERE_STAND_ACK *pkProto)
{
  Char *v2; // eax@2
  Char *v3; // edi@2
  NiNode *v4; // esi@3
  NiRefObjectVtbl *v5; // ST14_4@4
  char *v6; // ST04_4@4
  NiShader *v7; // eax@4
  NiShader *v8; // eax@4
  float v9; // ecx@5
  float v10; // edx@5
  float v11; // eax@5
  float v12; // edx@5
  float v13; // eax@5
  float v14; // ecx@5
  void (__thiscall *v15)(AbStateInfectee *, ABSTATEINDEX, bool, int); // edx@5
  NiPoint3 *v16; // eax@5
  GAMBLE_TYPE v17; // eax@5
  MHDiceGameTask *v18; // eax@6
  MHDiceGameTask *v19; // edx@8
  float v20; // ecx@10
  float v21; // edx@10
  int v22; // eax@11
  NiPoint3 result; // [sp+8h] [bp-50h]@5
  NiPoint3 pos; // [sp+14h] [bp-44h]@5
  NiPoint3 kPos; // [sp+20h] [bp-38h]@5
  MHDiceGameTask *v26; // [sp+2Ch] [bp-2Ch]@1
  NiMatrix3 mat; // [sp+30h] [bp-28h]@5
  unsigned int v28; // [sp+54h] [bp-4h]@1
  int v29; // [sp+58h] [bp+0h]@1

  v28 = (unsigned int)&v29 ^ __security_cookie;
  v26 = this;
  if ( 9728 == pkProto->nError )
  {
    v2 = CharMgr::GetChar(&g_kCharMgr, pkProto->nNpcHandle);
    v3 = v2;
    if ( v2 )
    {
      v4 = v2->m_spScene.m_pObject;
      if ( v4 )
      {
        v5 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v6 = fs("Avatar%.2d");
        v7 = (NiShader *)v5[18].__vecDelDtor((NiRefObject *)v4, (unsigned int)v6);
        v8 = CPostProcessEffect::DynamicCast(&NiNode::m_RTTI, v7);
        if ( v8 )
        {
          LODWORD(v9) = v8[5].m_pszName;
          LODWORD(v10) = v8[5].m_uiImplementation;
          LODWORD(v11) = v8[6].baseclass_0.vfptr;
          pos.y = v10;
          v12 = v4->baseclass_0.m_kLocal.m_Translate.y;
          pos.z = v11;
          v13 = v4->baseclass_0.m_kLocal.m_Translate.z;
          pos.x = v9;
          v14 = v4->baseclass_0.m_kLocal.m_Translate.x;
          kPos.y = v12;
          v15 = v3->baseclass_0.vfptr[6].SetAbStateProperty;
          kPos.z = v13;
          kPos.x = v14;
          ((void (__thiscall *)(Char *, NiPoint3 *))v15)(v3, &kPos);
          memcpy(&mat, &v4->baseclass_0.m_kWorld, sizeof(mat));
          v16 = NiMatrix3::operator_(&mat, &result, &pos);
          pos.x = v16->x;
          pos.y = v16->y;
          pos.z = v16->z;
          result.x = pos.x * 1.5;
          result.y = pos.y * 1.5;
          result.z = 1.5 * pos.z;
          kPos.x = result.x + kPos.x;
          kPos.y = kPos.y + result.y;
          kPos.z = kPos.z + result.z;
          g_pkMainChar[1].m_kCharShape.m_kItemUpGrade.m_arrLinkData[7].dwEffectIndex[1] = 0;
          MainChar::SetStartReserveAct((MainChar *)g_pkMainChar, RESERVEACT_PICKGROUND);
          MainChar::SetRevserveMovePos((MainChar *)g_pkMainChar, &kPos);
          MainChar::StartMoveTarget((MainChar *)g_pkMainChar);
          v17 = pkProto->nGambleType;
          if ( v17 == 2 )
          {
            v18 = v26;
            v26->m_eDiceGameMode = 5;
          }
          else
          {
            if ( v17 == 1 )
            {
              v19 = v26;
              v26->m_eDiceGameMode = 3;
              v18 = v19;
            }
            else
            {
              v18 = v26;
            }
          }
          v18->m_nWhereStand = pkProto->nWhereStand;
          LODWORD(v20) = (_DWORD)kPos.x;
          v18->m_nNpcHandle = pkProto->nNpcHandle;
          v21 = kPos.y;
          v18->m_kDestPos.x = v20;
          v18->m_kDestPos.y = v21;
          v18->m_kDestPos.z = 0.0;
        }
      }
      v22 = 1;
    }
    else
    {
      v22 = 1;
    }
  }
  else
  {
    v22 = 1;
  }
  return v22;
}
// A85C00: using guessed type int __security_cookie;

//----- (0070FEE0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *pkProto)
{
  PROTO_NC_GAMBLE_DICE_TAISAI_DICE_ROLL_RESULT_EMOTION_CMD *v2; // ebx@3
  int v3; // edi@5
  unsigned int v4; // esi@5
  void *v5; // eax@9
  int result; // eax@12
  Char *pkChar; // [sp+Ch] [bp-8h]@4
  signed int i; // [sp+10h] [bp-4h]@2

  if ( pkProto && (i = 0, pkProto->nGamerCnt) )
  {
    v2 = pkProto + 3;
    while ( 1 )
    {
      pkChar = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)&v2[-2].nGamerCnt);
      if ( !pkChar )
        break;
      v3 = *(_DWORD *)&v2->nGamerCnt;
      v4 = 0;
      if ( ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
      {
        while ( *(_DWORD *)((char *)CDataReader::GetRecord(
                                      (CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4),
                                      v4)
                          + 105) != v3 )
        {
          ++v4;
          if ( v4 >= ITableBase<ActionViewInfo_ActionViewTable>::GetTotal() )
            goto LABEL_11;
        }
        v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<ActionViewInfo_ActionViewTable>::ms_pkTable + 4), v4);
        if ( v5 )
          ((void (__stdcall *)(_DWORD))pkChar->baseclass_0.vfptr[14].SetAbStateProperty)(*(_BYTE *)v5);
      }
LABEL_11:
      v2 += 6;
      ++i;
      if ( i >= pkProto->nGamerCnt )
        goto LABEL_12;
    }
    result = 0;
  }
  else
  {
LABEL_12:
    result = 1;
  }
  return result;
}
// A95D34: using guessed type int ITableBase_ActionViewInfo_ActionViewTable___ms_pkTable;

//----- (0070FFA0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_COIN_USE_COINITEM_MESSAGE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_COIN_USE_COINITEM_MESSAGE_CMD *pkProto)
{
  PgFrameWork *v2; // esi@2
  char *v3; // eax@3
  char *v4; // eax@3
  int result; // eax@4

  if ( pkProto )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v2 )
    {
      v3 = TextData2::Get(0xDBE95533u);
      v4 = fs(v3);
      GameFrameWork::AddSysMsg((GameFrameWork *)v2, v4);
    }
    result = 1;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00710000) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD *pkProto)
{
  PgFrameWork *v2; // eax@2
  bool v3; // zf@2
  PgFrameWork *v4; // ebx@2
  int v5; // edi@3
  Char *v6; // esi@4
  bool v7; // cf@6
  D3DXCOLOR *v8; // eax@6
  D3DXCOLOR v9; // ST0C_16@6
  char *v10; // eax@6
  char *v11; // eax@6
  PgWin *v12; // ST18_4@8
  int v13; // edx@9
  int v14; // eax@10
  char v15; // [sp+0h] [bp-4Ch]@6
  PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD *v16; // [sp+10h] [bp-3Ch]@1
  MHDiceGameTask *thisa; // [sp+14h] [bp-38h]@1
  int i; // [sp+18h] [bp-34h]@2
  PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD *v19; // [sp+1Ch] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+20h] [bp-2Ch]@6
  unsigned int v21; // [sp+3Ch] [bp-10h]@1
  int v22; // [sp+48h] [bp-4h]@6
  int v23; // [sp+4Ch] [bp+0h]@1

  v21 = (unsigned int)&v23 ^ __security_cookie;
  thisa = this;
  v16 = pkProto;
  if ( pkProto )
  {
    v2 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v3 = pkProto->nGamerCnt == 0;
    v4 = v2;
    i = 0;
    if ( !v3 )
    {
      v5 = (int)&pkProto[3];
      v19 = pkProto + 3;
      do
      {
        v6 = CharMgr::GetChar(&g_kCharMgr, *(_WORD *)(v5 - 2));
        if ( v6 && *(_DWORD *)v5 )
        {
          v7 = MHDiceGameTask::GetMoneyToString(thisa, &result, *(_DWORD *)v5)->baseclass_0._Myres < 0x10;
          v22 = 0;
          v8 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v15, Center_Announcement);
          *(_QWORD *)&v9.r = *(_QWORD *)&v8->r;
          *(_QWORD *)&v9.b = *(_QWORD *)&v8->b;
          ((void (__thiscall *)(Char *))v6->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v6);
          v10 = TextData2::Get(0x4746208Au);
          v11 = fs(v10);
          GameFrameWork::AddAnnounceMsg((GameFrameWork *)v4, v11, COERCE_D3DXCOLOR(v9.r));
          v22 = -1;
          if ( result.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&result);
          v12 = (PgWin *)v4[28].m_kMsgQ.m_uiHead;
          result.baseclass_0._Myres = 15;
          result.baseclass_0._Mysize = 0;
          result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          PgWinMgr::SetTopWin(&Pgg_kWinMgr, v12);
          v5 = (int)v19;
        }
        v13 = v16->nGamerCnt;
        v5 += 6;
        ++i;
        v19 = (PROTO_NC_GAMBLE_DICE_TAISAI_LARGE_AMOUNT_CMD *)v5;
      }
      while ( i < v13 );
    }
    v14 = 1;
  }
  else
  {
    v14 = 0;
  }
  return v14;
}
// A85C00: using guessed type int __security_cookie;

//----- (00710180) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_BETTING_INFO_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_BETTING_INFO_CMD *pkProto)
{
  PROTO_NC_GAMBLE_DICE_TAISAI_GAME_BETTING_INFO_CMD *v2; // ebx@1
  MHDiceGameTask *v3; // edi@1
  int v4; // esi@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // eax@5
  int v6; // ecx@6
  int v7; // eax@10
  int v8; // esi@15
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v9; // eax@16
  int v10; // ecx@17
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+Ch] [bp-4h]@5
  signed int i; // [sp+18h] [bp+8h]@3
  signed int ia; // [sp+18h] [bp+8h]@14

  v2 = pkProto;
  v3 = this;
  if ( !(pkProto->PartMask & 1) || this->m_eStatusOfInfoTrans )
  {
    v7 = 1;
    if ( pkProto->PartMask & 2 && this->m_eStatusOfInfoTrans == 1 )
    {
      ia = 0;
      if ( v2->nBettingCnt > 0u )
      {
        v8 = (int)((char *)&v2[1].nBettingCnt + 1);
        do
        {
          v9 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&v3->map_ParticipantInfo.baseclass_0, &result, (const unsigned __int16 *)(v8 - 2))->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          if ( v9 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
          {
            v10 = *(_DWORD *)(v8 + 4);
            if ( v10 )
              v9->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[*(_DWORD *)v8] += v10;
            MHDiceGameTask::CheckBettingChip(v3, *(DICE_TAISAI_BETTING *)v8, 0);
          }
          v8 += 10;
          ++ia;
        }
        while ( ia < v2->nBettingCnt );
      }
      v7 = 1;
      if ( v2->PartMask & 2 )
        v3->m_eStatusOfInfoTrans = 0;
    }
  }
  else
  {
    i = 0;
    if ( v2->nBettingCnt > 0u )
    {
      v4 = (int)((char *)&v2[1].nBettingCnt + 1);
      do
      {
        v5 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&v3->map_ParticipantInfo.baseclass_0, &result, (const unsigned __int16 *)(v4 - 2))->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        if ( v5 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
        {
          v6 = *(_DWORD *)(v4 + 4);
          if ( v6 )
            v5->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[*(_DWORD *)v4] += v6;
          MHDiceGameTask::CheckBettingChip(v3, *(DICE_TAISAI_BETTING *)v4, 0);
        }
        v4 += 10;
        ++i;
      }
      while ( i < v2->nBettingCnt );
    }
    v7 = 1;
    if ( !(v2->PartMask & 2) )
      v3->m_eStatusOfInfoTrans = 1;
  }
  return v7;
}

//----- (007102A0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameLeaveReq(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  int v2; // edx@1
  DICE_TAISAI_GAME_STATUS v3; // ebx@1
  signed int v4; // eax@1
  int v5; // ecx@1
  PgWin *v6; // esi@6
  char *v7; // eax@11
  MsgBox *v8; // eax@11
  PgFrameWork *v9; // esi@13
  char *v10; // eax@13
  D3DXCOLOR *v11; // eax@13
  D3DXCOLOR v12; // ST04_16@13
  char *v13; // eax@13
  char v14; // [sp+Ch] [bp-18h]@13
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+1Ch] [bp-8h]@1
  unsigned __int16 _Keyval[2]; // [sp+20h] [bp-4h]@1

  v1 = this;
  *(_DWORD *)_Keyval = g_pkMainChar->m_kHandle;
  v2 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
                     &this->map_ParticipantInfo.baseclass_0,
                     &result,
                     _Keyval)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v3 = v1->m_eDiceSaiGameStatus;
  v4 = 0;
  v5 = v2 + 16;
  while ( !*(_DWORD *)v5 )
  {
    ++v4;
    v5 += 4;
    if ( v4 >= 52 )
      goto LABEL_4;
  }
  if ( !v1->m_spExitConfirmWin.m_pObject && v3 == 1 && !v1->m_bOutReserveOnMiniHouse )
  {
    v7 = TextData2::Get(0xCCF40DFDu);
    v8 = MsgBox::Modeless(MSGBOX_OKCANCEL, v7);
    NiPointer<PopupMenuWin>::operator_(
      (NiPointer<NiD3DDefaultShader> *)&v1->m_spExitConfirmWin,
      (NiD3DDefaultShader *)v8);
    v1->m_spExitConfirmWin.m_pObject->baseclass_e8.vfptr->SetMsgHooker(
      &v1->m_spExitConfirmWin.m_pObject->baseclass_e8,
      &v1->baseclass_0.baseclass_8);
    return;
  }
LABEL_4:
  if ( v3 == 2 || v3 == 3 )
  {
    *(_BYTE *)(v2 + 228) = 1;
    v9 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    v10 = TextData2::Get(0xDFD0BFCDu);
    GameFrameWork::AddSysMsg((GameFrameWork *)v9, v10);
    v11 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v14, Center_Announcement);
    *(_QWORD *)&v12.r = *(_QWORD *)&v11->r;
    *(_QWORD *)&v12.b = *(_QWORD *)&v11->b;
    v13 = TextData2::Get(0xDFD0BFCDu);
    GameFrameWork::AddAnnounceMsg((GameFrameWork *)v9, v13, COERCE_D3DXCOLOR(v12.r));
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v9[28].m_kMsgQ.m_uiHead);
  }
  else
  {
    v6 = v1->m_spExitConfirmWin.m_pObject;
    if ( v6 )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, v6);
    else
      NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x68u, 0, 0);
  }
}

//----- (00710410) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_ACK *pkProto)
{
  int *v2; // ebx@1
  MHDiceGameTask *v3; // esi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v5; // edi@1
  int v6; // eax@2
  __int16 v7; // ax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v8; // eax@4
  int v9; // ebx@4
  int v10; // ecx@5
  DICE_TAISAI_BETTING v11; // eax@7
  BETTING_LEVEL_MONEY v12; // ST0C_4@9
  GambleDiceGameWin *v13; // ecx@9
  DICE_TAISAI_BETTING v14; // ST08_4@9
  const unsigned int v15; // eax@9
  PgFrameWork *v16; // esi@11
  char *v17; // eax@11
  D3DXCOLOR *v18; // eax@11
  D3DXCOLOR v19; // ST04_16@11
  char *v20; // eax@11
  PgFrameWork *v21; // esi@15
  char *v22; // eax@16
  char v23; // [sp+Ch] [bp-1Ch]@11
  char v24; // [sp+1Ch] [bp-Ch]@4
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > result; // [sp+20h] [bp-8h]@1
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *thisa; // [sp+24h] [bp-4h]@1

  v2 = (int *)pkProto;
  v3 = this;
  thisa = (std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&this->map_BettingReq;
  v4 = std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::find(
         &this->map_BettingReq.baseclass_0,
         &result,
         &pkProto->nBettingIndex);
  v5 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node **)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == v3->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v6 = 0;
  }
  else
  {
    v7 = *(_WORD *)v2;
    if ( *(_WORD *)v2 == 9776 )
    {
      pkProto = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_ACK *)g_pkMainChar->m_kHandle;
      v8 = std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
             &v3->map_ParticipantInfo.baseclass_0,
             (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&v24,
             (const unsigned __int16 *)&pkProto);
      v9 = *(_DWORD *)&v8->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v8->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v5 + 20);
        if ( v10 )
          *(_DWORD *)(v9 + 4 * *(_DWORD *)(*(_DWORD *)&v5 + 16) + 16) += v10;
      }
      v11 = *(_DWORD *)(*(_DWORD *)&v5 + 16);
      if ( *(_DWORD *)(v9 + 4 * v11 + 16) )
        GambleDiceGameWin::SetMarkButton(v3->m_pkGambleDiceGameWin, v11, BET_BETTING, 0);
      v12 = v3->m_eBettingAmount;
      v13 = v3->m_pkGambleDiceGameWin;
      v14 = *(_DWORD *)(*(_DWORD *)&v5 + 16);
      v3->m_eDiceSaiGameStatus = 1;
      GambleDiceGameWin::ChipAnimation(v13, v14, v12, 0);
      v15 = EntryInfo::GetTotalBettingMoney((EntryInfo *)(v9 + 16));
      GambleDiceGameWin::SetMoneyWin(v3->m_pkGambleDiceGameWin, v15);
    }
    else
    {
      if ( v7 == 9787 )
      {
        v16 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        v17 = ErrMsgTable::GetErrMsg(*(_WORD *)v2);
        GameFrameWork::AddSysMsg((GameFrameWork *)v16, v17);
        v18 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v23, Center_Announcement);
        *(_QWORD *)&v19.r = *(_QWORD *)&v18->r;
        *(_QWORD *)&v19.b = *(_QWORD *)&v18->b;
        v20 = ErrMsgTable::GetErrMsg(*(_WORD *)v2);
        GameFrameWork::AddAnnounceMsg((GameFrameWork *)v16, v20, COERCE_D3DXCOLOR(v19.r));
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v16[28].m_kMsgQ.m_uiHead);
      }
      else
      {
        if ( 9783 == v7 || 9786 == v7 || 9782 == v7 )
        {
          v21 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v21 )
          {
            v22 = fs("%d");
            GameFrameWork::AddSysMsg((GameFrameWork *)v21, v22);
          }
        }
      }
    }
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
      thisa,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&pkProto,
      v5);
    v6 = 1;
  }
  return v6;
}

//----- (007105D0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CMD *pkProto)
{
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CMD *v2; // esi@1
  MHDiceGameTask *v3; // edi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // eax@2
  unsigned int v5; // ecx@3

  v2 = pkProto;
  v3 = this;
  if ( pkProto->nPlayerHnd == g_pkMainChar->m_kHandle )
    return 1;
  v4 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&this->map_ParticipantInfo.baseclass_0, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&pkProto, &pkProto->nPlayerHnd)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v4 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v5 = v2->BettingInfo.nMoney;
    if ( v5 )
      v4->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[v2->BettingInfo.nBetting] += v5;
    v3->m_eDiceSaiGameStatus = 1;
    MHDiceGameTask::CheckBettingChip(v3, v2->BettingInfo.nBetting, 0);
    return 1;
  }
  return 0;
}

//----- (00710640) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK *pkProto)
{
  int *v2; // edi@1
  MHDiceGameTask *v3; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > v4; // ebx@1
  int v5; // eax@2
  __int16 v6; // ax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v7; // eax@4
  int v8; // edi@4
  DICE_TAISAI_BETTING v9; // eax@6
  const unsigned int v10; // eax@8
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK **v11; // eax@8
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK *v12; // ecx@8
  char v13; // bl@8
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK *v14; // edi@9
  signed int v15; // eax@10
  int v16; // ecx@10
  PgFrameWork *v17; // edi@17
  char *v18; // eax@17
  D3DXCOLOR *v19; // eax@17
  D3DXCOLOR v20; // ST04_16@17
  char *v21; // eax@17
  unsigned __int16 v22; // dx@17
  GambleDiceGameWin *v23; // ecx@17
  PgFrameWork *v24; // esi@20
  D3DXCOLOR *v25; // eax@20
  D3DXCOLOR v26; // ST04_16@20
  char *v27; // eax@20
  PgFrameWork *v28; // esi@23
  char *v29; // eax@24
  char v30; // [sp+Ch] [bp-20h]@17
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+1Ch] [bp-10h]@4
  std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *thisa; // [sp+20h] [bp-Ch]@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > itr; // [sp+24h] [bp-8h]@1
  DICE_TAISAI_BETTING bettingIdx; // [sp+28h] [bp-4h]@1

  v2 = (int *)pkProto;
  v3 = this;
  thisa = (std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&this->map_BettingReq;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::find(&this->map_BettingReq.baseclass_0, (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > > *)&bettingIdx, &pkProto->nBettingCancelIndex)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  itr = v4;
  if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)v4 == v3->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v5 = 0;
  }
  else
  {
    v6 = *(_WORD *)v2;
    if ( *(_WORD *)v2 == 9792 )
    {
      pkProto = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK *)g_pkMainChar->m_kHandle;
      v7 = std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
             &v3->map_ParticipantInfo.baseclass_0,
             &result,
             (const unsigned __int16 *)&pkProto);
      v8 = *(_DWORD *)&v7->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v7->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
        *(_DWORD *)(v8 + 4 * *(_DWORD *)(*(_DWORD *)&v4 + 16) + 16) -= *(_DWORD *)(*(_DWORD *)&v4 + 20);
      v9 = *(_DWORD *)(*(_DWORD *)&v4 + 16);
      if ( !*(_DWORD *)(v8 + 4 * v9 + 16) )
        GambleDiceGameWin::SetMarkButton(v3->m_pkGambleDiceGameWin, v9, 0, 0);
      bettingIdx = *(_DWORD *)(*(_DWORD *)&v4 + 16);
      v10 = EntryInfo::GetTotalBettingMoney((EntryInfo *)(v8 + 16));
      GambleDiceGameWin::SetMoneyWin(v3->m_pkGambleDiceGameWin, v10);
      v11 = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK **)v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
      v12 = *v11;
      v13 = 0;
      pkProto = v12;
      if ( (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK **)v12 == v11 )
        goto LABEL_28;
      v14 = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_ACK *)v11;
      do
      {
        v15 = 0;
        v16 = (int)&v12[4];
        while ( !*(_DWORD *)v16 )
        {
          ++v15;
          v16 += 4;
          if ( v15 >= 52 )
            goto LABEL_15;
        }
        v13 = 1;
LABEL_15:
        std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >,std::_Iterator_base0> *)&pkProto);
        v12 = pkProto;
      }
      while ( pkProto != v14 );
      if ( !v13 )
      {
LABEL_28:
        v17 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        v18 = TextData2::Get(0x8AA5ACB9u);
        GameFrameWork::AddSysMsg((GameFrameWork *)v17, v18);
        v19 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v30, Center_Announcement);
        *(_QWORD *)&v20.r = *(_QWORD *)&v19->r;
        *(_QWORD *)&v20.b = *(_QWORD *)&v19->b;
        v21 = TextData2::Get(0x8AA5ACB9u);
        GameFrameWork::AddAnnounceMsg((GameFrameWork *)v17, v21, COERCE_D3DXCOLOR(v20.r));
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v17[28].m_kMsgQ.m_uiHead);
        v22 = LOWORD(v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
        v23 = v3->m_pkGambleDiceGameWin;
        v3->m_eDiceSaiGameStatus = 0;
        v3->m_nNumberOfEntrant = v22;
        GambleDiceGameWin::TurnOnLight(v23, 1, 0, 0);
      }
      MHDiceGameTask::CheckBettingChip(v3, bettingIdx, 0);
      v4 = itr;
    }
    else
    {
      if ( v6 == 9802 )
      {
        v24 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
        v25 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v30, Center_Announcement);
        *(_QWORD *)&v26.r = *(_QWORD *)&v25->r;
        *(_QWORD *)&v26.b = *(_QWORD *)&v25->b;
        v27 = ErrMsgTable::GetErrMsg(*(_WORD *)v2);
        GameFrameWork::AddAnnounceMsg((GameFrameWork *)v24, v27, COERCE_D3DXCOLOR(v26.r));
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v24[28].m_kMsgQ.m_uiHead);
      }
      else
      {
        if ( 9800 == v6 || 9799 == v6 )
        {
          v28 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
          if ( v28 )
          {
            v29 = fs("%d");
            GameFrameWork::AddSysMsg((GameFrameWork *)v28, v29);
          }
        }
      }
    }
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::erase(
      thisa,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > > *)&pkProto,
      v4);
    v5 = 1;
  }
  return v5;
}

//----- (007108B0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD *pkProto)
{
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD *v2; // ebx@1
  MHDiceGameTask *v3; // esi@1
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_CMD *v4; // ST10_4@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v6; // eax@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v7; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v8; // edi@4
  signed int v9; // eax@5
  int v10; // ecx@5
  PgFrameWork *v11; // edi@12
  char *v12; // eax@12
  D3DXCOLOR *v13; // eax@12
  D3DXCOLOR v14; // ST04_16@12
  char *v15; // eax@12
  unsigned __int16 v16; // dx@12
  GambleDiceGameWin *v17; // ecx@12
  D3DXCOLOR result; // [sp+Ch] [bp-14h]@12
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > itr; // [sp+1Ch] [bp-4h]@2
  char IsEmpty_3; // [sp+2Bh] [bp+Bh]@2

  v2 = pkProto;
  v3 = this;
  if ( pkProto->nPlayerHnd == g_pkMainChar->m_kHandle )
    return 1;
  v4 = pkProto;
  IsEmpty_3 = 0;
  v5 = *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(&this->map_ParticipantInfo.baseclass_0, &itr, &v4->nPlayerHnd)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v5 != v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
  {
    v5->_Myval.baseclass_0.second.m_BettingInfo.nBetMoney[v2->BettingCancelInfo.nBetting] -= v2->BettingCancelInfo.nMoney;
    v6 = v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v7 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)v6->_Left;
    itr = v7;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v7 == v6 )
      goto LABEL_18;
    v8 = v6;
    do
    {
      v9 = 0;
      v10 = *(_DWORD *)&v7 + 16;
      while ( !*(_DWORD *)v10 )
      {
        ++v9;
        v10 += 4;
        if ( v9 >= 52 )
          goto LABEL_10;
      }
      IsEmpty_3 = 1;
LABEL_10:
      std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(&itr.baseclass_0.baseclass_0);
      v7 = itr;
    }
    while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)itr != v8 );
    if ( !IsEmpty_3 )
    {
LABEL_18:
      v11 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
      v12 = TextData2::Get(0x8AA5ACB9u);
      GameFrameWork::AddSysMsg((GameFrameWork *)v11, v12);
      v13 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
      *(_QWORD *)&v14.r = *(_QWORD *)&v13->r;
      *(_QWORD *)&v14.b = *(_QWORD *)&v13->b;
      v15 = TextData2::Get(0x8AA5ACB9u);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v11, v15, COERCE_D3DXCOLOR(v14.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v11[28].m_kMsgQ.m_uiHead);
      v16 = LOWORD(v3->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
      v17 = v3->m_pkGambleDiceGameWin;
      v3->m_eDiceSaiGameStatus = 0;
      v3->m_nNumberOfEntrant = v16;
      GambleDiceGameWin::TurnOnLight(v17, 1, 0, 0);
    }
    MHDiceGameTask::CheckBettingChip(v3, v2->BettingCancelInfo.nBetting, 0);
    return 1;
  }
  return 0;
}

//----- (00710A00) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_CMD *pkProto)
{
  PROTO_NC_GAMBLE_DICE_TAISAI_GAME_LEAVE_CMD *v2; // esi@1
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v3; // ebx@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *v4; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v5; // edi@1
  MHDiceGameTask *v6; // ecx@1
  DICE_TAISAI_BETTING v8; // esi@5
  MHDiceGameTask *v9; // ebx@9
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v10; // eax@9
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v11; // ecx@9
  signed int v12; // eax@10
  int v13; // edx@10
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v14; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *j; // eax@15
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // eax@18
  PgFrameWork *v17; // esi@23
  Char *v18; // eax@24
  D3DXCOLOR *v19; // eax@25
  D3DXCOLOR v20; // ST08_16@25
  char *v21; // eax@25
  char *v22; // eax@25
  unsigned __int16 v23; // dx@26
  char v24; // [sp+Ch] [bp-18h]@25
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+1Ch] [bp-8h]@1
  MHDiceGameTask *v26; // [sp+20h] [bp-4h]@1
  const unsigned __int16 *pkProtoa; // [sp+2Ch] [bp+8h]@1

  v2 = pkProto;
  pkProtoa = &pkProto->nPlayerHnd;
  v3 = (std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *)&this->map_ParticipantInfo;
  v26 = this;
  v4 = std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::find(
         &this->map_ParticipantInfo.baseclass_0,
         &result,
         pkProtoa);
  v5 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v6 = v26;
  if ( *(std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node **)&v4->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] == v26->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
    return 0;
  if ( v2->bReserve )
  {
    *(_BYTE *)(*(_DWORD *)&v5 + 228) = 1;
    return 1;
  }
  if ( v26->m_eDiceSaiGameStatus == 1 )
  {
    v8 = 0;
    do
    {
      if ( *(_DWORD *)(*(_DWORD *)&v5 + 4 * v8 + 16) )
      {
        *(_DWORD *)(*(_DWORD *)&v5 + 4 * v8 + 16) = 0;
        MHDiceGameTask::CheckBettingChip(v6, v8, 0);
        v6 = v26;
      }
      ++v8;
    }
    while ( (signed int)v8 < 52 );
  }
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(
    v3,
    &result,
    v5);
  v9 = v26;
  v10 = v26->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
  v11 = v10->_Left;
  if ( v10->_Left != v10 )
  {
LABEL_10:
    v12 = 0;
    v13 = (int)&v11->_Myval.baseclass_0.second;
    while ( !*(_DWORD *)v13 )
    {
      ++v12;
      v13 += 4;
      if ( v12 >= 52 )
      {
        if ( !v11->_Isnil )
        {
          v14 = v11->_Right;
          if ( v14->_Isnil )
          {
            for ( i = v11->_Parent; !i->_Isnil; i = i->_Parent )
            {
              if ( v11 != i->_Right )
                break;
              v11 = i;
            }
            v11 = i;
          }
          else
          {
            v11 = v11->_Right;
            for ( j = v14->_Left; !j->_Isnil; j = j->_Left )
              v11 = j;
          }
        }
        if ( v11 != v26->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead )
          goto LABEL_10;
        goto LABEL_23;
      }
    }
    return 1;
  }
LABEL_23:
  v17 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v17 )
  {
    v18 = CharMgr::GetChar(&g_kCharMgr, *pkProtoa);
    if ( v18 )
    {
      ((void (__thiscall *)(Char *))v18->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v18);
      v19 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v24, Center_Announcement);
      *(_QWORD *)&v20.r = *(_QWORD *)&v19->r;
      *(_QWORD *)&v20.b = *(_QWORD *)&v19->b;
      v21 = TextData2::Get(0x37452093u);
      v22 = fs(v21);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v17, v22, COERCE_D3DXCOLOR(v20.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v17[28].m_kMsgQ.m_uiHead);
    }
  }
  v23 = LOWORD(v9->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
  v9->m_eDiceSaiGameStatus = 0;
  v9->m_nNumberOfEntrant = v23;
  return 1;
}

//----- (00710BC0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameBettingReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_REQ *pkProto)
{
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_REQ *v2; // esi@1
  unsigned __int16 v3; // dx@2
  unsigned __int16 v4; // ax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v5; // edx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v6; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v7; // eax@9
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_REQ **v8; // eax@11
  DICE_TAISAI_BETTING v9; // edx@14
  std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *v10; // edi@14
  unsigned int v11; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v12; // eax@14
  std::pair<unsigned short,DiceTaiSaiBetting> _Val; // [sp+8h] [bp-Ch]@12

  v2 = pkProto;
  if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      do
      {
        v4 = this->m_nReqCount;
        this->m_nReqCount = v4 + 1;
        v2->nBettingIndex = v4;
        v5 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        v6 = v5->_Parent;
        while ( !v6->_Isnil )
        {
          if ( v6->_Myval.baseclass_0.first >= v2->nBettingIndex )
          {
            v5 = v6;
            v6 = v6->_Left;
          }
          else
          {
            v6 = v6->_Right;
          }
        }
        v7 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        pkProto = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_REQ *)v5;
        if ( v5 == v7 || v2->nBettingIndex < v5->_Myval.baseclass_0.first )
        {
          _Val.baseclass_0.second.nMoney = (unsigned int)v7;
          v8 = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_REQ **)&_Val.baseclass_0.second.nMoney;
        }
        else
        {
          v8 = &pkProto;
        }
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)*v8 != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
  }
  else
  {
    v3 = this->m_nReqCount;
    this->m_nReqCount = v3 + 1;
    v2->nBettingIndex = v3;
  }
  v9 = v2->BettingInfo.nBetting;
  v10 = (std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *)&this->map_BettingReq;
  _Val.baseclass_0.first = v2->nBettingIndex;
  v11 = v2->BettingInfo.nMoney;
  _Val.baseclass_0.second.nBetting = v9;
  _Val.baseclass_0.second.nMoney = v11;
  v12 = std::_Tree_val<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Buynode<std::pair<unsigned_short_DiceTaiSaiBetting>>(
          &this->map_BettingReq.baseclass_0.baseclass_0,
          &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Linsert(
    v10,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *)&_Val.baseclass_0.second,
    v12,
    0);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x71u, v2, 10);
}

//----- (00710CA0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleDiceTaisaiGameBettingCancelReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_REQ *pkProto)
{
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_REQ *v2; // esi@1
  unsigned __int16 v3; // dx@2
  unsigned __int16 v4; // ax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v5; // edx@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v6; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v7; // eax@9
  PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_REQ **v8; // eax@11
  DICE_TAISAI_BETTING v9; // edx@14
  std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *v10; // edi@14
  unsigned int v11; // eax@14
  std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *v12; // eax@14
  std::pair<unsigned short,DiceTaiSaiBetting> _Val; // [sp+8h] [bp-Ch]@12

  v2 = pkProto;
  if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Mysize )
  {
    if ( this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead->_Left != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead )
    {
      do
      {
        v4 = this->m_nReqCount;
        this->m_nReqCount = v4 + 1;
        v2->nBettingCancelIndex = v4;
        v5 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        v6 = v5->_Parent;
        while ( !v6->_Isnil )
        {
          if ( v6->_Myval.baseclass_0.first >= v2->nBettingCancelIndex )
          {
            v5 = v6;
            v6 = v6->_Left;
          }
          else
          {
            v6 = v6->_Right;
          }
        }
        v7 = this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead;
        pkProto = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_REQ *)v5;
        if ( v5 == v7 || v2->nBettingCancelIndex < v5->_Myval.baseclass_0.first )
        {
          _Val.baseclass_0.second.nMoney = (unsigned int)v7;
          v8 = (PROTO_NC_GAMBLE_DICE_TAISAI_BETTING_CANCEL_REQ **)&_Val.baseclass_0.second.nMoney;
        }
        else
        {
          v8 = &pkProto;
        }
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> >::_Node *)*v8 != this->map_BettingReq.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
  }
  else
  {
    v3 = this->m_nReqCount;
    this->m_nReqCount = v3 + 1;
    v2->nBettingCancelIndex = v3;
  }
  v9 = v2->BettingCancelInfo.nBetting;
  v10 = (std::_Tree<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > *)&this->map_BettingReq;
  _Val.baseclass_0.first = v2->nBettingCancelIndex;
  v11 = v2->BettingCancelInfo.nMoney;
  _Val.baseclass_0.second.nBetting = v9;
  _Val.baseclass_0.second.nMoney = v11;
  v12 = std::_Tree_val<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Buynode<std::pair<unsigned_short_DiceTaiSaiBetting>>(
          &this->map_BettingReq.baseclass_0.baseclass_0,
          &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::_Linsert(
    v10,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,DiceTaiSaiBetting,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,DiceTaiSaiBetting> >,0> > >,bool> *)&_Val.baseclass_0.second,
    v12,
    0);
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0x74u, v2, 10);
}

//----- (00710D80) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_BET_START_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_BET_START_CMD *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // eax@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v4; // edx@2
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v5; // eax@4
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *j; // eax@5
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *i; // eax@8
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v8; // ecx@13
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > v9; // eax@13
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > result; // [sp+8h] [bp-10Ch]@16
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > itr; // [sp+Ch] [bp-108h]@13
  char pcScript[256]; // [sp+10h] [bp-104h]@19
  unsigned int v14; // [sp+110h] [bp-4h]@1
  int v15; // [sp+114h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = this;
  if ( pkProto )
  {
    this->m_eDiceSaiGameMode = pkProto->bModeType;
    GambleDiceGameWin::UpdateHistory(this->m_pkGambleDiceGameWin, pkProto->CurrentRollingDice.nNumber, 0);
    v3 = v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v4 = v3->_Left;
    if ( v3->_Left != v3 )
    {
      do
      {
        memset(&v4->_Myval.baseclass_0.second, 0, 0xD0u);
        if ( !v4->_Isnil )
        {
          v5 = v4->_Right;
          if ( v5->_Isnil )
          {
            for ( i = v4->_Parent; !i->_Isnil; i = i->_Parent )
            {
              if ( v4 != i->_Right )
                break;
              v4 = i;
            }
            v4 = i;
          }
          else
          {
            v4 = v4->_Right;
            for ( j = v5->_Left; !j->_Isnil; j = j->_Left )
              v4 = j;
          }
        }
      }
      while ( v4 != v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    GambleDiceGameWin::AllReset(v2->m_pkGambleDiceGameWin);
    v8 = v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead;
    v2->m_eDiceSaiGameStatus = 0;
    v9 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >)v8->_Left;
    itr = v9;
    if ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v9 != v8 )
    {
      do
      {
        if ( *(_BYTE *)(*(_DWORD *)&v9 + 228) == 1 )
        {
          if ( *(_WORD *)(*(_DWORD *)&v9 + 12) == g_pkMainChar->m_kHandle )
          {
            MHDiceGameTask::NcGambleDiceTaisaiGameLeaveReq(v2);
            return 1;
          }
          v9 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > > *)&std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::erase(&v2->map_ParticipantInfo.baseclass_0, &result, v9)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
          itr = v9;
        }
        else
        {
          std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>_std::_Iterator_base0>::operator__(&itr.baseclass_0);
          v9 = itr;
        }
      }
      while ( (std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *)v9 != v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Myhead );
    }
    v2->m_hMobID = 8669;
    memset(pcScript, 0, 0x100u);
    TextData2::Get(0x367E5072u);
    sprintf(pcScript, "%s");
    NpcDialogWin::OpenNpcScriptDialog(v2->m_pkNpcDlgWin, v2->m_hMobID, pcScript, 0);
    PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkNpcDlgWin->baseclass_0.baseclass_0.baseclass_0);
    v2->m_nNumberOfEntrant = LOWORD(v2->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
    std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear((std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&v2->map_BettingReq);
    v2->m_fClockAlramTime = 0.0;
    v2->m_fClockCastTime = 0.0;
    v2->m_bIsResetTimer = 0;
    *(_WORD *)&v2->m_IsClockCastPlaying = 0;
    v2->m_IsBettingStartPlaying = 0;
    v2->m_bGameStartClick = 0;
    v2->m_bComeinMHOnResultStauts = 0;
    *(_WORD *)&v2->m_bPrintDiceResult[0] = 0;
    v2->m_bPrintDiceResult[2] = 0;
    v2->m_fDiceResultTime = 0.0;
    v2->m_fDiplayLightTime = 0.0;
    *(_WORD *)&v2->m_bIsNonBettingOver = 0;
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00710F80) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *pkProto)
{
  MHDiceGameTask *v2; // ebx@1
  PgFrameWork *v3; // esi@1
  unsigned __int16 v4; // ax@2
  D3DXCOLOR *v5; // eax@4
  D3DXCOLOR v6; // ST04_16@4
  char *v7; // eax@4
  char *v9; // eax@8
  char *v10; // eax@8
  MsgBox *v11; // eax@8
  char *v12; // eax@11
  unsigned int v13; // edx@12
  GambleDiceGameWin *v14; // ecx@12
  char *v15; // esi@13
  bool v16; // zf@17
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v17; // eax@19
  int v18; // edx@19
  unsigned __int16 v19; // dx@20
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v20; // eax@20
  PgWin *v21; // eax@20
  GambleDiceGameWin *v22; // eax@20
  PgWinSpr *v23; // esi@20
  PgWinSpr *v24; // edi@20
  signed int v25; // eax@20
  NiRefObjectVtbl *v26; // edx@20
  double v27; // st7@20
  void *(__thiscall *v28)(NiRefObject *, unsigned int); // eax@20
  int v29; // eax@20
  DICE_TAISAI_GAME_STATUS v30; // eax@20
  int v31; // eax@24
  int v32; // ecx@24
  int v33; // esi@24
  double v34; // st6@24
  GambleDiceGameWin *v35; // eax@24
  PgWinSpr *v36; // edi@24
  NiRefObjectVtbl *v37; // edx@24
  signed int v38; // eax@24
  NiRefObjectVtbl *v39; // edx@24
  double v40; // st7@24
  void *(__thiscall *v41)(NiRefObject *, unsigned int); // eax@24
  double v42; // st7@24
  PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *v43; // eax@24
  void *(__thiscall *v44)(NiRefObject *, unsigned int); // edx@24
  GambleDiceGameWin *v45; // eax@24
  PgWinSpr *v46; // esi@24
  PgWinSpr *v47; // edi@24
  void *(__thiscall *v48)(NiRefObject *, unsigned int); // edx@24
  double v49; // st7@24
  GambleDiceGameWin *v50; // eax@25
  int v51; // eax@25
  NiRefObjectVtbl *v52; // esi@25
  GambleDiceGameWin *v53; // eax@25
  PgWinSpr *v54; // esi@25
  void *(__thiscall *v55)(NiRefObject *, unsigned int); // edx@25
  float v56; // ecx@26
  DICE_TAISAI_GAME_STATUS v57; // eax@26
  unsigned int v58; // eax@30
  char *v59; // eax@31
  char *v60; // eax@31
  PgWinText *v61; // ecx@31
  std::pair<unsigned short,EntryInfo> _Val; // [sp+10h] [bp-1D4h]@19
  D3DXCOLOR result; // [sp+ECh] [bp-F8h]@4
  __int64 v64; // [sp+FCh] [bp-E8h]@17
  PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *i; // [sp+104h] [bp-E0h]@13
  char v66; // [sp+108h] [bp-DCh]@19
  char v67; // [sp+1DCh] [bp-8h]@19
  unsigned int v68; // [sp+1E0h] [bp-4h]@1
  int v69; // [sp+1E4h] [bp+0h]@1

  v68 = (unsigned int)&v69 ^ __security_cookie;
  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !v3 )
    return 0;
  v4 = pkProto->nError;
  if ( pkProto->nError != 9744 )
  {
    switch ( v4 )
    {
      case 0x261Bu:
        v5 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
        *(_QWORD *)&v6.r = *(_QWORD *)&v5->r;
        *(_QWORD *)&v6.b = *(_QWORD *)&v5->b;
        v7 = ErrMsgTable::GetErrMsg(pkProto->nError);
        GameFrameWork::AddAnnounceMsg((GameFrameWork *)v3, v7, COERCE_D3DXCOLOR(v6.r));
        PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v3[28].m_kMsgQ.m_uiHead);
        break;
      case 0x261Au:
        if ( !v2->m_spLowLevelWarnigWin.m_pObject )
        {
          v9 = TextData2::Get(0x236E0F79u);
          v10 = fs(v9);
          v11 = MsgBox::Modal(MSGBOX_OK, v10);
          NiPointer<PopupMenuWin>::operator_(
            (NiPointer<NiD3DDefaultShader> *)&v2->m_spLowLevelWarnigWin,
            (NiD3DDefaultShader *)v11);
          v2->m_spLowLevelWarnigWin.m_pObject->baseclass_e8.vfptr->SetMsgHooker(
            &v2->m_spLowLevelWarnigWin.m_pObject->baseclass_e8,
            &v2->baseclass_0.baseclass_8);
        }
        break;
      case 0x2617u:
      case 0x2615u:
        v12 = fs("%d");
        GameFrameWork::AddSysMsg((GameFrameWork *)v3, v12);
        break;
    }
    return 0;
  }
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::clear(&v2->map_ParticipantInfo.baseclass_0);
  std::_Tree<std::_Tmap_traits<unsigned_short_DiceTaiSaiBetting_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_DiceTaiSaiBetting>>_0>>::clear((std::_Tree<std::_Tmap_traits<NiAVObject *,World::AniObjectType,std::less<NiAVObject *>,std::allocator<std::pair<NiAVObject * const,World::AniObjectType> >,0> > *)&v2->map_BettingReq);
  v2->m_fAlphaValueOfDiceWindow = 0.0;
  v2->m_eDiceSaiGameMode = 0;
  v2->m_eDiceSaiGameStatus = pkProto->nGameStatus;
  v2->m_nLengthInOneGame = ((signed int)(1717986919 * (unsigned __int64)pkProto->nTimer >> 32) >> 2)
                         + ((unsigned int)(1717986919 * (unsigned __int64)pkProto->nTimer >> 32) >> 31);
  v2->m_nInterval = SLOWORD(pkProto->nInterval) / 10;
  v2->m_nGameCnt = pkProto->nGamerCnt;
  v2->m_nGetSystemTaxRate = pkProto->nGetSysRate;
  v13 = LODWORD(pkProto->nMaxBetMoney);
  v2->m_eBettingAmount = 0;
  v2->m_bOutReserveOnMiniHouse = 0;
  v2->m_nMaxBetMoney = v13;
  v2->m_bIsGusetStatus = 1;
  v2->m_nInvenRemainMoney = User::Coin(&g_kUser);
  v2->m_pkGambleDiceGameWin = (GambleDiceGameWin *)v3[23].baseclass_0.vfptr;
  v2->m_pkMiniGameWin = (mhMinimizeDiceGameWin *)v3[22].baseclass_0.vfptr;
  v2->m_pkDiceHelpWin = (mhDiceHelpWin *)v3[22].baseclass_0.m_pkMsgHooker;
  v2->m_pkDiceRankWin = (mhDiceRankWin *)v3[22].baseclass_0.m_uiMessageNum;
  v2->m_pkDiceRateSheetWin = (mhDiceRateSheetWin *)v3[22].m_kMsgQ.m_pBase;
  v14 = v2->m_pkGambleDiceGameWin;
  v2->m_pkNpcDlgWin = (NpcDialogWin *)v3[22].m_kMsgQ.m_uiAlloced;
  if ( !v14 )
    return 0;
  ((void (__stdcall *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlphaValueOfDiceWindow);
  ((void (__stdcall *)(_DWORD))v2->m_pkGambleDiceGameWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  GambleDiceGameWin::UpdateHistory(v2->m_pkGambleDiceGameWin, 0, 1);
  v2->m_nNumberOfEntrant = v2->m_nGameCnt;
  i = (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *)6;
  v15 = (char *)&pkProto->DiceHistory[6];
  do
  {
    if ( v15 )
      GambleDiceGameWin::UpdateHistory(v2->m_pkGambleDiceGameWin, v15, 0);
    v15 -= 3;
    i = (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *)((char *)i - 1);
  }
  while ( (signed int)i >= 0 );
  v16 = v2->m_nGameCnt == 0;
  HIDWORD(v64) = 0;
  if ( !v16 )
  {
    i = pkProto + 1;
    do
    {
      v67 = 0;
      memset(&v66, 0, 0xD0u);
      _Val.baseclass_0.first = i->nError;
      memcpy(&_Val.baseclass_0.second, &v66, sizeof(_Val.baseclass_0.second));
      v17 = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(
              &v2->map_ParticipantInfo.baseclass_0.baseclass_0,
              &_Val);
      std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(
        &v2->map_ParticipantInfo.baseclass_0,
        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *)&result.b,
        v17,
        0);
      v18 = v2->m_nGameCnt;
      i = (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *)((char *)i + 2);
      ++HIDWORD(v64);
    }
    while ( SHIDWORD(v64) < v18 );
  }
  v19 = g_pkMainChar->m_kHandle;
  v67 = 0;
  memset(&v66, 0, 0xD0u);
  _Val.baseclass_0.first = v19;
  memcpy(&_Val.baseclass_0.second, &v66, sizeof(_Val.baseclass_0.second));
  v20 = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(
          &v2->map_ParticipantInfo.baseclass_0.baseclass_0,
          &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(
    &v2->map_ParticipantInfo.baseclass_0,
    (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> *)&result.b,
    v20,
    0);
  v21 = (PgWin *)v2->m_pkGambleDiceGameWin;
  ++v2->m_nNumberOfEntrant;
  PgWinMgr::ShowWin(&Pgg_kWinMgr, v21);
  GambleDiceGameWin::SetMoneyWin(v2->m_pkGambleDiceGameWin, 0i64);
  v22 = v2->m_pkGambleDiceGameWin;
  v23 = v22->m_spTimerFill.m_pObject;
  v24 = v22->m_spTimer.m_pObject;
  v25 = ((int (__thiscall *)(PgWinSpr *))v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v23);
  v26 = v23->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v25 -= 8;
  HIDWORD(v64) = v25;
  v27 = (double)v25;
  v28 = v26[42].__vecDelDtor;
  result.g = v27;
  v29 = ((int (__thiscall *)(PgWinSpr *))v28)(v23) - 10;
  HIDWORD(v64) = v29;
  v24->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = result.g;
  result.b = (double)v29;
  v24->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = result.b;
  result.a = 1.0;
  v24->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
  ((void (__stdcall *)(signed int))v2->m_pkGambleDiceGameWin->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
  GambleDiceGameWin::OnBettingAmount(v2->m_pkGambleDiceGameWin, 0, (BETTING_LEVEL_COIN)v2->m_eBettingAmount);
  v30 = v2->m_eDiceSaiGameStatus;
  v2->m_fClockCastTime = 0.0;
  v2->m_fTimerPosOnPregress = 0.0;
  v2->m_bIsResetTimer = 0;
  *(_WORD *)&v2->m_IsClockCastPlaying = 0;
  v2->m_IsBettingStartPlaying = 0;
  v2->m_bGameStartClick = 0;
  *(_WORD *)&v2->m_bIsNonBettingOver = 0;
  if ( v30 == 1 )
  {
    HIDWORD(v64) = v2->m_nLengthInOneGame - v2->m_nInterval;
    v2->m_fClockAlramTime = (double)SHIDWORD(v64);
  }
  else
  {
    v2->m_fClockAlramTime = 0.0;
  }
  if ( v30 == 1 )
  {
    v31 = ((int (*)(void))v2->m_pkGambleDiceGameWin->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v32 = v2->m_nInterval;
    v33 = v31 - 25;
    i = (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *)v2->m_nLengthInOneGame;
    HIDWORD(v64) = v31 - 25;
    v34 = (double)(unsigned int)(v31 - 25) / (double)(signed int)i;
    v35 = v2->m_pkGambleDiceGameWin;
    v2->m_fTimerPosOnPregress = (double)(signed int)((char *)i - v32) * v34 + v2->m_fTimerPosOnPregress;
    v36 = v35->m_spTimerFill.m_pObject;
    v37 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    i = (PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_ACK *)v35->m_spTimer.m_pObject;
    v38 = ((int (__thiscall *)(PgWinSpr *))v37[41].__vecDelDtor)(v36);
    v39 = v36->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    HIDWORD(v64) = v38;
    v40 = (double)v38;
    v41 = v39[42].__vecDelDtor;
    result.g = v40 + v2->m_fTimerPosOnPregress;
    HIDWORD(v64) = ((int (__thiscall *)(PgWinSpr *))v41)(v36) - 10;
    v42 = (double)SHIDWORD(v64);
    v43 = i;
    *(_DWORD *)((char *)&i[1].nGetSysRate + 1) = LODWORD(result.g);
    result.b = v42;
    *(_DWORD *)((char *)&v43[1].nMaxBetMoney + 3) = LODWORD(result.b);
    result.a = 1.0;
    *(float *)((char *)&v43[1].nMaxBetMoney + 7) = 1.0;
    v44 = v2->m_pkGambleDiceGameWin->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor;
    v64 = (signed __int64)v2->m_fTimerPosOnPregress;
    ((void (__stdcall *)(_DWORD))v44)(v33 - v64);
    v45 = v2->m_pkGambleDiceGameWin;
    v46 = v45->m_spTimerFill.m_pObject;
    v47 = v45->m_spTimerBack.m_pObject;
    HIDWORD(v64) = ((int (__thiscall *)(PgWinSpr *))v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v45->m_spTimerFill.m_pObject);
    v48 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    result.g = (double)SHIDWORD(v64) + v2->m_fTimerPosOnPregress + 8.0;
    HIDWORD(v64) = ((int (__thiscall *)(PgWinSpr *))v48)(v46);
    v49 = (double)SHIDWORD(v64);
  }
  else
  {
    v50 = v2->m_pkGambleDiceGameWin;
    v2->m_fTimerPosOnPregress = 0.0;
    v51 = ((int (*)(void))v50->m_spTimerFill.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
    v52 = v2->m_pkGambleDiceGameWin->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v64 = (signed __int64)v2->m_fTimerPosOnPregress;
    ((void (__stdcall *)(_DWORD))v52[117].__vecDelDtor)(v51 - 7 - v64);
    v53 = v2->m_pkGambleDiceGameWin;
    v54 = v53->m_spTimerFill.m_pObject;
    v47 = v53->m_spTimerBack.m_pObject;
    HIDWORD(v64) = ((int (__thiscall *)(PgWinSpr *))v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v53->m_spTimerFill.m_pObject);
    v55 = v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
    result.g = (double)SHIDWORD(v64) + v2->m_fTimerPosOnPregress + 8.0;
    HIDWORD(v64) = ((int (__thiscall *)(PgWinSpr *))v55)(v54);
    v49 = (double)SHIDWORD(v64);
  }
  result.b = v49;
  v56 = result.b;
  v47->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x = result.g;
  result.a = 1.0;
  v47->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y = v56;
  v47->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z = 1.0;
  v57 = v2->m_eDiceSaiGameStatus;
  v2->m_bComeinMHOnResultStauts = v57 == 2 || v57 == 3;
  *(_WORD *)&v2->m_bPrintDiceResult[0] = 0;
  v2->m_bPrintDiceResult[2] = 0;
  GambleDiceGameWin::TurnOnLight(v2->m_pkGambleDiceGameWin, 1, 0, 0);
  GambleDiceGameWin::EnableBetLevelBtn(v2->m_pkGambleDiceGameWin, v2->m_nMaxBetMoney);
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceConnect);
  SoundMgr::StopBGM(&g_kSoundMgr);
  v58 = v2->m_nMaxBetMoney;
  v2->m_bIsEnterGameRoom = 1;
  v2->m_eDiceGameMode = 2;
  if ( v58 )
  {
    v59 = TextData2::Get(0x620EE2AEu);
    v60 = fs(v59);
    v61 = v2->m_pkGambleDiceGameWin->m_spTitleText.m_pObject;
    if ( v61 )
      ((void (__stdcall *)(char *))v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v60);
  }
  v2->m_hMobID = -1;
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00711770) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_GAME_JOIN_CMD *pkProto)
{
  std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> >::_Node *v3; // eax@1
  Char *v4; // edi@1
  PgFrameWork *v5; // esi@1
  char *v6; // eax@3
  char *v7; // eax@3
  D3DXCOLOR *v8; // eax@3
  D3DXCOLOR v9; // ST08_16@3
  char *v10; // eax@3
  char *v11; // eax@3
  int v12; // eax@6
  std::pair<unsigned short,EntryInfo> _Val; // [sp+Ch] [bp-1CCh]@1
  char v14; // [sp+E8h] [bp-F0h]@3
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > >,bool> result; // [sp+F0h] [bp-E8h]@1
  MHDiceGameTask *v16; // [sp+F8h] [bp-E0h]@1
  char v17; // [sp+FCh] [bp-DCh]@1
  char v18; // [sp+1D0h] [bp-8h]@1
  unsigned int v19; // [sp+1D4h] [bp-4h]@1
  int v20; // [sp+1D8h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  v18 = 0;
  memset(&v17, 0, 0xD0u);
  _Val.baseclass_0.first = pkProto->nPlayerHnd;
  memcpy(&_Val.baseclass_0.second, &v17, sizeof(_Val.baseclass_0.second));
  v2 = (std::_Tree<std::_Tmap_traits<unsigned short,EntryInfo,std::less<unsigned short>,std::allocator<std::pair<unsigned short const ,EntryInfo> >,0> > *)&this->map_ParticipantInfo;
  v16 = this;
  v3 = std::_Tree_val<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Buynode<std::pair<unsigned_short_EntryInfo>>(
         &this->map_ParticipantInfo.baseclass_0.baseclass_0,
         &_Val);
  std::_Tree<std::_Tmap_traits<unsigned_short_EntryInfo_std::less<unsigned_short>_std::allocator<std::pair<unsigned_short_const_EntryInfo>>_0>>::_Linsert(
    v2,
    &result,
    v3,
    0);
  v4 = CharMgr::GetChar(&g_kCharMgr, pkProto->nPlayerHnd);
  v5 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v5 )
  {
    if ( v4 )
    {
      ((void (__thiscall *)(Char *))v4->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v4);
      v6 = TextData2::Get(0x7F90C3D5u);
      v7 = fs(v6);
      GameFrameWork::AddSysMsg((GameFrameWork *)v5, v7);
      v8 = ColorInfoTable::GetDxColor((D3DXCOLOR *)&v14, Center_Announcement);
      *(_QWORD *)&v9.r = *(_QWORD *)&v8->r;
      *(_QWORD *)&v9.b = *(_QWORD *)&v8->b;
      v10 = TextData2::Get(0x7F90C3D5u);
      v11 = fs(v10);
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v5, v11, COERCE_D3DXCOLOR(v9.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v5[28].m_kMsgQ.m_uiHead);
    }
    if ( !v16->m_eDiceSaiGameStatus )
      v16->m_nNumberOfEntrant = LOWORD(v16->map_ParticipantInfo.baseclass_0.baseclass_0.baseclass_0._Mysize);
    v12 = 1;
  }
  else
  {
    v12 = 0;
  }
  return v12;
}
// A85C00: using guessed type int __security_cookie;

//----- (007118E0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  mhDiceRankWin *v3; // ecx@6

  v2 = this;
  if ( pkProto->nError == 9872 && this->m_pkGambleDiceGameWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v2->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    v3 = v2->m_pkDiceRankWin;
    if ( v3->m_nCurSelTab != 1 )
      mhDiceRankWin::OnTAB1(v3);
    mhDiceRankWin::UpdateAllRankList(v2->m_pkDiceRankWin, pkProto);
    mhDiceRankWin::UpdateViewList(v2->m_pkDiceRankWin);
  }
  return 1;
}

//----- (00711960) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  mhDiceRankWin *v3; // ecx@6

  v2 = this;
  if ( pkProto->nError == 9888 && this->m_pkGambleDiceGameWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v2->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkDiceRankWin->baseclass_0.baseclass_0.baseclass_0);
    v3 = v2->m_pkDiceRankWin;
    if ( v3->m_nCurSelTab == 1 )
      mhDiceRankWin::OnTAB2(v3);
    mhDiceRankWin::UpdateCurRankList(v2->m_pkDiceRankWin, pkProto);
    mhDiceRankWin::UpdateViewList(v2->m_pkDiceRankWin);
  }
  return 1;
}

//----- (007119E0) --------------------------------------------------------
void __thiscall mhDiceRankWin::OnTAB1(mhDiceRankWin *this)
{
  mhDiceRankWin *v1; // esi@1

  v1 = this;
  this->m_pkTab01->m_bCheck = 1;
  this->m_pkTab02->m_bCheck = 0;
  ((void (__stdcall *)(_DWORD))this->m_pkTab02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
  v1->m_nCurSelTab = 1;
  mhDiceRankWin::UpdateViewList(v1);
}

//----- (00711A30) --------------------------------------------------------
void __thiscall mhDiceRankWin::OnTAB2(mhDiceRankWin *this)
{
  mhDiceRankWin *v1; // esi@1

  v1 = this;
  this->m_pkTab01->m_bCheck = 0;
  ((void (__stdcall *)(_DWORD))this->m_pkTab01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
  v1->m_pkTab02->m_bCheck = 1;
  v1->m_nCurSelTab = 2;
  mhDiceRankWin::UpdateViewList(v1);
}

//----- (00711A80) --------------------------------------------------------
void __thiscall mhDiceRankWin::UpdateAllRankList(mhDiceRankWin *this, PROTO_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK *pkProto)
{
  DiceRankInfo *v2; // eax@2
  char *v3; // edi@2
  DiceRankInfo *v4; // ecx@2
  signed int v5; // edi@4
  PROTO_NC_GAMBLE_DICE_TAISAI_ALL_RANK_ACK *v6; // esi@5
  unsigned int v7; // ecx@6
  unsigned int v8; // edx@6
  unsigned int v9; // ebx@6
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *thisa; // [sp+4h] [bp-24h]@2
  DiceRankInfo kInfo; // [sp+Ch] [bp-1Ch]@6
  unsigned int v12; // [sp+24h] [bp-4h]@1
  int v13; // [sp+28h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  if ( pkProto )
  {
    v2 = this->m_CarrerRankList.baseclass_0._Mylast;
    v3 = (char *)&this->m_CarrerRankList;
    v4 = *(DiceRankInfo **)&this->m_CarrerRankList.baseclass_0.___u0.baseclass_0.dummy[0];
    thisa = (std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *)v3;
    if ( v4 != v2 )
      *((_DWORD *)v3 + 1) = std::_Move<DiceRankInfo___DiceRankInfo__>(
                              v2,
                              v2,
                              v4,
                              (std::_Nonscalar_ptr_iterator_tag)pkProto);
    v5 = 0;
    if ( pkProto->nRankAllCnt )
    {
      v6 = pkProto + 1;
      do
      {
        v7 = *(_DWORD *)((char *)&v6[1].nError + 1);
        v8 = *(_DWORD *)&v6[2].nRankAllCnt;
        v9 = *(_DWORD *)&v6[6].nRankAllCnt;
        *(_DWORD *)&kInfo.sCharID.n5_name[0] = *(_DWORD *)&v6->nError;
        *(_QWORD *)&kInfo.sCharID.n5_name[12] = *(_QWORD *)&v6[4].nError;
        *(_QWORD *)&kInfo.sCharID.n5_name[4] = __PAIR__(v8, v7);
        kInfo.nWinCnt = v9;
        std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(thisa, &kInfo);
        ++v5;
        v6 += 8;
      }
      while ( v5 < pkProto->nRankAllCnt );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00711B30) --------------------------------------------------------
void __thiscall mhDiceRankWin::UpdateCurRankList(mhDiceRankWin *this, PROTO_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK *pkProto)
{
  DiceRankInfo *v2; // eax@2
  char *v3; // edi@2
  DiceRankInfo *v4; // ecx@2
  signed int v5; // edi@4
  PROTO_NC_GAMBLE_DICE_TAISAI_CURR_RANK_ACK *v6; // esi@5
  unsigned int v7; // ecx@6
  unsigned int v8; // edx@6
  unsigned int v9; // ebx@6
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *thisa; // [sp+4h] [bp-24h]@2
  DiceRankInfo kInfo; // [sp+Ch] [bp-1Ch]@6
  unsigned int v12; // [sp+24h] [bp-4h]@1
  int v13; // [sp+28h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  if ( pkProto )
  {
    v2 = this->m_CurRankList.baseclass_0._Mylast;
    v3 = (char *)&this->m_CurRankList;
    v4 = *(DiceRankInfo **)&this->m_CurRankList.baseclass_0.___u0.baseclass_0.dummy[0];
    thisa = (std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *)v3;
    if ( v4 != v2 )
      *((_DWORD *)v3 + 1) = std::_Move<DiceRankInfo___DiceRankInfo__>(
                              v2,
                              v2,
                              v4,
                              (std::_Nonscalar_ptr_iterator_tag)pkProto);
    v5 = 0;
    if ( pkProto->nRankCurrCnt )
    {
      v6 = pkProto + 1;
      do
      {
        v7 = *(_DWORD *)((char *)&v6[1].nError + 1);
        v8 = *(_DWORD *)&v6[2].nRankCurrCnt;
        v9 = *(_DWORD *)&v6[6].nRankCurrCnt;
        *(_DWORD *)&kInfo.sCharID.n5_name[0] = *(_DWORD *)&v6->nError;
        *(_QWORD *)&kInfo.sCharID.n5_name[12] = *(_QWORD *)&v6[4].nError;
        *(_QWORD *)&kInfo.sCharID.n5_name[4] = __PAIR__(v8, v7);
        kInfo.nWinCnt = v9;
        std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(thisa, &kInfo);
        ++v5;
        v6 += 8;
      }
      while ( v5 < pkProto->nRankCurrCnt );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00711BF0) --------------------------------------------------------
void __thiscall BettingBut::_BettingBut(BettingBut *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BettingBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BettingBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9D5ED8: using guessed type int (__stdcall *BettingBut___vftable_)(int uiFlags);
// 9D5EF4: using guessed type int (__thiscall *BettingBut___vftable_)(void *p, char);

//----- (00711C10) --------------------------------------------------------
void __thiscall BettingBut::SwitchSpr(BettingBut *this, float fDelta)
{
  BettingBut *v2; // esi@1

  v2 = this;
  if ( this->m_fAlphaOfButton <= 0.1000000014901161 )
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(this->m_uiNextSprIdx);
    v2->m_bIsSwitched = 1;
  }
  else
  {
    this->m_fAlphaOfButton = this->m_fAlphaOfButton - fDelta;
  }
  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v2,
    COERCE_UNSIGNED_INT(v2->m_fAlphaOfButton));
}

//----- (00711C70) --------------------------------------------------------
void __thiscall ToggleBut::ToggleBut(ToggleBut *this)
{
  ToggleBut *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ToggleBut::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ToggleBut::_vftable_;
}
// 9D6130: using guessed type int (__stdcall *ToggleBut___vftable_)(int uiFlags);
// 9D614C: using guessed type int (__thiscall *ToggleBut___vftable_)(void *p, char);

//----- (00711C90) --------------------------------------------------------
void __thiscall ToggleBut::_ToggleBut(ToggleBut *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ToggleBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ToggleBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
}
// 9D6130: using guessed type int (__stdcall *ToggleBut___vftable_)(int uiFlags);
// 9D614C: using guessed type int (__thiscall *ToggleBut___vftable_)(void *p, char);

//----- (00711CB0) --------------------------------------------------------
void __thiscall ToggleBut::ReleaseMeInput(ToggleBut *this)
{
  ToggleBut *v1; // esi@1
  signed int v2; // [sp-4h] [bp-8h]@3

  v1 = this;
  if ( this->baseclass_0.m_bClickCheck )
    goto LABEL_7;
  if ( this->baseclass_0.m_bHadBeenPushed )
    v2 = 2;
  else
    v2 = 0;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor)(v2);
  if ( v1->m_bHighlight )
  {
    this = v1;
LABEL_7:
    v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)this,
      1u);
  }
}

//----- (00711CF0) --------------------------------------------------------
void __thiscall ToggleBut::SetMark(ToggleBut *this, bool bMark)
{
  ToggleBut *v2; // esi@1
  NiRefObjectVtbl *v3; // edx@1
  void *(__thiscall *v4)(NiRefObject *, unsigned int); // eax@2

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  this->m_bHighlight = bMark;
  if ( (unsigned __int8)((int (*)(void))v3[78].__vecDelDtor)() )
  {
    v4 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor;
    if ( v2->m_bHighlight )
      v4(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 1u);
    else
      v4(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0);
  }
}

//----- (00711D40) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::SetMoneyWin(MiniHouseDiceGameWin *this, unsigned int nPlayerMoney)
{
  this->m_nUserBettingMoney = nPlayerMoney;
}

//----- (00711D50) --------------------------------------------------------
void __thiscall mhMinimizeDiceGameWin::mhMinimizeDiceGameWin(mhMinimizeDiceGameWin *this)
{
  mhMinimizeDiceGameWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMinimizeDiceGameWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMinimizeDiceGameWin::_vftable_;
  v1->m_bAutoOnOff = 0;
}
// 9D6384: using guessed type int (__stdcall *mhMinimizeDiceGameWin___vftable_)(int uiFlags);
// 9D63A4: using guessed type int (__thiscall *mhMinimizeDiceGameWin___vftable_)(void *p, char);

//----- (00711D80) --------------------------------------------------------
void __thiscall mhMinimizeDiceGameWin::_mhMinimizeDiceGameWin(mhMinimizeDiceGameWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMinimizeDiceGameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMinimizeDiceGameWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D6384: using guessed type int (__stdcall *mhMinimizeDiceGameWin___vftable_)(int uiFlags);
// 9D63A4: using guessed type int (__thiscall *mhMinimizeDiceGameWin___vftable_)(void *p, char);

//----- (00711DA0) --------------------------------------------------------
void __thiscall mhDiceHelpWin::mhDiceHelpWin(mhDiceHelpWin *this)
{
  mhDiceHelpWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceHelpWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceHelpWin::_vftable_;
}
// 9D65C8: using guessed type int (__stdcall *mhDiceHelpWin___vftable_)(int uiFlags);
// 9D65E4: using guessed type int (__thiscall *mhDiceHelpWin___vftable_)(void *p, char);

//----- (00711DC0) --------------------------------------------------------
void __thiscall mhDiceHelpWin::_mhDiceHelpWin(mhDiceHelpWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceHelpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceHelpWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D65C8: using guessed type int (__stdcall *mhDiceHelpWin___vftable_)(int uiFlags);
// 9D65E4: using guessed type int (__thiscall *mhDiceHelpWin___vftable_)(void *p, char);

//----- (00711DE0) --------------------------------------------------------
void __thiscall mhDiceHelpWin::UpdateMeWin(mhDiceHelpWin *this, float fCurTime)
{
  mhDiceHelpWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWin, v2->m_pSlideBar);
}

//----- (00711E10) --------------------------------------------------------
void __thiscall mhDiceRankWin::DirectMessage(mhDiceRankWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  mhDiceRankWin *v4; // esi@1
  SlideListWin *v5; // ecx@1

  v4 = this;
  v5 = (SlideListWin *)this->m_pkSprRankGold[6];
  if ( v5 )
    v4->m_pkSprRankGold[7] = (PgWinSpr *)SlideListWin::GetCurSelIndex(v5);
}

//----- (00711E60) --------------------------------------------------------
void __thiscall mhDiceRateSheetWin::mhDiceRateSheetWin(mhDiceRateSheetWin *this)
{
  mhDiceRateSheetWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceRateSheetWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceRateSheetWin::_vftable_;
}
// 9D6808: using guessed type int (__stdcall *mhDiceRateSheetWin___vftable_)(int uiFlags);
// 9D6824: using guessed type int (__thiscall *mhDiceRateSheetWin___vftable_)(void *p, char);

//----- (00711E80) --------------------------------------------------------
void __thiscall mhDiceRateSheetWin::_mhDiceRateSheetWin(mhDiceRateSheetWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceRateSheetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceRateSheetWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D6808: using guessed type int (__stdcall *mhDiceRateSheetWin___vftable_)(int uiFlags);
// 9D6824: using guessed type int (__thiscall *mhDiceRateSheetWin___vftable_)(void *p, char);

//----- (00711EA0) --------------------------------------------------------
void __thiscall GambleDiceGameWin::SetMoneyWin(GambleDiceGameWin *this, __int64 nPlayerMoney)
{
  this->m_nUserBettingMoney = nPlayerMoney;
}

//----- (00711EC0) --------------------------------------------------------
void __thiscall BettingBut::BettingBut(BettingBut *this)
{
  BettingBut *v1; // esi@1

  v1 = this;
  PgWinBut::PgWinBut(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BettingBut::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BettingBut::_vftable_;
  v1->m_kTimer.m_fStartTime = 0.0;
  v1->m_kTimer.m_fObjectTime = 0.0;
  v1->m_kTimer.m_fElapsedTime = 0.0;
  v1->m_Pos = 0;
}
// 9D5ED8: using guessed type int (__stdcall *BettingBut___vftable_)(int uiFlags);
// 9D5EF4: using guessed type int (__thiscall *BettingBut___vftable_)(void *p, char);

//----- (00711F00) --------------------------------------------------------
void __thiscall ToggleBut::ProcessMeInput(ToggleBut *this, bool *bHit)
{
  ToggleBut *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@22
  ToggleBut *v4; // ecx@22
  signed int v5; // [sp-Ch] [bp-10h]@24
  signed int v6; // [sp-Ch] [bp-10h]@26

  v2 = this;
  if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
    return;
  if ( dword_B70350 )
    ++dword_B70350;
  if ( dword_B7035C )
    ++dword_B7035C;
  PgWin::ProcessMeInput(&v2->baseclass_0.baseclass_0.baseclass_0, bHit);
  byte_B7034C = 0;
  byte_B70358 = 0;
  if ( dword_B70350 >= 1 && *bHit )
  {
    if ( v2->baseclass_0.m_eType )
    {
      PgWin::ms_pkCapture = (PgWin *)v2;
      v2->baseclass_0.m_bHadBeenPushed = 1;
      byte_B7034C = 1;
    }
    else
    {
      ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)(v2);
      if ( v2->baseclass_0.m_bEnableClickSound )
        PgExternalLib::ClickSound();
      v2->baseclass_0.m_bHadBeenPushed = 0;
      byte_B7034C = 1;
    }
  }
  else
  {
    if ( dword_B7035C >= 1 )
    {
      v2->baseclass_0.m_bHadBeenPushed = 0;
      if ( (ToggleBut *)PgWin::ms_pkCapture == v2 )
      {
        PgWin::ms_pkCapture = 0;
        byte_B70358 = 1;
      }
      if ( *bHit )
      {
        if ( v2->baseclass_0.m_eType == 1 )
        {
          ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[132].__vecDelDtor)(v2);
          if ( v2->baseclass_0.m_bEnableClickSound )
            PgExternalLib::ClickSound();
        }
        byte_B70358 = 1;
      }
    }
  }
  if ( v2->baseclass_0.m_bClickCheck )
  {
LABEL_29:
    v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor;
    v4 = v2;
    goto LABEL_30;
  }
  v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor;
  v4 = v2;
  if ( !*bHit )
  {
    if ( v2->baseclass_0.m_bHadBeenPushed )
      v6 = 2;
    else
      v6 = 0;
    v3(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v6);
    if ( !v2->m_bHighlight )
      goto LABEL_32;
    goto LABEL_29;
  }
  if ( v2->baseclass_0.m_bHadBeenPushed )
  {
LABEL_30:
    v5 = 1;
    goto LABEL_31;
  }
  v5 = 2;
LABEL_31:
  v3(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, v5);
LABEL_32:
  if ( byte_B7034C && dword_B70350 )
    --dword_B70350;
  byte_B7034C = 0;
  if ( byte_B70358 && dword_B7035C )
    --dword_B7035C;
  byte_B70358 = 0;
  if ( dword_B70350 )
    --dword_B70350;
  if ( dword_B7035C )
    --dword_B7035C;
}
// B7034C: using guessed type char byte_B7034C;
// B70350: using guessed type int dword_B70350;
// B70358: using guessed type char byte_B70358;
// B7035C: using guessed type int dword_B7035C;

//----- (007120A0) --------------------------------------------------------
void __thiscall ToggleBut::SetButShow(ToggleBut *this, PgWinBut::ButShow eShow)
{
  ToggleBut *v2; // esi@1
  void *(__thiscall *v3)(NiRefObject *, unsigned int); // edx@4
  ToggleBut *v4; // ecx@4

  v2 = this;
  if ( this->baseclass_0.m_eButShow != eShow )
  {
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[139].__vecDelDtor)(eShow);
    v2->baseclass_0.m_eButShow = eShow;
    switch ( eShow )
    {
      case 0:
        goto LABEL_3;
      case 1:
        v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
        v4 = v2;
        if ( v2->baseclass_0.m_uiButNum <= 1 )
          goto LABEL_5;
        v3(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 1u);
        break;
      case 2:
        v3 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
        v4 = v2;
        if ( v2->baseclass_0.m_uiButNum <= 2 )
LABEL_5:
          v3(&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0);
        else
          v3(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 2u);
        break;
      case 3:
        if ( v2->baseclass_0.m_uiButNum <= 3 )
LABEL_3:
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
            (NiRefObject *)v2,
            0);
        else
          v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
            (NiRefObject *)v2,
            3u);
        break;
      default:
        return;
    }
  }
}

//----- (00712160) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::OnBettingButton(MiniHouseDiceGameWin *this, unsigned int uiMsgCmd, bool IsLeftBtn)
{
  DICE_TAISAI_GAME_STATUS v3; // esi@1
  MHDiceGameTask *v4; // edi@2
  int v5; // esi@8
  MHDiceGameTask *v6; // ecx@12
  int v7; // esi@13
  MHDiceGameTask *v8; // ecx@18
  int v9; // esi@19
  int v10; // [sp+0h] [bp-14h]@18
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@12

  v3 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eDiceSaiGameStatus;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !IsLeftBtn || v3 && v3 != 1 )
  {
    if ( !v3 || v3 == 1 )
    {
      v8 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject;
      v12 = 1;
      MHDiceGameTask::OnBettingCancel(v8, (DICE_TAISAI_BETTING)uiMsgCmd);
      v12 = -1;
      if ( v10 )
      {
        v9 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
    }
  }
  else
  {
    MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&IsLeftBtn);
    v5 = IsLeftBtn;
    if ( IsLeftBtn && !InterlockedDecrement((volatile LONG *)(IsLeftBtn + 4)) && v5 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v6 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&IsLeftBtn)->m_pObject;
    v12 = 0;
    MHDiceGameTask::OnBetting(v6, (DICE_TAISAI_BETTING)uiMsgCmd);
    v12 = -1;
    if ( IsLeftBtn )
    {
      v7 = IsLeftBtn;
      if ( !InterlockedDecrement((volatile LONG *)(IsLeftBtn + 4)) )
      {
        if ( v7 )
          (**(void (__cdecl ***)(_DWORD))v7)(1);
      }
    }
  }
}

//----- (007122D0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::OnBettingAmout(MiniHouseDiceGameWin *this, unsigned int uiButton, BETTING_LEVEL_MONEY amount)
{
  MiniHouseDiceGameWin *v3; // ebx@1
  ToggleBut *v4; // esi@1
  bool v5; // zf@1
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@2
  signed int v7; // edi@7
  int v8; // ebx@7
  int v9; // esi@10
  int (__thiscall *v10)(_DWORD); // eax@10
  int v11; // ecx@10
  MHDiceGameTask *v12; // esi@16
  signed int v13; // [sp-8h] [bp-14h]@12
  signed int v14; // [sp-4h] [bp-10h]@4
  NiPointer<MHDiceGameTask> result; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = this->m_pkChipSelectBut[amount].m_pObject;
  v5 = v4->m_bHighlight == 0;
  result.m_pObject = (MHDiceGameTask *)this;
  if ( !v5 )
  {
    v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor;
    v4->m_bHighlight = 0;
    if ( (unsigned __int8)((int (__thiscall *)(ToggleBut *))v6)(v4) )
    {
      if ( v4->m_bHighlight )
        v14 = 1;
      else
        v14 = 0;
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
        (NiRefObject *)v4,
        v14);
    }
    v7 = 0;
    v8 = (int)v3->m_pkChipSelectBut;
    do
    {
      if ( v7 != amount )
      {
        if ( (unsigned __int8)(*(int (**)(void))(**((_DWORD **)&result.m_pObject->m_DiceTaiSai.m_Dice[69].isTriple
                                                  + amount)
                                               + 244))() )
        {
          v9 = *(_DWORD *)v8;
          v10 = *(int (__thiscall **)(_DWORD))(**(_DWORD **)v8 + 312);
          v11 = *(_DWORD *)v8;
          *(_BYTE *)(*(_DWORD *)v8 + 324) = 1;
          if ( (unsigned __int8)v10(v11) )
          {
            if ( *(_BYTE *)(v9 + 324) )
              v13 = 1;
            else
              v13 = 0;
            (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 552))(v9, v13);
          }
        }
      }
      ++v7;
      v8 += 4;
    }
    while ( v7 < 6 );
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Dice_CoinClick);
    MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eBettingAmount = amount;
    v12 = result.m_pObject;
    if ( result.m_pObject
      && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v12 )
        v12->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    }
  }
}

//----- (007123E0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::OnMinimalize(MiniHouseDiceGameWin *this)
{
  MHDiceGameTask *v1; // ecx@1
  MHDiceGameTask *v2; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v1 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v4 = 0;
  MHDiceGameTask::OpenDiceWin(v1);
  v4 = -1;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
}

//----- (00712460) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::OnClickRanking(MiniHouseDiceGameWin *this)
{
  MHDiceGameTask *v1; // ecx@1
  MHDiceGameTask *v2; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v1 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v4 = 0;
  MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_REQ(v1, 0);
  v4 = -1;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
}

//----- (007124E0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::OnVisibleChip(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsShow, int chipLevel, bool bPlaySound)
{
  MiniHouseDiceGameWin *v5; // esi@1

  v5 = this;
  if ( IsShow )
  {
    ((void (__stdcall *)(_DWORD))this->m_spChips[index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v5->m_spChips[index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(chipLevel);
    if ( bPlaySound )
    {
      if ( chipLevel <= 3 )
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceChipsPiledUp_Single);
      else
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceChipsPiledUp_Pair);
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD))this->m_spChips[index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00712560) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::TurnOnLight(MiniHouseDiceGameWin *this, bool bIsAll, bool bOnlyNext, bool bTwinkle)
{
  MiniHouseDiceGameWin *v4; // edi@1
  int v5; // esi@5
  signed int v6; // ebx@5
  char *v7; // esi@8
  signed int v8; // ebx@8
  int v9; // esi@10
  int v10; // eax@12
  signed int v11; // ecx@12
  signed int v12; // ebx@17

  v4 = this;
  if ( bTwinkle )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_spLightSpr[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      bTwinkle = 0;
      bIsAll = 1;
    }
    else
    {
      bTwinkle = 1;
      bIsAll = 0;
    }
    v5 = (int)&v4->m_spLightSpr[1];
    v6 = 16;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 - 4) + 256))(bTwinkle);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(bIsAll);
      v5 += 8;
      --v6;
    }
    while ( v6 );
    *(_DWORD *)&v4->m_uiOnLightIdx[0] = 983047;
    *(_DWORD *)&v4->m_uiOnLightIdx[2] = 2031639;
  }
  else
  {
    v7 = (char *)this->m_spLightSpr;
    v8 = 32;
    if ( bIsAll )
    {
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(1);
        v7 += 4;
        --v8;
      }
      while ( v8 );
      v9 = (int)v4->m_uiOnLightIdx;
      v4->m_uiOnLightIdx[0] = 7;
      *(_DWORD *)&v4->m_uiOnLightIdx[1] = 1507343;
      v4->m_uiOnLightIdx[3] = 31;
    }
    else
    {
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0);
        v7 += 4;
        --v8;
      }
      while ( v8 );
      v9 = (int)v4->m_uiOnLightIdx;
      v10 = (int)v4->m_uiOnLightIdx;
      v11 = 4;
      do
      {
        if ( *(_WORD *)v10 >= 0x20u )
          *(_WORD *)v10 = 0;
        v10 += 2;
        --v11;
      }
      while ( v11 );
    }
    if ( bOnlyNext )
    {
      v12 = 4;
      do
      {
        ((void (__stdcall *)(_DWORD))v4->m_spLightSpr[(*(_WORD *)v9)++].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        if ( *(_WORD *)v9 >= 0x20u )
          *(_WORD *)v9 = 0;
        ((void (__stdcall *)(_DWORD))v4->m_spLightSpr[*(_WORD *)v9].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v9 += 2;
        --v12;
      }
      while ( v12 );
    }
  }
}

//----- (007126C0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::GameStartEff(MiniHouseDiceGameWin *this)
{
  MiniHouseDiceGameWin *v1; // esi@1
  DICE_TAISAI_GAME_STATUS v2; // ebx@2
  MHDiceGameTask *v3; // edi@3
  NiNode *v4; // eax@8
  float v5; // ST14_4@8
  NiPointer<MHDiceGameTask> result; // [sp+20h] [bp-4h]@2

  v1 = this;
  if ( this->m_pStartEffect.m_pObject )
  {
    v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eDiceSaiGameStatus;
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    if ( !v2 || v2 == 1 )
    {
      result.m_pObject = (MHDiceGameTask *)(PgWin::ms_uiScreenWidth >> 1);
      v4 = v1->m_pStartEffect.m_pObject;
      v5 = (double)(PgWin::ms_uiScreenWidth >> 1);
      v4->baseclass_0.m_kLocal.m_Translate.x = v5;
      v4->baseclass_0.m_kLocal.m_Translate.y = -500.0;
      v4->baseclass_0.m_kLocal.m_Translate.z = 0.0;
      v1->m_pStartEffect.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
      PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &v1->m_pStartEffect.m_pObject->baseclass_0);
      ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->StopAllSound)();
      ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceBettingLogo);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (007127C0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::EnableBetLevelBtn(MiniHouseDiceGameWin *this, unsigned int money)
{
  MiniHouseDiceGameWin *v2; // ebx@1
  char *v3; // esi@1
  signed int v4; // edi@1

  v2 = this;
  v3 = (char *)this->m_pkChipSelectBut;
  v4 = 6;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(1);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( money < 0xF4240 )
    ((void (__stdcall *)(_DWORD))v2->m_pkChipSelectBut[4].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( money < 0x186A0 )
    ((void (__stdcall *)(_DWORD))v2->m_pkChipSelectBut[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( money < 0x2710 )
    ((void (__stdcall *)(_DWORD))v2->m_pkChipSelectBut[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
}

//----- (00712840) --------------------------------------------------------
void __thiscall mhMinimizeDiceGameWin::OnCommand(mhMinimizeDiceGameWin *this, unsigned int wParam, int lParam)
{
  MHDiceGameTask **v3; // eax@2
  unsigned int v4; // esi@3

  if ( !wParam )
  {
    v3 = (MHDiceGameTask **)MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam);
    MHDiceGameTask::OpenDiceWin(*v3);
    if ( wParam )
    {
      v4 = wParam;
      if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
      {
        if ( v4 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      }
    }
  }
}

//----- (007128D0) --------------------------------------------------------
void __thiscall mhMinimizeDiceGameWin::UpdateMeWin(mhMinimizeDiceGameWin *this, float fCurTime)
{
  MHDiceGameTask *v2; // edi@1
  MHDiceGameTask *v3; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-4h]@1

  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  if ( v2 )
    MHDiceGameTask::UpdateDiceTaisaiGame(v2, fCurTime);
}

//----- (00712930) --------------------------------------------------------
void __thiscall mhDiceHelpWin::CloseWin(mhDiceHelpWin *this)
{
  PgWin *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  MHDiceGameTask *v3; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v5; // [sp+Ch] [bp-4h]@1

  v1 = (PgWin *)this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v5 = 0;
  MHDiceGameTask::OnCloseWin(v2, v1);
  v5 = -1;
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
}

//----- (007129B0) --------------------------------------------------------
void __thiscall mhDiceHelpWin::OnSlideBar(mhDiceHelpWin *this)
{
  mhDiceHelpWin *v1; // esi@1
  SlideBar *v2; // ecx@1

  v1 = this;
  v2 = this->m_pSlideBar;
  if ( v2 )
  {
    SlideBar::SetSplitCnt(v2, v1->m_pListWin->m_nSlideSplitCnt);
    v1->m_pListWin->m_nViewStartPos = v1->m_pSlideBar->m_nCurPos;
    SlideListWin::UpdateViewList(v1->m_pListWin);
  }
}

//----- (00712A00) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::MHDiceRewardMoneyWin(MHDiceRewardMoneyWin *this)
{
  MHDiceRewardMoneyWin *v1; // esi@1
  PgWinText *v2; // edi@1
  PgWinText *v3; // edi@6
  PgWinBut *v4; // edi@11

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MHDiceRewardMoneyWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MHDiceRewardMoneyWin::_vftable_;
  v1->m_pkCopperText.m_pObject = 0;
  v1->m_pkSilverText.m_pObject = 0;
  v1->m_pkGoldText.m_pObject = 0;
  v1->m_pkGemText.m_pObject = 0;
  v1->m_pkTitleText1.m_pObject = 0;
  v1->m_pkTitleText2.m_pObject = 0;
  v1->m_pkOkBut.m_pObject = 0;
  v2 = v1->m_pkTitleText1.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->m_pkTitleText1.m_pObject = 0;
  }
  v3 = v1->m_pkTitleText2.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v3,
        1u);
    v1->m_pkTitleText2.m_pObject = 0;
  }
  v4 = v1->m_pkOkBut.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v4,
        1u);
    v1->m_pkOkBut.m_pObject = 0;
  }
  v1->m_IsRewardWin = 1;
}
// 9D6A5C: using guessed type int (__stdcall *MHDiceRewardMoneyWin___vftable_)(int uiFlags);
// 9D6A7C: using guessed type int (__thiscall *MHDiceRewardMoneyWin___vftable_)(void *p, char);

//----- (00712B20) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::_MHDiceRewardMoneyWin(MHDiceRewardMoneyWin *this)
{
  MHDiceRewardMoneyWin *v1; // esi@1
  PgWinBut *v2; // edi@1
  PgWinText *v3; // edi@5
  PgWinText *v4; // edi@9
  PgWinText *v5; // edi@13
  PgWinText *v6; // edi@17
  PgWinText *v7; // edi@21
  PgWinText *v8; // edi@25

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MHDiceRewardMoneyWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MHDiceRewardMoneyWin::_vftable_;
  v2 = this->m_pkOkBut.m_pObject;
  if ( v2
    && !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v2 )
    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v2,
      1u);
  v3 = v1->m_pkTitleText2.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v3,
      1u);
  v4 = v1->m_pkTitleText1.m_pObject;
  if ( v4
    && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v4 )
    v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v4,
      1u);
  v5 = v1->m_pkGemText.m_pObject;
  if ( v5
    && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v5 )
    v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v5,
      1u);
  v6 = v1->m_pkGoldText.m_pObject;
  if ( v6
    && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v6 )
    v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v6,
      1u);
  v7 = v1->m_pkSilverText.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v7,
      1u);
  v8 = v1->m_pkCopperText.m_pObject;
  if ( v8
    && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v8,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D6A5C: using guessed type int (__stdcall *MHDiceRewardMoneyWin___vftable_)(int uiFlags);
// 9D6A7C: using guessed type int (__thiscall *MHDiceRewardMoneyWin___vftable_)(void *p, char);

//----- (00712C90) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::OnCmdOk(MHDiceRewardMoneyWin *this)
{
  MHDiceGameTask *v1; // ecx@1
  MHDiceGameTask *v2; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-14h]@1
  PROTO_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_REQ data; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  data.nInvenSlot.Inven = this->m_nInvenSlot.Inven;
  v1 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v5 = 0;
  MHDiceGameTask::Recv_NC_DICE_TAISAI_RECEIPT_INCOME_MONEY_REQ(v1, &data);
  v5 = -1;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
}

//----- (00712D20) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::SetTitle1(MHDiceRewardMoneyWin *this, char *pcTitle)
{
  PgWinText *v2; // ecx@1

  v2 = this->m_pkTitleText1.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcTitle);
}

//----- (00712D40) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::SetTitle2(MHDiceRewardMoneyWin *this, char *pcTitle)
{
  PgWinText *v2; // ecx@1

  v2 = this->m_pkTitleText2.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcTitle);
}

//----- (00712D60) --------------------------------------------------------
void __thiscall mhDiceRateSheetWin::OnCommand(mhDiceRateSheetWin *this, unsigned int wParam, int lParam)
{
  PgWin *v3; // esi@1
  MHDiceGameTask *v4; // ecx@3
  unsigned int v5; // esi@4
  MHDiceGameTask *v6; // ecx@7
  MHDiceGameTask *v7; // esi@8
  LONG v8; // eax@8
  MHDiceGameTask *v9; // ecx@9
  int v10; // [sp+0h] [bp-14h]@9
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@7
  int v12; // [sp+10h] [bp-4h]@3

  v3 = (PgWin *)this;
  if ( !wParam )
  {
    v9 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject;
    v12 = 0;
    MHDiceGameTask::OnCloseWin(v9, v3);
    v12 = -1;
    if ( !v10 )
      return;
    v7 = (MHDiceGameTask *)v10;
    v8 = InterlockedDecrement((volatile LONG *)(v10 + 4));
    goto LABEL_11;
  }
  if ( wParam == 1 )
  {
    v4 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam)->m_pObject;
    MHDiceGameTask::OnCloseWin(v4, v3);
    v12 = -1;
    if ( wParam )
    {
      v5 = wParam;
      if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
      {
        if ( v5 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
      }
    }
    v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    v12 = 2;
    MHDiceGameTask::OpenHelpWin(v6);
    v12 = -1;
    if ( result.m_pObject )
    {
      v7 = result.m_pObject;
      v8 = InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount);
LABEL_11:
      if ( !v8 )
      {
        if ( v7 )
          v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
      }
      return;
    }
  }
}

//----- (00712E80) --------------------------------------------------------
int __thiscall MHDiceAniActor::SetAct(MHDiceAniActor *this, MHDiceAniActor::DICE_ANIIDX AniIndex, NiActorManager *ActorMgr)
{
  MHDiceAniActor *v3; // esi@1
  int result; // eax@2

  v3 = this;
  if ( ActorMgr )
  {
    this->m_uiAniSeqID = AniIndex + this->m_AniSeqIDOffset;
    NiActorManager::Reset(ActorMgr);
    NiActorManager::Update(ActorMgr, 0.0);
    result = NiActorManager::SetTargetAnimation(ActorMgr, v3->m_uiAniSeqID) != 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00712EE0) --------------------------------------------------------
int __thiscall MHDiceAniActor::SetAction(MHDiceAniActor *this, MHDiceAniActor::DICE_ANIIDX AniIndex, NiActorManager *ActorMgr, float fTime)
{
  NiActorManager *v4; // edi@1
  MHDiceAniActor *v5; // esi@1
  unsigned __int16 v6; // ax@2
  NiActorManager *v7; // ecx@2
  int result; // eax@3
  NiControllerSequence *v9; // ecx@5

  v4 = ActorMgr;
  v5 = this;
  if ( ActorMgr
    && (v6 = AniIndex + this->m_AniSeqIDOffset,
        v7 = ActorMgr,
        v5->m_uiAniSeqID = v6,
        NiActorManager::Reset(v7),
        NiActorManager::Update(v4, 0.0),
        NiActorManager::SetTargetAnimation(v4, v5->m_uiAniSeqID))
    && NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
         (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v4->m_kSequenceMap,
         v5->m_uiAniSeqID,
         (NiVBSet **)&ActorMgr)
    && (v9 = (NiControllerSequence *)ActorMgr) != 0 )
  {
    *(float *)&ActorMgr->m_eNextID = -3.4028235e38;
    NiControllerSequence::Update(v9, fTime, 1);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00712F70) --------------------------------------------------------
int __thiscall MHDiceAniActor::update(MHDiceAniActor *this, float fTime, NiActorManager *ActorMgr)
{
  int result; // eax@2
  NiActorManager *v4; // esi@3

  if ( this->m_uiAniSeqID == 999 )
  {
    result = 0;
  }
  else
  {
    v4 = ActorMgr;
    if ( NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
           (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&ActorMgr->m_kSequenceMap,
           ActorMgr->m_eTargetID,
           (NiVBSet **)&ActorMgr)
      && ActorMgr )
    {
      NiActorManager::Update(v4, fTime);
      NiAVObject::Update(v4->m_spNIFRoot.m_pObject, fTime, 1);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (00712FE0) --------------------------------------------------------
void __thiscall MHChipEffect::Start(MHChipEffect *this, NiNode *pkParent, NiQuaternion Qut, NiPoint3 pos)
{
  MHChipEffect *v4; // esi@1
  NiAVObject *v5; // esi@1

  v4 = this;
  ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))pkParent->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
    pkParent,
    this->m_spEffect.m_pObject,
    0);
  NsEffect::SetEffectNode(&v4->m_kEffect, &v4->m_spEffect.m_pObject->baseclass_0);
  NsEffect::Start(&v4->m_kEffect, Timer::ms_fCurTime);
  v4->m_kMarkCheck.m_fMarkTime = v4->m_kEffect.m_fMaxTime;
  CNSTimer_MarkCheck::ReSet(&v4->m_kMarkCheck, Timer::ms_fCurTime, OVER);
  v4->m_bLive = 1;
  NiAVObject::UpdateProperties(&pkParent->baseclass_0);
  NiAVObject::UpdateEffects(&pkParent->baseclass_0);
  NiQuaternion::ToRotation(&Qut, &v4->m_spEffect.m_pObject->baseclass_0.m_kLocal.m_Rotate);
  v5 = (NiAVObject *)v4->m_spEffect.m_pObject;
  LODWORD(v5->m_kLocal.m_Translate.x) = (_DWORD)pos.x;
  v5->m_kLocal.m_Translate.y = pos.y;
  v5->m_kLocal.m_Translate.z = pos.z;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00713070) --------------------------------------------------------
bool __thiscall MHChipEffect::Update(MHChipEffect *this, float fTime)
{
  MHChipEffect *v2; // esi@1
  NiNode *v3; // ecx@5

  v2 = this;
  if ( this->m_bLive
    && !this->m_bLoop
    && CNSTimer_MarkCheck::Update(&this->m_kMarkCheck, fTime) == 1
    && v2->m_spEffect.m_pObject )
  {
    v3 = v2->m_spEffect.m_pObject->baseclass_0.m_pkParent;
    if ( v3 )
    {
      ((void (__stdcall *)(_DWORD, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &fTime,
        v2->m_spEffect.m_pObject);
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&fTime);
    }
    v2->m_bLive = 0;
  }
  return v2->m_bLive;
}

//----- (007130D0) --------------------------------------------------------
void __thiscall GambleDiceGameWin::OnBettingButton(GambleDiceGameWin *this, unsigned int uiMsgCmd, bool IsLeftBtn)
{
  DICE_TAISAI_GAME_STATUS v3; // esi@1
  MHDiceGameTask *v4; // edi@2
  int v5; // esi@8
  MHDiceGameTask *v6; // ecx@12
  int v7; // esi@13
  MHDiceGameTask *v8; // ecx@18
  int v9; // esi@19
  int v10; // [sp+0h] [bp-14h]@18
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@1
  int v12; // [sp+10h] [bp-4h]@12

  v3 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eDiceSaiGameStatus;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !IsLeftBtn || v3 && v3 != 1 )
  {
    if ( !v3 || v3 == 1 )
    {
      v8 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject;
      v12 = 1;
      MHDiceGameTask::OnBettingCancel(v8, (DICE_TAISAI_BETTING)uiMsgCmd);
      v12 = -1;
      if ( v10 )
      {
        v9 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
    }
  }
  else
  {
    MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&IsLeftBtn);
    v5 = IsLeftBtn;
    if ( IsLeftBtn && !InterlockedDecrement((volatile LONG *)(IsLeftBtn + 4)) && v5 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    v6 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&IsLeftBtn)->m_pObject;
    v12 = 0;
    MHDiceGameTask::OnBetting(v6, (DICE_TAISAI_BETTING)uiMsgCmd);
    v12 = -1;
    if ( IsLeftBtn )
    {
      v7 = IsLeftBtn;
      if ( !InterlockedDecrement((volatile LONG *)(IsLeftBtn + 4)) )
      {
        if ( v7 )
          (**(void (__cdecl ***)(_DWORD))v7)(1);
      }
    }
  }
}

//----- (00713240) --------------------------------------------------------
void __thiscall GambleDiceGameWin::OnBettingAmount(GambleDiceGameWin *this, unsigned int uiButton, BETTING_LEVEL_COIN amount)
{
  GambleDiceGameWin *v3; // ebx@1
  ToggleBut *v4; // esi@1
  bool v5; // zf@1
  void *(__thiscall *v6)(NiRefObject *, unsigned int); // eax@2
  signed int v7; // edi@7
  int v8; // ebx@7
  int v9; // esi@10
  int (__thiscall *v10)(_DWORD); // eax@10
  int v11; // ecx@10
  MHDiceGameTask *v12; // esi@16
  signed int v13; // [sp-8h] [bp-14h]@12
  signed int v14; // [sp-4h] [bp-10h]@4
  NiPointer<MHDiceGameTask> result; // [sp+8h] [bp-4h]@1

  v3 = this;
  v4 = this->m_pkChipSelectBut[amount].m_pObject;
  v5 = v4->m_bHighlight == 0;
  result.m_pObject = (MHDiceGameTask *)this;
  if ( !v5 )
  {
    v6 = v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor;
    v4->m_bHighlight = 0;
    if ( (unsigned __int8)((int (__thiscall *)(ToggleBut *))v6)(v4) )
    {
      if ( v4->m_bHighlight )
        v14 = 1;
      else
        v14 = 0;
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
        (NiRefObject *)v4,
        v14);
    }
    v7 = 0;
    v8 = (int)v3->m_pkChipSelectBut;
    do
    {
      if ( v7 != amount )
      {
        if ( (unsigned __int8)(*(int (**)(void))(**((_DWORD **)&result.m_pObject->m_DiceTaiSai.m_Dice[69].isTriple
                                                  + amount)
                                               + 244))() )
        {
          v9 = *(_DWORD *)v8;
          v10 = *(int (__thiscall **)(_DWORD))(**(_DWORD **)v8 + 312);
          v11 = *(_DWORD *)v8;
          *(_BYTE *)(*(_DWORD *)v8 + 324) = 1;
          if ( (unsigned __int8)v10(v11) )
          {
            if ( *(_BYTE *)(v9 + 324) )
              v13 = 1;
            else
              v13 = 0;
            (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 552))(v9, v13);
          }
        }
      }
      ++v7;
      v8 += 4;
    }
    while ( v7 < 5 );
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Dice_CoinClick);
    MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eBettingAmount = amount;
    v12 = result.m_pObject;
    if ( result.m_pObject
      && !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v12 )
        v12->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    }
  }
}

//----- (00713350) --------------------------------------------------------
void __thiscall GambleDiceGameWin::OnMinimalize(GambleDiceGameWin *this)
{
  MHDiceGameTask *v1; // ecx@1
  MHDiceGameTask *v2; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v1 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v4 = 0;
  MHDiceGameTask::OpenDiceWin(v1);
  v4 = -1;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
}

//----- (007133D0) --------------------------------------------------------
void __thiscall GambleDiceGameWin::OnClickRanking(GambleDiceGameWin *this)
{
  MHDiceGameTask *v1; // ecx@1
  MHDiceGameTask *v2; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v4; // [sp+Ch] [bp-4h]@1

  v1 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v4 = 0;
  MHDiceGameTask::NcGambleDiceTaisaiAllRankReq(v1);
  v4 = -1;
  if ( result.m_pObject )
  {
    v2 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v2 )
        v2->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    }
  }
}

//----- (00713450) --------------------------------------------------------
void __thiscall GambleDiceGameWin::ChipAnimation(GambleDiceGameWin *this, DICE_TAISAI_BETTING index, BETTING_LEVEL_MONEY nLevel, int nPos)
{
  GambleDiceGameWin *v4; // esi@1
  BettingBut *v5; // eax@2
  float v6; // ecx@2
  float v7; // edx@2
  PgWinSpr *v8; // eax@2
  float v9; // edx@2
  float v10; // eax@2
  MHDiceGameTask *v11; // ecx@5
  MHDiceGameTask *v12; // esi@6
  NiPoint3 vT; // [sp+18h] [bp-50h]@2
  NiPoint3 axis; // [sp+24h] [bp-44h]@2
  NiQuaternion thisa; // [sp+30h] [bp-38h]@2
  NiPoint3 vStandPos; // [sp+40h] [bp-28h]@2
  NiPointer<MHDiceGameTask> result; // [sp+4Ch] [bp-1Ch]@1
  float v18; // [sp+50h] [bp-18h]@2
  float v19; // [sp+54h] [bp-14h]@2
  float fAngle; // [sp+58h] [bp-10h]@2
  int v21; // [sp+64h] [bp-4h]@5

  v4 = this;
  result.m_pObject = (MHDiceGameTask *)this->m_EffectPos.m_pObject;
  if ( result.m_pObject )
  {
    v5 = this->m_spBettingBut[index].m_pObject;
    v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v7 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
    thisa.m_fZ = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v8 = v4->m_spLightSpr[6].m_pObject;
    thisa.m_fX = v6;
    vStandPos.x = v8->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    thisa.m_fY = v7;
    v9 = v8->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
    v10 = v8->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    fAngle = v6 - vStandPos.x;
    v19 = thisa.m_fY - v9;
    v18 = thisa.m_fZ - v10;
    vStandPos.x = fAngle;
    vStandPos.y = v19;
    vStandPos.z = v18;
    axis.x = 0.0;
    axis.y = 1.0;
    thisa.m_fX = 0.0;
    thisa.m_fY = 1.0;
    axis.z = 0.0;
    thisa.m_fZ = 0.0;
    NiPoint3::Unitize(&vStandPos);
    NiPoint3::Unitize((NiPoint3 *)&thisa.m_fX);
    fAngle = thisa.m_fY * vStandPos.y + vStandPos.x * thisa.m_fX + thisa.m_fZ * vStandPos.z;
    NiPoint3::UnitCross((NiPoint3 *)&thisa.m_fX, &vT, &vStandPos);
    if ( fAngle < 0.0 )
      fAngle = fAngle * -1.0;
    JUMPOUT(*(int *)loc_71357B);
  }
  v11 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v21 = 0;
  MHDiceGameTask::CheckBettingChip(v11, index, 1);
  v21 = -1;
  if ( result.m_pObject )
  {
    v12 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v12 )
        v12->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    }
  }
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceOutMoney);
}
// 71357B: using guessed type int __stdcall(int index, int nLevel, int nPos);

//----- (007136F0) --------------------------------------------------------
void __thiscall GambleDiceGameWin::OnVisibleChip(GambleDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsShow, int chipLevel, bool bPlaySound)
{
  GambleDiceGameWin *v5; // esi@1

  v5 = this;
  if ( IsShow )
  {
    ((void (__stdcall *)(_DWORD))this->m_spChips[index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    ((void (__stdcall *)(_DWORD))v5->m_spChips[index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(chipLevel);
    if ( bPlaySound )
    {
      if ( chipLevel <= 3 )
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceChipsPiledUp_Single);
      else
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceChipsPiledUp_Pair);
    }
  }
  else
  {
    ((void (__stdcall *)(_DWORD))this->m_spChips[index].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}

//----- (00713770) --------------------------------------------------------
void __thiscall GambleDiceGameWin::TurnOnLight(GambleDiceGameWin *this, bool bIsAll, bool bOnlyNext, bool bTwinkle)
{
  GambleDiceGameWin *v4; // edi@1
  int v5; // esi@5
  signed int v6; // ebx@5
  char *v7; // esi@8
  signed int v8; // ebx@8
  int v9; // esi@10
  int v10; // eax@12
  signed int v11; // ecx@12
  signed int v12; // ebx@17

  v4 = this;
  if ( bTwinkle )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_spLightSpr[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
    {
      bTwinkle = 0;
      bIsAll = 1;
    }
    else
    {
      bTwinkle = 1;
      bIsAll = 0;
    }
    v5 = (int)&v4->m_spLightSpr[1];
    v6 = 16;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 - 4) + 256))(bTwinkle);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(bIsAll);
      v5 += 8;
      --v6;
    }
    while ( v6 );
    *(_DWORD *)&v4->m_uiOnLightIdx[0] = 983047;
    *(_DWORD *)&v4->m_uiOnLightIdx[2] = 2031639;
  }
  else
  {
    v7 = (char *)this->m_spLightSpr;
    v8 = 32;
    if ( bIsAll )
    {
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(1);
        v7 += 4;
        --v8;
      }
      while ( v8 );
      v9 = (int)v4->m_uiOnLightIdx;
      v4->m_uiOnLightIdx[0] = 7;
      *(_DWORD *)&v4->m_uiOnLightIdx[1] = 1507343;
      v4->m_uiOnLightIdx[3] = 31;
    }
    else
    {
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0);
        v7 += 4;
        --v8;
      }
      while ( v8 );
      v9 = (int)v4->m_uiOnLightIdx;
      v10 = (int)v4->m_uiOnLightIdx;
      v11 = 4;
      do
      {
        if ( *(_WORD *)v10 >= 0x20u )
          *(_WORD *)v10 = 0;
        v10 += 2;
        --v11;
      }
      while ( v11 );
    }
    if ( bOnlyNext )
    {
      v12 = 4;
      do
      {
        ((void (__stdcall *)(_DWORD))v4->m_spLightSpr[(*(_WORD *)v9)++].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
        if ( *(_WORD *)v9 >= 0x20u )
          *(_WORD *)v9 = 0;
        ((void (__stdcall *)(_DWORD))v4->m_spLightSpr[*(_WORD *)v9].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
        v9 += 2;
        --v12;
      }
      while ( v12 );
    }
  }
}

//----- (007138D0) --------------------------------------------------------
void __thiscall GambleDiceGameWin::GameStartEff(GambleDiceGameWin *this)
{
  GambleDiceGameWin *v1; // esi@1
  DICE_TAISAI_GAME_STATUS v2; // ebx@2
  MHDiceGameTask *v3; // edi@3
  NiNode *v4; // eax@8
  float v5; // ST14_4@8
  NiPointer<MHDiceGameTask> result; // [sp+20h] [bp-4h]@2

  v1 = this;
  if ( this->m_pStartEffect.m_pObject )
  {
    v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eDiceSaiGameStatus;
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    if ( !v2 || v2 == 1 )
    {
      result.m_pObject = (MHDiceGameTask *)(PgWin::ms_uiScreenWidth >> 1);
      v4 = v1->m_pStartEffect.m_pObject;
      v5 = (double)(PgWin::ms_uiScreenWidth >> 1);
      v4->baseclass_0.m_kLocal.m_Translate.x = v5;
      v4->baseclass_0.m_kLocal.m_Translate.y = -500.0;
      v4->baseclass_0.m_kLocal.m_Translate.z = 0.0;
      v1->m_pStartEffect.m_pObject->baseclass_0.m_uFlags &= 0xFFFEu;
      PgWinMgr::StartFullScreenEffect(&Pgg_kWinMgr, Timer::ms_fCurTime, &v1->m_pStartEffect.m_pObject->baseclass_0);
      ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->StopAllSound)();
      ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceBettingLogo);
    }
  }
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (007139D0) --------------------------------------------------------
void __thiscall GambleDiceGameWin::EnableBetLevelBtn(GambleDiceGameWin *this, unsigned int money)
{
  GambleDiceGameWin *v2; // ebx@1
  char *v3; // esi@1
  signed int v4; // edi@1

  v2 = this;
  v3 = (char *)this->m_pkChipSelectBut;
  v4 = 6;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(1);
    v3 += 4;
    --v4;
  }
  while ( v4 );
  if ( money < 0x2710 )
    ((void (__stdcall *)(_DWORD))v2->m_pkChipSelectBut[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( money < 0x3E8 )
    ((void (__stdcall *)(_DWORD))v2->m_pkChipSelectBut[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  if ( money < 0x1F4 )
    ((void (__stdcall *)(_DWORD))v2->m_pkChipSelectBut[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
}

//----- (00713A50) --------------------------------------------------------
bool __thiscall BettingBut::Create(BettingBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle)
{
  BettingBut *v9; // esi@1
  bool result; // al@1
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@2

  v9 = this;
  result = PgWinSpr::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, pkSprData, pkParent, pcName, uiExtStyle);
  if ( result )
  {
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v9,
      0);
    v11 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor;
    v9->baseclass_0.m_uiButNum = pkSprData->m_akGeomData.m_uiSize;
    v11(&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, uiCmdMsg);
    v9->m_fAlphaOfButton = 1.0;
    v9->m_Pos = Pos;
    v9->m_fTime = 0.0;
    v9->m_eBetState = 0;
    *(_WORD *)&v9->m_bIsShowEgde = 256;
    v9->m_bIsResetTimer = 0;
    result = 1;
  }
  return result;
}

//----- (00713AF0) --------------------------------------------------------
void __thiscall BettingBut::DoAction(BettingBut *this)
{
  BettingBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, v1->baseclass_0.m_uiCmdMsg, 1);
}

//----- (00713B10) --------------------------------------------------------
void __thiscall BettingBut::ProcessMeInput(BettingBut *this, bool *bHit)
{
  BettingBut *v2; // esi@1
  BET_STATE v3; // eax@1
  bool *v4; // edi@13
  signed int v5; // eax@13
  NiRefObjectVtbl *v6; // edx@28
  BettingBut *v7; // ecx@28
  PgSpr *v8; // eax@33
  NiPointer<NiScreenElements> *v9; // ecx@35
  NiScreenElements *v10; // eax@38
  PgSpr *v11; // eax@51
  NiPointer<NiScreenElements> *v12; // ecx@52
  bool *v13; // esi@54
  signed int v14; // [sp-8h] [bp-10h]@29

  v2 = this;
  v3 = this->m_eBetState;
  if ( v3 == 2 )
  {
LABEL_49:
    if ( v3 != 3 && v3 != 4 )
      return;
    goto LABEL_51;
  }
  if ( v3 != 3 )
  {
    if ( v3 != 4 )
    {
      if ( !(unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor)() )
        return;
      if ( dword_B70350 )
        ++dword_B70350;
      if ( dword_B7035C )
        ++dword_B7035C;
      if ( PgWin::ms_kbRbutPressed.m_iBool )
        ++PgWin::ms_kbRbutPressed.m_iBool;
      if ( PgWin::ms_kbRbutReleased.m_iBool )
        ++PgWin::ms_kbRbutReleased.m_iBool;
      v4 = bHit;
      PgWinBut::ProcessMeInput(&v2->baseclass_0, bHit);
      v5 = 1;
      if ( dword_B70350 >= 1 || dword_B7035C >= 1 )
        goto LABEL_41;
      PgWin::ms_kbRbutPressed.m_bReserveFalse = 0;
      PgWin::ms_kbRbutReleased.m_bReserveFalse = 0;
      if ( PgWin::ms_kbRbutPressed.m_iBool >= 1 && *v4 )
      {
        if ( v2->baseclass_0.m_eType )
        {
          PgWin::ms_pkCapture = (PgWin *)v2;
          v2->baseclass_0.m_bHadBeenPushed = 1;
          PgWin::ms_kbRbutPressed.m_bReserveFalse = 1;
        }
        else
        {
          ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(v2);
          v5 = 1;
          v2->baseclass_0.m_bHadBeenPushed = 0;
          PgWin::ms_kbRbutPressed.m_bReserveFalse = 1;
        }
      }
      else
      {
        if ( PgWin::ms_kbRbutReleased.m_iBool >= 1 )
        {
          v2->baseclass_0.m_bHadBeenPushed = 0;
          if ( (BettingBut *)PgWin::ms_pkCapture == v2 )
          {
            PgWin::ms_pkCapture = 0;
            PgWin::ms_kbRbutReleased.m_bReserveFalse = 1;
          }
          if ( !*v4 )
            goto LABEL_30;
          if ( v2->baseclass_0.m_eType == 1 )
          {
            ((void (__thiscall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[140].__vecDelDtor)(v2);
            v5 = 1;
          }
          PgWin::ms_kbRbutReleased.m_bReserveFalse = 1;
        }
      }
      if ( *v4 )
      {
        v6 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v7 = v2;
        if ( v2->baseclass_0.m_bHadBeenPushed )
        {
          v14 = v5;
LABEL_33:
          v6[138].__vecDelDtor((NiRefObject *)v7, v14);
          v8 = v2->baseclass_0.baseclass_0.m_spSpr.m_pObject;
          if ( v2->m_bHighlight )
          {
            if ( v8->m_akGeom.m_uiSize > 3 )
            {
              v10 = v8->m_akGeom.m_pBase[3].m_pObject;
              if ( v10 )
                ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
                  v2,
                  v10,
                  1);
            }
          }
          else
          {
            if ( v8->m_akGeom.m_uiSize > 3 )
            {
              v9 = v8->m_akGeom.m_pBase;
              if ( v9[3].m_pObject )
              {
                ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
                  v2,
                  &bHit,
                  v9[3].m_pObject);
                NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&bHit);
              }
            }
          }
          PgWin::Bool::RealizeFalse(&PgWin::ms_kbRbutPressed);
          PgWin::Bool::RealizeFalse(&PgWin::ms_kbRbutReleased);
          v5 = 1;
LABEL_41:
          if ( dword_B70350 )
            dword_B70350 -= v5;
          if ( dword_B7035C )
            dword_B7035C -= v5;
          if ( PgWin::ms_kbRbutPressed.m_iBool )
            PgWin::ms_kbRbutPressed.m_iBool -= v5;
          if ( PgWin::ms_kbRbutReleased.m_iBool )
            PgWin::ms_kbRbutReleased.m_iBool -= v5;
          return;
        }
        goto LABEL_32;
      }
LABEL_30:
      v6 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v7 = v2;
      if ( v2->baseclass_0.m_bHadBeenPushed )
      {
        v14 = 2;
        goto LABEL_33;
      }
LABEL_32:
      v14 = 0;
      goto LABEL_33;
    }
    goto LABEL_49;
  }
LABEL_51:
  v11 = this->baseclass_0.baseclass_0.m_spSpr.m_pObject;
  if ( v11->m_akGeom.m_uiSize > 3 )
  {
    v12 = v11->m_akGeom.m_pBase;
    if ( v12[3].m_pObject )
    {
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        v2,
        &bHit,
        v12[3].m_pObject);
      if ( bHit )
      {
        v13 = bHit;
        if ( !InterlockedDecrement((volatile LONG *)bHit + 1) )
        {
          if ( v13 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
        }
      }
    }
  }
}
// B70350: using guessed type int dword_B70350;
// B7035C: using guessed type int dword_B7035C;

//----- (00713D80) --------------------------------------------------------
void __thiscall BettingBut::UpdateMeWin(BettingBut *this, float fCurTime)
{
  BettingBut *v2; // esi@1
  float v3; // ST0C_4@3
  double v4; // st7@3
  double v5; // st7@8
  PgSpr *v6; // eax@9
  NiScreenElements *v7; // eax@11
  NiScreenElements *v8; // eax@15

  v2 = this;
  if ( this->m_bIsResetTimer )
  {
    v3 = this->m_kTimer.m_fObjectTime;
    fCurTime = fCurTime - this->m_kTimer.m_fStartTime;
    v4 = fCurTime;
    this->m_kTimer.m_fObjectTime = fCurTime;
    this->m_kTimer.m_fElapsedTime = v4 - v3;
  }
  else
  {
    this->m_kTimer.m_fStartTime = fCurTime;
    this->m_kTimer.m_fObjectTime = 0.0;
    this->m_kTimer.m_fElapsedTime = 0.0;
    this->m_bIsResetTimer = 1;
  }
  if ( this->m_bIsSwitched )
  {
    if ( this->m_fAlphaOfButton < 1.0 )
      this->m_fAlphaOfButton = this->m_kTimer.m_fElapsedTime + this->m_fAlphaOfButton;
    ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(this->m_fAlphaOfButton);
    if ( v2->m_eBetState == 2 )
    {
      fCurTime = v2->m_kTimer.m_fElapsedTime + v2->m_fTime;
      v5 = fCurTime;
      v2->m_fTime = fCurTime;
      if ( v5 > 0.800000011920929 )
      {
        v6 = v2->baseclass_0.baseclass_0.m_spSpr.m_pObject;
        if ( v2->m_bIsShowEgde )
        {
          if ( v6->m_akGeom.m_uiSize > 3 )
          {
            v7 = v6->m_akGeom.m_pBase[3].m_pObject;
            if ( v7 )
            {
              ((void (__thiscall *)(BettingBut *, float *, NiScreenElements *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
                v2,
                &fCurTime,
                v7);
              NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&fCurTime);
            }
          }
          v2->m_bIsShowEgde = 0;
          v2->m_fTime = 0.0;
        }
        else
        {
          if ( v6->m_akGeom.m_uiSize > 3 )
          {
            v8 = v6->m_akGeom.m_pBase[3].m_pObject;
            if ( v8 )
              ((void (__thiscall *)(BettingBut *, NiScreenElements *, signed int))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
                v2,
                v8,
                1);
          }
          v2->m_bIsShowEgde = 1;
          v2->m_fTime = 0.0;
        }
      }
    }
  }
  else
  {
    BettingBut::SwitchSpr(this, this->m_kTimer.m_fElapsedTime);
  }
}

//----- (00713EF0) --------------------------------------------------------
void __thiscall BettingBut::SetButtonSpr(BettingBut *this, unsigned int index)
{
  BettingBut *v2; // esi@1
  PgSpr *v3; // eax@1
  NiScreenElements *v4; // eax@3
  unsigned int v5; // esi@5
  NiScreenElements *v6; // eax@9

  v2 = this;
  ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(index);
  v3 = v2->baseclass_0.baseclass_0.m_spSpr.m_pObject;
  if ( v2->m_bHighlight )
  {
    if ( v3->m_akGeom.m_uiSize > 3 )
    {
      v6 = v3->m_akGeom.m_pBase[3].m_pObject;
      if ( v6 )
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v2,
          v6,
          1);
    }
  }
  else
  {
    if ( v3->m_akGeom.m_uiSize > 3 )
    {
      v4 = v3->m_akGeom.m_pBase[3].m_pObject;
      if ( v4 )
      {
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
          v2,
          &index,
          v4);
        if ( index )
        {
          v5 = index;
          if ( !InterlockedDecrement((volatile LONG *)(index + 4)) )
          {
            if ( v5 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
          }
        }
      }
    }
  }
}

//----- (00713F80) --------------------------------------------------------
void __thiscall BettingBut::SetBettingState(BettingBut *this, BET_STATE state)
{
  NiAVObject *v2; // esi@1
  PgSpr *v3; // eax@2

  v2 = (NiAVObject *)this;
  this->m_eBetState = state;
  if ( state == 3 )
  {
    v3 = this->baseclass_0.baseclass_0.m_spSpr.m_pObject;
    this->m_bIsSwitched = 0;
    this->m_uiNextSprIdx = 2;
    if ( v3->m_akGeom.m_uiSize <= 2 || !v3->m_akGeom.m_pBase[2].m_pObject )
    {
      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
        this,
        0,
        1);
      NiAVObject::Update(v2, 0.0, 0);
      NiAVObject::UpdateProperties(v2);
    }
  }
  else
  {
    if ( state == 2 )
    {
      this->m_bIsSwitched = 1;
      this->m_uiNextSprIdx = 1;
    }
  }
}

//----- (00714000) --------------------------------------------------------
bool __thiscall ToggleBut::Create(ToggleBut *this, int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle)
{
  ToggleBut *v9; // esi@1
  bool result; // al@1
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@2

  v9 = this;
  result = PgWinSpr::Create(&this->baseclass_0.baseclass_0, iXPos, iYPos, pkSprData, pkParent, pcName, uiExtStyle);
  if ( result )
  {
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v9,
      1u);
    v11 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[129].__vecDelDtor;
    v9->baseclass_0.m_uiButNum = pkSprData->m_akGeomData.m_uiSize;
    v11(&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, uiCmdMsg);
    v9->m_bHighlight = 0;
    v9->baseclass_0.m_bEnableClickSound = 0;
    result = 1;
  }
  return result;
}

//----- (00714070) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::OnCommand(MiniHouseDiceGameWin *this, unsigned int wParam, int lParam)
{
  MiniHouseDiceGameWin *v3; // esi@1
  MHDiceGameTask *v4; // ecx@9
  MHDiceGameTask *v5; // ecx@11
  MHDiceGameTask *v6; // ecx@12
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@12
  int v8; // [sp+Ch] [bp-4h]@9

  v3 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
  {
    switch ( wParam )
    {
      case 0x34u:
        MiniHouseDiceGameWin::OnBettingAmout(v3, 0x34u, 0);
        break;
      case 0x35u:
        MiniHouseDiceGameWin::OnBettingAmout(v3, 0x35u, BLM_1SIL);
        break;
      case 0x36u:
        MiniHouseDiceGameWin::OnBettingAmout(v3, 0x36u, BLM_10SIL);
        break;
      case 0x37u:
        MiniHouseDiceGameWin::OnBettingAmout(v3, 0x37u, BLM_100SIL);
        break;
      case 0x38u:
        MiniHouseDiceGameWin::OnBettingAmout(v3, 0x38u, BLM_1GOLD);
        break;
      case 0x39u:
        MiniHouseDiceGameWin::OnBettingAmout(v3, 0x39u, BLM_MAX);
        break;
      case 0x3Au:
        v4 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam)->m_pObject;
        MHDiceGameTask::Recv_NC_DICE_TAISAI_GAME_LEAVE_REQ(v4);
        v8 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&wParam);
        break;
      case 0x3Bu:
        MiniHouseDiceGameWin::OnMinimalize(v3);
        break;
      case 0x3Cu:
        v5 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&lParam)->m_pObject;
        MHDiceGameTask::Recv_NC_DICE_TAISAI_RANK_REQ(v5, 0);
        v8 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&lParam);
        break;
      case 0x3Du:
        v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
        v8 = 2;
        MHDiceGameTask::OpenHelpWin(v6);
        v8 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
        break;
      case 0u:
      case 1u:
      case 2u:
      case 3u:
      case 4u:
      case 5u:
      case 6u:
      case 7u:
      case 8u:
      case 9u:
      case 0xAu:
      case 0xBu:
      case 0xCu:
      case 0xDu:
      case 0xEu:
      case 0xFu:
      case 0x10u:
      case 0x11u:
      case 0x12u:
      case 0x13u:
      case 0x14u:
      case 0x15u:
      case 0x16u:
      case 0x17u:
      case 0x18u:
      case 0x19u:
      case 0x1Au:
      case 0x1Bu:
      case 0x1Cu:
      case 0x1Du:
      case 0x1Eu:
      case 0x1Fu:
      case 0x20u:
      case 0x21u:
      case 0x22u:
      case 0x23u:
      case 0x24u:
      case 0x25u:
      case 0x26u:
      case 0x27u:
      case 0x28u:
      case 0x29u:
      case 0x2Au:
      case 0x2Bu:
      case 0x2Cu:
      case 0x2Du:
      case 0x2Eu:
      case 0x2Fu:
      case 0x30u:
      case 0x31u:
      case 0x32u:
      case 0x33u:
        MiniHouseDiceGameWin::OnBettingButton(v3, wParam, lParam != 0);
        break;
      default:
        return;
    }
  }
}

//----- (007142D0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::AllReset(MiniHouseDiceGameWin *this)
{
  MiniHouseDiceGameWin *v1; // edi@1
  char *v2; // esi@1
  signed int v3; // ebx@1
  int v4; // esi@3
  signed int v5; // ebx@3
  __int64 v6; // qax@5
  unsigned int v7; // esi@5
  unsigned int v8; // ebx@5
  bool v9; // sf@6
  int v10; // edi@6
  signed __int64 v11; // kr00_8@6
  MiniHouseDiceGameWin *v12; // ebx@10
  int v13; // esi@12
  int v14; // edi@13
  MiniHouseDiceGameWin *v15; // [sp+10h] [bp-Ch]@1
  signed int i; // [sp+14h] [bp-8h]@5
  int v17; // [sp+18h] [bp-4h]@5

  v1 = this;
  v15 = this;
  v2 = (char *)this->m_spBettingBut;
  v3 = 52;
  do
  {
    *(_DWORD *)(*(_DWORD *)v2 + 332) = 0;
    *(_BYTE *)(*(_DWORD *)v2 + 328) = 0;
    BettingBut::SetButtonSpr(*(BettingBut **)v2, 0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 276))(1.0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 52) + 256))(0);
    PgWin::RemoveAllChildWin(*((PgWin **)v2 + 52));
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v1->m_nUserBettingMoney = 0;
  v4 = (int)v1->m_spShareNumSpr;
  v5 = 8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 - 64) + 492))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 492))(0);
    v4 += 4;
    --v5;
  }
  while ( v5 );
  v6 = User::GetMoney(&g_kUser);
  v7 = v6;
  v1->m_nInvenRemainMoney = v6;
  v8 = HIDWORD(v6);
  i = 10;
  v17 = (int)&v1->m_spMyBetNumSpr[10];
  while ( 1 )
  {
    v10 = (signed __int64)__PAIR__(v8, v7) % 10;
    v9 = (signed int)((signed __int64)__PAIR__(v8, v7) % 10) < 0;
    v11 = (signed __int64)__PAIR__(v8, v7) / 10;
    v8 = (unsigned __int64)((signed __int64)__PAIR__(v8, v7) / 10) >> 32;
    v7 = v11;
    if ( v9 )
      v10 = 0;
    (*(void (__stdcall **)(int))(**(_DWORD **)v17 + 492))(v10);
    if ( !(v8 | (unsigned int)v11) )
      break;
    v17 -= 4;
    --i;
    if ( i < 0 )
      goto LABEL_10;
  }
  v13 = i - 1;
  if ( i - 1 < 0 )
  {
LABEL_10:
    v12 = v15;
    goto LABEL_11;
  }
  v12 = v15;
  v14 = (int)&v15->m_spMyBetNumSpr[v13];
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v14 + 492))(0);
    v14 -= 4;
    --v13;
  }
  while ( v13 >= 0 );
LABEL_11:
  v12->m_fDiceAniTime = 0.0;
  v12->m_fRewardTime = 0.0;
  v12->m_uiSuccessNum = 0;
  v12->m_fResultTime = 0.0;
  *(_DWORD *)&v12->m_bResultDiceAni = 0;
}

//----- (00714440) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::ChipAnimation(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING index, BETTING_LEVEL_MONEY nLevel, int nPos)
{
  MiniHouseDiceGameWin *v4; // esi@1
  BettingBut *v5; // eax@2
  float v6; // ecx@2
  float v7; // edx@2
  PgWinSpr *v8; // eax@2
  float v9; // edx@2
  float v10; // eax@2
  MHDiceGameTask *v11; // ecx@5
  MHDiceGameTask *v12; // esi@6
  NiPoint3 vT; // [sp+18h] [bp-50h]@2
  NiPoint3 axis; // [sp+24h] [bp-44h]@2
  NiQuaternion thisa; // [sp+30h] [bp-38h]@2
  NiPoint3 vStandPos; // [sp+40h] [bp-28h]@2
  NiPointer<MHDiceGameTask> result; // [sp+4Ch] [bp-1Ch]@1
  float v18; // [sp+50h] [bp-18h]@2
  float v19; // [sp+54h] [bp-14h]@2
  float fAngle; // [sp+58h] [bp-10h]@2
  int v21; // [sp+64h] [bp-4h]@5

  v4 = this;
  result.m_pObject = (MHDiceGameTask *)this->m_EffectPos.m_pObject;
  if ( result.m_pObject )
  {
    v5 = this->m_spBettingBut[index].m_pObject;
    v6 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    v7 = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
    thisa.m_fZ = v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    v8 = v4->m_spLightSpr[6].m_pObject;
    thisa.m_fX = v6;
    vStandPos.x = v8->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
    thisa.m_fY = v7;
    v9 = v8->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
    v10 = v8->baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
    fAngle = v6 - vStandPos.x;
    v19 = thisa.m_fY - v9;
    v18 = thisa.m_fZ - v10;
    vStandPos.x = fAngle;
    vStandPos.y = v19;
    vStandPos.z = v18;
    axis.x = 0.0;
    axis.y = 1.0;
    thisa.m_fX = 0.0;
    thisa.m_fY = 1.0;
    axis.z = 0.0;
    thisa.m_fZ = 0.0;
    NiPoint3::Unitize(&vStandPos);
    NiPoint3::Unitize((NiPoint3 *)&thisa.m_fX);
    fAngle = thisa.m_fY * vStandPos.y + vStandPos.x * thisa.m_fX + thisa.m_fZ * vStandPos.z;
    NiPoint3::UnitCross((NiPoint3 *)&thisa.m_fX, &vT, &vStandPos);
    if ( fAngle < 0.0 )
      fAngle = fAngle * -1.0;
    JUMPOUT(*(int *)loc_71456B);
  }
  v11 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v21 = 0;
  MHDiceGameTask::CheckBettingChip(v11, index, 1);
  v21 = -1;
  if ( result.m_pObject )
  {
    v12 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v12 )
        v12->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v12, 1u);
    }
  }
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceOutMoney);
}
// 71456B: using guessed type int __stdcall(int index, int nLevel, int nPos);

//----- (007146E0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::ShowResult(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsSuccess, bool IsNonBetting)
{
  MiniHouseDiceGameWin *v4; // esi@1
  BettingBut *v5; // eax@4
  BettingBut *v6; // eax@4
  BettingBut *v7; // ebx@4
  float v8; // ST28_4@4
  float v9; // ST2C_4@4
  float v10; // ST18_4@4
  float v11; // ST1C_4@4
  NiAVObject *v12; // esi@11
  float v13; // eax@11
  unsigned int IsSuccessa; // [sp+3Ch] [bp+Ch]@4
  NiNode *IsNonBettinga; // [sp+40h] [bp+10h]@4

  v4 = this;
  if ( IsNonBetting )
  {
    this->m_spBettingBut[index].m_pObject->m_bHighlight = 0;
    BettingBut::SetButtonSpr(this->m_spBettingBut[index].m_pObject, 2u);
    v4->m_spBettingBut[index].m_pObject->m_eBetState = 4;
  }
  else
  {
    if ( IsSuccess )
    {
      this->m_spBettingBut[index].m_pObject->m_bHighlight = 1;
      v5 = this->m_spBettingBut[index].m_pObject;
      v5->m_eBetState = 2;
      v5->m_bIsSwitched = 1;
      v5->m_uiNextSprIdx = 1;
      BettingBut::SetButtonSpr(this->m_spBettingBut[index].m_pObject, 1u);
      v6 = v4->m_spBettingBut[index].m_pObject;
      v7 = v4->m_spBettingBut[index].m_pObject;
      v8 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
      v9 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      IsNonBettinga = v4->m_pkResultEffectList[v4->m_uiSuccessNum]->m_spEffect.m_pObject;
      v10 = (double)((unsigned int)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4->m_spBettingBut[index].m_pObject) >> 1)
          + v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
      IsSuccessa = (unsigned int)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7) >> 1;
      IsNonBettinga->baseclass_0.m_kLocal.m_Translate.x = v10;
      v11 = (double)IsSuccessa + v8;
      IsNonBettinga->baseclass_0.m_kLocal.m_Translate.y = v11;
      IsNonBettinga->baseclass_0.m_kLocal.m_Translate.z = v9;
      SpEffect::Start(v4->m_pkResultEffectList[v4->m_uiSuccessNum], v4->m_pRunEffect.m_pObject);
      if ( (signed int)index > 9 && (signed int)index < 19 || index == 29 || index == 30 )
      {
        if ( !v4->m_bIsHappendBigPot )
          v4->m_bIsHappendBigPot = 1;
      }
      ++v4->m_uiSuccessNum;
    }
    else
    {
      this->m_spBettingBut[index].m_pObject->m_bHighlight = 0;
      v12 = (NiAVObject *)this->m_spBettingBut[index].m_pObject;
      v13 = v12[1].m_kWorld.m_Rotate.m_pEntry[0][2];
      v12[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)3;
      BYTE1(v12[1].m_spCollisionObject.m_pObject) = 0;
      v12[2].baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)2;
      if ( *(_DWORD *)(LODWORD(v13) + 24) <= 2u || !*(_DWORD *)(*(_DWORD *)(LODWORD(v13) + 16) + 8) )
      {
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v12->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v12,
          0,
          1);
        NiAVObject::Update(v12, 0.0, 0);
        NiAVObject::UpdateProperties(v12);
      }
    }
  }
}

//----- (007148C0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::UpdateTimeText(MiniHouseDiceGameWin *this, float fRemainTime, bool IsShow)
{
  int v3; // edi@0
  MiniHouseDiceGameWin *v4; // esi@1
  PgWinText *v5; // ecx@5
  PgWinText *v6; // esi@8
  int v7; // ST08_4@8
  NiRefObjectVtbl *v8; // edi@8
  char *v9; // eax@8
  char *v10; // eax@8
  PgWinText *v11; // ecx@10
  D3DXCOLOR *v12; // [sp-8h] [bp-Ch]@6
  signed int fRemainTimea; // [sp+Ch] [bp+8h]@4

  v4 = this;
  if ( IsShow )
  {
    if ( fRemainTime < 0.0 )
      fRemainTime = 0.0;
    ((void (__stdcall *)(signed int))this->m_spTimeCountText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    fRemainTimea = (signed int)fRemainTime;
    if ( (_WORD)fRemainTimea != v4->m_uiCurrentTime )
    {
      v5 = v4->m_spTimeCountText.m_pObject;
      v4->m_uiCurrentTime = fRemainTimea;
      if ( (unsigned __int16)fRemainTimea <= 0xAu )
        v12 = &Color::m_kDxRedColor;
      else
        v12 = &Color::m_kDxWhiteColor;
      ((void (__cdecl *)(D3DXCOLOR *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v12);
      v6 = v4->m_spTimeCountText.m_pObject;
      v7 = v3;
      v8 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v9 = TextData2::Get(0xF2E7153Eu);
      v10 = fs(v9);
      ((void (__thiscall *)(PgWinText *, char *, int))v8[118].__vecDelDtor)(v6, v10, v7);
    }
  }
  else
  {
    v11 = this->m_spTimeCountText.m_pObject;
    if ( v11 )
      ((void (__stdcall *)(_DWORD))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}
// 7148C0: could not find valid save-restore pair for edi

//----- (007149A0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::DiceAnimationStart(MiniHouseDiceGameWin *this, unsigned int *AniCode)
{
  MiniHouseDiceGameWin *v2; // esi@1
  NiRefObjectVtbl *v3; // eax@1
  float v4; // ST14_4@1
  double v5; // st7@1
  NiNode *v6; // eax@1
  float v7; // ST18_4@1
  float v8; // ST20_4@1
  float v9; // ST24_4@1
  signed int v10; // edi@1
  int v11; // esi@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  this->m_fResultTime = 0.1;
  v4 = (double)((int (*)(void))v3[41].__vecDelDtor)();
  v5 = (double)((int (__thiscall *)(MiniHouseDiceGameWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
  v6 = v2->m_pkDiceRollEffect->m_spEffect.m_pObject;
  v7 = v5;
  v8 = v4 + 540.0;
  v6->baseclass_0.m_kLocal.m_Translate.x = v8;
  v9 = v7 - 420.0;
  v6->baseclass_0.m_kLocal.m_Translate.y = v9;
  v6->baseclass_0.m_kLocal.m_Translate.z = 1000.0;
  PgWinMgr::StartFullScreenEffect(
    &Pgg_kWinMgr,
    Timer::ms_fCurTime,
    (NiAVObject *)v2->m_pkDiceRollEffect->m_spEffect.m_pObject);
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceRoll_Pair);
  v2->m_AniActor[0].m_NextAni = *AniCode;
  v2->m_AniActor[1].m_NextAni = AniCode[1];
  v2->m_AniActor[2].m_NextAni = AniCode[2];
  v10 = 0;
  v11 = (int)v2->m_spResultDice;
  do
  {
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)v11 + 492))(AniCode[v10++] / 0x64 - 1);
    v11 += 4;
  }
  while ( v10 < 3 );
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00714AA0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::SetMarkButton(MiniHouseDiceGameWin *this, DICE_TAISAI_BETTING nPos, BET_STATE bState, bool IsMark)
{
  MiniHouseDiceGameWin *v4; // esi@1

  v4 = this;
  BettingBut::SetBettingState(this->m_spBettingBut[nPos].m_pObject, bState);
  v4->m_spBettingBut[nPos].m_pObject->m_bHighlight = IsMark;
  if ( !bState )
    BettingBut::SetButtonSpr(v4->m_spBettingBut[nPos].m_pObject, 0);
}

//----- (00714AF0) --------------------------------------------------------
bool __thiscall mhMinimizeDiceGameWin::Create(mhMinimizeDiceGameWin *this, PgFrameWork *pkFrameWork)
{
  mhMinimizeDiceGameWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // edi@11
  PgWinBut *v9; // edi@11
  char *v10; // eax@11
  NiNode *v11; // esi@12
  int iLeft; // [sp+14h] [bp-18h]@11
  int iTop; // [sp+18h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v15; // [sp+28h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v15 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameMainMin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v2->baseclass_0.m_pkFrameWork = pkFrameWork;
    v8 = PgSprData::Create(&v5->baseclass_0, "100CopperNor", &iLeft, &iTop, 0);
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "100CopperClick");
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "100CopperOver");
    v9 = PgWinBut::CreateWin(0, 0, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v9->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v10 = TextData2::Get(0xD7F9364Eu);
    PgWin::SetToolTipWinText(&v9->baseclass_0.baseclass_0, v10);
    ((void (__thiscall *)(mhMinimizeDiceGameWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.1,
      0.30000001);
    v15 = -1;
    if ( spNode.m_pObject )
    {
      v11 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v11 )
          v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      }
    }
    result = 1;
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeMinButton.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v15 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00714CB0) --------------------------------------------------------
void __thiscall mhDiceHelpWin::OnCommand(mhDiceHelpWin *this, unsigned int wParam, int lParam)
{
  mhDiceHelpWin *v3; // edi@1
  MHDiceGameTask **v4; // eax@3
  unsigned int v5; // esi@4

  v3 = this;
  switch ( wParam )
  {
    case 0u:
    case 1u:
      mhDiceHelpWin::CloseWin(this);
      break;
    case 2u:
      v4 = (MHDiceGameTask **)MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam);
      MHDiceGameTask::OpenDiceRateWin(*v4);
      if ( wParam )
      {
        v5 = wParam;
        if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
        {
          if ( v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        }
      }
      mhDiceHelpWin::CloseWin(v3);
      break;
    case 3u:
      mhDiceHelpWin::OnSlideBar(this);
      break;
    default:
      return;
  }
}

//----- (00714D90) --------------------------------------------------------
void __thiscall mhDiceRankWin::UpdateMedal(mhDiceRankWin *this)
{
  mhDiceRankWin *v1; // edi@1
  MHDiceGameTask *v2; // ecx@1
  bool v3; // bl@1
  MHDiceGameTask *v4; // esi@2
  int v5; // ebx@6
  int v6; // esi@6
  signed int v7; // edi@6
  SlideListWin *v8; // ecx@8
  int v9; // eax@8
  int v10; // edx@8
  int v11; // esi@9
  int v12; // eax@10
  int v13; // edi@11
  int v14; // ebx@12
  int v15; // eax@13
  int v16; // eax@17
  int v17; // edi@17
  int v18; // eax@17
  SlideListWin *v19; // edi@18
  int v20; // eax@18
  int v21; // ebx@19
  int v22; // ecx@20
  int v23; // edi@21
  int v24; // eax@25
  int v25; // ebx@25
  int v26; // eax@25
  mhDiceRankWin *v27; // ebx@26
  int v28; // ecx@27
  int v29; // eax@33
  int nViewStartIndex; // [sp+0h] [bp-28h]@8
  NiPointer<MHDiceGameTask> result; // [sp+8h] [bp-20h]@1
  int v32; // [sp+Ch] [bp-1Ch]@9
  int nPosX; // [sp+10h] [bp-18h]@18
  mhDiceRankWin *v34; // [sp+14h] [bp-14h]@1
  int i; // [sp+18h] [bp-10h]@8
  int v36; // [sp+24h] [bp-4h]@1

  v1 = this;
  v34 = this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v36 = 0;
  v3 = MHDiceGameTask::IsGambleMode(v2);
  v36 = -1;
  if ( result.m_pObject )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( !v3 )
  {
    v5 = (int)v1->m_pkSprRankSilver;
    v6 = (int)v1->m_pkSprRankSilver;
    v7 = 20;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 - 80) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 - 80) + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 240))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 80) + 256))(0);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 80) + 240))(0);
      v6 += 4;
      --v7;
    }
    while ( v7 );
    v8 = v34->m_pUserList;
    v9 = (int)((char *)v8->m_vecButList.baseclass_0._Mylast
             - *(_DWORD *)&v8->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]);
    nViewStartIndex = v8->m_nViewStartPos;
    v10 = 0;
    i = 0;
    if ( (v9 & 0xFFFFFFFC) > 0 )
    {
      v11 = v5;
      v32 = -432 - (_DWORD)v34;
      while ( 1 )
      {
        v12 = (signed int)((char *)v8->m_vecButList.baseclass_0._Mylast
                         - *(_DWORD *)&v8->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
        if ( v10 < (unsigned int)v12
          && (v13 = *(_DWORD *)(v11 + v32 + *(_DWORD *)&v8->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]),
              (*(_DWORD *)(v13 + 336) - *(_DWORD *)(v13 + 332)) >> 2)
          && (v14 = **(_DWORD **)(v13 + 332)) != 0 )
        {
          if ( v10 < v12 && v13 )
          {
            v16 = ((int (*)(void))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)();
            v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v13 + 164))(v13) + v16;
            v18 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 164))(v14);
            v10 = i;
            v15 = v17 + v18;
          }
          else
          {
            v15 = 0;
          }
        }
        else
        {
          v15 = 0;
        }
        nPosX = v15 + 10;
        v19 = v34->m_pUserList;
        v20 = (signed int)((char *)v19->m_vecButList.baseclass_0._Mylast
                         - *(_DWORD *)&v19->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
        if ( v10 < (unsigned int)v20
          && (v21 = *(_DWORD *)(v11 + v32 + *(_DWORD *)&v19->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]),
              (*(_DWORD *)(v21 + 336) - *(_DWORD *)(v21 + 332)) >> 2)
          && (v22 = **(_DWORD **)(v21 + 332)) != 0 )
        {
          if ( v10 < v20 && v21 )
          {
            v24 = (*(int (**)(void))(*(_DWORD *)v22 + 168))();
            v25 = (*(int (__thiscall **)(int))(*(_DWORD *)v21 + 168))(v21) + v24;
            v26 = ((int (__thiscall *)(SlideListWin *))v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v19);
            v10 = i;
            v23 = v25 + v26;
          }
          else
          {
            v23 = 0;
          }
        }
        else
        {
          v23 = 0;
        }
        v27 = v34;
        if ( v10 < v34->m_iMedalCnt[0] - nViewStartIndex )
          break;
        if ( v10 < v34->m_iMedalCnt[1] - nViewStartIndex )
        {
          (*(void (__stdcall **)(signed int))(**(_DWORD **)v11 + 256))(1);
          (*(void (__stdcall **)(int))(**(_DWORD **)v11 + 172))(nPosX);
          v28 = *(_DWORD *)v11;
          goto LABEL_32;
        }
        if ( v10 < v34->m_iMedalCnt[2] - nViewStartIndex )
        {
          (*(void (__stdcall **)(signed int))(**(_DWORD **)(v11 + 80) + 256))(1);
          (*(void (__stdcall **)(int))(**(_DWORD **)(v11 + 80) + 172))(nPosX);
          v28 = *(_DWORD *)(v11 + 80);
          goto LABEL_32;
        }
LABEL_33:
        v8 = v27->m_pUserList;
        ++v10;
        v29 = (signed int)((char *)v8->m_vecButList.baseclass_0._Mylast
                         - *(_DWORD *)&v8->m_vecButList.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
        v11 += 4;
        i = v10;
        if ( v10 >= v29 )
          return;
      }
      (*(void (__stdcall **)(signed int))(**(_DWORD **)(v11 - 80) + 256))(1);
      (*(void (__stdcall **)(int))(**(_DWORD **)(v11 - 80) + 172))(nPosX);
      v28 = *(_DWORD *)(v11 - 80);
LABEL_32:
      (*(void (__stdcall **)(int))(*(_DWORD *)v28 + 176))(v23);
      v10 = i;
      goto LABEL_33;
    }
  }
}

//----- (007150A0) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::OnCommand(MHDiceRewardMoneyWin *this, unsigned int wParam, int lParam)
{
  if ( wParam )
  {
    if ( wParam <= 2 )
      PgWin::PostMsg(&this->baseclass_0.baseclass_0.baseclass_0, &this->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
  }
  else
  {
    MHDiceRewardMoneyWin::OnCmdOk(this);
  }
}

//----- (007150D0) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::Open(MHDiceRewardMoneyWin *this, unsigned int uiOkMsg, unsigned int uiCancelMsg, char *pcText1, char *pcText2)
{
  MHDiceRewardMoneyWin *v5; // esi@1
  PgWinText *v6; // ecx@2
  PgWinText *v7; // ecx@5

  v5 = this;
  if ( pcText1 )
  {
    v6 = this->m_pkTitleText1.m_pObject;
    if ( v6 )
      ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText1);
  }
  if ( pcText2 )
  {
    v7 = v5->m_pkTitleText2.m_pObject;
    if ( v7 )
      ((void (__stdcall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(pcText2);
  }
  v5->m_uiOkMsg = uiOkMsg;
  v5->m_uiCancelMsg = uiCancelMsg;
  PgWinMgr::DoModal(&Pgg_kWinMgr, &v5->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
}

//----- (00715140) --------------------------------------------------------
bool __thiscall mhDiceRateSheetWin::Create(mhDiceRateSheetWin *this, PgFrameWork *pkFrameWork)
{
  mhDiceRateSheetWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // ecx@3
  NiNode *v6; // esi@7
  bool v7; // zf@8
  NiAVObject *v9; // eax@12
  NiProperty *v10; // eax@12
  NiProperty *v11; // edi@12
  NiRefObjectVtbl *v12; // eax@14
  void *v13; // eax@15
  PgSprData *v14; // eax@21
  int v15; // edi@27
  int v16; // ebx@27
  NiSourceTexture *v17; // eax@27
  PgSprData *v18; // eax@30
  PgFont *v19; // eax@32
  char *v20; // eax@32
  D3DXCOLOR v21; // ST234_16@32
  char *v22; // eax@32
  PgSprData *v23; // eax@32
  PgFont *v24; // ST238_4@32
  unsigned int v25; // ST234_4@32
  unsigned int v26; // eax@32
  char *v27; // eax@32
  PgSprData *v28; // eax@32
  PgFont *v29; // ST238_4@32
  unsigned int v30; // ST234_4@32
  unsigned int v31; // eax@32
  char *v32; // eax@32
  PgSprData *v33; // eax@32
  PgFont *v34; // ST238_4@32
  unsigned int v35; // ST234_4@32
  unsigned int v36; // eax@32
  char *v37; // eax@32
  PgSprData *v38; // eax@32
  PgFont *v39; // ST238_4@32
  unsigned int v40; // ST234_4@32
  unsigned int v41; // eax@32
  char *v42; // eax@32
  PgFont *v43; // eax@33
  char *v44; // eax@33
  PgFont *v45; // eax@34
  char *v46; // eax@34
  PgFont *v47; // eax@35
  char *v48; // eax@35
  PgFont *v49; // eax@36
  char *v50; // eax@36
  PgFont *v51; // eax@37
  char *v52; // eax@37
  PgFont *v53; // eax@38
  char *v54; // eax@38
  PgFont *v55; // eax@39
  char *v56; // eax@39
  PgFont *v57; // eax@40
  char *v58; // eax@40
  PgFont *v59; // eax@41
  char *v60; // eax@41
  PgFont *v61; // eax@42
  char *v62; // eax@42
  PgFont *v63; // eax@43
  char *v64; // eax@43
  PgFont *v65; // eax@44
  char *v66; // eax@44
  PgFont *v67; // eax@45
  char *v68; // eax@45
  PgFont *v69; // eax@46
  char *v70; // eax@46
  PgFont *v71; // eax@47
  char *v72; // eax@47
  PgFont *v73; // eax@48
  char *v74; // eax@48
  PgFont *v75; // eax@49
  char *v76; // eax@49
  PgFont *v77; // eax@50
  char *v78; // eax@50
  PgFont *v79; // eax@51
  char *v80; // eax@51
  PgFont *v81; // eax@52
  char *v82; // eax@52
  PgFont *v83; // eax@53
  char *v84; // eax@53
  PgFont *v85; // eax@54
  char *v86; // eax@54
  PgFont *v87; // eax@55
  char *v88; // eax@55
  PgFont *v89; // eax@56
  char *v90; // eax@56
  PgFont *v91; // eax@57
  char *v92; // eax@57
  PgFont *v93; // eax@58
  char *v94; // eax@58
  PgFont *v95; // eax@59
  char *v96; // eax@59
  PgFont *v97; // eax@60
  char *v98; // eax@60
  PgFont *v99; // eax@61
  char *v100; // eax@61
  PgFont *v101; // eax@62
  char *v102; // eax@62
  PgFont *v103; // eax@63
  PgWinText *v104; // edi@63
  NiRefObjectVtbl *v105; // ebx@63
  const char *v106; // [sp+238h] [bp-60h]@28
  int *v107; // [sp+23Ch] [bp-5Ch]@28
  int *v108; // [sp+240h] [bp-58h]@28
  NiSourceTexture *v109; // [sp+244h] [bp-54h]@28
  UIUtil ui; // [sp+258h] [bp-40h]@27
  NiRefObjectVtbl *v111; // [sp+26Ch] [bp-2Ch]@32
  NiSourceTexture *pkTexture; // [sp+270h] [bp-28h]@15
  NiPointer<NiTexturingProperty> spTexProp; // [sp+274h] [bp-24h]@12
  unsigned int uiWidth; // [sp+278h] [bp-20h]@30
  unsigned int uiHeight; // [sp+27Ch] [bp-1Ch]@30
  int uiLeft; // [sp+280h] [bp-18h]@21
  int uiTop; // [sp+284h] [bp-14h]@21
  NiPointer<NiNode> spNode; // [sp+288h] [bp-10h]@1
  int v119; // [sp+294h] [bp-4h]@1
  PgWinText *pkTextWin; // [sp+2A0h] [bp+8h]@32
  PgWin *pkTextWina; // [sp+2A0h] [bp+8h]@32
  PgWin *pkTextWinb; // [sp+2A0h] [bp+8h]@32
  PgWinText *pkTextWinc; // [sp+2A0h] [bp+8h]@32
  PgWin *pkTextWind; // [sp+2A0h] [bp+8h]@32
  PgWinText *pkTextWine; // [sp+2A0h] [bp+8h]@32
  PgWin *pkTextWinf; // [sp+2A0h] [bp+8h]@32
  PgWinText *pkTextWing; // [sp+2A0h] [bp+8h]@32
  PgWin *pkTextWinh; // [sp+2A0h] [bp+8h]@32
  PgWinText *pkTextWini; // [sp+2A0h] [bp+8h]@32
  PgWinText *pkTextWinj; // [sp+2A0h] [bp+8h]@33
  PgWinText *pkTextWink; // [sp+2A0h] [bp+8h]@34
  PgWinText *pkTextWinl; // [sp+2A0h] [bp+8h]@35
  PgWinText *pkTextWinm; // [sp+2A0h] [bp+8h]@36
  PgWinText *pkTextWinn; // [sp+2A0h] [bp+8h]@37
  PgWinText *pkTextWino; // [sp+2A0h] [bp+8h]@38
  PgWinText *pkTextWinp; // [sp+2A0h] [bp+8h]@39
  PgWinText *pkTextWinq; // [sp+2A0h] [bp+8h]@40
  PgWinText *pkTextWinr; // [sp+2A0h] [bp+8h]@41
  PgWinText *pkTextWins; // [sp+2A0h] [bp+8h]@42
  PgWinText *pkTextWint; // [sp+2A0h] [bp+8h]@43
  PgWinText *pkTextWinu; // [sp+2A0h] [bp+8h]@44
  PgWinText *pkTextWinv; // [sp+2A0h] [bp+8h]@45
  PgWinText *pkTextWinw; // [sp+2A0h] [bp+8h]@46
  PgWinText *pkTextWinx; // [sp+2A0h] [bp+8h]@47
  PgWinText *pkTextWiny; // [sp+2A0h] [bp+8h]@48
  PgWinText *pkTextWinz; // [sp+2A0h] [bp+8h]@49
  PgWinText *pkTextWinba; // [sp+2A0h] [bp+8h]@50
  PgWinText *pkTextWinbb; // [sp+2A0h] [bp+8h]@51
  PgWinText *pkTextWinbc; // [sp+2A0h] [bp+8h]@52
  PgWinText *pkTextWinbd; // [sp+2A0h] [bp+8h]@53
  PgWinText *pkTextWinbe; // [sp+2A0h] [bp+8h]@54
  PgWinText *pkTextWinbf; // [sp+2A0h] [bp+8h]@55
  PgWinText *pkTextWinbg; // [sp+2A0h] [bp+8h]@56
  PgWinText *pkTextWinbh; // [sp+2A0h] [bp+8h]@57
  PgWinText *pkTextWinbi; // [sp+2A0h] [bp+8h]@58
  PgWinText *pkTextWinbj; // [sp+2A0h] [bp+8h]@59
  PgWinText *pkTextWinbk; // [sp+2A0h] [bp+8h]@60
  PgWinText *pkTextWinbl; // [sp+2A0h] [bp+8h]@61
  PgWinText *pkTextWinbm; // [sp+2A0h] [bp+8h]@62

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v119 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameRateSheet.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\DiceGaemRateSheet.nif load fail", "LoadFail", 0);
      v5 = spNode.m_pObject;
    }
    v119 = -1;
    if ( !v5
      || (v6 = v5,
          InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_9;
  }
  v2->baseclass_0.m_pkFrameWork = pkFrameWork;
  v9 = (NiAVObject *)((int (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v10 = NiAVObject::GetProperty(v9, 8);
  v11 = v10;
  spTexProp.m_pObject = (NiTexturingProperty *)v10;
  if ( v10 )
    InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v12 = v11[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v119) = 1;
  if ( !v12 || (v13 = v12[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v13) == 0) )
  {
    LOBYTE(v119) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v6 = spNode.m_pObject;
    v119 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
    goto LABEL_9;
  }
  v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v13);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v14, 0, pkFrameWork, "DiceGaemRateSheet", 0) )
  {
    LOBYTE(v119) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v11->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v11->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v6 = spNode.m_pObject;
    v119 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      return 0;
    v7 = v6 == 0;
LABEL_9:
    if ( !v7 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    return 0;
  }
  v15 = uiLeft;
  v16 = uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v119) = 2;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v15, v16);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v17 = MenuTexMgr::GetTexture(0x13u);
  if ( v17 )
  {
    v109 = v17;
    v108 = &uiTop;
    v107 = &uiLeft;
    v106 = "Theme";
  }
  else
  {
    v109 = 0;
    v108 = &uiTop;
    v107 = &uiLeft;
    v106 = "Theme";
  }
  v18 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v106, v107, v108, v109);
  PgWinSpr::CreateWin(uiLeft - v15, uiTop - v16, v18, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Plane02", 0);
  if ( !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight)
    || (v19 = Font::Get(MAIN_MENU),
        pkTextWin = PgWinText::CreateWin(
                      uiLeft - v15,
                      uiTop - v16,
                      uiWidth,
                      uiHeight,
                      v19,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0),
        pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWin,
          1u),
        v111 = pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v20 = TextData2::Get(0x16313564u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWin, (unsigned int)v20),
        ((void (__stdcall *)(_DWORD))pkTextWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        UIUtil::CreateBtn(&ui, 0, "ClsNor", "ClsClick", "ClsOver", 0, 0),
        pkTextWina = (PgWin *)UIUtil::CreateBtn(&ui, 1u, "Btn01Nor", "Btn01Click", "Btn01Over", 0, 0),
        *(_QWORD *)&v21.r = *(_QWORD *)&Color::m_kDxWhiteColor,
        *(_QWORD *)&v21.b = *(_QWORD *)&Color::m_kDxWhiteColor.b,
        v22 = TextData2::Get(0x34361593u),
        UIUtil::CreateAttachedText(&ui, pkTextWina, v22, COERCE_D3DXCOLOR(v21.r), 5u),
        v23 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text_menu01", &uiLeft, &uiTop, pkTexture),
        pkTextWinb = (PgWin *)PgWinSpr::CreateWin(
                                uiLeft - v15,
                                uiTop - v16,
                                v23,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0),
        pkTextWinb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)pkTextWinb,
          0),
        v24 = Font::Get(0),
        v25 = ((int (*)(void))pkTextWinb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(),
        v26 = ((int (*)(void))pkTextWinb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(),
        pkTextWinc = PgWinText::CreateWin(0, 1, v26, v25, v24, pkTextWinb, 0, 0),
        pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinc,
          5u),
        v111 = pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v27 = TextData2::Get(0xAA926474u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinc, (unsigned int)v27),
        ((void (__stdcall *)(_DWORD))pkTextWinc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        v28 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text_menu02", &uiLeft, &uiTop, pkTexture),
        pkTextWind = (PgWin *)PgWinSpr::CreateWin(
                                uiLeft - v15,
                                uiTop - v16,
                                v28,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0),
        pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)pkTextWind,
          0),
        v29 = Font::Get(0),
        v30 = ((int (*)(void))pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(),
        v31 = ((int (*)(void))pkTextWind->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(),
        pkTextWine = PgWinText::CreateWin(0, 1, v31, v30, v29, pkTextWind, 0, 0),
        pkTextWine->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWine,
          5u),
        v111 = pkTextWine->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v32 = TextData2::Get(0xDFD0BEE9u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWine, (unsigned int)v32),
        ((void (__stdcall *)(_DWORD))pkTextWine->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        v33 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text_menu03", &uiLeft, &uiTop, pkTexture),
        pkTextWinf = (PgWin *)PgWinSpr::CreateWin(
                                uiLeft - v15,
                                uiTop - v16,
                                v33,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0),
        pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)pkTextWinf,
          0),
        v34 = Font::Get(0),
        v35 = ((int (*)(void))pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(),
        v36 = ((int (*)(void))pkTextWinf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(),
        pkTextWing = PgWinText::CreateWin(0, 1, v36, v35, v34, pkTextWinf, 0, 0),
        pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWing,
          5u),
        v111 = pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v37 = TextData2::Get(0x8DEAA2C7u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWing, (unsigned int)v37),
        ((void (__stdcall *)(_DWORD))pkTextWing->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        v38 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Text_menu04", &uiLeft, &uiTop, pkTexture),
        pkTextWinh = (PgWin *)PgWinSpr::CreateWin(
                                uiLeft - v15,
                                uiTop - v16,
                                v38,
                                &v2->baseclass_0.baseclass_0.baseclass_0,
                                0,
                                0),
        pkTextWinh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)pkTextWinh,
          0),
        v39 = Font::Get(0),
        v40 = ((int (*)(void))pkTextWinh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(),
        v41 = ((int (*)(void))pkTextWinh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(),
        pkTextWini = PgWinText::CreateWin(0, 1, v41, v40, v39, pkTextWinh, 0, 0),
        pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWini,
          5u),
        v111 = pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v42 = TextData2::Get(0x7E97C0C9u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWini, (unsigned int)v42),
        ((void (__stdcall *)(_DWORD))pkTextWini->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case01", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v43 = Font::Get(MAIN_MENU),
        pkTextWinj = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v43,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinj,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v44 = TextData2::Get(0x7495D5CEu),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinj, (unsigned int)v44),
        ((void (__stdcall *)(_DWORD))pkTextWinj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate01", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v45 = Font::Get(MAIN_MENU),
        pkTextWink = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v45,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWink,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v46 = TextData2::Get(0xF2F81C2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWink, (unsigned int)v46),
        ((void (__stdcall *)(_DWORD))pkTextWink->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case02", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v47 = Font::Get(MAIN_MENU),
        pkTextWinl = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v47,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinl,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v48 = TextData2::Get(0x8F6E81D2u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinl, (unsigned int)v48),
        ((void (__stdcall *)(_DWORD))pkTextWinl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate02", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v49 = Font::Get(MAIN_MENU),
        pkTextWinm = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v49,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinm,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v50 = TextData2::Get(0xF2F81C2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinm, (unsigned int)v50),
        ((void (__stdcall *)(_DWORD))pkTextWinm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case03", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v51 = Font::Get(MAIN_MENU),
        pkTextWinn = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v51,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinn,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v52 = TextData2::Get(0x7D7870E5u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinn, (unsigned int)v52),
        ((void (__stdcall *)(_DWORD))pkTextWinn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate03", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v53 = Font::Get(MAIN_MENU),
        pkTextWino = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v53,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWino,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v54 = TextData2::Get(0xF2F8232Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWino, (unsigned int)v54),
        ((void (__stdcall *)(_DWORD))pkTextWino->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case04", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v55 = Font::Get(MAIN_MENU),
        pkTextWinp = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v55,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinp,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v56 = TextData2::Get(0x354C7E7Bu),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinp, (unsigned int)v56),
        ((void (__stdcall *)(_DWORD))pkTextWinp->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate04", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v57 = Font::Get(MAIN_MENU),
        pkTextWinq = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v57,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinq,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v58 = TextData2::Get(0x222D1C2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinq, (unsigned int)v58),
        ((void (__stdcall *)(_DWORD))pkTextWinq->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case05", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v59 = Font::Get(MAIN_MENU),
        pkTextWinr = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v59,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinr,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v60 = TextData2::Get(0x94A5C5C3u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinr, (unsigned int)v60),
        ((void (__stdcall *)(_DWORD))pkTextWinr->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate05", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v61 = Font::Get(MAIN_MENU),
        pkTextWins = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v61,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWins->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWins,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWins->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWins->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v62 = TextData2::Get(0xF22C1D2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWins, (unsigned int)v62),
        ((void (__stdcall *)(_DWORD))pkTextWins->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case06", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v63 = Font::Get(MAIN_MENU),
        pkTextWint = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v63,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWint,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v64 = TextData2::Get(0x28164A15u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWint, (unsigned int)v64),
        ((void (__stdcall *)(_DWORD))pkTextWint->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate06", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v65 = Font::Get(MAIN_MENU),
        pkTextWinu = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v65,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinu,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v66 = TextData2::Get(0xF228202Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinu, (unsigned int)v66),
        ((void (__stdcall *)(_DWORD))pkTextWinu->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case07", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v67 = Font::Get(MAIN_MENU),
        pkTextWinv = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v67,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinv,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v68 = TextData2::Get(0x27164A16u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinv, (unsigned int)v68),
        ((void (__stdcall *)(_DWORD))pkTextWinv->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate07", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v69 = Font::Get(MAIN_MENU),
        pkTextWinw = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v69,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinw->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinw,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinw->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinw->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v70 = TextData2::Get(0xF2281E2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinw, (unsigned int)v70),
        ((void (__stdcall *)(_DWORD))pkTextWinw->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case08", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v71 = Font::Get(MAIN_MENU),
        pkTextWinx = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v71,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinx,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v72 = TextData2::Get(0x26164A17u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinx, (unsigned int)v72),
        ((void (__stdcall *)(_DWORD))pkTextWinx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate08", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v73 = Font::Get(MAIN_MENU),
        pkTextWiny = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v73,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWiny,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v74 = TextData2::Get(0xF2301C2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWiny, (unsigned int)v74),
        ((void (__stdcall *)(_DWORD))pkTextWiny->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case09", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v75 = Font::Get(MAIN_MENU),
        pkTextWinz = PgWinText::CreateWin(
                       uiLeft - v15,
                       uiTop - v16,
                       uiWidth,
                       uiHeight,
                       v75,
                       &v2->baseclass_0.baseclass_0.baseclass_0,
                       0,
                       0),
        pkTextWinz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinz,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v76 = TextData2::Get(0x25164A18u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinz, (unsigned int)v76),
        ((void (__stdcall *)(_DWORD))pkTextWinz->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate09", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v77 = Font::Get(MAIN_MENU),
        pkTextWinba = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v77,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinba->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinba,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinba->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinba->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v78 = TextData2::Get(0xF22A1C2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinba, (unsigned int)v78),
        ((void (__stdcall *)(_DWORD))pkTextWinba->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case10", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v79 = Font::Get(MAIN_MENU),
        pkTextWinbb = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v79,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbb,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v80 = TextData2::Get(0x24164A19u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbb, (unsigned int)v80),
        ((void (__stdcall *)(_DWORD))pkTextWinbb->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate10", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v81 = Font::Get(MAIN_MENU),
        pkTextWinbc = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v81,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbc,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v82 = TextData2::Get(0xF2F8232Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbc, (unsigned int)v82),
        ((void (__stdcall *)(_DWORD))pkTextWinbc->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case11", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v83 = Font::Get(MAIN_MENU),
        pkTextWinbd = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v83,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbd,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v84 = TextData2::Get(0x32064E66u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbd, (unsigned int)v84),
        ((void (__stdcall *)(_DWORD))pkTextWinbd->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate11", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v85 = Font::Get(MAIN_MENU),
        pkTextWinbe = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v85,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbe,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v86 = TextData2::Get(0xF2F8212Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbe, (unsigned int)v86),
        ((void (__stdcall *)(_DWORD))pkTextWinbe->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case12", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v87 = Font::Get(MAIN_MENU),
        pkTextWinbf = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v87,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbf,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v88 = TextData2::Get(0x2E507E74u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbf, (unsigned int)v88),
        ((void (__stdcall *)(_DWORD))pkTextWinbf->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate12", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v89 = Font::Get(MAIN_MENU),
        pkTextWinbg = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v89,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbg,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v90 = TextData2::Get(0xF2F8202Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbg, (unsigned int)v90),
        ((void (__stdcall *)(_DWORD))pkTextWinbg->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case13", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v91 = Font::Get(MAIN_MENU),
        pkTextWinbh = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v91,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbh,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v92 = TextData2::Get(0x96F0BDDDu),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbh, (unsigned int)v92),
        ((void (__stdcall *)(_DWORD))pkTextWinbh->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate13", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v93 = Font::Get(MAIN_MENU),
        pkTextWinbi = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v93,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbi->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbi,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbi->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbi->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v94 = TextData2::Get(0xF2F81C2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbi, (unsigned int)v94),
        ((void (__stdcall *)(_DWORD))pkTextWinbi->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case14", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v95 = Font::Get(MAIN_MENU),
        pkTextWinbj = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v95,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbj,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v96 = TextData2::Get(0x9BF0C7E6u),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbj, (unsigned int)v96),
        ((void (__stdcall *)(_DWORD))pkTextWinbj->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate14", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v97 = Font::Get(MAIN_MENU),
        pkTextWinbk = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v97,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbk,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v98 = TextData2::Get(0xF2F81D2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbk, (unsigned int)v98),
        ((void (__stdcall *)(_DWORD))pkTextWinbk->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_case15", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v99 = Font::Get(MAIN_MENU),
        pkTextWinbl = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v99,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbl,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v100 = TextData2::Get(0x88F0C4DBu),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbl, (unsigned int)v100),
        ((void (__stdcall *)(_DWORD))pkTextWinbl->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_rate15", &uiLeft, &uiTop, &uiWidth, &uiHeight))
    || (v101 = Font::Get(MAIN_MENU),
        pkTextWinbm = PgWinText::CreateWin(
                        uiLeft - v15,
                        uiTop - v16,
                        uiWidth,
                        uiHeight,
                        v101,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0),
        pkTextWinbm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
          (NiRefObject *)pkTextWinbm,
          1u),
        ((void (__stdcall *)(__int64 *))pkTextWinbm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(&Color::m_kDxWinTitleColor),
        v111 = pkTextWinbm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr,
        v102 = TextData2::Get(0xF2F81E2Du),
        v111[118].__vecDelDtor((NiRefObject *)pkTextWinbm, (unsigned int)v102),
        ((void (__stdcall *)(_DWORD))pkTextWinbm->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0),
        !PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text_caseNum", &uiLeft, &uiTop, &uiWidth, &uiHeight)) )
  {
    LOBYTE(v119) = 1;
    UIUtil::_UIUtil(&ui);
    LOBYTE(v119) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v119 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    return 0;
  }
  v103 = Font::Get(MAIN_MENU);
  v104 = PgWinText::CreateWin(
           uiLeft - v15,
           uiTop - v16,
           uiWidth,
           uiHeight,
           v103,
           &v2->baseclass_0.baseclass_0.baseclass_0,
           0,
           0);
  ((void (__thiscall *)(PgWinText *))v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(v104);
  ((void (__thiscall *)(PgWinText *))v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v104);
  v105 = v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  TextData2::Get(0xE7F2D5E8u);
  ((void (__thiscall *)(PgWinText *))v105[118].__vecDelDtor)(v104);
  ((void (__thiscall *)(PgWinText *))v104->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v104);
  ((void (__thiscall *)(mhDiceRateSheetWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.1,
    0.30000001);
  LOBYTE(v119) = 1;
  UIUtil::_UIUtil(&ui);
  LOBYTE(v119) = 0;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
  v119 = -1;
  NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
  return 1;
}
// A746E0: using guessed type __int64 Color__m_kDxWinTitleColor;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00716D20) --------------------------------------------------------
void __thiscall GambleDiceGameWin::OnCommand(GambleDiceGameWin *this, unsigned int wParam, int lParam)
{
  GambleDiceGameWin *v3; // esi@1
  MHDiceGameTask *v4; // ecx@8
  MHDiceGameTask *v5; // ecx@10
  MHDiceGameTask *v6; // ecx@11
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@11
  int v8; // [sp+Ch] [bp-4h]@8

  v3 = this;
  if ( (unsigned __int8)((int (*)(void))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
  {
    switch ( wParam )
    {
      case 0x34u:
        GambleDiceGameWin::OnBettingAmount(v3, 0x34u, 0);
        break;
      case 0x35u:
        GambleDiceGameWin::OnBettingAmount(v3, 0x35u, BLM_500_COIN);
        break;
      case 0x36u:
        GambleDiceGameWin::OnBettingAmount(v3, 0x36u, BLM_1000_COIN);
        break;
      case 0x37u:
        GambleDiceGameWin::OnBettingAmount(v3, 0x37u, BLM_10000_COIN);
        break;
      case 0x38u:
        GambleDiceGameWin::OnBettingAmount(v3, 0x38u, BLM_MAX_COIN);
        break;
      case 0x39u:
        v4 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam)->m_pObject;
        MHDiceGameTask::NcGambleDiceTaisaiGameLeaveReq(v4);
        v8 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&wParam);
        break;
      case 0x3Au:
        GambleDiceGameWin::OnMinimalize(v3);
        break;
      case 0x3Bu:
        v5 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&lParam)->m_pObject;
        MHDiceGameTask::NcGambleDiceTaisaiAllRankReq(v5);
        v8 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&lParam);
        break;
      case 0x3Cu:
        v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
        v8 = 2;
        MHDiceGameTask::OpenHelpWin(v6);
        v8 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&result);
        break;
      case 0u:
      case 1u:
      case 2u:
      case 3u:
      case 4u:
      case 5u:
      case 6u:
      case 7u:
      case 8u:
      case 9u:
      case 0xAu:
      case 0xBu:
      case 0xCu:
      case 0xDu:
      case 0xEu:
      case 0xFu:
      case 0x10u:
      case 0x11u:
      case 0x12u:
      case 0x13u:
      case 0x14u:
      case 0x15u:
      case 0x16u:
      case 0x17u:
      case 0x18u:
      case 0x19u:
      case 0x1Au:
      case 0x1Bu:
      case 0x1Cu:
      case 0x1Du:
      case 0x1Eu:
      case 0x1Fu:
      case 0x20u:
      case 0x21u:
      case 0x22u:
      case 0x23u:
      case 0x24u:
      case 0x25u:
      case 0x26u:
      case 0x27u:
      case 0x28u:
      case 0x29u:
      case 0x2Au:
      case 0x2Bu:
      case 0x2Cu:
      case 0x2Du:
      case 0x2Eu:
      case 0x2Fu:
      case 0x30u:
      case 0x31u:
      case 0x32u:
      case 0x33u:
        GambleDiceGameWin::OnBettingButton(v3, wParam, lParam != 0);
        break;
      default:
        return;
    }
  }
}

//----- (00716F60) --------------------------------------------------------
void __thiscall GambleDiceGameWin::AllReset(GambleDiceGameWin *this)
{
  GambleDiceGameWin *v1; // ebx@1
  char *v2; // esi@1
  signed int v3; // edi@1
  int v4; // eax@3
  int v5; // esi@3
  signed int v6; // edi@3
  unsigned int v7; // ebx@6
  unsigned int v8; // edi@6
  unsigned __int64 v9; // kr00_8@6
  int v10; // esi@7
  GambleDiceGameWin *v11; // eax@10
  bool v12; // sf@11
  int v13; // esi@11
  signed __int64 v14; // kr08_8@11
  GambleDiceGameWin *v15; // ebx@15
  MHDiceGameTask *v16; // edi@16
  MHDiceGameTask *v17; // esi@17
  int v18; // esi@23
  int v19; // edi@24
  int i; // [sp+14h] [bp-18h]@6
  NiPointer<MHDiceGameTask> result; // [sp+18h] [bp-14h]@10
  GambleDiceGameWin *v22; // [sp+1Ch] [bp-10h]@1
  int v23; // [sp+28h] [bp-4h]@6

  v1 = this;
  v22 = this;
  v2 = (char *)this->m_spBettingBut;
  v3 = 52;
  do
  {
    *(_DWORD *)(*(_DWORD *)v2 + 332) = 0;
    *(_BYTE *)(*(_DWORD *)v2 + 328) = 0;
    BettingBut::SetButtonSpr(*(BettingBut **)v2, 0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 276))(1.0);
    (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 52) + 256))(0);
    PgWin::RemoveAllChildWin(*((PgWin **)v2 + 52));
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v4 = 0;
  LODWORD(v1->m_nUserBettingMoney) = 0;
  HIDWORD(v1->m_nUserBettingMoney) = 0;
  LODWORD(v1->m_nTempBettingMoeny) = 0;
  HIDWORD(v1->m_nTempBettingMoeny) = 0;
  v5 = (int)v1->m_spShareNumSpr;
  v6 = 7;
  while ( 1 )
  {
    (*(void (__stdcall **)(int))(**(_DWORD **)(v5 - 56) + 492))(v4);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 492))(0);
    v5 += 4;
    --v6;
    if ( !v6 )
      break;
    v4 = 0;
  }
  MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&i);
  v23 = 0;
  v9 = User::Coin(&g_kUser);
  v7 = HIDWORD(v9);
  v8 = v9;
  v23 = -1;
  if ( i )
  {
    v10 = i;
    if ( !InterlockedDecrement((volatile LONG *)(i + 4)) )
    {
      if ( v10 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
    }
  }
  v11 = v22;
  LODWORD(v22->m_nInvenRemainMoney) = v9;
  HIDWORD(v11->m_nInvenRemainMoney) = HIDWORD(v9);
  i = 11;
  result.m_pObject = (MHDiceGameTask *)&v11->m_spMyBetNumSpr[11];
  while ( 1 )
  {
    v13 = (signed __int64)__PAIR__(v7, v8) % 10;
    v12 = (signed int)((signed __int64)__PAIR__(v7, v8) % 10) < 0;
    v14 = (signed __int64)__PAIR__(v7, v8) / 10;
    v7 = (unsigned __int64)((signed __int64)__PAIR__(v7, v8) / 10) >> 32;
    v8 = v14;
    if ( v12 )
      v13 = 0;
    (*((void (__stdcall **)(_DWORD))result.m_pObject->baseclass_0.baseclass_0.vfptr->__vecDelDtor + 123))(v13);
    if ( !(v7 | (unsigned int)v14) )
      break;
    result.m_pObject = (MHDiceGameTask *)((char *)result.m_pObject - 4);
    --i;
    if ( i < 0 )
      goto LABEL_15;
  }
  v18 = i - 1;
  if ( i - 1 < 0 )
  {
LABEL_15:
    v15 = v22;
    goto LABEL_16;
  }
  v15 = v22;
  v19 = (int)&v22->m_spMyBetNumSpr[v18];
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v19 + 492))(0);
    v19 -= 4;
    --v18;
  }
  while ( v18 >= 0 );
LABEL_16:
  v16 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v17 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v17 )
        v17->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v17, 1u);
    }
  }
  if ( v16 )
  {
    LODWORD(v16->m_nInvenRemainMoney) = LODWORD(v15->m_nInvenRemainMoney);
    HIDWORD(v16->m_nInvenRemainMoney) = HIDWORD(v15->m_nInvenRemainMoney);
  }
  v15->m_uiSuccessNum = 0;
  v15->m_fDiceAniTime = 0.0;
  *(_DWORD *)&v15->m_bResultDiceAni = 0;
  v15->m_fRewardTime = 0.0;
  v15->m_fResultTime = 0.0;
}

//----- (007171B0) --------------------------------------------------------
void __thiscall GambleDiceGameWin::ShowResult(GambleDiceGameWin *this, DICE_TAISAI_BETTING index, bool IsSuccess, bool IsNonBetting)
{
  GambleDiceGameWin *v4; // esi@1
  BettingBut *v5; // eax@4
  BettingBut *v6; // eax@4
  BettingBut *v7; // ebx@4
  float v8; // ST28_4@4
  float v9; // ST2C_4@4
  float v10; // ST18_4@4
  float v11; // ST1C_4@4
  NiAVObject *v12; // esi@11
  float v13; // eax@11
  unsigned int IsSuccessa; // [sp+3Ch] [bp+Ch]@4
  NiNode *IsNonBettinga; // [sp+40h] [bp+10h]@4

  v4 = this;
  if ( IsNonBetting )
  {
    this->m_spBettingBut[index].m_pObject->m_bHighlight = 0;
    BettingBut::SetButtonSpr(this->m_spBettingBut[index].m_pObject, 2u);
    v4->m_spBettingBut[index].m_pObject->m_eBetState = 4;
  }
  else
  {
    if ( IsSuccess )
    {
      this->m_spBettingBut[index].m_pObject->m_bHighlight = 1;
      v5 = this->m_spBettingBut[index].m_pObject;
      v5->m_eBetState = 2;
      v5->m_bIsSwitched = 1;
      v5->m_uiNextSprIdx = 1;
      BettingBut::SetButtonSpr(this->m_spBettingBut[index].m_pObject, 1u);
      v6 = v4->m_spBettingBut[index].m_pObject;
      v7 = v4->m_spBettingBut[index].m_pObject;
      v8 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.y;
      v9 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.z;
      IsNonBettinga = v4->m_pkResultEffectList[v4->m_uiSuccessNum]->m_spEffect.m_pObject;
      v10 = (double)((unsigned int)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v4->m_spBettingBut[index].m_pObject) >> 1)
          + v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kLocal.m_Translate.x;
      IsSuccessa = (unsigned int)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v7) >> 1;
      IsNonBettinga->baseclass_0.m_kLocal.m_Translate.x = v10;
      v11 = (double)IsSuccessa + v8;
      IsNonBettinga->baseclass_0.m_kLocal.m_Translate.y = v11;
      IsNonBettinga->baseclass_0.m_kLocal.m_Translate.z = v9;
      SpEffect::Start(v4->m_pkResultEffectList[v4->m_uiSuccessNum], v4->m_pRunEffect.m_pObject);
      if ( (signed int)index > 9 && (signed int)index < 19 || index == 29 || index == 30 )
      {
        if ( !v4->m_bIsHappendBigPot )
          v4->m_bIsHappendBigPot = 1;
      }
      ++v4->m_uiSuccessNum;
    }
    else
    {
      this->m_spBettingBut[index].m_pObject->m_bHighlight = 0;
      v12 = (NiAVObject *)this->m_spBettingBut[index].m_pObject;
      v13 = v12[1].m_kWorld.m_Rotate.m_pEntry[0][2];
      v12[1].m_kPropertyList.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,NiPointer<NiProperty> >Vtbl *)3;
      BYTE1(v12[1].m_spCollisionObject.m_pObject) = 0;
      v12[2].baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)2;
      if ( *(_DWORD *)(LODWORD(v13) + 24) <= 2u || !*(_DWORD *)(*(_DWORD *)(LODWORD(v13) + 16) + 8) )
      {
        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v12->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
          v12,
          0,
          1);
        NiAVObject::Update(v12, 0.0, 0);
        NiAVObject::UpdateProperties(v12);
      }
    }
  }
}

//----- (00717390) --------------------------------------------------------
void __thiscall GambleDiceGameWin::UpdateTimeText(GambleDiceGameWin *this, float fRemainTime, bool IsShow)
{
  int v3; // edi@0
  GambleDiceGameWin *v4; // esi@1
  PgWinText *v5; // ecx@5
  PgWinText *v6; // esi@8
  int v7; // ST08_4@8
  NiRefObjectVtbl *v8; // edi@8
  char *v9; // eax@8
  char *v10; // eax@8
  PgWinText *v11; // ecx@10
  D3DXCOLOR *v12; // [sp-8h] [bp-Ch]@6
  signed int fRemainTimea; // [sp+Ch] [bp+8h]@4

  v4 = this;
  if ( IsShow )
  {
    if ( fRemainTime < 0.0 )
      fRemainTime = 0.0;
    ((void (__stdcall *)(signed int))this->m_spTimeCountText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    fRemainTimea = (signed int)fRemainTime;
    if ( (_WORD)fRemainTimea != v4->m_uiCurrentTime )
    {
      v5 = v4->m_spTimeCountText.m_pObject;
      v4->m_uiCurrentTime = fRemainTimea;
      if ( (unsigned __int16)fRemainTimea <= 0xAu )
        v12 = &Color::m_kDxRedColor;
      else
        v12 = &Color::m_kDxWhiteColor;
      ((void (__cdecl *)(D3DXCOLOR *))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[117].__vecDelDtor)(v12);
      v6 = v4->m_spTimeCountText.m_pObject;
      v7 = v3;
      v8 = v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v9 = TextData2::Get(0xF2E7153Eu);
      v10 = fs(v9);
      ((void (__thiscall *)(PgWinText *, char *, int))v8[118].__vecDelDtor)(v6, v10, v7);
    }
  }
  else
  {
    v11 = this->m_spTimeCountText.m_pObject;
    if ( v11 )
      ((void (__stdcall *)(_DWORD))v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
  }
}
// 717390: could not find valid save-restore pair for edi

//----- (00717470) --------------------------------------------------------
void __thiscall GambleDiceGameWin::DiceAnimationStart(GambleDiceGameWin *this, unsigned int *AniCode)
{
  GambleDiceGameWin *v2; // esi@1
  NiRefObjectVtbl *v3; // eax@1
  float v4; // ST14_4@1
  double v5; // st7@1
  NiNode *v6; // eax@1
  float v7; // ST18_4@1
  float v8; // ST20_4@1
  float v9; // ST24_4@1
  signed int v10; // edi@1
  int v11; // esi@1

  v2 = this;
  v3 = this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  this->m_fResultTime = 0.1;
  v4 = (double)((int (*)(void))v3[41].__vecDelDtor)();
  v5 = (double)((int (__thiscall *)(GambleDiceGameWin *))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor)(v2);
  v6 = v2->m_pkDiceRollEffect->m_spEffect.m_pObject;
  v7 = v5;
  v8 = v4 + 540.0;
  v6->baseclass_0.m_kLocal.m_Translate.x = v8;
  v9 = v7 - 420.0;
  v6->baseclass_0.m_kLocal.m_Translate.y = v9;
  v6->baseclass_0.m_kLocal.m_Translate.z = 1000.0;
  PgWinMgr::StartFullScreenEffect(
    &Pgg_kWinMgr,
    Timer::ms_fCurTime,
    (NiAVObject *)v2->m_pkDiceRollEffect->m_spEffect.m_pObject);
  SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceRoll_Pair);
  v2->m_AniActor[0].m_NextAni = *AniCode;
  v2->m_AniActor[1].m_NextAni = AniCode[1];
  v2->m_AniActor[2].m_NextAni = AniCode[2];
  v10 = 0;
  v11 = (int)v2->m_spResultDice;
  do
  {
    (*(void (__stdcall **)(unsigned int))(**(_DWORD **)v11 + 492))(AniCode[v10++] / 0x64 - 1);
    v11 += 4;
  }
  while ( v10 < 3 );
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00717570) --------------------------------------------------------
void __thiscall GambleDiceGameWin::SetMarkButton(GambleDiceGameWin *this, DICE_TAISAI_BETTING nPos, BET_STATE bState, bool IsMark)
{
  GambleDiceGameWin *v4; // esi@1

  v4 = this;
  BettingBut::SetBettingState(this->m_spBettingBut[nPos].m_pObject, bState);
  v4->m_spBettingBut[nPos].m_pObject->m_bHighlight = IsMark;
  if ( !bState )
    BettingBut::SetButtonSpr(v4->m_spBettingBut[nPos].m_pObject, 0);
}

//----- (007175C0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::UpdateMeWin(MiniHouseDiceGameWin *this, float fCurTime)
{
  MiniHouseDiceGameWin *v2; // ebx@1
  bool v3; // zf@1
  double v4; // st7@3
  DICE_TAISAI_GAME_STATUS v5; // esi@4
  MHDiceGameTask *v6; // edi@5
  SpEffect **v7; // esi@15
  signed int v8; // edi@15
  MHDiceGameTask *v9; // esi@20
  int v10; // esi@25
  signed int v11; // edi@25
  signed int v12; // eax@33
  NiRefObjectVtbl *v13; // edx@33
  double v14; // st7@33
  void *(__thiscall *v15)(NiRefObject *, unsigned int); // eax@33
  NiNode *v16; // eax@33
  double v17; // st7@33
  NiActorManager *v18; // eax@36
  NiNode *v19; // eax@37
  NiActorManager *v20; // eax@40
  NiNode *v21; // eax@41
  NiActorManager *v22; // eax@44
  NiNode *v23; // eax@45
  int v24; // edi@47
  float v25; // ecx@48
  int v26; // esi@48
  float v27; // eax@48
  int v28; // edx@48
  int (__thiscall *v29)(_DWORD); // eax@48
  NiAVObject *v30; // ebx@48
  int v31; // eax@48
  float v32; // ecx@48
  int v33; // esi@48
  float v34; // edx@48
  float v35; // eax@48
  void *(__thiscall *v36)(NiRefObject *, unsigned int); // edx@48
  NiAVObject *v37; // eax@48
  NiAVObject *v38; // esi@48
  float v39; // eax@48
  float v40; // ecx@48
  MiniHouseDiceGameWin *v41; // esi@53
  unsigned int v42; // ecx@53
  unsigned int v43; // edi@53
  signed int v44; // eax@55
  int v45; // ecx@66
  unsigned int v46; // ebx@68
  signed int v47; // edi@68
  int v48; // esi@69
  signed __int64 v49; // kr00_8@69
  int v50; // esi@74
  int v51; // edi@75
  int v52; // ebx@79
  int v53; // esi@80
  int v54; // ecx@84
  MHDiceGameTask *v55; // edi@86
  int v56; // esi@92
  signed int v57; // edi@92
  DICE_TAISAI_BETTING v58; // edi@94
  PgWin **v59; // esi@94
  void (*v60)(void); // eax@95
  MHDiceGameTask *v61; // ecx@96
  MHDiceGameTask *v62; // ebx@97
  char *v63; // eax@100
  MiniHouseDiceGameWin *v64; // edi@106
  unsigned int v65; // ecx@106
  unsigned int v66; // esi@106
  int v67; // eax@107
  int v68; // ecx@108
  MiniHouseDiceGameWin *v69; // eax@110
  signed int v70; // edi@110
  unsigned int v71; // ebx@110
  int v72; // esi@111
  signed __int64 v73; // kr08_8@111
  int v74; // esi@116
  int v75; // edi@117
  __int64 v76; // qax@119
  unsigned int v77; // esi@119
  bool v78; // cf@119
  int v79; // esi@119
  int v80; // ebx@119
  bool v81; // sf@120
  int v82; // edi@120
  signed __int64 v83; // kr10_8@120
  int v84; // esi@125
  int v85; // edi@126
  MiniHouseDiceGameWin *v86; // esi@128
  double v87; // st7@129
  float v88; // ecx@132
  int v89; // eax@134
  int v90; // esi@137
  unsigned int *v91; // edi@138
  int v92; // ebx@139
  int v93; // edi@139
  int v94; // ecx@143
  int v95; // esi@147
  int v96; // edi@147
  signed int v97; // ebx@147
  int v98; // eax@149
  MiniHouseDiceGameWin *v99; // ebx@152
  MHChipEffect *v100; // esi@152
  NiNode *v101; // ecx@156
  float v102; // edi@158
  SpEffect *v103; // ecx@162
  float v104; // [sp+6Ch] [bp-74h]@1
  NiQuaternion thisa; // [sp+7Ch] [bp-64h]@48
  NiPoint3 vPos; // [sp+8Ch] [bp-54h]@33
  bool v107; // [sp+9Bh] [bp-45h]@19
  float v108; // [sp+9Ch] [bp-44h]@48
  float v109; // [sp+A0h] [bp-40h]@33
  float i; // [sp+A4h] [bp-3Ch]@33
  MiniHouseDiceGameWin *v111; // [sp+A8h] [bp-38h]@1
  NiPointer<MHDiceGameTask> result; // [sp+ACh] [bp-34h]@3
  void *v113; // [sp+B0h] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > BettingInfo; // [sp+B4h] [bp-2Ch]@48
  unsigned int v115; // [sp+D0h] [bp-10h]@1
  int v116; // [sp+DCh] [bp-4h]@96
  int v117; // [sp+E0h] [bp+0h]@1

  v115 = (unsigned int)&v117 ^ __security_cookie;
  LODWORD(v104) = (unsigned int)&v117 ^ __security_cookie;
  v2 = this;
  v3 = this->m_bIsResetTimer == 0;
  v111 = this;
  if ( v3 )
  {
    this->m_DiceTimer.m_fStartTime = fCurTime;
    this->m_DiceTimer.m_fObjectTime = 0.0;
    this->m_DiceTimer.m_fElapsedTime = 0.0;
    this->m_bIsResetTimer = 1;
  }
  else
  {
    *(float *)&v113 = this->m_DiceTimer.m_fObjectTime;
    *(float *)&result.m_pObject = fCurTime - this->m_DiceTimer.m_fStartTime;
    v4 = *(float *)&result.m_pObject;
    this->m_DiceTimer.m_fObjectTime = *(float *)&result.m_pObject;
    this->m_DiceTimer.m_fElapsedTime = v4 - *(float *)&v113;
  }
  v5 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eDiceSaiGameStatus;
  if ( *(float *)&result.m_pObject != 0.0 )
  {
    v6 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v6 )
        v6->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    }
  }
  if ( v5 != 1 )
  {
    if ( v5 )
    {
      if ( v5 == 2 )
      {
        v2->m_nTempBettingMoeny = 0;
        v2->m_nUserBettingMoney = 0;
      }
      else
      {
        if ( v5 == 3 )
        {
          if ( 0.0 != v2->m_fResultTime )
            v2->m_fResultTime = v2->m_DiceTimer.m_fElapsedTime + v2->m_fResultTime;
          v7 = v2->m_pkResultEffectList;
          v8 = 10;
          do
          {
            if ( (*v7)->m_bLive )
              SpEffect::Update(*v7, fCurTime);
            ++v7;
            --v8;
          }
          while ( v8 );
          v107 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_bComeinMHOnResultStauts;
          if ( *(float *)&result.m_pObject != 0.0 )
          {
            v9 = result.m_pObject;
            if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v9 )
                v9->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
            }
          }
          if ( v107 )
          {
            MiniHouseDiceGameWin::AllReset(v2);
          }
          else
          {
            v10 = (int)v2->m_spBettingBut;
            v11 = 52;
            do
            {
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v10 + 324))(LODWORD(fCurTime));
              v10 += 4;
              --v11;
            }
            while ( v11 );
          }
          if ( v2->m_bResultDiceAni )
            v2->m_fRewardTime = v2->m_DiceTimer.m_fElapsedTime + v2->m_fRewardTime;
          if ( v2->m_fRewardTime > 2.5 && !v2->m_bRewardAni )
          {
            v3 = v2->m_nUserBettingMoney == 0;
            v2->m_bRewardAni = 1;
            if ( !v3 )
            {
              if ( v2->m_bIsHappendBigPot )
              {
                v12 = ((int (__cdecl *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(LODWORD(v104));
                v13 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                result.m_pObject = (MHDiceGameTask *)v12;
                v14 = (double)v12;
                v15 = v13[42].__vecDelDtor;
                v109 = v14;
                result.m_pObject = (MHDiceGameTask *)((int (__thiscall *)(MiniHouseDiceGameWin *))v15)(v2);
                v16 = v2->m_pBigpotEff.m_pObject;
                i = (double)(signed int)result.m_pObject;
                vPos.x = v109 + 540.0;
                v17 = i;
                LODWORD(v16->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)vPos.x;
                vPos.y = v17 - 420.0;
                v16->baseclass_0.m_kLocal.m_Translate.y = vPos.y;
                vPos.z = 1000.0;
                v16->baseclass_0.m_kLocal.m_Translate.z = 1000.0;
                PgWinMgr::StartFullScreenEffect(
                  &Pgg_kWinMgr,
                  Timer::ms_fCurTime,
                  &v2->m_pBigpotEff.m_pObject->baseclass_0);
                SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Dice_fanfare);
              }
              else
              {
                SpEffect::Start(v2->m_pkRewardEff, v2->m_pRunEffect.m_pObject);
              }
            }
            if ( v2->m_pkDice[0].m_bIsCanAnimation && (v18 = v2->m_pkDice[0].m_pActorMgr.m_pObject) != 0 )
              v19 = (NiNode *)v18->m_spNIFRoot.m_pObject;
            else
              v19 = v2->m_pkDice[0].m_pNiNode.m_pObject;
            v19->baseclass_0.m_uFlags |= 1u;
            if ( v2->m_pkDice[1].m_bIsCanAnimation && (v20 = v2->m_pkDice[1].m_pActorMgr.m_pObject) != 0 )
              v21 = (NiNode *)v20->m_spNIFRoot.m_pObject;
            else
              v21 = v2->m_pkDice[1].m_pNiNode.m_pObject;
            v21->baseclass_0.m_uFlags |= 1u;
            if ( v2->m_pkDice[2].m_bIsCanAnimation && (v22 = v2->m_pkDice[2].m_pActorMgr.m_pObject) != 0 )
              v23 = (NiNode *)v22->m_spNIFRoot.m_pObject;
            else
              v23 = v2->m_pkDice[2].m_pNiNode.m_pObject;
            v23->baseclass_0.m_uFlags |= 1u;
            v24 = (int)v2->m_spResultDicePos;
            v113 = (void *)3;
            do
            {
              (*(void (__stdcall **)(signed int, _DWORD))(**(_DWORD **)v24 + 256))(1, LODWORD(v104));
              LODWORD(v25) = *(_DWORD *)(*(_DWORD *)v24 + 88);
              v26 = *(_DWORD *)v24;
              LODWORD(v27) = *(_DWORD *)(*(_DWORD *)v24 + 96);
              LODWORD(vPos.y) = *(_DWORD *)(*(_DWORD *)v24 + 92);
              v28 = *(_DWORD *)v26;
              vPos.x = v25;
              vPos.z = v27;
              result.m_pObject = (MHDiceGameTask *)((unsigned int)(*(int (__thiscall **)(int))(v28 + 144))(v26) >> 1);
              v29 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v26 + 148);
              v108 = (double)(unsigned int)result.m_pObject + vPos.x;
              result.m_pObject = (MHDiceGameTask *)((unsigned int)v29(v26) >> 1);
              v30 = (NiAVObject *)v111->m_pRunEffect.m_pObject;
              v109 = (double)(unsigned int)result.m_pObject + vPos.y;
              i = vPos.z;
              NiQuaternion::NiQuaternion(
                (NiQuaternion *)&BettingInfo.baseclass_0.___u0._Bx._Buf[12],
                0.0,
                0.0,
                0.0,
                0.0);
              LODWORD(v32) = *(_DWORD *)(v31 + 4);
              v33 = *(_DWORD *)(v24 + 24);
              LODWORD(thisa.m_fW) = *(_DWORD *)v31;
              LODWORD(v34) = *(_DWORD *)(v31 + 8);
              LODWORD(v35) = *(_DWORD *)(v31 + 12);
              thisa.m_fY = v34;
              v36 = v30->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
              thisa.m_fZ = v35;
              v37 = *(NiAVObject **)v33;
              v104 = 0.0;
              thisa.m_fX = v32;
              v36(&v30->baseclass_0.baseclass_0.baseclass_0, (unsigned int)v37);
              NsEffect::SetEffectNode((NsEffect *)(v33 + 28), *(NiAVObject **)v33);
              NsEffect::Start((NsEffect *)(v33 + 28), Timer::ms_fCurTime);
              *(float *)(v33 + 16) = *(float *)(v33 + 40);
              CNSTimer_MarkCheck::ReSet((CNSTimer_MarkCheck *)(v33 + 4), Timer::ms_fCurTime, OVER);
              *(_BYTE *)(v33 + 64) = 1;
              NiAVObject::UpdateProperties(v30);
              NiAVObject::UpdateEffects(v30);
              NiQuaternion::ToRotation(&thisa, (NiMatrix3 *)(*(_DWORD *)v33 + 52));
              v38 = *(NiAVObject **)v33;
              v39 = v109;
              v40 = i;
              v38->m_kLocal.m_Translate.x = v108;
              v24 += 4;
              v3 = v113 == (void *)1;
              v113 = (char *)v113 - 1;
              v38->m_kLocal.m_Translate.y = v39;
              v38->m_kLocal.m_Translate.z = v40;
            }
            while ( !v3 );
            if ( !v111->m_bIsHappendBigPot )
              SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceFinalResult);
          }
          if ( v111->m_bRewardAni && v111->m_fRewardTime > 4.0 )
          {
            v41 = v111;
            v42 = v111->m_nTempBettingMoeny;
            v43 = v111->m_nUserBettingMoney;
            if ( v43 != v42 && !v111->m_bReverseCount )
            {
              v44 = abs(v43 - v42);
              if ( v44 <= 100000 )
              {
                if ( v44 <= 10000 )
                {
                  if ( v44 <= 1000 )
                  {
                    if ( v44 <= 100 )
                    {
                      if ( v44 > 10 )
                        v44 = 10;
                    }
                    else
                    {
                      v44 = 100;
                    }
                  }
                  else
                  {
                    v44 = 1000;
                  }
                }
                else
                {
                  v44 = 10000;
                }
              }
              else
              {
                v44 = 100000;
              }
              if ( v42 >= v43 )
                v45 = v42 - v44;
              else
                v45 = v44 + v42;
              v111->m_nTempBettingMoeny = v45;
              v46 = 0;
              v47 = v45;
              LODWORD(i) = 7;
              v113 = &v41->m_spShareNumSpr[7];
              while ( 1 )
              {
                v48 = v47 % 10;
                v49 = (signed __int64)__PAIR__(v46, v47) / 10;
                v46 = (unsigned __int64)((signed __int64)__PAIR__(v46, v47) / 10) >> 32;
                v47 = v49;
                if ( v48 < 0 )
                  v48 = 0;
                (*(void (__cdecl **)(int))(**(_DWORD **)v113 + 492))(v48);
                if ( !(v46 | (unsigned int)v49) )
                  break;
                v113 = (char *)v113 - 4;
                --LODWORD(i);
                if ( SLODWORD(i) < 0 )
                  goto LABEL_77;
              }
              v50 = LODWORD(i) - 1;
              if ( LODWORD(i) - 1 >= 0 )
              {
                v51 = (int)&v111->m_spShareNumSpr[v50];
                do
                {
                  (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v51 + 492))(0);
                  v51 -= 4;
                  --v50;
                }
                while ( v50 >= 0 );
              }
LABEL_77:
              if ( v111->m_nUserBettingMoney == v111->m_nTempBettingMoeny )
                v111->m_bReverseCount = 1;
            }
            v52 = (int)v111->m_pkDiceUpEff;
            v113 = (void *)3;
            do
            {
              v53 = *(_DWORD *)v52;
              if ( *(_BYTE *)(*(_DWORD *)v52 + 64)
                && !*(_BYTE *)(v53 + 65)
                && CNSTimer_MarkCheck::Update((CNSTimer_MarkCheck *)(v53 + 4), fCurTime) == 1
                && *(_DWORD *)v53 )
              {
                v54 = *(_DWORD *)(*(_DWORD *)v53 + 32);
                if ( v54 )
                {
                  (*(void (__stdcall **)(NiPointer<MHDiceGameTask> *, _DWORD))(*(_DWORD *)v54 + 120))(
                    &result,
                    *(_DWORD *)v53);
                  if ( *(float *)&result.m_pObject != 0.0 )
                  {
                    v55 = result.m_pObject;
                    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
                    {
                      if ( v55 )
                        v55->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
                    }
                  }
                }
                *(_BYTE *)(v53 + 64) = 0;
              }
              v52 += 4;
              v113 = (char *)v113 - 1;
            }
            while ( *(float *)&v113 != 0.0 );
          }
        }
      }
      goto LABEL_128;
    }
    v56 = (int)v2->m_spResultDicePos;
    v57 = 3;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v56 + 256))(0);
      v56 += 4;
      --v57;
    }
    while ( v57 );
  }
  v58 = 0;
  v59 = (PgWin **)v2->m_spBettingBut;
  do
  {
    v3 = ((int (__stdcall *)(int, int, _DWORD))(*v59)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
           PgWin::ms_iMsX.x,
           PgWin::ms_iMsY,
           LODWORD(v104)) == 0;
    v60 = (void (*)(void))v59[52]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor;
    if ( v3 )
    {
      v104 = 1.0;
      v60();
      LOBYTE((*v59)[1].baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.y) = 0;
      ((void (__stdcall *)(signed int))(*v59)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor)(4);
    }
    else
    {
      v104 = 0.30000001;
      v60();
      LOBYTE((*v59)[1].baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.y) = 1;
      v61 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
      v116 = 0;
      MHDiceGameTask::GetBettingInfo(v61, &BettingInfo, v58);
      LOBYTE(v116) = 2;
      if ( *(float *)&result.m_pObject != 0.0 )
      {
        v62 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v62 )
            v62->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v62, 1u);
        }
      }
      v63 = *(char **)&BettingInfo;
      if ( BettingInfo.baseclass_0._Myres < 0x10 )
        v63 = (char *)&BettingInfo;
      PgWin::SetToolTipWinText(*v59, v63);
      v116 = -1;
      if ( BettingInfo.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&BettingInfo);
    }
    ++v58;
    ++v59;
  }
  while ( (signed int)v58 < 52 );
  v64 = v111;
  v65 = v111->m_nTempBettingMoeny;
  v66 = v111->m_nUserBettingMoney;
  if ( v66 != v65 )
  {
    v67 = abs(v66 - v65);
    if ( v65 >= v66 )
      v68 = v65 - v67;
    else
      v68 = v67 + v65;
    v69 = v111;
    v111->m_nTempBettingMoeny = v68;
    v70 = v64->m_nTempBettingMoeny;
    v71 = 0;
    LODWORD(i) = 7;
    v113 = &v69->m_spBetNumSpr[7];
    while ( 1 )
    {
      v72 = v70 % 10;
      v73 = (signed __int64)__PAIR__(v71, v70) / 10;
      v71 = (unsigned __int64)((signed __int64)__PAIR__(v71, v70) / 10) >> 32;
      v70 = v73;
      if ( v72 < 0 )
        v72 = 0;
      (*(void (__cdecl **)(int))(**(_DWORD **)v113 + 492))(v72);
      if ( !(v71 | (unsigned int)v73) )
        break;
      v113 = (char *)v113 - 4;
      --LODWORD(i);
      if ( SLODWORD(i) < 0 )
        goto LABEL_119;
    }
    v74 = LODWORD(i) - 1;
    if ( LODWORD(i) - 1 >= 0 )
    {
      v75 = (int)&v111->m_spBetNumSpr[v74];
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v75 + 492))(0);
        v75 -= 4;
        --v74;
      }
      while ( v74 >= 0 );
    }
LABEL_119:
    v76 = User::GetMoney(&g_kUser);
    v77 = v76;
    LODWORD(v76) = v111;
    v78 = v77 < v111->m_nTempBettingMoeny;
    v79 = v77 - v111->m_nTempBettingMoeny;
    LODWORD(i) = 10;
    v80 = HIDWORD(v76) - v78;
    v111->m_nInvenRemainMoney = v79;
    v113 = (void *)(v76 + 1444);
    while ( 1 )
    {
      v82 = (signed __int64)__PAIR__(v80, v79) % 10;
      v81 = (signed int)((signed __int64)__PAIR__(v80, v79) % 10) < 0;
      v83 = (signed __int64)__PAIR__(v80, v79) / 10;
      v80 = (unsigned __int64)((signed __int64)__PAIR__(v80, v79) / 10) >> 32;
      v79 = v83;
      if ( v81 )
        v82 = 0;
      (*(void (__cdecl **)(int))(**(_DWORD **)v113 + 492))(v82);
      if ( !(v80 | (unsigned int)v83) )
        break;
      v113 = (char *)v113 - 4;
      --LODWORD(i);
      if ( SLODWORD(i) < 0 )
        goto LABEL_128;
    }
    v84 = LODWORD(i) - 1;
    if ( LODWORD(i) - 1 >= 0 )
    {
      v85 = (int)&v111->m_spMyBetNumSpr[v84];
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v85 + 492))(0);
        v85 -= 4;
        --v84;
      }
      while ( v84 >= 0 );
    }
  }
LABEL_128:
  v86 = v111;
  if ( v111->m_fResultTime > 0.1000000014901161 )
  {
    SpEffect::Update(v111->m_pkDiceRollEffect, fCurTime);
    *(float *)&result.m_pObject = v86->m_DiceTimer.m_fElapsedTime + v86->m_fDiceAniTime;
    v87 = *(float *)&result.m_pObject;
    v86->m_fDiceAniTime = *(float *)&result.m_pObject;
    if ( v87 > 1.659999966621399 )
    {
      if ( !v86->m_bResultDiceAni )
      {
        v86->m_bResultDiceAni = 1;
        v113 = &v86->m_AniActor[0].m_uiAniSeqID;
        LODWORD(i) = (char *)v86 + 508;
        result.m_pObject = (MHDiceGameTask *)3;
        do
        {
          v88 = i;
          if ( *(_BYTE *)(LODWORD(i) + 4) && *LODWORD(i) )
            v89 = *(_DWORD *)(*LODWORD(i) + 12);
          else
            v89 = *(_DWORD *)(LODWORD(i) - 4);
          *(_WORD *)(v89 + 28) &= 0xFFFEu;
          if ( *(_BYTE *)(LODWORD(v88) + 4) )
          {
            v90 = *LODWORD(i);
            if ( *LODWORD(i) )
            {
              v91 = (unsigned int *)v113;
              *(_WORD *)v113 = *((_WORD *)v113 + 1) + *((_WORD *)v113 + 2);
              NiActorManager::Reset((NiActorManager *)v90);
              NiActorManager::Update((NiActorManager *)v90, 0.0);
              if ( NiActorManager::SetTargetAnimation((NiActorManager *)v90, *(_WORD *)v91) )
              {
                v92 = *(_WORD *)v91;
                v93 = *(_DWORD *)(*(_DWORD *)(v90 + 128)
                                + 4
                                * (*(int (__thiscall **)(int, int))(*(_DWORD *)(v90 + 120) + 4))(
                                    v90 + 120,
                                    *(_WORD *)v91));
                if ( v93 )
                {
                  while ( !(unsigned __int8)(*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(v90 + 120) + 8))(
                                              v90 + 120,
                                              v92,
                                              *(_DWORD *)(v93 + 4)) )
                  {
                    v93 = *(_DWORD *)v93;
                    if ( !v93 )
                      goto LABEL_145;
                  }
                  v94 = *(_DWORD *)(v93 + 8);
                  if ( v94 )
                  {
                    *(float *)(v94 + 72) = -3.4028235e38;
                    NiControllerSequence::Update((NiControllerSequence *)v94, fCurTime, 1);
                  }
                }
              }
            }
          }
LABEL_145:
          LODWORD(i) += 44;
          v113 = (char *)v113 + 12;
          --result.m_pObject;
        }
        while ( *(float *)&result.m_pObject != 0.0 );
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceRoll_Single01);
      }
    }
  }
  v95 = (int)v111->m_AniActor;
  v96 = (int)&v111->m_pkDice[0].m_pActorMgr;
  v97 = 3;
  do
  {
    if ( *(_BYTE *)(v96 + 4) )
      v98 = *(_DWORD *)v96;
    else
      v98 = 0;
    (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v95 + 4))(v95, LODWORD(fCurTime), v98);
    v96 += 44;
    v95 += 12;
    --v97;
  }
  while ( v97 );
  v99 = v111;
  v100 = v111->m_pkChipThrowEff;
  if ( v100->m_bLive
    && !v100->m_bLoop
    && CNSTimer_MarkCheck::Update(&v100->m_kMarkCheck, fCurTime) == 1
    && v100->m_spEffect.m_pObject )
  {
    v101 = v100->m_spEffect.m_pObject->baseclass_0.m_pkParent;
    if ( v101 )
    {
      ((void (__stdcall *)(void **, NiNode *))v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
        &v113,
        v100->m_spEffect.m_pObject);
      if ( *(float *)&v113 != 0.0 )
      {
        LODWORD(v102) = v113;
        if ( !InterlockedDecrement((volatile LONG *)v113 + 1) )
        {
          if ( LODWORD(v102) )
            (*(void (__thiscall **)(_DWORD, signed int))*LODWORD(v102))(LODWORD(v102), 1);
        }
      }
    }
    v100->m_bLive = 0;
  }
  v103 = v99->m_pkRewardEff;
  if ( v103->m_bLive )
    SpEffect::Update(v103, fCurTime);
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (007180C0) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::UpdateHistory(MiniHouseDiceGameWin *this, char *arrayNum, bool IsClear)
{
  MiniHouseDiceGameWin *v3; // esi@1
  NiTListItem<PgWinSpr *> *v4; // eax@2
  PgWinSpr *v5; // ecx@3
  signed int v6; // eax@7
  NiTListItem<PgWinSpr *> *v7; // ebx@8
  PgWinSpr *v8; // edx@9
  void *v9; // eax@11
  int v10; // ecx@12
  void *v11; // edi@12
  NiTListItem<PgWinSpr *> *v12; // edi@20
  PgWin **v13; // ebx@21
  PgWinSpr *v14; // eax@22
  PgWin *v15; // eax@28
  PgWin *v16; // ecx@28
  PgWin *v17; // eax@28
  PgWin *v18; // ecx@28
  PgWin *v19; // eax@28
  PgWin *v20; // ecx@28
  void *kPos; // [sp+4h] [bp-4h]@15

  v3 = this;
  if ( IsClear )
  {
    v4 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    while ( v4 )
    {
      v5 = v4->m_element;
      v4 = v4->m_pkNext;
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.m_pkParent = 0;
    }
    NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)&v3->m_kHistoryList);
    return;
  }
  v6 = *(_DWORD *)&this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v6 == 21 )
  {
    v7 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    *(_DWORD *)&IsClear = 3;
    do
    {
      v8 = v7->m_element;
      v7 = v7->m_pkNext;
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.m_pkParent = 0;
      v9 = v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v9 )
      {
        while ( 1 )
        {
          v10 = (int)((char *)v9 + 8);
          v11 = v9;
          v9 = *(void **)v9;
          if ( v8 == *(PgWinSpr **)v10 )
            break;
          if ( !v9 )
            goto LABEL_14;
        }
      }
      else
      {
LABEL_14:
        v11 = 0;
      }
      kPos = v11;
      if ( v11 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kHistoryList,
          &kPos);
      *(_DWORD *)&IsClear = IsClear - 1;
    }
    while ( IsClear );
    v6 = 18;
    goto LABEL_20;
  }
  if ( v6 > 0 )
  {
LABEL_20:
    v12 = v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v12 )
    {
      v13 = (PgWin **)&v3->m_spHistroyPos[v6 + 2];
      do
      {
        v14 = v12->m_element;
        v12 = v12->m_pkNext;
        if ( v14 )
        {
          v14->baseclass_0.baseclass_0.baseclass_0.m_pkParent = 0;
          PgWin::AttachChildWin(*v13, &v14->baseclass_0);
          --v13;
        }
      }
      while ( v12 );
    }
  }
  if ( *arrayNum && arrayNum[1] && arrayNum[2] )
  {
    v15 = (PgWin *)PgWinSpr::CreateWin(
                     0,
                     0,
                     (PgSprData *)v3->m_spHistroyPos[(unsigned __int8)*arrayNum + 20].m_pObject,
                     0,
                     0,
                     0);
    v16 = (PgWin *)v3->m_spHistroyPos[2].m_pObject;
    *(_DWORD *)&IsClear = v15;
    PgWin::AttachChildWin(v16, v15);
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kHistoryList,
      (NiD3DXEffectParameter *const *)&IsClear);
    v17 = (PgWin *)PgWinSpr::CreateWin(
                     0,
                     0,
                     (PgSprData *)v3->m_spHistroyPos[(unsigned __int8)arrayNum[1] + 20].m_pObject,
                     0,
                     0,
                     0);
    v18 = (PgWin *)v3->m_spHistroyPos[1].m_pObject;
    *(_DWORD *)&IsClear = v17;
    PgWin::AttachChildWin(v18, v17);
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kHistoryList,
      (NiD3DXEffectParameter *const *)&IsClear);
    v19 = (PgWin *)PgWinSpr::CreateWin(
                     0,
                     0,
                     (PgSprData *)v3->m_spHistroyPos[(unsigned __int8)arrayNum[2] + 20].m_pObject,
                     0,
                     0,
                     0);
    v20 = (PgWin *)v3->m_spHistroyPos[0].m_pObject;
    *(_DWORD *)&IsClear = v19;
    PgWin::AttachChildWin(v20, v19);
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kHistoryList,
      (NiD3DXEffectParameter *const *)&IsClear);
  }
}

//----- (00718290) --------------------------------------------------------
void __thiscall mhDiceRankWin::UpdateMeWin(mhDiceRankWin *this, float fCurTime)
{
  mhDiceRankWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pUserList, v2->m_pkSlideBarEx);
  mhDiceRankWin::UpdateMedal(v2);
}

//----- (007182D0) --------------------------------------------------------
void __thiscall MHDiceRewardMoneyWin::UpdateMeWin(MHDiceRewardMoneyWin *this, float fCurTime)
{
  MHDiceRewardMoneyWin *v2; // edi@1
  PgWinMgr::PgWinMsg v3; // ST00_16@3

  v2 = this;
  if ( *(_BYTE *)(g_pkKeyboard + 33) & 2 )
  {
    BYTE3(PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID)[73].m_kMsgQ.m_uiAlloced) = 0;
    if ( PgWinMgr::IsIn(&Pgg_kWinMgr, &this->baseclass_0.baseclass_0.baseclass_0) )
    {
      *(_QWORD *)&v3.m_pkWin = __PAIR__(1, (unsigned int)v2);
      *(_QWORD *)&v3.m_wParam = 0i64;
      PgTQueue<PgWinMgr::PgWinMsg>::Add(&stru_B703FC, v3);
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00718330) --------------------------------------------------------
void __thiscall GambleDiceGameWin::UpdateMeWin(GambleDiceGameWin *this, float fCurTime)
{
  GambleDiceGameWin *v2; // edi@1
  bool v3; // zf@1
  double v4; // st7@3
  DICE_TAISAI_GAME_STATUS v5; // esi@4
  int v6; // ecx@4
  MHDiceGameTask *v7; // ebx@5
  SpEffect **v8; // esi@16
  signed int v9; // ebx@16
  bool v10; // bl@23
  MHDiceGameTask *v11; // esi@24
  int v12; // esi@29
  signed int v13; // ebx@29
  signed int v14; // eax@38
  NiRefObjectVtbl *v15; // edx@38
  double v16; // st7@38
  void *(__thiscall *v17)(NiRefObject *, unsigned int); // eax@38
  NiNode *v18; // eax@38
  double v19; // st7@38
  NiActorManager *v20; // eax@41
  NiNode *v21; // eax@42
  NiActorManager *v22; // eax@45
  NiNode *v23; // eax@46
  NiActorManager *v24; // eax@49
  NiNode *v25; // eax@50
  int v26; // edi@52
  float v27; // ecx@53
  int v28; // esi@53
  float v29; // eax@53
  int v30; // edx@53
  int (__thiscall *v31)(_DWORD); // eax@53
  NiAVObject *v32; // ebx@53
  int v33; // eax@53
  float v34; // ecx@53
  int v35; // esi@53
  float v36; // edx@53
  float v37; // eax@53
  void *(__thiscall *v38)(NiRefObject *, unsigned int); // edx@53
  NiAVObject *v39; // eax@53
  NiAVObject *v40; // esi@53
  float v41; // eax@53
  float v42; // ecx@53
  float v43; // ecx@57
  unsigned int v44; // esi@58
  unsigned int v45; // ebx@58
  unsigned int v46; // edi@58
  signed int v47; // eax@61
  unsigned __int64 v48; // kr00_8@75
  signed int v49; // edi@76
  unsigned int v50; // ebx@76
  int v51; // esi@77
  signed __int64 v52; // kr08_8@77
  int v53; // esi@82
  int v54; // edi@83
  int v55; // ebx@88
  int v56; // esi@89
  int v57; // ecx@93
  MHDiceGameTask *v58; // edi@95
  int v59; // esi@101
  signed int v60; // ebx@101
  DICE_TAISAI_BETTING v61; // ebx@103
  PgWin **v62; // esi@103
  void (*v63)(void); // eax@104
  MHDiceGameTask *v64; // ecx@105
  char *v65; // eax@109
  unsigned int v66; // esi@115
  int v67; // eax@115
  unsigned int v68; // ecx@115
  unsigned int v69; // ebx@115
  int v70; // eax@117
  signed int v71; // edi@122
  unsigned int v72; // ebx@122
  int v73; // esi@123
  signed __int64 v74; // kr18_8@123
  int v75; // esi@128
  int v76; // edi@129
  unsigned __int64 v77; // qax@131
  bool v78; // cf@131
  unsigned __int64 v79; // qdi@131
  int v80; // ebx@131
  bool v81; // sf@136
  signed __int64 v82; // kr20_8@136
  int v83; // esi@141
  int v84; // edi@142
  MHDiceGameTask *v85; // edi@144
  MHDiceGameTask *v86; // esi@145
  float v87; // eax@149
  float v88; // esi@150
  double v89; // st7@151
  float v90; // ecx@154
  int v91; // eax@156
  int v92; // esi@159
  unsigned int *v93; // edi@160
  int v94; // ebx@161
  int v95; // edi@161
  int v96; // ecx@165
  int v97; // esi@169
  int v98; // edi@169
  signed int v99; // ebx@169
  int v100; // eax@171
  float v101; // ebx@174
  int v102; // esi@174
  int v103; // ecx@178
  int v104; // edi@180
  int v105; // ecx@184
  float v106; // [sp+74h] [bp-70h]@1
  NiQuaternion thisa; // [sp+84h] [bp-60h]@53
  NiPoint3 vPos; // [sp+94h] [bp-50h]@38
  float v109; // [sp+A0h] [bp-44h]@53
  float v110; // [sp+A4h] [bp-40h]@38
  float i; // [sp+A8h] [bp-3Ch]@38
  float _fCurrentTime; // [sp+ACh] [bp-38h]@1
  NiPointer<MHDiceGameTask> result; // [sp+B0h] [bp-34h]@3
  int v114; // [sp+B4h] [bp-30h]@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > BettingInfo; // [sp+B8h] [bp-2Ch]@53
  unsigned int v116; // [sp+D4h] [bp-10h]@1
  int v117; // [sp+E0h] [bp-4h]@105
  int v118; // [sp+E4h] [bp+0h]@1

  v116 = (unsigned int)&v118 ^ __security_cookie;
  LODWORD(v106) = (unsigned int)&v118 ^ __security_cookie;
  v2 = this;
  v3 = this->m_bIsResetTimer == 0;
  LODWORD(_fCurrentTime) = this;
  if ( v3 )
  {
    this->m_DiceTimer.m_fStartTime = fCurTime;
    this->m_DiceTimer.m_fObjectTime = 0.0;
    this->m_DiceTimer.m_fElapsedTime = 0.0;
    this->m_bIsResetTimer = 1;
  }
  else
  {
    *(float *)&v114 = this->m_DiceTimer.m_fObjectTime;
    *(float *)&result.m_pObject = fCurTime - this->m_DiceTimer.m_fStartTime;
    v4 = *(float *)&result.m_pObject;
    this->m_DiceTimer.m_fObjectTime = *(float *)&result.m_pObject;
    this->m_DiceTimer.m_fElapsedTime = v4 - *(float *)&v114;
  }
  v5 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_eDiceSaiGameStatus;
  v6 = 0;
  if ( *(float *)&result.m_pObject != 0.0 )
  {
    v7 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) && v7 )
      v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v6 = 0;
  }
  if ( v5 != 1 )
  {
    if ( v5 != v6 )
    {
      if ( v5 == 2 )
      {
        LODWORD(v2->m_nTempBettingMoeny) = v6;
        HIDWORD(v2->m_nTempBettingMoeny) = v6;
        LODWORD(v2->m_nUserBettingMoney) = v6;
        HIDWORD(v2->m_nUserBettingMoney) = v6;
      }
      else
      {
        if ( v5 == 3 )
        {
          if ( 0.0 != v2->m_fResultTime )
            v2->m_fResultTime = v2->m_DiceTimer.m_fElapsedTime + v2->m_fResultTime;
          v8 = v2->m_pkResultEffectList;
          v9 = 10;
          do
          {
            if ( (*v8)->m_bLive )
              SpEffect::Update(*v8, fCurTime);
            ++v8;
            --v9;
          }
          while ( v9 );
          if ( LODWORD(v2->m_nUserBettingMoney) != LODWORD(v2->m_nTempBettingMoeny)
            || HIDWORD(v2->m_nUserBettingMoney) != HIDWORD(v2->m_nTempBettingMoeny) )
            OutputDebugStringA("´Ù¸§");
          v10 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject->m_bComeinMHOnResultStauts;
          if ( *(float *)&result.m_pObject != 0.0 )
          {
            v11 = result.m_pObject;
            if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
            {
              if ( v11 )
                v11->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
            }
          }
          if ( v10 )
          {
            GambleDiceGameWin::AllReset(v2);
          }
          else
          {
            v12 = (int)v2->m_spBettingBut;
            v13 = 52;
            do
            {
              (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 324))(LODWORD(fCurTime));
              v12 += 4;
              --v13;
            }
            while ( v13 );
          }
          if ( v2->m_bResultDiceAni )
            v2->m_fRewardTime = v2->m_DiceTimer.m_fElapsedTime + v2->m_fRewardTime;
          if ( v2->m_fRewardTime > 2.5 && !v2->m_bRewardAni )
          {
            v3 = HIDWORD(v2->m_nUserBettingMoney) == 0;
            v2->m_bRewardAni = 1;
            if ( !v3 || LODWORD(v2->m_nUserBettingMoney) )
            {
              if ( v2->m_bIsHappendBigPot )
              {
                v14 = ((int (__cdecl *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(LODWORD(v106));
                v15 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
                result.m_pObject = (MHDiceGameTask *)v14;
                v16 = (double)v14;
                v17 = v15[42].__vecDelDtor;
                v110 = v16;
                result.m_pObject = (MHDiceGameTask *)((int (__thiscall *)(GambleDiceGameWin *))v17)(v2);
                v18 = v2->m_pBigpotEff.m_pObject;
                i = (double)(signed int)result.m_pObject;
                vPos.x = v110 + 540.0;
                v19 = i;
                LODWORD(v18->baseclass_0.m_kLocal.m_Translate.x) = (_DWORD)vPos.x;
                vPos.y = v19 - 420.0;
                v18->baseclass_0.m_kLocal.m_Translate.y = vPos.y;
                vPos.z = 1000.0;
                v18->baseclass_0.m_kLocal.m_Translate.z = 1000.0;
                PgWinMgr::StartFullScreenEffect(
                  &Pgg_kWinMgr,
                  Timer::ms_fCurTime,
                  &v2->m_pBigpotEff.m_pObject->baseclass_0);
                SoundMgr::PlayInterfaceSound(&g_kSoundMgr, Dice_fanfare);
              }
              else
              {
                SpEffect::Start(v2->m_pkRewardEff, v2->m_pRunEffect.m_pObject);
              }
            }
            if ( v2->m_pkDice[0].m_bIsCanAnimation && (v20 = v2->m_pkDice[0].m_pActorMgr.m_pObject) != 0 )
              v21 = (NiNode *)v20->m_spNIFRoot.m_pObject;
            else
              v21 = v2->m_pkDice[0].m_pNiNode.m_pObject;
            v21->baseclass_0.m_uFlags |= 1u;
            if ( v2->m_pkDice[1].m_bIsCanAnimation && (v22 = v2->m_pkDice[1].m_pActorMgr.m_pObject) != 0 )
              v23 = (NiNode *)v22->m_spNIFRoot.m_pObject;
            else
              v23 = v2->m_pkDice[1].m_pNiNode.m_pObject;
            v23->baseclass_0.m_uFlags |= 1u;
            if ( v2->m_pkDice[2].m_bIsCanAnimation && (v24 = v2->m_pkDice[2].m_pActorMgr.m_pObject) != 0 )
              v25 = (NiNode *)v24->m_spNIFRoot.m_pObject;
            else
              v25 = v2->m_pkDice[2].m_pNiNode.m_pObject;
            v25->baseclass_0.m_uFlags |= 1u;
            v26 = (int)v2->m_spResultDicePos;
            v114 = 3;
            do
            {
              (*(void (__stdcall **)(signed int, _DWORD))(**(_DWORD **)v26 + 256))(1, LODWORD(v106));
              LODWORD(v27) = *(_DWORD *)(*(_DWORD *)v26 + 88);
              v28 = *(_DWORD *)v26;
              LODWORD(v29) = *(_DWORD *)(*(_DWORD *)v26 + 96);
              LODWORD(vPos.y) = *(_DWORD *)(*(_DWORD *)v26 + 92);
              v30 = *(_DWORD *)v28;
              vPos.x = v27;
              vPos.z = v29;
              result.m_pObject = (MHDiceGameTask *)((unsigned int)(*(int (__thiscall **)(int))(v30 + 144))(v28) >> 1);
              v31 = *(int (__thiscall **)(_DWORD))(*(_DWORD *)v28 + 148);
              v109 = (double)(unsigned int)result.m_pObject + vPos.x;
              result.m_pObject = (MHDiceGameTask *)((unsigned int)v31(v28) >> 1);
              v32 = *(NiAVObject **)(LODWORD(_fCurrentTime) + 684);
              v110 = (double)(unsigned int)result.m_pObject + vPos.y;
              i = vPos.z;
              NiQuaternion::NiQuaternion(
                (NiQuaternion *)&BettingInfo.baseclass_0.___u0._Bx._Buf[12],
                0.0,
                0.0,
                0.0,
                0.0);
              LODWORD(v34) = *(_DWORD *)(v33 + 4);
              v35 = *(_DWORD *)(v26 + 24);
              LODWORD(thisa.m_fW) = *(_DWORD *)v33;
              LODWORD(v36) = *(_DWORD *)(v33 + 8);
              LODWORD(v37) = *(_DWORD *)(v33 + 12);
              thisa.m_fY = v36;
              v38 = v32->baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor;
              thisa.m_fZ = v37;
              v39 = *(NiAVObject **)v35;
              v106 = 0.0;
              thisa.m_fX = v34;
              v38(&v32->baseclass_0.baseclass_0.baseclass_0, (unsigned int)v39);
              NsEffect::SetEffectNode((NsEffect *)(v35 + 28), *(NiAVObject **)v35);
              NsEffect::Start((NsEffect *)(v35 + 28), Timer::ms_fCurTime);
              *(float *)(v35 + 16) = *(float *)(v35 + 40);
              CNSTimer_MarkCheck::ReSet((CNSTimer_MarkCheck *)(v35 + 4), Timer::ms_fCurTime, OVER);
              *(_BYTE *)(v35 + 64) = 1;
              NiAVObject::UpdateProperties(v32);
              NiAVObject::UpdateEffects(v32);
              NiQuaternion::ToRotation(&thisa, (NiMatrix3 *)(*(_DWORD *)v35 + 52));
              v40 = *(NiAVObject **)v35;
              v41 = v110;
              v42 = i;
              v40->m_kLocal.m_Translate.x = v109;
              v26 += 4;
              v3 = v114-- == 1;
              v40->m_kLocal.m_Translate.y = v41;
              v40->m_kLocal.m_Translate.z = v42;
            }
            while ( !v3 );
            if ( !*(_BYTE *)(LODWORD(_fCurrentTime) + 1760) )
              SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceFinalResult);
          }
          if ( *(_BYTE *)(LODWORD(_fCurrentTime) + 1758) )
          {
            v43 = _fCurrentTime;
            if ( *(float *)(LODWORD(_fCurrentTime) + 1772) > 4.0 )
            {
              v44 = *(_DWORD *)(LODWORD(_fCurrentTime) + 1664);
              v45 = *(_DWORD *)(LODWORD(_fCurrentTime) + 1656);
              v46 = *(_DWORD *)(LODWORD(_fCurrentTime) + 1668);
              if ( (v45 != v44 || *(_DWORD *)(LODWORD(_fCurrentTime) + 1660) != v46)
                && !*(_BYTE *)(LODWORD(_fCurrentTime) + 1759) )
              {
                v47 = abs(v45 - v44);
                if ( v47 <= 100000 )
                {
                  if ( v47 <= 10000 )
                  {
                    if ( v47 <= 1000 )
                    {
                      if ( v47 <= 100 )
                      {
                        if ( v47 > 10 )
                          v47 = 10;
                      }
                      else
                      {
                        v47 = 100;
                      }
                    }
                    else
                    {
                      v47 = 1000;
                    }
                  }
                  else
                  {
                    v47 = 10000;
                  }
                }
                else
                {
                  v47 = 100000;
                }
                if ( v46 > *(_DWORD *)(LODWORD(_fCurrentTime) + 1660)
                  || v46 >= *(_DWORD *)(LODWORD(_fCurrentTime) + 1660) && v44 >= v45 )
                {
                  v48 = __PAIR__(v46, v44) - v47;
                  *(_DWORD *)(LODWORD(_fCurrentTime) + 1664) = v48;
                  *(_DWORD *)(LODWORD(v43) + 1668) = HIDWORD(v48);
                }
                else
                {
                  *(_QWORD *)(LODWORD(_fCurrentTime) + 1664) = __PAIR__(v46, v44) + v47;
                }
                v49 = *(_DWORD *)(LODWORD(v43) + 1664);
                v50 = *(_DWORD *)(LODWORD(v43) + 1668);
                LODWORD(i) = 6;
                v114 = LODWORD(v43) + 1336;
                while ( 1 )
                {
                  v51 = v49 % 10;
                  v52 = (signed __int64)__PAIR__(v50, v49) / 10;
                  v50 = (unsigned __int64)((signed __int64)__PAIR__(v50, v49) / 10) >> 32;
                  v49 = v52;
                  if ( v51 < 0 )
                    v51 = 0;
                  (*(void (__cdecl **)(int))(**(_DWORD **)v114 + 492))(v51);
                  if ( !(v50 | (unsigned int)v52) )
                    break;
                  v114 -= 4;
                  --LODWORD(i);
                  if ( SLODWORD(i) < 0 )
                    goto LABEL_85;
                }
                v53 = LODWORD(i) - 1;
                if ( LODWORD(i) - 1 >= 0 )
                {
                  v54 = LODWORD(_fCurrentTime) + 4 * v53 + 1312;
                  do
                  {
                    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v54 + 492))(0);
                    v54 -= 4;
                    --v53;
                  }
                  while ( v53 >= 0 );
                }
LABEL_85:
                if ( *(_DWORD *)(LODWORD(_fCurrentTime) + 1656) == *(_DWORD *)(LODWORD(_fCurrentTime) + 1664)
                  && *(_DWORD *)(LODWORD(_fCurrentTime) + 1660) == *(_DWORD *)(LODWORD(_fCurrentTime) + 1668) )
                  *(_BYTE *)(LODWORD(_fCurrentTime) + 1759) = 1;
              }
              v55 = LODWORD(_fCurrentTime) + 1724;
              v114 = 3;
              do
              {
                v56 = *(_DWORD *)v55;
                if ( *(_BYTE *)(*(_DWORD *)v55 + 64)
                  && !*(_BYTE *)(v56 + 65)
                  && CNSTimer_MarkCheck::Update((CNSTimer_MarkCheck *)(v56 + 4), fCurTime) == 1
                  && *(_DWORD *)v56 )
                {
                  v57 = *(_DWORD *)(*(_DWORD *)v56 + 32);
                  if ( v57 )
                  {
                    (*(void (__stdcall **)(NiPointer<MHDiceGameTask> *, _DWORD))(*(_DWORD *)v57 + 120))(
                      &result,
                      *(_DWORD *)v56);
                    if ( *(float *)&result.m_pObject != 0.0 )
                    {
                      v58 = result.m_pObject;
                      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
                      {
                        if ( v58 )
                          v58->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v58, 1u);
                      }
                    }
                  }
                  *(_BYTE *)(v56 + 64) = 0;
                }
                v55 += 4;
                --v114;
              }
              while ( *(float *)&v114 != 0.0 );
            }
          }
        }
      }
      goto LABEL_150;
    }
    v59 = (int)v2->m_spResultDicePos;
    v60 = 3;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v59 + 256))(0);
      v59 += 4;
      --v60;
    }
    while ( v60 );
  }
  v61 = 0;
  v62 = (PgWin **)v2->m_spBettingBut;
  do
  {
    v3 = ((int (__stdcall *)(int, int, _DWORD))(*v62)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[83].__vecDelDtor)(
           PgWin::ms_iMsX.x,
           PgWin::ms_iMsY,
           LODWORD(v106)) == 0;
    v63 = (void (*)(void))v62[52]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor;
    if ( v3 )
    {
      v106 = 1.0;
      v63();
      LOBYTE((*v62)[1].baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.y) = 0;
      ((void (__stdcall *)(signed int))(*v62)->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor)(4);
    }
    else
    {
      v106 = 0.30000001;
      v63();
      LOBYTE((*v62)[1].baseclass_0.baseclass_0.m_kWorldBound.m_kCenter.y) = 1;
      v64 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
      v117 = 0;
      MHDiceGameTask::GetBettingInfo(v64, &BettingInfo, v61);
      LOBYTE(v117) = 2;
      if ( *(float *)&result.m_pObject != 0.0 )
      {
        v114 = (int)result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( *(float *)&v114 != 0.0 )
            (**(void (__stdcall ***)(_DWORD))v114)(1);
        }
      }
      v65 = *(char **)&BettingInfo;
      if ( BettingInfo.baseclass_0._Myres < 0x10 )
        v65 = (char *)&BettingInfo;
      PgWin::SetToolTipWinText(*v62, v65);
      v117 = -1;
      if ( BettingInfo.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&BettingInfo);
    }
    ++v61;
    ++v62;
  }
  while ( (signed int)v61 < 52 );
  v66 = LODWORD(v2->m_nTempBettingMoeny);
  v67 = LODWORD(v2->m_nUserBettingMoney);
  v68 = HIDWORD(v2->m_nTempBettingMoeny);
  v69 = HIDWORD(v2->m_nUserBettingMoney);
  if ( v67 != v66 || v69 != v68 )
  {
    v70 = abs(v67 - v66);
    if ( v68 > v69 || v68 >= v69 && v66 >= LODWORD(v2->m_nUserBettingMoney) )
      v2->m_nTempBettingMoeny = __PAIR__(v68, v66) - v70;
    else
      v2->m_nTempBettingMoeny = __PAIR__(v68, v66) + v70;
    v71 = *(_DWORD *)(LODWORD(_fCurrentTime) + 1664);
    v72 = *(_DWORD *)(LODWORD(_fCurrentTime) + 1668);
    LODWORD(i) = 6;
    v114 = LODWORD(_fCurrentTime) + 1280;
    while ( 1 )
    {
      v73 = v71 % 10;
      v74 = (signed __int64)__PAIR__(v72, v71) / 10;
      v72 = (unsigned __int64)((signed __int64)__PAIR__(v72, v71) / 10) >> 32;
      v71 = v74;
      if ( v73 < 0 )
        v73 = 0;
      (*(void (__cdecl **)(int))(**(_DWORD **)v114 + 492))(v73);
      if ( !(v72 | (unsigned int)v74) )
        break;
      v114 -= 4;
      --LODWORD(i);
      if ( SLODWORD(i) < 0 )
        goto LABEL_131;
    }
    v75 = LODWORD(i) - 1;
    if ( LODWORD(i) - 1 >= 0 )
    {
      v76 = LODWORD(_fCurrentTime) + 4 * v75 + 1256;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v76 + 492))(0);
        v76 -= 4;
        --v75;
      }
      while ( v75 >= 0 );
    }
LABEL_131:
    MHDiceGameTask::GetDiceGameTask(&result);
    v117 = 3;
    v77 = User::Coin(&g_kUser);
    v78 = (unsigned int)v77 < *(_DWORD *)(LODWORD(_fCurrentTime) + 1664);
    LODWORD(v77) = v77 - *(_DWORD *)(LODWORD(_fCurrentTime) + 1664);
    v117 = -1;
    v79 = __PAIR__(LODWORD(_fCurrentTime), (unsigned int)v77);
    v80 = HIDWORD(v77) - (v78 + *(_DWORD *)(LODWORD(_fCurrentTime) + 1668));
    if ( *(float *)&result.m_pObject != 0.0 )
    {
      v114 = (int)result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( *(float *)&v114 != 0.0 )
          (**(void (__stdcall ***)(_DWORD))v114)(1);
      }
    }
    *(_DWORD *)(LODWORD(_fCurrentTime) + 1672) = v79;
    *(_DWORD *)(HIDWORD(v79) + 1676) = v80;
    LODWORD(i) = 11;
    v114 = HIDWORD(v79) + 1432;
    while ( 1 )
    {
      HIDWORD(v79) = (signed __int64)__PAIR__(v80, (unsigned int)v79) % 10;
      v81 = (signed int)((signed __int64)__PAIR__(v80, (unsigned int)v79) % 10) < 0;
      v82 = (signed __int64)__PAIR__(v80, (unsigned int)v79) / 10;
      v80 = (unsigned __int64)((signed __int64)__PAIR__(v80, (unsigned int)v79) / 10) >> 32;
      LODWORD(v79) = v82;
      if ( v81 )
        HIDWORD(v79) = 0;
      (*(void (__cdecl **)(_DWORD))(**(_DWORD **)v114 + 492))(HIDWORD(v79));
      if ( !(v80 | (unsigned int)v82) )
        break;
      v114 -= 4;
      --LODWORD(i);
      if ( SLODWORD(i) < 0 )
        goto LABEL_144;
    }
    v83 = LODWORD(i) - 1;
    if ( LODWORD(i) - 1 >= 0 )
    {
      v84 = LODWORD(_fCurrentTime) + 4 * v83 + 1388;
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v84 + 492))(0);
        v84 -= 4;
        --v83;
      }
      while ( v83 >= 0 );
    }
LABEL_144:
    v85 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    if ( *(float *)&result.m_pObject != 0.0 )
    {
      v86 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v86 )
          v86->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v86, 1u);
      }
    }
    if ( v85 )
    {
      v87 = _fCurrentTime;
      LODWORD(v85->m_nInvenRemainMoney) = *(_DWORD *)(LODWORD(_fCurrentTime) + 1672);
      HIDWORD(v85->m_nInvenRemainMoney) = *(_DWORD *)(LODWORD(v87) + 1676);
    }
  }
LABEL_150:
  v88 = _fCurrentTime;
  if ( *(float *)(LODWORD(_fCurrentTime) + 1776) > 0.1000000014901161 )
  {
    SpEffect::Update(*(SpEffect **)(LODWORD(_fCurrentTime) + 672), fCurTime);
    *(float *)&result.m_pObject = *(float *)(LODWORD(v88) + 1752) + *(float *)(LODWORD(v88) + 1768);
    v89 = *(float *)&result.m_pObject;
    *(float *)(LODWORD(v88) + 1768) = *(float *)&result.m_pObject;
    if ( v89 > 1.659999966621399 )
    {
      if ( !*(_BYTE *)(LODWORD(v88) + 1757) )
      {
        *(_BYTE *)(LODWORD(v88) + 1757) = 1;
        v114 = LODWORD(v88) + 636;
        LODWORD(i) = LODWORD(v88) + 508;
        result.m_pObject = (MHDiceGameTask *)3;
        do
        {
          v90 = i;
          if ( *(_BYTE *)(LODWORD(i) + 4) && *LODWORD(i) )
            v91 = *(_DWORD *)(*LODWORD(i) + 12);
          else
            v91 = *(_DWORD *)(LODWORD(i) - 4);
          *(_WORD *)(v91 + 28) &= 0xFFFEu;
          if ( *(_BYTE *)(LODWORD(v90) + 4) )
          {
            v92 = *LODWORD(i);
            if ( *LODWORD(i) )
            {
              v93 = (unsigned int *)v114;
              *(_WORD *)v114 = *(_WORD *)(v114 + 2) + *(_WORD *)(v114 + 4);
              NiActorManager::Reset((NiActorManager *)v92);
              NiActorManager::Update((NiActorManager *)v92, 0.0);
              if ( NiActorManager::SetTargetAnimation((NiActorManager *)v92, *(_WORD *)v93) )
              {
                v94 = *(_WORD *)v93;
                v95 = *(_DWORD *)(*(_DWORD *)(v92 + 128)
                                + 4
                                * (*(int (__thiscall **)(int, int))(*(_DWORD *)(v92 + 120) + 4))(
                                    v92 + 120,
                                    *(_WORD *)v93));
                if ( v95 )
                {
                  while ( !(unsigned __int8)(*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(v92 + 120) + 8))(
                                              v92 + 120,
                                              v94,
                                              *(_DWORD *)(v95 + 4)) )
                  {
                    v95 = *(_DWORD *)v95;
                    if ( !v95 )
                      goto LABEL_167;
                  }
                  v96 = *(_DWORD *)(v95 + 8);
                  if ( v96 )
                  {
                    *(float *)(v96 + 72) = -3.4028235e38;
                    NiControllerSequence::Update((NiControllerSequence *)v96, fCurTime, 1);
                  }
                }
              }
            }
          }
LABEL_167:
          LODWORD(i) += 44;
          v114 += 12;
          --result.m_pObject;
        }
        while ( *(float *)&result.m_pObject != 0.0 );
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, DiceRoll_Single01);
      }
    }
  }
  v97 = LODWORD(_fCurrentTime) + 632;
  v98 = LODWORD(_fCurrentTime) + 508;
  v99 = 3;
  do
  {
    if ( *(_BYTE *)(v98 + 4) )
      v100 = *(_DWORD *)v98;
    else
      v100 = 0;
    (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v97 + 4))(v97, LODWORD(fCurTime), v100);
    v98 += 44;
    v97 += 12;
    --v99;
  }
  while ( v99 );
  v101 = _fCurrentTime;
  v102 = *(_DWORD *)(LODWORD(_fCurrentTime) + 668);
  if ( *(_BYTE *)(v102 + 64)
    && !*(_BYTE *)(v102 + 65)
    && CNSTimer_MarkCheck::Update((CNSTimer_MarkCheck *)(v102 + 4), fCurTime) == 1
    && *(_DWORD *)v102 )
  {
    v103 = *(_DWORD *)(*(_DWORD *)v102 + 32);
    if ( v103 )
    {
      (*(void (__stdcall **)(int *, _DWORD))(*(_DWORD *)v103 + 120))(&v114, *(_DWORD *)v102);
      if ( *(float *)&v114 != 0.0 )
      {
        v104 = v114;
        if ( !InterlockedDecrement((volatile LONG *)(v114 + 4)) )
        {
          if ( v104 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v104)(v104, 1);
        }
      }
    }
    *(_BYTE *)(v102 + 64) = 0;
  }
  v105 = *(_DWORD *)(LODWORD(v101) + 676);
  if ( *(_BYTE *)(v105 + 64) )
    SpEffect::Update((SpEffect *)v105, fCurTime);
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (00718F80) --------------------------------------------------------
void __thiscall GambleDiceGameWin::UpdateHistory(GambleDiceGameWin *this, char *arrayNum, bool IsClear)
{
  GambleDiceGameWin *v3; // esi@1
  NiTListItem<PgWinSpr *> *v4; // eax@2
  PgWinSpr *v5; // ecx@3
  signed int v6; // eax@7
  NiTListItem<PgWinSpr *> *v7; // ebx@8
  PgWinSpr *v8; // edx@9
  void *v9; // eax@11
  int v10; // ecx@12
  void *v11; // edi@12
  NiTListItem<PgWinSpr *> *v12; // edi@20
  PgWin **v13; // ebx@21
  PgWinSpr *v14; // eax@22
  PgWin *v15; // eax@28
  PgWin *v16; // ecx@28
  PgWin *v17; // eax@28
  PgWin *v18; // ecx@28
  PgWin *v19; // eax@28
  PgWin *v20; // ecx@28
  void *kPos; // [sp+4h] [bp-4h]@15

  v3 = this;
  if ( IsClear )
  {
    v4 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    while ( v4 )
    {
      v5 = v4->m_element;
      v4 = v4->m_pkNext;
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.m_pkParent = 0;
    }
    NiTListBase<NiTPointerAllocator<unsigned_int>_NSFParsedShader__>::RemoveAll((NiTListBase<NiTPointerAllocator<unsigned int>,NSFParsedShader *> *)&v3->m_kHistoryList);
    return;
  }
  v6 = *(_DWORD *)&this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( v6 == 21 )
  {
    v7 = this->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    *(_DWORD *)&IsClear = 3;
    do
    {
      v8 = v7->m_element;
      v7 = v7->m_pkNext;
      if ( v8 )
        v8->baseclass_0.baseclass_0.baseclass_0.m_pkParent = 0;
      v9 = v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
      if ( v9 )
      {
        while ( 1 )
        {
          v10 = (int)((char *)v9 + 8);
          v11 = v9;
          v9 = *(void **)v9;
          if ( v8 == *(PgWinSpr **)v10 )
            break;
          if ( !v9 )
            goto LABEL_14;
        }
      }
      else
      {
LABEL_14:
        v11 = 0;
      }
      kPos = v11;
      if ( v11 )
        NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiLight__>::RemovePos(
          (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DShaderInterface *> *)&v3->m_kHistoryList,
          &kPos);
      *(_DWORD *)&IsClear = IsClear - 1;
    }
    while ( IsClear );
    v6 = 18;
    goto LABEL_20;
  }
  if ( v6 > 0 )
  {
LABEL_20:
    v12 = v3->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
    if ( v12 )
    {
      v13 = (PgWin **)&v3->m_spHistroyPos[v6 + 2];
      do
      {
        v14 = v12->m_element;
        v12 = v12->m_pkNext;
        if ( v14 )
        {
          v14->baseclass_0.baseclass_0.baseclass_0.m_pkParent = 0;
          PgWin::AttachChildWin(*v13, &v14->baseclass_0);
          --v13;
        }
      }
      while ( v12 );
    }
  }
  if ( *arrayNum && arrayNum[1] && arrayNum[2] )
  {
    v15 = (PgWin *)PgWinSpr::CreateWin(
                     0,
                     0,
                     (PgSprData *)v3->m_spHistroyPos[(unsigned __int8)*arrayNum + 20].m_pObject,
                     0,
                     0,
                     0);
    v16 = (PgWin *)v3->m_spHistroyPos[2].m_pObject;
    *(_DWORD *)&IsClear = v15;
    PgWin::AttachChildWin(v16, v15);
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kHistoryList,
      (NiD3DXEffectParameter *const *)&IsClear);
    v17 = (PgWin *)PgWinSpr::CreateWin(
                     0,
                     0,
                     (PgSprData *)v3->m_spHistroyPos[(unsigned __int8)arrayNum[1] + 20].m_pObject,
                     0,
                     0,
                     0);
    v18 = (PgWin *)v3->m_spHistroyPos[1].m_pObject;
    *(_DWORD *)&IsClear = v17;
    PgWin::AttachChildWin(v18, v17);
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kHistoryList,
      (NiD3DXEffectParameter *const *)&IsClear);
    v19 = (PgWin *)PgWinSpr::CreateWin(
                     0,
                     0,
                     (PgSprData *)v3->m_spHistroyPos[(unsigned __int8)arrayNum[2] + 20].m_pObject,
                     0,
                     0,
                     0);
    v20 = (PgWin *)v3->m_spHistroyPos[0].m_pObject;
    *(_DWORD *)&IsClear = v19;
    PgWin::AttachChildWin(v20, v19);
    NiTPointerListBase<DFALL<AutoSizingDialogWin::VirtualRect__>_AutoSizingDialogWin::VirtualRect__>::AddTail(
      (NiTPointerListBase<NiTPointerAllocator<unsigned int>,NiD3DXEffectParameter *> *)&v3->m_kHistoryList,
      (NiD3DXEffectParameter *const *)&IsClear);
  }
}

//----- (00719150) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::MiniHouseDiceGameWin(MiniHouseDiceGameWin *this)
{
  MiniHouseDiceGameWin *v1; // esi@1
  int v2; // ebx@1
  NiNode *v3; // ebx@8
  NiNode *v4; // ebx@13
  int v5; // [sp+4h] [bp-14h]@2
  signed int v6; // [sp+8h] [bp-10h]@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseDiceGameWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseDiceGameWin::_vftable_;
  v1->m_spTimer.m_pObject = 0;
  v1->m_spTimerFill.m_pObject = 0;
  v1->m_spTimerBack.m_pObject = 0;
  v1->m_pStartEffect.m_pObject = 0;
  v1->m_spTitleText.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spLightSpr,
    4u,
    32,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_pkDice,
    0x2Cu,
    3,
    (void (__thiscall *)(void *))ResElement::ResElement,
    (void (__thiscall *)(void *))ResElement::_ResElement);
  _eh_vector_constructor_iterator_(
    v1->m_AniActor,
    0xCu,
    3,
    (void (__thiscall *)(void *))MHDiceAniActor::MHDiceAniActor,
    (void (__thiscall *)(void *))mhObjAniActor::_mhObjAniActor);
  v1->m_EffectPos.m_pObject = 0;
  v1->m_pRunEffect.m_pObject = 0;
  v2 = (int)v1->m_spNumTex;
  _eh_vector_constructor_iterator_(
    v1->m_spNumTex,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spHistory,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spBettingBut,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spChips,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spBetMoney,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spBetNumSpr,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spShareMoney,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spShareNumSpr,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spMyMoney,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spMyBetNumSpr,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_sp100CooperChip.m_pObject = 0;
  v1->m_sp1SilverChip.m_pObject = 0;
  v1->m_sp10SilverChip.m_pObject = 0;
  v1->m_sp100SilverChip.m_pObject = 0;
  v1->m_spGoldChip.m_pObject = 0;
  v1->m_spMaxChip.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spHistroyPos,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spResultDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  *(_DWORD *)&v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_pkChipSelectBut,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spResultDicePos,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spResultDice,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spTimeCountText.m_pObject = 0;
  v1->m_DiceTimer.m_fStartTime = 0.0;
  v1->m_DiceTimer.m_fObjectTime = 0.0;
  v1->m_DiceTimer.m_fElapsedTime = 0.0;
  v1->m_pBigpotEff.m_pObject = 0;
  v6 = 10;
  do
  {
    v5 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v2 + 4)) && v5 )
        (**(void (__stdcall ***)(_DWORD))v5)(1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v6;
  }
  while ( v6 );
  v3 = v1->m_pStartEffect.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_pStartEffect.m_pObject = 0;
  }
  v4 = v1->m_pRunEffect.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_pRunEffect.m_pObject = 0;
  }
  *(_DWORD *)&v1->m_uiOnLightIdx[0] = 0;
  *(_DWORD *)&v1->m_uiOnLightIdx[2] = 0;
  v1->m_pkDiceRollEffect = 0;
  v1->m_pkChipThrowEff = 0;
  v1->m_pkRewardEff = 0;
  v1->m_pkDiceUpEff[0] = 0;
  v1->m_pkDiceUpEff[1] = 0;
  v1->m_pkDiceUpEff[2] = 0;
}
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);
// 9D6CD0: using guessed type int (__stdcall *MiniHouseDiceGameWin___vftable_)(int uiFlags);
// 9D6CEC: using guessed type int (__thiscall *MiniHouseDiceGameWin___vftable_)(void *p, char);

//----- (00719550) --------------------------------------------------------
void __thiscall MiniHouseDiceGameWin::_MiniHouseDiceGameWin(MiniHouseDiceGameWin *this)
{
  MiniHouseDiceGameWin *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6
  SpEffect *v4; // edi@11
  NiNode *v5; // ebx@12
  void *v6; // edi@17
  SpEffect *v7; // edi@19
  NiNode *v8; // ebx@20
  int v9; // edi@26
  int v10; // ebx@27
  int v11; // edi@34
  int v12; // ebx@35
  int v13; // ebx@40
  NiNode *v14; // edi@46
  PgWinText *v15; // edi@50
  int v16; // edi@54
  NiTListItem<PgWinSpr *> *v17; // ebx@54
  NiTListItem<PgWinSpr *> *v18; // ST0C_4@55
  PgSprData *v19; // edi@56
  PgSprData *v20; // edi@60
  PgSprData *v21; // edi@64
  PgSprData *v22; // edi@68
  PgSprData *v23; // edi@72
  PgSprData *v24; // edi@76
  NiNode *v25; // edi@80
  NiNode *v26; // edi@84
  PgWinText *v27; // edi@88
  NiNode *v28; // edi@92
  PgWinSpr *v29; // edi@96
  PgWinSpr *v30; // edi@100
  PgWinSpr *v31; // edi@104
  signed int v32; // [sp+8h] [bp-14h]@25
  signed int v33; // [sp+8h] [bp-14h]@33
  int v34; // [sp+Ch] [bp-10h]@25
  int v35; // [sp+Ch] [bp-10h]@33

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniHouseDiceGameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniHouseDiceGameWin::_vftable_;
  v2 = this->m_pStartEffect.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_pStartEffect.m_pObject = 0;
  }
  v3 = v1->m_pRunEffect.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_pRunEffect.m_pObject = 0;
  }
  v4 = v1->m_pkDiceRollEffect;
  if ( v4 )
  {
    NsEffect::_NsEffect(&v4->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v4->m_kMarkCheck);
    v5 = v4->m_spEffect.m_pObject;
    if ( v4->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    operator delete(v4);
  }
  v6 = v1->m_pkChipThrowEff;
  if ( v6 )
  {
    MHChipEffect::_MHChipEffect(v1->m_pkChipThrowEff);
    operator delete(v6);
  }
  v7 = v1->m_pkRewardEff;
  if ( v7 )
  {
    NsEffect::_NsEffect(&v7->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v7->m_kMarkCheck);
    v8 = v7->m_spEffect.m_pObject;
    if ( v7->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    operator delete(v7);
  }
  v34 = (int)v1->m_pkResultEffectList;
  v32 = 10;
  do
  {
    v9 = *(_DWORD *)v34;
    if ( *(_DWORD *)v34 )
    {
      NsEffect::_NsEffect((NsEffect *)(v9 + 28));
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v9 + 4));
      v10 = *(_DWORD *)v9;
      if ( *(_DWORD *)v9 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
      operator delete((void *)v9);
    }
    v34 += 4;
    --v32;
  }
  while ( v32 );
  v35 = (int)v1->m_pkDiceUpEff;
  v33 = 3;
  do
  {
    v11 = *(_DWORD *)v35;
    if ( *(_DWORD *)v35 )
    {
      v12 = *(_DWORD *)v11;
      if ( *(_DWORD *)v11 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
        *(_DWORD *)v11 = 0;
      }
      NsEffect::_NsEffect((NsEffect *)(v11 + 28));
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v11 + 4));
      v13 = *(_DWORD *)v11;
      if ( *(_DWORD *)v11 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
      operator delete((void *)v11);
    }
    v35 += 4;
    --v33;
  }
  while ( v33 );
  v14 = v1->m_pBigpotEff.m_pObject;
  if ( v14
    && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
  v15 = v1->m_spTimeCountText.m_pObject;
  if ( v15
    && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v15,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spResultDice,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spResultDicePos,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkChipSelectBut,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v16 = (int)&v1->m_kHistoryList;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  v17 = v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v17 )
  {
    v18 = v17;
    v17 = v17->m_pkNext;
    (*(void (__thiscall **)(PgTList<PgWinSpr *> *, NiTListItem<PgWinSpr *> *))(*(_DWORD *)v16 + 8))(
      &v1->m_kHistoryList,
      v18);
  }
  *(_DWORD *)&v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v16 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  _eh_vector_destructor_iterator_(
    v1->m_spResultDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spHistroyPos,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v19 = v1->m_spMaxChip.m_pObject;
  if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.m_uiRefCount) && v19 )
    v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
  v20 = v1->m_spGoldChip.m_pObject;
  if ( v20 && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.m_uiRefCount) && v20 )
    v20->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
  v21 = v1->m_sp100SilverChip.m_pObject;
  if ( v21 && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.m_uiRefCount) && v21 )
    v21->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
  v22 = v1->m_sp10SilverChip.m_pObject;
  if ( v22 && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.m_uiRefCount) && v22 )
    v22->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
  v23 = v1->m_sp1SilverChip.m_pObject;
  if ( v23 && !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.m_uiRefCount) && v23 )
    v23->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
  v24 = v1->m_sp100CooperChip.m_pObject;
  if ( v24 && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.m_uiRefCount) && v24 )
    v24->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_spMyBetNumSpr,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spMyMoney,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spShareNumSpr,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spShareMoney,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBetNumSpr,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBetMoney,
    4u,
    8,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spChips,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBettingBut,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spHistory,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spNumTex,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v25 = v1->m_pRunEffect.m_pObject;
  if ( v25
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
  v26 = v1->m_EffectPos.m_pObject;
  if ( v26
    && !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v26 )
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
  _eh_vector_destructor_iterator_(v1->m_AniActor, 0xCu, 3, (void (__thiscall *)(void *))mhObjAniActor::_mhObjAniActor);
  _eh_vector_destructor_iterator_(v1->m_pkDice, 0x2Cu, 3, (void (__thiscall *)(void *))ResElement::_ResElement);
  _eh_vector_destructor_iterator_(
    v1->m_spLightSpr,
    4u,
    32,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v27 = v1->m_spTitleText.m_pObject;
  if ( v27
    && !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v27 )
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v27,
      1u);
  v28 = v1->m_pStartEffect.m_pObject;
  if ( v28
    && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v28 )
    v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
  v29 = v1->m_spTimerBack.m_pObject;
  if ( v29
    && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v29 )
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v29,
      1u);
  v30 = v1->m_spTimerFill.m_pObject;
  if ( v30
    && !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v30 )
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v30,
      1u);
  v31 = v1->m_spTimer.m_pObject;
  if ( v31
    && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v31 )
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v31,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);
// 9D6CD0: using guessed type int (__stdcall *MiniHouseDiceGameWin___vftable_)(int uiFlags);
// 9D6CEC: using guessed type int (__thiscall *MiniHouseDiceGameWin___vftable_)(void *p, char);

//----- (00719C70) --------------------------------------------------------
void __thiscall GambleDiceGameWin::GambleDiceGameWin(GambleDiceGameWin *this)
{
  GambleDiceGameWin *v1; // esi@1
  int v2; // ebx@1
  NiNode *v3; // ebx@8
  NiNode *v4; // ebx@13
  int v5; // [sp+4h] [bp-14h]@2
  signed int v6; // [sp+8h] [bp-10h]@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleDiceGameWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleDiceGameWin::_vftable_;
  v1->m_spTimer.m_pObject = 0;
  v1->m_spTimerFill.m_pObject = 0;
  v1->m_spTimerBack.m_pObject = 0;
  v1->m_pStartEffect.m_pObject = 0;
  v1->m_spTitleText.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spLightSpr,
    4u,
    32,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_pkDice,
    0x2Cu,
    3,
    (void (__thiscall *)(void *))ResElement::ResElement,
    (void (__thiscall *)(void *))ResElement::_ResElement);
  _eh_vector_constructor_iterator_(
    v1->m_AniActor,
    0xCu,
    3,
    (void (__thiscall *)(void *))MHDiceAniActor::MHDiceAniActor,
    (void (__thiscall *)(void *))mhObjAniActor::_mhObjAniActor);
  v1->m_EffectPos.m_pObject = 0;
  v1->m_pRunEffect.m_pObject = 0;
  v2 = (int)v1->m_spNumTex;
  _eh_vector_constructor_iterator_(
    v1->m_spNumTex,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spHistory,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spBettingBut,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spChips,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spBetMoney,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spBetNumSpr,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spShareMoney,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spShareNumSpr,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spMyMoney,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spMyBetNumSpr,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_sp100CooperChip.m_pObject = 0;
  v1->m_sp1SilverChip.m_pObject = 0;
  v1->m_sp10SilverChip.m_pObject = 0;
  v1->m_sp100SilverChip.m_pObject = 0;
  v1->m_spGoldChip.m_pObject = 0;
  v1->m_spMaxChip.m_pObject = 0;
  _eh_vector_constructor_iterator_(
    v1->m_spHistroyPos,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spResultDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  *(_DWORD *)&v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  _eh_vector_constructor_iterator_(
    v1->m_pkChipSelectBut,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spResultDicePos,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_constructor_iterator_(
    v1->m_spResultDice,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<PgWinLRBut>::_default_constructor_closure_,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v1->m_spTimeCountText.m_pObject = 0;
  v1->m_DiceTimer.m_fStartTime = 0.0;
  v1->m_DiceTimer.m_fObjectTime = 0.0;
  v1->m_DiceTimer.m_fElapsedTime = 0.0;
  v1->m_pBigpotEff.m_pObject = 0;
  v6 = 10;
  do
  {
    v5 = *(_DWORD *)v2;
    if ( *(_DWORD *)v2 )
    {
      if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v2 + 4)) && v5 )
        (**(void (__stdcall ***)(_DWORD))v5)(1);
      *(_DWORD *)v2 = 0;
    }
    v2 += 4;
    --v6;
  }
  while ( v6 );
  v3 = v1->m_pStartEffect.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_pStartEffect.m_pObject = 0;
  }
  v4 = v1->m_pRunEffect.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->m_pRunEffect.m_pObject = 0;
  }
  *(_DWORD *)&v1->m_uiOnLightIdx[0] = 0;
  *(_DWORD *)&v1->m_uiOnLightIdx[2] = 0;
  v1->m_pkDiceRollEffect = 0;
  v1->m_pkChipThrowEff = 0;
  v1->m_pkRewardEff = 0;
  v1->m_pkDiceUpEff[0] = 0;
  v1->m_pkDiceUpEff[1] = 0;
  v1->m_pkDiceUpEff[2] = 0;
}
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);
// 9D6F10: using guessed type int (__stdcall *GambleDiceGameWin___vftable_)(int uiFlags);
// 9D6F2C: using guessed type int (__thiscall *GambleDiceGameWin___vftable_)(void *p, char);

//----- (0071A070) --------------------------------------------------------
void __thiscall GambleDiceGameWin::_GambleDiceGameWin(GambleDiceGameWin *this)
{
  GambleDiceGameWin *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // edi@6
  SpEffect *v4; // edi@11
  NiNode *v5; // ebx@12
  void *v6; // edi@17
  SpEffect *v7; // edi@19
  NiNode *v8; // ebx@20
  int v9; // edi@26
  int v10; // ebx@27
  int v11; // edi@34
  int v12; // ebx@35
  int v13; // ebx@40
  NiNode *v14; // edi@46
  PgWinText *v15; // edi@50
  int v16; // edi@54
  NiTListItem<PgWinSpr *> *v17; // ebx@54
  NiTListItem<PgWinSpr *> *v18; // ST0C_4@55
  PgSprData *v19; // edi@56
  PgSprData *v20; // edi@60
  PgSprData *v21; // edi@64
  PgSprData *v22; // edi@68
  PgSprData *v23; // edi@72
  PgSprData *v24; // edi@76
  NiNode *v25; // edi@80
  NiNode *v26; // edi@84
  PgWinText *v27; // edi@88
  NiNode *v28; // edi@92
  PgWinSpr *v29; // edi@96
  PgWinSpr *v30; // edi@100
  PgWinSpr *v31; // edi@104
  signed int v32; // [sp+8h] [bp-14h]@25
  signed int v33; // [sp+8h] [bp-14h]@33
  int v34; // [sp+Ch] [bp-10h]@25
  int v35; // [sp+Ch] [bp-10h]@33

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GambleDiceGameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GambleDiceGameWin::_vftable_;
  v2 = this->m_pStartEffect.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_pStartEffect.m_pObject = 0;
  }
  v3 = v1->m_pRunEffect.m_pObject;
  if ( v3 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v1->m_pRunEffect.m_pObject = 0;
  }
  v4 = v1->m_pkDiceRollEffect;
  if ( v4 )
  {
    NsEffect::_NsEffect(&v4->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v4->m_kMarkCheck);
    v5 = v4->m_spEffect.m_pObject;
    if ( v4->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v5 )
      v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    operator delete(v4);
  }
  v6 = v1->m_pkChipThrowEff;
  if ( v6 )
  {
    MHChipEffect::_MHChipEffect(v1->m_pkChipThrowEff);
    operator delete(v6);
  }
  v7 = v1->m_pkRewardEff;
  if ( v7 )
  {
    NsEffect::_NsEffect(&v7->m_kEffect);
    ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v7->m_kMarkCheck);
    v8 = v7->m_spEffect.m_pObject;
    if ( v7->m_spEffect.m_pObject
      && !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v8 )
      v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    operator delete(v7);
  }
  v34 = (int)v1->m_pkResultEffectList;
  v32 = 10;
  do
  {
    v9 = *(_DWORD *)v34;
    if ( *(_DWORD *)v34 )
    {
      NsEffect::_NsEffect((NsEffect *)(v9 + 28));
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v9 + 4));
      v10 = *(_DWORD *)v9;
      if ( *(_DWORD *)v9 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
      operator delete((void *)v9);
    }
    v34 += 4;
    --v32;
  }
  while ( v32 );
  v35 = (int)v1->m_pkDiceUpEff;
  v33 = 3;
  do
  {
    v11 = *(_DWORD *)v35;
    if ( *(_DWORD *)v35 )
    {
      v12 = *(_DWORD *)v11;
      if ( *(_DWORD *)v11 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
        *(_DWORD *)v11 = 0;
      }
      NsEffect::_NsEffect((NsEffect *)(v11 + 28));
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)(v11 + 4));
      v13 = *(_DWORD *)v11;
      if ( *(_DWORD *)v11 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
      operator delete((void *)v11);
    }
    v35 += 4;
    --v33;
  }
  while ( v33 );
  v14 = v1->m_pBigpotEff.m_pObject;
  if ( v14
    && !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
  v15 = v1->m_spTimeCountText.m_pObject;
  if ( v15
    && !InterlockedDecrement((volatile LONG *)&v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v15,
      1u);
  _eh_vector_destructor_iterator_(
    v1->m_spResultDice,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spResultDicePos,
    4u,
    3,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_pkChipSelectBut,
    4u,
    5,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v16 = (int)&v1->m_kHistoryList;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiTListBase<NiTPointerAllocator<unsigned int>,PgWinSpr *>Vtbl *)&PgTList<PgWinSpr__>::_vftable_;
  v17 = v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead;
  while ( v17 )
  {
    v18 = v17;
    v17 = v17->m_pkNext;
    (*(void (__thiscall **)(PgTList<PgWinSpr *> *, NiTListItem<PgWinSpr *> *))(*(_DWORD *)v16 + 8))(
      &v1->m_kHistoryList,
      v18);
  }
  *(_DWORD *)&v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_kAllocator.___u0.baseclass_0.baseclass_0.dummy[0] = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkHead = 0;
  v1->m_kHistoryList.baseclass_0.baseclass_0.baseclass_0.m_pkTail = 0;
  *(_DWORD *)v16 = &NiTListBase<NiTPointerAllocator<unsigned_int>_PgWinSpr__>::_vftable_;
  _eh_vector_destructor_iterator_(
    v1->m_spResultDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spDiceNum,
    4u,
    6,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spHistroyPos,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v19 = v1->m_spMaxChip.m_pObject;
  if ( v19 && !InterlockedDecrement((volatile LONG *)&v19->baseclass_0.m_uiRefCount) && v19 )
    v19->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v19, 1u);
  v20 = v1->m_spGoldChip.m_pObject;
  if ( v20 && !InterlockedDecrement((volatile LONG *)&v20->baseclass_0.m_uiRefCount) && v20 )
    v20->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v20, 1u);
  v21 = v1->m_sp100SilverChip.m_pObject;
  if ( v21 && !InterlockedDecrement((volatile LONG *)&v21->baseclass_0.m_uiRefCount) && v21 )
    v21->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v21, 1u);
  v22 = v1->m_sp10SilverChip.m_pObject;
  if ( v22 && !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.m_uiRefCount) && v22 )
    v22->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
  v23 = v1->m_sp1SilverChip.m_pObject;
  if ( v23 && !InterlockedDecrement((volatile LONG *)&v23->baseclass_0.m_uiRefCount) && v23 )
    v23->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v23, 1u);
  v24 = v1->m_sp100CooperChip.m_pObject;
  if ( v24 && !InterlockedDecrement((volatile LONG *)&v24->baseclass_0.m_uiRefCount) && v24 )
    v24->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v24, 1u);
  _eh_vector_destructor_iterator_(
    v1->m_spMyBetNumSpr,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spMyMoney,
    4u,
    12,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spShareNumSpr,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spShareMoney,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBetNumSpr,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBetMoney,
    4u,
    7,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spChips,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spBettingBut,
    4u,
    52,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spHistory,
    4u,
    21,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  _eh_vector_destructor_iterator_(
    v1->m_spNumTex,
    4u,
    10,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v25 = v1->m_pRunEffect.m_pObject;
  if ( v25
    && !InterlockedDecrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v25 )
    v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v25, 1u);
  v26 = v1->m_EffectPos.m_pObject;
  if ( v26
    && !InterlockedDecrement((volatile LONG *)&v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v26 )
    v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v26, 1u);
  _eh_vector_destructor_iterator_(v1->m_AniActor, 0xCu, 3, (void (__thiscall *)(void *))mhObjAniActor::_mhObjAniActor);
  _eh_vector_destructor_iterator_(v1->m_pkDice, 0x2Cu, 3, (void (__thiscall *)(void *))ResElement::_ResElement);
  _eh_vector_destructor_iterator_(
    v1->m_spLightSpr,
    4u,
    32,
    (void (__thiscall *)(void *))NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>);
  v27 = v1->m_spTitleText.m_pObject;
  if ( v27
    && !InterlockedDecrement((volatile LONG *)&v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v27 )
    v27->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v27,
      1u);
  v28 = v1->m_pStartEffect.m_pObject;
  if ( v28
    && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v28 )
    v28->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
  v29 = v1->m_spTimerBack.m_pObject;
  if ( v29
    && !InterlockedDecrement((volatile LONG *)&v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v29 )
    v29->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v29,
      1u);
  v30 = v1->m_spTimerFill.m_pObject;
  if ( v30
    && !InterlockedDecrement((volatile LONG *)&v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v30 )
    v30->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v30,
      1u);
  v31 = v1->m_spTimer.m_pObject;
  if ( v31
    && !InterlockedDecrement((volatile LONG *)&v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v31 )
    v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
      (NiRefObject *)v31,
      1u);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9962C4: using guessed type int (__thiscall *NiTListBase_NiTPointerAllocator_unsigned int__PgWinSpr _____vftable_)(void *p, char);
// 99643C: using guessed type int (__thiscall *PgTList_PgWinSpr _____vftable_)(void *p, char);
// 9D6F10: using guessed type int (__stdcall *GambleDiceGameWin___vftable_)(int uiFlags);
// 9D6F2C: using guessed type int (__thiscall *GambleDiceGameWin___vftable_)(void *p, char);

//----- (0071A790) --------------------------------------------------------
BettingBut *__cdecl BettingBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle)
{
  void *v8; // eax@1
  void *v9; // esi@1
  PgWin *v10; // edi@8
  BettingBut *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v8 = operator new(0x174u);
  v9 = v8;
  result.m_pObject = (PgWin *)v8;
  v13 = 0;
  if ( v8 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v8);
    *(_DWORD *)v9 = &BettingBut::_vftable_;
    *((_DWORD *)v9 + 58) = &BettingBut::_vftable_;
    *((float *)v9 + 89) = 0.0;
    *((float *)v9 + 90) = 0.0;
    *((float *)v9 + 91) = 0.0;
    *((_DWORD *)v9 + 81) = 0;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)v9 + 1);
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int, int, char *, unsigned int))(*(_DWORD *)v9 + 564))(
                          v9,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg,
                          Pos,
                          pcName,
                          uiExtStyle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = (BettingBut *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}
// 9D5ED8: using guessed type int (__stdcall *BettingBut___vftable_)(int uiFlags);
// 9D5EF4: using guessed type int (__thiscall *BettingBut___vftable_)(void *p, char);

//----- (0071A900) --------------------------------------------------------
ToggleBut *__cdecl ToggleBut::CreateWin(int iXPos, int iYPos, PgSprData *pkSprData, PgWin *pkParent, unsigned int uiCmdMsg, int Pos, char *pcName, unsigned int uiExtStyle)
{
  void *v8; // eax@1
  void *v9; // esi@1
  PgWin *v10; // edi@8
  ToggleBut *v11; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v13; // [sp+10h] [bp-4h]@1

  v8 = operator new(0x148u);
  v9 = v8;
  result.m_pObject = (PgWin *)v8;
  v13 = 0;
  if ( v8 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v8);
    *(_DWORD *)v9 = &ToggleBut::_vftable_;
    *((_DWORD *)v9 + 58) = &ToggleBut::_vftable_;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)v9 + 1);
  v13 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v9);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, PgWin *, unsigned int, int, char *, unsigned int))(*(_DWORD *)v9 + 560))(
                          v9,
                          iXPos,
                          iYPos,
                          pkSprData,
                          pkParent,
                          uiCmdMsg,
                          Pos,
                          pcName,
                          uiExtStyle) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v9 + 356))(v9);
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = (ToggleBut *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v9);
    if ( result.m_pObject )
    {
      v10 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v10 )
          v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      }
    }
    v13 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    v11 = 0;
  }
  return v11;
}
// 9D6130: using guessed type int (__stdcall *ToggleBut___vftable_)(int uiFlags);
// 9D614C: using guessed type int (__thiscall *ToggleBut___vftable_)(void *p, char);

//----- (0071AA60) --------------------------------------------------------
MiniHouseDiceGameWin *__cdecl MiniHouseDiceGameWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  MiniHouseDiceGameWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x6F8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    MiniHouseDiceGameWin::MiniHouseDiceGameWin((MiniHouseDiceGameWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (MiniHouseDiceGameWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0071AB90) --------------------------------------------------------
BettingBut *__thiscall MiniHouseDiceGameWin::MakeButton(MiniHouseDiceGameWin *this, NiAVObject *pkObject, const char *pcTriShapeName, int *iLeft, int *iTop, unsigned int uiCmdMsg, NiSourceTexture *pkTexture)
{
  signed int v7; // esi@1
  void *v8; // eax@3
  void *v9; // esi@3
  LONG (__stdcall *v10)(volatile LONG *); // ebx@9
  NiDX92DBufferData *v11; // edi@13
  BettingBut *result; // eax@19
  unsigned int v13; // [sp-10h] [bp-C4h]@1
  int uiLeft; // [sp+4h] [bp-B0h]@1
  int uiTop; // [sp+8h] [bp-ACh]@1
  MiniHouseDiceGameWin *v16; // [sp+Ch] [bp-A8h]@1
  int v17; // [sp+10h] [bp-A4h]@3
  int v18; // [sp+14h] [bp-A0h]@3
  unsigned int v19; // [sp+18h] [bp-9Ch]@1
  PgSprData *pkSprData; // [sp+1Ch] [bp-98h]@1
  NiPointer<NiDX92DBufferData> element; // [sp+20h] [bp-94h]@3
  char acNodeName[128]; // [sp+24h] [bp-90h]@2
  unsigned int v23; // [sp+A4h] [bp-10h]@1
  int v24; // [sp+B0h] [bp-4h]@3
  int v25; // [sp+B4h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v13 = (unsigned int)&v25 ^ __security_cookie;
  v19 = uiCmdMsg;
  v16 = this;
  pkSprData = PgSprData::Create(pkObject, pcTriShapeName, &uiLeft, &uiTop, pkTexture);
  v7 = 2;
  do
  {
    memset(acNodeName, 0, 0x80u);
    sprintf(acNodeName, "%s%.2d");
    PgSprData::Add(pkSprData, pkObject, acNodeName);
    ++v7;
  }
  while ( v7 < 5 );
  v18 = uiTop;
  v17 = uiLeft;
  v8 = operator new(0x174u);
  v9 = v8;
  element.m_pObject = (NiDX92DBufferData *)v8;
  v24 = 0;
  if ( v8 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v8);
    *(_DWORD *)v9 = &BettingBut::_vftable_;
    *((_DWORD *)v9 + 58) = &BettingBut::_vftable_;
    *((float *)v9 + 89) = 0.0;
    *((float *)v9 + 90) = 0.0;
    *((float *)v9 + 91) = 0.0;
    *((_DWORD *)v9 + 81) = 0;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)v9 + 1);
  v24 = 1;
  if ( v9 )
  {
    element.m_pObject = (NiDX92DBufferData *)v9;
    InterlockedIncrement((volatile LONG *)v9 + 1);
    LOBYTE(v24) = 2;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(&stru_B703DC, &element);
    v10 = InterlockedDecrement;
    LOBYTE(v24) = 1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
  }
  else
  {
    v10 = InterlockedDecrement;
  }
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, MiniHouseDiceGameWin *, unsigned int, _DWORD, _DWORD, _DWORD, unsigned int))(*(_DWORD *)v9 + 564))(
                          v9,
                          v17,
                          v18,
                          pkSprData,
                          v16,
                          v19,
                          0,
                          0,
                          0,
                          v13) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v9 + 356))(v9);
    v24 = -1;
    if ( !v10((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    result = (BettingBut *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, (NiPointer<PgWin> *)&element, (PgWin *)v9);
    v11 = element.m_pObject;
    if ( element.m_pObject && !v10((volatile LONG *)&element.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) && v11 )
      v11->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v24 = -1;
    if ( !v10((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    result = 0;
  }
  return result;
}
// 9D5ED8: using guessed type int (__stdcall *BettingBut___vftable_)(int uiFlags);
// 9D5EF4: using guessed type int (__thiscall *BettingBut___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0071ADF0) --------------------------------------------------------
mhMinimizeDiceGameWin *__cdecl mhMinimizeDiceGameWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhMinimizeDiceGameWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhMinimizeDiceGameWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhMinimizeDiceGameWin::_vftable_;
    *((_BYTE *)v2 + 344) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhMinimizeDiceGameWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D6384: using guessed type int (__stdcall *mhMinimizeDiceGameWin___vftable_)(int uiFlags);
// 9D63A4: using guessed type int (__thiscall *mhMinimizeDiceGameWin___vftable_)(void *p, char);

//----- (0071AF40) --------------------------------------------------------
mhDiceHelpWin *__cdecl mhDiceHelpWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhDiceHelpWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhDiceHelpWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhDiceHelpWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhDiceHelpWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D65C8: using guessed type int (__stdcall *mhDiceHelpWin___vftable_)(int uiFlags);
// 9D65E4: using guessed type int (__thiscall *mhDiceHelpWin___vftable_)(void *p, char);

//----- (0071B080) --------------------------------------------------------
MHDiceRewardMoneyWin *__cdecl MHDiceRewardMoneyWin::CreateWin(PgFrameWork *pkFrameWork, int IsRewardWin)
{
  void *v2; // eax@1
  int v3; // eax@2
  int v4; // esi@2
  PgWin *v5; // edi@8
  MHDiceRewardMoneyWin *v6; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v8; // [sp+10h] [bp-4h]@1

  v2 = operator new(0x190u);
  result.m_pObject = (PgWin *)v2;
  v8 = 0;
  if ( v2 )
  {
    MHDiceRewardMoneyWin::MHDiceRewardMoneyWin((MHDiceRewardMoneyWin *)v2);
    v4 = v3;
  }
  else
  {
    v4 = 0;
  }
  if ( v4 )
    InterlockedIncrement((volatile LONG *)(v4 + 4));
  v8 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v4);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *, int))(*(_DWORD *)v4 + 540))(
                          v4,
                          pkFrameWork,
                          IsRewardWin) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4);
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = (MHDiceRewardMoneyWin *)v4;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v4);
    if ( result.m_pObject )
    {
      v5 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    v8 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
    v6 = 0;
  }
  return v6;
}

//----- (0071B1B0) --------------------------------------------------------
mhDiceRateSheetWin *__cdecl mhDiceRateSheetWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhDiceRateSheetWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x158u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhDiceRateSheetWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhDiceRateSheetWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhDiceRateSheetWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D6808: using guessed type int (__stdcall *mhDiceRateSheetWin___vftable_)(int uiFlags);
// 9D6824: using guessed type int (__thiscall *mhDiceRateSheetWin___vftable_)(void *p, char);

//----- (0071B2F0) --------------------------------------------------------
GambleDiceGameWin *__cdecl GambleDiceGameWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  GambleDiceGameWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x6F8u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    GambleDiceGameWin::GambleDiceGameWin((GambleDiceGameWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (GambleDiceGameWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0071B420) --------------------------------------------------------
BettingBut *__thiscall GambleDiceGameWin::MakeButton(GambleDiceGameWin *this, NiAVObject *pkObject, const char *pcTriShapeName, int *iLeft, int *iTop, unsigned int uiCmdMsg, NiSourceTexture *pkTexture)
{
  signed int v7; // esi@1
  void *v8; // eax@3
  void *v9; // esi@3
  LONG (__stdcall *v10)(volatile LONG *); // ebx@9
  NiDX92DBufferData *v11; // edi@13
  BettingBut *result; // eax@19
  unsigned int v13; // [sp-10h] [bp-C4h]@1
  int uiLeft; // [sp+4h] [bp-B0h]@1
  int uiTop; // [sp+8h] [bp-ACh]@1
  GambleDiceGameWin *v16; // [sp+Ch] [bp-A8h]@1
  int v17; // [sp+10h] [bp-A4h]@3
  int v18; // [sp+14h] [bp-A0h]@3
  unsigned int v19; // [sp+18h] [bp-9Ch]@1
  PgSprData *pkSprData; // [sp+1Ch] [bp-98h]@1
  NiPointer<NiDX92DBufferData> element; // [sp+20h] [bp-94h]@3
  char acNodeName[128]; // [sp+24h] [bp-90h]@2
  unsigned int v23; // [sp+A4h] [bp-10h]@1
  int v24; // [sp+B0h] [bp-4h]@3
  int v25; // [sp+B4h] [bp+0h]@1

  v23 = (unsigned int)&v25 ^ __security_cookie;
  v13 = (unsigned int)&v25 ^ __security_cookie;
  v19 = uiCmdMsg;
  v16 = this;
  pkSprData = PgSprData::Create(pkObject, pcTriShapeName, &uiLeft, &uiTop, pkTexture);
  v7 = 2;
  do
  {
    memset(acNodeName, 0, 0x80u);
    sprintf(acNodeName, "%s%.2d");
    PgSprData::Add(pkSprData, pkObject, acNodeName);
    ++v7;
  }
  while ( v7 < 5 );
  v18 = uiTop;
  v17 = uiLeft;
  v8 = operator new(0x174u);
  v9 = v8;
  element.m_pObject = (NiDX92DBufferData *)v8;
  v24 = 0;
  if ( v8 )
  {
    PgWinBut::PgWinBut((PgWinBut *)v8);
    *(_DWORD *)v9 = &BettingBut::_vftable_;
    *((_DWORD *)v9 + 58) = &BettingBut::_vftable_;
    *((float *)v9 + 89) = 0.0;
    *((float *)v9 + 90) = 0.0;
    *((float *)v9 + 91) = 0.0;
    *((_DWORD *)v9 + 81) = 0;
  }
  else
  {
    v9 = 0;
  }
  if ( v9 )
    InterlockedIncrement((volatile LONG *)v9 + 1);
  v24 = 1;
  if ( v9 )
  {
    element.m_pObject = (NiDX92DBufferData *)v9;
    InterlockedIncrement((volatile LONG *)v9 + 1);
    LOBYTE(v24) = 2;
    NiTPointerListBase<NiTPointerAllocator<unsigned_int>_NiPointer<NSBShader>>::AddTail(&stru_B703DC, &element);
    v10 = InterlockedDecrement;
    LOBYTE(v24) = 1;
    if ( !InterlockedDecrement((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
  }
  else
  {
    v10 = InterlockedDecrement;
  }
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, int, int, PgSprData *, GambleDiceGameWin *, unsigned int, _DWORD, _DWORD, _DWORD, unsigned int))(*(_DWORD *)v9 + 564))(
                          v9,
                          v17,
                          v18,
                          pkSprData,
                          v16,
                          v19,
                          0,
                          0,
                          0,
                          v13) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v9 + 356))(v9);
    v24 = -1;
    if ( !v10((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1);
    result = (BettingBut *)v9;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, (NiPointer<PgWin> *)&element, (PgWin *)v9);
    v11 = element.m_pObject;
    if ( element.m_pObject && !v10((volatile LONG *)&element.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) && v11 )
      v11->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    v24 = -1;
    if ( !v10((volatile LONG *)v9 + 1) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
    result = 0;
  }
  return result;
}
// 9D5ED8: using guessed type int (__stdcall *BettingBut___vftable_)(int uiFlags);
// 9D5EF4: using guessed type int (__thiscall *BettingBut___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0071B680) --------------------------------------------------------
bool __thiscall MHDiceRewardMoneyWin::Create(MHDiceRewardMoneyWin *this, PgFrameWork *pkFrameWork, int IsRewardWin)
{
  MHDiceRewardMoneyWin *v3; // esi@1
  NiSourceTexture *v4; // edi@1
  char *v6; // eax@9
  PgSprData *v7; // eax@10
  PgSprData *v8; // ebx@13
  PgWinBut *v9; // eax@13
  PgWinBut *v10; // ebx@13
  PgWin *v11; // ST64_4@13
  PgFont *v12; // ST60_4@13
  unsigned int v13; // ST5C_4@13
  unsigned int v14; // eax@13
  NiTexturePalette **v15; // ebx@13
  char *v16; // eax@13
  PgSprData *v17; // ebx@13
  PgWin *v18; // ebx@13
  PgFont *v19; // ST68_4@13
  unsigned int v20; // ST64_4@13
  unsigned int v21; // eax@13
  NiTexturePalette **v22; // ebx@13
  NiTexturePalette *v23; // edx@13
  PgSprData *v24; // ebx@15
  PgWinBut *v25; // eax@15
  PgWinBut *v26; // ebx@15
  PgWin *v27; // ST64_4@15
  PgFont *v28; // ST60_4@15
  unsigned int v29; // ST5C_4@15
  unsigned int v30; // eax@15
  PgWinBut *v31; // eax@16
  PgWinBut *v32; // eax@16
  PgWinBut *v33; // eax@16
  PgWinBut *v34; // eax@16
  bool v35; // bl@16
  PgSprData *v36; // eax@16
  PgFont *v37; // eax@17
  PgWinText *v38; // eax@17
  bool v39; // bl@18
  PgSprData *v40; // eax@18
  PgFont *v41; // eax@19
  PgWinText *v42; // eax@19
  bool v43; // bl@20
  PgSprData *v44; // eax@20
  PgFont *v45; // eax@21
  PgWinText *v46; // eax@21
  bool v47; // bl@22
  PgSprData *v48; // eax@22
  PgFont *v49; // eax@23
  PgWinText *v50; // eax@23
  PgSprData *v51; // eax@24
  PgWin *v52; // ebx@24
  PgFont *v53; // ST64_4@24
  unsigned int v54; // ST60_4@24
  unsigned int v55; // eax@24
  PgWinText *v56; // eax@24
  char *v57; // eax@25
  char *v58; // eax@25
  char *v59; // eax@25
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v60; // eax@25
  PgSprData *v61; // eax@28
  PgWin *v62; // ST68_4@28
  PgFont *v63; // ST64_4@28
  unsigned int v64; // ST60_4@28
  unsigned int v65; // eax@28
  PgWinText *v66; // eax@28
  NiRefObjectVtbl *v67; // edi@28
  char *v68; // eax@28
  NiNode *v69; // esi@29
  unsigned int v70; // [sp+70h] [bp-68h]@1
  UIUtil ui; // [sp+80h] [bp-58h]@16
  unsigned int uiWidth; // [sp+94h] [bp-44h]@16
  unsigned int uiHeight; // [sp+98h] [bp-40h]@16
  NiTexturePalette *pTexturePalette; // [sp+9Ch] [bp-3Ch]@7
  int uiLeft; // [sp+A0h] [bp-38h]@10
  int uiTop; // [sp+A4h] [bp-34h]@10
  NiPointer<NiNode> spNode; // [sp+A8h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+ACh] [bp-2Ch]@25
  unsigned int v79; // [sp+C8h] [bp-10h]@1
  int v80; // [sp+D4h] [bp-4h]@1
  int v81; // [sp+D8h] [bp+0h]@1

  v79 = (unsigned int)&v81 ^ __security_cookie;
  v70 = (unsigned int)&v81 ^ __security_cookie;
  v3 = this;
  spNode.m_pObject = 0;
  v80 = 0;
  v4 = MenuTexMgr::GetTexture(4u);
  if ( !v4 )
  {
    v80 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spNode.m_pObject )
        spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spNode.m_pObject,
          1u);
    }
    return 0;
  }
  pTexturePalette = dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v6 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameReport.nif");
  PgUtil::LoadNodeNifFile(v6, &spNode, pTexturePalette);
  if ( !spNode.m_pObject )
    return 0;
  v7 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", &uiLeft, &uiTop, v4);
  v3->m_IsRewardWin = IsRewardWin != 0;
  if ( IsRewardWin )
  {
    if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v7, 0, pkFrameWork, "MHDiceRewardMoneyWin", 0) )
    {
LABEL_12:
      v80 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      return 0;
    }
    v8 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn01Nor", &uiLeft, &uiTop, v4);
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "Btn01Click");
    PgSprData::Add(v8, &spNode.m_pObject->baseclass_0, "Btn01Over");
    v9 = PgWinBut::CreateWin(uiLeft, uiTop, v8, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkOkBut, (NiD3DDefaultShader *)v9);
    v10 = v3->m_pkOkBut.m_pObject;
    v11 = (PgWin *)v3->m_pkOkBut.m_pObject;
    v12 = Font::Get(0);
    v13 = ((int (__thiscall *)(PgWinBut *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v10);
    v14 = ((int (__thiscall *)(PgWinBut *))v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v10);
    v15 = (NiTexturePalette **)PgWinText::CreateWin(0, 1, v14, v13, v12, v11, 0, 0);
    ((void (__thiscall *)(NiTexturePalette **, signed int, unsigned int))(*v15)[61].baseclass_0.vfptr)(v15, 5, v70);
    pTexturePalette = *v15;
    v16 = TextData2::Get(0x96947FE1u);
    ((void (__thiscall *)(NiTexturePalette **, char *))pTexturePalette[59].baseclass_0.vfptr)(v15, v16);
    ((void (__thiscall *)(NiTexturePalette **, _DWORD))(*v15)[30].baseclass_0.vfptr)(v15, 0);
    v17 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Btn02Nor", &uiLeft, &uiTop, v4);
    PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "Btn02Click");
    PgSprData::Add(v17, &spNode.m_pObject->baseclass_0, "Btn02Over");
    v18 = (PgWin *)PgWinBut::CreateWin(uiLeft, uiTop, v17, &v3->baseclass_0.baseclass_0.baseclass_0, 1u, 0, 0);
    v19 = Font::Get(0);
    v20 = ((int (__thiscall *)(PgWin *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v18);
    v21 = ((int (__thiscall *)(PgWin *))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v18);
    v22 = (NiTexturePalette **)PgWinText::CreateWin(0, 1, v21, v20, v19, v18, 0, 0);
    ((void (__thiscall *)(NiTexturePalette **, signed int))(*v22)[61].baseclass_0.vfptr)(v22, 5);
    pTexturePalette = *v22;
    TextData2::Get(0x8C94D3E2u);
    v23 = pTexturePalette;
  }
  else
  {
    if ( !PgWinFrame::Create(&v3->baseclass_0, 0, 0, v7, 0, pkFrameWork, "MHDiceExpectMoneyWin", 0) )
      goto LABEL_12;
    v24 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "OKNor", &uiLeft, &uiTop, v4);
    PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "OKClick");
    PgSprData::Add(v24, &spNode.m_pObject->baseclass_0, "OKOver");
    v25 = PgWinBut::CreateWin(uiLeft, uiTop, v24, &v3->baseclass_0.baseclass_0.baseclass_0, 2u, 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkOkBut, (NiD3DDefaultShader *)v25);
    v26 = v3->m_pkOkBut.m_pObject;
    v27 = (PgWin *)v3->m_pkOkBut.m_pObject;
    v28 = Font::Get(0);
    v29 = ((int (__thiscall *)(PgWinBut *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v26);
    v30 = ((int (__thiscall *)(PgWinBut *))v26->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v26);
    v22 = (NiTexturePalette **)PgWinText::CreateWin(0, 1, v30, v29, v28, v27, 0, 0);
    ((void (__thiscall *)(NiTexturePalette **, signed int, unsigned int))(*v22)[61].baseclass_0.vfptr)(v22, 5, v70);
    pTexturePalette = *v22;
    TextData::Get(0x4F5F499Fu);
    v23 = pTexturePalette;
  }
  ((void (__thiscall *)(NiTexturePalette **))v23[59].baseclass_0.vfptr)(v22);
  ((void (__thiscall *)(NiTexturePalette **, _DWORD))(*v22)[30].baseclass_0.vfptr)(v22, 0);
  UIUtil::UIUtil(&ui);
  LOBYTE(v80) = 1;
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetParent(&ui, &v3->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v31 = UIUtil::CreateBtn(&ui, 0, "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", "MyCopperBtn", v4);
  v31->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v31,
    0);
  v32 = UIUtil::CreateBtn(&ui, 0, "MySilverBtn", "MySilverBtn", "MySilverBtn", "MySilverBtn", v4);
  v32->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v32,
    0);
  v33 = UIUtil::CreateBtn(&ui, 0, "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", "MyGoldBtn", v4);
  v33->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v33,
    0);
  v34 = UIUtil::CreateBtn(&ui, 0, "MyGemBtn", "MyGemBtn", "MyGemBtn", "MyGemBtn", v4);
  v34->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v34,
    0);
  v35 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MyCopperInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v36 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyCopperInput", &uiLeft, &uiTop, v4);
  PgWinSpr::CreateWin(uiLeft, uiTop, v36, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v35 )
  {
    v37 = Font::Get(0);
    v38 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v37,
            &v3->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkCopperText, (NiD3DDefaultShader *)v38);
    ((void (__stdcall *)(signed int))v3->m_pkCopperText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    ((void (__stdcall *)(_UNKNOWN *))v3->m_pkCopperText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D419A);
    v3->m_pkCopperText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v3->m_pkCopperText.m_pObject,
      0);
  }
  v39 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MySilverInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v40 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MySilverInput", &uiLeft, &uiTop, v4);
  PgWinSpr::CreateWin(uiLeft, uiTop, v40, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v39 )
  {
    v41 = Font::Get(0);
    v42 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v41,
            &v3->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkSilverText, (NiD3DDefaultShader *)v42);
    ((void (__stdcall *)(signed int))v3->m_pkSilverText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    ((void (__stdcall *)(_UNKNOWN *))v3->m_pkSilverText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D419B);
    v3->m_pkSilverText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v3->m_pkSilverText.m_pObject,
      0);
  }
  v43 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MyGoldInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v44 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyGoldInput", &uiLeft, &uiTop, v4);
  PgWinSpr::CreateWin(uiLeft, uiTop, v44, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v43 )
  {
    v45 = Font::Get(0);
    v46 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v45,
            &v3->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkGoldText, (NiD3DDefaultShader *)v46);
    ((void (__stdcall *)(signed int))v3->m_pkGoldText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    ((void (__stdcall *)(_UNKNOWN *))v3->m_pkGoldText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D41A7);
    v3->m_pkGoldText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v3->m_pkGoldText.m_pObject,
      0);
  }
  v47 = PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "MyGemInput", &uiLeft, &uiTop, &uiWidth, &uiHeight);
  v48 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MyGemInput", &uiLeft, &uiTop, v4);
  PgWinSpr::CreateWin(uiLeft, uiTop, v48, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  if ( v47 )
  {
    v49 = Font::Get(0);
    v50 = PgWinText::CreateWin(
            uiLeft + 2,
            uiTop + 4,
            uiWidth,
            uiHeight,
            v49,
            &v3->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkGemText, (NiD3DDefaultShader *)v50);
    ((void (__stdcall *)(signed int))v3->m_pkGemText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    ((void (__stdcall *)(_UNKNOWN *))v3->m_pkGemText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D41B7);
    v3->m_pkGemText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v3->m_pkGemText.m_pObject,
      0);
  }
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, v4);
  v52 = (PgWin *)PgWinSpr::CreateWin(uiLeft, uiTop, v51, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor((NiRefObject *)v52, 0);
  v53 = Font::Get(0);
  v54 = ((int (__thiscall *)(PgWin *))v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v52);
  v55 = ((int (__thiscall *)(PgWin *))v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v52);
  v56 = PgWinText::CreateWin(0, 1, v55, v54, v53, v52, 0, 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkTitleText1, (NiD3DDefaultShader *)v56);
  ((void (__stdcall *)(signed int))v3->m_pkTitleText1.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(4);
  ((void (__stdcall *)(_UNKNOWN *))v3->m_pkTitleText1.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(&unk_9D41DF);
  v3->m_pkTitleText1.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v3->m_pkTitleText1.m_pObject,
    0);
  if ( IsRewardWin )
  {
    v57 = TextData2::Get(0x96E6C0DEu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &strText,
      v57);
    LOBYTE(v80) = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
    v58 = TextData2::Get(0x889AABCDu);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, v58, strlen(v58));
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
    v59 = TextData2::Get(0xA1737AE5u);
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, v59, strlen(v59));
    v60 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&strText;
    if ( strText.baseclass_0._Myres < 0x10 )
      v60 = &strText;
    ((void (__stdcall *)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *))v3->m_pkTitleText1.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118].__vecDelDtor)(v60);
    LOBYTE(v80) = 1;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
  }
  else
  {
    v61 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox01", &uiLeft, &uiTop, v4);
    v62 = (PgWin *)PgWinSpr::CreateWin(uiLeft, uiTop, v61, &v3->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v63 = Font::Get(0);
    v64 = ((int (__thiscall *)(PgWin *))v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[37].__vecDelDtor)(v62);
    v65 = ((int (__thiscall *)(PgWin *))v62->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)(v62);
    v66 = PgWinText::CreateWin(0, 1, v65, v64, v63, v62, 0, 0);
    NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v3->m_pkTitleText2, (NiD3DDefaultShader *)v66);
    ((void (__stdcall *)(signed int))v3->m_pkTitleText2.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    v67 = v3->m_pkTitleText2.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    pTexturePalette = (NiTexturePalette *)v3->m_pkTitleText2.m_pObject;
    v68 = TextData::Get(0x3B609389u);
    v67[118].__vecDelDtor((NiRefObject *)pTexturePalette, (unsigned int)v68);
    v3->m_pkTitleText2.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v3->m_pkTitleText2.m_pObject,
      0);
  }
  ((void (__thiscall *)(MHDiceRewardMoneyWin *, unsigned int, unsigned int, _DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v3,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5);
  LOBYTE(v80) = 0;
  UIUtil::_UIUtil(&ui);
  v69 = spNode.m_pObject;
  v80 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v69 )
    v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v69, 1u);
  return 1;
}
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;

//----- (0071C0C0) --------------------------------------------------------
bool __thiscall MiniHouseDiceGameWin::Create(MiniHouseDiceGameWin *this, PgFrameWork *pkFrameWork)
{
  MiniHouseDiceGameWin *v2; // ebx@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // edi@10
  bool v11; // al@14
  PgSprData *v12; // esi@15
  PgFrameWork *v13; // eax@15
  NiNode *v14; // esi@18
  int v15; // edi@23
  int v16; // esi@23
  PgWinSpr *v17; // eax@23
  PgWinSpr *v18; // eax@23
  PgWinSpr *v19; // eax@23
  PgWinSpr *v20; // eax@23
  float v21; // esi@23
  int v22; // ebx@23
  PgWinSpr *v23; // eax@24
  int v24; // edi@24
  PgWinSpr *v25; // esi@24
  signed int v26; // ebx@32
  PgSprData *v27; // edi@33
  PgSprData *v28; // esi@33
  unsigned int v29; // edi@41
  char *v30; // esi@41
  BettingBut *v31; // eax@42
  int v32; // ebx@42
  int v33; // eax@47
  int v34; // eax@49
  MiniHouseDiceGameWin *v35; // esi@50
  unsigned int v36; // ebx@50
  PgWinSpr *v37; // eax@51
  NiRefObjectVtbl *v38; // esi@51
  PgWinSpr *v39; // edi@51
  PgWinSpr *v40; // eax@59
  PgWin *v41; // esi@59
  char *v42; // eax@59
  PgWin *v43; // esi@59
  char *v44; // eax@59
  PgWin *v45; // esi@59
  char *v46; // eax@59
  PgSprData *v47; // eax@59
  MiniHouseDiceGameWin *v48; // ebx@59
  PgSprData *v49; // edi@59
  PgSprData *v50; // esi@59
  PgSprData *v51; // eax@66
  PgSprData *v52; // esi@66
  PgSprData *v53; // edi@66
  PgSprData *v54; // eax@73
  PgSprData *v55; // esi@73
  PgSprData *v56; // edi@73
  PgSprData *v57; // eax@80
  PgSprData *v58; // esi@80
  PgSprData *v59; // edi@80
  PgSprData *v60; // eax@87
  PgSprData *v61; // esi@87
  PgSprData *v62; // edi@87
  PgSprData *v63; // eax@94
  PgSprData *v64; // esi@94
  PgSprData *v65; // edi@94
  int v66; // ebx@101
  PgSprData *v67; // edi@102
  signed int v68; // esi@102
  NiPointer<PgSprData::PgHitTester> *v69; // eax@107
  int v70; // esi@107
  int v71; // edx@107
  float v72; // ecx@107
  int v73; // eax@107
  int v74; // eax@107
  int v75; // eax@107
  int v76; // edx@107
  int v77; // eax@107
  int v78; // eax@107
  int v79; // eax@107
  int v80; // esi@108
  int v81; // eax@108
  int v82; // eax@108
  int v83; // edx@108
  int v84; // eax@108
  PgWinSpr *v85; // eax@109
  int v86; // esi@109
  PgWinSpr *v87; // edi@109
  PgSprData *v88; // esi@117
  MiniHouseDiceGameWin *v89; // edi@117
  char *v90; // esi@117
  float v91; // eax@118
  int v92; // ebx@118
  PgWinSpr *v93; // eax@126
  int v94; // ebx@126
  float v95; // eax@131
  int v96; // esi@134
  float v97; // eax@135
  int v98; // ebx@135
  PgWinSpr *v99; // eax@143
  int v100; // ebx@143
  float v101; // eax@148
  PgSprData *v102; // esi@151
  int v103; // esi@151
  float v104; // eax@152
  int v105; // ebx@152
  PgWinSpr *v106; // eax@160
  int v107; // ebx@160
  float v108; // eax@165
  signed int v109; // ebx@168
  __int64 v110; // kr00_8@168
  int v111; // esi@169
  signed __int64 v112; // kr08_8@169
  int v113; // esi@174
  int v114; // ebx@175
  PgWinBut *v115; // esi@177
  char *v116; // eax@177
  PgWinBut *v117; // esi@177
  char *v118; // eax@177
  PgSprData *v119; // esi@177
  ToggleBut *v120; // eax@177
  ToggleBut *v121; // esi@177
  ToggleBut *v122; // ebx@177
  PgWin *v123; // esi@184
  char *v124; // eax@184
  PgSprData *v125; // esi@184
  ToggleBut *v126; // eax@184
  ToggleBut *v127; // esi@184
  ToggleBut *v128; // ebx@184
  PgWin *v129; // esi@191
  char *v130; // eax@191
  PgSprData *v131; // esi@191
  ToggleBut *v132; // eax@191
  ToggleBut *v133; // esi@191
  ToggleBut *v134; // ebx@191
  PgWin *v135; // esi@198
  char *v136; // eax@198
  PgSprData *v137; // esi@198
  ToggleBut *v138; // eax@198
  ToggleBut *v139; // esi@198
  ToggleBut *v140; // ebx@198
  PgWin *v141; // esi@205
  char *v142; // eax@205
  PgSprData *v143; // esi@205
  ToggleBut *v144; // eax@205
  ToggleBut *v145; // esi@205
  ToggleBut *v146; // ebx@205
  PgWin *v147; // esi@212
  char *v148; // eax@212
  PgSprData *v149; // esi@212
  ToggleBut *v150; // eax@212
  ToggleBut *v151; // esi@212
  ToggleBut *v152; // ebx@212
  PgWin *v153; // esi@219
  char *v154; // eax@219
  int v155; // ebx@219
  int v156; // esi@220
  int (__thiscall *v157)(_DWORD); // eax@220
  int v158; // ecx@220
  ToggleBut *v159; // esi@226
  void *(__thiscall *v160)(NiRefObject *, unsigned int); // eax@226
  ToggleBut *v161; // ecx@226
  PgWinBut *v162; // eax@231
  NiNode *v163; // esi@231
  PgWinBut *v164; // ebx@231
  PgWinBut *v165; // esi@238
  char *v166; // eax@238
  PgSprData *v167; // esi@238
  int v168; // ebx@238
  int v169; // esi@238
  PgWinSpr *v170; // eax@239
  int v171; // ebx@239
  float v172; // eax@244
  PgWinSpr *v173; // eax@246
  int v174; // ebx@246
  float v175; // eax@251
  NiTexturingProperty *v176; // esi@255
  NiNode *v177; // esi@257
  PgFont *v178; // eax@261
  PgWinText *v179; // eax@261
  PgWinText *v180; // esi@261
  PgWinText *v181; // ebx@261
  NiTexturingProperty *v182; // esi@269
  NiNode *v183; // esi@271
  PgFont *v184; // eax@275
  PgWinText *v185; // eax@275
  PgWinText *v186; // esi@275
  PgWinText *v187; // ebx@275
  NiTexturingProperty *v188; // esi@283
  NiNode *v189; // esi@285
  PgFont *v190; // eax@289
  PgWinText *v191; // esi@289
  NiNode *v192; // ebx@289
  int v193; // eax@297
  char v194; // cl@298
  char *v195; // eax@299
  char v196; // cl@300
  int v197; // edx@301
  int v198; // ecx@301
  NiObject *v199; // ebx@301
  void *v200; // esi@301
  NiObject *v201; // eax@302
  NiRefObjectVtbl *v202; // ecx@304
  int v203; // eax@306
  char v204; // cl@307
  char *v205; // eax@308
  char v206; // cl@309
  int v207; // edx@310
  int v208; // ecx@310
  int v209; // edx@310
  int v210; // ecx@310
  NiNode *v211; // eax@310
  NiNode *v212; // esi@310
  NiNode *v213; // ebx@310
  int v214; // eax@319
  char v215; // cl@320
  char *v216; // eax@321
  char v217; // cl@322
  int v218; // edx@323
  int v219; // ecx@323
  int (__fastcall *v220)(Char *); // edx@323
  NiObject *v221; // ebx@323
  void *v222; // esi@323
  int v223; // ebx@324
  NiObject *v224; // eax@329
  int v225; // esi@333
  int v226; // eax@335
  char v227; // cl@336
  char *v228; // eax@337
  char v229; // cl@338
  int v230; // ecx@339
  __int16 v231; // dx@339
  NiObject *v232; // ebx@339
  void *v233; // esi@339
  NiObject *v234; // eax@340
  NiRefObjectVtbl *v235; // eax@342
  NiNode *v236; // ecx@342
  int v237; // eax@344
  char v238; // cl@345
  char *v239; // eax@346
  char v240; // cl@347
  int v241; // edx@348
  int v242; // ecx@348
  int (__fastcall *v243)(Char *); // edx@348
  NiNode *v244; // eax@348
  NiNode *v245; // esi@348
  NiNode *v246; // ebx@348
  int v247; // eax@357
  char v248; // cl@358
  char *v249; // eax@359
  char v250; // cl@360
  int v251; // edx@361
  int v252; // ecx@361
  int (__fastcall *v253)(Char *); // edx@361
  int v254; // esi@361
  void *v255; // ebx@362
  NiObject *v256; // eax@363
  bool v257; // zf@365
  int v258; // eax@368
  char v259; // cl@369
  char *v260; // eax@370
  char v261; // cl@371
  int v262; // edx@372
  int v263; // ecx@372
  int v264; // edx@372
  int v265; // ecx@372
  int (__fastcall *v266)(Char *); // edx@372
  void *v267; // esi@373
  int v268; // ebx@374
  NiObject *v269; // eax@379
  float v270; // eax@383
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v271; // eax@386
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v272; // esi@386
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v273; // eax@397
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v274; // eax@401
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v275; // esi@401
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v276; // eax@412
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v277; // eax@416
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v278; // esi@416
  unsigned int v279; // edi@419
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v280; // eax@428
  MiniHouseDiceGameWin *v281; // ebx@430
  int v282; // ebx@430
  int v283; // eax@433
  int v284; // eax@437
  int v285; // edx@439
  int v286; // ecx@439
  MiniHouseDiceGameWin *v287; // edx@439
  int v288; // eax@441
  float v289; // ecx@443
  int v290; // eax@445
  MiniHouseDiceGameWin *v291; // ecx@448
  NiRefObjectVtbl *v292; // edx@448
  void *(__thiscall *v293)(NiRefObject *, unsigned int); // edx@448
  NiTexturingProperty *v294; // esi@454
  NiNode *v295; // esi@456
  int v296; // [sp+138h] [bp-26Ch]@107
  PgSprData *v297; // [sp+13Ch] [bp-268h]@107
  PgWin *v298; // [sp+140h] [bp-264h]@107
  char *v299; // [sp+144h] [bp-260h]@107
  signed int v300; // [sp+144h] [bp-260h]@222
  signed int v301; // [sp+144h] [bp-260h]@228
  unsigned int v302; // [sp+148h] [bp-25Ch]@1
  unsigned int v303; // [sp+148h] [bp-25Ch]@59
  int v304; // [sp+148h] [bp-25Ch]@171
  int iTop; // [sp+158h] [bp-24Ch]@102
  NiPointer<NiTexturingProperty> spTexProp; // [sp+15Ch] [bp-248h]@4
  UIUtil ui; // [sp+160h] [bp-244h]@23
  unsigned int uiHeight; // [sp+174h] [bp-230h]@1
  unsigned int uiWidth; // [sp+178h] [bp-22Ch]@1
  float v310; // [sp+17Ch] [bp-228h]@342
  __int64 i64Val; // [sp+180h] [bp-224h]@102
  NiObject *iOffY; // [sp+188h] [bp-21Ch]@23
  NiSourceTexture *pkTexture; // [sp+18Ch] [bp-218h]@7
  MiniHouseDiceGameWin *pkSprData; // [sp+190h] [bp-214h]@1
  NiObject *iOffX; // [sp+194h] [bp-210h]@23
  PgSprData *i; // [sp+198h] [bp-20Ch]@32
  int v317; // [sp+19Ch] [bp-208h]@42
  int uiTop; // [sp+1A0h] [bp-204h]@1
  int uiLeft; // [sp+1A4h] [bp-200h]@1
  float v320; // [sp+1A8h] [bp-1FCh]@24
  NiPointer<NiNode> spNode; // [sp+1ACh] [bp-1F8h]@1
  NiMatrix3 kMatX; // [sp+1B0h] [bp-1F4h]@430
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Directoryname; // [sp+1D4h] [bp-1D0h]@384
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Filename; // [sp+1F0h] [bp-1B4h]@384
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > result; // [sp+20Ch] [bp-198h]@386
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strPath; // [sp+228h] [bp-17Ch]@384
  char acNodeName[128]; // [sp+244h] [bp-160h]@33
  char *pcTriShapeName; // [sp+2C4h] [bp-E0h]@41
  int v329; // [sp+2C8h] [bp-DCh]@41
  int v330; // [sp+2CCh] [bp-D8h]@41
  int v331; // [sp+2D0h] [bp-D4h]@41
  int v332; // [sp+2D4h] [bp-D0h]@41
  int v333; // [sp+2D8h] [bp-CCh]@41
  int v334; // [sp+2DCh] [bp-C8h]@41
  int v335; // [sp+2E0h] [bp-C4h]@41
  int v336; // [sp+2E4h] [bp-C0h]@41
  int v337; // [sp+2E8h] [bp-BCh]@41
  int v338; // [sp+2ECh] [bp-B8h]@41
  int v339; // [sp+2F0h] [bp-B4h]@41
  int v340; // [sp+2F4h] [bp-B0h]@41
  int v341; // [sp+2F8h] [bp-ACh]@41
  int v342; // [sp+2FCh] [bp-A8h]@41
  int v343; // [sp+300h] [bp-A4h]@41
  int v344; // [sp+304h] [bp-A0h]@41
  int v345; // [sp+308h] [bp-9Ch]@41
  int v346; // [sp+30Ch] [bp-98h]@41
  int v347; // [sp+310h] [bp-94h]@41
  char string[4]; // [sp+314h] [bp-90h]@24
  int v349; // [sp+318h] [bp-8Ch]@41
  int v350; // [sp+31Ch] [bp-88h]@41
  int v351; // [sp+320h] [bp-84h]@41
  int v352; // [sp+324h] [bp-80h]@41
  int v353; // [sp+328h] [bp-7Ch]@41
  int v354; // [sp+32Ch] [bp-78h]@41
  int v355; // [sp+330h] [bp-74h]@41
  int v356; // [sp+334h] [bp-70h]@41
  int v357; // [sp+338h] [bp-6Ch]@41
  int v358; // [sp+33Ch] [bp-68h]@41
  int v359; // [sp+340h] [bp-64h]@41
  int v360; // [sp+344h] [bp-60h]@41
  int v361; // [sp+348h] [bp-5Ch]@41
  int v362; // [sp+34Ch] [bp-58h]@41
  int v363; // [sp+350h] [bp-54h]@41
  int v364; // [sp+354h] [bp-50h]@41
  int v365; // [sp+358h] [bp-4Ch]@41
  int v366; // [sp+35Ch] [bp-48h]@41
  int v367; // [sp+360h] [bp-44h]@41
  int v368; // [sp+364h] [bp-40h]@41
  char *pcTag; // [sp+368h] [bp-3Ch]@41
  int v370; // [sp+36Ch] [bp-38h]@41
  void *acShareBetType[8]; // [sp+370h] [bp-34h]@41
  int v372; // [sp+390h] [bp-14h]@41
  unsigned int v373; // [sp+394h] [bp-10h]@1
  int v374; // [sp+3A0h] [bp-4h]@1
  int v375; // [sp+3A4h] [bp+0h]@1

  v373 = (unsigned int)&v375 ^ __security_cookie;
  v302 = (unsigned int)&v375 ^ __security_cookie;
  v2 = this;
  pkSprData = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v374 = 0;
  uiHeight = 0;
  uiWidth = 0;
  uiLeft = 0;
  uiTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameMain.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v374) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v374) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v374 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, v13, "DiceGame", 0) )
  {
    LOBYTE(v374) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v14 = spNode.m_pObject;
    v374 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v14 )
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    return 0;
  }
  v15 = uiLeft;
  v16 = uiTop;
  iOffX = (NiObject *)uiLeft;
  iOffY = (NiObject *)uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v374) = 2;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v15, v16);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v17 = UIUtil::CreateSpr(&ui, "TimmerFill", 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spTimerFill, (NiD3DDefaultShader *)v17);
  v18 = UIUtil::CreateSpr(&ui, "TimmerFillBack", 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spTimerBack, (NiD3DDefaultShader *)v18);
  ((void (__stdcall *)(signed int, unsigned int))v2->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
    1,
    v302);
  ((void (__stdcall *)(_DWORD))v2->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v19 = UIUtil::CreateSpr(&ui, "Panel01", 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  UIUtil::CreateSpr(&ui, "Panel04", 0);
  v20 = UIUtil::CreateSpr(&ui, "Timmer", 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spTimer, (NiD3DDefaultShader *)v20);
  LODWORD(v21) = 0;
  v22 = (int)v2->m_spLightSpr;
  do
  {
    memset(string, 0, 0x80u);
    LODWORD(v320) = LODWORD(v21) + 1;
    sprintf(string, "ResultLight%.2d");
    v23 = UIUtil::CreateSpr(&ui, string, 0);
    v24 = *(_DWORD *)v22;
    v25 = v23;
    if ( *(PgWinSpr **)v22 != v23 )
    {
      if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v24)(v24, 1);
      *(_DWORD *)v22 = v25;
      if ( v25 )
        InterlockedIncrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1);
    v21 = v320;
    v22 += 4;
  }
  while ( SLODWORD(v320) < 32 );
  v26 = 0;
  i = (PgSprData *)pkSprData->m_spNumTex;
  do
  {
    memset(acNodeName, 0, 0x80u);
    sprintf(acNodeName, "Num%.2d");
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acNodeName, &uiLeft, &uiTop, pkTexture);
    v28 = (PgSprData *)i->baseclass_0.vfptr;
    if ( (PgSprData *)i->baseclass_0.vfptr != v27 )
    {
      if ( v28 && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.m_uiRefCount) && v28 )
        v28->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
      i->baseclass_0.vfptr = (NiRefObjectVtbl *)v27;
      if ( v27 )
        InterlockedIncrement((volatile LONG *)&v27->baseclass_0.m_uiRefCount);
    }
    i = (PgSprData *)((char *)i + 4);
    ++v26;
  }
  while ( v26 < 10 );
  v29 = 0;
  pcTriShapeName = "bet_EVENNor";
  v329 = (int)"bet_ODDNor";
  v330 = (int)"bet_BIGNor";
  v331 = (int)"bet_SMALLNor";
  v332 = (int)"bet_Dice11Nor";
  v333 = (int)"bet_Dice22Nor";
  v334 = (int)"bet_Dice33Nor";
  v335 = (int)"bet_Dice44Nor";
  v336 = (int)"bet_Dice55Nor";
  v337 = (int)"bet_Dice66Nor";
  v338 = (int)"bet_Dice111Nor";
  v339 = (int)"bet_Dice222Nor";
  v340 = (int)"bet_Dice333Nor";
  v341 = (int)"bet_Dice444Nor";
  v342 = (int)"bet_Dice555Nor";
  v343 = (int)"bet_Dice666Nor";
  v344 = (int)"bet_AnyTripleNor";
  v345 = (int)"bet_Num4Nor";
  v346 = (int)"bet_Num5Nor";
  v347 = (int)"bet_Num6Nor";
  *(_DWORD *)string = "bet_Num7Nor";
  v349 = (int)"bet_Num8Nor";
  v350 = (int)"bet_Num9Nor";
  v351 = (int)"bet_Num10Nor";
  v352 = (int)"bet_Num11Nor";
  v353 = (int)"bet_Num12Nor";
  v354 = (int)"bet_Num13Nor";
  v355 = (int)"bet_Num14Nor";
  v356 = (int)"bet_Num15Nor";
  v357 = (int)"bet_Num16Nor";
  v358 = (int)"bet_Num17Nor";
  v359 = (int)"bet_Dice12Nor";
  v360 = (int)"bet_Dice13Nor";
  v361 = (int)"bet_Dice14Nor";
  v362 = (int)"bet_Dice15Nor";
  v363 = (int)"bet_Dice16Nor";
  v364 = (int)"bet_Dice23Nor";
  v365 = (int)"bet_Dice24Nor";
  v366 = (int)"bet_Dice25Nor";
  v367 = (int)"bet_Dice26Nor";
  v368 = (int)"bet_Dice34Nor";
  pcTag = "bet_Dice35Nor";
  v370 = (int)"bet_Dice36Nor";
  acShareBetType[0] = "bet_Dice45Nor";
  acShareBetType[1] = "bet_Dice46Nor";
  acShareBetType[2] = "bet_Dice56Nor";
  acShareBetType[3] = "bet_ONENor";
  acShareBetType[4] = "bet_TWONor";
  acShareBetType[5] = "bet_THREENor";
  acShareBetType[6] = "bet_FOURNor";
  acShareBetType[7] = "bet_FIVENor";
  v372 = (int)"bet_SIXNor";
  v30 = (char *)pkSprData->m_spBettingBut;
  do
  {
    v31 = MiniHouseDiceGameWin::MakeButton(
            pkSprData,
            &spNode.m_pObject->baseclass_0,
            (&pcTriShapeName)[4 * v29],
            &uiLeft,
            &uiTop,
            v29,
            pkTexture);
    v32 = *(_DWORD *)v30;
    v317 = (int)v31;
    if ( (BettingBut *)v32 != v31 )
    {
      if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v32)(v32, 1);
      v33 = v317;
      *(_DWORD *)v30 = v317;
      if ( v33 )
        InterlockedIncrement((volatile LONG *)(v33 + 4));
    }
    *(_BYTE *)(*(_DWORD *)v30 + 328) = 0;
    *(_DWORD *)(*(_DWORD *)v30 + 272) = g_pkToolTipWin;
    v34 = *(_DWORD *)v30;
    ++v29;
    v30 += 4;
    *(_BYTE *)(v34 + 320) = 0;
  }
  while ( (signed int)v29 < 52 );
  v35 = pkSprData;
  pkSprData->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)pkSprData,
    1u);
  v36 = 0;
  v359 = (int)"History1_1";
  v360 = (int)"History1_2";
  v361 = (int)"History1_3";
  v362 = (int)"History2_1";
  v363 = (int)"History2_2";
  v364 = (int)"History2_3";
  v365 = (int)"History3_1";
  v366 = (int)"History3_2";
  v367 = (int)"History3_3";
  v368 = (int)"History4_1";
  pcTag = "History4_2";
  v370 = (int)"History4_3";
  acShareBetType[0] = "History5_1";
  acShareBetType[1] = "History5_2";
  acShareBetType[2] = "History5_3";
  acShareBetType[3] = "History6_1";
  acShareBetType[4] = "History6_2";
  acShareBetType[5] = "History6_3";
  acShareBetType[6] = "History7_1";
  acShareBetType[7] = "History7_2";
  v372 = (int)"History7_3";
  i = (PgSprData *)v35->m_spHistroyPos;
  do
  {
    v37 = UIUtil::CreateSpr(&ui, (char *)*(&v359 + v36), 0);
    v38 = i->baseclass_0.vfptr;
    v39 = v37;
    if ( (PgWinSpr *)i->baseclass_0.vfptr != v37 )
    {
      if ( v38 && !InterlockedDecrement((volatile LONG *)&v38[1]) && v38 )
        (*(void (__thiscall **)(NiRefObjectVtbl *, signed int))v38->__vecDelDtor)(v38, 1);
      i->baseclass_0.vfptr = (NiRefObjectVtbl *)v39;
      if ( v39 )
        InterlockedIncrement((volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    i = (PgSprData *)((char *)i + 4);
    ++v36;
  }
  while ( v36 < 0x15 );
  v40 = UIUtil::CreateSpr(&ui, "Panel_dice", 0);
  v303 = 0;
  ((void (__thiscall *)(PgWinSpr *))v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v40);
  v41 = (PgWin *)UIUtil::CreateSpr(&ui, "Tip_Betting", 0);
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v41,
    COERCE_UNSIGNED_INT(0.0));
  v41->m_pkToolTipWin = g_pkToolTipWin;
  v42 = TextData2::Get(0xFAE4B91Cu);
  PgWin::SetToolTipWinText(v41, v42);
  v43 = (PgWin *)UIUtil::CreateSpr(&ui, "Tip_Share", 0);
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v43,
    COERCE_UNSIGNED_INT(0.0));
  v43->m_pkToolTipWin = g_pkToolTipWin;
  v44 = TextData2::Get(0x7E97C0C9u);
  PgWin::SetToolTipWinText(v43, v44);
  v45 = (PgWin *)UIUtil::CreateSpr(&ui, "Tip_InvenMoney", 0);
  v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v45,
    COERCE_UNSIGNED_INT(0.0));
  v45->m_pkToolTipWin = g_pkToolTipWin;
  v46 = TextData2::Get(0x4445191Eu);
  PgWin::SetToolTipWinText(v45, v46);
  v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice01", &uiLeft, &uiTop, 0);
  v48 = pkSprData;
  v49 = v47;
  v50 = pkSprData->m_spDiceNum[0].m_pObject;
  if ( v50 != v47 )
  {
    if ( v50 && !InterlockedDecrement((volatile LONG *)&v50->baseclass_0.m_uiRefCount) && v50 )
      v50->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v50, 1u);
    v48->m_spDiceNum[0].m_pObject = v49;
    if ( v49 )
      InterlockedIncrement((volatile LONG *)&v49->baseclass_0.m_uiRefCount);
  }
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice02", &uiLeft, &uiTop, 0);
  v52 = v48->m_spDiceNum[1].m_pObject;
  v53 = v51;
  if ( v52 != v51 )
  {
    if ( v52 && !InterlockedDecrement((volatile LONG *)&v52->baseclass_0.m_uiRefCount) && v52 )
      v52->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
    v48->m_spDiceNum[1].m_pObject = v53;
    if ( v53 )
      InterlockedIncrement((volatile LONG *)&v53->baseclass_0.m_uiRefCount);
  }
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice03", &uiLeft, &uiTop, 0);
  v55 = v48->m_spDiceNum[2].m_pObject;
  v56 = v54;
  if ( v55 != v54 )
  {
    if ( v55 && !InterlockedDecrement((volatile LONG *)&v55->baseclass_0.m_uiRefCount) && v55 )
      v55->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
    v48->m_spDiceNum[2].m_pObject = v56;
    if ( v56 )
      InterlockedIncrement((volatile LONG *)&v56->baseclass_0.m_uiRefCount);
  }
  v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice04", &uiLeft, &uiTop, 0);
  v58 = v48->m_spDiceNum[3].m_pObject;
  v59 = v57;
  if ( v58 != v57 )
  {
    if ( v58 && !InterlockedDecrement((volatile LONG *)&v58->baseclass_0.m_uiRefCount) && v58 )
      v58->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v58, 1u);
    v48->m_spDiceNum[3].m_pObject = v59;
    if ( v59 )
      InterlockedIncrement((volatile LONG *)&v59->baseclass_0.m_uiRefCount);
  }
  v60 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice05", &uiLeft, &uiTop, 0);
  v61 = v48->m_spDiceNum[4].m_pObject;
  v62 = v60;
  if ( v61 != v60 )
  {
    if ( v61 && !InterlockedDecrement((volatile LONG *)&v61->baseclass_0.m_uiRefCount) && v61 )
      v61->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v61, 1u);
    v48->m_spDiceNum[4].m_pObject = v62;
    if ( v62 )
      InterlockedIncrement((volatile LONG *)&v62->baseclass_0.m_uiRefCount);
  }
  v63 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice06", &uiLeft, &uiTop, 0);
  v64 = v48->m_spDiceNum[5].m_pObject;
  v65 = v63;
  if ( v64 != v63 )
  {
    if ( v64 && !InterlockedDecrement((volatile LONG *)&v64->baseclass_0.m_uiRefCount) && v64 )
      v64->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v64, 1u);
    v48->m_spDiceNum[5].m_pObject = v65;
    if ( v65 )
      InterlockedIncrement((volatile LONG *)&v65->baseclass_0.m_uiRefCount);
  }
  i = 0;
  v66 = (int)v48->m_spChips;
  do
  {
    string[0] = 0;
    memset(&string[1], 0, 0x7Fu);
    sprintf(string, "%s01");
    v67 = PgSprData::Create(&spNode.m_pObject->baseclass_0, string, (int *)&i64Val + 1, &iTop, pkTexture);
    v68 = 2;
    do
    {
      memset(string, 0, 0x80u);
      sprintf(string, "%s%.2d");
      PgSprData::Add(v67, &spNode.m_pObject->baseclass_0, string);
      ++v68;
    }
    while ( v68 <= 5 );
    if ( ((signed int)i <= 2 || (signed int)i >= 7) && i != (PgSprData *)1 )
    {
      v80 = *(_DWORD *)(v66 - 208);
      v81 = *(_DWORD *)v80;
      LODWORD(v320) = v67->m_akHitTester.m_pBase[4].m_pObject->m_uiHeight;
      v82 = (*(int (__thiscall **)(int))(v81 + 168))(v80);
      v83 = *(_DWORD *)v80;
      v299 = 0;
      LODWORD(v320) = v82 - LODWORD(v320);
      v298 = 0;
      v297 = (PgSprData *)pkSprData;
      v296 = (int)v67;
      v84 = (*(int (__thiscall **)(int))(v83 + 148))(v80);
      v79 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v80 + 164))(v80, LODWORD(v320) + v84);
    }
    else
    {
      v69 = v67->m_akHitTester.m_pBase;
      v70 = *(_DWORD *)(v66 - 208);
      v71 = v69->m_pObject->m_uiWidth;
      LODWORD(v72) = v69[4].m_pObject->m_uiHeight;
      v73 = *(_DWORD *)v70;
      v320 = v72;
      v317 = v71;
      v74 = (*(int (__thiscall **)(int))(v73 + 168))(v70);
      LODWORD(v320) = v74 - LODWORD(v320);
      v75 = (*(int (__thiscall **)(int))(*(_DWORD *)v70 + 164))(v70);
      v76 = *(_DWORD *)v70;
      v299 = 0;
      v317 = v75 - v317;
      v298 = 0;
      v297 = (PgSprData *)pkSprData;
      v296 = (int)v67;
      v77 = (*(int (__thiscall **)(int))(v76 + 148))(v70);
      v78 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v70 + 144))(v70, LODWORD(v320) + v77);
      v79 = v317 + v78;
    }
    v85 = PgWinSpr::CreateWin(v79, v296, v297, v298, v299, v303);
    v86 = *(_DWORD *)v66;
    v87 = v85;
    if ( *(PgWinSpr **)v66 != v85 )
    {
      if ( v86 && !InterlockedDecrement((volatile LONG *)(v86 + 4)) && v86 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v86)(v86, 1);
      *(_DWORD *)v66 = v87;
      if ( v87 )
        InterlockedIncrement((volatile LONG *)&v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v303 = 0;
    (*(void (**)(void))(**(_DWORD **)v66 + 240))();
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v66 + 256))(0);
    v66 += 4;
    i = (PgSprData *)((char *)i + 1);
  }
  while ( (signed int)i < 52 );
  v88 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BetMoneyNum00", &uiLeft, &uiTop, pkTexture);
  i = v88;
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum01");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum02");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum03");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum04");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum05");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum06");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum07");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum08");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum09");
  v89 = pkSprData;
  acShareBetType[1] = "bet_Gold02";
  acShareBetType[2] = "bet_Gold01";
  acShareBetType[3] = "bet_Silver03";
  acShareBetType[4] = "bet_Silver02";
  acShareBetType[5] = "bet_Silver01";
  acShareBetType[6] = "bet_Cooper03";
  acShareBetType[7] = "bet_Cooper02";
  v372 = (int)"bet_Cooper01";
  v317 = 0;
  v90 = (char *)pkSprData->m_spBetNumSpr;
  do
  {
    LODWORD(v91) = UIUtil::CreateSpr(&ui, (char *)acShareBetType[v317 + 1], 0);
    v92 = *((_DWORD *)v90 - 8);
    v320 = v91;
    if ( v92 != LODWORD(v91) )
    {
      if ( v92 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v92 + 4)) && v92 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v92)(v92, 1);
        v91 = v320;
      }
      *((_DWORD *)v90 - 8) = LODWORD(v91);
      if ( LODWORD(v91) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v91) + 4));
    }
    (*(void (__stdcall **)(signed int, unsigned int))(**((_DWORD **)v90 - 8) + 256))(1, v303);
    v93 = PgWinSpr::CreateWin(uiLeft, uiTop, i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v94 = *(_DWORD *)v90;
    LODWORD(v320) = v93;
    if ( (PgWinSpr *)v94 != v93 )
    {
      if ( v94 && !InterlockedDecrement((volatile LONG *)(v94 + 4)) && v94 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v94)(v94, 1);
      v95 = v320;
      *(_DWORD *)v90 = LODWORD(v320);
      if ( LODWORD(v95) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v95) + 4));
    }
    v303 = 0;
    (*(void (**)(void))(**(_DWORD **)v90 + 240))();
    (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v90 - 8) + 116))(*(_DWORD *)v90, 0);
    v90 += 4;
    ++v317;
  }
  while ( (unsigned int)v317 < 8 );
  acShareBetType[1] = "Share_Gold02";
  acShareBetType[2] = "Share_Gold01";
  acShareBetType[3] = "Share_Silver03";
  acShareBetType[4] = "Share_Silver02";
  acShareBetType[5] = "Share_Silver01";
  acShareBetType[6] = "Share_Cooper03";
  acShareBetType[7] = "Share_Cooper02";
  v372 = (int)"Share_Cooper01";
  v317 = 0;
  v96 = (int)v89->m_spShareNumSpr;
  do
  {
    LODWORD(v97) = UIUtil::CreateSpr(&ui, (char *)acShareBetType[v317 + 1], 0);
    v98 = *(_DWORD *)(v96 - 32);
    v320 = v97;
    if ( v98 != LODWORD(v97) )
    {
      if ( v98 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v98 + 4)) && v98 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v98)(v98, 1);
        v97 = v320;
      }
      *(_DWORD *)(v96 - 32) = LODWORD(v97);
      if ( LODWORD(v97) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v97) + 4));
    }
    (*(void (__stdcall **)(signed int, unsigned int))(**(_DWORD **)(v96 - 32) + 256))(1, v303);
    v99 = PgWinSpr::CreateWin(uiLeft, uiTop, i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v100 = *(_DWORD *)v96;
    LODWORD(v320) = v99;
    if ( (PgWinSpr *)v100 != v99 )
    {
      if ( v100 && !InterlockedDecrement((volatile LONG *)(v100 + 4)) && v100 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v100)(v100, 1);
      v101 = v320;
      *(_DWORD *)v96 = LODWORD(v320);
      if ( LODWORD(v101) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v101) + 4));
    }
    v303 = 0;
    (*(void (**)(void))(**(_DWORD **)v96 + 240))();
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v96 - 32) + 116))(*(_DWORD *)v96, 0);
    v96 += 4;
    ++v317;
  }
  while ( (unsigned int)v317 < 8 );
  v102 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num00", &uiLeft, &uiTop, pkTexture);
  i = v102;
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num01");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num02");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num03");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num04");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num05");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num06");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num07");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num08");
  PgSprData::Add(v102, &spNode.m_pObject->baseclass_0, "Num09");
  pcTag = "MyMoney_Gem03";
  v370 = (int)"MyMoney_Gem02";
  acShareBetType[0] = "MyMoney_Gem01";
  acShareBetType[1] = "MyMoney_Gold02";
  acShareBetType[2] = "MyMoney_Gold01";
  acShareBetType[3] = "MyMoney_Silver03";
  acShareBetType[4] = "MyMoney_Silver02";
  acShareBetType[5] = "MyMoney_Silver01";
  acShareBetType[6] = "MyMoney_Cooper03";
  acShareBetType[7] = "MyMoney_Cooper02";
  v372 = (int)"MyMoney_Cooper01";
  v317 = 0;
  v103 = (int)v89->m_spMyBetNumSpr;
  do
  {
    LODWORD(v104) = UIUtil::CreateSpr(&ui, (&pcTag)[4 * v317], 0);
    v105 = *(_DWORD *)(v103 - 48);
    v320 = v104;
    if ( v105 != LODWORD(v104) )
    {
      if ( v105 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v105 + 4)) && v105 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v105)(v105, 1);
        v104 = v320;
      }
      *(_DWORD *)(v103 - 48) = LODWORD(v104);
      if ( LODWORD(v104) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v104) + 4));
    }
    (*(void (__stdcall **)(signed int, unsigned int))(**(_DWORD **)(v103 - 48) + 256))(1, v303);
    v106 = PgWinSpr::CreateWin(uiLeft, uiTop, i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v107 = *(_DWORD *)v103;
    LODWORD(v320) = v106;
    if ( (PgWinSpr *)v107 != v106 )
    {
      if ( v107 && !InterlockedDecrement((volatile LONG *)(v107 + 4)) && v107 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v107)(v107, 1);
      v108 = v320;
      *(_DWORD *)v103 = LODWORD(v320);
      if ( LODWORD(v108) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v108) + 4));
    }
    v303 = 0;
    (*(void (**)(void))(**(_DWORD **)v103 + 240))();
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v103 - 48) + 116))(*(_DWORD *)v103, 0);
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v103 + 492))(1);
    v103 += 4;
    ++v317;
  }
  while ( (unsigned int)v317 < 0xB );
  v110 = User::GetMoney(&g_kUser);
  HIDWORD(i64Val) = HIDWORD(v110);
  v109 = v110;
  i = (PgSprData *)10;
  v317 = (int)&v89->m_spMyBetNumSpr[10];
  while ( 1 )
  {
    v111 = v109 % 10;
    v112 = (signed __int64)__PAIR__(HIDWORD(i64Val), v109) / 10;
    HIDWORD(i64Val) = (unsigned __int64)((signed __int64)__PAIR__(HIDWORD(i64Val), v109) / 10) >> 32;
    v109 = v112;
    if ( v111 < 0 )
      v111 = 0;
    (*(void (__cdecl **)(int))(**(_DWORD **)v317 + 492))(v111);
    if ( !(HIDWORD(i64Val) | (unsigned int)v112) )
      break;
    v317 -= 4;
    i = (PgSprData *)((char *)i - 1);
    if ( (signed int)i < 0 )
      goto LABEL_177;
  }
  v113 = (int)((char *)i - 1);
  if ( (signed int)((char *)i - 1) >= 0 )
  {
    v114 = (int)&v89->m_spMyBetNumSpr[v113];
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v114 + 492))(0);
      v114 -= 4;
      --v113;
    }
    while ( v113 >= 0 );
  }
LABEL_177:
  v89->m_nTempBettingMoeny = 0;
  v89->m_nUserBettingMoney = 0;
  v115 = UIUtil::CreateBtn(&ui, 0x3Cu, "RankingNor", "RankingClick", "RankingOver", 0, 0);
  v115->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v116 = TextData2::Get(0xD9CBC7D8u);
  PgWin::SetToolTipWinText(&v115->baseclass_0.baseclass_0, v116);
  v117 = UIUtil::CreateBtn(&ui, 0x3Du, "HelpNor", "HelpClick", "HelpOver", 0, 0);
  v117->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v118 = TextData2::Get(0x34361593u);
  PgWin::SetToolTipWinText(&v117->baseclass_0.baseclass_0, v118);
  v119 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "100CopperNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v119, &spNode.m_pObject->baseclass_0, "100CopperClick");
  PgSprData::Add(v119, &spNode.m_pObject->baseclass_0, "100CopperOver");
  v120 = ToggleBut::CreateWin(uiLeft, uiTop, v119, &v89->baseclass_0.baseclass_0.baseclass_0, 0x34u, 0, 0, 0);
  v121 = v89->m_pkChipSelectBut[0].m_pObject;
  v122 = v120;
  if ( v121 != v120 )
  {
    if ( v121
      && !InterlockedDecrement((volatile LONG *)&v121->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v121 )
      v121->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v121,
        1u);
    v89->m_pkChipSelectBut[0].m_pObject = v122;
    if ( v122 )
      InterlockedIncrement((volatile LONG *)&v122->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v123 = (PgWin *)v89->m_pkChipSelectBut[0].m_pObject;
  TextData::Get(0x88AF99F5u);
  v124 = fs("100 %s");
  PgWin::SetToolTipWinText(v123, v124);
  v125 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "1SiverNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v125, &spNode.m_pObject->baseclass_0, "1SiverClick");
  PgSprData::Add(v125, &spNode.m_pObject->baseclass_0, "1SiverOver");
  v126 = ToggleBut::CreateWin(uiLeft, uiTop, v125, &v89->baseclass_0.baseclass_0.baseclass_0, 0x35u, 0, 0, 0);
  v127 = v89->m_pkChipSelectBut[1].m_pObject;
  v128 = v126;
  if ( v127 != v126 )
  {
    if ( v127
      && !InterlockedDecrement((volatile LONG *)&v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v127 )
      v127->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v127,
        1u);
    v89->m_pkChipSelectBut[1].m_pObject = v128;
    if ( v128 )
      InterlockedIncrement((volatile LONG *)&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v129 = (PgWin *)v89->m_pkChipSelectBut[1].m_pObject;
  TextData::Get(0x98B595EFu);
  v130 = fs("1 %s");
  PgWin::SetToolTipWinText(v129, v130);
  v131 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "10SiverNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v131, &spNode.m_pObject->baseclass_0, "10SiverClick");
  PgSprData::Add(v131, &spNode.m_pObject->baseclass_0, "10SiverOver");
  PgSprData::Add(v131, &spNode.m_pObject->baseclass_0, "10SiverDisable");
  v132 = ToggleBut::CreateWin(uiLeft, uiTop, v131, &v89->baseclass_0.baseclass_0.baseclass_0, 0x36u, 0, 0, 0);
  v133 = v89->m_pkChipSelectBut[2].m_pObject;
  v134 = v132;
  if ( v133 != v132 )
  {
    if ( v133
      && !InterlockedDecrement((volatile LONG *)&v133->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v133 )
      v133->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v133,
        1u);
    v89->m_pkChipSelectBut[2].m_pObject = v134;
    if ( v134 )
      InterlockedIncrement((volatile LONG *)&v134->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v135 = (PgWin *)v89->m_pkChipSelectBut[2].m_pObject;
  TextData::Get(0x98B595EFu);
  v136 = fs("10 %s");
  PgWin::SetToolTipWinText(v135, v136);
  v137 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "100SiverNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v137, &spNode.m_pObject->baseclass_0, "100SiverClick");
  PgSprData::Add(v137, &spNode.m_pObject->baseclass_0, "100SiverOver");
  PgSprData::Add(v137, &spNode.m_pObject->baseclass_0, "100SiverDisable");
  v138 = ToggleBut::CreateWin(uiLeft, uiTop, v137, &v89->baseclass_0.baseclass_0.baseclass_0, 0x37u, 0, 0, 0);
  v139 = v89->m_pkChipSelectBut[3].m_pObject;
  v140 = v138;
  if ( v139 != v138 )
  {
    if ( v139
      && !InterlockedDecrement((volatile LONG *)&v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v139 )
      v139->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v139,
        1u);
    v89->m_pkChipSelectBut[3].m_pObject = v140;
    if ( v140 )
      InterlockedIncrement((volatile LONG *)&v140->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v141 = (PgWin *)v89->m_pkChipSelectBut[3].m_pObject;
  TextData::Get(0x98B595EFu);
  v142 = fs("100 %s");
  PgWin::SetToolTipWinText(v141, v142);
  v143 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "GoldNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v143, &spNode.m_pObject->baseclass_0, "GoldClick");
  PgSprData::Add(v143, &spNode.m_pObject->baseclass_0, "GoldOver");
  PgSprData::Add(v143, &spNode.m_pObject->baseclass_0, "GoldDisable");
  v144 = ToggleBut::CreateWin(uiLeft, uiTop, v143, &v89->baseclass_0.baseclass_0.baseclass_0, 0x38u, 0, 0, 0);
  v145 = v89->m_pkChipSelectBut[4].m_pObject;
  v146 = v144;
  if ( v145 != v144 )
  {
    if ( v145
      && !InterlockedDecrement((volatile LONG *)&v145->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v145 )
      v145->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v145,
        1u);
    v89->m_pkChipSelectBut[4].m_pObject = v146;
    if ( v146 )
      InterlockedIncrement((volatile LONG *)&v146->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[4].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v147 = (PgWin *)v89->m_pkChipSelectBut[4].m_pObject;
  TextData::Get(0x47A395A3u);
  v148 = fs("1 %s");
  PgWin::SetToolTipWinText(v147, v148);
  v149 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "MaxNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v149, &spNode.m_pObject->baseclass_0, "MaxClick");
  PgSprData::Add(v149, &spNode.m_pObject->baseclass_0, "MaxOver");
  v150 = ToggleBut::CreateWin(uiLeft, uiTop, v149, &v89->baseclass_0.baseclass_0.baseclass_0, 0x39u, 0, 0, 0);
  v151 = v89->m_pkChipSelectBut[5].m_pObject;
  v152 = v150;
  if ( v151 != v150 )
  {
    if ( v151
      && !InterlockedDecrement((volatile LONG *)&v151->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v151 )
      v151->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v151,
        1u);
    v89->m_pkChipSelectBut[5].m_pObject = v152;
    if ( v152 )
      InterlockedIncrement((volatile LONG *)&v152->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[5].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v153 = (PgWin *)v89->m_pkChipSelectBut[5].m_pObject;
  v154 = TextData2::Get(0x9B8D6ACEu);
  PgWin::SetToolTipWinText(v153, v154);
  v155 = (int)&v89->m_pkChipSelectBut[1];
  LODWORD(v320) = 5;
  do
  {
    v156 = *(_DWORD *)v155;
    v157 = *(int (__thiscall **)(_DWORD))(**(_DWORD **)v155 + 312);
    v158 = *(_DWORD *)v155;
    *(_BYTE *)(*(_DWORD *)v155 + 324) = 1;
    if ( (unsigned __int8)v157(v158) )
    {
      if ( *(_BYTE *)(v156 + 324) )
        v300 = 1;
      else
        v300 = 0;
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v156 + 552))(v156, v300);
    }
    v155 += 4;
    --LODWORD(v320);
  }
  while ( v320 != 0.0 );
  v159 = v89->m_pkChipSelectBut[0].m_pObject;
  v160 = v159->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor;
  v161 = v89->m_pkChipSelectBut[0].m_pObject;
  v159->m_bHighlight = 0;
  if ( (unsigned __int8)((int (__thiscall *)(ToggleBut *))v160)(v161) )
  {
    if ( v159->m_bHighlight )
      v301 = 1;
    else
      v301 = 0;
    v159->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v159,
      v301);
  }
  v162 = UIUtil::CreateBtn(&ui, 0x3Bu, "MinNor", "MinClick", "MinOver", 0, 0);
  v163 = v89->m_EffectPos.m_pObject;
  v164 = v162;
  if ( (PgWinBut *)v163 != v162 )
  {
    if ( v163
      && !InterlockedDecrement((volatile LONG *)&v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v163 )
      v163->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v163, 1u);
    v89->m_EffectPos.m_pObject = (NiNode *)v164;
    if ( v164 )
      InterlockedIncrement((volatile LONG *)&v164->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  UIUtil::CreateBtn(&ui, 0x3Au, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  v165 = UIUtil::CreateBtn(&ui, 0x3Au, "ExitNor", "ExitClick", "ExitOver", 0, 0);
  v165->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v166 = TextData2::Get(0xFA4A423Fu);
  PgWin::SetToolTipWinText(&v165->baseclass_0.baseclass_0, v166);
  v167 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ResultDiceNum01", &uiLeft, &uiTop, 0);
  i = v167;
  PgSprData::Add(v167, &spNode.m_pObject->baseclass_0, "ResultDiceNum02");
  PgSprData::Add(v167, &spNode.m_pObject->baseclass_0, "ResultDiceNum03");
  PgSprData::Add(v167, &spNode.m_pObject->baseclass_0, "ResultDiceNum04");
  PgSprData::Add(v167, &spNode.m_pObject->baseclass_0, "ResultDiceNum05");
  PgSprData::Add(v167, &spNode.m_pObject->baseclass_0, "ResultDiceNum06");
  v168 = 0;
  v169 = (int)v89->m_spResultDice;
  do
  {
    memset(string, 0, 0x80u);
    v317 = v168 + 1;
    sprintf(string, "ResultDice%.2d");
    v170 = UIUtil::CreateSpr(&ui, string, 0);
    v171 = *(_DWORD *)(v169 - 12);
    LODWORD(v320) = v170;
    if ( (PgWinSpr *)v171 != v170 )
    {
      if ( v171 && !InterlockedDecrement((volatile LONG *)(v171 + 4)) && v171 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v171)(v171, 1);
      v172 = v320;
      *(_DWORD *)(v169 - 12) = LODWORD(v320);
      if ( LODWORD(v172) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v172) + 4));
    }
    (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v169 - 12) + 256))(0, v304);
    v173 = PgWinSpr::CreateWin(uiLeft, uiTop, i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v174 = *(_DWORD *)v169;
    LODWORD(v320) = v173;
    if ( (PgWinSpr *)v174 != v173 )
    {
      if ( v174 && !InterlockedDecrement((volatile LONG *)(v174 + 4)) && v174 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v174)(v174, 1);
      v175 = v320;
      *(_DWORD *)v169 = LODWORD(v320);
      if ( LODWORD(v175) )
        InterlockedIncrement((volatile LONG *)(LODWORD(v175) + 4));
    }
    v304 = 0;
    (*(void (**)(void))(**(_DWORD **)v169 + 240))();
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v169 - 12) + 116))(*(_DWORD *)v169, 0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v169 + 492))(0);
    v168 = v317;
    v169 += 4;
  }
  while ( v317 < 3 );
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Title", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v178 = Font::Get(MAIN_MENU);
    v179 = PgWinText::CreateWin(
             uiLeft - (_DWORD)iOffX,
             uiTop - (_DWORD)iOffY,
             uiWidth,
             uiHeight,
             v178,
             &v89->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v180 = v89->m_spTitleText.m_pObject;
    v181 = v179;
    if ( v180 != v179 )
    {
      if ( v180
        && !InterlockedDecrement((volatile LONG *)&v180->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v180 )
        v180->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v180,
          1u);
      v89->m_spTitleText.m_pObject = v181;
      if ( v181 )
        InterlockedIncrement((volatile LONG *)&v181->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(signed int))v89->m_spTitleText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, signed int))v89->m_spTitleText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      0,
      0,
      0,
      255);
    ((void (__stdcall *)(_DWORD))v89->m_spTitleText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "TextBox_DiceResult",
           &uiLeft,
           &uiTop,
           &uiWidth,
           &uiHeight) )
    {
      v184 = Font::Get(LARGE);
      v185 = PgWinText::CreateWin(
               uiLeft - (_DWORD)iOffX,
               uiTop - (_DWORD)iOffY,
               uiWidth,
               uiHeight,
               v184,
               &v89->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v186 = v89->m_spTimeCountText.m_pObject;
      v187 = v185;
      if ( v186 != v185 )
      {
        if ( v186
          && !InterlockedDecrement((volatile LONG *)&v186->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v186 )
          v186->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v186,
            1u);
        v89->m_spTimeCountText.m_pObject = v187;
        if ( v187 )
          InterlockedIncrement((volatile LONG *)&v187->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      ((void (__stdcall *)(signed int))v89->m_spTimeCountText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
      ((void (__stdcall *)(_DWORD))v89->m_spTimeCountText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        v190 = Font::Get(BOLD);
        v191 = PgWinText::CreateWin(
                 uiLeft - (_DWORD)iOffX,
                 uiTop - (_DWORD)iOffY,
                 uiWidth,
                 uiHeight,
                 v190,
                 &v89->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
        ((void (__thiscall *)(PgWinText *, _DWORD, _DWORD))v191->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
          v191,
          0,
          0);
        v192 = v89->m_pRunEffect.m_pObject;
        if ( (PgWinText *)v192 != v191 )
        {
          if ( v192
            && !InterlockedDecrement((volatile LONG *)&v192->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v192 )
            v192->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v192, 1u);
          v89->m_pRunEffect.m_pObject = (NiNode *)v191;
          InterlockedIncrement((volatile LONG *)&v191->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        if ( !Folder::m_bInit )
          Folder::Init();
        v193 = 0;
        do
        {
          v194 = *(&Folder::m_acEffect + v193);
          *(&Folder::m_acMerge + v193++) = v194;
        }
        while ( v194 );
        v195 = &Folder::m_acMerge - 1;
        do
          v196 = (v195++)[1];
        while ( v196 );
        v197 = dword_9D4BD4;
        *(_DWORD *)v195 = dword_9D4BD0;
        v198 = dword_9D4BD8;
        *((_DWORD *)v195 + 1) = v197;
        LOWORD(v197) = word_9D4BDC;
        *((_DWORD *)v195 + 2) = v198;
        *((_WORD *)v195 + 6) = v197;
        v199 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v200 = operator new(0x44u);
        HIDWORD(i64Val) = v200;
        LOBYTE(v374) = 3;
        if ( v200 )
        {
          v201 = NiObject::Clone(v199);
          SpEffect::SpEffect((SpEffect *)v200, (NiNode *)v201);
        }
        else
        {
          v201 = 0;
        }
        v89->m_pkDiceRollEffect = (SpEffect *)v201;
        v202 = v201->baseclass_0.vfptr;
        LOBYTE(v374) = 2;
        NiMatrix3::MakeRotation((NiMatrix3 *)&v202[13], NI_PI, 0.0, 1.0, 0.0);
        if ( !Folder::m_bInit )
          Folder::Init();
        v203 = 0;
        do
        {
          v204 = *(&Folder::m_acEffect + v203);
          *(&Folder::m_acMerge + v203++) = v204;
        }
        while ( v204 );
        v205 = &Folder::m_acMerge - 1;
        do
          v206 = (v205++)[1];
        while ( v206 );
        v207 = dword_9D4BE4;
        *(_DWORD *)v205 = dword_9D4BE0;
        v208 = dword_9D4BE8;
        *((_DWORD *)v205 + 1) = v207;
        v209 = dword_9D4BEC;
        *((_DWORD *)v205 + 2) = v208;
        v210 = dword_9D4BF0;
        *((_DWORD *)v205 + 3) = v209;
        LOBYTE(v209) = byte_9D4BF4;
        *((_DWORD *)v205 + 4) = v210;
        v205[20] = v209;
        v211 = Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v212 = v89->m_pStartEffect.m_pObject;
        v213 = v211;
        if ( v212 != v211 )
        {
          if ( v212
            && !InterlockedDecrement((volatile LONG *)&v212->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v212 )
            v212->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v212, 1u);
          v89->m_pStartEffect.m_pObject = v213;
          if ( v213 )
            InterlockedIncrement((volatile LONG *)&v213->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        if ( !Folder::m_bInit )
          Folder::Init();
        v214 = 0;
        do
        {
          v215 = *(&Folder::m_acEffect + v214);
          *(&Folder::m_acMerge + v214++) = v215;
        }
        while ( v215 );
        v216 = &Folder::m_acMerge - 1;
        do
          v217 = (v216++)[1];
        while ( v217 );
        v218 = dword_9D4BFC;
        *(_DWORD *)v216 = dword_9D4BF8;
        v219 = dword_9D4C00;
        *((_DWORD *)v216 + 1) = v218;
        v220 = off_9D4C04;
        *((_DWORD *)v216 + 2) = v219;
        *((_DWORD *)v216 + 3) = v220;
        v221 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v222 = operator new(0x60u);
        HIDWORD(i64Val) = v222;
        LOBYTE(v374) = 4;
        if ( v222 )
        {
          iOffX = NiObject::Clone(v221);
          *(_DWORD *)v222 = 0;
          LOBYTE(v374) = 5;
          CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v222 + 4));
          LOBYTE(v374) = 6;
          NsEffect::NsEffect((NsEffect *)((char *)v222 + 28));
          v223 = *(_DWORD *)v222;
          LOBYTE(v374) = 7;
          if ( (NiObject *)v223 != iOffX )
          {
            if ( v223 && !InterlockedDecrement((volatile LONG *)(v223 + 4)) && v223 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v223)(v223, 1);
            v224 = iOffX;
            *(_DWORD *)v222 = iOffX;
            if ( v224 )
              InterlockedIncrement((volatile LONG *)&v224->baseclass_0.m_uiRefCount);
          }
          *((_WORD *)v222 + 32) = 0;
        }
        else
        {
          v222 = 0;
        }
        v89->m_pkChipThrowEff = (MHChipEffect *)v222;
        v225 = *(_DWORD *)v222;
        v320 = fabs(0.6000000238418579);
        LOBYTE(v374) = 2;
        *(float *)(v225 + 100) = v320;
        if ( !Folder::m_bInit )
          Folder::Init();
        v226 = 0;
        do
        {
          v227 = *(&Folder::m_acEffect + v226);
          *(&Folder::m_acMerge + v226++) = v227;
        }
        while ( v227 );
        v228 = &Folder::m_acMerge - 1;
        do
          v229 = (v228++)[1];
        while ( v229 );
        v230 = dword_9D4C0C;
        *(_DWORD *)v228 = dword_9D4C08;
        v231 = word_9D4C10;
        *((_DWORD *)v228 + 1) = v230;
        LOBYTE(v230) = byte_9D4C12;
        *((_WORD *)v228 + 4) = v231;
        v228[10] = v230;
        v232 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v233 = operator new(0x44u);
        HIDWORD(i64Val) = v233;
        LOBYTE(v374) = 8;
        if ( v233 )
        {
          v234 = NiObject::Clone(v232);
          SpEffect::SpEffect((SpEffect *)v233, (NiNode *)v234);
        }
        else
        {
          v234 = 0;
        }
        v89->m_pkRewardEff = (SpEffect *)v234;
        v235 = v234->baseclass_0.vfptr;
        v310 = 500.0;
        *(float *)&i64Val = 340.0;
        *(float *)&v235[22].__vecDelDtor = 500.0;
        *((float *)&i64Val + 1) = 1000.0;
        *(float *)&v235[23].__vecDelDtor = 340.0;
        *(float *)&v235[24].__vecDelDtor = 1000.0;
        v236 = v89->m_pkRewardEff->m_spEffect.m_pObject;
        LOBYTE(v374) = 2;
        NiMatrix3::MakeRotation(&v236->baseclass_0.m_kLocal.m_Rotate, NI_PI, 0.0, 0.0, 0.1);
        if ( !Folder::m_bInit )
          Folder::Init();
        v237 = 0;
        do
        {
          v238 = *(&Folder::m_acEffect + v237);
          *(&Folder::m_acMerge + v237++) = v238;
        }
        while ( v238 );
        v239 = &Folder::m_acMerge - 1;
        do
          v240 = (v239++)[1];
        while ( v240 );
        v241 = dword_9D4C18;
        *(_DWORD *)v239 = dword_9D4C14;
        v242 = dword_9D4C1C;
        *((_DWORD *)v239 + 1) = v241;
        v243 = off_9D4C20;
        *((_DWORD *)v239 + 2) = v242;
        *((_DWORD *)v239 + 3) = v243;
        v244 = Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v245 = v89->m_pBigpotEff.m_pObject;
        v246 = v244;
        if ( v245 != v244 )
        {
          if ( v245
            && !InterlockedDecrement((volatile LONG *)&v245->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v245 )
            v245->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v245, 1u);
          v89->m_pBigpotEff.m_pObject = v246;
          if ( v246 )
            InterlockedIncrement((volatile LONG *)&v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        if ( !Folder::m_bInit )
          Folder::Init();
        v247 = 0;
        do
        {
          v248 = *(&Folder::m_acEffect + v247);
          *(&Folder::m_acMerge + v247++) = v248;
        }
        while ( v248 );
        v249 = &Folder::m_acMerge - 1;
        do
          v250 = (v249++)[1];
        while ( v250 );
        v251 = dword_9D4C28;
        *(_DWORD *)v249 = dword_9D4C24;
        v252 = dword_9D4C2C;
        *((_DWORD *)v249 + 1) = v251;
        v253 = off_9D4C30;
        *((_DWORD *)v249 + 2) = v252;
        *((_DWORD *)v249 + 3) = v253;
        iOffX = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v254 = (int)v89->m_pkResultEffectList;
        LODWORD(v320) = 10;
        do
        {
          v255 = operator new(0x44u);
          HIDWORD(i64Val) = v255;
          LOBYTE(v374) = 9;
          if ( v255 )
          {
            v256 = NiObject::Clone(iOffX);
            SpEffect::SpEffect((SpEffect *)v255, (NiNode *)v256);
          }
          else
          {
            v256 = 0;
          }
          *(_DWORD *)v254 = v256;
          v254 += 4;
          v257 = LODWORD(v320)-- == 1;
          LOBYTE(v374) = 2;
        }
        while ( !v257 );
        if ( !Folder::m_bInit )
          Folder::Init();
        v258 = 0;
        do
        {
          v259 = *(&Folder::m_acEffect + v258);
          *(&Folder::m_acMerge + v258++) = v259;
        }
        while ( v259 );
        v260 = &Folder::m_acMerge - 1;
        do
          v261 = (v260++)[1];
        while ( v261 );
        v262 = dword_9D4C38;
        *(_DWORD *)v260 = dword_9D4C34;
        v263 = dword_9D4C3C;
        *((_DWORD *)v260 + 1) = v262;
        v264 = dword_9D4C40;
        *((_DWORD *)v260 + 2) = v263;
        v265 = dword_9D4C44;
        *((_DWORD *)v260 + 3) = v264;
        v266 = off_9D4C48;
        *((_DWORD *)v260 + 4) = v265;
        *((_DWORD *)v260 + 5) = v266;
        iOffX = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        LODWORD(v320) = (char *)v89 + 1728;
        v317 = 3;
        do
        {
          v267 = operator new(0x60u);
          HIDWORD(i64Val) = v267;
          LOBYTE(v374) = 10;
          if ( v267 )
          {
            iOffY = NiObject::Clone(iOffX);
            *(_DWORD *)v267 = 0;
            LOBYTE(v374) = 11;
            CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v267 + 4));
            LOBYTE(v374) = 12;
            NsEffect::NsEffect((NsEffect *)((char *)v267 + 28));
            v268 = *(_DWORD *)v267;
            LOBYTE(v374) = 13;
            if ( (NiObject *)v268 != iOffY )
            {
              if ( v268 && !InterlockedDecrement((volatile LONG *)(v268 + 4)) && v268 )
                (**(void (__thiscall ***)(_DWORD, _DWORD))v268)(v268, 1);
              v269 = iOffY;
              *(_DWORD *)v267 = iOffY;
              if ( v269 )
                InterlockedIncrement((volatile LONG *)&v269->baseclass_0.m_uiRefCount);
            }
            *((_WORD *)v267 + 32) = 0;
          }
          else
          {
            v267 = 0;
          }
          v270 = v320;
          *LODWORD(v320) = v267;
          v257 = v317-- == 1;
          LOBYTE(v374) = 2;
          LODWORD(v320) = LODWORD(v270) + 4;
        }
        while ( !v257 );
        strPath.baseclass_0._Myres = 15;
        strPath.baseclass_0._Mysize = 0;
        strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        Directoryname.baseclass_0._Myres = 15;
        Directoryname.baseclass_0._Mysize = 0;
        Directoryname.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        Filename.baseclass_0._Myres = 15;
        Filename.baseclass_0._Mysize = 0;
        Filename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v374) = 16;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Directoryname,
          "MiniGame01_Dice",
          0xFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Filename,
          "MiniGame01_DiceA",
          0x10u);
        if ( !Folder::m_bInit )
          Folder::Init();
        v271 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&acShareBetType[2],
                 &Folder::m_acCharacter,
                 &Directoryname);
        LOBYTE(v374) = 17;
        v272 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, v271, "\\");
        if ( &strPath != v272 )
        {
          if ( strPath.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strPath);
          strPath.baseclass_0._Myres = 15;
          strPath.baseclass_0._Mysize = 0;
          strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          if ( v272->baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)&strPath.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v272->baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v272->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove(
              strPath.baseclass_0.___u0.baseclass_0.dummy,
              v272->baseclass_0.___u0.baseclass_0.dummy,
              v272->baseclass_0._Mysize + 1);
          }
          strPath.baseclass_0._Mysize = v272->baseclass_0._Mysize;
          strPath.baseclass_0._Myres = v272->baseclass_0._Myres;
          v272->baseclass_0._Myres = 15;
          v272->baseclass_0._Mysize = 0;
          v272->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        result.baseclass_0._Myres = 15;
        result.baseclass_0._Mysize = 0;
        result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v374) = 16;
        if ( acShareBetType[7] >= (void *)0x10 )
          operator delete(acShareBetType[2]);
        v273 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&acShareBetType[2],
                 &Filename,
                 ".kfm");
        LOBYTE(v374) = 19;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, v273, 0, 0xFFFFFFFFu);
        LOBYTE(v374) = 16;
        if ( acShareBetType[7] >= (void *)0x10 )
          operator delete(acShareBetType[2]);
        ResElement::CreateResElement(v89->m_pkDice, &strPath, &Filename);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Directoryname,
          "MiniGame02_Dice",
          0xFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Filename,
          "MiniGame01_DiceB",
          0x10u);
        if ( !Folder::m_bInit )
          Folder::Init();
        v274 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&acShareBetType[2],
                 &Folder::m_acCharacter,
                 &Directoryname);
        LOBYTE(v374) = 20;
        v275 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, v274, "\\");
        if ( &strPath != v275 )
        {
          if ( strPath.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strPath);
          strPath.baseclass_0._Myres = 15;
          strPath.baseclass_0._Mysize = 0;
          strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          if ( v275->baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)&strPath.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v275->baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v275->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove(
              strPath.baseclass_0.___u0.baseclass_0.dummy,
              v275->baseclass_0.___u0.baseclass_0.dummy,
              v275->baseclass_0._Mysize + 1);
          }
          strPath.baseclass_0._Mysize = v275->baseclass_0._Mysize;
          strPath.baseclass_0._Myres = v275->baseclass_0._Myres;
          v275->baseclass_0._Myres = 15;
          v275->baseclass_0._Mysize = 0;
          v275->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        result.baseclass_0._Myres = 15;
        result.baseclass_0._Mysize = 0;
        result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v374) = 16;
        if ( acShareBetType[7] >= (void *)0x10 )
          operator delete(acShareBetType[2]);
        v276 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&acShareBetType[2],
                 &Filename,
                 ".kfm");
        LOBYTE(v374) = 22;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, v276, 0, 0xFFFFFFFFu);
        LOBYTE(v374) = 16;
        if ( acShareBetType[7] >= (void *)0x10 )
          operator delete(acShareBetType[2]);
        ResElement::CreateResElement(&v89->m_pkDice[1], &strPath, &Filename);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Directoryname,
          "MiniGame03_Dice",
          0xFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Filename,
          "MiniGame01_DiceC",
          0x10u);
        if ( !Folder::m_bInit )
          Folder::Init();
        v277 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&acShareBetType[2],
                 &Folder::m_acCharacter,
                 &Directoryname);
        LOBYTE(v374) = 23;
        v278 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, v277, "\\");
        if ( &strPath == v278 )
        {
          v279 = 15;
        }
        else
        {
          if ( strPath.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strPath);
          v279 = 15;
          strPath.baseclass_0._Myres = 15;
          strPath.baseclass_0._Mysize = 0;
          strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          if ( v278->baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)&strPath.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v278->baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v278->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove(
              strPath.baseclass_0.___u0.baseclass_0.dummy,
              v278->baseclass_0.___u0.baseclass_0.dummy,
              v278->baseclass_0._Mysize + 1);
          }
          strPath.baseclass_0._Mysize = v278->baseclass_0._Mysize;
          strPath.baseclass_0._Myres = v278->baseclass_0._Myres;
          v278->baseclass_0._Myres = 15;
          v278->baseclass_0._Mysize = 0;
          v278->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        result.baseclass_0._Myres = v279;
        result.baseclass_0._Mysize = 0;
        result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v374) = 16;
        if ( acShareBetType[7] >= (void *)0x10 )
          operator delete(acShareBetType[2]);
        v280 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(&result, &Filename, ".kfm");
        LOBYTE(v374) = 25;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, v280, 0, 0xFFFFFFFFu);
        LOBYTE(v374) = 16;
        if ( result.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&result);
        v281 = pkSprData;
        result.baseclass_0._Myres = 15;
        result.baseclass_0._Mysize = 0;
        result.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        ResElement::CreateResElement(&pkSprData->m_pkDice[2], &strPath, &Filename);
        NiMatrix3::MakeRotation(&kMatX, NI_PI, 1.0, 0.0, 0.0);
        v310 = 500.0;
        *(float *)&i64Val = 350.0;
        *((float *)&i64Val + 1) = 1000.0;
        memcpy(acShareBetType, &kMatX, 0x24u);
        v320 = 0.0;
        iOffX = (NiObject *)&v281->m_AniActor[0].m_AniSeqIDOffset;
        v282 = (int)&v281->m_pkDice[0].m_pActorMgr;
        do
        {
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v283 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v283 = *(_DWORD *)(v282 - 4);
          memcpy((void *)(v283 + 52), acShareBetType, 0x24u);
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v284 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v284 = *(_DWORD *)(v282 - 4);
          v285 = i64Val;
          *(_DWORD *)(v284 + 88) = LODWORD(v310);
          v286 = HIDWORD(i64Val);
          *(_DWORD *)(v284 + 92) = v285;
          v287 = pkSprData;
          *(_DWORD *)(v284 + 96) = v286;
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v288 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v288 = *(_DWORD *)(v282 - 4);
          ((void (__stdcall *)(int, _DWORD))v287->m_pRunEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v288,
            0);
          v289 = v320;
          LOWORD(iOffX->baseclass_0.vfptr) = LOWORD(v320) + 1;
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v290 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v290 = *(_DWORD *)(v282 - 4);
          *(_WORD *)(v290 + 28) |= 1u;
          iOffX = (NiObject *)((char *)iOffX + 12);
          v282 += 44;
          LODWORD(v320) = LODWORD(v289) + 1;
        }
        while ( LODWORD(v289) + 1 < 3 );
        v291 = pkSprData;
        v292 = pkSprData->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkSprData->m_fDiceAniTime = 0.0;
        v293 = v292[59].__vecDelDtor;
        v291->m_fRewardTime = 0.0;
        v291->m_fResultTime = 0.0;
        v291->m_uiSuccessNum = 0;
        *(_DWORD *)&v291->m_bIsResetTimer = 0;
        v291->m_bIsHappendBigPot = 0;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD))v293)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.5);
        if ( Filename.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&Filename);
        Filename.baseclass_0._Myres = 15;
        Filename.baseclass_0._Mysize = 0;
        Filename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( Directoryname.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&Directoryname);
        Directoryname.baseclass_0._Myres = 15;
        Directoryname.baseclass_0._Mysize = 0;
        Directoryname.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( strPath.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&strPath);
        strPath.baseclass_0._Myres = 15;
        strPath.baseclass_0._Mysize = 0;
        strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v374) = 1;
        UIUtil::_UIUtil(&ui);
        v294 = spTexProp.m_pObject;
        LOBYTE(v374) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v294->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v294, 1u);
        v295 = spNode.m_pObject;
        v374 = -1;
        if ( spNode.m_pObject
          && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v295 )
          v295->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v295, 1u);
        v11 = 1;
      }
      else
      {
        LOBYTE(v374) = 1;
        UIUtil::_UIUtil(&ui);
        v188 = spTexProp.m_pObject;
        LOBYTE(v374) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v188->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v188, 1u);
        v189 = spNode.m_pObject;
        v374 = -1;
        if ( !spNode.m_pObject
          || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          || !v189 )
          return 0;
        v189->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v189, 1u);
        v11 = 0;
      }
    }
    else
    {
      LOBYTE(v374) = 1;
      UIUtil::_UIUtil(&ui);
      v182 = spTexProp.m_pObject;
      LOBYTE(v374) = 0;
      if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v182->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v182, 1u);
      v183 = spNode.m_pObject;
      v374 = -1;
      if ( !spNode.m_pObject
        || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        || !v183 )
        return 0;
      v183->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v183, 1u);
      v11 = 0;
    }
  }
  else
  {
    LOBYTE(v374) = 1;
    UIUtil::_UIUtil(&ui);
    v176 = spTexProp.m_pObject;
    LOBYTE(v374) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v176->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v176, 1u);
    v177 = spNode.m_pObject;
    v374 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v177 )
      return 0;
    v177->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v177, 1u);
    v11 = 0;
  }
  return v11;
}
// 9D4BD0: using guessed type int dword_9D4BD0;
// 9D4BD4: using guessed type int dword_9D4BD4;
// 9D4BD8: using guessed type int dword_9D4BD8;
// 9D4BDC: using guessed type __int16 word_9D4BDC;
// 9D4BE0: using guessed type int dword_9D4BE0;
// 9D4BE4: using guessed type int dword_9D4BE4;
// 9D4BE8: using guessed type int dword_9D4BE8;
// 9D4BEC: using guessed type int dword_9D4BEC;
// 9D4BF0: using guessed type int dword_9D4BF0;
// 9D4BF4: using guessed type char byte_9D4BF4;
// 9D4BF8: using guessed type int dword_9D4BF8;
// 9D4BFC: using guessed type int dword_9D4BFC;
// 9D4C00: using guessed type int dword_9D4C00;
// 9D4C04: using guessed type int (__fastcall *off_9D4C04)(Char *this);
// 9D4C08: using guessed type int dword_9D4C08;
// 9D4C0C: using guessed type int dword_9D4C0C;
// 9D4C10: using guessed type __int16 word_9D4C10;
// 9D4C12: using guessed type char byte_9D4C12;
// 9D4C14: using guessed type int dword_9D4C14;
// 9D4C18: using guessed type int dword_9D4C18;
// 9D4C1C: using guessed type int dword_9D4C1C;
// 9D4C20: using guessed type int (__fastcall *off_9D4C20)(Char *this);
// 9D4C24: using guessed type int dword_9D4C24;
// 9D4C28: using guessed type int dword_9D4C28;
// 9D4C2C: using guessed type int dword_9D4C2C;
// 9D4C30: using guessed type int (__fastcall *off_9D4C30)(Char *this);
// 9D4C34: using guessed type int dword_9D4C34;
// 9D4C38: using guessed type int dword_9D4C38;
// 9D4C3C: using guessed type int dword_9D4C3C;
// 9D4C40: using guessed type int dword_9D4C40;
// 9D4C44: using guessed type int dword_9D4C44;
// 9D4C48: using guessed type int (__fastcall *off_9D4C48)(Char *this);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE8C: using guessed type const float NI_PI;

//----- (0071EFB0) --------------------------------------------------------
bool __thiscall GambleDiceGameWin::Create(GambleDiceGameWin *this, PgFrameWork *pkFrameWork)
{
  GambleDiceGameWin *v2; // ebx@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiAVObject *v5; // eax@4
  NiProperty *v6; // eax@4
  NiProperty *v7; // edi@4
  NiRefObjectVtbl *v8; // eax@6
  void *v9; // eax@7
  NiNode *v10; // edi@10
  bool v11; // al@14
  PgSprData *v12; // esi@15
  PgFrameWork *v13; // eax@15
  NiNode *v14; // esi@18
  int v15; // edi@23
  int v16; // esi@23
  PgWinSpr *v17; // eax@23
  PgWinSpr *v18; // eax@23
  PgWinSpr *v19; // eax@23
  PgWinSpr *v20; // eax@23
  int v21; // esi@23
  int v22; // ebx@23
  PgWinSpr *v23; // eax@24
  int v24; // edi@24
  PgWinSpr *v25; // esi@24
  signed int v26; // ebx@32
  PgSprData *v27; // edi@33
  PgSprData *v28; // esi@33
  unsigned int v29; // edi@41
  char *v30; // esi@41
  BettingBut *v31; // eax@42
  int v32; // ebx@42
  int v33; // eax@47
  int v34; // eax@49
  GambleDiceGameWin *v35; // esi@50
  unsigned int v36; // ebx@50
  PgWinSpr *v37; // eax@51
  PgSprData *v38; // esi@51
  PgWinSpr *v39; // edi@51
  PgWinSpr *v40; // eax@59
  PgWin *v41; // esi@59
  char *v42; // eax@59
  PgWin *v43; // esi@59
  char *v44; // eax@59
  PgWin *v45; // esi@59
  char *v46; // eax@59
  PgSprData *v47; // eax@59
  GambleDiceGameWin *v48; // ebx@59
  PgSprData *v49; // edi@59
  PgSprData *v50; // esi@59
  PgSprData *v51; // eax@66
  PgSprData *v52; // esi@66
  PgSprData *v53; // edi@66
  PgSprData *v54; // eax@73
  PgSprData *v55; // esi@73
  PgSprData *v56; // edi@73
  PgSprData *v57; // eax@80
  PgSprData *v58; // esi@80
  PgSprData *v59; // edi@80
  PgSprData *v60; // eax@87
  PgSprData *v61; // esi@87
  PgSprData *v62; // edi@87
  PgSprData *v63; // eax@94
  PgSprData *v64; // esi@94
  PgSprData *v65; // edi@94
  int v66; // ebx@101
  PgSprData *v67; // edi@102
  signed int v68; // esi@102
  NiPointer<PgSprData::PgHitTester> *v69; // eax@107
  int v70; // esi@107
  MHDiceGameTask *v71; // edx@107
  int v72; // ecx@107
  int v73; // eax@107
  int v74; // eax@107
  int v75; // eax@107
  int v76; // edx@107
  int v77; // eax@107
  int v78; // eax@107
  int v79; // eax@107
  int v80; // esi@108
  int v81; // eax@108
  int v82; // eax@108
  int v83; // edx@108
  int v84; // eax@108
  PgWinSpr *v85; // eax@109
  int v86; // esi@109
  PgWinSpr *v87; // edi@109
  PgSprData *v88; // esi@117
  GambleDiceGameWin *v89; // edi@117
  MHDiceGameTask *v90; // ebx@117
  char *v91; // esi@117
  PgWinSpr *v92; // eax@118
  int v93; // ebx@118
  int v94; // eax@123
  PgWinSpr *v95; // eax@125
  int v96; // ebx@125
  int v97; // eax@130
  MHDiceGameTask *v98; // ebx@133
  int v99; // esi@133
  PgWinSpr *v100; // eax@134
  int v101; // ebx@134
  int v102; // eax@139
  PgWinSpr *v103; // eax@141
  int v104; // ebx@141
  int v105; // eax@146
  PgSprData *v106; // esi@149
  MHDiceGameTask *v107; // ebx@149
  int v108; // esi@149
  PgWinSpr *v109; // eax@150
  int v110; // ebx@150
  int v111; // eax@155
  PgWinSpr *v112; // eax@157
  int v113; // ebx@157
  int v114; // eax@162
  signed int v115; // ebx@165
  unsigned __int64 v116; // kr00_8@165
  MHDiceGameTask *v117; // esi@166
  int v118; // esi@170
  signed __int64 v119; // kr08_8@170
  int v120; // esi@175
  int v121; // ebx@176
  PgWinBut *v122; // esi@178
  char *v123; // eax@178
  PgWinBut *v124; // esi@178
  char *v125; // eax@178
  PgSprData *v126; // esi@178
  ToggleBut *v127; // eax@178
  ToggleBut *v128; // esi@178
  ToggleBut *v129; // ebx@178
  PgWin *v130; // esi@185
  char *v131; // eax@185
  PgSprData *v132; // esi@185
  ToggleBut *v133; // eax@185
  ToggleBut *v134; // esi@185
  ToggleBut *v135; // ebx@185
  PgWin *v136; // esi@192
  char *v137; // eax@192
  PgSprData *v138; // esi@192
  ToggleBut *v139; // eax@192
  ToggleBut *v140; // esi@192
  ToggleBut *v141; // ebx@192
  PgWin *v142; // esi@199
  char *v143; // eax@199
  PgSprData *v144; // esi@199
  ToggleBut *v145; // eax@199
  ToggleBut *v146; // esi@199
  ToggleBut *v147; // ebx@199
  PgWin *v148; // esi@206
  char *v149; // eax@206
  PgSprData *v150; // esi@206
  ToggleBut *v151; // eax@206
  ToggleBut *v152; // esi@206
  ToggleBut *v153; // ebx@206
  PgWin *v154; // esi@213
  char *v155; // eax@213
  int v156; // ebx@213
  int v157; // esi@214
  int (__thiscall *v158)(_DWORD); // eax@214
  int v159; // ecx@214
  ToggleBut *v160; // esi@220
  void *(__thiscall *v161)(NiRefObject *, unsigned int); // eax@220
  ToggleBut *v162; // ecx@220
  PgWinBut *v163; // eax@225
  NiNode *v164; // esi@225
  PgWinBut *v165; // ebx@225
  PgWinBut *v166; // esi@232
  char *v167; // eax@232
  PgSprData *v168; // esi@232
  MHDiceGameTask *v169; // ebx@232
  int v170; // esi@232
  PgWinSpr *v171; // eax@233
  int v172; // ebx@233
  int v173; // eax@238
  PgWinSpr *v174; // eax@240
  int v175; // ebx@240
  int v176; // eax@245
  NiTexturingProperty *v177; // esi@249
  NiNode *v178; // esi@251
  PgFont *v179; // eax@255
  PgWinText *v180; // eax@255
  PgWinText *v181; // esi@255
  PgWinText *v182; // ebx@255
  NiTexturingProperty *v183; // esi@263
  NiNode *v184; // esi@265
  PgFont *v185; // eax@269
  PgWinText *v186; // eax@269
  PgWinText *v187; // esi@269
  PgWinText *v188; // ebx@269
  NiTexturingProperty *v189; // esi@277
  NiNode *v190; // esi@279
  PgFont *v191; // eax@283
  PgWinText *v192; // esi@283
  NiNode *v193; // ebx@283
  int v194; // eax@291
  char v195; // cl@292
  char *v196; // eax@293
  char v197; // cl@294
  int v198; // edx@295
  int v199; // ecx@295
  NiObject *v200; // ebx@295
  void *v201; // esi@295
  NiObject *v202; // eax@296
  NiRefObjectVtbl *v203; // ecx@298
  int v204; // eax@300
  char v205; // cl@301
  char *v206; // eax@302
  char v207; // cl@303
  int v208; // edx@304
  int v209; // ecx@304
  int v210; // edx@304
  int v211; // ecx@304
  NiNode *v212; // eax@304
  NiNode *v213; // esi@304
  NiNode *v214; // ebx@304
  int v215; // eax@313
  char v216; // cl@314
  char *v217; // eax@315
  char v218; // cl@316
  int v219; // edx@317
  int v220; // ecx@317
  int (__fastcall *v221)(Char *); // edx@317
  NiObject *v222; // ebx@317
  void *v223; // esi@317
  int v224; // ebx@318
  NiObject *v225; // eax@323
  int v226; // esi@327
  int v227; // eax@329
  char v228; // cl@330
  char *v229; // eax@331
  char v230; // cl@332
  int v231; // ecx@333
  __int16 v232; // dx@333
  NiObject *v233; // ebx@333
  void *v234; // esi@333
  NiObject *v235; // eax@334
  NiRefObjectVtbl *v236; // eax@336
  NiNode *v237; // ecx@336
  int v238; // eax@338
  char v239; // cl@339
  char *v240; // eax@340
  char v241; // cl@341
  int v242; // edx@342
  int v243; // ecx@342
  int (__fastcall *v244)(Char *); // edx@342
  NiNode *v245; // eax@342
  NiNode *v246; // esi@342
  NiNode *v247; // ebx@342
  int v248; // eax@351
  char v249; // cl@352
  char *v250; // eax@353
  char v251; // cl@354
  int v252; // edx@355
  int v253; // ecx@355
  int (__fastcall *v254)(Char *); // edx@355
  int v255; // esi@355
  void *v256; // ebx@356
  NiObject *v257; // eax@357
  bool v258; // zf@359
  int v259; // eax@362
  char v260; // cl@363
  char *v261; // eax@364
  char v262; // cl@365
  int v263; // edx@366
  int v264; // ecx@366
  int v265; // edx@366
  int v266; // ecx@366
  int (__fastcall *v267)(Char *); // edx@366
  void *v268; // esi@367
  NiObject *v269; // edi@368
  int v270; // ebx@368
  int v271; // eax@377
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v272; // eax@380
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v273; // esi@380
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v274; // eax@391
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v275; // eax@395
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v276; // esi@395
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v277; // eax@406
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v278; // eax@410
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v279; // esi@410
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v280; // eax@421
  GambleDiceGameWin *v281; // ebx@423
  int v282; // ebx@423
  int v283; // eax@426
  int v284; // eax@430
  int v285; // ecx@432
  int v286; // edx@432
  int v287; // eax@434
  int v288; // ecx@436
  int v289; // eax@438
  GambleDiceGameWin *v290; // ecx@441
  NiRefObjectVtbl *v291; // edx@441
  void *(__thiscall *v292)(NiRefObject *, unsigned int); // edx@441
  NiTexturingProperty *v293; // esi@447
  NiNode *v294; // esi@449
  int v295; // [sp+138h] [bp-290h]@107
  PgSprData *v296; // [sp+13Ch] [bp-28Ch]@107
  PgWin *v297; // [sp+140h] [bp-288h]@107
  char *v298; // [sp+144h] [bp-284h]@107
  signed int v299; // [sp+144h] [bp-284h]@216
  signed int v300; // [sp+144h] [bp-284h]@222
  unsigned int v301; // [sp+148h] [bp-280h]@1
  unsigned int v302; // [sp+148h] [bp-280h]@59
  int v303; // [sp+148h] [bp-280h]@172
  int iTop; // [sp+158h] [bp-270h]@102
  NiPointer<NiTexturingProperty> spTexProp; // [sp+15Ch] [bp-26Ch]@4
  UIUtil ui; // [sp+160h] [bp-268h]@23
  unsigned int uiHeight; // [sp+174h] [bp-254h]@1
  unsigned int uiWidth; // [sp+178h] [bp-250h]@1
  float v309; // [sp+17Ch] [bp-24Ch]@336
  __int64 i64Val; // [sp+180h] [bp-248h]@102
  NiSourceTexture *pkTexture; // [sp+188h] [bp-240h]@7
  int iOffY; // [sp+18Ch] [bp-23Ch]@23
  GambleDiceGameWin *pkSprData; // [sp+190h] [bp-238h]@1
  NiObject *iOffX; // [sp+194h] [bp-234h]@23
  NiPointer<MHDiceGameTask> result; // [sp+198h] [bp-230h]@107
  void *i; // [sp+19Ch] [bp-22Ch]@32
  int uiTop; // [sp+1A0h] [bp-228h]@1
  int uiLeft; // [sp+1A4h] [bp-224h]@1
  void *v319; // [sp+1A8h] [bp-220h]@24
  NiPointer<NiNode> spNode; // [sp+1ACh] [bp-21Ch]@1
  NiMatrix3 kMatX; // [sp+1B0h] [bp-218h]@423
  NiMatrix3 kMat; // [sp+1D4h] [bp-1F4h]@380
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Directoryname; // [sp+1F8h] [bp-1D0h]@378
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Filename; // [sp+214h] [bp-1B4h]@378
  void *p; // [sp+230h] [bp-198h]@380
  int v326; // [sp+240h] [bp-188h]@389
  unsigned int v327; // [sp+244h] [bp-184h]@387
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strPath; // [sp+24Ch] [bp-17Ch]@378
  char acNodeName[128]; // [sp+268h] [bp-160h]@33
  char *pcTriShapeName; // [sp+2E8h] [bp-E0h]@41
  int v331; // [sp+2ECh] [bp-DCh]@41
  int v332; // [sp+2F0h] [bp-D8h]@41
  int v333; // [sp+2F4h] [bp-D4h]@41
  int v334; // [sp+2F8h] [bp-D0h]@41
  int v335; // [sp+2FCh] [bp-CCh]@41
  int v336; // [sp+300h] [bp-C8h]@41
  int v337; // [sp+304h] [bp-C4h]@41
  int v338; // [sp+308h] [bp-C0h]@41
  int v339; // [sp+30Ch] [bp-BCh]@41
  int v340; // [sp+310h] [bp-B8h]@41
  int v341; // [sp+314h] [bp-B4h]@41
  int v342; // [sp+318h] [bp-B0h]@41
  int v343; // [sp+31Ch] [bp-ACh]@41
  int v344; // [sp+320h] [bp-A8h]@41
  int v345; // [sp+324h] [bp-A4h]@41
  int v346; // [sp+328h] [bp-A0h]@41
  int v347; // [sp+32Ch] [bp-9Ch]@41
  int v348; // [sp+330h] [bp-98h]@41
  int v349; // [sp+334h] [bp-94h]@41
  char pcTag[4]; // [sp+338h] [bp-90h]@24
  int v351; // [sp+33Ch] [bp-8Ch]@41
  int v352; // [sp+340h] [bp-88h]@41
  int v353; // [sp+344h] [bp-84h]@41
  int v354; // [sp+348h] [bp-80h]@41
  int v355; // [sp+34Ch] [bp-7Ch]@41
  int v356; // [sp+350h] [bp-78h]@41
  int v357; // [sp+354h] [bp-74h]@41
  int v358; // [sp+358h] [bp-70h]@41
  int v359; // [sp+35Ch] [bp-6Ch]@41
  int v360; // [sp+360h] [bp-68h]@41
  void *acHistory[21]; // [sp+364h] [bp-64h]@41
  unsigned int v362; // [sp+3B8h] [bp-10h]@1
  int v363; // [sp+3C4h] [bp-4h]@1
  int v364; // [sp+3C8h] [bp+0h]@1

  v362 = (unsigned int)&v364 ^ __security_cookie;
  v301 = (unsigned int)&v364 ^ __security_cookie;
  v2 = this;
  pkSprData = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v363 = 0;
  uiHeight = 0;
  uiWidth = 0;
  uiLeft = 0;
  uiTop = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GB_DiceGameMain.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = (NiAVObject *)((int (__stdcall *)(_DWORD))spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v6 = NiAVObject::GetProperty(v5, 8);
  v7 = v6;
  spTexProp.m_pObject = (NiTexturingProperty *)v6;
  if ( v6 )
    InterlockedIncrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v8 = v7[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v363) = 1;
  if ( !v8 || (v9 = v8[1].__vecDelDtor, (pkTexture = (NiSourceTexture *)v9) == 0) )
  {
    LOBYTE(v363) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v10 = spNode.m_pObject;
    v363 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v10 )
        v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    }
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, (NiSourceTexture *)v9);
  v13 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, v13, "GambleDiceGame", 0) )
  {
    LOBYTE(v363) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v7->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
    v14 = spNode.m_pObject;
    v363 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v14 )
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    return 0;
  }
  v15 = uiLeft;
  v16 = uiTop;
  iOffX = (NiObject *)uiLeft;
  iOffY = uiTop;
  UIUtil::UIUtil(&ui);
  LOBYTE(v363) = 2;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v15, v16);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v17 = UIUtil::CreateSpr(&ui, "TimmerFill", 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spTimerFill, (NiD3DDefaultShader *)v17);
  v18 = UIUtil::CreateSpr(&ui, "TimmerFillBack", 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spTimerBack, (NiD3DDefaultShader *)v18);
  ((void (__stdcall *)(signed int, unsigned int))v2->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(
    1,
    v301);
  ((void (__stdcall *)(_DWORD))v2->m_spTimerBack.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v19 = UIUtil::CreateSpr(&ui, "Panel01", 0);
  v19->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v19,
    0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  UIUtil::CreateSpr(&ui, "Panel03", 0);
  UIUtil::CreateSpr(&ui, "Panel04", 0);
  v20 = UIUtil::CreateSpr(&ui, "Timmer", 0);
  NiPointer<PopupMenuWin>::operator_((NiPointer<NiD3DDefaultShader> *)&v2->m_spTimer, (NiD3DDefaultShader *)v20);
  v21 = 0;
  v22 = (int)v2->m_spLightSpr;
  do
  {
    memset(pcTag, 0, 0x80u);
    v319 = (void *)(v21 + 1);
    sprintf(pcTag, "ResultLight%.2d");
    v23 = UIUtil::CreateSpr(&ui, pcTag, 0);
    v24 = *(_DWORD *)v22;
    v25 = v23;
    if ( *(PgWinSpr **)v22 != v23 )
    {
      if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v24)(v24, 1);
      *(_DWORD *)v22 = v25;
      if ( v25 )
        InterlockedIncrement((volatile LONG *)&v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1);
    v21 = (int)v319;
    v22 += 4;
  }
  while ( (signed int)v319 < 32 );
  v26 = 0;
  i = pkSprData->m_spNumTex;
  do
  {
    memset(acNodeName, 0, 0x80u);
    sprintf(acNodeName, "Num%.2d");
    v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, acNodeName, &uiLeft, &uiTop, pkTexture);
    v28 = *(PgSprData **)i;
    if ( *(PgSprData **)i != v27 )
    {
      if ( v28 && !InterlockedDecrement((volatile LONG *)&v28->baseclass_0.m_uiRefCount) && v28 )
        v28->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v28, 1u);
      *(_DWORD *)i = v27;
      if ( v27 )
        InterlockedIncrement((volatile LONG *)&v27->baseclass_0.m_uiRefCount);
    }
    i = (char *)i + 4;
    ++v26;
  }
  while ( v26 < 10 );
  v29 = 0;
  pcTriShapeName = "bet_EVENNor";
  v331 = (int)"bet_ODDNor";
  v332 = (int)"bet_BIGNor";
  v333 = (int)"bet_SMALLNor";
  v334 = (int)"bet_Dice11Nor";
  v335 = (int)"bet_Dice22Nor";
  v336 = (int)"bet_Dice33Nor";
  v337 = (int)"bet_Dice44Nor";
  v338 = (int)"bet_Dice55Nor";
  v339 = (int)"bet_Dice66Nor";
  v340 = (int)"bet_Dice111Nor";
  v341 = (int)"bet_Dice222Nor";
  v342 = (int)"bet_Dice333Nor";
  v343 = (int)"bet_Dice444Nor";
  v344 = (int)"bet_Dice555Nor";
  v345 = (int)"bet_Dice666Nor";
  v346 = (int)"bet_AnyTripleNor";
  v347 = (int)"bet_Num4Nor";
  v348 = (int)"bet_Num5Nor";
  v349 = (int)"bet_Num6Nor";
  *(_DWORD *)pcTag = "bet_Num7Nor";
  v351 = (int)"bet_Num8Nor";
  v352 = (int)"bet_Num9Nor";
  v353 = (int)"bet_Num10Nor";
  v354 = (int)"bet_Num11Nor";
  v355 = (int)"bet_Num12Nor";
  v356 = (int)"bet_Num13Nor";
  v357 = (int)"bet_Num14Nor";
  v358 = (int)"bet_Num15Nor";
  v359 = (int)"bet_Num16Nor";
  v360 = (int)"bet_Num17Nor";
  acHistory[0] = "bet_Dice12Nor";
  acHistory[1] = "bet_Dice13Nor";
  acHistory[2] = "bet_Dice14Nor";
  acHistory[3] = "bet_Dice15Nor";
  acHistory[4] = "bet_Dice16Nor";
  acHistory[5] = "bet_Dice23Nor";
  acHistory[6] = "bet_Dice24Nor";
  acHistory[7] = "bet_Dice25Nor";
  acHistory[8] = "bet_Dice26Nor";
  acHistory[9] = "bet_Dice34Nor";
  acHistory[10] = "bet_Dice35Nor";
  acHistory[11] = "bet_Dice36Nor";
  acHistory[12] = "bet_Dice45Nor";
  acHistory[13] = "bet_Dice46Nor";
  acHistory[14] = "bet_Dice56Nor";
  acHistory[15] = "bet_ONENor";
  acHistory[16] = "bet_TWONor";
  acHistory[17] = "bet_THREENor";
  acHistory[18] = "bet_FOURNor";
  acHistory[19] = "bet_FIVENor";
  acHistory[20] = "bet_SIXNor";
  v30 = (char *)pkSprData->m_spBettingBut;
  do
  {
    v31 = GambleDiceGameWin::MakeButton(
            pkSprData,
            &spNode.m_pObject->baseclass_0,
            (&pcTriShapeName)[4 * v29],
            &uiLeft,
            &uiTop,
            v29,
            pkTexture);
    v32 = *(_DWORD *)v30;
    v319 = v31;
    if ( (BettingBut *)v32 != v31 )
    {
      if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v32)(v32, 1);
      v33 = (int)v319;
      *(_DWORD *)v30 = v319;
      if ( v33 )
        InterlockedIncrement((volatile LONG *)(v33 + 4));
    }
    *(_BYTE *)(*(_DWORD *)v30 + 328) = 0;
    *(_DWORD *)(*(_DWORD *)v30 + 272) = g_pkToolTipWin;
    v34 = *(_DWORD *)v30;
    ++v29;
    v30 += 4;
    *(_BYTE *)(v34 + 320) = 0;
  }
  while ( (signed int)v29 < 52 );
  v35 = pkSprData;
  pkSprData->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[130].__vecDelDtor(
    (NiRefObject *)pkSprData,
    1u);
  v36 = 0;
  acHistory[0] = "History1_1";
  acHistory[1] = "History1_2";
  acHistory[2] = "History1_3";
  acHistory[3] = "History2_1";
  acHistory[4] = "History2_2";
  acHistory[5] = "History2_3";
  acHistory[6] = "History3_1";
  acHistory[7] = "History3_2";
  acHistory[8] = "History3_3";
  acHistory[9] = "History4_1";
  acHistory[10] = "History4_2";
  acHistory[11] = "History4_3";
  acHistory[12] = "History5_1";
  acHistory[13] = "History5_2";
  acHistory[14] = "History5_3";
  acHistory[15] = "History6_1";
  acHistory[16] = "History6_2";
  acHistory[17] = "History6_3";
  acHistory[18] = "History7_1";
  acHistory[19] = "History7_2";
  acHistory[20] = "History7_3";
  i = v35->m_spHistroyPos;
  do
  {
    v37 = UIUtil::CreateSpr(&ui, (char *)acHistory[v36], 0);
    v38 = *(PgSprData **)i;
    v39 = v37;
    if ( *(PgWinSpr **)i != v37 )
    {
      if ( v38 && !InterlockedDecrement((volatile LONG *)&v38->baseclass_0.m_uiRefCount) && v38 )
        v38->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v38, 1u);
      *(_DWORD *)i = v39;
      if ( v39 )
        InterlockedIncrement((volatile LONG *)&v39->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    i = (char *)i + 4;
    ++v36;
  }
  while ( v36 < 0x15 );
  v40 = UIUtil::CreateSpr(&ui, "Panel_dice", 0);
  v302 = 0;
  ((void (__thiscall *)(PgWinSpr *))v40->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(v40);
  v41 = (PgWin *)UIUtil::CreateSpr(&ui, "Tip_Betting", 0);
  v41->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v41,
    COERCE_UNSIGNED_INT(0.0));
  v41->m_pkToolTipWin = g_pkToolTipWin;
  v42 = TextData2::Get(0xFAE4B91Cu);
  PgWin::SetToolTipWinText(v41, v42);
  v43 = (PgWin *)UIUtil::CreateSpr(&ui, "Tip_Share", 0);
  v43->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v43,
    COERCE_UNSIGNED_INT(0.0));
  v43->m_pkToolTipWin = g_pkToolTipWin;
  v44 = TextData2::Get(0x7E97C0C9u);
  PgWin::SetToolTipWinText(v43, v44);
  v45 = (PgWin *)UIUtil::CreateSpr(&ui, "Tip_InvenMoney", 0);
  v45->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor(
    (NiRefObject *)v45,
    COERCE_UNSIGNED_INT(0.0));
  v45->m_pkToolTipWin = g_pkToolTipWin;
  v46 = TextData2::Get(0x4445191Eu);
  PgWin::SetToolTipWinText(v45, v46);
  v47 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice01", &uiLeft, &uiTop, 0);
  v48 = pkSprData;
  v49 = v47;
  v50 = pkSprData->m_spDiceNum[0].m_pObject;
  if ( v50 != v47 )
  {
    if ( v50 && !InterlockedDecrement((volatile LONG *)&v50->baseclass_0.m_uiRefCount) && v50 )
      v50->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v50, 1u);
    v48->m_spDiceNum[0].m_pObject = v49;
    if ( v49 )
      InterlockedIncrement((volatile LONG *)&v49->baseclass_0.m_uiRefCount);
  }
  v51 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice02", &uiLeft, &uiTop, 0);
  v52 = v48->m_spDiceNum[1].m_pObject;
  v53 = v51;
  if ( v52 != v51 )
  {
    if ( v52 && !InterlockedDecrement((volatile LONG *)&v52->baseclass_0.m_uiRefCount) && v52 )
      v52->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v52, 1u);
    v48->m_spDiceNum[1].m_pObject = v53;
    if ( v53 )
      InterlockedIncrement((volatile LONG *)&v53->baseclass_0.m_uiRefCount);
  }
  v54 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice03", &uiLeft, &uiTop, 0);
  v55 = v48->m_spDiceNum[2].m_pObject;
  v56 = v54;
  if ( v55 != v54 )
  {
    if ( v55 && !InterlockedDecrement((volatile LONG *)&v55->baseclass_0.m_uiRefCount) && v55 )
      v55->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v55, 1u);
    v48->m_spDiceNum[2].m_pObject = v56;
    if ( v56 )
      InterlockedIncrement((volatile LONG *)&v56->baseclass_0.m_uiRefCount);
  }
  v57 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice04", &uiLeft, &uiTop, 0);
  v58 = v48->m_spDiceNum[3].m_pObject;
  v59 = v57;
  if ( v58 != v57 )
  {
    if ( v58 && !InterlockedDecrement((volatile LONG *)&v58->baseclass_0.m_uiRefCount) && v58 )
      v58->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v58, 1u);
    v48->m_spDiceNum[3].m_pObject = v59;
    if ( v59 )
      InterlockedIncrement((volatile LONG *)&v59->baseclass_0.m_uiRefCount);
  }
  v60 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice05", &uiLeft, &uiTop, 0);
  v61 = v48->m_spDiceNum[4].m_pObject;
  v62 = v60;
  if ( v61 != v60 )
  {
    if ( v61 && !InterlockedDecrement((volatile LONG *)&v61->baseclass_0.m_uiRefCount) && v61 )
      v61->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v61, 1u);
    v48->m_spDiceNum[4].m_pObject = v62;
    if ( v62 )
      InterlockedIncrement((volatile LONG *)&v62->baseclass_0.m_uiRefCount);
  }
  v63 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "History_dice06", &uiLeft, &uiTop, 0);
  v64 = v48->m_spDiceNum[5].m_pObject;
  v65 = v63;
  if ( v64 != v63 )
  {
    if ( v64 && !InterlockedDecrement((volatile LONG *)&v64->baseclass_0.m_uiRefCount) && v64 )
      v64->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v64, 1u);
    v48->m_spDiceNum[5].m_pObject = v65;
    if ( v65 )
      InterlockedIncrement((volatile LONG *)&v65->baseclass_0.m_uiRefCount);
  }
  i = 0;
  v66 = (int)v48->m_spChips;
  do
  {
    pcTag[0] = 0;
    memset(&pcTag[1], 0, 0x7Fu);
    sprintf(pcTag, "%s01");
    v67 = PgSprData::Create(&spNode.m_pObject->baseclass_0, pcTag, (int *)&i64Val + 1, &iTop, pkTexture);
    v68 = 2;
    do
    {
      memset(pcTag, 0, 0x80u);
      sprintf(pcTag, "%s%.2d");
      PgSprData::Add(v67, &spNode.m_pObject->baseclass_0, pcTag);
      ++v68;
    }
    while ( v68 <= 5 );
    if ( ((signed int)i <= 2 || (signed int)i >= 7) && i != (void *)1 )
    {
      v80 = *(_DWORD *)(v66 - 208);
      v81 = *(_DWORD *)v80;
      result.m_pObject = (MHDiceGameTask *)v67->m_akHitTester.m_pBase[4].m_pObject->m_uiHeight;
      v82 = (*(int (__thiscall **)(int))(v81 + 168))(v80);
      v83 = *(_DWORD *)v80;
      v298 = 0;
      result.m_pObject = (MHDiceGameTask *)(v82 - (unsigned int)result.m_pObject);
      v297 = 0;
      v296 = (PgSprData *)pkSprData;
      v295 = (int)v67;
      v84 = (*(int (__thiscall **)(int))(v83 + 148))(v80);
      v79 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)v80 + 164))(v80, (char *)result.m_pObject + v84);
    }
    else
    {
      v69 = v67->m_akHitTester.m_pBase;
      v70 = *(_DWORD *)(v66 - 208);
      v71 = (MHDiceGameTask *)v69->m_pObject->m_uiWidth;
      v72 = v69[4].m_pObject->m_uiHeight;
      v73 = *(_DWORD *)v70;
      v319 = (void *)v72;
      result.m_pObject = v71;
      v74 = (*(int (__thiscall **)(int))(v73 + 168))(v70);
      v319 = (void *)(v74 - (_DWORD)v319);
      v75 = (*(int (__thiscall **)(int))(*(_DWORD *)v70 + 164))(v70);
      v76 = *(_DWORD *)v70;
      v298 = 0;
      result.m_pObject = (MHDiceGameTask *)(v75 - (unsigned int)result.m_pObject);
      v297 = 0;
      v296 = (PgSprData *)pkSprData;
      v295 = (int)v67;
      v77 = (*(int (__thiscall **)(int))(v76 + 148))(v70);
      v78 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)v70 + 144))(v70, (char *)v319 + v77);
      v79 = (int)((char *)result.m_pObject + v78);
    }
    v85 = PgWinSpr::CreateWin(v79, v295, v296, v297, v298, v302);
    v86 = *(_DWORD *)v66;
    v87 = v85;
    if ( *(PgWinSpr **)v66 != v85 )
    {
      if ( v86 && !InterlockedDecrement((volatile LONG *)(v86 + 4)) && v86 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v86)(v86, 1);
      *(_DWORD *)v66 = v87;
      if ( v87 )
        InterlockedIncrement((volatile LONG *)&v87->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    v302 = 0;
    (*(void (**)(void))(**(_DWORD **)v66 + 240))();
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v66 + 256))(0);
    v66 += 4;
    i = (char *)i + 1;
  }
  while ( (signed int)i < 52 );
  v88 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "BetMoneyNum00", &uiLeft, &uiTop, pkTexture);
  i = v88;
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum01");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum02");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum03");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum04");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum05");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum06");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum07");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum08");
  PgSprData::Add(v88, &spNode.m_pObject->baseclass_0, "BetMoneyNum09");
  v89 = pkSprData;
  v90 = 0;
  v91 = (char *)pkSprData->m_spBetNumSpr;
  do
  {
    memset(pcTag, 0, 0x80u);
    result.m_pObject = (MHDiceGameTask *)((char *)v90 + 1);
    sprintf(pcTag, "BetCoin%.2d");
    v92 = UIUtil::CreateSpr(&ui, pcTag, 0);
    v93 = *((_DWORD *)v91 - 7);
    v319 = v92;
    if ( (PgWinSpr *)v93 != v92 )
    {
      if ( v93 && !InterlockedDecrement((volatile LONG *)(v93 + 4)) && v93 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v93)(v93, 1);
      v94 = (int)v319;
      *((_DWORD *)v91 - 7) = v319;
      if ( v94 )
        InterlockedIncrement((volatile LONG *)(v94 + 4));
    }
    (*(void (__stdcall **)(signed int, unsigned int))(**((_DWORD **)v91 - 7) + 256))(1, v302);
    v95 = PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v96 = *(_DWORD *)v91;
    v319 = v95;
    if ( (PgWinSpr *)v96 != v95 )
    {
      if ( v96 && !InterlockedDecrement((volatile LONG *)(v96 + 4)) && v96 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v96)(v96, 1);
      v97 = (int)v319;
      *(_DWORD *)v91 = v319;
      if ( v97 )
        InterlockedIncrement((volatile LONG *)(v97 + 4));
    }
    v302 = 0;
    (*(void (**)(void))(**(_DWORD **)v91 + 240))();
    (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v91 - 7) + 116))(*(_DWORD *)v91, 0);
    v90 = result.m_pObject;
    v91 += 4;
  }
  while ( (signed int)result.m_pObject < 7 );
  v98 = 0;
  v99 = (int)v89->m_spShareNumSpr;
  do
  {
    memset(pcTag, 0, 0x80u);
    result.m_pObject = (MHDiceGameTask *)((char *)v98 + 1);
    sprintf(pcTag, "ShareCoin%.2d");
    v100 = UIUtil::CreateSpr(&ui, pcTag, 0);
    v101 = *(_DWORD *)(v99 - 28);
    v319 = v100;
    if ( (PgWinSpr *)v101 != v100 )
    {
      if ( v101 && !InterlockedDecrement((volatile LONG *)(v101 + 4)) && v101 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v101)(v101, 1);
      v102 = (int)v319;
      *(_DWORD *)(v99 - 28) = v319;
      if ( v102 )
        InterlockedIncrement((volatile LONG *)(v102 + 4));
    }
    (*(void (__stdcall **)(signed int, unsigned int))(**(_DWORD **)(v99 - 28) + 256))(1, v302);
    v103 = PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v104 = *(_DWORD *)v99;
    v319 = v103;
    if ( (PgWinSpr *)v104 != v103 )
    {
      if ( v104 && !InterlockedDecrement((volatile LONG *)(v104 + 4)) && v104 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v104)(v104, 1);
      v105 = (int)v319;
      *(_DWORD *)v99 = v319;
      if ( v105 )
        InterlockedIncrement((volatile LONG *)(v105 + 4));
    }
    v302 = 0;
    (*(void (**)(void))(**(_DWORD **)v99 + 240))();
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v99 - 28) + 116))(*(_DWORD *)v99, 0);
    v98 = result.m_pObject;
    v99 += 4;
  }
  while ( (signed int)result.m_pObject < 7 );
  v106 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Num00", &uiLeft, &uiTop, pkTexture);
  i = v106;
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num01");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num02");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num03");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num04");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num05");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num06");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num07");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num08");
  PgSprData::Add(v106, &spNode.m_pObject->baseclass_0, "Num09");
  v107 = 0;
  v108 = (int)v89->m_spMyBetNumSpr;
  do
  {
    memset(pcTag, 0, 0x80u);
    result.m_pObject = (MHDiceGameTask *)((char *)v107 + 1);
    sprintf(pcTag, "MyMoney%.2d");
    v109 = UIUtil::CreateSpr(&ui, pcTag, 0);
    v110 = *(_DWORD *)(v108 - 48);
    v319 = v109;
    if ( (PgWinSpr *)v110 != v109 )
    {
      if ( v110 && !InterlockedDecrement((volatile LONG *)(v110 + 4)) && v110 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v110)(v110, 1);
      v111 = (int)v319;
      *(_DWORD *)(v108 - 48) = v319;
      if ( v111 )
        InterlockedIncrement((volatile LONG *)(v111 + 4));
    }
    (*(void (__stdcall **)(signed int, unsigned int))(**(_DWORD **)(v108 - 48) + 256))(1, v302);
    v112 = PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v113 = *(_DWORD *)v108;
    v319 = v112;
    if ( (PgWinSpr *)v113 != v112 )
    {
      if ( v113 && !InterlockedDecrement((volatile LONG *)(v113 + 4)) && v113 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v113)(v113, 1);
      v114 = (int)v319;
      *(_DWORD *)v108 = v319;
      if ( v114 )
        InterlockedIncrement((volatile LONG *)(v114 + 4));
    }
    v302 = 0;
    (*(void (**)(void))(**(_DWORD **)v108 + 240))();
    (*(void (__stdcall **)(signed int))(**(_DWORD **)v108 + 492))(1);
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v108 - 48) + 116))(*(_DWORD *)v108, 0);
    v107 = result.m_pObject;
    v108 += 4;
  }
  while ( (signed int)result.m_pObject < 12 );
  MHDiceGameTask::GetDiceGameTask(&result);
  LOBYTE(v363) = 3;
  v116 = User::Coin(&g_kUser);
  HIDWORD(i64Val) = HIDWORD(v116);
  v115 = v116;
  LOBYTE(v363) = 2;
  if ( *(float *)&result.m_pObject != 0.0 )
  {
    v117 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v117 )
        v117->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v117, 1u);
    }
  }
  v319 = (void *)11;
  i = &v89->m_spMyBetNumSpr[11];
  while ( 1 )
  {
    v118 = v115 % 10;
    v119 = (signed __int64)__PAIR__(HIDWORD(i64Val), v115) / 10;
    HIDWORD(i64Val) = (unsigned __int64)((signed __int64)__PAIR__(HIDWORD(i64Val), v115) / 10) >> 32;
    v115 = v119;
    if ( v118 < 0 )
      v118 = 0;
    (*(void (__cdecl **)(int))(**(_DWORD **)i + 492))(v118);
    if ( !(HIDWORD(i64Val) | (unsigned int)v119) )
      break;
    i = (char *)i - 4;
    v319 = (char *)v319 - 1;
    if ( (signed int)v319 < 0 )
      goto LABEL_178;
  }
  v120 = (int)((char *)v319 - 1);
  if ( (signed int)((char *)v319 - 1) >= 0 )
  {
    v121 = (int)&v89->m_spMyBetNumSpr[v120];
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v121 + 492))(0);
      v121 -= 4;
      --v120;
    }
    while ( v120 >= 0 );
  }
LABEL_178:
  LODWORD(v89->m_nTempBettingMoeny) = 0;
  HIDWORD(v89->m_nTempBettingMoeny) = 0;
  LODWORD(v89->m_nUserBettingMoney) = 0;
  HIDWORD(v89->m_nUserBettingMoney) = 0;
  v122 = UIUtil::CreateBtn(&ui, 0x3Bu, "RankingNor", "RankingClick", "RankingOver", 0, 0);
  v122->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v123 = TextData2::Get(0xD9CBC7D8u);
  PgWin::SetToolTipWinText(&v122->baseclass_0.baseclass_0, v123);
  v124 = UIUtil::CreateBtn(&ui, 0x3Cu, "HelpNor", "HelpClick", "HelpOver", 0, 0);
  v124->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v125 = TextData2::Get(0x34361593u);
  PgWin::SetToolTipWinText(&v124->baseclass_0.baseclass_0, v125);
  v126 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Coin01Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v126, &spNode.m_pObject->baseclass_0, "Coin01Click");
  PgSprData::Add(v126, &spNode.m_pObject->baseclass_0, "Coin01Over");
  v127 = ToggleBut::CreateWin(uiLeft, uiTop, v126, &v89->baseclass_0.baseclass_0.baseclass_0, 0x34u, 0, 0, 0);
  v128 = v89->m_pkChipSelectBut[0].m_pObject;
  v129 = v127;
  if ( v128 != v127 )
  {
    if ( v128
      && !InterlockedDecrement((volatile LONG *)&v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v128 )
      v128->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v128,
        1u);
    v89->m_pkChipSelectBut[0].m_pObject = v129;
    if ( v129 )
      InterlockedIncrement((volatile LONG *)&v129->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[0].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v130 = (PgWin *)v89->m_pkChipSelectBut[0].m_pObject;
  v131 = TextData2::Get(0x4F1704F0u);
  PgWin::SetToolTipWinText(v130, v131);
  v132 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Coin02Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v132, &spNode.m_pObject->baseclass_0, "Coin02Click");
  PgSprData::Add(v132, &spNode.m_pObject->baseclass_0, "Coin02Over");
  v133 = ToggleBut::CreateWin(uiLeft, uiTop, v132, &v89->baseclass_0.baseclass_0.baseclass_0, 0x35u, 0, 0, 0);
  v134 = v89->m_pkChipSelectBut[1].m_pObject;
  v135 = v133;
  if ( v134 != v133 )
  {
    if ( v134
      && !InterlockedDecrement((volatile LONG *)&v134->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v134 )
      v134->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v134,
        1u);
    v89->m_pkChipSelectBut[1].m_pObject = v135;
    if ( v135 )
      InterlockedIncrement((volatile LONG *)&v135->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[1].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v136 = (PgWin *)v89->m_pkChipSelectBut[1].m_pObject;
  v137 = TextData2::Get(0x4F1704F4u);
  PgWin::SetToolTipWinText(v136, v137);
  v138 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Coin03Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v138, &spNode.m_pObject->baseclass_0, "Coin03Click");
  PgSprData::Add(v138, &spNode.m_pObject->baseclass_0, "Coin03Over");
  PgSprData::Add(v138, &spNode.m_pObject->baseclass_0, "Coin03Disable");
  v139 = ToggleBut::CreateWin(uiLeft, uiTop, v138, &v89->baseclass_0.baseclass_0.baseclass_0, 0x36u, 0, 0, 0);
  v140 = v89->m_pkChipSelectBut[2].m_pObject;
  v141 = v139;
  if ( v140 != v139 )
  {
    if ( v140
      && !InterlockedDecrement((volatile LONG *)&v140->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v140 )
      v140->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v140,
        1u);
    v89->m_pkChipSelectBut[2].m_pObject = v141;
    if ( v141 )
      InterlockedIncrement((volatile LONG *)&v141->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[2].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v142 = (PgWin *)v89->m_pkChipSelectBut[2].m_pObject;
  v143 = TextData2::Get(0x1B1DF85Au);
  PgWin::SetToolTipWinText(v142, v143);
  v144 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Coin04Nor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v144, &spNode.m_pObject->baseclass_0, "Coin04Click");
  PgSprData::Add(v144, &spNode.m_pObject->baseclass_0, "Coin04Over");
  PgSprData::Add(v144, &spNode.m_pObject->baseclass_0, "Coin04Disable");
  v145 = ToggleBut::CreateWin(uiLeft, uiTop, v144, &v89->baseclass_0.baseclass_0.baseclass_0, 0x37u, 0, 0, 0);
  v146 = v89->m_pkChipSelectBut[3].m_pObject;
  v147 = v145;
  if ( v146 != v145 )
  {
    if ( v146
      && !InterlockedDecrement((volatile LONG *)&v146->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v146 )
      v146->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v146,
        1u);
    v89->m_pkChipSelectBut[3].m_pObject = v147;
    if ( v147 )
      InterlockedIncrement((volatile LONG *)&v147->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[3].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v148 = (PgWin *)v89->m_pkChipSelectBut[3].m_pObject;
  v149 = TextData2::Get(0x21116226u);
  PgWin::SetToolTipWinText(v148, v149);
  v150 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "CoinMaxNor", &uiLeft, &uiTop, pkTexture);
  PgSprData::Add(v150, &spNode.m_pObject->baseclass_0, "CoinMaxClick");
  PgSprData::Add(v150, &spNode.m_pObject->baseclass_0, "CoinMaxOver");
  v151 = ToggleBut::CreateWin(uiLeft, uiTop, v150, &v89->baseclass_0.baseclass_0.baseclass_0, 0x38u, 0, 0, 0);
  v152 = v89->m_pkChipSelectBut[4].m_pObject;
  v153 = v151;
  if ( v152 != v151 )
  {
    if ( v152
      && !InterlockedDecrement((volatile LONG *)&v152->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v152 )
      v152->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v152,
        1u);
    v89->m_pkChipSelectBut[4].m_pObject = v153;
    if ( v153 )
      InterlockedIncrement((volatile LONG *)&v153->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v89->m_pkChipSelectBut[4].m_pObject->baseclass_0.baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v154 = (PgWin *)v89->m_pkChipSelectBut[4].m_pObject;
  v155 = TextData2::Get(0x9B8D6ACEu);
  PgWin::SetToolTipWinText(v154, v155);
  v156 = (int)&v89->m_pkChipSelectBut[1];
  v319 = (void *)4;
  do
  {
    v157 = *(_DWORD *)v156;
    v158 = *(int (__thiscall **)(_DWORD))(**(_DWORD **)v156 + 312);
    v159 = *(_DWORD *)v156;
    *(_BYTE *)(*(_DWORD *)v156 + 324) = 1;
    if ( (unsigned __int8)v158(v159) )
    {
      if ( *(_BYTE *)(v157 + 324) )
        v299 = 1;
      else
        v299 = 0;
      (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v157 + 552))(v157, v299);
    }
    v156 += 4;
    v319 = (char *)v319 - 1;
  }
  while ( v319 );
  v160 = v89->m_pkChipSelectBut[0].m_pObject;
  v161 = v160->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[78].__vecDelDtor;
  v162 = v89->m_pkChipSelectBut[0].m_pObject;
  v160->m_bHighlight = 0;
  if ( (unsigned __int8)((int (__thiscall *)(ToggleBut *))v161)(v162) )
  {
    if ( v160->m_bHighlight )
      v300 = 1;
    else
      v300 = 0;
    v160->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[138].__vecDelDtor(
      (NiRefObject *)v160,
      v300);
  }
  v163 = UIUtil::CreateBtn(&ui, 0x3Au, "MinNor", "MinClick", "MinOver", 0, 0);
  v164 = v89->m_EffectPos.m_pObject;
  v165 = v163;
  if ( (PgWinBut *)v164 != v163 )
  {
    if ( v164
      && !InterlockedDecrement((volatile LONG *)&v164->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v164 )
      v164->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v164, 1u);
    v89->m_EffectPos.m_pObject = (NiNode *)v165;
    if ( v165 )
      InterlockedIncrement((volatile LONG *)&v165->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  UIUtil::CreateBtn(&ui, 0x39u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
  v166 = UIUtil::CreateBtn(&ui, 0x39u, "ExitNor", "ExitClick", "ExitOver", 0, 0);
  v166->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v167 = TextData2::Get(0xFA4A423Fu);
  PgWin::SetToolTipWinText(&v166->baseclass_0.baseclass_0, v167);
  v168 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "ResultDiceNum01", &uiLeft, &uiTop, 0);
  i = v168;
  PgSprData::Add(v168, &spNode.m_pObject->baseclass_0, "ResultDiceNum02");
  PgSprData::Add(v168, &spNode.m_pObject->baseclass_0, "ResultDiceNum03");
  PgSprData::Add(v168, &spNode.m_pObject->baseclass_0, "ResultDiceNum04");
  PgSprData::Add(v168, &spNode.m_pObject->baseclass_0, "ResultDiceNum05");
  PgSprData::Add(v168, &spNode.m_pObject->baseclass_0, "ResultDiceNum06");
  v169 = 0;
  v170 = (int)v89->m_spResultDice;
  do
  {
    memset(pcTag, 0, 0x80u);
    result.m_pObject = (MHDiceGameTask *)((char *)v169 + 1);
    sprintf(pcTag, "ResultDice%.2d");
    v171 = UIUtil::CreateSpr(&ui, pcTag, 0);
    v172 = *(_DWORD *)(v170 - 12);
    v319 = v171;
    if ( (PgWinSpr *)v172 != v171 )
    {
      if ( v172 && !InterlockedDecrement((volatile LONG *)(v172 + 4)) && v172 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v172)(v172, 1);
      v173 = (int)v319;
      *(_DWORD *)(v170 - 12) = v319;
      if ( v173 )
        InterlockedIncrement((volatile LONG *)(v173 + 4));
    }
    (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v170 - 12) + 256))(0, v303);
    v174 = PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)i, &v89->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    v175 = *(_DWORD *)v170;
    v319 = v174;
    if ( (PgWinSpr *)v175 != v174 )
    {
      if ( v175 && !InterlockedDecrement((volatile LONG *)(v175 + 4)) && v175 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v175)(v175, 1);
      v176 = (int)v319;
      *(_DWORD *)v170 = v319;
      if ( v176 )
        InterlockedIncrement((volatile LONG *)(v176 + 4));
    }
    v303 = 0;
    (*(void (**)(void))(**(_DWORD **)v170 + 240))();
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v170 - 12) + 116))(*(_DWORD *)v170, 0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v170 + 492))(0);
    v169 = result.m_pObject;
    v170 += 4;
  }
  while ( (signed int)result.m_pObject < 3 );
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Title", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v179 = Font::Get(BOLD);
    v180 = PgWinText::CreateWin(
             uiLeft - (_DWORD)iOffX,
             uiTop - iOffY,
             uiWidth,
             uiHeight,
             v179,
             &v89->baseclass_0.baseclass_0.baseclass_0,
             0,
             0);
    v181 = v89->m_spTitleText.m_pObject;
    v182 = v180;
    if ( v181 != v180 )
    {
      if ( v181
        && !InterlockedDecrement((volatile LONG *)&v181->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v181 )
        v181->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)v181,
          1u);
      v89->m_spTitleText.m_pObject = v182;
      if ( v182 )
        InterlockedIncrement((volatile LONG *)&v182->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    }
    ((void (__stdcall *)(signed int))v89->m_spTitleText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
    ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, signed int))v89->m_spTitleText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[116].__vecDelDtor)(
      0,
      0,
      0,
      255);
    ((void (__stdcall *)(_DWORD))v89->m_spTitleText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    if ( PgUtil::GetTriShapeRect(
           &spNode.m_pObject->baseclass_0,
           "TextBox_DiceResult",
           &uiLeft,
           &uiTop,
           &uiWidth,
           &uiHeight) )
    {
      v185 = Font::Get(LARGE);
      v186 = PgWinText::CreateWin(
               uiLeft - (_DWORD)iOffX,
               uiTop - iOffY,
               uiWidth,
               uiHeight,
               v185,
               &v89->baseclass_0.baseclass_0.baseclass_0,
               0,
               0);
      v187 = v89->m_spTimeCountText.m_pObject;
      v188 = v186;
      if ( v187 != v186 )
      {
        if ( v187
          && !InterlockedDecrement((volatile LONG *)&v187->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v187 )
          v187->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
            (NiRefObject *)v187,
            1u);
        v89->m_spTimeCountText.m_pObject = v188;
        if ( v188 )
          InterlockedIncrement((volatile LONG *)&v188->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      }
      ((void (__stdcall *)(signed int))v89->m_spTimeCountText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
      ((void (__stdcall *)(_DWORD))v89->m_spTimeCountText.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        v191 = Font::Get(BOLD);
        v192 = PgWinText::CreateWin(
                 uiLeft - (_DWORD)iOffX,
                 uiTop - iOffY,
                 uiWidth,
                 uiHeight,
                 v191,
                 &v89->baseclass_0.baseclass_0.baseclass_0,
                 0,
                 0);
        ((void (__thiscall *)(PgWinText *, _DWORD, _DWORD))v192->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(
          v192,
          0,
          0);
        v193 = v89->m_pRunEffect.m_pObject;
        if ( (PgWinText *)v193 != v192 )
        {
          if ( v193
            && !InterlockedDecrement((volatile LONG *)&v193->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v193 )
            v193->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v193, 1u);
          v89->m_pRunEffect.m_pObject = (NiNode *)v192;
          InterlockedIncrement((volatile LONG *)&v192->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        if ( !Folder::m_bInit )
          Folder::Init();
        v194 = 0;
        do
        {
          v195 = *(&Folder::m_acEffect + v194);
          *(&Folder::m_acMerge + v194++) = v195;
        }
        while ( v195 );
        v196 = &Folder::m_acMerge - 1;
        do
          v197 = (v196++)[1];
        while ( v197 );
        v198 = dword_9D5DBC;
        *(_DWORD *)v196 = dword_9D5DB8;
        v199 = dword_9D5DC0;
        *((_DWORD *)v196 + 1) = v198;
        LOWORD(v198) = word_9D5DC4;
        *((_DWORD *)v196 + 2) = v199;
        *((_WORD *)v196 + 6) = v198;
        v200 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v201 = operator new(0x44u);
        HIDWORD(i64Val) = v201;
        LOBYTE(v363) = 4;
        if ( v201 )
        {
          v202 = NiObject::Clone(v200);
          SpEffect::SpEffect((SpEffect *)v201, (NiNode *)v202);
        }
        else
        {
          v202 = 0;
        }
        v89->m_pkDiceRollEffect = (SpEffect *)v202;
        v203 = v202->baseclass_0.vfptr;
        LOBYTE(v363) = 2;
        NiMatrix3::MakeRotation((NiMatrix3 *)&v203[13], NI_PI, 0.0, 1.0, 0.0);
        if ( !Folder::m_bInit )
          Folder::Init();
        v204 = 0;
        do
        {
          v205 = *(&Folder::m_acEffect + v204);
          *(&Folder::m_acMerge + v204++) = v205;
        }
        while ( v205 );
        v206 = &Folder::m_acMerge - 1;
        do
          v207 = (v206++)[1];
        while ( v207 );
        v208 = dword_9D5DCC;
        *(_DWORD *)v206 = dword_9D5DC8;
        v209 = dword_9D5DD0;
        *((_DWORD *)v206 + 1) = v208;
        v210 = dword_9D5DD4;
        *((_DWORD *)v206 + 2) = v209;
        v211 = dword_9D5DD8;
        *((_DWORD *)v206 + 3) = v210;
        LOBYTE(v210) = byte_9D5DDC;
        *((_DWORD *)v206 + 4) = v211;
        v206[20] = v210;
        v212 = Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v213 = v89->m_pStartEffect.m_pObject;
        v214 = v212;
        if ( v213 != v212 )
        {
          if ( v213
            && !InterlockedDecrement((volatile LONG *)&v213->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v213 )
            v213->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v213, 1u);
          v89->m_pStartEffect.m_pObject = v214;
          if ( v214 )
            InterlockedIncrement((volatile LONG *)&v214->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        if ( !Folder::m_bInit )
          Folder::Init();
        v215 = 0;
        do
        {
          v216 = *(&Folder::m_acEffect + v215);
          *(&Folder::m_acMerge + v215++) = v216;
        }
        while ( v216 );
        v217 = &Folder::m_acMerge - 1;
        do
          v218 = (v217++)[1];
        while ( v218 );
        v219 = dword_9D5DE4;
        *(_DWORD *)v217 = dword_9D5DE0;
        v220 = dword_9D5DE8;
        *((_DWORD *)v217 + 1) = v219;
        v221 = off_9D5DEC;
        *((_DWORD *)v217 + 2) = v220;
        *((_DWORD *)v217 + 3) = v221;
        v222 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v223 = operator new(0x60u);
        HIDWORD(i64Val) = v223;
        LOBYTE(v363) = 5;
        if ( v223 )
        {
          iOffX = NiObject::Clone(v222);
          *(_DWORD *)v223 = 0;
          LOBYTE(v363) = 6;
          CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v223 + 4));
          LOBYTE(v363) = 7;
          NsEffect::NsEffect((NsEffect *)((char *)v223 + 28));
          v224 = *(_DWORD *)v223;
          LOBYTE(v363) = 8;
          if ( (NiObject *)v224 != iOffX )
          {
            if ( v224 && !InterlockedDecrement((volatile LONG *)(v224 + 4)) && v224 )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v224)(v224, 1);
            v225 = iOffX;
            *(_DWORD *)v223 = iOffX;
            if ( v225 )
              InterlockedIncrement((volatile LONG *)&v225->baseclass_0.m_uiRefCount);
          }
          *((_WORD *)v223 + 32) = 0;
        }
        else
        {
          v223 = 0;
        }
        v89->m_pkChipThrowEff = (MHChipEffect *)v223;
        v226 = *(_DWORD *)v223;
        *(float *)&result.m_pObject = fabs(0.6000000238418579);
        LOBYTE(v363) = 2;
        *(float *)(v226 + 100) = *(float *)&result.m_pObject;
        if ( !Folder::m_bInit )
          Folder::Init();
        v227 = 0;
        do
        {
          v228 = *(&Folder::m_acEffect + v227);
          *(&Folder::m_acMerge + v227++) = v228;
        }
        while ( v228 );
        v229 = &Folder::m_acMerge - 1;
        do
          v230 = (v229++)[1];
        while ( v230 );
        v231 = dword_9D5DF4;
        *(_DWORD *)v229 = dword_9D5DF0;
        v232 = word_9D5DF8;
        *((_DWORD *)v229 + 1) = v231;
        LOBYTE(v231) = byte_9D5DFA;
        *((_WORD *)v229 + 4) = v232;
        v229[10] = v231;
        v233 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v234 = operator new(0x44u);
        HIDWORD(i64Val) = v234;
        LOBYTE(v363) = 9;
        if ( v234 )
        {
          v235 = NiObject::Clone(v233);
          SpEffect::SpEffect((SpEffect *)v234, (NiNode *)v235);
        }
        else
        {
          v235 = 0;
        }
        v89->m_pkRewardEff = (SpEffect *)v235;
        v236 = v235->baseclass_0.vfptr;
        v309 = 500.0;
        *(float *)&i64Val = 340.0;
        *(float *)&v236[22].__vecDelDtor = 500.0;
        *((float *)&i64Val + 1) = 1000.0;
        *(float *)&v236[23].__vecDelDtor = 340.0;
        *(float *)&v236[24].__vecDelDtor = 1000.0;
        v237 = v89->m_pkRewardEff->m_spEffect.m_pObject;
        LOBYTE(v363) = 2;
        NiMatrix3::MakeRotation(&v237->baseclass_0.m_kLocal.m_Rotate, NI_PI, 0.0, 0.0, 0.1);
        if ( !Folder::m_bInit )
          Folder::Init();
        v238 = 0;
        do
        {
          v239 = *(&Folder::m_acEffect + v238);
          *(&Folder::m_acMerge + v238++) = v239;
        }
        while ( v239 );
        v240 = &Folder::m_acMerge - 1;
        do
          v241 = (v240++)[1];
        while ( v241 );
        v242 = dword_9D5E00;
        *(_DWORD *)v240 = dword_9D5DFC;
        v243 = dword_9D5E04;
        *((_DWORD *)v240 + 1) = v242;
        v244 = off_9D5E08;
        *((_DWORD *)v240 + 2) = v243;
        *((_DWORD *)v240 + 3) = v244;
        v245 = Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v246 = v89->m_pBigpotEff.m_pObject;
        v247 = v245;
        if ( v246 != v245 )
        {
          if ( v246
            && !InterlockedDecrement((volatile LONG *)&v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
            && v246 )
            v246->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v246, 1u);
          v89->m_pBigpotEff.m_pObject = v247;
          if ( v247 )
            InterlockedIncrement((volatile LONG *)&v247->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        }
        if ( !Folder::m_bInit )
          Folder::Init();
        v248 = 0;
        do
        {
          v249 = *(&Folder::m_acEffect + v248);
          *(&Folder::m_acMerge + v248++) = v249;
        }
        while ( v249 );
        v250 = &Folder::m_acMerge - 1;
        do
          v251 = (v250++)[1];
        while ( v251 );
        v252 = dword_9D5E10;
        *(_DWORD *)v250 = dword_9D5E0C;
        v253 = dword_9D5E14;
        *((_DWORD *)v250 + 1) = v252;
        v254 = off_9D5E18;
        *((_DWORD *)v250 + 2) = v253;
        *((_DWORD *)v250 + 3) = v254;
        iOffX = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        v255 = (int)v89->m_pkResultEffectList;
        iOffY = 10;
        do
        {
          v256 = operator new(0x44u);
          HIDWORD(i64Val) = v256;
          LOBYTE(v363) = 10;
          if ( v256 )
          {
            v257 = NiObject::Clone(iOffX);
            SpEffect::SpEffect((SpEffect *)v256, (NiNode *)v257);
          }
          else
          {
            v257 = 0;
          }
          *(_DWORD *)v255 = v257;
          v255 += 4;
          v258 = iOffY-- == 1;
          LOBYTE(v363) = 2;
        }
        while ( !v258 );
        if ( !Folder::m_bInit )
          Folder::Init();
        v259 = 0;
        do
        {
          v260 = *(&Folder::m_acEffect + v259);
          *(&Folder::m_acMerge + v259++) = v260;
        }
        while ( v260 );
        v261 = &Folder::m_acMerge - 1;
        do
          v262 = (v261++)[1];
        while ( v262 );
        v263 = dword_9D5E20;
        *(_DWORD *)v261 = dword_9D5E1C;
        v264 = dword_9D5E24;
        *((_DWORD *)v261 + 1) = v263;
        v265 = dword_9D5E28;
        *((_DWORD *)v261 + 2) = v264;
        v266 = dword_9D5E2C;
        *((_DWORD *)v261 + 3) = v265;
        v267 = off_9D5E30;
        *((_DWORD *)v261 + 4) = v266;
        *((_DWORD *)v261 + 5) = v267;
        iOffX = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
        iOffY = (int)v89->m_pkDiceUpEff;
        v319 = (void *)3;
        do
        {
          v268 = operator new(0x60u);
          HIDWORD(i64Val) = v268;
          LOBYTE(v363) = 11;
          if ( v268 )
          {
            v269 = NiObject::Clone(iOffX);
            *(_DWORD *)v268 = 0;
            LOBYTE(v363) = 12;
            CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v268 + 4));
            LOBYTE(v363) = 13;
            NsEffect::NsEffect((NsEffect *)((char *)v268 + 28));
            v270 = *(_DWORD *)v268;
            LOBYTE(v363) = 14;
            if ( (NiObject *)v270 != v269 )
            {
              if ( v270 && !InterlockedDecrement((volatile LONG *)(v270 + 4)) && v270 )
                (**(void (__thiscall ***)(_DWORD, _DWORD))v270)(v270, 1);
              *(_DWORD *)v268 = v269;
              if ( v269 )
                InterlockedIncrement((volatile LONG *)&v269->baseclass_0.m_uiRefCount);
            }
            *((_WORD *)v268 + 32) = 0;
          }
          else
          {
            v268 = 0;
          }
          v271 = iOffY;
          *(_DWORD *)iOffY = v268;
          v258 = v319 == (void *)1;
          v319 = (char *)v319 - 1;
          LOBYTE(v363) = 2;
          iOffY = v271 + 4;
        }
        while ( !v258 );
        strPath.baseclass_0._Myres = 15;
        strPath.baseclass_0._Mysize = 0;
        strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        Directoryname.baseclass_0._Myres = 15;
        Directoryname.baseclass_0._Mysize = 0;
        Directoryname.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        Filename.baseclass_0._Myres = 15;
        Filename.baseclass_0._Mysize = 0;
        Filename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v363) = 17;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Directoryname,
          "MiniGame01_Dice",
          0xFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Filename,
          "MiniGame01_DiceA",
          0x10u);
        if ( !Folder::m_bInit )
          Folder::Init();
        v272 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&kMat.m_pEntry[0][2],
                 &Folder::m_acCharacter,
                 &Directoryname);
        LOBYTE(v363) = 18;
        v273 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
                 v272,
                 "\\");
        if ( &strPath != v273 )
        {
          if ( strPath.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strPath);
          strPath.baseclass_0._Myres = 15;
          strPath.baseclass_0._Mysize = 0;
          strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          if ( v273->baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)&strPath.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v273->baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v273->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove(
              strPath.baseclass_0.___u0.baseclass_0.dummy,
              v273->baseclass_0.___u0.baseclass_0.dummy,
              v273->baseclass_0._Mysize + 1);
          }
          strPath.baseclass_0._Mysize = v273->baseclass_0._Mysize;
          strPath.baseclass_0._Myres = v273->baseclass_0._Myres;
          v273->baseclass_0._Myres = 15;
          v273->baseclass_0._Mysize = 0;
          v273->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        if ( v327 >= 0x10 )
          operator delete(p);
        v327 = 15;
        v326 = 0;
        LOBYTE(p) = 0;
        LOBYTE(v363) = 17;
        if ( LODWORD(kMat.m_pEntry[2][1]) >= 0x10 )
          operator delete(LODWORD(kMat.m_pEntry[0][2]));
        v274 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&kMat.m_pEntry[0][2],
                 &Filename,
                 ".kfm");
        LOBYTE(v363) = 20;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, v274, 0, 0xFFFFFFFFu);
        LOBYTE(v363) = 17;
        if ( LODWORD(kMat.m_pEntry[2][1]) >= 0x10 )
          operator delete(LODWORD(kMat.m_pEntry[0][2]));
        ResElement::CreateResElement(pkSprData->m_pkDice, &strPath, &Filename);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Directoryname,
          "MiniGame02_Dice",
          0xFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Filename,
          "MiniGame01_DiceB",
          0x10u);
        if ( !Folder::m_bInit )
          Folder::Init();
        v275 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&kMat.m_pEntry[0][2],
                 &Folder::m_acCharacter,
                 &Directoryname);
        LOBYTE(v363) = 21;
        v276 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
                 v275,
                 "\\");
        if ( &strPath != v276 )
        {
          if ( strPath.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strPath);
          strPath.baseclass_0._Myres = 15;
          strPath.baseclass_0._Mysize = 0;
          strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          if ( v276->baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)&strPath.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v276->baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v276->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove(
              strPath.baseclass_0.___u0.baseclass_0.dummy,
              v276->baseclass_0.___u0.baseclass_0.dummy,
              v276->baseclass_0._Mysize + 1);
          }
          strPath.baseclass_0._Mysize = v276->baseclass_0._Mysize;
          strPath.baseclass_0._Myres = v276->baseclass_0._Myres;
          v276->baseclass_0._Myres = 15;
          v276->baseclass_0._Mysize = 0;
          v276->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        if ( v327 >= 0x10 )
          operator delete(p);
        v327 = 15;
        v326 = 0;
        LOBYTE(p) = 0;
        LOBYTE(v363) = 17;
        if ( LODWORD(kMat.m_pEntry[2][1]) >= 0x10 )
          operator delete(LODWORD(kMat.m_pEntry[0][2]));
        v277 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&kMat.m_pEntry[0][2],
                 &Filename,
                 ".kfm");
        LOBYTE(v363) = 23;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, v277, 0, 0xFFFFFFFFu);
        LOBYTE(v363) = 17;
        if ( LODWORD(kMat.m_pEntry[2][1]) >= 0x10 )
          operator delete(LODWORD(kMat.m_pEntry[0][2]));
        ResElement::CreateResElement(&pkSprData->m_pkDice[1], &strPath, &Filename);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Directoryname,
          "MiniGame03_Dice",
          0xFu);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &Filename,
          "MiniGame01_DiceC",
          0x10u);
        if ( !Folder::m_bInit )
          Folder::Init();
        v278 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&kMat.m_pEntry[0][2],
                 &Folder::m_acCharacter,
                 &Directoryname);
        LOBYTE(v363) = 24;
        v279 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
                 v278,
                 "\\");
        if ( &strPath != v279 )
        {
          if ( strPath.baseclass_0._Myres >= 0x10 )
            operator delete(*(void **)&strPath);
          strPath.baseclass_0._Myres = 15;
          strPath.baseclass_0._Mysize = 0;
          strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          if ( v279->baseclass_0._Myres >= 0x10 )
          {
            *(_DWORD *)&strPath.baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&v279->baseclass_0.___u0.baseclass_0.dummy[0];
            *(_DWORD *)&v279->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            memmove(
              strPath.baseclass_0.___u0.baseclass_0.dummy,
              v279->baseclass_0.___u0.baseclass_0.dummy,
              v279->baseclass_0._Mysize + 1);
          }
          strPath.baseclass_0._Mysize = v279->baseclass_0._Mysize;
          strPath.baseclass_0._Myres = v279->baseclass_0._Myres;
          v279->baseclass_0._Myres = 15;
          v279->baseclass_0._Mysize = 0;
          v279->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        if ( v327 >= 0x10 )
          operator delete(p);
        v327 = 15;
        v326 = 0;
        LOBYTE(p) = 0;
        LOBYTE(v363) = 17;
        if ( LODWORD(kMat.m_pEntry[2][1]) >= 0x10 )
          operator delete(LODWORD(kMat.m_pEntry[0][2]));
        v280 = std::operator_<char_std::char_traits<char>_std::allocator<char>>(
                 (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
                 &Filename,
                 ".kfm");
        LOBYTE(v363) = 26;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strPath, v280, 0, 0xFFFFFFFFu);
        LOBYTE(v363) = 17;
        if ( v327 >= 0x10 )
          operator delete(p);
        v281 = pkSprData;
        v327 = 15;
        v326 = 0;
        LOBYTE(p) = 0;
        ResElement::CreateResElement(&pkSprData->m_pkDice[2], &strPath, &Filename);
        NiMatrix3::MakeRotation(&kMatX, NI_PI, 1.0, 0.0, 0.0);
        v309 = 500.0;
        *(float *)&i64Val = 350.0;
        memcpy(&kMat, &kMatX, sizeof(kMat));
        *((float *)&i64Val + 1) = 1000.0;
        iOffY = 0;
        iOffX = (NiObject *)&v281->m_AniActor[0].m_AniSeqIDOffset;
        v282 = (int)&v281->m_pkDice[0].m_pActorMgr;
        do
        {
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v283 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v283 = *(_DWORD *)(v282 - 4);
          memcpy((void *)(v283 + 52), &kMat, 0x24u);
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v284 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v284 = *(_DWORD *)(v282 - 4);
          v285 = i64Val;
          *(_DWORD *)(v284 + 88) = LODWORD(v309);
          v286 = HIDWORD(i64Val);
          *(_DWORD *)(v284 + 92) = v285;
          *(_DWORD *)(v284 + 96) = v286;
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v287 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v287 = *(_DWORD *)(v282 - 4);
          ((void (__stdcall *)(int, _DWORD))pkSprData->m_pRunEffect.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
            v287,
            0);
          v288 = iOffY;
          LOWORD(iOffX->baseclass_0.vfptr) = iOffY + 1;
          if ( *(_BYTE *)(v282 + 4) && *(_DWORD *)v282 )
            v289 = *(_DWORD *)(*(_DWORD *)v282 + 12);
          else
            v289 = *(_DWORD *)(v282 - 4);
          *(_WORD *)(v289 + 28) |= 1u;
          iOffX = (NiObject *)((char *)iOffX + 12);
          v282 += 44;
          iOffY = v288 + 1;
        }
        while ( v288 + 1 < 3 );
        v290 = pkSprData;
        v291 = pkSprData->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkSprData->m_fDiceAniTime = 0.0;
        v292 = v291[59].__vecDelDtor;
        v290->m_fRewardTime = 0.0;
        v290->m_fResultTime = 0.0;
        v290->m_uiSuccessNum = 0;
        *(_DWORD *)&v290->m_bIsResetTimer = 0;
        v290->m_bIsHappendBigPot = 0;
        ((void (__stdcall *)(unsigned int, unsigned int, _DWORD))v292)(
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.5);
        if ( Filename.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&Filename);
        Filename.baseclass_0._Myres = 15;
        Filename.baseclass_0._Mysize = 0;
        Filename.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( Directoryname.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&Directoryname);
        Directoryname.baseclass_0._Myres = 15;
        Directoryname.baseclass_0._Mysize = 0;
        Directoryname.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( strPath.baseclass_0._Myres >= 0x10 )
          operator delete(*(void **)&strPath);
        strPath.baseclass_0._Myres = 15;
        strPath.baseclass_0._Mysize = 0;
        strPath.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        LOBYTE(v363) = 1;
        UIUtil::_UIUtil(&ui);
        v293 = spTexProp.m_pObject;
        LOBYTE(v363) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v293->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v293, 1u);
        v294 = spNode.m_pObject;
        v363 = -1;
        if ( spNode.m_pObject
          && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          && v294 )
          v294->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v294, 1u);
        v11 = 1;
      }
      else
      {
        LOBYTE(v363) = 1;
        UIUtil::_UIUtil(&ui);
        v189 = spTexProp.m_pObject;
        LOBYTE(v363) = 0;
        if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
          v189->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v189, 1u);
        v190 = spNode.m_pObject;
        v363 = -1;
        if ( !spNode.m_pObject
          || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
          || !v190 )
          return 0;
        v190->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v190, 1u);
        v11 = 0;
      }
    }
    else
    {
      LOBYTE(v363) = 1;
      UIUtil::_UIUtil(&ui);
      v183 = spTexProp.m_pObject;
      LOBYTE(v363) = 0;
      if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v183->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v183, 1u);
      v184 = spNode.m_pObject;
      v363 = -1;
      if ( !spNode.m_pObject
        || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        || !v184 )
        return 0;
      v184->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v184, 1u);
      v11 = 0;
    }
  }
  else
  {
    LOBYTE(v363) = 1;
    UIUtil::_UIUtil(&ui);
    v177 = spTexProp.m_pObject;
    LOBYTE(v363) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&spTexProp.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v177->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v177, 1u);
    v178 = spNode.m_pObject;
    v363 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v178 )
      return 0;
    v178->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v178, 1u);
    v11 = 0;
  }
  return v11;
}
// 9D5DB8: using guessed type int dword_9D5DB8;
// 9D5DBC: using guessed type int dword_9D5DBC;
// 9D5DC0: using guessed type int dword_9D5DC0;
// 9D5DC4: using guessed type __int16 word_9D5DC4;
// 9D5DC8: using guessed type int dword_9D5DC8;
// 9D5DCC: using guessed type int dword_9D5DCC;
// 9D5DD0: using guessed type int dword_9D5DD0;
// 9D5DD4: using guessed type int dword_9D5DD4;
// 9D5DD8: using guessed type int dword_9D5DD8;
// 9D5DDC: using guessed type char byte_9D5DDC;
// 9D5DE0: using guessed type int dword_9D5DE0;
// 9D5DE4: using guessed type int dword_9D5DE4;
// 9D5DE8: using guessed type int dword_9D5DE8;
// 9D5DEC: using guessed type int (__fastcall *off_9D5DEC)(Char *this);
// 9D5DF0: using guessed type int dword_9D5DF0;
// 9D5DF4: using guessed type int dword_9D5DF4;
// 9D5DF8: using guessed type __int16 word_9D5DF8;
// 9D5DFA: using guessed type char byte_9D5DFA;
// 9D5DFC: using guessed type int dword_9D5DFC;
// 9D5E00: using guessed type int dword_9D5E00;
// 9D5E04: using guessed type int dword_9D5E04;
// 9D5E08: using guessed type int (__fastcall *off_9D5E08)(Char *this);
// 9D5E0C: using guessed type int dword_9D5E0C;
// 9D5E10: using guessed type int dword_9D5E10;
// 9D5E14: using guessed type int dword_9D5E14;
// 9D5E18: using guessed type int (__fastcall *off_9D5E18)(Char *this);
// 9D5E1C: using guessed type int dword_9D5E1C;
// 9D5E20: using guessed type int dword_9D5E20;
// 9D5E24: using guessed type int dword_9D5E24;
// 9D5E28: using guessed type int dword_9D5E28;
// 9D5E2C: using guessed type int dword_9D5E2C;
// 9D5E30: using guessed type int (__fastcall *off_9D5E30)(Char *this);
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE8C: using guessed type const float NI_PI;

//----- (00721D80) --------------------------------------------------------
void __thiscall mhDiceRankWin::mhDiceRankWin(mhDiceRankWin *this)
{
  mhDiceRankWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceRankWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceRankWin::_vftable_;
  *(_DWORD *)&v1->m_CarrerRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_CarrerRankList.baseclass_0._Mylast = 0;
  v1->m_CarrerRankList.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_CurRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_CurRankList.baseclass_0._Mylast = 0;
  v1->m_CurRankList.baseclass_0._Myend = 0;
}
// 9D7158: using guessed type int (__stdcall *mhDiceRankWin___vftable_)(int uiFlags);
// 9D7174: using guessed type int (__thiscall *mhDiceRankWin___vftable_)(void *p, char);

//----- (00721DD0) --------------------------------------------------------
void __thiscall mhDiceRankWin::_mhDiceRankWin(mhDiceRankWin *this)
{
  mhDiceRankWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceRankWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceRankWin::_vftable_;
  if ( *(_DWORD *)&this->m_CurRankList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_CurRankList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_CurRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_CurRankList.baseclass_0._Mylast = 0;
  v1->m_CurRankList.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_CarrerRankList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_CarrerRankList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_CarrerRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_CarrerRankList.baseclass_0._Mylast = 0;
  v1->m_CarrerRankList.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D7158: using guessed type int (__stdcall *mhDiceRankWin___vftable_)(int uiFlags);
// 9D7174: using guessed type int (__thiscall *mhDiceRankWin___vftable_)(void *p, char);

//----- (00721E40) --------------------------------------------------------
mhDiceRankWin *__cdecl mhDiceRankWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  mhDiceRankWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x28Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &mhDiceRankWin::_vftable_;
    *((_DWORD *)v2 + 58) = &mhDiceRankWin::_vftable_;
    *((_DWORD *)v2 + 155) = 0;
    *((_DWORD *)v2 + 156) = 0;
    *((_DWORD *)v2 + 157) = 0;
    *((_DWORD *)v2 + 159) = 0;
    *((_DWORD *)v2 + 160) = 0;
    *((_DWORD *)v2 + 161) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (mhDiceRankWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D7158: using guessed type int (__stdcall *mhDiceRankWin___vftable_)(int uiFlags);
// 9D7174: using guessed type int (__thiscall *mhDiceRankWin___vftable_)(void *p, char);

//----- (00721FA0) --------------------------------------------------------
void __thiscall mhDiceRankWin::UpdateList(mhDiceRankWin *this, std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > RankList)
{
  mhDiceRankWin *v2; // edi@1
  int v3; // esi@1
  int v4; // ebx@1
  signed int v5; // edx@1
  int v6; // eax@1
  unsigned int v7; // edx@2
  MHDiceGameTask *v8; // ecx@7
  MHDiceGameTask *v9; // ebx@8
  int v10; // ebx@17
  SlideListWin *v11; // ecx@17
  unsigned int v12; // eax@17
  signed int v13; // edx@17
  const char *v14; // [sp-1Ch] [bp-DCh]@12
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-BCh]@7
  int *v16; // [sp+8h] [bp-B8h]@3
  int v17; // [sp+Ch] [bp-B4h]@3
  unsigned int i; // [sp+10h] [bp-B0h]@2
  bool v19; // [sp+17h] [bp-A9h]@7
  char szdata[128]; // [sp+18h] [bp-A8h]@1
  char acname[21]; // [sp+98h] [bp-28h]@17
  unsigned int v22; // [sp+B0h] [bp-10h]@1
  int v23; // [sp+BCh] [bp-4h]@1
  int v24; // [sp+C0h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v2 = this;
  v3 = 0;
  v23 = 0;
  szdata[0] = 0;
  memset(&szdata[1], 0, 0x7Fu);
  v4 = *(_DWORD *)&RankList;
  v2->m_iMedalCnt[0] = 0;
  v2->m_iMedalCnt[1] = 0;
  v2->m_iMedalCnt[2] = 0;
  v5 = (signed int)((unsigned __int64)(715827883i64
                                     * (unsigned int)((char *)RankList.baseclass_0._Mylast - *(_DWORD *)&RankList)) >> 32) >> 2;
  v6 = v5 + ((unsigned int)v5 >> 31);
  if ( v6 )
  {
    v7 = *(_DWORD *)(*(_DWORD *)&RankList + 20);
    i = 0;
    if ( (unsigned int)v6 > 0 )
    {
      v17 = 1;
      v16 = v2->m_iMedalCnt;
      while ( 1 )
      {
        if ( *(_DWORD *)(v3 + v4 + 20) < v7 )
        {
          ++v16;
          ++v17;
        }
        v8 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
        LOBYTE(v23) = 1;
        v19 = MHDiceGameTask::IsGambleMode(v8);
        LOBYTE(v23) = 0;
        if ( result.m_pObject )
        {
          v9 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v9 )
              v9->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v9, 1u);
          }
        }
        if ( v19 )
        {
          v14 = "%d%s";
        }
        else
        {
          if ( v17 - 1 < 3 )
          {
            *v16 = i + 1;
            sprintf(szdata, "%s");
            goto LABEL_17;
          }
          v14 = "%d%s";
        }
        sprintf(szdata, v14);
LABEL_17:
        v10 = SlideListWin::AddText(v2->m_pUserList, szdata);
        *(_DWORD *)acname = *(_DWORD *)(v3 + *(_DWORD *)&RankList);
        *(_DWORD *)&acname[4] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 4);
        *(_DWORD *)&acname[8] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 8);
        v11 = v2->m_pUserList;
        *(_DWORD *)&acname[12] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 12);
        *(_DWORD *)&acname[16] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 16);
        acname[20] = 0;
        SlideListWin::SetText(v11, v10, 1u, acname);
        SlideListWin::AlignText(v2->m_pUserList, 1u, 4u);
        sprintf(szdata, "%d");
        SlideListWin::SetText(v2->m_pUserList, v10, 2u, szdata);
        v4 = *(_DWORD *)&RankList;
        v12 = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 20);
        ++i;
        v13 = (signed int)((unsigned __int64)(715827883i64
                                            * (unsigned int)((char *)RankList.baseclass_0._Mylast - *(_DWORD *)&RankList)) >> 32) >> 2;
        v3 += 24;
        if ( i >= v13 + ((unsigned int)v13 >> 31) )
          break;
        v7 = v12;
      }
    }
  }
  SlideListWin::UpdateViewList(v2->m_pUserList);
  if ( *(_DWORD *)&RankList )
    operator delete(*(void **)&RankList);
}
// A85C00: using guessed type int __security_cookie;

//----- (00722220) --------------------------------------------------------
void __thiscall mhDiceRankWin::UpdateViewList(mhDiceRankWin *this)
{
  mhDiceRankWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // zf@2
  int v4; // [sp-14h] [bp-1Ch]@3
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > v5; // [sp-10h] [bp-18h]@2
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *v6; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_pUserList;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    v3 = v1->m_nCurSelTab == 1;
    v6 = &v5;
    if ( v3 )
      v4 = (int)&v1->m_CarrerRankList;
    else
      v4 = (int)&v1->m_CurRankList;
    std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>(
      &v5,
      (std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *)v4);
    mhDiceRankWin::UpdateList(v1, v5);
    SlideBar::SetSplitCnt(v1->m_pkSlideBarEx, 0);
  }
}

//----- (00722280) --------------------------------------------------------
void __thiscall mhDiceRankWin::OnCommand(mhDiceRankWin *this, unsigned int wParam, int lParam)
{
  mhDiceRankWin *v3; // ebx@1
  MHDiceGameTask *v4; // edi@2
  unsigned int v5; // esi@3
  MHDiceGameTask *v6; // edi@10
  MHDiceGameTask *v7; // esi@11
  MHDiceGameTask *v8; // ecx@19
  int v9; // esi@20
  int v10; // [sp+0h] [bp-14h]@19
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@10
  int v12; // [sp+10h] [bp-4h]@19

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      v4 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam)->m_pObject;
      if ( wParam )
      {
        v5 = wParam;
        if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
        {
          if ( v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        }
      }
      if ( v4 && MHDiceGameTask::IsGambleMode(v4) )
        MHDiceGameTask::NcGambleDiceTaisaiAllRankReq(v4);
      else
        mhDiceRankWin::OnTAB1(v3);
      break;
    case 1u:
      v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
      if ( result.m_pObject )
      {
        v7 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v7 )
            v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
        }
      }
      if ( v6 && MHDiceGameTask::IsGambleMode(v6) )
        MHDiceGameTask::NcGambleDiceTaisaiCurrRankReq(v6);
      else
        mhDiceRankWin::OnTAB2(v3);
      break;
    case 2u:
      mhDiceRankWin::OnSlideBar(this);
      break;
    case 4u:
    case 5u:
      v8 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject;
      v12 = 0;
      MHDiceGameTask::OnCloseWin(v8, &v3->baseclass_0.baseclass_0.baseclass_0);
      v12 = -1;
      if ( v10 )
      {
        v9 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
      break;
    default:
      return;
  }
}

//----- (00722440) --------------------------------------------------------
bool __thiscall mhDiceHelpWin::Create(mhDiceHelpWin *this, PgFrameWork *pkFrameWork)
{
  mhDiceHelpWin *v2; // esi@1
  char *v3; // eax@3
  NiNode *v4; // ecx@3
  NiNode *v5; // esi@7
  bool result; // al@10
  NiAVObject *v7; // eax@11
  NiProperty *v8; // edi@11
  NiRefObjectVtbl *v9; // eax@13
  void *v10; // eax@14
  NiNode *v11; // edi@17
  PgSprData *v12; // eax@22
  NiNode *v13; // edi@25
  int v14; // edi@29
  NiSourceTexture *v15; // eax@29
  PgSprData *v16; // eax@32
  PgFont *v17; // eax@34
  PgWinText *v18; // edi@34
  char *v19; // eax@34
  SLWCreateInfo::Item *v20; // eax@34
  PgSprData *v21; // eax@34
  SlideListWin *v22; // eax@34
  char *v23; // eax@35
  char *v24; // eax@35
  char *v25; // eax@35
  char *v26; // eax@35
  char *v27; // eax@35
  char *v28; // eax@35
  char *v29; // eax@35
  char *v30; // eax@35
  char *v31; // eax@35
  char *v32; // eax@35
  void *v33; // eax@35
  NiRefObjectVtbl *v34; // edx@35
  char *v35; // edi@36
  int v36; // eax@38
  int v37; // eax@38
  unsigned int v38; // edi@38
  unsigned int v39; // eax@38
  unsigned int v40; // edi@42
  const void *v41; // eax@44
  SlideListWin *v42; // ecx@46
  PgSprData *v43; // eax@50
  SlideBar *v44; // eax@50
  PgWin *v45; // edi@50
  D3DXCOLOR v46; // ST1C_16@50
  char *v47; // eax@50
  const char *v48; // [sp+8h] [bp-2ACh]@30
  int *v49; // [sp+Ch] [bp-2A8h]@30
  int *v50; // [sp+10h] [bp-2A4h]@30
  NiSourceTexture *v51; // [sp+14h] [bp-2A0h]@30
  unsigned int v52; // [sp+18h] [bp-29Ch]@1
  SLWCreateInfo kCreateInfo; // [sp+28h] [bp-28Ch]@34
  unsigned int found; // [sp+44h] [bp-270h]@38
  unsigned int uiHeight; // [sp+48h] [bp-26Ch]@32
  unsigned int uiWidth; // [sp+4Ch] [bp-268h]@32
  UIUtil ui; // [sp+50h] [bp-264h]@29
  void *pkTestWin; // [sp+64h] [bp-250h]@29
  NiSourceTexture *hDC; // [sp+68h] [bp-24Ch]@14
  NiPointer<NiTexturingProperty> spTexProp; // [sp+6Ch] [bp-248h]@1
  char _Ptr; // [sp+70h] [bp-244h]@35
  int iLen; // [sp+74h] [bp-240h]@1
  int uiTop; // [sp+78h] [bp-23Ch]@22
  void *uiLeft; // [sp+7Ch] [bp-238h]@22
  unsigned int lengthSize; // [sp+80h] [bp-234h]@34
  NiPointer<NiNode> spNode; // [sp+84h] [bp-230h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+88h] [bp-22Ch]@34
  char acStr[256]; // [sp+A4h] [bp-210h]@35
  char buffer[256]; // [sp+1A4h] [bp-110h]@42
  unsigned int v70; // [sp+2A4h] [bp-10h]@1
  int v71; // [sp+2B0h] [bp-4h]@1
  int v72; // [sp+2B4h] [bp+0h]@1

  v70 = (unsigned int)&v72 ^ __security_cookie;
  v52 = (unsigned int)&v72 ^ __security_cookie;
  v2 = this;
  iLen = (int)pkFrameWork;
  spNode.m_pObject = 0;
  v71 = 0;
  spTexProp.m_pObject = (NiTexturingProperty *)dword_B70448;
  if ( !Folder::m_bInit )
    Folder::Init();
  v3 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameHelp.nif");
  PgUtil::LoadNodeNifFile(v3, &spNode, (NiTexturePalette *)spTexProp.m_pObject);
  v4 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\DiceGameHelp.nif load fail", "LoadFail", 0);
      v4 = spNode.m_pObject;
    }
    v71 = -1;
    if ( v4 )
    {
      v5 = v4;
      if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v5 )
          v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
      }
    }
    return 0;
  }
  v2->baseclass_0.m_pkFrameWork = pkFrameWork;
  v7 = (NiAVObject *)((int (__stdcall *)(_DWORD))v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v8 = NiAVObject::GetProperty(v7, 8);
  spTexProp.m_pObject = (NiTexturingProperty *)v8;
  if ( v8 )
    InterlockedIncrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v9 = v8[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v71) = 1;
  if ( !v9 || (v10 = v9[1].__vecDelDtor, (hDC = (NiSourceTexture *)v10) == 0) )
  {
    LOBYTE(v71) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v11 = spNode.m_pObject;
    v71 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v11 )
      v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
    return 0;
  }
  v12 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", (int *)&uiLeft, &uiTop, (NiSourceTexture *)v10);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v12, 0, (PgFrameWork *)iLen, "DiceHelp", 0) )
  {
    LOBYTE(v71) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v8->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v8->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
    v13 = spNode.m_pObject;
    v71 = -1;
    if ( spNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v13 )
    {
      v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
      return 0;
    }
    return 0;
  }
  v14 = (int)uiLeft;
  iLen = uiTop;
  pkTestWin = uiLeft;
  UIUtil::UIUtil(&ui);
  LOBYTE(v71) = 2;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, v14, iLen);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v15 = MenuTexMgr::GetTexture(0x13u);
  if ( v15 )
  {
    v51 = v15;
    v50 = &uiTop;
    v49 = (int *)&uiLeft;
    v48 = "Theme";
  }
  else
  {
    v51 = 0;
    v50 = &uiTop;
    v49 = (int *)&uiLeft;
    v48 = "Theme";
  }
  v16 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v48, v49, v50, v51);
  PgWinSpr::CreateWin((int)((char *)uiLeft - v14), uiTop - iLen, v16, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
  UIUtil::CreateSpr(&ui, "Panel01", 0);
  UIUtil::CreateSpr(&ui, "Panel02", 0);
  if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", (int *)&uiLeft, &uiTop, &uiWidth, &uiHeight) )
  {
    v17 = Font::Get(MAIN_MENU);
    v18 = PgWinText::CreateWin(
            (int)((char *)uiLeft - v14),
            uiTop - iLen,
            uiWidth,
            uiHeight,
            v17,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            0,
            0);
    ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
      v18,
      1,
      v52);
    lengthSize = (unsigned int)&v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[118];
    v19 = TextData2::Get(0x34361593u);
    (*(void (__thiscall **)(PgWinText *, char *))lengthSize)(v18, v19);
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
    *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
    kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
    kCreateInfo.m_bMakeData = 0;
    kCreateInfo.m_nOffX = 0;
    kCreateInfo.m_nOffY = 0;
    LOBYTE(v71) = 3;
    SLWCreateInfo::Clear(&kCreateInfo);
    v20 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
    v20->nItemType = 1;
    v20->pNode = spNode.m_pObject;
    lengthSize = (unsigned int)v20;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &strText,
      "Column01");
    LOBYTE(v71) = 4;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(lengthSize + 72),
      &strText);
    LOBYTE(v71) = 3;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
    lengthSize = (unsigned int)SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
    *(_DWORD *)lengthSize = 2;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
      &strText,
      "Column01");
    LOBYTE(v71) = 5;
    std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
      (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)(lengthSize + 72),
      &strText);
    LOBYTE(v71) = 3;
    std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
    *(_DWORD *)(lengthSize + 4) = spNode.m_pObject;
    SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
    v21 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", (int *)&uiLeft, &uiTop, hDC);
    v22 = SlideListWin::CreateWin(
            uiLeft - pkTestWin + 20,
            uiTop - iLen + 50,
            v21,
            &v2->baseclass_0.baseclass_0.baseclass_0,
            &kCreateInfo,
            0,
            0);
    v2->m_pListWin = v22;
    if ( v22 )
    {
      strText.baseclass_0._Myres = 15;
      strText.baseclass_0._Mysize = 0;
      strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      LOBYTE(v71) = 6;
      v23 = TextData2::Get(0x40311889u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(&strText, v23);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v24 = TextData2::Get(0x47311344u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v24);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v25 = TextData2::Get(0x4B352598u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v25);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v26 = TextData2::Get(0x808782DDu);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v26);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v27 = TextData2::Get(0x3F768289u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v27);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v28 = TextData2::Get(0x3F778289u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v28);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v29 = TextData2::Get(0x3F788289u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v29);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v30 = TextData2::Get(0x3F798289u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v30);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v31 = TextData2::Get(0x3F7A8289u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v31);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
      v32 = TextData2::Get(0x68B3DAA3u);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v32);
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, byte_9D4E30, 0);
      acStr[0] = 0;
      memset(&acStr[1], 0, 0xFFu);
      v33 = SlideListWin::GetTextWin(v2->m_pListWin, 0, 0);
      v34 = v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      pkTestWin = v33;
      hDC = *(NiSourceTexture **)(((int (__thiscall *)(PgWinText *))v34[114].__vecDelDtor)(v18) + 192);
      _Ptr = 10;
      while ( 1 )
      {
        memset(acStr, 0, 0x100u);
        v35 = *(char **)&strText;
        if ( strText.baseclass_0._Myres < 0x10 )
          v35 = (char *)&strText;
        v36 = (*(int (**)(void))(*(_DWORD *)pkTestWin + 144))();
        v37 = PgUtil::StringPixelCopy(acStr, v35, (HDC__ *)hDC, v36);
        v38 = v37;
        iLen = v37;
        v39 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strText, &_Ptr, 0, 1u);
        found = v39;
        if ( !v38 )
          break;
        if ( v39 >= v38 || (lengthSize = v39, v39 == -1) )
          lengthSize = v38;
        buffer[0] = 0;
        memset(&buffer[1], 0, 0xFFu);
        v40 = lengthSize;
        if ( strText.baseclass_0._Mysize < lengthSize )
          v40 = strText.baseclass_0._Mysize;
        v41 = *(const void **)&strText;
        if ( strText.baseclass_0._Myres < 0x10 )
          v41 = &strText;
        memcpy_s(buffer, 0xFFu, v41, v40);
        v42 = v2->m_pListWin;
        buffer[v40] = 0;
        SlideListWin::AddText(v42, buffer);
        SlideListWin::AddText(v2->m_pListWin, &byte_9D418F);
        if ( found > iLen )
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(&strText, 0, lengthSize);
        else
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(&strText, 0, lengthSize + 1);
      }
      v2->m_pListWin->m_bCheckEnable = 0;
      SlideListWin::AlignText(v2->m_pListWin, 4u);
      SlideListWin::UpdateViewList(v2->m_pListWin);
      LOBYTE(v71) = 3;
      std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
    }
    v43 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", (int *)&uiLeft, &uiTop, 0);
    v44 = SlideBar::CreateWin(
            spNode.m_pObject,
            "SlideBar",
            "SlideBar_UpBtn",
            "SlideBar_DnBtn",
            v43,
            0,
            &v2->baseclass_0.baseclass_0.baseclass_0);
    v2->m_pSlideBar = v44;
    v44->m_uiClickMsg = 3;
    v2->m_pSlideBar->m_eType = 1;
    SlideBar::SetSplitCnt(v2->m_pSlideBar, v2->m_pListWin->m_nSlideSplitCnt);
    UIUtil::CreateBtn(&ui, 1u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
    v45 = (PgWin *)UIUtil::CreateBtn(&ui, 2u, "Btn02Nor", "Btn02Click", "Btn02Over", 0, 0);
    *(_QWORD *)&v46.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v46.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v47 = TextData2::Get(0xE2ED9AD6u);
    UIUtil::CreateAttachedText(&ui, v45, v47, COERCE_D3DXCOLOR(v46.r), 5u);
    ((void (__thiscall *)(mhDiceHelpWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.1);
    LOBYTE(v71) = 2;
    SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
    LOBYTE(v71) = 1;
    UIUtil::_UIUtil(&ui);
    LOBYTE(v71) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v71 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 1;
  }
  else
  {
    LOBYTE(v71) = 1;
    UIUtil::_UIUtil(&ui);
    LOBYTE(v71) = 0;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
    v71 = -1;
    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00722E90) --------------------------------------------------------
bool __thiscall mhDiceRankWin::Create(mhDiceRankWin *this, PgFrameWork *pkFrameWork)
{
  mhDiceRankWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // ecx@3
  NiNode *v6; // esi@7
  bool result; // al@10
  NiAVObject *v8; // eax@11
  NiProperty *v9; // eax@11
  NiProperty *v10; // edi@11
  NiRefObjectVtbl *v11; // eax@13
  NiSourceTexture *v12; // eax@14
  NiNode *v13; // esi@17
  PgSprData *v14; // eax@21
  NiNode *v15; // esi@24
  int v16; // edi@28
  int v17; // ebx@28
  NiSourceTexture *v18; // eax@28
  PgSprData *v19; // eax@31
  PgFont *v20; // eax@32
  PgWinText *v21; // eax@32
  NiRefObjectVtbl *v22; // edx@32
  char *v23; // eax@32
  D3DXCOLOR v24; // ST60_16@32
  char *v25; // eax@32
  SLWCreateInfo::Item *v26; // eax@32
  PgSprData *v27; // eax@32
  SlideListWin *v28; // eax@32
  PgSprData *v29; // eax@32
  SlideBar *v30; // eax@32
  void *v31; // ecx@32
  void *(__thiscall *v32)(NiRefObject *, unsigned int); // edx@32
  int v33; // eax@32
  int v34; // eax@32
  int v35; // ecx@32
  void *v36; // eax@32
  PgFont *v37; // eax@32
  char *v38; // eax@32
  int v39; // ecx@32
  void *v40; // eax@32
  PgFont *v41; // eax@32
  char *v42; // eax@32
  PgFont *v43; // eax@35
  char *v44; // eax@35
  PgFont *v45; // eax@36
  char *v46; // eax@36
  PgFont *v47; // eax@37
  PgWinText *v48; // edi@37
  NiRefObjectVtbl *v49; // ebx@37
  char *v50; // eax@37
  int v51; // edi@37
  signed int v52; // ebx@37
  PgSprData *v53; // ST174_4@38
  PgWinSpr *v54; // eax@38
  PgWinSpr *v55; // eax@38
  PgWinSpr *v56; // eax@38
  const char *v57; // [sp+64h] [bp-194h]@29
  int *v58; // [sp+68h] [bp-190h]@29
  int *v59; // [sp+6Ch] [bp-18Ch]@29
  NiSourceTexture *v60; // [sp+70h] [bp-188h]@29
  unsigned int v61; // [sp+74h] [bp-184h]@1
  int v62; // [sp+74h] [bp-184h]@32
  SLWCreateInfo kCreateInfo; // [sp+178h] [bp-80h]@32
  UIUtil ui; // [sp+194h] [bp-64h]@28
  NiPointer<NiTexturingProperty> spTexProp; // [sp+1A8h] [bp-50h]@11
  NiSourceTexture *pkTexture; // [sp+1ACh] [bp-4Ch]@14
  unsigned int uiWidth; // [sp+1B0h] [bp-48h]@31
  unsigned int uiHeight; // [sp+1B4h] [bp-44h]@31
  PgWin *pkBtn; // [sp+1B8h] [bp-40h]@32
  int uiTop; // [sp+1BCh] [bp-3Ch]@21
  int uiLeft; // [sp+1C0h] [bp-38h]@21
  NiPointer<NiNode> spNode; // [sp+1C4h] [bp-34h]@1
  void *pkTextWin; // [sp+1C8h] [bp-30h]@32
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+1CCh] [bp-2Ch]@32
  unsigned int v75; // [sp+1E8h] [bp-10h]@1
  int v76; // [sp+1F4h] [bp-4h]@1
  int v77; // [sp+1F8h] [bp+0h]@1

  v75 = (unsigned int)&v77 ^ __security_cookie;
  v61 = (unsigned int)&v77 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v76 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameHallOfFame.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\DiceGameHallOfFame.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v76 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v2->baseclass_0.m_pkFrameWork = pkFrameWork;
  v8 = (NiAVObject *)((int (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v9 = NiAVObject::GetProperty(v8, 8);
  v10 = v9;
  spTexProp.m_pObject = (NiTexturingProperty *)v9;
  if ( v9 )
    InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v11 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v76) = 1;
  if ( v11 && (v12 = (NiSourceTexture *)v11[1].__vecDelDtor, (pkTexture = v12) != 0) )
  {
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v12);
    if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v14, 0, pkFrameWork, "DiceRank", 0) )
    {
      v16 = uiLeft;
      v17 = uiTop;
      UIUtil::UIUtil(&ui);
      LOBYTE(v76) = 2;
      UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, v16, v17);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      v18 = MenuTexMgr::GetTexture(0x13u);
      if ( v18 )
      {
        v60 = v18;
        v59 = &uiTop;
        v58 = &uiLeft;
        v57 = "Theme";
      }
      else
      {
        v60 = 0;
        v59 = &uiTop;
        v58 = &uiLeft;
        v57 = "Theme";
      }
      v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v57, v58, v59, v60);
      PgWinSpr::CreateWin(uiLeft - v16, uiTop - v17, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      UIUtil::CreateSpr(&ui, "Panel01", 0);
      UIUtil::CreateSpr(&ui, "Panel02", 0);
      UIUtil::CreateSpr(&ui, "Panel03", 0);
      UIUtil::CreateSpr(&ui, "Plane01", 0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        v20 = Font::Get(MAIN_MENU);
        v21 = PgWinText::CreateWin(
                uiLeft - v16,
                uiTop - v17,
                uiWidth,
                uiHeight,
                v20,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
        v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkTextWin = v21;
        v22[122].__vecDelDtor((NiRefObject *)v21, 1u);
        pkBtn = (PgWin *)(*(_DWORD *)pkTextWin + 472);
        v23 = TextData2::Get(0x38956697u);
        ((void (__thiscall *)(void *, char *))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
          pkTextWin,
          v23);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
        pkBtn = (PgWin *)UIUtil::CreateBtn(&ui, 5u, "Btn01Nor", "Btn01Click", "Btn01Over", 0, 0);
        *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
        *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
        v25 = TextData::Get(0x4F5F499Fu);
        UIUtil::CreateAttachedText(&ui, pkBtn, v25, COERCE_D3DXCOLOR(v24.r), 5u);
        UIUtil::CreateBtn(&ui, 4u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
        *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
        kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
        kCreateInfo.m_bMakeData = 0;
        kCreateInfo.m_nOffX = 0;
        kCreateInfo.m_nOffY = 0;
        LOBYTE(v76) = 3;
        v26 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
        v26->nItemType = 1;
        v26->pNode = spNode.m_pObject;
        pkTextWin = v26;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "ColumnBarNor");
        LOBYTE(v76) = 4;
        pkBtn = (PgWin *)((char *)pkTextWin + 72);
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v76) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "ColumnBarOver");
        LOBYTE(v76) = 5;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkBtn,
          &thisa);
        LOBYTE(v76) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
        *(_DWORD *)pkTextWin = 2;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "Column01");
        LOBYTE(v76) = 6;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v76) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
        pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
        *(_DWORD *)pkTextWin = 2;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "Column02");
        LOBYTE(v76) = 7;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v76) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
        pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
        *(_DWORD *)pkTextWin = 2;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "Column03");
        LOBYTE(v76) = 8;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v76) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
        kCreateInfo.m_nOffX = 3;
        kCreateInfo.m_nOffY = 0;
        SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
        v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, pkTexture);
        v28 = SlideListWin::CreateWin(
                uiLeft - v16,
                uiTop - v17,
                v27,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                &kCreateInfo,
                0,
                0);
        v2->m_pUserList = v28;
        v28->m_uiLClickMsg = 3;
        SlideListWin::AlignText(v2->m_pUserList, 0);
        SlideListWin::UpdateViewList(v2->m_pUserList);
        v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
        v30 = SlideBar::CreateWin(
                spNode.m_pObject,
                "SlideBar",
                "SlideBar_UpBtn",
                "SlideBar_DnBtn",
                v29,
                0,
                &v2->baseclass_0.baseclass_0.baseclass_0);
        v2->m_pkSlideBarEx = v30;
        v30->m_uiClickMsg = 2;
        v2->m_pkSlideBarEx->m_eType = 1;
        v31 = v2->m_pkSlideBarEx;
        v32 = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
        pkTextWin = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkBtn = (PgWin *)v31;
        v33 = ((int (__cdecl *)(unsigned int))v32)(v61);
        v34 = ((int (__stdcall *)(int))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v33);
        (*(void (__thiscall **)(SlideBar *, int))((void (__thiscall **)(_DWORD, _DWORD))pkTextWin + 77))(
          v2->m_pkSlideBarEx,
          v34);
        SlideBar::SetSplitCnt(v2->m_pkSlideBarEx, v2->m_pUserList->m_nSlideSplitCnt);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "JobTabOff01", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "JobTabOn01");
        v2->m_pkTab01 = ColumnBut::CreateWin(
                          uiLeft - v16,
                          uiTop - v17,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0);
        v35 = *((_DWORD *)pkTextWin + 9);
        v36 = *(void **)(*(_DWORD *)v35 + 20);
        pkBtn = *(PgWin **)(*(_DWORD *)v35 + 24);
        pkTextWin = v36;
        v37 = Font::Get(MAIN_MENU);
        pkTextWin = PgWinText::CreateWin(
                      uiLeft - v16,
                      uiTop - v17 + 1,
                      (unsigned int)pkTextWin,
                      (unsigned int)pkBtn,
                      v37,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
        (*(void (__thiscall **)(void *, signed int))(*(_DWORD *)pkTextWin + 488))(pkTextWin, 5);
        pkBtn = (PgWin *)(*(_DWORD *)pkTextWin + 472);
        v38 = TextData2::Get(0xAA906580u);
        ((void (__thiscall *)(void *, char *))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
          pkTextWin,
          v38);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "JobTabOff02", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "JobTabOn02");
        v2->m_pkTab02 = ColumnBut::CreateWin(
                          uiLeft - v16,
                          uiTop - v17,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          1u,
                          0);
        v39 = *((_DWORD *)pkTextWin + 9);
        v40 = *(void **)(*(_DWORD *)v39 + 20);
        pkBtn = *(PgWin **)(*(_DWORD *)v39 + 24);
        pkTextWin = v40;
        v41 = Font::Get(MAIN_MENU);
        pkTextWin = PgWinText::CreateWin(
                      uiLeft - v16,
                      uiTop - v17 + 1,
                      (unsigned int)pkTextWin,
                      (unsigned int)pkBtn,
                      v41,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
        (*(void (__thiscall **)(void *, signed int))(*(_DWORD *)pkTextWin + 488))(pkTextWin, 5);
        pkBtn = (PgWin *)(*(_DWORD *)pkTextWin + 472);
        v42 = TextData2::Get(0x41382D9Eu);
        ((void (__thiscall *)(_DWORD, _DWORD))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
          pkTextWin,
          v42);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
        if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
        {
          v43 = Font::Get(SMALL);
          pkTextWin = PgWinText::CreateWin(
                        uiLeft - v16,
                        uiTop - v17,
                        uiWidth,
                        uiHeight,
                        v43,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
          pkBtn = (PgWin *)(*(_DWORD *)pkTextWin + 472);
          v44 = TextData::Get(0x91B1F3EDu);
          ((void (__thiscall *)(_DWORD, _DWORD))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
            pkTextWin,
            v44);
          (*(void (__stdcall **)(signed int))(*(_DWORD *)pkTextWin + 488))(5);
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
          if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
          {
            v45 = Font::Get(SMALL);
            pkTextWin = PgWinText::CreateWin(
                          uiLeft - v16,
                          uiTop - v17,
                          uiWidth,
                          uiHeight,
                          v45,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0);
            pkBtn = (PgWin *)(*(_DWORD *)pkTextWin + 472);
            v46 = TextData::Get(0x1F4282A9u);
            ((void (__thiscall *)(_DWORD, _DWORD))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr)(
              pkTextWin,
              v46);
            (*(void (__stdcall **)(signed int))(*(_DWORD *)pkTextWin + 488))(5);
            (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
            if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
            {
              v47 = Font::Get(SMALL);
              v48 = PgWinText::CreateWin(
                      uiLeft - v16,
                      uiTop - v17,
                      uiWidth,
                      uiHeight,
                      v47,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
              v49 = v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v50 = TextData2::Get(0xF7402742u);
              ((void (__thiscall *)(PgWinText *, char *, int))v49[118].__vecDelDtor)(v48, v50, v62);
              v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor(
                (NiRefObject *)v48,
                5u);
              v48->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                (NiRefObject *)v48,
                0);
              v51 = (int)v2->m_pkSprRankSilver;
              v52 = 0;
              do
              {
                pkBtn = (PgWin *)PgSprData::Create(
                                   &spNode.m_pObject->baseclass_0,
                                   "Rank_Gold",
                                   &uiLeft,
                                   &uiTop,
                                   pkTexture);
                pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Rank_Silver", &uiLeft, &uiTop, pkTexture);
                v53 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Rank_Bronze", &uiLeft, &uiTop, pkTexture);
                v54 = PgWinSpr::CreateWin(0, 0, (PgSprData *)pkBtn, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
                *(_DWORD *)(v51 - 80) = v54;
                v54->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                  (NiRefObject *)v54,
                  0);
                (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v51 - 80) + 256))(0);
                v55 = PgWinSpr::CreateWin(0, 0, (PgSprData *)pkTextWin, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
                *(_DWORD *)v51 = v55;
                v55->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                  (NiRefObject *)v55,
                  0);
                (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v51 + 256))(0);
                v56 = PgWinSpr::CreateWin(0, 0, v53, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
                *(_DWORD *)(v51 + 80) = v56;
                v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
                  (NiRefObject *)v56,
                  0);
                (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v51 + 80) + 256))(0);
                v52 += 4;
                v51 += 4;
              }
              while ( v52 < 80 );
              ((void (__thiscall *)(mhDiceRankWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
                v2,
                PgWin::ms_uiScreenWidth,
                PgWin::ms_uiScreenHeight,
                0.40000001);
              v2->m_pkTab01->m_bCheck = 1;
              v2->m_pkTab02->m_bCheck = 0;
              v2->m_nCurSelTab = 1;
              LOBYTE(v76) = 2;
              SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
              LOBYTE(v76) = 1;
              UIUtil::_UIUtil(&ui);
              LOBYTE(v76) = 0;
              NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
              v76 = -1;
              NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
              return 1;
            }
          }
        }
        LOBYTE(v76) = 2;
        SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      }
      LOBYTE(v76) = 1;
      UIUtil::_UIUtil(&ui);
      LOBYTE(v76) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v76 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      return 0;
    }
    LOBYTE(v76) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v15 = spNode.m_pObject;
    v76 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v15 )
      return 0;
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    result = 0;
  }
  else
  {
    LOBYTE(v76) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v13 = spNode.m_pObject;
    v76 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00723A30) --------------------------------------------------------
void __thiscall MHDiceAniActor::MHDiceAniActor(MHDiceAniActor *this)
{
  this->baseclass_0.vfptr = (mhObjActorVtbl *)&MHDiceAniActor::_vftable_;
  this->m_uiAniSeqID = 999;
}
// 9D6A48: using guessed type int (__thiscall *MHDiceAniActor___vftable_)(void *p, char);

//----- (00723A50) --------------------------------------------------------
void __thiscall MHChipEffect::_MHChipEffect(MHChipEffect *this)
{
  MHChipEffect *v1; // esi@1
  NiNode *v2; // edi@1
  NiNode *v3; // esi@6

  v1 = this;
  v2 = this->m_spEffect.m_pObject;
  if ( this->m_spEffect.m_pObject )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v2, 1u);
    v1->m_spEffect.m_pObject = 0;
  }
  NsEffect::_NsEffect(&v1->m_kEffect);
  ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)&v1->m_kMarkCheck);
  v3 = v1->m_spEffect.m_pObject;
  if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v3 )
      v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  }
}

//----- (00723B00) --------------------------------------------------------
void __thiscall mhDiceRankWin::OnSlideBar(mhDiceRankWin *this)
{
  mhDiceRankWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pUserList;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarEx;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
      v1->m_pUserList->m_nViewStartPos = v1->m_pkSlideBarEx->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pUserList);
    }
  }
}

//----- (00723B50) --------------------------------------------------------
void *__thiscall BettingBut::_vector_deleting_destructor_(BettingBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&BettingBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&BettingBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D5ED8: using guessed type int (__stdcall *BettingBut___vftable_)(int uiFlags);
// 9D5EF4: using guessed type int (__thiscall *BettingBut___vftable_)(void *p, char);

//----- (00723B90) --------------------------------------------------------
void *__thiscall ToggleBut::_scalar_deleting_destructor_(ToggleBut *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&ToggleBut::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&ToggleBut::_vftable_;
  PgWinBut::_PgWinBut(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D6130: using guessed type int (__stdcall *ToggleBut___vftable_)(int uiFlags);
// 9D614C: using guessed type int (__thiscall *ToggleBut___vftable_)(void *p, char);

//----- (00723BD0) --------------------------------------------------------
void *__thiscall mhMinimizeDiceGameWin::_vector_deleting_destructor_(mhMinimizeDiceGameWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhMinimizeDiceGameWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhMinimizeDiceGameWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D6384: using guessed type int (__stdcall *mhMinimizeDiceGameWin___vftable_)(int uiFlags);
// 9D63A4: using guessed type int (__thiscall *mhMinimizeDiceGameWin___vftable_)(void *p, char);

//----- (00723C10) --------------------------------------------------------
void *__thiscall mhDiceHelpWin::_vector_deleting_destructor_(mhDiceHelpWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceHelpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceHelpWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D65C8: using guessed type int (__stdcall *mhDiceHelpWin___vftable_)(int uiFlags);
// 9D65E4: using guessed type int (__thiscall *mhDiceHelpWin___vftable_)(void *p, char);

//----- (00723C50) --------------------------------------------------------
void *__thiscall mhDiceRateSheetWin::_vector_deleting_destructor_(mhDiceRateSheetWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&mhDiceRateSheetWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&mhDiceRateSheetWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D6808: using guessed type int (__stdcall *mhDiceRateSheetWin___vftable_)(int uiFlags);
// 9D6824: using guessed type int (__thiscall *mhDiceRateSheetWin___vftable_)(void *p, char);

//----- (00723C90) --------------------------------------------------------
void __thiscall BettingBut::DoRAction(BettingBut *this)
{
  BettingBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, v1->baseclass_0.m_uiCmdMsg, 0);
}

//----- (00723CB0) --------------------------------------------------------
void __thiscall ToggleBut::DoAction(ToggleBut *this)
{
  ToggleBut *v1; // esi@1
  PgWin *v2; // eax@1

  v1 = this;
  v2 = PgWin::GetParentWin(&this->baseclass_0.baseclass_0.baseclass_0);
  if ( v2 )
    PgWin::PostCommandMsg(&v1->baseclass_0.baseclass_0.baseclass_0, v2, v1->baseclass_0.m_uiCmdMsg, 1);
}

//----- (00723CD0) --------------------------------------------------------
void __thiscall BettingBut::SetButShow(BettingBut *this, PgWinBut::ButShow eShow)
{
  BettingBut *v2; // esi@1
  BET_STATE v3; // eax@1
  PgWinBut::ButShow v4; // edi@4
  bool v5; // zf@5
  PgSpr *v6; // eax@6
  NiScreenElements *v7; // eax@7
  BET_STATE v8; // eax@9
  int v9; // eax@10
  int v10; // eax@11
  NiScreenElements *v11; // eax@15
  PgSpr *v12; // eax@17
  NiScreenElements *v13; // eax@18
  NiScreenElements *v14; // eax@21
  PgSpr *v15; // eax@23
  NiScreenElements *v16; // eax@24
  PgSpr *v17; // eax@26
  NiScreenElements *v18; // eax@27
  void *(__thiscall *v19)(NiRefObject *, unsigned int); // eax@30
  BettingBut *v20; // ecx@30
  NiPointer<HazeAccumulator> thisa; // [sp+34h] [bp-4h]@22

  v2 = this;
  v3 = this->m_eBetState;
  if ( v3 != 2 )
  {
    if ( v3 != 3 )
    {
      if ( v3 != 4 )
      {
        v4 = eShow;
        if ( this->baseclass_0.m_eButShow != eShow )
        {
          ((void (__stdcall *)(_DWORD))this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[139].__vecDelDtor)(eShow);
          v5 = v2->m_bHighlight == 0;
          v2->baseclass_0.m_eButShow = v4;
          if ( v5 )
          {
            v6 = v2->baseclass_0.baseclass_0.m_spSpr.m_pObject;
            if ( v6->m_akGeom.m_uiSize > 3 )
            {
              v7 = v6->m_akGeom.m_pBase[3].m_pObject;
              if ( v7 )
              {
                ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
                  v2,
                  &eShow,
                  v7);
                NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&eShow);
              }
            }
          }
          v8 = v2->m_eBetState;
          if ( v8 )
          {
            v9 = v8 - 1;
            if ( v9 )
            {
              v10 = v9 - 1;
              if ( v10 )
              {
                if ( v10 == 1 )
                {
                  if ( v2->baseclass_0.m_uiButNum > 3 )
                  {
                    v11 = PgSpr::GetGeometry(
                            v2->baseclass_0.baseclass_0.m_spSpr.m_pObject,
                            v2->baseclass_0.baseclass_0.m_uiSelectSprIndex);
                    if ( v11 )
                    {
                      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
                        v2,
                        &eShow,
                        v11);
                      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&eShow);
                    }
                    v12 = v2->baseclass_0.baseclass_0.m_spSpr.m_pObject;
                    if ( v12->m_akGeom.m_uiSize > 2 )
                    {
                      v13 = v12->m_akGeom.m_pBase[2].m_pObject;
                      if ( v13 )
                      {
                        ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
                          v2,
                          v13,
                          1);
                        NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
                        NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
                      }
                    }
                  }
                  else
                  {
                    v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
                      (NiRefObject *)v2,
                      0);
                  }
                }
              }
              else
              {
                if ( v2->baseclass_0.m_uiButNum <= 3 )
                {
LABEL_33:
                  v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
                    (NiRefObject *)v2,
                    0);
                }
                else
                {
                  v14 = PgSpr::GetGeometry(
                          v2->baseclass_0.baseclass_0.m_spSpr.m_pObject,
                          v2->baseclass_0.baseclass_0.m_uiSelectSprIndex);
                  if ( v14 )
                  {
                    ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[30].__vecDelDtor)(
                      v2,
                      &thisa,
                      v14);
                    NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>(&thisa);
                  }
                  v15 = v2->baseclass_0.baseclass_0.m_spSpr.m_pObject;
                  if ( v15->m_akGeom.m_uiSize > 1 )
                  {
                    v16 = v15->m_akGeom.m_pBase[1].m_pObject;
                    if ( v16 )
                    {
                      ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
                        v2,
                        v16,
                        1);
                      if ( v2->m_bHighlight == 1 )
                      {
                        v17 = v2->baseclass_0.baseclass_0.m_spSpr.m_pObject;
                        if ( v17->m_akGeom.m_uiSize > 3 )
                        {
                          v18 = v17->m_akGeom.m_pBase[3].m_pObject;
                          if ( v18 )
                            ((void (__thiscall *)(_DWORD, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[29].__vecDelDtor)(
                              v2,
                              v18,
                              1);
                        }
                      }
                      NiAVObject::Update(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0, 0.0, 0);
                      NiAVObject::UpdateProperties(&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0);
                    }
                  }
                }
              }
            }
            else
            {
              v19 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
              v20 = v2;
              if ( v2->baseclass_0.m_uiButNum >= 4 )
LABEL_35:
                v19(
                  &v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                  1u);
              else
                v19(
                  &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                  0);
            }
          }
          else
          {
            switch ( v4 )
            {
              case 0:
              case 1:
                goto LABEL_33;
              case 2:
                v19 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
                v20 = v2;
                if ( v2->baseclass_0.m_uiButNum > 2 )
                  goto LABEL_35;
                goto LABEL_37;
              case 3:
                v19 = v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor;
                v20 = v2;
                if ( v2->baseclass_0.m_uiButNum > 3 )
                  v19(
                    &v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                    2u);
                else
LABEL_37:
                  v19(
                    &v20->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0,
                    0);
                break;
              default:
                v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor(
                  (NiRefObject *)v2,
                  0);
                v2->baseclass_0.m_eButShow = 0;
                break;
            }
          }
        }
      }
    }
  }
}

//----- (00723F70) --------------------------------------------------------
void *__thiscall MHDiceRewardMoneyWin::_vector_deleting_destructor_(MHDiceRewardMoneyWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MHDiceRewardMoneyWin::_MHDiceRewardMoneyWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00723FA0) --------------------------------------------------------
void *__thiscall MiniHouseDiceGameWin::_vector_deleting_destructor_(MiniHouseDiceGameWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  MiniHouseDiceGameWin::_MiniHouseDiceGameWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00723FD0) --------------------------------------------------------
void *__thiscall GambleDiceGameWin::_scalar_deleting_destructor_(GambleDiceGameWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GambleDiceGameWin::_GambleDiceGameWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (00724000) --------------------------------------------------------
DiceRankInfo *__cdecl std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo_std::allocator<DiceRankInfo>>>_DiceRankInfo___std::allocator<DiceRankInfo>>(std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > _First, std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > _Last, DiceRankInfo *_Dest, std::allocator<DiceRankInfo> *_Al, std::_Nonscalar_ptr_iterator_tag __formal)
{
  std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > v5; // ecx@1
  DiceRankInfo *result; // eax@1

  v5 = _First;
  for ( result = _Dest; v5 != _Last; ++result )
  {
    if ( result )
    {
      *(_DWORD *)&result->sCharID.n5_name[0] = **(_DWORD **)&v5;
      *(_DWORD *)&result->sCharID.n5_name[4] = *(_DWORD *)(*(_DWORD *)&v5 + 4);
      *(_DWORD *)&result->sCharID.n5_name[8] = *(_DWORD *)(*(_DWORD *)&v5 + 8);
      *(_DWORD *)&result->sCharID.n5_name[12] = *(_DWORD *)(*(_DWORD *)&v5 + 12);
      *(_DWORD *)&result->sCharID.n5_name[16] = *(_DWORD *)(*(_DWORD *)&v5 + 16);
      result->nWinCnt = *(_DWORD *)(*(_DWORD *)&v5 + 20);
    }
    *(_DWORD *)&v5 += 24;
  }
  return result;
}

//----- (00724050) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl std::operator_<char_std::char_traits<char>_std::allocator<char>>(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Left, const char *_Right)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // eax@1

  v3 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(_Left, _Right, strlen(_Right));
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(result, v3);
  return result;
}

//----- (007240A0) --------------------------------------------------------
void *__thiscall mhDiceRankWin::_vector_deleting_destructor_(mhDiceRankWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  mhDiceRankWin::_mhDiceRankWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (007240D0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleSlotmachineGameLeaveReq(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  SlotMachineWin *v2; // ecx@1
  PROTO_NC_GAMBLE_SLOTMACHINE_GAME_LEAVE_REQ kProto; // [sp+7h] [bp-1h]@4

  v1 = this;
  v2 = this->m_pkSlotMachineWin;
  if ( !v2 || SlotMachineWin::canExit(v2) )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xCAu, &kProto, 1);
  else
    v1->m_bLeaveReserve = v1->m_bLeaveReserve == 0;
}

//----- (00724120) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleSlotmachineStartReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_START_REQ *pkProto)
{
  if ( pkProto )
    NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xCCu, pkProto, 4);
}

//----- (00724150) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleSlotmachineStopbuttonReq(MHDiceGameTask *this)
{
  PROTO_NC_GAMBLE_SLOTMACHINE_STOPBUTTON_REQ kProto; // [sp+1h] [bp-1h]@1

  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xCEu, &kProto, 1);
}

//----- (00724170) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleSlotmachineWheelstopReq(MHDiceGameTask *this)
{
  PROTO_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_REQ kProto; // [sp+1h] [bp-1h]@1

  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xD0u, &kProto, 1);
}

//----- (00724190) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_START_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_START_ACK *pkProto)
{
  SlotMachineWin *v2; // ecx@1

  v2 = this->m_pkSlotMachineWin;
  if ( pkProto->nError == 10447 )
  {
    if ( v2 )
    {
      SlotMachineWin::Spin(v2, 1);
      return 1;
    }
  }
  else
  {
    if ( v2 )
      SlotMachineWin::Spin(v2, 0);
  }
  return 1;
}

//----- (007241D0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_STOPBUTTON_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_STOPBUTTON_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  signed int v3; // edx@2
  int *v4; // eax@2
  char *v5; // ecx@2
  SlotMachineWin *v6; // ecx@4
  int result[9]; // [sp+4h] [bp-28h]@2
  unsigned int v9; // [sp+28h] [bp-4h]@1
  int v10; // [sp+2Ch] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  if ( pkProto->nError == 10450 )
  {
    v3 = 2;
    v4 = &result[1];
    v5 = &pkProto->screen.Card[2][1];
    do
    {
      *(v4 - 1) = (unsigned __int8)*(v5 - 1);
      *v4 = (unsigned __int8)*v5;
      v4[1] = (unsigned __int8)v5[1];
      v4 += 3;
      v5 -= 3;
      --v3;
    }
    while ( v3 >= 0 );
    v6 = v2->m_pkSlotMachineWin;
    if ( v6 )
      SlotMachineWin::Stop(v6, result);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00724250) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK *pkProto)
{
  SlotMachineWin *v2; // ecx@2

  if ( pkProto->nError == 10452 )
  {
    v2 = this->m_pkSlotMachineWin;
    if ( v2 )
      SlotMachineWin::WheelStop(v2, pkProto);
  }
  return 1;
}

//----- (00724280) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_STAND_UP_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_STAND_UP_CMD *pkProto)
{
  return 1;
}

//----- (00724290) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD *pkProto)
{
  SlotMachineWin *v2; // ecx@2

  if ( pkProto )
  {
    v2 = this->m_pkSlotMachineWin;
    if ( v2 )
      SlotMachineWin::SetJackPotCoin(v2, pkProto);
  }
  return 1;
}

//----- (007242C0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleSlotmachineJackpotRankReq(MHDiceGameTask *this)
{
  PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_REQ kProto; // [sp+1h] [bp-1h]@1

  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xD9u, &kProto, 1);
}

//----- (007242E0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleSlotmachineWinRankReq(MHDiceGameTask *this)
{
  PROTO_NC_GAMBLE_SLOTMACHINE_WINRANKING_REQ kProto; // [sp+1h] [bp-1h]@1

  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xDBu, &kProto, 1);
}

//----- (00724300) --------------------------------------------------------
void __thiscall MHDiceGameTask::UpdateSlotMachineGame(MHDiceGameTask *this, float fTime)
{
  MHDiceGameTask *v2; // esi@1

  v2 = this;
  if ( this->m_eDiceGameMode == 4 )
  {
    if ( !(unsigned __int8)((int (*)(void))this->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      ((void (__stdcall *)(_DWORD))v2->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[81].__vecDelDtor)(LODWORD(fTime));
  }
}

//----- (00724340) --------------------------------------------------------
void __thiscall MHDiceGameTask::OpenSlotMachineWin(MHDiceGameTask *this)
{
  PgFrameWork *v1; // eax@1

  v1 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v1 )
    GameFrameWork::OpenSlotMachineWin((GameFrameWork *)v1);
}

//----- (00724360) --------------------------------------------------------
void __thiscall MHDiceGameTask::OpenSlotHelpWin(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1

  v1 = this;
  if ( this->m_pkGBSlotHelpWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkGBSlotHelpWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v1->m_pkGBSlotHelpWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v1->m_pkGBSlotHelpWin->baseclass_0.baseclass_0.baseclass_0);
  }
}

//----- (007243B0) --------------------------------------------------------
void __thiscall MHDiceGameTask::NcGambleSlotmachineGameJoinReq(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_REQ *pkProto)
{
  Char *v2; // eax@1
  NiPoint3 *v3; // eax@2
  float v4; // ecx@2
  double v5; // st7@5
  double v6; // st6@7
  char v7; // al@9
  NiPoint3 result; // [sp+8h] [bp-54h]@2
  NiPoint3 kDir; // [sp+14h] [bp-48h]@9
  NiPoint3 kPos; // [sp+20h] [bp-3Ch]@2
  float v11; // [sp+2Ch] [bp-30h]@9
  float value; // [sp+30h] [bp-2Ch]@2
  NiMatrix3 thisa; // [sp+34h] [bp-28h]@9
  unsigned int v14; // [sp+58h] [bp-4h]@1
  int v15; // [sp+5Ch] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v2 = CharMgr::GetChar(&g_kCharMgr, pkProto->nNpcHandle);
  if ( v2 )
  {
    v3 = Char::GetDirToChar(g_pkMainChar, &result, v2);
    v4 = v3->y;
    kPos.x = v3->x;
    kPos.y = v4;
    kPos.z = 0.0;
    NiPoint3::Unitize(&kPos);
    value = kPos.x * 0.0 + kPos.y + kPos.z * 0.0;
    kPos.z = kPos.y * 0.0 - kPos.x;
    if ( value <= -1.0 )
    {
      v5 = NI_PI;
    }
    else
    {
      if ( value < 1.0 )
        JUMPOUT(*(int *)loc_72444D);
      v5 = 0.0;
    }
    value = v5;
    value = value * 57.2957763671875;
    v6 = value * 0.5;
    if ( kPos.z > 0.0 )
      v6 = 180.0 - v6;
    value = v6;
    v7 = (signed int)value;
    pkProto->nDirect = v7;
    v11 = (NI_PI + NI_PI) * (double)(unsigned __int8)v7 / 180.0;
    NiMatrix3::MakeZRotation(&thisa, v11);
    NiMatrix3::operator_(&thisa, &kDir, &World::ms_kNorthDir);
    ((void (__stdcall *)(NiPoint3 *))g_pkMainChar->baseclass_0.vfptr[6].Affect)(&kDir);
  }
  NetMgr::SendNetMsgZoneMgr(&g_kNetMgr, 0x2Fu, 0xC8u, pkProto, 4);
}
// 72444D: using guessed type int __stdcall(int pkProto);
// A85C00: using guessed type int __security_cookie;
// B6DE8C: using guessed type const float NI_PI;

//----- (00724530) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_GAME_JOIN_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  int result; // eax@1
  int v4; // edi@1
  unsigned __int64 v5; // qax@4
  SlotMachineWin *v6; // ecx@4
  __int64 v7; // qax@5

  v2 = this;
  result = (int)PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v4 = result;
  if ( result )
  {
    if ( pkProto->nError == 10432 )
    {
      v5 = User::Coin(&g_kUser);
      v2->m_fAlphaValueOfDiceWindow = 0.0;
      v2->m_nInvenRemainMoney = v5;
      v2->m_pkSlotMachineWin = *(SlotMachineWin **)(v4 + 832);
      v2->m_pkGBSlotRankWin = *(GBSlotRankWin **)(v4 + 836);
      v2->m_pkGBSlotHelpWin = *(GBSlotHelpWin **)(v4 + 840);
      v6 = v2->m_pkSlotMachineWin;
      v2->m_pkMiniSlotMachineWin = *(MiniSlotMachineWin **)(v4 + 844);
      if ( v6 )
      {
        ((void (__stdcall *)(_DWORD))v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.0);
        ((void (__stdcall *)(_DWORD))v2->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
        PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
        v2->m_pkSlotMachineWin->m_i1BetPerCoin = pkProto->BettingUnit;
        SlotMachineWin::InitMachine(v2->m_pkSlotMachineWin);
        v7 = User::Coin(&g_kUser);
        SlotMachineWin::SetCoin(v2->m_pkSlotMachineWin, v7);
        v2->m_bLeaveReserve = 0;
        v2->m_bIsEnterGameRoom = 1;
        v2->m_eDiceGameMode = 4;
        v2->m_hMobID = -1;
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, GB_SM_Open);
        SoundMgr::StopBGM(&g_kSoundMgr);
        SoundMgr::PlayBGM(&g_kSoundMgr, "GB_SlotMachine.mp3");
        result = 1;
      }
      else
      {
        result = 1;
      }
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (00724690) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_PLAYERACT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_PLAYERACT_CMD *pkProto)
{
  int result; // eax@2
  int v3; // esi@2
  ActionViewInfo *v4; // eax@3

  if ( pkProto )
  {
    result = (int)CharMgr::GetChar(&g_kCharMgr, pkProto->playerhandle);
    v3 = result;
    if ( !result )
      return result;
    v4 = ActionViewTable::GetByEventCode(pkProto->effect_body);
    if ( v4 )
      (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 456))(v3, v4->nIndex);
  }
  return 1;
}

//----- (007246F0) --------------------------------------------------------
void __thiscall MHDiceGameTask::AddMsg(MHDiceGameTask *this, char *pcText, bool Sysmsg, bool AnnounceMsg)
{
  PgFrameWork *v4; // eax@1
  PgFrameWork *v5; // esi@1
  D3DXCOLOR *v6; // eax@5
  D3DXCOLOR v7; // ST04_16@5
  D3DXCOLOR result; // [sp+8h] [bp-10h]@5

  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v5 = v4;
  if ( v4 )
  {
    if ( Sysmsg )
      GameFrameWork::AddSysMsg((GameFrameWork *)v4, pcText);
    if ( AnnounceMsg )
    {
      v6 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
      *(_QWORD *)&v7.r = *(_QWORD *)&v6->r;
      *(_QWORD *)&v7.b = *(_QWORD *)&v6->b;
      GameFrameWork::AddAnnounceMsg((GameFrameWork *)v5, pcText, COERCE_D3DXCOLOR(v7.r));
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v5[28].m_kMsgQ.m_uiHead);
    }
  }
}

//----- (00724770) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_SOMEONE_GET_JACKPOT_CMD(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_SOMEONE_GET_JACKPOT_CMD *pkProto)
{
  int v2; // edx@2
  int v3; // ecx@2
  int v4; // edx@2
  int v5; // ecx@2
  char *v6; // eax@2
  char *v7; // esi@2
  PgFrameWork *v8; // eax@2
  int result; // eax@4
  char acName[21]; // [sp+0h] [bp-1Ch]@2
  unsigned int v11; // [sp+18h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  if ( pkProto )
  {
    v2 = *(_DWORD *)&pkProto->charid.n5_name[4];
    *(_DWORD *)acName = *(_DWORD *)&pkProto->charid.n5_name[0];
    v3 = *(_DWORD *)&pkProto->charid.n5_name[8];
    *(_DWORD *)&acName[4] = v2;
    v4 = *(_DWORD *)&pkProto->charid.n5_name[12];
    *(_DWORD *)&acName[8] = v3;
    v5 = *(_DWORD *)&pkProto->charid.n5_name[16];
    *(_DWORD *)&acName[12] = v4;
    *(_DWORD *)&acName[16] = v5;
    acName[20] = 0;
    v6 = TextData2::Get(0x7344739u);
    v7 = fs(v6);
    v8 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
    if ( v8 )
      GameFrameWork::AddSysMsg((GameFrameWork *)v8, v7);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00724820) --------------------------------------------------------
void __thiscall MHDiceGameTask::ShutDownSlotMachine(MHDiceGameTask *this)
{
  MHDiceGameTask *v1; // esi@1
  SlotMachineWin *v2; // ecx@1
  char *v3; // edi@3
  PgFrameWork *v4; // eax@3
  PgFrameWork *v5; // esi@3
  D3DXCOLOR *v6; // eax@4
  D3DXCOLOR v7; // ST04_16@4
  D3DXCOLOR result; // [sp+Ch] [bp-10h]@4

  v1 = this;
  v2 = this->m_pkSlotMachineWin;
  if ( v2 )
    SlotMachineWin::InitMachine(v2);
  MHDiceGameTask::OnCloseWin(v1, &v1->m_pkSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
  MHDiceGameTask::OnCloseWin(v1, &v1->m_pkGBSlotHelpWin->baseclass_0.baseclass_0.baseclass_0);
  MHDiceGameTask::OnCloseWin(v1, &v1->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0);
  MHDiceGameTask::OnCloseWin(v1, &v1->m_pkMiniSlotMachineWin->baseclass_0.baseclass_0.baseclass_0);
  v1->m_pkSlotMachineWin = 0;
  v1->m_pkGBSlotHelpWin = 0;
  v1->m_pkGBSlotRankWin = 0;
  v1->m_pkMiniSlotMachineWin = 0;
  v1->m_bIsEnterGameRoom = 0;
  v1->m_eDiceGameMode = 0;
  ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
  ((void (*)(void))g_kSoundMgr.m_pkBGMGroup->baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
  World::PlayBGM(&g_kWorld);
  v3 = TextData2::Get(0xD905313Cu);
  v4 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  v5 = v4;
  if ( v4 )
  {
    GameFrameWork::AddSysMsg((GameFrameWork *)v4, v3);
    v6 = ColorInfoTable::GetDxColor(&result, Center_Announcement);
    *(_QWORD *)&v7.r = *(_QWORD *)&v6->r;
    *(_QWORD *)&v7.b = *(_QWORD *)&v6->b;
    GameFrameWork::AddAnnounceMsg((GameFrameWork *)v5, v3, COERCE_D3DXCOLOR(v7.r));
    PgWinMgr::SetTopWin(&Pgg_kWinMgr, (PgWin *)v5[28].m_kMsgQ.m_uiHead);
  }
}

//----- (00724930) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_GAME_LEAVE_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_GAME_LEAVE_ACK *pkProto)
{
  if ( pkProto->nError == 10440 )
    MHDiceGameTask::ShutDownSlotMachine(this);
  return 1;
}

//----- (00724950) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  GBSlotRankWin *v3; // ecx@6

  v2 = this;
  if ( pkProto && this->m_pkGBSlotRankWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v2->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0);
    v3 = v2->m_pkGBSlotRankWin;
    if ( v3->m_nCurSelTab == 1 )
      GBSlotRankWin::OnTAB2(v3);
    GBSlotRankWin::UpdateWinRankList(v2->m_pkGBSlotRankWin, pkProto);
    GBSlotRankWin::UpdateViewList(v2->m_pkGBSlotRankWin);
  }
  return 1;
}

//----- (007249E0) --------------------------------------------------------
int __thiscall MHDiceGameTask::Recv_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK(MHDiceGameTask *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK *pkProto)
{
  MHDiceGameTask *v2; // esi@1
  GBSlotRankWin *v3; // ecx@6

  v2 = this;
  if ( pkProto && this->m_pkGBSlotRankWin )
  {
    if ( (unsigned __int8)((int (*)(void))this->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[65].__vecDelDtor)() )
      PgWinMgr::SetTopWin(&Pgg_kWinMgr, &v2->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0);
    else
      PgWinMgr::ShowWin(&Pgg_kWinMgr, &v2->m_pkGBSlotRankWin->baseclass_0.baseclass_0.baseclass_0);
    v3 = v2->m_pkGBSlotRankWin;
    if ( v3->m_nCurSelTab != 1 )
      GBSlotRankWin::OnTAB1(v3);
    GBSlotRankWin::UpdateJackpotRankList(v2->m_pkGBSlotRankWin, pkProto);
    GBSlotRankWin::UpdateViewList(v2->m_pkGBSlotRankWin);
  }
  return 1;
}

//----- (00724A70) --------------------------------------------------------
void __thiscall GBSlotRankWin::OnTAB1(GBSlotRankWin *this)
{
  GBSlotRankWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1

  v1 = this;
  v2 = this->m_pkTabText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData2::Get(0xD75E3C3Eu);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkTabText, (unsigned int)v3);
  v1->m_pkTab01->m_bCheck = 1;
  v1->m_pkTab02->m_bCheck = 0;
  ((void (__stdcall *)(_DWORD))v1->m_pkTab02->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
  v1->m_nCurSelTab = 1;
  GBSlotRankWin::UpdateViewList(v1);
}

//----- (00724AE0) --------------------------------------------------------
void __thiscall GBSlotRankWin::OnTAB2(GBSlotRankWin *this)
{
  GBSlotRankWin *v1; // esi@1
  NiRefObjectVtbl *v2; // edi@1
  char *v3; // eax@1

  v1 = this;
  v2 = this->m_pkTabText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v3 = TextData2::Get(0xF7402742u);
  v2[118].__vecDelDtor((NiRefObject *)v1->m_pkTabText, (unsigned int)v3);
  v1->m_pkTab01->m_bCheck = 0;
  ((void (__stdcall *)(_DWORD))v1->m_pkTab01->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[123].__vecDelDtor)(0);
  v1->m_pkTab02->m_bCheck = 1;
  v1->m_nCurSelTab = 2;
  GBSlotRankWin::UpdateViewList(v1);
}

//----- (00724B50) --------------------------------------------------------
DiceRankInfo *__thiscall std::allocator<DiceRankInfo>::allocate(std::allocator<DiceRankInfo> *this, unsigned int _Count)
{
  DiceRankInfo *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0xAAAAAAA || (result = (DiceRankInfo *)operator new(24 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00724BB0) --------------------------------------------------------
SlotJackpotRankInfo *__cdecl std::_Move<SlotJackpotRankInfo___SlotJackpotRankInfo__>(SlotJackpotRankInfo *_First, SlotJackpotRankInfo *_Last, SlotJackpotRankInfo *_Dest, std::_Nonscalar_ptr_iterator_tag __formal)
{
  char *v4; // ecx@2
  SlotJackpotRankInfo *result; // eax@2
  unsigned int v6; // esi@3

  if ( _First == _Last )
  {
    result = _Dest;
  }
  else
  {
    v4 = &_First->sCharID.n5_name[8];
    result = _Dest;
    do
    {
      *(_DWORD *)&result->sCharID.n5_name[0] = *((_DWORD *)v4 - 2);
      *(_DWORD *)&result->sCharID.n5_name[4] = *((_DWORD *)v4 - 1);
      *(_DWORD *)&result->sCharID.n5_name[8] = *(_DWORD *)v4;
      *(_DWORD *)&result->sCharID.n5_name[12] = *((_DWORD *)v4 + 1);
      *(_DWORD *)&result->sCharID.n5_name[16] = *((_DWORD *)v4 + 2);
      result->___u1.JackpotPrice = *((_DWORD *)v4 + 3);
      v6 = *((_DWORD *)v4 + 3);
      v4 += 24;
      result->___u1.JackpotPrice = v6;
      ++result;
    }
    while ( (SlotJackpotRankInfo *)(v4 - 8) != _Last );
  }
  return result;
}

//----- (00724C10) --------------------------------------------------------
DiceRankInfo *__cdecl std::_Uninit_move<SlotJackpotRankInfo___SlotJackpotRankInfo___std::allocator<SlotJackpotRankInfo>_SlotJackpotRankInfo>(DiceRankInfo *_First, DiceRankInfo *_Last, DiceRankInfo *_Dest, std::allocator<DiceRankInfo> *_Al, DiceRankInfo *__formal, std::_Nonscalar_ptr_iterator_tag a6)
{
  DiceRankInfo *v6; // ecx@1
  DiceRankInfo *result; // eax@1

  v6 = _First;
  for ( result = _Dest; v6 != _Last; ++result )
  {
    if ( result )
    {
      *(_DWORD *)&result->sCharID.n5_name[0] = *(_DWORD *)&v6->sCharID.n5_name[0];
      *(_DWORD *)&result->sCharID.n5_name[4] = *(_DWORD *)&v6->sCharID.n5_name[4];
      *(_DWORD *)&result->sCharID.n5_name[8] = *(_DWORD *)&v6->sCharID.n5_name[8];
      *(_DWORD *)&result->sCharID.n5_name[12] = *(_DWORD *)&v6->sCharID.n5_name[12];
      *(_DWORD *)&result->sCharID.n5_name[16] = *(_DWORD *)&v6->sCharID.n5_name[16];
      result->nWinCnt = v6->nWinCnt;
    }
    ++v6;
  }
  return result;
}

//----- (00724C60) --------------------------------------------------------
void __thiscall std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::reserve(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, unsigned int _Count)
{
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *v2; // esi@1
  void *v3; // eax@4
  DiceRankInfo *v4; // ST04_4@4
  DiceRankInfo *v5; // ST00_4@4
  DiceRankInfo *v6; // ebx@4
  signed int v7; // edx@4
  int v8; // edi@4
  DiceRankInfo *i; // eax@5
  char *v10; // eax@8
  int v11; // [sp-10h] [bp-24h]@1
  char *_Ptr; // [sp+0h] [bp-14h]@4
  int *v13; // [sp+4h] [bp-10h]@1
  int v14; // [sp+10h] [bp-4h]@4

  v13 = &v11;
  v2 = this;
  if ( _Count > 0xAAAAAAA )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 24 < _Count )
  {
    v3 = std::allocator<DiceRankInfo>::allocate(&this->baseclass_0._Alval, _Count);
    v4 = v2->baseclass_0._Mylast;
    v5 = *(DiceRankInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    _Ptr = (char *)v3;
    v14 = 0;
    std::_Uninit_move<SlotJackpotRankInfo___SlotJackpotRankInfo___std::allocator<SlotJackpotRankInfo>_SlotJackpotRankInfo>(
      v5,
      v4,
      (DiceRankInfo *)v3,
      &v2->baseclass_0._Alval,
      0,
      (std::_Nonscalar_ptr_iterator_tag)_Count);
    v6 = *(DiceRankInfo **)&v2->baseclass_0.___u0.baseclass_0.dummy[0];
    v7 = (signed int)((unsigned __int64)(715827883i64
                                       * (unsigned int)((char *)v2->baseclass_0._Mylast
                                                      - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 2;
    v8 = v7 + ((unsigned int)v7 >> 31);
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
    {
      for ( i = v2->baseclass_0._Mylast; v6 != i; ++v6 )
        ;
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    }
    v10 = _Ptr;
    v2->baseclass_0._Myend = (DiceRankInfo *)&_Ptr[24 * _Count];
    v2->baseclass_0._Mylast = (DiceRankInfo *)&v10[24 * v8];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v10;
  }
}

//----- (00724D70) --------------------------------------------------------
void __thiscall std::vector<DiceRankInfo_std::allocator<DiceRankInfo>>::_Reserve(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, unsigned int _Count)
{
  int v2; // esi@1
  unsigned int v3; // esi@3
  int v4; // eax@3
  unsigned int v5; // eax@5

  v2 = (signed int)((char *)this->baseclass_0._Mylast - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 24;
  if ( 178956970 - _Count < v2 )
    std::_Xlength_error("vector<T> too long");
  v3 = _Count + v2;
  v4 = (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) / 24;
  if ( v3 > v4 )
  {
    if ( 178956970 - ((unsigned int)v4 >> 1) >= v4 )
      v5 = ((unsigned int)v4 >> 1) + v4;
    else
      v5 = 0;
    if ( v5 < v3 )
      v5 = v3;
    std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::reserve(this, v5);
  }
}

//----- (00724DF0) --------------------------------------------------------
void __thiscall std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, DiceRankInfo *_Val)
{
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *v2; // edi@1
  DiceRankInfo *v3; // ecx@1
  signed int v4; // edx@3
  int v5; // esi@3
  int v6; // ecx@5
  DiceRankInfo *v7; // eax@5
  DiceRankInfo *v8; // eax@9

  v2 = this;
  v3 = this->baseclass_0._Mylast;
  if ( _Val >= v3 || *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)_Val )
  {
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<DiceRankInfo_std::allocator<DiceRankInfo>>::_Reserve(v2, 1u);
    v8 = v2->baseclass_0._Mylast;
    if ( v8 )
    {
      *(_QWORD *)&v8->sCharID.n5_name[0] = *(_QWORD *)&_Val->sCharID.n5_name[0];
      *(_QWORD *)&v8->sCharID.n5_name[8] = *(_QWORD *)&_Val->sCharID.n5_name[8];
      *(_DWORD *)&v8->sCharID.n5_name[16] = *(_DWORD *)&_Val->sCharID.n5_name[16];
      v8->nWinCnt = _Val->nWinCnt;
    }
  }
  else
  {
    v4 = (signed int)((unsigned __int64)(715827883i64
                                       * (signed int)((char *)_Val
                                                    - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0])) >> 32) >> 2;
    v5 = v4 + ((unsigned int)v4 >> 31);
    if ( v3 == v2->baseclass_0._Myend )
      std::vector<DiceRankInfo_std::allocator<DiceRankInfo>>::_Reserve(v2, 1u);
    v6 = *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] + 24 * v5;
    v7 = v2->baseclass_0._Mylast;
    if ( v7 )
    {
      *(_DWORD *)&v7->sCharID.n5_name[0] = *(_DWORD *)v6;
      *(_DWORD *)&v7->sCharID.n5_name[4] = *(_DWORD *)(v6 + 4);
      *(_DWORD *)&v7->sCharID.n5_name[8] = *(_DWORD *)(v6 + 8);
      *(_DWORD *)&v7->sCharID.n5_name[12] = *(_DWORD *)(v6 + 12);
      *(_DWORD *)&v7->sCharID.n5_name[16] = *(_DWORD *)(v6 + 16);
      v7->nWinCnt = *(_DWORD *)(v6 + 20);
      ++v2->baseclass_0._Mylast;
      return;
    }
  }
  ++v2->baseclass_0._Mylast;
}

//----- (00724EB0) --------------------------------------------------------
void __thiscall GBSlotRankWin::UpdateJackpotRankList(GBSlotRankWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK *pkProto)
{
  SlotJackpotRankInfo *v2; // eax@2
  char *v3; // ebx@2
  SlotJackpotRankInfo *v4; // ecx@2
  signed int v5; // edi@4
  PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTRANKING_ACK *v6; // esi@5
  int v7; // ecx@6
  unsigned int v8; // edx@6
  unsigned int v9; // eax@6
  unsigned int v10; // ecx@6
  SlotJackpotRankInfo kInfo; // [sp+8h] [bp-1Ch]@6
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  if ( pkProto )
  {
    v2 = this->m_JackpotRankList.baseclass_0._Mylast;
    v3 = (char *)&this->m_JackpotRankList;
    v4 = *(SlotJackpotRankInfo **)&this->m_JackpotRankList.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v4 != v2 )
      *((_DWORD *)v3 + 1) = std::_Move<SlotJackpotRankInfo___SlotJackpotRankInfo__>(
                              v2,
                              v2,
                              v4,
                              (std::_Nonscalar_ptr_iterator_tag)pkProto);
    v5 = 0;
    if ( pkProto->ListLen )
    {
      v6 = pkProto + 9;
      do
      {
        v7 = *(_DWORD *)&v6[-8].ListLen;
        v8 = *(_DWORD *)&v6[-4].ListLen;
        kInfo.___u1.JackpotPrice = *(_DWORD *)&v6[12].ListLen;
        v9 = *(_DWORD *)&v6->ListLen;
        *(_DWORD *)&kInfo.sCharID.n5_name[0] = v7;
        v10 = *(_DWORD *)&v6[4].ListLen;
        *(_QWORD *)&kInfo.sCharID.n5_name[4] = __PAIR__(v9, v8);
        *(_QWORD *)&kInfo.sCharID.n5_name[12] = __PAIR__(*(_DWORD *)&v6[8].ListLen, v10);
        std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(
          (std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *)v3,
          (DiceRankInfo *)&kInfo);
        ++v5;
        v6 += 24;
      }
      while ( v5 < pkProto->ListLen );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00724F50) --------------------------------------------------------
void __thiscall GBSlotRankWin::UpdateWinRankList(GBSlotRankWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK *pkProto)
{
  SlotJackpotRankInfo *v2; // eax@2
  char *v3; // ebx@2
  SlotJackpotRankInfo *v4; // ecx@2
  signed int v5; // edi@4
  PROTO_NC_GAMBLE_SLOTMACHINE_WINRANKING_ACK *v6; // esi@5
  int v7; // ecx@6
  unsigned int v8; // edx@6
  unsigned int v9; // eax@6
  unsigned int v10; // ecx@6
  SlotJackpotRankInfo kInfo; // [sp+8h] [bp-1Ch]@6
  unsigned int v12; // [sp+20h] [bp-4h]@1
  int v13; // [sp+24h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  if ( pkProto )
  {
    v2 = this->m_WinRankList.baseclass_0._Mylast;
    v3 = (char *)&this->m_WinRankList;
    v4 = *(SlotJackpotRankInfo **)&this->m_WinRankList.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v4 != v2 )
      *((_DWORD *)v3 + 1) = std::_Move<SlotJackpotRankInfo___SlotJackpotRankInfo__>(
                              v2,
                              v2,
                              v4,
                              (std::_Nonscalar_ptr_iterator_tag)pkProto);
    v5 = 0;
    if ( pkProto->ListLen )
    {
      v6 = pkProto + 9;
      do
      {
        v7 = *(_DWORD *)&v6[-8].ListLen;
        v8 = *(_DWORD *)&v6[-4].ListLen;
        kInfo.___u1.JackpotPrice = *(_DWORD *)&v6[12].ListLen;
        v9 = *(_DWORD *)&v6->ListLen;
        *(_DWORD *)&kInfo.sCharID.n5_name[0] = v7;
        v10 = *(_DWORD *)&v6[4].ListLen;
        *(_QWORD *)&kInfo.sCharID.n5_name[4] = __PAIR__(v9, v8);
        *(_QWORD *)&kInfo.sCharID.n5_name[12] = __PAIR__(*(_DWORD *)&v6[8].ListLen, v10);
        std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::push_back(
          (std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *)v3,
          (DiceRankInfo *)&kInfo);
        ++v5;
        v6 += 24;
      }
      while ( v5 < pkProto->ListLen );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00724FF0) --------------------------------------------------------
bool __thiscall CEaseInOutInterpolation::Setup(CEaseInOutInterpolation *this, float from, float to, float time)
{
  bool result; // al@2

  if ( time > 0.0 )
  {
    result = 1;
    this->_value = from;
    this->_target = to;
    this->_speed = 0.0;
    this->_acceleration = (to - from) / (time * time * 0.25);
    this->_totalTime = time;
    this->_remainingTime = time;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00725040) --------------------------------------------------------
bool __thiscall CEaseInOutInterpolation::Interpolate(CEaseInOutInterpolation *this, float deltaTime)
{
  double v2; // st7@1
  double v3; // st5@2
  float deltaTimea; // [sp+8h] [bp+8h]@1

  v2 = deltaTime;
  deltaTimea = this->_remainingTime - deltaTime;
  this->_remainingTime = deltaTimea;
  if ( this->_totalTime * 0.5 <= deltaTimea )
    v3 = this->_acceleration * v2 + this->_speed;
  else
    v3 = this->_speed - this->_acceleration * v2;
  this->_speed = v3;
  this->_value = v2 * this->_speed + this->_value;
  return deltaTimea <= 0.0;
}

//----- (007250B0) --------------------------------------------------------
bool __thiscall CEaseInOutInterpolation::SetupWithDist(CEaseInOutInterpolation *this, float dist, float time, float speed)
{
  bool result; // al@2
  double v5; // st6@3
  double v6; // st7@3

  if ( dist > 0.0 )
  {
    result = 1;
    this->_value = 0.0;
    this->_target = 0.0;
    this->_speed = speed;
    this->_acceleration = speed / (time * time);
    v5 = dist;
    v6 = time;
    this->_totalDist = v5;
    this->_remainingDist = v5;
    this->_totalTime = v6;
    this->_remainingTime = v6;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00725100) --------------------------------------------------------
bool __thiscall CEaseInOutInterpolation::InterpoateWithDist(CEaseInOutInterpolation *this, float deltaTime)
{
  bool result; // al@2
  double v3; // st6@3
  float deltaTimeb; // [sp+8h] [bp+8h]@3
  float deltaTimea; // [sp+8h] [bp+8h]@5
  float deltaTimec; // [sp+8h] [bp+8h]@7

  if ( 0.0 == this->_remainingDist )
  {
    result = 1;
  }
  else
  {
    v3 = deltaTime;
    deltaTimeb = this->_remainingTime - deltaTime;
    this->_remainingTime = deltaTimeb;
    if ( this->_totalTime > (double)deltaTimeb )
      this->_speed = this->_speed - v3 * this->_speed * 0.5;
    deltaTimea = v3 * this->_speed;
    this->_value = deltaTimea;
    if ( this->_remainingDist >= (double)deltaTimea )
    {
      deltaTimec = this->_remainingDist - deltaTimea;
      this->_remainingDist = deltaTimec;
      result = deltaTimec <= 0.0;
    }
    else
    {
      result = 0;
      this->_value = this->_remainingDist;
      this->_remainingDist = 0.0;
    }
  }
  return result;
}

//----- (007251A0) --------------------------------------------------------
void __thiscall SlotEntry::setMaxSpeed(SlotEntry *this, float speed)
{
  this->_MaxSpeed = speed;
}

//----- (007251B0) --------------------------------------------------------
void __thiscall SlotEntry::roll(SlotEntry *this)
{
  double v1; // st6@1
  double v2; // st7@2
  float v3; // [sp+0h] [bp-8h]@1
  float v4; // [sp+4h] [bp-4h]@1

  this->_fWheelTime = 0.0;
  this->me_state = 0;
  v1 = this->_MaxSpeed;
  this->_bUseTimer = 0;
  v3 = v1;
  v4 = this->_Time;
  if ( v4 > 0.0 )
  {
    v2 = v4;
    this->_easeInOut._value = 0.0;
    this->_easeInOut._target = v3;
    this->_easeInOut._speed = 0.0;
    this->_easeInOut._acceleration = (v3 - 0.0) / (v4 * v4 * 0.25);
    this->_easeInOut._totalTime = v2;
    this->_easeInOut._remainingTime = v2;
  }
}

//----- (00725220) --------------------------------------------------------
void __thiscall SlotMachineWin::Spin(SlotMachineWin *this, bool bSucceed)
{
  SlotMachineWin *v2; // esi@1
  PgWinBut *v3; // ecx@3

  v2 = this;
  if ( this->me_State == 2 )
  {
    if ( bSucceed )
    {
      v3 = this->m_pkButs[0];
      v2->me_State = 3;
      v2->m_bTransition = 1;
      ((void (__stdcall *)(_DWORD))v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
      ((void (__stdcall *)(_DWORD))v2->m_pkButs[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, GB_SM_Spin);
    }
    else
    {
      this->me_State = 1;
    }
  }
}

//----- (00725300) --------------------------------------------------------
void __thiscall SlotMachineWin::Stop(SlotMachineWin *this, int *result)
{
  if ( this->me_State == 4 )
  {
    this->me_State = 5;
    this->m_iResult[0] = *result;
    this->m_iResult[1] = result[1];
    this->m_iResult[2] = result[2];
    this->m_iResult[3] = result[3];
    this->m_iResult[4] = result[4];
    this->m_iResult[5] = result[5];
    this->m_iResult[6] = result[6];
    this->m_iResult[7] = result[7];
    this->m_iResult[8] = result[8];
    this->m_bTransition = 1;
    ((void (__stdcall *)(_DWORD))this->m_pkButs[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, GB_SM_Stop);
  }
}

//----- (007253A0) --------------------------------------------------------
void __thiscall SlotMachineWin::ResetCoin(SlotMachineWin *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  this->m_iBetNum = -1;
  v1 = (char *)this->m_pkBetIndicator;
  v2 = 32;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0);
    v1 += 4;
    --v2;
  }
  while ( v2 );
}

//----- (007253E0) --------------------------------------------------------
void __thiscall SlotMachineWin::UpdateCoin(SlotMachineWin *this, __int64 *from, __int64 *to, SlotMachineWin::COIN_TYPE type, bool immediately)
{
  int v5; // edx@1
  signed int v6; // eax@5
  __int64 v7; // qdi@17
  unsigned int v8; // edi@23
  unsigned int v9; // ecx@23
  int v10; // ebx@25
  bool v11; // sf@27
  int v12; // esi@27
  int v13; // ecx@30
  int v14; // edi@39
  int v15; // esi@40
  int v16; // ecx@42
  unsigned int i64Val_4; // [sp+8h] [bp-8h]@27
  SlotMachineWin *v18; // [sp+Ch] [bp-4h]@1
  signed int count; // [sp+24h] [bp+14h]@23

  v5 = *((_DWORD *)to + 1);
  v18 = this;
  if ( *(_DWORD *)to == *(_DWORD *)from && v5 == *((_DWORD *)from + 1) )
    return;
  if ( immediately )
  {
    *(_DWORD *)from = *(_DWORD *)to;
    *((_DWORD *)from + 1) = v5;
  }
  v6 = abs(*(_DWORD *)to - *(_DWORD *)from);
  if ( v6 <= 1000000 )
  {
    if ( v6 <= 100000 )
    {
      if ( v6 <= 10000 )
      {
        if ( v6 <= 1000 )
        {
          if ( v6 <= 100 )
          {
            if ( v6 > 10 )
              v6 = 10;
          }
          else
          {
            v6 = 100;
          }
        }
        else
        {
          v6 = 1000;
        }
      }
      else
      {
        v6 = 10000;
      }
    }
    else
    {
      v6 = 100000;
    }
  }
  else
  {
    v6 = 1000000;
  }
  v7 = *from;
  if ( *from >= *to )
    *from = v7 - v6;
  else
    *from = v7 + v6;
  if ( *((_DWORD *)from + 1) <= 0 && *((_DWORD *)from + 1) < 0 )
    *from = 0i64;
  v8 = *(_DWORD *)from;
  v9 = *((_DWORD *)from + 1);
  count = 7;
  if ( !type )
    count = 11;
  v10 = (int)&v18->m_pkBetNum[count];
  while ( 1 )
  {
    v12 = (signed __int64)__PAIR__(v9, v8) % 10;
    v11 = (signed int)((signed __int64)__PAIR__(v9, v8) % 10) < 0;
    i64Val_4 = (unsigned __int64)((signed __int64)__PAIR__(v9, v8) / 10) >> 32;
    v8 = (signed __int64)__PAIR__(v9, v8) / 10;
    if ( v11 )
      v12 = 0;
    if ( type )
    {
      if ( type == 1 )
      {
        v13 = *(_DWORD *)v10;
      }
      else
      {
        if ( type != 2 )
          goto LABEL_36;
        v13 = *(_DWORD *)(v10 + 64);
      }
    }
    else
    {
      v13 = *(_DWORD *)(v10 + 144);
    }
    (*(void (__stdcall **)(int))(*(_DWORD *)v13 + 492))(v12);
LABEL_36:
    if ( !(i64Val_4 | v8) )
      break;
    v10 -= 4;
    --count;
    if ( count < 0 )
      return;
    v9 = i64Val_4;
  }
  v14 = count - 1;
  if ( count - 1 >= 0 )
  {
    v15 = (int)&v18->m_pkBetNum[v14];
    while ( type )
    {
      if ( type == 1 )
      {
        v16 = *(_DWORD *)v15;
        goto LABEL_47;
      }
      if ( type == 2 )
      {
        v16 = *(_DWORD *)(v15 + 64);
        goto LABEL_47;
      }
LABEL_48:
      v15 -= 4;
      --v14;
      if ( v14 < 0 )
        return;
    }
    v16 = *(_DWORD *)(v15 + 144);
LABEL_47:
    (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v16 + 492))(0);
    goto LABEL_48;
  }
}

//----- (00725590) --------------------------------------------------------
bool __thiscall SlotMachineWin::canExit(SlotMachineWin *this)
{
  SlotMachineWin::MachineState v1; // eax@1

  v1 = this->me_State;
  return !v1 || v1 == 1;
}

//----- (007255B0) --------------------------------------------------------
void __thiscall SlotMachineWin::SetCoin(SlotMachineWin *this, __int64 nCoin)
{
  this->m_nTempUserCoin = nCoin;
}

//----- (007255D0) --------------------------------------------------------
void __thiscall SlotMachineWin::SetJackPotCoin(SlotMachineWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD *pkProto)
{
  SlotMachineWin *v2; // esi@1
  PROTO_NC_GAMBLE_SLOTMACHINE_JACKPOTINFO_CMD *v3; // ebx@2
  int v4; // eax@3
  NiRefObjectVtbl *v5; // edi@4
  char *v6; // eax@4
  PgWinText *v7; // ecx@4
  signed int i; // [sp+8h] [bp-4h]@1

  v2 = this;
  i = 0;
  if ( pkProto->JackPotNum )
  {
    v3 = pkProto + 3;
    while ( 1 )
    {
      v4 = *(_WORD *)&v3[-2].JackPotNum;
      if ( v4 == 10 )
        break;
      if ( v4 == 100 )
      {
        v5 = v2->m_pkJackPotText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v6 = fs("%d");
        v7 = v2->m_pkJackPotText[1];
        goto LABEL_9;
      }
      if ( (_WORD)v4 == 500 )
      {
        v5 = v2->m_pkJackPotText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v6 = fs("%d");
        v7 = v2->m_pkJackPotText[0];
        goto LABEL_9;
      }
LABEL_10:
      v3 += 6;
      ++i;
      if ( i >= pkProto->JackPotNum )
        return;
    }
    v5 = v2->m_pkJackPotText[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v6 = fs("%d");
    v7 = v2->m_pkJackPotText[2];
LABEL_9:
    v5[118].__vecDelDtor((NiRefObject *)v7, (unsigned int)v6);
    goto LABEL_10;
  }
}

//----- (00725690) --------------------------------------------------------
void __thiscall SlotMachineWin::WheelStop(SlotMachineWin *this, PROTO_NC_GAMBLE_SLOTMACHINE_WHEELSTOP_ACK *pkProto)
{
  this->m_bRecivedResult = 1;
  *(_WORD *)&this->m_WinState.gap0[0] = *(_WORD *)&pkProto->WinLine.gap0[0];
  this->m_nShareCoin = pkProto->win;
  SlotMachineWin::UpdateCoin(this, &this->m_nPreShareCoin, &this->m_nShareCoin, CT_SHARECOIN, 1);
}

//----- (007256D0) --------------------------------------------------------
void __thiscall GBSlotRankWin::DirectMessage(GBSlotRankWin *this, int iMsgTag, void *pvBody, IDirectMessenger *pkFrom)
{
  GBSlotRankWin *v4; // esi@1
  SlideListWin *v5; // ecx@1

  v4 = this;
  v5 = (SlideListWin *)LODWORD(this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][0]);
  if ( v5 )
    LODWORD(v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Rotate.m_pEntry[2][1]) = SlideListWin::GetCurSelIndex(v5);
}

//----- (007256F0) --------------------------------------------------------
void __thiscall MiniSlotMachineWin::MiniSlotMachineWin(MiniSlotMachineWin *this)
{
  MiniSlotMachineWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniSlotMachineWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniSlotMachineWin::_vftable_;
  v1->m_bAutoOnOff = 0;
}
// 9D7CB0: using guessed type int (__stdcall *MiniSlotMachineWin___vftable_)(int uiFlags);
// 9D7CCC: using guessed type int (__thiscall *MiniSlotMachineWin___vftable_)(void *p, char);

//----- (00725720) --------------------------------------------------------
void __thiscall MiniSlotMachineWin::_MiniSlotMachineWin(MiniSlotMachineWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniSlotMachineWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniSlotMachineWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D7CB0: using guessed type int (__stdcall *MiniSlotMachineWin___vftable_)(int uiFlags);
// 9D7CCC: using guessed type int (__thiscall *MiniSlotMachineWin___vftable_)(void *p, char);

//----- (00725740) --------------------------------------------------------
void __thiscall GBSlotHelpWin::GBSlotHelpWin(GBSlotHelpWin *this)
{
  GBSlotHelpWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GBSlotHelpWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GBSlotHelpWin::_vftable_;
}
// 9D7EF0: using guessed type int (__stdcall *GBSlotHelpWin___vftable_)(int uiFlags);
// 9D7F0C: using guessed type int (__thiscall *GBSlotHelpWin___vftable_)(void *p, char);

//----- (00725760) --------------------------------------------------------
void __thiscall GBSlotHelpWin::_GBSlotHelpWin(GBSlotHelpWin *this)
{
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GBSlotHelpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GBSlotHelpWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
}
// 9D7EF0: using guessed type int (__stdcall *GBSlotHelpWin___vftable_)(int uiFlags);
// 9D7F0C: using guessed type int (__thiscall *GBSlotHelpWin___vftable_)(void *p, char);

//----- (00725780) --------------------------------------------------------
void __thiscall GBSlotHelpWin::UpdateMeWin(GBSlotHelpWin *this, float fCurTime)
{
  GBSlotHelpWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pListWin, v2->m_pSlideBar);
}

//----- (007257B0) --------------------------------------------------------
void __thiscall SlotEntry::setAlpha(SlotEntry *this, float fAlpha)
{
  PgWinSpr *v2; // ecx@1

  v2 = this->ms_kSpr.m_pObject;
  if ( v2 )
    ((void (__stdcall *)(_DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(LODWORD(fAlpha));
}

//----- (007257D0) --------------------------------------------------------
void __thiscall SlotMachineWin::SlotMachineWin(SlotMachineWin *this)
{
  SlotMachineWin *v1; // esi@1
  int v2; // eax@1
  signed int v3; // ecx@1
  NiNode *v4; // edi@3

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlotMachineWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlotMachineWin::_vftable_;
  v1->m_MachineTimer.m_fStartTime = 0.0;
  v1->m_MachineTimer.m_fObjectTime = 0.0;
  v1->m_MachineTimer.m_fElapsedTime = 0.0;
  v1->m_GameTimer.m_fStartTime = 0.0;
  v1->m_GameTimer.m_fObjectTime = 0.0;
  v1->m_GameTimer.m_fElapsedTime = 0.0;
  _eh_vector_constructor_iterator_(
    v1->ms_Slot,
    0x68u,
    9,
    (void (__thiscall *)(void *))SlotEntry::SlotEntry,
    (void (__thiscall *)(void *))SlotEntry::_SlotEntry);
  v1->ms_EffectPos.m_pObject = 0;
  v1->m_pkWinEffect[0] = 0;
  v1->m_pkWinEffect[1] = 0;
  v1->m_pkWinEffect[2] = 0;
  v1->m_pkWinEffect[3] = 0;
  v1->m_pkBarEffect[0] = 0;
  v1->m_pkBarEffect[1] = 0;
  v1->m_pkBetCoin[0] = 0;
  v1->m_pkBetNum[0] = 0;
  v1->m_pkShareCoin[0] = 0;
  v1->m_pkShareNum[0] = 0;
  v1->m_pkBetCoin[1] = 0;
  v1->m_pkBetNum[1] = 0;
  v1->m_pkShareCoin[1] = 0;
  v1->m_pkShareNum[1] = 0;
  v1->m_pkBetCoin[2] = 0;
  v1->m_pkBetNum[2] = 0;
  v1->m_pkShareCoin[2] = 0;
  v1->m_pkShareNum[2] = 0;
  v1->m_pkBetCoin[3] = 0;
  v1->m_pkBetNum[3] = 0;
  v1->m_pkShareCoin[3] = 0;
  v1->m_pkShareNum[3] = 0;
  v1->m_pkBetCoin[4] = 0;
  v1->m_pkBetNum[4] = 0;
  v1->m_pkShareCoin[4] = 0;
  v1->m_pkShareNum[4] = 0;
  v1->m_pkBetCoin[5] = 0;
  v1->m_pkBetNum[5] = 0;
  v1->m_pkShareCoin[5] = 0;
  v1->m_pkShareNum[5] = 0;
  v1->m_pkBetCoin[6] = 0;
  v1->m_pkBetNum[6] = 0;
  v1->m_pkShareCoin[6] = 0;
  v1->m_pkShareNum[6] = 0;
  v1->m_pkBetCoin[7] = 0;
  v1->m_pkBetNum[7] = 0;
  v1->m_pkShareCoin[7] = 0;
  v1->m_pkShareNum[7] = 0;
  v2 = (int)v1->m_pkMyCoinNum;
  v3 = 12;
  do
  {
    *(_DWORD *)(v2 - 48) = 0;
    *(_DWORD *)v2 = 0;
    v2 += 4;
    --v3;
  }
  while ( v3 );
  v1->m_pkBetIndicator[0] = 0;
  v1->m_pkBetIndicator[1] = 0;
  v1->m_pkBetIndicator[2] = 0;
  v1->m_pkBetIndicator[3] = 0;
  v1->m_pkBetIndicator[4] = 0;
  v1->m_pkBetIndicator[5] = 0;
  v1->m_pkBetIndicator[6] = 0;
  v1->m_pkBetIndicator[7] = 0;
  v1->m_pkBetIndicator[8] = 0;
  v1->m_pkBetIndicator[9] = 0;
  v1->m_pkBetIndicator[10] = 0;
  v1->m_pkBetIndicator[11] = 0;
  v1->m_pkBetIndicator[12] = 0;
  v1->m_pkBetIndicator[13] = 0;
  v1->m_pkBetIndicator[14] = 0;
  v1->m_pkBetIndicator[15] = 0;
  v1->m_pkBetIndicator[16] = 0;
  v1->m_pkBetIndicator[17] = 0;
  v1->m_pkBetIndicator[18] = 0;
  v1->m_pkBetIndicator[19] = 0;
  v1->m_pkBetIndicator[20] = 0;
  v1->m_pkBetIndicator[21] = 0;
  v1->m_pkBetIndicator[22] = 0;
  v1->m_pkBetIndicator[23] = 0;
  v1->m_pkBetIndicator[24] = 0;
  v1->m_pkBetIndicator[25] = 0;
  v1->m_pkBetIndicator[26] = 0;
  v1->m_pkBetIndicator[27] = 0;
  v1->m_pkBetIndicator[28] = 0;
  v1->m_pkBetIndicator[29] = 0;
  v1->m_pkBetIndicator[30] = 0;
  v1->m_pkBetIndicator[31] = 0;
  v1->m_pkJackPotText[0] = 0;
  v1->m_pkJackPotText[1] = 0;
  v1->m_pkJackPotText[2] = 0;
  v1->m_pkButs[0] = 0;
  v1->m_pkButs[1] = 0;
  v1->m_pkButs[2] = 0;
  v1->m_pkButs[3] = 0;
  v1->m_pkButs[4] = 0;
  v1->m_pkButs[5] = 0;
  v1->m_pkWinLines[0] = 0;
  v1->m_pkWinLines[1] = 0;
  v1->m_pkWinLines[2] = 0;
  v1->m_pkWinLines[3] = 0;
  v1->m_pkWinLines[4] = 0;
  v1->m_pkWinLines[5] = 0;
  v1->m_pkWinLines[6] = 0;
  v1->m_pkWinLines[7] = 0;
  v1->m_pkWinSlots[0] = 0;
  v1->m_pkWinSlots[1] = 0;
  v1->m_pkWinSlots[2] = 0;
  v1->m_pkWinSlots[3] = 0;
  v1->m_pkWinSlots[4] = 0;
  v1->m_pkWinSlots[5] = 0;
  v1->m_pkWinSlots[6] = 0;
  v1->m_pkWinSlots[7] = 0;
  v1->m_pkWinSlots[8] = 0;
  v1->m_pkTitleText[0] = 0;
  v1->m_pkTitleText[1] = 0;
  v1->m_fAlpha = 0.0;
  v1->m_bTurnLight = 1;
  v1->m_bMachineTimeSetting = 0;
  v4 = v1->ms_EffectPos.m_pObject;
  if ( v4 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    v1->ms_EffectPos.m_pObject = 0;
  }
  v1->me_State = 0;
  v1->m_iStopID = 0;
  v1->m_i1BetPerCoin = 10;
  LODWORD(v1->m_nTempUserCoin) = 0;
  HIDWORD(v1->m_nTempUserCoin) = 0;
  LODWORD(v1->m_nPreBettingCoin) = 0;
  HIDWORD(v1->m_nPreBettingCoin) = 0;
  LODWORD(v1->m_nBettingCoin) = 0;
  HIDWORD(v1->m_nBettingCoin) = 0;
  LODWORD(v1->m_nPreShareCoin) = 0;
  HIDWORD(v1->m_nPreShareCoin) = 0;
  LODWORD(v1->m_nShareCoin) = 0;
  HIDWORD(v1->m_nShareCoin) = 0;
  LODWORD(v1->m_nUserCoin) = 0;
  HIDWORD(v1->m_nUserCoin) = 0;
}
// 9D8134: using guessed type int (__stdcall *SlotMachineWin___vftable_)(int uiFlags);
// 9D8154: using guessed type int (__thiscall *SlotMachineWin___vftable_)(void *p, char);

//----- (00725B80) --------------------------------------------------------
bool __thiscall SlotMachineWin::SendBettingInfo(SlotMachineWin *this)
{
  SlotMachineWin *v1; // edi@1
  bool v2; // al@2
  MHDiceGameTask *v3; // esi@4
  int v4; // ebx@7
  char v5; // al@8
  char v6; // cl@9
  char v7; // dl@9
  int v8; // esi@9
  int v9; // eax@10
  int v10; // ebx@15
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-30h]@3
  MHDiceGameTask *pkTask; // [sp+8h] [bp-2Ch]@3
  PROTO_NC_GAMBLE_SLOTMACHINE_START_REQ kProto; // [sp+Ch] [bp-28h]@15
  int value[8]; // [sp+10h] [bp-24h]@9
  unsigned int v15; // [sp+30h] [bp-4h]@1
  int v16; // [sp+34h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v1 = this;
  if ( this->me_State == 1 )
  {
    this->me_State = 2;
    pkTask = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v4 = v1->m_iBetNum;
    if ( v4 != -1 && (v5 = 0, pkTask) )
    {
      v6 = 0;
      v7 = 0;
      v8 = 0;
      value[0] = 0;
      value[1] = 0;
      value[2] = 0;
      value[3] = 0;
      value[4] = 0;
      value[5] = 0;
      value[6] = 0;
      value[7] = 0;
      if ( v4 >= 0 )
      {
        v9 = v4 + 1;
        do
        {
          ++value[v8++];
          if ( v8 == 8 )
            v8 = 0;
          --v9;
        }
        while ( v9 );
        v7 = LOBYTE(value[7]);
        v5 = LOBYTE(value[6]);
        v6 = LOBYTE(value[1]);
      }
      kProto.betting.gap0[0] = value[2] & 7 | kProto.betting.gap0[0] & 0xC0 | 8 * (v6 & 7);
      kProto.betting.gap0[1] ^= (LOBYTE(value[0]) ^ kProto.betting.gap0[1]) & 7;
      v10 = (unsigned __int8)((kProto.betting._bf3 ^ 8 * v7) & 0x38 ^ kProto.betting._bf3);
      kProto.betting.gap0[1] ^= (kProto.betting.gap0[1] ^ 8 * LOBYTE(value[4])) & 0x38;
      kProto.betting.gap0[2] = value[5] & 7 | kProto.betting.gap0[2] & 0xC0 | 8 * (v5 & 7);
      kProto.betting._bf3 = (v10 ^ LOBYTE(value[3])) & 7 ^ v10;
      MHDiceGameTask::NcGambleSlotmachineStartReq(pkTask, &kProto);
      v2 = 1;
    }
    else
    {
      v2 = 0;
    }
  }
  else
  {
    v2 = 0;
  }
  return v2;
}
// A85C00: using guessed type int __security_cookie;

//----- (00725D00) --------------------------------------------------------
void __thiscall GBSlotRankWin::UpdateMeWin(GBSlotRankWin *this, float fCurTime)
{
  GBSlotRankWin *v2; // esi@1
  PgFrameWork *v3; // eax@1

  v2 = this;
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 )
    GameFrameWork::UpdateUIScroll((GameFrameWork *)v3, v2->m_pUserList, v2->m_pkSlideBarEx);
}

//----- (00725D30) --------------------------------------------------------
void __thiscall MiniSlotMachineWin::OnCommand(MiniSlotMachineWin *this, unsigned int wParam, int lParam)
{
  MHDiceGameTask **v3; // eax@2
  unsigned int v4; // esi@3

  if ( !wParam )
  {
    v3 = (MHDiceGameTask **)MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam);
    MHDiceGameTask::OpenSlotMachineWin(*v3);
    if ( wParam )
    {
      v4 = wParam;
      if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
      {
        if ( v4 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
      }
    }
  }
}

//----- (00725DC0) --------------------------------------------------------
void __thiscall MiniSlotMachineWin::UpdateMeWin(MiniSlotMachineWin *this, float fCurTime)
{
  MHDiceGameTask *v2; // edi@1
  MHDiceGameTask *v3; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-4h]@1

  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
  if ( v2 )
    MHDiceGameTask::UpdateSlotMachineGame(v2, fCurTime);
}

//----- (00725E20) --------------------------------------------------------
void __thiscall GBSlotHelpWin::CloseWin(GBSlotHelpWin *this)
{
  PgWin *v1; // esi@1
  MHDiceGameTask *v2; // ecx@1
  MHDiceGameTask *v3; // esi@2
  NiPointer<MHDiceGameTask> result; // [sp+0h] [bp-10h]@1
  int v5; // [sp+Ch] [bp-4h]@1

  v1 = (PgWin *)this;
  v2 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  v5 = 0;
  MHDiceGameTask::OnCloseWin(v2, v1);
  v5 = -1;
  if ( result.m_pObject )
  {
    v3 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v3 )
        v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    }
  }
}

//----- (00725EA0) --------------------------------------------------------
void __thiscall GBSlotHelpWin::OnSlideBar(GBSlotHelpWin *this)
{
  GBSlotHelpWin *v1; // esi@1
  SlideBar *v2; // ecx@1

  v1 = this;
  v2 = this->m_pSlideBar;
  if ( v2 )
  {
    SlideBar::SetSplitCnt(v2, v1->m_pListWin->m_nSlideSplitCnt);
    v1->m_pListWin->m_nViewStartPos = v1->m_pSlideBar->m_nCurPos;
    SlideListWin::UpdateViewList(v1->m_pListWin);
  }
}

//----- (00725EF0) --------------------------------------------------------
void __thiscall SlotEntry::reset(SlotEntry *this)
{
  SlotEntry *v1; // esi@1
  double v2; // st7@2
  double v3; // st7@3
  double v4; // st5@3
  double v5; // st6@3
  PgWinSpr *v6; // eax@4
  PgSpr *v7; // eax@4
  PgSprData *v8; // eax@5
  NiScreenElementsData *v9; // edi@7
  NiPoint2 kValue; // [sp+4h] [bp-Ch]@2
  float v11; // [sp+Ch] [bp-4h]@2

  v1 = this;
  if ( this->ms_kSpr.m_pObject )
  {
    kValue.y = this->_MaxSpeed;
    v11 = this->_Time;
    v2 = 0.0;
    if ( v11 > 0.0 )
    {
      v3 = v11;
      this->_easeInOut._value = 0.0;
      v4 = kValue.y;
      this->_easeInOut._target = kValue.y;
      this->_easeInOut._speed = 0.0;
      this->_easeInOut._acceleration = (v4 - 0.0) / (v3 * v3 * 0.25);
      v5 = v3;
      v2 = 0.0;
      this->_easeInOut._totalTime = v5;
      this->_easeInOut._remainingTime = v5;
    }
    v6 = this->ms_kSpr.m_pObject;
    this->_fMove = v2;
    this->_fOverDist = v2;
    this->_bUseTimer = 0;
    this->me_state = 3;
    this->_bTransiton = 0;
    v7 = v6->m_spSpr.m_pObject;
    if ( v7 )
      v8 = v7->m_spSprData.m_pObject;
    else
      v8 = 0;
    v9 = v8->m_akGeomData.m_pBase->m_pObject;
    if ( v9 )
    {
      kValue.x = v2;
      kValue.y = v2;
      NiScreenElementsData::SetTexture(v9, 0, 0, 0, &kValue);
      kValue.x = 0.0;
      kValue.y = v1->cHeightInTex;
      NiScreenElementsData::SetTexture(v9, 0, 1, 0, &kValue);
      kValue.x = 1.0;
      kValue.y = v1->cHeightInTex;
      NiScreenElementsData::SetTexture(v9, 0, 2, 0, &kValue);
      kValue.x = 1.0;
      kValue.y = 0.0;
      NiScreenElementsData::SetTexture(v9, 0, 3, 0, &kValue);
    }
  }
}

//----- (00726010) --------------------------------------------------------
void __thiscall SlotEntry::setup(SlotEntry *this, NiAVObject *pkNode, char *pcTag, PgWin *pkParent, float speed, float time)
{
  SlotEntry *v6; // esi@1
  NiSourceTexture *v7; // eax@1
  PgWinSpr *v8; // eax@1
  PgWinSpr *v9; // edi@1
  PgWinSpr *v10; // ebx@1
  PgSpr *v11; // eax@8
  NiAVObject *v12; // ecx@9
  NiProperty *v13; // eax@11
  UIUtil ui; // [sp+0h] [bp-20h]@1
  int v15; // [sp+1Ch] [bp-4h]@1

  v6 = this;
  UIUtil::UIUtil(&ui);
  v15 = 0;
  UIUtil::SetParent(&ui, pkParent);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, pkNode);
  v7 = MenuTexMgr::GetTexture(0x19u);
  v8 = UIUtil::CreateSpr(&ui, pcTag, v7);
  v9 = v6->ms_kSpr.m_pObject;
  v10 = v8;
  if ( v9 != v8 )
  {
    if ( v9
      && !InterlockedDecrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v9 )
      v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v9,
        1u);
    v6->ms_kSpr.m_pObject = v10;
    if ( v10 )
      InterlockedIncrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v11 = v6->ms_kSpr.m_pObject->m_spSpr.m_pObject;
  if ( v11->m_akGeom.m_uiSize )
    v12 = (NiAVObject *)v11->m_akGeom.m_pBase->m_pObject;
  else
    v12 = 0;
  v13 = NiAVObject::GetProperty(v12, 8);
  NiTexturingProperty::SetBaseClampMode((NiTexturingProperty *)v13, WRAP_S_WRAP_T);
  v6->_MaxSpeed = speed;
  v6->_Time = time;
  SlotEntry::reset(v6);
  v15 = -1;
  UIUtil::_UIUtil(&ui);
}

//----- (00726120) --------------------------------------------------------
void __thiscall SlotEntry::update(SlotEntry *this, float fTime)
{
  SlotEntry *v2; // esi@1
  SlotEntry::ESLOT_STATE v3; // eax@4
  int v4; // eax@5
  double v5; // st7@9
  double v6; // st7@16
  double v7; // st7@19
  PgSpr *v8; // eax@24
  PgSprData *v9; // eax@25
  NiScreenElementsData *v10; // edi@27
  NiPoint2 kValue; // [sp+14h] [bp-10h]@28
  NiPoint2 kUV; // [sp+1Ch] [bp-8h]@4
  float acel; // [sp+2Ch] [bp+8h]@4
  float acela; // [sp+2Ch] [bp+8h]@8
  float acelb; // [sp+2Ch] [bp+8h]@18
  float acelc; // [sp+2Ch] [bp+8h]@28

  v2 = this;
  if ( this->me_state == 3 )
    return;
  if ( !this->_bUseTimer )
  {
    this->_DiceTimer.m_fStartTime = fTime;
    this->_DiceTimer.m_fObjectTime = 0.0;
    this->_DiceTimer.m_fElapsedTime = 0.0;
    this->_bUseTimer = 1;
    return;
  }
  kUV.y = this->_DiceTimer.m_fObjectTime;
  acel = fTime - this->_DiceTimer.m_fStartTime;
  this->_DiceTimer.m_fObjectTime = acel;
  this->_DiceTimer.m_fElapsedTime = acel - kUV.y;
  v3 = this->me_state;
  if ( !v3 )
  {
    if ( CEaseInOutInterpolation::Interpolate(&this->_easeInOut, this->_DiceTimer.m_fElapsedTime) )
      v6 = v2->_MaxSpeed;
    else
      v6 = v2->_easeInOut._value;
    acelb = v6;
    if ( v2->_fWheelTime <= 5.0 )
    {
      v7 = v2->_DiceTimer.m_fElapsedTime + v2->_fWheelTime;
    }
    else
    {
      SoundMgr::PlayInterfaceSound(&g_kSoundMgr, GB_SM_ReelLoop);
      v7 = 0.0;
    }
    v2->_fWheelTime = v7;
    v5 = v2->_DiceTimer.m_fElapsedTime * acelb;
LABEL_22:
    acel = v5;
    goto LABEL_23;
  }
  v4 = v3 - 1;
  if ( !v4 )
  {
    if ( CEaseInOutInterpolation::InterpoateWithDist(&this->_easeInOut, this->_DiceTimer.m_fElapsedTime) )
    {
      v2->me_state = 2;
      v2->_bTransiton = 1;
      CEaseInOutInterpolation::SetupWithDist(&v2->_easeInOut, v2->_fOverDist, 0.2, 50.0);
      return;
    }
    acel = v2->_easeInOut._value;
    if ( 0.0 == acel )
      return;
    goto LABEL_23;
  }
  if ( v4 == 1 )
  {
    if ( CEaseInOutInterpolation::InterpoateWithDist(&this->_easeInOut, this->_DiceTimer.m_fElapsedTime) )
    {
      v2->me_state = 3;
      return;
    }
    acela = v2->_easeInOut._value;
    if ( 0.0 == acela )
      return;
    v5 = -acela;
    goto LABEL_22;
  }
LABEL_23:
  if ( v2->me_state != 3 )
  {
    v8 = v2->ms_kSpr.m_pObject->m_spSpr.m_pObject;
    if ( v8 )
      v9 = v8->m_spSprData.m_pObject;
    else
      v9 = 0;
    v10 = v9->m_akGeomData.m_pBase->m_pObject;
    if ( v10 )
    {
      NiScreenElementsData::GetTexture(v10, 0, 0, 0, &kUV);
      acelc = acel * 0.001953125;
      kValue.x = 0.0;
      kValue.y = kUV.y - acelc;
      NiScreenElementsData::SetTexture(v10, 0, 0, 0, &kValue);
      kValue.x = 0.0;
      kValue.y = kUV.y - acelc + (float)v2->cHeightInTex;
      NiScreenElementsData::SetTexture(v10, 0, 1, 0, &kValue);
      kValue.x = 1.0;
      kValue.y = kUV.y - acelc + (float)v2->cHeightInTex;
      NiScreenElementsData::SetTexture(v10, 0, 2, 0, &kValue);
      kValue.x = 1.0;
      kValue.y = kUV.y - acelc;
      NiScreenElementsData::SetTexture(v10, 0, 3, 0, &kValue);
    }
  }
}

//----- (00726370) --------------------------------------------------------
void __thiscall SlotEntry::stop(SlotEntry *this, int num)
{
  SlotEntry *v2; // esi@1
  PgWinSpr *v3; // eax@1
  PgSpr *v4; // eax@1
  PgSprData *v5; // eax@2
  NiScreenElementsData *v6; // edi@4
  double v7; // st7@5
  double v8; // st6@5
  double v9; // st6@6
  NiPoint2 kValue; // [sp+8h] [bp-Ch]@5
  float v11; // [sp+10h] [bp-4h]@5
  float fka; // [sp+1Ch] [bp+8h]@5
  float fkb; // [sp+1Ch] [bp+8h]@5
  float fkc; // [sp+1Ch] [bp+8h]@5
  float fk; // [sp+1Ch] [bp+8h]@5

  v2 = this;
  v3 = this->ms_kSpr.m_pObject;
  this->me_state = 1;
  this->_bUseTimer = 0;
  v4 = v3->m_spSpr.m_pObject;
  if ( v4 )
    v5 = v4->m_spSprData.m_pObject;
  else
    v5 = 0;
  v6 = v5->m_akGeomData.m_pBase->m_pObject;
  if ( v6 )
  {
    v11 = (double)(num + 13);
    fka = v11 / 9.0;
    kValue.x = 0.0;
    kValue.y = fka;
    NiScreenElementsData::SetTexture(v6, 0, 0, 0, &kValue);
    kValue.x = 0.0;
    kValue.y = (float)v2->cHeightInTex + fka;
    NiScreenElementsData::SetTexture(v6, 0, 1, 0, &kValue);
    kValue.x = 1.0;
    kValue.y = (float)v2->cHeightInTex + fka;
    NiScreenElementsData::SetTexture(v6, 0, 2, 0, &kValue);
    kValue.x = 1.0;
    kValue.y = fka;
    NiScreenElementsData::SetTexture(v6, 0, 3, 0, &kValue);
    kValue.y = (double)(rand() % 57 / 4);
    v7 = kValue.y;
    v2->_fOverDist = kValue.y;
    v8 = fka;
    fkb = v11 * (float)v2->cHeightInTex;
    fkc = (v8 - fkb) * 512.0;
    fk = v7 + fkc + 739.5555610656738;
    kValue.y = v2->_MaxSpeed;
    if ( fk > 0.0 )
    {
      v2->_easeInOut._value = 0.0;
      v2->_easeInOut._target = 0.0;
      v9 = kValue.y;
      v2->_easeInOut._speed = kValue.y;
      v2->_easeInOut._acceleration = v9 / 9.0;
      v2->_easeInOut._totalDist = fk;
      v2->_easeInOut._remainingDist = fk;
      v2->_easeInOut._totalTime = 3.0;
      v2->_easeInOut._remainingTime = 3.0;
    }
    SoundMgr::PlayInterfaceSound(&g_kSoundMgr, "GB_SM_ReelEnd");
  }
}

//----- (007264E0) --------------------------------------------------------
void __thiscall SlotMachineWin::_SlotMachineWin(SlotMachineWin *this)
{
  SlotMachineWin *v1; // esi@1
  MHChipEffect **v2; // edi@1
  void *v3; // edi@6
  int v4; // eax@18
  signed int v5; // ecx@18
  NiNode *v6; // edi@20
  NiNode *v7; // edi@25
  void *p; // [sp+8h] [bp-18h]@2
  signed int pa; // [sp+8h] [bp-18h]@5
  signed int v10; // [sp+Ch] [bp-14h]@1
  int v11; // [sp+Ch] [bp-14h]@5
  int v12; // [sp+10h] [bp-10h]@7
  int v13; // [sp+10h] [bp-10h]@12

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&SlotMachineWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&SlotMachineWin::_vftable_;
  v2 = this->m_pkWinEffect;
  v10 = 4;
  do
  {
    p = *v2;
    if ( *v2 )
    {
      MHChipEffect::_MHChipEffect(*v2);
      operator delete(p);
    }
    ++v2;
    --v10;
  }
  while ( v10 );
  v11 = (int)v1->m_pkBarEffect;
  pa = 2;
  do
  {
    v3 = *(void **)v11;
    if ( *(_DWORD *)v11 )
    {
      v12 = *(_DWORD *)v3;
      if ( *(_DWORD *)v3 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v3 + 4)) && v12 )
          (**(void (__stdcall ***)(_DWORD))v12)(1);
        *(_DWORD *)v3 = 0;
      }
      NsEffect::_NsEffect((NsEffect *)((char *)v3 + 28));
      ITableBase<TextDataType3_TextData3>::BeforeTerminate((NiUnsharedGeometryGroup *)((char *)v3 + 4));
      v13 = *(_DWORD *)v3;
      if ( *(_DWORD *)v3 && !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v3 + 4)) && v13 )
        (**(void (__stdcall ***)(_DWORD))v13)(1);
      operator delete(v3);
    }
    v11 += 4;
    --pa;
  }
  while ( pa );
  v1->m_pkBetCoin[0] = 0;
  v1->m_pkBetNum[0] = 0;
  v1->m_pkShareCoin[0] = 0;
  v1->m_pkShareNum[0] = 0;
  v1->m_pkBetCoin[1] = 0;
  v1->m_pkBetNum[1] = 0;
  v1->m_pkShareCoin[1] = 0;
  v1->m_pkShareNum[1] = 0;
  v1->m_pkBetCoin[2] = 0;
  v1->m_pkBetNum[2] = 0;
  v1->m_pkShareCoin[2] = 0;
  v1->m_pkShareNum[2] = 0;
  v1->m_pkBetCoin[3] = 0;
  v1->m_pkBetNum[3] = 0;
  v1->m_pkShareCoin[3] = 0;
  v1->m_pkShareNum[3] = 0;
  v1->m_pkBetCoin[4] = 0;
  v1->m_pkBetNum[4] = 0;
  v1->m_pkShareCoin[4] = 0;
  v1->m_pkShareNum[4] = 0;
  v1->m_pkBetCoin[5] = 0;
  v1->m_pkBetNum[5] = 0;
  v1->m_pkShareCoin[5] = 0;
  v1->m_pkShareNum[5] = 0;
  v1->m_pkBetCoin[6] = 0;
  v1->m_pkBetNum[6] = 0;
  v1->m_pkShareCoin[6] = 0;
  v1->m_pkShareNum[6] = 0;
  v1->m_pkBetCoin[7] = 0;
  v1->m_pkBetNum[7] = 0;
  v1->m_pkShareCoin[7] = 0;
  v1->m_pkShareNum[7] = 0;
  v4 = (int)v1->m_pkMyCoinNum;
  v5 = 12;
  do
  {
    *(_DWORD *)(v4 - 48) = 0;
    *(_DWORD *)v4 = 0;
    v4 += 4;
    --v5;
  }
  while ( v5 );
  v1->m_pkBetIndicator[0] = 0;
  v1->m_pkBetIndicator[1] = 0;
  v1->m_pkBetIndicator[2] = 0;
  v1->m_pkBetIndicator[3] = 0;
  v1->m_pkBetIndicator[4] = 0;
  v1->m_pkBetIndicator[5] = 0;
  v1->m_pkBetIndicator[6] = 0;
  v1->m_pkBetIndicator[7] = 0;
  v1->m_pkBetIndicator[8] = 0;
  v1->m_pkBetIndicator[9] = 0;
  v1->m_pkBetIndicator[10] = 0;
  v1->m_pkBetIndicator[11] = 0;
  v1->m_pkBetIndicator[12] = 0;
  v1->m_pkBetIndicator[13] = 0;
  v1->m_pkBetIndicator[14] = 0;
  v1->m_pkBetIndicator[15] = 0;
  v1->m_pkBetIndicator[16] = 0;
  v1->m_pkBetIndicator[17] = 0;
  v1->m_pkBetIndicator[18] = 0;
  v1->m_pkBetIndicator[19] = 0;
  v1->m_pkBetIndicator[20] = 0;
  v1->m_pkBetIndicator[21] = 0;
  v1->m_pkBetIndicator[22] = 0;
  v1->m_pkBetIndicator[23] = 0;
  v1->m_pkBetIndicator[24] = 0;
  v1->m_pkBetIndicator[25] = 0;
  v1->m_pkBetIndicator[26] = 0;
  v1->m_pkBetIndicator[27] = 0;
  v1->m_pkBetIndicator[28] = 0;
  v1->m_pkBetIndicator[29] = 0;
  v1->m_pkBetIndicator[30] = 0;
  v1->m_pkBetIndicator[31] = 0;
  v1->m_pkJackPotText[0] = 0;
  v1->m_pkJackPotText[1] = 0;
  v1->m_pkJackPotText[2] = 0;
  v1->m_pkButs[0] = 0;
  v1->m_pkButs[1] = 0;
  v1->m_pkButs[2] = 0;
  v1->m_pkButs[3] = 0;
  v1->m_pkButs[4] = 0;
  v1->m_pkButs[5] = 0;
  v1->m_pkWinLines[0] = 0;
  v1->m_pkWinLines[1] = 0;
  v1->m_pkWinLines[2] = 0;
  v1->m_pkWinLines[3] = 0;
  v1->m_pkWinLines[4] = 0;
  v1->m_pkWinLines[5] = 0;
  v1->m_pkWinLines[6] = 0;
  v1->m_pkWinLines[7] = 0;
  v1->m_pkWinSlots[0] = 0;
  v1->m_pkWinSlots[1] = 0;
  v1->m_pkWinSlots[2] = 0;
  v1->m_pkWinSlots[3] = 0;
  v1->m_pkWinSlots[4] = 0;
  v1->m_pkWinSlots[5] = 0;
  v1->m_pkWinSlots[6] = 0;
  v1->m_pkWinSlots[7] = 0;
  v1->m_pkWinSlots[8] = 0;
  v6 = v1->ms_EffectPos.m_pObject;
  if ( v6 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v1->ms_EffectPos.m_pObject = 0;
  }
  v7 = v1->ms_EffectPos.m_pObject;
  if ( v7
    && !InterlockedDecrement((volatile LONG *)&v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v7 )
    v7->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
  _eh_vector_destructor_iterator_(v1->ms_Slot, 0x68u, 9, (void (__thiscall *)(void *))SlotEntry::_SlotEntry);
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D8134: using guessed type int (__stdcall *SlotMachineWin___vftable_)(int uiFlags);
// 9D8154: using guessed type int (__thiscall *SlotMachineWin___vftable_)(void *p, char);

//----- (007268C0) --------------------------------------------------------
bool __thiscall SlotMachineWin::Create(SlotMachineWin *this, PgFrameWork *pkFrameWork)
{
  SlotMachineWin *v2; // ebx@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  PgSprData *v5; // eax@4
  NiNode *v6; // esi@5
  PgWinSpr *v8; // eax@11
  PgWinSpr *v9; // eax@13
  PgWinSpr *v10; // eax@15
  PgWinSpr *v11; // eax@17
  PgWinSpr *v12; // eax@19
  PgWinSpr *v13; // eax@21
  PgWinSpr *v14; // eax@23
  PgWinSpr *v15; // eax@25
  PgWinSpr *v16; // eax@27
  PgWinSpr *v17; // eax@29
  PgWinSpr *v18; // esi@29
  D3DXCOLOR v19; // STA0_16@37
  char *v20; // eax@37
  PgWinText *v21; // eax@37
  NiRefObjectVtbl *v22; // esi@37
  PgFont *v23; // eax@37
  D3DXCOLOR v24; // STA0_16@37
  PgWinText *v25; // eax@37
  NiRefObjectVtbl *v26; // esi@37
  PgFont *v27; // eax@37
  PgWinSpr *v28; // esi@37
  char *v29; // eax@37
  PgWinSpr *v30; // esi@37
  char *v31; // eax@37
  PgWinSpr *v32; // esi@37
  char *v33; // eax@37
  PgWinSpr *v34; // esi@37
  char *v35; // eax@37
  PgWinSpr *v36; // esi@37
  char *v37; // eax@37
  PgWinSpr *v38; // esi@37
  char *v39; // eax@37
  PgWinBut *v40; // esi@37
  char *v41; // eax@37
  PgWinBut *v42; // esi@37
  char *v43; // eax@37
  PgWinBut *v44; // esi@37
  char *v45; // eax@37
  PgWinBut *v46; // eax@37
  char *v47; // eax@37
  PgWinBut *v48; // eax@37
  char *v49; // eax@37
  PgWinBut *v50; // eax@37
  char *v51; // eax@37
  PgWinBut *v52; // eax@37
  char *v53; // eax@37
  PgWinBut *v54; // eax@37
  char *v55; // eax@37
  PgWinBut *v56; // eax@37
  char *v57; // eax@37
  void *v58; // esi@37
  int v59; // edi@37
  D3DXCOLOR v60; // STA0_16@38
  PgWinText *v61; // eax@38
  NiRefObjectVtbl *v62; // esi@38
  PgFont *v63; // eax@38
  signed int v64; // esi@39
  PgWinSpr *v65; // eax@40
  signed int v66; // esi@43
  int v67; // edi@43
  PgWinSpr *v68; // eax@44
  PgWinSpr *v69; // eax@47
  signed int v70; // esi@49
  SlotEntry *v71; // edi@49
  signed int v72; // esi@51
  int v73; // edi@51
  PgWinSpr *v74; // eax@52
  signed int v75; // esi@55
  int v76; // edi@55
  PgWinSpr *v77; // eax@56
  NiTexturePalette *v78; // esi@59
  int v79; // eax@61
  char v80; // cl@62
  char *v81; // eax@63
  char v82; // cl@64
  int v83; // edx@65
  int v84; // ecx@65
  int v85; // edx@65
  int v86; // ecx@65
  void *v87; // edi@68
  signed int v88; // esi@68
  unsigned int v89; // edi@70
  int v90; // esi@70
  PgWinSpr *v91; // eax@71
  PgWinSpr *v92; // eax@71
  unsigned int v93; // edi@72
  int v94; // esi@72
  PgWinSpr *v95; // eax@73
  PgWinSpr *v96; // eax@73
  void *v97; // edi@74
  signed int v98; // esi@74
  unsigned int v99; // edi@76
  int v100; // esi@76
  PgWinSpr *v101; // eax@77
  PgWinSpr *v102; // eax@77
  int v103; // eax@80
  char v104; // cl@81
  char *v105; // eax@82
  char v106; // cl@83
  int v107; // edx@84
  int v108; // ecx@84
  int v109; // edx@84
  NiObject *v110; // edi@84
  void *v111; // esi@84
  int v112; // edi@85
  void *v113; // eax@90
  int v114; // ecx@94
  int v115; // eax@96
  char v116; // cl@97
  char *v117; // eax@98
  char v118; // cl@99
  int v119; // ecx@100
  int v120; // edx@100
  int v121; // ecx@100
  NiObject *v122; // edi@100
  void *v123; // esi@100
  int v124; // edi@101
  void *v125; // eax@106
  int v126; // eax@112
  char v127; // cl@113
  char *v128; // eax@114
  char v129; // cl@115
  int v130; // edx@116
  int v131; // ecx@116
  int v132; // edx@116
  NiObject *v133; // edi@116
  void *v134; // esi@116
  int v135; // edi@117
  void *v136; // eax@122
  int v137; // eax@128
  char v138; // cl@129
  char *v139; // eax@130
  char v140; // cl@131
  int v141; // edx@132
  int v142; // ecx@132
  int v143; // edx@132
  NiObject *v144; // edi@132
  void *v145; // esi@132
  int v146; // edi@133
  void *v147; // eax@138
  int v148; // eax@144
  char v149; // cl@145
  char *v150; // eax@146
  char v151; // cl@147
  int v152; // ecx@148
  int v153; // edx@148
  int v154; // ecx@148
  int v155; // edx@148
  NiObject *v156; // edi@148
  void *v157; // esi@148
  int v158; // edi@149
  void *v159; // eax@154
  int v160; // eax@160
  char v161; // cl@161
  void *v162; // edi@162
  char v163; // al@163
  int v164; // edi@164
  NiObject *v165; // edi@164
  void *v166; // esi@164
  int v167; // edi@165
  void *v168; // eax@165
  D3DXCOLOR v169; // STA0_16@175
  PgWinText *v170; // esi@175
  NiRefObjectVtbl *v171; // edi@175
  PgFont *v172; // eax@175
  NiNode *v173; // edi@175
  NiNode *v174; // esi@181
  __int64 v175; // STC8_8@181
  _BYTE v176[12]; // STAC_12@181
  int v177; // eax@181
  NiQuaternion v178; // ST9C_16@181
  NiNode *v179; // esi@182
  NiNode *v180; // esi@185
  volatile LONG *v181; // [sp+B0h] [bp-10Ch]@6
  unsigned int v182; // [sp+B4h] [bp-108h]@1
  char *pcTag; // [sp+D0h] [bp-ECh]@76
  int v184; // [sp+D4h] [bp-E8h]@76
  int v185; // [sp+D8h] [bp-E4h]@76
  int v186; // [sp+DCh] [bp-E0h]@76
  void *acShareBetType[8]; // [sp+E0h] [bp-DCh]@70
  int uiLeft; // [sp+100h] [bp-BCh]@4
  int uiTop; // [sp+104h] [bp-B8h]@4
  void *v190; // [sp+108h] [bp-B4h]@84
  NiPointer<NiNode> spNumNode; // [sp+10Ch] [bp-B0h]@59
  NiPointer<NiNode> spNode; // [sp+110h] [bp-ACh]@1
  UIUtil ui; // [sp+114h] [bp-A8h]@11
  void *pkSprData; // [sp+128h] [bp-94h]@38
  char acNodeName[128]; // [sp+12Ch] [bp-90h]@38
  unsigned int v196; // [sp+1ACh] [bp-10h]@1
  int v197; // [sp+1B8h] [bp-4h]@1
  int v198; // [sp+1BCh] [bp+0h]@1

  v196 = (unsigned int)&v198 ^ __security_cookie;
  v182 = (unsigned int)&v198 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v197 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GB_SlotMachineMain.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  if ( !spNode.m_pObject )
    return 0;
  v5 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, 0);
  if ( !PgWinFrame::Create(&v2->baseclass_0, 0, 0, v5, 0, pkFrameWork, "SlotMachineWin", 0) )
  {
    v6 = spNode.m_pObject;
    v197 = -1;
    if ( spNode.m_pObject )
    {
      v181 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
      goto LABEL_7;
    }
    return 0;
  }
  UIUtil::UIUtil(&ui);
  LOBYTE(v197) = 1;
  UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
  UIUtil::SetOffset(&ui, 0, 0);
  UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
  v8 = UIUtil::CreateSpr(&ui, "Panel01", 0);
  if ( v8 )
    v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v8,
      0);
  v9 = UIUtil::CreateSpr(&ui, "Panel02", 0);
  if ( v9 )
    v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v9,
      0);
  v10 = UIUtil::CreateSpr(&ui, "Panel03", 0);
  if ( v10 )
    v10->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v10,
      0);
  v11 = UIUtil::CreateSpr(&ui, "Panel04", 0);
  if ( v11 )
    v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v11,
      0);
  v12 = UIUtil::CreateSpr(&ui, "Panel05", 0);
  if ( v12 )
    v12->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v12,
      0);
  v13 = UIUtil::CreateSpr(&ui, "Panel06", 0);
  if ( v13 )
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v13,
      0);
  v14 = UIUtil::CreateSpr(&ui, "Panel07", 0);
  if ( v14 )
    v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v14,
      0);
  v15 = UIUtil::CreateSpr(&ui, "Panel08", 0);
  if ( v15 )
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v15,
      0);
  v16 = UIUtil::CreateSpr(&ui, "Panel09", 0);
  if ( v16 )
    v16->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v16,
      0);
  v17 = UIUtil::CreateSpr(&ui, "Coin", 0);
  v18 = v17;
  if ( v17 )
    v17->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v17,
      0);
  v2->m_pkFrameSpr[0] = UIUtil::CreateSpr(&ui, "Cooper", 0);
  if ( v18 )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
  v2->m_pkFrameSpr[1] = UIUtil::CreateSpr(&ui, "Silver", 0);
  if ( v18 )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
  v2->m_pkFrameSpr[2] = UIUtil::CreateSpr(&ui, "Gold", 0);
  if ( v18 )
    v18->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v18,
      0);
  *(_QWORD *)&v19.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v19.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v20 = TextData2::Get(0x9CEEC8C9u);
  v21 = UIUtil::CreateTextNoSpr(&ui, "Title01", v20, COERCE_D3DXCOLOR(v19.r), 5u);
  v2->m_pkTitleText[0] = v21;
  v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v23 = Font::Get(MAIN_MENU);
  v22[113].__vecDelDtor((NiRefObject *)v2->m_pkTitleText[0], (unsigned int)v23);
  ((void (__stdcall *)(signed int))v2->m_pkTitleText[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  v25 = UIUtil::CreateTextNoSpr(&ui, "Title02", byte_9D73B6, COERCE_D3DXCOLOR(v24.r), 5u);
  v2->m_pkTitleText[1] = v25;
  v26 = v25->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v27 = Font::Get(MAIN_MENU);
  v26[113].__vecDelDtor((NiRefObject *)v2->m_pkTitleText[1], (unsigned int)v27);
  ((void (__stdcall *)(signed int))v2->m_pkTitleText[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
  v28 = UIUtil::CreateSpr(&ui, "Button1", 0);
  v28->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v29 = TextData2::Get(0xBB02D632u);
  PgWin::SetToolTipWinText(&v28->baseclass_0, v29);
  v30 = UIUtil::CreateSpr(&ui, "Button2", 0);
  v30->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v31 = TextData2::Get(0x7C9E7B6Du);
  PgWin::SetToolTipWinText(&v30->baseclass_0, v31);
  v32 = UIUtil::CreateSpr(&ui, "Button3", 0);
  v32->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v33 = TextData2::Get(0x6DAE81D1u);
  PgWin::SetToolTipWinText(&v32->baseclass_0, v33);
  v34 = UIUtil::CreateSpr(&ui, "ButtonAll", 0);
  v34->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v35 = TextData2::Get(0x30642117u);
  PgWin::SetToolTipWinText(&v34->baseclass_0, v35);
  v36 = UIUtil::CreateSpr(&ui, "ButtonCenter", 0);
  v36->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v37 = TextData2::Get(0x7AA98967u);
  PgWin::SetToolTipWinText(&v36->baseclass_0, v37);
  v38 = UIUtil::CreateSpr(&ui, "ButtonJackpot", 0);
  v38->baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v39 = TextData2::Get(0xD9692A0Cu);
  PgWin::SetToolTipWinText(&v38->baseclass_0, v39);
  UIUtil::CreateBtn(&ui, 0, "MinNor", "MinClick", "MinOver", 0, 0);
  v40 = UIUtil::CreateBtn(&ui, 1u, "ExitNor", "ExitClick", "ExitOver", 0, 0);
  v40->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v41 = TextData2::Get(0xFA4A423Fu);
  PgWin::SetToolTipWinText(&v40->baseclass_0.baseclass_0, v41);
  v42 = UIUtil::CreateBtn(&ui, 9u, "RankingNor", "RankingClick", "RankingOver", 0, 0);
  v42->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v43 = TextData2::Get(0xD9CBC7D8u);
  PgWin::SetToolTipWinText(&v42->baseclass_0.baseclass_0, v43);
  v44 = UIUtil::CreateBtn(&ui, 8u, "HelpNor", "HelpClick", "HelpOver", 0, 0);
  v44->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v45 = TextData2::Get(0x34361593u);
  PgWin::SetToolTipWinText(&v44->baseclass_0.baseclass_0, v45);
  UIUtil::CreateBtn(&ui, 1u, "CloseNor", "CloseClick", "CloseOver", 0, 0);
  v46 = UIUtil::CreateBtn(&ui, 3u, "BetOneNor", "BetOneClick", "BetOneOver", "BetOneDisable", 0);
  v2->m_pkButs[0] = v46;
  v46->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v47 = TextData2::Get(0x1883316Fu);
  PgWin::SetToolTipWinText(&v2->m_pkButs[0]->baseclass_0.baseclass_0, v47);
  v2->m_pkButs[0]->m_bEnableClickSound = 0;
  v48 = UIUtil::CreateBtn(&ui, 5u, "BetEightNor", "BetEightClick", "BetEightOver", "BetEightDisable", 0);
  v2->m_pkButs[1] = v48;
  v48->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v49 = TextData2::Get(0x25BB707Au);
  PgWin::SetToolTipWinText(&v2->m_pkButs[1]->baseclass_0.baseclass_0, v49);
  v2->m_pkButs[1]->m_bEnableClickSound = 0;
  v50 = UIUtil::CreateBtn(&ui, 4u, "CancelOneBetNor", "CancelOneBetClick", "CancelOneBetOver", "CancelOneBetDisable", 0);
  v2->m_pkButs[2] = v50;
  v50->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v51 = TextData2::Get(0xB4D603B3u);
  PgWin::SetToolTipWinText(&v2->m_pkButs[2]->baseclass_0.baseclass_0, v51);
  v2->m_pkButs[2]->m_bEnableClickSound = 0;
  v52 = UIUtil::CreateBtn(&ui, 2u, "SpinNor", "SpinClick", "SpinOver", "SpinDisable", 0);
  v2->m_pkButs[4] = v52;
  v52->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v53 = TextData2::Get(0xFC13301Au);
  PgWin::SetToolTipWinText(&v2->m_pkButs[4]->baseclass_0.baseclass_0, v53);
  v2->m_pkButs[4]->m_bEnableClickSound = 0;
  v54 = UIUtil::CreateBtn(&ui, 7u, "StopNor", "StopClick", "StopOver", "StopDisable", 0);
  v2->m_pkButs[5] = v54;
  v54->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v55 = TextData2::Get(0xFC15361Eu);
  PgWin::SetToolTipWinText(&v2->m_pkButs[5]->baseclass_0.baseclass_0, v55);
  v2->m_pkButs[5]->m_bEnableClickSound = 0;
  v56 = UIUtil::CreateBtn(&ui, 6u, "ResetNor", "ResetClick", "ResetOver", "ResetDisable", 0);
  v2->m_pkButs[3] = v56;
  v56->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
  v57 = TextData2::Get(0xF0592831u);
  PgWin::SetToolTipWinText(&v2->m_pkButs[3]->baseclass_0.baseclass_0, v57);
  v2->m_pkButs[3]->m_bEnableClickSound = 0;
  v58 = 0;
  v59 = (int)v2->m_pkJackPotText;
  do
  {
    memset(acNodeName, 0, 0x80u);
    pkSprData = (char *)v58 + 1;
    sprintf(acNodeName, "Coin%.2d");
    *(_QWORD *)&v60.r = *(_QWORD *)&Color::m_kDxWhiteColor;
    *(_QWORD *)&v60.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
    v61 = UIUtil::CreateTextNoSpr(&ui, acNodeName, byte_9D73DA, COERCE_D3DXCOLOR(v60.r), 5u);
    *(_DWORD *)v59 = v61;
    v62 = v61->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
    v63 = Font::Get(MAIN_MENU);
    v62[113].__vecDelDtor(*(NiRefObject **)v59, (unsigned int)v63);
    v58 = pkSprData;
    v59 += 4;
  }
  while ( (signed int)pkSprData < 3 );
  v64 = 0;
  do
  {
    memset(acNodeName, 0, 0x80u);
    ++v64;
    sprintf(acNodeName, "LineDarkLight%.2d");
    v65 = UIUtil::CreateSpr(&ui, acNodeName, 0);
    if ( v65 )
      v65->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v65,
        1u);
  }
  while ( v64 < 8 );
  v66 = 0;
  v67 = (int)v2->m_pkWinLines;
  do
  {
    memset(acNodeName, 0, 0x80u);
    ++v66;
    sprintf(acNodeName, "LineHighLight%.2d");
    v68 = UIUtil::CreateSpr(&ui, acNodeName, 0);
    *(_DWORD *)v67 = v68;
    if ( v68 )
    {
      v68->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v68,
        1u);
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v67 + 276))(1.0);
    }
    v67 += 4;
  }
  while ( v66 < 8 );
  v69 = UIUtil::CreateSpr(&ui, "BaseSlot", 0);
  if ( v69 )
    v69->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v69,
      0);
  v70 = 0;
  v71 = v2->ms_Slot;
  do
  {
    memset(acNodeName, 0, 0x80u);
    ++v70;
    sprintf(acNodeName, "Slot%.2d");
    SlotEntry::setup(
      v71,
      &spNode.m_pObject->baseclass_0,
      acNodeName,
      &v2->baseclass_0.baseclass_0.baseclass_0,
      SlotMachineWin::ms_fk1,
      SlotMachineWin::ms_fk2);
    ++v71;
  }
  while ( v70 < 9 );
  v72 = 0;
  v73 = (int)v2->m_pkWinSlots;
  do
  {
    memset(acNodeName, 0, 0x80u);
    ++v72;
    sprintf(acNodeName, "SlotHighLight%.2d");
    v74 = UIUtil::CreateSpr(&ui, acNodeName, 0);
    *(_DWORD *)v73 = v74;
    if ( v74 )
    {
      v74->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v74,
        1u);
      ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(**(_DWORD **)v73 + 276))(v2->m_fAlpha);
    }
    v73 += 4;
  }
  while ( v72 < 9 );
  v75 = 0;
  v76 = (int)v2->m_pkBetIndicator;
  do
  {
    memset(acNodeName, 0, 0x80u);
    ++v75;
    sprintf(acNodeName, "Bet%.2d");
    v77 = UIUtil::CreateSpr(&ui, acNodeName, 0);
    *(_DWORD *)v76 = v77;
    if ( v77 )
      v77->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
        (NiRefObject *)v77,
        0);
    v76 += 4;
  }
  while ( v75 < 32 );
  v2->m_iBetNum = -1;
  spNumNode.m_pObject = 0;
  v78 = dword_B70448;
  LOBYTE(v197) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  v79 = 0;
  do
  {
    v80 = *(&Folder::m_acMenu + v79);
    *(&Folder::m_acMerge + v79++) = v80;
  }
  while ( v80 );
  v81 = &Folder::m_acMerge - 1;
  do
    v82 = (v81++)[1];
  while ( v82 );
  v83 = dword_9D7704;
  *(_DWORD *)v81 = dword_9D7700;
  v84 = dword_9D7708;
  *((_DWORD *)v81 + 1) = v83;
  v85 = dword_9D770C;
  *((_DWORD *)v81 + 2) = v84;
  v86 = dword_9D7710;
  *((_DWORD *)v81 + 3) = v85;
  LOWORD(v85) = word_9D7714;
  *((_DWORD *)v81 + 4) = v86;
  *((_WORD *)v81 + 10) = v85;
  PgUtil::LoadNodeNifFile(&Folder::m_acMerge, &spNumNode, v78);
  if ( !spNumNode.m_pObject )
  {
    LOBYTE(v197) = 0;
    UIUtil::_UIUtil(&ui);
    v6 = spNode.m_pObject;
    v197 = -1;
    if ( spNode.m_pObject )
    {
      v181 = (volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount;
LABEL_7:
      if ( !InterlockedDecrement(v181) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v87 = PgSprData::Create(&spNumNode.m_pObject->baseclass_0, "BetMoneyNum00", &uiLeft, &uiTop, 0);
  pkSprData = v87;
  v88 = 0;
  do
  {
    memset(acNodeName, 0, 0x80u);
    ++v88;
    sprintf(acNodeName, "BetMoneyNum%.2d");
    PgSprData::Add((PgSprData *)v87, &spNumNode.m_pObject->baseclass_0, acNodeName);
  }
  while ( v88 < 9 );
  acShareBetType[0] = "BetCoin08";
  acShareBetType[1] = "BetCoin01";
  acShareBetType[2] = "BetCoin02";
  acShareBetType[3] = "BetCoin03";
  acShareBetType[4] = "BetCoin04";
  acShareBetType[5] = "BetCoin05";
  acShareBetType[6] = "BetCoin06";
  acShareBetType[7] = "BetCoin07";
  v89 = 0;
  v90 = (int)v2->m_pkBetCoin;
  do
  {
    v91 = UIUtil::CreateSpr(&ui, (char *)acShareBetType[v89], 0);
    *(_DWORD *)v90 = v91;
    v91->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v91,
      1u);
    v92 = PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)(v90 + 32) = v92;
    v92->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v92,
      0);
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)v90 + 116))(*(_DWORD *)(v90 + 32), 0);
    ++v89;
    v90 += 4;
  }
  while ( v89 < 8 );
  acShareBetType[0] = "ShareCoin08";
  acShareBetType[1] = "ShareCoin01";
  acShareBetType[2] = "ShareCoin02";
  acShareBetType[3] = "ShareCoin03";
  acShareBetType[4] = "ShareCoin04";
  acShareBetType[5] = "ShareCoin05";
  acShareBetType[6] = "ShareCoin06";
  acShareBetType[7] = "ShareCoin07";
  v93 = 0;
  v94 = (int)v2->m_pkShareCoin;
  do
  {
    v95 = UIUtil::CreateSpr(&ui, (char *)acShareBetType[v93], 0);
    *(_DWORD *)v94 = v95;
    v95->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v95,
      1u);
    v96 = PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)(v94 + 32) = v96;
    v96->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v96,
      0);
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)v94 + 116))(*(_DWORD *)(v94 + 32), 0);
    ++v93;
    v94 += 4;
  }
  while ( v93 < 8 );
  v97 = PgSprData::Create(&spNumNode.m_pObject->baseclass_0, "Num00", &uiLeft, &uiTop, 0);
  pkSprData = v97;
  v98 = 0;
  do
  {
    memset(acNodeName, 0, 0x80u);
    ++v98;
    sprintf(acNodeName, "Num%.2d");
    PgSprData::Add((PgSprData *)v97, &spNumNode.m_pObject->baseclass_0, acNodeName);
  }
  while ( v98 < 9 );
  pcTag = "MyMoney01";
  v184 = (int)"MyMoney02";
  v185 = (int)"MyMoney03";
  v186 = (int)"MyMoney04";
  acShareBetType[0] = "MyMoney05";
  acShareBetType[1] = "MyMoney06";
  acShareBetType[2] = "MyMoney07";
  acShareBetType[3] = "MyMoney08";
  acShareBetType[4] = "MyMoney09";
  acShareBetType[5] = "MyMoney10";
  acShareBetType[6] = "MyMoney11";
  acShareBetType[7] = "MyMoney12";
  v99 = 0;
  v100 = (int)v2->m_pkMyCoinNum;
  do
  {
    v101 = UIUtil::CreateSpr(&ui, (&pcTag)[4 * v99], 0);
    *(_DWORD *)(v100 - 48) = v101;
    v101->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
      (NiRefObject *)v101,
      1u);
    v102 = PgWinSpr::CreateWin(uiLeft, uiTop, (PgSprData *)pkSprData, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
    *(_DWORD *)v100 = v102;
    v102->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
      (NiRefObject *)v102,
      0);
    (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v100 - 48) + 116))(*(_DWORD *)v100, 0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v100 + 492))(0);
    ++v99;
    v100 += 4;
  }
  while ( v99 < 0xC );
  if ( !Folder::m_bInit )
    Folder::Init();
  v103 = 0;
  do
  {
    v104 = *(&Folder::m_acEffect + v103);
    *(&Folder::m_acMerge + v103++) = v104;
  }
  while ( v104 );
  v105 = &Folder::m_acMerge - 1;
  do
    v106 = (v105++)[1];
  while ( v106 );
  v107 = dword_9D789C;
  *(_DWORD *)v105 = dword_9D7898;
  v108 = dword_9D78A0;
  *((_DWORD *)v105 + 1) = v107;
  v109 = dword_9D78A4;
  *((_DWORD *)v105 + 2) = v108;
  LOWORD(v108) = word_9D78A8;
  *((_DWORD *)v105 + 3) = v109;
  LOBYTE(v109) = byte_9D78AA;
  *((_WORD *)v105 + 8) = v108;
  v105[18] = v109;
  v110 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
  v111 = operator new(0x60u);
  v190 = v111;
  LOBYTE(v197) = 3;
  if ( v111 )
  {
    pkSprData = NiObject::Clone(v110);
    *(_DWORD *)v111 = 0;
    LOBYTE(v197) = 4;
    CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v111 + 4));
    LOBYTE(v197) = 5;
    NsEffect::NsEffect((NsEffect *)((char *)v111 + 28));
    v112 = *(_DWORD *)v111;
    LOBYTE(v197) = 6;
    if ( (void *)v112 != pkSprData )
    {
      if ( v112 && !InterlockedDecrement((volatile LONG *)(v112 + 4)) && v112 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v112)(v112, 1);
      v113 = pkSprData;
      *(_DWORD *)v111 = pkSprData;
      if ( v113 )
        InterlockedIncrement((volatile LONG *)v113 + 1);
    }
    *((_WORD *)v111 + 32) = 0;
  }
  else
  {
    v111 = 0;
  }
  v2->m_pkWinEffect[0] = (MHChipEffect *)v111;
  v114 = *(_DWORD *)v111;
  LOBYTE(v197) = 2;
  NiMatrix3::MakeRotation((NiMatrix3 *)(v114 + 52), NI_HALF_PI, 0.0, 0.5, 0.0);
  if ( !Folder::m_bInit )
    Folder::Init();
  v115 = 0;
  do
  {
    v116 = *(&Folder::m_acEffect + v115);
    *(&Folder::m_acMerge + v115++) = v116;
  }
  while ( v116 );
  v117 = &Folder::m_acMerge - 1;
  do
    v118 = (v117++)[1];
  while ( v118 );
  v119 = dword_9D78B0;
  *(_DWORD *)v117 = dword_9D78AC;
  v120 = dword_9D78B4;
  *((_DWORD *)v117 + 1) = v119;
  v121 = dword_9D78B8;
  *((_DWORD *)v117 + 2) = v120;
  LOWORD(v120) = word_9D78BC;
  *((_DWORD *)v117 + 3) = v121;
  LOBYTE(v121) = byte_9D78BE;
  *((_WORD *)v117 + 8) = v120;
  v117[18] = v121;
  v122 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
  v123 = operator new(0x60u);
  v190 = v123;
  LOBYTE(v197) = 7;
  if ( v123 )
  {
    pkSprData = NiObject::Clone(v122);
    *(_DWORD *)v123 = 0;
    LOBYTE(v197) = 8;
    CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v123 + 4));
    LOBYTE(v197) = 9;
    NsEffect::NsEffect((NsEffect *)((char *)v123 + 28));
    v124 = *(_DWORD *)v123;
    LOBYTE(v197) = 10;
    if ( (void *)v124 != pkSprData )
    {
      if ( v124 && !InterlockedDecrement((volatile LONG *)(v124 + 4)) && v124 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v124)(v124, 1);
      v125 = pkSprData;
      *(_DWORD *)v123 = pkSprData;
      if ( v125 )
        InterlockedIncrement((volatile LONG *)v125 + 1);
    }
    *((_WORD *)v123 + 32) = 0;
  }
  else
  {
    v123 = 0;
  }
  v2->m_pkWinEffect[1] = (MHChipEffect *)v123;
  LOBYTE(v197) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  v126 = 0;
  do
  {
    v127 = *(&Folder::m_acEffect + v126);
    *(&Folder::m_acMerge + v126++) = v127;
  }
  while ( v127 );
  v128 = &Folder::m_acMerge - 1;
  do
    v129 = (v128++)[1];
  while ( v129 );
  v130 = dword_9D78C4;
  *(_DWORD *)v128 = dword_9D78C0;
  v131 = dword_9D78C8;
  *((_DWORD *)v128 + 1) = v130;
  v132 = dword_9D78CC;
  *((_DWORD *)v128 + 2) = v131;
  LOWORD(v131) = word_9D78D0;
  *((_DWORD *)v128 + 3) = v132;
  *((_WORD *)v128 + 8) = v131;
  v133 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
  v134 = operator new(0x60u);
  v190 = v134;
  LOBYTE(v197) = 11;
  if ( v134 )
  {
    pkSprData = NiObject::Clone(v133);
    *(_DWORD *)v134 = 0;
    LOBYTE(v197) = 12;
    CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v134 + 4));
    LOBYTE(v197) = 13;
    NsEffect::NsEffect((NsEffect *)((char *)v134 + 28));
    v135 = *(_DWORD *)v134;
    LOBYTE(v197) = 14;
    if ( (void *)v135 != pkSprData )
    {
      if ( v135 && !InterlockedDecrement((volatile LONG *)(v135 + 4)) && v135 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v135)(v135, 1);
      v136 = pkSprData;
      *(_DWORD *)v134 = pkSprData;
      if ( v136 )
        InterlockedIncrement((volatile LONG *)v136 + 1);
    }
    *((_WORD *)v134 + 32) = 0;
  }
  else
  {
    v134 = 0;
  }
  v2->m_pkWinEffect[2] = (MHChipEffect *)v134;
  LOBYTE(v197) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  v137 = 0;
  do
  {
    v138 = *(&Folder::m_acEffect + v137);
    *(&Folder::m_acMerge + v137++) = v138;
  }
  while ( v138 );
  v139 = &Folder::m_acMerge - 1;
  do
    v140 = (v139++)[1];
  while ( v140 );
  v141 = dword_9D78D8;
  *(_DWORD *)v139 = dword_9D78D4;
  v142 = dword_9D78DC;
  *((_DWORD *)v139 + 1) = v141;
  v143 = dword_9D78E0;
  *((_DWORD *)v139 + 2) = v142;
  LOWORD(v142) = word_9D78E4;
  *((_DWORD *)v139 + 3) = v143;
  LOBYTE(v143) = byte_9D78E6;
  *((_WORD *)v139 + 8) = v142;
  v139[18] = v143;
  v144 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
  v145 = operator new(0x60u);
  v190 = v145;
  LOBYTE(v197) = 15;
  if ( v145 )
  {
    pkSprData = NiObject::Clone(v144);
    *(_DWORD *)v145 = 0;
    LOBYTE(v197) = 16;
    CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v145 + 4));
    LOBYTE(v197) = 17;
    NsEffect::NsEffect((NsEffect *)((char *)v145 + 28));
    v146 = *(_DWORD *)v145;
    LOBYTE(v197) = 18;
    if ( (void *)v146 != pkSprData )
    {
      if ( v146 && !InterlockedDecrement((volatile LONG *)(v146 + 4)) && v146 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v146)(v146, 1);
      v147 = pkSprData;
      *(_DWORD *)v145 = pkSprData;
      if ( v147 )
        InterlockedIncrement((volatile LONG *)v147 + 1);
    }
    *((_WORD *)v145 + 32) = 0;
  }
  else
  {
    v145 = 0;
  }
  v2->m_pkWinEffect[3] = (MHChipEffect *)v145;
  LOBYTE(v197) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  v148 = 0;
  do
  {
    v149 = *(&Folder::m_acEffect + v148);
    *(&Folder::m_acMerge + v148++) = v149;
  }
  while ( v149 );
  v150 = &Folder::m_acMerge - 1;
  do
    v151 = (v150++)[1];
  while ( v151 );
  v152 = dword_9D78EC;
  *(_DWORD *)v150 = dword_9D78E8;
  v153 = dword_9D78F0;
  *((_DWORD *)v150 + 1) = v152;
  v154 = dword_9D78F4;
  *((_DWORD *)v150 + 2) = v153;
  v155 = dword_9D78F8;
  *((_DWORD *)v150 + 3) = v154;
  LOBYTE(v154) = byte_9D78FC;
  *((_DWORD *)v150 + 4) = v155;
  v150[20] = v154;
  v156 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
  v157 = operator new(0x60u);
  v190 = v157;
  LOBYTE(v197) = 19;
  if ( v157 )
  {
    pkSprData = NiObject::Clone(v156);
    *(_DWORD *)v157 = 0;
    LOBYTE(v197) = 20;
    CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v157 + 4));
    LOBYTE(v197) = 21;
    NsEffect::NsEffect((NsEffect *)((char *)v157 + 28));
    v158 = *(_DWORD *)v157;
    LOBYTE(v197) = 22;
    if ( (void *)v158 != pkSprData )
    {
      if ( v158 && !InterlockedDecrement((volatile LONG *)(v158 + 4)) && v158 )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v158)(v158, 1);
      v159 = pkSprData;
      *(_DWORD *)v157 = pkSprData;
      if ( v159 )
        InterlockedIncrement((volatile LONG *)v159 + 1);
    }
    *((_WORD *)v157 + 32) = 0;
  }
  else
  {
    v157 = 0;
  }
  v2->m_pkBarEffect[0] = (MHChipEffect *)v157;
  LOBYTE(v197) = 2;
  if ( !Folder::m_bInit )
    Folder::Init();
  v160 = 0;
  do
  {
    v161 = *(&Folder::m_acEffect + v160);
    *(&Folder::m_acMerge + v160++) = v161;
  }
  while ( v161 );
  v162 = &Folder::m_acMerge - 1;
  do
  {
    v163 = *((_BYTE *)v162 + 1);
    v162 = (char *)v162 + 1;
  }
  while ( v163 );
  memcpy(v162, "GB_SlotLeverAction.nif", 0x14u);
  v164 = (int)((char *)v162 + 20);
  *(_WORD *)v164 = *(_WORD *)"if";
  *(_BYTE *)(v164 + 2) = aGb_slotleverac[22];
  v165 = (NiObject *)Ns_LoadNifFile(&Folder::m_acMerge, 0);
  v166 = operator new(0x60u);
  v190 = v166;
  LOBYTE(v197) = 23;
  if ( v166 )
  {
    pkSprData = NiObject::Clone(v165);
    *(_DWORD *)v166 = 0;
    LOBYTE(v197) = 24;
    CNSTimer_MarkCheck::CNSTimer_MarkCheck((CNSTimer_MarkCheck *)((char *)v166 + 4));
    LOBYTE(v197) = 25;
    NsEffect::NsEffect((NsEffect *)((char *)v166 + 28));
    v167 = *(_DWORD *)v166;
    v168 = pkSprData;
    LOBYTE(v197) = 26;
    if ( (void *)v167 != pkSprData )
    {
      if ( v167 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v167 + 4)) && v167 )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v167)(v167, 1);
        v168 = pkSprData;
      }
      *(_DWORD *)v166 = v168;
      if ( v168 )
        InterlockedIncrement((volatile LONG *)v168 + 1);
    }
    *((_WORD *)v166 + 32) = 0;
  }
  else
  {
    v166 = 0;
  }
  v2->m_pkBarEffect[1] = (MHChipEffect *)v166;
  *(_QWORD *)&v169.r = *(_QWORD *)&Color::m_kDxWhiteColor;
  *(_QWORD *)&v169.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
  LOBYTE(v197) = 2;
  v170 = UIUtil::CreateTextNoSpr(&ui, "Panel01", &byte_9D7451, COERCE_D3DXCOLOR(v169.r), 5u);
  v171 = v170->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v172 = Font::Get(MAIN_MENU);
  ((void (__thiscall *)(PgWinText *, PgFont *, unsigned int))v171[113].__vecDelDtor)(v170, v172, v182);
  v170->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
    (NiRefObject *)v170,
    0);
  v173 = v2->ms_EffectPos.m_pObject;
  if ( (PgWinText *)v173 != v170 )
  {
    if ( v173
      && !InterlockedDecrement((volatile LONG *)&v173->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v173 )
      v173->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v173, 1u);
    v2->ms_EffectPos.m_pObject = (NiNode *)v170;
    InterlockedIncrement((volatile LONG *)&v170->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  }
  v174 = v2->ms_EffectPos.m_pObject;
  *(float *)&v175 = 225.0;
  *((float *)&v175 + 1) = 0.0;
  NiQuaternion::NiQuaternion((NiQuaternion *)&acShareBetType[4], 0.0, 0.0, 0.0, 0.0);
  *(float *)v176 = 856.0;
  *(_QWORD *)&v176[4] = v175;
  *(_QWORD *)&v178.m_fW = *(_QWORD *)v177;
  *(_QWORD *)&v178.m_fY = *(_QWORD *)(v177 + 8);
  MHChipEffect::Start(v2->m_pkBarEffect[0], v174, COERCE_NIQUATERNION(v178.m_fW), *(NiPoint3 *)v176);
  LODWORD(v2->m_nUserCoin) = 0;
  HIDWORD(v2->m_nUserCoin) = 0;
  LODWORD(v2->m_nTempUserCoin) = 0;
  HIDWORD(v2->m_nTempUserCoin) = 0;
  SlotMachineWin::UpdateCoin(v2, &v2->m_nUserCoin, &v2->m_nTempUserCoin, 0, 1);
  ((void (__thiscall *)(SlotMachineWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
    v2,
    PgWin::ms_uiScreenWidth,
    PgWin::ms_uiScreenHeight,
    0.5);
  LOBYTE(v197) = 1;
  if ( spNumNode.m_pObject )
  {
    v179 = spNumNode.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&spNumNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v179 )
        v179->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v179, 1u);
    }
  }
  LOBYTE(v197) = 0;
  UIUtil::_UIUtil(&ui);
  v180 = spNode.m_pObject;
  v197 = -1;
  if ( spNode.m_pObject
    && !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v180 )
    v180->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v180, 1u);
  return 1;
}
// 9D7700: using guessed type int dword_9D7700;
// 9D7704: using guessed type int dword_9D7704;
// 9D7708: using guessed type int dword_9D7708;
// 9D770C: using guessed type int dword_9D770C;
// 9D7710: using guessed type int dword_9D7710;
// 9D7714: using guessed type __int16 word_9D7714;
// 9D7898: using guessed type int dword_9D7898;
// 9D789C: using guessed type int dword_9D789C;
// 9D78A0: using guessed type int dword_9D78A0;
// 9D78A4: using guessed type int dword_9D78A4;
// 9D78A8: using guessed type __int16 word_9D78A8;
// 9D78AA: using guessed type char byte_9D78AA;
// 9D78AC: using guessed type int dword_9D78AC;
// 9D78B0: using guessed type int dword_9D78B0;
// 9D78B4: using guessed type int dword_9D78B4;
// 9D78B8: using guessed type int dword_9D78B8;
// 9D78BC: using guessed type __int16 word_9D78BC;
// 9D78BE: using guessed type char byte_9D78BE;
// 9D78C0: using guessed type int dword_9D78C0;
// 9D78C4: using guessed type int dword_9D78C4;
// 9D78C8: using guessed type int dword_9D78C8;
// 9D78CC: using guessed type int dword_9D78CC;
// 9D78D0: using guessed type __int16 word_9D78D0;
// 9D78D4: using guessed type int dword_9D78D4;
// 9D78D8: using guessed type int dword_9D78D8;
// 9D78DC: using guessed type int dword_9D78DC;
// 9D78E0: using guessed type int dword_9D78E0;
// 9D78E4: using guessed type __int16 word_9D78E4;
// 9D78E6: using guessed type char byte_9D78E6;
// 9D78E8: using guessed type int dword_9D78E8;
// 9D78EC: using guessed type int dword_9D78EC;
// 9D78F0: using guessed type int dword_9D78F0;
// 9D78F4: using guessed type int dword_9D78F4;
// 9D78F8: using guessed type int dword_9D78F8;
// 9D78FC: using guessed type char byte_9D78FC;
// A847B4: using guessed type float SlotMachineWin__ms_fk1;
// A847B8: using guessed type float SlotMachineWin__ms_fk2;
// A85C00: using guessed type int __security_cookie;
// A9541C: using guessed type char Folder__m_bInit;
// B6DE90: using guessed type const float NI_HALF_PI;

//----- (007280E0) --------------------------------------------------------
void __thiscall SlotMachineWin::Betting(SlotMachineWin *this, SlotMachineWin::BETTING_TYPE bet)
{
  SlotMachineWin *v2; // esi@1
  SlotMachineWin::MachineState v3; // eax@1
  NiPointer<MHDiceGameTask> *v4; // eax@3
  int v5; // edi@3
  MHDiceGameTask *v6; // ebx@3
  int v7; // edi@9
  signed int v8; // ebx@9
  int v9; // ebx@11
  unsigned int v10; // edi@11
  int v11; // ecx@11
  unsigned int v12; // edi@13
  unsigned __int64 v13; // kr08_8@13
  __int64 v14; // qcx@13
  __int64 v15; // ST00_8@13
  unsigned __int64 v16; // qax@15
  unsigned __int64 v17; // qcx@21
  int v18; // ebx@21
  int v19; // edx@28
  bool v20; // cf@28
  int v21; // eax@28
  unsigned int v22; // ecx@29
  unsigned int v23; // edi@29
  signed __int64 v24; // qax@29
  int v25; // ebx@30
  int v26; // ebx@31
  int v27; // ecx@32
  __int64 v28; // qax@33
  int v29; // eax@34
  char *v30; // eax@35
  int v31; // edi@36
  signed __int64 v32; // qcx@38
  signed __int64 v33; // qax@39
  char *v34; // eax@43
  int v35; // eax@44
  int v36; // ebx@44
  void *(__thiscall *v37)(NiRefObject *, unsigned int); // eax@50
  SoundGroupInterface::SndIndex v38; // [sp-Ch] [bp-28h]@28
  bool v39; // [sp-Ch] [bp-28h]@30
  unsigned int thisa; // [sp+4h] [bp-18h]@13
  int thisb; // [sp+4h] [bp-18h]@40
  __int64 addBet; // [sp+Ch] [bp-10h]@3
  __int64 v43; // [sp+14h] [bp-8h]@3
  int beta; // [sp+24h] [bp+8h]@24
  int betb; // [sp+24h] [bp+8h]@45

  v2 = this;
  v3 = this->me_State;
  if ( !v3 || v3 == 1 )
  {
    v4 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&addBet + 1);
    v5 = HIDWORD(addBet);
    v6 = v4->m_pObject;
    HIDWORD(v43) = v4->m_pObject;
    if ( HIDWORD(addBet) && !InterlockedDecrement((volatile LONG *)(HIDWORD(addBet) + 4)) && v5 )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
    if ( v6 )
    {
      switch ( bet )
      {
        case 4:
          v7 = (int)v2->m_pkBetIndicator;
          v8 = 32;
          do
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0);
            v7 += 4;
            --v8;
          }
          while ( v8 );
          v9 = v2->m_iBetNum;
          v10 = (unsigned __int64)v2->m_iBetNum >> 32;
          v11 = v2->m_iBetNum;
          if ( (signed __int64)v2->m_iBetNum >= 32 )
          {
            v10 = (unsigned __int64)(31 - v9) >> 32;
            LODWORD(addBet) = 31 - v9;
            v11 = 31 - v9;
          }
          v13 = __PAIR__(v10, v11) + 1;
          v12 = (__PAIR__(v10, v11) + 1) >> 32;
          thisa = LODWORD(v2->m_nTempUserCoin);
          HIDWORD(v14) = HIDWORD(v2->m_nTempUserCoin);
          v15 = v2->m_i1BetPerCoin;
          LODWORD(addBet) = v13;
          v43 = v2->m_i1BetPerCoin;
          if ( (signed __int64)__PAIR__(HIDWORD(v14), thisa) < (signed __int64)(v15 * __PAIR__(v12, (unsigned int)v13)) )
          {
            v12 = (unsigned __int64)((signed __int64)__PAIR__(HIDWORD(v14), thisa) / v43) >> 32;
            LODWORD(addBet) = (signed __int64)__PAIR__(HIDWORD(v14), thisa) / v43;
          }
          v16 = v43 * __PAIR__(v12, (unsigned int)addBet);
          if ( SHIDWORD(v14) < (signed int)(v43 * __PAIR__(v12, (unsigned int)addBet) >> 32)
            || (LODWORD(v14) = thisa, SHIDWORD(v14) <= SHIDWORD(v16)) && thisa < (unsigned int)v16 )
          {
            v2->m_iBetNum = 0;
            goto LABEL_50;
          }
          if ( (signed int)v12 <= 0 && ((v12 & 0x80000000u) != 0 || (unsigned int)addBet <= 0x20) )
          {
            v17 = v14 - v16;
            HIDWORD(v2->m_nTempUserCoin) = HIDWORD(v17);
            v18 = 0;
            v2->m_nBettingCoin = v16;
            LODWORD(v2->m_nTempUserCoin) = v17;
            if ( (v12 & 0x80000000u) == 0 && ((signed int)v12 > 0 || (unsigned int)addBet > 0) )
            {
              beta = (int)v2->m_pkBetIndicator;
              do
              {
                (*(void (__stdcall **)(signed int))(**(_DWORD **)beta + 256))(1);
                beta += 4;
                ++v18;
              }
              while ( v18 < (signed __int64)__PAIR__(v12, (unsigned int)addBet) );
            }
            v2->m_iBetNum = addBet - 1;
            goto LABEL_50;
          }
          return;
        case 3:
          v19 = LODWORD(v2->m_nBettingCoin);
          v20 = __CFADD__(v19, LODWORD(v2->m_nTempUserCoin));
          LODWORD(v2->m_nTempUserCoin) += v19;
          v21 = HIDWORD(v2->m_nBettingCoin);
          LODWORD(v2->m_nBettingCoin) = 0;
          HIDWORD(v2->m_nTempUserCoin) += v21 + v20;
          HIDWORD(v2->m_nBettingCoin) = 0;
          SlotMachineWin::ResetCoin(v2);
          v38 = 58;
          goto LABEL_49;
        case 0:
          v22 = HIDWORD(v2->m_nTempUserCoin);
          v23 = LODWORD(v2->m_nTempUserCoin);
          v24 = v2->m_i1BetPerCoin;
          if ( (signed __int64)__PAIR__(v22, v23) < v24 )
            goto LABEL_50;
          v25 = v2->m_iBetNum;
          v39 = 1;
          if ( v25 == 31 )
            goto LABEL_43;
          v26 = v25 + 1;
          v20 = __CFADD__((_DWORD)v24, LODWORD(v2->m_nBettingCoin));
          LODWORD(v2->m_nBettingCoin) += v24;
          v2->m_iBetNum = v26;
          HIDWORD(v2->m_nBettingCoin) += HIDWORD(v24) + v20;
          v2->m_nTempUserCoin = __PAIR__(v22, v23) - v24;
          v2->m_pkBetIndicator[v26]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor(
            (NiRefObject *)v2->m_pkBetIndicator[v26],
            1u);
          v38 = 50;
          goto LABEL_48;
        case 1:
          v27 = v2->m_iBetNum;
          if ( v27 == -1 )
            return;
          v28 = v2->m_i1BetPerCoin;
          v20 = LODWORD(v2->m_nBettingCoin) < (unsigned int)v28;
          LODWORD(v2->m_nBettingCoin) -= v28;
          HIDWORD(v2->m_nBettingCoin) -= v20 + HIDWORD(v28);
          v20 = __CFADD__((_DWORD)v28, LODWORD(v2->m_nTempUserCoin));
          LODWORD(v2->m_nTempUserCoin) += v28;
          HIDWORD(v2->m_nTempUserCoin) += HIDWORD(v28) + v20;
          ((void (__stdcall *)(_DWORD))v2->m_pkBetIndicator[v27]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(0);
          --v2->m_iBetNum;
          v38 = 51;
          goto LABEL_49;
        case 2:
          v29 = v2->m_iBetNum;
          if ( v29 == 31 )
          {
            v30 = TextData2::Get(0x6C96ADE6u);
            MHDiceGameTask::AddMsg(v6, v30, 1, 1);
            return;
          }
          v31 = 8;
          if ( v29 + 8 >= 32 )
            v31 = 31 - v29;
          v32 = v2->m_nTempUserCoin;
          if ( v32 < v31 * v2->m_i1BetPerCoin )
          {
            v33 = v32 / v2->m_i1BetPerCoin;
            LODWORD(v32) = LODWORD(v2->m_nTempUserCoin);
            v31 = v33;
          }
          thisb = v31 * v2->m_i1BetPerCoin;
          if ( v32 < thisb )
            goto LABEL_50;
          if ( v2->m_iBetNum == 32 )
          {
            v39 = 1;
LABEL_43:
            v34 = TextData2::Get(0x6C96ADE6u);
            MHDiceGameTask::AddMsg(HIDWORD(v43), v34, 1, v39);
          }
          else
          {
            v20 = __CFADD__(thisb, LODWORD(v2->m_nBettingCoin));
            LODWORD(v2->m_nBettingCoin) += thisb;
            HIDWORD(v2->m_nBettingCoin) += ((unsigned __int64)thisb >> 32) + v20;
            v35 = v2->m_iBetNum;
            HIDWORD(v2->m_nTempUserCoin) = (unsigned __int64)(v32 - thisb) >> 32;
            HIDWORD(v32) = v2->m_iBetNum + 1;
            LODWORD(v2->m_nTempUserCoin) = v32 - thisb;
            if ( SHIDWORD(v32) <= v31 + v35 )
            {
              betb = (int)&v2->m_pkBetIndicator[v36];
              do
              {
                (*(void (__stdcall **)(signed int))(**(_DWORD **)betb + 256))(1);
                betb += 4;
                ++v36;
              }
              while ( v36 <= v31 + v2->m_iBetNum );
            }
            v2->m_iBetNum += v31;
            v38 = 52;
LABEL_48:
            v2->m_bClickBetBut = 1;
LABEL_49:
            SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v38);
LABEL_50:
            v37 = v2->m_pkButs[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
            if ( v2->m_iBetNum == -1 )
            {
              ((void (__stdcall *)(signed int))v37)(1);
              ((void (__stdcall *)(signed int))v2->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(_DWORD))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v2->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v2->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v2->m_pkButs[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              v2->me_State = 0;
              *(_WORD *)&v2->m_bTransition = 1;
              v2->m_bClickBetBut = 0;
            }
            else
            {
              ((void (__stdcall *)(signed int))v37)(1);
              ((void (__stdcall *)(signed int))v2->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))v2->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))v2->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              v2->m_bTransition = 1;
              v2->me_State = 1;
            }
          }
          break;
        default:
          goto LABEL_50;
      }
    }
  }
}

//----- (007285E0) --------------------------------------------------------
void __thiscall SlotMachineWin::InitMachine(SlotMachineWin *this)
{
  SlotMachineWin *v1; // esi@1
  char *v2; // eax@1
  char *v3; // ecx@1
  int v4; // edi@1
  int v5; // edi@3
  int v6; // edi@5
  int v7; // eax@7
  PgWinSpr *v8; // ecx@8
  PgWinText *v9; // edi@14
  NiRefObjectVtbl *v10; // ebx@14
  char *v11; // eax@14
  char *v12; // eax@14
  SlotEntry *v13; // edi@14
  signed int v14; // ebx@14
  int v15; // esi@16
  signed int v16; // edi@16
  signed int v17; // [sp+Ch] [bp-4h]@1
  signed int v18; // [sp+Ch] [bp-4h]@3
  signed int v19; // [sp+Ch] [bp-4h]@5

  v1 = this;
  v2 = (char *)&this->m_nTempUserCoin;
  v3 = (char *)&this->m_nUserCoin;
  *(_DWORD *)v3 = 0;
  *((_DWORD *)v3 + 1) = 0;
  v1->m_iBetNum = -1;
  v1->m_bMachineTimeSetting = 0;
  v1->m_bClickBetBut = 0;
  *(_DWORD *)v2 = 0;
  *((_DWORD *)v2 + 1) = 0;
  LODWORD(v1->m_nPreBettingCoin) = 0;
  HIDWORD(v1->m_nPreBettingCoin) = 0;
  LODWORD(v1->m_nBettingCoin) = 0;
  HIDWORD(v1->m_nBettingCoin) = 0;
  LODWORD(v1->m_nPreShareCoin) = 0;
  HIDWORD(v1->m_nPreShareCoin) = 0;
  LODWORD(v1->m_nShareCoin) = 0;
  HIDWORD(v1->m_nShareCoin) = 0;
  SlotMachineWin::UpdateCoin(v1, (__int64 *)v3, (__int64 *)v2, 0, 1);
  v1->m_fSlotAlpha = 1.0;
  v1->me_State = 0;
  v4 = (int)v1->m_pkShareNum;
  v17 = 8;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 - 64) + 492))(0);
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 492))(0);
    v4 += 4;
    --v17;
  }
  while ( v17 );
  v5 = (int)v1->m_pkMyCoinNum;
  v18 = 12;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 492))(0);
    v5 += 4;
    --v18;
  }
  while ( v18 );
  v6 = (int)v1->m_pkFrameSpr;
  v19 = 3;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0);
    v6 += 4;
    --v19;
  }
  while ( v19 );
  v7 = v1->m_i1BetPerCoin;
  if ( v7 == 10 )
  {
    v8 = v1->m_pkFrameSpr[0];
LABEL_13:
    ((void (__stdcall *)(_DWORD))v8->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[64].__vecDelDtor)(1);
    goto LABEL_14;
  }
  if ( v7 == 100 )
  {
    v8 = v1->m_pkFrameSpr[1];
    goto LABEL_13;
  }
  if ( v7 == 500 )
  {
    v8 = v1->m_pkFrameSpr[2];
    goto LABEL_13;
  }
LABEL_14:
  v9 = v1->m_pkTitleText[1];
  v10 = v9->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
  v11 = TextData2::Get(0x8FBD9882u);
  v12 = fs(v11);
  v10[118].__vecDelDtor((NiRefObject *)v9, (unsigned int)v12);
  ((void (__stdcall *)(_DWORD))v1->m_pkButs[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
  ((void (__stdcall *)(_DWORD))v1->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkButs[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  ((void (__stdcall *)(_DWORD))v1->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
  v1->_easeInOut[0]._value = 0.99000001;
  v1->_easeInOut[0]._target = 1.0;
  v1->_easeInOut[0]._speed = 0.0;
  v1->_easeInOut[0]._acceleration = 3.9999962;
  v1->_easeInOut[0]._totalTime = 0.1;
  v1->_easeInOut[0]._remainingTime = 0.1;
  v1->_easeInOut[1]._value = 0.99000001;
  v1->_easeInOut[1]._target = 1.0;
  v1->_easeInOut[1]._speed = 0.0;
  v1->_easeInOut[1]._acceleration = 3.9999962;
  v1->_easeInOut[1]._totalTime = 0.1;
  v1->_easeInOut[1]._remainingTime = 0.1;
  v1->_easeInOut[2]._value = 0.99000001;
  v1->_easeInOut[2]._target = 1.0;
  v1->_easeInOut[2]._speed = 0.0;
  v1->_easeInOut[2]._acceleration = 3.9999962;
  v1->_easeInOut[2]._totalTime = 0.1;
  v1->_easeInOut[2]._remainingTime = 0.1;
  v13 = v1->ms_Slot;
  v14 = 9;
  v1->_easeInOut[3]._value = 0.99000001;
  v1->_easeInOut[3]._target = 1.0;
  v1->_easeInOut[3]._speed = 0.0;
  v1->_easeInOut[3]._acceleration = 3.9999962;
  v1->_easeInOut[3]._totalTime = 0.1;
  v1->_easeInOut[3]._remainingTime = 0.1;
  v1->_easeInOut[4]._value = 0.99000001;
  v1->_easeInOut[4]._target = 1.0;
  v1->_easeInOut[4]._speed = 0.0;
  v1->_easeInOut[4]._acceleration = 3.9999962;
  v1->_easeInOut[4]._totalTime = 0.1;
  v1->_easeInOut[4]._remainingTime = 0.1;
  v1->_easeInOut[5]._value = 0.99000001;
  v1->_easeInOut[5]._target = 1.0;
  v1->_easeInOut[5]._speed = 0.0;
  v1->_easeInOut[5]._acceleration = 3.9999962;
  v1->_easeInOut[5]._totalTime = 0.1;
  v1->_easeInOut[5]._remainingTime = 0.1;
  do
  {
    SlotEntry::reset(v13);
    ++v13;
    --v14;
  }
  while ( v14 );
  v1->m_iBetNum = -1;
  v15 = (int)v1->m_pkBetIndicator;
  v16 = 32;
  do
  {
    (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v15 + 256))(0);
    v15 += 4;
    --v16;
  }
  while ( v16 );
}

//----- (00728920) --------------------------------------------------------
void __thiscall SlotMachineWin::UpdateResult(SlotMachineWin *this, float fCurTime)
{
  SlotMachineWin *v2; // esi@1
  char *v3; // edi@2
  signed int v4; // ebx@2
  int v5; // edi@4
  int v6; // ebx@4
  int v7; // eax@11
  unsigned __int8 v8; // cf@11
  int v9; // ecx@11
  int v10; // edi@11
  double v11; // st7@13
  double v12; // st6@14
  double v13; // st6@16
  bool v14; // zf@20
  int v15; // edi@21
  signed int v16; // ebx@21
  int v17; // edi@23
  signed int v18; // ebx@23
  int v19; // ebx@27
  int v20; // ebx@45
  char v21; // al@53
  NiNode *v22; // edi@54
  float v23; // ST2C_4@54
  float v24; // ST28_4@54
  float v25; // ST24_4@54
  float v26; // ST20_4@54
  _BYTE v27[12]; // ST24_12@54
  int v28; // eax@54
  NiQuaternion v29; // ST14_16@54
  NiNode *v30; // edi@56
  float v31; // ST2C_4@56
  float v32; // ST28_4@56
  float v33; // ST24_4@56
  float v34; // ST20_4@56
  _BYTE v35[12]; // ST24_12@56
  int v36; // eax@56
  NiQuaternion v37; // ST14_16@56
  NiNode *v38; // edi@58
  float v39; // ST2C_4@58
  float v40; // ST28_4@58
  float v41; // ST24_4@58
  float v42; // ST20_4@58
  _BYTE v43[12]; // ST24_12@58
  int v44; // eax@58
  NiQuaternion v45; // ST14_16@58
  NiNode *v46; // edi@60
  float v47; // ST2C_4@60
  float v48; // ST28_4@60
  float v49; // ST24_4@60
  float v50; // ST20_4@60
  _BYTE v51[12]; // ST24_12@60
  int v52; // eax@60
  NiQuaternion v53; // ST14_16@60
  char v54; // al@61
  double v55; // st6@67
  double v56; // st7@70
  SoundGroupInterface::SndIndex v57; // [sp+2Ch] [bp-60h]@64
  NiQuaternion thisa; // [sp+3Ch] [bp-50h]@54
  float v59; // [sp+4Ch] [bp-40h]@70
  float v60; // [sp+50h] [bp-3Ch]@54
  __int64 v61; // [sp+54h] [bp-38h]@54
  float v62; // [sp+5Ch] [bp-30h]@4
  char bWinOneLine; // [sp+63h] [bp-29h]@20
  int result[9]; // [sp+64h] [bp-28h]@20
  unsigned int v65; // [sp+88h] [bp-4h]@1
  int v66; // [sp+8Ch] [bp+0h]@1

  v65 = (unsigned int)&v66 ^ __security_cookie;
  v2 = this;
  if ( this->m_GameTimer.m_fObjectTime <= 6.5 )
  {
    if ( this->m_GameTimer.m_fObjectTime <= 5.0 || this->m_bMachineTimeSetting )
    {
      v10 = 0;
    }
    else
    {
      v7 = LODWORD(this->m_nShareCoin);
      v8 = __CFADD__(v7, LODWORD(this->m_nTempUserCoin));
      LODWORD(this->m_nTempUserCoin) += v7;
      v9 = HIDWORD(this->m_nShareCoin);
      v2->m_bMachineTimeSetting = 1;
      HIDWORD(v2->m_nTempUserCoin) += v9 + v8;
      v10 = 0;
      LODWORD(v2->m_nShareCoin) = 0;
      HIDWORD(v2->m_nShareCoin) = 0;
    }
    v11 = 0.0;
    if ( v2->m_bTurnLight )
    {
      v62 = v2->m_GameTimer.m_fElapsedTime + v2->m_GameTimer.m_fElapsedTime + v2->m_fAlpha;
      v12 = v62;
      v2->m_fAlpha = v62;
      if ( v12 > 1.0 )
        v2->m_bTurnLight = 0;
    }
    else
    {
      v62 = v2->m_fAlpha - (v2->m_GameTimer.m_fElapsedTime + v2->m_GameTimer.m_fElapsedTime);
      v13 = v62;
      v2->m_fAlpha = v62;
      if ( v13 < 0.0 )
        v2->m_bTurnLight = 1;
    }
    if ( !v2->m_bRecivedResult )
      goto LABEL_75;
    if ( v2->m_GameTimer.m_fObjectTime > 1.5 )
    {
      v14 = (v2->m_WinState._bf1 & 1) == 0;
      bWinOneLine = 0;
      result[0] = v10;
      result[1] = v10;
      result[2] = v10;
      result[3] = v10;
      result[4] = v10;
      result[5] = v10;
      result[6] = v10;
      result[7] = v10;
      result[8] = v10;
      if ( v14 )
      {
        if ( v2->m_WinState.gap0[0] & 1 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          v19 = 1;
          result[2] = 1;
          result[1] = 1;
          result[0] = 1;
        }
        else
        {
          v19 = 1;
        }
        if ( v2->m_WinState.gap0[0] & 2 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[7]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          result[5] = v19;
          result[4] = v19;
          result[3] = v19;
        }
        if ( v2->m_WinState.gap0[0] & 4 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          result[8] = v19;
          result[7] = v19;
          result[6] = v19;
        }
        if ( v2->m_WinState.gap0[0] & 8 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          result[6] = v19;
          result[3] = v19;
          result[0] = v19;
        }
        if ( v2->m_WinState.gap0[0] & 0x10 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[6]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          result[7] = v19;
          result[4] = v19;
          result[1] = v19;
        }
        if ( v2->m_WinState.gap0[0] & 0x20 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          result[8] = v19;
          result[5] = v19;
          result[2] = v19;
        }
        if ( v2->m_WinState.gap0[0] & 0x40 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          result[8] = v19;
          result[4] = v19;
          result[0] = v19;
        }
        if ( v2->m_WinState.gap0[0] & 0x80 )
        {
          ((void (__stdcall *)(_DWORD))v2->m_pkWinLines[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(v2->m_fAlpha);
          v11 = 0.0;
          result[6] = v19;
          result[4] = v19;
          result[2] = v19;
        }
        if ( v2->m_WinState._bf1 & 2 )
          result[4] = v19;
        v20 = (int)v2->m_pkWinSlots;
        LODWORD(v62) = (char *)v2 + 1116;
        do
        {
          if ( result[v10] )
          {
            ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(**(_DWORD **)v20 + 276))(v2->m_fAlpha);
            v11 = 0.0;
            if ( v10 != 4 )
              bWinOneLine = 1;
          }
          else
          {
            if ( *LODWORD(v62) )
            {
              ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(*(_DWORD *)*LODWORD(v62) + 276))(v2->m_fSlotAlpha);
              v11 = 0.0;
            }
          }
          LODWORD(v62) += 104;
          ++v10;
          v20 += 4;
        }
        while ( v10 < 9 );
      }
      else
      {
        v15 = (int)v2->m_pkWinLines;
        v16 = 8;
        do
        {
          ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(**(_DWORD **)v15 + 276))(v2->m_fAlpha);
          v15 += 4;
          --v16;
        }
        while ( v16 );
        v17 = (int)v2->m_pkWinSlots;
        v18 = 9;
        do
        {
          ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(**(_DWORD **)v17 + 276))(v2->m_fAlpha);
          v17 += 4;
          --v18;
        }
        while ( v18 );
        v11 = 0.0;
      }
      if ( v2->m_bTransition )
      {
        v21 = v2->m_WinState._bf1;
        if ( v21 & 4 )
        {
          v22 = v2->ms_EffectPos.m_pObject;
          v60 = v11;
          *(float *)&v61 = v11;
          *((float *)&v61 + 1) = 1.0;
          v23 = v11;
          v24 = v11;
          v25 = v11;
          v26 = v11;
          NiQuaternion::NiQuaternion(&thisa, v26, v25, v24, v23);
          *(_DWORD *)v27 = LODWORD(v60);
          *(_QWORD *)&v27[4] = v61;
          *(_QWORD *)&v29.m_fW = *(_QWORD *)v28;
          *(_QWORD *)&v29.m_fY = *(_QWORD *)(v28 + 8);
          MHChipEffect::Start(v2->m_pkWinEffect[3], v22, COERCE_NIQUATERNION(v29.m_fW), *(NiPoint3 *)v27);
        }
        else
        {
          if ( v21 & 1 )
          {
            v30 = v2->ms_EffectPos.m_pObject;
            v60 = v11;
            *(float *)&v61 = v11;
            *((float *)&v61 + 1) = 1.0;
            v31 = v11;
            v32 = v11;
            v33 = v11;
            v34 = v11;
            NiQuaternion::NiQuaternion(&thisa, v34, v33, v32, v31);
            *(_DWORD *)v35 = LODWORD(v60);
            *(_QWORD *)&v35[4] = v61;
            *(_QWORD *)&v37.m_fW = *(_QWORD *)v36;
            *(_QWORD *)&v37.m_fY = *(_QWORD *)(v36 + 8);
            MHChipEffect::Start(v2->m_pkWinEffect[1], v30, COERCE_NIQUATERNION(v37.m_fW), *(NiPoint3 *)v35);
          }
          else
          {
            if ( bWinOneLine )
            {
              v38 = v2->ms_EffectPos.m_pObject;
              v60 = v11;
              *(float *)&v61 = v11;
              *((float *)&v61 + 1) = 1.0;
              v39 = v11;
              v40 = v11;
              v41 = v11;
              v42 = v11;
              NiQuaternion::NiQuaternion(&thisa, v42, v41, v40, v39);
              *(_DWORD *)v43 = LODWORD(v60);
              *(_QWORD *)&v43[4] = v61;
              *(_QWORD *)&v45.m_fW = *(_QWORD *)v44;
              *(_QWORD *)&v45.m_fY = *(_QWORD *)(v44 + 8);
              MHChipEffect::Start(v2->m_pkWinEffect[0], v38, COERCE_NIQUATERNION(v45.m_fW), *(NiPoint3 *)v43);
            }
            else
            {
              if ( v21 & 2 )
              {
                v46 = v2->ms_EffectPos.m_pObject;
                v60 = v11;
                *(float *)&v61 = v11;
                *((float *)&v61 + 1) = 1.0;
                v47 = v11;
                v48 = v11;
                v49 = v11;
                v50 = v11;
                NiQuaternion::NiQuaternion(&thisa, v50, v49, v48, v47);
                *(_DWORD *)v51 = LODWORD(v60);
                *(_QWORD *)&v51[4] = v61;
                *(_QWORD *)&v53.m_fW = *(_QWORD *)v52;
                *(_QWORD *)&v53.m_fY = *(_QWORD *)(v52 + 8);
                MHChipEffect::Start(v2->m_pkWinEffect[2], v46, COERCE_NIQUATERNION(v53.m_fW), *(NiPoint3 *)v51);
              }
            }
          }
        }
        v54 = v2->m_WinState._bf1;
        if ( v54 & 5 || bWinOneLine || v54 & 2 )
          v57 = 61;
        else
          v57 = 53;
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, v57);
        v2->m_fSlotAlpha = 1.0;
        v2->m_bTransition = 0;
        v11 = 0.0;
      }
      else
      {
        v62 = v2->m_fSlotAlpha - v2->m_GameTimer.m_fElapsedTime;
        v55 = v62;
        v2->m_fSlotAlpha = v62;
        if ( v55 < 0.30000001 )
          v2->m_fSlotAlpha = 0.30000001;
      }
    }
    if ( v2->m_bRecivedResult )
    {
      v59 = v2->m_GameTimer.m_fObjectTime;
      v62 = fCurTime - v2->m_GameTimer.m_fStartTime;
      v56 = v62;
      v2->m_GameTimer.m_fObjectTime = v62;
      v11 = v56 - v59;
    }
    else
    {
LABEL_75:
      v2->m_GameTimer.m_fStartTime = fCurTime;
      v2->m_GameTimer.m_fObjectTime = v11;
    }
    v2->m_GameTimer.m_fElapsedTime = v11;
  }
  else
  {
    this->m_fSlotAlpha = 1.0;
    this->m_iStopID = 0;
    this->me_State = 0;
    *(_WORD *)&this->m_bTransition = 257;
    this->m_bClickBetBut = 0;
    v3 = (char *)this->m_pkWinLines;
    v4 = 8;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 276))(0.0);
      v3 += 4;
      --v4;
    }
    while ( v4 );
    v5 = (int)v2->m_pkWinSlots;
    v6 = (int)&v2->ms_Slot[0].ms_kSpr;
    LODWORD(v62) = 9;
    do
    {
      (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 276))(0.0);
      if ( *(_DWORD *)v6 )
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 276))(1.0);
      v5 += 4;
      v6 += 104;
      --LODWORD(v62);
    }
    while ( v62 != 0.0 );
    LODWORD(v2->m_nBettingCoin) = 0;
    HIDWORD(v2->m_nBettingCoin) = 0;
    SlotMachineWin::Betting(v2, BT_REBET);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00729010) --------------------------------------------------------
void __thiscall SlotMachineWin::ProcessMeInput(SlotMachineWin *this, bool *bHit)
{
  SlotMachineWin *v2; // esi@1
  PgFrameWork *v3; // eax@1
  SlotMachineWin::MachineState v4; // eax@3
  int v5; // eax@5
  SlotMachineWin::MachineState v6; // eax@16
  NiPointer<MHDiceGameTask> *v7; // eax@18
  bool *v8; // edi@18
  MHDiceGameTask *v9; // ebx@18
  int v10; // eax@23
  unsigned __int8 v11; // cf@23
  void *(__thiscall *v12)(NiRefObject *, unsigned int); // eax@23
  SlotMachineWin::MachineState v13; // eax@34
  PgWinBut *v14; // ecx@36
  MHDiceGameTask *v15; // edi@40

  v2 = this;
  PgWinFrame::ProcessMeInput(&this->baseclass_0, bHit);
  v3 = PgFrameMgr::GetFrameWork(&Pgg_kFrameMgr, GameFrameWorkID);
  if ( v3 && GameFrameWork::IsDuringEdit((GameFrameWork *)v3) )
    return;
  v4 = v2->me_State;
  if ( v4 && v4 != 1 )
    goto LABEL_31;
  v5 = g_pkKeyboard;
  if ( *(_BYTE *)(g_pkKeyboard + 48) & 2 && !(*(_BYTE *)(g_pkKeyboard + 80) & 2) )
  {
    if ( !(unsigned __int8)((int (*)(void))v2->m_pkButs[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
      return;
    SlotMachineWin::Betting(v2, 0);
    CEaseInOutInterpolation::Setup(v2->_easeInOut, 0.30000001, 1.0, 0.30000001);
    ((void (__stdcall *)(_DWORD))v2->m_pkButs[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.30000001);
    v5 = g_pkKeyboard;
  }
  if ( *(_BYTE *)(v5 + 48) & 0x40 && !(*(_BYTE *)(v5 + 80) & 0x40) )
  {
    if ( !(unsigned __int8)((int (*)(void))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
      return;
    SlotMachineWin::Betting(v2, BT_UNONEBET);
    CEaseInOutInterpolation::Setup(&v2->_easeInOut[2], 0.30000001, 1.0, 0.30000001);
    ((void (__stdcall *)(_DWORD))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.30000001);
    v5 = g_pkKeyboard;
  }
  if ( *(_BYTE *)(v5 + 48) & 8 && !(*(_BYTE *)(v5 + 80) & 8) )
  {
    if ( !(unsigned __int8)((int (*)(void))v2->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
      return;
    v6 = v2->me_State;
    if ( !v6 || v6 == 1 )
    {
      v7 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&bHit);
      v8 = bHit;
      v9 = v7->m_pObject;
      if ( bHit && !InterlockedDecrement((volatile LONG *)bHit + 1) && v8 )
        (**(void (__thiscall ***)(bool *, signed int))v8)(v8, 1);
      if ( v9 )
      {
        v10 = LODWORD(v2->m_nBettingCoin);
        v11 = __CFADD__(v10, LODWORD(v2->m_nTempUserCoin));
        LODWORD(v2->m_nTempUserCoin) += v10;
        HIDWORD(v2->m_nTempUserCoin) += HIDWORD(v2->m_nBettingCoin) + v11;
        LODWORD(v2->m_nBettingCoin) = 0;
        HIDWORD(v2->m_nBettingCoin) = 0;
        SlotMachineWin::ResetCoin(v2);
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, GB_SM_Reset);
        v12 = v2->m_pkButs[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
        if ( v2->m_iBetNum == -1 )
        {
          ((void (__stdcall *)(signed int))v12)(1);
          ((void (__stdcall *)(signed int))v2->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          ((void (__stdcall *)(_DWORD))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v2->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v2->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          ((void (__stdcall *)(_DWORD))v2->m_pkButs[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
          v2->me_State = 0;
          *(_WORD *)&v2->m_bTransition = 1;
          v2->m_bClickBetBut = 0;
        }
        else
        {
          ((void (__stdcall *)(signed int))v12)(1);
          ((void (__stdcall *)(signed int))v2->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          ((void (__stdcall *)(signed int))v2->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          ((void (__stdcall *)(signed int))v2->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          ((void (__stdcall *)(signed int))v2->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
          v2->m_bTransition = 1;
          v2->me_State = 1;
        }
      }
    }
    CEaseInOutInterpolation::Setup(&v2->_easeInOut[3], 0.30000001, 1.0, 0.30000001);
    ((void (__stdcall *)(_DWORD))v2->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.30000001);
    v5 = g_pkKeyboard;
  }
  if ( *(_BYTE *)(v5 + 48) & 0x10 && !(*(_BYTE *)(v5 + 80) & 0x10) )
  {
    if ( !(unsigned __int8)((int (*)(void))v2->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
      return;
    SlotMachineWin::Betting(v2, BT_8BET);
    CEaseInOutInterpolation::Setup(&v2->_easeInOut[1], 0.30000001, 1.0, 0.30000001);
    ((void (__stdcall *)(_DWORD))v2->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.30000001);
LABEL_31:
    v5 = g_pkKeyboard;
  }
  if ( *(_BYTE *)(v5 + 40) & 2 && !(*(_BYTE *)(v5 + 72) & 2) )
  {
    v13 = v2->me_State;
    if ( v13 == 1 )
    {
      if ( !(unsigned __int8)((int (*)(void))v2->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)() )
        return;
      SlotMachineWin::SendBettingInfo(v2);
      CEaseInOutInterpolation::Setup(&v2->_easeInOut[4], 0.30000001, 1.0, 0.30000001);
      v14 = v2->m_pkButs[4];
      goto LABEL_43;
    }
    if ( v13 == 4
      && (unsigned __int8)((int (*)(void))v2->m_pkButs[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[61].__vecDelDtor)()
      && v2->m_GameTimer.m_fObjectTime > 2.0 )
    {
      v15 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&bHit)->m_pObject;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&bHit);
      if ( v15 )
        MHDiceGameTask::NcGambleSlotmachineStopbuttonReq(v15);
      CEaseInOutInterpolation::Setup(&v2->_easeInOut[5], 0.30000001, 1.0, 0.30000001);
      v14 = v2->m_pkButs[5];
LABEL_43:
      ((void (__stdcall *)(_DWORD))v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[69].__vecDelDtor)(0.30000001);
      return;
    }
  }
}
// A9816C: using guessed type int g_pkKeyboard;

//----- (00729480) --------------------------------------------------------
bool __thiscall MiniSlotMachineWin::Create(MiniSlotMachineWin *this, PgFrameWork *pkFrameWork)
{
  MiniSlotMachineWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // eax@3
  NiNode *v6; // esi@7
  bool result; // al@10
  PgSprData *v8; // eax@11
  PgWinBut *v9; // edi@11
  char *v10; // eax@11
  NiNode *v11; // esi@12
  int iLeft; // [sp+14h] [bp-18h]@11
  int iTop; // [sp+18h] [bp-14h]@11
  NiPointer<NiNode> spNode; // [sp+1Ch] [bp-10h]@1
  int v15; // [sp+28h] [bp-4h]@1

  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v15 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\GB_SlotMachineMin.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( spNode.m_pObject )
  {
    v2->baseclass_0.m_pkFrameWork = pkFrameWork;
    v8 = PgSprData::Create(&v5->baseclass_0, "GB_SlotMachineMin", &iLeft, &iTop, 0);
    v9 = PgWinBut::CreateWin(0, 0, v8, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0, 0);
    v9->baseclass_0.baseclass_0.m_pkToolTipWin = g_pkToolTipWin;
    v10 = TextData2::Get(0xD7F9364Eu);
    PgWin::SetToolTipWinText(&v9->baseclass_0.baseclass_0, v10);
    ((void (__thiscall *)(MiniSlotMachineWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
      v2,
      PgWin::ms_uiScreenWidth,
      PgWin::ms_uiScreenHeight,
      0.1,
      0.30000001);
    v15 = -1;
    if ( spNode.m_pObject )
    {
      v11 = spNode.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v11 )
          v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
      }
    }
    result = 1;
  }
  else
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\MyHomeMinButton.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v15 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    result = 0;
  }
  return result;
}
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (00729610) --------------------------------------------------------
void __thiscall GBSlotHelpWin::OnCommand(GBSlotHelpWin *this, unsigned int wParam, int lParam)
{
  if ( wParam <= 1 )
  {
    GBSlotHelpWin::CloseWin(this);
  }
  else
  {
    if ( wParam == 2 )
      GBSlotHelpWin::OnSlideBar(this);
  }
}

//----- (00729640) --------------------------------------------------------
void __thiscall SlotMachineWin::OnCommand(SlotMachineWin *this, unsigned int wParam, int lParam)
{
  SlotMachineWin *v3; // esi@1
  MHDiceGameTask *v4; // ebx@1
  MHDiceGameTask *v5; // edi@2
  SlotMachineWin::MachineState v6; // eax@13
  MHDiceGameTask *v7; // ebx@15
  unsigned int v8; // edi@16
  int v9; // ecx@20
  unsigned __int8 v10; // cf@20
  void *(__thiscall *v11)(NiRefObject *, unsigned int); // edx@20
  NiPointer<MHDiceGameTask> result; // [sp+Ch] [bp-4h]@1

  v3 = this;
  v4 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( result.m_pObject )
  {
    v5 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
  if ( v4 )
  {
    switch ( wParam )
    {
      case 0u:
        MHDiceGameTask::OpenSlotMachineWin(v4);
        break;
      case 1u:
        MHDiceGameTask::NcGambleSlotmachineGameLeaveReq(v4);
        break;
      case 2u:
        SlotMachineWin::SendBettingInfo(v3);
        break;
      case 3u:
        SlotMachineWin::Betting(v3, 0);
        break;
      case 4u:
        SlotMachineWin::Betting(v3, BT_UNONEBET);
        break;
      case 5u:
        SlotMachineWin::Betting(v3, BT_8BET);
        break;
      case 6u:
        v6 = v3->me_State;
        if ( !v6 || v6 == 1 )
        {
          v7 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam)->m_pObject;
          if ( wParam )
          {
            v8 = wParam;
            if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
            {
              if ( v8 )
                (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
            }
          }
          if ( v7 )
          {
            v9 = LODWORD(v3->m_nBettingCoin);
            v10 = __CFADD__(v9, LODWORD(v3->m_nTempUserCoin));
            LODWORD(v3->m_nTempUserCoin) += v9;
            HIDWORD(v3->m_nTempUserCoin) += HIDWORD(v3->m_nBettingCoin) + v10;
            LODWORD(v3->m_nBettingCoin) = 0;
            HIDWORD(v3->m_nBettingCoin) = 0;
            SlotMachineWin::ResetCoin(v3);
            SoundMgr::PlayInterfaceSound(&g_kSoundMgr, GB_SM_Reset);
            v11 = v3->m_pkButs[0]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor;
            if ( v3->m_iBetNum == -1 )
            {
              ((void (__stdcall *)(signed int))v11)(1);
              ((void (__stdcall *)(signed int))v3->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(_DWORD))v3->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v3->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v3->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__stdcall *)(_DWORD))v3->m_pkButs[5]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              v3->me_State = 0;
              *(_WORD *)&v3->m_bTransition = 1;
              v3->m_bClickBetBut = 0;
            }
            else
            {
              ((void (__stdcall *)(signed int))v11)(1);
              ((void (__stdcall *)(signed int))v3->m_pkButs[1]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))v3->m_pkButs[3]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))v3->m_pkButs[4]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              ((void (__stdcall *)(signed int))v3->m_pkButs[2]->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(1);
              v3->m_bTransition = 1;
              v3->me_State = 1;
            }
          }
        }
        break;
      case 7u:
        if ( v3->me_State == 4 && v3->m_GameTimer.m_fObjectTime > 2.0 )
          MHDiceGameTask::NcGambleSlotmachineStopbuttonReq(v4);
        break;
      case 8u:
        MHDiceGameTask::OpenSlotHelpWin(v4);
        break;
      case 9u:
        MHDiceGameTask::NcGambleSlotmachineJackpotRankReq(v4);
        break;
      default:
        return;
    }
  }
}

//----- (007298F0) --------------------------------------------------------
void __thiscall SlotMachineWin::UpdateMeWin(SlotMachineWin *this, float fCurTime)
{
  SlotMachineWin *v2; // esi@1
  MHDiceGameTask *v3; // edi@1
  MHDiceGameTask *v4; // ebx@2
  SlotEntry *v5; // ebx@6
  bool v6; // zf@12
  char *v7; // eax@14
  char *v8; // eax@17
  double v9; // st7@18
  double v10; // st7@19
  double v11; // st7@21
  int v12; // ebx@23
  signed int v13; // edi@23
  int v14; // ebx@25
  signed int v15; // edi@25
  int v16; // ebx@29
  signed int v17; // edi@29
  int v18; // ebx@31
  signed int v19; // edi@31
  char *v20; // eax@39
  double v21; // st7@40
  double v22; // st7@44
  int v23; // ecx@45
  int v24; // ecx@46
  int v25; // edx@46
  NiNode *v26; // ebx@47
  _BYTE v27[12]; // ST14_12@47
  int v28; // eax@47
  NiQuaternion v29; // ST04_16@47
  NiNode *v30; // eax@47
  double v31; // st7@53
  MHChipEffect *v32; // ecx@54
  NiNode *v33; // eax@56
  int v34; // eax@61
  int v35; // ebx@63
  int v36; // edi@63
  double v37; // st7@66
  int v38; // edi@68
  int v39; // ebx@68
  double v40; // st7@69
  double v41; // st6@69
  double v42; // st6@70
  double v43; // st7@73
  float v44; // ST1C_4@75
  unsigned int v45; // ebx@76
  unsigned int v46; // ecx@76
  unsigned int v47; // edi@76
  __int64 v48; // qax@78
  signed int v49; // eax@78
  unsigned int v50; // ebx@98
  bool v51; // sf@99
  int v52; // edi@99
  signed __int64 v53; // kr08_8@99
  int v54; // edi@104
  int v55; // esi@105
  NiQuaternion thisa; // [sp+20h] [bp-70h]@47
  float v57; // [sp+30h] [bp-60h]@47
  __int64 v58; // [sp+34h] [bp-5Ch]@47
  NiPointer<MHDiceGameTask> result; // [sp+3Ch] [bp-54h]@1
  float v60; // [sp+40h] [bp-50h]@6
  int resultSeq[9]; // [sp+44h] [bp-4Ch]@63
  int stopSeq[9]; // [sp+68h] [bp-28h]@63
  unsigned int v63; // [sp+8Ch] [bp-4h]@1
  int v64; // [sp+90h] [bp+0h]@1

  v63 = (unsigned int)&v64 ^ __security_cookie;
  v2 = this;
  v3 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
  if ( *(float *)&result.m_pObject != 0.0 )
  {
    v4 = result.m_pObject;
    if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v4 )
        v4->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
    }
  }
  if ( v3 )
  {
    v5 = v2->ms_Slot;
    LODWORD(v60) = 9;
    do
    {
      SlotEntry::update(v5, fCurTime);
      ++v5;
      --LODWORD(v60);
    }
    while ( v60 != 0.0 );
    switch ( v2->me_State )
    {
      case 0:
        if ( v3->m_bLeaveReserve )
          MHDiceGameTask::NcGambleSlotmachineGameLeaveReq(v3);
        if ( v2->m_bMachineTimeSetting )
        {
          if ( v2->m_MachineTimer.m_fObjectTime > 300.0 && !v2->m_bClickBetBut )
          {
            v8 = TextData2::Get(0x8BDBE3C2u);
            MHDiceGameTask::AddMsg(v3, v8, 1, 1);
            MHDiceGameTask::NcGambleSlotmachineGameLeaveReq(v3);
            v2->m_bMachineTimeSetting = 0;
          }
          *(float *)&result.m_pObject = v2->m_MachineTimer.m_fObjectTime;
          v60 = fCurTime - v2->m_MachineTimer.m_fStartTime;
          v9 = v60;
          v2->m_MachineTimer.m_fObjectTime = v60;
          v2->m_MachineTimer.m_fElapsedTime = v9 - *(float *)&result.m_pObject;
          if ( v2->m_bTurnLight )
          {
            v60 = v2->m_MachineTimer.m_fElapsedTime + v2->m_MachineTimer.m_fElapsedTime + v2->m_fAlpha;
            v10 = v60;
            v2->m_fAlpha = v60;
            if ( v10 > 1.0 )
              v2->m_bTurnLight = 0;
          }
          else
          {
            v60 = v2->m_fAlpha - (v2->m_MachineTimer.m_fElapsedTime + v2->m_MachineTimer.m_fElapsedTime);
            v11 = v60;
            v2->m_fAlpha = v60;
            if ( v11 < 0.0 )
              v2->m_bTurnLight = 1;
          }
          v12 = (int)v2->m_pkWinLines;
          v13 = 8;
          do
          {
            ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(**(_DWORD **)v12 + 276))(v2->m_fAlpha);
            v12 += 4;
            --v13;
          }
          while ( v13 );
          v14 = (int)v2->m_pkWinSlots;
          v15 = 9;
          do
          {
            ((void (__stdcall *)(_DWORD))*(void (__stdcall **)(float))(**(_DWORD **)v14 + 276))(v2->m_fAlpha);
            v14 += 4;
            --v15;
          }
          while ( v15 );
        }
        else
        {
          v2->m_MachineTimer.m_fStartTime = fCurTime;
          v2->m_MachineTimer.m_fObjectTime = 0.0;
          v2->m_MachineTimer.m_fElapsedTime = 0.0;
          v6 = v2->m_iBetNum == -1;
          v2->m_bRecivedResult = 0;
          *(_WORD *)&v2->m_bTransition = 257;
          if ( v6 && !v3->m_bLeaveReserve )
          {
            v7 = TextData2::Get(0x829F85A6u);
            MHDiceGameTask::AddMsg(v3, v7, 1, 1);
          }
        }
        goto LABEL_68;
      case 1:
        if ( v2->m_bTransition )
        {
          v16 = (int)v2->m_pkWinLines;
          v2->m_GameTimer.m_fStartTime = fCurTime;
          v17 = 8;
          v2->m_GameTimer.m_fObjectTime = 0.0;
          v2->m_GameTimer.m_fElapsedTime = 0.0;
          v2->m_bTransition = 0;
          do
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v16 + 276))(0.0);
            v16 += 4;
            --v17;
          }
          while ( v17 );
          v18 = (int)v2->m_pkWinSlots;
          v19 = 9;
          do
          {
            (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v18 + 276))(0.0);
            v18 += 4;
            --v19;
          }
          while ( v19 );
        }
        else
        {
          if ( v2->m_bMachineTimeSetting )
          {
            v2->m_MachineTimer.m_fStartTime = fCurTime;
            v2->m_MachineTimer.m_fObjectTime = 0.0;
            v2->m_MachineTimer.m_fElapsedTime = 0.0;
            v2->m_bMachineTimeSetting = 0;
            if ( v3->m_bLeaveReserve )
              MHDiceGameTask::NcGambleSlotmachineGameLeaveReq(v3);
          }
          else
          {
            if ( v2->m_MachineTimer.m_fObjectTime > 300.0 && !v2->m_bClickBetBut )
            {
              v20 = TextData2::Get(0x8BDBE3C2u);
              MHDiceGameTask::AddMsg(v3, v20, 1, 1);
              MHDiceGameTask::NcGambleSlotmachineGameLeaveReq(v3);
              v2->m_bMachineTimeSetting = 1;
            }
            *(float *)&result.m_pObject = v2->m_MachineTimer.m_fObjectTime;
            v60 = fCurTime - v2->m_MachineTimer.m_fStartTime;
            v21 = v60;
            v2->m_MachineTimer.m_fObjectTime = v60;
            v2->m_MachineTimer.m_fElapsedTime = v21 - *(float *)&result.m_pObject;
          }
          if ( v2->m_GameTimer.m_fObjectTime > 30.0 && v2->m_bClickBetBut )
          {
            SlotMachineWin::SendBettingInfo(v2);
            v2->m_GameTimer.m_fStartTime = fCurTime;
            v2->m_GameTimer.m_fObjectTime = 0.0;
            v2->m_GameTimer.m_fElapsedTime = 0.0;
          }
          *(float *)&result.m_pObject = v2->m_GameTimer.m_fObjectTime;
          v60 = fCurTime - v2->m_GameTimer.m_fStartTime;
          v22 = v60;
          v2->m_GameTimer.m_fObjectTime = v60;
          v2->m_GameTimer.m_fElapsedTime = v22 - *(float *)&result.m_pObject;
        }
        goto LABEL_68;
      case 3:
        v23 = (int)v2->ms_Slot;
        do
        {
          SlotEntry::roll((SlotEntry *)v23);
          v23 = v24 + 104;
        }
        while ( v25 != 1 );
        v2->me_State = 4;
        v2->m_GameTimer.m_fStartTime = fCurTime;
        v2->m_GameTimer.m_fObjectTime = 0.0;
        v2->m_GameTimer.m_fElapsedTime = 0.0;
        v26 = v2->ms_EffectPos.m_pObject;
        v57 = 856.0;
        *(float *)&v58 = 225.0;
        *((float *)&v58 + 1) = 1.0;
        NiQuaternion::NiQuaternion(&thisa, 0.0, 0.0, 0.0, 0.0);
        *(_DWORD *)v27 = LODWORD(v57);
        *(_QWORD *)&v27[4] = v58;
        *(_QWORD *)&v29.m_fW = *(_QWORD *)v28;
        *(_QWORD *)&v29.m_fY = *(_QWORD *)(v28 + 8);
        MHChipEffect::Start(v2->m_pkBarEffect[1], v26, COERCE_NIQUATERNION(v29.m_fW), *(NiPoint3 *)v27);
        v30 = v2->m_pkBarEffect[0]->m_spEffect.m_pObject;
        if ( v30 )
          v30->baseclass_0.m_uFlags |= 1u;
        SoundMgr::PlayInterfaceSound(&g_kSoundMgr, GB_SM_ReelStart);
        goto LABEL_68;
      case 4:
        if ( v2->m_GameTimer.m_fObjectTime <= 10.0 )
        {
          *(float *)&result.m_pObject = v2->m_GameTimer.m_fObjectTime;
          v60 = fCurTime - v2->m_GameTimer.m_fStartTime;
          v31 = v60;
          v2->m_GameTimer.m_fObjectTime = v60;
          v2->m_GameTimer.m_fElapsedTime = v31 - *(float *)&result.m_pObject;
        }
        else
        {
          if ( v2->m_bTransition )
          {
            v2->m_bTransition = 0;
            MHDiceGameTask::NcGambleSlotmachineStopbuttonReq(v3);
          }
        }
        v32 = v2->m_pkBarEffect[1];
        if ( v32->m_bLive )
        {
          if ( !MHChipEffect::Update(v32, fCurTime) )
          {
            v33 = v2->m_pkBarEffect[0]->m_spEffect.m_pObject;
            if ( v33 )
              v33->baseclass_0.m_uFlags &= 0xFFFEu;
          }
        }
        goto LABEL_68;
      case 5:
        if ( v2->m_bTransition )
        {
          v2->m_GameTimer.m_fStartTime = fCurTime;
          v2->m_GameTimer.m_fObjectTime = 0.0;
          v2->m_GameTimer.m_fElapsedTime = 0.0;
          SlotEntry::stop(v2->ms_Slot, v2->m_iResult[6]);
          ++v2->m_iStopID;
          v2->m_bTransition = 0;
        }
        else
        {
          if ( v2->m_GameTimer.m_fObjectTime <= 1.0 )
          {
            *(float *)&result.m_pObject = v2->m_GameTimer.m_fObjectTime;
            v60 = fCurTime - v2->m_GameTimer.m_fStartTime;
            v37 = v60;
            v2->m_GameTimer.m_fObjectTime = v60;
            v2->m_GameTimer.m_fElapsedTime = v37 - *(float *)&result.m_pObject;
          }
          else
          {
            v2->m_GameTimer.m_fStartTime = fCurTime;
            v2->m_GameTimer.m_fObjectTime = 0.0;
            v2->m_GameTimer.m_fElapsedTime = 0.0;
            v34 = v2->m_iStopID;
            if ( v34 == 9 )
            {
              v2->m_iStopID = 0;
              v2->me_State = 7;
              v2->m_bTransition = 1;
              v2->m_bRecivedResult = 0;
              MHDiceGameTask::NcGambleSlotmachineWheelstopReq(v3);
              return;
            }
            stopSeq[4] = 4;
            resultSeq[6] = 0;
            stopSeq[0] = 0;
            stopSeq[1] = 3;
            stopSeq[2] = 6;
            stopSeq[3] = 1;
            stopSeq[5] = 7;
            stopSeq[6] = 2;
            stopSeq[7] = 5;
            stopSeq[8] = 8;
            v35 = stopSeq[v34];
            resultSeq[0] = 6;
            resultSeq[1] = 7;
            resultSeq[2] = 8;
            resultSeq[3] = 3;
            resultSeq[4] = 4;
            resultSeq[5] = 5;
            resultSeq[7] = 1;
            resultSeq[8] = 2;
            v36 = resultSeq[v35];
            if ( v34 == 8 )
            {
              ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->StopAllSound)();
              ((void (*)(void))g_kSoundMgr.m_pkInterfaceGroup->baseclass_0.baseclass_0.baseclass_0.vfptr->UnloadAllSound)();
            }
            SlotEntry::stop(&v2->ms_Slot[v35], v2->m_iResult[v36]);
            ++v2->m_iStopID;
          }
        }
LABEL_68:
        v38 = (int)v2->m_pkButs;
        v39 = (int)&v2->_easeInOut[0]._speed;
        LODWORD(v60) = 6;
        do
        {
          *(float *)&result.m_pObject = v2->m_GameTimer.m_fElapsedTime;
          v40 = *(float *)&result.m_pObject;
          *(float *)&result.m_pObject = *(float *)(v39 - 8) - *(float *)&result.m_pObject;
          v41 = *(float *)&result.m_pObject;
          *(float *)&result.m_pObject = v41;
          *(float *)(v39 - 8) = v41;
          if ( *(float *)(v39 - 4) * 0.5 <= v41 )
            v42 = *(float *)(v39 + 4) * v40 + *(float *)v39;
          else
            v42 = *(float *)v39 - *(float *)(v39 + 4) * v40;
          *(float *)v39 = v42;
          *(float *)(v39 - 16) = v40 * *(float *)v39 + *(float *)(v39 - 16);
          if ( *(float *)&result.m_pObject <= 0.0 )
            v43 = 1.0;
          else
            v43 = *(float *)(v39 - 16);
          v44 = v43;
          (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v38 + 276))(LODWORD(v44));
          v38 += 4;
          v39 += 32;
          --LODWORD(v60);
        }
        while ( v60 != 0.0 );
        SlotMachineWin::UpdateCoin(v2, &v2->m_nUserCoin, &v2->m_nTempUserCoin, 0, 0);
        SlotMachineWin::UpdateCoin(v2, &v2->m_nPreBettingCoin, &v2->m_nBettingCoin, CT_BETTINGCOIN, 0);
        v45 = LODWORD(v2->m_nShareCoin);
        v46 = LODWORD(v2->m_nPreShareCoin);
        v47 = HIDWORD(v2->m_nPreShareCoin);
        if ( v45 == v46 && HIDWORD(v2->m_nShareCoin) == v47 )
          return;
        v48 = LODWORD(v2->m_nShareCoin) - LODWORD(v2->m_nPreShareCoin);
        v49 = (HIDWORD(v48) ^ v48) - HIDWORD(v48);
        if ( v49 <= 1000000 )
        {
          if ( v49 <= 100000 )
          {
            if ( v49 <= 10000 )
            {
              if ( v49 <= 1000 )
              {
                if ( v49 <= 100 )
                {
                  if ( v49 > 10 )
                    v49 = 10;
                }
                else
                {
                  v49 = 100;
                }
              }
              else
              {
                v49 = 1000;
              }
            }
            else
            {
              v49 = 10000;
            }
          }
          else
          {
            v49 = 100000;
          }
        }
        else
        {
          v49 = 1000000;
        }
        if ( (signed int)v47 > SHIDWORD(v2->m_nShareCoin) || (signed int)v47 >= SHIDWORD(v2->m_nShareCoin) && v46 >= v45 )
          v2->m_nPreShareCoin = __PAIR__(v47, v46) - v49;
        else
          v2->m_nPreShareCoin = __PAIR__(v47, v46) + v49;
        if ( SHIDWORD(v2->m_nPreShareCoin) <= 0 && SHIDWORD(v2->m_nPreShareCoin) < 0 )
        {
          LODWORD(v2->m_nPreShareCoin) = 0;
          HIDWORD(v2->m_nPreShareCoin) = 0;
        }
        v50 = LODWORD(v2->m_nPreShareCoin);
        HIDWORD(v58) = HIDWORD(v2->m_nPreShareCoin);
        LODWORD(v60) = 7;
        result.m_pObject = (MHDiceGameTask *)&v2->m_pkShareNum[7];
        break;
      case 7:
        v2->m_bMachineTimeSetting = 0;
        SlotMachineWin::UpdateResult(v2, fCurTime);
        goto LABEL_68;
      default:
        goto LABEL_68;
    }
    while ( 1 )
    {
      v52 = (signed __int64)__PAIR__(HIDWORD(v58), v50) % 10;
      v51 = (signed int)((signed __int64)__PAIR__(HIDWORD(v58), v50) % 10) < 0;
      v53 = (signed __int64)__PAIR__(HIDWORD(v58), v50) / 10;
      HIDWORD(v58) = (unsigned __int64)((signed __int64)__PAIR__(HIDWORD(v58), v50) / 10) >> 32;
      v50 = v53;
      if ( v51 )
        v52 = 0;
      (*((void (__stdcall **)(_DWORD))result.m_pObject->baseclass_0.baseclass_0.vfptr->__vecDelDtor + 123))(v52);
      if ( !(HIDWORD(v58) | (unsigned int)v53) )
        break;
      result.m_pObject = (MHDiceGameTask *)((char *)result.m_pObject - 4);
      --LODWORD(v60);
      if ( SLODWORD(v60) < 0 )
        return;
    }
    v54 = LODWORD(v60) - 1;
    if ( LODWORD(v60) - 1 >= 0 )
    {
      v55 = (int)&v2->m_pkShareNum[v54];
      do
      {
        (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v55 + 492))(0);
        v55 -= 4;
        --v54;
      }
      while ( v54 >= 0 );
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0072A220) --------------------------------------------------------
SlotMachineWin *__cdecl SlotMachineWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  int v2; // eax@2
  int v3; // esi@2
  PgWin *v4; // edi@8
  SlotMachineWin *v5; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x850u);
  result.m_pObject = (PgWin *)v1;
  v7 = 0;
  if ( v1 )
  {
    SlotMachineWin::SlotMachineWin((SlotMachineWin *)v1);
    v3 = v2;
  }
  else
  {
    v3 = 0;
  }
  if ( v3 )
    InterlockedIncrement((volatile LONG *)(v3 + 4));
  v7 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v3);
  if ( (unsigned __int8)(*(int (__thiscall **)(int, PgFrameWork *))(*(_DWORD *)v3 + 540))(v3, pkFrameWork) )
  {
    (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3);
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = (SlotMachineWin *)v3;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v3);
    if ( result.m_pObject )
    {
      v4 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v4 )
          v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
      }
    }
    v7 = -1;
    if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
      (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    v5 = 0;
  }
  return v5;
}

//----- (0072A350) --------------------------------------------------------
MiniSlotMachineWin *__cdecl MiniSlotMachineWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  MiniSlotMachineWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x15Cu);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &MiniSlotMachineWin::_vftable_;
    *((_DWORD *)v2 + 58) = &MiniSlotMachineWin::_vftable_;
    *((_BYTE *)v2 + 344) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (MiniSlotMachineWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D7CB0: using guessed type int (__stdcall *MiniSlotMachineWin___vftable_)(int uiFlags);
// 9D7CCC: using guessed type int (__thiscall *MiniSlotMachineWin___vftable_)(void *p, char);

//----- (0072A4A0) --------------------------------------------------------
GBSlotHelpWin *__cdecl GBSlotHelpWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GBSlotHelpWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x160u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GBSlotHelpWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GBSlotHelpWin::_vftable_;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GBSlotHelpWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D7EF0: using guessed type int (__stdcall *GBSlotHelpWin___vftable_)(int uiFlags);
// 9D7F0C: using guessed type int (__thiscall *GBSlotHelpWin___vftable_)(void *p, char);

//----- (0072A5E0) --------------------------------------------------------
void __thiscall GBSlotRankWin::GBSlotRankWin(GBSlotRankWin *this)
{
  GBSlotRankWin *v1; // esi@1

  v1 = this;
  PgWinFrame::PgWinFrame(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GBSlotRankWin::_vftable_;
  v1->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GBSlotRankWin::_vftable_;
  *(_DWORD *)&v1->m_JackpotRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_JackpotRankList.baseclass_0._Mylast = 0;
  v1->m_JackpotRankList.baseclass_0._Myend = 0;
  *(_DWORD *)&v1->m_WinRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_WinRankList.baseclass_0._Mylast = 0;
  v1->m_WinRankList.baseclass_0._Myend = 0;
}
// 9D83A4: using guessed type int (__stdcall *GBSlotRankWin___vftable_)(int uiFlags);
// 9D83C4: using guessed type int (__thiscall *GBSlotRankWin___vftable_)(void *p, char);

//----- (0072A630) --------------------------------------------------------
void __thiscall GBSlotRankWin::_GBSlotRankWin(GBSlotRankWin *this)
{
  GBSlotRankWin *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GBSlotRankWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GBSlotRankWin::_vftable_;
  if ( *(_DWORD *)&this->m_WinRankList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_WinRankList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_WinRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_WinRankList.baseclass_0._Mylast = 0;
  v1->m_WinRankList.baseclass_0._Myend = 0;
  if ( *(_DWORD *)&v1->m_JackpotRankList.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&v1->m_JackpotRankList.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_JackpotRankList.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_JackpotRankList.baseclass_0._Mylast = 0;
  v1->m_JackpotRankList.baseclass_0._Myend = 0;
  PgWinFrame::_PgWinFrame(&v1->baseclass_0);
}
// 9D83A4: using guessed type int (__stdcall *GBSlotRankWin___vftable_)(int uiFlags);
// 9D83C4: using guessed type int (__thiscall *GBSlotRankWin___vftable_)(void *p, char);

//----- (0072A6A0) --------------------------------------------------------
GBSlotRankWin *__cdecl GBSlotRankWin::CreateWin(PgFrameWork *pkFrameWork)
{
  void *v1; // eax@1
  void *v2; // esi@1
  PgWin *v3; // edi@8
  GBSlotRankWin *v4; // eax@13
  NiPointer<PgWin> result; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = operator new(0x194u);
  v2 = v1;
  result.m_pObject = (PgWin *)v1;
  v6 = 0;
  if ( v1 )
  {
    PgWinFrame::PgWinFrame((PgWinFrame *)v1);
    *(_DWORD *)v2 = &GBSlotRankWin::_vftable_;
    *((_DWORD *)v2 + 58) = &GBSlotRankWin::_vftable_;
    *((_DWORD *)v2 + 93) = 0;
    *((_DWORD *)v2 + 94) = 0;
    *((_DWORD *)v2 + 95) = 0;
    *((_DWORD *)v2 + 97) = 0;
    *((_DWORD *)v2 + 98) = 0;
    *((_DWORD *)v2 + 99) = 0;
  }
  else
  {
    v2 = 0;
  }
  if ( v2 )
    InterlockedIncrement((volatile LONG *)v2 + 1);
  v6 = 1;
  PgWinMgr::Add(&Pgg_kWinMgr, (PgWin *)v2);
  if ( (unsigned __int8)(*(int (__thiscall **)(void *, PgFrameWork *))(*(_DWORD *)v2 + 540))(v2, pkFrameWork) )
  {
    (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 356))(v2);
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = (GBSlotRankWin *)v2;
  }
  else
  {
    PgWinMgr::Remove(&Pgg_kWinMgr, &result, (PgWin *)v2);
    if ( result.m_pObject )
    {
      v3 = result.m_pObject;
      if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v3 )
          v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      }
    }
    v6 = -1;
    if ( !InterlockedDecrement((volatile LONG *)v2 + 1) )
      (**(void (__thiscall ***)(void *, signed int))v2)(v2, 1);
    v4 = 0;
  }
  return v4;
}
// 9D83A4: using guessed type int (__stdcall *GBSlotRankWin___vftable_)(int uiFlags);
// 9D83C4: using guessed type int (__thiscall *GBSlotRankWin___vftable_)(void *p, char);

//----- (0072A800) --------------------------------------------------------
void __thiscall GBSlotRankWin::UpdateList(GBSlotRankWin *this, std::vector<SlotJackpotRankInfo,std::allocator<SlotJackpotRankInfo> > RankList)
{
  GBSlotRankWin *v2; // edi@1
  int v3; // esi@1
  int v4; // ebx@1
  int v5; // eax@1
  unsigned int v6; // ecx@2
  MHDiceGameTask *v7; // ecx@7
  MHDiceGameTask *v8; // ebx@8
  int v9; // ebx@13
  SlideListWin *v10; // ecx@13
  unsigned int v11; // eax@13
  signed int v12; // edx@13
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-B8h]@7
  int v14; // [sp+8h] [bp-B4h]@3
  unsigned int i; // [sp+Ch] [bp-B0h]@2
  bool v16; // [sp+13h] [bp-A9h]@7
  char szdata[128]; // [sp+14h] [bp-A8h]@1
  char acname[21]; // [sp+94h] [bp-28h]@13
  unsigned int v19; // [sp+ACh] [bp-10h]@1
  int v20; // [sp+B8h] [bp-4h]@1
  int v21; // [sp+BCh] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v2 = this;
  v3 = 0;
  v20 = 0;
  szdata[0] = 0;
  memset(&szdata[1], 0, 0x7Fu);
  v4 = *(_DWORD *)&RankList;
  v5 = (signed int)((char *)RankList.baseclass_0._Mylast - *(_DWORD *)&RankList) / 24;
  if ( v5 )
  {
    v6 = *(_DWORD *)(*(_DWORD *)&RankList + 20);
    i = 0;
    if ( (unsigned int)v5 > 0 )
    {
      v14 = 1;
      while ( 1 )
      {
        if ( *(_DWORD *)(v3 + v4 + 20) < v6 )
          ++v14;
        v7 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
        LOBYTE(v20) = 1;
        v16 = MHDiceGameTask::IsGambleMode(v7);
        LOBYTE(v20) = 0;
        if ( result.m_pObject )
        {
          v8 = result.m_pObject;
          if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
          {
            if ( v8 )
              v8->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v8, 1u);
          }
        }
        if ( v16 )
          sprintf(szdata, "%d%s");
        v9 = SlideListWin::AddText(v2->m_pUserList, szdata);
        *(_DWORD *)acname = *(_DWORD *)(v3 + *(_DWORD *)&RankList);
        *(_DWORD *)&acname[4] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 4);
        *(_DWORD *)&acname[8] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 8);
        v10 = v2->m_pUserList;
        *(_DWORD *)&acname[12] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 12);
        *(_DWORD *)&acname[16] = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 16);
        acname[20] = 0;
        SlideListWin::SetText(v10, v9, 1u, acname);
        SlideListWin::AlignText(v2->m_pUserList, 1u, 4u);
        sprintf(szdata, "%d");
        SlideListWin::SetText(v2->m_pUserList, v9, 2u, szdata);
        v4 = *(_DWORD *)&RankList;
        v11 = *(_DWORD *)(v3 + *(_DWORD *)&RankList + 20);
        ++i;
        v12 = (signed int)((unsigned __int64)(715827883i64
                                            * (unsigned int)((char *)RankList.baseclass_0._Mylast - *(_DWORD *)&RankList)) >> 32) >> 2;
        v3 += 24;
        if ( i >= v12 + ((unsigned int)v12 >> 31) )
          break;
        v6 = v11;
      }
    }
  }
  SlideListWin::UpdateViewList(v2->m_pUserList);
  if ( *(_DWORD *)&RankList )
    operator delete(*(void **)&RankList);
}
// A85C00: using guessed type int __security_cookie;

//----- (0072AA20) --------------------------------------------------------
void __thiscall GBSlotRankWin::UpdateViewList(GBSlotRankWin *this)
{
  GBSlotRankWin *v1; // esi@1
  SlideListWin *v2; // ecx@1
  bool v3; // zf@2
  int v4; // [sp-14h] [bp-1Ch]@3
  std::vector<SlotJackpotRankInfo,std::allocator<SlotJackpotRankInfo> > v5; // [sp-10h] [bp-18h]@2
  std::vector<SlotJackpotRankInfo,std::allocator<SlotJackpotRankInfo> > *v6; // [sp+4h] [bp-4h]@2

  v1 = this;
  v2 = this->m_pUserList;
  if ( v2 )
  {
    SlideListWin::RemoveAllList(v2);
    v3 = v1->m_nCurSelTab == 1;
    v6 = &v5;
    if ( v3 )
      v4 = (int)&v1->m_JackpotRankList;
    else
      v4 = (int)&v1->m_WinRankList;
    std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>(
      (std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *)&v5,
      (std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *)v4);
    GBSlotRankWin::UpdateList(v1, v5);
    SlideBar::SetSplitCnt(v1->m_pkSlideBarEx, 0);
  }
}

//----- (0072AA80) --------------------------------------------------------
void __thiscall GBSlotRankWin::OnCommand(GBSlotRankWin *this, unsigned int wParam, int lParam)
{
  GBSlotRankWin *v3; // ebx@1
  MHDiceGameTask *v4; // edi@2
  unsigned int v5; // esi@3
  MHDiceGameTask *v6; // edi@10
  MHDiceGameTask *v7; // esi@11
  MHDiceGameTask *v8; // ecx@19
  int v9; // esi@20
  int v10; // [sp+0h] [bp-14h]@19
  NiPointer<MHDiceGameTask> result; // [sp+4h] [bp-10h]@10
  int v12; // [sp+10h] [bp-4h]@19

  v3 = this;
  switch ( wParam )
  {
    case 0u:
      v4 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&wParam)->m_pObject;
      if ( wParam )
      {
        v5 = wParam;
        if ( !InterlockedDecrement((volatile LONG *)(wParam + 4)) )
        {
          if ( v5 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v5)(v5, 1);
        }
      }
      if ( v4 && MHDiceGameTask::IsGambleMode(v4) )
        MHDiceGameTask::NcGambleSlotmachineJackpotRankReq(v4);
      else
        GBSlotRankWin::OnTAB1(v3);
      break;
    case 1u:
      v6 = MHDiceGameTask::GetDiceGameTask(&result)->m_pObject;
      if ( result.m_pObject )
      {
        v7 = result.m_pObject;
        if ( !InterlockedDecrement((volatile LONG *)&result.m_pObject->baseclass_0.baseclass_0.m_uiRefCount) )
        {
          if ( v7 )
            v7->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v7, 1u);
        }
      }
      if ( v6 && MHDiceGameTask::IsGambleMode(v6) )
        MHDiceGameTask::NcGambleSlotmachineWinRankReq(v6);
      else
        GBSlotRankWin::OnTAB2(v3);
      break;
    case 2u:
      GBSlotRankWin::OnSlideBar(this);
      break;
    case 4u:
    case 5u:
      v8 = MHDiceGameTask::GetDiceGameTask((NiPointer<MHDiceGameTask> *)&v10)->m_pObject;
      v12 = 0;
      MHDiceGameTask::OnCloseWin(v8, &v3->baseclass_0.baseclass_0.baseclass_0);
      v12 = -1;
      if ( v10 )
      {
        v9 = v10;
        if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) )
        {
          if ( v9 )
            (**(void (__thiscall ***)(_DWORD, _DWORD))v9)(v9, 1);
        }
      }
      break;
    default:
      return;
  }
}

//----- (0072AC40) --------------------------------------------------------
bool __thiscall GBSlotRankWin::Create(GBSlotRankWin *this, PgFrameWork *pkFrameWork)
{
  GBSlotRankWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // ecx@3
  NiNode *v6; // esi@7
  bool result; // al@10
  NiAVObject *v8; // eax@11
  NiProperty *v9; // eax@11
  NiProperty *v10; // edi@11
  NiRefObjectVtbl *v11; // eax@13
  NiSourceTexture *v12; // eax@14
  NiNode *v13; // esi@17
  PgSprData *v14; // eax@21
  NiNode *v15; // esi@24
  int v16; // edi@28
  int v17; // ebx@28
  NiSourceTexture *v18; // eax@28
  PgSprData *v19; // eax@31
  PgFont *v20; // eax@32
  PgWinText *v21; // eax@32
  NiRefObjectVtbl *v22; // edx@32
  char *v23; // eax@32
  D3DXCOLOR v24; // ST48_16@32
  char *v25; // eax@32
  SLWCreateInfo::Item *v26; // eax@32
  PgSprData *v27; // eax@32
  SlideListWin *v28; // eax@32
  PgSprData *v29; // eax@32
  SlideBar *v30; // eax@32
  void *v31; // ecx@32
  void *(__thiscall *v32)(NiRefObject *, unsigned int); // edx@32
  int v33; // eax@32
  int v34; // eax@32
  int v35; // ecx@32
  void *v36; // eax@32
  PgFont *v37; // eax@32
  PgWinText *v38; // eax@32
  NiRefObjectVtbl *v39; // edx@32
  char *v40; // eax@32
  ColumnBut *v41; // eax@32
  void *v42; // edx@32
  int v43; // eax@32
  void *v44; // edx@32
  PgFont *v45; // eax@32
  PgWinText *v46; // eax@32
  NiRefObjectVtbl *v47; // edx@32
  char *v48; // eax@32
  PgFont *v49; // eax@35
  char *v50; // eax@35
  PgFont *v51; // eax@36
  PgWinText *v52; // eax@36
  void *v53; // ecx@36
  char *v54; // eax@36
  PgFont *v55; // eax@37
  PgWinText *v56; // eax@37
  NiRefObjectVtbl *v57; // edi@37
  char *v58; // eax@37
  const char *v59; // [sp+4Ch] [bp-A0h]@29
  int *v60; // [sp+50h] [bp-9Ch]@29
  int *v61; // [sp+54h] [bp-98h]@29
  NiSourceTexture *v62; // [sp+58h] [bp-94h]@29
  unsigned int v63; // [sp+5Ch] [bp-90h]@1
  SLWCreateInfo kCreateInfo; // [sp+6Ch] [bp-80h]@32
  UIUtil ui; // [sp+88h] [bp-64h]@28
  NiPointer<NiTexturingProperty> spTexProp; // [sp+9Ch] [bp-50h]@11
  NiSourceTexture *pkTexture; // [sp+A0h] [bp-4Ch]@14
  unsigned int uiHeight; // [sp+A4h] [bp-48h]@31
  unsigned int uiWidth; // [sp+A8h] [bp-44h]@31
  PgWinBut *pkBtn; // [sp+ACh] [bp-40h]@32
  int uiTop; // [sp+B0h] [bp-3Ch]@21
  int uiLeft; // [sp+B4h] [bp-38h]@21
  NiPointer<NiNode> spNode; // [sp+B8h] [bp-34h]@1
  void *pkTextWin; // [sp+BCh] [bp-30h]@32
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+C0h] [bp-2Ch]@32
  unsigned int v76; // [sp+DCh] [bp-10h]@1
  int v77; // [sp+E8h] [bp-4h]@1
  int v78; // [sp+ECh] [bp+0h]@1

  v76 = (unsigned int)&v78 ^ __security_cookie;
  v63 = (unsigned int)&v78 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v77 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameHallOfFame.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\DiceGameHallOfFame.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v77 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v2->baseclass_0.m_pkFrameWork = pkFrameWork;
  v8 = (NiAVObject *)((int (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v9 = NiAVObject::GetProperty(v8, 8);
  v10 = v9;
  spTexProp.m_pObject = (NiTexturingProperty *)v9;
  if ( v9 )
    InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v11 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v77) = 1;
  if ( v11 && (v12 = (NiSourceTexture *)v11[1].__vecDelDtor, (pkTexture = v12) != 0) )
  {
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", &uiLeft, &uiTop, v12);
    if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v14, 0, pkFrameWork, "SlotRank", 0) )
    {
      v16 = uiLeft;
      v17 = uiTop;
      UIUtil::UIUtil(&ui);
      LOBYTE(v77) = 2;
      UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, v16, v17);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      v18 = MenuTexMgr::GetTexture(0x13u);
      if ( v18 )
      {
        v62 = v18;
        v61 = &uiTop;
        v60 = &uiLeft;
        v59 = "Theme";
      }
      else
      {
        v62 = 0;
        v61 = &uiTop;
        v60 = &uiLeft;
        v59 = "Theme";
      }
      v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v59, v60, v61, v62);
      PgWinSpr::CreateWin(uiLeft - v16, uiTop - v17, v19, &v2->baseclass_0.baseclass_0.baseclass_0, 0, 0);
      UIUtil::CreateSpr(&ui, "Panel01", 0);
      UIUtil::CreateSpr(&ui, "Panel02", 0);
      UIUtil::CreateSpr(&ui, "Panel03", 0);
      UIUtil::CreateSpr(&ui, "Plane01", 0);
      if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "WinTitle", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
      {
        v20 = Font::Get(MAIN_MENU);
        v21 = PgWinText::CreateWin(
                uiLeft - v16,
                uiTop - v17,
                uiWidth,
                uiHeight,
                v20,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
        v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkTextWin = v21;
        v22[122].__vecDelDtor((NiRefObject *)v21, 1u);
        pkBtn = *(PgWinBut **)pkTextWin;
        v23 = TextData2::Get(0x38956697u);
        LODWORD(pkBtn[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z)(pkTextWin, v23);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
        pkBtn = UIUtil::CreateBtn(&ui, 5u, "Btn01Nor", "Btn01Click", "Btn01Over", 0, 0);
        *(_QWORD *)&v24.r = *(_QWORD *)&Color::m_kDxWhiteColor;
        *(_QWORD *)&v24.b = *(_QWORD *)&Color::m_kDxWhiteColor.b;
        v25 = TextData::Get(0x4F5F499Fu);
        UIUtil::CreateAttachedText(&ui, &pkBtn->baseclass_0.baseclass_0, v25, COERCE_D3DXCOLOR(v24.r), 5u);
        UIUtil::CreateBtn(&ui, 4u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
        *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
        kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
        kCreateInfo.m_bMakeData = 0;
        kCreateInfo.m_nOffX = 0;
        kCreateInfo.m_nOffY = 0;
        LOBYTE(v77) = 3;
        v26 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
        v26->nItemType = 1;
        v26->pNode = spNode.m_pObject;
        pkTextWin = v26;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "ColumnBarNor");
        LOBYTE(v77) = 4;
        pkBtn = (PgWinBut *)((char *)pkTextWin + 72);
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v77) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "ColumnBarOver");
        LOBYTE(v77) = 5;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)pkBtn,
          &thisa);
        LOBYTE(v77) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
        *(_DWORD *)pkTextWin = 2;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "Column01");
        LOBYTE(v77) = 6;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v77) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
        pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
        *(_DWORD *)pkTextWin = 2;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "Column02");
        LOBYTE(v77) = 7;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v77) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
        pkTextWin = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
        *(_DWORD *)pkTextWin = 2;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &thisa,
          "Column03");
        LOBYTE(v77) = 8;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          (std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)((char *)pkTextWin + 72),
          &thisa);
        LOBYTE(v77) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&thisa);
        *((_DWORD *)pkTextWin + 1) = spNode.m_pObject;
        kCreateInfo.m_nOffX = 3;
        kCreateInfo.m_nOffY = 0;
        SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
        v27 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "TextBox", &uiLeft, &uiTop, pkTexture);
        v28 = SlideListWin::CreateWin(
                uiLeft - v16,
                uiTop - v17,
                v27,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                &kCreateInfo,
                0,
                0);
        v2->m_pUserList = v28;
        v28->m_uiLClickMsg = 3;
        SlideListWin::AlignText(v2->m_pUserList, 0);
        SlideListWin::UpdateViewList(v2->m_pUserList);
        v29 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "SlideBar_SlideBtnMiddle", &uiLeft, &uiTop, pkTexture);
        v30 = SlideBar::CreateWin(
                spNode.m_pObject,
                "SlideBar",
                "SlideBar_UpBtn",
                "SlideBar_DnBtn",
                v29,
                0,
                &v2->baseclass_0.baseclass_0.baseclass_0);
        v2->m_pkSlideBarEx = v30;
        v30->m_uiClickMsg = 2;
        v2->m_pkSlideBarEx->m_eType = 1;
        v31 = v2->m_pkSlideBarEx;
        v32 = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[42].__vecDelDtor;
        pkTextWin = v2->m_pkSlideBarEx->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkBtn = (PgWinBut *)v31;
        v33 = ((int (__cdecl *)(unsigned int))v32)(v63);
        v34 = ((int (__stdcall *)(int))pkBtn->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[41].__vecDelDtor)(v33);
        (*(void (__thiscall **)(SlideBar *, int))((void (__thiscall **)(_DWORD, _DWORD))pkTextWin + 77))(
          v2->m_pkSlideBarEx,
          v34);
        SlideBar::SetSplitCnt(v2->m_pkSlideBarEx, v2->m_pUserList->m_nSlideSplitCnt);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "JobTabOff01", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "JobTabOn01");
        v2->m_pkTab01 = ColumnBut::CreateWin(
                          uiLeft - v16,
                          uiTop - v17,
                          (PgSprData *)pkTextWin,
                          &v2->baseclass_0.baseclass_0.baseclass_0,
                          0,
                          0);
        v35 = *((_DWORD *)pkTextWin + 9);
        v36 = *(void **)(*(_DWORD *)v35 + 20);
        pkBtn = *(PgWinBut **)(*(_DWORD *)v35 + 24);
        pkTextWin = v36;
        v37 = Font::Get(MAIN_MENU);
        v38 = PgWinText::CreateWin(
                uiLeft - v16,
                uiTop - v17 + 1,
                (unsigned int)pkTextWin,
                (unsigned int)pkBtn,
                v37,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
        v39 = v38->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkTextWin = v38;
        v39[122].__vecDelDtor((NiRefObject *)v38, 5u);
        pkBtn = *(PgWinBut **)pkTextWin;
        v40 = TextData2::Get(0x80FBD6CEu);
        LODWORD(pkBtn[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z)(pkTextWin, v40);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
        pkTextWin = PgSprData::Create(&spNode.m_pObject->baseclass_0, "JobTabOff02", &uiLeft, &uiTop, pkTexture);
        PgSprData::Add((PgSprData *)pkTextWin, &spNode.m_pObject->baseclass_0, "JobTabOn02");
        v41 = ColumnBut::CreateWin(
                uiLeft - v16,
                uiTop - v17,
                (PgSprData *)pkTextWin,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                1u,
                0);
        v42 = pkTextWin;
        v2->m_pkTab02 = v41;
        v43 = **((_DWORD **)v42 + 9);
        v44 = *(void **)(v43 + 20);
        pkBtn = *(PgWinBut **)(v43 + 24);
        pkTexture = (NiSourceTexture *)v44;
        v45 = Font::Get(MAIN_MENU);
        v46 = PgWinText::CreateWin(
                uiLeft - v16,
                uiTop - v17 + 1,
                (unsigned int)pkTexture,
                (unsigned int)pkBtn,
                v45,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
        v47 = v46->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        pkTextWin = v46;
        v47[122].__vecDelDtor((NiRefObject *)v46, 5u);
        pkBtn = *(PgWinBut **)pkTextWin;
        v48 = TextData2::Get(0x41382D9Eu);
        LODWORD(pkBtn[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z)(pkTextWin, v48);
        (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
        if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text01", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
        {
          v49 = Font::Get(SMALL);
          pkTextWin = PgWinText::CreateWin(
                        uiLeft - v16,
                        uiTop - v17,
                        uiWidth,
                        uiHeight,
                        v49,
                        &v2->baseclass_0.baseclass_0.baseclass_0,
                        0,
                        0);
          pkBtn = *(PgWinBut **)pkTextWin;
          v50 = TextData::Get(0x91B1F3EDu);
          LODWORD(pkBtn[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z)(pkTextWin, v50);
          (*(void (__stdcall **)(signed int))(*(_DWORD *)pkTextWin + 488))(5);
          (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
          if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text02", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
          {
            v51 = Font::Get(SMALL);
            v52 = PgWinText::CreateWin(
                    uiLeft - v16,
                    uiTop - v17,
                    uiWidth,
                    uiHeight,
                    v51,
                    &v2->baseclass_0.baseclass_0.baseclass_0,
                    0,
                    0);
            v53 = v52->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
            pkTextWin = v52;
            pkBtn = (PgWinBut *)v53;
            v54 = TextData::Get(0x1F4282A9u);
            LODWORD(pkBtn[1].baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_kWorld.m_Translate.z)(pkTextWin, v54);
            (*(void (__stdcall **)(signed int))(*(_DWORD *)pkTextWin + 488))(5);
            (*(void (__stdcall **)(_DWORD))(*(_DWORD *)pkTextWin + 240))(0);
            if ( PgUtil::GetTriShapeRect(&spNode.m_pObject->baseclass_0, "Text03", &uiLeft, &uiTop, &uiWidth, &uiHeight) )
            {
              v55 = Font::Get(SMALL);
              v56 = PgWinText::CreateWin(
                      uiLeft - v16,
                      uiTop - v17,
                      uiWidth,
                      uiHeight,
                      v55,
                      &v2->baseclass_0.baseclass_0.baseclass_0,
                      0,
                      0);
              v2->m_pkTabText = v56;
              v57 = v56->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
              v58 = TextData2::Get(0xD75E3C3Eu);
              v57[118].__vecDelDtor((NiRefObject *)v2->m_pkTabText, (unsigned int)v58);
              ((void (__stdcall *)(signed int))v2->m_pkTabText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(5);
              ((void (__stdcall *)(_DWORD))v2->m_pkTabText->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor)(0);
              ((void (__thiscall *)(GBSlotRankWin *, unsigned int, unsigned int, _DWORD, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
                v2,
                PgWin::ms_uiScreenWidth,
                PgWin::ms_uiScreenHeight,
                0.40000001,
                0.5);
              v2->m_pkTab01->m_bCheck = 1;
              v2->m_pkTab02->m_bCheck = 0;
              v2->m_nCurSelTab = 1;
              LOBYTE(v77) = 2;
              SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
              LOBYTE(v77) = 1;
              UIUtil::_UIUtil(&ui);
              LOBYTE(v77) = 0;
              NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
              v77 = -1;
              NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
              return 1;
            }
          }
        }
        LOBYTE(v77) = 2;
        SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
      }
      LOBYTE(v77) = 1;
      UIUtil::_UIUtil(&ui);
      LOBYTE(v77) = 0;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
      v77 = -1;
      NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
      return 0;
    }
    LOBYTE(v77) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v15 = spNode.m_pObject;
    v77 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v15 )
      return 0;
    v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
    result = 0;
  }
  else
  {
    LOBYTE(v77) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v13 = spNode.m_pObject;
    v77 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0072B6D0) --------------------------------------------------------
bool __thiscall GBSlotHelpWin::Create(GBSlotHelpWin *this, PgFrameWork *pkFrameWork)
{
  GBSlotHelpWin *v2; // esi@1
  NiTexturePalette *v3; // edi@1
  char *v4; // eax@3
  NiNode *v5; // ecx@3
  NiNode *v6; // esi@7
  bool result; // al@10
  NiAVObject *v8; // eax@11
  NiProperty *v9; // eax@11
  NiProperty *v10; // edi@11
  NiRefObjectVtbl *v11; // eax@13
  NiSourceTexture *v12; // eax@14
  NiNode *v13; // esi@17
  PgSprData *v14; // eax@21
  NiNode *v15; // esi@24
  int v16; // edi@28
  int v17; // ebx@28
  NiSourceTexture *v18; // eax@28
  PgSprData *v19; // eax@31
  PgFont *v20; // eax@33
  PgWinText *v21; // edi@33
  NiRefObjectVtbl *v22; // ebx@33
  char *v23; // eax@33
  SLWCreateInfo::Item *v24; // ebx@33
  SLWCreateInfo::Item *v25; // ebx@33
  PgSprData *v26; // eax@33
  SlideListWin *v27; // eax@33
  char *v28; // eax@34
  char *v29; // eax@34
  char *v30; // eax@34
  char *v31; // eax@34
  char *v32; // eax@34
  char *v33; // eax@34
  char *v34; // eax@34
  char *v35; // eax@34
  char *v36; // eax@34
  char *v37; // eax@34
  char *v38; // eax@34
  char *v39; // eax@34
  char *v40; // eax@34
  char *v41; // eax@34
  char *v42; // eax@34
  char *v43; // eax@34
  char *v44; // eax@34
  char *v45; // edi@35
  int v46; // eax@37
  int v47; // ebx@37
  unsigned int v48; // eax@37
  unsigned int v49; // edi@41
  const void *v50; // eax@43
  SlideListWin *v51; // ecx@45
  PgSprData *v52; // eax@49
  SlideBar *v53; // eax@49
  const char *v54; // [sp+8h] [bp-2A8h]@29
  int *v55; // [sp+Ch] [bp-2A4h]@29
  int *v56; // [sp+10h] [bp-2A0h]@29
  NiSourceTexture *v57; // [sp+14h] [bp-29Ch]@29
  unsigned int v58; // [sp+18h] [bp-298h]@1
  SLWCreateInfo kCreateInfo; // [sp+28h] [bp-288h]@33
  UIUtil ui; // [sp+44h] [bp-26Ch]@28
  unsigned int found; // [sp+58h] [bp-258h]@37
  unsigned int uiHeight; // [sp+5Ch] [bp-254h]@31
  unsigned int uiWidth; // [sp+60h] [bp-250h]@31
  NiPointer<NiTexturingProperty> spTexProp; // [sp+64h] [bp-24Ch]@11
  HDC__ *hDC; // [sp+68h] [bp-248h]@28
  PgWinText *pkTestWin; // [sp+6Ch] [bp-244h]@28
  char _Ptr; // [sp+70h] [bp-240h]@34
  NiSourceTexture *lengthSize; // [sp+74h] [bp-23Ch]@14
  void *uiLeft; // [sp+78h] [bp-238h]@21
  void *uiTop; // [sp+7Ch] [bp-234h]@21
  NiPointer<NiNode> spNode; // [sp+80h] [bp-230h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strText; // [sp+84h] [bp-22Ch]@33
  char acStr[256]; // [sp+A0h] [bp-210h]@34
  char buffer[256]; // [sp+1A0h] [bp-110h]@41
  unsigned int v75; // [sp+2A0h] [bp-10h]@1
  int v76; // [sp+2ACh] [bp-4h]@1
  int v77; // [sp+2B0h] [bp+0h]@1

  v75 = (unsigned int)&v77 ^ __security_cookie;
  v58 = (unsigned int)&v77 ^ __security_cookie;
  v2 = this;
  spNode.m_pObject = 0;
  v3 = dword_B70448;
  v76 = 0;
  if ( !Folder::m_bInit )
    Folder::Init();
  v4 = Folder::Merge(&Folder::m_acMenu, "Game\\DiceGameHelp.nif");
  PgUtil::LoadNodeNifFile(v4, &spNode, v3);
  v5 = spNode.m_pObject;
  if ( !spNode.m_pObject )
  {
    if ( NiMessageBox::ms_pfnMessageBox )
    {
      NiMessageBox::ms_pfnMessageBox("Game\\DiceGameHelp.nif load fail", "LoadFail", spNode.m_pObject);
      v5 = spNode.m_pObject;
    }
    v76 = -1;
    if ( v5 )
    {
      v6 = v5;
      if ( !InterlockedDecrement((volatile LONG *)&v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      {
        if ( v6 )
          v6->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
      }
    }
    return 0;
  }
  v2->baseclass_0.m_pkFrameWork = pkFrameWork;
  v8 = (NiAVObject *)((int (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("Frame");
  v9 = NiAVObject::GetProperty(v8, 8);
  v10 = v9;
  spTexProp.m_pObject = (NiTexturingProperty *)v9;
  if ( v9 )
    InterlockedIncrement((volatile LONG *)&v9->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v11 = v10[1].baseclass_0.m_spControllers.m_pObject->baseclass_0.baseclass_0.vfptr;
  LOBYTE(v76) = 1;
  if ( v11 && (v12 = (NiSourceTexture *)v11[1].__vecDelDtor, (lengthSize = v12) != 0) )
  {
    v14 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Frame", (int *)&uiLeft, (int *)&uiTop, v12);
    if ( PgWinFrame::Create(&v2->baseclass_0, 0, 0, v14, 0, pkFrameWork, "SlotHelp", 0) )
    {
      v16 = (int)uiLeft;
      v17 = (int)uiTop;
      pkTestWin = (PgWinText *)uiLeft;
      hDC = (HDC__ *)uiTop;
      UIUtil::UIUtil(&ui);
      LOBYTE(v76) = 2;
      UIUtil::SetParent(&ui, &v2->baseclass_0.baseclass_0.baseclass_0);
      UIUtil::SetOffset(&ui, v16, v17);
      UIUtil::SetUIGeom(&ui, &spNode.m_pObject->baseclass_0);
      v18 = MenuTexMgr::GetTexture(0x13u);
      if ( v18 )
      {
        v57 = v18;
        v56 = (int *)&uiTop;
        v55 = (int *)&uiLeft;
        v54 = "Theme";
      }
      else
      {
        v57 = 0;
        v56 = (int *)&uiTop;
        v55 = (int *)&uiLeft;
        v54 = "Theme";
      }
      v19 = PgSprData::Create(&spNode.m_pObject->baseclass_0, v54, v55, v56, v57);
      PgWinSpr::CreateWin(
        (int)((char *)uiLeft - v16),
        (int)((char *)uiTop - v17),
        v19,
        &v2->baseclass_0.baseclass_0.baseclass_0,
        0,
        0);
      UIUtil::CreateSpr(&ui, "Panel01", 0);
      UIUtil::CreateSpr(&ui, "Panel02", 0);
      if ( PgUtil::GetTriShapeRect(
             &spNode.m_pObject->baseclass_0,
             "WinTitle",
             (int *)&uiLeft,
             (int *)&uiTop,
             &uiWidth,
             &uiHeight) )
      {
        v20 = Font::Get(MAIN_MENU);
        v21 = PgWinText::CreateWin(
                (int)((char *)uiLeft - v16),
                (int)((char *)uiTop - v17),
                uiWidth,
                uiHeight,
                v20,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                0,
                0);
        ((void (__thiscall *)(PgWinText *, signed int, unsigned int))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[122].__vecDelDtor)(
          v21,
          5,
          v58);
        v22 = v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
        v23 = TextData2::Get(0x34361593u);
        v22[118].__vecDelDtor((NiRefObject *)v21, (unsigned int)v23);
        v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[60].__vecDelDtor(
          (NiRefObject *)v21,
          0);
        UIUtil::CreateBtn(&ui, 1u, "ClsNor", "ClsClick", "ClsOver", 0, 0);
        *(_DWORD *)&kCreateInfo.m_arrItem.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        kCreateInfo.m_arrItem.baseclass_0._Mylast = 0;
        kCreateInfo.m_arrItem.baseclass_0._Myend = 0;
        kCreateInfo.m_bMakeData = 0;
        kCreateInfo.m_nOffX = 0;
        kCreateInfo.m_nOffY = 0;
        LOBYTE(v76) = 3;
        SLWCreateInfo::Clear(&kCreateInfo);
        v24 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 1);
        v24->nItemType = 1;
        v24->pNode = spNode.m_pObject;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &strText,
          "Column01");
        LOBYTE(v76) = 4;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          &v24->vecNodeName,
          &strText);
        LOBYTE(v76) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
        v25 = SLWCreateInfo::AddItemInfo(&kCreateInfo, 2);
        v25->nItemType = 2;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::basic_string<char_std::char_traits<char>_std::allocator<char>>(
          &strText,
          "Column01");
        LOBYTE(v76) = 5;
        std::vector<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::allocator<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>::push_back(
          &v25->vecNodeName,
          &strText);
        LOBYTE(v76) = 3;
        std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
        v25->pNode = spNode.m_pObject;
        SLWCreateInfo::MakeTempData(&kCreateInfo, 0);
        v26 = PgSprData::Create(&spNode.m_pObject->baseclass_0, "Plane01", (int *)&uiLeft, (int *)&uiTop, lengthSize);
        v27 = SlideListWin::CreateWin(
                uiLeft - pkTestWin + 20,
                uiTop - hDC + 50,
                v26,
                &v2->baseclass_0.baseclass_0.baseclass_0,
                &kCreateInfo,
                0,
                0);
        v2->m_pListWin = v27;
        if ( v27 )
        {
          strText.baseclass_0._Myres = 15;
          strText.baseclass_0._Mysize = 0;
          strText.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          LOBYTE(v76) = 6;
          v28 = TextData2::Get(0x80D2BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator_(&strText, v28);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v29 = TextData2::Get(0x80D3BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v29);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v30 = TextData2::Get(0x80D4BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v30);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v31 = TextData2::Get(0x80D5BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v31);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v32 = TextData2::Get(0x80D6BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v32);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v33 = TextData2::Get(0x80D7BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v33);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v34 = TextData2::Get(0x80D8BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v34);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v35 = TextData2::Get(0x80D9BEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v35);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v36 = TextData2::Get(0x80DABEE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v36);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v37 = TextData2::Get(0x80D1BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v37);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v38 = TextData2::Get(0x80D2BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v38);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v39 = TextData2::Get(0x80D3BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v39);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v40 = TextData2::Get(0x80D4BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v40);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v41 = TextData2::Get(0x80D5BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v41);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v42 = TextData2::Get(0x80D6BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v42);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v43 = TextData2::Get(0x80D7BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v43);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, "\n", 1u);
          v44 = TextData2::Get(0x80D8BFE4u);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::operator__(&strText, v44);
          std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strText, byte_9D7C64, 0);
          acStr[0] = 0;
          memset(&acStr[1], 0, 0xFFu);
          pkTestWin = SlideListWin::GetTextWin(v2->m_pListWin, 0, 0);
          hDC = *(HDC__ **)(((int (__thiscall *)(PgWinText *))v21->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[114].__vecDelDtor)(v21)
                          + 192);
          _Ptr = 10;
          while ( 1 )
          {
            memset(acStr, 0, 0x100u);
            v45 = *(char **)&strText;
            if ( strText.baseclass_0._Myres < 0x10 )
              v45 = (char *)&strText;
            v46 = ((int (*)(void))pkTestWin->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[36].__vecDelDtor)();
            v47 = PgUtil::StringPixelCopy(acStr, v45, hDC, v46);
            v48 = std::basic_string<char_std::char_traits<char>_std::allocator<char>>::find(&strText, &_Ptr, 0, 1u);
            found = v48;
            if ( !v47 )
              break;
            if ( v48 >= v47 || (lengthSize = (NiSourceTexture *)v48, v48 == -1) )
              lengthSize = (NiSourceTexture *)v47;
            buffer[0] = 0;
            memset(&buffer[1], 0, 0xFFu);
            v49 = (unsigned int)lengthSize;
            if ( strText.baseclass_0._Mysize < (unsigned int)lengthSize )
              v49 = strText.baseclass_0._Mysize;
            v50 = *(const void **)&strText;
            if ( strText.baseclass_0._Myres < 0x10 )
              v50 = &strText;
            memcpy_s(buffer, 0xFFu, v50, v49);
            v51 = v2->m_pListWin;
            buffer[v49] = 0;
            SlideListWin::AddText(v51, buffer);
            SlideListWin::AddText(v2->m_pListWin, byte_9D7452);
            if ( found > v47 )
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
                &strText,
                0,
                (unsigned int)lengthSize);
            else
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::erase(
                &strText,
                0,
                (unsigned int)((char *)&lengthSize->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr + 1));
          }
          v2->m_pListWin->m_bCheckEnable = 0;
          SlideListWin::AlignText(v2->m_pListWin, 4u);
          SlideListWin::UpdateViewList(v2->m_pListWin);
          LOBYTE(v76) = 3;
          std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>::_pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty__>((std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *> *)&strText);
        }
        v52 = PgSprData::Create(
                &spNode.m_pObject->baseclass_0,
                "SlideBar_SlideBtnMiddle",
                (int *)&uiLeft,
                (int *)&uiTop,
                0);
        v53 = SlideBar::CreateWin(
                spNode.m_pObject,
                "SlideBar",
                "SlideBar_UpBtn",
                "SlideBar_DnBtn",
                v52,
                0,
                &v2->baseclass_0.baseclass_0.baseclass_0);
        v2->m_pSlideBar = v53;
        v53->m_uiClickMsg = 2;
        v2->m_pSlideBar->m_eType = 1;
        SlideBar::SetSplitCnt(v2->m_pSlideBar, v2->m_pListWin->m_nSlideSplitCnt);
        ((void (__thiscall *)(GBSlotHelpWin *, unsigned int, unsigned int, _DWORD))v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[59].__vecDelDtor)(
          v2,
          PgWin::ms_uiScreenWidth,
          PgWin::ms_uiScreenHeight,
          0.1);
        LOBYTE(v76) = 2;
        SLWCreateInfo::_SLWCreateInfo(&kCreateInfo);
        LOBYTE(v76) = 1;
        UIUtil::_UIUtil(&ui);
        LOBYTE(v76) = 0;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
        v76 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
        result = 1;
      }
      else
      {
        LOBYTE(v76) = 1;
        UIUtil::_UIUtil(&ui);
        LOBYTE(v76) = 0;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spTexProp);
        v76 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spNode);
        result = 0;
      }
    }
    else
    {
      LOBYTE(v76) = 0;
      if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
        v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
      v15 = spNode.m_pObject;
      v76 = -1;
      if ( !spNode.m_pObject
        || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        || !v15 )
        return 0;
      v15->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v15, 1u);
      result = 0;
    }
  }
  else
  {
    LOBYTE(v76) = 0;
    if ( !InterlockedDecrement((volatile LONG *)&v10->baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v10->baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v10, 1u);
    v13 = spNode.m_pObject;
    v76 = -1;
    if ( !spNode.m_pObject
      || InterlockedDecrement((volatile LONG *)&spNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      || !v13 )
      return 0;
    v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v13, 1u);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A8BDE4: using guessed type int (__cdecl *NiMessageBox__ms_pfnMessageBox)(_DWORD, _DWORD, _DWORD);
// A9541C: using guessed type char Folder__m_bInit;

//----- (0072C1D0) --------------------------------------------------------
void __thiscall GBSlotRankWin::OnSlideBar(GBSlotRankWin *this)
{
  GBSlotRankWin *v1; // esi@1
  SlideListWin *v2; // eax@1
  SlideBar *v3; // ecx@2

  v1 = this;
  v2 = this->m_pUserList;
  if ( v2 )
  {
    v3 = this->m_pkSlideBarEx;
    if ( v3 )
    {
      SlideBar::SetSplitCnt(v3, v2->m_nSlideSplitCnt);
      v1->m_pUserList->m_nViewStartPos = v1->m_pkSlideBarEx->m_nCurPos;
      SlideListWin::UpdateViewList(v1->m_pUserList);
    }
  }
}

//----- (0072C220) --------------------------------------------------------
void __thiscall SlotEntry::SlotEntry(SlotEntry *this)
{
  SlotEntry *v1; // esi@1
  PgWinSpr *v2; // edi@1

  v1 = this;
  this->_DiceTimer.m_fStartTime = 0.0;
  this->_DiceTimer.m_fObjectTime = 0.0;
  this->_DiceTimer.m_fElapsedTime = 0.0;
  this->ms_kSpr.m_pObject = 0;
  this->cHeightInTex = 0.11111111;
  v2 = this->ms_kSpr.m_pObject;
  if ( v2 )
  {
    if ( !InterlockedDecrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && v2 )
      v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v2,
        1u);
    v1->ms_kSpr.m_pObject = 0;
  }
  v1->_iCurID = 1;
}

//----- (0072C2B0) --------------------------------------------------------
void __thiscall SlotEntry::_SlotEntry(SlotEntry *this)
{
  PgWinSpr *v1; // esi@1

  v1 = this->ms_kSpr.m_pObject;
  if ( v1
    && !InterlockedDecrement((volatile LONG *)&v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v1 )
      v1->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)v1,
        1u);
  }
}

//----- (0072C2E0) --------------------------------------------------------
void *__thiscall MiniSlotMachineWin::_vector_deleting_destructor_(MiniSlotMachineWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&MiniSlotMachineWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&MiniSlotMachineWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D7CB0: using guessed type int (__stdcall *MiniSlotMachineWin___vftable_)(int uiFlags);
// 9D7CCC: using guessed type int (__thiscall *MiniSlotMachineWin___vftable_)(void *p, char);

//----- (0072C320) --------------------------------------------------------
void *__thiscall GBSlotHelpWin::_vector_deleting_destructor_(GBSlotHelpWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr = (NiRefObjectVtbl *)&GBSlotHelpWin::_vftable_;
  this->baseclass_0.baseclass_0.baseclass_0.baseclass_e8.vfptr = (IDirectMessengerVtbl *)&GBSlotHelpWin::_vftable_;
  PgWinFrame::_PgWinFrame(&this->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D7EF0: using guessed type int (__stdcall *GBSlotHelpWin___vftable_)(int uiFlags);
// 9D7F0C: using guessed type int (__thiscall *GBSlotHelpWin___vftable_)(void *p, char);

//----- (0072C360) --------------------------------------------------------
void *__thiscall SlotMachineWin::_vector_deleting_destructor_(SlotMachineWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  SlotMachineWin::_SlotMachineWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0072C390) --------------------------------------------------------
void __thiscall std::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>::vector<SlotJackpotRankInfo_std::allocator<SlotJackpotRankInfo>>(std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *this, std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *_Right)
{
  std::vector<DiceRankInfo,std::allocator<DiceRankInfo> > *v2; // esi@1
  int v3; // edi@1
  DiceRankInfo *v4; // eax@4
  std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > v5; // ecx@4
  std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > v6; // ST00_4@4
  int v7; // [sp-10h] [bp-24h]@1
  std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *thisa; // [sp+0h] [bp-14h]@1
  int *v9; // [sp+4h] [bp-10h]@1
  int v10; // [sp+10h] [bp-4h]@4

  v9 = &v7;
  v2 = this;
  thisa = (std::vector<HeightMapMaker::TriangleIndex *,std::allocator<HeightMapMaker::TriangleIndex *> > *)this;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  v3 = (signed int)((char *)_Right->baseclass_0._Mylast - *(_DWORD *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0])
     / 24;
  *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  this->baseclass_0._Mylast = 0;
  this->baseclass_0._Myend = 0;
  if ( v3 )
  {
    if ( (unsigned int)v3 > 0xAAAAAAA )
      std::_Xlength_error("vector<T> too long");
    v4 = std::allocator<DiceRankInfo>::allocate(&this->baseclass_0._Alval, v3);
    v2->baseclass_0._Myend = &v4[v3];
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v4;
    v2->baseclass_0._Mylast = v4;
    v5 = (std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > >)_Right->baseclass_0._Mylast;
    v6 = *(std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo,std::allocator<DiceRankInfo> > > *)&_Right->baseclass_0.___u0.baseclass_0.dummy[0];
    v10 = 0;
    v2->baseclass_0._Mylast = std::_Uninit_copy<std::_Vector_const_iterator<std::_Vector_val<DiceRankInfo_std::allocator<DiceRankInfo>>>_DiceRankInfo___std::allocator<DiceRankInfo>>(
                                v6,
                                v5,
                                v4,
                                &v2->baseclass_0._Alval,
                                (std::_Nonscalar_ptr_iterator_tag)_Right);
  }
}

//----- (0072C470) --------------------------------------------------------
void *__thiscall GBSlotRankWin::_vector_deleting_destructor_(GBSlotRankWin *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  GBSlotRankWin::_GBSlotRankWin(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0072C4A0) --------------------------------------------------------
bool __thiscall MoverSlot::IsView(MoverSlot *this)
{
  MoverSlotView *v1; // eax@1
  bool result; // al@2

  v1 = this->m_pkMoverSlotView;
  if ( v1 )
    result = v1->IsViewChar != 0;
  else
    result = 0;
  return result;
}

//----- (0072C4C0) --------------------------------------------------------
void __thiscall Mover::Affect(Mover *this, AbStateInst *pkAbState, bool bNoVisual)
{
  if ( this->m_bAbility )
    Char::Affect(&this->baseclass_0, pkAbState, bNoVisual);
}

//----- (0072C4E0) --------------------------------------------------------
bool __thiscall Mover::IsMoverMovable(Mover *this)
{
  MoverMain *v1; // eax@1
  bool result; // al@2

  v1 = this->m_pkMoverMain;
  if ( v1 )
    result = v1->RunSpeed || v1->WalkSpeed;
  else
    result = 0;
  return result;
}

//----- (0072C510) --------------------------------------------------------
bool __thiscall Mover::IsFeed(Mover *this)
{
  return this->m_bFeed;
}

//----- (0072C520) --------------------------------------------------------
bool __thiscall Mover::IsAbility(Mover *this)
{
  return this->m_bAbility;
}

//----- (0072C530) --------------------------------------------------------
void __thiscall MoverSlot::Act(MoverSlot *this, CharAniType eType)
{
  MoverSlot *v2; // esi@1
  Char *v3; // ecx@1
  MoverSlotView *v4; // eax@2
  int v5; // ebx@4
  void *v6; // edi@7
  unsigned int v7; // eax@8
  NiPointer<NiActorManager> spActor; // [sp+20h] [bp-14h]@4
  void *pkSlotAniCode; // [sp+24h] [bp-10h]@7
  int v10; // [sp+30h] [bp-4h]@6

  v2 = this;
  v3 = this->m_pkChar;
  if ( v3 )
  {
    v4 = v2->m_pkMoverSlotView;
    if ( v4 )
    {
      if ( v4->IsViewChar )
      {
        v5 = v3->baseclass_54.vfptr->GetActor(&v3->baseclass_54);
        spActor.m_pObject = (NiActorManager *)v5;
        if ( v5 )
          InterlockedIncrement((volatile LONG *)(v5 + 4));
        v10 = 0;
        if ( v5 )
        {
          pkSlotAniCode = 0;
          NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
            (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&v2->m_kSlotAni,
            eType,
            (NiVBSet **)&pkSlotAniCode);
          v6 = pkSlotAniCode;
          if ( pkSlotAniCode )
          {
            ((void (__stdcall *)(_DWORD, _DWORD, _DWORD))v2->m_pkChar->baseclass_0.vfptr[10].SetAbStateProperty)(
              *((_DWORD *)pkSlotAniCode + 1),
              0,
              0);
            v7 = *(_DWORD *)v6;
            if ( *(_DWORD *)v6 )
            {
              if ( v2->m_dwCurLegCode != v7 )
                ((void (__stdcall *)(unsigned int, signed int))v2->m_pkChar->baseclass_0.vfptr[10].IsVisible)(v7, 1);
            }
            else
            {
              NiActorManager::DeactivateSequence((NiActorManager *)v5, v2->m_dwCurLegCode, 0.0);
            }
            v2->m_dwCurLegCode = *(_DWORD *)v6;
          }
        }
        v10 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&spActor);
      }
    }
  }
}

//----- (0072C630) --------------------------------------------------------
void __thiscall MoverSlot::RideOff(MoverSlot *this)
{
  MoverSlot *v1; // edi@1
  Char *v2; // eax@1
  int v3; // esi@2
  unsigned int v4; // eax@5

  v1 = this;
  v2 = this->m_pkChar;
  if ( v2 )
  {
    v3 = ((int (*)(void))v2->baseclass_54.vfptr->GetActor)();
    if ( v3 )
      InterlockedIncrement((volatile LONG *)(v3 + 4));
    if ( v3 )
    {
      v4 = v1->m_dwCurLegCode;
      if ( v4 )
      {
        NiActorManager::DeactivateSequence((NiActorManager *)v3, v4, 0.0);
        v1->m_dwCurLegCode = 0;
      }
      if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
        (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
    }
  }
}

//----- (0072C6E0) --------------------------------------------------------
Char *__thiscall Mover::GetSlotChar(Mover *this, unsigned int uiSlot)
{
  int v2; // eax@2
  Char *result; // eax@3

  if ( uiSlot < (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2
    && (v2 = *(_DWORD *)(*(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot)) != 0 )
    result = *(Char **)(v2 + 36);
  else
    result = 0;
  return result;
}

//----- (0072C720) --------------------------------------------------------
NiPointer<NiNode> *__thiscall Mover::GetSlotNode(Mover *this, NiPointer<NiNode> *result, unsigned int uiSlot)
{
  MoverSlot *v3; // ecx@2
  NiPointer<NiNode> *v4; // eax@3

  if ( uiSlot < (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2
    && (v3 = *(MoverSlot **)(*(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot)) != 0 )
  {
    MoverSlot::GetSlotNode(v3, result);
    v4 = result;
  }
  else
  {
    v4 = result;
    result->m_pObject = 0;
  }
  return v4;
}

//----- (0072C770) --------------------------------------------------------
void __thiscall Mover::ActSlot(Mover *this, CharAniType eType)
{
  int v2; // eax@1
  signed int v3; // ebx@1
  int v4; // esi@4
  int v5; // ecx@5
  int v6; // eax@6
  int v7; // eax@8
  int v8; // edi@8
  NiVBSet *v9; // ebx@12
  unsigned int v10; // eax@13
  Mover *v11; // [sp+24h] [bp-1Ch]@1
  int i; // [sp+28h] [bp-18h]@1
  signed int uiSize; // [sp+2Ch] [bp-14h]@1
  NiVBSet *val; // [sp+30h] [bp-10h]@12
  int v15; // [sp+3Ch] [bp-4h]@10

  v11 = this;
  v2 = 0;
  v3 = (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  uiSize = v3;
  i = 0;
  if ( v3 )
  {
    while ( 1 )
    {
      v4 = *(_DWORD *)(*(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v2);
      if ( v4 )
      {
        v5 = *(_DWORD *)(v4 + 36);
        if ( v5 )
        {
          v6 = *(_DWORD *)(v4 + 32);
          if ( v6 )
          {
            if ( *(_BYTE *)(v6 + 33) )
            {
              v7 = (**(int (__thiscall ***)(_DWORD))(v5 + 84))(v5 + 84);
              v8 = v7;
              if ( v7 )
                InterlockedIncrement((volatile LONG *)(v7 + 4));
              v15 = 0;
              if ( v8 )
              {
                val = 0;
                NiTMapBase<NiTPointerAllocator<unsigned_int>_NiLight___NiDX9LightManager::LightEntry__>::GetAt(
                  (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)(v4 + 12),
                  eType,
                  &val);
                v9 = val;
                if ( val )
                {
                  (*(void (__stdcall **)(unsigned int, _DWORD, _DWORD))(**(_DWORD **)(v4 + 36) + 328))(
                    val->m_uiFVF,
                    0,
                    0);
                  v10 = v9->m_uiIndex;
                  if ( v9->m_uiIndex )
                  {
                    if ( *(_DWORD *)(v4 + 28) != v10 )
                      (*(void (__stdcall **)(unsigned int, signed int))(**(_DWORD **)(v4 + 36) + 332))(v10, 1);
                  }
                  else
                  {
                    NiActorManager::DeactivateSequence((NiActorManager *)v8, *(_DWORD *)(v4 + 28), 0.0);
                  }
                  *(_DWORD *)(v4 + 28) = v9->m_uiIndex;
                }
                v15 = -1;
                if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) )
                  (**(void (__thiscall ***)(_DWORD, _DWORD))v8)(v8, 1);
                v3 = uiSize;
              }
              else
              {
                v15 = -1;
              }
            }
          }
        }
      }
      v2 = i + 1;
      i = v2;
      if ( v2 >= (unsigned int)v3 )
        break;
      this = v11;
    }
  }
}

//----- (0072C8D0) --------------------------------------------------------
void __thiscall Mover::RideOn(Mover *this, Char *pkChar, unsigned int uiSlot)
{
  Mover *v3; // esi@1
  unsigned int v4; // edi@1
  Char *v5; // ebx@2
  unsigned int v6; // eax@4
  bool v7; // zf@4
  AbStateInfecteeVtbl *v8; // edi@5
  int v9; // eax@5
  int v10; // edi@6
  unsigned int v11; // eax@9
  int v12; // edi@9
  NiNode *v13; // eax@12
  AbStateInfecteeVtbl *v14; // edi@14
  NiPointer<NiNode> v15; // [sp-1Ch] [bp-28h]@12
  unsigned int v16; // [sp-18h] [bp-24h]@12
  unsigned int v17; // [sp-14h] [bp-20h]@9
  int v18; // [sp+8h] [bp-4h]@7

  v3 = this;
  v4 = uiSlot;
  if ( uiSlot < (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    v5 = pkChar;
    if ( pkChar )
    {
      if ( !uiSlot )
      {
        v6 = Char::GetSpecialEventCode(pkChar);
        v7 = v3->m_bAbility == 0;
        v3->m_uiSpecialEventCode = v6;
        if ( !v7 )
        {
          v8 = v3->baseclass_0.baseclass_0.vfptr;
          v9 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v5);
          ((void (__thiscall *)(Mover *, int))v8[2].GetAbstateColor)(v3, v9);
          v4 = uiSlot;
        }
      }
      v10 = *(_DWORD *)(*(_DWORD *)&v3->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v4);
      if ( v10 )
      {
        MoverSlot::GetHideNode((MoverSlot *)v10, (NiPointer<NiNode> *)&pkChar);
        v18 = 0;
        if ( pkChar )
          LOWORD(pkChar->baseclass_0.m_kAbStateProperty.iUnAttackableCount) &= 0xFFFEu;
        v11 = uiSlot;
        *(_DWORD *)(v10 + 36) = v5;
        v12 = *(_DWORD *)(v10 + 32);
        v17 = v11;
        if ( v12 )
          LOBYTE(uiSlot) = *(_BYTE *)(v12 + 33) != 0;
        else
          LOBYTE(uiSlot) = 0;
        v13 = v3->baseclass_0.m_spCarrierNode.m_pObject;
        v16 = uiSlot;
        uiSlot = (unsigned int)&v15;
        v15.m_pObject = v13;
        if ( v13 )
          InterlockedIncrement((volatile LONG *)&v13->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
        Char::RideOn(v5, &v3->baseclass_0, v15, v16, v17);
        v14 = v3->baseclass_0.baseclass_0.vfptr;
        v17 = ((int (__thiscall *)(Char *))v5->baseclass_0.vfptr[2].DeleteAbStateByAbstateIndex)(v5);
        ((void (__thiscall *)(Mover *, unsigned int))v14[2].GetAbstateColor)(v3, v17);
        v18 = -1;
        NiPointer<FlexDlgBtn>::_NiPointer<FlexDlgBtn>((NiPointer<HazeAccumulator> *)&pkChar);
      }
      ((void (*)(void))v3->baseclass_0.baseclass_0.vfptr[10].DeleteAbStateByAbstateIndex)();
    }
  }
}

//----- (0072CA10) --------------------------------------------------------
void __thiscall Mover::RideOff(Mover *this, unsigned int uiSlot)
{
  int v2; // esi@2
  unsigned int v3; // edi@3
  Char *v4; // ecx@5

  if ( uiSlot < (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
  {
    v2 = *(_DWORD *)(*(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot);
    if ( v2 )
    {
      MoverSlot::GetHideNode((MoverSlot *)v2, (NiPointer<NiNode> *)&uiSlot);
      v3 = uiSlot;
      if ( uiSlot )
        *(_WORD *)(uiSlot + 28) |= 1u;
      MoverSlot::RideOff((MoverSlot *)v2);
      v4 = *(Char **)(v2 + 36);
      if ( v4 )
        Char::RideOff(v4);
      *(_DWORD *)(v2 + 36) = 0;
      if ( v3 )
      {
        if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v3)(v3, 1);
      }
    }
  }
}

//----- (0072CAD0) --------------------------------------------------------
void __thiscall Mover::RideAllOff(Mover *this)
{
  unsigned int v1; // ebx@1
  signed int v2; // eax@1
  int v3; // esi@3
  NiNode *v4; // edi@4
  Char *v5; // ecx@6
  NiPointer<NiNode> result; // [sp+0h] [bp-18h]@4
  int uiSize; // [sp+4h] [bp-14h]@1
  Mover *v8; // [sp+8h] [bp-10h]@1
  int v9; // [sp+14h] [bp-4h]@4

  v8 = this;
  v1 = 0;
  v2 = (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  uiSize = v2;
  if ( v2 )
  {
    do
    {
      if ( v1 < (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                           - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 )
      {
        v3 = *(_DWORD *)(*(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v1);
        if ( v3 )
        {
          MoverSlot::GetHideNode((MoverSlot *)v3, &result);
          v4 = result.m_pObject;
          v9 = 0;
          if ( result.m_pObject )
            result.m_pObject->baseclass_0.m_uFlags |= 1u;
          MoverSlot::RideOff((MoverSlot *)v3);
          v5 = *(Char **)(v3 + 36);
          if ( v5 )
            Char::RideOff(v5);
          *(_DWORD *)(v3 + 36) = 0;
          v9 = -1;
          if ( v4 )
          {
            if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
              v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
          }
          v2 = uiSize;
          this = v8;
        }
      }
      ++v1;
    }
    while ( v1 < v2 );
  }
}

//----- (0072CBC0) --------------------------------------------------------
AbStateInfectee::AbstateColor __thiscall Mover::GetAbstateColor(Mover *this)
{
  Mover *v1; // ebx@1
  AbStateInfectee::AbstateColor result; // eax@2
  signed int v3; // esi@3
  int v4; // edx@3
  unsigned int v5; // edi@3
  int v6; // eax@4
  int v7; // ecx@5
  char v8; // [sp+4h] [bp-4h]@6
  unsigned int v9; // [sp+10h] [bp+8h]@0

  v1 = this;
  if ( this->m_bAbility )
  {
    result.dwRGB = v9;
    *(_DWORD *)v9 = this->baseclass_0.baseclass_0.m_kAbstateColor.dwRGB;
  }
  else
  {
    v3 = (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                    - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    v4 = 0;
    v5 = 0;
    if ( v3 )
    {
      do
      {
        v6 = *(_DWORD *)(*(_DWORD *)&v1->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
        if ( v6 )
        {
          v7 = *(_DWORD *)(v6 + 36);
          if ( v7 )
          {
            v4 = *(_DWORD *)(*(int (__stdcall **)(char *))(*(_DWORD *)v7 + 24))(&v8);
            if ( v4 )
              break;
          }
        }
        ++v5;
      }
      while ( v5 < v3 );
    }
    result.dwRGB = v9;
    *(_DWORD *)v9 = v4;
  }
  return result;
}

//----- (0072CC40) --------------------------------------------------------
bool __thiscall Mover::IsEmptySlot(Mover *this)
{
  unsigned int v1; // edx@1
  signed int v2; // eax@1
  int v3; // esi@2
  bool result; // al@6

  v1 = 0;
  v2 = (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v2 )
  {
    v3 = *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0];
    while ( !*(_DWORD *)v3 || *(_DWORD *)(*(_DWORD *)v3 + 36) )
    {
      ++v1;
      v3 += 4;
      if ( v1 >= v2 )
        goto LABEL_6;
    }
    result = 1;
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}

//----- (0072CC80) --------------------------------------------------------
bool __thiscall Mover::IsSlotView(Mover *this, unsigned int uiSlot, bool bEffect)
{
  int v3; // eax@2
  bool result; // al@5
  int v5; // eax@6

  if ( uiSlot >= (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                            - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2
    || (v3 = *(_DWORD *)(*(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * uiSlot)) == 0 )
    goto LABEL_11;
  if ( !bEffect && !uiSlot )
    return 1;
  v5 = *(_DWORD *)(v3 + 32);
  if ( v5 )
    result = *(_BYTE *)(v5 + 33) != 0;
  else
LABEL_11:
    result = 0;
  return result;
}

//----- (0072CCD0) --------------------------------------------------------
bool __thiscall Mover::GetNextSlot(Mover *this, unsigned int *uiSlot)
{
  unsigned int v2; // edx@1
  signed int v3; // eax@1
  int v4; // esi@2
  bool result; // al@6

  v2 = 0;
  v3 = (signed int)((char *)this->m_kMoverSlots.baseclass_0._Mylast
                  - *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  if ( v3 )
  {
    v4 = *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0];
    while ( !*(_DWORD *)v4 || *(_DWORD *)(*(_DWORD *)v4 + 36) )
    {
      ++v2;
      v4 += 4;
      if ( v2 >= v3 )
        goto LABEL_6;
    }
    *uiSlot = v2;
    result = 1;
  }
  else
  {
LABEL_6:
    result = 0;
  }
  return result;
}

//----- (0072CD20) --------------------------------------------------------
void __thiscall MoverSlot::_MoverSlot(MoverSlot *this)
{
  MoverSlot *v1; // edi@1
  char *v2; // esi@1
  NiNode *v3; // esi@1
  NiNode *v4; // edi@5

  v1 = this;
  v2 = (char *)&this->m_kSlotAni;
  this->m_kSlotAni.baseclass_0.vfptr = (NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *>Vtbl *)&NiTMap<enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)&this->m_kSlotAni);
  *(_DWORD *)v2 = &NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(*((void **)v2 + 2));
  v3 = v1->m_spHideNode.m_pObject;
  if ( v3
    && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
    && v3 )
    v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
  v4 = v1->m_spSlotNode.m_pObject;
  if ( v4 && !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
  {
    if ( v4 )
      v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v4, 1u);
  }
}
// 9D862C: using guessed type int (__thiscall *NiTMapBase_DFALL_MoverSlot__sSlotAniCode ___enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);
// 9D864C: using guessed type int (__thiscall *NiTMap_enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);

//----- (0072CDF0) --------------------------------------------------------
void __thiscall Mover::Update(Mover *this, float fTime)
{
  NiPoint3 *v2; // edi@0
  double v3; // st7@1
  Mover *v4; // ebx@1
  int v5; // ecx@1
  int v6; // eax@1
  void *v7; // edi@3
  int v8; // esi@4
  int v9; // edi@7
  float v10; // ST00_4@7
  NiNode *v11; // edi@9
  float v12; // edx@10
  int v13; // esi@12
  NiPoint3 *v14; // [sp+4h] [bp-30h]@2
  NiPoint3 kPos; // [sp+1Ch] [bp-18h]@8
  NiPointer<NiNode> spSlotNode; // [sp+28h] [bp-Ch]@9
  void *pkMoverSlot; // [sp+2Ch] [bp-8h]@3
  int i; // [sp+30h] [bp-4h]@1
  int uiSize; // [sp+3Ch] [bp+8h]@1

  v3 = fTime;
  v4 = this;
  Char::Update(&this->baseclass_0, fTime);
  v5 = 0;
  v6 = (signed int)((char *)v4->m_kMoverSlots.baseclass_0._Mylast
                  - *(_DWORD *)&v4->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
  uiSize = v6;
  i = 0;
  if ( v6 )
  {
    v14 = v2;
    do
    {
      v7 = *(void **)(*(_DWORD *)&v4->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v5);
      pkMoverSlot = v7;
      if ( v7 )
      {
        v8 = *((_DWORD *)v7 + 9);
        if ( v8 )
        {
          if ( !v5 && *(_WORD *)(v8 + 548) == g_pkMainChar->m_kHandle )
          {
            v9 = *(_DWORD *)v8;
            ((void (__thiscall *)(Mover *))v4->baseclass_0.baseclass_0.vfptr[8].AddAbStateByAbstateIndex)(v4);
            v10 = v3;
            (*(void (__thiscall **)(int, _DWORD))(v9 + 264))(v8, LODWORD(v10));
            v7 = pkMoverSlot;
          }
          ((void (__thiscall *)(Mover *, NiPoint3 *, NiPoint3 *))v4->baseclass_0.baseclass_0.vfptr[6].SetAbStateProperty)(
            v4,
            &kPos,
            v14);
          if ( i )
          {
            MoverSlot::GetSlotNode((MoverSlot *)v7, &spSlotNode);
            v11 = spSlotNode.m_pObject;
            if ( spSlotNode.m_pObject )
            {
              v12 = spSlotNode.m_pObject->baseclass_0.m_kWorld.m_Translate.y;
              kPos.x = spSlotNode.m_pObject->baseclass_0.m_kWorld.m_Translate.x;
              v3 = v12;
              kPos.y = v12;
              if ( !InterlockedDecrement((volatile LONG *)&spSlotNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
                v11->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v11, 1u);
            }
          }
          v14 = &kPos;
          (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 188))(v8);
          v13 = *(_DWORD *)(v8 + 700);
          if ( v13 )
          {
            InterlockedIncrement((volatile LONG *)(v13 + 4));
            *(_DWORD *)(v13 + 88) = (_DWORD)kPos.x;
            *(_DWORD *)(v13 + 92) = LODWORD(kPos.y);
            *(_DWORD *)(v13 + 96) = LODWORD(kPos.z);
            if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) )
              (**(void (__thiscall ***)(_DWORD, _DWORD))v13)(v13, 1);
          }
          v6 = uiSize;
        }
      }
      v5 = i + 1;
      i = v5;
    }
    while ( v5 < (unsigned int)v6 );
  }
}
// 72CDF0: could not find valid save-restore pair for edi

//----- (0072CF60) --------------------------------------------------------
void __thiscall Mover::ActStand(Mover *this)
{
  Mover *v1; // esi@1

  v1 = this;
  Mover::ActSlot(this, MSCA_STAND);
  if ( v1->baseclass_0.m_spActor.m_pObject->m_eTargetID != 101000 )
    Char::ActAction(&v1->baseclass_0, STAND, NORMALSTAND);
}

//----- (0072CF90) --------------------------------------------------------
void __thiscall Mover::ActWalk(Mover *this)
{
  Mover *v1; // esi@1
  NiActorManager *v2; // ecx@4
  NiActorManager *v3; // ecx@8

  v1 = this;
  Mover::ActSlot(this, MSCA_WALK);
  if ( !v1->baseclass_0.m_eMoveMode )
  {
    if ( (unsigned __int8)v1->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v1) == 1 )
    {
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v1) == 1 )
      {
        v2 = v1->baseclass_0.m_spActor.m_pObject;
        if ( v2->m_eTargetID != 201000 )
          NiActorManager::SetTargetAnimation(v2, 0x31128u);
      }
    }
  }
  if ( !(unsigned __int8)v1->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v1) )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v1) == 1 )
    {
      v3 = v1->baseclass_0.m_spActor.m_pObject;
      if ( v3->m_eTargetID == 201000 )
        NiActorManager::SetTargetAnimation(v3, 0x18A9Eu);
    }
  }
  if ( v1->baseclass_0.m_spActor.m_pObject->m_eTargetID != 201000 )
    Char::ActWalk(&v1->baseclass_0);
}

//----- (0072D030) --------------------------------------------------------
void __thiscall Mover::ActRun(Mover *this)
{
  Mover *v1; // esi@1
  NiActorManager *v2; // ecx@4
  NiActorManager *v3; // ecx@8

  v1 = this;
  Mover::ActSlot(this, MSCA_RUN);
  if ( v1->baseclass_0.m_eMoveMode == 1 )
  {
    if ( (unsigned __int8)v1->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v1) == 1 )
    {
      if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v1) == 1 )
      {
        v2 = v1->baseclass_0.m_spActor.m_pObject;
        if ( v2->m_eTargetID != 202000 )
          NiActorManager::SetTargetAnimation(v2, 0x31510u);
      }
    }
  }
  if ( !(unsigned __int8)v1->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v1) )
  {
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v1->baseclass_0.baseclass_0.vfptr[20].DeleteAbStateByAbstateIndex)(v1) == 1 )
    {
      v3 = v1->baseclass_0.m_spActor.m_pObject;
      if ( v3->m_eTargetID == 202000 )
        NiActorManager::SetTargetAnimation(v3, 0x18A9Eu);
    }
  }
  if ( v1->baseclass_0.m_spActor.m_pObject->m_eTargetID != 202000 )
    Char::ActRun(&v1->baseclass_0);
}

//----- (0072D0D0) --------------------------------------------------------
bool __thiscall Mover::ActJump(Mover *this)
{
  Mover *v1; // esi@1
  bool result; // al@2
  ActionInfoSet *v3; // eax@4
  ActionInfo *v4; // edi@4
  NiActorManager *v5; // edx@6
  int v6; // esi@6

  v1 = this;
  Mover::ActSlot(this, MSCA_SPECIAL);
  if ( v1->m_uiSpecialEventCode == v1->baseclass_0.m_spActor.m_pObject->m_eTargetID
    || (unsigned __int8)v1->baseclass_0.baseclass_0.vfptr[7].GetAbstateColor((AbStateInfectee *)v1) )
  {
    result = 0;
  }
  else
  {
    v1->baseclass_0.baseclass_0.vfptr[10].SetAbStateProperty(
      (AbStateInfectee *)v1,
      (ABSTATEINDEX)v1->m_uiSpecialEventCode,
      0,
      0);
    v3 = ActionInfoTable::GetMoverActionInfo(v1->m_kMoverID);
    v4 = ActionInfoSet::GetByEventCode(v3, v1->m_uiSpecialEventCode);
    if ( v4 )
    {
      v5 = v1->baseclass_0.m_kActionMgr.m_pActor;
      v6 = (int)&v1->baseclass_0.m_kActionMgr;
      *(_DWORD *)(v6 + 24) = 0;
      ActorCallBack::SetCurrentActionInfo((ActorCallBack *)v6, v5, 0);
      *(_WORD *)(v6 + 80) = 0;
      *(_BYTE *)(v6 + 82) = 0;
      *(_WORD *)(v6 + 83) = 0;
      ActionMgr::SetCurPlayActInfo((ActionMgr *)v6, v4);
      ActionMgr::SetActionStartTime((ActionMgr *)v6, Timer::ms_fCurTime);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0072D190) --------------------------------------------------------
void __thiscall Mover::ActDamage1(Mover *this)
{
  Char *v1; // esi@1

  v1 = (Char *)this;
  Mover::ActSlot(this, MSCA_DAMAGE);
  Char::ActDamage1(v1);
}

//----- (0072D1B0) --------------------------------------------------------
void __thiscall Mover::ActCriticalStun(Mover *this)
{
  Char *v1; // esi@1

  v1 = (Char *)this;
  Mover::ActSlot(this, MSCA_CRITICAL);
  Char::ActCriticalStun(v1);
}

//----- (0072D1D0) --------------------------------------------------------
void __thiscall Mover::SetMoverEffect(Mover *this, bool bShow, Mover *pkMover, char nGrade)
{
  Mover *v4; // esi@1
  NiNode *v5; // ecx@6
  int v6; // edi@7
  char *v7; // ebx@9
  int v8; // edx@10
  const char *v9; // esi@10
  Mover *v10; // [sp+18h] [bp-90h]@1
  float dwScale; // [sp+1Ch] [bp-8Ch]@10
  unsigned int dwEffectHandle; // [sp+20h] [bp-88h]@1
  char acKey[128]; // [sp+24h] [bp-84h]@11
  unsigned int v14; // [sp+A4h] [bp-4h]@1
  int v15; // [sp+A8h] [bp+0h]@1

  v14 = (unsigned int)&v15 ^ __security_cookie;
  v4 = this;
  v10 = this;
  LOBYTE(dwEffectHandle) = nGrade;
  if ( bShow )
  {
    if ( pkMover )
    {
      if ( nGrade )
      {
        v5 = pkMover->baseclass_0.m_spScene.m_pObject;
        if ( v5 )
        {
          v6 = ((int (__stdcall *)(_DWORD))v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)("EFNODE");
          if ( v6 )
          {
            if ( (unsigned __int8)nGrade < 0x14u )
            {
              v7 = MoverUpgradeEffectTab::GetByGrade(dwEffectHandle)->EffectFileName;
              if ( strcmp(v7, "-") )
              {
                v8 = **(_DWORD **)(v6 + 16);
                dwScale = 0.0;
                v9 = *(const char **)(v8 + 12);
                if ( v9 )
                {
                  acKey[0] = 0;
                  memset(&acKey[1], 0, 0x7Fu);
                  sscanf(v9, "%s");
                  if ( !_strnicmp(acKey, "Scale", 5u) )
                  {
                    dwScale = 0.0;
                    sscanf(v9, "%s %d ");
                    dwScale = (double)LODWORD(dwScale) * 0.009999999776482582;
                  }
                }
                dwEffectHandle = 0;
                EffectMgr::CreateAttachScaleEffect(
                  &g_kEffectMgr,
                  &dwEffectHandle,
                  v7,
                  (NiNode *)v6,
                  dwScale,
                  Timer::ms_fCurTime);
                v10->m_hMoverEffect = dwEffectHandle;
              }
            }
          }
        }
      }
    }
  }
  else
  {
    if ( this->m_hMoverEffect )
    {
      EffectMgr::RemoveEffect(&g_kEffectMgr, (Effect *)this->m_hMoverEffect);
      v4->m_hMoverEffect = 0;
    }
  }
}
// A85C00: using guessed type int __security_cookie;
// A9763C: using guessed type float Timer__ms_fCurTime;

//----- (0072D3C0) --------------------------------------------------------
void __thiscall MoverSlot::MoverSlot(MoverSlot *this, const unsigned int uiSlot)
{
  MoverSlot *v2; // esi@1
  void *v3; // eax@1
  unsigned int v4; // ST08_4@1

  v2 = this;
  this->m_uiSlot = uiSlot;
  this->m_spSlotNode.m_pObject = 0;
  this->m_spHideNode.m_pObject = 0;
  this->m_kSlotAni.baseclass_0.m_uiHashSize = 37;
  this->m_kSlotAni.baseclass_0.vfptr = (NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *>Vtbl *)&NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  *(_DWORD *)&this->m_kSlotAni.baseclass_0.m_kAllocator.___u0.baseclass_0.dummy[0] = 0;
  v3 = operator new__(0x94u);
  v4 = 4 * v2->m_kSlotAni.baseclass_0.m_uiHashSize;
  v2->m_kSlotAni.baseclass_0.m_ppkHashTable = (NiTMapItem<enum CharAniType,MoverSlot::sSlotAniCode *> **)v3;
  memset((char *)v3, 0, v4);
  v2->m_kSlotAni.baseclass_0.vfptr = (NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *>Vtbl *)&NiTMap<enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  v2->m_dwCurLegCode = 0;
  v2->m_pkMoverSlotView = 0;
  v2->m_pkChar = 0;
}
// 9D862C: using guessed type int (__thiscall *NiTMapBase_DFALL_MoverSlot__sSlotAniCode ___enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);
// 9D864C: using guessed type int (__thiscall *NiTMap_enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);

//----- (0072D460) --------------------------------------------------------
void __thiscall Mover::Mover(Mover *this)
{
  Mover *v1; // esi@1

  v1 = this;
  Char::Char(&this->baseclass_0);
  v1->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Mover::_vftable_;
  v1->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Mover::_vftable_;
  v1->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Mover::_vftable_;
  *(_DWORD *)&v1->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kMoverSlots.baseclass_0._Mylast = 0;
  v1->m_kMoverSlots.baseclass_0._Myend = 0;
  *(_WORD *)&v1->m_bFeed = 0;
  v1->m_uiSpecialEventCode = 0;
  v1->m_pkMoverMain = 0;
  v1->m_pkMoverView = 0;
  v1->m_bWay = 0;
  v1->m_hMoverEffect = 0;
  v1->m_kMoverID = -1;
}
// 9D866C: using guessed type int (*Mover___vftable_[2])();
// 9D868C: using guessed type int (__stdcall *Mover___vftable_)(int);
// 9D8694: using guessed type int (__stdcall *Mover___vftable_)(int pkAbState, char bNoVisual);

//----- (0072D4D0) --------------------------------------------------------
void __thiscall Mover::_Mover(Mover *this)
{
  Mover *v1; // esi@1

  v1 = this;
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Mover::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Mover::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Mover::_vftable_;
  this->m_hMoverEffect = 0;
  if ( *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->m_kMoverSlots.baseclass_0._Mylast = 0;
  v1->m_kMoverSlots.baseclass_0._Myend = 0;
  Char::_Char(&v1->baseclass_0);
}
// 9D866C: using guessed type int (*Mover___vftable_[2])();
// 9D868C: using guessed type int (__stdcall *Mover___vftable_)(int);
// 9D8694: using guessed type int (__stdcall *Mover___vftable_)(int pkAbState, char bNoVisual);

//----- (0072D570) --------------------------------------------------------
MoverSlot *__cdecl MoverSlot::Create(NiPointer<NiNode> spSlotNode, NiPointer<NiNode> spHideNode, const unsigned int uiSlot, const char *pcMoverIdx, const char *pcMoverTypeIdx)
{
  void *v5; // eax@1
  MoverSlot *v6; // eax@2
  MoverSlotView *v7; // eax@4
  MoverSlot *v8; // edi@4
  MoverSlot *result; // eax@13
  unsigned int v10; // ebx@20
  int v11; // eax@21
  unsigned int v12; // eax@24
  void *v13; // eax@25
  void *v14; // ebx@25
  int v15; // edx@26
  char v16; // cl@27
  unsigned int v17; // eax@28
  unsigned int v18; // edi@28
  unsigned int v19; // esi@28
  unsigned int v20; // ecx@28
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // eax@30
  int v22; // eax@32
  bool v23; // bl@36
  void *v24; // eax@47
  int v25; // edx@47
  int v26; // ecx@48
  NiPointer<NiNode> v27; // [sp-14h] [bp-68h]@16
  unsigned int v28; // [sp-10h] [bp-64h]@1
  const unsigned int v29; // [sp+0h] [bp-54h]@4
  int v30; // [sp+4h] [bp-50h]@25
  unsigned int v31; // [sp+8h] [bp-4Ch]@24
  char *_First2; // [sp+Ch] [bp-48h]@1
  unsigned int i; // [sp+10h] [bp-44h]@20
  unsigned int v34; // [sp+14h] [bp-40h]@21
  unsigned int v35; // [sp+18h] [bp-3Ch]@22
  unsigned int uiCount; // [sp+1Ch] [bp-38h]@1
  int v37; // [sp+20h] [bp-34h]@1
  MoverSlot *p; // [sp+24h] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+28h] [bp-2Ch]@26
  unsigned int v40; // [sp+44h] [bp-10h]@1
  int v41; // [sp+50h] [bp-4h]@1
  int v42; // [sp+54h] [bp+0h]@1

  v40 = (unsigned int)&v42 ^ __security_cookie;
  v28 = (unsigned int)&v42 ^ __security_cookie;
  _First2 = (char *)pcMoverTypeIdx;
  v37 = 0;
  v41 = 1;
  v5 = operator new(0x28u);
  uiCount = (unsigned int)v5;
  LOBYTE(v41) = 2;
  if ( v5 )
  {
    MoverSlot::MoverSlot((MoverSlot *)v5, uiSlot);
    p = v6;
  }
  else
  {
    p = 0;
  }
  LOBYTE(v41) = 1;
  v29 = uiSlot + 1;
  v7 = MoverSlotViewTab::GetByMoverIdx(pcMoverIdx, uiSlot + 1);
  v8 = p;
  p->m_pkMoverSlotView = v7;
  if ( v7 )
  {
    if ( spHideNode.m_pObject )
      spHideNode.m_pObject->baseclass_0.m_uFlags |= 1u;
    v27.m_pObject = spSlotNode.m_pObject;
    uiCount = (unsigned int)&v27;
    if ( spSlotNode.m_pObject )
      InterlockedIncrement((volatile LONG *)&spSlotNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MoverSlot::SetSlotNode(p, v27);
    v27.m_pObject = spHideNode.m_pObject;
    uiCount = (unsigned int)&v27;
    if ( spHideNode.m_pObject )
      InterlockedIncrement((volatile LONG *)&spHideNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
    MoverSlot::SetHideNode(p, v27);
    v10 = 0;
    uiCount = MoverSlotCharAniTab::GetCountByMoverTypeIdx(pcMoverTypeIdx, uiSlot + 1);
    i = 0;
    if ( uiCount )
    {
      do
      {
        v11 = *(_DWORD *)(ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 56);
        v34 = v10;
        if ( v11 == v10 )
          v35 = v10;
        else
          v35 = *(_DWORD *)(v11 + 40);
        v12 = 0;
        v31 = 0;
        if ( v35 > v10 )
        {
          do
          {
            v13 = CDataReader::GetRecord(
                    (CDataReader *)(ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 4),
                    v12);
            v14 = v13;
            v30 = (int)v13;
            if ( v13 )
            {
              this.baseclass_0._Myres = 15;
              this.baseclass_0._Mysize = 0;
              this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
              v15 = (int)((char *)v13 + 1);
              do
              {
                v16 = *(_BYTE *)v13;
                v13 = (char *)v13 + 1;
              }
              while ( v16 );
              std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
                &this,
                (const char *)v14,
                (unsigned int)((char *)v13 - v15));
              v37 |= 1u;
              v17 = strlen(_First2);
              v18 = this.baseclass_0._Mysize;
              v19 = v17;
              v20 = this.baseclass_0._Mysize;
              if ( this.baseclass_0._Mysize >= v17 )
                v20 = v17;
              v21 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
              if ( this.baseclass_0._Myres < 0x10 )
                v21 = &this;
              v22 = std::char_traits<char>::compare(v21->baseclass_0.___u0.baseclass_0.dummy, _First2, v20);
              v23 = !v22 && v18 >= v19 && (LOBYTE(v22) = v18 != v19, !v22) && *((_BYTE *)v14 + 16) == v29;
              v41 = 1;
              if ( v37 & 1 )
              {
                v37 &= 0xFFFFFFFEu;
                if ( this.baseclass_0._Myres >= 0x10 )
                  operator delete(*(void **)&this);
                this.baseclass_0._Myres = 15;
                this.baseclass_0._Mysize = 0;
                this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
              }
              if ( v23 )
              {
                if ( v34 == i )
                {
                  v24 = operator new(8u);
                  v25 = v30;
                  if ( v24 )
                  {
                    v26 = *(_DWORD *)(v30 + 25);
                    *(_DWORD *)v24 = *(_DWORD *)(v30 + 21);
                    *((_DWORD *)v24 + 1) = v26;
                  }
                  else
                  {
                    v24 = 0;
                  }
                  v27.m_pObject = (NiNode *)v24;
                  NiTMapBase<DFALL<NiD3DGlobalConstantEntry__>_char_const___NiD3DGlobalConstantEntry__>::SetAt(
                    (NiTMapBase<NiTPointerAllocator<unsigned int>,unsigned int,NiVBSet *> *)&p->m_kSlotAni,
                    *(_DWORD *)(v25 + 17),
                    (NiVBSet *)v24);
                  break;
                }
                ++v34;
              }
            }
            v12 = v31 + 1;
            v31 = v12;
          }
          while ( v12 < v35 );
        }
        v10 = 0;
        ++i;
      }
      while ( i < uiCount );
    }
    LOBYTE(v41) = 0;
    if ( spSlotNode.m_pObject != (NiNode *)v10
      && !InterlockedDecrement((volatile LONG *)&spSlotNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spSlotNode.m_pObject != (NiNode *)v10 )
      spSlotNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spSlotNode.m_pObject,
        1u);
    v41 = -1;
    if ( spHideNode.m_pObject != (NiNode *)v10
      && !InterlockedDecrement((volatile LONG *)&spHideNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spHideNode.m_pObject != (NiNode *)v10 )
      spHideNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spHideNode.m_pObject,
        1u);
    result = p;
  }
  else
  {
    MoverSlot::_MoverSlot(v8);
    operator delete(v8);
    LOBYTE(v41) = 0;
    if ( spSlotNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spSlotNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
      && spSlotNode.m_pObject )
      spSlotNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
        (NiRefObject *)spSlotNode.m_pObject,
        1u);
    v41 = -1;
    if ( spHideNode.m_pObject
      && !InterlockedDecrement((volatile LONG *)&spHideNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( spHideNode.m_pObject )
        spHideNode.m_pObject->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor(
          (NiRefObject *)spHideNode.m_pObject,
          1u);
    }
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97EEC: using guessed type int ITableBase_MoverSlotCharAni_MoverSlotCharAniTab___ms_pkTable;

//----- (0072D8B0) --------------------------------------------------------
bool __thiscall Mover::Init(Mover *this, unsigned int kMoverID, unsigned __int16 kMoverHandle, int iHP)
{
  Mover *v4; // esi@1
  AbStateInfecteeVtbl *v5; // edx@1
  char v6; // bl@1
  bool (__thiscall *v7)(AbStateInfectee *, ABSTATEINDEX, float, bool); // eax@1
  unsigned int v8; // edi@1
  void (__thiscall *v9)(NpNs_MoveToTarget *); // eax@3
  Name3 *v10; // eax@3
  MapInfo *v11; // eax@3
  int v12; // eax@5
  unsigned int v13; // ebx@6
  void *v14; // eax@9
  bool v15; // al@14
  MoverView *v16; // eax@15
  MoverHG *v17; // eax@16
  const char *v18; // ST00_4@16
  MoverAbility *v19; // edi@16
  void (__thiscall *v20)(AbStateInfectee *, AbStateInst *, bool); // edx@17
  Name3 result; // [sp+Ch] [bp-Ch]@3

  v4 = this;
  v5 = this->baseclass_0.baseclass_0.vfptr;
  this->baseclass_0.m_kHandle = kMoverHandle;
  v6 = ((int (*)(void))v5[1].AddAbStateByAbstateIndex)();
  v7 = v4->baseclass_0.baseclass_0.vfptr[1].AddAbStateByAbstateIndex;
  v8 = 0;
  v4->baseclass_0.m_byMode = 1;
  v4->baseclass_0.m_eStandMode = 0;
  if ( v6 != (unsigned __int8)((int (__thiscall *)(Mover *))v7)(v4) )
    v4->baseclass_0.m_bIsChangeCampMode = 1;
  v9 = v4->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0.vfptr->Stop;
  v4->m_kMoverID = kMoverID;
  v4->baseclass_0.m_kCharShape.m_kClassID = 0;
  v4->baseclass_0.m_bUserCharacter = 0;
  v9(&v4->baseclass_0.m_kMoveToTarget.baseclass_0.baseclass_0);
  v4->baseclass_0.m_bConnectServer = 1;
  v10 = World::GetMapName(&g_kWorld, &result);
  v11 = MapInfoTab::GetByMapName(v10);
  if ( v11 )
    v4->baseclass_0.m_fMaxViewLength = (double)v11->Sight;
  v12 = *(_DWORD *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 56);
  if ( v12 )
    v13 = *(_DWORD *)(v12 + 40);
  else
    v13 = 0;
  if ( v13 )
  {
    while ( 1 )
    {
      v14 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverMain_MoverMainTab>::ms_pkTable + 4), v8);
      if ( v14 )
      {
        if ( *(_DWORD *)v14 == kMoverID )
          break;
      }
      ++v8;
      if ( v8 >= v13 )
        goto LABEL_12;
    }
  }
  else
  {
LABEL_12:
    v14 = 0;
  }
  v4->m_pkMoverMain = (MoverMain *)v14;
  if ( v14 && (v16 = MoverViewTab::GetByMoverIdx((const char *)v14 + 4), (v4->m_pkMoverView = v16) != 0) )
  {
    v17 = MoverHGTab::GetByMoverIdx(v4->m_pkMoverMain->MoverIDX);
    v18 = v4->m_pkMoverMain->MoverIDX;
    v4->m_bFeed = v17 != 0;
    v19 = MoverAbilityTab::GetByMoverIdx(v18);
    if ( v19 )
    {
      v20 = v4->baseclass_0.baseclass_0.vfptr[4].Affect;
      v4->m_bAbility = 1;
      ((void (__thiscall *)(Mover *, int))v20)(v4, iHP);
      ((void (__thiscall *)(Mover *, unsigned int))v4->baseclass_0.baseclass_0.vfptr[4].SetAbStateProperty)(v4, v19->HP);
    }
    v15 = 1;
  }
  else
  {
    v15 = 0;
  }
  return v15;
}
// A959E4: using guessed type int ITableBase_MoverMain_MoverMainTab___ms_pkTable;

//----- (0072DA20) --------------------------------------------------------
// local variable allocation has failed!
bool __thiscall Mover::InitView(Mover *this, bool bEquip, unsigned int uiFrame)
{
  Mover *v3; // edi@1
  char *v4; // esi@1
  NiActorManager *v5; // eax@1
  NiActorManager *v6; // edi@1
  NiActorManager *v7; // ebx@1
  Mover *v8; // edi@6
  ActionInfoSet *v9; // eax@9
  int v10; // edx@9
  NiActorManager *v11; // edi@9
  int v12; // esi@9
  bool result; // al@10
  NiNode *v14; // ebx@11
  char *v15; // eax@16
  NiRefObjectVtbl *v16; // edx@18
  int v17; // eax@18
  int v18; // edi@18
  NiRefObjectVtbl *v19; // esi@23
  Mover *v20; // ebx@26
  NiActorManager *v21; // eax@26
  NiPointer<NiNode> v22; // [sp-24h] [bp-48h]@29
  NiPointer<NiNode> v23; // [sp-20h] [bp-44h]@27
  const unsigned int v24; // [sp-1Ch] [bp-40h]@27
  NiActorManager *v25; // [sp-18h] [bp-3Ch]@1
  int v26; // [sp-14h] [bp-38h]@1
  NiPointer<NiNode> spHideNode; // [sp+0h] [bp-24h]@24
  NiPointer<NiNode> spSlotNode; // [sp+4h] [bp-20h]@18
  unsigned int _Val; // [sp+8h] [bp-1Ch]@27
  NiPointer<NiNode> spNode; // [sp+Ch] [bp-18h]@11
  Mover *v31; // [sp+10h] [bp-14h]@1
  int i; // [sp+14h] [bp-10h]@14
  int v33; // [sp+20h] [bp-4h]@13
  bool bEquip_3; // [sp+2Fh] [bp+Bh]@37

  v3 = this;
  v31 = this;
  v4 = (char *)&this->baseclass_0.m_kActionMgr;
  this->baseclass_0.m_kActionMgr.m_fActionStartTime = 0.0;
  v26 = 0;
  this->baseclass_0.m_kActionMgr.m_fActionLastUpdateTime = 0.0;
  v25 = 0;
  this->baseclass_0.m_kActionMgr.m_pkActInfoSet = 0;
  this->baseclass_0.m_kActionMgr.m_pkChar = 0;
  this->baseclass_0.m_kActionMgr.m_pActor = 0;
  this->baseclass_0.m_kActionMgr.m_pkCurPlaySkillViewInfo = 0;
  this->baseclass_0.m_kActionMgr.m_uiCurEventCode = 0;
  this->baseclass_0.m_kActionMgr.m_pkLastAttackActInfo = 0;
  this->baseclass_0.m_kActionMgr.m_iOldLoopCnt = 0;
  this->baseclass_0.m_kActionMgr.m_bUseActorSequence = 0;
  this->baseclass_0.m_kActionMgr.m_pkCurPlayActInfo = 0;
  ActorCallBack::SetCurrentActionInfo(&this->baseclass_0.m_kActionMgr.baseclass_0, v25, (ActionInfo *)v26);
  *((_WORD *)v4 + 40) = 0;
  v4[82] = 0;
  *(_WORD *)(v4 + 83) = 0;
  *((float *)v4 + 26) = 0.0;
  v5 = CharResMgr::GetMoverActor(&g_kCharResMgr, v3->m_kMoverID);
  v6 = v3->baseclass_0.m_spActor.m_pObject;
  v7 = v5;
  if ( v6 == v5 )
  {
    v8 = v31;
  }
  else
  {
    if ( v6 && !InterlockedDecrement((volatile LONG *)&v6->baseclass_0.m_uiRefCount) && v6 )
      v6->baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v6, 1u);
    v8 = v31;
    v31->baseclass_0.m_spActor.m_pObject = v7;
    if ( v7 )
      InterlockedIncrement((volatile LONG *)&v7->baseclass_0.m_uiRefCount);
  }
  v9 = ActionInfoTable::GetMoverActionInfo(v8->m_kMoverID);
  v10 = *(_DWORD *)v4;
  v8->baseclass_0.m_kActionMgr.m_pkActInfoSet = v9;
  (*(void (__thiscall **)(char *, Mover *))(v10 + 24))(v4, v8);
  v11 = v8->baseclass_0.m_spActor.m_pObject;
  v12 = 0;
  if ( !v11 )
    goto LABEL_42;
  v14 = (NiNode *)v11->m_spNIFRoot.m_pObject;
  spNode.m_pObject = v14;
  if ( v14 )
    InterlockedIncrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  v33 = 0;
  if ( v14 )
  {
    i = 0;
    do
    {
      if ( v12 )
      {
        v26 = v12 + 1;
        v15 = fs("#Chair%02d");
      }
      else
      {
        v15 = "#Chair";
      }
      v16 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
      v26 = (int)v15;
      v17 = (int)v16[18].__vecDelDtor((NiRefObject *)v14, (unsigned int)v15);
      v18 = v17;
      spSlotNode.m_pObject = (NiNode *)v17;
      if ( v17 )
        InterlockedIncrement((volatile LONG *)(v17 + 4));
      LOBYTE(v33) = 1;
      if ( v18 )
      {
        if ( v12 )
        {
          v19 = v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr;
          v26 = i + 1;
          v26 = (int)fs("HideSlot%02d");
          v12 = (int)v19[18].__vecDelDtor((NiRefObject *)v14, v26);
        }
        spHideNode.m_pObject = (NiNode *)v12;
        if ( v12 )
          InterlockedIncrement((volatile LONG *)(v12 + 4));
        v20 = v31;
        v21 = (NiActorManager *)v31->m_pkMoverView;
        LOBYTE(v33) = 2;
        if ( v21 )
        {
          v26 = (int)&v21[1].m_fTimelineRefreshTime;
          v25 = v21;
          v24 = i;
          _Val = (unsigned int)&v23;
          v23.m_pObject = (NiNode *)v12;
          if ( v12 )
            InterlockedIncrement((volatile LONG *)(v12 + 4));
          _Val = (unsigned int)&v22;
          v22.m_pObject = (NiNode *)v18;
          InterlockedIncrement((volatile LONG *)(v18 + 4));
          _Val = (unsigned int)MoverSlot::Create(v22, v23, v24, (const char *)v25, (const char *)v26);
          std::vector<NiAVObject___std::allocator<NiAVObject__>>::push_back(
            (std::vector<unsigned long,std::allocator<unsigned long> > *)&v20->m_kMoverSlots,
            &_Val);
        }
        LOBYTE(v33) = 1;
        if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v12)(v12, 1);
        LOBYTE(v33) = 0;
        if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) )
          (**(void (__thiscall ***)(_DWORD, _DWORD))v18)(v18, 1);
        v12 = i;
        v14 = spNode.m_pObject;
      }
      else
      {
        LOBYTE(v33) = 0;
      }
      ++v12;
      i = v12;
    }
    while ( (unsigned int)v12 < 0xA );
    bEquip_3 = ((int (__stdcall *)(_DWORD))v31->baseclass_0.baseclass_0.vfptr[18].__vecDelDtor)(bEquip);
    v33 = -1;
    if ( !InterlockedDecrement((volatile LONG *)&v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
      v14->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v14, 1u);
    result = bEquip_3;
  }
  else
  {
LABEL_42:
    result = 0;
  }
  return result;
}
// 72DA20: variables would overlap: ST54_1/1 and ST54_3/3

//----- (0072DCD0) --------------------------------------------------------
void __thiscall MoverSlot::SetSlotNode(MoverSlot *this, NiPointer<NiNode> spSlotNode)
{
  MoverSlot *v2; // edi@1
  NiNode *v3; // esi@1
  NiNode *v4; // eax@1
  NiNode *v5; // esi@10

  v2 = this;
  v3 = this->m_spSlotNode.m_pObject;
  v4 = spSlotNode.m_pObject;
  if ( v3 != spSlotNode.m_pObject )
  {
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      v4 = spSlotNode.m_pObject;
    }
    v2->m_spSlotNode.m_pObject = v4;
    if ( v4 )
    {
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v4 = spSlotNode.m_pObject;
    }
  }
  if ( v4 )
  {
    v5 = v4;
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
}

//----- (0072DD80) --------------------------------------------------------
NiPointer<NiNode> *__thiscall MoverSlot::GetSlotNode(MoverSlot *this, NiPointer<NiNode> *result)
{
  NiNode *v2; // eax@1

  v2 = this->m_spSlotNode.m_pObject;
  result->m_pObject = v2;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  return result;
}

//----- (0072DDB0) --------------------------------------------------------
void __thiscall MoverSlot::SetHideNode(MoverSlot *this, NiPointer<NiNode> spHideNode)
{
  MoverSlot *v2; // edi@1
  NiNode *v3; // esi@1
  NiNode *v4; // eax@1
  NiNode *v5; // esi@10

  v2 = this;
  v3 = this->m_spHideNode.m_pObject;
  v4 = spHideNode.m_pObject;
  if ( v3 != spHideNode.m_pObject )
  {
    if ( v3 )
    {
      if ( !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount)
        && v3 )
        v3->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
      v4 = spHideNode.m_pObject;
    }
    v2->m_spHideNode.m_pObject = v4;
    if ( v4 )
    {
      InterlockedIncrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
      v4 = spHideNode.m_pObject;
    }
  }
  if ( v4 )
  {
    v5 = v4;
    if ( !InterlockedDecrement((volatile LONG *)&v4->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount) )
    {
      if ( v5 )
        v5->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v5, 1u);
    }
  }
}

//----- (0072DE60) --------------------------------------------------------
NiPointer<NiNode> *__thiscall MoverSlot::GetHideNode(MoverSlot *this, NiPointer<NiNode> *result)
{
  NiNode *v2; // eax@1

  v2 = this->m_spHideNode.m_pObject;
  result->m_pObject = v2;
  if ( v2 )
    InterlockedIncrement((volatile LONG *)&v2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.m_uiRefCount);
  return result;
}

//----- (0072DE90) --------------------------------------------------------
void __thiscall NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>(NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *> *this)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *> *v1; // esi@1

  v1 = this;
  this->vfptr = (NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *>Vtbl *)&NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v1->m_ppkHashTable);
}
// 9D862C: using guessed type int (__thiscall *NiTMapBase_DFALL_MoverSlot__sSlotAniCode ___enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);

//----- (0072DEB0) --------------------------------------------------------
void *__thiscall NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vector_deleting_destructor_(NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *> *this, unsigned int a2)
{
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *> *v2; // esi@1

  v2 = this;
  this->vfptr = (NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *>Vtbl *)&NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  operator delete__(v2->m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D862C: using guessed type int (__thiscall *NiTMapBase_DFALL_MoverSlot__sSlotAniCode ___enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);

//----- (0072DEF0) --------------------------------------------------------
void *__thiscall NiTMap<enum__CharAniType_MoverSlot::sSlotAniCode__>::_vector_deleting_destructor_(NiTMap<enum CharAniType,MoverSlot::sSlotAniCode *> *this, unsigned int a2)
{
  NiTMap<enum CharAniType,MoverSlot::sSlotAniCode *> *v2; // esi@1

  v2 = this;
  this->baseclass_0.vfptr = (NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *>Vtbl *)&NiTMap<enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)this);
  v2->baseclass_0.vfptr = (NiTMapBase<DFALL<MoverSlot::sSlotAniCode *>,enum CharAniType,MoverSlot::sSlotAniCode *>Vtbl *)&NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::_vftable_;
  NiTMapBase<DFALL<MoverSlot::sSlotAniCode__>_enum__CharAniType_MoverSlot::sSlotAniCode__>::RemoveAll((NiTMapBase<DFALL<NiPointer<PgWinBut> >,unsigned long,NiPointer<PgWinBut> > *)v2);
  operator delete__(v2->baseclass_0.m_ppkHashTable);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D862C: using guessed type int (__thiscall *NiTMapBase_DFALL_MoverSlot__sSlotAniCode ___enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);
// 9D864C: using guessed type int (__thiscall *NiTMap_enum  CharAniType_MoverSlot__sSlotAniCode _____vftable_)(void *p, char);

//----- (0072DF70) --------------------------------------------------------
bool __thiscall Mover::IsEndPathFinding(Mover *this)
{
  return this->m_bWay == 0;
}

//----- (0072DF80) --------------------------------------------------------
void *__thiscall Mover::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Mover::_scalar_deleting_destructor_((Mover *)((char *)this - 84), a2);
}

//----- (0072DF90) --------------------------------------------------------
void *__thiscall Mover::_vector_deleting_destructor_(void *this, unsigned int a2)
{
  return Mover::_scalar_deleting_destructor_((Mover *)((char *)this - 60), a2);
}

//----- (0072DFA0) --------------------------------------------------------
void *__thiscall Mover::_scalar_deleting_destructor_(Mover *this, unsigned int a2)
{
  Mover *v2; // esi@1

  v2 = this;
  this->baseclass_0.baseclass_0.vfptr = (AbStateInfecteeVtbl *)&Mover::_vftable_;
  this->baseclass_0.baseclass_3c.vfptr = (IEffectHolderVtbl *)&Mover::_vftable_;
  this->baseclass_0.baseclass_54.vfptr = (AttackSequenceManagerVtbl *)Mover::_vftable_;
  this->m_hMoverEffect = 0;
  if ( *(_DWORD *)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v2->m_kMoverSlots.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v2->m_kMoverSlots.baseclass_0._Mylast = 0;
  v2->m_kMoverSlots.baseclass_0._Myend = 0;
  Char::_Char(&v2->baseclass_0);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D866C: using guessed type int (*Mover___vftable_[2])();
// 9D868C: using guessed type int (__stdcall *Mover___vftable_)(int);
// 9D8694: using guessed type int (__stdcall *Mover___vftable_)(int pkAbState, char bNoVisual);

//----- (0072E050) --------------------------------------------------------
MoverSlotView *__cdecl MoverSlotViewTab::GetByMoverIdx(const char *pcMoverIdx, unsigned int uiSlot)
{
  unsigned int v2; // edi@1
  int v3; // eax@1
  unsigned int v4; // esi@4
  void *v5; // eax@5
  void *v6; // ebx@5
  int v7; // edx@6
  char v8; // cl@7
  unsigned int v9; // eax@8
  unsigned int v10; // edi@8
  unsigned int v11; // esi@8
  unsigned int v12; // ecx@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v13; // eax@10
  int v14; // eax@12
  bool v15; // bl@16
  MoverSlotView *pkMoverSlotView; // [sp+0h] [bp-40h]@5
  unsigned int i; // [sp+4h] [bp-3Ch]@4
  unsigned int v19; // [sp+Ch] [bp-34h]@2
  int v20; // [sp+10h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+14h] [bp-2Ch]@6
  unsigned int v22; // [sp+30h] [bp-10h]@1
  int v23; // [sp+3Ch] [bp-4h]@18
  int v24; // [sp+40h] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v2 = 0;
  v20 = 0;
  v3 = *(_DWORD *)(ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable + 56);
  if ( v3 )
    v19 = *(_DWORD *)(v3 + 40);
  else
    v19 = 0;
  v4 = 0;
  i = 0;
  if ( v19 <= 0 )
    return 0;
  while ( 1 )
  {
    v5 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverSlotView_MoverSlotViewTab>::ms_pkTable + 4), v4);
    v6 = v5;
    pkMoverSlotView = (MoverSlotView *)v5;
    if ( v5 != (void *)v2 )
      break;
LABEL_24:
    ++v4;
    i = v4;
    if ( v4 >= v19 )
      return 0;
  }
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = v2;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v7 = (int)((char *)v5 + 1);
  do
  {
    v8 = *(_BYTE *)v5;
    v5 = (char *)v5 + 1;
  }
  while ( v8 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this,
    (const char *)v6,
    (unsigned int)((char *)v5 - v7));
  v20 |= 1u;
  v9 = strlen(pcMoverIdx);
  v10 = this.baseclass_0._Mysize;
  v11 = v9;
  v12 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v9 )
    v12 = v9;
  v13 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v13 = &this;
  v14 = std::char_traits<char>::compare(v13->baseclass_0.___u0.baseclass_0.dummy, pcMoverIdx, v12);
  v15 = !v14 && v10 >= v11 && (LOBYTE(v14) = v10 != v11, !v14) && *((_BYTE *)v6 + 32) == uiSlot;
  v23 = -1;
  if ( v20 & 1 )
  {
    v20 &= 0xFFFFFFFEu;
    if ( this.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&this);
    this.baseclass_0._Myres = 15;
    this.baseclass_0._Mysize = 0;
    this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  if ( !v15 )
  {
    v4 = i;
    v2 = 0;
    goto LABEL_24;
  }
  return pkMoverSlotView;
}
// A85C00: using guessed type int __security_cookie;
// A97EE8: using guessed type int ITableBase_MoverSlotView_MoverSlotViewTab___ms_pkTable;

//----- (0072E1C0) --------------------------------------------------------
unsigned int __cdecl MoverSlotCharAniTab::GetCountByMoverTypeIdx(const char *pcMoverTypeIdx, unsigned int uiSlot)
{
  int v2; // eax@1
  unsigned int result; // eax@4
  void *v4; // eax@5
  unsigned int v5; // eax@6
  unsigned int v6; // ebx@6
  unsigned int v7; // esi@6
  unsigned int v8; // ecx@6
  unsigned int v9; // edi@8
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v10; // eax@8
  int v11; // eax@10
  bool v12; // zf@10
  signed int v13; // eax@12
  bool v14; // bl@15
  unsigned int i; // [sp+0h] [bp-3Ch]@4
  unsigned int v16; // [sp+8h] [bp-34h]@2
  unsigned int uiCount; // [sp+Ch] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v19; // [sp+2Ch] [bp-10h]@1
  int v20; // [sp+38h] [bp-4h]@15
  int v21; // [sp+3Ch] [bp+0h]@1

  v19 = (unsigned int)&v21 ^ __security_cookie;
  v2 = *(_DWORD *)(ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 56);
  uiCount = 0;
  if ( v2 )
    v16 = *(_DWORD *)(v2 + 40);
  else
    v16 = 0;
  result = 0;
  i = 0;
  if ( v16 > 0 )
  {
    do
    {
      v4 = CDataReader::GetRecord(
             (CDataReader *)(ITableBase<MoverSlotCharAni_MoverSlotCharAniTab>::ms_pkTable + 4),
             result);
      if ( v4 )
      {
        this.baseclass_0._Myres = 15;
        this.baseclass_0._Mysize = 0;
        this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
          &this,
          (const char *)v4,
          strlen((const char *)v4));
        v5 = strlen(pcMoverTypeIdx);
        v6 = this.baseclass_0._Mysize;
        v7 = v5;
        v8 = this.baseclass_0._Mysize;
        if ( this.baseclass_0._Mysize >= v5 )
          v8 = v5;
        v9 = this.baseclass_0._Myres;
        v10 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
        if ( this.baseclass_0._Myres < 0x10 )
          v10 = &this;
        v11 = std::char_traits<char>::compare(v10->baseclass_0.___u0.baseclass_0.dummy, pcMoverTypeIdx, v8);
        v12 = v11 == 0;
        if ( !v11 )
        {
          if ( v6 >= v7 )
            v13 = v6 != v7;
          else
            v13 = -1;
          v12 = v13 == 0;
        }
        v14 = v12;
        v20 = -1;
        if ( v9 >= 0x10 )
          operator delete(*(void **)&this);
        this.baseclass_0._Myres = 15;
        this.baseclass_0._Mysize = 0;
        this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        if ( v14 )
          ++uiCount;
      }
      result = i + 1;
      i = result;
    }
    while ( result < v16 );
    result = uiCount;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// A97EEC: using guessed type int ITableBase_MoverSlotCharAni_MoverSlotCharAniTab___ms_pkTable;

//----- (0072E320) --------------------------------------------------------
MoverAbility *__cdecl MoverAbilityTab::GetByMoverIdx(const char *pcMoverIdx)
{
  int v1; // eax@1
  unsigned int v2; // edi@1
  void *v3; // eax@5
  const char *v4; // esi@5
  int v5; // edx@6
  char v6; // cl@7
  unsigned int v7; // eax@8
  unsigned int v8; // ebx@8
  unsigned int v9; // esi@8
  unsigned int v10; // ecx@8
  unsigned int v11; // edi@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v12; // eax@10
  int v13; // eax@12
  bool v14; // zf@12
  signed int v15; // eax@14
  bool v16; // bl@17
  MoverAbility *pkMoverAbility; // [sp+0h] [bp-3Ch]@5
  unsigned int i; // [sp+8h] [bp-34h]@4
  unsigned int v20; // [sp+Ch] [bp-30h]@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > this; // [sp+10h] [bp-2Ch]@6
  unsigned int v22; // [sp+2Ch] [bp-10h]@1
  int v23; // [sp+38h] [bp-4h]@17
  int v24; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v24 ^ __security_cookie;
  v1 = *(_DWORD *)(ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable + 56);
  v2 = 0;
  if ( v1 )
    v20 = *(_DWORD *)(v1 + 40);
  else
    v20 = 0;
  i = 0;
  if ( v20 <= 0 )
    return 0;
  while ( 1 )
  {
    v3 = CDataReader::GetRecord((CDataReader *)(ITableBase<MoverAbility_MoverAbilityTab>::ms_pkTable + 4), v2);
    v4 = (const char *)v3;
    pkMoverAbility = (MoverAbility *)v3;
    if ( v3 )
      break;
LABEL_21:
    ++v2;
    i = v2;
    if ( v2 >= v20 )
      return 0;
  }
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v5 = (int)((char *)v3 + 1);
  do
  {
    v6 = *(_BYTE *)v3;
    v3 = (char *)v3 + 1;
  }
  while ( v6 );
  std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
    &this,
    v4,
    (unsigned int)((char *)v3 - v5));
  v7 = strlen(pcMoverIdx);
  v8 = this.baseclass_0._Mysize;
  v9 = v7;
  v10 = this.baseclass_0._Mysize;
  if ( this.baseclass_0._Mysize >= v7 )
    v10 = v7;
  v11 = this.baseclass_0._Myres;
  v12 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&this;
  if ( this.baseclass_0._Myres < 0x10 )
    v12 = &this;
  v13 = std::char_traits<char>::compare(v12->baseclass_0.___u0.baseclass_0.dummy, pcMoverIdx, v10);
  v14 = v13 == 0;
  if ( !v13 )
  {
    if ( v8 >= v9 )
      v15 = v8 != v9;
    else
      v15 = -1;
    v14 = v15 == 0;
  }
  v16 = v14;
  v23 = -1;
  if ( v11 >= 0x10 )
    operator delete(*(void **)&this);
  this.baseclass_0._Myres = 15;
  this.baseclass_0._Mysize = 0;
  this.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( !v16 )
  {
    v2 = i;
    goto LABEL_21;
  }
  return pkMoverAbility;
}
// A85C00: using guessed type int __security_cookie;
// A97EF0: using guessed type int ITableBase_MoverAbility_MoverAbilityTab___ms_pkTable;

//----- (0072E470) --------------------------------------------------------
HRESULT __stdcall StringVPrintfWorkerW(wchar_t *pszDest, unsigned int cchDest, const wchar_t *pszFormat, char *argList)
{
  HRESULT result; // eax@2
  unsigned int v5; // esi@3
  int v6; // eax@3
  bool v7; // zf@4

  if ( cchDest )
  {
    v5 = cchDest - 1;
    v6 = _vsnwprintf(pszDest, cchDest - 1, pszFormat, argList);
    if ( v6 < 0 || (v7 = v6 == v5, v6 > v5) )
    {
      pszDest[v5] = 0;
      result = -2147024774;
    }
    else
    {
      result = 0;
      if ( v7 )
        pszDest[v5] = 0;
    }
  }
  else
  {
    result = -2147024809;
  }
  return result;
}

//----- (0072E4D0) --------------------------------------------------------
HRESULT __cdecl StringCbPrintfW(wchar_t *pszDest, unsigned int cbDest, const wchar_t *pszFormat)
{
  HRESULT result; // eax@2
  char argList; // [sp+14h] [bp+14h]@0

  if ( cbDest >> 1 <= 0x7FFFFFFF )
    result = StringVPrintfWorkerW(pszDest, cbDest >> 1, pszFormat, &argList);
  else
    result = -2147024809;
  return result;
}

//----- (0072E500) --------------------------------------------------------
void __thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Chassign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, unsigned int _Off, unsigned int _Count, wchar_t _Ch)
{
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v4; // eax@1
  void *v5; // edi@7
  int v6; // eax@8
  unsigned int v7; // edi@8
  unsigned int i; // ecx@8

  v4 = this;
  if ( _Count == 1 )
  {
    if ( this->baseclass_0._Myres >= 8 )
      v4 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    *(_WORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[2 * _Off] = _Ch;
  }
  else
  {
    if ( this->baseclass_0._Myres >= 8 )
      v4 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    v5 = (char *)v4 + 2 * _Off;
    if ( _Count )
    {
      v6 = (_Ch << 16) | _Ch;
      memset32(v5, v6, _Count >> 1);
      v7 = (unsigned int)((char *)v5 + 4 * (_Count >> 1));
      for ( i = _Count & 1; i; --i )
      {
        *(_WORD *)v7 = _Ch;
        v7 += 2;
      }
    }
  }
}

//----- (0072E560) --------------------------------------------------------
unsigned __int16 *__thiscall std::allocator<unsigned_short>::allocate(std::allocator<unsigned short> *this, unsigned int _Count)
{
  unsigned __int16 *result; // eax@1
  std::exception thisa; // [sp+0h] [bp-Ch]@4

  result = 0;
  if ( _Count )
  {
    if ( _Count > 0x7FFFFFFF || (result = (unsigned __int16 *)operator new(2 * _Count)) == 0 )
    {
      _Count = 0;
      std::exception::exception(&thisa, (const char *const *)&_Count);
      thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
      _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
    }
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (0072E5C0) --------------------------------------------------------
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::erase(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, unsigned int _Off, unsigned int _Count)
{
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v3; // esi@1
  unsigned int v4; // eax@1
  unsigned int v5; // edi@3
  unsigned int v6; // eax@3
  unsigned int v7; // edx@6
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v8; // ebx@7
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v9; // edx@10
  int v10; // eax@12
  bool v11; // cf@12

  v3 = this;
  v4 = this->baseclass_0._Mysize;
  if ( v4 < _Off )
    std::_Xout_of_range("invalid string position");
  v5 = _Count;
  v6 = v4 - _Off;
  if ( v6 < _Count )
    v5 = v6;
  if ( v5 )
  {
    v7 = this->baseclass_0._Myres;
    if ( v7 < 8 )
      v8 = this;
    else
      v8 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v7 < 8 )
      v9 = this;
    else
      v9 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    memmove((char *)v9 + 2 * _Off, (char *)v8 + 2 * (_Off + v5), 2 * (v6 - v5));
    v10 = v3->baseclass_0._Mysize - v5;
    v11 = v3->baseclass_0._Myres < 8;
    v3->baseclass_0._Mysize = v10;
    if ( !v11 )
    {
      *(_WORD *)(*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + 2 * v10) = 0;
      return v3;
    }
    *(_WORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[2 * v10] = 0;
  }
  return v3;
}

//----- (0072E650) --------------------------------------------------------
#error "72E792: positive sp value has been found (funcsize=101)"

//----- (0072E7D0) --------------------------------------------------------
void __thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this)
{
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v1; // esi@1

  v1 = this;
  if ( this->baseclass_0._Myres >= 8 )
    operator delete(*(void **)&this->baseclass_0.___u0.baseclass_0.dummy[0]);
  v1->baseclass_0._Myres = 7;
  v1->baseclass_0._Mysize = 0;
  *(_WORD *)&v1->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
}

//----- (0072E800) --------------------------------------------------------
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, unsigned int _Count, wchar_t _Ch)
{
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v3; // esi@1
  unsigned int v4; // eax@1
  unsigned int v5; // edi@4
  unsigned int v6; // ecx@6
  bool v7; // cf@8
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *result; // eax@9

  v3 = this;
  v4 = this->baseclass_0._Mysize;
  if ( -1 - v4 <= _Count )
    std::_Xlength_error("string too long");
  if ( !_Count )
    return v3;
  v5 = v4 + _Count;
  if ( v4 + _Count > 0x7FFFFFFE )
    std::_Xlength_error("string too long");
  v6 = this->baseclass_0._Myres;
  if ( v6 < v5 )
  {
    std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Copy(v3, v4 + _Count, v4);
    if ( v5 )
    {
LABEL_8:
      std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Chassign(
        v3,
        v3->baseclass_0._Mysize,
        _Count,
        _Ch);
      v7 = v3->baseclass_0._Myres < 8;
      v3->baseclass_0._Mysize = v5;
      if ( !v7 )
      {
        *(_WORD *)(*(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] + 2 * v5) = 0;
        return v3;
      }
      *(_WORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[2 * v5] = 0;
    }
    return v3;
  }
  if ( v5 )
    goto LABEL_8;
  v3->baseclass_0._Mysize = 0;
  if ( v6 < 8 )
  {
    result = v3;
    *(_WORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_WORD **)&v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v3;
  }
  return result;
}

//----- (0072E8C0) --------------------------------------------------------
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *_Right, unsigned int _Roff, unsigned int _Count)
{
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v4; // edx@1
  unsigned int v5; // eax@1
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v6; // esi@1
  unsigned int v7; // ebx@3
  unsigned int v8; // eax@3
  unsigned int v9; // eax@5
  int v10; // edi@8
  unsigned int v11; // ecx@10
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v12; // ecx@13
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *result; // eax@16
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v14; // eax@20
  bool v15; // cf@22

  v4 = _Right;
  v5 = _Right->baseclass_0._Mysize;
  v6 = this;
  if ( v5 < _Roff )
    std::_Xout_of_range("invalid string position");
  v7 = _Count;
  v8 = v5 - _Roff;
  if ( v8 < _Count )
    v7 = v8;
  v9 = this->baseclass_0._Mysize;
  if ( -1 - v9 <= v7 )
    std::_Xlength_error("string too long");
  if ( !v7 )
    return v6;
  v10 = v9 + v7;
  if ( v9 + v7 > 0x7FFFFFFE )
    std::_Xlength_error("string too long");
  v11 = this->baseclass_0._Myres;
  if ( v11 < v10 )
  {
    std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Copy(v6, v9 + v7, v9);
    v4 = _Right;
    if ( v10 )
    {
LABEL_12:
      if ( v4->baseclass_0._Myres < 8 )
        v12 = v4;
      else
        v12 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( v6->baseclass_0._Myres < 8 )
        v14 = v6;
      else
        v14 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v6->baseclass_0.___u0.baseclass_0.dummy[0];
      memcpy((char *)v14 + 2 * v6->baseclass_0._Mysize, (char *)v12 + 2 * _Roff, 2 * v7);
      v15 = v6->baseclass_0._Myres < 8;
      v6->baseclass_0._Mysize = v10;
      if ( !v15 )
      {
        *(_WORD *)(*(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] + 2 * v10) = 0;
        return v6;
      }
      *(_WORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[2 * v10] = 0;
    }
    return v6;
  }
  if ( v10 )
    goto LABEL_12;
  v6->baseclass_0._Mysize = 0;
  if ( v11 < 8 )
  {
    result = v6;
    *(_WORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_WORD **)&v6->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v6;
  }
  return result;
}

//----- (0072E9D0) --------------------------------------------------------
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *_Right, unsigned int _Roff, unsigned int _Count)
{
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v4; // esi@1
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v5; // ecx@1
  unsigned int v6; // edi@1
  unsigned int v7; // edi@3
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *result; // eax@6
  unsigned int v9; // eax@9
  char *v10; // eax@14
  int v11; // ebx@20
  bool v12; // cf@20

  v4 = this;
  v5 = _Right;
  v6 = _Right->baseclass_0._Mysize;
  if ( v6 < _Roff )
    std::_Xout_of_range("invalid string position");
  v7 = v6 - _Roff;
  if ( _Count < v7 )
    v7 = _Count;
  if ( v4 == _Right )
  {
    std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::erase(v4, _Roff + v7, 0xFFFFFFFFu);
    std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::erase(v4, 0, _Roff);
    return v4;
  }
  if ( v7 > 0x7FFFFFFE )
    std::_Xlength_error("string too long");
  v9 = v4->baseclass_0._Myres;
  if ( v9 < v7 )
  {
    std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Copy(v4, v7, v4->baseclass_0._Mysize);
    v5 = _Right;
    if ( !v7 )
      return v4;
LABEL_11:
    if ( v5->baseclass_0._Myres >= 8 )
      v5 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v5->baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v4->baseclass_0._Myres < 8 )
      v10 = (char *)v4;
    else
      v10 = *(char **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
    v11 = 2 * v7;
    memcpy(v10, (char *)v5 + 2 * _Roff, 2 * v7);
    v12 = v4->baseclass_0._Myres < 8;
    v4->baseclass_0._Mysize = v7;
    if ( !v12 )
    {
      *(_WORD *)(v11 + *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0]) = 0;
      return v4;
    }
    *(_WORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[v11] = 0;
    return v4;
  }
  if ( v7 )
    goto LABEL_11;
  v4->baseclass_0._Mysize = 0;
  if ( v9 < 8 )
  {
    result = v4;
    *(_WORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  }
  else
  {
    **(_WORD **)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    result = v4;
  }
  return result;
}

//----- (0072EAD0) --------------------------------------------------------
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, const wchar_t *_Ptr, unsigned int _Count)
{
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v3; // esi@1
  unsigned int v4; // edx@2
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v5; // ecx@6
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v6; // ecx@10
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *result; // eax@12
  unsigned int v8; // eax@15
  char *v9; // eax@18
  unsigned int v10; // ebx@24
  bool v11; // cf@24

  v3 = this;
  if ( !_Ptr )
    goto LABEL_30;
  v4 = this->baseclass_0._Myres;
  if ( v4 >= 8 )
    this = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&this->baseclass_0.___u0.baseclass_0.dummy[0];
  if ( (unsigned int)_Ptr < (unsigned int)this
    || (v4 < 8 ? (v5 = v3) : (v5 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v3->baseclass_0.___u0.baseclass_0.dummy[0]),
        (unsigned int)((char *)v5 + 2 * v3->baseclass_0._Mysize) <= (unsigned int)_Ptr) )
  {
LABEL_30:
    if ( _Count > 0x7FFFFFFE )
      std::_Xlength_error("string too long");
    v8 = v3->baseclass_0._Myres;
    if ( v8 >= _Count )
    {
      if ( !_Count )
      {
        v3->baseclass_0._Mysize = 0;
        if ( v8 < 8 )
        {
          result = v3;
          *(_WORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
        }
        else
        {
          **(_WORD **)&v3->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          result = v3;
        }
        return result;
      }
    }
    else
    {
      std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Copy(
        v3,
        _Count,
        v3->baseclass_0._Mysize);
      if ( !_Count )
        return v3;
    }
    if ( v3->baseclass_0._Myres < 8 )
      v9 = (char *)v3;
    else
      v9 = *(char **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
    v10 = 2 * _Count;
    memcpy(v9, (char *)_Ptr, 2 * _Count);
    v11 = v3->baseclass_0._Myres < 8;
    v3->baseclass_0._Mysize = _Count;
    if ( !v11 )
    {
      *(_WORD *)(v10 + *(_DWORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[0]) = 0;
      return v3;
    }
    *(_WORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[v10] = 0;
    return v3;
  }
  if ( v4 < 8 )
    v6 = v3;
  else
    v6 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v3->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(
           v3,
           v3,
           (signed int)((char *)_Ptr - (char *)v6) >> 1,
           _Count);
}

//----- (0072EBC0) --------------------------------------------------------
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__thiscall std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *this, const wchar_t *_Ptr, unsigned int _Count)
{
  char *v3; // edx@1
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v4; // esi@1
  unsigned int v5; // ecx@2
  unsigned int v6; // eax@3
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v7; // eax@7
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v8; // eax@11
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *result; // eax@13
  unsigned int v10; // eax@14
  unsigned int v11; // edi@17
  unsigned int v12; // ecx@19
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v13; // eax@22
  bool v14; // cf@28

  v3 = (char *)_Ptr;
  v4 = this;
  if ( !_Ptr
    || ((v5 = this->baseclass_0._Myres, v5 < 8) ? (v6 = (unsigned int)v4) : (v6 = *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0]),
        (unsigned int)_Ptr < v6
     || (v5 < 8 ? (v7 = v4) : (v7 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0]),
         (unsigned int)((char *)v7 + 2 * v4->baseclass_0._Mysize) <= (unsigned int)_Ptr)) )
  {
    v10 = v4->baseclass_0._Mysize;
    if ( -1 - v10 <= _Count )
      std::_Xlength_error("string too long");
    if ( _Count )
    {
      v11 = v10 + _Count;
      if ( v10 + _Count > 0x7FFFFFFE )
        std::_Xlength_error("string too long");
      v12 = v4->baseclass_0._Myres;
      if ( v12 >= v11 )
      {
        if ( !v11 )
        {
          v4->baseclass_0._Mysize = 0;
          if ( v12 < 8 )
          {
            result = v4;
            *(_WORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
          }
          else
          {
            **(_WORD **)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
            result = v4;
          }
          return result;
        }
        goto LABEL_21;
      }
      std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::_Copy(v4, v10 + _Count, v10);
      v3 = (char *)_Ptr;
      if ( v11 )
      {
LABEL_21:
        if ( v4->baseclass_0._Myres < 8 )
          v13 = v4;
        else
          v13 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
        memcpy((char *)v13 + 2 * v4->baseclass_0._Mysize, v3, 2 * _Count);
        v14 = v4->baseclass_0._Myres < 8;
        v4->baseclass_0._Mysize = v11;
        if ( !v14 )
        {
          *(_WORD *)(*(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] + 2 * v11) = 0;
          return v4;
        }
        *(_WORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[2 * v11] = 0;
        return v4;
      }
    }
    return v4;
  }
  if ( v5 < 8 )
    v8 = v4;
  else
    v8 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
  return std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(
           v4,
           v4,
           (signed int)((char *)_Ptr - (char *)v8) >> 1,
           _Count);
}

//----- (0072ECE0) --------------------------------------------------------
void __cdecl CallSpawnerJS(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *command)
{
  unsigned int v1; // edi@1
  unsigned int v2; // ecx@2
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v3; // eax@3
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v4; // eax@8
  wchar_t *v5; // [sp-10h] [bp-3Ch]@13
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > escapedCommand; // [sp+0h] [bp-2Ch]@1
  unsigned int v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+28h] [bp-4h]@1
  int v9; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v9 ^ __security_cookie;
  v1 = 0;
  memset((char *)&communicationBuffer, 0, 0xFA0u);
  escapedCommand.baseclass_0._Myres = 7;
  escapedCommand.baseclass_0._Mysize = 0;
  *(_WORD *)&escapedCommand.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v8 = 0;
  if ( command->baseclass_0._Mysize > 0 )
  {
    do
    {
      v2 = command->baseclass_0._Myres;
      if ( v2 < 8 )
        v3 = command;
      else
        v3 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&command->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( *(_WORD *)&v3->baseclass_0.___u0.baseclass_0.dummy[2 * v1] == 34 )
      {
        std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(
          &escapedCommand,
          &word_9D8938,
          1u);
      }
      else
      {
        if ( v2 < 8 )
          v4 = command;
        else
          v4 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&command->baseclass_0.___u0.baseclass_0.dummy[0];
        std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(
          &escapedCommand,
          1u,
          *(_WORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[2 * v1]);
      }
      ++v1;
    }
    while ( v1 < command->baseclass_0._Mysize );
  }
  if ( StringCbPrintfW(&communicationBuffer, 0xFA0u, L"SpawnApps:executeJavascript(\"%s\")") >= 0 )
    v5 = &communicationBuffer;
  else
    v5 = L"ERROR: CallSpawnerJS could not process command.";
  OutputDebugStringW(v5);
  if ( escapedCommand.baseclass_0._Myres >= 8 )
    operator delete(*(void **)&escapedCommand);
}
// 9D8988: using guessed type wchar_t aErrorCallspawn[48];
// A85C00: using guessed type int __security_cookie;

//----- (0072EDF0) --------------------------------------------------------
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *__cdecl CallSpawnerJSAndReturnValue(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *result, std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *command)
{
  unsigned int v2; // ebx@1
  unsigned int v3; // ecx@2
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v4; // eax@3
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > *v5; // eax@8
  unsigned int v6; // ebx@12
  DWORD v7; // eax@16
  wchar_t *v8; // eax@22
  wchar_t v9; // cx@23
  wchar_t *v11; // [sp-18h] [bp-48h]@15
  int v12; // [sp-14h] [bp-44h]@15
  void *v13; // [sp-14h] [bp-44h]@18
  std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > escapedCommand; // [sp+4h] [bp-2Ch]@1
  unsigned int v15; // [sp+20h] [bp-10h]@1
  int v16; // [sp+2Ch] [bp-4h]@1
  int v17; // [sp+30h] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v2 = 0;
  memset((char *)&communicationBuffer, 0, 0xFA0u);
  escapedCommand.baseclass_0._Myres = 7;
  escapedCommand.baseclass_0._Mysize = 0;
  *(_WORD *)&escapedCommand.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v16 = 0;
  if ( command->baseclass_0._Mysize )
  {
    do
    {
      v3 = command->baseclass_0._Myres;
      if ( v3 < 8 )
        v4 = command;
      else
        v4 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&command->baseclass_0.___u0.baseclass_0.dummy[0];
      if ( *(_WORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[2 * v2] == 34 )
      {
        std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(
          &escapedCommand,
          &word_9D893C,
          1u);
      }
      else
      {
        if ( v3 < 8 )
          v5 = command;
        else
          v5 = *(std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > **)&command->baseclass_0.___u0.baseclass_0.dummy[0];
        std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::append(
          &escapedCommand,
          1u,
          *(_WORD *)&v5->baseclass_0.___u0.baseclass_0.dummy[2 * v2]);
      }
      ++v2;
    }
    while ( v2 < command->baseclass_0._Mysize );
    v6 = 8;
  }
  else
  {
    v6 = 8;
  }
  if ( StringCbPrintfW(&communicationBuffer, 0xFA0u, L"SpawnApps:executeJavascript(\"%s;\")") < 0 )
  {
    OutputDebugStringW(L"ERROR: CallSpawnerJSAndReturnValue could not process command.");
    v12 = 0;
    result->baseclass_0._Myres = 7;
    result->baseclass_0._Mysize = 0;
    *(_WORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v11 = (wchar_t *)&unk_9D8984;
    goto LABEL_25;
  }
  memset((char *)&resultBuffer, 0, 0xFA0u);
  v7 = GetEnvironmentVariableW(&communicationBuffer, &resultBuffer, 0xFA0u);
  if ( (v7 & 0x80000000u) != 0 )
  {
    OutputDebugStringW(L"ERROR: CallSpawnerJSAndReturnValue could not process result.");
    result->baseclass_0._Myres = 7;
    result->baseclass_0._Mysize = 0;
    *(_WORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(result, &word_9D8AAC, 0);
    if ( escapedCommand.baseclass_0._Myres < v6 )
      return result;
    v13 = *(void **)&escapedCommand;
LABEL_27:
    operator delete(v13);
    return result;
  }
  if ( (signed int)v7 > 2000 )
  {
    OutputDebugStringW(L"ERROR: CallSpawnerJSAndReturnValue could not process result.");
    result->baseclass_0._Myres = 7;
    result->baseclass_0._Mysize = 0;
    *(_WORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(result, &word_9D8B2C, 0);
    if ( escapedCommand.baseclass_0._Myres < v6 )
      return result;
    v13 = *(void **)&escapedCommand;
    goto LABEL_27;
  }
  result->baseclass_0._Myres = 7;
  result->baseclass_0._Mysize = 0;
  v8 = &resultBuffer;
  *(_WORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  do
  {
    v9 = *v8;
    ++v8;
  }
  while ( v9 );
  v12 = v8 - (&resultBuffer + 1);
  v11 = &resultBuffer;
LABEL_25:
  std::basic_string<wchar_t_std::char_traits<wchar_t>_std::allocator<wchar_t>>::assign(result, v11, v12);
  if ( escapedCommand.baseclass_0._Myres >= v6 )
  {
    v13 = *(void **)&escapedCommand;
    goto LABEL_27;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0072F000) --------------------------------------------------------
void __thiscall CMD5Checksum::_CMD5Checksum(CMD5Checksum *this)
{
  this->vfptr = (CMD5ChecksumVtbl *)&CMD5Checksum::_vftable_;
}
// 9D8BB0: using guessed type int (__thiscall *CMD5Checksum___vftable_)(void *p, char);

//----- (0072F010) --------------------------------------------------------
void *__thiscall CMD5Checksum::_vector_deleting_destructor_(CMD5Checksum *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (CMD5ChecksumVtbl *)&CMD5Checksum::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9D8BB0: using guessed type int (__thiscall *CMD5Checksum___vftable_)(void *p, char);

//----- (0072F040) --------------------------------------------------------
void __thiscall CMD5Checksum::Transform(CMD5Checksum *this, char *Block)
{
  CMD5Checksum *v2; // eax@1
  char *v3; // ecx@1
  int v4; // edx@1
  signed int v5; // esi@1
  unsigned int v6; // esi@3
  unsigned int v7; // edx@3
  unsigned int v8; // ecx@3
  int v9; // eax@3
  int v10; // eax@3
  int v11; // ecx@3
  int v12; // ecx@3
  int v13; // edx@3
  int v14; // edx@3
  int v15; // esi@3
  int v16; // esi@3
  int v17; // eax@3
  int v18; // eax@3
  int v19; // ecx@3
  int v20; // ecx@3
  int v21; // edx@3
  int v22; // edx@3
  int v23; // esi@3
  int v24; // esi@3
  int v25; // eax@3
  int v26; // eax@3
  int v27; // ecx@3
  int v28; // ecx@3
  int v29; // edx@3
  int v30; // edx@3
  int v31; // esi@3
  int v32; // esi@3
  int v33; // eax@3
  int v34; // eax@3
  int v35; // ecx@3
  int v36; // ecx@3
  int v37; // edx@3
  int v38; // edx@3
  int v39; // esi@3
  int v40; // esi@3
  int v41; // eax@3
  int v42; // eax@3
  int v43; // ecx@3
  int v44; // ecx@3
  int v45; // edx@3
  int v46; // edx@3
  int v47; // esi@3
  int v48; // esi@3
  int v49; // eax@3
  int v50; // ecx@3
  int v51; // eax@3
  int v52; // ecx@3
  int v53; // edx@3
  int v54; // edx@3
  int v55; // esi@3
  int v56; // esi@3
  int v57; // eax@3
  int v58; // ecx@3
  int v59; // eax@3
  int v60; // ecx@3
  int v61; // edx@3
  int v62; // edx@3
  int v63; // esi@3
  int v64; // esi@3
  int v65; // eax@3
  int v66; // ST14_4@3
  int v67; // ecx@3
  int v68; // ecx@3
  int v69; // edx@3
  int v70; // edx@3
  int v71; // esi@3
  int v72; // esi@3
  int v73; // eax@3
  int v74; // eax@3
  int v75; // ecx@3
  int v76; // ecx@3
  int v77; // edx@3
  int v78; // edx@3
  int v79; // esi@3
  int v80; // esi@3
  int v81; // eax@3
  int v82; // eax@3
  int v83; // edi@3
  int v84; // edi@3
  int v85; // edx@3
  int v86; // edx@3
  int v87; // ecx@3
  int v88; // ecx@3
  int v89; // eax@3
  int v90; // eax@3
  int v91; // esi@3
  int v92; // esi@3
  int v93; // edi@3
  int v94; // edi@3
  int v95; // ecx@3
  int v96; // ecx@3
  int v97; // eax@3
  int v98; // eax@3
  int v99; // edx@3
  int v100; // edx@3
  int v101; // esi@3
  int v102; // esi@3
  int v103; // ecx@3
  int v104; // ecx@3
  int v105; // eax@3
  int v106; // eax@3
  int v107; // edx@3
  int v108; // edx@3
  int v109; // esi@3
  int v110; // esi@3
  int v111; // ecx@3
  int v112; // ecx@3
  int v113; // eax@3
  int v114; // eax@3
  int v115; // edx@3
  int v116; // edx@3
  int v117; // esi@3
  int v118; // esi@3
  int v119; // ecx@3
  int v120; // ecx@3
  int v121; // eax@3
  int v122; // eax@3
  int v123; // edx@3
  int v124; // edx@3
  int v125; // esi@3
  int v126; // esi@3
  int v127; // edi@3
  int v128; // edi@3
  int v129; // eax@3
  int v130; // eax@3
  int v131; // edx@3
  int v132; // edx@3
  CMD5Checksum *v133; // ecx@3
  int v134; // esi@3
  int v135; // esi@3
  int v136; // eax@3
  CMD5Checksum *v137; // [sp+Ch] [bp-50h]@1
  int X[16]; // [sp+18h] [bp-44h]@1
  unsigned int v139; // [sp+58h] [bp-4h]@1
  int v140; // [sp+5Ch] [bp+0h]@1

  v139 = (unsigned int)&v140 ^ __security_cookie;
  v2 = this;
  v137 = this;
  v3 = Block + 2;
  v4 = (int)X;
  v5 = 16;
  do
  {
    *(_DWORD *)v4 = (unsigned __int8)*(v3 - 2) | (((unsigned __int8)*(v3 - 1) | (((unsigned __int8)*v3 | ((unsigned __int8)v3[1] << 8)) << 8)) << 8);
    v4 += 4;
    v3 += 4;
    --v5;
  }
  while ( v5 );
  v6 = v2->m_lMD5[1];
  v7 = v2->m_lMD5[2];
  v8 = v2->m_lMD5[3];
  v9 = __ROL__(X[0] + (v6 & v7 | v8 & ~v6) + v2->m_lMD5[0] - 680876936, 7);
  v10 = v6 + v9;
  v11 = __ROL__(X[1] + (v10 & v6 | v7 & ~v10) + v8 - 389564586, 12);
  v12 = v10 + v11;
  v13 = __ROR__(X[2] + (v10 & v12 | v6 & ~v12) + v7 + 606105819, 15);
  v14 = v12 + v13;
  v15 = __ROR__(X[3] + (v14 & v12 | v10 & ~v14) + v6 - 1044525330, 10);
  v16 = v14 + v15;
  v17 = __ROL__(X[4] + (v16 & v14 | v12 & ~v16) + v10 - 176418897, 7);
  v18 = v16 + v17;
  v19 = __ROL__(X[5] + (v18 & v16 | v14 & ~v18) + v12 + 1200080426, 12);
  v20 = v18 + v19;
  v21 = __ROR__(X[6] + (v18 & v20 | v16 & ~v20) + v14 - 1473231341, 15);
  v22 = v20 + v21;
  v23 = __ROR__(X[7] + (v22 & v20 | v18 & ~v22) + v16 - 45705983, 10);
  v24 = v22 + v23;
  v25 = __ROL__(X[8] + (v24 & v22 | v20 & ~v24) + v18 + 1770035416, 7);
  v26 = v24 + v25;
  v27 = __ROL__(X[9] + (v26 & v24 | v22 & ~v26) + v20 - 1958414417, 12);
  v28 = v26 + v27;
  v29 = __ROR__(X[10] + (v26 & v28 | v24 & ~v28) + v22 - 42063, 15);
  v30 = v28 + v29;
  v31 = __ROR__(X[11] + (v30 & v28 | v26 & ~v30) + v24 - 1990404162, 10);
  v32 = v30 + v31;
  v33 = __ROL__(X[12] + (v32 & v30 | v28 & ~v32) + v26 + 1804603682, 7);
  v34 = v32 + v33;
  v35 = __ROL__(X[13] + (v34 & v32 | v30 & ~v34) + v28 - 40341101, 12);
  v36 = v34 + v35;
  v37 = __ROR__(X[14] + (v34 & v36 | v32 & ~v36) + v30 - 1502002290, 15);
  v38 = v36 + v37;
  v39 = __ROR__(X[15] + (v38 & v36 | v34 & ~v38) + v32 + 1236535329, 10);
  v40 = v38 + v39;
  v41 = __ROL__(X[1] + (v40 & v36 | v38 & ~v36) + v34 - 165796510, 5);
  v42 = v40 + v41;
  v43 = __ROL__(X[6] + (v42 & v38 | v40 & ~v38) + v36 - 1069501632, 9);
  v44 = v42 + v43;
  v45 = __ROL__(X[11] + (v40 & v44 | v42 & ~v40) + v38 + 643717713, 14);
  v46 = v44 + v45;
  v47 = __ROR__(X[0] + (v42 & v46 | v44 & ~v42) + v40 - 373897302, 12);
  v48 = v46 + v47;
  v49 = __ROL__(X[5] + (v48 & v44 | v46 & ~v44) + v42 - 701558691, 5);
  v50 = X[10] + ((v48 + v49) & v46 | v48 & ~v46) + v44 + 38016083;
  v51 = v48 + v49;
  v50 = __ROL__(v50, 9);
  v52 = v51 + v50;
  v53 = __ROL__(X[15] + (v48 & v52 | v51 & ~v48) + v46 - 660478335, 14);
  v54 = v52 + v53;
  v55 = __ROR__(X[4] + (v51 & v54 | v52 & ~v51) + v48 - 405537848, 12);
  v56 = v54 + v55;
  v57 = __ROL__(X[9] + (v56 & v52 | v54 & ~v52) + v51 + 568446438, 5);
  v58 = X[14] + ((v56 + v57) & v54 | v56 & ~v54) + v52 - 1019803690;
  v59 = v56 + v57;
  v58 = __ROL__(v58, 9);
  v60 = v59 + v58;
  v61 = __ROL__(X[3] + (v56 & v60 | v59 & ~v56) + v54 - 187363961, 14);
  v62 = v60 + v61;
  v63 = __ROR__(X[8] + (v59 & v62 | v60 & ~v59) + v56 + 1163531501, 12);
  v64 = v62 + v63;
  v65 = __ROL__(X[13] + (v64 & v60 | v62 & ~v60) + v59 - 1444681467, 5);
  v66 = v64 + v65;
  v67 = __ROL__(X[2] + ((v64 + v65) & v62 | v64 & ~v62) + v60 - 51403784, 9);
  v68 = v64 + v65 + v67;
  v69 = __ROL__(X[7] + (v64 & v68 | (v64 + v65) & ~v64) + v62 + 1735328473, 14);
  v70 = v68 + v69;
  v71 = __ROR__(X[12] + (v66 & v70 | v68 & ~v66) + v64 - 1926607734, 12);
  v72 = v70 + v71;
  v73 = __ROL__(X[5] + (v72 ^ v70 ^ v68) + v66 - 378558, 4);
  v74 = v72 + v73;
  v75 = __ROL__(X[8] + (v74 ^ v72 ^ v70) + v68 - 2022574463, 11);
  v76 = v74 + v75;
  v77 = __ROL__(X[11] + (v74 ^ v72 ^ v76) + v70 + 1839030562, 16);
  v78 = v76 + v77;
  v79 = __ROR__(X[14] + (v74 ^ v78 ^ v76) + v72 - 35309556, 9);
  v80 = v78 + v79;
  v81 = __ROL__(X[1] + (v80 ^ v78 ^ v76) + v74 - 1530992060, 4);
  v82 = v80 + v81;
  v83 = __ROL__(X[4] + (v82 ^ v80 ^ v78) + v76 + 1272893353, 11);
  v84 = v82 + v83;
  v85 = __ROL__(X[7] + (v82 ^ v80 ^ v84) + v78 - 155497632, 16);
  v86 = v84 + v85;
  v87 = __ROR__(X[10] + (v82 ^ v86 ^ v84) + v80 - 1094730640, 9);
  v88 = v86 + v87;
  v89 = __ROL__(X[13] + (v88 ^ v86 ^ v84) + v82 + 681279174, 4);
  v90 = v88 + v89;
  v91 = __ROL__(X[0] + (v90 ^ v88 ^ v86) + v84 - 358537222, 11);
  v92 = v90 + v91;
  v93 = __ROL__(X[3] + (v90 ^ v88 ^ v92) + v86 - 722521979, 16);
  v94 = v92 + v93;
  v95 = __ROR__(X[6] + (v90 ^ v94 ^ v92) + v88 + 76029189, 9);
  v96 = v94 + v95;
  v97 = __ROL__(X[9] + (v96 ^ v94 ^ v92) + v90 - 640364487, 4);
  v98 = v96 + v97;
  v99 = __ROL__(X[12] + (v98 ^ v96 ^ v94) + v92 - 421815835, 11);
  v100 = v98 + v99;
  v101 = __ROL__(X[15] + (v98 ^ v96 ^ v100) + v94 + 530742520, 16);
  v102 = v100 + v101;
  v103 = __ROR__(X[2] + (v98 ^ v102 ^ v100) + v96 - 995338651, 9);
  v104 = v102 + v103;
  v105 = __ROL__(X[0] + (v102 ^ (v104 | ~v100)) + v98 - 198630844, 6);
  v106 = v104 + v105;
  v107 = __ROL__(X[7] + (v104 ^ (v106 | ~v102)) + v100 + 1126891415, 10);
  v108 = v106 + v107;
  v109 = __ROL__(X[14] + (v106 ^ (v108 | ~v104)) + v102 - 1416354905, 15);
  v110 = v108 + v109;
  v111 = __ROR__(X[5] + (v108 ^ (v110 | ~v106)) + v104 - 57434055, 11);
  v112 = v110 + v111;
  v113 = __ROL__(X[12] + (v110 ^ (v112 | ~v108)) + v106 + 1700485571, 6);
  v114 = v112 + v113;
  v115 = __ROL__(X[3] + (v112 ^ (v114 | ~v110)) + v108 - 1894986606, 10);
  v116 = v114 + v115;
  v117 = __ROL__(X[10] + (v114 ^ (v116 | ~v112)) + v110 - 1051523, 15);
  v118 = v116 + v117;
  v119 = __ROR__(X[1] + (v116 ^ (v118 | ~v114)) + v112 - 2054922799, 11);
  v120 = v118 + v119;
  v121 = __ROL__(X[8] + (v118 ^ (v120 | ~v116)) + v114 + 1873313359, 6);
  v122 = v120 + v121;
  v123 = __ROL__(X[15] + (v120 ^ (v122 | ~v118)) + v116 - 30611744, 10);
  v124 = v122 + v123;
  v125 = __ROL__(X[6] + (v122 ^ (v124 | ~v120)) + v118 - 1560198380, 15);
  v126 = v124 + v125;
  v127 = __ROR__(X[13] + (v124 ^ (v126 | ~v122)) + v120 + 1309151649, 11);
  v128 = v126 + v127;
  v129 = __ROL__(X[4] + (v126 ^ (v128 | ~v124)) + v122 - 145523070, 6);
  v130 = v128 + v129;
  v131 = __ROL__(X[11] + (v128 ^ (v130 | ~v126)) + v124 - 1120210379, 10);
  v132 = v130 + v131;
  v133 = v137;
  v134 = __ROL__(X[2] + (v130 ^ (v132 | ~v128)) + v126 + 718787259, 15);
  v135 = v132 + v134;
  v137->m_lMD5[0] += v130;
  v136 = __ROR__(X[9] + (v132 ^ (v135 | ~v130)) + v128 - 343485551, 11);
  v133->m_lMD5[1] += v135 + v136;
  v133->m_lMD5[2] += v135;
  v133->m_lMD5[3] += v132;
}
// A85C00: using guessed type int __security_cookie;

//----- (0072F720) --------------------------------------------------------
void __thiscall CMD5Checksum::Update(CMD5Checksum *this, char *Input, unsigned int nInputLen)
{
  CMD5Checksum *v3; // esi@1
  unsigned int v4; // ecx@1
  unsigned int v5; // edi@1
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@1
  int v8; // eax@1
  int v9; // ebx@3
  int j; // ebx@4
  int i; // [sp+18h] [bp+Ch]@4

  v3 = this;
  v4 = this->m_nCount[0];
  v5 = nInputLen;
  v6 = v4 >> 3;
  v7 = v4 + 8 * nInputLen;
  v8 = v6 & 0x3F;
  v3->m_nCount[0] = v7;
  if ( v7 < 8 * nInputLen )
    ++v3->m_nCount[1];
  v3->m_nCount[1] += nInputLen >> 29;
  v9 = 64 - v8;
  if ( nInputLen < 64 - v8 )
  {
    i = 0;
  }
  else
  {
    memcpy(&v3->m_lpszBuffer[v8], Input, 64 - v8);
    CMD5Checksum::Transform(v3, v3->m_lpszBuffer);
    i = v9;
    for ( j = v9 + 63; j < v5; j += 64 )
    {
      CMD5Checksum::Transform(v3, &Input[j - 63]);
      i += 64;
    }
    v8 = 0;
  }
  memcpy(&v3->m_lpszBuffer[v8], &Input[i], v5 - i);
}

//----- (0072F7D0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall CMD5Checksum::Final(CMD5Checksum *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result)
{
  CMD5Checksum *v2; // esi@1
  unsigned int v3; // ecx@1
  int v4; // eax@1
  int v5; // ecx@3
  signed int v6; // eax@3
  unsigned int v7; // ecx@5
  int v8; // eax@5
  signed int v9; // esi@7
  unsigned __int8 v10; // al@8
  int v11; // eax@14
  char v12; // cl@15
  unsigned int v13; // edx@23
  unsigned int v14; // ecx@24
  unsigned int v15; // edx@24
  char *v17; // [sp-1Ch] [bp-98h]@11
  const char *v18; // [sp-18h] [bp-94h]@11
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > Str; // [sp+4h] [bp-78h]@14
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > strMD5; // [sp+20h] [bp-5Ch]@7
  char lptemp[32]; // [sp+3Ch] [bp-40h]@9
  char v22; // [sp+5Ch] [bp-20h]@6
  char v23; // [sp+5Dh] [bp-1Fh]@6
  char v24; // [sp+5Eh] [bp-1Eh]@6
  char v25[5]; // [sp+5Fh] [bp-1Dh]@6
  char Bits[8]; // [sp+64h] [bp-18h]@1
  unsigned int v27; // [sp+6Ch] [bp-10h]@1
  int v28; // [sp+78h] [bp-4h]@7
  int v29; // [sp+7Ch] [bp+0h]@1

  v27 = (unsigned int)&v29 ^ __security_cookie;
  v2 = this;
  *(_DWORD *)&Bits[4] = 0;
  v3 = 0;
  v4 = (int)v2->m_nCount;
  do
  {
    Bits[v3] = *(_BYTE *)v4;
    Bits[v3 + 1] = *(_BYTE *)(v4 + 1);
    Bits[v3 + 2] = *(_BYTE *)(v4 + 2);
    Bits[v3 + 3] = *(_BYTE *)(v4 + 3);
    v3 += 4;
    v4 += 4;
  }
  while ( v3 < 8 );
  v5 = (v2->m_nCount[0] >> 3) & 0x3F;
  v6 = 56;
  if ( (unsigned int)v5 >= 0x38 )
    v6 = 120;
  CMD5Checksum::Update(v2, PADDING, v6 - v5);
  CMD5Checksum::Update(v2, Bits, 8u);
  v7 = 0;
  v8 = (int)((char *)&v2->m_lMD5[0] + 2);
  do
  {
    *(&v22 + v7) = *(_BYTE *)(v8 - 2);
    *(&v23 + v7) = *(_BYTE *)(v8 - 1);
    *(&v24 + v7) = *(_BYTE *)v8;
    v25[v7] = *(_BYTE *)(v8 + 1);
    v7 += 4;
    v8 += 4;
  }
  while ( v7 < 0x10 );
  strMD5.baseclass_0._Myres = 15;
  strMD5.baseclass_0._Mysize = 0;
  strMD5.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v28 = 0;
  v9 = 0;
  do
  {
    v10 = *(&v22 + v9);
    if ( v10 )
    {
      if ( v10 > 0xFu )
      {
        v18 = "%x";
        v17 = lptemp;
      }
      else
      {
        v18 = "0%x";
        v17 = lptemp;
      }
      sprintf(v17, v18);
    }
    else
    {
      sprintf(lptemp, "00");
    }
    v11 = (int)lptemp;
    Str.baseclass_0._Myres = 15;
    Str.baseclass_0._Mysize = 0;
    Str.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    do
      v12 = *(_BYTE *)v11++;
    while ( v12 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&Str, lptemp, v11 - (_DWORD)&lptemp[1]);
    LOBYTE(v28) = 1;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::append(&strMD5, &Str, 0, 0xFFFFFFFFu);
    LOBYTE(v28) = 0;
    if ( Str.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&Str);
    ++v9;
  }
  while ( v9 < 16 );
  result->baseclass_0._Myres = 15;
  result->baseclass_0._Mysize = 0;
  result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  if ( result == &strMD5 )
  {
    if ( strMD5.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&strMD5);
  }
  else
  {
    if ( result->baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&result->baseclass_0.___u0.baseclass_0.dummy[0]);
    result->baseclass_0._Myres = 15;
    result->baseclass_0._Mysize = 0;
    result->baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( strMD5.baseclass_0._Myres >= 0x10 )
    {
      v14 = strMD5.baseclass_0._Mysize;
      v15 = strMD5.baseclass_0._Myres;
      *(_DWORD *)&result->baseclass_0.___u0.baseclass_0.dummy[0] = *(_DWORD *)&strMD5;
      result->baseclass_0._Mysize = v14;
      result->baseclass_0._Myres = v15;
    }
    else
    {
      memmove(
        result->baseclass_0.___u0.baseclass_0.dummy,
        strMD5.baseclass_0.___u0.baseclass_0.dummy,
        strMD5.baseclass_0._Mysize + 1);
      v13 = strMD5.baseclass_0._Myres;
      result->baseclass_0._Mysize = strMD5.baseclass_0._Mysize;
      result->baseclass_0._Myres = v13;
    }
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;
// 72F7D0: using guessed type char var_1D[5];

//----- (0072F9E0) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__cdecl CMD5Checksum::GetMD5(std::basic_string<char,std::char_traits<char>,std::allocator<char> > *result, char *pBuf, unsigned int nLength)
{
  CMD5Checksum MD5Checksum; // [sp+4h] [bp-6Ch]@1
  unsigned int v5; // [sp+60h] [bp-10h]@1
  int v6; // [sp+6Ch] [bp-4h]@1
  int v7; // [sp+70h] [bp+0h]@1

  v5 = (unsigned int)&v7 ^ __security_cookie;
  MD5Checksum.vfptr = (CMD5ChecksumVtbl *)&CMD5Checksum::_vftable_;
  memset(MD5Checksum.m_lpszBuffer, 0, 0x40u);
  MD5Checksum.m_nCount[1] = 0;
  MD5Checksum.m_nCount[0] = 0;
  MD5Checksum.m_lMD5[0] = 1732584193;
  MD5Checksum.m_lMD5[1] = -271733879;
  MD5Checksum.m_lMD5[2] = -1732584194;
  MD5Checksum.m_lMD5[3] = 271733878;
  v6 = 0;
  CMD5Checksum::Update(&MD5Checksum, pBuf, nLength);
  CMD5Checksum::Final(&MD5Checksum, result);
  return result;
}
// 9D8BB0: using guessed type int (__thiscall *CMD5Checksum___vftable_)(void *p, char);
// A85C00: using guessed type int __security_cookie;

//----- (0072FA90) --------------------------------------------------------
void __thiscall CDataReader::CDataReader(CDataReader *this)
{
  this->vfptr = (CDataReaderVtbl *)&CDataReader::_vftable_;
  *(_QWORD *)&this->m_sFileMD5.n8_name[24] = 0i64;
  *(_QWORD *)&this->m_sFileMD5.n8_name[16] = 0i64;
  *(_QWORD *)&this->m_sFileMD5.n8_name[8] = 0i64;
  *(_QWORD *)&this->m_sFileMD5.n8_name[0] = 0i64;
  this->m_pHead = 0;
  this->m_nBFSize = 0;
  this->m_nDataArraySize = 0;
  this->m_nFileCheckSum = 0;
}
// 9D8BC4: using guessed type int (__thiscall *CDataReader___vftable_)(void *p, char);

//----- (0072FAC0) --------------------------------------------------------
void __thiscall CDataReader::ClearBF(CDataReader *this)
{
  CDataReader *v1; // esi@1

  v1 = this;
  if ( this->m_nBFSize )
  {
    operator delete(this->m_pHead);
    v1->m_pHead = 0;
    v1->m_pData = 0;
  }
  v1->m_nFileCheckSum = 0;
  v1->m_nBFSize = 0;
}

//----- (0072FAF0) --------------------------------------------------------
void __cdecl CDataReader::Encription(char *pBF, unsigned int nSize)
{
  char v2; // al@1
  unsigned int v3; // ecx@1
  char Key_3; // [sp+Fh] [bp+Fh]@1

  v2 = nSize;
  v3 = nSize - 1;
  for ( Key_3 = nSize; (v3 & 0x80000000u) == 0; Key_3 = v2 )
  {
    pBF[v3] ^= v2;
    v2 = Key_3 ^ ((v3 & 0xF) + 85) ^ 11 * v3 ^ 0xAA;
    --v3;
  }
}

//----- (0072FB30) --------------------------------------------------------
void *__thiscall CDataReader::GetRecord(CDataReader *this, unsigned int RecordNo)
{
  CDataReader::HEAD *v2; // eax@1
  void *result; // eax@2

  v2 = this->m_pHead;
  if ( v2 && RecordNo < v2->nNumOfRecord )
    result = this->m_pDataArray[RecordNo];
  else
    result = 0;
  return result;
}

//----- (0072FB60) --------------------------------------------------------
void __thiscall CDataReader::_CDataReader(CDataReader *this)
{
  CDataReader *v1; // esi@1

  v1 = this;
  this->vfptr = (CDataReaderVtbl *)&CDataReader::_vftable_;
  if ( this->m_nBFSize )
  {
    operator delete(this->m_pHead);
    v1->m_pHead = 0;
    v1->m_pData = 0;
  }
  v1->m_nBFSize = 0;
  v1->m_nFileCheckSum = 0;
  if ( v1->m_nDataArraySize )
    operator delete__(v1->m_pDataArray);
  v1->m_nDataArraySize = 0;
}
// 9D8BC4: using guessed type int (__thiscall *CDataReader___vftable_)(void *p, char);

//----- (0072FBA0) --------------------------------------------------------
void *__thiscall CDataReader::_scalar_deleting_destructor_(CDataReader *this, unsigned int a2)
{
  CDataReader *v2; // esi@1

  v2 = this;
  this->vfptr = (CDataReaderVtbl *)&CDataReader::_vftable_;
  if ( this->m_nBFSize )
  {
    operator delete(this->m_pHead);
    v2->m_pHead = 0;
    v2->m_pData = 0;
  }
  v2->m_nBFSize = 0;
  v2->m_nFileCheckSum = 0;
  if ( v2->m_nDataArraySize )
    operator delete__(v2->m_pDataArray);
  v2->m_nDataArraySize = 0;
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D8BC4: using guessed type int (__thiscall *CDataReader___vftable_)(void *p, char);

//----- (0072FC00) --------------------------------------------------------
int __thiscall CDataReader::Read(CDataReader *this, const char *pFN)
{
  CDataReader *v2; // esi@1
  _iobuf *v3; // eax@1
  _iobuf *v4; // edi@1
  int v5; // ebx@1
  int v6; // eax@2
  int v7; // eax@2
  unsigned int v8; // ecx@2
  void *v9; // eax@5
  unsigned int v10; // ecx@5
  int result; // eax@10
  CDataReader::HEAD *v12; // eax@11
  CDataReader::HEAD *v13; // eax@14
  unsigned int v14; // edi@15
  unsigned int v15; // eax@17
  char *v16; // eax@21
  unsigned int v17; // ecx@21
  unsigned int v18; // eax@24
  CDataReader::HEAD *v19; // edx@25
  unsigned int v20; // ecx@25
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v21; // eax@27
  int v22; // esi@29
  Name8 v23; // [sp-30h] [bp-64h]@29
  char *v24; // [sp-1Ch] [bp-50h]@29
  char *v25; // [sp-18h] [bp-4Ch]@29
  unsigned int v26; // [sp-14h] [bp-48h]@5
  unsigned int v27; // [sp-10h] [bp-44h]@1
  unsigned int nSize; // [sp+0h] [bp-34h]@6
  char *FileName; // [sp+4h] [bp-30h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > sFileMD5; // [sp+8h] [bp-2Ch]@27
  unsigned int v31; // [sp+24h] [bp-10h]@1
  int v32; // [sp+30h] [bp-4h]@27
  int v33; // [sp+34h] [bp+0h]@1

  v31 = (unsigned int)&v33 ^ __security_cookie;
  v27 = (unsigned int)&v33 ^ __security_cookie;
  v2 = this;
  FileName = (char *)pFN;
  v3 = fopen(pFN, "rb");
  v4 = v3;
  v5 = 0;
  if ( !v3 )
    return 0;
  v6 = _fileno(v3);
  v7 = _filelength(v6);
  v8 = v2->m_nBFSize;
  v2->m_nFileSize = v7;
  if ( v8 < v7 )
  {
    if ( v8 )
    {
      operator delete(v2->m_pHead);
      v2->m_pHead = 0;
      v2->m_pData = 0;
    }
    v26 = v2->m_nFileSize;
    v2->m_nBFSize = 0;
    v2->m_nFileCheckSum = 0;
    v9 = operator new__(v26);
    v10 = v2->m_nFileSize;
    v2->m_pHead = (CDataReader::HEAD *)v9;
    v2->m_pData = 0;
    v2->m_nBFSize = v10;
  }
  nSize = fread(v2->m_pHead, v2->m_nFileSize, 1u, v4);
  fclose(v4);
  if ( nSize != 1 )
  {
    if ( v2->m_nBFSize )
    {
      operator delete(v2->m_pHead);
      v2->m_pHead = 0;
      v2->m_pData = 0;
    }
    v2->m_nBFSize = 0;
    v2->m_nFileCheckSum = 0;
    return 0;
  }
  v12 = v2->m_pHead;
  if ( v12 && v12->nDataMode )
    CDataReader::Encription((char *)&v12->nDataSize, v2->m_nFileSize - 36);
  v13 = v2->m_pHead;
  v2->m_pData = (char *)&v13[1] + 56 * v13->nNumOfField;
  if ( v13 )
    v14 = v13->nNumOfRecord;
  else
    v14 = 0;
  v15 = v2->m_nDataArraySize;
  if ( v15 < v14 )
  {
    if ( v15 )
      operator delete__(v2->m_pDataArray);
    v2->m_nDataArraySize = 0;
    v2->m_pDataArray = (char **)operator new__(4 * v14);
    v2->m_nDataArraySize = v14;
  }
  v16 = v2->m_pData;
  v17 = 0;
  if ( v14 > 0 )
  {
    do
    {
      v2->m_pDataArray[v17++] = v16 + 2;
      v16 += *(_WORD *)v16;
    }
    while ( v17 < v14 );
    v5 = 0;
  }
  v18 = 0;
  v2->m_nFileCheckSum = v5;
  if ( v2->m_nBFSize > v5 )
  {
    v19 = v2->m_pHead;
    v20 = 0;
    do
    {
      v20 += v18 * *((_BYTE *)&v19->nVersionKey + v18);
      ++v18;
      v2->m_nFileCheckSum = v20;
    }
    while ( v18 < v2->m_nBFSize );
  }
  CMD5Checksum::GetMD5(&sFileMD5, (char *)v2->m_pHead, v2->m_nBFSize);
  v21 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&sFileMD5;
  v32 = v5;
  if ( sFileMD5.baseclass_0._Myres < 0x10 )
    v21 = &sFileMD5;
  v22 = (int)&v2->m_sFileMD5;
  v26 = 32;
  v25 = (char *)v21;
  v24 = (char *)v22;
  *(_DWORD *)(v22 + 28) = v5;
  *(_DWORD *)(v22 + 24) = v5;
  *(_DWORD *)(v22 + 20) = v5;
  *(_DWORD *)(v22 + 16) = v5;
  *(_DWORD *)(v22 + 12) = v5;
  *(_DWORD *)(v22 + 8) = v5;
  *(_DWORD *)(v22 + 4) = v5;
  *(_DWORD *)v22 = v5;
  strncpy(v24, v25, v26);
  memcpy(&v23, (const void *)v22, sizeof(v23));
  if ( CShnDataFileCheckSum::InitDataFileCheckSum(&ShnDataFile, FileName, v23) )
  {
    if ( sFileMD5.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&sFileMD5);
    result = 1;
  }
  else
  {
    if ( sFileMD5.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&sFileMD5);
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0072FE60) --------------------------------------------------------
int __thiscall CDataReader::Read(CDataReader *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize)
{
  CDataReader *v4; // esi@1
  int result; // eax@2
  CDataReader::HEAD *v6; // eax@3

  v4 = this;
  if ( CDataReader::Read(this, pFN) && (v6 = v4->m_pHead, v6->nVersionKey == nVersionKey) )
    result = v6->nFieldSize - 2 == nStructSize;
  else
    result = 0;
  return result;
}

//----- (0072FEA0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v3; // esi@1
  int v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)(v4 + 4) )
  {
    *(_DWORD *)(v4 + 4) = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (0072FF00) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v6; // edi@6
  int v7; // edx@6
  int v8; // edx@9
  int v9; // edx@11
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v10; // eax@13
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v11; // edx@14
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v12; // esi@14
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v13; // esi@15
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v14; // edx@18
  int v15; // esi@20
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v16; // esi@22
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v17; // edx@26
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v18; // esi@26
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v19; // edi@26
  int v20; // edi@28
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v21; // edi@30
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v22; // esi@33
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v23; // edx@36
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v24; // esi@36
  int v25; // esi@38
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v26; // esi@40
  int v27; // edi@46
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v28; // edi@48
  int v29; // ecx@54
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *v30; // eax@54

  v5 = *((_DWORD *)&this->baseclass_0 + 2);
  if ( v5 >= 0x7FFFFFE )
  {
    if ( _Newnode->_Myval.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Newnode->_Myval.baseclass_0.first.baseclass_0._Myres = 15;
    _Newnode->_Myval.baseclass_0.first.baseclass_0._Mysize = 0;
    _Newnode->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v6 = _Newnode;
  *((_DWORD *)&this->baseclass_0 + 2) = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v7 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v7 )
  {
    *(_DWORD *)(v7 + 4) = _Newnode;
    **((_DWORD **)&this->baseclass_0 + 1) = _Newnode;
    *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 8) = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)v8 )
        *(_DWORD *)v8 = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)(v9 + 8) )
        *(_DWORD *)(v9 + 8) = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)(v15 + 4) )
          {
            *(_DWORD *)(v15 + 4) = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)(v20 + 4) )
        {
          *(_DWORD *)(v20 + 4) = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_52:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
      v11->_Color = 1;
      v13->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
    else
    {
      v22 = v12->_Left;
      if ( v22->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v23 = v11->_Left;
          v10->_Left = v23->_Right;
          v24 = v23->_Right;
          if ( !v24->_Isnil )
            v24->_Parent = v10;
          v23->_Parent = v10->_Parent;
          v25 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)(v25 + 4) )
          {
            *(_DWORD *)(v25 + 4) = v23;
          }
          else
          {
            v26 = v10->_Parent;
            if ( v10 == v26->_Right )
              v26->_Right = v23;
            else
              v26->_Left = v23;
          }
          v23->_Right = v10;
          v10->_Parent = v23;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v27 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)(v27 + 4) )
        {
          *(_DWORD *)(v27 + 4) = v18;
        }
        else
        {
          v28 = v17->_Parent;
          if ( v17 == v28->_Left )
            v28->_Left = v18;
          else
            v28->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_52;
      }
      v11->_Color = 1;
      v22->_Color = 1;
      v10->_Parent->_Parent->_Color = 0;
      v10 = v10->_Parent->_Parent;
    }
  }
  v29 = *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 4);
  v30 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  *(_BYTE *)(v29 + 44) = 1;
  return v30;
}

//----- (00730150) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty___std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_CAbstractProperty__>>_0>>::erase(...)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v3; // ebx@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v4; // edi@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v6; // esi@8
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *v7; // ecx@10
  int v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *v9; // eax@17
  int v10; // ecx@20
  int v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v14; // eax@35
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *i; // ecx@36
  int v16; // eax@38
  int v17; // eax@61
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st *v18; // eax@63
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba _Erasednode; // [sp+10h] [bp-8h]@3
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *thisa; // [sp+14h] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 45) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  _Erasednode = _Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *)&_Where);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 45) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 45) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = *((_DWORD *)&thisa->baseclass_0 + 1);
    if ( *(_DWORD *)(v8 + 4) == v3 )
    {
      *(_DWORD *)(v8 + 4) = v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( **((_DWORD **)&thisa->baseclass_0 + 1) == v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 45) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v4);
        v7 = thisa;
      }
      **((_DWORD **)&v7->baseclass_0 + 1) = v9;
    }
    v10 = *((_DWORD *)&v7->baseclass_0 + 1);
    if ( *(_DWORD *)(v10 + 8) == v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 45) )
        *(_DWORD *)(v10 + 8) = v6;
      else
        *(_DWORD *)(v10 + 8) = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v4);
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 45) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 45) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = *((_DWORD *)&thisa->baseclass_0 + 1);
  if ( *(_DWORD *)(v11 + 4) == v3 )
  {
    *(_DWORD *)(v11 + 4) = v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 44);
  *(_BYTE *)(*(_DWORD *)&v5 + 44) = *(_BYTE *)(*(_DWORD *)&v3 + 44);
  *(_BYTE *)(*(_DWORD *)&v3 + 44) = v13;
LABEL_35:
  v14 = _Erasednode;
  if ( *(_BYTE *)(*(_DWORD *)&_Erasednode + 44) == 1 )
  {
    for ( i = thisa;
          v4 != *(_DWORD *)(*((_DWORD *)&i->baseclass_0 + 1) + 4);
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 44) != 1 )
        break;
      v16 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v16 + 44) )
        {
          *(_BYTE *)(v16 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 0;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          i = thisa;
        }
        if ( *(_BYTE *)(v16 + 45) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 || *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v16 + 44) = 1;
            *(_BYTE *)(v16 + 44) = 0;
            std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v16);
            v16 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            i = thisa;
          }
          *(_BYTE *)(v16 + 44) = *(_BYTE *)(*(_DWORD *)&v6 + 44);
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) = 1;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v16 + 44) )
        {
          *(_BYTE *)(v16 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 0;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          v16 = **(_DWORD **)&v6;
          i = thisa;
        }
        if ( *(_BYTE *)(v16 + 45) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) != 1 || *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v16 + 44) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v16 + 8) + 44) = 1;
            *(_BYTE *)(v16 + 44) = 0;
            std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Lrotate(
              (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string *)v16);
            v16 = **(_DWORD **)&v6;
            i = thisa;
          }
          *(_BYTE *)(v16 + 44) = *(_BYTE *)(*(_DWORD *)&v6 + 44);
          *(_BYTE *)(*(_DWORD *)&v6 + 44) = 1;
          *(_BYTE *)(*(_DWORD *)v16 + 44) = 1;
          std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiTexture>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiTexture>>>_0>>::_Rrotate(
            (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<cha *)i,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string **)&v6);
          break;
        }
      }
      *(_BYTE *)(v16 + 44) = 0;
LABEL_53:
      v4 = v6;
    }
    v14 = _Erasednode;
    *(_BYTE *)(*(_DWORD *)&v4 + 44) = 1;
  }
  if ( *(_DWORD *)(*(_DWORD *)&v14 + 32) >= 0x10u )
    operator delete(*(void **)(*(_DWORD *)&v14 + 12));
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 32) = 15;
  *(_DWORD *)(*(_DWORD *)&_Erasednode + 28) = 0;
  *(_BYTE *)(*(_DWORD *)&_Erasednode + 12) = 0;
  operator delete(*(void **)&_Erasednode);
  v17 = *((_DWORD *)&thisa->baseclass_0 + 2);
  if ( v17 )
    *((_DWORD *)&thisa->baseclass_0 + 2) = v17 - 1;
  v18 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v18;
}

//----- (007303D0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *v2; // esi@1
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *v3; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *i; // edi@1

  v2 = _Rootnode;
  v3 = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Erase(
      v3,
      i->_Right);
    i = i->_Left;
    if ( v2->_Myval.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v2->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->_Myval.baseclass_0.first.baseclass_0._Myres = 15;
    v2->_Myval.baseclass_0.first.baseclass_0._Mysize = 0;
    v2->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(v2);
  }
}

//----- (00730430) --------------------------------------------------------
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>(...)
{
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *v2; // esi@1
  void *v3; // edi@1
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned short> *v4; // ebx@3
  int v6; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v8; // [sp+Ch] [bp-1Ch]@2
  char *v9; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v11; // [sp+18h] [bp-10h]@1
  int v12; // [sp+24h] [bp-4h]@2

  v11 = &v6;
  v2 = this;
  v3 = operator new(0x30u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v3 + 22) = 0;
  v12 = 0;
  v9 = (char *)v3 + 12;
  v8 = (char *)v3 + 12;
  LOBYTE(v12) = 1;
  if ( v3 != (void *)-12 )
  {
    v4 = _Val;
    *((_DWORD *)v3 + 8) = 15;
    *((_DWORD *)v3 + 7) = 0;
    *((_BYTE *)v3 + 12) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 12),
      &v4->baseclass_0.first,
      0,
      0xFFFFFFFFu);
    *((_WORD *)v3 + 20) = v4->baseclass_0.second;
  }
  return (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00730510) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(...)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *v4; // ebx@1
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *v5; // esi@1
  int v6; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st *v8; // eax@2
  const char *v9; // eax@4
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *v10; // eax@17
  int v11; // ecx@23
  char v12; // [sp+Ch] [bp-8h]@23

  v4 = _Node;
  v5 = this;
  v6 = *((_DWORD *)&this->baseclass_0 + 1);
  v7 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&_Node->_Myval;
  if ( !*((_DWORD *)&this->baseclass_0 + 2) )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)this,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v6,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)_Node);
    return result;
  }
  if ( _Where == *(_DWORD *)v6 )
  {
    v9 = (const char *)(*(_DWORD *)&_Where + 12);
    if ( *(_DWORD *)(*(_DWORD *)&_Where + 32) >= 0x10u )
      v9 = *(const char **)v9;
    if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &_Node->_Myval.baseclass_0.first,
           0,
           _Node->_Myval.baseclass_0.first.baseclass_0._Mysize,
           v9,
           *(_DWORD *)(*(_DWORD *)&_Where + 28)) < 0 )
    {
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v5,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&_Where,
        (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4);
      return result;
    }
    goto LABEL_23;
  }
  if ( _Where == v6 )
  {
    if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
           (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)this,
           (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)(v6 + 8) + 12),
           &_Node->_Myval.baseclass_0.first) )
    {
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v5,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)(*((_DWORD *)&v5->baseclass_0 + 1) + 8),
        (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4);
      return result;
    }
    goto LABEL_23;
  }
  if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
         (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)this,
         &_Node->_Myval.baseclass_0.first,
         (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&_Where + 12)) )
  {
    _Node = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *)_Where;
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_bool_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_bool>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<st *)&_Node);
    if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
           (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
           &_Node->_Myval.baseclass_0.first,
           v7) )
    {
      if ( _Node->_Right->_Isnil )
      {
        std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
          (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v5,
          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)result,
          0,
          (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)_Node,
          (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4);
        v8 = result;
      }
      else
      {
        std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
          (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v5,
          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)result,
          1,
          *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&_Where,
          (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4);
        v8 = result;
      }
      return v8;
    }
  }
  if ( !std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
          (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&_Where + 12),
          v7) )
    goto LABEL_23;
  _Node = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *)_Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_NiPointer<NiAmbientLight>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_NiPointer<NiAmbientLight>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,NiPointer<INsFile_NodeCreater>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::a *)&_Node);
  v10 = _Node;
  if ( _Node == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ **)&v5->baseclass_0
                + 1) )
    goto LABEL_20;
  if ( !std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
          (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
          v7,
          &_Node->_Myval.baseclass_0.first) )
  {
LABEL_23:
    v11 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Linsert(
                        (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v5,
                        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pai *)&v12,
                        (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4,
                        0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    return v8;
  }
  v10 = _Node;
LABEL_20:
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 45) )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v5,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)result,
      0,
      *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&_Where,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4);
    v8 = result;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
      (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)v5,
      (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::bas *)result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v10,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *)v4);
    v8 = result;
  }
  return v8;
}

//----- (007306D0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_trai *v4; // esi@1
  int v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v6; // ecx@1
  int v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = _First;
  if ( _First != *(_DWORD *)v5 || _Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 45) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 45) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 45);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 45);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_CAbstractProperty___std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_CAbstractProperty__>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>_0>>::_Erase(
      v4,
      *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ **)(v5 + 4));
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 4) = *((_DWORD *)&v4->baseclass_0 + 1);
    **((_DWORD **)&v4->baseclass_0 + 1) = *((_DWORD *)&v4->baseclass_0 + 1);
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 8) = *((_DWORD *)&v4->baseclass_0 + 1);
    v7 = *((_DWORD *)&v4->baseclass_0 + 1);
    v8 = result;
    *((_DWORD *)&v4->baseclass_0 + 2) = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)v7;
  }
  return v8;
}

//----- (00730790) --------------------------------------------------------
unsigned __int16 *__thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>>::operator__(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::alloca *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval)
{
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::alloca *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: *v3; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba v4; // ebx@1
  const char *v5; // eax@2
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_ *v6; // eax@5
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st v7; // esi@5
  unsigned __int16 *v8; // eax@7
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_st result; // [sp+0h] [bp-34h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+4h] [bp-30h]@5
  __int16 v11; // [sp+20h] [bp-14h]@5
  unsigned int v12; // [sp+24h] [bp-10h]@1
  int v13; // [sp+30h] [bp-4h]@5
  int v14; // [sp+34h] [bp+0h]@1

  v12 = (unsigned int)&v14 ^ __security_cookie;
  v2 = this;
  v3 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_int>>_1>>::_Lbound(
         (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char *)this,
         _Keyval);
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::ba)v3;
  if ( v3 == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,CAbstractProperty *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std:: **)&v2->baseclass_0.baseclass_0
             + 1) )
    goto LABEL_11;
  v5 = (const char *)&v3->_Myval;
  if ( *(_DWORD *)(*(_DWORD *)&v4 + 32) >= 0x10u )
    v5 = *(const char **)v5;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         _Keyval,
         0,
         _Keyval->baseclass_0._Mysize,
         v5,
         *(_DWORD *)(*(_DWORD *)&v4 + 28)) >= 0 )
  {
    v8 = (unsigned __int16 *)(*(_DWORD *)&v4 + 40);
  }
  else
  {
LABEL_11:
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, _Keyval, 0, 0xFFFFFFFFu);
    v11 = 0;
    v13 = 0;
    v6 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>(
           &v2->baseclass_0.baseclass_0,
           (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned short> *)&thisa);
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>_0>>::_Insert(
      &v2->baseclass_0,
      &result,
      v4,
      v6);
    v7 = result;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    v8 = (unsigned __int16 *)(*(_DWORD *)&v7 + 40);
  }
  return v8;
}
// A85C00: using guessed type int __security_cookie;

//----- (00730870) --------------------------------------------------------
int __thiscall CSingleDataMap::InitSingleDataArray(CSingleDataMap *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize)
{
  unsigned int i; // edi@6
  void *v6; // eax@7
  void *v7; // esi@7
  int v8; // edx@8
  char v9; // cl@9
  unsigned __int16 v10; // si@10
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+0h] [bp-74h]@8
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::alloca *v12; // [sp+1Ch] [bp-58h]@1
  unsigned int nDataCount; // [sp+20h] [bp-54h]@4
  CDataReader SingleData; // [sp+24h] [bp-50h]@1
  unsigned int v15; // [sp+64h] [bp-10h]@1
  int v16; // [sp+70h] [bp-4h]@1
  int v17; // [sp+74h] [bp+0h]@1

  v15 = (unsigned int)&v17 ^ __security_cookie;
  v12 = (std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned short,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::alloca *)this;
  CDataReader::CDataReader(&SingleData);
  v16 = 0;
  if ( !CDataReader::Read(&SingleData, pFN, nVersionKey, nStructSize) )
  {
LABEL_2:
    v16 = -1;
    CDataReader::_CDataReader(&SingleData);
    return 0;
  }
  if ( SingleData.m_pHead )
    nDataCount = SingleData.m_pHead->nNumOfRecord;
  else
    nDataCount = 0;
  for ( i = 0; i < nDataCount; thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0 )
  {
    v6 = CDataReader::GetRecord(&SingleData, i);
    v7 = v6;
    if ( !v6 )
      goto LABEL_2;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v8 = (int)((char *)v6 + 1);
    do
    {
      v9 = *(_BYTE *)v6;
      v6 = (char *)v6 + 1;
    }
    while ( v9 );
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      &thisa,
      (const char *)v7,
      (unsigned int)((char *)v6 - v8));
    v10 = *((_WORD *)v7 + 16);
    LOBYTE(v16) = 1;
    *std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>>::operator__(
       v12,
       &thisa) = v10;
    LOBYTE(v16) = 0;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    ++i;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
  }
  v16 = -1;
  CDataReader::_CDataReader(&SingleData);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (007309A0) --------------------------------------------------------
unsigned __int16 __thiscall CSingleDataMap::GetValue(CSingleDataMap *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > sIndex)
{
  unsigned __int16 v2; // si@1

  v2 = *std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_short_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_short>>>::operator__(
          &this->m_SingleData,
          &sIndex);
  if ( sIndex.baseclass_0._Myres >= 0x10 )
    operator delete(*(void **)&sIndex);
  return v2;
}

//----- (00730A00) --------------------------------------------------------
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_unsigned_int_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_unsigned_int>>>(CSingleDataMap *this)
{
  CSingleDataMap *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+4h] [bp-10h]@3
  char *_What; // [sp+10h] [bp-4h]@3

  v1 = this;
  *((_DWORD *)&this->m_SingleData.baseclass_0.baseclass_0 + 2) = 0;
  v2 = operator new(0x30u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_SingleData.baseclass_0.baseclass_0 + 1) = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*((_DWORD *)&v1->m_SingleData.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_SingleData.baseclass_0.baseclass_0
                                                                                + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_SingleData.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_SingleData.baseclass_0.baseclass_0
                                                                                + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_SingleData.baseclass_0.baseclass_0 + 1) + 44) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_SingleData.baseclass_0.baseclass_0 + 1) + 45) = 1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00730A70) --------------------------------------------------------
std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *__cdecl std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Min(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Pnode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v2; // ecx@1

  result = _Pnode;
  v2 = _Pnode->_Left;
  if ( !_Pnode->_Left->_Isnil )
  {
    do
    {
      result = v2;
      v2 = v2->_Left;
    }
    while ( !v2->_Isnil );
  }
  return result;
}

//----- (00730A90) --------------------------------------------------------
int std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__(...)
{
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *result; // eax@1
  int v2; // ecx@1
  int i; // edx@3
  int v4; // ecx@4
  int v5; // edx@5

  result = this;
  v2 = *(_DWORD *)&this->___u0.baseclass_0.baseclass_0.dummy[0];
  if ( *(_BYTE *)(v2 + 69) )
  {
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)(v2 + 8);
    return result;
  }
  i = *(_DWORD *)v2;
  if ( !*(_BYTE *)(*(_DWORD *)v2 + 69) )
  {
    v4 = *(_DWORD *)(i + 8);
    if ( !*(_BYTE *)(v4 + 69) )
    {
      do
      {
        v5 = v4;
        v4 = *(_DWORD *)(v4 + 8);
      }
      while ( !*(_BYTE *)(v4 + 69) );
      *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = v5;
      return result;
    }
LABEL_11:
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
    return result;
  }
  for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 4) )
  {
    if ( *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] != *(_DWORD *)i )
      break;
    *(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] = i;
  }
  if ( !*(_BYTE *)(*(_DWORD *)&result->___u0.baseclass_0.baseclass_0.dummy[0] + 69) )
    goto LABEL_11;
  return result;
}

//----- (00730AF0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v2; // eax@1
  int v3; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v4; // ecx@5

  v2 = _Wherenode->_Right;
  _Wherenode->_Right = v2->_Left;
  if ( !v2->_Left->_Isnil )
    v2->_Left->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v3 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v3 + 4) )
  {
    *(_DWORD *)(v3 + 4) = v2;
    v2->_Left = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v4 = _Wherenode->_Parent;
    if ( _Wherenode == v4->_Left )
    {
      v4->_Left = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v4->_Right = v2;
      v2->_Left = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00730B50) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Wherenode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v2; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v3; // esi@1
  int v4; // ecx@3
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v5; // ecx@5

  v2 = _Wherenode->_Left;
  _Wherenode->_Left = _Wherenode->_Left->_Right;
  v3 = v2->_Right;
  if ( !v3->_Isnil )
    v3->_Parent = _Wherenode;
  v2->_Parent = _Wherenode->_Parent;
  v4 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v4 + 4) )
  {
    *(_DWORD *)(v4 + 4) = v2;
    v2->_Right = _Wherenode;
    _Wherenode->_Parent = v2;
  }
  else
  {
    v5 = _Wherenode->_Parent;
    if ( _Wherenode == v5->_Right )
    {
      v5->_Right = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
    else
    {
      v5->_Left = v2;
      v2->_Right = _Wherenode;
      _Wherenode->_Parent = v2;
    }
  }
}

//----- (00730BB0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Lbound(...)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *result; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v3; // edi@1
  const char *v4; // edx@2
  unsigned int v5; // ebx@2
  const char *v6; // eax@4
  unsigned int v7; // esi@6
  unsigned int v8; // ecx@6
  int v9; // eax@10
  bool v10; // sf@10
  unsigned int v11; // [sp+4h] [bp-8h]@2
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Wherenode; // [sp+8h] [bp-4h]@1

  result = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)*((_DWORD *)&this->baseclass_0 + 1);
  v3 = result->_Parent;
  _Wherenode = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)*((_DWORD *)&this->baseclass_0 + 1);
  if ( !v3->_Isnil )
  {
    v4 = (const char *)_Keyval;
    v5 = _Keyval->baseclass_0._Mysize;
    v11 = _Keyval->baseclass_0._Myres;
    while ( 1 )
    {
      v6 = (const char *)&v3->_Myval;
      if ( v11 >= 0x10 )
        v4 = *(const char **)v4;
      v7 = v3->_Myval.baseclass_0.first.baseclass_0._Mysize;
      v8 = v7;
      if ( v7 >= v5 )
        v8 = v5;
      if ( v3->_Myval.baseclass_0.first.baseclass_0._Myres >= 0x10 )
        v6 = *(const char **)v6;
      v9 = std::char_traits<char>::compare(v6, v4, v8);
      v10 = v9 < 0;
      if ( !v9 )
      {
        if ( v7 < v5 )
          goto LABEL_14;
        LOBYTE(v9) = v7 != v5;
        v10 = v9 < 0;
      }
      if ( v10 )
      {
LABEL_14:
        v3 = v3->_Right;
        goto LABEL_16;
      }
      _Wherenode = v3;
      v3 = v3->_Left;
LABEL_16:
      if ( v3->_Isnil )
        return _Wherenode;
      v4 = (const char *)_Keyval;
    }
  }
  return result;
}

//----- (00730C40) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(...)
{
  unsigned int v5; // eax@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v6; // edi@8
  int v7; // edx@8
  int v8; // edx@11
  int v9; // edx@13
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v10; // eax@15
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v11; // edx@16
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v12; // esi@16
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v13; // esi@17
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v14; // edx@19
  int v15; // esi@21
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v16; // esi@23
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v17; // edx@27
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v18; // esi@27
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v19; // edi@27
  int v20; // edi@29
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v21; // edi@31
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v22; // edx@37
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v23; // esi@37
  int v24; // esi@39
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v25; // esi@41
  int v26; // edi@47
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v27; // edi@49
  int v28; // ecx@55
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo *v29; // eax@55

  v5 = *((_DWORD *)&this->baseclass_0 + 2);
  if ( v5 >= 0x4924923 )
  {
    if ( _Newnode->_Myval.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Newnode->_Myval.baseclass_0.second.baseclass_0._Myres = 15;
    _Newnode->_Myval.baseclass_0.second.baseclass_0._Mysize = 0;
    _Newnode->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( _Newnode->_Myval.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Newnode->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
    _Newnode->_Myval.baseclass_0.first.baseclass_0._Myres = 15;
    _Newnode->_Myval.baseclass_0.first.baseclass_0._Mysize = 0;
    _Newnode->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(_Newnode);
    std::_Xlength_error("map/set<T> too long");
  }
  v6 = _Newnode;
  *((_DWORD *)&this->baseclass_0 + 2) = v5 + 1;
  _Newnode->_Parent = _Wherenode;
  v7 = *((_DWORD *)&this->baseclass_0 + 1);
  if ( _Wherenode == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v7 )
  {
    *(_DWORD *)(v7 + 4) = _Newnode;
    **((_DWORD **)&this->baseclass_0 + 1) = _Newnode;
    *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 8) = _Newnode;
  }
  else
  {
    if ( _Addleft )
    {
      _Wherenode->_Left = _Newnode;
      v8 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)v8 )
        *(_DWORD *)v8 = _Newnode;
    }
    else
    {
      _Wherenode->_Right = _Newnode;
      v9 = *((_DWORD *)&this->baseclass_0 + 1);
      if ( _Wherenode == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v9 + 8) )
        *(_DWORD *)(v9 + 8) = _Newnode;
    }
  }
  v10 = _Newnode;
  while ( !v10->_Parent->_Color )
  {
    v11 = v10->_Parent;
    v12 = v11->_Parent;
    if ( v11 == v12->_Left )
    {
      v13 = v12->_Right;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Right )
        {
          v10 = v10->_Parent;
          v14 = v11->_Right;
          v10->_Right = v14->_Left;
          if ( !v14->_Left->_Isnil )
            v14->_Left->_Parent = v10;
          v14->_Parent = v10->_Parent;
          v15 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v15 + 4) )
          {
            *(_DWORD *)(v15 + 4) = v14;
          }
          else
          {
            v16 = v10->_Parent;
            if ( v10 == v16->_Left )
              v16->_Left = v14;
            else
              v16->_Right = v14;
          }
          v14->_Left = v10;
          v10->_Parent = v14;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Left;
        v17->_Left = v17->_Left->_Right;
        v19 = v18->_Right;
        if ( !v19->_Isnil )
          v19->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v20 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v20 + 4) )
        {
          *(_DWORD *)(v20 + 4) = v18;
          v18->_Right = v17;
        }
        else
        {
          v21 = v17->_Parent;
          if ( v17 == v21->_Right )
          {
            v21->_Right = v18;
            v18->_Right = v17;
          }
          else
          {
            v21->_Left = v18;
            v18->_Right = v17;
          }
        }
LABEL_53:
        v6 = _Newnode;
        v17->_Parent = v18;
        continue;
      }
    }
    else
    {
      v13 = v12->_Left;
      if ( v13->_Color )
      {
        if ( v10 == v11->_Left )
        {
          v10 = v10->_Parent;
          v22 = v11->_Left;
          v10->_Left = v22->_Right;
          v23 = v22->_Right;
          if ( !v23->_Isnil )
            v23->_Parent = v10;
          v22->_Parent = v10->_Parent;
          v24 = *((_DWORD *)&this->baseclass_0 + 1);
          if ( v10 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v24 + 4) )
          {
            *(_DWORD *)(v24 + 4) = v22;
          }
          else
          {
            v25 = v10->_Parent;
            if ( v10 == v25->_Right )
              v25->_Right = v22;
            else
              v25->_Left = v22;
          }
          v22->_Right = v10;
          v10->_Parent = v22;
        }
        v10->_Parent->_Color = 1;
        v10->_Parent->_Parent->_Color = 0;
        v17 = v10->_Parent->_Parent;
        v18 = v17->_Right;
        v17->_Right = v18->_Left;
        if ( !v18->_Left->_Isnil )
          v18->_Left->_Parent = v17;
        v18->_Parent = v17->_Parent;
        v26 = *((_DWORD *)&this->baseclass_0 + 1);
        if ( v17 == *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v26 + 4) )
        {
          *(_DWORD *)(v26 + 4) = v18;
        }
        else
        {
          v27 = v17->_Parent;
          if ( v17 == v27->_Left )
            v27->_Left = v18;
          else
            v27->_Right = v18;
        }
        v18->_Left = v17;
        goto LABEL_53;
      }
    }
    v11->_Color = 1;
    v13->_Color = 1;
    v10->_Parent->_Parent->_Color = 0;
    v10 = v10->_Parent->_Parent;
  }
  v28 = *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 4);
  v29 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  *(_BYTE *)(v28 + 68) = 1;
  return v29;
}

//----- (00730EA0) --------------------------------------------------------
void __thiscall std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *this, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Rootnode)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *i; // edi@1
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *thisa; // [sp+Ch] [bp-4h]@1

  v2 = _Rootnode;
  thisa = this;
  for ( i = _Rootnode; !i->_Isnil; v2 = i )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(
      thisa,
      i->_Right);
    i = i->_Left;
    if ( v2->_Myval.baseclass_0.second.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v2->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->_Myval.baseclass_0.second.baseclass_0._Myres = 15;
    v2->_Myval.baseclass_0.second.baseclass_0._Mysize = 0;
    v2->_Myval.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( v2->_Myval.baseclass_0.first.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&v2->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0]);
    v2->_Myval.baseclass_0.first.baseclass_0._Myres = 15;
    v2->_Myval.baseclass_0.first.baseclass_0._Mysize = 0;
    v2->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    operator delete(v2);
  }
}

//----- (00730F20) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...)
{
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v3; // edi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v4; // ebx@4
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v5; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v6; // esi@8
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *v7; // ecx@10
  int v8; // eax@10
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v9; // eax@17
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v10; // eax@23
  int v11; // ecx@29
  int v12; // ecx@31
  char v13; // cl@34
  int v14; // eax@38
  unsigned int v15; // eax@63
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo *v16; // eax@65
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *thisa; // [sp+Ch] [bp-4h]@1

  v3 = _Where;
  thisa = this;
  if ( *(_BYTE *)(*(_DWORD *)&_Where + 69) )
    std::_Xout_of_range("invalid map/set<T> iterator");
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__(&_Where.baseclass_0);
  if ( *(_BYTE *)(**(_DWORD **)&v3 + 69) )
  {
    v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&v3 + 8);
LABEL_8:
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&v3 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 69) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    v7 = thisa;
    v8 = *((_DWORD *)&thisa->baseclass_0 + 1);
    if ( *(_DWORD *)(v8 + 4) == v3 )
    {
      *(_DWORD *)(v8 + 4) = v4;
    }
    else
    {
      if ( **(_DWORD **)&v6 == v3 )
        **(_DWORD **)&v6 = v4;
      else
        *(_DWORD *)(*(_DWORD *)&v6 + 8) = v4;
    }
    if ( **((_DWORD **)&thisa->baseclass_0 + 1) == v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 69) )
      {
        v9 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v6;
      }
      else
      {
        v9 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Min(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v4);
        v7 = thisa;
      }
      **((_DWORD **)&v7->baseclass_0 + 1) = v9;
    }
    if ( *(_DWORD *)(*((_DWORD *)&v7->baseclass_0 + 1) + 8) == v3 )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 69) )
      {
        *(_DWORD *)(*((_DWORD *)&v7->baseclass_0 + 1) + 8) = v6;
      }
      else
      {
        v10 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Max(*(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v4);
        v7 = thisa;
        *(_DWORD *)(*((_DWORD *)&thisa->baseclass_0 + 1) + 8) = v10;
      }
    }
    goto LABEL_35;
  }
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 69) )
  {
    v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std)**(_DWORD **)&v3;
    goto LABEL_8;
  }
  v5 = _Where;
  v4 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&_Where + 8);
  if ( _Where == v3 )
    goto LABEL_8;
  *(_DWORD *)(**(_DWORD **)&v3 + 4) = _Where;
  **(_DWORD **)&v5 = **(_DWORD **)&v3;
  if ( v5 == *(_DWORD *)(*(_DWORD *)&v3 + 8) )
  {
    v6 = v5;
  }
  else
  {
    v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&v5 + 4);
    if ( !*(_BYTE *)(*(_DWORD *)&v4 + 69) )
      *(_DWORD *)(*(_DWORD *)&v4 + 4) = v6;
    **(_DWORD **)&v6 = v4;
    *(_DWORD *)(*(_DWORD *)&v5 + 8) = *(_DWORD *)(*(_DWORD *)&v3 + 8);
    *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&v3 + 8) + 4) = v5;
  }
  v11 = *((_DWORD *)&thisa->baseclass_0 + 1);
  if ( *(_DWORD *)(v11 + 4) == v3 )
  {
    *(_DWORD *)(v11 + 4) = v5;
  }
  else
  {
    v12 = *(_DWORD *)(*(_DWORD *)&v3 + 4);
    if ( *(_DWORD *)v12 == v3 )
      *(_DWORD *)v12 = v5;
    else
      *(_DWORD *)(v12 + 8) = v5;
  }
  *(_DWORD *)(*(_DWORD *)&v5 + 4) = *(_DWORD *)(*(_DWORD *)&v3 + 4);
  v13 = *(_BYTE *)(*(_DWORD *)&v5 + 68);
  *(_BYTE *)(*(_DWORD *)&v5 + 68) = *(_BYTE *)(*(_DWORD *)&v3 + 68);
  *(_BYTE *)(*(_DWORD *)&v3 + 68) = v13;
  v7 = thisa;
LABEL_35:
  if ( *(_BYTE *)(*(_DWORD *)&v3 + 68) == 1 )
  {
    for ( ;
          v4 != *(_DWORD *)(*((_DWORD *)&v7->baseclass_0 + 1) + 4);
          v6 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&v6 + 4) )
    {
      if ( *(_BYTE *)(*(_DWORD *)&v4 + 68) != 1 )
        break;
      v14 = **(_DWORD **)&v6;
      if ( v4 == **(_DWORD **)&v6 )
      {
        v14 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( !*(_BYTE *)(v14 + 68) )
        {
          *(_BYTE *)(v14 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 0;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          v14 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
          v7 = thisa;
        }
        if ( *(_BYTE *)(v14 + 69) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)v14 + 68) != 1 || *(_BYTE *)(*(_DWORD *)(v14 + 8) + 68) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)(v14 + 8) + 68) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)v14 + 68) = 1;
            *(_BYTE *)(v14 + 68) = 0;
            std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(
              v7,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v14);
            v14 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
            v7 = thisa;
          }
          *(_BYTE *)(v14 + 68) = *(_BYTE *)(*(_DWORD *)&v6 + 68);
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)(v14 + 8) + 68) = 1;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          break;
        }
      }
      else
      {
        if ( !*(_BYTE *)(v14 + 68) )
        {
          *(_BYTE *)(v14 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 0;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          v14 = **(_DWORD **)&v6;
          v7 = thisa;
        }
        if ( *(_BYTE *)(v14 + 69) )
          goto LABEL_53;
        if ( *(_BYTE *)(*(_DWORD *)(v14 + 8) + 68) != 1 || *(_BYTE *)(*(_DWORD *)v14 + 68) != 1 )
        {
          if ( *(_BYTE *)(*(_DWORD *)v14 + 68) == 1 )
          {
            *(_BYTE *)(*(_DWORD *)(v14 + 8) + 68) = 1;
            *(_BYTE *)(v14 + 68) = 0;
            std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Lrotate(
              v7,
              (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v14);
            v14 = **(_DWORD **)&v6;
            v7 = thisa;
          }
          *(_BYTE *)(v14 + 68) = *(_BYTE *)(*(_DWORD *)&v6 + 68);
          *(_BYTE *)(*(_DWORD *)&v6 + 68) = 1;
          *(_BYTE *)(*(_DWORD *)v14 + 68) = 1;
          std::_Tree<std::_Tmap_traits<int_EpicQuestWin::QData_std::less<int>_std::allocator<std::pair<int_const_EpicQuestWin::QData>>_1>>::_Rrotate(
            v7,
            *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v6);
          break;
        }
      }
      *(_BYTE *)(v14 + 68) = 0;
LABEL_53:
      v4 = v6;
    }
    *(_BYTE *)(*(_DWORD *)&v4 + 68) = 1;
  }
  if ( *(_DWORD *)(*(_DWORD *)&v3 + 60) >= 0x10u )
    operator delete(*(void **)(*(_DWORD *)&v3 + 40));
  *(_DWORD *)(*(_DWORD *)&v3 + 60) = 15;
  *(_DWORD *)(*(_DWORD *)&v3 + 56) = 0;
  *(_BYTE *)(*(_DWORD *)&v3 + 40) = 0;
  if ( *(_DWORD *)(*(_DWORD *)&v3 + 32) >= 0x10u )
    operator delete(*(void **)(*(_DWORD *)&v3 + 12));
  *(_DWORD *)(*(_DWORD *)&v3 + 32) = 15;
  *(_DWORD *)(*(_DWORD *)&v3 + 28) = 0;
  *(_BYTE *)(*(_DWORD *)&v3 + 12) = 0;
  operator delete(*(void **)&v3);
  v15 = *((_DWORD *)&thisa->baseclass_0 + 2);
  if ( v15 > 0 )
    *((_DWORD *)&thisa->baseclass_0 + 2) = v15 - 1;
  v16 = result;
  *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  return v16;
}

//----- (007311C0) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(...)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v4; // edx@1
  int v5; // ebx@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v6; // edi@1
  bool v7; // al@1
  unsigned int v8; // ecx@2
  const char *v9; // eax@4
  const char *v10; // edx@6
  unsigned int v11; // esi@8
  unsigned int v12; // ecx@8
  int v13; // eax@12
  bool v14; // sf@12
  unsigned int v15; // edi@17
  unsigned int v16; // esi@19
  unsigned int v17; // edx@21
  const char *v18; // ecx@24
  int v19; // eax@26
  bool v20; // sf@26
  signed int v21; // eax@28
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v22; // esi@37
  int v23; // ecx@40
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char> *v24; // eax@40
  bool v25; // cf@42
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *v26; // ebx@42
  unsigned int v27; // edx@42
  const char *v28; // eax@43
  bool v29; // [sp-Ch] [bp-2Ch]@39
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v30; // [sp-8h] [bp-28h]@39
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v31; // [sp-4h] [bp-24h]@39
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *_Wherenode; // [sp+Ch] [bp-14h]@4
  unsigned int v33; // [sp+10h] [bp-10h]@2
  unsigned int v34; // [sp+14h] [bp-Ch]@2
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *thisa; // [sp+18h] [bp-8h]@1
  char _Addleft; // [sp+1Ch] [bp-4h]@1

  v4 = _Node;
  v5 = *(_DWORD *)(*((_DWORD *)&this->baseclass_0 + 1) + 4);
  v6 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)*((_DWORD *)&this->baseclass_0 + 1);
  v7 = 1;
  thisa = this;
  _Addleft = 1;
  if ( !*(_BYTE *)(v5 + 69) )
  {
    v8 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
    v34 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
    v33 = _Node->_Myval.baseclass_0.first.baseclass_0._Myres;
    while ( 1 )
    {
      _Wherenode = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v5;
      v9 = (const char *)(v5 + 12);
      if ( _Leftish )
      {
        if ( v33 < 0x10 )
          v10 = (const char *)&v4->_Myval;
        else
          v10 = *(const char **)&v4->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
        v11 = *(_DWORD *)(v5 + 28);
        v12 = v11;
        if ( v11 >= v34 )
          v12 = v34;
        if ( *(_DWORD *)(v5 + 32) >= 0x10u )
          v9 = *(const char **)v9;
        v13 = std::char_traits<char>::compare(v9, v10, v12);
        v14 = v13 < 0;
        if ( !v13 )
        {
          if ( v11 < v34 )
          {
            v7 = 0;
            goto LABEL_32;
          }
          v14 = (v11 != v34) < 0;
        }
        v7 = !v14;
      }
      else
      {
        v15 = *(_DWORD *)(v5 + 28);
        if ( *(_DWORD *)(v5 + 32) >= 0x10u )
          v9 = *(const char **)v9;
        v16 = _Node->_Myval.baseclass_0.first.baseclass_0._Mysize;
        if ( v8 < v16 )
          v16 = v8;
        v17 = v16;
        if ( v16 >= v15 )
          v17 = *(_DWORD *)(v5 + 28);
        if ( v33 < 0x10 )
          v18 = (const char *)&_Node->_Myval;
        else
          v18 = *(const char **)&_Node->_Myval.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
        v19 = std::char_traits<char>::compare(v18, v9, v17);
        v20 = v19 < 0;
        if ( !v19 )
        {
          if ( v16 >= v15 )
            v21 = v16 != v15;
          else
            v21 = -1;
          v20 = v21 < 0;
        }
        v7 = v20;
      }
LABEL_32:
      _Addleft = v7;
      if ( v7 )
        v5 = *(_DWORD *)v5;
      else
        v5 = *(_DWORD *)(v5 + 8);
      v4 = _Node;
      if ( *(_BYTE *)(v5 + 69) )
      {
        v6 = _Wherenode;
        this = thisa;
        break;
      }
      v8 = v34;
    }
  }
  v22 = v6;
  *(_DWORD *)&_Leftish = v6;
  if ( v7 )
  {
    if ( v6 == **((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: ***)&this->baseclass_0
                + 1) )
    {
      v31 = v4;
      v30 = v6;
      v29 = 1;
LABEL_40:
      v23 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
                          this,
                          (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo *)&_Leftish,
                          v29,
                          v30,
                          v31)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
      v24 = result;
      *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v23;
      result->baseclass_0.second = 1;
      return v24;
    }
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *)&_Leftish);
    v22 = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)_Leftish;
    v4 = _Node;
  }
  v25 = v4->_Myval.baseclass_0.first.baseclass_0._Myres < 0x10;
  v26 = &v4->_Myval;
  v27 = v4->_Myval.baseclass_0.first.baseclass_0._Mysize;
  if ( v25 )
    v28 = (const char *)v26;
  else
    v28 = *(const char **)&v26->baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         &v22->_Myval.baseclass_0.first,
         0,
         v22->_Myval.baseclass_0.first.baseclass_0._Mysize,
         v28,
         v27) < 0 )
  {
    v31 = _Node;
    v30 = v6;
    v29 = _Addleft;
    this = thisa;
    goto LABEL_40;
  }
  std::_Dest_val<std::allocator<GTRequestListWin::GuildInfo>_GTRequestListWin::GuildInfo>(
    (std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > *)&thisa->baseclass_0
  + 13,
    v26);
  operator delete(_Node);
  v24 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v22;
  result->baseclass_0.second = 0;
  return v24;
}

//----- (00731370) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(...)
{
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v4; // ebx@1
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *v5; // esi@1
  int v6; // eax@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v7; // edi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo *v8; // eax@2
  const char *v9; // eax@4
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v10; // eax@17
  int v11; // ecx@23
  char v12; // [sp+Ch] [bp-8h]@23

  v4 = _Node;
  v5 = this;
  v6 = *((_DWORD *)&this->baseclass_0 + 1);
  v7 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&_Node->_Myval;
  if ( !*((_DWORD *)&this->baseclass_0 + 2) )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
      this,
      result,
      1,
      (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v6,
      _Node);
    return result;
  }
  if ( _Where == *(_DWORD *)v6 )
  {
    v9 = (const char *)(*(_DWORD *)&_Where + 12);
    if ( *(_DWORD *)(*(_DWORD *)&_Where + 32) >= 0x10u )
      v9 = *(const char **)v9;
    if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
           &_Node->_Myval.baseclass_0.first,
           0,
           _Node->_Myval.baseclass_0.first.baseclass_0._Mysize,
           v9,
           *(_DWORD *)(*(_DWORD *)&_Where + 28)) < 0 )
    {
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
        v5,
        result,
        1,
        *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&_Where,
        v4);
      return result;
    }
    goto LABEL_23;
  }
  if ( _Where == v6 )
  {
    if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
           (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)this,
           (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)(v6 + 8) + 12),
           &_Node->_Myval.baseclass_0.first) )
    {
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
        v5,
        result,
        0,
        *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(*((_DWORD *)&v5->baseclass_0 + 1) + 8),
        v4);
      return result;
    }
    goto LABEL_23;
  }
  if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
         (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)this,
         &_Node->_Myval.baseclass_0.first,
         (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&_Where + 12)) )
  {
    _Node = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)_Where;
    std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *)&_Node);
    if ( std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
           (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
           &_Node->_Myval.baseclass_0.first,
           v7) )
    {
      if ( _Node->_Right->_Isnil )
      {
        std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
          v5,
          result,
          0,
          _Node,
          v4);
        v8 = result;
      }
      else
      {
        std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
          v5,
          result,
          1,
          *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&_Where,
          v4);
        v8 = result;
      }
      return v8;
    }
  }
  if ( !std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
          (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
          (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&_Where + 12),
          v7) )
    goto LABEL_23;
  _Node = (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)_Where;
  std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>_std::_Iterator_base0>::operator__((std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits *)&_Node);
  v10 = _Node;
  if ( _Node == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&v5->baseclass_0
                + 1) )
    goto LABEL_20;
  if ( !std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>::operator__(
          (std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)v5,
          v7,
          &_Node->_Myval.baseclass_0.first) )
  {
LABEL_23:
    v11 = *(_DWORD *)&std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(
                        v5,
                        (std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char> *)&v12,
                        v4,
                        0)->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v11;
    return v8;
  }
  v10 = _Node;
LABEL_20:
  if ( *(_BYTE *)(*(_DWORD *)(*(_DWORD *)&_Where + 8) + 69) )
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
      v5,
      result,
      0,
      *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)&_Where,
      v4);
    v8 = result;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
      v5,
      result,
      1,
      v10,
      v4);
    v8 = result;
  }
  return v8;
}

//----- (00731530) --------------------------------------------------------
int std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(...)
{
  std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *v4; // esi@1
  int v5; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v6; // ecx@1
  int v7; // ecx@3
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo *v8; // eax@3
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v9; // edx@5
  int v10; // eax@6
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v11; // ecx@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std j; // eax@7
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std i; // eax@10
  char v14; // [sp+4h] [bp-4h]@14

  v4 = this;
  v5 = *((_DWORD *)&this->baseclass_0 + 1);
  v6 = _First;
  if ( _First != *(_DWORD *)v5 || _Last != v5 )
  {
    for ( ; _First != _Last; v6 = _First )
    {
      v9 = v6;
      if ( !*(_BYTE *)(*(_DWORD *)&v6 + 69) )
      {
        v10 = *(_DWORD *)(*(_DWORD *)&v6 + 8);
        if ( *(_BYTE *)(v10 + 69) )
        {
          for ( i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&v6 + 4);
                !*(_BYTE *)(*(_DWORD *)&i + 69);
                i = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&i + 4) )
          {
            if ( v6 != *(_DWORD *)(*(_DWORD *)&i + 8) )
              break;
            v6 = i;
          }
          _First = i;
        }
        else
        {
          v11 = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)(*(_DWORD *)&v6 + 8);
          for ( j = *(std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std *)v10;
                !*(_BYTE *)(*(_DWORD *)&j + 69);
                j = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std)**(_DWORD **)&j )
            v11 = j;
          _First = v11;
        }
      }
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(
        v4,
        (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo *)&v14,
        v9);
    }
    v8 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v6;
  }
  else
  {
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(
      v4,
      *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(v5 + 4));
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 4) = *((_DWORD *)&v4->baseclass_0 + 1);
    **((_DWORD **)&v4->baseclass_0 + 1) = *((_DWORD *)&v4->baseclass_0 + 1);
    *(_DWORD *)(*((_DWORD *)&v4->baseclass_0 + 1) + 8) = *((_DWORD *)&v4->baseclass_0 + 1);
    v7 = *((_DWORD *)&v4->baseclass_0 + 1);
    v8 = result;
    *((_DWORD *)&v4->baseclass_0 + 2) = 0;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = *(_DWORD *)v7;
  }
  return v8;
}

//----- (007315F0) --------------------------------------------------------
void __thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>>::_map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocat(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *this)
{
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *v1; // esi@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v2; // eax@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v3; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo result; // [sp+0h] [bp-14h]@1
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v1 = this;
  v5 = this;
  v2 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std)*((_DWORD *)&this->baseclass_0.baseclass_0 + 1);
  v3 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std)**(_DWORD **)&v2;
  v6 = 0;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(
    &this->baseclass_0,
    &result,
    v3,
    v2);
  operator delete(*((void **)&v1->baseclass_0.baseclass_0 + 1));
}

//----- (00731650) --------------------------------------------------------
void __thiscall ItemMixData::_ItemMixData(ItemMixData *this)
{
  CDataReader *v1; // edi@1
  char *v2; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v3; // ST08_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v4; // ST08_4@1
  std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std v5; // ST04_4@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo result; // [sp+0h] [bp-18h]@1
  char *v7; // [sp+4h] [bp-14h]@1
  ItemMixData *v8; // [sp+8h] [bp-10h]@1
  int v9; // [sp+14h] [bp-4h]@1

  v1 = (CDataReader *)this;
  v8 = this;
  v2 = (char *)&this->m_ItemMixDataMap;
  v3 = *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(*((_DWORD *)&this->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 4);
  v9 = 1;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(
    &this->m_ItemMixDataMap.baseclass_0,
    v3);
  *(_DWORD *)(*((_DWORD *)v2 + 1) + 4) = *((_DWORD *)v2 + 1);
  **((_DWORD **)v2 + 1) = *((_DWORD *)v2 + 1);
  *(_DWORD *)(*((_DWORD *)v2 + 1) + 8) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v2 + 2) = 0;
  v7 = v2;
  v4 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std)*((_DWORD *)v2 + 1);
  v5 = (std::_Tree_const_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std)**((_DWORD **)v2 + 1);
  LOBYTE(v9) = 2;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::erase(
    (std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::all *)v2,
    &result,
    v5,
    v4);
  operator delete(*((void **)v2 + 1));
  v9 = -1;
  CDataReader::_CDataReader(v1);
}

//----- (007316F0) --------------------------------------------------------
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(...)
{
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v2; // esi@1
  void *v3; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // edx@3
  int v7; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v9; // [sp+Ch] [bp-1Ch]@2
  char *v10; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v12; // [sp+18h] [bp-10h]@1
  int v13; // [sp+24h] [bp-4h]@2

  v12 = &v7;
  v2 = this;
  v3 = operator new(0x48u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v3 + 34) = 0;
  v13 = 0;
  v10 = (char *)v3 + 12;
  v9 = (char *)v3 + 12;
  LOBYTE(v13) = 1;
  if ( v3 != (void *)-12 )
  {
    v4 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)_Val;
    *((_DWORD *)v3 + 8) = 15;
    *((_DWORD *)v3 + 7) = 0;
    *((_BYTE *)v3 + 12) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 12),
      v4);
    v5 = &_Val->baseclass_0.second;
    *((_DWORD *)v3 + 15) = 15;
    *((_DWORD *)v3 + 14) = 0;
    LOBYTE(v13) = 2;
    *((_BYTE *)v3 + 40) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 40),
      v5);
  }
  return (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (007317F0) --------------------------------------------------------
int std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(...)
{
  std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v2; // esi@1
  void *v3; // edi@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v4; // eax@3
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v5; // edx@3
  int v7; // [sp-10h] [bp-38h]@1
  std::exception thisa; // [sp+0h] [bp-28h]@5
  char *v9; // [sp+Ch] [bp-1Ch]@2
  char *v10; // [sp+10h] [bp-18h]@2
  void *p; // [sp+14h] [bp-14h]@1
  int *v12; // [sp+18h] [bp-10h]@1
  int v13; // [sp+24h] [bp-4h]@2

  v12 = &v7;
  v2 = this;
  v3 = operator new(0x48u);
  p = v3;
  if ( !v3 )
  {
    _Val = 0;
    std::exception::exception(&thisa, (const char *const *)&_Val);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)v3 = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 1) = *((_DWORD *)v2 + 1);
  *((_DWORD *)v3 + 2) = *((_DWORD *)v2 + 1);
  *((_WORD *)v3 + 34) = 0;
  v13 = 0;
  v10 = (char *)v3 + 12;
  v9 = (char *)v3 + 12;
  LOBYTE(v13) = 1;
  if ( v3 != (void *)-12 )
  {
    v4 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)_Val;
    *((_DWORD *)v3 + 8) = 15;
    *((_DWORD *)v3 + 7) = 0;
    *((_BYTE *)v3 + 12) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 12),
      v4,
      0,
      0xFFFFFFFFu);
    v5 = &_Val->baseclass_0.second;
    *((_DWORD *)v3 + 15) = 15;
    *((_DWORD *)v3 + 14) = 0;
    LOBYTE(v13) = 2;
    *((_BYTE *)v3 + 40) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)((char *)v3 + 40),
      v5);
  }
  return (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v3;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (007318F0) --------------------------------------------------------
void __thiscall ItemMixData::ItemMixData(ItemMixData *this)
{
  ItemMixData *v1; // esi@1
  void *v2; // eax@1
  std::exception thisa; // [sp+0h] [bp-20h]@3
  ItemMixData *v4; // [sp+Ch] [bp-14h]@1
  char *_What; // [sp+10h] [bp-10h]@3
  int v6; // [sp+1Ch] [bp-4h]@1

  v1 = this;
  v4 = this;
  CDataReader::CDataReader(&this->m_ItemMixDataReader);
  v6 = 0;
  *((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0 + 2) = 0;
  v2 = operator new(0x48u);
  if ( !v2 )
  {
    _What = 0;
    std::exception::exception(&thisa, (const char *const *)&_What);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) = v2;
  *(_DWORD *)v2 = v2;
  *(_DWORD *)(*((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0
                                                                                    + 1);
  *(_DWORD *)(*((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0
                                                                                    + 1);
  *(_BYTE *)(*((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 68) = 1;
  *(_BYTE *)(*((_DWORD *)&v1->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 69) = 1;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (007319A0) --------------------------------------------------------
int __thiscall ItemMixData::Read(ItemMixData *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize)
{
  ItemMixData *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v5; // ST08_4@1
  CDataReader::HEAD *v7; // eax@3
  void *v8; // eax@9
  const char *v9; // edi@9
  int v10; // ecx@9
  char v11; // dl@10
  int v12; // edx@11
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v13; // eax@11
  int v14; // esi@11
  unsigned int v15; // edx@12
  int v16; // eax@12
  bool v17; // cf@12
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v18; // ecx@16
  int v19; // eax@18
  bool v20; // sf@18
  unsigned __int8 v21; // of@18
  signed int v22; // eax@20
  int *v23; // eax@24
  bool v24; // zf@26
  const char *v25; // eax@29
  const char *v26; // esi@29
  char v27; // dl@30
  int v28; // eax@31
  int v29; // edi@31
  char v30; // cl@32
  ItemMixData *v31; // esi@33
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v32; // eax@33
  std::pair<std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char> result; // [sp+0h] [bp-8Ch]@33
  unsigned int v34; // [sp+8h] [bp-84h]@12
  int v35; // [sp+Ch] [bp-80h]@25
  int v36; // [sp+10h] [bp-7Ch]@11
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v37; // [sp+14h] [bp-78h]@11
  ItemMixData *v38; // [sp+18h] [bp-74h]@1
  unsigned int i; // [sp+1Ch] [bp-70h]@6
  const char *DataCounter; // [sp+20h] [bp-6Ch]@1
  bool v41; // [sp+27h] [bp-65h]@26
  std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > _Val; // [sp+28h] [bp-64h]@29
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+60h] [bp-2Ch]@9
  unsigned int v44; // [sp+7Ch] [bp-10h]@1
  int v45; // [sp+88h] [bp-4h]@11
  int v46; // [sp+8Ch] [bp+0h]@1

  v44 = (unsigned int)&v46 ^ __security_cookie;
  v4 = this;
  v5 = *(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)(*((_DWORD *)&this->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 4);
  v38 = this;
  DataCounter = pFN;
  std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Erase(
    &this->m_ItemMixDataMap.baseclass_0,
    v5);
  *(_DWORD *)(*((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 4) = *((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0
                                                                                    + 1);
  **((_DWORD **)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) = *((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0
                                                                     + 1);
  *(_DWORD *)(*((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1) + 8) = *((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0
                                                                                    + 1);
  *((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0 + 2) = 0;
  if ( !CDataReader::Read(&v4->m_ItemMixDataReader, pFN, nVersionKey, nStructSize) )
    return 0;
  v7 = v4->m_ItemMixDataReader.m_pHead;
  if ( v7 )
    DataCounter = (const char *)v7->nNumOfRecord;
  else
    DataCounter = 0;
  i = 0;
  if ( (unsigned int)DataCounter > 0 )
  {
    while ( 1 )
    {
      v8 = CDataReader::GetRecord(&v4->m_ItemMixDataReader, i);
      v9 = (const char *)v8;
      thisa.baseclass_0._Myres = 15;
      thisa.baseclass_0._Mysize = 0;
      thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v10 = (int)((char *)v8 + 1);
      do
      {
        v11 = *(_BYTE *)v8;
        v8 = (char *)v8 + 1;
      }
      while ( v11 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &thisa,
        v9,
        (unsigned int)((char *)v8 - v10));
      v12 = *((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1);
      v45 = 0;
      v36 = v12;
      v13 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Lbound(
              &v4->m_ItemMixDataMap.baseclass_0,
              &thisa);
      v14 = *((_DWORD *)&v4->m_ItemMixDataMap.baseclass_0.baseclass_0 + 1);
      v37 = v13;
      if ( v13 == (std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *)v14 )
        goto LABEL_41;
      v15 = v13->_Myval.baseclass_0.first.baseclass_0._Mysize;
      v16 = (int)&v13->_Myval;
      v17 = *(_DWORD *)(v16 + 20) < 0x10u;
      v34 = v15;
      if ( !v17 )
        v16 = *(_DWORD *)v16;
      if ( thisa.baseclass_0._Mysize < v15 )
        v15 = thisa.baseclass_0._Mysize;
      v18 = *(std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&thisa;
      if ( thisa.baseclass_0._Myres < 0x10 )
        v18 = &thisa;
      v19 = std::char_traits<char>::compare(v18->baseclass_0.___u0.baseclass_0.dummy, (const char *)v16, v15);
      v21 = 0;
      v20 = v19 < 0;
      if ( !v19 )
      {
        if ( thisa.baseclass_0._Mysize >= v34 )
          v22 = thisa.baseclass_0._Mysize != v34;
        else
          v22 = -1;
        v21 = 0;
        v20 = v22 < 0;
      }
      if ( v20 ^ v21 )
      {
LABEL_41:
        v35 = v14;
        v23 = &v35;
      }
      else
      {
        v23 = (int *)&v37;
      }
      v24 = *v23 == v36;
      v45 = -1;
      v41 = !v24;
      if ( thisa.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&thisa);
      if ( v41 )
        return 0;
      v25 = v9;
      v26 = v9 + 32;
      _Val.baseclass_0.first.baseclass_0._Myres = 15;
      _Val.baseclass_0.first.baseclass_0._Mysize = 0;
      _Val.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      do
        v27 = *v25++;
      while ( v27 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.baseclass_0.first,
        v9,
        v25 - (v9 + 1));
      v28 = (int)(v9 + 32);
      v45 = 1;
      _Val.baseclass_0.second.baseclass_0._Myres = 15;
      _Val.baseclass_0.second.baseclass_0._Mysize = 0;
      _Val.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      v29 = (int)(v9 + 33);
      do
        v30 = *(_BYTE *)v28++;
      while ( v30 );
      std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
        &_Val.baseclass_0.second,
        v26,
        v28 - v29);
      v31 = v38;
      v45 = 2;
      v32 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(
              &v38->m_ItemMixDataMap.baseclass_0.baseclass_0,
              &_Val);
      std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Linsert(
        &v31->m_ItemMixDataMap.baseclass_0,
        &result,
        v32,
        0);
      v45 = -1;
      if ( _Val.baseclass_0.second.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0]);
      _Val.baseclass_0.second.baseclass_0._Myres = 15;
      _Val.baseclass_0.second.baseclass_0._Mysize = 0;
      _Val.baseclass_0.second.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      if ( _Val.baseclass_0.first.baseclass_0._Myres >= 0x10 )
        operator delete(*(void **)&_Val);
      _Val.baseclass_0.first.baseclass_0._Myres = 15;
      _Val.baseclass_0.first.baseclass_0._Mysize = 0;
      _Val.baseclass_0.first.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
      ++i;
      if ( i >= (unsigned int)DataCounter )
        return 1;
      v4 = v38;
    }
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00731C30) --------------------------------------------------------
std::basic_string<char,std::char_traits<char>,std::allocator<char> > *__thiscall std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>>::operator__(std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *_Keyval)
{
  std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *v2; // esi@1
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo v3; // eax@1
  unsigned int v4; // ecx@2
  int v5; // eax@2
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v6; // eax@5
  std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo _Where; // [sp+0h] [bp-68h]@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > _Right; // [sp+4h] [bp-64h]@5
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > thisa; // [sp+20h] [bp-48h]@5
  void *p; // [sp+3Ch] [bp-2Ch]@5
  int v12; // [sp+4Ch] [bp-1Ch]@5
  unsigned int v13; // [sp+50h] [bp-18h]@5
  unsigned int v14; // [sp+58h] [bp-10h]@1
  int v15; // [sp+64h] [bp-4h]@5
  int v16; // [sp+68h] [bp+0h]@1

  v14 = (unsigned int)&v16 ^ __security_cookie;
  v2 = this;
  v3 = (std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allo)std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Lbound(&this->baseclass_0, _Keyval);
  _Where = v3;
  if ( v3 == *((_DWORD *)&v2->baseclass_0.baseclass_0 + 1) )
    goto LABEL_14;
  v4 = *(_DWORD *)(*(_DWORD *)&v3 + 28);
  v5 = *(_DWORD *)&v3 + 12;
  if ( *(_DWORD *)(v5 + 20) >= 0x10u )
    v5 = *(_DWORD *)v5;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         _Keyval,
         0,
         _Keyval->baseclass_0._Mysize,
         (const char *)v5,
         v4) < 0 )
  {
LABEL_14:
    _Right.baseclass_0._Myres = 15;
    _Right.baseclass_0._Mysize = 0;
    _Right.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    v15 = 0;
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(&thisa, _Keyval, 0, 0xFFFFFFFFu);
    LOBYTE(v15) = 1;
    v13 = 15;
    v12 = 0;
    LOBYTE(p) = 0;
    std::basic_string<char_std::char_traits<char>_std::allocator<char>>::assign(
      (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)&p,
      &_Right);
    LOBYTE(v15) = 2;
    v6 = std::_Tree_val<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Buynode<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>(
           &v2->baseclass_0.baseclass_0,
           (std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > *)&thisa);
    std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Insert(
      &v2->baseclass_0,
      &_Where,
      _Where.baseclass_0,
      v6);
    if ( v13 >= 0x10 )
      operator delete(p);
    v13 = 15;
    v12 = 0;
    LOBYTE(p) = 0;
    if ( thisa.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&thisa);
    thisa.baseclass_0._Myres = 15;
    thisa.baseclass_0._Mysize = 0;
    thisa.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
    if ( _Right.baseclass_0._Myres >= 0x10 )
      operator delete(*(void **)&_Right);
  }
  return (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)(*(_DWORD *)&_Where + 40);
}
// A85C00: using guessed type int __security_cookie;

//----- (00731D70) --------------------------------------------------------
const char *__thiscall ItemMixData::GetMixItemIndex(ItemMixData *this, std::basic_string<char,std::char_traits<char>,std::allocator<char> > *sRawItemIndex)
{
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v2; // ebx@1
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > *v3; // edi@1
  char *v4; // esi@1
  std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: *v5; // eax@1
  unsigned int v6; // ecx@2
  int v7; // eax@2
  std::basic_string<char,std::char_traits<char>,std::allocator<char> > **v8; // eax@5
  const char *result; // eax@8
  int v10; // [sp+Ch] [bp-4h]@6

  v2 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)*((_DWORD *)&this->m_ItemMixDataMap.baseclass_0.baseclass_0
                                                                               + 1);
  v3 = sRawItemIndex;
  v4 = (char *)&this->m_ItemMixDataMap;
  v5 = std::_Tree<std::_Tmap_traits<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>_0>>::_Lbound(
         &this->m_ItemMixDataMap.baseclass_0,
         sRawItemIndex);
  sRawItemIndex = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > *)v5;
  if ( v5 == *((std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std: **)v4
             + 1) )
    goto LABEL_13;
  v6 = v5->_Myval.baseclass_0.first.baseclass_0._Mysize;
  v7 = (int)&v5->_Myval;
  if ( *(_DWORD *)(v7 + 20) >= 0x10u )
    v7 = *(_DWORD *)v7;
  if ( std::basic_string<char_std::char_traits<char>_std::allocator<char>>::compare(
         v3,
         0,
         v3->baseclass_0._Mysize,
         (const char *)v7,
         v6) < 0 )
  {
LABEL_13:
    v10 = *((_DWORD *)v4 + 1);
    v8 = (std::basic_string<char,std::char_traits<char>,std::allocator<char> > **)&v10;
  }
  else
  {
    v8 = &sRawItemIndex;
  }
  if ( *v8 == v2 )
  {
    result = 0;
  }
  else
  {
    result = (const char *)std::map<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::basic_string<char_std::char_traits<char>_std::allocator<char>>_std::less<std::basic_string<char_std::char_traits<char>_std::allocator<char>>>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_std::basic_string<char_std::char_traits<char>_std::allocator<char>>>>>::operator__(
                             (std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std *)v4,
                             v3);
    if ( *((_DWORD *)result + 5) >= 0x10u )
      result = *(const char **)result;
  }
  return result;
}

//----- (00731DF0) --------------------------------------------------------
void __thiscall CQuest::_CQuest(CQuest *this)
{
  CQuest *v1; // esi@1
  void *v2; // eax@1
  void *v3; // eax@3

  v1 = this;
  v2 = this->m_pQuestArray;
  this->vfptr = (CQuestVtbl *)CQuest::_vftable_;
  if ( v2 )
  {
    free(v2);
    v1->m_pQuestArray = 0;
  }
  v3 = v1->m_pQuestListWithNPC;
  v1->m_NumOfQuestBF = 0;
  v1->m_NumOfQuest = 0;
  if ( v3 )
    operator delete__(v3);
  v1->m_NumOfQuestListWithNPC = 0;
  v1->m_MaxOfQuestListWithNPC = 0;
}
// 9D8BD4: using guessed type int (__stdcall *CQuest___vftable_[2])(int);

//----- (00731E30) --------------------------------------------------------
int __thiscall CQuest::InitQuestBF(CQuest *this, int NumOfQuest)
{
  CQuest *v2; // esi@1
  int result; // eax@6
  bool v4; // zf@9

  v2 = this;
  if ( this->m_NumOfQuestBF < NumOfQuest )
  {
    if ( this->m_pQuestArray )
    {
      free(this->m_pQuestArray);
      v2->m_pQuestArray = 0;
    }
    v2->m_NumOfQuestBF = 0;
  }
  if ( !v2->m_pQuestArray )
  {
    result = (int)malloc(32 * NumOfQuest);
    v2->m_pQuestArray = (PLAYER_QUEST_INFO *)result;
    if ( !result )
    {
      v2->m_NumOfQuest = 0;
      return result;
    }
    memset((char *)result, 0, 32 * NumOfQuest);
    v2->m_NumOfQuestBF = NumOfQuest;
  }
  v4 = v2->m_pQuestArray == 0;
  v2->m_NumOfQuest = 0;
  return !v4;
}

//----- (00731EB0) --------------------------------------------------------
void __thiscall CQuest::ClearQuest(CQuest *this)
{
  this->m_NumOfQuest = 0;
  this->m_ProcessedTime = _time32(0);
}

//----- (00731ED0) --------------------------------------------------------
PLAYER_QUEST_INFO *__thiscall CQuest::GetQuestInfo(CQuest *this, unsigned __int16 nID)
{
  int v2; // edx@2
  int v3; // eax@2
  PLAYER_QUEST_INFO *v4; // edi@3
  PLAYER_QUEST_INFO *v5; // ecx@3
  PLAYER_QUEST_INFO *result; // eax@6

  if ( !this->m_NumOfQuestBF || (v2 = this->m_NumOfQuest, v3 = 0, v2 <= 0) )
    goto LABEL_12;
  v4 = this->m_pQuestArray;
  v5 = this->m_pQuestArray;
  while ( v5->ID != nID )
  {
    ++v3;
    ++v5;
    if ( v3 >= v2 )
      return 0;
  }
  if ( v3 != -1 )
    result = &v4[v3];
  else
LABEL_12:
    result = 0;
  return result;
}

//----- (00731F20) --------------------------------------------------------
int __thiscall CQuest::SetQuestInfo(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo)
{
  int v2; // edx@2
  int v3; // eax@2
  PLAYER_QUEST_INFO *v4; // edi@3
  PLAYER_QUEST_INFO *v5; // ecx@3
  int result; // eax@6
  void *v7; // eax@8

  if ( !this->m_NumOfQuestBF || (v2 = this->m_NumOfQuest, v3 = 0, v2 <= 0) )
    goto LABEL_13;
  v4 = this->m_pQuestArray;
  v5 = this->m_pQuestArray;
  while ( v5->ID != pQuestInfo->ID )
  {
    ++v3;
    ++v5;
    if ( v3 >= v2 )
      return 0;
  }
  if ( v3 != -1 && (v7 = &v4[v3]) != 0 )
  {
    memcpy(v7, pQuestInfo, 0x20u);
    result = 1;
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}

//----- (00731F80) --------------------------------------------------------
int __thiscall CQuest::AddQuestInfo(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo)
{
  CQuest *v2; // ebx@1
  int result; // eax@1
  int v4; // edi@2

  v2 = this;
  result = CQuest::SetQuestInfo(this, pQuestInfo);
  if ( !result )
  {
    v4 = v2->m_NumOfQuest;
    if ( v4 >= v2->m_NumOfQuestBF )
      return result;
    memcpy(&v2->m_pQuestArray[v4], pQuestInfo, sizeof(v2->m_pQuestArray[v4]));
    ++v2->m_NumOfQuest;
  }
  return 1;
}

//----- (00731FC0) --------------------------------------------------------
void __thiscall CQuest::SetQuestClear(CQuest *this, unsigned __int16 nID)
{
  CQuest *v2; // esi@1
  int v3; // ecx@2
  int v4; // eax@2
  PLAYER_QUEST_INFO *v5; // edx@3

  v2 = this;
  if ( this->m_NumOfQuestBF )
  {
    v3 = this->m_NumOfQuest;
    v4 = 0;
    if ( v3 > 0 )
    {
      v5 = v2->m_pQuestArray;
      while ( v5->ID != nID )
      {
        ++v4;
        ++v5;
        if ( v4 >= v3 )
          return;
      }
      if ( v4 != -1 )
      {
        memcpy((char *)&v2->m_pQuestArray[v4], (char *)&v2->m_pQuestArray[v4 + 1], 32 * (v3 - v4 - 1));
        --v2->m_NumOfQuest;
      }
    }
  }
}

//----- (00732020) --------------------------------------------------------
int __thiscall CQuest::SetQuestAccept(CQuest *this, unsigned __int16 nID)
{
  CQuest *v2; // ebx@1
  int result; // eax@1
  PLAYER_QUEST_INFO *v4; // esi@2
  bool v5; // zf@3
  __int64 v6; // qax@8
  void *v7; // edi@8
  PLAYER_QUEST_INFO QuestInfo; // [sp+8h] [bp-20h]@8

  v2 = this;
  result = (int)CQuestData::GetQuestData(this->m_pQuestData, nID);
  if ( result )
  {
    v4 = CQuest::GetQuestInfo(v2, nID);
    if ( v4 )
    {
      v5 = v4->Status == 20;
      v4->Status = 6;
      if ( v5 )
      {
        LODWORD(v4->Data.StartTime) = 0;
        HIDWORD(v4->Data.StartTime) = 0;
        LODWORD(v4->Data.EndTime) = 0;
        HIDWORD(v4->Data.EndTime) = 0;
        v4->Data.RepeatCount = 0;
        *(_DWORD *)&v4->Data.ProgressStep = 0;
        *(_DWORD *)&v4->Data.End_NPCMobCount[3] = 0;
        HIBYTE(v4->Data.End_RunningTimeSec) = 0;
        v4->Data.StartTime = _time64(0);
        result = 1;
      }
      else
      {
        v4->Data.ProgressStep = 0;
        *(_DWORD *)&v4->Data.End_NPCMobCount[0] = 0;
        v4->Data.End_NPCMobCount[4] = 0;
        v4->Data._bf26 &= 0xFCu;
        v4->Data.End_RunningTimeSec = 0;
        result = 1;
      }
    }
    else
    {
      if ( v2->m_NumOfQuest < v2->m_NumOfQuestBF )
      {
        QuestInfo.ID = nID;
        QuestInfo.Status = 6;
        QuestInfo.Data.StartTime = 0i64;
        QuestInfo.Data.EndTime = 0i64;
        QuestInfo.Data.RepeatCount = 0;
        *(_DWORD *)&QuestInfo.Data.ProgressStep = 0;
        *(_DWORD *)&QuestInfo.Data.End_NPCMobCount[3] = 0;
        HIBYTE(QuestInfo.Data.End_RunningTimeSec) = 0;
        v6 = _time64(0);
        v7 = &v2->m_pQuestArray[v2->m_NumOfQuest];
        QuestInfo.Data.StartTime = v6;
        memcpy(v7, &QuestInfo, 0x20u);
        result = 1;
        ++v2->m_NumOfQuest;
      }
      else
      {
        result = 0;
      }
    }
  }
  return result;
}

//----- (00732120) --------------------------------------------------------
int __thiscall CQuest::SetQuestCancel(CQuest *this, unsigned __int16 nID)
{
  CQuest *v2; // edi@1
  int v3; // edx@2
  int v4; // eax@2
  PLAYER_QUEST_INFO *v5; // esi@3
  PLAYER_QUEST_INFO *v6; // ecx@3
  int v7; // esi@6
  QUEST_DATA *v8; // eax@10
  int result; // eax@13

  v2 = this;
  if ( !this->m_NumOfQuestBF || (v3 = this->m_NumOfQuest, v4 = 0, v3 <= 0) )
    goto LABEL_18;
  v5 = this->m_pQuestArray;
  v6 = this->m_pQuestArray;
  while ( v6->ID != nID )
  {
    ++v4;
    ++v6;
    if ( v4 >= v3 )
    {
      v7 = 0;
      goto LABEL_10;
    }
  }
  if ( v4 != -1 )
    v7 = (int)&v5[v4];
  else
LABEL_18:
    v7 = 0;
LABEL_10:
  v8 = CQuestData::GetQuestData(v2->m_pQuestData, nID);
  if ( v7 && v8 )
  {
    if ( v8->Repeatable )
    {
      *(_BYTE *)(v7 + 2) = 4;
      *(_BYTE *)(v7 + 23) = 0;
      *(_DWORD *)(v7 + 24) = 0;
      *(_BYTE *)(v7 + 28) = 0;
      *(_BYTE *)(v7 + 29) &= 0xFCu;
      *(_WORD *)(v7 + 30) = 0;
      result = 1;
    }
    else
    {
      CQuest::SetQuestClear(v2, nID);
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007321C0) --------------------------------------------------------
int __thiscall CQuest::SetQuestProgress(CQuest *this, unsigned __int16 nID, char ProgressStep)
{
  int v3; // edx@2
  int v4; // eax@2
  PLAYER_QUEST_INFO *v5; // esi@3
  PLAYER_QUEST_INFO *v6; // ecx@3
  int result; // eax@6
  int v8; // eax@8

  if ( !this->m_NumOfQuestBF || (v3 = this->m_NumOfQuest, v4 = 0, v3 <= 0) )
    goto LABEL_13;
  v5 = this->m_pQuestArray;
  v6 = this->m_pQuestArray;
  while ( v6->ID != nID )
  {
    ++v4;
    ++v6;
    if ( v4 >= v3 )
      return 0;
  }
  if ( v4 != -1 && (v8 = (int)&v5[v4]) != 0 )
  {
    *(_BYTE *)(v8 + 23) = ProgressStep;
    result = 1;
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}

//----- (00732220) --------------------------------------------------------
int __thiscall CQuest::SetQuestFailed(CQuest *this, unsigned __int16 nID)
{
  int v2; // edx@2
  int v3; // eax@2
  PLAYER_QUEST_INFO *v4; // esi@3
  PLAYER_QUEST_INFO *v5; // ecx@3
  int result; // eax@6
  int v7; // eax@8

  if ( !this->m_NumOfQuestBF || (v2 = this->m_NumOfQuest, v3 = 0, v2 <= 0) )
    goto LABEL_13;
  v4 = this->m_pQuestArray;
  v5 = this->m_pQuestArray;
  while ( v5->ID != nID )
  {
    ++v3;
    ++v5;
    if ( v3 >= v2 )
      return 0;
  }
  if ( v3 != -1 && (v7 = (int)&v4[v3]) != 0 )
  {
    *(_BYTE *)(v7 + 2) = 7;
    result = 1;
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}

//----- (00732280) --------------------------------------------------------
int __thiscall CQuest::SetQuestDone(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo)
{
  CQuest *v2; // ebx@1
  int result; // eax@2
  int v4; // edi@3
  __int64 v5; // qax@4

  v2 = this;
  if ( pQuestInfo )
  {
    result = (int)CQuestData::GetQuestData(this->m_pQuestData, pQuestInfo->ID);
    v4 = result;
    if ( result )
    {
      pQuestInfo->Status = 2 * (*(_BYTE *)(result + 18) != 0) + 2;
      v5 = _time64(0);
      ++pQuestInfo->Data.RepeatCount;
      pQuestInfo->Data.EndTime = v5;
      v2->vfptr->Occure_Quest_Done(v2, pQuestInfo, (QUEST_DATA *)v4);
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007322F0) --------------------------------------------------------
int __thiscall CQuest::SetQuestAbort(CQuest *this, unsigned __int16 nID)
{
  int v2; // edx@2
  int v3; // eax@2
  PLAYER_QUEST_INFO *v4; // esi@3
  PLAYER_QUEST_INFO *v5; // ecx@3
  int result; // eax@6
  int v7; // eax@8

  if ( !this->m_NumOfQuestBF || (v2 = this->m_NumOfQuest, v3 = 0, v2 <= 0) )
    goto LABEL_13;
  v4 = this->m_pQuestArray;
  v5 = this->m_pQuestArray;
  while ( v5->ID != nID )
  {
    ++v3;
    ++v5;
    if ( v3 >= v2 )
      return 0;
  }
  if ( v3 != -1 && (v7 = (int)&v4[v3]) != 0 )
  {
    *(_BYTE *)(v7 + 2) = 1;
    result = 1;
  }
  else
  {
LABEL_13:
    result = 0;
  }
  return result;
}

//----- (00732350) --------------------------------------------------------
int __thiscall CQuest::Recv_NC_CHAR_QUEST_DOING_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_DOING_CMD *pQuestPlayerDoingData)
{
  PROTO_NC_CHAR_QUEST_DOING_CMD *v2; // esi@1
  CQuest *v3; // ebx@1
  unsigned __int8 v4; // al@3
  const void *v5; // esi@6
  int v6; // eax@7
  PLAYER_QUEST_INFO *v7; // ecx@8
  int v8; // edi@11
  signed int v9; // eax@12
  void *v10; // eax@14
  int v11; // ecx@18
  int bFailed; // [sp+8h] [bp-8h]@3
  unsigned __int8 i; // [sp+Fh] [bp-1h]@3

  v2 = pQuestPlayerDoingData;
  v3 = this;
  if ( pQuestPlayerDoingData->bNeedClear )
  {
    this->m_NumOfQuest = 0;
    this->m_ProcessedTime = _time32(0);
  }
  v4 = 0;
  bFailed = 0;
  i = 0;
  if ( pQuestPlayerDoingData->nNumOfDoingQuest )
  {
    while ( 1 )
    {
      v5 = (char *)&v2[1] + 32 * v4;
      if ( !v3->m_NumOfQuestBF || (v6 = 0, v3->m_NumOfQuest <= 0) )
        goto LABEL_11;
      v7 = v3->m_pQuestArray;
      while ( v7->ID != *(_WORD *)v5 )
      {
        ++v6;
        ++v7;
        if ( v6 >= v3->m_NumOfQuest )
          goto LABEL_11;
      }
      if ( v6 != -1 && (v10 = &v3->m_pQuestArray[v6]) != 0 )
      {
        memcpy(v10, v5, 0x20u);
      }
      else
      {
LABEL_11:
        v8 = v3->m_NumOfQuest;
        if ( v8 >= v3->m_NumOfQuestBF )
        {
          v9 = 0;
          goto LABEL_18;
        }
        memcpy(&v3->m_pQuestArray[v8], v5, sizeof(v3->m_pQuestArray[v8]));
        ++v3->m_NumOfQuest;
      }
      v9 = 1;
LABEL_18:
      v11 = v9 == 0;
      v4 = i + 1;
      i = v4;
      bFailed |= v11;
      if ( v4 >= pQuestPlayerDoingData->nNumOfDoingQuest )
        return bFailed == 0;
      v2 = pQuestPlayerDoingData;
    }
  }
  return bFailed == 0;
}

//----- (00732430) --------------------------------------------------------
int __thiscall CQuest::Recv_NC_CHAR_QUEST_DONE_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_DONE_CMD *pQuestPlayerDoneData)
{
  CQuest *v2; // edx@1
  int v3; // ebx@1
  int v4; // esi@2
  __int16 v5; // di@2
  char *v6; // eax@2
  unsigned int v7; // ecx@2
  unsigned int v8; // eax@2
  int v9; // eax@3
  PLAYER_QUEST_INFO *v10; // ecx@4
  int v11; // edi@7
  signed int v12; // eax@8
  void *v13; // eax@10
  PLAYER_QUEST_INFO PlayerQuestInfo; // [sp+4h] [bp-24h]@1
  int bFailed; // [sp+24h] [bp-4h]@1

  v2 = this;
  v3 = 0;
  bFailed = 0;
  PlayerQuestInfo.Status = 2;
  if ( pQuestPlayerDoneData->nDoneQuestCount > 0u )
  {
    while ( 1 )
    {
      v4 = v2->m_NumOfQuestBF;
      v5 = *((_WORD *)&pQuestPlayerDoneData[1].chrregnum + 5 * (unsigned __int16)v3);
      v6 = (char *)pQuestPlayerDoneData + 10 * (unsigned __int16)v3;
      v7 = *(_DWORD *)(v6 + 14);
      v8 = *(_DWORD *)(v6 + 18);
      PlayerQuestInfo.ID = *((_WORD *)&pQuestPlayerDoneData[1].chrregnum + 5 * (unsigned __int16)v3);
      PlayerQuestInfo.Data.EndTime = __PAIR__(v8, v7);
      if ( v4 )
      {
        v9 = 0;
        if ( v2->m_NumOfQuest > 0 )
        {
          v10 = v2->m_pQuestArray;
          while ( v10->ID != v5 )
          {
            ++v9;
            ++v10;
            if ( v9 >= v2->m_NumOfQuest )
              goto LABEL_7;
          }
          if ( v9 != -1 )
          {
            v13 = &v2->m_pQuestArray[v9];
            if ( v13 )
              break;
          }
        }
      }
LABEL_7:
      v11 = v2->m_NumOfQuest;
      if ( v11 < v4 )
      {
        memcpy(&v2->m_pQuestArray[v11], &PlayerQuestInfo, sizeof(v2->m_pQuestArray[v11]));
        ++v2->m_NumOfQuest;
        goto LABEL_13;
      }
      v12 = 0;
LABEL_14:
      ++v3;
      bFailed |= v12 == 0;
      if ( (unsigned __int16)v3 >= pQuestPlayerDoneData->nDoneQuestCount )
        return bFailed == 0;
    }
    memcpy(v13, &PlayerQuestInfo, 0x20u);
LABEL_13:
    v12 = 1;
    goto LABEL_14;
  }
  return bFailed == 0;
}

//----- (00732500) --------------------------------------------------------
int __thiscall CQuest::Recv_NC_QUEST_GIVE_UP_ACK(CQuest *this, PROTO_NC_QUEST_GIVE_UP_ACK *pAck)
{
  int result; // eax@2

  if ( pAck->ErrorCode == 2881 )
    result = CQuest::SetQuestCancel(this, pAck->nQuestID);
  else
    result = 0;
  return result;
}

//----- (00732530) --------------------------------------------------------
int __thiscall CQuest::Recv_NC_CHAR_QUEST_READ_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_READ_CMD *pQuestPlayerReadData)
{
  CQuest *v2; // edx@1
  PROTO_NC_CHAR_QUEST_READ_CMD *v3; // ecx@1
  int v4; // eax@1
  int v5; // esi@2
  __int16 v6; // di@2
  int v7; // eax@3
  PLAYER_QUEST_INFO *v8; // ecx@4
  int v9; // edi@7
  signed int v10; // eax@8
  void *v11; // eax@10
  bool v12; // zf@14
  PLAYER_QUEST_INFO PlayerQuestInfo; // [sp+4h] [bp-28h]@1
  int i; // [sp+24h] [bp-8h]@1
  int bFailed; // [sp+28h] [bp-4h]@1

  v2 = this;
  v3 = pQuestPlayerReadData;
  LOWORD(v4) = 0;
  bFailed = 0;
  PlayerQuestInfo.Status = 20;
  i = 0;
  if ( pQuestPlayerReadData->nNumOfReadQuest > 0u )
  {
    while ( 1 )
    {
      v5 = v2->m_NumOfQuestBF;
      v6 = *((_WORD *)&v3[1].chrregnum + (unsigned __int16)v4);
      PlayerQuestInfo.ID = *((_WORD *)&v3[1].chrregnum + (unsigned __int16)v4);
      if ( v5 )
      {
        v7 = 0;
        if ( v2->m_NumOfQuest > 0 )
        {
          v8 = v2->m_pQuestArray;
          while ( v8->ID != v6 )
          {
            ++v7;
            ++v8;
            if ( v7 >= v2->m_NumOfQuest )
              goto LABEL_7;
          }
          if ( v7 != -1 )
          {
            v11 = &v2->m_pQuestArray[v7];
            if ( v11 )
              break;
          }
        }
      }
LABEL_7:
      v9 = v2->m_NumOfQuest;
      if ( v9 < v5 )
      {
        memcpy(&v2->m_pQuestArray[v9], &PlayerQuestInfo, sizeof(v2->m_pQuestArray[v9]));
        ++v2->m_NumOfQuest;
        goto LABEL_13;
      }
      v10 = 0;
LABEL_14:
      v12 = v10 == 0;
      v4 = i + 1;
      i = v4;
      bFailed |= v12;
      v3 = pQuestPlayerReadData;
      if ( (unsigned __int16)v4 >= pQuestPlayerReadData->nNumOfReadQuest )
        return bFailed == 0;
    }
    memcpy(v11, &PlayerQuestInfo, 0x20u);
LABEL_13:
    v10 = 1;
    goto LABEL_14;
  }
  return bFailed == 0;
}

//----- (00732600) --------------------------------------------------------
int __thiscall CQuest::Recv_NC_CHAR_QUEST_REPEAT_CMD_ACK(CQuest *this, PROTO_NC_CHAR_QUEST_REPEAT_CMD *pQuestPlayerRepeatData)
{
  CQuest *v2; // edx@1
  PROTO_NC_CHAR_QUEST_REPEAT_CMD *v3; // ecx@1
  int v4; // eax@1
  const void *v5; // esi@2
  int v6; // eax@3
  PLAYER_QUEST_INFO *v7; // ecx@4
  int v8; // edi@7
  signed int v9; // eax@8
  void *v10; // eax@10
  bool v11; // zf@14
  int i; // [sp+4h] [bp-8h]@1
  int bFailed; // [sp+8h] [bp-4h]@1

  v2 = this;
  v3 = pQuestPlayerRepeatData;
  LOWORD(v4) = 0;
  bFailed = 0;
  i = 0;
  if ( pQuestPlayerRepeatData->nNumOfRepeatQuest > 0u )
  {
    while ( 1 )
    {
      v5 = (char *)&v3[1] + 32 * (unsigned __int16)v4;
      if ( v2->m_NumOfQuestBF )
      {
        v6 = 0;
        if ( v2->m_NumOfQuest > 0 )
        {
          v7 = v2->m_pQuestArray;
          while ( v7->ID != *(_WORD *)v5 )
          {
            ++v6;
            ++v7;
            if ( v6 >= v2->m_NumOfQuest )
              goto LABEL_7;
          }
          if ( v6 != -1 )
          {
            v10 = &v2->m_pQuestArray[v6];
            if ( v10 )
              break;
          }
        }
      }
LABEL_7:
      v8 = v2->m_NumOfQuest;
      if ( v8 < v2->m_NumOfQuestBF )
      {
        memcpy(&v2->m_pQuestArray[v8], v5, sizeof(v2->m_pQuestArray[v8]));
        ++v2->m_NumOfQuest;
        goto LABEL_13;
      }
      v9 = 0;
LABEL_14:
      v11 = v9 == 0;
      v4 = i + 1;
      i = v4;
      bFailed |= v11;
      v3 = pQuestPlayerRepeatData;
      if ( (unsigned __int16)v4 >= pQuestPlayerRepeatData->nNumOfRepeatQuest )
        return bFailed == 0;
    }
    memcpy(v10, v5, 0x20u);
LABEL_13:
    v9 = 1;
    goto LABEL_14;
  }
  return bFailed == 0;
}

//----- (007326C0) --------------------------------------------------------
int __thiscall CQuest::Send_NC_QUEST_CLIENT_SCENARIO_DONE_REQ(CQuest *this, unsigned __int16 nScenarioID)
{
  CQuest *v2; // edi@1
  int v3; // ebx@1
  int v4; // esi@4
  QUEST_DATA *v5; // eax@6
  int result; // eax@12
  int bResult; // [sp+8h] [bp-8h]@1
  int v8; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = 0;
  bResult = 0;
  if ( this->m_NumOfQuest <= 0 )
  {
    result = 0;
  }
  else
  {
    v8 = 0;
    do
    {
      if ( v3 >= 0 )
      {
        v4 = (int)&v2->m_pQuestArray[v8];
        if ( v4 )
        {
          if ( *(_BYTE *)(v4 + 2) == 6 )
          {
            v5 = CQuestData::GetQuestData(v2->m_pQuestData, *(_WORD *)v4);
            if ( v5 )
            {
              if ( v5->End.bScenario == 1 && v5->End.ScenarioID == nScenarioID && !(*(_BYTE *)(v4 + 29) & 2) )
                bResult = 1;
            }
          }
        }
      }
      ++v8;
      ++v3;
    }
    while ( v3 < v2->m_NumOfQuest );
    result = bResult;
    if ( bResult )
    {
      v2->vfptr->_Send_NC_QUEST_CLIENT_SCENARIO_DONE_REQ(v2, nScenarioID);
      result = bResult;
    }
  }
  return result;
}

//----- (00732760) --------------------------------------------------------
int __thiscall CQuest::Recv_NC_QUEST_CLIENT_SCENARIO_DONE_ACK(CQuest *this, PROTO_NC_QUEST_CLIENT_SCENARIO_DONE_ACK *pAck)
{
  return ((int (__stdcall *)(_DWORD))this->vfptr->QuestPlayer_ScenarioDone)(pAck->nScenarioID);
}

//----- (00732780) --------------------------------------------------------
void __thiscall CQuest::Recv_NC_QUEST_NOTIFY_MOB_KILL_CMD(CQuest *this, PROTO_NC_QUEST_NOTIFY_MOB_KILL_CMD *pCmd)
{
  unsigned int v2; // edi@1
  CQuest *v3; // ebx@1
  PROTO_NC_QUEST_NOTIFY_MOB_KILL_CMD *v4; // esi@2

  v2 = 0;
  v3 = this;
  if ( pCmd->NumOfActionQuest )
  {
    v4 = pCmd + 1;
    do
    {
      v3->vfptr->QuestPlayer_NPCMobKill(v3, *(_WORD *)&v4->NumOfActionQuest, *(_WORD *)&v4[2].NumOfActionQuest);
      ++v2;
      v4 += 4;
    }
    while ( v2 < pCmd->NumOfActionQuest );
  }
}

//----- (007327C0) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_LevelChange(CQuest *this, char nPlayerLevel)
{
  CQuest *v2; // edi@1
  int v3; // ebx@1
  int v4; // esi@4
  QUEST_DATA *v5; // eax@6
  int v6; // eax@8
  int result; // eax@11
  int bResult; // [sp+8h] [bp-8h]@1
  int v9; // [sp+Ch] [bp-4h]@2

  v2 = this;
  v3 = 0;
  bResult = 0;
  if ( this->m_NumOfQuest <= 0 )
  {
    result = 0;
  }
  else
  {
    v9 = 0;
    do
    {
      if ( v3 >= 0 )
      {
        v4 = (int)&v2->m_pQuestArray[v9];
        if ( v4 )
        {
          if ( *(_BYTE *)(v4 + 2) == 6 )
          {
            v5 = CQuestData::GetQuestData(v2->m_pQuestData, *(_WORD *)v4);
            if ( v5 )
            {
              if ( v5->End.bLevel == 1 )
              {
                v6 = v5->End.Level;
                if ( (unsigned __int8)v6 <= nPlayerLevel )
                {
                  bResult = 1;
                  v2->vfptr->Occure_LevelChange(v2, *(_WORD *)v4, nPlayerLevel, v6);
                }
              }
            }
          }
        }
      }
      ++v9;
      ++v3;
    }
    while ( v3 < v2->m_NumOfQuest );
    result = bResult;
  }
  return result;
}

//----- (00732850) --------------------------------------------------------
int __thiscall CQuest::IsQuestArea(CQuest *this, unsigned int CurrentX, unsigned int CurrentY, unsigned int QuestX, unsigned int QuestY, unsigned int QuestRange)
{
  return QuestRange >= (unsigned int)(signed __int64)sqrt((double)(abs(CurrentY - QuestY) + abs(CurrentX - QuestY)));
}

//----- (007328B0) --------------------------------------------------------
int __thiscall CQuest::IsQuestNPCMob(CQuest *this, QUEST_DATA *lpQuestData, unsigned __int16 nNPCID)
{
  int result; // eax@1
  signed int v4; // edx@4
  char *v5; // eax@4

  result = (int)lpQuestData;
  if ( lpQuestData )
  {
    if ( !lpQuestData->Start.bNPC || lpQuestData->Start.NPCID != nNPCID )
    {
      v4 = 0;
      v5 = &lpQuestData->End.NPCMobList[0].NPCMobAction;
      while ( !*(v5 - 4) || *v5 && *v5 != 3 || *((_WORD *)v5 - 1) != nNPCID )
      {
        ++v4;
        v5 += 8;
        if ( v4 >= 5 )
          return 0;
      }
    }
    result = 1;
  }
  return result;
}

//----- (00732910) --------------------------------------------------------
int __thiscall CQuest::IsConversationNPCMob(CQuest *this, QUEST_DATA *lpQuestData, unsigned __int16 nNPCID)
{
  signed int v3; // ecx@2
  char *v4; // eax@2
  int result; // eax@7

  if ( lpQuestData )
  {
    v3 = 0;
    v4 = &lpQuestData->End.NPCMobList[0].NPCMobAction;
    while ( !*(v4 - 4) || *v4 != 3 || *((_WORD *)v4 - 1) != nNPCID )
    {
      ++v3;
      v4 += 8;
      if ( v3 >= 5 )
        goto LABEL_7;
    }
    result = 1;
  }
  else
  {
LABEL_7:
    result = 0;
  }
  return result;
}

//----- (00732950) --------------------------------------------------------
unsigned __int16 __thiscall CQuest::GetRewardNPC(CQuest *this, QUEST_DATA *lpQuestData)
{
  signed int v2; // eax@2
  char *v3; // ecx@2
  unsigned __int16 result; // ax@6

  if ( lpQuestData )
  {
    v2 = 0;
    v3 = &lpQuestData->End.NPCMobList[0].NPCMobAction;
    while ( !*(v3 - 4) || *v3 )
    {
      ++v2;
      v3 += 8;
      if ( v2 >= 5 )
        goto LABEL_6;
    }
    result = lpQuestData->End.NPCMobList[v2].NPCMobID;
  }
  else
  {
LABEL_6:
    result = -1;
  }
  return result;
}

//----- (00732990) --------------------------------------------------------
int __thiscall CQuest::IsSoonableQuest(CQuest *this, QUEST_DATA *lpQuestData)
{
  QUEST_DATA *v2; // ebx@1
  CQuest *v3; // esi@1
  unsigned __int8 v4; // al@2
  PLAYER_QUEST_INFO *v5; // eax@10
  char v6; // cl@11
  tm *v7; // esi@22
  int v8; // eax@22
  tm EndTM; // [sp+8h] [bp-78h]@22
  tm StartTM; // [sp+2Ch] [bp-54h]@22
  tm CurrentTM; // [sp+50h] [bp-30h]@22
  __int64 *LocationX; // [sp+74h] [bp-Ch]@7
  __int64 ptime; // [sp+78h] [bp-8h]@7

  v2 = lpQuestData;
  v3 = this;
  if ( lpQuestData->Start.bLevel
    && ((v4 = ((int (*)(void))this->vfptr->GetQuestPlayerLevel)(), (unsigned __int8)(v4 + 5) < v2->Start.LevelMin)
     || v4 > v2->Start.LevelMax)
    || v2->Start.bItem && v3->vfptr->GetQuestPlayerItemLot(v3, v2->Start.ItemID) < v2->Start.ItemLot
    || v2->Start.bLocation
    && ((v3->vfptr->GetPlayerCurrentLocation(
           v3,
           (unsigned __int16 *)&lpQuestData,
           (unsigned int *)&LocationX,
           (unsigned int *)((char *)&ptime + 4)),
         v2->Start.Location != (_WORD)lpQuestData)
     || !v3->vfptr->IsQuestArea(
           v3,
           (unsigned int)LocationX,
           HIDWORD(ptime),
           v2->Start.LocationX,
           v2->Start.LocationY,
           v2->Start.LocationRange)) )
    return 0;
  if ( v2->Start.bQuest )
  {
    v5 = CQuest::GetQuestInfo(v3, v2->Start.QuestID);
    if ( v5 )
    {
      v6 = v5->Status;
      if ( v6 == 2 )
      {
        if ( v3->vfptr->IsSoonableDailyQuest(v3, v5) != 1 )
          goto LABEL_15;
      }
      else
      {
        if ( v6 == 4 )
          goto LABEL_15;
      }
    }
    return 0;
  }
LABEL_15:
  if ( v2->Start.bRace && v2->Start.Race != v3->vfptr->GetQuestPlayerRace(v3)
    || v2->Start.bClass && v2->Start.Class != v3->vfptr->GetQuestPlayerClass(v3)
    || v2->Start.bGender && v2->Start.Gender != v3->vfptr->GetQuestPlayerGender(v3) )
    return 0;
  if ( v2->Start.bDate )
  {
    _time64(&ptime);
    memcpy(&CurrentTM, _localtime64(&ptime), sizeof(CurrentTM));
    lpQuestData = (QUEST_DATA *)((char *)v2 + 72);
    memcpy(&StartTM, _localtime64(&v2->Start.DateStart), sizeof(StartTM));
    LocationX = &v2->Start.DateEnd;
    v7 = _localtime64(&v2->Start.DateEnd);
    v8 = v2->Start.DateMode;
    memcpy(&EndTM, v7, sizeof(EndTM));
    switch ( v8 )
    {
      case 0:
        if ( CurrentTM.tm_year < StartTM.tm_year || CurrentTM.tm_year > EndTM.tm_year )
          return 0;
        return 1;
      case 1:
        if ( CurrentTM.tm_mon >= StartTM.tm_mon && CurrentTM.tm_mon <= EndTM.tm_mon )
          return 1;
        return 0;
      case 2:
        if ( CurrentTM.tm_mday >= StartTM.tm_mday && CurrentTM.tm_mday <= EndTM.tm_mday )
          return 1;
        return 0;
      case 3:
        if ( ptime >= *(_QWORD *)&lpQuestData->nQuestDataSize
          && (SHIDWORD(ptime) < *((_DWORD *)LocationX + 1)
           || SHIDWORD(ptime) <= *((_DWORD *)LocationX + 1) && (unsigned int)ptime <= *(_DWORD *)LocationX) )
          return 1;
        return 0;
      default:
        return 1;
    }
  }
  return 1;
}

//----- (00732BB0) --------------------------------------------------------
int __thiscall CQuest::IsDoingableQuest(CQuest *this, QUEST_DATA *lpQuestData)
{
  CQuest *v2; // esi@1
  unsigned __int8 v4; // al@4

  v2 = this;
  return CQuest::IsSoonableQuest(this, lpQuestData)
      && (!lpQuestData->Start.bLevel
       || (v4 = v2->vfptr->GetQuestPlayerLevel(v2), v4 >= lpQuestData->Start.LevelMin)
       && v4 <= lpQuestData->Start.LevelMax);
}

//----- (00732BF0) --------------------------------------------------------
int __thiscall CQuest::IsDoingableQuest(CQuest *this, unsigned __int16 hQuestID)
{
  CQuest *v2; // edi@1
  QUEST_DATA *v3; // eax@1
  QUEST_DATA *v4; // esi@1
  char v6; // al@5

  v2 = this;
  v3 = CQuestData::GetQuestData(this->m_pQuestData, hQuestID);
  v4 = v3;
  return v3
      && CQuest::IsSoonableQuest(v2, v3)
      && (!v4->Start.bLevel
       || (v6 = v2->vfptr->GetQuestPlayerLevel(v2), (unsigned __int8)v6 >= v4->Start.LevelMin)
       && (unsigned __int8)v6 <= v4->Start.LevelMax);
}

//----- (00732C50) --------------------------------------------------------
int __thiscall CQuest::IsRewardAbleQuest(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo)
{
  CQuest *v2; // edi@1
  QUEST_DATA *v3; // eax@1
  QUEST_DATA *v4; // ebx@1
  signed int v6; // edx@5
  int v7; // ecx@5
  int v8; // esi@10
  unsigned int LocationX; // [sp+8h] [bp-Ch]@16
  unsigned int LocationY; // [sp+Ch] [bp-8h]@16
  int nLocation; // [sp+10h] [bp-4h]@10

  v2 = this;
  v3 = CQuestData::GetQuestData(this->m_pQuestData, pQuestInfo->ID);
  v4 = v3;
  if ( v3 && (!v3->End.bLevel || (unsigned __int8)v2->vfptr->GetQuestPlayerLevel(v2) >= v3->End.Level) )
  {
    v6 = 0;
    v7 = (int)&v4->End.NPCMobList[0].NPCMobAction;
    while ( !*(_BYTE *)(v7 - 4)
         || (unsigned __int8)(*(_BYTE *)v7 - 1) > 2u
         || (unsigned __int8)pQuestInfo->Data.End_NPCMobCount[v6] >= *(_BYTE *)(v7 + 1) )
    {
      ++v6;
      v7 += 8;
      if ( v6 >= 5 )
      {
        nLocation = 0;
        v8 = (int)&v4->End.ItemList[0].ItemID;
        do
        {
          if ( *(_BYTE *)(v8 - 2)
            && (v2->vfptr->IsQuestPlayerItemLock(v2, *(_WORD *)v8) == 1
             || v2->vfptr->GetQuestPlayerItemLot(v2, *(_WORD *)v8) < *(_WORD *)(v8 + 2)) )
            return 0;
          v8 += 6;
          ++nLocation;
        }
        while ( nLocation < 5 );
        if ( v4->End.bLocation
          && ((v2->vfptr->GetPlayerCurrentLocation(v2, (unsigned __int16 *)&nLocation, &LocationX, &LocationY),
               v4->End.Location != (_WORD)nLocation)
           || !v2->vfptr->IsQuestArea(
                 v2,
                 LocationX,
                 LocationY,
                 v4->End.LocationX,
                 v4->End.LocationY,
                 v4->End.LocationRange))
          || v4->End.bScenario && !(pQuestInfo->Data._bf26 & 2)
          || v4->End.bRace && v4->End.Race != v2->vfptr->GetQuestPlayerRace(v2)
          || v4->End.bClass && v4->End.Class != v2->vfptr->GetQuestPlayerClass(v2)
          || v4->End.bTimeLimit && v4->End.TimeLimit <= pQuestInfo->Data.End_RunningTimeSec )
          return 0;
        return 1;
      }
    }
  }
  return 0;
}

//----- (00732DE0) --------------------------------------------------------
char __thiscall CQuest::IsSoonableDailyQuest(CQuest *this, PLAYER_QUEST_INFO *pQuestInfo)
{
  PLAYER_QUEST_INFO *v2; // esi@1
  CQuest *v3; // edi@1
  char result; // al@2
  QUEST_DATA *v5; // eax@3
  int v6; // eax@6
  char bReternValue_3; // [sp+13h] [bp+Bh]@5

  v2 = pQuestInfo;
  v3 = this;
  if ( pQuestInfo && (v5 = CQuestData::GetQuestData(this->m_pQuestData, pQuestInfo->ID)) != 0 && v5->Type == 10 )
  {
    bReternValue_3 = 0;
    switch ( v5->nDailyQuestType )
    {
      case 1:
        v6 = v3->m_QuestRestTime.tResetDayQuest;
        goto LABEL_7;
      case 2:
        v6 = v3->m_QuestRestTime.tResetWeekQuest;
        goto LABEL_7;
      case 3:
        v6 = v3->m_QuestRestTime.tResetMonthQuest;
        goto LABEL_7;
      case 4:
        v6 = v3->m_QuestRestTime.tResetYearQuest;
LABEL_7:
        if ( v2->Data.EndTime >= v6 )
          goto LABEL_13;
        result = 1;
        break;
      default:
        bReternValue_3 = 0;
LABEL_13:
        result = bReternValue_3;
        break;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00732E80) --------------------------------------------------------
void __thiscall CQuest::CQuest(CQuest *this, CQuestData *pQuestData)
{
  CQuest *v2; // esi@1

  v2 = this;
  this->vfptr = (CQuestVtbl *)CQuest::_vftable_;
  this->m_pQuestData = pQuestData;
  this->m_NumOfQuest = 0;
  this->m_ProcessedTime = _time32(0);
  v2->m_NumOfQuestBF = 0;
  v2->m_pQuestArray = 0;
  v2->m_MaxOfQuestListWithNPC = 0;
  v2->m_NumOfQuestListWithNPC = 0;
  v2->m_pQuestListWithNPC = 0;
  v2->m_QuestStatusPriority[1] = 21;
  v2->m_QuestStatusPriority[2] = 21;
  v2->m_QuestStatusPriority[3] = 21;
  v2->m_QuestStatusPriority[4] = 21;
  v2->m_QuestStatusPriority[9] = 21;
  v2->m_QuestStatusPriority[10] = 21;
  v2->m_QuestStatusPriority[11] = 21;
  v2->m_QuestStatusPriority[12] = 21;
  v2->m_QuestStatusPriority[13] = 21;
  v2->m_QuestStatusPriority[14] = 21;
  v2->m_QuestStatusPriority[15] = 21;
  v2->m_QuestStatusPriority[16] = 21;
  v2->m_QuestStatusPriority[17] = 21;
  v2->m_QuestStatusPriority[18] = 21;
  v2->m_QuestStatusPriority[19] = 21;
  v2->m_QuestStatusPriority[8] = 0;
  v2->m_QuestStatusPriority[6] = 1;
  v2->m_QuestStatusPriority[20] = 2;
  v2->m_QuestStatusPriority[5] = 2;
  v2->m_QuestStatusPriority[7] = 2;
  v2->m_QuestStatusPriority[0] = 22;
  v2->m_QuestTypePriority[1] = 11;
  v2->m_QuestTypePriority[4] = 11;
  v2->m_QuestTypePriority[10] = 11;
  v2->m_QuestTypePriority[3] = 0;
  v2->m_QuestTypePriority[2] = 1;
  v2->m_QuestTypePriority[6] = 2;
  v2->m_QuestTypePriority[7] = 2;
  v2->m_QuestTypePriority[8] = 2;
  v2->m_QuestTypePriority[5] = 3;
  v2->m_QuestTypePriority[9] = 4;
  v2->m_QuestTypePriority[0] = 5;
}
// 9D8BD4: using guessed type int (__stdcall *CQuest___vftable_[2])(int);

//----- (00732F60) --------------------------------------------------------
int __thiscall CQuest::SetQuestDone(CQuest *this, unsigned __int16 nID)
{
  int v2; // esi@2
  int v3; // eax@2
  PLAYER_QUEST_INFO *v4; // edx@3
  int result; // eax@6

  if ( !this->m_NumOfQuestBF || (v2 = this->m_NumOfQuest, v3 = 0, v2 <= 0) )
    goto LABEL_12;
  v4 = this->m_pQuestArray;
  while ( v4->ID != nID )
  {
    ++v3;
    ++v4;
    if ( v3 >= v2 )
      return CQuest::SetQuestDone(this, 0);
  }
  if ( v3 != -1 )
    result = CQuest::SetQuestDone(this, &this->m_pQuestArray[v3]);
  else
LABEL_12:
    result = CQuest::SetQuestDone(this, 0);
  return result;
}

//----- (00732FD0) --------------------------------------------------------
PLAYER_QUEST_STATUS __thiscall CQuest::GetNewQuestStatus(CQuest *this, QUEST_DATA *lpQuestData)
{
  CQuest *v2; // esi@1
  int v3; // edx@2
  int v4; // eax@2
  PLAYER_QUEST_INFO *v5; // ecx@3
  unsigned __int8 v6; // al@8
  PLAYER_QUEST_STATUS result; // eax@10
  int v8; // eax@12
  bool v9; // zf@12
  int v10; // eax@12
  PLAYER_QUEST_INFO *v11; // ecx@12

  v2 = this;
  if ( !this->m_NumOfQuestBF || (v3 = this->m_NumOfQuest, v4 = 0, v3 <= 0) )
    goto LABEL_6;
  v5 = this->m_pQuestArray;
  while ( v5->ID != lpQuestData->ID )
  {
    ++v4;
    ++v5;
    if ( v4 >= v3 )
      goto LABEL_6;
  }
  if ( v4 == -1
    || (v8 = v4, v9 = &v2->m_pQuestArray[v8] == 0, v10 = (int)&v2->m_pQuestArray[v8], v11 = (PLAYER_QUEST_INFO *)v10, v9) )
  {
LABEL_6:
    if ( CQuest::IsSoonableQuest(v2, lpQuestData)
      && (!lpQuestData->Start.bLevel
       || (v6 = v2->vfptr->GetQuestPlayerLevel(v2), v6 >= lpQuestData->Start.LevelMin)
       && v6 <= lpQuestData->Start.LevelMax) )
LABEL_22:
      result = 5;
    else
LABEL_10:
      result = CQuest::IsSoonableQuest(v2, lpQuestData) != 0 ? 3 : 0;
  }
  else
  {
    result = *(_BYTE *)(v10 + 2);
    switch ( result )
    {
      default:
        return result;
      case 3:
        if ( !CQuest::IsDoingableQuest(v2, lpQuestData) )
          goto LABEL_10;
        result = 5;
        break;
      case 4:
        result = CQuest::IsDoingableQuest(v2, lpQuestData) != 0 ? 4 : 0;
        break;
      case 5:
        result = CQuest::IsDoingableQuest(v2, lpQuestData) != 0 ? 5 : 0;
        break;
      case 20:
        result = CQuest::IsDoingableQuest(v2, lpQuestData) != 0 ? 0x14 : 0;
        break;
      case 6:
      case 8:
        result = CQuest::IsRewardAbleQuest(v2, v11) != 0 ? 8 : 6;
        break;
      case 2:
        if ( v2->vfptr->IsSoonableDailyQuest(v2, v11) == 1 && CQuest::IsDoingableQuest(v2, lpQuestData) == 1 )
          goto LABEL_22;
        result = 2;
        break;
    }
  }
  return result;
}

//----- (00733150) --------------------------------------------------------
PLAYER_QUEST_STATUS __thiscall CQuest::GetNewQuestStatus(CQuest *this, unsigned __int16 nID)
{
  CQuest *v2; // esi@1
  PLAYER_QUEST_STATUS result; // eax@1

  v2 = this;
  result = (PLAYER_QUEST_STATUS)CQuestData::GetQuestData(this->m_pQuestData, nID);
  if ( result )
    result = CQuest::GetNewQuestStatus(v2, (QUEST_DATA *)result);
  return result;
}

//----- (00733180) --------------------------------------------------------
int __thiscall CQuest::IsDoingQuest(CQuest *this, unsigned __int16 hQuestID)
{
  CQuest *v2; // esi@1
  QUEST_DATA *v3; // eax@1
  PLAYER_QUEST_STATUS v4; // eax@2

  v2 = this;
  v3 = CQuestData::GetQuestData(this->m_pQuestData, hQuestID);
  return v3 && ((v4 = CQuest::GetNewQuestStatus(v2, v3), v4 == 6) || v4 == 7 || v4 == 8);
}

//----- (007331C0) --------------------------------------------------------
PLAYER_QUEST_STATUS __thiscall CQuest::DoingQuestUpdateStatus(CQuest *this, int nIndex)
{
  CQuest *v2; // esi@1
  PLAYER_QUEST_INFO *v3; // edi@3
  PLAYER_QUEST_STATUS result; // eax@4
  QUEST_DATA *v5; // eax@5

  v2 = this;
  if ( nIndex < this->m_NumOfQuest && nIndex >= 0 && (v3 = &this->m_pQuestArray[nIndex]) != 0 )
  {
    v5 = CQuestData::GetQuestData(this->m_pQuestData, v3->ID);
    if ( v5 )
    {
      LOBYTE(result) = CQuest::GetNewQuestStatus(v2, v5);
      v3->Status = result;
      result = (unsigned __int8)result;
    }
    else
    {
      v3->Status = 0;
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00733220) --------------------------------------------------------
int __thiscall CQuest::GetQuestStatusWithNPC(CQuest *this, CQuest::NPC_QUEST_STATUS *kQuestStatus, QUEST_DATA *lpQuestData, unsigned int uiMainCharLv, bool bQmark, bool bLowRepeat)
{
  CQuest::NPC_QUEST_STATUS *v6; // ebx@1
  unsigned __int16 v7; // ST04_2@1
  CQuest *v8; // edi@1
  PLAYER_QUEST_STATUS v9; // eax@2
  int result; // eax@3
  signed int eQuestState; // [sp+14h] [bp+8h]@2

  v6 = kQuestStatus;
  v7 = kQuestStatus->hID;
  v8 = this;
  kQuestStatus->eResultState = 0;
  kQuestStatus->lpQuestData = lpQuestData;
  if ( CQuest::IsQuestNPCMob(this, lpQuestData, v7) )
  {
    v9 = CQuest::GetNewQuestStatus(v8, lpQuestData);
    eQuestState = v9;
    switch ( v9 )
    {
      case 0:
      case 1:
      case 2:
      case 3:
        goto $LN19_67;
      case 4:
      case 7:
        if ( lpQuestData && lpQuestData->Start.bNPC && lpQuestData->Start.NPCID == v6->hID )
          break;
        return 0;
      case 5:
      case 20:
        if ( lpQuestData && lpQuestData->Start.bNPC && lpQuestData->Start.NPCID == v6->hID )
          break;
        return 0;
      case 6:
        if ( CQuest::IsConversationNPCMob(v8, lpQuestData, v6->hID)
          || lpQuestData && lpQuestData->Start.bNPC && lpQuestData->Start.NPCID == v6->hID )
          goto LABEL_22;
        return 0;
      case 8:
        if ( v6->hID == CQuest::GetRewardNPC(v8, lpQuestData) )
          goto LABEL_22;
        if ( !lpQuestData || !lpQuestData->Start.bNPC || lpQuestData->Start.NPCID != v6->hID )
          goto $LN19_67;
        eQuestState = 6;
LABEL_22:
        v9 = eQuestState;
        break;
      default:
        break;
    }
    if ( bQmark == 1 && (v9 == 5 || v9 == 20) )
    {
      if ( (unsigned int)lpQuestData->Start.LevelMin + 5 < uiMainCharLv )
        v9 = 9;
    }
    v6->eResultState = v9;
    v6->nLevel = lpQuestData->Start.LevelMin;
    result = v9 != 0;
  }
  else
  {
$LN19_67:
    result = 0;
  }
  return result;
}

//----- (00733380) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_NPCMobKill(CQuest *this, unsigned __int16 nMobID, const unsigned __int16 nQuestID)
{
  CQuest *v3; // edi@1
  int v4; // ebx@1
  int v5; // esi@4
  QUEST_DATA *v6; // eax@7
  int v7; // ebx@8
  int v8; // eax@8
  signed int v9; // ecx@12
  unsigned __int8 v10; // al@13
  int v11; // ebx@13
  PLAYER_QUEST_STATUS v12; // eax@13
  void (__thiscall *v13)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // edx@15
  QUEST_DATA *v15; // [sp-8h] [bp-28h]@15
  int bResult; // [sp+8h] [bp-18h]@1
  int v17; // [sp+Ch] [bp-14h]@8
  QUEST_DATA *pQuestData; // [sp+10h] [bp-10h]@7
  int v19; // [sp+14h] [bp-Ch]@2
  int i; // [sp+18h] [bp-8h]@1
  int nMobCount; // [sp+1Ch] [bp-4h]@8

  v3 = this;
  v4 = 0;
  bResult = 0;
  i = 0;
  if ( this->m_NumOfQuest > 0 )
  {
    v19 = 0;
    while ( 1 )
    {
      if ( v4 >= 0 )
      {
        v5 = (int)&v3->m_pQuestArray[v19];
        if ( v5 )
        {
          if ( *(_BYTE *)(v5 + 2) == 6 )
          {
            if ( nQuestID == *(_WORD *)v5 )
            {
              v6 = CQuestData::GetQuestData(v3->m_pQuestData, *(_WORD *)v5);
              pQuestData = v6;
              if ( v6 )
                break;
            }
          }
        }
      }
LABEL_21:
      ++v19;
      ++v4;
      i = v4;
      if ( v4 >= v3->m_NumOfQuest )
        return bResult;
    }
    v7 = 0;
    v8 = (int)&v6->End.NPCMobList[0].NPCMobID;
    nMobCount = 0;
    v17 = v8;
    while ( 1 )
    {
      if ( *(_BYTE *)(v8 - 2) != 1
        || *(_WORD *)v8 != nMobID
        || *(_BYTE *)(v8 + 2) != 1
        || (v9 = *(_BYTE *)(v8 + 3), *(_BYTE *)(v7 + v5 + 24) >= v9)
        || (v10 = *(_BYTE *)(v7 + v5 + 24) + 1,
            *(_BYTE *)(nMobCount + v5 + 24) = v10,
            bResult = 1,
            v3->vfptr->Occure_NPCMobKill(v3, *(_WORD *)v5, nMobID, v10, v9),
            v11 = *(_BYTE *)(v5 + 2),
            v12 = CQuest::DoingQuestUpdateStatus(v3, i),
            v11 != 6) )
        goto LABEL_19;
      if ( v12 == 8 )
        break;
      if ( v12 == 7 )
      {
        v13 = v3->vfptr->Occure_NewStatusFailed;
        v15 = pQuestData;
        goto LABEL_18;
      }
LABEL_19:
      v7 = nMobCount + 1;
      v8 = v17 + 8;
      nMobCount = v7;
      v17 += 8;
      if ( v7 >= 5 )
      {
        v4 = i;
        goto LABEL_21;
      }
    }
    v13 = v3->vfptr->Occure_NewStatusReward;
    v15 = pQuestData;
LABEL_18:
    v13(v3, (PLAYER_QUEST_INFO *)v5, v15);
    goto LABEL_19;
  }
  return 0;
}

//----- (007334C0) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_TakeItem(CQuest *this, unsigned __int16 nItemID, unsigned __int16 nCurrentLot)
{
  CQuest *v3; // esi@1
  int v4; // ebx@1
  int v5; // edi@4
  QUEST_DATA *v6; // eax@6
  int v7; // ecx@7
  signed int v8; // ebx@10
  int v9; // ebx@11
  PLAYER_QUEST_STATUS v10; // eax@11
  void (__thiscall *v11)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // edx@13
  bool v12; // zf@17
  QUEST_DATA *v14; // [sp-8h] [bp-28h]@13
  int bResult; // [sp+8h] [bp-18h]@1
  signed int v16; // [sp+Ch] [bp-14h]@7
  int v17; // [sp+10h] [bp-10h]@7
  QUEST_DATA *pQuestData; // [sp+14h] [bp-Ch]@6
  int v19; // [sp+18h] [bp-8h]@2
  int i; // [sp+1Ch] [bp-4h]@1

  v3 = this;
  v4 = 0;
  bResult = 0;
  i = 0;
  if ( this->m_NumOfQuest > 0 )
  {
    v19 = 0;
    while ( 1 )
    {
      if ( v4 >= 0 )
      {
        v5 = (int)&v3->m_pQuestArray[v19];
        if ( v5 )
        {
          if ( *(_BYTE *)(v5 + 2) == 6 )
          {
            v6 = CQuestData::GetQuestData(v3->m_pQuestData, *(_WORD *)v5);
            pQuestData = v6;
            if ( v6 )
              break;
          }
        }
      }
LABEL_19:
      ++v19;
      ++v4;
      i = v4;
      if ( v4 >= v3->m_NumOfQuest )
        return bResult;
    }
    v7 = (int)&v6->End.ItemList[0].ItemID;
    v17 = (int)&v6->End.ItemList[0].ItemID;
    v16 = 5;
    while ( 1 )
    {
      if ( *(_BYTE *)(v7 - 2) != 1
        || *(_WORD *)v7 != nItemID
        || (v8 = *(_WORD *)(v7 + 2),
            v3->vfptr->Occure_TakeItem(v3, *(_WORD *)v5, nItemID, nCurrentLot, *(_WORD *)(v7 + 2)),
            nCurrentLot > v8)
        || (v9 = *(_BYTE *)(v5 + 2), bResult = 1, v10 = CQuest::DoingQuestUpdateStatus(v3, i), v9 != 6) )
        goto LABEL_17;
      if ( v10 == 8 )
        break;
      if ( v10 == 7 )
      {
        v11 = v3->vfptr->Occure_NewStatusFailed;
        v14 = pQuestData;
        goto LABEL_16;
      }
LABEL_17:
      v7 = v17 + 6;
      v12 = v16-- == 1;
      v17 += 6;
      if ( v12 )
      {
        v4 = i;
        goto LABEL_19;
      }
    }
    v11 = v3->vfptr->Occure_NewStatusReward;
    v14 = pQuestData;
LABEL_16:
    v11(v3, (PLAYER_QUEST_INFO *)v5, v14);
    goto LABEL_17;
  }
  return 0;
}

//----- (007335D0) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_DestroyItem(CQuest *this, unsigned __int16 nItemID, unsigned __int16 nCurrentLot)
{
  CQuest *v3; // esi@1
  int v4; // edi@1
  int v5; // ebx@4
  QUEST_DATA *v6; // eax@5
  int v7; // ecx@6
  signed int v8; // edi@9
  int v9; // edi@11
  QUEST_DATA *v10; // eax@12
  void (__thiscall *v11)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // edx@18
  bool v12; // zf@22
  int CurrentStatus; // [sp+8h] [bp-1Ch]@10
  int bResult; // [sp+Ch] [bp-18h]@1
  signed int v16; // [sp+10h] [bp-14h]@6
  int v17; // [sp+14h] [bp-10h]@6
  QUEST_DATA *pQuestData; // [sp+18h] [bp-Ch]@5
  int i; // [sp+1Ch] [bp-8h]@1
  int v20; // [sp+20h] [bp-4h]@2

  v3 = this;
  v4 = 0;
  bResult = 0;
  i = 0;
  if ( this->m_NumOfQuest > 0 )
  {
    v20 = 0;
    while ( 1 )
    {
      if ( v4 >= 0 )
      {
        v5 = (int)&v3->m_pQuestArray[v20];
        if ( v5 )
        {
          v6 = CQuestData::GetQuestData(v3->m_pQuestData, *(_WORD *)v5);
          pQuestData = v6;
          if ( v6 )
            break;
        }
      }
LABEL_24:
      ++v20;
      ++v4;
      i = v4;
      if ( v4 >= v3->m_NumOfQuest )
        return bResult;
    }
    v7 = (int)&v6->End.ItemList[0].ItemID;
    v17 = (int)&v6->End.ItemList[0].ItemID;
    v16 = 5;
    while ( 1 )
    {
      if ( *(_BYTE *)(v7 - 2) != 1
        || *(_WORD *)v7 != nItemID
        || (v8 = *(_WORD *)(v7 + 2),
            v3->vfptr->Occure_DestroyItem(v3, *(_WORD *)v5, nItemID, nCurrentLot, *(_WORD *)(v7 + 2)),
            nCurrentLot >= v8) )
        goto LABEL_22;
      bResult = 1;
      CurrentStatus = *(_BYTE *)(v5 + 2);
      if ( i < v3->m_NumOfQuest && (v9 = (int)&v3->m_pQuestArray[v20]) != 0 )
      {
        v10 = CQuestData::GetQuestData(v3->m_pQuestData, *(_WORD *)v9);
        if ( v10 )
          LOBYTE(v10) = CQuest::GetNewQuestStatus(v3, v10);
        *(_BYTE *)(v9 + 2) = (_BYTE)v10;
        v10 = (QUEST_DATA *)(unsigned __int8)v10;
      }
      else
      {
        v10 = 0;
      }
      if ( CurrentStatus != 8 )
        goto LABEL_22;
      if ( v10 == (QUEST_DATA *)6 )
        break;
      if ( v10 == (QUEST_DATA *)7 )
      {
        v11 = v3->vfptr->Occure_NewStatusFailed;
        goto LABEL_21;
      }
LABEL_22:
      v7 = v17 + 6;
      v12 = v16-- == 1;
      v17 += 6;
      if ( v12 )
      {
        v4 = i;
        goto LABEL_24;
      }
    }
    v11 = v3->vfptr->Occure_NewStatusIng;
LABEL_21:
    v11(v3, (PLAYER_QUEST_INFO *)v5, pQuestData);
    goto LABEL_22;
  }
  return 0;
}

//----- (00733710) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_CheckLocation(CQuest *this)
{
  CQuest *v1; // edi@1
  void (__thiscall *v2)(CQuest *, unsigned __int16 *, unsigned int *, unsigned int *); // edx@1
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // esi@4
  QUEST_DATA *v6; // eax@6
  void (__thiscall *v7)(CQuest *, unsigned __int16, unsigned __int16); // eax@11
  int v8; // ST0C_4@11
  int v9; // ebx@11
  PLAYER_QUEST_STATUS v10; // eax@11
  void (__thiscall *v11)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // edx@13
  int v12; // eax@17
  void *v14; // [sp-8h] [bp-2Ch]@13
  unsigned int LocationX; // [sp+8h] [bp-1Ch]@1
  unsigned int LocationY; // [sp+Ch] [bp-18h]@1
  int bResult; // [sp+10h] [bp-14h]@1
  void *pQuestData; // [sp+14h] [bp-10h]@6
  int nLocation; // [sp+18h] [bp-Ch]@1
  unsigned int v20; // [sp+1Ch] [bp-8h]@2
  int i; // [sp+20h] [bp-4h]@1

  v1 = this;
  v2 = this->vfptr->GetPlayerCurrentLocation;
  bResult = 0;
  ((void (__stdcall *)(int *, unsigned int *, unsigned int *))v2)(&nLocation, &LocationX, &LocationY);
  v3 = v1->m_NumOfQuest;
  v4 = 0;
  i = 0;
  if ( v3 > 0 )
  {
    v20 = 0;
    if ( v3 <= 0 )
      goto LABEL_17;
    while ( 1 )
    {
      if ( v4 < 0
        || (v5 = (int)&v1->m_pQuestArray[v20 / 0x20]) == 0
        || *(_BYTE *)(v5 + 2) != 6
        || (v6 = CQuestData::GetQuestData(v1->m_pQuestData, *(_WORD *)v5), (pQuestData = v6) == 0)
        || v6->End.bLocation != 1
        || v6->End.Location != (_WORD)nLocation
        || *(_BYTE *)(v5 + 29) & 1
        || !v1->vfptr->IsQuestArea(
              v1,
              LocationX,
              LocationY,
              v6->End.LocationX,
              v6->End.LocationY,
              v6->End.LocationRange)
        || (*(_BYTE *)(v5 + 29) |= 1u,
            v7 = v1->vfptr->Occure_CheckLocation,
            v8 = *(_WORD *)v5,
            bResult = 1,
            v7(v1, v8, nLocation),
            v9 = *(_BYTE *)(v5 + 2),
            v10 = CQuest::DoingQuestUpdateStatus(v1, i),
            v9 != 6) )
        goto LABEL_17;
      if ( v10 == 8 )
        break;
      if ( v10 == 7 )
      {
        v11 = v1->vfptr->Occure_NewStatusFailed;
        v14 = pQuestData;
        goto LABEL_16;
      }
LABEL_17:
      v12 = v1->m_NumOfQuest;
      v20 += 32;
      v4 = i + 1;
      i = v4;
      if ( v4 >= v12 )
        return bResult;
    }
    v11 = v1->vfptr->Occure_NewStatusReward;
    v14 = pQuestData;
LABEL_16:
    v11(v1, (PLAYER_QUEST_INFO *)v5, (QUEST_DATA *)v14);
    goto LABEL_17;
  }
  return 0;
}

//----- (00733850) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_ScenarioDone(CQuest *this, unsigned __int16 nScenarioID)
{
  CQuest *v2; // edi@1
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // esi@4
  QUEST_DATA *v6; // eax@6
  char v7; // al@9
  int v8; // ebx@10
  PLAYER_QUEST_STATUS v9; // eax@10
  void (__thiscall *v10)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // edx@12
  QUEST_DATA *v12; // [sp-Ch] [bp-20h]@12
  int bResult; // [sp+4h] [bp-10h]@1
  QUEST_DATA *pQuestData; // [sp+8h] [bp-Ch]@6
  int v15; // [sp+Ch] [bp-8h]@2
  int i; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->m_NumOfQuest;
  v4 = 0;
  bResult = 0;
  i = 0;
  if ( v3 > 0 )
  {
    v15 = 0;
    while ( 1 )
    {
      if ( v4 < 0
        || (v5 = (int)&v2->m_pQuestArray[v15]) == 0
        || *(_BYTE *)(v5 + 2) != 6
        || (v6 = CQuestData::GetQuestData(v2->m_pQuestData, *(_WORD *)v5), (pQuestData = v6) == 0)
        || v6->End.bScenario != 1
        || v6->End.ScenarioID != nScenarioID
        || (v7 = *(_BYTE *)(v5 + 29), v7 & 2)
        || (*(_BYTE *)(v5 + 29) = v7 | 2,
            bResult = 1,
            v2->vfptr->Occure_ScenarioDone(v2, *(_WORD *)v5, nScenarioID),
            v8 = *(_BYTE *)(v5 + 2),
            v9 = CQuest::DoingQuestUpdateStatus(v2, i),
            v8 != 6) )
        goto LABEL_16;
      if ( v9 == 8 )
        break;
      if ( v9 == 7 )
      {
        v10 = v2->vfptr->Occure_NewStatusFailed;
        v12 = pQuestData;
        goto LABEL_15;
      }
LABEL_16:
      ++v15;
      v4 = i + 1;
      i = v4;
      if ( v4 >= v2->m_NumOfQuest )
        return bResult;
    }
    v10 = v2->vfptr->Occure_NewStatusReward;
    v12 = pQuestData;
LABEL_15:
    v10(v2, (PLAYER_QUEST_INFO *)v5, v12);
    goto LABEL_16;
  }
  return 0;
}

//----- (00733940) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_RaceChange(CQuest *this, char nRace)
{
  CQuest *v2; // esi@1
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // edi@4
  QUEST_DATA *v6; // eax@6
  int v7; // ebx@9
  PLAYER_QUEST_STATUS v8; // eax@9
  void (__thiscall *v9)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // edx@11
  QUEST_DATA *v11; // [sp-Ch] [bp-20h]@11
  int bResult; // [sp+4h] [bp-10h]@1
  QUEST_DATA *pQuestData; // [sp+8h] [bp-Ch]@6
  int v14; // [sp+Ch] [bp-8h]@2
  int i; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->m_NumOfQuest;
  v4 = 0;
  bResult = 0;
  i = 0;
  if ( v3 > 0 )
  {
    v14 = 0;
    while ( 1 )
    {
      if ( v4 < 0
        || (v5 = (int)&v2->m_pQuestArray[v14]) == 0
        || *(_BYTE *)(v5 + 2) != 6
        || (v6 = CQuestData::GetQuestData(v2->m_pQuestData, *(_WORD *)v5), (pQuestData = v6) == 0)
        || v6->End.bRace != 1
        || v6->End.Race != nRace
        || (bResult = 1,
            v2->vfptr->Occure_RaceChange(v2, *(_WORD *)v5, nRace),
            v7 = *(_BYTE *)(v5 + 2),
            v8 = CQuest::DoingQuestUpdateStatus(v2, i),
            v7 != 6) )
        goto LABEL_15;
      if ( v8 == 8 )
        break;
      if ( v8 == 7 )
      {
        v9 = v2->vfptr->Occure_NewStatusFailed;
        v11 = pQuestData;
        goto LABEL_14;
      }
LABEL_15:
      ++v14;
      v4 = i + 1;
      i = v4;
      if ( v4 >= v2->m_NumOfQuest )
        return bResult;
    }
    v9 = v2->vfptr->Occure_NewStatusReward;
    v11 = pQuestData;
LABEL_14:
    v9(v2, (PLAYER_QUEST_INFO *)v5, v11);
    goto LABEL_15;
  }
  return 0;
}

//----- (00733A20) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_ClassChange(CQuest *this, char nClass)
{
  CQuest *v2; // esi@1
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // edi@4
  QUEST_DATA *v6; // eax@6
  int v7; // ebx@9
  PLAYER_QUEST_STATUS v8; // eax@9
  void (__thiscall *v9)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // edx@11
  QUEST_DATA *v11; // [sp-Ch] [bp-20h]@11
  int bResult; // [sp+4h] [bp-10h]@1
  QUEST_DATA *pQuestData; // [sp+8h] [bp-Ch]@6
  int v14; // [sp+Ch] [bp-8h]@2
  int i; // [sp+10h] [bp-4h]@1

  v2 = this;
  v3 = this->m_NumOfQuest;
  v4 = 0;
  bResult = 0;
  i = 0;
  if ( v3 > 0 )
  {
    v14 = 0;
    while ( 1 )
    {
      if ( v4 < 0
        || (v5 = (int)&v2->m_pQuestArray[v14]) == 0
        || *(_BYTE *)(v5 + 2) != 6
        || (v6 = CQuestData::GetQuestData(v2->m_pQuestData, *(_WORD *)v5), (pQuestData = v6) == 0)
        || v6->End.bClass != 1
        || v6->End.Class != nClass
        || (bResult = 1,
            v2->vfptr->Occure_ClassChange(v2, *(_WORD *)v5, nClass),
            v7 = *(_BYTE *)(v5 + 2),
            v8 = CQuest::DoingQuestUpdateStatus(v2, i),
            v7 != 6) )
        goto LABEL_15;
      if ( v8 == 8 )
        break;
      if ( v8 == 7 )
      {
        v9 = v2->vfptr->Occure_NewStatusFailed;
        v11 = pQuestData;
        goto LABEL_14;
      }
LABEL_15:
      ++v14;
      v4 = i + 1;
      i = v4;
      if ( v4 >= v2->m_NumOfQuest )
        return bResult;
    }
    v9 = v2->vfptr->Occure_NewStatusReward;
    v11 = pQuestData;
LABEL_14:
    v9(v2, (PLAYER_QUEST_INFO *)v5, v11);
    goto LABEL_15;
  }
  return 0;
}

//----- (00733B00) --------------------------------------------------------
int __thiscall CQuest::QuestPlayer_TimeProcess(CQuest *this)
{
  CQuest *v1; // esi@1
  int v2; // eax@1
  int v4; // edx@3
  int v5; // eax@3
  int v6; // edi@6
  QUEST_DATA *v7; // eax@8
  QUEST_DATA *v8; // ebx@8
  int v9; // eax@10
  int v10; // eax@11
  int v11; // ST18_4@11
  PLAYER_QUEST_STATUS v12; // eax@11
  void (__thiscall *v13)(CQuest *, PLAYER_QUEST_INFO *, QUEST_DATA *); // eax@13
  int PassedTime; // [sp+Ch] [bp-10h]@3
  int bResult; // [sp+10h] [bp-Ch]@1
  int v16; // [sp+14h] [bp-8h]@4
  int i; // [sp+18h] [bp-4h]@3

  v1 = this;
  bResult = 0;
  v2 = _time32(0);
  if ( v2 == v1->m_ProcessedTime )
    return 0;
  v4 = (unsigned __int16)(LOWORD(v1->m_ProcessedTime) - v2);
  v1->m_ProcessedTime = v2;
  v5 = 0;
  PassedTime = v4;
  i = 0;
  if ( v1->m_NumOfQuest > 0 )
  {
    v16 = 0;
    if ( v1->m_NumOfQuest <= 0 )
      goto LABEL_17;
    while ( 1 )
    {
      if ( v5 < 0
        || (v6 = (int)&v1->m_pQuestArray[v16]) == 0
        || *(_BYTE *)(v6 + 2) != 6
        || (v7 = CQuestData::GetQuestData(v1->m_pQuestData, *(_WORD *)v6), (v8 = v7) == 0)
        || v7->End.bTimeLimit != 1
        || (v9 = *(_WORD *)(v6 + 30), v8->End.TimeLimit < (unsigned __int16)v9)
        || (v10 = PassedTime + v9,
            bResult = 1,
            *(_WORD *)(v6 + 30) = v10,
            v1->vfptr->Occure_TimeProcess(v1, *(_WORD *)v6, v10, v8->End.TimeLimit),
            v11 = *(_BYTE *)(v6 + 2),
            v12 = CQuest::DoingQuestUpdateStatus(v1, i),
            v11 != 6) )
        goto LABEL_17;
      if ( v12 == 8 )
        break;
      if ( v12 == 7 )
      {
        v13 = v1->vfptr->Occure_NewStatusFailed;
        goto LABEL_16;
      }
LABEL_17:
      ++v16;
      v5 = i + 1;
      i = v5;
      if ( v5 >= v1->m_NumOfQuest )
        return bResult;
    }
    v13 = v1->vfptr->Occure_NewStatusReward;
LABEL_16:
    v13(v1, (PLAYER_QUEST_INFO *)v6, v8);
    goto LABEL_17;
  }
  return bResult;
}

//----- (00733C10) --------------------------------------------------------
void __thiscall CQuest::AllDoingQuestUpdateStatus(CQuest *this)
{
  CQuest *v1; // edi@1
  int v2; // ebx@1
  int v3; // esi@4
  QUEST_DATA *v4; // eax@5
  int v5; // [sp+8h] [bp-4h]@2

  v1 = this;
  v2 = 0;
  if ( this->m_NumOfQuest > 0 )
  {
    v5 = 0;
    do
    {
      if ( v2 >= 0 )
      {
        v3 = (int)&v1->m_pQuestArray[v5];
        if ( v3 )
        {
          v4 = CQuestData::GetQuestData(v1->m_pQuestData, *(_WORD *)v3);
          if ( v4 )
            LOBYTE(v4) = CQuest::GetNewQuestStatus(v1, v4);
          *(_BYTE *)(v3 + 2) = (_BYTE)v4;
        }
      }
      ++v5;
      ++v2;
    }
    while ( v2 < v1->m_NumOfQuest );
  }
}

//----- (00733C60) --------------------------------------------------------
int __thiscall CQuest::GetQuestListWithNPC(CQuest *this, unsigned __int16 hNCPID)
{
  QUEST_DATA_HEAD *v2; // ebx@1
  CQuest *v3; // esi@1
  unsigned int j; // edi@1
  CQuestData *v5; // ecx@2
  QUEST_DATA_HEAD *v6; // eax@2
  unsigned __int16 v7; // ax@3
  QUEST_DATA *v8; // eax@6
  void *v9; // eax@14
  unsigned int v11; // edx@17
  int v12; // edi@17
  CQuestData *v13; // ecx@18
  QUEST_DATA_HEAD *v14; // eax@18
  signed __int16 v15; // ax@19
  QUEST_DATA *v16; // eax@22
  QUEST_DATA *v17; // ebx@22
  PLAYER_QUEST_STATUS v18; // eax@24
  int v19; // eax@24
  CQuest::NPC_QUEST_STATUS TempQuestStatus; // [sp+Ch] [bp-18h]@1
  int iBF; // [sp+1Ch] [bp-8h]@17
  unsigned int i; // [sp+20h] [bp-4h]@17

  v2 = 0;
  v3 = this;
  this->m_NumOfQuestListWithNPC = 0;
  this->m_MaxOfQuestListWithNPC = 0;
  TempQuestStatus.hID = hNCPID;
  for ( j = 0; ; ++j )
  {
    v5 = v3->m_pQuestData;
    v6 = v5->m_pDataHead;
    v7 = v6 ? v6->NumOfQuest : 0;
    if ( (signed int)j >= v7 )
      break;
    v8 = CQuestData::GetQuestDataByIndex(v5, j);
    if ( v8 )
    {
      if ( CQuest::GetQuestStatusWithNPC(v3, &TempQuestStatus, v8, 0, 0, 0) )
        ++v3->m_NumOfQuestListWithNPC;
    }
  }
  if ( v3->m_NumOfQuestListWithNPC > v3->m_MaxOfQuestListWithNPC && v3->m_pQuestListWithNPC )
  {
    operator delete__(v3->m_pQuestListWithNPC);
    v3->m_pQuestListWithNPC = 0;
  }
  if ( !v3->m_pQuestListWithNPC )
  {
    v9 = operator new__(16 * v3->m_NumOfQuestListWithNPC);
    v3->m_pQuestListWithNPC = (CQuest::NPC_QUEST_STATUS *)v9;
    if ( !v9 )
    {
      v3->m_NumOfQuestListWithNPC = 0;
      v3->m_MaxOfQuestListWithNPC = 0;
      return 0;
    }
    v3->m_MaxOfQuestListWithNPC = v3->m_NumOfQuestListWithNPC;
  }
  v11 = 0;
  iBF = 0;
  i = 0;
  v12 = 0;
  while ( 1 )
  {
    v13 = v3->m_pQuestData;
    v14 = v13->m_pDataHead;
    v15 = v14 == v2 ? 0 : v14->NumOfQuest;
    if ( (signed int)v11 >= (unsigned __int16)v15 )
      break;
    v16 = CQuestData::GetQuestDataByIndex(v13, v11);
    v17 = v16;
    if ( v16 )
    {
      if ( CQuest::GetQuestStatusWithNPC(v3, &TempQuestStatus, v16, 0, 0, 0) )
      {
        v3->m_pQuestListWithNPC[v12].hID = hNCPID;
        v18 = TempQuestStatus.eResultState;
        v3->m_pQuestListWithNPC[v12].lpQuestData = v17;
        v3->m_pQuestListWithNPC[v12].eResultState = v18;
        v19 = iBF;
        v3->m_pQuestListWithNPC[v12].nLevel = v17->Start.LevelMin;
        ++v12;
        iBF = v19 + 1;
        if ( v19 + 1 >= v3->m_MaxOfQuestListWithNPC )
        {
          v2 = 0;
          return iBF != (_DWORD)v2;
        }
      }
    }
    ++i;
    v11 = i;
    v2 = 0;
  }
  return iBF != (_DWORD)v2;
}

//----- (00733DB0) --------------------------------------------------------
void __thiscall CQuest::GetQuestStatusWithNPC(CQuest *this, CQuest::NPC_QUEST_STATUS *kQuestStatus, PLAYER_QUEST_STATUS eDontWantStatus, unsigned int uiMainCharLv, bool bLowRepeat)
{
  CQuest *v5; // ebx@1
  CQuest::NPC_QUEST_STATUS *v6; // esi@1
  unsigned __int16 v7; // ax@1
  PLAYER_QUEST_STATUS v8; // edi@1
  CQuestData *v9; // ecx@1
  void *v10; // ecx@1
  int v11; // edx@1
  signed int v12; // eax@1
  void *v13; // eax@2
  int v14; // edx@2
  int v15; // esi@7
  bool v16; // zf@10
  unsigned int v17; // ecx@12
  unsigned int v18; // edx@12
  signed int v19; // ecx@21
  CQuest::NPC_QUEST_STATUS TempQuestStatus; // [sp+0h] [bp-3Ch]@1
  std::vector<QUEST_DATA *,std::allocator<QUEST_DATA *> > vecMobidAscociatedQuestData; // [sp+10h] [bp-2Ch]@1
  int i; // [sp+20h] [bp-1Ch]@1
  CQuest *v23; // [sp+24h] [bp-18h]@1
  void *lpResultData; // [sp+28h] [bp-14h]@1
  int nLevel; // [sp+2Ch] [bp-10h]@1
  int v26; // [sp+38h] [bp-4h]@1

  v5 = this;
  v23 = this;
  v6 = kQuestStatus;
  v7 = kQuestStatus->hID;
  v8 = 0;
  lpResultData = 0;
  nLevel = -1;
  TempQuestStatus.hID = v7;
  *(_DWORD *)&vecMobidAscociatedQuestData.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  vecMobidAscociatedQuestData.baseclass_0._Mylast = 0;
  vecMobidAscociatedQuestData.baseclass_0._Myend = 0;
  v9 = this->m_pQuestData;
  v26 = 0;
  CQuestData::GetMobIdAssociatedWithQuestData(v9, v7, &vecMobidAscociatedQuestData);
  v10 = *(void **)&vecMobidAscociatedQuestData;
  v11 = 0;
  v12 = (signed int)((char *)vecMobidAscociatedQuestData.baseclass_0._Mylast - *(_DWORD *)&vecMobidAscociatedQuestData) >> 2;
  i = 0;
  if ( v12 <= 0 )
    goto LABEL_2;
  while ( 1 )
  {
    if ( v12 <= (unsigned int)v11 )
      std::_Xout_of_range("invalid vector<T> subscript");
    v15 = *((_DWORD *)v10 + v11);
    if ( CQuest::GetQuestStatusWithNPC(v5, &TempQuestStatus, *((QUEST_DATA **)v10 + v11), uiMainCharLv, 1, bLowRepeat) )
    {
      if ( TempQuestStatus.eResultState == eDontWantStatus )
      {
        if ( lpResultData )
          goto LABEL_28;
        v16 = *(_BYTE *)(v15 + 26) == 0;
        lpResultData = (void *)v15;
        v8 = TempQuestStatus.eResultState;
        if ( !v16 )
        {
          nLevel = *(_BYTE *)(v15 + 27);
          goto LABEL_28;
        }
LABEL_27:
        nLevel = -1;
        goto LABEL_28;
      }
      v17 = v23->m_QuestStatusPriority[TempQuestStatus.eResultState];
      v18 = v23->m_QuestStatusPriority[v8];
      if ( v17 < v18 || v8 == eDontWantStatus )
      {
        v16 = *(_BYTE *)(v15 + 26) == 0;
        lpResultData = (void *)v15;
        v8 = TempQuestStatus.eResultState;
        if ( !v16 )
        {
          nLevel = *(_BYTE *)(v15 + 27);
          goto LABEL_28;
        }
        goto LABEL_27;
      }
      if ( v17 == v18 )
      {
        if ( *(_BYTE *)(v15 + 26) )
          v19 = *(_BYTE *)(v15 + 27);
        else
          v19 = -1;
        if ( v19 < nLevel )
        {
          lpResultData = (void *)v15;
          v8 = TempQuestStatus.eResultState;
          nLevel = v19;
        }
      }
      else
      {
        if ( v17 > v18 && (v8 == 9 || v8 == 20) )
        {
          v16 = *(_BYTE *)(v15 + 26) == 0;
          lpResultData = (void *)v15;
          v8 = TempQuestStatus.eResultState;
          if ( !v16 )
          {
            nLevel = *(_BYTE *)(v15 + 27);
            goto LABEL_28;
          }
          goto LABEL_27;
        }
      }
    }
LABEL_28:
    v10 = *(void **)&vecMobidAscociatedQuestData;
    v11 = i + 1;
    v12 = (signed int)((char *)vecMobidAscociatedQuestData.baseclass_0._Mylast - *(_DWORD *)&vecMobidAscociatedQuestData) >> 2;
    i = v11;
    if ( v11 >= v12 )
      break;
    v5 = v23;
  }
  v6 = kQuestStatus;
LABEL_2:
  v13 = lpResultData;
  v14 = nLevel;
  v6->eResultState = v8;
  v6->lpQuestData = (QUEST_DATA *)v13;
  v6->nLevel = v14;
  if ( v10 )
    operator delete(v10);
}

//----- (00733F50) --------------------------------------------------------
char __thiscall ShineObjectHandleUnion::sohu_HandleSplit(ShineObjectHandleUnion *this, unsigned __int16 *hnd)
{
  unsigned __int16 v2; // ax@1
  char result; // al@2

  v2 = this->sohu_Handle;
  if ( this->sohu_Handle >= 0x1F40u )
  {
    if ( v2 >= 0x251Cu )
    {
      if ( v2 < 0x251Cu || v2 >= 0x2904u )
      {
        if ( v2 < 0x2904u || v2 >= 0x34BCu )
        {
          if ( v2 < 0x34BCu || v2 >= 0x42BCu )
          {
            if ( v2 < 0x42BCu || v2 >= 0x43BCu )
            {
              if ( v2 < 0x43BCu || v2 >= 0x4BBCu )
              {
                if ( v2 < 0x4BBCu || v2 >= 0x4FA4u )
                {
                  if ( v2 < 0x4FA4u || v2 >= 0x509Eu )
                  {
                    if ( v2 < 0x509Eu || v2 >= 0x5486u )
                    {
                      if ( v2 < 0x5486u || v2 >= 0x567Au )
                      {
                        if ( v2 < 0x567Au || v2 >= 0x5A62u )
                        {
                          if ( v2 < 0x5C56u || v2 >= 0x6232u )
                          {
                            *hnd = -1;
                            result = -1;
                          }
                          else
                          {
                            *hnd = v2 - 23638;
                            result = 12;
                          }
                        }
                        else
                        {
                          *hnd = v2 - 22138;
                          result = 11;
                        }
                      }
                      else
                      {
                        *hnd = v2 - 21638;
                        result = 10;
                      }
                    }
                    else
                    {
                      *hnd = v2 - 20638;
                      result = 7;
                    }
                  }
                  else
                  {
                    *hnd = v2 - 20388;
                    result = 6;
                  }
                }
                else
                {
                  *hnd = v2 - 19388;
                  result = 9;
                }
              }
              else
              {
                *hnd = v2 - 17340;
                result = 8;
              }
            }
            else
            {
              *hnd = v2 - 17084;
              result = 4;
            }
          }
          else
          {
            *hnd = v2 - 13500;
            result = 0;
          }
        }
        else
        {
          *hnd = v2 - 10500;
          result = 1;
        }
      }
      else
      {
        *hnd = v2 - 9500;
        result = 3;
      }
    }
    else
    {
      *hnd = v2 - 8000;
      result = 2;
    }
  }
  else
  {
    *hnd = v2;
    result = 5;
  }
  return result;
}

//----- (00734130) --------------------------------------------------------
void __thiscall CWeaponTitle::CWeaponTitle(CWeaponTitle *this)
{
  CWeaponTitle *v1; // esi@1

  v1 = this;
  CDataReader::CDataReader(&this->m_WeaponTitleData);
  v1->m_ppWTDArray = 0;
  v1->m_MaxArrayIndex = 0;
}

//----- (00734150) --------------------------------------------------------
int __thiscall CWeaponTitle::Read(CWeaponTitle *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize)
{
  CWeaponTitle *v4; // esi@1
  unsigned int v5; // edi@1
  int result; // eax@3
  CDataReader::HEAD *v7; // eax@4
  unsigned int v8; // ebx@5
  void *v9; // eax@8
  unsigned __int8 v10; // cl@8
  int v11; // eax@9
  unsigned int v12; // edi@12
  void *v13; // eax@13
  unsigned int v14; // ST08_4@13
  unsigned int v15; // edi@13
  void *v16; // eax@14

  v4 = this;
  v5 = 0;
  if ( this->m_ppWTDArray )
  {
    operator delete__(this->m_ppWTDArray);
    v4->m_ppWTDArray = 0;
  }
  v4->m_MaxArrayIndex = 0;
  result = CDataReader::Read(&v4->m_WeaponTitleData, pFN, nVersionKey, nStructSize);
  if ( result )
  {
    v7 = v4->m_WeaponTitleData.m_pHead;
    if ( v7 )
      v8 = v7->nNumOfRecord;
    else
      v8 = 0;
    if ( v8 )
    {
      while ( 1 )
      {
        v9 = CDataReader::GetRecord(&v4->m_WeaponTitleData, v5);
        v10 = *((_BYTE *)v9 + 2);
        if ( v10 >= 0xAu )
          break;
        v11 = v10 + 10 * *(_WORD *)v9;
        if ( v4->m_MaxArrayIndex <= v11 )
          v4->m_MaxArrayIndex = v11 + 1;
        ++v5;
        if ( v5 >= v8 )
          goto LABEL_12;
      }
      result = 0;
    }
    else
    {
LABEL_12:
      v12 = v4->m_MaxArrayIndex;
      if ( v12 )
      {
        v13 = operator new__(4 * v12);
        v14 = 4 * v4->m_MaxArrayIndex;
        v4->m_ppWTDArray = (WEAPON_TITLE_DATA **)v13;
        memset((char *)v13, 0, v14);
        v15 = 0;
        if ( v8 )
        {
          do
          {
            v16 = CDataReader::GetRecord(&v4->m_WeaponTitleData, v15++);
            v4->m_ppWTDArray[*((_BYTE *)v16 + 2) + 10 * *(_WORD *)v16] = (WEAPON_TITLE_DATA *)v16;
          }
          while ( v15 < v8 );
        }
      }
      result = 1;
    }
  }
  return result;
}

//----- (00734250) --------------------------------------------------------
unsigned int __thiscall CWeaponTitle::GetMaxLevel(CWeaponTitle *this, unsigned __int16 MobID)
{
  unsigned int v2; // edi@1
  int v3; // edx@1
  unsigned int result; // eax@2
  unsigned int v5; // eax@3
  int v6; // esi@3

  v2 = this->m_MaxArrayIndex;
  v3 = 10 * MobID;
  if ( v3 < v2 )
  {
    v5 = 0;
    v6 = 10 * MobID;
    do
    {
      if ( v5 + v3 >= v2 )
        break;
      if ( !this->m_ppWTDArray[v6] )
        break;
      ++v5;
      ++v6;
    }
    while ( v5 < 0xA );
    result = v5 - 1;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (007342A0) --------------------------------------------------------
unsigned int __thiscall CWeaponTitle::GetLevel(CWeaponTitle *this, unsigned __int16 MobID, unsigned int MobKillCount)
{
  unsigned int v3; // edi@1
  unsigned int result; // eax@2
  int v5; // esi@3
  WEAPON_TITLE_DATA *v6; // edx@5

  v3 = 10 * MobID;
  if ( v3 < this->m_MaxArrayIndex )
  {
    result = 0;
    v5 = 10 * MobID;
    do
    {
      if ( result + v3 >= this->m_MaxArrayIndex )
        break;
      v6 = this->m_ppWTDArray[v5];
      if ( !v6 )
        break;
      if ( MobKillCount < v6->MobKillCount )
        return result;
      ++result;
      ++v5;
    }
    while ( result < 0xA );
    --result;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (007342F0) --------------------------------------------------------
WEAPON_TITLE_DATA *__thiscall CWeaponTitle::GetLevelData(CWeaponTitle *this, unsigned __int16 MobID, unsigned int MobKillCount, unsigned int *pLevel)
{
  unsigned int v4; // eax@1
  int v5; // ecx@1
  WEAPON_TITLE_DATA *result; // eax@2
  int v7; // eax@3

  v4 = CWeaponTitle::GetLevel(this, MobID, MobKillCount);
  *pLevel = v4;
  if ( v4 == -1 || (v7 = v4 + 10 * MobID, (unsigned int)v7 >= *(_DWORD *)(v5 + 68)) )
    result = 0;
  else
    result = *(WEAPON_TITLE_DATA **)(*(_DWORD *)(v5 + 64) + 4 * v7);
  return result;
}

//----- (00734330) --------------------------------------------------------
WEAPON_TITLE_DATA *__thiscall CWeaponTitle::GetPrevLevelData(CWeaponTitle *this, unsigned __int16 MobID, unsigned int dwLevel)
{
  unsigned int v3; // eax@2
  WEAPON_TITLE_DATA *result; // eax@3

  if ( dwLevel - 1 > 9 || (v3 = dwLevel + 10 * MobID - 1, v3 >= this->m_MaxArrayIndex) )
    result = 0;
  else
    result = this->m_ppWTDArray[v3];
  return result;
}

//----- (00734360) --------------------------------------------------------
WEAPON_TITLE_DATA *__thiscall CWeaponTitle::GetData(CWeaponTitle *this, unsigned __int16 MobID, unsigned int Level)
{
  unsigned int v3; // eax@1
  WEAPON_TITLE_DATA *result; // eax@2

  v3 = Level + 10 * MobID;
  if ( v3 < this->m_MaxArrayIndex )
    result = this->m_ppWTDArray[v3];
  else
    result = 0;
  return result;
}

//----- (00734390) --------------------------------------------------------
void __thiscall CWeaponTitle::_CWeaponTitle(CWeaponTitle *this)
{
  CWeaponTitle *v1; // esi@1

  v1 = this;
  if ( this->m_ppWTDArray )
  {
    operator delete__(this->m_ppWTDArray);
    v1->m_ppWTDArray = 0;
  }
  v1->m_MaxArrayIndex = 0;
  CDataReader::_CDataReader(&v1->m_WeaponTitleData);
}

//----- (007343C0) --------------------------------------------------------
int __thiscall CCharacterTitleData::Read(CCharacterTitleData *this, const char *pFN, unsigned int nVersionKey, unsigned int nStructSize)
{
  return CDataReader::Read(&this->m_CharacterTitleData, pFN, nVersionKey, nStructSize);
}

//----- (007343D0) --------------------------------------------------------
const char *__thiscall CCharacterTitleData::GetTitleString(CCharacterTitleData *this, char Type, char ElementNo)
{
  CDataReader::HEAD *v3; // eax@1
  void *v4; // eax@3
  const char *result; // eax@5

  v3 = this->m_CharacterTitleData.m_pHead;
  if ( v3
    && (unsigned __int8)Type < v3->nNumOfRecord
    && (v4 = CDataReader::GetRecord(&this->m_CharacterTitleData, (unsigned __int8)Type)) != 0 )
  {
    switch ( ElementNo )
    {
      case 0:
        result = (char *)v4 + 12;
        break;
      case 1:
        result = (char *)v4 + 52;
        break;
      case 2:
        result = (char *)v4 + 92;
        break;
      case 3:
        result = (char *)v4 + 132;
        break;
      default:
        goto LABEL_9;
    }
  }
  else
  {
LABEL_9:
    result = szCTNull;
  }
  return result;
}

//----- (00734440) --------------------------------------------------------
void __thiscall CShnDataFileCheckSum::_unnamed_type_CheckSumData_::_unnamed_type_CheckSumData_(CShnDataFileCheckSum::<unnamed-type-CheckSumData> *this)
{
  *(_QWORD *)&this->CheckSum.n8_name[24] = 0i64;
  *(_QWORD *)&this->CheckSum.n8_name[16] = 0i64;
  *(_QWORD *)&this->CheckSum.n8_name[8] = 0i64;
  *(_QWORD *)&this->CheckSum.n8_name[0] = 0i64;
}

//----- (00734460) --------------------------------------------------------
char __thiscall CShnDataFileCheckSum::InitDataFileCheckSum(CShnDataFileCheckSum *this, const char *FileName, Name8 nCheckSum)
{
  const char *v3; // eax@1
  const char v4; // cl@2
  int v5; // eax@3
  char v6; // cl@4
  int v7; // ebx@5
  int i; // esi@5
  char *v9; // edi@7
  signed int v10; // esi@8
  const char *v11; // eax@8
  bool v12; // cf@11
  bool v13; // zf@11
  int v15; // eax@17
  CShnDataFileCheckSum *Index; // [sp+0h] [bp-8Ch]@1
  char Token[4]; // [sp+4h] [bp-88h]@1
  char FileNameBuff[128]; // [sp+8h] [bp-84h]@2
  unsigned int v19; // [sp+88h] [bp-4h]@1
  int v20; // [sp+8Ch] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  Index = this;
  strcpy(Token, "/\\");
  v3 = FileName;
  Token[3] = 0;
  do
  {
    v4 = *v3;
    v3[FileNameBuff - FileName] = *v3;
    ++v3;
  }
  while ( v4 );
  v5 = (int)FileNameBuff;
  do
    v6 = *(_BYTE *)v5++;
  while ( v6 );
  v7 = v5 - (_DWORD)&FileNameBuff[1];
  for ( i = 0; i < v7; ++i )
    FileNameBuff[i] = tolower(FileNameBuff[i]);
  v9 = strtok(FileNameBuff, Token);
  if ( v9 )
  {
    while ( 1 )
    {
      v10 = 0;
      v11 = Index->CheckSumData[0].DataFileName;
      do
      {
        if ( !strcmp(v11, v9) )
          break;
        ++v10;
        v11 += 65;
      }
      while ( v10 < 50 );
      v12 = (unsigned int)v10 < 0x32;
      v13 = v10 == 50;
      if ( v10 != 50 )
        break;
      v9 = strtok(0, Token);
      if ( !v9 )
        return 1;
    }
  }
  else
  {
    v10 = (signed int)Index;
    v12 = (unsigned int)Index < 0x32;
    v13 = Index == (CShnDataFileCheckSum *)50;
    if ( Index == (CShnDataFileCheckSum *)50 )
      return 1;
  }
  if ( v12 | v13 && Index->InitCheckSumCnt <= 50 )
  {
    v15 = (int)((char *)Index + 64 * v10 + v10);
    *(_QWORD *)(v15 + 5) = *(_QWORD *)&nCheckSum;
    *(_QWORD *)(v15 + 13) = *(_QWORD *)&nCheckSum.n8_name[8];
    *(_QWORD *)(v15 + 21) = *(_QWORD *)&nCheckSum.n8_name[16];
    *(_QWORD *)(v15 + 29) = *(_QWORD *)&nCheckSum.n8_name[24];
    *(_BYTE *)(v15 + 4) = 1;
    ++Index->InitCheckSumCnt;
    return 1;
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00734610) --------------------------------------------------------
Name8 *__thiscall CShnDataFileCheckSum::GetDataFileCheckSum(CShnDataFileCheckSum *this, SHN_DATA_FILE_INDEX Index)
{
  Name8 *result; // eax@2

  if ( (unsigned int)Index > 0x31 )
    result = 0;
  else
    result = (Name8 *)((char *)&this->CheckSumData[0].CheckSum + 64 * Index + Index);
  return result;
}

//----- (00734630) --------------------------------------------------------
char *__thiscall CShnDataFileCheckSum::GetDataFileName(CShnDataFileCheckSum *this, SHN_DATA_FILE_INDEX Index)
{
  char *result; // eax@2

  if ( (unsigned int)Index > 0x31 )
    result = 0;
  else
    result = &this->CheckSumData[0].DataFileName[64 * Index] + Index;
  return result;
}

//----- (00734650) --------------------------------------------------------
void __thiscall CShnDataFileCheckSum::CShnDataFileCheckSum(CShnDataFileCheckSum *this)
{
  CShnDataFileCheckSum *v1; // ebx@1
  char *v2; // esi@1
  char *v3; // eax@1
  signed int v4; // ecx@1
  const char *v5; // edi@3
  signed int i; // esi@4
  unsigned int FileNameLen; // [sp+Ch] [bp-8h]@4
  signed int v8; // [sp+10h] [bp-4h]@3

  v1 = this;
  v2 = (char *)this->CheckSumData;
  _eh_vector_constructor_iterator_(
    this->CheckSumData,
    0x41u,
    50,
    (void (__thiscall *)(void *))CShnDataFileCheckSum::_unnamed_type_CheckSumData_::_unnamed_type_CheckSumData_,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->InitCheckSumCnt = 0;
  v3 = v2;
  v4 = 50;
  do
  {
    *v3 = 0;
    v3 += 65;
    --v4;
  }
  while ( v4 );
  *(_DWORD *)&v1->CheckSumData[0].DataFileName[0] = *(_DWORD *)"Abstate.shn";
  *(_DWORD *)&v1->CheckSumData[0].DataFileName[4] = *(_DWORD *)"ate.shn";
  *(_DWORD *)&v1->CheckSumData[0].DataFileName[8] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[1].DataFileName[0] = *(_DWORD *)"ActiveSkill.shn";
  *(_DWORD *)&v1->CheckSumData[1].DataFileName[4] = *(_DWORD *)"veSkill.shn";
  *(_DWORD *)&v1->CheckSumData[1].DataFileName[8] = *(_DWORD *)"ill.shn";
  *(_DWORD *)&v1->CheckSumData[1].DataFileName[12] = *(_DWORD *)"shn";
  memcpy(v1->CheckSumData[2].DataFileName, "CharacterTitleData.shn", 0x17u);
  *(_DWORD *)&v1->CheckSumData[3].DataFileName[0] = *(_DWORD *)"ChargedEffect.shn";
  *(_DWORD *)&v1->CheckSumData[3].DataFileName[4] = *(_DWORD *)"gedEffect.shn";
  *(_DWORD *)&v1->CheckSumData[3].DataFileName[8] = *(_DWORD *)"ffect.shn";
  *(_DWORD *)&v1->CheckSumData[3].DataFileName[12] = *(_DWORD *)"t.shn";
  *(_WORD *)&v1->CheckSumData[3].DataFileName[16] = *(_WORD *)"n";
  *(_DWORD *)&v1->CheckSumData[4].DataFileName[0] = *(_DWORD *)"ClassName.shn";
  *(_DWORD *)&v1->CheckSumData[4].DataFileName[4] = *(_DWORD *)"sName.shn";
  *(_DWORD *)&v1->CheckSumData[4].DataFileName[8] = *(_DWORD *)"e.shn";
  *(_WORD *)&v1->CheckSumData[4].DataFileName[12] = *(_WORD *)"n";
  *(_DWORD *)&v1->CheckSumData[5].DataFileName[0] = *(_DWORD *)"Gather.shn";
  *(_DWORD *)&v1->CheckSumData[5].DataFileName[4] = *(_DWORD *)"er.shn";
  *(_WORD *)&v1->CheckSumData[5].DataFileName[8] = *(_WORD *)"hn";
  v1->CheckSumData[5].DataFileName[10] = aGather_shn[10];
  *(_DWORD *)&v1->CheckSumData[6].DataFileName[0] = *(_DWORD *)"GradeItemOption.shn";
  *(_DWORD *)&v1->CheckSumData[6].DataFileName[4] = *(_DWORD *)"eItemOption.shn";
  *(_DWORD *)&v1->CheckSumData[6].DataFileName[8] = *(_DWORD *)"mOption.shn";
  *(_DWORD *)&v1->CheckSumData[6].DataFileName[12] = *(_DWORD *)"ion.shn";
  *(_DWORD *)&v1->CheckSumData[6].DataFileName[16] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[7].DataFileName[0] = *(_DWORD *)"ItemDismantle.shn";
  *(_DWORD *)&v1->CheckSumData[7].DataFileName[4] = *(_DWORD *)"Dismantle.shn";
  *(_DWORD *)&v1->CheckSumData[7].DataFileName[8] = *(_DWORD *)"antle.shn";
  *(_DWORD *)&v1->CheckSumData[7].DataFileName[12] = *(_DWORD *)"e.shn";
  *(_WORD *)&v1->CheckSumData[7].DataFileName[16] = *(_WORD *)"n";
  *(_DWORD *)&v1->CheckSumData[8].DataFileName[0] = *(_DWORD *)"ItemInfo.shn";
  *(_DWORD *)&v1->CheckSumData[8].DataFileName[4] = *(_DWORD *)"Info.shn";
  *(_DWORD *)&v1->CheckSumData[8].DataFileName[8] = *(_DWORD *)".shn";
  v1->CheckSumData[8].DataFileName[12] = aIteminfo_shn[12];
  *(_DWORD *)&v1->CheckSumData[9].DataFileName[0] = *(_DWORD *)"MapInfo.shn";
  *(_DWORD *)&v1->CheckSumData[9].DataFileName[4] = *(_DWORD *)"nfo.shn";
  *(_DWORD *)&v1->CheckSumData[9].DataFileName[8] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[10].DataFileName[0] = *(_DWORD *)"MiniHouse.shn";
  *(_DWORD *)&v1->CheckSumData[10].DataFileName[4] = *(_DWORD *)"House.shn";
  *(_DWORD *)&v1->CheckSumData[10].DataFileName[8] = *(_DWORD *)"e.shn";
  *(_WORD *)&v1->CheckSumData[10].DataFileName[12] = *(_WORD *)"n";
  memcpy(v1->CheckSumData[11].DataFileName, "MiniHouseFurniture.shn", 0x17u);
  *(_DWORD *)&v1->CheckSumData[12].DataFileName[0] = *(_DWORD *)"MiniHouseObjAni.shn";
  *(_DWORD *)&v1->CheckSumData[12].DataFileName[4] = *(_DWORD *)"HouseObjAni.shn";
  *(_DWORD *)&v1->CheckSumData[12].DataFileName[8] = *(_DWORD *)"eObjAni.shn";
  *(_DWORD *)&v1->CheckSumData[12].DataFileName[12] = *(_DWORD *)"Ani.shn";
  *(_DWORD *)&v1->CheckSumData[12].DataFileName[16] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[13].DataFileName[0] = *(_DWORD *)"MobInfo.shn";
  *(_DWORD *)&v1->CheckSumData[13].DataFileName[4] = *(_DWORD *)"nfo.shn";
  *(_DWORD *)&v1->CheckSumData[13].DataFileName[8] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[14].DataFileName[0] = *(_DWORD *)"PassiveSkill.shn";
  *(_DWORD *)&v1->CheckSumData[14].DataFileName[4] = *(_DWORD *)"iveSkill.shn";
  *(_DWORD *)&v1->CheckSumData[14].DataFileName[8] = *(_DWORD *)"kill.shn";
  *(_DWORD *)&v1->CheckSumData[14].DataFileName[12] = *(_DWORD *)".shn";
  v1->CheckSumData[14].DataFileName[16] = aPassiveskill_s[16];
  *(_DWORD *)&v1->CheckSumData[15].DataFileName[0] = *(_DWORD *)"Riding.shn";
  *(_DWORD *)&v1->CheckSumData[15].DataFileName[4] = *(_DWORD *)"ng.shn";
  *(_WORD *)&v1->CheckSumData[15].DataFileName[8] = *(_WORD *)"hn";
  v1->CheckSumData[15].DataFileName[10] = aRiding_shn[10];
  *(_DWORD *)&v1->CheckSumData[16].DataFileName[0] = *(_DWORD *)"SubAbstate.shn";
  *(_DWORD *)&v1->CheckSumData[16].DataFileName[4] = *(_DWORD *)"bstate.shn";
  *(_DWORD *)&v1->CheckSumData[16].DataFileName[8] = *(_DWORD *)"te.shn";
  *(_WORD *)&v1->CheckSumData[16].DataFileName[12] = *(_WORD *)"hn";
  v1->CheckSumData[16].DataFileName[14] = aSubabstate_shn[14];
  *(_DWORD *)&v1->CheckSumData[17].DataFileName[0] = *(_DWORD *)"UpgradeInfo.shn";
  *(_DWORD *)&v1->CheckSumData[17].DataFileName[4] = *(_DWORD *)"adeInfo.shn";
  *(_DWORD *)&v1->CheckSumData[17].DataFileName[8] = *(_DWORD *)"nfo.shn";
  *(_DWORD *)&v1->CheckSumData[17].DataFileName[12] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[18].DataFileName[0] = *(_DWORD *)"WeaponAttrib.shn";
  *(_DWORD *)&v1->CheckSumData[18].DataFileName[4] = *(_DWORD *)"onAttrib.shn";
  *(_DWORD *)&v1->CheckSumData[18].DataFileName[8] = *(_DWORD *)"trib.shn";
  *(_DWORD *)&v1->CheckSumData[18].DataFileName[12] = *(_DWORD *)".shn";
  v1->CheckSumData[18].DataFileName[16] = aWeaponattrib_s[16];
  *(_DWORD *)&v1->CheckSumData[19].DataFileName[0] = *(_DWORD *)"WeaponTitleData.shn";
  *(_DWORD *)&v1->CheckSumData[19].DataFileName[4] = *(_DWORD *)"onTitleData.shn";
  *(_DWORD *)&v1->CheckSumData[19].DataFileName[8] = *(_DWORD *)"tleData.shn";
  *(_DWORD *)&v1->CheckSumData[19].DataFileName[12] = *(_DWORD *)"ata.shn";
  *(_DWORD *)&v1->CheckSumData[19].DataFileName[16] = *(_DWORD *)"shn";
  memcpy(
    v1->CheckSumData[20].DataFileName,
    "MiniHouseFurnitureObjEffect.shn",
    sizeof(v1->CheckSumData[20].DataFileName));
  *(_DWORD *)&v1->CheckSumData[21].DataFileName[0] = *(_DWORD *)"MiniHouseEndure.shn";
  *(_DWORD *)&v1->CheckSumData[21].DataFileName[4] = *(_DWORD *)"HouseEndure.shn";
  *(_DWORD *)&v1->CheckSumData[21].DataFileName[8] = *(_DWORD *)"eEndure.shn";
  *(_DWORD *)&v1->CheckSumData[21].DataFileName[12] = *(_DWORD *)"ure.shn";
  *(_DWORD *)&v1->CheckSumData[21].DataFileName[16] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[22].DataFileName[0] = *(_DWORD *)"DiceDividind.shn";
  *(_DWORD *)&v1->CheckSumData[22].DataFileName[4] = *(_DWORD *)"Dividind.shn";
  *(_DWORD *)&v1->CheckSumData[22].DataFileName[8] = *(_DWORD *)"dind.shn";
  *(_DWORD *)&v1->CheckSumData[22].DataFileName[12] = *(_DWORD *)".shn";
  v1->CheckSumData[22].DataFileName[16] = aDicedividind_s[16];
  *(_DWORD *)&v1->CheckSumData[23].DataFileName[0] = *(_DWORD *)"ActionViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[23].DataFileName[4] = *(_DWORD *)"onViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[23].DataFileName[8] = *(_DWORD *)"ewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[23].DataFileName[12] = *(_DWORD *)"fo.shn";
  *(_WORD *)&v1->CheckSumData[23].DataFileName[16] = *(_WORD *)"hn";
  v1->CheckSumData[23].DataFileName[18] = aActionviewinfo[18];
  *(_DWORD *)&v1->CheckSumData[24].DataFileName[0] = *(_DWORD *)"MapLinkPoint.shn";
  *(_DWORD *)&v1->CheckSumData[24].DataFileName[4] = *(_DWORD *)"inkPoint.shn";
  *(_DWORD *)&v1->CheckSumData[24].DataFileName[8] = *(_DWORD *)"oint.shn";
  *(_DWORD *)&v1->CheckSumData[24].DataFileName[12] = *(_DWORD *)".shn";
  v1->CheckSumData[24].DataFileName[16] = aMaplinkpoint_s[16];
  *(_DWORD *)&v1->CheckSumData[25].DataFileName[0] = *(_DWORD *)"MapWayPoint.shn";
  *(_DWORD *)&v1->CheckSumData[25].DataFileName[4] = *(_DWORD *)"ayPoint.shn";
  *(_DWORD *)&v1->CheckSumData[25].DataFileName[8] = *(_DWORD *)"int.shn";
  *(_DWORD *)&v1->CheckSumData[25].DataFileName[12] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[26].DataFileName[0] = *(_DWORD *)"AbStateView.shn";
  *(_DWORD *)&v1->CheckSumData[26].DataFileName[4] = *(_DWORD *)"ateView.shn";
  *(_DWORD *)&v1->CheckSumData[26].DataFileName[8] = *(_DWORD *)"iew.shn";
  *(_DWORD *)&v1->CheckSumData[26].DataFileName[12] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[27].DataFileName[0] = *(_DWORD *)"ActiveSkillView.shn";
  *(_DWORD *)&v1->CheckSumData[27].DataFileName[4] = *(_DWORD *)"veSkillView.shn";
  *(_DWORD *)&v1->CheckSumData[27].DataFileName[8] = *(_DWORD *)"illView.shn";
  *(_DWORD *)&v1->CheckSumData[27].DataFileName[12] = *(_DWORD *)"iew.shn";
  *(_DWORD *)&v1->CheckSumData[27].DataFileName[16] = *(_DWORD *)"shn";
  memcpy(v1->CheckSumData[28].DataFileName, "CharacterTitleStateView.shn", 0x1Cu);
  *(_DWORD *)&v1->CheckSumData[29].DataFileName[0] = *(_DWORD *)"EffectViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[29].DataFileName[4] = *(_DWORD *)"ctViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[29].DataFileName[8] = *(_DWORD *)"ewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[29].DataFileName[12] = *(_DWORD *)"fo.shn";
  *(_WORD *)&v1->CheckSumData[29].DataFileName[16] = *(_WORD *)"hn";
  v1->CheckSumData[29].DataFileName[18] = aEffectviewinfo[18];
  *(_DWORD *)&v1->CheckSumData[30].DataFileName[0] = *(_DWORD *)"ItemShopView.shn";
  *(_DWORD *)&v1->CheckSumData[30].DataFileName[4] = *(_DWORD *)"ShopView.shn";
  *(_DWORD *)&v1->CheckSumData[30].DataFileName[8] = *(_DWORD *)"View.shn";
  *(_DWORD *)&v1->CheckSumData[30].DataFileName[12] = *(_DWORD *)".shn";
  v1->CheckSumData[30].DataFileName[16] = aItemshopview_s[16];
  *(_DWORD *)&v1->CheckSumData[31].DataFileName[0] = *(_DWORD *)"ItemViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[31].DataFileName[4] = *(_DWORD *)"ViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[31].DataFileName[8] = *(_DWORD *)"Info.shn";
  *(_DWORD *)&v1->CheckSumData[31].DataFileName[12] = *(_DWORD *)".shn";
  v1->CheckSumData[31].DataFileName[16] = aItemviewinfo_s[16];
  *(_DWORD *)&v1->CheckSumData[32].DataFileName[0] = *(_DWORD *)"MapViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[32].DataFileName[4] = *(_DWORD *)"iewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[32].DataFileName[8] = *(_DWORD *)"nfo.shn";
  *(_DWORD *)&v1->CheckSumData[32].DataFileName[12] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[33].DataFileName[0] = *(_DWORD *)"MobViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[33].DataFileName[4] = *(_DWORD *)"iewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[33].DataFileName[8] = *(_DWORD *)"nfo.shn";
  *(_DWORD *)&v1->CheckSumData[33].DataFileName[12] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[34].DataFileName[0] = *(_DWORD *)"NPCViewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[34].DataFileName[4] = *(_DWORD *)"iewInfo.shn";
  *(_DWORD *)&v1->CheckSumData[34].DataFileName[8] = *(_DWORD *)"nfo.shn";
  *(_DWORD *)&v1->CheckSumData[34].DataFileName[12] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[35].DataFileName[0] = *(_DWORD *)"PassiveSkillView.shn";
  *(_DWORD *)&v1->CheckSumData[35].DataFileName[4] = *(_DWORD *)"iveSkillView.shn";
  *(_DWORD *)&v1->CheckSumData[35].DataFileName[8] = *(_DWORD *)"killView.shn";
  *(_DWORD *)&v1->CheckSumData[35].DataFileName[12] = *(_DWORD *)"View.shn";
  *(_DWORD *)&v1->CheckSumData[35].DataFileName[16] = *(_DWORD *)".shn";
  v1->CheckSumData[35].DataFileName[20] = aPassiveskillvi[20];
  *(_DWORD *)&v1->CheckSumData[36].DataFileName[0] = *(_DWORD *)"ProduceView.shn";
  *(_DWORD *)&v1->CheckSumData[36].DataFileName[4] = *(_DWORD *)"uceView.shn";
  *(_DWORD *)&v1->CheckSumData[36].DataFileName[8] = *(_DWORD *)"iew.shn";
  *(_DWORD *)&v1->CheckSumData[36].DataFileName[12] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[37].DataFileName[0] = *(_DWORD *)"CollectCardView.shn";
  *(_DWORD *)&v1->CheckSumData[37].DataFileName[4] = *(_DWORD *)"ectCardView.shn";
  *(_DWORD *)&v1->CheckSumData[37].DataFileName[8] = *(_DWORD *)"ardView.shn";
  *(_DWORD *)&v1->CheckSumData[37].DataFileName[12] = *(_DWORD *)"iew.shn";
  *(_DWORD *)&v1->CheckSumData[37].DataFileName[16] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[38].DataFileName[0] = *(_DWORD *)"GTIView.shn";
  *(_DWORD *)&v1->CheckSumData[38].DataFileName[4] = *(_DWORD *)"iew.shn";
  *(_DWORD *)&v1->CheckSumData[38].DataFileName[8] = *(_DWORD *)"shn";
  memcpy(v1->CheckSumData[39].DataFileName, "ItemViewEquipTypeInfo.shn", 0x1Au);
  *(_DWORD *)&v1->CheckSumData[40].DataFileName[0] = *(_DWORD *)"SingleData.shn";
  *(_DWORD *)&v1->CheckSumData[40].DataFileName[4] = *(_DWORD *)"leData.shn";
  *(_DWORD *)&v1->CheckSumData[40].DataFileName[8] = *(_DWORD *)"ta.shn";
  *(_WORD *)&v1->CheckSumData[40].DataFileName[12] = *(_WORD *)"hn";
  v1->CheckSumData[40].DataFileName[14] = aSingledata_shn[14];
  *(_DWORD *)&v1->CheckSumData[41].DataFileName[0] = *(_DWORD *)"MarketSearchInfo.shn";
  *(_DWORD *)&v1->CheckSumData[41].DataFileName[4] = *(_DWORD *)"etSearchInfo.shn";
  *(_DWORD *)&v1->CheckSumData[41].DataFileName[8] = *(_DWORD *)"archInfo.shn";
  *(_DWORD *)&v1->CheckSumData[41].DataFileName[12] = *(_DWORD *)"Info.shn";
  *(_DWORD *)&v1->CheckSumData[41].DataFileName[16] = *(_DWORD *)".shn";
  v1->CheckSumData[41].DataFileName[20] = aMarketsearchin[20];
  *(_DWORD *)&v1->CheckSumData[42].DataFileName[0] = *(_DWORD *)"ItemMoney.shn";
  *(_DWORD *)&v1->CheckSumData[42].DataFileName[4] = *(_DWORD *)"Money.shn";
  *(_DWORD *)&v1->CheckSumData[42].DataFileName[8] = *(_DWORD *)"y.shn";
  *(_WORD *)&v1->CheckSumData[42].DataFileName[12] = *(_WORD *)"n";
  *(_DWORD *)&v1->CheckSumData[43].DataFileName[0] = *(_DWORD *)"PupMain.shn";
  *(_DWORD *)&v1->CheckSumData[43].DataFileName[4] = *(_DWORD *)"ain.shn";
  *(_DWORD *)&v1->CheckSumData[43].DataFileName[8] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[44].DataFileName[0] = *(_DWORD *)"ChatColor.shn";
  *(_DWORD *)&v1->CheckSumData[44].DataFileName[4] = *(_DWORD *)"Color.shn";
  *(_DWORD *)&v1->CheckSumData[44].DataFileName[8] = *(_DWORD *)"r.shn";
  *(_WORD *)&v1->CheckSumData[44].DataFileName[12] = *(_WORD *)"n";
  *(_DWORD *)&v1->CheckSumData[45].DataFileName[0] = *(_DWORD *)"TermExtendMatch.shn";
  *(_DWORD *)&v1->CheckSumData[45].DataFileName[4] = *(_DWORD *)"ExtendMatch.shn";
  *(_DWORD *)&v1->CheckSumData[45].DataFileName[8] = *(_DWORD *)"ndMatch.shn";
  *(_DWORD *)&v1->CheckSumData[45].DataFileName[12] = *(_DWORD *)"tch.shn";
  *(_DWORD *)&v1->CheckSumData[45].DataFileName[16] = *(_DWORD *)"shn";
  *(_DWORD *)&v1->CheckSumData[46].DataFileName[0] = *(_DWORD *)"MinimonInfo.shn";
  *(_DWORD *)&v1->CheckSumData[46].DataFileName[4] = *(_DWORD *)"monInfo.shn";
  *(_DWORD *)&v1->CheckSumData[46].DataFileName[8] = *(_DWORD *)"nfo.shn";
  *(_DWORD *)&v1->CheckSumData[46].DataFileName[12] = *(_DWORD *)"shn";
  memcpy(v1->CheckSumData[47].DataFileName, "MinimonAutoUseItem.shn", 0x17u);
  memcpy(v1->CheckSumData[48].DataFileName, "ChargedDeletableBuff.shn", 0x19u);
  *(_DWORD *)&v1->CheckSumData[49].DataFileName[0] = *(_DWORD *)"SlanderFilter.shn";
  *(_DWORD *)&v1->CheckSumData[49].DataFileName[4] = *(_DWORD *)"derFilter.shn";
  *(_DWORD *)&v1->CheckSumData[49].DataFileName[8] = *(_DWORD *)"ilter.shn";
  *(_DWORD *)&v1->CheckSumData[49].DataFileName[12] = *(_DWORD *)"r.shn";
  *(_WORD *)&v1->CheckSumData[49].DataFileName[16] = *(_WORD *)"n";
  v5 = v1->CheckSumData[0].DataFileName;
  v8 = 50;
  do
  {
    FileNameLen = strlen(v5);
    for ( i = 0; i < (signed int)FileNameLen; ++i )
      v5[i] = tolower(v5[i]);
    v5 += 65;
    --v8;
  }
  while ( v8 );
}

//----- (00735090) --------------------------------------------------------
int __thiscall CChatRestrict::Del(CChatRestrict *this, Name5 *pCharID)
{
  int v2; // edi@1
  int v3; // edx@1
  char *v4; // eax@2
  int result; // eax@9

  v2 = this->m_NumOfChatRestrict;
  v3 = 0;
  if ( this->m_NumOfChatRestrict <= 0 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    v4 = &this->m_ChatRestrict[0].sCharID.n5_name[8];
    while ( *((_DWORD *)v4 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v4 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v4 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v4 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v3;
      v4 += 22;
      if ( v3 >= v2 )
        goto LABEL_9;
    }
    this->m_NumOfChatRestrict = v2 - 1;
    memcpy(this->m_ChatRestrict[v3].sCharID.n5_name, this->m_ChatRestrict[v3 + 1].sCharID.n5_name, 22 * (v2 - 1 - v3));
    result = 1;
  }
  return result;
}

//----- (00735110) --------------------------------------------------------
PROTO_CHAT_RESTRICT_INFO *__thiscall CChatRestrict::Get(CChatRestrict *this, Name5 *pCharID)
{
  int v2; // edx@1
  char *v3; // eax@2
  PROTO_CHAT_RESTRICT_INFO *result; // eax@9

  v2 = 0;
  if ( this->m_NumOfChatRestrict <= 0 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    v3 = &this->m_ChatRestrict[0].sCharID.n5_name[8];
    while ( *((_DWORD *)v3 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v3 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v3 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v3 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v3 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v2;
      v3 += 22;
      if ( v2 >= this->m_NumOfChatRestrict )
        goto LABEL_9;
    }
    result = &this->m_ChatRestrict[v2];
  }
  return result;
}

//----- (00735170) --------------------------------------------------------
void __thiscall CChatRestrict::CChatRestrict(CChatRestrict *this)
{
  CChatRestrict *v1; // esi@1

  v1 = this;
  _eh_vector_constructor_iterator_(
    this->m_ChatRestrict,
    0x16u,
    100,
    (void (__thiscall *)(void *))Name5::Name5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_NumOfChatRestrict = 0;
}

//----- (007351A0) --------------------------------------------------------
void __thiscall CChatRestrict::_CChatRestrict(CChatRestrict *this)
{
  this->m_NumOfChatRestrict = 0;
  _eh_vector_destructor_iterator_(
    this->m_ChatRestrict,
    0x16u,
    100,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (007351C0) --------------------------------------------------------
int __thiscall CChatRestrict::Add(CChatRestrict *this, PROTO_CHAT_RESTRICT_INFO *pInfo)
{
  CChatRestrict *v2; // edi@1
  int v3; // ecx@1
  int result; // eax@2
  int v5; // esi@3
  int v6; // edx@4

  v2 = this;
  v3 = this->m_NumOfChatRestrict;
  if ( v3 <= 100 )
  {
    v5 = 0;
    if ( v3 <= 0 )
    {
LABEL_11:
      if ( v3 < 100 )
      {
        *(_QWORD *)&v2->m_ChatRestrict[v3].sCharID.n5_name[0] = *(_QWORD *)&pInfo->sCharID.n5_name[0];
        *(_QWORD *)&v2->m_ChatRestrict[v3].sCharID.n5_name[8] = *(_QWORD *)&pInfo->sCharID.n5_name[8];
        *(_DWORD *)&v2->m_ChatRestrict[v3].sCharID.n5_name[16] = *(_DWORD *)&pInfo->sCharID.n5_name[16];
        v2->m_ChatRestrict[v3].bIsGM = pInfo->bIsGM;
        v2->m_ChatRestrict[v3].bIsDeleted = pInfo->bIsDeleted;
        ++v2->m_NumOfChatRestrict;
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      v6 = (int)&v2->m_ChatRestrict[0].sCharID.n5_name[8];
      while ( *(_DWORD *)(v6 - 8) != *(_DWORD *)&pInfo->sCharID.n5_name[0]
           || *(_DWORD *)(v6 - 4) != *(_DWORD *)&pInfo->sCharID.n5_name[4]
           || *(_DWORD *)v6 != *(_DWORD *)&pInfo->sCharID.n5_name[8]
           || *(_DWORD *)(v6 + 4) != *(_DWORD *)&pInfo->sCharID.n5_name[12]
           || *(_DWORD *)(v6 + 8) != *(_DWORD *)&pInfo->sCharID.n5_name[16] )
      {
        ++v5;
        v6 += 22;
        if ( v5 >= v3 )
          goto LABEL_11;
      }
      *(_QWORD *)&v2->m_ChatRestrict[v5].sCharID.n5_name[0] = *(_QWORD *)&pInfo->sCharID.n5_name[0];
      *(_QWORD *)&v2->m_ChatRestrict[v5].sCharID.n5_name[8] = *(_QWORD *)&pInfo->sCharID.n5_name[8];
      *(_DWORD *)&v2->m_ChatRestrict[v5].sCharID.n5_name[16] = *(_DWORD *)&pInfo->sCharID.n5_name[16];
      v2->m_ChatRestrict[v5].bIsGM = pInfo->bIsGM;
      v2->m_ChatRestrict[v5].bIsDeleted = pInfo->bIsDeleted;
      result = 2;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007352A0) --------------------------------------------------------
void __thiscall CItemAuthorityBase::CItemAuthorityBase(CItemAuthorityBase *this)
{
  CItemAuthorityBase *v1; // eax@1
  signed int v2; // edi@1
  char *v3; // esi@1
  signed int v4; // ecx@2

  v1 = this;
  v2 = 17;
  this->vfptr = (CItemAuthorityBaseVtbl *)&CItemAuthorityBase::_vftable_;
  v3 = (char *)this->IA_ChrBelong;
  do
  {
    v4 = 0;
    do
    {
      v3[v4 + 289] = 0;
      v3[v4] = 0;
      v3[v4++ - 289] = 0;
    }
    while ( v4 < 17 );
    v3 += 17;
    --v2;
  }
  while ( v2 );
  v1->IA_Common[8][9] = 1;
  *(_WORD *)&v1->IA_Common[9][8] = 257;
  v1->IA_Common[9][3] = 1;
  *(_WORD *)&v1->IA_Common[9][12] = 257;
  v1->IA_Common[9][14] = 1;
  *(_WORD *)&v1->IA_Common[9][15] = 257;
  v1->IA_Common[9][0] = 1;
  v1->IA_Common[9][6] = 1;
  v1->IA_Common[12][12] = 1;
  v1->IA_Common[3][3] = 1;
  v1->IA_Common[13][13] = 1;
  v1->IA_Common[14][14] = 1;
  v1->IA_Common[15][15] = 1;
  v1->IA_Common[0][0] = 1;
  v1->IA_Common[0][9] = 1;
  v1->IA_Common[6][6] = 1;
  v1->IA_Common[6][9] = 1;
  v1->IA_Common[2][9] = 1;
  v1->IA_Common[4][9] = 1;
  v1->IA_Common[5][9] = 1;
  v1->IA_ChrBelong[8][9] = 1;
  *(_WORD *)&v1->IA_ChrBelong[9][8] = 257;
  v1->IA_ChrBelong[9][3] = 1;
  *(_WORD *)&v1->IA_ChrBelong[9][12] = 257;
  v1->IA_ChrBelong[9][14] = 1;
  *(_WORD *)&v1->IA_ChrBelong[9][15] = 257;
  v1->IA_ChrBelong[12][12] = 1;
  v1->IA_ChrBelong[3][3] = 1;
  v1->IA_ChrBelong[13][13] = 1;
  v1->IA_ChrBelong[14][14] = 1;
  v1->IA_ChrBelong[15][15] = 1;
  *(_WORD *)&v1->IA_Common[16][16] = 257;
  v1->IA_ChrBelong[0][9] = 1;
  v1->IA_ChrBelong[6][6] = 1;
  v1->IA_ChrBelong[6][9] = 1;
  v1->IA_ChrBelong[2][9] = 1;
  v1->IA_ChrBelong[4][9] = 1;
  v1->IA_ChrBelong[5][9] = 1;
  v1->IA_AccBelong[8][9] = 1;
  *(_WORD *)&v1->IA_AccBelong[9][8] = 257;
  v1->IA_AccBelong[9][3] = 1;
  *(_WORD *)&v1->IA_AccBelong[9][12] = 257;
  v1->IA_AccBelong[9][14] = 1;
  *(_WORD *)&v1->IA_AccBelong[9][15] = 257;
  v1->IA_AccBelong[9][6] = 1;
  v1->IA_AccBelong[12][12] = 1;
  v1->IA_AccBelong[3][3] = 1;
  v1->IA_AccBelong[13][13] = 1;
  v1->IA_AccBelong[14][14] = 1;
  v1->IA_AccBelong[16][16] = 1;
  v1->IA_AccBelong[15][15] = 1;
  *(_WORD *)&v1->IA_ChrBelong[16][16] = 257;
  v1->IA_AccBelong[0][9] = 1;
  v1->IA_AccBelong[6][6] = 1;
  v1->IA_AccBelong[6][9] = 1;
  v1->IA_AccBelong[2][9] = 1;
  v1->IA_AccBelong[4][9] = 1;
  v1->IA_AccBelong[5][9] = 1;
}
// 9D9218: using guessed type int (__thiscall *CItemAuthorityBase___vftable_)(void *p, char);

//----- (00735450) --------------------------------------------------------
void __thiscall CItemAuthorityBase::_CItemAuthorityBase(CItemAuthorityBase *this)
{
  this->vfptr = (CItemAuthorityBaseVtbl *)&CItemAuthorityBase::_vftable_;
}
// 9D9218: using guessed type int (__thiscall *CItemAuthorityBase___vftable_)(void *p, char);

//----- (00735460) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_CanPlayerTrade(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState)
{
  CItemAuthorityBase *v3; // esi@1
  int result; // eax@1

  v3 = this;
  result = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  if ( result )
  {
    if ( *(_BYTE *)(result + 4) )
    {
      if ( !eBelongState )
        result = (int)v3->vfptr->IA_GetBelongTypeInfo(v3, 0);
    }
    result = *(_BYTE *)(result + 8) == 0;
  }
  return result;
}

//----- (007354B0) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_CanNpcSell(CItemAuthorityBase *this, E_BelongType eType)
{
  int result; // eax@1

  result = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  if ( result )
    result = *(_BYTE *)(result + 6) == 0;
  return result;
}

//----- (007354E0) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_CanStorage(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState, unsigned __int16 FromInven, unsigned __int16 ToInven)
{
  CItemAuthorityBase *v5; // esi@1
  int v6; // eax@1
  int result; // eax@2

  v5 = this;
  v6 = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  if ( !v6 )
    goto LABEL_14;
  if ( *(_BYTE *)(v6 + 4) && !eBelongState )
    v6 = (int)v5->vfptr->IA_GetBelongTypeInfo(v5, 0);
  if ( !*(_BYTE *)(v6 + 7) || FromInven != 6 && FromInven && ToInven != 6 && ToInven )
    result = 1;
  else
LABEL_14:
    result = 0;
  return result;
}

//----- (00735550) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_IsWorkChrBelonged(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState)
{
  CItemAuthorityBase *v3; // esi@1
  int v4; // eax@1
  int result; // eax@8

  v3 = this;
  v4 = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  if ( !v4 )
    goto LABEL_12;
  if ( *(_BYTE *)(v4 + 4) && !eBelongState )
    v4 = (int)v3->vfptr->IA_GetBelongTypeInfo(v3, 0);
  if ( *(_BYTE *)(v4 + 5) && *(_BYTE *)(v4 + 7) && *(_BYTE *)(v4 + 8) )
    result = 1;
  else
LABEL_12:
    result = 0;
  return result;
}

//----- (007355B0) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_IsWorkAccBelonged(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState)
{
  CItemAuthorityBase *v3; // esi@1
  int v4; // eax@1
  int result; // eax@7

  v3 = this;
  v4 = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  if ( !v4 )
    goto LABEL_11;
  if ( *(_BYTE *)(v4 + 4) && !eBelongState )
    v4 = (int)v3->vfptr->IA_GetBelongTypeInfo(v3, 0);
  if ( *(_BYTE *)(v4 + 5) && *(_BYTE *)(v4 + 8) )
    result = 1;
  else
LABEL_11:
    result = 0;
  return result;
}

//----- (00735600) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_IsDataPutOnBelonged(CItemAuthorityBase *this, E_BelongType eType)
{
  int result; // eax@1

  result = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  if ( result )
    result = *(_BYTE *)(result + 4);
  return result;
}

//----- (00735620) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_IsDataChrBelonged(CItemAuthorityBase *this, E_BelongType eType)
{
  int v2; // eax@1

  v2 = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  return v2 && *(_BYTE *)(v2 + 5) && *(_BYTE *)(v2 + 7) && *(_BYTE *)(v2 + 8);
}

//----- (00735660) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_IsDataAccBelonged(CItemAuthorityBase *this, E_BelongType eType)
{
  int v2; // eax@1

  v2 = ((int (__stdcall *)(_DWORD))this->vfptr->IA_GetBelongTypeInfo)(eType);
  return v2 && *(_BYTE *)(v2 + 5) && *(_BYTE *)(v2 + 8);
}

//----- (00735690) --------------------------------------------------------
void *__thiscall CItemAuthorityBase::_scalar_deleting_destructor_(CItemAuthorityBase *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  this->vfptr = (CItemAuthorityBaseVtbl *)&CItemAuthorityBase::_vftable_;
  if ( a2 & 1 )
    operator delete(this);
  return v2;
}
// 9D9218: using guessed type int (__thiscall *CItemAuthorityBase___vftable_)(void *p, char);

//----- (007356C0) --------------------------------------------------------
int __thiscall CItemAuthorityBase::IA_CanInvenReloc(CItemAuthorityBase *this, E_BelongType eType, SHINE_PUT_ON_BELONGED_ITEM eBelongState, unsigned __int16 FromInven, unsigned __int16 ToInven, E_RELOC_ERR *eRelocErr)
{
  int result; // eax@1
  CItemAuthorityBase *v7; // esi@1
  int v8; // eax@6

  result = (int)eRelocErr;
  v7 = this;
  if ( eRelocErr )
  {
    if ( FromInven >= 0x11u )
      return 0;
    if ( ToInven < 0x11u )
    {
      *eRelocErr = 0;
      if ( CItemAuthorityBase::IA_IsWorkChrBelonged(this, eType, eBelongState) )
      {
        v8 = (int)((char *)v7->IA_ChrBelong + 16 * FromInven + FromInven + ToInven);
        if ( !*(_BYTE *)v8 )
        {
          *eRelocErr = 1;
          return *(_BYTE *)v8;
        }
        return *(_BYTE *)v8;
      }
      if ( CItemAuthorityBase::IA_IsWorkAccBelonged(v7, eType, eBelongState) )
      {
        v8 = (int)((char *)v7->IA_AccBelong + 16 * FromInven + FromInven + ToInven);
        if ( !*(_BYTE *)v8 )
        {
          *eRelocErr = 2;
          return *(_BYTE *)v8;
        }
        return *(_BYTE *)v8;
      }
      if ( CItemAuthorityBase::IA_CanStorage(v7, eType, eBelongState, FromInven, ToInven) )
      {
        v8 = (int)((char *)v7->IA_Common + 16 * FromInven + FromInven + ToInven);
        if ( !*(_BYTE *)v8 )
          *eRelocErr = 3;
        return *(_BYTE *)v8;
      }
    }
    result = 0;
  }
  return result;
}

//----- (007357E0) --------------------------------------------------------
void __thiscall CChargedItem::CChargedItem(CChargedItem *this)
{
  this->m_NumOfChargedItem = 0;
}

//----- (007357F0) --------------------------------------------------------
int __thiscall CChargedItem::Add(CChargedItem *this, PROTO_CHARGED_ITEM_INFO *pInfo)
{
  int v2; // eax@1
  int result; // eax@2
  int v4; // eax@3
  char *v5; // eax@3

  v2 = this->m_NumOfChargedItem;
  if ( v2 < 24 )
  {
    v4 = v2;
    this->m_ChargedItemBF[v4].ItemOrderNo = pInfo->ItemOrderNo;
    v5 = (char *)this + v4 * 16;
    *((_DWORD *)v5 + 1) = pInfo->ItemCode;
    *((_DWORD *)v5 + 2) = pInfo->ItemAmount;
    *((_DWORD *)v5 + 3) = pInfo->ItemRegisterDate._bf0;
    result = 1;
    ++this->m_NumOfChargedItem;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00735840) --------------------------------------------------------
int __thiscall CChargedItem::Del(CChargedItem *this, PROTO_CHARGED_ITEM_INFO *pInfo)
{
  int v2; // esi@1
  int v3; // edx@1
  CChargedItem *v4; // eax@2
  int result; // eax@5

  v2 = this->m_NumOfChargedItem;
  v3 = 0;
  if ( v2 <= 0 )
  {
LABEL_5:
    result = 0;
  }
  else
  {
    v4 = this;
    while ( v4->m_ChargedItemBF[0].ItemOrderNo != pInfo->ItemOrderNo )
    {
      ++v3;
      v4 = (CChargedItem *)((char *)v4 + 16);
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    this->m_NumOfChargedItem = v2 - 1;
    memcpy((char *)this + 16 * v3, (char *)&this->m_ChargedItemBF[v3 + 1], 16 * (v2 - 1 - v3));
    result = 1;
  }
  return result;
}

//----- (007358A0) --------------------------------------------------------
PROTO_CHARGED_ITEM_INFO *__thiscall CChargedItem::Find(CChargedItem *this, unsigned int ItemOrderNo)
{
  int v2; // esi@1
  int v3; // eax@1
  CChargedItem *v4; // edx@2
  PROTO_CHARGED_ITEM_INFO *result; // eax@5

  v2 = this->m_NumOfChargedItem;
  v3 = 0;
  if ( v2 <= 0 )
  {
LABEL_5:
    result = 0;
  }
  else
  {
    v4 = this;
    while ( v4->m_ChargedItemBF[0].ItemOrderNo != ItemOrderNo )
    {
      ++v3;
      v4 = (CChargedItem *)((char *)v4 + 16);
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    result = (PROTO_CHARGED_ITEM_INFO *)((char *)this + 16 * v3);
  }
  return result;
}

//----- (007358E0) --------------------------------------------------------
PROTO_CHARGED_ITEM_INFO *__thiscall CChargedItem::Seek(CChargedItem *this, int Index)
{
  PROTO_CHARGED_ITEM_INFO *result; // eax@2

  if ( Index < this->m_NumOfChargedItem )
    result = (PROTO_CHARGED_ITEM_INFO *)((char *)this + 16 * Index);
  else
    result = 0;
  return result;
}

//----- (00735900) --------------------------------------------------------
void __thiscall CChargedItem::Clear(CChargedItem *this)
{
  this->m_NumOfChargedItem = 0;
}

//----- (00735910) --------------------------------------------------------
const char *__thiscall CQuestData::GetDialog(CQuestData *this, unsigned int nID)
{
  CQuestData *v2; // ebx@1
  const char *result; // eax@2
  CDataReader::HEAD *v4; // eax@3
  unsigned int v5; // edi@4
  unsigned int v6; // esi@6
  void *v7; // eax@7

  v2 = this;
  if ( this->m_pQuestDialog )
  {
    v4 = this->m_pQuestDialog->m_pHead;
    if ( v4 )
      v5 = v4->nNumOfRecord;
    else
      v5 = 0;
    v6 = 0;
    if ( v5 )
    {
      while ( 1 )
      {
        v7 = CDataReader::GetRecord(v2->m_pQuestDialog, v6);
        if ( v7 )
        {
          if ( *(_DWORD *)v7 == nID )
            break;
        }
        ++v6;
        if ( v6 >= v5 )
          goto LABEL_10;
      }
      result = (char *)v7 + 4;
    }
    else
    {
LABEL_10:
      result = v2->m_pNULLSTR;
    }
  }
  else
  {
    result = this->m_pNULLSTR;
  }
  return result;
}

//----- (00735970) --------------------------------------------------------
QUEST_DATA *__thiscall CQuestData::GetQuestDataByIndex(CQuestData *this, unsigned int Index)
{
  QUEST_DATA_HEAD *v2; // eax@1
  unsigned __int16 v3; // ax@2
  QUEST_DATA *result; // eax@5

  v2 = this->m_pDataHead;
  if ( v2 )
    v3 = v2->NumOfQuest;
  else
    v3 = 0;
  if ( Index < v3 )
    result = this->m_ppQuestDataArray[Index];
  else
    result = 0;
  return result;
}

//----- (007359A0) --------------------------------------------------------
void __thiscall std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(std::vector<CBaseObject *,std::allocator<CBaseObject *> > *this, unsigned int _Count)
{
  std::vector<CBaseObject *,std::allocator<CBaseObject *> > *v2; // esi@1
  CBaseObject **v3; // ebx@4
  int v4; // edi@4

  v2 = this;
  if ( _Count > 0x3FFFFFFF )
    std::_Xlength_error("vector<T> too long");
  if ( (signed int)((char *)this->baseclass_0._Myend - *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2 < _Count )
  {
    v3 = std::allocator<QUEST_DATA__>::allocate(&this->baseclass_0._Alval, _Count);
    memmove(
      (char *)v3,
      *(char **)&v2->baseclass_0.___u0.baseclass_0.dummy[0],
      4 * ((signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2));
    v4 = (signed int)((char *)v2->baseclass_0._Mylast - *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    if ( *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] )
      operator delete(*(void **)&v2->baseclass_0.___u0.baseclass_0.dummy[0]);
    *(_DWORD *)&v2->baseclass_0.___u0.baseclass_0.dummy[0] = v3;
    v2->baseclass_0._Myend = &v3[_Count];
    v2->baseclass_0._Mylast = &v3[v4];
  }
}

//----- (00735A20) --------------------------------------------------------
void __thiscall std::list<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Splice_same(std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *this, std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Where, std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *_Right, std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _First, std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Last, unsigned int _Count)
{
  unsigned int v6; // edx@2
  int v7; // ecx@5

  if ( this != _Right )
  {
    v6 = this->baseclass_0.baseclass_0._Mysize;
    if ( 536870910 - v6 < _Count )
      std::_Xlength_error("list<T> too long");
    this->baseclass_0.baseclass_0._Mysize = _Count + v6;
    _Right->baseclass_0.baseclass_0._Mysize -= _Count;
  }
  **(_DWORD **)(*(_DWORD *)&_First + 4) = _Last;
  **(_DWORD **)(*(_DWORD *)&_Last + 4) = _Where;
  **(_DWORD **)(*(_DWORD *)&_Where + 4) = _First;
  v7 = *(_DWORD *)(*(_DWORD *)&_Where + 4);
  *(_DWORD *)(*(_DWORD *)&_Where + 4) = *(_DWORD *)(*(_DWORD *)&_Last + 4);
  *(_DWORD *)(*(_DWORD *)&_Last + 4) = *(_DWORD *)(*(_DWORD *)&_First + 4);
  *(_DWORD *)(*(_DWORD *)&_First + 4) = v7;
}

//----- (00735AA0) --------------------------------------------------------
std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::lower_bound(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *result, const unsigned __int16 *_Keyval)
{
  const unsigned __int16 *v3; // ebx@1
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *v4; // esi@1
  _ldiv_t v5; // qax@1
  unsigned int v6; // eax@1
  int v7; // ecx@3
  int v8; // edi@3
  int v9; // esi@3
  int v10; // edx@3
  int i; // eax@3
  int v12; // ecx@5
  const unsigned __int16 v13; // cx@8
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v14; // eax@11
  int _Where; // [sp+1Ch] [bp+Ch]@10

  v3 = _Keyval;
  v4 = this;
  v5 = ldiv((*_Keyval ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773);
  v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4->_Mask;
  if ( v4->_Maxidx <= v6 )
    v6 += -1 - (v4->_Mask >> 1);
  v7 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *(_DWORD *)(v7 + 8 * v6);
  v9 = *(_DWORD *)&v4->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v10 = v7 + 8 * v6;
  for ( i = *(_DWORD *)(v7 + 8 * v6); ; i = *(_DWORD *)i )
  {
    if ( v8 == v9 )
      v12 = v9;
    else
      v12 = **(_DWORD **)(v10 + 4);
    if ( i == v12 )
    {
      v14 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
      return v14;
    }
    v13 = *(_WORD *)(i + 8);
    if ( v13 >= *_Keyval )
      break;
  }
  _Where = i;
  if ( *v3 >= v13 )
  {
    v14 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Where;
  }
  else
  {
    v14 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  }
  return v14;
}

//----- (00735B70) --------------------------------------------------------
std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::upper_bound(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *result, const unsigned __int16 *_Keyval)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v3; // esi@1
  _ldiv_t v4; // qax@1
  unsigned int v5; // eax@1
  int v6; // ecx@3
  int v7; // esi@3
  int v8; // eax@3
  int v9; // ecx@3
  int v10; // eax@4
  const unsigned __int16 v11; // dx@7
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v12; // eax@10
  int _Keyvala; // [sp+14h] [bp+Ch]@13

  v3 = this;
  v4 = ldiv((*_Keyval ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773);
  v5 = (16807 * v4.rem - 2836 * v4.quot + ((char)-(16807 * v4.rem - 2836 * v4.quot < 0) & 0x7FFFFFFF)) & v3->_Mask;
  if ( v3->_Maxidx <= v5 )
    v5 += -1 - (v3->_Mask >> 1);
  v6 = *(_DWORD *)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = *(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = v6 + 8 * v5;
  v9 = *(_DWORD *)v8;
  if ( *(_DWORD *)v8 == v7 )
    v10 = v7;
  else
    v10 = **(_DWORD **)(v8 + 4);
  if ( v10 == v9 )
  {
LABEL_10:
    v12 = result;
    *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7;
  }
  else
  {
    v11 = *_Keyval;
    while ( 1 )
    {
      v10 = *(_DWORD *)(v10 + 4);
      if ( *(_WORD *)(v10 + 8) <= v11 )
        break;
      if ( v10 == v9 )
        goto LABEL_10;
    }
    if ( *(_WORD *)(v10 + 8) >= v11 )
    {
      _Keyvala = *(_DWORD *)v10;
      v12 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Keyvala;
    }
    else
    {
      v12 = result;
      *(_DWORD *)&result->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v7;
    }
  }
  return v12;
}

//----- (00735C30) --------------------------------------------------------
std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *__thiscall std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Buynode<std::pair<unsigned_short_QUEST_DATA__>>(std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *this, std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *_Next, std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *_Prev, std::pair<unsigned short,QUEST_DATA *> *_Val)
{
  std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *result; // eax@1
  std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *v5; // edx@2
  std::pair<unsigned short,QUEST_DATA *> *v6; // edx@3
  std::exception thisa; // [sp+0h] [bp-Ch]@5

  result = (std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *)operator new(0x10u);
  if ( !result )
  {
    _Next = 0;
    std::exception::exception(&thisa, (const char *const *)&_Next);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  v5 = _Prev;
  result->_Next = _Next;
  result->_Prev = v5;
  if ( result != (std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *)-8 )
  {
    v6 = _Val;
    result->_Myval.baseclass_0.first = _Val->baseclass_0.first;
    result->_Myval.baseclass_0.second = v6->baseclass_0.second;
  }
  return result;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00735CA0) --------------------------------------------------------
bool __thiscall CQuestData::GetMobIdAssociatedWithQuestData(CQuestData *this, unsigned __int16 MobId, std::vector<QUEST_DATA *,std::allocator<QUEST_DATA *> > *rQuestList)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v3; // esi@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v4; // ebx@1
  bool v5; // al@2
  std::vector<QUEST_DATA *,std::allocator<QUEST_DATA *> > *v6; // edi@3
  unsigned int v7; // eax@4
  int v8; // esi@4
  int v9; // edx@5
  QUEST_DATA **v10; // ecx@6
  int v11; // esi@6
  int v12; // eax@7
  int v13; // eax@8
  int v14; // ecx@8
  unsigned int v15; // ecx@10
  QUEST_DATA **v16; // eax@15
  QUEST_DATA **v17; // ecx@17
  int v18; // eax@18
  int v19; // eax@19
  int v20; // ecx@19
  unsigned int v21; // ecx@21
  QUEST_DATA **v22; // eax@26
  char v23; // [sp+8h] [bp-Ch]@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > result; // [sp+Ch] [bp-8h]@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > loweriter; // [sp+10h] [bp-4h]@1

  v3 = (std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *)&this->m_mhmap_QuestDataByMobID;
  loweriter = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::lower_bound((std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *)&this->m_mhmap_QuestDataByMobID, &result, &MobId)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  v4 = loweriter;
  *(_DWORD *)&MobId = *(_DWORD *)&std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::upper_bound(
                                    v3,
                                    (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v23,
                                    &MobId)->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
  if ( MobId == v4 )
  {
    v5 = 0;
  }
  else
  {
    v6 = rQuestList;
    std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
      (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)rQuestList,
      0x32u);
    do
    {
      v7 = (unsigned int)v6->baseclass_0._Mylast;
      v8 = *(_DWORD *)&v4 + 12;
      if ( *(_DWORD *)&v4 + 12 >= v7
        || (v9 = *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0],
            *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] > (unsigned int)v8) )
      {
        v17 = v6->baseclass_0._Myend;
        if ( (QUEST_DATA **)v7 == v17 )
        {
          v18 = (signed int)(v7 - *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
          if ( (unsigned int)v18 > 0x3FFFFFFE )
LABEL_30:
            std::_Xlength_error("vector<T> too long");
          v19 = v18 + 1;
          v20 = (signed int)((char *)v17 - *(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
          if ( v19 > (unsigned int)v20 )
          {
            if ( 1073741823 - ((unsigned int)v20 >> 1) >= v20 )
              v21 = ((unsigned int)v20 >> 1) + v20;
            else
              v21 = 0;
            if ( v21 < v19 )
              v21 = v19;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v6,
              v21);
            v4 = loweriter;
          }
        }
        v22 = v6->baseclass_0._Mylast;
        if ( v22 )
          *v22 = *(QUEST_DATA **)v8;
      }
      else
      {
        v10 = v6->baseclass_0._Myend;
        v11 = (v8 - v9) >> 2;
        if ( (QUEST_DATA **)v7 == v10 )
        {
          v12 = (signed int)(v7 - v9) >> 2;
          if ( (unsigned int)v12 > 0x3FFFFFFE )
            goto LABEL_30;
          v13 = v12 + 1;
          v14 = (signed int)((char *)v10 - v9) >> 2;
          if ( v13 > (unsigned int)v14 )
          {
            if ( 1073741823 - ((unsigned int)v14 >> 1) >= v14 )
              v15 = ((unsigned int)v14 >> 1) + v14;
            else
              v15 = 0;
            if ( v15 < v13 )
              v15 = v13;
            std::vector<ColumnBut___std::allocator<ColumnBut__>>::reserve(
              (std::vector<CBaseObject *,std::allocator<CBaseObject *> > *)v6,
              v15);
            v4 = loweriter;
          }
        }
        v16 = v6->baseclass_0._Mylast;
        if ( v16 )
          *v16 = *(QUEST_DATA **)(*(_DWORD *)&v6->baseclass_0.___u0.baseclass_0.dummy[0] + 4 * v11);
      }
      ++v6->baseclass_0._Mylast;
      v4 = (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v4;
      loweriter = v4;
    }
    while ( v4 != MobId );
    v5 = 1;
  }
  return v5;
}

//----- (00735DE0) --------------------------------------------------------
int __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(...)
{
  std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *v4; // esi@1
  unsigned int v5; // edi@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v6; // ebx@2
  int v7; // ecx@2
  int v8; // eax@2
  unsigned int v9; // edx@4
  int v10; // eax@4
  unsigned int v11; // eax@6
  void *v12; // eax@10
  signed int v13; // ebx@10
  int v14; // ecx@10
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v15; // ebx@10
  int v16; // edi@10
  unsigned int v17; // ecx@14
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v18; // eax@14
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v19; // ST00_4@14
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v20; // eax@14
  unsigned int v21; // ecx@15
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v22; // edi@15
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v23; // ST18_4@15
  int v24; // [sp-10h] [bp-24h]@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *_Newvec; // [sp+0h] [bp-14h]@10
  int *v26; // [sp+4h] [bp-10h]@1
  int v27; // [sp+10h] [bp-4h]@10

  v26 = &v24;
  v4 = this;
  v5 = _Count;
  if ( _Count )
  {
    v6 = this->baseclass_0._Mylast;
    v7 = *(_DWORD *)&this->baseclass_0.___u0.baseclass_0.dummy[0];
    v8 = (signed int)((char *)v4->baseclass_0._Mylast - *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2;
    if ( 1073741823 - v8 < _Count )
      std::_Xlength_error("vector<T> too long");
    v9 = v8 + _Count;
    v10 = (signed int)((char *)v4->baseclass_0._Myend - v7) >> 2;
    if ( v10 >= v9 )
    {
      if ( (signed int)((char *)v6 - *(_DWORD *)&_Where) >> 2 >= _Count )
      {
        v21 = *(_DWORD *)&_Val->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        v22 = &v6[-_Count];
        _Val = (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)(4 * _Count);
        v23 = &v6[-_Count];
        _Count = v21;
        v4->baseclass_0._Mylast = ____Uninit_move_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__PAV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVie(
                                    v23,
                                    v6,
                                    v6,
                                    &v4->baseclass_0._Alval,
                                    0,
                                    (std::_Nonscalar_ptr_iterator_tag)_Where.___u0.baseclass_0.baseclass_0.dummy[0]);
        std::_Copy_backward<std::_List_iterator<std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>>___std::_List_iterator<std::_List_val<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>_std::allocator<std::pair<std::basic_string<char_std::char_traits<char>_std::allocator<char>>_const_ActiveSkillInfo__>>>>__>(
          *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&_Where,
          v22,
          v6);
        std::fill<std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>___std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>>(
          *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&_Where,
          (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)((char *)_Val + *(_DWORD *)&_Where),
          (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Count);
      }
      else
      {
        v17 = *(_DWORD *)&_Val->baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0];
        _Val = (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)(4 * _Count);
        _Count = v17;
        ____Uninit_move_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__PAV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVie(
          *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&_Where,
          v6,
          (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)(*(_DWORD *)&_Where + 4 * v5),
          &v4->baseclass_0._Alval,
          0,
          (std::_Nonscalar_ptr_iterator_tag)_Where.___u0.baseclass_0.baseclass_0.dummy[0]);
        v18 = v4->baseclass_0._Mylast;
        v19 = v4->baseclass_0._Mylast;
        v27 = 2;
        ____Uninit_fill_n_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__IV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVi(
          v19,
          v5 - ((signed int)((char *)v18 - *(_DWORD *)&_Where) >> 2),
          (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Count,
          &v4->baseclass_0._Alval,
          0,
          (std::_Nonscalar_ptr_iterator_tag)_Where.___u0.baseclass_0.baseclass_0.dummy[0]);
        v20 = _Val;
        v4->baseclass_0._Mylast = (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)((char *)v4->baseclass_0._Mylast + (unsigned int)_Val);
        std::fill<std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>___std::_List_iterator<std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>>>(
          *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&_Where,
          (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)((char *)v4->baseclass_0._Mylast - (char *)v20),
          (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Count);
      }
    }
    else
    {
      if ( 1073741823 - ((unsigned int)v10 >> 1) >= v10 )
      {
        v11 = ((unsigned int)v10 >> 1) + v10;
        _Count = v11;
      }
      else
      {
        _Count = 0;
        v11 = 0;
      }
      if ( v11 < v9 )
      {
        _Count = v9;
        v11 = v9;
      }
      v12 = std::allocator<QUEST_DATA__>::allocate((std::allocator<CBaseObject *> *)&v4->baseclass_0._Alval, v11);
      v13 = *(_DWORD *)&_Where - *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0];
      _Newvec = (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)v12;
      v13 >>= 2;
      v27 = 0;
      ____Uninit_fill_n_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__IV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVi(
        (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)v12
      + v13,
        v5,
        _Val,
        &v4->baseclass_0._Alval,
        0,
        (std::_Nonscalar_ptr_iterator_tag)_Where.___u0.baseclass_0.baseclass_0.dummy[0]);
      ____Uninit_move_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__PAV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVie(
        *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&v4->baseclass_0.___u0.baseclass_0.dummy[0],
        *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&_Where,
        _Newvec,
        &v4->baseclass_0._Alval,
        0,
        (std::_Nonscalar_ptr_iterator_tag)_Where.___u0.baseclass_0.baseclass_0.dummy[0]);
      v14 = v13 + v5;
      v15 = _Newvec;
      ____Uninit_move_PAV___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__PAV12_V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemVie(
        *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&_Where,
        v4->baseclass_0._Mylast,
        &_Newvec[v14],
        &v4->baseclass_0._Alval,
        0,
        (std::_Nonscalar_ptr_iterator_tag)_Where.___u0.baseclass_0.baseclass_0.dummy[0]);
      v16 = ((signed int)((char *)v4->baseclass_0._Mylast - *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0]) >> 2)
          + v5;
      if ( *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] )
        operator delete(*(void **)&v4->baseclass_0.___u0.baseclass_0.dummy[0]);
      v4->baseclass_0._Myend = &v15[_Count];
      v4->baseclass_0._Mylast = &v15[v16];
      *(_DWORD *)&v4->baseclass_0.___u0.baseclass_0.dummy[0] = v15;
    }
  }
}

//----- (00736040) --------------------------------------------------------
QUEST_DATA *__thiscall CQuestData::GetQuestData(CQuestData *this, unsigned __int16 QuestID)
{
  CQuestData *v2; // esi@1
  QUEST_DATA *result; // eax@2
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > iter; // [sp+4h] [bp-4h]@1

  v2 = this;
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::lower_bound(
    &this->m_hashmap_QuestData.baseclass_0,
    &iter,
    &QuestID);
  if ( iter == *(_DWORD *)&v2->m_hashmap_QuestData.baseclass_0._List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
    result = 0;
  else
    result = *(QUEST_DATA **)(*(_DWORD *)&iter + 12);
  return result;
}

//----- (00736080) --------------------------------------------------------
const char *__thiscall CQuestData::GetQuestName(CQuestData *this, unsigned __int16 QuestID)
{
  CQuestData *v2; // esi@1
  int v3; // eax@2
  const char *v4; // eax@3
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > result; // [sp+4h] [bp-4h]@1

  v2 = this;
  *(_DWORD *)&QuestID = QuestID;
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::lower_bound(
    &this->m_hashmap_QuestData.baseclass_0,
    &result,
    &QuestID);
  if ( result != *(_DWORD *)&v2->m_hashmap_QuestData.baseclass_0._List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]
    && (v3 = *(_DWORD *)(*(_DWORD *)&result + 12)) != 0 )
    v4 = CQuestData::GetDialog(v2, *(_DWORD *)(v3 + 8));
  else
    v4 = v2->m_pNULLSTR;
  return v4;
}

//----- (007360D0) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::__Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v1; // esi@1
  void **v2; // ecx@3
  void *v3; // eax@3
  void *v4; // edi@4

  v1 = this;
  if ( *(_DWORD *)&this->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] )
    operator delete(*(void **)&this->_Vec.baseclass_0.___u0.baseclass_0.dummy[0]);
  *(_DWORD *)&v1->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v1->_Vec.baseclass_0._Mylast = 0;
  v1->_Vec.baseclass_0._Myend = 0;
  v2 = *(void ***)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->_List.baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  operator delete(*(void **)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0]);
}

//----- (00736140) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Check_size(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *v1; // ebx@1
  double v2; // st7@1
  unsigned int v3; // esi@1
  signed int v4; // eax@2
  std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *v5; // ecx@5
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v6; // edi@5
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v9; // ST08_4@9
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Val; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = this->_Max_bucket_size;
  v3 = this->_Maxidx;
  *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = (double)this->_List.baseclass_0.baseclass_0._Mysize
                                                                                 / (double)v3;
  if ( *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] > v2 )
  {
    v4 = 0;
    do
    {
      if ( v3 >= 0x1FFFFFFF )
        break;
      ++v4;
      v3 *= 2;
    }
    while ( v4 < 3 );
    v5 = &this->_Vec;
    v6 = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&v1->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
    _Val = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v6 != v1->_Vec.baseclass_0._Mylast )
    {
      v5 = &v1->_Vec;
      v1->_Vec.baseclass_0._Mylast = v6;
    }
    __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
      v5,
      *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v5->baseclass_0.___u0.baseclass_0.dummy[0],
      2 * v3,
      &_Val);
    v1->_Mask = v3 - 1;
    v9 = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v1->_Maxidx = v3;
    std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Reinsert(
      v1,
      v9);
  }
}

//----- (007361F0) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Check_size(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v1; // ebx@1
  double v2; // st7@1
  unsigned int v3; // esi@1
  signed int v4; // eax@2
  std::vector<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>, *v5; // ecx@5
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v6; // edi@5
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v9; // ST08_4@9
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Val; // [sp+8h] [bp-4h]@1

  v1 = this;
  v2 = this->_Max_bucket_size;
  v3 = this->_Maxidx;
  *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = (double)this->_List.baseclass_0.baseclass_0._Mysize
                                                                                 / (double)v3;
  if ( *(float *)&_Val.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] > v2 )
  {
    v4 = 0;
    do
    {
      if ( v3 >= 0x1FFFFFFF )
        break;
      ++v4;
      v3 *= 2;
    }
    while ( v4 < 3 );
    v5 = &this->_Vec;
    v6 = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&v1->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
    _Val = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    if ( v6 != v1->_Vec.baseclass_0._Mylast )
    {
      v5 = &v1->_Vec;
      v1->_Vec.baseclass_0._Mylast = v6;
    }
    __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
      v5,
      *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v5->baseclass_0.___u0.baseclass_0.dummy[0],
      2 * v3,
      &_Val);
    v1->_Mask = v3 - 1;
    v9 = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
    v1->_Maxidx = v3;
    std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Reinsert(
      v1,
      v9);
  }
}

//----- (007362A0) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::clear(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v1; // esi@1
  void **v2; // ecx@1
  void *v3; // eax@1
  void *v4; // edi@2
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v5; // edi@3
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v6; // edx@3
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Val; // [sp+8h] [bp-4h]@3

  v1 = this;
  v2 = *(void ***)&this->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3 = *v2;
  *v2 = v2;
  *(_DWORD *)(*(_DWORD *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v1->_List.baseclass_0.baseclass_0._Mysize = 0;
  if ( v3 != *(void **)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    do
    {
      v4 = *(void **)v3;
      operator delete(v3);
      v3 = v4;
    }
    while ( v4 != *(void **)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] );
  }
  v5 = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&v1->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v6 = v1->_Vec.baseclass_0._Mylast;
  _Val = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v1->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  if ( v5 != v6 )
    v1->_Vec.baseclass_0._Mylast = v5;
  __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
    &v1->_Vec,
    *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v1->_Vec.baseclass_0.___u0.baseclass_0.dummy[0],
    0x10u,
    &_Val);
  v1->_Mask = 7;
  v1->_Maxidx = 8;
}
// 7362A0: could not find valid save-restore pair for ebx

//----- (00736330) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, stdext::hash_compare<unsigned short,std::less<unsigned short> > *_Parg, std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > *_Al)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v3; // esi@1
  void *v4; // eax@1
  stdext::hash_compare<unsigned short,std::less<unsigned short> > *v5; // edx@2
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v6; // edi@2
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *v7; // eax@2
  std::exception thisa; // [sp+0h] [bp-1Ch]@7
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v11; // [sp+Ch] [bp-10h]@1
  int v12; // [sp+18h] [bp-4h]@2

  v3 = this;
  v11 = this;
  this->baseclass_0.___u0.baseclass_0.dummy[0] = _Parg->comp.baseclass_0.dummy[0];
  this->_List.baseclass_0.baseclass_0._Mysize = 0;
  v4 = operator new(0x10u);
  if ( !v4 )
  {
    _Parg = 0;
    std::exception::exception(&thisa, (const char *const *)&_Parg);
    thisa.vfptr = (std::exceptionVtbl *)&std::bad_alloc::_vftable_;
    _CxxThrowException(&thisa, &_TI2_AVbad_alloc_std__);
  }
  *(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] = v4;
  *(_DWORD *)v4 = v4;
  *(_DWORD *)(*(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] + 4) = *(_DWORD *)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v12 = 0;
  *(_DWORD *)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] = 0;
  v3->_Vec.baseclass_0._Mylast = 0;
  v3->_Vec.baseclass_0._Myend = 0;
  v5 = *(stdext::hash_compare<unsigned short,std::less<unsigned short> > **)&v3->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v3->_Max_bucket_size = 1.0;
  v6 = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v7 = v3->_Vec.baseclass_0._Mylast;
  LOBYTE(v12) = 1;
  _Parg = v5;
  if ( v6 != v7 )
    v3->_Vec.baseclass_0._Mylast = v6;
  __Insert_n___vector_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std__V__allocator_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDummy__V__allocator_PAUItemViewDummy___std___2__std___2__std___std__V__allocator_V___List_iterator_V___List_val_U__pair___CBV__basic_string_DU__char_traits_D_std__V__allocator_D_2__std__V__list_PAUItemViewDum(
    &v3->_Vec,
    *(std::_Vector_const_iterator<std::_Vector_val<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,std::allocator<std::_List_iterator<std::_List_val<std::pair<uns *)&v3->_Vec.baseclass_0.___u0.baseclass_0.dummy[0],
    0x10u,
    (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&_Parg);
  v3->_Mask = 7;
  v3->_Maxidx = 8;
}
// 977594: using guessed type int (__thiscall *std__bad_alloc___vftable_)(void *p, char);

//----- (00736420) --------------------------------------------------------
std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Insert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this, std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *result, std::pair<unsigned short const ,QUEST_DATA *> *_Val, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Plist)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *v4; // edi@1
  _ldiv_t v5; // qax@1
  unsigned int v6; // ebx@1
  int v7; // eax@3
  int v8; // ecx@3
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v9; // esi@3
  int v10; // edi@3
  int v11; // eax@3
  const unsigned __int16 v12; // ax@5
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v13; // edx@8
  int v14; // eax@10
  std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *v15; // eax@16
  int v16; // edx@19
  int v17; // ecx@19
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *thisa; // [sp+Ch] [bp-4h]@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Vala; // [sp+1Ch] [bp+Ch]@10

  v4 = this;
  thisa = this;
  v5 = ldiv((_Val->baseclass_0.first ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773);
  v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4->_Mask;
  if ( v4->_Maxidx <= v6 )
    v6 += -1 - (v4->_Mask >> 1);
  v7 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *(_DWORD *)(v7 + 8 * v6);
  v9 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v4->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v10 = (int)&v4->_List;
  v11 = v7 + 8 * v6;
  if ( v9 == v8
    || (v9 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)(v11 + 4),
        v9 == v8) )
    goto LABEL_8;
  v12 = _Val->baseclass_0.first;
  while ( 1 )
  {
    v9 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)(*(_DWORD *)&v9 + 4);
    if ( *(_WORD *)(*(_DWORD *)&v9 + 8) <= v12 )
      break;
    if ( v9 == v8 )
      goto LABEL_8;
  }
  if ( *(_WORD *)(*(_DWORD *)&v9 + 8) < v12 )
  {
    v9 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v9;
LABEL_8:
    v13 = _Plist;
    if ( v9 != **(_DWORD **)&_Plist )
    {
      std::list<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Splice_same(
        (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)v10,
        v9,
        (std::list<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)v10,
        _Plist.baseclass_0,
        *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)_Plist,
        1u);
      v13 = _Plist;
    }
    v14 = *(_DWORD *)&thisa->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v6;
    _Vala = v13;
    if ( *(_DWORD *)v14 == *(_DWORD *)v10 )
    {
      *(_DWORD *)v14 = v13;
      *(_DWORD *)(*(_DWORD *)&thisa->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v6 + 4) = v13;
    }
    else
    {
      if ( *(_DWORD *)v14 == v9 )
      {
        *(_DWORD *)v14 = v13;
      }
      else
      {
        v16 = *(_DWORD *)(v14 + 4);
        v17 = *(_DWORD *)v16;
        *(_DWORD *)(v14 + 4) = *(_DWORD *)v16;
        if ( v17 != _Vala )
          *(_DWORD *)(*(_DWORD *)&thisa->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v6 + 4) = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)&thisa->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v6 + 4) + 4);
      }
    }
    std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Check_size(thisa);
    v15 = result;
    *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Plist;
    result->baseclass_0.second = 1;
    return v15;
  }
  if ( _Plist != *(_DWORD *)v10 )
  {
    **(_DWORD **)(*(_DWORD *)&_Plist + 4) = **(_DWORD **)&_Plist;
    *(_DWORD *)(**(_DWORD **)&_Plist + 4) = *(_DWORD *)(*(_DWORD *)&_Plist + 4);
    operator delete(*(void **)&_Plist);
    --*(_DWORD *)(v10 + 4);
  }
  v15 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = v9;
  result->baseclass_0.second = 0;
  return v15;
}

//----- (00736570) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Reinsert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Last)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,0> > *v2; // esi@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v3; // ST08_4@3
  bool v4; // bl@3
  std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> result; // [sp+4h] [bp-8h]@3
  int _Lasta; // [sp+14h] [bp+8h]@2

  v2 = this;
  if ( **(_DWORD **)&this->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] != _Last )
  {
    _Lasta = *(_DWORD *)(*(_DWORD *)&_Last + 4);
    do
    {
      v3 = (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v2->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v4 = v3 == _Lasta;
      std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Insert(
        v2,
        &result,
        (std::pair<unsigned short const ,QUEST_DATA *> *)(*(_DWORD *)&v3 + 8),
        v3);
    }
    while ( !v4 );
  }
}

//----- (007365C0) --------------------------------------------------------
std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *__thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Insert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *result, std::pair<unsigned short const ,QUEST_DATA *> *_Val, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Plist)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v4; // edi@1
  _ldiv_t v5; // qax@1
  unsigned int v6; // ebx@1
  int v7; // eax@3
  int v8; // ecx@3
  std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v9; // esi@3
  int v10; // eax@3
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v11; // eax@9
  int v12; // eax@11
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v13; // edx@14
  int v14; // ecx@15
  std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *v15; // eax@18
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Vala; // [sp+18h] [bp+Ch]@11

  v4 = this;
  v5 = ldiv((_Val->baseclass_0.first ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773);
  v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4->_Mask;
  if ( v4->_Maxidx <= v6 )
    v6 += -1 - (v4->_Mask >> 1);
  v7 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0];
  v8 = *(_DWORD *)(v7 + 8 * v6);
  v9 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v4->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v10 = v7 + 8 * v6;
  if ( v9 != v8 )
  {
    v9 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)(v10 + 4);
    if ( v9 != v8 )
    {
      while ( 1 )
      {
        v9 = *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)(*(_DWORD *)&v9 + 4);
        if ( _Val->baseclass_0.first >= *(_WORD *)(*(_DWORD *)&v9 + 8) )
          break;
        if ( v9 == v8 )
          goto LABEL_9;
      }
      v9 = (std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v9;
    }
  }
LABEL_9:
  v11 = _Plist;
  if ( v9 != **(_DWORD **)&_Plist )
  {
    std::list<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Splice_same(
      &v4->_List,
      v9,
      &v4->_List,
      _Plist.baseclass_0,
      *(std::_List_const_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)_Plist,
      1u);
    v11 = _Plist;
  }
  _Vala = v11;
  v12 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v6;
  if ( *(_DWORD *)v12 != *(_DWORD *)&v4->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
  {
    if ( *(_DWORD *)v12 == v9 )
    {
      v13 = _Plist;
    }
    else
    {
      v14 = **(_DWORD **)(v12 + 4);
      *(_DWORD *)(v12 + 4) = v14;
      if ( v14 == _Vala )
        goto LABEL_18;
      v12 = *(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v6 + 4;
      v13 = *(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)(*(_DWORD *)v12 + 4);
    }
    *(_DWORD *)v12 = v13;
    goto LABEL_18;
  }
  *(_DWORD *)v12 = _Plist;
  *(_DWORD *)(*(_DWORD *)&v4->_Vec.baseclass_0.___u0.baseclass_0.dummy[0] + 8 * v6 + 4) = _Vala;
LABEL_18:
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Check_size(v4);
  v15 = result;
  *(_DWORD *)&result->baseclass_0.first.baseclass_0.baseclass_0.___u0.baseclass_0.baseclass_0.dummy[0] = _Plist;
  result->baseclass_0.second = 1;
  return v15;
}

//----- (007366C0) --------------------------------------------------------
void __thiscall std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Reinsert(std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *this, std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > _Last)
{
  std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *v2; // esi@1
  std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > v3; // ST08_4@3
  bool v4; // bl@3
  std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> result; // [sp+4h] [bp-8h]@3
  int _Lasta; // [sp+14h] [bp+8h]@2

  v2 = this;
  if ( **(_DWORD **)&this->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] != _Last )
  {
    _Lasta = *(_DWORD *)(*(_DWORD *)&_Last + 4);
    do
    {
      v3 = (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >)**(_DWORD **)&v2->_List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
      v4 = v3 == _Lasta;
      std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Insert(
        v2,
        &result,
        (std::pair<unsigned short const ,QUEST_DATA *> *)(*(_DWORD *)&v3 + 8),
        v3);
    }
    while ( !v4 );
  }
}

//----- (00736710) --------------------------------------------------------
void __thiscall CQuestData::ClearBF(CQuestData *this)
{
  CQuestData *v1; // esi@1
  QUEST_DATA_HEAD *v2; // eax@5
  unsigned int v3; // edi@6
  QUEST_DATA **v4; // edx@7
  void *v5; // eax@8
  QUEST_DATA *v6; // edx@10
  QUEST_DATA *v7; // ecx@12

  v1 = this;
  if ( this->m_pBF )
  {
    operator delete(this->m_pBF);
    v1->m_pBF = 0;
  }
  if ( v1->m_ppQuestDataArray )
  {
    if ( !v1->m_bReadonly )
    {
      v2 = v1->m_pDataHead;
      if ( v2 )
      {
        v3 = 0;
        if ( v2->NumOfQuest > 0u )
        {
          do
          {
            v4 = v1->m_ppQuestDataArray;
            if ( v4[v3] )
            {
              v5 = v4[v3]->pScriptStart;
              if ( v5 )
                operator delete__(v5);
              v6 = v1->m_ppQuestDataArray[v3];
              if ( v6->pScriptDoing )
                operator delete__(v6->pScriptDoing);
              v7 = v1->m_ppQuestDataArray[v3];
              if ( v7->pScriptEnd )
                operator delete__(v7->pScriptEnd);
              operator delete(v1->m_ppQuestDataArray[v3]);
            }
            ++v3;
          }
          while ( v3 < v1->m_pDataHead->NumOfQuest );
        }
      }
    }
    operator delete__(v1->m_ppQuestDataArray);
    v1->m_ppQuestDataArray = 0;
  }
  if ( v1->m_pDataHead )
  {
    operator delete(v1->m_pDataHead);
    v1->m_pDataHead = 0;
  }
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::clear((std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *)&v1->m_hashmap_QuestData);
}

//----- (00736800) --------------------------------------------------------
void __thiscall CQuestData::CQuestData(CQuestData *this, CDataReader *pQuestDialog)
{
  CQuestData *v2; // esi@1

  v2 = this;
  this->m_pQuestDialog = pQuestDialog;
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>(
    (std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *)&this->m_hashmap_QuestData,
    (stdext::hash_compare<unsigned short,std::less<unsigned short> > *)&pQuestDialog + 3,
    (std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > *)&pQuestDialog + 3);
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>(
    &v2->m_mhmap_QuestDataByMobID.baseclass_0,
    (stdext::hash_compare<unsigned short,std::less<unsigned short> > *)&pQuestDialog + 3,
    (std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > *)&pQuestDialog + 3);
  v2->m_pNULLSTR = NULLSTR;
  v2->m_ReadError = 1;
  v2->m_bReadonly = 0;
  v2->m_pBF = 0;
  v2->m_pDataHead = 0;
  v2->m_ppQuestDataArray = 0;
}

//----- (00736890) --------------------------------------------------------
void __thiscall CQuestData::_CQuestData(CQuestData *this)
{
  CQuestData *v1; // esi@1

  v1 = this;
  CQuestData::ClearBF(this);
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::__Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>(&v1->m_mhmap_QuestDataByMobID.baseclass_0);
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::__Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>((std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *)&v1->m_hashmap_QuestData);
}

//----- (007368F0) --------------------------------------------------------
void __thiscall CQuestData::QuestData_HashDataIn(CQuestData *this)
{
  CQuestData *v1; // edi@1
  QUEST_DATA_HEAD *v2; // eax@1
  unsigned __int16 v3; // ax@2
  int v4; // ebx@4
  int v5; // esi@5
  unsigned __int16 v6; // dx@7
  int v7; // ebx@7
  std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *v8; // eax@7
  int v9; // ecx@7
  unsigned int v10; // ebx@8
  int v11; // edx@8
  int v12; // eax@9
  signed __int16 v13; // ax@11
  QUEST_DATA **v14; // edx@13
  int v15; // ecx@13
  int v16; // esi@13
  int v17; // eax@13
  int v18; // ebx@13
  std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *v19; // eax@13
  unsigned int v20; // ecx@13
  char *v21; // ebx@14
  QUEST_DATA **v22; // edx@18
  int v23; // edi@18
  std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *v24; // eax@18
  int v25; // ecx@18
  char v26; // [sp+Ch] [bp-4Ch]@19
  char v27; // [sp+14h] [bp-44h]@14
  std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> result; // [sp+1Ch] [bp-3Ch]@8
  __int16 v29; // [sp+24h] [bp-34h]@18
  QUEST_DATA *v30; // [sp+28h] [bp-30h]@18
  __int16 v31; // [sp+2Ch] [bp-2Ch]@13
  int v32; // [sp+30h] [bp-28h]@13
  std::pair<unsigned short,QUEST_DATA *> _Val; // [sp+34h] [bp-24h]@7
  unsigned int NumOfQuest; // [sp+3Ch] [bp-1Ch]@4
  char *lpQuestData; // [sp+40h] [bp-18h]@8
  int v36; // [sp+44h] [bp-14h]@8
  int k; // [sp+48h] [bp-10h]@5
  int j; // [sp+4Ch] [bp-Ch]@8
  CQuestData *v39; // [sp+50h] [bp-8h]@1
  unsigned int i; // [sp+54h] [bp-4h]@4

  v1 = this;
  v2 = this->m_pDataHead;
  v39 = this;
  if ( v2 )
    v3 = v2->NumOfQuest;
  else
    v3 = 0;
  v4 = v3;
  NumOfQuest = v3;
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::clear((std::_Hash<std::_Hmap_traits<unsigned short,QUEST_DATA *,stdext::hash_compare<unsigned short,std::less<unsigned short> >,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> >,1> > *)&this->m_hashmap_QuestData);
  std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::clear(&v1->m_mhmap_QuestDataByMobID.baseclass_0);
  i = 0;
  if ( v4 )
  {
    v5 = (int)&v1->m_hashmap_QuestData.baseclass_0._List;
    for ( k = (int)&v1->m_hashmap_QuestData.baseclass_0._List; ; v5 = k )
    {
      v6 = v1->m_ppQuestDataArray[i]->ID;
      _Val.baseclass_0.second = v1->m_ppQuestDataArray[i];
      v7 = **(_DWORD **)v5;
      _Val.baseclass_0.first = v6;
      v8 = std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Buynode<std::pair<unsigned_short_QUEST_DATA__>>(
             (std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)v5,
             (std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *)v7,
             *(std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node **)(v7 + 4),
             &_Val);
      v9 = *(_DWORD *)(v5 + 4);
      if ( (unsigned int)(536870910 - v9) < 1
        || ((*(_DWORD *)(v5 + 4) = v9 + 1,
             *(_DWORD *)(v7 + 4) = v8,
             v8->_Prev->_Next = v8,
             std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_0>>::_Insert(
               &v1->m_hashmap_QuestData.baseclass_0,
               &result,
               (std::pair<unsigned short const ,QUEST_DATA *> *)(**(_DWORD **)v5 + 8),
               **(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)v5),
             v10 = i,
             v11 = v1->m_ppQuestDataArray[i]->ID,
             lpQuestData = (char *)v1->m_ppQuestDataArray[i],
             j = v11,
             std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::lower_bound(
               &v1->m_hashmap_QuestData.baseclass_0,
               (std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > *)&v36,
               (const unsigned __int16 *)&j),
             v36 == *(_DWORD *)&v1->m_hashmap_QuestData.baseclass_0._List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0])
         || (v12 = *(_DWORD *)(v36 + 12)) == 0
         || !*(_BYTE *)(v12 + 29) ? (v13 = -1) : (v13 = *(_WORD *)(v12 + 30)),
            v14 = v1->m_ppQuestDataArray,
            v15 = *(_DWORD *)&v1->m_mhmap_QuestDataByMobID.baseclass_0._List.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0],
            v16 = (int)&v1->m_mhmap_QuestDataByMobID.baseclass_0._List,
            v31 = v13,
            v17 = (int)v14[v10],
            v18 = *(_DWORD *)v15,
            v32 = v17,
            v19 = std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Buynode<std::pair<unsigned_short_QUEST_DATA__>>(
                    &v1->m_mhmap_QuestDataByMobID.baseclass_0._List.baseclass_0,
                    (std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *)v18,
                    *(std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node **)(v18 + 4),
                    (std::pair<unsigned short,QUEST_DATA *> *)&v31),
            v20 = v1->m_mhmap_QuestDataByMobID.baseclass_0._List.baseclass_0.baseclass_0._Mysize,
            536870910 - v20 < 1) )
LABEL_23:
        std::_Xlength_error("list<T> too long");
      v1->m_mhmap_QuestDataByMobID.baseclass_0._List.baseclass_0.baseclass_0._Mysize = v20 + 1;
      *(_DWORD *)(v18 + 4) = v19;
      v19->_Prev->_Next = v19;
      std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Insert(
        &v1->m_mhmap_QuestDataByMobID.baseclass_0,
        (std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *)&v27,
        (std::pair<unsigned short const ,QUEST_DATA *> *)(**(_DWORD **)v16 + 8),
        **(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)v16);
      j = 0;
      v21 = lpQuestData + 96;
      do
      {
        if ( *(v21 - 4) && (!*v21 || *v21 == 3) )
        {
          v22 = v1->m_ppQuestDataArray;
          v29 = *((_WORD *)v21 - 1);
          v23 = **(_DWORD **)v16;
          v30 = v22[i];
          v24 = std::_List_val<std::pair<unsigned_short_const_QUEST_DATA__>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>>::_Buynode<std::pair<unsigned_short_QUEST_DATA__>>(
                  (std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > *)v16,
                  (std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node *)v23,
                  *(std::_List_nod<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > >::_Node **)(v23 + 4),
                  (std::pair<unsigned short,QUEST_DATA *> *)&v29);
          v25 = *(_DWORD *)(v16 + 4);
          if ( (unsigned int)(536870910 - v25) < 1 )
            goto LABEL_23;
          *(_DWORD *)(v16 + 4) = v25 + 1;
          *(_DWORD *)(v23 + 4) = v24;
          v24->_Prev->_Next = v24;
          std::_Hash<std::_Hmap_traits<unsigned_short_QUEST_DATA___stdext::hash_compare<unsigned_short_std::less<unsigned_short>>_std::allocator<std::pair<unsigned_short_const_QUEST_DATA__>>_1>>::_Insert(
            &v39->m_mhmap_QuestDataByMobID.baseclass_0,
            (std::pair<std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > >,bool> *)&v26,
            (std::pair<unsigned short const ,QUEST_DATA *> *)(**(_DWORD **)v16 + 8),
            **(std::_List_iterator<std::_List_val<std::pair<unsigned short const ,QUEST_DATA *>,std::allocator<std::pair<unsigned short const ,QUEST_DATA *> > > > **)v16);
          v1 = v39;
        }
        v21 += 8;
        ++j;
      }
      while ( j < 5 );
      ++i;
      if ( i >= NumOfQuest )
        break;
    }
  }
}

//----- (00736AF0) --------------------------------------------------------
int __thiscall CQuestData::ReadModeRead(CQuestData *this, const char *pFN)
{
  CQuestData *v2; // esi@1
  int result; // eax@1
  int v4; // edi@1
  int v5; // eax@3
  int v6; // ebx@3
  void *v7; // eax@3
  unsigned int v8; // ebx@7
  void *v9; // eax@7
  void *v10; // eax@10
  QUEST_DATA_HEAD *v11; // ecx@10
  char *v12; // eax@10
  unsigned int v13; // edx@10
  int v14; // ecx@11
  int v15; // edi@11
  int fp; // [sp+10h] [bp+8h]@1

  v2 = this;
  CQuestData::ClearBF(this);
  result = (int)fopen(pFN, "rb");
  v4 = result;
  fp = result;
  if ( !result )
  {
    v2->m_ReadError = 1;
    return result;
  }
  v5 = _fileno((_iobuf *)result);
  v6 = _filelength(v5);
  v7 = operator new(4u);
  v2->m_pDataHead = (QUEST_DATA_HEAD *)v7;
  if ( fread(v7, 4u, 1u, (_iobuf *)v4) != 1 )
  {
    v2->m_ReadError = 2;
ERROR_READ:
    CQuestData::ClearBF(v2);
    fclose((_iobuf *)v4);
    return 0;
  }
  if ( v2->m_pDataHead->VersionNo != 6 )
  {
    v2->m_ReadError = 3;
    goto ERROR_READ;
  }
  v8 = v6 - 4;
  v9 = operator new__(v8);
  v2->m_pBF = (char *)v9;
  if ( fread(v9, v8, 1u, (_iobuf *)v4) != 1 )
  {
    v2->m_ReadError = 4;
    goto ERROR_READ;
  }
  v10 = operator new__(4 * v2->m_pDataHead->NumOfQuest);
  v11 = v2->m_pDataHead;
  v2->m_ppQuestDataArray = (QUEST_DATA **)v10;
  memset((char *)v10, 0, 4 * v11->NumOfQuest);
  v12 = v2->m_pBF;
  v13 = 0;
  if ( v2->m_pDataHead->NumOfQuest > 0u )
  {
    do
    {
      v2->m_ppQuestDataArray[v13] = (QUEST_DATA *)v12;
      *((_DWORD *)v12 + 167) = v12 + 684;
      v14 = *((_WORD *)v12 + 330);
      *((_DWORD *)v12 + 168) = &v12[v14 + 684];
      v15 = *((_WORD *)v12 + 332);
      *((_DWORD *)v12 + 169) = &v12[v14 + 684] + v15;
      ++v13;
      v12 += v14 + v15 + *((_WORD *)v12 + 331) + 680;
    }
    while ( v13 < v2->m_pDataHead->NumOfQuest );
    v4 = fp;
  }
  fclose((_iobuf *)v4);
  v2->m_ReadError = 0;
  CQuestData::QuestData_HashDataIn(v2);
  return 1;
}

//----- (00736C80) --------------------------------------------------------
int __thiscall CQuestData::ReadModeEdit(CQuestData *this, const char *pFN)
{
  CQuestData *v2; // edi@1
  int result; // eax@1
  int v4; // ebx@1
  int v5; // eax@3
  void *v6; // eax@3
  QUEST_DATA_HEAD *v7; // eax@6
  QUEST_DATA_HEAD *v8; // eax@8
  void *v9; // esi@9
  void *v10; // eax@10
  unsigned int v11; // ST18_4@10
  void *v12; // eax@10
  unsigned int v13; // ST08_4@10
  void *v14; // ST04_4@10
  unsigned int i; // [sp+10h] [bp+8h]@8

  v2 = this;
  CQuestData::ClearBF(this);
  result = (int)fopen(pFN, "rb");
  v4 = result;
  if ( !result )
  {
    v2->m_ReadError = 1;
    return result;
  }
  v5 = _fileno((_iobuf *)result);
  _filelength(v5);
  v6 = operator new(4u);
  v2->m_pDataHead = (QUEST_DATA_HEAD *)v6;
  if ( fread(v6, 4u, 1u, (_iobuf *)v4) != 1 )
  {
    v2->m_ReadError = 2;
ERROR_READ_0:
    CQuestData::ClearBF(v2);
    fclose((_iobuf *)v4);
    return 0;
  }
  v7 = v2->m_pDataHead;
  if ( v7->VersionNo != 6 )
  {
    v2->m_ReadError = 3;
    goto ERROR_READ_0;
  }
  v2->m_ppQuestDataArray = (QUEST_DATA **)operator new__(4 * v7->NumOfQuest);
  v8 = v2->m_pDataHead;
  v2->m_ReadError = 4;
  i = 0;
  if ( v8->NumOfQuest > 0u )
  {
    do
    {
      v9 = operator new(0x2A8u);
      memset((char *)v9, 0, 0x2A8u);
      v2->m_ppQuestDataArray[i] = (QUEST_DATA *)v9;
      if ( fread(v9, 0x2A8u, 1u, (_iobuf *)v4) != 1 )
        goto ERROR_READ_0;
      v10 = operator new__(*((_WORD *)v9 + 330));
      v11 = *((_WORD *)v9 + 332);
      *((_DWORD *)v9 + 167) = v10;
      *((_DWORD *)v9 + 168) = operator new__(v11);
      v12 = operator new__(*((_WORD *)v9 + 331));
      v13 = *((_WORD *)v9 + 330);
      v14 = (void *)*((_DWORD *)v9 + 167);
      *((_DWORD *)v9 + 169) = v12;
      if ( fread(v14, v13, 1u, (_iobuf *)v4) != 1 )
        goto ERROR_READ_0;
      if ( fread(*((void **)v9 + 168), *((_WORD *)v9 + 332), 1u, (_iobuf *)v4) != 1
        || fread(*((void **)v9 + 169), *((_WORD *)v9 + 331), 1u, (_iobuf *)v4) != 1 )
        goto ERROR_READ_0;
      *(_DWORD *)v9 = *((_WORD *)v9 + 330) + *((_WORD *)v9 + 331) + *((_WORD *)v9 + 332) + 680;
      ++i;
    }
    while ( i < v2->m_pDataHead->NumOfQuest );
  }
  fclose((_iobuf *)v4);
  v2->m_ReadError = 0;
  CQuestData::QuestData_HashDataIn(v2);
  return 1;
}

//----- (00736E90) --------------------------------------------------------
int __thiscall CQuestData::Read(CQuestData *this, const char *pFN, int bReadonly)
{
  int result; // eax@2

  this->m_bReadonly = bReadonly;
  if ( bReadonly )
    result = CQuestData::ReadModeRead(this, pFN);
  else
    result = CQuestData::ReadModeEdit(this, pFN);
  return result;
}

//----- (00736EC0) --------------------------------------------------------
void __thiscall PROTO_FRIEND_INFO::PROTO_FRIEND_INFO(PROTO_FRIEND_INFO *this)
{
  *(_QWORD *)&this->charid.n5_name[12] = 0i64;
  *(_QWORD *)&this->charid.n5_name[4] = 0i64;
  *(_DWORD *)&this->charid.n5_name[0] = 0;
  *(_QWORD *)&this->map.n3_name[4] = 0i64;
  *(_DWORD *)&this->map.n3_name[0] = 0;
}

//----- (00736EE0) --------------------------------------------------------
PROTO_FRIEND_INFO *__thiscall PROTO_FRIEND_INFO::operator_(PROTO_FRIEND_INFO *this, PROTO_FRIEND_INFO *__that)
{
  PROTO_FRIEND_INFO *result; // eax@1
  char *v3; // edx@1
  signed int v4; // edi@1

  result = this;
  this->logininfo._bf0 = __that->logininfo._bf0;
  *(_QWORD *)&this->charid.n5_name[0] = *(_QWORD *)&__that->charid.n5_name[0];
  *(_QWORD *)&this->charid.n5_name[8] = *(_QWORD *)&__that->charid.n5_name[8];
  *(_DWORD *)&this->charid.n5_name[16] = *(_DWORD *)&__that->charid.n5_name[16];
  this->classid = __that->classid;
  this->level = __that->level;
  this->isparty = __that->isparty;
  this->flag = __that->flag;
  *(_QWORD *)&this->map.n3_name[0] = *(_QWORD *)&__that->map.n3_name[0];
  *(_DWORD *)&this->map.n3_name[8] = *(_DWORD *)&__that->map.n3_name[8];
  v3 = this->statustitle;
  v4 = 32;
  do
  {
    *v3 = v3[(char *)__that - (char *)this];
    ++v3;
    --v4;
  }
  while ( v4 );
  return result;
}

//----- (00736F60) --------------------------------------------------------
int __thiscall CFriend::Del(CFriend *this, Name5 *pCharID)
{
  int v2; // edi@1
  int v3; // edx@1
  char *v4; // eax@2
  int result; // eax@9

  v2 = this->m_NumOfFriend;
  v3 = 0;
  if ( this->m_NumOfFriend <= 0 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    v4 = &this->m_Friends[0].charid.n5_name[8];
    while ( *((_DWORD *)v4 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v4 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v4 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v4 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v3;
      v4 += 72;
      if ( v3 >= v2 )
        goto LABEL_9;
    }
    this->m_NumOfFriend = v2 - 1;
    memcpy((char *)&this->m_Friends[v3], (char *)&this->m_Friends[v3 + 1], 72 * (v2 - 1 - v3));
    result = 1;
  }
  return result;
}

//----- (00736FE0) --------------------------------------------------------
PROTO_FRIEND_INFO *__thiscall CFriend::Get(CFriend *this, Name5 *pCharID)
{
  int v2; // edx@1
  char *v3; // eax@2
  PROTO_FRIEND_INFO *result; // eax@9

  v2 = 0;
  if ( this->m_NumOfFriend <= 0 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    v3 = &this->m_Friends[0].charid.n5_name[8];
    while ( *((_DWORD *)v3 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v3 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v3 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v3 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v3 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v2;
      v3 += 72;
      if ( v2 >= this->m_NumOfFriend )
        goto LABEL_9;
    }
    result = &this->m_Friends[v2];
  }
  return result;
}

//----- (00737040) --------------------------------------------------------
int __thiscall CFriend::Login(CFriend *this, Name5 *pCharID)
{
  int v2; // edx@1
  char *v3; // eax@2
  int result; // eax@9

  v2 = 0;
  if ( this->m_NumOfFriend <= 0 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    v3 = &this->m_Friends[0].charid.n5_name[8];
    while ( *((_DWORD *)v3 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v3 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v3 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v3 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v3 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v2;
      v3 += 72;
      if ( v2 >= this->m_NumOfFriend )
        goto LABEL_9;
    }
    this->m_Friends[v2].logininfo._bf0 |= 1u;
    result = 1;
  }
  return result;
}

//----- (007370B0) --------------------------------------------------------
int __thiscall CFriend::MapChange(CFriend *this, Name5 charid, Name3 *pMapName)
{
  int v3; // edx@1
  char *v4; // eax@2
  int result; // eax@7

  v3 = 0;
  if ( this->m_NumOfFriend <= 0 )
  {
LABEL_7:
    result = 0;
  }
  else
  {
    v4 = &this->m_Friends[0].charid.n5_name[8];
    while ( __PAIR__(*((_DWORD *)v4 - 1), *((_DWORD *)v4 - 2)) != *(_QWORD *)&charid
         || *(_QWORD *)v4 != *(_QWORD *)&charid.n5_name[8]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&charid.n5_name[16] )
    {
      ++v3;
      v4 += 72;
      if ( v3 >= this->m_NumOfFriend )
        goto LABEL_7;
    }
    *(_QWORD *)&this->m_Friends[v3].map.n3_name[0] = *(_QWORD *)&pMapName->n3_name[0];
    *(_DWORD *)&this->m_Friends[v3].map.n3_name[8] = *(_DWORD *)&pMapName->n3_name[8];
    result = 1;
  }
  return result;
}

//----- (00737120) --------------------------------------------------------
int __thiscall CFriend::PartyChange(CFriend *this, Name5 charid, char IsParty)
{
  int v3; // edx@1
  char *v4; // eax@2
  int result; // eax@7

  v3 = 0;
  if ( this->m_NumOfFriend <= 0 )
  {
LABEL_7:
    result = 0;
  }
  else
  {
    v4 = &this->m_Friends[0].charid.n5_name[8];
    while ( __PAIR__(*((_DWORD *)v4 - 1), *((_DWORD *)v4 - 2)) != *(_QWORD *)&charid
         || *(_QWORD *)v4 != *(_QWORD *)&charid.n5_name[8]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&charid.n5_name[16] )
    {
      ++v3;
      v4 += 72;
      if ( v3 >= this->m_NumOfFriend )
        goto LABEL_7;
    }
    this->m_Friends[v3].isparty = IsParty;
    result = 1;
  }
  return result;
}

//----- (00737180) --------------------------------------------------------
int __thiscall CFriend::LevelChange(CFriend *this, Name5 charid, char Level)
{
  int v3; // edx@1
  char *v4; // eax@2
  int result; // eax@7

  v3 = 0;
  if ( this->m_NumOfFriend <= 0 )
  {
LABEL_7:
    result = 0;
  }
  else
  {
    v4 = &this->m_Friends[0].charid.n5_name[8];
    while ( __PAIR__(*((_DWORD *)v4 - 1), *((_DWORD *)v4 - 2)) != *(_QWORD *)&charid
         || *(_QWORD *)v4 != *(_QWORD *)&charid.n5_name[8]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&charid.n5_name[16] )
    {
      ++v3;
      v4 += 72;
      if ( v3 >= this->m_NumOfFriend )
        goto LABEL_7;
    }
    this->m_Friends[v3].level = Level;
    result = 1;
  }
  return result;
}

//----- (007371E0) --------------------------------------------------------
void __thiscall CFriend::CFriend(CFriend *this)
{
  CFriend *v1; // esi@1

  v1 = this;
  _eh_vector_constructor_iterator_(
    this->m_Friends,
    0x48u,
    100,
    (void (__thiscall *)(void *))PROTO_FRIEND_INFO::PROTO_FRIEND_INFO,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_NumOfFriend = 0;
}

//----- (00737210) --------------------------------------------------------
void __thiscall CFriend::_CFriend(CFriend *this)
{
  this->m_NumOfFriend = 0;
  _eh_vector_destructor_iterator_(
    this->m_Friends,
    0x48u,
    100,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (00737230) --------------------------------------------------------
int __thiscall CFriend::Add(CFriend *this, PROTO_FRIEND_INFO *pInfo)
{
  CFriend *v2; // esi@1
  int v3; // edi@1
  int result; // eax@2
  int v5; // ecx@3
  int v6; // eax@4

  v2 = this;
  v3 = this->m_NumOfFriend;
  if ( this->m_NumOfFriend <= 100 )
  {
    v5 = 0;
    if ( v3 <= 0 )
    {
LABEL_11:
      if ( v3 < 100 )
      {
        PROTO_FRIEND_INFO::operator_(&v2->m_Friends[v3], pInfo);
        ++v2->m_NumOfFriend;
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      v6 = (int)&v2->m_Friends[0].charid.n5_name[8];
      while ( *(_DWORD *)(v6 - 8) != *(_DWORD *)&pInfo->charid.n5_name[0]
           || *(_DWORD *)(v6 - 4) != *(_DWORD *)&pInfo->charid.n5_name[4]
           || *(_DWORD *)v6 != *(_DWORD *)&pInfo->charid.n5_name[8]
           || *(_DWORD *)(v6 + 4) != *(_DWORD *)&pInfo->charid.n5_name[12]
           || *(_DWORD *)(v6 + 8) != *(_DWORD *)&pInfo->charid.n5_name[16] )
      {
        ++v5;
        v6 += 72;
        if ( v5 >= v3 )
          goto LABEL_11;
      }
      PROTO_FRIEND_INFO::operator_(&v2->m_Friends[v5], pInfo);
      result = 2;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007372D0) --------------------------------------------------------
int __thiscall CFriend::Logout(CFriend *this, Name5 *pCharID)
{
  CFriend *v2; // edi@1
  int v3; // edx@1
  int v4; // esi@1
  char *v5; // eax@2
  int result; // eax@9
  _SYSTEMTIME SystemTime; // [sp+Ch] [bp-14h]@11
  unsigned int v8; // [sp+1Ch] [bp-4h]@1
  int v9; // [sp+20h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = this;
  v3 = this->m_NumOfFriend;
  v4 = 0;
  if ( this->m_NumOfFriend <= 0 )
    goto LABEL_9;
  v5 = &this->m_Friends[0].charid.n5_name[8];
  while ( *((_DWORD *)v5 - 2) != *(_DWORD *)&pCharID->n5_name[0]
       || *((_DWORD *)v5 - 1) != *(_DWORD *)&pCharID->n5_name[4]
       || *(_DWORD *)v5 != *(_DWORD *)&pCharID->n5_name[8]
       || *((_DWORD *)v5 + 1) != *(_DWORD *)&pCharID->n5_name[12]
       || *((_DWORD *)v5 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
  {
    ++v4;
    v5 += 72;
    if ( v4 >= v3 )
      goto LABEL_9;
  }
  if ( v4 >= v3 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    GetLocalTime(&SystemTime);
    v2->m_Friends[v4].logininfo._bf0 = v2->m_Friends[v4].logininfo._bf0 & 0xFC000000 | 2
                                                                                     * (SystemTime.wYear & 0x7FF | ((SystemTime.wMonth & 0xF | 16 * (SystemTime.wDay & 0x1F | 32 * (SystemTime.wHour & 0x1F))) << 11));
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (007373A0) --------------------------------------------------------
void __thiscall CHolyPromise::ClearUp(CHolyPromise *this)
{
  CHolyPromise *v1; // ebx@1
  tm tmDeleteTime; // [sp+Ch] [bp-28h]@1
  int DeleteTime; // [sp+30h] [bp-4h]@1

  v1 = this;
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] = 0;
  strncpy(this->m_HolyPromisesUp.PromiseCharID.n5_name, &byte_9788EB, 0x14u);
  DeleteTime = _time32(0);
  memcpy(&tmDeleteTime, _localtime32(&DeleteTime), sizeof(tmDeleteTime));
  v1->m_HolyPromisesUp.LogonInfo._bf0 = v1->m_HolyPromisesUp.LogonInfo._bf0 & 0xFC000000 | 2
                                                                                         * (tmDeleteTime.tm_year & 0x7FF | ((tmDeleteTime.tm_mon & 0xF | 16 * (tmDeleteTime.tm_mday & 0x1F | 32 * (tmDeleteTime.tm_hour & 0x1F))) << 11));
}

//----- (00737430) --------------------------------------------------------
void __thiscall CHolyPromise::ClearMember(CHolyPromise *this)
{
  this->m_HolyPromisesMemberCount = 0;
}

//----- (00737440) --------------------------------------------------------
int __thiscall CHolyPromise::IsDelPenlety(CHolyPromise *this, PROTO_HOLY_PROMISE_DATE *pLoginInfo)
{
  int v2; // ecx@1
  int result; // eax@2
  int v4; // esi@3
  tm tmLastConnect; // [sp+0h] [bp-28h]@3
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v2 = pLoginInfo->_bf0;
  if ( pLoginInfo->_bf0 & 1 )
  {
    result = 1;
  }
  else
  {
    tmLastConnect.tm_sec = 0;
    tmLastConnect.tm_min = 0;
    tmLastConnect.tm_wday = 0;
    tmLastConnect.tm_yday = 0;
    tmLastConnect.tm_isdst = 0;
    tmLastConnect.tm_year = (((unsigned int)v2 >> 1) & 0x7FF) - 1900;
    tmLastConnect.tm_hour = (((unsigned int)v2 >> 21) & 0x1F) + 120;
    tmLastConnect.tm_mon = ((unsigned __int16)v2 >> 12) - 1;
    tmLastConnect.tm_mday = ((unsigned int)v2 >> 16) & 0x1F;
    v4 = _mktime32(&tmLastConnect);
    result = v4 > _time32(0);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00737500) --------------------------------------------------------
int __thiscall CHolyPromise::SetMember(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo)
{
  CHolyPromise *v2; // edi@1
  int v3; // ecx@1
  int result; // eax@2
  int v5; // esi@3
  int v6; // edx@4

  v2 = this;
  v3 = this->m_HolyPromisesMemberCount;
  if ( v3 <= 20 )
  {
    v5 = 0;
    if ( v3 <= 0 )
    {
LABEL_11:
      if ( v3 < 20 )
      {
        *(_QWORD *)&v2->m_HolyPromisesMember[v3].PromiseCharID.n5_name[0] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[0];
        *(_QWORD *)&v2->m_HolyPromisesMember[v3].PromiseCharID.n5_name[8] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[8];
        *(_DWORD *)&v2->m_HolyPromisesMember[v3].PromiseCharID.n5_name[16] = *(_DWORD *)&pInfo->PromiseCharID.n5_name[16];
        v2->m_HolyPromisesMember[v3].LogonInfo._bf0 = pInfo->LogonInfo._bf0;
        v2->m_HolyPromisesMember[v3].Level = pInfo->Level;
        v2->m_HolyPromisesMember[v3].Flags = pInfo->Flags;
        ++v2->m_HolyPromisesMemberCount;
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      v6 = (int)&v2->m_HolyPromisesMember[0].PromiseCharID.n5_name[8];
      while ( *(_DWORD *)(v6 - 8) != *(_DWORD *)&pInfo->PromiseCharID.n5_name[0]
           || *(_DWORD *)(v6 - 4) != *(_DWORD *)&pInfo->PromiseCharID.n5_name[4]
           || *(_DWORD *)v6 != *(_DWORD *)&pInfo->PromiseCharID.n5_name[8]
           || *(_DWORD *)(v6 + 4) != *(_DWORD *)&pInfo->PromiseCharID.n5_name[12]
           || *(_DWORD *)(v6 + 8) != *(_DWORD *)&pInfo->PromiseCharID.n5_name[16] )
      {
        ++v5;
        v6 += 26;
        if ( v5 >= v3 )
          goto LABEL_11;
      }
      *(_QWORD *)&v2->m_HolyPromisesMember[v5].PromiseCharID.n5_name[0] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[0];
      *(_QWORD *)&v2->m_HolyPromisesMember[v5].PromiseCharID.n5_name[8] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[8];
      *(_DWORD *)&v2->m_HolyPromisesMember[v5].PromiseCharID.n5_name[16] = *(_DWORD *)&pInfo->PromiseCharID.n5_name[16];
      v2->m_HolyPromisesMember[v5].LogonInfo._bf0 = pInfo->LogonInfo._bf0;
      v2->m_HolyPromisesMember[v5].Level = pInfo->Level;
      v2->m_HolyPromisesMember[v5].Flags = pInfo->Flags;
      result = 2;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007375F0) --------------------------------------------------------
int __thiscall CHolyPromise::DelMember(CHolyPromise *this, Name5 *pCharID)
{
  int v2; // edi@1
  int v3; // edx@1
  char *v4; // eax@2
  int result; // eax@9

  v2 = this->m_HolyPromisesMemberCount;
  v3 = 0;
  if ( v2 <= 0 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    v4 = &this->m_HolyPromisesMember[0].PromiseCharID.n5_name[8];
    while ( *((_DWORD *)v4 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v4 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v4 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v4 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v3;
      v4 += 26;
      if ( v3 >= v2 )
        goto LABEL_9;
    }
    this->m_HolyPromisesMemberCount = v2 - 1;
    memcpy(
      this->m_HolyPromisesMember[v3].PromiseCharID.n5_name,
      this->m_HolyPromisesMember[v3 + 1].PromiseCharID.n5_name,
      26 * (v2 - 1 - v3));
    result = 1;
  }
  return result;
}

//----- (00737670) --------------------------------------------------------
PROTO_HOLY_PROMISE_INFO *__thiscall CHolyPromise::Get(CHolyPromise *this, Name5 *pCharID, int *pBFIndex)
{
  PROTO_HOLY_PROMISE_INFO *result; // eax@1
  int v4; // ecx@7
  int v5; // esi@7
  char *v6; // edx@8

  result = (PROTO_HOLY_PROMISE_INFO *)this;
  if ( *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] != *(_DWORD *)&pCharID->n5_name[0]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] != *(_DWORD *)&pCharID->n5_name[4]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] != *(_DWORD *)&pCharID->n5_name[8]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] != *(_DWORD *)&pCharID->n5_name[12]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] != *(_DWORD *)&pCharID->n5_name[16] )
  {
    v4 = this->m_HolyPromisesMemberCount;
    v5 = 0;
    if ( v4 <= 0 )
    {
LABEL_15:
      result = 0;
    }
    else
    {
      v6 = &result[1].PromiseCharID.n5_name[14];
      while ( *((_DWORD *)v6 - 2) != *(_DWORD *)&pCharID->n5_name[0]
           || *((_DWORD *)v6 - 1) != *(_DWORD *)&pCharID->n5_name[4]
           || *(_DWORD *)v6 != *(_DWORD *)&pCharID->n5_name[8]
           || *((_DWORD *)v6 + 1) != *(_DWORD *)&pCharID->n5_name[12]
           || *((_DWORD *)v6 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
      {
        ++v5;
        v6 += 26;
        if ( v5 >= v4 )
          goto LABEL_15;
      }
      *pBFIndex = v5;
      result = (PROTO_HOLY_PROMISE_INFO *)((char *)result + 26 * v5 + 32);
    }
  }
  else
  {
    *pBFIndex = -1;
  }
  return result;
}

//----- (00737710) --------------------------------------------------------
int __thiscall CHolyPromise::Del(CHolyPromise *this, Name5 *pCharID)
{
  int result; // eax@6

  if ( *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] != *(_DWORD *)&pCharID->n5_name[0]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] != *(_DWORD *)&pCharID->n5_name[4]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] != *(_DWORD *)&pCharID->n5_name[8]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] != *(_DWORD *)&pCharID->n5_name[12]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] != *(_DWORD *)&pCharID->n5_name[16] )
  {
    result = CHolyPromise::DelMember(this, pCharID);
  }
  else
  {
    CHolyPromise::ClearUp(this);
    result = 1;
  }
  return result;
}

//----- (00737760) --------------------------------------------------------
int __thiscall CHolyPromise::Logout(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo)
{
  int result; // eax@2
  _SYSTEMTIME LocalTime; // [sp+4h] [bp-14h]@3
  unsigned int v4; // [sp+14h] [bp-4h]@1
  int v5; // [sp+18h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  if ( pInfo )
  {
    GetLocalTime(&LocalTime);
    pInfo->LogonInfo._bf0 = pInfo->LogonInfo._bf0 & 0xFC000000 | 2
                                                               * (LocalTime.wYear & 0x7FF | ((LocalTime.wMonth & 0xF | 16 * (LocalTime.wDay & 0x1F | 32 * (LocalTime.wHour & 0x1F))) << 11));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (007377F0) --------------------------------------------------------
void __thiscall CHolyPromise::SetUp(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo)
{
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[0];
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[8];
  *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] = *(_DWORD *)&pInfo->PromiseCharID.n5_name[16];
  this->m_HolyPromisesUp.LogonInfo._bf0 = pInfo->LogonInfo._bf0;
  this->m_HolyPromisesUp.Level = pInfo->Level;
  this->m_HolyPromisesUp.Flags = pInfo->Flags;
}

//----- (00737830) --------------------------------------------------------
int __thiscall CHolyPromise::Add(CHolyPromise *this, PROTO_HOLY_PROMISE_INFO *pInfo)
{
  int result; // eax@6

  if ( *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] != *(_DWORD *)&pInfo->PromiseCharID.n5_name[0]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] != *(_DWORD *)&pInfo->PromiseCharID.n5_name[4]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] != *(_DWORD *)&pInfo->PromiseCharID.n5_name[8]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] != *(_DWORD *)&pInfo->PromiseCharID.n5_name[12]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] != *(_DWORD *)&pInfo->PromiseCharID.n5_name[16] )
  {
    result = CHolyPromise::SetMember(this, pInfo) != 0;
  }
  else
  {
    *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[0];
    *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] = *(_QWORD *)&pInfo->PromiseCharID.n5_name[8];
    *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] = *(_DWORD *)&pInfo->PromiseCharID.n5_name[16];
    this->m_HolyPromisesUp.LogonInfo._bf0 = pInfo->LogonInfo._bf0;
    this->m_HolyPromisesUp.Level = pInfo->Level;
    this->m_HolyPromisesUp.Flags = pInfo->Flags;
    result = 1;
  }
  return result;
}

//----- (007378B0) --------------------------------------------------------
int __thiscall CHolyPromise::Add(CHolyPromise *this, PROTO_NC_HOLY_PROMISE_LIST_CMD *pInfo)
{
  PROTO_NC_HOLY_PROMISE_LIST_CMD *v2; // esi@1
  CHolyPromise *v3; // edi@1
  signed int v4; // ebx@1
  PROTO_HOLY_PROMISE_INFO *pInfoa; // [sp+14h] [bp+8h]@4

  v2 = pInfo;
  v3 = this;
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] = *(_QWORD *)&pInfo->UpInfo.PromiseCharID.n5_name[0];
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] = *(_QWORD *)&pInfo->UpInfo.PromiseCharID.n5_name[8];
  *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] = *(_DWORD *)&pInfo->UpInfo.PromiseCharID.n5_name[16];
  this->m_HolyPromisesUp.LogonInfo._bf0 = pInfo->UpInfo.LogonInfo._bf0;
  this->m_HolyPromisesUp.Level = pInfo->UpInfo.Level;
  this->m_HolyPromisesUp.Flags = pInfo->UpInfo.Flags;
  v4 = 0;
  if ( pInfo->nPart & 1 )
    this->m_HolyPromisesMemberCount = 0;
  if ( pInfo->MemberCount > 0u )
  {
    pInfoa = (PROTO_HOLY_PROMISE_INFO *)&pInfo[1];
    do
    {
      if ( !CHolyPromise::SetMember(v3, pInfoa) )
        break;
      ++pInfoa;
      ++v4;
    }
    while ( v4 < v2->MemberCount );
  }
  return 1;
}

//----- (00737930) --------------------------------------------------------
int __thiscall CHolyPromise::Login(CHolyPromise *this, Name5 *pCharID)
{
  int result; // eax@6
  int v3; // edx@7
  char *v4; // eax@8
  int v5; // edx@16

  if ( *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] != *(_DWORD *)&pCharID->n5_name[0]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] != *(_DWORD *)&pCharID->n5_name[4]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] != *(_DWORD *)&pCharID->n5_name[8]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] != *(_DWORD *)&pCharID->n5_name[12]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] != *(_DWORD *)&pCharID->n5_name[16] )
  {
    v3 = 0;
    if ( this->m_HolyPromisesMemberCount <= 0 )
      goto LABEL_15;
    v4 = &this->m_HolyPromisesMember[0].PromiseCharID.n5_name[8];
    while ( *((_DWORD *)v4 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v4 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v4 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v4 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v3;
      v4 += 26;
      if ( v3 >= this->m_HolyPromisesMemberCount )
        goto LABEL_15;
    }
    v5 = v3;
    if ( (CHolyPromise *)((char *)this + v5 * 26) == (CHolyPromise *)-32 )
    {
LABEL_15:
      result = 0;
    }
    else
    {
      this->m_HolyPromisesMember[v5].LogonInfo._bf0 |= 1u;
      result = 1;
    }
  }
  else
  {
    result = 1;
    this->m_HolyPromisesUp.LogonInfo._bf0 |= 1u;
  }
  return result;
}

//----- (007379D0) --------------------------------------------------------
int __thiscall CHolyPromise::Logout(CHolyPromise *this, Name5 *pCharID)
{
  int result; // eax@6
  int v3; // edi@7
  int v4; // edx@7
  char *v5; // eax@8

  if ( *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] != *(_DWORD *)&pCharID->n5_name[0]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] != *(_DWORD *)&pCharID->n5_name[4]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] != *(_DWORD *)&pCharID->n5_name[8]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] != *(_DWORD *)&pCharID->n5_name[12]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] != *(_DWORD *)&pCharID->n5_name[16] )
  {
    v3 = this->m_HolyPromisesMemberCount;
    v4 = 0;
    if ( v3 <= 0 )
    {
LABEL_15:
      result = 0;
    }
    else
    {
      v5 = &this->m_HolyPromisesMember[0].PromiseCharID.n5_name[8];
      while ( *((_DWORD *)v5 - 2) != *(_DWORD *)&pCharID->n5_name[0]
           || *((_DWORD *)v5 - 1) != *(_DWORD *)&pCharID->n5_name[4]
           || *(_DWORD *)v5 != *(_DWORD *)&pCharID->n5_name[8]
           || *((_DWORD *)v5 + 1) != *(_DWORD *)&pCharID->n5_name[12]
           || *((_DWORD *)v5 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
      {
        ++v4;
        v5 += 26;
        if ( v4 >= v3 )
          goto LABEL_15;
      }
      result = CHolyPromise::Logout(this, &this->m_HolyPromisesMember[v4]);
    }
  }
  else
  {
    result = CHolyPromise::Logout(this, &this->m_HolyPromisesUp);
  }
  return result;
}

//----- (00737A70) --------------------------------------------------------
int __thiscall CHolyPromise::LevelChange(CHolyPromise *this, Name5 *pCharID, char Level)
{
  int result; // eax@6
  int v4; // edx@7
  char *v5; // eax@8
  int v6; // edx@16

  if ( *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] != *(_DWORD *)&pCharID->n5_name[0]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] != *(_DWORD *)&pCharID->n5_name[4]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[8] != *(_DWORD *)&pCharID->n5_name[8]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] != *(_DWORD *)&pCharID->n5_name[12]
    || *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[16] != *(_DWORD *)&pCharID->n5_name[16] )
  {
    v4 = 0;
    if ( this->m_HolyPromisesMemberCount <= 0 )
      goto LABEL_15;
    v5 = &this->m_HolyPromisesMember[0].PromiseCharID.n5_name[8];
    while ( *((_DWORD *)v5 - 2) != *(_DWORD *)&pCharID->n5_name[0]
         || *((_DWORD *)v5 - 1) != *(_DWORD *)&pCharID->n5_name[4]
         || *(_DWORD *)v5 != *(_DWORD *)&pCharID->n5_name[8]
         || *((_DWORD *)v5 + 1) != *(_DWORD *)&pCharID->n5_name[12]
         || *((_DWORD *)v5 + 2) != *(_DWORD *)&pCharID->n5_name[16] )
    {
      ++v4;
      v5 += 26;
      if ( v4 >= this->m_HolyPromisesMemberCount )
        goto LABEL_15;
    }
    v6 = v4;
    if ( (CHolyPromise *)((char *)this + v6 * 26) == (CHolyPromise *)-32 )
    {
LABEL_15:
      result = 0;
    }
    else
    {
      this->m_HolyPromisesMember[v6].Level = Level;
      result = 1;
    }
  }
  else
  {
    this->m_HolyPromisesUp.Level = Level;
    result = 1;
  }
  return result;
}

//----- (00737B20) --------------------------------------------------------
void __thiscall CHolyPromise::CHolyPromise(CHolyPromise *this)
{
  CHolyPromise *v1; // esi@1

  v1 = this;
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_HolyPromisesUp.PromiseCharID.n5_name[0] = 0;
  _eh_vector_constructor_iterator_(
    this->m_HolyPromisesMember,
    0x1Au,
    20,
    (void (__thiscall *)(void *))Name5::Name5,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  CHolyPromise::ClearUp(v1);
  v1->m_HolyPromisesMemberCount = 0;
}

//----- (00737B60) --------------------------------------------------------
void __thiscall CHolyPromise::_CHolyPromise(CHolyPromise *this)
{
  CHolyPromise *v1; // esi@1

  v1 = this;
  CHolyPromise::ClearUp(this);
  v1->m_HolyPromisesMemberCount = 0;
  _eh_vector_destructor_iterator_(
    v1->m_HolyPromisesMember,
    0x1Au,
    20,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (00737B90) --------------------------------------------------------
PROTO_NC_PARTY_FINDER_INFO *__thiscall PROTO_NC_PARTY_FINDER_INFO::operator_(PROTO_NC_PARTY_FINDER_INFO *this, PROTO_NC_PARTY_FINDER_INFO *__that)
{
  PROTO_NC_PARTY_FINDER_INFO *result; // eax@1
  char *v3; // edx@1
  signed int v4; // edi@1

  result = this;
  this->nPastSecond = __that->nPastSecond;
  this->dRegistTime = __that->dRegistTime;
  *(_QWORD *)&this->sCharID.n5_name[0] = *(_QWORD *)&__that->sCharID.n5_name[0];
  *(_QWORD *)&this->sCharID.n5_name[8] = *(_QWORD *)&__that->sCharID.n5_name[8];
  *(_DWORD *)&this->sCharID.n5_name[16] = *(_DWORD *)&__that->sCharID.n5_name[16];
  v3 = this->sMsg;
  v4 = 128;
  do
  {
    *v3 = v3[(char *)__that - (char *)this];
    ++v3;
    --v4;
  }
  while ( v4 );
  return result;
}

//----- (00737BE0) --------------------------------------------------------
CPartyFinder::PARTY_FINDER_INFO_LIST *__thiscall CPartyFinder::Find(CPartyFinder *this, Name5 *psCharID)
{
  CPartyFinder::PARTY_FINDER_INFO_LIST *result; // eax@1

  result = this->m_pListTop;
  if ( result )
  {
    while ( *(_DWORD *)&result->Info.sCharID.n5_name[0] != *(_DWORD *)&psCharID->n5_name[0]
         || *(_DWORD *)&result->Info.sCharID.n5_name[4] != *(_DWORD *)&psCharID->n5_name[4]
         || *(_DWORD *)&result->Info.sCharID.n5_name[8] != *(_DWORD *)&psCharID->n5_name[8]
         || *(_DWORD *)&result->Info.sCharID.n5_name[12] != *(_DWORD *)&psCharID->n5_name[12]
         || *(_DWORD *)&result->Info.sCharID.n5_name[16] != *(_DWORD *)&psCharID->n5_name[16] )
    {
      result = result->pLinkDn;
      if ( !result )
        goto LABEL_8;
    }
  }
  else
  {
LABEL_8:
    result = 0;
  }
  return result;
}

//----- (00737C30) --------------------------------------------------------
void __thiscall CPartyFinder::DelNode(CPartyFinder *this, CPartyFinder::PARTY_FINDER_INFO_LIST *pList)
{
  CPartyFinder *v2; // esi@1
  CPartyFinder::PARTY_FINDER_INFO_LIST *v3; // ecx@2
  CPartyFinder::PARTY_FINDER_INFO_LIST *v4; // ecx@5

  v2 = this;
  if ( pList )
  {
    v3 = pList->pLinkUp;
    if ( v3 )
      v3->pLinkDn = pList->pLinkDn;
    else
      v2->m_pListTop = pList->pLinkDn;
    v4 = pList->pLinkDn;
    if ( v4 )
    {
      v4->pLinkUp = pList->pLinkUp;
      operator delete(pList);
      --v2->m_NumOfInfo;
    }
    else
    {
      v2->m_pListBottom = pList->pLinkUp;
      operator delete(pList);
      --v2->m_NumOfInfo;
    }
  }
}

//----- (00737CA0) --------------------------------------------------------
int __thiscall CPartyFinder::Add(CPartyFinder *this, PROTO_NC_PARTY_FINDER_INFO *pInfo)
{
  CPartyFinder *v2; // esi@1
  PROTO_NC_PARTY_FINDER_INFO *v3; // eax@1
  int result; // eax@2
  void *v5; // eax@3
  void *v6; // edi@4
  CPartyFinder::PARTY_FINDER_INFO_LIST *v7; // eax@8

  v2 = this;
  v3 = (PROTO_NC_PARTY_FINDER_INFO *)CPartyFinder::Find(this, &pInfo->sCharID);
  if ( v3 )
  {
    PROTO_NC_PARTY_FINDER_INFO::operator_(v3, pInfo);
    result = 1;
  }
  else
  {
    v5 = operator new(0xA4u);
    if ( v5 )
    {
      *(_DWORD *)((char *)v5 + 22) = 0;
      *(_DWORD *)((char *)v5 + 18) = 0;
      *(_DWORD *)((char *)v5 + 14) = 0;
      *(_DWORD *)((char *)v5 + 10) = 0;
      *(_DWORD *)((char *)v5 + 6) = 0;
      v6 = v5;
    }
    else
    {
      v6 = 0;
    }
    *((_DWORD *)v6 + 40) = 0;
    *((_DWORD *)v6 + 39) = v2->m_pListBottom;
    PROTO_NC_PARTY_FINDER_INFO::operator_((PROTO_NC_PARTY_FINDER_INFO *)v6, pInfo);
    if ( !v2->m_pListTop )
      v2->m_pListTop = (CPartyFinder::PARTY_FINDER_INFO_LIST *)v6;
    v7 = v2->m_pListBottom;
    if ( v7 )
      v7->pLinkDn = (CPartyFinder::PARTY_FINDER_INFO_LIST *)v6;
    ++v2->m_NumOfInfo;
    v2->m_pListBottom = (CPartyFinder::PARTY_FINDER_INFO_LIST *)v6;
    result = 1;
  }
  return result;
}

//----- (00737D40) --------------------------------------------------------
int __thiscall CPartyFinder::Del(CPartyFinder *this, Name5 *psCharID)
{
  CPartyFinder *v2; // esi@1
  int result; // eax@1

  v2 = this;
  result = (int)CPartyFinder::Find(this, psCharID);
  if ( result )
  {
    CPartyFinder::DelNode(v2, (CPartyFinder::PARTY_FINDER_INFO_LIST *)result);
    result = 1;
  }
  return result;
}

//----- (00737D70) --------------------------------------------------------
void __thiscall CPartyFinder::Clear(CPartyFinder *this)
{
  CPartyFinder *v1; // esi@1
  CPartyFinder::PARTY_FINDER_INFO_LIST *v2; // eax@2

  v1 = this;
  while ( v1->m_pListTop )
  {
    v2 = v1->m_pListTop;
    v1->m_pListTop = v2->pLinkDn;
    if ( v2 )
      operator delete(v2);
  }
  v1->m_NumOfInfo = 0;
  v1->m_pListBottom = 0;
}

//----- (00737DC0) --------------------------------------------------------
void __thiscall GUILD_MEMBER_CLIENT::GUILD_MEMBER_CLIENT(GUILD_MEMBER_CLIENT *this)
{
  *(_QWORD *)&this->sName.n5_name[12] = 0i64;
  *(_QWORD *)&this->sName.n5_name[4] = 0i64;
  *(_DWORD *)&this->sName.n5_name[0] = 0;
  *(_QWORD *)&this->sMap.n3_name[4] = 0i64;
  *(_DWORD *)&this->sMap.n3_name[0] = 0;
}

//----- (00737DE0) --------------------------------------------------------
void __thiscall CGuildMember::_CGuildMember(CGuildMember *this)
{
  this->vfptr = (CGuildMemberVtbl *)CGuildMember::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_Members,
    0x6Eu,
    400,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}
// 9D9224: using guessed type int (__stdcall *CGuildMember___vftable_[21])(int);

//----- (00737E00) --------------------------------------------------------
int __thiscall CGuildMember::GetIndex(CGuildMember *this, Name5 *pMemberName)
{
  int v2; // esi@1
  int result; // eax@1
  char *v4; // ecx@2

  v2 = this->m_NumOfMembers;
  result = 0;
  if ( v2 <= 0 )
  {
LABEL_9:
    result = -1;
  }
  else
  {
    v4 = &this->m_Members[0].sName.n5_name[8];
    while ( *((_DWORD *)v4 - 2) != *(_DWORD *)&pMemberName->n5_name[0]
         || *((_DWORD *)v4 - 1) != *(_DWORD *)&pMemberName->n5_name[4]
         || *(_DWORD *)v4 != *(_DWORD *)&pMemberName->n5_name[8]
         || *((_DWORD *)v4 + 1) != *(_DWORD *)&pMemberName->n5_name[12]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&pMemberName->n5_name[16] )
    {
      ++result;
      v4 += 110;
      if ( result >= v2 )
        goto LABEL_9;
    }
  }
  return result;
}

//----- (00737E50) --------------------------------------------------------
GUILD_MEMBER_CLIENT *__thiscall GUILD_MEMBER_CLIENT::operator_(GUILD_MEMBER_CLIENT *this, GUILD_MEMBER_CLIENT *__that)
{
  GUILD_MEMBER_CLIENT *result; // eax@1
  char *v3; // esi@1
  signed int v4; // edx@1

  result = this;
  *(_QWORD *)&this->sName.n5_name[0] = *(_QWORD *)&__that->sName.n5_name[0];
  *(_QWORD *)&this->sName.n5_name[8] = *(_QWORD *)&__that->sName.n5_name[8];
  *(_DWORD *)&this->sName.n5_name[16] = *(_DWORD *)&__that->sName.n5_name[16];
  this->nGrade = __that->nGrade;
  this->nFlags = __that->nFlags;
  this->nExpRatio = __that->nExpRatio;
  v3 = this->sIntro;
  v4 = 64;
  do
  {
    *v3 = v3[(char *)__that - (char *)this];
    ++v3;
    --v4;
  }
  while ( v4 );
  this->dLogonInfo._bf0 = __that->dLogonInfo._bf0;
  this->nClassID = __that->nClassID;
  this->nLevel = __that->nLevel;
  this->bIsParty = __that->bIsParty;
  *(_QWORD *)&this->sMap.n3_name[0] = *(_QWORD *)&__that->sMap.n3_name[0];
  *(_DWORD *)&this->sMap.n3_name[8] = *(_DWORD *)&__that->sMap.n3_name[8];
  return result;
}

//----- (00737EE0) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_JOIN_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_JOIN_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int result; // eax@2

  v2 = this;
  v3 = this->m_NumOfMembers;
  if ( (unsigned __int16)v3 < 0x190u )
  {
    GUILD_MEMBER_CLIENT::operator_(&this->m_Members[v3], &pCmd->Member);
    result = 1;
    ++v2->m_NumOfMembers;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00737F20) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LEAVE_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LEAVE_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int result; // eax@2

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 == -1 )
  {
    result = 0;
  }
  else
  {
    --v2->m_NumOfMembers;
    memcpy(v2->m_Members[v3].sName.n5_name, v2->m_Members[v3 + 1].sName.n5_name, 110 * (v2->m_NumOfMembers - v3));
    result = 1;
  }
  return result;
}

//----- (00737F70) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD(CGuildMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int result; // eax@2

  v2 = this;
  v3 = this->m_NumOfMembers;
  if ( (unsigned __int16)v3 < 0x190u )
  {
    GUILD_MEMBER_CLIENT::operator_(&this->m_Members[v3], &pCmd->Member);
    result = 1;
    ++v2->m_NumOfMembers;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00737FB0) --------------------------------------------------------
SHINE_GUILD_WAR_INFO *__thiscall SHINE_GUILD_WAR_INFO::operator_(SHINE_GUILD_WAR_INFO *this, SHINE_GUILD_WAR_INFO *__that)
{
  SHINE_GUILD_WAR_INFO *result; // eax@1

  result = this;
  this->nNo = __that->nNo;
  *(_QWORD *)&this->sName.n4_name[0] = *(_QWORD *)&__that->sName.n4_name[0];
  *(_QWORD *)&this->sName.n4_name[8] = *(_QWORD *)&__that->sName.n4_name[8];
  this->nGrade = __that->nGrade;
  this->nWarStatus = __that->nWarStatus;
  this->nWarStatusRemainSec = __that->nWarStatusRemainSec;
  this->dRequestDate = __that->dRequestDate;
  this->dStartDate = __that->dStartDate;
  this->dEndDate = __that->dEndDate;
  memcpy(&this->tm_dRequestDate, &__that->tm_dRequestDate, sizeof(this->tm_dRequestDate));
  memcpy(&this->tm_dStartDate, &__that->tm_dStartDate, sizeof(this->tm_dStartDate));
  memcpy(&this->tm_dEndDate, &__that->tm_dEndDate, 0x28u);
  memcpy(&this->MyScore, &__that->MyScore, sizeof(this->MyScore));
  memcpy(&this->EnemyScore, &__that->EnemyScore, sizeof(this->EnemyScore));
  return result;
}

//----- (00738060) --------------------------------------------------------
int __thiscall CGuildWar::Update(CGuildWar *this, unsigned int nRequestGuildNo, char nWarStatus, int *pWarEndDate, tm *pdEndDate)
{
  CGuildWar::GUILD_WAR_LIST *v5; // eax@1
  int result; // eax@4

  v5 = this->m_pGuildWarListTop;
  if ( v5 )
  {
    while ( v5->WarInfo.nRequestNo != nRequestGuildNo )
    {
      v5 = v5->pLinkDn;
      if ( !v5 )
        goto LABEL_4;
    }
    v5->WarInfo.nWarStatus = nWarStatus;
    v5->WarInfo.dEndDate = *pWarEndDate;
    memcpy(&v5->WarInfo.tm_dEndDate, pdEndDate, sizeof(v5->WarInfo.tm_dEndDate));
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (007380B0) --------------------------------------------------------
void __thiscall CPartyFinder::CPartyFinder(CPartyFinder *this)
{
  this->m_NumOfInfo = 0;
  this->m_pListTop = 0;
  this->m_pListBottom = 0;
}

//----- (007380C0) --------------------------------------------------------
int __thiscall CGuild::IsSetDismiss(CGuild *this, GUILD_MEMBER_CLIENT *pMember)
{
  int result; // eax@2

  if ( pMember )
    result = pMember->nGrade > 0u ? 0xD02 : 0;
  else
    result = 3329;
  return result;
}

//----- (007380F0) --------------------------------------------------------
int __thiscall CGuild::IsSetNotify(CGuild *this, GUILD_MEMBER_CLIENT *pMember)
{
  int result; // eax@2

  if ( pMember )
    result = pMember->nGrade > 2u ? 0xD12 : 0;
  else
    result = 3345;
  return result;
}

//----- (00738120) --------------------------------------------------------
int __thiscall CGuild::IsSetInvite(CGuild *this, GUILD_MEMBER_CLIENT *pMember)
{
  int result; // eax@2

  if ( pMember )
    result = pMember->nGrade > 1u ? 0xCD3 : 0;
  else
    result = 3280;
  return result;
}

//----- (00738150) --------------------------------------------------------
int __thiscall CGuild::IsSetVanish(CGuild *this, GUILD_MEMBER_CLIENT *pMember)
{
  int result; // eax@2

  if ( pMember )
    result = pMember->nGrade > 0u ? 0xCF3 : 0;
  else
    result = 3313;
  return result;
}

//----- (00738180) --------------------------------------------------------
int __thiscall CGuild::IsSetMemberGrade(CGuild *this, GUILD_MEMBER_CLIENT *pMember)
{
  int result; // eax@2

  if ( pMember )
    result = pMember->nGrade > 0u ? 0xCEB : 0;
  else
    result = 3305;
  return result;
}

//----- (007381B0) --------------------------------------------------------
int __thiscall CGuild::IsSetWar(CGuild *this, GUILD_MEMBER_CLIENT *pMember)
{
  int result; // eax@2

  if ( pMember )
    result = pMember->nGrade > 1u ? 0xD22 : 0;
  else
    result = 3361;
  return result;
}

//----- (007381E0) --------------------------------------------------------
bool __thiscall CGuild::IsUseStorage(CGuild *this, GUILD_MEMBER_CLIENT *pMember)
{
  bool result; // al@2

  if ( pMember )
    result = pMember->nGrade == 0;
  else
    result = 0;
  return result;
}

//----- (00738200) --------------------------------------------------------
void __thiscall CGuild::MakeAcademy(CGuild *this, Name5 *pAcademyMaster)
{
  CGuild *v2; // esi@1
  void *v3; // eax@1
  char dest[4]; // [sp+Ch] [bp-18h]@2
  int v5; // [sp+10h] [bp-14h]@2
  int v6; // [sp+14h] [bp-10h]@2
  int v7; // [sp+18h] [bp-Ch]@2
  int v8; // [sp+1Ch] [bp-8h]@2
  unsigned int v9; // [sp+20h] [bp-4h]@1
  int v10; // [sp+24h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v2 = this;
  this->m_GuildAcademyGraduateCount = 0;
  v3 = pAcademyMaster;
  this->m_bIsGuildAcademy = 1;
  this->nAcademyRewardStorageMoney = 0i64;
  this->m_PreAcademyRank = 0;
  this->m_bisGuildAcademyBuff = 0;
  if ( !pAcademyMaster )
  {
    v8 = 0;
    v7 = 0;
    v6 = 0;
    v5 = 0;
    *(_DWORD *)dest = 0;
    strncpy(dest, "Unknown", 0x14u);
    v3 = dest;
  }
  *(_DWORD *)&v2->m_GuildAcademy.sAcademyMasterName.n5_name[0] = *(_DWORD *)v3;
  *(_DWORD *)&v2->m_GuildAcademy.sAcademyMasterName.n5_name[4] = *((_DWORD *)v3 + 1);
  *(_DWORD *)&v2->m_GuildAcademy.sAcademyMasterName.n5_name[8] = *((_DWORD *)v3 + 2);
  *(_DWORD *)&v2->m_GuildAcademy.sAcademyMasterName.n5_name[12] = *((_DWORD *)v3 + 3);
  *(_DWORD *)&v2->m_GuildAcademy.sAcademyMasterName.n5_name[16] = *((_DWORD *)v3 + 4);
  v2->m_GuildAcademy.nAcademyPoint = 0;
  v2->m_GuildAcademy.nAcademyRank = 0;
  v2->m_GuildAcademy.dAcademyBuffUntilTime = 0;
  v2->m_GuildAcademy.sIntro[0] = 0;
  v2->m_GuildAcademy.sNotify[0] = 0;
  *(_DWORD *)&v2->m_GuildAcademy.nNumAcademyMembers = 6553600;
}
// A85C00: using guessed type int __security_cookie;

//----- (007382E0) --------------------------------------------------------
NiAnimationKey::KeyContent __thiscall NiPoint3Interpolator::GetKeyContent(NiPoint3Interpolator *this, unsigned __int16 usChannel)
{
  return 1;
}

//----- (007382F0) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_MONEY_ADD_ACK(CGuild *this, PROTO_NC_GUILD_MONEY_ADD_ACK *pAck)
{
  return pAck->Error == 3137;
}

//----- (00738310) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_WAR_ACK(CGuild *this, PROTO_NC_GUILD_WAR_ACK *pAck)
{
  return pAck->Error == 3137;
}

//----- (00738330) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_DISMISS_CMD(CGuild *this, PROTO_NC_GUILD_DISMISS_CMD *pCmd)
{
  int result; // eax@2

  if ( this->m_bIsGuild )
  {
    this->m_Guild.nDismissStatus = pCmd->nDismissStatus;
    this->m_Guild.dDismissDate = pCmd->dDismissDate;
    memcpy(&this->m_Guild.tm_dDismissDate, &pCmd->tm_dDismissDate, sizeof(this->m_Guild.tm_dDismissDate));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738380) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_DELETE_CMD(CGuild *this, PROTO_NC_GUILD_DELETE_CMD *pCmd)
{
  int result; // eax@1

  result = 0;
  if ( this->m_bIsGuild )
  {
    this->m_bIsGuild = 0;
    this->m_bIsGuildAcademy = 0;
    this->m_bisGuildAcademyBuff = 0;
    this->m_PreAcademyRank = 0;
    this->nAcademyRewardStorageMoney = 0i64;
    this->m_GuildAcademyGraduateCount = 0;
    result = 1;
  }
  return result;
}

//----- (007383C0) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_MONEY_SUB_CMD(CGuild *this, PROTO_NC_GUILD_MONEY_SUB_CMD *pCmd)
{
  int result; // eax@2

  if ( this->m_bIsGuild )
  {
    this->m_Guild.nMoney = pCmd->GuildTotalMoney;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007383F0) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_NOTIFY_CMD(CGuild *this, PROTO_NC_GUILD_NOTIFY_CMD *pCmd)
{
  int result; // eax@2
  PROTO_NC_GUILD_NOTIFY_CMD *v3; // eax@3
  unsigned int v4; // edx@3
  char v5; // cl@4

  if ( this->m_bIsGuild )
  {
    this->m_Guild.dNotifyDate = pCmd->dNotifyDate;
    memcpy(&this->m_Guild.tm_dNotifyDate, &pCmd->tm_dNotifyDate, 0x38u);
    v3 = pCmd + 1;
    v4 = this->m_Guild.sNotify - (char *)&pCmd[1];
    do
    {
      v5 = LOBYTE(v3->dNotifyDate);
      *((_BYTE *)&v3->dNotifyDate + v4) = LOBYTE(v3->dNotifyDate);
      v3 = (PROTO_NC_GUILD_NOTIFY_CMD *)((char *)v3 + 1);
    }
    while ( v5 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738470) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_GRADE_CMD(CGuild *this, PROTO_NC_GUILD_GRADE_CMD *pCmd)
{
  int result; // eax@2

  if ( this->m_bIsGuild )
  {
    this->m_Guild.nGrade = pCmd->Grade;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738490) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_WAR_START_CMD(CGuild *this, PROTO_NC_GUILD_WAR_START_CMD *pCmd)
{
  int result; // eax@2

  if ( this->m_bIsGuild )
  {
    CGuildWar::Update(&this->m_GuildWar, pCmd->RequestNo, 2, &pCmd->EndDate, &pCmd->tm_EndDate);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007384D0) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_WAR_COOLDOWN_DONE_CMD(CGuild *this, PROTO_NC_GUILD_WAR_COOLDOWN_DONE_CMD *pCmd)
{
  int result; // eax@1

  result = 0;
  if ( this->m_bIsGuild )
  {
    this->m_Guild.nWarEnemy = 0;
    this->m_Guild.nWarStatus = 0;
    result = 1;
  }
  return result;
}

//----- (007384F0) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_ACADEMY_NOTIFY_CMD(CGuild *this, PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *pCmd)
{
  int result; // eax@2
  PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *v3; // eax@4
  unsigned int v4; // edx@4
  char v5; // cl@5

  if ( this->m_bIsGuildAcademy && pCmd )
  {
    this->m_GuildAcademy.dNotifyDate = pCmd->dNotifyDate;
    memcpy(&this->m_GuildAcademy.tm_dNotifyDate, &pCmd->tm_dNotifyDate, 0x38u);
    v3 = pCmd + 1;
    v4 = this->m_GuildAcademy.sNotify - (char *)&pCmd[1];
    do
    {
      v5 = LOBYTE(v3->dNotifyDate);
      *((_BYTE *)&v3->dNotifyDate + v4) = LOBYTE(v3->dNotifyDate);
      v3 = (PROTO_NC_GUILD_ACADEMY_NOTIFY_CMD *)((char *)v3 + 1);
    }
    while ( v5 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738580) --------------------------------------------------------
void __thiscall GUILD_TOURNAMENT_LIST::GUILD_TOURNAMENT_LIST(GUILD_TOURNAMENT_LIST *this)
{
  *(_QWORD *)&this->sGuildName.n4_name[8] = 0i64;
  *(_QWORD *)&this->sGuildName.n4_name[0] = 0i64;
}

//----- (007385A0) --------------------------------------------------------
void __thiscall CGuildTournament::_CGuildTournament(CGuildTournament *this)
{
  _eh_vector_destructor_iterator_(
    this->m_TournamentList,
    0x15u,
    31,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (007385C0) --------------------------------------------------------
void __thiscall CGuildTournament::Clear(CGuildTournament *this)
{
  char *v1; // esi@1
  signed int v2; // edi@1

  this->m_bReceiveFromServer = 0;
  this->m_nNumOfList = 0;
  v1 = &this->m_TournamentList[0].sGuildName.n4_name[8];
  v2 = 31;
  do
  {
    *((_DWORD *)v1 - 3) = 0;
    *(v1 - 13) = 0;
    *((_DWORD *)v1 + 1) = 0;
    *(_DWORD *)v1 = 0;
    *((_DWORD *)v1 - 1) = 0;
    *((_DWORD *)v1 - 2) = 0;
    strncpy(v1 - 8, &byte_9788EB, 0x10u);
    v1 += 21;
    --v2;
  }
  while ( v2 );
}

//----- (00738610) --------------------------------------------------------
void __thiscall GUILD_ACADEMY_MEMBER_CLIENT::GUILD_ACADEMY_MEMBER_CLIENT(GUILD_ACADEMY_MEMBER_CLIENT *this)
{
  *(_QWORD *)&this->sName.n5_name[12] = 0i64;
  *(_QWORD *)&this->sName.n5_name[4] = 0i64;
  *(_DWORD *)&this->sName.n5_name[0] = 0;
  *(_QWORD *)&this->sMap.n3_name[4] = 0i64;
  *(_DWORD *)&this->sMap.n3_name[0] = 0;
}

//----- (00738630) --------------------------------------------------------
void __thiscall CGuildAcademyMember::_CGuildAcademyMember(CGuildAcademyMember *this)
{
  this->vfptr = (CGuildAcademyMemberVtbl *)CGuildAcademyMember::_vftable_;
  _eh_vector_destructor_iterator_(
    this->m_AcademyMembers,
    0x6Du,
    100,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}
// 9D9284: using guessed type int (__stdcall *CGuildAcademyMember___vftable_[12])(int pAck);

//----- (00738650) --------------------------------------------------------
int __thiscall CGuildAcademyMember::GetIndex(CGuildAcademyMember *this, Name5 *pAcademyMemberName)
{
  int v2; // esi@1
  int result; // eax@1
  char *v4; // ecx@2

  v2 = this->m_NumOfAcademyMembers;
  result = 0;
  if ( v2 <= 0 )
  {
LABEL_9:
    result = -1;
  }
  else
  {
    v4 = &this->m_AcademyMembers[0].sName.n5_name[8];
    while ( *((_DWORD *)v4 - 2) != *(_DWORD *)&pAcademyMemberName->n5_name[0]
         || *((_DWORD *)v4 - 1) != *(_DWORD *)&pAcademyMemberName->n5_name[4]
         || *(_DWORD *)v4 != *(_DWORD *)&pAcademyMemberName->n5_name[8]
         || *((_DWORD *)v4 + 1) != *(_DWORD *)&pAcademyMemberName->n5_name[12]
         || *((_DWORD *)v4 + 2) != *(_DWORD *)&pAcademyMemberName->n5_name[16] )
    {
      ++result;
      v4 += 109;
      if ( result >= v2 )
        goto LABEL_9;
    }
  }
  return result;
}

//----- (007386A0) --------------------------------------------------------
GUILD_ACADEMY_MEMBER_CLIENT *__thiscall GUILD_ACADEMY_MEMBER_CLIENT::operator_(GUILD_ACADEMY_MEMBER_CLIENT *this, GUILD_ACADEMY_MEMBER_CLIENT *__that)
{
  GUILD_ACADEMY_MEMBER_CLIENT *result; // eax@1
  char *v3; // esi@1
  signed int v4; // edx@1

  result = this;
  *(_QWORD *)&this->sName.n5_name[0] = *(_QWORD *)&__that->sName.n5_name[0];
  *(_QWORD *)&this->sName.n5_name[8] = *(_QWORD *)&__that->sName.n5_name[8];
  *(_DWORD *)&this->sName.n5_name[16] = *(_DWORD *)&__that->sName.n5_name[16];
  this->nGrade = __that->nGrade;
  v3 = this->sIntro;
  v4 = 64;
  do
  {
    *v3 = v3[(char *)__that - (char *)this];
    ++v3;
    --v4;
  }
  while ( v4 );
  this->dLogonInfo._bf0 = __that->dLogonInfo._bf0;
  this->nClassID = __that->nClassID;
  this->nLevel = __that->nLevel;
  this->bIsParty = __that->bIsParty;
  *(_QWORD *)&this->sMap.n3_name[0] = *(_QWORD *)&__that->sMap.n3_name[0];
  *(_DWORD *)&this->sMap.n3_name[8] = *(_DWORD *)&__that->sMap.n3_name[8];
  this->dJoinInfo._bf0 = __that->dJoinInfo._bf0;
  this->nJoinLevel = __that->nJoinLevel;
  return result;
}

//----- (00738730) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_JOIN_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  unsigned int v3; // eax@1
  int result; // eax@2

  v2 = this;
  v3 = this->m_NumOfAcademyMembers;
  if ( v3 < 0x64 )
  {
    GUILD_ACADEMY_MEMBER_CLIENT::operator_(&this->m_AcademyMembers[v3], &pCmd->Member);
    result = 1;
    ++v2->m_NumOfAcademyMembers;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738770) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEAVE_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int result; // eax@2

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 == -1 )
  {
    result = 0;
  }
  else
  {
    --v2->m_NumOfAcademyMembers;
    memcpy(
      v2->m_AcademyMembers[v3].sName.n5_name,
      v2->m_AcademyMembers[v3 + 1].sName.n5_name,
      109 * (v2->m_NumOfAcademyMembers - v3));
    result = 1;
  }
  return result;
}

//----- (007387C0) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_GUILD_JOIN_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int result; // eax@2

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->Member.sName);
  if ( v3 == -1 )
  {
    result = 0;
  }
  else
  {
    --v2->m_NumOfAcademyMembers;
    memcpy(
      v2->m_AcademyMembers[v3].sName.n5_name,
      v2->m_AcademyMembers[v3 + 1].sName.n5_name,
      109 * (v2->m_NumOfAcademyMembers - v3));
    result = 1;
  }
  return result;
}

//----- (00738820) --------------------------------------------------------
void __thiscall CGuildMember::CGuildMember(CGuildMember *this)
{
  CGuildMember *v1; // esi@1
  int v2; // esi@1
  signed int v3; // edi@1

  v1 = this;
  this->vfptr = (CGuildMemberVtbl *)CGuildMember::_vftable_;
  _eh_vector_constructor_iterator_(
    this->m_Members,
    0x6Eu,
    400,
    (void (__thiscall *)(void *))GUILD_MEMBER_CLIENT::GUILD_MEMBER_CLIENT,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_NumOfMembers = 0;
  v2 = (int)&v1->m_Members[0].sName.n5_name[12];
  v3 = 400;
  do
  {
    *(_DWORD *)(v2 + 4) = 0;
    *(_DWORD *)v2 = 0;
    *(_DWORD *)(v2 - 4) = 0;
    *(_DWORD *)(v2 - 8) = 0;
    *(_DWORD *)(v2 - 12) = 0;
    strncpy((char *)(v2 - 12), &byte_9788EB, 0x14u);
    *(_DWORD *)(v2 + 79) &= 0xFC000000u;
    *(_BYTE *)(v2 + 8) = 0;
    *(_DWORD *)(v2 + 9) = 0;
    *(_WORD *)(v2 + 13) = 0;
    *(_BYTE *)(v2 + 15) = 0;
    *(_WORD *)(v2 + 83) = 0;
    *(_BYTE *)(v2 + 85) = 0;
    *(_DWORD *)(v2 + 94) = 0;
    *(_DWORD *)(v2 + 90) = 0;
    *(_DWORD *)(v2 + 86) = 0;
    strncpy((char *)(v2 + 86), &byte_9788EB, 0xCu);
    v2 += 110;
    --v3;
  }
  while ( v3 );
}
// 9D9224: using guessed type int (__stdcall *CGuildMember___vftable_[21])(int);

//----- (007388D0) --------------------------------------------------------
GUILD_MEMBER_CLIENT *__thiscall CGuildMember::Get(CGuildMember *this, Name5 *pMemberName)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  GUILD_MEMBER_CLIENT *result; // eax@2

  v2 = this;
  v3 = CGuildMember::GetIndex(this, pMemberName);
  if ( v3 == -1 )
    result = 0;
  else
    result = &v2->m_Members[v3];
  return result;
}

//----- (00738900) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LIST_ACK(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LIST_ACK *pAck)
{
  PROTO_NC_GUILD_MEMBER_LIST_ACK *v2; // eax@1
  int v3; // edx@1
  int result; // eax@2
  int v5; // ebx@3
  char *v6; // edx@4
  char *v7; // eax@5
  int v8; // esi@5
  int v9; // ecx@7
  bool v10; // sf@7
  unsigned __int8 v11; // of@7
  int v12; // edx@8
  CGuildMember *v13; // [sp+4h] [bp-8h]@1
  signed int v14; // [sp+8h] [bp-4h]@5

  v2 = pAck;
  v3 = pAck->MemberCount;
  v13 = this;
  if ( v3 + pAck->MemberIndex <= 400 )
  {
    v5 = 0;
    if ( v3 > 0 )
    {
      v6 = (char *)&pAck[18].MemberCount;
      do
      {
        v7 = (char *)&this->m_Members[v5 + v2->MemberIndex];
        *(_DWORD *)v7 = *(_DWORD *)(v6 - 106);
        *((_DWORD *)v7 + 1) = *(_DWORD *)(v6 - 102);
        *((_DWORD *)v7 + 2) = *(_DWORD *)(v6 - 98);
        *((_DWORD *)v7 + 3) = *(_DWORD *)(v6 - 94);
        *((_DWORD *)v7 + 4) = *(_DWORD *)(v6 - 90);
        v7[20] = *(v6 - 86);
        *(_DWORD *)(v7 + 21) = *(_DWORD *)(v6 - 85);
        *(_WORD *)(v7 + 25) = *(_WORD *)(v6 - 81);
        v8 = (int)(v7 + 27);
        v14 = 64;
        do
        {
          *(_BYTE *)v8 = *(_BYTE *)(v6 - 106 - v7 + v8);
          ++v8;
          --v14;
        }
        while ( v14 );
        *(_DWORD *)(v7 + 91) = *(_DWORD *)(v6 - 15);
        v7[95] = *(v6 - 11);
        v7[96] = *(v6 - 10);
        v7[97] = *(v6 - 9);
        *(_DWORD *)(v7 + 98) = *((_DWORD *)v6 - 2);
        *(_DWORD *)(v7 + 102) = *((_DWORD *)v6 - 1);
        *(_DWORD *)(v7 + 106) = *(_DWORD *)v6;
        v2 = pAck;
        v9 = pAck->MemberCount;
        ++v5;
        v6 += 110;
        v11 = __OFSUB__(v5, v9);
        v10 = v5 - v9 < 0;
        this = v13;
      }
      while ( v10 ^ v11 );
    }
    v12 = v2->MemberIndex + v2->MemberCount;
    if ( this->m_NumOfMembers < v12 )
      this->m_NumOfMembers = v12;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738A00) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_GRADE_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_GRADE_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_BYTE *)(v4 + 20) = pCmd->Grade;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738A40) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_FLAGS_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_FLAGS_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_DWORD *)(v4 + 21) = pCmd->Flags;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738A80) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_EXP_RATIO_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_EXP_RATIO_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_WORD *)(v4 + 25) = pCmd->ExpRatio;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738AC0) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LOGON_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LOGON_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_DWORD *)(v4 + 91) |= 1u;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738B00) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LOGOFF_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LOGOFF_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // esi@2
  int result; // eax@3
  int v6; // eax@4
  int v7; // ecx@4
  int v8; // eax@4
  int v9; // eax@4
  _SYSTEMTIME LocalTime; // [sp+4h] [bp-14h]@4
  unsigned int v11; // [sp+14h] [bp-4h]@1
  int v12; // [sp+18h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    GetLocalTime(&LocalTime);
    *(_DWORD *)(v4 + 91) &= 0xFFFFFFFEu;
    v6 = *(_DWORD *)(v4 + 91) ^ ((unsigned __int16)*(_DWORD *)(v4 + 91) ^ (unsigned __int16)(2 * LocalTime.wYear)) & 0xFFE;
    *(_DWORD *)(v4 + 91) = v6;
    v7 = v6 ^ (unsigned __int16)((v6 ^ (unsigned __int16)(LocalTime.wMonth << 12)) & 0xF000);
    *(_DWORD *)(v4 + 91) = v7;
    v8 = v7 ^ (LocalTime.wDay << 16);
    v9 = v7 ^ v8 & 0x1F0000;
    *(_DWORD *)(v4 + 91) = v9;
    *(_DWORD *)(v4 + 91) = v9 ^ (v9 ^ (LocalTime.wHour << 21)) & 0x3E00000;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00738BC0) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_PARTY_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_PARTY_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_BYTE *)(v4 + 97) = pCmd->Party;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738C00) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_LEVEL_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_LEVEL_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_BYTE *)(v4 + 96) = pCmd->Level;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738C40) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_MAP_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_MAP_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_QWORD *)(v4 + 98) = *(_QWORD *)&pCmd->sMap.n3_name[0];
    *(_DWORD *)(v4 + 106) = *(_DWORD *)&pCmd->sMap.n3_name[8];
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738C90) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_INTRO_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_INTRO_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int v5; // ecx@2
  int result; // eax@3
  PROTO_NC_GUILD_MEMBER_INTRO_CMD *v7; // eax@4
  int v8; // edx@4
  char v9; // cl@5

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1
    && (v4 = v3, v5 = (int)&v2->m_Members[v4], (CGuildMember *)((char *)v2 + v4 * 110) != (CGuildMember *)-6) )
  {
    v7 = pCmd + 1;
    v8 = v5 + 27 - (_DWORD)(pCmd + 1);
    do
    {
      v9 = v7->CharID.n5_name[0];
      v7->CharID.n5_name[v8] = v7->CharID.n5_name[0];
      v7 = (PROTO_NC_GUILD_MEMBER_INTRO_CMD *)((char *)v7 + 1);
    }
    while ( v9 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738CE0) --------------------------------------------------------
int __thiscall CGuildMember::Recv_NC_GUILD_MEMBER_CLASS_CMD(CGuildMember *this, PROTO_NC_GUILD_MEMBER_CLASS_CMD *pCmd)
{
  CGuildMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_Members[v3]) != 0 )
  {
    *(_BYTE *)(v4 + 95) = pCmd->ClassID;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738D20) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_MY_GUILD_INFO_ACK(CGuild *this, PROTO_NC_GUILD_MY_GUILD_INFO_ACK *pAck)
{
  CGuild *v2; // esi@1
  int result; // eax@2

  v2 = this;
  if ( pAck->Error == 3137 )
  {
    GUILD_CLIENT::operator_(&this->m_Guild, (GUILD_CLIENT *)&pAck[1]);
    result = 1;
    v2->m_bIsGuild = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738D60) --------------------------------------------------------
void __thiscall CGuildTournament::CGuildTournament(CGuildTournament *this)
{
  CGuildTournament *v1; // esi@1

  v1 = this;
  _eh_vector_constructor_iterator_(
    this->m_TournamentList,
    0x15u,
    31,
    (void (__thiscall *)(void *))GUILD_TOURNAMENT_LIST::GUILD_TOURNAMENT_LIST,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_MatchType = 0;
  CGuildTournament::Clear(v1);
}

//----- (00738D90) --------------------------------------------------------
void __thiscall CGuildAcademyMember::CGuildAcademyMember(CGuildAcademyMember *this)
{
  CGuildAcademyMember *v1; // esi@1

  v1 = this;
  this->vfptr = (CGuildAcademyMemberVtbl *)CGuildAcademyMember::_vftable_;
  _eh_vector_constructor_iterator_(
    this->m_AcademyMembers,
    0x6Du,
    100,
    (void (__thiscall *)(void *))GUILD_ACADEMY_MEMBER_CLIENT::GUILD_ACADEMY_MEMBER_CLIENT,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  v1->m_NumOfAcademyMembers = 0;
}
// 9D9284: using guessed type int (__stdcall *CGuildAcademyMember___vftable_[12])(int pAck);

//----- (00738DC0) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LIST_ACK(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LIST_ACK *pAck)
{
  PROTO_NC_GUILD_ACADEMY_MEMBER_LIST_ACK *v2; // eax@1
  int v3; // edx@1
  int result; // eax@2
  int v5; // ebx@3
  char *v6; // edx@4
  char *v7; // eax@5
  int v8; // esi@5
  int v9; // ecx@7
  bool v10; // sf@7
  unsigned __int8 v11; // of@7
  int v12; // edx@8
  CGuildAcademyMember *v13; // [sp+4h] [bp-8h]@1
  signed int v14; // [sp+8h] [bp-4h]@5

  v2 = pAck;
  v3 = pAck->AcademyMemberCount;
  v13 = this;
  if ( v3 + pAck->AcademyMemberIndex <= 100 )
  {
    v5 = 0;
    if ( v3 > 0 )
    {
      v6 = (char *)&pAck[17].AcademyMemberCount;
      do
      {
        v7 = (char *)&this->m_AcademyMembers[v5 + v2->AcademyMemberIndex];
        *(_DWORD *)v7 = *((_DWORD *)v6 - 25);
        *((_DWORD *)v7 + 1) = *((_DWORD *)v6 - 24);
        *((_DWORD *)v7 + 2) = *((_DWORD *)v6 - 23);
        *((_DWORD *)v7 + 3) = *((_DWORD *)v6 - 22);
        *((_DWORD *)v7 + 4) = *((_DWORD *)v6 - 21);
        v7[20] = *(v6 - 80);
        v8 = (int)(v7 + 21);
        v14 = 64;
        do
        {
          *(_BYTE *)v8 = *(_BYTE *)(v6 - 100 - v7 + v8);
          ++v8;
          --v14;
        }
        while ( v14 );
        *(_DWORD *)(v7 + 85) = *(_DWORD *)(v6 - 15);
        v7[89] = *(v6 - 11);
        v7[90] = *(v6 - 10);
        v7[91] = *(v6 - 9);
        *((_DWORD *)v7 + 23) = *((_DWORD *)v6 - 2);
        *((_DWORD *)v7 + 24) = *((_DWORD *)v6 - 1);
        *((_DWORD *)v7 + 25) = *(_DWORD *)v6;
        *((_DWORD *)v7 + 26) = *((_DWORD *)v6 + 1);
        v7[108] = v6[8];
        v2 = pAck;
        v9 = pAck->AcademyMemberCount;
        ++v5;
        v6 += 109;
        v11 = __OFSUB__(v5, v9);
        v10 = v5 - v9 < 0;
        this = v13;
      }
      while ( v10 ^ v11 );
    }
    v12 = v2->AcademyMemberIndex + v2->AcademyMemberCount;
    if ( this->m_NumOfAcademyMembers < v12 )
      this->m_NumOfAcademyMembers = v12;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738EC0) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int v5; // ecx@2
  int result; // eax@3
  PROTO_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD *v7; // eax@4
  int v8; // edx@4
  char v9; // cl@5

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1
    && (v4 = v3,
        v5 = (int)&v2->m_AcademyMembers[v4],
        (CGuildAcademyMember *)((char *)v2 + v4 * 109) != (CGuildAcademyMember *)-6) )
  {
    v7 = pCmd + 1;
    v8 = v5 + 21 - (_DWORD)(pCmd + 1);
    do
    {
      v9 = v7->CharID.n5_name[0];
      v7->CharID.n5_name[v8] = v7->CharID.n5_name[0];
      v7 = (PROTO_NC_GUILD_ACADEMY_MEMBER_INTRO_CMD *)((char *)v7 + 1);
    }
    while ( v9 );
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738F10) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGON_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_AcademyMembers[v3]) != 0 )
  {
    *(_DWORD *)(v4 + 85) |= 1u;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00738F50) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LOGOFF_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int v4; // esi@2
  int result; // eax@3
  int v6; // eax@4
  int v7; // ecx@4
  int v8; // eax@4
  int v9; // eax@4
  _SYSTEMTIME LocalTime; // [sp+4h] [bp-14h]@4
  unsigned int v11; // [sp+14h] [bp-4h]@1
  int v12; // [sp+18h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_AcademyMembers[v3]) != 0 )
  {
    GetLocalTime(&LocalTime);
    *(_DWORD *)(v4 + 85) &= 0xFFFFFFFEu;
    v6 = *(_DWORD *)(v4 + 85) ^ ((unsigned __int16)*(_DWORD *)(v4 + 85) ^ (unsigned __int16)(2 * LocalTime.wYear)) & 0xFFE;
    *(_DWORD *)(v4 + 85) = v6;
    v7 = v6 ^ (unsigned __int16)((v6 ^ (unsigned __int16)(LocalTime.wMonth << 12)) & 0xF000);
    *(_DWORD *)(v4 + 85) = v7;
    v8 = v7 ^ (LocalTime.wDay << 16);
    v9 = v7 ^ v8 & 0x1F0000;
    *(_DWORD *)(v4 + 85) = v9;
    *(_DWORD *)(v4 + 85) = v9 ^ (v9 ^ (LocalTime.wHour << 21)) & 0x3E00000;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00739010) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_PARTY_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_PARTY_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_AcademyMembers[v3]) != 0 )
  {
    *(_BYTE *)(v4 + 91) = pCmd->Party;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00739050) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_LEVEL_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_LEVEL_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_AcademyMembers[v3]) != 0 )
  {
    *(_BYTE *)(v4 + 90) = pCmd->Level;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00739090) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_MAP_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_MAP_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_AcademyMembers[v3]) != 0 )
  {
    *(_QWORD *)(v4 + 92) = *(_QWORD *)&pCmd->sMap.n3_name[0];
    *(_DWORD *)(v4 + 100) = *(_DWORD *)&pCmd->sMap.n3_name[8];
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007390E0) --------------------------------------------------------
int __thiscall CGuildAcademyMember::Recv_NC_GUILD_ACADEMY_MEMBER_CLASS_CMD(CGuildAcademyMember *this, PROTO_NC_GUILD_ACADEMY_MEMBER_CLASS_CMD *pCmd)
{
  CGuildAcademyMember *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@3

  v2 = this;
  v3 = CGuildAcademyMember::GetIndex(this, &pCmd->CharID);
  if ( v3 != -1 && (v4 = (int)&v2->m_AcademyMembers[v3]) != 0 )
  {
    *(_BYTE *)(v4 + 89) = pCmd->ClassID;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00739120) --------------------------------------------------------
int __thiscall CGuildWar::Add(CGuildWar *this, SHINE_GUILD_WAR_INFO *pWarInfo)
{
  CGuildWar *v2; // edi@1
  CGuildWar::GUILD_WAR_LIST *v3; // ecx@1
  void *v4; // eax@4
  void *v5; // esi@5
  int result; // eax@6
  CGuildWar::GUILD_WAR_LIST *v7; // eax@10

  v2 = this;
  v3 = this->m_pGuildWarListTop;
  if ( v3 )
  {
    while ( v3->WarInfo.nRequestNo != pWarInfo->nRequestNo )
    {
      v3 = v3->pLinkDn;
      if ( !v3 )
        goto LABEL_4;
    }
    SHINE_GUILD_WAR_INFO::operator_(&v3->WarInfo, pWarInfo);
    result = 1;
  }
  else
  {
LABEL_4:
    v4 = operator new(0xF4u);
    if ( v4 )
    {
      *((_DWORD *)v4 + 4) = 0;
      *((_DWORD *)v4 + 3) = 0;
      *((_DWORD *)v4 + 2) = 0;
      *((_DWORD *)v4 + 1) = 0;
      v5 = v4;
    }
    else
    {
      v5 = 0;
    }
    *((_DWORD *)v5 + 60) = 0;
    *((_DWORD *)v5 + 59) = v2->m_pGuildWarListBottom;
    SHINE_GUILD_WAR_INFO::operator_((SHINE_GUILD_WAR_INFO *)v5, pWarInfo);
    if ( !v2->m_pGuildWarListTop )
      v2->m_pGuildWarListTop = (CGuildWar::GUILD_WAR_LIST *)v5;
    v7 = v2->m_pGuildWarListBottom;
    if ( v7 )
      v7->pLinkDn = (CGuildWar::GUILD_WAR_LIST *)v5;
    ++v2->m_NumOfWarList;
    v2->m_pGuildWarListBottom = (CGuildWar::GUILD_WAR_LIST *)v5;
    result = 1;
  }
  return result;
}

//----- (007391D0) --------------------------------------------------------
int __thiscall CGuildWar::Del(CGuildWar *this, unsigned int nRequestGuildNo)
{
  CGuildWar *v2; // esi@1
  CGuildWar::GUILD_WAR_LIST *v3; // eax@1
  int result; // eax@4
  CGuildWar::GUILD_WAR_LIST *v5; // ecx@5
  CGuildWar::GUILD_WAR_LIST *v6; // ecx@8

  v2 = this;
  v3 = this->m_pGuildWarListTop;
  if ( v3 )
  {
    while ( v3->WarInfo.nRequestNo != nRequestGuildNo )
    {
      v3 = v3->pLinkDn;
      if ( !v3 )
        goto LABEL_4;
    }
    v5 = v3->pLinkUp;
    if ( v5 )
      v5->pLinkDn = v3->pLinkDn;
    else
      v2->m_pGuildWarListTop = v3->pLinkDn;
    v6 = v3->pLinkDn;
    if ( v6 )
      v6->pLinkUp = v3->pLinkUp;
    else
      v2->m_pGuildWarListBottom = v3->pLinkUp;
    operator delete(v3);
    --v2->m_NumOfWarList;
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00739250) --------------------------------------------------------
int __thiscall CGuildWarAble::Add(CGuildWarAble *this, SHINE_GUILD_WAR_ABLE_INFO *pWarInfo)
{
  CGuildWarAble *v2; // esi@1
  void *v3; // eax@1
  CGuildWarAble::GUILD_WAR_ABLE_LIST *v4; // ecx@6

  v2 = this;
  v3 = operator new(0x34u);
  if ( v3 )
  {
    *((_DWORD *)v3 + 4) = 0;
    *((_DWORD *)v3 + 3) = 0;
    *((_DWORD *)v3 + 2) = 0;
    *((_DWORD *)v3 + 1) = 0;
    *(_DWORD *)((char *)v3 + 38) = 0;
    *(_DWORD *)((char *)v3 + 34) = 0;
    *(_DWORD *)((char *)v3 + 30) = 0;
    *(_DWORD *)((char *)v3 + 26) = 0;
  }
  else
  {
    v3 = 0;
  }
  *((_DWORD *)v3 + 12) = 0;
  *((_DWORD *)v3 + 11) = v2->m_pGuildWarAbleListBottom;
  *(_DWORD *)v3 = pWarInfo->nNo;
  *(_QWORD *)((char *)v3 + 4) = *(_QWORD *)&pWarInfo->sName.n4_name[0];
  *(_QWORD *)((char *)v3 + 12) = *(_QWORD *)&pWarInfo->sName.n4_name[8];
  *((_BYTE *)v3 + 20) = pWarInfo->nType;
  *((_BYTE *)v3 + 21) = pWarInfo->nGrade;
  *((_BYTE *)v3 + 22) = pWarInfo->nWarStatus;
  *(_WORD *)((char *)v3 + 23) = pWarInfo->nNumMembers;
  *((_BYTE *)v3 + 25) = pWarInfo->nWarable;
  *(_QWORD *)((char *)v3 + 26) = *(_QWORD *)&pWarInfo->sTargetName.n4_name[0];
  *(_QWORD *)((char *)v3 + 34) = *(_QWORD *)&pWarInfo->sTargetName.n4_name[8];
  if ( !v2->m_pGuildWarAbleListTop )
    v2->m_pGuildWarAbleListTop = (CGuildWarAble::GUILD_WAR_ABLE_LIST *)v3;
  v4 = v2->m_pGuildWarAbleListBottom;
  if ( v4 )
    v4->pLinkDn = (CGuildWarAble::GUILD_WAR_ABLE_LIST *)v3;
  ++v2->m_NumOfWarAbleList;
  v2->m_pGuildWarAbleListBottom = (CGuildWarAble::GUILD_WAR_ABLE_LIST *)v3;
  return 1;
}

//----- (00739310) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_WAR_TARGET_CMD(CGuild *this, PROTO_NC_GUILD_WAR_TARGET_CMD *pCmd)
{
  int result; // eax@2

  if ( this->m_bIsGuild )
  {
    if ( pCmd->WarInfo.nRequestNo == this->m_Guild.nNo )
    {
      this->m_Guild.nWarEnemy = pCmd->WarInfo.nNo;
      *(_QWORD *)&this->m_Guild.sWarEnemyName.n4_name[0] = *(_QWORD *)&pCmd->WarInfo.sName.n4_name[0];
      *(_QWORD *)&this->m_Guild.sWarEnemyName.n4_name[8] = *(_QWORD *)&pCmd->WarInfo.sName.n4_name[8];
      this->m_Guild.nWarEnemyGrade = pCmd->WarInfo.nGrade;
      this->m_Guild.nWarStatus = pCmd->WarInfo.nWarStatus;
      this->m_Guild.dWarRequestDate = pCmd->WarInfo.dRequestDate;
      this->m_Guild.dWarStartDate = pCmd->WarInfo.dStartDate;
      this->m_Guild.dWarEndDate = pCmd->WarInfo.dEndDate;
      memcpy(
        &this->m_Guild.tm_dWarRequestDate,
        &pCmd->WarInfo.tm_dRequestDate,
        sizeof(this->m_Guild.tm_dWarRequestDate));
      memcpy(&this->m_Guild.tm_dWarStartDate, &pCmd->WarInfo.tm_dStartDate, sizeof(this->m_Guild.tm_dWarStartDate));
      memcpy(&this->m_Guild.tm_dWarEndDate, &pCmd->WarInfo.tm_dEndDate, sizeof(this->m_Guild.tm_dWarEndDate));
      memcpy(&this->m_Guild.MyScore, &pCmd->WarInfo.MyScore, sizeof(this->m_Guild.MyScore));
      memcpy(&this->m_Guild.EnemyScore, &pCmd->WarInfo.EnemyScore, sizeof(this->m_Guild.EnemyScore));
    }
    result = CGuildWar::Add(&this->m_GuildWar, &pCmd->WarInfo);
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007393F0) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_WAR_END_CMD(CGuild *this, PROTO_NC_GUILD_WAR_END_CMD *pCmd)
{
  CGuild *v2; // esi@1
  int result; // eax@2
  unsigned int v4; // eax@3

  v2 = this;
  if ( this->m_bIsGuild )
  {
    v4 = pCmd->RequestNo;
    if ( this->m_Guild.nNo == v4 )
      CGuildWar::Update(&this->m_GuildWar, v4, 3, &this->m_Guild.dWarEndDate, &this->m_Guild.tm_dWarEndDate);
    else
      CGuildWar::Del(&this->m_GuildWar, pCmd->RequestNo);
    v2->m_Guild.nFame = pCmd->GuildTotalFame;
    result = 1;
    if ( pCmd->WarResult )
    {
      if ( pCmd->WarResult == 1 )
      {
        ++v2->m_Guild.nWarLoseCount;
      }
      else
      {
        if ( pCmd->WarResult == 2 )
          ++v2->m_Guild.nWarDrawCount;
      }
    }
    else
    {
      ++v2->m_Guild.nWarWinCount;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00739480) --------------------------------------------------------
void __thiscall CGuildWar::Clear(CGuildWar *this)
{
  CGuildWar *v1; // esi@1
  CGuildWar::GUILD_WAR_LIST *v2; // eax@2

  v1 = this;
  while ( v1->m_pGuildWarListTop )
  {
    v2 = v1->m_pGuildWarListTop;
    v1->m_pGuildWarListTop = v2->pLinkDn;
    if ( v2 )
      operator delete(v2);
  }
  v1->m_NumOfWarList = 0;
  v1->m_pGuildWarListBottom = 0;
}

//----- (007394C0) --------------------------------------------------------
void __thiscall CGuildWarAble::Clear(CGuildWarAble *this)
{
  CGuildWarAble *v1; // esi@1
  CGuildWarAble::GUILD_WAR_ABLE_LIST *v2; // eax@2

  v1 = this;
  while ( v1->m_pGuildWarAbleListTop )
  {
    v2 = v1->m_pGuildWarAbleListTop;
    v1->m_pGuildWarAbleListTop = v2->pLinkDn;
    if ( v2 )
      operator delete(v2);
  }
  v1->m_NumOfWarAbleList = 0;
  v1->m_pGuildWarAbleListBottom = 0;
}

//----- (00739500) --------------------------------------------------------
void __thiscall CGuild::Make(CGuild *this, unsigned int nNo, Name4 *pName, char nType, int dCreateDate)
{
  CGuild *v5; // ebx@1
  char *v6; // esi@1

  v5 = this;
  v6 = (char *)&this->m_Guild;
  memset((char *)&this->m_Guild, 0, 0x42Bu);
  *(_DWORD *)v6 = nNo;
  *(_QWORD *)&v5->m_Guild.sName.n4_name[0] = *(_QWORD *)&pName->n4_name[0];
  *(_QWORD *)&v5->m_Guild.sName.n4_name[8] = *(_QWORD *)&pName->n4_name[8];
  v5->m_Guild.nStoneLevel = 0;
  v5->m_Guild.nWarStatus = 0;
  v5->m_Guild.nType = nType;
  LODWORD(v5->m_Guild.nMoney) = 0;
  HIDWORD(v5->m_Guild.nMoney) = 0;
  v5->m_Guild.nGrade = 1;
  v5->m_Guild.nFame = 0;
  LODWORD(v5->m_Guild.nExp) = 0;
  HIDWORD(v5->m_Guild.nExp) = 0;
  *(_DWORD *)&v5->m_Guild.nNumMembers = 13107201;
  v5->m_Guild.dCreateDate = dCreateDate;
  v5->m_Guild.dWarRequestDate = dCreateDate;
  v5->m_Guild.dWarStartDate = dCreateDate;
  v5->m_Guild.dWarEndDate = dCreateDate;
  memcpy(&v5->m_Guild.tm_dCreateDate, _localtime32(&v5->m_Guild.dCreateDate), sizeof(v5->m_Guild.tm_dCreateDate));
  memcpy(
    &v5->m_Guild.tm_dWarRequestDate,
    _localtime32(&v5->m_Guild.dWarRequestDate),
    sizeof(v5->m_Guild.tm_dWarRequestDate));
  memcpy(&v5->m_Guild.tm_dWarStartDate, _localtime32(&v5->m_Guild.dWarStartDate), sizeof(v5->m_Guild.tm_dWarStartDate));
  memcpy(&v5->m_Guild.tm_dWarEndDate, _localtime32(&v5->m_Guild.dWarEndDate), sizeof(v5->m_Guild.tm_dWarEndDate));
  v5->m_Guild.nWarEnemy = 0;
  *(_DWORD *)&v5->m_Guild.sWarEnemyName.n4_name[12] = 0;
  *(_DWORD *)&v5->m_Guild.sWarEnemyName.n4_name[8] = 0;
  *(_DWORD *)&v5->m_Guild.sWarEnemyName.n4_name[4] = 0;
  *(_DWORD *)&v5->m_Guild.sWarEnemyName.n4_name[0] = 0;
  strncpy(v5->m_Guild.sWarEnemyName.n4_name, &byte_9788EB, 0x10u);
  v5->m_Guild.nWarEnemyGrade = 0;
  v5->m_Guild.nWarWinCount = 0;
  v5->m_Guild.nWarLoseCount = 0;
  v5->m_Guild.nWarDrawCount = 0;
  v5->m_Guild.nDismissStatus = 0;
  v5->m_Guild.dDismissDate = dCreateDate;
  memcpy(&v5->m_Guild.tm_dDismissDate, _localtime32(&v5->m_Guild.dDismissDate), sizeof(v5->m_Guild.tm_dDismissDate));
  v5->m_Guild.sIntro[0] = 0;
  v5->m_Guild.dNotifyDate = dCreateDate;
  memcpy(&v5->m_Guild.tm_dDismissDate, _localtime32(&v5->m_Guild.dDismissDate), sizeof(v5->m_Guild.tm_dDismissDate));
  *(_DWORD *)&v5->m_Guild.sNotifyCharID.n5_name[16] = 0;
  *(_DWORD *)&v5->m_Guild.sNotifyCharID.n5_name[12] = 0;
  *(_DWORD *)&v5->m_Guild.sNotifyCharID.n5_name[8] = 0;
  *(_DWORD *)&v5->m_Guild.sNotifyCharID.n5_name[4] = 0;
  *(_DWORD *)&v5->m_Guild.sNotifyCharID.n5_name[0] = 0;
  strncpy(v5->m_Guild.sNotifyCharID.n5_name, &byte_9788EB, 0x14u);
  v5->m_Guild.sNotify[0] = 0;
  *(_WORD *)&v5->m_EmblemInfo.nPTFileNo = -1;
  v5->m_EmblemState = 255;
  v5->m_EmblemCreateDate = 0;
  v5->m_EmblemDeleteDate = 0;
  v5->m_bIsGuild = 1;
  CGuildWar::Clear(&v5->m_GuildWar);
  LODWORD(v5->m_GuildToken) = 0;
  HIDWORD(v5->m_GuildToken) = 0;
  *(_WORD *)&v5->m_GTCondInfo.nGTGrade = 0;
  v5->m_GTCondInfo.nMatchTime = dCreateDate;
  v5->m_GTCondInfo.nMyGTCondition = 0;
  memcpy(
    &v5->m_GTCondInfo.tm_nMatchTime,
    _localtime32(&v5->m_GTCondInfo.nMatchTime),
    sizeof(v5->m_GTCondInfo.tm_nMatchTime));
}

//----- (00739700) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_MAKE_ACK(CGuild *this, PROTO_NC_GUILD_MAKE_ACK *pAck)
{
  CGuild::Make(this, pAck->No, &pAck->Name, pAck->Type, pAck->dCreateDate);
  return 1;
}

//----- (00739730) --------------------------------------------------------
int __thiscall CGuild::Recv_NC_GUILD_WAR_LIST_ACK(CGuild *this, PROTO_NC_GUILD_WAR_LIST_ACK *pAck)
{
  PROTO_NC_GUILD_WAR_LIST_ACK *v2; // ebx@1
  CGuild *v3; // esi@1
  int result; // eax@2
  signed int v5; // edi@5
  SHINE_GUILD_WAR_INFO *v6; // esi@6
  CGuildWar *pAcka; // [sp+10h] [bp+8h]@6

  v2 = pAck;
  v3 = this;
  if ( pAck->Error == 3137 )
  {
    if ( pAck->PartMask & 1 )
      CGuildWar::Clear(&this->m_GuildWar);
    v5 = 0;
    if ( pAck->NumOfWarInfo > 0u )
    {
      pAcka = &v3->m_GuildWar;
      v6 = (SHINE_GUILD_WAR_INFO *)&v2[1];
      do
      {
        CGuildWar::Add(pAcka, v6);
        ++v5;
        ++v6;
      }
      while ( v5 < v2->NumOfWarInfo );
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007397B0) --------------------------------------------------------
void __thiscall CGuild::CGuild(CGuild *this)
{
  this->vfptr = (CGuildVtbl *)CGuild::_vftable_;
  *(_QWORD *)&this->m_Guild.sName.n4_name[8] = 0i64;
  *(_QWORD *)&this->m_Guild.sName.n4_name[0] = 0i64;
  *(_QWORD *)&this->m_Guild.sWarEnemyName.n4_name[8] = 0i64;
  *(_QWORD *)&this->m_Guild.sWarEnemyName.n4_name[0] = 0i64;
  *(_QWORD *)&this->m_Guild.sNotifyCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_Guild.sNotifyCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_Guild.sNotifyCharID.n5_name[0] = 0;
  this->m_GuildWar.m_NumOfWarList = 0;
  this->m_GuildWar.m_pGuildWarListTop = 0;
  this->m_GuildWar.m_pGuildWarListBottom = 0;
  *(_QWORD *)&this->m_GuildAcademy.sAcademyMasterName.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_GuildAcademy.sAcademyMasterName.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_GuildAcademy.sAcademyMasterName.n5_name[0] = 0;
  *(_QWORD *)&this->m_GuildAcademy.sNotifyCharID.n5_name[12] = 0i64;
  *(_QWORD *)&this->m_GuildAcademy.sNotifyCharID.n5_name[4] = 0i64;
  *(_DWORD *)&this->m_GuildAcademy.sNotifyCharID.n5_name[0] = 0;
  this->m_GuildAcademyGraduateCount = 0;
  this->m_bIsGuild = 0;
  this->m_GuildToken = 0i64;
  this->m_bIsGuildAcademy = 0;
  this->m_bisGuildAcademyBuff = 0;
  this->m_PreAcademyRank = 0;
  this->nAcademyRewardStorageMoney = 0i64;
  *(_WORD *)&this->m_EmblemInfo.nPTFileNo = -1;
  this->m_EmblemState = 255;
  this->m_EmblemCreateDate = 0;
  this->m_EmblemDeleteDate = 0;
}
// 9D92BC: using guessed type int (__stdcall *CGuild___vftable_[20])(int pAck);

//----- (007398B0) --------------------------------------------------------
void __thiscall CGuild::_CGuild(CGuild *this)
{
  this->vfptr = (CGuildVtbl *)CGuild::_vftable_;
  CGuildWar::Clear(&this->m_GuildWar);
}
// 9D92BC: using guessed type int (__stdcall *CGuild___vftable_[20])(int pAck);

//----- (007398D0) --------------------------------------------------------
void __thiscall PROTO_KQ_MAP_INFO::PROTO_KQ_MAP_INFO(PROTO_KQ_MAP_INFO *this)
{
  *(_QWORD *)&this->MapBase.n3_name[4] = 0i64;
  *(_DWORD *)&this->MapBase.n3_name[0] = 0;
  *(_QWORD *)&this->MapName.n3_name[4] = 0i64;
  *(_DWORD *)&this->MapName.n3_name[0] = 0;
}

//----- (007398F0) --------------------------------------------------------
void __thiscall CKQ::Clear(CKQ *this)
{
  CKQ *v1; // esi@1

  v1 = this;
  this->m_ServerTime = _time32(0);
  v1->m_NumOfSchedule = 0;
}

//----- (00739910) --------------------------------------------------------
int __thiscall CKQ::Del(CKQ *this, unsigned int Handle)
{
  int v2; // edx@1
  int v3; // esi@1
  char *v4; // eax@2
  int result; // eax@5

  v2 = this->m_NumOfSchedule;
  v3 = 0;
  if ( this->m_NumOfSchedule <= 0 )
  {
LABEL_5:
    result = -1;
  }
  else
  {
    v4 = (char *)this->m_Schedule;
    while ( *(_DWORD *)v4 != Handle )
    {
      ++v3;
      v4 += 377;
      if ( v3 >= v2 )
        goto LABEL_5;
    }
    if ( v3 != -1 )
    {
      this->m_NumOfSchedule = v2 - 1;
      memcpy((char *)&this->m_Schedule[v3], (char *)&this->m_Schedule[v3 + 1], 377 * (v2 - 1 - v3));
    }
    result = v3;
  }
  return result;
}

//----- (00739980) --------------------------------------------------------
PROTO_KQ_INFO *__thiscall CKQ::Get(CKQ *this, unsigned int Handle)
{
  int v2; // eax@1
  char *v3; // edx@2
  PROTO_KQ_INFO *result; // eax@5

  v2 = 0;
  if ( this->m_NumOfSchedule <= 0 )
    goto LABEL_5;
  v3 = (char *)this->m_Schedule;
  while ( *(_DWORD *)v3 != Handle )
  {
    ++v2;
    v3 += 377;
    if ( v2 >= this->m_NumOfSchedule )
      goto LABEL_5;
  }
  if ( v2 == -1 )
LABEL_5:
    result = 0;
  else
    result = &this->m_Schedule[v2];
  return result;
}

//----- (007399C0) --------------------------------------------------------
void __thiscall CKQ::Add(CKQ *this, PROTO_NC_KQ_LIST_ADD_ACK *pAddInfo)
{
  CKQ *v2; // edx@1
  PROTO_NC_KQ_LIST_ADD_ACK *v3; // ebx@2
  int v4; // esi@3
  int v5; // eax@4
  int v6; // ecx@5
  signed int i; // [sp+4h] [bp-4h]@1

  v2 = this;
  i = 0;
  if ( pAddInfo->NumOfAdd > 0u )
  {
    v3 = pAddInfo + 1;
    do
    {
      v4 = v2->m_NumOfSchedule;
      if ( v2->m_NumOfSchedule < 300 )
      {
        v5 = 0;
        if ( v4 <= 0 )
          goto LABEL_8;
        v6 = (int)v2->m_Schedule;
        while ( *(_DWORD *)v6 != *(_DWORD *)&v3->NumOfAdd )
        {
          ++v5;
          v6 += 377;
          if ( v5 >= v4 )
            goto LABEL_8;
        }
        if ( v5 == -1 )
        {
LABEL_8:
          memcpy(&v2->m_Schedule[v4], v3, 0x8Du);
          ++v2->m_NumOfSchedule;
        }
        else
        {
          memcpy(&v2->m_Schedule[v5], v3, 0x8Du);
        }
      }
      v3 = (PROTO_NC_KQ_LIST_ADD_ACK *)((char *)v3 + 141);
      ++i;
    }
    while ( i < pAddInfo->NumOfAdd );
  }
}

//----- (00739A60) --------------------------------------------------------
int __thiscall CKQ::Update(CKQ *this, PROTO_NC_KQ_LIST_UPDATE_ACK *pUpdateInfo)
{
  PROTO_NC_KQ_LIST_UPDATE_ACK *v2; // ebx@2
  int v3; // edx@3
  char *v4; // esi@4
  int result; // eax@9
  int v6; // edx@11
  int bSucc; // [sp+4h] [bp-8h]@1
  signed int i; // [sp+8h] [bp-4h]@1

  bSucc = 1;
  i = 0;
  if ( pUpdateInfo->NumOfUpdate <= 0u )
  {
    result = 1;
  }
  else
  {
    v2 = pUpdateInfo + 3;
    do
    {
      v3 = 0;
      if ( this->m_NumOfSchedule <= 0 )
        goto LABEL_7;
      v4 = (char *)this->m_Schedule;
      while ( *(_DWORD *)v4 != *(_DWORD *)&v2[-2].NumOfUpdate )
      {
        ++v3;
        v4 += 377;
        if ( v3 >= this->m_NumOfSchedule )
          goto LABEL_7;
      }
      if ( v3 == -1 )
      {
LABEL_7:
        bSucc = 0;
      }
      else
      {
        v6 = v3;
        this->m_Schedule[v6].baseclass_0.Status = LOBYTE(v2->NumOfUpdate);
        this->m_Schedule[v6].baseclass_0.NumOfJoiner = *(unsigned __int16 *)((char *)&v2->NumOfUpdate + 1);
      }
      v2 = (PROTO_NC_KQ_LIST_UPDATE_ACK *)((char *)v2 + 7);
      ++i;
    }
    while ( i < pUpdateInfo->NumOfUpdate );
    result = bSucc;
  }
  return result;
}

//----- (00739AF0) --------------------------------------------------------
void __thiscall PROTO_KQ_INFO::PROTO_KQ_INFO(PROTO_KQ_INFO *this)
{
  _eh_vector_constructor_iterator_(
    this->MapLink,
    0x1Au,
    4,
    (void (__thiscall *)(void *))PROTO_KQ_MAP_INFO::PROTO_KQ_MAP_INFO,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (00739B20) --------------------------------------------------------
void __thiscall PROTO_KQ_INFO::_PROTO_KQ_INFO(PROTO_KQ_INFO *this)
{
  _eh_vector_destructor_iterator_(
    this->MapLink,
    0x1Au,
    4,
    (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
}

//----- (00739B40) --------------------------------------------------------
void __thiscall CKQ::_CKQ(CKQ *this)
{
  CKQ *v1; // esi@1

  v1 = this;
  this->m_ServerTime = _time32(0);
  v1->m_NumOfSchedule = 0;
  _eh_vector_destructor_iterator_(
    v1->m_Schedule,
    0x179u,
    300,
    (void (__thiscall *)(void *))PROTO_KQ_INFO::_PROTO_KQ_INFO);
}

//----- (00739B80) --------------------------------------------------------
void __thiscall CKQ::CKQ(CKQ *this)
{
  CKQ *v1; // esi@1

  v1 = this;
  _eh_vector_constructor_iterator_(
    this->m_Schedule,
    0x179u,
    300,
    (void (__thiscall *)(void *))PROTO_KQ_INFO::PROTO_KQ_INFO,
    (void (__thiscall *)(void *))PROTO_KQ_INFO::_PROTO_KQ_INFO);
  v1->m_ServerTime = _time32(0);
  v1->m_NumOfSchedule = 0;
}

//----- (00739BC0) --------------------------------------------------------
bool __thiscall CFindWay::Load(CFindWay *this, const char *_szFileName)
{
  CFindWay *v2; // esi@1
  _iobuf *v3; // eax@1
  _iobuf *v4; // edi@1
  bool result; // al@2
  int v6; // ebx@4
  void *v7; // eax@5
  void *v8; // eax@7
  unsigned int v9; // ST04_4@7
  int v10; // edx@9

  v2 = this;
  v3 = fopen(_szFileName, "rb");
  v4 = v3;
  if ( v3 && fread(&v2->m_uiRealOneSideDataSize, 4u, 1u, v3) == 1 )
  {
    v6 = (int)&v2->m_uiOneSideBlockCnt;
    if ( fread(&v2->m_uiOneSideBlockCnt, 4u, 1u, v4) != 1 )
      goto LABEL_12;
    v7 = v2->m_pBlockInfoByte;
    v2->m_uiRealTotalBlockSize = v2->m_uiRealOneSideDataSize * *(_DWORD *)v6;
    if ( v7 )
    {
      operator delete(v7);
      v2->m_pBlockInfoByte = 0;
    }
    v8 = operator new__(v2->m_uiRealTotalBlockSize);
    v9 = v2->m_uiRealTotalBlockSize;
    v2->m_pBlockInfoByte = (char *)v8;
    if ( fread(v8, v9, 1u, v4) == 1 )
    {
      fclose(v4);
      v10 = 8 * v2->m_uiRealOneSideDataSize;
      v2->FWMapSy = *(_DWORD *)v6;
      v2->FWMapSx = v10;
      v2->m_bLoaded = 1;
      result = 1;
    }
    else
    {
LABEL_12:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00739C90) --------------------------------------------------------
bool __thiscall CFindWay::GetBlock(CFindWay *this, unsigned int _uiX, unsigned int _uiY)
{
  unsigned int v3; // eax@1
  bool result; // al@3

  v3 = this->m_uiOneSideBlockCnt;
  if ( _uiX >= v3 || _uiY >= v3 )
    result = 1;
  else
    result = ((unsigned __int8)(1 << (_uiX - 8 * (_uiX >> 3))) & *(&this->m_pBlockInfoByte[_uiY
                                                                                         * this->m_uiRealOneSideDataSize]
                                                                 + (_uiX >> 3))) != 0;
  return result;
}

//----- (00739CE0) --------------------------------------------------------
bool __thiscall CFindWay::GetBlock(CFindWay *this, float _fX, float _fY)
{
  CFindWay *v3; // esi@1
  unsigned int v4; // ecx@1
  unsigned int v5; // eax@1
  unsigned int v6; // edi@1
  bool result; // al@3

  v3 = this;
  v4 = (signed __int64)(_fX / 6.25);
  v5 = v3->m_uiOneSideBlockCnt;
  v6 = (signed __int64)(_fY / 6.25);
  if ( v4 >= v5 || v6 >= v5 )
    result = 1;
  else
    result = ((unsigned __int8)(1 << (v4 - 8 * (v4 >> 3))) & *(&v3->m_pBlockInfoByte[v6 * v3->m_uiRealOneSideDataSize]
                                                             + (v4 >> 3))) != 0;
  return result;
}

//----- (00739D70) --------------------------------------------------------
void __thiscall CFindWay::_CFindWay(CFindWay *this)
{
  CFindWay *v1; // esi@1

  v1 = this;
  if ( this->m_pBlockInfoByte && this->m_bLoaded == 1 )
  {
    operator delete(this->m_pBlockInfoByte);
    v1->m_pBlockInfoByte = 0;
    v1->m_bLoaded = 0;
  }
  if ( v1->LenMap )
  {
    operator delete(v1->LenMap);
    v1->LenMap = 0;
  }
}

//----- (00739DC0) --------------------------------------------------------
int __thiscall CFindWay::LineIntersect(CFindWay *this)
{
  CFindWay *v1; // edi@1
  unsigned int v2; // eax@1
  unsigned int v3; // ebx@1
  unsigned int v4; // ecx@1
  unsigned int v5; // esi@1
  unsigned int v6; // eax@1
  signed int v7; // edx@1
  unsigned int v8; // edx@14
  signed int by; // [sp+10h] [bp-1Ch]@1
  unsigned int x; // [sp+14h] [bp-18h]@1
  signed int v12; // [sp+18h] [bp-14h]@1
  unsigned int v13; // [sp+1Ch] [bp-10h]@5
  unsigned int ay; // [sp+20h] [bp-Ch]@5
  unsigned int y; // [sp+24h] [bp-8h]@1

  v1 = this;
  v2 = this->LineStartPos.X - this->Pos.X;
  v3 = this->LineStartPos.Y;
  v4 = this->LineStartPos.X;
  v5 = abs(v2);
  x = v4;
  v6 = abs(v3 - v1->Pos.Y);
  y = v3;
  v12 = v1->Pos.X < v4 ? -1 : 1;
  v7 = v1->Pos.Y < v3 ? -1 : 1;
  by = v1->Pos.Y < v3 ? -1 : 1;
  if ( !v5 )
    v12 = 0;
  if ( !v6 )
  {
    v7 = 0;
    by = 0;
  }
  v13 = v5;
  ay = v6;
  while ( v4 != v1->Pos.X || y != v1->Pos.Y )
  {
    if ( v6 < v5 == 1 )
    {
      v4 += v12;
      ay += v6;
      x = v4;
      if ( ay > v5 )
      {
        y += v7;
        ay -= v5;
      }
    }
    else
    {
      y += v7;
      v13 += v5;
      if ( v13 > v6 )
      {
        v4 += v12;
        v13 -= v6;
        x = v4;
      }
    }
    v8 = v1->m_uiOneSideBlockCnt;
    if ( v4 >= v8
      || y >= v8
      || (unsigned __int8)(1 << (v4 - 8 * (v4 >> 3))) & *(&v1->m_pBlockInfoByte[y * v1->m_uiRealOneSideDataSize]
                                                        + (v4 >> 3)) )
      return 1;
    v4 = x;
    v7 = by;
  }
  return 0;
}

//----- (00739EE0) --------------------------------------------------------
void __thiscall CFindWay::LenMapInit(CFindWay *this, int nSizeX, int nSizeY)
{
  CFindWay *v3; // esi@1

  v3 = this;
  if ( this->LenMap && (this->LenMapSx != nSizeX || this->LenMapSy != nSizeY) )
  {
    operator delete(this->LenMap);
    v3->LenMap = 0;
  }
  if ( !v3->LenMap )
  {
    v3->LenMap = (unsigned __int16 *)operator new__(2 * nSizeY * nSizeX);
    v3->LenMapSx = nSizeX;
    v3->LenMapSy = nSizeY;
  }
}

//----- (00739F60) --------------------------------------------------------
void __thiscall CFindWay::LenMapClear(CFindWay *this)
{
  CFindWay *v1; // esi@1
  unsigned int v2; // ecx@1
  int v3; // ebx@1
  unsigned int v4; // edi@1
  int v5; // eax@1
  int v6; // edx@5
  int v7; // edx@7
  int v8; // [sp+Ch] [bp-10h]@1
  int v9; // [sp+10h] [bp-Ch]@4
  int v10; // [sp+14h] [bp-8h]@2
  int v11; // [sp+18h] [bp-4h]@1

  v1 = this;
  memset((char *)this->LenMap, -1, 2 * this->LenMapSy * this->LenMapSx);
  v2 = v1->StartPos.X;
  v3 = (signed int)(v1->EndPos.X - v2) / 2 - v1->LenMapSx / 2 + v2;
  v11 = v1->LenMapSy / 2;
  v8 = v1->LenMapSx / 2;
  v4 = v1->StartPos.Y;
  v5 = v4 + (signed int)(v1->EndPos.Y - v4) / 2 - v11;
  v1->BaseLenMapX = v3;
  v1->BaseLenMapY = v5;
  if ( (signed int)v2 < v3
    || (v10 = v3 + v1->LenMapSx, (signed int)v2 >= v10)
    || (signed int)v4 < v5
    || (v9 = v5 + v1->LenMapSy, (signed int)v4 >= v9)
    || (v6 = v1->EndPos.X, v6 < v3)
    || v6 >= v10
    || (v7 = v1->EndPos.Y, v7 < v5)
    || v7 >= v9 )
  {
    v1->BaseLenMapX = v2 - v8;
    v1->BaseLenMapY = v4 - v11;
    v1->LenMapInRange = 0;
  }
  else
  {
    v1->LenMapInRange = 1;
  }
}

//----- (0073A060) --------------------------------------------------------
int __thiscall CFindWay::LenMapSet(CFindWay *this, int x, int y, unsigned __int16 value)
{
  int v4; // esi@1
  int result; // eax@2
  int v6; // edx@3
  int v7; // edi@4

  v4 = this->BaseLenMapX;
  if ( v4 > x || (v6 = this->BaseLenMapY, v6 > y) )
  {
    result = 0;
  }
  else
  {
    v7 = this->LenMapSx;
    if ( v7 + v4 > x && v6 + this->LenMapSy > y )
    {
      this->LenMap[x + v7 * (y - v6) - v4] = value;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0073A0D0) --------------------------------------------------------
int __thiscall CFindWay::SearchMoveable(CFindWay *this)
{
  unsigned __int16 v1; // bx@1
  CFindWay *v2; // esi@1
  unsigned int v3; // ecx@1
  unsigned int v4; // eax@1
  unsigned int v5; // edx@1
  unsigned int v6; // edi@2
  unsigned int v7; // eax@3
  int v8; // ecx@7
  __int16 v9; // bx@9
  __int16 v10; // ax@9
  int v11; // ecx@14
  __int16 v12; // bx@16
  __int16 v13; // ax@16
  unsigned int v14; // edi@20
  unsigned int v15; // eax@21
  int v16; // ecx@25
  __int16 v17; // bx@27
  __int16 v18; // ax@27
  unsigned int v19; // eax@29
  int v20; // ecx@33
  __int16 v21; // bx@35
  __int16 v22; // ax@35
  unsigned int v23; // eax@39
  unsigned int v24; // eax@41
  unsigned int v25; // ecx@47
  unsigned int v26; // eax@49
  int P1; // [sp+Ch] [bp-20h]@1
  int P1_4; // [sp+10h] [bp-1Ch]@1
  unsigned int P2; // [sp+14h] [bp-18h]@1
  int P2_4; // [sp+18h] [bp-14h]@1
  unsigned __int16 FoundLen; // [sp+1Ch] [bp-10h]@0
  unsigned int v33; // [sp+20h] [bp-Ch]@1
  unsigned int v34; // [sp+24h] [bp-8h]@1
  signed int FoundOne; // [sp+28h] [bp-4h]@1

  v1 = FoundLen;
  v2 = this;
  v3 = this->EndPos.Y;
  v4 = v2->EndPos.X;
  v5 = v4 - 1;
  P2_4 = v3 + 1;
  P1_4 = v3 - 1;
  FoundOne = 0;
  P1 = v4 - 1;
  P2 = v4 + 1;
  v34 = v3;
  v33 = v3;
  while ( 2 )
  {
    v6 = v5;
    if ( (signed int)v5 >= (signed int)P2 )
      goto LABEL_20;
    do
    {
      v7 = v2->m_uiOneSideBlockCnt;
      if ( v6 >= v7 )
        goto LABEL_18;
      if ( P1_4 < v7
        && !((unsigned __int8)(1 << (v6 - 8 * (v6 >> 3))) & *(&v2->m_pBlockInfoByte[P1_4 * v2->m_uiRealOneSideDataSize]
                                                            + (v6 >> 3))) )
      {
        if ( !FoundOne )
        {
          v9 = abs(v6 - v2->StartPos.X);
          v10 = abs(P1_4 - v2->StartPos.Y);
          v2->NewPos.Y = P1_4;
          v1 = v10 + v9;
          FoundOne = 1;
          goto LABEL_10;
        }
        v8 = abs(P1_4 - v2->StartPos.Y) + abs(v6 - v2->StartPos.X);
        if ( v1 > (unsigned __int16)v8 )
        {
          v2->NewPos.Y = P1_4;
          v1 = v8;
LABEL_10:
          v2->NewPos.X = v6;
          goto LABEL_11;
        }
      }
LABEL_11:
      if ( P2_4 < v2->m_uiOneSideBlockCnt
        && !((unsigned __int8)(1 << (v6 - 8 * (v6 >> 3))) & *(&v2->m_pBlockInfoByte[P2_4 * v2->m_uiRealOneSideDataSize]
                                                            + (v6 >> 3))) )
      {
        if ( FoundOne )
        {
          v11 = abs(P2_4 - v2->StartPos.Y) + abs(v6 - v2->StartPos.X);
          if ( v1 <= (unsigned __int16)v11 )
            goto LABEL_18;
          v2->NewPos.Y = P2_4;
          v1 = v11;
        }
        else
        {
          v12 = abs(v6 - v2->StartPos.X);
          v13 = abs(P2_4 - v2->StartPos.Y);
          v2->NewPos.Y = P2_4;
          v1 = v13 + v12;
          FoundOne = 1;
        }
        v2->NewPos.X = v6;
      }
LABEL_18:
      ++v6;
    }
    while ( (signed int)v6 < (signed int)P2 );
    v5 = P1;
LABEL_20:
    v14 = v33;
    if ( (signed int)v33 < (signed int)v34 )
    {
      while ( 2 )
      {
        v15 = v2->m_uiOneSideBlockCnt;
        if ( v5 < v15
          && v14 < v15
          && !((unsigned __int8)(1 << (v5 - 8 * (v5 >> 3))) & *(&v2->m_pBlockInfoByte[v14 * v2->m_uiRealOneSideDataSize]
                                                              + (v5 >> 3))) )
        {
          if ( FoundOne )
          {
            v16 = abs(P1 - v2->StartPos.X) + abs(v14 - v2->StartPos.Y);
            if ( v1 > (unsigned __int16)v16 )
            {
              v2->NewPos.X = P1;
              v1 = v16;
              goto LABEL_28;
            }
          }
          else
          {
            v17 = abs(v14 - v2->StartPos.Y);
            v18 = abs(P1 - v2->StartPos.X);
            v2->NewPos.X = P1;
            v1 = v18 + v17;
            FoundOne = 1;
LABEL_28:
            v2->NewPos.Y = v14;
          }
        }
        v19 = v2->m_uiOneSideBlockCnt;
        if ( P2 < v19
          && v14 < v19
          && !((unsigned __int8)(1 << (P2 - 8 * (P2 >> 3))) & *(&v2->m_pBlockInfoByte[v14 * v2->m_uiRealOneSideDataSize]
                                                              + (P2 >> 3))) )
        {
          if ( FoundOne )
          {
            v20 = abs(P2 - v2->StartPos.X) + abs(v14 - v2->StartPos.Y);
            if ( v1 > (unsigned __int16)v20 )
            {
              v2->NewPos.X = P2;
              v1 = v20;
              goto LABEL_36;
            }
          }
          else
          {
            v21 = abs(v14 - v2->StartPos.Y);
            v22 = abs(P2 - v2->StartPos.X);
            v2->NewPos.X = P2;
            v1 = v22 + v21;
            FoundOne = 1;
LABEL_36:
            v2->NewPos.Y = v14;
          }
        }
        v5 = P1;
        ++v14;
        if ( (signed int)v14 >= (signed int)v34 )
          break;
        continue;
      }
    }
    if ( !FoundOne )
    {
      v23 = v2->StartPos.X;
      if ( v23 >= v5 )
      {
        if ( v23 <= P2 )
        {
          v24 = v2->StartPos.Y;
          if ( v24 >= P1_4 )
          {
            if ( v24 <= P2_4 )
              return 0;
          }
        }
      }
      if ( v5 )
      {
        --v5;
        P1 = v5;
      }
      if ( P1_4 )
      {
        --P1_4;
        --v33;
      }
      v25 = v2->FWMapSx;
      if ( P2 < v25 )
        ++P2;
      v26 = v2->FWMapSy;
      if ( P2_4 < v26 )
      {
        ++P2_4;
        ++v34;
      }
      if ( !(v5 + P1_4) && P2 + P2_4 == v26 + v25 - 2 )
        return 0;
      continue;
    }
    return 1;
  }
}

//----- (0073A460) --------------------------------------------------------
void __thiscall CFindWay::FindWay(CFindWay *this)
{
  CFindWay *v1; // esi@1
  unsigned int v2; // ecx@1
  unsigned int v3; // eax@1
  unsigned int v4; // edi@1
  unsigned int v5; // ecx@4
  unsigned int v6; // eax@4
  unsigned int v7; // edx@4
  unsigned int v8; // ecx@5
  unsigned int v9; // edx@5
  signed int v10; // edi@5
  unsigned int v11; // ecx@8
  unsigned int v12; // edx@8
  unsigned int v13; // ecx@10
  unsigned int v14; // edx@10
  unsigned int v15; // eax@10
  unsigned int v16; // ecx@11
  unsigned int v17; // edx@11
  unsigned int v18; // eax@12
  int v19; // ebx@12
  unsigned int v20; // ecx@12
  int v21; // edi@12
  int v22; // eax@12
  int v23; // ecx@12
  unsigned int v24; // eax@12
  unsigned int v25; // ecx@12
  unsigned int v26; // edi@13
  int v27; // edx@13
  unsigned int v28; // eax@13
  unsigned int v29; // ecx@17
  unsigned int v30; // edx@18
  int v31; // ecx@19
  int v32; // edx@19
  int v33; // eax@19
  int v34; // edi@20
  int v35; // eax@23
  unsigned int v36; // edx@23
  unsigned int v37; // edi@24
  int v38; // ecx@24
  int v39; // eax@24
  int v40; // edx@25
  unsigned int v41; // ecx@29
  int v42; // edx@32
  int v43; // ecx@33
  unsigned int v44; // eax@36
  int v45; // eax@36
  int v46; // ecx@36
  __int16 v47; // di@36
  unsigned int v48; // eax@36
  unsigned int v49; // ecx@37
  signed int v50; // edx@39
  int v51; // eax@41
  unsigned int v52; // eax@42
  unsigned int v53; // ecx@46
  unsigned int v54; // edx@46
  unsigned int v55; // ecx@47
  unsigned int v56; // edx@47
  int v57; // edi@50
  int v58; // ecx@50
  int v59; // eax@50
  int v60; // edx@52
  int v61; // ebx@55
  int v62; // eax@59
  int v63; // ecx@59
  int v64; // edx@60
  int v65; // ebx@63
  int v66; // eax@67
  int v67; // ecx@67
  int v68; // edx@68
  int v69; // ebx@71
  int v70; // eax@75
  int v71; // ecx@75
  int v72; // edx@76
  int v73; // ebx@79
  bool v74; // zf@83
  unsigned int v75; // ecx@84
  unsigned int v76; // edx@84
  int v77; // eax@84
  int v78; // eax@86
  unsigned int v79; // edx@86
  unsigned int v80; // ebx@86
  int v81; // edi@86
  int v82; // eax@88
  unsigned __int16 v83; // [sp+10h] [bp-14h]@23
  unsigned int v84; // [sp+10h] [bp-14h]@86
  int v85; // [sp+14h] [bp-10h]@27
  int j; // [sp+18h] [bp-Ch]@26
  signed int ja; // [sp+18h] [bp-Ch]@50
  int jb; // [sp+18h] [bp-Ch]@86
  int BI; // [sp+1Ch] [bp-8h]@23
  signed __int16 BIa; // [sp+1Ch] [bp-8h]@47
  char v91; // [sp+23h] [bp-1h]@50
  char v92; // [sp+23h] [bp-1h]@59
  char v93; // [sp+23h] [bp-1h]@67
  char v94; // [sp+23h] [bp-1h]@75

  v1 = this;
  v2 = this->EndPos.X;
  v3 = v1->m_uiOneSideBlockCnt;
  v4 = v1->EndPos.Y;
  v1->NoJunc = 0;
  v1->ChangedEndPos = 0;
  if ( v2 >= v3
    || v4 >= v3
    || (unsigned __int8)(1 << (v2 - 8 * (v2 >> 3))) & *(&v1->m_pBlockInfoByte[v4 * v1->m_uiRealOneSideDataSize]
                                                      + (v2 >> 3)) )
  {
    v5 = v1->StartPos.X;
    v6 = v1->EndPos.Y;
    v1->LineStartPos.X = v1->EndPos.X;
    v7 = v1->StartPos.Y;
    v1->Pos.X = v5;
    v1->LineStartPos.Y = v6;
    v1->Pos.Y = v7;
    if ( !CFindWay::SearchMoveable(v1) )
    {
      v11 = v1->StartPos.X;
      v12 = v1->StartPos.Y;
      v1->GoalReached = 0;
      v1->ChangedEndPos = 1;
      v1->EndPos.X = v11;
      v1->EndPos.Y = v12;
      v1->JuncList[0].X = v11;
      v1->JuncList[0].Y = v12;
      v1->NumOfJunc = 1;
      return;
    }
    v8 = v1->NewPos.Y;
    v9 = v1->NewPos.X;
    v1->EndPos.X = v9;
    v1->EndPos.Y = v8;
    v10 = 1;
    v1->JuncList[0].X = v9;
    v1->JuncList[0].Y = v8;
    v1->ChangedEndPos = 1;
    if ( v9 == v1->StartPos.X && v8 == v1->StartPos.Y )
    {
      v1->NumOfJunc = 1;
      v1->GoalReached = 0;
      return;
    }
  }
  else
  {
    v10 = 1;
  }
  v13 = v1->StartPos.Y;
  v14 = v1->EndPos.X;
  v1->LineStartPos.X = v1->StartPos.X;
  v15 = v1->EndPos.Y;
  v1->LineStartPos.Y = v13;
  v1->Pos.X = v14;
  v1->Pos.Y = v15;
  if ( CFindWay::LineIntersect(v1) )
  {
    CFindWay::LenMapClear(v1);
    v18 = v1->StartPos.X;
    v19 = v1->StartPos.Y;
    v20 = v1->StartPos.Y;
    v1->PList[0].X = v18;
    v1->PCnt = v10;
    v21 = v18;
    v22 = v19 - v1->EndPos.Y;
    v1->PList[0].Y = v20;
    v1->DiffY = v22;
    v23 = v21 - v1->EndPos.X;
    v1->DiffX = v23;
    v1->LList[0] = abs(v23) + abs(v22);
    CFindWay::LenMapSet(v1, v21, v19, 1u);
    v24 = v1->StartPos.Y;
    v25 = v1->StartPos.X;
    v1->Pos.X = v25;
    v1->Pos.Y = v24;
    v1->NewPos.X = v25;
    v1->NewPos.Y = v24;
    v1->Step = 1;
    v1->GoalReached = 0;
    v1->NearLength = -1;
    do
    {
      v26 = v1->PCnt;
      v27 = 0;
      v28 = 0;
      v1->Shortest = 0;
      if ( v26 )
      {
        do
        {
          if ( v1->LList[v28] < v1->LList[v27] )
          {
            v27 = v28;
            v1->Shortest = v28;
          }
          ++v28;
        }
        while ( v28 < v1->PCnt );
      }
      v29 = v1->Shortest;
      v1->Pos.X = v1->PList[v29].X;
      v1->Pos.Y = v1->PList[v29].Y;
      if ( v1->LList[v29] < v1->NearLength )
      {
        v30 = v1->Pos.Y;
        v1->NearPos.X = v1->Pos.X;
        v1->NearPos.Y = v30;
        v1->NearLength = v1->LList[v29];
      }
      v1->PCnt = v26 - 1;
      v1->PList[v29].X = v1->PList[v26 - 1].X;
      v1->PList[v29].Y = v1->PList[v26 - 1].Y;
      v1->LList[v1->Shortest] = v1->LList[v1->PCnt];
      v31 = v1->Pos.X;
      v32 = v1->BaseLenMapX;
      v33 = v1->Pos.Y;
      if ( v32 <= v31 )
      {
        v34 = v1->BaseLenMapY;
        if ( v34 <= v33 )
        {
          if ( v32 + v1->LenMapSx > v31 && v34 + v1->LenMapSy > v33 )
          {
            v35 = v1->LenMapSx * (v33 - v34) - v32;
            v36 = v1->Pos.X;
            v83 = v1->LenMap[v31 + v35] + 1;
            v1->NewPos.Y = v1->Pos.Y;
            --v1->NewPos.Y;
            v1->NewPos.X = v36;
            v1->Dir = 2;
            BI = 0;
            do
            {
              v37 = v1->NewPos.X;
              v38 = v1->BaseLenMapX;
              v39 = v1->NewPos.Y;
              if ( v38 <= (signed int)v37 )
              {
                v40 = v1->BaseLenMapY;
                if ( v40 <= v39 )
                {
                  j = v38 + v1->LenMapSx;
                  if ( j > (signed int)v37 )
                  {
                    v85 = v40 + v1->LenMapSy;
                    if ( v85 > v39 )
                    {
                      if ( v1->LenMap[v37 + v1->LenMapSx * (v39 - v40) - v38] == -1 )
                      {
                        v41 = v1->m_uiOneSideBlockCnt;
                        if ( v37 < v41 )
                        {
                          if ( v39 < v41 )
                          {
                            if ( !((unsigned __int8)(1 << (v37 - 8 * (v37 >> 3))) & *(&v1->m_pBlockInfoByte[v39 * v1->m_uiRealOneSideDataSize]
                                                                                    + (v37 >> 3))) )
                            {
                              v42 = v1->BaseLenMapX;
                              if ( v42 <= (signed int)v37 )
                              {
                                v43 = v1->BaseLenMapY;
                                if ( v43 <= v39 )
                                {
                                  if ( j > (signed int)v37 )
                                  {
                                    if ( v85 > v39 )
                                    {
                                      v1->LenMap[v37 + v1->LenMapSx * (v39 - v43) - v42] = v83;
                                      v44 = v1->PCnt;
                                      v1->PList[v44].X = v1->NewPos.X;
                                      v1->PList[v44].Y = v1->NewPos.Y;
                                      v45 = v1->NewPos.Y - v1->EndPos.Y;
                                      v46 = v1->NewPos.X - v1->EndPos.X;
                                      v1->DiffY = v45;
                                      v47 = abs(v45);
                                      v48 = v1->PCnt;
                                      v1->DiffX = v46;
                                      v1->LList[v48] = abs(v46) + v47;
                                      ++v1->PCnt;
                                      if ( v1->PCnt >= 0x300 )
                                        break;
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
              v49 = v1->NewPos.X;
              if ( v49 != v1->EndPos.X || v1->NewPos.Y != v1->EndPos.Y )
              {
                v50 = BI;
              }
              else
              {
                v1->GoalReached = 1;
                v50 = 7;
              }
              v51 = v1->Dir;
              v1->NewPos.X = v49 + v1->XTbl[v51];
              v1->NewPos.Y += v1->YTbl[v51];
              v1->Dir = v1->DirTbl[v51];
              BI = v50 + 1;
            }
            while ( (unsigned int)(v50 + 1) < 8 );
          }
        }
      }
      v52 = v1->PCnt;
      if ( v52 >= 0x300 )
        break;
      if ( v1->GoalReached )
        goto LABEL_47;
    }
    while ( v52 );
    if ( !v1->GoalReached )
    {
      v53 = v1->NearPos.X;
      v54 = v1->NearPos.Y;
      v1->ChangedEndPos = 1;
      v1->EndPos.X = v53;
      v1->EndPos.Y = v54;
    }
LABEL_47:
    v55 = v1->EndPos.Y;
    v56 = v1->EndPos.X;
    v1->NewPos.X = v56;
    v1->NewPos.Y = v55;
    v1->JuncBF[0].X = v56;
    v1->JuncBF[0].Y = v55;
    BIa = -1;
    v1->NoJunc = 1;
    while ( v1->NewPos.X != v1->StartPos.X || v1->NewPos.Y != v1->StartPos.Y )
    {
      --v1->NewPos.Y;
      v1->Dir = 2;
      v57 = v1->BaseLenMapX;
      v58 = v1->NewPos.Y;
      v59 = v1->NewPos.X;
      v91 = 2;
      ja = 2;
      do
      {
        if ( v57 <= v59 )
        {
          v60 = v1->BaseLenMapY;
          if ( v60 <= v58 )
          {
            if ( v57 + v1->LenMapSx > v59 )
            {
              if ( v60 + v1->LenMapSy > v58 )
              {
                v61 = v59 + v1->LenMapSx * (v58 - v60) - v57;
                if ( v1->LenMap[v61] < BIa )
                {
                  if ( v59 < v1->FWMapSx && v58 < v1->FWMapSy )
                  {
                    BIa = v1->LenMap[v61];
                    v1->ShPos.X = v1->NewPos.X;
                    v1->ShPos.Y = v1->NewPos.Y;
                  }
                }
              }
            }
          }
        }
        v62 = v1->XTbl[(unsigned __int8)v91] + v59;
        v1->NewPos.X = v62;
        v63 = v1->YTbl[(unsigned __int8)v91] + v58;
        v1->NewPos.Y = v63;
        v92 = v1->DirTbl[(unsigned __int8)v91];
        v1->Dir = v92;
        if ( v57 <= v62 )
        {
          v64 = v1->BaseLenMapY;
          if ( v64 <= v63 )
          {
            if ( v57 + v1->LenMapSx > v62 )
            {
              if ( v64 + v1->LenMapSy > v63 )
              {
                v65 = v62 + v1->LenMapSx * (v63 - v64) - v57;
                if ( v1->LenMap[v65] < BIa )
                {
                  if ( v62 < v1->FWMapSx && v63 < v1->FWMapSy )
                  {
                    BIa = v1->LenMap[v65];
                    v1->ShPos.X = v62;
                    v1->ShPos.Y = v63;
                  }
                }
              }
            }
          }
        }
        v66 = v1->XTbl[(unsigned __int8)v92] + v62;
        v1->NewPos.X = v66;
        v67 = v1->YTbl[(unsigned __int8)v92] + v63;
        v1->NewPos.Y = v67;
        v93 = v1->DirTbl[(unsigned __int8)v92];
        v1->Dir = v93;
        if ( v57 <= v66 )
        {
          v68 = v1->BaseLenMapY;
          if ( v68 <= v67 )
          {
            if ( v57 + v1->LenMapSx > v66 )
            {
              if ( v68 + v1->LenMapSy > v67 )
              {
                v69 = v66 + v1->LenMapSx * (v67 - v68) - v57;
                if ( v1->LenMap[v69] < BIa )
                {
                  if ( v66 < v1->FWMapSx && v67 < v1->FWMapSy )
                  {
                    BIa = v1->LenMap[v69];
                    v1->ShPos.X = v66;
                    v1->ShPos.Y = v67;
                  }
                }
              }
            }
          }
        }
        v70 = v1->XTbl[(unsigned __int8)v93] + v66;
        v1->NewPos.X = v70;
        v71 = v1->YTbl[(unsigned __int8)v93] + v67;
        v1->NewPos.Y = v71;
        v94 = v1->DirTbl[(unsigned __int8)v93];
        v1->Dir = v94;
        if ( v57 <= v70 )
        {
          v72 = v1->BaseLenMapY;
          if ( v72 <= v71 )
          {
            if ( v57 + v1->LenMapSx > v70 )
            {
              if ( v72 + v1->LenMapSy > v71 )
              {
                v73 = v70 + v1->LenMapSx * (v71 - v72) - v57;
                if ( v1->LenMap[v73] < BIa )
                {
                  if ( v70 < v1->FWMapSx && v71 < v1->FWMapSy )
                  {
                    BIa = v1->LenMap[v73];
                    v1->ShPos.X = v70;
                    v1->ShPos.Y = v71;
                  }
                }
              }
            }
          }
        }
        v59 = v1->XTbl[(unsigned __int8)v94] + v70;
        v1->NewPos.X = v59;
        v58 = v1->YTbl[(unsigned __int8)v94] + v71;
        v74 = ja-- == 1;
        v1->NewPos.Y = v58;
        v91 = v1->DirTbl[(unsigned __int8)v94];
        v1->Dir = v91;
      }
      while ( !v74 );
      v75 = v1->ShPos.Y;
      v76 = v1->ShPos.X;
      v1->NewPos.X = v1->ShPos.X;
      v77 = v1->NoJunc;
      v1->NewPos.Y = v75;
      v1->JuncBF[v77].X = v76;
      v1->JuncBF[v77].Y = v1->ShPos.Y;
      ++v1->NoJunc;
      if ( v1->NoJunc >= 512 )
      {
        v1->GoalReached = 0;
        break;
      }
    }
    v78 = v1->NoJunc;
    v79 = v1->StartPos.Y;
    v80 = v1->StartPos.X;
    v81 = 0;
    v1->NumOfJunc = 0;
    v84 = v79;
    jb = v78;
    while ( v81 < jb )
    {
      v1->LineStartPos.X = v80;
      v1->LineStartPos.Y = v84;
      v1->Pos.X = v1->JuncBF[v81].X;
      v1->Pos.Y = v1->JuncBF[v81].Y;
      if ( CFindWay::LineIntersect(v1) )
      {
        ++v81;
      }
      else
      {
        v80 = v1->JuncBF[v81].X;
        v84 = v1->JuncBF[v81].Y;
        v82 = v1->NumOfJunc;
        v1->JuncList[v82].X = v80;
        v1->JuncList[v82].Y = v1->JuncBF[v81].Y;
        ++v1->NumOfJunc;
        jb = v81;
        v81 = 0;
      }
    }
  }
  else
  {
    v16 = v1->EndPos.X;
    v17 = v1->EndPos.Y;
    v1->GoalReached = v10;
    v1->NumOfJunc = v10;
    v1->JuncList[0].X = v16;
    v1->JuncList[0].Y = v17;
  }
}

//----- (0073AE00) --------------------------------------------------------
void __thiscall CFindWay::Init(CFindWay *this)
{
  CFindWay *v1; // ebx@1
  int v2; // ecx@1
  int v3; // edx@1
  int dwYTbl[13]; // [sp+Ch] [bp-78h]@1
  int dwXTbl[13]; // [sp+40h] [bp-44h]@1
  _DWORD bDirTbl[4]; // [sp+74h] [bp-10h]@1

  v1 = this;
  dwXTbl[2] = 1;
  dwXTbl[9] = 1;
  dwYTbl[2] = 1;
  dwYTbl[4] = 1;
  bDirTbl[0] = 100926208;
  bDirTbl[1] = 786440;
  bDirTbl[2] = 513;
  dwXTbl[0] = 0;
  dwXTbl[1] = 0;
  dwXTbl[3] = 2;
  dwXTbl[4] = -1;
  dwXTbl[5] = 0;
  dwXTbl[6] = 0;
  dwXTbl[7] = 0;
  dwXTbl[8] = -1;
  dwXTbl[10] = 0;
  dwXTbl[11] = 0;
  dwXTbl[12] = -2;
  dwYTbl[0] = 0;
  dwYTbl[1] = -1;
  dwYTbl[3] = 0;
  dwYTbl[5] = 0;
  dwYTbl[6] = 2;
  dwYTbl[7] = 0;
  dwYTbl[8] = -1;
  dwYTbl[9] = -2;
  dwYTbl[10] = 0;
  dwYTbl[11] = 0;
  dwYTbl[12] = 0;
  this->NoJunc = 0;
  this->NumOfJunc = 0;
  this->LenMap = 0;
  CFindWay::LenMapInit(this, 256, 256);
  v2 = bDirTbl[1];
  v3 = bDirTbl[2];
  *(_DWORD *)&v1->DirTbl[0] = bDirTbl[0];
  *(_DWORD *)&v1->DirTbl[4] = v2;
  memcpy(v1->XTbl, dwXTbl, sizeof(v1->XTbl));
  memcpy(v1->YTbl, dwYTbl, sizeof(v1->YTbl));
  *(_DWORD *)&v1->DirTbl[8] = v3;
  v1->DirTbl[12] = 9;
}

//----- (0073AEF0) --------------------------------------------------------
void __thiscall CFindWay::CFindWay(CFindWay *this)
{
  this->m_bLoaded = 0;
  this->m_pBlockInfoByte = 0;
  CFindWay::Init(this);
}

//----- (0073AF10) --------------------------------------------------------
bool __thiscall AreaInfoData::AE_Circle::IntersectTest(AreaInfoData::AE_Circle *this, float fX, float fY)
{
  float v3; // ST00_4@1
  double v4; // st7@1
  float fDistY; // [sp+Ch] [bp+8h]@1
  float fDistYa; // [sp+Ch] [bp+8h]@1
  float fDistYb; // [sp+Ch] [bp+8h]@1

  v3 = fX - this->fCenterX;
  fDistY = fY - this->fCenterY;
  fDistYa = fDistY * fDistY + v3 * v3;
  v4 = fDistYa;
  fDistYb = this->fRadius * this->fRadius;
  return fDistYb > v4;
}

//----- (0073AF70) --------------------------------------------------------
bool __thiscall AreaInfoData::AE_Square::IntersectTest(AreaInfoData::AE_Square *this, float fX, float fY)
{
  JUMPOUT(loc_73AF9B);
}

//----- (0073B040) --------------------------------------------------------
void __thiscall AreaInfoData::AreaInfoData(AreaInfoData *this)
{
  this->vfptr = (AreaInfoDataVtbl *)&AreaInfoData::_vftable_;
  this->m_uiTotalDataCnt = 0;
  memset((char *)this->m_pData, 0, 0x400u);
}
// 9D9310: using guessed type int (__thiscall *AreaInfoData___vftable_)(void *p, char);

//----- (0073B070) --------------------------------------------------------
AreaInfoData::IAreaData *__thiscall AreaInfoData::GetData(AreaInfoData *this, Name8 *Name)
{
  unsigned int v2; // edi@1
  unsigned int v3; // edx@1
  AreaInfoData::IAreaData **v4; // esi@2
  AreaInfoData::IAreaData *result; // eax@3

  v2 = this->m_uiTotalDataCnt;
  v3 = 0;
  if ( v2 )
  {
    v4 = this->m_pData;
    do
    {
      result = *v4;
      if ( !*v4 )
        break;
      if ( *(_DWORD *)&Name->n8_name[0] == *(_DWORD *)&result->Name.n8_name[0]
        && *(_DWORD *)&Name->n8_name[4] == *(_DWORD *)&result->Name.n8_name[4]
        && *(_DWORD *)&Name->n8_name[8] == *(_DWORD *)&result->Name.n8_name[8]
        && *(_DWORD *)&Name->n8_name[12] == *(_DWORD *)&result->Name.n8_name[12]
        && *(_DWORD *)&Name->n8_name[16] == *(_DWORD *)&result->Name.n8_name[16]
        && *(_DWORD *)&Name->n8_name[20] == *(_DWORD *)&result->Name.n8_name[20]
        && *(_DWORD *)&Name->n8_name[24] == *(_DWORD *)&result->Name.n8_name[24]
        && *(_DWORD *)&Name->n8_name[28] == *(_DWORD *)&result->Name.n8_name[28] )
        return result;
      ++v3;
      ++v4;
    }
    while ( v3 < v2 );
  }
  return 0;
}

//----- (0073B0E0) --------------------------------------------------------
AreaInfoData::IAreaData *__thiscall AreaInfoData::GetData(AreaInfoData *this, const char *szName)
{
  AreaInfoData *v2; // esi@1
  Name8 Name; // [sp+4h] [bp-24h]@1
  unsigned int v5; // [sp+24h] [bp-4h]@1
  int v6; // [sp+28h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = this;
  *(_QWORD *)&Name.n8_name[24] = 0i64;
  *(_QWORD *)&Name.n8_name[16] = 0i64;
  *(_QWORD *)&Name.n8_name[8] = 0i64;
  *(_QWORD *)&Name.n8_name[0] = 0i64;
  strncpy(Name.n8_name, (char *)szName, 0x20u);
  return AreaInfoData::GetData(v2, &Name);
}
// A85C00: using guessed type int __security_cookie;

//----- (0073B140) --------------------------------------------------------
void __thiscall AreaInfoData::RemoveAll(AreaInfoData *this)
{
  void **v1; // esi@1
  signed int v2; // edi@1

  this->m_uiTotalDataCnt = 0;
  v1 = (void **)this->m_pData;
  v2 = 256;
  do
  {
    if ( *v1 )
      operator delete(*v1);
    *v1 = 0;
    ++v1;
    --v2;
  }
  while ( v2 );
}

//----- (0073B180) --------------------------------------------------------
void __thiscall AreaInfoData::_AreaInfoData(AreaInfoData *this)
{
  void **v1; // esi@1
  signed int v2; // edi@1

  this->vfptr = (AreaInfoDataVtbl *)&AreaInfoData::_vftable_;
  this->m_uiTotalDataCnt = 0;
  v1 = (void **)this->m_pData;
  v2 = 256;
  do
  {
    if ( *v1 )
      operator delete(*v1);
    *v1 = 0;
    ++v1;
    --v2;
  }
  while ( v2 );
}
// 9D9310: using guessed type int (__thiscall *AreaInfoData___vftable_)(void *p, char);

//----- (0073B1C0) --------------------------------------------------------
bool __thiscall AreaInfoData::Load(AreaInfoData *this, const char *szFileName)
{
  AreaInfoData *v2; // esi@1
  _iobuf *v3; // ebx@1
  bool result; // al@2
  void *v5; // eax@7
  void *v6; // esi@8
  int v7; // eax@10
  void *v8; // eax@12
  void *v9; // esi@13
  int v10; // eax@15
  int v11; // [sp+Ch] [bp-58h]@3
  int nAreaType; // [sp+10h] [bp-54h]@6
  unsigned int i; // [sp+18h] [bp-4Ch]@3
  AreaInfoData::IAreaData **v14; // [sp+1Ch] [bp-48h]@4
  Name8 Name; // [sp+20h] [bp-44h]@6
  char szName[32]; // [sp+40h] [bp-24h]@6
  unsigned int v17; // [sp+60h] [bp-4h]@1
  int v18; // [sp+64h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = this;
  v3 = fopen(szFileName, "rb");
  if ( v3 )
  {
    AreaInfoData::RemoveAll(v2);
    v11 = (int)&v2->m_uiTotalDataCnt;
    fread(&v2->m_uiTotalDataCnt, 4u, 1u, v3);
    i = 0;
    if ( v2->m_uiTotalDataCnt > 0 )
    {
      v14 = v2->m_pData;
      do
      {
        if ( i >= 0x100 )
          break;
        *(_QWORD *)&Name.n8_name[24] = 0i64;
        *(_QWORD *)&Name.n8_name[16] = 0i64;
        *(_QWORD *)&Name.n8_name[8] = 0i64;
        *(_QWORD *)&Name.n8_name[0] = 0i64;
        fread(szName, 1u, 0x20u, v3);
        *(_QWORD *)&Name.n8_name[24] = 0i64;
        *(_QWORD *)&Name.n8_name[16] = 0i64;
        *(_QWORD *)&Name.n8_name[8] = 0i64;
        *(_QWORD *)&Name.n8_name[0] = 0i64;
        strncpy(Name.n8_name, szName, 0x20u);
        fread(&nAreaType, 4u, 1u, v3);
        if ( nAreaType )
        {
          if ( nAreaType == 1 )
          {
            v8 = operator new(0x3Cu);
            if ( v8 )
            {
              *((_DWORD *)v8 + 8) = 0;
              *((_DWORD *)v8 + 7) = 0;
              *((_DWORD *)v8 + 6) = 0;
              *((_DWORD *)v8 + 5) = 0;
              *((_DWORD *)v8 + 4) = 0;
              *((_DWORD *)v8 + 3) = 0;
              *((_DWORD *)v8 + 2) = 0;
              *((_DWORD *)v8 + 1) = 0;
              *(_DWORD *)v8 = &AreaInfoData::AE_Square::_vftable_;
              v9 = v8;
            }
            else
            {
              v9 = 0;
            }
            v10 = *(_DWORD *)&Name;
            *v14 = (AreaInfoData::IAreaData *)v9;
            *((_DWORD *)v9 + 1) = v10;
            *((_QWORD *)v9 + 1) = *(_QWORD *)&Name.n8_name[4];
            *((_QWORD *)v9 + 2) = *(_QWORD *)&Name.n8_name[12];
            *((_QWORD *)v9 + 3) = *(_QWORD *)&Name.n8_name[20];
            *((_DWORD *)v9 + 8) = *(_DWORD *)&Name.n8_name[28];
            *((_DWORD *)v9 + 9) = nAreaType;
            fread((char *)v9 + 40, 4u, 1u, v3);
            fread((char *)v9 + 44, 4u, 1u, v3);
            fread((char *)v9 + 48, 4u, 1u, v3);
            fread((char *)v9 + 52, 4u, 1u, v3);
            fread((char *)v9 + 56, 4u, 1u, v3);
            JUMPOUT(*(int *)loc_73B41E);
          }
        }
        else
        {
          v5 = operator new(0x34u);
          if ( v5 )
          {
            *((_DWORD *)v5 + 8) = 0;
            *((_DWORD *)v5 + 7) = 0;
            *((_DWORD *)v5 + 6) = 0;
            *((_DWORD *)v5 + 5) = 0;
            *((_DWORD *)v5 + 4) = 0;
            *((_DWORD *)v5 + 3) = 0;
            *((_DWORD *)v5 + 2) = 0;
            *((_DWORD *)v5 + 1) = 0;
            *(_DWORD *)v5 = &AreaInfoData::AE_Circle::_vftable_;
            v6 = v5;
          }
          else
          {
            v6 = 0;
          }
          v7 = *(_DWORD *)&Name;
          *v14 = (AreaInfoData::IAreaData *)v6;
          *((_DWORD *)v6 + 1) = v7;
          *((_QWORD *)v6 + 1) = *(_QWORD *)&Name.n8_name[4];
          *((_QWORD *)v6 + 2) = *(_QWORD *)&Name.n8_name[12];
          *((_QWORD *)v6 + 3) = *(_QWORD *)&Name.n8_name[20];
          *((_DWORD *)v6 + 8) = *(_DWORD *)&Name.n8_name[28];
          *((_DWORD *)v6 + 9) = nAreaType;
          fread((char *)v6 + 40, 4u, 1u, v3);
          fread((char *)v6 + 44, 4u, 1u, v3);
          fread((char *)v6 + 48, 4u, 1u, v3);
        }
        ++v14;
        ++i;
      }
      while ( i < *(_DWORD *)v11 );
    }
    fclose(v3);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// 73B41E: using guessed type int __thiscall(AreaInfoData *this, int szFileName);
// 9D9318: using guessed type int (__stdcall *AreaInfoData__AE_Square___vftable_)(float fSin, float fCos);
// 9D9320: using guessed type int (__stdcall *AreaInfoData__AE_Circle___vftable_)(float fDistY, float fY);
// A85C00: using guessed type int __security_cookie;

//----- (0073B470) --------------------------------------------------------
void *__thiscall AreaInfoData::_vector_deleting_destructor_(AreaInfoData *this, unsigned int a2)
{
  void *v2; // esi@1

  v2 = this;
  AreaInfoData::_AreaInfoData(this);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}

//----- (0073B4A0) --------------------------------------------------------
bool __thiscall DiceTaiSai::ConvertDice(DiceTaiSai *this, char *pSource, int *pTarget)
{
  signed int v4; // edx@4
  char v5; // cl@5
  int v6; // ecx@8
  int v7; // edx@8
  int v8; // ecx@8

  if ( pSource && pTarget )
  {
    v4 = 0;
    while ( 1 )
    {
      v5 = pSource[v4];
      if ( (unsigned __int8)v5 < 1u )
        break;
      if ( (unsigned __int8)v5 > 6u )
        break;
      ++v4;
      if ( v4 >= 3 )
      {
        *pTarget = 0;
        v6 = 6 * *pTarget;
        *pTarget = v6;
        v7 = 6 * (v6 + (unsigned __int8)*pSource) - 6;
        *pTarget = v7;
        v8 = 6 * (v7 + (unsigned __int8)pSource[1]) - 6;
        *pTarget = v8;
        *pTarget = (unsigned __int8)pSource[2] + v8 - 1;
        return 1;
      }
    }
  }
  return 0;
}

//----- (0073B510) --------------------------------------------------------
bool __thiscall DiceTaiSai::ConvertDice(DiceTaiSai *this, int nSource, char *pTarget)
{
  bool result; // al@2

  if ( __PAIR__((unsigned int)pTarget, nSource) > 0xD7 )
  {
    result = 0;
  }
  else
  {
    pTarget[2] = nSource % 6 + 1;
    pTarget[1] = nSource / 6 % 6 + 1;
    *pTarget = nSource / 6 / 6 % 6 + 1;
    result = 1;
  }
  return result;
}

//----- (0073B590) --------------------------------------------------------
bool __thiscall DiceTaiSai::get_PrizeWinningBet(DiceTaiSai *this, int nDiceVariety, DiceTaiSaiPrizeWinning *pPrizeWinningBet)
{
  signed int v4; // eax@4
  char *v5; // eax@6
  char v6; // bl@6
  int v7; // ecx@16
  int v8; // edi@17
  int v9; // ecx@18
  int v10; // edi@19
  int v11; // ecx@21
  int v12; // ecx@22
  int v13; // edi@24
  signed int v14; // esi@24
  signed int v15; // ecx@25
  int v16; // edi@33
  signed int v17; // esi@33
  signed int v18; // ecx@34
  int v19; // edi@42
  signed int v20; // esi@42
  signed int v21; // ecx@43
  int v22; // edi@51
  signed int v23; // esi@51
  signed int v24; // ecx@52
  int v25; // edi@60
  signed int v26; // esi@60
  signed int v27; // ecx@61
  int v28; // edi@69
  signed int v29; // esi@69
  signed int v30; // ecx@70
  int v31; // edi@78
  signed int v32; // esi@78
  signed int v33; // ecx@79
  int v34; // edi@87
  signed int v35; // esi@87
  signed int v36; // ecx@88
  int v37; // edi@96
  signed int v38; // esi@96
  signed int v39; // ecx@97
  int v40; // edi@105
  signed int v41; // esi@105
  signed int v42; // ecx@106
  int v43; // edi@114
  signed int v44; // esi@114
  signed int v45; // ecx@115
  int v46; // edi@123
  signed int v47; // esi@123
  signed int v48; // ecx@124
  int v49; // edi@132
  signed int v50; // esi@132
  signed int v51; // ecx@133
  int v52; // edi@141
  signed int v53; // esi@141
  signed int v54; // ecx@142
  int v55; // edi@150
  signed int v56; // esi@150
  signed int v57; // ecx@151
  char v58; // bl@157
  signed int v59; // edx@159
  char *v60; // ecx@166
  signed int v61; // edx@167
  char *v62; // ecx@174
  signed int v63; // edx@175
  char *v64; // ecx@182
  signed int v65; // edx@183
  char *v66; // ecx@190
  signed int v67; // edx@191
  char *v68; // ecx@198
  signed int v69; // edx@199
  char *v70; // ecx@206
  int v71; // [sp+0h] [bp-8h]@24
  int v72; // [sp+4h] [bp-4h]@24
  char nPrizeWinningBetCnt_3; // [sp+13h] [bp+Bh]@6

  if ( (unsigned int)nDiceVariety > 0xD7 )
    return 0;
  if ( !pPrizeWinningBet )
    return 0;
  v4 = 0;
  do
  {
    pPrizeWinningBet->nPrizeWinningBetCnt = 0;
    pPrizeWinningBet->PrizeWinningBetInfo[v4].nSingle = 0;
    ++v4;
  }
  while ( v4 < 12 );
  v5 = (char *)this + 22 * nDiceVariety;
  v6 = 0;
  nPrizeWinningBetCnt_3 = 0;
  if ( v5[3] == 1 )
  {
    pPrizeWinningBet->PrizeWinningBetInfo[0].nBetting = 0;
  }
  else
  {
    if ( v5[3] != 2 )
      goto LABEL_11;
    pPrizeWinningBet->PrizeWinningBetInfo[0].nBetting = 1;
  }
  v6 = 1;
  nPrizeWinningBetCnt_3 = 1;
LABEL_11:
  if ( v5[4] == 1 )
  {
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)v6].nBetting = 2;
  }
  else
  {
    if ( v5[4] != 2 )
      goto LABEL_16;
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)v6].nBetting = 3;
  }
  ++v6;
  nPrizeWinningBetCnt_3 = v6;
LABEL_16:
  v7 = v5[5];
  if ( v7 > 0 )
  {
    v8 = (unsigned __int8)v6++;
    pPrizeWinningBet->PrizeWinningBetInfo[v8].nBetting = v7 + 3;
    nPrizeWinningBetCnt_3 = v6;
  }
  v9 = v5[6];
  if ( v9 > 0 )
  {
    v10 = (unsigned __int8)v6++;
    pPrizeWinningBet->PrizeWinningBetInfo[v10].nBetting = v9 + 9;
    nPrizeWinningBetCnt_3 = v6;
  }
  if ( 2 * (v5[6] > 0) - 1 > 0 )
  {
    v11 = (unsigned __int8)v6++;
    pPrizeWinningBet->PrizeWinningBetInfo[v11].nBetting = 16;
    nPrizeWinningBetCnt_3 = v6;
  }
  v12 = v5[7];
  if ( v12 > 0 )
  {
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)v6].nBetting = v12 + 13;
    nPrizeWinningBetCnt_3 = v6 + 1;
  }
  v13 = 0;
  v71 = 1;
  v72 = 2;
  v14 = 0;
  do
  {
    v15 = 0;
    while ( v5[v15] != *(&v71 + v14) )
    {
      ++v15;
      if ( v15 >= 3 )
        goto LABEL_30;
    }
    ++v13;
LABEL_30:
    ++v14;
  }
  while ( v14 < 2 );
  if ( v13 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 31;
  v16 = 0;
  v71 = 1;
  v72 = 3;
  v17 = 0;
  do
  {
    v18 = 0;
    while ( v5[v18] != *(&v71 + v17) )
    {
      ++v18;
      if ( v18 >= 3 )
        goto LABEL_39;
    }
    ++v16;
LABEL_39:
    ++v17;
  }
  while ( v17 < 2 );
  if ( v16 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 32;
  v19 = 0;
  v71 = 1;
  v72 = 4;
  v20 = 0;
  do
  {
    v21 = 0;
    while ( v5[v21] != *(&v71 + v20) )
    {
      ++v21;
      if ( v21 >= 3 )
        goto LABEL_48;
    }
    ++v19;
LABEL_48:
    ++v20;
  }
  while ( v20 < 2 );
  if ( v19 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 33;
  v22 = 0;
  v71 = 1;
  v72 = 5;
  v23 = 0;
  do
  {
    v24 = 0;
    while ( v5[v24] != *(&v71 + v23) )
    {
      ++v24;
      if ( v24 >= 3 )
        goto LABEL_57;
    }
    ++v22;
LABEL_57:
    ++v23;
  }
  while ( v23 < 2 );
  if ( v22 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 34;
  v25 = 0;
  v71 = 1;
  v72 = 6;
  v26 = 0;
  do
  {
    v27 = 0;
    while ( v5[v27] != *(&v71 + v26) )
    {
      ++v27;
      if ( v27 >= 3 )
        goto LABEL_66;
    }
    ++v25;
LABEL_66:
    ++v26;
  }
  while ( v26 < 2 );
  if ( v25 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 35;
  v28 = 0;
  v71 = 2;
  v72 = 3;
  v29 = 0;
  do
  {
    v30 = 0;
    while ( v5[v30] != *(&v71 + v29) )
    {
      ++v30;
      if ( v30 >= 3 )
        goto LABEL_75;
    }
    ++v28;
LABEL_75:
    ++v29;
  }
  while ( v29 < 2 );
  if ( v28 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 36;
  v31 = 0;
  v71 = 2;
  v72 = 4;
  v32 = 0;
  do
  {
    v33 = 0;
    while ( v5[v33] != *(&v71 + v32) )
    {
      ++v33;
      if ( v33 >= 3 )
        goto LABEL_84;
    }
    ++v31;
LABEL_84:
    ++v32;
  }
  while ( v32 < 2 );
  if ( v31 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 37;
  v34 = 0;
  v71 = 2;
  v72 = 5;
  v35 = 0;
  do
  {
    v36 = 0;
    while ( v5[v36] != *(&v71 + v35) )
    {
      ++v36;
      if ( v36 >= 3 )
        goto LABEL_93;
    }
    ++v34;
LABEL_93:
    ++v35;
  }
  while ( v35 < 2 );
  if ( v34 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 38;
  v37 = 0;
  v71 = 2;
  v72 = 6;
  v38 = 0;
  do
  {
    v39 = 0;
    while ( v5[v39] != *(&v71 + v38) )
    {
      ++v39;
      if ( v39 >= 3 )
        goto LABEL_102;
    }
    ++v37;
LABEL_102:
    ++v38;
  }
  while ( v38 < 2 );
  if ( v37 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 39;
  v40 = 0;
  v71 = 3;
  v72 = 4;
  v41 = 0;
  do
  {
    v42 = 0;
    while ( v5[v42] != *(&v71 + v41) )
    {
      ++v42;
      if ( v42 >= 3 )
        goto LABEL_111;
    }
    ++v40;
LABEL_111:
    ++v41;
  }
  while ( v41 < 2 );
  if ( v40 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 40;
  v43 = 0;
  v71 = 3;
  v72 = 5;
  v44 = 0;
  do
  {
    v45 = 0;
    while ( v5[v45] != *(&v71 + v44) )
    {
      ++v45;
      if ( v45 >= 3 )
        goto LABEL_120;
    }
    ++v43;
LABEL_120:
    ++v44;
  }
  while ( v44 < 2 );
  if ( v43 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 41;
  v46 = 0;
  v71 = 3;
  v72 = 6;
  v47 = 0;
  do
  {
    v48 = 0;
    while ( v5[v48] != *(&v71 + v47) )
    {
      ++v48;
      if ( v48 >= 3 )
        goto LABEL_129;
    }
    ++v46;
LABEL_129:
    ++v47;
  }
  while ( v47 < 2 );
  if ( v46 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 42;
  v49 = 0;
  v71 = 4;
  v72 = 5;
  v50 = 0;
  do
  {
    v51 = 0;
    while ( v5[v51] != *(&v71 + v50) )
    {
      ++v51;
      if ( v51 >= 3 )
        goto LABEL_138;
    }
    ++v49;
LABEL_138:
    ++v50;
  }
  while ( v50 < 2 );
  if ( v49 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 43;
  v52 = 0;
  v71 = 4;
  v72 = 6;
  v53 = 0;
  do
  {
    v54 = 0;
    while ( v5[v54] != *(&v71 + v53) )
    {
      ++v54;
      if ( v54 >= 3 )
        goto LABEL_147;
    }
    ++v52;
LABEL_147:
    ++v53;
  }
  while ( v53 < 2 );
  if ( v52 == 2 )
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3++].nBetting = 44;
  v55 = 0;
  v71 = 5;
  v72 = 6;
  v56 = 0;
  do
  {
    v57 = 0;
    while ( v5[v57] != *(&v71 + v56) )
    {
      ++v57;
      if ( v57 >= 3 )
        goto LABEL_156;
    }
    ++v55;
LABEL_156:
    ++v56;
  }
  while ( v56 < 2 );
  v58 = nPrizeWinningBetCnt_3;
  if ( v55 == 2 )
  {
    pPrizeWinningBet->PrizeWinningBetInfo[(unsigned __int8)nPrizeWinningBetCnt_3].nBetting = 45;
    v58 = nPrizeWinningBetCnt_3 + 1;
  }
  v59 = 0;
  if ( *v5 == 1 )
    v59 = 1;
  if ( v5[1] == 1 )
    ++v59;
  if ( v5[2] == 1 )
    ++v59;
  if ( v59 > 0 )
  {
    v60 = (char *)pPrizeWinningBet + 8 * (unsigned __int8)v58;
    v60[4] = v59;
    *((_DWORD *)v60 + 2) = 46;
    ++v58;
  }
  v61 = 0;
  if ( *v5 == 2 )
    v61 = 1;
  if ( v5[1] == 2 )
    ++v61;
  if ( v5[2] == 2 )
    ++v61;
  if ( v61 > 0 )
  {
    v62 = (char *)pPrizeWinningBet + 8 * (unsigned __int8)v58;
    v62[4] = v61;
    *((_DWORD *)v62 + 2) = 47;
    ++v58;
  }
  v63 = 0;
  if ( *v5 == 3 )
    v63 = 1;
  if ( v5[1] == 3 )
    ++v63;
  if ( v5[2] == 3 )
    ++v63;
  if ( v63 > 0 )
  {
    v64 = (char *)pPrizeWinningBet + 8 * (unsigned __int8)v58;
    v64[4] = v63;
    *((_DWORD *)v64 + 2) = 48;
    ++v58;
  }
  v65 = 0;
  if ( *v5 == 4 )
    v65 = 1;
  if ( v5[1] == 4 )
    ++v65;
  if ( v5[2] == 4 )
    ++v65;
  if ( v65 > 0 )
  {
    v66 = (char *)pPrizeWinningBet + 8 * (unsigned __int8)v58;
    v66[4] = v65;
    *((_DWORD *)v66 + 2) = 49;
    ++v58;
  }
  v67 = 0;
  if ( *v5 == 5 )
    v67 = 1;
  if ( v5[1] == 5 )
    ++v67;
  if ( v5[2] == 5 )
    ++v67;
  if ( v67 > 0 )
  {
    v68 = (char *)pPrizeWinningBet + 8 * (unsigned __int8)v58;
    v68[4] = v67;
    *((_DWORD *)v68 + 2) = 50;
    ++v58;
  }
  v69 = 0;
  if ( *v5 == 6 )
    v69 = 1;
  if ( v5[1] == 6 )
    ++v69;
  if ( v5[2] == 6 )
    ++v69;
  if ( v69 > 0 )
  {
    v70 = (char *)pPrizeWinningBet + 8 * (unsigned __int8)v58;
    v70[4] = v69;
    *((_DWORD *)v70 + 2) = 51;
    ++v58;
  }
  pPrizeWinningBet->nPrizeWinningBetCnt = v58;
  return 1;
}

//----- (0073BC70) --------------------------------------------------------
void __thiscall DiceTaiSaiDividind::DiceTaiSaiDividind(DiceTaiSaiDividind *this)
{
  DiceTaiSaiDividind *v1; // eax@1
  signed int v2; // ecx@1

  v1 = this;
  v2 = 0;
  do
  {
    v1->DividendRate[v2] = 0;
    v1->bIsInitDividendRate[v2++] = 0;
  }
  while ( v2 < 15 );
  v1->ConertDividendRateTable[4] = 2;
  v1->ConertDividendRateTable[5] = 2;
  v1->ConertDividendRateTable[6] = 2;
  v1->ConertDividendRateTable[7] = 2;
  v1->ConertDividendRateTable[8] = 2;
  v1->ConertDividendRateTable[9] = 2;
  v1->ConertDividendRateTable[10] = 3;
  v1->ConertDividendRateTable[11] = 3;
  v1->ConertDividendRateTable[12] = 3;
  v1->ConertDividendRateTable[13] = 3;
  v1->ConertDividendRateTable[14] = 3;
  v1->ConertDividendRateTable[15] = 3;
  v1->ConertDividendRateTable[22] = 10;
  v1->ConertDividendRateTable[23] = 10;
  v1->ConertDividendRateTable[24] = 10;
  v1->ConertDividendRateTable[25] = 10;
  v1->ConertDividendRateTable[0] = 0;
  v1->ConertDividendRateTable[1] = 0;
  v1->ConertDividendRateTable[31] = 11;
  v1->ConertDividendRateTable[32] = 11;
  v1->ConertDividendRateTable[33] = 11;
  v1->ConertDividendRateTable[34] = 11;
  v1->ConertDividendRateTable[35] = 11;
  v1->ConertDividendRateTable[36] = 11;
  v1->ConertDividendRateTable[37] = 11;
  v1->ConertDividendRateTable[38] = 11;
  v1->ConertDividendRateTable[39] = 11;
  v1->ConertDividendRateTable[40] = 11;
  v1->ConertDividendRateTable[41] = 11;
  v1->ConertDividendRateTable[42] = 11;
  v1->ConertDividendRateTable[43] = 11;
  v1->ConertDividendRateTable[44] = 11;
  v1->ConertDividendRateTable[45] = 11;
  v1->ConertDividendRateTable[19] = 7;
  v1->ConertDividendRateTable[28] = 7;
  v1->ConertDividendRateTable[2] = 1;
  v1->ConertDividendRateTable[3] = 1;
  v1->ConertDividendRateTable[16] = 4;
  v1->ConertDividendRateTable[17] = 5;
  v1->ConertDividendRateTable[18] = 6;
  v1->ConertDividendRateTable[20] = 8;
  v1->ConertDividendRateTable[21] = 9;
  v1->ConertDividendRateTable[26] = 9;
  v1->ConertDividendRateTable[27] = 8;
  v1->ConertDividendRateTable[29] = 6;
  v1->ConertDividendRateTable[30] = 5;
  v1->ConertDividendRateTable[46] = 14;
  v1->ConertDividendRateTable[47] = 14;
  v1->ConertDividendRateTable[48] = 14;
  v1->ConertDividendRateTable[49] = 14;
  v1->ConertDividendRateTable[50] = 14;
  v1->ConertDividendRateTable[51] = 14;
}

//----- (0073BDE0) --------------------------------------------------------
bool __thiscall DiceTaiSaiDividind::isInitFinishe(DiceTaiSaiDividind *this)
{
  signed int v1; // eax@1

  v1 = 0;
  while ( this->bIsInitDividendRate[v1] )
  {
    ++v1;
    if ( v1 >= 15 )
      return 1;
  }
  return 0;
}

//----- (0073BE00) --------------------------------------------------------
bool __thiscall DiceTaiSaiDividind::Init(DiceTaiSaiDividind *this, DividendRate nDividind, unsigned __int16 nDividindRate)
{
  signed int v4; // eax@3

  if ( (signed int)nDividind < 15 )
  {
    this->DividendRate[nDividind] = nDividindRate;
    this->bIsInitDividendRate[nDividind] = 1;
    v4 = 0;
    while ( this->bIsInitDividendRate[v4] )
    {
      ++v4;
      if ( v4 >= 15 )
        return 1;
    }
  }
  return 0;
}

//----- (0073BE40) --------------------------------------------------------
unsigned int __thiscall DiceTaiSaiDividind::get_MaxBettingMoney(DiceTaiSaiDividind *this, DICE_TAISAI_BETTING nBet, unsigned int nMaxBetMoney)
{
  unsigned int result; // eax@2
  DividendRate v4; // eax@3

  if ( (signed int)nBet < 52
    && (v4 = this->ConertDividendRateTable[nBet], (signed int)v4 < 15)
    && this->bIsInitDividendRate[v4] )
    result = 100 * nMaxBetMoney / this->DividendRate[v4];
  else
    result = 0;
  return result;
}

//----- (0073BE80) --------------------------------------------------------
unsigned int __thiscall DiceTaiSaiDividind::get_DividindMoney(DiceTaiSaiDividind *this, DICE_TAISAI_BETTING nBet, int nSingleNum, unsigned int nBetMoney)
{
  DividendRate v5; // eax@3

  if ( (signed int)nBet >= 52 )
    return 0;
  v5 = this->ConertDividendRateTable[nBet];
  if ( (unsigned int)(nBet - 46) <= 5 )
  {
    if ( nSingleNum == 1 )
    {
      v5 = 12;
      goto LABEL_11;
    }
    if ( nSingleNum == 2 )
    {
      v5 = 13;
      goto LABEL_11;
    }
    if ( nSingleNum == 3 )
    {
      v5 = 14;
      goto LABEL_11;
    }
    return 0;
  }
  if ( (signed int)v5 >= 15 )
    return 0;
LABEL_11:
  if ( !this->bIsInitDividendRate[v5] )
    return 0;
  return (signed __int64)((double)this->DividendRate[v5] / 100.0 * (double)nBetMoney);
}

//----- (0073BF20) --------------------------------------------------------
void __thiscall DiceTaiSai::Init(DiceTaiSai *this, int NoSumTriple)
{
  int v2; // edi@1
  char *v3; // esi@1
  int v4; // eax@4
  int v5; // esi@4
  unsigned __int8 v6; // cl@5
  signed int v7; // edi@5
  unsigned __int8 v8; // dl@7
  unsigned __int8 v9; // bl@7
  char v10; // cl@16
  char v11; // dl@16
  char v12; // cl@19
  char v13; // cl@19
  unsigned __int8 v14; // dl@21
  char v15; // cl@22
  char v16; // cl@22
  unsigned __int8 v17; // cl@23
  unsigned __int8 v18; // dl@23
  char v19; // cl@24
  char v20; // cl@24
  unsigned __int8 v21; // cl@25
  unsigned __int8 v22; // dl@25
  char v23; // cl@26
  char v24; // cl@26
  char v25; // cl@27
  char v26; // dl@30
  char v27; // cl@30
  char v28; // bl@32
  char v29; // cl@37
  char v30; // cl@42
  bool v31; // zf@42
  bool v32; // sf@42
  int v33; // edx@42
  signed int v34; // [sp+Ch] [bp-Ch]@4
  DiceTaiSai *nSameNum; // [sp+10h] [bp-8h]@1
  int nSameNuma; // [sp+10h] [bp-8h]@5

  v2 = 0;
  nSameNum = this;
  v3 = &this->m_Dice[0].isBig;
  while ( 1 )
  {
    DiceTaiSai::ConvertDice(this, v2, v3 - 4);
    *(v3 - 1) = -1;
    *v3 = -1;
    v3[1] = -1;
    v3[2] = -1;
    v3[3] = -1;
    *((_DWORD *)v3 + 1) = 3;
    *((_DWORD *)v3 + 2) = 50331648;
    *((_DWORD *)v3 + 3) = 0;
    *((_WORD *)v3 + 8) = 0;
    ++v2;
    v3 += 22;
    if ( v2 >= 216 )
      break;
    this = nSameNum;
  }
  v4 = (int)&nSameNum->m_Dice[0].nDominoCnt;
  v5 = (int)nSameNum->m_Dice[0].nDominoNum;
  v34 = 216;
  do
  {
    v6 = *(_BYTE *)(v4 - 8);
    v7 = 0;
    nSameNuma = 0;
    if ( v6 == *(_BYTE *)(v4 - 7) )
    {
      nSameNuma = v6;
      v7 = 1;
    }
    v8 = *(_BYTE *)(v4 - 7);
    v9 = *(_BYTE *)(v4 - 6);
    if ( v8 == v9 )
    {
      nSameNuma = v8;
      ++v7;
    }
    if ( v9 == v6 )
    {
      nSameNuma = v9;
      ++v7;
    }
    if ( v7 == 1 )
    {
      *(_BYTE *)(v4 - 3) = nSameNuma;
      *(_BYTE *)(v4 + 7) = 2;
      *(_BYTE *)v4 = 1;
LABEL_16:
      v10 = *(_BYTE *)(v4 - 8);
      v11 = *(_BYTE *)(v4 - 7);
      *(_BYTE *)(v4 + 1) = v10;
      if ( v10 == v11 )
        v11 = *(_BYTE *)(v4 - 6);
      goto LABEL_20;
    }
    if ( v7 == 3 )
    {
      *(_BYTE *)(v4 - 2) = nSameNuma;
      *(_BYTE *)(v4 + 7) = 1;
      *(_BYTE *)v4 = 0;
      goto LABEL_21;
    }
    if ( *(_BYTE *)v4 == 1 )
      goto LABEL_16;
    if ( *(_BYTE *)v4 != 3 )
      goto LABEL_21;
    v12 = *(_BYTE *)(v4 - 8);
    v11 = *(_BYTE *)(v4 - 7);
    *(_BYTE *)(v4 + 1) = v12;
    *(_BYTE *)(v4 + 3) = v12;
    v13 = *(_BYTE *)(v4 - 6);
    *(_BYTE *)(v4 + 4) = v13;
    *(_BYTE *)(v4 + 5) = v11;
    *(_BYTE *)(v4 + 6) = v13;
LABEL_20:
    *(_BYTE *)(v4 + 2) = v11;
LABEL_21:
    v14 = *(_BYTE *)(v5 + 1);
    if ( *(_BYTE *)v5 > v14 )
    {
      v15 = v14 ^ *(_BYTE *)v5;
      *(_BYTE *)v5 = v15;
      v16 = v14 ^ v15;
      *(_BYTE *)v5 ^= v16;
      *(_BYTE *)(v5 + 1) = v16;
    }
    v17 = *(_BYTE *)(v5 + 2);
    v18 = *(_BYTE *)(v5 + 3);
    if ( v17 > v18 )
    {
      v19 = v18 ^ v17;
      *(_BYTE *)(v5 + 2) = v19;
      v20 = v18 ^ v19;
      *(_BYTE *)(v5 + 2) ^= v20;
      *(_BYTE *)(v5 + 3) = v20;
    }
    v21 = *(_BYTE *)(v5 + 4);
    v22 = *(_BYTE *)(v5 + 5);
    if ( v21 > v22 )
    {
      v23 = v22 ^ v21;
      *(_BYTE *)(v5 + 4) = v23;
      v24 = v22 ^ v23;
      *(_BYTE *)(v5 + 4) ^= v24;
      *(_BYTE *)(v5 + 5) = v24;
    }
    v25 = *(_BYTE *)(v4 + 7);
    if ( v25 == 1 )
    {
      *(_BYTE *)(v4 + 8) = *(_BYTE *)(v4 - 8);
      *(_BYTE *)(v4 + 9) = 3;
      goto LABEL_40;
    }
    if ( v25 == 2 )
    {
      v26 = *(_BYTE *)(v4 - 7);
      v27 = *(_BYTE *)(v4 - 8);
      if ( v27 == v26 )
      {
        v26 = *(_BYTE *)(v4 - 6);
        *(_BYTE *)(v4 + 8) = v27;
        *(_BYTE *)(v4 + 9) = 2;
      }
      else
      {
        v28 = *(_BYTE *)(v4 - 6);
        if ( v27 != v28 )
        {
          if ( v26 != v28 )
            goto LABEL_40;
          *(_BYTE *)(v4 + 8) = v26;
          *(_BYTE *)(v4 + 9) = 2;
          *(_BYTE *)(v4 + 10) = v27;
          goto LABEL_39;
        }
        *(_BYTE *)(v4 + 8) = v27;
        *(_BYTE *)(v4 + 9) = 2;
      }
    }
    else
    {
      if ( v25 != 3 )
        goto LABEL_40;
      v26 = *(_BYTE *)(v4 - 7);
      *(_BYTE *)(v4 + 8) = *(_BYTE *)(v4 - 8);
      v29 = *(_BYTE *)(v4 - 6);
      *(_BYTE *)(v4 + 9) = 1;
      *(_BYTE *)(v4 + 12) = v29;
      *(_BYTE *)(v4 + 13) = 1;
    }
    *(_BYTE *)(v4 + 10) = v26;
LABEL_39:
    *(_BYTE *)(v4 + 11) = 1;
LABEL_40:
    if ( !NoSumTriple )
    {
      if ( *(_BYTE *)(v4 - 2) > 0 )
        goto LABEL_45;
LABEL_42:
      v30 = *(_BYTE *)(v4 - 6) + *(_BYTE *)(v4 - 7) + *(_BYTE *)(v4 - 8);
      v33 = (char)(*(_BYTE *)(v4 - 6) + *(_BYTE *)(v4 - 7) + *(_BYTE *)(v4 - 8)) & 0x80000001;
      v31 = ((char)(*(_BYTE *)(v4 - 6) + *(_BYTE *)(v4 - 7) + *(_BYTE *)(v4 - 8)) & 0x80000001) == 0;
      v32 = ((char)(*(_BYTE *)(v4 - 6) + *(_BYTE *)(v4 - 7) + *(_BYTE *)(v4 - 8)) & 0x80000001) < 0;
      *(_BYTE *)(v4 - 1) = v30;
      if ( v32 )
        v31 = ((v33 - 1) | 0xFFFFFFFE) == -1;
      *(_BYTE *)(v4 - 5) = !v31 + 1;
      *(_BYTE *)(v4 - 4) = ((unsigned __int8)(v30 - 11) > 6u) + 1;
      goto LABEL_45;
    }
    if ( *(_BYTE *)(v4 - 2) <= 0 )
      goto LABEL_42;
    if ( nSameNuma != 1 && nSameNuma != 6 )
      *(_BYTE *)(v4 - 1) = *(_BYTE *)(v4 - 6) + *(_BYTE *)(v4 - 7) + *(_BYTE *)(v4 - 8);
LABEL_45:
    v5 += 22;
    v4 += 22;
    --v34;
  }
  while ( v34 );
}

//----- (0073C170) --------------------------------------------------------
void __thiscall CGuildList::CGuildList(CGuildList *this)
{
  this->vfptr = (CGuildListVtbl *)CGuildList::_vftable_;
  this->m_pGuildList = 0;
}
// 9D9328: using guessed type int (__stdcall *CGuildList___vftable_[2])(int);

//----- (0073C180) --------------------------------------------------------
int __thiscall CGuildList::Recv_NC_GUILD_LIST_ACK(CGuildList *this, PROTO_NC_GUILD_LIST_ACK *pAck)
{
  CGuildList *v2; // edi@1
  int result; // eax@2
  PROTO_NC_GUILD_LIST_ACK *v4; // esi@3
  unsigned int v5; // esi@6

  v2 = this;
  if ( pAck->Error == 3137 )
  {
    v4 = this->m_pGuildList;
    if ( v4 && this->m_NumOfGuildListBF < pAck->nGuildListCnt )
    {
      _eh_vector_destructor_iterator_(
        &v4[1],
        0x2Eu,
        0,
        (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
      operator delete(v4);
      v2->m_pGuildList = 0;
    }
    v5 = 46 * pAck->nGuildListCnt + 7;
    if ( !v2->m_pGuildList )
    {
      v2->m_pGuildList = (PROTO_NC_GUILD_LIST_ACK *)operator new__(46 * pAck->nGuildListCnt + 7);
      v2->m_NumOfGuildListBF = pAck->nGuildListCnt;
    }
    memcpy((char *)v2->m_pGuildList, (char *)pAck, v5);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0073C210) --------------------------------------------------------
void __thiscall CGuildList::_CGuildList(CGuildList *this)
{
  CGuildList *v1; // esi@1
  PROTO_NC_GUILD_LIST_ACK *v2; // edi@1

  v1 = this;
  v2 = this->m_pGuildList;
  this->vfptr = (CGuildListVtbl *)CGuildList::_vftable_;
  if ( v2 )
  {
    _eh_vector_destructor_iterator_(
      &v2[1],
      0x2Eu,
      0,
      (void (__thiscall *)(void *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
    operator delete(v2);
    v1->m_pGuildList = 0;
  }
}
// 9D9328: using guessed type int (__stdcall *CGuildList___vftable_[2])(int);

//----- (0073C250) --------------------------------------------------------
char *__cdecl fs(char *format)
{
  char *result; // eax@2
  char v2; // si@3
  char *v3; // esi@3
  char ap; // [sp+Ch] [bp+Ch]@0

  if ( format )
  {
    v2 = index++;
    v3 = tempStr[v2 & 7];
    vsprintf(v3, format, &ap);
    result = v3;
  }
  else
  {
    result = tempStr[index++ & 1];
  }
  return result;
}

//----- (0073C2B0) --------------------------------------------------------
bool __thiscall Encrypt::Stream::Allocate(Encrypt::Stream *this, unsigned int dwSize)
{
  Encrypt::Stream *v2; // esi@1
  void *v3; // eax@1

  v2 = this;
  operator delete(this->m_pcData);
  v3 = operator new(dwSize);
  v2->m_dwSize = dwSize;
  v2->m_pcData = (char *)v3;
  return 1;
}

//----- (0073C2E0) --------------------------------------------------------
void __thiscall Encrypt::Stream::Stream(Encrypt::Stream *this)
{
  this->vfptr = (Encrypt::StreamVtbl *)&Encrypt::Stream::_vftable_;
  this->m_pcData = 0;
  this->m_dwSize = 0;
}
// 9D9334: using guessed type int (__thiscall *Encrypt__Stream___vftable_)(void *p, char);

//----- (0073C300) --------------------------------------------------------
void __thiscall Encrypt::Stream::_Stream(Encrypt::Stream *this)
{
  void *v1; // ST00_4@1

  v1 = this->m_pcData;
  this->vfptr = (Encrypt::StreamVtbl *)&Encrypt::Stream::_vftable_;
  operator delete(v1);
}
// 9D9334: using guessed type int (__thiscall *Encrypt__Stream___vftable_)(void *p, char);

//----- (0073C320) --------------------------------------------------------
bool __thiscall Encrypt::FileStream::Load(Encrypt::FileStream *this, char *acFn)
{
  Encrypt::FileStream *v2; // ebx@1
  _iobuf *v3; // eax@1
  _iobuf *v4; // esi@1
  bool result; // al@2
  int v6; // edi@3
  void *v7; // eax@3
  unsigned int v8; // ebx@3

  v2 = this;
  v3 = fopen(acFn, "rb");
  v4 = v3;
  if ( v3 )
  {
    fseek(v3, 0, 2);
    v6 = ftell(v4);
    fseek(v4, 0, 0);
    operator delete(v2->baseclass_0.m_pcData);
    v7 = operator new(v6);
    v2->baseclass_0.m_pcData = (char *)v7;
    v2->baseclass_0.m_dwSize = v6;
    v8 = fread(v7, 1u, v6, v4);
    fclose(v4);
    result = v6 == v8;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0073C3A0) --------------------------------------------------------
bool __thiscall Encrypt::FileStream::Save(Encrypt::FileStream *this, char *acFn)
{
  Encrypt::FileStream *v2; // esi@1
  _iobuf *v3; // eax@3
  _iobuf *v4; // edi@3
  bool result; // al@4
  unsigned int v6; // ebx@5

  v2 = this;
  if ( this->baseclass_0.m_dwSize && this->baseclass_0.m_pcData )
  {
    v3 = fopen(acFn, "wb");
    v4 = v3;
    if ( v3 )
    {
      v6 = fwrite(v2->baseclass_0.m_pcData, 1u, v2->baseclass_0.m_dwSize, v3);
      fclose(v4);
      result = v2->baseclass_0.m_dwSize == v6;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0073C410) --------------------------------------------------------
void __cdecl Encrypt::EncryptXor(char *pcDest, unsigned int dwDestSize, char *pcSrc, unsigned int dwSrcSize, char *pcKey)
{
  char *v5; // eax@1
  char *v6; // edx@1
  char v7; // cl@2
  unsigned int v8; // ecx@4
  int v9; // edx@5
  char *v10; // esi@5
  unsigned int iKeyLen; // [sp+0h] [bp-4h]@3

  v5 = pcKey;
  v6 = pcKey + 1;
  do
    v7 = *v5++;
  while ( v7 );
  iKeyLen = v5 - v6;
  if ( v5 != v6 )
  {
    v8 = 0;
    if ( dwSrcSize )
    {
      do
      {
        v9 = v8 % iKeyLen;
        v10 = &pcDest[v8++];
        *v10 = v10[pcSrc - pcDest] ^ pcKey[v9];
      }
      while ( v8 < dwSrcSize );
    }
  }
}

//----- (0073C470) --------------------------------------------------------
bool __thiscall Encrypt::EncryptMethodXor::Encrypt(Encrypt::EncryptMethodXor *this, Encrypt::Stream *rkEncStream, Encrypt::Stream *rkOrgStream)
{
  unsigned int v3; // edi@1
  char v4; // bl@1
  unsigned int v5; // edi@4
  void *v6; // eax@4
  char *v7; // ecx@4
  unsigned int v8; // esi@4
  int v9; // eax@4
  int v10; // edi@4
  char v11; // dl@4
  char v12; // dl@7
  bool result; // al@12
  char *pcKey; // [sp+8h] [bp-8h]@3
  char v15; // [sp+Fh] [bp-1h]@4

  v3 = rkOrgStream->m_dwSize;
  v4 = 0;
  if ( v3 && rkOrgStream->m_pcData && (pcKey = this->m_acKey, this->m_acKey[0]) )
  {
    v15 = 0;
    v5 = v3 + 1;
    operator delete(rkEncStream->m_pcData);
    v6 = operator new(v5);
    rkEncStream->m_pcData = (char *)v6;
    rkEncStream->m_dwSize = v5;
    Encrypt::EncryptXor((char *)v6, v5, rkOrgStream->m_pcData, rkOrgStream->m_dwSize, pcKey);
    v7 = rkEncStream->m_pcData;
    v8 = rkEncStream->m_dwSize;
    v9 = (int)v7;
    v10 = (int)&v7[v8 - 1];
    v11 = 0;
    if ( (unsigned int)v7 < v10 )
    {
      if ( v10 - (signed int)v7 < 2 )
      {
        v12 = 0;
      }
      else
      {
        do
        {
          v15 += *(_BYTE *)v9;
          v4 += *(_BYTE *)(v9 + 1);
          v9 += 2;
        }
        while ( v9 < (signed int)&v7[v8 - 2] );
        v12 = 0;
      }
      if ( v9 < (unsigned int)v10 )
        v12 = *(_BYTE *)v9;
      v11 = v15 + v4 + v12;
    }
    v7[v8 - 1] = v11;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0073C530) --------------------------------------------------------
bool __thiscall Encrypt::EncryptMethodXor::Decrypt(Encrypt::EncryptMethodXor *this, Encrypt::Stream *rkOrgStream, Encrypt::Stream *rkEncStream)
{
  Encrypt::Stream *v3; // edi@1
  unsigned int v4; // esi@1
  char *v5; // eax@2
  int v6; // esi@4
  char v7; // bl@4
  char v8; // dl@4
  char v9; // cl@4
  char v10; // bl@8
  unsigned int v11; // eax@11
  bool result; // al@12
  char *pcKey; // [sp+8h] [bp-Ch]@3
  char *v14; // [sp+Ch] [bp-8h]@2

  v3 = rkEncStream;
  v4 = rkEncStream->m_dwSize;
  if ( !v4 || (v5 = rkEncStream->m_pcData, (v14 = v5) == 0) || (pcKey = this->m_acKey, !this->m_acKey[0]) )
    goto LABEL_16;
  v6 = (int)&v5[v4 - 1];
  v7 = 0;
  v8 = 0;
  v9 = 0;
  if ( (unsigned int)v5 < v6 )
  {
    if ( v6 - (signed int)v5 >= 2 )
    {
      do
      {
        v8 += *v5;
        v9 += v5[1];
        v5 += 2;
      }
      while ( (signed int)v5 < v6 - 1 );
    }
    if ( (unsigned int)v5 >= v6 )
      v10 = 0;
    else
      v10 = *v5;
    v3 = rkEncStream;
    v7 = v8 + v9 + v10;
  }
  v11 = v3->m_dwSize;
  if ( v7 == v14[v11 - 1] )
  {
    Encrypt::Stream::Allocate(rkOrgStream, v11 - 1);
    Encrypt::EncryptXor(rkOrgStream->m_pcData, rkOrgStream->m_dwSize - 1, v3->m_pcData, v3->m_dwSize - 1, pcKey);
    result = 1;
  }
  else
  {
LABEL_16:
    result = 0;
  }
  return result;
}

//----- (0073C5F0) --------------------------------------------------------
bool __thiscall Encrypt::EncryptStream::SaveEncrypted(Encrypt::EncryptStream *this, char *fn, Encrypt::IEncryptMethod *rkMethod)
{
  bool result; // al@3
  Encrypt::FileStream kEncStream; // [sp+0h] [bp-18h]@1
  int v5; // [sp+14h] [bp-4h]@1

  kEncStream.baseclass_0.m_pcData = 0;
  kEncStream.baseclass_0.m_dwSize = 0;
  kEncStream.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::FileStream::_vftable_;
  v5 = 0;
  if ( (unsigned __int8)((int (__stdcall *)(Encrypt::FileStream *, Encrypt::EncryptStream *))rkMethod->vfptr->Encrypt)(
                          &kEncStream,
                          this)
    && Encrypt::FileStream::Save(&kEncStream, fn) )
  {
    v5 = -1;
    kEncStream.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::Stream::_vftable_;
    operator delete(kEncStream.baseclass_0.m_pcData);
    result = 1;
  }
  else
  {
    v5 = -1;
    kEncStream.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::Stream::_vftable_;
    operator delete(kEncStream.baseclass_0.m_pcData);
    result = 0;
  }
  return result;
}
// 97B60C: using guessed type int (__thiscall *Encrypt__FileStream___vftable_)(void *p, char);
// 9D9334: using guessed type int (__thiscall *Encrypt__Stream___vftable_)(void *p, char);

//----- (0073C6B0) --------------------------------------------------------
bool __thiscall Encrypt::EncryptStream::LoadOriginal(Encrypt::EncryptStream *this, char *fn)
{
  return Encrypt::FileStream::Load(&this->m_kOriginal, fn) != 0;
}

//----- (0073C6D0) --------------------------------------------------------
bool __thiscall Encrypt::EncryptStream::SaveOriginal(Encrypt::EncryptStream *this, char *fn)
{
  return Encrypt::FileStream::Save(&this->m_kOriginal, fn) != 0;
}

//----- (0073C6F0) --------------------------------------------------------
void *__thiscall Encrypt::Stream::_vector_deleting_destructor_(Encrypt::Stream *this, unsigned int a2)
{
  void *v2; // esi@1
  void *v3; // ST00_4@1

  v2 = this;
  v3 = this->m_pcData;
  this->vfptr = (Encrypt::StreamVtbl *)&Encrypt::Stream::_vftable_;
  operator delete(v3);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9D9334: using guessed type int (__thiscall *Encrypt__Stream___vftable_)(void *p, char);

//----- (0073C720) --------------------------------------------------------
void __thiscall Encrypt::EncryptMethodXor::EncryptMethodXor(Encrypt::EncryptMethodXor *this, char *pcKey)
{
  char *v2; // eax@1
  Encrypt::EncryptMethodXor *v3; // esi@1
  char v4; // cl@3

  v2 = pcKey;
  v3 = this;
  this->baseclass_0.vfptr = (Encrypt::IEncryptMethodVtbl *)Encrypt::EncryptMethodXor::_vftable_;
  if ( strlen(pcKey) < 0x1F )
  {
    do
    {
      v4 = *v2;
      v2[v3->m_acKey - pcKey] = *v2;
      ++v2;
    }
    while ( v4 );
  }
  else
  {
    strncpy(v3->m_acKey, pcKey, 0x1Fu);
    v3->m_acKey[31] = 0;
  }
}
// 9D933C: using guessed type int (__stdcall *Encrypt__EncryptMethodXor___vftable_[2])(int rkEncStream, int chCheckSum);

//----- (0073C780) --------------------------------------------------------
bool __thiscall Encrypt::EncryptStream::LoadEncrypted(Encrypt::EncryptStream *this, char *fn, Encrypt::IEncryptMethod *rkMethod)
{
  Encrypt::EncryptStream *v3; // esi@1
  bool result; // al@3
  Encrypt::FileStream kEncStream; // [sp+0h] [bp-18h]@1
  int v6; // [sp+14h] [bp-4h]@1

  v3 = this;
  kEncStream.baseclass_0.m_pcData = 0;
  kEncStream.baseclass_0.m_dwSize = 0;
  kEncStream.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::FileStream::_vftable_;
  v6 = 0;
  if ( Encrypt::FileStream::Load(&kEncStream, fn)
    && (unsigned __int8)((int (__stdcall *)(Encrypt::EncryptStream *, Encrypt::FileStream *))rkMethod->vfptr->Decrypt)(
                          v3,
                          &kEncStream) )
  {
    v6 = -1;
    kEncStream.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::Stream::_vftable_;
    operator delete(kEncStream.baseclass_0.m_pcData);
    result = 1;
  }
  else
  {
    v6 = -1;
    kEncStream.baseclass_0.vfptr = (Encrypt::StreamVtbl *)&Encrypt::Stream::_vftable_;
    operator delete(kEncStream.baseclass_0.m_pcData);
    result = 0;
  }
  return result;
}
// 97B60C: using guessed type int (__thiscall *Encrypt__FileStream___vftable_)(void *p, char);
// 9D9334: using guessed type int (__thiscall *Encrypt__Stream___vftable_)(void *p, char);

//----- (0073C840) --------------------------------------------------------
void __cdecl enable_sperror(bool bEnable)
{
  g_bErrorEnable = bEnable;
}
// B6C098: using guessed type bool g_bErrorEnable;

//----- (0073C850) --------------------------------------------------------
void __cdecl enable_spcritical(bool bEnable)
{
  g_bCriticalEnable = bEnable;
}
// B6C099: using guessed type bool g_bCriticalEnable;

//----- (0073C860) --------------------------------------------------------
bool __thiscall CTextDataMem::ReadFieldStr(CTextDataMem *this, CFieldNode *pFieldNode, char *pcStr, int iMaxStr)
{
  int v4; // eax@1
  char *v5; // edx@1
  int v6; // eax@4
  int v7; // esi@4
  char v8; // dl@6

  v4 = pFieldNode->m_offset;
  v5 = &this->m_kData.pcData[this->m_kData.iLen];
  this->m_kData.pcCurrPos = (char *)v4;
  if ( v4 < (unsigned int)v5 )
  {
    do
    {
      if ( *(_BYTE *)v4 == 34 )
        break;
      ++v4;
    }
    while ( v4 < (unsigned int)&this->m_kData.pcData[this->m_kData.iLen] );
  }
  v6 = v4 + 1;
  v7 = 0;
  if ( v6 < (unsigned int)v5 )
  {
    while ( v7 < iMaxStr )
    {
      v8 = *(_BYTE *)v6++;
      if ( v8 == 92 )
      {
        v8 = *(_BYTE *)v6++;
        if ( v6 >= (unsigned int)&this->m_kData.pcData[this->m_kData.iLen] )
          return 0;
        if ( v8 == 110 )
          v8 = 10;
      }
      else
      {
        if ( v8 == 34 )
        {
          pcStr[v7] = 0;
          return 1;
        }
      }
      pcStr[v7++] = v8;
      if ( v6 >= (unsigned int)&this->m_kData.pcData[this->m_kData.iLen] )
        return 1;
    }
  }
  return 1;
}

//----- (0073C910) --------------------------------------------------------
CFieldNode *__thiscall INode::FindField(INode *this, char *token)
{
  INode *v2; // ebx@1
  int v3; // eax@1
  int v4; // esi@1
  CFieldNode *result; // eax@5

  v2 = this;
  v3 = *(_DWORD *)&this->m_childList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0];
  v4 = *(_DWORD *)v3;
  if ( *(_DWORD *)v3 == v3 )
  {
LABEL_5:
    result = 0;
  }
  else
  {
    while ( (***(int (****)(void))(v4 + 8))() != 1 || strcmp(token, (const char *)(*(_DWORD *)(v4 + 8) + 16)) )
    {
      v4 = *(_DWORD *)v4;
      if ( v4 == *(_DWORD *)&v2->m_childList.baseclass_0.baseclass_0.___u0.baseclass_0.dummy[0] )
        goto LABEL_5;
    }
    result = *(CFieldNode **)(v4 + 8);
  }
  return result;
}

//----- (0073C990) --------------------------------------------------------
std::basic_filebuf<char,std::char_traits<char> > *__thiscall std::basic_filebuf<char_std::char_traits<char>>::open(std::basic_filebuf<char,std::char_traits<char> > *this, const char *_Filename, int _Mode, int _Prot)
{
  std::basic_filebuf<char,std::char_traits<char> > *v4; // esi@1
  _iobuf *v5; // eax@2
  std::locale *v6; // eax@3
  std::codecvt<char,char,int> *v7; // edi@3
  std::basic_filebuf<char,std::char_traits<char> > *result; // eax@4

  v4 = this;
  if ( this->_Myfile || (v5 = std::_Fiopen(_Filename, _Mode, _Prot)) == 0 )
  {
    result = 0;
  }
  else
  {
    std::basic_filebuf<char_std::char_traits<char>>::_Init(v4, v5, _Openfl);
    v6 = std::basic_streambuf<char_std::char_traits<char>>::getloc(&v4->baseclass_0, (std::locale *)&_Prot);
    v7 = std::use_facet<std::codecvt<char_char_int>>(v6);
    if ( (unsigned __int8)((int (__thiscall *)(_DWORD))v7->baseclass_0.baseclass_0.vfptr[1].__vecDelDtor)(v7) )
    {
      v4->_Pcvt = 0;
      std::locale::_locale((std::locale *)&_Prot);
      result = v4;
    }
    else
    {
      v4->_Pcvt = v7;
      std::basic_streambuf<char_std::char_traits<char>>::_Init(&v4->baseclass_0);
      std::locale::_locale((std::locale *)&_Prot);
      result = v4;
    }
  }
  return result;
}

//----- (0073CA70) --------------------------------------------------------
#error "73CBDC: positive sp value has been found (funcsize=113)"

//----- (0073CBF0) --------------------------------------------------------
std::basic_ostream<char,std::char_traits<char> > *__cdecl std::endl(std::basic_ostream<char,std::char_traits<char> > *_Ostr)
{
  int v1; // eax@1
  signed int v2; // edi@1
  char *v3; // ecx@4
  int v4; // eax@5

  std::basic_ostream<char_std::char_traits<char>>::put(_Ostr, 10);
  v1 = *(_DWORD *)(*(_DWORD *)&_Ostr->dummy[0] + 4);
  v2 = 0;
  if ( !(_Ostr->dummy[v1 + 12] & 6)
    && (*(int (__thiscall **)(_DWORD))(**(_DWORD **)&_Ostr->dummy[v1 + 56] + 52))(*(_DWORD *)&_Ostr->dummy[v1 + 56]) == -1 )
    v2 = 4;
  v3 = (char *)_Ostr + *(_DWORD *)(*(_DWORD *)&_Ostr->dummy[0] + 4);
  if ( v2 )
  {
    v4 = v2 | *((_DWORD *)v3 + 3);
    if ( !*((_DWORD *)v3 + 14) )
      v4 |= 4u;
    std::ios_base::clear((std::ios_base *)v3, v4, 0);
  }
  return _Ostr;
}

//----- (0073CC70) --------------------------------------------------------
void __usercall putShortMSB(internal_state *s<eax>, unsigned int b<ecx>)
{
  int v2; // edi@1

  *(_BYTE *)(s[2].dummy + s[5].dummy) = BYTE1(b);
  v2 = s[2].dummy;
  ++s[5].dummy;
  *(_BYTE *)(s[5].dummy++ + v2) = b;
}

//----- (0073CCA0) --------------------------------------------------------
void __usercall flush_pending(z_stream_s *strm<eax>)
{
  z_stream_s *v1; // esi@1
  internal_state *v2; // eax@1
  unsigned int v3; // edi@1
  internal_state *v4; // eax@4
  internal_state *v5; // esi@4

  v1 = strm;
  v2 = strm->state;
  v3 = v2[5].dummy;
  if ( v3 > v1->avail_out )
    v3 = v1->avail_out;
  if ( v3 )
  {
    memcpy(v1->next_out, (char *)v2[4].dummy, v3);
    v4 = v1->state;
    v1->next_out += v3;
    v4[4].dummy += v3;
    v1->total_out += v3;
    v1->avail_out -= v3;
    v1->state[5].dummy -= v3;
    v5 = v1->state;
    if ( !v5[5].dummy )
      v5[4].dummy = v5[2].dummy;
  }
}

//----- (0073CCF0) --------------------------------------------------------
int __cdecl deflate(z_stream_s *strm, int flush)
{
  z_stream_s *v2; // edi@1
  internal_state *v3; // esi@2
  int v4; // ecx@3
  int v5; // eax@7
  int result; // eax@10
  int v7; // edx@11
  signed int v8; // eax@13
  char v9; // al@14
  unsigned int v10; // eax@19
  signed int v11; // eax@21
  int v12; // eax@23
  int v13; // ecx@26
  internal_state *v14; // eax@28
  internal_state *v15; // eax@29
  int v16; // eax@41
  block_state v17; // eax@48
  int v18; // eax@61
  internal_state *v19; // eax@65
  int v20; // eax@66
  int old_flush; // [sp+10h] [bp+8h]@11

  v2 = strm;
  if ( !strm || (v3 = strm->state) == 0 || (v4 = flush, (unsigned int)flush > 4) )
    return -2;
  if ( !strm->next_out || !strm->next_in && strm->avail_in || (v5 = v3[1].dummy, v5 == 666) && flush != 4 )
  {
    strm->msg = off_9DC950[0];
    return -2;
  }
  if ( !strm->avail_out )
  {
    strm->msg = off_9DC95C[0];
    return -5;
  }
  v7 = v3[8].dummy;
  v3->dummy = (int)strm;
  old_flush = v7;
  v3[8].dummy = flush;
  if ( v5 == 42 )
  {
    if ( v3[6].dummy == 2 )
    {
      *(_BYTE *)(v3[2].dummy + v3[5].dummy++) = 31;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = -117;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = 8;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = 0;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = 0;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = 0;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = 0;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = 0;
      v8 = v3[31].dummy;
      if ( v8 == 9 )
      {
        v9 = 2;
      }
      else
      {
        if ( v3[32].dummy >= 2 || v8 < 2 )
          v9 = 4;
        else
          v9 = 0;
      }
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = v9;
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = -1;
      v3[1].dummy = 113;
      v10 = crc32(0, 0, 0);
    }
    else
    {
      if ( v3[32].dummy >= 2 || (v11 = v3[31].dummy, v11 < 2) )
      {
        v12 = 0;
      }
      else
      {
        if ( v11 >= 6 )
          v12 = (v11 != 6) + 2;
        else
          v12 = 1;
      }
      v13 = (v12 << 6) | (((v3[10].dummy - 8) << 12) + 2048);
      if ( v3[25].dummy )
        v13 |= 0x20u;
      v3[1].dummy = 113;
      putShortMSB(v3, 31 * (v13 / 0x1Fu + 1));
      if ( v3[25].dummy )
      {
        putShortMSB(v14, HIWORD(v2->adler));
        putShortMSB(v15, LOWORD(v2->adler));
      }
      v10 = adler32(0, 0, 0);
    }
    v4 = flush;
    v2->adler = v10;
  }
  if ( v3[5].dummy )
  {
    flush_pending(v2);
    if ( !v2->avail_out )
    {
LABEL_34:
      v3[8].dummy = -1;
      return 0;
    }
    v4 = flush;
  }
  else
  {
    if ( !v2->avail_in && v4 <= old_flush && v4 != 4 )
    {
      v2->msg = off_9DC95C[0];
      return -5;
    }
  }
  v16 = v3[1].dummy;
  if ( v16 == 666 )
  {
    if ( v2->avail_in )
    {
      v2->msg = off_9DC95C[0];
      return -5;
    }
LABEL_45:
    if ( !v3[27].dummy && (!v4 || v16 == 666) )
      goto LABEL_60;
    goto LABEL_48;
  }
  if ( !v2->avail_in )
    goto LABEL_45;
LABEL_48:
  v17 = configuration_table[v3[31].dummy].func(v3, v4);
  if ( v17 == 2 || v17 == 3 )
    v3[1].dummy = 666;
  if ( !v17 || v17 == 2 )
  {
    if ( v2->avail_out )
      return 0;
    v3[8].dummy = -1;
    return 0;
  }
  if ( v17 == 1 )
  {
    if ( flush == 1 )
    {
      _tr_align(v3);
    }
    else
    {
      _tr_stored_block(v3, 0, 0, 0);
      if ( flush == 3 )
      {
        *(_WORD *)(v3[15].dummy + 2 * v3[17].dummy - 2) = 0;
        memset((char *)v3[15].dummy, 0, 2 * v3[17].dummy - 2);
      }
    }
    flush_pending(v2);
    if ( !v2->avail_out )
      goto LABEL_34;
  }
  v4 = flush;
LABEL_60:
  if ( v4 != 4 )
    return 0;
  v18 = v3[6].dummy;
  if ( v18 > 0 )
  {
    if ( v18 == 2 )
    {
      *(_BYTE *)(v3[2].dummy + v3[5].dummy++) = LOBYTE(v2->adler);
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = BYTE1(v2->adler);
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = BYTE2(v2->adler);
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = BYTE3(v2->adler);
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = LOBYTE(v2->total_in);
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = BYTE1(v2->total_in);
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = BYTE2(v2->total_in);
      *(_BYTE *)(v3[5].dummy++ + v3[2].dummy) = BYTE3(v2->total_in);
    }
    else
    {
      putShortMSB(v3, HIWORD(v2->adler));
      putShortMSB(v19, LOWORD(v2->adler));
    }
    flush_pending(v2);
    v20 = v3[6].dummy;
    if ( v20 > 0 )
      v3[6].dummy = -v20;
    result = v3[5].dummy == 0;
  }
  else
  {
    result = 1;
  }
  return result;
}
// 9DC950: using guessed type char *off_9DC950[5];
// 9DC95C: using guessed type char *off_9DC95C[2];

//----- (0073D0F0) --------------------------------------------------------
int __cdecl deflateEnd(z_stream_s *strm)
{
  internal_state *v1; // eax@2
  int v2; // edi@3
  int result; // eax@6
  void *v4; // eax@7
  internal_state *v5; // edx@9
  internal_state *v6; // edx@11
  internal_state *v7; // edx@13

  if ( strm && (v1 = strm->state) != 0 )
  {
    v2 = v1[1].dummy;
    if ( v2 == 42 || v2 == 113 || v2 == 666 )
    {
      v4 = (void *)v1[2].dummy;
      if ( v4 )
        strm->zfree(strm->opaque, v4);
      v5 = strm->state;
      if ( v5[15].dummy )
        strm->zfree(strm->opaque, (void *)v5[15].dummy);
      v6 = strm->state;
      if ( v6[14].dummy )
        strm->zfree(strm->opaque, (void *)v6[14].dummy);
      v7 = strm->state;
      if ( v7[12].dummy )
        strm->zfree(strm->opaque, (void *)v7[12].dummy);
      strm->zfree(strm->opaque, strm->state);
      strm->state = 0;
      result = ((v2 != 113) - 1) & 0xFFFFFFFD;
    }
    else
    {
      result = -2;
    }
  }
  else
  {
    result = -2;
  }
  return result;
}

//----- (0073D1C0) --------------------------------------------------------
void __usercall lm_init(internal_state *s<esi>)
{
  int v1; // ecx@1
  int v2; // edx@1
  int v3; // eax@1
  int v4; // edx@1

  v1 = s[17].dummy;
  v2 = s[15].dummy;
  s[13].dummy = 2 * s[9].dummy;
  *(_WORD *)(v2 + 2 * v1 - 2) = 0;
  memset((char *)s[15].dummy, 0, 2 * s[17].dummy - 2);
  v3 = s[31].dummy;
  s[30].dummy = configuration_table[s[31].dummy].max_lazy;
  s[33].dummy = configuration_table[v3].good_length;
  s[34].dummy = configuration_table[v3].nice_length;
  v4 = configuration_table[v3].max_chain;
  s[25].dummy = 0;
  s[21].dummy = 0;
  s[27].dummy = 0;
  s[24].dummy = 0;
  s[16].dummy = 0;
  s[29].dummy = v4;
  s[28].dummy = 2;
  s[22].dummy = 2;
}

//----- (0073D250) --------------------------------------------------------
unsigned int __usercall longest_match<eax>(internal_state *s<edi>, unsigned int cur_match)
{
  int v2; // edx@1
  int v3; // esi@1
  int v4; // ecx@1
  unsigned int result; // eax@1
  int v6; // esi@4
  unsigned int v7; // ebx@8
  int v8; // edx@9
  int v9; // ecx@13
  int v10; // edx@13
  char v11; // bl@14
  char v12; // bl@15
  char v13; // bl@16
  char v14; // bl@17
  char v15; // bl@18
  char v16; // bl@19
  char v17; // bl@20
  char v18; // bl@21
  unsigned int v19; // edx@23
  int limit; // [sp+Ch] [bp-10h]@2
  int nice_match; // [sp+10h] [bp-Ch]@1
  int chain_length; // [sp+14h] [bp-8h]@1
  char scan_end; // [sp+1Ah] [bp-2h]@4
  char scan_end1; // [sp+1Bh] [bp-1h]@4

  v2 = s[25].dummy;
  nice_match = s[34].dummy;
  v3 = s[9].dummy;
  v4 = v2 + s[12].dummy;
  chain_length = s[29].dummy;
  result = s[28].dummy;
  if ( v2 <= (unsigned int)(v3 - 262) )
    limit = 0;
  else
    limit = v2 - v3 + 262;
  scan_end1 = *(_BYTE *)(result + v4 - 1);
  v6 = v4 + 258;
  scan_end = *(_BYTE *)(result + v4);
  if ( result >= s[33].dummy )
    chain_length = (unsigned int)chain_length >> 2;
  if ( (unsigned int)nice_match > s[27].dummy )
    nice_match = s[27].dummy;
  v7 = cur_match;
  do
  {
    v8 = v7 + s[12].dummy;
    if ( *(_BYTE *)(v8 + result) == scan_end
      && *(_BYTE *)(v8 + result - 1) == scan_end1
      && *(_BYTE *)v8 == *(_BYTE *)v4
      && *(_BYTE *)(v8 + 1) == *(_BYTE *)(v4 + 1) )
    {
      v9 = v4 + 2;
      v10 = v8 + 2;
      do
      {
        v11 = *(_BYTE *)(v9++ + 1);
        if ( v11 != *(_BYTE *)(v10 + 1) )
          break;
        v12 = *(_BYTE *)(v9++ + 1);
        if ( v12 != *(_BYTE *)(v10 + 2) )
          break;
        v13 = *(_BYTE *)(v9++ + 1);
        if ( v13 != *(_BYTE *)(v10 + 3) )
          break;
        v14 = *(_BYTE *)(v9++ + 1);
        if ( v14 != *(_BYTE *)(v10 + 4) )
          break;
        v15 = *(_BYTE *)(v9++ + 1);
        if ( v15 != *(_BYTE *)(v10 + 5) )
          break;
        v16 = *(_BYTE *)(v9++ + 1);
        if ( v16 != *(_BYTE *)(v10 + 6) )
          break;
        v17 = *(_BYTE *)(v9++ + 1);
        if ( v17 != *(_BYTE *)(v10 + 7) )
          break;
        v18 = *(_BYTE *)(v9++ + 1);
        v10 += 8;
        if ( v18 != *(_BYTE *)v10 )
          break;
      }
      while ( v9 < (unsigned int)v6 );
      v19 = v9 - v6 + 258;
      v4 = v6 - 258;
      if ( (signed int)v19 > (signed int)result )
      {
        s[26].dummy = cur_match;
        result = v19;
        if ( (signed int)v19 >= nice_match )
          break;
        scan_end1 = *(_BYTE *)(v19 + v4 - 1);
        scan_end = *(_BYTE *)(v19 + v4);
      }
    }
    v7 = *(_WORD *)(s[14].dummy + 2 * (cur_match & s[11].dummy));
    cur_match = v7;
    if ( v7 <= limit )
      break;
    --chain_length;
  }
  while ( chain_length );
  if ( result > s[27].dummy )
    result = s[27].dummy;
  return result;
}

//----- (0073D3B0) --------------------------------------------------------
unsigned int __usercall longest_match_fast<eax>(internal_state *s<esi>, unsigned int cur_match<edx>)
{
  int v2; // ecx@1
  int v3; // eax@1
  unsigned int v4; // ecx@1
  int v5; // edi@1
  int v6; // eax@3
  int v7; // ecx@3
  char v8; // bl@4
  char v9; // bl@5
  char v10; // bl@6
  char v11; // bl@7
  char v12; // bl@8
  char v13; // bl@9
  char v14; // bl@10
  char v15; // bl@11
  unsigned int result; // eax@13
  int v17; // ecx@14

  v2 = s[12].dummy;
  v3 = v2 + s[25].dummy;
  v4 = cur_match + v2;
  v5 = v3 + 258;
  if ( *(_BYTE *)v4 != *(_BYTE *)v3 || *(_BYTE *)(v4 + 1) != *(_BYTE *)(v3 + 1) )
    goto LABEL_19;
  v6 = v3 + 2;
  v7 = v4 + 2;
  do
  {
    v8 = *(_BYTE *)(v6++ + 1);
    if ( v8 != *(_BYTE *)(v7 + 1) )
      break;
    v9 = *(_BYTE *)(v6++ + 1);
    if ( v9 != *(_BYTE *)(v7 + 2) )
      break;
    v10 = *(_BYTE *)(v6++ + 1);
    if ( v10 != *(_BYTE *)(v7 + 3) )
      break;
    v11 = *(_BYTE *)(v6++ + 1);
    if ( v11 != *(_BYTE *)(v7 + 4) )
      break;
    v12 = *(_BYTE *)(v6++ + 1);
    if ( v12 != *(_BYTE *)(v7 + 5) )
      break;
    v13 = *(_BYTE *)(v6++ + 1);
    if ( v13 != *(_BYTE *)(v7 + 6) )
      break;
    v14 = *(_BYTE *)(v6++ + 1);
    if ( v14 != *(_BYTE *)(v7 + 7) )
      break;
    v15 = *(_BYTE *)(v6++ + 1);
    v7 += 8;
    if ( v15 != *(_BYTE *)v7 )
      break;
  }
  while ( v6 < (unsigned int)v5 );
  result = v6 - v5 + 258;
  if ( (signed int)result < 3 )
  {
LABEL_19:
    result = 2;
  }
  else
  {
    v17 = s[27].dummy;
    s[26].dummy = cur_match;
    if ( result > v17 )
      result = v17;
  }
  return result;
}

//----- (0073D450) --------------------------------------------------------
void __usercall fill_window(internal_state *s<esi>)
{
  int v1; // edi@1
  int v2; // eax@3
  int v3; // ebx@3
  int v4; // edx@4
  int v5; // eax@4
  int v6; // ecx@4
  unsigned int v7; // eax@5
  __int16 v8; // ax@6
  int v9; // edx@9
  int v10; // ecx@9
  unsigned int v11; // eax@10
  __int16 v12; // ax@11
  int v13; // edi@15
  char *v14; // eax@16
  unsigned int v15; // ebx@16
  int v16; // edx@19
  int v17; // ecx@19
  unsigned int v18; // eax@20
  int v19; // edi@25
  int v20; // edx@26
  int v21; // ecx@26
  int v22; // eax@26
  int wsize; // [sp+8h] [bp-Ch]@1
  int v24; // [sp+Ch] [bp-8h]@16
  int more; // [sp+10h] [bp-4h]@3

  v1 = s[9].dummy;
  for ( wsize = s[9].dummy; ; v1 = wsize )
  {
    v2 = s[25].dummy;
    v3 = s[13].dummy - s[27].dummy - v2;
    more = s[13].dummy - s[27].dummy - v2;
    if ( v2 >= (unsigned int)(v1 + s[9].dummy - 262) )
    {
      memcpy((char *)s[12].dummy, (char *)(s[12].dummy + v1), v1);
      v4 = s[17].dummy;
      v5 = s[15].dummy;
      s[26].dummy -= v1;
      s[25].dummy -= v1;
      s[21].dummy -= v1;
      v6 = v5 + 2 * v4;
      do
      {
        v7 = *(_WORD *)(v6 - 2);
        v6 -= 2;
        if ( v7 < v1 )
          v8 = 0;
        else
          v8 = v7 - v1;
        --v4;
        *(_WORD *)v6 = v8;
      }
      while ( v4 );
      v9 = v1;
      v10 = s[14].dummy + 2 * v1;
      do
      {
        v11 = *(_WORD *)(v10 - 2);
        v10 -= 2;
        if ( v11 < v1 )
          v12 = 0;
        else
          v12 = v11 - v1;
        --v9;
        *(_WORD *)v10 = v12;
      }
      while ( v9 );
      more = v1 + v3;
    }
    v13 = s->dummy;
    if ( !*(_DWORD *)(s->dummy + 4) )
      break;
    v14 = (char *)(s[12].dummy + s[25].dummy + s[27].dummy);
    v15 = *(_DWORD *)(v13 + 4);
    v24 = s[12].dummy + s[25].dummy + s[27].dummy;
    if ( v15 > more )
      v15 = more;
    if ( v15 )
    {
      v16 = *(_DWORD *)(v13 + 28);
      *(_DWORD *)(v13 + 4) -= v15;
      v17 = *(_DWORD *)(v16 + 24);
      if ( v17 == 1 )
      {
        v18 = adler32(*(_DWORD *)(v13 + 48), *(const char **)v13, v15);
        goto LABEL_23;
      }
      if ( v17 == 2 )
      {
        v18 = crc32(*(_DWORD *)(v13 + 48), *(const char **)v13, v15);
LABEL_23:
        *(_DWORD *)(v13 + 48) = v18;
        v14 = (char *)v24;
      }
      memcpy(v14, *(char **)v13, v15);
      *(_DWORD *)v13 += v15;
      *(_DWORD *)(v13 + 8) += v15;
    }
    s[27].dummy += v15;
    v19 = s[27].dummy;
    if ( (unsigned int)v19 >= 3 )
    {
      v20 = s[12].dummy + s[25].dummy;
      v21 = s[20].dummy;
      v22 = *(_BYTE *)v20;
      s[16].dummy = v22;
      s[16].dummy = s[19].dummy & (*(_BYTE *)(v20 + 1) ^ (v22 << v21));
    }
    if ( (unsigned int)v19 >= 0x106 || !*(_DWORD *)(s->dummy + 4) )
      return;
  }
}

//----- (0073D5A0) --------------------------------------------------------
block_state __cdecl deflate_stored(internal_state *s, int flush)
{
  int v2; // eax@3
  bool v3; // zf@5
  int v4; // ecx@5
  int v5; // edx@5
  int v6; // eax@5
  char *v7; // edx@8
  int v8; // edi@10
  int v9; // eax@10
  unsigned int v10; // ebx@10
  int v11; // eax@13
  int v12; // edi@13
  int v13; // edx@16
  unsigned int v14; // ecx@16
  char *v15; // eax@18
  int v16; // edi@20
  int v17; // eax@20
  unsigned int v18; // ebx@20
  int v19; // eax@23
  int v20; // edi@23
  block_state result; // eax@26
  int v22; // ecx@28
  char *v23; // eax@29
  int v24; // eax@31
  unsigned int max_block_size; // [sp+Ch] [bp-4h]@1

  max_block_size = 65535;
  if ( (unsigned int)(s[3].dummy - 5) < 0xFFFF )
    max_block_size = s[3].dummy - 5;
  while ( 1 )
  {
    v2 = s[27].dummy;
    if ( (unsigned int)v2 <= 1 )
    {
      fill_window(s);
      v2 = s[27].dummy;
      if ( !v2 )
        break;
    }
    v3 = v2 + s[25].dummy == 0;
    s[25].dummy += v2;
    v4 = s[21].dummy;
    v5 = s[25].dummy;
    s[27].dummy = 0;
    v6 = v4 + max_block_size;
    if ( !v3 && v5 < (unsigned int)v6 )
      goto LABEL_36;
    s[27].dummy = v5 - v6;
    s[25].dummy = v6;
    if ( v4 < 0 )
      v7 = 0;
    else
      v7 = (char *)(v4 + s[12].dummy);
    _tr_flush_block(s, v7, max_block_size, 0);
    v8 = s->dummy;
    s[21].dummy = s[25].dummy;
    v9 = *(_DWORD *)(v8 + 28);
    v10 = *(_DWORD *)(v9 + 20);
    if ( v10 > *(_DWORD *)(v8 + 16) )
      v10 = *(_DWORD *)(v8 + 16);
    if ( v10 )
    {
      memcpy(*(char **)(v8 + 12), *(char **)(v9 + 16), v10);
      v11 = *(_DWORD *)(v8 + 28);
      *(_DWORD *)(v8 + 12) += v10;
      *(_DWORD *)(v11 + 16) += v10;
      *(_DWORD *)(v8 + 20) += v10;
      *(_DWORD *)(v8 + 16) -= v10;
      *(_DWORD *)(*(_DWORD *)(v8 + 28) + 20) -= v10;
      v12 = *(_DWORD *)(v8 + 28);
      if ( !*(_DWORD *)(v12 + 20) )
        *(_DWORD *)(v12 + 16) = *(_DWORD *)(v12 + 8);
    }
    if ( *(_DWORD *)(s->dummy + 16) )
    {
LABEL_36:
      v13 = s[21].dummy;
      v14 = s[25].dummy - v13;
      if ( v14 < s[9].dummy - 262 )
        continue;
      if ( v13 < 0 )
        v15 = 0;
      else
        v15 = (char *)(v13 + s[12].dummy);
      _tr_flush_block(s, v15, v14, 0);
      v16 = s->dummy;
      s[21].dummy = s[25].dummy;
      v17 = *(_DWORD *)(v16 + 28);
      v18 = *(_DWORD *)(v17 + 20);
      if ( v18 > *(_DWORD *)(v16 + 16) )
        v18 = *(_DWORD *)(v16 + 16);
      if ( v18 )
      {
        memcpy(*(char **)(v16 + 12), *(char **)(v17 + 16), v18);
        v19 = *(_DWORD *)(v16 + 28);
        *(_DWORD *)(v16 + 12) += v18;
        *(_DWORD *)(v19 + 16) += v18;
        *(_DWORD *)(v16 + 20) += v18;
        *(_DWORD *)(v16 + 16) -= v18;
        *(_DWORD *)(*(_DWORD *)(v16 + 28) + 20) -= v18;
        v20 = *(_DWORD *)(v16 + 28);
        if ( !*(_DWORD *)(v20 + 20) )
          *(_DWORD *)(v20 + 16) = *(_DWORD *)(v20 + 8);
      }
      if ( *(_DWORD *)(s->dummy + 16) )
        continue;
    }
    return 0;
  }
  if ( !flush )
    return 0;
  v22 = s[21].dummy;
  if ( v22 < 0 )
    v23 = 0;
  else
    v23 = (char *)(v22 + s[12].dummy);
  _tr_flush_block(s, v23, s[25].dummy - v22, flush == 4);
  s[21].dummy = s[25].dummy;
  flush_pending((z_stream_s *)s->dummy);
  v24 = 0;
  if ( *(_DWORD *)(s->dummy + 16) )
  {
    LOBYTE(v24) = flush == 4;
    result = 2 * v24 + 1;
  }
  else
  {
    result = ((flush != 4) - 1) & 2;
  }
  return result;
}

//----- (0073D780) --------------------------------------------------------
block_state __cdecl deflate_fast(internal_state *s, int flush)
{
  internal_state *v2; // esi@1
  unsigned int v3; // ebx@1
  unsigned int v4; // eax@3
  int v5; // edx@8
  int v6; // edi@8
  int v7; // eax@8
  int v8; // ecx@8
  int v9; // eax@10
  signed int v10; // ecx@11
  signed int v11; // edi@13
  unsigned __int8 v12; // al@15
  __int16 v13; // cx@15
  unsigned __int16 v14; // cx@15
  int v15; // eax@16
  int v16; // eax@21
  int v17; // ebx@21
  int v18; // edx@24
  int v19; // ecx@24
  int v20; // eax@24
  int v21; // ebx@24
  int v23; // edx@26
  int v24; // ecx@26
  int v25; // eax@26
  unsigned __int8 v26; // al@27
  int v27; // ecx@30
  char *v28; // eax@31
  internal_state v29; // edi@33
  int v30; // eax@33
  unsigned int v31; // ebx@33
  int v32; // eax@36
  int v33; // edi@36
  block_state result; // eax@39
  int v35; // ecx@40
  char *v36; // eax@41
  int v37; // eax@43
  unsigned int hash_head; // [sp+Ch] [bp-4h]@1
  int bflush; // [sp+18h] [bp+8h]@21

  v2 = s;
  v3 = 0;
  for ( hash_head = 0; ; v3 = hash_head )
  {
    v4 = v2[27].dummy;
    if ( v4 < 0x106 )
    {
      fill_window(v2);
      v4 = v2[27].dummy;
      if ( v4 < 0x106 && !flush )
        return 0;
      if ( !v4 )
        break;
    }
    if ( v4 >= 3 )
    {
      v5 = v2[25].dummy;
      v6 = v2[11].dummy;
      v7 = v2[19].dummy & (*(_BYTE *)(v2[12].dummy + v5 + 2) ^ (v2[16].dummy << v2[20].dummy));
      v8 = v2[15].dummy;
      v2[16].dummy = v7;
      *(_WORD *)(v2[14].dummy + 2 * (v5 & v6)) = *(_WORD *)(v8 + 2 * v7);
      hash_head = *(_WORD *)(v2[14].dummy + 2 * (v2[11].dummy & v2[25].dummy));
      v3 = *(_WORD *)(v2[14].dummy + 2 * (v2[11].dummy & v2[25].dummy));
      *(_WORD *)(v2[15].dummy + 2 * v2[16].dummy) = LOWORD(v2[25].dummy);
    }
    if ( !v3 || (v9 = v2[25].dummy - v3, v9 > (unsigned int)(v2[9].dummy - 262)) )
      goto LABEL_13;
    v10 = v2[32].dummy;
    if ( v10 < 2 )
    {
      v2[22].dummy = longest_match(v2, v3);
LABEL_13:
      v11 = 1;
      goto LABEL_14;
    }
    if ( v10 != 3 )
      goto LABEL_13;
    v11 = 1;
    if ( v9 == 1 )
      v2[22].dummy = longest_match_fast(v2, v3);
LABEL_14:
    if ( v2[22].dummy < 3u )
    {
      v26 = *(_BYTE *)(v2[25].dummy + v2[12].dummy);
      *(_WORD *)(v2[1447].dummy + 2 * v2[1446].dummy) = 0;
      *(_BYTE *)(v2[1444].dummy + v2[1446].dummy) = v26;
      v2[1446].dummy += v11;
      LOWORD(v2[v26 + 35].dummy) += v11;
      v17 = v2[1446].dummy == v2[1445].dummy - v11;
      --v2[27].dummy;
LABEL_28:
      v2[25].dummy += v11;
      goto LABEL_29;
    }
    v12 = LOBYTE(v2[22].dummy);
    v13 = LOWORD(v2[25].dummy) - LOWORD(v2[26].dummy);
    *(_WORD *)(v2[1447].dummy + 2 * v2[1446].dummy) = v13;
    v12 -= 3;
    *(_BYTE *)(v2[1444].dummy + v2[1446].dummy) = v12;
    v2[1446].dummy += v11;
    LOWORD(v2[(unsigned __int8)_length_code[v12] + 292].dummy) += v11;
    v14 = v13 - 1;
    if ( v14 >= 0x100u )
      v15 = (unsigned __int8)byte_9DA5D0[(unsigned int)v14 >> 7];
    else
      v15 = (unsigned __int8)_dist_code[v14];
    LOWORD(v2[v15 + 608].dummy) += v11;
    v16 = v2[22].dummy;
    v17 = v2[1446].dummy == v2[1445].dummy - v11;
    v2[27].dummy -= v16;
    bflush = v17;
    if ( (unsigned int)v16 <= v2[30].dummy && v2[27].dummy >= 3u )
    {
      v2[22].dummy = v16 - 1;
      do
      {
        v2[25].dummy += v11;
        v18 = v2[25].dummy;
        v19 = v2[15].dummy;
        v20 = v2[19].dummy & ((v2[16].dummy << v2[20].dummy) ^ *(_BYTE *)(v18 + v2[12].dummy + 2));
        v21 = v2[11].dummy;
        v2[16].dummy = v20;
        *(_WORD *)(v2[14].dummy + 2 * (v18 & v21)) = *(_WORD *)(v19 + 2 * v20);
        hash_head = *(_WORD *)(v2[14].dummy + 2 * (v2[11].dummy & v2[25].dummy));
        *(_WORD *)(v2[15].dummy + 2 * v2[16].dummy) = LOWORD(v2[25].dummy);
      }
      while ( v2[22].dummy-- != 1 );
      v17 = bflush;
      goto LABEL_28;
    }
    v2[25].dummy += v16;
    v23 = v2[25].dummy + v2[12].dummy;
    v24 = v2[20].dummy;
    v2[22].dummy = 0;
    v25 = *(_BYTE *)v23;
    v2[16].dummy = v25;
    v2[16].dummy = v2[19].dummy & (*(_BYTE *)(v23 + 1) ^ (v25 << v24));
LABEL_29:
    if ( v17 )
    {
      v27 = v2[21].dummy;
      if ( v27 < 0 )
        v28 = 0;
      else
        v28 = (char *)(v27 + v2[12].dummy);
      _tr_flush_block(v2, v28, v2[25].dummy - v27, 0);
      v29.dummy = v2->dummy;
      v2[21].dummy = v2[25].dummy;
      v30 = *(_DWORD *)(v29.dummy + 28);
      v31 = *(_DWORD *)(v30 + 20);
      if ( v31 > *(_DWORD *)(v29.dummy + 16) )
        v31 = *(_DWORD *)(v29.dummy + 16);
      if ( v31 )
      {
        memcpy(*(char **)(v29.dummy + 12), *(char **)(v30 + 16), v31);
        v32 = *(_DWORD *)(v29.dummy + 28);
        *(_DWORD *)(v29.dummy + 12) += v31;
        *(_DWORD *)(v32 + 16) += v31;
        *(_DWORD *)(v29.dummy + 20) += v31;
        *(_DWORD *)(v29.dummy + 16) -= v31;
        *(_DWORD *)(*(_DWORD *)(v29.dummy + 28) + 20) -= v31;
        v33 = *(_DWORD *)(v29.dummy + 28);
        if ( !*(_DWORD *)(v33 + 20) )
          *(_DWORD *)(v33 + 16) = *(_DWORD *)(v33 + 8);
      }
      if ( !*(_DWORD *)(v2->dummy + 16) )
        return 0;
    }
  }
  v35 = v2[21].dummy;
  if ( v35 < 0 )
    v36 = 0;
  else
    v36 = (char *)(v35 + v2[12].dummy);
  _tr_flush_block(v2, v36, v2[25].dummy - v35, flush == 4);
  v2[21].dummy = v2[25].dummy;
  flush_pending((z_stream_s *)v2->dummy);
  v37 = 0;
  if ( *(_DWORD *)(v2->dummy + 16) )
  {
    LOBYTE(v37) = flush == 4;
    result = 2 * v37 + 1;
  }
  else
  {
    result = ((flush != 4) - 1) & 2;
  }
  return result;
}

//----- (0073DB00) --------------------------------------------------------
block_state __cdecl deflate_slow(internal_state *s, int flush)
{
  internal_state *v2; // esi@1
  unsigned int v3; // eax@2
  int v4; // edx@7
  int v5; // edi@7
  int v6; // eax@7
  int v7; // ecx@7
  unsigned int v8; // ecx@8
  int v9; // eax@10
  signed int v10; // ecx@11
  unsigned int v11; // eax@12
  unsigned int v12; // eax@17
  unsigned int v13; // eax@22
  int v14; // edi@24
  unsigned __int8 v15; // al@24
  __int16 v16; // cx@24
  signed int v17; // ebx@24
  unsigned __int16 v18; // cx@24
  int v19; // eax@25
  int v20; // eax@27
  int v21; // ecx@27
  int v22; // edx@28
  int v23; // ebx@29
  int v24; // ecx@29
  int v25; // edx@29
  int v26; // eax@29
  int v27; // ecx@29
  int v28; // eax@31
  int v29; // edx@32
  char *v30; // ecx@33
  internal_state v31; // edi@35
  int v32; // eax@35
  unsigned int v33; // ebx@35
  int v34; // eax@38
  int v35; // edi@38
  bool v36; // zf@40
  block_state result; // eax@42
  unsigned __int8 v38; // al@44
  int v39; // ecx@45
  char *v40; // eax@46
  internal_state v41; // edi@48
  int v42; // eax@48
  unsigned int v43; // ebx@48
  int v44; // eax@51
  int v45; // edi@51
  internal_state v46; // ecx@53
  unsigned __int8 v47; // al@56
  int v48; // ecx@57
  char *v49; // eax@58
  int v50; // eax@60
  unsigned int hash_head; // [sp+Ch] [bp-4h]@1
  int bflush; // [sp+18h] [bp+8h]@27

  v2 = s;
  hash_head = 0;
  while ( 1 )
  {
    v3 = v2[27].dummy;
    if ( v3 < 0x106 )
    {
      fill_window(v2);
      v3 = v2[27].dummy;
      if ( v3 < 0x106 && !flush )
        return 0;
      if ( !v3 )
        break;
    }
    if ( v3 >= 3 )
    {
      v4 = v2[25].dummy;
      v5 = v2[11].dummy;
      v6 = v2[19].dummy & (*(_BYTE *)(v2[12].dummy + v4 + 2) ^ (v2[16].dummy << v2[20].dummy));
      v7 = v2[15].dummy;
      v2[16].dummy = v6;
      *(_WORD *)(v2[14].dummy + 2 * (v4 & v5)) = *(_WORD *)(v7 + 2 * v6);
      hash_head = *(_WORD *)(v2[14].dummy + 2 * (v2[11].dummy & v2[25].dummy));
      *(_WORD *)(v2[15].dummy + 2 * v2[16].dummy) = LOWORD(v2[25].dummy);
    }
    v8 = v2[22].dummy;
    v2[23].dummy = v2[26].dummy;
    v2[28].dummy = v8;
    v2[22].dummy = 2;
    if ( !hash_head || v8 >= v2[30].dummy || (v9 = v2[25].dummy - hash_head, v9 > (unsigned int)(v2[9].dummy - 262)) )
      goto LABEL_22;
    v10 = v2[32].dummy;
    if ( v10 < 2 )
    {
      v11 = longest_match(v2, hash_head);
LABEL_16:
      v2[22].dummy = v11;
      goto LABEL_17;
    }
    if ( v10 == 3 && v9 == 1 )
    {
      v11 = longest_match_fast(v2, hash_head);
      goto LABEL_16;
    }
LABEL_17:
    v12 = v2[22].dummy;
    if ( v12 <= 5 && (v2[32].dummy == 1 || v12 == 3 && (unsigned int)(v2[25].dummy - v2[26].dummy) > 0x1000) )
      v2[22].dummy = 2;
LABEL_22:
    v13 = v2[28].dummy;
    if ( v13 < 3 || v2[22].dummy > v13 )
    {
      if ( v2[24].dummy )
      {
        v38 = *(_BYTE *)(v2[25].dummy + v2[12].dummy - 1);
        *(_WORD *)(v2[1447].dummy + 2 * v2[1446].dummy) = 0;
        *(_BYTE *)(v2[1444].dummy + v2[1446].dummy++) = v38;
        ++LOWORD(v2[v38 + 35].dummy);
        if ( v2[1446].dummy == v2[1445].dummy - 1 )
        {
          v39 = v2[21].dummy;
          if ( v39 < 0 )
            v40 = 0;
          else
            v40 = (char *)(v39 + v2[12].dummy);
          _tr_flush_block(v2, v40, v2[25].dummy - v39, 0);
          v41.dummy = v2->dummy;
          v2[21].dummy = v2[25].dummy;
          v42 = *(_DWORD *)(v41.dummy + 28);
          v43 = *(_DWORD *)(v42 + 20);
          if ( v43 > *(_DWORD *)(v41.dummy + 16) )
            v43 = *(_DWORD *)(v41.dummy + 16);
          if ( v43 )
          {
            memcpy(*(char **)(v41.dummy + 12), *(char **)(v42 + 16), v43);
            v44 = *(_DWORD *)(v41.dummy + 28);
            *(_DWORD *)(v41.dummy + 12) += v43;
            *(_DWORD *)(v44 + 16) += v43;
            *(_DWORD *)(v41.dummy + 20) += v43;
            *(_DWORD *)(v41.dummy + 16) -= v43;
            *(_DWORD *)(*(_DWORD *)(v41.dummy + 28) + 20) -= v43;
            v45 = *(_DWORD *)(v41.dummy + 28);
            if ( !*(_DWORD *)(v45 + 20) )
              *(_DWORD *)(v45 + 16) = *(_DWORD *)(v45 + 8);
          }
        }
        v46.dummy = v2->dummy;
        ++v2[25].dummy;
        --v2[27].dummy;
        v36 = *(_DWORD *)(v46.dummy + 16) == 0;
        goto LABEL_41;
      }
      ++v2[25].dummy;
      --v2[27].dummy;
      v2[24].dummy = 1;
    }
    else
    {
      v14 = v2[25].dummy + v2[27].dummy - 3;
      v15 = LOBYTE(v2[28].dummy);
      v16 = LOWORD(v2[25].dummy) - LOWORD(v2[23].dummy) - 1;
      *(_WORD *)(v2[1447].dummy + 2 * v2[1446].dummy) = v16;
      v15 -= 3;
      *(_BYTE *)(v2[1444].dummy + v2[1446].dummy) = v15;
      v17 = 1;
      ++v2[1446].dummy;
      ++LOWORD(v2[(unsigned __int8)_length_code[v15] + 292].dummy);
      v18 = v16 - 1;
      if ( v18 >= 0x100u )
        v19 = (unsigned __int8)byte_9DA5D0[(unsigned int)v18 >> 7];
      else
        v19 = (unsigned __int8)_dist_code[v18];
      ++LOWORD(v2[v19 + 608].dummy);
      v20 = v2[28].dummy;
      v21 = v2[1446].dummy == v2[1445].dummy - 1;
      v2[27].dummy += 1 - v20;
      v2[28].dummy = v20 - 2;
      bflush = v21;
      do
      {
        v2[25].dummy += v17;
        v22 = v2[25].dummy;
        if ( v22 <= (unsigned int)v14 )
        {
          v23 = v2[14].dummy;
          v24 = *(_BYTE *)(v2[12].dummy + v22 + 2);
          v25 = v2[11].dummy & v22;
          v26 = v2[19].dummy & (v24 ^ (v2[16].dummy << v2[20].dummy));
          v27 = v2[15].dummy;
          v2[16].dummy = v26;
          *(_WORD *)(v23 + 2 * v25) = *(_WORD *)(v27 + 2 * v26);
          hash_head = *(_WORD *)(v2[14].dummy + 2 * (v2[11].dummy & v2[25].dummy));
          *(_WORD *)(v2[15].dummy + 2 * v2[16].dummy) = LOWORD(v2[25].dummy);
          v17 = 1;
        }
        v36 = v2[28].dummy-- == 1;
      }
      while ( !v36 );
      v2[25].dummy += v17;
      v28 = v2[25].dummy;
      v2[24].dummy = 0;
      v2[22].dummy = 2;
      if ( bflush )
      {
        v29 = v2[21].dummy;
        if ( v29 < 0 )
          v30 = 0;
        else
          v30 = (char *)(v29 + v2[12].dummy);
        _tr_flush_block(v2, v30, v28 - v29, 0);
        v31.dummy = v2->dummy;
        v2[21].dummy = v2[25].dummy;
        v32 = *(_DWORD *)(v31.dummy + 28);
        v33 = *(_DWORD *)(v32 + 20);
        if ( v33 > *(_DWORD *)(v31.dummy + 16) )
          v33 = *(_DWORD *)(v31.dummy + 16);
        if ( v33 )
        {
          memcpy(*(char **)(v31.dummy + 12), *(char **)(v32 + 16), v33);
          v34 = *(_DWORD *)(v31.dummy + 28);
          *(_DWORD *)(v31.dummy + 12) += v33;
          *(_DWORD *)(v34 + 16) += v33;
          *(_DWORD *)(v31.dummy + 20) += v33;
          *(_DWORD *)(v31.dummy + 16) -= v33;
          *(_DWORD *)(*(_DWORD *)(v31.dummy + 28) + 20) -= v33;
          v35 = *(_DWORD *)(v31.dummy + 28);
          if ( !*(_DWORD *)(v35 + 20) )
            *(_DWORD *)(v35 + 16) = *(_DWORD *)(v35 + 8);
        }
        v36 = *(_DWORD *)(v2->dummy + 16) == 0;
LABEL_41:
        if ( v36 )
          return 0;
      }
    }
  }
  if ( v2[24].dummy )
  {
    v47 = *(_BYTE *)(v2[25].dummy + v2[12].dummy - 1);
    *(_WORD *)(v2[1447].dummy + 2 * v2[1446].dummy) = 0;
    *(_BYTE *)(v2[1444].dummy + v2[1446].dummy++) = v47;
    ++LOWORD(v2[v47 + 35].dummy);
    v2[24].dummy = 0;
  }
  v48 = v2[21].dummy;
  if ( v48 < 0 )
    v49 = 0;
  else
    v49 = (char *)(v48 + v2[12].dummy);
  _tr_flush_block(v2, v49, v2[25].dummy - v48, flush == 4);
  v2[21].dummy = v2[25].dummy;
  flush_pending((z_stream_s *)v2->dummy);
  v50 = 0;
  if ( *(_DWORD *)(v2->dummy + 16) )
  {
    LOBYTE(v50) = flush == 4;
    result = 2 * v50 + 1;
  }
  else
  {
    result = ((flush != 4) - 1) & 2;
  }
  return result;
}

//----- (0073DF80) --------------------------------------------------------
int __cdecl deflateReset(z_stream_s *strm)
{
  internal_state *v1; // esi@2
  int v2; // eax@5
  int v3; // eax@7
  unsigned int v4; // eax@8
  int result; // eax@10

  if ( strm && (v1 = strm->state) != 0 && strm->zalloc && strm->zfree )
  {
    strm->total_out = 0;
    strm->total_in = 0;
    strm->msg = 0;
    strm->data_type = 2;
    v1[4].dummy = v1[2].dummy;
    v2 = v1[6].dummy;
    v1[5].dummy = 0;
    if ( v2 < 0 )
      v1[6].dummy = -v2;
    v3 = v1[6].dummy;
    v1[1].dummy = v1[6].dummy != 0 ? 42 : 113;
    if ( v3 == 2 )
      v4 = crc32(0, 0, 0);
    else
      v4 = adler32(0, 0, 0);
    strm->adler = v4;
    v1[8].dummy = 0;
    _tr_init(v1);
    lm_init(v1);
    result = 0;
  }
  else
  {
    result = -2;
  }
  return result;
}

//----- (0073E020) --------------------------------------------------------
int __cdecl deflateInit2_(z_stream_s *strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size)
{
  int result; // eax@5
  int v9; // ebx@12
  int v10; // eax@24
  int v11; // esi@24
  signed int v12; // eax@25
  void *v13; // eax@25
  unsigned int v14; // edx@25
  void *v15; // eax@25
  unsigned int v16; // edx@25
  void *v17; // eax@25
  unsigned int v18; // ecx@25
  bool v19; // zf@25
  signed int wrap; // [sp+0h] [bp-4h]@1

  wrap = 1;
  if ( !version || *version != 49 || stream_size != 56 )
    return -6;
  if ( !strm )
    return -2;
  strm->msg = 0;
  if ( !strm->zalloc )
  {
    strm->zalloc = zcalloc;
    strm->opaque = 0;
  }
  if ( !strm->zfree )
    strm->zfree = zcfree;
  if ( level == -1 )
    level = 6;
  v9 = windowBits;
  if ( windowBits < 0 )
  {
    wrap = 0;
    v9 = -windowBits;
LABEL_16:
    windowBits = v9;
    goto LABEL_17;
  }
  if ( windowBits > 15 )
  {
    wrap = 2;
    v9 = windowBits - 16;
    goto LABEL_16;
  }
LABEL_17:
  if ( (unsigned int)(memLevel - 1) > 8
    || method != 8
    || (unsigned int)(v9 - 8) > 7
    || (unsigned int)level > 9
    || (unsigned int)strategy > 3 )
  {
    result = -2;
  }
  else
  {
    if ( v9 == 8 )
    {
      windowBits = 9;
      v9 = 9;
    }
    v10 = ((int (__stdcall *)(_DWORD))strm->zalloc)(strm->opaque);
    v11 = v10;
    if ( v10 )
    {
      strm->state = (internal_state *)v10;
      *(_DWORD *)(v10 + 24) = wrap;
      *(_DWORD *)(v10 + 40) = v9;
      v12 = 1 << (memLevel + 7);
      *(_DWORD *)(v11 + 72) = memLevel + 7;
      *(_DWORD *)(v11 + 44) = (1 << windowBits) - 1;
      *(_DWORD *)(v11 + 68) = v12;
      *(_DWORD *)(v11 + 76) = v12 - 1;
      *(_DWORD *)v11 = strm;
      *(_DWORD *)(v11 + 36) = 1 << windowBits;
      *(_DWORD *)(v11 + 80) = (memLevel + 9) / 3u;
      v13 = strm->zalloc(strm->opaque, 1 << windowBits, 2u);
      v14 = *(_DWORD *)(v11 + 36);
      *(_DWORD *)(v11 + 48) = v13;
      v15 = strm->zalloc(strm->opaque, v14, 2u);
      v16 = *(_DWORD *)(v11 + 68);
      *(_DWORD *)(v11 + 56) = v15;
      *(_DWORD *)(v11 + 60) = strm->zalloc(strm->opaque, v16, 2u);
      *(_DWORD *)(v11 + 5780) = 1 << (memLevel + 6);
      v17 = strm->zalloc(strm->opaque, 1 << (memLevel + 6), 4u);
      v18 = *(_DWORD *)(v11 + 5780);
      v19 = *(_DWORD *)(v11 + 48) == 0;
      *(_DWORD *)(v11 + 8) = v17;
      *(_DWORD *)(v11 + 12) = 4 * v18;
      if ( !v19 && *(_DWORD *)(v11 + 56) && *(_DWORD *)(v11 + 60) && v17 )
      {
        *(_DWORD *)(v11 + 5788) = (char *)v17 + 2 * (v18 >> 1);
        *(_DWORD *)(v11 + 5776) = (char *)v17 + 2 * v18 + v18;
        *(_DWORD *)(v11 + 124) = level;
        *(_DWORD *)(v11 + 128) = strategy;
        *(_BYTE *)(v11 + 28) = 8;
        return deflateReset(strm);
      }
      *(_DWORD *)(v11 + 4) = 666;
      strm->msg = off_9DC958[0];
      deflateEnd(strm);
    }
    result = -4;
  }
  return result;
}
// 9DC958: using guessed type char *off_9DC958[3];

//----- (0073E250) --------------------------------------------------------
int __cdecl deflateInit_(z_stream_s *strm, int level, const char *version, int stream_size)
{
  return deflateInit2_(strm, level, 8, 15, 8, 0, version, stream_size);
}

//----- (0073E280) --------------------------------------------------------
int __cdecl inflateReset(z_stream_s *strm)
{
  internal_state *v1; // eax@2
  int result; // eax@3

  if ( strm && (v1 = strm->state) != 0 )
  {
    v1[6].dummy = 0;
    strm->total_out = 0;
    strm->total_in = 0;
    strm->msg = 0;
    strm->adler = 1;
    v1->dummy = 0;
    v1[1].dummy = 0;
    v1[3].dummy = 0;
    v1[8].dummy = 0;
    v1[9].dummy = 0;
    v1[12].dummy = 0;
    v1[13].dummy = 0;
    v1[25].dummy = (int)&v1[330];
    v1[18].dummy = (int)&v1[330];
    v1[17].dummy = (int)&v1[330];
    result = 0;
  }
  else
  {
    result = -2;
  }
  return result;
}

//----- (0073E2E0) --------------------------------------------------------
int __cdecl inflateInit2_(z_stream_s *strm, int windowBits, const char *version, int stream_size)
{
  void *v4; // eax@9
  int result; // eax@10
  int v6; // ecx@11

  if ( version && *version == 49 && stream_size == 56 )
  {
    if ( strm )
    {
      strm->msg = 0;
      if ( !strm->zalloc )
      {
        strm->zalloc = zcalloc;
        strm->opaque = 0;
      }
      if ( !strm->zfree )
        strm->zfree = zcfree;
      v4 = strm->zalloc(strm->opaque, 1u, 7080u);
      if ( !v4 )
        return -4;
      v6 = windowBits;
      strm->state = (internal_state *)v4;
      if ( windowBits >= 0 )
      {
        *((_DWORD *)v4 + 2) = (windowBits >> 4) + 1;
        if ( windowBits < 48 )
          v6 = windowBits & 0xF;
      }
      else
      {
        *((_DWORD *)v4 + 2) = 0;
        v6 = -windowBits;
      }
      if ( (unsigned int)(v6 - 8) <= 7 )
      {
        *((_DWORD *)v4 + 7) = v6;
        *((_DWORD *)v4 + 11) = 0;
        return inflateReset(strm);
      }
      strm->zfree(strm->opaque, v4);
      strm->state = 0;
    }
    result = -2;
  }
  else
  {
    result = -6;
  }
  return result;
}

//----- (0073E3B0) --------------------------------------------------------
int __cdecl inflateInit_(z_stream_s *strm, const char *version, int stream_size)
{
  return inflateInit2_(strm, 15, version, stream_size);
}

//----- (0073E3D0) --------------------------------------------------------
int __usercall updatewindow<eax>(z_stream_s *strm<ebx>, unsigned int out<eax>)
{
  internal_state *v2; // esi@1
  unsigned int v3; // edi@1
  void *v4; // eax@2
  int result; // eax@3
  int v6; // ecx@5
  unsigned int v7; // edi@6
  int v8; // eax@6
  unsigned int v9; // eax@8
  unsigned int v10; // edi@10
  int v11; // edx@11
  int v12; // eax@12
  int v13; // edx@14
  unsigned int dist; // [sp+8h] [bp-4h]@8

  v2 = strm->state;
  v3 = out;
  if ( v2[11].dummy || (v4 = strm->zalloc(strm->opaque, 1 << v2[7].dummy, 1u), (v2[11].dummy = (int)v4) != 0) )
  {
    if ( !v2[8].dummy )
    {
      v6 = v2[7].dummy;
      v2[10].dummy = 0;
      v2[9].dummy = 0;
      v2[8].dummy = 1 << v6;
    }
    v7 = v3 - strm->avail_out;
    v8 = v2[8].dummy;
    if ( v7 < v8 )
    {
      v9 = v8 - v2[10].dummy;
      dist = v9;
      if ( v9 > v7 )
      {
        dist = v7;
        v9 = v7;
      }
      memcpy((char *)(v2[10].dummy + v2[11].dummy), &strm->next_out[-v7], v9);
      v10 = v7 - dist;
      if ( v10 )
      {
        memcpy((char *)v2[11].dummy, &strm->next_out[-v10], v10);
        v11 = v2[8].dummy;
        v2[10].dummy = v10;
        v2[9].dummy = v11;
        result = 0;
      }
      else
      {
        v12 = v2[8].dummy;
        v2[10].dummy += dist;
        if ( v2[10].dummy == v12 )
          v2[10].dummy = 0;
        v13 = v2[9].dummy;
        if ( v13 < (unsigned int)v12 )
          v2[9].dummy = dist + v13;
        result = 0;
      }
    }
    else
    {
      memcpy((char *)v2[11].dummy, &strm->next_out[-v8], v2[8].dummy);
      v2[9].dummy = v2[8].dummy;
      v2[10].dummy = 0;
      result = 0;
    }
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (0073E4F0) --------------------------------------------------------
int __cdecl inflate(z_stream_s *strm, int flush)
{
  z_stream_s *v2; // edx@1
  internal_state *v3; // edi@2
  char *v4; // eax@8
  unsigned int v5; // ecx@8
  unsigned int v6; // ebx@8
  unsigned int v7; // ecx@8
  char *v8; // eax@8
  unsigned int v9; // esi@8
  int result; // eax@9
  int v11; // edx@17
  int v12; // edx@17
  int v13; // eax@18
  unsigned int v14; // eax@27
  int v15; // edx@31
  int v16; // edx@31
  int v17; // edx@41
  int v18; // edx@41
  int v19; // edx@47
  int v20; // edx@47
  int v21; // edx@54
  int v22; // edx@54
  bool v23; // zf@55
  unsigned int v24; // ecx@60
  unsigned int v25; // eax@64
  unsigned int v26; // ecx@70
  int v27; // edx@71
  unsigned int v28; // eax@74
  unsigned int v29; // ecx@79
  int v30; // edx@80
  unsigned int v31; // eax@83
  int v32; // edx@89
  int v33; // edx@89
  unsigned int v34; // eax@93
  int v35; // edx@96
  int v36; // edx@96
  unsigned int v37; // ecx@97
  unsigned int v38; // eax@99
  int v39; // ecx@102
  int v40; // edx@105
  int v41; // edx@105
  int v42; // ecx@106
  unsigned int v43; // ebx@106
  int v44; // ecx@112
  int v45; // edx@114
  int v46; // edx@114
  int v47; // ecx@115
  unsigned int v48; // ecx@118
  int v49; // edx@127
  int v50; // edx@127
  int v51; // ecx@128
  unsigned int v52; // ebx@128
  char v53; // dl@128
  int v54; // edx@128
  int v55; // ecx@128
  bool v56; // cf@128
  int v57; // edx@134
  int v58; // edx@134
  int v59; // eax@138
  code v60; // ecx@143
  unsigned int v61; // edx@143
  int v62; // edx@145
  int v63; // edx@145
  signed int v64; // edx@145
  int v65; // ecx@145
  int v66; // edx@149
  int v67; // edx@149
  int v68; // ecx@150
  int v69; // ecx@151
  int v70; // edx@154
  int v71; // edx@154
  int v72; // ecx@155
  int v73; // ecx@156
  int v74; // edx@160
  int v75; // edx@160
  unsigned int v76; // ebx@161
  signed int v77; // edx@161
  int v78; // edx@164
  int v79; // edx@164
  unsigned int v80; // ebx@165
  int v81; // edx@166
  int v82; // edx@169
  unsigned int v83; // edx@172
  int v84; // ecx@176
  unsigned int v85; // edx@181
  unsigned int v86; // ecx@181
  void *v87; // edx@181
  code v88; // edx@182
  unsigned int v89; // ecx@182
  int v90; // edx@184
  int v91; // edx@184
  signed int v92; // edx@184
  int v93; // ecx@184
  int v94; // edx@189
  int v95; // ecx@198
  int v96; // edx@201
  int v97; // edx@201
  int v98; // ecx@202
  code v99; // edx@204
  unsigned int v100; // ecx@204
  int v101; // edx@206
  int v102; // edx@206
  signed int v103; // edx@206
  int v104; // ecx@206
  int v105; // edx@210
  int v106; // ecx@215
  int v107; // edx@218
  int v108; // edx@218
  int v109; // ecx@219
  unsigned int v110; // ecx@224
  int v111; // ecx@225
  int v112; // edx@225
  int v113; // ecx@226
  int v114; // edx@226
  int v115; // edx@226
  int v116; // edx@230
  int v117; // edx@234
  int v118; // ecx@234
  int v119; // edx@244
  int v120; // edx@244
  unsigned int v121; // ecx@245
  unsigned int v122; // eax@247
  int v123; // ecx@250
  int v124; // edx@260
  int v125; // edx@260
  unsigned int v126; // eax@266
  unsigned int v127; // ecx@266
  unsigned int v128; // edx@271
  unsigned int v129; // eax@271
  z_stream_s *v130; // esi@277
  unsigned int v131; // eax@277
  unsigned int v132; // ebx@277
  unsigned int v133; // eax@280
  unsigned int v134; // [sp-14h] [bp-48h]@246
  const char *v135; // [sp-10h] [bp-44h]@246
  unsigned int in; // [sp+4h] [bp-30h]@8
  unsigned int ina; // [sp+4h] [bp-30h]@277
  int from; // [sp+8h] [bp-2Ch]@228
  int froma; // [sp+8h] [bp-2Ch]@234
  signed int ret; // [sp+Ch] [bp-28h]@8
  int last; // [sp+10h] [bp-24h]@151
  unsigned int lasta; // [sp+10h] [bp-24h]@187
  unsigned int lastb; // [sp+10h] [bp-24h]@208
  int lastc; // [sp+10h] [bp-24h]@228
  int len; // [sp+14h] [bp-20h]@71
  int lena; // [sp+14h] [bp-20h]@80
  __int16 lenb; // [sp+14h] [bp-20h]@156
  unsigned int out; // [sp+18h] [bp-1Ch]@8
  char *put; // [sp+1Ch] [bp-18h]@8
  char hbuf[4]; // [sp+20h] [bp-14h]@20
  unsigned int left; // [sp+24h] [bp-10h]@8
  unsigned int this; // [sp+28h] [bp-Ch]@60
  char *next; // [sp+2Ch] [bp-8h]@8
  unsigned int have; // [sp+30h] [bp-4h]@8

  v2 = strm;
  if ( !strm || (v3 = strm->state) == 0 || !strm->next_out || !strm->next_in && strm->avail_in )
    return -2;
  if ( v3->dummy == 11 )
    v3->dummy = 12;
  v4 = strm->next_out;
  left = strm->avail_out;
  v5 = strm->avail_in;
  have = v5;
  in = v5;
  v6 = v3[12].dummy;
  out = left;
  v7 = v3->dummy;
  put = v4;
  v8 = strm->next_in;
  v9 = v3[13].dummy;
  next = strm->next_in;
  ret = 0;
  if ( v7 > 0x1C )
    return -2;
  while ( 2 )
  {
    switch ( v7 )
    {
      case 0u:
        if ( v3[2].dummy )
        {
          if ( v9 < 0x10 )
          {
            while ( have )
            {
              v11 = (unsigned __int8)*v8;
              --have;
              v12 = v11 << v9;
              ++v8;
              v9 += 8;
              next = v8;
              v6 += v12;
              if ( v9 >= 0x10 )
                goto LABEL_18;
            }
            goto inf_leave;
          }
LABEL_18:
          v13 = v3[2].dummy;
          if ( v13 & 2 && v6 == 35615 )
          {
            v3[5].dummy = crc32(0, 0, 0);
            *(_WORD *)hbuf = -29921;
            v3[5].dummy = crc32(v3[5].dummy, hbuf, 2u);
            v8 = next;
            v6 = 0;
            v9 = 0;
            v3->dummy = 1;
          }
          else
          {
            v3[4].dummy = 0;
            if ( !(v13 & 1) || ((v6 >> 8) + ((unsigned __int8)v6 << 8)) % 0x1F )
            {
              v8 = next;
              strm->msg = "incorrect header check";
              goto LABEL_263;
            }
            if ( (v6 & 0xF) != 8 )
            {
              strm->msg = "unknown compression method";
              v8 = next;
              goto LABEL_263;
            }
            v6 >>= 4;
            v9 -= 4;
            if ( (v6 & 0xF) + 8 > v3[7].dummy )
            {
              v8 = next;
              strm->msg = "invalid window size";
              goto LABEL_263;
            }
            v14 = adler32(0, 0, 0);
            v3[5].dummy = v14;
            strm->adler = v14;
            v8 = next;
            v3->dummy = ~BYTE1(v6) & 2 | 9;
            v6 = 0;
            v9 = 0;
          }
        }
        else
        {
          v3->dummy = 12;
        }
        goto LABEL_264;
      case 1u:
        if ( v9 >= 0x10 )
          goto LABEL_32;
        do
        {
          if ( !have )
            goto inf_leave;
          v15 = (unsigned __int8)*v8;
          --have;
          v16 = v15 << v9;
          ++v8;
          v9 += 8;
          next = v8;
          v6 += v16;
        }
        while ( v9 < 0x10 );
LABEL_32:
        v3[4].dummy = v6;
        if ( (_BYTE)v6 != 8 )
        {
          strm->msg = "unknown compression method";
          goto LABEL_263;
        }
        if ( v6 & 0xE000 )
        {
          strm->msg = "unknown header flags set";
          goto LABEL_263;
        }
        if ( v6 & 0x200 )
        {
          hbuf[0] = 8;
          hbuf[1] = BYTE1(v6);
          v3[5].dummy = crc32(v3[5].dummy, hbuf, 2u);
          v8 = next;
        }
        v6 = 0;
        v9 = 0;
        v3->dummy = 2;
        do
        {
LABEL_40:
          if ( !have )
            goto inf_leave;
          v17 = (unsigned __int8)*v8;
          --have;
          v18 = v17 << v9;
          ++v8;
          v9 += 8;
          next = v8;
          v6 += v18;
        }
        while ( v9 < 0x20 );
LABEL_42:
        if ( v3[4].dummy & 0x200 )
        {
          *(_WORD *)hbuf = v6;
          hbuf[2] = v6 >> 16;
          hbuf[3] = BYTE3(v6);
          v3[5].dummy = crc32(v3[5].dummy, hbuf, 4u);
          v8 = next;
        }
        v6 = 0;
        v9 = 0;
        v3->dummy = 3;
        do
        {
LABEL_46:
          if ( !have )
            goto inf_leave;
          v19 = (unsigned __int8)*v8;
          --have;
          v20 = v19 << v9;
          ++v8;
          v9 += 8;
          next = v8;
          v6 += v20;
        }
        while ( v9 < 0x10 );
LABEL_48:
        if ( v3[4].dummy & 0x200 )
        {
          *(_WORD *)hbuf = v6;
          v3[5].dummy = crc32(v3[5].dummy, hbuf, 2u);
          v8 = next;
        }
        v6 = 0;
        v9 = 0;
        v3->dummy = 4;
$LN720_0:
        if ( !(v3[4].dummy & 0x400) )
          goto LABEL_58;
        if ( v9 < 0x10 )
        {
          while ( have )
          {
            v21 = (unsigned __int8)*v8;
            --have;
            v22 = v21 << v9;
            ++v8;
            v9 += 8;
            next = v8;
            v6 += v22;
            if ( v9 >= 0x10 )
              goto LABEL_55;
          }
          goto inf_leave;
        }
LABEL_55:
        v23 = (v3[4].dummy & 0x200) == 0;
        v3[14].dummy = v6;
        if ( !v23 )
        {
          *(_WORD *)hbuf = v6;
          v3[5].dummy = crc32(v3[5].dummy, hbuf, 2u);
          v8 = next;
        }
        v6 = 0;
        v9 = 0;
LABEL_58:
        v3->dummy = 5;
$LN721:
        if ( v3[4].dummy & 0x400 )
        {
          v24 = v3[14].dummy;
          this = v24;
          if ( v24 > have )
          {
            v24 = have;
            this = have;
          }
          if ( v24 )
          {
            if ( v3[4].dummy & 0x200 )
            {
              v25 = crc32(v3[5].dummy, next, this);
              v24 = this;
              v3[5].dummy = v25;
              v8 = next;
            }
            have -= v24;
            v8 += v24;
            v3[14].dummy -= v24;
            next = v8;
          }
          if ( v3[14].dummy )
            goto inf_leave;
        }
        v3->dummy = 6;
$LN363_2:
        if ( v3[4].dummy & 0x800 )
        {
          if ( !have )
            goto inf_leave;
          v26 = 0;
          do
          {
            v27 = (unsigned __int8)v8[v26++];
            len = v27;
          }
          while ( v27 && v26 < have );
          v23 = (v3[4].dummy & 0x2000) == 0;
          this = v26;
          if ( !v23 )
          {
            v28 = crc32(v3[5].dummy, next, v26);
            v26 = this;
            v3[5].dummy = v28;
            v8 = next;
          }
          have -= v26;
          v8 += v26;
          next = v8;
          if ( len )
            goto inf_leave;
        }
        v3->dummy = 7;
$LN354_2:
        if ( v3[4].dummy & 0x1000 )
        {
          if ( !have )
            goto inf_leave;
          v29 = 0;
          do
          {
            v30 = (unsigned __int8)v8[v29++];
            lena = v30;
          }
          while ( v30 && v29 < have );
          v23 = (v3[4].dummy & 0x2000) == 0;
          this = v29;
          if ( !v23 )
          {
            v31 = crc32(v3[5].dummy, next, v29);
            v29 = this;
            v3[5].dummy = v31;
            v8 = next;
          }
          have -= v29;
          v8 += v29;
          next = v8;
          if ( lena )
            goto inf_leave;
        }
        v3->dummy = 8;
$LN345_0:
        if ( v3[4].dummy & 0x200 )
        {
          if ( v9 < 0x10 )
          {
            while ( have )
            {
              v32 = (unsigned __int8)*v8;
              --have;
              v33 = v32 << v9;
              ++v8;
              v9 += 8;
              next = v8;
              v6 += v33;
              if ( v9 >= 0x10 )
                goto LABEL_90;
            }
            goto inf_leave;
          }
LABEL_90:
          if ( v6 != LOWORD(v3[5].dummy) )
          {
            strm->msg = "header crc mismatch";
            goto LABEL_263;
          }
          v6 = 0;
          v9 = 0;
        }
        v34 = crc32(0, 0, 0);
        v3[5].dummy = v34;
        strm->adler = v34;
        v8 = next;
        v3->dummy = 11;
        goto LABEL_264;
      case 2u:
        if ( v9 < 0x20 )
          goto LABEL_40;
        goto LABEL_42;
      case 3u:
        if ( v9 < 0x10 )
          goto LABEL_46;
        goto LABEL_48;
      case 4u:
        goto $LN720_0;
      case 5u:
        goto $LN721;
      case 6u:
        goto $LN363_2;
      case 7u:
        goto $LN354_2;
      case 8u:
        goto $LN345_0;
      case 9u:
        if ( v9 >= 0x20 )
          goto LABEL_97;
        do
        {
          if ( !have )
            goto inf_leave;
          v35 = (unsigned __int8)*v8;
          --have;
          v36 = v35 << v9;
          ++v8;
          v9 += 8;
          next = v8;
          v6 += v36;
        }
        while ( v9 < 0x20 );
LABEL_97:
        v2 = strm;
        v37 = (v6 >> 24) + ((v6 >> 8) & 0xFF00) + (((v6 << 16) + (unsigned __int16)(v6 & 0xFF00)) << 8);
        v3[5].dummy = v37;
        strm->adler = v37;
        v6 = 0;
        v9 = 0;
        v3->dummy = 10;
$LN317_0:
        if ( !v3[3].dummy )
        {
          v2->next_in = v8;
          v126 = have;
          v2->next_out = put;
          v127 = left;
          v2->avail_in = v126;
          v2->avail_out = v127;
          v3[13].dummy = v9;
          v3[12].dummy = v6;
          return 2;
        }
        v38 = adler32(0, 0, 0);
        v3[5].dummy = v38;
        strm->adler = v38;
        v8 = next;
        v3->dummy = 11;
$LN312_2:
        if ( flush == 5 )
          goto inf_leave;
$LN311_2:
        if ( v3[1].dummy )
        {
          v39 = v9 & 7;
          v6 >>= v39;
          v9 -= v39;
          v3->dummy = 24;
        }
        else
        {
          if ( v9 < 3 )
          {
            while ( have )
            {
              v40 = (unsigned __int8)*v8;
              --have;
              v41 = v40 << v9;
              ++v8;
              v9 += 8;
              next = v8;
              v6 += v41;
              if ( v9 >= 3 )
                goto LABEL_106;
            }
            goto inf_leave;
          }
LABEL_106:
          v42 = v6 & 1;
          v43 = v6 >> 1;
          v3[1].dummy = v42;
          switch ( v43 & 3 )
          {
            case 0u:
              v6 = v43 >> 2;
              v3->dummy = 13;
              v9 -= 3;
              break;
            case 1u:
              v6 = v43 >> 2;
              v3[17].dummy = (int)"`\a";
              v3[19].dummy = 9;
              v3[18].dummy = (int)&unk_9D9C18;
              v3[20].dummy = 5;
              v3->dummy = 18;
              v9 -= 3;
              break;
            case 2u:
              v6 = v43 >> 2;
              v3->dummy = 15;
              v9 -= 3;
              break;
            case 3u:
              strm->msg = "invalid block type";
              v3->dummy = 27;
              goto LABEL_111;
            default:
LABEL_111:
              v6 = v43 >> 2;
              v9 -= 3;
              break;
          }
        }
        goto LABEL_264;
      case 0xAu:
        goto $LN317_0;
      case 0xBu:
        goto $LN312_2;
      case 0xCu:
        goto $LN311_2;
      case 0xDu:
        v44 = v9 & 7;
        v9 -= v44;
        v6 >>= v44;
        if ( v9 >= 0x20 )
          goto LABEL_115;
        do
        {
          if ( !have )
            goto inf_leave;
          v45 = (unsigned __int8)*v8;
          --have;
          v46 = v45 << v9;
          ++v8;
          v9 += 8;
          next = v8;
          v6 += v46;
        }
        while ( v9 < 0x20 );
LABEL_115:
        v47 = (unsigned __int16)v6;
        if ( (unsigned __int16)v6 != ~v6 >> 16 )
        {
          strm->msg = "invalid stored block lengths";
          goto LABEL_263;
        }
        v6 = 0;
        v3[14].dummy = v47;
        v9 = 0;
        v3->dummy = 14;
$LN723_0:
        v48 = v3[14].dummy;
        this = v48;
        if ( !v48 )
          goto LABEL_194;
        if ( v48 > have )
        {
          v48 = have;
          this = have;
        }
        if ( v48 > left )
        {
          v48 = left;
          this = left;
        }
        if ( !v48 )
          goto inf_leave;
        memcpy(put, next, this);
        have -= this;
        next += this;
        left -= this;
        put += this;
        v3[14].dummy -= this;
        v8 = next;
        goto LABEL_264;
      case 0xEu:
        goto $LN723_0;
      case 0xFu:
        if ( v9 >= 0xE )
          goto LABEL_128;
        do
        {
          if ( !have )
            goto inf_leave;
          v49 = (unsigned __int8)*v8;
          --have;
          v50 = v49 << v9;
          ++v8;
          v9 += 8;
          next = v8;
          v6 += v50;
        }
        while ( v9 < 0xE );
LABEL_128:
        v51 = v6 & 0x1F;
        v52 = v6 >> 5;
        v53 = v52;
        v3[22].dummy = v51 + 257;
        v52 >>= 5;
        v54 = (v53 & 0x1F) + 1;
        v55 = (v52 & 0xF) + 4;
        v6 = v52 >> 4;
        v9 -= 14;
        v56 = v3[22].dummy < 0x11Eu;
        v23 = v3[22].dummy == 286;
        v3[23].dummy = v54;
        v3[21].dummy = v55;
        if ( !(v56 | v23) || (unsigned int)v54 > 0x1E )
        {
          strm->msg = "too many length or distance symbols";
          goto LABEL_263;
        }
        v3[24].dummy = 0;
        v3->dummy = 16;
$LN502_0:
        if ( (unsigned int)v3[24].dummy < v3[21].dummy )
        {
          while ( v9 >= 3 )
          {
LABEL_135:
            *((_WORD *)&v3[26].dummy + order[v3[24].dummy++]) = v6 & 7;
            v6 >>= 3;
            v9 -= 3;
            if ( (unsigned int)v3[24].dummy >= v3[21].dummy )
              goto LABEL_136;
          }
          while ( have )
          {
            v57 = (unsigned __int8)*v8;
            --have;
            v58 = v57 << v9;
            ++v8;
            v9 += 8;
            next = v8;
            v6 += v58;
            if ( v9 >= 3 )
              goto LABEL_135;
          }
          goto inf_leave;
        }
LABEL_136:
        while ( v3[24].dummy < 0x13u )
          *((_WORD *)&v3[26].dummy + order[v3[24].dummy++]) = 0;
        v3[25].dummy = (int)&v3[330];
        v3[17].dummy = (int)&v3[330];
        v3[19].dummy = 7;
        v59 = inflate_table(
                0,
                (unsigned __int16 *)&v3[26],
                0x13u,
                (code **)&v3[25],
                (unsigned int *)&v3[19],
                (unsigned __int16 *)&v3[186]);
        ret = v59;
        v23 = v59 == 0;
        v8 = next;
        if ( !v23 )
        {
          strm->msg = "invalid code lengths set";
          goto LABEL_263;
        }
        v3[24].dummy = 0;
        v3->dummy = 17;
$LN724_0:
        if ( v3[24].dummy < (unsigned int)(v3[22].dummy + v3[23].dummy) )
        {
          while ( 1 )
          {
            v60 = *(code *)(v3[17].dummy + 4 * (v6 & ((1 << v3[19].dummy) - 1)));
            v61 = (unsigned __int8)(*(_WORD *)(v3[17].dummy + 4 * (v6 & ((1 << v3[19].dummy) - 1))) >> 8);
            this = *(_DWORD *)(v3[17].dummy + 4 * (v6 & ((1 << v3[19].dummy) - 1)));
            if ( v61 > v9 )
              break;
LABEL_146:
            if ( *(unsigned int *)&v60 >> 16 >= 0x10 )
            {
              v69 = (unsigned __int8)v60.bits;
              last = v69;
              if ( HIWORD(this) == 16 )
              {
                if ( v9 < v69 + 2 )
                {
                  while ( have )
                  {
                    v70 = (unsigned __int8)*v8;
                    --have;
                    v71 = v70 << v9;
                    v69 = last;
                    ++v8;
                    v9 += 8;
                    v6 += v71;
                    next = v8;
                    if ( v9 >= last + 2 )
                      goto LABEL_155;
                  }
                  goto inf_leave;
                }
LABEL_155:
                v6 >>= v69;
                v9 -= v69;
                v72 = v3[24].dummy;
                if ( !v72 )
                {
                  strm->msg = "invalid bit length repeat";
                  goto LABEL_263;
                }
                lenb = *((_WORD *)&v3[25].dummy + v72 + 1);
                v73 = (v6 & 3) + 3;
                v6 >>= 2;
                this = v73;
                v9 -= 2;
              }
              else
              {
                if ( HIWORD(this) == 17 )
                {
                  if ( v9 < v69 + 3 )
                  {
                    while ( have )
                    {
                      v74 = (unsigned __int8)*v8;
                      --have;
                      v75 = v74 << v9;
                      v69 = last;
                      ++v8;
                      v9 += 8;
                      v6 += v75;
                      next = v8;
                      if ( v9 >= last + 3 )
                        goto LABEL_161;
                    }
                    goto inf_leave;
                  }
LABEL_161:
                  v76 = v6 >> v69;
                  this = (v76 & 7) + 3;
                  v6 = v76 >> 3;
                  v77 = -3;
                }
                else
                {
                  if ( v9 < v69 + 7 )
                  {
                    while ( have )
                    {
                      v78 = (unsigned __int8)*v8;
                      --have;
                      v79 = v78 << v9;
                      v69 = last;
                      ++v8;
                      v9 += 8;
                      v6 += v79;
                      next = v8;
                      if ( v9 >= last + 7 )
                        goto LABEL_165;
                    }
                    goto inf_leave;
                  }
LABEL_165:
                  v80 = v6 >> v69;
                  this = (v80 & 0x7F) + 11;
                  v6 = v80 >> 7;
                  v77 = -7;
                }
                v81 = v77 - v69;
                v73 = this;
                v9 += v81;
                lenb = 0;
              }
              if ( v73 + v3[24].dummy > (unsigned int)(v3[22].dummy + v3[23].dummy) )
              {
                strm->msg = "invalid bit length repeat";
                goto LABEL_263;
              }
              for ( ; this; ++v3[24].dummy )
              {
                v82 = v3[24].dummy;
                --this;
                *((_WORD *)&v3[26].dummy + v82) = lenb;
              }
            }
            else
            {
              if ( v9 < (unsigned __int8)v60.bits )
              {
                while ( have )
                {
                  v66 = (unsigned __int8)*v8;
                  --have;
                  v67 = v66 << v9;
                  v60.bits = BYTE1(this);
                  ++v8;
                  v9 += 8;
                  v6 += v67;
                  next = v8;
                  if ( v9 >= BYTE1(this) )
                    goto LABEL_150;
                }
                goto inf_leave;
              }
LABEL_150:
              v68 = (unsigned __int8)v60.bits;
              v6 >>= v68;
              v9 -= v68;
              *((_WORD *)&v3[26].dummy + v3[24].dummy++) = HIWORD(this);
            }
            if ( v3[24].dummy >= (unsigned int)(v3[22].dummy + v3[23].dummy) )
              goto LABEL_171;
          }
          while ( have )
          {
            v62 = (unsigned __int8)*v8;
            --have;
            v63 = v62 << v9;
            ++v8;
            v9 += 8;
            v6 += v63;
            v64 = 1 << v3[19].dummy;
            v65 = v3[17].dummy;
            next = v8;
            v60 = *(code *)(v65 + 4 * (v6 & (v64 - 1)));
            this = (unsigned int)v60;
            if ( (unsigned __int8)v60.bits <= v9 )
              goto LABEL_146;
          }
          goto inf_leave;
        }
LABEL_171:
        if ( v3->dummy == 27 )
          goto LABEL_264;
        v3[25].dummy = (int)&v3[330];
        v3[17].dummy = (int)&v3[330];
        v83 = v3[22].dummy;
        v3[19].dummy = 9;
        ret = inflate_table(
                LENS,
                (unsigned __int16 *)&v3[26],
                v83,
                (code **)&v3[25],
                (unsigned int *)&v3[19],
                (unsigned __int16 *)&v3[186]);
        if ( ret )
        {
          v8 = next;
          strm->msg = "invalid literal/lengths set";
          goto LABEL_263;
        }
        v3[18].dummy = v3[25].dummy;
        v84 = v3[22].dummy;
        v3[20].dummy = 6;
        ret = inflate_table(
                DISTS,
                (unsigned __int16 *)&v3[26] + v84,
                v3[23].dummy,
                (code **)&v3[25],
                (unsigned int *)&v3[20],
                (unsigned __int16 *)&v3[186]);
        if ( ret )
        {
          strm->msg = "invalid distances set";
          v8 = next;
          goto LABEL_263;
        }
        v8 = next;
        v3->dummy = 18;
$LN725_0:
        if ( have >= 6 && left >= 0x102 )
        {
          v85 = left;
          strm->next_out = put;
          strm->next_in = next;
          strm->avail_out = v85;
          strm->avail_in = have;
          v3[12].dummy = v6;
          v3[13].dummy = v9;
          inflate_fast(strm, out);
          v86 = strm->avail_out;
          v6 = v3[12].dummy;
          v9 = v3[13].dummy;
          put = strm->next_out;
          v87 = strm->next_in;
          have = strm->avail_in;
          left = v86;
          next = (char *)v87;
          v8 = (char *)v87;
          goto LABEL_264;
        }
        v88 = *(code *)(v3[17].dummy + 4 * (v6 & ((1 << v3[19].dummy) - 1)));
        v89 = (unsigned __int8)(*(_WORD *)(v3[17].dummy + 4 * (v6 & ((1 << v3[19].dummy) - 1))) >> 8);
        this = *(_DWORD *)(v3[17].dummy + 4 * (v6 & ((1 << v3[19].dummy) - 1)));
        if ( v89 > v9 )
        {
          while ( have )
          {
            v90 = (unsigned __int8)*v8;
            --have;
            v91 = v90 << v9;
            ++v8;
            v9 += 8;
            v6 += v91;
            v92 = 1 << v3[19].dummy;
            v93 = v3[17].dummy;
            next = v8;
            v88 = *(code *)(v93 + 4 * (v6 & (v92 - 1)));
            this = (unsigned int)v88;
            if ( (unsigned __int8)v88.bits <= v9 )
              goto LABEL_185;
          }
          goto inf_leave;
        }
LABEL_185:
        if ( v88.op && !(v88.op & 0xF0) )
        {
          lasta = (unsigned int)v88;
          this = *(_DWORD *)(v3[17].dummy + 4 * ((this >> 16) + ((v6 & ((1 << (v88.bits + v88.op)) - 1)) >> v88.bits)));
          if ( (unsigned __int8)v88.bits + (unsigned int)BYTE1(this) > v9 )
          {
            while ( have )
            {
              v94 = (unsigned __int8)*v8 << v9;
              --have;
              ++v8;
              v6 += v94;
              v9 += 8;
              next = v8;
              this = *(_DWORD *)(v3[17].dummy
                               + 4 * (HIWORD(lasta) + ((v6 & ((1 << (BYTE1(lasta) + lasta)) - 1)) >> SBYTE1(lasta))));
              if ( BYTE1(lasta) + (unsigned int)BYTE1(this) <= v9 )
                goto LABEL_190;
            }
            goto inf_leave;
          }
LABEL_190:
          v88 = (code)this;
          v6 >>= SBYTE1(lasta);
          v9 -= BYTE1(lasta);
        }
        v6 >>= v88.bits;
        v9 -= (unsigned __int8)v88.bits;
        v3[14].dummy = *(unsigned int *)&v88 >> 16;
        if ( !v88.op )
        {
          v3->dummy = 23;
          goto LABEL_264;
        }
        if ( v88.op & 0x20 )
        {
LABEL_194:
          v3->dummy = 11;
          goto LABEL_264;
        }
        if ( v88.op & 0x40 )
        {
          strm->msg = "invalid literal/length code";
          goto LABEL_263;
        }
        v3[16].dummy = v88.op & 0xF;
        v3->dummy = 19;
$LN680_1:
        v95 = v3[16].dummy;
        if ( v95 )
        {
          if ( v9 < v95 )
          {
            while ( have )
            {
              v96 = (unsigned __int8)*v8;
              --have;
              v97 = v96 << v9;
              ++v8;
              v9 += 8;
              next = v8;
              v6 += v97;
              if ( v9 >= v3[16].dummy )
                goto LABEL_202;
            }
            goto inf_leave;
          }
LABEL_202:
          v98 = v3[16].dummy;
          v3[14].dummy += v6 & ((1 << v98) - 1);
          v6 >>= v98;
          v9 -= v98;
        }
        v3->dummy = 20;
$LN681_2:
        v99 = *(code *)(v3[18].dummy + 4 * (v6 & ((1 << v3[20].dummy) - 1)));
        v100 = (unsigned __int8)(*(_WORD *)(v3[18].dummy + 4 * (v6 & ((1 << v3[20].dummy) - 1))) >> 8);
        this = *(_DWORD *)(v3[18].dummy + 4 * (v6 & ((1 << v3[20].dummy) - 1)));
        if ( v100 > v9 )
        {
          while ( have )
          {
            v101 = (unsigned __int8)*v8;
            --have;
            v102 = v101 << v9;
            ++v8;
            v9 += 8;
            v6 += v102;
            v103 = 1 << v3[20].dummy;
            v104 = v3[18].dummy;
            next = v8;
            v99 = *(code *)(v104 + 4 * (v6 & (v103 - 1)));
            this = (unsigned int)v99;
            if ( (unsigned __int8)v99.bits <= v9 )
              goto LABEL_207;
          }
          goto inf_leave;
        }
LABEL_207:
        if ( !(v99.op & 0xF0) )
        {
          lastb = (unsigned int)v99;
          this = *(_DWORD *)(v3[18].dummy + 4 * ((this >> 16) + ((v6 & ((1 << (v99.bits + v99.op)) - 1)) >> v99.bits)));
          if ( (unsigned __int8)v99.bits + (unsigned int)BYTE1(this) > v9 )
          {
            while ( have )
            {
              v105 = (unsigned __int8)*v8 << v9;
              --have;
              ++v8;
              v6 += v105;
              v9 += 8;
              next = v8;
              this = *(_DWORD *)(v3[18].dummy
                               + 4 * (HIWORD(lastb) + ((v6 & ((1 << (BYTE1(lastb) + lastb)) - 1)) >> SBYTE1(lastb))));
              if ( BYTE1(lastb) + (unsigned int)BYTE1(this) <= v9 )
                goto LABEL_211;
            }
            goto inf_leave;
          }
LABEL_211:
          v99 = (code)this;
          v6 >>= SBYTE1(lastb);
          v9 -= BYTE1(lastb);
        }
        v6 >>= v99.bits;
        v9 -= (unsigned __int8)v99.bits;
        if ( v99.op & 0x40 )
        {
          strm->msg = "invalid distance code";
          goto LABEL_263;
        }
        v3[15].dummy = *(unsigned int *)&v99 >> 16;
        v3[16].dummy = v99.op & 0xF;
        v3->dummy = 21;
$LN682_1:
        v106 = v3[16].dummy;
        if ( v106 )
        {
          if ( v9 < v106 )
          {
            while ( have )
            {
              v107 = (unsigned __int8)*v8;
              --have;
              v108 = v107 << v9;
              ++v8;
              v9 += 8;
              next = v8;
              v6 += v108;
              if ( v9 >= v3[16].dummy )
                goto LABEL_219;
            }
            goto inf_leave;
          }
LABEL_219:
          v109 = v3[16].dummy;
          v3[15].dummy += v6 & ((1 << v109) - 1);
          v6 >>= v109;
          v9 -= v109;
        }
        if ( v3[15].dummy > out + v3[9].dummy - left )
        {
          strm->msg = "invalid distance too far back";
          goto LABEL_263;
        }
        v3->dummy = 22;
$LN683_2:
        if ( !left )
          goto inf_leave;
        v110 = v3[15].dummy;
        if ( v110 <= out - left )
        {
          v116 = (int)&put[-v110];
          v113 = v3[14].dummy;
          from = v116;
          lastc = v3[14].dummy;
          goto LABEL_231;
        }
        v111 = v110 - (out - left);
        v112 = v3[10].dummy;
        this = v111;
        if ( v111 <= (unsigned int)v112 )
        {
          v115 = v3[10].dummy + v3[11].dummy - v111;
          v113 = this;
        }
        else
        {
          v113 = v111 - v112;
          v114 = v3[8].dummy + v3[11].dummy;
          this = v113;
          v115 = v114 - v113;
        }
        from = v115;
        lastc = v3[14].dummy;
        if ( v113 > (unsigned int)lastc )
        {
          v113 = v3[14].dummy;
LABEL_231:
          this = v113;
        }
        if ( v113 > left )
        {
          v113 = left;
          this = left;
        }
        left -= v113;
        v117 = lastc - v113;
        v118 = from - (_DWORD)put;
        v3[14].dummy = v117;
        for ( froma = from - (_DWORD)put; ; v118 = froma )
        {
          *put = put[v118];
          v23 = this-- == 1;
          ++put;
          if ( v23 )
            break;
        }
        if ( !v3[14].dummy )
          v3->dummy = 18;
        goto LABEL_264;
      case 0x10u:
        goto $LN502_0;
      case 0x11u:
        goto $LN724_0;
      case 0x12u:
        goto $LN725_0;
      case 0x13u:
        goto $LN680_1;
      case 0x14u:
        goto $LN681_2;
      case 0x15u:
        goto $LN682_1;
      case 0x16u:
        goto $LN683_2;
      case 0x17u:
        if ( !left )
          goto inf_leave;
        *put = LOBYTE(v3[14].dummy);
        --left;
        ++put;
        v3->dummy = 18;
        goto LABEL_264;
      case 0x18u:
        if ( !v3[2].dummy )
          goto LABEL_255;
        if ( v9 >= 0x20 )
          goto LABEL_245;
        do
        {
          if ( !have )
            goto inf_leave;
          v119 = (unsigned __int8)*v8;
          --have;
          v120 = v119 << v9;
          ++v8;
          v9 += 8;
          next = v8;
          v6 += v120;
        }
        while ( v9 < 0x20 );
LABEL_245:
        v121 = out - left;
        strm->total_out += out - left;
        v3[6].dummy += v121;
        if ( v121 )
        {
          v135 = &put[-v121];
          v134 = v3[5].dummy;
          if ( v3[4].dummy )
            v122 = crc32(v134, v135, v121);
          else
            v122 = adler32(v134, v135, v121);
          v3[5].dummy = v122;
          strm->adler = v122;
          v8 = next;
        }
        out = left;
        v123 = v6;
        if ( !v3[4].dummy )
          v123 = (v6 >> 24) + ((v6 >> 8) & 0xFF00) + (((v6 << 16) + (unsigned __int16)(v6 & 0xFF00)) << 8);
        if ( v123 != v3[5].dummy )
        {
          strm->msg = "incorrect data check";
LABEL_263:
          v3->dummy = 27;
LABEL_264:
          v7 = v3->dummy;
          if ( v3->dummy > 0x1Cu )
            return -2;
          v2 = strm;
          continue;
        }
        v6 = 0;
        v9 = 0;
LABEL_255:
        v3->dummy = 25;
$LN727_0:
        if ( !v3[2].dummy || !v3[4].dummy )
          goto LABEL_268;
        if ( v9 < 0x20 )
        {
          while ( have )
          {
            v124 = (unsigned __int8)*v8;
            --have;
            v125 = v124 << v9;
            ++v8;
            v9 += 8;
            next = v8;
            v6 += v125;
            if ( v9 >= 0x20 )
              goto LABEL_261;
          }
          goto inf_leave;
        }
LABEL_261:
        if ( v6 != v3[6].dummy )
        {
          strm->msg = "incorrect length check";
          goto LABEL_263;
        }
        v6 = 0;
        v9 = 0;
LABEL_268:
        v3->dummy = 26;
$LN729_0:
        ret = 1;
inf_leave:
        strm->next_out = put;
        v128 = left;
        strm->next_in = v8;
        v129 = have;
        strm->avail_out = v128;
        strm->avail_in = v129;
        v23 = v3[8].dummy == 0;
        v3[12].dummy = v6;
        v3[13].dummy = v9;
        if ( v23 && (v3->dummy >= 24 || out == strm->avail_out) || !updatewindow(strm, out) )
        {
          v130 = strm;
          v131 = in - strm->avail_in;
          v132 = out - strm->avail_out;
          v130->total_in += v131;
          v130->total_out += v132;
          v3[6].dummy += v132;
          ina = v131;
          if ( v3[2].dummy && v132 )
          {
            if ( v3[4].dummy )
              v133 = crc32(v3[5].dummy, &strm->next_out[-v132], v132);
            else
              v133 = adler32(v3[5].dummy, &strm->next_out[-v132], v132);
            v3[5].dummy = v133;
            strm->adler = v133;
            v131 = ina;
          }
          strm->data_type = v3[13].dummy
                          + (unsigned __int8)(((v3->dummy != 11) - 1) & 0x80)
                          + (v3[1].dummy != 0 ? 0x40 : 0);
          if ( (v131 || v132) && flush != 4 )
          {
            result = ret;
          }
          else
          {
            result = ret;
            if ( !ret )
              result = -5;
          }
        }
        else
        {
          v3->dummy = 28;
LABEL_276:
          result = -4;
        }
        return result;
      case 0x19u:
        goto $LN727_0;
      case 0x1Au:
        goto $LN729_0;
      case 0x1Bu:
        ret = -3;
        goto inf_leave;
      case 0x1Cu:
        goto LABEL_276;
      default:
        return -2;
    }
  }
}

//----- (0073F840) --------------------------------------------------------
int __cdecl inflateEnd(z_stream_s *strm)
{
  internal_state *v1; // eax@2
  void (__cdecl *v2)(void *, void *); // ecx@3
  int v3; // eax@4
  int result; // eax@6

  if ( strm && (v1 = strm->state) != 0 && (v2 = strm->zfree) != 0 )
  {
    v3 = v1[11].dummy;
    if ( v3 )
      v2(strm->opaque, (void *)v3);
    strm->zfree(strm->opaque, strm->state);
    strm->state = 0;
    result = 0;
  }
  else
  {
    result = -2;
  }
  return result;
}

//----- (0073F890) --------------------------------------------------------
unsigned int __cdecl adler32(unsigned int adler, const char *buf, unsigned int len)
{
  const char *v3; // esi@1
  unsigned int v4; // ecx@1
  unsigned int v5; // edi@1
  unsigned int result; // eax@2
  unsigned int i; // ebx@3
  unsigned int v8; // eax@4
  unsigned int v9; // edx@7
  int v10; // ecx@8
  int v11; // edi@8
  int v12; // ecx@8
  int v13; // edi@8
  int v14; // ecx@8
  int v15; // edi@8
  int v16; // ecx@8
  int v17; // edi@8
  int v18; // ecx@8
  int v19; // edi@8
  int v20; // ecx@8
  int v21; // edi@8
  int v22; // ecx@8
  int v23; // edi@8
  int v24; // ecx@8
  int v25; // edi@8
  int v26; // ecx@8
  int v27; // edi@8
  int v28; // ecx@8
  int v29; // edi@8
  int v30; // ecx@8
  int v31; // edi@8
  int v32; // ecx@8
  int v33; // edi@8
  int v34; // ecx@8
  int v35; // edi@8
  int v36; // ecx@8
  int v37; // edi@8
  int v38; // ecx@8
  int v39; // edi@8

  v3 = buf;
  v4 = (unsigned __int16)adler;
  v5 = adler >> 16;
  if ( buf )
  {
    for ( i = len; i; v5 %= 0xFFF1u )
    {
      v8 = i;
      if ( i >= 0x15B0 )
        v8 = 5552;
      i -= v8;
      if ( (signed int)v8 >= 16 )
      {
        v9 = v8 >> 4;
        v8 += -16 * (v8 >> 4);
        do
        {
          v10 = (unsigned __int8)*v3 + v4;
          v11 = v10 + v5;
          v12 = (unsigned __int8)v3[1] + v10;
          v13 = v12 + v11;
          v14 = (unsigned __int8)v3[2] + v12;
          v15 = v14 + v13;
          v16 = (unsigned __int8)v3[3] + v14;
          v17 = v16 + v15;
          v18 = (unsigned __int8)v3[4] + v16;
          v19 = v18 + v17;
          v20 = (unsigned __int8)v3[5] + v18;
          v21 = v20 + v19;
          v22 = (unsigned __int8)v3[6] + v20;
          v23 = v22 + v21;
          v24 = (unsigned __int8)v3[7] + v22;
          v25 = v24 + v23;
          v26 = (unsigned __int8)v3[8] + v24;
          v27 = v26 + v25;
          v28 = (unsigned __int8)v3[9] + v26;
          v29 = v28 + v27;
          v30 = (unsigned __int8)v3[10] + v28;
          v31 = v30 + v29;
          v32 = (unsigned __int8)v3[11] + v30;
          v33 = v32 + v31;
          v34 = (unsigned __int8)v3[12] + v32;
          v35 = v34 + v33;
          v36 = (unsigned __int8)v3[13] + v34;
          v37 = v36 + v35;
          v38 = (unsigned __int8)v3[14] + v36;
          v39 = v38 + v37;
          v4 = (unsigned __int8)v3[15] + v38;
          v5 = v4 + v39;
          v3 += 16;
          --v9;
        }
        while ( v9 );
      }
      for ( ; v8; --v8 )
      {
        v4 += (unsigned __int8)*v3++;
        v5 += v4;
      }
      v4 %= 0xFFF1u;
    }
    result = v4 | (v5 << 16);
  }
  else
  {
    result = (unsigned int)(buf + 1);
  }
  return result;
}

//----- (0073F9D0) --------------------------------------------------------
void __usercall init_block(internal_state *s<edx>)
{
  internal_state *v1; // eax@1
  signed int v2; // ecx@1
  internal_state *v3; // eax@3
  signed int v4; // ecx@3
  internal_state *v5; // eax@5
  signed int v6; // ecx@5

  v1 = s + 35;
  v2 = 286;
  do
  {
    LOWORD(v1->dummy) = 0;
    ++v1;
    --v2;
  }
  while ( v2 );
  v3 = s + 608;
  v4 = 30;
  do
  {
    LOWORD(v3->dummy) = 0;
    ++v3;
    --v4;
  }
  while ( v4 );
  v5 = s + 669;
  v6 = 19;
  do
  {
    LOWORD(v5->dummy) = 0;
    ++v5;
    --v6;
  }
  while ( v6 );
  LOWORD(s[291].dummy) = 1;
  s[1449].dummy = 0;
  s[1448].dummy = 0;
  s[1450].dummy = 0;
  s[1446].dummy = 0;
}

//----- (0073FA50) --------------------------------------------------------
void __usercall pqdownheap(internal_state *s<eax>, ct_data_s *tree<edi>, int k)
{
  int v3; // edx@1
  int v4; // ecx@1
  bool v5; // sf@1
  unsigned __int8 v6; // of@1
  int v7; // esi@3
  unsigned __int16 v8; // dx@3
  unsigned __int16 v9; // bx@3
  int v10; // esi@7
  unsigned __int16 v11; // dx@7
  unsigned __int16 v12; // bx@7
  int v13; // edx@9
  int v14; // edx@10
  int v15; // esi@10
  int v; // [sp+8h] [bp-4h]@1

  v3 = s[1298].dummy;
  v4 = 2 * k;
  v = s[k + 725].dummy;
  v6 = __OFSUB__(2 * k, v3);
  v5 = 2 * k - v3 < 0;
  if ( 2 * k > v3 )
  {
    s[k + 725].dummy = s[k + 725].dummy;
  }
  else
  {
    while ( 1 )
    {
      if ( v5 ^ v6 )
      {
        v7 = s[v4 + 726].dummy;
        v8 = tree[v7].fc.freq;
        v9 = tree[s[v4 + 725].dummy].fc.freq;
        if ( v8 < v9 || v8 == v9 && *((_BYTE *)&s[1300].dummy + v7) <= *((_BYTE *)&s[1300].dummy + s[v4 + 725].dummy) )
          ++v4;
      }
      v10 = s[v4 + 725].dummy;
      v11 = tree[v].fc.freq;
      v12 = tree[v10].fc.freq;
      if ( v11 < v12 )
        break;
      if ( v11 == v12 )
      {
        v13 = v;
        if ( *((_BYTE *)&s[1300].dummy + v) <= *((_BYTE *)&s[1300].dummy + v10) )
          goto LABEL_13;
      }
      s[k + 725].dummy = v10;
      v14 = s[1298].dummy;
      v15 = v4;
      v4 *= 2;
      k = v15;
      v6 = __OFSUB__(v4, v14);
      v5 = v4 - v14 < 0;
      if ( v4 > v14 )
      {
        s[v15 + 725].dummy = v;
        return;
      }
    }
    v13 = v;
LABEL_13:
    s[k + 725].dummy = v13;
  }
}

//----- (0073FB30) --------------------------------------------------------
void __usercall gen_bitlen(internal_state *s<eax>, tree_desc_s *desc<ecx>)
{
  int v2; // edx@1
  ct_data_s *v3; // ebx@1
  static_tree_desc_s *v4; // ecx@1
  int v5; // edi@1
  int v6; // esi@1
  int v7; // ecx@1
  int v8; // edx@3
  int v9; // ecx@3
  int v10; // esi@6
  int v11; // edi@8
  char *v12; // edi@13
  int v13; // ecx@14
  char *i; // edx@14
  int v15; // edx@17
  int v16; // edi@19
  internal_state *v17; // esi@20
  int v18; // ecx@21
  int v19; // edi@22
  int v20; // esi@22
  ct_data_s *tree; // [sp+Ch] [bp-28h]@1
  int stree; // [sp+10h] [bp-24h]@1
  int extra; // [sp+14h] [bp-20h]@1
  internal_state *extraa; // [sp+14h] [bp-20h]@21
  int base; // [sp+18h] [bp-1Ch]@1
  int max_code; // [sp+1Ch] [bp-18h]@1
  int v27; // [sp+20h] [bp-14h]@2
  char *v28; // [sp+20h] [bp-14h]@18
  signed int h; // [sp+24h] [bp-10h]@2
  internal_state *n; // [sp+28h] [bp-Ch]@2
  int na; // [sp+28h] [bp-Ch]@19
  int overflow; // [sp+2Ch] [bp-8h]@1
  int max_length; // [sp+30h] [bp-4h]@1

  v2 = desc->max_code;
  v3 = desc->dyn_tree;
  v4 = desc->stat_desc;
  max_code = v2;
  stree = v4->dummy;
  extra = v4[1].dummy;
  v5 = v4[4].dummy;
  base = v4[2].dummy;
  s[717].dummy = 0;
  s[718].dummy = 0;
  s[719].dummy = 0;
  s[720].dummy = 0;
  s[721].dummy = 0;
  s[722].dummy = 0;
  s[723].dummy = 0;
  s[724].dummy = 0;
  v3[s[s[1299].dummy + 725].dummy].dl.dad = 0;
  v6 = 0;
  v7 = s[1299].dummy + 1;
  tree = v3;
  max_length = v5;
  overflow = 0;
  if ( v7 < 573 )
  {
    n = &s[v7 + 725];
    v27 = 573 - v7;
    h = 573;
    do
    {
      v8 = n->dummy;
      v9 = v3[v3[n->dummy].dl.dad].dl.dad + 1;
      if ( v9 > v5 )
      {
        ++v6;
        v9 = v5;
        overflow = v6;
      }
      v3[v8].dl.dad = v9;
      if ( v8 <= max_code )
      {
        ++*((_WORD *)&s[717].dummy + v9);
        v10 = 0;
        if ( v8 >= base )
          v10 = *(_DWORD *)(extra + 4 * (v8 - base));
        v11 = v3[v8].fc.freq;
        s[1448].dummy += v11 * (v10 + v9);
        if ( stree )
          s[1449].dummy += v11 * (v10 + *(_WORD *)(stree + 4 * v8 + 2));
        v5 = max_length;
        v6 = overflow;
      }
      ++n;
      --v27;
    }
    while ( v27 );
    if ( v6 )
    {
      v12 = (char *)&s[717] + 2 * v5;
      do
      {
        v13 = max_length - 1;
        for ( i = (char *)&s[717] + 2 * (max_length - 1); !*(_WORD *)i; --v13 )
          i -= 2;
        *((_WORD *)&s[717].dummy + v13 + 1) += 2;
        --*((_WORD *)&s[717].dummy + v13);
        --*(_WORD *)v12;
        v6 -= 2;
      }
      while ( v6 > 0 );
      v15 = max_length;
      if ( max_length )
      {
        v28 = v12;
        do
        {
          v16 = *(_WORD *)v12;
          na = v16;
          if ( v16 )
          {
            v17 = &s[h + 725];
            do
            {
              v18 = v17[-1].dummy;
              --h;
              --v17;
              extraa = v17;
              if ( v18 <= max_code )
              {
                v19 = v3[v18].dl.dad;
                v20 = (int)&v3[v18].dl;
                if ( v19 != v15 )
                {
                  v3 = tree;
                  s[1448].dummy += tree[v18].fc.freq * (v15 - v19);
                  *(_WORD *)v20 = v15;
                }
                --na;
                v16 = na;
                v17 = extraa;
              }
            }
            while ( v16 );
          }
          v12 = v28 - 2;
          --v15;
          v28 -= 2;
        }
        while ( v15 );
      }
    }
  }
}

//----- (0073FD30) --------------------------------------------------------
void __usercall scan_tree(ct_data_s *tree<ecx>, int max_code<eax>, internal_state *s)
{
  ct_data_s *v3; // edi@1
  signed int v4; // edx@1
  signed int v5; // ecx@1
  signed int v6; // esi@1
  signed int v7; // ebx@4
  signed int v8; // eax@5
  signed int nextlen; // [sp+Ch] [bp-10h]@1
  int v10; // [sp+10h] [bp-Ch]@4
  signed int prevlen; // [sp+14h] [bp-8h]@1
  int v12; // [sp+18h] [bp-4h]@4

  v3 = tree;
  v4 = 0;
  prevlen = -1;
  nextlen = tree->dl.dad;
  v5 = 7;
  v6 = 4;
  if ( !nextlen )
  {
    v5 = 138;
    v6 = 3;
  }
  v3[max_code + 1].dl.dad = -1;
  if ( max_code >= 0 )
  {
    v12 = (int)&v3[1].dl;
    v10 = max_code + 1;
    v7 = nextlen;
    do
    {
      v8 = v7;
      v7 = *(_WORD *)v12;
      ++v4;
      if ( v4 >= v5 || v8 != v7 )
      {
        if ( v4 >= v6 )
        {
          if ( v8 )
          {
            if ( v8 != prevlen )
              ++LOWORD(s[v8 + 669].dummy);
            ++LOWORD(s[685].dummy);
          }
          else
          {
            if ( v4 > 10 )
              ++LOWORD(s[687].dummy);
            else
              ++LOWORD(s[686].dummy);
          }
        }
        else
        {
          LOWORD(s[v8 + 669].dummy) += v4;
        }
        v4 = 0;
        prevlen = v8;
        if ( v7 )
        {
          if ( v8 == v7 )
          {
            v5 = 6;
            v6 = 3;
          }
          else
          {
            v5 = 7;
            v6 = 4;
          }
        }
        else
        {
          v5 = 138;
          v6 = 3;
        }
      }
      v12 += 4;
      --v10;
    }
    while ( v10 );
  }
}

//----- (0073FE10) --------------------------------------------------------
void __usercall send_tree(internal_state *s<eax>, ct_data_s *tree<edx>, int max_code<ecx>)
{
  ct_data_s *v3; // esi@1
  signed int v4; // ebx@1
  int v5; // edx@1
  int v6; // edi@1
  signed int v7; // ecx@1
  signed int v8; // ebx@4
  signed int v9; // esi@5
  int v10; // edi@8
  int v11; // ecx@8
  unsigned __int16 v12; // si@9
  __int16 v13; // dx@9
  int v14; // ecx@9
  int v15; // edx@9
  int v16; // ecx@9
  bool v17; // zf@11
  int v18; // ecx@15
  unsigned __int16 v19; // dx@16
  unsigned __int16 v20; // ST14_2@16
  __int16 v21; // dx@16
  int v22; // ecx@16
  __int16 v23; // di@16
  __int16 v24; // di@17
  int v25; // ecx@17
  int v26; // ecx@19
  unsigned __int16 v27; // dx@20
  unsigned __int16 v28; // ST14_2@20
  __int16 v29; // dx@20
  int v30; // ecx@20
  __int16 v31; // di@20
  int v32; // ecx@22
  unsigned __int16 v33; // dx@22
  unsigned __int16 v34; // ST14_2@23
  __int16 v35; // dx@23
  int v36; // ecx@23
  int v37; // edx@23
  int v38; // ecx@24
  int v39; // ecx@26
  unsigned __int16 v40; // dx@27
  unsigned __int16 v41; // ST14_2@27
  __int16 v42; // dx@27
  int v43; // ecx@27
  __int16 v44; // di@27
  __int16 v45; // di@28
  int v46; // ecx@28
  int v47; // ecx@29
  unsigned __int16 v48; // dx@29
  unsigned __int16 v49; // ST14_2@30
  __int16 v50; // dx@30
  int v51; // ecx@30
  int v52; // edx@30
  int v53; // ecx@32
  unsigned __int16 v54; // dx@33
  unsigned __int16 v55; // ST14_2@33
  __int16 v56; // dx@33
  int v57; // ecx@33
  __int16 v58; // di@33
  __int16 v59; // di@34
  int v60; // ecx@34
  int v61; // ecx@35
  unsigned __int16 v62; // dx@35
  unsigned __int16 v63; // ST14_2@36
  __int16 v64; // dx@36
  int v65; // ecx@36
  int v66; // edx@36
  signed int curlen; // [sp+Ch] [bp-1Ch]@5
  int v68; // [sp+10h] [bp-18h]@4
  signed int val; // [sp+14h] [bp-14h]@1
  int v70; // [sp+18h] [bp-10h]@4
  signed int nextlen; // [sp+1Ch] [bp-Ch]@1
  signed int len; // [sp+20h] [bp-8h]@1
  int lena; // [sp+20h] [bp-8h]@15
  int lenb; // [sp+20h] [bp-8h]@19
  int lenc; // [sp+20h] [bp-8h]@26
  int lend; // [sp+20h] [bp-8h]@32
  int count; // [sp+24h] [bp-4h]@5

  v3 = tree;
  v4 = tree->dl.dad;
  v5 = 0;
  v6 = max_code;
  val = -1;
  nextlen = v4;
  v7 = 7;
  len = 4;
  if ( !v4 )
  {
    v7 = 138;
    len = 3;
  }
  if ( v6 >= 0 )
  {
    v70 = (int)&v3[1].dl;
    v68 = v6 + 1;
    v8 = 1;
    do
    {
      v9 = nextlen;
      v5 += v8;
      curlen = nextlen;
      nextlen = *(_WORD *)v70;
      count = v5;
      if ( v5 < v7 && v9 == *(_WORD *)v70 )
        goto LABEL_44;
      if ( v5 < len )
      {
        do
        {
          v10 = HIWORD(s[v9 + 669].dummy);
          v11 = s[1453].dummy;
          if ( v11 <= 16 - v10 )
          {
            LOWORD(s[1452].dummy) |= LOWORD(s[v9 + 669].dummy) << v11;
            v16 = v10 + v11;
          }
          else
          {
            v12 = LOWORD(s[v9 + 669].dummy);
            v13 = v12 << v11;
            v14 = s[2].dummy;
            LOWORD(s[1452].dummy) |= v13;
            *(_BYTE *)(v14 + s[5].dummy++) = LOBYTE(s[1452].dummy);
            *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
            v15 = s[1453].dummy;
            v8 = 1;
            ++s[5].dummy;
            v16 = v15 + v10 - 16;
            LOWORD(s[1452].dummy) = v12 >> (16 - v15);
            v9 = curlen;
          }
          v17 = count == v8;
          count -= v8;
          s[1453].dummy = v16;
        }
        while ( !v17 );
        goto LABEL_39;
      }
      if ( v9 )
      {
        if ( v9 != val )
        {
          lena = HIWORD(s[v9 + 669].dummy);
          v18 = s[1453].dummy;
          if ( v18 <= 16 - HIWORD(s[v9 + 669].dummy) )
          {
            v24 = LOWORD(s[v9 + 669].dummy) << v18;
            v25 = s[1453].dummy;
            LOWORD(s[1452].dummy) |= v24;
            s[1453].dummy = lena + v25;
          }
          else
          {
            v19 = LOWORD(s[v9 + 669].dummy);
            v20 = v19;
            v21 = v19 << v18;
            v22 = s[2].dummy;
            LOWORD(s[1452].dummy) |= v21;
            *(_BYTE *)(v22 + s[5].dummy) = LOBYTE(s[1452].dummy);
            s[5].dummy += v8;
            *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
            v5 = s[1453].dummy;
            s[5].dummy += v8;
            v23 = v20 >> (16 - v5);
            s[1453].dummy = v5 + lena - 16;
            LOWORD(v5) = count;
            LOWORD(s[1452].dummy) = v23;
          }
          LOWORD(v5) = v5 - v8;
          LOWORD(count) = v5;
        }
        lenb = HIWORD(s[685].dummy);
        v26 = s[1453].dummy;
        if ( v26 <= 16 - HIWORD(s[685].dummy) )
        {
          LOWORD(s[1452].dummy) |= LOWORD(s[685].dummy) << v26;
          s[1453].dummy = lenb + v26;
        }
        else
        {
          v27 = LOWORD(s[685].dummy);
          v28 = v27;
          v29 = v27 << v26;
          v30 = s[2].dummy;
          LOWORD(s[1452].dummy) |= v29;
          *(_BYTE *)(v30 + s[5].dummy) = LOBYTE(s[1452].dummy);
          s[5].dummy += v8;
          *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
          v5 = s[1453].dummy;
          s[5].dummy += v8;
          v31 = v28 >> (16 - v5);
          s[1453].dummy = v5 + lenb - 16;
          LOWORD(v5) = count;
          LOWORD(s[1452].dummy) = v31;
        }
        v32 = s[1453].dummy;
        v33 = v5 - 3;
        if ( v32 > 14 )
        {
          v34 = v33;
          v35 = v33 << v32;
          v36 = s[2].dummy;
          LOWORD(s[1452].dummy) |= v35;
          *(_BYTE *)(v36 + s[5].dummy) = LOBYTE(s[1452].dummy);
          s[5].dummy += v8;
          *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
          v37 = s[1453].dummy;
          s[5].dummy += v8;
          s[1453].dummy = v37 - 14;
          LOWORD(s[1452].dummy) = v34 >> (16 - v37);
          goto LABEL_39;
        }
        LOWORD(s[1452].dummy) |= v33 << v32;
        v38 = v32 + 2;
      }
      else
      {
        if ( v5 > 10 )
        {
          lend = HIWORD(s[687].dummy);
          v53 = s[1453].dummy;
          if ( v53 <= 16 - HIWORD(s[687].dummy) )
          {
            v59 = LOWORD(s[687].dummy) << v53;
            v60 = s[1453].dummy;
            LOWORD(s[1452].dummy) |= v59;
            s[1453].dummy = lend + v60;
          }
          else
          {
            v54 = LOWORD(s[687].dummy);
            v55 = v54;
            v56 = v54 << v53;
            v57 = s[2].dummy;
            LOWORD(s[1452].dummy) |= v56;
            *(_BYTE *)(v57 + s[5].dummy) = LOBYTE(s[1452].dummy);
            s[5].dummy += v8;
            *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
            v5 = s[1453].dummy;
            s[5].dummy += v8;
            v58 = v55 >> (16 - v5);
            s[1453].dummy = v5 + lend - 16;
            LOWORD(v5) = count;
            LOWORD(s[1452].dummy) = v58;
          }
          v61 = s[1453].dummy;
          v62 = v5 - 11;
          if ( v61 > 9 )
          {
            v63 = v62;
            v64 = v62 << v61;
            v65 = s[2].dummy;
            LOWORD(s[1452].dummy) |= v64;
            *(_BYTE *)(v65 + s[5].dummy) = LOBYTE(s[1452].dummy);
            s[5].dummy += v8;
            *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
            v66 = s[1453].dummy;
            s[5].dummy += v8;
            s[1453].dummy = v66 - 9;
            LOWORD(s[1452].dummy) = v63 >> (16 - v66);
            goto LABEL_39;
          }
          LOWORD(s[1452].dummy) |= v62 << v61;
          v38 = v61 + 7;
        }
        else
        {
          lenc = HIWORD(s[686].dummy);
          v39 = s[1453].dummy;
          if ( v39 <= 16 - HIWORD(s[686].dummy) )
          {
            v45 = LOWORD(s[686].dummy) << v39;
            v46 = s[1453].dummy;
            LOWORD(s[1452].dummy) |= v45;
            s[1453].dummy = lenc + v46;
          }
          else
          {
            v40 = LOWORD(s[686].dummy);
            v41 = v40;
            v42 = v40 << v39;
            v43 = s[2].dummy;
            LOWORD(s[1452].dummy) |= v42;
            *(_BYTE *)(v43 + s[5].dummy) = LOBYTE(s[1452].dummy);
            s[5].dummy += v8;
            *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
            v5 = s[1453].dummy;
            s[5].dummy += v8;
            v44 = v41 >> (16 - v5);
            s[1453].dummy = v5 + lenc - 16;
            LOWORD(v5) = count;
            LOWORD(s[1452].dummy) = v44;
          }
          v47 = s[1453].dummy;
          v48 = v5 - 3;
          if ( v47 > 13 )
          {
            v49 = v48;
            v50 = v48 << v47;
            v51 = s[2].dummy;
            LOWORD(s[1452].dummy) |= v50;
            *(_BYTE *)(v51 + s[5].dummy) = LOBYTE(s[1452].dummy);
            s[5].dummy += v8;
            *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
            v52 = s[1453].dummy;
            s[5].dummy += v8;
            s[1453].dummy = v52 - 13;
            LOWORD(s[1452].dummy) = v49 >> (16 - v52);
            goto LABEL_39;
          }
          LOWORD(s[1452].dummy) |= v48 << v47;
          v38 = v47 + 3;
        }
      }
      s[1453].dummy = v38;
LABEL_39:
      v5 = 0;
      val = v9;
      if ( nextlen )
      {
        if ( v9 == nextlen )
        {
          v7 = 6;
          len = 3;
        }
        else
        {
          v7 = 7;
          len = 4;
        }
      }
      else
      {
        v7 = 138;
        len = 3;
      }
LABEL_44:
      v70 += 4;
      v68 -= v8;
    }
    while ( v68 );
  }
}

//----- (00740390) --------------------------------------------------------
void __usercall send_all_trees(internal_state *s<esi>, int lcodes, int dcodes, int blcodes)
{
  int v4; // ecx@1
  __int16 v5; // ax@1
  signed int v6; // ebx@1
  __int16 v7; // dx@2
  int v8; // ecx@2
  int v9; // edx@2
  int v10; // ecx@4
  __int16 v11; // ax@4
  __int16 v12; // dx@5
  int v13; // ecx@5
  int v14; // edx@5
  int v15; // ecx@7
  __int16 v16; // ax@7
  __int16 v17; // dx@8
  int v18; // ecx@8
  int v19; // edx@8
  int i; // edi@10
  int v21; // ecx@11
  unsigned __int16 v22; // ax@12
  __int16 v23; // dx@12
  int v24; // ecx@12
  int v25; // edx@12

  v4 = s[1453].dummy;
  v5 = lcodes - 257;
  v6 = 1;
  if ( v4 <= 11 )
  {
    LOWORD(s[1452].dummy) |= v5 << v4;
    s[1453].dummy = v4 + 5;
  }
  else
  {
    v7 = v5 << v4;
    v8 = s[5].dummy;
    LOWORD(s[1452].dummy) |= v7;
    *(_BYTE *)(v8 + s[2].dummy) = LOBYTE(s[1452].dummy);
    ++s[5].dummy;
    *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
    v9 = s[1453].dummy;
    ++s[5].dummy;
    s[1453].dummy = v9 - 11;
    LOWORD(s[1452].dummy) = (unsigned __int16)(lcodes - 257) >> (16 - v9);
  }
  v10 = s[1453].dummy;
  v11 = dcodes - 1;
  if ( v10 <= 11 )
  {
    LOWORD(s[1452].dummy) |= v11 << v10;
    s[1453].dummy = v10 + 5;
  }
  else
  {
    v12 = v11 << v10;
    v13 = s[5].dummy;
    LOWORD(s[1452].dummy) |= v12;
    *(_BYTE *)(v13 + s[2].dummy) = LOBYTE(s[1452].dummy);
    ++s[5].dummy;
    *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
    v14 = s[1453].dummy;
    ++s[5].dummy;
    s[1453].dummy = v14 - 11;
    LOWORD(s[1452].dummy) = (unsigned __int16)(dcodes - 1) >> (16 - v14);
  }
  v15 = s[1453].dummy;
  v16 = blcodes - 4;
  if ( v15 <= 12 )
  {
    LOWORD(s[1452].dummy) |= v16 << v15;
    s[1453].dummy = v15 + 4;
  }
  else
  {
    v17 = v16 << v15;
    v18 = s[5].dummy;
    LOWORD(s[1452].dummy) |= v17;
    *(_BYTE *)(v18 + s[2].dummy) = LOBYTE(s[1452].dummy);
    ++s[5].dummy;
    *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
    v19 = s[1453].dummy;
    ++s[5].dummy;
    s[1453].dummy = v19 - 12;
    LOWORD(s[1452].dummy) = (unsigned __int16)(blcodes - 4) >> (16 - v19);
  }
  for ( i = 0; i < blcodes; i += v6 )
  {
    v21 = s[1453].dummy;
    if ( v21 <= 13 )
    {
      LOWORD(s[1452].dummy) |= HIWORD(s[(unsigned __int8)bl_order[i] + 669].dummy) << v21;
      s[1453].dummy = v21 + 3;
    }
    else
    {
      v22 = HIWORD(s[(unsigned __int8)bl_order[i] + 669].dummy);
      v23 = HIWORD(s[(unsigned __int8)bl_order[i] + 669].dummy) << v21;
      v24 = s[5].dummy;
      LOWORD(s[1452].dummy) |= v23;
      *(_BYTE *)(v24 + s[2].dummy) = LOBYTE(s[1452].dummy);
      ++s[5].dummy;
      *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
      v25 = s[1453].dummy;
      v6 = 1;
      ++s[5].dummy;
      LOWORD(s[1452].dummy) = v22 >> (16 - v25);
      s[1453].dummy = v25 - 13;
    }
  }
  send_tree(s, (ct_data_s *)&s[35], lcodes - 1);
  send_tree(s, (ct_data_s *)&s[608], dcodes - 1);
}

//----- (007405E0) --------------------------------------------------------
void __usercall compress_block(internal_state *s<eax>, ct_data_s *ltree, ct_data_s *dtree)
{
  ct_data_s *v3; // ebx@1
  int v4; // edx@1
  int v5; // ecx@4
  int v6; // esi@4
  bool v7; // zf@4
  int v8; // ecx@4
  int v9; // edx@5
  unsigned __int16 v10; // si@6
  __int16 v11; // dx@6
  int v12; // ecx@6
  int v13; // edx@6
  int v14; // ecx@7
  int v15; // edi@8
  unsigned __int16 v16; // dx@9
  unsigned __int16 v17; // ST0C_2@9
  __int16 v18; // dx@9
  int v19; // ecx@9
  int v20; // edx@9
  const int v21; // ebx@11
  int v22; // esi@12
  int v23; // ecx@12
  __int16 v24; // di@13
  int v25; // ecx@13
  int v26; // ebx@13
  int v27; // ecx@13
  unsigned int v28; // edx@16
  int v29; // esi@17
  int v30; // edi@19
  int v31; // ecx@19
  unsigned __int16 v32; // di@20
  __int16 v33; // dx@20
  int v34; // ecx@20
  int v35; // edx@20
  __int16 v36; // di@20
  const int v37; // edi@22
  int v38; // edx@23
  int v39; // ecx@23
  __int16 v40; // si@24
  int v41; // ecx@24
  int v42; // ebx@24
  int v43; // edx@24
  int v44; // edx@28
  int v45; // ecx@28
  unsigned __int16 v46; // si@29
  __int16 v47; // dx@29
  int v48; // ecx@29
  int v49; // edx@29
  const int val; // [sp+Ch] [bp-10h]@11
  int vala; // [sp+Ch] [bp-10h]@19
  int lx; // [sp+10h] [bp-Ch]@4
  int len; // [sp+14h] [bp-8h]@5
  int lena; // [sp+14h] [bp-8h]@8
  int dist; // [sp+18h] [bp-4h]@4
  unsigned int dista; // [sp+18h] [bp-4h]@16
  int ltreea; // [sp+24h] [bp+8h]@28

  v3 = ltree;
  v4 = 0;
  if ( s[1446].dummy )
  {
    while ( 1 )
    {
      v5 = *(_WORD *)(s[1447].dummy + 2 * v4);
      v6 = *(_BYTE *)(v4 + s[1444].dummy);
      dist = v5;
      v7 = v5 == 0;
      v8 = s[1453].dummy;
      lx = v4 + 1;
      if ( v7 )
        break;
      v15 = (unsigned __int8)_length_code[v6];
      lena = v3[v15 + 257].dl.dad;
      if ( v8 <= 16 - lena )
      {
        LOWORD(s[1452].dummy) |= ltree[v15 + 257].fc.freq << v8;
        s[1453].dummy = lena + v8;
      }
      else
      {
        v16 = ltree[v15 + 257].fc.freq;
        v17 = v16;
        v18 = v16 << v8;
        v19 = s[2].dummy;
        LOWORD(s[1452].dummy) |= v18;
        *(_BYTE *)(v19 + s[5].dummy++) = LOBYTE(s[1452].dummy);
        *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
        v20 = s[1453].dummy;
        ++s[5].dummy;
        s[1453].dummy = v20 + lena - 16;
        LOWORD(s[1452].dummy) = v17 >> (16 - v20);
      }
      v21 = extra_lbits[v15];
      val = v21;
      if ( v21 )
      {
        v22 = v6 - base_length[v15];
        v23 = s[1453].dummy;
        if ( v23 <= 16 - v21 )
        {
          LOWORD(s[1452].dummy) |= (_WORD)v22 << v23;
          v27 = v21 + v23;
        }
        else
        {
          v24 = (_WORD)v22 << v23;
          v25 = s[2].dummy;
          LOWORD(s[1452].dummy) |= v24;
          *(_BYTE *)(v25 + s[5].dummy++) = LOBYTE(s[1452].dummy);
          *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
          v26 = s[1453].dummy;
          ++s[5].dummy;
          v27 = v26 + val - 16;
          LOWORD(s[1452].dummy) = (unsigned __int16)v22 >> (16 - v26);
        }
        s[1453].dummy = v27;
      }
      v28 = dist - 1;
      dista = v28;
      if ( v28 >= 0x100 )
        v29 = (unsigned __int8)byte_9DA5D0[v28 >> 7];
      else
        v29 = (unsigned __int8)_dist_code[v28];
      v30 = dtree[v29].dl.dad;
      v31 = s[1453].dummy;
      vala = dtree[v29].dl.dad;
      if ( v31 <= 16 - v30 )
      {
        LOWORD(s[1452].dummy) |= dtree[v29].fc.freq << v31;
        s[1453].dummy = v30 + v31;
      }
      else
      {
        v32 = dtree[v29].fc.freq;
        v33 = dtree[v29].fc.freq << v31;
        v34 = s[2].dummy;
        LOWORD(s[1452].dummy) |= v33;
        *(_BYTE *)(v34 + s[5].dummy++) = LOBYTE(s[1452].dummy);
        *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
        v35 = s[1453].dummy;
        ++s[5].dummy;
        v36 = v32 >> (16 - v35);
        s[1453].dummy = v35 + vala - 16;
        v28 = dista;
        LOWORD(s[1452].dummy) = v36;
      }
      v37 = extra_dbits[v29];
      v3 = ltree;
      if ( v37 )
      {
        v38 = v28 - base_dist[v29];
        v39 = s[1453].dummy;
        if ( v39 > 16 - v37 )
        {
          v40 = (_WORD)v38 << v39;
          v41 = s[2].dummy;
          LOWORD(s[1452].dummy) |= v40;
          *(_BYTE *)(v41 + s[5].dummy++) = LOBYTE(s[1452].dummy);
          *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
          v42 = s[1453].dummy;
          ++s[5].dummy;
          LOWORD(s[1452].dummy) = (unsigned __int16)v38 >> (16 - v42);
          v43 = v42 + v37 - 16;
          v3 = ltree;
          s[1453].dummy = v43;
          goto LABEL_27;
        }
        LOWORD(s[1452].dummy) |= (_WORD)v38 << v39;
        v14 = v37 + v39;
        goto LABEL_26;
      }
LABEL_27:
      if ( (unsigned int)lx >= s[1446].dummy )
        goto LABEL_28;
      v4 = lx;
    }
    v9 = v3[v6].dl.dad;
    len = v3[v6].dl.dad;
    if ( v8 > 16 - v9 )
    {
      v10 = v3[v6].fc.freq;
      v11 = v10 << v8;
      v12 = s[2].dummy;
      LOWORD(s[1452].dummy) |= v11;
      *(_BYTE *)(v12 + s[5].dummy++) = LOBYTE(s[1452].dummy);
      *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
      v13 = s[1453].dummy;
      ++s[5].dummy;
      s[1453].dummy = v13 + len - 16;
      LOWORD(s[1452].dummy) = v10 >> (16 - v13);
      goto LABEL_27;
    }
    LOWORD(s[1452].dummy) |= v3[v6].fc.freq << v8;
    v14 = v9 + v8;
LABEL_26:
    s[1453].dummy = v14;
    goto LABEL_27;
  }
LABEL_28:
  v44 = v3[256].dl.dad;
  v45 = s[1453].dummy;
  ltreea = v3[256].dl.dad;
  if ( v45 <= 16 - v44 )
  {
    LOWORD(s[1452].dummy) |= v3[256].fc.freq << v45;
    s[1453].dummy = v44 + v45;
    s[1451].dummy = v3[256].dl.dad;
  }
  else
  {
    v46 = v3[256].fc.freq;
    v47 = v3[256].fc.freq << v45;
    v48 = s[2].dummy;
    LOWORD(s[1452].dummy) |= v47;
    *(_BYTE *)(v48 + s[5].dummy++) = LOBYTE(s[1452].dummy);
    *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
    v49 = s[1453].dummy;
    ++s[5].dummy;
    s[1453].dummy = v49 + ltreea - 16;
    LOWORD(s[1452].dummy) = v46 >> (16 - v49);
    s[1451].dummy = v3[256].dl.dad;
  }
}

//----- (007409F0) --------------------------------------------------------
void __usercall set_data_type(internal_state *s<eax>)
{
  int v1; // edi@1
  int v2; // ebx@1
  internal_state *v3; // edx@1
  internal_state *v4; // edx@3
  signed int v5; // [sp+Ch] [bp-Ch]@3
  signed int v6; // [sp+10h] [bp-8h]@1
  int v7; // [sp+10h] [bp-8h]@3
  int v8; // [sp+14h] [bp-4h]@3

  v1 = 0;
  v2 = 0;
  v3 = s + 43;
  v6 = 60;
  do
  {
    v1 += LOWORD(v3[-1].dummy);
    v2 += LOWORD(v3->dummy);
    v3 += 2;
    --v6;
  }
  while ( v6 );
  v8 = 0;
  v7 = 0;
  v4 = s + 164;
  v5 = 64;
  do
  {
    v8 += LOWORD(v4[-1].dummy);
    v7 += LOWORD(v4->dummy);
    v4 += 2;
    --v5;
  }
  while ( v5 );
  *(_DWORD *)(s->dummy + 44) = (v1 + v2 + (unsigned int)LOWORD(s[162].dummy)) >> 2 >= v8
                                                                                    + v7
                                                                                    + LOWORD(s[35].dummy)
                                                                                    + LOWORD(s[36].dummy)
                                                                                    + LOWORD(s[37].dummy)
                                                                                    + LOWORD(s[38].dummy)
                                                                                    + LOWORD(s[39].dummy)
                                                                                    + LOWORD(s[40].dummy)
                                                                                    + (unsigned int)LOWORD(s[41].dummy);
}

//----- (00740AC0) --------------------------------------------------------
void __usercall bi_flush(internal_state *s<eax>)
{
  int v1; // ecx@1
  __int16 v2; // dx@4

  v1 = s[1453].dummy;
  if ( v1 == 16 )
  {
    *(_BYTE *)(s[2].dummy + s[5].dummy++) = LOBYTE(s[1452].dummy);
    *(_BYTE *)(s[5].dummy++ + s[2].dummy) = BYTE1(s[1452].dummy);
    LOWORD(s[1452].dummy) = 0;
    s[1453].dummy = 0;
  }
  else
  {
    if ( v1 >= 8 )
    {
      *(_BYTE *)(s[2].dummy + s[5].dummy) = LOBYTE(s[1452].dummy);
      v2 = BYTE1(s[1452].dummy);
      ++s[5].dummy;
      s[1453].dummy -= 8;
      LOWORD(s[1452].dummy) = v2;
    }
  }
}

//----- (00740B40) --------------------------------------------------------
void __usercall bi_windup(internal_state *s<eax>)
{
  int v1; // ecx@1
  int v2; // ecx@2
  int v3; // edx@2
  char v4; // bl@2

  v1 = s[1453].dummy;
  if ( v1 > 8 )
  {
    *(_BYTE *)(s[2].dummy + s[5].dummy++) = LOBYTE(s[1452].dummy);
    v2 = s[5].dummy;
    v3 = s[2].dummy;
    v4 = BYTE1(s[1452].dummy);
LABEL_5:
    *(_BYTE *)(v2 + v3) = v4;
    ++s[5].dummy;
    goto LABEL_6;
  }
  if ( v1 > 0 )
  {
    v2 = s[2].dummy;
    v3 = s[5].dummy;
    v4 = LOBYTE(s[1452].dummy);
    goto LABEL_5;
  }
LABEL_6:
  LOWORD(s[1452].dummy) = 0;
  s[1453].dummy = 0;
}

//----- (00740BA0) --------------------------------------------------------
void __usercall copy_block(internal_state *s<eax>, unsigned int len<ecx>, char *buf, int header)
{
  int v4; // edx@1
  char v5; // bl@9

  v4 = s[1453].dummy;
  if ( v4 <= 8 )
  {
    if ( v4 <= 0 )
      goto LABEL_6;
    *(_BYTE *)(s[2].dummy + s[5].dummy) = LOBYTE(s[1452].dummy);
  }
  else
  {
    *(_BYTE *)(s[5].dummy++ + s[2].dummy) = LOBYTE(s[1452].dummy);
    *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
  }
  ++s[5].dummy;
LABEL_6:
  LOWORD(s[1452].dummy) = 0;
  s[1453].dummy = 0;
  s[1451].dummy = 8;
  if ( header )
  {
    *(_BYTE *)(s[5].dummy++ + s[2].dummy) = len;
    *(_BYTE *)(s[5].dummy++ + s[2].dummy) = BYTE1(len);
    *(_BYTE *)(s[5].dummy++ + s[2].dummy) = ~(_BYTE)len;
    *(_BYTE *)(s[5].dummy++ + s[2].dummy) = (unsigned __int16)~(_WORD)len >> 8;
  }
  for ( ; len; --len )
  {
    v5 = *buf++;
    *(_BYTE *)(s[5].dummy++ + s[2].dummy) = v5;
  }
}

//----- (00740C70) --------------------------------------------------------
void __cdecl _tr_init(internal_state *s)
{
  s[708].dummy = (int)&s[35];
  s[711].dummy = (int)&s[608];
  s[710].dummy = (int)&static_l_desc;
  s[713].dummy = (int)&static_d_desc;
  s[714].dummy = (int)&s[669];
  s[716].dummy = (int)&static_bl_desc;
  LOWORD(s[1452].dummy) = 0;
  s[1453].dummy = 0;
  s[1451].dummy = 8;
  init_block(s);
}

//----- (00740CE0) --------------------------------------------------------
void __usercall gen_codes(ct_data_s *tree<edi>, unsigned __int16 *bl_count<edx>, int max_code)
{
  __int16 v3; // cx@1
  signed int v4; // eax@1
  unsigned int v5; // edx@1
  int i; // esi@3
  int v7; // edx@4
  unsigned int v8; // eax@5
  unsigned int v9; // ecx@5
  unsigned int v10; // eax@5
  int v11; // ebx@6
  __int16 next_code[16]; // [sp+4h] [bp-24h]@1
  unsigned int v13; // [sp+24h] [bp-4h]@1
  int v14; // [sp+28h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = 0;
  v4 = 1;
  v5 = (char *)bl_count - (char *)&next_code[1];
  do
  {
    v3 = 2 * (v3 + *(__int16 *)((char *)&next_code[v4] + v5));
    next_code[v4++] = v3;
  }
  while ( v4 <= 15 );
  for ( i = 0; i <= max_code; ++i )
  {
    v7 = tree[i].dl.dad;
    if ( tree[i].dl.dad )
    {
      v8 = (unsigned __int16)next_code[v7];
      v9 = v8;
      next_code[v7] = v8 + 1;
      v10 = 0;
      do
      {
        v11 = v9 & 1;
        --v7;
        v9 >>= 1;
        v10 = 2 * (v11 | v10);
      }
      while ( v7 > 0 );
      tree[i].fc.freq = v10 >> 1;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00740D70) --------------------------------------------------------
void __usercall build_tree(internal_state *s<esi>, tree_desc_s *desc)
{
  ct_data_s *v2; // edi@1
  static_tree_desc_s *v3; // eax@1
  int v4; // edx@1
  int v5; // ebx@1
  int v6; // ecx@1
  int v7; // eax@1
  int v8; // eax@8
  signed int i; // ebx@14
  int v10; // eax@16
  int v11; // ecx@16
  int v12; // ebx@16
  int v13; // eax@16
  unsigned __int8 v14; // dl@16
  int elems; // [sp+8h] [bp-8h]@1
  int max_code; // [sp+Ch] [bp-4h]@1

  v2 = desc->dyn_tree;
  v3 = desc->stat_desc;
  v4 = v3[3].dummy;
  v5 = v3->dummy;
  v6 = -1;
  v7 = 0;
  elems = v4;
  max_code = -1;
  s[1298].dummy = 0;
  for ( s[1299].dummy = 573; v7 < v4; ++v7 )
  {
    if ( v2[v7].fc.freq )
    {
      ++s[1298].dummy;
      s[s[1298].dummy + 725].dummy = v7;
      max_code = v7;
      *((_BYTE *)&s[1300].dummy + v7) = 0;
      v6 = v7;
    }
    else
    {
      v2[v7].dl.dad = 0;
    }
  }
  if ( s[1298].dummy < 2 )
  {
    do
    {
      if ( v6 >= 2 )
      {
        v8 = 0;
      }
      else
      {
        ++v6;
        v8 = v6;
      }
      ++s[1298].dummy;
      s[s[1298].dummy + 725].dummy = v8;
      v2[v8].fc.freq = 1;
      *((_BYTE *)&s[1300].dummy + v8) = 0;
      --s[1448].dummy;
      if ( v5 )
        s[1449].dummy -= *(_WORD *)(v5 + 4 * v8 + 2);
    }
    while ( s[1298].dummy < 2 );
    max_code = v6;
  }
  desc->max_code = v6;
  for ( i = s[1298].dummy / 2; i >= 1; --i )
    pqdownheap(s, v2, i);
  do
  {
    v10 = s[1298].dummy;
    v11 = s[v10 + 725].dummy;
    v12 = s[726].dummy;
    s[1298].dummy = v10 - 1;
    s[726].dummy = v11;
    pqdownheap(s, v2, 1);
    v13 = s[726].dummy;
    --s[1299].dummy;
    s[s[1299].dummy-- + 725].dummy = v12;
    s[s[1299].dummy + 725].dummy = v13;
    v2[elems].fc.freq = v2[v12].fc.freq + v2[v13].fc.freq;
    v14 = *((_BYTE *)&s[1300].dummy + v12);
    if ( v14 < *((_BYTE *)&s[1300].dummy + v13) )
      v14 = *((_BYTE *)&s[1300].dummy + v13);
    *((_BYTE *)&s[1300].dummy + elems) = v14 + 1;
    v2[v13].dl.dad = elems;
    v2[v12].dl.dad = elems;
    s[726].dummy = elems++;
    pqdownheap(s, v2, 1);
  }
  while ( s[1298].dummy >= 2 );
  --s[1299].dummy;
  s[s[1299].dummy + 725].dummy = s[726].dummy;
  gen_bitlen(s, desc);
  gen_codes(v2, max_code, (unsigned __int16 *)&s[717]);
}

//----- (00740F70) --------------------------------------------------------
int __usercall build_bl_tree<eax>(internal_state *s<eax>)
{
  internal_state *v1; // esi@1
  int result; // eax@1

  v1 = s;
  scan_tree(v1, (ct_data_s *)&v1[35], s[709].dummy);
  scan_tree(v1, (ct_data_s *)&v1[608], v1[712].dummy);
  build_tree(v1, (tree_desc_s *)&v1[714]);
  result = 18;
  while ( !HIWORD(v1[(unsigned __int8)bl_order[result] + 669].dummy) )
  {
    if ( HIWORD(v1[*((_BYTE *)&extra_lbits[28] + result + 3) + 669].dummy) )
    {
      --result;
      v1[1448].dummy += 3 * result + 17;
      return result;
    }
    if ( HIWORD(v1[*((_BYTE *)&extra_lbits[28] + result + 2) + 669].dummy) )
    {
      result -= 2;
      v1[1448].dummy += 3 * result + 17;
      return result;
    }
    if ( HIWORD(v1[*((_BYTE *)&extra_lbits[28] + result + 1) + 669].dummy) )
    {
      result -= 3;
      break;
    }
    result -= 4;
    if ( result < 3 )
    {
      v1[1448].dummy += 3 * result + 17;
      return result;
    }
  }
  v1[1448].dummy += 3 * result + 17;
  return result;
}

//----- (00741040) --------------------------------------------------------
void __cdecl _tr_stored_block(internal_state *s, char *buf, unsigned int stored_len, int eof)
{
  int v4; // ecx@1
  __int16 v5; // dx@2
  int v6; // ecx@2
  char v7; // bl@2
  int v8; // edx@2

  v4 = s[1453].dummy;
  if ( v4 <= 13 )
  {
    s[1453].dummy = v4 + 3;
    LOWORD(s[1452].dummy) |= (_WORD)eof << v4;
    copy_block(s, buf, stored_len, 1);
  }
  else
  {
    v5 = (_WORD)eof << v4;
    v6 = s[2].dummy;
    LOWORD(s[1452].dummy) |= v5;
    *(_BYTE *)(v6 + s[5].dummy) = LOBYTE(s[1452].dummy);
    v7 = BYTE1(s[1452].dummy);
    ++s[5].dummy;
    *(_BYTE *)(s[5].dummy + s[2].dummy) = v7;
    v8 = s[1453].dummy;
    ++s[5].dummy;
    s[1453].dummy = v8 - 13;
    LOWORD(s[1452].dummy) = (unsigned __int16)eof >> (16 - v8);
    copy_block(s, buf, stored_len, 1);
  }
}

//----- (007410F0) --------------------------------------------------------
void __cdecl _tr_align(internal_state *s)
{
  int v1; // ecx@1
  int v2; // edx@2
  int v3; // ecx@4
  int v4; // edx@5
  int v5; // eax@7
  signed int v6; // ecx@7
  int v7; // edx@9
  signed int v8; // ecx@11
  int v9; // edx@12
  int v10; // eax@12

  v1 = s[1453].dummy;
  LOWORD(s[1452].dummy) |= 2 << v1;
  if ( v1 <= 13 )
  {
    s[1453].dummy = v1 + 3;
  }
  else
  {
    *(_BYTE *)(s[2].dummy + s[5].dummy++) = LOBYTE(s[1452].dummy);
    *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
    v2 = s[1453].dummy;
    ++s[5].dummy;
    s[1453].dummy = v2 - 13;
    LOWORD(s[1452].dummy) = 2u >> (16 - v2);
  }
  v3 = s[1453].dummy;
  LOWORD(s[1452].dummy) = LOWORD(s[1452].dummy);
  if ( v3 <= 9 )
  {
    s[1453].dummy = v3 + 7;
  }
  else
  {
    *(_BYTE *)(s[2].dummy + s[5].dummy++) = LOBYTE(s[1452].dummy);
    *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
    v4 = s[1453].dummy;
    ++s[5].dummy;
    s[1453].dummy = v4 - 9;
    LOWORD(s[1452].dummy) = 0;
  }
  bi_flush(s);
  v6 = *(_DWORD *)(v5 + 5812);
  if ( *(_DWORD *)(v5 + 5804) - v6 + 11 < 9 )
  {
    *(_WORD *)(v5 + 5808) |= 2 << v6;
    if ( v6 <= 13 )
    {
      *(_DWORD *)(v5 + 5812) = v6 + 3;
    }
    else
    {
      *(_BYTE *)(*(_DWORD *)(v5 + 8) + (*(_DWORD *)(v5 + 20))++) = *(_BYTE *)(v5 + 5808);
      *(_BYTE *)(*(_DWORD *)(v5 + 20) + *(_DWORD *)(v5 + 8)) = *(_BYTE *)(v5 + 5809);
      v7 = *(_DWORD *)(v5 + 5812);
      ++*(_DWORD *)(v5 + 20);
      *(_DWORD *)(v5 + 5812) = v7 - 13;
      *(_WORD *)(v5 + 5808) = 2u >> (16 - v7);
    }
    v8 = *(_DWORD *)(v5 + 5812);
    *(_WORD *)(v5 + 5808) = *(_WORD *)(v5 + 5808);
    if ( v8 > 9 )
    {
      *(_BYTE *)(*(_DWORD *)(v5 + 8) + (*(_DWORD *)(v5 + 20))++) = *(_BYTE *)(v5 + 5808);
      *(_BYTE *)(*(_DWORD *)(v5 + 20) + *(_DWORD *)(v5 + 8)) = *(_BYTE *)(v5 + 5809);
      v9 = *(_DWORD *)(v5 + 5812);
      ++*(_DWORD *)(v5 + 20);
      *(_DWORD *)(v5 + 5812) = v9 - 9;
      *(_WORD *)(v5 + 5808) = 0;
      bi_flush((internal_state *)v5);
      *(_DWORD *)(v10 + 5804) = 7;
      return;
    }
    *(_DWORD *)(v5 + 5812) = v8 + 7;
    bi_flush((internal_state *)v5);
  }
  *(_DWORD *)(v5 + 5804) = 7;
}

//----- (007412F0) --------------------------------------------------------
void __cdecl _tr_flush_block(internal_state *s, char *buf, unsigned int stored_len, int eof)
{
  int v4; // eax@4
  unsigned int v5; // edx@4
  unsigned int v6; // ecx@4
  int v7; // edi@10
  bool v8; // zf@11
  int v9; // ecx@11
  unsigned __int16 v10; // ax@12
  __int16 v11; // dx@13
  int v12; // ecx@13
  int v13; // edx@13
  unsigned __int16 v14; // dx@16
  __int16 v15; // ax@17
  int v16; // ecx@17
  int v17; // eax@17
  int max_blindex; // [sp+Ch] [bp-4h]@1

  max_blindex = 0;
  if ( s[31].dummy <= 0 )
  {
    v6 = stored_len + 5;
LABEL_7:
    v5 = v6;
    goto LABEL_8;
  }
  if ( *(_DWORD *)(s->dummy + 44) == 2 )
    set_data_type(s);
  build_tree(s, (tree_desc_s *)&s[708]);
  build_tree(s, (tree_desc_s *)&s[711]);
  v4 = build_bl_tree(s);
  v5 = (unsigned int)(s[1448].dummy + 10) >> 3;
  v6 = (unsigned int)(s[1449].dummy + 10) >> 3;
  max_blindex = v4;
  if ( v6 <= v5 )
    goto LABEL_7;
LABEL_8:
  if ( stored_len + 4 <= v5 && buf )
  {
    v7 = eof;
    _tr_stored_block(s, buf, stored_len, eof);
  }
  else
  {
    v7 = eof;
    v8 = v6 == v5;
    v9 = s[1453].dummy;
    if ( v8 )
    {
      v10 = eof + 2;
      if ( v9 <= 13 )
      {
        LOWORD(s[1452].dummy) |= v10 << v9;
        s[1453].dummy = v9 + 3;
      }
      else
      {
        v11 = v10 << v9;
        v12 = s[5].dummy;
        LOWORD(s[1452].dummy) |= v11;
        *(_BYTE *)(v12 + s[2].dummy) = LOBYTE(s[1452].dummy);
        ++s[5].dummy;
        *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
        v13 = s[1453].dummy;
        ++s[5].dummy;
        s[1453].dummy = v13 - 13;
        LOWORD(s[1452].dummy) = v10 >> (16 - v13);
      }
      compress_block(s, &static_ltree, &static_dtree);
    }
    else
    {
      v14 = eof + 4;
      if ( v9 <= 13 )
      {
        LOWORD(s[1452].dummy) |= v14 << v9;
        s[1453].dummy = v9 + 3;
      }
      else
      {
        v15 = v14 << v9;
        v16 = s[5].dummy;
        LOWORD(s[1452].dummy) |= v15;
        *(_BYTE *)(v16 + s[2].dummy) = LOBYTE(s[1452].dummy);
        ++s[5].dummy;
        *(_BYTE *)(s[5].dummy + s[2].dummy) = BYTE1(s[1452].dummy);
        v17 = s[1453].dummy;
        ++s[5].dummy;
        s[1453].dummy = v17 - 13;
        LOWORD(s[1452].dummy) = v14 >> (16 - v17);
      }
      send_all_trees(s, s[709].dummy + 1, s[712].dummy + 1, max_blindex + 1);
      compress_block(s, (ct_data_s *)&s[35], (ct_data_s *)&s[608]);
    }
  }
  init_block(s);
  if ( v7 )
    bi_windup(s);
}

//----- (007414E0) --------------------------------------------------------
unsigned int __usercall crc32_little<eax>(unsigned int crc<eax>, const char *buf<ecx>, unsigned int len<edx>)
{
  unsigned int v3; // esi@1
  unsigned int i; // eax@1
  unsigned int v5; // edi@5
  unsigned int v6; // edx@6
  unsigned int v7; // eax@6
  unsigned int v8; // edx@6
  unsigned int v9; // eax@6
  unsigned int v10; // edx@6
  const unsigned int v11; // eax@6
  int v12; // eax@6
  unsigned int v13; // edx@6
  unsigned int v14; // edx@8
  int v15; // eax@9

  v3 = len;
  for ( i = ~crc; v3; --v3 )
  {
    if ( !((unsigned __int8)buf & 3) )
      break;
    i = crc_table[0][(unsigned __int8)(i ^ *buf++)] ^ (i >> 8);
  }
  if ( v3 >= 0x20 )
  {
    v5 = v3 >> 5;
    do
    {
      v6 = *((_DWORD *)buf + 1) ^ crc_table[3][(*(_DWORD *)buf ^ i) & 0xFF] ^ crc_table[0][(*(_DWORD *)buf ^ i) >> 24] ^ crc_table[2][(unsigned __int16)(*(_WORD *)buf ^ i) >> 8] ^ crc_table[1][((*(_DWORD *)buf ^ i) >> 16) & 0xFF];
      v7 = *((_DWORD *)buf + 2) ^ crc_table[3][(unsigned __int8)v6] ^ crc_table[0][v6 >> 24] ^ crc_table[2][(unsigned __int16)v6 >> 8] ^ crc_table[1][((*((_DWORD *)buf + 1) ^ crc_table[3][(*(_DWORD *)buf ^ i) & 0xFF] ^ crc_table[0][(*(_DWORD *)buf ^ i) >> 24] ^ crc_table[2][(unsigned __int16)(*(_WORD *)buf ^ i) >> 8] ^ crc_table[1][((*(_DWORD *)buf ^ i) >> 16) & 0xFF]) >> 16) & 0xFF];
      v8 = *((_DWORD *)buf + 3) ^ crc_table[3][(unsigned __int8)v7] ^ crc_table[0][v7 >> 24] ^ crc_table[2][(unsigned __int16)v7 >> 8] ^ crc_table[1][(v7 >> 16) & 0xFF];
      v9 = *((_DWORD *)buf + 4) ^ crc_table[3][(unsigned __int8)v8] ^ crc_table[0][v8 >> 24] ^ crc_table[2][(unsigned __int16)v8 >> 8] ^ crc_table[1][((*((_DWORD *)buf + 3) ^ crc_table[3][(unsigned __int8)v7] ^ crc_table[0][v7 >> 24] ^ crc_table[2][(unsigned __int16)v7 >> 8] ^ crc_table[1][(v7 >> 16) & 0xFF]) >> 16) & 0xFF];
      v10 = *((_DWORD *)buf + 5) ^ crc_table[3][(unsigned __int8)v9] ^ crc_table[0][v9 >> 24] ^ crc_table[2][(unsigned __int16)v9 >> 8] ^ crc_table[1][(v9 >> 16) & 0xFF];
      v11 = crc_table[3][(unsigned __int8)v10] ^ crc_table[0][v10 >> 24] ^ crc_table[2][(unsigned __int16)v10 >> 8] ^ crc_table[1][((*((_DWORD *)buf + 5) ^ crc_table[3][(unsigned __int8)v9] ^ crc_table[0][v9 >> 24] ^ crc_table[2][(unsigned __int16)v9 >> 8] ^ crc_table[1][(v9 >> 16) & 0xFF]) >> 16) & 0xFF];
      buf += 32;
      v12 = *((_DWORD *)buf - 2) ^ v11;
      v3 -= 32;
      v13 = *((_DWORD *)buf - 1) ^ crc_table[3][(unsigned __int8)v12] ^ crc_table[0][(unsigned int)v12 >> 24] ^ crc_table[2][(unsigned __int16)v12 >> 8] ^ crc_table[1][((unsigned int)v12 >> 16) & 0xFF];
      i = crc_table[3][(unsigned __int8)v13] ^ crc_table[0][v13 >> 24] ^ crc_table[2][(unsigned __int16)v13 >> 8] ^ crc_table[1][((*((_DWORD *)buf - 1) ^ crc_table[3][(unsigned __int8)v12] ^ crc_table[0][(unsigned int)v12 >> 24] ^ crc_table[2][(unsigned __int16)v12 >> 8] ^ crc_table[1][((unsigned int)v12 >> 16) & 0xFF]) >> 16) & 0xFF];
      --v5;
    }
    while ( v5 );
  }
  if ( v3 >= 4 )
  {
    v14 = v3 >> 2;
    do
    {
      v15 = *(_DWORD *)buf ^ i;
      buf += 4;
      v3 -= 4;
      --v14;
      i = crc_table[3][(unsigned __int8)v15] ^ crc_table[0][(unsigned int)v15 >> 24] ^ crc_table[2][(unsigned __int16)v15 >> 8] ^ crc_table[1][((unsigned int)v15 >> 16) & 0xFF];
    }
    while ( v14 );
  }
  for ( ; v3; --v3 )
    i = crc_table[0][(unsigned __int8)(i ^ *buf++)] ^ (i >> 8);
  return ~i;
}

//----- (007417A0) --------------------------------------------------------
unsigned int __cdecl crc32(unsigned int crc, const char *buf, unsigned int len)
{
  unsigned int result; // eax@2

  if ( buf )
    result = crc32_little(crc, buf, len);
  else
    result = 0;
  return result;
}

//----- (007417C0) --------------------------------------------------------
void *__cdecl zcalloc(void *opaque, unsigned int items, unsigned int size)
{
  return malloc(size * items);
}

//----- (007417E0) --------------------------------------------------------
void __cdecl zcfree(void *opaque, void *ptr)
{
  free(ptr);
}

//----- (00741800) --------------------------------------------------------
void __cdecl inflate_fast(z_stream_s *strm, unsigned int start)
{
  internal_state *v2; // eax@1
  char *v3; // edx@1
  unsigned int v4; // ebx@1
  unsigned int v5; // ecx@1
  char *v6; // esi@1
  unsigned int v7; // edi@1
  int v8; // edx@1
  int v9; // ebx@3
  unsigned int v10; // eax@4
  int v11; // ecx@4
  char v12; // dl@4
  unsigned int v13; // eax@8
  int v14; // edx@9
  int v15; // edx@14
  unsigned int v16; // edx@15
  int v17; // ecx@15
  char v18; // al@15
  int v19; // ecx@17
  int v20; // eax@18
  int v21; // edx@19
  int v22; // edx@19
  int v23; // edx@20
  int v24; // edx@21
  int v25; // edx@21
  int v26; // ecx@21
  int v27; // eax@22
  int v28; // ecx@23
  int v29; // ecx@24
  char v30; // dl@26
  int v31; // edx@29
  int v32; // eax@29
  int v33; // ecx@30
  char v34; // dl@31
  int v35; // eax@32
  char v36; // dl@34
  char v37; // dl@38
  unsigned int v38; // edx@41
  char v39; // al@42
  int v40; // eax@46
  char v41; // cl@47
  int v42; // ecx@47
  unsigned int v43; // edx@53
  int v44; // ST44_4@63
  int v45; // edi@63
  int lmask; // [sp+Ch] [bp-3Ch]@1
  unsigned int whave; // [sp+10h] [bp-38h]@1
  unsigned int beg; // [sp+14h] [bp-34h]@1
  int dmask; // [sp+18h] [bp-30h]@1
  int end; // [sp+1Ch] [bp-2Ch]@1
  int window; // [sp+20h] [bp-28h]@1
  int wsize; // [sp+24h] [bp-24h]@1
  int dcode; // [sp+28h] [bp-20h]@1
  int lcode; // [sp+2Ch] [bp-1Ch]@1
  int this; // [sp+30h] [bp-18h]@22
  unsigned __int16 this_2; // [sp+32h] [bp-16h]@15
  int write; // [sp+34h] [bp-14h]@1
  internal_state *state; // [sp+38h] [bp-10h]@1
  unsigned int last; // [sp+3Ch] [bp-Ch]@1
  unsigned int dist; // [sp+40h] [bp-8h]@18
  int dista; // [sp+40h] [bp-8h]@21
  char *in; // [sp+44h] [bp-4h]@1
  unsigned int len; // [sp+54h] [bp+Ch]@9

  v2 = strm->state;
  v3 = strm->next_in - 1;
  in = v3;
  v4 = v2[12].dummy;
  v5 = strm->avail_out;
  last = (unsigned int)&v3[strm->avail_in - 5];
  v6 = strm->next_out - 1;
  beg = (unsigned int)&v6[v5 - start];
  end = (int)&v6[v5 - 257];
  wsize = v2[8].dummy;
  whave = v2[9].dummy;
  write = v2[10].dummy;
  window = v2[11].dummy;
  lcode = v2[17].dummy;
  dcode = v2[18].dummy;
  state = strm->state;
  v7 = v2[13].dummy;
  v8 = (1 << v2[19].dummy) - 1;
  lmask = (1 << v2[19].dummy) - 1;
  dmask = (1 << v2[20].dummy) - 1;
  while ( 1 )
  {
    if ( v7 < 0xF )
    {
      v9 = ((unsigned __int8)in[1] << v7) + v4;
      in += 2;
      v4 = ((unsigned __int8)*in << (v7 + 8)) + v9;
      v7 += 16;
    }
    v10 = *(_DWORD *)(lcode + 4 * (v4 & v8));
    v11 = (unsigned __int8)(*(_WORD *)(lcode + 4 * (v4 & v8)) >> 8);
    v4 >>= v11;
    v7 -= v11;
    v12 = v10;
    if ( (_BYTE)v10 )
      break;
LABEL_8:
    ++v6;
    v13 = v10 >> 16;
LABEL_52:
    *v6 = v13;
LABEL_53:
    v43 = last;
    if ( (unsigned int)in >= last || (unsigned int)v6 >= end )
      goto LABEL_63;
    v8 = lmask;
  }
  while ( 1 )
  {
    if ( v12 & 0x10 )
    {
      v14 = v12 & 0xF;
      len = v10 >> 16;
      if ( v14 )
      {
        if ( v7 < v14 )
        {
          ++in;
          v4 += (unsigned __int8)*in << v7;
          v7 += 8;
        }
        len += v4 & ((1 << v14) - 1);
        v4 >>= v14;
        v7 -= v14;
      }
      if ( v7 < 0xF )
      {
        v15 = (unsigned __int8)in[1];
        in += 2;
        v4 += ((unsigned __int8)*in << (v7 + 8)) + (v15 << v7);
        v7 += 16;
      }
      v16 = *(_DWORD *)(dcode + 4 * (v4 & dmask));
      v17 = (unsigned __int8)(*(_WORD *)(dcode + 4 * (v4 & dmask)) >> 8);
      v18 = *(_DWORD *)(dcode + 4 * (v4 & dmask));
      v4 >>= v17;
      v7 -= v17;
      this_2 = HIWORD(v16);
      if ( !(v18 & 0x10) )
      {
        while ( !(v18 & 0x40) )
        {
          v16 = *(_DWORD *)(dcode + 4 * (this_2 + (v4 & ((1 << v18) - 1))));
          v19 = (unsigned __int8)(*(_WORD *)(dcode + 4 * (this_2 + (v4 & ((1 << v18) - 1)))) >> 8);
          v18 = *(_DWORD *)(dcode + 4 * (this_2 + (v4 & ((1 << v18) - 1))));
          v4 >>= v19;
          v7 -= v19;
          this_2 = HIWORD(v16);
          if ( v18 & 0x10 )
            goto LABEL_18;
        }
        strm->msg = "invalid distance code";
        goto LABEL_61;
      }
LABEL_18:
      v20 = v18 & 0xF;
      dist = v16 >> 16;
      if ( v7 < v20 )
      {
        v21 = (unsigned __int8)(in++)[1];
        v22 = v21 << v7;
        v7 += 8;
        v4 += v22;
        if ( v7 < v20 )
        {
          v23 = (unsigned __int8)(in++)[1];
          v4 += v23 << v7;
          v7 += 8;
        }
      }
      v7 -= v20;
      v24 = v4 & ((1 << v20) - 1);
      v4 >>= v20;
      v25 = v24 + dist;
      v26 = (int)&v6[-beg];
      dista = v25;
      if ( v25 > (unsigned int)&v6[-beg] )
      {
        v27 = v25 - v26;
        this = v25 - v26;
        if ( v25 - v26 > whave )
        {
          strm->msg = "invalid distance too far back";
          state->dummy = 27;
          goto LABEL_62;
        }
        v28 = window - 1;
        if ( !write )
        {
          v29 = wsize - v27 + v28;
          if ( v27 < len )
          {
            len -= v27;
            do
            {
              v30 = *(_BYTE *)(v29++ + 1);
              ++v6;
              --v27;
              *v6 = v30;
            }
            while ( v27 );
            goto LABEL_39;
          }
LABEL_40:
          if ( len > 2 )
          {
            v38 = (len - 3) / 3 + 1;
            do
            {
              len -= 3;
              v6[1] = *(_BYTE *)(v29 + 1);
              v6[2] = *(_BYTE *)(v29 + 2);
              v39 = *(_BYTE *)(v29 + 3);
              v29 += 3;
              v6 += 3;
              --v38;
              *v6 = v39;
            }
            while ( v38 );
          }
          if ( len )
          {
            ++v6;
            *v6 = *(_BYTE *)(v29 + 1);
            if ( len > 1 )
            {
              LOBYTE(v13) = *(_BYTE *)(v29 + 2);
LABEL_51:
              ++v6;
              goto LABEL_52;
            }
          }
          goto LABEL_53;
        }
        if ( write >= (unsigned int)v27 )
        {
          v29 = write - v27 + v28;
          if ( v27 >= len )
            goto LABEL_40;
          len -= v27;
          do
          {
            v37 = *(_BYTE *)(v29++ + 1);
            ++v6;
            --v27;
            *v6 = v37;
          }
          while ( v27 );
        }
        else
        {
          v31 = wsize + write - v27;
          v32 = this - write;
          v29 = v31 + v28;
          if ( this - write >= len )
            goto LABEL_40;
          len -= v32;
          v33 = v29 - (_DWORD)v6;
          do
          {
            v34 = (v6++)[v33 + 1];
            --v32;
            *v6 = v34;
          }
          while ( v32 );
          v35 = write;
          v29 = window - 1;
          if ( write >= len )
            goto LABEL_40;
          len -= write;
          do
          {
            v36 = *(_BYTE *)(v29++ + 1);
            ++v6;
            --v35;
            *v6 = v36;
          }
          while ( v35 );
        }
LABEL_39:
        v29 = (int)&v6[-dista];
        goto LABEL_40;
      }
      v40 = (int)&v6[-v25];
      do
      {
        v6[1] = *(_BYTE *)(v40 + 1);
        v6[2] = *(_BYTE *)(v40 + 2);
        v41 = *(_BYTE *)(v40 + 3);
        v40 += 3;
        v6 += 3;
        *v6 = v41;
        v42 = len - 3;
        len = v42;
      }
      while ( (unsigned int)v42 > 2 );
      if ( v42 )
      {
        ++v6;
        *v6 = *(_BYTE *)(v40 + 1);
        if ( (unsigned int)v42 > 1 )
        {
          LOBYTE(v13) = *(_BYTE *)(v13 + 2);
          goto LABEL_51;
        }
      }
      goto LABEL_53;
    }
    if ( v12 & 0x40 )
      break;
    v10 = *(_DWORD *)(lcode + 4 * ((v10 >> 16) + (v4 & ((1 << v12) - 1))));
    v4 >>= SBYTE1(v10);
    v7 -= BYTE1(v10);
    v12 = v10;
    if ( !(_BYTE)v10 )
      goto LABEL_8;
  }
  if ( v12 & 0x20 )
  {
    state->dummy = 11;
    goto LABEL_62;
  }
  strm->msg = "invalid literal/length code";
LABEL_61:
  state->dummy = 27;
LABEL_62:
  v43 = last;
LABEL_63:
  v44 = (int)&in[-(v7 >> 3)];
  v45 = v7 - 8 * (v7 >> 3);
  strm->next_in = (char *)(v44 + 1);
  strm->next_out = v6 + 1;
  strm->avail_out = end - (_DWORD)v6 + 257;
  strm->avail_in = v43 - v44 + 5;
  state[13].dummy = v45;
  state[12].dummy = ((1 << v45) - 1) & v4;
}

//----- (00741C10) --------------------------------------------------------
int __cdecl inflate_table(codetype type, unsigned __int16 *lens, unsigned int codes, code **table, unsigned int *bits, unsigned __int16 *work)
{
  unsigned int v6; // eax@1
  unsigned int v7; // ecx@3
  signed int v8; // eax@3
  int result; // eax@9
  signed int v10; // edi@10
  int v11; // esi@24
  signed int v12; // eax@24
  signed int v13; // eax@30
  __int16 v14; // cx@31
  unsigned int v15; // eax@32
  unsigned int v16; // esi@42
  unsigned int v17; // ebx@42
  signed int v18; // edi@42
  unsigned __int16 *v19; // edx@45
  unsigned __int16 v20; // ax@47
  signed int v21; // ecx@47
  int v22; // eax@50
  signed int v23; // eax@53
  signed int v24; // edx@53
  int v25; // ecx@53
  unsigned int i; // eax@55
  int v27; // edx@58
  unsigned int v28; // eax@60
  bool v29; // zf@60
  int v30; // ecx@67
  signed int v31; // edx@67
  signed int v32; // eax@67
  __int16 *v33; // esi@68
  int v34; // eax@69
  code *v35; // edx@76
  unsigned int j; // eax@81
  int v37; // [sp+10h] [bp-88h]@64
  int mask; // [sp+18h] [bp-80h]@42
  signed int v39; // [sp+1Ch] [bp-7Ch]@42
  const unsigned __int16 *extra; // [sp+20h] [bp-78h]@38
  unsigned __int16 *v41; // [sp+24h] [bp-74h]@45
  int huff; // [sp+28h] [bp-70h]@58
  signed int low; // [sp+2Ch] [bp-6Ch]@42
  const unsigned __int16 *base; // [sp+30h] [bp-68h]@38
  signed int end; // [sp+34h] [bp-64h]@38
  signed int used; // [sp+38h] [bp-60h]@42
  code *next; // [sp+3Ch] [bp-5Ch]@42
  signed int max; // [sp+40h] [bp-58h]@6
  unsigned int root; // [sp+48h] [bp-50h]@3
  signed int len; // [sp+4Ch] [bp-4Ch]@42
  int this; // [sp+50h] [bp-48h]@48
  int thisa; // [sp+50h] [bp-48h]@75
  __int16 offs[16]; // [sp+54h] [bp-44h]@30
  __int16 count[16]; // [sp+74h] [bp-24h]@1
  unsigned int v55; // [sp+94h] [bp-4h]@1
  int v56; // [sp+98h] [bp+0h]@1

  v55 = (unsigned int)&v56 ^ __security_cookie;
  *(_DWORD *)count = 0;
  *(_DWORD *)&count[2] = 0;
  *(_DWORD *)&count[4] = 0;
  *(_DWORD *)&count[6] = 0;
  *(_DWORD *)&count[8] = 0;
  *(_DWORD *)&count[10] = 0;
  *(_DWORD *)&count[12] = 0;
  *(_DWORD *)&count[14] = 0;
  v6 = 0;
  if ( codes )
  {
    do
      ++count[lens[v6++]];
    while ( v6 < codes );
  }
  v7 = *bits;
  root = *bits;
  v8 = 15;
  do
  {
    if ( count[v8] )
      break;
    --v8;
  }
  while ( (unsigned int)v8 >= 1 );
  max = v8;
  if ( v7 > v8 )
  {
    root = v8;
    v7 = v8;
  }
  if ( !v8 )
  {
    *(_DWORD *)&(*table)->op = 320;
    ++*table;
    *(_DWORD *)&(*table)->op = 320;
    ++*table;
    *bits = 1;
    return 0;
  }
  v10 = 1;
  while ( !count[v10] )
  {
    if ( count[v10 + 1] )
    {
      ++v10;
      break;
    }
    if ( count[v10 + 2] )
    {
      v10 += 2;
      break;
    }
    if ( count[v10 + 3] )
    {
      v10 += 3;
      break;
    }
    if ( count[v10 + 4] )
    {
      v10 += 4;
      break;
    }
    v10 += 5;
    if ( (unsigned int)v10 > 0xF )
      break;
  }
  if ( v7 < v10 )
    root = v10;
  v11 = 1;
  v12 = 1;
  do
  {
    v11 = 2 * v11 - (unsigned __int16)count[v12];
    if ( v11 < 0 )
      return -1;
    ++v12;
  }
  while ( (unsigned int)v12 <= 0xF );
  if ( v11 > 0 && (!type || codes - (unsigned __int16)count[0] != 1) )
    return -1;
  offs[1] = 0;
  v13 = 1;
  do
  {
    v14 = count[v13] + offs[v13];
    ++v13;
    offs[v13] = v14;
  }
  while ( (unsigned int)(v13 * 2) < 0x1E );
  v15 = 0;
  if ( codes )
  {
    do
    {
      if ( lens[v15] )
        work[(unsigned __int16)offs[lens[v15]]++] = v15;
      ++v15;
    }
    while ( v15 < codes );
  }
  if ( type )
  {
    if ( type == 1 )
    {
      base = &lbase[-257];
      extra = &lext[-257];
      end = 256;
    }
    else
    {
      base = dbase;
      extra = dext;
      end = -1;
    }
  }
  else
  {
    extra = work;
    base = work;
    end = 19;
  }
  next = *table;
  len = v10;
  v16 = 0;
  v17 = 0;
  v18 = 1 << root;
  low = -1;
  v39 = 1 << root;
  used = 1 << root;
  mask = (1 << root) - 1;
  if ( type == 1 && (unsigned int)(1 << root) >= 0x506 )
    return 1;
  v19 = work;
  v41 = work;
  while ( 1 )
  {
    v20 = *v19;
    v21 = *v19;
    if ( v21 < end )
    {
      LOBYTE(this) = 0;
LABEL_52:
      HIWORD(this) = v20;
      goto LABEL_53;
    }
    if ( v21 <= end )
    {
      LOBYTE(this) = 96;
      v20 = 0;
      goto LABEL_52;
    }
    v22 = *v19;
    LOBYTE(this) = LOBYTE(extra[v22]);
    HIWORD(this) = base[v22];
LABEL_53:
    v23 = 1 << (len - v17);
    v24 = v18;
    v25 = (int)&next[v18 + (v16 >> v17)];
    do
    {
      v25 -= 4 * v23;
      v24 -= v23;
      BYTE1(this) = len - v17;
      *(_DWORD *)v25 = this;
    }
    while ( v24 );
    for ( i = 1 << (len - 1); i & v16; i >>= 1 )
      ;
    if ( i )
    {
      v27 = v16 & (i - 1);
      v16 = i + v27;
      huff = i + v27;
    }
    else
    {
      v16 = 0;
      huff = 0;
    }
    v28 = len;
    v19 = v41 + 1;
    v29 = count[len] == 1;
    --count[v28];
    ++v41;
    if ( !v29 )
      goto LABEL_63;
    if ( len == max )
      break;
    v28 = lens[*v19];
    len = lens[*v19];
LABEL_63:
    if ( v28 <= root || (v37 = v16 & mask, (v16 & mask) == low) )
    {
      v18 = v39;
    }
    else
    {
      if ( !v17 )
        v17 = root;
      v30 = len - v17;
      next += v39;
      v31 = len;
      v32 = 1 << (len - v17);
      if ( len < (unsigned int)max )
      {
        v33 = &count[len];
        do
        {
          v34 = v32 - (unsigned __int16)*v33;
          if ( v34 <= 0 )
            break;
          ++v31;
          ++v30;
          ++v33;
          v32 = 2 * v34;
        }
        while ( v31 < (unsigned int)max );
        v16 = huff;
      }
      result = 1;
      v18 = 1 << v30;
      used += 1 << v30;
      v39 = 1 << v30;
      if ( type == 1 && (unsigned int)used >= 0x506 )
        return result;
      (*table)[v37].op = v30;
      (*table)[v37].bits = root;
      (*table)[v37].val = next - *table;
      v19 = v41;
      low = v37;
    }
  }
  LOBYTE(thisa) = 64;
  BYTE1(thisa) = len - v17;
  HIWORD(thisa) = 0;
  if ( v16 )
  {
    v35 = next;
    while ( 1 )
    {
      if ( v17 && (v16 & mask) != low )
      {
        LOBYTE(v28) = root;
        v35 = *table;
        v17 = 0;
        LOBYTE(len) = root;
        BYTE1(thisa) = root;
      }
      *(_DWORD *)&v35[v16 >> v17].op = thisa;
      for ( j = 1 << (v28 - 1); j & v16; j >>= 1 )
        ;
      if ( !j )
        break;
      v16 = j + ((j - 1) & v16);
      if ( !v16 )
        break;
      LOBYTE(v28) = len;
    }
  }
  *table += used;
  *bits = root;
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (007420A0) --------------------------------------------------------
bool __thiscall NiPixelFormat::operator__(NiPixelFormat *this, NiPixelFormat *kOther)
{
  unsigned int v2; // edx@5
  unsigned int v3; // eax@5
  bool result; // al@8
  signed int v5; // edi@9
  char *v6; // edx@9
  char *v7; // eax@9

  if ( kOther->m_eFormat == this->m_eFormat
    && kOther->m_uFlags == this->m_uFlags
    && kOther->m_eTiling == this->m_eTiling
    && kOther->m_ucBitsPerPixel == this->m_ucBitsPerPixel
    && ((v2 = kOther->m_uiRendererHint, v3 = this->m_uiRendererHint, v2 == v3) || v3 == -1 || v2 == -1) )
  {
    v5 = 0;
    v6 = &kOther->m_akComponents[0].m_ucBitsPerComponent;
    v7 = (char *)this->m_akComponents;
    while ( *(_DWORD *)&v7[(char *)kOther - (char *)this] == *(_DWORD *)v7
         && *((_DWORD *)v6 - 1) == *((_DWORD *)v7 + 1)
         && *v6 == v7[8]
         && v6[1] == v7[9] )
    {
      ++v5;
      v6 += 12;
      v7 += 12;
      if ( v5 >= 4 )
        return 1;
    }
    result = 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00742130) --------------------------------------------------------
void __thiscall NiPNGReader::Unpack4BitSourceRowPal(NiPNGReader *this, char *pucSrc, char *pucDest)
{
  unsigned int v3; // esi@1
  char *v4; // eax@2

  v3 = 0;
  if ( this->m_usWidth & 0xFFFE )
  {
    v4 = pucDest;
    do
    {
      ++v3;
      *v4 = v4[pucSrc - pucDest] - LOBYTE(this->m_usMinPalIndex);
      ++v4;
    }
    while ( v3 < (unsigned int)this->m_usWidth >> 1 );
  }
}

//----- (00742170) --------------------------------------------------------
void __thiscall NiPNGReader::Unpack8BitSourceRowPal(NiPNGReader *this, char *pucSrc, char *pucDest)
{
  unsigned int v3; // esi@1
  char *v4; // eax@2

  v3 = 0;
  if ( this->m_usWidth > 0u )
  {
    v4 = pucDest;
    do
    {
      ++v3;
      *v4 = v4[pucSrc - pucDest] - LOBYTE(this->m_usMinPalIndex);
      ++v4;
    }
    while ( v3 < this->m_usWidth );
  }
}

//----- (007421A0) --------------------------------------------------------
void __thiscall NiPNGReader::Unpack32BitFrom24BitSourceRow(NiPNGReader *this, char *pucSrc, char *pucDest)
{
  unsigned int v3; // esi@1
  char *v4; // eax@2
  char *v5; // edx@2

  v3 = 0;
  if ( this->m_usWidth > 0u )
  {
    v4 = pucDest;
    v5 = pucSrc + 2;
    do
    {
      *v4 = *(v5 - 2);
      v4[1] = *(v5 - 1);
      v4[2] = *v5;
      v4[3] = -1;
      ++v3;
      v4 += 4;
      v5 += 3;
    }
    while ( v3 < this->m_usWidth );
  }
}

//----- (007421F0) --------------------------------------------------------
void __thiscall NiPNGReader::Unpack32BitFrom32BitSourceRow(NiPNGReader *this, char *pucSrc, char *pucDest)
{
  unsigned int v3; // esi@1
  char *v4; // eax@2
  char *v5; // edx@2

  v3 = 0;
  if ( this->m_usWidth > 0u )
  {
    v4 = pucDest;
    v5 = pucSrc + 2;
    do
    {
      *v4 = *(v5 - 2);
      v4[1] = *(v5 - 1);
      v4[2] = *v5;
      v4[3] = v5[1];
      ++v3;
      v4 += 4;
      v5 += 4;
    }
    while ( v3 < this->m_usWidth );
  }
}

//----- (00742240) --------------------------------------------------------
bool __thiscall NiPNGReader::CanReadFile(NiPNGReader *this, const char *pcFileExtension)
{
  return NiStricmp(pcFileExtension, ".png") == 0;
}

//----- (00742260) --------------------------------------------------------
unsigned int __thiscall NiBinaryStream::Read(NiBinaryStream *this, void *pvBuffer, unsigned int uiBytes)
{
  NiBinaryStream *v3; // ST00_4@1
  unsigned int (__cdecl *v4)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // ecx@1
  NiBinaryStream *uiSize; // [sp+0h] [bp-4h]@1

  uiSize = this;
  v3 = this;
  v4 = this->m_pfnRead;
  uiSize = (NiBinaryStream *)1;
  return v4(v3, pvBuffer, uiBytes, (unsigned int *)&uiSize, 1u);
}

//----- (00742290) --------------------------------------------------------
void __thiscall NiPixelData::SetPalette(NiD3DPass *this, NiD3DPixelShader *pkPixelShader)
{
  NiD3DPass *v2; // ebx@1
  NiD3DPixelShader *v3; // esi@1

  v2 = this;
  v3 = this->m_spPixelShader.m_pObject;
  if ( v3 != pkPixelShader )
  {
    if ( v3 && !InterlockedDecrement((volatile LONG *)&v3->baseclass_0.baseclass_0.m_uiRefCount) && v3 )
      v3->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v3, 1u);
    v2->m_spPixelShader.m_pObject = pkPixelShader;
    if ( pkPixelShader )
      InterlockedIncrement((volatile LONG *)&pkPixelShader->baseclass_0.baseclass_0.m_uiRefCount);
  }
}

//----- (007422E0) --------------------------------------------------------
void __thiscall NiPNGReader::NiPNGReader(NiPNGReader *this)
{
  NiPNGReader *v1; // ebx@1

  v1 = this;
  this->baseclass_0.vfptr = (NiImageReaderVtbl *)&NiImageReader::_vftable_;
  this->baseclass_0.m_kReadCriticalSection.m_ulThreadOwner = 0;
  this->baseclass_0.m_kReadCriticalSection.m_uiLockCount = 0;
  InitializeCriticalSection(&this->baseclass_0.m_kReadCriticalSection.m_kCriticalSection);
  v1->baseclass_0.vfptr = (NiImageReaderVtbl *)&NiPNGReader::_vftable_;
  NiPixelFormat::NiPixelFormat(&v1->m_kFormat);
  v1->m_usPalLength = 0;
  v1->m_ucCoSize = 0;
  *(_DWORD *)&v1->m_usWidth = 0;
  *(_DWORD *)&v1->m_ucPixelSize = 0;
  *(_WORD *)&v1->m_bColormapped = 0;
  *(_DWORD *)&v1->m_ucIDLength = 0;
  *(_DWORD *)&v1->m_usXOrigin = 0;
  memcpy(&v1->m_kFormat, &NiPixelFormat::RGB24, sizeof(v1->m_kFormat));
  v1->m_uiRawDataMax = 0;
  v1->m_pucRawData = 0;
  v1->m_uiColorMapMax = 0;
  v1->m_pkColorMap = 0;
  v1->m_pfnUnpacker = 0;
}
// 9DCA9C: using guessed type int (__thiscall *NiImageReader___vftable_)(void *p, char);
// 9DCAB0: using guessed type int (__thiscall *NiPNGReader___vftable_)(void *p, char);

//----- (00742360) --------------------------------------------------------
void *__thiscall NiPNGReader::_scalar_deleting_destructor_(NiPNGReader *this, unsigned int a2)
{
  NiPNGReader *v2; // esi@1
  void *v3; // ST04_4@1

  v2 = this;
  v3 = this->m_pucRawData;
  this->baseclass_0.vfptr = (NiImageReaderVtbl *)&NiPNGReader::_vftable_;
  operator delete(v3);
  operator delete(v2->m_pkColorMap);
  v2->baseclass_0.vfptr = (NiImageReaderVtbl *)&NiImageReader::_vftable_;
  DeleteCriticalSection(&v2->baseclass_0.m_kReadCriticalSection.m_kCriticalSection);
  if ( a2 & 1 )
    operator delete(v2);
  return v2;
}
// 9DCA9C: using guessed type int (__thiscall *NiImageReader___vftable_)(void *p, char);
// 9DCAB0: using guessed type int (__thiscall *NiPNGReader___vftable_)(void *p, char);

//----- (007423B0) --------------------------------------------------------
void __cdecl NiPNGReaderReadCB(png_struct_def *png_ptr, char *data, unsigned int length)
{
  int v3; // ecx@0
  void *v4; // eax@1
  void (__cdecl *v5)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // edx@1
  int v6; // [sp+0h] [bp-4h]@1

  v6 = v3;
  v4 = png_get_io_ptr(png_ptr);
  v5 = (void (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))*((_DWORD *)v4 + 1);
  v6 = 1;
  v5(v4, data, length, &v6, 1);
}

//----- (007423E0) --------------------------------------------------------
NiPixelData *__thiscall NiPNGReader::ReadBody(NiPNGReader *this, NiFile *kIst, NiPixelData *pkOptDest)
{
  int v3; // ebp@0
  int v4; // edi@0
  int v5; // esi@0
  void *v6; // eax@1
  NiPixelData *result; // eax@4
  png_info_struct *v8; // edi@7
  NiPNGReader *v9; // esi@7
  void *v10; // ST20_4@9
  void *v11; // eax@9
  NiPalette::PaletteEntry *v12; // eax@10
  int v13; // ecx@10
  unsigned int v14; // edx@10
  unsigned int v15; // eax@13
  int v16; // ecx@14
  NiPixelData *v17; // ebx@16
  void *v18; // eax@21
  void *v19; // eax@22
  void *v20; // eax@26
  char *v21; // eax@27
  NiPalette *v22; // edi@29
  void *v23; // ecx@38
  unsigned int *v24; // edx@38
  unsigned int v25; // eax@38
  int v26; // ebx@38
  char *v27; // eax@45
  unsigned int v28; // ecx@45
  void *v29; // [sp+0h] [bp-28h]@0
  int v30; // [sp+4h] [bp-24h]@0
  char v31; // [sp+8h] [bp-20h]@0
  int iVar; // [sp+Ch] [bp-1Ch]@1
  NiPNGReader *v33; // [sp+10h] [bp-18h]@1
  unsigned int uiRow; // [sp+14h] [bp-14h]@42
  char *pucDestPixels; // [sp+18h] [bp-10h]@27
  NiPixelData *pkDest; // [sp+1Ch] [bp-Ch]@20
  png_struct_def *pPng; // [sp+20h] [bp-8h]@1
  png_info_struct *pInfo; // [sp+24h] [bp-4h]@1

  v33 = this;
  ((void (__stdcall *)(_DWORD, _DWORD))kIst->baseclass_0.vfptr[1].__vecDelDtor)(0, 0);
  pPng = 0;
  pInfo = 0;
  v6 = png_create_read_struct(
         "1.2.8",
         &iVar,
         (void (__cdecl *)(png_struct_def *, const char *))ITableBase<TextDataType3_TextData3>::BeforeTerminate,
         (void (__cdecl *)(png_struct_def *, const char *))ITableBase<TextDataType3_TextData3>::BeforeTerminate);
  pPng = (png_struct_def *)v6;
  if ( !v6 )
    return 0;
  pInfo = png_create_info_struct((png_struct_def *)v6);
  if ( !pInfo )
  {
    png_destroy_read_struct(&pPng, 0, 0);
    return 0;
  }
  if ( _setjmp3(0, v3, v4, v5, (int)pPng, 0, v29, v30, v31) )
  {
    png_destroy_read_struct(&pPng, &pInfo, 0);
    result = 0;
  }
  else
  {
    png_set_read_fn(pPng, kIst, NiPNGReaderReadCB);
    png_set_sig_bytes(pPng, 0);
    png_read_png(pPng, pInfo, 0, 0);
    v8 = pInfo;
    v9 = v33;
    if ( pInfo->palette )
    {
      v33->m_bColormapped = 1;
      v9->m_usPalLength = v8->num_palette;
      if ( v9->m_uiColorMapMax < v8->num_palette )
      {
        v10 = v9->m_pkColorMap;
        v9->m_uiColorMapMax = v8->num_palette;
        operator delete(v10);
        v11 = operator new(4 * v9->m_usPalLength);
        v8 = pInfo;
        v9->m_pkColorMap = (NiPalette::PaletteEntry *)v11;
      }
      v12 = v9->m_pkColorMap;
      v13 = 0;
      v14 = 0;
      if ( v9->m_usPalLength > 0u )
      {
        do
        {
          v12->m_ucBlue = v8->palette[v13].blue;
          v12->m_ucGreen = pInfo->palette[v13].green;
          v12->m_ucRed = pInfo->palette[v13].red;
          v12->m_ucAlpha = -1;
          ++v14;
          ++v12;
          ++v13;
          v8 = pInfo;
        }
        while ( v14 < v9->m_usPalLength );
      }
      if ( v8->trans )
      {
        v15 = 0;
        if ( v8->num_trans > 0u )
        {
          v16 = (int)&v9->m_pkColorMap->m_ucAlpha;
          do
          {
            *(_BYTE *)v16 = v8->trans[v15];
            v8 = pInfo;
            ++v15;
            v16 += 4;
          }
          while ( v15 < pInfo->num_trans );
        }
      }
    }
    v17 = pkOptDest;
    if ( pkOptDest
      && *pkOptDest->m_puiWidth == v9->m_usWidth
      && *pkOptDest->m_puiHeight == v9->m_usHeight
      && NiPixelFormat::operator__(&pkOptDest->m_kPixelFormat, &v9->m_kFormat) )
    {
      pkDest = pkOptDest;
    }
    else
    {
      v18 = operator new(0x70u);
      if ( v18 )
      {
        NiPixelData::NiPixelData((NiPixelData *)v18, v9->m_usWidth, v9->m_usHeight, &v9->m_kFormat, 1u, 1u);
        pkDest = (NiPixelData *)v19;
      }
      else
      {
        pkDest = 0;
      }
      v17 = pkDest;
      v8 = pInfo;
    }
    if ( v9->m_bColormapped )
    {
      v20 = operator new(0x24u);
      if ( v20 )
      {
        NiPalette::NiPalette((NiPalette *)v20, v9->m_bAlpha, v9->m_usPalLength, v9->m_pkColorMap);
        pucDestPixels = v21;
      }
      else
      {
        pucDestPixels = 0;
        v21 = 0;
      }
      v22 = v17->m_spPalette.m_pObject;
      if ( (char *)v22 != v21 )
      {
        if ( v22 )
        {
          if ( !InterlockedDecrement((volatile LONG *)&v22->baseclass_0.baseclass_0.m_uiRefCount) && v22 )
            v22->baseclass_0.baseclass_0.vfptr->__vecDelDtor((NiRefObject *)v22, 1u);
          v21 = pucDestPixels;
        }
        v17->m_spPalette.m_pObject = (NiPalette *)v21;
        if ( v21 )
          InterlockedIncrement((volatile LONG *)v21 + 1);
      }
      v8 = pInfo;
    }
    v23 = &v17->m_pucPixels[*v17->m_puiOffsetInBytes];
    v24 = v17->m_puiWidth;
    v25 = *v24;
    v26 = *v24 * v17->m_uiPixelStride;
    pucDestPixels = (char *)v23;
    if ( !v26 )
      v26 = v25 >> 1;
    if ( v9->m_bFlipVert )
    {
      v23 = (char *)v23 + v26 * (v9->m_usHeight - 1);
      pucDestPixels = (char *)v23;
      v26 = -v26;
    }
    uiRow = 0;
    if ( v9->m_usHeight > 0u )
    {
      while ( 1 )
      {
        v27 = v8->row_pointers[uiRow];
        v9->m_pucRawData = v27;
        v9->m_pfnUnpacker(v9, v27, (char *)v23);
        v28 = v9->m_usHeight;
        pucDestPixels += v26;
        ++uiRow;
        if ( uiRow >= v28 )
          break;
        v8 = pInfo;
        v23 = pucDestPixels;
      }
    }
    v9->m_pucRawData = 0;
    png_destroy_read_struct(&pPng, &pInfo, 0);
    result = pkDest;
  }
  return result;
}

//----- (00742720) --------------------------------------------------------
void __cdecl NiStreamLoadBinary<unsigned_int>(NiBinaryStream *binstream, unsigned int *value)
{
  int v2; // ecx@0
  unsigned int (__cdecl *v3)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // edx@1
  int v4; // [sp+0h] [bp-4h]@1

  v4 = v2;
  v3 = binstream->m_pfnRead;
  v4 = 4;
  v3(binstream, value, 4u, (unsigned int *)&v4, 1u);
}

//----- (00742750) --------------------------------------------------------
bool __thiscall NiPNGReader::ReadHeader(NiPNGReader *this, NiFile *kIst, unsigned int *uiWidth, unsigned int *uiHeight, NiPixelFormat *kFormat, bool *bMipmap, unsigned int *uiNumFaces)
{
  NiFile *v7; // esi@1
  NiPNGReader *v8; // ebx@1
  unsigned int (__cdecl *v9)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int (__cdecl *v10)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int (__cdecl *v11)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int (__cdecl *v12)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int (__cdecl *v13)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int (__cdecl *v14)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int (__cdecl *v15)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int (__cdecl *v16)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // edx@1
  unsigned int (__cdecl *v17)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // eax@1
  unsigned int v18; // ecx@1
  unsigned int *v19; // edi@2
  unsigned int (__cdecl *v20)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // ecx@2
  unsigned int *v21; // edi@2
  unsigned int (__cdecl *v22)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // edx@2
  unsigned int (__cdecl *v23)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // ecx@2
  unsigned int (__cdecl *v24)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // ecx@2
  unsigned int (__cdecl *v25)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // ecx@2
  unsigned int (__cdecl *v26)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // ecx@2
  unsigned int (__cdecl *v27)(NiBinaryStream *, void *, unsigned int, unsigned int *, unsigned int); // ecx@2
  char v28; // al@3
  char v29; // dl@4
  char v30; // cl@4
  bool v31; // zf@15
  int v32; // eax@16
  void *v33; // edi@16
  const void *v34; // esi@17
  unsigned int *v35; // ecx@20
  void *v36; // edi@20
  const void *v37; // esi@20
  bool *v38; // eax@20
  int uiCRC; // [sp+Ch] [bp-Ch]@2
  int v41; // [sp+10h] [bp-8h]@1
  char uIM; // [sp+16h] [bp-2h]@2
  char uFM; // [sp+17h] [bp-1h]@2

  v7 = kIst;
  v8 = this;
  *uiNumFaces = 1;
  v9 = v7->baseclass_0.m_pfnRead;
  v41 = 1;
  v9(&v7->baseclass_0, this->m_aucHeader, 1u, (unsigned int *)&v41, 1u);
  v10 = v7->baseclass_0.m_pfnRead;
  v41 = 1;
  v10(&v7->baseclass_0, &v8->m_aucHeader[1], 1u, (unsigned int *)&v41, 1u);
  v11 = v7->baseclass_0.m_pfnRead;
  v41 = 1;
  v11(&v7->baseclass_0, &v8->m_aucHeader[2], 1u, (unsigned int *)&v41, 1u);
  v12 = v7->baseclass_0.m_pfnRead;
  v41 = 1;
  v12(&v7->baseclass_0, &v8->m_aucHeader[3], 1u, (unsigned int *)&v41, 1u);
  v13 = v7->baseclass_0.m_pfnRead;
  v41 = 1;
  v13(&v7->baseclass_0, &v8->m_aucHeader[4], 1u, (unsigned int *)&v41, 1u);
  v14 = v7->baseclass_0.m_pfnRead;
  v41 = 1;
  v14(&v7->baseclass_0, &v8->m_aucHeader[5], 1u, (unsigned int *)&v41, 1u);
  v15 = v7->baseclass_0.m_pfnRead;
  v41 = 1;
  v15(&v7->baseclass_0, &v8->m_aucHeader[6], 1u, (unsigned int *)&v41, 1u);
  v41 = 1;
  v7->baseclass_0.m_pfnRead((NiBinaryStream *)v7, &v8->m_aucHeader[7], 1u, (unsigned int *)&v41, 1u);
  v16 = v7->baseclass_0.m_pfnRead;
  v41 = 4;
  v16(&v7->baseclass_0, &v8->m_uiLength, 4u, (unsigned int *)&v41, 1u);
  v8->m_uiLength = BYTE3(v8->m_uiLength)
                 + ((BYTE2(v8->m_uiLength) + ((BYTE1(v8->m_uiLength) + (LOBYTE(v8->m_uiLength) << 8)) << 8)) << 8);
  v17 = v7->baseclass_0.m_pfnRead;
  v41 = 4;
  v17(&v7->baseclass_0, &v8->m_uiType, 4u, (unsigned int *)&v41, 1u);
  v18 = v8->m_uiType;
  v8->m_acType[1] = LOWORD(v8->m_uiType) >> 8;
  v8->m_acType[0] = v18;
  v8->m_acType[2] = v18 >> 16;
  v8->m_acType[3] = BYTE3(v18);
  v8->m_acType[4] = 0;
  if ( !strcmp(v8->m_acType, "IHDR") )
  {
    v19 = uiWidth;
    v20 = v7->baseclass_0.m_pfnRead;
    v41 = 4;
    v20(&v7->baseclass_0, uiWidth, 4u, (unsigned int *)&v41, 1u);
    *v19 = *((_BYTE *)v19 + 3) + ((*((_BYTE *)v19 + 2) + ((*((_BYTE *)v19 + 1) + (*(_BYTE *)v19 << 8)) << 8)) << 8);
    v21 = uiHeight;
    v22 = v7->baseclass_0.m_pfnRead;
    v41 = 4;
    v22(&v7->baseclass_0, uiHeight, 4u, (unsigned int *)&v41, 1u);
    *v21 = *((_BYTE *)v21 + 3) + ((*((_BYTE *)v21 + 2) + ((*((_BYTE *)v21 + 1) + (*(_BYTE *)v21 << 8)) << 8)) << 8);
    v23 = v7->baseclass_0.m_pfnRead;
    v41 = 1;
    v23(&v7->baseclass_0, (char *)&uiNumFaces + 3, 1u, (unsigned int *)&v41, 1u);
    v24 = v7->baseclass_0.m_pfnRead;
    v41 = 1;
    v24(&v7->baseclass_0, &v8->m_ucImgType, 1u, (unsigned int *)&v41, 1u);
    v25 = v7->baseclass_0.m_pfnRead;
    v41 = 1;
    v25(&v7->baseclass_0, (char *)&kIst + 3, 1u, (unsigned int *)&v41, 1u);
    v41 = 1;
    v7->baseclass_0.m_pfnRead((NiBinaryStream *)v7, &uFM, 1u, (unsigned int *)&v41, 1u);
    v26 = v7->baseclass_0.m_pfnRead;
    v41 = 1;
    v26(&v7->baseclass_0, &uIM, 1u, (unsigned int *)&v41, 1u);
    v27 = v7->baseclass_0.m_pfnRead;
    v41 = 4;
    v27(&v7->baseclass_0, &uiCRC, 4u, (unsigned int *)&v41, 1u);
  }
  v28 = BYTE3(uiNumFaces);
  switch ( v8->m_ucImgType )
  {
    case 0:
    case 2:
      v29 = 2 * BYTE3(uiNumFaces);
      v8->m_bColormapped = 0;
      v30 = v29 + v28;
      goto LABEL_8;
    case 3:
      v8->m_ucPixelSize = BYTE3(uiNumFaces);
      v8->m_bColormapped = 1;
      break;
    case 4:
      v8->m_ucPixelSize = 4 * BYTE3(uiNumFaces);
      v8->m_bColormapped = 0;
      break;
    case 6:
      v30 = 4 * BYTE3(uiNumFaces);
      *(_WORD *)&v8->m_bAlpha = 1;
LABEL_8:
      v8->m_ucPixelSize = v30;
      break;
    default:
      break;
  }
  switch ( v8->m_ucPixelSize )
  {
    case 4:
      v8->m_uiBytesPerPixel = 0;
      v8->m_pfnUnpacker = NiPNGReader::Unpack4BitSourceRowPal;
      break;
    case 8:
      v8->m_uiBytesPerPixel = 1;
      v8->m_pfnUnpacker = NiPNGReader::Unpack8BitSourceRowPal;
      break;
    case 0xF:
    case 0x10:
      v8->m_uiBytesPerPixel = 2;
      break;
    case 0x18:
      v8->m_uiBytesPerPixel = 3;
      v8->m_pfnUnpacker = NiPNGReader::Unpack32BitFrom24BitSourceRow;
      break;
    case 0x20:
      v8->m_uiBytesPerPixel = 4;
      v8->m_pfnUnpacker = NiPNGReader::Unpack32BitFrom32BitSourceRow;
      break;
    default:
      break;
  }
  v31 = v8->m_bColormapped == 0;
  v8->m_bAlpha = 1;
  if ( v31 )
  {
    v32 = (int)&v8->m_kFormat;
    v34 = &NiPixelFormat::RGBA32;
    v33 = &v8->m_kFormat;
  }
  else
  {
    v31 = v28 == 4;
    v32 = (int)&v8->m_kFormat;
    v33 = &v8->m_kFormat;
    if ( v31 )
      v34 = &NiPixelFormat::PALA4;
    else
      v34 = &NiPixelFormat::PALA8;
  }
  memcpy(v33, v34, 0x44u);
  v35 = uiHeight;
  v36 = kFormat;
  v8->m_usWidth = *(_WORD *)uiWidth;
  v37 = (const void *)v32;
  v38 = bMipmap;
  v8->m_usHeight = *(_WORD *)v35;
  memcpy(v36, v37, 0x44u);
  *v38 = 0;
  return 1;
}

//----- (00742B00) --------------------------------------------------------
NiPixelData *__thiscall NiPNGReader::ReadFile(NiPNGReader *this, NiFile *kIst, NiPixelData *pkOptDest)
{
  NiPNGReader *v3; // esi@1
  NiPixelData *result; // eax@2
  int uiNumFaces; // [sp+Ch] [bp-58h]@1
  int uiW; // [sp+10h] [bp-54h]@1
  int uiH; // [sp+14h] [bp-50h]@1
  char bMipmap; // [sp+1Bh] [bp-49h]@1
  NiPixelFormat kFmt; // [sp+1Ch] [bp-48h]@1
  unsigned int v10; // [sp+60h] [bp-4h]@1
  int v11; // [sp+64h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v3 = this;
  NiPixelFormat::NiPixelFormat(&kFmt);
  if ( v3->baseclass_0.vfptr->ReadHeader(
         (NiImageReader *)v3,
         kIst,
         (unsigned int *)&uiW,
         (unsigned int *)&uiH,
         &kFmt,
         (bool *)&bMipmap,
         (unsigned int *)&uiNumFaces) )
    result = NiPNGReader::ReadBody(v3, kIst, pkOptDest);
  else
    result = 0;
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00742B80) --------------------------------------------------------
lua_TValue *__usercall index2addr<eax>(lua_State *L<esi>, int idx<ecx>)
{
  CallInfo *v2; // edx@1
  lua_TValue *result; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9

  v2 = L->ci;
  if ( idx > 0 )
  {
    result = &v2->func[idx];
    if ( result < L->top )
      return result;
    return &luaO_nilobject_;
  }
  if ( idx > -1001000 )
    return &L->top[idx];
  if ( idx == -1001000 )
    return &L->l_G->l_registry;
  v4 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v5 = v2->func->u.i.v__.gc,
        v6 = *(&v5->gch.marked + 1),
        v9 = __OFSUB__(v4, v6),
        v7 = v4 == v6,
        v8 = v4 - v6 < 0,
        result = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4),
        !((unsigned __int8)(v8 ^ v9) | v7)) )
    return &luaO_nilobject_;
  return result;
}

//----- (00742BD0) --------------------------------------------------------
void __cdecl growstack(lua_State *L, void *ud)
{
  luaD_growstack(L, *(_DWORD *)ud);
}

//----- (00742BF0) --------------------------------------------------------
int __cdecl lua_checkstack(lua_State *L, int size)
{
  int v2; // ecx@1
  lua_TValue *v3; // eax@1
  CallInfo *v4; // edi@1
  int result; // eax@2
  lua_TValue *v6; // ecx@7

  v2 = size;
  v3 = L->top;
  v4 = L->ci;
  if ( (signed int)(L->stack_last - v3) > size )
  {
    result = 1;
    goto LABEL_7;
  }
  if ( (signed int)(v3 - L->stack + 5) > 1000000 - size )
    return 0;
  result = luaD_rawrunprotected(L, growstack, &size) == 0;
  if ( result )
  {
    v2 = size;
LABEL_7:
    v6 = &L->top[v2];
    if ( v4->top < v6 )
      v4->top = v6;
  }
  return result;
}

//----- (00742C60) --------------------------------------------------------
void __cdecl lua_xmove(lua_State *from, lua_State *to, int n)
{
  int i; // ecx@2
  lua_TValue *v4; // eax@3
  lua_TValue *v5; // edx@3

  if ( from != to )
  {
    from->top -= n;
    for ( i = 0; i < n; v4->u.i.tt__ = v5->u.i.tt__ )
    {
      v4 = to->top;
      v5 = &from->top[i];
      to->top = v4 + 1;
      v4->u.i.v__.gc = v5->u.i.v__.gc;
      ++i;
    }
  }
}

//----- (00742CB0) --------------------------------------------------------
int (__cdecl *__cdecl lua_atpanic(lua_State *L, int (__cdecl *panicf)(lua_State *)))(lua_State *)
{
  global_State *v2; // ecx@1
  int (__cdecl *result)(lua_State *); // eax@1

  v2 = L->l_G;
  result = v2->panic;
  v2->panic = panicf;
  return result;
}

//----- (00742CD0) --------------------------------------------------------
const long double *__cdecl lua_version(lua_State *L)
{
  const long double *result; // eax@2

  if ( L )
    result = L->l_G->version;
  else
    result = &version;
  return result;
}

//----- (00742CF0) --------------------------------------------------------
int __cdecl lua_absindex(lua_State *L, int idx)
{
  int result; // eax@2

  if ( (unsigned int)(idx + 1000999) > 0xF4627 )
    result = idx;
  else
    result = idx + L->top - L->ci->func;
  return result;
}

//----- (00742D20) --------------------------------------------------------
int __cdecl lua_gettop(lua_State *L)
{
  return (signed int)((char *)L->top - (char *)L->ci->func - 8) >> 3;
}

//----- (00742D40) --------------------------------------------------------
void __cdecl lua_settop(lua_State *L, int idx)
{
  lua_TValue *i; // ecx@2

  if ( idx < 0 )
  {
    L->top += idx + 1;
  }
  else
  {
    for ( i = &L->ci->func[idx + 1]; L->top < i; ++L->top )
      L->top->u.i.tt__ = 2146936064;
    L->top = i;
  }
}

//----- (00742D90) --------------------------------------------------------
void __cdecl lua_remove(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  lua_TValue *v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // esi@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int v10; // eax@11
  int v11; // ecx@12

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = &v2->func[idx];
    if ( v3 < L->top )
      goto LABEL_11;
LABEL_10:
    v3 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v3 = &L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v3 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v4 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v5 = v2->func->u.i.v__.gc,
        v6 = *(&v5->gch.marked + 1),
        v9 = __OFSUB__(v4, v6),
        v7 = v4 == v6,
        v8 = v4 - v6 < 0,
        v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4),
        !((unsigned __int8)(v8 ^ v9) | v7)) )
    goto LABEL_10;
LABEL_11:
  v10 = (int)&v3[1];
  if ( (lua_TValue *)v10 < L->top )
  {
    v11 = v10 - 8;
    do
    {
      *(_DWORD *)v11 = *(_DWORD *)v10;
      *(_DWORD *)(v11 + 4) = *(_DWORD *)(v10 + 4);
      v10 += 8;
      v11 += 8;
    }
    while ( (lua_TValue *)v10 < L->top );
  }
  --L->top;
}

//----- (00742E20) --------------------------------------------------------
void __cdecl lua_insert(lua_State *L, int idx)
{
  CallInfo *v2; // edx@1
  int v3; // ecx@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  lua_TValue *v7; // eax@11
  int v8; // edx@12
  lua_TValue *v9; // eax@14

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
      goto LABEL_11;
LABEL_10:
    v3 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v3 = (int)&L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v3 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v4 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v5 = v2->func->u.i.v__.gc, v6 = *(&v5->gch.marked + 1), v3 = (int)(&v5->ts.tsv.hash + 2 * v4), v4 > v6) )
    goto LABEL_10;
LABEL_11:
  v7 = L->top;
  if ( (unsigned int)v7 > v3 )
  {
    v8 = (int)&v7[-1];
    do
    {
      v7->u.i.v__.gc = *(GCObject **)v8;
      v7->u.i.tt__ = *(_DWORD *)(v8 + 4);
      --v7;
      v8 -= 8;
    }
    while ( (unsigned int)v7 > v3 );
  }
  v9 = L->top;
  *(_DWORD *)v3 = v9->u.i.v__.gc;
  *(_DWORD *)(v3 + 4) = v9->u.i.tt__;
}

//----- (00742EB0) --------------------------------------------------------
void __usercall moveto(lua_State *L<esi>, lua_TValue *fr<edi>, int idx<ecx>)
{
  CallInfo *v3; // edx@1
  lua_TValue *v4; // eax@2
  lua_TValue *v5; // edx@8
  int v6; // eax@8
  GCObject *v7; // edx@9
  int v8; // ebx@9
  bool v9; // zf@9
  bool v10; // sf@9
  unsigned __int8 v11; // of@9
  int v12; // eax@12
  int v13; // ecx@16

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
LABEL_10:
    v4 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v4 = &L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v4 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v5 = v3->func;
  v6 = -1001000 - idx;
  if ( v5->u.i.tt__ == 2146936086
    || (v7 = v5->u.i.v__.gc,
        v8 = *(&v7->gch.marked + 1),
        v11 = __OFSUB__(v6, v8),
        v9 = v6 == v8,
        v10 = v6 - v8 < 0,
        v4 = (lua_TValue *)(&v7->ts.tsv.hash + 2 * v6),
        !((unsigned __int8)(v10 ^ v11) | v9)) )
    goto LABEL_10;
LABEL_11:
  *(_QWORD *)&v4->u.i.v__.gc = *(_QWORD *)&fr->u.i.v__.gc;
  if ( idx < -1001000 )
  {
    v12 = fr->u.i.tt__;
    if ( (fr->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
      LOBYTE(v12) = 3;
    if ( v12 & 0x40 && fr->u.i.v__.gc->gch.marked & 3 )
    {
      v13 = **(_DWORD **)L->ci;
      if ( *(_BYTE *)(v13 + 5) & 4 )
        luaC_barrier_(L, (GCObject *)v13, fr->u.i.v__.gc);
    }
  }
}

//----- (00742F60) --------------------------------------------------------
void __cdecl lua_replace(lua_State *L, int idx)
{
  moveto(L, L->top - 1, idx);
  --L->top;
}

//----- (00742F80) --------------------------------------------------------
void __cdecl lua_copy(lua_State *L, int fromidx, int toidx)
{
  CallInfo *v3; // edx@1
  lua_TValue *v4; // edi@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  lua_TValue *v7; // edi@9

  v3 = L->ci;
  if ( fromidx > 0 )
  {
    v4 = &v3->func[fromidx];
    if ( v4 < L->top )
    {
      moveto(L, v4, toidx);
      return;
    }
LABEL_10:
    v7 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( fromidx > -1001000 )
  {
    moveto(L, &L->top[fromidx], toidx);
    return;
  }
  if ( fromidx == -1001000 )
  {
    moveto(L, &L->l_G->l_registry, toidx);
    return;
  }
  v5 = -1001000 - fromidx;
  if ( v3->func->u.i.tt__ == 2146936086
    || (v6 = v3->func->u.i.v__.gc, v7 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5), v5 > *(&v6->gch.marked + 1)) )
    goto LABEL_10;
LABEL_11:
  moveto(L, v7, toidx);
}

//----- (00743010) --------------------------------------------------------
void __cdecl lua_pushvalue(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  int v3; // eax@2
  lua_TValue *v4; // ecx@3
  lua_TValue *v5; // eax@5
  lua_TValue *v6; // ecx@5
  global_State *v7; // eax@7
  lua_TValue *v8; // ecx@7
  int v9; // eax@8
  GCObject *v10; // ecx@9
  int v11; // esi@9
  bool v12; // zf@9
  bool v13; // sf@9
  unsigned __int8 v14; // of@9
  int v15; // eax@9
  lua_TValue *v16; // ecx@11

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
    {
      v4 = L->top;
      v4->u.i.v__.gc = *(GCObject **)v3;
      v4->u.i.tt__ = *(_DWORD *)(v3 + 4);
      ++L->top;
      return;
    }
LABEL_10:
    v15 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v5 = L->top;
    v6 = L->top;
    v6->u.i.v__.gc = v5[idx].u.i.v__.gc;
    v6->u.i.tt__ = v5[idx].u.i.tt__;
    ++L->top;
    return;
  }
  if ( idx == -1001000 )
  {
    v7 = L->l_G;
    v8 = L->top;
    v8->u.i.v__.gc = v7->l_registry.u.i.v__.gc;
    v8->u.i.tt__ = v7->l_registry.u.i.tt__;
    ++L->top;
    return;
  }
  v9 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v10 = v2->func->u.i.v__.gc,
        v11 = *(&v10->gch.marked + 1),
        v14 = __OFSUB__(v9, v11),
        v12 = v9 == v11,
        v13 = v9 - v11 < 0,
        v15 = (int)(&v10->ts.tsv.hash + 2 * v9),
        !((unsigned __int8)(v13 ^ v14) | v12)) )
    goto LABEL_10;
LABEL_11:
  v16 = L->top;
  v16->u.i.v__.gc = *(GCObject **)v15;
  v16->u.i.tt__ = *(_DWORD *)(v15 + 4);
  ++L->top;
}

//----- (007430C0) --------------------------------------------------------
int __cdecl lua_type(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  int v3; // eax@2
  int result; // eax@3
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // eax@12

  v2 = L->ci;
  if ( idx <= 0 )
  {
    if ( idx <= -1001000 )
    {
      if ( idx == -1001000 )
      {
        v3 = (int)&L->l_G->l_registry;
      }
      else
      {
        v5 = -1001000 - idx;
        if ( v2->func->u.i.tt__ == 2146936086 || (v6 = v2->func->u.i.v__.gc, v5 > *(&v6->gch.marked + 1)) )
          return -1;
        v3 = (int)(&v6->ts.tsv.hash + 2 * v5);
      }
    }
    else
    {
      v3 = (int)&L->top[idx];
    }
  }
  else
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 >= L->top )
      return -1;
  }
  if ( (lua_TValue *)v3 == &luaO_nilobject_ )
    return -1;
  v7 = *(_DWORD *)(v3 + 4);
  if ( (v7 & 0x7FFFFF00) == 2146936064 )
    result = v7 & 0xF;
  else
    result = 3;
  return result;
}

//----- (00743150) --------------------------------------------------------
const char *__cdecl lua_typename(lua_State *L, int t)
{
  return off_9DD2C0[t];
}
// 9DD2C0: using guessed type char *off_9DD2C0[11];

//----- (00743160) --------------------------------------------------------
int __cdecl lua_iscfunction(lua_State *L, int idx)
{
  CallInfo *v2; // edx@1
  int v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int v10; // eax@11

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v3 = (int)&L->l_G->l_registry;
    }
    else
    {
      v4 = -1001000 - idx;
      if ( v2->func->u.i.tt__ == 2146936086
        || (v5 = v2->func->u.i.v__.gc,
            v6 = *(&v5->gch.marked + 1),
            v9 = __OFSUB__(v4, v6),
            v7 = v4 == v6,
            v8 = v4 - v6 < 0,
            v3 = (int)(&v5->ts.tsv.hash + 2 * v4),
            !((unsigned __int8)(v8 ^ v9) | v7)) )
      {
LABEL_10:
        v3 = (int)&luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v3 = (int)&L->top[idx];
  }
LABEL_11:
  v10 = *(_DWORD *)(v3 + 4);
  return v10 == 2146936086 || v10 == 2146936166;
}

//----- (007431E0) --------------------------------------------------------
int __cdecl lua_isnumber(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  int v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int result; // eax@12
  lua_TValue n; // [sp+4h] [bp-8h]@12

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v3 = (int)&L->l_G->l_registry;
    }
    else
    {
      v4 = -1001000 - idx;
      if ( v2->func->u.i.tt__ == 2146936086
        || (v5 = v2->func->u.i.v__.gc,
            v6 = *(&v5->gch.marked + 1),
            v9 = __OFSUB__(v4, v6),
            v7 = v4 == v6,
            v8 = v4 - v6 < 0,
            v3 = (int)(&v5->ts.tsv.hash + 2 * v4),
            !((unsigned __int8)(v8 ^ v9) | v7)) )
      {
LABEL_10:
        v3 = (int)&luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v3 = (int)&L->top[idx];
  }
LABEL_11:
  if ( (*(_DWORD *)(v3 + 4) & 0x7FFFFF00) != 2146936064 || (result = (int)luaV_tonumber((lua_TValue *)v3, &n)) != 0 )
    result = 1;
  return result;
}

//----- (00743270) --------------------------------------------------------
int __cdecl lua_isstring(lua_State *L, int idx)
{
  int v2; // eax@1

  v2 = lua_type(L, idx);
  return v2 == 4 || v2 == 3;
}

//----- (007432A0) --------------------------------------------------------
int __cdecl lua_rawequal(lua_State *L, int index1, int index2)
{
  CallInfo *v3; // esi@1
  int v4; // edi@3
  int v5; // ecx@8
  GCObject *v6; // eax@9
  int v7; // edi@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  int v11; // eax@12
  int v12; // eax@18
  GCObject *v13; // ecx@19
  int v14; // edx@19
  int v15; // edx@24

  v3 = L->ci;
  if ( index1 > 0 )
  {
    if ( &v3->func[index1] < L->top )
    {
      v4 = (int)&v3->func[index1];
      goto LABEL_11;
    }
LABEL_10:
    v4 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( index1 > -1001000 )
  {
    v4 = (int)&L->top[index1];
    goto LABEL_11;
  }
  if ( index1 == -1001000 )
  {
    v4 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v5 = -1001000 - index1;
  if ( v3->func->u.i.tt__ == 2146936086
    || (v6 = v3->func->u.i.v__.gc,
        v7 = *(&v6->gch.marked + 1),
        v10 = __OFSUB__(v5, v7),
        v8 = v5 == v7,
        v9 = v5 - v7 < 0,
        v4 = (int)(&v6->ts.tsv.hash + 2 * v5),
        !((unsigned __int8)(v9 ^ v10) | v8)) )
    goto LABEL_10;
LABEL_11:
  if ( index2 <= 0 )
  {
    if ( index2 > -1001000 )
    {
      v11 = (int)&L->top[index2];
      return (lua_TValue *)v4 != &luaO_nilobject_
          && (lua_TValue *)v11 != &luaO_nilobject_
          && ((*(_DWORD *)(v4 + 4) & 0x7FFFFF00) == 2146936064 ? (v15 = *(_DWORD *)(v4 + 4) == *(_DWORD *)(v11 + 4)) : (v15 = (*(_DWORD *)(v11 + 4) & 0x7FFFFF00) != 2146936064),
              v15 && luaV_equalobj_(0, (lua_TValue *)v4, (lua_TValue *)v11));
    }
    if ( index2 == -1001000 )
    {
      v11 = (int)&L->l_G->l_registry;
      return (lua_TValue *)v4 != &luaO_nilobject_
          && (lua_TValue *)v11 != &luaO_nilobject_
          && ((*(_DWORD *)(v4 + 4) & 0x7FFFFF00) == 2146936064 ? (v15 = *(_DWORD *)(v4 + 4) == *(_DWORD *)(v11 + 4)) : (v15 = (*(_DWORD *)(v11 + 4) & 0x7FFFFF00) != 2146936064),
              v15 && luaV_equalobj_(0, (lua_TValue *)v4, (lua_TValue *)v11));
    }
    v12 = -1001000 - index2;
    if ( v3->func->u.i.tt__ != 2146936086 )
    {
      v13 = v3->func->u.i.v__.gc;
      v14 = *(&v13->gch.marked + 1);
      v10 = __OFSUB__(v12, v14);
      v8 = v12 == v14;
      v9 = v12 - v14 < 0;
      v11 = (int)(&v13->ts.tsv.hash + 2 * v12);
      if ( (unsigned __int8)(v9 ^ v10) | v8 )
        return (lua_TValue *)v4 != &luaO_nilobject_
            && (lua_TValue *)v11 != &luaO_nilobject_
            && ((*(_DWORD *)(v4 + 4) & 0x7FFFFF00) == 2146936064 ? (v15 = *(_DWORD *)(v4 + 4) == *(_DWORD *)(v11 + 4)) : (v15 = (*(_DWORD *)(v11 + 4) & 0x7FFFFF00) != 2146936064),
                v15 && luaV_equalobj_(0, (lua_TValue *)v4, (lua_TValue *)v11));
    }
    goto LABEL_20;
  }
  v11 = (int)&v3->func[index2];
  if ( (lua_TValue *)v11 >= L->top )
LABEL_20:
    v11 = (int)&luaO_nilobject_;
  return (lua_TValue *)v4 != &luaO_nilobject_
      && (lua_TValue *)v11 != &luaO_nilobject_
      && ((*(_DWORD *)(v4 + 4) & 0x7FFFFF00) == 2146936064 ? (v15 = *(_DWORD *)(v4 + 4) == *(_DWORD *)(v11 + 4)) : (v15 = (*(_DWORD *)(v11 + 4) & 0x7FFFFF00) != 2146936064),
          v15 && luaV_equalobj_(0, (lua_TValue *)v4, (lua_TValue *)v11));
}

//----- (007433C0) --------------------------------------------------------
int __cdecl lua_compare(lua_State *L, int index1, int index2, int op)
{
  CallInfo *v4; // esi@1
  int v5; // edi@2
  int v6; // edx@8
  GCObject *v7; // ecx@9
  int v8; // edi@9
  bool v9; // zf@9
  bool v10; // sf@9
  unsigned __int8 v11; // of@9
  int v12; // ecx@12
  int v13; // ecx@18
  GCObject *v14; // edx@19
  int v15; // eax@19
  int v17; // edx@29

  v4 = L->ci;
  if ( index1 > 0 )
  {
    v5 = (int)&v4->func[index1];
    if ( (lua_TValue *)v5 < L->top )
      goto LABEL_11;
LABEL_10:
    v5 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( index1 > -1001000 )
  {
    v5 = (int)&L->top[index1];
    goto LABEL_11;
  }
  if ( index1 == -1001000 )
  {
    v5 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v6 = -1001000 - index1;
  if ( v4->func->u.i.tt__ == 2146936086
    || (v7 = v4->func->u.i.v__.gc,
        v8 = *(&v7->gch.marked + 1),
        v11 = __OFSUB__(v6, v8),
        v9 = v6 == v8,
        v10 = v6 - v8 < 0,
        v5 = (int)(&v7->ts.tsv.hash + 2 * v6),
        !((unsigned __int8)(v10 ^ v11) | v9)) )
    goto LABEL_10;
LABEL_11:
  if ( index2 > 0 )
  {
    v12 = (int)&v4->func[index2];
    if ( (lua_TValue *)v12 < L->top )
      goto LABEL_21;
    goto LABEL_20;
  }
  if ( index2 <= -1001000 )
  {
    if ( index2 == -1001000 )
    {
      v12 = (int)&L->l_G->l_registry;
    }
    else
    {
      v13 = -1001000 - index2;
      if ( v4->func->u.i.tt__ == 2146936086
        || (v14 = v4->func->u.i.v__.gc,
            v15 = *(&v14->gch.marked + 1),
            v11 = __OFSUB__(v13, v15),
            v9 = v13 == v15,
            v10 = v13 - v15 < 0,
            v12 = (int)(&v14->ts.tsv.hash + 2 * v13),
            !((unsigned __int8)(v10 ^ v11) | v9)) )
      {
LABEL_20:
        v12 = (int)&luaO_nilobject_;
        goto LABEL_21;
      }
    }
  }
  else
  {
    v12 = (int)&L->top[index2];
  }
LABEL_21:
  if ( (lua_TValue *)v5 != &luaO_nilobject_ && (lua_TValue *)v12 != &luaO_nilobject_ )
  {
    if ( op )
    {
      if ( op == 1 )
        return luaV_lessthan(L, (lua_TValue *)v5, (lua_TValue *)v12);
      if ( op == 2 )
        return luaV_lessequal(L, (lua_TValue *)v5, (lua_TValue *)v12);
    }
    else
    {
      if ( (*(_DWORD *)(v5 + 4) & 0x7FFFFF00) == 2146936064 )
        v17 = *(_DWORD *)(v5 + 4) == *(_DWORD *)(v12 + 4);
      else
        v17 = (*(_DWORD *)(v12 + 4) & 0x7FFFFF00) != 2146936064;
      if ( v17 && luaV_equalobj_(L, (lua_TValue *)v5, (lua_TValue *)v12) )
        return 1;
    }
  }
  return 0;
}

//----- (00743510) --------------------------------------------------------
long double __cdecl lua_tonumberx(lua_State *L, int idx, int *isnum)
{
  CallInfo *v3; // esi@1
  lua_TValue *v4; // eax@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // edx@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  long double result; // st7@15
  lua_TValue n; // [sp+4h] [bp-8h]@12

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v4 = &L->l_G->l_registry;
    }
    else
    {
      v5 = -1001000 - idx;
      if ( v3->func->u.i.tt__ == 2146936086
        || (v6 = v3->func->u.i.v__.gc,
            v7 = *(&v6->gch.marked + 1),
            v10 = __OFSUB__(v5, v7),
            v8 = v5 == v7,
            v9 = v5 - v7 < 0,
            v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5),
            !((unsigned __int8)(v9 ^ v10) | v8)) )
      {
LABEL_10:
        v4 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v4 = &L->top[idx];
  }
LABEL_11:
  if ( (v4->u.i.tt__ & 0x7FFFFF00) != 2146936064 || (v4 = luaV_tonumber(v4, &n)) != 0 )
  {
    if ( isnum )
      *isnum = 1;
    result = *(double *)&v4->u.i.v__.gc;
  }
  else
  {
    if ( isnum )
      *isnum = 0;
    result = 0.0;
  }
  return result;
}

//----- (007435C0) --------------------------------------------------------
int __cdecl lua_tointegerx(lua_State *L, int idx, int *isnum)
{
  CallInfo *v3; // esi@1
  lua_TValue *v4; // eax@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // edx@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  int result; // eax@15
  lua_TValue n; // [sp+Ch] [bp-8h]@12
  int res; // [sp+1Ch] [bp+8h]@16

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v4 = &L->l_G->l_registry;
    }
    else
    {
      v5 = -1001000 - idx;
      if ( v3->func->u.i.tt__ == 2146936086
        || (v6 = v3->func->u.i.v__.gc,
            v7 = *(&v6->gch.marked + 1),
            v10 = __OFSUB__(v5, v7),
            v8 = v5 == v7,
            v9 = v5 - v7 < 0,
            v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5),
            !((unsigned __int8)(v9 ^ v10) | v8)) )
      {
LABEL_10:
        v4 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v4 = &L->top[idx];
  }
LABEL_11:
  if ( (v4->u.i.tt__ & 0x7FFFFF00) != 2146936064 || (v4 = luaV_tonumber(v4, &n)) != 0 )
  {
    res = (signed int)*(double *)&v4->u.i.v__.gc;
    if ( isnum )
      *isnum = 1;
    result = res;
  }
  else
  {
    if ( isnum )
      *isnum = 0;
    result = 0;
  }
  return result;
}

//----- (00743680) --------------------------------------------------------
unsigned int __cdecl lua_tounsignedx(lua_State *L, int idx, int *isnum)
{
  CallInfo *v3; // esi@1
  lua_TValue *v4; // eax@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // edx@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  unsigned int result; // eax@15
  signed __int64 l; // [sp+Ch] [bp-10h]@16
  lua_TValue n; // [sp+14h] [bp-8h]@12

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v4 = &L->l_G->l_registry;
    }
    else
    {
      v5 = -1001000 - idx;
      if ( v3->func->u.i.tt__ == 2146936086
        || (v6 = v3->func->u.i.v__.gc,
            v7 = *(&v6->gch.marked + 1),
            v10 = __OFSUB__(v5, v7),
            v8 = v5 == v7,
            v9 = v5 - v7 < 0,
            v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5),
            !((unsigned __int8)(v9 ^ v10) | v8)) )
      {
LABEL_10:
        v4 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v4 = &L->top[idx];
  }
LABEL_11:
  if ( (v4->u.i.tt__ & 0x7FFFFF00) != 2146936064 || (v4 = luaV_tonumber(v4, &n)) != 0 )
  {
    l = (signed __int64)*(double *)&v4->u.i.v__.gc;
    if ( isnum )
      *isnum = 1;
    result = l;
  }
  else
  {
    if ( isnum )
      *isnum = 0;
    result = 0;
  }
  return result;
}

//----- (00743740) --------------------------------------------------------
int __cdecl lua_toboolean(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  int v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int v10; // ecx@11

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v3 = (int)&L->l_G->l_registry;
    }
    else
    {
      v4 = -1001000 - idx;
      if ( v2->func->u.i.tt__ == 2146936086
        || (v5 = v2->func->u.i.v__.gc,
            v6 = *(&v5->gch.marked + 1),
            v9 = __OFSUB__(v4, v6),
            v7 = v4 == v6,
            v8 = v4 - v6 < 0,
            v3 = (int)(&v5->ts.tsv.hash + 2 * v4),
            !((unsigned __int8)(v8 ^ v9) | v7)) )
      {
LABEL_10:
        v3 = (int)&luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v3 = (int)&L->top[idx];
  }
LABEL_11:
  v10 = *(_DWORD *)(v3 + 4);
  return v10 != 2146936064 && (v10 != 2146936065 || *(_DWORD *)v3);
}

//----- (007437C0) --------------------------------------------------------
const char *__cdecl lua_tolstring(lua_State *L, int idx, unsigned int *len)
{
  CallInfo *v3; // ecx@1
  lua_TValue *v4; // eax@2
  lua_TValue *v5; // ecx@8
  int v6; // eax@8
  GCObject *v7; // ecx@9
  int v8; // edx@9
  bool v9; // zf@9
  bool v10; // sf@9
  unsigned __int8 v11; // of@9

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
LABEL_10:
    v4 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v4 = &L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v4 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v5 = v3->func;
  v6 = -1001000 - idx;
  if ( v5->u.i.tt__ == 2146936086
    || (v7 = v5->u.i.v__.gc,
        v8 = *(&v7->gch.marked + 1),
        v11 = __OFSUB__(v6, v8),
        v9 = v6 == v8,
        v10 = v6 - v8 < 0,
        v4 = (lua_TValue *)(&v7->ts.tsv.hash + 2 * v6),
        !((unsigned __int8)(v10 ^ v11) | v9)) )
    goto LABEL_10;
LABEL_11:
  if ( (v4->u.i.tt__ | 0x70) != 2146936180 )
  {
    if ( !luaV_tostring(L, v4) )
    {
      if ( len )
        *len = 0;
      return 0;
    }
    if ( L->l_G->GCdebt > 0 )
      luaC_step(L);
    v4 = index2addr(L, idx);
  }
  if ( len )
    *len = v4->u.i.v__.gc->ts.tsv.len;
  return (const char *)&v4->u.i.v__.gc->u.uv.len;
}

//----- (00743880) --------------------------------------------------------
unsigned int __cdecl lua_rawlen(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  int v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int v10; // ecx@11
  int v11; // ecx@13
  int v12; // ecx@14
  unsigned int result; // eax@16

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
      goto LABEL_11;
LABEL_10:
    v3 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v3 = (int)&L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v3 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v4 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v5 = v2->func->u.i.v__.gc,
        v6 = *(&v5->gch.marked + 1),
        v9 = __OFSUB__(v4, v6),
        v7 = v4 == v6,
        v8 = v4 - v6 < 0,
        v3 = (int)(&v5->ts.tsv.hash + 2 * v4),
        !((unsigned __int8)(v8 ^ v9) | v7)) )
    goto LABEL_10;
LABEL_11:
  v10 = *(_DWORD *)(v3 + 4);
  if ( (*(_DWORD *)(v3 + 4) & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v10) = 3;
  v11 = (v10 & 0xF) - 4;
  if ( v11 )
  {
    v12 = v11 - 1;
    if ( v12 )
    {
      if ( v12 == 2 )
        result = *(_DWORD *)(*(_DWORD *)v3 + 16);
      else
        result = 0;
    }
    else
    {
      result = luaH_getn(*(Table **)v3);
    }
  }
  else
  {
    result = *(_DWORD *)(*(_DWORD *)v3 + 12);
  }
  return result;
}

//----- (00743930) --------------------------------------------------------
void *__cdecl lua_touserdata(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  int v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int v10; // ecx@11
  int v11; // ecx@13
  void *result; // eax@15

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
      goto LABEL_11;
LABEL_10:
    v3 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v3 = (int)&L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v3 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v4 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v5 = v2->func->u.i.v__.gc,
        v6 = *(&v5->gch.marked + 1),
        v9 = __OFSUB__(v4, v6),
        v7 = v4 == v6,
        v8 = v4 - v6 < 0,
        v3 = (int)(&v5->ts.tsv.hash + 2 * v4),
        !((unsigned __int8)(v8 ^ v9) | v7)) )
    goto LABEL_10;
LABEL_11:
  v10 = *(_DWORD *)(v3 + 4);
  if ( (*(_DWORD *)(v3 + 4) & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v10) = 3;
  v11 = (v10 & 0xF) - 2;
  if ( v11 )
  {
    if ( v11 == 5 )
      result = (void *)(*(_DWORD *)v3 + 24);
    else
      result = 0;
  }
  else
  {
    result = *(void **)v3;
  }
  return result;
}

//----- (007439D0) --------------------------------------------------------
lua_State *__cdecl lua_tothread(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  int v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  lua_State *result; // eax@12

  v2 = L->ci;
  if ( idx <= 0 )
  {
    if ( idx > -1001000 )
    {
      v3 = (int)&L->top[idx];
      goto LABEL_11;
    }
    if ( idx == -1001000 )
    {
      v3 = (int)&L->l_G->l_registry;
      goto LABEL_11;
    }
    v4 = -1001000 - idx;
    if ( v2->func->u.i.tt__ != 2146936086 )
    {
      v5 = v2->func->u.i.v__.gc;
      v6 = *(&v5->gch.marked + 1);
      v9 = __OFSUB__(v4, v6);
      v7 = v4 == v6;
      v8 = v4 - v6 < 0;
      v3 = (int)(&v5->ts.tsv.hash + 2 * v4);
      if ( (unsigned __int8)(v8 ^ v9) | v7 )
        goto LABEL_11;
    }
    goto LABEL_10;
  }
  v3 = (int)&v2->func[idx];
  if ( (lua_TValue *)v3 >= L->top )
LABEL_10:
    v3 = (int)&luaO_nilobject_;
LABEL_11:
  if ( *(_DWORD *)(v3 + 4) == 2146936136 )
    result = *(lua_State **)v3;
  else
    result = 0;
  return result;
}

//----- (00743A40) --------------------------------------------------------
const void *__cdecl lua_topointer(lua_State *L, int idx)
{
  CallInfo *v2; // ecx@1
  int v3; // eax@2
  lua_TValue *v4; // ecx@8
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // edi@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  int v11; // ecx@11
  const void *result; // eax@14

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = (int)&v2->func[idx];
    if ( (lua_TValue *)v3 < L->top )
      goto LABEL_11;
LABEL_10:
    v3 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v3 = (int)&L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v3 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v4 = v2->func;
  v5 = -1001000 - idx;
  if ( v4->u.i.tt__ == 2146936086
    || (v6 = v4->u.i.v__.gc,
        v7 = *(&v6->gch.marked + 1),
        v10 = __OFSUB__(v5, v7),
        v8 = v5 == v7,
        v9 = v5 - v7 < 0,
        v3 = (int)(&v6->ts.tsv.hash + 2 * v5),
        !((unsigned __int8)(v9 ^ v10) | v8)) )
    goto LABEL_10;
LABEL_11:
  v11 = *(_DWORD *)(v3 + 4);
  if ( (*(_DWORD *)(v3 + 4) & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v11) = 3;
  switch ( v11 & 0x3F )
  {
    case 5:
    case 6:
    case 8:
    case 0x16:
    case 0x26:
      result = *(const void **)v3;
      break;
    case 2:
    case 7:
      result = lua_touserdata(L, idx);
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (00743B30) --------------------------------------------------------
void __cdecl lua_pushnil(lua_State *L)
{
  L->top->u.i.tt__ = 2146936064;
  ++L->top;
}

//----- (00743B50) --------------------------------------------------------
void __cdecl lua_pushnumber(lua_State *L, long double n)
{
  lua_TValue *v2; // eax@1

  v2 = L->top;
  *(_QWORD *)&v2->u.i.v__.gc = *(_QWORD *)&n;
  if ( (v2->u.i.tt__ & 0x7FFFFF00) == 2146936064 )
    luaG_runerror(L, "C API - attempt to push a signaling NaN");
  L->top = v2 + 1;
}

//----- (00743B90) --------------------------------------------------------
void __cdecl lua_pushinteger(lua_State *L, int n)
{
  lua_TValue *v2; // eax@1

  v2 = L->top + 1;
  *(double *)&L->top->u.i.v__.gc = (double)n;
  L->top = v2;
}

//----- (00743BB0) --------------------------------------------------------
void __cdecl lua_pushunsigned(lua_State *L, unsigned int u)
{
  lua_TValue *v2; // eax@2
  lua_TValue *v3; // eax@3

  if ( u > 0x7FFFFFFF )
  {
    v3 = L->top;
    *(double *)&v3->u.i.v__.gc = (double)u;
    L->top = v3 + 1;
  }
  else
  {
    v2 = L->top + 1;
    *(double *)&L->top->u.i.v__.gc = (double)(signed int)u;
    L->top = v2;
  }
}

//----- (00743C00) --------------------------------------------------------
const char *__cdecl lua_pushlstring(lua_State *L, const char *s, unsigned int len)
{
  TString *v3; // eax@3
  lua_TValue *v4; // ecx@3

  if ( L->l_G->GCdebt > 0 )
    luaC_step(L);
  v3 = luaS_newlstr(L, s, len);
  v4 = L->top;
  v4->u.i.v__.gc = (GCObject *)v3;
  v4->u.i.tt__ = BYTE4(v3->dummy.u) | 0x7FF7A540;
  ++L->top;
  return (const char *)&v3[1];
}

//----- (00743C50) --------------------------------------------------------
const char *__cdecl lua_pushstring(lua_State *L, const char *s)
{
  const char *result; // eax@2
  TString *v3; // eax@5
  lua_TValue *v4; // ecx@5

  if ( s )
  {
    if ( L->l_G->GCdebt > 0 )
      luaC_step(L);
    v3 = luaS_new(L, s);
    v4 = L->top;
    v4->u.i.v__.gc = (GCObject *)v3;
    v4->u.i.tt__ = BYTE4(v3->dummy.u) | 0x7FF7A540;
    ++L->top;
    result = (const char *)&v3[1];
  }
  else
  {
    L->top->u.i.tt__ = 2146936064;
    ++L->top;
    result = 0;
  }
  return result;
}

//----- (00743CB0) --------------------------------------------------------
const char *__cdecl lua_pushvfstring(lua_State *L, const char *fmt, char *argp)
{
  if ( L->l_G->GCdebt > 0 )
    luaC_step(L);
  return luaO_pushvfstring(L, fmt, argp);
}

//----- (00743CE0) --------------------------------------------------------
const char *__cdecl lua_pushfstring(lua_State *L, const char *fmt)
{
  char argp; // [sp+14h] [bp+10h]@0

  if ( L->l_G->GCdebt > 0 )
    luaC_step(L);
  return luaO_pushvfstring(L, fmt, &argp);
}

//----- (00743D10) --------------------------------------------------------
void __cdecl lua_pushcclosure(lua_State *L, int (__cdecl *fn)(lua_State *), int n)
{
  int v3; // esi@1
  lua_TValue *v4; // ecx@2
  Closure *v5; // eax@5
  lua_TValue *v6; // ecx@6
  GCObject *v7; // edx@6
  lua_TValue *v8; // ecx@7

  v3 = n;
  if ( n )
  {
    if ( L->l_G->GCdebt > 0 )
      luaC_step(L);
    v5 = luaF_newCclosure(L, n);
    v5->c.f = fn;
    L->top -= n;
    do
    {
      v6 = L->top;
      v7 = v6[v3-- - 1].u.i.v__.gc;
      v5->c.upvalue[v3].u.i.v__.gc = v7;
      v5->c.upvalue[v3].u.i.tt__ = v6[v3].u.i.tt__;
    }
    while ( v3 );
    v8 = L->top;
    v8->u.i.v__.gc = (GCObject *)v5;
    v8->u.i.tt__ = 2146936166;
    ++L->top;
  }
  else
  {
    v4 = L->top;
    v4->u.i.v__.gc = (GCObject *)fn;
    v4->u.i.tt__ = 2146936086;
    ++L->top;
  }
}

//----- (00743DA0) --------------------------------------------------------
void __cdecl lua_pushboolean(lua_State *L, int b)
{
  lua_TValue *v2; // ecx@1

  v2 = L->top;
  v2->u.i.tt__ = 2146936065;
  v2->u.i.v__.gc = (GCObject *)(b != 0);
  ++L->top;
}

//----- (00743DC0) --------------------------------------------------------
void __cdecl lua_pushlightuserdata(lua_State *L, void *p)
{
  lua_TValue *v2; // ecx@1

  v2 = L->top;
  v2->u.i.v__.gc = (GCObject *)p;
  v2->u.i.tt__ = 2146936066;
  ++L->top;
}

//----- (00743DE0) --------------------------------------------------------
int __cdecl lua_pushthread(lua_State *L)
{
  lua_TValue *v1; // ecx@1
  global_State *v2; // ecx@1

  v1 = L->top;
  v1->u.i.v__.gc = (GCObject *)L;
  v1->u.i.tt__ = 2146936136;
  v2 = L->l_G;
  ++L->top;
  return v2->mainthread == L;
}

//----- (00743E10) --------------------------------------------------------
void __cdecl lua_getglobal(lua_State *L, const char *var)
{
  lua_TValue *v2; // eax@1
  lua_TValue *v3; // edi@1
  lua_TValue *v4; // ebx@1
  TString *v5; // eax@1

  v2 = luaH_getint((Table *)L->l_G->l_registry.u.i.v__.gc, 2);
  v3 = L->top;
  v4 = v2;
  L->top = v3 + 1;
  v5 = luaS_new(L, var);
  v3->u.i.v__.gc = (GCObject *)v5;
  v3->u.i.tt__ = BYTE4(v5->dummy.u) | 0x7FF7A540;
  luaV_gettable(L, v4, L->top - 1, L->top - 1);
}

//----- (00743E70) --------------------------------------------------------
void __cdecl lua_gettable(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  lua_TValue *v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // esi@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = &v2->func[idx];
    if ( v3 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v3 = &L->l_G->l_registry;
    }
    else
    {
      v4 = -1001000 - idx;
      if ( v2->func->u.i.tt__ == 2146936086
        || (v5 = v2->func->u.i.v__.gc,
            v6 = *(&v5->gch.marked + 1),
            v9 = __OFSUB__(v4, v6),
            v7 = v4 == v6,
            v8 = v4 - v6 < 0,
            v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4),
            !((unsigned __int8)(v8 ^ v9) | v7)) )
      {
LABEL_10:
        v3 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v3 = &L->top[idx];
  }
LABEL_11:
  luaV_gettable(L, v3, L->top - 1, L->top - 1);
}

//----- (00743EF0) --------------------------------------------------------
void __cdecl lua_getfield(lua_State *L, int idx, const char *k)
{
  CallInfo *v3; // edx@1
  lua_TValue *v4; // edi@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  lua_TValue *v7; // ebx@11
  TString *v8; // eax@11

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v4 = &L->l_G->l_registry;
    }
    else
    {
      v5 = -1001000 - idx;
      if ( v3->func->u.i.tt__ == 2146936086
        || (v6 = v3->func->u.i.v__.gc, v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5), v5 > *(&v6->gch.marked + 1)) )
      {
LABEL_10:
        v4 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v4 = &L->top[idx];
  }
LABEL_11:
  v7 = L->top;
  v8 = luaS_new(L, k);
  v7->u.i.v__.gc = (GCObject *)v8;
  v7->u.i.tt__ = BYTE4(v8->dummy.u) | 0x7FF7A540;
  ++L->top;
  luaV_gettable(L, v4, L->top - 1, L->top - 1);
}

//----- (00743F90) --------------------------------------------------------
void __cdecl lua_rawget(lua_State *L, int idx)
{
  CallInfo *v2; // edx@1
  lua_TValue *v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  lua_TValue *v10; // eax@11
  lua_TValue *v11; // ecx@11

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = &v2->func[idx];
    if ( v3 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v3 = &L->l_G->l_registry;
    }
    else
    {
      v4 = -1001000 - idx;
      if ( v2->func->u.i.tt__ == 2146936086
        || (v5 = v2->func->u.i.v__.gc,
            v6 = *(&v5->gch.marked + 1),
            v9 = __OFSUB__(v4, v6),
            v7 = v4 == v6,
            v8 = v4 - v6 < 0,
            v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4),
            !((unsigned __int8)(v8 ^ v9) | v7)) )
      {
LABEL_10:
        v3 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v3 = &L->top[idx];
  }
LABEL_11:
  v10 = luaH_get((Table *)v3->u.i.v__.gc, L->top - 1);
  v11 = L->top;
  v11[-1].u.i.v__.gc = v10->u.i.v__.gc;
  *((_DWORD *)v11 - 1) = v10->u.i.tt__;
}

//----- (00744010) --------------------------------------------------------
void __cdecl lua_rawgeti(lua_State *L, int idx, int n)
{
  CallInfo *v3; // edx@1
  lua_TValue *v4; // eax@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // edx@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  lua_TValue *v11; // eax@11
  lua_TValue *v12; // ecx@11

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v4 = &L->l_G->l_registry;
    }
    else
    {
      v5 = -1001000 - idx;
      if ( v3->func->u.i.tt__ == 2146936086
        || (v6 = v3->func->u.i.v__.gc,
            v7 = *(&v6->gch.marked + 1),
            v10 = __OFSUB__(v5, v7),
            v8 = v5 == v7,
            v9 = v5 - v7 < 0,
            v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5),
            !((unsigned __int8)(v9 ^ v10) | v8)) )
      {
LABEL_10:
        v4 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v4 = &L->top[idx];
  }
LABEL_11:
  v11 = luaH_getint((Table *)v4->u.i.v__.gc, n);
  v12 = L->top;
  v12->u.i.v__.gc = v11->u.i.v__.gc;
  v12->u.i.tt__ = v11->u.i.tt__;
  ++L->top;
}

//----- (00744090) --------------------------------------------------------
void __cdecl lua_createtable(lua_State *L, int narray, int nrec)
{
  Table *v3; // eax@3
  lua_TValue *v4; // ecx@3

  if ( L->l_G->GCdebt > 0 )
    luaC_step(L);
  v3 = luaH_new(L);
  v4 = L->top;
  v4->u.i.v__.gc = (GCObject *)v3;
  v4->u.i.tt__ = 2146936133;
  ++L->top;
  if ( narray > 0 || nrec > 0 )
    luaH_resize(L, v3, narray, nrec);
}

//----- (007440E0) --------------------------------------------------------
int __cdecl lua_getmetatable(lua_State *L, int objindex)
{
  CallInfo *v2; // edx@1
  int v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int v10; // edx@11
  char v11; // cl@12
  int v12; // ecx@14
  Table *v13; // edx@17
  int result; // eax@22
  lua_TValue *v15; // eax@23

  v2 = L->ci;
  if ( objindex <= 0 )
  {
    if ( objindex > -1001000 )
    {
      v3 = (int)&L->top[objindex];
      goto LABEL_11;
    }
    if ( objindex == -1001000 )
    {
      v3 = (int)&L->l_G->l_registry;
      goto LABEL_11;
    }
    v4 = -1001000 - objindex;
    if ( v2->func->u.i.tt__ != 2146936086 )
    {
      v5 = v2->func->u.i.v__.gc;
      v6 = *(&v5->gch.marked + 1);
      v9 = __OFSUB__(v4, v6);
      v7 = v4 == v6;
      v8 = v4 - v6 < 0;
      v3 = (int)(&v5->ts.tsv.hash + 2 * v4);
      if ( (unsigned __int8)(v8 ^ v9) | v7 )
        goto LABEL_11;
    }
    goto LABEL_10;
  }
  v3 = (int)&v2->func[objindex];
  if ( (lua_TValue *)v3 >= L->top )
LABEL_10:
    v3 = (int)&luaO_nilobject_;
LABEL_11:
  v10 = *(_DWORD *)(v3 + 4);
  if ( (v10 & 0x7FFFFF00) == 2146936064 )
    v11 = *(_DWORD *)(v3 + 4);
  else
    v11 = 3;
  v12 = (v11 & 0xF) - 5;
  if ( v12 )
  {
    if ( v12 == 2 )
    {
      v13 = *(Table **)(*(_DWORD *)v3 + 8);
    }
    else
    {
      if ( (v10 & 0x7FFFFF00) == 2146936064 )
        v13 = L->l_G->mt[v10 & 0xF];
      else
        v13 = L->l_G->mt[3];
    }
  }
  else
  {
    v13 = *(Table **)(*(_DWORD *)v3 + 8);
  }
  if ( v13 )
  {
    v15 = L->top;
    v15->u.i.v__.gc = (GCObject *)v13;
    v15->u.i.tt__ = 2146936133;
    ++L->top;
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (007441D0) --------------------------------------------------------
void __cdecl lua_getuservalue(lua_State *L, int idx)
{
  CallInfo *v2; // esi@1
  lua_TValue *v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // esi@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  GCObject *v10; // ecx@11
  lua_TValue *v11; // eax@11

  v2 = L->ci;
  if ( idx <= 0 )
  {
    if ( idx > -1001000 )
    {
      v3 = &L->top[idx];
      goto LABEL_11;
    }
    if ( idx == -1001000 )
    {
      v3 = &L->l_G->l_registry;
      goto LABEL_11;
    }
    v4 = -1001000 - idx;
    if ( v2->func->u.i.tt__ != 2146936086 )
    {
      v5 = v2->func->u.i.v__.gc;
      v6 = *(&v5->gch.marked + 1);
      v9 = __OFSUB__(v4, v6);
      v7 = v4 == v6;
      v8 = v4 - v6 < 0;
      v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4);
      if ( (unsigned __int8)(v8 ^ v9) | v7 )
        goto LABEL_11;
    }
    goto LABEL_10;
  }
  v3 = &v2->func[idx];
  if ( v3 >= L->top )
LABEL_10:
    v3 = &luaO_nilobject_;
LABEL_11:
  v10 = (GCObject *)v3->u.i.v__.gc->ts.tsv.len;
  v11 = L->top;
  if ( v10 )
  {
    v11->u.i.v__.gc = v10;
    v11->u.i.tt__ = 2146936133;
    ++L->top;
  }
  else
  {
    v11->u.i.tt__ = 2146936064;
    ++L->top;
  }
}

//----- (00744260) --------------------------------------------------------
void __cdecl lua_setglobal(lua_State *L, const char *var)
{
  lua_State *v2; // esi@1
  lua_TValue *v3; // eax@1
  lua_TValue *v4; // edi@1
  lua_TValue *v5; // ebx@1
  TString *v6; // eax@1

  v2 = L;
  v3 = luaH_getint((Table *)L->l_G->l_registry.u.i.v__.gc, 2);
  v4 = L->top;
  v5 = v3;
  L->top = v4 + 1;
  v6 = luaS_new(L, var);
  v4->u.i.v__.gc = (GCObject *)v6;
  v4->u.i.tt__ = BYTE4(v6->dummy.u) | 0x7FF7A540;
  luaV_settable(v2, v5, v2->top - 1, v2->top - 2);
  v2->top -= 2;
}

//----- (007442C0) --------------------------------------------------------
void __cdecl lua_setfield(lua_State *L, int idx, const char *k)
{
  CallInfo *v3; // edx@1
  lua_TValue *v4; // edi@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  lua_TValue *v7; // ebx@11
  TString *v8; // eax@11

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v4 = &L->l_G->l_registry;
    }
    else
    {
      v5 = -1001000 - idx;
      if ( v3->func->u.i.tt__ == 2146936086
        || (v6 = v3->func->u.i.v__.gc, v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5), v5 > *(&v6->gch.marked + 1)) )
      {
LABEL_10:
        v4 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v4 = &L->top[idx];
  }
LABEL_11:
  v7 = L->top;
  L->top = v7 + 1;
  v8 = luaS_new(L, k);
  v7->u.i.v__.gc = (GCObject *)v8;
  v7->u.i.tt__ = BYTE4(v8->dummy.u) | 0x7FF7A540;
  luaV_settable(L, v4, L->top - 1, L->top - 2);
  L->top -= 2;
}

//----- (00744360) --------------------------------------------------------
void __cdecl lua_rawset(lua_State *L, int idx)
{
  CallInfo *v2; // edx@1
  lua_TValue *v3; // ebx@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  lua_TValue *v6; // edi@11
  lua_TValue *v7; // eax@11
  lua_TValue *v8; // ecx@11
  int v9; // eax@11
  GCObject *v10; // ebx@15

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = &v2->func[idx];
    if ( v3 < L->top )
      goto LABEL_11;
LABEL_10:
    v3 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v3 = &L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v3 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v4 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v5 = v2->func->u.i.v__.gc, v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4), v4 > *(&v5->gch.marked + 1)) )
    goto LABEL_10;
LABEL_11:
  v6 = L->top;
  v7 = luaH_set(L, (Table *)v3->u.i.v__.gc, v6 - 2);
  v7->u.i.v__.gc = v6[-1].u.i.v__.gc;
  v7->u.i.tt__ = *((_DWORD *)v6 - 1);
  *(&v3->u.i.v__.gc->gch.marked + 1) = 0;
  v8 = L->top;
  v9 = *((_DWORD *)v8 - 1);
  if ( (*((_DWORD *)v8 - 1) & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v9) = 3;
  if ( v9 & 0x40 )
  {
    if ( v8[-1].u.i.v__.gc->gch.marked & 3 )
    {
      v10 = v3->u.i.v__.gc;
      if ( v10->gch.marked & 4 )
        luaC_barrierback_(L, v10);
    }
  }
  L->top -= 2;
}

//----- (00744430) --------------------------------------------------------
void __cdecl lua_rawseti(lua_State *L, int idx, int n)
{
  CallInfo *v3; // edx@1
  lua_TValue *v4; // edi@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  lua_TValue *v7; // ecx@11
  int v8; // eax@11
  GCObject *v9; // edi@15

  v3 = L->ci;
  if ( idx > 0 )
  {
    v4 = &v3->func[idx];
    if ( v4 < L->top )
      goto LABEL_11;
LABEL_10:
    v4 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v4 = &L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v4 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v5 = -1001000 - idx;
  if ( v3->func->u.i.tt__ == 2146936086
    || (v6 = v3->func->u.i.v__.gc, v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5), v5 > *(&v6->gch.marked + 1)) )
    goto LABEL_10;
LABEL_11:
  luaH_setint(L, (Table *)v4->u.i.v__.gc, n, L->top - 1);
  v7 = L->top;
  v8 = *((_DWORD *)v7 - 1);
  if ( (*((_DWORD *)v7 - 1) & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v8) = 3;
  if ( v8 & 0x40 )
  {
    if ( v7[-1].u.i.v__.gc->gch.marked & 3 )
    {
      v9 = v4->u.i.v__.gc;
      if ( v9->gch.marked & 4 )
        luaC_barrierback_(L, v9);
    }
  }
  --L->top;
}

//----- (007444F0) --------------------------------------------------------
int __cdecl lua_setmetatable(lua_State *L, int objindex)
{
  CallInfo *v2; // edx@1
  int v3; // esi@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  lua_TValue *v6; // eax@11
  GCObject *v7; // edi@12
  int v8; // ecx@14
  int v9; // edx@14
  char v10; // al@15
  int v11; // eax@17
  int result; // eax@20
  GCObject *v13; // [sp-8h] [bp-14h]@26
  Table *v14; // [sp-4h] [bp-10h]@26

  v2 = L->ci;
  if ( objindex <= 0 )
  {
    if ( objindex > -1001000 )
    {
      v3 = (int)&L->top[objindex];
      goto LABEL_11;
    }
    if ( objindex == -1001000 )
    {
      v3 = (int)&L->l_G->l_registry;
      goto LABEL_11;
    }
    v4 = -1001000 - objindex;
    if ( v2->func->u.i.tt__ != 2146936086 )
    {
      v5 = v2->func->u.i.v__.gc;
      v3 = (int)(&v5->ts.tsv.hash + 2 * v4);
      if ( v4 <= *(&v5->gch.marked + 1) )
        goto LABEL_11;
    }
    goto LABEL_10;
  }
  v3 = (int)&v2->func[objindex];
  if ( (lua_TValue *)v3 >= L->top )
LABEL_10:
    v3 = (int)&luaO_nilobject_;
LABEL_11:
  v6 = L->top;
  if ( *((_DWORD *)v6 - 1) == 2146936064 )
    v7 = 0;
  else
    v7 = v6[-1].u.i.v__.gc;
  v8 = *(_DWORD *)(v3 + 4);
  v9 = *(_DWORD *)(v3 + 4) & 0x7FFFFF00;
  if ( v9 == 2146936064 )
    v10 = *(_DWORD *)(v3 + 4);
  else
    v10 = 3;
  v11 = (v10 & 0xF) - 5;
  if ( !v11 )
  {
    *(_DWORD *)(*(_DWORD *)v3 + 8) = v7;
    if ( v7 )
    {
      if ( v7->gch.marked & 3 && *(_BYTE *)(*(_DWORD *)v3 + 5) & 4 )
        luaC_barrierback_(L, *(GCObject **)v3);
      v14 = (Table *)v7;
      v13 = *(GCObject **)v3;
      goto LABEL_32;
    }
LABEL_33:
    --L->top;
    return 1;
  }
  if ( v11 == 2 )
  {
    *(_DWORD *)(*(_DWORD *)v3 + 8) = v7;
    if ( v7 )
    {
      if ( v7->gch.marked & 3 && *(_BYTE *)(*(_DWORD *)v3 + 5) & 4 )
        luaC_barrier_(L, *(GCObject **)v3, v7);
      v14 = (Table *)v7;
      v13 = *(GCObject **)v3;
LABEL_32:
      luaC_checkfinalizer(L, v13, v14);
      goto LABEL_33;
    }
    goto LABEL_33;
  }
  if ( v9 == 2146936064 )
  {
    L->l_G->mt[v8 & 0xF] = (Table *)v7;
    --L->top;
    result = 1;
  }
  else
  {
    L->l_G->mt[3] = (Table *)v7;
    --L->top;
    result = 1;
  }
  return result;
}

//----- (00744640) --------------------------------------------------------
void __cdecl lua_setuservalue(lua_State *L, int idx)
{
  CallInfo *v2; // edx@1
  lua_TValue *v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  lua_TValue *v10; // ecx@11
  lua_TValue *v11; // edx@13
  GCObject *v12; // eax@14

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = &v2->func[idx];
    if ( v3 < L->top )
      goto LABEL_11;
LABEL_10:
    v3 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( idx > -1001000 )
  {
    v3 = &L->top[idx];
    goto LABEL_11;
  }
  if ( idx == -1001000 )
  {
    v3 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v4 = -1001000 - idx;
  if ( v2->func->u.i.tt__ == 2146936086
    || (v5 = v2->func->u.i.v__.gc,
        v6 = *(&v5->gch.marked + 1),
        v9 = __OFSUB__(v4, v6),
        v7 = v4 == v6,
        v8 = v4 - v6 < 0,
        v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4),
        !((unsigned __int8)(v8 ^ v9) | v7)) )
    goto LABEL_10;
LABEL_11:
  v10 = L->top;
  if ( *((_DWORD *)v10 - 1) == 2146936064 )
  {
    v3->u.i.v__.gc->ts.tsv.len = 0;
    --L->top;
  }
  else
  {
    v3->u.i.v__.gc->ts.tsv.len = (unsigned int)v10[-1].u.i.v__.gc;
    v11 = L->top;
    if ( v11[-1].u.i.v__.gc->gch.marked & 3 )
    {
      v12 = v3->u.i.v__.gc;
      if ( v12->gch.marked & 4 )
        luaC_barrier_(L, v12, v11[-1].u.i.v__.gc);
    }
    --L->top;
  }
}

//----- (007446F0) --------------------------------------------------------
int __cdecl lua_getctx(lua_State *L, int *ctx)
{
  CallInfo *v2; // eax@1
  int result; // eax@4

  v2 = L->ci;
  if ( v2->callstatus & 8 )
  {
    if ( ctx )
      *ctx = (int)v2->u.l.base;
    result = L->ci->u.c.status;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00744720) --------------------------------------------------------
void __cdecl lua_callk(lua_State *L, int nargs, int nresults, int ctx, int (__cdecl *k)(lua_State *))
{
  lua_TValue *v5; // eax@1
  CallInfo *v6; // eax@6
  lua_TValue *v7; // esi@6
  int v8; // [sp-4h] [bp-Ch]@3

  v5 = &L->top[-nargs - 1];
  if ( !k || L->nny )
  {
    v8 = 0;
  }
  else
  {
    L->ci->u.l.savedpc = (const unsigned int *)k;
    L->ci->u.l.base = (lua_TValue *)ctx;
    v8 = 1;
  }
  luaD_call(L, v5, nresults, v8);
  if ( nresults == -1 )
  {
    v6 = L->ci;
    v7 = L->top;
    if ( v6->top < v7 )
      v6->top = v7;
  }
}

//----- (00744780) --------------------------------------------------------
void __cdecl f_call(lua_State *L, void *ud)
{
  luaD_call(L, *(lua_TValue **)ud, *((_DWORD *)ud + 1), 0);
}

//----- (007447A0) --------------------------------------------------------
int __cdecl lua_pcallk(lua_State *L, int nargs, int nresults, int errfunc, int ctx, int (__cdecl *k)(lua_State *))
{
  int v6; // eax@2
  lua_TValue *v7; // ecx@4
  int v8; // ebx@6
  CallInfo *v9; // edi@6
  int result; // eax@6
  int v11; // ST0C_4@7
  CallInfo *v12; // ecx@9
  lua_TValue *v13; // esi@9
  CallS c; // [sp+4h] [bp-8h]@4

  if ( errfunc )
    v6 = (char *)index2addr(L, errfunc) - (char *)L->stack;
  else
    v6 = 0;
  v7 = &L->top[-nargs - 1];
  c.func = &L->top[-nargs - 1];
  if ( !k || L->nny )
  {
    v8 = nresults;
    v11 = (char *)v7 - (char *)L->stack;
    c.nresults = nresults;
    result = luaD_pcall(L, f_call, &c, v11, v6);
  }
  else
  {
    v8 = nresults;
    v9 = L->ci;
    v9->u.l.savedpc = (const unsigned int *)k;
    v9->u.l.base = (lua_TValue *)ctx;
    v9->extra = (_DWORD)c.func - (unsigned int)L->stack;
    v9->u.c.old_allowhook = L->allowhook;
    v9->u.c.old_errfunc = L->errfunc;
    L->errfunc = v6;
    v9->callstatus |= 0x10u;
    luaD_call(L, c.func, nresults, 1);
    v9->callstatus &= 0xEFu;
    L->errfunc = v9->u.c.old_errfunc;
    result = 0;
  }
  if ( v8 == -1 )
  {
    v12 = L->ci;
    v13 = L->top;
    if ( v12->top < v13 )
      v12->top = v13;
  }
  return result;
}

//----- (00744860) --------------------------------------------------------
int __cdecl lua_load(lua_State *L, const char *(__cdecl *reader)(lua_State *, void *, unsigned int *), void *data, const char *chunkname, const char *mode)
{
  const char *v5; // edi@1
  int v6; // ebx@3
  GCObject *v7; // edi@4
  lua_TValue *v8; // eax@5
  int v9; // ecx@5
  int v10; // ecx@5
  GCObject *v11; // eax@8
  unsigned int v12; // edi@9
  Zio z; // [sp+Ch] [bp-14h]@3

  v5 = chunkname;
  if ( !chunkname )
    v5 = "?";
  luaZ_init(L, &z, reader, data);
  v6 = luaD_protectedparser(L, &z, v5, mode);
  if ( !v6 )
  {
    v7 = L->top[-1].u.i.v__.gc;
    if ( *(&v7->gch.marked + 1) == 1 )
    {
      v8 = luaH_getint((Table *)L->l_G->l_registry.u.i.v__.gc, 2);
      v9 = *(_DWORD *)(v7->u.uv.len + 8);
      *(_DWORD *)v9 = v8->u.i.v__.gc;
      *(_DWORD *)(v9 + 4) = v8->u.i.tt__;
      v10 = v8->u.i.tt__;
      if ( (v8->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v10) = 3;
      if ( v10 & 0x40 )
      {
        v11 = v8->u.i.v__.gc;
        if ( v11->gch.marked & 3 )
        {
          v12 = v7->u.uv.len;
          if ( *(_BYTE *)(v12 + 5) & 4 )
            luaC_barrier_(L, (GCObject *)v12, v11);
        }
      }
    }
  }
  return v6;
}

//----- (00744920) --------------------------------------------------------
int __cdecl lua_dump(lua_State *L, int (__cdecl *writer)(lua_State *, const void *, unsigned int, void *), void *data)
{
  lua_TValue *v3; // eax@1
  int result; // eax@2

  v3 = L->top;
  if ( *((_DWORD *)v3 - 1) == 2146936134 )
    result = luaU_dump(L, (Proto *)v3[-1].u.i.v__.gc->ts.tsv.len, writer, data, 0);
  else
    result = 1;
  return result;
}

//----- (00744960) --------------------------------------------------------
int __cdecl lua_status(lua_State *L)
{
  return L->status;
}

//----- (00744970) --------------------------------------------------------
int __cdecl lua_gc(lua_State *L, int what, int data)
{
  global_State *v3; // esi@1
  int v4; // edi@1
  int result; // eax@2
  int v6; // edi@8
  int v7; // eax@9
  int v8; // edi@15

  v3 = L->l_G;
  v4 = 0;
  switch ( what )
  {
    case 0:
      result = 0;
      v3->gcrunning = 0;
      break;
    case 1:
      luaE_setdebt(v3, 0);
      result = 0;
      v3->gcrunning = 1;
      break;
    case 2:
      luaC_fullgc(L, 0);
      result = 0;
      break;
    case 3:
      result = (v3->totalbytes + v3->GCdebt) >> 10;
      break;
    case 4:
      result = (v3->totalbytes + v3->GCdebt) & 0x3FF;
      break;
    case 5:
      if ( v3->gckind == 2 )
      {
        v6 = v3->GCestimate == 0;
        luaC_forcestep(L);
        result = v6;
      }
      else
      {
        v7 = (data << 10) - 1600;
        if ( v3->gcrunning )
          v7 += v3->GCdebt;
        luaE_setdebt(v3, v7);
        luaC_forcestep(L);
        if ( v3->gcstate != 5 )
          goto LABEL_20;
        result = 1;
      }
      break;
    case 6:
      result = v3->gcpause;
      v3->gcpause = data;
      break;
    case 8:
      result = v3->gcmajorinc;
      v3->gcmajorinc = data;
      break;
    case 7:
      v8 = v3->gcstepmul;
      v3->gcstepmul = data;
      result = v8;
      break;
    case 9:
      result = v3->gcrunning;
      break;
    case 10:
      luaC_changemode(L, 2);
      result = 0;
      break;
    case 11:
      luaC_changemode(L, 0);
      result = 0;
      break;
    default:
      v4 = -1;
LABEL_20:
      result = v4;
      break;
  }
  return result;
}

//----- (00744AF0) --------------------------------------------------------
int __cdecl lua_error(lua_State *L)
{
  luaG_errormsg(L);
}

//----- (00744B00) --------------------------------------------------------
int __cdecl lua_next(lua_State *L, int idx)
{
  CallInfo *v2; // edx@1
  lua_TValue *v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9
  int result; // eax@11

  v2 = L->ci;
  if ( idx <= 0 )
  {
    if ( idx > -1001000 )
    {
      v3 = &L->top[idx];
      goto LABEL_11;
    }
    if ( idx == -1001000 )
    {
      v3 = &L->l_G->l_registry;
      goto LABEL_11;
    }
    v4 = -1001000 - idx;
    if ( v2->func->u.i.tt__ != 2146936086 )
    {
      v5 = v2->func->u.i.v__.gc;
      v6 = *(&v5->gch.marked + 1);
      v9 = __OFSUB__(v4, v6);
      v7 = v4 == v6;
      v8 = v4 - v6 < 0;
      v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4);
      if ( (unsigned __int8)(v8 ^ v9) | v7 )
        goto LABEL_11;
    }
    goto LABEL_10;
  }
  v3 = &v2->func[idx];
  if ( v3 >= L->top )
LABEL_10:
    v3 = &luaO_nilobject_;
LABEL_11:
  result = luaH_next(L, (Table *)v3->u.i.v__.gc, L->top - 1);
  if ( result )
    ++L->top;
  else
    --L->top;
  return result;
}

//----- (00744B90) --------------------------------------------------------
void __cdecl lua_concat(lua_State *L, int n)
{
  lua_TValue *v2; // edi@6
  TString *v3; // eax@6

  if ( n < 2 )
  {
    if ( !n )
    {
      v2 = L->top;
      v3 = luaS_newlstr(L, &byte_9788EB, 0);
      v2->u.i.v__.gc = (GCObject *)v3;
      v2->u.i.tt__ = BYTE4(v3->dummy.u) | 0x7FF7A540;
      ++L->top;
    }
  }
  else
  {
    if ( L->l_G->GCdebt > 0 )
      luaC_step(L);
    luaV_concat(L, n);
  }
}

//----- (00744C00) --------------------------------------------------------
void __cdecl lua_len(lua_State *L, int idx)
{
  CallInfo *v2; // edx@1
  lua_TValue *v3; // eax@2
  int v4; // eax@8
  GCObject *v5; // ecx@9
  int v6; // edx@9
  bool v7; // zf@9
  bool v8; // sf@9
  unsigned __int8 v9; // of@9

  v2 = L->ci;
  if ( idx > 0 )
  {
    v3 = &v2->func[idx];
    if ( v3 < L->top )
      goto LABEL_11;
    goto LABEL_10;
  }
  if ( idx <= -1001000 )
  {
    if ( idx == -1001000 )
    {
      v3 = &L->l_G->l_registry;
    }
    else
    {
      v4 = -1001000 - idx;
      if ( v2->func->u.i.tt__ == 2146936086
        || (v5 = v2->func->u.i.v__.gc,
            v6 = *(&v5->gch.marked + 1),
            v9 = __OFSUB__(v4, v6),
            v7 = v4 == v6,
            v8 = v4 - v6 < 0,
            v3 = (lua_TValue *)(&v5->ts.tsv.hash + 2 * v4),
            !((unsigned __int8)(v8 ^ v9) | v7)) )
      {
LABEL_10:
        v3 = &luaO_nilobject_;
        goto LABEL_11;
      }
    }
  }
  else
  {
    v3 = &L->top[idx];
  }
LABEL_11:
  luaV_objlen(L, L->top, v3);
  ++L->top;
}

//----- (00744C80) --------------------------------------------------------
void *__cdecl lua_newuserdata(lua_State *L, unsigned int size)
{
  Udata *v2; // eax@3
  lua_TValue *v3; // ecx@3

  if ( L->l_G->GCdebt > 0 )
    luaC_step(L);
  v2 = luaS_newudata(L, size, 0);
  v3 = L->top;
  v3->u.i.v__.gc = (GCObject *)v2;
  v3->u.i.tt__ = 2146936135;
  ++L->top;
  return (char *)&v2[1].dummy.u + 4;
}

//----- (00744CC0) --------------------------------------------------------
const char *__usercall aux_upvalue<eax>(lua_TValue *fi<edx>, int n<eax>, lua_TValue **val<edi>, GCObject **owner<esi>)
{
  int v4; // ecx@1
  int v5; // ecx@3
  GCObject *v6; // ecx@5
  GCObject *v8; // ecx@10
  unsigned int v9; // edx@10
  int v10; // eax@14

  v4 = fi->u.i.tt__;
  if ( (fi->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v4) = 3;
  v5 = v4 & 0x3F;
  if ( v5 != 6 )
  {
    if ( v5 == 38 )
    {
      v6 = fi->u.i.v__.gc;
      if ( n >= 1 )
      {
        if ( n <= *(&v6->gch.marked + 1) )
        {
          *val = (lua_TValue *)(&v6->ts.tsv.hash + 2 * n);
          if ( owner )
            *owner = v6;
          return &byte_9788EB;
        }
      }
    }
    return 0;
  }
  v8 = fi->u.i.v__.gc;
  v9 = fi->u.i.v__.gc->ts.tsv.len;
  if ( n < 1 || n > *(_DWORD *)(v9 + 40) )
    return 0;
  *val = *(lua_TValue **)(*(&v8->ts.tsv.len + n) + 8);
  if ( owner )
    *owner = (GCObject *)*(&v8->ts.tsv.len + n);
  v10 = *(_DWORD *)(*(_DWORD *)(v9 + 28) + 8 * n - 8);
  if ( !v10 )
    return &byte_9788EB;
  return (const char *)(v10 + 16);
}

//----- (00744D50) --------------------------------------------------------
const char *__cdecl lua_getupvalue(lua_State *L, int funcindex, int n)
{
  CallInfo *v3; // edx@1
  int v4; // eax@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // edx@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  int v11; // ecx@11
  int v12; // ecx@13
  const char *result; // eax@15
  int v14; // eax@16
  int v15; // edx@18
  int v16; // eax@20
  int v17; // esi@20
  int v18; // ecx@22
  lua_TValue *v19; // ecx@24

  v3 = L->ci;
  if ( funcindex > 0 )
  {
    v4 = (int)&v3->func[funcindex];
    if ( (lua_TValue *)v4 < L->top )
      goto LABEL_11;
LABEL_10:
    v4 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( funcindex > -1001000 )
  {
    v4 = (int)&L->top[funcindex];
    goto LABEL_11;
  }
  if ( funcindex == -1001000 )
  {
    v4 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v5 = -1001000 - funcindex;
  if ( v3->func->u.i.tt__ == 2146936086
    || (v6 = v3->func->u.i.v__.gc,
        v7 = *(&v6->gch.marked + 1),
        v10 = __OFSUB__(v5, v7),
        v8 = v5 == v7,
        v9 = v5 - v7 < 0,
        v4 = (int)(&v6->ts.tsv.hash + 2 * v5),
        !((unsigned __int8)(v9 ^ v10) | v8)) )
    goto LABEL_10;
LABEL_11:
  v11 = *(_DWORD *)(v4 + 4);
  if ( (*(_DWORD *)(v4 + 4) & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v11) = 3;
  v12 = v11 & 0x3F;
  if ( v12 != 6 )
  {
    if ( v12 == 38 )
    {
      v14 = *(_DWORD *)v4;
      if ( n >= 1 )
      {
        if ( n <= *(_BYTE *)(v14 + 6) )
        {
          v15 = v14 + 8 * n + 8;
          goto LABEL_19;
        }
      }
    }
    return 0;
  }
  v16 = *(_DWORD *)v4;
  v17 = *(_DWORD *)(v16 + 12);
  if ( n < 1 || n > *(_DWORD *)(v17 + 40) )
    return 0;
  v15 = *(_DWORD *)(*(_DWORD *)(v16 + 4 * n + 12) + 8);
  v18 = *(_DWORD *)(*(_DWORD *)(v17 + 28) + 8 * n - 8);
  if ( v18 )
  {
    result = (const char *)(v18 + 16);
    if ( v18 == -16 )
      return result;
    goto LABEL_24;
  }
LABEL_19:
  result = &byte_9788EB;
LABEL_24:
  v19 = L->top;
  v19->u.i.v__.gc = *(GCObject **)v15;
  v19->u.i.tt__ = *(_DWORD *)(v15 + 4);
  ++L->top;
  return result;
}

//----- (00744E40) --------------------------------------------------------
const char *__cdecl lua_setupvalue(lua_State *L, int funcindex, int n)
{
  CallInfo *v3; // edx@1
  lua_TValue *v4; // edx@2
  int v5; // eax@8
  GCObject *v6; // ecx@9
  int v7; // edx@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  const char *v11; // esi@11
  lua_TValue *v12; // eax@12
  void *v13; // ecx@12
  lua_TValue *v14; // ecx@12
  int v15; // eax@12
  GCObject *v16; // ecx@15
  GCObject *owner; // [sp+8h] [bp-8h]@1
  void *val; // [sp+Ch] [bp-4h]@1

  v3 = L->ci;
  val = 0;
  owner = 0;
  if ( funcindex > 0 )
  {
    v4 = &v3->func[funcindex];
    if ( v4 < L->top )
      goto LABEL_11;
LABEL_10:
    v4 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( funcindex > -1001000 )
  {
    v4 = &L->top[funcindex];
    goto LABEL_11;
  }
  if ( funcindex == -1001000 )
  {
    v4 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v5 = -1001000 - funcindex;
  if ( v3->func->u.i.tt__ == 2146936086
    || (v6 = v3->func->u.i.v__.gc,
        v7 = *(&v6->gch.marked + 1),
        v10 = __OFSUB__(v5, v7),
        v8 = v5 == v7,
        v9 = v5 - v7 < 0,
        v4 = (lua_TValue *)(&v6->ts.tsv.hash + 2 * v5),
        !((unsigned __int8)(v9 ^ v10) | v8)) )
    goto LABEL_10;
LABEL_11:
  v11 = aux_upvalue(v4, n, (lua_TValue **)&val, &owner);
  if ( v11 )
  {
    --L->top;
    v12 = L->top;
    v13 = val;
    *(_DWORD *)val = v12->u.i.v__.gc;
    *((_DWORD *)v13 + 1) = v12->u.i.tt__;
    v14 = L->top;
    v15 = v14->u.i.tt__;
    if ( (v14->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
      LOBYTE(v15) = 3;
    if ( v15 & 0x40 )
    {
      v16 = v14->u.i.v__.gc;
      if ( v16->gch.marked & 3 )
      {
        if ( owner->gch.marked & 4 )
          luaC_barrier_(L, owner, v16);
      }
    }
  }
  return v11;
}

//----- (00744F20) --------------------------------------------------------
UpVal **__usercall getupvalref<eax>(lua_State *L<ecx>, int fidx<eax>, int n<edi>, LClosure **pf<esi>)
{
  CallInfo *v4; // edx@1
  lua_TValue *v5; // eax@2
  int v6; // ecx@8
  GCObject *v7; // eax@9
  int v8; // edx@9
  LClosure *v9; // eax@11

  v4 = L->ci;
  if ( fidx > 0 )
  {
    v5 = &v4->func[fidx];
    if ( v5 < L->top )
      goto LABEL_11;
LABEL_10:
    v5 = &luaO_nilobject_;
    goto LABEL_11;
  }
  if ( fidx > -1001000 )
  {
    v5 = &L->top[fidx];
    goto LABEL_11;
  }
  if ( fidx == -1001000 )
  {
    v5 = &L->l_G->l_registry;
    goto LABEL_11;
  }
  v6 = -1001000 - fidx;
  if ( v4->func->u.i.tt__ == 2146936086
    || (v7 = v4->func->u.i.v__.gc, v8 = *(&v7->gch.marked + 1), v5 = (lua_TValue *)(&v7->ts.tsv.hash + 2 * v6), v6 > v8) )
    goto LABEL_10;
LABEL_11:
  v9 = (LClosure *)v5->u.i.v__.gc;
  if ( pf )
    *pf = v9;
  return (UpVal **)(&v9->p + n);
}

//----- (00744F80) --------------------------------------------------------
void *__cdecl lua_upvalueid(lua_State *L, int fidx, int n)
{
  CallInfo *v3; // edi@1
  int v4; // ecx@2
  int v5; // ecx@8
  GCObject *v6; // edx@9
  int v7; // ebx@9
  bool v8; // zf@9
  bool v9; // sf@9
  unsigned __int8 v10; // of@9
  int v11; // edx@11
  int v12; // edx@13
  void *result; // eax@15
  lua_TValue *v14; // eax@18
  int v15; // ecx@24
  GCObject *v16; // eax@25
  int v17; // edx@25
  int v18; // eax@25

  v3 = L->ci;
  if ( fidx > 0 )
  {
    v4 = (int)&v3->func[fidx];
    if ( (lua_TValue *)v4 < L->top )
      goto LABEL_11;
LABEL_10:
    v4 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( fidx > -1001000 )
  {
    v4 = (int)&L->top[fidx];
    goto LABEL_11;
  }
  if ( fidx == -1001000 )
  {
    v4 = (int)&L->l_G->l_registry;
    goto LABEL_11;
  }
  v5 = -1001000 - fidx;
  if ( v3->func->u.i.tt__ == 2146936086
    || (v6 = v3->func->u.i.v__.gc,
        v7 = *(&v6->gch.marked + 1),
        v10 = __OFSUB__(v5, v7),
        v8 = v5 == v7,
        v9 = v5 - v7 < 0,
        v4 = (int)(&v6->ts.tsv.hash + 2 * v5),
        !((unsigned __int8)(v9 ^ v10) | v8)) )
    goto LABEL_10;
LABEL_11:
  v11 = *(_DWORD *)(v4 + 4);
  if ( (*(_DWORD *)(v4 + 4) & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v11) = 3;
  v12 = v11 & 0x3F;
  if ( v12 == 6 )
  {
    if ( fidx <= 0 )
    {
      if ( fidx > -1001000 )
        return (void *)*(&L->top[fidx].u.i.v__.gc->ts.tsv.len + n);
      if ( fidx == -1001000 )
        return (void *)*(&L->l_G->l_registry.u.i.v__.gc->ts.tsv.len + n);
      v15 = -1001000 - fidx;
      if ( v3->func->u.i.tt__ != 2146936086 )
      {
        v16 = v3->func->u.i.v__.gc;
        v17 = *(&v16->gch.marked + 1);
        v18 = (int)(&v16->ts.tsv.hash + 2 * v15);
        if ( v15 <= v17 )
          return *(void **)(*(_DWORD *)v18 + 4 * n + 12);
      }
    }
    else
    {
      v14 = &v3->func[fidx];
      if ( v14 < L->top )
        return (void *)*(&v14->u.i.v__.gc->ts.tsv.len + n);
    }
    v18 = (int)&luaO_nilobject_;
    return *(void **)(*(_DWORD *)v18 + 4 * n + 12);
  }
  if ( v12 == 38 )
    result = (void *)(*(_DWORD *)v4 + 8 * n + 8);
  else
    result = 0;
  return result;
}

//----- (007450A0) --------------------------------------------------------
void __cdecl lua_upvaluejoin(lua_State *L, int fidx1, int n1, int fidx2, int n2)
{
  lua_State *v5; // ebx@1
  UpVal **v6; // eax@1
  CallInfo *v7; // esi@1
  int v8; // ecx@2
  int v9; // ecx@8
  GCObject *v10; // edx@9
  int v11; // esi@9
  bool v12; // zf@9
  bool v13; // sf@9
  unsigned __int8 v14; // of@9
  int v15; // ecx@11
  UpVal *v16; // ecx@11

  v5 = L;
  v6 = getupvalref(L, fidx1, n1, (LClosure **)&L);
  v7 = v5->ci;
  if ( fidx2 > 0 )
  {
    v8 = (int)&v7->func[fidx2];
    if ( (lua_TValue *)v8 < v5->top )
      goto LABEL_11;
LABEL_10:
    v8 = (int)&luaO_nilobject_;
    goto LABEL_11;
  }
  if ( fidx2 > -1001000 )
  {
    v8 = (int)&v5->top[fidx2];
    goto LABEL_11;
  }
  if ( fidx2 == -1001000 )
  {
    v8 = (int)&v5->l_G->l_registry;
    goto LABEL_11;
  }
  v9 = -1001000 - fidx2;
  if ( v7->func->u.i.tt__ == 2146936086
    || (v10 = v7->func->u.i.v__.gc,
        v11 = *(&v10->gch.marked + 1),
        v14 = __OFSUB__(v9, v11),
        v12 = v9 == v11,
        v13 = v9 - v11 < 0,
        v8 = (int)(&v10->ts.tsv.hash + 2 * v9),
        !((unsigned __int8)(v13 ^ v14) | v12)) )
    goto LABEL_10;
LABEL_11:
  v15 = *(_DWORD *)v8 + 4 * n2 + 12;
  *v6 = *(UpVal **)v15;
  v16 = *(UpVal **)v15;
  if ( v16->marked & 3 )
  {
    if ( L->marked & 4 )
      luaC_barrier_(v5, (GCObject *)&L->next, (GCObject *)&v16->next);
  }
}

//----- (00745140) --------------------------------------------------------
int __cdecl findfield(lua_State *L, int objidx, int level)
{
  int result; // eax@8

  if ( level && lua_type(L, -1) == 5 )
  {
    lua_pushnil(L);
    if ( lua_next(L, -2) )
    {
      while ( 1 )
      {
        if ( lua_type(L, -2) == 4 )
        {
          if ( lua_rawequal(L, objidx, -1) )
          {
            lua_settop(L, -2);
            return 1;
          }
          if ( findfield(L, objidx, level - 1) )
            break;
        }
        lua_settop(L, -2);
        if ( !lua_next(L, -2) )
          goto LABEL_8;
      }
      lua_remove(L, -2);
      lua_pushlstring(L, ".", 1u);
      lua_insert(L, -2);
      lua_concat(L, 3);
      result = 1;
    }
    else
    {
LABEL_8:
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00745220) --------------------------------------------------------
int __usercall pushglobalfuncname<eax>(lua_State *L<esi>, lua_Debug *ar)
{
  int v2; // edi@1
  int result; // eax@2
  lua_State *v4; // [sp+0h] [bp-Ch]@0

  v2 = lua_gettop(v4);
  lua_getinfo(L, "f", ar);
  lua_rawgeti(L, -1001000, 2);
  if ( findfield(L, v2 + 1, 2) )
  {
    lua_copy(L, -1, v2 + 1);
    lua_settop(L, -3);
    result = 1;
  }
  else
  {
    lua_settop(L, v2);
    result = 0;
  }
  return result;
}

//----- (00745290) --------------------------------------------------------
void __usercall pushfuncname(lua_State *L<ecx>, lua_Debug *ar<eax>)
{
  lua_State *v2; // esi@1
  const char v3; // cl@3

  v2 = L;
  if ( *ar->namewhat )
  {
    lua_pushfstring(L, "function '%s'");
  }
  else
  {
    v3 = *ar->what;
    if ( v3 == 109 )
    {
      lua_pushlstring(v2, "main chunk", 0xAu);
    }
    else
    {
      if ( v3 == 67 )
      {
        if ( pushglobalfuncname(v2, ar) )
        {
          lua_tolstring(v2, -1, 0);
          lua_pushfstring(v2, "function '%s'");
          lua_remove(v2, -2);
        }
        else
        {
          lua_pushlstring(v2, "?", 1u);
        }
      }
      else
      {
        lua_pushfstring(v2, "function <%s:%d>");
      }
    }
  }
}

//----- (00745330) --------------------------------------------------------
int __usercall countlevels<eax>(lua_State *L<ecx>)
{
  lua_State *v1; // edi@1
  signed int v2; // esi@1
  int v3; // ebx@2
  int result; // eax@8
  lua_State *La; // [sp+8h] [bp-6Ch]@1
  lua_Debug ar; // [sp+Ch] [bp-68h]@1
  unsigned int v7; // [sp+70h] [bp-4h]@1
  int v8; // [sp+74h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = L;
  v2 = 1;
  La = L;
  if ( lua_getstack(L, 1, &ar) )
  {
    do
    {
      v3 = v2;
      v2 *= 2;
    }
    while ( lua_getstack(v1, v2, &ar) );
    while ( v3 < v2 )
    {
      if ( lua_getstack(La, (v2 + v3) / 2, &ar) )
        v3 = (v2 + v3) / 2 + 1;
      else
        v2 = (v2 + v3) / 2;
    }
    result = v2 - 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (007453E0) --------------------------------------------------------
void __cdecl luaL_traceback(lua_State *L, lua_State *L1, const char *msg, int level)
{
  int v4; // edi@3
  int v5; // eax@10
  int v6; // eax@12
  int numlevels; // [sp+Ch] [bp-74h]@1
  int top; // [sp+14h] [bp-6Ch]@1
  lua_Debug ar; // [sp+18h] [bp-68h]@3
  unsigned int v10; // [sp+7Ch] [bp-4h]@1
  int v11; // [sp+80h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  top = lua_gettop(L);
  numlevels = countlevels(L1);
  if ( msg )
    lua_pushfstring(L, "%s\n");
  lua_pushlstring(L, "stack traceback:", 0x10u);
  v4 = level;
  while ( lua_getstack(L1, v4, &ar) )
  {
    ++v4;
    if ( v4 == (((numlevels <= 22) - 1) & 0xC) )
    {
      lua_pushlstring(L, "\n\t...", 5u);
      v4 = numlevels - 10;
    }
    else
    {
      lua_getinfo(L1, "Slnt", &ar);
      lua_pushfstring(L, "\n\t%s:");
      if ( ar.currentline > 0 )
        lua_pushfstring(L, "%d:");
      lua_pushlstring(L, " in ", 4u);
      pushfuncname(L, &ar);
      if ( ar.istailcall )
        lua_pushlstring(L, "\n\t(...tail calls...)", 0x14u);
      v5 = lua_gettop(L);
      lua_concat(L, v5 - top);
    }
  }
  v6 = lua_gettop(L);
  lua_concat(L, v6 - top);
}
// A85C00: using guessed type int __security_cookie;

//----- (00745540) --------------------------------------------------------
void __cdecl luaL_where(lua_State *L, int level)
{
  lua_Debug ar; // [sp+4h] [bp-68h]@1
  unsigned int v3; // [sp+68h] [bp-4h]@1
  int v4; // [sp+6Ch] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  if ( lua_getstack(L, level, &ar) && (lua_getinfo(L, "Sl", &ar), ar.currentline > 0) )
    lua_pushfstring(L, "%s:%d: ");
  else
    lua_pushlstring(L, &byte_9788EB, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (007455D0) --------------------------------------------------------
int __cdecl luaL_error(lua_State *L, const char *fmt)
{
  char argp; // [sp+14h] [bp+10h]@0

  luaL_where(L, 1);
  lua_pushvfstring(L, fmt, &argp);
  lua_concat(L, 2);
  lua_error(L);
}

//----- (00745610) --------------------------------------------------------
int __cdecl luaL_fileresult(lua_State *L, int stat, const char *fname)
{
  int v3; // edi@1
  int result; // eax@2
  char *v5; // [sp-10h] [bp-14h]@3

  v3 = *_errno();
  if ( stat )
  {
    lua_pushboolean(L, 1);
    result = 1;
  }
  else
  {
    lua_pushnil(L);
    v5 = strerror(v3);
    if ( fname )
    {
      lua_pushfstring(L, "%s: %s");
      lua_pushinteger(L, v3);
      result = 3;
    }
    else
    {
      lua_pushstring(L, v5);
      lua_pushinteger(L, v3);
      result = 3;
    }
  }
  return result;
}

//----- (007456A0) --------------------------------------------------------
int __cdecl luaL_execresult(lua_State *L, int stat)
{
  int v2; // esi@2
  char *v3; // eax@2
  int result; // eax@2

  if ( stat == -1 )
  {
    v2 = *_errno();
    lua_pushnil(L);
    v3 = strerror(v2);
    lua_pushstring(L, v3);
    lua_pushinteger(L, v2);
    result = 3;
  }
  else
  {
    if ( stat )
      lua_pushnil(L);
    else
      lua_pushboolean(L, 1);
    lua_pushstring(L, "exit");
    lua_pushinteger(L, stat);
    result = 3;
  }
  return result;
}

//----- (00745720) --------------------------------------------------------
int __cdecl luaL_newmetatable(lua_State *L, const char *tname)
{
  int result; // eax@2

  lua_getfield(L, -1001000, tname);
  if ( lua_type(L, -1) )
  {
    result = 0;
  }
  else
  {
    lua_settop(L, -2);
    lua_createtable(L, 0, 0);
    lua_pushvalue(L, -1);
    lua_setfield(L, -1001000, tname);
    result = 1;
  }
  return result;
}

//----- (00745780) --------------------------------------------------------
void __cdecl luaL_setmetatable(lua_State *L, const char *tname)
{
  lua_getfield(L, -1001000, tname);
  lua_setmetatable(L, -2);
}

//----- (007457B0) --------------------------------------------------------
void *__cdecl luaL_testudata(lua_State *L, int ud, const char *tname)
{
  void *v3; // esi@1
  void *result; // eax@5

  v3 = lua_touserdata(L, ud);
  if ( v3 && lua_getmetatable(L, ud) )
  {
    lua_getfield(L, -1001000, tname);
    if ( !lua_rawequal(L, -1, -2) )
      v3 = 0;
    lua_settop(L, -3);
    result = v3;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00745820) --------------------------------------------------------
void __cdecl luaL_checkstack(lua_State *L, int space, const char *msg)
{
  if ( !lua_checkstack(L, space + 20) )
  {
    if ( msg )
      luaL_error(L, "stack overflow (%s)");
    luaL_error(L, "stack overflow");
  }
}

//----- (00745870) --------------------------------------------------------
char *__cdecl luaL_prepbuffsize(luaL_Buffer *B, unsigned int sz)
{
  luaL_Buffer *v2; // esi@1
  unsigned int v3; // ecx@1
  unsigned int v4; // eax@1
  lua_State *v5; // ebx@1
  unsigned int v6; // edi@1
  unsigned int v7; // edi@2
  void *v8; // ebx@7
  lua_State *L; // [sp+14h] [bp+8h]@1

  v2 = B;
  v3 = B->size;
  v4 = B->n;
  v5 = B->L;
  v6 = B->size - v4;
  L = B->L;
  if ( v6 < sz )
  {
    v7 = 2 * v3;
    if ( 2 * v3 - v4 < sz )
      v7 = v4 + sz;
    if ( v7 < v4 || v7 - v4 < sz )
      luaL_error(v5, "buffer too large");
    v8 = lua_newuserdata(v5, v7);
    memcpy((char *)v8, v2->b, v2->n);
    if ( v2->b != v2->initb )
      lua_remove(L, -2);
    v2->b = (char *)v8;
    v2->size = v7;
  }
  return &v2->b[v2->n];
}

//----- (00745900) --------------------------------------------------------
void __cdecl luaL_addlstring(luaL_Buffer *B, const char *s, unsigned int l)
{
  char *v3; // eax@1

  v3 = luaL_prepbuffsize(B, l);
  memcpy(v3, (char *)s, l);
  B->n += l;
}

//----- (00745930) --------------------------------------------------------
void __cdecl luaL_addstring(luaL_Buffer *B, const char *s)
{
  const char *v2; // eax@1
  const char *v3; // edx@1
  char v4; // cl@2
  unsigned int v5; // esi@3
  char *v6; // eax@3

  v2 = s;
  v3 = s + 1;
  do
    v4 = *v2++;
  while ( v4 );
  v5 = v2 - v3;
  v6 = luaL_prepbuffsize(B, v2 - v3);
  memcpy(v6, (char *)s, v5);
  B->n += v5;
}

//----- (00745970) --------------------------------------------------------
void __cdecl luaL_pushresult(luaL_Buffer *B)
{
  lua_State *v1; // edi@1

  v1 = B->L;
  lua_pushlstring(B->L, B->b, B->n);
  if ( B->b != B->initb )
    lua_remove(v1, -2);
}

//----- (007459B0) --------------------------------------------------------
void __cdecl luaL_pushresultsize(luaL_Buffer *B, unsigned int sz)
{
  luaL_Buffer *v2; // esi@1
  lua_State *v3; // edi@1

  v2 = B;
  v2->n += sz;
  v3 = B->L;
  lua_pushlstring(B->L, B->b, B->n);
  if ( v2->b != v2->initb )
    lua_remove(v3, -2);
}

//----- (007459F0) --------------------------------------------------------
void __cdecl luaL_addvalue(luaL_Buffer *B)
{
  luaL_Buffer *v1; // esi@1
  lua_State *v2; // ebx@1
  luaL_Buffer *v3; // edi@3
  char *v4; // eax@3
  char *s; // [sp+Ch] [bp-4h]@1

  v1 = B;
  v2 = B->L;
  s = (char *)lua_tolstring(B->L, -1, (unsigned int *)&B);
  if ( v1->b != v1->initb )
    lua_insert(v2, -2);
  v3 = B;
  v4 = luaL_prepbuffsize(v1, (unsigned int)B);
  memcpy(v4, s, (unsigned int)v3);
  v1->n += (unsigned int)v3;
  lua_remove(v2, (v1->b == (char *)v1->initb) - 2);
}

//----- (00745A60) --------------------------------------------------------
void __cdecl luaL_buffinit(lua_State *L, luaL_Buffer *B)
{
  B->L = L;
  B->b = B->initb;
  B->n = 0;
  B->size = 512;
}

//----- (00745A90) --------------------------------------------------------
char *__cdecl luaL_buffinitsize(lua_State *L, luaL_Buffer *B, unsigned int sz)
{
  B->L = L;
  B->b = B->initb;
  B->n = 0;
  B->size = 512;
  return luaL_prepbuffsize(B, sz);
}

//----- (00745AC0) --------------------------------------------------------
const char *__cdecl getF(lua_State *L, void *ud, unsigned int *size)
{
  const char *result; // eax@2

  if ( *(_DWORD *)ud <= 0 )
  {
    if ( feof(*((_iobuf **)ud + 1)) )
    {
      result = 0;
    }
    else
    {
      *size = fread((char *)ud + 8, 1u, 0x200u, *((_iobuf **)ud + 1));
      result = (char *)ud + 8;
    }
  }
  else
  {
    *size = *(_DWORD *)ud;
    *(_DWORD *)ud = 0;
    result = (char *)ud + 8;
  }
  return result;
}

//----- (00745B20) --------------------------------------------------------
int __usercall errfile<eax>(lua_State *L<esi>, int fnameindex<edi>, const char *what)
{
  int *v3; // eax@1
  const char *v4; // ST14_4@1

  v3 = _errno();
  strerror(*v3);
  v4 = lua_tolstring(L, fnameindex, 0) + 1;
  lua_pushfstring(L, "cannot %s %s: %s");
  lua_remove(L, fnameindex);
  return 7;
}

//----- (00745B60) --------------------------------------------------------
int __usercall skipBOM<eax>(LoadF *lf<esi>)
{
  char v1[4]; // edi@1
  int result; // eax@2
  int v3; // ecx@3
  _iobuf *v4; // ST00_4@5

  *(_DWORD *)v1 = "ï»¿";
  lf->n = 0;
  while ( 1 )
  {
    result = getc(lf->f);
    if ( result == -1 )
      break;
    v3 = **(_BYTE **)v1;
    ++*(_DWORD *)v1;
    if ( result != v3 )
      break;
    lf->buff[lf->n++] = result;
    if ( !**(_BYTE **)v1 )
    {
      v4 = lf->f;
      lf->n = 0;
      return getc(v4);
    }
  }
  return result;
}

//----- (00745BB0) --------------------------------------------------------
int __usercall skipcomment<eax>(LoadF *lf<eax>, int *cp<edi>)
{
  LoadF *v2; // esi@1
  int v3; // eax@1
  int v4; // eax@2
  int result; // eax@4

  v2 = lf;
  v3 = skipBOM(lf);
  *cp = v3;
  if ( v3 == 35 )
  {
    do
      v4 = getc(v2->f);
    while ( v4 != -1 && v4 != 10 );
    *cp = getc(v2->f);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00745BF0) --------------------------------------------------------
int __cdecl luaL_loadfilex(lua_State *L, const char *filename, const char *mode)
{
  int v3; // eax@1
  int v4; // edi@1
  int v5; // eax@3
  int v6; // eax@4
  int result; // eax@10
  int *v8; // eax@12
  const char *v9; // ST1C_4@12
  const char *v10; // ST30_4@16
  const char *v11; // eax@16
  int v12; // esi@16
  int *v13; // eax@19
  const char *v14; // ST14_4@19
  int fnameindex; // [sp+Ch] [bp-21Ch]@1
  int c; // [sp+14h] [bp-214h]@3
  const char *readstatus; // [sp+18h] [bp-210h]@1
  LoadF lf; // [sp+1Ch] [bp-20Ch]@2
  unsigned int v19; // [sp+224h] [bp-4h]@1
  int v20; // [sp+228h] [bp+0h]@1

  v19 = (unsigned int)&v20 ^ __security_cookie;
  readstatus = mode;
  v3 = lua_gettop(L);
  v4 = v3 + 1;
  fnameindex = v3 + 1;
  if ( filename )
  {
    lua_pushfstring(L, "@%s");
    lf.f = fopen(filename, "r");
    if ( !lf.f )
    {
      v8 = _errno();
      strerror(*v8);
      v9 = lua_tolstring(L, v4, 0) + 1;
      lua_pushfstring(L, "cannot %s %s: %s");
      lua_remove(L, v4);
      return 7;
    }
  }
  else
  {
    lua_pushlstring(L, "=stdin", 6u);
    lf.f = __iob_func();
  }
  v5 = skipBOM(&lf);
  c = v5;
  if ( v5 == 35 )
  {
    do
      v6 = getc(lf.f);
    while ( v6 != -1 && v6 != 10 );
    v5 = getc(lf.f);
    lf.buff[lf.n] = 10;
    ++lf.n;
    c = v5;
  }
  if ( v5 == 27 )
  {
    if ( !filename )
    {
LABEL_15:
      lf.buff[lf.n] = v5;
      ++lf.n;
      goto LABEL_16;
    }
    lf.f = freopen(filename, "rb", lf.f);
    if ( !lf.f )
      return errfile(L, "reopen", v4);
    skipcomment(&lf, &c);
    v5 = c;
    v4 = fnameindex;
  }
  if ( v5 != -1 )
    goto LABEL_15;
LABEL_16:
  v10 = readstatus;
  v11 = lua_tolstring(L, -1, 0);
  v12 = lua_load(L, getF, &lf, v11, v10);
  readstatus = (const char *)ferror(lf.f);
  if ( filename )
    fclose(lf.f);
  if ( readstatus )
  {
    lua_settop(L, v4);
    v13 = _errno();
    strerror(*v13);
    v14 = lua_tolstring(L, v4, 0) + 1;
    lua_pushfstring(L, "cannot %s %s: %s");
    lua_remove(L, v4);
    result = 7;
  }
  else
  {
    lua_remove(L, v4);
    result = v12;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00745E80) --------------------------------------------------------
const char *__cdecl getS(lua_State *L, void *ud, unsigned int *size)
{
  unsigned int v3; // ecx@1
  const char *result; // eax@2

  v3 = *((_DWORD *)ud + 1);
  if ( v3 )
  {
    *size = v3;
    *((_DWORD *)ud + 1) = 0;
    result = *(const char **)ud;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00745EB0) --------------------------------------------------------
int __cdecl luaL_loadbufferx(lua_State *L, const char *buff, unsigned int size, const char *name, const char *mode)
{
  LoadS ls; // [sp+0h] [bp-8h]@1

  ls.s = buff;
  ls.size = size;
  return lua_load(L, getS, &ls, name, mode);
}

//----- (00745EF0) --------------------------------------------------------
int __cdecl luaL_getmetafield(lua_State *L, int obj, const char *event)
{
  if ( !lua_getmetatable(L, obj) )
    return 0;
  lua_pushstring(L, event);
  lua_rawget(L, -2);
  if ( !lua_type(L, -1) )
  {
    lua_settop(L, -3);
    return 0;
  }
  lua_remove(L, -2);
  return 1;
}

//----- (00745F50) --------------------------------------------------------
int __cdecl luaL_callmeta(lua_State *L, int obj, const char *event)
{
  int v3; // edi@1

  v3 = lua_absindex(L, obj);
  if ( !lua_getmetatable(L, v3) )
    return 0;
  lua_pushstring(L, event);
  lua_rawget(L, -2);
  if ( !lua_type(L, -1) )
  {
    lua_settop(L, -3);
    return 0;
  }
  lua_remove(L, -2);
  lua_pushvalue(L, v3);
  lua_callk(L, 1, 1, 0, 0);
  return 1;
}

//----- (00745FD0) --------------------------------------------------------
int __cdecl luaL_len(lua_State *L, int idx)
{
  int v2; // edi@1
  int isnum; // [sp+8h] [bp-4h]@1

  lua_len(L, idx);
  v2 = lua_tointegerx(L, -1, &isnum);
  if ( !isnum )
    luaL_error(L, "object length is not a number");
  lua_settop(L, -2);
  return v2;
}

//----- (00746020) --------------------------------------------------------
const char *__cdecl luaL_tolstring(lua_State *L, int idx, unsigned int *len)
{
  const char *result; // eax@3
  bool v4; // zf@4
  const char *v5; // eax@4
  int v6; // eax@8

  if ( luaL_callmeta(L, idx, "__tostring") )
  {
LABEL_9:
    result = lua_tolstring(L, -1, len);
  }
  else
  {
    switch ( lua_type(L, idx) )
    {
      case 3:
      case 4:
        lua_pushvalue(L, idx);
        result = lua_tolstring(L, -1, len);
        break;
      case 1:
        v4 = lua_toboolean(L, idx) == 0;
        v5 = "true";
        if ( v4 )
          v5 = "false";
        lua_pushstring(L, v5);
        result = lua_tolstring(L, -1, len);
        break;
      case 0:
        lua_pushlstring(L, "nil", 3u);
        result = lua_tolstring(L, -1, len);
        break;
      default:
        lua_topointer(L, idx);
        v6 = lua_type(L, idx);
        lua_typename(L, v6);
        lua_pushfstring(L, "%s: %p");
        goto LABEL_9;
    }
  }
  return result;
}

//----- (00746120) --------------------------------------------------------
int __cdecl luaL_getsubtable(lua_State *L, int idx, const char *fname)
{
  int result; // eax@2
  int v4; // edi@3

  lua_getfield(L, idx, fname);
  if ( lua_type(L, -1) == 5 )
  {
    result = 1;
  }
  else
  {
    lua_settop(L, -2);
    v4 = lua_absindex(L, idx);
    lua_createtable(L, 0, 0);
    lua_pushvalue(L, -1);
    lua_setfield(L, v4, fname);
    result = 0;
  }
  return result;
}

//----- (00746190) --------------------------------------------------------
void __cdecl luaL_requiref(lua_State *L, const char *modname, int (__cdecl *openf)(lua_State *), int glb)
{
  int v4; // edi@2

  lua_pushcclosure(L, openf, 0);
  lua_pushstring(L, modname);
  lua_callk(L, 1, 1, 0, 0);
  lua_getfield(L, -1001000, "_LOADED");
  if ( lua_type(L, -1) != 5 )
  {
    lua_settop(L, -2);
    v4 = lua_absindex(L, -1001000);
    lua_createtable(L, 0, 0);
    lua_pushvalue(L, -1);
    lua_setfield(L, v4, "_LOADED");
  }
  lua_pushvalue(L, -2);
  lua_setfield(L, -2, modname);
  lua_settop(L, -2);
  if ( glb )
  {
    lua_pushvalue(L, -1);
    lua_setglobal(L, modname);
  }
}

//----- (00746250) --------------------------------------------------------
const char *__cdecl luaL_gsub(lua_State *L, const char *s, const char *p, const char *r)
{
  lua_State *v4; // ebx@1
  char *v5; // edi@1
  int v6; // eax@1
  int v7; // esi@2
  unsigned int v8; // eax@2
  int v9; // esi@2
  unsigned int v10; // ebx@3
  unsigned int v11; // ecx@11
  unsigned int v12; // esi@11
  unsigned int v13; // edi@12
  void *v14; // ebx@17
  char *v15; // eax@22
  int v16; // edx@22
  char v17; // cl@23
  unsigned int v18; // esi@24
  char *v19; // eax@24
  lua_State *v20; // esi@24
  unsigned int l; // [sp+14h] [bp-228h]@1
  int wild; // [sp+20h] [bp-21Ch]@1
  void *v24; // [sp+24h] [bp-218h]@8
  luaL_Buffer b; // [sp+28h] [bp-214h]@1
  unsigned int v26; // [sp+238h] [bp-4h]@1
  int v27; // [sp+23Ch] [bp+0h]@1

  v26 = (unsigned int)&v27 ^ __security_cookie;
  v4 = L;
  v5 = (char *)s;
  l = strlen(p);
  b.L = L;
  b.b = b.initb;
  b.n = 0;
  b.size = 512;
  strstr((char *)s, (char *)p);
  wild = v6;
  if ( v6 )
  {
    do
    {
      v7 = v6;
      v8 = b.n;
      v9 = v7 - (_DWORD)v5;
      if ( b.size - b.n < v9 )
      {
        v10 = 2 * b.size;
        if ( 2 * b.size - b.n < v9 )
          v10 = b.n + v9;
        if ( v10 < b.n || v10 - b.n < v9 )
          luaL_error(b.L, "buffer too large");
        v24 = lua_newuserdata(b.L, v10);
        memcpy((char *)v24, b.b, b.n);
        if ( (char *)b.b != b.initb )
          lua_remove(b.L, -2);
        v8 = b.n;
        b.b = (char *)v24;
        b.size = v10;
      }
      memcpy(&b.b[v8], v5, v9);
      b.n += v9;
      v11 = b.n;
      v12 = strlen(r);
      if ( b.size - b.n < v12 )
      {
        v13 = 2 * b.size;
        if ( 2 * b.size - b.n < v12 )
          v13 = v12 + b.n;
        if ( v13 < b.n || v13 - b.n < v12 )
          luaL_error(b.L, "buffer too large");
        v14 = lua_newuserdata(b.L, v13);
        memcpy((char *)v14, b.b, b.n);
        if ( (char *)b.b != b.initb )
          lua_remove(b.L, -2);
        v11 = b.n;
        b.b = (char *)v14;
        b.size = v13;
      }
      memcpy(&b.b[v11], (char *)r, v12);
      v5 = (char *)(l + wild);
      b.n += v12;
      strstr((char *)(l + wild), (char *)p);
      wild = v6;
    }
    while ( v6 );
    v4 = L;
  }
  v15 = v5;
  v16 = (int)(v5 + 1);
  do
    v17 = *v15++;
  while ( v17 );
  v18 = (unsigned int)&v15[-v16];
  v19 = luaL_prepbuffsize(&b, (unsigned int)&v15[-v16]);
  memcpy(v19, v5, v18);
  b.n += v18;
  v20 = b.L;
  lua_pushlstring(b.L, b.b, b.n);
  if ( (char *)b.b != b.initb )
    lua_remove(v20, -2);
  return lua_tolstring(v4, -1, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (00746530) --------------------------------------------------------
void *__cdecl l_alloc(void *ud, void *ptr, unsigned int osize, unsigned int nsize)
{
  void *result; // eax@2

  if ( nsize )
  {
    result = realloc(ptr, nsize);
  }
  else
  {
    free(ptr);
    result = 0;
  }
  return result;
}

//----- (00746560) --------------------------------------------------------
int __cdecl panic(lua_State *L)
{
  _iobuf *v1; // eax@1
  _iobuf *v2; // eax@1

  lua_tolstring(L, -1, 0);
  v1 = __iob_func();
  fprintf(v1 + 2, "PANIC: unprotected error in call to Lua API (%s)\n");
  v2 = __iob_func();
  fflush(v2 + 2);
  return 0;
}

//----- (007465A0) --------------------------------------------------------
lua_State *__cdecl luaL_newstate()
{
  lua_State *result; // eax@1
  lua_State *v1; // esi@1

  result = lua_newstate(l_alloc, 0);
  v1 = result;
  if ( result )
  {
    lua_atpanic(result, panic);
    result = v1;
  }
  return result;
}

//----- (007465D0) --------------------------------------------------------
void __cdecl luaL_checkversion_(lua_State *L, long double ver)
{
  const long double *v2; // edi@1

  v2 = lua_version(L);
  if ( v2 != lua_version(0) )
    luaL_error(L, "multiple Lua VMs detected");
  if ( ver != *(double *)v2 )
    luaL_error(L, "version mismatch: app. needs %f, Lua core provides %f");
  lua_pushnumber(L, -4660.0);
  if ( lua_tointegerx(L, -1, 0) != -4660 || lua_tounsignedx(L, -1, 0) != -4660 )
    luaL_error(L, "bad conversion number->int; must recompile Lua with proper settings");
  lua_settop(L, -2);
}

//----- (00746690) --------------------------------------------------------
int __cdecl luaL_argerror(lua_State *L, int narg, const char *extramsg)
{
  const char *v3; // eax@8
  lua_Debug ar; // [sp+8h] [bp-68h]@1
  unsigned int v5; // [sp+6Ch] [bp-4h]@1
  int v6; // [sp+70h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  if ( !lua_getstack(L, 0, &ar) )
    luaL_error(L, "bad argument #%d (%s)");
  lua_getinfo(L, "n", &ar);
  if ( !strcmp(ar.namewhat, "method") && narg == 1 )
    luaL_error(L, "calling '%s' on bad self (%s)");
  if ( !ar.name )
  {
    if ( pushglobalfuncname(L, &ar) )
      v3 = lua_tolstring(L, -1, 0);
    else
      v3 = "?";
    ar.name = v3;
  }
  luaL_error(L, "bad argument #%d to '%s' (%s)");
}
// A85C00: using guessed type int __security_cookie;

//----- (007467A0) --------------------------------------------------------
void *__cdecl luaL_checkudata(lua_State *L, int ud, const char *tname)
{
  void *result; // eax@1
  int v4; // eax@2
  const char *v5; // eax@3

  result = luaL_testudata(L, ud, tname);
  if ( !result )
  {
    v4 = lua_type(L, ud);
    lua_typename(L, v4);
    v5 = lua_pushfstring(L, "%s expected, got %s");
    luaL_argerror(L, ud, v5);
  }
  return result;
}

//----- (007467F0) --------------------------------------------------------
void __cdecl luaL_checktype(lua_State *L, int narg, int t)
{
  int v3; // eax@2
  const char *v4; // eax@3

  if ( lua_type(L, narg) != t )
  {
    lua_typename(L, t);
    v3 = lua_type(L, narg);
    lua_typename(L, v3);
    v4 = lua_pushfstring(L, "%s expected, got %s");
    luaL_argerror(L, narg, v4);
  }
}

//----- (00746850) --------------------------------------------------------
void __cdecl luaL_checkany(lua_State *L, int narg)
{
  if ( lua_type(L, narg) == -1 )
    luaL_argerror(L, narg, "value expected");
}

//----- (00746880) --------------------------------------------------------
const char *__cdecl luaL_checklstring(lua_State *L, int narg, unsigned int *len)
{
  const char *result; // eax@1
  int v4; // eax@2
  const char *v5; // eax@3

  result = lua_tolstring(L, narg, len);
  if ( !result )
  {
    lua_typename(L, 4);
    v4 = lua_type(L, narg);
    lua_typename(L, v4);
    v5 = lua_pushfstring(L, "%s expected, got %s");
    luaL_argerror(L, narg, v5);
  }
  return result;
}

//----- (007468E0) --------------------------------------------------------
const char *__cdecl luaL_optlstring(lua_State *L, int narg, const char *def, unsigned int *len)
{
  const char *result; // eax@2

  if ( lua_type(L, narg) > 0 )
  {
    result = luaL_checklstring(L, narg, len);
  }
  else
  {
    result = def;
    if ( len )
    {
      if ( def )
        *len = strlen(def);
      else
        *len = 0;
    }
  }
  return result;
}

//----- (00746940) --------------------------------------------------------
long double __cdecl luaL_checknumber(lua_State *L, int narg)
{
  long double result; // st7@1
  int v3; // eax@2
  const char *v4; // eax@3
  int isnum; // [sp+10h] [bp-4h]@1

  result = lua_tonumberx(L, narg, &isnum);
  if ( !isnum )
  {
    lua_typename(L, 3);
    v3 = lua_type(L, narg);
    lua_typename(L, v3);
    v4 = lua_pushfstring(L, "%s expected, got %s");
    luaL_argerror(L, narg, v4);
  }
  return result;
}

//----- (007469B0) --------------------------------------------------------
long double __cdecl luaL_optnumber(lua_State *L, int narg, long double def)
{
  long double result; // st7@2

  if ( lua_type(L, narg) > 0 )
    result = luaL_checknumber(L, narg);
  else
    result = def;
  return result;
}

//----- (007469E0) --------------------------------------------------------
int __cdecl luaL_checkinteger(lua_State *L, int narg)
{
  int result; // eax@1
  int v3; // eax@2
  const char *v4; // eax@3
  int isnum; // [sp+Ch] [bp-4h]@1

  result = lua_tointegerx(L, narg, &isnum);
  if ( !isnum )
  {
    lua_typename(L, 3);
    v3 = lua_type(L, narg);
    lua_typename(L, v3);
    v4 = lua_pushfstring(L, "%s expected, got %s");
    luaL_argerror(L, narg, v4);
  }
  return result;
}

//----- (00746A40) --------------------------------------------------------
unsigned int __cdecl luaL_checkunsigned(lua_State *L, int narg)
{
  unsigned int result; // eax@1
  int v3; // eax@2
  const char *v4; // eax@3
  int isnum; // [sp+Ch] [bp-4h]@1

  result = lua_tounsignedx(L, narg, &isnum);
  if ( !isnum )
  {
    lua_typename(L, 3);
    v3 = lua_type(L, narg);
    lua_typename(L, v3);
    v4 = lua_pushfstring(L, "%s expected, got %s");
    luaL_argerror(L, narg, v4);
  }
  return result;
}

//----- (00746AA0) --------------------------------------------------------
int __cdecl luaL_optinteger(lua_State *L, int narg, int def)
{
  int result; // eax@2

  if ( lua_type(L, narg) > 0 )
    result = luaL_checkinteger(L, narg);
  else
    result = def;
  return result;
}

//----- (00746AD0) --------------------------------------------------------
void __cdecl luaL_setfuncs(lua_State *L, luaL_Reg *l, int nup)
{
  int v3; // ebx@1
  luaL_Reg *i; // edi@3
  int v5; // ebx@5
  int la; // [sp+24h] [bp+Ch]@5

  luaL_checkversion_(L, 502.0);
  v3 = nup;
  if ( !lua_checkstack(L, nup + 20) )
    luaL_error(L, "stack overflow (%s)");
  for ( i = l; i->name; ++i )
  {
    if ( v3 > 0 )
    {
      v5 = -v3;
      la = nup;
      do
      {
        lua_pushvalue(L, v5);
        --la;
      }
      while ( la );
      v3 = nup;
    }
    lua_pushcclosure(L, i->func, v3);
    lua_setfield(L, -2 - nup, i->name);
  }
  lua_settop(L, -1 - v3);
}

//----- (00746B80) --------------------------------------------------------
int __cdecl luaL_checkoption(lua_State *L, int narg, const char *def, const char *const *lst)
{
  const char *v4; // esi@1
  const char *v5; // eax@4
  int v6; // eax@5
  const char *v7; // eax@6
  const char *v8; // ecx@8
  int result; // eax@8
  const char *v10; // eax@11

  v4 = def;
  if ( def )
  {
    if ( lua_type(L, narg) > 0 )
      v4 = luaL_checklstring(L, narg, 0);
  }
  else
  {
    v5 = lua_tolstring(L, narg, 0);
    if ( !v5 )
    {
      lua_typename(L, 4);
      v6 = lua_type(L, narg);
      lua_typename(L, v6);
      v7 = lua_pushfstring(L, "%s expected, got %s");
      luaL_argerror(L, narg, v7);
    }
    v4 = v5;
  }
  v8 = *lst;
  result = 0;
  if ( !*lst )
  {
LABEL_11:
    v10 = lua_pushfstring(L, "invalid option '%s'");
    luaL_argerror(L, narg, v10);
  }
  while ( strcmp(v8, v4) )
  {
    v8 = lst[result++ + 1];
    if ( !v8 )
      goto LABEL_11;
  }
  return result;
}

//----- (00746C70) --------------------------------------------------------
void __cdecl luaL_openlibs(lua_State *L)
{
  int (__cdecl *v1)(lua_State *); // eax@1
  luaL_Reg *v2; // esi@1

  v1 = loadedlibs[0].func;
  v2 = loadedlibs;
  if ( loadedlibs[0].func )
  {
    do
    {
      luaL_requiref(L, v2->name, v1, 1);
      lua_settop(L, -2);
      v1 = v2[1].func;
      ++v2;
    }
    while ( v1 );
  }
  luaL_getsubtable(L, -1001000, "_PRELOAD");
  lua_settop(L, -2);
}

//----- (00746CD0) --------------------------------------------------------
void __cdecl luaE_setdebt(global_State *g, int debt)
{
  g->totalbytes += g->GCdebt - debt;
  g->GCdebt = debt;
}

//----- (00746CF0) --------------------------------------------------------
CallInfo *__cdecl luaE_extendCI(lua_State *L)
{
  CallInfo *result; // eax@1

  result = (CallInfo *)luaM_realloc_(L, 0, 0, 0x28u);
  L->ci->next = result;
  result->previous = L->ci;
  result->next = 0;
  return result;
}

//----- (00746D20) --------------------------------------------------------
void __cdecl luaE_freeCI(lua_State *L)
{
  CallInfo *v1; // eax@1
  CallInfo *v2; // esi@1
  void *i; // eax@1

  v1 = L->ci;
  v2 = v1->next;
  v1->next = 0;
  for ( i = v2; v2; i = v2 )
  {
    v2 = v2->next;
    luaM_realloc_(L, i, 0x28u, 0);
  }
}

//----- (00746D60) --------------------------------------------------------
void __usercall stack_init(lua_State *L1<esi>, lua_State *L<eax>)
{
  signed int v2; // eax@1
  lua_TValue *v3; // eax@3
  int v4; // edx@3

  L1->stack = (lua_TValue *)luaM_realloc_(L, 0, 0, 0x140u);
  L1->stacksize = 40;
  v2 = 0;
  do
  {
    L1->stack[v2].u.i.tt__ = 2146936064;
    ++v2;
  }
  while ( v2 < 40 );
  v3 = L1->stack;
  v4 = L1->stacksize;
  L1->top = v3;
  L1->stack_last = &v3[v4 - 5];
  L1->base_ci.previous = 0;
  L1->base_ci.next = 0;
  L1->base_ci.callstatus = 0;
  L1->base_ci.func = L1->top;
  L1->top->u.i.tt__ = 2146936064;
  ++L1->top;
  L1->base_ci.top = L1->top + 20;
  L1->ci = &L1->base_ci;
}

//----- (00746DE0) --------------------------------------------------------
void __usercall init_registry(lua_State *L<esi>, global_State *g<ebx>)
{
  GCObject *v2; // edi@1
  lua_State *v3; // [sp+0h] [bp-10h]@0
  unsigned __int64 mt; // [sp+8h] [bp-8h]@1

  v2 = (GCObject *)luaH_new(v3);
  g->l_registry.u.i.v__.gc = v2;
  g->l_registry.u.i.tt__ = 2146936133;
  luaH_resize(L, (Table *)v2, 2, 0);
  mt = __PAIR__(2146936136, (unsigned int)L);
  luaH_setint(L, (Table *)v2, 1, (lua_TValue *)&mt);
  mt = __PAIR__(2146936133, (unsigned int)luaH_new(L));
  luaH_setint(L, (Table *)v2, 2, (lua_TValue *)&mt);
}

//----- (00746E40) --------------------------------------------------------
void __cdecl f_luaopen(lua_State *L, void *ud)
{
  global_State *v2; // ebx@1
  TString *v3; // eax@1

  v2 = L->l_G;
  stack_init(L, L);
  init_registry(L, v2);
  luaS_resize(L, 32);
  luaT_init(L);
  luaX_init(L);
  v3 = luaS_newlstr(L, "not enough memory", 0x11u);
  v2->memerrmsg = v3;
  BYTE5(v3->dummy.u) |= 0x20u;
  v2->gcrunning = 1;
}

//----- (00746E90) --------------------------------------------------------
void __usercall close_state(lua_State *L<esi>)
{
  global_State *v1; // edi@1

  v1 = L->l_G;
  luaF_close(L, L->stack);
  luaC_freeallobjects(L);
  luaM_realloc_(L, L->l_G->strt.hash, 4 * L->l_G->strt.size, 0);
  v1->buff.buffer = (char *)luaM_realloc_(L, v1->buff.buffer, v1->buff.buffsize, 0);
  v1->buff.buffsize = 0;
  if ( L->stack )
  {
    L->ci = &L->base_ci;
    luaE_freeCI(L);
    luaM_realloc_(L, L->stack, 8 * L->stacksize, 0);
  }
  v1->frealloc(v1->ud, L, 384, 0);
}

//----- (00746F30) --------------------------------------------------------
lua_State *__cdecl lua_newthread(lua_State *L)
{
  GCObject *v1; // esi@3
  lua_TValue *v2; // eax@3
  global_State *v3; // ecx@3
  int v4; // edx@3

  if ( L->l_G->GCdebt > 0 )
    luaC_step(L);
  v1 = luaC_newobj(L, 8, 0x70u, 0, 0);
  v2 = L->top;
  v2->u.i.v__.gc = v1;
  v2->u.i.tt__ = 2146936136;
  v3 = L->l_G;
  ++L->top;
  v1->ts.tsv.len = (unsigned int)v3;
  v1->p.sizelineinfo = 0;
  v1->p.sizek = 0;
  *(TString **)((char *)&v1->p.source + 2) = (TString *)16777216;
  v1->p.sizecode = 0;
  v1->h.sizearray = 0;
  v1->u.uv.len = 0;
  v1->p.cache = 0;
  v1->p.linedefined = 0;
  v1->p.sizep = 0;
  LOWORD(v1->p.source) = 1;
  *(&v1->gch.marked + 1) = 0;
  v1->p.lastlinedefined = 0;
  LOBYTE(v1->p.sizeupvalues) = L->hookmask;
  v4 = L->basehookcount;
  v1->p.sizek = v4;
  v1->p.sizelineinfo = (int)L->hook;
  v1->p.sizecode = v4;
  stack_init((lua_State *)v1, L);
  return (lua_State *)v1;
}

//----- (00746FD0) --------------------------------------------------------
void __cdecl luaE_freethread(lua_State *L, lua_State *L1)
{
  luaF_close(L1, L1->stack);
  if ( L1->stack )
  {
    L1->ci = &L1->base_ci;
    luaE_freeCI(L1);
    luaM_realloc_(L1, L1->stack, 8 * L1->stacksize, 0);
  }
  luaM_realloc_(L, L1, 0x70u, 0);
}

//----- (00747030) --------------------------------------------------------
lua_State *__cdecl lua_newstate(void *(__cdecl *f)(void *, void *, unsigned int, unsigned int), void *ud)
{
  void *v2; // eax@1
  void *v3; // esi@1
  unsigned int v4; // eax@2
  unsigned int v6; // [sp+10h] [bp-18h]@1
  char str[4]; // [sp+14h] [bp-14h]@2
  int *v8; // [sp+18h] [bp-10h]@2
  lua_TValue *v9; // [sp+1Ch] [bp-Ch]@2
  lua_State *(__cdecl *v10)(void *(__cdecl *)(void *, void *, unsigned int, unsigned int), void *); // [sp+20h] [bp-8h]@2
  unsigned int v11; // [sp+24h] [bp-4h]@1
  int v12; // [sp+28h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v6 = (unsigned int)ud;
  v2 = f(ud, 0, 8u, 384u);
  v3 = v2;
  if ( !v2 )
    return 0;
  *(_DWORD *)v2 = 0;
  *((_BYTE *)v2 + 4) = 8;
  *((_BYTE *)v2 + 164) = 33;
  *((_BYTE *)v2 + 5) = 1;
  *((_BYTE *)v2 + 166) = 0;
  *((_WORD *)v2 + 18) = 1;
  v4 = v6;
  *((_DWORD *)v3 + 3) = (char *)v3 + 112;
  *((_DWORD *)v3 + 7) = 0;
  *((_DWORD *)v3 + 4) = 0;
  *((_DWORD *)v3 + 8) = 0;
  *((_DWORD *)v3 + 16) = 0;
  *((_DWORD *)v3 + 13) = 0;
  *((_DWORD *)v3 + 11) = 0;
  *(_DWORD *)((char *)v3 + 38) = 16777216;
  *((_DWORD *)v3 + 12) = 0;
  *((_DWORD *)v3 + 14) = 0;
  *((_BYTE *)v3 + 6) = 0;
  *((_DWORD *)v3 + 17) = 0;
  *((_DWORD *)v3 + 28) = f;
  *((_DWORD *)v3 + 29) = v4;
  *((_DWORD *)v3 + 67) = v3;
  v6 = _time64(0);
  *(_DWORD *)str = v3;
  v8 = (int *)&v6;
  v9 = &luaO_nilobject_;
  v10 = lua_newstate;
  *((_DWORD *)v3 + 40) = luaS_hash(str, 0x10u, v6);
  *((_DWORD *)v3 + 58) = (char *)v3 + 216;
  *((_DWORD *)v3 + 59) = (char *)v3 + 216;
  *((_BYTE *)v3 + 167) = 0;
  *((_DWORD *)v3 + 33) = 0;
  *((_DWORD *)v3 + 36) = 0;
  *((_DWORD *)v3 + 35) = 0;
  *((_DWORD *)v3 + 34) = 0;
  *((_DWORD *)v3 + 39) = 2146936064;
  *((_DWORD *)v3 + 60) = 0;
  *((_DWORD *)v3 + 62) = 0;
  *((_DWORD *)v3 + 66) = 0;
  *((_DWORD *)v3 + 68) = lua_version(0);
  *((_BYTE *)v3 + 165) = 5;
  *((_DWORD *)v3 + 43) = 0;
  *((_DWORD *)v3 + 44) = 0;
  *((_DWORD *)v3 + 52) = 0;
  *((_DWORD *)v3 + 46) = 0;
  *((_DWORD *)v3 + 45) = 0;
  *((_DWORD *)v3 + 48) = 0;
  *((_DWORD *)v3 + 47) = 0;
  *((_DWORD *)v3 + 51) = 0;
  *((_DWORD *)v3 + 50) = 0;
  *((_DWORD *)v3 + 49) = 0;
  *((_DWORD *)v3 + 30) = 384;
  *((_DWORD *)v3 + 31) = 0;
  *((_DWORD *)v3 + 63) = 200;
  *((_DWORD *)v3 + 64) = 200;
  *((_DWORD *)v3 + 65) = 200;
  *((_DWORD *)v3 + 87) = 0;
  *((_DWORD *)v3 + 88) = 0;
  *((_DWORD *)v3 + 89) = 0;
  *((_DWORD *)v3 + 90) = 0;
  *((_DWORD *)v3 + 91) = 0;
  *((_DWORD *)v3 + 92) = 0;
  *((_DWORD *)v3 + 93) = 0;
  *((_DWORD *)v3 + 94) = 0;
  *((_DWORD *)v3 + 95) = 0;
  if ( luaD_rawrunprotected((lua_State *)v3, f_luaopen, 0) )
  {
    close_state((lua_State *)v3);
    return 0;
  }
  return (lua_State *)v3;
}
// A85C00: using guessed type int __security_cookie;

//----- (007471F0) --------------------------------------------------------
void __cdecl lua_close(lua_State *L)
{
  close_state(L->l_G->mainthread);
}

//----- (00747210) --------------------------------------------------------
int __cdecl luaO_int2fb(unsigned int x)
{
  unsigned int v1; // ecx@1
  int v2; // eax@1
  int result; // eax@2

  v1 = x;
  v2 = 0;
  if ( x >= 8 )
  {
    if ( x >= 0x10 )
    {
      do
      {
        v1 = (v1 + 1) >> 1;
        ++v2;
      }
      while ( v1 >= 0x10 );
    }
    result = (v1 - 8) | (8 * v2 + 8);
  }
  else
  {
    result = x;
  }
  return result;
}

//----- (00747240) --------------------------------------------------------
int __cdecl luaO_fb2int(int x)
{
  int result; // eax@1

  result = x;
  if ( (x >> 3) & 0x1F )
    result = ((x & 7) + 8) << (((x >> 3) & 0x1F) - 1);
  return result;
}

//----- (00747260) --------------------------------------------------------
int __cdecl luaO_ceillog2(unsigned int x)
{
  unsigned int v1; // eax@1
  int i; // ecx@1

  v1 = x - 1;
  for ( i = 0; v1 >= 0x100; i += 8 )
    v1 >>= 8;
  return i + (unsigned __int8)log_2[v1];
}

//----- (00747290) --------------------------------------------------------
long double __cdecl luaO_arith(int op, long double v1, long double v2)
{
  long double result; // st7@2

  switch ( op )
  {
    case 0:
      result = v1 + v2;
      break;
    case 1:
      result = v1 - v2;
      break;
    case 2:
      result = v1 * v2;
      break;
    case 3:
      result = v1 / v2;
      break;
    case 4:
      result = v1 - floor(v1 / v2) * v2;
      break;
    case 5:
      result = pow(v1, v2);
      break;
    case 6:
      result = -v1;
      break;
    default:
      result = 0.0;
      break;
  }
  return result;
}

//----- (00747320) --------------------------------------------------------
int __cdecl luaO_hexavalue(int c)
{
  int result; // eax@2

  if ( byte_9DEEA9[c] & 2 )
    result = c - 48;
  else
    result = (c | 0x20) - 87;
  return result;
}

//----- (00747340) --------------------------------------------------------
// local variable allocation has failed!
long double __usercall readhexa<ecx:edx>(const char **s<ecx>, int *count<edx>, long double r)
{
  int v3; // eax@1
  long double v4; // st6@2
  int v5; // eax@3
  int v6; // eax@4
  int v7; // eax@5
  signed int v8; // eax@6
  int v9; // eax@6
  long double result; // edx@7

  v3 = (unsigned __int8)**s;
  if ( byte_9DEEA9[v3] & 0x10 )
  {
    v4 = r;
    do
    {
      v5 = (unsigned __int8)**s;
      if ( byte_9DEEA9[v5] & 2 )
        v6 = v5 - 48;
      else
        v7 = (v5 | 0x20) - 87;
      ++*count;
      ++*s;
      v4 = v4 * 16.0 + (double)v8;
      v9 = (unsigned __int8)**s;
    }
    while ( byte_9DEEA9[v9] & 0x10 );
  }
  *(_QWORD *)&result = *(_QWORD *)&count;
  return result;
}
// 747340: function return type is incorrect (must be floating point)
// 747340: variables would overlap: edx/4 and qax/8

//----- (007473A0) --------------------------------------------------------
long double __cdecl lua_strx2number(const char *s, char **endptr)
{
  const char *v2; // eax@1
  char **v3; // edi@1
  int v4; // edx@1
  int v5; // esi@1
  int v6; // edx@2
  const char v7; // cl@9
  long double v8; // ST04_8@11
  const char **v9; // ecx@11
  const char *v10; // eax@11
  long double v11; // ST04_8@12
  const char v12; // cl@17
  const char v13; // cl@19
  int v14; // edx@19
  signed int v15; // edi@20
  const char v16; // cl@24
  long double v17; // ST00_8@32
  long double result; // st7@32
  signed int neg; // [sp+14h] [bp-Ch]@4
  int i; // [sp+18h] [bp-8h]@1
  int e; // [sp+1Ch] [bp-4h]@1

  v2 = s;
  v3 = endptr;
  *endptr = (char *)s;
  v4 = (unsigned __int8)*v2;
  v5 = 0;
  e = 0;
  i = 0;
  if ( byte_9DEEA9[v4] & 8 )
  {
    do
      v6 = (unsigned __int8)(v2++)[1];
    while ( byte_9DEEA9[v6] & 8 );
  }
  if ( *v2 == 45 )
  {
    ++v2;
    neg = 1;
  }
  else
  {
    if ( *v2 == 43 )
      ++v2;
    neg = 0;
  }
  if ( *v2 != 48 || (v7 = v2[1], v7 != 120) && v7 != 88 )
    goto LABEL_16;
  __asm
  {
    fldz
    fstp    [esp+1Ch+var_1C]
  }
  s = v2 + 2;
  readhexa(&s, v8, &i);
  v10 = s;
  if ( *s == 46 )
  {
    __asm { fstp    [esp+1Ch+var_1C] }
    ++s;
    readhexa(v9, v11, &e);
    v10 = s;
    v5 = e;
  }
  if ( !i && !v5 )
  {
    __asm { fstp    st }
LABEL_16:
    __asm { fldz }
    return result;
  }
  *v3 = (char *)v10;
  v12 = *v10;
  e = -4 * v5;
  if ( v12 == 112 || v12 == 80 )
  {
    v13 = (v10++)[1];
    v14 = 0;
    if ( v13 == 45 )
    {
      ++v10;
      v15 = 1;
    }
    else
    {
      if ( v13 == 43 )
        ++v10;
      v15 = 0;
    }
    v16 = *v10;
    if ( !(byte_9DEEA9[(unsigned __int8)*v10] & 2) )
      goto ret;
    do
    {
      ++v10;
      v14 = v16 + 10 * v14 - 48;
      v16 = *v10;
    }
    while ( byte_9DEEA9[(unsigned __int8)*v10] & 2 );
    if ( v15 )
      v14 = -v14;
    e += v14;
    v3 = endptr;
  }
  *v3 = (char *)v10;
ret:
  if ( neg )
    __asm { fchs }
  __asm { fstp    qword ptr [esp] }
  return ldexp(v17, e);
}
// 7473FE: inconsistent fpu stack

//----- (007474E0) --------------------------------------------------------
int __cdecl luaO_str2d(const char *s, unsigned int len, long double *result)
{
  int v3; // eax@1
  int v4; // eax@2
  int v5; // eax@3
  void *v6; // eax@6
  const char *endptr; // [sp+4h] [bp-4h]@4

  strpbrk((char *)s, "nN");
  if ( v3
    || ((strpbrk((char *)s, "xX"), !v5) ? (*result = strtod(s, (char **)&endptr)) : (*result = lua_strx2number(
                                                                                                 s,
                                                                                                 (char **)&endptr)),
        v6 = (void *)endptr,
        endptr == s) )
  {
    v4 = 0;
  }
  else
  {
    if ( byte_9DEEA9[(unsigned __int8)*endptr] & 8 )
    {
      do
      {
        v6 = (char *)v6 + 1;
        endptr = (const char *)v6;
      }
      while ( byte_9DEEA9[*(_BYTE *)v6] & 8 );
    }
    v4 = v6 == &s[len];
  }
  return v4;
}

//----- (00747570) --------------------------------------------------------
const char *__cdecl luaO_pushvfstring(lua_State *L, const char *fmt, char *argp)
{
  const char *v3; // edi@1
  int v4; // eax@1
  char *v5; // ebx@2
  lua_TValue *v6; // ST24_4@5
  TString *v7; // eax@5
  const char *v8; // ecx@6
  lua_TValue *v9; // edi@8
  TString *v10; // eax@8
  lua_TValue *v11; // edi@9
  char v12; // cl@9
  TString *v13; // eax@9
  lua_TValue *v14; // eax@10
  double v15; // st7@10
  lua_TValue *v16; // eax@11
  int v17; // ecx@11
  int v18; // eax@12
  lua_TValue *v19; // edi@12
  TString *v20; // eax@12
  lua_TValue *v21; // edi@13
  TString *v22; // eax@13
  int v23; // eax@14
  lua_TValue *v24; // ebx@17
  TString *v25; // eax@17
  const char *result; // eax@19
  int n; // [sp+10h] [bp-2Ch]@1
  int e; // [sp+14h] [bp-28h]@1
  char buff; // [sp+1Bh] [bp-21h]@9
  char *v30; // [sp+1Ch] [bp-20h]@1
  char str; // [sp+20h] [bp-1Ch]@12
  unsigned int v32; // [sp+38h] [bp-4h]@1
  int v33; // [sp+3Ch] [bp+0h]@1

  v32 = (unsigned int)&v33 ^ __security_cookie;
  v3 = fmt;
  v30 = argp;
  n = 0;
  strchr((char *)fmt, 37);
  e = v4;
  if ( v4 )
  {
    v5 = argp - 4;
    v30 -= 8;
    do
    {
      if ( (signed int)(((char *)L->stack_last - (char *)L->top) & 0xFFFFFFF8) <= 16 )
        luaD_growstack(L, 2);
      v6 = L->top;
      L->top = v6 + 1;
      v7 = luaS_newlstr(L, v3, e - (_DWORD)v3);
      v6->u.i.v__.gc = (GCObject *)v7;
      v6->u.i.tt__ = BYTE4(v7->dummy.u) | 0x7FF7A540;
      switch ( *(_BYTE *)(e + 1) )
      {
        case 115:
          v8 = (const char *)*((_DWORD *)v5 + 1);
          v30 += 4;
          v5 += 4;
          if ( !v8 )
            v8 = "(null)";
          v9 = L->top;
          L->top = v9 + 1;
          v10 = luaS_newlstr(L, v8, strlen(v8));
          v9->u.i.v__.gc = (GCObject *)v10;
          v9->u.i.tt__ = BYTE4(v10->dummy.u) | 0x7FF7A540;
          break;
        case 99:
          v11 = L->top;
          v12 = v5[4];
          v30 += 4;
          v5 += 4;
          buff = v12;
          L->top = v11 + 1;
          v13 = luaS_newlstr(L, &buff, 1u);
          v11->u.i.v__.gc = (GCObject *)v13;
          v11->u.i.tt__ = BYTE4(v13->dummy.u) | 0x7FF7A540;
          break;
        case 100:
          v14 = L->top;
          v30 += 4;
          L->top = v14 + 1;
          v15 = (double)*((signed int *)v5 + 1);
          v5 += 4;
          *(_QWORD *)&v14->u.i.v__.gc = *(_QWORD *)&v15;
          break;
        case 102:
          v16 = L->top;
          L->top = v16 + 1;
          v17 = (int)(v30 + 8);
          *(double *)&v16->u.i.v__.gc = *((double *)v30 + 1);
          v30 = (char *)v17;
          v5 += 8;
          break;
        case 112:
          v30 += 4;
          v5 += 4;
          v18 = sprintf(&str, "%p");
          v19 = L->top;
          L->top = v19 + 1;
          v20 = luaS_newlstr(L, &str, v18);
          v19->u.i.v__.gc = (GCObject *)v20;
          v19->u.i.tt__ = BYTE4(v20->dummy.u) | 0x7FF7A540;
          break;
        case 37:
          v21 = L->top;
          L->top = v21 + 1;
          v22 = luaS_newlstr(L, "%", 1u);
          v21->u.i.v__.gc = (GCObject *)v22;
          v21->u.i.tt__ = BYTE4(v22->dummy.u) | 0x7FF7A540;
          break;
        default:
          luaG_runerror(L, "invalid option '%%%c' to 'lua_pushfstring'");
          return result;
      }
      n += 2;
      v3 = (const char *)(e + 2);
      strchr((char *)(e + 2), 37);
      e = v23;
    }
    while ( v23 );
  }
  if ( (signed int)(((char *)L->stack_last - (char *)L->top) & 0xFFFFFFF8) <= 8 )
    luaD_growstack(L, 1);
  v24 = L->top;
  L->top = v24 + 1;
  v25 = luaS_newlstr(L, v3, strlen(v3));
  v24->u.i.v__.gc = (GCObject *)v25;
  v24->u.i.tt__ = BYTE4(v25->dummy.u) | 0x7FF7A540;
  if ( n > 0 )
    luaV_concat(L, n + 1);
  return (const char *)&L->top[-1].u.i.v__.gc->u.uv.len;
}
// A85C00: using guessed type int __security_cookie;

//----- (00747860) --------------------------------------------------------
const char *__cdecl luaO_pushfstring(lua_State *L, const char *fmt)
{
  char argp; // [sp+10h] [bp+10h]@0

  return luaO_pushvfstring(L, fmt, &argp);
}

//----- (00747880) --------------------------------------------------------
void __cdecl luaO_chunkid(char *out, const char *source, unsigned int bufflen)
{
  int v3; // esi@1
  char *v4; // ebx@2
  int v5; // eax@9
  char *v6; // edi@9
  int v7; // edi@11
  int v8; // edi@16

  v3 = strlen(source);
  if ( *source == 61 )
  {
    v4 = (char *)(source + 1);
    if ( v3 > bufflen )
    {
      memcpy(out, v4, bufflen - 1);
      out[bufflen - 1] = 0;
    }
    else
    {
      memcpy(out, v4, v3);
    }
    return;
  }
  if ( *source != 64 )
  {
    strchr((char *)source, 10);
    *(_DWORD *)out = *(_DWORD *)"[string \"";
    *((_DWORD *)out + 1) = *(_DWORD *)"ing \"";
    out[8] = aString_2[8];
    v6 = out + 9;
    if ( v3 >= bufflen - 15 )
    {
      if ( !v5 )
      {
LABEL_14:
        if ( v3 > bufflen - 15 )
          v3 = bufflen - 15;
        memcpy(v6, (char *)source, v3);
        v8 = (int)&v6[v3];
        *(_WORD *)v8 = *(_WORD *)"...";
        *(_BYTE *)(v8 + 2) = a____1[2];
        v7 = v8 + 3;
        goto LABEL_17;
      }
    }
    else
    {
      if ( !v5 )
      {
        memcpy(v6, (char *)source, v3);
        v7 = (int)&v6[v3];
LABEL_17:
        *(_WORD *)v7 = *(_WORD *)"\"]";
        *(_BYTE *)(v7 + 2) = asc_9DD090[2];
        return;
      }
    }
    v3 = v5 - (_DWORD)source;
    goto LABEL_14;
  }
  if ( v3 > bufflen )
  {
    *(_WORD *)out = *(_WORD *)"...";
    out[2] = a____1[2];
    memcpy(out + 3, (char *)&source[v3 - (bufflen - 3) + 1], bufflen - 3);
  }
  else
  {
    memcpy(out, (char *)source + 1, v3);
  }
}

//----- (007479C0) --------------------------------------------------------
void __usercall seterrorobj(lua_State *L<edi>, int errcode<eax>, lua_TValue *oldtop<ecx>)
{
  int v3; // eax@1
  lua_TValue *v4; // esi@1
  lua_TValue *v5; // eax@3
  TString *v6; // eax@4
  TString *v7; // eax@5

  v3 = errcode - 4;
  v4 = oldtop;
  if ( v3 )
  {
    if ( v3 == 2 )
    {
      v6 = luaS_newlstr(L, "error in error handling", 0x17u);
      v4->u.i.v__.gc = (GCObject *)v6;
      v4->u.i.tt__ = BYTE4(v6->dummy.u) | 0x7FF7A540;
      L->top = v4 + 1;
    }
    else
    {
      v5 = L->top;
      oldtop->u.i.v__.gc = v5[-1].u.i.v__.gc;
      oldtop->u.i.tt__ = *((_DWORD *)v5 - 1);
      L->top = oldtop + 1;
    }
  }
  else
  {
    v7 = L->l_G->memerrmsg;
    oldtop->u.i.v__.gc = (GCObject *)v7;
    oldtop->u.i.tt__ = BYTE4(v7->dummy.u) | 0x7FF7A540;
    L->top = oldtop + 1;
  }
}

//----- (00747A30) --------------------------------------------------------
void __cdecl luaD_throw(lua_State *L, int errcode)
{
  lua_State *i; // eax@1
  global_State *v3; // edx@2
  lua_State *v4; // esi@3
  lua_TValue *v5; // edx@3
  lua_TValue *v6; // ecx@3
  int (__cdecl *v7)(lua_State *); // ecx@5

  for ( i = L; !i->errorJmp; i = i->l_G->mainthread )
  {
    v3 = i->l_G;
    i->status = errcode;
    if ( !v3->mainthread->errorJmp )
    {
      v7 = v3->panic;
      if ( v7 )
        v7(i);
      abort();
    }
    v4 = v3->mainthread;
    v5 = v4->top;
    v6 = i->top;
    v4->top = v5 + 1;
    v5->u.i.v__.gc = v6[-1].u.i.v__.gc;
    v5->u.i.tt__ = *((_DWORD *)v6 - 1);
  }
  i->errorJmp->status = errcode;
  longjmp(i->errorJmp->b, 1);
}

//----- (00747AB0) --------------------------------------------------------
int __cdecl luaD_rawrunprotected(lua_State *L, void (__cdecl *f)(lua_State *, void *), void *ud)
{
  int v3; // ebx@0
  int v4; // ebp@0
  int v5; // edi@0
  int v6; // esi@0
  void *v8; // [sp+0h] [bp-60h]@0
  void *v9; // [sp+4h] [bp-5Ch]@1
  int v10; // [sp+8h] [bp-58h]@1
  unsigned __int16 oldnCcalls; // [sp+Ch] [bp-54h]@1
  lua_longjmp lj; // [sp+14h] [bp-4Ch]@1
  unsigned int v13; // [sp+5Ch] [bp-4h]@1
  int v14; // [sp+60h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  oldnCcalls = L->nCcalls;
  lj.status = 0;
  lj.previous = L->errorJmp;
  L->errorJmp = &lj;
  if ( !_setjmp3(v3, v4, v5, v6, (int)lj.b, 0, v8, (int)ud, (char)L) )
    f((lua_State *)v10, v9);
  *(_DWORD *)(v10 + 64) = lj.previous;
  *(_WORD *)(v10 + 38) = oldnCcalls;
  return lj.status;
}
// A85C00: using guessed type int __security_cookie;

//----- (00747B30) --------------------------------------------------------
void __cdecl luaD_reallocstack(lua_State *L, int newsize)
{
  lua_State *v2; // esi@1
  void *v3; // eax@1
  int v4; // edi@1
  lua_TValue *v5; // eax@5
  lua_TValue *v6; // edi@5
  GCObject *v7; // eax@5
  CallInfo *i; // eax@7
  lua_TValue *oldstack; // [sp+14h] [bp+8h]@1

  v2 = L;
  v3 = L->stack;
  v4 = L->stacksize;
  oldstack = L->stack;
  if ( (unsigned int)(newsize + 1) > 0x1FFFFFFF )
    luaM_toobig(v2);
  for ( v2->stack = (lua_TValue *)luaM_realloc_(v2, v3, 8 * v4, 8 * newsize); v4 < newsize; ++v4 )
    v2->stack[v4].u.i.tt__ = 2146936064;
  v5 = v2->stack;
  v6 = v2->top;
  v2->stack_last = &v5[newsize - 5];
  v2->top = &v5[v6 - oldstack];
  v7 = v2->openupval;
  for ( v2->stacksize = newsize; v7; v7 = v7->gch.next )
    v7->ts.tsv.hash = (unsigned int)&v2->stack[(signed int)(v7->ts.tsv.hash - (signed int)oldstack) >> 3];
  for ( i = v2->ci; i; i = i->previous )
  {
    i->top = &v2->stack[i->top - oldstack];
    i->func = &v2->stack[i->func - oldstack];
    if ( i->callstatus & 1 )
      i->u.l.base = &v2->stack[i->u.l.base - oldstack];
  }
}

//----- (00747C20) --------------------------------------------------------
void __cdecl luaD_growstack(lua_State *L, int n)
{
  int v2; // eax@1
  int v3; // eax@3

  v2 = L->stacksize;
  if ( v2 > 1000000 )
    luaD_throw(L, 6);
  v3 = 2 * v2;
  if ( v3 > 1000000 )
    v3 = 1000000;
  if ( v3 < (signed int)(L->top - L->stack + n + 5) )
    v3 = L->top - L->stack + n + 5;
  if ( v3 > 1000000 )
  {
    luaD_reallocstack(L, 1000200);
    luaG_runerror(L, "stack overflow");
  }
  luaD_reallocstack(L, v3);
}

//----- (00747C90) --------------------------------------------------------
void __cdecl luaD_shrinkstack(lua_State *L)
{
  CallInfo *v1; // ecx@1
  lua_TValue *i; // eax@1
  int v3; // ecx@5
  __int64 v4; // qax@5
  int v5; // eax@5

  v1 = L->ci;
  for ( i = L->top; v1; v1 = v1->previous )
  {
    if ( i < v1->top )
      i = v1->top;
  }
  v3 = i - L->stack + 1;
  v4 = i - L->stack + 1;
  v5 = (((BYTE4(v4) & 7) + (signed int)v4) >> 3) + v3 + 10;
  if ( v5 > 1000000 )
    v5 = 1000000;
  if ( v3 <= 1000000 )
  {
    if ( v5 < L->stacksize )
      luaD_reallocstack(L, v5);
  }
}

//----- (00747CF0) --------------------------------------------------------
void __cdecl luaD_hook(lua_State *L, int event, int line)
{
  lua_TValue *v3; // eax@3
  lua_TValue *v4; // ecx@3
  CallInfo *v5; // edi@3
  int v6; // edx@3
  int v7; // ebx@3
  unsigned int v8; // ecx@3
  char *v9; // ecx@5
  void (__cdecl *hook)(lua_State *, lua_Debug *); // [sp+4h] [bp-70h]@1
  int ci_top; // [sp+8h] [bp-6Ch]@3
  lua_Debug ar; // [sp+Ch] [bp-68h]@3
  unsigned int v13; // [sp+70h] [bp-4h]@1
  int v14; // [sp+74h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  hook = L->hook;
  if ( hook && L->allowhook )
  {
    v3 = L->top;
    v4 = L->stack;
    v5 = L->ci;
    v6 = (char *)v5->top - (char *)v4;
    v7 = (char *)v3 - (char *)v4;
    ar.event = event;
    ci_top = v6;
    v8 = (unsigned int)((char *)L->stack_last - (char *)v3) & 0xFFFFFFF8;
    ar.currentline = line;
    ar.i_ci = v5;
    if ( (signed int)v8 <= 160 )
      luaD_growstack(L, 20);
    v5->top = L->top + 20;
    L->allowhook = 0;
    v5->callstatus |= 2u;
    hook(L, &ar);
    v9 = (char *)L->stack + ci_top;
    L->allowhook = 1;
    v5->top = (lua_TValue *)v9;
    L->top = (lua_TValue *)((char *)L->stack + v7);
    v5->callstatus &= 0xFDu;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00747DB0) --------------------------------------------------------
lua_TValue *__usercall tryfuncTM<eax>(lua_State *L<esi>, lua_TValue *func<edi>)
{
  lua_TValue *v2; // ebx@1
  unsigned int v3; // ecx@1
  lua_TValue *v4; // eax@3
  int v5; // ecx@4
  lua_TValue *v6; // eax@7
  int v7; // ecx@8
  int v8; // ecx@10
  int v9; // eax@10
  lua_TValue *result; // eax@18
  unsigned int funcr; // [sp+4h] [bp-4h]@1

  v2 = luaT_gettmbyobj(L, func, TM_CALL);
  v3 = (char *)func - (char *)L->stack;
  funcr = (char *)func - (char *)L->stack;
  if ( (v2->u.i.tt__ | 0x70) != 2146936182 )
    luaG_typeerror(L, func, "call");
  v4 = L->top;
  if ( v4 > func )
  {
    v5 = (int)&v4[-1];
    do
    {
      v4->u.i.v__.gc = *(GCObject **)v5;
      v4->u.i.tt__ = *(_DWORD *)(v5 + 4);
      --v4;
      v5 -= 8;
    }
    while ( v4 > func );
    v3 = funcr;
  }
  ++L->top;
  v6 = L->top;
  if ( (signed int)((unsigned int)((char *)L->stack_last - (char *)v6) & 0xFFFFFFF8) <= 0 )
  {
    v7 = L->stacksize;
    if ( v7 > 1000000 )
      luaD_throw(L, 6);
    v8 = 2 * v7;
    v9 = v6 - L->stack + 5;
    if ( v8 > 1000000 )
      v8 = 1000000;
    if ( v8 < v9 )
      v8 = v9;
    if ( v8 > 1000000 )
    {
      luaD_reallocstack(L, 1000200);
      luaG_runerror(L, "stack overflow");
    }
    luaD_reallocstack(L, v8);
    v3 = funcr;
  }
  result = (lua_TValue *)((char *)L->stack + v3);
  result->u.i.v__.gc = v2->u.i.v__.gc;
  result->u.i.tt__ = v2->u.i.tt__;
  return result;
}

//----- (00747E90) --------------------------------------------------------
int __cdecl luaD_poscall(lua_State *L, lua_TValue *firstResult)
{
  lua_State *v2; // esi@1
  char v3; // al@1
  CallInfo *v4; // ebx@1
  unsigned int v5; // edi@3
  lua_TValue *v6; // edx@3
  int v7; // edi@6
  lua_TValue *v8; // eax@6
  int v9; // ecx@6
  lua_TValue *v10; // edi@7
  lua_TValue *v11; // esi@9
  int v12; // edx@9
  int wanted; // [sp+Ch] [bp-4h]@6

  v2 = L;
  v3 = L->hookmask;
  v4 = L->ci;
  if ( v3 & 6 )
  {
    if ( v3 & 2 )
    {
      v5 = (char *)firstResult - (char *)L->stack;
      luaD_hook(L, 1, -1);
      v6 = (lua_TValue *)((char *)L->stack + v5);
      L->oldpc = v4->previous->u.l.savedpc;
    }
    else
    {
      v6 = firstResult;
      L->oldpc = v4->previous->u.l.savedpc;
    }
  }
  else
  {
    v6 = firstResult;
  }
  v7 = v4->nresults;
  v8 = v4->func;
  L->ci = v4->previous;
  wanted = v7;
  v9 = v7;
  if ( v7 )
  {
    v10 = v6;
    do
    {
      if ( v10 >= v2->top )
        break;
      v11 = v8;
      v8->u.i.v__.gc = v10->u.i.v__.gc;
      v12 = v10->u.i.tt__;
      ++v8;
      ++v10;
      --v9;
      v11->u.i.tt__ = v12;
      v2 = L;
    }
    while ( v9 );
    v7 = wanted;
  }
  for ( ; v9 > 0; ++v8 )
  {
    --v9;
    v8->u.i.tt__ = 2146936064;
  }
  v2->top = v8;
  return v7 + 1;
}

//----- (00747F40) --------------------------------------------------------
void __cdecl unroll(lua_State *L, void *ud)
{
  CallInfo *v2; // eax@2
  char v3; // cl@3
  CallInfo *v4; // ecx@6
  lua_TValue *v5; // edx@6
  char v6; // cl@8
  const unsigned int *v7; // edx@10
  int v8; // eax@10

  while ( L->ci != &L->base_ci )
  {
    v2 = L->ci;
    if ( v2->callstatus & 1 )
    {
      luaV_finishOp(L);
      luaV_execute(L);
    }
    else
    {
      v3 = v2->callstatus;
      if ( v3 & 0x10 )
      {
        v2->callstatus = v3 & 0xEF;
        L->errfunc = v2->u.c.old_errfunc;
      }
      if ( v2->nresults == -1 )
      {
        v4 = L->ci;
        v5 = L->top;
        if ( v4->top < v5 )
          v4->top = v5;
      }
      v6 = v2->callstatus;
      if ( !(v6 & 0x20) )
        v2->u.c.status = 1;
      v7 = v2->u.l.savedpc;
      v2->callstatus = v6 & 0xCF | 8;
      v8 = ((int (__cdecl *)(_DWORD))v7)(L);
      luaD_poscall(L, &L->top[-v8]);
    }
  }
}

//----- (00747FD0) --------------------------------------------------------
int __usercall recover<eax>(lua_State *L<eax>, int status)
{
  lua_State *v2; // edi@1
  CallInfo *v3; // esi@1
  int result; // eax@4
  lua_TValue *v5; // ebx@5

  v2 = L;
  v3 = L->ci;
  if ( v3 )
  {
    while ( !(v3->callstatus & 0x10) )
    {
      v3 = v3->previous;
      if ( !v3 )
        goto LABEL_4;
    }
    v5 = (lua_TValue *)((char *)L->stack + v3->extra);
    luaF_close(L, (lua_TValue *)((char *)L->stack + v3->extra));
    seterrorobj(v2, status, v5);
    v2->ci = v3;
    v2->allowhook = v3->u.c.old_allowhook;
    v2->nny = 0;
    luaD_shrinkstack(v2);
    v2->errfunc = v3->u.c.old_errfunc;
    v3->callstatus |= 0x20u;
    v3->u.c.status = status;
    result = 1;
  }
  else
  {
LABEL_4:
    result = 0;
  }
  return result;
}

//----- (00748040) --------------------------------------------------------
void __usercall resume_error(lua_State *L<esi>, const char *msg<eax>, lua_TValue *firstArg<edi>)
{
  TString *v3; // eax@1

  L->top = firstArg;
  v3 = luaS_new(L, msg);
  firstArg->u.i.v__.gc = (GCObject *)v3;
  firstArg->u.i.tt__ = BYTE4(v3->dummy.u) | 0x7FF7A540;
  ++L->top;
  luaD_throw(L, -1);
}

//----- (00748070) --------------------------------------------------------
int __cdecl lua_yieldk(lua_State *L, int nresults, int ctx, int (__cdecl *k)(lua_State *))
{
  CallInfo *v4; // ecx@1
  bool v5; // zf@5

  v4 = L->ci;
  if ( L->nny )
  {
    if ( L != L->l_G->mainthread )
      luaG_runerror(L, "attempt to yield across a C-call boundary");
    luaG_runerror(L, "attempt to yield from outside a coroutine");
  }
  L->status = 1;
  v5 = (v4->callstatus & 1) == 0;
  v4->extra = (char *)v4->func - (char *)L->stack;
  if ( v5 )
  {
    v4->u.l.savedpc = (const unsigned int *)k;
    if ( k )
      v4->u.l.base = (lua_TValue *)ctx;
    v4->func = &L->top[-nresults - 1];
    luaD_throw(L, 1);
  }
  return 0;
}

//----- (007480F0) --------------------------------------------------------
int __cdecl luaD_pcall(lua_State *L, void (__cdecl *func)(lua_State *, void *), void *u, int old_top, int ef)
{
  lua_State *v5; // edi@1
  unsigned __int16 v6; // dx@1
  CallInfo *v7; // eax@1
  int v8; // esi@1
  int result; // eax@1
  int v10; // ebx@1
  lua_TValue *v11; // esi@2
  int old_errfunc; // [sp+Ch] [bp-Ch]@1
  unsigned __int16 old_nny; // [sp+10h] [bp-8h]@1
  CallInfo *old_ci; // [sp+14h] [bp-4h]@1
  char old_allowhooks_3; // [sp+23h] [bp+Bh]@1

  v5 = L;
  v6 = L->nny;
  v7 = L->ci;
  v8 = L->errfunc;
  old_allowhooks_3 = L->allowhook;
  old_nny = v6;
  old_ci = v7;
  old_errfunc = v8;
  v5->errfunc = ef;
  result = luaD_rawrunprotected(v5, func, u);
  v10 = result;
  if ( result )
  {
    v11 = (lua_TValue *)((char *)v5->stack + old_top);
    luaF_close(v5, (lua_TValue *)((char *)v5->stack + old_top));
    seterrorobj(v5, v10, v11);
    v5->ci = old_ci;
    v5->allowhook = old_allowhooks_3;
    v5->nny = old_nny;
    luaD_shrinkstack(v5);
    v5->errfunc = old_errfunc;
    result = v10;
  }
  else
  {
    v5->errfunc = v8;
  }
  return result;
}

//----- (00748180) --------------------------------------------------------
void __cdecl f_parser(lua_State *L, void *ud)
{
  int v2; // ecx@1
  int v3; // eax@1
  int *v4; // ecx@2
  int v5; // ebx@2
  char *v6; // edi@4
  int v7; // eax@6
  Closure *v8; // eax@9
  int v9; // eax@11
  Closure *v10; // esi@15
  signed int v11; // ebx@15
  int v12; // edi@16
  UpVal *v13; // eax@17

  v2 = **(_DWORD **)ud;
  **(_DWORD **)ud = v2 - 1;
  v3 = *(_DWORD *)ud;
  if ( v2 )
  {
    v4 = *(int **)(v3 + 4);
    v5 = *(_BYTE *)v4;
    *(_DWORD *)(v3 + 4) = (char *)v4 + 1;
  }
  else
  {
    v5 = luaZ_fill(*(Zio **)ud);
  }
  v6 = (char *)*((_DWORD *)ud + 13);
  if ( v5 == 27 )
  {
    if ( v6 )
    {
      strchr(v6, 98);
      if ( !v7 )
      {
        luaO_pushfstring(L, "attempt to load a %s chunk (mode is '%s')");
        luaD_throw(L, 3);
      }
    }
    v8 = luaU_undump(L, *(Zio **)ud, (Mbuffer *)((char *)ud + 4), *((const char **)ud + 14));
  }
  else
  {
    if ( v6 )
    {
      strchr(v6, 116);
      if ( !v9 )
      {
        luaO_pushfstring(L, "attempt to load a %s chunk (mode is '%s')");
        luaD_throw(L, 3);
      }
    }
    v8 = luaY_parser(
           L,
           *(Zio **)ud,
           (Mbuffer *)((char *)ud + 4),
           (Dyndata *)((char *)ud + 16),
           *((const char **)ud + 14),
           v5);
  }
  v10 = v8;
  v11 = 0;
  if ( v8->c.nupvalues )
  {
    v12 = (int)v8->c.upvalue;
    do
    {
      v13 = luaF_newupval(L);
      *(_DWORD *)v12 = v13;
      if ( v13->marked & 3 && v10->c.marked & 4 )
        luaC_barrier_(L, (GCObject *)&v10->c.next, (GCObject *)&v13->next);
      ++v11;
      v12 += 4;
    }
    while ( v11 < v10->c.nupvalues );
  }
}

//----- (007482A0) --------------------------------------------------------
int __cdecl luaD_protectedparser(lua_State *L, Zio *z, const char *name, const char *mode)
{
  lua_State *v4; // esi@1
  int v5; // ecx@1
  int v6; // ST40_4@1
  int v7; // ebx@1
  SParser p; // [sp+Ch] [bp-3Ch]@1

  v4 = L;
  ++v4->nny;
  p.name = name;
  v5 = (char *)v4->top - (char *)v4->stack;
  p.z = z;
  v6 = L->errfunc;
  p.mode = mode;
  p.dyd.actvar.arr = 0;
  p.dyd.actvar.size = 0;
  p.dyd.gt.arr = 0;
  p.dyd.gt.size = 0;
  p.dyd.label.arr = 0;
  p.dyd.label.size = 0;
  p.buff.buffer = 0;
  p.buff.buffsize = 0;
  v7 = luaD_pcall(L, f_parser, &p, v5, v6);
  p.buff.buffer = (char *)luaM_realloc_(L, p.buff.buffer, p.buff.buffsize, 0);
  p.buff.buffsize = 0;
  luaM_realloc_(L, p.dyd.actvar.arr, 2 * p.dyd.actvar.size, 0);
  luaM_realloc_(L, p.dyd.gt.arr, 16 * p.dyd.gt.size, 0);
  luaM_realloc_(L, p.dyd.label.arr, 16 * p.dyd.label.size, 0);
  --v4->nny;
  return v7;
}

//----- (00748360) --------------------------------------------------------
int __cdecl luaD_precall(lua_State *L, lua_TValue *func, int nresults)
{
  lua_TValue *v3; // eax@1
  lua_State *v4; // esi@1
  int v5; // ecx@2
  unsigned int v6; // edi@2
  int v7; // ecx@4
  GCObject *v8; // ebx@8
  CallInfo *v9; // eax@12
  int v10; // eax@18
  unsigned int v12; // ebx@19
  char *v13; // ecx@21
  int v14; // eax@21
  int v15; // edi@25
  lua_TValue *v16; // eax@25
  lua_TValue *v17; // ecx@26
  CallInfo *v18; // edi@28
  CallInfo *v19; // eax@29
  int v20; // edx@30
  int v21; // ecx@30
  global_State *v22; // edx@30
  CallInfo *v23; // eax@33
  int v24; // ecx@33
  lua_TValue *base; // [sp+14h] [bp+8h]@24
  char *funca; // [sp+18h] [bp+Ch]@21

  v3 = func;
  v4 = L;
  while ( 1 )
  {
    v5 = v3->u.i.tt__;
    v6 = (char *)v3 - (char *)L->stack;
    if ( (v3->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
      LOBYTE(v5) = 3;
    v7 = v5 & 0x3F;
    if ( v7 == 6 )
      break;
    if ( v7 == 22 )
    {
      v8 = v3->u.i.v__.gc;
      goto Cfunc;
    }
    if ( v7 == 38 )
    {
      v8 = (GCObject *)v3->u.i.v__.gc->ts.tsv.len;
Cfunc:
      if ( (signed int)(((char *)L->stack_last - (char *)L->top) & 0xFFFFFFF8) <= 160 )
        luaD_growstack(L, 20);
      v9 = L->ci->next;
      if ( !v9 )
        v9 = luaE_extendCI(L);
      L->ci = v9;
      v9->nresults = nresults;
      v9->func = (lua_TValue *)((char *)L->stack + v6);
      v9->top = L->top + 20;
      v9->callstatus = 0;
      if ( L->l_G->GCdebt > 0 )
        luaC_step(L);
      if ( L->hookmask & 1 )
        luaD_hook(L, 0, -1);
      v10 = ((int (__cdecl *)(lua_State *))v8)(L);
      luaD_poscall(L, &L->top[-v10]);
      return 1;
    }
    v3 = tryfuncTM(L, v3);
  }
  v12 = v3->u.i.v__.gc->ts.tsv.len;
  if ( (signed int)(L->stack_last - L->top) <= *(_BYTE *)(v12 + 78) )
    luaD_growstack(L, *(_BYTE *)(v12 + 78));
  v13 = (char *)L->stack + v6;
  v14 = ((signed int)((char *)L->top - v13) >> 3) - 1;
  for ( funca = (char *)L->stack + v6; v14 < *(_BYTE *)(v12 + 76); ++v14 )
  {
    L->top->u.i.tt__ = 2146936064;
    ++L->top;
  }
  if ( *(_BYTE *)(v12 + 77) )
  {
    v15 = *(_BYTE *)(v12 + 76);
    v16 = &L->top[-v14];
    base = L->top;
    if ( v15 > 0 )
    {
      do
      {
        v17 = v4->top;
        v4->top = v17 + 1;
        v17->u.i.v__.gc = v16->u.i.v__.gc;
        v17->u.i.tt__ = v16->u.i.tt__;
        v16->u.i.tt__ = 2146936064;
        ++v16;
        --v15;
      }
      while ( v15 );
    }
    v13 = funca;
  }
  else
  {
    base = (lua_TValue *)(v13 + 8);
  }
  v18 = v4->ci->next;
  if ( !v18 )
  {
    v19 = luaE_extendCI(v4);
    v13 = funca;
    v18 = v19;
  }
  v4->ci = v18;
  v18->nresults = nresults;
  v18->func = (lua_TValue *)v13;
  v18->u.l.base = base;
  v20 = (int)&base[*(_BYTE *)(v12 + 78)];
  v18->top = (lua_TValue *)v20;
  v18->u.l.savedpc = *(const unsigned int **)(v12 + 12);
  v18->callstatus = 1;
  v21 = v20;
  v22 = v4->l_G;
  v4->top = (lua_TValue *)v21;
  if ( v22->GCdebt > 0 )
    luaC_step(v4);
  if ( v4->hookmask & 1 )
  {
    v23 = v18->previous;
    ++v18->u.l.savedpc;
    v24 = 0;
    if ( v23->callstatus & 1 && (*((_BYTE *)v23->u.l.savedpc - 4) & 0x3F) == 30 )
    {
      v18->callstatus |= 0x40u;
      v24 = 4;
    }
    luaD_hook(v4, v24, -1);
    --v18->u.l.savedpc;
  }
  return 0;
}

//----- (007485A0) --------------------------------------------------------
void __cdecl luaD_call(lua_State *L, lua_TValue *func, int nResults, int allowyield)
{
  unsigned __int16 v4; // ax@1

  ++L->nCcalls;
  v4 = L->nCcalls;
  if ( v4 >= 0xC8u )
  {
    if ( v4 == 200 )
      luaG_runerror(L, "C stack overflow");
    if ( v4 >= 0xE1u )
      luaD_throw(L, 6);
  }
  if ( !allowyield )
    ++L->nny;
  if ( !luaD_precall(L, func, nResults) )
    luaV_execute(L);
  if ( !allowyield )
    --L->nny;
  --L->nCcalls;
}

//----- (00748630) --------------------------------------------------------
void __cdecl resume(lua_State *L, void *ud)
{
  CallInfo *v2; // eax@1
  void *v3; // edx@1
  char v4; // cl@3
  char *v5; // ecx@10
  const unsigned int *v6; // edi@12

  v2 = L->ci;
  v3 = ud;
  if ( L->nCcalls >= 0xC8u )
    resume_error(L, "C stack overflow", (lua_TValue *)ud);
  v4 = L->status;
  if ( v4 )
  {
    if ( v4 != 1 )
      resume_error(L, "cannot resume dead coroutine", (lua_TValue *)ud);
    L->status = 0;
    v5 = (char *)L->stack + v2->extra;
    v2->func = (lua_TValue *)v5;
    LOBYTE(v5) = v2->callstatus;
    if ( (unsigned __int8)v5 & 1 )
    {
      luaV_execute(L);
      unroll(L, 0);
    }
    else
    {
      v6 = v2->u.l.savedpc;
      if ( v6 )
      {
        LOBYTE(v5) = (unsigned __int8)v5 | 8;
        v2->u.c.status = 1;
        v2->callstatus = (char)v5;
        v3 = &L->top[-((int (__fastcall *)(_DWORD, _DWORD))v6)(v5, ud)];
      }
      luaD_poscall(L, (lua_TValue *)v3);
      unroll(L, 0);
    }
  }
  else
  {
    if ( v2 != &L->base_ci )
      resume_error(L, "cannot resume non-suspended coroutine", (lua_TValue *)ud);
    if ( !luaD_precall(L, (lua_TValue *)ud - 1, -1) )
      luaV_execute(L);
  }
}

//----- (00748710) --------------------------------------------------------
int __cdecl lua_resume(lua_State *L, lua_State *from, int nargs)
{
  unsigned __int16 v3; // ax@2
  int v4; // eax@4
  signed int v5; // ebx@4
  lua_TValue *v6; // ecx@11

  if ( from )
    v3 = from->nCcalls + 1;
  else
    v3 = 1;
  L->nCcalls = v3;
  L->nny = 0;
  v4 = luaD_rawrunprotected(L, resume, &L->top[-nargs]);
  v5 = v4;
  if ( v4 == -1 )
  {
    v5 = 2;
  }
  else
  {
    if ( v4 )
    {
      while ( v5 != 1 )
      {
        if ( !recover(L, v5) )
        {
          v6 = L->top;
          L->status = v5;
          seterrorobj(L, v5, v6);
          L->ci->top = L->top;
          break;
        }
        v5 = luaD_rawrunprotected(L, unroll, 0);
        if ( !v5 )
          break;
      }
    }
  }
  --L->nCcalls;
  L->nny = 1;
  return v5;
}

//----- (007487C0) --------------------------------------------------------
void __cdecl luaC_barrierback_(lua_State *L, GCObject *o)
{
  global_State *v2; // ecx@1

  v2 = L->l_G;
  o->gch.marked &= 0xFBu;
  o->h.gclist = v2->grayagain;
  v2->grayagain = o;
}

//----- (007487E0) --------------------------------------------------------
GCObject *__cdecl luaC_newobj(lua_State *L, int tt, unsigned int sz, GCObject **list, int offset)
{
  global_State *v5; // esi@1
  void *v6; // eax@1
  GCObject **v7; // ecx@1
  GCObject *result; // eax@1
  char v9; // dl@3

  v5 = L->l_G;
  v6 = luaM_realloc_(L, 0, tt & 0xF, sz);
  v7 = list;
  result = (GCObject *)((char *)v6 + offset);
  if ( !list )
    v7 = &v5->allgc;
  v9 = v5->currentwhite & 3;
  result->gch.tt = tt;
  result->gch.marked = v9;
  result->gch.next = *v7;
  *v7 = result;
  return result;
}

//----- (00748830) --------------------------------------------------------
void __cdecl reallymarkobject(global_State *g, GCObject *o)
{
  int v2; // eax@1
  unsigned int v3; // eax@2
  unsigned int v4; // eax@3
  unsigned int v5; // eax@6
  unsigned int v6; // eax@9
  unsigned int v7; // ecx@10
  int v8; // eax@10
  int v9; // ecx@13

  v2 = o->gch.tt;
  o->gch.marked &= 0xFCu;
  switch ( v2 )
  {
    case 4:
    case 20:
      v3 = o->ts.tsv.len;
      o->gch.marked |= 4u;
      g->GCmemtrav += v3 + 17;
      break;
    case 7:
      v4 = o->ts.tsv.hash;
      if ( v4 && *(_BYTE *)(v4 + 5) & 3 )
        reallymarkobject(g, (GCObject *)o->ts.tsv.hash);
      v5 = o->ts.tsv.len;
      if ( v5 )
      {
        if ( *(_BYTE *)(v5 + 5) & 3 )
          reallymarkobject(g, (GCObject *)o->ts.tsv.len);
      }
      v6 = o->u.uv.len;
      o->gch.marked |= 4u;
      g->GCmemtrav += v6 + 24;
      break;
    case 10:
      v7 = o->ts.tsv.hash;
      v8 = *(_DWORD *)(v7 + 4);
      if ( (*(_DWORD *)(v7 + 4) & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v8) = 3;
      if ( v8 & 0x40 )
      {
        v9 = *(_DWORD *)v7;
        if ( *(_BYTE *)(v9 + 5) & 3 )
          reallymarkobject(g, (GCObject *)v9);
      }
      if ( (unsigned int *)o->ts.tsv.hash == &o->u.uv.len )
      {
        o->gch.marked |= 4u;
        g->GCmemtrav += 24;
      }
      break;
    case 6:
      o->ts.tsv.hash = (unsigned int)g->gray;
      g->gray = o;
      break;
    case 38:
      o->ts.tsv.hash = (unsigned int)g->gray;
      g->gray = o;
      break;
    case 5:
      o->h.gclist = g->gray;
      g->gray = o;
      break;
    case 8:
      o->p.sizelocvars = (int)g->gray;
      g->gray = o;
      break;
    case 9:
      o->p.gclist = g->gray;
      g->gray = o;
      break;
    default:
      return;
  }
}

//----- (00748990) --------------------------------------------------------
void __usercall markmt(global_State *g<edi>)
{
  int v1; // esi@2
  int v2; // eax@4
  int v3; // eax@5
  int v4; // eax@6
  int v5; // eax@9
  int v6; // eax@12
  int v7; // ecx@13
  int v8; // eax@13
  int v9; // ecx@16
  signed int v10; // [sp+8h] [bp-8h]@1
  char *v11; // [sp+Ch] [bp-4h]@1

  v11 = (char *)g->mt;
  v10 = 9;
  do
  {
    v1 = *(_DWORD *)v11;
    if ( *(_DWORD *)v11 && *(_BYTE *)(v1 + 5) & 3 )
    {
      v2 = *(_BYTE *)(v1 + 4);
      *(_BYTE *)(v1 + 5) &= 0xFCu;
      switch ( v2 )
      {
        case 4:
        case 20:
          v3 = *(_DWORD *)(v1 + 12);
          *(_BYTE *)(v1 + 5) |= 4u;
          g->GCmemtrav += v3 + 17;
          break;
        case 7:
          v4 = *(_DWORD *)(v1 + 8);
          if ( v4 && *(_BYTE *)(v4 + 5) & 3 )
            reallymarkobject(g, *(GCObject **)(v1 + 8));
          v5 = *(_DWORD *)(v1 + 12);
          if ( v5 )
          {
            if ( *(_BYTE *)(v5 + 5) & 3 )
              reallymarkobject(g, *(GCObject **)(v1 + 12));
          }
          v6 = *(_DWORD *)(v1 + 16);
          *(_BYTE *)(v1 + 5) |= 4u;
          g->GCmemtrav += v6 + 24;
          break;
        case 10:
          v7 = *(_DWORD *)(v1 + 8);
          v8 = *(_DWORD *)(v7 + 4);
          if ( (*(_DWORD *)(v7 + 4) & 0x7FFFFF00) != 2146936064 )
            LOBYTE(v8) = 3;
          if ( v8 & 0x40 )
          {
            v9 = *(_DWORD *)v7;
            if ( *(_BYTE *)(v9 + 5) & 3 )
              reallymarkobject(g, (GCObject *)v9);
          }
          if ( *(_DWORD *)(v1 + 8) == v1 + 16 )
          {
            *(_BYTE *)(v1 + 5) |= 4u;
            g->GCmemtrav += 24;
          }
          break;
        case 6:
          *(_DWORD *)(v1 + 8) = g->gray;
          goto LABEL_25;
        case 38:
          *(_DWORD *)(v1 + 8) = g->gray;
          goto LABEL_25;
        case 5:
          *(_DWORD *)(v1 + 24) = g->gray;
          goto LABEL_25;
        case 8:
          *(_DWORD *)(v1 + 60) = g->gray;
          goto LABEL_25;
        case 9:
          *(_DWORD *)(v1 + 72) = g->gray;
LABEL_25:
          g->gray = (GCObject *)v1;
          break;
        default:
          break;
      }
    }
    v11 += 4;
    --v10;
  }
  while ( v10 );
}

//----- (00748B10) --------------------------------------------------------
void __usercall markbeingfnz(global_State *g<edi>)
{
  GCObject *i; // esi@1
  int v2; // eax@2
  unsigned int v3; // eax@3
  unsigned int v4; // eax@4
  unsigned int v5; // eax@7
  unsigned int v6; // eax@10
  unsigned int v7; // ecx@11
  int v8; // eax@11
  int v9; // ecx@14

  for ( i = g->tobefnz; i; i = i->gch.next )
  {
    v2 = i->gch.tt;
    i->gch.marked &= 0xB8u;
    switch ( v2 )
    {
      case 4:
      case 20:
        v3 = i->ts.tsv.len;
        i->gch.marked |= 4u;
        g->GCmemtrav += v3 + 17;
        continue;
      case 7:
        v4 = i->ts.tsv.hash;
        if ( v4 && *(_BYTE *)(v4 + 5) & 3 )
          reallymarkobject(g, (GCObject *)i->ts.tsv.hash);
        v5 = i->ts.tsv.len;
        if ( v5 )
        {
          if ( *(_BYTE *)(v5 + 5) & 3 )
            reallymarkobject(g, (GCObject *)i->ts.tsv.len);
        }
        v6 = i->u.uv.len;
        i->gch.marked |= 4u;
        g->GCmemtrav += v6 + 24;
        continue;
      case 10:
        v7 = i->ts.tsv.hash;
        v8 = *(_DWORD *)(v7 + 4);
        if ( (*(_DWORD *)(v7 + 4) & 0x7FFFFF00) != 2146936064 )
          LOBYTE(v8) = 3;
        if ( v8 & 0x40 )
        {
          v9 = *(_DWORD *)v7;
          if ( *(_BYTE *)(v9 + 5) & 3 )
            reallymarkobject(g, (GCObject *)v9);
        }
        if ( (unsigned int *)i->ts.tsv.hash == &i->u.uv.len )
        {
          i->gch.marked |= 4u;
          g->GCmemtrav += 24;
        }
        continue;
      case 6:
        i->ts.tsv.hash = (unsigned int)g->gray;
        goto LABEL_23;
      case 38:
        i->ts.tsv.hash = (unsigned int)g->gray;
        goto LABEL_23;
      case 5:
        i->h.gclist = g->gray;
        goto LABEL_23;
      case 8:
        i->p.sizelocvars = (int)g->gray;
        goto LABEL_23;
      case 9:
        i->p.gclist = g->gray;
LABEL_23:
        g->gray = i;
        break;
      default:
        continue;
    }
  }
}

//----- (00748C70) --------------------------------------------------------
void __usercall remarkupvals(global_State *g<edi>)
{
  int i; // esi@1
  int v2; // ecx@3
  int v3; // eax@3
  int v4; // ecx@6

  for ( i = g->uvhead.u.value.u.i.tt__; (UpVal *)i != &g->uvhead; i = *(_DWORD *)(i + 20) )
  {
    if ( !(*(_BYTE *)(i + 5) & 7) )
    {
      v2 = *(_DWORD *)(i + 8);
      v3 = *(_DWORD *)(v2 + 4);
      if ( (*(_DWORD *)(v2 + 4) & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v3) = 3;
      if ( v3 & 0x40 )
      {
        v4 = *(_DWORD *)v2;
        if ( *(_BYTE *)(v4 + 5) & 3 )
          reallymarkobject(g, (GCObject *)v4);
      }
    }
  }
}

//----- (00748CD0) --------------------------------------------------------
void __usercall restartcollection(global_State *g<eax>)
{
  global_State *v1; // edi@1
  lua_State *v2; // eax@1
  int v3; // eax@4

  v1 = g;
  v2 = g->mainthread;
  v1->grayagain = 0;
  v1->gray = 0;
  v1->ephemeron = 0;
  v1->allweak = 0;
  v1->weak = 0;
  if ( v2 && v2->marked & 3 )
    reallymarkobject(v1, (GCObject *)&v2->next);
  v3 = v1->l_registry.u.i.tt__;
  if ( (v1->l_registry.u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v3) = 3;
  if ( v3 & 0x40 && v1->l_registry.u.i.v__.gc->gch.marked & 3 )
    reallymarkobject(v1, v1->l_registry.u.i.v__.gc);
  markmt(v1);
  markbeingfnz(v1);
}

//----- (00748D40) --------------------------------------------------------
void __usercall traversestrongtable(Table *h<eax>, global_State *g)
{
  Table *v2; // esi@1
  int v3; // edi@1
  int v4; // ecx@2
  int v5; // eax@2
  int v6; // ecx@5
  Node *i; // esi@8
  int v8; // eax@9
  int v9; // ecx@9
  int v10; // eax@20
  Node *limit; // [sp+Ch] [bp-4h]@1

  v2 = h;
  v3 = 0;
  for ( limit = &h->node[1 << h->lsizenode]; v3 < v2->sizearray; ++v3 )
  {
    v4 = (int)&v2->array[v3];
    v5 = *(_DWORD *)(v4 + 4);
    if ( (*(_DWORD *)(v4 + 4) & 0x7FFFFF00) != 2146936064 )
      LOBYTE(v5) = 3;
    if ( v5 & 0x40 )
    {
      v6 = *(_DWORD *)v4;
      if ( *(_BYTE *)(v6 + 5) & 3 )
        reallymarkobject(g, (GCObject *)v6);
    }
  }
  for ( i = v2->node; i < limit; ++i )
  {
    v8 = i->i_key.nk.u.i.tt__;
    v9 = i->i_key.nk.u.i.tt__ & 0x7FFFFF00;
    if ( i->i_val.u.i.tt__ == 2146936064 )
    {
      if ( v9 != 2146936064 )
        LOBYTE(v8) = 3;
      if ( v8 & 0x40 )
      {
        if ( i->i_key.nk.u.i.v__.gc->gch.marked & 3 )
          i->i_key.nk.u.i.tt__ = 2146936075;
      }
    }
    else
    {
      if ( v9 != 2146936064 )
        LOBYTE(v8) = 3;
      if ( v8 & 0x40 && i->i_key.nk.u.i.v__.gc->gch.marked & 3 )
        reallymarkobject(g, i->i_key.nk.u.i.v__.gc);
      v10 = i->i_val.u.i.tt__;
      if ( (i->i_val.u.i.tt__ & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v10) = 3;
      if ( v10 & 0x40 && i->i_val.u.i.v__.gc->gch.marked & 3 )
        reallymarkobject(g, i->i_val.u.i.v__.gc);
    }
  }
}

//----- (00748E70) --------------------------------------------------------
int __usercall traverseproto<eax>(Proto *f<esi>, global_State *g)
{
  Closure *v2; // eax@1
  TString *v3; // eax@4
  global_State *v4; // ebx@6
  int i; // edi@8
  lua_TValue *v6; // ecx@9
  int v7; // eax@9
  GCObject *v8; // ecx@12
  int j; // edi@15
  TString *v10; // eax@16
  int k; // edi@20
  Proto **v12; // ecx@21
  Proto *v13; // eax@22
  int v14; // ebx@25
  int v15; // edi@26
  LocVar *v16; // edx@27
  TString *v17; // eax@27

  v2 = f->cache;
  if ( v2 && v2->c.marked & 3 )
    f->cache = 0;
  v3 = f->source;
  if ( v3 && BYTE5(v3->dummy.u) & 3 )
  {
    v4 = g;
    reallymarkobject(g, (GCObject *)v3);
  }
  else
  {
    v4 = g;
  }
  for ( i = 0; i < f->sizek; ++i )
  {
    v6 = &f->k[i];
    v7 = v6->u.i.tt__;
    if ( (v6->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
      LOBYTE(v7) = 3;
    if ( v7 & 0x40 )
    {
      v8 = v6->u.i.v__.gc;
      if ( v8->gch.marked & 3 )
        reallymarkobject(v4, v8);
    }
  }
  for ( j = 0; j < f->sizeupvalues; ++j )
  {
    v10 = f->upvalues[j].name;
    if ( v10 && BYTE5(v10->dummy.u) & 3 )
      reallymarkobject(v4, (GCObject *)f->upvalues[j].name);
  }
  for ( k = 0; k < f->sizep; ++k )
  {
    v12 = f->p;
    if ( v12[k] )
    {
      v13 = v12[k];
      if ( v13->marked & 3 )
        reallymarkobject(v4, (GCObject *)&v13->next);
    }
  }
  v14 = 0;
  if ( f->sizelocvars > 0 )
  {
    v15 = 0;
    do
    {
      v16 = f->locvars;
      v17 = v16[v15].varname;
      if ( v17 && BYTE5(v17->dummy.u) & 3 )
        reallymarkobject(g, (GCObject *)v16[v15].varname);
      ++v14;
      ++v15;
    }
    while ( v14 < f->sizelocvars );
  }
  return 4 * (f->sizep + f->sizecode + f->sizelineinfo + 3 * f->sizelocvars + 2 * (f->sizeupvalues + f->sizek) + 20);
}

//----- (00748FA0) --------------------------------------------------------
unsigned int __usercall traverseCclosure<eax>(global_State *g<edi>, CClosure *cl)
{
  CClosure *v2; // eax@1
  char *v3; // ebx@2
  int v4; // eax@3
  int v5; // esi@6
  int v6; // eax@7
  int v7; // eax@8
  int v8; // eax@9
  int v9; // eax@12
  int v10; // eax@15
  int v11; // ecx@16
  int v12; // eax@16
  int v13; // ecx@19
  signed int i; // [sp+0h] [bp-4h]@1

  v2 = cl;
  i = 0;
  if ( cl->nupvalues )
  {
    v3 = (char *)cl->upvalue;
    do
    {
      v4 = *((_DWORD *)v3 + 1);
      if ( (*((_DWORD *)v3 + 1) & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v4) = 3;
      if ( v4 & 0x40 )
      {
        v5 = *(_DWORD *)v3;
        if ( *(_BYTE *)(*(_DWORD *)v3 + 5) & 3 )
        {
          v6 = *(_BYTE *)(v5 + 4);
          *(_BYTE *)(v5 + 5) &= 0xFCu;
          switch ( v6 )
          {
            case 4:
            case 20:
              v7 = *(_DWORD *)(v5 + 12);
              *(_BYTE *)(v5 + 5) |= 4u;
              g->GCmemtrav += v7 + 17;
              break;
            case 7:
              v8 = *(_DWORD *)(v5 + 8);
              if ( v8 && *(_BYTE *)(v8 + 5) & 3 )
                reallymarkobject(g, *(GCObject **)(v5 + 8));
              v9 = *(_DWORD *)(v5 + 12);
              if ( v9 && *(_BYTE *)(v9 + 5) & 3 )
                reallymarkobject(g, *(GCObject **)(v5 + 12));
              v10 = *(_DWORD *)(v5 + 16);
              *(_BYTE *)(v5 + 5) |= 4u;
              g->GCmemtrav += v10 + 24;
              break;
            case 10:
              v11 = *(_DWORD *)(v5 + 8);
              v12 = *(_DWORD *)(v11 + 4);
              if ( (*(_DWORD *)(v11 + 4) & 0x7FFFFF00) != 2146936064 )
                LOBYTE(v12) = 3;
              if ( v12 & 0x40 )
              {
                v13 = *(_DWORD *)v11;
                if ( *(_BYTE *)(v13 + 5) & 3 )
                  reallymarkobject(g, (GCObject *)v13);
              }
              if ( *(_DWORD *)(v5 + 8) == v5 + 16 )
              {
                *(_BYTE *)(v5 + 5) |= 4u;
                g->GCmemtrav += 24;
              }
              break;
            case 6:
              *(_DWORD *)(v5 + 8) = g->gray;
              goto LABEL_28;
            case 38:
              *(_DWORD *)(v5 + 8) = g->gray;
              goto LABEL_28;
            case 5:
              *(_DWORD *)(v5 + 24) = g->gray;
              goto LABEL_28;
            case 8:
              *(_DWORD *)(v5 + 60) = g->gray;
              goto LABEL_28;
            case 9:
              *(_DWORD *)(v5 + 72) = g->gray;
LABEL_28:
              g->gray = (GCObject *)v5;
              break;
            default:
              break;
          }
        }
      }
      v2 = cl;
      v3 += 8;
      ++i;
    }
    while ( i < cl->nupvalues );
  }
  return 8 * v2->nupvalues + 16;
}

//----- (00749150) --------------------------------------------------------
unsigned int __usercall traverseLclosure<eax>(global_State *g<edi>, LClosure *cl)
{
  LClosure *v2; // esi@1
  Proto *v3; // eax@1
  signed int v4; // ebx@4
  int v5; // esi@5
  int v6; // esi@6
  int v7; // eax@8
  int v8; // eax@9
  int v9; // eax@10
  int v10; // eax@13
  int v11; // eax@16
  int v12; // ecx@17
  int v13; // eax@17
  int v14; // ecx@20
  char *v16; // [sp+8h] [bp-4h]@5

  v2 = cl;
  v3 = cl->p;
  if ( v3 && v3->marked & 3 )
    reallymarkobject(g, (GCObject *)&cl->p->next);
  v4 = 0;
  if ( cl->nupvalues )
  {
    v5 = (int)cl->upvals;
    v16 = (char *)cl->upvals;
    do
    {
      v6 = *(_DWORD *)v5;
      if ( v6 && *(_BYTE *)(v6 + 5) & 3 )
      {
        v7 = *(_BYTE *)(v6 + 4);
        *(_BYTE *)(v6 + 5) &= 0xFCu;
        switch ( v7 )
        {
          case 4:
          case 20:
            v8 = *(_DWORD *)(v6 + 12);
            *(_BYTE *)(v6 + 5) |= 4u;
            g->GCmemtrav += v8 + 17;
            break;
          case 7:
            v9 = *(_DWORD *)(v6 + 8);
            if ( v9 && *(_BYTE *)(v9 + 5) & 3 )
              reallymarkobject(g, *(GCObject **)(v6 + 8));
            v10 = *(_DWORD *)(v6 + 12);
            if ( v10 && *(_BYTE *)(v10 + 5) & 3 )
              reallymarkobject(g, *(GCObject **)(v6 + 12));
            v11 = *(_DWORD *)(v6 + 16);
            *(_BYTE *)(v6 + 5) |= 4u;
            g->GCmemtrav += v11 + 24;
            break;
          case 10:
            v12 = *(_DWORD *)(v6 + 8);
            v13 = *(_DWORD *)(v12 + 4);
            if ( (*(_DWORD *)(v12 + 4) & 0x7FFFFF00) != 2146936064 )
              LOBYTE(v13) = 3;
            if ( v13 & 0x40 )
            {
              v14 = *(_DWORD *)v12;
              if ( *(_BYTE *)(v14 + 5) & 3 )
                reallymarkobject(g, (GCObject *)v14);
            }
            if ( *(_DWORD *)(v6 + 8) == v6 + 16 )
            {
              *(_BYTE *)(v6 + 5) |= 4u;
              g->GCmemtrav += 24;
            }
            break;
          case 6:
            *(_DWORD *)(v6 + 8) = g->gray;
            goto LABEL_29;
          case 38:
            *(_DWORD *)(v6 + 8) = g->gray;
            goto LABEL_29;
          case 5:
            *(_DWORD *)(v6 + 24) = g->gray;
            goto LABEL_29;
          case 8:
            *(_DWORD *)(v6 + 60) = g->gray;
            goto LABEL_29;
          case 9:
            *(_DWORD *)(v6 + 72) = g->gray;
LABEL_29:
            g->gray = (GCObject *)v6;
            break;
          default:
            break;
        }
      }
      ++v4;
      v5 = (int)(v16 + 4);
      v16 += 4;
    }
    while ( v4 < cl->nupvalues );
    v2 = cl;
  }
  return 4 * v2->nupvalues + 16;
}

//----- (00749300) --------------------------------------------------------
unsigned int __usercall traversestack<eax>(lua_State *th<edi>, global_State *g)
{
  lua_TValue *v2; // esi@1
  unsigned int result; // eax@2
  int v4; // eax@4
  lua_TValue *i; // eax@11

  v2 = th->stack;
  if ( v2 )
  {
    for ( ; v2 < th->top; ++v2 )
    {
      v4 = v2->u.i.tt__;
      if ( (v2->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v4) = 3;
      if ( v4 & 0x40 && v2->u.i.v__.gc->gch.marked & 3 )
        reallymarkobject(g, v2->u.i.v__.gc);
    }
    if ( g->gcstate == 1 )
    {
      for ( i = &th->stack[th->stacksize]; v2 < i; ++v2 )
        v2->u.i.tt__ = 2146936064;
    }
    result = 8 * th->stacksize + 112;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (007493A0) --------------------------------------------------------
void __usercall freeobj(lua_State *L<ecx>, GCObject *o<eax>)
{
  switch ( o->gch.tt )
  {
    case 9:
      luaF_freeproto(L, (Proto *)o);
      break;
    case 6:
      luaM_realloc_(L, o, 4 * *(&o->gch.marked + 1) + 16, 0);
      break;
    case 0x26:
      luaM_realloc_(L, o, 8 * *(&o->gch.marked + 1) + 16, 0);
      break;
    case 0xA:
      luaF_freeupval(L, (UpVal *)o);
      break;
    case 5:
      luaH_free(L, (Table *)o);
      break;
    case 8:
      luaE_freethread(L, (lua_State *)o);
      break;
    case 7:
      luaM_realloc_(L, o, o->u.uv.len + 24, 0);
      break;
    case 4:
      --L->l_G->strt.nuse;
      goto LABEL_10;
    case 0x14:
LABEL_10:
      luaM_realloc_(L, o, o->ts.tsv.len + 17, 0);
      break;
    default:
      return;
  }
}

//----- (007494A0) --------------------------------------------------------
GCObject **__cdecl sweeplist(lua_State *L, GCObject **p, unsigned int count)
{
  global_State *v3; // ecx@1
  int v4; // edx@1
  char v5; // al@2
  GCObject **v6; // edi@4
  unsigned int v8; // ecx@7
  GCObject *v9; // esi@8
  int v10; // ebx@8
  int ow; // [sp+0h] [bp-10h]@1
  char toset; // [sp+4h] [bp-Ch]@4
  char toclear; // [sp+8h] [bp-8h]@2
  signed int tostop; // [sp+Ch] [bp-4h]@2

  v3 = L->l_G;
  v4 = v3->currentwhite ^ 3;
  ow = v3->currentwhite ^ 3;
  if ( v3->gckind == 2 )
  {
    v5 = 64;
    toclear = -1;
    tostop = 64;
  }
  else
  {
    toclear = -72;
    v5 = v3->currentwhite & 3;
    tostop = 0;
  }
  v6 = p;
  toset = v5;
  if ( *p )
  {
    while ( 1 )
    {
      v8 = count--;
      if ( !v8 )
        break;
      v9 = *v6;
      v10 = (*v6)->gch.marked;
      if ( ((*v6)->gch.marked ^ 3) & v4 )
      {
        if ( v10 & tostop )
          return 0;
        if ( v9->gch.tt == 8 && v9->h.sizearray )
        {
          sweeplist(L, (GCObject **)&v9->p.sizep, 0xFFFFFFFDu);
          luaE_freeCI((lua_State *)v9);
          if ( L->l_G->gckind != 1 )
            luaD_shrinkstack((lua_State *)v9);
        }
        v6 = (GCObject **)v9;
        v9->gch.marked = toset | v10 & toclear;
      }
      else
      {
        *v6 = v9->gch.next;
        freeobj(L, v9);
      }
      if ( !*v6 )
        return (GCObject **)(*v6 != 0 ? (int)v6 : 0);
      v4 = ow;
    }
  }
  return (GCObject **)(*v6 != 0 ? (int)v6 : 0);
}

//----- (007495A0) --------------------------------------------------------
GCObject **__usercall sweeptolive<eax>(GCObject **result<eax>, lua_State *L, int *n)
{
  global_State *v3; // edx@2
  int v4; // ecx@2
  signed int v5; // ebx@2
  GCObject **v6; // edi@2
  char v7; // cl@3
  GCObject *v8; // esi@13
  int v9; // ebx@13
  GCObject *v10; // eax@14
  GCObject **old; // [sp+Ch] [bp-1Ch]@1
  int v12; // [sp+10h] [bp-18h]@2
  int v13; // [sp+14h] [bp-14h]@12
  char v14; // [sp+18h] [bp-10h]@5
  char v15; // [sp+1Ch] [bp-Ch]@3
  signed int v16; // [sp+20h] [bp-8h]@3
  int i; // [sp+24h] [bp-4h]@1

  old = result;
  i = 0;
  do
  {
    v3 = L->l_G;
    v4 = v3->currentwhite;
    v5 = 1;
    ++i;
    v6 = result;
    v12 = v4 ^ 3;
    if ( v3->gckind == 2 )
    {
      v7 = 64;
      v15 = -1;
      v16 = 64;
    }
    else
    {
      v15 = -72;
      v7 = v4 & 3;
      v16 = 0;
    }
    v14 = v7;
    if ( *result )
    {
      while ( 1 )
      {
        v13 = v5 - 1;
        if ( !v5 )
          break;
        v8 = *v6;
        v9 = (*v6)->gch.marked;
        if ( ((*v6)->gch.marked ^ 3) & v12 )
        {
          if ( v9 & v16 )
          {
            result = 0;
            goto LABEL_7;
          }
          if ( v8->gch.tt == 8 )
          {
            if ( v8->h.sizearray )
            {
              sweeplist(L, (GCObject **)&v8->p.sizep, 0xFFFFFFFDu);
              luaE_freeCI((lua_State *)v8);
              if ( L->l_G->gckind != 1 )
                luaD_shrinkstack((lua_State *)v8);
            }
          }
          v6 = (GCObject **)v8;
          v8->gch.marked = v14 | v9 & v15;
        }
        else
        {
          v10 = *v6;
          *v6 = v8->gch.next;
          freeobj(L, v10);
        }
        if ( !*v6 )
          break;
        v5 = v13;
      }
    }
    result = (GCObject **)(*v6 != 0 ? (int)v6 : 0);
LABEL_7:
    ;
  }
  while ( result == old );
  if ( n )
    *n += i;
  return result;
}

//----- (007496B0) --------------------------------------------------------
void __usercall checkSizes(lua_State *L<edi>)
{
  global_State *v1; // esi@1

  v1 = L->l_G;
  if ( v1->gckind != 1 )
  {
    if ( v1->strt.nuse < v1->strt.size / 2 )
      luaS_resize(L, v1->strt.size / 2);
    v1->buff.buffer = (char *)luaM_realloc_(L, v1->buff.buffer, v1->buff.buffsize, 0);
    v1->buff.buffsize = 0;
  }
}

//----- (00749700) --------------------------------------------------------
void __cdecl dothecall(lua_State *L, void *ud)
{
  luaD_call(L, L->top - 2, 0, 0);
}

//----- (00749720) --------------------------------------------------------
void __usercall GCTM(lua_State *L<esi>, int propagateerrors)
{
  global_State *v2; // edi@1
  GCObject *v3; // eax@1
  GCObject *v4; // edx@1
  lua_TValue *v5; // eax@3
  int v6; // ecx@5
  char v7; // bl@5
  GCObject *v8; // edx@5
  lua_TValue *v9; // ecx@5
  signed int v10; // eax@5
  char v11; // cl@5
  unsigned __int64 v; // [sp+4h] [bp-Ch]@3
  int running; // [sp+Ch] [bp-4h]@5

  v2 = L->l_G;
  v3 = v2->tobefnz;
  v4 = v2->allgc;
  v2->tobefnz = v3->gch.next;
  v3->gch.next = v4;
  v2->allgc = v3;
  v3->gch.marked &= 0xEFu;
  if ( v2->gcstate > 1u )
    v3->gch.marked = v3->gch.marked & 0xB8 | v2->currentwhite & 3;
  v = __PAIR__(v3->gch.tt, (unsigned int)v3) | 0x7FF7A54000000000i64;
  v5 = luaT_gettmbyobj(L, (lua_TValue *)&v, TM_GC);
  if ( v5 )
  {
    if ( (v5->u.i.tt__ | 0x70) == 2146936182 )
    {
      v6 = v2->gcrunning;
      v7 = L->allowhook;
      L->allowhook = 0;
      v2->gcrunning = 0;
      v8 = v5->u.i.v__.gc;
      running = v6;
      v9 = L->top;
      v9->u.i.v__.gc = v8;
      v9->u.i.tt__ = v5->u.i.tt__;
      *(_QWORD *)&L->top[1].u.i.v__.gc = v;
      L->top += 2;
      v10 = luaD_pcall(L, dothecall, 0, (char *)L->top - (char *)L->stack - 16, 0);
      v11 = running;
      L->allowhook = v7;
      v2->gcrunning = v11;
      if ( v10 )
      {
        if ( propagateerrors )
        {
          if ( v10 == 2 )
          {
            luaO_pushfstring(L, "error in __gc metamethod (%s)");
            v10 = 5;
          }
          luaD_throw(L, v10);
        }
      }
    }
  }
}

//----- (00749840) --------------------------------------------------------
void __cdecl luaC_checkfinalizer(lua_State *L, GCObject *o, Table *mt)
{
  global_State *v3; // edi@1
  GCObject **v4; // eax@5
  GCObject *v5; // eax@7
  int i; // ecx@7
  char v7; // al@9

  v3 = L->l_G;
  if ( !(o->gch.marked & 0x18) && mt && !(mt->flags & 4) && luaT_gettm(mt, TM_GC, v3->tmname[2]) )
  {
    v4 = v3->sweepgc;
    if ( (GCObject *)v4 == o )
      v3->sweepgc = sweeptolive(L, v4, 0);
    v5 = v3->allgc;
    for ( i = (int)&v3->allgc; v5 != o; v5 = v5->gch.next )
      i = (int)v5;
    *(_DWORD *)i = o->gch.next;
    o->gch.next = v3->finobj;
    v3->finobj = o;
    v7 = o->gch.marked | 0x10;
    o->gch.marked = v7;
    if ( v3->gcstate <= 1u )
      o->gch.marked = v7 & 0xBF;
    else
      o->gch.marked = v7 & 0xB8 | v3->currentwhite & 3;
  }
}

//----- (007498E0) --------------------------------------------------------
int __usercall entersweep<eax>(lua_State *L<edi>)
{
  global_State *v1; // esi@1
  int n; // [sp+4h] [bp-4h]@1

  v1 = L->l_G;
  n = 0;
  v1->sweepstrgc = 0;
  v1->gcstate = 2;
  v1->sweepfin = sweeptolive(L, &v1->finobj, &n);
  v1->sweepgc = sweeptolive(L, &v1->allgc, &n);
  return n;
}

//----- (00749920) --------------------------------------------------------
void __usercall callallpendingfinalizers(lua_State *L<esi>, int propagateerrors)
{
  global_State *v2; // ebx@1
  bool v3; // zf@1
  global_State *v4; // edi@2
  GCObject *v5; // eax@2
  GCObject *v6; // edx@2
  lua_TValue *v7; // eax@4
  int v8; // ecx@6
  char v9; // bl@6
  GCObject *v10; // edx@6
  lua_TValue *v11; // ecx@6
  signed int v12; // eax@6
  char v13; // cl@6
  lua_TValue o; // [sp+8h] [bp-10h]@4
  global_State *g; // [sp+10h] [bp-8h]@1
  int v16; // [sp+14h] [bp-4h]@6

  v2 = L->l_G;
  v3 = v2->tobefnz == 0;
  g = L->l_G;
  if ( !v3 )
  {
    do
    {
      v2->tobefnz->gch.marked &= 0xBFu;
      v4 = L->l_G;
      v5 = v4->tobefnz;
      v6 = v4->allgc;
      v4->tobefnz = v5->gch.next;
      v5->gch.next = v6;
      v4->allgc = v5;
      v5->gch.marked &= 0xEFu;
      if ( v4->gcstate > 1u )
        v5->gch.marked = v5->gch.marked & 0xB8 | v4->currentwhite & 3;
      o = (lua_TValue)(__PAIR__(v5->gch.tt, (unsigned int)v5) | 0x7FF7A54000000000i64);
      v7 = luaT_gettmbyobj(L, &o, TM_GC);
      if ( v7 && (v7->u.i.tt__ | 0x70) == 2146936182 )
      {
        v8 = v4->gcrunning;
        v9 = L->allowhook;
        L->allowhook = 0;
        v4->gcrunning = 0;
        v10 = v7->u.i.v__.gc;
        v16 = v8;
        v11 = L->top;
        v11->u.i.v__.gc = v10;
        v11->u.i.tt__ = v7->u.i.tt__;
        *(_QWORD *)&L->top[1].u.i.v__.gc = o;
        L->top += 2;
        v12 = luaD_pcall(L, dothecall, 0, (char *)L->top - (char *)L->stack - 16, 0);
        v13 = v16;
        L->allowhook = v9;
        v4->gcrunning = v13;
        if ( v12 && propagateerrors )
        {
          if ( v12 == 2 )
          {
            luaO_pushfstring(L, "error in __gc metamethod (%s)");
            v12 = 5;
          }
          luaD_throw(L, v12);
        }
        v2 = g;
      }
    }
    while ( v2->tobefnz );
  }
}

//----- (00749A60) --------------------------------------------------------
void __cdecl luaC_freeallobjects(lua_State *L)
{
  global_State *v1; // edi@1
  int v2; // eax@1
  int i; // ecx@1
  int j; // eax@3
  GCObject *v5; // ebx@4
  int k; // ebx@5

  v1 = L->l_G;
  v2 = (int)v1->tobefnz;
  for ( i = (int)&v1->tobefnz; v2; v2 = *(_DWORD *)v2 )
    i = v2;
  for ( j = (int)v1->finobj; j; j = (int)v1->finobj )
  {
    v5 = *(GCObject **)j;
    *(_BYTE *)(j + 5) |= 8u;
    v1->finobj = v5;
    *(_DWORD *)j = *(_DWORD *)i;
    *(_DWORD *)i = j;
    i = j;
  }
  callallpendingfinalizers(L, 0);
  v1->currentwhite = 3;
  v1->gckind = 0;
  sweeplist(L, &v1->finobj, 0xFFFFFFFDu);
  sweeplist(L, &v1->allgc, 0xFFFFFFFDu);
  for ( k = 0; k < v1->strt.size; ++k )
    sweeplist(L, &v1->strt.hash[k], 0xFFFFFFFDu);
}

//----- (00749AF0) --------------------------------------------------------
void __cdecl luaC_barrier_(lua_State *L, GCObject *o, GCObject *v)
{
  global_State *v3; // eax@1

  v3 = L->l_G;
  if ( v3->gcstate > 1u )
    o->gch.marked = o->gch.marked & 0xB8 | v3->currentwhite & 3;
  else
    reallymarkobject(v3, v);
}

//----- (00749B30) --------------------------------------------------------
void __cdecl luaC_barrierproto_(lua_State *L, Proto *p, Closure *c)
{
  global_State *v3; // esi@1
  char v4; // al@3

  v3 = L->l_G;
  if ( p->cache )
  {
    p->marked &= 0xFBu;
    p->gclist = v3->grayagain;
    v3->grayagain = (GCObject *)p;
  }
  else
  {
    if ( c->c.marked & 3 )
    {
      v4 = p->marked;
      if ( v4 & 4 )
      {
        if ( v3->gcstate > 1u )
          p->marked = v4 & 0xB8 | v3->currentwhite & 3;
        else
          reallymarkobject(v3, (GCObject *)&c->c.next);
      }
    }
  }
}

//----- (00749B90) --------------------------------------------------------
void __cdecl luaC_checkupvalcolor(global_State *g, UpVal *uv)
{
  char v2; // al@1
  lua_TValue *v3; // ecx@5
  int v4; // eax@5
  GCObject *v5; // ecx@8

  v2 = uv->marked;
  if ( !(v2 & 7) )
  {
    if ( g->gckind == 2 || g->gcstate <= 1u )
    {
      uv->marked = v2 & 0xBF | 4;
      v3 = uv->v;
      v4 = v3->u.i.tt__;
      if ( (v3->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v4) = 3;
      if ( v4 & 0x40 )
      {
        v5 = v3->u.i.v__.gc;
        if ( v5->gch.marked & 3 )
          reallymarkobject(g, v5);
      }
    }
    else
    {
      uv->marked = v2 & 0xB8 | g->currentwhite & 3;
    }
  }
}

//----- (00749C00) --------------------------------------------------------
void __usercall traverseweakvalue(Table *h<edi>, global_State *g)
{
  Node *v2; // esi@1
  int v3; // ebx@1
  int v4; // eax@2
  int v5; // eax@14
  char v6; // cl@15
  bool v7; // zf@18
  GCObject *v8; // eax@18
  signed int hasclears; // [sp+Ch] [bp-4h]@1

  v2 = h->node;
  v3 = (int)&v2[1 << h->lsizenode];
  for ( hasclears = h->sizearray > 0; (unsigned int)v2 < v3; ++v2 )
  {
    v4 = v2->i_key.nk.u.i.tt__;
    if ( v2->i_val.u.i.tt__ == 2146936064 )
    {
      if ( (v4 & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v4) = 3;
      if ( v4 & 0x40 && v2->i_key.nk.u.i.v__.gc->gch.marked & 3 )
        v2->i_key.nk.u.i.tt__ = 2146936075;
    }
    else
    {
      if ( (v4 & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v4) = 3;
      if ( v4 & 0x40 && v2->i_key.nk.u.i.v__.gc->gch.marked & 3 )
        reallymarkobject(g, v2->i_key.nk.u.i.v__.gc);
      if ( !hasclears )
      {
        v5 = v2->i_val.u.i.tt__;
        v6 = (v2->i_val.u.i.tt__ & 0x7FFFFF00) == 2146936064 ? (_BYTE)v5 : 3;
        if ( v6 & 0x40 )
        {
          v7 = (v5 | 0x70) == 2146936180;
          v8 = v2->i_val.u.i.v__.gc;
          if ( v7 )
          {
            if ( v8 && v8->gch.marked & 3 )
              reallymarkobject(g, v2->i_val.u.i.v__.gc);
          }
          else
          {
            if ( v8->gch.marked & 3 )
              hasclears = 1;
          }
        }
      }
    }
  }
  if ( hasclears )
  {
    h->gclist = g->weak;
    g->weak = (GCObject *)h;
  }
  else
  {
    h->gclist = g->grayagain;
    g->grayagain = (GCObject *)h;
  }
}

//----- (00749D50) --------------------------------------------------------
int __usercall traverseephemeron<eax>(Table *h<edi>, global_State *g)
{
  int v2; // esi@1
  int v3; // ebx@1
  lua_TValue *v4; // ecx@2
  int v5; // eax@2
  GCObject *v6; // ecx@5
  Node *v7; // esi@8
  int v8; // eax@9
  int v9; // edx@9
  int v10; // ecx@9
  char v11; // cl@16
  bool v12; // zf@19
  GCObject *v13; // eax@19
  int v14; // eax@23
  signed int hasclears; // [sp+Ch] [bp-Ch]@1
  signed int prop; // [sp+10h] [bp-8h]@1
  Node *limit; // [sp+14h] [bp-4h]@1

  v2 = 0;
  v3 = 0;
  hasclears = 0;
  prop = 0;
  for ( limit = &h->node[1 << h->lsizenode]; v2 < h->sizearray; ++v2 )
  {
    v4 = &h->array[v2];
    v5 = v4->u.i.tt__;
    if ( (v4->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
      LOBYTE(v5) = 3;
    if ( v5 & 0x40 )
    {
      v6 = v4->u.i.v__.gc;
      if ( v6->gch.marked & 3 )
      {
        v3 = 1;
        reallymarkobject(g, v6);
      }
    }
  }
  v7 = h->node;
  if ( v7 >= limit )
    goto LABEL_39;
  do
  {
    v8 = v7->i_key.nk.u.i.tt__;
    v9 = v7->i_val.u.i.tt__;
    v10 = v7->i_key.nk.u.i.tt__ & 0x7FFFFF00;
    if ( v9 == 2146936064 )
    {
      if ( v10 != 2146936064 )
        LOBYTE(v8) = 3;
      if ( v8 & 0x40 )
      {
        if ( v7->i_key.nk.u.i.v__.gc->gch.marked & 3 )
          v7->i_key.nk.u.i.tt__ = 2146936075;
      }
      goto LABEL_34;
    }
    if ( v10 == 2146936064 )
      v11 = v8;
    else
      v11 = 3;
    if ( !(v11 & 0x40) )
      goto LABEL_23;
    v12 = (v8 | 0x70) == 2146936180;
    v13 = v7->i_key.nk.u.i.v__.gc;
    if ( v12 )
    {
      if ( v13 && v13->gch.marked & 3 )
        reallymarkobject(g, v7->i_key.nk.u.i.v__.gc);
LABEL_23:
      v14 = v7->i_val.u.i.tt__;
      if ( (v7->i_val.u.i.tt__ & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v14) = 3;
      if ( v14 & 0x40 && v7->i_val.u.i.v__.gc->gch.marked & 3 )
      {
        v3 = 1;
        reallymarkobject(g, v7->i_val.u.i.v__.gc);
      }
      goto LABEL_34;
    }
    if ( !(v13->gch.marked & 3) )
      goto LABEL_23;
    hasclears = 1;
    if ( (v9 & 0x7FFFFF00) != 2146936064 )
      LOBYTE(v9) = 3;
    if ( v9 & 0x40 && v7->i_val.u.i.v__.gc->gch.marked & 3 )
      prop = 1;
LABEL_34:
    ++v7;
  }
  while ( v7 < limit );
  if ( prop )
  {
    h->gclist = g->ephemeron;
    g->ephemeron = (GCObject *)h;
    return v3;
  }
  if ( hasclears )
  {
    h->gclist = g->allweak;
    g->allweak = (GCObject *)h;
    return v3;
  }
LABEL_39:
  h->gclist = g->grayagain;
  g->grayagain = (GCObject *)h;
  return v3;
}

//----- (00749F30) --------------------------------------------------------
unsigned int __usercall traversetable<eax>(Table *h<eax>, global_State *g)
{
  Table *v2; // edi@1
  Table *v3; // eax@1
  lua_TValue *v4; // esi@2
  Table *v5; // eax@6
  int v6; // ebx@11
  int v7; // eax@11

  v2 = h;
  v3 = h->metatable;
  if ( v3 )
  {
    if ( v3->flags & 8 )
      v4 = 0;
    else
      v4 = luaT_gettm(v3, TM_MODE, g->tmname[3]);
  }
  else
  {
    v4 = 0;
  }
  v5 = v2->metatable;
  if ( v5 && v5->marked & 3 )
    reallymarkobject(g, (GCObject *)&v2->metatable->next);
  if ( v4
    && (v4->u.i.tt__ | 0x70) == 2146936180
    && ((strchr((char *)&v4->u.i.v__.gc->u.uv.len, 107), v6 = v7, strchr((char *)&v4->u.i.v__.gc->u.uv.len, 118), v6)
     || v7) )
  {
    v2->marked &= 0xFBu;
    if ( v6 )
    {
      if ( v7 )
      {
        v2->gclist = g->allweak;
        g->allweak = (GCObject *)v2;
      }
      else
      {
        traverseephemeron(g, v2);
      }
    }
    else
    {
      traverseweakvalue(g, v2);
    }
  }
  else
  {
    traversestrongtable(g, v2);
  }
  return 8 * (v2->sizearray + 3 * (1 << v2->lsizenode)) + 32;
}

//----- (0074A020) --------------------------------------------------------
void __usercall propagatemark(global_State *g<ebx>)
{
  GCObject *v1; // eax@1
  int v2; // ecx@1
  GCObject *v3; // edx@5

  v1 = g->gray;
  v2 = v1->gch.tt;
  v1->gch.marked |= 4u;
  switch ( v2 )
  {
    case 5:
      g->gray = v1->h.gclist;
      g->GCmemtrav += traversetable(g, (Table *)v1);
      break;
    case 6:
      g->gray = (GCObject *)v1->ts.tsv.hash;
      g->GCmemtrav += traverseLclosure(g, (LClosure *)v1);
      break;
    case 38:
      g->gray = (GCObject *)v1->ts.tsv.hash;
      g->GCmemtrav += traverseCclosure(g, (CClosure *)v1);
      break;
    case 8:
      v3 = g->grayagain;
      g->gray = (GCObject *)v1->p.sizelocvars;
      v1->p.sizelocvars = (int)v3;
      g->grayagain = v1;
      v1->gch.marked &= 0xFBu;
      g->GCmemtrav += traversestack(g, (lua_State *)v1);
      break;
    case 9:
      g->gray = v1->p.gclist;
      g->GCmemtrav += traverseproto(g, (Proto *)v1);
      break;
    default:
      return;
  }
}

//----- (0074A100) --------------------------------------------------------
void __usercall propagateall(global_State *g<ebx>)
{
  GCObject *v1; // eax@2
  int v2; // ecx@2
  unsigned int v3; // eax@3
  GCObject *v4; // edx@6

  while ( g->gray )
  {
    v1 = g->gray;
    v2 = v1->gch.tt;
    v1->gch.marked |= 4u;
    switch ( v2 )
    {
      case 5:
        g->gray = v1->h.gclist;
        v3 = traversetable(g, (Table *)v1);
        goto LABEL_8;
      case 6:
        g->gray = (GCObject *)v1->ts.tsv.hash;
        v3 = traverseLclosure(g, (LClosure *)v1);
        goto LABEL_8;
      case 38:
        g->gray = (GCObject *)v1->ts.tsv.hash;
        v3 = traverseCclosure(g, (CClosure *)v1);
        goto LABEL_8;
      case 8:
        v4 = g->grayagain;
        g->gray = (GCObject *)v1->p.sizelocvars;
        v1->p.sizelocvars = (int)v4;
        g->grayagain = v1;
        v1->gch.marked &= 0xFBu;
        v3 = traversestack(g, (lua_State *)v1);
        goto LABEL_8;
      case 9:
        g->gray = v1->p.gclist;
        v3 = traverseproto(g, (Proto *)v1);
LABEL_8:
        g->GCmemtrav += v3;
        break;
      default:
        break;
    }
  }
}

//----- (0074A1E0) --------------------------------------------------------
void __usercall convergeephemerons(global_State *g<eax>)
{
  global_State *v1; // ebx@1
  GCObject *v2; // esi@2
  Table *v3; // edi@2
  signed int changed; // [sp+Ch] [bp-4h]@2

  v1 = g;
  do
  {
    v2 = v1->ephemeron;
    v1->ephemeron = 0;
    changed = 0;
    v3 = (Table *)v2;
    if ( !v2 )
      break;
    do
    {
      v2 = v2->h.gclist;
      if ( traverseephemeron(v1, v3) )
      {
        propagateall(v1);
        changed = 1;
      }
      v3 = (Table *)v2;
    }
    while ( v2 );
  }
  while ( changed );
}

//----- (0074A230) --------------------------------------------------------
void __usercall clearkeys(GCObject *l<eax>, global_State *g, GCObject *f)
{
  GCObject *i; // ebx@1
  unsigned int v4; // esi@2
  int j; // edi@2
  int v6; // eax@4
  char v7; // cl@5
  bool v8; // zf@8
  int v9; // eax@8
  int v10; // eax@13
  int v11; // ecx@13

  for ( i = l; i != f; i = i->h.gclist )
  {
    v4 = i->u.uv.len;
    for ( j = v4 + 24 * (1 << *(&i->gch.marked + 2)); v4 < j; v4 += 24 )
    {
      if ( *(_DWORD *)(v4 + 4) != 2146936064 )
      {
        v6 = *(_DWORD *)(v4 + 12);
        v7 = (*(_DWORD *)(v4 + 12) & 0x7FFFFF00) == 2146936064 ? (_BYTE)v6 : 3;
        if ( v7 & 0x40 )
        {
          v8 = (v6 | 0x70) == 2146936180;
          v9 = *(_DWORD *)(v4 + 8);
          if ( v8 )
          {
            if ( v9 )
            {
              if ( *(_BYTE *)(v9 + 5) & 3 )
                reallymarkobject(g, *(GCObject **)(v4 + 8));
            }
          }
          else
          {
            if ( *(_BYTE *)(v9 + 5) & 3 )
            {
              v10 = *(_DWORD *)(v4 + 12);
              v11 = *(_DWORD *)(v4 + 12) & 0x7FFFFF00;
              *(_DWORD *)(v4 + 4) = 2146936064;
              if ( v11 != 2146936064 )
                LOBYTE(v10) = 3;
              if ( v10 & 0x40 && *(_BYTE *)(*(_DWORD *)(v4 + 8) + 5) & 3 )
                *(_DWORD *)(v4 + 12) = 2146936075;
            }
          }
        }
      }
    }
  }
}

//----- (0074A310) --------------------------------------------------------
void __usercall clearvalues(GCObject *l<eax>, global_State *g, GCObject *f)
{
  GCObject *i; // edi@1
  int v4; // esi@2
  int v5; // ecx@3
  int v6; // eax@3
  char v7; // dl@4
  int v8; // ecx@8
  unsigned int j; // esi@14
  int v10; // eax@15
  char v11; // cl@17
  bool v12; // zf@20
  GCObject *v13; // eax@20
  int v14; // eax@25
  int v15; // edx@25
  int limit; // [sp+8h] [bp-4h]@2

  for ( i = l; i != f; i = i->h.gclist )
  {
    v4 = 0;
    for ( limit = i->u.uv.len + 24 * (1 << *(&i->gch.marked + 2)); v4 < i->h.sizearray; ++v4 )
    {
      v5 = i->ts.tsv.len + 8 * v4;
      v6 = *(_DWORD *)(v5 + 4);
      if ( (*(_DWORD *)(v5 + 4) & 0x7FFFFF00) == 2146936064 )
        v7 = v6;
      else
        v7 = 3;
      if ( v7 & 0x40 )
      {
        if ( (v6 | 0x70) == 2146936180 )
        {
          v8 = *(_DWORD *)v5;
          if ( v8 && *(_BYTE *)(v8 + 5) & 3 )
            reallymarkobject(g, (GCObject *)v8);
        }
        else
        {
          if ( *(_BYTE *)(*(_DWORD *)v5 + 5) & 3 )
            *(_DWORD *)(v5 + 4) = 2146936064;
        }
      }
    }
    for ( j = i->u.uv.len; j < limit; j += 24 )
    {
      v10 = *(_DWORD *)(j + 4);
      if ( v10 != 2146936064 )
      {
        v11 = (v10 & 0x7FFFFF00) == 2146936064 ? (_BYTE)v10 : 3;
        if ( v11 & 0x40 )
        {
          v12 = (v10 | 0x70) == 2146936180;
          v13 = *(GCObject **)j;
          if ( v12 )
          {
            if ( v13 )
            {
              if ( v13->gch.marked & 3 )
                reallymarkobject(g, *(GCObject **)j);
            }
          }
          else
          {
            if ( v13->gch.marked & 3 )
            {
              v14 = *(_DWORD *)(j + 12);
              v15 = *(_DWORD *)(j + 12) & 0x7FFFFF00;
              *(_DWORD *)(j + 4) = 2146936064;
              if ( v15 != 2146936064 )
                LOBYTE(v14) = 3;
              if ( v14 & 0x40 && *(_BYTE *)(*(_DWORD *)(j + 8) + 5) & 3 )
                *(_DWORD *)(j + 12) = 2146936075;
            }
          }
        }
      }
    }
  }
}

//----- (0074A470) --------------------------------------------------------
int __cdecl atomic(lua_State *L)
{
  global_State *v1; // edi@1
  int v2; // esi@1
  int v3; // eax@3
  int v4; // esi@8
  GCObject *v5; // ST34_4@8
  GCObject *v6; // ST30_4@8
  GCObject *v7; // ST2C_4@8
  int v8; // esi@8
  global_State *v9; // ecx@8
  int v10; // esi@8
  int v11; // ebx@8
  int v12; // ecx@8
  int v13; // eax@8
  int i; // eax@10
  char v15; // dl@11
  int v16; // esi@15
  GCObject *origweak; // [sp+Ch] [bp-Ch]@8
  GCObject *origall; // [sp+10h] [bp-8h]@8

  v1 = L->l_G;
  v2 = -v1->GCmemtrav;
  if ( L->marked & 3 )
    reallymarkobject(v1, (GCObject *)&L->next);
  v3 = v1->l_registry.u.i.tt__;
  if ( (v1->l_registry.u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v3) = 3;
  if ( v3 & 0x40 && v1->l_registry.u.i.v__.gc->gch.marked & 3 )
    reallymarkobject(v1, v1->l_registry.u.i.v__.gc);
  markmt(v1);
  remarkupvals(v1);
  propagateall(v1);
  v4 = v1->GCmemtrav + v2;
  v5 = v1->grayagain;
  v6 = v1->weak;
  v7 = v1->ephemeron;
  v1->ephemeron = 0;
  v1->grayagain = 0;
  v1->weak = 0;
  propagateall(v1);
  v1->gray = v5;
  propagateall(v1);
  v1->gray = v6;
  propagateall(v1);
  v1->gray = v7;
  propagateall(v1);
  v8 = v4 - v1->GCmemtrav;
  convergeephemerons(v1);
  clearvalues(v1, v1->weak, 0);
  clearvalues(v1, v1->allweak, 0);
  v9 = L->l_G;
  v10 = v1->GCmemtrav + v8;
  v11 = (int)&v9->finobj;
  v12 = (int)&v9->tobefnz;
  origall = v1->allweak;
  v13 = *(_DWORD *)v12;
  for ( origweak = v1->weak; v13; v13 = *(_DWORD *)v13 )
    v12 = v13;
  for ( i = *(_DWORD *)v11; *(_DWORD *)v11; i = *(_DWORD *)v11 )
  {
    v15 = *(_BYTE *)(i + 5);
    if ( v15 & 3 )
    {
      *(_BYTE *)(i + 5) = v15 | 8;
      *(_DWORD *)v11 = *(_DWORD *)i;
      *(_DWORD *)i = *(_DWORD *)v12;
      *(_DWORD *)v12 = i;
      v12 = i;
    }
    else
    {
      v11 = i;
    }
  }
  markbeingfnz(v1);
  propagateall(v1);
  v16 = v10 - v1->GCmemtrav;
  convergeephemerons(v1);
  clearkeys(v1, v1->ephemeron, 0);
  clearkeys(v1, v1->allweak, 0);
  clearvalues(v1, v1->weak, origweak);
  clearvalues(v1, v1->allweak, origall);
  v1->currentwhite ^= 3u;
  return v16 + v1->GCmemtrav;
}

//----- (0074A5F0) --------------------------------------------------------
unsigned int __usercall singlestep<eax>(lua_State *L<eax>)
{
  lua_State *v1; // edi@1
  global_State *v2; // ebx@1
  unsigned int result; // eax@2
  unsigned int v4; // esi@4
  unsigned int v5; // ecx@5
  int v6; // eax@5
  int v7; // esi@5
  int v8; // eax@5
  signed int v9; // esi@6
  int v10; // eax@7
  GCObject **v11; // eax@12
  GCObject **v12; // eax@16
  lua_State *mt; // [sp+Ch] [bp-4h]@18

  v1 = L;
  v2 = L->l_G;
  switch ( v2->gcstate )
  {
    case 5:
      v2->GCmemtrav = 4 * v2->strt.size;
      restartcollection(v2);
      result = v2->GCmemtrav;
      v2->gcstate = 0;
      break;
    case 0:
      if ( v2->gray )
      {
        v4 = v2->GCmemtrav;
        propagatemark(v2);
        result = v2->GCmemtrav - v4;
      }
      else
      {
        v5 = v2->GCmemtrav;
        v2->gcstate = 1;
        v2->GCestimate = v5;
        v6 = atomic(L);
        v7 = v6;
        v2->GCestimate += v6;
        v8 = entersweep(v1);
        result = v8 + v7 + 4 * v8;
      }
      break;
    case 2:
      v9 = 0;
      do
      {
        v10 = v9 + v2->sweepstrgc;
        if ( v10 >= v2->strt.size )
          break;
        sweeplist(v1, &v2->strt.hash[v10], 0xFFFFFFFDu);
        ++v9;
      }
      while ( v9 < 80 );
      v2->sweepstrgc += v9;
      if ( v2->sweepstrgc >= v2->strt.size )
        v2->gcstate = 3;
      result = 5 * v9;
      break;
    case 3:
      v11 = v2->sweepfin;
      if ( !v11 )
      {
        v2->gcstate = 4;
        goto LABEL_15;
      }
      v2->sweepfin = sweeplist(v1, v11, 0x50u);
      result = 400;
      break;
    default:
LABEL_15:
      result = 0;
      break;
    case 4:
      v12 = v2->sweepgc;
      if ( v12 )
      {
        v2->sweepgc = sweeplist(v1, v12, 0x50u);
        result = 400;
      }
      else
      {
        mt = v2->mainthread;
        sweeplist(v1, (GCObject **)&mt, 1u);
        checkSizes(v1);
        v2->gcstate = 5;
        result = 5;
      }
      break;
  }
  return result;
}

//----- (0074A750) --------------------------------------------------------
void __cdecl luaC_runtilstate(lua_State *L, int statesmask)
{
  lua_State *v2; // edi@1
  global_State *v3; // ebx@2
  unsigned int v4; // ecx@6
  global_State *v5; // ebx@6
  signed int v6; // esi@7
  int v7; // eax@8
  GCObject **v8; // eax@12
  GCObject **v9; // eax@15
  global_State *g; // [sp+4h] [bp-4h]@1

  v2 = L;
  g = L->l_G;
  if ( !((1 << L->l_G->gcstate) & statesmask) )
  {
    do
    {
      v3 = v2->l_G;
      switch ( v3->gcstate )
      {
        case 5:
          v3->GCmemtrav = 4 * v3->strt.size;
          restartcollection(v3);
          v3->gcstate = 0;
          break;
        case 0:
          if ( v3->gray )
          {
            propagatemark(v3);
          }
          else
          {
            v4 = v3->GCmemtrav;
            v3->gcstate = 1;
            v3->GCestimate = v4;
            v3->GCestimate += atomic(v2);
            v5 = v2->l_G;
            L = 0;
            v5->gcstate = 2;
            v5->sweepstrgc = 0;
            v5->sweepfin = sweeptolive(v2, &v5->finobj, (int *)&L);
            v5->sweepgc = sweeptolive(v2, &v5->allgc, (int *)&L);
          }
          break;
        case 2:
          v6 = 0;
          do
          {
            v7 = v6 + v3->sweepstrgc;
            if ( v7 >= v3->strt.size )
              break;
            sweeplist(v2, &v3->strt.hash[v7], 0xFFFFFFFDu);
            ++v6;
          }
          while ( v6 < 80 );
          v3->sweepstrgc += v6;
          if ( v3->sweepstrgc >= v3->strt.size )
            v3->gcstate = 3;
          break;
        case 3:
          v8 = v3->sweepfin;
          if ( v8 )
            v3->sweepfin = sweeplist(v2, v8, 0x50u);
          else
            v3->gcstate = 4;
          break;
        case 4:
          v9 = v3->sweepgc;
          if ( v9 )
          {
            v3->sweepgc = sweeplist(v2, v9, 0x50u);
          }
          else
          {
            L = v3->mainthread;
            sweeplist(v2, (GCObject **)&L, 1u);
            checkSizes(v2);
            v3->gcstate = 5;
          }
          break;
        default:
          break;
      }
    }
    while ( !((1 << g->gcstate) & statesmask) );
  }
}

//----- (0074A8C0) --------------------------------------------------------
void __cdecl incstep(lua_State *L)
{
  global_State *v1; // esi@1
  signed int v2; // ebx@1
  int v3; // ecx@3
  signed int v4; // edi@4
  int v5; // ecx@9
  int v6; // edi@9

  v1 = L->l_G;
  v2 = v1->gcstepmul;
  if ( v2 < 40 )
    v2 = 40;
  v3 = v1->GCdebt / 200 + 1;
  if ( v3 >= 2147483644 / v2 )
    v4 = 2147483644;
  else
    v4 = v3 * v2;
  do
    v4 -= singlestep(L);
  while ( v4 > -1600 && v1->gcstate != 5 );
  if ( v1->gcstate == 5 )
  {
    v5 = (signed int)v1->GCestimate / 100;
    v6 = v1->gcpause;
    if ( v6 >= 2147483644 / v5 )
      luaE_setdebt(v1, v1->GCdebt + v1->totalbytes - 2147483644);
    else
      luaE_setdebt(v1, v1->GCdebt + v1->totalbytes - v5 * v6);
  }
  else
  {
    luaE_setdebt(v1, 200 * v4 / v2);
  }
}

//----- (0074A9B0) --------------------------------------------------------
void __cdecl luaC_fullgc(lua_State *L, int isemergency)
{
  lua_State *v2; // ebx@1
  global_State *v3; // edi@1
  lua_State *v4; // esi@3
  global_State *v5; // esi@6
  signed int v6; // esi@9
  int v7; // edx@9
  int v8; // edx@10
  int origkind; // [sp+Ch] [bp-4h]@1

  v2 = L;
  v3 = L->l_G;
  origkind = v3->gckind;
  if ( isemergency )
  {
    v3->gckind = 1;
  }
  else
  {
    v4 = L;
    v3->gckind = 0;
    callallpendingfinalizers(v4, 1);
  }
  if ( v3->gckind == 2 || v3->gcstate <= 1u )
  {
    v5 = v2->l_G;
    L = 0;
    v5->sweepstrgc = 0;
    v5->gcstate = 2;
    v5->sweepfin = sweeptolive(v2, &v5->finobj, (int *)&L);
    v5->sweepgc = sweeptolive(v2, &v5->allgc, (int *)&L);
  }
  luaC_runtilstate(v2, 32);
  luaC_runtilstate(v2, -33);
  luaC_runtilstate(v2, 32);
  if ( origkind == 2 )
    luaC_runtilstate(v2, 1);
  v6 = v3->totalbytes + v3->GCdebt;
  v3->gckind = origkind;
  v7 = v3->gcpause;
  if ( v7 >= 2147483644 / (v6 / 100) )
    v8 = 2147483644;
  else
    v8 = v6 / 100 * v7;
  luaE_setdebt(v3, v6 - v8);
  if ( !isemergency )
    callallpendingfinalizers(v2, 1);
}

//----- (0074AAB0) --------------------------------------------------------
void __cdecl luaC_changemode(lua_State *L, int mode)
{
  lua_State *v2; // edi@1
  global_State *v3; // esi@1
  global_State *v4; // esi@4

  v2 = L;
  v3 = L->l_G;
  if ( mode != v3->gckind )
  {
    if ( mode == 2 )
    {
      luaC_runtilstate(L, 1);
      v3->GCestimate = v3->totalbytes + v3->GCdebt;
      v3->gckind = 2;
    }
    else
    {
      v3->gckind = 0;
      v4 = v2->l_G;
      L = 0;
      v4->sweepstrgc = 0;
      v4->gcstate = 2;
      v4->sweepfin = sweeptolive(v2, &v4->finobj, (int *)&L);
      v4->sweepgc = sweeptolive(v2, &v4->allgc, (int *)&L);
      luaC_runtilstate(v2, -29);
    }
  }
}

//----- (0074AB30) --------------------------------------------------------
void __usercall generationalcollection(lua_State *L<eax>)
{
  global_State *v1; // esi@1
  unsigned int v2; // ebx@1
  signed int v3; // edi@2
  unsigned int v4; // ecx@3
  int v5; // ebx@4

  v1 = L->l_G;
  v2 = v1->GCestimate;
  if ( v2 )
  {
    luaC_runtilstate(L, 32);
    v3 = v1->totalbytes + v1->GCdebt;
    v4 = v1->gcmajorinc * v2 / 0x64 >= v3 ? v2 : 0;
    v1->gcstate = 0;
    v1->GCestimate = v4;
  }
  else
  {
    luaC_fullgc(L, 0);
    v3 = v1->totalbytes + v1->GCdebt;
    v1->GCestimate = v3;
  }
  v5 = v1->gcpause;
  if ( v5 >= 2147483644 / (v3 / 100) )
    luaE_setdebt(v1, v3 - 2147483644);
  else
    luaE_setdebt(v1, v3 - v3 / 100 * v5);
}

//----- (0074ABD0) --------------------------------------------------------
void __cdecl luaC_forcestep(lua_State *L)
{
  global_State *v1; // edi@1
  signed int i; // ebx@4

  v1 = L->l_G;
  if ( v1->gckind == 2 )
    generationalcollection(L);
  else
    incstep(L);
  for ( i = 0; v1->tobefnz; ++i )
  {
    if ( i >= 4 && v1->gcstate != 5 )
      break;
    GCTM(L, 1);
  }
}

//----- (0074AC30) --------------------------------------------------------
void __cdecl luaC_step(lua_State *L)
{
  global_State *v1; // eax@1

  v1 = L->l_G;
  if ( v1->gcrunning )
    luaC_forcestep(L);
  else
    luaE_setdebt(v1, -1600);
}

//----- (0074AC60) --------------------------------------------------------
void __cdecl luaT_init(lua_State *L)
{
  signed int v1; // esi@1

  v1 = 42;
  do
  {
    *(void *(__cdecl **)(void *, void *, unsigned int, unsigned int))((char *)&L->l_G->frealloc + v1 * 4) = (void *(__cdecl *)(void *, void *, unsigned int, unsigned int))luaS_new(L, luaT_eventname[v1 - 42]);
    (*(_BYTE **)((char *)&L->l_G->frealloc + v1 * 4))[5] |= 0x20u;
    ++v1;
  }
  while ( v1 < 59 );
}

//----- (0074ACB0) --------------------------------------------------------
lua_TValue *__cdecl luaT_gettm(Table *events, TMS event, TString *ename)
{
  lua_TValue *result; // eax@1

  result = luaH_getstr(events, ename);
  if ( result->u.i.tt__ == 2146936064 )
  {
    events->flags |= 1 << event;
    result = 0;
  }
  return result;
}

//----- (0074ACE0) --------------------------------------------------------
lua_TValue *__cdecl luaT_gettmbyobj(lua_State *L, lua_TValue *o, TMS event)
{
  int v3; // ecx@1
  int v4; // edx@1
  char v5; // al@2
  int v6; // eax@4
  Table *v7; // ecx@7
  lua_TValue *result; // eax@12

  v3 = o->u.i.tt__;
  v4 = o->u.i.tt__ & 0x7FFFFF00;
  if ( v4 == 2146936064 )
    v5 = o->u.i.tt__;
  else
    v5 = 3;
  v6 = (v5 & 0xF) - 5;
  if ( v6 )
  {
    if ( v6 == 2 )
    {
      v7 = (Table *)o->u.i.v__.gc->ts.tsv.hash;
    }
    else
    {
      if ( v4 == 2146936064 )
        v7 = L->l_G->mt[v3 & 0xF];
      else
        v7 = L->l_G->mt[3];
    }
  }
  else
  {
    v7 = (Table *)o->u.i.v__.gc->ts.tsv.hash;
  }
  if ( v7 )
    result = luaH_getstr(v7, L->l_G->tmname[event]);
  else
    result = &luaO_nilobject_;
  return result;
}

//----- (0074AD80) --------------------------------------------------------
lua_TValue *__cdecl luaV_tonumber(lua_TValue *obj, lua_TValue *n)
{
  lua_TValue *result; // eax@1
  double num; // [sp+0h] [bp-8h]@3

  result = obj;
  if ( (obj->u.i.tt__ & 0x7FFFFF00) == 2146936064 )
  {
    if ( (obj->u.i.tt__ | 0x70) == 2146936180
      && luaO_str2d((const char *)&obj->u.i.v__.gc->u.uv.len, obj->u.i.v__.gc->ts.tsv.len, &num) )
    {
      result = n;
      *(_QWORD *)&n->u.i.v__.gc = *(_QWORD *)&num;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0074ADE0) --------------------------------------------------------
int __cdecl luaV_tostring(lua_State *L, lua_TValue *obj)
{
  int result; // eax@2
  int v3; // eax@3
  TString *v4; // eax@3
  char s[32]; // [sp+10h] [bp-24h]@3
  unsigned int v6; // [sp+30h] [bp-4h]@1
  int v7; // [sp+34h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  if ( (obj->u.i.tt__ & 0x7FFFFF00) == 2146936064 )
  {
    result = 0;
  }
  else
  {
    v3 = sprintf(s, "%.14g");
    v4 = luaS_newlstr(L, s, v3);
    obj->u.i.v__.gc = (GCObject *)v4;
    obj->u.i.tt__ = BYTE4(v4->dummy.u) | 0x7FF7A540;
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (0074AE60) --------------------------------------------------------
void __usercall callTM(lua_State *L<eax>, lua_TValue *p1<edx>, lua_TValue *p2<ecx>, lua_TValue *f, lua_TValue *p3, int hasres)
{
  lua_State *v6; // esi@1
  lua_TValue *v7; // eax@1
  char *v8; // edi@1
  lua_TValue *v9; // eax@1
  lua_TValue *v10; // eax@1
  lua_TValue *v11; // eax@2
  int v12; // eax@4
  lua_TValue *v13; // esi@4

  v6 = L;
  v7 = L->top;
  v6->top = v7 + 1;
  v8 = (char *)((char *)p3 - (char *)v6->stack);
  *(_QWORD *)&v7->u.i.v__.gc = *(_QWORD *)&f->u.i.v__.gc;
  v9 = v6->top;
  v6->top = v9 + 1;
  *(_QWORD *)&v9->u.i.v__.gc = *(_QWORD *)&p1->u.i.v__.gc;
  v10 = v6->top;
  v6->top = v10 + 1;
  *(_QWORD *)&v10->u.i.v__.gc = *(_QWORD *)&p2->u.i.v__.gc;
  if ( !hasres )
  {
    v11 = v6->top;
    v6->top = v11 + 1;
    *(_QWORD *)&v11->u.i.v__.gc = *(_QWORD *)&p3->u.i.v__.gc;
  }
  luaD_call(v6, &v6->top[hasres - 4], hasres, v6->ci->callstatus & 1);
  if ( hasres )
  {
    v12 = (int)&v6->top[-1];
    v6->top = (lua_TValue *)v12;
    v13 = v6->stack;
    *(GCObject **)((char *)&v13->u.i.v__.gc + (_DWORD)v8) = *(GCObject **)v12;
    *(int *)((char *)&v13->u.i.tt__ + (_DWORD)v8) = *(_DWORD *)(v12 + 4);
  }
}

//----- (0074AF10) --------------------------------------------------------
void __cdecl luaV_gettable(lua_State *L, lua_TValue *t, lua_TValue *key, lua_TValue *val)
{
  lua_TValue *v4; // ebx@1
  Table *v5; // edi@3
  lua_TValue *v6; // eax@3
  Table *v7; // edi@4
  lua_TValue *v8; // eax@6
  lua_TValue *v9; // ecx@14
  unsigned int v10; // edi@14
  lua_TValue *v11; // eax@14
  lua_TValue *v12; // eax@14
  lua_TValue *v13; // eax@14
  lua_TValue *v14; // esi@14
  lua_TValue *res; // [sp+Ch] [bp-8h]@3
  signed int loop; // [sp+10h] [bp-4h]@1

  v4 = t;
  loop = 0;
  while ( 1 )
  {
    if ( v4->u.i.tt__ == 2146936133 )
    {
      v5 = (Table *)v4->u.i.v__.gc;
      v6 = luaH_get((Table *)v4->u.i.v__.gc, key);
      res = v6;
      if ( v6->u.i.tt__ != 2146936064 || (v7 = v5->metatable) == 0 || v7->flags & 1 )
        goto LABEL_8;
      v8 = luaT_gettm(v7, 0, L->l_G->tmname[0]);
      if ( !v8 )
      {
        v6 = res;
LABEL_8:
        *(_QWORD *)&val->u.i.v__.gc = *(_QWORD *)&v6->u.i.v__.gc;
        return;
      }
    }
    else
    {
      v8 = luaT_gettmbyobj(L, v4, 0);
      if ( v8->u.i.tt__ == 2146936064 )
        luaG_typeerror(L, v4, "index");
    }
    if ( (v8->u.i.tt__ | 0x70) == 2146936182 )
      break;
    v4 = v8;
    ++loop;
    if ( loop >= 100 )
      luaG_runerror(L, "loop in gettable");
  }
  v9 = L->top;
  v10 = (char *)val - (char *)L->stack;
  L->top = v9 + 1;
  v9->u.i.v__.gc = v8->u.i.v__.gc;
  v9->u.i.tt__ = v8->u.i.tt__;
  v11 = L->top;
  L->top = v11 + 1;
  v11->u.i.v__.gc = v4->u.i.v__.gc;
  v11->u.i.tt__ = v4->u.i.tt__;
  v12 = L->top;
  L->top = v12 + 1;
  *(_QWORD *)&v12->u.i.v__.gc = *(_QWORD *)&key->u.i.v__.gc;
  luaD_call(L, L->top - 3, 1, L->ci->callstatus & 1);
  v13 = L->top - 1;
  L->top = v13;
  v14 = L->stack;
  *(GCObject **)((char *)&v14->u.i.v__.gc + v10) = v13->u.i.v__.gc;
  *(int *)((char *)&v14->u.i.tt__ + v10) = v13->u.i.tt__;
}

//----- (0074B060) --------------------------------------------------------
void __cdecl luaV_settable(lua_State *L, lua_TValue *t, lua_TValue *key, lua_TValue *val)
{
  lua_TValue *v4; // edi@1
  lua_TValue *v5; // eax@3
  GCObject *v6; // edx@3
  lua_TValue *v7; // ebx@3
  unsigned int v8; // eax@4
  lua_TValue *v9; // eax@6
  lua_TValue *v10; // eax@9
  int v11; // ecx@10
  lua_TValue *v12; // ecx@22
  lua_TValue *v13; // eax@22
  lua_TValue *v14; // eax@22
  lua_TValue *v15; // eax@22
  signed int loop; // [sp+Ch] [bp-8h]@1
  GCObject *h; // [sp+10h] [bp-4h]@3

  v4 = t;
  loop = 0;
  while ( 1 )
  {
    if ( v4->u.i.tt__ != 2146936133 )
    {
      v9 = luaT_gettmbyobj(L, v4, TM_NEWINDEX);
      if ( v9->u.i.tt__ == 2146936064 )
        luaG_typeerror(L, v4, "index");
      goto LABEL_13;
    }
    h = v4->u.i.v__.gc;
    v5 = luaH_get((Table *)v4->u.i.v__.gc, key);
    v6 = h;
    v7 = v5;
    if ( v5->u.i.tt__ != 2146936064 )
      goto LABEL_10;
    v8 = h->ts.tsv.hash;
    if ( !v8 || *(_BYTE *)(v8 + 6) & 2 )
      goto LABEL_8;
    v9 = luaT_gettm((Table *)v8, TM_NEWINDEX, L->l_G->tmname[1]);
    if ( !v9 )
      break;
LABEL_13:
    if ( (v9->u.i.tt__ | 0x70) == 2146936182 )
    {
      v12 = L->top;
      L->top = v12 + 1;
      v12->u.i.v__.gc = v9->u.i.v__.gc;
      v12->u.i.tt__ = v9->u.i.tt__;
      v13 = L->top;
      L->top = v13 + 1;
      v13->u.i.v__.gc = v4->u.i.v__.gc;
      v13->u.i.tt__ = v4->u.i.tt__;
      v14 = L->top;
      L->top = v14 + 1;
      *(_QWORD *)&v14->u.i.v__.gc = *(_QWORD *)&key->u.i.v__.gc;
      v15 = L->top;
      L->top = v15 + 1;
      *(_QWORD *)&v15->u.i.v__.gc = *(_QWORD *)&val->u.i.v__.gc;
      luaD_call(L, L->top - 4, 0, L->ci->callstatus & 1);
      return;
    }
    v4 = v9;
    ++loop;
    if ( loop >= 100 )
      luaG_runerror(L, "loop in settable");
  }
  v6 = h;
LABEL_8:
  if ( v7 == &luaO_nilobject_ )
  {
    v10 = luaH_newkey(L, (Table *)v6, key);
    v6 = h;
    v7 = v10;
  }
LABEL_10:
  *(_QWORD *)&v7->u.i.v__.gc = *(_QWORD *)&val->u.i.v__.gc;
  *(&v6->gch.marked + 1) = 0;
  v11 = val->u.i.tt__;
  if ( (v11 & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v11) = 3;
  if ( v11 & 0x40 && val->u.i.v__.gc->gch.marked & 3 )
  {
    if ( v6->gch.marked & 4 )
      luaC_barrierback_(L, v6);
  }
}

//----- (0074B210) --------------------------------------------------------
int __usercall call_binTM<eax>(lua_State *L<ecx>, lua_TValue *p1<ebx>, lua_TValue *res<eax>, lua_TValue *p2, TMS event)
{
  lua_TValue *v5; // edi@1
  lua_State *v6; // esi@1
  lua_TValue *v7; // eax@1
  int result; // eax@3
  lua_TValue *v9; // ecx@4
  int v10; // edi@4
  lua_TValue *v11; // eax@4
  lua_TValue *v12; // eax@4
  int v13; // eax@4
  lua_TValue *v14; // esi@4

  v5 = res;
  v6 = L;
  v7 = luaT_gettmbyobj(L, p1, event);
  if ( v7->u.i.tt__ != 2146936064 || (v7 = luaT_gettmbyobj(v6, p2, event), v7->u.i.tt__ != 2146936064) )
  {
    v9 = v6->top;
    v10 = (char *)v5 - (char *)v6->stack;
    v6->top = v9 + 1;
    v9->u.i.v__.gc = v7->u.i.v__.gc;
    v9->u.i.tt__ = v7->u.i.tt__;
    v11 = v6->top;
    v6->top = v11 + 1;
    *(_QWORD *)&v11->u.i.v__.gc = *(_QWORD *)&p1->u.i.v__.gc;
    v12 = v6->top;
    v6->top = v12 + 1;
    *(_QWORD *)&v12->u.i.v__.gc = *(_QWORD *)&p2->u.i.v__.gc;
    luaD_call(v6, v6->top - 3, 1, v6->ci->callstatus & 1);
    v13 = (int)&v6->top[-1];
    v6->top = (lua_TValue *)v13;
    v14 = v6->stack;
    *(GCObject **)((char *)&v14->u.i.v__.gc + v10) = *(GCObject **)v13;
    *(int *)((char *)&v14->u.i.tt__ + v10) = *(_DWORD *)(v13 + 4);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0074B2D0) --------------------------------------------------------
lua_TValue *__usercall get_equalTM<eax>(Table *mt1<edi>, TMS event<esi>, lua_State *L, Table *mt2)
{
  lua_TValue *v4; // ebx@3
  lua_TValue *result; // eax@5
  lua_TValue *v6; // eax@8
  int v7; // edx@10
  signed int v8; // [sp+4h] [bp-4h]@2

  if ( mt1
    && (v8 = 1 << event, !((unsigned __int8)(1 << event) & mt1->flags))
    && (v4 = luaT_gettm(mt1, event, L->l_G->tmname[event])) != 0
    && (mt1 == mt2
     || mt2
     && !((unsigned __int8)v8 & mt2->flags)
     && (v6 = luaT_gettm(mt2, event, L->l_G->tmname[event])) != 0
     && ((v4->u.i.tt__ & 0x7FFFFF00) == 2146936064 ? (v7 = v4->u.i.tt__ == v6->u.i.tt__) : (v7 = (v6->u.i.tt__ & 0x7FFFFF00) != 2146936064),
         v7 && luaV_equalobj_(0, v4, v6))) )
    result = v4;
  else
    result = 0;
  return result;
}

//----- (0074B3A0) --------------------------------------------------------
int __usercall l_strcmp<eax>(TString *ls<ecx>, TString *rs<eax>)
{
  unsigned int v2; // ebx@1
  const char *v3; // edi@1
  const char *v4; // esi@1
  int result; // eax@1
  unsigned int v6; // eax@2
  int v7; // eax@4
  unsigned int ll; // [sp+Ch] [bp-4h]@1

  v2 = rs->tsv.len;
  v3 = (const char *)&rs[1];
  v4 = (const char *)&ls[1];
  ll = ls->tsv.len;
  result = strcoll((const char *)&ls[1], (const char *)&rs[1]);
  if ( !result )
  {
    while ( 1 )
    {
      v6 = strlen(v4);
      if ( v6 == v2 )
        return v6 != ll;
      if ( v6 == ll )
        break;
      v7 = v6 + 1;
      ll -= v7;
      v3 += v7;
      v4 += v7;
      v2 -= v7;
      result = strcoll(v4, v3);
      if ( result )
        return result;
    }
    result = -1;
  }
  return result;
}

//----- (0074B420) --------------------------------------------------------
int __cdecl luaV_lessthan(lua_State *L, lua_TValue *l, lua_TValue *r)
{
  int result; // eax@4
  lua_TValue *v4; // edi@10
  int v5; // eax@10

  if ( (l->u.i.tt__ & 0x7FFFFF00) == 2146936064 || (r->u.i.tt__ & 0x7FFFFF00) == 2146936064 )
  {
    if ( (l->u.i.tt__ | 0x70) != 2146936180 || (r->u.i.tt__ | 0x70) != 2146936180 )
    {
      if ( !call_binTM(L, l, r, L->top, TM_LT) )
        luaG_ordererror(L, l, r);
      v4 = L->top;
      v5 = v4->u.i.tt__;
      result = v5 != 2146936064 && (v5 != 2146936065 || v4->u.i.v__.gc);
    }
    else
    {
      result = l_strcmp((TString *)l->u.i.v__.gc, (TString *)r->u.i.v__.gc) < 0;
    }
  }
  else
  {
    result = *(double *)&r->u.i.v__.gc > *(double *)&l->u.i.v__.gc;
  }
  return result;
}

//----- (0074B4F0) --------------------------------------------------------
int __cdecl luaV_lessequal(lua_State *L, lua_TValue *l, lua_TValue *r)
{
  int result; // eax@4
  lua_TValue *v4; // esi@10
  int v5; // eax@10
  lua_TValue *v6; // esi@16
  int v7; // eax@16

  if ( (l->u.i.tt__ & 0x7FFFFF00) == 2146936064 || (r->u.i.tt__ & 0x7FFFFF00) == 2146936064 )
  {
    if ( (l->u.i.tt__ | 0x70) != 2146936180 || (r->u.i.tt__ | 0x70) != 2146936180 )
    {
      if ( call_binTM(L, l, r, L->top, TM_LE) )
      {
        v4 = L->top;
        v5 = v4->u.i.tt__;
        result = v5 != 2146936064 && (v5 != 2146936065 || v4->u.i.v__.gc);
      }
      else
      {
        if ( !call_binTM(L, r, l, L->top, TM_LT) )
          luaG_ordererror(L, l, r);
        v6 = L->top;
        v7 = v6->u.i.tt__;
        result = v7 == 2146936064 || v7 == 2146936065 && !v6->u.i.v__.gc;
      }
    }
    else
    {
      result = l_strcmp((TString *)l->u.i.v__.gc, (TString *)r->u.i.v__.gc) <= 0;
    }
  }
  else
  {
    result = *(double *)&r->u.i.v__.gc >= *(double *)&l->u.i.v__.gc;
  }
  return result;
}

//----- (0074B610) --------------------------------------------------------
int __cdecl luaV_equalobj_(lua_State *L, lua_TValue *t1, lua_TValue *t2)
{
  int v3; // ecx@1
  int result; // eax@4
  lua_TValue *v5; // eax@11
  lua_TValue *v6; // ebx@12
  int v7; // eax@12

  v3 = t1->u.i.tt__;
  if ( (t1->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v3) = 3;
  switch ( v3 & 0x3F )
  {
    case 0:
      goto $LN17_86;
    case 3:
      if ( *(double *)&t2->u.i.v__.gc != *(double *)&t1->u.i.v__.gc )
        goto LABEL_6;
      goto $LN17_86;
    case 1:
    case 2:
    case 4:
    case 0x16:
      return t1->u.i.v__.gc == t2->u.i.v__.gc;
    case 0x14:
      return luaS_eqlngstr((TString *)t1->u.i.v__.gc, (TString *)t2->u.i.v__.gc);
    case 5:
    case 7:
      if ( t1->u.i.v__.gc == t2->u.i.v__.gc )
        goto $LN17_86;
      if ( !L
        || (v5 = get_equalTM(L, (Table *)t1->u.i.v__.gc->ts.tsv.hash, (Table *)t2->u.i.v__.gc->ts.tsv.hash, TM_EQ)) == 0
        || (callTM(L, v5, t1, t2, L->top, 1), v6 = L->top, v7 = v6->u.i.tt__, v7 == 2146936064) )
        goto LABEL_6;
      if ( v7 == 2146936065 )
      {
        if ( v6->u.i.v__.gc )
          result = 1;
        else
LABEL_6:
          result = 0;
      }
      else
      {
$LN17_86:
        result = 1;
      }
      break;
    default:
      result = t1->u.i.v__.gc == t2->u.i.v__.gc;
      break;
  }
  return result;
}

//----- (0074B750) --------------------------------------------------------
void __cdecl luaV_concat(lua_State *L, int total)
{
  lua_State *v2; // edi@1
  lua_TValue *v3; // esi@2
  int v4; // eax@6
  TString *v5; // eax@6
  unsigned int v6; // ecx@7
  int v7; // edx@7
  int v8; // eax@10
  TString *v9; // eax@10
  int v10; // ebx@16
  int v11; // edi@17
  int v12; // eax@20
  TString *v13; // eax@20
  unsigned int v14; // eax@21
  int v15; // edi@24
  unsigned int v16; // ST28_4@25
  int v17; // esi@26
  TString *v18; // eax@26
  int v19; // [sp+18h] [bp-38h]@24
  char *buffer; // [sp+1Ch] [bp-34h]@24
  signed int n; // [sp+20h] [bp-30h]@2
  unsigned int tl; // [sp+28h] [bp-28h]@16
  unsigned int tla; // [sp+28h] [bp-28h]@24
  char str; // [sp+2Ch] [bp-24h]@6
  unsigned int v25; // [sp+4Ch] [bp-4h]@1
  int v26; // [sp+50h] [bp+0h]@1

  v25 = (unsigned int)&v26 ^ __security_cookie;
  v2 = L;
  do
  {
    v3 = v2->top;
    n = 2;
    if ( (*((_DWORD *)&v3[-1] - 1) | 0x70) != 2146936180 && (*((_DWORD *)&v3[-1] - 1) & 0x7FFFFF00) == 2146936064 )
    {
LABEL_11:
      if ( !call_binTM(v2, v3 - 2, v3 - 1, v3 - 2, TM_CONCAT) )
        luaG_concaterror(v2, v3 - 2, v3 - 1);
      goto LABEL_27;
    }
    if ( (*((_DWORD *)v3 - 1) | 0x70) != 2146936180 )
    {
      if ( (*((_DWORD *)v3 - 1) & 0x7FFFFF00) == 2146936064 )
        goto LABEL_11;
      v4 = sprintf(&str, "%.14g");
      v5 = luaS_newlstr(v2, &str, v4);
      v3[-1].u.i.v__.gc = (GCObject *)v5;
      *((_DWORD *)v3 - 1) = BYTE4(v5->dummy.u) | 0x7FF7A540;
    }
    v6 = v3[-1].u.i.v__.gc->ts.tsv.len;
    v7 = *((_DWORD *)&v3[-1] - 1) | 0x70;
    if ( v6 )
    {
      if ( v7 != 2146936180 || v3[-2].u.i.v__.gc->ts.tsv.len )
      {
        v10 = 1;
        tl = v3[-1].u.i.v__.gc->ts.tsv.len;
        if ( total > 1 )
        {
          v11 = (int)&v3[-2];
          do
          {
            if ( (*(_DWORD *)(v11 + 4) | 0x70) != 2146936180 )
            {
              if ( (*(_DWORD *)(v11 + 4) & 0x7FFFFF00) == 2146936064 )
                break;
              v12 = sprintf(&str, "%.14g");
              v13 = luaS_newlstr(L, &str, v12);
              v6 = tl;
              *(_DWORD *)v11 = v13;
              *(_DWORD *)(v11 + 4) = BYTE4(v13->dummy.u) | 0x7FF7A540;
            }
            v14 = *(_DWORD *)(*(_DWORD *)v11 + 12);
            if ( v14 >= -3 - v6 )
              luaG_runerror(L, "string length overflow");
            v6 += v14;
            ++v10;
            v11 -= 8;
            tl = v6;
          }
          while ( v10 < total );
          v2 = L;
        }
        buffer = luaZ_openspace(v2, &v2->l_G->buff, v6);
        tla = 0;
        n = v10;
        v19 = 8 * v10;
        v15 = (int)&v3[-v10];
        do
        {
          v16 = *(_DWORD *)(*(_DWORD *)v15 + 12);
          memcpy(&buffer[tla], (char *)(*(_DWORD *)v15 + 16), v16);
          tla += v16;
          --v10;
          v15 += 8;
        }
        while ( v10 > 0 );
        v17 = (int)&v3[-v19 / 8u];
        v18 = luaS_newlstr(L, buffer, tla);
        v2 = L;
        *(_DWORD *)v17 = v18;
        *(_DWORD *)(v17 + 4) = BYTE4(v18->dummy.u) | 0x7FF7A540;
      }
      else
      {
        v3[-2].u.i.v__.gc = v3[-1].u.i.v__.gc;
        *((_DWORD *)&v3[-1] - 1) = *((_DWORD *)v3 - 1);
      }
    }
    else
    {
      if ( v7 != 2146936180 )
      {
        if ( (*((_DWORD *)&v3[-1] - 1) & 0x7FFFFF00) != 2146936064 )
        {
          v8 = sprintf(&str, "%.14g");
          v9 = luaS_newlstr(v2, &str, v8);
          v3[-2].u.i.v__.gc = (GCObject *)v9;
          *((_DWORD *)&v3[-1] - 1) = BYTE4(v9->dummy.u) | 0x7FF7A540;
        }
      }
    }
LABEL_27:
    v2->top = (lua_TValue *)((char *)v2->top + 8 - 8 * n);
    total += 1 - n;
  }
  while ( total > 1 );
}
// A85C00: using guessed type int __security_cookie;

//----- (0074BA10) --------------------------------------------------------
void __cdecl luaV_objlen(lua_State *L, lua_TValue *ra, lua_TValue *rb)
{
  int v3; // eax@1
  int v4; // eax@3
  lua_State *v5; // esi@5
  lua_TValue *v6; // eax@5
  GCObject *v7; // edi@7
  unsigned int v8; // eax@7
  lua_TValue *v9; // ecx@10
  char *v10; // edi@10
  lua_TValue *v11; // eax@10
  lua_TValue *v12; // eax@10
  int v13; // eax@10
  lua_TValue *v14; // esi@10

  v3 = rb->u.i.tt__;
  if ( (rb->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v3) = 3;
  v4 = (v3 & 0xF) - 4;
  if ( v4 )
  {
    if ( v4 != 1 )
    {
      v5 = L;
      v6 = luaT_gettmbyobj(L, rb, TM_LEN);
      if ( v6->u.i.tt__ == 2146936064 )
        luaG_typeerror(L, rb, "get length of");
LABEL_10:
      v9 = v5->top;
      v10 = (char *)((char *)ra - (char *)v5->stack);
      v5->top = v9 + 1;
      v9->u.i.v__.gc = v6->u.i.v__.gc;
      v9->u.i.tt__ = v6->u.i.tt__;
      v11 = v5->top;
      v5->top = v11 + 1;
      *(_QWORD *)&v11->u.i.v__.gc = *(_QWORD *)&rb->u.i.v__.gc;
      v12 = v5->top;
      v5->top = v12 + 1;
      *(_QWORD *)&v12->u.i.v__.gc = *(_QWORD *)&rb->u.i.v__.gc;
      luaD_call(v5, v5->top - 3, 1, v5->ci->callstatus & 1);
      v13 = (int)&v5->top[-1];
      v5->top = (lua_TValue *)v13;
      v14 = v5->stack;
      *(_DWORD *)&v10[(_DWORD)v14] = *(_DWORD *)v13;
      *(_DWORD *)&v10[(_DWORD)v14 + 4] = *(_DWORD *)(v13 + 4);
      return;
    }
    v7 = rb->u.i.v__.gc;
    v8 = rb->u.i.v__.gc->ts.tsv.hash;
    if ( v8 )
    {
      if ( !(*(_BYTE *)(v8 + 6) & 0x10) )
      {
        v5 = L;
        v6 = luaT_gettm((Table *)v8, TM_LEN, L->l_G->tmname[4]);
        if ( v6 )
          goto LABEL_10;
      }
    }
    *(double *)&ra->u.i.v__.gc = (double)luaH_getn((Table *)v7);
  }
  else
  {
    *(double *)&ra->u.i.v__.gc = (double)rb->u.i.v__.gc->ts.tsv.len;
  }
}

//----- (0074BB50) --------------------------------------------------------
void __cdecl luaV_arith(lua_State *L, lua_TValue *ra, lua_TValue *rb, lua_TValue *rc, TMS op)
{
  lua_TValue *v5; // esi@1
  lua_TValue *v6; // edi@2
  lua_TValue tempc; // [sp+1Ch] [bp-10h]@8
  lua_TValue tempb; // [sp+24h] [bp-8h]@4

  v5 = rc;
  if ( (rb->u.i.tt__ & 0x7FFFFF00) == 2146936064 )
  {
    if ( (rb->u.i.tt__ | 0x70) != 2146936180
      || !luaO_str2d((const char *)&rb->u.i.v__.gc->u.uv.len, rb->u.i.v__.gc->ts.tsv.len, (long double *)&tempb) )
      goto LABEL_12;
    v6 = &tempb;
  }
  else
  {
    v6 = rb;
  }
  if ( (rc->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
  {
LABEL_10:
    *(long double *)&ra->u.i.v__.gc = luaO_arith(op - 6, *(double *)&v6->u.i.v__.gc, *(double *)&v5->u.i.v__.gc);
    return;
  }
  if ( (rc->u.i.tt__ | 0x70) == 2146936180
    && luaO_str2d((const char *)&rc->u.i.v__.gc->u.uv.len, rc->u.i.v__.gc->ts.tsv.len, (long double *)&tempc) )
  {
    v5 = &tempc;
    goto LABEL_10;
  }
LABEL_12:
  if ( !call_binTM(L, rb, rc, ra, op) )
    luaG_aritherror(L, rb, rc);
}

//----- (0074BC40) --------------------------------------------------------
Closure *__usercall getcached<eax>(Proto *p<ecx>, UpVal **encup, lua_TValue *base)
{
  Closure *result; // eax@1
  int v4; // ebx@2
  Upvaldesc *v5; // ecx@2
  int v6; // edx@2
  char *v7; // edi@3
  int v8; // ecx@3
  int v9; // eax@4
  lua_TValue *v10; // esi@5
  Closure *c; // [sp+Ch] [bp-4h]@1

  result = p->cache;
  c = result;
  if ( result )
  {
    v4 = p->sizeupvalues;
    v5 = p->upvalues;
    v6 = 0;
    if ( v4 > 0 )
    {
      v7 = (char *)result->c.upvalue;
      v8 = (int)&v5->idx;
      while ( 1 )
      {
        v9 = *(_BYTE *)v8;
        v10 = *(_BYTE *)(v8 - 1) ? &base[v9] : encup[v9]->v;
        if ( *(lua_TValue **)(*(_DWORD *)v7 + 8) != v10 )
          break;
        ++v6;
        v7 += 4;
        v8 += 8;
        if ( v6 >= v4 )
          return c;
      }
      result = 0;
    }
  }
  return result;
}

//----- (0074BCB0) --------------------------------------------------------
void __usercall pushclosure(lua_TValue *ra<eax>, lua_State *L, Proto *p, UpVal **encup, lua_TValue *base)
{
  Proto *v5; // ebx@1
  int v6; // esi@1
  lua_TValue *v7; // edi@1
  Closure *v8; // eax@1
  int v9; // ebx@2
  int v10; // edi@2
  Upvaldesc *uv; // [sp+Ch] [bp-8h]@1
  Closure *ncl; // [sp+10h] [bp-4h]@1

  v5 = p;
  v6 = p->sizeupvalues;
  v7 = ra;
  uv = p->upvalues;
  v8 = luaF_newLclosure(L, p->sizeupvalues);
  v8->c.f = (int (__cdecl *)(lua_State *))p;
  ncl = v8;
  v7->u.i.v__.gc = (GCObject *)v8;
  v7->u.i.tt__ = 2146936134;
  if ( v6 > 0 )
  {
    v9 = (int)v8->c.upvalue;
    v10 = (int)&uv->idx;
    do
    {
      if ( *(_BYTE *)(v10 - 1) )
      {
        *(_DWORD *)v9 = luaF_findupval(L, &base[*(_BYTE *)v10]);
        v8 = ncl;
      }
      else
      {
        *(_DWORD *)v9 = encup[*(_BYTE *)v10];
      }
      v9 += 4;
      v10 += 8;
      --v6;
    }
    while ( v6 );
    v5 = p;
  }
  if ( v5->marked & 4 )
  {
    luaC_barrierproto_(L, v5, v8);
    v8 = ncl;
  }
  v5->cache = v8;
}

//----- (0074BD50) --------------------------------------------------------
void __cdecl luaV_finishOp(lua_State *L)
{
  lua_State *v1; // edi@1
  CallInfo *v2; // ebx@1
  unsigned int v3; // esi@1
  lua_TValue *v4; // ecx@1
  int v5; // eax@1
  lua_TValue *v6; // eax@2
  int v7; // esi@2
  lua_TValue *v8; // ecx@3
  int v9; // edx@3
  lua_TValue *v10; // eax@13
  signed int v11; // ecx@13
  lua_TValue *v12; // eax@15
  lua_TValue *v13; // ecx@15
  int v14; // esi@15
  lua_TValue *base; // [sp+Ch] [bp-4h]@1
  int res; // [sp+18h] [bp+8h]@6

  v1 = L;
  v2 = L->ci;
  v3 = *(v2->u.l.savedpc - 1);
  v4 = v2->u.l.base;
  v5 = *(v2->u.l.savedpc - 1) & 0x3F;
  base = v2->u.l.base;
  switch ( v5 )
  {
    case 6:
    case 7:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
    case 21:
      v6 = L->top - 1;
      L->top = v6;
      v7 = (v3 >> 6) & 0xFF;
      v4[v7].u.i.v__.gc = v6->u.i.v__.gc;
      v4[v7].u.i.tt__ = v6->u.i.tt__;
      break;
    case 24:
    case 25:
    case 26:
      v8 = L->top;
      v9 = *((_DWORD *)v8 - 1);
      res = v9 != 2146936064 && (v9 != 2146936065 || v8[-1].u.i.v__.gc);
      v1->top = v8 - 1;
      if ( v5 == 26 && luaT_gettmbyobj(v1, &base[v3 >> 23], TM_LE)->u.i.tt__ == 2146936064 )
        res = res == 0;
      if ( res != ((v3 >> 6) & 0xFF) )
        ++v2->u.l.savedpc;
      break;
    case 22:
      v10 = L->top;
      v11 = &v10[-(v3 >> 23) - 2] - base;
      v10[-3].u.i.v__.gc = v10[-1].u.i.v__.gc;
      *((_DWORD *)&v10[-2] - 1) = *((_DWORD *)v10 - 1);
      if ( v11 > 1 )
      {
        L->top = v10 - 2;
        luaV_concat(L, v11);
      }
      v12 = L->top;
      v13 = v2->u.l.base;
      v14 = (v3 >> 6) & 0xFF;
      v13[v14].u.i.v__.gc = v12[-1].u.i.v__.gc;
      v13[v14].u.i.tt__ = *((_DWORD *)v12 - 1);
      L->top = v2->top;
      break;
    case 34:
      L->top = v2->top;
      break;
    case 29:
      if ( ((((v3 >> 14) & 0x1FF) - 1) & 0x80000000u) == 0 )
        L->top = v2->top;
      break;
    default:
      return;
  }
}

//----- (0074BEF0) --------------------------------------------------------
void __cdecl luaV_execute(lua_State *L)
{
  lua_TValue *v1; // ebx@2
  const unsigned int *v2; // eax@3
  unsigned int v3; // esi@3
  lua_State *v4; // edi@3
  char v5; // cl@3
  bool v6; // zf@4
  CallInfo *v7; // ebx@6
  int v8; // eax@8
  signed int v9; // edx@8
  char v10; // al@9
  unsigned int v11; // ecx@15
  int v12; // edi@15
  const unsigned int *v13; // edx@15
  int v14; // ecx@15
  int v15; // eax@15
  const unsigned int *v16; // eax@19
  int v17; // eax@21
  int v18; // edi@27
  unsigned int v19; // esi@28
  void *v20; // eax@29
  unsigned int v21; // esi@29
  const unsigned int *v22; // eax@30
  void *v23; // esi@30
  const unsigned int v24; // ecx@30
  unsigned int v25; // esi@33
  int v26; // eax@33
  unsigned int v27; // edx@34
  int v28; // eax@36
  unsigned int v29; // ecx@37
  unsigned int v30; // esi@37
  unsigned int v31; // ecx@37
  int v32; // eax@38
  unsigned int v33; // eax@43
  lua_TValue *v34; // eax@44
  unsigned int v35; // eax@47
  lua_TValue *v36; // ecx@48
  unsigned int v37; // esi@50
  lua_TValue *v38; // eax@51
  int v39; // esi@54
  int v40; // eax@54
  int v41; // eax@54
  int v42; // edi@57
  unsigned int v43; // eax@60
  lua_TValue *v44; // ecx@61
  unsigned int v45; // esi@63
  lua_TValue *v46; // eax@64
  int v47; // ebx@67
  Table *v48; // esi@67
  int v49; // eax@69
  int v50; // eax@73
  unsigned int v51; // esi@73
  unsigned int v52; // eax@76
  int v53; // ecx@77
  unsigned int v54; // esi@79
  int v55; // eax@80
  unsigned int v56; // eax@86
  int v57; // ecx@87
  unsigned int v58; // esi@89
  int v59; // eax@90
  unsigned int v60; // eax@96
  int v61; // ecx@97
  unsigned int v62; // esi@99
  int v63; // eax@100
  unsigned int v64; // eax@106
  int v65; // ecx@107
  unsigned int v66; // esi@109
  int v67; // eax@110
  unsigned int v68; // eax@116
  int v69; // ecx@117
  unsigned int v70; // esi@119
  int v71; // eax@120
  double v72; // st7@124
  unsigned int v73; // eax@126
  int v74; // ecx@127
  unsigned int v75; // esi@129
  int v76; // eax@130
  int v77; // eax@136
  unsigned int v78; // esi@139
  int v79; // eax@139
  unsigned int v80; // edi@145
  int v81; // esi@145
  lua_TValue *v82; // ecx@145
  int v83; // eax@145
  int v84; // edi@145
  CallInfo *v85; // eax@148
  unsigned int v86; // eax@153
  int v87; // edi@154
  unsigned int v88; // esi@156
  int v89; // eax@157
  int v90; // edx@160
  int v91; // eax@164
  CallInfo *v92; // esi@166
  unsigned int v93; // edi@168
  unsigned int v94; // eax@171
  lua_TValue *v95; // ecx@172
  unsigned int v96; // esi@174
  lua_TValue *v97; // eax@175
  lua_State *v98; // ebx@177
  int v99; // eax@177
  CallInfo *v100; // esi@178
  unsigned int v101; // edi@180
  unsigned int v102; // eax@183
  lua_TValue *v103; // ecx@184
  unsigned int v104; // esi@186
  lua_TValue *v105; // eax@188
  int v106; // eax@189
  CallInfo *v107; // ecx@193
  unsigned int v108; // esi@193
  int v109; // ecx@201
  int v110; // eax@201
  unsigned int v111; // eax@210
  int v112; // esi@210
  CallInfo *v113; // ecx@214
  unsigned int v114; // esi@215
  double v115; // st7@219
  double v116; // st6@219
  double v117; // st5@219
  double v118; // st7@219
  int v119; // eax@224
  int v120; // ecx@224
  int v121; // eax@235
  CallInfo *v122; // ecx@238
  const unsigned int *v123; // eax@238
  int v124; // eax@241
  int v125; // esi@241
  int v126; // ecx@241
  const unsigned int *v127; // edx@244
  int v128; // edx@245
  int v129; // esi@245
  int v130; // edi@248
  int v131; // eax@249
  Proto *v132; // esi@257
  Closure *v133; // eax@257
  Proto *v134; // ST08_4@258
  lua_State *v135; // esi@258
  CallInfo *v136; // ecx@261
  int v137; // esi@262
  int v138; // eax@262
  int v139; // esi@262
  lua_State *v140; // ecx@263
  unsigned int v141; // edx@263
  int v142; // ecx@266
  int v143; // eax@267
  CallInfo *v144; // edi@273
  CallInfo *v145; // eax@274
  unsigned int v146; // edi@274
  int v147; // ecx@274
  lua_TValue *v148; // edx@274
  CallInfo *v149; // esi@274
  lua_TValue *v150; // ebx@274
  int v151; // eax@274
  unsigned int v152; // edx@274
  bool v153; // sf@274
  int v154; // ecx@277
  int v155; // eax@277
  int v156; // eax@278
  int v157; // ecx@279
  lua_TValue *v158; // ebx@279
  const unsigned int *v159; // ecx@279
  unsigned int v160; // esi@280
  int v161; // eax@284
  CallInfo *v162; // ecx@285
  lua_TValue *v163; // [sp-4h] [bp-54h]@40
  lua_TValue *v164[5]; // [sp+0h] [bp-50h]@40
  int v165; // [sp+4h] [bp-4Ch]@0
  int v166; // [sp+4h] [bp-4Ch]@40
  double v167; // [sp+14h] [bp-3Ch]@234
  double v168; // [sp+1Ch] [bp-34h]@230
  long double result; // [sp+24h] [bp-2Ch]@226
  lua_TValue nci; // [sp+2Ch] [bp-24h]@15
  lua_TValue v171; // [sp+34h] [bp-1Ch]@124
  int b; // [sp+38h] [bp-18h]@16
  GCObject *v173; // [sp+3Ch] [bp-14h]@2
  int n; // [sp+40h] [bp-10h]@8
  void *k; // [sp+44h] [bp-Ch]@2
  CallInfo *ci; // [sp+48h] [bp-8h]@1
  char v177; // [sp+4Fh] [bp-1h]@3

  ci = L->ci;
newframe:
  v1 = ci->u.l.base;
  v173 = ci->func->u.i.v__.gc;
  k = *(void **)(v173->ts.tsv.len + 8);
  while ( 2 )
  {
    v2 = ci->u.l.savedpc;
    v3 = *v2;
    v4 = L;
    ci->u.l.savedpc = v2 + 1;
    v5 = L->hookmask;
    v177 = v5;
    if ( v5 & 0xC )
    {
      v6 = L->hookcount-- == 1;
      if ( v6 || v5 & 4 )
      {
        v7 = L->ci;
        if ( !(v5 & 8) || L->hookcount )
        {
          v9 = 0;
          n = 0;
        }
        else
        {
          v8 = L->basehookcount;
          v9 = 1;
          n = 1;
          L->hookcount = v8;
        }
        v10 = v7->callstatus;
        if ( v10 >= 0 )
        {
          if ( v9 )
          {
            luaD_hook(L, 3, v165);
            v5 = v177;
          }
          if ( v5 & 4 )
          {
            v11 = v7->func->u.i.v__.gc->ts.tsv.len;
            v12 = *(_DWORD *)(v11 + 12);
            v13 = v7->u.l.savedpc;
            v14 = *(_DWORD *)(v11 + 20);
            v15 = ((signed int)((char *)v7->u.l.savedpc - v12) >> 2) - 1;
            nci.u.i.tt__ = v12;
            b = v14 ? *(_DWORD *)(v14 + 4 * v15) : 0;
            if ( (v4 = L, !v15)
              || (v16 = L->oldpc, v13 <= v16)
              || (!v14 ? (v17 = 0) : (v17 = *(_DWORD *)(v14 + 4 * ((signed int)((char *)v16 - nci.u.i.tt__) >> 2) - 4)),
                  b != v17) )
              luaD_hook(L, 2, b);
          }
          v6 = v4->status == 1;
          v4->oldpc = v7->u.l.savedpc;
          if ( v6 )
          {
            if ( n )
              v4->hookcount = 1;
            --v7->u.l.savedpc;
            v7->callstatus |= 0x80u;
            v7->func = v4->top - 1;
            luaD_throw(v4, 1);
          }
        }
        else
        {
          v7->callstatus = v10 & 0x7F;
        }
        v1 = ci->u.l.base;
      }
    }
    n = (v3 >> 6) & 0xFF;
    v18 = (int)&v1[n];
    switch ( v3 & 0x3F )
    {
      case 0u:
        v19 = v3 >> 23;
        *(_DWORD *)v18 = v1[v19].u.i.v__.gc;
        *(_DWORD *)(v18 + 4) = v1[v19].u.i.tt__;
        continue;
      case 1u:
        v20 = k;
        v21 = v3 >> 14;
        *(_DWORD *)v18 = *((_DWORD *)k + 2 * v21);
        *(_DWORD *)(v18 + 4) = *((_DWORD *)v20 + 2 * v21 + 1);
        continue;
      case 2u:
        v22 = ci->u.l.savedpc;
        v23 = k;
        v24 = *v22 >> 6;
        ci->u.l.savedpc = v22 + 1;
        *(_DWORD *)v18 = *((_DWORD *)v23 + 2 * v24);
        *(_DWORD *)(v18 + 4) = *((_DWORD *)v23 + 2 * v24 + 1);
        continue;
      case 3u:
        *(_DWORD *)v18 = v3 >> 23;
        *(_DWORD *)(v18 + 4) = 2146936065;
        if ( (unsigned int)((char *)loc_7FBFFC + 4) & v3 )
          ++ci->u.l.savedpc;
        continue;
      case 4u:
        v25 = v3 >> 23;
        v26 = v18 + 4;
        do
        {
          v27 = v25;
          *(_DWORD *)v26 = 2146936064;
          v26 += 8;
          --v25;
        }
        while ( v27 );
        continue;
      case 5u:
        v28 = *(_DWORD *)(*(&v173->u.uv.len + (v3 >> 23)) + 8);
        *(_DWORD *)v18 = *(_DWORD *)v28;
        *(_DWORD *)(v18 + 4) = *(_DWORD *)(v28 + 4);
        continue;
      case 6u:
        v29 = v3;
        v30 = v3 >> 14;
        v31 = v29 >> 23;
        if ( v30 & 0x100 )
          v32 = (int)((char *)k + 8 * (unsigned __int8)v30);
        else
          v32 = (int)&v1[v30 & 0x1FF];
        v166 = (int)&v1[n];
        v164[0] = (lua_TValue *)v32;
        v163 = *(lua_TValue **)(*(&v173->u.uv.len + v31) + 8);
        goto LABEL_41;
      case 7u:
        v33 = v3 >> 14;
        if ( (v3 >> 14) & 0x100 )
          v34 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v33);
        else
          v34 = &v1[v33 & 0x1FF];
        luaV_gettable(L, &v1[v3 >> 23], v34, (lua_TValue *)v18);
        v1 = ci->u.l.base;
        continue;
      case 8u:
        v35 = v3 >> 14;
        if ( (v3 >> 14) & 0x100 )
          v36 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v35);
        else
          v36 = &v1[v35 & 0x1FF];
        v37 = v3 >> 23;
        if ( v37 & 0x100 )
          v38 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v37);
        else
          v38 = &v1[v37];
        luaV_settable(L, *(lua_TValue **)(*(&v173->u.uv.len + n) + 8), v38, v36);
        v1 = ci->u.l.base;
        continue;
      case 9u:
        v39 = *(&v173->u.uv.len + (v3 >> 23));
        v40 = *(_DWORD *)(v39 + 8);
        *(_DWORD *)v40 = *(_DWORD *)v18;
        *(_DWORD *)(v40 + 4) = *(_DWORD *)(v18 + 4);
        v41 = *(_DWORD *)(v18 + 4);
        if ( (*(_DWORD *)(v18 + 4) & 0x7FFFFF00) != 2146936064 )
          LOBYTE(v41) = 3;
        if ( v41 & 0x40 )
        {
          v42 = *(_DWORD *)v18;
          if ( *(_BYTE *)(v42 + 5) & 3 )
          {
            if ( *(_BYTE *)(v39 + 5) & 4 )
              luaC_barrier_(L, (GCObject *)v39, (GCObject *)v42);
          }
        }
        continue;
      case 0xAu:
        v43 = v3 >> 14;
        if ( (v3 >> 14) & 0x100 )
          v44 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v43);
        else
          v44 = &v1[v43 & 0x1FF];
        v45 = v3 >> 23;
        if ( v45 & 0x100 )
          v46 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v45);
        else
          v46 = &v1[v45];
        luaV_settable(L, (lua_TValue *)v18, v46, v44);
        v1 = ci->u.l.base;
        continue;
      case 0xBu:
        v47 = v3 >> 23;
        b = (v3 >> 14) & 0x1FF;
        v48 = luaH_new(L);
        *(_DWORD *)v18 = v48;
        *(_DWORD *)(v18 + 4) = 2146936133;
        if ( v47 || b )
        {
          v165 = luaO_fb2int(b);
          v49 = luaO_fb2int(v47);
          luaH_resize(L, v48, v49, v165);
        }
        if ( L->l_G->GCdebt > 0 )
        {
          L->top = (lua_TValue *)(v18 + 8);
          luaC_step(L);
          L->top = ci->top;
        }
        v1 = ci->u.l.base;
        continue;
      case 0xCu:
        v50 = (int)&v1[v3 >> 23];
        *(_DWORD *)(v18 + 8) = v1[v3 >> 23].u.i.v__.gc;
        v51 = v3 >> 14;
        *(_DWORD *)(v18 + 12) = *(_DWORD *)(v50 + 4);
        if ( v51 & 0x100 )
        {
          v166 = v18;
          v164[0] = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v51);
          v163 = (lua_TValue *)v50;
        }
        else
        {
          v166 = v18;
          v164[0] = &v1[v51 & 0x1FF];
          v163 = (lua_TValue *)v50;
        }
LABEL_41:
        luaV_gettable(L, v163, v164[0], (lua_TValue *)v165);
        goto LABEL_42;
      case 0xDu:
        v52 = v3 >> 23;
        if ( (v3 >> 23) & 0x100 )
          v53 = (int)((char *)k + 8 * (unsigned __int8)v52);
        else
          v53 = (int)&v1[v52];
        v54 = v3 >> 14;
        if ( v54 & 0x100 )
          v55 = (int)((char *)k + 8 * (unsigned __int8)v54);
        else
          v55 = (int)&v1[v54 & 0x1FF];
        if ( (*(_DWORD *)(v53 + 4) & 0x7FFFFF00) == 2146936064 || (*(_DWORD *)(v55 + 4) & 0x7FFFFF00) == 2146936064 )
        {
          luaV_arith(L, (lua_TValue *)v18, (lua_TValue *)v53, (lua_TValue *)v55, TM_ADD);
          v1 = ci->u.l.base;
        }
        else
        {
          *(double *)v18 = *(double *)v55 + *(double *)v53;
        }
        continue;
      case 0xEu:
        v56 = v3 >> 23;
        if ( (v3 >> 23) & 0x100 )
          v57 = (int)((char *)k + 8 * (unsigned __int8)v56);
        else
          v57 = (int)&v1[v56];
        v58 = v3 >> 14;
        if ( v58 & 0x100 )
          v59 = (int)((char *)k + 8 * (unsigned __int8)v58);
        else
          v59 = (int)&v1[v58 & 0x1FF];
        if ( (*(_DWORD *)(v57 + 4) & 0x7FFFFF00) == 2146936064 || (*(_DWORD *)(v59 + 4) & 0x7FFFFF00) == 2146936064 )
        {
          luaV_arith(L, (lua_TValue *)v18, (lua_TValue *)v57, (lua_TValue *)v59, TM_SUB);
          v1 = ci->u.l.base;
        }
        else
        {
          *(double *)v18 = *(double *)v57 - *(double *)v59;
        }
        continue;
      case 0xFu:
        v60 = v3 >> 23;
        if ( (v3 >> 23) & 0x100 )
          v61 = (int)((char *)k + 8 * (unsigned __int8)v60);
        else
          v61 = (int)&v1[v60];
        v62 = v3 >> 14;
        if ( v62 & 0x100 )
          v63 = (int)((char *)k + 8 * (unsigned __int8)v62);
        else
          v63 = (int)&v1[v62 & 0x1FF];
        if ( (*(_DWORD *)(v61 + 4) & 0x7FFFFF00) == 2146936064 || (*(_DWORD *)(v63 + 4) & 0x7FFFFF00) == 2146936064 )
        {
          luaV_arith(L, (lua_TValue *)v18, (lua_TValue *)v61, (lua_TValue *)v63, TM_MUL);
          v1 = ci->u.l.base;
        }
        else
        {
          *(double *)v18 = *(double *)v63 * *(double *)v61;
        }
        continue;
      case 0x10u:
        v64 = v3 >> 23;
        if ( (v3 >> 23) & 0x100 )
          v65 = (int)((char *)k + 8 * (unsigned __int8)v64);
        else
          v65 = (int)&v1[v64];
        v66 = v3 >> 14;
        if ( v66 & 0x100 )
          v67 = (int)((char *)k + 8 * (unsigned __int8)v66);
        else
          v67 = (int)&v1[v66 & 0x1FF];
        if ( (*(_DWORD *)(v65 + 4) & 0x7FFFFF00) == 2146936064 || (*(_DWORD *)(v67 + 4) & 0x7FFFFF00) == 2146936064 )
        {
          luaV_arith(L, (lua_TValue *)v18, (lua_TValue *)v65, (lua_TValue *)v67, TM_DIV);
          v1 = ci->u.l.base;
        }
        else
        {
          *(double *)v18 = *(double *)v65 / *(double *)v67;
        }
        continue;
      case 0x11u:
        v68 = v3 >> 23;
        if ( (v3 >> 23) & 0x100 )
          v69 = (int)((char *)k + 8 * (unsigned __int8)v68);
        else
          v69 = (int)&v1[v68];
        v70 = v3 >> 14;
        if ( v70 & 0x100 )
          v71 = (int)((char *)k + 8 * (unsigned __int8)v70);
        else
          v71 = (int)&v1[v70 & 0x1FF];
        if ( (*(_DWORD *)(v69 + 4) & 0x7FFFFF00) == 2146936064 || (*(_DWORD *)(v71 + 4) & 0x7FFFFF00) == 2146936064 )
        {
          luaV_arith(L, (lua_TValue *)v18, (lua_TValue *)v69, (lua_TValue *)v71, TM_MOD);
          v1 = ci->u.l.base;
        }
        else
        {
          *(double *)&v171.u.i.v__.gc = *(double *)v69;
          *(double *)&nci.u.i.v__.gc = *(double *)v71;
          v72 = floor(*(double *)&v171.u.i.v__.gc / *(double *)&nci.u.i.v__.gc);
          *(double *)v18 = *(double *)&v171.u.i.v__.gc - v72 * *(double *)&nci.u.i.v__.gc;
        }
        continue;
      case 0x12u:
        v73 = v3 >> 23;
        if ( (v3 >> 23) & 0x100 )
          v74 = (int)((char *)k + 8 * (unsigned __int8)v73);
        else
          v74 = (int)&v1[v73];
        v75 = v3 >> 14;
        if ( v75 & 0x100 )
          v76 = (int)((char *)k + 8 * (unsigned __int8)v75);
        else
          v76 = (int)&v1[v75 & 0x1FF];
        if ( (*(_DWORD *)(v74 + 4) & 0x7FFFFF00) != 2146936064 && (*(_DWORD *)(v76 + 4) & 0x7FFFFF00) != 2146936064 )
          JUMPOUT(*(int *)loc_74C691);
        luaV_arith(L, (lua_TValue *)v18, (lua_TValue *)v74, (lua_TValue *)v76, TM_POW);
        v1 = ci->u.l.base;
        continue;
      case 0x13u:
        v77 = (int)&v1[v3 >> 23];
        if ( (*(_DWORD *)(v77 + 4) & 0x7FFFFF00) == 2146936064 )
        {
          luaV_arith(L, (lua_TValue *)v18, (lua_TValue *)v77, (lua_TValue *)v77, TM_UNM);
          v1 = ci->u.l.base;
        }
        else
        {
          *(double *)v18 = -*(double *)v77;
        }
        continue;
      case 0x14u:
        v78 = v3 >> 23;
        v79 = v1[v78].u.i.tt__;
        if ( v79 != 2146936064 && (v79 != 2146936065 || v1[v78].u.i.v__.gc) )
        {
          *(_DWORD *)v18 = 0;
          *(_DWORD *)(v18 + 4) = 2146936065;
        }
        else
        {
          *(_DWORD *)v18 = 1;
          *(_DWORD *)(v18 + 4) = 2146936065;
        }
        continue;
      case 0x15u:
        luaV_objlen(L, (lua_TValue *)v18, &v1[v3 >> 23]);
        v1 = ci->u.l.base;
        continue;
      case 0x16u:
        v80 = v3;
        v81 = (v3 >> 14) & 0x1FF;
        v80 >>= 23;
        L->top = &v1[v81 + 1];
        luaV_concat(L, v81 - v80 + 1);
        v82 = ci->u.l.base;
        v83 = (int)&v82[n];
        v84 = (int)&v82[v80];
        *(_DWORD *)v83 = *(_DWORD *)v84;
        *(_DWORD *)(v83 + 4) = *(_DWORD *)(v84 + 4);
        if ( L->l_G->GCdebt <= 0 )
        {
          v1 = ci->u.l.base;
          L->top = ci->top;
        }
        else
        {
          if ( v83 >= (unsigned int)v84 )
            v84 = v83 + 8;
          L->top = (lua_TValue *)v84;
          luaC_step(L);
          v85 = ci;
          L->top = ci->top;
          v1 = v85->u.l.base;
          L->top = v85->top;
        }
        continue;
      case 0x17u:
        if ( n > 0 )
          luaF_close(L, &ci->u.l.base[n - 1]);
        ci->u.l.savedpc += (v3 >> 14) - 131071;
        continue;
      case 0x18u:
        v86 = v3 >> 23;
        if ( (v3 >> 23) & 0x100 )
          v87 = (int)((char *)k + 8 * (unsigned __int8)v86);
        else
          v87 = (int)&v1[v86];
        v88 = v3 >> 14;
        if ( v88 & 0x100 )
          v89 = (int)((char *)k + 8 * (unsigned __int8)v88);
        else
          v89 = (int)&v1[v88 & 0x1FF];
        if ( (*(_DWORD *)(v87 + 4) & 0x7FFFFF00) == 2146936064 )
          v90 = *(_DWORD *)(v87 + 4) == *(_DWORD *)(v89 + 4);
        else
          v90 = (*(_DWORD *)(v89 + 4) & 0x7FFFFF00) != 2146936064;
        v91 = v90 && luaV_equalobj_(L, (lua_TValue *)v87, (lua_TValue *)v89);
        v92 = ci;
        if ( v91 == n )
        {
          v93 = *ci->u.l.savedpc;
          if ( (signed int)((v93 >> 6) & 0xFF) > 0 )
            luaF_close(L, &ci->u.l.base[((v93 >> 6) & 0xFF) - 1]);
          v1 = v92->u.l.base;
          v92->u.l.savedpc += (v93 >> 14) - 131070;
        }
        else
        {
          ++ci->u.l.savedpc;
          v1 = v92->u.l.base;
        }
        continue;
      case 0x19u:
        v94 = v3 >> 14;
        if ( (v3 >> 14) & 0x100 )
          v95 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v94);
        else
          v95 = &v1[v94 & 0x1FF];
        v96 = v3 >> 23;
        if ( v96 & 0x100 )
          v97 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v96);
        else
          v97 = &v1[v96];
        v98 = L;
        v99 = luaV_lessthan(L, v97, v95);
        goto LABEL_178;
      case 0x1Au:
        v102 = v3 >> 14;
        if ( (v3 >> 14) & 0x100 )
          v103 = (lua_TValue *)((char *)k + 8 * (unsigned __int8)v102);
        else
          v103 = &v1[v102 & 0x1FF];
        v104 = v3 >> 23;
        if ( v104 & 0x100 )
        {
          v98 = L;
          v99 = luaV_lessequal(L, (lua_TValue *)k + (unsigned __int8)v104, v103);
        }
        else
        {
          v105 = &v1[v104];
          v98 = L;
          v99 = luaV_lessequal(L, v105, v103);
        }
LABEL_178:
        v100 = ci;
        if ( v99 == n )
        {
          v101 = *ci->u.l.savedpc;
          if ( (const signed int)((*ci->u.l.savedpc >> 6) & 0xFF) > 0 )
            luaF_close(v98, &ci->u.l.base[((*ci->u.l.savedpc >> 6) & 0xFF) - 1]);
          v1 = v100->u.l.base;
          v100->u.l.savedpc += (v101 >> 14) - 131070;
        }
        else
        {
          ++ci->u.l.savedpc;
          v1 = v100->u.l.base;
        }
        continue;
      case 0x1Bu:
        v106 = *(_DWORD *)(v18 + 4);
        if ( (unsigned int)((char *)loc_7FBFFC + 4) & v3 )
        {
          if ( v106 != 2146936064 && (v106 != 2146936065 || *(_DWORD *)v18) )
            goto LABEL_193;
        }
        else
        {
          if ( v106 == 2146936064 || v106 == 2146936065 && !*(_DWORD *)v18 )
          {
LABEL_193:
            v107 = ci;
            v108 = *ci->u.l.savedpc;
            goto LABEL_194;
          }
        }
        ++ci->u.l.savedpc;
        continue;
      case 0x1Cu:
        v109 = v1[v3 >> 23].u.i.tt__;
        v110 = (int)&v1[v3 >> 23];
        if ( (unsigned int)((char *)loc_7FBFFC + 4) & v3 )
        {
          if ( v109 == 2146936064 || v109 == 2146936065 && !*(_DWORD *)v110 )
            goto LABEL_209;
        }
        else
        {
          if ( v109 != 2146936064 && (v109 != 2146936065 || *(_DWORD *)v110) )
          {
LABEL_209:
            ++ci->u.l.savedpc;
            continue;
          }
        }
        *(_DWORD *)v18 = *(_DWORD *)v110;
        v107 = ci;
        *(_DWORD *)(v18 + 4) = *(_DWORD *)(v110 + 4);
        v108 = *v107->u.l.savedpc;
LABEL_194:
        if ( (signed int)((v108 >> 6) & 0xFF) > 0 )
        {
          luaF_close(L, &ci->u.l.base[((v108 >> 6) & 0xFF) - 1]);
          v107 = ci;
        }
        v107->u.l.savedpc += (v108 >> 14) - 131070;
        continue;
      case 0x1Du:
        v111 = v3 >> 23;
        v112 = ((v3 >> 14) & 0x1FF) - 1;
        if ( v111 )
          L->top = (lua_TValue *)(v18 + 8 * v111);
        if ( !luaD_precall(L, (lua_TValue *)v18, v112) )
        {
          v144 = L->ci;
          v144->callstatus |= 4u;
          ci = v144;
          goto newframe;
        }
        if ( v112 < 0 )
        {
LABEL_42:
          v1 = ci->u.l.base;
        }
        else
        {
          v113 = ci;
          L->top = ci->top;
          v1 = v113->u.l.base;
        }
        continue;
      case 0x1Eu:
        v114 = v3 >> 23;
        if ( v114 )
          L->top = (lua_TValue *)(v18 + 8 * v114);
        if ( luaD_precall(L, (lua_TValue *)v18, -1) )
        {
          v1 = ci->u.l.base;
          continue;
        }
        v145 = L->ci;
        v146 = (unsigned int)v145->func;
        v147 = *(_BYTE *)(v145->func->u.i.v__.gc->ts.tsv.len + 76);
        v148 = v145->u.l.base;
        v149 = v145->previous;
        v150 = v149->func;
        nci.u.i.tt__ = (int)L->ci;
        v151 = (int)&v148[v147];
        v152 = v173->ts.tsv.len;
        v6 = *(_DWORD *)(v152 + 56) == 0;
        v153 = *(_DWORD *)(v152 + 56) < 0;
        n = v151;
        if ( !(v153 | v6) )
          luaF_close(L, v149->u.l.base);
        b = 0;
        if ( v146 < n )
        {
          v154 = v146;
          v155 = 0;
          do
          {
            v150[v155].u.i.v__.gc = *(GCObject **)v154;
            v150[v155].u.i.tt__ = *(_DWORD *)(v154 + 4);
            v156 = b + 1;
            b = v156;
            v155 = v156;
            v154 = v155 * 8 + v146;
          }
          while ( v155 * 8 + v146 < n );
        }
        v157 = nci.u.i.tt__;
        v149->u.l.base = &v150[(signed int)(*(_DWORD *)(nci.u.i.tt__ + 24) - v146) >> 3];
        v158 = &v150[(signed int)((char *)L->top - v146) >> 3];
        L->top = v158;
        v149->top = v158;
        v159 = *(const unsigned int **)(v157 + 28);
        v149->callstatus |= 0x40u;
        v149->u.l.savedpc = v159;
        L->ci = v149;
        ci = v149;
        goto newframe;
      case 0x20u:
        v115 = *(double *)(v18 + 16);
        v116 = *(double *)v18 + v115;
        v117 = v115;
        v118 = *(double *)(v18 + 8);
        if ( v117 <= 0.0 )
        {
          if ( v116 < v118 )
            continue;
        }
        else
        {
          if ( v116 > v118 )
            continue;
        }
        ci->u.l.savedpc += (v3 >> 14) - 131071;
        *(_QWORD *)v18 = *(_QWORD *)&v116;
        *(_QWORD *)(v18 + 24) = *(_QWORD *)&v116;
        continue;
      case 0x21u:
        v119 = *(_DWORD *)(v18 + 4);
        v120 = *(_DWORD *)(v18 + 4) & 0x7FFFFF00;
        n = v18 + 16;
        if ( v120 == 2146936064 )
        {
          if ( (v119 | 0x70) != 2146936180
            || !luaO_str2d((const char *)(*(_DWORD *)v18 + 16), *(_DWORD *)(*(_DWORD *)v18 + 12), &result) )
            luaG_runerror(L, "'for' initial value must be a number");
          *(_QWORD *)v18 = *(_QWORD *)&result;
        }
        if ( (*(_DWORD *)(v18 + 12) & 0x7FFFFF00) == 2146936064 )
        {
          if ( (*(_DWORD *)(v18 + 12) | 0x70) != 2146936180
            || !luaO_str2d((const char *)(*(_DWORD *)(v18 + 8) + 16), *(_DWORD *)(*(_DWORD *)(v18 + 8) + 12), &v168)
            || (*(_QWORD *)(v18 + 8) = *(_QWORD *)&v168, v18 == -8) )
            luaG_runerror(L, "'for' limit must be a number");
        }
        if ( (*(_DWORD *)(n + 4) & 0x7FFFFF00) == 2146936064 )
        {
          if ( (*(_DWORD *)(n + 4) | 0x70) != 2146936180
            || !luaO_str2d((const char *)(*(_DWORD *)n + 16), *(_DWORD *)(*(_DWORD *)n + 12), &v167)
            || (v121 = n, *(_QWORD *)n = *(_QWORD *)&v167, (n = v121) == 0) )
            luaG_runerror(L, "'for' step must be a number");
        }
        *(double *)v18 = *(double *)v18 - *(double *)n;
        goto LABEL_237;
      case 0x22u:
        *(_DWORD *)(v18 + 40) = *(_DWORD *)(v18 + 16);
        *(_DWORD *)(v18 + 44) = *(_DWORD *)(v18 + 20);
        *(_DWORD *)(v18 + 32) = *(_DWORD *)(v18 + 8);
        *(_DWORD *)(v18 + 36) = *(_DWORD *)(v18 + 12);
        *(_DWORD *)(v18 + 24) = *(_DWORD *)v18;
        *(_DWORD *)(v18 + 28) = *(_DWORD *)(v18 + 4);
        L->top = (lua_TValue *)(v18 + 48);
        luaD_call(L, (lua_TValue *)(v18 + 24), (v3 >> 14) & 0x1FF, 1);
        v1 = ci->u.l.base;
        v122 = ci;
        L->top = ci->top;
        v123 = v122->u.l.savedpc;
        v3 = *v123;
        v122->u.l.savedpc = v123 + 1;
        v18 = (int)&v1[(v3 >> 6) & 0xFF];
        goto l_tforloop;
      case 0x23u:
l_tforloop:
        if ( *(_DWORD *)(v18 + 12) != 2146936064 )
        {
          *(_DWORD *)v18 = *(_DWORD *)(v18 + 8);
          *(_DWORD *)(v18 + 4) = *(_DWORD *)(v18 + 12);
LABEL_237:
          ci->u.l.savedpc += (v3 >> 14) - 131071;
        }
        continue;
      case 0x24u:
        v124 = v3 >> 23;
        v125 = (v3 >> 14) & 0x1FF;
        n = v124;
        v126 = v125;
        if ( !v124 )
        {
          v124 = ((signed int)((char *)L->top - v18) >> 3) - 1;
          n = ((signed int)((char *)L->top - v18) >> 3) - 1;
        }
        if ( !v125 )
        {
          v127 = ci->u.l.savedpc;
          v126 = *v127 >> 6;
          ci->u.l.savedpc = v127 + 1;
        }
        v128 = *(_DWORD *)v18;
        v129 = 50 * v126 + v124 - 50;
        b = v128;
        if ( v129 > *(_DWORD *)(v128 + 28) )
        {
          luaH_resizearray(L, (Table *)v128, v129);
          v124 = n;
        }
        if ( v124 > 0 )
        {
          v130 = v18 + 8 * n;
          do
          {
            luaH_setint(L, (Table *)b, v129, (lua_TValue *)v130);
            v131 = *(_DWORD *)(v130 + 4);
            --v129;
            if ( (*(_DWORD *)(v130 + 4) & 0x7FFFFF00) != 2146936064 )
              LOBYTE(v131) = 3;
            if ( v131 & 0x40 && *(_BYTE *)(*(_DWORD *)v130 + 5) & 3 && *(_BYTE *)(b + 5) & 4 )
              luaC_barrierback_(L, (GCObject *)b);
            v130 -= 8;
            --n;
          }
          while ( n > 0 );
        }
        L->top = ci->top;
        continue;
      case 0x25u:
        v132 = *(Proto **)(*(_DWORD *)(v173->ts.tsv.len + 16) + 4 * (v3 >> 14));
        nci.u.i.tt__ = (int)&v173->u.uv.len;
        v133 = getcached(v132, (UpVal **)&v173->u.uv.len, v1);
        if ( v133 )
        {
          v135 = L;
          *(_DWORD *)v18 = v133;
          *(_DWORD *)(v18 + 4) = 2146936134;
        }
        else
        {
          v134 = v132;
          v135 = L;
          pushclosure(L, v134, (UpVal **)nci.u.i.tt__, v1, (lua_TValue *)v18);
        }
        if ( v135->l_G->GCdebt <= 0 )
          goto LABEL_42;
        v135->top = (lua_TValue *)(v18 + 8);
        luaC_step(v135);
        v136 = ci;
        v135->top = ci->top;
        v1 = v136->u.l.base;
        continue;
      case 0x26u:
        v137 = (v3 >> 23) - 1;
        v138 = v137;
        b = v137;
        v139 = v1 - ci->func - *(_BYTE *)(v173->ts.tsv.len + 76) - 1;
        if ( v138 < 0 )
        {
          v140 = L;
          v138 = v1 - ci->func - *(_BYTE *)(v173->ts.tsv.len + 76) - 1;
          v141 = L->stack_last - L->top;
          b = v1 - ci->func - *(_BYTE *)(v173->ts.tsv.len + 76) - 1;
          if ( (signed int)v141 <= v139 )
          {
            luaD_growstack(L, v139);
            v140 = L;
            v138 = v139;
          }
          v1 = ci->u.l.base;
          v18 = (int)&v1[n];
          v140->top = (lua_TValue *)(v18 + 8 * v139);
        }
        v142 = 0;
        if ( v138 > 0 )
        {
          v143 = (int)&v1[-v139];
          do
          {
            if ( v142 >= v139 )
            {
              *(_DWORD *)(v18 + 4) = 2146936064;
            }
            else
            {
              *(_DWORD *)v18 = *(_DWORD *)v143;
              *(_DWORD *)(v18 + 4) = *(_DWORD *)(v143 + 4);
            }
            ++v142;
            v143 += 8;
            v18 += 8;
          }
          while ( v142 < b );
        }
        continue;
      case 0x1Fu:
        v160 = v3 >> 23;
        if ( v160 )
          L->top = (lua_TValue *)(v18 + 8 * v160 - 8);
        if ( *(_DWORD *)(v173->ts.tsv.len + 56) > 0 )
          luaF_close(L, v1);
        v161 = luaD_poscall(L, (lua_TValue *)v18);
        if ( ci->callstatus & 4 )
        {
          v162 = L->ci;
          ci = L->ci;
          if ( v161 )
            L->top = v162->top;
          goto newframe;
        }
        return;
      default:
        continue;
    }
  }
}
// 74C691: using guessed type int __cdecl(int L);
// 7FBFFC: using guessed type int __stdcall loc_7FBFFC(int kStream);

//----- (0074D120) --------------------------------------------------------
Node *__usercall hashnum<eax>(Table *t<esi>, long double n)
{
  long double v2; // st7@1
  signed int v3; // eax@1
  int e; // [sp+10h] [bp-4h]@1

  v2 = frexp(n, &e);
  v3 = e + (signed int)(v2 * 2147482623.0);
  if ( v3 < 0 )
  {
    if ( v3 == -v3 )
      v3 = 0;
    v3 = -v3;
  }
  return &t->node[v3 % (((1 << t->lsizenode) - 1) | 1)];
}

//----- (0074D180) --------------------------------------------------------
Node *__usercall mainposition<eax>(Table *t<eax>, lua_TValue *key<edi>)
{
  Table *v2; // esi@1
  int v3; // eax@1
  Node *result; // eax@4
  GCObject *v5; // ebx@5

  v2 = t;
  v3 = key->u.i.tt__;
  if ( (key->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v3) = 3;
  switch ( v3 & 0x3F )
  {
    case 3:
      result = hashnum(v2, *(double *)&key->u.i.v__.gc);
      break;
    case 0x14:
      v5 = key->u.i.v__.gc;
      if ( !*(&key->u.i.v__.gc->gch.marked + 1) )
      {
        v5->ts.tsv.hash = luaS_hash((const char *)&v5->u.uv.len, v5->ts.tsv.len, v5->ts.tsv.hash);
        *(&v5->gch.marked + 1) = 1;
      }
      goto LABEL_7;
    case 4:
LABEL_7:
      result = &v2->node[key->u.i.v__.gc->ts.tsv.hash & ((1 << v2->lsizenode) - 1)];
      break;
    case 1:
      result = &v2->node[(unsigned int)key->u.i.v__.gc & ((1 << v2->lsizenode) - 1)];
      break;
    case 2:
      result = &v2->node[(unsigned int)key->u.i.v__.gc % (((1 << v2->lsizenode) - 1) | 1u)];
      break;
    case 0x16:
      result = &v2->node[(unsigned int)key->u.i.v__.gc % (((1 << v2->lsizenode) - 1) | 1u)];
      break;
    default:
      result = &v2->node[(unsigned int)key->u.i.v__.gc % (((1 << v2->lsizenode) - 1) | 1u)];
      break;
  }
  return result;
}

//----- (0074D2C0) --------------------------------------------------------
int __usercall findindex<eax>(Table *t<ebx>, lua_TValue *key<eax>, lua_State *L)
{
  lua_TValue *v3; // edi@1
  int v4; // eax@1
  int result; // eax@2
  double v6; // ST14_8@4
  Node *v7; // esi@8
  int v8; // eax@10
  int v9; // eax@15
  int v10; // [sp+Ch] [bp-4h]@4

  v3 = key;
  v4 = key->u.i.tt__;
  if ( v4 == 2146936064 )
  {
    result = -1;
  }
  else
  {
    if ( (v4 & 0x7FFFFF00) == 2146936064
      || (v6 = *(double *)&v3->u.i.v__.gc, v10 = (signed int)v6, v6 != (double)(signed int)v6)
      || v10 <= 0
      || v10 > t->sizearray )
    {
      v7 = mainposition(t, v3);
      while ( 1 )
      {
        v8 = (v7->i_key.nk.u.i.tt__ & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)(v7->i_key.nk.u.i.tt__ == v3->u.i.tt__) : (unsigned __int8)((v3->u.i.tt__ & 0x7FFFFF00) != 2146936064);
        if ( v8 && luaV_equalobj_(0, (lua_TValue *)&v7->i_key, v3) )
          break;
        if ( v7->i_key.nk.u.i.tt__ == 2146936075 )
        {
          v9 = v3->u.i.tt__;
          if ( (v3->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
            LOBYTE(v9) = 3;
          if ( v9 & 0x40 && v7->i_key.nk.u.i.v__.gc == v3->u.i.v__.gc )
            break;
        }
        v7 = v7->i_key.nk.next;
        if ( !v7 )
          luaG_runerror(L, "invalid key to 'next'");
      }
      result = t->sizearray + v7 - t->node;
    }
    else
    {
      result = v10 - 1;
    }
  }
  return result;
}

//----- (0074D3E0) --------------------------------------------------------
int __cdecl luaH_next(lua_State *L, Table *t, lua_TValue *key)
{
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // eax@1
  char *v6; // edx@2
  int v7; // eax@5
  signed int v8; // edx@5
  Node *v9; // edi@6
  int v10; // ecx@6
  int result; // eax@9
  lua_TValue *v12; // ebx@10
  int v13; // eax@11
  Node *v14; // ecx@11

  v3 = findindex(L, t, key);
  v4 = t->sizearray;
  v5 = v3 + 1;
  if ( v5 >= v4 )
  {
LABEL_5:
    v7 = v5 - v4;
    v8 = 1 << t->lsizenode;
    if ( v7 >= v8 )
    {
LABEL_9:
      result = 0;
    }
    else
    {
      v9 = t->node;
      v10 = (int)&v9[v7].i_val.u.i.tt__;
      while ( *(_DWORD *)v10 == 2146936064 )
      {
        ++v7;
        v10 += 24;
        if ( v7 >= v8 )
          goto LABEL_9;
      }
      v13 = v7;
      *(_QWORD *)&key->u.i.v__.gc = *(_QWORD *)&v9[v13].i_key.nk.u.i.v__.gc;
      v14 = t->node;
      key[1].u.i.v__.gc = v14[v13].i_val.u.i.v__.gc;
      key[1].u.i.tt__ = v14[v13].i_val.u.i.tt__;
      result = 1;
    }
  }
  else
  {
    v6 = (char *)&t->array[v5].u.i.tt__;
    while ( *(_DWORD *)v6 == 2146936064 )
    {
      ++v5;
      v6 += 8;
      if ( v5 >= v4 )
        goto LABEL_5;
    }
    *(double *)&key->u.i.v__.gc = (double)(v5 + 1);
    v12 = t->array;
    key[1].u.i.v__.gc = v12[v5].u.i.v__.gc;
    key[1].u.i.tt__ = v12[v5].u.i.tt__;
    result = 1;
  }
  return result;
}

//----- (0074D4A0) --------------------------------------------------------
int __cdecl computesizes(int *nums, int *narray)
{
  int v2; // esi@1
  int v3; // ebx@1
  int v4; // edi@1
  signed int v5; // ecx@1
  int result; // eax@8
  int *v7; // [sp+10h] [bp-4h]@2

  v2 = 0;
  v3 = 0;
  v4 = 0;
  v5 = 1;
  if ( *narray <= 0 )
  {
    *narray = 0;
    result = 0;
  }
  else
  {
    v7 = nums;
    while ( 1 )
    {
      if ( *v7 > 0 )
      {
        v2 += *v7;
        if ( v2 > v5 / 2 )
        {
          v4 = v5;
          v3 = v2;
        }
      }
      if ( v2 == *narray )
        break;
      ++v7;
      v5 *= 2;
      if ( v5 / 2 >= *narray )
      {
        *narray = v4;
        return v3;
      }
    }
    *narray = v4;
    result = v3;
  }
  return result;
}

//----- (0074D520) --------------------------------------------------------
int __cdecl numusearray(Table *t, int *nums)
{
  signed int v2; // edi@1
  signed int v3; // eax@1
  signed int v4; // edx@1
  int v5; // esi@2
  int v6; // ebx@2
  int v7; // ecx@2
  int v8; // ecx@6
  char *v9; // esi@6
  int ause; // [sp+Ch] [bp-4h]@1

  v2 = 0;
  v3 = 1;
  ause = 0;
  v4 = 1;
  do
  {
    v5 = t->sizearray;
    v6 = 0;
    v7 = v4;
    if ( v4 <= v5 )
    {
      if ( v3 > v4 )
        goto LABEL_10;
    }
    else
    {
      v7 = t->sizearray;
      if ( v3 > v5 )
        return ause;
    }
    v8 = v7 - v3 + 1;
    v9 = (char *)&t->array[v3] - 4;
    v3 += v8;
    do
    {
      if ( *(_DWORD *)v9 != 2146936064 )
        ++v6;
      v9 += 8;
      --v8;
    }
    while ( v8 );
LABEL_10:
    nums[v2] += v6;
    ause += v6;
    ++v2;
    v4 *= 2;
  }
  while ( v2 <= 30 );
  return ause;
}

//----- (0074D590) --------------------------------------------------------
int __usercall numusehash<eax>(Table *t<ebx>, int *nums, int *pnasize)
{
  signed int v3; // esi@1
  int v4; // edi@2
  Node *v5; // eax@3
  double v6; // ST0C_8@5
  int v7; // eax@7
  signed int v8; // eax@7
  int result; // eax@11
  unsigned int x; // [sp+Ch] [bp-Ch]@5
  int totaluse; // [sp+10h] [bp-8h]@1
  int ause; // [sp+14h] [bp-4h]@1

  v3 = 1 << t->lsizenode;
  totaluse = 0;
  ause = 0;
  if ( v3 )
  {
    v4 = v3;
    do
    {
      v5 = t->node;
      --v4;
      --v3;
      if ( v5[v4].i_val.u.i.tt__ != 2146936064 )
      {
        if ( (v5[v4].i_key.nk.u.i.tt__ & 0x7FFFFF00) == 2146936064
          || (v6 = *(double *)&v5[v4].i_key.nk.u.i.v__.gc, x = (signed int)v6, v6 != (double)(signed int)v6)
          || x - 1 > 0x3FFFFFFF )
        {
          v8 = 0;
        }
        else
        {
          v7 = luaO_ceillog2(x);
          ++nums[v7];
          v8 = 1;
        }
        ause += v8;
        ++totaluse;
      }
    }
    while ( v3 );
    *pnasize += ause;
    result = totaluse;
  }
  else
  {
    *pnasize = *pnasize;
    result = 0;
  }
  return result;
}

//----- (0074D660) --------------------------------------------------------
void __usercall setarrayvector(lua_State *L<eax>, Table *t<esi>, int size<edi>)
{
  int i; // eax@3

  if ( (unsigned int)(size + 1) > 0x1FFFFFFF )
    luaM_toobig(L);
  t->array = (lua_TValue *)luaM_realloc_(L, t->array, 8 * t->sizearray, 8 * size);
  for ( i = t->sizearray; i < size; ++i )
    t->array[i].u.i.tt__ = 2146936064;
  t->sizearray = size;
}

//----- (0074D6B0) --------------------------------------------------------
void __usercall setnodevector(lua_State *L<ecx>, Table *t<edi>, int size<eax>)
{
  int v3; // esi@1
  lua_State *v4; // ebx@1
  int v5; // eax@3
  int v6; // ecx@8
  int v7; // edx@8
  Node *v8; // eax@9
  Node *v9; // ecx@10
  char lsize; // [sp+8h] [bp-4h]@2

  v3 = size;
  v4 = L;
  if ( size )
  {
    v5 = luaO_ceillog2(size);
    lsize = v5;
    if ( v5 > 30 )
      luaG_runerror(v4, "table overflow");
    v3 = 1 << v5;
    if ( (unsigned int)((1 << v5) + 1) > 0xAAAAAAA )
      luaM_toobig(v4);
    t->node = (Node *)luaM_realloc_(v4, 0, 0, 24 * v3);
    if ( v3 > 0 )
    {
      v6 = 0;
      v7 = v3;
      do
      {
        v8 = t->node;
        v8[v6].i_key.nk.next = 0;
        v8[v6].i_key.nk.u.i.tt__ = 2146936064;
        v8[v6].i_val.u.i.tt__ = 2146936064;
        ++v6;
        --v7;
      }
      while ( v7 );
    }
  }
  else
  {
    t->node = &dummynode_;
    lsize = 0;
  }
  v9 = t->node;
  t->lsizenode = lsize;
  t->lastfree = &v9[v3];
}

//----- (0074D770) --------------------------------------------------------
Table *__cdecl luaH_new(lua_State *L)
{
  Table *result; // eax@1

  result = (Table *)luaC_newobj(L, 5, 0x20u, 0, 0);
  result->metatable = 0;
  result->array = 0;
  result->sizearray = 0;
  result->node = &dummynode_;
  *(_WORD *)&result->flags = 255;
  result->lastfree = &dummynode_;
  return result;
}

//----- (0074D7B0) --------------------------------------------------------
void __cdecl luaH_free(lua_State *L, Table *t)
{
  void *v2; // edx@1

  v2 = t->node;
  if ( v2 != &dummynode_ )
    luaM_realloc_(L, v2, 24 * (1 << t->lsizenode), 0);
  luaM_realloc_(L, t->array, 8 * t->sizearray, 0);
  luaM_realloc_(L, t, 0x20u, 0);
}

//----- (0074D810) --------------------------------------------------------
lua_TValue *__cdecl luaH_getint(Table *t, int key)
{
  lua_TValue *result; // eax@2
  Node *v3; // ecx@3
  double nk; // [sp+Ch] [bp-8h]@3

  if ( (unsigned int)(key - 1) >= t->sizearray )
  {
    nk = (double)key;
    v3 = hashnum(t, nk);
    while ( (v3->i_key.nk.u.i.tt__ & 0x7FFFFF00) == 2146936064 || nk != *(double *)&v3->i_key.nk.u.i.v__.gc )
    {
      v3 = v3->i_key.nk.next;
      if ( !v3 )
        return &luaO_nilobject_;
    }
    result = (lua_TValue *)v3;
  }
  else
  {
    result = &t->array[key - 1];
  }
  return result;
}

//----- (0074D890) --------------------------------------------------------
lua_TValue *__cdecl luaH_getstr(Table *t, TString *key)
{
  lua_TValue *result; // eax@1

  result = (lua_TValue *)&t->node[key->tsv.hash & ((1 << t->lsizenode) - 1)];
  while ( result[1].u.i.tt__ != 2146936132 || (TString *)result[1].u.i.v__.gc != key )
  {
    result = (lua_TValue *)result[2].u.i.v__.gc;
    if ( !result )
      return &luaO_nilobject_;
  }
  return result;
}

//----- (0074D8D0) --------------------------------------------------------
lua_TValue *__cdecl luaH_get(Table *t, lua_TValue *key)
{
  int v2; // eax@1
  int v3; // eax@3
  int v4; // eax@4
  lua_TValue *result; // eax@6
  Node *v6; // esi@9
  int v7; // eax@11
  double n; // [sp+4h] [bp-8h]@7

  v2 = key->u.i.tt__;
  if ( (key->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v2) = 3;
  v3 = v2 & 0x3F;
  if ( v3 )
  {
    v4 = v3 - 3;
    if ( v4 )
    {
      if ( v4 == 1 )
        return luaH_getstr(t, (TString *)key->u.i.v__.gc);
    }
    else
    {
      n = *(double *)&key->u.i.v__.gc;
      if ( n == (double)(signed int)n )
        return luaH_getint(t, (signed int)n);
    }
    v6 = mainposition(t, key);
    while ( 1 )
    {
      v7 = (v6->i_key.nk.u.i.tt__ & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)(v6->i_key.nk.u.i.tt__ == key->u.i.tt__) : (unsigned __int8)((key->u.i.tt__ & 0x7FFFFF00) != 2146936064);
      if ( v7 && luaV_equalobj_(0, (lua_TValue *)&v6->i_key, key) )
        break;
      v6 = v6->i_key.nk.next;
      if ( !v6 )
        return &luaO_nilobject_;
    }
    result = (lua_TValue *)v6;
  }
  else
  {
    result = &luaO_nilobject_;
  }
  return result;
}

//----- (0074D9D0) --------------------------------------------------------
lua_TValue *__cdecl luaH_set(lua_State *L, Table *t, lua_TValue *key)
{
  lua_TValue *result; // eax@1

  result = luaH_get(t, key);
  if ( result == &luaO_nilobject_ )
    result = luaH_newkey(L, t, key);
  return result;
}

//----- (0074DA00) --------------------------------------------------------
int __usercall unbound_search<eax>(Table *t<ebx>, unsigned int j)
{
  unsigned int v2; // edi@1
  lua_TValue *v3; // ecx@3
  double v4; // ST1C_8@4
  signed int v5; // eax@4
  int k; // esi@15
  unsigned int v8; // esi@19
  double v9; // [sp+14h] [bp-1Ch]@4
  int expptr; // [sp+24h] [bp-Ch]@4
  int v11; // [sp+28h] [bp-8h]@4
  int i; // [sp+2Ch] [bp-4h]@1
  unsigned int ja; // [sp+38h] [bp+8h]@1

  i = j;
  v2 = j + 1;
  ja = j + 1;
  while ( 1 )
  {
    if ( v2 - 1 >= t->sizearray )
    {
      v9 = (double)(signed int)ja;
      v4 = frexp(v9, &expptr) * 2147482623.0;
      v5 = expptr + (signed int)v4;
      v11 = expptr + (signed int)v4;
      if ( expptr + (signed int)v4 < 0 )
      {
        if ( v5 == -v5 )
          v5 = 0;
        v5 = -v5;
        v11 = v5;
      }
      v3 = (lua_TValue *)&t->node[v5 % (((1 << t->lsizenode) - 1) | 1)];
      while ( (v3[1].u.i.tt__ & 0x7FFFFF00) == 2146936064 || v9 != *(double *)&v3[1].u.i.v__.gc )
      {
        v3 = (lua_TValue *)v3[2].u.i.v__.gc;
        if ( !v3 )
        {
          v3 = &luaO_nilobject_;
          break;
        }
      }
    }
    else
    {
      v3 = &t->array[v2 - 1];
    }
    if ( v3->u.i.tt__ == 2146936064 )
      break;
    i = v2;
    v2 *= 2;
    ja = v2;
    if ( v2 > 0x7FFFFFFD )
    {
      for ( k = 1; luaH_getint(t, k)->u.i.tt__ != 2146936064; ++k )
        ;
      return k - 1;
    }
  }
  while ( v2 - i > 1 )
  {
    v8 = (i + v2) >> 1;
    if ( luaH_getint(t, (i + v2) >> 1)->u.i.tt__ == 2146936064 )
      v2 = v8;
    else
      i = v8;
  }
  return i;
}

//----- (0074DB50) --------------------------------------------------------
int __cdecl luaH_getn(Table *t)
{
  int result; // eax@1
  lua_TValue *v2; // esi@2
  unsigned int v3; // edx@3

  result = t->sizearray;
  if ( result && (v2 = t->array, *((_DWORD *)&v2[result] - 1) == 2146936064) )
  {
    v3 = 0;
    if ( (unsigned int)result > 1 )
    {
      do
      {
        if ( *((_DWORD *)&v2[(v3 + result) >> 1] - 1) == 2146936064 )
          result = (v3 + result) >> 1;
        else
          v3 = (v3 + result) >> 1;
      }
      while ( result - v3 > 1 );
    }
    result = v3;
  }
  else
  {
    if ( t->node != &dummynode_ )
      result = unbound_search(t, t->sizearray);
  }
  return result;
}

//----- (0074DBB0) --------------------------------------------------------
void __cdecl luaH_resize(lua_State *L, Table *t, int nasize, int nhsize)
{
  int v4; // ebx@1
  Table *v5; // esi@1
  int v6; // ecx@1
  void *v7; // edx@1
  int v8; // edi@3
  int v9; // edi@4
  int v10; // ebx@5
  lua_TValue *v11; // eax@6
  signed int v12; // eax@13
  int v13; // edi@13
  lua_TValue *v14; // ebx@14
  lua_TValue *v15; // eax@16
  lua_TValue key; // [sp+Ch] [bp-1Ch]@7
  int oldhsize; // [sp+14h] [bp-14h]@1
  unsigned int nsize; // [sp+18h] [bp-10h]@4
  int v19; // [sp+1Ch] [bp-Ch]@4
  char *nold; // [sp+20h] [bp-8h]@1
  int oldasize; // [sp+24h] [bp-4h]@1
  int ta; // [sp+34h] [bp+Ch]@4
  signed int tb; // [sp+34h] [bp+Ch]@13
  int nasizea; // [sp+38h] [bp+10h]@4

  v4 = nasize;
  v5 = t;
  v6 = t->lsizenode;
  v7 = t->node;
  oldasize = t->sizearray;
  oldhsize = v6;
  nold = (char *)v7;
  if ( nasize > oldasize )
    setarrayvector(L, t, nasize);
  setnodevector(L, t, nhsize);
  v8 = oldasize;
  if ( nasize < oldasize )
  {
    v19 = nasize + 1;
    ta = nasize + 1;
    v5->sizearray = nasize;
    nsize = 8 * nasize;
    nasizea = nasize;
    v9 = v8 - v4;
    do
    {
      v10 = (int)&v5->array[nasizea];
      if ( *(_DWORD *)(v10 + 4) != 2146936064 )
      {
        v11 = luaH_getint(v5, ta);
        if ( v11 == &luaO_nilobject_ )
        {
          *(double *)&key.u.i.v__.gc = (double)ta;
          v11 = luaH_newkey(L, v5, &key);
        }
        v11->u.i.v__.gc = *(GCObject **)v10;
        v11->u.i.tt__ = *(_DWORD *)(v10 + 4);
      }
      ++nasizea;
      ++ta;
      --v9;
    }
    while ( v9 );
    if ( (unsigned int)v19 > 0x1FFFFFFF )
      luaM_toobig(L);
    v5->array = (lua_TValue *)luaM_realloc_(L, v5->array, 8 * oldasize, nsize);
  }
  v12 = 1 << oldhsize;
  v13 = (1 << oldhsize) - 1;
  tb = 1 << oldhsize;
  if ( v13 >= 0 )
  {
    v14 = (lua_TValue *)&nold[24 * v13 + 8];
    do
    {
      if ( *((_DWORD *)v14 - 1) != 2146936064 )
      {
        v15 = luaH_get(v5, v14);
        if ( v15 == &luaO_nilobject_ )
          v15 = luaH_newkey(L, v5, v14);
        v15->u.i.v__.gc = v14[-1].u.i.v__.gc;
        v15->u.i.tt__ = *((_DWORD *)v14 - 1);
        v12 = tb;
      }
      v14 -= 3;
      --v13;
    }
    while ( v13 >= 0 );
  }
  if ( (Node *)nold != &dummynode_ )
    luaM_realloc_(L, nold, 24 * v12, 0);
}

//----- (0074DD20) --------------------------------------------------------
void __cdecl luaH_resizearray(lua_State *L, Table *t, int nasize)
{
  if ( t->node == &dummynode_ )
    luaH_resize(L, t, nasize, 0);
  else
    luaH_resize(L, t, nasize, 1 << t->lsizenode);
}

//----- (0074DD70) --------------------------------------------------------
void __usercall rehash(Table *t<ecx>, lua_TValue *ek<edi>, lua_State *L)
{
  Table *v3; // ebx@1
  int v4; // esi@1
  double v5; // ST20_8@2
  int v6; // eax@5
  signed int v7; // eax@5
  int v8; // eax@7
  unsigned int x; // [sp+14h] [bp-88h]@2
  int nasize; // [sp+18h] [bp-84h]@1
  int nums[31]; // [sp+1Ch] [bp-80h]@1
  unsigned int v12; // [sp+98h] [bp-4h]@1
  int v13; // [sp+9Ch] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = t;
  nums[0] = 0;
  nums[1] = 0;
  nums[2] = 0;
  nums[3] = 0;
  nums[4] = 0;
  nums[5] = 0;
  nums[6] = 0;
  nums[7] = 0;
  nums[8] = 0;
  nums[9] = 0;
  nums[10] = 0;
  nums[11] = 0;
  nums[12] = 0;
  nums[13] = 0;
  nums[14] = 0;
  nums[15] = 0;
  nums[16] = 0;
  nums[17] = 0;
  nums[18] = 0;
  nums[19] = 0;
  nums[20] = 0;
  nums[21] = 0;
  nums[22] = 0;
  nums[23] = 0;
  nums[24] = 0;
  nums[25] = 0;
  nums[26] = 0;
  nums[27] = 0;
  nums[28] = 0;
  nums[29] = 0;
  nums[30] = 0;
  nasize = numusearray(t, nums);
  v4 = numusehash(v3, nums, &nasize) + nasize;
  if ( (ek->u.i.tt__ & 0x7FFFFF00) == 2146936064
    || (v5 = *(double *)&ek->u.i.v__.gc, x = (signed int)v5, v5 != (double)(signed int)v5)
    || (signed int)x <= 0
    || (signed int)x > 1073741824 )
  {
    v7 = 0;
  }
  else
  {
    v6 = luaO_ceillog2(x);
    ++nums[v6];
    v7 = 1;
  }
  nasize += v7;
  v8 = computesizes(nums, &nasize);
  luaH_resize(L, v3, nasize, v4 - v8 + 1);
}
// A85C00: using guessed type int __security_cookie;

//----- (0074DEC0) --------------------------------------------------------
lua_TValue *__cdecl luaH_newkey(lua_State *L, Table *t, lua_TValue *key)
{
  lua_TValue *v3; // edi@1
  Table *v4; // ebx@3
  Node *v5; // eax@3
  Node *v6; // esi@3
  Node *v7; // ebx@6
  lua_TValue *result; // eax@11
  Node *v9; // eax@13
  int v10; // eax@19

  v3 = key;
  if ( key->u.i.tt__ == 2146936064 )
    luaG_runerror(L, "table index is nil");
  v4 = t;
  v5 = mainposition(t, key);
  v6 = v5;
  if ( v5->i_val.u.i.tt__ != 2146936064 || v5 == &dummynode_ )
  {
    if ( t->lastfree <= t->node )
      goto LABEL_11;
    while ( 1 )
    {
      --v4->lastfree;
      v7 = v4->lastfree;
      if ( v7->i_key.nk.u.i.tt__ == 2146936064 )
        break;
      v4 = t;
      if ( t->lastfree <= t->node )
        goto LABEL_11;
    }
    if ( !v7 )
    {
      v4 = t;
LABEL_11:
      rehash(L, v4, key);
      result = luaH_get(v4, key);
      if ( result == &luaO_nilobject_ )
        result = luaH_newkey(L, v4, key);
      return result;
    }
    v9 = mainposition(t, (lua_TValue *)&v5->i_key);
    if ( v9 == v6 )
    {
      v7->i_key.nk.next = v6->i_key.nk.next;
      v6->i_key.nk.next = v7;
      v6 = v7;
    }
    else
    {
      for ( ; v9->i_key.nk.next != v6; v9 = v9->i_key.nk.next )
        ;
      v9->i_key.nk.next = v7;
      v7->i_val.u.i.v__.gc = v6->i_val.u.i.v__.gc;
      v7->i_val.u.i.tt__ = v6->i_val.u.i.tt__;
      v7->i_key.nk.u.i.v__.gc = v6->i_key.nk.u.i.v__.gc;
      v7->i_key.nk.u.i.tt__ = v6->i_key.nk.u.i.tt__;
      v7->i_key.nk.next = v6->i_key.nk.next;
      *((_DWORD *)&v7->i_key.nk.next + 1) = *((_DWORD *)&v6->i_key.nk.next + 1);
      v6->i_key.nk.next = 0;
      v6->i_val.u.i.tt__ = 2146936064;
    }
    v4 = t;
    v3 = key;
  }
  v6->i_key.nk.u.i.v__.gc = v3->u.i.v__.gc;
  v6->i_key.nk.u.i.tt__ = v3->u.i.tt__;
  v10 = v3->u.i.tt__;
  if ( (v3->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v10) = 3;
  if ( v10 & 0x40 && v3->u.i.v__.gc->gch.marked & 3 && v4->marked & 4 )
    luaC_barrierback_(L, (GCObject *)&v4->next);
  return (lua_TValue *)v6;
}

//----- (0074E050) --------------------------------------------------------
void __cdecl luaH_setint(lua_State *L, Table *t, int key, lua_TValue *value)
{
  lua_TValue *v4; // eax@1
  lua_TValue k; // [sp+4h] [bp-8h]@2

  v4 = luaH_getint(t, key);
  if ( v4 == &luaO_nilobject_ )
  {
    *(double *)&k.u.i.v__.gc = (double)key;
    v4 = luaH_newkey(L, t, &k);
  }
  *(_QWORD *)&v4->u.i.v__.gc = *(_QWORD *)&value->u.i.v__.gc;
}

//----- (0074E0A0) --------------------------------------------------------
int __usercall currentline<eax>(CallInfo *ci<ecx>)
{
  int result; // eax@2

  if ( *(_DWORD *)(ci->func->u.i.v__.gc->ts.tsv.len + 20) )
    result = *(_DWORD *)(*(_DWORD *)(ci->func->u.i.v__.gc->ts.tsv.len + 20)
                       + 4
                       * ((signed int)((char *)ci->u.l.savedpc - *(_DWORD *)(ci->func->u.i.v__.gc->ts.tsv.len + 12)) >> 2)
                       - 4);
  else
    result = 0;
  return result;
}

//----- (0074E0D0) --------------------------------------------------------
int __cdecl lua_sethook(lua_State *L, void (__cdecl *func)(lua_State *, lua_Debug *), int mask, int count)
{
  void (__cdecl *v4)(lua_State *, lua_Debug *); // esi@1
  char v5; // dl@2
  CallInfo *v6; // ecx@4

  v4 = func;
  if ( !func || (v5 = mask, !mask) )
  {
    v5 = 0;
    v4 = 0;
  }
  v6 = L->ci;
  if ( v6->callstatus & 1 )
    L->oldpc = v6->u.l.savedpc;
  L->hook = v4;
  L->basehookcount = count;
  L->hookcount = count;
  L->hookmask = v5;
  return 1;
}

//----- (0074E110) --------------------------------------------------------
void (__cdecl *__cdecl lua_gethook(lua_State *L))(lua_State *, lua_Debug *)
{
  return L->hook;
}

//----- (0074E120) --------------------------------------------------------
int __cdecl lua_gethookmask(lua_State *L)
{
  return L->hookmask;
}

//----- (0074E130) --------------------------------------------------------
int __cdecl lua_gethookcount(lua_State *L)
{
  return L->basehookcount;
}

//----- (0074E140) --------------------------------------------------------
int __cdecl lua_getstack(lua_State *L, int level, lua_Debug *ar)
{
  int v3; // eax@1
  int result; // eax@2
  CallInfo *v5; // ecx@3
  bool v6; // zf@3

  v3 = level;
  if ( level >= 0 )
  {
    v5 = L->ci;
    v6 = level == 0;
    if ( level > 0 )
    {
      do
      {
        if ( v5 == &L->base_ci )
          break;
        v5 = v5->previous;
        --v3;
      }
      while ( v3 > 0 );
      v6 = v3 == 0;
    }
    if ( v6 && v5 != &L->base_ci )
    {
      result = 1;
      ar->i_ci = v5;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0074E190) --------------------------------------------------------
const char *__usercall findlocal<eax>(CallInfo *ci<esi>, int n<eax>, lua_State *L, lua_TValue **pos)
{
  int v4; // edi@1
  int v5; // ecx@3
  const char *result; // eax@4
  lua_TValue *v7; // ebx@5
  lua_TValue *v8; // eax@7

  v4 = n;
  if ( ci->callstatus & 1 )
  {
    if ( n < 0 )
    {
      v5 = *(_BYTE *)(ci->func->u.i.v__.gc->ts.tsv.len + 76);
      if ( -n < (signed int)(ci->u.l.base - ci->func - v5) )
      {
        *pos = &ci->func[v5 - n];
        return "(*vararg)";
      }
      return 0;
    }
    v7 = ci->u.l.base;
    result = luaF_getlocalname(
               (Proto *)ci->func->u.i.v__.gc->ts.tsv.len,
               n,
               ((signed int)((char *)ci->u.l.savedpc - *(_DWORD *)(ci->func->u.i.v__.gc->ts.tsv.len + 12)) >> 2) - 1);
    if ( result )
    {
LABEL_13:
      *pos = &v7[v4 - 1];
      return result;
    }
  }
  else
  {
    v7 = ci->func + 1;
  }
  if ( ci == L->ci )
    v8 = L->top;
  else
    v8 = ci->next->func;
  if ( (signed int)(v8 - v7) >= v4 && v4 > 0 )
  {
    result = "(*temporary)";
    goto LABEL_13;
  }
  return 0;
}

//----- (0074E230) --------------------------------------------------------
const char *__cdecl lua_getlocal(lua_State *L, lua_Debug *ar, int n)
{
  lua_TValue *v3; // eax@2
  const char *result; // eax@3
  CallInfo *v5; // esi@5
  lua_Debug *v6; // edx@6
  lua_TValue *v7; // ecx@6

  if ( ar )
  {
    v5 = ar->i_ci;
    ar = 0;
    result = findlocal(L, v5, n, (lua_TValue **)&ar);
    if ( result )
    {
      v6 = ar;
      v7 = L->top;
      v7->u.i.v__.gc = (GCObject *)ar->event;
      v7->u.i.tt__ = (int)v6->name;
      ++L->top;
    }
  }
  else
  {
    v3 = L->top;
    if ( *((_DWORD *)v3 - 1) == 2146936134 )
      result = luaF_getlocalname((Proto *)v3[-1].u.i.v__.gc->ts.tsv.len, n, 0);
    else
      result = 0;
  }
  return result;
}

//----- (0074E2A0) --------------------------------------------------------
const char *__cdecl lua_setlocal(lua_State *L, lua_Debug *ar, int n)
{
  CallInfo *v3; // esi@1
  const char *result; // eax@1
  lua_TValue *v5; // ecx@2
  void *v6; // edx@2
  void *pos; // [sp+8h] [bp-4h]@1

  v3 = ar->i_ci;
  pos = 0;
  result = findlocal(L, v3, n, (lua_TValue **)&pos);
  if ( result )
  {
    v5 = L->top;
    v6 = pos;
    *(_DWORD *)pos = v5[-1].u.i.v__.gc;
    *((_DWORD *)v6 + 1) = *((_DWORD *)v5 - 1);
  }
  --L->top;
  return result;
}

//----- (0074E2F0) --------------------------------------------------------
void __usercall funcinfo(lua_Debug *ar<eax>, Closure *cl<ecx>)
{
  int (__cdecl *v2)(lua_State *); // ecx@3
  int v3; // edx@3
  const char *v4; // edx@4
  int v5; // edx@6
  const char *v6; // ecx@6
  const char *v7; // edx@8
  const char *v8; // edx@9

  if ( cl && cl->c.tt != 38 )
  {
    v2 = cl->c.f;
    v3 = *((_DWORD *)v2 + 9);
    if ( v3 )
      v4 = (const char *)(v3 + 16);
    else
      v4 = "=?";
    ar->source = v4;
    v5 = *((_DWORD *)v2 + 16);
    ar->linedefined = v5;
    ar->lastlinedefined = *((_DWORD *)v2 + 17);
    v6 = "main";
    if ( v5 )
      v6 = "Lua";
    v7 = ar->source;
    ar->what = v6;
    luaO_chunkid(ar->short_src, v7, 0x3Cu);
  }
  else
  {
    ar->source = "=[C]";
    v8 = ar->source;
    ar->linedefined = -1;
    ar->lastlinedefined = -1;
    ar->what = "C";
    luaO_chunkid(ar->short_src, v8, 0x3Cu);
  }
}

//----- (0074E370) --------------------------------------------------------
void __usercall collectvalidlines(lua_State *L<esi>, Closure *f<ebx>)
{
  void *v2; // eax@3
  lua_TValue *v3; // ecx@3
  int (__cdecl *v4)(lua_State *); // edx@3
  int v5; // edi@3
  signed __int64 v; // [sp+0h] [bp-10h]@3
  void *lineinfo; // [sp+8h] [bp-8h]@3
  void *t; // [sp+Ch] [bp-4h]@3

  if ( f && f->c.tt != 38 )
  {
    lineinfo = (void *)*((_DWORD *)f->c.f + 5);
    v2 = luaH_new(L);
    v3 = L->top;
    v3->u.i.v__.gc = (GCObject *)v2;
    v3->u.i.tt__ = 2146936133;
    ++L->top;
    v4 = f->c.f;
    v5 = 0;
    v = 9221020185777930241i64;
    t = v2;
    if ( *((_DWORD *)v4 + 13) > 0 )
    {
      while ( 1 )
      {
        luaH_setint(L, (Table *)v2, *((_DWORD *)lineinfo + v5++), (lua_TValue *)&v);
        if ( v5 >= *((_DWORD *)f->c.f + 13) )
          break;
        v2 = t;
      }
    }
  }
  else
  {
    L->top->u.i.tt__ = 2146936064;
    ++L->top;
  }
}

//----- (0074E400) --------------------------------------------------------
void __usercall kname(Proto *p<ecx>, int c<eax>, const char **name<esi>, int pc)
{
  lua_TValue *v4; // ecx@2
  int v5; // eax@2
  int v6; // edx@2
  int v7; // eax@2
  const char *v8; // eax@4

  if ( c & 0x100 )
  {
    v4 = p->k;
    v5 = c & 0xFFFFFEFF;
    v6 = v4[v5].u.i.tt__;
    v7 = (int)&v4[v5];
    if ( (v6 | 0x70) == 2146936180 )
    {
      *name = (const char *)(*(_DWORD *)v7 + 16);
      return;
    }
    goto LABEL_6;
  }
  v8 = getobjname(p, pc, c, name);
  if ( !v8 || *v8 != 99 )
LABEL_6:
    *name = "?";
}

//----- (0074E450) --------------------------------------------------------
int __usercall findsetreg<eax>(int reg<eax>, Proto *p, int lastpc)
{
  int v3; // edi@1
  unsigned int v4; // ecx@3
  int v5; // esi@3
  int v6; // edx@3
  int v7; // ecx@10
  int v8; // edx@10
  int result; // eax@17
  unsigned int *v10; // [sp+4h] [bp-8h]@2
  int setreg; // [sp+8h] [bp-4h]@1

  v3 = 0;
  setreg = -1;
  if ( lastpc <= 0 )
  {
    result = -1;
  }
  else
  {
    v10 = p->code;
    do
    {
      v4 = v10[v3];
      v5 = v10[v3] & 0x3F;
      v6 = (v10[v3] >> 6) & 0xFF;
      switch ( v5 )
      {
        case 4:
          if ( v6 <= reg && reg <= (signed int)(v6 + (v4 >> 23)) )
            goto LABEL_15;
          break;
        case 34:
          v6 += 2;
          goto LABEL_8;
        case 29:
        case 30:
LABEL_8:
          if ( reg >= v6 )
            goto LABEL_15;
          break;
        case 23:
          v7 = (v4 >> 14) - 131071;
          v8 = v7 + v3 + 1;
          if ( v3 < v8 && v8 <= lastpc )
            v3 += v7;
          break;
        default:
          if ( luaP_opmodes[v5] & 0x40 )
            goto LABEL_14;
          break;
        case 27:
LABEL_14:
          if ( reg == v6 )
LABEL_15:
            setreg = v3;
          break;
      }
      ++v3;
    }
    while ( v3 < lastpc );
    result = setreg;
  }
  return result;
}

//----- (0074E530) --------------------------------------------------------
const char *__cdecl getobjname(Proto *p, int lastpc, int reg, const char **name)
{
  int v4; // esi@1
  int v5; // edi@1
  const char *v6; // eax@1
  int v7; // eax@2
  unsigned int *v8; // edx@3
  unsigned int v9; // eax@3
  int v10; // ecx@3
  const char *v11; // eax@5
  const char *result; // eax@6
  int v13; // edx@7
  unsigned int v14; // eax@7
  const char *v15; // eax@8
  TString *v16; // eax@9
  bool v17; // zf@14
  TString *v18; // eax@16
  unsigned int v19; // eax@20
  lua_TValue *v20; // ecx@22
  int v21; // edx@22
  int v22; // eax@22
  int k; // [sp+Ch] [bp-4h]@7
  const char *rega; // [sp+20h] [bp+10h]@10

  v4 = reg;
  v5 = lastpc;
  v6 = luaF_getlocalname(p, reg + 1, lastpc);
  *name = v6;
  if ( v6 )
  {
LABEL_6:
    result = "local";
  }
  else
  {
    while ( 2 )
    {
      v7 = findsetreg(p, v5, v4);
      v5 = v7;
      if ( v7 == -1 )
      {
LABEL_25:
        result = 0;
      }
      else
      {
        v8 = p->code;
        v9 = v8[v7];
        v10 = v8[v5] & 0x3F;
        switch ( v10 )
        {
          case 0:
            if ( (signed int)(v9 >> 23) >= (signed int)((v9 >> 6) & 0xFF) )
              goto LABEL_25;
            v4 = v9 >> 23;
            v11 = luaF_getlocalname(p, (v9 >> 23) + 1, v5);
            *name = v11;
            if ( v11 )
              goto LABEL_6;
            continue;
          case 6:
          case 7:
            v13 = (v9 >> 14) & 0x1FF;
            v14 = v9 >> 23;
            k = v13;
            if ( v10 == 7 )
            {
              v15 = luaF_getlocalname(p, v14 + 1, v5);
            }
            else
            {
              v16 = p->upvalues[v14].name;
              if ( !v16 )
              {
                rega = "?";
                goto LABEL_13;
              }
              v15 = (const char *)&v16[1];
            }
            rega = v15;
LABEL_13:
            kname(p, v5, k, name);
            if ( !rega || (v17 = strcmp(rega, "_ENV") == 0, result = "global", !v17) )
              result = "field";
            break;
          case 5:
            v18 = p->upvalues[v9 >> 23].name;
            if ( v18 )
            {
              *name = (const char *)&v18[1];
              result = "upvalue";
            }
            else
            {
              *name = "?";
              result = "upvalue";
            }
            return result;
          case 1:
          case 2:
            if ( v10 == 1 )
              v19 = v9 >> 14;
            else
              v19 = p->code[v5 + 1] >> 6;
            v20 = p->k;
            v21 = v20[v19].u.i.tt__;
            v22 = (int)&v20[v19];
            if ( (v21 | 0x70) != 2146936180 )
              goto LABEL_25;
            *name = (const char *)(*(_DWORD *)v22 + 16);
            return "constant";
          case 12:
            kname(p, v5, (v9 >> 14) & 0x1FF, name);
            return "method";
          default:
            goto LABEL_25;
        }
      }
      break;
    }
  }
  return result;
}

//----- (0074E730) --------------------------------------------------------
const char *__usercall getfuncname<eax>(CallInfo *ci<eax>, const char **name<edi>, lua_State *L)
{
  unsigned int v3; // edx@1
  signed int v4; // eax@1
  unsigned int v5; // ecx@1
  int v6; // eax@1
  const char *result; // eax@2
  signed int v8; // eax@4

  v3 = ci->func->u.i.v__.gc->ts.tsv.len;
  v4 = (signed int)((char *)ci->u.l.savedpc - *(_DWORD *)(v3 + 12)) >> 2;
  v5 = *(_DWORD *)(*(_DWORD *)(v3 + 12) + 4 * v4 - 4);
  v6 = v4 - 1;
  switch ( v5 & 0x3F )
  {
    case 0x1Du:
    case 0x1Eu:
      return getobjname((Proto *)v3, v6, (v5 >> 6) & 0xFF, name);
    case 0x22u:
      *name = "for iterator";
      return "for iterator";
    case 6u:
    case 7u:
    case 0xCu:
      v8 = 0;
      goto LABEL_18;
    case 8u:
    case 0xAu:
      v8 = 1;
      goto LABEL_18;
    case 0x18u:
      v8 = 5;
      goto LABEL_18;
    case 0xDu:
      v8 = 6;
      goto LABEL_18;
    case 0xEu:
      v8 = 7;
      goto LABEL_18;
    case 0xFu:
      v8 = 8;
      goto LABEL_18;
    case 0x10u:
      v8 = 9;
      goto LABEL_18;
    case 0x11u:
      v8 = 10;
      goto LABEL_18;
    case 0x12u:
      v8 = 11;
      goto LABEL_18;
    case 0x13u:
      v8 = 12;
      goto LABEL_18;
    case 0x15u:
      v8 = 4;
      goto LABEL_18;
    case 0x19u:
      v8 = 13;
      goto LABEL_18;
    case 0x1Au:
      v8 = 14;
      goto LABEL_18;
    case 0x16u:
      v8 = 15;
LABEL_18:
      *name = (const char *)&L->l_G->tmname[v8][1];
      result = "metamethod";
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (0074E880) --------------------------------------------------------
const char *__usercall getupvalname<eax>(CallInfo *ci<eax>, lua_TValue *o<edi>, const char **name)
{
  GCObject *v3; // esi@1
  int v4; // ecx@1
  int v5; // eax@1
  int v6; // edx@2
  const char *result; // eax@5
  int v8; // eax@6

  v3 = ci->func->u.i.v__.gc;
  v4 = *(&v3->gch.marked + 1);
  v5 = 0;
  if ( v4 <= 0 )
  {
LABEL_5:
    result = 0;
  }
  else
  {
    v6 = (int)&v3->u.uv.len;
    while ( *(lua_TValue **)(*(_DWORD *)v6 + 8) != o )
    {
      ++v5;
      v6 += 4;
      if ( v5 >= v4 )
        goto LABEL_5;
    }
    v8 = *(_DWORD *)(*(_DWORD *)(v3->ts.tsv.len + 28) + 8 * v5);
    if ( v8 )
    {
      *name = (const char *)(v8 + 16);
      result = "upvalue";
    }
    else
    {
      *name = "?";
      result = "upvalue";
    }
  }
  return result;
}

//----- (0074E8E0) --------------------------------------------------------
void __usercall addinfo(lua_State *L<edi>, const char *msg<ebx>)
{
  CallInfo *v2; // eax@1
  int v3; // edx@2
  char buff[60]; // [sp+0h] [bp-40h]@3
  unsigned int v5; // [sp+3Ch] [bp-4h]@1
  int v6; // [sp+40h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v2 = L->ci;
  if ( v2->callstatus & 1 )
  {
    v3 = *(_DWORD *)(v2->func->u.i.v__.gc->ts.tsv.len + 36);
    if ( v3 )
      luaO_chunkid(buff, (const char *)(v3 + 16), 0x3Cu);
    else
      strcpy(buff, "?");
    luaO_pushfstring(L, "%s:%d: %s");
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0074E970) --------------------------------------------------------
void __cdecl luaG_errormsg(lua_State *L)
{
  int v1; // eax@1
  char *v2; // ecx@2
  lua_TValue *v3; // eax@4
  lua_TValue *v4; // eax@4

  v1 = L->errfunc;
  if ( v1 )
  {
    v2 = (char *)L->stack + v1;
    if ( (*((_DWORD *)v2 + 1) | 0x70) != 2146936182 )
      luaD_throw(L, 6);
    v3 = L->top;
    v3->u.i.v__.gc = v3[-1].u.i.v__.gc;
    v3->u.i.tt__ = *((_DWORD *)v3 - 1);
    v4 = L->top;
    v4[-1].u.i.v__.gc = *(GCObject **)v2;
    *((_DWORD *)v4 - 1) = *((_DWORD *)v2 + 1);
    ++L->top;
    luaD_call(L, L->top - 2, 1, 0);
  }
  luaD_throw(L, 2);
}

//----- (0074E9E0) --------------------------------------------------------
void __cdecl luaG_runerror(lua_State *L, const char *fmt)
{
  const char *v2; // eax@1
  char argp; // [sp+18h] [bp+10h]@0

  v2 = luaO_pushvfstring(L, fmt, &argp);
  addinfo(L, v2);
  luaG_errormsg(L);
}

//----- (0074EA10) --------------------------------------------------------
int __usercall auxgetinfo<eax>(lua_Debug *ar<esi>, CallInfo *ci<ebx>, lua_State *L, const char *what, Closure *f)
{
  const char v5; // al@1
  char v6; // al@9
  CallInfo *v7; // eax@20
  const char *v8; // eax@26
  int result; // eax@27
  int status; // [sp+0h] [bp-4h]@1

  v5 = *what;
  status = 1;
  if ( *what )
  {
    do
    {
      switch ( v5 )
      {
        case 83:
          funcinfo(ar, f);
          break;
        case 108:
          if ( ci && ci->callstatus & 1 )
            ar->currentline = currentline(ci);
          else
            ar->currentline = -1;
          break;
        case 117:
          if ( f )
            v6 = f->c.nupvalues;
          else
            v6 = 0;
          ar->nups = v6;
          if ( f && f->c.tt != 38 )
          {
            ar->isvararg = *((_BYTE *)f->c.f + 77);
            ar->nparams = *((_BYTE *)f->c.f + 76);
          }
          else
          {
            *(_WORD *)&ar->nparams = 256;
          }
          break;
        case 116:
          if ( ci )
            ar->istailcall = ci->callstatus & 0x40;
          else
            ar->istailcall = 0;
          break;
        case 110:
          if ( ci && !(ci->callstatus & 0x40) && (v7 = ci->previous, v7->callstatus & 1) )
            ar->namewhat = getfuncname(L, v7, &ar->name);
          else
            ar->namewhat = 0;
          if ( !ar->namewhat )
          {
            ar->namewhat = &byte_9788EB;
            ar->name = 0;
          }
          break;
        default:
          status = 0;
          break;
        case 76:
        case 102:
          break;
      }
      v8 = what + 1;
      what = v8;
      v5 = *v8;
    }
    while ( v5 );
    result = status;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (0074EB90) --------------------------------------------------------
int __cdecl lua_getinfo(lua_State *L, const char *what, lua_Debug *ar)
{
  const char *v3; // esi@1
  lua_TValue *v4; // eax@2
  CallInfo *v5; // ebx@2
  int v6; // ecx@4
  int v7; // ebx@9
  int v8; // eax@9
  lua_TValue *v9; // eax@10
  int v10; // eax@11
  int result; // eax@12
  Closure *f; // [sp+10h] [bp-8h]@7
  lua_TValue *func; // [sp+14h] [bp-4h]@2

  v3 = what;
  if ( *what == 62 )
  {
    v4 = L->top - 1;
    v5 = 0;
    v3 = what + 1;
    func = v4;
    ++what;
    L->top = v4;
  }
  else
  {
    v5 = ar->i_ci;
    func = v5->func;
    v4 = v5->func;
  }
  v6 = v4->u.i.tt__;
  if ( (v4->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v6) = 3;
  if ( (v6 & 0x1F) == 6 )
    f = (Closure *)v4->u.i.v__.gc;
  else
    f = 0;
  v7 = auxgetinfo(L, v3, ar, f, v5);
  strchr((char *)what, 102);
  if ( v8 )
  {
    v9 = L->top;
    v9->u.i.v__.gc = func->u.i.v__.gc;
    v9->u.i.tt__ = func->u.i.tt__;
    ++L->top;
  }
  strchr((char *)what, 76);
  if ( v10 )
  {
    collectvalidlines(L, f);
    result = v7;
  }
  else
  {
    result = v7;
  }
  return result;
}

//----- (0074EC60) --------------------------------------------------------
void __cdecl luaG_typeerror(lua_State *L, lua_TValue *o, const char *op)
{
  CallInfo *v3; // esi@1
  lua_TValue *v4; // ecx@3
  lua_TValue *v5; // eax@3
  void *name; // [sp+Ch] [bp-4h]@1

  v3 = L->ci;
  name = 0;
  if ( v3->callstatus & 1 )
  {
    if ( getupvalname(v3, o, (const char **)&name) )
      goto LABEL_11;
    v4 = v3->top;
    v5 = v3->u.l.base;
    if ( v5 < v4 )
    {
      while ( o != v5 )
      {
        ++v5;
        if ( v5 >= v4 )
          goto LABEL_6;
      }
      if ( getobjname(
             (Proto *)v3->func->u.i.v__.gc->ts.tsv.len,
             ((signed int)((char *)v3->u.l.savedpc - *(_DWORD *)(v3->func->u.i.v__.gc->ts.tsv.len + 12)) >> 2) - 1,
             o - v3->u.l.base,
             (const char **)&name) )
LABEL_11:
        luaG_runerror(L, "attempt to %s %s '%s' (a %s value)");
    }
  }
LABEL_6:
  luaG_runerror(L, "attempt to %s a %s value");
}

//----- (0074ED30) --------------------------------------------------------
void __cdecl luaG_concaterror(lua_State *L, lua_TValue *p1, lua_TValue *p2)
{
  lua_TValue *v3; // ecx@1

  v3 = p1;
  if ( (p1->u.i.tt__ | 0x70) == 2146936180 || (p1->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    v3 = p2;
  luaG_typeerror(L, v3, "concatenate");
}

//----- (0074ED70) --------------------------------------------------------
void __cdecl luaG_aritherror(lua_State *L, lua_TValue *p1, lua_TValue *p2)
{
  bool v3; // zf@1
  lua_TValue *v4; // eax@1
  lua_TValue temp; // [sp+4h] [bp-8h]@1

  v3 = luaV_tonumber(p1, &temp) == 0;
  v4 = p1;
  if ( !v3 )
    v4 = p2;
  luaG_typeerror(L, v4, "perform arithmetic on");
}

//----- (0074EDA0) --------------------------------------------------------
void __cdecl luaG_ordererror(lua_State *L, lua_TValue *p1, lua_TValue *p2)
{
  int v3; // eax@1
  int v4; // ecx@3
  char *v5; // eax@3

  v3 = p1->u.i.tt__;
  if ( (p1->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v3) = 3;
  v4 = p2->u.i.tt__;
  v5 = off_9DD2C0[v3 & 0xF];
  if ( (p2->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v4) = 3;
  if ( v5 == off_9DD2C0[v4 & 0xF] )
    luaG_runerror(L, "attempt to compare two %s values");
  luaG_runerror(L, "attempt to compare %s with %s");
}
// 9DD2C0: using guessed type char *off_9DD2C0[11];

//----- (0074EE20) --------------------------------------------------------
int __cdecl luaS_eqlngstr(TString *a, TString *b)
{
  unsigned int v2; // eax@1
  TString *v3; // ecx@3
  TString *v4; // esi@3

  v2 = a->tsv.len;
  if ( a != b )
  {
    if ( v2 != b->tsv.len )
      return 0;
    v3 = b + 1;
    v4 = a + 1;
    if ( v2 >= 4 )
    {
      while ( LODWORD(v4->dummy.u) == LODWORD(v3->dummy.u) )
      {
        v2 -= 4;
        v3 = (TString *)((char *)v3 + 4);
        v4 = (TString *)((char *)v4 + 4);
        if ( v2 < 4 )
          goto LABEL_6;
      }
      return 0;
    }
LABEL_6:
    if ( v2 )
    {
      if ( LOBYTE(v3->dummy.u) != LOBYTE(v4->dummy.u)
        || v2 > 1 && (BYTE1(v3->dummy.u) != BYTE1(v4->dummy.u) || v2 > 2 && BYTE2(v3->dummy.u) != BYTE2(v4->dummy.u)) )
        return 0;
    }
  }
  return 1;
}

//----- (0074EE90) --------------------------------------------------------
int __cdecl luaS_eqstr(TString *a, TString *b)
{
  char v2; // dl@1
  int v3; // eax@3

  v2 = BYTE4(a->dummy.u);
  return v2 == BYTE4(b->dummy.u) && (v2 != 4 ? (v3 = luaS_eqlngstr(a, b)) : (v3 = a == b), v3);
}

//----- (0074EED0) --------------------------------------------------------
unsigned int __cdecl luaS_hash(const char *str, unsigned int l, unsigned int seed)
{
  unsigned int v3; // edx@1
  unsigned int result; // eax@1
  unsigned int v5; // ecx@1
  unsigned int v6; // edi@2

  v3 = l;
  result = seed ^ l;
  v5 = (l >> 5) + 1;
  if ( l >= v5 )
  {
    do
    {
      v6 = (result >> 2) + 32 * result + (unsigned __int8)str[v3 - 1];
      v3 -= v5;
      result ^= v6;
    }
    while ( v3 >= v5 );
  }
  return result;
}

//----- (0074EF10) --------------------------------------------------------
void __cdecl luaS_resize(lua_State *L, int newsize)
{
  lua_State *v2; // ebx@1
  global_State *v3; // esi@1
  int v4; // eax@1
  int v5; // edi@1
  int j; // eax@4
  int v7; // edx@6
  int v8; // ecx@7
  int v9; // eax@7
  int v10; // edi@8
  int v11; // edx@9
  int v12; // ecx@9
  int v13; // eax@12
  int i; // [sp+Ch] [bp-4h]@6

  v2 = L;
  v3 = L->l_G;
  luaC_runtilstate(L, -5);
  v4 = v3->strt.size;
  v5 = newsize;
  if ( newsize > v4 )
  {
    if ( (unsigned int)(newsize + 1) > 0x3FFFFFFF )
      luaM_toobig(L);
    v3->strt.hash = (GCObject **)luaM_realloc_(L, v3->strt.hash, 4 * v4, 4 * newsize);
    for ( j = v3->strt.size; j < newsize; ++j )
      v3->strt.hash[j] = 0;
  }
  v7 = 0;
  for ( i = 0; v7 < v3->strt.size; i = v7 )
  {
    v8 = (int)&v3->strt.hash[v7];
    v9 = *(_DWORD *)v8;
    *(_DWORD *)v8 = 0;
    if ( v9 )
    {
      v10 = v5 - 1;
      do
      {
        v11 = *(_DWORD *)v9;
        v12 = v10 & *(_DWORD *)(v9 + 8);
        *(_DWORD *)v9 = v3->strt.hash[v12];
        v3->strt.hash[v12] = (GCObject *)v9;
        *(_BYTE *)(v9 + 5) &= 0xBFu;
        v9 = v11;
      }
      while ( v11 );
      v5 = newsize;
      v2 = L;
      v7 = i;
    }
    ++v7;
  }
  v13 = v3->strt.size;
  if ( v5 < v13 )
  {
    if ( (unsigned int)(v5 + 1) > 0x3FFFFFFF )
      luaM_toobig(v2);
    v3->strt.hash = (GCObject **)luaM_realloc_(v2, v3->strt.hash, 4 * v13, 4 * v5);
  }
  v3->strt.size = v5;
}

//----- (0074F020) --------------------------------------------------------
TString *__usercall internshrstr<eax>(unsigned int l<edi>, lua_State *L, const char *str)
{
  global_State *v3; // ebx@1
  unsigned int v4; // eax@1
  unsigned int v5; // esi@1
  TString *result; // eax@1
  const char *v7; // edx@4
  unsigned int v8; // ecx@4
  TString *v9; // esi@4
  signed int v10; // eax@16
  GCObject *v11; // eax@19
  TString *v12; // esi@19
  unsigned __int8 v13; // cl@22
  unsigned int h; // [sp+8h] [bp-8h]@1
  TString *o; // [sp+Ch] [bp-4h]@1

  v3 = L->l_G;
  v4 = luaS_hash(str, l, v3->seed);
  v5 = v4;
  result = (TString *)v3->strt.hash[v4 & (v3->strt.size - 1)];
  h = v5;
  o = result;
  if ( !result )
  {
LABEL_16:
    v10 = v3->strt.size;
    if ( v3->strt.nuse >= v10 )
    {
      if ( v10 <= 1073741822 )
        luaS_resize(L, 2 * v10);
    }
    v11 = luaC_newobj(L, 4, l + 17, &v3->strt.hash[v5 & (v3->strt.size - 1)], 0);
    v12 = (TString *)v11;
    v11->ts.tsv.len = l;
    v11->ts.tsv.hash = h;
    *(&v11->gch.marked + 1) = 0;
    memcpy((char *)&v11->u.uv.len, (char *)str, l);
    *((_BYTE *)&v12[1].dummy.u + l) = 0;
    ++v3->strt.nuse;
    return v12;
  }
  while ( 1 )
  {
    if ( v5 != result->tsv.hash || l != result->tsv.len )
      goto LABEL_15;
    v7 = str;
    v8 = l;
    v9 = result + 1;
    if ( l < 4 )
      break;
    while ( *(_DWORD *)v7 == LODWORD(v9->dummy.u) )
    {
      v8 -= 4;
      v9 = (TString *)((char *)v9 + 4);
      v7 += 4;
      if ( v8 < 4 )
      {
        result = o;
        goto LABEL_8;
      }
    }
LABEL_14:
    result = o;
LABEL_15:
    result = (TString *)LODWORD(result->dummy.u);
    v5 = h;
    o = result;
    if ( !result )
      goto LABEL_16;
  }
LABEL_8:
  if ( !v8 )
    goto LABEL_22;
  if ( LOBYTE(v9->dummy.u) != *v7 || v8 > 1 && (BYTE1(v9->dummy.u) != v7[1] || v8 > 2 && BYTE2(v9->dummy.u) != v7[2]) )
    goto LABEL_14;
  result = o;
LABEL_22:
  v13 = BYTE5(result->dummy.u) ^ 3;
  if ( !((unsigned __int8)(v3->currentwhite ^ 3) & v13) )
    BYTE5(result->dummy.u) = v13;
  return result;
}

//----- (0074F150) --------------------------------------------------------
TString *__cdecl luaS_newlstr(lua_State *L, const char *str, unsigned int l)
{
  TString *result; // eax@2
  unsigned int v4; // ebx@5
  GCObject *v5; // eax@5
  TString *v6; // esi@5

  if ( l > 0x28 )
  {
    if ( l + 1 > 0xFFFFFFED )
      luaM_toobig(L);
    v4 = L->l_G->seed;
    v5 = luaC_newobj(L, 20, l + 17, 0, 0);
    v6 = (TString *)v5;
    v5->ts.tsv.len = l;
    v5->ts.tsv.hash = v4;
    *(&v5->gch.marked + 1) = 0;
    memcpy((char *)&v5->u.uv.len, (char *)str, l);
    *((_BYTE *)&v6[1].dummy.u + l) = 0;
    result = v6;
  }
  else
  {
    result = internshrstr(L, str, l);
  }
  return result;
}

//----- (0074F1D0) --------------------------------------------------------
TString *__cdecl luaS_new(lua_State *L, const char *str)
{
  return luaS_newlstr(L, str, strlen(str));
}

//----- (0074F200) --------------------------------------------------------
Udata *__cdecl luaS_newudata(lua_State *L, unsigned int s, Table *e)
{
  Udata *result; // eax@3

  if ( s > 0xFFFFFFE5 )
    luaM_toobig(L);
  result = (Udata *)luaC_newobj(L, 7, s + 24, 0, 0);
  result->uv.len = s;
  result->uv.metatable = 0;
  result->uv.env = e;
  return result;
}

//----- (0074F240) --------------------------------------------------------
Closure *__cdecl luaF_newCclosure(lua_State *L, int n)
{
  Closure *result; // eax@1

  result = (Closure *)luaC_newobj(L, 38, 8 * n + 16, 0, 0);
  result->c.nupvalues = n;
  return result;
}

//----- (0074F270) --------------------------------------------------------
Closure *__cdecl luaF_newLclosure(lua_State *L, int n)
{
  int v2; // ebx@1
  Closure *result; // eax@1
  char *v4; // ecx@2

  v2 = n;
  result = (Closure *)luaC_newobj(L, 6, 4 * n + 16, 0, 0);
  result->c.f = 0;
  result->c.nupvalues = n;
  if ( n )
  {
    v4 = (char *)result->c.upvalue + 4 * n;
    do
    {
      v4 -= 4;
      --v2;
      *(_DWORD *)v4 = 0;
    }
    while ( v2 );
  }
  return result;
}

//----- (0074F2C0) --------------------------------------------------------
UpVal *__cdecl luaF_newupval(lua_State *L)
{
  UpVal *result; // eax@1

  result = (UpVal *)luaC_newobj(L, 10, 0x18u, 0, 0);
  result->v = (lua_TValue *)&result->u;
  result->u.value.u.i.tt__ = 2146936064;
  return result;
}

//----- (0074F2F0) --------------------------------------------------------
UpVal *__cdecl luaF_findupval(lua_State *L, lua_TValue *level)
{
  global_State *v2; // esi@1
  UpVal *v3; // ecx@1
  UpVal *result; // eax@2
  lua_TValue *v5; // edx@2
  int v6; // ecx@5
  char v7; // cl@7

  v2 = L->l_G;
  v3 = (UpVal *)&L->openupval;
  if ( L->openupval )
  {
    do
    {
      result = (UpVal *)v3->next;
      v5 = (lua_TValue *)v3->next->ts.tsv.hash;
      if ( v5 < level )
        break;
      if ( v5 == level )
      {
        v7 = result->marked ^ 3;
        if ( !((unsigned __int8)(v2->currentwhite ^ 3) & (unsigned __int8)v7) )
          result->marked = v7;
        return result;
      }
      v3 = (UpVal *)v3->next;
    }
    while ( result->next );
  }
  result = (UpVal *)luaC_newobj(L, 10, 0x18u, &v3->next, 0);
  result->v = level;
  result->u.value.u.i.v__.gc = (GCObject *)&v2->uvhead;
  v6 = v2->uvhead.u.value.u.i.tt__;
  result->u.value.u.i.tt__ = v6;
  *(_DWORD *)(v6 + 16) = result;
  v2->uvhead.u.value.u.i.tt__ = (int)result;
  return result;
}

//----- (0074F360) --------------------------------------------------------
void __cdecl luaF_freeupval(lua_State *L, UpVal *uv)
{
  char *v2; // ecx@1

  v2 = (char *)&uv->u;
  if ( ($308ACF6AFBA06576E22F243843398D7D *)uv->v != &uv->u )
  {
    *(_DWORD *)(uv->u.value.u.i.tt__ + 16) = *(_DWORD *)v2;
    *(_DWORD *)(*(_DWORD *)v2 + 20) = uv->u.value.u.i.tt__;
  }
  luaM_realloc_(L, uv, 0x18u, 0);
}

//----- (0074F3A0) --------------------------------------------------------
void __cdecl luaF_close(lua_State *L, lua_TValue *level)
{
  global_State *v2; // edi@1
  GCObject *v3; // eax@2
  int v4; // ecx@3
  unsigned int v5; // edx@7

  v2 = L->l_G;
  while ( L->openupval )
  {
    v3 = L->openupval;
    if ( v3->ts.tsv.hash < (unsigned int)level )
      break;
    L->openupval = v3->gch.next;
    v4 = (int)&v3->u.uv.len;
    if ( (unsigned __int8)(v2->currentwhite ^ 3) & (unsigned __int8)(v3->gch.marked ^ 3) )
    {
      *(_DWORD *)(v3->cl.c.upvalue[0].u.i.tt__ + 16) = *(_DWORD *)v4;
      *(_DWORD *)(*(_DWORD *)v4 + 20) = v3->cl.c.upvalue[0].u.i.tt__;
      v5 = v3->ts.tsv.hash;
      *(_DWORD *)v4 = *(_DWORD *)v5;
      v3->cl.c.upvalue[0].u.i.tt__ = *(_DWORD *)(v5 + 4);
      v3->ts.tsv.hash = v4;
      v3->gch.next = v2->allgc;
      v2->allgc = v3;
      luaC_checkupvalcolor(v2, (UpVal *)v3);
    }
    else
    {
      if ( v3->ts.tsv.hash != v4 )
      {
        *(_DWORD *)(v3->cl.c.upvalue[0].u.i.tt__ + 16) = *(_DWORD *)v4;
        *(_DWORD *)(*(_DWORD *)v4 + 20) = v3->cl.c.upvalue[0].u.i.tt__;
      }
      luaM_realloc_(L, v3, 0x18u, 0);
    }
  }
}

//----- (0074F440) --------------------------------------------------------
Proto *__cdecl luaF_newproto(lua_State *L)
{
  Proto *result; // eax@1

  result = (Proto *)luaC_newobj(L, 9, 0x50u, 0, 0);
  result->k = 0;
  result->sizek = 0;
  result->p = 0;
  result->sizep = 0;
  result->code = 0;
  result->cache = 0;
  result->sizecode = 0;
  result->lineinfo = 0;
  result->sizelineinfo = 0;
  result->upvalues = 0;
  result->sizeupvalues = 0;
  *(_WORD *)&result->numparams = 0;
  result->maxstacksize = 0;
  result->locvars = 0;
  result->sizelocvars = 0;
  result->linedefined = 0;
  result->lastlinedefined = 0;
  result->source = 0;
  return result;
}

//----- (0074F4A0) --------------------------------------------------------
void __cdecl luaF_freeproto(lua_State *L, Proto *f)
{
  Proto *v2; // esi@1

  v2 = f;
  luaM_realloc_(L, f->code, 4 * f->sizecode, 0);
  luaM_realloc_(L, v2->p, 4 * v2->sizep, 0);
  luaM_realloc_(L, v2->k, 8 * v2->sizek, 0);
  luaM_realloc_(L, v2->lineinfo, 4 * v2->sizelineinfo, 0);
  luaM_realloc_(L, v2->locvars, 12 * v2->sizelocvars, 0);
  luaM_realloc_(L, v2->upvalues, 8 * v2->sizeupvalues, 0);
  luaM_realloc_(L, f, 0x50u, 0);
}

//----- (0074F540) --------------------------------------------------------
const char *__cdecl luaF_getlocalname(Proto *f, int local_number, int pc)
{
  int v3; // edx@1
  int v4; // eax@1
  LocVar *v5; // ebx@2
  int v6; // edi@2
  int v7; // ecx@2

  v3 = f->sizelocvars;
  v4 = 0;
  if ( v3 > 0 )
  {
    v5 = f->locvars;
    v6 = local_number;
    v7 = (int)&v5->endpc;
    while ( *(_DWORD *)(v7 - 4) <= pc )
    {
      if ( pc < *(_DWORD *)v7 )
      {
        --v6;
        if ( !v6 )
          return (const char *)&v5[v4].varname[1];
      }
      ++v4;
      v7 += 12;
      if ( v4 >= v3 )
        return 0;
    }
  }
  return 0;
}

//----- (0074F590) --------------------------------------------------------
int __cdecl luaZ_fill(Zio *z)
{
  Zio *v1; // esi@1
  const char *v2; // eax@1
  char *v3; // ecx@3
  int result; // eax@3

  v1 = z;
  v2 = z->reader(z->L, z->data, (unsigned int *)&z);
  if ( v2 && z )
  {
    v3 = (char *)z - 1;
    v1->p = v2;
    v1->n = (unsigned int)v3;
    LOBYTE(v3) = *v2;
    v1->p = v2 + 1;
    result = (unsigned __int8)v3;
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (0074F5D0) --------------------------------------------------------
void __cdecl luaZ_init(lua_State *L, Zio *z, const char *(__cdecl *reader)(lua_State *, void *, unsigned int *), void *data)
{
  z->L = L;
  z->reader = reader;
  z->data = data;
  z->n = 0;
  z->p = 0;
}

//----- (0074F600) --------------------------------------------------------
unsigned int __cdecl luaZ_read(Zio *z, void *b, unsigned int n)
{
  unsigned int v3; // ebx@1
  const char *v4; // eax@3
  unsigned int v5; // ecx@5
  int v6; // edx@5
  const char *v7; // eax@5
  unsigned int v8; // edi@7

  v3 = n;
  if ( !n )
    return 0;
  while ( z->n )
  {
LABEL_7:
    v8 = z->n;
    if ( v3 <= z->n )
      v8 = v3;
    memcpy((char *)b, (char *)z->p, v8);
    z->n -= v8;
    z->p += v8;
    b = (char *)b + v8;
    v3 -= v8;
    if ( !v3 )
      return 0;
  }
  v4 = z->reader(z->L, z->data, &n);
  if ( v4 )
  {
    if ( n )
    {
      v5 = n - 1;
      z->p = v4;
      z->n = v5;
      v6 = (unsigned __int8)*v4;
      v7 = v4 + 1;
      z->p = v7;
      if ( v6 != -1 )
      {
        z->n = v5 + 1;
        z->p = v7 - 1;
        goto LABEL_7;
      }
    }
  }
  return v3;
}

//----- (0074F690) --------------------------------------------------------
char *__cdecl luaZ_openspace(lua_State *L, Mbuffer *buff, unsigned int n)
{
  signed int v3; // esi@1
  unsigned int v4; // eax@1

  v3 = n;
  v4 = buff->buffsize;
  if ( n > v4 )
  {
    if ( n < 0x20 )
      v3 = 32;
    if ( (unsigned int)(v3 + 1) > 0xFFFFFFFD )
      luaM_toobig(L);
    buff->buffer = (char *)luaM_realloc_(L, buff->buffer, v4, v3);
    buff->buffsize = v3;
  }
  return buff->buffer;
}

//----- (0074F6E0) --------------------------------------------------------
void __usercall DumpString(TString *s<eax>, DumpState *D<esi>)
{
  TString *v2; // edi@1
  bool v3; // zf@4
  unsigned int size; // [sp+4h] [bp-4h]@2

  v2 = s;
  if ( s )
  {
    v3 = D->status == 0;
    size = s->tsv.len + 1;
    if ( v3 )
    {
      D->status = D->writer(D->L, &size, 4u, D->data);
      if ( !D->status )
        D->status = D->writer(D->L, &v2[1], size, D->data);
    }
  }
  else
  {
    size = 0;
    if ( !D->status )
      D->status = D->writer(D->L, &size, 4u, D->data);
  }
}

//----- (0074F760) --------------------------------------------------------
void __usercall DumpConstants(DumpState *D<eax>, Proto *f)
{
  DumpState *v2; // esi@1
  bool v3; // zf@1
  int v4; // edi@1
  int v5; // ebx@3
  lua_TValue *v6; // edi@4
  int v7; // eax@4
  int v8; // eax@8
  int v9; // eax@10
  int v10; // eax@11
  int v11; // eax@15
  int v12; // ebx@20
  int i; // edi@22
  int n; // [sp+Ch] [bp-10h]@1
  double v15; // [sp+10h] [bp-Ch]@1
  char v16; // [sp+1Bh] [bp-1h]@6

  v2 = D;
  v3 = D->status == 0;
  v4 = f->sizek;
  n = v4;
  HIDWORD(v15) = v4;
  if ( v3 )
    D->status = D->writer(D->L, (char *)&v15 + 4, 4u, D->data);
  v5 = 0;
  if ( v4 > 0 )
  {
    do
    {
      v6 = &f->k[v5];
      v7 = v6->u.i.tt__;
      if ( (v6->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v7) = 3;
      v3 = v2->status == 0;
      v16 = v7 & 0xF;
      if ( v3 )
        v2->status = v2->writer(v2->L, &v16, 1u, v2->data);
      v8 = v6->u.i.tt__;
      if ( (v6->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
        LOBYTE(v8) = 3;
      v9 = (v8 & 0xF) - 1;
      if ( v9 )
      {
        v10 = v9 - 2;
        if ( v10 )
        {
          if ( v10 == 1 )
            DumpString((TString *)v6->u.i.v__.gc, v2);
          goto LABEL_19;
        }
        v3 = v2->status == 0;
        v15 = *(double *)&v6->u.i.v__.gc;
        if ( v3 )
        {
          v11 = v2->writer(v2->L, &v15, 8u, v2->data);
LABEL_18:
          v2->status = v11;
          goto LABEL_19;
        }
      }
      else
      {
        v3 = v2->status == 0;
        v16 = LOBYTE(v6->u.i.v__.gc);
        if ( v3 )
        {
          v11 = v2->writer(v2->L, &v16, 1u, v2->data);
          goto LABEL_18;
        }
      }
LABEL_19:
      ++v5;
    }
    while ( v5 < n );
  }
  v3 = v2->status == 0;
  v12 = f->sizep;
  n = f->sizep;
  if ( v3 )
    v2->status = v2->writer(v2->L, &n, 4u, v2->data);
  for ( i = 0; i < v12; ++i )
    DumpFunction(f->p[i], v2);
}

//----- (0074F8C0) --------------------------------------------------------
void __usercall DumpUpvalues(Proto *f<ebx>, DumpState *D<esi>)
{
  bool v2; // zf@1
  int i; // edi@3
  int v4; // [sp+0h] [bp-Ch]@1
  int n; // [sp+4h] [bp-8h]@1
  char v6; // [sp+Bh] [bp-1h]@4

  v2 = D->status == 0;
  n = f->sizeupvalues;
  v4 = n;
  if ( v2 )
    D->status = D->writer(D->L, &v4, 4u, D->data);
  for ( i = 0; i < n; ++i )
  {
    v2 = D->status == 0;
    v6 = f->upvalues[i].instack;
    if ( v2 )
      D->status = D->writer(D->L, &v6, 1u, D->data);
    v2 = D->status == 0;
    v6 = f->upvalues[i].idx;
    if ( v2 )
      D->status = D->writer(D->L, &v6, 1u, D->data);
  }
}

//----- (0074F950) --------------------------------------------------------
void __usercall DumpDebug(DumpState *D<eax>, Proto *f)
{
  DumpState *v2; // esi@1
  TString *v3; // eax@2
  int v4; // edi@5
  bool v5; // zf@7
  int *v6; // ebx@7
  int v7; // eax@8
  int v8; // edi@11
  int v9; // ebx@16
  TString *v10; // edi@17
  int v11; // eax@21
  int v12; // edi@30
  int v13; // ebx@34
  TString *v14; // edi@35
  int v15; // eax@39
  int v16; // [sp-Ch] [bp-28h]@19
  int v17; // [sp-Ch] [bp-28h]@37
  signed int v18; // [sp-8h] [bp-24h]@19
  signed int v19; // [sp-8h] [bp-24h]@37
  void *v20; // [sp-4h] [bp-20h]@19
  void *v21; // [sp-4h] [bp-20h]@37
  int v22; // [sp+Ch] [bp-10h]@26
  int v23; // [sp+10h] [bp-Ch]@24
  int v24; // [sp+14h] [bp-8h]@7
  int n; // [sp+18h] [bp-4h]@18

  v2 = D;
  if ( D->strip )
    v3 = 0;
  else
    v3 = f->source;
  DumpString(v3, v2);
  if ( v2->strip )
    v4 = 0;
  else
    v4 = f->sizelineinfo;
  v5 = v2->status == 0;
  v6 = f->lineinfo;
  v24 = v4;
  if ( v5 )
  {
    v7 = v2->writer(v2->L, &v24, 4u, v2->data);
    v2->status = v7;
    if ( !v7 )
      v2->status = v2->writer(v2->L, v6, 4 * v4, v2->data);
  }
  if ( v2->strip )
    v8 = 0;
  else
    v8 = f->sizelocvars;
  v5 = v2->status == 0;
  v24 = v8;
  if ( v5 )
    v2->status = v2->writer(v2->L, &v24, 4u, v2->data);
  if ( v8 > 0 )
  {
    v9 = 0;
    v24 = v8;
    while ( 1 )
    {
      v10 = f->locvars[v9].varname;
      if ( v10 )
        break;
      n = 0;
      if ( !v2->status )
      {
        v20 = v2->data;
        v18 = 4;
        v16 = (int)&n;
LABEL_23:
        v2->status = v2->writer(v2->L, (const void *)v16, v18, v20);
      }
LABEL_24:
      v5 = v2->status == 0;
      v23 = f->locvars[v9].startpc;
      if ( v5 )
        v2->status = v2->writer(v2->L, &v23, 4u, v2->data);
      v5 = v2->status == 0;
      v22 = f->locvars[v9].endpc;
      if ( v5 )
        v2->status = v2->writer(v2->L, &v22, 4u, v2->data);
      ++v9;
      --v24;
      if ( !v24 )
        goto LABEL_29;
    }
    v5 = v2->status == 0;
    n = v10->tsv.len + 1;
    if ( !v5 || (v11 = v2->writer(v2->L, &n, 4u, v2->data), (v2->status = v11) != 0) )
      goto LABEL_24;
    v20 = v2->data;
    v18 = n;
    v16 = (int)&v10[1];
    goto LABEL_23;
  }
LABEL_29:
  if ( v2->strip )
  {
    v12 = 0;
    n = 0;
  }
  else
  {
    n = f->sizeupvalues;
    v12 = n;
  }
  v5 = v2->status == 0;
  v22 = v12;
  if ( v5 )
    v2->status = v2->writer(v2->L, &v22, 4u, v2->data);
  v13 = 0;
  if ( v12 > 0 )
  {
    while ( 1 )
    {
      v14 = f->upvalues[v13].name;
      if ( v14 )
        break;
      v22 = 0;
      if ( !v2->status )
      {
        v21 = v2->data;
        v19 = 4;
        v17 = (int)&v22;
LABEL_41:
        v2->status = v2->writer(v2->L, (const void *)v17, v19, v21);
      }
LABEL_42:
      ++v13;
      if ( v13 >= n )
        return;
    }
    v5 = v2->status == 0;
    v24 = v14->tsv.len + 1;
    if ( !v5 || (v15 = v2->writer(v2->L, &v24, 4u, v2->data), (v2->status = v15) != 0) )
      goto LABEL_42;
    v21 = v2->data;
    v19 = v24;
    v17 = (int)&v14[1];
    goto LABEL_41;
  }
}

//----- (0074FB80) --------------------------------------------------------
void __cdecl DumpFunction(Proto *f, DumpState *D)
{
  Proto *v2; // ebx@1
  DumpState *v3; // esi@1
  bool v4; // zf@1
  Proto *v5; // edi@11
  int v6; // eax@12

  v2 = f;
  v3 = D;
  v4 = D->status == 0;
  f = (Proto *)f->linedefined;
  if ( v4 )
    D->status = D->writer(D->L, &f, 4u, D->data);
  v4 = v3->status == 0;
  f = (Proto *)v2->lastlinedefined;
  if ( v4 )
    v3->status = v3->writer(v3->L, &f, 4u, v3->data);
  v4 = v3->status == 0;
  BYTE3(f) = v2->numparams;
  if ( v4 )
    v3->status = v3->writer(v3->L, (char *)&f + 3, 1u, v3->data);
  v4 = v3->status == 0;
  BYTE3(f) = v2->is_vararg;
  if ( v4 )
    v3->status = v3->writer(v3->L, (char *)&f + 3, 1u, v3->data);
  v4 = v3->status == 0;
  BYTE3(f) = v2->maxstacksize;
  if ( v4 )
    v3->status = v3->writer(v3->L, (char *)&f + 3, 1u, v3->data);
  v4 = v3->status == 0;
  v5 = (Proto *)v2->sizecode;
  D = (DumpState *)v2->code;
  f = v5;
  if ( v4 )
  {
    v6 = v3->writer(v3->L, &f, 4u, v3->data);
    v3->status = v6;
    if ( !v6 )
      v3->status = v3->writer(v3->L, D, 4 * (_DWORD)v5, v3->data);
  }
  DumpConstants(v2, v3);
  DumpUpvalues(v2, v3);
  DumpDebug(v2, v3);
}

//----- (0074FCB0) --------------------------------------------------------
int __cdecl luaU_dump(lua_State *L, Proto *f, int (__cdecl *w)(lua_State *, const void *, unsigned int, void *), void *data, int strip)
{
  DumpState D; // [sp+4h] [bp-2Ch]@1
  char h; // [sp+18h] [bp-18h]@1
  unsigned int v8; // [sp+2Ch] [bp-4h]@1
  int v9; // [sp+30h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  D.writer = w;
  D.L = L;
  D.data = data;
  D.strip = strip;
  D.status = 0;
  luaU_header(&h);
  D.status = D.writer(D.L, &h, 18u, D.data);
  DumpFunction(f, &D);
  return D.status;
}
// A85C00: using guessed type int __security_cookie;

//----- (0074FD30) --------------------------------------------------------
int __cdecl db_getregistry(lua_State *L)
{
  lua_pushvalue(L, -1001000);
  return 1;
}

//----- (0074FD50) --------------------------------------------------------
int __cdecl db_getmetatable(lua_State *L)
{
  luaL_checkany(L, 1);
  if ( !lua_getmetatable(L, 1) )
    lua_pushnil(L);
  return 1;
}

//----- (0074FD80) --------------------------------------------------------
int __cdecl db_setmetatable(lua_State *L)
{
  int v1; // eax@1

  v1 = lua_type(L, 2);
  if ( v1 && v1 != 5 )
    luaL_argerror(L, 2, "nil or table expected");
  lua_settop(L, 2);
  lua_setmetatable(L, 1);
  return 1;
}

//----- (0074FDD0) --------------------------------------------------------
int __cdecl db_getuservalue(lua_State *L)
{
  int result; // eax@2

  if ( lua_type(L, 1) == 7 )
  {
    lua_getuservalue(L, 1);
    result = 1;
  }
  else
  {
    lua_pushnil(L);
    result = 1;
  }
  return result;
}

//----- (0074FE10) --------------------------------------------------------
int __cdecl db_setuservalue(lua_State *L)
{
  if ( lua_type(L, 1) == 2 )
    luaL_argerror(L, 1, "full userdata expected, got light userdata");
  luaL_checktype(L, 1, 7);
  if ( lua_type(L, 2) > 0 )
    luaL_checktype(L, 2, 5);
  lua_settop(L, 2);
  lua_setuservalue(L, 1);
  return 1;
}

//----- (0074FE80) --------------------------------------------------------
void __usercall treatstackoption(lua_State *L<esi>, lua_State *L1<eax>, const char *fname)
{
  if ( L == L1 )
  {
    lua_pushvalue(L, -2);
    lua_remove(L, -3);
    lua_setfield(L, -2, fname);
  }
  else
  {
    lua_xmove(L1, L, 1);
    lua_setfield(L, -2, fname);
  }
}

//----- (0074FED0) --------------------------------------------------------
int __cdecl db_getinfo(lua_State *L)
{
  signed int v1; // edi@2
  const char *v2; // eax@4
  int v3; // edi@4
  const char *v4; // ebx@4
  int v5; // eax@5
  lua_State *v6; // edi@5
  int v8; // eax@11
  int v9; // eax@13
  int v10; // eax@15
  int v11; // eax@17
  int v12; // eax@19
  int v13; // eax@21
  int v14; // eax@23
  int v15; // [sp-8h] [bp-84h]@10
  const char *v16; // [sp-4h] [bp-80h]@10
  int v17; // [sp+Ch] [bp-70h]@4
  lua_State *L1; // [sp+10h] [bp-6Ch]@2
  lua_Debug ar; // [sp+14h] [bp-68h]@5
  unsigned int v20; // [sp+78h] [bp-4h]@1
  int v21; // [sp+7Ch] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  if ( lua_type(L, 1) == 8 )
  {
    v1 = 1;
    L1 = lua_tothread(L, 1);
  }
  else
  {
    v1 = 0;
    L1 = L;
  }
  v17 = v1 + 2;
  v2 = luaL_optlstring(L, v1 + 2, "flnStu", 0);
  v3 = v1 + 1;
  v4 = v2;
  if ( lua_isnumber(L, v3) )
  {
    v5 = lua_tointegerx(L, v3, 0);
    v6 = L1;
    if ( !lua_getstack(L1, v5, &ar) )
    {
      lua_pushnil(L);
      return 1;
    }
  }
  else
  {
    if ( lua_type(L, v3) != 6 )
    {
      v16 = "function or level expected";
      v15 = v3;
LABEL_27:
      luaL_argerror(L, v15, v16);
    }
    lua_pushfstring(L, ">%s");
    v4 = lua_tolstring(L, -1, 0);
    lua_pushvalue(L, v3);
    lua_xmove(L, L1, 1);
    v6 = L1;
  }
  if ( !lua_getinfo(v6, v4, &ar) )
  {
    v16 = "invalid option";
    v15 = v17;
    goto LABEL_27;
  }
  lua_createtable(L, 0, 2);
  strchr((char *)v4, 83);
  if ( v8 )
  {
    lua_pushstring(L, ar.source);
    lua_setfield(L, -2, "source");
    lua_pushstring(L, ar.short_src);
    lua_setfield(L, -2, "short_src");
    lua_pushinteger(L, ar.linedefined);
    lua_setfield(L, -2, "linedefined");
    lua_pushinteger(L, ar.lastlinedefined);
    lua_setfield(L, -2, "lastlinedefined");
    lua_pushstring(L, ar.what);
    lua_setfield(L, -2, "what");
  }
  strchr((char *)v4, 108);
  if ( v9 )
  {
    lua_pushinteger(L, ar.currentline);
    lua_setfield(L, -2, "currentline");
  }
  strchr((char *)v4, 117);
  if ( v10 )
  {
    lua_pushinteger(L, (unsigned __int8)ar.nups);
    lua_setfield(L, -2, "nups");
    lua_pushinteger(L, (unsigned __int8)ar.nparams);
    lua_setfield(L, -2, "nparams");
    lua_pushboolean(L, ar.isvararg);
    lua_setfield(L, -2, "isvararg");
  }
  strchr((char *)v4, 110);
  if ( v11 )
  {
    lua_pushstring(L, ar.name);
    lua_setfield(L, -2, "name");
    lua_pushstring(L, ar.namewhat);
    lua_setfield(L, -2, "namewhat");
  }
  strchr((char *)v4, 116);
  if ( v12 )
  {
    lua_pushboolean(L, ar.istailcall);
    lua_setfield(L, -2, "istailcall");
  }
  strchr((char *)v4, 76);
  if ( v13 )
    treatstackoption(L, v6, "activelines");
  strchr((char *)v4, 102);
  if ( v14 )
    treatstackoption(L, v6, "func");
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (007501D0) --------------------------------------------------------
int __cdecl db_getlocal(lua_State *L)
{
  signed int v1; // edi@2
  lua_State *v2; // ebx@2
  int v3; // eax@4
  int v4; // edi@4
  const char *v5; // eax@5
  int v6; // eax@6
  const char *v7; // edi@8
  int nvar; // [sp+Ch] [bp-6Ch]@4
  lua_Debug ar; // [sp+10h] [bp-68h]@6
  unsigned int v11; // [sp+74h] [bp-4h]@1
  int v12; // [sp+78h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  if ( lua_type(L, 1) == 8 )
  {
    v1 = 1;
    v2 = lua_tothread(L, 1);
  }
  else
  {
    v1 = 0;
    v2 = L;
  }
  v3 = luaL_checkinteger(L, v1 + 2);
  v4 = v1 + 1;
  nvar = v3;
  if ( lua_type(L, v4) == 6 )
  {
    lua_pushvalue(L, v4);
    v5 = lua_getlocal(L, 0, nvar);
    lua_pushstring(L, v5);
  }
  else
  {
    v6 = luaL_checkinteger(L, v4);
    if ( !lua_getstack(v2, v6, &ar) )
      luaL_argerror(L, v4, "level out of range");
    v7 = lua_getlocal(v2, &ar, nvar);
    if ( v7 )
    {
      lua_xmove(v2, L, 1);
      lua_pushstring(L, v7);
      lua_pushvalue(L, -2);
      return 2;
    }
    lua_pushnil(L);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (007502F0) --------------------------------------------------------
int __cdecl db_setlocal(lua_State *L)
{
  signed int v1; // edi@2
  lua_State *v2; // ebx@2
  int v3; // eax@4
  int v4; // eax@6
  const char *v5; // eax@6
  lua_Debug ar; // [sp+10h] [bp-68h]@4
  unsigned int v8; // [sp+74h] [bp-4h]@1
  int v9; // [sp+78h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  if ( lua_type(L, 1) == 8 )
  {
    v1 = 1;
    v2 = lua_tothread(L, 1);
  }
  else
  {
    v1 = 0;
    v2 = L;
  }
  v3 = luaL_checkinteger(L, v1 + 1);
  if ( !lua_getstack(v2, v3, &ar) )
    luaL_argerror(L, v1 + 1, "level out of range");
  luaL_checkany(L, v1 + 3);
  lua_settop(L, v1 + 3);
  lua_xmove(L, v2, 1);
  v4 = luaL_checkinteger(L, v1 + 2);
  v5 = lua_setlocal(v2, &ar, v4);
  lua_pushstring(L, v5);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (007503D0) --------------------------------------------------------
int __cdecl db_getupvalue(lua_State *L)
{
  int v1; // edi@1
  int result; // eax@1

  v1 = luaL_checkinteger(L, 2);
  luaL_checktype(L, 1, 6);
  result = (int)lua_getupvalue(L, 1, v1);
  if ( result )
  {
    lua_pushstring(L, (const char *)result);
    lua_insert(L, -2);
    result = 2;
  }
  return result;
}

//----- (00750420) --------------------------------------------------------
int __cdecl db_setupvalue(lua_State *L)
{
  int v1; // edi@1
  int result; // eax@1

  luaL_checkany(L, 3);
  v1 = luaL_checkinteger(L, 2);
  luaL_checktype(L, 1, 6);
  result = (int)lua_setupvalue(L, 1, v1);
  if ( result )
  {
    lua_pushstring(L, (const char *)result);
    lua_insert(L, -1);
    result = 1;
  }
  return result;
}

//----- (00750480) --------------------------------------------------------
int __cdecl db_upvalueid(lua_State *L)
{
  signed int v1; // edi@1
  void *v2; // eax@4
  lua_Debug ar; // [sp+8h] [bp-68h]@1
  unsigned int v5; // [sp+6Ch] [bp-4h]@1
  int v6; // [sp+70h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = luaL_checkinteger(L, 2);
  luaL_checktype(L, 1, 6);
  lua_pushvalue(L, 1);
  lua_getinfo(L, ">u", &ar);
  if ( v1 < 1 || v1 > (unsigned __int8)ar.nups )
    luaL_argerror(L, 2, "invalid upvalue index");
  v2 = lua_upvalueid(L, 1, v1);
  lua_pushlightuserdata(L, v2);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00750510) --------------------------------------------------------
int __cdecl db_upvaluejoin(lua_State *L)
{
  signed int v1; // ebx@1
  signed int v2; // edi@4
  lua_Debug ar; // [sp+Ch] [bp-68h]@1
  unsigned int v5; // [sp+70h] [bp-4h]@1
  int v6; // [sp+74h] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = luaL_checkinteger(L, 2);
  luaL_checktype(L, 1, 6);
  lua_pushvalue(L, 1);
  lua_getinfo(L, ">u", &ar);
  if ( v1 < 1 || v1 > (unsigned __int8)ar.nups )
    luaL_argerror(L, 2, "invalid upvalue index");
  v2 = luaL_checkinteger(L, 4);
  luaL_checktype(L, 3, 6);
  lua_pushvalue(L, 3);
  lua_getinfo(L, ">u", &ar);
  if ( v2 < 1 || v2 > (unsigned __int8)ar.nups )
    luaL_argerror(L, 4, "invalid upvalue index");
  if ( lua_iscfunction(L, 1) )
    luaL_argerror(L, 1, "Lua function expected");
  if ( lua_iscfunction(L, 3) )
    luaL_argerror(L, 3, "Lua function expected");
  lua_upvaluejoin(L, 1, v1, 3, v2);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00750620) --------------------------------------------------------
void __cdecl hookf(lua_State *L, lua_Debug *ar)
{
  int v2; // eax@2

  luaL_getsubtable(L, -1001000, "_HKEY");
  lua_pushthread(L);
  lua_rawget(L, -2);
  if ( lua_type(L, -1) == 6 )
  {
    lua_pushstring(L, hooknames[ar->event]);
    v2 = ar->currentline;
    if ( v2 < 0 )
    {
      lua_pushnil(L);
      lua_callk(L, 2, 0, 0, 0);
    }
    else
    {
      lua_pushinteger(L, v2);
      lua_callk(L, 2, 0, 0, 0);
    }
  }
}

//----- (007506B0) --------------------------------------------------------
int __cdecl db_sethook(lua_State *L)
{
  signed int v1; // edi@2
  int v2; // ebx@4
  signed int v3; // edi@6
  int v4; // eax@6
  int v5; // eax@8
  int v6; // eax@10
  void (__cdecl *func)(lua_State *, lua_Debug *); // [sp+Ch] [bp-10h]@5
  lua_State *L1; // [sp+10h] [bp-Ch]@2
  int count; // [sp+14h] [bp-8h]@5
  int smask; // [sp+18h] [bp-4h]@5
  char *smaska; // [sp+18h] [bp-4h]@6

  if ( lua_type(L, 1) == 8 )
  {
    v1 = 1;
    L1 = lua_tothread(L, 1);
  }
  else
  {
    v1 = 0;
    L1 = L;
  }
  v2 = v1 + 1;
  if ( lua_type(L, v1 + 1) > 0 )
  {
    smaska = (char *)luaL_checklstring(L, v1 + 2, 0);
    luaL_checktype(L, v1 + 1, 6);
    count = luaL_optinteger(L, v1 + 3, 0);
    func = hookf;
    v3 = 0;
    strchr(smaska, 99);
    if ( v4 )
      v3 = 1;
    strchr(smaska, 114);
    if ( v5 )
      v3 |= 2u;
    strchr(smaska, 108);
    if ( v6 )
      v3 |= 4u;
    if ( count > 0 )
      v3 |= 8u;
    smask = v3;
  }
  else
  {
    lua_settop(L, v1 + 1);
    func = 0;
    smask = 0;
    count = 0;
  }
  if ( !luaL_getsubtable(L, -1001000, "_HKEY") )
  {
    lua_pushstring(L, "k");
    lua_setfield(L, -2, "__mode");
    lua_pushvalue(L, -1);
    lua_setmetatable(L, -2);
  }
  lua_pushthread(L1);
  lua_xmove(L1, L, 1);
  lua_pushvalue(L, v2);
  lua_rawset(L, -3);
  lua_sethook(L1, func, smask, count);
  return 0;
}

//----- (00750810) --------------------------------------------------------
int __cdecl db_gethook(lua_State *L)
{
  lua_State *v1; // edi@2
  char v2; // bl@4
  void (__cdecl *v3)(lua_State *, lua_Debug *); // eax@4
  signed int v4; // eax@8
  int v5; // eax@14
  char buff[5]; // [sp+8h] [bp-Ch]@9
  unsigned int v8; // [sp+10h] [bp-4h]@1
  int v9; // [sp+14h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  if ( lua_type(L, 1) == 8 )
    v1 = lua_tothread(L, 1);
  else
    v1 = L;
  v2 = lua_gethookmask(v1);
  v3 = lua_gethook(v1);
  if ( v3 && v3 != hookf )
  {
    lua_pushlstring(L, "external hook", 0xDu);
  }
  else
  {
    luaL_getsubtable(L, -1001000, "_HKEY");
    lua_pushthread(v1);
    lua_xmove(v1, L, 1);
    lua_rawget(L, -2);
    lua_remove(L, -2);
  }
  v4 = 0;
  if ( v2 & 1 )
  {
    buff[0] = 99;
    v4 = 1;
  }
  if ( v2 & 2 )
    buff[v4++] = 114;
  if ( v2 & 4 )
    buff[v4++] = 108;
  buff[v4] = 0;
  lua_pushstring(L, buff);
  v5 = lua_gethookcount(v1);
  lua_pushinteger(L, v5);
  return 3;
}
// A85C00: using guessed type int __security_cookie;

//----- (00750910) --------------------------------------------------------
int __cdecl db_debug(lua_State *L)
{
  _iobuf *v1; // eax@1
  _iobuf *v2; // eax@1
  _iobuf *v3; // eax@1
  int v4; // eax@3
  char v5; // cl@4
  _iobuf *v6; // eax@7
  _iobuf *v7; // eax@7
  _iobuf *v8; // eax@8
  _iobuf *v9; // eax@8
  _iobuf *v10; // eax@8
  char buffer[250]; // [sp+4h] [bp-100h]@1
  unsigned int v13; // [sp+100h] [bp-4h]@1
  int v14; // [sp+104h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v1 = __iob_func();
  fprintf(v1 + 2, "%s");
  v2 = __iob_func();
  fflush(v2 + 2);
  v3 = __iob_func();
  if ( fgets(buffer, 250, v3) )
  {
    do
    {
      if ( !strcmp(buffer, "cont\n") )
        break;
      v4 = (int)buffer;
      do
        v5 = *(_BYTE *)v4++;
      while ( v5 );
      if ( luaL_loadbufferx(L, buffer, v4 - (_DWORD)&buffer[1], "=(debug command)", 0) || lua_pcallk(L, 0, 0, 0, 0, 0) )
      {
        lua_tolstring(L, -1, 0);
        v6 = __iob_func();
        fprintf(v6 + 2, "%s\n");
        v7 = __iob_func();
        fflush(v7 + 2);
      }
      lua_settop(L, 0);
      v8 = __iob_func();
      fprintf(v8 + 2, "%s");
      v9 = __iob_func();
      fflush(v9 + 2);
      v10 = __iob_func();
    }
    while ( fgets(buffer, 250, v10) );
  }
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (00750A90) --------------------------------------------------------
int __cdecl db_traceback(lua_State *L)
{
  signed int v1; // edi@2
  lua_State *v2; // ebx@2
  int result; // eax@6
  int v4; // eax@7
  const char *msg; // [sp+Ch] [bp-8h]@4
  int idx; // [sp+10h] [bp-4h]@4

  if ( lua_type(L, 1) == 8 )
  {
    v1 = 1;
    v2 = lua_tothread(L, 1);
  }
  else
  {
    v1 = 0;
    v2 = L;
  }
  idx = v1 + 1;
  msg = lua_tolstring(L, v1 + 1, 0);
  if ( msg || lua_type(L, idx) <= 0 )
  {
    v4 = luaL_optinteger(L, v1 + 2, L == v2);
    luaL_traceback(L, v2, msg, v4);
    result = 1;
  }
  else
  {
    lua_pushvalue(L, idx);
    result = 1;
  }
  return result;
}

//----- (00750B40) --------------------------------------------------------
int __cdecl luaopen_debug(lua_State *L)
{
  lua_createtable(L, 0, 16);
  luaL_setfuncs(L, &dblib, 0);
  return 1;
}

//----- (00750B70) --------------------------------------------------------
int __cdecl math_abs(lua_State *L)
{
  long double v1; // st7@1

  v1 = luaL_checknumber(L, 1);
  lua_pushnumber(L, fabs(v1));
  return 1;
}

//----- (00750BA0) --------------------------------------------------------
int __cdecl math_sin(lua_State *L)
{
  luaL_checknumber(L, 1);
  JUMPOUT(loc_750BB7);
}

//----- (00750BD0) --------------------------------------------------------
int __cdecl math_sinh(lua_State *L)
{
  long double v1; // st7@1

  v1 = sinh(luaL_checknumber(L, 1));
  lua_pushnumber(L, v1);
  return 1;
}

//----- (00750C00) --------------------------------------------------------
int __cdecl math_cos(lua_State *L)
{
  luaL_checknumber(L, 1);
  JUMPOUT(loc_750C17);
}

//----- (00750C30) --------------------------------------------------------
int __cdecl math_cosh(lua_State *L)
{
  long double v1; // st7@1

  v1 = cosh(luaL_checknumber(L, 1));
  lua_pushnumber(L, v1);
  return 1;
}

//----- (00750C60) --------------------------------------------------------
int __cdecl math_tan(lua_State *L)
{
  luaL_checknumber(L, 1);
  JUMPOUT(loc_750C77);
}

//----- (00750C90) --------------------------------------------------------
int __cdecl math_tanh(lua_State *L)
{
  long double v1; // st7@1

  v1 = tanh(luaL_checknumber(L, 1));
  lua_pushnumber(L, v1);
  return 1;
}

//----- (00750CC0) --------------------------------------------------------
int __cdecl math_asin(lua_State *L)
{
  luaL_checknumber(L, 1);
  JUMPOUT(loc_750CD7);
}

//----- (00750CF0) --------------------------------------------------------
int __cdecl math_acos(lua_State *L)
{
  luaL_checknumber(L, 1);
  JUMPOUT(loc_750D07);
}

//----- (00750D20) --------------------------------------------------------
int __cdecl math_atan(lua_State *L)
{
  luaL_checknumber(L, 1);
  JUMPOUT(loc_750D37);
}

//----- (00750D50) --------------------------------------------------------
int __cdecl math_atan2(lua_State *L)
{
  long double v1; // ST14_8@1
  long double v2; // st7@1

  v1 = luaL_checknumber(L, 1);
  v2 = atan2(v1, luaL_checknumber(L, 2));
  lua_pushnumber(L, v2);
  return 1;
}

//----- (00750DA0) --------------------------------------------------------
int __cdecl math_ceil(lua_State *L)
{
  double v1; // st7@1
  double v2; // st7@1

  v1 = luaL_checknumber(L, 1);
  v2 = ceil(v1);
  lua_pushnumber(L, v2);
  return 1;
}

//----- (00750DD0) --------------------------------------------------------
int __cdecl math_floor(lua_State *L)
{
  double v1; // st7@1
  double v2; // st7@1

  v1 = luaL_checknumber(L, 1);
  v2 = floor(v1);
  lua_pushnumber(L, v2);
  return 1;
}

//----- (00750E00) --------------------------------------------------------
int __cdecl math_fmod(lua_State *L)
{
  long double v1; // ST14_8@1
  long double v2; // st7@1

  v1 = luaL_checknumber(L, 1);
  v2 = fmod(v1, luaL_checknumber(L, 2));
  lua_pushnumber(L, v2);
  return 1;
}

//----- (00750E50) --------------------------------------------------------
int __cdecl math_modf(lua_State *L)
{
  double v1; // st7@1
  long double v2; // ST10_8@1
  double v4; // [sp+18h] [bp-8h]@1

  v1 = luaL_checknumber(L, 1);
  v2 = modf(v1, &v4);
  lua_pushnumber(L, v4);
  lua_pushnumber(L, v2);
  return 2;
}

//----- (00750EA0) --------------------------------------------------------
int __cdecl math_sqrt(lua_State *L)
{
  long double v1; // st7@1

  v1 = sqrt(luaL_checknumber(L, 1));
  lua_pushnumber(L, v1);
  return 1;
}

//----- (00750ED0) --------------------------------------------------------
int __cdecl math_pow(lua_State *L)
{
  luaL_checknumber(L, 1);
  luaL_checknumber(L, 2);
  JUMPOUT(loc_750EFA);
}

//----- (00750F20) --------------------------------------------------------
int __cdecl math_log(lua_State *L)
{
  luaL_checknumber(L, 1);
  if ( lua_type(L, 2) <= 0 )
    _CIlog();
  if ( 10.0 == luaL_checknumber(L, 2) )
    JUMPOUT(*(int *)loc_750F73);
  _CIlog();
}
// 750F73: using guessed type int __cdecl(int L);

//----- (00750F88) --------------------------------------------------------
#error "750F9D: positive sp value has been found (funcsize=7)"

//----- (00750FB0) --------------------------------------------------------
int __cdecl math_exp(lua_State *L)
{
  long double v1; // st7@1

  v1 = exp(luaL_checknumber(L, 1));
  lua_pushnumber(L, v1);
  return 1;
}

//----- (00750FE0) --------------------------------------------------------
int __cdecl math_deg(lua_State *L)
{
  long double v1; // st7@1

  v1 = luaL_checknumber(L, 1);
  lua_pushnumber(L, v1 / 0.0174532925199433);
  return 1;
}

//----- (00751010) --------------------------------------------------------
int __cdecl math_rad(lua_State *L)
{
  long double v1; // st7@1

  v1 = luaL_checknumber(L, 1);
  lua_pushnumber(L, v1 * 0.0174532925199433);
  return 1;
}

//----- (00751040) --------------------------------------------------------
int __cdecl math_frexp(lua_State *L)
{
  long double v1; // st7@1
  long double v2; // st7@1
  int e; // [sp+10h] [bp-4h]@1

  v1 = luaL_checknumber(L, 1);
  v2 = frexp(v1, &e);
  lua_pushnumber(L, v2);
  lua_pushinteger(L, e);
  return 2;
}

//----- (00751080) --------------------------------------------------------
int __cdecl math_ldexp(lua_State *L)
{
  long double v1; // ST14_8@1
  int v2; // eax@1
  long double v3; // st7@1

  v1 = luaL_checknumber(L, 1);
  v2 = luaL_checkinteger(L, 2);
  v3 = ldexp(v1, v2);
  lua_pushnumber(L, v3);
  return 1;
}

//----- (007510D0) --------------------------------------------------------
int __cdecl math_min(lua_State *L)
{
  int v1; // edi@1
  double v2; // st7@1
  int i; // esi@1
  double dmin; // [sp+14h] [bp-8h]@1

  v1 = lua_gettop(L);
  v2 = luaL_checknumber(L, 1);
  dmin = v2;
  for ( i = 2; i <= v1; ++i )
  {
    v2 = luaL_checknumber(L, i);
    if ( dmin <= v2 )
      v2 = dmin;
    else
      dmin = v2;
  }
  lua_pushnumber(L, v2);
  return 1;
}

//----- (00751140) --------------------------------------------------------
int __cdecl math_max(lua_State *L)
{
  int v1; // edi@1
  double v2; // st7@1
  int i; // esi@1
  double dmax; // [sp+14h] [bp-8h]@1

  v1 = lua_gettop(L);
  v2 = luaL_checknumber(L, 1);
  dmax = v2;
  for ( i = 2; i <= v1; ++i )
  {
    v2 = luaL_checknumber(L, i);
    if ( dmax >= v2 )
      v2 = dmax;
    else
      dmax = v2;
  }
  lua_pushnumber(L, v2);
  return 1;
}

//----- (007511B0) --------------------------------------------------------
int __cdecl math_random(lua_State *L)
{
  int v1; // eax@1
  int v2; // eax@2
  long double v3; // st7@5
  long double v4; // st7@7
  long double v5; // st7@8
  double r; // [sp+14h] [bp-10h]@1
  double l; // [sp+1Ch] [bp-8h]@5

  r = (double)(rand() % 32767) / 32767.0;
  v1 = lua_gettop(L);
  if ( v1 )
  {
    v2 = v1 - 1;
    if ( v2 )
    {
      if ( v2 != 1 )
        luaL_error(L, "wrong number of arguments");
      l = luaL_checknumber(L, 1);
      v3 = luaL_checknumber(L, 2);
      if ( v3 < l )
        luaL_argerror(L, 2, "interval is empty");
      v4 = floor((v3 - l + 1.0) * r) + l;
    }
    else
    {
      v5 = luaL_checknumber(L, 1);
      if ( v5 < 1.0 )
        luaL_argerror(L, 1, "interval is empty");
      v4 = floor(v5 * r) + 1.0;
    }
  }
  else
  {
    v4 = r;
  }
  lua_pushnumber(L, v4);
  return 1;
}

//----- (007512C0) --------------------------------------------------------
int __cdecl math_randomseed(lua_State *L)
{
  unsigned int v1; // eax@1

  v1 = luaL_checkunsigned(L, 1);
  srand(v1);
  rand();
  return 0;
}

//----- (007512E0) --------------------------------------------------------
int __cdecl luaopen_math(lua_State *L)
{
  lua_createtable(L, 0, 27);
  luaL_setfuncs(L, &mathlib, 0);
  lua_pushnumber(L, 3.141592653589793);
  lua_setfield(L, -2, "pi");
  lua_pushnumber(L, _HUGE);
  lua_setfield(L, -2, "huge");
  return 1;
}

//----- (00751350) --------------------------------------------------------
int __cdecl b_and(lua_State *L)
{
  int v1; // edi@1
  signed int v2; // esi@1
  unsigned int i; // ebx@1
  unsigned int v4; // eax@2

  v1 = lua_gettop(L);
  v2 = 1;
  for ( i = -1; v2 <= v1; i &= v4 )
    v4 = luaL_checkunsigned(L, v2++);
  lua_pushunsigned(L, i);
  return 1;
}

//----- (007513A0) --------------------------------------------------------
int __cdecl b_test(lua_State *L)
{
  int v1; // edi@1
  signed int v2; // esi@1
  signed int i; // ebx@1
  unsigned int v4; // eax@2

  v1 = lua_gettop(L);
  v2 = 1;
  for ( i = -1; v2 <= v1; i &= v4 )
    v4 = luaL_checkunsigned(L, v2++);
  lua_pushboolean(L, i != 0);
  return 1;
}

//----- (00751400) --------------------------------------------------------
int __cdecl b_or(lua_State *L)
{
  unsigned int v1; // ebx@1
  int v2; // edi@1
  signed int i; // esi@1
  unsigned int v4; // eax@2

  v1 = 0;
  v2 = lua_gettop(L);
  for ( i = 1; i <= v2; v1 |= v4 )
    v4 = luaL_checkunsigned(L, i++);
  lua_pushunsigned(L, v1);
  return 1;
}

//----- (00751450) --------------------------------------------------------
int __cdecl b_xor(lua_State *L)
{
  unsigned int v1; // ebx@1
  int v2; // edi@1
  signed int i; // esi@1
  unsigned int v4; // eax@2

  v1 = 0;
  v2 = lua_gettop(L);
  for ( i = 1; i <= v2; v1 ^= v4 )
    v4 = luaL_checkunsigned(L, i++);
  lua_pushunsigned(L, v1);
  return 1;
}

//----- (007514A0) --------------------------------------------------------
int __cdecl b_not(lua_State *L)
{
  unsigned int v1; // eax@1

  v1 = luaL_checkunsigned(L, 1);
  lua_pushunsigned(L, ~v1);
  return 1;
}

//----- (007514D0) --------------------------------------------------------
int __cdecl b_lshift(lua_State *L)
{
  int v1; // esi@1
  unsigned int v2; // eax@1
  int v3; // esi@2

  v1 = luaL_checkinteger(L, 2);
  v2 = luaL_checkunsigned(L, 1);
  if ( v1 < 0 )
  {
    v3 = -v1;
    if ( v3 < 32 )
    {
      lua_pushunsigned(L, v2 >> v3);
      return 1;
    }
    goto LABEL_5;
  }
  if ( v1 >= 32 )
  {
LABEL_5:
    lua_pushunsigned(L, 0);
    return 1;
  }
  lua_pushunsigned(L, v2 << v1);
  return 1;
}

//----- (00751540) --------------------------------------------------------
int __cdecl b_rshift(lua_State *L)
{
  int v1; // esi@1
  unsigned int v2; // eax@1
  int v3; // esi@1
  int v4; // esi@2

  v1 = luaL_checkinteger(L, 2);
  v2 = luaL_checkunsigned(L, 1);
  v3 = -v1;
  if ( v3 < 0 )
  {
    v4 = -v3;
    if ( v4 < 32 )
    {
      lua_pushunsigned(L, v2 >> v4);
      return 1;
    }
    goto LABEL_5;
  }
  if ( v3 >= 32 )
  {
LABEL_5:
    lua_pushunsigned(L, 0);
    return 1;
  }
  lua_pushunsigned(L, v2 << v3);
  return 1;
}

//----- (007515B0) --------------------------------------------------------
int __cdecl b_arshift(lua_State *L)
{
  unsigned int v1; // esi@1
  int v2; // eax@1
  int result; // eax@4
  int v4; // ecx@6

  v1 = luaL_checkunsigned(L, 1);
  v2 = luaL_checkinteger(L, 2);
  if ( v2 < 0 || (v1 & 0x80000000u) == 0 )
  {
    v4 = -v2;
    if ( -v2 >= 0 )
    {
      if ( v4 < 32 )
      {
        lua_pushunsigned(L, v1 << v4);
        return 1;
      }
    }
    else
    {
      if ( v2 < 32 )
      {
        lua_pushunsigned(L, v1 >> v2);
        return 1;
      }
    }
    lua_pushunsigned(L, 0);
    return 1;
  }
  if ( v2 < 32 )
  {
    lua_pushunsigned(L, ~(0xFFFFFFFFu >> v2) | (v1 >> v2));
    result = 1;
  }
  else
  {
    lua_pushunsigned(L, 0xFFFFFFFFu);
    result = 1;
  }
  return result;
}

//----- (00751660) --------------------------------------------------------
int __cdecl b_lrot(lua_State *L)
{
  char v1; // si@1
  unsigned int v2; // eax@1

  v1 = luaL_checkinteger(L, 2) & 0x1F;
  v2 = __ROL__(luaL_checkunsigned(L, 1), v1);
  lua_pushunsigned(L, v2);
  return 1;
}

//----- (007516A0) --------------------------------------------------------
int __cdecl b_rrot(lua_State *L)
{
  int v1; // esi@1
  unsigned int v2; // eax@1

  v1 = -luaL_checkinteger(L, 2) & 0x1F;
  v2 = __ROL__(luaL_checkunsigned(L, 1), v1);
  lua_pushunsigned(L, v2);
  return 1;
}

//----- (007516E0) --------------------------------------------------------
int __usercall fieldargs<eax>(lua_State *L<esi>, int farg<ebx>, int *width)
{
  int v3; // edi@1
  int v4; // eax@1
  lua_State *v6; // [sp+0h] [bp-14h]@0
  int v7; // [sp+4h] [bp-10h]@0

  v3 = luaL_checkinteger(v6, v7);
  v4 = luaL_optinteger(L, farg + 1, 1);
  if ( v3 < 0 )
    luaL_argerror(L, farg, "field cannot be negative");
  if ( v4 <= 0 )
    luaL_argerror(L, farg + 1, "width must be positive");
  if ( v4 + v3 > 32 )
    luaL_error(L, "trying to access non-existent bits");
  *width = v4;
  return v3;
}

//----- (00751770) --------------------------------------------------------
int __cdecl b_extract(lua_State *L)
{
  unsigned int v1; // edi@1
  char v2; // al@1
  int w; // [sp+Ch] [bp-4h]@1

  v1 = luaL_checkunsigned(L, 1);
  v2 = fieldargs(L, 2, &w);
  lua_pushunsigned(L, (v1 >> v2) & ~(-2 << (w - 1)));
  return 1;
}

//----- (007517C0) --------------------------------------------------------
int __cdecl b_replace(lua_State *L)
{
  unsigned int v1; // edi@1
  unsigned int v2; // ST28_4@1
  char v3; // al@1
  int w; // [sp+10h] [bp-4h]@1

  v1 = luaL_checkunsigned(L, 1);
  v2 = luaL_checkunsigned(L, 2);
  v3 = fieldargs(L, 3, &w);
  lua_pushunsigned(L, ((v2 & ~(-2 << (w - 1))) << v3) | v1 & ~(~(-2 << (w - 1)) << v3));
  return 1;
}

//----- (00751830) --------------------------------------------------------
int __cdecl luaopen_bit32(lua_State *L)
{
  lua_createtable(L, 0, 12);
  luaL_setfuncs(L, &bitlib, 0);
  return 1;
}

//----- (00751860) --------------------------------------------------------
int __cdecl str_len(lua_State *L)
{
  int l; // [sp+4h] [bp-4h]@1

  luaL_checklstring(L, 1, (unsigned int *)&l);
  lua_pushinteger(L, l);
  return 1;
}

//----- (00751890) --------------------------------------------------------
int __cdecl str_sub(lua_State *L)
{
  const char *v1; // eax@1
  unsigned int v2; // esi@1
  int v3; // eax@1
  int v4; // esi@2
  unsigned int v5; // ebx@6
  int v6; // eax@6
  int result; // eax@15
  const char *s; // [sp+8h] [bp-8h]@1
  unsigned int l; // [sp+Ch] [bp-4h]@1

  v1 = luaL_checklstring(L, 1, &l);
  v2 = l;
  s = v1;
  v3 = luaL_checkinteger(L, 2);
  if ( v3 < 0 )
  {
    if ( -v3 <= v2 )
      v4 = v3 + v2 + 1;
    else
      v4 = 0;
  }
  else
  {
    v4 = v3;
  }
  v5 = l;
  v6 = luaL_optinteger(L, 3, -1);
  if ( v6 < 0 )
  {
    if ( -v6 <= v5 )
      v6 += v5 + 1;
    else
      v6 = 0;
  }
  if ( (unsigned int)v4 < 1 )
    v4 = 1;
  if ( v6 > l )
    v6 = l;
  if ( v4 > (unsigned int)v6 )
  {
    lua_pushlstring(L, &byte_9788EB, 0);
    result = 1;
  }
  else
  {
    lua_pushlstring(L, &s[v4 - 1], v6 - v4 + 1);
    result = 1;
  }
  return result;
}

//----- (00751950) --------------------------------------------------------
int __cdecl str_reverse(lua_State *L)
{
  const char *v1; // edi@1
  char *v2; // eax@1
  unsigned int v3; // edx@1
  unsigned int v4; // ecx@1
  unsigned int l; // [sp+8h] [bp-218h]@1
  luaL_Buffer b; // [sp+Ch] [bp-214h]@1
  unsigned int v8; // [sp+21Ch] [bp-4h]@1
  int v9; // [sp+220h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = luaL_checklstring(L, 1, &l);
  v2 = luaL_buffinitsize(L, &b, l);
  v3 = l;
  v4 = 0;
  if ( l )
  {
    do
    {
      v2[v4] = v1[v3 - v4 - 1];
      v3 = l;
      ++v4;
    }
    while ( v4 < l );
  }
  luaL_pushresultsize(&b, v3);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (007519E0) --------------------------------------------------------
int __cdecl str_lower(lua_State *L)
{
  const char *v1; // ebx@1
  char *v2; // eax@1
  unsigned int v3; // ecx@1
  unsigned int v4; // edi@1
  char *v5; // esi@2
  int v6; // ebx@2
  unsigned int l; // [sp+Ch] [bp-218h]@1
  luaL_Buffer b; // [sp+10h] [bp-214h]@1
  unsigned int v10; // [sp+220h] [bp-4h]@1
  int v11; // [sp+224h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v1 = luaL_checklstring(L, 1, &l);
  v2 = luaL_buffinitsize(L, &b, l);
  v3 = l;
  v4 = 0;
  if ( l )
  {
    v5 = v2;
    v6 = v1 - v2;
    do
    {
      *v5 = tolower((unsigned __int8)v5[v6]);
      v3 = l;
      ++v4;
      ++v5;
    }
    while ( v4 < l );
  }
  luaL_pushresultsize(&b, v3);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00751A80) --------------------------------------------------------
int __cdecl str_upper(lua_State *L)
{
  const char *v1; // ebx@1
  char *v2; // eax@1
  unsigned int v3; // ecx@1
  unsigned int v4; // edi@1
  char *v5; // esi@2
  int v6; // ebx@2
  unsigned int l; // [sp+Ch] [bp-218h]@1
  luaL_Buffer b; // [sp+10h] [bp-214h]@1
  unsigned int v10; // [sp+220h] [bp-4h]@1
  int v11; // [sp+224h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v1 = luaL_checklstring(L, 1, &l);
  v2 = luaL_buffinitsize(L, &b, l);
  v3 = l;
  v4 = 0;
  if ( l )
  {
    v5 = v2;
    v6 = v1 - v2;
    do
    {
      *v5 = toupper((unsigned __int8)v5[v6]);
      v3 = l;
      ++v4;
      ++v5;
    }
    while ( v4 < l );
  }
  luaL_pushresultsize(&b, v3);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00751B20) --------------------------------------------------------
int __cdecl str_rep(lua_State *L)
{
  int v1; // ebx@1
  int result; // eax@2
  unsigned int v3; // edi@5
  char *v4; // esi@5
  int v5; // ebx@6
  char *sep; // [sp+10h] [bp-224h]@1
  char *s; // [sp+14h] [bp-220h]@1
  unsigned int lsep; // [sp+18h] [bp-21Ch]@1
  unsigned int l; // [sp+1Ch] [bp-218h]@1
  luaL_Buffer b; // [sp+20h] [bp-214h]@5
  unsigned int v11; // [sp+230h] [bp-4h]@1
  int v12; // [sp+234h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  s = (char *)luaL_checklstring(L, 1, &l);
  v1 = luaL_checkinteger(L, 2);
  sep = (char *)luaL_optlstring(L, 3, &byte_9788EB, &lsep);
  if ( v1 > 0 )
  {
    if ( l + lsep < l || l + lsep >= 0x7FFFFFFFu / v1 )
      luaL_error(L, "resulting string too large");
    v3 = l * v1 + lsep * (v1 - 1);
    v4 = luaL_buffinitsize(L, &b, l * v1 + lsep * (v1 - 1));
    if ( v1 > 1 )
    {
      v5 = v1 - 1;
      do
      {
        memcpy(v4, s, l);
        v4 += l;
        if ( lsep )
        {
          memcpy(v4, sep, lsep);
          v4 += lsep;
        }
        --v5;
      }
      while ( v5 );
    }
    memcpy(v4, s, l);
    luaL_pushresultsize(&b, v3);
    result = 1;
  }
  else
  {
    lua_pushlstring(L, &byte_9788EB, 0);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00751CA0) --------------------------------------------------------
int __cdecl str_byte(lua_State *L)
{
  const char *v1; // eax@1
  unsigned int v2; // esi@1
  int v3; // eax@1
  int v4; // ebx@2
  unsigned int v5; // esi@6
  int v6; // eax@6
  int result; // eax@15
  int v8; // esi@16
  int v9; // edi@18
  int v10; // ebx@19
  const char *s; // [sp+Ch] [bp-8h]@1
  unsigned int l; // [sp+10h] [bp-4h]@1

  v1 = luaL_checklstring(L, 1, &l);
  v2 = l;
  s = v1;
  v3 = luaL_optinteger(L, 2, 1);
  if ( v3 < 0 )
  {
    if ( -v3 <= v2 )
      v4 = v3 + v2 + 1;
    else
      v4 = 0;
  }
  else
  {
    v4 = v3;
  }
  v5 = l;
  v6 = luaL_optinteger(L, 3, v4);
  if ( v6 < 0 )
  {
    if ( -v6 <= v5 )
      v6 += v5 + 1;
    else
      v6 = 0;
  }
  if ( (unsigned int)v4 < 1 )
    v4 = 1;
  if ( v6 > l )
    v6 = l;
  if ( v4 <= (unsigned int)v6 )
  {
    v8 = v6 - v4 + 1;
    if ( v8 + v4 <= (unsigned int)v6 )
      luaL_error(L, "string slice too long");
    luaL_checkstack(L, v6 - v4 + 1, "string slice too long");
    v9 = 0;
    if ( v8 > 0 )
    {
      v10 = (int)&s[v4 - 1];
      do
        lua_pushinteger(L, *(_BYTE *)(v10 + v9++));
      while ( v9 < v8 );
    }
    result = v8;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00751D80) --------------------------------------------------------
int __cdecl str_char(lua_State *L)
{
  int v1; // ebx@1
  int v2; // esi@1
  int v3; // eax@2
  char *p; // [sp+Ch] [bp-21Ch]@1
  luaL_Buffer b; // [sp+14h] [bp-214h]@1
  unsigned int v7; // [sp+224h] [bp-4h]@1
  int v8; // [sp+228h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = lua_gettop(L);
  v2 = 1;
  for ( p = luaL_buffinitsize(L, &b, v1); v2 <= v1; ++v2 )
  {
    v3 = luaL_checkinteger(L, v2);
    if ( (unsigned __int8)v3 != v3 )
      luaL_argerror(L, v2, "value out of range");
    p[v2 - 1] = v3;
  }
  luaL_pushresultsize(&b, v1);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00751E30) --------------------------------------------------------
int __cdecl writer(lua_State *L, const void *b, unsigned int size, void *B)
{
  luaL_addlstring((luaL_Buffer *)B, (const char *)b, size);
  return 0;
}

//----- (00751E50) --------------------------------------------------------
int __cdecl str_dump(lua_State *L)
{
  luaL_Buffer b; // [sp+4h] [bp-214h]@1
  unsigned int v3; // [sp+214h] [bp-4h]@1
  int v4; // [sp+218h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  luaL_checktype(L, 1, 6);
  lua_settop(L, 1);
  luaL_buffinit(L, &b);
  if ( lua_dump(L, writer, &b) )
    luaL_error(L, "unable to dump given function");
  luaL_pushresult(&b);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00751EE0) --------------------------------------------------------
const char *__usercall classend<eax>(MatchState *ms<edi>, const char *p<eax>)
{
  const char *v2; // esi@1
  int v3; // eax@1
  int v4; // esi@1
  const char *result; // eax@3
  char v6; // cl@8

  v2 = p;
  v3 = *p;
  v4 = (int)(v2 + 1);
  if ( v3 == 37 )
  {
    if ( (const char *)v4 == ms->p_end )
      luaL_error(ms->L, "malformed pattern (ends with '%%')");
    result = (const char *)(v4 + 1);
  }
  else
  {
    if ( v3 == 91 )
    {
      if ( *(_BYTE *)v4 == 94 )
        ++v4;
      do
      {
        if ( (const char *)v4 == ms->p_end )
          luaL_error(ms->L, "malformed pattern (missing ']')");
        v6 = *(_BYTE *)v4++;
        if ( v6 == 37 )
        {
          if ( (const char *)v4 < ms->p_end )
            ++v4;
        }
      }
      while ( *(_BYTE *)v4 != 93 );
      result = (const char *)(v4 + 1);
    }
    else
    {
      result = (const char *)v4;
    }
  }
  return result;
}

//----- (00751F50) --------------------------------------------------------
int __usercall match_class<eax>(int c<eax>, int cl<edi>)
{
  int v2; // esi@1
  int v3; // esi@2
  int result; // eax@14
  int v5; // [sp+0h] [bp-8h]@0

  v2 = c;
  switch ( tolower(v5) )
  {
    case 97:
      v3 = isalpha(v2);
      goto LABEL_13;
    case 99:
      v3 = iscntrl(v2);
      goto LABEL_13;
    case 100:
      v3 = isdigit(v2);
      goto LABEL_13;
    case 103:
      v3 = isgraph(v2);
      goto LABEL_13;
    case 108:
      v3 = islower(v2);
      goto LABEL_13;
    case 112:
      v3 = ispunct(v2);
      goto LABEL_13;
    case 115:
      v3 = isspace(v2);
      goto LABEL_13;
    case 117:
      v3 = isupper(v2);
      goto LABEL_13;
    case 119:
      v3 = isalnum(v2);
      goto LABEL_13;
    case 120:
      v3 = isxdigit(v2);
      goto LABEL_13;
    case 122:
      v3 = v2 == 0;
LABEL_13:
      if ( islower(cl) )
        result = v3;
      else
        result = v3 == 0;
      break;
    default:
      result = cl == v2;
      break;
  }
  return result;
}

//----- (00752070) --------------------------------------------------------
int __usercall matchbracketclass<eax>(int c<ebx>, const char *p<eax>, const char *ec)
{
  const char *v3; // edi@1
  const char *v4; // edx@3
  int v5; // edi@3
  int v6; // eax@4
  int v7; // esi@6
  int v8; // esi@7
  int v9; // ecx@25
  int v11; // [sp+8h] [bp-Ch]@6
  int ca; // [sp+Ch] [bp-8h]@6
  int sig; // [sp+10h] [bp-4h]@1

  v3 = p;
  sig = 1;
  if ( p[1] == 94 )
  {
    sig = 0;
    v3 = p + 1;
  }
  v4 = ec;
  v5 = (int)(v3 + 1);
  if ( v5 < (unsigned int)ec )
  {
    v6 = v5 + 2;
    do
    {
      if ( *(_BYTE *)v5 == 37 )
      {
        v7 = *(_BYTE *)(v5++ + 1);
        v11 = v6 + 1;
        ca = v7;
        switch ( tolower(v7) )
        {
          case 97:
            v8 = isalpha(c);
            goto LABEL_18;
          case 99:
            v8 = iscntrl(c);
            goto LABEL_18;
          case 100:
            v8 = isdigit(c);
            goto LABEL_18;
          case 103:
            v8 = isgraph(c);
            goto LABEL_18;
          case 108:
            v8 = islower(c);
            goto LABEL_18;
          case 112:
            v8 = ispunct(c);
            goto LABEL_18;
          case 115:
            v8 = isspace(c);
            goto LABEL_18;
          case 117:
            v8 = isupper(c);
            goto LABEL_18;
          case 119:
            v8 = isalnum(c);
            goto LABEL_18;
          case 120:
            v8 = isxdigit(c);
            goto LABEL_18;
          case 122:
            v8 = c == 0;
LABEL_18:
            if ( !islower(ca) )
              v8 = v8 == 0;
            break;
          default:
            v8 = v7 == c;
            break;
        }
        if ( v8 )
          return sig;
        v6 = v11;
        v4 = ec;
      }
      else
      {
        if ( *(_BYTE *)(v5 + 1) != 45 || v6 >= (unsigned int)v4 )
        {
          if ( *(_BYTE *)v5 == c )
            return sig;
        }
        else
        {
          v9 = *(_BYTE *)v5;
          v5 += 2;
          v6 += 2;
          if ( v9 <= c && c <= *(_BYTE *)v5 )
            return sig;
        }
      }
      ++v5;
      ++v6;
    }
    while ( v5 < (unsigned int)v4 );
  }
  return sig == 0;
}

//----- (00752230) --------------------------------------------------------
const char *__usercall matchbalance<eax>(MatchState *ms<ebx>, const char *s<ecx>, const char *p<eax>)
{
  const char *v3; // esi@1
  const char *v4; // ecx@4
  int v5; // esi@4
  int v6; // edx@4
  signed int i; // edi@4
  int v8; // eax@5
  int b; // [sp+8h] [bp-4h]@4

  v3 = s;
  if ( p >= ms->p_end - 1 )
    luaL_error(ms->L, "malformed pattern (missing arguments to '%%b')");
  if ( *s == *p )
  {
    v4 = ms->src_end;
    v5 = (int)(v3 + 1);
    b = *p;
    v6 = p[1];
    for ( i = 1; v5 < (unsigned int)v4; ++v5 )
    {
      v8 = *(_BYTE *)v5;
      if ( v8 == v6 )
      {
        --i;
        if ( !i )
          return (const char *)(v5 + 1);
      }
      else
      {
        if ( v8 == b )
          ++i;
      }
    }
  }
  return 0;
}

//----- (007522A0) --------------------------------------------------------
const char *__cdecl max_expand(MatchState *ms, const char *s, const char *p, const char *ep)
{
  int *v4; // esi@1
  const char v5; // al@3
  int v6; // ebx@3
  int v7; // eax@6
  const char *result; // eax@12
  int i; // [sp+Ch] [bp-4h]@1

  v4 = (int *)s;
  i = 0;
  while ( (const char *)v4 < ms->src_end )
  {
    v5 = *p;
    v6 = *(_BYTE *)v4;
    if ( *p == 37 )
    {
      v7 = match_class(*(_BYTE *)v4, (unsigned __int8)p[1]);
    }
    else
    {
      if ( v5 == 46 )
        goto LABEL_10;
      if ( v5 == 91 )
        v7 = matchbracketclass(v6, p, ep - 1);
      else
        v7 = v5 == v6;
    }
    if ( !v7 )
      break;
LABEL_10:
    ++i;
    v4 = (int *)((char *)v4 + 1);
  }
  if ( i < 0 )
  {
LABEL_14:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      result = match(ms, &s[i], ep + 1);
      if ( result )
        break;
      --i;
      if ( i < 0 )
        goto LABEL_14;
    }
  }
  return result;
}

//----- (00752340) --------------------------------------------------------
const char *__usercall min_expand<eax>(const char *s<eax>, MatchState *ms, const char *p, const char *ep)
{
  const char *v4; // ebx@1
  MatchState *v5; // edi@1
  const char *v6; // esi@1
  const char *result; // eax@1
  const char v8; // al@3
  int v9; // ecx@3
  int v10; // eax@6

  v4 = ep;
  v5 = ms;
  v6 = s;
  for ( result = match(ms, s, ep + 1); !result; result = match(v5, v6, v4 + 1) )
  {
    if ( v6 >= v5->src_end )
      return 0;
    v8 = *p;
    v9 = (unsigned __int8)*v6;
    if ( *p == 37 )
    {
      v10 = match_class((unsigned __int8)*v6, (unsigned __int8)p[1]);
    }
    else
    {
      if ( v8 == 46 )
        goto LABEL_11;
      if ( v8 == 91 )
      {
        v10 = matchbracketclass(v9, p, v4 - 1);
        v4 = ep;
      }
      else
      {
        v10 = v8 == v9;
      }
    }
    if ( !v10 )
      return 0;
    v5 = ms;
LABEL_11:
    ++v6;
  }
  return result;
}

//----- (007523D0) --------------------------------------------------------
const char *__usercall start_capture<eax>(MatchState *ms<esi>, const char *s<ebx>, const char *p, int what)
{
  int v4; // edi@1
  const char *result; // eax@3

  v4 = ms->level;
  if ( v4 >= 32 )
    luaL_error(ms->L, "too many captures");
  ms->capture[v4].init = s;
  ms->capture[v4].len = what;
  ms->level = v4 + 1;
  result = match(ms, s, p);
  if ( !result )
    --ms->level;
  return result;
}

//----- (00752420) --------------------------------------------------------
const char *__usercall end_capture<eax>(MatchState *ms<esi>, const char *s<ebx>, const char *p)
{
  int v3; // eax@1
  char *v4; // ecx@2
  int v5; // edi@6
  const char *result; // eax@6

  v3 = ms->level - 1;
  if ( v3 < 0 )
LABEL_5:
    luaL_error(ms->L, "invalid pattern capture");
  v4 = (char *)&ms->capture[v3].len;
  while ( *(_DWORD *)v4 != -1 )
  {
    v4 -= 8;
    --v3;
    if ( v3 < 0 )
      goto LABEL_5;
  }
  v5 = v3;
  ms->capture[v3].len = s - ms->capture[v3].init;
  result = match(ms, s, p);
  if ( !result )
    ms->capture[v5].len = -1;
  return result;
}

//----- (00752480) --------------------------------------------------------
const char *__usercall match_capture<eax>(MatchState *ms<ecx>, const char *s<ebx>, int l<eax>)
{
  int v3; // eax@1
  int v4; // edi@5
  const char *v5; // esi@6
  int v6; // ecx@6
  const char *v7; // edx@6

  v3 = l - 49;
  if ( v3 < 0 || v3 >= ms->level || ms->capture[v3].len == -1 )
    luaL_error(ms->L, "invalid capture index %%%d");
  v4 = ms->capture[v3].len;
  if ( (const char *)(ms->src_end - s) >= (const char *)v4 )
  {
    v5 = ms->capture[v3].init;
    v6 = ms->capture[v3].len;
    v7 = s;
    if ( (unsigned int)v4 < 4 )
    {
LABEL_9:
      if ( !v6 || *v7 == *v5 && ((unsigned int)v6 <= 1 || v7[1] == v5[1] && ((unsigned int)v6 <= 2 || v7[2] == v5[2])) )
        return &s[v4];
    }
    else
    {
      while ( *(_DWORD *)v5 == *(_DWORD *)v7 )
      {
        v6 -= 4;
        v7 += 4;
        v5 += 4;
        if ( (unsigned int)v6 < 4 )
          goto LABEL_9;
      }
    }
  }
  return 0;
}

//----- (00752510) --------------------------------------------------------
const char *__cdecl match(MatchState *ms, const char *s, const char *p)
{
  MatchState *v3; // edi@1
  int v4; // eax@1
  const char *v5; // esi@3
  const char *v6; // eax@6
  const char *v7; // ecx@6
  MatchState *v8; // edi@6
  const char *v9; // ebx@6
  const char v10; // al@7
  int v11; // edx@7
  int v12; // eax@10
  const char *v13; // esi@14
  const char *v14; // eax@16
  unsigned __int8 v15; // cl@17
  const char *v16; // edi@19
  const char v17; // al@27
  const char *v18; // eax@33
  const char *result; // eax@38
  const char *v20; // ecx@44
  int v21; // [sp-Ch] [bp-14h]@40
  int v22; // [sp-8h] [bp-10h]@40
  const char *ep; // [sp+18h] [bp+10h]@6
  const char *epa; // [sp+18h] [bp+10h]@16

  v3 = ms;
  v4 = ms->matchdepth--;
  if ( !v4 )
    luaL_error(ms->L, "pattern too complex");
  v5 = p;
  if ( p == ms->p_end )
  {
LABEL_51:
    ++v3->matchdepth;
    return s;
  }
  while ( 2 )
  {
    switch ( *v5 )
    {
      case 36:
        if ( v5 + 1 != v3->p_end )
          goto dflt;
        v20 = (const char *)((unsigned int)s & ((s != v3->src_end) - 1));
        ++v3->matchdepth;
        return v20;
      default:
dflt:
        v6 = classend(v3, v5);
        v7 = s;
        v8 = ms;
        v9 = v6;
        ep = v6;
        if ( s >= ms->src_end )
          goto LABEL_27;
        v10 = *v5;
        v11 = (unsigned __int8)*s;
        if ( *v5 == 37 )
        {
          v12 = match_class((unsigned __int8)*s, (unsigned __int8)v5[1]);
        }
        else
        {
          if ( v10 == 46 )
          {
LABEL_32:
            switch ( *v9 )
            {
              case 63:
                ++v9;
                v18 = match(v8, v7 + 1, v9);
                if ( !v18 )
                  goto LABEL_36;
                goto LABEL_49;
              default:
                s = v7 + 1;
LABEL_36:
                v5 = v9;
                goto LABEL_37;
              case 43:
                ++v7;
                goto $LN63_18;
              case 42:
$LN63_18:
                result = max_expand(v8, v7, v5, v9);
                ++ms->matchdepth;
                return result;
              case 45:
                v18 = min_expand(v8, v7, v5, v9);
LABEL_49:
                s = v18;
                break;
            }
LABEL_50:
            v3 = ms;
            goto LABEL_51;
          }
          if ( v10 == 91 )
          {
            v12 = matchbracketclass(v11, v5, v9 - 1);
            v9 = ep;
          }
          else
          {
            v12 = v10 == v11;
          }
        }
        v7 = s;
        if ( v12 )
        {
          v8 = ms;
          goto LABEL_32;
        }
LABEL_27:
        v17 = *v9;
        if ( *v9 == 42 || v17 == 63 || v17 == 45 )
        {
          v5 = v9 + 1;
          goto LABEL_37;
        }
LABEL_45:
        ++ms->matchdepth;
        return 0;
      case 37:
        switch ( v5[1] )
        {
          default:
            goto dflt;
          case 98:
            s = matchbalance(v3, s, v5 + 2);
            if ( !s )
              goto LABEL_50;
            v5 += 4;
            break;
          case 102:
            v13 = v5 + 2;
            if ( *v13 != 91 )
              luaL_error(v3->L, "missing '[' after '%%f' in pattern");
            v14 = classend(v3, v13);
            epa = v14;
            if ( s == ms->src_init )
              v15 = 0;
            else
              v15 = *(s - 1);
            v16 = v14 - 1;
            if ( matchbracketclass(v15, v13, v14 - 1) || !matchbracketclass((unsigned __int8)*s, v13, v16) )
              goto LABEL_45;
            v5 = epa;
            break;
          case 48:
          case 49:
          case 50:
          case 51:
          case 52:
          case 53:
          case 54:
          case 55:
          case 56:
          case 57:
            s = match_capture(ms, s, (unsigned __int8)v5[1]);
            if ( !s )
              goto LABEL_50;
            v5 += 2;
            break;
        }
LABEL_37:
        v3 = ms;
        if ( v5 != ms->p_end )
          continue;
        ++ms->matchdepth;
        return s;
      case 40:
        if ( v5[1] == 41 )
        {
          v22 = -2;
          v21 = (int)(v5 + 2);
        }
        else
        {
          v22 = -1;
          v21 = (int)(v5 + 1);
        }
        result = start_capture(ms, s, (const char *)v21, v22);
        ++ms->matchdepth;
        return result;
      case 41:
        result = end_capture(ms, s, v5 + 1);
        ++ms->matchdepth;
        return result;
    }
  }
}

//----- (00752840) --------------------------------------------------------
const char *__usercall lmemfind<eax>(unsigned int l2<eax>, const char *s1, unsigned int l1, const char *s2)
{
  const char *result; // eax@2
  unsigned int v5; // ebx@5
  const char *v6; // edi@7
  const char *v7; // edx@7
  unsigned int v8; // ecx@7
  const char *v9; // esi@7
  bool v10; // zf@16
  unsigned int l1a; // [sp+10h] [bp+Ch]@5

  if ( l2 )
  {
    if ( l2 <= l1 )
    {
      v5 = l2 - 1;
      l1a = l1 - (l2 - 1);
      if ( l1a )
      {
        do
        {
          memchr((char *)s1, *s2, l1a);
          if ( !result )
            break;
          v6 = result + 1;
          v7 = s2 + 1;
          v8 = v5;
          v9 = result + 1;
          if ( v5 < 4 )
          {
LABEL_10:
            if ( !v8 || *v7 == *v9 && (v8 <= 1 || v7[1] == v9[1] && (v8 <= 2 || v7[2] == v9[2])) )
              return result;
          }
          else
          {
            while ( *(_DWORD *)v9 == *(_DWORD *)v7 )
            {
              v8 -= 4;
              v7 += 4;
              v9 += 4;
              if ( v8 < 4 )
                goto LABEL_10;
            }
          }
          v10 = s1 - v6 + l1a == 0;
          l1a += s1 - v6;
          s1 = result + 1;
        }
        while ( !v10 );
      }
      result = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = s1;
  }
  return result;
}

//----- (007528F0) --------------------------------------------------------
void __usercall push_onecapture(MatchState *ms<esi>, int i<edi>, const char *s<ecx>, const char *e<eax>)
{
  int v4; // ebx@5

  if ( i < ms->level )
  {
    v4 = ms->capture[i].len;
    if ( v4 == -1 )
      luaL_error(ms->L, "unfinished capture");
    if ( v4 == -2 )
      lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1);
    else
      lua_pushlstring(ms->L, ms->capture[i].init, ms->capture[i].len);
  }
  else
  {
    if ( i )
      luaL_error(ms->L, "invalid capture index");
    lua_pushlstring(ms->L, s, e - s);
  }
}

//----- (00752970) --------------------------------------------------------
int __usercall push_captures<eax>(MatchState *ms<esi>, const char *s, const char *e)
{
  signed int v3; // ebx@3
  int i; // edi@5
  int v5; // ebx@10
  int nlevels; // [sp+8h] [bp-4h]@3

  if ( ms->level || !s )
  {
    nlevels = ms->level;
    v3 = ms->level;
  }
  else
  {
    v3 = 1;
    nlevels = 1;
  }
  luaL_checkstack(ms->L, v3, "too many captures");
  for ( i = 0; i < v3; ++i )
  {
    if ( i < ms->level )
    {
      v5 = ms->capture[i].len;
      if ( v5 == -1 )
        luaL_error(ms->L, "unfinished capture");
      if ( v5 == -2 )
      {
        lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1);
        v3 = nlevels;
      }
      else
      {
        lua_pushlstring(ms->L, ms->capture[i].init, ms->capture[i].len);
        v3 = nlevels;
      }
    }
    else
    {
      if ( i )
        luaL_error(ms->L, "invalid capture index");
      lua_pushlstring(ms->L, s, e - s);
    }
  }
  return v3;
}

//----- (00752A40) --------------------------------------------------------
int __usercall nospecials<eax>(unsigned int l<ebx>, const char *p)
{
  unsigned int v2; // esi@1
  int v3; // eax@2
  const char *v4; // eax@3
  char v5; // cl@4

  v2 = 0;
  while ( 1 )
  {
    strpbrk((char *)&p[v2], "^$*+?.([%-");
    if ( v3 )
      break;
    v4 = &p[v2];
    do
      v5 = *v4++;
    while ( v5 );
    v2 += v4 - &p[v2 + 1] + 1;
    if ( v2 > l )
      return 1;
  }
  return 0;
}

//----- (00752A90) --------------------------------------------------------
int __usercall str_find_aux<eax>(lua_State *L<ecx>, int find)
{
  lua_State *v2; // esi@1
  const char *v3; // eax@1
  unsigned int v4; // ebx@1
  const char *v5; // edi@1
  int v6; // eax@1
  int v7; // ebx@2
  int v8; // eax@10
  const char *v9; // eax@11
  int v10; // edi@12
  int result; // eax@12
  const char *v12; // ebx@13
  const char *v13; // eax@16
  const char *v14; // edi@16
  const char *v15; // edx@17
  const char *p; // [sp+Ch] [bp-130h]@1
  unsigned int ls; // [sp+10h] [bp-12Ch]@1
  unsigned int lp; // [sp+14h] [bp-128h]@1
  const char *s; // [sp+18h] [bp-124h]@1
  unsigned int anchor; // [sp+1Ch] [bp-120h]@2
  MatchState ms; // [sp+20h] [bp-11Ch]@15
  unsigned int v22; // [sp+138h] [bp-4h]@1
  int v23; // [sp+13Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v2 = L;
  s = luaL_checklstring(L, 1, &ls);
  v3 = luaL_checklstring(v2, 2, &lp);
  v4 = ls;
  v5 = v3;
  p = v3;
  v6 = luaL_optinteger(v2, 3, 1);
  if ( v6 < 0 )
  {
    if ( -v6 > v4 )
    {
LABEL_6:
      anchor = 1;
      v7 = 1;
      goto LABEL_8;
    }
    anchor = v6 + v4 + 1;
    v7 = v6 + v4 + 1;
  }
  else
  {
    v7 = v6;
    anchor = v6;
  }
  if ( (unsigned int)v7 < 1 )
    goto LABEL_6;
  if ( v7 > ls + 1 )
  {
LABEL_23:
    lua_pushnil(v2);
    return 1;
  }
LABEL_8:
  if ( find )
  {
    if ( lua_toboolean(v2, 4) || (v8 = nospecials(v5, lp), v7 = anchor, v8) )
    {
      v9 = lmemfind(&s[v7 - 1], ls - v7 + 1, v5, lp);
      if ( v9 )
      {
        v10 = v9 - s;
        lua_pushinteger(v2, v9 - s + 1);
        lua_pushinteger(v2, lp + v10);
        return 2;
      }
      goto LABEL_23;
    }
  }
  v12 = &s[v7 - 1];
  anchor = *v5 == 94;
  if ( anchor )
  {
    ++v5;
    --lp;
    p = v5;
  }
  ms.src_init = s;
  ms.L = v2;
  ms.matchdepth = 200;
  ms.src_end = &s[ls];
  ms.p_end = &v5[lp];
  while ( 1 )
  {
    ms.level = 0;
    v13 = match(&ms, v12, v5);
    v14 = v13;
    if ( v13 )
      break;
    v15 = v12++;
    if ( v15 >= ms.src_end || anchor )
      goto LABEL_23;
    v5 = p;
  }
  if ( find )
  {
    lua_pushinteger(v2, v12 - s + 1);
    lua_pushinteger(v2, v14 - s);
    result = push_captures(&ms, 0, 0) + 2;
  }
  else
  {
    result = push_captures(&ms, v12, v13);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00752CF0) --------------------------------------------------------
int __cdecl str_find(lua_State *L)
{
  return str_find_aux(L, 1);
}

//----- (00752D10) --------------------------------------------------------
int __cdecl str_match(lua_State *L)
{
  return str_find_aux(L, 0);
}

//----- (00752D30) --------------------------------------------------------
int __cdecl gmatch_aux(lua_State *L)
{
  const char *v1; // ebx@1
  const char *v2; // esi@1
  void *v3; // eax@2
  int result; // eax@4
  int v5; // ecx@5
  int lp; // [sp+Ch] [bp-12Ch]@1
  int ls; // [sp+10h] [bp-128h]@1
  const char *e; // [sp+14h] [bp-124h]@2
  char *p; // [sp+18h] [bp-120h]@1
  MatchState ms; // [sp+1Ch] [bp-11Ch]@1
  unsigned int v11; // [sp+134h] [bp-4h]@1
  int v12; // [sp+138h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = lua_tolstring(L, -1001001, (unsigned int *)&ls);
  p = (char *)lua_tolstring(L, -1001002, (unsigned int *)&lp);
  ms.L = L;
  ms.matchdepth = 200;
  ms.src_init = v1;
  ms.src_end = &v1[ls];
  ms.p_end = &p[lp];
  v2 = &v1[lua_tointegerx(L, -1001003, 0)];
  if ( v2 > ms.src_end )
  {
LABEL_4:
    result = 0;
  }
  else
  {
    while ( 1 )
    {
      ms.level = 0;
      v3 = (void *)match(&ms, v2, p);
      e = (const char *)v3;
      if ( v3 )
        break;
      ++v2;
      if ( v2 > ms.src_end )
        goto LABEL_4;
    }
    v5 = v3 - v1;
    if ( v3 == v2 )
      ++v5;
    lua_pushinteger(L, v5);
    lua_replace(L, -1001003);
    result = push_captures(&ms, v2, e);
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00752E50) --------------------------------------------------------
int __cdecl gmatch(lua_State *L)
{
  luaL_checklstring(L, 1, 0);
  luaL_checklstring(L, 2, 0);
  lua_settop(L, 2);
  lua_pushinteger(L, 0);
  lua_pushcclosure(L, gmatch_aux, 3);
  return 1;
}

//----- (00752EA0) --------------------------------------------------------
void __usercall add_s(luaL_Buffer *b<ebx>, MatchState *ms, const char *s, const char *e)
{
  unsigned int v4; // edi@1
  const char *v5; // esi@1
  int v6; // ecx@6
  const char v7; // al@12
  const char *news; // [sp+Ch] [bp-8h]@1
  unsigned int l; // [sp+10h] [bp-4h]@1

  v4 = 0;
  v5 = lua_tolstring(ms->L, 3, &l);
  news = v5;
  if ( l )
  {
    do
    {
      if ( v5[v4] == 37 )
      {
        v6 = (unsigned __int8)v5[v4++ + 1];
        if ( isdigit(v6) )
        {
          v7 = v5[v4];
          if ( v7 == 48 )
          {
            luaL_addlstring(b, s, e - s);
          }
          else
          {
            push_onecapture(ms, v7 - 49, s, e);
            luaL_addvalue(b);
            v5 = news;
          }
        }
        else
        {
          if ( v5[v4] != 37 )
            luaL_error(ms->L, "invalid use of '%c' in replacement string");
          if ( b->n >= b->size )
            luaL_prepbuffsize(b, 1u);
          b->b[b->n++] = v5[v4];
        }
      }
      else
      {
        if ( b->n >= b->size )
          luaL_prepbuffsize(b, 1u);
        b->b[b->n++] = v5[v4];
      }
      ++v4;
    }
    while ( v4 < l );
  }
}

//----- (00752FA0) --------------------------------------------------------
void __usercall add_value(MatchState *ms<edx>, const char *e<ecx>, int tr<eax>, luaL_Buffer *b, const char *s)
{
  int v5; // eax@1
  MatchState *v6; // esi@1
  lua_State *v7; // edi@1
  const char *v8; // ebx@1
  int v9; // eax@4
  int v10; // eax@7
  int v11; // eax@17
  lua_State *v12; // [sp-Ch] [bp-1Ch]@6
  const char *v13; // [sp-8h] [bp-18h]@6
  int v14; // [sp-4h] [bp-14h]@6

  v5 = tr - 5;
  v6 = ms;
  v7 = ms->L;
  v8 = e;
  if ( !v5 )
  {
    if ( ms->level > 0 )
    {
      v10 = ms->capture[0].len;
      if ( v10 == -1 )
        luaL_error(v7, "unfinished capture");
      if ( v10 == -2 )
      {
        lua_pushinteger(v7, ms->capture[0].init - ms->src_init + 1);
        goto LABEL_11;
      }
      v14 = ms->capture[0].len;
      v13 = ms->capture[0].init;
      v12 = ms->L;
    }
    else
    {
      v14 = e - s;
      v13 = s;
      v12 = ms->L;
    }
    lua_pushlstring(v12, v13, v14);
LABEL_11:
    lua_gettable(v7, 3);
    goto LABEL_12;
  }
  if ( v5 != 1 )
  {
    add_s(ms, b, s, e);
    return;
  }
  lua_pushvalue(v7, 3);
  v9 = push_captures(v6, s, v8);
  lua_callk(v7, v9, 1, 0, 0);
LABEL_12:
  if ( lua_toboolean(v7, -1) )
  {
    if ( !lua_isstring(v7, -1) )
    {
      v11 = lua_type(v7, -1);
      lua_typename(v7, v11);
      luaL_error(v7, "invalid replacement value (a %s)");
    }
    luaL_addvalue(b);
  }
  else
  {
    lua_settop(v7, -2);
    lua_pushlstring(v7, s, v8 - s);
    luaL_addvalue(b);
  }
}

//----- (007530D0) --------------------------------------------------------
int __cdecl str_gsub(lua_State *L)
{
  const char *v1; // esi@1
  void *v2; // ebx@1
  bool v3; // zf@1
  const char *v4; // eax@8
  const char *v5; // ebx@11
  int srcl; // [sp+Ch] [bp-348h]@1
  int anchor; // [sp+10h] [bp-344h]@1
  void *p; // [sp+14h] [bp-340h]@1
  int max_s; // [sp+18h] [bp-33Ch]@1
  int tr; // [sp+1Ch] [bp-338h]@1
  int lp; // [sp+20h] [bp-334h]@1
  int n; // [sp+24h] [bp-330h]@1
  luaL_Buffer b; // [sp+28h] [bp-32Ch]@6
  MatchState ms; // [sp+238h] [bp-11Ch]@8
  unsigned int v16; // [sp+350h] [bp-4h]@1
  int v17; // [sp+354h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v1 = luaL_checklstring(L, 1, (unsigned int *)&srcl);
  v2 = (void *)luaL_checklstring(L, 2, (unsigned int *)&lp);
  p = v2;
  tr = lua_type(L, 3);
  max_s = luaL_optinteger(L, 4, srcl + 1);
  v3 = *(_BYTE *)v2 == 94;
  n = 0;
  anchor = v3;
  if ( tr != 3 && tr != 4 && tr != 6 && tr != 5 )
    luaL_argerror(L, 3, "string/function/table expected");
  luaL_buffinit(L, &b);
  if ( anchor )
  {
    v2 = (char *)v2 + 1;
    --lp;
    p = v2;
  }
  v4 = &v1[srcl];
  ms.L = L;
  ms.matchdepth = 200;
  ms.src_init = v1;
  ms.src_end = &v1[srcl];
  ms.p_end = (char *)v2 + lp;
  if ( max_s )
  {
    while ( 1 )
    {
      ms.level = 0;
      v5 = match(&ms, v1, (const char *)v2);
      if ( v5 && (++n, add_value(&ms, &b, v1, v5, tr), v5 > v1) )
      {
        v1 = v5;
      }
      else
      {
        v4 = ms.src_end;
        if ( v1 >= ms.src_end )
          goto LABEL_21;
        if ( b.n >= b.size )
          luaL_prepbuffsize(&b, 1u);
        b.b[b.n++] = *v1++;
      }
      if ( anchor || n >= (unsigned int)max_s )
        break;
      v2 = p;
    }
    v4 = ms.src_end;
  }
LABEL_21:
  luaL_addlstring(&b, v1, v4 - v1);
  luaL_pushresult(&b);
  lua_pushinteger(L, n);
  return 2;
}
// A85C00: using guessed type int __security_cookie;

//----- (007532E0) --------------------------------------------------------
void __usercall addquoted(luaL_Buffer *b<esi>, int arg<ecx>, lua_State *L)
{
  const char *v3; // edi@1
  char v4; // al@4
  bool v5; // cf@9
  unsigned int v6; // edx@21
  char *v7; // [sp-Ch] [bp-28h]@11
  const char *v8; // [sp-8h] [bp-24h]@11
  int l; // [sp+8h] [bp-14h]@1
  char buff[10]; // [sp+Ch] [bp-10h]@11
  unsigned int v11; // [sp+18h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v3 = luaL_checklstring(L, arg, (unsigned int *)&l);
  if ( b->n >= b->size )
    luaL_prepbuffsize(b, 1u);
  b->b[b->n++] = 34;
  if ( l )
  {
    while ( 1 )
    {
      --l;
      v4 = *v3;
      if ( *v3 == 34 )
        break;
      if ( v4 == 92 || v4 == 10 )
        break;
      if ( v4 && !iscntrl((unsigned __int8)v4) )
      {
        v5 = b->n < b->size;
LABEL_17:
        if ( !v5 )
          luaL_prepbuffsize(b, 1u);
        b->b[b->n++] = *v3;
        goto LABEL_20;
      }
      if ( isdigit((unsigned __int8)v3[1]) )
      {
        v8 = "\\%03d";
        v7 = buff;
      }
      else
      {
        v8 = "\\%d";
        v7 = buff;
      }
      sprintf(v7, v8);
      luaL_addstring(b, buff);
LABEL_20:
      ++v3;
      if ( !l )
        goto LABEL_21;
    }
    if ( b->n >= b->size )
      luaL_prepbuffsize(b, 1u);
    b->b[b->n++] = 92;
    v5 = b->n < b->size;
    goto LABEL_17;
  }
LABEL_21:
  v6 = b->n;
  --l;
  if ( v6 >= b->size )
    luaL_prepbuffsize(b, 1u);
  b->b[b->n++] = 34;
}
// A85C00: using guessed type int __security_cookie;

//----- (00753420) --------------------------------------------------------
const char *__usercall scanformat<eax>(lua_State *L<eax>, const char *strfrmt<ebx>, char *form)
{
  lua_State *v3; // edi@1
  char *i; // esi@1
  int v5; // eax@2
  int v6; // ecx@11
  char *forma; // [sp+10h] [bp+8h]@17

  v3 = L;
  for ( i = (char *)strfrmt; *i; ++i )
  {
    strchr("-+ #0", *i);
    if ( !v5 )
      break;
  }
  if ( i - strfrmt >= 6 )
    luaL_error(v3, "invalid format (repeated flags)");
  if ( isdigit((unsigned __int8)*i) )
    ++i;
  if ( isdigit((unsigned __int8)*i) )
    ++i;
  if ( *i == 46 )
  {
    v6 = (unsigned __int8)(i++)[1];
    if ( isdigit(v6) )
      ++i;
    if ( isdigit((unsigned __int8)*i) )
      ++i;
  }
  if ( isdigit((unsigned __int8)*i) )
    luaL_error(v3, "invalid format (width or precision too long)");
  *form = 37;
  forma = form + 1;
  memcpy(forma, (char *)strfrmt, i - strfrmt + 1);
  forma[i - strfrmt + 1] = 0;
  return i;
}

//----- (00753500) --------------------------------------------------------
void __usercall addlenmod(const char *lenmod<ecx>, char *form)
{
  unsigned int v2; // edi@1
  unsigned int v3; // eax@1
  char *v4; // edx@1
  char v5; // bl@1
  int v6; // esi@1
  const char v7; // dl@2
  int v8; // eax@3

  v2 = strlen(form);
  v3 = strlen(lenmod);
  v4 = &form[v2 - 1];
  v5 = *v4;
  v6 = v4 - lenmod;
  do
  {
    v7 = *lenmod;
    lenmod[v6] = *lenmod;
    ++lenmod;
  }
  while ( v7 );
  v8 = v2 + v3;
  form[v8 - 1] = v5;
  form[v8] = 0;
}

//----- (00753550) --------------------------------------------------------
int __cdecl str_format(lua_State *L)
{
  int v1; // esi@1
  int v2; // ebx@1
  const char *v3; // ebx@6
  const char *v4; // eax@12
  long double v5; // st7@14
  long double v6; // st7@14
  long double v7; // st7@18
  long double v8; // st7@18
  int v9; // eax@25
  int result; // eax@31
  unsigned int l; // [sp+14h] [bp-248h]@25
  int sfl; // [sp+18h] [bp-244h]@1
  int top; // [sp+1Ch] [bp-240h]@1
  int strfrmt_end; // [sp+20h] [bp-23Ch]@1
  __int64 v15; // [sp+24h] [bp-238h]@10
  char *buff; // [sp+2Ch] [bp-230h]@10
  int ni; // [sp+30h] [bp-22Ch]@10
  luaL_Buffer b; // [sp+34h] [bp-228h]@1
  char form[18]; // [sp+244h] [bp-18h]@12
  unsigned int v20; // [sp+258h] [bp-4h]@1
  int v21; // [sp+25Ch] [bp+0h]@1

  v20 = (unsigned int)&v21 ^ __security_cookie;
  top = lua_gettop(L);
  v1 = 1;
  v2 = (int)luaL_checklstring(L, 1, (unsigned int *)&sfl);
  strfrmt_end = v2 + sfl;
  luaL_buffinit(L, &b);
  while ( v2 < (unsigned int)strfrmt_end )
  {
    if ( *(_BYTE *)v2 == 37 )
    {
      v3 = (const char *)(v2 + 1);
      if ( *v3 == 37 )
      {
        if ( b.n >= b.size )
          luaL_prepbuffsize(&b, 1u);
        b.b[b.n++] = *v3;
        v2 = (int)(v3 + 1);
      }
      else
      {
        ++v1;
        buff = luaL_prepbuffsize(&b, 0x200u);
        ni = 0;
        HIDWORD(v15) = v1;
        if ( v1 > top )
          luaL_argerror(L, v1, "no value");
        v4 = scanformat(L, v3, form);
        v2 = (int)(v4 + 1);
        switch ( *v4 )
        {
          case 99:
            luaL_checkinteger(L, v1);
            ni = sprintf(buff, form);
            break;
          case 100:
          case 105:
            v5 = luaL_checknumber(L, v1);
            ni = (signed int)v5;
            v6 = v5 - (double)(signed int)v5;
            if ( v6 <= -1.0 || v6 >= 1.0 )
              luaL_argerror(L, v1, "not a number in proper range");
            addlenmod(form, "l");
            ni = sprintf(buff, form);
            break;
          case 88:
          case 111:
          case 117:
          case 120:
            v7 = luaL_checknumber(L, v1);
            v15 = (signed __int64)v7;
            HIDWORD(v15) = (signed __int64)v7;
            ni = (signed __int64)v7;
            v8 = v7 - (double)(unsigned int)ni;
            if ( v8 <= -1.0 || v8 >= 1.0 )
              luaL_argerror(L, v1, "not a non-negative number in proper range");
            addlenmod(form, "l");
            goto LABEL_22;
          case 65:
          case 69:
          case 71:
          case 97:
          case 101:
          case 102:
          case 103:
            addlenmod(form, &byte_9788EB);
            luaL_checknumber(L, v1);
LABEL_22:
            ni = sprintf(buff, form);
            break;
          case 113:
            addquoted(L, &b, v1);
            v1 = HIDWORD(v15);
            break;
          case 115:
            HIDWORD(v15) = luaL_tolstring(L, v1, &l);
            strchr(form, 46);
            if ( v9 || l < 0x64 )
            {
              ni = sprintf(buff, form);
              lua_settop(L, -2);
            }
            else
            {
              luaL_addvalue(&b);
            }
            break;
          default:
            luaL_error(L, "invalid option '%%%c' to 'format'");
            return result;
        }
        b.n += ni;
      }
    }
    else
    {
      if ( b.n >= b.size )
        luaL_prepbuffsize(&b, 1u);
      b.b[b.n++] = *(_BYTE *)v2++;
    }
  }
  luaL_pushresult(&b);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00753960) --------------------------------------------------------
int __cdecl luaopen_string(lua_State *L)
{
  lua_createtable(L, 0, 14);
  luaL_setfuncs(L, &strlib, 0);
  lua_createtable(L, 0, 1);
  lua_pushlstring(L, &byte_9788EB, 0);
  lua_pushvalue(L, -2);
  lua_setmetatable(L, -2);
  lua_settop(L, -2);
  lua_pushvalue(L, -2);
  lua_setfield(L, -2, "__index");
  lua_settop(L, -2);
  return 1;
}

//----- (007539E0) --------------------------------------------------------
int __cdecl os_execute(lua_State *L)
{
  const char *v1; // esi@1
  int result; // eax@2
  int v3; // [sp-4h] [bp-Ch]@1

  v1 = luaL_optlstring(L, 1, 0, 0);
  v3 = system(v1);
  if ( v1 )
  {
    result = luaL_execresult(L, v3);
  }
  else
  {
    lua_pushboolean(L, v3);
    result = 1;
  }
  return result;
}

//----- (00753A30) --------------------------------------------------------
int __cdecl os_remove(lua_State *L)
{
  const char *v1; // eax@1
  const char *v2; // ST08_4@1
  int v3; // eax@1

  v1 = luaL_checklstring(L, 1, 0);
  v2 = v1;
  v3 = remove(v1);
  return luaL_fileresult(L, v3 == 0, v2);
}

//----- (00753A60) --------------------------------------------------------
int __cdecl os_rename(lua_State *L)
{
  const char *v1; // edi@1
  const char *v2; // eax@1
  int v3; // eax@1

  v1 = luaL_checklstring(L, 1, 0);
  v2 = luaL_checklstring(L, 2, 0);
  v3 = rename(v1, v2);
  return luaL_fileresult(L, v3 == 0, 0);
}

//----- (00753AA0) --------------------------------------------------------
int __cdecl os_tmpname(lua_State *L)
{
  char buff[14]; // [sp+4h] [bp-14h]@1
  unsigned int v3; // [sp+14h] [bp-4h]@1
  int v4; // [sp+18h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  if ( !tmpnam(buff) )
    luaL_error(L, "unable to generate a unique filename");
  lua_pushstring(L, buff);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00753B10) --------------------------------------------------------
int __cdecl os_getenv(lua_State *L)
{
  const char *v1; // eax@1
  char *v2; // eax@1

  v1 = luaL_checklstring(L, 1, 0);
  v2 = getenv(v1);
  lua_pushstring(L, v2);
  return 1;
}

//----- (00753B40) --------------------------------------------------------
int __cdecl os_clock(lua_State *L)
{
  int v1; // ST0C_4@1

  v1 = clock();
  lua_pushnumber(L, (double)v1 / 1000.0);
  return 1;
}

//----- (00753B70) --------------------------------------------------------
const char *__usercall checkoption<eax>(const char *conv<esi>, char *buff<ebx>, lua_State *L)
{
  unsigned int v3; // edi@1
  int v4; // eax@3
  const char *const v5; // eax@4
  char v6; // cl@5
  int v7; // eax@6
  const char *v8; // eax@8

  v3 = 0;
  while ( 1 )
  {
    if ( *conv )
    {
      strchr((char *)options[v3], *conv);
      if ( v4 )
      {
        buff[1] = *conv;
        v5 = options[v3 + 1];
        if ( !*v5 )
        {
          buff[2] = 0;
          return conv + 1;
        }
        v6 = conv[1];
        if ( v6 )
        {
          strchr((char *)v5, v6);
          if ( v7 )
            break;
        }
      }
    }
    v3 += 2;
    if ( v3 >= 2 )
    {
      v8 = lua_pushfstring(L, "invalid conversion specifier '%%%s'");
      luaL_argerror(L, 1, v8);
    }
  }
  buff[2] = conv[1];
  buff[3] = 0;
  return conv + 2;
}

//----- (00753C00) --------------------------------------------------------
int __cdecl os_date(lua_State *L)
{
  const char *v1; // ebx@1
  __int64 v2; // qax@2
  tm *v3; // esi@5
  int v4; // esi@10
  const char i; // al@12
  unsigned int v6; // eax@17
  char cc[4]; // [sp+Ch] [bp-2ECh]@12
  __int64 t; // [sp+10h] [bp-2E8h]@4
  tm *stm; // [sp+18h] [bp-2E0h]@5
  luaL_Buffer b; // [sp+1Ch] [bp-2DCh]@12
  char buff[200]; // [sp+22Ch] [bp-CCh]@17
  unsigned int v13; // [sp+2F4h] [bp-4h]@1
  int v14; // [sp+2F8h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v1 = luaL_optlstring(L, 1, "%c", 0);
  if ( lua_type(L, 2) > 0 )
    v2 = (unsigned __int64)luaL_checknumber(L, 2);
  else
    v2 = _time64(0);
  t = v2;
  if ( *v1 == 33 )
  {
    v3 = _gmtime64(&t);
    stm = v3;
    ++v1;
  }
  else
  {
    stm = _localtime64(&t);
    v3 = stm;
  }
  if ( v3 )
  {
    if ( strcmp(v1, "*t") )
    {
      cc[0] = 37;
      luaL_buffinit(L, &b);
      for ( i = *v1; *v1; i = *v1 )
      {
        if ( i == 37 )
        {
          v1 = checkoption(L, v1 + 1, cc);
          v6 = strftime(buff, 0xC8u, cc, stm);
          luaL_addlstring(&b, buff, v6);
        }
        else
        {
          if ( b.n >= b.size )
            luaL_prepbuffsize(&b, 1u);
          b.b[b.n++] = *v1++;
        }
      }
      luaL_pushresult(&b);
    }
    else
    {
      lua_createtable(L, 0, 9);
      lua_pushinteger(L, v3->tm_sec);
      lua_setfield(L, -2, "sec");
      lua_pushinteger(L, v3->tm_min);
      lua_setfield(L, -2, "min");
      lua_pushinteger(L, v3->tm_hour);
      lua_setfield(L, -2, "hour");
      lua_pushinteger(L, v3->tm_mday);
      lua_setfield(L, -2, "day");
      lua_pushinteger(L, v3->tm_mon + 1);
      lua_setfield(L, -2, "month");
      lua_pushinteger(L, v3->tm_year + 1900);
      lua_setfield(L, -2, "year");
      lua_pushinteger(L, v3->tm_wday + 1);
      lua_setfield(L, -2, "wday");
      lua_pushinteger(L, v3->tm_yday + 1);
      lua_setfield(L, -2, "yday");
      v4 = v3->tm_isdst;
      if ( v4 >= 0 )
      {
        lua_pushboolean(L, v4);
        lua_setfield(L, -2, "isdst");
      }
    }
  }
  else
  {
    lua_pushnil(L);
  }
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00753EC0) --------------------------------------------------------
int __cdecl os_time(lua_State *L)
{
  __int64 v1; // qax@2
  int v2; // edi@3
  int v3; // edi@5
  signed int v4; // edi@7
  int v5; // edi@9
  int v6; // edi@11
  int v7; // edi@13
  signed int v8; // edi@16
  int result; // eax@20
  __int64 t; // [sp+Ch] [bp-30h]@3
  tm ts; // [sp+14h] [bp-28h]@5
  unsigned int v12; // [sp+38h] [bp-4h]@1
  int v13; // [sp+3Ch] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  if ( lua_type(L, 1) > 0 )
  {
    luaL_checktype(L, 1, 5);
    lua_settop(L, 1);
    lua_getfield(L, -1, "sec");
    v2 = lua_tointegerx(L, -1, (int *)&t + 1);
    if ( !HIDWORD(t) )
      v2 = 0;
    lua_settop(L, -2);
    ts.tm_sec = v2;
    lua_getfield(L, -1, "min");
    v3 = lua_tointegerx(L, -1, (int *)&t + 1);
    if ( !HIDWORD(t) )
      v3 = 0;
    lua_settop(L, -2);
    ts.tm_min = v3;
    lua_getfield(L, -1, "hour");
    v4 = lua_tointegerx(L, -1, (int *)&t + 1);
    if ( !HIDWORD(t) )
      v4 = 12;
    lua_settop(L, -2);
    ts.tm_hour = v4;
    lua_getfield(L, -1, "day");
    v5 = lua_tointegerx(L, -1, (int *)&t + 1);
    if ( !HIDWORD(t) )
      luaL_error(L, "field '%s' missing in date table");
    lua_settop(L, -2);
    ts.tm_mday = v5;
    lua_getfield(L, -1, "month");
    v6 = lua_tointegerx(L, -1, (int *)&t + 1);
    if ( !HIDWORD(t) )
      luaL_error(L, "field '%s' missing in date table");
    lua_settop(L, -2);
    ts.tm_mon = v6 - 1;
    lua_getfield(L, -1, "year");
    v7 = lua_tointegerx(L, -1, (int *)&t + 1);
    if ( !HIDWORD(t) )
      luaL_error(L, "field '%s' missing in date table");
    lua_settop(L, -2);
    ts.tm_year = v7 - 1900;
    lua_getfield(L, -1, "isdst");
    if ( lua_type(L, -1) )
      v8 = lua_toboolean(L, -1);
    else
      v8 = -1;
    lua_settop(L, -2);
    ts.tm_isdst = v8;
    v1 = _mktime64(&ts);
  }
  else
  {
    v1 = _time64(0);
  }
  t = v1;
  if ( (HIDWORD(v1) & (unsigned int)v1) == -1 )
  {
    lua_pushnil(L);
    result = 1;
  }
  else
  {
    lua_pushnumber(L, (double)t);
    result = 1;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00754120) --------------------------------------------------------
int __cdecl os_difftime(lua_State *L)
{
  __int64 v1; // kr00_8@1
  __int64 v2; // qax@1
  long double v3; // st7@1

  v1 = (unsigned __int64)luaL_optnumber(L, 2, 0.0);
  v2 = (unsigned __int64)luaL_checknumber(L, 1);
  v3 = _difftime64(v2, v1);
  lua_pushnumber(L, v3);
  return 1;
}

//----- (00754180) --------------------------------------------------------
int __cdecl os_setlocale(lua_State *L)
{
  const char *v1; // edi@1
  int v2; // eax@1
  char *v3; // eax@1

  v1 = luaL_optlstring(L, 1, 0, 0);
  v2 = luaL_checkoption(L, 2, "all", catnames);
  v3 = setlocale(cat[v2], v1);
  lua_pushstring(L, v3);
  return 1;
}

//----- (007541D0) --------------------------------------------------------
int __cdecl os_exit(lua_State *L)
{
  int v1; // esi@2

  if ( lua_type(L, 1) == 1 )
    v1 = lua_toboolean(L, 1) == 0;
  else
    v1 = luaL_optinteger(L, 1, 0);
  if ( lua_toboolean(L, 2) )
    lua_close(L);
  if ( L )
    exit(v1);
  return 0;
}

//----- (00754240) --------------------------------------------------------
int __cdecl luaopen_os(lua_State *L)
{
  lua_createtable(L, 0, 11);
  luaL_setfuncs(L, &syslib, 0);
  return 1;
}

//----- (00754270) --------------------------------------------------------
int __cdecl io_type(lua_State *L)
{
  void *v1; // eax@1
  int result; // eax@2

  luaL_checkany(L, 1);
  v1 = luaL_testudata(L, 1, "FILE*");
  if ( v1 )
  {
    if ( *((_DWORD *)v1 + 1) )
    {
      lua_pushlstring(L, "file", 4u);
      result = 1;
    }
    else
    {
      lua_pushlstring(L, "closed file", 0xBu);
      result = 1;
    }
  }
  else
  {
    lua_pushnil(L);
    result = 1;
  }
  return result;
}

//----- (007542E0) --------------------------------------------------------
int __cdecl f_tostring(lua_State *L)
{
  int result; // eax@2

  if ( *((_DWORD *)luaL_checkudata(L, 1, "FILE*") + 1) )
  {
    lua_pushfstring(L, "file (%p)");
    result = 1;
  }
  else
  {
    lua_pushlstring(L, "file (closed)", 0xDu);
    result = 1;
  }
  return result;
}

//----- (00754330) --------------------------------------------------------
int __cdecl io_close(lua_State *L)
{
  void *v1; // eax@5
  int (__cdecl *v2)(_DWORD); // ecx@5

  if ( lua_type(L, 1) == -1 )
    lua_getfield(L, -1001000, "_IO_output");
  if ( !*((_DWORD *)luaL_checkudata(L, 1, "FILE*") + 1) )
    luaL_error(L, "attempt to use a closed file");
  v1 = luaL_checkudata(L, 1, "FILE*");
  v2 = (int (__cdecl *)(_DWORD))*((_DWORD *)v1 + 1);
  *((_DWORD *)v1 + 1) = 0;
  return v2(L);
}

//----- (007543A0) --------------------------------------------------------
int __cdecl f_gc(lua_State *L)
{
  void *v1; // eax@1
  void *v2; // eax@3
  void (__cdecl *v3)(_DWORD); // ecx@3

  v1 = luaL_checkudata(L, 1, "FILE*");
  if ( *((_DWORD *)v1 + 1) && *(_DWORD *)v1 )
  {
    v2 = luaL_checkudata(L, 1, "FILE*");
    v3 = (void (__cdecl *)(_DWORD))*((_DWORD *)v2 + 1);
    *((_DWORD *)v2 + 1) = 0;
    v3(L);
  }
  return 0;
}

//----- (007543F0) --------------------------------------------------------
int __cdecl io_fclose(lua_State *L)
{
  void *v1; // eax@1
  int v2; // eax@1

  v1 = luaL_checkudata(L, 1, "FILE*");
  v2 = fclose(*(_iobuf **)v1);
  return luaL_fileresult(L, v2 == 0, 0);
}

//----- (00754430) --------------------------------------------------------
void __usercall opencheck(lua_State *L<edi>, const char *fname<ebx>, const char *mode)
{
  void *v3; // esi@1
  _iobuf *v4; // eax@1
  int *v5; // eax@2

  v3 = lua_newuserdata(L, 8u);
  *((_DWORD *)v3 + 1) = 0;
  luaL_setmetatable(L, "FILE*");
  *(_DWORD *)v3 = 0;
  *((_DWORD *)v3 + 1) = io_fclose;
  v4 = fopen(fname, mode);
  *(_DWORD *)v3 = v4;
  if ( !v4 )
  {
    v5 = _errno();
    strerror(*v5);
    luaL_error(L, "cannot open file '%s' (%s)");
  }
}

//----- (00754490) --------------------------------------------------------
int __cdecl io_open(lua_State *L)
{
  const char *v1; // ebx@1
  void *v2; // esi@1
  int v3; // ecx@2
  int v4; // eax@2
  _iobuf *v5; // eax@9
  int result; // eax@10
  const char *filename; // [sp+Ch] [bp-4h]@1

  filename = luaL_checklstring(L, 1, 0);
  v1 = luaL_optlstring(L, 2, "r", 0);
  v2 = lua_newuserdata(L, 8u);
  *((_DWORD *)v2 + 1) = 0;
  luaL_setmetatable(L, "FILE*");
  *(_DWORD *)v2 = 0;
  *((_DWORD *)v2 + 1) = io_fclose;
  if ( !*v1
    || (strchr("rwa", *v1), v3 = (int)(v1 + 1), !v4)
    || *(_BYTE *)v3 == 43 && (v3 = (int)(v1 + 2), v1 == (const char *)-2)
    || *(_BYTE *)v3 == 98 && (++v3, !v3)
    || *(_BYTE *)v3 )
    luaL_argerror(L, 2, "invalid mode");
  v5 = fopen(filename, v1);
  *(_DWORD *)v2 = v5;
  if ( v5 )
    result = 1;
  else
    result = luaL_fileresult(L, 0, filename);
  return result;
}

//----- (00754560) --------------------------------------------------------
int __cdecl io_pclose(lua_State *L)
{
  void *v1; // eax@1
  int v2; // eax@1

  v1 = luaL_checkudata(L, 1, "FILE*");
  v2 = _pclose(*(_iobuf **)v1);
  return luaL_execresult(L, v2);
}

//----- (00754590) --------------------------------------------------------
int __cdecl io_popen(lua_State *L)
{
  const char *v1; // ebx@1
  const char *v2; // ST40_4@1
  void *v3; // edi@1
  _iobuf *v4; // eax@1
  int result; // eax@2

  v1 = luaL_checklstring(L, 1, 0);
  v2 = luaL_optlstring(L, 2, "r", 0);
  v3 = lua_newuserdata(L, 8u);
  *((_DWORD *)v3 + 1) = 0;
  luaL_setmetatable(L, "FILE*");
  v4 = _popen(v1, v2);
  *(_DWORD *)v3 = v4;
  *((_DWORD *)v3 + 1) = io_pclose;
  if ( v4 )
    result = 1;
  else
    result = luaL_fileresult(L, 0, v1);
  return result;
}

//----- (00754610) --------------------------------------------------------
int __cdecl io_tmpfile(lua_State *L)
{
  void *v1; // esi@1
  _iobuf *v2; // eax@1
  int result; // eax@2

  v1 = lua_newuserdata(L, 8u);
  *((_DWORD *)v1 + 1) = 0;
  luaL_setmetatable(L, "FILE*");
  *(_DWORD *)v1 = 0;
  *((_DWORD *)v1 + 1) = io_fclose;
  v2 = tmpfile();
  *(_DWORD *)v1 = v2;
  if ( v2 )
    result = 1;
  else
    result = luaL_fileresult(L, 0, 0);
  return result;
}

//----- (00754670) --------------------------------------------------------
int __usercall g_iofile<eax>(lua_State *L<eax>, const char *f<esi>, const char *mode)
{
  lua_State *v3; // edi@1
  const char *v4; // eax@2

  v3 = L;
  if ( lua_type(L, 1) > 0 )
  {
    v4 = lua_tolstring(v3, 1, 0);
    if ( v4 )
    {
      opencheck(v3, v4, mode);
    }
    else
    {
      if ( !*((_DWORD *)luaL_checkudata(v3, 1, "FILE*") + 1) )
        luaL_error(v3, "attempt to use a closed file");
      lua_pushvalue(v3, 1);
    }
    lua_setfield(v3, -1001000, f);
  }
  lua_getfield(v3, -1001000, f);
  return 1;
}

//----- (00754700) --------------------------------------------------------
int __cdecl io_input(lua_State *L)
{
  return g_iofile(L, "_IO_input", "r");
}

//----- (00754720) --------------------------------------------------------
int __cdecl io_output(lua_State *L)
{
  return g_iofile(L, "_IO_output", "w");
}

//----- (00754740) --------------------------------------------------------
int __usercall read_number<eax>(lua_State *L<esi>, _iobuf *f<ecx>)
{
  int result; // eax@2
  long double d; // [sp+8h] [bp-8h]@2

  if ( fscanf(f, "%lf") == 1 )
  {
    lua_pushnumber(L, d);
    result = 1;
  }
  else
  {
    lua_pushnil(L);
    result = 0;
  }
  return result;
}

//----- (00754790) --------------------------------------------------------
int __usercall read_line<eax>(lua_State *L<ebx>, _iobuf *f<edi>, int chop)
{
  char *v3; // esi@1
  unsigned int v4; // eax@2
  int result; // eax@5
  luaL_Buffer b; // [sp+4h] [bp-214h]@1
  unsigned int v7; // [sp+214h] [bp-4h]@1
  int v8; // [sp+218h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  luaL_buffinit(L, &b);
  v3 = luaL_prepbuffsize(&b, 0x200u);
  if ( fgets(v3, 512, f) )
  {
    while ( 1 )
    {
      v4 = strlen(v3);
      if ( v4 )
      {
        if ( v3[v4 - 1] == 10 )
          break;
      }
      b.n += v4;
      v3 = luaL_prepbuffsize(&b, 0x200u);
      if ( !fgets(v3, 512, f) )
        goto LABEL_5;
    }
    b.n += v4 - chop;
    luaL_pushresult(&b);
    result = 1;
  }
  else
  {
LABEL_5:
    luaL_pushresult(&b);
    result = lua_rawlen(L, -1) > 0;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00754880) --------------------------------------------------------
void __usercall read_all(_iobuf *f<edi>, lua_State *L)
{
  unsigned int v2; // esi@1
  void *v3; // eax@1
  unsigned int v4; // eax@1
  void *v5; // eax@4
  unsigned int v6; // eax@4
  luaL_Buffer b; // [sp+4h] [bp-214h]@1
  unsigned int v8; // [sp+214h] [bp-4h]@1
  int v9; // [sp+218h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v2 = 512;
  luaL_buffinit(L, &b);
  v3 = luaL_prepbuffsize(&b, 0x200u);
  v4 = fread(v3, 1u, 0x200u, f);
  b.n += v4;
  if ( v4 >= 0x200 )
  {
    do
    {
      if ( v2 <= 0x3FFFFFFF )
        v2 *= 2;
      v5 = luaL_prepbuffsize(&b, v2);
      v6 = fread(v5, 1u, v2, f);
      b.n += v6;
    }
    while ( v6 >= v2 );
  }
  luaL_pushresult(&b);
}
// A85C00: using guessed type int __security_cookie;

//----- (00754920) --------------------------------------------------------
int __usercall g_read<eax>(lua_State *L<ecx>, _iobuf *f<edx>, int first)
{
  lua_State *v3; // ebx@1
  _iobuf *v4; // edi@1
  int v5; // eax@1
  int v6; // esi@1
  signed int v7; // esi@2
  int result; // eax@4
  int v9; // esi@8
  int v10; // esi@9
  void *v11; // eax@10
  unsigned int v12; // esi@10
  const char *v13; // eax@11
  int nargs; // [sp+Ch] [bp-21Ch]@1
  int n; // [sp+10h] [bp-218h]@2
  luaL_Buffer B; // [sp+14h] [bp-214h]@10
  unsigned int v17; // [sp+224h] [bp-4h]@1
  int v18; // [sp+228h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v3 = L;
  v4 = f;
  v5 = lua_gettop(L);
  v6 = v5 - 1;
  nargs = v5 - 1;
  clearerr(v4);
  if ( v6 )
  {
    luaL_checkstack(v3, v6 + 20, "too many arguments");
    v7 = 1;
    n = first;
    do
    {
      --nargs;
      if ( !v7 )
        break;
      if ( lua_type(v3, n++) == 3 )
      {
        v9 = lua_tointegerx(v3, n, 0);
        if ( v9 )
        {
          luaL_buffinit(v3, &B);
          v11 = luaL_prepbuffsize(&B, v9);
          v12 = fread(v11, 1u, v9, v4);
          B.n += v12;
          luaL_pushresult(&B);
          v7 = v12 > 0;
        }
        else
        {
          v10 = getc(v4);
          ungetc(v10, v4);
          lua_pushlstring(v3, 0, 0);
          v7 = v10 != -1;
        }
      }
      else
      {
        v13 = lua_tolstring(v3, n, 0);
        if ( !v13 || *v13 != 42 )
          luaL_argerror(v3, n, "invalid option");
        switch ( v13[1] )
        {
          case 110:
            v7 = read_number(v3, v4);
            break;
          case 108:
            v7 = read_line(v3, v4, 1);
            break;
          case 76:
            v7 = read_line(v3, v4, 0);
            break;
          case 97:
            read_all(v3, v4);
            v7 = 1;
            break;
          default:
            luaL_argerror(v3, n, "invalid format");
            return result;
        }
      }
    }
    while ( nargs );
  }
  else
  {
    v7 = read_line(v3, v4, 1);
    n = first + 1;
  }
  if ( ferror(v4) )
  {
    result = luaL_fileresult(v3, 0, 0);
  }
  else
  {
    if ( !v7 )
    {
      lua_settop(v3, -2);
      lua_pushnil(v3);
    }
    result = n - first;
  }
  return result;
}
// A85C00: using guessed type int __security_cookie;

//----- (00754B80) --------------------------------------------------------
int __cdecl io_read(lua_State *L)
{
  void *v1; // eax@1

  lua_getfield(L, -1001000, "_IO_input");
  v1 = lua_touserdata(L, -1);
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "standard %s file is closed");
  return g_read(L, *(_iobuf **)v1, 1);
}

//----- (00754BD0) --------------------------------------------------------
int __cdecl f_read(lua_State *L)
{
  void *v1; // eax@1

  v1 = luaL_checkudata(L, 1, "FILE*");
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "attempt to use a closed file");
  return g_read(L, *(_iobuf **)v1, 2);
}

//----- (00754C10) --------------------------------------------------------
int __cdecl io_readline(lua_State *L)
{
  void *v1; // edi@1
  int v2; // ebx@1
  signed int v3; // edi@4
  signed int v4; // edi@7
  int result; // eax@8
  void *v6; // eax@13
  void (__cdecl *v7)(_DWORD); // ecx@13
  void *p; // [sp+Ch] [bp-4h]@1

  v1 = lua_touserdata(L, -1001001);
  p = v1;
  v2 = lua_tointegerx(L, -1001002, 0);
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "file is already closed");
  lua_settop(L, 1);
  if ( v2 >= 1 )
  {
    v3 = -1001004;
    do
    {
      lua_pushvalue(L, v3--);
      --v2;
    }
    while ( v2 );
    v1 = p;
  }
  v4 = g_read(L, *(_iobuf **)v1, 2);
  if ( lua_type(L, -v4) )
  {
    result = v4;
  }
  else
  {
    if ( v4 > 1 )
    {
      lua_tolstring(L, 1 - v4, 0);
      luaL_error(L, "%s");
    }
    if ( lua_toboolean(L, -1001003) )
    {
      lua_settop(L, 0);
      lua_pushvalue(L, -1001001);
      v6 = luaL_checkudata(L, 1, "FILE*");
      v7 = (void (__cdecl *)(_DWORD))*((_DWORD *)v6 + 1);
      *((_DWORD *)v6 + 1) = 0;
      v7(L);
    }
    result = 0;
  }
  return result;
}

//----- (00754D20) --------------------------------------------------------
int __usercall g_write<eax>(lua_State *L<ebx>, int arg<eax>, _iobuf *f)
{
  int v3; // esi@1
  int v4; // eax@1
  signed int v5; // edi@1
  const void *v7; // eax@11
  unsigned int v8; // eax@12
  lua_State *v9; // [sp+4h] [bp-14h]@0
  int nargs; // [sp+10h] [bp-8h]@4
  unsigned int l; // [sp+14h] [bp-4h]@11

  v3 = arg;
  v4 = lua_gettop(v9) - arg;
  v5 = 1;
  if ( !v4 )
    return 1;
  while ( 1 )
  {
    nargs = v4 - 1;
    if ( lua_type(L, v3) == 3 )
    {
      if ( !v5 || (lua_tonumberx(L, v3, 0), fprintf(f, "%.14g") <= 0) )
        goto LABEL_7;
    }
    else
    {
      v7 = luaL_checklstring(L, v3, &l);
      if ( !v5 || (v8 = fwrite(v7, 1u, l, f), v8 != l) )
      {
LABEL_7:
        v5 = 0;
        goto LABEL_8;
      }
    }
    v5 = 1;
LABEL_8:
    ++v3;
    if ( !nargs )
      break;
    v4 = nargs;
  }
  if ( v5 )
    return 1;
  return luaL_fileresult(L, 0, 0);
}

//----- (00754DE0) --------------------------------------------------------
int __cdecl io_write(lua_State *L)
{
  void *v1; // eax@1

  lua_getfield(L, -1001000, "_IO_output");
  v1 = lua_touserdata(L, -1);
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "standard %s file is closed");
  return g_write(L, *(_iobuf **)v1, 1);
}

//----- (00754E40) --------------------------------------------------------
int __cdecl f_write(lua_State *L)
{
  void *v1; // eax@1
  _iobuf *v2; // esi@3

  v1 = luaL_checkudata(L, 1, "FILE*");
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "attempt to use a closed file");
  v2 = *(_iobuf **)v1;
  lua_pushvalue(L, 1);
  return g_write(L, v2, 2);
}

//----- (00754E90) --------------------------------------------------------
int __cdecl f_seek(lua_State *L)
{
  void *v1; // eax@1
  _iobuf *v2; // edi@3
  int v3; // ebx@3
  long double v4; // st7@3
  int result; // eax@6
  __int64 v6; // ST1C_8@7

  v1 = luaL_checkudata(L, 1, "FILE*");
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "attempt to use a closed file");
  v2 = *(_iobuf **)v1;
  v3 = luaL_checkoption(L, 2, "cur", modenames);
  v4 = luaL_optnumber(L, 3, 0.0);
  if ( (double)(signed __int64)(unsigned __int64)v4 != v4 )
    luaL_argerror(L, 3, "not an integer in proper range");
  if ( _fseeki64(v2, (unsigned __int64)v4, mode[v3]) )
  {
    result = luaL_fileresult(L, 0, 0);
  }
  else
  {
    v6 = _ftelli64(v2);
    lua_pushnumber(L, (double)v6);
    result = 1;
  }
  return result;
}

//----- (00754F70) --------------------------------------------------------
int __cdecl f_setvbuf(lua_State *L)
{
  void *v1; // eax@1
  _iobuf *v2; // edi@3
  int v3; // ebx@3
  int v4; // eax@3
  int v5; // eax@3

  v1 = luaL_checkudata(L, 1, "FILE*");
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "attempt to use a closed file");
  v2 = *(_iobuf **)v1;
  v3 = luaL_checkoption(L, 2, 0, modenames_0);
  v4 = luaL_optinteger(L, 3, 512);
  v5 = setvbuf(v2, 0, mode_0[v3], v4);
  return luaL_fileresult(L, v5 == 0, 0);
}

//----- (00754FF0) --------------------------------------------------------
int __cdecl io_flush(lua_State *L)
{
  void *v1; // eax@1
  int v2; // eax@3

  lua_getfield(L, -1001000, "_IO_output");
  v1 = lua_touserdata(L, -1);
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "standard %s file is closed");
  v2 = fflush(*(_iobuf **)v1);
  return luaL_fileresult(L, v2 == 0, 0);
}

//----- (00755050) --------------------------------------------------------
int __cdecl f_flush(lua_State *L)
{
  void *v1; // eax@1
  int v2; // eax@3

  v1 = luaL_checkudata(L, 1, "FILE*");
  if ( !*((_DWORD *)v1 + 1) )
    luaL_error(L, "attempt to use a closed file");
  v2 = fflush(*(_iobuf **)v1);
  return luaL_fileresult(L, v2 == 0, 0);
}

//----- (007550A0) --------------------------------------------------------
int __cdecl io_noclose(lua_State *L)
{
  *((_DWORD *)luaL_checkudata(L, 1, "FILE*") + 1) = io_noclose;
  lua_pushnil(L);
  lua_pushlstring(L, "cannot close standard file", 0x1Au);
  return 2;
}

//----- (007550E0) --------------------------------------------------------
int __cdecl luaopen_io(lua_State *L)
{
  _iobuf *v1; // ebx@1
  void *v2; // eax@1
  void *v3; // edi@1
  _iobuf *v4; // edi@1
  void *v5; // eax@1
  void *v6; // ebx@1
  _iobuf *v7; // ebx@1
  void *v8; // eax@1
  void *v9; // edi@1

  lua_createtable(L, 0, 11);
  luaL_setfuncs(L, &iolib, 0);
  luaL_newmetatable(L, "FILE*");
  lua_pushvalue(L, -1);
  lua_setfield(L, -2, "__index");
  luaL_setfuncs(L, &flib, 0);
  lua_settop(L, -2);
  v1 = __iob_func();
  v2 = lua_newuserdata(L, 8u);
  v3 = v2;
  *((_DWORD *)v2 + 1) = 0;
  luaL_setmetatable(L, "FILE*");
  *(_DWORD *)v3 = v1;
  *((_DWORD *)v3 + 1) = io_noclose;
  lua_pushvalue(L, -1);
  lua_setfield(L, -1001000, "_IO_input");
  lua_setfield(L, -2, "stdin");
  v4 = __iob_func() + 1;
  v5 = lua_newuserdata(L, 8u);
  v6 = v5;
  *((_DWORD *)v5 + 1) = 0;
  luaL_setmetatable(L, "FILE*");
  *(_DWORD *)v6 = v4;
  *((_DWORD *)v6 + 1) = io_noclose;
  lua_pushvalue(L, -1);
  lua_setfield(L, -1001000, "_IO_output");
  lua_setfield(L, -2, "stdout");
  v7 = __iob_func() + 2;
  v8 = lua_newuserdata(L, 8u);
  v9 = v8;
  *((_DWORD *)v8 + 1) = 0;
  luaL_setmetatable(L, "FILE*");
  *(_DWORD *)v9 = v7;
  *((_DWORD *)v9 + 1) = io_noclose;
  lua_setfield(L, -2, "stderr");
  return 1;
}

//----- (00755230) --------------------------------------------------------
void __usercall aux_lines(lua_State *L<edi>, int toclose)
{
  int v2; // esi@1
  signed int v3; // eax@3
  int v4; // ebx@4
  lua_State *v5; // [sp+0h] [bp-8h]@0

  v2 = lua_gettop(v5) - 1;
  if ( v2 > 17 )
    luaL_argerror(L, 17, "too many options");
  lua_pushvalue(L, 1);
  lua_pushinteger(L, v2);
  lua_pushboolean(L, toclose);
  v3 = 1;
  if ( v2 >= 1 )
  {
    do
    {
      v4 = v3 + 1;
      lua_pushvalue(L, v3 + 1);
      v3 = v4;
    }
    while ( v4 <= v2 );
  }
  lua_pushcclosure(L, io_readline, v2 + 3);
}

//----- (007552B0) --------------------------------------------------------
int __cdecl f_lines(lua_State *L)
{
  if ( !*((_DWORD *)luaL_checkudata(L, 1, "FILE*") + 1) )
    luaL_error(L, "attempt to use a closed file");
  aux_lines(L, 0);
  return 1;
}

//----- (007552F0) --------------------------------------------------------
int __cdecl io_lines(lua_State *L)
{
  int result; // eax@6
  const char *v2; // eax@7

  if ( lua_type(L, 1) == -1 )
    lua_pushnil(L);
  if ( lua_type(L, 1) )
  {
    v2 = luaL_checklstring(L, 1, 0);
    opencheck(L, v2, "r");
    lua_replace(L, 1);
    aux_lines(L, 1);
    result = 1;
  }
  else
  {
    lua_getfield(L, -1001000, "_IO_input");
    lua_replace(L, 1);
    if ( !*((_DWORD *)luaL_checkudata(L, 1, "FILE*") + 1) )
      luaL_error(L, "attempt to use a closed file");
    aux_lines(L, 0);
    result = 1;
  }
  return result;
}

//----- (007553B0) --------------------------------------------------------
int __cdecl tinsert(lua_State *L)
{
  int v1; // esi@1
  int v2; // eax@1
  int v3; // eax@4
  int v4; // ebx@4
  int pos; // [sp+Ch] [bp-4h]@4

  luaL_checktype(L, 1, 5);
  v1 = luaL_len(L, 1) + 1;
  v2 = lua_gettop(L) - 2;
  if ( v2 )
  {
    if ( v2 != 1 )
      luaL_error(L, "wrong number of arguments to 'insert'");
    v3 = luaL_checkinteger(L, 2);
    v4 = v3;
    pos = v3;
    if ( v3 < 1 || v1 < v3 )
      luaL_argerror(L, 2, "position out of bounds");
    if ( v1 > v3 )
    {
      do
      {
        lua_rawgeti(L, 1, v1 - 1);
        lua_rawseti(L, 1, v1--);
      }
      while ( v1 > pos );
      v4 = pos;
    }
  }
  else
  {
    v4 = v1;
  }
  lua_rawseti(L, 1, v4);
  return 0;
}

//----- (00755460) --------------------------------------------------------
int __cdecl tremove(lua_State *L)
{
  int v1; // eax@1
  int v2; // ebx@1
  int v3; // eax@1
  int v4; // esi@1
  int size; // [sp+Ch] [bp-4h]@1

  luaL_checktype(L, 1, 5);
  v1 = luaL_len(L, 1);
  v2 = v1;
  size = v1;
  v3 = luaL_optinteger(L, 2, v1);
  v4 = v3;
  if ( v3 != v2 && (v3 < 1 || v3 > v2 + 1) )
    luaL_argerror(L, 1, "position out of bounds");
  lua_rawgeti(L, 1, v3);
  if ( v4 < v2 )
  {
    do
    {
      lua_rawgeti(L, 1, v4 + 1);
      lua_rawseti(L, 1, v4++);
    }
    while ( v4 < size );
  }
  lua_pushnil(L);
  lua_rawseti(L, 1, v4);
  return 1;
}

//----- (00755500) --------------------------------------------------------
int __cdecl tconcat(lua_State *L)
{
  int v1; // edi@1
  int v2; // eax@2
  int v3; // ebx@4
  bool i; // zf@4
  int v5; // eax@6
  int v6; // eax@10
  unsigned int lsep; // [sp+Ch] [bp-21Ch]@1
  const char *sep; // [sp+10h] [bp-218h]@1
  luaL_Buffer b; // [sp+14h] [bp-214h]@4
  unsigned int v11; // [sp+224h] [bp-4h]@1
  int v12; // [sp+228h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  sep = luaL_optlstring(L, 2, &byte_9788EB, &lsep);
  luaL_checktype(L, 1, 5);
  v1 = luaL_optinteger(L, 3, 1);
  if ( lua_type(L, 4) > 0 )
    v2 = luaL_checkinteger(L, 4);
  else
    v2 = luaL_len(L, 1);
  v3 = v2;
  luaL_buffinit(L, &b);
  for ( i = v1 == v3; v1 < v3; i = v1 == v3 )
  {
    lua_rawgeti(L, 1, v1);
    if ( !lua_isstring(L, -1) )
    {
      v5 = lua_type(L, -1);
      lua_typename(L, v5);
      luaL_error(L, "invalid value (%s) at index %d in table for 'concat'");
    }
    luaL_addvalue(&b);
    luaL_addlstring(&b, sep, lsep);
    ++v1;
  }
  if ( i )
  {
    lua_rawgeti(L, 1, v1);
    if ( !lua_isstring(L, -1) )
    {
      v6 = lua_type(L, -1);
      lua_typename(L, v6);
      luaL_error(L, "invalid value (%s) at index %d in table for 'concat'");
    }
    luaL_addvalue(&b);
  }
  luaL_pushresult(&b);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00755660) --------------------------------------------------------
int __cdecl pack(lua_State *L)
{
  signed int v1; // edi@1

  v1 = lua_gettop(L);
  lua_createtable(L, v1, 1);
  lua_pushinteger(L, v1);
  lua_setfield(L, -2, "n");
  if ( v1 > 0 )
  {
    lua_pushvalue(L, 1);
    lua_rawseti(L, -2, 1);
    lua_replace(L, 1);
    for ( ; v1 >= 2; --v1 )
      lua_rawseti(L, 1, v1);
  }
  return 1;
}

//----- (007556E0) --------------------------------------------------------
int __cdecl unpack(lua_State *L)
{
  int v1; // esi@1
  int v2; // eax@2
  int v3; // ebx@4
  int result; // eax@5
  int n; // [sp+Ch] [bp-4h]@6

  luaL_checktype(L, 1, 5);
  v1 = luaL_optinteger(L, 2, 1);
  if ( lua_type(L, 3) > 0 )
    v2 = luaL_checkinteger(L, 3);
  else
    v2 = luaL_len(L, 1);
  v3 = v2;
  if ( v1 <= v2 )
  {
    n = v2 - v1 + 1;
    if ( n <= 0 || !lua_checkstack(L, v2 - v1 + 1) )
      luaL_error(L, "too many results to unpack");
    lua_rawgeti(L, 1, v1);
    while ( v1 < v3 )
    {
      ++v1;
      lua_rawgeti(L, 1, v1);
    }
    result = n;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00755790) --------------------------------------------------------
void __cdecl auxsort(lua_State *L, int l, int u)
{
  int v3; // ebx@1
  int v4; // edi@1
  int v5; // edi@5
  int v6; // eax@5
  signed int v7; // kr00_4@11
  int v8; // edi@11
  int v9; // ebx@12
  int v10; // eax@12
  int v11; // ebx@17
  int v12; // eax@17
  int v13; // ebx@23
  int v14; // ebx@23
  int v15; // edi@23
  int v16; // edi@25
  int v17; // eax@25
  int v18; // edi@32
  int v19; // eax@32
  int v20; // edi@40
  int v21; // ebx@41
  int v22; // eax@41
  int v23; // edx@42
  int j; // [sp+8h] [bp-4h]@10
  int ja; // [sp+8h] [bp-4h]@23

  v3 = u;
  v4 = l;
  if ( l < u )
  {
    while ( 1 )
    {
      lua_rawgeti(L, 1, v4);
      lua_rawgeti(L, 1, v3);
      if ( lua_type(L, 2) )
      {
        lua_pushvalue(L, 2);
        lua_pushvalue(L, -2);
        lua_pushvalue(L, -4);
        lua_callk(L, 2, 1, 0, 0);
        v5 = lua_toboolean(L, -1);
        lua_settop(L, -2);
        v6 = v5;
        v4 = l;
      }
      else
      {
        v6 = lua_compare(L, -1, -2, 1);
      }
      if ( v6 )
      {
        lua_rawseti(L, 1, v4);
        lua_rawseti(L, 1, v3);
      }
      else
      {
        lua_settop(L, -3);
      }
      j = v3 - v4;
      if ( v3 - v4 == 1 )
        break;
      v7 = v4 + v3;
      v8 = (v4 + v3) / 2;
      lua_rawgeti(L, 1, v7 / 2);
      lua_rawgeti(L, 1, l);
      if ( lua_type(L, 2) )
      {
        lua_pushvalue(L, 2);
        lua_pushvalue(L, -3);
        lua_pushvalue(L, -3);
        lua_callk(L, 2, 1, 0, 0);
        v9 = lua_toboolean(L, -1);
        lua_settop(L, -2);
        v10 = v9;
        v3 = u;
      }
      else
      {
        v10 = lua_compare(L, -2, -1, 1);
      }
      if ( v10 )
      {
        lua_rawseti(L, 1, v8);
        lua_rawseti(L, 1, l);
      }
      else
      {
        lua_settop(L, -2);
        lua_rawgeti(L, 1, v3);
        if ( lua_type(L, 2) )
        {
          lua_pushvalue(L, 2);
          lua_pushvalue(L, -2);
          lua_pushvalue(L, -4);
          lua_callk(L, 2, 1, 0, 0);
          v11 = lua_toboolean(L, -1);
          lua_settop(L, -2);
          v12 = v11;
          v3 = u;
        }
        else
        {
          v12 = lua_compare(L, -1, -2, 1);
        }
        if ( v12 )
        {
          lua_rawseti(L, 1, v8);
          lua_rawseti(L, 1, v3);
        }
        else
        {
          lua_settop(L, -3);
        }
      }
      if ( j == 2 )
        break;
      lua_rawgeti(L, 1, v8);
      lua_pushvalue(L, -1);
      v13 = v3 - 1;
      lua_rawgeti(L, 1, v13);
      lua_rawseti(L, 1, v8);
      lua_rawseti(L, 1, v13);
      v14 = l;
      v15 = u - 1;
      ja = u - 1;
      while ( 1 )
      {
        while ( 1 )
        {
          ++v14;
          lua_rawgeti(L, 1, v14);
          if ( lua_type(L, 2) )
          {
            lua_pushvalue(L, 2);
            lua_pushvalue(L, -2);
            lua_pushvalue(L, -4);
            lua_callk(L, 2, 1, 0, 0);
            v16 = lua_toboolean(L, -1);
            lua_settop(L, -2);
            v17 = v16;
            v15 = ja;
          }
          else
          {
            v17 = lua_compare(L, -1, -2, 1);
          }
          if ( !v17 )
            break;
          if ( v14 >= u )
            luaL_error(L, "invalid order function for sorting");
          lua_settop(L, -2);
        }
        while ( 1 )
        {
          --v15;
          ja = v15;
          lua_rawgeti(L, 1, v15);
          if ( lua_type(L, 2) )
          {
            lua_pushvalue(L, 2);
            lua_pushvalue(L, -4);
            lua_pushvalue(L, -3);
            lua_callk(L, 2, 1, 0, 0);
            v18 = lua_toboolean(L, -1);
            lua_settop(L, -2);
            v19 = v18;
            v15 = ja;
          }
          else
          {
            v19 = lua_compare(L, -3, -1, 1);
          }
          if ( !v19 )
            break;
          if ( v15 <= l )
            luaL_error(L, "invalid order function for sorting");
          lua_settop(L, -2);
        }
        if ( v15 < v14 )
          break;
        lua_rawseti(L, 1, v14);
        lua_rawseti(L, 1, v15);
      }
      lua_settop(L, -4);
      lua_rawgeti(L, 1, u - 1);
      lua_rawgeti(L, 1, v14);
      lua_rawseti(L, 1, u - 1);
      lua_rawseti(L, 1, v14);
      v20 = l;
      if ( v14 - l >= u - v14 )
      {
        v22 = v14 + 1;
        v23 = v14 - 1;
        v21 = u;
        u = v23;
      }
      else
      {
        v21 = v14 - 1;
        v22 = l;
        l = v21 + 2;
        v20 = v21 + 2;
      }
      auxsort(L, v22, v21);
      if ( v20 >= u )
        break;
      v3 = u;
      v4 = l;
    }
  }
}

//----- (00755BA0) --------------------------------------------------------
int __cdecl sort(lua_State *L)
{
  int v1; // edi@1

  luaL_checktype(L, 1, 5);
  v1 = luaL_len(L, 1);
  luaL_checkstack(L, 40, &byte_9788EB);
  if ( lua_type(L, 2) > 0 )
    luaL_checktype(L, 2, 6);
  lua_settop(L, 2);
  auxsort(L, 1, v1);
  return 0;
}

//----- (00755C00) --------------------------------------------------------
int __cdecl luaopen_table(lua_State *L)
{
  lua_createtable(L, 0, 6);
  luaL_setfuncs(L, &tab_funcs, 0);
  return 1;
}

//----- (00755C30) --------------------------------------------------------
int __usercall auxresume<eax>(lua_State *L<edi>, lua_State *co<esi>, int narg<eax>)
{
  int v3; // ebx@1
  int result; // eax@2
  int v5; // eax@6
  int v6; // ebx@9

  v3 = narg;
  if ( lua_checkstack(co, narg) )
  {
    if ( lua_status(co) || lua_gettop(co) )
    {
      lua_xmove(L, co, v3);
      v5 = lua_resume(co, L, v3);
      if ( v5 && v5 != 1 )
      {
        lua_xmove(co, L, 1);
        result = -1;
      }
      else
      {
        v6 = lua_gettop(co);
        if ( lua_checkstack(L, v6 + 1) )
        {
          lua_xmove(co, L, v6);
          result = v6;
        }
        else
        {
          lua_settop(co, -1 - v6);
          lua_pushlstring(L, "too many results to resume", 0x1Au);
          result = -1;
        }
      }
    }
    else
    {
      lua_pushlstring(L, "cannot resume dead coroutine", 0x1Cu);
      result = -1;
    }
  }
  else
  {
    lua_pushlstring(L, "too many arguments to resume", 0x1Cu);
    result = -1;
  }
  return result;
}

//----- (00755D00) --------------------------------------------------------
int __cdecl luaB_coresume(lua_State *L)
{
  lua_State *v1; // esi@1
  int v2; // eax@3
  int v3; // esi@3
  int result; // eax@4

  v1 = lua_tothread(L, 1);
  if ( !v1 )
    luaL_argerror(L, 1, "coroutine expected");
  v2 = lua_gettop(L);
  v3 = auxresume(L, v1, v2 - 1);
  if ( v3 >= 0 )
  {
    lua_pushboolean(L, 1);
    lua_insert(L, -1 - v3);
    result = v3 + 1;
  }
  else
  {
    lua_pushboolean(L, 0);
    lua_insert(L, -2);
    result = 2;
  }
  return result;
}

//----- (00755D80) --------------------------------------------------------
int __cdecl luaB_auxwrap(lua_State *L)
{
  lua_State *v1; // esi@1
  int v2; // eax@1
  int result; // eax@1

  v1 = lua_tothread(L, -1001001);
  v2 = lua_gettop(L);
  result = auxresume(L, v1, v2);
  if ( result < 0 )
  {
    if ( lua_isstring(L, -1) )
    {
      luaL_where(L, 1);
      lua_insert(L, -2);
      lua_concat(L, 2);
    }
    lua_error(L);
  }
  return result;
}

//----- (00755DE0) --------------------------------------------------------
int __cdecl luaB_cocreate(lua_State *L)
{
  lua_State *v1; // edi@1

  luaL_checktype(L, 1, 6);
  v1 = lua_newthread(L);
  lua_pushvalue(L, 1);
  lua_xmove(L, v1, 1);
  return 1;
}

//----- (00755E20) --------------------------------------------------------
int __cdecl luaB_cowrap(lua_State *L)
{
  lua_State *v1; // edi@1

  luaL_checktype(L, 1, 6);
  v1 = lua_newthread(L);
  lua_pushvalue(L, 1);
  lua_xmove(L, v1, 1);
  lua_pushcclosure(L, luaB_auxwrap, 1);
  return 1;
}

//----- (00755E70) --------------------------------------------------------
int __cdecl luaB_yield(lua_State *L)
{
  int v1; // eax@1

  v1 = lua_gettop(L);
  return lua_yieldk(L, v1, 0, 0);
}

//----- (00755EA0) --------------------------------------------------------
int __cdecl luaB_costatus(lua_State *L)
{
  lua_State *v1; // eax@1
  lua_State *v2; // edi@1
  int v3; // eax@5
  const char *v5; // [sp-8h] [bp-78h]@4
  unsigned int v6; // [sp-4h] [bp-74h]@4
  lua_Debug ar; // [sp+8h] [bp-68h]@8
  unsigned int v8; // [sp+6Ch] [bp-4h]@1
  int v9; // [sp+70h] [bp+0h]@1

  v8 = (unsigned int)&v9 ^ __security_cookie;
  v1 = lua_tothread(L, 1);
  v2 = v1;
  if ( !v1 )
    luaL_argerror(L, 1, "coroutine expected");
  if ( L != v1 )
  {
    v3 = lua_status(v1);
    if ( v3 )
    {
      if ( v3 != 1 )
      {
LABEL_7:
        v6 = 4;
        v5 = "dead";
        goto LABEL_12;
      }
    }
    else
    {
      if ( lua_getstack(v2, 0, &ar) > 0 )
      {
        v6 = 6;
        v5 = "normal";
        goto LABEL_12;
      }
      if ( !lua_gettop(v2) )
        goto LABEL_7;
    }
    v6 = 9;
    v5 = "suspended";
    goto LABEL_12;
  }
  v6 = 7;
  v5 = "running";
LABEL_12:
  lua_pushlstring(L, v5, v6);
  return 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00755F50) --------------------------------------------------------
int __cdecl luaB_corunning(lua_State *L)
{
  int v1; // eax@1

  v1 = lua_pushthread(L);
  lua_pushboolean(L, v1);
  return 2;
}

//----- (00755F70) --------------------------------------------------------
int __cdecl luaopen_coroutine(lua_State *L)
{
  lua_createtable(L, 0, 6);
  luaL_setfuncs(L, &co_funcs, 0);
  return 1;
}

//----- (00755FA0) --------------------------------------------------------
void __usercall setprogdir(lua_State *L<esi>)
{
  DWORD v1; // eax@1
  int v2; // eax@3
  const char *v3; // eax@4
  char buff[261]; // [sp+0h] [bp-10Ch]@1
  unsigned int v5; // [sp+108h] [bp-4h]@1
  int v6; // [sp+10Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = GetModuleFileNameA(0, buff, 0x105u);
  if ( !v1 || v1 == 261 || (strrchr(buff, 92), !v2) )
    luaL_error(L, "unable to get ModuleFileName");
  *(_BYTE *)v2 = 0;
  v3 = lua_tolstring(L, -1, 0);
  luaL_gsub(L, v3, "!", buff);
  lua_remove(L, -2);
}
// A85C00: using guessed type int __security_cookie;

//----- (00756040) --------------------------------------------------------
void __usercall pusherror(lua_State *L<edi>)
{
  DWORD v1; // esi@1
  char buffer[128]; // [sp+4h] [bp-84h]@1
  unsigned int v3; // [sp+84h] [bp-4h]@1
  int v4; // [sp+88h] [bp+0h]@1

  v3 = (unsigned int)&v4 ^ __security_cookie;
  v1 = GetLastError();
  if ( FormatMessageA(0x1200u, 0, v1, 0, buffer, 0x80u, 0) )
    lua_pushstring(L, buffer);
  else
    lua_pushfstring(L, "system error %d\n");
}
// A85C00: using guessed type int __security_cookie;

//----- (007560C0) --------------------------------------------------------
void __usercall ll_addtoclib(lua_State *L<esi>, const char *path, void *plib)
{
  int v3; // eax@1

  lua_getfield(L, -1001000, "_CLIBS");
  lua_pushlightuserdata(L, plib);
  lua_pushvalue(L, -1);
  lua_setfield(L, -3, path);
  v3 = luaL_len(L, -2);
  lua_rawseti(L, -2, v3 + 1);
  lua_settop(L, -2);
}

//----- (00756110) --------------------------------------------------------
int __cdecl gctm(lua_State *L)
{
  signed int i; // esi@1
  void *v2; // eax@2

  for ( i = luaL_len(L, 1); i >= 1; --i )
  {
    lua_rawgeti(L, 1, i);
    v2 = lua_touserdata(L, -1);
    FreeLibrary((HMODULE)v2);
    lua_settop(L, -2);
  }
  return 0;
}

//----- (00756160) --------------------------------------------------------
int __usercall ll_loadfunc<eax>(lua_State *L<eax>, const char *path, const char *sym)
{
  lua_State *v3; // edi@1
  void *v4; // esi@1
  HINSTANCE__ *v5; // ebx@1
  HMODULE v6; // esi@2
  int result; // eax@5
  int (__cdecl *v8)(lua_State *); // eax@9

  v3 = L;
  lua_getfield(L, -1001000, "_CLIBS");
  lua_getfield(v3, -1, path);
  v4 = lua_touserdata(v3, -1);
  lua_settop(v3, -3);
  v5 = (HINSTANCE__ *)v4;
  if ( !v4 )
  {
    v6 = LoadLibraryExA(path, 0, 0);
    if ( !v6 )
      pusherror(v3);
    v5 = v6;
    if ( !v6 )
      return 1;
    ll_addtoclib(v3, path, v6);
  }
  if ( *sym == 42 )
  {
    lua_pushboolean(v3, 1);
    result = 0;
  }
  else
  {
    v8 = (int (__cdecl *)(lua_State *))GetProcAddress(v5, sym);
    if ( v8 )
    {
      lua_pushcclosure(v3, v8, 0);
      result = 0;
    }
    else
    {
      pusherror(v3);
      result = 2;
    }
  }
  return result;
}

//----- (00756220) --------------------------------------------------------
int __cdecl ll_loadlib(lua_State *L)
{
  const char *v1; // edi@1
  const char *v2; // eax@1
  int v3; // edi@1
  int result; // eax@2
  const char *v5; // eax@3

  v1 = luaL_checklstring(L, 1, 0);
  v2 = luaL_checklstring(L, 2, 0);
  v3 = ll_loadfunc(L, v1, v2);
  if ( v3 )
  {
    lua_pushnil(L);
    lua_insert(L, -2);
    v5 = "open";
    if ( v3 != 1 )
      v5 = "init";
    lua_pushstring(L, v5);
    result = 3;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00756290) --------------------------------------------------------
const char *__usercall searchpath<eax>(lua_State *L<esi>, const char *path<ecx>, const char *sep<edx>, const char *name, const char *dirsep)
{
  const char *v5; // edi@1
  char *i; // edi@3
  unsigned int v7; // eax@6
  unsigned int v8; // ebx@6
  const char *v9; // eax@9
  const char *v10; // edi@9
  _iobuf *v11; // eax@9
  const char *string; // [sp+8h] [bp-21Ch]@1
  const char *r; // [sp+Ch] [bp-218h]@1
  luaL_Buffer msg; // [sp+10h] [bp-214h]@1
  unsigned int v16; // [sp+220h] [bp-4h]@1
  int v17; // [sp+224h] [bp+0h]@1

  v16 = (unsigned int)&v17 ^ __security_cookie;
  v5 = sep;
  r = name;
  string = path;
  luaL_buffinit(L, &msg);
  if ( *v5 )
    r = luaL_gsub(L, name, v5, dirsep);
  while ( 1 )
  {
    for ( i = (char *)string; *i == 59; ++i )
      ;
    if ( !*i )
      break;
    strchr(i, 59);
    v8 = v7;
    if ( !v7 )
      v8 = (unsigned int)&i[strlen(i)];
    lua_pushlstring(L, i, v8 - (_DWORD)i);
    string = (const char *)v8;
    if ( !v8 )
      break;
    v9 = lua_tolstring(L, -1, 0);
    v10 = luaL_gsub(L, v9, "?", r);
    lua_remove(L, -2);
    v11 = fopen(v10, "r");
    if ( v11 )
    {
      fclose(v11);
      return v10;
    }
    lua_pushfstring(L, "\n\tno file '%s'");
    lua_remove(L, -2);
    luaL_addvalue(&msg);
  }
  luaL_pushresult(&msg);
  return 0;
}
// A85C00: using guessed type int __security_cookie;

//----- (007563F0) --------------------------------------------------------
int __cdecl ll_searchpath(lua_State *L)
{
  const char *v1; // ST28_4@1
  const char *v2; // edi@1
  const char *v3; // ebx@1
  const char *v4; // eax@1
  int result; // eax@2

  v1 = luaL_optlstring(L, 4, "\\", 0);
  v2 = luaL_optlstring(L, 3, ".", 0);
  v3 = luaL_checklstring(L, 2, 0);
  v4 = luaL_checklstring(L, 1, 0);
  if ( searchpath(L, v4, v3, v2, v1) )
  {
    result = 1;
  }
  else
  {
    lua_pushnil(L);
    lua_insert(L, -2);
    result = 2;
  }
  return result;
}

//----- (00756470) --------------------------------------------------------
int __cdecl searcher_Lua(lua_State *L)
{
  const char *v1; // ebx@1
  const char *v2; // eax@1
  const char *v3; // eax@3
  const char *v4; // edi@3
  int result; // eax@4

  v1 = luaL_checklstring(L, 1, 0);
  lua_getfield(L, -1001001, "path");
  v2 = lua_tolstring(L, -1, 0);
  if ( !v2 )
    luaL_error(L, "'package.%s' must be a string");
  v3 = searchpath(L, v1, v2, ".", "\\");
  v4 = v3;
  if ( v3 )
  {
    if ( luaL_loadfilex(L, v3, 0) )
    {
      lua_tolstring(L, -1, 0);
      lua_tolstring(L, 1, 0);
      luaL_error(L, "error loading module '%s' from file '%s':\n\t%s");
    }
    lua_pushstring(L, v4);
    result = 2;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00756540) --------------------------------------------------------
int __usercall loadfunc<eax>(lua_State *L<esi>, const char *modname<eax>, const char *filename)
{
  const char *v3; // edi@1
  char *v4; // eax@1
  const char *v5; // eax@2
  int result; // eax@2
  const char *v7; // eax@3

  v4 = (char *)luaL_gsub(L, modname, ".", "_");
  v3 = v4;
  strchr(v4, 45);
  if ( !v4
    || (lua_pushlstring(L, v3, v4 - v3),
        v5 = lua_pushfstring(L, "luaopen_%s"),
        result = ll_loadfunc(L, filename, v5),
        result == 2) )
  {
    v7 = lua_pushfstring(L, "luaopen_%s");
    result = ll_loadfunc(L, filename, v7);
  }
  return result;
}

//----- (007565C0) --------------------------------------------------------
int __cdecl searcher_C(lua_State *L)
{
  const char *v1; // ebx@1
  const char *v2; // eax@1
  const char *v3; // eax@3
  const char *v4; // edi@3
  int result; // eax@4

  v1 = luaL_checklstring(L, 1, 0);
  lua_getfield(L, -1001001, "cpath");
  v2 = lua_tolstring(L, -1, 0);
  if ( !v2 )
    luaL_error(L, "'package.%s' must be a string");
  v3 = searchpath(L, v1, v2, ".", "\\");
  v4 = v3;
  if ( v3 )
  {
    if ( loadfunc(L, v3, v1) )
    {
      lua_tolstring(L, -1, 0);
      lua_tolstring(L, 1, 0);
      luaL_error(L, "error loading module '%s' from file '%s':\n\t%s");
    }
    lua_pushstring(L, v4);
    result = 2;
  }
  else
  {
    result = 1;
  }
  return result;
}

//----- (00756690) --------------------------------------------------------
int __cdecl searcher_Croot(lua_State *L)
{
  int v1; // edi@1
  int result; // eax@1
  const char *v3; // ebx@2
  const char *v4; // eax@4
  const char *v5; // ebx@4
  int v6; // eax@5
  const char *name; // [sp+8h] [bp-4h]@2

  result = (int)luaL_checklstring(L, 1, 0);
  v1 = result;
  strchr((char *)result, 46);
  if ( result )
  {
    lua_pushlstring(L, (const char *)v1, result - v1);
    name = lua_tolstring(L, -1, 0);
    lua_getfield(L, -1001001, "cpath");
    v3 = lua_tolstring(L, -1, 0);
    if ( !v3 )
      luaL_error(L, "'package.%s' must be a string");
    v4 = searchpath(L, name, v3, ".", "\\");
    v5 = v4;
    if ( !v4 )
      return 1;
    v6 = loadfunc(L, v4, (const char *)v1);
    if ( v6 )
    {
      if ( v6 != 2 )
      {
        lua_tolstring(L, -1, 0);
        lua_tolstring(L, 1, 0);
        luaL_error(L, "error loading module '%s' from file '%s':\n\t%s");
      }
      lua_pushfstring(L, "\n\tno module '%s' in file '%s'");
      return 1;
    }
    lua_pushstring(L, v5);
    result = 2;
  }
  return result;
}

//----- (007567A0) --------------------------------------------------------
int __cdecl searcher_preload(lua_State *L)
{
  const char *v1; // edi@1

  v1 = luaL_checklstring(L, 1, 0);
  lua_getfield(L, -1001000, "_PRELOAD");
  lua_getfield(L, -1, v1);
  if ( !lua_type(L, -1) )
    lua_pushfstring(L, "\n\tno field package.preload['%s']");
  return 1;
}

//----- (00756800) --------------------------------------------------------
void __usercall findloader(lua_State *L<esi>, const char *name<edi>)
{
  int v2; // ebx@3
  luaL_Buffer msg; // [sp+0h] [bp-214h]@1
  unsigned int v4; // [sp+210h] [bp-4h]@1
  int v5; // [sp+214h] [bp+0h]@1

  v4 = (unsigned int)&v5 ^ __security_cookie;
  luaL_buffinit(L, &msg);
  lua_getfield(L, -1001001, "searchers");
  if ( lua_type(L, 3) != 5 )
    luaL_error(L, "'package.searchers' must be a table");
  v2 = 1;
  while ( 1 )
  {
    lua_rawgeti(L, 3, v2);
    if ( !lua_type(L, -1) )
    {
      lua_settop(L, -2);
      luaL_pushresult(&msg);
      lua_tolstring(L, -1, 0);
      luaL_error(L, "module '%s' not found:%s");
    }
    lua_pushstring(L, name);
    lua_callk(L, 1, 2, 0, 0);
    if ( lua_type(L, -2) == 6 )
      break;
    if ( lua_isstring(L, -2) )
    {
      lua_settop(L, -2);
      luaL_addvalue(&msg);
      ++v2;
    }
    else
    {
      lua_settop(L, -3);
      ++v2;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (00756910) --------------------------------------------------------
int __cdecl ll_require(lua_State *L)
{
  const char *v1; // edi@1

  v1 = luaL_checklstring(L, 1, 0);
  lua_settop(L, 1);
  lua_getfield(L, -1001000, "_LOADED");
  lua_getfield(L, 2, v1);
  if ( !lua_toboolean(L, -1) )
  {
    lua_settop(L, -2);
    findloader(L, v1);
    lua_pushstring(L, v1);
    lua_insert(L, -2);
    lua_callk(L, 2, 1, 0, 0);
    if ( lua_type(L, -1) )
      lua_setfield(L, 2, v1);
    lua_getfield(L, 2, v1);
    if ( !lua_type(L, -1) )
    {
      lua_pushboolean(L, 1);
      lua_pushvalue(L, -1);
      lua_setfield(L, 2, v1);
    }
  }
  return 1;
}

//----- (007569E0) --------------------------------------------------------
void __usercall setpath(lua_State *L<ecx>, const char *envname1<eax>, const char *fieldname, const char *envname2, const char *def)
{
  lua_State *v5; // esi@1
  char *v6; // edi@1
  int v7; // ebx@3
  const char *v8; // eax@4

  v5 = L;
  v6 = getenv(envname1);
  if ( (v6 || (v6 = getenv(envname2)) != 0)
    && (lua_getfield(v5, -1001000, "LUA_NOENV"), v7 = lua_toboolean(v5, -1), lua_settop(v5, -2), !v7) )
  {
    v8 = luaL_gsub(v5, v6, ";;", ";");
    luaL_gsub(v5, v8, byte_9DE7CC, def);
    lua_remove(v5, -2);
  }
  else
  {
    lua_pushstring(v5, def);
  }
  setprogdir(v5);
  lua_setfield(v5, -2, fieldname);
}

//----- (00756A90) --------------------------------------------------------
void __usercall createsearcherstable(lua_State *L<edi>)
{
  int v1; // esi@1
  int (__cdecl **v2)(lua_State *); // ebx@2

  lua_createtable(L, 4, 0);
  v1 = 0;
  if ( searchers[0] )
  {
    v2 = searchers;
    do
    {
      lua_pushvalue(L, -2);
      lua_pushcclosure(L, *v2, 1);
      ++v1;
      lua_rawseti(L, -2, v1);
      v2 = &searchers[v1];
    }
    while ( *v2 );
  }
}

//----- (00756AE0) --------------------------------------------------------
int __cdecl luaopen_package(lua_State *L)
{
  luaL_getsubtable(L, -1001000, "_CLIBS");
  lua_createtable(L, 0, 1);
  lua_pushcclosure(L, gctm, 0);
  lua_setfield(L, -2, "__gc");
  lua_setmetatable(L, -2);
  lua_createtable(L, 0, 2);
  luaL_setfuncs(L, &pk_funcs, 0);
  createsearcherstable(L);
  lua_setfield(L, -2, "searchers");
  setpath(L, "path", "LUA_PATH_5_2", "LUA_PATH", "!\\lua\\?.lua;!\\lua\\?\\init.lua;!\\?.lua;!\\?\\init.lua;.\\?.lua");
  setpath(L, "cpath", "LUA_CPATH_5_2", "LUA_CPATH", "!\\?.dll;!\\loadall.dll;.\\?.dll");
  lua_pushlstring(L, "\\\n;\n?\n!\n-\n", 0xAu);
  lua_setfield(L, -2, "config");
  luaL_getsubtable(L, -1001000, "_LOADED");
  lua_setfield(L, -2, "loaded");
  luaL_getsubtable(L, -1001000, "_PRELOAD");
  lua_setfield(L, -2, "preload");
  lua_rawgeti(L, -1001000, 2);
  lua_pushvalue(L, -2);
  luaL_setfuncs(L, &ll_funcs, 1);
  lua_settop(L, -2);
  return 1;
}

//----- (00756C20) --------------------------------------------------------
int __cdecl luaB_print(lua_State *L)
{
  int i; // edi@1
  const void *v2; // ebx@2
  _iobuf *v3; // eax@4
  _iobuf *v4; // eax@5
  _iobuf *v5; // eax@6
  _iobuf *v6; // eax@6
  int n; // [sp+Ch] [bp-8h]@1
  unsigned int l; // [sp+10h] [bp-4h]@2

  n = lua_gettop(L);
  lua_getglobal(L, "tostring");
  for ( i = 1; i <= n; ++i )
  {
    lua_pushvalue(L, -1);
    lua_pushvalue(L, i);
    lua_callk(L, 1, 1, 0, 0);
    v2 = lua_tolstring(L, -1, &l);
    if ( !v2 )
      luaL_error(L, "'tostring' must return a string to 'print'");
    if ( i > 1 )
    {
      v3 = __iob_func();
      fwrite("\t", 1u, 1u, v3 + 1);
    }
    v4 = __iob_func();
    fwrite(v2, 1u, l, v4 + 1);
    lua_settop(L, -2);
  }
  v5 = __iob_func();
  fwrite("\n", 1u, 1u, v5 + 1);
  v6 = __iob_func();
  fflush(v6 + 1);
  return 0;
}

//----- (00756D10) --------------------------------------------------------
int __cdecl luaB_tonumber(lua_State *L)
{
  double v1; // st7@2
  const char *v3; // eax@5
  char *v4; // esi@5
  int v5; // eax@5
  int v6; // ebx@5
  int v7; // eax@8
  int *v8; // esi@8
  int v9; // eax@15
  int v10; // eax@18
  int v11; // eax@19
  double n; // [sp+14h] [bp-1Ch]@13
  int e; // [sp+1Ch] [bp-14h]@5
  signed int base; // [sp+20h] [bp-10h]@5
  int l; // [sp+24h] [bp-Ch]@5
  int neg; // [sp+28h] [bp-8h]@2
  int digit; // [sp+2Ch] [bp-4h]@17

  if ( lua_type(L, 2) > 0 )
  {
    v3 = luaL_checklstring(L, 1, (unsigned int *)&l);
    v4 = (char *)v3;
    e = (int)&v3[l];
    v5 = luaL_checkinteger(L, 2);
    v6 = v5;
    base = v5;
    neg = 0;
    if ( v5 < 2 || v5 > 36 )
      luaL_argerror(L, 2, "base out of range");
    strspn(v4, " ");
    v8 = (int *)&v4[v7];
    if ( *(_BYTE *)v8 == 45 )
    {
      neg = 1;
    }
    else
    {
      if ( *(_BYTE *)v8 != 43 )
        goto LABEL_12;
    }
    v8 = (int *)((char *)v8 + 1);
LABEL_12:
    if ( !isalnum(*(_BYTE *)v8) )
      goto LABEL_4;
    n = 0.0;
    do
    {
      if ( isdigit(*(_BYTE *)v8) )
        v9 = *(_BYTE *)v8 - 48;
      else
        v9 = toupper(*(_BYTE *)v8) - 55;
      digit = v9;
      if ( v9 >= v6 )
        break;
      v10 = *((_BYTE *)v8 + 1);
      v8 = (int *)((char *)v8 + 1);
      n = (double)base * n + (double)digit;
    }
    while ( isalnum(v10) );
    strspn((char *)v8, " ");
    if ( (int *)((char *)v8 + v11) != (int *)e )
      goto LABEL_4;
    v1 = n;
    if ( neg )
      v1 = -n;
    goto LABEL_22;
  }
  v1 = lua_tonumberx(L, 1, &neg);
  if ( !neg )
  {
    luaL_checkany(L, 1);
LABEL_4:
    lua_pushnil(L);
    return 1;
  }
LABEL_22:
  lua_pushnumber(L, v1);
  return 1;
}

//----- (00756E80) --------------------------------------------------------
int __cdecl luaB_error(lua_State *L)
{
  int v1; // edi@1

  v1 = luaL_optinteger(L, 2, 1);
  lua_settop(L, 1);
  if ( lua_isstring(L, 1) )
  {
    if ( v1 > 0 )
    {
      luaL_where(L, v1);
      lua_pushvalue(L, 1);
      lua_concat(L, 2);
    }
  }
  lua_error(L);
}

//----- (00756EE0) --------------------------------------------------------
int __cdecl luaB_getmetatable(lua_State *L)
{
  int result; // eax@2

  luaL_checkany(L, 1);
  if ( lua_getmetatable(L, 1) )
  {
    luaL_getmetafield(L, 1, "__metatable");
    result = 1;
  }
  else
  {
    lua_pushnil(L);
    result = 1;
  }
  return result;
}

//----- (00756F30) --------------------------------------------------------
int __cdecl luaB_setmetatable(lua_State *L)
{
  int v1; // edi@1

  v1 = lua_type(L, 2);
  luaL_checktype(L, 1, 5);
  if ( v1 && v1 != 5 )
    luaL_argerror(L, 2, "nil or table expected");
  if ( luaL_getmetafield(L, 1, "__metatable") )
    luaL_error(L, "cannot change a protected metatable");
  lua_settop(L, 2);
  lua_setmetatable(L, 1);
  return 1;
}

//----- (00756FB0) --------------------------------------------------------
int __cdecl luaB_rawequal(lua_State *L)
{
  int v1; // eax@1

  luaL_checkany(L, 1);
  luaL_checkany(L, 2);
  v1 = lua_rawequal(L, 1, 2);
  lua_pushboolean(L, v1);
  return 1;
}

//----- (00756FF0) --------------------------------------------------------
int __cdecl luaB_rawlen(lua_State *L)
{
  int v1; // eax@1
  int v2; // eax@4

  v1 = lua_type(L, 1);
  if ( v1 != 5 && v1 != 4 )
    luaL_argerror(L, 1, "table or string expected");
  v2 = lua_rawlen(L, 1);
  lua_pushinteger(L, v2);
  return 1;
}

//----- (00757040) --------------------------------------------------------
int __cdecl luaB_rawget(lua_State *L)
{
  luaL_checktype(L, 1, 5);
  luaL_checkany(L, 2);
  lua_settop(L, 2);
  lua_rawget(L, 1);
  return 1;
}

//----- (00757080) --------------------------------------------------------
int __cdecl luaB_rawset(lua_State *L)
{
  luaL_checktype(L, 1, 5);
  luaL_checkany(L, 2);
  luaL_checkany(L, 3);
  lua_settop(L, 3);
  lua_rawset(L, 1);
  return 1;
}

//----- (007570C0) --------------------------------------------------------
int __cdecl luaB_collectgarbage(lua_State *L)
{
  int v1; // edi@1
  int v2; // eax@1
  int v3; // eax@1
  int v4; // edi@1
  int v5; // edi@2
  int result; // eax@4
  signed int v7; // edi@6
  signed int res; // [sp+10h] [bp-8h]@1

  v1 = optsnum[luaL_checkoption(L, 1, "collect", opts)];
  v2 = luaL_optinteger(L, 2, 0);
  v3 = lua_gc(L, v1, v2);
  v4 = v1 - 3;
  res = v3;
  if ( v4 )
  {
    v5 = v4 - 2;
    if ( v5 && v5 != 4 )
    {
      lua_pushinteger(L, v3);
      result = 1;
    }
    else
    {
      lua_pushboolean(L, v3);
      result = 1;
    }
  }
  else
  {
    v7 = lua_gc(L, 4, 0);
    lua_pushnumber(L, (double)v7 * 0.0009765625 + (double)res);
    lua_pushinteger(L, v7);
    result = 2;
  }
  return result;
}

//----- (00757180) --------------------------------------------------------
int __cdecl luaB_type(lua_State *L)
{
  int v1; // eax@1
  const char *v2; // eax@1

  luaL_checkany(L, 1);
  v1 = lua_type(L, 1);
  v2 = lua_typename(L, v1);
  lua_pushstring(L, v2);
  return 1;
}

//----- (007571B0) --------------------------------------------------------
int __cdecl luaB_next(lua_State *L)
{
  int result; // eax@2

  luaL_checktype(L, 1, 5);
  lua_settop(L, 2);
  if ( lua_next(L, 1) )
  {
    result = 2;
  }
  else
  {
    lua_pushnil(L);
    result = 1;
  }
  return result;
}

//----- (00757200) --------------------------------------------------------
int __cdecl luaB_pairs(lua_State *L)
{
  int result; // eax@2

  if ( luaL_getmetafield(L, 1, "__pairs") )
  {
    lua_pushvalue(L, 1);
    lua_callk(L, 1, 3, 0, 0);
    result = 3;
  }
  else
  {
    luaL_checktype(L, 1, 5);
    lua_pushcclosure(L, luaB_next, 0);
    lua_pushvalue(L, 1);
    lua_pushnil(L);
    result = 3;
  }
  return result;
}

//----- (00757270) --------------------------------------------------------
int __cdecl ipairsaux(lua_State *L)
{
  int v1; // edi@1

  v1 = luaL_checkinteger(L, 2) + 1;
  luaL_checktype(L, 1, 5);
  lua_pushinteger(L, v1);
  lua_rawgeti(L, 1, v1);
  return (lua_type(L, -1) != 0) + 1;
}

//----- (007572C0) --------------------------------------------------------
int __cdecl luaB_ipairs(lua_State *L)
{
  int result; // eax@2

  if ( luaL_getmetafield(L, 1, "__ipairs") )
  {
    lua_pushvalue(L, 1);
    lua_callk(L, 1, 3, 0, 0);
    result = 3;
  }
  else
  {
    luaL_checktype(L, 1, 5);
    lua_pushcclosure(L, ipairsaux, 0);
    lua_pushvalue(L, 1);
    lua_pushinteger(L, 0);
    result = 3;
  }
  return result;
}

//----- (00757330) --------------------------------------------------------
int __cdecl luaB_loadfile(lua_State *L)
{
  const char *v1; // ebx@1
  const char *v2; // ST40_4@1
  int v3; // esi@1
  int result; // eax@5

  v1 = luaL_optlstring(L, 1, 0, 0);
  v2 = luaL_optlstring(L, 2, 0, 0);
  v3 = lua_type(L, 3) != -1 ? 3 : 0;
  if ( luaL_loadfilex(L, v1, v2) )
  {
    lua_pushnil(L);
    lua_insert(L, -2);
    result = 2;
  }
  else
  {
    if ( v3 )
    {
      lua_pushvalue(L, v3);
      if ( !lua_setupvalue(L, -2, 1) )
        lua_settop(L, -2);
    }
    result = 1;
  }
  return result;
}

//----- (007573D0) --------------------------------------------------------
const char *__cdecl generic_reader(lua_State *L, void *ud, unsigned int *size)
{
  const char *result; // eax@2

  luaL_checkstack(L, 2, "too many nested functions");
  lua_pushvalue(L, 1);
  lua_callk(L, 0, 1, 0, 0);
  if ( lua_type(L, -1) )
  {
    if ( !lua_isstring(L, -1) )
      luaL_error(L, "reader function must return a string");
    lua_replace(L, 5);
    result = lua_tolstring(L, 5, size);
  }
  else
  {
    lua_settop(L, -2);
    *size = 0;
    result = 0;
  }
  return result;
}

//----- (00757460) --------------------------------------------------------
int __cdecl luaB_load(lua_State *L)
{
  const char *v1; // ebx@1
  int v2; // edi@1
  const char *v3; // eax@2
  int v4; // eax@2
  const char *v5; // ebx@3
  int result; // eax@8
  unsigned int l; // [sp+Ch] [bp-8h]@1
  const char *mode; // [sp+10h] [bp-4h]@1

  v1 = lua_tolstring(L, 1, &l);
  mode = luaL_optlstring(L, 3, "bt", 0);
  v2 = lua_type(L, 4) != -1 ? 4 : 0;
  if ( v1 )
  {
    v3 = luaL_optlstring(L, 2, v1, 0);
    v4 = luaL_loadbufferx(L, v1, l, v3, mode);
  }
  else
  {
    v5 = luaL_optlstring(L, 2, "=(load)", 0);
    luaL_checktype(L, 1, 6);
    lua_settop(L, 5);
    v4 = lua_load(L, generic_reader, 0, v5, mode);
  }
  if ( v4 )
  {
    lua_pushnil(L);
    lua_insert(L, -2);
    result = 2;
  }
  else
  {
    if ( v2 )
    {
      lua_pushvalue(L, v2);
      if ( !lua_setupvalue(L, -2, 1) )
        lua_settop(L, -2);
    }
    result = 1;
  }
  return result;
}

//----- (00757550) --------------------------------------------------------
int __cdecl dofilecont(lua_State *L)
{
  return lua_gettop(L) - 1;
}

//----- (00757570) --------------------------------------------------------
int __cdecl luaB_dofile(lua_State *L)
{
  const char *v1; // edi@1

  v1 = luaL_optlstring(L, 1, 0, 0);
  lua_settop(L, 1);
  if ( luaL_loadfilex(L, v1, 0) )
    lua_error(L);
  lua_callk(L, 0, -1, 0, dofilecont);
  return lua_gettop(L) - 1;
}

//----- (007575D0) --------------------------------------------------------
int __cdecl luaB_assert(lua_State *L)
{
  if ( !lua_toboolean(L, 1) )
  {
    luaL_optlstring(L, 2, "assertion failed!", 0);
    luaL_error(L, "%s");
  }
  return lua_gettop(L);
}

//----- (00757620) --------------------------------------------------------
int __cdecl luaB_select(lua_State *L)
{
  int v1; // ebx@1
  int result; // eax@3
  int v3; // eax@4
  int v4; // esi@4

  v1 = lua_gettop(L);
  if ( lua_type(L, 1) != 4 || *lua_tolstring(L, 1, 0) != 35 )
  {
    v3 = luaL_checkinteger(L, 1);
    v4 = v3;
    if ( v3 >= 0 )
    {
      if ( v3 > v1 )
        v4 = v1;
    }
    else
    {
      v4 = v1 + v3;
    }
    if ( v4 < 1 )
      luaL_argerror(L, 1, "index out of range");
    result = v1 - v4;
  }
  else
  {
    lua_pushinteger(L, v1 - 1);
    result = 1;
  }
  return result;
}

//----- (007576A0) --------------------------------------------------------
int __cdecl pcallcont(lua_State *L)
{
  int v1; // edi@1
  int result; // eax@2

  v1 = lua_getctx(L, 0);
  if ( lua_checkstack(L, 1) )
  {
    lua_pushboolean(L, v1 == 1);
    lua_replace(L, 1);
    result = lua_gettop(L);
  }
  else
  {
    lua_settop(L, 0);
    lua_pushboolean(L, 0);
    lua_pushstring(L, "stack overflow");
    result = 2;
  }
  return result;
}

//----- (00757710) --------------------------------------------------------
int __cdecl luaB_pcall(lua_State *L)
{
  int v1; // eax@1
  int v2; // edi@1
  int result; // eax@2

  luaL_checkany(L, 1);
  lua_pushnil(L);
  lua_insert(L, 1);
  v1 = lua_gettop(L);
  v2 = lua_pcallk(L, v1 - 2, -1, 0, 0, pcallcont);
  if ( lua_checkstack(L, 1) )
  {
    lua_pushboolean(L, v2 == 0);
    lua_replace(L, 1);
    result = lua_gettop(L);
  }
  else
  {
    lua_settop(L, 0);
    lua_pushboolean(L, 0);
    lua_pushstring(L, "stack overflow");
    result = 2;
  }
  return result;
}

//----- (007577B0) --------------------------------------------------------
int __cdecl luaB_xpcall(lua_State *L)
{
  int v1; // edi@1
  int v2; // edi@3
  int result; // eax@4

  v1 = lua_gettop(L);
  if ( v1 < 2 )
    luaL_argerror(L, 2, "value expected");
  lua_pushvalue(L, 1);
  lua_copy(L, 2, 1);
  lua_replace(L, 2);
  v2 = lua_pcallk(L, v1 - 2, -1, 1, 0, pcallcont);
  if ( lua_checkstack(L, 1) )
  {
    lua_pushboolean(L, v2 == 0);
    lua_replace(L, 1);
    result = lua_gettop(L);
  }
  else
  {
    lua_settop(L, 0);
    lua_pushboolean(L, 0);
    lua_pushstring(L, "stack overflow");
    result = 2;
  }
  return result;
}

//----- (00757870) --------------------------------------------------------
int __cdecl luaB_tostring(lua_State *L)
{
  luaL_checkany(L, 1);
  luaL_tolstring(L, 1, 0);
  return 1;
}

//----- (007578A0) --------------------------------------------------------
int __cdecl luaopen_base(lua_State *L)
{
  lua_rawgeti(L, -1001000, 2);
  lua_rawgeti(L, -1001000, 2);
  lua_setfield(L, -2, "_G");
  luaL_setfuncs(L, &base_funcs, 0);
  lua_pushlstring(L, "Lua 5.2", 7u);
  lua_setfield(L, -2, "_VERSION");
  return 1;
}

//----- (00757900) --------------------------------------------------------
void __cdecl luaM_toobig(lua_State *L)
{
  luaG_runerror(L, "memory allocation error: block too big");
}

//----- (00757920) --------------------------------------------------------
void *__cdecl luaM_realloc_(lua_State *L, void *block, unsigned int osize, unsigned int nsize)
{
  global_State *v4; // esi@1
  void *result; // eax@1

  v4 = L->l_G;
  result = (void *)v4->frealloc(v4->ud, block, osize, nsize);
  if ( !result )
  {
    if ( nsize )
    {
      if ( !v4->gcrunning || (luaC_fullgc(L, 1), (result = (void *)v4->frealloc(v4->ud, block, osize, nsize)) == 0) )
        luaD_throw(L, 4);
    }
  }
  v4->GCdebt += nsize - (block != 0 ? osize : 0);
  return result;
}

//----- (00757990) --------------------------------------------------------
void *__cdecl luaM_growaux_(lua_State *L, void *block, int *size, unsigned int size_elems, int limit, const char *what)
{
  int v6; // esi@1
  int v7; // ecx@1
  void *result; // eax@8

  v6 = limit;
  v7 = *size;
  if ( *size < limit / 2 )
  {
    v6 = 2 * v7;
    if ( 2 * v7 < 4 )
      v6 = 4;
  }
  else
  {
    if ( v7 >= limit )
      luaG_runerror(L, "too many %s (limit is %d)");
  }
  if ( v6 + 1 > 0xFFFFFFFD / size_elems )
    luaG_runerror(L, "memory allocation error: block too big");
  result = luaM_realloc_(L, block, size_elems * v7, size_elems * v6);
  *size = v6;
  return result;
}

//----- (00757A10) --------------------------------------------------------
void __usercall sub_757A10(LexState *ls<ecx>, int c)
{
  Mbuffer *v2; // esi@1
  unsigned int v3; // eax@1
  int v4; // edi@4
  void *v5; // eax@6

  v2 = ls->buff;
  v3 = v2->buffsize;
  if ( v2->n + 1 > v3 )
  {
    if ( v3 >= 0x7FFFFFFE )
      lexerror(ls, "lexical element too long", 0);
    v4 = 2 * v3;
    if ( 2 * v3 + 1 > 0xFFFFFFFD )
      luaM_toobig(ls->L);
    v5 = luaM_realloc_(ls->L, v2->buffer, v3, 2 * v3);
    v2->buffsize = v4;
    v2->buffer = (char *)v5;
  }
  v2->buffer[v2->n++] = c;
}

//----- (00757A80) --------------------------------------------------------
void __cdecl luaX_init(lua_State *L)
{
  signed int v1; // ebx@1
  TString *v2; // eax@2

  v1 = 0;
  do
  {
    v2 = luaS_new(L, luaX_tokens[v1]);
    BYTE5(v2->dummy.u) |= 0x20u;
    ++v1;
    BYTE6(v2->dummy.u) = v1;
  }
  while ( v1 < 22 );
}

//----- (00757AC0) --------------------------------------------------------
const char *__cdecl luaX_token2str(LexState *ls, int token)
{
  const char *result; // eax@3

  if ( token >= 257 )
  {
    result = *(const char **)&aPcall[4 * token];
    if ( token < 286 )
      result = luaO_pushfstring(ls->L, "'%s'");
  }
  else
  {
    if ( byte_9DEEA9[token] & 4 )
      result = luaO_pushfstring(ls->L, "'%c'");
    else
      result = luaO_pushfstring(ls->L, "char(%d)");
  }
  return result;
}

//----- (00757B30) --------------------------------------------------------
void __cdecl lexerror(LexState *ls, const char *msg, int token)
{
  char buff[60]; // [sp+Ch] [bp-3Ch]@1

  luaO_chunkid(buff, (const char *)&ls->source[1], 0x3Cu);
  luaO_pushfstring(ls->L, "%s:%d: %s");
  if ( token )
  {
    if ( token < 287 || token > 289 )
    {
      luaX_token2str(ls, token);
    }
    else
    {
      sub_757A10(ls, 0);
      luaO_pushfstring(ls->L, "'%s'");
    }
    luaO_pushfstring(ls->L, "%s near %s");
  }
  luaD_throw(ls->L, 3);
}

//----- (00757BD0) --------------------------------------------------------
void __cdecl luaX_syntaxerror(LexState *ls, const char *msg)
{
  lexerror(ls, msg, ls->t.token);
}

//----- (00757BF0) --------------------------------------------------------
TString *__cdecl luaX_newstring(LexState *ls, const char *str, unsigned int l)
{
  lua_State *v3; // esi@1
  TString *v4; // edi@1
  lua_TValue *v5; // eax@1
  lua_TValue *v6; // eax@1

  v3 = ls->L;
  v4 = luaS_newlstr(ls->L, str, l);
  v5 = v3->top;
  v3->top = v5 + 1;
  v5->u.i.v__.gc = (GCObject *)v4;
  v5->u.i.tt__ = BYTE4(v4->dummy.u) | 0x7FF7A540;
  v6 = luaH_set(v3, ls->fs->h, v3->top - 1);
  if ( v6->u.i.tt__ == 2146936064 )
  {
    v6->u.i.v__.gc = (GCObject *)1;
    v6->u.i.tt__ = 2146936065;
    if ( v3->l_G->GCdebt > 0 )
      luaC_step(v3);
  }
  --v3->top;
  return v4;
}

//----- (00757C70) --------------------------------------------------------
void __usercall inclinenumber(LexState *ls<esi>)
{
  Zio *v1; // eax@1
  unsigned int v2; // ecx@1
  int v3; // edi@1
  Zio *v4; // ecx@2
  const char *v5; // edx@2
  int v6; // eax@2
  Zio *v7; // eax@7
  unsigned int v8; // ecx@7
  Zio *v9; // ecx@8
  const char *v10; // edx@8
  int v11; // eax@8

  v1 = ls->z;
  v2 = v1->n;
  v3 = ls->current;
  --v1->n;
  if ( v2 )
  {
    v4 = ls->z;
    v5 = v4->p;
    v6 = (unsigned __int8)*v5;
    v4->p = v5 + 1;
  }
  else
  {
    v6 = luaZ_fill(ls->z);
  }
  ls->current = v6;
  if ( (v6 == 10 || v6 == 13) && v6 != v3 )
  {
    v7 = ls->z;
    v8 = v7->n--;
    if ( v8 )
    {
      v9 = ls->z;
      v10 = v9->p;
      v11 = (unsigned __int8)*v10;
      v9->p = v10 + 1;
    }
    else
    {
      v11 = luaZ_fill(ls->z);
    }
    ls->current = v11;
  }
  ++ls->linenumber;
  if ( ls->linenumber >= 2147483645 )
    lexerror(ls, "chunk has too many lines", ls->t.token);
}

//----- (00757D00) --------------------------------------------------------
void __cdecl luaX_setinput(lua_State *L, LexState *ls, Zio *z, TString *source, int firstchar)
{
  TString *v5; // eax@1

  ls->current = firstchar;
  ls->linenumber = 1;
  ls->lastline = 1;
  ls->decpoint = 46;
  ls->L = L;
  ls->lookahead.token = 286;
  ls->z = z;
  ls->fs = 0;
  ls->source = source;
  v5 = luaS_new(L, "_ENV");
  ls->envn = v5;
  BYTE5(v5->dummy.u) |= 0x20u;
  ls->buff->buffer = (char *)luaM_realloc_(ls->L, ls->buff->buffer, ls->buff->buffsize, 0x20u);
  ls->buff->buffsize = 32;
}

//----- (00757D80) --------------------------------------------------------
int __usercall check_next<eax>(LexState *ls<esi>, const char *set)
{
  int v2; // eax@2
  Zio *v3; // eax@3
  unsigned int v4; // ecx@3
  Zio *v5; // ecx@4
  const char *v6; // edx@4
  int v7; // eax@4
  int result; // eax@4

  if ( ls->current && (strchr((char *)set, ls->current), v2) )
  {
    sub_757A10(ls, ls->current);
    v3 = ls->z;
    v4 = v3->n--;
    if ( v4 )
    {
      v5 = ls->z;
      v6 = v5->p;
      v7 = (unsigned __int8)*v6;
      v5->p = v6 + 1;
      ls->current = v7;
      result = 1;
    }
    else
    {
      ls->current = luaZ_fill(ls->z);
      result = 1;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00757DF0) --------------------------------------------------------
void __usercall trydecpoint(LexState *ls<esi>, SemInfo *seminfo)
{
  char v2; // bl@1
  char v3; // dl@1
  Mbuffer *v4; // ecx@1
  unsigned int v5; // eax@1
  char *v6; // ecx@1
  Mbuffer *v7; // ecx@6
  unsigned int v8; // eax@6
  char v9; // dl@6
  char *v10; // ecx@6

  v2 = ls->decpoint;
  v3 = *localeconv()->decimal_point;
  v4 = ls->buff;
  ls->decpoint = v3;
  v5 = v4->n;
  v6 = v4->buffer;
  while ( v5 )
  {
    --v5;
    if ( v6[v5] == v2 )
      v6[v5] = v3;
  }
  if ( !luaO_str2d(ls->buff->buffer, ls->buff->n - 1, &seminfo->r) )
  {
    v7 = ls->buff;
    v8 = v7->n;
    v9 = ls->decpoint;
    v10 = v7->buffer;
    while ( v8 )
    {
      --v8;
      if ( v10[v8] == v9 )
        v10[v8] = 46;
    }
    lexerror(ls, "malformed number", 287);
  }
}

//----- (00757E70) --------------------------------------------------------
void __usercall read_numeral(LexState *ls<eax>, SemInfo *seminfo)
{
  LexState *v2; // esi@1
  int v3; // edi@1
  Zio *v4; // eax@1
  unsigned int v5; // ecx@1
  Zio *v6; // ecx@2
  int *v7; // edx@2
  int v8; // eax@2
  int v9; // eax@8
  Mbuffer *v10; // edi@9
  unsigned int v11; // eax@9
  lua_State *v12; // ecx@11
  int v13; // ebx@11
  Zio *v14; // eax@13
  unsigned int v15; // ecx@13
  Zio *v16; // ecx@14
  int *v17; // edx@14
  int v18; // eax@14
  int v19; // eax@17
  Zio *v20; // eax@18
  unsigned int v21; // ecx@18
  Zio *v22; // ecx@19
  int *v23; // edx@19
  int v24; // eax@19
  int v25; // ecx@22
  Mbuffer *v26; // edi@24
  unsigned int v27; // eax@24
  int v28; // ebx@26
  void *v29; // eax@27
  Zio *v30; // eax@28
  unsigned int v31; // ecx@28
  Zio *v32; // ecx@29
  const char *v33; // edx@29
  int v34; // eax@29
  Mbuffer *v35; // ecx@32
  unsigned int v36; // eax@32
  char v37; // dl@32
  char *v38; // ecx@32
  int v39; // [sp+8h] [bp-8h]@9
  int v40; // [sp+8h] [bp-8h]@22
  char *expo; // [sp+Ch] [bp-4h]@1

  v2 = ls;
  v3 = ls->current;
  expo = "Ee";
  sub_757A10(ls, ls->current);
  v4 = v2->z;
  v5 = v4->n--;
  if ( v5 )
  {
    v6 = v2->z;
    v7 = (int *)v6->p;
    v8 = *(_BYTE *)v7;
    v6->p = (char *)v7 + 1;
  }
  else
  {
    v8 = luaZ_fill(v2->z);
  }
  v2->current = v8;
  if ( v3 == 48 && check_next(v2, "Xx") )
    expo = "Pp";
  while ( 1 )
  {
    if ( v2->current )
    {
      strchr(expo, v2->current);
      if ( v9 )
      {
        v10 = v2->buff;
        v11 = v10->buffsize;
        v39 = v2->current;
        if ( v10->n + 1 > v11 )
        {
          if ( v11 >= 0x7FFFFFFE )
            goto LABEL_31;
          v12 = v2->L;
          v13 = 2 * v11;
          if ( 2 * v11 + 1 > 0xFFFFFFFD )
            goto LABEL_40;
          v10->buffer = (char *)luaM_realloc_(v12, v10->buffer, v11, 2 * v11);
          v10->buffsize = v13;
        }
        v10->buffer[v10->n++] = v39;
        v14 = v2->z;
        v15 = v14->n--;
        if ( v15 )
        {
          v16 = v2->z;
          v17 = (int *)v16->p;
          v18 = *(_BYTE *)v17;
          v16->p = (char *)v17 + 1;
        }
        else
        {
          v18 = luaZ_fill(v2->z);
        }
        v2->current = v18;
        if ( v18 )
        {
          strchr("+-", v18);
          if ( v19 )
          {
            sub_757A10(v2, v2->current);
            v20 = v2->z;
            v21 = v20->n--;
            if ( v21 )
            {
              v22 = v2->z;
              v23 = (int *)v22->p;
              v24 = *(_BYTE *)v23;
              v22->p = (char *)v23 + 1;
            }
            else
            {
              v24 = luaZ_fill(v2->z);
            }
            v2->current = v24;
          }
        }
      }
    }
    v25 = v2->current;
    v40 = v2->current;
    if ( !(byte_9DEEA9[v2->current] & 0x10) )
    {
      if ( v25 != 46 )
        break;
    }
    v26 = v2->buff;
    v27 = v26->buffsize;
    if ( v26->n + 1 > v27 )
    {
      if ( v27 >= 0x7FFFFFFE )
LABEL_31:
        lexerror(v2, "lexical element too long", 0);
      v28 = 2 * v27;
      if ( 2 * v27 + 1 > 0xFFFFFFFD )
      {
        v12 = v2->L;
LABEL_40:
        luaM_toobig(v12);
      }
      v29 = luaM_realloc_(v2->L, v26->buffer, v27, 2 * v27);
      LOBYTE(v25) = v40;
      v26->buffer = (char *)v29;
      v26->buffsize = v28;
    }
    v26->buffer[v26->n++] = v25;
    v30 = v2->z;
    v31 = v30->n--;
    if ( v31 )
    {
      v32 = v2->z;
      v33 = v32->p;
      v34 = (unsigned __int8)*v33;
      v32->p = v33 + 1;
      v2->current = v34;
    }
    else
    {
      v2->current = luaZ_fill(v2->z);
    }
  }
  sub_757A10(v2, 0);
  v35 = v2->buff;
  v36 = v35->n;
  v37 = v2->decpoint;
  v38 = v35->buffer;
  while ( v36 )
  {
    --v36;
    if ( v38[v36] == 46 )
      v38[v36] = v37;
  }
  if ( !luaO_str2d(v2->buff->buffer, v2->buff->n - 1, &seminfo->r) )
    trydecpoint(v2, seminfo);
}

//----- (007580D0) --------------------------------------------------------
int __usercall skip_sep<eax>(LexState *ls<edi>)
{
  int v1; // esi@1
  Zio *v2; // eax@1
  unsigned int v3; // ecx@1
  Zio *v4; // ecx@2
  const char *v5; // edx@2
  int v6; // eax@2
  Mbuffer *v7; // esi@5
  unsigned int v8; // eax@5
  int v9; // ebx@7
  Zio *v10; // eax@9
  unsigned int v11; // ecx@9
  Zio *v12; // ecx@10
  const char *v13; // edx@10
  int v14; // eax@10
  int result; // eax@15
  int v16; // [sp+4h] [bp-Ch]@1
  int v17; // [sp+8h] [bp-8h]@5
  int count; // [sp+Ch] [bp-4h]@1

  v1 = ls->current;
  count = 0;
  v16 = ls->current;
  sub_757A10(ls, ls->current);
  v2 = ls->z;
  v3 = v2->n--;
  if ( v3 )
  {
    v4 = ls->z;
    v5 = v4->p;
    v6 = (unsigned __int8)*v5;
    v4->p = v5 + 1;
  }
  else
  {
    v6 = luaZ_fill(ls->z);
  }
  ls->current = v6;
  if ( v6 == 61 )
  {
    do
    {
      v7 = ls->buff;
      v8 = v7->buffsize;
      v17 = ls->current;
      if ( v7->n + 1 > v8 )
      {
        if ( v8 >= 0x7FFFFFFE )
          lexerror(ls, "lexical element too long", 0);
        v9 = 2 * v8;
        if ( 2 * v8 + 1 > 0xFFFFFFFD )
          luaM_toobig(ls->L);
        v7->buffer = (char *)luaM_realloc_(ls->L, v7->buffer, v8, 2 * v8);
        v7->buffsize = v9;
      }
      v7->buffer[v7->n++] = v17;
      v10 = ls->z;
      v11 = v10->n--;
      if ( v11 )
      {
        v12 = ls->z;
        v13 = v12->p;
        v14 = (unsigned __int8)*v13;
        v12->p = v13 + 1;
      }
      else
      {
        v14 = luaZ_fill(ls->z);
      }
      ++count;
      ls->current = v14;
    }
    while ( v14 == 61 );
    v1 = v16;
  }
  if ( ls->current == v1 )
    result = count;
  else
    result = -1 - count;
  return result;
}

//----- (007581E0) --------------------------------------------------------
void __usercall read_long_string(LexState *ls<eax>, SemInfo *seminfo, int sep)
{
  LexState *v3; // esi@1
  Zio *v4; // eax@1
  unsigned int v5; // ecx@1
  Zio *v6; // ecx@2
  int *v7; // edx@2
  int v8; // eax@2
  int v9; // ecx@7
  Zio *v10; // eax@9
  unsigned int v11; // ecx@9
  Zio *v12; // ecx@10
  int *v13; // edx@10
  int v14; // eax@10
  Mbuffer *v15; // edi@11
  unsigned int v16; // eax@11
  int v17; // ebx@13
  Mbuffer *v18; // edi@18
  unsigned int v19; // eax@18
  int v20; // ebx@20
  void *v21; // eax@21
  Zio *v22; // eax@23
  unsigned int v23; // ecx@23
  Zio *v24; // ecx@24
  const char *v25; // edx@24
  int v26; // eax@24
  const char *v27; // eax@26
  int v28; // [sp+Ch] [bp-4h]@7

  v3 = ls;
  sub_757A10(ls, ls->current);
  v4 = v3->z;
  v5 = v4->n--;
  if ( v5 )
  {
    v6 = v3->z;
    v7 = (int *)v6->p;
    v8 = *(_BYTE *)v7;
    v6->p = (char *)v7 + 1;
  }
  else
  {
    v8 = luaZ_fill(v3->z);
  }
  v3->current = v8;
  if ( v8 == 10 || v8 == 13 )
    inclinenumber(v3);
  while ( 1 )
  {
    v9 = v3->current;
    v28 = v3->current;
    switch ( v3->current + 1 )
    {
      case 94:
        if ( skip_sep(v3) != sep )
          continue;
        sub_757A10(v3, v3->current);
        v10 = v3->z;
        v11 = v10->n--;
        if ( v11 )
        {
          v12 = v3->z;
          v13 = (int *)v12->p;
          v14 = *(_BYTE *)v13;
          v12->p = (char *)v13 + 1;
        }
        else
        {
          v14 = luaZ_fill(v3->z);
        }
        v3->current = v14;
        if ( seminfo )
          LODWORD(seminfo->r) = luaX_newstring(v3, &v3->buff->buffer[sep + 2], v3->buff->n - 2 * sep - 4);
        return;
      case 11:
      case 14:
        v15 = v3->buff;
        v16 = v15->buffsize;
        if ( v15->n + 1 <= v16 )
          goto LABEL_15;
        if ( v16 >= 0x7FFFFFFE )
          goto LABEL_33;
        v17 = 2 * v16;
        if ( 2 * v16 + 1 > 0xFFFFFFFD )
          luaM_toobig(v3->L);
        v15->buffer = (char *)luaM_realloc_(v3->L, v15->buffer, v16, 2 * v16);
        v15->buffsize = v17;
LABEL_15:
        v15->buffer[v15->n++] = 10;
        inclinenumber(v3);
        if ( !seminfo )
          v3->buff->n = 0;
        break;
      default:
        if ( seminfo )
        {
          v18 = v3->buff;
          v19 = v18->buffsize;
          if ( v18->n + 1 > v19 )
          {
            if ( v19 >= 0x7FFFFFFE )
LABEL_33:
              lexerror(v3, "lexical element too long", 0);
            v20 = 2 * v19;
            if ( 2 * v19 + 1 > 0xFFFFFFFD )
              luaM_toobig(v3->L);
            v21 = luaM_realloc_(v3->L, v18->buffer, v19, 2 * v19);
            LOBYTE(v9) = v28;
            v18->buffer = (char *)v21;
            v18->buffsize = v20;
          }
          v18->buffer[v18->n++] = v9;
        }
        v22 = v3->z;
        v23 = v22->n--;
        if ( v23 )
        {
          v24 = v3->z;
          v25 = v24->p;
          v26 = (unsigned __int8)*v25;
          v24->p = v25 + 1;
          v3->current = v26;
        }
        else
        {
          v3->current = luaZ_fill(v3->z);
        }
        break;
      case 0:
        v27 = "unfinished long string";
        if ( !seminfo )
          v27 = "unfinished long comment";
        lexerror(v3, v27, 286);
        return;
    }
  }
}

//----- (00758470) --------------------------------------------------------
void __cdecl escerror(LexState *ls, int *c, int n, const char *msg)
{
  LexState *v4; // edi@1
  int v5; // ebx@1
  int v6; // ecx@2
  Mbuffer *v7; // esi@3
  unsigned int v8; // eax@3
  int v9; // edi@5
  void *v10; // eax@6
  char v11; // [sp+Ch] [bp-4h]@2

  v4 = ls;
  v5 = 0;
  ls->buff->n = 0;
  sub_757A10(ls, 92);
  if ( n > 0 )
  {
    do
    {
      v6 = c[v5];
      v11 = c[v5];
      if ( v6 == -1 )
        break;
      v7 = v4->buff;
      v8 = v7->buffsize;
      if ( v7->n + 1 > v8 )
      {
        if ( v8 >= 0x7FFFFFFE )
          lexerror(v4, "lexical element too long", 0);
        v9 = 2 * v8;
        if ( 2 * v8 + 1 > 0xFFFFFFFD )
          luaM_toobig(ls->L);
        v10 = luaM_realloc_(ls->L, v7->buffer, v8, 2 * v8);
        LOBYTE(v6) = v11;
        v7->buffsize = v9;
        v4 = ls;
        v7->buffer = (char *)v10;
      }
      v7->buffer[v7->n++] = v6;
      ++v5;
    }
    while ( v5 < n );
  }
  lexerror(v4, msg, 289);
}

//----- (00758520) --------------------------------------------------------
int __usercall readhexaesc<eax>(LexState *ls<esi>)
{
  int v1; // ebx@1
  signed int v2; // edi@1
  Zio *v3; // eax@2
  unsigned int v4; // ecx@2
  Zio *v5; // ecx@3
  const char *v6; // edx@3
  int v7; // eax@3
  bool v8; // zf@5
  int c[3]; // [sp+8h] [bp-10h]@1
  unsigned int v11; // [sp+14h] [bp-4h]@1
  int v12; // [sp+18h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = 0;
  c[0] = 120;
  v2 = 1;
  do
  {
    v3 = ls->z;
    v4 = v3->n--;
    if ( v4 )
    {
      v5 = ls->z;
      v6 = v5->p;
      v7 = (unsigned __int8)*v6;
      v5->p = v6 + 1;
    }
    else
    {
      v7 = luaZ_fill(ls->z);
    }
    ls->current = v7;
    v8 = (byte_9DEEA9[v7] & 0x10) == 0;
    c[v2] = v7;
    if ( v8 )
      escerror(ls, c, v2 + 1, "hexadecimal digit expected");
    ++v2;
    v1 = luaO_hexavalue(v7) + 16 * v1;
  }
  while ( v2 < 3 );
  return v1;
}
// A85C00: using guessed type int __security_cookie;

//----- (007585B0) --------------------------------------------------------
int __usercall readdecesc<eax>(LexState *ls<esi>)
{
  int v1; // edi@1
  int v2; // ebx@1
  int v3; // eax@2
  Zio *v4; // eax@3
  unsigned int v5; // ecx@3
  Zio *v6; // ecx@4
  const char *v7; // edx@4
  int v8; // eax@4
  int c[3]; // [sp+8h] [bp-10h]@3
  unsigned int v11; // [sp+14h] [bp-4h]@1
  int v12; // [sp+18h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v1 = 0;
  v2 = 0;
  do
  {
    v3 = ls->current;
    if ( !(byte_9DEEA9[ls->current] & 2) )
      break;
    v1 = v3 + 10 * v1 - 48;
    c[v2] = v3;
    v4 = ls->z;
    v5 = v4->n--;
    if ( v5 )
    {
      v6 = ls->z;
      v7 = v6->p;
      v8 = (unsigned __int8)*v7;
      v6->p = v7 + 1;
    }
    else
    {
      v8 = luaZ_fill(ls->z);
    }
    ++v2;
    ls->current = v8;
  }
  while ( v2 < 3 );
  if ( v1 > 255 )
    escerror(ls, c, v2, "decimal escape too large");
  return v1;
}
// A85C00: using guessed type int __security_cookie;

//----- (00758650) --------------------------------------------------------
void __usercall read_string(LexState *ls<eax>, int del, SemInfo *seminfo)
{
  LexState *v3; // esi@1
  Zio *v4; // eax@1
  unsigned int v5; // ecx@1
  Zio *v6; // ecx@2
  int *v7; // edx@2
  int v8; // eax@2
  int v9; // ecx@5
  Zio *v10; // eax@6
  unsigned int v11; // ecx@6
  Zio *v12; // ecx@7
  int *v13; // edx@7
  int v14; // eax@7
  Zio *v15; // eax@19
  unsigned int v16; // ecx@19
  Zio *v17; // ecx@20
  const char *v18; // edx@20
  int v19; // eax@20
  Zio *v20; // eax@23
  unsigned int v21; // ecx@23
  Zio *v22; // ecx@24
  int *v23; // edx@24
  int v24; // eax@24
  Zio *v25; // eax@29
  unsigned int v26; // ecx@29
  Zio *v27; // ecx@30
  const char *v28; // edx@30
  int v29; // eax@30
  Mbuffer *v30; // edi@37
  unsigned int v31; // eax@37
  int v32; // ebx@39
  Mbuffer *v33; // edi@42
  unsigned int v34; // eax@42
  int v35; // ebx@44
  void *v36; // eax@45
  Zio *v37; // eax@46
  unsigned int v38; // ecx@46
  Zio *v39; // ecx@47
  int *v40; // edx@47
  int v41; // eax@47
  Zio *v42; // eax@51
  unsigned int v43; // ecx@51
  Zio *v44; // ecx@52
  int *v45; // edx@52
  int v46; // eax@52
  int c; // [sp+4h] [bp-4h]@5
  char ca; // [sp+4h] [bp-4h]@10

  v3 = ls;
  sub_757A10(ls, ls->current);
  v4 = v3->z;
  v5 = v4->n--;
  if ( v5 )
  {
    v6 = v3->z;
    v7 = (int *)v6->p;
    v8 = *(_BYTE *)v7;
    v6->p = (char *)v7 + 1;
  }
  else
  {
    v8 = luaZ_fill(v3->z);
  }
  v3->current = v8;
  while ( v3->current != del )
  {
    v9 = v3->current;
    c = v3->current;
    switch ( v3->current + 1 )
    {
      case 93:
        v10 = v3->z;
        v11 = v10->n--;
        if ( v11 )
        {
          v12 = v3->z;
          v13 = (int *)v12->p;
          v14 = *(_BYTE *)v13;
          v12->p = (char *)v13 + 1;
        }
        else
        {
          v14 = luaZ_fill(v3->z);
        }
        v3->current = v14;
        switch ( v14 + 1 )
        {
          case 98:
            ca = 7;
            goto read_save;
          case 99:
            ca = 8;
            goto read_save;
          case 103:
            ca = 12;
            goto read_save;
          case 111:
            ca = 10;
            goto read_save;
          case 115:
            ca = 13;
            goto read_save;
          case 117:
            ca = 9;
            goto read_save;
          case 119:
            ca = 11;
            goto read_save;
          case 121:
            LOBYTE(v14) = readhexaesc(v3);
            goto LABEL_18;
          case 35:
          case 40:
          case 93:
LABEL_18:
            ca = v14;
read_save:
            v15 = v3->z;
            v16 = v15->n--;
            if ( v16 )
            {
              v17 = v3->z;
              v18 = v17->p;
              v19 = (unsigned __int8)*v18;
              v17->p = v18 + 1;
              v3->current = v19;
            }
            else
            {
              v3->current = luaZ_fill(v3->z);
            }
            goto only_save;
          case 11:
          case 14:
            inclinenumber(v3);
            ca = 10;
            goto only_save;
          case 123:
            v20 = v3->z;
            v21 = v20->n--;
            if ( v21 )
            {
              v22 = v3->z;
              v23 = (int *)v22->p;
              v24 = *(_BYTE *)v23;
              v22->p = (char *)v23 + 1;
            }
            else
            {
              v24 = luaZ_fill(v3->z);
            }
            v3->current = v24;
            while ( byte_9DEEA9[v3->current] & 8 )
            {
              if ( v3->current == 10 || v3->current == 13 )
              {
                inclinenumber(v3);
              }
              else
              {
                v25 = v3->z;
                v26 = v25->n--;
                if ( v26 )
                {
                  v27 = v3->z;
                  v28 = v27->p;
                  v29 = (unsigned __int8)*v28;
                  v27->p = v28 + 1;
                  v3->current = v29;
                }
                else
                {
                  v3->current = luaZ_fill(v3->z);
                }
              }
            }
            continue;
          default:
            if ( !(byte_9DEEA9[v14] & 2) )
              escerror(v3, &v3->current, 1, "invalid escape sequence");
            ca = readdecesc(v3);
only_save:
            v30 = v3->buff;
            v31 = v30->buffsize;
            if ( v30->n + 1 <= v31 )
              goto LABEL_41;
            if ( v31 >= 0x7FFFFFFE )
              goto $LN74_13;
            v32 = 2 * v31;
            if ( 2 * v31 + 1 > 0xFFFFFFFD )
              luaM_toobig(v3->L);
            v30->buffer = (char *)luaM_realloc_(v3->L, v30->buffer, v31, 2 * v31);
            v30->buffsize = v32;
LABEL_41:
            v30->buffer[v30->n++] = ca;
            break;
          case 0:
            continue;
        }
        break;
      default:
        v33 = v3->buff;
        v34 = v33->buffsize;
        if ( v33->n + 1 > v34 )
        {
          if ( v34 >= 0x7FFFFFFE )
$LN74_13:
            lexerror(v3, "lexical element too long", 0);
          v35 = 2 * v34;
          if ( 2 * v34 + 1 > 0xFFFFFFFD )
            luaM_toobig(v3->L);
          v36 = luaM_realloc_(v3->L, v33->buffer, v34, 2 * v34);
          LOBYTE(v9) = c;
          v33->buffer = (char *)v36;
          v33->buffsize = v35;
        }
        v33->buffer[v33->n++] = v9;
        v37 = v3->z;
        v38 = v37->n--;
        if ( v38 )
        {
          v39 = v3->z;
          v40 = (int *)v39->p;
          v41 = *(_BYTE *)v40;
          v39->p = (char *)v40 + 1;
        }
        else
        {
          v41 = luaZ_fill(v3->z);
        }
        v3->current = v41;
        break;
      case 0:
        lexerror(v3, "unfinished string", 286);
        return;
      case 11:
      case 14:
        lexerror(v3, "unfinished string", 289);
        return;
    }
  }
  sub_757A10(v3, v3->current);
  v42 = v3->z;
  v43 = v42->n--;
  if ( v43 )
  {
    v44 = v3->z;
    v45 = (int *)v44->p;
    v46 = *(_BYTE *)v45;
    v44->p = (char *)v45 + 1;
  }
  else
  {
    v46 = luaZ_fill(v3->z);
  }
  v3->current = v46;
  LODWORD(seminfo->r) = luaX_newstring(v3, (const char *)v3->buff->buffer + 1, v3->buff->n - 2);
}

//----- (00758AD0) --------------------------------------------------------
int __usercall llex<eax>(LexState *ls<eax>, SemInfo *seminfo)
{
  LexState *v2; // esi@1
  int v3; // eax@1
  Zio *v4; // eax@4
  unsigned int v5; // ecx@4
  Zio *v6; // ecx@5
  const char *v7; // edx@5
  int v8; // eax@5
  Zio *v9; // eax@7
  unsigned int v10; // ecx@7
  Zio *v11; // ecx@8
  int *v12; // edx@8
  int v13; // eax@8
  Zio *v14; // eax@11
  unsigned int v15; // ecx@11
  Zio *v16; // ecx@12
  int *v17; // edx@12
  int v18; // eax@12
  int v19; // eax@15
  Zio *v20; // eax@20
  unsigned int v21; // ecx@20
  Zio *v22; // ecx@21
  int *v23; // edx@21
  int v24; // eax@21
  int v25; // edi@25
  Zio *v26; // eax@26
  unsigned int v27; // ecx@26
  Zio *v28; // ecx@27
  int *v29; // edx@27
  int v30; // eax@27
  int result; // eax@28
  int v32; // eax@29
  Zio *v33; // eax@34
  unsigned int v34; // ecx@34
  Zio *v35; // ecx@35
  int *v36; // edx@35
  int v37; // eax@35
  Zio *v38; // eax@39
  unsigned int v39; // ecx@39
  Zio *v40; // ecx@40
  const char *v41; // edx@40
  int v42; // eax@40
  Zio *v43; // eax@42
  unsigned int v44; // ecx@42
  Zio *v45; // ecx@43
  int *v46; // edx@43
  int v47; // eax@43
  Zio *v48; // eax@47
  unsigned int v49; // ecx@47
  Zio *v50; // ecx@48
  const char *v51; // edx@48
  int v52; // eax@48
  Zio *v53; // eax@50
  unsigned int v54; // ecx@50
  Zio *v55; // ecx@51
  int *v56; // edx@51
  int v57; // eax@51
  Zio *v58; // eax@55
  unsigned int v59; // ecx@55
  Zio *v60; // ecx@56
  const char *v61; // edx@56
  int v62; // eax@56
  Zio *v63; // eax@58
  unsigned int v64; // ecx@58
  Zio *v65; // ecx@59
  int *v66; // edx@59
  int v67; // eax@59
  Zio *v68; // eax@63
  unsigned int v69; // ecx@63
  Zio *v70; // ecx@64
  const char *v71; // edx@64
  int v72; // eax@64
  Zio *v73; // eax@66
  unsigned int v74; // ecx@66
  Zio *v75; // ecx@67
  int *v76; // edx@67
  int v77; // eax@67
  Zio *v78; // eax@71
  unsigned int v79; // ecx@71
  Zio *v80; // ecx@72
  const char *v81; // edx@72
  int v82; // eax@72
  Zio *v83; // eax@75
  unsigned int v84; // ecx@75
  Zio *v85; // ecx@76
  int *v86; // edx@76
  int v87; // eax@76
  TString *v88; // eax@86
  unsigned __int8 v89; // al@87
  Zio *v90; // eax@90
  unsigned int v91; // ecx@90
  Zio *v92; // ecx@91
  const char *v93; // edx@91
  int v94; // eax@91

  v2 = ls;
  ls->buff->n = 0;
  v3 = ls->current + 1;
  while ( 2 )
  {
    switch ( v3 )
    {
      case 11:
      case 14:
        inclinenumber(v2);
        goto LABEL_24;
      case 10:
      case 12:
      case 13:
      case 33:
        v4 = v2->z;
        v5 = v4->n--;
        if ( v5 )
        {
          v6 = v2->z;
          v7 = v6->p;
          v8 = (unsigned __int8)*v7;
          v6->p = v7 + 1;
          v2->current = v8;
        }
        else
        {
          v2->current = luaZ_fill(v2->z);
        }
        goto LABEL_24;
      case 46:
        v9 = v2->z;
        v10 = v9->n--;
        if ( v10 )
        {
          v11 = v2->z;
          v12 = (int *)v11->p;
          v13 = *(_BYTE *)v12;
          v11->p = (char *)v12 + 1;
        }
        else
        {
          v13 = luaZ_fill(v2->z);
        }
        v2->current = v13;
        if ( v13 != 45 )
          return 45;
        v14 = v2->z;
        v15 = v14->n--;
        if ( v15 )
        {
          v16 = v2->z;
          v17 = (int *)v16->p;
          v18 = *(_BYTE *)v17;
          v16->p = (char *)v17 + 1;
        }
        else
        {
          v18 = luaZ_fill(v2->z);
        }
        v2->current = v18;
        if ( v18 != 91 || (v19 = skip_sep(v2), v2->buff->n = 0, v19 < 0) )
        {
          if ( v2->current != 10 )
          {
            do
            {
              if ( v2->current == 13 || v2->current == -1 )
                break;
              v20 = v2->z;
              v21 = v20->n--;
              if ( v21 <= 0 )
              {
                v24 = luaZ_fill(v2->z);
              }
              else
              {
                v22 = v2->z;
                v23 = (int *)v22->p;
                v24 = *(_BYTE *)v23;
                v22->p = (char *)v23 + 1;
              }
              v2->current = v24;
            }
            while ( v24 != 10 );
          }
        }
        else
        {
          read_long_string(v2, 0, v19);
          v2->buff->n = 0;
        }
LABEL_24:
        v3 = v2->current + 1;
        if ( (unsigned int)v3 <= 0x7F )
          continue;
LABEL_25:
        v25 = v2->current;
        if ( byte_9DEEA9[v2->current] & 1 )
        {
          do
          {
            sub_757A10(v2, v2->current);
            v26 = v2->z;
            v27 = v26->n--;
            if ( v27 )
            {
              v28 = v2->z;
              v29 = (int *)v28->p;
              v30 = *(_BYTE *)v29;
              v28->p = (char *)v29 + 1;
            }
            else
            {
              v30 = luaZ_fill(v2->z);
            }
            v2->current = v30;
          }
          while ( byte_9DEEA9[v30] & 3 );
          v88 = luaX_newstring(v2, v2->buff->buffer, v2->buff->n);
          LODWORD(seminfo->r) = v88;
          if ( BYTE4(v88->dummy.u) == 4 && (v89 = BYTE6(v88->dummy.u)) != 0 )
            result = v89 + 256;
          else
            result = 288;
        }
        else
        {
          v90 = v2->z;
          v91 = v90->n--;
          if ( v91 )
          {
            v92 = v2->z;
            v93 = v92->p;
            v94 = (unsigned __int8)*v93;
            v92->p = v93 + 1;
            v2->current = v94;
            result = v25;
          }
          else
          {
            v2->current = luaZ_fill(v2->z);
            result = v25;
          }
        }
        return result;
      default:
        goto LABEL_25;
      case 92:
        v32 = skip_sep(v2);
        if ( v32 < 0 )
        {
          if ( v32 != -1 )
            lexerror(v2, "invalid long string delimiter", 289);
          result = 91;
        }
        else
        {
          read_long_string(v2, seminfo, v32);
          result = 289;
        }
        return result;
      case 62:
        v33 = v2->z;
        v34 = v33->n--;
        if ( v34 )
        {
          v35 = v2->z;
          v36 = (int *)v35->p;
          v37 = *(_BYTE *)v36;
          v35->p = (char *)v36 + 1;
        }
        else
        {
          v37 = luaZ_fill(v2->z);
        }
        v2->current = v37;
        if ( v37 == 61 )
        {
          v38 = v2->z;
          v39 = v38->n--;
          if ( v39 )
          {
            v40 = v2->z;
            v41 = v40->p;
            v42 = (unsigned __int8)*v41;
            v40->p = v41 + 1;
            v2->current = v42;
            result = 281;
          }
          else
          {
            v2->current = luaZ_fill(v2->z);
            result = 281;
          }
        }
        else
        {
          result = 61;
        }
        return result;
      case 61:
        v43 = v2->z;
        v44 = v43->n--;
        if ( v44 )
        {
          v45 = v2->z;
          v46 = (int *)v45->p;
          v47 = *(_BYTE *)v46;
          v45->p = (char *)v46 + 1;
        }
        else
        {
          v47 = luaZ_fill(v2->z);
        }
        v2->current = v47;
        if ( v47 == 61 )
        {
          v48 = v2->z;
          v49 = v48->n--;
          if ( v49 )
          {
            v50 = v2->z;
            v51 = v50->p;
            v52 = (unsigned __int8)*v51;
            v50->p = v51 + 1;
            v2->current = v52;
            result = 283;
          }
          else
          {
            v2->current = luaZ_fill(v2->z);
            result = 283;
          }
        }
        else
        {
          result = 60;
        }
        return result;
      case 63:
        v53 = v2->z;
        v54 = v53->n--;
        if ( v54 )
        {
          v55 = v2->z;
          v56 = (int *)v55->p;
          v57 = *(_BYTE *)v56;
          v55->p = (char *)v56 + 1;
        }
        else
        {
          v57 = luaZ_fill(v2->z);
        }
        v2->current = v57;
        if ( v57 == 61 )
        {
          v58 = v2->z;
          v59 = v58->n--;
          if ( v59 )
          {
            v60 = v2->z;
            v61 = v60->p;
            v62 = (unsigned __int8)*v61;
            v60->p = v61 + 1;
            v2->current = v62;
            result = 282;
          }
          else
          {
            v2->current = luaZ_fill(v2->z);
            result = 282;
          }
        }
        else
        {
          result = 62;
        }
        return result;
      case 127:
        v63 = v2->z;
        v64 = v63->n--;
        if ( v64 )
        {
          v65 = v2->z;
          v66 = (int *)v65->p;
          v67 = *(_BYTE *)v66;
          v65->p = (char *)v66 + 1;
        }
        else
        {
          v67 = luaZ_fill(v2->z);
        }
        v2->current = v67;
        if ( v67 == 61 )
        {
          v68 = v2->z;
          v69 = v68->n--;
          if ( v69 )
          {
            v70 = v2->z;
            v71 = v70->p;
            v72 = (unsigned __int8)*v71;
            v70->p = v71 + 1;
            v2->current = v72;
            result = 284;
          }
          else
          {
            v2->current = luaZ_fill(v2->z);
            result = 284;
          }
        }
        else
        {
          result = 126;
        }
        return result;
      case 59:
        v73 = v2->z;
        v74 = v73->n--;
        if ( v74 )
        {
          v75 = v2->z;
          v76 = (int *)v75->p;
          v77 = *(_BYTE *)v76;
          v75->p = (char *)v76 + 1;
        }
        else
        {
          v77 = luaZ_fill(v2->z);
        }
        v2->current = v77;
        if ( v77 == 58 )
        {
          v78 = v2->z;
          v79 = v78->n--;
          if ( v79 )
          {
            v80 = v2->z;
            v81 = v80->p;
            v82 = (unsigned __int8)*v81;
            v80->p = v81 + 1;
            v2->current = v82;
            result = 285;
          }
          else
          {
            v2->current = luaZ_fill(v2->z);
            result = 285;
          }
        }
        else
        {
          result = 58;
        }
        return result;
      case 35:
      case 40:
        read_string(v2, v2->current, seminfo);
        return 289;
      case 47:
        sub_757A10(v2, v2->current);
        v83 = v2->z;
        v84 = v83->n--;
        if ( v84 )
        {
          v85 = v2->z;
          v86 = (int *)v85->p;
          v87 = *(_BYTE *)v86;
          v85->p = (char *)v86 + 1;
        }
        else
        {
          v87 = luaZ_fill(v2->z);
        }
        v2->current = v87;
        if ( check_next(v2, ".") )
        {
          result = (check_next(v2, ".") != 0) + 279;
        }
        else
        {
          if ( byte_9DEEA9[v2->current] & 2 )
          {
LABEL_82:
            read_numeral(v2, seminfo);
            result = 287;
          }
          else
          {
            result = 46;
          }
        }
        return result;
      case 49:
      case 50:
      case 51:
      case 52:
      case 53:
      case 54:
      case 55:
      case 56:
      case 57:
      case 58:
        goto LABEL_82;
      case 0:
        return 286;
    }
  }
}

//----- (00759110) --------------------------------------------------------
void __cdecl luaX_next(LexState *ls)
{
  int v1; // edx@2
  int v2; // ecx@2
  int v3; // edx@2

  ls->lastline = ls->linenumber;
  if ( ls->lookahead.token == 286 )
  {
    ls->t.token = llex(ls, &ls->t.seminfo);
  }
  else
  {
    v1 = *(&ls->lookahead.token + 1);
    ls->t.token = ls->lookahead.token;
    v2 = LODWORD(ls->lookahead.seminfo.r);
    *(&ls->t.token + 1) = v1;
    v3 = HIDWORD(ls->lookahead.seminfo.r);
    LODWORD(ls->t.seminfo.r) = v2;
    HIDWORD(ls->t.seminfo.r) = v3;
    ls->lookahead.token = 286;
  }
}

//----- (00759160) --------------------------------------------------------
int __cdecl luaX_lookahead(LexState *ls)
{
  int result; // eax@1

  result = llex(ls, &ls->lookahead.seminfo);
  ls->lookahead.token = result;
  return result;
}

//----- (00759180) --------------------------------------------------------
void __usercall error_expected(LexState *ls<esi>, int token<eax>)
{
  const char *v2; // eax@2

  luaX_token2str(ls, token);
  v2 = luaO_pushfstring(ls->L, "%s expected");
  luaX_syntaxerror(ls, v2);
}

//----- (007591B0) --------------------------------------------------------
void __usercall errorlimit(FuncState *fs<esi>, int limit, const char *what)
{
  lua_State *v3; // edi@1
  const char *v4; // eax@3

  v3 = fs->ls->L;
  if ( fs->f->linedefined )
    luaO_pushfstring(v3, "function at line %d");
  v4 = luaO_pushfstring(v3, "too many %s (limit is %d) in %s");
  luaX_syntaxerror(fs->ls, v4);
}

//----- (00759200) --------------------------------------------------------
int __usercall testnext<eax>(LexState *ls<eax>, int c)
{
  int result; // eax@2

  if ( ls->t.token == c )
  {
    luaX_next(ls);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00759220) --------------------------------------------------------
TString *__usercall str_checkname<eax>(LexState *ls<eax>)
{
  TString *v1; // edi@3

  if ( ls->t.token != 288 )
    error_expected(ls, 288);
  v1 = (TString *)LODWORD(ls->t.seminfo.r);
  luaX_next(ls);
  return v1;
}

//----- (00759250) --------------------------------------------------------
void __usercall codestring(LexState *ls<ecx>, expdesc *e<esi>, TString *s<eax>)
{
  int v3; // eax@1

  v3 = luaK_stringK(ls->fs, s);
  e->t = -1;
  e->f = -1;
  e->k = 4;
  *(_DWORD *)&e->u.ind.idx = v3;
}

//----- (00759270) --------------------------------------------------------
int __cdecl registerlocalvar(LexState *ls, TString *varname)
{
  FuncState *v2; // ecx@1
  Proto *v3; // edi@1
  int v4; // esi@1
  int *v5; // ebx@1
  void *v6; // eax@2
  int v7; // eax@4
  int result; // eax@9
  FuncState *v9; // [sp+Ch] [bp-4h]@1

  v2 = ls->fs;
  v3 = v2->f;
  v4 = v2->f->sizelocvars;
  v5 = &v2->f->sizelocvars;
  v9 = ls->fs;
  if ( v2->nlocvars + 1 > v4 )
  {
    v6 = luaM_growaux_(ls->L, v3->locvars, v5, 0xCu, 32767, "local variables");
    v2 = v9;
    v3->locvars = (LocVar *)v6;
  }
  if ( v4 < *v5 )
  {
    v7 = v4;
    do
    {
      v3->locvars[v7].varname = 0;
      ++v4;
      ++v7;
    }
    while ( v4 < *v5 );
  }
  v3->locvars[v2->nlocvars].varname = varname;
  if ( BYTE5(varname->dummy.u) & 3 && v3->marked & 4 )
  {
    luaC_barrier_(ls->L, (GCObject *)&v3->next, (GCObject *)varname);
    v2 = v9;
  }
  LOWORD(result) = v2->nlocvars;
  v2->nlocvars = result + 1;
  return (signed __int16)result;
}

//----- (00759320) --------------------------------------------------------
void __usercall new_localvar(LexState *ls<ebx>, TString *name<eax>)
{
  FuncState *v2; // esi@1
  Dyndata *v3; // edi@1
  __int16 reg; // [sp+8h] [bp-4h]@1

  v2 = ls->fs;
  v3 = ls->dyd;
  reg = registerlocalvar(ls, name);
  if ( v3->actvar.n - v2->firstlocal + 1 > 200 )
    errorlimit(v2, 200, "local variables");
  if ( v3->actvar.n + 2 > v3->actvar.size )
    v3->actvar.arr = (Vardesc *)luaM_growaux_(
                                  ls->L,
                                  v3->actvar.arr,
                                  &v3->actvar.size,
                                  2u,
                                  2147483645,
                                  "local variables");
  v3->actvar.arr[v3->actvar.n++].idx = reg;
}

//----- (007593A0) --------------------------------------------------------
void __usercall adjustlocalvars(LexState *ls<eax>, int nvars<edx>)
{
  FuncState *v2; // eax@1
  int v3; // ecx@2

  v2 = ls->fs;
  for ( v2->nactvar += nvars; nvars; v2->f->locvars[v2->ls->dyd->actvar.arr[v2->firstlocal + v3].idx].startpc = v2->pc )
    v3 = v2->nactvar - nvars--;
}

//----- (007593E0) --------------------------------------------------------
void __usercall removevars(FuncState *fs<eax>, int tolevel<edx>)
{
  LexState *v2; // esi@2
  int v3; // edi@2
  char v4; // cl@2

  for ( fs->ls->dyd->actvar.n += tolevel - fs->nactvar;
        fs->nactvar > tolevel;
        fs->f->locvars[v2->dyd->actvar.arr[fs->firstlocal + (unsigned __int8)v4].idx].endpc = v3 )
  {
    v2 = fs->ls;
    v3 = fs->pc;
    v4 = fs->nactvar - 1;
    fs->nactvar = v4;
  }
}

//----- (00759440) --------------------------------------------------------
int __usercall searchupvalue<eax>(FuncState *fs<edi>, TString *name)
{
  Upvaldesc *v2; // ebx@1
  int v3; // esi@1
  int result; // eax@4

  v2 = fs->f->upvalues;
  v3 = 0;
  if ( fs->nups )
  {
    while ( !luaS_eqstr(v2[v3].name, name) )
    {
      ++v3;
      if ( v3 >= fs->nups )
        goto LABEL_4;
    }
    result = v3;
  }
  else
  {
LABEL_4:
    result = -1;
  }
  return result;
}

//----- (00759480) --------------------------------------------------------
int __usercall newupvalue<eax>(FuncState *fs<eax>, TString *name, expdesc *v)
{
  FuncState *v3; // esi@1
  Proto *v4; // edi@1
  int v5; // ebx@1
  int v6; // eax@1
  int result; // eax@10

  v3 = fs;
  v4 = fs->f;
  v5 = fs->f->sizeupvalues;
  v6 = fs->nups + 1;
  if ( v6 > 255 )
    errorlimit(v3, 255, "upvalues");
  if ( v6 > v5 )
    v4->upvalues = (Upvaldesc *)luaM_growaux_(v3->ls->L, v4->upvalues, &v3->f->sizeupvalues, 8u, 255, "upvalues");
  for ( ; v5 < v4->sizeupvalues; ++v5 )
    v4->upvalues[v5].name = 0;
  v4->upvalues[v3->nups].instack = v->k == 7;
  v4->upvalues[v3->nups].idx = LOBYTE(v->u.ind.idx);
  v4->upvalues[v3->nups].name = name;
  if ( BYTE5(name->dummy.u) & 3 && v4->marked & 4 )
    luaC_barrier_(v3->ls->L, (GCObject *)&v4->next, (GCObject *)name);
  LOBYTE(result) = v3->nups;
  v3->nups = result + 1;
  return (unsigned __int8)result;
}

//----- (00759550) --------------------------------------------------------
int __usercall searchvar<eax>(FuncState *fs<esi>, TString *n<ebx>)
{
  int v2; // edi@1
  int result; // eax@4

  v2 = fs->nactvar - 1;
  if ( v2 < 0 )
  {
LABEL_4:
    result = -1;
  }
  else
  {
    while ( !luaS_eqstr(n, fs->f->locvars[fs->ls->dyd->actvar.arr[v2 + fs->firstlocal].idx].varname) )
    {
      --v2;
      if ( v2 < 0 )
        goto LABEL_4;
    }
    result = v2;
  }
  return result;
}

//----- (00759590) --------------------------------------------------------
int __cdecl singlevaraux(FuncState *fs, TString *n, expdesc *var, int base)
{
  int result; // eax@2
  int v5; // eax@3
  BlockCnt *i; // edi@5
  int v7; // eax@9

  if ( !fs )
    return 0;
  v5 = searchvar(fs, n);
  if ( v5 < 0 )
  {
    v7 = searchupvalue(fs, n);
    if ( v7 < 0 )
    {
      result = singlevaraux(fs->prev, n, var, 0);
      if ( !result )
        return result;
      v7 = newupvalue(fs, n, var);
    }
    *(_DWORD *)&var->u.ind.idx = v7;
    var->t = -1;
    var->f = -1;
    var->k = 8;
    result = 8;
  }
  else
  {
    var->t = -1;
    var->f = -1;
    var->k = 7;
    *(_DWORD *)&var->u.ind.idx = v5;
    if ( !base )
    {
      for ( i = fs->bl; i->nactvar > v5; i = i->previous )
        ;
      i->upval = 1;
    }
    result = 7;
  }
  return result;
}

//----- (00759640) --------------------------------------------------------
void __usercall singlevar(LexState *ls<ecx>, expdesc *var<ebx>)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@3
  int v4; // eax@4
  TString *s; // [sp+8h] [bp-20h]@3
  expdesc key; // [sp+Ch] [bp-1Ch]@4
  unsigned int v7; // [sp+24h] [bp-4h]@1
  int v8; // [sp+28h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = ls;
  if ( ls->t.token != 288 )
    error_expected(ls, 288);
  s = (TString *)LODWORD(ls->t.seminfo.r);
  luaX_next(ls);
  v3 = v2->fs;
  if ( !singlevaraux(v2->fs, s, var, 1) )
  {
    singlevaraux(v3, v2->envn, var, 1);
    v4 = luaK_stringK(v2->fs, s);
    key.t = -1;
    key.f = -1;
    key.k = 4;
    *(_DWORD *)&key.u.ind.idx = v4;
    luaK_indexed(v3, var, &key);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (007596E0) --------------------------------------------------------
void __usercall adjust_assign(LexState *ls<eax>, int nvars<edx>, expdesc *e<ecx>, int nexps)
{
  FuncState *v4; // edi@1
  expkind v5; // eax@1
  int v6; // esi@1
  int v7; // ebx@6
  int v8; // esi@7

  v4 = ls->fs;
  v5 = e->k;
  v6 = nvars - nexps;
  if ( e->k == 12 || v5 == 13 )
  {
    v8 = v6 + 1;
    if ( v8 < 0 )
      v8 = 0;
    luaK_setreturns(v4, e, v8);
    if ( v8 > 1 )
      luaK_reserveregs(v4, v8 - 1);
  }
  else
  {
    if ( v5 )
      luaK_exp2nextreg(v4, e);
    if ( v6 > 0 )
    {
      v7 = v4->freereg;
      luaK_reserveregs(v4, v6);
      luaK_nil(v4, v7, v6);
    }
  }
}

//----- (00759750) --------------------------------------------------------
void __usercall closegoto(LexState *ls<eax>, Labeldesc *label<ebx>, int g)
{
  LexState *v3; // edi@1
  Dyndata *v4; // esi@1
  FuncState *v5; // ecx@1
  int v6; // eax@1
  const char *v7; // eax@2
  int v8; // ecx@4
  int v9; // edx@5
  Labeldesc *v10; // eax@6
  TString *v11; // edi@6
  int v12; // eax@6

  v3 = ls;
  v4 = ls->dyd;
  v5 = ls->fs;
  v6 = (int)&v4->gt.arr[g];
  if ( *(_BYTE *)(v6 + 12) < (unsigned __int8)label->nactvar )
  {
    v7 = luaO_pushfstring(v3->L, "<goto %s> at line %d jumps into the scope of local '%s'");
    v3->t.token = 0;
    luaX_syntaxerror(v3, v7);
  }
  luaK_patchlist(v5, *(_DWORD *)(v6 + 4), label->pc);
  v8 = g;
  if ( g < v4->gt.n - 1 )
  {
    v9 = g;
    do
    {
      v10 = v4->gt.arr;
      v11 = v10[v9 + 1].name;
      v12 = (int)&v10[v9];
      *(_DWORD *)v12 = v11;
      *(_DWORD *)(v12 + 4) = *(_DWORD *)(v12 + 20);
      *(_DWORD *)(v12 + 8) = *(_DWORD *)(v12 + 24);
      *(_DWORD *)(v12 + 12) = *(_DWORD *)(v12 + 28);
      ++v8;
      ++v9;
    }
    while ( v8 < v4->gt.n - 1 );
  }
  --v4->gt.n;
}

//----- (00759820) --------------------------------------------------------
int __usercall findlabel<eax>(LexState *ls<ebx>, int g)
{
  Dyndata *v2; // esi@1
  TString **v3; // eax@1
  int v4; // ecx@1
  int v5; // ecx@2
  Labeldesc *v6; // edi@4
  TString *v7; // edx@4
  int v8; // edi@4
  int result; // eax@6
  unsigned __int8 v10; // al@7
  Dyndata *v11; // esi@11
  int v12; // eax@11
  const char *v13; // eax@12
  int v14; // ecx@14
  int v15; // edx@15
  Labeldesc *v16; // eax@16
  TString *v17; // edi@16
  int v18; // eax@16
  BlockCnt *v19; // [sp+8h] [bp-14h]@1
  int gt; // [sp+10h] [bp-Ch]@1
  int i; // [sp+14h] [bp-8h]@1
  int v22; // [sp+18h] [bp-4h]@2

  v2 = ls->dyd;
  v3 = (TString **)&v2->gt.arr[g];
  v4 = ls->fs->bl->firstlabel;
  v19 = ls->fs->bl;
  gt = (int)&v2->gt.arr[g];
  i = v4;
  if ( v4 >= v2->label.n )
  {
LABEL_6:
    result = 0;
  }
  else
  {
    v5 = 16 * v4;
    v22 = v5;
    while ( 1 )
    {
      v6 = v2->label.arr;
      v7 = *(TString **)((char *)&v6->name + v5);
      v8 = (int)((char *)v6 + v5);
      if ( luaS_eqstr(v7, *v3) )
        break;
      v22 += 16;
      ++i;
      if ( i >= v2->label.n )
        goto LABEL_6;
      v5 = v22;
      v3 = (TString **)gt;
    }
    v10 = *(_BYTE *)(v8 + 12);
    if ( *(_BYTE *)(gt + 12) > v10 && (v19->upval || v2->label.n > v19->firstlabel) )
      luaK_patchclose(ls->fs, *(_DWORD *)(gt + 4), v10);
    v11 = ls->dyd;
    v12 = (int)&v11->gt.arr[g];
    if ( *(_BYTE *)(v12 + 12) < *(_BYTE *)(v8 + 12) )
    {
      v13 = luaO_pushfstring(ls->L, "<goto %s> at line %d jumps into the scope of local '%s'");
      ls->t.token = 0;
      luaX_syntaxerror(ls, v13);
    }
    luaK_patchlist(ls->fs, *(_DWORD *)(v12 + 4), *(_DWORD *)(v8 + 4));
    v14 = g;
    if ( g < v11->gt.n - 1 )
    {
      v15 = g;
      do
      {
        v16 = v11->gt.arr;
        v17 = v16[v15 + 1].name;
        v18 = (int)&v16[v15];
        *(_DWORD *)v18 = v17;
        *(_DWORD *)(v18 + 4) = *(_DWORD *)(v18 + 20);
        *(_DWORD *)(v18 + 8) = *(_DWORD *)(v18 + 24);
        *(_DWORD *)(v18 + 12) = *(_DWORD *)(v18 + 28);
        ++v14;
        ++v15;
      }
      while ( v14 < v11->gt.n - 1 );
    }
    --v11->gt.n;
    result = 1;
  }
  return result;
}

//----- (00759980) --------------------------------------------------------
int __usercall newlabelentry<eax>(LexState *ls<ebx>, Labellist *l<esi>, TString *name, int line, int pc)
{
  int v5; // edi@1

  v5 = l->n;
  if ( v5 + 1 > l->size )
    l->arr = (Labeldesc *)luaM_growaux_(ls->L, l->arr, &l->size, 0x10u, 32767, "labels/gotos");
  l->arr[v5].name = name;
  l->arr[v5].line = line;
  l->arr[v5].nactvar = ls->fs->nactvar;
  l->arr[v5].pc = pc;
  ++l->n;
  return v5;
}

//----- (007599F0) --------------------------------------------------------
void __cdecl findgotos(LexState *ls, Labeldesc *lb)
{
  LexState *v2; // esi@1
  int v3; // edi@1
  char *v4; // eax@1
  int v5; // ebx@2
  FuncState *v6; // ecx@5
  Dyndata *v7; // esi@5
  int v8; // eax@5
  int v9; // ecx@6
  int v10; // edx@7
  Labeldesc *v11; // eax@8
  int v12; // ebx@8
  int v13; // eax@8
  const char *v14; // eax@13
  char *gl; // [sp+8h] [bp-8h]@1
  int v16; // [sp+Ch] [bp-4h]@2

  v2 = ls;
  v3 = ls->fs->bl->firstgoto;
  v4 = (char *)&ls->dyd->gt;
  gl = (char *)&ls->dyd->gt;
  if ( v3 < ls->dyd->gt.n )
  {
    v5 = 16 * v3;
    v16 = 16 * v3;
    while ( 1 )
    {
      if ( luaS_eqstr(*(TString **)(*(_DWORD *)v4 + v5), lb->name) )
      {
        v6 = v2->fs;
        v7 = v2->dyd;
        v8 = (int)((char *)v7->gt.arr + v5);
        if ( *(_BYTE *)(v8 + 12) < (unsigned __int8)lb->nactvar )
        {
          v14 = luaO_pushfstring(ls->L, "<goto %s> at line %d jumps into the scope of local '%s'");
          ls->t.token = 0;
          luaX_syntaxerror(ls, v14);
        }
        luaK_patchlist(v6, *(_DWORD *)(v8 + 4), lb->pc);
        v9 = v3;
        if ( v3 < v7->gt.n - 1 )
        {
          v10 = v16;
          do
          {
            v11 = v7->gt.arr;
            v12 = *(int *)((char *)&v11[1].name + v10);
            v13 = (int)((char *)v11 + v10);
            *(_DWORD *)v13 = v12;
            *(_DWORD *)(v13 + 4) = *(_DWORD *)(v13 + 20);
            *(_DWORD *)(v13 + 8) = *(_DWORD *)(v13 + 24);
            *(_DWORD *)(v13 + 12) = *(_DWORD *)(v13 + 28);
            ++v9;
            v10 += 16;
          }
          while ( v9 < v7->gt.n - 1 );
        }
        --v7->gt.n;
        v2 = ls;
        v5 = v16;
      }
      else
      {
        ++v3;
        v5 += 16;
        v16 = v5;
      }
      if ( v3 >= *((_DWORD *)gl + 1) )
        break;
      v4 = gl;
    }
  }
}

//----- (00759B10) --------------------------------------------------------
void __cdecl movegotosout(FuncState *fs, BlockCnt *bl)
{
  BlockCnt *v2; // edi@1
  int v3; // ebx@1
  char *v4; // edx@1
  int v5; // ebx@2
  int v6; // esi@4
  char v7; // al@4
  LexState *v8; // eax@8
  BlockCnt *v9; // ecx@8
  Dyndata *v10; // esi@8
  int v11; // edi@8
  int v12; // eax@8
  int v13; // ecx@9
  Labeldesc *v14; // ebx@11
  TString *v15; // edx@11
  TString *v16; // eax@11
  int v17; // ebx@11
  unsigned __int8 v18; // al@17
  BlockCnt *v19; // [sp+8h] [bp-1Ch]@8
  LexState *ls; // [sp+Ch] [bp-18h]@8
  int v21; // [sp+10h] [bp-14h]@8
  int v22; // [sp+14h] [bp-10h]@2
  char *gl; // [sp+18h] [bp-Ch]@1
  int v24; // [sp+1Ch] [bp-8h]@9
  int i; // [sp+20h] [bp-4h]@1

  v2 = bl;
  v3 = bl->firstgoto;
  v4 = (char *)&fs->ls->dyd->gt;
  i = v3;
  gl = (char *)&fs->ls->dyd->gt;
  if ( v3 < fs->ls->dyd->gt.n )
  {
    v5 = 16 * v3;
    v22 = v5;
    while ( 1 )
    {
      v6 = *(_DWORD *)v4;
      v7 = v2->nactvar;
      if ( *(_BYTE *)(*(_DWORD *)v4 + v5 + 12) > (unsigned __int8)v7 )
      {
        if ( v2->upval )
        {
          luaK_patchclose(fs, *(_DWORD *)(v6 + v5 + 4), (unsigned __int8)v7);
          v4 = gl;
          v2 = bl;
        }
        *(_BYTE *)(v6 + v5 + 12) = v2->nactvar;
      }
      v8 = fs->ls;
      v9 = v8->fs->bl;
      v10 = v8->dyd;
      v11 = v9->firstlabel;
      ls = fs->ls;
      v12 = (int)((char *)v10->gt.arr + v5);
      v19 = v9;
      v21 = (int)((char *)v10->gt.arr + v5);
      if ( v11 >= v10->label.n )
      {
LABEL_14:
        ++i;
        v5 += 16;
        v22 = v5;
      }
      else
      {
        v13 = 16 * v11;
        v24 = 16 * v11;
        while ( 1 )
        {
          v14 = v10->label.arr;
          v15 = *(TString **)v12;
          v16 = *(TString **)((char *)&v14->name + v13);
          v17 = (int)((char *)v14 + v13);
          if ( luaS_eqstr(v16, v15) )
            break;
          v24 += 16;
          ++v11;
          if ( v11 >= v10->label.n )
          {
            v5 = v22;
            v4 = gl;
            goto LABEL_14;
          }
          v13 = v24;
          v12 = v21;
        }
        v18 = *(_BYTE *)(v17 + 12);
        if ( *(_BYTE *)(v21 + 12) > v18 && (v19->upval || v10->label.n > v19->firstlabel) )
          luaK_patchclose(ls->fs, *(_DWORD *)(v21 + 4), v18);
        closegoto(ls, i, (Labeldesc *)v17);
        v5 = v22;
        v4 = gl;
      }
      if ( i >= *((_DWORD *)v4 + 1) )
        break;
      v2 = bl;
    }
  }
}

//----- (00759C50) --------------------------------------------------------
void __usercall breaklabel(LexState *ls<edi>)
{
  TString *v1; // eax@1
  Dyndata *v2; // esi@1
  int v3; // ebx@1
  unsigned int v4; // ebx@3
  int v5; // [sp+8h] [bp-8h]@1
  TString *n; // [sp+Ch] [bp-4h]@1

  v1 = luaS_new(ls->L, "break");
  v2 = ls->dyd;
  v3 = v2->label.n;
  n = v1;
  v5 = ls->fs->pc;
  if ( v3 + 1 > v2->label.size )
    v2->label.arr = (Labeldesc *)luaM_growaux_(ls->L, v2->label.arr, &v2->label.size, 0x10u, 32767, "labels/gotos");
  v4 = v3;
  v2->label.arr[v4].name = n;
  v2->label.arr[v4].line = 0;
  v2->label.arr[v4].nactvar = ls->fs->nactvar;
  v2->label.arr[v4].pc = v5;
  ++v2->label.n;
  findgotos(ls, &ls->dyd->label.arr[v4]);
}

//----- (00759CF0) --------------------------------------------------------
void __usercall undefgoto(LexState *ls<esi>, Labeldesc *gt<edx>)
{
  const char *v2; // ecx@2
  const char *v3; // eax@4

  if ( BYTE4(gt->name->dummy.u) != 4 || (v2 = "<%s> at line %d not inside a loop", !BYTE6(gt->name->dummy.u)) )
    v2 = "no visible label '%s' for <goto> at line %d";
  v3 = luaO_pushfstring(ls->L, v2);
  ls->t.token = 0;
  luaX_syntaxerror(ls, v3);
}

//----- (00759D30) --------------------------------------------------------
void __usercall leaveblock(FuncState *fs<eax>)
{
  FuncState *v1; // esi@1
  BlockCnt *v2; // ebx@1
  LexState *v3; // edi@1
  int v4; // ST24_4@3
  int v5; // edx@9
  Dyndata *v6; // eax@9

  v1 = fs;
  v2 = fs->bl;
  v3 = fs->ls;
  if ( v2->previous && v2->upval )
  {
    v4 = luaK_jump(fs);
    luaK_patchclose(v1, v4, v2->nactvar);
    luaK_patchtohere(v1, v4);
  }
  if ( v2->isloop )
    breaklabel(v3);
  v1->bl = v2->previous;
  removevars(v1, v2->nactvar);
  v1->freereg = v1->nactvar;
  v3->dyd->label.n = v2->firstlabel;
  if ( v2->previous )
  {
    movegotosout(v1, v2);
  }
  else
  {
    v5 = v2->firstgoto;
    v6 = v3->dyd;
    if ( v5 < v6->gt.n )
      undefgoto(v3, &v6->gt.arr[v5]);
  }
}

//----- (00759DD0) --------------------------------------------------------
Proto *__usercall addprototype<eax>(LexState *ls<eax>)
{
  lua_State *v1; // edx@1
  FuncState *v2; // ebx@1
  int v3; // eax@1
  Proto *v4; // esi@1
  int *v5; // ecx@1
  int v6; // edi@1
  void *v7; // eax@3
  Proto *v8; // edi@6
  lua_State *L; // [sp+Ch] [bp-4h]@1

  v1 = ls->L;
  v2 = ls->fs;
  v3 = v2->np;
  v4 = v2->f;
  v5 = &v2->f->sizep;
  v6 = *v5;
  L = v1;
  if ( v3 >= *v5 )
  {
    if ( v3 + 1 > v6 )
    {
      v7 = luaM_growaux_(v1, v4->p, v5, 4u, 262143, "functions");
      v1 = L;
      v4->p = (Proto **)v7;
    }
    for ( ; v6 < v4->sizep; ++v6 )
      v4->p[v6] = 0;
  }
  v8 = luaF_newproto(v1);
  v4->p[v2->np++] = v8;
  if ( v8->marked & 3 && v4->marked & 4 )
    luaC_barrier_(L, (GCObject *)&v4->next, (GCObject *)&v8->next);
  return v8;
}

//----- (00759E70) --------------------------------------------------------
void __usercall open_func(LexState *ls<eax>, FuncState *fs<esi>, BlockCnt *bl)
{
  lua_State *v3; // edi@1
  Proto *v4; // ecx@1
  Table *v5; // eax@1
  lua_TValue *v6; // ecx@1
  __int16 v7; // dx@3

  v3 = ls->L;
  fs->prev = ls->fs;
  fs->ls = ls;
  ls->fs = fs;
  fs->pc = 0;
  fs->lasttarget = 0;
  fs->jpc = -1;
  fs->nk = 0;
  fs->np = 0;
  *(_WORD *)&fs->nups = 0;
  fs->nactvar = 0;
  fs->nlocvars = 0;
  v4 = fs->f;
  fs->firstlocal = ls->dyd->actvar.n;
  fs->bl = 0;
  v4->source = ls->source;
  v4->maxstacksize = 2;
  v5 = luaH_new(v3);
  fs->h = v5;
  v6 = v3->top;
  v6->u.i.v__.gc = (GCObject *)v5;
  v6->u.i.tt__ = 2146936133;
  ++v3->top;
  if ( (signed int)(((char *)v3->stack_last - (char *)v3->top) & 0xFFFFFFF8) <= 0 )
    luaD_growstack(v3, 0);
  bl->isloop = 0;
  bl->nactvar = fs->nactvar;
  bl->firstlabel = LOWORD(fs->ls->dyd->label.n);
  v7 = LOWORD(fs->ls->dyd->gt.n);
  bl->upval = 0;
  bl->firstgoto = v7;
  bl->previous = fs->bl;
  fs->bl = bl;
}

//----- (00759F30) --------------------------------------------------------
void __cdecl close_func(LexState *ls)
{
  lua_State *v1; // ebx@1
  FuncState *v2; // edi@1
  Proto *v3; // esi@1
  int v4; // eax@1
  int v5; // eax@5
  int v6; // eax@7
  int v7; // eax@9
  int v8; // eax@11
  int v9; // ecx@13
  global_State *v10; // eax@16

  v1 = ls->L;
  v2 = ls->fs;
  v3 = v2->f;
  luaK_ret(ls->fs, 0, 0);
  leaveblock(v2);
  v4 = v2->pc;
  if ( (unsigned int)(v4 + 1) > 0x3FFFFFFF )
    luaM_toobig(v1);
  v3->code = (unsigned int *)luaM_realloc_(v1, v3->code, 4 * v3->sizecode, 4 * v4);
  v3->sizecode = v2->pc;
  if ( (unsigned int)(v2->pc + 1) > 0x3FFFFFFF )
    luaM_toobig(v1);
  v3->lineinfo = (int *)luaM_realloc_(v1, v3->lineinfo, 4 * v3->sizelineinfo, 4 * v2->pc);
  v3->sizelineinfo = v2->pc;
  v5 = v2->nk;
  if ( (unsigned int)(v5 + 1) > 0x1FFFFFFF )
    luaM_toobig(v1);
  v3->k = (lua_TValue *)luaM_realloc_(v1, v3->k, 8 * v3->sizek, 8 * v5);
  v3->sizek = v2->nk;
  v6 = v2->np;
  if ( (unsigned int)(v6 + 1) > 0x3FFFFFFF )
    luaM_toobig(v1);
  v3->p = (Proto **)luaM_realloc_(v1, v3->p, 4 * v3->sizep, 4 * v6);
  v3->sizep = v2->np;
  v7 = v2->nlocvars;
  if ( (unsigned int)(v7 + 1) > 0x15555555 )
    luaM_toobig(v1);
  v3->locvars = (LocVar *)luaM_realloc_(v1, v3->locvars, 12 * v3->sizelocvars, 12 * v7);
  v3->sizelocvars = v2->nlocvars;
  v8 = v2->nups;
  if ( (unsigned int)(v8 + 1) > 0x1FFFFFFF )
    luaM_toobig(v1);
  v3->upvalues = (Upvaldesc *)luaM_realloc_(v1, v3->upvalues, 8 * v3->sizeupvalues, 8 * v8);
  v3->sizeupvalues = v2->nups;
  ls->fs = v2->prev;
  v9 = ls->t.token;
  if ( v9 == 288 || v9 == 289 )
    luaX_newstring(ls, (const char *)(LODWORD(ls->t.seminfo.r) + 16), *(_DWORD *)(LODWORD(ls->t.seminfo.r) + 12));
  v10 = v1->l_G;
  --v1->top;
  if ( v10->GCdebt > 0 )
    luaC_step(v1);
}

//----- (0075A110) --------------------------------------------------------
int __usercall block_follow<eax>(LexState *ls<eax>, int withuntil)
{
  int result; // eax@2

  switch ( ls->t.token )
  {
    case 0x104:
    case 0x105:
    case 0x106:
    case 0x11E:
      result = 1;
      break;
    case 0x115:
      result = withuntil;
      break;
    default:
      result = 0;
      break;
  }
  return result;
}

//----- (0075A170) --------------------------------------------------------
void __usercall fieldsel(LexState *ls<ecx>, expdesc *v<edi>)
{
  LexState *v2; // esi@1
  FuncState *v3; // ebx@1
  TString *v4; // ST20_4@3
  expdesc *v5; // [sp+0h] [bp-2Ch]@0
  expdesc key; // [sp+10h] [bp-1Ch]@3
  unsigned int v7; // [sp+28h] [bp-4h]@1
  int v8; // [sp+2Ch] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v2 = ls;
  v3 = ls->fs;
  luaK_exp2anyregup(ls->fs, v5);
  luaX_next(v2);
  if ( v2->t.token != 288 )
    error_expected(v2, 288);
  v4 = (TString *)LODWORD(v2->t.seminfo.r);
  luaX_next(v2);
  *(_DWORD *)&key.u.ind.idx = luaK_stringK(v2->fs, v4);
  key.t = -1;
  key.f = -1;
  key.k = 4;
  luaK_indexed(v3, v, &key);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075A1F0) --------------------------------------------------------
void __usercall recfield(LexState *ls<ecx>, ConsControl *cc<ebx>)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@1
  TString *v4; // ST40_4@4
  int v5; // eax@4
  int v6; // ST40_4@10
  int v7; // eax@10
  char reg; // [sp+8h] [bp-3Ch]@1
  expdesc val; // [sp+10h] [bp-34h]@10
  expdesc key; // [sp+28h] [bp-1Ch]@4
  unsigned int v11; // [sp+40h] [bp-4h]@1
  int v12; // [sp+44h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = ls;
  v3 = ls->fs;
  reg = v3->freereg;
  if ( ls->t.token == 288 )
  {
    if ( cc->nh > 2147483645 )
      errorlimit(v3, 2147483645, "items in a constructor");
    v4 = (TString *)LODWORD(ls->t.seminfo.r);
    luaX_next(ls);
    v5 = luaK_stringK(v2->fs, v4);
    key.t = -1;
    key.f = -1;
    key.k = 4;
    *(_DWORD *)&key.u.ind.idx = v5;
  }
  else
  {
    luaX_next(ls);
    subexpr(v2, &key, 0);
    luaK_exp2val(v2->fs, &key);
    if ( v2->t.token != 93 )
      error_expected(v2, 93);
    luaX_next(v2);
  }
  ++cc->nh;
  if ( v2->t.token != 61 )
    error_expected(v2, 61);
  luaX_next(v2);
  v6 = luaK_exp2RK(v3, &key);
  subexpr(v2, &val, 0);
  v7 = luaK_exp2RK(v3, &val);
  luaK_codeABC(v3, OP_SETTABLE, *(_DWORD *)&cc->t->u.ind.idx, v6, v7);
  v3->freereg = reg;
}
// A85C00: using guessed type int __security_cookie;

//----- (0075A310) --------------------------------------------------------
void __usercall lastlistfield(FuncState *fs<edi>, ConsControl *cc<esi>)
{
  expkind v2; // eax@2

  if ( cc->tostore )
  {
    v2 = cc->v.k;
    if ( cc->v.k == 12 || v2 == 13 )
    {
      luaK_setreturns(fs, &cc->v, -1);
      luaK_setlist(fs, *(_DWORD *)&cc->t->u.ind.idx, cc->na--, -1);
    }
    else
    {
      if ( v2 )
        luaK_exp2nextreg(fs, &cc->v);
      luaK_setlist(fs, *(_DWORD *)&cc->t->u.ind.idx, cc->na, cc->tostore);
    }
  }
}

//----- (0075A370) --------------------------------------------------------
void __usercall constructor(LexState *ls<ecx>, expdesc *t<edx>)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@1
  expdesc *v4; // ebx@1
  int v5; // eax@1
  FuncState *v6; // ST00_4@1
  int v7; // eax@7
  int v8; // eax@15
  int v9; // esi@18
  int v10; // esi@18
  const char *v11; // eax@23
  expdesc *v12; // [sp-8h] [bp-48h]@9
  int v13; // [sp-4h] [bp-44h]@9
  int line; // [sp+Ch] [bp-34h]@1
  int pc; // [sp+10h] [bp-30h]@1
  ConsControl cc; // [sp+14h] [bp-2Ch]@1
  unsigned int v17; // [sp+3Ch] [bp-4h]@1
  int v18; // [sp+40h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = ls;
  v3 = ls->fs;
  v4 = t;
  line = ls->linenumber;
  v5 = luaK_codeABC(ls->fs, OP_NEWTABLE, 0, 0, 0);
  v4->t = -1;
  v4->f = -1;
  v4->k = 11;
  *(_DWORD *)&v4->u.ind.idx = v5;
  cc.v.t = -1;
  cc.v.f = -1;
  v6 = v2->fs;
  pc = v5;
  cc.tostore = 0;
  cc.nh = 0;
  cc.na = 0;
  cc.t = v4;
  cc.v.k = 0;
  *(_DWORD *)&cc.v.u.ind.idx = 0;
  luaK_exp2nextreg(v6, v4);
  if ( v2->t.token != 123 )
    error_expected(v2, 123);
  while ( 1 )
  {
    luaX_next(v2);
    if ( v2->t.token == 125 )
      break;
    if ( (_DWORD)cc.v.k )
    {
      luaK_exp2nextreg(v3, &cc.v);
      cc.v.k = 0;
      if ( cc.tostore == 50 )
      {
        luaK_setlist(v3, *(_DWORD *)&cc.t->u.ind.idx, cc.na, 50);
        cc.tostore = 0;
      }
    }
    v7 = v2->t.token;
    if ( v7 != 91 )
    {
      if ( v7 != 288 )
      {
        v13 = 0;
        v12 = (expdesc *)&cc;
LABEL_10:
        subexpr(v2, v12, v13);
        if ( cc.na > 2147483645 )
          errorlimit(v2->fs, 2147483645, "items in a constructor");
        ++cc.na;
        ++cc.tostore;
        goto LABEL_15;
      }
      if ( luaX_lookahead(v2) != 61 )
      {
        v13 = 0;
        v12 = (expdesc *)&cc;
        goto LABEL_10;
      }
    }
    recfield(v2, &cc);
LABEL_15:
    v8 = v2->t.token;
    if ( v8 != 44 && v8 != 59 )
    {
      if ( v8 != 125 )
      {
        if ( line == v2->linenumber )
          error_expected(v2, 125);
        luaX_token2str(v2, 123);
        luaX_token2str(v2, 125);
        v11 = luaO_pushfstring(v2->L, "%s expected (to close %s at line %d)");
        luaX_syntaxerror(v2, v11);
      }
      break;
    }
  }
  luaX_next(v2);
  lastlistfield(v3, &cc);
  v9 = (int)&v3->f->code[pc];
  *(_DWORD *)v9 = (unsigned int)loc_7FFFFF & *(_DWORD *)v9 | (luaO_int2fb(cc.na) << 23);
  v10 = (int)&v3->f->code[pc];
  *(_DWORD *)v10 ^= (unsigned int)((char *)loc_7FBFFC + 4) & (*(_DWORD *)v10 ^ (luaO_int2fb(cc.nh) << 14));
}
// 7FBFFC: using guessed type int __stdcall loc_7FBFFC(int kStream);
// 7FFFFF: using guessed type int loc_7FFFFF();
// A85C00: using guessed type int __security_cookie;

//----- (0075A560) --------------------------------------------------------
void __usercall parlist(LexState *ls<eax>)
{
  LexState *v1; // ebx@1
  FuncState *v2; // esi@1
  Proto *v3; // edi@1
  TString *v4; // esi@4
  FuncState *v5; // [sp+Ch] [bp-8h]@1
  int nparams; // [sp+10h] [bp-4h]@1

  v1 = ls;
  v2 = ls->fs;
  v3 = v2->f;
  v2->f->is_vararg = 0;
  v5 = v2;
  nparams = 0;
  if ( ls->t.token != 41 )
  {
    while ( 1 )
    {
      if ( v1->t.token == 280 )
      {
        luaX_next(v1);
        v3->is_vararg = 1;
        goto LABEL_10;
      }
      if ( v1->t.token != 288 )
        luaX_syntaxerror(v1, "<name> or '...' expected");
      v4 = (TString *)LODWORD(v1->t.seminfo.r);
      luaX_next(v1);
      new_localvar(v1, v4);
      ++nparams;
      if ( v3->is_vararg )
        break;
      if ( v1->t.token != 44 )
        break;
      luaX_next(v1);
      v2 = v5;
    }
    v2 = v5;
  }
LABEL_10:
  adjustlocalvars(v1, nparams);
  v3->numparams = v2->nactvar;
  luaK_reserveregs(v2, v2->nactvar);
}

//----- (0075A610) --------------------------------------------------------
void __usercall body(LexState *ls<eax>, expdesc *e<edi>, int ismethod, int line)
{
  LexState *v4; // ebx@1
  TString *v5; // eax@4
  FuncState *v6; // eax@4
  FuncState *v7; // esi@8
  int v8; // eax@8
  const char *v9; // eax@12
  FuncState new_fs; // [sp+8h] [bp-40h]@1
  char v11; // [sp+3Ch] [bp-Ch]@1

  v4 = ls;
  new_fs.f = addprototype(ls);
  new_fs.f->linedefined = line;
  open_func(v4, &new_fs, (BlockCnt *)&v11);
  if ( v4->t.token != 40 )
    error_expected(v4, 40);
  luaX_next(v4);
  if ( ismethod )
  {
    v5 = luaX_newstring(v4, "self", 4u);
    new_localvar(v4, v5);
    v6 = v4->fs;
    ++v6->nactvar;
    v6->f->locvars[*(&v6->ls->dyd->actvar.arr[v6->nactvar - 1].idx + v6->firstlocal)].startpc = v6->pc;
  }
  parlist(v4);
  if ( v4->t.token != 41 )
    error_expected(v4, 41);
  luaX_next(v4);
  statlist(v4);
  new_fs.f->lastlinedefined = v4->linenumber;
  if ( v4->t.token != 262 )
  {
    if ( line == v4->linenumber )
      error_expected(v4, 262);
    luaX_token2str(v4, 265);
    luaX_token2str(v4, 262);
    v9 = luaO_pushfstring(v4->L, "%s expected (to close %s at line %d)");
    luaX_syntaxerror(v4, v9);
  }
  luaX_next(v4);
  v7 = v4->fs->prev;
  v8 = luaK_codeABx(v7, OP_CLOSURE, 0, v7->np - 1);
  e->t = -1;
  e->f = -1;
  e->k = 11;
  *(_DWORD *)&e->u.ind.idx = v8;
  luaK_exp2nextreg(v7, e);
  close_func(v4);
}

//----- (0075A770) --------------------------------------------------------
int __usercall explist<eax>(LexState *ls<esi>, expdesc *v<edi>)
{
  int v2; // ebx@1

  v2 = 1;
  subexpr(ls, v, 0);
  while ( ls->t.token == 44 )
  {
    luaX_next(ls);
    luaK_exp2nextreg(ls->fs, v);
    subexpr(ls, v, 0);
    ++v2;
  }
  return v2;
}

//----- (0075A7B0) --------------------------------------------------------
void __usercall funcargs(LexState *ls<ecx>, expdesc *f, int line)
{
  LexState *v3; // esi@1
  FuncState *v4; // ebx@1
  int v5; // eax@1
  int v6; // eax@5
  int v7; // edi@5
  int v8; // ebx@8
  FuncState *v9; // esi@10
  int v10; // eax@12
  const char *v11; // eax@21
  int v12; // eax@23
  FuncState *lsa; // [sp+10h] [bp-20h]@1
  expdesc args; // [sp+14h] [bp-1Ch]@5
  unsigned int v15; // [sp+2Ch] [bp-4h]@1
  int v16; // [sp+30h] [bp+0h]@1

  v15 = (unsigned int)&v16 ^ __security_cookie;
  v3 = ls;
  v4 = ls->fs;
  v5 = ls->t.token;
  lsa = ls->fs;
  if ( v5 == 40 )
  {
    luaX_next(ls);
    if ( v3->t.token == 41 )
    {
      args.k = 0;
    }
    else
    {
      explist(v3, &args);
      luaK_setreturns(v4, &args, -1);
    }
    if ( v3->t.token != 41 )
    {
      if ( line == v3->linenumber )
        error_expected(v3, 41);
      luaX_token2str(v3, 40);
      luaX_token2str(v3, 41);
      v11 = luaO_pushfstring(v3->L, "%s expected (to close %s at line %d)");
      luaX_syntaxerror(v3, v11);
    }
    luaX_next(v3);
    goto LABEL_7;
  }
  if ( v5 == 123 )
  {
    constructor(ls, &args);
LABEL_7:
    v7 = -1;
    goto LABEL_8;
  }
  if ( v5 != 289 )
    luaX_syntaxerror(ls, "function arguments expected");
  v6 = luaK_stringK(v4, LODWORD(ls->t.seminfo.r));
  v7 = -1;
  args.t = -1;
  args.f = -1;
  args.k = 4;
  *(_DWORD *)&args.u.ind.idx = v6;
  luaX_next(v3);
LABEL_8:
  v8 = *(_DWORD *)&f->u.ind.idx;
  if ( args.k == 12 || args.k == 13 )
  {
    v9 = lsa;
    v10 = v7;
  }
  else
  {
    v9 = lsa;
    if ( (_DWORD)args.k )
      luaK_exp2nextreg(lsa, &args);
    v10 = lsa->freereg - v8 - 1;
  }
  v12 = luaK_codeABC(v9, OP_CALL, v8, v10 + 1, 2);
  f->t = v7;
  f->f = v7;
  f->k = 12;
  *(_DWORD *)&f->u.ind.idx = v12;
  luaK_fixline(v9, line);
  v9->freereg = v8 + 1;
}
// A85C00: using guessed type int __security_cookie;

//----- (0075A930) --------------------------------------------------------
void __usercall primaryexp(LexState *ls<ecx>, expdesc *v<eax>)
{
  LexState *v2; // esi@1
  expdesc *v3; // ebx@1
  int v4; // eax@1
  int v5; // edi@5
  const char *v6; // eax@10

  v2 = ls;
  v3 = v;
  v4 = ls->t.token;
  if ( v4 == 40 )
  {
    v5 = ls->linenumber;
    luaX_next(ls);
    subexpr(v2, v3, 0);
    if ( v2->t.token != 41 )
    {
      if ( v5 == v2->linenumber )
        error_expected(v2, 41);
      luaX_token2str(v2, 40);
      luaX_token2str(v2, 41);
      v6 = luaO_pushfstring(v2->L, "%s expected (to close %s at line %d)");
      luaX_syntaxerror(v2, v6);
    }
    luaX_next(v2);
    luaK_dischargevars(v2->fs, v3);
  }
  else
  {
    if ( v4 != 288 )
      luaX_syntaxerror(ls, "unexpected symbol");
    singlevar(ls, v3);
  }
}

//----- (0075A9D0) --------------------------------------------------------
void __usercall suffixedexp(LexState *ls<ecx>, expdesc *v<edi>)
{
  LexState *v2; // esi@1
  FuncState *v3; // ebx@1
  int v4; // eax@1
  FuncState *v5; // ebx@3
  int v6; // eax@3
  TString *v7; // ST28_4@4
  int v8; // eax@4
  TString *v9; // ebx@8
  int line; // [sp+Ch] [bp-24h]@1
  FuncState *v11; // [sp+10h] [bp-20h]@1
  expdesc key; // [sp+14h] [bp-1Ch]@4
  unsigned int v13; // [sp+2Ch] [bp-4h]@1
  int v14; // [sp+30h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v2 = ls;
  v3 = ls->fs;
  line = ls->linenumber;
  v11 = ls->fs;
  primaryexp(ls, v);
  v4 = v2->t.token - 40;
  while ( 1 )
  {
    switch ( v4 )
    {
      case 6:
        v5 = v2->fs;
        luaK_exp2anyregup(v2->fs, v);
        luaX_next(v2);
        v6 = 288;
        if ( v2->t.token != 288 )
          goto LABEL_12;
        v7 = (TString *)LODWORD(v2->t.seminfo.r);
        luaX_next(v2);
        v8 = luaK_stringK(v2->fs, v7);
        key.t = -1;
        key.f = -1;
        key.k = 4;
        *(_DWORD *)&key.u.ind.idx = v8;
        luaK_indexed(v5, v, &key);
        v3 = v11;
        goto LABEL_10;
      case 51:
        luaK_exp2anyregup(v3, v);
        luaX_next(v2);
        subexpr(v2, &key, 0);
        luaK_exp2val(v2->fs, &key);
        v6 = 93;
        if ( v2->t.token != 93 )
          goto LABEL_12;
        luaX_next(v2);
        luaK_indexed(v3, v, &key);
        goto LABEL_10;
      case 18:
        luaX_next(v2);
        v6 = 288;
        if ( v2->t.token != 288 )
LABEL_12:
          error_expected(v2, v6);
        v9 = (TString *)LODWORD(v2->t.seminfo.r);
        luaX_next(v2);
        *(_DWORD *)&key.u.ind.idx = luaK_stringK(v2->fs, v9);
        key.t = -1;
        key.f = -1;
        key.k = 4;
        luaK_self(v11, v, &key);
        funcargs(v2, v, line);
        v3 = v11;
        goto LABEL_10;
      case 0:
      case 83:
      case 249:
        luaK_exp2nextreg(v3, v);
        funcargs(v2, v, line);
LABEL_10:
        v4 = v2->t.token - 40;
        if ( (unsigned int)v4 > 0xF9 )
          return;
        break;
      default:
        return;
    }
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0075AC80) --------------------------------------------------------
void __usercall simpleexp(LexState *ls<ebx>, expdesc *v<eax>)
{
  expdesc *v2; // edi@1
  FuncState *v3; // eax@7
  int v4; // eax@9

  v2 = v;
  switch ( ls->t.token )
  {
    case 0x11F:
      *(_DWORD *)&v->u.ind.idx = 0;
      v->t = -1;
      v->f = -1;
      v->k = 5;
      *(double *)&v->u.ind.idx = ls->t.seminfo.r;
      luaX_next(ls);
      return;
    case 0x121:
      codestring(ls, v, LODWORD(ls->t.seminfo.r));
      luaX_next(ls);
      return;
    case 0x10E:
      v->k = 1;
      *(_DWORD *)&v->u.ind.idx = 0;
      goto LABEL_10;
    case 0x114:
      v->k = 2;
      *(_DWORD *)&v->u.ind.idx = 0;
      goto LABEL_10;
    case 0x107:
      v->k = 3;
      *(_DWORD *)&v->u.ind.idx = 0;
      goto LABEL_10;
    case 0x118:
      v3 = ls->fs;
      if ( !v3->f->is_vararg )
        luaX_syntaxerror(ls, "cannot use '...' outside a vararg function");
      v4 = luaK_codeABC(v3, OP_VARARG, 0, 1, 0);
      v2->k = 13;
      *(_DWORD *)&v2->u.ind.idx = v4;
LABEL_10:
      v2->f = -1;
      v2->t = -1;
      luaX_next(ls);
      break;
    case 0x7B:
      constructor(ls, v);
      break;
    case 0x109:
      luaX_next(ls);
      body(ls, v2, 0, ls->linenumber);
      break;
    default:
      suffixedexp(ls, v);
      break;
  }
}

//----- (0075AE50) --------------------------------------------------------
BinOpr __usercall getbinopr<eax>(int op<eax>)
{
  BinOpr result; // eax@2

  switch ( op )
  {
    case 43:
      result = 0;
      break;
    case 45:
      result = 1;
      break;
    case 42:
      result = 2;
      break;
    case 47:
      result = 3;
      break;
    case 37:
      result = 4;
      break;
    case 94:
      result = 5;
      break;
    case 279:
      result = 6;
      break;
    case 284:
      result = 10;
      break;
    case 281:
      result = 7;
      break;
    case 60:
      result = 8;
      break;
    case 283:
      result = 9;
      break;
    case 62:
      result = 11;
      break;
    case 282:
      result = 12;
      break;
    case 257:
      result = 13;
      break;
    case 272:
      result = 14;
      break;
    default:
      result = 15;
      break;
  }
  return result;
}

//----- (0075B000) --------------------------------------------------------
BinOpr __cdecl subexpr(LexState *ls, expdesc *v, int limit)
{
  lua_State *v3; // eax@1
  expdesc *v4; // edi@1
  int v5; // eax@3
  int v6; // esi@9
  BinOpr v7; // esi@11
  int v8; // ST40_4@15
  BinOpr v9; // edi@15
  UnOpr line; // [sp+10h] [bp-20h]@6
  expdesc v2; // [sp+14h] [bp-1Ch]@15
  unsigned int v13; // [sp+2Ch] [bp-4h]@1
  int v14; // [sp+30h] [bp+0h]@1

  v13 = (unsigned int)&v14 ^ __security_cookie;
  v3 = ls->L;
  ++v3->nCcalls;
  v4 = v;
  if ( v3->nCcalls > 0xC8u )
    errorlimit(ls->fs, 200, "C levels");
  v5 = ls->t.token;
  if ( v5 == 35 )
  {
    line = 2;
    goto LABEL_9;
  }
  if ( v5 == 45 )
  {
    line = 0;
    goto LABEL_9;
  }
  if ( v5 == 271 )
  {
    line = 1;
LABEL_9:
    v6 = ls->linenumber;
    luaX_next(ls);
    subexpr(ls, v, 8);
    luaK_prefix(ls->fs, line, v, v6);
    goto LABEL_11;
  }
  simpleexp(ls, v);
LABEL_11:
  v7 = getbinopr(ls->t.token);
  if ( v7 != 15 )
  {
    while ( priority[v7].left > limit )
    {
      v8 = ls->linenumber;
      luaX_next(ls);
      luaK_infix(ls->fs, v7, v4);
      v9 = subexpr(ls, &v2, priority[v7].right);
      luaK_posfix(ls->fs, v7, v, &v2, v8);
      v7 = v9;
      if ( v9 == 15 )
        break;
      v4 = v;
    }
  }
  --ls->L->nCcalls;
  return v7;
}
// A85C00: using guessed type int __security_cookie;

//----- (0075B130) --------------------------------------------------------
void __usercall block(LexState *ls<eax>)
{
  FuncState *v1; // esi@1
  BlockCnt *v2; // [sp+4h] [bp-Ch]@1
  __int16 v3; // [sp+8h] [bp-8h]@1
  __int16 v4; // [sp+Ah] [bp-6h]@1
  char v5; // [sp+Ch] [bp-4h]@1
  char v6; // [sp+Dh] [bp-3h]@1
  char v7; // [sp+Eh] [bp-2h]@1

  v7 = 0;
  v1 = ls->fs;
  v5 = v1->nactvar;
  v3 = LOWORD(v1->ls->dyd->label.n);
  v4 = LOWORD(v1->ls->dyd->gt.n);
  v6 = 0;
  v2 = v1->bl;
  v1->bl = (BlockCnt *)&v2;
  statlist(ls);
  leaveblock(v1);
}

//----- (0075B190) --------------------------------------------------------
void __usercall check_conflict(LexState *ls<ecx>, LHS_assign *lh<eax>, expdesc *v<esi>)
{
  FuncState *v3; // edi@1
  int v4; // ecx@1
  signed int v5; // edx@1

  v3 = ls->fs;
  v4 = v3->freereg;
  v5 = 0;
  if ( lh )
  {
    do
    {
      if ( lh->v.k == 9 )
      {
        if ( lh->v.u.ind.vt == v->k && lh->v.u.ind.t == *(_DWORD *)&v->u.ind.idx )
        {
          v5 = 1;
          lh->v.u.ind.vt = 7;
          lh->v.u.ind.t = v4;
        }
        if ( v->k == 7 && lh->v.u.ind.idx == *(_DWORD *)&v->u.ind.idx )
        {
          v5 = 1;
          lh->v.u.ind.idx = v4;
        }
      }
      lh = lh->prev;
    }
    while ( lh );
    if ( v5 )
    {
      luaK_codeABC(v3, (OpCode)(v->k != 7 ? 5 : 0), v4, *(_DWORD *)&v->u.ind.idx, 0);
      luaK_reserveregs(v3, 1);
    }
  }
}

//----- (0075B210) --------------------------------------------------------
void __cdecl assignment(LexState *ls, LHS_assign *lh, int nvars)
{
  expkind v3; // eax@1
  int v4; // eax@3
  int v5; // eax@11
  FuncState *v6; // ebx@14
  expdesc *var; // [sp+Ch] [bp-44h]@1
  int nexps; // [sp+10h] [bp-40h]@11
  LHS_assign nv; // [sp+14h] [bp-3Ch]@4
  expdesc e; // [sp+34h] [bp-1Ch]@11
  unsigned int v11; // [sp+4Ch] [bp-4h]@1
  int v12; // [sp+50h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  var = &lh->v;
  v3 = lh->v.k;
  if ( (signed int)v3 < 7 || (signed int)v3 > 9 )
    luaX_syntaxerror(ls, "syntax error");
  v4 = ls->t.token;
  if ( v4 == 44 )
  {
    luaX_next(ls);
    nv.prev = lh;
    suffixedexp(ls, &nv.v);
    if ( nv.v.k != 9 )
      check_conflict(ls, lh, &nv.v);
    if ( nvars + ls->L->nCcalls > 200 )
      errorlimit(ls->fs, 200, "C levels");
    assignment(ls, &nv, nvars + 1);
LABEL_14:
    v6 = ls->fs;
    *(_DWORD *)&e.u.ind.idx = v6->freereg - 1;
    e.t = -1;
    e.f = -1;
    e.k = 6;
    luaK_storevar(v6, var, &e);
    return;
  }
  if ( v4 != 61 )
    error_expected(ls, 61);
  luaX_next(ls);
  v5 = explist(ls, &e);
  nexps = v5;
  if ( v5 != nvars )
  {
    adjust_assign(ls, nvars, v5, &e);
    if ( nexps > nvars )
      ls->fs->freereg += nvars - nexps;
    goto LABEL_14;
  }
  luaK_setoneret(ls->fs, &e);
  luaK_storevar(ls->fs, var, &e);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075B380) --------------------------------------------------------
void __usercall gotostat(LexState *ls<eax>, int pc)
{
  LexState *v2; // ebx@1
  int v3; // edi@1
  TString *v4; // esi@4
  TString *v5; // eax@4
  int v6; // eax@6

  v2 = ls;
  v3 = ls->linenumber;
  if ( ls->t.token == 266 )
  {
    luaX_next(ls);
    if ( v2->t.token != 288 )
      error_expected(v2, 288);
    v4 = (TString *)LODWORD(v2->t.seminfo.r);
    luaX_next(v2);
    v5 = v4;
  }
  else
  {
    luaX_next(ls);
    v5 = luaS_new(v2->L, "break");
  }
  v6 = newlabelentry(v2, &v2->dyd->gt, v5, v3, pc);
  findlabel(v2, v6);
}

//----- (0075B400) --------------------------------------------------------
void __usercall labelstat(LexState *ls<eax>, TString *label, int line)
{
  LexState *v3; // ebx@1
  int v4; // esi@1
  Dyndata *v5; // edi@1
  int v6; // eax@2
  const char *v7; // eax@8
  LexState *v8; // ST08_4@9
  int v9; // esi@10
  int v10; // eax@11
  FuncState *v11; // [sp+Ch] [bp-8h]@1
  int i; // [sp+10h] [bp-4h]@2

  v3 = ls;
  v11 = ls->fs;
  v4 = v11->bl->firstlabel;
  v5 = ls->dyd;
  if ( v4 < v5->label.n )
  {
    v6 = 16 * v4;
    for ( i = 16 * v4; ; v6 = i )
    {
      if ( luaS_eqstr(label, *(TString **)((char *)&v5->label.arr->name + v6)) )
      {
        v7 = luaO_pushfstring(v11->ls->L, "label '%s' already defined on line %d");
        v8 = v11->ls;
        v8->t.token = 0;
        luaX_syntaxerror(v8, v7);
      }
      i += 16;
      ++v4;
      if ( v4 >= v5->label.n )
        break;
    }
  }
  if ( v3->t.token != 285 )
    error_expected(v3, 285);
  luaX_next(v3);
  v9 = newlabelentry(v3, &v5->label, label, line, v11->pc);
  while ( 1 )
  {
    v10 = v3->t.token;
    if ( v10 != 59 )
    {
      if ( v10 != 285 )
        break;
    }
    statement(v3);
  }
  switch ( v10 )
  {
    case 260:
    case 261:
    case 262:
    case 286:
      v5->label.arr[v9].nactvar = v11->bl->nactvar;
      break;
    default:
      break;
  }
  findgotos(v3, &v5->label.arr[v9]);
}

//----- (0075B550) --------------------------------------------------------
void __usercall whilestat(LexState *ls<ecx>, int line)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@1
  FuncState *v4; // ebx@5
  int v5; // eax@5
  const char *v6; // eax@10
  int whileinit; // [sp+Ch] [bp-38h]@1
  BlockCnt *v8; // [sp+10h] [bp-34h]@5
  __int16 v9; // [sp+14h] [bp-30h]@5
  __int16 v10; // [sp+16h] [bp-2Eh]@5
  char v11; // [sp+18h] [bp-2Ch]@5
  char v12; // [sp+19h] [bp-2Bh]@5
  char v13; // [sp+1Ah] [bp-2Ah]@5
  BlockCnt *v14; // [sp+1Ch] [bp-28h]@3
  __int16 v15; // [sp+20h] [bp-24h]@3
  __int16 v16; // [sp+22h] [bp-22h]@3
  char v17; // [sp+24h] [bp-20h]@3
  char v18; // [sp+25h] [bp-1Fh]@3
  char v19; // [sp+26h] [bp-1Eh]@3
  expdesc v; // [sp+28h] [bp-1Ch]@1
  unsigned int v21; // [sp+40h] [bp-4h]@1
  int v22; // [sp+44h] [bp+0h]@1

  v21 = (unsigned int)&v22 ^ __security_cookie;
  v2 = ls;
  v3 = ls->fs;
  luaX_next(ls);
  whileinit = luaK_getlabel(v3);
  subexpr(v2, &v, 0);
  if ( v.k == 1 )
    v.k = 3;
  luaK_goiftrue(v2->fs, &v);
  v19 = 1;
  v17 = v3->nactvar;
  v15 = LOWORD(v3->ls->dyd->label.n);
  v16 = LOWORD(v3->ls->dyd->gt.n);
  v18 = 0;
  v14 = v3->bl;
  v3->bl = (BlockCnt *)&v14;
  if ( v2->t.token != 259 )
    error_expected(v2, 259);
  luaX_next(v2);
  v4 = v2->fs;
  v13 = 0;
  v11 = v4->nactvar;
  v9 = LOWORD(v4->ls->dyd->label.n);
  v10 = LOWORD(v4->ls->dyd->gt.n);
  v12 = 0;
  v8 = v4->bl;
  v4->bl = (BlockCnt *)&v8;
  statlist(v2);
  leaveblock(v4);
  v5 = luaK_jump(v3);
  luaK_patchlist(v3, v5, whileinit);
  if ( v2->t.token != 262 )
  {
    if ( line == v2->linenumber )
      error_expected(v2, 262);
    luaX_token2str(v2, 278);
    luaX_token2str(v2, 262);
    v6 = luaO_pushfstring(v2->L, "%s expected (to close %s at line %d)");
    luaX_syntaxerror(v2, v6);
  }
  luaX_next(v2);
  leaveblock(v3);
  luaK_patchtohere(v3, v.f);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075B6E0) --------------------------------------------------------
void __usercall repeatstat(LexState *ls<ecx>, int line)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@1
  int v4; // eax@1
  int v5; // esi@4
  const char *v6; // eax@10
  int repeat_init; // [sp+8h] [bp-38h]@1
  BlockCnt bl1; // [sp+Ch] [bp-34h]@1
  BlockCnt bl2; // [sp+18h] [bp-28h]@1
  expdesc v; // [sp+24h] [bp-1Ch]@2
  unsigned int v11; // [sp+3Ch] [bp-4h]@1
  int v12; // [sp+40h] [bp+0h]@1

  v11 = (unsigned int)&v12 ^ __security_cookie;
  v2 = ls;
  v3 = ls->fs;
  v4 = luaK_getlabel(ls->fs);
  bl1.isloop = 1;
  repeat_init = v4;
  bl1.nactvar = v3->nactvar;
  bl1.firstlabel = LOWORD(v3->ls->dyd->label.n);
  bl1.firstgoto = LOWORD(v3->ls->dyd->gt.n);
  bl1.upval = 0;
  bl1.previous = v3->bl;
  v3->bl = &bl1;
  bl2.isloop = 0;
  bl2.nactvar = v3->nactvar;
  bl2.firstlabel = LOWORD(v3->ls->dyd->label.n);
  bl2.firstgoto = LOWORD(v3->ls->dyd->gt.n);
  bl2.upval = 0;
  bl2.previous = v3->bl;
  v3->bl = &bl2;
  luaX_next(v2);
  statlist(v2);
  if ( v2->t.token != 277 )
  {
    if ( line == v2->linenumber )
      error_expected(v2, 277);
    luaX_token2str(v2, 273);
    luaX_token2str(v2, 277);
    v6 = luaO_pushfstring(v2->L, "%s expected (to close %s at line %d)");
    luaX_syntaxerror(v2, v6);
  }
  luaX_next(v2);
  subexpr(v2, &v, 0);
  if ( v.k == 1 )
    v.k = 3;
  luaK_goiftrue(v2->fs, &v);
  v5 = v.f;
  if ( bl2.upval )
    luaK_patchclose(v3, v.f, (unsigned __int8)bl2.nactvar);
  leaveblock(v3);
  luaK_patchlist(v3, v5, repeat_init);
  leaveblock(v3);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075B850) --------------------------------------------------------
void __usercall forbody(LexState *ls<eax>, int base, int line, int nvars, int isnum)
{
  LexState *v5; // ebx@1
  FuncState *v6; // edi@1
  signed int v7; // ecx@1
  int v8; // eax@2
  int v9; // eax@6
  LexState *v10; // edx@8
  FuncState *v11; // esi@8
  int v12; // ebx@8
  int v13; // eax@9
  BlockCnt *v14; // [sp+Ch] [bp-1Ch]@8
  __int16 v15; // [sp+10h] [bp-18h]@8
  __int16 v16; // [sp+12h] [bp-16h]@8
  char v17; // [sp+14h] [bp-14h]@8
  char v18; // [sp+15h] [bp-13h]@8
  char v19; // [sp+16h] [bp-12h]@8
  BlockCnt *v20; // [sp+18h] [bp-10h]@8
  __int16 v21; // [sp+1Ch] [bp-Ch]@8
  __int16 v22; // [sp+1Eh] [bp-Ah]@8
  char v23; // [sp+20h] [bp-8h]@8
  char v24; // [sp+21h] [bp-7h]@8
  char v25; // [sp+22h] [bp-6h]@8
  int prep; // [sp+24h] [bp-4h]@8

  v5 = ls;
  v6 = ls->fs;
  v7 = 3;
  v6->nactvar += 3;
  do
  {
    v8 = v6->nactvar - v7--;
    v6->f->locvars[v6->ls->dyd->actvar.arr[v6->firstlocal + v8].idx].startpc = v6->pc;
  }
  while ( v7 );
  if ( v5->t.token != 259 )
    error_expected(v5, 259);
  luaX_next(v5);
  if ( isnum )
    v9 = luaK_codeABx(v6, OP_FORPREP, base, 0x1FFFEu);
  else
    v9 = luaK_jump(v6);
  v25 = 0;
  v23 = v6->nactvar;
  v10 = v6->ls;
  prep = v9;
  v21 = LOWORD(v10->dyd->label.n);
  v22 = LOWORD(v6->ls->dyd->gt.n);
  v24 = 0;
  v20 = v6->bl;
  v6->bl = (BlockCnt *)&v20;
  adjustlocalvars(v5, nvars);
  luaK_reserveregs(v6, nvars);
  v11 = v5->fs;
  v19 = 0;
  v17 = v11->nactvar;
  v15 = LOWORD(v11->ls->dyd->label.n);
  v16 = LOWORD(v11->ls->dyd->gt.n);
  v18 = 0;
  v14 = v11->bl;
  v11->bl = (BlockCnt *)&v14;
  statlist(v5);
  leaveblock(v11);
  leaveblock(v6);
  v12 = prep;
  luaK_patchtohere(v6, prep);
  if ( isnum )
  {
    v13 = luaK_codeABx(v6, OP_FORLOOP, base, 0x1FFFEu);
  }
  else
  {
    luaK_codeABC(v6, OP_TFORCALL, base, 0, nvars);
    luaK_fixline(v6, line);
    v13 = luaK_codeABx(v6, OP_TFORLOOP, base + 2, 0x1FFFEu);
  }
  luaK_patchlist(v6, v13, v12 + 1);
  luaK_fixline(v6, line);
}

//----- (0075B9E0) --------------------------------------------------------
void __usercall fornum(LexState *ls<ecx>, TString *varname<edx>, int line)
{
  LexState *v3; // ebx@1
  FuncState *v4; // esi@1
  TString *v5; // edi@1
  TString *v6; // eax@1
  TString *v7; // eax@1
  TString *v8; // eax@1
  int v9; // eax@7
  int base; // [sp+14h] [bp-20h]@1
  expdesc v; // [sp+18h] [bp-1Ch]@3
  unsigned int v12; // [sp+30h] [bp-4h]@1
  int v13; // [sp+34h] [bp+0h]@1

  v12 = (unsigned int)&v13 ^ __security_cookie;
  v3 = ls;
  v4 = ls->fs;
  v5 = varname;
  base = v4->freereg;
  v6 = luaX_newstring(ls, "(for index)", 0xBu);
  new_localvar(v3, v6);
  v7 = luaX_newstring(v3, "(for limit)", 0xBu);
  new_localvar(v3, v7);
  v8 = luaX_newstring(v3, "(for step)", 0xAu);
  new_localvar(v3, v8);
  new_localvar(v3, v5);
  if ( v3->t.token != 61 )
    error_expected(v3, 61);
  luaX_next(v3);
  subexpr(v3, &v, 0);
  luaK_exp2nextreg(v3->fs, &v);
  if ( v3->t.token != 44 )
    error_expected(v3, 44);
  luaX_next(v3);
  subexpr(v3, &v, 0);
  luaK_exp2nextreg(v3->fs, &v);
  if ( v3->t.token == 44 )
  {
    luaX_next(v3);
    subexpr(v3, &v, 0);
    luaK_exp2nextreg(v3->fs, &v);
  }
  else
  {
    v9 = luaK_numberK(v4, 1.0);
    luaK_codek(v4, v4->freereg, v9);
    luaK_reserveregs(v4, 1);
  }
  forbody(v3, base, line, 1, 1);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075BB20) --------------------------------------------------------
void __usercall forlist(LexState *ls<ecx>, TString *indexname<edx>)
{
  LexState *v2; // esi@1
  TString *v3; // edi@1
  TString *v4; // eax@1
  TString *v5; // eax@1
  TString *v6; // eax@1
  int v7; // eax@3
  TString *v8; // ST40_4@4
  FuncState *v9; // edi@4
  Dyndata *v10; // ebx@4
  int v11; // eax@11
  FuncState *v12; // ebx@11
  int v13; // edi@11
  int v14; // ST40_4@16
  int v15; // edi@17
  int line; // [sp+Ch] [bp-30h]@11
  int base; // [sp+10h] [bp-2Ch]@1
  FuncState *v18; // [sp+14h] [bp-28h]@1
  signed int nvars; // [sp+18h] [bp-24h]@1
  __int16 from; // [sp+1Ch] [bp-20h]@4
  expdesc e; // [sp+20h] [bp-1Ch]@11
  unsigned int v22; // [sp+38h] [bp-4h]@1
  int v23; // [sp+3Ch] [bp+0h]@1

  v22 = (unsigned int)&v23 ^ __security_cookie;
  v2 = ls;
  v18 = ls->fs;
  v3 = indexname;
  nvars = 4;
  base = v18->freereg;
  v4 = luaX_newstring(ls, "(for generator)", 0xFu);
  new_localvar(v2, v4);
  v5 = luaX_newstring(v2, "(for state)", 0xBu);
  new_localvar(v2, v5);
  v6 = luaX_newstring(v2, "(for control)", 0xDu);
  new_localvar(v2, v6);
  new_localvar(v2, v3);
  while ( v2->t.token == 44 )
  {
    luaX_next(v2);
    v7 = 288;
    if ( v2->t.token != 288 )
      goto LABEL_10;
    v8 = (TString *)LODWORD(v2->t.seminfo.r);
    luaX_next(v2);
    v9 = v2->fs;
    v10 = v2->dyd;
    from = registerlocalvar(v2, v8);
    if ( v10->actvar.n - v9->firstlocal + 1 > 200 )
      errorlimit(v9, 200, "local variables");
    if ( v10->actvar.n + 2 > v10->actvar.size )
      v10->actvar.arr = (Vardesc *)luaM_growaux_(
                                     v2->L,
                                     v10->actvar.arr,
                                     &v10->actvar.size,
                                     2u,
                                     2147483645,
                                     "local variables");
    v10->actvar.arr[v10->actvar.n++].idx = from;
    ++nvars;
  }
  v7 = 268;
  if ( v2->t.token != 268 )
LABEL_10:
    error_expected(v2, v7);
  luaX_next(v2);
  line = v2->linenumber;
  v11 = explist(v2, &e);
  v12 = v2->fs;
  v13 = 3 - v11;
  if ( e.k == 12 || e.k == 13 )
  {
    v15 = v13 + 1;
    if ( v15 < 0 )
      v15 = 0;
    luaK_setreturns(v12, &e, v15);
    if ( v15 > 1 )
      luaK_reserveregs(v12, v15 - 1);
  }
  else
  {
    if ( (_DWORD)e.k )
      luaK_exp2nextreg(v12, &e);
    if ( v13 > 0 )
    {
      v14 = v12->freereg;
      luaK_reserveregs(v12, v13);
      luaK_nil(v12, v14, v13);
    }
  }
  luaK_checkstack(v18, 3);
  forbody(v2, base, line, nvars - 3, 0);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075BD10) --------------------------------------------------------
void __usercall forstat(LexState *ls<eax>, int line)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@1
  TString *v4; // ebx@3
  int v5; // eax@3
  const char *v6; // eax@14
  BlockCnt *v7; // [sp+8h] [bp-Ch]@1
  __int16 v8; // [sp+Ch] [bp-8h]@1
  __int16 v9; // [sp+Eh] [bp-6h]@1
  char v10; // [sp+10h] [bp-4h]@1
  char v11; // [sp+11h] [bp-3h]@1
  char v12; // [sp+12h] [bp-2h]@1

  v12 = 1;
  v2 = ls;
  v3 = ls->fs;
  v10 = v3->nactvar;
  v8 = LOWORD(v3->ls->dyd->label.n);
  v9 = LOWORD(v3->ls->dyd->gt.n);
  v11 = 0;
  v7 = v3->bl;
  v3->bl = (BlockCnt *)&v7;
  luaX_next(ls);
  if ( v2->t.token != 288 )
    error_expected(v2, 288);
  v4 = (TString *)LODWORD(v2->t.seminfo.r);
  luaX_next(v2);
  v5 = v2->t.token;
  if ( v5 != 44 )
  {
    if ( v5 == 61 )
    {
      fornum(v2, v4, line);
      goto LABEL_9;
    }
    if ( v5 != 268 )
      luaX_syntaxerror(v2, "'=' or 'in' expected");
  }
  forlist(v2, v4);
LABEL_9:
  if ( v2->t.token != 262 )
  {
    if ( line == v2->linenumber )
      error_expected(v2, 262);
    luaX_token2str(v2, 264);
    luaX_token2str(v2, 262);
    v6 = luaO_pushfstring(v2->L, "%s expected (to close %s at line %d)");
    luaX_syntaxerror(v2, v6);
  }
  luaX_next(v2);
  leaveblock(v3);
}

//----- (0075BE20) --------------------------------------------------------
void __usercall test_then_block(LexState *ls<ecx>, int *escapelist)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@1
  int v4; // eax@3
  __int16 v5; // cx@5
  int v6; // ebx@5
  int v7; // eax@7
  int v8; // esi@13
  int v9; // eax@15
  BlockCnt *v10; // [sp+10h] [bp-28h]@5
  __int16 v11; // [sp+14h] [bp-24h]@5
  __int16 v12; // [sp+16h] [bp-22h]@5
  char v13; // [sp+18h] [bp-20h]@5
  char v14; // [sp+19h] [bp-1Fh]@5
  char v15; // [sp+1Ah] [bp-1Eh]@5
  expdesc v; // [sp+1Ch] [bp-1Ch]@1
  unsigned int v17; // [sp+34h] [bp-4h]@1
  int v18; // [sp+38h] [bp+0h]@1

  v17 = (unsigned int)&v18 ^ __security_cookie;
  v2 = ls;
  v3 = ls->fs;
  luaX_next(ls);
  subexpr(v2, &v, 0);
  if ( v2->t.token != 275 )
    error_expected(v2, 275);
  luaX_next(v2);
  v4 = v2->t.token;
  if ( v4 == 266 || v4 == 258 )
  {
    luaK_goiffalse(v2->fs, &v);
    v15 = 0;
    v13 = v3->nactvar;
    v11 = LOWORD(v3->ls->dyd->label.n);
    v12 = LOWORD(v3->ls->dyd->gt.n);
    v14 = 0;
    v10 = v3->bl;
    v3->bl = (BlockCnt *)&v10;
    gotostat(v2, v.t);
    while ( 1 )
    {
      v7 = v2->t.token;
      if ( v7 != 59 )
      {
        if ( v7 != 285 )
          break;
      }
      statement(v2);
    }
    switch ( v7 )
    {
      case 260:
      case 261:
      case 262:
      case 286:
        leaveblock(v3);
        break;
      default:
        v6 = luaK_jump(v3);
        goto LABEL_13;
    }
  }
  else
  {
    luaK_goiftrue(v2->fs, &v);
    v15 = 0;
    v13 = v3->nactvar;
    v11 = LOWORD(v3->ls->dyd->label.n);
    v5 = LOWORD(v3->ls->dyd->gt.n);
    v14 = 0;
    v12 = v5;
    v10 = v3->bl;
    v3->bl = (BlockCnt *)&v10;
    v6 = v.f;
LABEL_13:
    statlist(v2);
    leaveblock(v3);
    v8 = v2->t.token;
    if ( v8 == 260 || v8 == 261 )
    {
      v9 = luaK_jump(v3);
      luaK_concat(v3, escapelist, v9);
    }
    luaK_patchtohere(v3, v6);
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0075BFF0) --------------------------------------------------------
void __usercall ifstat(LexState *ls<eax>, int line<ebx>)
{
  LexState *v2; // esi@1
  FuncState *v3; // edi@4
  __int16 v4; // cx@4
  const char *v5; // eax@10
  BlockCnt *v6; // [sp+8h] [bp-14h]@4
  __int16 v7; // [sp+Ch] [bp-10h]@4
  __int16 v8; // [sp+Eh] [bp-Eh]@4
  char v9; // [sp+10h] [bp-Ch]@4
  char v10; // [sp+11h] [bp-Bh]@4
  char v11; // [sp+12h] [bp-Ah]@4
  FuncState *v12; // [sp+14h] [bp-8h]@1
  int escapelist; // [sp+18h] [bp-4h]@1

  v2 = ls;
  v12 = ls->fs;
  escapelist = -1;
  test_then_block(ls, &escapelist);
  while ( v2->t.token == 261 )
    test_then_block(v2, &escapelist);
  if ( v2->t.token == 260 )
  {
    luaX_next(v2);
    v3 = v2->fs;
    v11 = 0;
    v9 = v3->nactvar;
    v7 = LOWORD(v3->ls->dyd->label.n);
    v4 = LOWORD(v3->ls->dyd->gt.n);
    v10 = 0;
    v8 = v4;
    v6 = v3->bl;
    v3->bl = (BlockCnt *)&v6;
    statlist(v2);
    leaveblock(v3);
  }
  if ( v2->t.token != 262 )
  {
    if ( line == v2->linenumber )
      error_expected(v2, 262);
    luaX_token2str(v2, 267);
    luaX_token2str(v2, 262);
    v5 = luaO_pushfstring(v2->L, "%s expected (to close %s at line %d)");
    luaX_syntaxerror(v2, v5);
  }
  luaX_next(v2);
  luaK_patchtohere(v12, escapelist);
}

//----- (0075C100) --------------------------------------------------------
void __usercall localfunc(LexState *ls<ecx>)
{
  LexState *v1; // ebx@1
  FuncState *v2; // esi@1
  TString *v3; // edi@3
  FuncState *v4; // eax@3
  expdesc b; // [sp+Ch] [bp-1Ch]@3
  unsigned int v6; // [sp+24h] [bp-4h]@1
  int v7; // [sp+28h] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  v1 = ls;
  v2 = ls->fs;
  if ( ls->t.token != 288 )
    error_expected(ls, 288);
  v3 = (TString *)LODWORD(ls->t.seminfo.r);
  luaX_next(ls);
  new_localvar(v1, v3);
  v4 = v1->fs;
  ++v4->nactvar;
  v4->f->locvars[*(&v4->ls->dyd->actvar.arr[v4->nactvar - 1].idx + v4->firstlocal)].startpc = v4->pc;
  body(v1, &b, 0, v1->linenumber);
  v2->f->locvars[v2->ls->dyd->actvar.arr[*(_DWORD *)&b.u.ind.idx + v2->firstlocal].idx].startpc = v2->pc;
}
// A85C00: using guessed type int __security_cookie;

//----- (0075C1B0) --------------------------------------------------------
void __usercall localstat(LexState *ls<ecx>)
{
  LexState *v1; // esi@1
  TString *v2; // ST28_4@3
  FuncState *v3; // ebx@3
  Dyndata *v4; // edi@3
  int v5; // eax@11
  int nvars; // [sp+Ch] [bp-24h]@1
  __int16 varname; // [sp+10h] [bp-20h]@3
  expdesc e; // [sp+14h] [bp-1Ch]@11
  unsigned int v9; // [sp+2Ch] [bp-4h]@1
  int v10; // [sp+30h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  v1 = ls;
  nvars = 0;
  while ( 1 )
  {
    if ( v1->t.token != 288 )
      error_expected(v1, 288);
    v2 = (TString *)LODWORD(v1->t.seminfo.r);
    luaX_next(v1);
    v3 = v1->fs;
    v4 = v1->dyd;
    varname = registerlocalvar(v1, v2);
    if ( v4->actvar.n - v3->firstlocal + 1 > 200 )
      errorlimit(v3, 200, "local variables");
    if ( v4->actvar.n + 2 > v4->actvar.size )
      v4->actvar.arr = (Vardesc *)luaM_growaux_(
                                    v1->L,
                                    v4->actvar.arr,
                                    &v4->actvar.size,
                                    2u,
                                    2147483645,
                                    "local variables");
    v4->actvar.arr[v4->actvar.n++].idx = varname;
    ++nvars;
    if ( v1->t.token != 44 )
      break;
    luaX_next(v1);
  }
  if ( v1->t.token == 61 )
  {
    luaX_next(v1);
    v5 = explist(v1, &e);
  }
  else
  {
    v5 = 0;
    e.k = 0;
  }
  adjust_assign(v1, nvars, v5, &e);
  adjustlocalvars(v1, nvars);
}
// 75C1B0: could not find valid save-restore pair for ebx
// A85C00: using guessed type int __security_cookie;

//----- (0075C2D0) --------------------------------------------------------
int __usercall funcname<eax>(LexState *ls<ecx>, expdesc *v<edx>)
{
  expdesc *v2; // ebx@1
  LexState *v3; // esi@1
  TString *v4; // edi@3
  int v5; // eax@3
  FuncState *v7; // [sp+Ch] [bp-24h]@2
  int ismethod; // [sp+10h] [bp-20h]@1
  expdesc k; // [sp+14h] [bp-1Ch]@3
  unsigned int v10; // [sp+2Ch] [bp-4h]@1
  int v11; // [sp+30h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v2 = v;
  v3 = ls;
  ismethod = 0;
  singlevar(ls, v);
  while ( v3->t.token == 46 )
  {
    v7 = v3->fs;
    luaK_exp2anyregup(v7, v2);
    luaX_next(v3);
    if ( v3->t.token != 288 )
      error_expected(v3, 288);
    v4 = (TString *)LODWORD(v3->t.seminfo.r);
    luaX_next(v3);
    v5 = luaK_stringK(v3->fs, v4);
    k.t = -1;
    k.f = -1;
    k.k = 4;
    *(_DWORD *)&k.u.ind.idx = v5;
    luaK_indexed(v7, v2, &k);
  }
  if ( v3->t.token == 58 )
  {
    ismethod = 1;
    fieldsel(v3, v2);
  }
  return ismethod;
}
// A85C00: using guessed type int __security_cookie;

//----- (0075C390) --------------------------------------------------------
void __usercall funcstat(LexState *ls<esi>, int line<ebx>)
{
  int v2; // eax@1
  LexState *v3; // [sp+0h] [bp-3Ch]@0
  expdesc v; // [sp+8h] [bp-34h]@1
  expdesc b; // [sp+20h] [bp-1Ch]@1
  unsigned int v6; // [sp+38h] [bp-4h]@1
  int v7; // [sp+3Ch] [bp+0h]@1

  v6 = (unsigned int)&v7 ^ __security_cookie;
  luaX_next(v3);
  v2 = funcname(ls, &v);
  body(ls, &b, v2, line);
  luaK_storevar(ls->fs, &v, &b);
  luaK_fixline(ls->fs, line);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075C3F0) --------------------------------------------------------
void __usercall exprstat(LexState *ls<esi>)
{
  FuncState *v1; // ebx@1
  int v2; // eax@1
  int v3; // eax@5
  LHS_assign v; // [sp+8h] [bp-24h]@1
  unsigned int v5; // [sp+28h] [bp-4h]@1
  int v6; // [sp+2Ch] [bp+0h]@1

  v5 = (unsigned int)&v6 ^ __security_cookie;
  v1 = ls->fs;
  suffixedexp(ls, &v.v);
  v2 = ls->t.token;
  if ( v2 == 61 || v2 == 44 )
  {
    v.prev = 0;
    assignment(ls, &v, 1);
  }
  else
  {
    if ( v.v.k != 12 )
      luaX_syntaxerror(ls, "syntax error");
    v3 = (int)&v1->f->code[*(_DWORD *)&v.v.u.ind.idx];
    *(_DWORD *)v3 = *(_DWORD *)v3 & 0xFF807FFF | 0x4000;
  }
}
// A85C00: using guessed type int __security_cookie;

//----- (0075C480) --------------------------------------------------------
void __usercall retstat(LexState *ls<ecx>)
{
  LexState *v1; // esi@1
  int v2; // eax@1
  FuncState *v3; // ebx@1
  signed int v4; // edi@3
  int v5; // eax@6
  expdesc e; // [sp+Ch] [bp-1Ch]@3
  unsigned int v7; // [sp+24h] [bp-4h]@1
  int v8; // [sp+28h] [bp+0h]@1

  v7 = (unsigned int)&v8 ^ __security_cookie;
  v1 = ls;
  v2 = ls->t.token;
  v3 = ls->fs;
  switch ( v2 )
  {
    default:
      if ( v2 == 59 )
        goto $LN25_64;
      v4 = explist(ls, &e);
      if ( e.k == 12 || e.k == 13 )
      {
        luaK_setreturns(v3, &e, -1);
        if ( e.k == 12 && v4 == 1 )
          v3->f->code[*(_DWORD *)&e.u.ind.idx] = v3->f->code[*(_DWORD *)&e.u.ind.idx] & 0xFFFFFFDE | 0x1E;
        v5 = v3->nactvar;
        v4 = -1;
      }
      else
      {
        if ( v4 == 1 )
        {
          v5 = luaK_exp2anyreg(v3, &e);
        }
        else
        {
          luaK_exp2nextreg(v3, &e);
          v5 = v3->nactvar;
        }
      }
      break;
    case 260:
    case 261:
    case 262:
    case 277:
    case 286:
$LN25_64:
      v4 = 0;
      v5 = 0;
      break;
  }
  luaK_ret(v3, v5, v4);
  if ( v1->t.token == 59 )
    luaX_next(v1);
}
// A85C00: using guessed type int __security_cookie;

//----- (0075C590) --------------------------------------------------------
void __cdecl statement(LexState *ls)
{
  lua_State *v1; // eax@1
  int v2; // ebx@1
  const char *v3; // eax@11
  TString *v4; // eax@18
  int v5; // eax@20

  v1 = ls->L;
  v2 = ls->linenumber;
  ++v1->nCcalls;
  if ( v1->nCcalls > 0xC8u )
    errorlimit(ls->fs, 200, "C levels");
  switch ( ls->t.token )
  {
    case 0x3B:
      goto LABEL_4;
    case 0x10B:
      ifstat(ls, v2);
      break;
    case 0x116:
      whilestat(ls, v2);
      break;
    case 0x103:
      luaX_next(ls);
      block(ls);
      if ( ls->t.token != 262 )
      {
        if ( v2 == ls->linenumber )
          error_expected(ls, 262);
        luaX_token2str(ls, 259);
        luaX_token2str(ls, 262);
        v3 = luaO_pushfstring(ls->L, "%s expected (to close %s at line %d)");
        luaX_syntaxerror(ls, v3);
      }
LABEL_4:
      luaX_next(ls);
      break;
    case 0x108:
      forstat(ls, v2);
      break;
    case 0x111:
      repeatstat(ls, v2);
      break;
    case 0x109:
      funcstat(ls, v2);
      break;
    case 0x10D:
      luaX_next(ls);
      if ( testnext(ls, 265) )
        localfunc(ls);
      else
        localstat(ls);
      break;
    case 0x11D:
      luaX_next(ls);
      v4 = str_checkname(ls);
      labelstat(ls, v4, v2);
      break;
    case 0x112:
      luaX_next(ls);
      retstat(ls);
      break;
    case 0x102:
    case 0x10A:
      v5 = luaK_jump(ls->fs);
      gotostat(ls, v5);
      break;
    default:
      exprstat(ls);
      break;
  }
  ls->fs->freereg = ls->fs->nactvar;
  --ls->L->nCcalls;
}

//----- (0075C830) --------------------------------------------------------
void __cdecl statlist(LexState *ls)
{
  if ( !block_follow(ls, 1) )
  {
    while ( ls->t.token != 274 )
    {
      statement(ls);
      if ( block_follow(ls, 1) )
        return;
    }
    statement(ls);
  }
}

//----- (0075C880) --------------------------------------------------------
void __usercall mainfunc(LexState *ls<edi>, FuncState *fs<eax>)
{
  FuncState *v2; // esi@1
  Proto *v3; // ecx@1
  TString *v4; // ST08_4@1
  expdesc v; // [sp+4h] [bp-24h]@1
  int token; // [sp+1Ch] [bp-Ch]@1

  v2 = fs;
  open_func(ls, fs, (BlockCnt *)&token);
  v3 = v2->f;
  v.t = -1;
  v.f = -1;
  v3->is_vararg = 1;
  v4 = ls->envn;
  v.k = 7;
  *(_DWORD *)&v.u.ind.idx = 0;
  newupvalue(v2, v4, &v);
  luaX_next(ls);
  statlist(ls);
  if ( ls->t.token != 286 )
    error_expected(ls, 286);
  close_func(ls);
}

//----- (0075C8F0) --------------------------------------------------------
Closure *__cdecl luaY_parser(lua_State *L, Zio *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar)
{
  lua_State *v6; // esi@1
  Closure *v7; // ebx@1
  lua_TValue *v8; // eax@1
  Proto *v9; // eax@3
  Proto *v10; // ecx@3
  LexState lexstate; // [sp+Ch] [bp-84h]@3
  FuncState funcstate; // [sp+5Ch] [bp-34h]@3

  v6 = L;
  v7 = luaF_newLclosure(L, 1);
  v8 = L->top;
  v8->u.i.v__.gc = (GCObject *)v7;
  v8->u.i.tt__ = 2146936134;
  ++v6->top;
  if ( (signed int)(((char *)v6->stack_last - (char *)v6->top) & 0xFFFFFFF8) <= 0 )
    luaD_growstack(L, 0);
  v9 = luaF_newproto(L);
  v7->c.f = (int (__cdecl *)(lua_State *))v9;
  funcstate.f = v9;
  v9->source = luaS_new(L, name);
  v10 = funcstate.f;
  lexstate.dyd = dyd;
  dyd->label.n = 0;
  dyd->gt.n = 0;
  dyd->actvar.n = 0;
  lexstate.buff = buff;
  luaX_setinput(L, &lexstate, z, v10->source, firstchar);
  mainfunc(&lexstate, &funcstate);
  return v7;
}

//----- (0075C9A0) --------------------------------------------------------
void __usercall error_0(LoadState *S<esi>, const char *why<eax>)
{
  luaO_pushfstring(S->L, "%s: %s precompiled chunk");
  luaD_throw(S->L, 3);
}

//----- (0075C9C0) --------------------------------------------------------
TString *__usercall LoadString<eax>(LoadState *S<eax>)
{
  LoadState *v1; // esi@1
  TString *result; // eax@3
  void *v3; // edi@4
  TString *size; // [sp+4h] [bp-4h]@1

  v1 = S;
  if ( luaZ_read(S->Z, &size, 4u) )
    error_0(v1, "truncated");
  result = size;
  if ( size )
  {
    v3 = luaZ_openspace(v1->L, v1->b, (unsigned int)size);
    if ( luaZ_read(v1->Z, v3, (unsigned int)size) )
      error_0(v1, "truncated");
    result = luaS_newlstr(v1->L, (const char *)v3, (unsigned int)((char *)size - 1));
  }
  return result;
}

//----- (0075CA40) --------------------------------------------------------
void __usercall LoadCode(LoadState *S<eax>, Proto *f)
{
  LoadState *v2; // esi@1
  int v3; // ebx@3
  void *v4; // eax@7
  int b; // [sp+4h] [bp-4h]@1

  v2 = S;
  if ( luaZ_read(S->Z, &b, 4u) )
    error_0(v2, "truncated");
  v3 = b;
  if ( b < 0 )
    error_0(v2, "corrupted");
  if ( (unsigned int)(b + 1) > 0x3FFFFFFF )
    luaM_toobig(v2->L);
  v4 = luaM_realloc_(v2->L, 0, 0, 4 * b);
  f->code = (unsigned int *)v4;
  f->sizecode = v3;
  if ( luaZ_read(v2->Z, v4, 4 * v3) )
    error_0(v2, "truncated");
}

//----- (0075CAD0) --------------------------------------------------------
void __usercall LoadConstants(LoadState *S<eax>, Proto *f<edi>)
{
  LoadState *v2; // esi@1
  int v3; // ebx@3
  int v4; // eax@7
  lua_TValue *v5; // ebx@10
  TString *v6; // eax@17
  int v7; // ebx@21
  int v8; // eax@25
  int j; // ebx@27
  double v10; // [sp+8h] [bp-14h]@15
  int b; // [sp+10h] [bp-Ch]@1
  int i; // [sp+14h] [bp-8h]@9
  char v13; // [sp+1Ah] [bp-2h]@13
  char v14; // [sp+1Bh] [bp-1h]@10

  v2 = S;
  if ( luaZ_read(S->Z, &b, 4u) )
    goto LABEL_2;
  v3 = b;
  if ( b < 0 )
    error_0(v2, "corrupted");
  if ( (unsigned int)(b + 1) > 0x1FFFFFFF )
    luaM_toobig(v2->L);
  f->k = (lua_TValue *)luaM_realloc_(v2->L, 0, 0, 8 * b);
  v4 = 0;
  for ( f->sizek = v3; v4 < v3; ++v4 )
    f->k[v4].u.i.tt__ = 2146936064;
  i = 0;
  if ( v3 > 0 )
  {
    while ( 1 )
    {
      v5 = &f->k[i];
      if ( luaZ_read(v2->Z, &v14, 1u) )
        break;
      switch ( v14 )
      {
        case 0:
          v5->u.i.tt__ = 2146936064;
          break;
        case 1:
          if ( luaZ_read(v2->Z, &v13, 1u) )
            goto LABEL_2;
          v5->u.i.v__.gc = (GCObject *)v13;
          v5->u.i.tt__ = 2146936065;
          break;
        case 3:
          if ( luaZ_read(v2->Z, &v10, 8u) )
            goto LABEL_2;
          *(_QWORD *)&v5->u.i.v__.gc = *(_QWORD *)&v10;
          break;
        case 4:
          v6 = LoadString(v2);
          v5->u.i.v__.gc = (GCObject *)v6;
          v5->u.i.tt__ = BYTE4(v6->dummy.u) | 0x7FF7A540;
          break;
        default:
          break;
      }
      ++i;
      if ( i >= b )
        goto LABEL_19;
    }
LABEL_2:
    error_0(v2, "truncated");
  }
LABEL_19:
  if ( luaZ_read(v2->Z, &i, 4u) )
    error_0(v2, "truncated");
  v7 = i;
  if ( i < 0 )
    error_0(v2, "corrupted");
  if ( (unsigned int)(i + 1) > 0x3FFFFFFF )
    luaM_toobig(v2->L);
  f->p = (Proto **)luaM_realloc_(v2->L, 0, 0, 4 * i);
  v8 = 0;
  for ( f->sizep = v7; v8 < v7; ++v8 )
    f->p[v8] = 0;
  for ( j = 0; j < i; ++j )
  {
    f->p[j] = luaF_newproto(v2->L);
    LoadFunction(v2, f->p[j]);
  }
}

//----- (0075CCD0) --------------------------------------------------------
void __usercall LoadUpvalues(Proto *f<eax>, LoadState *S)
{
  Proto *v2; // esi@1
  int v3; // edi@3
  int v4; // eax@7
  int i; // ebx@9
  int b; // [sp+Ch] [bp-8h]@1
  char v7; // [sp+12h] [bp-2h]@11
  char v8; // [sp+13h] [bp-1h]@10

  v2 = f;
  if ( luaZ_read(S->Z, &b, 4u) )
    error_0(S, "truncated");
  v3 = b;
  if ( b < 0 )
    error_0(S, "corrupted");
  if ( (unsigned int)(b + 1) > 0x1FFFFFFF )
    luaM_toobig(S->L);
  v2->upvalues = (Upvaldesc *)luaM_realloc_(S->L, 0, 0, 8 * b);
  v4 = 0;
  for ( v2->sizeupvalues = v3; v4 < v3; ++v4 )
    v2->upvalues[v4].name = 0;
  for ( i = 0; i < v3; ++i )
  {
    if ( luaZ_read(S->Z, &v8, 1u) || (v2->upvalues[i].instack = v8, luaZ_read(S->Z, &v7, 1u)) )
      error_0(S, "truncated");
    v2->upvalues[i].idx = v7;
  }
}

//----- (0075CDD0) --------------------------------------------------------
void __usercall LoadDebug(LoadState *S<eax>, Proto *f<edi>)
{
  LoadState *v2; // esi@1
  unsigned int v3; // ebx@7
  void *v4; // eax@7
  int v5; // edx@7
  int v6; // ebx@11
  int v7; // eax@16
  int v8; // ecx@16
  int v9; // ebx@19
  TString *v10; // eax@21
  char *v11; // eax@22
  Zio *v12; // ST04_4@22
  int v13; // ebx@33
  TString *v14; // eax@35
  void *v15; // [sp+8h] [bp-18h]@26
  int v16; // [sp+Ch] [bp-14h]@24
  char *str; // [sp+10h] [bp-10h]@22
  int v18; // [sp+14h] [bp-Ch]@9
  int i; // [sp+18h] [bp-8h]@18
  unsigned int b; // [sp+1Ch] [bp-4h]@1

  v2 = S;
  f->source = LoadString(S);
  if ( luaZ_read(v2->Z, &b, 4u) )
    goto LABEL_2;
  if ( (b & 0x80000000u) != 0 )
LABEL_4:
    error_0(v2, "corrupted");
  if ( b + 1 > 0x3FFFFFFF )
    luaM_toobig(v2->L);
  v3 = 4 * b;
  v4 = luaM_realloc_(v2->L, 0, 0, 4 * b);
  v5 = b;
  f->lineinfo = (int *)v4;
  f->sizelineinfo = v5;
  if ( luaZ_read(v2->Z, v4, v3) )
    error_0(v2, "truncated");
  if ( luaZ_read(v2->Z, &v18, 4u) )
    error_0(v2, "truncated");
  v6 = v18;
  if ( v18 < 0 )
    error_0(v2, "corrupted");
  if ( (unsigned int)(v18 + 1) > 0x15555555 )
    luaM_toobig(v2->L);
  f->locvars = (LocVar *)luaM_realloc_(v2->L, 0, 0, 12 * v18);
  f->sizelocvars = v6;
  if ( v6 > 0 )
  {
    v7 = 0;
    v8 = v6;
    do
    {
      f->locvars[v7].varname = 0;
      ++v7;
      --v8;
    }
    while ( v8 );
  }
  i = 0;
  if ( v6 > 0 )
  {
    v9 = 0;
    while ( !luaZ_read(v2->Z, &b, 4u) )
    {
      v10 = (TString *)b;
      if ( b )
      {
        v11 = luaZ_openspace(v2->L, v2->b, b);
        v12 = v2->Z;
        str = v11;
        if ( luaZ_read(v12, v11, b) )
          break;
        v10 = luaS_newlstr(v2->L, str, b - 1);
      }
      f->locvars[v9].varname = v10;
      if ( luaZ_read(v2->Z, &v16, 4u) )
        break;
      if ( v16 < 0 )
        goto LABEL_4;
      f->locvars[v9].startpc = v16;
      if ( luaZ_read(v2->Z, &v15, 4u) )
        break;
      if ( (signed int)v15 < 0 )
        goto LABEL_4;
      f->locvars[v9].endpc = (int)v15;
      ++v9;
      ++i;
      if ( i >= v18 )
        goto LABEL_29;
    }
LABEL_2:
    error_0(v2, "truncated");
  }
LABEL_29:
  if ( luaZ_read(v2->Z, &v18, 4u) )
    error_0(v2, "truncated");
  if ( v18 < 0 )
    error_0(v2, "corrupted");
  v13 = 0;
  if ( v18 > 0 )
  {
    while ( !luaZ_read(v2->Z, &b, 4u) )
    {
      v14 = (TString *)b;
      if ( b )
      {
        v15 = luaZ_openspace(v2->L, v2->b, b);
        if ( luaZ_read(v2->Z, v15, b) )
          goto LABEL_2;
        v14 = luaS_newlstr(v2->L, (const char *)v15, b - 1);
      }
      f->upvalues[v13++].name = v14;
      if ( v13 >= v18 )
        return;
    }
    goto LABEL_2;
  }
}

//----- (0075D070) --------------------------------------------------------
void __cdecl LoadFunction(LoadState *S, Proto *f)
{
  LoadState *v2; // esi@1
  Proto *v3; // edi@5

  v2 = S;
  if ( luaZ_read(S->Z, &S, 4u) )
    error_0(v2, "truncated");
  if ( (signed int)S < 0 )
    error_0(v2, "corrupted");
  v3 = f;
  f->linedefined = (int)S;
  if ( luaZ_read(v2->Z, &S, 4u) )
    error_0(v2, "truncated");
  if ( (signed int)S < 0 )
    error_0(v2, "corrupted");
  v3->lastlinedefined = (int)S;
  if ( luaZ_read(v2->Z, (char *)&S + 3, 1u) )
    error_0(v2, "truncated");
  v3->numparams = BYTE3(S);
  if ( luaZ_read(v2->Z, (char *)&S + 3, 1u) )
    error_0(v2, "truncated");
  v3->is_vararg = BYTE3(S);
  if ( luaZ_read(v2->Z, (char *)&S + 3, 1u) )
    error_0(v2, "truncated");
  v3->maxstacksize = BYTE3(S);
  LoadCode(v2, v3);
  LoadConstants(v2, v3);
  LoadUpvalues(v2, v3);
  LoadDebug(v2, v3);
}

//----- (0075D180) --------------------------------------------------------
void __cdecl luaU_header(char *h)
{
  *(_DWORD *)h = 1635077147;
  *((_WORD *)h + 2) = 82;
  *((_WORD *)h + 3) = 1025;
  *((_WORD *)h + 4) = 1028;
  *((_WORD *)h + 5) = 8;
  *((_DWORD *)h + 3) = dword_9DF27C;
  *((_WORD *)h + 8) = word_9DF280;
}
// 9DF27C: using guessed type int dword_9DF27C;
// 9DF280: using guessed type __int16 word_9DF280;

//----- (0075D1C0) --------------------------------------------------------
void __usercall LoadHeader(LoadState *S<ecx>)
{
  LoadState *v1; // esi@1
  Zio *v2; // ST00_4@1
  signed int v3; // edx@3
  int v4; // eax@3
  int v5; // ecx@3
  signed int v6; // eax@11
  int v7; // ecx@11
  char s[18]; // [sp+8h] [bp-2Ch]@1
  char h[18]; // [sp+1Ch] [bp-18h]@1
  unsigned int v10; // [sp+30h] [bp-4h]@1
  int v11; // [sp+34h] [bp+0h]@1

  v10 = (unsigned int)&v11 ^ __security_cookie;
  v1 = S;
  *(_DWORD *)&h[12] = dword_9DF27C;
  v2 = S->Z;
  *(_DWORD *)h = 1635077147;
  *(_DWORD *)&h[4] = 67174482;
  *(_DWORD *)&h[8] = 525316;
  *(_WORD *)&h[16] = word_9DF280;
  s[0] = 27;
  if ( luaZ_read(v2, &s[1], 0x11u) )
    error_0(v1, "truncated");
  v3 = 18;
  v4 = (int)s;
  v5 = (int)h;
  do
  {
    if ( *(_DWORD *)v5 != *(_DWORD *)v4 )
      goto LABEL_8;
    v3 -= 4;
    v4 += 4;
    v5 += 4;
  }
  while ( (unsigned int)v3 >= 4 );
  if ( *(_BYTE *)v4 != *(_BYTE *)v5 || *(_BYTE *)(v4 + 1) != *(_BYTE *)(v5 + 1) )
  {
LABEL_8:
    if ( *(_DWORD *)s == 1635077147 )
    {
      if ( s[4] == 82 && !s[5] )
      {
        v6 = 12;
        v7 = 0;
        while ( *(_DWORD *)&h[v7] == *(_DWORD *)&s[v7] )
        {
          v6 -= 4;
          v7 += 4;
          if ( (unsigned int)v6 < 4 )
            error_0(v1, "corrupted");
        }
        error_0(v1, "incompatible");
      }
      error_0(v1, "version mismatch in");
    }
    error_0(v1, "not a");
  }
}
// 9DF27C: using guessed type int dword_9DF27C;
// 9DF280: using guessed type __int16 word_9DF280;
// A85C00: using guessed type int __security_cookie;

//----- (0075D2C0) --------------------------------------------------------
Closure *__cdecl luaU_undump(lua_State *L, Zio *Z, Mbuffer *buff, const char *name)
{
  const char *v4; // ecx@1
  const char v5; // al@1
  lua_State *v6; // esi@7
  Closure *v7; // edi@7
  lua_TValue *v8; // eax@7
  Proto *v9; // eax@9
  int (__cdecl *v10)(lua_State *); // ebx@9
  Closure *result; // eax@10
  lua_TValue *v12; // esi@10
  LoadState S; // [sp+0h] [bp-10h]@4

  v4 = name;
  v5 = *name;
  if ( *name == 64 || v5 == 61 )
  {
    v4 = name + 1;
  }
  else
  {
    if ( v5 == 27 )
    {
      S.name = "binary string";
      goto LABEL_7;
    }
  }
  S.name = v4;
LABEL_7:
  v6 = L;
  S.b = buff;
  S.L = L;
  S.Z = Z;
  LoadHeader(&S);
  v7 = luaF_newLclosure(L, 1);
  v8 = L->top;
  v8->u.i.v__.gc = (GCObject *)v7;
  v8->u.i.tt__ = 2146936134;
  ++v6->top;
  if ( (signed int)(((char *)v6->stack_last - (char *)v6->top) & 0xFFFFFFF8) <= 0 )
    luaD_growstack(L, 0);
  v9 = luaF_newproto(L);
  v7->c.f = (int (__cdecl *)(lua_State *))v9;
  LoadFunction(&S, v9);
  v10 = v7->c.f;
  if ( *((_DWORD *)v10 + 10) == 1 )
  {
    result = v7;
  }
  else
  {
    result = luaF_newLclosure(L, *((_DWORD *)v10 + 10));
    result->c.f = v10;
    v12 = L->top;
    v12[-1].u.i.v__.gc = (GCObject *)result;
    *((_DWORD *)v12 - 1) = 2146936134;
  }
  return result;
}

//----- (0075D390) --------------------------------------------------------
int __cdecl luaK_getlabel(FuncState *fs)
{
  int result; // eax@1

  result = fs->pc;
  fs->lasttarget = result;
  return result;
}

//----- (0075D3A0) --------------------------------------------------------
int __usercall need_value<eax>(FuncState *fs<eax>, int list<edx>)
{
  unsigned int *v2; // edi@2
  int v3; // eax@3
  int v4; // esi@4
  int v5; // eax@7
  int result; // eax@9

  if ( list == -1 )
  {
LABEL_9:
    result = 0;
  }
  else
  {
    v2 = fs->f->code;
    while ( 1 )
    {
      v3 = (int)&v2[list];
      if ( list < 1 || (v4 = v3 - 4, !(luaP_opmodes[*(_DWORD *)(v3 - 4) & 0x3F] & 0x80)) )
        v4 = (int)&v2[list];
      if ( (*(_BYTE *)v4 & 0x3F) != 28 )
        break;
      v5 = (*(_DWORD *)v3 >> 14) - 131071;
      if ( v5 != -1 )
      {
        list += v5 + 1;
        if ( list != -1 )
          continue;
      }
      goto LABEL_9;
    }
    result = 1;
  }
  return result;
}

//----- (0075D400) --------------------------------------------------------
void __usercall removevalues(FuncState *fs<edx>, int list<eax>)
{
  int i; // esi@1
  unsigned int *v3; // eax@2
  int v4; // ecx@3
  unsigned int v5; // eax@7

  for ( i = list; i != -1; i += v5 + 1 )
  {
    v3 = &fs->f->code[i];
    if ( i < 1 || (v4 = (int)(v3 - 1), !(luaP_opmodes[*(v3 - 1) & 0x3F] & 0x80)) )
      v4 = (int)&fs->f->code[i];
    if ( (*(_BYTE *)v4 & 0x3F) == 28 )
      *(_DWORD *)v4 = (unsigned int)((char *)loc_7FBFFC + 4) & *(_DWORD *)v4 | ((*(_DWORD *)v4 & 0xFFB7FFFF | 0x360000u) >> 17);
    v5 = (fs->f->code[i] >> 14) - 131071;
    if ( v5 == -1 )
      break;
  }
}
// 7FBFFC: using guessed type int __stdcall(int kStream);

//----- (0075D480) --------------------------------------------------------
void __usercall patchlistaux(int list<eax>, FuncState *fs, int vtarget, int reg, int dtarget)
{
  int v5; // edi@1
  unsigned int *v6; // esi@2
  unsigned int v7; // eax@2
  int v8; // esi@2
  int v9; // eax@2
  int v10; // ecx@6
  unsigned int v11; // eax@8
  unsigned int v12; // esi@11
  int v13; // ecx@14
  int next; // [sp+4h] [bp-4h]@3

  v5 = list;
  if ( list != -1 )
  {
    do
    {
      v6 = fs->f->code;
      v7 = v6[v5];
      v8 = (int)&v6[v5];
      v9 = (v7 >> 14) - 131071;
      if ( v9 == -1 )
        next = -1;
      else
        next = v9 + v5 + 1;
      if ( v5 < 1 || (v10 = v8 - 4, !(luaP_opmodes[*(_DWORD *)(v8 - 4) & 0x3F] & 0x80)) )
        v10 = v8;
      v11 = *(_DWORD *)v10;
      if ( (*(_BYTE *)v10 & 0x3F) == 28 )
      {
        if ( reg == 255 || reg == v11 >> 23 )
          v12 = (unsigned int)((char *)loc_7FBFFC + 4) & v11 | ((v11 & 0xFFB7FFFF | 0x360000) >> 17);
        else
          v12 = v11 ^ ((unsigned __int16)v11 ^ (unsigned __int16)((_WORD)reg << 6)) & 0x3FC0;
        *(_DWORD *)v10 = v12;
        v8 = (int)&fs->f->code[v5];
        if ( abs(vtarget - v5 - 1) > 131071 )
          luaX_syntaxerror(fs->ls, "control structure too long");
        v13 = *(_DWORD *)v8 & 0x3FFF ^ ((vtarget - v5 + 131070) << 14);
      }
      else
      {
        if ( abs(dtarget - v5 - 1) > 131071 )
          luaX_syntaxerror(fs->ls, "control structure too long");
        v13 = *(_DWORD *)v8 & 0x3FFF ^ ((dtarget - v5 + 131070) << 14);
      }
      v5 = next;
      *(_DWORD *)v8 = v13;
    }
    while ( next != -1 );
  }
}
// 7FBFFC: using guessed type int __stdcall loc_7FBFFC(int kStream);

//----- (0075D5B0) --------------------------------------------------------
void __cdecl luaK_patchclose(FuncState *fs, int list, int level)
{
  int v3; // ecx@1
  unsigned int v4; // eax@2
  int v5; // edx@3
  unsigned int *v6; // eax@5

  v3 = list;
  if ( list != -1 )
  {
    do
    {
      v4 = (fs->f->code[v3] >> 14) - 131071;
      if ( v4 == -1 )
        v5 = -1;
      else
        v5 = v4 + v3 + 1;
      v6 = &fs->f->code[v3];
      *v6 = ((unsigned __int8)(level + 1) << 6) | *v6 & 0xFFFFC03F;
      v3 = v5;
    }
    while ( v5 != -1 );
  }
}

//----- (0075D610) --------------------------------------------------------
void __cdecl luaK_concat(FuncState *fs, int *l1, int l2)
{
  int v3; // ecx@2
  unsigned int *v4; // esi@4
  int v5; // eax@5
  int v6; // eax@6

  if ( l2 != -1 )
  {
    v3 = *l1;
    if ( *l1 == -1 )
    {
      *l1 = l2;
    }
    else
    {
      v4 = fs->f->code;
      while ( 1 )
      {
        v5 = (v4[v3] >> 14) - 131071;
        if ( v5 == -1 )
          break;
        v6 = v5 + v3 + 1;
        if ( v6 == -1 )
          break;
        v3 = v6;
      }
      if ( abs(l2 - v3 - 1) > 131071 )
        luaX_syntaxerror(fs->ls, "control structure too long");
      v4[v3] = v4[v3] & 0x3FFF ^ ((l2 - v3 + 131070) << 14);
    }
  }
}

//----- (0075D690) --------------------------------------------------------
int __usercall luaK_code<eax>(FuncState *fs<esi>, unsigned int i)
{
  Proto *v2; // edi@1
  int v3; // ecx@1
  int result; // eax@5

  v2 = fs->f;
  patchlistaux(fs, fs->jpc, fs->pc, 255, fs->pc);
  v3 = fs->pc + 1;
  fs->jpc = -1;
  if ( v3 > v2->sizecode )
    v2->code = (unsigned int *)luaM_growaux_(fs->ls->L, v2->code, &v2->sizecode, 4u, 2147483645, "opcodes");
  v2->code[fs->pc] = i;
  if ( fs->pc + 1 > v2->sizelineinfo )
    v2->lineinfo = (int *)luaM_growaux_(fs->ls->L, v2->lineinfo, &v2->sizelineinfo, 4u, 2147483645, "opcodes");
  v2->lineinfo[fs->pc] = fs->ls->lastline;
  result = fs->pc;
  fs->pc = result + 1;
  return result;
}

//----- (0075D740) --------------------------------------------------------
int __cdecl luaK_codeABC(FuncState *fs, OpCode o, int a, int b, int c)
{
  return luaK_code(fs, o | ((a | ((c | (b << 9)) << 8)) << 6));
}

//----- (0075D770) --------------------------------------------------------
int __cdecl luaK_codeABx(FuncState *fs, OpCode o, int a, unsigned int bc)
{
  return luaK_code(fs, o | ((a | (bc << 8)) << 6));
}

//----- (0075D7A0) --------------------------------------------------------
int __cdecl luaK_codek(FuncState *fs, int reg, int k)
{
  int result; // eax@2
  int v4; // ebx@3

  if ( k > 262143 )
  {
    v4 = luaK_code(fs, (reg << 6) | 2);
    luaK_code(fs, (k << 6) | 0x27);
    result = v4;
  }
  else
  {
    result = luaK_code(fs, ((reg | (k << 8)) << 6) | 1);
  }
  return result;
}

//----- (0075D800) --------------------------------------------------------
void __cdecl luaK_checkstack(FuncState *fs, int n)
{
  int v2; // eax@1

  v2 = n + fs->freereg;
  if ( v2 > fs->f->maxstacksize )
  {
    if ( v2 >= 250 )
      luaX_syntaxerror(fs->ls, "function or expression too complex");
    fs->f->maxstacksize = v2;
  }
}

//----- (0075D840) --------------------------------------------------------
void __cdecl luaK_reserveregs(FuncState *fs, int n)
{
  int v2; // eax@1

  v2 = n + fs->freereg;
  if ( v2 > fs->f->maxstacksize )
  {
    if ( v2 >= 250 )
      luaX_syntaxerror(fs->ls, "function or expression too complex");
    fs->f->maxstacksize = v2;
  }
  fs->freereg += n;
}

//----- (0075D880) --------------------------------------------------------
void __usercall freeexp(FuncState *fs<ecx>, expdesc *e<eax>)
{
  signed int v2; // eax@2

  if ( e->k == 6 )
  {
    v2 = *(_DWORD *)&e->u.ind.idx;
    if ( !(v2 & 0x100) )
    {
      if ( v2 >= fs->nactvar )
        --fs->freereg;
    }
  }
}

//----- (0075D8A0) --------------------------------------------------------
int __usercall addk<eax>(lua_TValue *key<ecx>, FuncState *fs, lua_TValue *v)
{
  lua_TValue *v3; // eax@1
  Proto *v4; // esi@1
  int v5; // edi@2
  int v6; // ecx@3
  FuncState *v7; // edx@8
  int v8; // edi@8
  int v9; // ebx@8
  void *v10; // eax@9
  int v11; // ecx@12
  lua_TValue *idx; // [sp+14h] [bp-Ch]@1
  lua_State *L; // [sp+18h] [bp-8h]@1
  signed int k; // [sp+1Ch] [bp-4h]@2

  L = fs->ls->L;
  v3 = luaH_set(L, fs->h, key);
  v4 = fs->f;
  idx = v3;
  if ( (v3->u.i.tt__ & 0x7FFFFF00) != 2146936064 )
  {
    k = (signed int)*(double *)&v3->u.i.v__.gc;
    v5 = (int)&v4->k[k];
    v6 = (*(_DWORD *)(v5 + 4) & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)(*(_DWORD *)(v5 + 4) == v->u.i.tt__) : (unsigned __int8)((v->u.i.tt__ & 0x7FFFFF00) != 2146936064);
    if ( v6 )
    {
      if ( luaV_equalobj_(0, (lua_TValue *)v5, v) )
        return k;
      v3 = idx;
    }
  }
  v7 = fs;
  v8 = v4->sizek;
  v9 = (int)&v4->sizek;
  k = fs->nk;
  *(double *)&v3->u.i.v__.gc = (double)k;
  if ( k + 1 > v4->sizek )
  {
    v10 = luaM_growaux_(L, v4->k, &v4->sizek, 8u, 67108863, "constants");
    v7 = fs;
    v4->k = (lua_TValue *)v10;
  }
  for ( ; v8 < *(_DWORD *)v9; ++v8 )
    v4->k[v8].u.i.tt__ = 2146936064;
  *(_QWORD *)&v4->k[k].u.i.v__.gc = *(_QWORD *)&v->u.i.v__.gc;
  ++v7->nk;
  v11 = v->u.i.tt__;
  if ( (v11 & 0x7FFFFF00) != 2146936064 )
    LOBYTE(v11) = 3;
  if ( v11 & 0x40 && v->u.i.v__.gc->gch.marked & 3 && v4->marked & 4 )
    luaC_barrier_(L, (GCObject *)&v4->next, v->u.i.v__.gc);
  return k;
}

//----- (0075DA10) --------------------------------------------------------
int __cdecl luaK_stringK(FuncState *fs, TString *s)
{
  unsigned __int64 o; // [sp+0h] [bp-8h]@1

  o = __PAIR__(BYTE4(s->dummy.u), (unsigned int)s) | 0x7FF7A54000000000i64;
  return addk(fs, (lua_TValue *)&o, (lua_TValue *)&o);
}

//----- (0075DA40) --------------------------------------------------------
int __cdecl luaK_numberK(FuncState *fs, long double r)
{
  lua_State *v2; // esi@1
  int result; // eax@2
  lua_TValue *v4; // edi@3
  TString *v5; // eax@3
  lua_TValue o; // [sp+0h] [bp-8h]@1

  v2 = fs->ls->L;
  *(double *)&o.u.i.v__.gc = r;
  if ( 0.0 == r )
  {
    v4 = v2->top;
    v2->top = v4 + 1;
    v5 = luaS_newlstr(v2, (const char *)&r, 8u);
    v4->u.i.v__.gc = (GCObject *)v5;
    v4->u.i.tt__ = BYTE4(v5->dummy.u) | 0x7FF7A540;
    result = addk(fs, v2->top - 1, &o);
    --v2->top;
  }
  else
  {
    result = addk(fs, &o, &o);
  }
  return result;
}

//----- (0075DAD0) --------------------------------------------------------
void __cdecl luaK_setreturns(FuncState *fs, expdesc *e, int nresults)
{
  unsigned int *v3; // ecx@4
  int v4; // ecx@4

  if ( e->k == 12 )
  {
    fs->f->code[*(_DWORD *)&e->u.ind.idx] ^= (unsigned int)((char *)loc_7FBFFC + 4) & (fs->f->code[*(_DWORD *)&e->u.ind.idx] ^ ((nresults + 1) << 14));
  }
  else
  {
    if ( e->k == 13 )
    {
      v3 = &fs->f->code[*(_DWORD *)&e->u.ind.idx];
      *v3 = (unsigned int)loc_7FFFFF & *v3 ^ ((nresults + 1) << 23);
      fs->f->code[*(_DWORD *)&e->u.ind.idx] = fs->f->code[*(_DWORD *)&e->u.ind.idx] & 0xFFFFC03F | (fs->freereg << 6);
      v4 = fs->freereg + 1;
      if ( v4 > fs->f->maxstacksize )
      {
        if ( v4 >= 250 )
          luaX_syntaxerror(fs->ls, "function or expression too complex");
        fs->f->maxstacksize = v4;
      }
      ++fs->freereg;
    }
  }
}
// 7FBFFC: using guessed type int __stdcall loc_7FBFFC(int kStream);
// 7FFFFF: using guessed type int loc_7FFFFF();

//----- (0075DB80) --------------------------------------------------------
void __cdecl luaK_setoneret(FuncState *fs, expdesc *e)
{
  int v2; // ecx@2
  unsigned int *v3; // ecx@4

  if ( e->k == 12 )
  {
    v2 = *(_DWORD *)&e->u.ind.idx;
    e->k = 6;
    *(_DWORD *)&e->u.ind.idx = (fs->f->code[v2] >> 6) & 0xFF;
  }
  else
  {
    if ( e->k == 13 )
    {
      v3 = &fs->f->code[*(_DWORD *)&e->u.ind.idx];
      *v3 = (unsigned int)loc_7FFFFF & *v3 | 0x1000000;
      e->k = 11;
    }
  }
}
// 7FFFFF: using guessed type int loc_7FFFFF();

//----- (0075DBE0) --------------------------------------------------------
void __cdecl luaK_dischargevars(FuncState *fs, expdesc *e)
{
  FuncState *v2; // esi@3
  int v3; // eax@3
  signed int v4; // eax@4
  signed int v5; // ecx@4
  signed int v6; // eax@8

  switch ( e->k )
  {
    case 7:
      e->k = 6;
      break;
    case 8:
      v2 = fs;
      v3 = (*(_DWORD *)&e->u.ind.idx << 23) | 5;
      goto LABEL_13;
    case 9:
      v4 = e->u.ind.idx;
      v2 = fs;
      v5 = 6;
      if ( !(v4 & 0x100) && v4 >= fs->nactvar )
        --fs->freereg;
      if ( e->u.ind.vt == 7 )
      {
        v6 = e->u.ind.t;
        if ( !(v6 & 0x100) )
        {
          if ( v6 >= fs->nactvar )
            --fs->freereg;
        }
        v5 = 7;
      }
      v3 = v5 | ((e->u.ind.idx | (e->u.ind.t << 9)) << 14);
LABEL_13:
      *(_DWORD *)&e->u.ind.idx = luaK_code(v2, v3);
      e->k = 11;
      break;
    case 0xC:
    case 0xD:
      luaK_setoneret(fs, e);
      break;
    default:
      return;
  }
}

//----- (0075DCB0) --------------------------------------------------------
void __usercall invertjump(FuncState *fs<ecx>, expdesc *e<eax>)
{
  signed int v2; // eax@1
  unsigned int *v3; // ecx@1

  v2 = *(_DWORD *)&e->u.ind.idx;
  v3 = &fs->f->code[v2];
  if ( v2 >= 1 && luaP_opmodes[*(v3 - 1) & 0x3F] & 0x80 )
    --v3;
  *v3 ^= ((unsigned __int16)*v3 ^ (unsigned __int16)(((*v3 & 0x3FC0) == 0) << 6)) & 0x3FC0;
}

//----- (0075DD00) --------------------------------------------------------
int __usercall constfolding<eax>(OpCode op<edx>, expdesc *e1<esi>, expdesc *e2<ecx>)
{
  int result; // eax@10

  if ( e1->k != 5
    || e1->t != -1
    || e1->f != -1
    || e2->k != 5
    || e2->t != -1
    || e2->f != -1
    || (op == 16 || op == 17) && 0.0 == *(double *)&e2->u.ind.idx )
  {
    result = 0;
  }
  else
  {
    *(long double *)&e1->u.ind.idx = luaO_arith(op - 13, *(double *)&e1->u.ind.idx, *(double *)&e2->u.ind.idx);
    result = 1;
  }
  return result;
}

//----- (0075DD70) --------------------------------------------------------
void __cdecl luaK_fixline(FuncState *fs, int line)
{
  fs->f->lineinfo[fs->pc - 1] = line;
}

//----- (0075DD90) --------------------------------------------------------
void __cdecl luaK_setlist(FuncState *fs, int base, int nelems, int tostore)
{
  int v4; // edi@1
  int v5; // eax@1

  v4 = (nelems - 1) / 50 + 1;
  v5 = tostore != -1 ? tostore : 0;
  if ( v4 > 511 )
  {
    if ( v4 > 67108863 )
      luaX_syntaxerror(fs->ls, "constructor too long");
    luaK_code(fs, ((base | (v5 << 17)) << 6) | 0x24);
    luaK_code(fs, (v4 << 6) | 0x27);
    fs->freereg = base + 1;
  }
  else
  {
    luaK_code(fs, ((base | ((v4 | (v5 << 9)) << 8)) << 6) | 0x24);
    fs->freereg = base + 1;
  }
}

//----- (0075DE40) --------------------------------------------------------
void __cdecl luaK_nil(FuncState *fs, int from, int n)
{
  int v3; // ebx@1
  int v4; // edx@1
  int v5; // eax@1
  unsigned int *v6; // edi@2
  unsigned int v7; // ecx@2
  int v8; // eax@3
  int v9; // ecx@3

  v3 = from;
  v4 = from + n - 1;
  v5 = fs->pc;
  if ( v5 <= fs->lasttarget || (v6 = &fs->f->code[v5 - 1], v7 = *v6, (*v6 & 0x3F) != 4) )
    goto LABEL_12;
  v8 = (v7 >> 6) & 0xFF;
  v9 = v8 + (v7 >> 23);
  if ( from < v8 )
  {
LABEL_6:
    if ( v8 <= from + n )
      goto LABEL_7;
LABEL_12:
    luaK_code(fs, ((from | ((n - 1) << 17)) << 6) | 4);
    return;
  }
  if ( from > v9 + 1 )
  {
    if ( from > v8 )
      goto LABEL_12;
    goto LABEL_6;
  }
LABEL_7:
  if ( v8 < from )
    v3 = v8;
  if ( v9 > v4 )
    v4 = v9;
  *v6 = (unsigned int)((char *)loc_7FC03E + 1) & *v6 | ((unsigned __int8)v3 << 6) | ((v4 - v3) << 23) & 0xFF800000;
}
// 7FC03E: using guessed type int __stdcall(int kStream);

//----- (0075DEF0) --------------------------------------------------------
int __cdecl luaK_jump(FuncState *fs)
{
  FuncState *v1; // esi@1
  int v2; // edi@1

  v1 = fs;
  v2 = fs->jpc;
  fs->jpc = -1;
  fs = (FuncState *)luaK_code(v1, 0x7FFF8017u);
  luaK_concat(v1, (int *)&fs, v2);
  return (int)fs;
}

//----- (0075DF30) --------------------------------------------------------
void __cdecl luaK_ret(FuncState *fs, int first, int nret)
{
  luaK_code(fs, (first << 6) | ((nret + 1) << 23) | 0x1F);
}

//----- (0075DF60) --------------------------------------------------------
void __cdecl luaK_patchtohere(FuncState *fs, int list)
{
  fs->lasttarget = fs->pc;
  luaK_concat(fs, &fs->jpc, list);
}

//----- (0075DF80) --------------------------------------------------------
void __usercall discharge2reg(FuncState *fs<eax>, expdesc *e<ebx>, int reg<edi>)
{
  FuncState *v3; // esi@1
  int v4; // eax@5
  int v5; // eax@7
  expdesc *v6; // [sp+4h] [bp-8h]@0

  v3 = fs;
  luaK_dischargevars(fs, v6);
  switch ( e->k )
  {
    case 1:
      luaK_nil(v3, reg, 1);
      *(_DWORD *)&e->u.ind.idx = reg;
      e->k = 6;
      break;
    case 2:
    case 3:
      luaK_code(v3, ((reg | ((e->k == 2) << 17)) << 6) | 3);
      *(_DWORD *)&e->u.ind.idx = reg;
      e->k = 6;
      break;
    case 4:
      luaK_codek(v3, reg, *(_DWORD *)&e->u.ind.idx);
      *(_DWORD *)&e->u.ind.idx = reg;
      e->k = 6;
      break;
    case 5:
      v4 = luaK_numberK(v3, *(double *)&e->u.ind.idx);
      luaK_codek(v3, reg, v4);
      *(_DWORD *)&e->u.ind.idx = reg;
      e->k = 6;
      break;
    case 0xB:
      v3->f->code[*(_DWORD *)&e->u.ind.idx] ^= (v3->f->code[*(_DWORD *)&e->u.ind.idx] ^ (reg << 6)) & 0x3FC0;
      *(_DWORD *)&e->u.ind.idx = reg;
      e->k = 6;
      break;
    case 6:
      v5 = *(_DWORD *)&e->u.ind.idx;
      if ( reg != v5 )
        luaK_code(v3, (reg | (v5 << 17)) << 6);
      *(_DWORD *)&e->u.ind.idx = reg;
      e->k = 6;
      break;
    default:
      return;
  }
}

//----- (0075E0A0) --------------------------------------------------------
void __usercall discharge2anyreg(FuncState *fs<eax>, expdesc *e<ecx>)
{
  expdesc *v2; // ebx@1
  int v3; // ecx@2

  v2 = e;
  if ( e->k != 6 )
  {
    v3 = fs->freereg + 1;
    if ( v3 > fs->f->maxstacksize )
    {
      if ( v3 >= 250 )
        luaX_syntaxerror(fs->ls, "function or expression too complex");
      fs->f->maxstacksize = v3;
    }
    ++fs->freereg;
    discharge2reg(fs, v2, fs->freereg - 1);
  }
}

//----- (0075E0F0) --------------------------------------------------------
void __usercall exp2reg(FuncState *fs<ecx>, expdesc *e<eax>, int reg)
{
  FuncState *v3; // esi@1
  expdesc *v4; // ebx@1
  int v5; // edx@3
  int v6; // edi@3
  int v7; // edi@8
  int v8; // ST14_4@9
  int v9; // edi@10
  signed int p_t; // [sp+Ch] [bp-Ch]@4
  signed int p_f; // [sp+10h] [bp-8h]@4
  int fj; // [sp+14h] [bp-4h]@7

  v3 = fs;
  v4 = e;
  discharge2reg(fs, e, reg);
  if ( v4->k == 10 )
    luaK_concat(v3, &v4->t, *(_DWORD *)&v4->u.ind.idx);
  v5 = v4->t;
  v6 = v4->f;
  if ( v5 != v6 )
  {
    p_f = -1;
    p_t = -1;
    if ( need_value(v3, v5) || need_value(v3, v6) )
    {
      if ( v4->k == 10 )
      {
        fj = -1;
      }
      else
      {
        v7 = v3->jpc;
        v3->jpc = -1;
        fj = luaK_code(v3, 0x7FFF8017u);
        luaK_concat(v3, &fj, v7);
      }
      v3->lasttarget = v3->pc;
      p_f = luaK_code(v3, (reg << 6) | 0x4003);
      v3->lasttarget = v3->pc;
      p_t = luaK_code(v3, (unsigned int)((char *)loc_800001 + 2) | (reg << 6));
      v8 = fj;
      v3->lasttarget = v3->pc;
      luaK_concat(v3, &v3->jpc, v8);
    }
    v9 = v3->pc;
    v3->lasttarget = v9;
    patchlistaux(v3, v4->f, v9, reg, p_f);
    patchlistaux(v3, v4->t, v9, reg, p_t);
  }
  v4->t = -1;
  v4->f = -1;
  *(_DWORD *)&v4->u.ind.idx = reg;
  v4->k = 6;
}
// 800001: using guessed type int();

//----- (0075E220) --------------------------------------------------------
void __cdecl luaK_exp2nextreg(FuncState *fs, expdesc *e)
{
  signed int v2; // eax@2
  int v3; // eax@5

  luaK_dischargevars(fs, e);
  if ( e->k == 6 )
  {
    v2 = *(_DWORD *)&e->u.ind.idx;
    if ( !(v2 & 0x100) )
    {
      if ( v2 >= fs->nactvar )
        --fs->freereg;
    }
  }
  v3 = fs->freereg + 1;
  if ( v3 > fs->f->maxstacksize )
  {
    if ( v3 >= 250 )
      luaX_syntaxerror(fs->ls, "function or expression too complex");
    fs->f->maxstacksize = v3;
  }
  ++fs->freereg;
  exp2reg(fs, e, fs->freereg - 1);
}

//----- (0075E290) --------------------------------------------------------
int __cdecl luaK_exp2anyreg(FuncState *fs, expdesc *e)
{
  int result; // eax@2

  luaK_dischargevars(fs, e);
  if ( e->k != 6 )
    goto LABEL_8;
  result = *(_DWORD *)&e->u.ind.idx;
  if ( e->t == e->f )
    return result;
  if ( result < fs->nactvar )
  {
LABEL_8:
    luaK_exp2nextreg(fs, e);
    result = *(_DWORD *)&e->u.ind.idx;
  }
  else
  {
    exp2reg(fs, e, *(_DWORD *)&e->u.ind.idx);
    result = *(_DWORD *)&e->u.ind.idx;
  }
  return result;
}

//----- (0075E2F0) --------------------------------------------------------
void __cdecl luaK_exp2anyregup(FuncState *fs, expdesc *e)
{
  if ( e->k != 8 || e->t != e->f )
  {
    luaK_dischargevars(fs, e);
    if ( e->k != 6 )
      goto LABEL_10;
    if ( e->t == e->f )
      return;
    if ( *(_DWORD *)&e->u.ind.idx < (signed int)fs->nactvar )
LABEL_10:
      luaK_exp2nextreg(fs, e);
    else
      exp2reg(fs, e, *(_DWORD *)&e->u.ind.idx);
  }
}

//----- (0075E350) --------------------------------------------------------
void __cdecl luaK_exp2val(FuncState *fs, expdesc *e)
{
  if ( e->t == e->f )
  {
    luaK_dischargevars(fs, e);
    return;
  }
  luaK_dischargevars(fs, e);
  if ( e->k != 6 )
    goto LABEL_11;
  if ( e->t == e->f )
    return;
  if ( *(_DWORD *)&e->u.ind.idx < (signed int)fs->nactvar )
  {
LABEL_11:
    luaK_exp2nextreg(fs, e);
    return;
  }
  exp2reg(fs, e, *(_DWORD *)&e->u.ind.idx);
}

//----- (0075E3C0) --------------------------------------------------------
int __cdecl luaK_exp2RK(FuncState *fs, expdesc *e)
{
  expkind v2; // eax@1
  Table *v3; // eax@4
  int v4; // eax@6
  int result; // eax@7
  lua_TValue *v6; // [sp+4h] [bp-1Ch]@4
  char v7; // [sp+10h] [bp-10h]@4
  int v8; // [sp+14h] [bp-Ch]@4
  lua_TValue key; // [sp+18h] [bp-8h]@4

  luaK_exp2val(fs, e);
  v2 = e->k;
  switch ( e->k )
  {
    case 1:
    case 2:
    case 3:
      if ( fs->nk > 255 )
        goto LABEL_10;
      if ( v2 == 1 )
      {
        v3 = fs->h;
        v8 = 2146936064;
        key = (lua_TValue)__PAIR__(2146936133, (unsigned int)v3);
        v6 = (lua_TValue *)&v7;
      }
      else
      {
        key.u.i.tt__ = 2146936065;
        v6 = &key;
        key.u.i.v__.gc = (GCObject *)(v2 == 2);
      }
      v4 = addk(fs, &key, v6);
      *(_DWORD *)&e->u.ind.idx = v4;
      e->k = 4;
      return v4 | 0x100;
    case 5:
      *(_DWORD *)&e->u.ind.idx = luaK_numberK(fs, *(double *)&e->u.ind.idx);
      e->k = 4;
      goto LABEL_9;
    case 4:
LABEL_9:
      v4 = *(_DWORD *)&e->u.ind.idx;
      if ( v4 > 255 )
        goto LABEL_10;
      return v4 | 0x100;
    default:
LABEL_10:
      luaK_dischargevars(fs, e);
      if ( e->k != 6 )
        goto LABEL_14;
      result = *(_DWORD *)&e->u.ind.idx;
      if ( e->t != e->f )
      {
        if ( result < fs->nactvar )
        {
LABEL_14:
          luaK_exp2nextreg(fs, e);
          result = *(_DWORD *)&e->u.ind.idx;
        }
        else
        {
          exp2reg(fs, e, *(_DWORD *)&e->u.ind.idx);
          result = *(_DWORD *)&e->u.ind.idx;
        }
      }
      return result;
  }
}

//----- (0075E4D0) --------------------------------------------------------
void __cdecl luaK_storevar(FuncState *fs, expdesc *var, expdesc *ex)
{
  int v3; // ebx@4
  int v4; // eax@4
  int v5; // eax@5
  signed int v6; // eax@7
  signed int v7; // edx@11

  if ( var->k == 7 )
  {
    if ( ex->k == 6 )
    {
      v7 = *(_DWORD *)&ex->u.ind.idx;
      if ( !(v7 & 0x100) )
      {
        if ( v7 >= fs->nactvar )
          --fs->freereg;
      }
    }
    exp2reg(fs, ex, *(_DWORD *)&var->u.ind.idx);
  }
  else
  {
    if ( var->k == 8 )
    {
      v5 = luaK_exp2anyreg(fs, ex);
      luaK_code(fs, ((v5 | (*(_DWORD *)&var->u.ind.idx << 17)) << 6) | 9);
    }
    else
    {
      if ( var->k == 9 )
      {
        v3 = 2 * (var->u.ind.vt == 7) + 8;
        v4 = luaK_exp2RK(fs, ex);
        luaK_code(fs, v3 | ((var->u.ind.t | ((v4 | (var->u.ind.idx << 9)) << 8)) << 6));
      }
    }
    if ( ex->k == 6 )
    {
      v6 = *(_DWORD *)&ex->u.ind.idx;
      if ( !(v6 & 0x100) )
      {
        if ( v6 >= fs->nactvar )
          --fs->freereg;
      }
    }
  }
}

//----- (0075E5A0) --------------------------------------------------------
void __cdecl luaK_self(FuncState *fs, expdesc *e, expdesc *key)
{
  signed int v3; // edi@6
  int v4; // eax@10
  int v5; // eax@14
  signed int v6; // eax@15

  luaK_dischargevars(fs, e);
  if ( e->k != 6 )
    goto LABEL_5;
  if ( e->t != e->f )
  {
    if ( *(_DWORD *)&e->u.ind.idx >= (signed int)fs->nactvar )
    {
      exp2reg(fs, e, *(_DWORD *)&e->u.ind.idx);
      goto LABEL_6;
    }
LABEL_5:
    luaK_exp2nextreg(fs, e);
  }
LABEL_6:
  v3 = *(_DWORD *)&e->u.ind.idx;
  if ( e->k == 6 && !(v3 & 0x100) && v3 >= fs->nactvar )
    --fs->freereg;
  *(_DWORD *)&e->u.ind.idx = fs->freereg;
  e->k = 6;
  v4 = fs->freereg + 2;
  if ( v4 > fs->f->maxstacksize )
  {
    if ( v4 >= 250 )
      luaX_syntaxerror(fs->ls, "function or expression too complex");
    fs->f->maxstacksize = v4;
  }
  fs->freereg += 2;
  v5 = luaK_exp2RK(fs, key);
  luaK_code(fs, ((*(_DWORD *)&e->u.ind.idx | ((v5 | (v3 << 9)) << 8)) << 6) | 0xC);
  if ( key->k == 6 )
  {
    v6 = *(_DWORD *)&key->u.ind.idx;
    if ( !(v6 & 0x100) )
    {
      if ( v6 >= fs->nactvar )
        --fs->freereg;
    }
  }
}

//----- (0075E690) --------------------------------------------------------
int __usercall jumponcond<eax>(FuncState *fs<ecx>, expdesc *e<eax>, int cond)
{
  expdesc *v3; // ebx@1
  expkind v4; // edi@1
  FuncState *v5; // esi@1
  unsigned int *v6; // edx@2
  unsigned int v7; // eax@2
  int v8; // edi@3
  Proto *v9; // ecx@5
  int v10; // eax@5
  signed int v11; // eax@10
  int l1; // [sp+Ch] [bp-4h]@14

  v3 = e;
  v4 = e->k;
  v5 = fs;
  if ( e->k != 11 || (v6 = fs->f->code, v7 = v6[*(_DWORD *)&e->u.ind.idx], (v6[*(_DWORD *)&v3->u.ind.idx] & 0x3F) != 20) )
  {
    if ( v4 == 6 )
      goto LABEL_17;
    v9 = fs->f;
    v10 = v5->freereg + 1;
    if ( v10 > v5->f->maxstacksize )
    {
      if ( v10 >= 250 )
        luaX_syntaxerror(v5->ls, "function or expression too complex");
      v9->maxstacksize = v10;
    }
    ++v5->freereg;
    discharge2reg(v5, v3, v5->freereg - 1);
    if ( v3->k == 6 )
    {
LABEL_17:
      v11 = *(_DWORD *)&v3->u.ind.idx;
      if ( !(v11 & 0x100) && v11 >= v5->nactvar )
        --v5->freereg;
    }
    luaK_code(v5, ((cond | (*(_DWORD *)&v3->u.ind.idx << 9)) << 14) | 0x3FDC);
    v8 = v5->jpc;
    v5->jpc = -1;
  }
  else
  {
    --fs->pc;
    luaK_code(fs, ((cond == 0) << 14) | ((v7 & 0xFFB7FFFF | 0x360000) >> 17));
    v8 = v5->jpc;
    v5->jpc = -1;
  }
  l1 = luaK_code(v5, 0x7FFF8017u);
  luaK_concat(v5, &l1, v8);
  return l1;
}

//----- (0075E790) --------------------------------------------------------
void __cdecl luaK_goiftrue(FuncState *fs, expdesc *e)
{
  signed int v2; // eax@2
  int v3; // ST08_4@5

  luaK_dischargevars(fs, e);
  switch ( e->k )
  {
    case 0xA:
      invertjump(fs, e);
      v2 = *(_DWORD *)&e->u.ind.idx;
      break;
    case 2:
    case 4:
    case 5:
      v2 = -1;
      break;
    default:
      v2 = jumponcond(fs, e, 0);
      break;
  }
  luaK_concat(fs, &e->f, v2);
  v3 = e->t;
  fs->lasttarget = fs->pc;
  luaK_concat(fs, &fs->jpc, v3);
  e->t = -1;
}

//----- (0075E830) --------------------------------------------------------
void __cdecl luaK_goiffalse(FuncState *fs, expdesc *e)
{
  signed int v2; // eax@4
  int v3; // ST08_4@7

  luaK_dischargevars(fs, e);
  if ( e->k == 1 || e->k == 3 )
  {
    v2 = -1;
  }
  else
  {
    if ( e->k == 10 )
      v2 = *(_DWORD *)&e->u.ind.idx;
    else
      v2 = jumponcond(fs, e, 1);
  }
  luaK_concat(fs, &e->t, v2);
  v3 = e->f;
  fs->lasttarget = fs->pc;
  luaK_concat(fs, &fs->jpc, v3);
  e->f = -1;
}

//----- (0075E8A0) --------------------------------------------------------
void __usercall codenot(FuncState *fs<eax>, expdesc *e<edi>)
{
  FuncState *v2; // esi@1
  signed int v3; // eax@6
  int v4; // edx@10
  FuncState *v5; // edx@10
  expdesc *v6; // [sp+0h] [bp-8h]@0

  v2 = fs;
  luaK_dischargevars(fs, v6);
  switch ( e->k )
  {
    case 1:
    case 3:
      e->k = 2;
      break;
    case 2:
    case 4:
    case 5:
      e->k = 3;
      break;
    case 0xA:
      invertjump(v2, e);
      break;
    case 6:
    case 0xB:
      discharge2anyreg(v2, e);
      if ( e->k == 6 )
      {
        v3 = *(_DWORD *)&e->u.ind.idx;
        if ( !(v3 & 0x100) )
        {
          if ( v3 >= v2->nactvar )
            --v2->freereg;
        }
      }
      *(_DWORD *)&e->u.ind.idx = luaK_code(v2, (*(_DWORD *)&e->u.ind.idx << 23) | 0x14);
      e->k = 11;
      break;
    default:
      break;
  }
  v4 = e->t;
  e->t = e->f;
  e->f = v4;
  removevalues(v2, v4);
  removevalues(v5, e->t);
}

//----- (0075E960) --------------------------------------------------------
void __cdecl luaK_indexed(FuncState *fs, expdesc *t, expdesc *k)
{
  __int16 v3; // ax@1
  bool v4; // zf@1

  t->u.ind.t = LOBYTE(t->u.ind.idx);
  v3 = luaK_exp2RK(fs, k);
  v4 = t->k == 8;
  t->u.ind.idx = v3;
  t->u.ind.vt = v4 + 7;
  t->k = 9;
}

//----- (0075E9A0) --------------------------------------------------------
void __usercall codearith(FuncState *fs<edi>, expdesc *e1<ebx>, OpCode op, expdesc *e2, int line)
{
  expdesc *v5; // esi@4
  int v6; // eax@6
  signed int v7; // ecx@8
  signed int v8; // ecx@12
  signed int v9; // ecx@16
  signed int v10; // ecx@20
  int o2; // [sp+4h] [bp-4h]@4

  if ( !constfolding(op, e1, e2) )
  {
    if ( op == 19 || op == 21 )
    {
      v5 = e2;
      o2 = 0;
    }
    else
    {
      v5 = e2;
      o2 = luaK_exp2RK(fs, e2);
    }
    v6 = luaK_exp2RK(fs, e1);
    if ( v6 <= o2 )
    {
      if ( v5->k == 6 )
      {
        v9 = *(_DWORD *)&v5->u.ind.idx;
        if ( !(v9 & 0x100) )
        {
          if ( v9 >= fs->nactvar )
            --fs->freereg;
        }
      }
      if ( e1->k == 6 )
      {
        v10 = *(_DWORD *)&e1->u.ind.idx;
        if ( !(v10 & 0x100) )
        {
          if ( v10 >= fs->nactvar )
            --fs->freereg;
        }
      }
    }
    else
    {
      if ( e1->k == 6 )
      {
        v7 = *(_DWORD *)&e1->u.ind.idx;
        if ( !(v7 & 0x100) )
        {
          if ( v7 >= fs->nactvar )
            --fs->freereg;
        }
      }
      if ( v5->k == 6 )
      {
        v8 = *(_DWORD *)&v5->u.ind.idx;
        if ( !(v8 & 0x100) )
        {
          if ( v8 >= fs->nactvar )
            --fs->freereg;
        }
      }
    }
    *(_DWORD *)&e1->u.ind.idx = luaK_code(fs, op | ((o2 | (v6 << 9)) << 14));
    e1->k = 11;
    fs->f->lineinfo[fs->pc - 1] = line;
  }
}

//----- (0075EAA0) --------------------------------------------------------
void __usercall codecomp(FuncState *fs<ecx>, expdesc *e2<eax>, OpCode op, int cond, expdesc *e1)
{
  expdesc *v5; // ebx@1
  FuncState *v6; // esi@1
  int v7; // edi@1
  int v8; // eax@1
  signed int v9; // ebx@2
  expdesc *v10; // ebx@5
  signed int v11; // ecx@6
  int v12; // ecx@11
  int v13; // edi@12

  v5 = e2;
  v6 = fs;
  v7 = luaK_exp2RK(fs, e1);
  v8 = luaK_exp2RK(v6, v5);
  if ( v5->k == 6 )
  {
    v9 = *(_DWORD *)&v5->u.ind.idx;
    if ( !(v9 & 0x100) )
    {
      if ( v9 >= v6->nactvar )
        --v6->freereg;
    }
  }
  v10 = e1;
  if ( e1->k == 6 )
  {
    v11 = *(_DWORD *)&e1->u.ind.idx;
    if ( !(v11 & 0x100) )
    {
      if ( v11 >= v6->nactvar )
        --v6->freereg;
    }
  }
  if ( !cond && op != 24 )
  {
    v12 = v7;
    v7 = v8;
    v8 = v12;
    cond = 1;
  }
  luaK_code(v6, op | ((cond | ((v8 | (v7 << 9)) << 8)) << 6));
  v13 = v6->jpc;
  v6->jpc = -1;
  cond = luaK_code(v6, 0x7FFF8017u);
  luaK_concat(v6, &cond, v13);
  *(_DWORD *)&v10->u.ind.idx = cond;
  v10->k = 10;
}

//----- (0075EB60) --------------------------------------------------------
void __cdecl luaK_prefix(FuncState *fs, UnOpr op, expdesc *e, int line)
{
  expdesc e2; // [sp+0h] [bp-18h]@1

  *(double *)&e2.u.ind.idx = 0.0;
  e2.f = -1;
  e2.t = -1;
  e2.k = 5;
  if ( op )
  {
    if ( op == 1 )
    {
      codenot(fs, e);
    }
    else
    {
      if ( op == 2 )
      {
        luaK_exp2anyreg(fs, e);
        codearith(fs, OP_LEN, e, &e2, line);
      }
    }
  }
  else
  {
    if ( e->k != 5 || e->t != -1 || e->f != -1 )
    {
      luaK_exp2anyreg(fs, e);
      codearith(fs, OP_UNM, e, &e2, line);
    }
    else
    {
      *(double *)&e->u.ind.idx = -*(double *)&e->u.ind.idx;
    }
  }
}

//----- (0075EC10) --------------------------------------------------------
void __cdecl luaK_infix(FuncState *fs, BinOpr op, expdesc *v)
{
  switch ( op )
  {
    case 13:
      luaK_goiftrue(fs, v);
      break;
    case 14:
      luaK_goiffalse(fs, v);
      break;
    case 6:
      luaK_exp2nextreg(fs, v);
      break;
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      if ( v->k != 5 || v->t != -1 || v->f != -1 )
        luaK_exp2RK(fs, v);
      break;
    default:
      luaK_exp2RK(fs, v);
      break;
  }
}

//----- (0075ECC0) --------------------------------------------------------
void __cdecl luaK_posfix(FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2, int line)
{
  unsigned int *v5; // eax@6

  switch ( op )
  {
    case 13:
      luaK_dischargevars(fs, e2);
      luaK_concat(fs, &e2->f, e1->f);
      e1->k = e2->k;
      *((_DWORD *)&e1->k + 1) = *((_DWORD *)&e2->k + 1);
      *(_QWORD *)&e1->u.ind.idx = *(_QWORD *)&e2->u.ind.idx;
      e1->t = e2->t;
      e1->f = e2->f;
      break;
    case 14:
      luaK_dischargevars(fs, e2);
      luaK_concat(fs, &e2->t, e1->t);
      e1->k = e2->k;
      *((_DWORD *)&e1->k + 1) = *((_DWORD *)&e2->k + 1);
      *(_QWORD *)&e1->u.ind.idx = *(_QWORD *)&e2->u.ind.idx;
      e1->t = e2->t;
      e1->f = e2->f;
      break;
    case 6:
      luaK_exp2val(fs, e2);
      if ( e2->k != 11 || (fs->f->code[*(_DWORD *)&e2->u.ind.idx] & 0x3F) != 22 )
      {
        luaK_exp2nextreg(fs, e2);
        codearith(fs, OP_CONCAT, e1, e2, line);
      }
      else
      {
        freeexp(fs, e1);
        v5 = &fs->f->code[*(_DWORD *)&e2->u.ind.idx];
        *v5 = (unsigned int)loc_7FFFFF & *v5 | (*(_DWORD *)&e1->u.ind.idx << 23);
        e1->k = 11;
        *(_DWORD *)&e1->u.ind.idx = *(_DWORD *)&e2->u.ind.idx;
      }
      break;
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      codearith(fs, (OpCode)(op + 13), e1, e2, line);
      break;
    case 7:
    case 8:
    case 9:
      codecomp(fs, (OpCode)(op + 17), 1, e1, e2);
      break;
    case 10:
    case 11:
    case 12:
      codecomp(fs, (OpCode)(op + 14), 0, e1, e2);
      break;
    default:
      return;
  }
}
// 7FFFFF: using guessed type int loc_7FFFFF();

//----- (0075EE70) --------------------------------------------------------
void __cdecl luaK_patchlist(FuncState *fs, int list, int target)
{
  int v3; // ecx@1

  v3 = fs->pc;
  if ( target == v3 )
  {
    fs->lasttarget = v3;
    luaK_concat(fs, &fs->jpc, list);
  }
  else
  {
    patchlistaux(fs, list, target, 255, target);
  }
}

//----- (0075EED0) --------------------------------------------------------
int __userpurge ijlInit<eax>(int a1<eax>, int a2)
{
  int v2; // eax@1
  int v3; // eax@3
  int v4; // eax@3
  int v5; // edx@3
  void *v6; // eax@3
  int v7; // edx@3
  int v8; // esi@5
  signed int v9; // eax@5
  int v10; // esi@5
  int v12; // [sp+0h] [bp-40h]@1
  struct _IJL_CONTEXT *v13; // [sp+4h] [bp-3Ch]@1
  int v14; // [sp+8h] [bp-38h]@1
  int v15; // [sp+Ch] [bp-34h]@3
  int v16; // [sp+10h] [bp-30h]@3
  int v17; // [sp+14h] [bp-2Ch]@3
  int v18; // [sp+18h] [bp-28h]@3
  int *v19; // [sp+28h] [bp-18h]@1
  int v20; // [sp+30h] [bp-10h]@1
  int (__cdecl *v21)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int); // [sp+34h] [bp-Ch]@1
  _UNKNOWN *v22; // [sp+38h] [bp-8h]@1
  int v23; // [sp+3Ch] [bp-4h]@1

  v22 = &unk_B7200C;
  v21 = _except_handler3;
  v20 = a1;
  v19 = &v12;
  v12 = 0;
  v13 = 0;
  v23 = 0;
  v14 = a2 + 88;
  v2 = (int)operator new(0x114u);
  v13 = (struct _IJL_CONTEXT *)v2;
  if ( v2 )
  {
    *(_DWORD *)(v2 + 4) = 0;
    *(_DWORD *)(v2 + 8) = 0;
    *(_DWORD *)(v2 + 12) = 0;
    *(_DWORD *)(v2 + 16) = 0;
    *(_DWORD *)(v2 + 20) = 0;
    *(_DWORD *)(v14 + 14320) = v2;
    ownInitializeLibrary(v2);
    *(_DWORD *)a2 = 0;
    *(_DWORD *)(a2 + 4) = 0;
    *(_DWORD *)(a2 + 8) = 0;
    *(_DWORD *)(a2 + 12) = 0;
    *(_DWORD *)(a2 + 16) = 0;
    *(_DWORD *)(a2 + 20) = 3;
    *(_DWORD *)(a2 + 24) = 2;
    *(_DWORD *)(a2 + 28) = 0;
    *(_DWORD *)(a2 + 36) = 0;
    *(_DWORD *)(a2 + 32) = 0;
    *(_DWORD *)(a2 + 40) = 0;
    *(_DWORD *)(a2 + 44) = 0;
    *(_DWORD *)(a2 + 48) = 0;
    *(_DWORD *)(a2 + 52) = 3;
    *(_DWORD *)(a2 + 56) = 3;
    *(_DWORD *)(a2 + 60) = 1;
    *(_DWORD *)(a2 + 64) = 0;
    *(_DWORD *)(a2 + 68) = 0;
    *(_DWORD *)(a2 + 72) = 1;
    *(_DWORD *)(a2 + 76) = 1;
    *(_DWORD *)(a2 + 80) = 75;
    v3 = v14;
    *(_DWORD *)(v14 + 116) = 0;
    *(_DWORD *)(v3 + 24) = 0;
    *(_DWORD *)(v3 + 28) = 0;
    *(_DWORD *)v3 = -1;
    *(_DWORD *)(v3 + 4) = 0;
    *(_DWORD *)(v3 + 8) = 0;
    *(_DWORD *)(v3 + 12) = 0;
    *(_DWORD *)(v3 + 16) = 0;
    *(_DWORD *)(v3 + 20) = 1;
    *(_DWORD *)(v3 + 32) = *(_DWORD *)(a2 + 4);
    *(_DWORD *)(v3 + 36) = *(_DWORD *)(a2 + 8);
    *(_DWORD *)(v3 + 40) = *(_DWORD *)(a2 + 12);
    *(_DWORD *)(v3 + 44) = *(_DWORD *)(a2 + 16);
    *(_DWORD *)(v3 + 48) = *(_DWORD *)(a2 + 20);
    *(_DWORD *)(v3 + 52) = *(_DWORD *)(a2 + 24);
    *(_DWORD *)(v3 + 56) = *(_DWORD *)(a2 + 28);
    *(_DWORD *)(v3 + 60) = 0;
    *(_DWORD *)(v3 + 68) = *(_DWORD *)(a2 + 36);
    *(_DWORD *)(v3 + 64) = *(_DWORD *)(a2 + 32);
    *(_DWORD *)(v3 + 72) = *(_DWORD *)(a2 + 40);
    *(_DWORD *)(v3 + 76) = *(_DWORD *)(a2 + 44);
    *(_DWORD *)(v3 + 80) = *(_DWORD *)(a2 + 48);
    *(_DWORD *)(v3 + 84) = *(_DWORD *)(a2 + 52);
    *(_DWORD *)(v3 + 88) = *(_DWORD *)(a2 + 56);
    *(_DWORD *)(v3 + 92) = *(_DWORD *)(a2 + 60);
    *(_DWORD *)(v3 + 96) = *(_DWORD *)(a2 + 64);
    *(_DWORD *)(v3 + 100) = *(_DWORD *)(a2 + 68);
    *(_DWORD *)(v3 + 104) = *(_DWORD *)(a2 + 72);
    *(_DWORD *)(v3 + 108) = *(_DWORD *)(a2 + 76);
    *(_DWORD *)(v3 + 112) = *(_DWORD *)(a2 + 80);
    *(_DWORD *)(v3 + 120) = 0;
    *(_DWORD *)(v3 + 124) = 0;
    *(_DWORD *)(v3 + 14100) = 0;
    *(_DWORD *)(v3 + 14104) = 0;
    *(_DWORD *)(v3 + 14052) = 0;
    *(_DWORD *)(v3 + 14056) = 0;
    *(_DWORD *)(v3 + 14060) = 0;
    *(_DWORD *)(v3 + 14064) = 0;
    *(_DWORD *)(v3 + 14068) = 0;
    *(_DWORD *)(v3 + 14072) = 0;
    *(_DWORD *)(v3 + 14076) = 0;
    *(_DWORD *)(v3 + 14080) = 0;
    *(_DWORD *)(v3 + 14084) = 0;
    *(_DWORD *)(v3 + 14088) = 0;
    *(_DWORD *)(v3 + 14092) = 0;
    *(_DWORD *)(v3 + 14096) = 0;
    __g_memzero((void *)(v3 + 148), 0xB4u);
    __g_memzero((void *)(v14 + 328), 0xB4u);
    __g_memzero((void *)(v14 + 508), 0xB4u);
    __g_memzero((void *)(v14 + 688), 0xB4u);
    v4 = v14;
    v15 = v14 + 160;
    v16 = v14 + 340;
    v17 = v14 + 520;
    v18 = v14 + 700;
    *(_DWORD *)(v14 + 156) = (v14 + 167) & 0xFFFFFFF8;
    *(_DWORD *)(v4 + 336) = (v4 + 347) & 0xFFFFFFF8;
    *(_DWORD *)(v4 + 516) = (v4 + 527) & 0xFFFFFFF8;
    *(_DWORD *)(v4 + 696) = (v4 + 707) & 0xFFFFFFF8;
    __g_memzero((void *)(v4 + 7460), 0x670u);
    __g_memzero((void *)(v14 + 9108), 0x670u);
    __g_memzero((void *)(v14 + 10756), 0x670u);
    __g_memzero((void *)(v14 + 12404), 0x670u);
    __g_memzero((void *)(v14 + 868), 0x670u);
    __g_memzero((void *)(v14 + 2516), 0x670u);
    __g_memzero((void *)(v14 + 4164), 0x670u);
    __g_memzero((void *)(v14 + 5812), 0x670u);
    v5 = v14;
    *(_DWORD *)(v14 + 14300) = 1;
    *(_DWORD *)(v5 + 14244) = 0;
    *(_DWORD *)(v5 + 14248) = 0;
    *(_DWORD *)(v5 + 14252) = 0;
    *(_DWORD *)(v5 + 14256) = 0;
    *(_DWORD *)(v5 + 14260) = 0;
    *(_DWORD *)(v5 + 14264) = 0;
    *(_DWORD *)(v5 + 14268) = 0;
    *(_DWORD *)(v5 + 14272) = 4;
    *(_DWORD *)(v5 + 14276) = 0;
    *(_DWORD *)(v5 + 14280) = 0;
    v6 = operator new(0x40u);
    v7 = v14;
    *(_DWORD *)(v14 + 14284) = v6;
    if ( v6 )
    {
      __g_memzero(v6, 16 * *(_DWORD *)(v7 + 14272));
      v8 = v14;
      *(_DWORD *)(v14 + 14288) = 0;
      *(_DWORD *)(v8 + 14292) = 0;
      *(_DWORD *)(v8 + 14296) = 0;
      *(_DWORD *)(v8 + 18472) = 0;
      *(_DWORD *)(v8 + 18476) = 0;
      *(_DWORD *)(v8 + 14304) = 0;
      *(_DWORD *)(v8 + 18480) = 0;
      *(_DWORD *)(v8 + 14108) = 0;
      *(_BYTE *)(v8 + 14112) = 0;
      *(_DWORD *)(v8 + 14116) = 0;
      *(_BYTE *)(v8 + 14120) = 0;
      *(_DWORD *)(v8 + 14124) = 0;
      *(_BYTE *)(v8 + 14128) = 0;
      *(_DWORD *)(v8 + 14132) = 0;
      *(_BYTE *)(v8 + 14136) = 0;
      *(_DWORD *)(v8 + 14140) = 0;
      *(_DWORD *)(v8 + 14144) = 0;
      *(_BYTE *)(v8 + 14148) = 0;
      *(_BYTE *)(v8 + 14149) = 0;
      *(_DWORD *)(v8 + 14152) = 0;
      *(_DWORD *)(v8 + 14156) = 0;
      *(_BYTE *)(v8 + 14160) = 0;
      *(_BYTE *)(v8 + 14161) = 0;
      *(_DWORD *)(v8 + 14164) = 0;
      *(_DWORD *)(v8 + 14168) = 0;
      *(_BYTE *)(v8 + 14172) = 0;
      *(_BYTE *)(v8 + 14173) = 0;
      *(_DWORD *)(v8 + 14176) = 0;
      *(_DWORD *)(v8 + 14180) = 0;
      *(_BYTE *)(v8 + 14184) = 0;
      *(_BYTE *)(v8 + 14185) = 0;
      *(_DWORD *)(v8 + 14188) = 0;
      *(_DWORD *)(v8 + 14192) = 0;
      *(_BYTE *)(v8 + 14196) = 0;
      *(_BYTE *)(v8 + 14197) = 0;
      *(_DWORD *)(v8 + 14200) = 0;
      *(_DWORD *)(v8 + 14204) = 0;
      *(_BYTE *)(v8 + 14208) = 0;
      *(_BYTE *)(v8 + 14209) = 0;
      *(_DWORD *)(v8 + 14212) = 0;
      *(_DWORD *)(v8 + 14216) = 0;
      *(_BYTE *)(v8 + 14220) = 0;
      *(_BYTE *)(v8 + 14221) = 0;
      *(_DWORD *)(v8 + 14224) = 0;
      *(_DWORD *)(v8 + 14228) = 0;
      *(_BYTE *)(v8 + 14232) = 0;
      *(_BYTE *)(v8 + 14233) = 0;
      *(_DWORD *)(v8 + 136) = 0;
      *(_DWORD *)(v8 + 140) = 0;
      *(_DWORD *)(v8 + 144) = 0;
      *(_DWORD *)(v8 + 132) = 0;
      *(_DWORD *)(v8 + 128) = 0;
      *(_BYTE *)(v8 + 14236) = 0;
      *(_BYTE *)(v8 + 14240) = 0;
      *(_BYTE *)(v8 + 14237) = 1;
      *(_BYTE *)(v8 + 14241) = 1;
      *(_BYTE *)(v8 + 14238) = 1;
      *(_BYTE *)(v8 + 14242) = 1;
      *(_BYTE *)(v8 + 14239) = 1;
      *(_BYTE *)(v8 + 14243) = 1;
      *(_DWORD *)(*(_DWORD *)(v8 + 14284) + 12) = 0;
      *(_DWORD *)(*(_DWORD *)(v8 + 14284) + 28) = 1;
      *(_DWORD *)(*(_DWORD *)(v8 + 14284) + 44) = 1;
      *(_DWORD *)(*(_DWORD *)(v8 + 14284) + 60) = 1;
      *(_DWORD *)(v8 + 14372) = 0;
      *(_DWORD *)(v8 + 14328) = 0;
      *(_DWORD *)(v8 + 14332) = 0;
      *(_DWORD *)(v8 + 14336) = 0;
      *(_DWORD *)(v8 + 14340) = 0;
      *(_DWORD *)(v8 + 14356) = 0;
      *(_DWORD *)(v8 + 14348) = 0;
      *(_DWORD *)(v8 + 14352) = 0;
      v9 = ownGetProcessorType((int)v13, (int)v13);
      v10 = v14;
      *(_DWORD *)(v14 + 14364) = v9;
      *(_DWORD *)(v10 + 14324) = 0;
      *(_DWORD *)(v10 + 14344) = 0;
      *(_DWORD *)(v10 + 14312) = 0;
      *(_DWORD *)(v10 + 14316) = 0;
      *(_BYTE *)(v10 + 14360) = 0;
      *(_DWORD *)(v10 + 14368) = 0;
      *(_DWORD *)(v10 + 18484) = 0;
      *(_DWORD *)(v10 + 19928) = v9;
      *(_DWORD *)(v10 + 19932) = 0;
      *(_DWORD *)(v10 + 19936) = 0;
      *(_DWORD *)(v10 + 19940) = 0;
      *(_DWORD *)(v10 + 19944) = 0;
      *(_DWORD *)(v10 + 19948) = 0;
      *(_WORD *)(v10 + 19952) = 100;
      *(_WORD *)(v10 + 19954) = 0;
      *(_WORD *)(v10 + 19956) = 0;
      *(_DWORD *)(v10 + 19960) = 0;
      *(_WORD *)(v10 + 19964) = 257;
      *(_BYTE *)(v10 + 19966) = 0;
      *(_WORD *)(v10 + 19968) = 1;
      *(_WORD *)(v10 + 19970) = 1;
      *(_DWORD *)(v10 + 19972) = 0;
      *(_WORD *)(v10 + 19976) = 0;
      v23 = -1;
    }
    else
    {
      v12 = -5;
    }
  }
  else
  {
    v12 = -5;
  }
  if ( v12 < 0 )
  {
    if ( *(_DWORD *)(a2 + 14372) )
    {
      operator delete(*(void **)(a2 + 14372));
      *(_DWORD *)(a2 + 14372) = 0;
      *(_DWORD *)(a2 + 14360) = 0;
    }
    if ( *(_DWORD *)(a2 + 20028) )
    {
      operator delete(*(void **)(a2 + 20028));
      *(_DWORD *)(a2 + 20028) = 0;
    }
    if ( *(_DWORD *)(a2 + 18568) )
    {
      operator delete(*(void **)(a2 + 18568));
      *(_DWORD *)(a2 + 18568) = 0;
    }
    if ( *(_DWORD *)(a2 + 14392) )
    {
      if ( *(_DWORD *)(*(_DWORD *)(a2 + 14392) + 52) )
      {
        operator delete(*(void **)(*(_DWORD *)(a2 + 14392) + 52));
        *(_DWORD *)(*(_DWORD *)(a2 + 14392) + 52) = 0;
      }
      operator delete(*(void **)(a2 + 14392));
      *(_DWORD *)(a2 + 14392) = 0;
    }
  }
  return v12;
}
// B6C2E4: using guessed type void (__cdecl *__g_memzero)(void *, unsigned int);

//----- (0075F656) --------------------------------------------------------
signed int __cdecl sub_75F656()
{
  return 1;
}

//----- (0075F660) --------------------------------------------------------
int __userpurge ijlFree<eax>(int a1<eax>, int a2)
{
  int v2; // eax@1
  void *v3; // edx@1
  void *v4; // edx@7
  void *v5; // edx@9
  void *v6; // edx@12
  int v7; // edx@14
  void *v8; // eax@15
  int v9; // edx@16
  int v10; // edx@18
  int v12; // ecx@22
  int v13; // edx@23
  void *v14; // ebx@23
  signed int v15; // edx@25
  signed int v16; // edx@27
  int v17; // [sp+0h] [bp-38h]@1
  int v18; // [sp+4h] [bp-34h]@1
  int v19; // [sp+8h] [bp-30h]@5
  void *p; // [sp+Ch] [bp-2Ch]@19
  int *v21; // [sp+20h] [bp-18h]@1
  int v22; // [sp+28h] [bp-10h]@1
  int (__cdecl *v23)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int); // [sp+2Ch] [bp-Ch]@1
  _UNKNOWN *v24; // [sp+30h] [bp-8h]@1
  int v25; // [sp+34h] [bp-4h]@1

  v24 = &unk_B72024;
  v23 = _except_handler3;
  v22 = a1;
  v21 = &v17;
  v17 = 0;
  v25 = 0;
  v2 = a2 + 88;
  v18 = a2 + 88;
  v3 = *(void **)(a2 + 14460);
  if ( v3 )
  {
    if ( !ownCloseFile(v3) )
    {
      v17 = -9;
      goto LABEL_19;
    }
    v2 = v18;
    *(_DWORD *)(v18 + 14372) = 0;
  }
  *(_DWORD *)(v2 + 14052) = 0;
  *(_DWORD *)(v2 + 14056) = 0;
  *(_DWORD *)(v2 + 14060) = 0;
  *(_DWORD *)(v2 + 14064) = 0;
  v19 = 4;
  if ( *(_DWORD *)(v2 + 14272) <= 255 )
  {
    v4 = *(void **)(v2 + 14284);
    if ( v4 )
    {
      operator delete(v4);
      v2 = v18;
      *(_DWORD *)(v18 + 14284) = 0;
      *(_DWORD *)(v2 + 14272) = 0;
    }
    v5 = *(void **)(v2 + 19940);
    if ( v5 )
    {
      operator delete(v5);
      v2 = v18;
      *(_DWORD *)(v18 + 19940) = 0;
    }
    if ( *(_DWORD *)(v2 + 19944) == 1 )
    {
      v12 = *(_DWORD *)(v2 + 19948);
      if ( v12 )
      {
        v13 = *(_DWORD *)(v12 + 4);
        v14 = *(void **)v12;
        if ( *(_DWORD *)v12 > v13 )
        {
          *(_DWORD *)v12 = v13;
          v12 = *(_DWORD *)(v2 + 19948);
          v14 = *(void **)v12;
        }
        v15 = *(_DWORD *)(v12 + 8);
        if ( (signed int)v14 > v15 )
        {
          *(_DWORD *)v12 = v15;
          v12 = *(_DWORD *)(v2 + 19948);
          v14 = *(void **)v12;
        }
        v16 = *(_DWORD *)(v12 + 12);
        if ( (signed int)v14 > v16 )
        {
          *(_DWORD *)v12 = v16;
          v14 = (void *)**(_DWORD **)(v2 + 19948);
        }
        operator delete(v14);
        operator delete(*(void **)(v18 + 19948));
        v2 = v18;
        *(_DWORD *)(v18 + 19948) = 0;
      }
    }
    v6 = *(void **)(v2 + 18480);
    if ( v6 )
    {
      operator delete(v6);
      v2 = v18;
      *(_DWORD *)(v18 + 18480) = 0;
    }
    v7 = *(_DWORD *)(v2 + 14304);
    if ( v7 )
    {
      v8 = *(void **)(v7 + 52);
      if ( v8 )
      {
        operator delete(v8);
        v9 = v18;
        *(_DWORD *)(*(_DWORD *)(v18 + 14304) + 52) = 0;
        v7 = *(_DWORD *)(v9 + 14304);
      }
      operator delete((void *)v7);
      v2 = v18;
      *(_DWORD *)(v18 + 14304) = 0;
    }
    __g_memzero((void *)(v2 + 14108), 0x20u);
    __g_memzero((void *)(v18 + 14140), 0x60u);
    v10 = v18;
    *(_DWORD *)(v18 + 128) = 0;
    *(_DWORD *)(v10 + 132) = 0;
    *(_DWORD *)(v10 + 144) = 0;
    *(_DWORD *)(v10 + 136) = 0;
    *(_DWORD *)(v10 + 140) = 0;
    *(_DWORD *)(v10 + 14100) = 0;
    *(_DWORD *)(v10 + 14104) = 0;
    v25 = -1;
  }
  else
  {
    v17 = -8;
  }
LABEL_19:
  ownFreeLibrary(*(_DWORD *)(a2 + 14408));
  p = *(void **)(a2 + 14408);
  if ( p )
  {
    operator delete(p);
    *(_DWORD *)(a2 + 14408) = 0;
  }
  return v17;
}
// B6C2E4: using guessed type void (__cdecl *__g_memzero)(void *, unsigned int);

//----- (0075F909) --------------------------------------------------------
signed int __cdecl sub_75F909()
{
  return 1;
}

//----- (0075F910) --------------------------------------------------------
signed int __cdecl CheckParameters(struct _JPEG_CORE_PROPERTIES *a1)
{
  char v1; // cl@1
  char v2; // dl@1
  char v3; // al@1
  _IJLIOTYPE v4; // esi@2
  int v5; // ebx@60
  int v6; // eax@64
  int v7; // eax@66
  _IJL_COLOR v9; // ecx@81
  _IJL_COLOR v10; // eax@88
  _DCTTYPE v11; // eax@96
  _IJL_JPGSUBSAMPLING v12; // eax@103
  _IJL_JPGSUBSAMPLING v13; // eax@107
  _IJL_COLOR v14; // edx@120
  _IJL_COLOR v15; // edx@139
  _IJL_COLOR v16; // edx@149
  _IJL_COLOR v17; // edx@169
  _IJL_COLOR v18; // edx@176
  _IJL_COLOR v19; // edx@190
  _IJL_COLOR v20; // edx@200
  int v21; // ebx@208
  int v22; // ebx@210
  int v23; // ebx@215
  _IJL_JPGSUBSAMPLING v24; // ebx@217
  _IJL_COLOR v25; // ebx@222
  char v26; // [sp+8h] [bp-1Ch]@1
  char v27; // [sp+Ch] [bp-18h]@1

  v1 = 0;
  v2 = 0;
  v27 = 0;
  v3 = 0;
  v26 = 0;
  if ( a1->UseJPEGPROPERTIES )
    return 0;
  v4 = a1->jprops.iotype;
  if ( v4 == -1 )
    return -8;
  if ( v4
    && v4 != 1
    && v4 != 2
    && v4 != 3
    && v4 != 4
    && v4 != 5
    && v4 != 6
    && v4 != 7
    && v4 != 14
    && v4 != 15
    && v4 != 16
    && v4 != 17
    && v4 != 18
    && v4 != 19
    && v4 != 20
    && v4 != 21 )
  {
    if ( v4 != 8 && v4 != 9 && v4 != 10 && v4 != 11 && v4 != 12 && v4 != 13 )
      return -8;
    v27 = 1;
  }
  else
  {
    v1 = 1;
  }
  if ( !v4
    || v4 == 2
    || v4 == 4
    || v4 == 6
    || v4 == 14
    || v4 == 16
    || v4 == 18
    || v4 == 20
    || v4 == 8
    || v4 == 10
    || v4 == 12 )
    v2 = 1;
  if ( v4 != 2
    && v4 != 3
    && v4 != 6
    && v4 != 7
    && v4 != 8
    && v4 != 9
    && v4 != 12
    && v4 != 13
    && v4 != 18
    && v4 != 19
    && v4 != 16
    && v4 != 17
    && v4 != 15
    && v4 != 15
    && v4 != 20
    && v4 != 21
    || (v3 = 1, a1->jprops.raw_coefs) )
  {
LABEL_55:
    if ( v2 )
    {
      if ( !a1->JPGFile )
        return -8;
    }
    else
    {
      if ( !a1->JPGBytes || !a1->JPGSizeBytes )
        return -8;
    }
    v5 = a1->JPGChannels;
    if ( v5 <= 0 || v5 > 256 )
      return -8;
    if ( v27 )
    {
      if ( v3 )
      {
        v6 = a1->JPGWidth;
        if ( v6 <= 0 || v6 > 65535 || (v7 = a1->JPGHeight, v7 <= 0) || v7 > 65535 )
          return -8;
        if ( a1->DIBColor != 4 && a1->JPGColor != 3 && v5 > a1->DIBChannels )
          return -8;
      }
      if ( v5 == 1 && a1->JPGSubsampling )
        return -3;
      if ( v5 == 3 )
      {
        v13 = a1->JPGSubsampling;
        if ( v13 != 1 )
        {
          if ( v13 != 2 && v13 )
            return -3;
        }
      }
      if ( v5 == 4 )
      {
        v12 = a1->JPGSubsampling;
        if ( v12 != 3 )
        {
          if ( v12 != 4 && v12 )
            return -3;
        }
      }
      if ( v5 != 1 && v5 != 3 && v5 != 4 && a1->JPGSubsampling )
        return -3;
    }
    if ( v1 )
    {
      v9 = a1->JPGColor;
      if ( v9 == 4 && v5 == 1 )
      {
        if ( (v16 = a1->DIBColor, v16 == 4) && a1->DIBChannels == 1
          || v16 == 1 && a1->DIBChannels == 3
          || v16 == 2 && a1->DIBChannels == 3
          || v16 == 5 && a1->DIBChannels == 4 )
          v26 = 1;
      }
      if ( v9 == 1 && v5 == 3 )
      {
        if ( (v15 = a1->DIBColor, v15 == 1) && a1->DIBChannels == 3
          || v15 == 2 && a1->DIBChannels == 3
          || v15 == 5 && a1->DIBChannels == 4 )
          v26 = 1;
      }
      if ( v9 == 5 && v5 == 4 && a1->DIBColor == 5 && a1->DIBChannels == 4 )
        v26 = 1;
      if ( v9 == 3 && v5 == 3 )
      {
        v14 = a1->DIBColor;
        if ( v14 == 4 && a1->DIBChannels == 1
          || v14 == 1 && a1->DIBChannels == 3
          || v14 == 2 && a1->DIBChannels == 3
          || v14 == 5 && a1->DIBChannels == 4 )
          v26 = 1;
        if ( v14 == 3 )
          v26 = 1;
      }
      if ( v9 == 6 && v5 == 4 && a1->DIBColor == 5 && a1->DIBChannels == 4 )
        v26 = 1;
      if ( v9 != 255 || a1->DIBColor != 255 )
        goto LABEL_95;
    }
    else
    {
      v10 = a1->DIBColor;
      if ( v10 == 4 && a1->DIBChannels == 1 )
      {
        if ( (v20 = a1->JPGColor, v20 == 4) && v5 == 1 || v20 == 3 && v5 == 3 )
          v26 = 1;
      }
      if ( v10 == 1 && a1->DIBChannels == 3 )
      {
        if ( (v19 = a1->JPGColor, v19 == 4) && v5 == 1 || v19 == 1 && v5 == 3 || v19 == 3 && v5 == 3 )
          v26 = 1;
      }
      if ( v10 == 1 && a1->DIBChannels == 4 && a1->JPGColor == 3 && v5 == 3 )
        v26 = 1;
      if ( v10 == 2 && a1->DIBChannels == 3 )
      {
        if ( (v18 = a1->JPGColor, v18 == 4) && v5 == 1 || v18 == 1 && v5 == 3 || v18 == 3 && v5 == 3 )
          v26 = 1;
      }
      if ( v10 == 5 && a1->DIBChannels == 4 )
      {
        if ( (v17 = a1->JPGColor, v17 == 5) && v5 == 4 || v17 == 6 && v5 == 4 )
          v26 = 1;
      }
      if ( v10 == 3 && a1->DIBChannels == 3 && a1->JPGColor == 3 && v5 == 3 )
        v26 = 1;
      if ( v10 != 255 || v5 > a1->DIBChannels || a1->JPGColor != 255 )
      {
LABEL_95:
        if ( v26 )
          goto LABEL_96;
        return -8;
      }
    }
LABEL_96:
    v11 = a1->jprops.dcttype;
    if ( v11 && v11 != 1 )
      return -8;
    if ( a1->jprops.upsampling_type == 1 && a1->jprops.raw_coefs )
      return -8;
    return 0;
  }
  if ( !a1->DIBBytes
    || (v21 = a1->DIBWidth, v21 > 65535)
    || v21 <= 0
    || (v22 = a1->DIBHeight, v22 > 65535)
    || v22 < -65535 )
    return -8;
  if ( v4 != 20 && v4 != 21 || (v25 = a1->DIBColor, v25 == 1) || v25 == 2 )
  {
    if ( a1->DIBPadBytes < 0 || (v23 = a1->DIBChannels, v23 <= 0) || v23 > 255 )
      return -8;
    v24 = a1->DIBSubsampling;
    if ( v24 && (v24 != 2 || a1->DIBColor != 3) )
      return -3;
    goto LABEL_55;
  }
  return -27;
}

//----- (00760050) --------------------------------------------------------
int __userpurge ijlRead<eax>(int a1<eax>, struct _JPEG_CORE_PROPERTIES *a2, _IJLIOTYPE a3)
{
  _JPEG_PROPERTIES *v3; // eax@2
  _IJLIOTYPE v4; // edx@2
  struct _JPEG_CORE_PROPERTIES *v5; // edx@19
  _IJLIOTYPE v6; // eax@20
  char *v7; // eax@31
  struct _JPEG_PROPERTIES *v8; // ebx@31
  int v9; // ecx@31
  int v10; // esi@31
  char *v11; // esi@33
  struct _JPEG_PROPERTIES *v12; // ecx@33
  int v13; // ebx@33
  int v14; // edx@36
  struct _JPEG_PROPERTIES *v15; // edx@38
  signed int v16; // eax@38
  _JPEG_PROPERTIES *v17; // ecx@41
  _IJLIOTYPE v18; // eax@42
  int v19; // ebx@43
  signed int v20; // edx@47
  int v21; // edx@50
  signed int v22; // eax@70
  int v23; // ebx@70
  _IJLIOTYPE v24; // eax@74
  HANDLE v26; // eax@79
  struct _JPEG_PROPERTIES *v27; // edi@82
  int v28; // ecx@82
  _JPEG_PROPERTIES *v29; // eax@103
  int v30; // ecx@103
  int v31; // edx@103
  int v32; // ecx@105
  int v33; // edx@105
  signed int v34; // edx@108
  signed int v35; // edx@112
  void *v36; // edx@117
  void *v37; // eax@118
  _FRAME_COMPONENT *v38; // esi@122
  int v39; // ebx@122
  _FRAME_COMPONENT *v40; // esi@149
  int v41; // ebx@149
  _FRAME_COMPONENT *v42; // ebx@170
  int v43; // eax@181
  _JPEGQuantTable *v44; // ebx@182
  int v45; // ecx@182
  __int16 **v46; // edx@182
  int v47; // eax@182
  int v48; // eax@182
  int v49; // edx@182
  int v50; // ecx@185
  int v51; // eax@186
  int v52; // ecx@186
  int v53; // edx@186
  int v54; // ebx@186
  int v55; // eax@186
  int v56; // [sp+0h] [bp-78h]@1
  void *v57; // [sp+4h] [bp-74h]@1
  _JPEG_PROPERTIES *v58; // [sp+8h] [bp-70h]@1
  int v59; // [sp+Ch] [bp-6Ch]@77
  int v60; // [sp+10h] [bp-68h]@77
  int v61; // [sp+14h] [bp-64h]@77
  int v62; // [sp+18h] [bp-60h]@77
  char *v63; // [sp+1Ch] [bp-5Ch]@77
  int v64; // [sp+20h] [bp-58h]@77
  HANDLE v65; // [sp+24h] [bp-54h]@77
  int v66; // [sp+28h] [bp-50h]@60
  int v67; // [sp+2Ch] [bp-4Ch]@77
  int v68; // [sp+30h] [bp-48h]@77
  int v69; // [sp+34h] [bp-44h]@77
  int *v70; // [sp+38h] [bp-40h]@77
  _QUANT_TABLE *v71; // [sp+3Ch] [bp-3Ch]@77
  char *v72; // [sp+40h] [bp-38h]@77
  struct _JPEG_PROPERTIES *v73; // [sp+44h] [bp-34h]@2
  int v74; // [sp+48h] [bp-30h]@77
  __int16 **v75; // [sp+4Ch] [bp-2Ch]@77
  _JPEGQuantTable *v76; // [sp+50h] [bp-28h]@77
  int v77; // [sp+54h] [bp-24h]@77
  int v78; // [sp+58h] [bp-20h]@77
  int v79; // [sp+5Ch] [bp-1Ch]@77
  int *v80; // [sp+60h] [bp-18h]@1
  int v81; // [sp+64h] [bp-14h]@77
  int v82; // [sp+68h] [bp-10h]@1
  int (__cdecl *v83)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int); // [sp+6Ch] [bp-Ch]@1
  _UNKNOWN *v84; // [sp+70h] [bp-8h]@1
  int v85; // [sp+74h] [bp-4h]@1
  int v86; // [sp+78h] [bp+0h]@117

  v84 = &unk_B7203C;
  v83 = _except_handler3;
  v82 = a1;
  v80 = &v56;
  v56 = 0;
  v57 = 0;
  v85 = 0;
  v58 = &a2->jprops;
  a2->jprops.iotype = a3;
  v57 = a2->jprops.state.ctx;
  v56 = CheckParameters(a2);
  if ( !v56 )
  {
    v3 = v58;
    v73 = v58;
    v4 = v58->iotype;
    if ( v58->iotype == 4 || v4 == 5 || !v4 || v4 == 1 || v4 == 20 || v4 == 21 )
      v58->needframe = 1;
    if ( v4 == 6
      || v4 == 7
      || v4 == 2
      || v4 == 3
      || v4 == 18
      || v4 == 19
      || v4 == 16
      || v4 == 17
      || v4 == 14
      || v4 == 15 )
    {
      if ( v3->use_external_qtables )
      {
        v78 = 0;
        v59 = 0;
        if ( v73->maxquantindex > 0 )
        {
          v70 = &v73->jFmtQuant[0].ident;
          v72 = &v73->rawquanttables[0].ident;
          v71 = v73->jFmtQuant;
          v75 = &v73->jFmtQuant[0].elements;
          v76 = v73->rawquanttables;
          do
          {
            v43 = v78;
            v77 = 180 * v78;
            v70[45 * v78] = (unsigned __int8)v72[8 * v78];
            v71[v43].precision = 0;
            v74 = 0;
            v60 = 0;
            do
            {
              v44 = v76;
              v45 = v74;
              v46 = v75;
              v47 = v77;
              v75[v77 / 4u][v74] = v76[v78].quantizer[v74];
              (*(__int16 **)((char *)v46 + v47))[v45 + 1] = v44[v78].quantizer[v45 + 1];
              (*(__int16 **)((char *)v46 + v47))[v45 + 2] = v44[v78].quantizer[v45 + 2];
              v48 = *(int *)((char *)v46 + v47);
              v49 = v74;
              *(_WORD *)(v48 + 2 * v74 + 6) = v44[v78].quantizer[v74 + 3];
              v74 = v49 + 4;
              v60 = v49 + 4;
            }
            while ( v49 + 4 < 64 );
            ++v78;
            v59 = v78;
          }
          while ( v78 < v73->maxquantindex );
        }
      }
      if ( v73->use_external_htables )
      {
        v50 = 0;
        v59 = 0;
        if ( v73->maxhuffindex > 0 )
        {
          while ( 1 )
          {
            v51 = v50;
            v52 = v73->rawhufftables[v50].hclass;
            v61 = v52;
            v53 = v73->rawhufftables[v51].ident;
            v62 = v73->rawhufftables[v51].ident;
            v54 = (int)v73->rawhufftables[v51].bits;
            v63 = v73->rawhufftables[v51].bits;
            v55 = (int)v73->rawhufftables[v51].vals;
            v64 = v55;
            if ( v52 )
            {
              v56 = BuildDecoderHuffmanTable(v54, v55, v52, v53, (int)&v73->jFmtAcHuffman[v53]);
              if ( v56 )
              {
                v56 = -6;
                goto LABEL_77;
              }
            }
            else
            {
              v56 = BuildDecoderHuffmanTable(v54, v55, 0, v53, (int)&v73->jFmtDcHuffman[v53]);
              if ( v56 )
              {
                v56 = -6;
                goto LABEL_77;
              }
            }
            v50 = v59 + 1;
            v59 = v50;
            v73 = v58;
            if ( v50 >= v58->maxhuffindex )
            {
              v5 = a2;
              goto LABEL_20;
            }
          }
        }
        v5 = a2;
      }
      else
      {
        v5 = a2;
      }
    }
    else
    {
      v5 = a2;
      a2->jprops.nqtables = 0;
      a2->jprops.maxquantindex = 0;
      a2->jprops.maxhuffindex = 0;
      a2->jprops.nhuffActables = 0;
      a2->jprops.nhuffDctables = 0;
    }
LABEL_20:
    v6 = v73->iotype;
    if ( (v73->iotype == 2 || v6 == 4 || v6 == 6 || !v6 || v6 == 18 || v6 == 16 || v6 == 14 || v6 == 20)
      && !v73->state.file )
    {
      v26 = ownOpenFile(v5->JPGFile, 0x80000000u);
      v65 = v26;
      if ( !v26 )
      {
        v56 = -10;
        goto LABEL_77;
      }
      v73 = v58;
      v58->state.file = v26;
      v5 = a2;
    }
    if ( v5->UseJPEGPROPERTIES )
    {
      v7 = v73->DIBBytes;
    }
    else
    {
      v7 = v5->DIBBytes;
      v8 = v73;
      v73->DIBBytes = v7;
      v8->DIBWidth = v5->DIBWidth;
      v9 = v5->DIBHeight;
      v8->DIBHeight = v9;
      v8->DIBPadBytes = v5->DIBPadBytes;
      v8->DIBChannels = v5->DIBChannels;
      v8->DIBColor = v5->DIBColor;
      v8->DIBSubsampling = v5->DIBSubsampling;
      v10 = v5->DIBPadBytes + v5->DIBChannels * v5->DIBWidth;
      v8->DIBLineBytes = v10;
      if ( v9 < 0 )
        v8->DIBLineBytes = -v10;
      v11 = v5->JPGBytes;
      v12 = v8;
      v8->JPGBytes = v11;
      v8->JPGFile = v5->JPGFile;
      v13 = v5->JPGSizeBytes;
      v12->JPGSizeBytes = v13;
      v12->JPGColor = v5->JPGColor;
      v12->cconversion_reqd = v5->cconversion_reqd;
      v12->upsampling_reqd = v5->upsampling_reqd;
      v12->jquality = v5->jquality;
      if ( !v12->jscan )
      {
        v27 = v73;
        LODWORD(v73->state.bit_buffer_64) = 0;
        HIDWORD(v27->state.bit_buffer_64) = 0;
        v27->state.bitbuf_bits_valid = 0;
        v27->state.unread_marker = 0;
        v28 = v27->iotype;
        v74 = v28;
        if ( v28 != 2 && v28 != 4 && v28 && v28 != 6 && v28 != 18 && v28 != 16 && v28 != 14 && v28 != 20 )
        {
          v27->state.start_entropy_ptr = v11;
          v27->state.end_entropy_ptr = &v11[v13];
          v27->state.cur_entropy_ptr = v11;
          v27->state.entropy_bytes_left = v13;
          v27->state.entropy_buf_maxsize = v13;
        }
        if ( v74 == 2 || v74 == 4 || !v74 || v74 == 6 || v74 == 18 || v74 == 16 || v74 == 14 || v74 == 20 )
        {
          v27->state.start_entropy_ptr = v27->state.JPGBuffer;
          v27->state.end_entropy_ptr = (char *)&v27->SawAdobeMarker;
          v27->state.cur_entropy_ptr = v27->state.JPGBuffer;
          v27->state.entropy_bytes_left = 4096;
          v27->state.entropy_buf_maxsize = 4096;
        }
        if ( v74 == 20 )
        {
          v66 = ownSeekFile(v27->state.file, 0, 0);
          if ( !v66 )
            goto LABEL_77;
          v5 = a2;
          v73 = v58;
          v7 = v58->DIBBytes;
        }
      }
    }
    v14 = v5->DIBHeight;
    if ( v14 < 0 )
    {
      v7 += v73->DIBLineBytes * (v14 + 1);
      v73->DIBBytes = v7;
    }
    v15 = v73;
    v73->state.DIB_ptr = v7;
    v15->MCUBuf = (char *)((unsigned int)&v15->tMCUBuf[31] & 0xFFFFFFE0);
    v16 = IJL_Decode((char *)v15);
    v56 = v16;
    if ( v16 )
    {
      if ( v16 == 1 )
      {
        v29 = v58;
        v30 = v58->jframe.max_hsampling * (8 * v58->roi.right + 8);
        v58->roi.right = v30;
        v31 = v29->JPGWidth;
        if ( v30 > v31 )
          v29->roi.right = v31;
        v32 = v29->jframe.max_vsampling * (8 * v29->roi.bottom + 8);
        v29->roi.bottom = v32;
        v33 = v29->JPGHeight;
        if ( v32 > v33 )
          v29->roi.bottom = v33;
      }
    }
    else
    {
      v17 = v58;
      if ( v58->SawAdobeMarker )
      {
        v18 = v58->iotype;
        if ( v58->iotype && v18 != 1 )
        {
          v20 = v58->DIBColor;
        }
        else
        {
          v19 = v58->JPGChannels;
          v58->DIBChannels = v19;
          if ( v19 == 1 )
            v17->JPGColor = 4;
          if ( v19 == 3 )
          {
            if ( v17->AdobeXform )
              v35 = 3;
            else
              v35 = 1;
            v17->JPGColor = v35;
          }
          if ( v19 == 4 )
          {
            if ( v17->AdobeXform )
              v34 = 6;
            else
              v34 = 5;
            v17->JPGColor = v34;
            v20 = 5;
            v17->DIBColor = 5;
          }
          else
          {
            v20 = v17->DIBColor;
          }
        }
      }
      else
      {
        v21 = v58->JPGChannels;
        if ( v21 == 1 )
          v58->JPGColor = 4;
        if ( v17->jfif_app0_detected )
        {
          if ( v21 == 3 )
          {
            v17->JPGColor = 3;
            v20 = v17->DIBColor;
            v18 = v17->iotype;
          }
          else
          {
            v20 = v17->DIBColor;
            v18 = v17->iotype;
          }
        }
        else
        {
          v20 = v17->DIBColor;
          v18 = v17->iotype;
        }
      }
      if ( v20 == 3 && v17->JPGColor == 3 )
        v17->DIBSubsampling = 2;
      if ( v18 == 4 || v18 == 6 || !v18 || v18 == 18 || v18 == 16 || v18 == 14 || v18 == 20 )
      {
        v66 = ownSeekFile(v17->state.file, -(*(_DWORD *)v57 + v17->state.entropy_bytes_left), 1u);
        if ( !v66 )
        {
          v56 = -23;
          goto LABEL_77;
        }
        v17 = v58;
        v18 = v58->iotype;
      }
      if ( v18 == 1 || v18 == 21 )
        v17->state.start_entropy_ptr = &v17->state.cur_entropy_ptr[-*(_DWORD *)v57];
      a2->JPGWidth = v17->JPGWidth;
      a2->JPGHeight = v17->JPGHeight;
      a2->JPGChannels = v17->JPGChannels;
      a2->JPGThumbWidth = v17->JPGThumbWidth;
      a2->JPGThumbHeight = v17->JPGThumbHeight;
      a2->cconversion_reqd = v17->cconversion_reqd;
      a2->upsampling_reqd = v17->upsampling_reqd;
      v22 = 255;
      a2->JPGSubsampling = 255;
      v23 = v17->jframe.ncomps;
      switch ( v23 )
      {
        case 1:
          v22 = 0;
          a2->JPGSubsampling = 0;
          break;
        case 2:
          v42 = v17->jframe.comps;
          if ( v42->hsampling == 1 && v42->vsampling == 1 && v42[1].hsampling == 1 && v42[1].vsampling == 1 )
          {
            v22 = 0;
            a2->JPGSubsampling = 0;
          }
          break;
        case 3:
          v40 = v17->jframe.comps;
          v41 = v40->hsampling;
          if ( v41 != 1
            || v40->vsampling != 1
            || v40[1].hsampling != 1
            || v40[1].vsampling != 1
            || v40[2].hsampling != 1
            || v40[2].vsampling != 1 )
          {
            if ( v41 != 2
              || v40->vsampling != 2
              || v40[1].hsampling != 1
              || v40[1].vsampling != 1
              || v40[2].hsampling != 1
              || v40[2].vsampling != 1 )
            {
              if ( v41 == 2
                && v40->vsampling == 1
                && v40[1].hsampling == 1
                && v40[1].vsampling == 1
                && v40[2].hsampling == 1
                && v40[2].vsampling == 1 )
              {
                v22 = 2;
                a2->JPGSubsampling = 2;
              }
            }
            else
            {
              v22 = 1;
              a2->JPGSubsampling = 1;
            }
          }
          else
          {
            v22 = 0;
            a2->JPGSubsampling = 0;
          }
          break;
        case 4:
          v38 = v17->jframe.comps;
          v39 = v38->hsampling;
          if ( v39 != 1
            || v38->vsampling != 1
            || v38[1].hsampling != 1
            || v38[1].vsampling != 1
            || v38[2].hsampling != 1
            || v38[2].vsampling != 1
            || v38[3].hsampling != 1
            || v38[3].vsampling != 1 )
          {
            if ( v39 != 2
              || v38->vsampling != 2
              || v38[1].hsampling != 1
              || v38[1].vsampling != 1
              || v38[2].hsampling != 1
              || v38[2].vsampling != 1
              || v38[3].hsampling != 2
              || v38[3].vsampling != 2 )
            {
              if ( v39 == 2
                && v38->vsampling == 1
                && v38[1].hsampling == 1
                && v38[1].vsampling == 1
                && v38[2].hsampling == 1
                && v38[2].vsampling == 1
                && v38[3].hsampling == 2
                && v38[3].vsampling == 1 )
              {
                v22 = 4;
                a2->JPGSubsampling = 4;
              }
            }
            else
            {
              v22 = 3;
              a2->JPGSubsampling = 3;
            }
          }
          else
          {
            v22 = 0;
            a2->JPGSubsampling = 0;
          }
          break;
      }
      v17->JPGSubsampling = v22;
      a2->JPGColor = v17->JPGColor;
      a2->DIBColor = v17->DIBColor;
      a2->DIBChannels = v17->DIBChannels;
      v24 = v17->iotype;
      if ( v17->iotype == 2 || v24 == 4 || v24 == 6 )
      {
        v37 = v17->state.file;
        if ( v37 )
        {
          v66 = ownCloseFile(v37);
          if ( v66 )
            v58->state.file = 0;
          else
            v56 = -9;
        }
      }
    }
  }
LABEL_77:
  (*(void (__stdcall **)(int, void *, _JPEG_PROPERTIES *, int, int, int, int, char *, int, HANDLE, int, int, int, int, int *, _QUANT_TABLE *, char *, struct _JPEG_PROPERTIES *, int, __int16 **, _JPEGQuantTable *, int, int, int, int *, int, int, int (__cdecl *)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int), _UNKNOWN *, int))((void (__stdcall **)(_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))v57 + 6))(
    v56,
    v57,
    v58,
    v59,
    v60,
    v61,
    v62,
    v63,
    v64,
    v65,
    v66,
    v67,
    v68,
    v69,
    v70,
    v71,
    v72,
    v73,
    v74,
    v75,
    v76,
    v77,
    v78,
    v79,
    v80,
    v81,
    v82,
    v83,
    v84,
    v85);
  v85 = -1;
  if ( v56 < 0 && a2->jprops.state.file )
  {
    v36 = a2->jprops.state.file;
    v85 = (int)&v86;
    ownCloseFile(v36);
    a2->jprops.state.file = 0;
  }
  return v56;
}

//----- (00760B5D) --------------------------------------------------------
signed int __cdecl sub_760B5D()
{
  return 1;
}

//----- (00760B70) --------------------------------------------------------
int __userpurge ijlWrite<eax>(int a1<eax>, struct _JPEG_CORE_PROPERTIES *a2, _IJLIOTYPE a3)
{
  int v3; // esi@2
  _IJLIOTYPE v4; // eax@2
  int v6; // ecx@10
  int v7; // eax@10
  int v8; // eax@12
  int v9; // eax@16
  _IJL_JPGSUBSAMPLING v10; // eax@16
  int v11; // eax@36
  int v12; // ebx@36
  int v13; // edx@37
  int v14; // eax@38
  int v15; // edi@38
  int v16; // edi@40
  signed int v17; // eax@46
  int v18; // esi@47
  int v19; // eax@47
  _IJLIOTYPE v20; // eax@48
  signed int v21; // eax@53
  void *v22; // eax@56
  int v23; // edx@61
  int v24; // eax@61
  int v25; // edx@63
  int v26; // eax@63
  int v27; // eax@65
  int v28; // edx@67
  int v29; // eax@69
  int v30; // eax@70
  int v31; // eax@74
  _IJL_COLOR v32; // edi@77
  int v33; // ecx@77
  _IJL_COLOR v34; // eax@77
  _IJL_JPGSUBSAMPLING v35; // edx@77
  int v36; // eax@77
  int v37; // edi@77
  int v38; // edi@78
  int v39; // edx@95
  signed int v40; // ebx@100
  HANDLE v41; // eax@105
  int v42; // [sp+0h] [bp-50h]@1
  HANDLE v43; // [sp+4h] [bp-4Ch]@1
  struct _JPEG_PROPERTIES *v44; // [sp+8h] [bp-48h]@1
  int v45; // [sp+Ch] [bp-44h]@1
  int i; // [sp+10h] [bp-40h]@36
  int v47; // [sp+14h] [bp-3Ch]@57
  void *v48; // [sp+18h] [bp-38h]@9
  int v49; // [sp+28h] [bp-28h]@36
  int v50; // [sp+2Ch] [bp-24h]@36
  int v51; // [sp+30h] [bp-20h]@16
  int v52; // [sp+34h] [bp-1Ch]@16
  int *v53; // [sp+38h] [bp-18h]@1
  int v54; // [sp+40h] [bp-10h]@1
  int (__cdecl *v55)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int); // [sp+44h] [bp-Ch]@1
  _UNKNOWN *v56; // [sp+48h] [bp-8h]@1
  int v57; // [sp+4Ch] [bp-4h]@1

  v56 = &unk_B72054;
  v55 = _except_handler3;
  v54 = a1;
  v53 = &v42;
  v42 = 0;
  v43 = 0;
  v57 = 0;
  v44 = &a2->jprops;
  v45 = 0;
  a2->jprops.iotype = a3;
  v42 = CheckParameters(a2);
  if ( !v42 )
  {
    v3 = (int)v44;
    v4 = v44->iotype;
    if ( (v44->iotype == 8 || v4 == 10 || v4 == 12) && !v44->state.file )
    {
      v41 = ownOpenFile(a2->JPGFile, 0xC0000000u);
      v43 = v41;
      if ( !v41 )
      {
        v42 = -10;
        goto LABEL_8;
      }
      v3 = (int)v44;
      v44->state.file = v41;
    }
    if ( !a2->UseJPEGPROPERTIES && !*(_DWORD *)(v3 + 14304) )
    {
      *(_DWORD *)(v3 + 76) = a2->JPGWidth;
      *(_DWORD *)(v3 + 80) = a2->JPGHeight;
      *(_DWORD *)(v3 + 84) = a2->JPGChannels;
      v32 = a2->JPGColor;
      v49 = v32;
      *(_DWORD *)(v3 + 88) = v32;
      *(_DWORD *)(v3 + 92) = a2->JPGSubsampling;
      *(_DWORD *)(v3 + 68) = a2->JPGBytes;
      *(_DWORD *)(v3 + 72) = a2->JPGSizeBytes;
      *(_DWORD *)(v3 + 64) = a2->JPGFile;
      *(_DWORD *)(v3 + 32) = a2->DIBBytes;
      *(_DWORD *)(v3 + 36) = a2->DIBWidth;
      v33 = a2->DIBHeight;
      *(_DWORD *)(v3 + 40) = v33;
      *(_DWORD *)(v3 + 44) = a2->DIBPadBytes;
      *(_DWORD *)(v3 + 48) = a2->DIBChannels;
      v34 = a2->DIBColor;
      v50 = v34;
      *(_DWORD *)(v3 + 52) = v34;
      v35 = a2->DIBSubsampling;
      *(_DWORD *)(v3 + 56) = v35;
      v36 = a2->DIBWidth;
      v37 = a2->DIBPadBytes;
      v51 = a2->DIBPadBytes;
      if ( v35 == 2 )
        v38 = v37 + 2 * v36;
      else
        v38 = v51 + v36 * a2->DIBChannels;
      *(_DWORD *)(v3 + 60) = v38;
      if ( v33 < 0 )
        *(_DWORD *)(v3 + 60) = -v38;
      *(_DWORD *)(v3 + 104) = a2->cconversion_reqd;
      *(_DWORD *)(v3 + 108) = a2->upsampling_reqd;
      *(_DWORD *)(v3 + 112) = a2->jquality;
      if ( v35 == 2 && v50 == 3 && v49 == 3 )
        *(_DWORD *)(v3 + 92) = 2;
    }
    v42 = SetDefaultTables(v3);
    if ( !v42 )
    {
      v6 = (int)v44;
      v44->cconversion_reqd = 1;
      v7 = *(_DWORD *)(v6 + 88);
      if ( v7 == 1 || v7 == 5 || (v8 = *(_DWORD *)(v6 + 52), v8 == 4) || v8 == 255 || v8 == 3 )
        *(_DWORD *)(v6 + 104) = 0;
      v51 = (int)a2;
      v9 = a2->JPGChannels;
      v52 = v9;
      *(_DWORD *)(v6 + 14272) = v9;
      v10 = a2->JPGSubsampling;
      if ( v10 )
      {
        switch ( v10 )
        {
          case 1:
            **(_DWORD **)(v6 + 14284) = 0;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 4) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 8) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 16) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 20) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 24) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 32) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 36) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 40) = 1;
            if ( *(_DWORD *)(v6 + 14100) )
            {
              v52 = *(_DWORD *)(v6 + 14272);
            }
            else
            {
              if ( *(_DWORD *)(v51 + 72) )
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 1;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 1;
                v52 = *(_DWORD *)(v6 + 14272);
              }
              else
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 0;
                v52 = *(_DWORD *)(v6 + 14272);
              }
            }
            break;
          case 2:
            **(_DWORD **)(v6 + 14284) = 0;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 4) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 8) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 16) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 20) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 24) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 32) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 36) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 40) = 1;
            if ( *(_DWORD *)(v6 + 14100) )
            {
              v52 = *(_DWORD *)(v6 + 14272);
            }
            else
            {
              if ( *(_DWORD *)(v51 + 72) )
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 1;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 1;
                v52 = *(_DWORD *)(v6 + 14272);
              }
              else
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 0;
                v52 = *(_DWORD *)(v6 + 14272);
              }
            }
            break;
          case 3:
            **(_DWORD **)(v6 + 14284) = 0;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 4) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 8) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 16) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 20) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 24) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 32) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 36) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 40) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 48) = 3;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 52) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 56) = 2;
            if ( *(_DWORD *)(v6 + 14100) )
            {
              v52 = *(_DWORD *)(v6 + 14272);
            }
            else
            {
              if ( *(_DWORD *)(v51 + 72) )
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 1;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 1;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 60) = 0;
                v52 = *(_DWORD *)(v6 + 14272);
              }
              else
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 60) = 0;
                v52 = *(_DWORD *)(v6 + 14272);
              }
            }
            break;
          case 4:
            **(_DWORD **)(v6 + 14284) = 0;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 4) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 8) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 16) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 20) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 24) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 32) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 36) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 40) = 1;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 48) = 3;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 52) = 2;
            *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 56) = 1;
            if ( *(_DWORD *)(v6 + 14100) )
            {
              v52 = *(_DWORD *)(v6 + 14272);
            }
            else
            {
              if ( *(_DWORD *)(v51 + 72) )
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 1;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 1;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 60) = 0;
                v52 = *(_DWORD *)(v6 + 14272);
              }
              else
              {
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 28) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 44) = 0;
                *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 60) = 0;
                v52 = *(_DWORD *)(v6 + 14272);
              }
            }
            break;
        }
      }
      else
      {
        v39 = 0;
        for ( i = 0; v39 < v52; v52 = *(_DWORD *)(v6 + 14272) )
        {
          *(_DWORD *)(16 * v39 + *(_DWORD *)(v6 + 14284)) = v39;
          *(_DWORD *)(16 * v39 + *(_DWORD *)(v6 + 14284) + 4) = 1;
          *(_DWORD *)(16 * v39++ + *(_DWORD *)(v6 + 14284) + 8) = 1;
          i = v39;
        }
        if ( !*(_DWORD *)(v6 + 14100) )
        {
          *(_DWORD *)(*(_DWORD *)(v6 + 14284) + 12) = 0;
          if ( *(_DWORD *)(v6 + 104) )
          {
            v52 = *(_DWORD *)(v6 + 14272);
            if ( v52 >= 2 )
            {
              v40 = 1;
              for ( i = 1; v40 < v52; v52 = *(_DWORD *)(v6 + 14272) )
              {
                *(_DWORD *)(16 * v40++ + *(_DWORD *)(v6 + 14284) + 12) = 1;
                i = v40;
              }
            }
          }
          else
          {
            v52 = *(_DWORD *)(v6 + 14272);
          }
        }
      }
      *(_DWORD *)(v6 + 14244) = 8;
      v11 = v51;
      *(_DWORD *)(v6 + 14248) = *(_DWORD *)(v51 + 44);
      *(_DWORD *)(v6 + 14252) = *(_DWORD *)(v11 + 48);
      *(_DWORD *)(v6 + 108) = 0;
      v50 = 0;
      *(_DWORD *)(v6 + 14264) = 0;
      v49 = 0;
      *(_DWORD *)(v6 + 14268) = 0;
      v12 = 0;
      i = 0;
      if ( v52 > 0 )
      {
        v13 = *(_DWORD *)(v6 + 14284);
        do
        {
          v14 = 16 * v12;
          v15 = *(_DWORD *)(16 * v12 + v13 + 4);
          if ( v50 < v15 )
          {
            v50 = *(_DWORD *)(16 * v12 + v13 + 4);
            *(_DWORD *)(v6 + 14264) = v15;
          }
          v16 = *(_DWORD *)(v14 + v13 + 8);
          if ( v49 < v16 )
          {
            v49 = *(_DWORD *)(v14 + v13 + 8);
            *(_DWORD *)(v6 + 14268) = v16;
          }
          if ( *(_DWORD *)(v14 + v13 + 4) != 1 || *(_DWORD *)(v14 + v13 + 8) != 1 )
            *(_DWORD *)(v6 + 108) = 1;
          ++v12;
          i = v12;
        }
        while ( v12 < v52 );
      }
      if ( *(_DWORD *)(v6 + 116) == 1 )
      {
        v17 = 8;
        v50 = 8;
        *(_DWORD *)(v6 + 14260) = 8;
        v49 = 8;
        *(_DWORD *)(v6 + 14256) = 8;
      }
      else
      {
        v17 = 8 * v50;
        v50 = v17;
        *(_DWORD *)(v6 + 14260) = v17;
        v49 *= 8;
        *(_DWORD *)(v6 + 14256) = v49;
      }
      v18 = (v17 + *(_DWORD *)(v6 + 76) - 1) / v17;
      *(_DWORD *)(v6 + 120) = v18;
      v19 = (v49 + *(_DWORD *)(v6 + 80) - 1) / v49;
      *(_DWORD *)(v6 + 124) = v19;
      *(_DWORD *)(v6 + 14276) = v18;
      *(_DWORD *)(v6 + 14280) = v18 * v19;
      if ( *(_DWORD *)(v6 + 14304) )
      {
        v20 = *(_DWORD *)v6;
      }
      else
      {
        *(_DWORD *)(v6 + 14340) = 0;
        v29 = *(_DWORD *)(v51 + 12);
        if ( v29 < 0 )
        {
          v30 = *(_DWORD *)(v6 + 32) + *(_DWORD *)(v6 + 60) * (v29 + 1);
          *(_DWORD *)(v6 + 32) = v30;
        }
        else
        {
          v30 = *(_DWORD *)(v6 + 32);
        }
        *(_DWORD *)(v6 + 14356) = v30;
        v42 = Encode_Frame_Init((char *)v6);
        if ( v42 )
          goto LABEL_8;
        v6 = (int)v44;
        v20 = v44->iotype;
        if ( v44->iotype == 10 || v20 == 11 )
        {
          v31 = v44->state.entropy_bytes_processed;
          v44->JPGSizeBytes = v31;
          a2->JPGSizeBytes = v31;
          v20 = *(_DWORD *)v6;
        }
      }
      if ( v20 == 8 || v20 == 9 || v20 == 12 || v20 == 13 )
      {
        v27 = (v6 + 18519) & 0xFFFFFFE0;
        *(_DWORD *)(v6 + 18484) = v27;
        if ( *(_DWORD *)(v6 + 19936) )
        {
          v21 = Encode_Frame_P(v27, v6);
          v42 = v21;
        }
        else
        {
          v21 = Encode_Frame(v27, (char *)v6);
          v42 = v21;
        }
        v6 = (int)v44;
        v44->needframe = 1;
        v28 = *(_DWORD *)(v6 + 14340) + v45;
        v45 = v28;
        *(_DWORD *)(v6 + 72) = v28;
        a2->JPGSizeBytes = v28;
      }
      else
      {
        v21 = v42;
      }
      if ( v21 != 1 && v21 != 2 )
      {
        v22 = *(void **)(v6 + 14372);
        if ( v22 )
        {
          v47 = ownCloseFile(v22);
          if ( !v47 )
          {
            v42 = -9;
            goto LABEL_8;
          }
          v44->state.file = 0;
        }
        v57 = -1;
        goto LABEL_8;
      }
      v23 = *(_DWORD *)(v6 + 14264) * (8 * *(_DWORD *)(v6 + 12) + 8);
      *(_DWORD *)(v6 + 12) = v23;
      v24 = *(_DWORD *)(v6 + 76);
      if ( v23 > v24 )
        *(_DWORD *)(v6 + 12) = v24;
      v25 = *(_DWORD *)(v6 + 14268) * (8 * *(_DWORD *)(v6 + 16) + 8);
      *(_DWORD *)(v6 + 16) = v25;
      v26 = *(_DWORD *)(v6 + 80);
      if ( v25 > v26 )
        *(_DWORD *)(v6 + 16) = v26;
    }
  }
LABEL_8:
  if ( v42 < 0 && a2->jprops.state.file )
  {
    ownCloseFile(a2->jprops.state.file);
    a2->jprops.state.file = 0;
  }
  v48 = a2->jprops.state.ctx;
  (*((void (**)(void))v48 + 6))();
  return v42;
}

//----- (00761572) --------------------------------------------------------
signed int __cdecl sub_761572()
{
  return 1;
}

//----- (00761580) --------------------------------------------------------
int __stdcall ijlErrorStr(int a1)
{
  int result; // eax@2

  if ( (unsigned int)(a1 + 99) > 0x65 )
    result = (int)"Unknown error code";
  else
    result = off_B721EC[a1](a1);
  return result;
}
// B721EC: using guessed type int (__stdcall *off_B721EC[3])(int);

//----- (00761700) --------------------------------------------------------
HINSTANCE__ *__cdecl sub_761700(int a1)
{
  HINSTANCE__ *result; // eax@1

  result = *(HINSTANCE__ **)(a1 + 4);
  if ( result || (result = LoadLibraryA("user32"), (*(_DWORD *)(a1 + 4) = result) != 0) )
  {
    result = (HINSTANCE__ *)GetProcAddress(result, "MessageBoxA");
    gpfnMessageBox = (int (__stdcall *)(struct HWND__ *, const char *, const char *, unsigned int))result;
    if ( result )
    {
      result = (HINSTANCE__ *)GetProcAddress(*(HMODULE *)(a1 + 4), "PeekMessageA");
      gpfnPeekMessage = (int (__stdcall *)(struct tagMSG *, struct HWND__ *, unsigned int, unsigned int, unsigned int))result;
      if ( result )
      {
        result = (HINSTANCE__ *)GetProcAddress(*(HMODULE *)(a1 + 4), "PostQuitMessage");
        gpfnPostQuitMessage = (void (__stdcall *)(int))result;
        if ( result )
        {
          result = (HINSTANCE__ *)GetProcAddress(*(HMODULE *)(a1 + 4), "wsprintfA");
          gpfnwsprintf = (int (*)(char *, const char *, ...))result;
        }
      }
    }
  }
  return result;
}
// B6C2EC: using guessed type void (__stdcall *gpfnPostQuitMessage)(int);
// B6C2F0: using guessed type int (__stdcall *gpfnPeekMessage)(struct tagMSG *, struct HWND__ *, unsigned int, unsigned int, unsigned int);
// B6C2F4: using guessed type int (__stdcall *gpfnMessageBox)(struct HWND__ *, const char *, const char *, unsigned int);
// B6C2F8: using guessed type int (*gpfnwsprintf)(char *, const char *, ...);

//----- (00761780) --------------------------------------------------------
int __cdecl sub_761780(int a1)
{
  int result; // eax@4

  if ( a1 )
  {
    if ( *(_DWORD *)(a1 + 4) )
    {
      FreeLibrary(*(HMODULE *)(a1 + 4));
      *(_DWORD *)(a1 + 4) = 0;
    }
    result = 0;
    gpfnMessageBox = 0;
    gpfnPeekMessage = 0;
    gpfnPostQuitMessage = 0;
    gpfnwsprintf = 0;
  }
  return result;
}
// B6C2EC: using guessed type void (__stdcall *gpfnPostQuitMessage)(int);
// B6C2F0: using guessed type int (__stdcall *gpfnPeekMessage)(struct tagMSG *, struct HWND__ *, unsigned int, unsigned int, unsigned int);
// B6C2F4: using guessed type int (__stdcall *gpfnMessageBox)(struct HWND__ *, const char *, const char *, unsigned int);
// B6C2F8: using guessed type int (*gpfnwsprintf)(char *, const char *, ...);

//----- (007617C0) --------------------------------------------------------
HINSTANCE__ *__cdecl sub_7617C0(int a1)
{
  HINSTANCE__ *result; // eax@1

  result = *(HINSTANCE__ **)(a1 + 8);
  if ( result || (result = LoadLibraryA("advapi32"), (*(_DWORD *)(a1 + 8) = result) != 0) )
  {
    result = (HINSTANCE__ *)GetProcAddress(result, "RegOpenKeyExA");
    *(_DWORD *)(a1 + 12) = result;
    if ( result )
    {
      result = (HINSTANCE__ *)GetProcAddress(*(HMODULE *)(a1 + 8), "RegQueryValueExA");
      *(_DWORD *)(a1 + 16) = result;
      if ( result )
      {
        result = (HINSTANCE__ *)GetProcAddress(*(HMODULE *)(a1 + 8), "RegCloseKey");
        *(_DWORD *)(a1 + 20) = result;
      }
    }
  }
  return result;
}

//----- (00761820) --------------------------------------------------------
int __cdecl sub_761820(int a1)
{
  int result; // eax@4

  if ( a1 )
  {
    if ( *(_DWORD *)(a1 + 8) )
    {
      FreeLibrary(*(HMODULE *)(a1 + 8));
      *(_DWORD *)(a1 + 8) = 0;
    }
    result = 0;
    *(_DWORD *)(a1 + 12) = 0;
    *(_DWORD *)(a1 + 16) = 0;
    *(_DWORD *)(a1 + 20) = 0;
  }
  return result;
}

//----- (00761850) --------------------------------------------------------
signed int (__cdecl *__cdecl sub_761850(int a1))(int, int)
{
  signed int (__cdecl *result)(int, int); // eax@1

  *(_DWORD *)(a1 + 28) = fDCT8x8_AAN_PX;
  result = fQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 32) = fDCT8x8_IPP_PX;
  *(_DWORD *)(a1 + 252) = fQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 256) = fQnt8x8_IPP_PX;
  *(_DWORD *)(a1 + 260) = fQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 240) = EncodeHuffman8x8_PX;
  *(_DWORD *)(a1 + 244) = DecodeHuffman8x8_PX;
  *(_DWORD *)(a1 + 248) = Decode_Block_Thumb_PX;
  *(_DWORD *)(a1 + 264) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 268) = iQnt8x8_IPP_PX;
  *(_DWORD *)(a1 + 272) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 36) = iDCT8x8_AAN_PX;
  *(_DWORD *)(a1 + 40) = iDCT4x4_AAN_PX;
  *(_DWORD *)(a1 + 44) = iDCT2x2_AAN_PX;
  *(_DWORD *)(a1 + 48) = iDCT1x1_AAN_PX;
  *(_DWORD *)(a1 + 52) = iDCT8x8_IPP_PX;
  *(_DWORD *)(a1 + 56) = iDCT4x4_IPP_PX;
  *(_DWORD *)(a1 + 60) = iDCT2x2_IPP_PX;
  *(_DWORD *)(a1 + 64) = iDCT1x1_IPP_PX;
  *(_DWORD *)(a1 + 68) = 0;
  *(_DWORD *)(a1 + 72) = 0;
  *(_DWORD *)(a1 + 76) = 0;
  *(_DWORD *)(a1 + 80) = 0;
  *(_DWORD *)(a1 + 84) = 0;
  *(_DWORD *)(a1 + 88) = EB_Init_PX;
  *(_DWORD *)(a1 + 92) = EB_Write_Bytes_PX;
  *(_DWORD *)(a1 + 96) = 0;
  *(_DWORD *)(a1 + 100) = Y_to_Y_111_Full_MCU_PX;
  *(_DWORD *)(a1 + 104) = RGB_to_YCbCr_111_Full_MCU_PX;
  *(_DWORD *)(a1 + 108) = RGB_to_YCbCr_422_Full_MCU_PX;
  *(_DWORD *)(a1 + 112) = RGB_to_YCbCr_411_Full_MCU_PX;
  *(_DWORD *)(a1 + 116) = BGR_to_YCbCr_111_Full_MCU_PX;
  *(_DWORD *)(a1 + 120) = BGR_to_YCbCr_422_Full_MCU_PX;
  *(_DWORD *)(a1 + 124) = BGR_to_YCbCr_411_Full_MCU_PX;
  *(_DWORD *)(a1 + 128) = OTHER_to_OTHER_111_Full_MCU;
  *(_DWORD *)(a1 + 132) = OTHER_to_OTHER_422_Full_MCU;
  *(_DWORD *)(a1 + 136) = OTHER_to_OTHER_411_Full_MCU;
  *(_DWORD *)(a1 + 140) = YCbYCr_to_YCbCr_422_Full_MCU_PX;
  *(_DWORD *)(a1 + 144) = RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_PX;
  *(_DWORD *)(a1 + 148) = RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_PX;
  *(_DWORD *)(a1 + 152) = RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_PX;
  *(_DWORD *)(a1 + 156) = OTHER_to_OTHER_1111_Full_MCU;
  *(_DWORD *)(a1 + 160) = 0;
  *(_DWORD *)(a1 + 164) = Y_111_to_Y_Full_MCU_PX;
  *(_DWORD *)(a1 + 168) = YCbCr_111_to_RGB_Full_MCU_PX;
  *(_DWORD *)(a1 + 172) = YCbCr_422_to_RGB_Full_MCU_PX;
  *(_DWORD *)(a1 + 176) = YCbCr_411_to_RGB_Full_MCU_PX;
  *(_DWORD *)(a1 + 180) = YCbCr_111_to_BGR_Full_MCU_PX;
  *(_DWORD *)(a1 + 184) = YCbCr_422_to_BGR_Full_MCU_PX;
  *(_DWORD *)(a1 + 188) = YCbCr_411_to_BGR_Full_MCU_PX;
  *(_DWORD *)(a1 + 192) = YCbCr_111_to_RGBA_FPX_Full_MCU_PX;
  *(_DWORD *)(a1 + 196) = YCbCr_422_to_RGBA_FPX_Full_MCU_PX;
  *(_DWORD *)(a1 + 200) = YCbCr_411_to_RGBA_FPX_Full_MCU_PX;
  *(_DWORD *)(a1 + 204) = OTHER_111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 208) = OTHER_422_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 212) = OTHER_411_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 216) = OTHER_111_to_OTHER4_Full_MCU_PX;
  *(_DWORD *)(a1 + 220) = YCbCr_422_to_YCbYCr_Full_MCU_PX;
  *(_DWORD *)(a1 + 224) = YCbCrA_FPX_1111_to_RGBA_FPX_Full_MCU_PX;
  *(_DWORD *)(a1 + 228) = YCbCrA_FPX_4224_to_RGBA_FPX_Full_MCU_PX;
  *(_DWORD *)(a1 + 232) = YCbCrA_FPX_4114_to_RGBA_FPX_Full_MCU_PX;
  *(_DWORD *)(a1 + 236) = OTHER_1111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 24) = ownEMMSs;
  return result;
}
// 7624E0: using guessed type int ownEMMSs();

//----- (00761A80) --------------------------------------------------------
int (__cdecl *__cdecl sub_761A80(int a1))(int, int)
{
  int (__cdecl *result)(int, int); // eax@1

  *(_DWORD *)(a1 + 28) = fDCT8x8_AAN_M5;
  result = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 32) = fDCT8x8_IPP_M5;
  *(_DWORD *)(a1 + 252) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 256) = fQnt8x8_IPP_M5;
  *(_DWORD *)(a1 + 260) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 240) = EncodeHuffman8x8_M5;
  *(_DWORD *)(a1 + 244) = DecodeHuffman8x8_M5;
  *(_DWORD *)(a1 + 248) = Decode_Block_Skip_M5;
  *(_DWORD *)(a1 + 264) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 268) = iQnt8x8_IPP_M5;
  *(_DWORD *)(a1 + 272) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 36) = iDCT8x8_AAN_M5;
  *(_DWORD *)(a1 + 40) = iDCT4x4_AAN_PX;
  *(_DWORD *)(a1 + 44) = iDCT2x2_AAN_PX;
  *(_DWORD *)(a1 + 48) = iDCT1x1_AAN_PX;
  *(_DWORD *)(a1 + 52) = iDCT8x8_IPP_M5;
  *(_DWORD *)(a1 + 56) = iDCT4x4_IPP_PX;
  *(_DWORD *)(a1 + 60) = iDCT2x2_IPP_PX;
  *(_DWORD *)(a1 + 64) = iDCT1x1_IPP_PX;
  *(_DWORD *)(a1 + 68) = 0;
  *(_DWORD *)(a1 + 72) = 0;
  *(_DWORD *)(a1 + 76) = 0;
  *(_DWORD *)(a1 + 80) = 0;
  *(_DWORD *)(a1 + 84) = 0;
  *(_DWORD *)(a1 + 88) = EB_Init_M5;
  *(_DWORD *)(a1 + 92) = EB_Write_Bytes_M5;
  *(_DWORD *)(a1 + 96) = 0;
  *(_DWORD *)(a1 + 100) = Y_to_Y_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 104) = RGB_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 108) = RGB_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 112) = RGB_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 116) = BGR_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 120) = BGR_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 124) = BGR_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 128) = OTHER_to_OTHER_111_Full_MCU;
  *(_DWORD *)(a1 + 132) = OTHER_to_OTHER_422_Full_MCU;
  *(_DWORD *)(a1 + 136) = OTHER_to_OTHER_411_Full_MCU;
  *(_DWORD *)(a1 + 140) = YCbYCr_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 144) = RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_M5;
  *(_DWORD *)(a1 + 148) = RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_M5;
  *(_DWORD *)(a1 + 152) = RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_M5;
  *(_DWORD *)(a1 + 156) = OTHER_to_OTHER_1111_Full_MCU;
  *(_DWORD *)(a1 + 160) = 0;
  *(_DWORD *)(a1 + 164) = Y_111_to_Y_Full_MCU_M5;
  *(_DWORD *)(a1 + 168) = YCbCr_111_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 172) = YCbCr_422_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 176) = YCbCr_411_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 180) = YCbCr_111_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 184) = YCbCr_422_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 188) = YCbCr_411_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 192) = YCbCr_111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 196) = YCbCr_422_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 200) = YCbCr_411_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 204) = OTHER_111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 208) = OTHER_422_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 212) = OTHER_411_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 216) = OTHER_111_to_OTHER4_Full_MCU_PX;
  *(_DWORD *)(a1 + 220) = YCbCr_422_to_YCbYCr_Full_MCU_M5;
  *(_DWORD *)(a1 + 224) = YCbCrA_FPX_1111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 228) = YCbCrA_FPX_4224_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 232) = YCbCrA_FPX_4114_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 236) = OTHER_1111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 24) = ownEMMSh;
  return result;
}

//----- (00761CB0) --------------------------------------------------------
int (__cdecl *__cdecl sub_761CB0(int a1))(int, int)
{
  int (__cdecl *result)(int, int); // eax@1

  *(_DWORD *)(a1 + 28) = fDCT8x8_AAN_M5;
  result = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 32) = fDCT8x8_IPP_M5;
  *(_DWORD *)(a1 + 252) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 256) = fQnt8x8_IPP_M5;
  *(_DWORD *)(a1 + 260) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 240) = EncodeHuffman8x8_M5;
  *(_DWORD *)(a1 + 244) = DecodeHuffman8x8_M6;
  *(_DWORD *)(a1 + 248) = Decode_Block_Skip_M5;
  *(_DWORD *)(a1 + 264) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 268) = iQnt8x8_IPP_M5;
  *(_DWORD *)(a1 + 272) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 36) = iDCT8x8_AAN_M5;
  *(_DWORD *)(a1 + 40) = iDCT4x4_AAN_PX;
  *(_DWORD *)(a1 + 44) = iDCT2x2_AAN_PX;
  *(_DWORD *)(a1 + 48) = iDCT1x1_AAN_PX;
  *(_DWORD *)(a1 + 52) = iDCT8x8_IPP_M5;
  *(_DWORD *)(a1 + 56) = iDCT4x4_IPP_PX;
  *(_DWORD *)(a1 + 60) = iDCT2x2_IPP_PX;
  *(_DWORD *)(a1 + 64) = iDCT1x1_IPP_PX;
  *(_DWORD *)(a1 + 68) = 0;
  *(_DWORD *)(a1 + 72) = 0;
  *(_DWORD *)(a1 + 76) = 0;
  *(_DWORD *)(a1 + 80) = 0;
  *(_DWORD *)(a1 + 84) = 0;
  *(_DWORD *)(a1 + 88) = EB_Init_M5;
  *(_DWORD *)(a1 + 92) = EB_Write_Bytes_M5;
  *(_DWORD *)(a1 + 96) = 0;
  *(_DWORD *)(a1 + 100) = Y_to_Y_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 104) = RGB_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 108) = RGB_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 112) = RGB_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 116) = BGR_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 120) = BGR_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 124) = BGR_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 128) = OTHER_to_OTHER_111_Full_MCU;
  *(_DWORD *)(a1 + 132) = OTHER_to_OTHER_422_Full_MCU;
  *(_DWORD *)(a1 + 136) = OTHER_to_OTHER_411_Full_MCU;
  *(_DWORD *)(a1 + 140) = YCbYCr_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 144) = RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_M5;
  *(_DWORD *)(a1 + 148) = RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_M5;
  *(_DWORD *)(a1 + 152) = RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_M5;
  *(_DWORD *)(a1 + 156) = OTHER_to_OTHER_1111_Full_MCU;
  *(_DWORD *)(a1 + 160) = 0;
  *(_DWORD *)(a1 + 164) = Y_111_to_Y_Full_MCU_M5;
  *(_DWORD *)(a1 + 168) = YCbCr_111_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 172) = YCbCr_422_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 176) = YCbCr_411_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 180) = YCbCr_111_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 184) = YCbCr_422_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 188) = YCbCr_411_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 192) = YCbCr_111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 196) = YCbCr_422_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 200) = YCbCr_411_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 204) = OTHER_111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 208) = OTHER_422_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 212) = OTHER_411_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 216) = OTHER_111_to_OTHER4_Full_MCU_PX;
  *(_DWORD *)(a1 + 220) = YCbCr_422_to_YCbYCr_Full_MCU_M5;
  *(_DWORD *)(a1 + 224) = YCbCrA_FPX_1111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 228) = YCbCrA_FPX_4224_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 232) = YCbCrA_FPX_4114_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 236) = OTHER_1111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 24) = ownEMMSh;
  return result;
}

//----- (00761EE0) --------------------------------------------------------
int (__cdecl *__cdecl sub_761EE0(int a1))(int, int)
{
  int (__cdecl *result)(int, int); // eax@1

  *(_DWORD *)(a1 + 28) = fDCT8x8_AAN_M5;
  result = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 32) = fDCT8x8_IPP_A6;
  *(_DWORD *)(a1 + 252) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 256) = fQnt8x8_IPP_A6;
  *(_DWORD *)(a1 + 260) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 240) = EncodeHuffman8x8_A6;
  *(_DWORD *)(a1 + 244) = DecodeHuffman8x8_M6;
  *(_DWORD *)(a1 + 248) = Decode_Block_Skip_M5;
  *(_DWORD *)(a1 + 264) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 268) = iQnt8x8_IPP_M5;
  *(_DWORD *)(a1 + 272) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 36) = iDCT8x8_AAN_M5;
  *(_DWORD *)(a1 + 40) = iDCT4x4_AAN_PX;
  *(_DWORD *)(a1 + 44) = iDCT2x2_AAN_PX;
  *(_DWORD *)(a1 + 48) = iDCT1x1_AAN_PX;
  *(_DWORD *)(a1 + 52) = iDCT8x8_IPP_A6;
  *(_DWORD *)(a1 + 56) = iDCT4x4_IPP_PX;
  *(_DWORD *)(a1 + 60) = iDCT2x2_IPP_PX;
  *(_DWORD *)(a1 + 64) = iDCT1x1_IPP_PX;
  *(_DWORD *)(a1 + 68) = 0;
  *(_DWORD *)(a1 + 72) = 0;
  *(_DWORD *)(a1 + 76) = 0;
  *(_DWORD *)(a1 + 80) = 0;
  *(_DWORD *)(a1 + 84) = 0;
  *(_DWORD *)(a1 + 88) = EB_Init_M5;
  *(_DWORD *)(a1 + 92) = EB_Write_Bytes_M5;
  *(_DWORD *)(a1 + 96) = 0;
  *(_DWORD *)(a1 + 100) = Y_to_Y_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 104) = RGB_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 108) = RGB_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 112) = RGB_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 116) = BGR_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 120) = BGR_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 124) = BGR_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 128) = OTHER_to_OTHER_111_Full_MCU;
  *(_DWORD *)(a1 + 132) = OTHER_to_OTHER_422_Full_MCU;
  *(_DWORD *)(a1 + 136) = OTHER_to_OTHER_411_Full_MCU;
  *(_DWORD *)(a1 + 140) = YCbYCr_to_YCbCr_422_Full_MCU_A6;
  *(_DWORD *)(a1 + 144) = RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_M5;
  *(_DWORD *)(a1 + 148) = RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_M5;
  *(_DWORD *)(a1 + 152) = RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_M5;
  *(_DWORD *)(a1 + 156) = OTHER_to_OTHER_1111_Full_MCU;
  *(_DWORD *)(a1 + 160) = 0;
  *(_DWORD *)(a1 + 164) = Y_111_to_Y_Full_MCU_M5;
  *(_DWORD *)(a1 + 168) = YCbCr_111_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 172) = YCbCr_422_to_RGB_Full_MCU_A6;
  *(_DWORD *)(a1 + 176) = YCbCr_411_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 180) = YCbCr_111_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 184) = YCbCr_422_to_BGR_Full_MCU_A6;
  *(_DWORD *)(a1 + 188) = YCbCr_411_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 192) = YCbCr_111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 196) = YCbCr_422_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 200) = YCbCr_411_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 204) = OTHER_111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 208) = OTHER_422_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 212) = OTHER_411_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 216) = OTHER_111_to_OTHER4_Full_MCU_PX;
  *(_DWORD *)(a1 + 220) = YCbCr_422_to_YCbYCr_Full_MCU_M5;
  *(_DWORD *)(a1 + 224) = YCbCrA_FPX_1111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 228) = YCbCrA_FPX_4224_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 232) = YCbCrA_FPX_4114_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 236) = OTHER_1111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 24) = ownEMMSh;
  return result;
}

//----- (00762110) --------------------------------------------------------
int (__cdecl *__cdecl sub_762110(int a1))(int, int)
{
  int (__cdecl *result)(int, int); // eax@1

  *(_DWORD *)(a1 + 28) = fDCT8x8_AAN_M5;
  result = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 32) = fDCT8x8_IPP_W7;
  *(_DWORD *)(a1 + 252) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 256) = fQnt8x8_IPP_W7;
  *(_DWORD *)(a1 + 260) = fQnt8x8_AAN_M5;
  *(_DWORD *)(a1 + 240) = EncodeHuffman8x8_M5;
  *(_DWORD *)(a1 + 244) = DecodeHuffman8x8_M6;
  *(_DWORD *)(a1 + 248) = Decode_Block_Skip_M5;
  *(_DWORD *)(a1 + 264) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 268) = iQnt8x8_IPP_W7;
  *(_DWORD *)(a1 + 272) = iQnt8x8_AAN_PX;
  *(_DWORD *)(a1 + 36) = iDCT8x8_AAN_M5;
  *(_DWORD *)(a1 + 40) = iDCT4x4_AAN_PX;
  *(_DWORD *)(a1 + 44) = iDCT2x2_AAN_PX;
  *(_DWORD *)(a1 + 48) = iDCT1x1_AAN_PX;
  *(_DWORD *)(a1 + 52) = iDCT8x8_IPP_W7;
  *(_DWORD *)(a1 + 56) = iDCT4x4_IPP_PX;
  *(_DWORD *)(a1 + 60) = iDCT2x2_IPP_PX;
  *(_DWORD *)(a1 + 64) = iDCT1x1_IPP_PX;
  *(_DWORD *)(a1 + 68) = 0;
  *(_DWORD *)(a1 + 72) = 0;
  *(_DWORD *)(a1 + 76) = 0;
  *(_DWORD *)(a1 + 80) = 0;
  *(_DWORD *)(a1 + 84) = 0;
  *(_DWORD *)(a1 + 88) = EB_Init_M5;
  *(_DWORD *)(a1 + 92) = EB_Write_Bytes_M5;
  *(_DWORD *)(a1 + 96) = 0;
  *(_DWORD *)(a1 + 100) = Y_to_Y_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 104) = RGB_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 108) = RGB_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 112) = RGB_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 116) = BGR_to_YCbCr_111_Full_MCU_M5;
  *(_DWORD *)(a1 + 120) = BGR_to_YCbCr_422_Full_MCU_M5;
  *(_DWORD *)(a1 + 124) = BGR_to_YCbCr_411_Full_MCU_M5;
  *(_DWORD *)(a1 + 128) = OTHER_to_OTHER_111_Full_MCU;
  *(_DWORD *)(a1 + 132) = OTHER_to_OTHER_422_Full_MCU;
  *(_DWORD *)(a1 + 136) = OTHER_to_OTHER_411_Full_MCU;
  *(_DWORD *)(a1 + 140) = YCbYCr_to_YCbCr_422_Full_MCU_A6;
  *(_DWORD *)(a1 + 144) = RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_M5;
  *(_DWORD *)(a1 + 148) = RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_M5;
  *(_DWORD *)(a1 + 152) = RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_M5;
  *(_DWORD *)(a1 + 156) = OTHER_to_OTHER_1111_Full_MCU;
  *(_DWORD *)(a1 + 160) = 0;
  *(_DWORD *)(a1 + 164) = Y_111_to_Y_Full_MCU_M5;
  *(_DWORD *)(a1 + 168) = YCbCr_111_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 172) = YCbCr_422_to_RGB_Full_MCU_A6;
  *(_DWORD *)(a1 + 176) = YCbCr_411_to_RGB_Full_MCU_M5;
  *(_DWORD *)(a1 + 180) = YCbCr_111_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 184) = YCbCr_422_to_BGR_Full_MCU_A6;
  *(_DWORD *)(a1 + 188) = YCbCr_411_to_BGR_Full_MCU_M5;
  *(_DWORD *)(a1 + 192) = YCbCr_111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 196) = YCbCr_422_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 200) = YCbCr_411_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 204) = OTHER_111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 208) = OTHER_422_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 212) = OTHER_411_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 216) = OTHER_111_to_OTHER4_Full_MCU_PX;
  *(_DWORD *)(a1 + 220) = YCbCr_422_to_YCbYCr_Full_MCU_M5;
  *(_DWORD *)(a1 + 224) = YCbCrA_FPX_1111_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 228) = YCbCrA_FPX_4224_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 232) = YCbCrA_FPX_4114_to_RGBA_FPX_Full_MCU_M5;
  *(_DWORD *)(a1 + 236) = OTHER_1111_to_OTHER_Full_MCU_PX;
  *(_DWORD *)(a1 + 24) = ownEMMSh;
  return result;
}

//----- (00762340) --------------------------------------------------------
signed int __cdecl ownQueryProcessorType(int a1)
{
  signed int v1; // ecx@1
  int (__stdcall *v2)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // eax@1
  int v4; // [sp+24h] [bp-1Ch]@4
  int v5; // [sp+28h] [bp-18h]@4
  int v6; // [sp+2Ch] [bp-14h]@4
  int v7; // [sp+30h] [bp-10h]@4

  v1 = -1;
  v2 = *(int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(a1 + 12);
  if ( v2 && *(_DWORD *)(a1 + 16) && *(_DWORD *)(a1 + 20) )
  {
    v4 = 4;
    v5 = 4;
    v6 = 0;
    v7 = -1;
    if ( !v2(-2147483646, ijlkey, 0, 1, &v6) )
      (*(void (__stdcall **)(int, char *, _DWORD, int *, int *, int *))(a1 + 16))(v6, usecpu, 0, &v4, &v7, &v5);
    if ( v6 )
    {
      (*(void (__stdcall **)(int))(a1 + 20))(v6);
      v1 = v7;
    }
    else
    {
      v1 = v7;
    }
  }
  return v1;
}
// A84BA0: using guessed type const char *const ijlkey;
// A84BA4: using guessed type char *usecpu;

//----- (007623E0) --------------------------------------------------------
signed int __cdecl ownInitializeLibrary(int a1)
{
  int v1; // eax@1
  signed int v2; // ebx@1
  int *v3; // eax@1
  int v4; // edx@1

  sub_761700(a1);
  v1 = (int)sub_7617C0(a1);
  v2 = ownGetProcessorType(v1, a1);
  v3 = ownGetProcessorInfo();
  __g_memcpy = (void (__cdecl *)(void *, void *, unsigned int))sub_7616D0;
  v4 = v3[5];
  __g_memzero = (void (__cdecl *)(void *, unsigned int))sub_7616F0;
  if ( v4 & 0x10 )
    __g_rdtsc = (unsigned __int64 (__cdecl *)())ownRDTSCh;
  else
    __g_rdtsc = (unsigned __int64 (__cdecl *)())ownRDTSCs;
  switch ( v2 )
  {
    case 1:
      sub_761850(a1);
      break;
    case 2:
      sub_761850(a1);
      break;
    case 3:
      sub_761A80(a1);
      break;
    case 4:
      sub_761CB0(a1);
      break;
    case 5:
      sub_761EE0(a1);
      break;
    case 6:
      sub_762110(a1);
      break;
    default:
      sub_761850(a1);
      break;
  }
  return 1;
}
// 7616D0: using guessed type int sub_7616D0();
// 7616F0: using guessed type int sub_7616F0();
// 78A8C0: using guessed type int ownRDTSCh[4];
// B6C2E0: using guessed type unsigned __int64 (__cdecl *__g_rdtsc)();
// B6C2E4: using guessed type void (__cdecl *__g_memzero)(void *, unsigned int);
// B6C2E8: using guessed type void (__cdecl *__g_memcpy)(void *, void *, unsigned int);

//----- (007624B0) --------------------------------------------------------
int __cdecl ownFreeLibrary(int a1)
{
  sub_761780(a1);
  return sub_761820(a1);
}

//----- (007624D0) --------------------------------------------------------
__int64 __cdecl ownRDTSCs()
{
  return 0i64;
}

//----- (007624F0) --------------------------------------------------------
void __usercall sub_7624F0(int a1<eax>)
{
  int v1; // [sp+0h] [bp-30h]@1
  int *v2; // [sp+18h] [bp-18h]@1
  int v3; // [sp+20h] [bp-10h]@1
  int (__cdecl *v4)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int); // [sp+24h] [bp-Ch]@1
  _UNKNOWN *v5; // [sp+28h] [bp-8h]@1
  int v6; // [sp+2Ch] [bp-4h]@1

  v5 = &unk_B7282C;
  v4 = _except_handler3;
  v3 = a1;
  v2 = &v1;
  v6 = 0;
  byte_B6C318 = 32;
  byte_B6C319 = 32;
  byte_B6C31A = 32;
  byte_B6C31B = 32;
  byte_B6C31C = 32;
  byte_B6C31D = 32;
  byte_B6C31E = 32;
  byte_B6C31F = 32;
  byte_B6C320 = 32;
  byte_B6C321 = 32;
  byte_B6C322 = 32;
  byte_B6C323 = 32;
  v1 = 12;
  byte_B6C324 = 0;
  dword_B6C300 = 0;
  dword_B6C304 = 0;
  dword_B6C308 = 0;
  dword_B6C30C = 0;
  dword_B6C310 = 0;
  dword_B6C314 = 0;
  own_detect_processor_ia32((int)&dword_B6C300);
}
// B6C300: using guessed type int dword_B6C300;
// B6C304: using guessed type int dword_B6C304;
// B6C308: using guessed type int dword_B6C308;
// B6C30C: using guessed type int dword_B6C30C;
// B6C310: using guessed type int dword_B6C310;
// B6C314: using guessed type int dword_B6C314;
// B6C318: using guessed type char byte_B6C318;
// B6C319: using guessed type char byte_B6C319;
// B6C31A: using guessed type char byte_B6C31A;
// B6C31B: using guessed type char byte_B6C31B;
// B6C31C: using guessed type char byte_B6C31C;
// B6C31D: using guessed type char byte_B6C31D;
// B6C31E: using guessed type char byte_B6C31E;
// B6C31F: using guessed type char byte_B6C31F;
// B6C320: using guessed type char byte_B6C320;
// B6C321: using guessed type char byte_B6C321;
// B6C322: using guessed type char byte_B6C322;
// B6C323: using guessed type char byte_B6C323;
// B6C324: using guessed type char byte_B6C324;

//----- (007625C3) --------------------------------------------------------
void __usercall sub_7625C3(int a1<ebp>)
{
  dword_B6C300 = 0;
  dword_B6C304 = 0;
  dword_B6C308 = 0;
  dword_B6C30C = 0;
  dword_B6C310 = 0;
  dword_B6C314 = 0;
  byte_B6C318 = 32;
  byte_B6C319 = 32;
  byte_B6C31A = 32;
  byte_B6C31B = 32;
  byte_B6C31C = 32;
  byte_B6C31D = 32;
  byte_B6C31E = 32;
  byte_B6C31F = 32;
  byte_B6C320 = 32;
  byte_B6C321 = 32;
  byte_B6C322 = 32;
  byte_B6C323 = 32;
  *(_DWORD *)(a1 - 44) = 12;
  byte_B6C324 = 0;
  *(_DWORD *)(a1 - 4) = -1;
  JUMPOUT(loc_7625A9);
}
// 7625A9: using guessed type int loc_7625A9();
// B6C300: using guessed type int dword_B6C300;
// B6C304: using guessed type int dword_B6C304;
// B6C308: using guessed type int dword_B6C308;
// B6C30C: using guessed type int dword_B6C30C;
// B6C310: using guessed type int dword_B6C310;
// B6C314: using guessed type int dword_B6C314;
// B6C318: using guessed type char byte_B6C318;
// B6C319: using guessed type char byte_B6C319;
// B6C31A: using guessed type char byte_B6C31A;
// B6C31B: using guessed type char byte_B6C31B;
// B6C31C: using guessed type char byte_B6C31C;
// B6C31D: using guessed type char byte_B6C31D;
// B6C31E: using guessed type char byte_B6C31E;
// B6C31F: using guessed type char byte_B6C31F;
// B6C320: using guessed type char byte_B6C320;
// B6C321: using guessed type char byte_B6C321;
// B6C322: using guessed type char byte_B6C322;
// B6C323: using guessed type char byte_B6C323;
// B6C324: using guessed type char byte_B6C324;

//----- (00762643) --------------------------------------------------------
signed int __cdecl sub_762643()
{
  return 1;
}

//----- (00762650) --------------------------------------------------------
int *__cdecl ownGetProcessorInfo()
{
  return &dword_B6C300;
}
// B6C300: using guessed type int dword_B6C300;

//----- (00762660) --------------------------------------------------------
signed int __usercall ownGetProcessorType<eax>(int a1<eax>, int a2)
{
  signed int result; // eax@1
  int *v3; // eax@8
  int v4; // edx@8
  int v5; // eax@10

  sub_7624F0(a1);
  result = ownQueryProcessorType(a2);
  if ( result && result != 1 && result != 2 && result != 3 && result != 4 && result != 5 && result != 6 )
  {
    v3 = ownGetProcessorInfo();
    v4 = v3[2];
    switch ( v4 )
    {
      case 5:
        if ( (unsigned int)((char *)loc_7FFFFF + 1) & v3[5] )
          result = 3;
        else
          result = 1;
        break;
      case 6:
        v5 = v3[5];
        if ( !((unsigned int)((char *)loc_7FFFFF + 1) & v5) || v5 & 0x2000000 )
        {
          if ( (v5 & 0x2800000) == 41943040 )
            result = 5;
          else
            result = 2;
        }
        else
        {
          result = 4;
        }
        break;
      case 15:
        if ( v3[5] & 0x4000000 )
          result = 6;
        else
          result = 0;
        break;
      default:
        result = 0;
        break;
    }
  }
  return result;
}
// 7FFFFF: using guessed type int loc_7FFFFF();

//----- (00762750) --------------------------------------------------------
HANDLE __cdecl ownOpenFile(LPCSTR lpFileName, DWORD dwDesiredAccess)
{
  DWORD v2; // eax@2
  HANDLE result; // eax@4

  if ( dwDesiredAccess & 0x40000000 )
    v2 = 2;
  else
    v2 = 3;
  result = CreateFileA(lpFileName, dwDesiredAccess, 1u, 0, v2, 0, 0);
  if ( result == (HANDLE)-1 )
    result = 0;
  return result;
}

//----- (00762790) --------------------------------------------------------
BOOL __cdecl ownCloseFile(HANDLE hObject)
{
  return CloseHandle(hObject);
}

//----- (007627A0) --------------------------------------------------------
BOOL __cdecl ownReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead)
{
  return ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, 0);
}

//----- (007627C0) --------------------------------------------------------
BOOL __cdecl ownWriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten)
{
  return WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, 0);
}

//----- (007627E0) --------------------------------------------------------
signed int __cdecl ownSeekFile(HANDLE hFile, LONG lDistanceToMove, DWORD dwMoveMethod)
{
  signed int v3; // esi@1

  v3 = 1;
  if ( SetFilePointer(hFile, lDistanceToMove, 0, dwMoveMethod) == -1 )
    v3 = 0;
  return v3;
}

//----- (00762810) --------------------------------------------------------
int __cdecl Get_Scan(struct _STATE *a1, int a2, int a3)
{
  int result; // eax@2
  int v4; // edx@5
  _SCAN_COMPONENT *v5; // edi@6
  int v6; // ebx@6

  if ( *(_DWORD *)(a3 + 14300) )
  {
    result = -19;
  }
  else
  {
    result = DP_Parse_SOS(a3 + 14244, a3, a1, a3 + 14244, a2);
    if ( !result )
    {
      a1->Prog_EndOfBlock_Run = 0;
      v4 = 0;
      if ( *(_DWORD *)a2 > 0 )
      {
        v5 = *(_SCAN_COMPONENT **)(a2 + 52);
        v6 = 0;
        while ( 1 )
        {
          if ( !v5[v6].dc_table || !v5[v6].ac_table )
            return -17;
          if ( !v5[v6].quant_table )
            break;
          ++v6;
          ++v4;
          if ( v4 >= *(_DWORD *)a2 )
            return result;
        }
        result = -18;
      }
    }
  }
  return result;
}

//----- (007628C0) --------------------------------------------------------
signed int __cdecl IJL_Decode(char *a1)
{
  int v1; // esi@1
  char v2; // bl@1
  struct _STATE *v3; // ebp@1
  void *v4; // eax@1
  _SCAN *v5; // eax@1
  int v6; // edx@2
  _IJLIOTYPE v7; // eax@6
  _IJLIOTYPE v8; // eax@20
  signed int v9; // edi@22
  int v10; // ebp@31
  int v11; // edx@37
  int v12; // eax@37
  int v13; // edi@37
  int v14; // ecx@38
  int v15; // edi@41
  void *v16; // eax@42
  int v17; // edx@43
  int v18; // eax@45
  int v19; // edx@49
  int v20; // edx@54
  int v21; // edx@71
  signed int v22; // eax@105
  int v23; // eax@108
  int v25; // eax@133
  struct _STATE *v26; // ecx@134
  int v27; // edx@135
  int v28; // ecx@141
  int v29; // edx@145
  int v30; // ecx@146
  int v31; // edi@146
  int v32; // ecx@156
  int v33; // edx@159
  int v34; // eax@159
  int v35; // edi@159
  int v36; // ecx@160
  void *v37; // eax@163
  _IJLIOTYPE v38; // eax@183
  int v39; // eax@188
  void *v40; // edx@189
  int v41; // [sp+10h] [bp-24h]@1
  int v42; // [sp+14h] [bp-20h]@66
  struct _STATE *v43; // [sp+18h] [bp-1Ch]@31
  void *v44; // [sp+1Ch] [bp-18h]@1
  _SCAN *v45; // [sp+20h] [bp-14h]@29

  v1 = (int)a1;
  v2 = 0;
  v3 = (struct _STATE *)(a1 + 14312);
  v4 = (void *)*((_DWORD *)a1 + 3580);
  v41 = 0;
  v44 = v4;
  v5 = (_SCAN *)*((_DWORD *)a1 + 3576);
  if ( !v5 || (v6 = *((_DWORD *)a1 + 29), v6 == 1) )
  {
    if ( v5 )
    {
      if ( v5->curxMCU )
      {
        v6 = *((_DWORD *)a1 + 29);
      }
      else
      {
        if ( v5->curyMCU )
        {
          v6 = *((_DWORD *)a1 + 29);
        }
        else
        {
          DB_Begin((struct _STATE *)(a1 + 14312));
          v5 = (_SCAN *)*((_DWORD *)a1 + 3576);
          v6 = *((_DWORD *)a1 + 29);
        }
      }
    }
    else
    {
      DB_Begin((struct _STATE *)(a1 + 14312));
      v5 = (_SCAN *)*((_DWORD *)a1 + 3576);
      v6 = *((_DWORD *)a1 + 29);
    }
  }
  if ( v6 == 1 && (!v5 || !v5->curxMCU && !v5->curyMCU) )
  {
    *((_QWORD *)a1 + 1789) = 0i64;
    v38 = *(_DWORD *)a1;
    if ( *(_DWORD *)a1 == 2 || v38 == 6 || v38 == 14 || v38 == 18 || v38 == 16 )
    {
      v40 = (void *)*((_DWORD *)a1 + 3593);
      *((_DWORD *)a1 + 3585) = 0;
      if ( !ownSeekFile(v40, 0, 0) )
        return -23;
      v9 = Buffer_Read_Bytes(v3);
      if ( v9 )
        return v9;
      v5 = (_SCAN *)*((_DWORD *)a1 + 3576);
    }
    else
    {
      v39 = *((_DWORD *)a1 + 3586);
      *((_DWORD *)a1 + 3582) = *((_DWORD *)a1 + 17);
      *((_DWORD *)a1 + 3585) = 0;
      *((_DWORD *)a1 + 3587) = v39;
      v5 = (_SCAN *)*((_DWORD *)a1 + 3576);
    }
  }
  if ( v5 )
    v2 = 1;
  v7 = *(_DWORD *)a1;
  if ( *(_DWORD *)a1 != 6
    && v7 != 7
    && v7 != 14
    && v7 != 15
    && v7 != 17
    && v7 != 16
    && v7 != 19
    && v7 != 18
    && !*((_DWORD *)a1 + 2)
    && !*((_DWORD *)a1 + 4)
    && !*((_DWORD *)a1 + 3)
    && !*((_DWORD *)a1 + 1) )
    *((_DWORD *)a1 + 3585) = 0;
  if ( *((_DWORD *)a1 + 3575) || (v9 = Set_Decode_Fast_Path((struct _JPEG_PROPERTIES *)a1)) == 0 )
  {
    v8 = *(_DWORD *)a1;
    if ( *(_DWORD *)a1 == 1 || !v8 || v8 == 5 || v8 == 4 || v8 == 21 || v8 == 20 )
    {
      v9 = DP_Get_Next_Marker(v3, (enum IJL_MARKER *)&v41);
      if ( v9 )
        return v9;
      if ( v41 != 216 )
        return -13;
    }
    *((_DWORD *)a1 + 3574) = 0;
    *((_DWORD *)a1 + 3573) = 0;
    v45 = (_SCAN *)*((_DWORD *)a1 + 3576);
    if ( !v45 || *((_DWORD *)a1 + 29) == 1 && !v45->curxMCU && !v45->curyMCU )
    {
      while ( 1 )
      {
LABEL_112:
        v18 = DP_Get_Next_Marker(v3, (enum IJL_MARKER *)&v41);
        v9 = v18;
        if ( v18 )
          return v9;
        v20 = v41;
        if ( v41 == 256 )
          return 0;
LABEL_57:
        switch ( v20 )
        {
          case 254:
            v9 = DP_Parse_COM(v18, (struct _JPEG_PROPERTIES *)v1);
            if ( !v9 )
              continue;
            return v9;
          case 238:
            v9 = DP_Parse_APP14((struct _JPEG_PROPERTIES *)v1);
            if ( !v9 )
            {
              if ( *(_DWORD *)(v1 + 14300) || (v9 = Set_Decode_Fast_Path((struct _JPEG_PROPERTIES *)v1)) == 0 )
                continue;
            }
            return v9;
          case 224:
            if ( *(_DWORD *)v1 == 6 || (v9 = DP_Parse_APP0((struct _JPEG_PROPERTIES *)v1)) == 0 )
              continue;
            return v9;
          case 221:
            v9 = DP_Parse_DRI(v3, &v42);
            if ( v9 )
              return v9;
            *(_DWORD *)(v1 + 14288) = v42;
            continue;
          case 219:
            v9 = DP_Parse_DQT((char *)v1, v3, *(enum _DCTTYPE *)(v1 + 20));
            if ( !v9 )
              continue;
            return v9;
          case 218:
            v43 = v3;
            v10 = *(_DWORD *)(v1 + 14304);
            goto LABEL_32;
          case 217:
            v21 = *(_DWORD *)v1;
            if ( *(_DWORD *)v1 == 5 || v21 == 4 || v21 == 1 || !v21 || v21 == 21 || v21 == 20 )
              return 0;
            if ( !*(_DWORD *)(v1 + 14300) )
            {
              if ( *(_DWORD *)(v1 + 116) && *(_DWORD *)(v1 + 104) && !*(_DWORD *)(v1 + 19936) )
                CConvert_Image((struct _JPEG_PROPERTIES *)v1);
              return v9;
            }
            v18 = DP_Get_Next_Marker(v3, (enum IJL_MARKER *)&v41);
            v9 = v18;
            if ( v18 )
              return v9;
            v20 = v41;
            if ( v41 != 216 )
              return -22;
            goto LABEL_57;
          case 216:
            *(_DWORD *)(v1 + 14288) = 0;
            continue;
          case 207:
            return -29;
          case 206:
            return -29;
          case 205:
            return -29;
          case 203:
            return -29;
          case 202:
            return -29;
          case 201:
            return -29;
          case 200:
            return -29;
          case 199:
            return -29;
          case 198:
            return -29;
          case 197:
            return -29;
          case 196:
            v9 = DP_Parse_DHT((char *)v1, v3);
            if ( !v9 )
              continue;
            return v9;
          case 195:
            return -29;
          case 194:
            if ( !*(_DWORD *)(v1 + 14300) )
              continue;
            goto LABEL_102;
          case 193:
            if ( *(_DWORD *)(v1 + 14300) )
              goto LABEL_102;
            continue;
          case 192:
LABEL_102:
            if ( *(_DWORD *)v1 == 5 || *(_DWORD *)v1 == 4 )
            {
              *(_DWORD *)(v1 + 14340) -= 2;
              return 0;
            }
            v9 = DP_Parse_SOF(v3, (struct _JPEG_PROPERTIES *)v1);
            if ( v9 )
              return v9;
            *(_DWORD *)(v1 + 14300) = 0;
            v22 = *(_DWORD *)(v1 + 14272);
            if ( v22 <= 0 || v22 > 255 )
              return -14;
            *(_DWORD *)(v1 + 84) = v22;
            v23 = *(_DWORD *)(v1 + 14252);
            *(_DWORD *)(v1 + 76) = *(_DWORD *)(v1 + 14248);
            *(_DWORD *)(v1 + 80) = v23;
            v9 = Set_Decode_Fast_Path((struct _JPEG_PROPERTIES *)v1);
            if ( v9 )
              return v9;
            break;
          default:
            v9 = DP_Skip(v3);
            if ( !v9 )
              continue;
            return v9;
          case 208:
          case 209:
          case 210:
          case 211:
          case 212:
          case 213:
          case 214:
          case 215:
            continue;
          case 256:
            return 0;
        }
      }
    }
    v43 = (struct _STATE *)(a1 + 14312);
    v10 = (int)v45;
LABEL_32:
    if ( v10 && v2 )
    {
      v2 = 0;
      goto LABEL_35;
    }
    v25 = (int)operator new(0x38u);
    v10 = v25;
    if ( !v25 )
      return -5;
    v26 = v43;
    *(_DWORD *)(v25 + 28) = 0;
    *(_DWORD *)(v25 + 32) = 0;
    *(_DWORD *)(v25 + 36) = 0;
    *(_DWORD *)(v25 + 40) = 0;
    *(_DWORD *)(v25 + 44) = 0;
    *(_DWORD *)(v25 + 48) = 0;
    v9 = Get_Scan(v26, v25, v1);
    if ( v9 )
    {
      v45 = (_SCAN *)v10;
      operator delete((void *)v10);
      return v9;
    }
    v27 = *(_DWORD *)v1;
    if ( *(_DWORD *)v1 == 1 )
    {
      v45 = (_SCAN *)v10;
    }
    else
    {
      if ( v27 )
      {
        switch ( v27 )
        {
          case 5:
            v45 = (_SCAN *)v10;
            break;
          case 4:
            v45 = (_SCAN *)v10;
            break;
          case 21:
            v45 = (_SCAN *)v10;
            break;
          default:
            if ( v27 != 20 )
            {
              v28 = *(_DWORD *)v10;
              *(_DWORD *)(v10 + 24) = *(_DWORD *)(v1 + 14288);
              *(_DWORD *)(v1 + 116) = v28 < *(_DWORD *)(v1 + 14272) && !*(_DWORD *)(v1 + 19936);
              Set_Decode_Fast_Path((struct _JPEG_PROPERTIES *)v1);
              v29 = *(_DWORD *)(v10 + 8);
              if ( v29 )
              {
                v30 = *(_DWORD *)(v1 + 19936);
                v31 = *(_DWORD *)(v10 + 20);
              }
              else
              {
                if ( *(_DWORD *)(v10 + 12) == 63 )
                {
                  if ( *(_DWORD *)(v10 + 16) )
                  {
                    v30 = *(_DWORD *)(v1 + 19936);
                    v31 = *(_DWORD *)(v10 + 20);
                  }
                  else
                  {
                    v31 = *(_DWORD *)(v10 + 20);
                    if ( v31 )
                    {
                      v30 = *(_DWORD *)(v1 + 19936);
                    }
                    else
                    {
                      v30 = *(_DWORD *)(v1 + 19936);
                      if ( !v30 )
                        goto LABEL_35;
                    }
                  }
                }
                else
                {
                  v30 = *(_DWORD *)(v1 + 19936);
                  v31 = *(_DWORD *)(v10 + 20);
                }
              }
              if ( v29 || *(_DWORD *)(v10 + 12) )
              {
                if ( !v31 && *(_DWORD *)(v10 + 12) == 63 )
                  ++*(_DWORD *)(v1 + 14296);
              }
              else
              {
                if ( !v31 )
                  *(_DWORD *)(v1 + 14292) += *(_DWORD *)v10;
              }
              v32 = v30 + 1;
              *(_DWORD *)(v1 + 19936) = v32;
              if ( v32 == 1 )
              {
                v33 = 0;
                v34 = 0;
                v35 = *(_DWORD *)(v1 + 14272);
                if ( v35 > 0 )
                {
                  v36 = *(_DWORD *)(v1 + 14284);
                  do
                  {
                    ++v34;
                    v33 += *(_DWORD *)(v36 + 8) * *(_DWORD *)(v36 + 4);
                    v36 += 16;
                  }
                  while ( v34 < v35 );
                  v1 = (int)a1;
                }
                v37 = operator new(2 * *(_DWORD *)(v1 + 124) * *(_DWORD *)(v1 + 120) * (v33 << 6));
                *(_DWORD *)(v1 + 19940) = v37;
                if ( !v37 )
                {
                  v45 = (_SCAN *)v10;
                  operator delete(*(void **)(v10 + 52));
                  *(_DWORD *)(v10 + 52) = 0;
                  operator delete((void *)v10);
                  *(_DWORD *)(v1 + 14304) = 0;
                  return -5;
                }
              }
LABEL_35:
              if ( *(_DWORD *)(v1 + 116) == 1 && !*(_DWORD *)(v1 + 19936) )
                *(_DWORD *)(v1 + 14296) += *(_DWORD *)v10;
              *(_DWORD *)(v1 + 14304) = v10;
              if ( *(_DWORD *)(v1 + 19944) == 1 )
              {
                v11 = 0;
                v12 = 0;
                v13 = *(_DWORD *)(v1 + 14272);
                if ( v13 > 0 )
                {
                  v14 = *(_DWORD *)(v1 + 14284);
                  do
                  {
                    ++v12;
                    v11 += *(_DWORD *)(v14 + 8) * *(_DWORD *)(v14 + 4);
                    v14 += 16;
                  }
                  while ( v12 < v13 );
                  v1 = (int)a1;
                }
                v15 = *(_DWORD *)(v1 + 120) * (v11 << 6) + (v11 << 7);
                if ( !*(_DWORD *)(v1 + 19948) )
                {
                  v16 = operator new(0x14u);
                  *(_DWORD *)(v1 + 19948) = v16;
                  if ( !v16 )
                    return -5;
                  **(_DWORD **)(v1 + 19948) = operator new(8 * v15);
                  v17 = *(_DWORD *)(v1 + 19948);
                  if ( !*(_DWORD *)v17 )
                  {
                    operator delete(*(void **)(v1 + 19948));
                    *(_DWORD *)(v1 + 19948) = 0;
                    return -5;
                  }
                  *(_DWORD *)(v17 + 4) = *(_DWORD *)v17 + 2 * v15;
                  *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 8) = *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 4) + 2 * v15;
                  *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 12) = *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 8) + 2 * v15;
                  *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 16) = 0;
                }
              }
              v18 = Decode_Scan((enum IJL_MARKER *)&v41, v43, v10, v1);
              v9 = v18;
              if ( v18 == 1 )
              {
                v45 = (_SCAN *)v10;
              }
              else
              {
                if ( v18 != 2 )
                {
                  if ( !*(_DWORD *)(v1 + 19936) )
                    *(_DWORD *)(v1 + 14368) += *(_DWORD *)v10;
                  v19 = *(_DWORD *)(v1 + 14304);
                  if ( v19 && !v18 )
                  {
                    operator delete(*(void **)(v19 + 52));
                    *(_DWORD *)(*(_DWORD *)(v1 + 14304) + 52) = 0;
                    operator delete(*(void **)(v1 + 14304));
                    *(_DWORD *)(v1 + 14304) = 0;
                  }
                  else
                  {
                    if ( v18 < 0 )
                      return v9;
                  }
                  v20 = v41;
                  if ( v41 )
                  {
                    v3 = v43;
                    goto LABEL_57;
                  }
                  v3 = v43;
                  goto LABEL_112;
                }
                v45 = (_SCAN *)v10;
              }
              if ( !*(_DWORD *)(v1 + 19936) || *(_DWORD *)(v1 + 28) )
              {
                if ( *(_DWORD *)(v1 + 116) != 1 || v18 != 2 )
                {
                  *(_DWORD *)(v1 + 14304) = v10;
                  *(_DWORD *)(v1 + 28) = 0;
                }
                else
                {
                  if ( *(_DWORD *)(v1 + 104) )
                    CConvert_Image((struct _JPEG_PROPERTIES *)v1);
                  operator delete(*(void **)(v10 + 52));
                  *(_DWORD *)(v10 + 52) = 0;
                  operator delete((void *)v10);
                  *(_DWORD *)(v1 + 14304) = 0;
                }
              }
              else
              {
                ++*(_DWORD *)(v1 + 14296);
                *(_DWORD *)(v1 + 14304) = v10;
                *(_DWORD *)(v1 + 28) = 0;
              }
              return v9;
            }
            v45 = (_SCAN *)v10;
            break;
        }
      }
      else
      {
        v45 = (_SCAN *)v10;
      }
    }
    *(_DWORD *)(v1 + 14340) -= *(_DWORD *)v44;
    operator delete((void *)v10);
    return 0;
  }
  return v9;
}

//----- (007633B0) --------------------------------------------------------
int __cdecl SetDefaultTables(int a1)
{
  int v1; // eax@1

  v1 = 0;
  if ( *(_DWORD *)(a1 + 14140) && *(_DWORD *)(a1 + 14144) )
    v1 = *(_DWORD *)(a1 + 14104);
  if ( *(_DWORD *)(a1 + 14152) && *(_DWORD *)(a1 + 14156) )
    v1 = *(_DWORD *)(a1 + 14104);
  if ( *(_DWORD *)(a1 + 14164) && *(_DWORD *)(a1 + 14168) )
    v1 = *(_DWORD *)(a1 + 14104);
  if ( *(_DWORD *)(a1 + 14176) && *(_DWORD *)(a1 + 14180) )
    v1 = *(_DWORD *)(a1 + 14104);
  if ( *(_DWORD *)(a1 + 14188) && *(_DWORD *)(a1 + 14192) )
    v1 = *(_DWORD *)(a1 + 14104);
  if ( *(_DWORD *)(a1 + 14200) && *(_DWORD *)(a1 + 14204) )
    v1 = *(_DWORD *)(a1 + 14104);
  if ( *(_DWORD *)(a1 + 14212) && *(_DWORD *)(a1 + 14216) )
    v1 = *(_DWORD *)(a1 + 14104);
  if ( *(_DWORD *)(a1 + 14224) && *(_DWORD *)(a1 + 14228) )
    v1 = *(_DWORD *)(a1 + 14104);
  *(_DWORD *)(a1 + 132) = 2;
  *(_DWORD *)(a1 + 128) = 2;
  *(_DWORD *)(a1 + 14108) = &unk_B72E40;
  *(_BYTE *)(a1 + 14112) = 0;
  *(_DWORD *)(a1 + 14116) = &unk_B72E00;
  *(_BYTE *)(a1 + 14120) = 1;
  *(_DWORD *)(a1 + 14124) = 0;
  *(_BYTE *)(a1 + 14128) = 0;
  *(_DWORD *)(a1 + 14132) = 0;
  *(_BYTE *)(a1 + 14136) = 0;
  if ( !v1 )
  {
    *(_DWORD *)(a1 + 136) = 2;
    *(_DWORD *)(a1 + 140) = 2;
    *(_DWORD *)(a1 + 144) = 2;
    *(_DWORD *)(a1 + 14140) = &unk_B72EC8;
    *(_DWORD *)(a1 + 14144) = &unk_B72EBC;
    *(_BYTE *)(a1 + 14148) = 0;
    *(_BYTE *)(a1 + 14149) = 0;
    *(_DWORD *)(a1 + 14152) = &unk_B72EAC;
    *(_DWORD *)(a1 + 14156) = &unk_B72D40;
    *(_BYTE *)(a1 + 14160) = 1;
    *(_BYTE *)(a1 + 14161) = 0;
    *(_DWORD *)(a1 + 14164) = &unk_B72E9C;
    *(_DWORD *)(a1 + 14168) = &unk_B72E90;
    *(_BYTE *)(a1 + 14172) = 0;
    *(_BYTE *)(a1 + 14173) = 1;
    *(_DWORD *)(a1 + 14176) = &unk_B72E80;
    *(_DWORD *)(a1 + 14180) = &unk_B72C80;
    *(_BYTE *)(a1 + 14184) = 1;
    *(_BYTE *)(a1 + 14185) = 1;
    *(_DWORD *)(a1 + 14188) = 0;
    *(_DWORD *)(a1 + 14192) = 0;
    *(_BYTE *)(a1 + 14196) = 0;
    *(_BYTE *)(a1 + 14197) = 0;
    *(_DWORD *)(a1 + 14200) = 0;
    *(_DWORD *)(a1 + 14204) = 0;
    *(_BYTE *)(a1 + 14208) = 0;
    *(_BYTE *)(a1 + 14209) = 0;
    *(_DWORD *)(a1 + 14212) = 0;
    *(_DWORD *)(a1 + 14216) = 0;
    *(_BYTE *)(a1 + 14220) = 0;
    *(_BYTE *)(a1 + 14221) = 0;
    *(_DWORD *)(a1 + 14224) = 0;
    *(_DWORD *)(a1 + 14228) = 0;
    *(_BYTE *)(a1 + 14232) = 0;
    *(_BYTE *)(a1 + 14233) = 0;
    *(_BYTE *)(a1 + 14240) = 0;
    *(_BYTE *)(a1 + 14241) = 1;
    *(_BYTE *)(a1 + 14242) = 1;
    *(_BYTE *)(a1 + 14243) = 1;
    *(_BYTE *)(a1 + 14236) = 0;
    *(_BYTE *)(a1 + 14237) = 1;
    *(_BYTE *)(a1 + 14238) = 1;
    *(_BYTE *)(a1 + 14239) = 1;
  }
  return 0;
}

//----- (00763650) --------------------------------------------------------
int __cdecl Scale_Char_Matrix(signed int a1, int a2, int a3)
{
  signed int v3; // ebx@1
  int v4; // ebx@3
  signed int v5; // ecx@7
  signed int v6; // edi@8
  int result; // eax@8
  int v8; // edx@8
  int v9; // edi@10

  v3 = a1;
  if ( a1 > 0 )
  {
    if ( a1 <= 100 )
    {
      if ( a1 < 50 )
        goto LABEL_3;
    }
    else
    {
      v3 = 100;
    }
    v4 = -2 * v3 + 200;
    goto LABEL_7;
  }
  v3 = 1;
LABEL_3:
  v4 = 5000 / v3;
LABEL_7:
  v5 = 0;
  do
  {
    v6 = v4 * *(_BYTE *)(v5 + a2) + 50;
    result = 1374389535 * v6;
    v8 = v6 / 100;
    if ( v6 / 100 > 0 )
    {
      v9 = 2 * v5;
      if ( v8 <= 255 )
        *(_WORD *)(a3 + v9) = v8;
      else
        *(_WORD *)(a3 + v9) = 255;
    }
    else
    {
      *(_WORD *)(a3 + 2 * v5) = 1;
    }
    ++v5;
  }
  while ( v5 < 64 );
  return result;
}

//----- (00763710) --------------------------------------------------------
int __cdecl BuildEncoderHuffmanTable(int a1, int a2, int a3)
{
  int result; // eax@1
  signed int v4; // edx@1
  signed int v5; // ebp@3
  int v6; // edx@3
  signed int v7; // ebx@4
  signed int v8; // edi@4
  signed int v9; // esi@8
  int v10; // edx@8
  int v11; // edi@8
  int v12; // ebx@9
  int v13; // edx@15
  signed int v14; // esi@18
  signed int v15; // esi@19
  signed int v16; // esi@20
  int v17; // edi@21
  int v18; // eax@21
  signed int v19; // esi@23
  int v20; // edi@24
  int v21; // [sp+0h] [bp-82Ch]@2
  int v22; // [sp+4h] [bp-828h]@2
  int v23[258]; // [sp+8h] [bp-824h]@21
  int v24; // [sp+410h] [bp-41Ch]@2
  int v25; // [sp+414h] [bp-418h]@2
  int v26[255]; // [sp+418h] [bp-414h]@21
  int v27; // [sp+814h] [bp-18h]@17

  result = 0;
  v4 = 0;
  do
  {
    *(&v21 + v4) = 0;
    *(&v24 + v4) = 0;
    *(_WORD *)(a3 + 2 * v4 + 1032) = 0;
    *(_DWORD *)(a3 + 4 * v4 + 8) = 0;
    *(&v22 + v4) = 0;
    *(&v25 + v4) = 0;
    *(_WORD *)(a3 + 2 * v4 + 1034) = 0;
    *(_DWORD *)(a3 + 4 * v4 + 12) = 0;
    v4 += 2;
  }
  while ( v4 < 256 );
  v5 = 0;
  v6 = 1;
  while ( 1 )
  {
    v7 = 1;
    v8 = *(_BYTE *)(a1 + v6 - 1);
    if ( v8 > 0 )
      break;
LABEL_7:
    ++v6;
    if ( v6 >= 17 )
    {
      v9 = 0;
      v10 = 0;
      *(&v21 + v5) = 0;
      v11 = v21;
      while ( 1 )
      {
        *(&v24 + v9++) = v10;
        v12 = *(&v21 + v9);
        ++v10;
        for ( ; v12 == v11; ++v10 )
        {
          if ( v9 >= 257 )
            break;
          *(&v24 + v9++) = v10;
          v12 = *(&v21 + v9);
        }
        if ( !v12 )
          break;
        do
        {
          v10 *= 2;
          ++v11;
        }
        while ( v12 != v11 );
      }
      v13 = 0;
      if ( v5 > 0 )
      {
        if ( v5 < 4 )
          goto LABEL_23;
        v27 = 0;
        while ( 1 )
        {
          v14 = *(_BYTE *)(a2 + v13);
          if ( v14 > 257 )
            break;
          *(_WORD *)(a3 + 2 * v14 + 1032) = *(&v24 + v13);
          *(_DWORD *)(a3 + 4 * v14 + 8) = *(&v21 + v13);
          v15 = *(_BYTE *)(a2 + v13 + 1);
          if ( v15 > 257 )
            break;
          *(_WORD *)(a3 + 2 * v15 + 1032) = *(&v25 + v13);
          *(_DWORD *)(a3 + 4 * v15 + 8) = *(&v22 + v13);
          v16 = *(_BYTE *)(a2 + v13 + 2);
          if ( v16 > 257 )
            break;
          v17 = v26[v13];
          v18 = v23[v13];
          v13 += 3;
          *(_WORD *)(a3 + 2 * v16 + 1032) = v17;
          *(_DWORD *)(a3 + 4 * v16 + 8) = v18;
          if ( v13 > v5 - 4 )
          {
            result = v27;
LABEL_23:
            while ( 1 )
            {
              v19 = *(_BYTE *)(a2 + v13);
              if ( v19 > 257 )
                break;
              *(_WORD *)(a3 + 2 * v19 + 1032) = *(&v24 + v13);
              v20 = *(&v21 + v13++);
              *(_DWORD *)(a3 + 4 * v19 + 8) = v20;
              if ( v13 >= v5 )
                return result;
            }
            break;
          }
        }
        result = -6;
      }
      return result;
    }
  }
  while ( v5 <= 257 )
  {
    *(&v21 + v5++) = v6;
    ++v7;
    if ( v7 > v8 )
      goto LABEL_7;
  }
  return -6;
}
// 763710: using guessed type int var_414[255];
// 763710: using guessed type int var_824[258];

//----- (00763900) --------------------------------------------------------
int __cdecl BuildDecoderHuffmanTable(int a1, int a2, int a3, int a4, int a5)
{
  signed int v5; // eax@1
  unsigned int v6; // edx@1
  unsigned int v7; // ebp@2
  unsigned int v8; // ebx@2
  char v9; // cl@4
  int v10; // ecx@14
  int v11; // edi@14
  int v12; // esi@14
  unsigned int v13; // edx@14
  int v14; // eax@15
  signed int v15; // eax@20
  unsigned int v16; // edx@20
  int v17; // ebp@21
  int v18; // esi@22
  unsigned int v19; // edi@22
  int v20; // ebp@22
  int v21; // ecx@38
  int v22; // esi@38
  signed int v23; // eax@40
  char v24; // dl@40
  int v25; // esi@40
  unsigned int v26; // ecx@41
  unsigned int v27; // ebx@41
  char v28; // cl@42
  int v29; // esi@42
  unsigned int v30; // ebp@42
  signed int v31; // eax@44
  int v32; // edx@44
  int v33; // ecx@46
  int v34; // edi@48
  int v35; // ebp@49
  int v38; // [sp+0h] [bp-548h]@35
  int v39[257]; // [sp+4h] [bp-544h]@17
  unsigned __int8 v40; // [sp+408h] [bp-140h]@5
  char v41; // [sp+409h] [bp-13Fh]@6
  char v42; // [sp+40Ah] [bp-13Eh]@7
  char v43; // [sp+40Bh] [bp-13Dh]@8
  char v44[256]; // [sp+40Ch] [bp-13Ch]@9
  int v45; // [sp+50Ch] [bp-3Ch]@1
  int v46; // [sp+510h] [bp-38h]@46
  int v47; // [sp+514h] [bp-34h]@42
  unsigned int v48; // [sp+518h] [bp-30h]@46
  unsigned int v49; // [sp+51Ch] [bp-2Ch]@41
  int v50; // [sp+520h] [bp-28h]@42
  char v51; // [sp+524h] [bp-24h]@46
  char v52; // [sp+528h] [bp-20h]@42
  int v53; // [sp+52Ch] [bp-1Ch]@42
  unsigned int v54; // [sp+530h] [bp-18h]@24

  v5 = 1;
  *(_DWORD *)a5 = a3;
  *(_DWORD *)(a5 + 4) = a4;
  v6 = 0;
  v45 = 0;
  do
  {
    v7 = *(_BYTE *)(v5 + a1 - 1);
    v8 = 1;
    if ( v7 >= 1 )
    {
      if ( v7 - 1 < 6 )
      {
        v9 = v5;
LABEL_11:
        while ( 1 )
        {
          *(&v40 + v6++) = v9;
          if ( v6 > 0x101 )
            break;
          ++v8;
          if ( v8 > v7 )
            goto LABEL_13;
        }
      }
      else
      {
        v9 = v5;
        while ( 1 )
        {
          *(&v40 + v6) = v5;
          if ( v6 + 1 > 0x101 )
            break;
          *(&v41 + v6) = v5;
          if ( v6 + 2 > 0x101 )
            break;
          *(&v42 + v6) = v5;
          if ( v6 + 3 > 0x101 )
            break;
          *(&v43 + v6) = v5;
          if ( v6 + 4 > 0x101 )
            break;
          v44[v6] = v5;
          v6 += 5;
          if ( v6 > 0x101 )
            break;
          v8 += 5;
          if ( v8 > v7 - 6 )
            goto LABEL_11;
        }
      }
      return -6;
    }
LABEL_13:
    ++v5;
  }
  while ( v5 <= 16 );
  v10 = v45;
  *(&v40 + v6) = 0;
  v11 = 0;
  v12 = v40;
  v13 = 0;
  if ( v40 )
  {
    v14 = v40;
    do
    {
      for ( ; v14 == v12; v14 = *(&v40 + v13) )
      {
        v39[v13++] = v11++;
        if ( v13 > 0x101 )
          return -6;
      }
      v11 *= 2;
      ++v12;
    }
    while ( v14 );
  }
  v15 = 1;
  *(_WORD *)(a5 + 1614) = 0;
  *(_WORD *)(a5 + 1544) = 0;
  *(_WORD *)(a5 + 1578) = 0;
  *(_WORD *)(a5 + 1616) = 0;
  *(_WORD *)(a5 + 1546) = 0;
  *(_WORD *)(a5 + 1580) = 0;
  *(_WORD *)(a5 + 1618) = 0;
  *(_WORD *)(a5 + 1548) = 0;
  *(_WORD *)(a5 + 1582) = 0;
  *(_WORD *)(a5 + 1620) = 0;
  *(_WORD *)(a5 + 1550) = 0;
  *(_WORD *)(a5 + 1584) = 0;
  *(_WORD *)(a5 + 1622) = 0;
  *(_WORD *)(a5 + 1552) = 0;
  *(_WORD *)(a5 + 1586) = 0;
  *(_WORD *)(a5 + 1624) = 0;
  *(_WORD *)(a5 + 1554) = 0;
  *(_WORD *)(a5 + 1588) = 0;
  *(_WORD *)(a5 + 1626) = 0;
  *(_WORD *)(a5 + 1556) = 0;
  *(_WORD *)(a5 + 1590) = 0;
  *(_WORD *)(a5 + 1628) = 0;
  *(_WORD *)(a5 + 1558) = 0;
  *(_WORD *)(a5 + 1592) = 0;
  *(_WORD *)(a5 + 1630) = 0;
  *(_WORD *)(a5 + 1560) = 0;
  *(_WORD *)(a5 + 1594) = 0;
  *(_WORD *)(a5 + 1632) = 0;
  *(_WORD *)(a5 + 1562) = 0;
  *(_WORD *)(a5 + 1596) = 0;
  *(_WORD *)(a5 + 1634) = 0;
  *(_WORD *)(a5 + 1564) = 0;
  *(_WORD *)(a5 + 1598) = 0;
  *(_WORD *)(a5 + 1636) = 0;
  *(_WORD *)(a5 + 1566) = 0;
  *(_WORD *)(a5 + 1600) = 0;
  *(_WORD *)(a5 + 1638) = 0;
  *(_WORD *)(a5 + 1568) = 0;
  *(_WORD *)(a5 + 1602) = 0;
  *(_WORD *)(a5 + 1640) = 0;
  *(_WORD *)(a5 + 1570) = 0;
  *(_WORD *)(a5 + 1604) = 0;
  *(_WORD *)(a5 + 1642) = 0;
  *(_WORD *)(a5 + 1572) = 0;
  *(_WORD *)(a5 + 1606) = 0;
  *(_WORD *)(a5 + 1644) = 0;
  *(_WORD *)(a5 + 1574) = 0;
  *(_WORD *)(a5 + 1608) = 0;
  *(_WORD *)(a5 + 1646) = 0;
  *(_WORD *)(a5 + 1576) = 0;
  *(_WORD *)(a5 + 1610) = 0;
  v16 = 0;
  v45 = v10;
  while ( 1 )
  {
    v17 = *(_BYTE *)(v15 + a1 - 1);
    if ( !*(_BYTE *)(v15 + a1 - 1) )
    {
      *(_WORD *)(a5 + 2 * v15 + 1578) = -1;
      goto LABEL_37;
    }
    v18 = 2 * v15;
    v19 = v16;
    *(_WORD *)(a5 + 2 * v15 + 1614) = v16;
    v20 = v16 + v17;
    *(_WORD *)(a5 + 2 * v15 + 1544) = v39[v16];
    if ( v16 < v20 )
      break;
LABEL_35:
    *(_WORD *)(a5 + v18 + 1578) = *(int *)((char *)&v38 + v19 * 4);
LABEL_37:
    ++v15;
    if ( v15 > 16 )
    {
      v21 = v45;
      *(_WORD *)(a5 + 1612) = -1;
      v22 = a5;
      do
      {
        *(_DWORD *)(v22 + 8) = 0;
        *(_DWORD *)(v22 + 12) = 0;
        *(_DWORD *)(v22 + 16) = 0;
        *(_DWORD *)(v22 + 20) = 0;
        v22 += 16;
      }
      while ( a5 + 1024 > v22 );
      v23 = 1;
      v24 = -1;
      v45 = v21;
      v54 = 0;
      v25 = a1;
      while ( 1 )
      {
        v26 = *(_BYTE *)(v23 + v25 - 1);
        v27 = 1;
        v49 = *(_BYTE *)(v23 + v25 - 1);
        if ( v26 >= 1 )
          break;
LABEL_54:
        --v24;
        ++v23;
        if ( v23 > 8 )
          return v45;
      }
      v28 = v24 + 8;
      v29 = a2;
      v53 = v23 << 16;
      v47 = 1 << (v24 + 8);
      v52 = v24;
      v30 = v54;
      v50 = v23;
      while ( v30 <= 0x101 )
      {
        v31 = v47;
        v32 = v39[v30] << v28;
        if ( v47 > 0 )
        {
          if ( v47 < 6 )
          {
            v34 = v30 + v29;
          }
          else
          {
            v46 = v30 + v29;
            v51 = v28;
            v33 = v53;
            v48 = v27;
            do
            {
              v31 -= 5;
              *(_DWORD *)(a5 + 4 * v32 + 8) = v33 | *(_BYTE *)(v29 + v30);
              *(_DWORD *)(a5 + 4 * v32 + 12) = v33 | *(_BYTE *)(v29 + v30);
              *(_DWORD *)(a5 + 4 * v32 + 16) = v33 | *(_BYTE *)(v29 + v30);
              *(_DWORD *)(a5 + 4 * v32 + 20) = v33 | *(_BYTE *)(v29 + v30);
              *(_DWORD *)(a5 + 4 * v32 + 24) = v33 | *(_BYTE *)(v29 + v30);
              v32 += 5;
            }
            while ( v31 >= 6 );
            v53 = v33;
            v34 = v46;
            v28 = v51;
            v27 = v48;
          }
          v48 = v27;
          v54 = v30;
          v35 = v53;
          do
          {
            --v31;
            *(_DWORD *)(a5 + 4 * v32++ + 8) = v35 | *(_BYTE *)v34;
          }
          while ( v31 > 0 );
          v27 = v48;
          v30 = v54;
          v29 = a2;
        }
        ++v30;
        ++v27;
        if ( v27 > v49 )
        {
          v54 = v30;
          v24 = v52;
          v23 = v50;
          v25 = a1;
          goto LABEL_54;
        }
      }
      return -6;
    }
  }
  if ( v20 - v16 < 6 )
    goto LABEL_32;
  v54 = v15;
  while ( 1 )
  {
    *(_WORD *)(a5 + 2 * v16 + 1032) = *(_BYTE *)(a2 + v16);
    if ( v16 + 1 > 0x101 )
      return -6;
    *(_WORD *)(a5 + 2 * v16 + 1034) = *(_BYTE *)(a2 + v16 + 1);
    if ( v16 + 2 > 0x101 )
      return -6;
    *(_WORD *)(a5 + 2 * v16 + 1036) = *(_BYTE *)(a2 + v16 + 2);
    if ( v16 + 3 > 0x101 )
      return -6;
    *(_WORD *)(a5 + 2 * v16 + 1038) = *(_BYTE *)(a2 + v16 + 3);
    if ( v16 + 4 > 0x101 )
      return -6;
    *(_WORD *)(a5 + 2 * v16 + 1040) = *(_BYTE *)(a2 + v16 + 4);
    v16 += 5;
    if ( v16 > 0x101 )
      return -6;
    if ( v16 > v20 - 6 )
    {
      v15 = v54;
LABEL_32:
      while ( 1 )
      {
        *(_WORD *)(a5 + 2 * v16 + 1032) = *(_BYTE *)(a2 + v16);
        ++v16;
        if ( v16 > 0x101 )
          return -6;
        if ( v16 >= v20 )
        {
          v19 = v16;
          goto LABEL_35;
        }
      }
    }
  }
}
// 763900: using guessed type char var_13C[256];
// 763900: using guessed type int var_544[257];

//----- (00763F70) --------------------------------------------------------
int __cdecl ownEncoderWriteJPEGTables(int a1)
{
  int v1; // esi@1
  int v2; // ebp@1
  int v3; // eax@3
  int result; // eax@3
  int v5; // eax@4
  int v6; // esi@14
  int v7; // ebx@14
  int v8; // ebp@14
  struct _STATE *v9; // [sp+14h] [bp-18h]@1
  int v10; // [sp+14h] [bp-18h]@14
  int v11; // [sp+18h] [bp-14h]@1

  v1 = 0;
  v2 = 0;
  v11 = 0;
  v9 = (struct _STATE *)(a1 + 14312);
  while ( v2 < *(_DWORD *)(a1 + 132) )
  {
    v3 = *(_DWORD *)(v1 + a1 + 156);
    *(_DWORD *)(a1 + 4 * v2 + 14052) = v3;
    Scale_Char_Matrix(*(_DWORD *)(a1 + 112), *(_DWORD *)(a1 + 8 * v2 + 14108), v3);
    result = EP_Write_DQT(v9, 0, *(_BYTE *)(a1 + 8 * v2 + 14112), *(_DWORD *)(a1 + 4 * v2 + 14052));
    v11 = result;
    if ( result )
      return result;
    v5 = *(_DWORD *)(a1 + 20);
    if ( v5 )
    {
      if ( v5 != 1 )
        return -8;
      FillEncoderQuantTable_IPP(*(_DWORD *)(a1 + 4 * v2 + 14052));
    }
    else
    {
      FillEncoderQuantTable_AAN(*(_DWORD *)(a1 + 4 * v2 + 14052));
    }
    v1 += 180;
    ++v2;
  }
  result = v11;
  if ( !*(_DWORD *)(a1 + 19936) )
  {
    result = EP_Write_DHTs(v9, a1);
    if ( !result )
    {
      if ( 2 * *(_DWORD *)(a1 + 144) > 0 )
      {
        v6 = a1 + 7460;
        v10 = 0;
        v7 = a1 + 868;
        v8 = 0;
        do
        {
          *(_DWORD *)(a1 + 4 * *(_BYTE *)(v8 + a1 + 14149) + 14084) = v6;
          *(_DWORD *)(a1 + 4 * *(_BYTE *)(v8 + a1 + 14161) + 14068) = v7;
          result = BuildEncoderHuffmanTable(
                     *(_DWORD *)(v8 + a1 + 14140),
                     *(_DWORD *)(v8 + a1 + 14144),
                     *(_DWORD *)(a1 + 4 * *(_BYTE *)(v8 + a1 + 14149) + 14084));
          if ( result )
            break;
          result = BuildEncoderHuffmanTable(
                     *(_DWORD *)(v8 + a1 + 14152),
                     *(_DWORD *)(v8 + a1 + 14156),
                     *(_DWORD *)(a1 + 4 * *(_BYTE *)(v8 + a1 + 14161) + 14068));
          if ( result )
            break;
          v8 += 24;
          v7 += 3296;
          v6 += 3296;
          v10 += 2;
        }
        while ( v10 < 2 * *(_DWORD *)(a1 + 144) );
      }
    }
  }
  return result;
}

//----- (00764170) --------------------------------------------------------
signed int __cdecl Encode_Frame_Init(char *a1)
{
  int v1; // esi@1
  void *v2; // ebp@1
  signed int result; // eax@1
  _IJLIOTYPE v4; // edx@2
  _DCTTYPE v5; // edx@8
  int v6; // ecx@9
  int v7; // ecx@11
  int v8; // ecx@12
  int v9; // edi@20
  int v10; // eax@20
  int i; // esi@20
  __int16 *v12; // eax@25
  _DCTTYPE v13; // eax@25
  _HUFFMAN_TABLE *v14; // edi@31
  _HUFFMAN_TABLE *v15; // ebp@31
  int v16; // esi@31
  _IJL_COLOR v17; // eax@36
  signed int v18; // [sp+14h] [bp-20h]@20
  void *v19; // [sp+18h] [bp-1Ch]@20
  int v20; // [sp+20h] [bp-14h]@31

  v1 = (int)(a1 + 14312);
  v2 = (void *)*((_DWORD *)a1 + 3580);
  (*(void (__cdecl **)(char *, _DWORD, _DWORD))((void (__cdecl **)(_DWORD, _DWORD, _DWORD))v2 + 22))(
    a1 + 14312,
    *((_DWORD *)a1 + 17),
    *((_DWORD *)a1 + 18));
  result = EP_Write_SOI((struct _STATE *)(a1 + 14312));
  if ( result )
    return result;
  v4 = *(_DWORD *)a1;
  if ( *(_DWORD *)a1 != 8 && v4 != 9 && v4 != 10 && v4 != 11 )
    goto LABEL_6;
  v17 = *((_DWORD *)a1 + 22);
  if ( v17 == 1 || v17 == 5 )
  {
    result = EP_Write_APP14(0, (struct _JPEG_PROPERTIES *)a1);
    if ( result )
      return result;
  }
  else
  {
    if ( v17 == 6 )
    {
      result = EP_Write_APP14(2u, (struct _JPEG_PROPERTIES *)a1);
      if ( result )
        return result;
    }
    else
    {
      result = EP_Write_APP0((struct _JPEG_PROPERTIES *)a1);
      if ( result )
        return result;
    }
  }
  result = EP_Write_COM(result, (struct _JPEG_PROPERTIES *)a1);
  if ( !result )
  {
    result = ownEncoderWriteJPEGTables((int)a1);
    if ( !result )
    {
      v4 = *(_DWORD *)a1;
LABEL_6:
      if ( v4 != 12 && v4 != 13 )
        goto LABEL_8;
      v9 = 0;
      v18 = result;
      v10 = *((_DWORD *)a1 + 33);
      v19 = v2;
      for ( i = 0; i < v10; ++i )
      {
        if ( !*(_DWORD *)&a1[4 * i + 14052] && *(_DWORD *)&a1[8 * i + 14108] )
        {
          v12 = *(__int16 **)&a1[v9 + 156];
          *(_DWORD *)&a1[4 * i + 14052] = v12;
          Scale_Char_Matrix(*((_DWORD *)a1 + 28), *(_DWORD *)&a1[8 * i + 14108], (int)v12);
          v13 = *((_DWORD *)a1 + 5);
          if ( v13 )
          {
            if ( v13 != 1 )
              return -8;
            FillEncoderQuantTable_IPP(*(_DWORD *)&a1[4 * i + 14052]);
            v10 = *((_DWORD *)a1 + 33);
          }
          else
          {
            FillEncoderQuantTable_AAN(*(_DWORD *)&a1[4 * i + 14052]);
            v10 = *((_DWORD *)a1 + 33);
          }
        }
        v9 += 180;
      }
      result = v18;
      v1 = (int)(a1 + 14312);
      if ( 2 * *((_DWORD *)a1 + 36) <= 0 )
      {
LABEL_8:
        v5 = *((_DWORD *)a1 + 5);
        if ( v5 )
        {
          if ( v5 == 1 )
          {
            v7 = *((_DWORD *)v2 + 64);
            *((_DWORD *)v2 + 17) = *((_DWORD *)v2 + 8);
            *((_DWORD *)v2 + 65) = v7;
          }
          else
          {
            v8 = *((_DWORD *)v2 + 63);
            *((_DWORD *)v2 + 17) = *((_DWORD *)v2 + 7);
            *((_DWORD *)v2 + 65) = v8;
          }
        }
        else
        {
          v6 = *((_DWORD *)v2 + 63);
          *((_DWORD *)v2 + 17) = *((_DWORD *)v2 + 7);
          *((_DWORD *)v2 + 65) = v6;
        }
        if ( *(_DWORD *)a1 != 11 && *(_DWORD *)a1 != 10 || (result = EP_Write_EOI((struct _STATE *)v1)) == 0 )
        {
          if ( *((_DWORD *)a1 + 3593) )
            result = Flush_Buffer_To_File(v1);
        }
      }
      else
      {
        v14 = (_HUFFMAN_TABLE *)(a1 + 7460);
        v20 = 0;
        v15 = (_HUFFMAN_TABLE *)(a1 + 868);
        v16 = 0;
        while ( 1 )
        {
          *(_DWORD *)&a1[4 * (unsigned __int8)a1[v16 + 14149] + 14084] = v14;
          *(_DWORD *)&a1[4 * (unsigned __int8)a1[v16 + 14161] + 14068] = v15;
          result = BuildEncoderHuffmanTable(
                     *(_DWORD *)&a1[v16 + 14140],
                     *(_DWORD *)&a1[v16 + 14144],
                     *(_DWORD *)&a1[4 * (unsigned __int8)a1[v16 + 14149] + 14084]);
          if ( result )
            break;
          result = BuildEncoderHuffmanTable(
                     *(_DWORD *)&a1[v16 + 14152],
                     *(_DWORD *)&a1[v16 + 14156],
                     *(_DWORD *)&a1[4 * (unsigned __int8)a1[v16 + 14161] + 14068]);
          if ( result )
            break;
          v16 += 24;
          v15 += 2;
          v14 += 2;
          v20 += 2;
          if ( v20 >= 2 * *((_DWORD *)a1 + 36) )
          {
            v2 = v19;
            v1 = (int)(a1 + 14312);
            goto LABEL_8;
          }
        }
      }
      return result;
    }
  }
  return result;
}

//----- (007644C0) --------------------------------------------------------
int __usercall Encode_Frame<eax>(int a1<eax>, char *a2)
{
  int v2; // ebp@0
  char *v3; // ebx@1
  struct _STATE *v4; // ecx@1
  struct _SCAN *v5; // edx@1
  signed int v6; // eax@4
  void *v7; // edx@8
  void *v8; // eax@9
  _SCAN *v9; // ecx@11
  void *v10; // eax@13
  void *v12; // eax@27
  int v13; // ebx@29
  void *v14; // eax@29
  void *v15; // esi@29
  int v16; // ebx@30
  char *v17; // ebx@35
  int v18; // edx@35
  void *p; // [sp+0h] [bp-38h]@1
  int v20; // [sp+4h] [bp-34h]@1
  struct _STATE *v21; // [sp+8h] [bp-30h]@1
  int v22; // [sp+Ch] [bp-2Ch]@30
  char *v23; // [sp+1Ch] [bp-1Ch]@31
  void **v24; // [sp+20h] [bp-18h]@1
  int v25; // [sp+28h] [bp-10h]@1
  int (__cdecl *v26)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int); // [sp+2Ch] [bp-Ch]@1
  _UNKNOWN *v27; // [sp+30h] [bp-8h]@1
  int v28; // [sp+34h] [bp-4h]@1

  v27 = &unk_B7314C;
  v26 = _except_handler3;
  v25 = a1;
  v24 = &p;
  v28 = 0;
  v20 = 0;
  v3 = a2;
  v4 = (struct _STATE *)(a2 + 14312);
  v21 = (struct _STATE *)(a2 + 14312);
  p = 0;
  v5 = (struct _SCAN *)*((_DWORD *)a2 + 3576);
  if ( v5 )
  {
    p = (void *)*((_DWORD *)a2 + 3576);
    goto LABEL_3;
  }
  v12 = operator new(0x38u);
  p = v12;
  if ( !v12 )
  {
    v20 = -5;
    goto LABEL_17;
  }
  v13 = *((_DWORD *)a2 + 21);
  *(_DWORD *)v12 = v13;
  *((_DWORD *)v12 + 1) = 0;
  *((_DWORD *)v12 + 2) = 1;
  *((_DWORD *)v12 + 3) = 63;
  *((_DWORD *)v12 + 4) = 0;
  *((_DWORD *)v12 + 5) = 0;
  *((_DWORD *)v12 + 6) = 0;
  *((_DWORD *)v12 + 7) = 0;
  *((_DWORD *)v12 + 8) = 0;
  *((_DWORD *)v12 + 9) = 0;
  *((_DWORD *)v12 + 10) = 0;
  *((_DWORD *)v12 + 11) = 0;
  *((_DWORD *)v12 + 12) = 0;
  v14 = operator new(24 * v13);
  v15 = p;
  *((_DWORD *)p + 13) = v14;
  if ( !v14 )
  {
    v20 = -5;
    goto LABEL_17;
  }
  v16 = 0;
  v22 = 0;
  if ( *(_DWORD *)v15 <= 0 )
  {
    v23 = a2;
  }
  else
  {
    v23 = a2;
    while ( 1 )
    {
      *((_DWORD *)v14 + 6 * v16) = v16;
      *(_DWORD *)(24 * v16 + *((_DWORD *)v15 + 13) + 4) = *(_DWORD *)(16 * v16 + *((_DWORD *)v23 + 3571) + 4);
      *(_DWORD *)(24 * v16 + *((_DWORD *)v15 + 13) + 8) = *(_DWORD *)(16 * v16 + *((_DWORD *)v23 + 3571) + 8);
      *(_DWORD *)(24 * v16 + *((_DWORD *)v15 + 13) + 12) = 0;
      *(_DWORD *)(24 * v16 + *((_DWORD *)v15 + 13) + 16) = 0;
      *(_DWORD *)(24 * v16++ + *((_DWORD *)v15 + 13) + 20) = 0;
      v22 = v16;
      if ( v16 >= *(_DWORD *)v15 )
        break;
      v14 = (void *)*((_DWORD *)v15 + 13);
    }
  }
  v20 = EP_Write_SOF(v21, (struct _FRAME *)(v23 + 14244));
  if ( !v20 )
  {
    v17 = a2;
    v18 = *((_DWORD *)a2 + 3572);
    if ( v18 )
    {
      v20 = EP_Write_DRI(v18, v21);
      if ( v20 )
        goto LABEL_17;
      v17 = a2;
    }
    v20 = EP_Write_SOS(v2, v21, *((_DWORD *)v17 + 21), v17 + 14240, v17 + 14236);
    if ( !v20 )
    {
      v20 = Flush_Buffer_To_File((int)v21);
      if ( !v20 )
      {
        v20 = Set_Encode_Fast_Path((struct _JPEG_PROPERTIES *)a2);
        if ( !v20 )
        {
          v5 = (struct _SCAN *)p;
          v4 = v21;
          v3 = a2;
LABEL_3:
          if ( *((_DWORD *)v3 + 3572) )
          {
            v6 = Encode_Scan_WRst((struct _JPEG_PROPERTIES *)v3, v4, v5);
            v20 = v6;
          }
          else
          {
            v6 = Encode_Scan((struct _JPEG_PROPERTIES *)v3, v4, v5);
            v20 = v6;
          }
          if ( v6 == 1 || v6 == 2 )
          {
            *((_DWORD *)a2 + 7) = 0;
            *((_DWORD *)a2 + 3576) = p;
          }
          else
          {
            if ( !v6 )
            {
              v7 = p;
              if ( p )
              {
                v8 = (void *)*((_DWORD *)p + 13);
                if ( v8 )
                {
                  operator delete(v8);
                  v7 = p;
                  *((_DWORD *)p + 13) = 0;
                }
                operator delete(v7);
                p = 0;
                v9 = 0;
                *((_DWORD *)a2 + 3576) = 0;
              }
              else
              {
                v9 = (_SCAN *)*((_DWORD *)a2 + 3576);
              }
              if ( v9 )
              {
                v10 = v9->comps;
                if ( v10 )
                {
                  operator delete(v10);
                  *(_DWORD *)(*((_DWORD *)a2 + 3576) + 52) = 0;
                  v9 = (_SCAN *)*((_DWORD *)a2 + 3576);
                }
                operator delete(v9);
                *((_DWORD *)a2 + 3576) = 0;
              }
              v20 = EP_Write_EOI(v21);
              if ( !v20 )
              {
                v20 = Flush_Buffer_To_File((int)v21);
                v28 = -1;
              }
            }
          }
          goto LABEL_17;
        }
      }
    }
  }
LABEL_17:
  if ( v20 < 0 && p )
  {
    if ( *((_DWORD *)p + 13) )
    {
      operator delete(*((void **)p + 13));
      *((_DWORD *)p + 13) = 0;
    }
    operator delete(p);
    p = 0;
    *((_DWORD *)a2 + 3576) = 0;
  }
  return v20;
}

//----- (00764883) --------------------------------------------------------
signed int __cdecl sub_764883()
{
  return 1;
}

//----- (00764890) --------------------------------------------------------
int __cdecl sub_764890(int a1, int a2, int a3, int a4, int a5, int a6, int a7)
{
  int v7; // eax@1
  int result; // eax@1

  v7 = *(_DWORD *)(a2 + 52);
  *(_DWORD *)a2 = 1;
  *(_DWORD *)v7 = a3;
  *(_DWORD *)(*(_DWORD *)(a2 + 52) + 4) = *(_DWORD *)(16 * a3 + *(_DWORD *)(a1 + 14284) + 4);
  *(_DWORD *)(*(_DWORD *)(a2 + 52) + 8) = *(_DWORD *)(16 * a3 + *(_DWORD *)(a1 + 14284) + 8);
  *(_DWORD *)(a2 + 8) = a4;
  *(_DWORD *)(a2 + 12) = a5;
  *(_DWORD *)(a2 + 16) = a6;
  result = a7;
  *(_DWORD *)(a2 + 20) = a7;
  return result;
}

//----- (007648F0) --------------------------------------------------------
void __cdecl sub_7648F0(int a1, int a2, signed int a3, int a4, int a5)
{
  signed int v5; // ecx@1
  int v6; // eax@2
  int v7; // ebp@4
  int v8; // ebx@4
  int v9; // ebp@6
  int v10; // ebx@6
  int v11; // esi@7
  signed int v12; // [sp+8h] [bp-1Ch]@4
  signed int v13; // [sp+Ch] [bp-18h]@4

  v5 = a3;
  if ( a3 <= 4 )
  {
    v6 = 0;
    if ( a3 > 0 )
    {
      if ( a3 >= 4 )
      {
        v7 = 0;
        v8 = 0;
        v12 = 2;
        v13 = 1;
        do
        {
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52)) = v6;
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 4) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 4);
          v6 += 3;
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 8) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 8);
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 24) = v13;
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 28) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 20);
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 32) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 24);
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 48) = v12;
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 52) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 36);
          *(_DWORD *)(v7 + *(_DWORD *)(a2 + 52) + 56) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 40);
          v7 += 72;
          v8 += 48;
          v13 += 3;
          v12 += 3;
        }
        while ( v6 <= a3 - 4 );
      }
      v9 = 24 * v6;
      v10 = 16 * v6;
      do
      {
        *(_DWORD *)(v9 + *(_DWORD *)(a2 + 52)) = v6;
        *(_DWORD *)(v9 + *(_DWORD *)(a2 + 52) + 4) = *(_DWORD *)(v10 + *(_DWORD *)(a1 + 14284) + 4);
        v11 = *(_DWORD *)(v10 + *(_DWORD *)(a1 + 14284) + 8);
        v10 += 16;
        ++v6;
        *(_DWORD *)(v9 + *(_DWORD *)(a2 + 52) + 8) = v11;
        v9 += 24;
      }
      while ( v6 < a3 );
      v5 = a3;
    }
    *(_DWORD *)a2 = v5;
    *(_DWORD *)(a2 + 8) = 0;
    *(_DWORD *)(a2 + 12) = 0;
    *(_DWORD *)(a2 + 16) = a4;
    *(_DWORD *)(a2 + 20) = a5;
  }
}

//----- (00764A60) --------------------------------------------------------
signed int __cdecl sub_764A60(int a1, int a2)
{
  signed int result; // eax@1
  int v3; // ecx@1
  int v4; // ecx@4
  int v5; // ecx@12

  result = 0;
  v3 = *(_DWORD *)(a1 + 84);
  switch ( v3 )
  {
    case 1:
      if ( *(_DWORD *)(a1 + 88) == 4 )
      {
        *(_DWORD *)a2 = 6;
      }
      else
      {
        *(_DWORD *)a2 = 0;
        result = -8;
      }
      break;
    case 2:
      if ( *(_DWORD *)(a1 + 88) == 255 )
      {
        *(_DWORD *)a2 = 5;
      }
      else
      {
        *(_DWORD *)a2 = 0;
        result = -8;
      }
      break;
    case 3:
      v4 = *(_DWORD *)(a1 + 88);
      switch ( v4 )
      {
        case 1:
          *(_DWORD *)a2 = 8;
          break;
        case 3:
          *(_DWORD *)a2 = 10;
          break;
        case 255:
          *(_DWORD *)a2 = 8;
          break;
        default:
          *(_DWORD *)a2 = 0;
          result = -8;
          break;
      }
      break;
    case 4:
      v5 = *(_DWORD *)(a1 + 88);
      switch ( v5 )
      {
        case 5:
          *(_DWORD *)a2 = 10;
          break;
        case 6:
          *(_DWORD *)a2 = 11;
          break;
        case 255:
          *(_DWORD *)a2 = 10;
          break;
        default:
          *(_DWORD *)a2 = 0;
          result = -8;
          break;
      }
      break;
    default:
      *(_DWORD *)a2 = 0;
      result = -8;
      break;
  }
  return result;
}

//----- (00764B50) --------------------------------------------------------
signed int __cdecl sub_764B50(int a1, int a2)
{
  signed int v2; // edi@1
  void *v3; // eax@1
  int v4; // ebx@4
  int v5; // ebp@4

  v2 = 0;
  v3 = operator new(56 * a2);
  *(_DWORD *)(a1 + 14304) = v3;
  if ( v3 )
  {
    __g_memzero(v3, 56 * a2);
    if ( a2 > 0 )
    {
      v4 = 0;
      v5 = 0;
      while ( 1 )
      {
        *(_DWORD *)(v4 + *(_DWORD *)(a1 + 14304) + 52) = operator new(0x60u);
        if ( !*(_DWORD *)(v4 + *(_DWORD *)(a1 + 14304) + 52) )
          break;
        v4 += 56;
        ++v5;
        if ( v5 >= a2 )
          return 0;
      }
      v2 = -5;
    }
  }
  else
  {
    v2 = -5;
  }
  return v2;
}
// B6C2E4: using guessed type void (__cdecl *__g_memzero)(void *, unsigned int);

//----- (00764BF0) --------------------------------------------------------
signed int __cdecl sub_764BF0(int a1, int a2)
{
  signed int v2; // esi@1
  int v3; // edx@3
  int v4; // ebx@13
  int v5; // ebp@13

  v2 = sub_764A60(a1, a2);
  if ( !v2 )
  {
    v2 = sub_764B50(a1, *(_DWORD *)a2);
    if ( !v2 )
    {
      v3 = *(_DWORD *)(a1 + 84);
      if ( v3 == 1 && *(_DWORD *)(a1 + 88) == 4 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 1, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 2);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 0, 6, 63, 0, 2);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 0, 1, 63, 2, 1);
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304) + 224, 1, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 280, 0, 1, 63, 1, 0);
        return v2;
      }
      if ( v3 == 2 && *(_DWORD *)(a1 + 88) == 255 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 2, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 1, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 0, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 224, 1, 6, 63, 0, 0);
        return v2;
      }
      if ( v3 == 3 && *(_DWORD *)(a1 + 88) == 3 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 3, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 2);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 2, 1, 63, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 1, 1, 63, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 224, 0, 6, 63, 0, 2);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 280, 0, 1, 63, 2, 1);
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304) + 336, 3, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 392, 2, 1, 63, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 448, 1, 1, 63, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 504, 0, 1, 63, 1, 0);
        return v2;
      }
      if ( v3 == 3 && *(_DWORD *)(a1 + 88) == 1 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 3, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 1, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 2, 1, 5, 0, 0);
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304) + 224, 3, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 280, 0, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 336, 1, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 392, 2, 6, 63, 0, 0);
        return v2;
      }
      if ( v3 == 3 && *(_DWORD *)(a1 + 88) == 255 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 3, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 1, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 2, 1, 5, 0, 0);
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304) + 224, 3, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 280, 0, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 336, 1, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 392, 2, 6, 63, 0, 0);
        return v2;
      }
      if ( v3 == 4 && *(_DWORD *)(a1 + 88) == 5 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 4, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 1, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 2, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 224, 3, 1, 5, 0, 0);
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304) + 280, 4, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 336, 0, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 392, 1, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 448, 2, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 504, 3, 6, 63, 0, 0);
        return v2;
      }
      if ( v3 == 4 && *(_DWORD *)(a1 + 88) == 6 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 4, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 2);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 2, 1, 63, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 1, 1, 63, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 224, 3, 1, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 280, 0, 6, 63, 0, 2);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 336, 0, 1, 63, 2, 1);
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304) + 392, 4, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 448, 2, 1, 63, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 504, 1, 1, 63, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 560, 0, 1, 63, 1, 0);
        return v2;
      }
      if ( v3 == 4 && *(_DWORD *)(a1 + 88) == 255 )
      {
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304), 4, 0, 1);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 56, 0, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 112, 1, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 168, 2, 1, 5, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 224, 3, 1, 5, 0, 0);
        sub_7648F0(a1, *(_DWORD *)(a1 + 14304) + 280, 4, 1, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 336, 0, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 392, 1, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 448, 2, 6, 63, 0, 0);
        sub_764890(a1, *(_DWORD *)(a1 + 14304) + 504, 3, 6, 63, 0, 0);
        return v2;
      }
      v2 = -8;
    }
  }
  if ( *(_DWORD *)a2 > 0 )
  {
    v4 = 0;
    v5 = 0;
    do
    {
      operator delete(*(void **)(v4 + *(_DWORD *)(a1 + 14304) + 52));
      v4 += 56;
      ++v5;
    }
    while ( v5 < *(_DWORD *)a2 );
  }
  operator delete(*(void **)(a1 + 14304));
  *(_DWORD *)(a1 + 14304) = 0;
  return v2;
}

//----- (00765BA0) --------------------------------------------------------
signed int __usercall Encode_Frame_P<eax>(int a1<eax>, int a2)
{
  int v2; // ecx@1
  int v3; // edx@1
  int v4; // eax@1
  _FRAME_COMPONENT *v5; // edi@2
  void *v6; // eax@4
  int v7; // ecx@6
  struct _SCAN *v8; // eax@8
  int v9; // esi@13
  int v10; // esi@27
  signed int result; // eax@35
  int v12; // edx@39
  struct _JPEG_PROPERTIES *v13; // eax@42
  int v14; // edx@42
  _RAW_DATA_TYPES_STATE *v15; // eax@44
  int v16; // ebx@46
  int v17; // edx@46
  int v18; // eax@46
  _FRAME_COMPONENT *v19; // edi@47
  int v20; // ebx@53
  int v21; // ecx@53
  int v22; // ebx@53
  int v23; // edi@55
  void *v24; // ebx@55
  int v25; // edx@55
  int v26; // esi@57
  int v27; // edi@58
  int v28; // esi@60
  _FRAME_COMPONENT *v29; // esi@61
  int v30; // [sp+0h] [bp-9B0h]@1
  int v31; // [sp+404h] [bp-5ACh]@7
  int v32; // [sp+808h] [bp-1A8h]@1
  __int16 *v33; // [sp+80Ch] [bp-1A4h]@1
  struct _SCAN *v34; // [sp+810h] [bp-1A0h]@1
  struct _STATE *v35; // [sp+814h] [bp-19Ch]@1
  int v36; // [sp+818h] [bp-198h]@1
  int v37; // [sp+81Ch] [bp-194h]@1
  int v38; // [sp+820h] [bp-190h]@1
  int v39; // [sp+824h] [bp-18Ch]@4
  int v40; // [sp+828h] [bp-188h]@4
  int v41; // [sp+82Ch] [bp-184h]@4
  int v42; // [sp+830h] [bp-180h]@46
  int v43; // [sp+834h] [bp-17Ch]@46
  int v44; // [sp+838h] [bp-178h]@53
  int v45; // [sp+83Ch] [bp-174h]@54
  int v46; // [sp+840h] [bp-170h]@55
  int v47; // [sp+844h] [bp-16Ch]@57
  int i; // [sp+848h] [bp-168h]@59
  int v49; // [sp+84Ch] [bp-164h]@60
  int v50; // [sp+850h] [bp-160h]@60
  void *v51; // [sp+854h] [bp-15Ch]@60
  int v52; // [sp+858h] [bp-158h]@6
  unsigned __int8 v53; // [sp+85Ch] [bp-154h]@7
  unsigned __int8 v54; // [sp+86Ch] [bp-144h]@7
  int v55; // [sp+96Ch] [bp-44h]@11
  int v56; // [sp+97Ch] [bp-34h]@1
  int v57; // [sp+980h] [bp-30h]@54
  int v58; // [sp+984h] [bp-2Ch]@59
  int v59; // [sp+988h] [bp-28h]@57
  struct _JPEG_PROPERTIES *v60; // [sp+98Ch] [bp-24h]@44
  void *v61; // [sp+990h] [bp-20h]@56
  int *v62; // [sp+998h] [bp-18h]@1
  int v63; // [sp+9A0h] [bp-10h]@1
  int (__cdecl *v64)(_EXCEPTION_RECORD *, _EH3_EXCEPTION_REGISTRATION *, int); // [sp+9A4h] [bp-Ch]@1
  _UNKNOWN *v65; // [sp+9A8h] [bp-8h]@1
  int v66; // [sp+9ACh] [bp-4h]@1

  v65 = &unk_B73164;
  v64 = _except_handler3;
  v63 = a1;
  v62 = &v30;
  v32 = 0;
  v33 = 0;
  v34 = 0;
  v56 = a2;
  v35 = (struct _STATE *)(a2 + 14312);
  v36 = 0;
  v66 = 0;
  v2 = 0;
  v37 = 0;
  v3 = 0;
  v38 = 0;
  v4 = *(_DWORD *)(a2 + 14272);
  if ( v4 > 0 )
  {
    v5 = *(_FRAME_COMPONENT **)(a2 + 14284);
    do
    {
      v3 += v5[v2].vsampling * v5[v2].hsampling;
      v38 = v3;
      ++v2;
      v37 = v2;
    }
    while ( v2 < v4 );
  }
  v39 = *(_DWORD *)(v56 + 124) * *(_DWORD *)(v56 + 120);
  v40 = v3 << 6;
  v41 = v39 * (v3 << 6);
  v6 = operator new(2 * v39 * (v3 << 6));
  *(_DWORD *)(a2 + 19940) = v6;
  if ( !v6 )
  {
    v36 = -5;
    goto LABEL_25;
  }
  if ( *(_DWORD *)(a2 + 14304) )
    goto LABEL_6;
  result = sub_764BF0(a2, (int)&v32);
  v36 = result;
  if ( result )
    return result;
  v12 = a2;
  if ( *(_DWORD *)a2 != 9 && *(_DWORD *)a2 != 8 )
  {
    v36 = EP_Write_SOI(v35);
    if ( v36 )
      goto LABEL_25;
    v12 = a2;
  }
  v36 = EP_Write_SOF2(v35, (struct _FRAME *)(v12 + 14244));
  if ( !v36 )
  {
    v13 = (struct _JPEG_PROPERTIES *)a2;
    v14 = *(_DWORD *)(a2 + 14288);
    if ( v14 )
    {
      v36 = EP_Write_DRI(v14, v35);
      if ( v36 )
        goto LABEL_25;
      v13 = (struct _JPEG_PROPERTIES *)a2;
    }
    v36 = Set_Encode_Fast_Path(v13);
    if ( !v36 )
    {
      v60 = (struct _JPEG_PROPERTIES *)a2;
      v15 = *(_RAW_DATA_TYPES_STATE **)(a2 + 19932);
      if ( v15 && !v15->data_type )
      {
        v16 = 0;
        v42 = 0;
        v17 = 0;
        v43 = 0;
        v18 = v60->jframe.ncomps;
        if ( v18 > 0 )
        {
          v19 = v60->jframe.comps;
          do
          {
            v16 += v19[v17].hsampling * v19[v17].vsampling;
            v42 = v16;
            ++v17;
            v43 = v17;
          }
          while ( v17 < v18 );
        }
        v20 = v16 << 6;
        v40 = v20;
        v21 = v60->numxMCUs;
        v42 = v21 * v20;
        v56 = 0;
        v44 = 0;
        v22 = v60->numyMCUs;
        if ( v22 > 0 )
        {
          do
          {
            v57 = 0;
            v45 = 0;
            if ( v21 > 0 )
            {
              do
              {
                v23 = v40 * 2 * v57;
                v24 = (char *)v60->coef_buffer + v42 * 2 * v56 + v23;
                v33 = (__int16 *)((char *)v60->coef_buffer + v42 * 2 * v56 + v23);
                v25 = 0;
                v46 = 0;
                if ( v18 > 0 )
                {
                  v61 = v60->jframe.comps;
                  do
                  {
                    v59 = 0;
                    v47 = 0;
                    v26 = *((_DWORD *)v61 + 4 * v25 + 2);
                    if ( v26 > 0 )
                    {
                      v27 = *((_DWORD *)v61 + 4 * v25 + 1);
                      do
                      {
                        v58 = 0;
                        for ( i = 0; i < v27; v58 = i )
                        {
                          v61 = v60->raw_coefs;
                          v28 = 16 * v58
                              + 16 * v57 * v27
                              + v27 * (v59 << 7) * v21
                              + *((_DWORD *)v61 + v25 + 1)
                              + v27 * v21 * (v56 << 7) * v26;
                          v49 = v28;
                          v50 = 0;
                          v51 = v24;
                          do
                          {
                            __g_memcpy(v24, (void *)v28, 0x10u);
                            ++v50;
                            v60 = (struct _JPEG_PROPERTIES *)a2;
                            v21 = *(_DWORD *)(a2 + 120);
                            v29 = *(_FRAME_COMPONENT **)(a2 + 14284);
                            v61 = v29;
                            v25 = v46;
                            v59 = 16 * v46;
                            v27 = v29[v46].hsampling;
                            v28 = v49 + v27 * 16 * v21;
                            v49 += v27 * 16 * v21;
                            v24 = v33 + 8;
                            v33 += 8;
                          }
                          while ( v50 < 8 );
                          v56 = v44;
                          v57 = v45;
                          v26 = *(_DWORD *)((char *)v61 + v59 + 8);
                          v59 = v47;
                          ++i;
                        }
                        ++v59;
                        v47 = v59;
                      }
                      while ( v59 < v26 );
                      v18 = v60->jframe.ncomps;
                    }
                    ++v25;
                    v46 = v25;
                  }
                  while ( v25 < v18 );
                }
                ++v57;
                v45 = v57;
              }
              while ( v57 < v21 );
              v22 = v60->numyMCUs;
            }
            ++v56;
            v44 = v56;
          }
          while ( v56 < v22 );
        }
LABEL_6:
        v7 = 0;
        v37 = 0;
        v52 = 0;
        if ( v32 <= 0 )
        {
LABEL_31:
          v36 = EP_Write_EOI(v35);
          if ( !v36 )
          {
            v36 = Flush_Buffer_To_File((int)v35);
            if ( !v36 )
              v66 = -1;
          }
        }
        else
        {
          while ( 1 )
          {
            v34 = (struct _SCAN *)(*(_DWORD *)(a2 + 14304) + 56 * v7);
            __g_memzero(&v30, 0x404u);
            __g_memzero(&v31, 0x404u);
            __g_memzero(&v53, 0x10u);
            __g_memzero(&v54, 0x100u);
            v36 = Gather_statistics((struct _JPEG_PROPERTIES *)a2, v35, (int)v34, (_DWORD (*const )[257])&v30);
            if ( v36 )
              break;
            v8 = v34;
            if ( v34->start_spec || v34->end_spec )
            {
              if ( v34->comps->comp )
              {
                v55 = 1;
                Make_optimal_huff_table(&v31, &v53, &v54);
                v36 = BuildEncoderHuffmanTable((int)&v53, (int)&v54, a2 + 2516);
                if ( v36 || (*(_DWORD *)(a2 + 14072) = a2 + 2516, (v36 = EP_Write_DHT_Ex(v35, &v53, &v54, 1, 1)) != 0) )
                  goto LABEL_25;
                v8 = v34;
                v9 = a2;
              }
              else
              {
                v55 = 0;
                Make_optimal_huff_table(&v30, &v53, &v54);
                v36 = BuildEncoderHuffmanTable((int)&v53, (int)&v54, a2 + 868);
                if ( v36 || (*(_DWORD *)(a2 + 14068) = a2 + 868, (v36 = EP_Write_DHT_Ex(v35, &v53, &v54, 1, 0)) != 0) )
                  goto LABEL_25;
                v8 = v34;
                v9 = a2;
              }
            }
            else
            {
              if ( v34->approx_high )
              {
                v9 = a2;
              }
              else
              {
                v34->dc_diff[0] = 0;
                v8->dc_diff[1] = 0;
                v8->dc_diff[2] = 0;
                v8->dc_diff[3] = 0;
                v55 = 0;
                Make_optimal_huff_table(&v30, &v53, &v54);
                v36 = BuildEncoderHuffmanTable((int)&v53, (int)&v54, a2 + 7460);
                if ( v36 || (*(_DWORD *)(a2 + 14084) = a2 + 7460, (v36 = EP_Write_DHT_Ex(v35, &v53, &v54, 0, 0)) != 0) )
                  goto LABEL_25;
                v9 = a2;
                if ( *(_DWORD *)(a2 + 84) == 1 )
                {
                  v8 = v34;
                }
                else
                {
                  __g_memzero(&v53, 0x10u);
                  __g_memzero(&v54, 0x100u);
                  v55 = 1;
                  Make_optimal_huff_table(&v31, &v53, &v54);
                  v36 = BuildEncoderHuffmanTable((int)&v53, (int)&v54, a2 + 9108);
                  if ( v36 || (*(_DWORD *)(a2 + 14088) = a2 + 9108, (v36 = EP_Write_DHT_Ex(v35, &v53, &v54, 0, 1)) != 0) )
                    goto LABEL_25;
                  v8 = v34;
                  v9 = a2;
                }
              }
            }
            v36 = EP_Write_SOS_Ex((int)v35, v8, (unsigned __int8 *)(v9 + 14240), (unsigned __int8 *)(v9 + 14236));
            if ( v36 || (v36 = Encode_Scan_P((struct _JPEG_PROPERTIES *)a2, (int)v35, (int)v34), v36 < 0) )
              goto LABEL_25;
            ++v52;
            v7 = v37 + 1;
            v37 = v7;
            if ( v7 >= v32 )
              goto LABEL_31;
          }
        }
        goto LABEL_25;
      }
      v36 = Fill_coeffs_buffer(v60);
      if ( !v36 )
        goto LABEL_6;
    }
  }
LABEL_25:
  if ( *(_DWORD *)(a2 + 14304) )
  {
    v37 = 0;
    if ( v32 > 0 )
    {
      do
      {
        operator delete(*(void **)(56 * v37 + *(_DWORD *)(a2 + 14304) + 52));
        v10 = v37 + 1;
        *(_DWORD *)(56 * v37 + *(_DWORD *)(a2 + 14304) + 52) = 0;
        v37 = v10;
      }
      while ( v10 < v32 );
    }
    operator delete(*(void **)(a2 + 14304));
    *(_DWORD *)(a2 + 14304) = 0;
  }
  return v36;
}
// B6C2E4: using guessed type void (__cdecl *__g_memzero)(void *, unsigned int);
// B6C2E8: using guessed type void (__cdecl *__g_memcpy)(void *, void *, unsigned int);

//----- (0076657A) --------------------------------------------------------
void __usercall sub_76657A(int a1<ebp>)
{
  *(_DWORD *)(a1 - 408) = -1;
  *(_DWORD *)(a1 - 4) = -1;
  JUMPOUT(loc_76604B);
}
// 76604B: using guessed type int __cdecl loc_76604B(struct _JPEG_PROPERTIES *);

//----- (00766589) --------------------------------------------------------
signed int __cdecl sub_766589()
{
  return 1;
}

//----- (00766590) --------------------------------------------------------
_UNKNOWN *__cdecl ownGetLibVersion()
{
  return &unk_A84BC0;
}

//----- (007665A0) --------------------------------------------------------
signed int __cdecl FillEncoderQuantTable_AAN(int a1)
{
  signed int v1; // ecx@3
  signed int v2; // esi@4
  signed int result; // eax@5
  __int16 v4; // [sp+0h] [bp-8Ch]@4
  __int16 v5; // [sp+2h] [bp-8Ah]@4
  __int16 v6; // [sp+4h] [bp-88h]@6
  __int16 v7[67]; // [sp+6h] [bp-86h]@6

  if ( (signed int)*(_WORD *)(a1 + 126) < 2 )
    *(_WORD *)(a1 + 126) = 2;
  v1 = 0;
  do
  {
    v2 = *(_WORD *)(a1 + 2 * v1 + 2);
    *(&v4 + v1) = (dword_B73220[v1] + ((signed int)*(_WORD *)(a1 + 2 * v1) >> 1)) / *(_WORD *)(a1 + 2 * v1);
    *(&v5 + v1) = (dword_B73224[v1] + (v2 >> 1)) / v2;
    v1 += 2;
  }
  while ( v1 < 64 );
  result = 0;
  do
  {
    *(_WORD *)(a1 + 2 * izigzag_index[result]) = *(&v4 + result);
    *(_WORD *)(a1 + 2 * dword_B72EE4[result]) = *(&v5 + result);
    *(_WORD *)(a1 + 2 * dword_B72EE8[result]) = *(&v6 + result);
    *(_WORD *)(a1 + 2 * dword_B72EEC[result]) = v7[result];
    result += 4;
  }
  while ( result < 64 );
  return result;
}
// B72EE0: using guessed type int izigzag_index[];
// B72EE4: using guessed type int dword_B72EE4[];
// B72EE8: using guessed type int dword_B72EE8[];
// B72EEC: using guessed type int dword_B72EEC[];
// B73220: using guessed type int dword_B73220[];
// B73224: using guessed type int dword_B73224[];
// 7665A0: using guessed type __int16 var_86[67];

//----- (00766660) --------------------------------------------------------
signed int __cdecl fQnt8x8_AAN_PX(int a1, int a2)
{
  signed int result; // eax@1
  int v3; // ebx@2
  int v4; // esi@2
  int v5; // ebx@2
  int v6; // esi@2
  int v7; // ebx@2

  result = 0;
  do
  {
    v3 = *(_WORD *)(a1 + 2 * result + 2);
    *(_WORD *)(a1 + 2 * result) = (*(_WORD *)(a1 + 2 * result) * (signed int)*(_WORD *)(a2 + 2 * result) + 16384) >> 15;
    v4 = (v3 * *(_WORD *)(a2 + 2 * result + 2) + 16384) >> 15;
    v5 = *(_WORD *)(a1 + 2 * result + 4);
    *(_WORD *)(a1 + 2 * result + 2) = v4;
    v6 = (v5 * *(_WORD *)(a2 + 2 * result + 4) + 16384) >> 15;
    v7 = *(_WORD *)(a1 + 2 * result + 6);
    *(_WORD *)(a1 + 2 * result + 4) = v6;
    *(_WORD *)(a1 + 2 * result + 6) = (v7 * *(_WORD *)(a2 + 2 * result + 6) + 16384) >> 15;
    result += 4;
  }
  while ( result < 64 );
  return result;
}

//----- (007666F0) --------------------------------------------------------
int __cdecl fDCT8x8_AAN_PX(int a1)
{
  unsigned int v1; // eax@1
  int v2; // ecx@2
  int v3; // ebp@2
  int v4; // esi@2
  int v5; // ecx@2
  int v6; // ebx@2
  int v7; // edx@2
  int v8; // edi@2
  int v9; // eax@2
  int v10; // edx@2
  int v11; // ebp@2
  int v12; // esi@2
  int v13; // ecx@2
  int v14; // ebx@2
  int v15; // edi@2
  int v16; // eax@2
  int v17; // ebx@2
  int v18; // ebp@2
  int v19; // edx@2
  int v20; // ebx@2
  int v21; // esi@2
  int v22; // ebx@2
  int v23; // edx@2
  int v24; // ebp@2
  int v25; // ecx@2
  int v26; // edx@2
  int v27; // edx@3
  int v28; // ecx@3
  int v29; // ebp@4
  int v30; // ebx@4
  int v31; // eax@4
  int v32; // ebp@4
  int v33; // eax@4
  int v34; // edi@4
  int v35; // eax@4
  int v36; // ebp@4
  int v37; // eax@4
  int v38; // esi@4
  int v39; // eax@4
  int v40; // ebp@4
  int v41; // eax@4
  int v42; // edx@4
  int v43; // eax@4
  int v44; // ebx@4
  int v45; // edx@4
  int v46; // esi@4
  int v47; // eax@4
  int v48; // edx@4
  int v49; // edi@4
  int v50; // edx@4
  int v51; // ebp@4
  int result; // eax@4
  char v53; // [sp+1Fh] [bp-145h]@1
  int v54; // [sp+120h] [bp-44h]@1
  int v55; // [sp+124h] [bp-40h]@1
  unsigned int v56; // [sp+128h] [bp-3Ch]@1
  int v57; // [sp+12Ch] [bp-38h]@1
  int v58; // [sp+130h] [bp-34h]@2
  int v59; // [sp+134h] [bp-30h]@2
  int v60; // [sp+138h] [bp-2Ch]@2
  int v61; // [sp+13Ch] [bp-28h]@2
  int v62; // [sp+140h] [bp-24h]@2
  int v63; // [sp+144h] [bp-20h]@2
  int v64; // [sp+148h] [bp-1Ch]@2
  int v65; // [sp+14Ch] [bp-18h]@2

  v1 = (unsigned int)&v53 & 0xFFFFFFE0;
  v54 = 7;
  v57 = a1;
  v56 = (unsigned int)&v53 & 0xFFFFFFE0;
  v55 = a1;
  do
  {
    v58 = v1;
    v59 = *(_WORD *)v57;
    v2 = *(_WORD *)(v57 + 14);
    v60 = *(_WORD *)(v57 + 14);
    v3 = *(_WORD *)(v57 + 2);
    v4 = *(_WORD *)(v57 + 12);
    v61 = v59 + v2;
    v5 = *(_WORD *)(v57 + 4);
    v62 = v3 + v4;
    v6 = *(_WORD *)(v57 + 10);
    v63 = v5 + v6;
    v7 = *(_WORD *)(v57 + 6);
    v8 = *(_WORD *)(v57 + 8);
    v9 = v7 + v8;
    v10 = v7 - v8;
    v64 = v5 - v6;
    v65 = v3 - v4;
    v11 = v61 + v9;
    v12 = v61 - v9;
    v59 -= v60;
    v13 = v62 + v5 + v6;
    v14 = v62 - v63;
    v15 = v61 + v9 + v62 + v63;
    v16 = v58;
    *(_DWORD *)v58 = v15;
    *(_DWORD *)(v16 + 16) = v11 - v13;
    v17 = (23170 * (v12 + v14) + 16384) >> 15;
    *(_DWORD *)(v16 + 8) = v12 + v17;
    v18 = v64;
    v19 = v64 + v10;
    *(_DWORD *)(v16 + 24) = v12 - v17;
    v20 = (12540 * (v19 - (v59 + v65)) + 16384) >> 15;
    v21 = v20 + ((17734 * v19 + 16384) >> 15);
    v22 = ((42813 * (v59 + v65) + 16384) >> 15) + v20;
    v23 = (23170 * (v65 + v18) + 16384) >> 15;
    v24 = v59 + v23;
    v25 = v59 - v23;
    *(_DWORD *)(v16 + 20) = v21 + v59 - v23;
    *(_DWORD *)(v16 + 12) = v25 - v21;
    *(_DWORD *)(v16 + 4) = v22 + v24;
    v26 = v54 - 1;
    *(_DWORD *)(v16 + 28) = v24 - v22;
    v1 = v16 + 32;
    v57 += 16;
    v54 = v26;
  }
  while ( v26 >= 0 );
  v27 = v56;
  v28 = v55;
  v54 = 7;
  do
  {
    v56 = v27;
    v29 = *(_DWORD *)(v27 + 224);
    v30 = *(_DWORD *)v27 + v29;
    v31 = *(_DWORD *)v27 - v29;
    v32 = *(_DWORD *)(v27 + 192);
    v65 = v31;
    v33 = *(_DWORD *)(v27 + 32);
    v34 = v33 + v32;
    v35 = v33 - v32;
    v36 = *(_DWORD *)(v27 + 160);
    v64 = v35;
    v37 = *(_DWORD *)(v27 + 64);
    v38 = v37 + v36;
    v39 = v37 - v36;
    v40 = *(_DWORD *)(v27 + 128);
    v63 = v39;
    v41 = *(_DWORD *)(v27 + 96);
    v42 = v41 + v40;
    v43 = v41 - v40;
    LOWORD(v40) = v30 + v42;
    v44 = v30 - v42;
    *(_WORD *)v28 = v40 + v34 + (_WORD)v38;
    *(_WORD *)(v28 + 64) = v40 - (v34 + (_WORD)v38);
    v45 = (23170 * (v44 + v34 - v38) + 16384) >> 15;
    *(_WORD *)(v28 + 32) = v44 + v45;
    v46 = v63;
    v47 = v63 + v43;
    *(_WORD *)(v28 + 96) = v44 - v45;
    v48 = (12540 * (v47 - (v65 + v64)) + 16384) >> 15;
    v49 = v48 + ((17734 * v47 + 16384) >> 15);
    v50 = ((42813 * (v65 + v64) + 16384) >> 15) + v48;
    v51 = (23170 * (v64 + v46) + 16384) >> 15;
    LOWORD(v47) = v65 + v51;
    LOWORD(v44) = v65 - v51;
    *(_WORD *)(v28 + 80) = v49 + v65 - (_WORD)v51;
    *(_WORD *)(v28 + 48) = v44 - v49;
    LOWORD(v44) = v50 + v47;
    LOWORD(v47) = v47 - v50;
    *(_WORD *)(v28 + 16) = v44;
    v27 = v56 + 4;
    *(_WORD *)(v28 + 112) = v47;
    v28 += 2;
    result = v54-- - 1;
  }
  while ( v54 >= 0 );
  return result;
}

//----- (00766A00) --------------------------------------------------------
int __cdecl fQnt8x8_AAN_M5(int a1, int a2)
{
  return own_fqnt8x8_aan_m5(a1, a2);
}

//----- (00766A20) --------------------------------------------------------
int __cdecl fDCT8x8_AAN_M5(int a1)
{
  return own_fdct8x8_aan_m5(a1);
}

//----- (00766A40) --------------------------------------------------------
int __cdecl FillDecoderQuantTable_AAN(int a1)
{
  signed int v1; // eax@1
  double v2; // st7@1
  double v3; // st6@1
  double v4; // st5@1
  double v5; // kr00_8@2
  int v6; // ecx@2
  unsigned int v7; // esi@3
  double v8; // kr08_8@6
  int v9; // ecx@6
  unsigned int v10; // esi@7
  double v11; // kr10_8@10
  int v12; // ecx@10
  unsigned int v13; // esi@11
  double v14; // kr18_8@14
  int v15; // ecx@14
  unsigned int v16; // esi@15
  int v17; // ecx@18
  signed int v18; // eax@19
  int result; // eax@21
  __int16 v20; // [sp+0h] [bp-BCh]@6
  __int16 v21; // [sp+2h] [bp-BAh]@20
  __int16 v22; // [sp+4h] [bp-B8h]@20
  __int16 v23[61]; // [sp+6h] [bp-B6h]@20
  unsigned int v24; // [sp+80h] [bp-3Ch]@6
  double v25; // [sp+98h] [bp-24h]@2
  int v26; // [sp+A0h] [bp-1Ch]@2

  v1 = 0;
  v2 = dbl_B73550;
  v3 = dbl_B73548;
  v4 = dbl_B73540;
  do
  {
    v26 = *(_WORD *)(a1 + 2 * v1);
    v25 = (double)v26 * dbl_B73340[v1] * v3 * v4 + v2;
    v5 = v25;
    v6 = (HIDWORD(v5) >> 20) & 0x7FF;
    if ( v6 <= 1022 )
    {
      v7 = 0;
    }
    else
    {
      v7 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v6);
      if ( SHIDWORD(v5) < 0 )
        v7 = -v7;
    }
    v24 = v7;
    *(&v20 + izigzag_index[v1]) = v7;
    v26 = *(_WORD *)(a1 + 2 * v1 + 2);
    v25 = (double)v26 * dbl_B73348[v1] * v3 * v4 + v2;
    v8 = v25;
    v9 = (HIDWORD(v8) >> 20) & 0x7FF;
    if ( v9 <= 1022 )
    {
      v10 = 0;
    }
    else
    {
      v10 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v9);
      if ( SHIDWORD(v8) < 0 )
        v10 = -v10;
    }
    v24 = v10;
    *(&v20 + dword_B72EE4[v1]) = v10;
    v26 = *(_WORD *)(a1 + 2 * v1 + 4);
    v25 = (double)v26 * dbl_B73350[v1] * v3 * v4 + v2;
    v11 = v25;
    v12 = (HIDWORD(v11) >> 20) & 0x7FF;
    if ( v12 <= 1022 )
    {
      v13 = 0;
    }
    else
    {
      v13 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v12);
      if ( SHIDWORD(v11) < 0 )
        v13 = -v13;
    }
    v24 = v13;
    *(&v20 + dword_B72EE8[v1]) = v13;
    v26 = *(_WORD *)(a1 + 2 * v1 + 6);
    v25 = (double)v26 * dbl_B73358[v1] * v3 * v4 + v2;
    v14 = v25;
    v15 = (HIDWORD(v14) >> 20) & 0x7FF;
    if ( v15 <= 1022 )
    {
      v16 = 0;
    }
    else
    {
      v16 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v15);
      if ( SHIDWORD(v14) < 0 )
        v16 = -v16;
    }
    v24 = v16;
    v17 = dword_B72EEC[v1];
    v1 += 4;
    *(&v20 + v17) = v16;
  }
  while ( v1 < 64 );
  v18 = 0;
  do
  {
    *(_WORD *)(a1 + 2 * v18) = *(&v20 + v18);
    *(_WORD *)(a1 + 2 * v18 + 2) = *(&v21 + v18);
    *(_WORD *)(a1 + 2 * v18 + 4) = *(&v22 + v18);
    *(_WORD *)(a1 + 2 * v18 + 6) = v23[v18];
    v18 += 4;
  }
  while ( v18 < 64 );
  result = 0;
  *(_WORD *)(a1 + 128) = 0;
  *(_WORD *)(a1 + 130) = 0;
  *(_WORD *)(a1 + 132) = 0;
  *(_WORD *)(a1 + 134) = 0;
  *(_WORD *)(a1 + 136) = 0;
  *(_WORD *)(a1 + 138) = 0;
  *(_WORD *)(a1 + 140) = 0;
  *(_WORD *)(a1 + 142) = 0;
  *(_WORD *)(a1 + 144) = 0;
  *(_WORD *)(a1 + 146) = 0;
  *(_WORD *)(a1 + 148) = 0;
  *(_WORD *)(a1 + 150) = 0;
  *(_WORD *)(a1 + 152) = 0;
  *(_WORD *)(a1 + 154) = 0;
  *(_WORD *)(a1 + 156) = 0;
  *(_WORD *)(a1 + 158) = 0;
  return result;
}
// B72EE0: using guessed type int izigzag_index[];
// B72EE4: using guessed type int dword_B72EE4[];
// B72EE8: using guessed type int dword_B72EE8[];
// B72EEC: using guessed type int dword_B72EEC[];
// B73340: using guessed type double dbl_B73340[];
// B73348: using guessed type double dbl_B73348[];
// B73350: using guessed type double dbl_B73350[];
// B73358: using guessed type double dbl_B73358[];
// B73540: using guessed type double dbl_B73540;
// B73548: using guessed type double dbl_B73548;
// B73550: using guessed type double dbl_B73550;
// 766A40: using guessed type __int16 var_B6[61];

//----- (00766D40) --------------------------------------------------------
signed int __cdecl iQnt8x8_AAN_PX(int a1, int a2)
{
  signed int result; // eax@1
  int v3; // ebx@2
  int v4; // esi@2
  int v5; // ebx@2
  int v6; // esi@2
  int v7; // ebx@2

  result = 0;
  do
  {
    v3 = *(_WORD *)(a1 + 2 * result + 2);
    *(_WORD *)(a1 + 2 * result) = (*(_WORD *)(a1 + 2 * result) * (signed int)*(_WORD *)(a2 + 2 * result) + 64) >> 7;
    v4 = (v3 * *(_WORD *)(a2 + 2 * result + 2) + 64) >> 7;
    v5 = *(_WORD *)(a1 + 2 * result + 4);
    *(_WORD *)(a1 + 2 * result + 2) = v4;
    v6 = (v5 * *(_WORD *)(a2 + 2 * result + 4) + 64) >> 7;
    v7 = *(_WORD *)(a1 + 2 * result + 6);
    *(_WORD *)(a1 + 2 * result + 4) = v6;
    *(_WORD *)(a1 + 2 * result + 6) = (v7 * *(_WORD *)(a2 + 2 * result + 6) + 64) >> 7;
    result += 4;
  }
  while ( result < 64 );
  return result;
}

//----- (00766DC0) --------------------------------------------------------
int __cdecl iDCT8x8_AAN_PX(int a1)
{
  int v1; // edx@1
  int v2; // eax@1
  int v3; // ST10_4@2
  int v4; // ebp@2
  int v5; // ecx@2
  int v6; // ebx@2
  int v7; // edi@2
  int v8; // esi@2
  int v9; // ebp@2
  int v10; // edi@2
  int v11; // esi@2
  int v12; // edi@2
  int v13; // esi@2
  __int16 v14; // ST0C_2@2
  int v15; // ST08_4@2
  int v16; // ST04_4@2
  __int16 v17; // ST1C_2@2
  int v18; // ecx@2
  int v19; // edx@2
  int v20; // edi@2
  int v21; // ecx@2
  int v22; // edx@2
  int v23; // ecx@3
  int result; // eax@3
  int v25; // eax@4
  int v26; // ebp@4
  int v27; // esi@4
  int v28; // ebx@4
  int v29; // eax@4
  int v30; // edx@4
  int v31; // ebx@4
  int v32; // eax@4
  int v33; // edi@4
  int v34; // ebx@4
  int v35; // esi@4
  int v36; // edi@4
  int v37; // edx@4
  int v38; // ebx@4
  int v39; // eax@4
  int v40; // edx@4
  int v41; // ebx@4
  int v42; // ebp@4
  int v43; // edi@4
  int v44; // eax@4
  int v45; // ebp@4
  int v46; // edx@4
  int v47; // ebx@4
  int v48; // edi@4
  int v49; // edi@7
  int v50; // edi@10
  int v51; // edi@13
  int v52; // esi@16
  int v53; // ebx@19
  int v54; // edx@22
  int v55; // ebp@25
  int v56; // [sp+4h] [bp-30h]@4
  int v57; // [sp+8h] [bp-2Ch]@4
  int v58; // [sp+Ch] [bp-28h]@4
  int v59; // [sp+10h] [bp-24h]@4
  signed int v60; // [sp+14h] [bp-20h]@1
  signed int v61; // [sp+14h] [bp-20h]@3
  int v62; // [sp+1Ch] [bp-18h]@4
  int v63; // [sp+20h] [bp-14h]@4

  v1 = a1;
  v2 = a1;
  v60 = 8;
  do
  {
    v3 = v1;
    v4 = *(_WORD *)(v1 + 48);
    v5 = *(_WORD *)(v1 + 80) - v4;
    v6 = v4 + *(_WORD *)(v1 + 80);
    v7 = *(_WORD *)(v1 + 16);
    v8 = *(_WORD *)(v1 + 112);
    v9 = v7 + v8;
    v10 = v7 - v8;
    v11 = (25080 * (v5 - v10) + 16384) >> 15;
    v12 = ((35468 * v10 + 16384) >> 15) - v11;
    v13 = v11 - ((85627 * v5 + 16384) >> 15);
    v14 = v9 + v6;
    v15 = v12 - (v9 + v6);
    v16 = ((46341 * (v9 - v6) + 16384) >> 15) - (v12 - (v9 + v6));
    LOWORD(v5) = *(_WORD *)(v1 + 64);
    v17 = v16 + v13;
    LOWORD(v9) = *(_WORD *)v1 + v5;
    LOWORD(v13) = *(_WORD *)v1 - v5;
    v18 = *(_WORD *)(v1 + 32);
    v19 = *(_WORD *)(v1 + 96);
    v20 = v18 - v19;
    v21 = v19 + v18;
    v22 = ((46341 * v20 + 16384) >> 15) - v21;
    LOWORD(v20) = v21 + v9;
    LOWORD(v9) = v9 - v21;
    LOWORD(v21) = v22 + v13;
    LOWORD(v13) = v13 - v22;
    *(_WORD *)v2 = v14 + v20;
    *(_WORD *)(v2 + 16) = v21 + v15;
    *(_WORD *)(v2 + 32) = v13 + v16;
    *(_WORD *)(v2 + 48) = v9 - v17;
    *(_WORD *)(v2 + 64) = v17 + v9;
    *(_WORD *)(v2 + 80) = v13 - v16;
    *(_WORD *)(v2 + 96) = v21 - v15;
    *(_WORD *)(v2 + 112) = v20 - v14;
    v1 = v3 + 2;
    v2 += 2;
    --v60;
  }
  while ( v60 > 0 );
  v23 = a1;
  result = a1;
  v61 = 8;
  do
  {
    v63 = result;
    v25 = *(_WORD *)(v23 + 6);
    v26 = *(_WORD *)(v23 + 10) - v25;
    v27 = v25 + *(_WORD *)(v23 + 10);
    v28 = *(_WORD *)(v23 + 2);
    v29 = *(_WORD *)(v23 + 14);
    v30 = v28 + v29;
    v31 = v28 - v29;
    v32 = (25080 * (v26 - v31) + 16384) >> 15;
    v33 = ((35468 * v31 + 16384) >> 15) - v32;
    v34 = v30 - v27;
    v35 = v30 + v27;
    v36 = v33 - v35;
    v58 = v35;
    v56 = v36;
    v37 = ((46341 * v34 + 16384) >> 15) - v36;
    v59 = v37;
    v38 = *(_WORD *)v23;
    v62 = v37 + v32 - ((85627 * v26 + 16384) >> 15);
    v39 = *(_WORD *)(v23 + 8);
    v40 = v38 + v39;
    v41 = v38 - v39;
    v42 = *(_WORD *)(v23 + 12);
    v43 = v42 + *(_WORD *)(v23 + 4);
    v44 = ((46341 * (*(_WORD *)(v23 + 4) - v42) + 16384) >> 15) - v43;
    v45 = v43 + v40;
    v57 = v40 - v43;
    v46 = v44 + v41;
    v47 = v41 - v44;
    v48 = ((v35 + v45 + 8) >> 4) + 128;
    if ( v48 < 0 )
    {
      LOWORD(v48) = 0;
    }
    else
    {
      if ( v48 > 255 )
        LOWORD(v48) = 255;
    }
    *(_WORD *)v63 = v48;
    v49 = ((v46 + v56 + 8) >> 4) + 128;
    if ( v49 < 0 )
    {
      LOWORD(v49) = 0;
    }
    else
    {
      if ( v49 > 255 )
        LOWORD(v49) = 255;
    }
    *(_WORD *)(v63 + 2) = v49;
    v50 = ((v47 + v59 + 8) >> 4) + 128;
    if ( v50 < 0 )
    {
      LOWORD(v50) = 0;
    }
    else
    {
      if ( v50 > 255 )
        LOWORD(v50) = 255;
    }
    *(_WORD *)(v63 + 4) = v50;
    v51 = ((v57 - v62 + 8) >> 4) + 128;
    if ( v51 < 0 )
    {
      LOWORD(v51) = 0;
    }
    else
    {
      if ( v51 > 255 )
        LOWORD(v51) = 255;
    }
    *(_WORD *)(v63 + 6) = v51;
    v52 = ((v57 + v62 + 8) >> 4) + 128;
    if ( v52 < 0 )
    {
      LOWORD(v52) = 0;
    }
    else
    {
      if ( v52 > 255 )
        LOWORD(v52) = 255;
    }
    *(_WORD *)(v63 + 8) = v52;
    v53 = ((v47 - v59 + 8) >> 4) + 128;
    if ( v53 < 0 )
    {
      LOWORD(v53) = 0;
    }
    else
    {
      if ( v53 > 255 )
        LOWORD(v53) = 255;
    }
    *(_WORD *)(v63 + 10) = v53;
    v54 = ((v46 - v56 + 8) >> 4) + 128;
    if ( v54 < 0 )
    {
      LOWORD(v54) = 0;
    }
    else
    {
      if ( v54 > 255 )
        LOWORD(v54) = 255;
    }
    *(_WORD *)(v63 + 12) = v54;
    v55 = ((v45 - v58 + 8) >> 4) + 128;
    if ( v55 < 0 )
    {
      LOWORD(v55) = 0;
    }
    else
    {
      if ( v55 > 255 )
        LOWORD(v55) = 255;
    }
    *(_WORD *)(v63 + 14) = v55;
    v23 += 16;
    result = v63 + 16;
    --v61;
  }
  while ( v61 > 0 );
  return result;
}

//----- (007671B0) --------------------------------------------------------
int __cdecl iDCT8x8_AAN_M5(int a1)
{
  return own_idct8x8_aan_m5(a1);
}

//----- (007671D0) --------------------------------------------------------
int __cdecl iDCT4x4_AAN_PX(int a1)
{
  int v1; // esi@1
  int v2; // ebp@2
  int v3; // ebx@2
  int v4; // eax@2
  int v5; // eax@2
  __int16 v6; // dx@2
  __int16 v7; // cx@2
  int v8; // eax@2
  int v9; // ebp@2
  __int16 v10; // dx@2
  signed int v11; // eax@2
  int result; // eax@6
  int v13; // edx@6
  int v14; // ecx@6
  int v15; // ebx@6
  int v16; // esi@6
  int v17; // esi@6
  int v18; // ebp@6
  int v19; // ebx@6
  int v20; // esi@6
  int v21; // ecx@6
  int v22; // edx@6
  int v23; // edx@9
  int v24; // ebx@12
  int v25; // ebp@15
  int v26; // edx@18
  int v27; // ecx@18
  int v28; // ebx@18
  int v29; // esi@18
  int v30; // esi@18
  int v31; // ebp@18
  int v32; // ebx@18
  int v33; // esi@18
  int v34; // ecx@18
  int v35; // edx@18
  int v36; // edx@21
  int v37; // ebx@24
  int v38; // ebp@27
  int v39; // edx@30
  int v40; // ecx@30
  int v41; // ebx@30
  int v42; // esi@30
  int v43; // esi@30
  int v44; // ebp@30
  int v45; // ebx@30
  int v46; // esi@30
  int v47; // ecx@30
  int v48; // edx@30
  int v49; // edx@33
  int v50; // ebx@36
  int v51; // ebp@39
  int v52; // edx@42
  int v53; // ecx@42
  int v54; // ebx@42
  int v55; // esi@42
  int v56; // esi@42
  int v57; // ebp@42
  int v58; // ebx@42
  int v59; // esi@42
  int v60; // ecx@42
  int v61; // edx@42
  int v62; // edx@45
  int v63; // ebx@48
  int v64; // ebp@51
  signed int v65; // [sp+4h] [bp-18h]@1

  v1 = a1;
  v65 = 0;
LABEL_2:
  v2 = *(_WORD *)(v1 + 80) - *(_WORD *)(v1 + 48);
  v3 = *(_WORD *)(v1 + 16) - *(_WORD *)(v1 + 112);
  v4 = (46341 * (*(_WORD *)(v1 + 32) - (signed int)*(_WORD *)(v1 + 96)) + 16384) >> 15;
  v5 = (__CFADD__(v4, -2147483648) + v4 + -2147483648 + -2147483648) >> 1;
  v6 = *(_WORD *)v1 + v5;
  v7 = *(_WORD *)v1 - v5;
  v8 = (-25080 * v2 + 60548 * v3 + 32768) >> 16;
  v9 = (60547 * v2 + 25080 * v3 + 32768) >> 16;
  LOWORD(v3) = v6 + v8;
  v10 = v6 - v8;
  v11 = v65;
  *(_WORD *)v1 = v3;
  *(_WORD *)(v1 + 16) = v7 + v9;
  *(_WORD *)(v1 + 32) = v7 - v9;
  *(_WORD *)(v1 + 48) = v10;
  while ( 1 )
  {
    v1 += 2;
    ++v11;
    if ( v11 >= 8 )
      break;
    if ( v11 != 4 )
    {
      v65 = v11;
      goto LABEL_2;
    }
  }
  result = a1;
  v13 = *(_WORD *)(a1 + 10) - *(_WORD *)(a1 + 6);
  v14 = *(_WORD *)(a1 + 2) - *(_WORD *)(a1 + 14);
  v15 = *(_WORD *)a1;
  v16 = (46341 * (*(_WORD *)(a1 + 4) - (signed int)*(_WORD *)(a1 + 12)) + 16384) >> 15;
  v17 = (__CFADD__(v16, -2147483648) + v16 + -2147483648 + -2147483648) >> 1;
  v18 = v15 + v17;
  v19 = v15 - v17;
  v20 = (-25080 * v13 + 60548 * v14 + 32768) >> 16;
  v21 = (60547 * v13 + 25080 * v14 + 32768) >> 16;
  v22 = ((v18 + v20 + 8) >> 4) + 128;
  if ( v22 < 0 )
  {
    LOWORD(v22) = 0;
  }
  else
  {
    if ( v22 > 255 )
      LOWORD(v22) = 255;
  }
  *(_WORD *)a1 = v22;
  v23 = ((v19 + v21 + 8) >> 4) + 128;
  if ( v23 < 0 )
  {
    LOWORD(v23) = 0;
  }
  else
  {
    if ( v23 > 255 )
      LOWORD(v23) = 255;
  }
  *(_WORD *)(a1 + 2) = v23;
  v24 = ((v19 - v21 + 8) >> 4) + 128;
  if ( v24 < 0 )
  {
    LOWORD(v24) = 0;
  }
  else
  {
    if ( v24 > 255 )
      LOWORD(v24) = 255;
  }
  *(_WORD *)(a1 + 4) = v24;
  v25 = ((v18 - v20 + 8) >> 4) + 128;
  if ( v25 < 0 )
  {
    LOWORD(v25) = 0;
  }
  else
  {
    if ( v25 > 255 )
      LOWORD(v25) = 255;
  }
  *(_WORD *)(a1 + 6) = v25;
  v26 = *(_WORD *)(a1 + 26) - *(_WORD *)(a1 + 22);
  v27 = *(_WORD *)(a1 + 18) - *(_WORD *)(a1 + 30);
  v28 = *(_WORD *)(a1 + 16);
  v29 = (46341 * (*(_WORD *)(a1 + 20) - (signed int)*(_WORD *)(a1 + 28)) + 16384) >> 15;
  v30 = (__CFADD__(v29, -2147483648) + v29 + -2147483648 + -2147483648) >> 1;
  v31 = v28 + v30;
  v32 = v28 - v30;
  v33 = (-25080 * v26 + 60548 * v27 + 32768) >> 16;
  v34 = (60547 * v26 + 25080 * v27 + 32768) >> 16;
  v35 = ((v31 + v33 + 8) >> 4) + 128;
  if ( v35 < 0 )
  {
    LOWORD(v35) = 0;
  }
  else
  {
    if ( v35 > 255 )
      LOWORD(v35) = 255;
  }
  *(_WORD *)(a1 + 16) = v35;
  v36 = ((v32 + v34 + 8) >> 4) + 128;
  if ( v36 < 0 )
  {
    LOWORD(v36) = 0;
  }
  else
  {
    if ( v36 > 255 )
      LOWORD(v36) = 255;
  }
  *(_WORD *)(a1 + 18) = v36;
  v37 = ((v32 - v34 + 8) >> 4) + 128;
  if ( v37 < 0 )
  {
    LOWORD(v37) = 0;
  }
  else
  {
    if ( v37 > 255 )
      LOWORD(v37) = 255;
  }
  *(_WORD *)(a1 + 20) = v37;
  v38 = ((v31 - v33 + 8) >> 4) + 128;
  if ( v38 < 0 )
  {
    LOWORD(v38) = 0;
  }
  else
  {
    if ( v38 > 255 )
      LOWORD(v38) = 255;
  }
  *(_WORD *)(a1 + 22) = v38;
  v39 = *(_WORD *)(a1 + 42) - *(_WORD *)(a1 + 38);
  v40 = *(_WORD *)(a1 + 34) - *(_WORD *)(a1 + 46);
  v41 = *(_WORD *)(a1 + 32);
  v42 = (46341 * (*(_WORD *)(a1 + 36) - (signed int)*(_WORD *)(a1 + 44)) + 16384) >> 15;
  v43 = (__CFADD__(v42, -2147483648) + v42 + -2147483648 + -2147483648) >> 1;
  v44 = v41 + v43;
  v45 = v41 - v43;
  v46 = (-25080 * v39 + 60548 * v40 + 32768) >> 16;
  v47 = (60547 * v39 + 25080 * v40 + 32768) >> 16;
  v48 = ((v44 + v46 + 8) >> 4) + 128;
  if ( v48 < 0 )
  {
    LOWORD(v48) = 0;
  }
  else
  {
    if ( v48 > 255 )
      LOWORD(v48) = 255;
  }
  *(_WORD *)(a1 + 32) = v48;
  v49 = ((v45 + v47 + 8) >> 4) + 128;
  if ( v49 < 0 )
  {
    LOWORD(v49) = 0;
  }
  else
  {
    if ( v49 > 255 )
      LOWORD(v49) = 255;
  }
  *(_WORD *)(a1 + 34) = v49;
  v50 = ((v45 - v47 + 8) >> 4) + 128;
  if ( v50 < 0 )
  {
    LOWORD(v50) = 0;
  }
  else
  {
    if ( v50 > 255 )
      LOWORD(v50) = 255;
  }
  *(_WORD *)(a1 + 36) = v50;
  v51 = ((v44 - v46 + 8) >> 4) + 128;
  if ( v51 < 0 )
  {
    LOWORD(v51) = 0;
  }
  else
  {
    if ( v51 > 255 )
      LOWORD(v51) = 255;
  }
  *(_WORD *)(a1 + 38) = v51;
  v52 = *(_WORD *)(a1 + 58) - *(_WORD *)(a1 + 54);
  v53 = *(_WORD *)(a1 + 50) - *(_WORD *)(a1 + 62);
  v54 = *(_WORD *)(a1 + 48);
  v55 = (46341 * (*(_WORD *)(a1 + 52) - (signed int)*(_WORD *)(a1 + 60)) + 16384) >> 15;
  v56 = (__CFADD__(v55, -2147483648) + v55 + -2147483648 + -2147483648) >> 1;
  v57 = v54 + v56;
  v58 = v54 - v56;
  v59 = (-25080 * v52 + 60548 * v53 + 32768) >> 16;
  v60 = (60547 * v52 + 25080 * v53 + 32768) >> 16;
  v61 = ((v57 + v59 + 8) >> 4) + 128;
  if ( v61 < 0 )
  {
    LOWORD(v61) = 0;
  }
  else
  {
    if ( v61 > 255 )
      LOWORD(v61) = 255;
  }
  *(_WORD *)(a1 + 48) = v61;
  v62 = ((v58 + v60 + 8) >> 4) + 128;
  if ( v62 < 0 )
  {
    LOWORD(v62) = 0;
  }
  else
  {
    if ( v62 > 255 )
      LOWORD(v62) = 255;
  }
  *(_WORD *)(a1 + 50) = v62;
  v63 = ((v58 - v60 + 8) >> 4) + 128;
  if ( v63 < 0 )
  {
    LOWORD(v63) = 0;
  }
  else
  {
    if ( v63 > 255 )
      LOWORD(v63) = 255;
  }
  *(_WORD *)(a1 + 52) = v63;
  v64 = ((v57 - v59 + 8) >> 4) + 128;
  if ( v64 < 0 )
  {
    LOWORD(v64) = 0;
  }
  else
  {
    if ( v64 > 255 )
      LOWORD(v64) = 255;
  }
  *(_WORD *)(a1 + 54) = v64;
  return result;
}

//----- (00767720) --------------------------------------------------------
int __cdecl iDCT2x2_AAN_PX(int a1)
{
  int v1; // ebp@1
  int v2; // ecx@1
  __int16 v3; // ax@1
  int v4; // ecx@1
  int v5; // edx@1
  int v6; // ebx@1
  int v7; // eax@1
  __int16 v8; // si@1
  int v9; // ebx@1
  int v10; // edi@1
  int v11; // ebx@1
  int v12; // ecx@1
  __int16 v13; // si@1
  int v14; // ST14_4@1
  int v15; // ebx@1
  int v16; // edi@1
  int v17; // esi@1
  int v18; // ebx@1
  int v19; // esi@1
  int v20; // ebx@1
  int v21; // ebx@1
  int v22; // esi@1
  int v23; // ecx@4
  int v24; // edx@7
  int v25; // ecx@7
  int result; // eax@10
  int v27; // [sp+4h] [bp-28h]@1
  int v28; // [sp+8h] [bp-24h]@1
  int v29; // [sp+Ch] [bp-20h]@1
  int v30; // [sp+10h] [bp-1Ch]@1
  int v31; // [sp+18h] [bp-14h]@1

  v1 = a1;
  v2 = (85627 * (*(_WORD *)(a1 + 16) - (signed int)*(_WORD *)(a1 + 112))
      + 35468 * (*(_WORD *)(a1 + 80) - (signed int)*(_WORD *)(a1 + 48))
      + 65536) >> 17;
  v29 = (signed __int16)(*(_WORD *)a1 + v2);
  v30 = (signed __int16)(*(_WORD *)a1 - v2);
  v3 = *(_WORD *)(a1 + 2);
  v4 = (85627 * (*(_WORD *)(a1 + 18) - (signed int)*(_WORD *)(a1 + 114))
      + 35468 * (*(_WORD *)(a1 + 82) - (signed int)*(_WORD *)(a1 + 50))
      + 65536) >> 17;
  v5 = (signed __int16)(v3 + v4);
  *(_WORD *)(a1 + 2) = v5;
  v28 = (signed __int16)(v3 - v4);
  LOWORD(v4) = *(_WORD *)(a1 + 6);
  v6 = (85627 * (*(_WORD *)(v1 + 22) - (signed int)*(_WORD *)(v1 + 118))
      + 35468 * (*(_WORD *)(v1 + 86) - (signed int)*(_WORD *)(v1 + 54))
      + 65536) >> 17;
  v7 = (signed __int16)(v4 + (_WORD)v6);
  *(_WORD *)(a1 + 6) = v7;
  v8 = *(_WORD *)(a1 + 10);
  v27 = (signed __int16)(v4 - (_WORD)v6);
  v9 = *(_WORD *)(a1 + 26);
  v10 = *(_WORD *)(a1 + 58);
  *(_WORD *)(a1 + 22) = v27;
  v11 = (85627 * (v9 - *(_WORD *)(v1 + 122)) + 35468 * (*(_WORD *)(v1 + 90) - v10) + 65536) >> 17;
  v12 = (signed __int16)(v8 + v11);
  v13 = v8 - v11;
  v14 = v12;
  v15 = *(_WORD *)(a1 + 126);
  v16 = *(_WORD *)(a1 + 94);
  *(_WORD *)(a1 + 10) = v12;
  v31 = v13;
  v17 = *(_WORD *)(a1 + 30) - v15;
  v18 = *(_WORD *)(a1 + 62);
  *(_WORD *)(a1 + 26) = v31;
  LOWORD(v12) = *(_WORD *)(a1 + 14);
  v19 = (85627 * v17 + 35468 * (v16 - v18) + 65536) >> 17;
  v20 = (signed __int16)(v12 + (_WORD)v19);
  *(_WORD *)(a1 + 14) = v20;
  *(_WORD *)(a1 + 30) = v12 - v19;
  v21 = (85627 * (v5 - v20) + 35468 * (v14 - v7) + 65536) >> 17;
  v22 = ((v29 + v21 + 8) >> 4) + 128;
  if ( v22 < 0 )
  {
    LOWORD(v22) = 0;
  }
  else
  {
    if ( v22 > 255 )
      LOWORD(v22) = 255;
  }
  *(_WORD *)a1 = v22;
  v23 = ((v29 - v21 + 8) >> 4) + 128;
  if ( v23 < 0 )
  {
    LOWORD(v23) = 0;
  }
  else
  {
    if ( v23 > 255 )
      LOWORD(v23) = 255;
  }
  *(_WORD *)(a1 + 2) = v23;
  v24 = (85627 * (v28 - *(_WORD *)(a1 + 30)) + 35468 * (v31 - v27) + 65536) >> 17;
  v25 = ((v30 + v24 + 8) >> 4) + 128;
  if ( v25 < 0 )
  {
    LOWORD(v25) = 0;
  }
  else
  {
    if ( v25 > 255 )
      LOWORD(v25) = 255;
  }
  *(_WORD *)(a1 + 16) = v25;
  result = ((v30 - v24 + 8) >> 4) + 128;
  if ( result < 0 )
  {
    result = 0;
  }
  else
  {
    if ( result > 255 )
      result = 255;
  }
  *(_WORD *)(a1 + 18) = result;
  return result;
}

//----- (00767980) --------------------------------------------------------
int __cdecl iDCT1x1_AAN_PX(int a1)
{
  int result; // eax@1
  int v2; // edx@1

  result = a1;
  v2 = ((*(_WORD *)a1 + 8) >> 4) + 128;
  if ( v2 < 0 )
  {
    LOWORD(v2) = 0;
  }
  else
  {
    if ( v2 > 255 )
      LOWORD(v2) = 255;
  }
  *(_WORD *)a1 = v2;
  return result;
}

//----- (007679B0) --------------------------------------------------------
signed int __cdecl FillEncoderQuantTable_IPP(int a1)
{
  signed int v1; // ecx@1
  signed int v2; // esi@2
  __int16 v3; // ax@2
  signed int v4; // esi@2
  __int16 v5; // ax@2
  signed int v6; // esi@2
  signed int result; // eax@3
  __int16 v8; // [sp+0h] [bp-8Ch]@2
  __int16 v9; // [sp+2h] [bp-8Ah]@2
  __int16 v10; // [sp+4h] [bp-88h]@2
  __int16 v11[67]; // [sp+6h] [bp-86h]@2

  v1 = 0;
  do
  {
    v2 = *(_WORD *)(a1 + 2 * v1 + 2);
    *(&v8 + v1) = 32768 / *(_WORD *)(a1 + 2 * v1);
    v3 = 32768 / v2;
    v4 = *(_WORD *)(a1 + 2 * v1 + 4);
    *(&v9 + v1) = v3;
    v5 = 32768 / v4;
    v6 = *(_WORD *)(a1 + 2 * v1 + 6);
    *(&v10 + v1) = v5;
    v11[v1] = 32768 / v6;
    v1 += 4;
  }
  while ( v1 < 64 );
  result = 0;
  do
  {
    *(_WORD *)(a1 + 2 * izigzag_index[result]) = *(&v8 + result);
    *(_WORD *)(a1 + 2 * dword_B72EE4[result]) = *(&v9 + result);
    *(_WORD *)(a1 + 2 * dword_B72EE8[result]) = *(&v10 + result);
    *(_WORD *)(a1 + 2 * dword_B72EEC[result]) = v11[result];
    result += 4;
  }
  while ( result < 64 );
  return result;
}
// B72EE0: using guessed type int izigzag_index[];
// B72EE4: using guessed type int dword_B72EE4[];
// B72EE8: using guessed type int dword_B72EE8[];
// B72EEC: using guessed type int dword_B72EEC[];
// 7679B0: using guessed type __int16 var_86[67];

//----- (00767A70) --------------------------------------------------------
signed int __cdecl fQnt8x8_IPP_PX(int a1, int a2)
{
  signed int result; // eax@1
  int v3; // ebx@2
  int v4; // esi@2
  int v5; // ebx@2
  int v6; // esi@2
  int v7; // ebx@2

  result = 0;
  do
  {
    v3 = *(_WORD *)(a1 + 2 * result + 2);
    *(_WORD *)(a1 + 2 * result) = (*(_WORD *)(a1 + 2 * result) * *(_WORD *)(a2 + 2 * result) + 16384) >> 15;
    v4 = (v3 * *(_WORD *)(a2 + 2 * result + 2) + 16384) >> 15;
    v5 = *(_WORD *)(a1 + 2 * result + 4);
    *(_WORD *)(a1 + 2 * result + 2) = v4;
    v6 = (v5 * *(_WORD *)(a2 + 2 * result + 4) + 16384) >> 15;
    v7 = *(_WORD *)(a1 + 2 * result + 6);
    *(_WORD *)(a1 + 2 * result + 4) = v6;
    *(_WORD *)(a1 + 2 * result + 6) = (v7 * *(_WORD *)(a2 + 2 * result + 6) + 16384) >> 15;
    result += 4;
  }
  while ( result < 64 );
  return result;
}

//----- (00767B00) --------------------------------------------------------
void __usercall fQnt8x8_IPP_M5(__m64 a1<mm6>, int a2, int a3)
{
  own_fqnt8x8_ipp_m5(a1, a2, a3);
}

//----- (00767B20) --------------------------------------------------------
void __usercall fQnt8x8_IPP_A6(__m64 a1<mm6>, int a2, int a3)
{
  own_fqnt8x8_ipp_a6(a1, a2, a3);
}

//----- (00767B40) --------------------------------------------------------
void __usercall fQnt8x8_IPP_W7(__m128i a1<xmm6>, int a2, int a3)
{
  own_fqnt8x8_ipp_w7(a1, a2, a3);
}

//----- (00767B60) --------------------------------------------------------
int __cdecl fDCT8x8_IPP_PX(int a1)
{
  int v1; // edx@1
  int v2; // ST10_4@2
  int v3; // ebp@2
  int v4; // ST14_4@2
  int v5; // esi@2
  int v6; // ebx@2
  int v7; // edi@2
  int v8; // ST1C_4@2
  int v9; // eax@2
  int v10; // ST20_4@2
  int v11; // ecx@2
  int v12; // eax@2
  int v13; // ST24_4@2
  int v14; // ST28_4@2
  int v15; // ebp@2
  int v16; // esi@2
  int v17; // edi@2
  int v18; // ebp@2
  int v19; // eax@2
  int v20; // ebx@2
  int v21; // ecx@2
  int v22; // esi@2
  int v23; // ecx@2
  int v24; // ebp@2
  int v25; // ebx@2
  int result; // eax@3
  int v27; // ST28_4@4
  int v28; // ebp@4
  int v29; // esi@4
  int v30; // ST24_4@4
  int v31; // ebx@4
  int v32; // ecx@4
  int v33; // ST1C_4@4
  int v34; // edi@4
  int v35; // ST18_4@4
  int v36; // edx@4
  int v37; // ebx@4
  int v38; // ST10_4@4
  int v39; // ebp@4
  int v40; // edi@4
  int v41; // esi@4
  int v42; // edx@4
  int v43; // esi@4
  int v44; // ecx@4
  int v45; // edi@4
  signed int v46; // [sp+4h] [bp-38h]@1
  signed int v47; // [sp+4h] [bp-38h]@3

  v1 = a1;
  v46 = 7;
  do
  {
    v2 = *(_WORD *)v1;
    v3 = *(_WORD *)(v1 + 2);
    v4 = *(_WORD *)(v1 + 14);
    v5 = *(_WORD *)(v1 + 12);
    v6 = *(_WORD *)(v1 + 10);
    v7 = *(_WORD *)(v1 + 8);
    v8 = v3 + v5;
    v9 = *(_WORD *)(v1 + 4);
    v10 = v9 + v6;
    v11 = *(_WORD *)(v1 + 6);
    v12 = v9 - v6;
    v13 = v11 - v7;
    v14 = v3 - v5;
    v15 = v2 + v4 - (v11 + v7);
    *(_WORD *)v1 = 8 * (v2 + (_WORD)v4 + v11 + (_WORD)v7 + v8 + (_WORD)v10);
    *(_WORD *)(v1 + 8) = 8 * (v2 + (_WORD)v4 + v11 + (_WORD)v7 - (v8 + (_WORD)v10));
    *(_WORD *)(v1 + 4) = (42813 * v15 + 17734 * (v8 - v10) + 2048) >> 12;
    v16 = v12 + v14;
    *(_WORD *)(v1 + 12) = (17734 * v15 + -42813 * (v8 - v10) + 2048) >> 12;
    v17 = 8 * v16;
    v18 = v14 - v12;
    v19 = 8 * v18;
    v20 = (46341 * v13 + 2048) >> 12;
    v21 = (46341 * (v2 - v4) + 2048) >> 12;
    v22 = v21 + 8 * v16;
    v23 = v21 - v17;
    v24 = v20 + 8 * v18;
    v25 = v20 - v19;
    *(_WORD *)(v1 + 2) = (4017 * v22 + 799 * v24 + 2048) >> 12;
    *(_WORD *)(v1 + 14) = (799 * v22 + -4017 * v24 + 2048) >> 12;
    *(_WORD *)(v1 + 10) = (2276 * v23 + 3406 * v25 + 2048) >> 12;
    *(_WORD *)(v1 + 6) = (3406 * v23 + -2276 * v25 + 2048) >> 12;
    v1 += 16;
    --v46;
  }
  while ( v46 >= 0 );
  result = a1;
  v47 = 7;
  do
  {
    v27 = *(_WORD *)result;
    v28 = *(_WORD *)(result + 16);
    v29 = *(_WORD *)(result + 96);
    v30 = *(_WORD *)(result + 112);
    v31 = *(_WORD *)(result + 32);
    v32 = *(_WORD *)(result + 80);
    v33 = v28 + v29;
    v34 = *(_WORD *)(result + 64);
    v35 = v31 + v32;
    v36 = *(_WORD *)(result + 48);
    v37 = v31 - v32;
    v38 = v28 - v29;
    v39 = v27 + v30 - (v36 + v34);
    *(_WORD *)result = (v27 + v30 + v36 + v34 + v33 + v35 + 32) >> 6;
    *(_WORD *)(result + 64) = (v27 + v30 + v36 + v34 - (v33 + v35) + 32) >> 6;
    *(_WORD *)(result + 32) = (42813 * v39 + 17734 * (v33 - v35) + 1048576) >> 21;
    *(_WORD *)(result + 96) = (17734 * v39 + -42813 * (v33 - v35) + 1048576) >> 21;
    v40 = (46341 * (v36 - v34) + 2048) >> 12;
    v41 = (46341 * (v27 - v30) + 2048) >> 12;
    v42 = v41 + 8 * (v37 + v38);
    v43 = v41 - 8 * (v37 + v38);
    v44 = v40 + 8 * (v38 - v37);
    v45 = v40 - 8 * (v38 - v37);
    *(_WORD *)(result + 16) = (4017 * v42 + 799 * v44 + 1048576) >> 21;
    *(_WORD *)(result + 112) = (799 * v42 + -4017 * v44 + 1048576) >> 21;
    *(_WORD *)(result + 80) = (2276 * v43 + 3406 * v45 + 1048576) >> 21;
    *(_WORD *)(result + 48) = (3406 * v43 + -2276 * v45 + 1048576) >> 21;
    result += 2;
    --v47;
  }
  while ( v47 >= 0 );
  return result;
}

//----- (00767EB0) --------------------------------------------------------
void __cdecl fDCT8x8_IPP_M5(int a1)
{
  own_dct_2d_16s_8x8_frv_m5(a1);
}

//----- (00767ED0) --------------------------------------------------------
void __cdecl fDCT8x8_IPP_A6(int a1)
{
  own_dct_2d_16s_8x8_frv_a6(a1);
}

//----- (00767EF0) --------------------------------------------------------
void **__cdecl fDCT8x8_IPP_W7(int a1)
{
  return own_dct_2d_16s_8x8_frv_w7(a1);
}

//----- (00767F10) --------------------------------------------------------
signed int __cdecl sub_767F10(int a1)
{
  signed int v1; // ebp@1
  int v3; // [sp+10h] [bp-Ch]@1

  v1 = 0;
  if ( ownWriteFile(*(HANDLE *)(a1 + 60), (LPCVOID)(a1 + 64), *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20), (LPDWORD)&v3)
    && v3 == 4096 )
    *(_DWORD *)(a1 + 16) = *(_DWORD *)(a1 + 20);
  else
    v1 = -23;
  return v1;
}

//----- (00767F70) --------------------------------------------------------
signed int __cdecl sub_767F70(int a1, signed int a2, signed int a3)
{
  signed int v3; // ecx@1
  signed int v4; // edx@1
  int v5; // ebx@2
  signed int v6; // edi@2
  int v7; // ebx@4
  unsigned int v8; // edx@4
  unsigned int v9; // edx@7
  int v11; // ebp@11
  int v12; // edx@13
  int v13; // eax@13
  int v14; // [sp+4h] [bp-18h]@1

  v3 = a3;
  v14 = 0;
  v4 = *(_DWORD *)(a1 + 12);
  if ( a3 <= v4 )
  {
    v5 = *(_DWORD *)a1;
    v11 = *(_DWORD *)(a1 + 4);
  }
  else
  {
    v5 = *(_DWORD *)a1;
    v6 = a3;
    while ( 1 )
    {
      ++*(_DWORD *)(a1 + 28);
      v6 -= v4;
      v7 = ((1 << v4) - 1) & (a2 >> v6) | v5;
      v8 = *(_DWORD *)(a1 + 16);
      if ( v8 >= *(_DWORD *)(a1 + 24) )
        return -28;
      *(_DWORD *)(a1 + 16) = v8 + 1;
      *(_BYTE *)v8 = v7;
      if ( v7 == 255 )
      {
        v9 = *(_DWORD *)(a1 + 16);
        if ( v9 >= *(_DWORD *)(a1 + 24) )
          return -28;
        *(_DWORD *)(a1 + 16) = v9 + 1;
        *(_BYTE *)v9 = 0;
        ++*(_DWORD *)(a1 + 28);
      }
      v5 = 0;
      v11 = 0;
      v4 = 8;
      if ( v6 <= 8 )
        break;
      *(_DWORD *)(a1 + 12) = 8;
      *(_DWORD *)a1 = 0;
      *(_DWORD *)(a1 + 4) = 0;
    }
    v3 = v6;
  }
  v12 = v4 - v3;
  *(_DWORD *)(a1 + 12) = v12;
  v13 = (((1 << v3) - 1) & a2) << v12;
  *(_DWORD *)a1 = v13 | v5;
  *(_DWORD *)(a1 + 4) = ((unsigned __int64)v13 >> 32) | v11;
  return v14;
}

//----- (00768050) --------------------------------------------------------
signed int __cdecl sub_768050(int a1, signed int a2, signed int a3)
{
  signed int v3; // eax@1
  signed int v4; // ecx@1
  signed int v5; // edi@1
  signed int v6; // edx@1
  signed int v7; // ebp@2
  signed int v8; // esi@2
  unsigned int v9; // edi@4
  signed int v10; // eax@5
  int v11; // edx@7
  int v12; // ebp@9
  int v13; // esi@9
  int v14; // edx@10
  int v15; // eax@10
  unsigned int v17; // edx@12
  signed int v18; // eax@13

  v3 = a2;
  v4 = a3;
  v5 = 0;
  v6 = *(_DWORD *)(a1 + 12);
  if ( a3 > v6 )
  {
    v7 = a3;
    v8 = 0;
    while ( 1 )
    {
      v9 = *(_DWORD *)(a1 + 16);
      if ( v9 >= *(_DWORD *)(a1 + 24) )
      {
        v10 = sub_767F10(a1);
        v8 = v10;
        if ( v10 )
          return v10;
        v6 = *(_DWORD *)(a1 + 12);
        v9 = *(_DWORD *)(a1 + 16);
      }
      v7 -= v6;
      v11 = (unsigned __int8)(*(_BYTE *)a1 | ((1 << v6) - 1) & (a2 >> v7));
      *(_DWORD *)(a1 + 16) = v9 + 1;
      *(_BYTE *)v9 = v11;
      ++*(_DWORD *)(a1 + 28);
      if ( v11 == 255 )
      {
        v17 = *(_DWORD *)(a1 + 16);
        if ( v17 >= *(_DWORD *)(a1 + 24) )
        {
          v18 = sub_767F10(a1);
          v8 = v18;
          if ( v18 )
            return v18;
          v17 = *(_DWORD *)(a1 + 16);
        }
        *(_DWORD *)(a1 + 16) = v17 + 1;
        *(_BYTE *)v17 = 0;
        ++*(_DWORD *)(a1 + 28);
      }
      v6 = 8;
      if ( v7 <= 8 )
      {
        v4 = v7;
        v5 = v8;
        v3 = a2;
        v12 = 0;
        v13 = 0;
        goto LABEL_10;
      }
      *(_DWORD *)(a1 + 12) = 8;
      *(_DWORD *)a1 = 0;
      *(_DWORD *)(a1 + 4) = 0;
    }
  }
  v12 = *(_DWORD *)a1;
  v13 = *(_DWORD *)(a1 + 4);
LABEL_10:
  v14 = v6 - v4;
  *(_DWORD *)(a1 + 12) = v14;
  v15 = (((1 << v4) - 1) & v3) << v14;
  *(_DWORD *)a1 = v15 | v12;
  *(_DWORD *)(a1 + 4) = ((unsigned __int64)v15 >> 32) | v13;
  return v5;
}

//----- (00768160) --------------------------------------------------------
int __cdecl Make_optimal_huff_table(void *a1, void *a2, unsigned __int8 *a3)
{
  signed int v3; // eax@1
  int v4; // ebx@4
  int v5; // eax@4
  signed int v6; // edx@4
  int v7; // ecx@5
  int v8; // ecx@8
  int v9; // ecx@11
  int v10; // esi@15
  int v11; // ecx@18
  int v12; // ecx@21
  signed int v13; // edx@21
  signed int v14; // eax@21
  signed int v15; // esi@22
  signed int v16; // esi@26
  signed int v17; // esi@31
  int v18; // edx@36
  int v19; // eax@36
  int v20; // ebx@38
  int v21; // eax@40
  signed int v22; // ecx@42
  int v23; // edx@43
  int v24; // edx@45
  int v25; // edx@47
  signed int v26; // edx@50
  int v27; // ecx@50
  int v28; // edx@52
  signed int v29; // ecx@54
  signed int i; // eax@54
  char v31; // dl@55
  signed int v32; // ebp@56
  char *v34; // edx@60
  char v35; // al@60
  signed int v36; // edi@62
  int result; // eax@62
  signed int v38; // edx@63
  unsigned __int8 v39; // cl@63
  int v40; // [sp+10h] [bp-C5Ch]@1
  int v41; // [sp+14h] [bp-C58h]@8
  int v42[254]; // [sp+18h] [bp-C54h]@11
  int v43; // [sp+410h] [bp-85Ch]@3
  int v44; // [sp+420h] [bp-84Ch]@1
  int v45; // [sp+424h] [bp-848h]@45
  int v46[258]; // [sp+428h] [bp-844h]@47
  int v47; // [sp+830h] [bp-43Ch]@2
  int v48; // [sp+834h] [bp-438h]@2
  int v49; // [sp+838h] [bp-434h]@2
  int v50; // [sp+83Ch] [bp-430h]@2
  int v51; // [sp+840h] [bp-42Ch]@2
  int v52[251]; // [sp+844h] [bp-428h]@2
  char v53; // [sp+C33h] [bp-39h]@57
  char v54; // [sp+C34h] [bp-38h]@1
  char v55[55]; // [sp+C35h] [bp-37h]@58
  char v56; // [sp+C43h] [bp-29h]@60

  __g_memcpy(&v40, a1, 0x404u);
  __g_memzero(&v44, 0x404u);
  __g_memzero(&v54, 0x21u);
  v3 = 0;
  do
  {
    *(&v47 + v3) = -1;
    *(&v48 + v3) = -1;
    *(&v49 + v3) = -1;
    *(&v50 + v3) = -1;
    *(&v51 + v3) = -1;
    v52[v3] = -1;
    v3 += 6;
  }
  while ( v3 < 251 );
  *(&v47 + v3) = -1;
  *(&v48 + v3) = -1;
  *(&v49 + v3) = -1;
  *(&v50 + v3) = -1;
  *(&v51 + v3) = -1;
  v43 = 1;
  while ( 1 )
  {
    v4 = -1;
    v5 = 1000000000;
    v6 = 0;
    do
    {
      v7 = *(&v40 + v6);
      if ( v7 && v7 <= v5 )
      {
        v5 = *(&v40 + v6);
        v4 = v6;
      }
      v8 = *(&v41 + v6);
      if ( v8 && v8 <= v5 )
      {
        v5 = *(&v41 + v6);
        v4 = v6 + 1;
      }
      v9 = v42[v6];
      if ( v9 && v9 <= v5 )
      {
        v5 = v42[v6];
        v4 = v6 + 2;
      }
      v6 += 3;
    }
    while ( v6 <= 253 );
    v10 = *(&v40 + v6);
    if ( v10 && v10 <= v5 )
    {
      v5 = *(&v40 + v6);
      v4 = v6;
    }
    v11 = *(&v41 + v6);
    if ( v11 && v11 <= v5 )
      v4 = v6 + 1;
    v12 = -1;
    v13 = 1000000000;
    v14 = 0;
    do
    {
      v15 = *(&v40 + v14);
      if ( v15 && v15 <= v13 && v14 != v4 )
      {
        v13 = *(&v40 + v14);
        v12 = v14;
      }
      v16 = *(&v41 + v14);
      if ( v16 && v16 <= v13 && v14 + 1 != v4 )
      {
        v13 = *(&v41 + v14);
        v12 = v14 + 1;
      }
      v14 += 2;
    }
    while ( v14 <= 254 );
    v17 = *(&v40 + v14);
    if ( v17 && v17 <= v13 && v14 != v4 )
      v12 = v14;
    if ( v12 == -1 )
      break;
    v18 = 4 * v4;
    v19 = 4 * v12;
    *(&v40 + v4) += *(&v40 + v12);
    *(&v40 + v12) = 0;
    while ( 1 )
    {
      ++*(int *)((char *)&v44 + v18);
      v20 = *(int *)((char *)&v47 + v18);
      if ( v20 == -1 )
        break;
      v18 = 4 * v20;
    }
    *(int *)((char *)&v47 + v18) = v12;
    while ( 1 )
    {
      ++*(int *)((char *)&v44 + v19);
      v21 = *(int *)((char *)&v47 + v19);
      if ( v21 == -1 )
        break;
      v19 = 4 * v21;
    }
  }
  v22 = 0;
  do
  {
    v23 = *(&v44 + v22);
    if ( v23 )
      ++*(&v54 + v23);
    v24 = *(&v45 + v22);
    if ( v24 )
      ++*(&v54 + v24);
    v25 = v46[v22];
    if ( v25 )
      ++*(&v54 + v25);
    v22 += 3;
  }
  while ( v22 <= 253 );
  v26 = v22;
  v27 = *(&v44 + v22);
  if ( v27 )
    ++*(&v54 + v27);
  v28 = *(int *)((char *)&v45 + 1 * v26);
  if ( v28 )
    ++*(&v54 + v28);
  v29 = 32;
  for ( i = 31; ; --i )
  {
    while ( 1 )
    {
      v31 = *(&v54 + v29);
      if ( !v31 )
        break;
      v32 = i;
      while ( !*(&v53 + v32--) )
        ;
      *(&v54 + v29) = v31 - 2;
      ++*(&v54 + i);
      v55[v32] += 2;
      --*(&v54 + v32);
    }
    v29 = i;
    if ( i == 15 )
      break;
  }
  v34 = &v56;
  v35 = v56;
  if ( !v56 )
  {
    do
    {
      --v29;
      v34 = &v54 + v29;
      v35 = *(&v54 + v29);
    }
    while ( !*(&v54 + v29) );
  }
  *v34 = v35 - 1;
  __g_memcpy(a2, &v54, 0x10u);
  v36 = 1;
  result = 0;
  do
  {
    v38 = 0;
    v39 = 1;
    do
    {
      if ( v36 == *(&v44 + v38) )
        a3[result++] = v38;
      if ( v36 == *(&v45 + v38) )
        a3[result++] = v39;
      v39 += 2;
      v38 += 2;
    }
    while ( v38 <= 255 );
    ++v36;
  }
  while ( v36 <= 32 );
  return result;
}
// B6C2E4: using guessed type void (__cdecl *__g_memzero)(void *, unsigned int);
// B6C2E8: using guessed type void (__cdecl *__g_memcpy)(void *, void *, unsigned int);
// 768160: using guessed type int var_428[251];
// 768160: using guessed type int var_C54[254];
// 768160: using guessed type int var_844[258];
// 768160: using guessed type char var_37[55];

//----- (00768540) --------------------------------------------------------
signed int __cdecl EncodeHuffman8x8_PX(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // ebx@1
  int v6; // ecx@2
  int v7; // edi@2
  signed int v8; // esi@4
  signed int result; // eax@6
  signed int v10; // edx@9
  signed int v11; // esi@9
  int v12; // ecx@10
  signed int v13; // ebp@10
  int v14; // esi@13
  signed int v15; // ebx@13
  int v16; // ecx@35
  int v17; // edi@35
  signed int v18; // esi@37
  signed int v19; // edx@41
  signed int v20; // esi@41
  signed int v21; // ebp@42
  int v22; // esi@45
  signed int v23; // ebx@45
  signed int v24; // [sp+14h] [bp-18h]@19
  signed int v25; // [sp+14h] [bp-18h]@51
  signed int v26; // [sp+18h] [bp-14h]@13
  signed int v27; // [sp+18h] [bp-14h]@45

  v5 = a1;
  if ( *(_DWORD *)(a1 + 60) )
  {
    v6 = *(_WORD *)a5;
    v7 = v6 - *(_WORD *)a4;
    *(_WORD *)a4 = v6;
    if ( v7 < 0 )
    {
      if ( v7 <= -256 )
        v8 = byte_B73560[-v7 >> 8] + 8;
      else
        v8 = byte_B73560[-v7];
      --v7;
    }
    else
    {
      if ( v7 >= 256 )
        v8 = byte_B73560[v7 >> 8] + 8;
      else
        v8 = byte_B73560[v7];
    }
    result = sub_768050(a1, *(_WORD *)(a2 + 2 * v8 + 1032), *(_DWORD *)(a2 + 4 * v8 + 8));
    if ( result || (result = sub_768050(a1, v7, v8)) != 0 )
      return result;
    v10 = 0;
    v11 = 4;
    while ( 1 )
    {
      v12 = *(int *)((char *)izigzag_index + v11);
      v13 = *(_WORD *)(a5 + 2 * v12);
      v11 += 4;
      if ( *(_WORD *)(a5 + 2 * v12) )
      {
        if ( v10 > 15 )
        {
          v26 = v11;
          v14 = v5;
          v15 = v10;
          while ( 1 )
          {
            result = sub_768050(v14, *(_WORD *)(a3 + 1512), *(_DWORD *)(a3 + 968));
            if ( result )
              return result;
            v15 -= 16;
            if ( v15 <= 15 )
            {
              v10 = v15;
              v5 = v14;
              v11 = v26;
              break;
            }
          }
        }
        if ( v13 < 0 )
        {
          if ( v13 <= -256 )
            v24 = byte_B73560[-v13 >> 8] + 8;
          else
            v24 = byte_B73560[-v13];
          --v13;
        }
        else
        {
          if ( v13 >= 256 )
            v24 = byte_B73560[v13 >> 8] + 8;
          else
            v24 = byte_B73560[v13];
        }
        result = sub_768050(
                   v5,
                   *(_WORD *)(a3 + 2 * (v24 + 16 * v10) + 1032),
                   *(_DWORD *)(a3 + 4 * (v24 + 16 * v10) + 8));
        if ( result || (result = sub_768050(v5, v13, v24)) != 0 )
          return result;
        v10 = 0;
      }
      else
      {
        ++v10;
      }
      if ( v11 >= 256 )
      {
        if ( v10 > 0 )
          result = sub_768050(v5, *(_WORD *)(a3 + 1032), *(_DWORD *)(a3 + 8));
        return result;
      }
    }
  }
  v16 = *(_WORD *)a5;
  v17 = v16 - *(_WORD *)a4;
  *(_WORD *)a4 = v16;
  if ( v17 < 0 )
  {
    if ( v17 <= -256 )
      v18 = byte_B73560[-v17 >> 8] + 8;
    else
      v18 = byte_B73560[-v17];
    --v17;
  }
  else
  {
    if ( v17 >= 256 )
      v18 = byte_B73560[v17 >> 8] + 8;
    else
      v18 = byte_B73560[v17];
  }
  result = sub_767F70(a1, *(_WORD *)(a2 + 2 * v18 + 1032), *(_DWORD *)(a2 + 4 * v18 + 8));
  if ( result || (result = sub_767F70(a1, v17, v18)) != 0 )
    return result;
  v19 = 0;
  v20 = 4;
  while ( 1 )
  {
    v21 = *(_WORD *)(a5 + 2 * *(int *)((char *)izigzag_index + v20));
    v20 += 4;
    if ( v21 )
      break;
    ++v19;
LABEL_56:
    if ( v20 >= 256 )
    {
      if ( v19 > 0 )
        result = sub_767F70(v5, *(_WORD *)(a3 + 1032), *(_DWORD *)(a3 + 8));
      return result;
    }
  }
  if ( v19 > 15 )
  {
    v27 = v20;
    v22 = v5;
    v23 = v19;
    do
    {
      result = sub_767F70(v22, *(_WORD *)(a3 + 1512), *(_DWORD *)(a3 + 968));
      if ( result )
        return result;
      v23 -= 16;
    }
    while ( v23 > 15 );
    v19 = v23;
    v5 = v22;
    v20 = v27;
  }
  if ( v21 < 0 )
  {
    if ( v21 <= -256 )
      v25 = byte_B73560[-v21 >> 8] + 8;
    else
      v25 = byte_B73560[-v21];
    --v21;
  }
  else
  {
    if ( v21 >= 256 )
      v25 = byte_B73560[v21 >> 8] + 8;
    else
      v25 = byte_B73560[v21];
  }
  result = sub_767F70(v5, *(_WORD *)(a3 + 2 * (v25 + 16 * v19) + 1032), *(_DWORD *)(a3 + 4 * (v25 + 16 * v19) + 8));
  if ( !result )
  {
    result = sub_767F70(v5, v21, v25);
    if ( !result )
    {
      v19 = 0;
      goto LABEL_56;
    }
  }
  return result;
}
// B72EE0: using guessed type int izigzag_index[];

//----- (00768970) --------------------------------------------------------
signed int __usercall EncodeHuffman8x8_M5<eax>(__m64 a1<mm1>, int a2, int a3, int a4, int a5, int a6)
{
  unsigned int v6; // esi@1
  int v7; // edx@1
  int v8; // ecx@1
  int v9; // ecx@3
  signed int result; // eax@3
  signed int v11; // ebp@4
  int v12; // esi@9
  int v13; // ecx@12
  int v14; // ecx@20
  signed int v15; // ebp@21
  int v16; // edi@26
  int v17; // ecx@29
  char v18; // [sp+2Fh] [bp-3E5h]@1
  int v19; // [sp+3F8h] [bp-1Ch]@1
  int v20; // [sp+3FCh] [bp-18h]@1
  unsigned int v21; // [sp+400h] [bp-14h]@8

  v6 = (unsigned int)&v18 & 0xFFFFFFE0;
  v19 = 0;
  v20 = 0;
  v7 = *(_WORD *)a6;
  v8 = v7 - *(_WORD *)a5;
  *(_WORD *)a6 = v8;
  *(_WORD *)a5 = v7;
  own_count_zeros_m5(v8, v7, a6, (unsigned int)&v18 & 0xFFFFFFE0, (int)&v19, (int)&v20);
  if ( *(_DWORD *)(a2 + 60) )
  {
    if ( *(_WORD *)a6 )
    {
      v9 = *(_WORD *)(((unsigned int)&v18 & 0xFFFFFFE0) + 0x200);
      result = EB_Write_Bits_File_M5(
                 a1,
                 (*(_WORD *)(a3 + 2 * v9 + 1032) << v9) + (onlynbits[v9] & *(_WORD *)v6),
                 v9 + *(_DWORD *)(a3 + 4 * v9 + 8),
                 a2);
      if ( result )
        return result;
      v11 = 1;
    }
    else
    {
      result = EB_Write_Bits_File_M5(a1, *(_WORD *)(a3 + 1032), *(_DWORD *)(a3 + 8), a2);
      if ( result )
        return result;
      --*(_DWORD *)(((unsigned int)&v18 & 0xFFFFFFE0) + 0x100);
      v11 = 0;
    }
    if ( !v20 )
      v19 = 63;
    if ( v11 >= v20 )
    {
LABEL_14:
      if ( v19 > 0 )
        result = EB_Write_Bits_File_M5(a1, *(_WORD *)(a4 + 1032), *(_DWORD *)(a4 + 8), a2);
    }
    else
    {
      v21 = (unsigned int)&v18 & 0xFFFFFFE0;
      while ( 1 )
      {
        v12 = 16 * *(_DWORD *)(v21 + 4 * v11 + 256);
        if ( v12 > 240 )
          break;
LABEL_12:
        v13 = *(_WORD *)(v21 + 2 * v11 + 512);
        result = EB_Write_Bits_File_M5(
                   a1,
                   (*(_WORD *)(a4 + 2 * (v13 + v12) + 1032) << v13) | onlynbits[v13] & *(_WORD *)(v21 + 2 * v11),
                   *(_DWORD *)(a4 + 4 * (v13 + v12) + 8) + v13,
                   a2);
        if ( result )
          return result;
        ++v11;
        if ( v11 >= v20 )
          goto LABEL_14;
      }
      while ( 1 )
      {
        result = EB_Write_Bits_File_M5(a1, *(_WORD *)(a4 + 1512), *(_DWORD *)(a4 + 968), a2);
        if ( result )
          break;
        v12 -= 256;
        if ( v12 <= 240 )
          goto LABEL_12;
      }
    }
  }
  else
  {
    if ( *(_WORD *)a6 )
    {
      v14 = *(_WORD *)(((unsigned int)&v18 & 0xFFFFFFE0) + 0x200);
      result = EB_Write_Bits_M5(
                 a1,
                 (*(_WORD *)(a3 + 2 * v14 + 1032) << v14) + (onlynbits[v14] & *(_WORD *)v6),
                 v14 + *(_DWORD *)(a3 + 4 * v14 + 8),
                 a2);
      if ( result )
        return result;
      v15 = 1;
    }
    else
    {
      result = EB_Write_Bits_M5(a1, *(_WORD *)(a3 + 1032), *(_DWORD *)(a3 + 8), a2);
      if ( result )
        return result;
      --*(_DWORD *)(((unsigned int)&v18 & 0xFFFFFFE0) + 0x100);
      v15 = 0;
    }
    if ( !v20 )
      v19 = 63;
    if ( v15 >= v20 )
    {
LABEL_31:
      if ( v19 > 0 )
        result = EB_Write_Bits_M5(a1, *(_WORD *)(a4 + 1032), *(_DWORD *)(a4 + 8), a2);
    }
    else
    {
      v21 = (unsigned int)&v18 & 0xFFFFFFE0;
      while ( 1 )
      {
        v16 = 16 * *(_DWORD *)(v21 + 4 * v15 + 256);
        if ( v16 > 240 )
          break;
LABEL_29:
        v17 = *(_WORD *)(v21 + 2 * v15 + 512);
        result = EB_Write_Bits_M5(
                   a1,
                   (*(_WORD *)(a4 + 2 * (v17 + v16) + 1032) << v17) | onlynbits[v17] & *(_WORD *)(v21 + 2 * v15),
                   *(_DWORD *)(a4 + 4 * (v17 + v16) + 8) + v17,
                   a2);
        if ( result )
          return result;
        ++v15;
        if ( v15 >= v20 )
          goto LABEL_31;
      }
      while ( 1 )
      {
        result = EB_Write_Bits_M5(a1, *(_WORD *)(a4 + 1512), *(_DWORD *)(a4 + 968), a2);
        if ( result )
          break;
        v16 -= 256;
        if ( v16 <= 240 )
          goto LABEL_29;
      }
    }
  }
  return result;
}
// B73020: using guessed type int onlynbits[];

//----- (00768CE0) --------------------------------------------------------
signed int __cdecl EncodeHuffman8x8_A6(__m64 *a1, int a2, unsigned int a3, int a4, int a5)
{
  return own_encode_block_a6(a1, a2, a3, a4, a5);
}

//----- (00768D20) --------------------------------------------------------
int __cdecl Gather_Prog_DC_SA(_DWORD *const a1, int a2, __int16 *a3, int a4, char a5)
{
  int result; // eax@1
  int v6; // edi@2
  int v7; // ecx@2

  result = a2;
  if ( !a4 )
  {
    v6 = *a3 >> a5;
    v7 = v6 - *(_DWORD *)a2;
    *(_DWORD *)a2 = (signed __int16)v6;
    result = sub_7690E0(v7);
    ++a1[result];
  }
  return result;
}

//----- (00768D60) --------------------------------------------------------
signed int __cdecl Encode_Prog_DC_SA(int a1, struct _HUFFMAN_TABLE *a2, _DWORD *a3, __int16 *a4, int a5, char a6)
{
  int v6; // edx@2
  int v7; // esi@2
  signed int v8; // ebp@4
  signed int v9; // edx@6
  signed int v10; // ecx@6
  signed int result; // eax@7
  int v12; // edx@13

  if ( a5 )
  {
    v12 = *a4 >> a6;
    if ( *(_DWORD *)(a1 + 60) )
      result = sub_768050(a1, v12, 1);
    else
      result = sub_767F70(a1, v12, 1);
  }
  else
  {
    v6 = *a4 >> a6;
    v7 = v6 - *a3;
    *a3 = (signed __int16)v6;
    if ( v7 < 0 )
    {
      if ( v7 <= -256 )
        v8 = byte_B73560[-v7 >> 8] + 8;
      else
        v8 = byte_B73560[-v7];
      --v7;
    }
    else
    {
      if ( v7 >= 256 )
        v8 = byte_B73560[v7 >> 8] + 8;
      else
        v8 = byte_B73560[v7];
    }
    v9 = a2->huffval[v8];
    v10 = a2->huffelem[v8];
    if ( *(_DWORD *)(a1 + 60) )
      result = sub_768050(a1, v9, v10);
    else
      result = sub_767F70(a1, v9, v10);
    if ( !result )
    {
      if ( *(_DWORD *)(a1 + 60) )
        result = sub_768050(a1, v7, v8);
      else
        result = sub_767F70(a1, v7, v8);
    }
  }
  return result;
}

//----- (00768EA0) --------------------------------------------------------
int __cdecl Gather_EOBRUN(struct _STATE *a1, _DWORD *const a2)
{
  int result; // eax@1

  result = a1->Prog_EndOfBlock_Run;
  if ( result )
  {
    if ( result == 1 )
    {
      ++*a2;
    }
    else
    {
      if ( result > 32767 )
      {
        ++a2[224];
        result = a1->Prog_EndOfBlock_Run - 32767;
        a1->Prog_EndOfBlock_Run = result;
      }
      result = 16 * sub_769110(result);
      ++a2[result];
    }
    a1->Prog_EndOfBlock_Run = 0;
  }
  return result;
}

//----- (00768F00) --------------------------------------------------------
signed int __cdecl Encode_EOBRUN(int a1, struct _HUFFMAN_TABLE *a2)
{
  signed int result; // eax@1
  signed int v3; // edx@4
  signed int v4; // ecx@4
  int v5; // edx@8
  int v6; // esi@13
  signed int v7; // edx@13
  signed int v8; // ecx@13
  int v9; // ecx@17
  signed int v10; // edx@23
  signed int v11; // ecx@23

  result = *(_DWORD *)(a1 + 40);
  if ( !result )
    return result;
  if ( result == 1 )
  {
    v10 = a2->huffval[0];
    v11 = a2->huffelem[0];
    if ( *(_DWORD *)(a1 + 60) )
      result = sub_768050(a1, v10, v11);
    else
      result = sub_767F70(a1, v10, v11);
    if ( !result )
      goto LABEL_21;
  }
  else
  {
    if ( result > 32767 )
    {
      v3 = a2->huffval[224];
      v4 = a2->huffelem[224];
      if ( *(_DWORD *)(a1 + 60) )
        result = sub_768050(a1, v3, v4);
      else
        result = sub_767F70(a1, v3, v4);
      if ( result
        || ((v5 = *(_DWORD *)(a1 + 40), *(_DWORD *)(a1 + 60)) ? (result = sub_768050(a1, v5, 14)) : (result = sub_767F70(a1, v5, 14)),
            result) )
        return result;
      result = *(_DWORD *)(a1 + 40) - 32767;
      *(_DWORD *)(a1 + 40) = result;
    }
    v6 = sub_769110(result);
    v7 = a2->huffval[16 * v6];
    v8 = a2->huffelem[16 * v6];
    if ( *(_DWORD *)(a1 + 60) )
      result = sub_768050(a1, v7, v8);
    else
      result = sub_767F70(a1, v7, v8);
    if ( !result )
    {
      v9 = *(_DWORD *)(a1 + 40);
      result = *(_DWORD *)(a1 + 60) ? sub_768050(a1, v9, v6) : sub_767F70(a1, v9, v6);
      if ( !result )
      {
LABEL_21:
        *(_DWORD *)(a1 + 40) = 0;
        return result;
      }
    }
  }
  return result;
}

//----- (00769080) --------------------------------------------------------
signed int __cdecl Encode_ZRL(int a1, struct _HUFFMAN_TABLE *a2, _DWORD *a3)
{
  signed int v3; // eax@1
  signed int v4; // esi@1
  signed int result; // eax@2

  v3 = a2->huffval[240];
  v4 = a2->huffelem[240];
  if ( *(_DWORD *)(a1 + 60) )
    result = sub_768050(a1, v3, v4);
  else
    result = sub_767F70(a1, v3, v4);
  if ( !result )
    *a3 -= 16;
  return result;
}

//----- (007690E0) --------------------------------------------------------
int __cdecl sub_7690E0(__int16 a1)
{
  signed int v1; // eax@1
  int result; // eax@2

  v1 = abs(a1);
  if ( v1 >= 256 )
    result = byte_B73560[v1 >> 8] + 8;
  else
    result = byte_B73560[v1];
  return result;
}

//----- (00769110) --------------------------------------------------------
int __cdecl sub_769110(signed int a1)
{
  int result; // eax@2

  if ( a1 >= 256 )
    result = byte_B73660[a1 >> 8] + 8;
  else
    result = byte_B73660[a1];
  return result;
}

//----- (00769140) --------------------------------------------------------
signed int __cdecl Append_BE_bits(int a1, signed int *a2, signed int a3)
{
  signed int *v3; // ebx@1
  signed int result; // eax@1
  int v5; // ecx@7

  v3 = a2;
  result = a3;
  if ( *(_DWORD *)a3 && *(_DWORD *)a3 > 0 )
  {
    do
    {
      if ( *(_DWORD *)(a1 + 60) )
        result = sub_768050(a1, *(_BYTE *)v3, 1);
      else
        result = sub_767F70(a1, *(_BYTE *)v3, 1);
      if ( result )
        break;
      v3 = (signed int *)((char *)v3 + 1);
      v5 = *(_DWORD *)a3 - 1;
      *(_DWORD *)a3 = v5;
    }
    while ( v5 > 0 );
  }
  return result;
}

//----- (007691B0) --------------------------------------------------------
int __cdecl Gather_Prog_AC_first(struct _STATE *a1, int a2, int a3, int a4, char a5, _DWORD *const a6)
{
  int result; // eax@1
  signed int v7; // esi@1
  int v8; // ebx@2
  signed int v9; // edi@3
  int v10; // edi@6
  int v11; // eax@11
  signed int i; // edi@15

  result = a2;
  v7 = 0;
  if ( a3 <= a4 )
  {
    v8 = a3;
    do
    {
      result = izigzag_index[v8];
      v9 = *(_WORD *)(a2 + 2 * result);
      ++v8;
      if ( *(_WORD *)(a2 + 2 * result) )
      {
        if ( v9 < 0 )
          v10 = -v9 >> a5;
        else
          v10 = v9 >> a5;
        if ( v10 )
        {
          Gather_EOBRUN(a1, a6);
          if ( v7 > 15 )
          {
            if ( v7 - 15 < 96 )
            {
              v11 = a6[240];
            }
            else
            {
              v11 = a6[240];
              do
              {
                v11 += 5;
                v7 -= 80;
              }
              while ( v7 >= 111 );
            }
            do
            {
              ++v11;
              v7 -= 16;
            }
            while ( v7 > 15 );
            a6[240] = v11;
          }
          result = 1;
          for ( i = v10 >> 1; i; i >>= 1 )
            ++result;
          ++*(&a6[16 * v7] + result);
          v7 = 0;
        }
        else
        {
          ++v7;
        }
      }
      else
      {
        ++v7;
      }
    }
    while ( v8 <= a4 );
    if ( v7 > 0 )
    {
      result = a1->Prog_EndOfBlock_Run + 1;
      a1->Prog_EndOfBlock_Run = result;
      if ( result == 32767 )
        result = Gather_EOBRUN(a1, a6);
    }
  }
  return result;
}
// B72EE0: using guessed type int izigzag_index[];

//----- (007692F0) --------------------------------------------------------
int *__cdecl Gather_Prog_AC_refine(struct _STATE *a1, __int16 *a2, int a3, int a4, char a5, unsigned __int8 *a6, int *a7, _DWORD *const a8)
{
  int v8; // ecx@1
  int v9; // esi@1
  int v10; // eax@1
  signed int v11; // ebx@3
  int v12; // ebx@5
  signed int v13; // ebx@9
  int v14; // edx@9
  unsigned __int8 *v15; // eax@9
  int v16; // ebp@14
  int v17; // ecx@14
  int v18; // eax@17
  int v19; // ebx@28
  int *result; // eax@31
  int v21[64]; // [sp+8h] [bp-124h]@5
  int v22; // [sp+108h] [bp-24h]@2
  int v23; // [sp+10Ch] [bp-20h]@10
  int v24; // [sp+110h] [bp-1Ch]@11
  int v25; // [sp+114h] [bp-18h]@10

  v8 = *a7;
  v9 = 0;
  v10 = a3;
  if ( a3 <= a4 )
  {
    v22 = *a7;
    do
    {
      v11 = a2[izigzag_index[v10]];
      if ( v11 < 0 )
        v11 = -v11;
      v12 = v11 >> a5;
      v21[v10] = v12;
      if ( v12 == 1 )
        v9 = v10;
      ++v10;
    }
    while ( v10 <= a4 );
    v8 = v22;
  }
  v13 = 0;
  v14 = 0;
  v15 = &a6[v8];
  if ( a3 <= a4 )
  {
    v25 = a3;
    v23 = v9;
    v22 = v8;
    do
    {
      v24 = v21[v25];
      if ( v24 )
      {
        if ( v13 > 15 )
        {
          v16 = v23;
          v17 = v22;
          while ( v25 <= v16 )
          {
            Gather_EOBRUN(a1, a8);
            v17 = 0;
            if ( v13 - 15 < 96 )
            {
              v18 = a8[240];
            }
            else
            {
              v18 = a8[240];
              do
              {
                v18 += 5;
                v13 -= 80;
              }
              while ( v13 >= 111 );
            }
            do
            {
              ++v18;
              v13 -= 16;
            }
            while ( v13 > 15 );
            a8[240] = v18;
            v15 = a6;
            v14 = 0;
            if ( v13 <= 15 )
            {
              v22 = 0;
              goto LABEL_23;
            }
          }
          v22 = v17;
        }
LABEL_23:
        if ( v24 <= 1 )
        {
          Gather_EOBRUN(a1, a8);
          v22 = 0;
          v15 = a6;
          ++a8[16 * v13 + 1];
          v14 = 0;
          v13 = 0;
        }
        else
        {
          v15[v14++] = v24 & 1;
        }
      }
      else
      {
        ++v13;
      }
      ++v25;
    }
    while ( v25 <= a4 );
    v8 = v22;
    if ( v13 > 0 || v14 > 0 )
    {
      v19 = a1->Prog_EndOfBlock_Run + 1;
      a1->Prog_EndOfBlock_Run = v19;
      v8 += v14;
      if ( v19 == 32767 || v8 > dword_A84BE0 - 63 )
      {
        Gather_EOBRUN(a1, a8);
        v8 = 0;
      }
    }
  }
  result = a7;
  *a7 = v8;
  return result;
}
// A84BE0: using guessed type int dword_A84BE0;
// B72EE0: using guessed type int izigzag_index[];
// 7692F0: using guessed type int var_124[64];

//----- (00769560) --------------------------------------------------------
signed int __cdecl Encode_Prog_AC_first(int a1, struct _HUFFMAN_TABLE *a2, __int16 *a3, int a4, int a5, char a6)
{
  int v6; // ebx@1
  struct _HUFFMAN_TABLE *v7; // ecx@1
  __int16 *v8; // edi@1
  int v9; // ebp@1
  int v10; // esi@1
  signed int result; // eax@1
  int v12; // edx@1
  int v13; // edx@4
  signed int v14; // ebx@4
  int v15; // ebx@7
  int v16; // eax@10
  signed int v17; // edx@13
  signed int v18; // ebx@13
  int v19; // eax@16
  signed int v20; // edx@16
  signed int v21; // eax@16
  int i; // [sp+10h] [bp-1Ch]@2
  int v23; // [sp+14h] [bp-18h]@13
  int v24; // [sp+18h] [bp-14h]@7

  v6 = a1;
  v7 = a2;
  v8 = a3;
  v9 = a4;
  v10 = a5;
  result = 0;
  v12 = 0;
  if ( a4 <= a5 )
  {
    for ( i = 0; ; i = v12 )
    {
      v13 = izigzag_index[v9];
      v14 = v8[v13];
      if ( v8[v13] )
      {
        if ( v14 < 0 )
        {
          v15 = -v14 >> a6;
          v24 = ~v15;
        }
        else
        {
          v15 = v14 >> a6;
          v24 = v15;
        }
        if ( v15 )
        {
          Encode_EOBRUN(a1, a2);
          v16 = i;
          if ( i > 15 )
          {
            do
            {
              Encode_ZRL(a1, a2, &i);
              v16 = i;
            }
            while ( i > 15 );
            v10 = a5;
            v8 = a3;
          }
          v17 = 1;
          v18 = v15 >> 1;
          v23 = 1;
          if ( v18 )
          {
            do
            {
              ++v17;
              v18 >>= 1;
            }
            while ( v18 );
            v23 = v17;
          }
          v19 = v23 + 16 * v16;
          v20 = a2->huffval[v19];
          v21 = a2->huffelem[v19];
          if ( *(_DWORD *)(a1 + 60) )
            result = sub_768050(a1, v20, v21);
          else
            result = sub_767F70(a1, v20, v21);
          if ( result
            || (*(_DWORD *)(a1 + 60) ? (result = sub_768050(a1, v24, v23)) : (result = sub_767F70(a1, v24, v23)), result) )
            return result;
          result = 0;
          v12 = 0;
        }
        else
        {
          ++result;
          v12 = result;
        }
      }
      else
      {
        ++result;
        v12 = result;
      }
      ++v9;
      if ( v9 > v10 )
        break;
    }
    v7 = a2;
    v6 = a1;
  }
  if ( result > 0 )
  {
    result = *(_DWORD *)(v6 + 40) + 1;
    *(_DWORD *)(v6 + 40) = result;
    if ( result == 32767 )
    {
      i = v12;
      result = Encode_EOBRUN(v6, v7);
    }
  }
  return result;
}
// B72EE0: using guessed type int izigzag_index[];

//----- (00769760) --------------------------------------------------------
signed int __cdecl Encode_Prog_AC_refine(int a1, struct _HUFFMAN_TABLE *a2, __int16 *a3, int a4, int a5, char a6, signed int *a7, _DWORD *a8)
{
  int v8; // ebp@1
  int v9; // ebx@1
  _DWORD *v10; // esi@1
  int v11; // edi@1
  int v12; // eax@1
  int v13; // edi@2
  signed int v14; // esi@3
  int v15; // esi@5
  signed int v16; // ecx@9
  int v17; // edx@9
  signed int result; // eax@9
  signed int *v19; // esi@10
  int v20; // edi@10
  int v21; // eax@11
  signed int v22; // eax@20
  signed int v23; // edx@20
  signed int v24; // eax@25
  int v25; // eax@34
  int v26; // [sp+10h] [bp-134h]@1
  int v27[64]; // [sp+14h] [bp-130h]@5
  int v28; // [sp+114h] [bp-30h]@9
  int v29; // [sp+118h] [bp-2Ch]@13
  int v30; // [sp+11Ch] [bp-28h]@2
  int v31; // [sp+120h] [bp-24h]@15
  int v32; // [sp+124h] [bp-20h]@1
  int v33; // [sp+128h] [bp-1Ch]@9
  unsigned __int8 *v34; // [sp+12Ch] [bp-18h]@9

  v8 = a1;
  v9 = a4;
  v10 = a8;
  v11 = *a8;
  v26 = *a8;
  v32 = 0;
  v12 = a4;
  if ( a4 <= a5 )
  {
    v30 = v11;
    v13 = v32;
    do
    {
      v14 = a3[izigzag_index[v12]];
      if ( v14 < 0 )
        v14 = -v14;
      v15 = v14 >> a6;
      v27[v12] = v15;
      if ( v15 == 1 )
        v13 = v12;
      ++v12;
    }
    while ( v12 <= a5 );
    v32 = v13;
    v11 = v30;
    v10 = a8;
    v8 = a1;
  }
  v16 = 0;
  v17 = 0;
  v28 = 0;
  v33 = 0;
  v34 = (unsigned __int8 *)((char *)a7 + v11);
  result = a5;
  if ( a4 <= a5 )
  {
    v19 = (signed int *)v34;
    v20 = v33;
    while ( 1 )
    {
      v21 = v27[v9];
      if ( v21 )
      {
        v29 = v20;
        if ( v16 > 15 && v9 <= v32 )
        {
          v30 = v21;
          v31 = v9;
          do
          {
            Encode_EOBRUN(v8, a2);
            Append_BE_bits(v8, a7, (signed int)&v26);
            v26 = 0;
            Encode_ZRL(v8, a2, &v28);
            Append_BE_bits(v8, v19, (signed int)&v29);
            v19 = a7;
            v29 = 0;
          }
          while ( v28 > 15 );
          v21 = v30;
          v9 = v31;
          v17 = 0;
        }
        if ( v21 <= 1 )
        {
          Encode_EOBRUN(v8, a2);
          Append_BE_bits(v8, a7, (signed int)&v26);
          v26 = 0;
          v22 = a2->huffval[16 * v28 + 1];
          v23 = a2->huffelem[16 * v28 + 1];
          if ( *(_DWORD *)(v8 + 60) )
            result = sub_768050(v8, v22, v23);
          else
            result = sub_767F70(v8, v22, v23);
          if ( result )
          {
            v10 = a8;
            v11 = v26;
            goto LABEL_39;
          }
          v24 = a3[izigzag_index[v9]] >= 0;
          if ( *(_DWORD *)(v8 + 60) )
            result = sub_768050(v8, v24, 1);
          else
            result = sub_767F70(v8, v24, 1);
          if ( result )
          {
            v10 = a8;
            v11 = v26;
            goto LABEL_39;
          }
          Append_BE_bits(v8, v19, (signed int)&v29);
          v19 = a7;
          v17 = 0;
          v20 = 0;
          v16 = 0;
          v28 = 0;
        }
        else
        {
          *((_BYTE *)v19 + v17) = v21 & 1;
          v17 = v29 + 1;
          v20 = v29 + 1;
          v16 = v28;
        }
      }
      else
      {
        ++v16;
        v28 = v16;
      }
      ++v9;
      result = a5;
      if ( v9 > a5 )
      {
        v33 = v20;
        v10 = a8;
        v11 = v26;
        break;
      }
    }
  }
  if ( v16 > 0 || v17 > 0 )
  {
    v25 = *(_DWORD *)(v8 + 40) + 1;
    v11 += v17;
    *(_DWORD *)(v8 + 40) = v25;
    if ( v25 == 32767 )
    {
      v29 = v33;
      v26 = v11;
    }
    else
    {
      result = dword_A84BE0 - 63;
      if ( v11 <= dword_A84BE0 - 63 )
        goto LABEL_39;
      v29 = v33;
      v26 = v11;
    }
    Encode_EOBRUN(v8, a2);
    result = Append_BE_bits(v8, a7, (signed int)&v26);
    v11 = 0;
  }
LABEL_39:
  *v10 = v11;
  return result;
}
// A84BE0: using guessed type int dword_A84BE0;
// B72EE0: using guessed type int izigzag_index[];
// 769760: using guessed type int var_130[64];

//----- (00769B40) --------------------------------------------------------
int __cdecl GET_BITS(struct _STATE *a1, int a2)
{
  unsigned __int64 v2; // qax@1
  int v3; // ecx@1

  v2 = a1->bit_buffer_64;
  v3 = a1->bitbuf_bits_valid - a2;
  a1->bitbuf_bits_valid = v3;
  return ((1 << a2) - 1) & (v2 >> v3);
}

//----- (00769B70) --------------------------------------------------------
int __cdecl PEEK_BITS(struct _STATE *a1, char a2)
{
  return ((1 << a2) - 1) & (a1->bit_buffer_64 >> ((unsigned __int8)a1->bitbuf_bits_valid - a2));
}

//----- (00769BA0) --------------------------------------------------------
signed int __cdecl Fill_Bit_Buffer(struct _STATE *a1, int a2)
{
  int v2; // edx@2
  int v3; // edi@4
  char *v4; // eax@5
  char *v5; // edx@5
  int v6; // edi@5
  signed int v7; // eax@5
  int v8; // ecx@5
  int v9; // ecx@5
  int v10; // edi@6
  signed int result; // eax@7
  int v12; // eax@9
  int v13; // edx@12
  int v14; // eax@12

  if ( a1->bitbuf_bits_valid >= 25 )
  {
LABEL_7:
    result = 0;
  }
  else
  {
    v2 = a1->bitbuf_bits_valid;
    while ( 1 )
    {
      if ( a1->unread_marker )
      {
        v14 = v2;
        v13 = a2;
        goto LABEL_13;
      }
      v3 = a1->entropy_bytes_left;
      if ( v3 <= 0 )
      {
        if ( !a1->file )
          return 0;
        result = Buffer_Read_Bytes(a1);
        if ( result )
          return result;
        v3 = a1->entropy_bytes_left;
      }
      v4 = a1->cur_entropy_ptr;
      v5 = v4 + 1;
      v6 = v3 - 1;
      a1->cur_entropy_ptr = v4 + 1;
      v7 = (unsigned __int8)*v4;
      v8 = a1->entropy_bytes_processed;
      a1->entropy_bytes_left = v6;
      v9 = v8 + 1;
      a1->entropy_bytes_processed = v9;
      if ( v7 == 255 )
        break;
LABEL_6:
      v10 = a1->bit_buffer_64 >> 24;
      LODWORD(a1->bit_buffer_64) = v7 | (LODWORD(a1->bit_buffer_64) << 8);
      v2 = a1->bitbuf_bits_valid + 8;
      HIDWORD(a1->bit_buffer_64) = v10;
      a1->bitbuf_bits_valid = v2;
      if ( v2 >= 25 )
        goto LABEL_7;
    }
    do
    {
      if ( v6 <= 0 )
      {
        if ( !a1->file )
          return -21;
        result = Buffer_Read_Bytes(a1);
        if ( result )
          return result;
        v6 = a1->entropy_bytes_left;
        v5 = a1->cur_entropy_ptr;
        v9 = a1->entropy_bytes_processed;
      }
      v12 = (unsigned __int8)*v5++;
      --v6;
      a1->cur_entropy_ptr = v5;
      ++v9;
      a1->entropy_bytes_left = v6;
      a1->entropy_bytes_processed = v9;
    }
    while ( v12 == 255 );
    if ( !v12 )
    {
      v7 = 255;
      goto LABEL_6;
    }
    v13 = a2;
    a1->unread_marker = v12;
    v14 = a1->bitbuf_bits_valid;
LABEL_13:
    if ( v14 >= v13 )
      goto LABEL_7;
    result = 100;
  }
  return result;
}

//----- (00769CE0) --------------------------------------------------------
signed int __cdecl sub_769CE0(int a1, int a2, int a3, int a4)
{
  signed int v4; // ebp@1
  int v5; // ebx@2
  int v6; // edx@3
  int v7; // ebx@7
  signed int result; // eax@9

  v4 = a4;
  if ( a4 <= *(_DWORD *)(a1 + 12) || (result = Fill_Bit_Buffer((struct _STATE *)a1, a4)) == 0 )
  {
    v5 = GET_BITS((struct _STATE *)a1, a4);
    while ( 1 )
    {
      v6 = *(_WORD *)(a2 + 2 * v4 + 1578);
      if ( v6 & 0x8000 && v6 != -1 )
        v6 = (unsigned __int16)v6;
      if ( v5 <= v6 )
        break;
      v7 = 2 * v5;
      if ( *(_DWORD *)(a1 + 12) <= 0 )
      {
        result = Fill_Bit_Buffer((struct _STATE *)a1, 1);
        if ( result )
          return result;
      }
      v5 = GET_BITS((struct _STATE *)a1, 1) | v7;
      ++v4;
    }
    if ( v4 <= 16 )
      *(_DWORD *)a3 = *(_WORD *)(a2 + 2 * (v5 + *(_WORD *)(a2 + 2 * v4 + 1614) - *(_WORD *)(a2 + 2 * v4 + 1544)) + 1032);
    else
      *(_DWORD *)a3 = 0;
    result = 0;
  }
  return result;
}

//----- (00769DD0) --------------------------------------------------------
signed int __cdecl sub_769DD0(int a1, int a2, int a3)
{
  int v3; // eax@2
  int v4; // eax@4
  signed int result; // eax@5

  if ( *(_DWORD *)(a1 + 12) >= 8 )
    goto LABEL_2;
  result = Fill_Bit_Buffer((struct _STATE *)a1, 0);
  if ( !result )
  {
    if ( *(_DWORD *)(a1 + 12) < 8 )
    {
      v4 = 1;
      goto LABEL_5;
    }
LABEL_2:
    v3 = PEEK_BITS((struct _STATE *)a1, 8);
    if ( *(_WORD *)(a3 + 4 * v3 + 10) )
    {
      *(_DWORD *)(a1 + 12) -= *(_WORD *)(a3 + 4 * v3 + 10);
      *(_DWORD *)a2 = *(_WORD *)(a3 + 4 * v3 + 8);
      return 0;
    }
    v4 = 9;
LABEL_5:
    result = sub_769CE0(a1, a3, a2, v4);
    if ( result )
      return result;
    return 0;
  }
  return result;
}

//----- (00769E70) --------------------------------------------------------
signed int __cdecl DecodeHuffman8x8_PX(int a1, int a2, int a3, int a4, void *a5)
{
  int v5; // ebp@1
  signed int result; // eax@1
  int v7; // eax@5
  bool v8; // zf@5
  bool v9; // sf@5
  unsigned __int8 v10; // of@5
  int v11; // eax@6
  __int16 v12; // ax@8
  int v13; // ebx@10
  int v14; // edx@12
  int v15; // eax@12
  int v16; // edi@13
  int v17; // eax@14
  int v18; // [sp+10h] [bp-14h]@1

  __g_memzero(a5, 0x80u);
  v5 = (int)dword_B72EE4;
  result = sub_769DD0(a1, (int)&v18, a2);
  if ( result )
  {
    if ( result >= 0 )
      result = 0;
    return result;
  }
  if ( v18 )
  {
    v7 = v18 & 0xF;
    v10 = __OFSUB__(v18 & 0xF, *(_DWORD *)(a1 + 12));
    v8 = (v18 & 0xF) == *(_DWORD *)(a1 + 12);
    v9 = (v18 & 0xF) - *(_DWORD *)(a1 + 12) < 0;
    v18 &= 0xFu;
    if ( !((unsigned __int8)(v9 ^ v10) | v8) )
    {
      result = Fill_Bit_Buffer((struct _STATE *)a1, v7);
      if ( result )
      {
        if ( result >= 0 )
          result = 0;
        return result;
      }
      v7 = v18;
    }
    v11 = GET_BITS((struct _STATE *)a1, v7);
    if ( !(v11 & (1 << (v18 - 1))) )
      v11 += *(_DWORD *)&lowest_coef[2 * v18];
    v12 = *(_WORD *)a4 + v11;
    *(_WORD *)a4 = v12;
  }
  else
  {
    v12 = *(_WORD *)a4;
  }
  *(_WORD *)a5 = v12;
  v13 = 63;
  while ( 1 )
  {
    result = sub_769DD0(a1, (int)&v18, a3);
    if ( result )
      break;
    v14 = (v18 >> 4) & 0xF;
    v15 = v18 & 0xF;
    if ( v18 & 0xF )
    {
      v18 &= 0xFu;
      v13 = v13 - v14 - 1;
      v16 = v5 + 4 * v14;
      if ( v15 > *(_DWORD *)(a1 + 12) )
      {
        result = Fill_Bit_Buffer((struct _STATE *)a1, v15);
        if ( result )
        {
          if ( result >= 0 )
            result = 0;
          return result;
        }
        v15 = v18;
      }
      v17 = GET_BITS((struct _STATE *)a1, v15);
      if ( v17 & (1 << (v18 - 1)) )
      {
        v5 = v16 + 4;
        *((_WORD *)a5 + *(_DWORD *)v16) = v17;
      }
      else
      {
        v5 = v16 + 4;
        *((_WORD *)a5 + *(_DWORD *)v16) = v17 + lowest_coef[2 * v18];
      }
    }
    else
    {
      if ( v14 != 15 )
        return 0;
      v18 &= 0xFu;
      v13 -= 16;
      v5 += 64;
    }
    if ( v13 <= 0 )
      return 0;
  }
  if ( result >= 0 )
    result = 0;
  return result;
}
// B6C2E4: using guessed type void (__cdecl *__g_memzero)(void *, unsigned int);
// B72EE4: using guessed type int dword_B72EE4[];

//----- (0076A050) --------------------------------------------------------
int __cdecl DecodeHuffman8x8_M5(int a1, unsigned int a2, unsigned int a3, signed int a4, int a5)
{
  return own_decodehuffman8x8_m5(a3, a2, a1, a2, a3, a4, a5);
}

//----- (0076A090) --------------------------------------------------------
int __cdecl DecodeHuffman8x8_M6(int a1, unsigned int a2, unsigned int a3, signed int a4, int a5)
{
  return own_decodehuffman8x8_m6(a3, a2, a1, a2, a3, a4, a5);
}

//----- (0076A0D0) --------------------------------------------------------
int __cdecl Decode_Block_Skip_M5(int a1, int a2, int a3, signed int a4)
{
  return own_decode_block_skip_m5(a3, a2, a1, a2, a3, a4);
}

//----- (0076A110) --------------------------------------------------------
signed int __cdecl Decode_Block_Thumb_PX(struct _STATE *a1, int a2, int a3, __int16 *a4, __int16 *a5)
{
  signed int result; // eax@1
  int v6; // eax@5
  bool v7; // zf@5
  bool v8; // sf@5
  unsigned __int8 v9; // of@5
  int v10; // eax@6
  __int16 v11; // ax@8
  int v12; // esi@10
  int v13; // edx@12
  int v14; // eax@12
  int v15; // [sp+10h] [bp-14h]@1

  result = sub_769DD0((int)a1, (int)&v15, a2);
  if ( result )
  {
    if ( result >= 0 )
      result = 0;
    return result;
  }
  if ( v15 )
  {
    v6 = v15 & 0xF;
    v9 = __OFSUB__(v15 & 0xF, a1->bitbuf_bits_valid);
    v7 = (v15 & 0xF) == a1->bitbuf_bits_valid;
    v8 = (v15 & 0xF) - a1->bitbuf_bits_valid < 0;
    v15 &= 0xFu;
    if ( !((unsigned __int8)(v8 ^ v9) | v7) )
    {
      result = Fill_Bit_Buffer(a1, v6);
      if ( result )
      {
        if ( result >= 0 )
          result = 0;
        return result;
      }
      v6 = v15;
    }
    v10 = GET_BITS(a1, v6);
    if ( !(v10 & (1 << (v15 - 1))) )
      v10 += *(_DWORD *)&lowest_coef[2 * v15];
    v11 = *a4 + v10;
    *a4 = v11;
  }
  else
  {
    v11 = *a4;
  }
  *a5 = v11;
  v12 = 63;
  while ( 1 )
  {
    result = sub_769DD0((int)a1, (int)&v15, a3);
    if ( result )
      break;
    v13 = (v15 >> 4) & 0xF;
    v14 = v15 & 0xF;
    if ( v15 & 0xF )
    {
      v15 &= 0xFu;
      v12 = v12 - v13 - 1;
      if ( v14 > a1->bitbuf_bits_valid )
      {
        result = Fill_Bit_Buffer(a1, v14);
        if ( result )
        {
          if ( result >= 0 )
            result = 0;
          return result;
        }
        v14 = v15;
      }
      GET_BITS(a1, v14);
    }
    else
    {
      if ( v13 != 15 )
        return 0;
      v15 &= 0xFu;
      v12 -= 16;
    }
    if ( v12 <= 0 )
      return 0;
  }
  if ( result >= 0 )
    result = 0;
  return result;
}

//----- (0076A2A0) --------------------------------------------------------
signed int __cdecl Decode_Block_Prog_DC(struct _STATE *a1, int a2, __int16 *a3, __int16 *a4, char a5)
{
  signed int result; // eax@1
  int v6; // eax@3
  bool v7; // zf@3
  bool v8; // sf@3
  unsigned __int8 v9; // of@3
  int v10; // eax@4
  __int16 v11; // dx@6
  int v12; // eax@6
  int v13; // [sp+10h] [bp-14h]@1

  v13 = 0;
  result = sub_769DD0((int)a1, (int)&v13, a2);
  if ( result )
  {
    if ( result >= 0 )
      result = 0;
  }
  else
  {
    if ( !v13 )
    {
      v12 = *a4;
LABEL_7:
      *a3 = v12 << a5;
      return 0;
    }
    v6 = v13 & 0xF;
    v9 = __OFSUB__(v13 & 0xF, a1->bitbuf_bits_valid);
    v7 = (v13 & 0xF) == a1->bitbuf_bits_valid;
    v8 = (v13 & 0xF) - a1->bitbuf_bits_valid < 0;
    v13 &= 0xFu;
    if ( (unsigned __int8)(v8 ^ v9) | v7 )
    {
LABEL_4:
      v10 = GET_BITS(a1, v6);
      if ( !(v10 & (1 << (v13 - 1))) )
        v10 += *(_DWORD *)&lowest_coef[2 * v13];
      v11 = v10 + *a4;
      v12 = v11;
      *a4 = v11;
      goto LABEL_7;
    }
    result = Fill_Bit_Buffer(a1, v6);
    if ( !result )
    {
      v6 = v13;
      goto LABEL_4;
    }
    if ( result >= 0 )
      result = 0;
  }
  return result;
}

//----- (0076A380) --------------------------------------------------------
signed int __cdecl Decode_Block_Prog_DC_SA(struct _STATE *a1, __int16 *a2, char a3)
{
  signed int v3; // ebx@1
  signed int result; // eax@4

  v3 = 1 << a3;
  if ( a1->bitbuf_bits_valid <= 0 && (result = Fill_Bit_Buffer(a1, 1)) != 0 )
  {
    if ( result >= 0 )
      result = 0;
  }
  else
  {
    if ( GET_BITS(a1, 1) )
      *a2 |= v3;
    result = 0;
  }
  return result;
}

//----- (0076A3F0) --------------------------------------------------------
signed int __cdecl Decode_Block_Prog_AC(struct _STATE *a1, __int16 *a2, int a3, int a4, int a5, char a6)
{
  int v6; // ebx@1
  int v7; // ecx@1
  signed int result; // eax@3
  int v9; // edi@6
  int v10; // edx@6
  int v11; // ebx@7
  int v12; // eax@8
  int v13; // eax@15
  bool v14; // zf@16
  bool v15; // sf@16
  unsigned __int8 v16; // of@16
  int v17; // [sp+10h] [bp-14h]@5

  v6 = a4;
  v7 = a1->Prog_EndOfBlock_Run;
  if ( v7 > 0 )
  {
    a1->Prog_EndOfBlock_Run = v7 - 1;
    return 0;
  }
  if ( a4 > a5 )
    return 0;
  while ( 1 )
  {
    result = sub_769DD0((int)a1, (int)&v17, a3);
    if ( result )
      break;
    v9 = v17 >> 4;
    v10 = v17 & 0xF;
    if ( v17 & 0xF )
    {
      v17 &= 0xFu;
      v11 = v9 + v6;
      if ( v10 > a1->bitbuf_bits_valid )
      {
        result = Fill_Bit_Buffer(a1, v10);
        if ( result )
        {
          if ( result >= 0 )
            result = 0;
          return result;
        }
        v10 = v17;
      }
      v12 = GET_BITS(a1, v10);
      if ( v12 & (1 << (v17 - 1)) )
        a2[izigzag_index[v11]] = v12 << a6;
      else
        a2[izigzag_index[v11]] = (v12 + *(_DWORD *)&lowest_coef[2 * v17]) << a6;
    }
    else
    {
      if ( v9 != 15 )
      {
        v13 = 1 << v9;
        if ( v9 )
        {
          a1->Prog_EndOfBlock_Run = v13;
          v16 = __OFSUB__(v9, a1->bitbuf_bits_valid);
          v14 = v9 == a1->bitbuf_bits_valid;
          v15 = v9 - a1->bitbuf_bits_valid < 0;
          v17 = 0;
          if ( !((unsigned __int8)(v15 ^ v16) | v14) )
          {
            result = Fill_Bit_Buffer(a1, v9);
            if ( result )
            {
              if ( result >= 0 )
                result = 0;
              return result;
            }
          }
          v13 = a1->Prog_EndOfBlock_Run + GET_BITS(a1, v9);
        }
        a1->Prog_EndOfBlock_Run = v13 - 1;
        return 0;
      }
      v17 &= 0xFu;
      v11 = v6 + 15;
    }
    v6 = v11 + 1;
    if ( v6 > a5 )
      return 0;
  }
  if ( result >= 0 )
    result = 0;
  return result;
}
// B72EE0: using guessed type int izigzag_index[];

//----- (0076A5A0) --------------------------------------------------------
signed int __cdecl Decode_Block_Prog_AC_SA(int a1, __int16 *a2, int a3, int a4, int a5, char a6)
{
  int v6; // edi@1
  int v7; // esi@1
  int v8; // ebx@1
  int v9; // eax@1
  signed int result; // eax@3
  int v11; // ebp@4
  int v12; // edi@13
  int v13; // edx@16
  int v14; // ebx@28
  int v15; // eax@31
  int v16; // [sp+10h] [bp-1Ch]@3
  int v17; // [sp+14h] [bp-18h]@1
  int v18; // [sp+18h] [bp-14h]@1

  v6 = a1;
  v7 = a4;
  v8 = a5;
  v17 = 1 << a6;
  v9 = *(_DWORD *)(a1 + 40);
  v18 = -1 << a6;
  if ( v9 || a4 > a5 )
    goto LABEL_26;
  while ( 1 )
  {
    result = sub_769DD0(v6, (int)&v16, a3);
    if ( result )
    {
      if ( result >= 0 )
        result = 0;
      return result;
    }
    v11 = v16 >> 4;
    v16 &= 0xFu;
    if ( !v16 )
      break;
    if ( *(_DWORD *)(v6 + 12) <= 0 )
    {
      result = Fill_Bit_Buffer((struct _STATE *)v6, 1);
      if ( result )
      {
        if ( result >= 0 )
          result = 0;
        return result;
      }
    }
    if ( GET_BITS((struct _STATE *)v6, 1) )
      v16 = v17;
    else
      v16 = v18;
    while ( 1 )
    {
LABEL_13:
      v12 = izigzag_index[v7];
      if ( a2[v12] )
      {
        if ( *(_DWORD *)(a1 + 12) <= 0 )
        {
          result = Fill_Bit_Buffer((struct _STATE *)a1, 1);
          if ( result )
          {
            if ( result >= 0 )
              result = 0;
            return result;
          }
        }
        if ( GET_BITS((struct _STATE *)a1, 1) )
        {
          v13 = a2[v12];
          if ( !(v17 & v13) )
          {
            if ( v13 < 0 )
              a2[v12] = v18 + v13;
            else
              a2[v12] = v17 + v13;
          }
        }
        goto LABEL_20;
      }
      --v11;
      if ( v11 < 0 )
        break;
LABEL_20:
      ++v7;
      if ( v7 > a5 )
      {
        v6 = a1;
        goto LABEL_22;
      }
    }
    v6 = a1;
LABEL_22:
    if ( v16 )
      a2[izigzag_index[v7]] = v16;
    ++v7;
    if ( v7 > a5 )
    {
      v8 = a5;
      v9 = *(_DWORD *)(v6 + 40);
      goto LABEL_26;
    }
  }
  if ( v11 == 15 )
    goto LABEL_13;
  v8 = a5;
  v9 = 1 << v11;
  *(_DWORD *)(v6 + 40) = 1 << v11;
  if ( !v11 )
  {
LABEL_26:
    if ( v9 > 0 )
    {
      if ( v7 <= v8 )
      {
        while ( 1 )
        {
          v14 = izigzag_index[v7];
          if ( a2[v14] )
          {
            if ( *(_DWORD *)(v6 + 12) <= 0 )
            {
              result = Fill_Bit_Buffer((struct _STATE *)v6, 1);
              if ( result )
              {
                if ( result >= 0 )
                  result = 0;
                return result;
              }
            }
            if ( GET_BITS((struct _STATE *)v6, 1) )
            {
              v15 = a2[v14];
              if ( !(v17 & v15) )
              {
                if ( v15 < 0 )
                  a2[v14] = v18 + v15;
                else
                  a2[v14] = v17 + v15;
              }
            }
          }
          ++v7;
          if ( v7 > a5 )
          {
            v9 = *(_DWORD *)(v6 + 40);
            break;
          }
        }
      }
      *(_DWORD *)(v6 + 40) = v9 - 1;
    }
    return 0;
  }
  if ( v11 <= *(_DWORD *)(v6 + 12) || (result = Fill_Bit_Buffer((struct _STATE *)v6, v11)) == 0 )
  {
    v9 = *(_DWORD *)(v6 + 40) + GET_BITS((struct _STATE *)v6, v11);
    *(_DWORD *)(v6 + 40) = v9;
    goto LABEL_26;
  }
  if ( result >= 0 )
    result = 0;
  return result;
}
// B72EE0: using guessed type int izigzag_index[];

//----- (0076A8B0) --------------------------------------------------------
int __cdecl FillDecoderQuantTable_IPP(int a1)
{
  signed int v1; // eax@1
  signed int v2; // eax@3
  int result; // eax@5
  __int16 v4; // [sp+0h] [bp-84h]@2
  __int16 v5; // [sp+2h] [bp-82h]@4
  __int16 v6; // [sp+4h] [bp-80h]@4
  __int16 v7[63]; // [sp+6h] [bp-7Eh]@4

  v1 = 0;
  do
  {
    *(&v4 + izigzag_index[v1]) = *(_WORD *)(a1 + 2 * v1);
    *(&v4 + dword_B72EE4[v1]) = *(_WORD *)(a1 + 2 * v1 + 2);
    *(&v4 + dword_B72EE8[v1]) = *(_WORD *)(a1 + 2 * v1 + 4);
    *(&v4 + dword_B72EEC[v1]) = *(_WORD *)(a1 + 2 * v1 + 6);
    v1 += 4;
  }
  while ( v1 < 64 );
  v2 = 0;
  do
  {
    *(_WORD *)(a1 + 2 * v2) = *(&v4 + v2);
    *(_WORD *)(a1 + 2 * v2 + 2) = *(&v5 + v2);
    *(_WORD *)(a1 + 2 * v2 + 4) = *(&v6 + v2);
    *(_WORD *)(a1 + 2 * v2 + 6) = v7[v2];
    v2 += 4;
  }
  while ( v2 < 64 );
  result = 0;
  *(_WORD *)(a1 + 128) = 0;
  *(_WORD *)(a1 + 130) = 0;
  *(_WORD *)(a1 + 132) = 0;
  *(_WORD *)(a1 + 134) = 0;
  *(_WORD *)(a1 + 136) = 0;
  *(_WORD *)(a1 + 138) = 0;
  *(_WORD *)(a1 + 140) = 0;
  *(_WORD *)(a1 + 142) = 0;
  *(_WORD *)(a1 + 144) = 0;
  *(_WORD *)(a1 + 146) = 0;
  *(_WORD *)(a1 + 148) = 0;
  *(_WORD *)(a1 + 150) = 0;
  *(_WORD *)(a1 + 152) = 0;
  *(_WORD *)(a1 + 154) = 0;
  *(_WORD *)(a1 + 156) = 0;
  *(_WORD *)(a1 + 158) = 0;
  return result;
}
// B72EE0: using guessed type int izigzag_index[];
// B72EE4: using guessed type int dword_B72EE4[];
// B72EE8: using guessed type int dword_B72EE8[];
// B72EEC: using guessed type int dword_B72EEC[];
// 76A8B0: using guessed type __int16 var_7E[63];

//----- (0076A9C0) --------------------------------------------------------
signed int __cdecl iQnt8x8_IPP_PX(int a1, int a2)
{
  signed int result; // eax@1
  __int16 v3; // bx@2

  result = 0;
  do
  {
    *(_WORD *)(a1 + 2 * result) *= *(_WORD *)(a2 + 2 * result);
    v3 = *(_WORD *)(a1 + 2 * result + 4);
    *(_WORD *)(a1 + 2 * result + 2) *= *(_WORD *)(a2 + 2 * result + 2);
    *(_WORD *)(a1 + 2 * result + 4) = v3 * *(_WORD *)(a2 + 2 * result + 4);
    *(_WORD *)(a1 + 2 * result + 6) *= *(_WORD *)(a2 + 2 * result + 6);
    result += 4;
  }
  while ( result < 64 );
  return result;
}

//----- (0076AA30) --------------------------------------------------------
void __cdecl iQnt8x8_IPP_M5(int a1, int a2)
{
  own_iqnt8x8_ipp_m5(a1, a2);
}

//----- (0076AA50) --------------------------------------------------------
void __cdecl iQnt8x8_IPP_W7(int a1, int a2)
{
  own_iqnt8x8_ipp_w7(a1, a2);
}

//----- (0076AA70) --------------------------------------------------------
int __cdecl iDCT8x8_IPP_PX(int a1)
{
  int v1; // ebx@1
  unsigned int v2; // ecx@1
  int v3; // ebp@2
  int v4; // ecx@2
  int v5; // eax@2
  int v6; // ecx@2
  int v7; // edi@2
  int v8; // edx@2
  int v9; // ebp@2
  int v10; // esi@2
  int v11; // edi@2
  int v12; // edx@2
  int v13; // eax@2
  int v14; // ecx@2
  int v15; // esi@2
  int v16; // ecx@2
  int v17; // edi@2
  int v18; // edx@2
  int v19; // ecx@2
  int v20; // ebp@2
  int v21; // edx@2
  int v22; // ecx@2
  int v23; // ebx@2
  int v24; // ecx@2
  int v25; // esi@2
  int v26; // ebp@2
  int v27; // ebx@2
  int v28; // edx@2
  int v29; // ecx@2
  int v30; // eax@2
  signed int v31; // ebx@2
  int v32; // eax@2
  signed int v33; // edx@2
  int v34; // ebx@2
  int v35; // eax@2
  signed int v36; // ebp@2
  bool v37; // sf@2
  unsigned __int8 v38; // of@2
  int v39; // edx@3
  int result; // eax@3
  int v41; // ecx@4
  int v42; // ebx@4
  int v43; // eax@4
  int v44; // ecx@4
  int v45; // ebx@4
  int v46; // ebp@4
  int v47; // edi@4
  int v48; // ebx@4
  int v49; // ebp@4
  int v50; // esi@4
  int v51; // eax@4
  int v52; // ecx@4
  int v53; // ebp@4
  int v54; // ecx@4
  int v55; // esi@4
  int v56; // ebx@4
  int v57; // ebp@4
  int v58; // ecx@4
  int v59; // edx@4
  int v60; // edi@4
  int v61; // esi@4
  int v62; // ebx@4
  int v63; // ecx@4
  int v64; // ebp@4
  int v65; // eax@4
  unsigned int v66; // edx@4
  int v67; // eax@4
  signed __int16 v68; // di@5
  int v69; // esi@7
  int v70; // esi@10
  int v71; // ecx@13
  int v72; // ecx@16
  int v73; // ebp@19
  int v74; // ecx@22
  int v75; // ebx@25
  char v76; // [sp+1Fh] [bp-135h]@1
  int v77; // [sp+120h] [bp-34h]@2
  int v78; // [sp+124h] [bp-30h]@2
  int v79; // [sp+128h] [bp-2Ch]@2
  int v80; // [sp+12Ch] [bp-28h]@2
  int v81; // [sp+130h] [bp-24h]@2
  int v82; // [sp+134h] [bp-20h]@1
  int v83; // [sp+138h] [bp-1Ch]@1
  unsigned int v84; // [sp+13Ch] [bp-18h]@1

  v1 = a1;
  v2 = (unsigned int)&v76 & 0xFFFFFFE0;
  v82 = 0;
  v84 = (unsigned int)&v76 & 0xFFFFFFE0;
  v83 = a1;
  do
  {
    v81 = v1;
    v3 = *(_WORD *)(v1 + 14);
    v80 = v2;
    v4 = *(_WORD *)(v1 + 2);
    v5 = 6393 * v3 + 32138 * v4;
    v6 = -32138 * v3 + 6393 * v4;
    v7 = *(_WORD *)(v1 + 10);
    v8 = *(_WORD *)(v1 + 6);
    v9 = 27246 * v8 + 18205 * v7;
    v10 = -18205 * v8 + 27246 * v7;
    v11 = v5 - v9;
    v12 = v6 - v10;
    v13 = 5793 * ((v5 + v9 + 2048) >> 12);
    v14 = 5793 * ((v6 + v10 + 2048) >> 12);
    v15 = *(_WORD *)(v1 + 12);
    v79 = v14;
    v16 = v11 + v12;
    v17 = v11 - v12;
    v78 = v16;
    v18 = *(_WORD *)v1;
    v19 = *(_WORD *)(v1 + 8);
    v77 = v17;
    v20 = (v18 + v19) << 15;
    v21 = (v18 - v19) << 15;
    v22 = *(_WORD *)(v1 + 4);
    v23 = 17734 * v15 + 42813 * v22;
    v24 = -42813 * v15 + 17734 * v22;
    v25 = v20 + v23;
    v26 = v20 - v23;
    v27 = v21 + v24;
    v28 = v21 - v24;
    v29 = v80;
    *(_DWORD *)v80 = (v13 + v25 + 2048) >> 12;
    *(_DWORD *)(v29 + 28) = (v25 - v13 + 2048) >> 12;
    v30 = (v78 + v27 + 2048) >> 12;
    v31 = v27 - v78 + 2048;
    *(_DWORD *)(v29 + 4) = v30;
    *(_DWORD *)(v29 + 24) = v31 >> 12;
    v32 = (v77 + v28 + 2048) >> 12;
    v33 = v28 - v77 + 2048;
    *(_DWORD *)(v29 + 8) = v32;
    v34 = v81;
    *(_DWORD *)(v29 + 20) = v33 >> 12;
    v35 = (v79 + v26 + 2048) >> 12;
    v36 = v26 - v79 + 2048;
    *(_DWORD *)(v29 + 12) = v35;
    v1 = v34 + 16;
    *(_DWORD *)(v29 + 16) = v36 >> 12;
    v2 = v29 + 32;
    v38 = __OFSUB__(v82 + 1, 8);
    v37 = v82++ - 7 < 0;
  }
  while ( v37 ^ v38 );
  v39 = v84;
  result = v83;
  v82 = 0;
  do
  {
    v84 = v39;
    v41 = *(_DWORD *)(v39 + 32);
    v42 = *(_DWORD *)(v39 + 224);
    v83 = result;
    v43 = 6393 * v42 + 32138 * v41;
    v44 = -32138 * v42 + 6393 * v41;
    v45 = *(_DWORD *)(v39 + 160);
    v46 = *(_DWORD *)(v39 + 96);
    v47 = 27246 * v46 + 18205 * v45;
    v48 = -18205 * v46 + 27246 * v45;
    v49 = v43 - v47;
    v50 = v44 - v48;
    v51 = 5793 * ((v43 + v47 + 2048) >> 12);
    v81 = v51;
    v80 = 5793 * ((v44 + v48 + 2048) >> 12);
    v52 = v49 + v44 - v48;
    v53 = v49 - v50;
    v79 = v52;
    v54 = *(_DWORD *)(v39 + 128);
    v55 = *(_DWORD *)(v39 + 64);
    v77 = v53;
    v56 = (*(_DWORD *)v39 + v54) << 15;
    v57 = (*(_DWORD *)v39 - v54) << 15;
    v58 = *(_DWORD *)(v39 + 192);
    v59 = 17734 * v58 + 42813 * v55;
    v60 = -42813 * v58 + 17734 * v55;
    v61 = v56 + v59;
    v62 = v56 - v59;
    v63 = v57 + v60;
    v64 = v57 - v60;
    v65 = ((v51 + v61 + 1048576) >> 21) + 128;
    v37 = v65 < 0;
    v78 = v65;
    v66 = v84;
    v67 = v83;
    if ( v37 )
    {
      v68 = 0;
      v78 = 0;
    }
    else
    {
      v68 = v78;
      if ( v78 > 255 )
      {
        v68 = 255;
        v78 = 255;
      }
    }
    *(_WORD *)v83 = v68;
    v69 = ((v61 - v81 + 1048576) >> 21) + 128;
    if ( v69 < 0 )
    {
      LOWORD(v69) = 0;
    }
    else
    {
      if ( v69 > 255 )
        LOWORD(v69) = 255;
    }
    *(_WORD *)(v67 + 112) = v69;
    v70 = ((v79 + v63 + 1048576) >> 21) + 128;
    if ( v70 < 0 )
    {
      LOWORD(v70) = 0;
    }
    else
    {
      if ( v70 > 255 )
        LOWORD(v70) = 255;
    }
    *(_WORD *)(v67 + 16) = v70;
    v71 = ((v63 - v79 + 1048576) >> 21) + 128;
    if ( v71 < 0 )
    {
      LOWORD(v71) = 0;
    }
    else
    {
      if ( v71 > 255 )
        LOWORD(v71) = 255;
    }
    *(_WORD *)(v67 + 96) = v71;
    v72 = ((v77 + v64 + 1048576) >> 21) + 128;
    if ( v72 < 0 )
    {
      LOWORD(v72) = 0;
    }
    else
    {
      if ( v72 > 255 )
        LOWORD(v72) = 255;
    }
    *(_WORD *)(v67 + 32) = v72;
    v73 = ((v64 - v77 + 1048576) >> 21) + 128;
    if ( v73 < 0 )
    {
      LOWORD(v73) = 0;
    }
    else
    {
      if ( v73 > 255 )
        LOWORD(v73) = 255;
    }
    *(_WORD *)(v67 + 80) = v73;
    v74 = ((v80 + v62 + 1048576) >> 21) + 128;
    if ( v74 < 0 )
    {
      LOWORD(v74) = 0;
    }
    else
    {
      if ( v74 > 255 )
        LOWORD(v74) = 255;
    }
    *(_WORD *)(v67 + 48) = v74;
    v75 = ((v62 - v80 + 1048576) >> 21) + 128;
    if ( v75 < 0 )
    {
      LOWORD(v75) = 0;
    }
    else
    {
      if ( v75 > 255 )
        LOWORD(v75) = 255;
    }
    *(_WORD *)(v67 + 64) = v75;
    v39 = v66 + 4;
    result = v67 + 2;
    v38 = __OFSUB__(v82 + 1, 8);
    v37 = v82++ - 7 < 0;
  }
  while ( v37 ^ v38 );
  return result;
}

//----- (0076AF60) --------------------------------------------------------
void __cdecl iDCT8x8_IPP_M5(int a1)
{
  own_dct_2d_16s_8x8_inv_m5(a1);
}

//----- (0076AF80) --------------------------------------------------------
void __cdecl iDCT8x8_IPP_A6(int a1)
{
  own_dct_2d_16s_8x8_inv_a6(a1);
}

//----- (0076AFA0) --------------------------------------------------------
void **__cdecl iDCT8x8_IPP_W7(int a1)
{
  return own_dct_2d_16s_8x8_inv_w7(a1);
}

//----- (0076AFC0) --------------------------------------------------------
char *__cdecl iDCT4x4_IPP_PX(int a1)
{
  int v1; // eax@1
  int v2; // ecx@1
  int v3; // edx@2
  int v4; // esi@3
  int v5; // ebx@4
  int v6; // ebp@5
  int v7; // edx@6
  int v8; // edi@7
  int v9; // edx@8
  int v10; // ecx@14
  int v11; // eax@14
  int v12; // edx@14
  int v13; // eax@14
  int v14; // ebp@14
  int v15; // ecx@14
  signed int v16; // ebx@14
  int v17; // eax@14
  int v18; // edx@15
  int v19; // edx@20
  char *result; // eax@20
  int v21; // ebp@22
  int v22; // ebx@23
  int v23; // esi@25
  int v24; // ecx@27
  int v25; // edi@33
  int v26; // ebx@34
  int v27; // ecx@36
  int v28; // edi@36
  int v29; // ebp@36
  int v30; // ecx@36
  int v31; // esi@36
  int v32; // ebx@36
  int v33; // ebp@39
  int v34; // ebx@42
  int v35; // ecx@45
  char v36; // [sp+0h] [bp-ACh]@1
  int v37; // [sp+80h] [bp-2Ch]@7
  int v38; // [sp+84h] [bp-28h]@2
  int v39; // [sp+88h] [bp-24h]@1
  int v40; // [sp+8Ch] [bp-20h]@1
  int v41; // [sp+90h] [bp-1Ch]@14
  int v42; // [sp+94h] [bp-18h]@14
  int v43; // [sp+98h] [bp-14h]@14

  v1 = a1;
  v2 = (int)&v36;
  v39 = 8;
  v40 = a1;
LABEL_2:
  v3 = *(_WORD *)(v1 + 16);
  v38 = *(_WORD *)(v1 + 16);
  if ( v3 )
  {
    v4 = *(_WORD *)(v1 + 32);
    v7 = *(_WORD *)(v1 + 96);
    v37 = *(_WORD *)(v1 + 112);
    v6 = *(_WORD *)(v1 + 80);
    v5 = *(_WORD *)(v1 + 48);
  }
  else
  {
    v4 = *(_WORD *)(v1 + 32);
    if ( *(_WORD *)(v1 + 32) )
    {
      v7 = *(_WORD *)(v1 + 96);
      v6 = *(_WORD *)(v1 + 80);
      v37 = *(_WORD *)(v1 + 112);
      v5 = *(_WORD *)(v1 + 48);
    }
    else
    {
      v5 = *(_WORD *)(v1 + 48);
      if ( *(_WORD *)(v1 + 48) )
      {
        v7 = *(_WORD *)(v1 + 96);
        v37 = *(_WORD *)(v1 + 112);
        v6 = *(_WORD *)(v1 + 80);
      }
      else
      {
        v6 = *(_WORD *)(v1 + 80);
        if ( *(_WORD *)(v1 + 80) )
        {
          v7 = *(_WORD *)(v1 + 96);
          v37 = *(_WORD *)(v1 + 112);
        }
        else
        {
          v7 = *(_WORD *)(v1 + 96);
          if ( *(_WORD *)(v1 + 96) )
          {
            v37 = *(_WORD *)(v1 + 112);
          }
          else
          {
            v8 = *(_WORD *)(v1 + 112);
            v37 = *(_WORD *)(v1 + 112);
            if ( !v8 )
            {
              v9 = 4 * *(_WORD *)v1;
              *(_DWORD *)v2 = v9;
              v1 += 2;
              *(_DWORD *)(v2 + 32) = v9;
              *(_DWORD *)(v2 + 64) = v9;
              *(_DWORD *)(v2 + 96) = v9;
              v2 += 4;
              goto LABEL_15;
            }
          }
        }
      }
    }
  }
  v42 = v2;
  v10 = *(_WORD *)v1 << 14;
  v41 = v1;
  v11 = -6270 * v7 + 15137 * v4;
  v12 = v10 + v11;
  v43 = v10 - v11;
  v13 = 8697 * v38 + -1730 * v37 + -17799 * v5 + 11893 * v6;
  v14 = 20995 * v38 + -4176 * v37 + 7373 * v5 + -4926 * v6;
  v15 = v42;
  *(_DWORD *)v42 = (v14 + v12 + 2048) >> 12;
  *(_DWORD *)(v15 + 96) = (v12 - v14 + 2048) >> 12;
  v16 = v43 - v13 + 2048;
  *(_DWORD *)(v15 + 32) = (v13 + v43 + 2048) >> 12;
  v17 = v41;
  *(_DWORD *)(v15 + 64) = v16 >> 12;
  v1 = v17 + 2;
  v2 = v15 + 4;
LABEL_15:
  v18 = v39;
  while ( 1 )
  {
    --v18;
    if ( v18 <= 0 )
      break;
    if ( v18 != 4 )
    {
      v39 = v18;
      goto LABEL_2;
    }
    v1 += 2;
    v2 += 4;
  }
  v19 = v40;
  result = &v36;
  v39 = 0;
  do
  {
    v38 = *((_DWORD *)result + 1);
    ++v39;
    if ( v38 )
    {
      v21 = *((_DWORD *)result + 2);
      v23 = *((_DWORD *)result + 6);
      v37 = *((_DWORD *)result + 7);
      v42 = *((_DWORD *)result + 5);
      v22 = *((_DWORD *)result + 3);
    }
    else
    {
      v21 = *((_DWORD *)result + 2);
      if ( v21 )
      {
        v23 = *((_DWORD *)result + 6);
        v26 = *((_DWORD *)result + 5);
        v37 = *((_DWORD *)result + 7);
        v42 = v26;
        v22 = *((_DWORD *)result + 3);
      }
      else
      {
        v22 = *((_DWORD *)result + 3);
        if ( v22 )
        {
          v23 = *((_DWORD *)result + 6);
          v25 = *((_DWORD *)result + 5);
          v37 = *((_DWORD *)result + 7);
          v42 = v25;
        }
        else
        {
          v42 = *((_DWORD *)result + 5);
          if ( v42 )
          {
            v23 = *((_DWORD *)result + 6);
            v37 = *((_DWORD *)result + 7);
          }
          else
          {
            v23 = *((_DWORD *)result + 6);
            if ( v23 )
            {
              v37 = *((_DWORD *)result + 7);
            }
            else
            {
              v37 = *((_DWORD *)result + 7);
              if ( !v37 )
              {
                v24 = ((*(_DWORD *)result + 16) >> 5) + 128;
                if ( v24 < 0 )
                {
                  LOWORD(v24) = 0;
                }
                else
                {
                  if ( v24 > 255 )
                    LOWORD(v24) = 255;
                }
                result += 32;
                *(_WORD *)v19 = v24;
                *(_WORD *)(v19 + 2) = v24;
                *(_WORD *)(v19 + 4) = v24;
                *(_WORD *)(v19 + 6) = v24;
                v19 += 16;
                continue;
              }
            }
          }
        }
      }
    }
    v27 = *(_DWORD *)result << 14;
    v28 = -6270 * v23 + 15137 * v21;
    v29 = v27 + v28;
    v30 = v27 - v28;
    v41 = 8697 * v38 + -1730 * v37 + -17799 * v22 + 11893 * v42;
    v31 = 20995 * v38 + -4176 * v37 + 7373 * v22 + -4926 * v42;
    v32 = ((v31 + v29 + 262144) >> 19) + 128;
    if ( v32 < 0 )
    {
      LOWORD(v32) = 0;
    }
    else
    {
      if ( v32 > 255 )
        LOWORD(v32) = 255;
    }
    *(_WORD *)v19 = v32;
    v33 = ((v29 - v31 + 262144) >> 19) + 128;
    if ( v33 < 0 )
    {
      LOWORD(v33) = 0;
    }
    else
    {
      if ( v33 > 255 )
        LOWORD(v33) = 255;
    }
    *(_WORD *)(v19 + 6) = v33;
    v34 = ((v41 + v30 + 262144) >> 19) + 128;
    if ( v34 < 0 )
    {
      LOWORD(v34) = 0;
    }
    else
    {
      if ( v34 > 255 )
        LOWORD(v34) = 255;
    }
    *(_WORD *)(v19 + 2) = v34;
    v35 = ((v30 - v41 + 262144) >> 19) + 128;
    if ( v35 < 0 )
    {
      LOWORD(v35) = 0;
    }
    else
    {
      if ( v35 > 255 )
        LOWORD(v35) = 255;
    }
    *(_WORD *)(v19 + 4) = v35;
    result += 32;
    v19 += 16;
  }
  while ( v39 < 4 );
  return result;
}

//----- (0076B4C0) --------------------------------------------------------
__int16 __cdecl iDCT2x2_IPP_PX(int a1)
{
  int v1; // edx@1
  int *v2; // eax@1
  int v3; // ebx@3
  int v4; // edi@4
  int v5; // ecx@5
  int v6; // ecx@6
  int v7; // esi@10
  int v8; // ecx@10
  int v9; // ecx@11
  int v10; // edx@19
  int v11; // eax@20
  int v12; // edi@21
  int v13; // eax@22
  int v14; // edi@25
  char *v15; // eax@25
  int v16; // esi@29
  int v17; // edi@29
  int v18; // eax@29
  int v19; // esi@32
  int v20; // esi@36
  int v21; // ebp@37
  int v22; // ecx@38
  int v23; // edx@39
  int v24; // eax@40
  int v25; // eax@47
  int v26; // edx@47
  int v27; // ecx@47
  int v29; // [sp+0h] [bp-54h]@1
  int v30; // [sp+4h] [bp-50h]@18
  int v31; // [sp+Ch] [bp-48h]@19
  int v32; // [sp+14h] [bp-40h]@20
  int v33; // [sp+1Ch] [bp-38h]@21
  char v34; // [sp+20h] [bp-34h]@25
  int v35; // [sp+40h] [bp-14h]@1

  v1 = a1;
  v2 = &v29;
  v35 = 8;
LABEL_2:
  if ( *(_WORD *)(v1 + 16) )
  {
    v5 = *(_WORD *)(v1 + 112);
    v4 = *(_WORD *)(v1 + 80);
    v3 = *(_WORD *)(v1 + 48);
    goto LABEL_10;
  }
  v3 = *(_WORD *)(v1 + 48);
  if ( *(_WORD *)(v1 + 48) )
  {
    v5 = *(_WORD *)(v1 + 112);
    v4 = *(_WORD *)(v1 + 80);
    goto LABEL_10;
  }
  v4 = *(_WORD *)(v1 + 80);
  if ( *(_WORD *)(v1 + 80) )
  {
    v5 = *(_WORD *)(v1 + 112);
    goto LABEL_10;
  }
  v5 = *(_WORD *)(v1 + 112);
  if ( *(_WORD *)(v1 + 112) )
  {
LABEL_10:
    v7 = *(_WORD *)v1 << 15;
    v8 = -5906 * v5 + 6967 * v4 + -10426 * v3 + 29692 * *(_WORD *)(v1 + 16);
    *v2 = (v7 + v8 + 4096) >> 13;
    v2[8] = (v7 - v8 + 4096) >> 13;
    v1 += 2;
    ++v2;
    goto LABEL_11;
  }
  v6 = 4 * *(_WORD *)v1;
  *v2 = v6;
  v1 += 2;
  v2[8] = v6;
  ++v2;
LABEL_11:
  v9 = v35;
  while ( 1 )
  {
    --v9;
    if ( v9 <= 0 )
      break;
    if ( v9 != 6 && v9 != 4 && v9 != 2 )
    {
      v35 = v9;
      goto LABEL_2;
    }
    v1 += 2;
    ++v2;
  }
  if ( v30 )
  {
    v12 = v33;
    v11 = v32;
    v10 = v31;
  }
  else
  {
    v10 = v31;
    if ( v31 )
    {
      v12 = v33;
      v11 = v32;
    }
    else
    {
      v11 = v32;
      if ( v32 )
      {
        v12 = v33;
      }
      else
      {
        v12 = v33;
        if ( !v33 )
        {
          v13 = ((v29 + 16) >> 5) + 128;
          if ( v13 < 0 )
          {
            LOWORD(v13) = 0;
          }
          else
          {
            if ( v13 > 255 )
              LOWORD(v13) = 255;
          }
          v14 = a1 + 16;
          *(_WORD *)a1 = v13;
          *(_WORD *)(a1 + 2) = v13;
          v15 = &v34;
          goto LABEL_36;
        }
      }
    }
  }
  v16 = v29 << 15;
  v17 = 29692 * v30 + -10426 * v10 + 6967 * v11 + -5906 * v12;
  v18 = (((v29 << 15) + v17 + 524288) >> 20) + 128;
  if ( v18 < 0 )
  {
    LOWORD(v18) = 0;
  }
  else
  {
    if ( v18 > 255 )
      LOWORD(v18) = 255;
  }
  *(_WORD *)a1 = v18;
  v19 = ((v16 - v17 + 524288) >> 20) + 128;
  if ( v19 < 0 )
  {
    LOWORD(v19) = 0;
  }
  else
  {
    if ( v19 > 255 )
      LOWORD(v19) = 255;
  }
  *(_WORD *)(a1 + 2) = v19;
  v15 = &v34;
  v14 = a1 + 16;
LABEL_36:
  v20 = *((_DWORD *)v15 + 1);
  if ( v20 )
  {
    v23 = *((_DWORD *)v15 + 7);
    v22 = *((_DWORD *)v15 + 5);
    v21 = *((_DWORD *)v15 + 3);
  }
  else
  {
    v21 = *((_DWORD *)v15 + 3);
    if ( v21 )
    {
      v23 = *((_DWORD *)v15 + 7);
      v22 = *((_DWORD *)v15 + 5);
    }
    else
    {
      v22 = *((_DWORD *)v15 + 5);
      if ( v22 )
      {
        v23 = *((_DWORD *)v15 + 7);
      }
      else
      {
        v23 = *((_DWORD *)v15 + 7);
        if ( !v23 )
        {
          v24 = ((*(_DWORD *)v15 + 16) >> 5) + 128;
          if ( v24 < 0 )
          {
            LOWORD(v24) = 0;
          }
          else
          {
            if ( v24 > 255 )
              LOWORD(v24) = 255;
          }
          *(_WORD *)v14 = v24;
          *(_WORD *)(v14 + 2) = v24;
          return v24;
        }
      }
    }
  }
  v25 = *(_DWORD *)v15 << 15;
  v26 = 29692 * v20 + -10426 * v21 + 6967 * v22 + -5906 * v23;
  v27 = ((v25 + v26 + 524288) >> 20) + 128;
  if ( v27 < 0 )
  {
    LOWORD(v27) = 0;
  }
  else
  {
    if ( v27 > 255 )
      LOWORD(v27) = 255;
  }
  *(_WORD *)v14 = v27;
  v24 = ((v25 - v26 + 524288) >> 20) + 128;
  if ( v24 < 0 )
  {
    LOWORD(v24) = 0;
  }
  else
  {
    if ( v24 > 255 )
      LOWORD(v24) = 255;
  }
  *(_WORD *)(v14 + 2) = v24;
  return v24;
}

//----- (0076B7B0) --------------------------------------------------------
int __cdecl iDCT1x1_IPP_PX(int a1)
{
  int result; // eax@1
  int v2; // edx@1

  result = a1;
  v2 = ((*(_WORD *)a1 + 4) >> 3) + 128;
  if ( v2 < 0 )
  {
    LOWORD(v2) = 0;
  }
  else
  {
    if ( v2 > 255 )
      LOWORD(v2) = 255;
  }
  *(_WORD *)a1 = v2;
  return result;
}

//----- (0076B7E0) --------------------------------------------------------
int __cdecl EB_Init_PX(struct _STATE *a1, char *a2, int a3)
{
  int result; // eax@3

  if ( a1->file )
  {
    a1->entropy_buf_maxsize = 4096;
    a1->start_entropy_ptr = a1->JPGBuffer;
    a1->end_entropy_ptr = (char *)&a1[1];
    a1->cur_entropy_ptr = a1->JPGBuffer;
    a1->entropy_bytes_left = 4096;
    a1->entropy_bytes_processed = 0;
  }
  else
  {
    a1->entropy_buf_maxsize = a3;
    a1->start_entropy_ptr = a2;
    a1->end_entropy_ptr = &a2[a3];
    a1->cur_entropy_ptr = a2;
    a1->entropy_bytes_left = a3;
    a1->entropy_bytes_processed = 0;
  }
  result = 0;
  a1->bit_buffer_64 = 0i64;
  a1->bitbuf_bits_valid = 8;
  return result;
}

//----- (0076B850) --------------------------------------------------------
struct _STATE *__cdecl EB_Init_M5(struct _STATE *a1, char *a2, int a3)
{
  struct _STATE *result; // eax@1

  result = a1;
  if ( a1->file )
  {
    a1->entropy_buf_maxsize = 4096;
    a1->start_entropy_ptr = a1->JPGBuffer;
    a1->cur_entropy_ptr = a1->JPGBuffer;
    a1->end_entropy_ptr = (char *)&a1[1];
  }
  else
  {
    a1->entropy_buf_maxsize = a3;
    a1->start_entropy_ptr = a2;
    a1->cur_entropy_ptr = a2;
    a1->end_entropy_ptr = &a2[a3];
  }
  a1->bit_buffer_64 = 0i64;
  a1->bitbuf_bits_valid = 0;
  return result;
}

//----- (0076B8A0) --------------------------------------------------------
int __cdecl EB_Write_Bytes_PX(int a1, unsigned int a2, int a3)
{
  signed int v3; // esi@1
  unsigned int v4; // ecx@3
  char v5; // al@8
  unsigned int v6; // edx@9
  unsigned int v7; // edi@16
  unsigned int v8; // edx@18
  char v9; // al@22
  int v11; // edx@26
  char v12; // al@29
  int v13; // edi@29
  int v14; // ecx@30
  unsigned int v15; // ecx@32
  int v16; // edx@42
  int v17; // [sp+10h] [bp-1Ch]@4
  int v18; // [sp+14h] [bp-18h]@17
  unsigned int v19; // [sp+18h] [bp-14h]@34

  v3 = 0;
  if ( *(_DWORD *)(a3 + 60) )
  {
    if ( *(_DWORD *)(a3 + 12) < 8 )
    {
      v4 = *(_DWORD *)(a3 + 16);
      if ( v4 >= *(_DWORD *)(a3 + 24) )
      {
        if ( !ownWriteFile(*(HANDLE *)(a3 + 60), (LPCVOID)(a3 + 64), 0x1000u, (LPDWORD)&v17) || v17 != 4096 )
          return -23;
        v4 = *(_DWORD *)(a3 + 20);
      }
      v5 = *(_BYTE *)a3;
      *(_DWORD *)(a3 + 16) = v4 + 1;
      *(_BYTE *)v4 = v5;
      ++*(_DWORD *)(a3 + 28);
      if ( *(_BYTE *)a3 == 255 )
      {
        v6 = *(_DWORD *)(a3 + 16);
        if ( v6 >= *(_DWORD *)(a3 + 24) )
        {
          if ( !ownWriteFile(*(HANDLE *)(a3 + 60), (LPCVOID)(a3 + 64), 0x1000u, (LPDWORD)&v17) || v17 != 4096 )
            return -23;
          v6 = *(_DWORD *)(a3 + 20);
        }
        *(_DWORD *)(a3 + 16) = v6 + 1;
        *(_BYTE *)v6 = 0;
        ++*(_DWORD *)(a3 + 28);
      }
      *(_DWORD *)a3 = 0;
      *(_DWORD *)(a3 + 4) = 0;
      *(_DWORD *)(a3 + 12) = 8;
    }
    v7 = 0;
    if ( a2 )
    {
      v18 = 0;
      while ( 1 )
      {
        v8 = *(_DWORD *)(a3 + 16);
        if ( v8 >= *(_DWORD *)(a3 + 24) )
        {
          if ( !ownWriteFile(*(HANDLE *)(a3 + 60), (LPCVOID)(a3 + 64), 0x1000u, (LPDWORD)&v17) || v17 != 4096 )
            return -23;
          v8 = *(_DWORD *)(a3 + 20);
          *(_DWORD *)(a3 + 16) = v8;
        }
        v9 = *(_BYTE *)(v7++ + a1);
        *(_DWORD *)(a3 + 16) = v8 + 1;
        *(_BYTE *)v8 = v9;
        ++*(_DWORD *)(a3 + 28);
        if ( v7 >= a2 )
          return v18;
      }
    }
  }
  else
  {
    v11 = *(_DWORD *)(a3 + 16);
    if ( a2 + v11 < *(_DWORD *)(a3 + 24) )
    {
      if ( *(_DWORD *)(a3 + 12) < 8 )
      {
        v12 = *(_BYTE *)a3;
        *(_DWORD *)(a3 + 16) = v11 + 1;
        *(_BYTE *)v11 = v12;
        ++*(_DWORD *)(a3 + 28);
        v13 = *(_BYTE *)a3;
        --*(_DWORD *)(a3 + 36);
        if ( v13 == 255 )
        {
          v14 = *(_DWORD *)(a3 + 16);
          *(_DWORD *)(a3 + 16) = v14 + 1;
          *(_BYTE *)v14 = 0;
          ++*(_DWORD *)(a3 + 28);
          --*(_DWORD *)(a3 + 36);
        }
        *(_DWORD *)(a3 + 12) = 8;
        *(_DWORD *)a3 = 0;
        *(_DWORD *)(a3 + 4) = 0;
        v11 = *(_DWORD *)(a3 + 16);
      }
      v15 = 0;
      if ( a2 )
      {
        if ( a2 >= 6 )
        {
          v19 = a2 - 6;
          v18 = 0;
          while ( 1 )
          {
            *(_BYTE *)(v11 + v15) = *(_BYTE *)(v15 + a1);
            *(_BYTE *)(*(_DWORD *)(a3 + 16) + v15 + 1) = *(_BYTE *)(v15 + a1 + 1);
            *(_BYTE *)(*(_DWORD *)(a3 + 16) + v15 + 2) = *(_BYTE *)(v15 + a1 + 2);
            *(_BYTE *)(*(_DWORD *)(a3 + 16) + v15 + 3) = *(_BYTE *)(v15 + a1 + 3);
            *(_BYTE *)(*(_DWORD *)(a3 + 16) + v15 + 4) = *(_BYTE *)(v15 + a1 + 4);
            v15 += 5;
            if ( v15 > v19 )
              break;
            v11 = *(_DWORD *)(a3 + 16);
          }
          v3 = v18;
          v11 = *(_DWORD *)(a3 + 16);
        }
        while ( 1 )
        {
          *(_BYTE *)(v11 + v15) = *(_BYTE *)(v15 + a1);
          ++v15;
          if ( v15 >= a2 )
            break;
          v11 = *(_DWORD *)(a3 + 16);
        }
        v11 = *(_DWORD *)(a3 + 16);
      }
      *(_DWORD *)(a3 + 16) = a2 + v11;
      v16 = *(_DWORD *)(a3 + 36) - a2;
      *(_DWORD *)(a3 + 28) += a2;
      *(_DWORD *)(a3 + 36) = v16;
    }
    else
    {
      v3 = -28;
    }
  }
  return v3;
}

//----- (0076BB10) --------------------------------------------------------
int __cdecl EB_Write_Bytes_M5(int a1, int a2, int a3)
{
  int v3; // edx@1
  int v4; // ebx@2
  DWORD v5; // ebx@3
  int result; // eax@5
  int v7; // [sp+10h] [bp-14h]@3

  v3 = *(_DWORD *)(a3 + 60);
  if ( v3 )
  {
    v4 = *(_DWORD *)(a3 + 16);
    if ( a2 + v4 + 2 >= *(_DWORD *)(a3 + 24) )
    {
      v5 = v4 - *(_DWORD *)(a3 + 20);
      if ( !ownWriteFile(*(HANDLE *)(a3 + 60), (LPCVOID)(a3 + 64), v5, (LPDWORD)&v7) || v5 != v7 )
        return -23;
      v3 = *(_DWORD *)(a3 + 60);
      *(_DWORD *)(a3 + 16) = *(_DWORD *)(a3 + 20);
    }
  }
  if ( v3 || (unsigned int)(a2 + *(_DWORD *)(a3 + 16)) < *(_DWORD *)(a3 + 24) )
  {
    result = own_eb_write_bytes_m5(a3, a1, a2);
    *(_DWORD *)(a3 + 28) += a2;
  }
  else
  {
    result = -28;
  }
  return result;
}

//----- (0076BBB0) --------------------------------------------------------
signed int __usercall EB_Write_Bits_M5<eax>(__m64 a1<mm1>, unsigned int a2, int a3, int a4)
{
  return own_eb_write_bits_m5(a1, a2, a3, a4);
}

//----- (0076BBE0) --------------------------------------------------------
signed int __usercall EB_Write_Bits_File_M5<eax>(__m64 a1<mm1>, unsigned int a2, int a3, int a4)
{
  return own_eb_write_bits_file_m5(a1, a2, a3, a4);
}

//----- (0076BC10) --------------------------------------------------------
int __cdecl Flush_Buffer_To_File(int a1)
{
  int v1; // ebx@1
  int v2; // esi@3
  int v4; // [sp+10h] [bp-14h]@3

  v1 = (*(int (__cdecl **)(_DWORD, _DWORD, int))(*(_DWORD *)(a1 + 8) + 92))(0, 0, a1);
  if ( !v1 && *(_DWORD *)(a1 + 60) )
  {
    v2 = *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20);
    if ( ownWriteFile(
           *(HANDLE *)(a1 + 60),
           (LPCVOID)(a1 + 64),
           *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20),
           (LPDWORD)&v4)
      && v2 == v4 )
      *(_DWORD *)(a1 + 16) = *(_DWORD *)(a1 + 20);
    else
      v1 = -23;
  }
  return v1;
}

//----- (0076BC80) --------------------------------------------------------
signed int __cdecl flush_mbuffer_to_file(int a1)
{
  int v1; // ebx@1
  signed int result; // eax@3
  int v3; // edx@4
  int v4; // [sp+10h] [bp-Ch]@1

  v1 = *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20);
  if ( ownWriteFile(*(HANDLE *)(a1 + 60), (LPCVOID)(a1 + 64), *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20), (LPDWORD)&v4)
    && v1 == v4 )
  {
    v3 = *(_DWORD *)(a1 + 20);
    result = 0;
    *(_DWORD *)(a1 + 16) = v3;
    *(_DWORD *)(a1 + 24) = *(_DWORD *)(a1 + 32) + v3;
  }
  else
  {
    result = -23;
  }
  return result;
}

//----- (0076BCE0) --------------------------------------------------------
signed int __cdecl Set_Encode_Fast_Path(struct _JPEG_PROPERTIES *a1)
{
  void *v1; // edx@1
  signed int result; // eax@1
  int v3; // ebx@2
  int v4; // ebx@4
  int v5; // ebx@12
  int v6; // ebx@17
  int v7; // ebx@24
  _FRAME_COMPONENT *v8; // ebp@37
  int v9; // ebx@37
  _IJL_COLOR v10; // ebp@55
  _FRAME_COMPONENT *v11; // ebp@59
  int v12; // ebx@59
  _FRAME_COMPONENT *v13; // ebp@74
  int v14; // ebx@74
  _FRAME_COMPONENT *v15; // ebp@89
  int v16; // ebx@89
  _FRAME_COMPONENT *v17; // ebp@105
  int v18; // ebx@105
  _IJL_COLOR v19; // ebx@131

  v1 = a1->state.ctx;
  result = 0;
  if ( a1->jinterleaveType )
  {
    a1->fast_processing = 0;
  }
  else
  {
    v3 = a1->upsampling_reqd;
    if ( v3 && a1->cconversion_reqd )
    {
      a1->fast_processing = 0;
      v4 = a1->jframe.ncomps;
      if ( v4 > 0 && v4 <= 255 )
      {
        if ( v4 == 3 )
        {
          v10 = a1->DIBColor;
          if ( v10 != 1 || a1->DIBChannels != 3 )
          {
            if ( v10 != 1 || a1->DIBChannels != 4 )
            {
              if ( v10 == 2 && a1->DIBChannels == 3 )
              {
                v11 = a1->jframe.comps;
                v12 = v11->hsampling;
                if ( v12 != 2
                  || v11->vsampling != 2
                  || v11[1].hsampling != 1
                  || v11[1].vsampling != 1
                  || v11[2].hsampling != 1
                  || v11[2].vsampling != 1 )
                {
                  if ( v12 == 2
                    && v11->vsampling == 1
                    && v11[1].hsampling == 1
                    && v11[1].vsampling == 1
                    && v11[2].hsampling == 1
                    && v11[2].vsampling == 1 )
                  {
                    a1->fast_processing = 6;
                    *((_DWORD *)v1 + 24) = BGR_to_YCbCr_422_MCU;
                  }
                }
                else
                {
                  a1->fast_processing = 4;
                  *((_DWORD *)v1 + 24) = BGR_to_YCbCr_411_MCU;
                }
              }
            }
            else
            {
              v13 = a1->jframe.comps;
              v14 = v13->hsampling;
              if ( v14 != 2
                || v13->vsampling != 2
                || v13[1].hsampling != 1
                || v13[1].vsampling != 1
                || v13[2].hsampling != 1
                || v13[2].vsampling != 1 )
              {
                if ( v14 == 2
                  && v13->vsampling == 1
                  && v13[1].hsampling == 1
                  && v13[1].vsampling == 1
                  && v13[2].hsampling == 1
                  && v13[2].vsampling == 1 )
                {
                  a1->fast_processing = 0;
                  *((_DWORD *)v1 + 24) = CC_SS_RGB_to_YCbCr_General_MCU;
                }
              }
              else
              {
                a1->fast_processing = 0;
                *((_DWORD *)v1 + 24) = CC_SS_RGB_to_YCbCr_General_MCU;
              }
            }
          }
          else
          {
            v15 = a1->jframe.comps;
            v16 = v15->hsampling;
            if ( v16 != 2
              || v15->vsampling != 2
              || v15[1].hsampling != 1
              || v15[1].vsampling != 1
              || v15[2].hsampling != 1
              || v15[2].vsampling != 1 )
            {
              if ( v16 == 2
                && v15->vsampling == 1
                && v15[1].hsampling == 1
                && v15[1].vsampling == 1
                && v15[2].hsampling == 1
                && v15[2].vsampling == 1 )
              {
                a1->fast_processing = 5;
                *((_DWORD *)v1 + 24) = RGB_to_YCbCr_422_MCU;
              }
            }
            else
            {
              a1->fast_processing = 3;
              *((_DWORD *)v1 + 24) = RGB_to_YCbCr_411_MCU;
            }
          }
        }
        else
        {
          if ( v4 == 4 && a1->DIBColor == 5 && a1->DIBChannels == 4 )
          {
            v8 = a1->jframe.comps;
            v9 = v8->hsampling;
            if ( v9 != 2
              || v8->vsampling != 2
              || v8[1].hsampling != 1
              || v8[1].vsampling != 1
              || v8[2].hsampling != 1
              || v8[2].vsampling != 1
              || v8[3].hsampling != 2
              || v8[3].vsampling != 2 )
            {
              if ( v9 == 2
                && v8->vsampling == 1
                && v8[1].hsampling == 1
                && v8[1].vsampling == 1
                && v8[2].hsampling == 1
                && v8[2].vsampling == 1
                && v8[3].hsampling == 2 )
              {
                if ( v8[3].vsampling == 1 )
                {
                  a1->fast_processing = 12;
                  *((_DWORD *)v1 + 24) = RGBA_FPX_to_YCbCrA_FPX_4224_MCU;
                }
              }
            }
            else
            {
              a1->fast_processing = 11;
              *((_DWORD *)v1 + 24) = RGBA_FPX_to_YCbCrA_FPX_4114_MCU;
            }
          }
        }
      }
      else
      {
        result = -14;
      }
    }
    else
    {
      if ( !v3 || a1->cconversion_reqd )
      {
        if ( v3 || !a1->cconversion_reqd )
        {
          if ( v3 )
          {
            a1->fast_processing = 0;
          }
          else
          {
            if ( a1->cconversion_reqd )
            {
              a1->fast_processing = 0;
            }
            else
            {
              v7 = a1->jframe.ncomps;
              if ( v7 != 1 || a1->DIBColor != 4 || a1->JPGColor != 4 )
              {
                if ( v7 != 3 || a1->DIBChannels != 1 || a1->JPGColor != 3 )
                {
                  if ( v7 != 3 || a1->DIBChannels != 3 )
                  {
                    if ( v7 != 3 || a1->DIBChannels != 4 )
                    {
                      if ( v7 == 4 )
                      {
                        a1->fast_processing = 14;
                        *((_DWORD *)v1 + 24) = OTHER_to_OTHER_1111_MCU;
                      }
                      else
                      {
                        a1->fast_processing = 0;
                        if ( a1->JPGColor == 255 && a1->DIBColor == 255 )
                          *((_DWORD *)v1 + 24) = Input_Interleave_General_MCU;
                      }
                    }
                    else
                    {
                      a1->fast_processing = 0;
                      *((_DWORD *)v1 + 24) = Input_Interleave_General_MCU;
                    }
                  }
                  else
                  {
                    if ( a1->DIBColor == 2 )
                    {
                      a1->fast_processing = 0;
                      *((_DWORD *)v1 + 24) = Input_Interleave_General_MCU;
                    }
                    else
                    {
                      a1->fast_processing = 15;
                      *((_DWORD *)v1 + 24) = OTHER_to_OTHER_111_MCU;
                    }
                  }
                }
                else
                {
                  a1->fast_processing = 0;
                  *((_DWORD *)v1 + 24) = Input_Interleave_General_MCU;
                }
              }
              else
              {
                a1->fast_processing = 20;
                *((_DWORD *)v1 + 24) = Y_to_Y_111_MCU;
              }
            }
          }
        }
        else
        {
          v6 = a1->jframe.ncomps;
          if ( v6 != 1 || a1->DIBChannels != 3 )
          {
            if ( v6 != 3 || a1->DIBChannels != 3 )
            {
              if ( v6 != 3 || a1->DIBChannels != 4 )
              {
                if ( v6 == 4 )
                {
                  if ( a1->DIBChannels == 4 )
                  {
                    if ( a1->DIBColor == 5 )
                    {
                      a1->fast_processing = 10;
                      *((_DWORD *)v1 + 24) = RGBA_FPX_to_YCbCrA_FPX_1111_MCU;
                    }
                    else
                    {
                      a1->fast_processing = 0;
                    }
                  }
                  else
                  {
                    a1->fast_processing = 0;
                  }
                }
                else
                {
                  a1->fast_processing = 0;
                }
              }
              else
              {
                a1->fast_processing = 0;
                *((_DWORD *)v1 + 24) = CC_SS_RGB_to_YCbCr_General_MCU;
              }
            }
            else
            {
              v19 = a1->DIBColor;
              if ( v19 == 1 )
              {
                a1->fast_processing = 1;
                *((_DWORD *)v1 + 24) = RGB_to_YCbCr_111_MCU;
              }
              else
              {
                if ( v19 == 2 )
                {
                  a1->fast_processing = 2;
                  *((_DWORD *)v1 + 24) = BGR_to_YCbCr_111_MCU;
                }
                else
                {
                  a1->fast_processing = 0;
                }
              }
            }
          }
          else
          {
            a1->fast_processing = 0;
            *((_DWORD *)v1 + 24) = CC_RGB_to_YCbCr_General_MCU;
          }
        }
      }
      else
      {
        a1->fast_processing = 0;
        v5 = a1->jframe.ncomps;
        if ( v5 != 3 || a1->DIBChannels != 1 )
        {
          if ( v5 != 3 || a1->DIBChannels != 3 || a1->DIBColor == 2 )
          {
            *((_DWORD *)v1 + 24) = SS_General_MCU;
          }
          else
          {
            v17 = a1->jframe.comps;
            v18 = v17->hsampling;
            if ( v18 == 2
              && v17->vsampling == 2
              && v17[1].hsampling == 1
              && v17[1].vsampling == 1
              && v17[2].hsampling == 1
              && v17[2].vsampling == 1 )
            {
              a1->fast_processing = 16;
              *((_DWORD *)v1 + 24) = OTHER_to_OTHER_411_MCU;
              v17 = a1->jframe.comps;
              v18 = v17->hsampling;
            }
            if ( v18 == 2
              && v17->vsampling == 1
              && v17[1].hsampling == 1
              && v17[1].vsampling == 1
              && v17[2].hsampling == 1
              && v17[2].vsampling == 1 )
            {
              if ( a1->DIBSubsampling == 2 )
              {
                a1->fast_processing = 18;
                *((_DWORD *)v1 + 24) = YCbYCr_to_YCbCr_422_MCU;
              }
              else
              {
                a1->fast_processing = 17;
                *((_DWORD *)v1 + 24) = OTHER_to_OTHER_422_MCU;
              }
            }
          }
        }
        else
        {
          *((_DWORD *)v1 + 24) = SS_General_MCU;
        }
      }
    }
  }
  return result;
}

//----- (0076C3A0) --------------------------------------------------------
unsigned int __cdecl sub_76C3A0(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  int v13; // ebx@5
  int v14; // ebp@5
  int v15; // ecx@5
  unsigned int v16; // edx@5
  int v17; // esi@8
  int v18; // edx@8
  int v19; // ecx@14
  __int16 v20; // di@15
  __int16 v21; // si@15
  __int16 v22; // bp@15
  __int16 v23; // bx@15
  signed int v24; // edx@16
  char v25; // [sp+1Fh] [bp-1ADh]@1
  unsigned int v26; // [sp+1A0h] [bp-2Ch]@8
  int v27; // [sp+1A4h] [bp-28h]@4
  int v28; // [sp+1A8h] [bp-24h]@4
  int v29; // [sp+1ACh] [bp-20h]@4
  int v30; // [sp+1B0h] [bp-1Ch]@4
  int v31; // [sp+1B4h] [bp-18h]@4
  unsigned int v32; // [sp+1B8h] [bp-14h]@2

  result = (unsigned int)&v25 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v32 = (unsigned int)&v25 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v30 = v7;
        v29 = v8;
        v31 = 0;
        v27 = v9;
        v28 = v6;
        do
        {
          v13 = *(_BYTE *)(v11 + a1);
          v14 = *(_BYTE *)(v11 + a1 + 1);
          v15 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v32 + 2 * v12) = (150 * v14 + 77 * v13 + 29 * v15 - 32640) >> 8;
          v16 = v32;
          *(_WORD *)(v32 + 2 * v12 + 128) = (-85 * v14 + -43 * v13 + (v15 << 7) + 128) >> 8;
          *(_WORD *)(v16 + 2 * v12++ + 256) = (-107 * v14 + (v13 << 7) + -21 * v15 + 128) >> 8;
          v10 = v31++ + 1;
        }
        while ( v31 < a3 );
        v7 = v30;
        v8 = v29;
        v9 = v27;
        v6 = v28;
      }
      if ( v10 < 8 )
      {
        v26 = v32 + v9;
        v17 = v32 + 2 * (v10 + v8);
        v27 = v9;
        v28 = v6;
        v18 = v32 + v9;
        do
        {
          ++v10;
          *(_WORD *)v17 = *(_WORD *)(v18 + 2 * a3 - 2);
          *(_WORD *)(v17 + 128) = *(_WORD *)(v18 + 2 * a3 + 126);
          *(_WORD *)(v17 + 256) = *(_WORD *)(v18 + 2 * a3 + 254);
          v17 += 2;
        }
        while ( v10 < 8 );
        v9 = v27;
        v6 = v28;
      }
      v7 += a2;
      v8 += 8;
      v9 += 16;
      ++v6;
    }
    while ( v6 < a4 );
    result = v32;
  }
  if ( v6 < 8 )
  {
    v19 = result + 16 * v6;
    do
    {
      v20 = *(_WORD *)(v19 + 252);
      v21 = *(_WORD *)(v19 - 2);
      *(_WORD *)v19 = *(_WORD *)(v19 - 16);
      v22 = *(_WORD *)(v19 + 126);
      *(_WORD *)(v19 + 128) = *(_WORD *)(v19 + 112);
      ++v6;
      *(_WORD *)(v19 + 256) = *(_WORD *)(v19 + 240);
      *(_WORD *)(v19 + 2) = *(_WORD *)(v19 - 14);
      *(_WORD *)(v19 + 130) = *(_WORD *)(v19 + 114);
      *(_WORD *)(v19 + 258) = *(_WORD *)(v19 + 242);
      *(_WORD *)(v19 + 4) = *(_WORD *)(v19 - 12);
      *(_WORD *)(v19 + 132) = *(_WORD *)(v19 + 116);
      *(_WORD *)(v19 + 260) = *(_WORD *)(v19 + 244);
      *(_WORD *)(v19 + 6) = *(_WORD *)(v19 - 10);
      *(_WORD *)(v19 + 134) = *(_WORD *)(v19 + 118);
      *(_WORD *)(v19 + 262) = *(_WORD *)(v19 + 246);
      *(_WORD *)(v19 + 8) = *(_WORD *)(v19 - 8);
      *(_WORD *)(v19 + 136) = *(_WORD *)(v19 + 120);
      *(_WORD *)(v19 + 264) = *(_WORD *)(v19 + 248);
      *(_WORD *)(v19 + 10) = *(_WORD *)(v19 - 6);
      *(_WORD *)(v19 + 138) = *(_WORD *)(v19 + 122);
      *(_WORD *)(v19 + 266) = *(_WORD *)(v19 + 250);
      *(_WORD *)(v19 + 12) = *(_WORD *)(v19 - 4);
      *(_WORD *)(v19 + 140) = *(_WORD *)(v19 + 124);
      v23 = *(_WORD *)(v19 + 254);
      *(_WORD *)(v19 + 268) = v20;
      *(_WORD *)(v19 + 14) = v21;
      *(_WORD *)(v19 + 142) = v22;
      *(_WORD *)(v19 + 270) = v23;
      v19 += 16;
    }
    while ( v6 < 8 );
  }
  v24 = 0;
  do
  {
    *(_WORD *)(a5 + 2 * v24) = *(_WORD *)(result + 2 * v24);
    *(_WORD *)(a5 + 2 * v24 + 128) = *(_WORD *)(result + 2 * v24 + 128);
    *(_WORD *)(a5 + 2 * v24 + 256) = *(_WORD *)(result + 2 * v24 + 256);
    *(_WORD *)(a5 + 2 * v24 + 2) = *(_WORD *)(result + 2 * v24 + 2);
    *(_WORD *)(a5 + 2 * v24 + 130) = *(_WORD *)(result + 2 * v24 + 130);
    *(_WORD *)(a5 + 2 * v24 + 258) = *(_WORD *)(result + 2 * v24 + 258);
    *(_WORD *)(a5 + 2 * v24 + 4) = *(_WORD *)(result + 2 * v24 + 4);
    *(_WORD *)(a5 + 2 * v24 + 132) = *(_WORD *)(result + 2 * v24 + 132);
    *(_WORD *)(a5 + 2 * v24 + 260) = *(_WORD *)(result + 2 * v24 + 260);
    *(_WORD *)(a5 + 2 * v24 + 6) = *(_WORD *)(result + 2 * v24 + 6);
    *(_WORD *)(a5 + 2 * v24 + 134) = *(_WORD *)(result + 2 * v24 + 134);
    *(_WORD *)(a5 + 2 * v24 + 262) = *(_WORD *)(result + 2 * v24 + 262);
    *(_WORD *)(a5 + 2 * v24 + 8) = *(_WORD *)(result + 2 * v24 + 8);
    *(_WORD *)(a5 + 2 * v24 + 136) = *(_WORD *)(result + 2 * v24 + 136);
    *(_WORD *)(a5 + 2 * v24 + 264) = *(_WORD *)(result + 2 * v24 + 264);
    *(_WORD *)(a5 + 2 * v24 + 10) = *(_WORD *)(result + 2 * v24 + 10);
    *(_WORD *)(a5 + 2 * v24 + 138) = *(_WORD *)(result + 2 * v24 + 138);
    *(_WORD *)(a5 + 2 * v24 + 266) = *(_WORD *)(result + 2 * v24 + 266);
    *(_WORD *)(a5 + 2 * v24 + 12) = *(_WORD *)(result + 2 * v24 + 12);
    *(_WORD *)(a5 + 2 * v24 + 140) = *(_WORD *)(result + 2 * v24 + 140);
    *(_WORD *)(a5 + 2 * v24 + 268) = *(_WORD *)(result + 2 * v24 + 268);
    *(_WORD *)(a5 + 2 * v24 + 14) = *(_WORD *)(result + 2 * v24 + 14);
    *(_WORD *)(a5 + 2 * v24 + 142) = *(_WORD *)(result + 2 * v24 + 142);
    *(_WORD *)(a5 + 2 * v24 + 270) = *(_WORD *)(result + 2 * v24 + 270);
    v24 += 8;
  }
  while ( v24 < 64 );
  return result;
}

//----- (0076C810) --------------------------------------------------------
signed int __cdecl RGB_to_YCbCr_111_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // esi@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // edx@1
  signed int result; // eax@1

  v5 = a1;
  v6 = a3;
  v7 = a4;
  v8 = a5;
  result = 0;
  do
  {
    *(_WORD *)v6 = (150 * *(_BYTE *)(v5 + 1) + 77 * *(_BYTE *)v5 + 29 * *(_BYTE *)(v5 + 2) - 32640) >> 8;
    ++result;
    *(_WORD *)(v6 + 2) = (150 * *(_BYTE *)(v5 + 4) + 77 * *(_BYTE *)(v5 + 3) + 29 * *(_BYTE *)(v5 + 5) - 32640) >> 8;
    *(_WORD *)(v6 + 4) = (150 * *(_BYTE *)(v5 + 7) + 77 * *(_BYTE *)(v5 + 6) + 29 * *(_BYTE *)(v5 + 8) - 32640) >> 8;
    *(_WORD *)(v6 + 6) = (150 * *(_BYTE *)(v5 + 10) + 77 * *(_BYTE *)(v5 + 9) + 29 * *(_BYTE *)(v5 + 11) - 32640) >> 8;
    *(_WORD *)(v6 + 8) = (150 * *(_BYTE *)(v5 + 13) + 77 * *(_BYTE *)(v5 + 12) + 29 * *(_BYTE *)(v5 + 14) - 32640) >> 8;
    *(_WORD *)(v6 + 10) = (150 * *(_BYTE *)(v5 + 16) + 77 * *(_BYTE *)(v5 + 15) + 29 * *(_BYTE *)(v5 + 17) - 32640) >> 8;
    *(_WORD *)(v6 + 12) = (150 * *(_BYTE *)(v5 + 19) + 77 * *(_BYTE *)(v5 + 18) + 29 * *(_BYTE *)(v5 + 20) - 32640) >> 8;
    *(_WORD *)(v6 + 14) = (150 * *(_BYTE *)(v5 + 22) + 77 * *(_BYTE *)(v5 + 21) + 29 * *(_BYTE *)(v5 + 23) - 32640) >> 8;
    v6 += 16;
    *(_WORD *)v7 = (-85 * *(_BYTE *)(v5 + 1) + -43 * *(_BYTE *)v5 + (*(_BYTE *)(v5 + 2) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 2) = (-85 * *(_BYTE *)(v5 + 4) + -43 * *(_BYTE *)(v5 + 3) + (*(_BYTE *)(v5 + 5) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 4) = (-85 * *(_BYTE *)(v5 + 7) + -43 * *(_BYTE *)(v5 + 6) + (*(_BYTE *)(v5 + 8) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 6) = (-85 * *(_BYTE *)(v5 + 10) + -43 * *(_BYTE *)(v5 + 9) + (*(_BYTE *)(v5 + 11) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 8) = (-85 * *(_BYTE *)(v5 + 13) + -43 * *(_BYTE *)(v5 + 12) + (*(_BYTE *)(v5 + 14) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 10) = (-85 * *(_BYTE *)(v5 + 16) + -43 * *(_BYTE *)(v5 + 15) + (*(_BYTE *)(v5 + 17) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 12) = (-85 * *(_BYTE *)(v5 + 19) + -43 * *(_BYTE *)(v5 + 18) + (*(_BYTE *)(v5 + 20) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 14) = (-85 * *(_BYTE *)(v5 + 22) + -43 * *(_BYTE *)(v5 + 21) + (*(_BYTE *)(v5 + 23) << 7) + 128) >> 8;
    *(_WORD *)v8 = (-107 * *(_BYTE *)(v5 + 1) + (*(_BYTE *)v5 << 7) + -21 * *(_BYTE *)(v5 + 2) + 128) >> 8;
    v7 += 16;
    *(_WORD *)(v8 + 2) = (-107 * *(_BYTE *)(v5 + 4) + (*(_BYTE *)(v5 + 3) << 7) + -21 * *(_BYTE *)(v5 + 5) + 128) >> 8;
    *(_WORD *)(v8 + 4) = (-107 * *(_BYTE *)(v5 + 7) + (*(_BYTE *)(v5 + 6) << 7) + -21 * *(_BYTE *)(v5 + 8) + 128) >> 8;
    *(_WORD *)(v8 + 6) = (-107 * *(_BYTE *)(v5 + 10) + (*(_BYTE *)(v5 + 9) << 7) + -21 * *(_BYTE *)(v5 + 11) + 128) >> 8;
    *(_WORD *)(v8 + 8) = (-107 * *(_BYTE *)(v5 + 13) + (*(_BYTE *)(v5 + 12) << 7) + -21 * *(_BYTE *)(v5 + 14) + 128) >> 8;
    *(_WORD *)(v8 + 10) = (-107 * *(_BYTE *)(v5 + 16) + (*(_BYTE *)(v5 + 15) << 7) + -21 * *(_BYTE *)(v5 + 17) + 128) >> 8;
    *(_WORD *)(v8 + 12) = (-107 * *(_BYTE *)(v5 + 19) + (*(_BYTE *)(v5 + 18) << 7) + -21 * *(_BYTE *)(v5 + 20) + 128) >> 8;
    *(_WORD *)(v8 + 14) = (-107 * *(_BYTE *)(v5 + 22) + (*(_BYTE *)(v5 + 21) << 7) + -21 * *(_BYTE *)(v5 + 23) + 128) >> 8;
    v8 += 16;
    v5 += a2;
  }
  while ( result < 8 );
  return result;
}

//----- (0076CBE0) --------------------------------------------------------
void __cdecl RGB_to_YCbCr_111_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5)
{
  own_rgb_to_ycbcr_111_full_mcu_m5(a1, a2, a3, a4, a5);
}

//----- (0076CC20) --------------------------------------------------------
unsigned int __cdecl RGB_to_YCbCr_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 8;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 7) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 24);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 8 || v4 != 8 )
    result = sub_76C3A0(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 26))(v7, v5, v6, v6 + 128, v6 + 256);
  return result;
}

//----- (0076CD30) --------------------------------------------------------
unsigned int __cdecl sub_76CD30(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  int v13; // ebx@5
  int v14; // ebp@5
  int v15; // ecx@5
  int v16; // esi@8
  int v17; // edx@8
  int v18; // ecx@14
  __int16 v19; // di@15
  __int16 v20; // si@15
  __int16 v21; // bp@15
  __int16 v22; // bx@15
  signed int v23; // edx@16
  char v24; // [sp+1Fh] [bp-1ADh]@1
  unsigned int v25; // [sp+1A0h] [bp-2Ch]@8
  int v26; // [sp+1A4h] [bp-28h]@4
  int v27; // [sp+1A8h] [bp-24h]@4
  int v28; // [sp+1ACh] [bp-20h]@4
  int v29; // [sp+1B0h] [bp-1Ch]@4
  int v30; // [sp+1B4h] [bp-18h]@4
  unsigned int v31; // [sp+1B8h] [bp-14h]@2

  result = (unsigned int)&v24 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v31 = (unsigned int)&v24 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v29 = v7;
        v28 = v8;
        v30 = 0;
        v26 = v9;
        v27 = v6;
        do
        {
          v13 = *(_BYTE *)(v11 + a1);
          v14 = *(_BYTE *)(v11 + a1 + 1);
          v15 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v31 + 2 * v12) = (150 * v14 + 29 * v13 + 77 * v15 - 32640) >> 8;
          *(_WORD *)(v31 + 2 * v12 + 128) = (-85 * v14 + (v13 << 7) + -43 * v15 + 128) >> 8;
          *(_WORD *)(v31 + 2 * v12++ + 256) = (-107 * v14 + -21 * v13 + (v15 << 7) + 128) >> 8;
          v10 = v30++ + 1;
        }
        while ( v30 < a3 );
        v7 = v29;
        v8 = v28;
        v9 = v26;
        v6 = v27;
      }
      if ( v10 < 8 )
      {
        v25 = v31 + v9;
        v16 = v31 + 2 * (v10 + v8);
        v26 = v9;
        v27 = v6;
        v17 = v31 + v9;
        do
        {
          ++v10;
          *(_WORD *)v16 = *(_WORD *)(v17 + 2 * a3 - 2);
          *(_WORD *)(v16 + 128) = *(_WORD *)(v17 + 2 * a3 + 126);
          *(_WORD *)(v16 + 256) = *(_WORD *)(v17 + 2 * a3 + 254);
          v16 += 2;
        }
        while ( v10 < 8 );
        v9 = v26;
        v6 = v27;
      }
      v7 += a2;
      v8 += 8;
      v9 += 16;
      ++v6;
    }
    while ( v6 < a4 );
    result = v31;
  }
  if ( v6 < 8 )
  {
    v18 = result + 16 * v6;
    do
    {
      v19 = *(_WORD *)(v18 + 252);
      v20 = *(_WORD *)(v18 - 2);
      *(_WORD *)v18 = *(_WORD *)(v18 - 16);
      v21 = *(_WORD *)(v18 + 126);
      *(_WORD *)(v18 + 128) = *(_WORD *)(v18 + 112);
      ++v6;
      *(_WORD *)(v18 + 256) = *(_WORD *)(v18 + 240);
      *(_WORD *)(v18 + 2) = *(_WORD *)(v18 - 14);
      *(_WORD *)(v18 + 130) = *(_WORD *)(v18 + 114);
      *(_WORD *)(v18 + 258) = *(_WORD *)(v18 + 242);
      *(_WORD *)(v18 + 4) = *(_WORD *)(v18 - 12);
      *(_WORD *)(v18 + 132) = *(_WORD *)(v18 + 116);
      *(_WORD *)(v18 + 260) = *(_WORD *)(v18 + 244);
      *(_WORD *)(v18 + 6) = *(_WORD *)(v18 - 10);
      *(_WORD *)(v18 + 134) = *(_WORD *)(v18 + 118);
      *(_WORD *)(v18 + 262) = *(_WORD *)(v18 + 246);
      *(_WORD *)(v18 + 8) = *(_WORD *)(v18 - 8);
      *(_WORD *)(v18 + 136) = *(_WORD *)(v18 + 120);
      *(_WORD *)(v18 + 264) = *(_WORD *)(v18 + 248);
      *(_WORD *)(v18 + 10) = *(_WORD *)(v18 - 6);
      *(_WORD *)(v18 + 138) = *(_WORD *)(v18 + 122);
      *(_WORD *)(v18 + 266) = *(_WORD *)(v18 + 250);
      *(_WORD *)(v18 + 12) = *(_WORD *)(v18 - 4);
      *(_WORD *)(v18 + 140) = *(_WORD *)(v18 + 124);
      v22 = *(_WORD *)(v18 + 254);
      *(_WORD *)(v18 + 268) = v19;
      *(_WORD *)(v18 + 14) = v20;
      *(_WORD *)(v18 + 142) = v21;
      *(_WORD *)(v18 + 270) = v22;
      v18 += 16;
    }
    while ( v6 < 8 );
  }
  v23 = 0;
  do
  {
    *(_WORD *)(a5 + 2 * v23) = *(_WORD *)(result + 2 * v23);
    *(_WORD *)(a5 + 2 * v23 + 128) = *(_WORD *)(result + 2 * v23 + 128);
    *(_WORD *)(a5 + 2 * v23 + 256) = *(_WORD *)(result + 2 * v23 + 256);
    *(_WORD *)(a5 + 2 * v23 + 2) = *(_WORD *)(result + 2 * v23 + 2);
    *(_WORD *)(a5 + 2 * v23 + 130) = *(_WORD *)(result + 2 * v23 + 130);
    *(_WORD *)(a5 + 2 * v23 + 258) = *(_WORD *)(result + 2 * v23 + 258);
    *(_WORD *)(a5 + 2 * v23 + 4) = *(_WORD *)(result + 2 * v23 + 4);
    *(_WORD *)(a5 + 2 * v23 + 132) = *(_WORD *)(result + 2 * v23 + 132);
    *(_WORD *)(a5 + 2 * v23 + 260) = *(_WORD *)(result + 2 * v23 + 260);
    *(_WORD *)(a5 + 2 * v23 + 6) = *(_WORD *)(result + 2 * v23 + 6);
    *(_WORD *)(a5 + 2 * v23 + 134) = *(_WORD *)(result + 2 * v23 + 134);
    *(_WORD *)(a5 + 2 * v23 + 262) = *(_WORD *)(result + 2 * v23 + 262);
    *(_WORD *)(a5 + 2 * v23 + 8) = *(_WORD *)(result + 2 * v23 + 8);
    *(_WORD *)(a5 + 2 * v23 + 136) = *(_WORD *)(result + 2 * v23 + 136);
    *(_WORD *)(a5 + 2 * v23 + 264) = *(_WORD *)(result + 2 * v23 + 264);
    *(_WORD *)(a5 + 2 * v23 + 10) = *(_WORD *)(result + 2 * v23 + 10);
    *(_WORD *)(a5 + 2 * v23 + 138) = *(_WORD *)(result + 2 * v23 + 138);
    *(_WORD *)(a5 + 2 * v23 + 266) = *(_WORD *)(result + 2 * v23 + 266);
    *(_WORD *)(a5 + 2 * v23 + 12) = *(_WORD *)(result + 2 * v23 + 12);
    *(_WORD *)(a5 + 2 * v23 + 140) = *(_WORD *)(result + 2 * v23 + 140);
    *(_WORD *)(a5 + 2 * v23 + 268) = *(_WORD *)(result + 2 * v23 + 268);
    *(_WORD *)(a5 + 2 * v23 + 14) = *(_WORD *)(result + 2 * v23 + 14);
    *(_WORD *)(a5 + 2 * v23 + 142) = *(_WORD *)(result + 2 * v23 + 142);
    *(_WORD *)(a5 + 2 * v23 + 270) = *(_WORD *)(result + 2 * v23 + 270);
    v23 += 8;
  }
  while ( v23 < 64 );
  return result;
}

//----- (0076D1B0) --------------------------------------------------------
signed int __cdecl BGR_to_YCbCr_111_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // esi@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // edx@1
  signed int result; // eax@1

  v5 = a1;
  v6 = a3;
  v7 = a4;
  v8 = a5;
  result = 0;
  do
  {
    *(_WORD *)v6 = (150 * *(_BYTE *)(v5 + 1) + 77 * *(_BYTE *)(v5 + 2) + 29 * *(_BYTE *)v5 - 32640) >> 8;
    ++result;
    *(_WORD *)(v6 + 2) = (150 * *(_BYTE *)(v5 + 4) + 77 * *(_BYTE *)(v5 + 5) + 29 * *(_BYTE *)(v5 + 3) - 32640) >> 8;
    *(_WORD *)(v6 + 4) = (150 * *(_BYTE *)(v5 + 7) + 77 * *(_BYTE *)(v5 + 8) + 29 * *(_BYTE *)(v5 + 6) - 32640) >> 8;
    *(_WORD *)(v6 + 6) = (150 * *(_BYTE *)(v5 + 10) + 77 * *(_BYTE *)(v5 + 11) + 29 * *(_BYTE *)(v5 + 9) - 32640) >> 8;
    *(_WORD *)(v6 + 8) = (150 * *(_BYTE *)(v5 + 13) + 77 * *(_BYTE *)(v5 + 14) + 29 * *(_BYTE *)(v5 + 12) - 32640) >> 8;
    *(_WORD *)(v6 + 10) = (150 * *(_BYTE *)(v5 + 16) + 77 * *(_BYTE *)(v5 + 17) + 29 * *(_BYTE *)(v5 + 15) - 32640) >> 8;
    *(_WORD *)(v6 + 12) = (150 * *(_BYTE *)(v5 + 19) + 77 * *(_BYTE *)(v5 + 20) + 29 * *(_BYTE *)(v5 + 18) - 32640) >> 8;
    *(_WORD *)(v6 + 14) = (150 * *(_BYTE *)(v5 + 22) + 77 * *(_BYTE *)(v5 + 23) + 29 * *(_BYTE *)(v5 + 21) - 32640) >> 8;
    v6 += 16;
    *(_WORD *)v7 = (-85 * *(_BYTE *)(v5 + 1) + -43 * *(_BYTE *)(v5 + 2) + (*(_BYTE *)v5 << 7) + 128) >> 8;
    *(_WORD *)(v7 + 2) = (-85 * *(_BYTE *)(v5 + 4) + -43 * *(_BYTE *)(v5 + 5) + (*(_BYTE *)(v5 + 3) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 4) = (-85 * *(_BYTE *)(v5 + 7) + -43 * *(_BYTE *)(v5 + 8) + (*(_BYTE *)(v5 + 6) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 6) = (-85 * *(_BYTE *)(v5 + 10) + -43 * *(_BYTE *)(v5 + 11) + (*(_BYTE *)(v5 + 9) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 8) = (-85 * *(_BYTE *)(v5 + 13) + -43 * *(_BYTE *)(v5 + 14) + (*(_BYTE *)(v5 + 12) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 10) = (-85 * *(_BYTE *)(v5 + 16) + -43 * *(_BYTE *)(v5 + 17) + (*(_BYTE *)(v5 + 15) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 12) = (-85 * *(_BYTE *)(v5 + 19) + -43 * *(_BYTE *)(v5 + 20) + (*(_BYTE *)(v5 + 18) << 7) + 128) >> 8;
    *(_WORD *)(v7 + 14) = (-85 * *(_BYTE *)(v5 + 22) + -43 * *(_BYTE *)(v5 + 23) + (*(_BYTE *)(v5 + 21) << 7) + 128) >> 8;
    *(_WORD *)v8 = (-107 * *(_BYTE *)(v5 + 1) + (*(_BYTE *)(v5 + 2) << 7) + -21 * *(_BYTE *)v5 + 128) >> 8;
    v7 += 16;
    *(_WORD *)(v8 + 2) = (-107 * *(_BYTE *)(v5 + 4) + (*(_BYTE *)(v5 + 5) << 7) + -21 * *(_BYTE *)(v5 + 3) + 128) >> 8;
    *(_WORD *)(v8 + 4) = (-107 * *(_BYTE *)(v5 + 7) + (*(_BYTE *)(v5 + 8) << 7) + -21 * *(_BYTE *)(v5 + 6) + 128) >> 8;
    *(_WORD *)(v8 + 6) = (-107 * *(_BYTE *)(v5 + 10) + (*(_BYTE *)(v5 + 11) << 7) + -21 * *(_BYTE *)(v5 + 9) + 128) >> 8;
    *(_WORD *)(v8 + 8) = (-107 * *(_BYTE *)(v5 + 13) + (*(_BYTE *)(v5 + 14) << 7) + -21 * *(_BYTE *)(v5 + 12) + 128) >> 8;
    *(_WORD *)(v8 + 10) = (-107 * *(_BYTE *)(v5 + 16) + (*(_BYTE *)(v5 + 17) << 7) + -21 * *(_BYTE *)(v5 + 15) + 128) >> 8;
    *(_WORD *)(v8 + 12) = (-107 * *(_BYTE *)(v5 + 19) + (*(_BYTE *)(v5 + 20) << 7) + -21 * *(_BYTE *)(v5 + 18) + 128) >> 8;
    *(_WORD *)(v8 + 14) = (-107 * *(_BYTE *)(v5 + 22) + (*(_BYTE *)(v5 + 23) << 7) + -21 * *(_BYTE *)(v5 + 21) + 128) >> 8;
    v8 += 16;
    v5 += a2;
  }
  while ( result < 8 );
  return result;
}

//----- (0076D580) --------------------------------------------------------
void __cdecl BGR_to_YCbCr_111_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5)
{
  own_bgr_to_ycbcr_111_full_mcu_m5(a1, a2, a3, a4, a5);
}

//----- (0076D5C0) --------------------------------------------------------
unsigned int __cdecl BGR_to_YCbCr_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 8;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 7) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 24);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 8 || v4 != 8 )
    result = sub_76CD30(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 29))(v7, v5, v6, v6 + 128, v6 + 256);
  return result;
}

//----- (0076D6D0) --------------------------------------------------------
int __cdecl sub_76D6D0(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int v5; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  int v13; // ebx@5
  int v14; // ebp@5
  int v15; // ecx@5
  unsigned int v16; // edx@5
  int v17; // esi@8
  int v18; // edx@8
  int v19; // ecx@14
  __int16 v20; // di@15
  __int16 v21; // si@15
  __int16 v22; // bp@15
  __int16 v23; // bx@15
  int v24; // edx@16
  int v25; // ecx@16
  int v26; // ebx@16
  int v27; // edi@17
  int v28; // esi@17
  int v29; // ebp@17
  int result; // eax@17
  __int16 v31; // cx@18
  char v32; // [sp+1Fh] [bp-62Dh]@1
  int v33; // [sp+620h] [bp-2Ch]@4
  int v34; // [sp+624h] [bp-28h]@8
  unsigned int v35; // [sp+628h] [bp-24h]@2
  int v36; // [sp+62Ch] [bp-20h]@4
  int v37; // [sp+630h] [bp-1Ch]@4
  int v38; // [sp+634h] [bp-18h]@4
  int v39; // [sp+638h] [bp-14h]@4

  v5 = (unsigned int)&v32 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v35 = (unsigned int)&v32 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v38 = v7;
        v37 = v8;
        v39 = 0;
        v33 = v9;
        v36 = v6;
        do
        {
          v13 = *(_BYTE *)(v11 + a1);
          v14 = *(_BYTE *)(v11 + a1 + 1);
          v15 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v35 + 2 * v12) = (150 * v14 + 77 * v13 + 29 * v15 - 32640) >> 8;
          v16 = v35;
          *(_WORD *)(v35 + 2 * v12 + 512) = (-85 * v14 + -43 * v13 + (v15 << 7) + 128) >> 8;
          *(_WORD *)(v16 + 2 * v12++ + 1024) = (-107 * v14 + (v13 << 7) + -21 * v15 + 128) >> 8;
          v10 = v39++ + 1;
        }
        while ( v39 < a3 );
        v7 = v38;
        v8 = v37;
        v9 = v33;
        v6 = v36;
      }
      if ( v10 < 16 )
      {
        v34 = v35 + v9;
        v17 = v35 + 2 * (v10 + v8);
        v33 = v9;
        v36 = v6;
        v18 = v35 + v9;
        do
        {
          ++v10;
          *(_WORD *)v17 = *(_WORD *)(v18 + 2 * a3 - 2);
          *(_WORD *)(v17 + 512) = *(_WORD *)(v18 + 2 * a3 + 510);
          *(_WORD *)(v17 + 1024) = *(_WORD *)(v18 + 2 * a3 + 1022);
          v17 += 2;
        }
        while ( v10 < 16 );
        v9 = v33;
        v6 = v36;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    v5 = v35;
  }
  if ( v6 < 16 )
  {
    v19 = v5 + 32 * v6;
    do
    {
      v20 = *(_WORD *)(v19 + 1020);
      v21 = *(_WORD *)(v19 - 2);
      *(_WORD *)v19 = *(_WORD *)(v19 - 32);
      v22 = *(_WORD *)(v19 + 510);
      *(_WORD *)(v19 + 512) = *(_WORD *)(v19 + 480);
      ++v6;
      *(_WORD *)(v19 + 1024) = *(_WORD *)(v19 + 992);
      *(_WORD *)(v19 + 2) = *(_WORD *)(v19 - 30);
      *(_WORD *)(v19 + 514) = *(_WORD *)(v19 + 482);
      *(_WORD *)(v19 + 1026) = *(_WORD *)(v19 + 994);
      *(_WORD *)(v19 + 4) = *(_WORD *)(v19 - 28);
      *(_WORD *)(v19 + 516) = *(_WORD *)(v19 + 484);
      *(_WORD *)(v19 + 1028) = *(_WORD *)(v19 + 996);
      *(_WORD *)(v19 + 6) = *(_WORD *)(v19 - 26);
      *(_WORD *)(v19 + 518) = *(_WORD *)(v19 + 486);
      *(_WORD *)(v19 + 1030) = *(_WORD *)(v19 + 998);
      *(_WORD *)(v19 + 8) = *(_WORD *)(v19 - 24);
      *(_WORD *)(v19 + 520) = *(_WORD *)(v19 + 488);
      *(_WORD *)(v19 + 1032) = *(_WORD *)(v19 + 1000);
      *(_WORD *)(v19 + 10) = *(_WORD *)(v19 - 22);
      *(_WORD *)(v19 + 522) = *(_WORD *)(v19 + 490);
      *(_WORD *)(v19 + 1034) = *(_WORD *)(v19 + 1002);
      *(_WORD *)(v19 + 12) = *(_WORD *)(v19 - 20);
      *(_WORD *)(v19 + 524) = *(_WORD *)(v19 + 492);
      *(_WORD *)(v19 + 1036) = *(_WORD *)(v19 + 1004);
      *(_WORD *)(v19 + 14) = *(_WORD *)(v19 - 18);
      *(_WORD *)(v19 + 526) = *(_WORD *)(v19 + 494);
      *(_WORD *)(v19 + 1038) = *(_WORD *)(v19 + 1006);
      *(_WORD *)(v19 + 16) = *(_WORD *)(v19 - 16);
      *(_WORD *)(v19 + 528) = *(_WORD *)(v19 + 496);
      *(_WORD *)(v19 + 1040) = *(_WORD *)(v19 + 1008);
      *(_WORD *)(v19 + 18) = *(_WORD *)(v19 - 14);
      *(_WORD *)(v19 + 530) = *(_WORD *)(v19 + 498);
      *(_WORD *)(v19 + 1042) = *(_WORD *)(v19 + 1010);
      *(_WORD *)(v19 + 20) = *(_WORD *)(v19 - 12);
      *(_WORD *)(v19 + 532) = *(_WORD *)(v19 + 500);
      *(_WORD *)(v19 + 1044) = *(_WORD *)(v19 + 1012);
      *(_WORD *)(v19 + 22) = *(_WORD *)(v19 - 10);
      *(_WORD *)(v19 + 534) = *(_WORD *)(v19 + 502);
      *(_WORD *)(v19 + 1046) = *(_WORD *)(v19 + 1014);
      *(_WORD *)(v19 + 24) = *(_WORD *)(v19 - 8);
      *(_WORD *)(v19 + 536) = *(_WORD *)(v19 + 504);
      *(_WORD *)(v19 + 1048) = *(_WORD *)(v19 + 1016);
      *(_WORD *)(v19 + 26) = *(_WORD *)(v19 - 6);
      *(_WORD *)(v19 + 538) = *(_WORD *)(v19 + 506);
      *(_WORD *)(v19 + 1050) = *(_WORD *)(v19 + 1018);
      *(_WORD *)(v19 + 28) = *(_WORD *)(v19 - 4);
      *(_WORD *)(v19 + 540) = *(_WORD *)(v19 + 508);
      v23 = *(_WORD *)(v19 + 1022);
      *(_WORD *)(v19 + 1052) = v20;
      *(_WORD *)(v19 + 30) = v21;
      *(_WORD *)(v19 + 542) = v22;
      *(_WORD *)(v19 + 1054) = v23;
      v19 += 32;
    }
    while ( v6 < 16 );
  }
  v24 = 0;
  v25 = 0;
  v26 = 0;
  v35 = v5;
  do
  {
    v27 = a5 + 2 * v24;
    v28 = v35 + 2 * v25;
    v29 = v35 + 2 * v26;
    result = v29 + 32;
    v33 = v25;
    v34 = v26;
    do
    {
      *(_WORD *)v27 = *(_WORD *)v28;
      *(_WORD *)(v27 + 128) = *(_WORD *)(v28 + 16);
      *(_WORD *)(v27 + 256) = *(_WORD *)(v28 + 256);
      v31 = *(_WORD *)(v28 + 272);
      v28 += 2;
      *(_WORD *)(v27 + 384) = v31;
      *(_WORD *)(v27 + 512) = (*(_WORD *)(v29 + 544)
                             + *(_WORD *)(v29 + 514)
                             + (signed int)*(_WORD *)(v29 + 512)
                             + *(_WORD *)(v29 + 546)
                             + 2) >> 2;
      *(_WORD *)(v27 + 640) = (*(_WORD *)(v29 + 1056)
                             + *(_WORD *)(v29 + 1026)
                             + (signed int)*(_WORD *)(v29 + 1024)
                             + *(_WORD *)(v29 + 1058)
                             + 2) >> 2;
      v27 += 2;
      v29 += 4;
    }
    while ( result > v29 );
    v24 += 8;
    v25 = v33 + 16;
    v26 = v34 + 32;
  }
  while ( v34 + 32 < 256 );
  return result;
}

//----- (0076DC20) --------------------------------------------------------
int __cdecl sub_76DC20(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // edx@1
  int v6; // ecx@1
  int v7; // eax@2
  int v8; // ST60_4@2
  int v9; // ST5C_4@2
  int v10; // ST58_4@2
  int v11; // ST54_4@2
  int v12; // ST50_4@2
  int v13; // ST4C_4@2
  int v14; // ST48_4@2
  int v15; // ST44_4@2
  int v16; // ST40_4@2
  int v17; // ST3C_4@2
  int v18; // ST38_4@2
  int v19; // ST34_4@2
  int v20; // ST30_4@2
  int v21; // ST2C_4@2
  int v22; // ST24_4@2
  int v23; // ST20_4@2
  int v24; // ST1C_4@2
  int v25; // ST18_4@2
  int v26; // ST14_4@2
  int v27; // ST10_4@2
  int v28; // ST0C_4@2
  int v29; // ST08_4@2
  int v30; // ST04_4@2
  int v31; // edx@2
  int v32; // esi@2
  int v33; // ebp@2
  int v34; // ebx@2
  int v35; // esi@2
  int v36; // ebp@2
  int v37; // ebx@2
  int v38; // esi@2
  int v39; // ebp@2
  int v40; // ebx@2
  int v41; // esi@2
  int v42; // ebp@2
  int v43; // ebx@2
  int v44; // esi@2
  int v45; // ebp@2
  int v46; // ebx@2
  int v47; // esi@2
  int v48; // ebp@2
  int v49; // ebx@2
  int v50; // ebp@2
  int v51; // ebx@2
  int v52; // eax@2
  int v53; // esi@2
  int v54; // ebp@2
  int v55; // ebx@2
  int result; // eax@2
  bool v57; // sf@2
  unsigned __int8 v58; // of@2
  int v59; // [sp+28h] [bp-54h]@1
  int v60; // [sp+64h] [bp-18h]@1
  int v61; // [sp+68h] [bp-14h]@1

  v5 = a1;
  v6 = a3;
  v59 = 0;
  v60 = a5;
  v61 = a4;
  do
  {
    *(_WORD *)v6 = (150 * *(_BYTE *)(v5 + 1) + 77 * *(_BYTE *)v5 + 29 * *(_BYTE *)(v5 + 2) - 32640) >> 8;
    *(_WORD *)(v6 + 2) = (150 * *(_BYTE *)(v5 + 4) + 77 * *(_BYTE *)(v5 + 3) + 29 * *(_BYTE *)(v5 + 5) - 32640) >> 8;
    *(_WORD *)(v6 + 4) = (150 * *(_BYTE *)(v5 + 7) + 77 * *(_BYTE *)(v5 + 6) + 29 * *(_BYTE *)(v5 + 8) - 32640) >> 8;
    *(_WORD *)(v6 + 6) = (150 * *(_BYTE *)(v5 + 10) + 77 * *(_BYTE *)(v5 + 9) + 29 * *(_BYTE *)(v5 + 11) - 32640) >> 8;
    *(_WORD *)(v6 + 8) = (150 * *(_BYTE *)(v5 + 13) + 77 * *(_BYTE *)(v5 + 12) + 29 * *(_BYTE *)(v5 + 14) - 32640) >> 8;
    *(_WORD *)(v6 + 10) = (150 * *(_BYTE *)(v5 + 16) + 77 * *(_BYTE *)(v5 + 15) + 29 * *(_BYTE *)(v5 + 17) - 32640) >> 8;
    *(_WORD *)(v6 + 12) = (150 * *(_BYTE *)(v5 + 19) + 77 * *(_BYTE *)(v5 + 18) + 29 * *(_BYTE *)(v5 + 20) - 32640) >> 8;
    *(_WORD *)(v6 + 14) = (150 * *(_BYTE *)(v5 + 22) + 77 * *(_BYTE *)(v5 + 21) + 29 * *(_BYTE *)(v5 + 23) - 32640) >> 8;
    *(_WORD *)(v6 + 128) = (150 * *(_BYTE *)(v5 + 25) + 77 * *(_BYTE *)(v5 + 24) + 29 * *(_BYTE *)(v5 + 26) - 32640) >> 8;
    *(_WORD *)(v6 + 130) = (150 * *(_BYTE *)(v5 + 28) + 77 * *(_BYTE *)(v5 + 27) + 29 * *(_BYTE *)(v5 + 29) - 32640) >> 8;
    *(_WORD *)(v6 + 132) = (150 * *(_BYTE *)(v5 + 31) + 77 * *(_BYTE *)(v5 + 30) + 29 * *(_BYTE *)(v5 + 32) - 32640) >> 8;
    *(_WORD *)(v6 + 134) = (150 * *(_BYTE *)(v5 + 34) + 77 * *(_BYTE *)(v5 + 33) + 29 * *(_BYTE *)(v5 + 35) - 32640) >> 8;
    *(_WORD *)(v6 + 136) = (150 * *(_BYTE *)(v5 + 37) + 77 * *(_BYTE *)(v5 + 36) + 29 * *(_BYTE *)(v5 + 38) - 32640) >> 8;
    *(_WORD *)(v6 + 138) = (150 * *(_BYTE *)(v5 + 40) + 77 * *(_BYTE *)(v5 + 39) + 29 * *(_BYTE *)(v5 + 41) - 32640) >> 8;
    *(_WORD *)(v6 + 140) = (150 * *(_BYTE *)(v5 + 43) + 77 * *(_BYTE *)(v5 + 42) + 29 * *(_BYTE *)(v5 + 44) - 32640) >> 8;
    *(_WORD *)(v6 + 142) = (150 * *(_BYTE *)(v5 + 46) + 77 * *(_BYTE *)(v5 + 45) + 29 * *(_BYTE *)(v5 + 47) - 32640) >> 8;
    v7 = *(_BYTE *)(v5 + 3) + *(_BYTE *)v5;
    v8 = *(_BYTE *)(v5 + 4) + *(_BYTE *)(v5 + 1);
    v9 = *(_BYTE *)(v5 + 5) + *(_BYTE *)(v5 + 2);
    v10 = *(_BYTE *)(v5 + 9) + *(_BYTE *)(v5 + 6);
    v11 = *(_BYTE *)(v5 + 10) + *(_BYTE *)(v5 + 7);
    v12 = *(_BYTE *)(v5 + 11) + *(_BYTE *)(v5 + 8);
    v13 = *(_BYTE *)(v5 + 15) + *(_BYTE *)(v5 + 12);
    v14 = *(_BYTE *)(v5 + 16) + *(_BYTE *)(v5 + 13);
    v15 = *(_BYTE *)(v5 + 17) + *(_BYTE *)(v5 + 14);
    v16 = *(_BYTE *)(v5 + 21) + *(_BYTE *)(v5 + 18);
    v17 = *(_BYTE *)(v5 + 22) + *(_BYTE *)(v5 + 19);
    v18 = *(_BYTE *)(v5 + 23) + *(_BYTE *)(v5 + 20);
    v19 = *(_BYTE *)(v5 + 27) + *(_BYTE *)(v5 + 24);
    v20 = *(_BYTE *)(v5 + 28) + *(_BYTE *)(v5 + 25);
    v21 = *(_BYTE *)(v5 + 29) + *(_BYTE *)(v5 + 26);
    v22 = *(_BYTE *)(v5 + 33) + *(_BYTE *)(v5 + 30);
    v23 = *(_BYTE *)(v5 + 34) + *(_BYTE *)(v5 + 31);
    v24 = *(_BYTE *)(v5 + 35) + *(_BYTE *)(v5 + 32);
    v25 = *(_BYTE *)(v5 + 39) + *(_BYTE *)(v5 + 36);
    v26 = *(_BYTE *)(v5 + 40) + *(_BYTE *)(v5 + 37);
    v27 = *(_BYTE *)(v5 + 41) + *(_BYTE *)(v5 + 38);
    v28 = *(_BYTE *)(v5 + 45) + *(_BYTE *)(v5 + 42);
    v29 = *(_BYTE *)(v5 + 46) + *(_BYTE *)(v5 + 43);
    v30 = *(_BYTE *)(v5 + 47) + *(_BYTE *)(v5 + 44);
    v31 = a2 + v5;
    *(_WORD *)(v6 + 16) = (150 * *(_BYTE *)(v31 + 1) + 77 * *(_BYTE *)v31 + 29 * *(_BYTE *)(v31 + 2) - 32640) >> 8;
    *(_WORD *)(v6 + 18) = (150 * *(_BYTE *)(v31 + 4) + 77 * *(_BYTE *)(v31 + 3) + 29 * *(_BYTE *)(v31 + 5) - 32640) >> 8;
    *(_WORD *)(v6 + 20) = (150 * *(_BYTE *)(v31 + 7) + 77 * *(_BYTE *)(v31 + 6) + 29 * *(_BYTE *)(v31 + 8) - 32640) >> 8;
    *(_WORD *)(v6 + 22) = (150 * *(_BYTE *)(v31 + 10) + 77 * *(_BYTE *)(v31 + 9) + 29 * *(_BYTE *)(v31 + 11) - 32640) >> 8;
    *(_WORD *)(v6 + 24) = (150 * *(_BYTE *)(v31 + 13) + 77 * *(_BYTE *)(v31 + 12) + 29 * *(_BYTE *)(v31 + 14) - 32640) >> 8;
    *(_WORD *)(v6 + 26) = (150 * *(_BYTE *)(v31 + 16) + 77 * *(_BYTE *)(v31 + 15) + 29 * *(_BYTE *)(v31 + 17) - 32640) >> 8;
    *(_WORD *)(v6 + 28) = (150 * *(_BYTE *)(v31 + 19) + 77 * *(_BYTE *)(v31 + 18) + 29 * *(_BYTE *)(v31 + 20) - 32640) >> 8;
    *(_WORD *)(v6 + 30) = (150 * *(_BYTE *)(v31 + 22) + 77 * *(_BYTE *)(v31 + 21) + 29 * *(_BYTE *)(v31 + 23) - 32640) >> 8;
    *(_WORD *)(v6 + 144) = (150 * *(_BYTE *)(v31 + 25) + 77 * *(_BYTE *)(v31 + 24) + 29 * *(_BYTE *)(v31 + 26) - 32640) >> 8;
    *(_WORD *)(v6 + 146) = (150 * *(_BYTE *)(v31 + 28) + 77 * *(_BYTE *)(v31 + 27) + 29 * *(_BYTE *)(v31 + 29) - 32640) >> 8;
    *(_WORD *)(v6 + 148) = (150 * *(_BYTE *)(v31 + 31) + 77 * *(_BYTE *)(v31 + 30) + 29 * *(_BYTE *)(v31 + 32) - 32640) >> 8;
    *(_WORD *)(v6 + 150) = (150 * *(_BYTE *)(v31 + 34) + 77 * *(_BYTE *)(v31 + 33) + 29 * *(_BYTE *)(v31 + 35) - 32640) >> 8;
    *(_WORD *)(v6 + 152) = (150 * *(_BYTE *)(v31 + 37) + 77 * *(_BYTE *)(v31 + 36) + 29 * *(_BYTE *)(v31 + 38) - 32640) >> 8;
    *(_WORD *)(v6 + 154) = (150 * *(_BYTE *)(v31 + 40) + 77 * *(_BYTE *)(v31 + 39) + 29 * *(_BYTE *)(v31 + 41) - 32640) >> 8;
    *(_WORD *)(v6 + 156) = (150 * *(_BYTE *)(v31 + 43) + 77 * *(_BYTE *)(v31 + 42) + 29 * *(_BYTE *)(v31 + 44) - 32640) >> 8;
    *(_WORD *)(v6 + 158) = (150 * *(_BYTE *)(v31 + 46) + 77 * *(_BYTE *)(v31 + 45) + 29 * *(_BYTE *)(v31 + 47) - 32640) >> 8;
    v32 = v7 + *(_BYTE *)(v31 + 3) + *(_BYTE *)v31;
    v33 = v8 + *(_BYTE *)(v31 + 4) + *(_BYTE *)(v31 + 1);
    v34 = v9 + *(_BYTE *)(v31 + 5) + *(_BYTE *)(v31 + 2);
    *(_WORD *)v61 = (-85 * v33 + -43 * v32 + ((v9 + *(_BYTE *)(v31 + 5) + *(_BYTE *)(v31 + 2)) << 7) + 512) >> 10;
    v6 += 32;
    *(_WORD *)v60 = (-107 * v33 + (v32 << 7) + -21 * v34 + 512) >> 10;
    v35 = v10 + *(_BYTE *)(v31 + 9) + *(_BYTE *)(v31 + 6);
    v36 = v11 + *(_BYTE *)(v31 + 10) + *(_BYTE *)(v31 + 7);
    v37 = v12 + *(_BYTE *)(v31 + 11) + *(_BYTE *)(v31 + 8);
    *(_WORD *)(v61 + 2) = (-85 * v36 + -43 * v35 + ((v12 + *(_BYTE *)(v31 + 11) + *(_BYTE *)(v31 + 8)) << 7) + 512) >> 10;
    *(_WORD *)(v60 + 2) = (-107 * v36 + (v35 << 7) + -21 * v37 + 512) >> 10;
    v38 = v13 + *(_BYTE *)(v31 + 15) + *(_BYTE *)(v31 + 12);
    v39 = v14 + *(_BYTE *)(v31 + 16) + *(_BYTE *)(v31 + 13);
    v40 = v15 + *(_BYTE *)(v31 + 17) + *(_BYTE *)(v31 + 14);
    *(_WORD *)(v61 + 4) = (-85 * v39 + -43 * v38 + ((v15 + *(_BYTE *)(v31 + 17) + *(_BYTE *)(v31 + 14)) << 7) + 512) >> 10;
    *(_WORD *)(v60 + 4) = (-107 * v39 + (v38 << 7) + -21 * v40 + 512) >> 10;
    v41 = v16 + *(_BYTE *)(v31 + 21) + *(_BYTE *)(v31 + 18);
    v42 = v17 + *(_BYTE *)(v31 + 22) + *(_BYTE *)(v31 + 19);
    v43 = v18 + *(_BYTE *)(v31 + 23) + *(_BYTE *)(v31 + 20);
    *(_WORD *)(v61 + 6) = (-85 * v42 + -43 * v41 + ((v18 + *(_BYTE *)(v31 + 23) + *(_BYTE *)(v31 + 20)) << 7) + 512) >> 10;
    *(_WORD *)(v60 + 6) = (-107 * v42 + (v41 << 7) + -21 * v43 + 512) >> 10;
    v44 = v19 + *(_BYTE *)(v31 + 27) + *(_BYTE *)(v31 + 24);
    v45 = v20 + *(_BYTE *)(v31 + 28) + *(_BYTE *)(v31 + 25);
    v46 = v21 + *(_BYTE *)(v31 + 29) + *(_BYTE *)(v31 + 26);
    *(_WORD *)(v61 + 8) = (-85 * v45 + -43 * v44 + ((v21 + *(_BYTE *)(v31 + 29) + *(_BYTE *)(v31 + 26)) << 7) + 512) >> 10;
    *(_WORD *)(v60 + 8) = (-107 * v45 + (v44 << 7) + -21 * v46 + 512) >> 10;
    v47 = v22 + *(_BYTE *)(v31 + 33) + *(_BYTE *)(v31 + 30);
    v48 = v23 + *(_BYTE *)(v31 + 34) + *(_BYTE *)(v31 + 31);
    v49 = v24 + *(_BYTE *)(v31 + 35) + *(_BYTE *)(v31 + 32);
    *(_WORD *)(v61 + 10) = (-85 * v48 + -43 * v47 + ((v24 + *(_BYTE *)(v31 + 35) + *(_BYTE *)(v31 + 32)) << 7) + 512) >> 10;
    *(_WORD *)(v60 + 10) = (-107 * v48 + (v47 << 7) + -21 * v49 + 512) >> 10;
    v50 = v25 + *(_BYTE *)(v31 + 39) + *(_BYTE *)(v31 + 36);
    v51 = v26 + *(_BYTE *)(v31 + 40) + *(_BYTE *)(v31 + 37);
    v52 = v27 + *(_BYTE *)(v31 + 41) + *(_BYTE *)(v31 + 38);
    *(_WORD *)(v61 + 12) = (-85 * v51 + -43 * v50 + ((v27 + *(_BYTE *)(v31 + 41) + *(_BYTE *)(v31 + 38)) << 7) + 512) >> 10;
    *(_WORD *)(v60 + 12) = (-107 * v51 + (v50 << 7) + -21 * v52 + 512) >> 10;
    v53 = v28 + *(_BYTE *)(v31 + 45) + *(_BYTE *)(v31 + 42);
    v54 = v29 + *(_BYTE *)(v31 + 46) + *(_BYTE *)(v31 + 43);
    v55 = v30 + *(_BYTE *)(v31 + 47) + *(_BYTE *)(v31 + 44);
    *(_WORD *)(v61 + 14) = (-85 * v54 + -43 * v53 + ((v30 + *(_BYTE *)(v31 + 47) + *(_BYTE *)(v31 + 44)) << 7) + 512) >> 10;
    *(_WORD *)(v60 + 14) = (-107 * v54 + (v53 << 7) + -21 * v55 + 512) >> 10;
    result = v59 + 2;
    v61 += 16;
    v60 += 16;
    v5 = a2 + v31;
    v58 = __OFSUB__(v59 + 2, 8);
    v57 = v59 - 6 < 0;
    v59 += 2;
  }
  while ( v57 ^ v58 );
  return result;
}

//----- (0076E640) --------------------------------------------------------
int __cdecl RGB_to_YCbCr_411_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5)
{
  sub_76DC20(a1, a2, a3, a4, a5);
  return sub_76DC20(a1 + 8 * a2, a2, a3 + 256, a4 + 64, a5 + 64);
}

//----- (0076E6B0) --------------------------------------------------------
void __cdecl RGB_to_YCbCr_411_Full_MCU_M5(int a1, int a2, int a3, int a4)
{
  int v4; // edi@1

  own_rgb_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)a1, a2, a3, a4);
  own_rgb_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)(a1 + 24), a2, a3 + 128, a4 + 8);
  v4 = a1 + 8 * a2;
  own_rgb_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)v4, a2, a3 + 256, a4 + 64);
  own_rgb_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)(v4 + 24), a2, a3 + 384, a4 + 72);
}

//----- (0076E750) --------------------------------------------------------
int __cdecl RGB_to_YCbCr_411_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 16;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (16 * a3 + 16)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 48);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 0xF) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 16 )
    result = sub_76D6D0(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 28))(v7, v5, v6, v6 + 512, v6 + 640);
  return result;
}

//----- (0076E850) --------------------------------------------------------
int __cdecl sub_76E850(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int v5; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  int v13; // ebx@5
  int v14; // ebp@5
  int v15; // ecx@5
  int v16; // esi@8
  int v17; // edx@8
  int v18; // ecx@14
  __int16 v19; // di@15
  __int16 v20; // si@15
  __int16 v21; // bp@15
  __int16 v22; // bx@15
  int v23; // edx@16
  int v24; // ecx@16
  int v25; // ebx@16
  int v26; // edi@17
  int v27; // esi@17
  int v28; // ebp@17
  int result; // eax@17
  __int16 v30; // cx@18
  char v31; // [sp+1Fh] [bp-62Dh]@1
  int v32; // [sp+620h] [bp-2Ch]@4
  int v33; // [sp+624h] [bp-28h]@8
  unsigned int v34; // [sp+628h] [bp-24h]@2
  int v35; // [sp+62Ch] [bp-20h]@4
  int v36; // [sp+630h] [bp-1Ch]@4
  int v37; // [sp+634h] [bp-18h]@4
  int v38; // [sp+638h] [bp-14h]@4

  v5 = (unsigned int)&v31 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v34 = (unsigned int)&v31 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v37 = v7;
        v36 = v8;
        v38 = 0;
        v32 = v9;
        v35 = v6;
        do
        {
          v13 = *(_BYTE *)(v11 + a1);
          v14 = *(_BYTE *)(v11 + a1 + 1);
          v15 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v34 + 2 * v12) = (150 * v14 + 29 * v13 + 77 * v15 - 32640) >> 8;
          *(_WORD *)(v34 + 2 * v12 + 512) = (-85 * v14 + (v13 << 7) + -43 * v15 + 128) >> 8;
          *(_WORD *)(v34 + 2 * v12++ + 1024) = (-107 * v14 + -21 * v13 + (v15 << 7) + 128) >> 8;
          v10 = v38++ + 1;
        }
        while ( v38 < a3 );
        v7 = v37;
        v8 = v36;
        v9 = v32;
        v6 = v35;
      }
      if ( v10 < 16 )
      {
        v33 = v34 + v9;
        v16 = v34 + 2 * (v10 + v8);
        v32 = v9;
        v35 = v6;
        v17 = v34 + v9;
        do
        {
          ++v10;
          *(_WORD *)v16 = *(_WORD *)(v17 + 2 * a3 - 2);
          *(_WORD *)(v16 + 512) = *(_WORD *)(v17 + 2 * a3 + 510);
          *(_WORD *)(v16 + 1024) = *(_WORD *)(v17 + 2 * a3 + 1022);
          v16 += 2;
        }
        while ( v10 < 16 );
        v9 = v32;
        v6 = v35;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    v5 = v34;
  }
  if ( v6 < 16 )
  {
    v18 = v5 + 32 * v6;
    do
    {
      v19 = *(_WORD *)(v18 + 1020);
      v20 = *(_WORD *)(v18 - 2);
      *(_WORD *)v18 = *(_WORD *)(v18 - 32);
      v21 = *(_WORD *)(v18 + 510);
      *(_WORD *)(v18 + 512) = *(_WORD *)(v18 + 480);
      ++v6;
      *(_WORD *)(v18 + 1024) = *(_WORD *)(v18 + 992);
      *(_WORD *)(v18 + 2) = *(_WORD *)(v18 - 30);
      *(_WORD *)(v18 + 514) = *(_WORD *)(v18 + 482);
      *(_WORD *)(v18 + 1026) = *(_WORD *)(v18 + 994);
      *(_WORD *)(v18 + 4) = *(_WORD *)(v18 - 28);
      *(_WORD *)(v18 + 516) = *(_WORD *)(v18 + 484);
      *(_WORD *)(v18 + 1028) = *(_WORD *)(v18 + 996);
      *(_WORD *)(v18 + 6) = *(_WORD *)(v18 - 26);
      *(_WORD *)(v18 + 518) = *(_WORD *)(v18 + 486);
      *(_WORD *)(v18 + 1030) = *(_WORD *)(v18 + 998);
      *(_WORD *)(v18 + 8) = *(_WORD *)(v18 - 24);
      *(_WORD *)(v18 + 520) = *(_WORD *)(v18 + 488);
      *(_WORD *)(v18 + 1032) = *(_WORD *)(v18 + 1000);
      *(_WORD *)(v18 + 10) = *(_WORD *)(v18 - 22);
      *(_WORD *)(v18 + 522) = *(_WORD *)(v18 + 490);
      *(_WORD *)(v18 + 1034) = *(_WORD *)(v18 + 1002);
      *(_WORD *)(v18 + 12) = *(_WORD *)(v18 - 20);
      *(_WORD *)(v18 + 524) = *(_WORD *)(v18 + 492);
      *(_WORD *)(v18 + 1036) = *(_WORD *)(v18 + 1004);
      *(_WORD *)(v18 + 14) = *(_WORD *)(v18 - 18);
      *(_WORD *)(v18 + 526) = *(_WORD *)(v18 + 494);
      *(_WORD *)(v18 + 1038) = *(_WORD *)(v18 + 1006);
      *(_WORD *)(v18 + 16) = *(_WORD *)(v18 - 16);
      *(_WORD *)(v18 + 528) = *(_WORD *)(v18 + 496);
      *(_WORD *)(v18 + 1040) = *(_WORD *)(v18 + 1008);
      *(_WORD *)(v18 + 18) = *(_WORD *)(v18 - 14);
      *(_WORD *)(v18 + 530) = *(_WORD *)(v18 + 498);
      *(_WORD *)(v18 + 1042) = *(_WORD *)(v18 + 1010);
      *(_WORD *)(v18 + 20) = *(_WORD *)(v18 - 12);
      *(_WORD *)(v18 + 532) = *(_WORD *)(v18 + 500);
      *(_WORD *)(v18 + 1044) = *(_WORD *)(v18 + 1012);
      *(_WORD *)(v18 + 22) = *(_WORD *)(v18 - 10);
      *(_WORD *)(v18 + 534) = *(_WORD *)(v18 + 502);
      *(_WORD *)(v18 + 1046) = *(_WORD *)(v18 + 1014);
      *(_WORD *)(v18 + 24) = *(_WORD *)(v18 - 8);
      *(_WORD *)(v18 + 536) = *(_WORD *)(v18 + 504);
      *(_WORD *)(v18 + 1048) = *(_WORD *)(v18 + 1016);
      *(_WORD *)(v18 + 26) = *(_WORD *)(v18 - 6);
      *(_WORD *)(v18 + 538) = *(_WORD *)(v18 + 506);
      *(_WORD *)(v18 + 1050) = *(_WORD *)(v18 + 1018);
      *(_WORD *)(v18 + 28) = *(_WORD *)(v18 - 4);
      *(_WORD *)(v18 + 540) = *(_WORD *)(v18 + 508);
      v22 = *(_WORD *)(v18 + 1022);
      *(_WORD *)(v18 + 1052) = v19;
      *(_WORD *)(v18 + 30) = v20;
      *(_WORD *)(v18 + 542) = v21;
      *(_WORD *)(v18 + 1054) = v22;
      v18 += 32;
    }
    while ( v6 < 16 );
  }
  v23 = 0;
  v24 = 0;
  v25 = 0;
  v34 = v5;
  do
  {
    v26 = a5 + 2 * v23;
    v27 = v34 + 2 * v24;
    v28 = v34 + 2 * v25;
    result = v28 + 32;
    v32 = v24;
    v33 = v25;
    do
    {
      *(_WORD *)v26 = *(_WORD *)v27;
      *(_WORD *)(v26 + 128) = *(_WORD *)(v27 + 16);
      *(_WORD *)(v26 + 256) = *(_WORD *)(v27 + 256);
      v30 = *(_WORD *)(v27 + 272);
      v27 += 2;
      *(_WORD *)(v26 + 384) = v30;
      *(_WORD *)(v26 + 512) = (*(_WORD *)(v28 + 544)
                             + *(_WORD *)(v28 + 514)
                             + (signed int)*(_WORD *)(v28 + 512)
                             + *(_WORD *)(v28 + 546)
                             + 2) >> 2;
      *(_WORD *)(v26 + 640) = (*(_WORD *)(v28 + 1056)
                             + *(_WORD *)(v28 + 1026)
                             + (signed int)*(_WORD *)(v28 + 1024)
                             + *(_WORD *)(v28 + 1058)
                             + 2) >> 2;
      v26 += 2;
      v28 += 4;
    }
    while ( result > v28 );
    v23 += 8;
    v24 = v32 + 16;
    v25 = v33 + 32;
  }
  while ( v33 + 32 < 256 );
  return result;
}

//----- (0076EDA0) --------------------------------------------------------
int __cdecl sub_76EDA0(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // edx@1
  int v6; // ecx@1
  int v7; // eax@2
  int v8; // ST60_4@2
  int v9; // ST5C_4@2
  int v10; // ST58_4@2
  int v11; // ST54_4@2
  int v12; // ST50_4@2
  int v13; // ST4C_4@2
  int v14; // ST48_4@2
  int v15; // ST44_4@2
  int v16; // ST40_4@2
  int v17; // ST3C_4@2
  int v18; // ST38_4@2
  int v19; // ST34_4@2
  int v20; // ST30_4@2
  int v21; // ST2C_4@2
  int v22; // ST24_4@2
  int v23; // ST20_4@2
  int v24; // ST1C_4@2
  int v25; // ST18_4@2
  int v26; // ST14_4@2
  int v27; // ST10_4@2
  int v28; // ST0C_4@2
  int v29; // ST08_4@2
  int v30; // ST04_4@2
  int v31; // edx@2
  int v32; // esi@2
  int v33; // ebp@2
  int v34; // ebx@2
  int v35; // esi@2
  int v36; // ebp@2
  int v37; // ebx@2
  int v38; // esi@2
  int v39; // ebp@2
  int v40; // ebx@2
  int v41; // esi@2
  int v42; // ebp@2
  int v43; // ebx@2
  int v44; // esi@2
  int v45; // ebp@2
  int v46; // ebx@2
  int v47; // esi@2
  int v48; // ebp@2
  int v49; // ebx@2
  int v50; // ebp@2
  int v51; // ebx@2
  int v52; // eax@2
  int v53; // esi@2
  int v54; // ebp@2
  int v55; // ebx@2
  int result; // eax@2
  bool v57; // sf@2
  unsigned __int8 v58; // of@2
  int v59; // [sp+28h] [bp-54h]@1
  int v60; // [sp+64h] [bp-18h]@1
  int v61; // [sp+68h] [bp-14h]@1

  v5 = a1;
  v6 = a3;
  v59 = 0;
  v60 = a5;
  v61 = a4;
  do
  {
    *(_WORD *)v6 = (150 * *(_BYTE *)(v5 + 1) + 77 * *(_BYTE *)(v5 + 2) + 29 * *(_BYTE *)v5 - 32640) >> 8;
    *(_WORD *)(v6 + 2) = (150 * *(_BYTE *)(v5 + 4) + 77 * *(_BYTE *)(v5 + 5) + 29 * *(_BYTE *)(v5 + 3) - 32640) >> 8;
    *(_WORD *)(v6 + 4) = (150 * *(_BYTE *)(v5 + 7) + 77 * *(_BYTE *)(v5 + 8) + 29 * *(_BYTE *)(v5 + 6) - 32640) >> 8;
    *(_WORD *)(v6 + 6) = (150 * *(_BYTE *)(v5 + 10) + 77 * *(_BYTE *)(v5 + 11) + 29 * *(_BYTE *)(v5 + 9) - 32640) >> 8;
    *(_WORD *)(v6 + 8) = (150 * *(_BYTE *)(v5 + 13) + 77 * *(_BYTE *)(v5 + 14) + 29 * *(_BYTE *)(v5 + 12) - 32640) >> 8;
    *(_WORD *)(v6 + 10) = (150 * *(_BYTE *)(v5 + 16) + 77 * *(_BYTE *)(v5 + 17) + 29 * *(_BYTE *)(v5 + 15) - 32640) >> 8;
    *(_WORD *)(v6 + 12) = (150 * *(_BYTE *)(v5 + 19) + 77 * *(_BYTE *)(v5 + 20) + 29 * *(_BYTE *)(v5 + 18) - 32640) >> 8;
    *(_WORD *)(v6 + 14) = (150 * *(_BYTE *)(v5 + 22) + 77 * *(_BYTE *)(v5 + 23) + 29 * *(_BYTE *)(v5 + 21) - 32640) >> 8;
    *(_WORD *)(v6 + 128) = (150 * *(_BYTE *)(v5 + 25) + 77 * *(_BYTE *)(v5 + 26) + 29 * *(_BYTE *)(v5 + 24) - 32640) >> 8;
    *(_WORD *)(v6 + 130) = (150 * *(_BYTE *)(v5 + 28) + 77 * *(_BYTE *)(v5 + 29) + 29 * *(_BYTE *)(v5 + 27) - 32640) >> 8;
    *(_WORD *)(v6 + 132) = (150 * *(_BYTE *)(v5 + 31) + 77 * *(_BYTE *)(v5 + 32) + 29 * *(_BYTE *)(v5 + 30) - 32640) >> 8;
    *(_WORD *)(v6 + 134) = (150 * *(_BYTE *)(v5 + 34) + 77 * *(_BYTE *)(v5 + 35) + 29 * *(_BYTE *)(v5 + 33) - 32640) >> 8;
    *(_WORD *)(v6 + 136) = (150 * *(_BYTE *)(v5 + 37) + 77 * *(_BYTE *)(v5 + 38) + 29 * *(_BYTE *)(v5 + 36) - 32640) >> 8;
    *(_WORD *)(v6 + 138) = (150 * *(_BYTE *)(v5 + 40) + 77 * *(_BYTE *)(v5 + 41) + 29 * *(_BYTE *)(v5 + 39) - 32640) >> 8;
    *(_WORD *)(v6 + 140) = (150 * *(_BYTE *)(v5 + 43) + 77 * *(_BYTE *)(v5 + 44) + 29 * *(_BYTE *)(v5 + 42) - 32640) >> 8;
    *(_WORD *)(v6 + 142) = (150 * *(_BYTE *)(v5 + 46) + 77 * *(_BYTE *)(v5 + 47) + 29 * *(_BYTE *)(v5 + 45) - 32640) >> 8;
    v7 = *(_BYTE *)(v5 + 3) + *(_BYTE *)v5;
    v8 = *(_BYTE *)(v5 + 4) + *(_BYTE *)(v5 + 1);
    v9 = *(_BYTE *)(v5 + 5) + *(_BYTE *)(v5 + 2);
    v10 = *(_BYTE *)(v5 + 9) + *(_BYTE *)(v5 + 6);
    v11 = *(_BYTE *)(v5 + 10) + *(_BYTE *)(v5 + 7);
    v12 = *(_BYTE *)(v5 + 11) + *(_BYTE *)(v5 + 8);
    v13 = *(_BYTE *)(v5 + 15) + *(_BYTE *)(v5 + 12);
    v14 = *(_BYTE *)(v5 + 16) + *(_BYTE *)(v5 + 13);
    v15 = *(_BYTE *)(v5 + 17) + *(_BYTE *)(v5 + 14);
    v16 = *(_BYTE *)(v5 + 21) + *(_BYTE *)(v5 + 18);
    v17 = *(_BYTE *)(v5 + 22) + *(_BYTE *)(v5 + 19);
    v18 = *(_BYTE *)(v5 + 23) + *(_BYTE *)(v5 + 20);
    v19 = *(_BYTE *)(v5 + 27) + *(_BYTE *)(v5 + 24);
    v20 = *(_BYTE *)(v5 + 28) + *(_BYTE *)(v5 + 25);
    v21 = *(_BYTE *)(v5 + 29) + *(_BYTE *)(v5 + 26);
    v22 = *(_BYTE *)(v5 + 33) + *(_BYTE *)(v5 + 30);
    v23 = *(_BYTE *)(v5 + 34) + *(_BYTE *)(v5 + 31);
    v24 = *(_BYTE *)(v5 + 35) + *(_BYTE *)(v5 + 32);
    v25 = *(_BYTE *)(v5 + 39) + *(_BYTE *)(v5 + 36);
    v26 = *(_BYTE *)(v5 + 40) + *(_BYTE *)(v5 + 37);
    v27 = *(_BYTE *)(v5 + 41) + *(_BYTE *)(v5 + 38);
    v28 = *(_BYTE *)(v5 + 45) + *(_BYTE *)(v5 + 42);
    v29 = *(_BYTE *)(v5 + 46) + *(_BYTE *)(v5 + 43);
    v30 = *(_BYTE *)(v5 + 47) + *(_BYTE *)(v5 + 44);
    v31 = a2 + v5;
    *(_WORD *)(v6 + 16) = (150 * *(_BYTE *)(v31 + 1) + 77 * *(_BYTE *)(v31 + 2) + 29 * *(_BYTE *)v31 - 32640) >> 8;
    *(_WORD *)(v6 + 18) = (150 * *(_BYTE *)(v31 + 4) + 77 * *(_BYTE *)(v31 + 5) + 29 * *(_BYTE *)(v31 + 3) - 32640) >> 8;
    *(_WORD *)(v6 + 20) = (150 * *(_BYTE *)(v31 + 7) + 77 * *(_BYTE *)(v31 + 8) + 29 * *(_BYTE *)(v31 + 6) - 32640) >> 8;
    *(_WORD *)(v6 + 22) = (150 * *(_BYTE *)(v31 + 10) + 77 * *(_BYTE *)(v31 + 11) + 29 * *(_BYTE *)(v31 + 9) - 32640) >> 8;
    *(_WORD *)(v6 + 24) = (150 * *(_BYTE *)(v31 + 13) + 77 * *(_BYTE *)(v31 + 14) + 29 * *(_BYTE *)(v31 + 12) - 32640) >> 8;
    *(_WORD *)(v6 + 26) = (150 * *(_BYTE *)(v31 + 16) + 77 * *(_BYTE *)(v31 + 17) + 29 * *(_BYTE *)(v31 + 15) - 32640) >> 8;
    *(_WORD *)(v6 + 28) = (150 * *(_BYTE *)(v31 + 19) + 77 * *(_BYTE *)(v31 + 20) + 29 * *(_BYTE *)(v31 + 18) - 32640) >> 8;
    *(_WORD *)(v6 + 30) = (150 * *(_BYTE *)(v31 + 22) + 77 * *(_BYTE *)(v31 + 23) + 29 * *(_BYTE *)(v31 + 21) - 32640) >> 8;
    *(_WORD *)(v6 + 144) = (150 * *(_BYTE *)(v31 + 25) + 77 * *(_BYTE *)(v31 + 26) + 29 * *(_BYTE *)(v31 + 24) - 32640) >> 8;
    *(_WORD *)(v6 + 146) = (150 * *(_BYTE *)(v31 + 28) + 77 * *(_BYTE *)(v31 + 29) + 29 * *(_BYTE *)(v31 + 27) - 32640) >> 8;
    *(_WORD *)(v6 + 148) = (150 * *(_BYTE *)(v31 + 31) + 77 * *(_BYTE *)(v31 + 32) + 29 * *(_BYTE *)(v31 + 30) - 32640) >> 8;
    *(_WORD *)(v6 + 150) = (150 * *(_BYTE *)(v31 + 34) + 77 * *(_BYTE *)(v31 + 35) + 29 * *(_BYTE *)(v31 + 33) - 32640) >> 8;
    *(_WORD *)(v6 + 152) = (150 * *(_BYTE *)(v31 + 37) + 77 * *(_BYTE *)(v31 + 38) + 29 * *(_BYTE *)(v31 + 36) - 32640) >> 8;
    *(_WORD *)(v6 + 154) = (150 * *(_BYTE *)(v31 + 40) + 77 * *(_BYTE *)(v31 + 41) + 29 * *(_BYTE *)(v31 + 39) - 32640) >> 8;
    *(_WORD *)(v6 + 156) = (150 * *(_BYTE *)(v31 + 43) + 77 * *(_BYTE *)(v31 + 44) + 29 * *(_BYTE *)(v31 + 42) - 32640) >> 8;
    *(_WORD *)(v6 + 158) = (150 * *(_BYTE *)(v31 + 46) + 77 * *(_BYTE *)(v31 + 47) + 29 * *(_BYTE *)(v31 + 45) - 32640) >> 8;
    v32 = v7 + *(_BYTE *)(v31 + 3) + *(_BYTE *)v31;
    v33 = v8 + *(_BYTE *)(v31 + 4) + *(_BYTE *)(v31 + 1);
    v34 = v9 + *(_BYTE *)(v31 + 5) + *(_BYTE *)(v31 + 2);
    *(_WORD *)v61 = (((v7 + *(_BYTE *)(v31 + 3) + *(_BYTE *)v31) << 7) + -43 * v34 + -85 * v33 + 512) >> 10;
    v6 += 32;
    *(_WORD *)v60 = (-21 * v32 + (v34 << 7) + -107 * v33 + 512) >> 10;
    v35 = v10 + *(_BYTE *)(v31 + 9) + *(_BYTE *)(v31 + 6);
    v36 = v11 + *(_BYTE *)(v31 + 10) + *(_BYTE *)(v31 + 7);
    v37 = v12 + *(_BYTE *)(v31 + 11) + *(_BYTE *)(v31 + 8);
    *(_WORD *)(v61 + 2) = (((v10 + *(_BYTE *)(v31 + 9) + *(_BYTE *)(v31 + 6)) << 7) + -43 * v37 + -85 * v36 + 512) >> 10;
    *(_WORD *)(v60 + 2) = (-21 * v35 + (v37 << 7) + -107 * v36 + 512) >> 10;
    v38 = v13 + *(_BYTE *)(v31 + 15) + *(_BYTE *)(v31 + 12);
    v39 = v14 + *(_BYTE *)(v31 + 16) + *(_BYTE *)(v31 + 13);
    v40 = v15 + *(_BYTE *)(v31 + 17) + *(_BYTE *)(v31 + 14);
    *(_WORD *)(v61 + 4) = (((v13 + *(_BYTE *)(v31 + 15) + *(_BYTE *)(v31 + 12)) << 7) + -43 * v40 + -85 * v39 + 512) >> 10;
    *(_WORD *)(v60 + 4) = (-21 * v38 + (v40 << 7) + -107 * v39 + 512) >> 10;
    v41 = v16 + *(_BYTE *)(v31 + 21) + *(_BYTE *)(v31 + 18);
    v42 = v17 + *(_BYTE *)(v31 + 22) + *(_BYTE *)(v31 + 19);
    v43 = v18 + *(_BYTE *)(v31 + 23) + *(_BYTE *)(v31 + 20);
    *(_WORD *)(v61 + 6) = (((v16 + *(_BYTE *)(v31 + 21) + *(_BYTE *)(v31 + 18)) << 7) + -43 * v43 + -85 * v42 + 512) >> 10;
    *(_WORD *)(v60 + 6) = (-21 * v41 + (v43 << 7) + -107 * v42 + 512) >> 10;
    v44 = v19 + *(_BYTE *)(v31 + 27) + *(_BYTE *)(v31 + 24);
    v45 = v20 + *(_BYTE *)(v31 + 28) + *(_BYTE *)(v31 + 25);
    v46 = v21 + *(_BYTE *)(v31 + 29) + *(_BYTE *)(v31 + 26);
    *(_WORD *)(v61 + 8) = (((v19 + *(_BYTE *)(v31 + 27) + *(_BYTE *)(v31 + 24)) << 7) + -43 * v46 + -85 * v45 + 512) >> 10;
    *(_WORD *)(v60 + 8) = (-21 * v44 + (v46 << 7) + -107 * v45 + 512) >> 10;
    v47 = v22 + *(_BYTE *)(v31 + 33) + *(_BYTE *)(v31 + 30);
    v48 = v23 + *(_BYTE *)(v31 + 34) + *(_BYTE *)(v31 + 31);
    v49 = v24 + *(_BYTE *)(v31 + 35) + *(_BYTE *)(v31 + 32);
    *(_WORD *)(v61 + 10) = (((v22 + *(_BYTE *)(v31 + 33) + *(_BYTE *)(v31 + 30)) << 7) + -43 * v49 + -85 * v48 + 512) >> 10;
    *(_WORD *)(v60 + 10) = (-21 * v47 + (v49 << 7) + -107 * v48 + 512) >> 10;
    v50 = v25 + *(_BYTE *)(v31 + 39) + *(_BYTE *)(v31 + 36);
    v51 = v26 + *(_BYTE *)(v31 + 40) + *(_BYTE *)(v31 + 37);
    v52 = v27 + *(_BYTE *)(v31 + 41) + *(_BYTE *)(v31 + 38);
    *(_WORD *)(v61 + 12) = (((v25 + *(_BYTE *)(v31 + 39) + *(_BYTE *)(v31 + 36)) << 7) + -43 * v52 + -85 * v51 + 512) >> 10;
    *(_WORD *)(v60 + 12) = (-21 * v50 + (v52 << 7) + -107 * v51 + 512) >> 10;
    v53 = v28 + *(_BYTE *)(v31 + 45) + *(_BYTE *)(v31 + 42);
    v54 = v29 + *(_BYTE *)(v31 + 46) + *(_BYTE *)(v31 + 43);
    v55 = v30 + *(_BYTE *)(v31 + 47) + *(_BYTE *)(v31 + 44);
    *(_WORD *)(v61 + 14) = (((v28 + *(_BYTE *)(v31 + 45) + *(_BYTE *)(v31 + 42)) << 7) + -43 * v55 + -85 * v54 + 512) >> 10;
    *(_WORD *)(v60 + 14) = (-21 * v53 + (v55 << 7) + -107 * v54 + 512) >> 10;
    result = v59 + 2;
    v61 += 16;
    v60 += 16;
    v5 = a2 + v31;
    v58 = __OFSUB__(v59 + 2, 8);
    v57 = v59 - 6 < 0;
    v59 += 2;
  }
  while ( v57 ^ v58 );
  return result;
}

//----- (0076F7C0) --------------------------------------------------------
int __cdecl BGR_to_YCbCr_411_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5)
{
  sub_76EDA0(a1, a2, a3, a4, a5);
  return sub_76EDA0(a1 + 8 * a2, a2, a3 + 256, a4 + 64, a5 + 64);
}

//----- (0076F830) --------------------------------------------------------
void __cdecl BGR_to_YCbCr_411_Full_MCU_M5(int a1, int a2, int a3, int a4)
{
  int v4; // edi@1

  own_bgr_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)a1, a2, a3, a4);
  own_bgr_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)(a1 + 24), a2, a3 + 128, a4 + 8);
  v4 = a1 + 8 * a2;
  own_bgr_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)v4, a2, a3 + 256, a4 + 64);
  own_bgr_to_ycbcr_411_one_quarter_mcu_m5((__m64 *)(v4 + 24), a2, a3 + 384, a4 + 72);
}

//----- (0076F8D0) --------------------------------------------------------
int __cdecl BGR_to_YCbCr_411_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 16;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (16 * a3 + 16)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 48);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 0xF) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 16 )
    result = sub_76E850(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 31))(v7, v5, v6, v6 + 512, v6 + 640);
  return result;
}

//----- (0076F9D0) --------------------------------------------------------
unsigned int __cdecl sub_76F9D0(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  int v13; // ebx@5
  int v14; // ebp@5
  int v15; // ecx@5
  unsigned int v16; // edx@5
  int v17; // esi@8
  int v18; // edx@8
  int v19; // ecx@14
  __int16 v20; // di@15
  __int16 v21; // si@15
  __int16 v22; // bp@15
  __int16 v23; // bx@15
  int v24; // ecx@16
  int v25; // edx@16
  int v26; // edi@17
  int v27; // esi@17
  int v28; // ebp@17
  int v29; // ebx@17
  __int16 v30; // ax@18
  int v31; // eax@18
  char v32; // [sp+1Fh] [bp-32Dh]@1
  int v33; // [sp+320h] [bp-2Ch]@8
  unsigned int v34; // [sp+324h] [bp-28h]@2
  int v35; // [sp+328h] [bp-24h]@4
  int v36; // [sp+32Ch] [bp-20h]@4
  int v37; // [sp+330h] [bp-1Ch]@4
  int v38; // [sp+334h] [bp-18h]@4
  int v39; // [sp+338h] [bp-14h]@4

  result = (unsigned int)&v32 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v34 = (unsigned int)&v32 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v38 = v7;
        v37 = v8;
        v39 = 0;
        v35 = v9;
        v36 = v6;
        do
        {
          v13 = *(_BYTE *)(v11 + a1);
          v14 = *(_BYTE *)(v11 + a1 + 1);
          v15 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v34 + 2 * v12) = (150 * v14 + 77 * v13 + 29 * v15 - 32640) >> 8;
          v16 = v34;
          *(_WORD *)(v34 + 2 * v12 + 256) = (-85 * v14 + -43 * v13 + (v15 << 7) + 128) >> 8;
          *(_WORD *)(v16 + 2 * v12++ + 512) = (-107 * v14 + (v13 << 7) + -21 * v15 + 128) >> 8;
          v10 = v39++ + 1;
        }
        while ( v39 < a3 );
        v7 = v38;
        v8 = v37;
        v9 = v35;
        v6 = v36;
      }
      if ( v10 < 16 )
      {
        v33 = v34 + v9;
        v17 = v34 + 2 * (v10 + v8);
        v35 = v9;
        v36 = v6;
        v18 = v34 + v9;
        do
        {
          ++v10;
          *(_WORD *)v17 = *(_WORD *)(v18 + 2 * a3 - 2);
          *(_WORD *)(v17 + 256) = *(_WORD *)(v18 + 2 * a3 + 254);
          *(_WORD *)(v17 + 512) = *(_WORD *)(v18 + 2 * a3 + 510);
          v17 += 2;
        }
        while ( v10 < 16 );
        v9 = v35;
        v6 = v36;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    result = v34;
  }
  if ( v6 < 8 )
  {
    v19 = result + 32 * v6;
    do
    {
      v20 = *(_WORD *)(v19 + 508);
      v21 = *(_WORD *)(v19 - 2);
      *(_WORD *)v19 = *(_WORD *)(v19 - 32);
      v22 = *(_WORD *)(v19 + 254);
      *(_WORD *)(v19 + 256) = *(_WORD *)(v19 + 224);
      ++v6;
      *(_WORD *)(v19 + 512) = *(_WORD *)(v19 + 480);
      *(_WORD *)(v19 + 2) = *(_WORD *)(v19 - 30);
      *(_WORD *)(v19 + 258) = *(_WORD *)(v19 + 226);
      *(_WORD *)(v19 + 514) = *(_WORD *)(v19 + 482);
      *(_WORD *)(v19 + 4) = *(_WORD *)(v19 - 28);
      *(_WORD *)(v19 + 260) = *(_WORD *)(v19 + 228);
      *(_WORD *)(v19 + 516) = *(_WORD *)(v19 + 484);
      *(_WORD *)(v19 + 6) = *(_WORD *)(v19 - 26);
      *(_WORD *)(v19 + 262) = *(_WORD *)(v19 + 230);
      *(_WORD *)(v19 + 518) = *(_WORD *)(v19 + 486);
      *(_WORD *)(v19 + 8) = *(_WORD *)(v19 - 24);
      *(_WORD *)(v19 + 264) = *(_WORD *)(v19 + 232);
      *(_WORD *)(v19 + 520) = *(_WORD *)(v19 + 488);
      *(_WORD *)(v19 + 10) = *(_WORD *)(v19 - 22);
      *(_WORD *)(v19 + 266) = *(_WORD *)(v19 + 234);
      *(_WORD *)(v19 + 522) = *(_WORD *)(v19 + 490);
      *(_WORD *)(v19 + 12) = *(_WORD *)(v19 - 20);
      *(_WORD *)(v19 + 268) = *(_WORD *)(v19 + 236);
      *(_WORD *)(v19 + 524) = *(_WORD *)(v19 + 492);
      *(_WORD *)(v19 + 14) = *(_WORD *)(v19 - 18);
      *(_WORD *)(v19 + 270) = *(_WORD *)(v19 + 238);
      *(_WORD *)(v19 + 526) = *(_WORD *)(v19 + 494);
      *(_WORD *)(v19 + 16) = *(_WORD *)(v19 - 16);
      *(_WORD *)(v19 + 272) = *(_WORD *)(v19 + 240);
      *(_WORD *)(v19 + 528) = *(_WORD *)(v19 + 496);
      *(_WORD *)(v19 + 18) = *(_WORD *)(v19 - 14);
      *(_WORD *)(v19 + 274) = *(_WORD *)(v19 + 242);
      *(_WORD *)(v19 + 530) = *(_WORD *)(v19 + 498);
      *(_WORD *)(v19 + 20) = *(_WORD *)(v19 - 12);
      *(_WORD *)(v19 + 276) = *(_WORD *)(v19 + 244);
      *(_WORD *)(v19 + 532) = *(_WORD *)(v19 + 500);
      *(_WORD *)(v19 + 22) = *(_WORD *)(v19 - 10);
      *(_WORD *)(v19 + 278) = *(_WORD *)(v19 + 246);
      *(_WORD *)(v19 + 534) = *(_WORD *)(v19 + 502);
      *(_WORD *)(v19 + 24) = *(_WORD *)(v19 - 8);
      *(_WORD *)(v19 + 280) = *(_WORD *)(v19 + 248);
      *(_WORD *)(v19 + 536) = *(_WORD *)(v19 + 504);
      *(_WORD *)(v19 + 26) = *(_WORD *)(v19 - 6);
      *(_WORD *)(v19 + 282) = *(_WORD *)(v19 + 250);
      *(_WORD *)(v19 + 538) = *(_WORD *)(v19 + 506);
      *(_WORD *)(v19 + 28) = *(_WORD *)(v19 - 4);
      *(_WORD *)(v19 + 284) = *(_WORD *)(v19 + 252);
      v23 = *(_WORD *)(v19 + 510);
      *(_WORD *)(v19 + 540) = v20;
      *(_WORD *)(v19 + 30) = v21;
      *(_WORD *)(v19 + 286) = v22;
      *(_WORD *)(v19 + 542) = v23;
      v19 += 32;
    }
    while ( v6 < 8 );
  }
  v24 = 0;
  v25 = 0;
  do
  {
    v26 = a5 + 2 * v24;
    v27 = result + 2 * v25;
    v28 = result + 2 * v25;
    v29 = result + 2 * v25 + 32;
    v33 = v25;
    v34 = result;
    do
    {
      *(_WORD *)v26 = *(_WORD *)v27;
      v30 = *(_WORD *)(v27 + 16);
      v27 += 2;
      *(_WORD *)(v26 + 128) = v30;
      *(_WORD *)(v26 + 256) = (*(_WORD *)(v28 + 256) + (signed int)*(_WORD *)(v28 + 258) + 1) >> 1;
      v31 = (*(_WORD *)(v28 + 512) + (signed int)*(_WORD *)(v28 + 514) + 1) >> 1;
      v28 += 4;
      *(_WORD *)(v26 + 384) = v31;
      v26 += 2;
    }
    while ( v29 > v28 );
    result = v34;
    v24 += 8;
    v25 = v33 + 16;
  }
  while ( v33 + 16 < 128 );
  return result;
}

//----- (0076FEC0) --------------------------------------------------------
int __cdecl RGB_to_YCbCr_422_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // edx@1
  int result; // eax@1
  int v7; // esi@2
  int v8; // ebp@2
  int v9; // ebx@2
  int v10; // esi@2
  int v11; // ebp@2
  int v12; // ebx@2
  int v13; // esi@2
  int v14; // ebp@2
  int v15; // ebx@2
  int v16; // esi@2
  int v17; // ebp@2
  int v18; // ebx@2
  int v19; // esi@2
  int v20; // ebp@2
  int v21; // ebx@2
  int v22; // esi@2
  int v23; // ebp@2
  int v24; // ebx@2
  int v25; // ebp@2
  int v26; // ebx@2
  int v27; // ecx@2
  int v28; // esi@2
  int v29; // ebp@2
  int v30; // ebx@2
  signed int v31; // [sp+4h] [bp-20h]@1
  int v32; // [sp+8h] [bp-1Ch]@1
  int v33; // [sp+Ch] [bp-18h]@1

  v5 = a1;
  result = a3;
  v31 = 0;
  v32 = a5;
  v33 = a4;
  do
  {
    *(_WORD *)result = (150 * *(_BYTE *)(v5 + 1) + 77 * *(_BYTE *)v5 + 29 * *(_BYTE *)(v5 + 2) - 32640) >> 8;
    *(_WORD *)(result + 2) = (150 * *(_BYTE *)(v5 + 4) + 77 * *(_BYTE *)(v5 + 3) + 29 * *(_BYTE *)(v5 + 5) - 32640) >> 8;
    *(_WORD *)(result + 4) = (150 * *(_BYTE *)(v5 + 7) + 77 * *(_BYTE *)(v5 + 6) + 29 * *(_BYTE *)(v5 + 8) - 32640) >> 8;
    *(_WORD *)(result + 6) = (150 * *(_BYTE *)(v5 + 10) + 77 * *(_BYTE *)(v5 + 9) + 29 * *(_BYTE *)(v5 + 11) - 32640) >> 8;
    *(_WORD *)(result + 8) = (150 * *(_BYTE *)(v5 + 13) + 77 * *(_BYTE *)(v5 + 12) + 29 * *(_BYTE *)(v5 + 14) - 32640) >> 8;
    *(_WORD *)(result + 10) = (150 * *(_BYTE *)(v5 + 16) + 77 * *(_BYTE *)(v5 + 15) + 29 * *(_BYTE *)(v5 + 17) - 32640) >> 8;
    *(_WORD *)(result + 12) = (150 * *(_BYTE *)(v5 + 19) + 77 * *(_BYTE *)(v5 + 18) + 29 * *(_BYTE *)(v5 + 20) - 32640) >> 8;
    *(_WORD *)(result + 14) = (150 * *(_BYTE *)(v5 + 22) + 77 * *(_BYTE *)(v5 + 21) + 29 * *(_BYTE *)(v5 + 23) - 32640) >> 8;
    *(_WORD *)(result + 128) = (150 * *(_BYTE *)(v5 + 25) + 77 * *(_BYTE *)(v5 + 24) + 29 * *(_BYTE *)(v5 + 26) - 32640) >> 8;
    *(_WORD *)(result + 130) = (150 * *(_BYTE *)(v5 + 28) + 77 * *(_BYTE *)(v5 + 27) + 29 * *(_BYTE *)(v5 + 29) - 32640) >> 8;
    *(_WORD *)(result + 132) = (150 * *(_BYTE *)(v5 + 31) + 77 * *(_BYTE *)(v5 + 30) + 29 * *(_BYTE *)(v5 + 32) - 32640) >> 8;
    *(_WORD *)(result + 134) = (150 * *(_BYTE *)(v5 + 34) + 77 * *(_BYTE *)(v5 + 33) + 29 * *(_BYTE *)(v5 + 35) - 32640) >> 8;
    *(_WORD *)(result + 136) = (150 * *(_BYTE *)(v5 + 37) + 77 * *(_BYTE *)(v5 + 36) + 29 * *(_BYTE *)(v5 + 38) - 32640) >> 8;
    *(_WORD *)(result + 138) = (150 * *(_BYTE *)(v5 + 40) + 77 * *(_BYTE *)(v5 + 39) + 29 * *(_BYTE *)(v5 + 41) - 32640) >> 8;
    *(_WORD *)(result + 140) = (150 * *(_BYTE *)(v5 + 43) + 77 * *(_BYTE *)(v5 + 42) + 29 * *(_BYTE *)(v5 + 44) - 32640) >> 8;
    *(_WORD *)(result + 142) = (150 * *(_BYTE *)(v5 + 46) + 77 * *(_BYTE *)(v5 + 45) + 29 * *(_BYTE *)(v5 + 47) - 32640) >> 8;
    v7 = *(_BYTE *)(v5 + 3) + *(_BYTE *)v5;
    v8 = *(_BYTE *)(v5 + 4) + *(_BYTE *)(v5 + 1);
    v9 = *(_BYTE *)(v5 + 5) + *(_BYTE *)(v5 + 2);
    *(_WORD *)v33 = (-85 * v8 + -43 * v7 + ((*(_BYTE *)(v5 + 5) + *(_BYTE *)(v5 + 2)) << 7) + 256) >> 9;
    result += 16;
    *(_WORD *)v32 = (-107 * v8 + (v7 << 7) + -21 * v9 + 256) >> 9;
    v10 = *(_BYTE *)(v5 + 9) + *(_BYTE *)(v5 + 6);
    v11 = *(_BYTE *)(v5 + 10) + *(_BYTE *)(v5 + 7);
    v12 = *(_BYTE *)(v5 + 11) + *(_BYTE *)(v5 + 8);
    *(_WORD *)(v33 + 2) = (-85 * v11 + -43 * v10 + ((*(_BYTE *)(v5 + 11) + *(_BYTE *)(v5 + 8)) << 7) + 256) >> 9;
    *(_WORD *)(v32 + 2) = (-107 * v11 + (v10 << 7) + -21 * v12 + 256) >> 9;
    v13 = *(_BYTE *)(v5 + 15) + *(_BYTE *)(v5 + 12);
    v14 = *(_BYTE *)(v5 + 16) + *(_BYTE *)(v5 + 13);
    v15 = *(_BYTE *)(v5 + 17) + *(_BYTE *)(v5 + 14);
    *(_WORD *)(v33 + 4) = (-85 * v14 + -43 * v13 + ((*(_BYTE *)(v5 + 17) + *(_BYTE *)(v5 + 14)) << 7) + 256) >> 9;
    *(_WORD *)(v32 + 4) = (-107 * v14 + (v13 << 7) + -21 * v15 + 256) >> 9;
    v16 = *(_BYTE *)(v5 + 21) + *(_BYTE *)(v5 + 18);
    v17 = *(_BYTE *)(v5 + 22) + *(_BYTE *)(v5 + 19);
    v18 = *(_BYTE *)(v5 + 23) + *(_BYTE *)(v5 + 20);
    *(_WORD *)(v33 + 6) = (-85 * v17 + -43 * v16 + ((*(_BYTE *)(v5 + 23) + *(_BYTE *)(v5 + 20)) << 7) + 256) >> 9;
    *(_WORD *)(v32 + 6) = (-107 * v17 + (v16 << 7) + -21 * v18 + 256) >> 9;
    v19 = *(_BYTE *)(v5 + 27) + *(_BYTE *)(v5 + 24);
    v20 = *(_BYTE *)(v5 + 28) + *(_BYTE *)(v5 + 25);
    v21 = *(_BYTE *)(v5 + 29) + *(_BYTE *)(v5 + 26);
    *(_WORD *)(v33 + 8) = (-85 * v20 + -43 * v19 + ((*(_BYTE *)(v5 + 29) + *(_BYTE *)(v5 + 26)) << 7) + 256) >> 9;
    *(_WORD *)(v32 + 8) = (-107 * v20 + (v19 << 7) + -21 * v21 + 256) >> 9;
    v22 = *(_BYTE *)(v5 + 33) + *(_BYTE *)(v5 + 30);
    v23 = *(_BYTE *)(v5 + 34) + *(_BYTE *)(v5 + 31);
    v24 = *(_BYTE *)(v5 + 35) + *(_BYTE *)(v5 + 32);
    *(_WORD *)(v33 + 10) = (-85 * v23 + -43 * v22 + ((*(_BYTE *)(v5 + 35) + *(_BYTE *)(v5 + 32)) << 7) + 256) >> 9;
    *(_WORD *)(v32 + 10) = (-107 * v23 + (v22 << 7) + -21 * v24 + 256) >> 9;
    v25 = *(_BYTE *)(v5 + 39) + *(_BYTE *)(v5 + 36);
    v26 = *(_BYTE *)(v5 + 40) + *(_BYTE *)(v5 + 37);
    v27 = *(_BYTE *)(v5 + 41) + *(_BYTE *)(v5 + 38);
    *(_WORD *)(v33 + 12) = (-85 * v26 + -43 * v25 + ((*(_BYTE *)(v5 + 41) + *(_BYTE *)(v5 + 38)) << 7) + 256) >> 9;
    *(_WORD *)(v32 + 12) = (-107 * v26 + (v25 << 7) + -21 * v27 + 256) >> 9;
    v28 = *(_BYTE *)(v5 + 45) + *(_BYTE *)(v5 + 42);
    v29 = *(_BYTE *)(v5 + 46) + *(_BYTE *)(v5 + 43);
    v30 = *(_BYTE *)(v5 + 47) + *(_BYTE *)(v5 + 44);
    *(_WORD *)(v33 + 14) = (-85 * v29 + -43 * v28 + ((*(_BYTE *)(v5 + 47) + *(_BYTE *)(v5 + 44)) << 7) + 256) >> 9;
    *(_WORD *)(v32 + 14) = (-107 * v29 + (v28 << 7) + -21 * v30 + 256) >> 9;
    v33 += 16;
    v32 += 16;
    v5 += a2;
    ++v31;
  }
  while ( v31 < 8 );
  return result;
}

//----- (00770480) --------------------------------------------------------
void __cdecl RGB_to_YCbCr_422_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5)
{
  own_rgb_to_ycbcr_422_full_mcu_m5(a1, a2, a3, a4, a5);
}

//----- (007704C0) --------------------------------------------------------
unsigned int __cdecl RGB_to_YCbCr_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 48);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 8 )
    result = sub_76F9D0(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 27))(v7, v5, v6, v6 + 256, v6 + 384);
  return result;
}

//----- (007705D0) --------------------------------------------------------
unsigned int __cdecl sub_7705D0(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  int v13; // ebx@5
  int v14; // ebp@5
  int v15; // ecx@5
  int v16; // esi@8
  int v17; // edx@8
  int v18; // ecx@14
  __int16 v19; // di@15
  __int16 v20; // si@15
  __int16 v21; // bp@15
  __int16 v22; // bx@15
  int v23; // ecx@16
  int v24; // edx@16
  int v25; // edi@17
  int v26; // esi@17
  int v27; // ebp@17
  int v28; // ebx@17
  __int16 v29; // ax@18
  int v30; // eax@18
  char v31; // [sp+1Fh] [bp-32Dh]@1
  int v32; // [sp+320h] [bp-2Ch]@8
  unsigned int v33; // [sp+324h] [bp-28h]@2
  int v34; // [sp+328h] [bp-24h]@4
  int v35; // [sp+32Ch] [bp-20h]@4
  int v36; // [sp+330h] [bp-1Ch]@4
  int v37; // [sp+334h] [bp-18h]@4
  int v38; // [sp+338h] [bp-14h]@4

  result = (unsigned int)&v31 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v33 = (unsigned int)&v31 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v37 = v7;
        v36 = v8;
        v38 = 0;
        v34 = v9;
        v35 = v6;
        do
        {
          v13 = *(_BYTE *)(v11 + a1);
          v14 = *(_BYTE *)(v11 + a1 + 1);
          v15 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v33 + 2 * v12) = (150 * v14 + 29 * v13 + 77 * v15 - 32640) >> 8;
          *(_WORD *)(v33 + 2 * v12 + 256) = (-85 * v14 + (v13 << 7) + -43 * v15 + 128) >> 8;
          *(_WORD *)(v33 + 2 * v12++ + 512) = (-107 * v14 + -21 * v13 + (v15 << 7) + 128) >> 8;
          v10 = v38++ + 1;
        }
        while ( v38 < a3 );
        v7 = v37;
        v8 = v36;
        v9 = v34;
        v6 = v35;
      }
      if ( v10 < 16 )
      {
        v32 = v33 + v9;
        v16 = v33 + 2 * (v10 + v8);
        v34 = v9;
        v35 = v6;
        v17 = v33 + v9;
        do
        {
          ++v10;
          *(_WORD *)v16 = *(_WORD *)(v17 + 2 * a3 - 2);
          *(_WORD *)(v16 + 256) = *(_WORD *)(v17 + 2 * a3 + 254);
          *(_WORD *)(v16 + 512) = *(_WORD *)(v17 + 2 * a3 + 510);
          v16 += 2;
        }
        while ( v10 < 16 );
        v9 = v34;
        v6 = v35;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    result = v33;
  }
  if ( v6 < 8 )
  {
    v18 = result + 32 * v6;
    do
    {
      v19 = *(_WORD *)(v18 + 508);
      v20 = *(_WORD *)(v18 - 2);
      *(_WORD *)v18 = *(_WORD *)(v18 - 32);
      v21 = *(_WORD *)(v18 + 254);
      *(_WORD *)(v18 + 256) = *(_WORD *)(v18 + 224);
      ++v6;
      *(_WORD *)(v18 + 512) = *(_WORD *)(v18 + 480);
      *(_WORD *)(v18 + 2) = *(_WORD *)(v18 - 30);
      *(_WORD *)(v18 + 258) = *(_WORD *)(v18 + 226);
      *(_WORD *)(v18 + 514) = *(_WORD *)(v18 + 482);
      *(_WORD *)(v18 + 4) = *(_WORD *)(v18 - 28);
      *(_WORD *)(v18 + 260) = *(_WORD *)(v18 + 228);
      *(_WORD *)(v18 + 516) = *(_WORD *)(v18 + 484);
      *(_WORD *)(v18 + 6) = *(_WORD *)(v18 - 26);
      *(_WORD *)(v18 + 262) = *(_WORD *)(v18 + 230);
      *(_WORD *)(v18 + 518) = *(_WORD *)(v18 + 486);
      *(_WORD *)(v18 + 8) = *(_WORD *)(v18 - 24);
      *(_WORD *)(v18 + 264) = *(_WORD *)(v18 + 232);
      *(_WORD *)(v18 + 520) = *(_WORD *)(v18 + 488);
      *(_WORD *)(v18 + 10) = *(_WORD *)(v18 - 22);
      *(_WORD *)(v18 + 266) = *(_WORD *)(v18 + 234);
      *(_WORD *)(v18 + 522) = *(_WORD *)(v18 + 490);
      *(_WORD *)(v18 + 12) = *(_WORD *)(v18 - 20);
      *(_WORD *)(v18 + 268) = *(_WORD *)(v18 + 236);
      *(_WORD *)(v18 + 524) = *(_WORD *)(v18 + 492);
      *(_WORD *)(v18 + 14) = *(_WORD *)(v18 - 18);
      *(_WORD *)(v18 + 270) = *(_WORD *)(v18 + 238);
      *(_WORD *)(v18 + 526) = *(_WORD *)(v18 + 494);
      *(_WORD *)(v18 + 16) = *(_WORD *)(v18 - 16);
      *(_WORD *)(v18 + 272) = *(_WORD *)(v18 + 240);
      *(_WORD *)(v18 + 528) = *(_WORD *)(v18 + 496);
      *(_WORD *)(v18 + 18) = *(_WORD *)(v18 - 14);
      *(_WORD *)(v18 + 274) = *(_WORD *)(v18 + 242);
      *(_WORD *)(v18 + 530) = *(_WORD *)(v18 + 498);
      *(_WORD *)(v18 + 20) = *(_WORD *)(v18 - 12);
      *(_WORD *)(v18 + 276) = *(_WORD *)(v18 + 244);
      *(_WORD *)(v18 + 532) = *(_WORD *)(v18 + 500);
      *(_WORD *)(v18 + 22) = *(_WORD *)(v18 - 10);
      *(_WORD *)(v18 + 278) = *(_WORD *)(v18 + 246);
      *(_WORD *)(v18 + 534) = *(_WORD *)(v18 + 502);
      *(_WORD *)(v18 + 24) = *(_WORD *)(v18 - 8);
      *(_WORD *)(v18 + 280) = *(_WORD *)(v18 + 248);
      *(_WORD *)(v18 + 536) = *(_WORD *)(v18 + 504);
      *(_WORD *)(v18 + 26) = *(_WORD *)(v18 - 6);
      *(_WORD *)(v18 + 282) = *(_WORD *)(v18 + 250);
      *(_WORD *)(v18 + 538) = *(_WORD *)(v18 + 506);
      *(_WORD *)(v18 + 28) = *(_WORD *)(v18 - 4);
      *(_WORD *)(v18 + 284) = *(_WORD *)(v18 + 252);
      v22 = *(_WORD *)(v18 + 510);
      *(_WORD *)(v18 + 540) = v19;
      *(_WORD *)(v18 + 30) = v20;
      *(_WORD *)(v18 + 286) = v21;
      *(_WORD *)(v18 + 542) = v22;
      v18 += 32;
    }
    while ( v6 < 8 );
  }
  v23 = 0;
  v24 = 0;
  do
  {
    v25 = a5 + 2 * v23;
    v26 = result + 2 * v24;
    v27 = result + 2 * v24;
    v28 = result + 2 * v24 + 32;
    v32 = v24;
    v33 = result;
    do
    {
      *(_WORD *)v25 = *(_WORD *)v26;
      v29 = *(_WORD *)(v26 + 16);
      v26 += 2;
      *(_WORD *)(v25 + 128) = v29;
      *(_WORD *)(v25 + 256) = (*(_WORD *)(v27 + 256) + (signed int)*(_WORD *)(v27 + 258) + 1) >> 1;
      v30 = (*(_WORD *)(v27 + 512) + (signed int)*(_WORD *)(v27 + 514) + 1) >> 1;
      v27 += 4;
      *(_WORD *)(v25 + 384) = v30;
      v25 += 2;
    }
    while ( v28 > v27 );
    result = v33;
    v23 += 8;
    v24 = v32 + 16;
  }
  while ( v32 + 16 < 128 );
  return result;
}

//----- (00770AC0) --------------------------------------------------------
int __cdecl BGR_to_YCbCr_422_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // edx@1
  int result; // eax@1
  int v7; // ebp@2
  int v8; // ebx@2
  int v9; // esi@2
  int v10; // esi@2
  int v11; // ebp@2
  int v12; // ebx@2
  int v13; // esi@2
  int v14; // ebp@2
  int v15; // ebx@2
  int v16; // esi@2
  int v17; // ebp@2
  int v18; // ebx@2
  int v19; // esi@2
  int v20; // ebp@2
  int v21; // ebx@2
  int v22; // esi@2
  int v23; // ebp@2
  int v24; // ebx@2
  int v25; // ebp@2
  int v26; // ebx@2
  int v27; // ecx@2
  int v28; // esi@2
  int v29; // ebp@2
  int v30; // ebx@2
  signed int v31; // [sp+4h] [bp-20h]@1
  int v32; // [sp+8h] [bp-1Ch]@1
  int v33; // [sp+Ch] [bp-18h]@1

  v5 = a1;
  result = a3;
  v31 = 0;
  v32 = a5;
  v33 = a4;
  do
  {
    *(_WORD *)result = (150 * *(_BYTE *)(v5 + 1) + 77 * *(_BYTE *)(v5 + 2) + 29 * *(_BYTE *)v5 - 32640) >> 8;
    *(_WORD *)(result + 2) = (150 * *(_BYTE *)(v5 + 4) + 77 * *(_BYTE *)(v5 + 5) + 29 * *(_BYTE *)(v5 + 3) - 32640) >> 8;
    *(_WORD *)(result + 4) = (150 * *(_BYTE *)(v5 + 7) + 77 * *(_BYTE *)(v5 + 8) + 29 * *(_BYTE *)(v5 + 6) - 32640) >> 8;
    *(_WORD *)(result + 6) = (150 * *(_BYTE *)(v5 + 10) + 77 * *(_BYTE *)(v5 + 11) + 29 * *(_BYTE *)(v5 + 9) - 32640) >> 8;
    *(_WORD *)(result + 8) = (150 * *(_BYTE *)(v5 + 13) + 77 * *(_BYTE *)(v5 + 14) + 29 * *(_BYTE *)(v5 + 12) - 32640) >> 8;
    *(_WORD *)(result + 10) = (150 * *(_BYTE *)(v5 + 16) + 77 * *(_BYTE *)(v5 + 17) + 29 * *(_BYTE *)(v5 + 15) - 32640) >> 8;
    *(_WORD *)(result + 12) = (150 * *(_BYTE *)(v5 + 19) + 77 * *(_BYTE *)(v5 + 20) + 29 * *(_BYTE *)(v5 + 18) - 32640) >> 8;
    *(_WORD *)(result + 14) = (150 * *(_BYTE *)(v5 + 22) + 77 * *(_BYTE *)(v5 + 23) + 29 * *(_BYTE *)(v5 + 21) - 32640) >> 8;
    *(_WORD *)(result + 128) = (150 * *(_BYTE *)(v5 + 25) + 77 * *(_BYTE *)(v5 + 26) + 29 * *(_BYTE *)(v5 + 24) - 32640) >> 8;
    *(_WORD *)(result + 130) = (150 * *(_BYTE *)(v5 + 28) + 77 * *(_BYTE *)(v5 + 29) + 29 * *(_BYTE *)(v5 + 27) - 32640) >> 8;
    *(_WORD *)(result + 132) = (150 * *(_BYTE *)(v5 + 31) + 77 * *(_BYTE *)(v5 + 32) + 29 * *(_BYTE *)(v5 + 30) - 32640) >> 8;
    *(_WORD *)(result + 134) = (150 * *(_BYTE *)(v5 + 34) + 77 * *(_BYTE *)(v5 + 35) + 29 * *(_BYTE *)(v5 + 33) - 32640) >> 8;
    *(_WORD *)(result + 136) = (150 * *(_BYTE *)(v5 + 37) + 77 * *(_BYTE *)(v5 + 38) + 29 * *(_BYTE *)(v5 + 36) - 32640) >> 8;
    *(_WORD *)(result + 138) = (150 * *(_BYTE *)(v5 + 40) + 77 * *(_BYTE *)(v5 + 41) + 29 * *(_BYTE *)(v5 + 39) - 32640) >> 8;
    *(_WORD *)(result + 140) = (150 * *(_BYTE *)(v5 + 43) + 77 * *(_BYTE *)(v5 + 44) + 29 * *(_BYTE *)(v5 + 42) - 32640) >> 8;
    *(_WORD *)(result + 142) = (150 * *(_BYTE *)(v5 + 46) + 77 * *(_BYTE *)(v5 + 47) + 29 * *(_BYTE *)(v5 + 45) - 32640) >> 8;
    v7 = *(_BYTE *)(v5 + 4) + *(_BYTE *)(v5 + 1);
    v8 = *(_BYTE *)(v5 + 5) + *(_BYTE *)(v5 + 2);
    v9 = -21 * (*(_BYTE *)(v5 + 3) + *(_BYTE *)v5);
    *(_WORD *)v33 = (-85 * v7 + ((*(_BYTE *)(v5 + 3) + *(_BYTE *)v5) << 7) + -43 * v8 + 256) >> 9;
    result += 16;
    *(_WORD *)v32 = (-107 * v7 + v9 + (v8 << 7) + 256) >> 9;
    v10 = *(_BYTE *)(v5 + 9) + *(_BYTE *)(v5 + 6);
    v11 = *(_BYTE *)(v5 + 10) + *(_BYTE *)(v5 + 7);
    v12 = *(_BYTE *)(v5 + 11) + *(_BYTE *)(v5 + 8);
    *(_WORD *)(v33 + 2) = (-85 * v11 + ((*(_BYTE *)(v5 + 9) + *(_BYTE *)(v5 + 6)) << 7) + -43 * v12 + 256) >> 9;
    *(_WORD *)(v32 + 2) = (-107 * v11 + -21 * v10 + (v12 << 7) + 256) >> 9;
    v13 = *(_BYTE *)(v5 + 15) + *(_BYTE *)(v5 + 12);
    v14 = *(_BYTE *)(v5 + 16) + *(_BYTE *)(v5 + 13);
    v15 = *(_BYTE *)(v5 + 17) + *(_BYTE *)(v5 + 14);
    *(_WORD *)(v33 + 4) = (-85 * v14 + ((*(_BYTE *)(v5 + 15) + *(_BYTE *)(v5 + 12)) << 7) + -43 * v15 + 256) >> 9;
    *(_WORD *)(v32 + 4) = (-107 * v14 + -21 * v13 + (v15 << 7) + 256) >> 9;
    v16 = *(_BYTE *)(v5 + 21) + *(_BYTE *)(v5 + 18);
    v17 = *(_BYTE *)(v5 + 22) + *(_BYTE *)(v5 + 19);
    v18 = *(_BYTE *)(v5 + 23) + *(_BYTE *)(v5 + 20);
    *(_WORD *)(v33 + 6) = (-85 * v17 + ((*(_BYTE *)(v5 + 21) + *(_BYTE *)(v5 + 18)) << 7) + -43 * v18 + 256) >> 9;
    *(_WORD *)(v32 + 6) = (-107 * v17 + -21 * v16 + (v18 << 7) + 256) >> 9;
    v19 = *(_BYTE *)(v5 + 27) + *(_BYTE *)(v5 + 24);
    v20 = *(_BYTE *)(v5 + 28) + *(_BYTE *)(v5 + 25);
    v21 = *(_BYTE *)(v5 + 29) + *(_BYTE *)(v5 + 26);
    *(_WORD *)(v33 + 8) = (-85 * v20 + ((*(_BYTE *)(v5 + 27) + *(_BYTE *)(v5 + 24)) << 7) + -43 * v21 + 256) >> 9;
    *(_WORD *)(v32 + 8) = (-107 * v20 + -21 * v19 + (v21 << 7) + 256) >> 9;
    v22 = *(_BYTE *)(v5 + 33) + *(_BYTE *)(v5 + 30);
    v23 = *(_BYTE *)(v5 + 34) + *(_BYTE *)(v5 + 31);
    v24 = *(_BYTE *)(v5 + 35) + *(_BYTE *)(v5 + 32);
    *(_WORD *)(v33 + 10) = (-85 * v23 + ((*(_BYTE *)(v5 + 33) + *(_BYTE *)(v5 + 30)) << 7) + -43 * v24 + 256) >> 9;
    *(_WORD *)(v32 + 10) = (-107 * v23 + -21 * v22 + (v24 << 7) + 256) >> 9;
    v25 = *(_BYTE *)(v5 + 39) + *(_BYTE *)(v5 + 36);
    v26 = *(_BYTE *)(v5 + 40) + *(_BYTE *)(v5 + 37);
    v27 = *(_BYTE *)(v5 + 41) + *(_BYTE *)(v5 + 38);
    *(_WORD *)(v33 + 12) = (-85 * v26 + ((*(_BYTE *)(v5 + 39) + *(_BYTE *)(v5 + 36)) << 7) + -43 * v27 + 256) >> 9;
    *(_WORD *)(v32 + 12) = (-107 * v26 + -21 * v25 + (v27 << 7) + 256) >> 9;
    v28 = *(_BYTE *)(v5 + 45) + *(_BYTE *)(v5 + 42);
    v29 = *(_BYTE *)(v5 + 46) + *(_BYTE *)(v5 + 43);
    v30 = *(_BYTE *)(v5 + 47) + *(_BYTE *)(v5 + 44);
    *(_WORD *)(v33 + 14) = (-85 * v29 + ((*(_BYTE *)(v5 + 45) + *(_BYTE *)(v5 + 42)) << 7) + -43 * v30 + 256) >> 9;
    *(_WORD *)(v32 + 14) = (-107 * v29 + -21 * v28 + (v30 << 7) + 256) >> 9;
    v33 += 16;
    v32 += 16;
    v5 += a2;
    ++v31;
  }
  while ( v31 < 8 );
  return result;
}

//----- (00771080) --------------------------------------------------------
void __cdecl BGR_to_YCbCr_422_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5)
{
  own_bgr_to_ycbcr_422_full_mcu_m5(a1, a2, a3, a4, a5);
}

//----- (007710C0) --------------------------------------------------------
unsigned int __cdecl BGR_to_YCbCr_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 48);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 8 )
    result = sub_7705D0(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 30))(v7, v5, v6, v6 + 256, v6 + 384);
  return result;
}

//----- (007711D0) --------------------------------------------------------
unsigned int __cdecl sub_7711D0(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // esi@2
  int v9; // edi@2
  int v10; // eax@3
  int v11; // ebp@4
  int v12; // ebx@4
  int v13; // esi@4
  int v14; // eax@5
  int v15; // edx@5
  int v16; // ecx@5
  __int16 v17; // di@5
  unsigned int v18; // esi@5
  int v19; // ebp@5
  int v20; // eax@5
  int v21; // ebx@8
  int v22; // edx@8
  int v23; // ecx@14
  int v24; // ebx@14
  int v25; // edi@15
  int v26; // ebp@15
  __int16 v27; // ax@16
  signed int v28; // edx@18
  int v29; // ebx@19
  char v30; // [sp+1Fh] [bp-22Dh]@1
  unsigned int v31; // [sp+220h] [bp-2Ch]@2
  unsigned int v32; // [sp+224h] [bp-28h]@5
  int v33; // [sp+228h] [bp-24h]@4
  int v34; // [sp+22Ch] [bp-20h]@4
  int v35; // [sp+230h] [bp-1Ch]@4
  int v36; // [sp+234h] [bp-18h]@4
  int v37; // [sp+238h] [bp-14h]@4

  result = (unsigned int)&v30 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v31 = (unsigned int)&v30 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v36 = v7;
        v35 = v8;
        v37 = 0;
        v13 = a1;
        v33 = v9;
        v34 = v6;
        do
        {
          v32 = v11;
          v14 = (signed __int16)(255 - *(_BYTE *)(v11 + v13));
          v15 = (signed __int16)(255 - *(_BYTE *)(v11 + v13 + 1));
          v16 = (signed __int16)(255 - *(_BYTE *)(v11 + v13 + 2));
          v17 = *(_BYTE *)(v11 + v13 + 3) - 128;
          *(_WORD *)(v31 + 2 * v12) = (150 * v15 + 77 * v14 + 29 * v16 - 32640) >> 8;
          v18 = v31;
          *(_WORD *)(v31 + 2 * v12 + 128) = (-85 * v15 + -43 * v14 + (v16 << 7) + 128) >> 8;
          v19 = v32;
          *(_WORD *)(v18 + 2 * v12 + 256) = (-107 * v15 + (v14 << 7) + -21 * v16 + 128) >> 8;
          v11 = v19 + 4;
          v20 = v37;
          *(_WORD *)(v18 + 2 * v12++ + 384) = v17;
          v10 = v20 + 1;
          v37 = v10;
          v13 = a1;
        }
        while ( v10 < a3 );
        v7 = v36;
        v8 = v35;
        v9 = v33;
        v6 = v34;
      }
      if ( v10 < 8 )
      {
        v32 = v31 + v9;
        v21 = v31 + 2 * (v10 + v8);
        v33 = v9;
        v34 = v6;
        v22 = v31 + v9;
        do
        {
          ++v10;
          *(_WORD *)v21 = *(_WORD *)(v22 + 2 * a3 - 2);
          *(_WORD *)(v21 + 128) = *(_WORD *)(v22 + 2 * a3 + 126);
          *(_WORD *)(v21 + 256) = *(_WORD *)(v22 + 2 * a3 + 254);
          *(_WORD *)(v21 + 384) = *(_WORD *)(v22 + 2 * a3 + 382);
          v21 += 2;
        }
        while ( v10 < 8 );
        v9 = v33;
        v6 = v34;
      }
      v7 += a2;
      v8 += 8;
      v9 += 16;
      ++v6;
    }
    while ( v6 < a4 );
    result = v31;
  }
  if ( v6 < 8 )
  {
    v23 = 8 * v6;
    v24 = result + 16 * v6;
    do
    {
      v25 = v24;
      v26 = result + 2 * v23;
      v31 = result;
      do
      {
        *(_WORD *)v26 = *(_WORD *)(v25 - 16);
        *(_WORD *)(v26 + 128) = *(_WORD *)(v25 + 112);
        *(_WORD *)(v26 + 256) = *(_WORD *)(v25 + 240);
        v27 = *(_WORD *)(v25 + 368);
        v25 += 2;
        *(_WORD *)(v26 + 384) = v27;
        v26 += 2;
      }
      while ( v24 + 16 > v25 );
      result = v31;
      v23 += 8;
      v24 += 16;
      ++v6;
    }
    while ( v6 < 8 );
  }
  v28 = 0;
  do
  {
    v29 = v28;
    do
    {
      *(_WORD *)(a5 + 2 * v29) = *(_WORD *)(result + 2 * v29);
      *(_WORD *)(a5 + 2 * v29 + 128) = *(_WORD *)(result + 2 * v29 + 128);
      *(_WORD *)(a5 + 2 * v29 + 256) = *(_WORD *)(result + 2 * v29 + 256);
      *(_WORD *)(a5 + 2 * v29 + 384) = *(_WORD *)(result + 2 * v29 + 384);
      ++v29;
    }
    while ( v28 + 8 > v29 );
    v28 += 8;
  }
  while ( v28 < 64 );
  return result;
}

//----- (007714E0) --------------------------------------------------------
int __cdecl RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6)
{
  int v6; // ebp@1
  int v7; // ebx@1
  int v8; // ecx@1
  int v9; // edx@1
  int result; // eax@1
  bool v11; // sf@2
  unsigned __int8 v12; // of@2
  int v13; // [sp+4h] [bp-18h]@1

  v6 = a1;
  v7 = a3;
  v8 = a4;
  v9 = a5;
  result = a6;
  v13 = 0;
  do
  {
    *(_WORD *)v7 = (-150 * *(_BYTE *)(v6 + 1) + -77 * *(_BYTE *)v6 + -29 * *(_BYTE *)(v6 + 2) + 32640) >> 8;
    *(_WORD *)(v7 + 2) = (-150 * *(_BYTE *)(v6 + 5) + -77 * *(_BYTE *)(v6 + 4) + -29 * *(_BYTE *)(v6 + 6) + 32640) >> 8;
    *(_WORD *)(v7 + 4) = (-150 * *(_BYTE *)(v6 + 9) + -77 * *(_BYTE *)(v6 + 8) + -29 * *(_BYTE *)(v6 + 10) + 32640) >> 8;
    *(_WORD *)(v7 + 6) = (-150 * *(_BYTE *)(v6 + 13) + -77 * *(_BYTE *)(v6 + 12) + -29 * *(_BYTE *)(v6 + 14) + 32640) >> 8;
    *(_WORD *)(v7 + 8) = (-150 * *(_BYTE *)(v6 + 17) + -77 * *(_BYTE *)(v6 + 16) + -29 * *(_BYTE *)(v6 + 18) + 32640) >> 8;
    *(_WORD *)(v7 + 10) = (-150 * *(_BYTE *)(v6 + 21) + -77 * *(_BYTE *)(v6 + 20) + -29 * *(_BYTE *)(v6 + 22) + 32640) >> 8;
    *(_WORD *)(v7 + 12) = (-150 * *(_BYTE *)(v6 + 25) + -77 * *(_BYTE *)(v6 + 24) + -29 * *(_BYTE *)(v6 + 26) + 32640) >> 8;
    *(_WORD *)(v7 + 14) = (-150 * *(_BYTE *)(v6 + 29) + -77 * *(_BYTE *)(v6 + 28) + -29 * *(_BYTE *)(v6 + 30) + 32640) >> 8;
    *(_WORD *)result = *(_BYTE *)(v6 + 3) - 128;
    *(_WORD *)(result + 2) = *(_BYTE *)(v6 + 7) - 128;
    *(_WORD *)(result + 4) = *(_BYTE *)(v6 + 11) - 128;
    *(_WORD *)(result + 6) = *(_BYTE *)(v6 + 15) - 128;
    *(_WORD *)(result + 8) = *(_BYTE *)(v6 + 19) - 128;
    *(_WORD *)(result + 10) = *(_BYTE *)(v6 + 23) - 128;
    *(_WORD *)(result + 12) = *(_BYTE *)(v6 + 27) - 128;
    *(_WORD *)(result + 14) = *(_BYTE *)(v6 + 31) - 128;
    v7 += 16;
    *(_WORD *)v8 = (85 * *(_BYTE *)(v6 + 1) + 43 * *(_BYTE *)v6 + ((255 - *(_BYTE *)(v6 + 2)) << 7) - 32512) >> 8;
    result += 16;
    *(_WORD *)(v8 + 2) = (85 * *(_BYTE *)(v6 + 5) + 43 * *(_BYTE *)(v6 + 4) + ((255 - *(_BYTE *)(v6 + 6)) << 7) - 32512) >> 8;
    *(_WORD *)(v8 + 4) = (85 * *(_BYTE *)(v6 + 9) + 43 * *(_BYTE *)(v6 + 8) + ((255 - *(_BYTE *)(v6 + 10)) << 7) - 32512) >> 8;
    *(_WORD *)(v8 + 6) = (85 * *(_BYTE *)(v6 + 13)
                        + 43 * *(_BYTE *)(v6 + 12)
                        + ((255 - *(_BYTE *)(v6 + 14)) << 7)
                        - 32512) >> 8;
    *(_WORD *)(v8 + 8) = (85 * *(_BYTE *)(v6 + 17)
                        + 43 * *(_BYTE *)(v6 + 16)
                        + ((255 - *(_BYTE *)(v6 + 18)) << 7)
                        - 32512) >> 8;
    *(_WORD *)(v8 + 10) = (85 * *(_BYTE *)(v6 + 21)
                         + 43 * *(_BYTE *)(v6 + 20)
                         + ((255 - *(_BYTE *)(v6 + 22)) << 7)
                         - 32512) >> 8;
    *(_WORD *)(v8 + 12) = (85 * *(_BYTE *)(v6 + 25)
                         + 43 * *(_BYTE *)(v6 + 24)
                         + ((255 - *(_BYTE *)(v6 + 26)) << 7)
                         - 32512) >> 8;
    *(_WORD *)(v8 + 14) = (85 * *(_BYTE *)(v6 + 29)
                         + 43 * *(_BYTE *)(v6 + 28)
                         + ((255 - *(_BYTE *)(v6 + 30)) << 7)
                         - 32512) >> 8;
    v8 += 16;
    *(_WORD *)v9 = (107 * *(_BYTE *)(v6 + 1) + ((255 - *(_BYTE *)v6) << 7) + 21 * *(_BYTE *)(v6 + 2) - 32512) >> 8;
    *(_WORD *)(v9 + 2) = (107 * *(_BYTE *)(v6 + 5) + ((255 - *(_BYTE *)(v6 + 4)) << 7) + 21 * *(_BYTE *)(v6 + 6) - 32512) >> 8;
    *(_WORD *)(v9 + 4) = (107 * *(_BYTE *)(v6 + 9) + ((255 - *(_BYTE *)(v6 + 8)) << 7) + 21 * *(_BYTE *)(v6 + 10) - 32512) >> 8;
    *(_WORD *)(v9 + 6) = (107 * *(_BYTE *)(v6 + 13)
                        + ((255 - *(_BYTE *)(v6 + 12)) << 7)
                        + 21 * *(_BYTE *)(v6 + 14)
                        - 32512) >> 8;
    *(_WORD *)(v9 + 8) = (107 * *(_BYTE *)(v6 + 17)
                        + ((255 - *(_BYTE *)(v6 + 16)) << 7)
                        + 21 * *(_BYTE *)(v6 + 18)
                        - 32512) >> 8;
    *(_WORD *)(v9 + 10) = (107 * *(_BYTE *)(v6 + 21)
                         + ((255 - *(_BYTE *)(v6 + 20)) << 7)
                         + 21 * *(_BYTE *)(v6 + 22)
                         - 32512) >> 8;
    *(_WORD *)(v9 + 12) = (107 * *(_BYTE *)(v6 + 25)
                         + ((255 - *(_BYTE *)(v6 + 24)) << 7)
                         + 21 * *(_BYTE *)(v6 + 26)
                         - 32512) >> 8;
    *(_WORD *)(v9 + 14) = (107 * *(_BYTE *)(v6 + 29)
                         + ((255 - *(_BYTE *)(v6 + 28)) << 7)
                         + 21 * *(_BYTE *)(v6 + 30)
                         - 32512) >> 8;
    v9 += 16;
    v6 += a2;
    v12 = __OFSUB__(v13 + 1, 8);
    v11 = v13++ - 7 < 0;
  }
  while ( v11 ^ v12 );
  return result;
}

//----- (007719F0) --------------------------------------------------------
void __cdecl RGBA_FPX_to_YCbCrA_FPX_1111_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5)
{
  own_rgba_fpx_to_ycbcra_fpx_1111_full_mcu_m5(a1, a2, a3, a4, a5);
}

//----- (00771A40) --------------------------------------------------------
unsigned int __cdecl RGBA_FPX_to_YCbCrA_FPX_1111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 8;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 7) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 32);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 8 || v4 != 8 )
    result = sub_7711D0(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 36))(
               v7,
               v5,
               v6,
               v6 + 128,
               v6 + 256,
               v6 + 384);
  return result;
}

//----- (00771B50) --------------------------------------------------------
unsigned int __cdecl sub_771B50(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // esi@2
  int v9; // edi@2
  int v10; // eax@3
  int v11; // ebp@4
  int v12; // ebx@4
  int v13; // esi@4
  int v14; // eax@5
  int v15; // edx@5
  int v16; // ecx@5
  __int16 v17; // di@5
  unsigned int v18; // esi@5
  int v19; // ebp@5
  int v20; // eax@5
  int v21; // ebx@8
  int v22; // edx@8
  int v23; // ecx@14
  int v24; // ebx@14
  int v25; // edi@15
  int v26; // ebp@15
  __int16 v27; // ax@16
  int v28; // ecx@18
  int v29; // edx@18
  int v30; // edi@19
  int v31; // esi@19
  int v32; // ebp@19
  int v33; // ebx@19
  int v34; // eax@20
  char v35; // [sp+1Fh] [bp-82Dh]@1
  unsigned int v36; // [sp+820h] [bp-2Ch]@2
  unsigned int v37; // [sp+824h] [bp-28h]@5
  int v38; // [sp+828h] [bp-24h]@4
  int v39; // [sp+82Ch] [bp-20h]@4
  int v40; // [sp+830h] [bp-1Ch]@4
  int v41; // [sp+834h] [bp-18h]@4
  int v42; // [sp+838h] [bp-14h]@4

  result = (unsigned int)&v35 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v36 = (unsigned int)&v35 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v41 = v7;
        v40 = v8;
        v42 = 0;
        v13 = a1;
        v38 = v9;
        v39 = v6;
        do
        {
          v37 = v11;
          v14 = (signed __int16)(255 - *(_BYTE *)(v11 + v13));
          v15 = (signed __int16)(255 - *(_BYTE *)(v11 + v13 + 1));
          v16 = (signed __int16)(255 - *(_BYTE *)(v11 + v13 + 2));
          v17 = *(_BYTE *)(v11 + v13 + 3) - 128;
          *(_WORD *)(v36 + 2 * v12) = (150 * v15 + 77 * v14 + 29 * v16 - 32640) >> 8;
          v18 = v36;
          *(_WORD *)(v36 + 2 * v12 + 256) = (-85 * v15 + -43 * v14 + (v16 << 7) + 128) >> 8;
          v19 = v37;
          *(_WORD *)(v18 + 2 * v12 + 512) = (-107 * v15 + (v14 << 7) + -21 * v16 + 128) >> 8;
          v11 = v19 + 4;
          v20 = v42;
          *(_WORD *)(v18 + 2 * v12++ + 768) = v17;
          v10 = v20 + 1;
          v42 = v10;
          v13 = a1;
        }
        while ( v10 < a3 );
        v7 = v41;
        v8 = v40;
        v9 = v38;
        v6 = v39;
      }
      if ( v10 < 16 )
      {
        v37 = v36 + v9;
        v21 = v36 + 2 * (v10 + v8);
        v38 = v9;
        v39 = v6;
        v22 = v36 + v9;
        do
        {
          ++v10;
          *(_WORD *)v21 = *(_WORD *)(v22 + 2 * a3 - 2);
          *(_WORD *)(v21 + 256) = *(_WORD *)(v22 + 2 * a3 + 254);
          *(_WORD *)(v21 + 512) = *(_WORD *)(v22 + 2 * a3 + 510);
          *(_WORD *)(v21 + 768) = *(_WORD *)(v22 + 2 * a3 + 766);
          v21 += 2;
        }
        while ( v10 < 16 );
        v9 = v38;
        v6 = v39;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    result = v36;
  }
  if ( v6 < 8 )
  {
    v23 = 16 * v6;
    v24 = result + 32 * v6;
    do
    {
      v25 = v24;
      v26 = result + 2 * v23;
      v36 = result;
      do
      {
        *(_WORD *)v26 = *(_WORD *)(v25 - 32);
        *(_WORD *)(v26 + 256) = *(_WORD *)(v25 + 224);
        *(_WORD *)(v26 + 512) = *(_WORD *)(v25 + 480);
        v27 = *(_WORD *)(v25 + 736);
        v25 += 2;
        *(_WORD *)(v26 + 768) = v27;
        v26 += 2;
      }
      while ( v24 + 32 > v25 );
      result = v36;
      v23 += 16;
      v24 += 32;
      ++v6;
    }
    while ( v6 < 8 );
  }
  v28 = 0;
  v29 = 0;
  do
  {
    v30 = a5 + 2 * v28;
    v31 = result + 2 * v29;
    v32 = result + 2 * v29;
    v33 = result + 2 * v29 + 32;
    v37 = v29;
    v36 = result;
    do
    {
      *(_WORD *)v30 = *(_WORD *)v31;
      *(_WORD *)(v30 + 128) = *(_WORD *)(v31 + 16);
      *(_WORD *)(v30 + 256) = (*(_WORD *)(v32 + 256) + (signed int)*(_WORD *)(v32 + 258) + 1) >> 1;
      v34 = (*(_WORD *)(v32 + 512) + (signed int)*(_WORD *)(v32 + 514) + 1) >> 1;
      v32 += 4;
      *(_WORD *)(v30 + 384) = v34;
      *(_WORD *)(v30 + 512) = *(_WORD *)(v31 + 768);
      LOWORD(v34) = *(_WORD *)(v31 + 784);
      v31 += 2;
      *(_WORD *)(v30 + 640) = v34;
      v30 += 2;
    }
    while ( v33 > v32 );
    result = v36;
    v28 += 8;
    v29 = v37 + 16;
  }
  while ( (signed int)(v37 + 16) < 128 );
  return result;
}

//----- (00771EC0) --------------------------------------------------------
int __cdecl RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6)
{
  int v6; // edx@1
  int result; // eax@1
  int v8; // esi@2
  int v9; // ebp@2
  int v10; // ebx@2
  int v11; // esi@2
  int v12; // ebp@2
  int v13; // ebx@2
  int v14; // esi@2
  int v15; // ebp@2
  int v16; // ebx@2
  int v17; // ebp@2
  int v18; // ebx@2
  int v19; // ecx@2
  int v20; // ecx@2
  int v21; // ebx@2
  int v22; // ebp@2
  int v23; // esi@2
  int v24; // ebp@2
  int v25; // ebx@2
  int v26; // ebp@2
  int v27; // ebx@2
  int v28; // ecx@2
  int v29; // esi@2
  int v30; // ebp@2
  int v31; // ebx@2
  signed int v32; // [sp+4h] [bp-20h]@1
  int v33; // [sp+8h] [bp-1Ch]@1
  int v34; // [sp+Ch] [bp-18h]@1
  int v35; // [sp+10h] [bp-14h]@1

  v6 = a1;
  result = a3;
  v32 = 0;
  v33 = a6;
  v34 = a5;
  v35 = a4;
  do
  {
    *(_WORD *)result = (-150 * *(_BYTE *)(v6 + 1) + -77 * *(_BYTE *)v6 + -29 * *(_BYTE *)(v6 + 2) + 32640) >> 8;
    *(_WORD *)(result + 2) = (-150 * *(_BYTE *)(v6 + 5) + -77 * *(_BYTE *)(v6 + 4) + -29 * *(_BYTE *)(v6 + 6) + 32640) >> 8;
    *(_WORD *)(result + 4) = (-150 * *(_BYTE *)(v6 + 9) + -77 * *(_BYTE *)(v6 + 8) + -29 * *(_BYTE *)(v6 + 10) + 32640) >> 8;
    *(_WORD *)(result + 6) = (-150 * *(_BYTE *)(v6 + 13) + -77 * *(_BYTE *)(v6 + 12) + -29 * *(_BYTE *)(v6 + 14) + 32640) >> 8;
    *(_WORD *)(result + 8) = (-150 * *(_BYTE *)(v6 + 17) + -77 * *(_BYTE *)(v6 + 16) + -29 * *(_BYTE *)(v6 + 18) + 32640) >> 8;
    *(_WORD *)(result + 10) = (-150 * *(_BYTE *)(v6 + 21) + -77 * *(_BYTE *)(v6 + 20) + -29 * *(_BYTE *)(v6 + 22) + 32640) >> 8;
    *(_WORD *)(result + 12) = (-150 * *(_BYTE *)(v6 + 25) + -77 * *(_BYTE *)(v6 + 24) + -29 * *(_BYTE *)(v6 + 26) + 32640) >> 8;
    *(_WORD *)(result + 14) = (-150 * *(_BYTE *)(v6 + 29) + -77 * *(_BYTE *)(v6 + 28) + -29 * *(_BYTE *)(v6 + 30) + 32640) >> 8;
    *(_WORD *)(result + 128) = (-150 * *(_BYTE *)(v6 + 33)
                              + -77 * *(_BYTE *)(v6 + 32)
                              + -29 * *(_BYTE *)(v6 + 34)
                              + 32640) >> 8;
    *(_WORD *)(result + 130) = (-150 * *(_BYTE *)(v6 + 37)
                              + -77 * *(_BYTE *)(v6 + 36)
                              + -29 * *(_BYTE *)(v6 + 38)
                              + 32640) >> 8;
    *(_WORD *)(result + 132) = (-150 * *(_BYTE *)(v6 + 41)
                              + -77 * *(_BYTE *)(v6 + 40)
                              + -29 * *(_BYTE *)(v6 + 42)
                              + 32640) >> 8;
    *(_WORD *)(result + 134) = (-150 * *(_BYTE *)(v6 + 45)
                              + -77 * *(_BYTE *)(v6 + 44)
                              + -29 * *(_BYTE *)(v6 + 46)
                              + 32640) >> 8;
    *(_WORD *)(result + 136) = (-150 * *(_BYTE *)(v6 + 49)
                              + -77 * *(_BYTE *)(v6 + 48)
                              + -29 * *(_BYTE *)(v6 + 50)
                              + 32640) >> 8;
    *(_WORD *)(result + 138) = (-150 * *(_BYTE *)(v6 + 53)
                              + -77 * *(_BYTE *)(v6 + 52)
                              + -29 * *(_BYTE *)(v6 + 54)
                              + 32640) >> 8;
    *(_WORD *)(result + 140) = (-150 * *(_BYTE *)(v6 + 57)
                              + -77 * *(_BYTE *)(v6 + 56)
                              + -29 * *(_BYTE *)(v6 + 58)
                              + 32640) >> 8;
    *(_WORD *)(result + 142) = (-150 * *(_BYTE *)(v6 + 61)
                              + -77 * *(_BYTE *)(v6 + 60)
                              + -29 * *(_BYTE *)(v6 + 62)
                              + 32640) >> 8;
    *(_WORD *)v33 = *(_BYTE *)(v6 + 3) - 128;
    *(_WORD *)(v33 + 2) = *(_BYTE *)(v6 + 7) - 128;
    *(_WORD *)(v33 + 4) = *(_BYTE *)(v6 + 11) - 128;
    *(_WORD *)(v33 + 6) = *(_BYTE *)(v6 + 15) - 128;
    *(_WORD *)(v33 + 8) = *(_BYTE *)(v6 + 19) - 128;
    *(_WORD *)(v33 + 10) = *(_BYTE *)(v6 + 23) - 128;
    *(_WORD *)(v33 + 12) = *(_BYTE *)(v6 + 27) - 128;
    *(_WORD *)(v33 + 14) = *(_BYTE *)(v6 + 31) - 128;
    *(_WORD *)(v33 + 128) = *(_BYTE *)(v6 + 35) - 128;
    *(_WORD *)(v33 + 130) = *(_BYTE *)(v6 + 39) - 128;
    *(_WORD *)(v33 + 132) = *(_BYTE *)(v6 + 43) - 128;
    *(_WORD *)(v33 + 134) = *(_BYTE *)(v6 + 47) - 128;
    *(_WORD *)(v33 + 136) = *(_BYTE *)(v6 + 51) - 128;
    *(_WORD *)(v33 + 138) = *(_BYTE *)(v6 + 55) - 128;
    *(_WORD *)(v33 + 140) = *(_BYTE *)(v6 + 59) - 128;
    *(_WORD *)(v33 + 142) = *(_BYTE *)(v6 + 63) - 128;
    v8 = 510 - (*(_BYTE *)(v6 + 4) + *(_BYTE *)v6);
    v9 = 510 - (*(_BYTE *)(v6 + 5) + *(_BYTE *)(v6 + 1));
    v10 = 510 - (*(_BYTE *)(v6 + 6) + *(_BYTE *)(v6 + 2));
    *(_WORD *)v35 = (-85 * v9 + -43 * v8 + ((510 - (*(_BYTE *)(v6 + 6) + *(_BYTE *)(v6 + 2))) << 7) + 256) >> 9;
    *(_WORD *)v34 = (-107 * v9 + (v8 << 7) + -21 * v10 + 256) >> 9;
    v11 = 510 - (*(_BYTE *)(v6 + 12) + *(_BYTE *)(v6 + 8));
    v12 = 510 - (*(_BYTE *)(v6 + 13) + *(_BYTE *)(v6 + 9));
    v13 = 510 - (*(_BYTE *)(v6 + 14) + *(_BYTE *)(v6 + 10));
    *(_WORD *)(v35 + 2) = (-85 * v12 + -43 * v11 + ((510 - (*(_BYTE *)(v6 + 14) + *(_BYTE *)(v6 + 10))) << 7) + 256) >> 9;
    *(_WORD *)(v34 + 2) = (-107 * v12 + (v11 << 7) + -21 * v13 + 256) >> 9;
    v14 = 510 - (*(_BYTE *)(v6 + 20) + *(_BYTE *)(v6 + 16));
    v15 = 510 - (*(_BYTE *)(v6 + 21) + *(_BYTE *)(v6 + 17));
    v16 = 510 - (*(_BYTE *)(v6 + 22) + *(_BYTE *)(v6 + 18));
    *(_WORD *)(v35 + 4) = (-85 * v15 + -43 * v14 + ((510 - (*(_BYTE *)(v6 + 22) + *(_BYTE *)(v6 + 18))) << 7) + 256) >> 9;
    *(_WORD *)(v34 + 4) = (-107 * v15 + (v14 << 7) + -21 * v16 + 256) >> 9;
    v17 = 510 - (*(_BYTE *)(v6 + 28) + *(_BYTE *)(v6 + 24));
    v18 = 510 - (*(_BYTE *)(v6 + 29) + *(_BYTE *)(v6 + 25));
    v19 = 510 - (*(_BYTE *)(v6 + 30) + *(_BYTE *)(v6 + 26));
    *(_WORD *)(v35 + 6) = (-85 * v18 + -43 * v17 + ((510 - (*(_BYTE *)(v6 + 30) + *(_BYTE *)(v6 + 26))) << 7) + 256) >> 9;
    *(_WORD *)(v34 + 6) = (-107 * v18 + (v17 << 7) + -21 * v19 + 256) >> 9;
    v20 = 510 - (*(_BYTE *)(v6 + 36) + *(_BYTE *)(v6 + 32));
    v21 = 510 - (*(_BYTE *)(v6 + 37) + *(_BYTE *)(v6 + 33));
    v22 = 510 - (*(_BYTE *)(v6 + 38) + *(_BYTE *)(v6 + 34));
    *(_WORD *)(v35 + 8) = (-85 * v21 + -43 * v20 + ((510 - (*(_BYTE *)(v6 + 38) + *(_BYTE *)(v6 + 34))) << 7) + 256) >> 9;
    *(_WORD *)(v34 + 8) = (-107 * v21 + (v20 << 7) + -21 * v22 + 256) >> 9;
    v23 = 510 - (*(_BYTE *)(v6 + 44) + *(_BYTE *)(v6 + 40));
    v24 = 510 - (*(_BYTE *)(v6 + 45) + *(_BYTE *)(v6 + 41));
    v25 = 510 - (*(_BYTE *)(v6 + 46) + *(_BYTE *)(v6 + 42));
    *(_WORD *)(v35 + 10) = (-85 * v24 + -43 * v23 + ((510 - (*(_BYTE *)(v6 + 46) + *(_BYTE *)(v6 + 42))) << 7) + 256) >> 9;
    result += 16;
    *(_WORD *)(v34 + 10) = (-107 * v24 + (v23 << 7) + -21 * v25 + 256) >> 9;
    v26 = 510 - (*(_BYTE *)(v6 + 52) + *(_BYTE *)(v6 + 48));
    v27 = 510 - (*(_BYTE *)(v6 + 53) + *(_BYTE *)(v6 + 49));
    v28 = 510 - (*(_BYTE *)(v6 + 54) + *(_BYTE *)(v6 + 50));
    *(_WORD *)(v35 + 12) = (-85 * v27 + -43 * v26 + ((510 - (*(_BYTE *)(v6 + 54) + *(_BYTE *)(v6 + 50))) << 7) + 256) >> 9;
    *(_WORD *)(v34 + 12) = (-107 * v27 + (v26 << 7) + -21 * v28 + 256) >> 9;
    v29 = 510 - (*(_BYTE *)(v6 + 60) + *(_BYTE *)(v6 + 56));
    v30 = 510 - (*(_BYTE *)(v6 + 61) + *(_BYTE *)(v6 + 57));
    v31 = 510 - (*(_BYTE *)(v6 + 62) + *(_BYTE *)(v6 + 58));
    *(_WORD *)(v35 + 14) = (-85 * v30 + -43 * v29 + ((510 - (*(_BYTE *)(v6 + 62) + *(_BYTE *)(v6 + 58))) << 7) + 256) >> 9;
    *(_WORD *)(v34 + 14) = (-107 * v30 + (v29 << 7) + -21 * v31 + 256) >> 9;
    v35 += 16;
    v34 += 16;
    v33 += 16;
    v6 += a2;
    ++v32;
  }
  while ( v32 < 8 );
  return result;
}

//----- (00772650) --------------------------------------------------------
void __cdecl RGBA_FPX_to_YCbCrA_FPX_4224_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5, int a6)
{
  own_rgba_fpx_to_ycbcra_fpx_4224_full_mcu_m5(a1, a2, a3, a4, a5, a6);
}

//----- (007726A0) --------------------------------------------------------
unsigned int __cdecl RGBA_FPX_to_YCbCrA_FPX_4224_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 64);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 8 )
    result = sub_771B50(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 37))(
               v7,
               v5,
               v6,
               v6 + 256,
               v6 + 384,
               v6 + 512);
  return result;
}

//----- (007727B0) --------------------------------------------------------
int __cdecl sub_7727B0(int a1, int a2, int a3, signed int a4, int a5)
{
  unsigned int v5; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // esi@2
  int v9; // edi@2
  int v10; // eax@3
  int v11; // ebp@4
  int v12; // ebx@4
  int v13; // esi@4
  int v14; // eax@5
  int v15; // edx@5
  int v16; // ecx@5
  __int16 v17; // di@5
  unsigned int v18; // esi@5
  int v19; // ebp@5
  int v20; // eax@5
  int v21; // ebx@8
  int v22; // edx@8
  int v23; // ecx@14
  int v24; // ebx@14
  int v25; // edi@15
  int v26; // ebp@15
  __int16 v27; // ax@16
  int v28; // edx@18
  int v29; // ecx@18
  int v30; // ebx@18
  int v31; // edi@19
  int v32; // esi@19
  int v33; // ebp@19
  int result; // eax@19
  __int16 v35; // cx@20
  char v36; // [sp+1Fh] [bp-82Dh]@1
  unsigned int v37; // [sp+820h] [bp-2Ch]@2
  int v38; // [sp+824h] [bp-28h]@4
  unsigned int v39; // [sp+828h] [bp-24h]@5
  int v40; // [sp+82Ch] [bp-20h]@4
  int v41; // [sp+830h] [bp-1Ch]@4
  int v42; // [sp+834h] [bp-18h]@4
  int v43; // [sp+838h] [bp-14h]@4

  v5 = (unsigned int)&v36 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v37 = (unsigned int)&v36 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v42 = v7;
        v41 = v8;
        v43 = 0;
        v13 = a1;
        v38 = v9;
        v40 = v6;
        do
        {
          v39 = v11;
          v14 = (signed __int16)(255 - *(_BYTE *)(v11 + v13));
          v15 = (signed __int16)(255 - *(_BYTE *)(v11 + v13 + 1));
          v16 = (signed __int16)(255 - *(_BYTE *)(v11 + v13 + 2));
          v17 = *(_BYTE *)(v11 + v13 + 3) - 128;
          *(_WORD *)(v37 + 2 * v12) = (150 * v15 + 77 * v14 + 29 * v16 - 32640) >> 8;
          v18 = v37;
          *(_WORD *)(v37 + 2 * v12 + 512) = (-85 * v15 + -43 * v14 + (v16 << 7) + 128) >> 8;
          v19 = v39;
          *(_WORD *)(v18 + 2 * v12 + 1024) = (-107 * v15 + (v14 << 7) + -21 * v16 + 128) >> 8;
          v11 = v19 + 4;
          v20 = v43;
          *(_WORD *)(v18 + 2 * v12++ + 1536) = v17;
          v10 = v20 + 1;
          v43 = v10;
          v13 = a1;
        }
        while ( v10 < a3 );
        v7 = v42;
        v8 = v41;
        v9 = v38;
        v6 = v40;
      }
      if ( v10 < 16 )
      {
        v39 = v37 + v9;
        v21 = v37 + 2 * (v10 + v8);
        v38 = v9;
        v40 = v6;
        v22 = v37 + v9;
        do
        {
          ++v10;
          *(_WORD *)v21 = *(_WORD *)(v22 + 2 * a3 - 2);
          *(_WORD *)(v21 + 512) = *(_WORD *)(v22 + 2 * a3 + 510);
          *(_WORD *)(v21 + 1024) = *(_WORD *)(v22 + 2 * a3 + 1022);
          *(_WORD *)(v21 + 1536) = *(_WORD *)(v22 + 2 * a3 + 1534);
          v21 += 2;
        }
        while ( v10 < 16 );
        v9 = v38;
        v6 = v40;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    v5 = v37;
  }
  if ( v6 < 16 )
  {
    v23 = 16 * v6;
    v24 = v5 + 32 * v6;
    do
    {
      v25 = v24;
      v26 = v5 + 2 * v23;
      v37 = v5;
      do
      {
        *(_WORD *)v26 = *(_WORD *)(v25 - 32);
        *(_WORD *)(v26 + 512) = *(_WORD *)(v25 + 480);
        *(_WORD *)(v26 + 1024) = *(_WORD *)(v25 + 992);
        v27 = *(_WORD *)(v25 + 1504);
        v25 += 2;
        *(_WORD *)(v26 + 1536) = v27;
        v26 += 2;
      }
      while ( v24 + 32 > v25 );
      v5 = v37;
      v23 += 16;
      v24 += 32;
      ++v6;
    }
    while ( v6 < 16 );
  }
  v28 = 0;
  v29 = 0;
  v30 = 0;
  v37 = v5;
  do
  {
    v31 = a5 + 2 * v28;
    v32 = v37 + 2 * v29;
    v33 = v37 + 2 * v30;
    result = v33 + 32;
    v38 = v29;
    v39 = v30;
    do
    {
      *(_WORD *)v31 = *(_WORD *)v32;
      *(_WORD *)(v31 + 128) = *(_WORD *)(v32 + 16);
      *(_WORD *)(v31 + 256) = *(_WORD *)(v32 + 256);
      *(_WORD *)(v31 + 384) = *(_WORD *)(v32 + 272);
      *(_WORD *)(v31 + 512) = (*(_WORD *)(v33 + 544)
                             + *(_WORD *)(v33 + 514)
                             + (signed int)*(_WORD *)(v33 + 512)
                             + *(_WORD *)(v33 + 546)
                             + 2) >> 2;
      *(_WORD *)(v31 + 640) = (*(_WORD *)(v33 + 1056)
                             + *(_WORD *)(v33 + 1026)
                             + (signed int)*(_WORD *)(v33 + 1024)
                             + *(_WORD *)(v33 + 1058)
                             + 2) >> 2;
      v33 += 4;
      *(_WORD *)(v31 + 768) = *(_WORD *)(v32 + 1536);
      *(_WORD *)(v31 + 896) = *(_WORD *)(v32 + 1552);
      *(_WORD *)(v31 + 1024) = *(_WORD *)(v32 + 1792);
      v35 = *(_WORD *)(v32 + 1808);
      v32 += 2;
      *(_WORD *)(v31 + 1152) = v35;
      v31 += 2;
    }
    while ( result > v33 );
    v28 += 8;
    v29 = v38 + 16;
    v30 = v39 + 32;
  }
  while ( (signed int)(v39 + 32) < 256 );
  return result;
}

//----- (00772B90) --------------------------------------------------------
int __cdecl sub_772B90(int a1, int a2, int a3, int a4, int a5, int a6)
{
  int result; // eax@1
  int v7; // edx@1
  int v8; // ST64_4@2
  int v9; // ST60_4@2
  int v10; // ST5C_4@2
  int v11; // ST58_4@2
  int v12; // ST54_4@2
  int v13; // ST50_4@2
  int v14; // ST4C_4@2
  int v15; // ST48_4@2
  int v16; // ST44_4@2
  int v17; // ST40_4@2
  int v18; // ST3C_4@2
  int v19; // ST38_4@2
  int v20; // ST34_4@2
  int v21; // ST30_4@2
  int v22; // ST2C_4@2
  int v23; // ST28_4@2
  int v24; // ST24_4@2
  int v25; // ST20_4@2
  int v26; // ST1C_4@2
  int v27; // ST18_4@2
  int v28; // ST14_4@2
  int v29; // ST10_4@2
  int v30; // ST0C_4@2
  int v31; // ST08_4@2
  int v32; // eax@2
  int v33; // esi@2
  int v34; // ebp@2
  int v35; // ebx@2
  int v36; // esi@2
  int v37; // ebp@2
  int v38; // ebx@2
  int v39; // esi@2
  int v40; // ebp@2
  int v41; // ebx@2
  int v42; // esi@2
  int v43; // ebp@2
  int v44; // ebx@2
  int v45; // esi@2
  int v46; // ebp@2
  int v47; // ebx@2
  int v48; // ebp@2
  int v49; // ebx@2
  int v50; // ecx@2
  int v51; // ecx@2
  int v52; // ebx@2
  int v53; // ebp@2
  int v54; // esi@2
  int v55; // ebp@2
  int v56; // ebx@2
  bool v57; // sf@2
  unsigned __int8 v58; // of@2
  int v59; // [sp+4h] [bp-80h]@1
  int v60; // [sp+68h] [bp-1Ch]@1
  int v61; // [sp+6Ch] [bp-18h]@1
  int v62; // [sp+70h] [bp-14h]@1

  result = a1;
  v7 = a3;
  v61 = a5;
  v62 = a4;
  v59 = 0;
  v60 = a6;
  do
  {
    *(_WORD *)v7 = (-150 * *(_BYTE *)(result + 1) + -77 * *(_BYTE *)result + -29 * *(_BYTE *)(result + 2) + 32640) >> 8;
    *(_WORD *)(v7 + 2) = (-150 * *(_BYTE *)(result + 5)
                        + -77 * *(_BYTE *)(result + 4)
                        + -29 * *(_BYTE *)(result + 6)
                        + 32640) >> 8;
    *(_WORD *)(v7 + 4) = (-150 * *(_BYTE *)(result + 9)
                        + -77 * *(_BYTE *)(result + 8)
                        + -29 * *(_BYTE *)(result + 10)
                        + 32640) >> 8;
    *(_WORD *)(v7 + 6) = (-150 * *(_BYTE *)(result + 13)
                        + -77 * *(_BYTE *)(result + 12)
                        + -29 * *(_BYTE *)(result + 14)
                        + 32640) >> 8;
    *(_WORD *)(v7 + 8) = (-150 * *(_BYTE *)(result + 17)
                        + -77 * *(_BYTE *)(result + 16)
                        + -29 * *(_BYTE *)(result + 18)
                        + 32640) >> 8;
    *(_WORD *)(v7 + 10) = (-150 * *(_BYTE *)(result + 21)
                         + -77 * *(_BYTE *)(result + 20)
                         + -29 * *(_BYTE *)(result + 22)
                         + 32640) >> 8;
    *(_WORD *)(v7 + 12) = (-150 * *(_BYTE *)(result + 25)
                         + -77 * *(_BYTE *)(result + 24)
                         + -29 * *(_BYTE *)(result + 26)
                         + 32640) >> 8;
    *(_WORD *)(v7 + 14) = (-150 * *(_BYTE *)(result + 29)
                         + -77 * *(_BYTE *)(result + 28)
                         + -29 * *(_BYTE *)(result + 30)
                         + 32640) >> 8;
    *(_WORD *)(v7 + 128) = (-150 * *(_BYTE *)(result + 33)
                          + -77 * *(_BYTE *)(result + 32)
                          + -29 * *(_BYTE *)(result + 34)
                          + 32640) >> 8;
    *(_WORD *)(v7 + 130) = (-150 * *(_BYTE *)(result + 37)
                          + -77 * *(_BYTE *)(result + 36)
                          + -29 * *(_BYTE *)(result + 38)
                          + 32640) >> 8;
    *(_WORD *)(v7 + 132) = (-150 * *(_BYTE *)(result + 41)
                          + -77 * *(_BYTE *)(result + 40)
                          + -29 * *(_BYTE *)(result + 42)
                          + 32640) >> 8;
    *(_WORD *)(v7 + 134) = (-150 * *(_BYTE *)(result + 45)
                          + -77 * *(_BYTE *)(result + 44)
                          + -29 * *(_BYTE *)(result + 46)
                          + 32640) >> 8;
    *(_WORD *)(v7 + 136) = (-150 * *(_BYTE *)(result + 49)
                          + -77 * *(_BYTE *)(result + 48)
                          + -29 * *(_BYTE *)(result + 50)
                          + 32640) >> 8;
    *(_WORD *)(v7 + 138) = (-150 * *(_BYTE *)(result + 53)
                          + -77 * *(_BYTE *)(result + 52)
                          + -29 * *(_BYTE *)(result + 54)
                          + 32640) >> 8;
    *(_WORD *)(v7 + 140) = (-150 * *(_BYTE *)(result + 57)
                          + -77 * *(_BYTE *)(result + 56)
                          + -29 * *(_BYTE *)(result + 58)
                          + 32640) >> 8;
    *(_WORD *)(v7 + 142) = (-150 * *(_BYTE *)(result + 61)
                          + -77 * *(_BYTE *)(result + 60)
                          + -29 * *(_BYTE *)(result + 62)
                          + 32640) >> 8;
    *(_WORD *)v60 = *(_BYTE *)(result + 3) - 128;
    *(_WORD *)(v60 + 2) = *(_BYTE *)(result + 7) - 128;
    *(_WORD *)(v60 + 4) = *(_BYTE *)(result + 11) - 128;
    *(_WORD *)(v60 + 6) = *(_BYTE *)(result + 15) - 128;
    *(_WORD *)(v60 + 8) = *(_BYTE *)(result + 19) - 128;
    *(_WORD *)(v60 + 10) = *(_BYTE *)(result + 23) - 128;
    *(_WORD *)(v60 + 12) = *(_BYTE *)(result + 27) - 128;
    *(_WORD *)(v60 + 14) = *(_BYTE *)(result + 31) - 128;
    *(_WORD *)(v60 + 128) = *(_BYTE *)(result + 35) - 128;
    *(_WORD *)(v60 + 130) = *(_BYTE *)(result + 39) - 128;
    *(_WORD *)(v60 + 132) = *(_BYTE *)(result + 43) - 128;
    *(_WORD *)(v60 + 134) = *(_BYTE *)(result + 47) - 128;
    *(_WORD *)(v60 + 136) = *(_BYTE *)(result + 51) - 128;
    *(_WORD *)(v60 + 138) = *(_BYTE *)(result + 55) - 128;
    *(_WORD *)(v60 + 140) = *(_BYTE *)(result + 59) - 128;
    *(_WORD *)(v60 + 142) = *(_BYTE *)(result + 63) - 128;
    v8 = *(_BYTE *)(result + 4) + *(_BYTE *)result;
    v9 = *(_BYTE *)(result + 5) + *(_BYTE *)(result + 1);
    v10 = *(_BYTE *)(result + 6) + *(_BYTE *)(result + 2);
    v11 = *(_BYTE *)(result + 12) + *(_BYTE *)(result + 8);
    v12 = *(_BYTE *)(result + 13) + *(_BYTE *)(result + 9);
    v13 = *(_BYTE *)(result + 14) + *(_BYTE *)(result + 10);
    v14 = *(_BYTE *)(result + 20) + *(_BYTE *)(result + 16);
    v15 = *(_BYTE *)(result + 21) + *(_BYTE *)(result + 17);
    v16 = *(_BYTE *)(result + 22) + *(_BYTE *)(result + 18);
    v17 = *(_BYTE *)(result + 28) + *(_BYTE *)(result + 24);
    v18 = *(_BYTE *)(result + 29) + *(_BYTE *)(result + 25);
    v19 = *(_BYTE *)(result + 30) + *(_BYTE *)(result + 26);
    v20 = *(_BYTE *)(result + 36) + *(_BYTE *)(result + 32);
    v21 = *(_BYTE *)(result + 37) + *(_BYTE *)(result + 33);
    v22 = *(_BYTE *)(result + 38) + *(_BYTE *)(result + 34);
    v23 = *(_BYTE *)(result + 44) + *(_BYTE *)(result + 40);
    v24 = *(_BYTE *)(result + 45) + *(_BYTE *)(result + 41);
    v25 = *(_BYTE *)(result + 46) + *(_BYTE *)(result + 42);
    v26 = *(_BYTE *)(result + 52) + *(_BYTE *)(result + 48);
    v27 = *(_BYTE *)(result + 53) + *(_BYTE *)(result + 49);
    v28 = *(_BYTE *)(result + 54) + *(_BYTE *)(result + 50);
    v29 = *(_BYTE *)(result + 60) + *(_BYTE *)(result + 56);
    v30 = *(_BYTE *)(result + 61) + *(_BYTE *)(result + 57);
    v31 = *(_BYTE *)(result + 62) + *(_BYTE *)(result + 58);
    v32 = a2 + result;
    *(_WORD *)(v7 + 16) = (-150 * *(_BYTE *)(v32 + 1) + -77 * *(_BYTE *)v32 + -29 * *(_BYTE *)(v32 + 2) + 32640) >> 8;
    *(_WORD *)(v7 + 18) = (-150 * *(_BYTE *)(v32 + 5) + -77 * *(_BYTE *)(v32 + 4) + -29 * *(_BYTE *)(v32 + 6) + 32640) >> 8;
    *(_WORD *)(v7 + 20) = (-150 * *(_BYTE *)(v32 + 9) + -77 * *(_BYTE *)(v32 + 8) + -29 * *(_BYTE *)(v32 + 10) + 32640) >> 8;
    *(_WORD *)(v7 + 22) = (-150 * *(_BYTE *)(v32 + 13) + -77 * *(_BYTE *)(v32 + 12) + -29 * *(_BYTE *)(v32 + 14) + 32640) >> 8;
    *(_WORD *)(v7 + 24) = (-150 * *(_BYTE *)(v32 + 17) + -77 * *(_BYTE *)(v32 + 16) + -29 * *(_BYTE *)(v32 + 18) + 32640) >> 8;
    *(_WORD *)(v7 + 26) = (-150 * *(_BYTE *)(v32 + 21) + -77 * *(_BYTE *)(v32 + 20) + -29 * *(_BYTE *)(v32 + 22) + 32640) >> 8;
    *(_WORD *)(v7 + 28) = (-150 * *(_BYTE *)(v32 + 25) + -77 * *(_BYTE *)(v32 + 24) + -29 * *(_BYTE *)(v32 + 26) + 32640) >> 8;
    *(_WORD *)(v7 + 30) = (-150 * *(_BYTE *)(v32 + 29) + -77 * *(_BYTE *)(v32 + 28) + -29 * *(_BYTE *)(v32 + 30) + 32640) >> 8;
    *(_WORD *)(v7 + 144) = (-150 * *(_BYTE *)(v32 + 33) + -77 * *(_BYTE *)(v32 + 32) + -29 * *(_BYTE *)(v32 + 34) + 32640) >> 8;
    *(_WORD *)(v7 + 146) = (-150 * *(_BYTE *)(v32 + 37) + -77 * *(_BYTE *)(v32 + 36) + -29 * *(_BYTE *)(v32 + 38) + 32640) >> 8;
    *(_WORD *)(v7 + 148) = (-150 * *(_BYTE *)(v32 + 41) + -77 * *(_BYTE *)(v32 + 40) + -29 * *(_BYTE *)(v32 + 42) + 32640) >> 8;
    *(_WORD *)(v7 + 150) = (-150 * *(_BYTE *)(v32 + 45) + -77 * *(_BYTE *)(v32 + 44) + -29 * *(_BYTE *)(v32 + 46) + 32640) >> 8;
    *(_WORD *)(v7 + 152) = (-150 * *(_BYTE *)(v32 + 49) + -77 * *(_BYTE *)(v32 + 48) + -29 * *(_BYTE *)(v32 + 50) + 32640) >> 8;
    *(_WORD *)(v7 + 154) = (-150 * *(_BYTE *)(v32 + 53) + -77 * *(_BYTE *)(v32 + 52) + -29 * *(_BYTE *)(v32 + 54) + 32640) >> 8;
    *(_WORD *)(v7 + 156) = (-150 * *(_BYTE *)(v32 + 57) + -77 * *(_BYTE *)(v32 + 56) + -29 * *(_BYTE *)(v32 + 58) + 32640) >> 8;
    *(_WORD *)(v7 + 158) = (-150 * *(_BYTE *)(v32 + 61) + -77 * *(_BYTE *)(v32 + 60) + -29 * *(_BYTE *)(v32 + 62) + 32640) >> 8;
    *(_WORD *)(v60 + 16) = *(_BYTE *)(v32 + 3) - 128;
    *(_WORD *)(v60 + 18) = *(_BYTE *)(v32 + 7) - 128;
    *(_WORD *)(v60 + 20) = *(_BYTE *)(v32 + 11) - 128;
    *(_WORD *)(v60 + 22) = *(_BYTE *)(v32 + 15) - 128;
    *(_WORD *)(v60 + 24) = *(_BYTE *)(v32 + 19) - 128;
    *(_WORD *)(v60 + 26) = *(_BYTE *)(v32 + 23) - 128;
    *(_WORD *)(v60 + 28) = *(_BYTE *)(v32 + 27) - 128;
    *(_WORD *)(v60 + 30) = *(_BYTE *)(v32 + 31) - 128;
    *(_WORD *)(v60 + 144) = *(_BYTE *)(v32 + 35) - 128;
    *(_WORD *)(v60 + 146) = *(_BYTE *)(v32 + 39) - 128;
    *(_WORD *)(v60 + 148) = *(_BYTE *)(v32 + 43) - 128;
    *(_WORD *)(v60 + 150) = *(_BYTE *)(v32 + 47) - 128;
    *(_WORD *)(v60 + 152) = *(_BYTE *)(v32 + 51) - 128;
    *(_WORD *)(v60 + 154) = *(_BYTE *)(v32 + 55) - 128;
    *(_WORD *)(v60 + 156) = *(_BYTE *)(v32 + 59) - 128;
    *(_WORD *)(v60 + 158) = *(_BYTE *)(v32 + 63) - 128;
    v33 = 1020 - (v8 + *(_BYTE *)(v32 + 4) + *(_BYTE *)v32);
    v34 = 1020 - (v9 + *(_BYTE *)(v32 + 5) + *(_BYTE *)(v32 + 1));
    v35 = 1020 - (v10 + *(_BYTE *)(v32 + 6) + *(_BYTE *)(v32 + 2));
    *(_WORD *)v62 = (-85 * v34 + -43 * v33 + ((1020 - (v10 + *(_BYTE *)(v32 + 6) + *(_BYTE *)(v32 + 2))) << 7) + 512) >> 10;
    *(_WORD *)v61 = (-107 * v34 + (v33 << 7) + -21 * v35 + 512) >> 10;
    v36 = 1020 - (v11 + *(_BYTE *)(v32 + 12) + *(_BYTE *)(v32 + 8));
    v37 = 1020 - (v12 + *(_BYTE *)(v32 + 13) + *(_BYTE *)(v32 + 9));
    v38 = 1020 - (v13 + *(_BYTE *)(v32 + 14) + *(_BYTE *)(v32 + 10));
    *(_WORD *)(v62 + 2) = (-85 * v37
                         + -43 * v36
                         + ((1020 - (v13 + *(_BYTE *)(v32 + 14) + *(_BYTE *)(v32 + 10))) << 7)
                         + 512) >> 10;
    *(_WORD *)(v61 + 2) = (-107 * v37 + (v36 << 7) + -21 * v38 + 512) >> 10;
    v39 = 1020 - (v14 + *(_BYTE *)(v32 + 20) + *(_BYTE *)(v32 + 16));
    v40 = 1020 - (v15 + *(_BYTE *)(v32 + 21) + *(_BYTE *)(v32 + 17));
    v41 = 1020 - (v16 + *(_BYTE *)(v32 + 22) + *(_BYTE *)(v32 + 18));
    *(_WORD *)(v62 + 4) = (-85 * v40
                         + -43 * v39
                         + ((1020 - (v16 + *(_BYTE *)(v32 + 22) + *(_BYTE *)(v32 + 18))) << 7)
                         + 512) >> 10;
    *(_WORD *)(v61 + 4) = (-107 * v40 + (v39 << 7) + -21 * v41 + 512) >> 10;
    v42 = 1020 - (v17 + *(_BYTE *)(v32 + 28) + *(_BYTE *)(v32 + 24));
    v43 = 1020 - (v18 + *(_BYTE *)(v32 + 29) + *(_BYTE *)(v32 + 25));
    v44 = 1020 - (v19 + *(_BYTE *)(v32 + 30) + *(_BYTE *)(v32 + 26));
    *(_WORD *)(v62 + 6) = (-85 * v43
                         + -43 * v42
                         + ((1020 - (v19 + *(_BYTE *)(v32 + 30) + *(_BYTE *)(v32 + 26))) << 7)
                         + 512) >> 10;
    *(_WORD *)(v61 + 6) = (-107 * v43 + (v42 << 7) + -21 * v44 + 512) >> 10;
    v45 = 1020 - (v20 + *(_BYTE *)(v32 + 36) + *(_BYTE *)(v32 + 32));
    v46 = 1020 - (v21 + *(_BYTE *)(v32 + 37) + *(_BYTE *)(v32 + 33));
    v47 = 1020 - (v22 + *(_BYTE *)(v32 + 38) + *(_BYTE *)(v32 + 34));
    *(_WORD *)(v62 + 8) = (-85 * v46
                         + -43 * v45
                         + ((1020 - (v22 + *(_BYTE *)(v32 + 38) + *(_BYTE *)(v32 + 34))) << 7)
                         + 512) >> 10;
    *(_WORD *)(v61 + 8) = (-107 * v46 + (v45 << 7) + -21 * v47 + 512) >> 10;
    v48 = 1020 - (v23 + *(_BYTE *)(v32 + 44) + *(_BYTE *)(v32 + 40));
    v49 = 1020 - (v24 + *(_BYTE *)(v32 + 45) + *(_BYTE *)(v32 + 41));
    v50 = 1020 - (v25 + *(_BYTE *)(v32 + 46) + *(_BYTE *)(v32 + 42));
    *(_WORD *)(v62 + 10) = (-85 * v49
                          + -43 * v48
                          + ((1020 - (v25 + *(_BYTE *)(v32 + 46) + *(_BYTE *)(v32 + 42))) << 7)
                          + 512) >> 10;
    *(_WORD *)(v61 + 10) = (-107 * v49 + (v48 << 7) + -21 * v50 + 512) >> 10;
    v51 = 1020 - (v26 + *(_BYTE *)(v32 + 52) + *(_BYTE *)(v32 + 48));
    v52 = 1020 - (v27 + *(_BYTE *)(v32 + 53) + *(_BYTE *)(v32 + 49));
    v53 = 1020 - (v28 + *(_BYTE *)(v32 + 54) + *(_BYTE *)(v32 + 50));
    *(_WORD *)(v62 + 12) = (-85 * v52
                          + -43 * v51
                          + ((1020 - (v28 + *(_BYTE *)(v32 + 54) + *(_BYTE *)(v32 + 50))) << 7)
                          + 512) >> 10;
    *(_WORD *)(v61 + 12) = (-107 * v52 + (v51 << 7) + -21 * v53 + 512) >> 10;
    v54 = 1020 - (v29 + *(_BYTE *)(v32 + 60) + *(_BYTE *)(v32 + 56));
    v55 = 1020 - (v30 + *(_BYTE *)(v32 + 61) + *(_BYTE *)(v32 + 57));
    v56 = 1020 - (v31 + *(_BYTE *)(v32 + 62) + *(_BYTE *)(v32 + 58));
    *(_WORD *)(v62 + 14) = (-85 * v55
                          + -43 * v54
                          + ((1020 - (v31 + *(_BYTE *)(v32 + 62) + *(_BYTE *)(v32 + 58))) << 7)
                          + 512) >> 10;
    v7 += 32;
    *(_WORD *)(v61 + 14) = (-107 * v55 + (v54 << 7) + -21 * v56 + 512) >> 10;
    v62 += 16;
    v61 += 16;
    result = a2 + v32;
    v60 += 32;
    v58 = __OFSUB__(v59 + 2, 8);
    v57 = v59 - 6 < 0;
    v59 += 2;
  }
  while ( v57 ^ v58 );
  return result;
}

//----- (007738A0) --------------------------------------------------------
int __cdecl RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5, int a6)
{
  sub_772B90(a1, a2, a3, a4, a5, a6);
  return sub_772B90(a1 + 8 * a2, a2, a3 + 256, a4 + 64, a5 + 64, a6 + 256);
}

//----- (00773920) --------------------------------------------------------
void __cdecl RGBA_FPX_to_YCbCrA_FPX_4114_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5, int a6)
{
  own_rgba_fpx_to_ycbcra_fpx_4114_one_half_mcu_m5(a1, a2, a3, a4, a5, a6);
  own_rgba_fpx_to_ycbcra_fpx_4114_one_half_mcu_m5(a1 + 8 * a2, a2, a3 + 256, a4 + 64, a5 + 64, a6 + 256);
}

//----- (007739A0) --------------------------------------------------------
int __cdecl RGBA_FPX_to_YCbCrA_FPX_4114_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 16;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (16 * a3 + 16)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 64);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 0xF) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 16 )
    result = sub_7727B0(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 38))(
               v7,
               v5,
               v6,
               v6 + 512,
               v6 + 640,
               v6 + 768);
  return result;
}

//----- (00773AB0) --------------------------------------------------------
int __cdecl sub_773AB0(int a1, int a2, signed int a3, int a4, int a5)
{
  int v5; // edx@1
  int result; // eax@1
  int v7; // edi@1
  int v8; // esi@1
  signed int v9; // ebp@1
  int v10; // ecx@2
  signed int v11; // eax@3
  int v12; // esi@4
  int v13; // esi@7

  v5 = a1;
  result = a2;
  v7 = a4;
  v8 = a5;
  v9 = 0;
  if ( a4 > 0 )
  {
    v10 = 0;
    do
    {
      v11 = 0;
      if ( a3 > 0 )
      {
        v12 = v10;
        do
        {
          *(_WORD *)(a5 + 2 * v12) = *(_BYTE *)(v5 + 4 * v11) - 128;
          *(_WORD *)(a5 + 2 * v12 + 128) = *(_BYTE *)(v5 + 4 * v11 + 1) - 128;
          *(_WORD *)(a5 + 2 * v12 + 256) = *(_BYTE *)(v5 + 4 * v11 + 2) - 128;
          *(_WORD *)(a5 + 2 * v12++ + 384) = *(_BYTE *)(v5 + 4 * v11++ + 3) - 128;
        }
        while ( v11 < a3 );
      }
      if ( v11 < 8 )
      {
        v13 = a5 + 2 * (v11 + v10);
        do
        {
          ++v11;
          *(_WORD *)v13 = *(_WORD *)(v13 - 2);
          *(_WORD *)(v13 + 128) = *(_WORD *)(v13 + 126);
          *(_WORD *)(v13 + 256) = *(_WORD *)(v13 + 254);
          *(_WORD *)(v13 + 384) = *(_WORD *)(v13 + 382);
          v13 += 2;
        }
        while ( v11 < 8 );
      }
      v5 += a2;
      v10 += 8;
      ++v9;
      result = a4;
    }
    while ( v9 < a4 );
    v8 = a5;
    v7 = a4;
  }
  if ( v9 < 8 )
  {
    result = v8 + 16 * v9;
    do
    {
      ++v9;
      *(_WORD *)result = *(_WORD *)(v8 + 16 * v7 - 16);
      *(_WORD *)(result + 128) = *(_WORD *)(v8 + 16 * v7 + 112);
      *(_WORD *)(result + 256) = *(_WORD *)(v8 + 16 * v7 + 240);
      *(_WORD *)(result + 384) = *(_WORD *)(v8 + 16 * v7 + 368);
      *(_WORD *)(result + 2) = *(_WORD *)(v8 + 16 * v7 - 14);
      *(_WORD *)(result + 130) = *(_WORD *)(v8 + 16 * v7 + 114);
      *(_WORD *)(result + 258) = *(_WORD *)(v8 + 16 * v7 + 242);
      *(_WORD *)(result + 386) = *(_WORD *)(v8 + 16 * v7 + 370);
      *(_WORD *)(result + 4) = *(_WORD *)(v8 + 16 * v7 - 12);
      *(_WORD *)(result + 132) = *(_WORD *)(v8 + 16 * v7 + 116);
      *(_WORD *)(result + 260) = *(_WORD *)(v8 + 16 * v7 + 244);
      *(_WORD *)(result + 388) = *(_WORD *)(v8 + 16 * v7 + 372);
      *(_WORD *)(result + 6) = *(_WORD *)(v8 + 16 * v7 - 10);
      *(_WORD *)(result + 134) = *(_WORD *)(v8 + 16 * v7 + 118);
      *(_WORD *)(result + 262) = *(_WORD *)(v8 + 16 * v7 + 246);
      *(_WORD *)(result + 390) = *(_WORD *)(v8 + 16 * v7 + 374);
      *(_WORD *)(result + 8) = *(_WORD *)(v8 + 16 * v7 - 8);
      *(_WORD *)(result + 136) = *(_WORD *)(v8 + 16 * v7 + 120);
      *(_WORD *)(result + 264) = *(_WORD *)(v8 + 16 * v7 + 248);
      *(_WORD *)(result + 392) = *(_WORD *)(v8 + 16 * v7 + 376);
      *(_WORD *)(result + 10) = *(_WORD *)(v8 + 16 * v7 - 6);
      *(_WORD *)(result + 138) = *(_WORD *)(v8 + 16 * v7 + 122);
      *(_WORD *)(result + 266) = *(_WORD *)(v8 + 16 * v7 + 250);
      *(_WORD *)(result + 394) = *(_WORD *)(v8 + 16 * v7 + 378);
      *(_WORD *)(result + 12) = *(_WORD *)(v8 + 16 * v7 - 4);
      *(_WORD *)(result + 140) = *(_WORD *)(v8 + 16 * v7 + 124);
      *(_WORD *)(result + 268) = *(_WORD *)(v8 + 16 * v7 + 252);
      *(_WORD *)(result + 396) = *(_WORD *)(v8 + 16 * v7 + 380);
      *(_WORD *)(result + 14) = *(_WORD *)(v8 + 16 * v7 - 2);
      *(_WORD *)(result + 142) = *(_WORD *)(v8 + 16 * v7 + 126);
      *(_WORD *)(result + 270) = *(_WORD *)(v8 + 16 * v7 + 254);
      *(_WORD *)(result + 398) = *(_WORD *)(v8 + 16 * v7 + 382);
      result += 16;
    }
    while ( v9 < 8 );
  }
  return result;
}

//----- (00773D70) --------------------------------------------------------
int __cdecl OTHER_to_OTHER_1111_Full_MCU(int a1, int a2, int a3, int a4, int a5, int a6)
{
  int v6; // ebp@1
  int v7; // ebx@1
  int v8; // edx@2
  int result; // eax@2
  int v10; // [sp+8h] [bp-1Ch]@2

  v6 = a1;
  v7 = 0;
  do
  {
    v8 = v7;
    result = v6;
    v10 = v7;
    do
    {
      *(_WORD *)(a3 + 2 * v8) = *(_BYTE *)result - 128;
      *(_WORD *)(a4 + 2 * v8) = *(_BYTE *)(result + 1) - 128;
      *(_WORD *)(a5 + 2 * v8) = *(_BYTE *)(result + 2) - 128;
      *(_WORD *)(a6 + 2 * v8++) = *(_BYTE *)(result + 3) - 128;
      result += 4;
    }
    while ( v6 + 32 > result );
    v6 += a2;
    v7 += 8;
  }
  while ( v10 + 8 < 64 );
  return result;
}

//----- (00773E10) --------------------------------------------------------
int __cdecl OTHER_to_OTHER_1111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  signed int v3; // edi@1
  int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  signed int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 8;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 7) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 32);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 8 || v4 != 8 )
    result = sub_773AB0(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 39))(
               v7,
               v5,
               v6,
               v6 + 128,
               v6 + 256,
               v6 + 384);
  return result;
}

//----- (00773F20) --------------------------------------------------------
signed int __cdecl sub_773F20(int a1, int a2, signed int a3, signed int a4, int a5)
{
  int v5; // ebp@1
  signed int result; // eax@1
  int v7; // edx@2
  int v8; // ecx@2
  signed int v9; // ebx@3
  int v10; // esi@4
  int v11; // ebp@4
  int v12; // esi@6
  int v13; // edi@6
  int v14; // edi@8
  int v15; // ebp@8
  int v16; // ebp@10
  int v17; // ecx@14
  int v18; // edx@14

  v5 = a1;
  result = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    do
    {
      v9 = 0;
      if ( a3 > 0 )
      {
        v10 = v7;
        v11 = v8;
        do
        {
          ++v9;
          *(_WORD *)(a5 + 2 * v11) = *(_BYTE *)(v10 + a1) - 128;
          *(_WORD *)(a5 + 2 * v11 + 128) = *(_BYTE *)(v10 + a1 + 1) - 128;
          *(_WORD *)(a5 + 2 * v11 + 256) = *(_BYTE *)(v10 + a1 + 2) - 128;
          v10 += 3;
          ++v11;
        }
        while ( v9 < a3 );
      }
      v12 = v7 + 3 * v9;
      v13 = v7 + 3 * v9 - 3;
      if ( v9 < 8 )
      {
        if ( 8 - v9 < 4 )
        {
          v14 = a1 + v13;
        }
        else
        {
          v14 = a1 + v13;
          v15 = v9 + v8;
          do
          {
            v9 += 3;
            *(_WORD *)(a5 + 2 * v15) = *(_BYTE *)(v12 + a1 - 3) - 128;
            *(_WORD *)(a5 + 2 * v15 + 128) = *(_BYTE *)(v12 + a1 - 2) - 128;
            *(_WORD *)(a5 + 2 * v15 + 256) = *(_BYTE *)(v12 + a1 - 1) - 128;
            *(_WORD *)(a5 + 2 * v15 + 2) = *(_BYTE *)(v12 + a1 - 3) - 128;
            *(_WORD *)(a5 + 2 * v15 + 130) = *(_BYTE *)(v12 + a1 - 2) - 128;
            *(_WORD *)(a5 + 2 * v15 + 258) = *(_BYTE *)(v12 + a1 - 1) - 128;
            *(_WORD *)(a5 + 2 * v15 + 4) = *(_BYTE *)(v12 + a1 - 3) - 128;
            *(_WORD *)(a5 + 2 * v15 + 132) = *(_BYTE *)(v12 + a1 - 2) - 128;
            *(_WORD *)(a5 + 2 * v15 + 260) = *(_BYTE *)(v12 + a1 - 1) - 128;
            v15 += 3;
          }
          while ( v9 < 4 );
        }
        v16 = a5 + 2 * (v9 + v8);
        do
        {
          ++v9;
          *(_WORD *)v16 = *(_BYTE *)v14 - 128;
          *(_WORD *)(v16 + 128) = *(_BYTE *)(v14 + 1) - 128;
          *(_WORD *)(v16 + 256) = *(_BYTE *)(v14 + 2) - 128;
          v16 += 2;
        }
        while ( v9 < 8 );
      }
      v7 += a2;
      v8 += 8;
      ++result;
    }
    while ( result < a4 );
    v5 = a1;
  }
  v17 = 8 * result;
  v18 = 8 * result - 8;
  if ( result < 8 )
  {
    while ( 1 )
    {
      ++result;
      *(_WORD *)(a5 + 2 * v17) = *(_BYTE *)(v18 + v5) - 128;
      *(_WORD *)(a5 + 2 * v17 + 128) = *(_BYTE *)(v18 + v5 + 1) - 128;
      *(_WORD *)(a5 + 2 * v17 + 256) = *(_BYTE *)(v18 + v5 + 2) - 128;
      *(_WORD *)(a5 + 2 * v17 + 2) = *(_BYTE *)(v18 + v5 + 3) - 128;
      *(_WORD *)(a5 + 2 * v17 + 130) = *(_BYTE *)(v18 + v5 + 4) - 128;
      *(_WORD *)(a5 + 2 * v17 + 258) = *(_BYTE *)(v18 + v5 + 5) - 128;
      *(_WORD *)(a5 + 2 * v17 + 4) = *(_BYTE *)(v18 + v5 + 6) - 128;
      *(_WORD *)(a5 + 2 * v17 + 132) = *(_BYTE *)(v18 + v5 + 7) - 128;
      *(_WORD *)(a5 + 2 * v17 + 260) = *(_BYTE *)(v18 + v5 + 8) - 128;
      *(_WORD *)(a5 + 2 * v17 + 6) = *(_BYTE *)(v18 + v5 + 9) - 128;
      *(_WORD *)(a5 + 2 * v17 + 134) = *(_BYTE *)(v18 + v5 + 10) - 128;
      *(_WORD *)(a5 + 2 * v17 + 262) = *(_BYTE *)(v18 + v5 + 11) - 128;
      *(_WORD *)(a5 + 2 * v17 + 8) = *(_BYTE *)(v18 + v5 + 12) - 128;
      *(_WORD *)(a5 + 2 * v17 + 136) = *(_BYTE *)(v18 + v5 + 13) - 128;
      *(_WORD *)(a5 + 2 * v17 + 264) = *(_BYTE *)(v18 + v5 + 14) - 128;
      *(_WORD *)(a5 + 2 * v17 + 10) = *(_BYTE *)(v18 + v5 + 15) - 128;
      *(_WORD *)(a5 + 2 * v17 + 138) = *(_BYTE *)(v18 + v5 + 16) - 128;
      *(_WORD *)(a5 + 2 * v17 + 266) = *(_BYTE *)(v18 + v5 + 17) - 128;
      *(_WORD *)(a5 + 2 * v17 + 12) = *(_BYTE *)(v18 + v5 + 18) - 128;
      *(_WORD *)(a5 + 2 * v17 + 140) = *(_BYTE *)(v18 + v5 + 19) - 128;
      *(_WORD *)(a5 + 2 * v17 + 268) = *(_BYTE *)(v18 + v5 + 20) - 128;
      *(_WORD *)(a5 + 2 * v17 + 14) = *(_BYTE *)(v18 + v5 + 21) - 128;
      *(_WORD *)(a5 + 2 * v17 + 142) = *(_BYTE *)(v18 + v5 + 22) - 128;
      *(_WORD *)(a5 + 2 * v17 + 270) = *(_BYTE *)(v18 + v5 + 23) - 128;
      if ( result >= 8 )
        break;
      v17 = 8 * result;
    }
  }
  return result;
}

//----- (007742B0) --------------------------------------------------------
int __cdecl OTHER_to_OTHER_111_Full_MCU(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // edi@1
  int v6; // esi@1
  int v7; // ebx@1
  int v8; // ecx@1
  signed int v9; // edx@1
  int result; // eax@2

  v5 = a1;
  v6 = a3;
  v7 = a4;
  v8 = a5;
  v9 = 0;
  do
  {
    ++v9;
    *(_WORD *)v6 = *(_BYTE *)v5 - 128;
    *(_WORD *)v7 = *(_BYTE *)(v5 + 1) - 128;
    result = v8 + 2;
    *(_WORD *)v8 = *(_BYTE *)(v5 + 2) - 128;
    *(_WORD *)(v6 + 2) = *(_BYTE *)(v5 + 3) - 128;
    *(_WORD *)(v7 + 2) = *(_BYTE *)(v5 + 4) - 128;
    *(_WORD *)(v8 + 2) = *(_BYTE *)(v5 + 5) - 128;
    *(_WORD *)(v6 + 4) = *(_BYTE *)(v5 + 6) - 128;
    *(_WORD *)(v7 + 4) = *(_BYTE *)(v5 + 7) - 128;
    *(_WORD *)(v8 + 4) = *(_BYTE *)(v5 + 8) - 128;
    *(_WORD *)(v6 + 6) = *(_BYTE *)(v5 + 9) - 128;
    *(_WORD *)(v7 + 6) = *(_BYTE *)(v5 + 10) - 128;
    *(_WORD *)(v8 + 6) = *(_BYTE *)(v5 + 11) - 128;
    *(_WORD *)(v6 + 8) = *(_BYTE *)(v5 + 12) - 128;
    *(_WORD *)(v7 + 8) = *(_BYTE *)(v5 + 13) - 128;
    *(_WORD *)(v8 + 8) = *(_BYTE *)(v5 + 14) - 128;
    *(_WORD *)(v6 + 10) = *(_BYTE *)(v5 + 15) - 128;
    *(_WORD *)(v7 + 10) = *(_BYTE *)(v5 + 16) - 128;
    *(_WORD *)(v8 + 10) = *(_BYTE *)(v5 + 17) - 128;
    *(_WORD *)(v6 + 12) = *(_BYTE *)(v5 + 18) - 128;
    *(_WORD *)(v7 + 12) = *(_BYTE *)(v5 + 19) - 128;
    *(_WORD *)(v8 + 12) = *(_BYTE *)(v5 + 20) - 128;
    *(_WORD *)(v6 + 14) = *(_BYTE *)(v5 + 21) - 128;
    *(_WORD *)(v7 + 14) = *(_BYTE *)(v5 + 22) - 128;
    v8 += 16;
    v6 += 16;
    v7 += 16;
    *(_WORD *)(result + 12) = *(_BYTE *)(v5 + 23) - 128;
    v5 += a2;
  }
  while ( v9 < 8 );
  return result;
}

//----- (00774400) --------------------------------------------------------
signed int __cdecl OTHER_to_OTHER_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  signed int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  signed int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  signed int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 8;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 7) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 24);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 8 || v4 != 8 )
    result = sub_773F20(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 32))(v7, v5, v6, v6 + 128, v6 + 256);
  return result;
}

//----- (00774510) --------------------------------------------------------
int __cdecl sub_774510(int a1, int a2, signed int a3, signed int a4, int a5)
{
  unsigned int v5; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  signed int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  unsigned int v13; // edx@4
  __int16 v14; // bp@5
  int v15; // esi@8
  int v16; // edx@8
  int v17; // ecx@14
  __int16 v18; // di@15
  __int16 v19; // si@15
  __int16 v20; // bp@15
  __int16 v21; // bx@15
  int v22; // edx@16
  int v23; // ecx@16
  int v24; // ebx@16
  int v25; // edi@17
  int v26; // esi@17
  int v27; // ebp@17
  int result; // eax@17
  int v29; // ecx@18
  char v30; // [sp+1Fh] [bp-62Dh]@1
  int v31; // [sp+620h] [bp-2Ch]@4
  int v32; // [sp+624h] [bp-28h]@8
  unsigned int v33; // [sp+628h] [bp-24h]@2
  int v34; // [sp+62Ch] [bp-20h]@4
  int v35; // [sp+630h] [bp-1Ch]@4
  int v36; // [sp+634h] [bp-18h]@4

  v5 = (unsigned int)&v30 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v33 = (unsigned int)&v30 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v36 = v7;
        v35 = v8;
        v31 = v9;
        v34 = v6;
        v13 = v33;
        do
        {
          ++v10;
          *(_WORD *)(v13 + 2 * v12) = *(_BYTE *)(v11 + a1);
          *(_WORD *)(v13 + 2 * v12 + 512) = *(_BYTE *)(v11 + a1 + 1);
          v14 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v13 + 2 * v12++ + 1024) = v14;
        }
        while ( v10 < a3 );
        v7 = v36;
        v8 = v35;
        v9 = v31;
        v6 = v34;
      }
      if ( v10 < 16 )
      {
        v32 = v33 + v9;
        v15 = v33 + 2 * (v10 + v8);
        v31 = v9;
        v34 = v6;
        v16 = v33 + v9;
        do
        {
          ++v10;
          *(_WORD *)v15 = *(_WORD *)(v16 + 2 * a3 - 2);
          *(_WORD *)(v15 + 512) = *(_WORD *)(v16 + 2 * a3 + 510);
          *(_WORD *)(v15 + 1024) = *(_WORD *)(v16 + 2 * a3 + 1022);
          v15 += 2;
        }
        while ( v10 < 16 );
        v9 = v31;
        v6 = v34;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    v5 = v33;
  }
  if ( v6 < 16 )
  {
    v17 = v5 + 32 * v6;
    do
    {
      v18 = *(_WORD *)(v17 + 1020);
      v19 = *(_WORD *)(v17 - 2);
      *(_WORD *)v17 = *(_WORD *)(v17 - 32);
      v20 = *(_WORD *)(v17 + 510);
      *(_WORD *)(v17 + 512) = *(_WORD *)(v17 + 480);
      ++v6;
      *(_WORD *)(v17 + 1024) = *(_WORD *)(v17 + 992);
      *(_WORD *)(v17 + 2) = *(_WORD *)(v17 - 30);
      *(_WORD *)(v17 + 514) = *(_WORD *)(v17 + 482);
      *(_WORD *)(v17 + 1026) = *(_WORD *)(v17 + 994);
      *(_WORD *)(v17 + 4) = *(_WORD *)(v17 - 28);
      *(_WORD *)(v17 + 516) = *(_WORD *)(v17 + 484);
      *(_WORD *)(v17 + 1028) = *(_WORD *)(v17 + 996);
      *(_WORD *)(v17 + 6) = *(_WORD *)(v17 - 26);
      *(_WORD *)(v17 + 518) = *(_WORD *)(v17 + 486);
      *(_WORD *)(v17 + 1030) = *(_WORD *)(v17 + 998);
      *(_WORD *)(v17 + 8) = *(_WORD *)(v17 - 24);
      *(_WORD *)(v17 + 520) = *(_WORD *)(v17 + 488);
      *(_WORD *)(v17 + 1032) = *(_WORD *)(v17 + 1000);
      *(_WORD *)(v17 + 10) = *(_WORD *)(v17 - 22);
      *(_WORD *)(v17 + 522) = *(_WORD *)(v17 + 490);
      *(_WORD *)(v17 + 1034) = *(_WORD *)(v17 + 1002);
      *(_WORD *)(v17 + 12) = *(_WORD *)(v17 - 20);
      *(_WORD *)(v17 + 524) = *(_WORD *)(v17 + 492);
      *(_WORD *)(v17 + 1036) = *(_WORD *)(v17 + 1004);
      *(_WORD *)(v17 + 14) = *(_WORD *)(v17 - 18);
      *(_WORD *)(v17 + 526) = *(_WORD *)(v17 + 494);
      *(_WORD *)(v17 + 1038) = *(_WORD *)(v17 + 1006);
      *(_WORD *)(v17 + 16) = *(_WORD *)(v17 - 16);
      *(_WORD *)(v17 + 528) = *(_WORD *)(v17 + 496);
      *(_WORD *)(v17 + 1040) = *(_WORD *)(v17 + 1008);
      *(_WORD *)(v17 + 18) = *(_WORD *)(v17 - 14);
      *(_WORD *)(v17 + 530) = *(_WORD *)(v17 + 498);
      *(_WORD *)(v17 + 1042) = *(_WORD *)(v17 + 1010);
      *(_WORD *)(v17 + 20) = *(_WORD *)(v17 - 12);
      *(_WORD *)(v17 + 532) = *(_WORD *)(v17 + 500);
      *(_WORD *)(v17 + 1044) = *(_WORD *)(v17 + 1012);
      *(_WORD *)(v17 + 22) = *(_WORD *)(v17 - 10);
      *(_WORD *)(v17 + 534) = *(_WORD *)(v17 + 502);
      *(_WORD *)(v17 + 1046) = *(_WORD *)(v17 + 1014);
      *(_WORD *)(v17 + 24) = *(_WORD *)(v17 - 8);
      *(_WORD *)(v17 + 536) = *(_WORD *)(v17 + 504);
      *(_WORD *)(v17 + 1048) = *(_WORD *)(v17 + 1016);
      *(_WORD *)(v17 + 26) = *(_WORD *)(v17 - 6);
      *(_WORD *)(v17 + 538) = *(_WORD *)(v17 + 506);
      *(_WORD *)(v17 + 1050) = *(_WORD *)(v17 + 1018);
      *(_WORD *)(v17 + 28) = *(_WORD *)(v17 - 4);
      *(_WORD *)(v17 + 540) = *(_WORD *)(v17 + 508);
      v21 = *(_WORD *)(v17 + 1022);
      *(_WORD *)(v17 + 1052) = v18;
      *(_WORD *)(v17 + 30) = v19;
      *(_WORD *)(v17 + 542) = v20;
      *(_WORD *)(v17 + 1054) = v21;
      v17 += 32;
    }
    while ( v6 < 16 );
  }
  v22 = 0;
  v23 = 0;
  v24 = 0;
  v33 = v5;
  do
  {
    v25 = a5 + 2 * v22;
    v26 = v33 + 2 * v23;
    v27 = v33 + 2 * v24;
    result = v27 + 32;
    v31 = v23;
    v32 = v24;
    do
    {
      *(_WORD *)v25 = *(_WORD *)v26 - 128;
      *(_WORD *)(v25 + 128) = *(_WORD *)(v26 + 16) - 128;
      *(_WORD *)(v25 + 256) = *(_WORD *)(v26 + 256) - 128;
      *(_WORD *)(v25 + 384) = *(_WORD *)(v26 + 272) - 128;
      v26 += 2;
      *(_WORD *)(v25 + 512) = ((*(_WORD *)(v27 + 544)
                              + *(_WORD *)(v27 + 514)
                              + (signed int)*(_WORD *)(v27 + 512)
                              + *(_WORD *)(v27 + 546)
                              + 2) >> 2)
                            - 128;
      v29 = ((*(_WORD *)(v27 + 1056)
            + *(_WORD *)(v27 + 1026)
            + (signed int)*(_WORD *)(v27 + 1024)
            + *(_WORD *)(v27 + 1058)
            + 2) >> 2)
          - 128;
      v27 += 4;
      *(_WORD *)(v25 + 640) = v29;
      v25 += 2;
    }
    while ( result > v27 );
    v22 += 8;
    v23 = v31 + 16;
    v24 = v32 + 32;
  }
  while ( v32 + 32 < 256 );
  return result;
}

//----- (00774A00) --------------------------------------------------------
int __cdecl sub_774A00(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // edi@1
  int v6; // ecx@1
  int v7; // esi@1
  int result; // eax@1
  int v9; // ST08_4@2
  int v10; // ST0C_4@2
  int v11; // eax@2
  int v12; // edx@2
  int v13; // ST10_4@2
  int v14; // ST14_4@2
  int v15; // ST18_4@2
  int v16; // ST1C_4@2
  int v17; // ST20_4@2
  int v18; // ST24_4@2
  int v19; // ST28_4@2
  int v20; // ST2C_4@2
  int v21; // ST30_4@2
  int v22; // ST34_4@2
  int v23; // ST38_4@2
  int v24; // ST3C_4@2
  int v25; // ST40_4@2
  int v26; // ST44_4@2
  int v27; // edi@2
  int v28; // ST4C_4@2
  int v29; // ST50_4@2
  int v30; // ST54_4@2
  int v31; // ST58_4@2
  int v32; // ST5C_4@2
  int v33; // ST60_4@2
  int v34; // ST64_4@2
  int v35; // ST68_4@2
  int v36; // ST6C_4@2
  int v37; // ST70_4@2
  int v38; // ST74_4@2
  int v39; // ST78_4@2
  int v40; // ST7C_4@2
  int v41; // ecx@2
  int v42; // ebx@2
  signed int v43; // [sp+4h] [bp-90h]@1

  v5 = a1;
  v6 = a3;
  v7 = a4;
  result = a5;
  v43 = 0;
  do
  {
    v9 = v6;
    v10 = result;
    *(_WORD *)v6 = *(_BYTE *)v5 - 128;
    *(_WORD *)(v6 + 2) = *(_BYTE *)(v5 + 3) - 128;
    *(_WORD *)(v6 + 4) = *(_BYTE *)(v5 + 6) - 128;
    *(_WORD *)(v6 + 6) = *(_BYTE *)(v5 + 9) - 128;
    *(_WORD *)(v6 + 8) = *(_BYTE *)(v5 + 12) - 128;
    *(_WORD *)(v6 + 10) = *(_BYTE *)(v5 + 15) - 128;
    *(_WORD *)(v6 + 12) = *(_BYTE *)(v5 + 18) - 128;
    *(_WORD *)(v6 + 14) = *(_BYTE *)(v5 + 21) - 128;
    *(_WORD *)(v6 + 128) = *(_BYTE *)(v5 + 24) - 128;
    *(_WORD *)(v6 + 130) = *(_BYTE *)(v5 + 27) - 128;
    *(_WORD *)(v6 + 132) = *(_BYTE *)(v5 + 30) - 128;
    *(_WORD *)(v6 + 134) = *(_BYTE *)(v5 + 33) - 128;
    *(_WORD *)(v6 + 136) = *(_BYTE *)(v5 + 36) - 128;
    *(_WORD *)(v6 + 138) = *(_BYTE *)(v5 + 39) - 128;
    *(_WORD *)(v6 + 140) = *(_BYTE *)(v5 + 42) - 128;
    *(_WORD *)(v6 + 142) = *(_BYTE *)(v5 + 45) - 128;
    v11 = *(_BYTE *)(v5 + 4) + *(_BYTE *)(v5 + 1);
    v12 = *(_BYTE *)(v5 + 10) + *(_BYTE *)(v5 + 7);
    v13 = *(_BYTE *)(v5 + 16) + *(_BYTE *)(v5 + 13);
    v14 = *(_BYTE *)(v5 + 22) + *(_BYTE *)(v5 + 19);
    v15 = *(_BYTE *)(v5 + 28) + *(_BYTE *)(v5 + 25);
    v16 = *(_BYTE *)(v5 + 34) + *(_BYTE *)(v5 + 31);
    v17 = *(_BYTE *)(v5 + 40) + *(_BYTE *)(v5 + 37);
    v18 = *(_BYTE *)(v5 + 46) + *(_BYTE *)(v5 + 43);
    v19 = *(_BYTE *)(v5 + 5) + *(_BYTE *)(v5 + 2);
    v20 = *(_BYTE *)(v5 + 11) + *(_BYTE *)(v5 + 8);
    v21 = *(_BYTE *)(v5 + 17) + *(_BYTE *)(v5 + 14);
    v22 = *(_BYTE *)(v5 + 23) + *(_BYTE *)(v5 + 20);
    v23 = *(_BYTE *)(v5 + 29) + *(_BYTE *)(v5 + 26);
    v24 = *(_BYTE *)(v5 + 35) + *(_BYTE *)(v5 + 32);
    v25 = *(_BYTE *)(v5 + 41) + *(_BYTE *)(v5 + 38);
    v26 = *(_BYTE *)(v5 + 47) + *(_BYTE *)(v5 + 44);
    v27 = a2 + v5;
    *(_WORD *)(v6 + 16) = *(_BYTE *)v27 - 128;
    *(_WORD *)(v6 + 18) = *(_BYTE *)(v27 + 3) - 128;
    *(_WORD *)(v6 + 20) = *(_BYTE *)(v27 + 6) - 128;
    *(_WORD *)(v6 + 22) = *(_BYTE *)(v27 + 9) - 128;
    *(_WORD *)(v6 + 24) = *(_BYTE *)(v27 + 12) - 128;
    *(_WORD *)(v6 + 26) = *(_BYTE *)(v27 + 15) - 128;
    *(_WORD *)(v6 + 28) = *(_BYTE *)(v27 + 18) - 128;
    *(_WORD *)(v6 + 30) = *(_BYTE *)(v27 + 21) - 128;
    *(_WORD *)(v6 + 144) = *(_BYTE *)(v27 + 24) - 128;
    *(_WORD *)(v6 + 146) = *(_BYTE *)(v27 + 27) - 128;
    *(_WORD *)(v6 + 148) = *(_BYTE *)(v27 + 30) - 128;
    *(_WORD *)(v6 + 150) = *(_BYTE *)(v27 + 33) - 128;
    *(_WORD *)(v6 + 152) = *(_BYTE *)(v27 + 36) - 128;
    *(_WORD *)(v6 + 154) = *(_BYTE *)(v27 + 39) - 128;
    *(_WORD *)(v6 + 156) = *(_BYTE *)(v27 + 42) - 128;
    *(_WORD *)(v6 + 158) = *(_BYTE *)(v27 + 45) - 128;
    v28 = *(_BYTE *)(v27 + 10) + *(_BYTE *)(v27 + 7);
    v29 = *(_BYTE *)(v27 + 16) + *(_BYTE *)(v27 + 13);
    v30 = *(_BYTE *)(v27 + 22) + *(_BYTE *)(v27 + 19);
    v31 = *(_BYTE *)(v27 + 28) + *(_BYTE *)(v27 + 25);
    v32 = *(_BYTE *)(v27 + 34) + *(_BYTE *)(v27 + 31);
    v33 = *(_BYTE *)(v27 + 40) + *(_BYTE *)(v27 + 37);
    v34 = *(_BYTE *)(v27 + 46) + *(_BYTE *)(v27 + 43);
    v35 = *(_BYTE *)(v27 + 5) + *(_BYTE *)(v27 + 2);
    v36 = *(_BYTE *)(v27 + 11) + *(_BYTE *)(v27 + 8);
    v37 = *(_BYTE *)(v27 + 17) + *(_BYTE *)(v27 + 14);
    v38 = *(_BYTE *)(v27 + 23) + *(_BYTE *)(v27 + 20);
    v39 = *(_BYTE *)(v27 + 29) + *(_BYTE *)(v27 + 26);
    v40 = *(_BYTE *)(v27 + 35) + *(_BYTE *)(v27 + 32);
    v41 = *(_BYTE *)(v27 + 41) + *(_BYTE *)(v27 + 38);
    v42 = *(_BYTE *)(v27 + 47) + *(_BYTE *)(v27 + 44);
    *(_WORD *)v7 = ((*(_BYTE *)(v27 + 4) + *(_BYTE *)(v27 + 1) + v11 + 2) >> 2) - 128;
    *(_WORD *)(v7 + 2) = ((v28 + v12 + 2) >> 2) - 128;
    *(_WORD *)(v7 + 4) = ((v29 + v13 + 2) >> 2) - 128;
    *(_WORD *)(v7 + 6) = ((v30 + v14 + 2) >> 2) - 128;
    *(_WORD *)(v7 + 8) = ((v31 + v15 + 2) >> 2) - 128;
    *(_WORD *)(v7 + 10) = ((v32 + v16 + 2) >> 2) - 128;
    *(_WORD *)(v7 + 12) = ((v33 + v17 + 2) >> 2) - 128;
    *(_WORD *)(v7 + 14) = ((v34 + v18 + 2) >> 2) - 128;
    *(_WORD *)v10 = ((v35 + v19 + 2) >> 2) - 128;
    *(_WORD *)(v10 + 2) = ((v36 + v20 + 2) >> 2) - 128;
    *(_WORD *)(v10 + 4) = ((v37 + v21 + 2) >> 2) - 128;
    *(_WORD *)(v10 + 6) = ((v38 + v22 + 2) >> 2) - 128;
    *(_WORD *)(v10 + 8) = ((v39 + v23 + 2) >> 2) - 128;
    v7 += 16;
    *(_WORD *)(v10 + 10) = ((v40 + v24 + 2) >> 2) - 128;
    *(_WORD *)(v10 + 12) = ((v41 + v25 + 2) >> 2) - 128;
    *(_WORD *)(v10 + 14) = ((v42 + v26 + 2) >> 2) - 128;
    result = v10 + 16;
    v6 = v9 + 32;
    v5 = a2 + v27;
    v43 += 2;
  }
  while ( v43 < 8 );
  return result;
}

//----- (00774F10) --------------------------------------------------------
int __cdecl OTHER_to_OTHER_411_Full_MCU(int a1, int a2, int a3, int a4, int a5)
{
  sub_774A00(a1, a2, a3, a4, a5);
  return sub_774A00(a1 + 8 * a2, a2, a3 + 256, a4 + 64, a5 + 64);
}

//----- (00774F80) --------------------------------------------------------
int __cdecl OTHER_to_OTHER_411_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  signed int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  signed int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 16;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (16 * a3 + 16)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 48);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 0xF) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 16 )
    result = sub_774510(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 34))(v7, v5, v6, v6 + 512, v6 + 640);
  return result;
}

//----- (00775090) --------------------------------------------------------
unsigned int __cdecl sub_775090(int a1, int a2, signed int a3, signed int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // edx@1
  int v7; // ecx@2
  int v8; // ebx@2
  int v9; // ebp@2
  signed int v10; // eax@3
  int v11; // edi@4
  int v12; // esi@4
  unsigned int v13; // edx@4
  __int16 v14; // bp@5
  int v15; // esi@8
  int v16; // edx@8
  int v17; // ecx@14
  __int16 v18; // di@15
  __int16 v19; // si@15
  __int16 v20; // bp@15
  __int16 v21; // bx@15
  int v22; // ecx@16
  int v23; // edx@16
  int v24; // edi@17
  int v25; // esi@17
  int v26; // ebp@17
  char v27; // [sp+1Fh] [bp-32Dh]@1
  int v28; // [sp+320h] [bp-2Ch]@8
  unsigned int v29; // [sp+324h] [bp-28h]@2
  int v30; // [sp+328h] [bp-24h]@4
  int v31; // [sp+32Ch] [bp-20h]@4
  int v32; // [sp+330h] [bp-1Ch]@4
  int v33; // [sp+334h] [bp-18h]@4

  result = (unsigned int)&v27 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v7 = 0;
    v8 = 0;
    v9 = 0;
    v29 = (unsigned int)&v27 & 0xFFFFFFE0;
    do
    {
      v10 = 0;
      if ( a3 > 0 )
      {
        v11 = v7;
        v12 = v8;
        v33 = v7;
        v32 = v8;
        v30 = v9;
        v31 = v6;
        v13 = v29;
        do
        {
          ++v10;
          *(_WORD *)(v13 + 2 * v12) = *(_BYTE *)(v11 + a1);
          *(_WORD *)(v13 + 2 * v12 + 256) = *(_BYTE *)(v11 + a1 + 1);
          v14 = *(_BYTE *)(v11 + a1 + 2);
          v11 += 3;
          *(_WORD *)(v13 + 2 * v12++ + 512) = v14;
        }
        while ( v10 < a3 );
        v7 = v33;
        v8 = v32;
        v9 = v30;
        v6 = v31;
      }
      if ( v10 < 16 )
      {
        v28 = v29 + v9;
        v15 = v29 + 2 * (v10 + v8);
        v30 = v9;
        v31 = v6;
        v16 = v29 + v9;
        do
        {
          ++v10;
          *(_WORD *)v15 = *(_WORD *)(v16 + 2 * a3 - 2);
          *(_WORD *)(v15 + 256) = *(_WORD *)(v16 + 2 * a3 + 254);
          *(_WORD *)(v15 + 512) = *(_WORD *)(v16 + 2 * a3 + 510);
          v15 += 2;
        }
        while ( v10 < 16 );
        v9 = v30;
        v6 = v31;
      }
      v7 += a2;
      v8 += 16;
      v9 += 32;
      ++v6;
    }
    while ( v6 < a4 );
    result = v29;
  }
  if ( v6 < 8 )
  {
    v17 = result + 32 * v6;
    do
    {
      v18 = *(_WORD *)(v17 + 508);
      v19 = *(_WORD *)(v17 - 2);
      *(_WORD *)v17 = *(_WORD *)(v17 - 32);
      v20 = *(_WORD *)(v17 + 254);
      *(_WORD *)(v17 + 256) = *(_WORD *)(v17 + 224);
      ++v6;
      *(_WORD *)(v17 + 512) = *(_WORD *)(v17 + 480);
      *(_WORD *)(v17 + 2) = *(_WORD *)(v17 - 30);
      *(_WORD *)(v17 + 258) = *(_WORD *)(v17 + 226);
      *(_WORD *)(v17 + 514) = *(_WORD *)(v17 + 482);
      *(_WORD *)(v17 + 4) = *(_WORD *)(v17 - 28);
      *(_WORD *)(v17 + 260) = *(_WORD *)(v17 + 228);
      *(_WORD *)(v17 + 516) = *(_WORD *)(v17 + 484);
      *(_WORD *)(v17 + 6) = *(_WORD *)(v17 - 26);
      *(_WORD *)(v17 + 262) = *(_WORD *)(v17 + 230);
      *(_WORD *)(v17 + 518) = *(_WORD *)(v17 + 486);
      *(_WORD *)(v17 + 8) = *(_WORD *)(v17 - 24);
      *(_WORD *)(v17 + 264) = *(_WORD *)(v17 + 232);
      *(_WORD *)(v17 + 520) = *(_WORD *)(v17 + 488);
      *(_WORD *)(v17 + 10) = *(_WORD *)(v17 - 22);
      *(_WORD *)(v17 + 266) = *(_WORD *)(v17 + 234);
      *(_WORD *)(v17 + 522) = *(_WORD *)(v17 + 490);
      *(_WORD *)(v17 + 12) = *(_WORD *)(v17 - 20);
      *(_WORD *)(v17 + 268) = *(_WORD *)(v17 + 236);
      *(_WORD *)(v17 + 524) = *(_WORD *)(v17 + 492);
      *(_WORD *)(v17 + 14) = *(_WORD *)(v17 - 18);
      *(_WORD *)(v17 + 270) = *(_WORD *)(v17 + 238);
      *(_WORD *)(v17 + 526) = *(_WORD *)(v17 + 494);
      *(_WORD *)(v17 + 16) = *(_WORD *)(v17 - 16);
      *(_WORD *)(v17 + 272) = *(_WORD *)(v17 + 240);
      *(_WORD *)(v17 + 528) = *(_WORD *)(v17 + 496);
      *(_WORD *)(v17 + 18) = *(_WORD *)(v17 - 14);
      *(_WORD *)(v17 + 274) = *(_WORD *)(v17 + 242);
      *(_WORD *)(v17 + 530) = *(_WORD *)(v17 + 498);
      *(_WORD *)(v17 + 20) = *(_WORD *)(v17 - 12);
      *(_WORD *)(v17 + 276) = *(_WORD *)(v17 + 244);
      *(_WORD *)(v17 + 532) = *(_WORD *)(v17 + 500);
      *(_WORD *)(v17 + 22) = *(_WORD *)(v17 - 10);
      *(_WORD *)(v17 + 278) = *(_WORD *)(v17 + 246);
      *(_WORD *)(v17 + 534) = *(_WORD *)(v17 + 502);
      *(_WORD *)(v17 + 24) = *(_WORD *)(v17 - 8);
      *(_WORD *)(v17 + 280) = *(_WORD *)(v17 + 248);
      *(_WORD *)(v17 + 536) = *(_WORD *)(v17 + 504);
      *(_WORD *)(v17 + 26) = *(_WORD *)(v17 - 6);
      *(_WORD *)(v17 + 282) = *(_WORD *)(v17 + 250);
      *(_WORD *)(v17 + 538) = *(_WORD *)(v17 + 506);
      *(_WORD *)(v17 + 28) = *(_WORD *)(v17 - 4);
      *(_WORD *)(v17 + 284) = *(_WORD *)(v17 + 252);
      v21 = *(_WORD *)(v17 + 510);
      *(_WORD *)(v17 + 540) = v18;
      *(_WORD *)(v17 + 30) = v19;
      *(_WORD *)(v17 + 286) = v20;
      *(_WORD *)(v17 + 542) = v21;
      v17 += 32;
    }
    while ( v6 < 8 );
  }
  v22 = 0;
  v23 = 0;
  do
  {
    v24 = a5 + 2 * v22;
    v25 = result + 2 * v23;
    v26 = result + 2 * v23;
    v28 = v23;
    v29 = result;
    do
    {
      *(_WORD *)v24 = *(_WORD *)v25 - 128;
      *(_WORD *)(v24 + 128) = *(_WORD *)(v25 + 16) - 128;
      *(_WORD *)(v24 + 256) = ((*(_WORD *)(v26 + 256) + (signed int)*(_WORD *)(v26 + 258) + 1) >> 1) - 128;
      *(_WORD *)(v24 + 384) = ((*(_WORD *)(v26 + 512) + (signed int)*(_WORD *)(v26 + 514) + 1) >> 1) - 128;
      v24 += 2;
      v25 += 2;
      v26 += 4;
    }
    while ( (signed int)(result + 2 * v23 + 32) > v26 );
    result = v29;
    v22 += 8;
    v23 = v28 + 16;
  }
  while ( v28 + 16 < 128 );
  return result;
}

//----- (00775520) --------------------------------------------------------
signed int __cdecl OTHER_to_OTHER_422_Full_MCU(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // esi@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // edx@1
  signed int result; // eax@1

  v5 = a1;
  v6 = a3;
  v7 = a4;
  v8 = a5;
  result = 0;
  do
  {
    ++result;
    *(_WORD *)v6 = *(_BYTE *)v5 - 128;
    *(_WORD *)(v6 + 2) = *(_BYTE *)(v5 + 3) - 128;
    *(_WORD *)(v6 + 4) = *(_BYTE *)(v5 + 6) - 128;
    *(_WORD *)(v6 + 6) = *(_BYTE *)(v5 + 9) - 128;
    *(_WORD *)(v6 + 8) = *(_BYTE *)(v5 + 12) - 128;
    *(_WORD *)(v6 + 10) = *(_BYTE *)(v5 + 15) - 128;
    *(_WORD *)(v6 + 12) = *(_BYTE *)(v5 + 18) - 128;
    *(_WORD *)(v6 + 14) = *(_BYTE *)(v5 + 21) - 128;
    *(_WORD *)(v6 + 128) = *(_BYTE *)(v5 + 24) - 128;
    *(_WORD *)(v6 + 130) = *(_BYTE *)(v5 + 27) - 128;
    *(_WORD *)(v6 + 132) = *(_BYTE *)(v5 + 30) - 128;
    *(_WORD *)(v6 + 134) = *(_BYTE *)(v5 + 33) - 128;
    *(_WORD *)(v6 + 136) = *(_BYTE *)(v5 + 36) - 128;
    *(_WORD *)(v6 + 138) = *(_BYTE *)(v5 + 39) - 128;
    *(_WORD *)(v6 + 140) = *(_BYTE *)(v5 + 42) - 128;
    *(_WORD *)(v6 + 142) = *(_BYTE *)(v5 + 45) - 128;
    *(_WORD *)v7 = ((*(_BYTE *)(v5 + 1) + *(_BYTE *)(v5 + 4) + 1) >> 1) - 128;
    *(_WORD *)(v7 + 2) = ((*(_BYTE *)(v5 + 7) + *(_BYTE *)(v5 + 10) + 1) >> 1) - 128;
    *(_WORD *)(v7 + 4) = ((*(_BYTE *)(v5 + 13) + *(_BYTE *)(v5 + 16) + 1) >> 1) - 128;
    *(_WORD *)(v7 + 6) = ((*(_BYTE *)(v5 + 19) + *(_BYTE *)(v5 + 22) + 1) >> 1) - 128;
    *(_WORD *)(v7 + 8) = ((*(_BYTE *)(v5 + 25) + *(_BYTE *)(v5 + 28) + 1) >> 1) - 128;
    *(_WORD *)(v7 + 10) = ((*(_BYTE *)(v5 + 31) + *(_BYTE *)(v5 + 34) + 1) >> 1) - 128;
    *(_WORD *)(v7 + 12) = ((*(_BYTE *)(v5 + 37) + *(_BYTE *)(v5 + 40) + 1) >> 1) - 128;
    *(_WORD *)(v7 + 14) = ((*(_BYTE *)(v5 + 43) + *(_BYTE *)(v5 + 46) + 1) >> 1) - 128;
    *(_WORD *)v8 = ((*(_BYTE *)(v5 + 2) + *(_BYTE *)(v5 + 5) + 1) >> 1) - 128;
    *(_WORD *)(v8 + 2) = ((*(_BYTE *)(v5 + 8) + *(_BYTE *)(v5 + 11) + 1) >> 1) - 128;
    *(_WORD *)(v8 + 4) = ((*(_BYTE *)(v5 + 14) + *(_BYTE *)(v5 + 17) + 1) >> 1) - 128;
    *(_WORD *)(v8 + 6) = ((*(_BYTE *)(v5 + 20) + *(_BYTE *)(v5 + 23) + 1) >> 1) - 128;
    *(_WORD *)(v8 + 8) = ((*(_BYTE *)(v5 + 26) + *(_BYTE *)(v5 + 29) + 1) >> 1) - 128;
    *(_WORD *)(v8 + 10) = ((*(_BYTE *)(v5 + 32) + *(_BYTE *)(v5 + 35) + 1) >> 1) - 128;
    *(_WORD *)(v8 + 12) = ((*(_BYTE *)(v5 + 38) + *(_BYTE *)(v5 + 41) + 1) >> 1) - 128;
    *(_WORD *)(v8 + 14) = ((*(_BYTE *)(v5 + 44) + *(_BYTE *)(v5 + 47) + 1) >> 1) - 128;
    v6 += 16;
    v7 += 16;
    v8 += 16;
    v5 += a2;
  }
  while ( result < 8 );
  return result;
}

//----- (00775780) --------------------------------------------------------
unsigned int __cdecl OTHER_to_OTHER_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  signed int v3; // edi@1
  signed int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  signed int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 48);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 8 )
    result = sub_775090(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 33))(v7, v5, v6, v6 + 256, v6 + 384);
  return result;
}

//----- (00775890) --------------------------------------------------------
int __usercall sub_775890<eax>(int a1<ebp>, int a2, int a3, signed int a4, int a5, int a6)
{
  int v6; // ebp@1
  int v7; // ebx@1
  int v8; // eax@2
  int v9; // edx@2
  signed int v10; // ecx@2
  int v11; // ebp@2
  signed int v12; // esi@3
  int v13; // ebx@4
  __int16 v14; // di@5
  int v15; // ebx@10
  int v16; // ecx@10
  int v17; // eax@16
  __int16 v18; // di@17
  __int16 v19; // si@17
  __int16 v20; // cx@17
  __int16 v21; // dx@17
  int v22; // edx@18
  int result; // eax@18
  int v24; // edi@19
  int v25; // esi@19
  int v26; // ebx@19
  int v27; // [sp+320h] [bp+301h]@19
  int v28; // [sp+324h] [bp+305h]@2
  int v29; // [sp+32Ch] [bp+30Dh]@2
  signed int v30; // [sp+334h] [bp+315h]@10
  int v31; // [sp+338h] [bp+319h]@2
  int v32; // [sp+340h] [bp+321h]@2
  int v33; // [sp+348h] [bp+329h]@4

  v6 = a1 & 0xFFFFFFE0;
  v7 = 0;
  if ( a5 > 0 )
  {
    v29 = a4 - 1;
    v8 = 0;
    v9 = 0;
    v10 = a4;
    v32 = 0;
    v31 = 0;
    v28 = v6;
    v11 = 2 * a4;
    do
    {
      v12 = 0;
      if ( v29 > 0 )
      {
        v13 = v9;
        v33 = v8;
        do
        {
          v12 += 2;
          *(_WORD *)(v28 + 2 * v13) = *(_BYTE *)(v8 + a2);
          *(_WORD *)(v28 + 2 * v13 + 2) = *(_BYTE *)(a2 + 2 + v8);
          *(_WORD *)(v28 + 2 * v13 + 256) = *(_BYTE *)(a2 + 1 + v8);
          *(_WORD *)(v28 + 2 * v13 + 258) = *(_BYTE *)(a2 + 1 + v8);
          *(_WORD *)(v28 + 2 * v13 + 512) = *(_BYTE *)(a2 + 3 + v8);
          v14 = *(_BYTE *)(a2 + 3 + v8);
          v8 += 4;
          *(_WORD *)(v28 + 2 * v13 + 514) = v14;
          v13 += 2;
        }
        while ( v12 < v29 );
        v8 = v33;
      }
      if ( a4 & 1 )
      {
        *(_WORD *)(v28 + 2 * v10 - 2) = *(_BYTE *)(v11 - 2 + a2);
        *(_WORD *)(v28 + 2 * v10 + 254) = *(_BYTE *)(v11 - 1 + a2);
        *(_WORD *)(v28 + 2 * v10 + 510) = *(_BYTE *)(v11 - 3 + a2);
        v12 = a4;
      }
      if ( v12 < 16 )
      {
        v15 = v28 + 2 * (v12 + v9);
        v30 = v10;
        v16 = v28 + v32;
        do
        {
          ++v12;
          *(_WORD *)v15 = *(_WORD *)(v16 + 2 * a4 - 2);
          *(_WORD *)(v15 + 256) = *(_WORD *)(v16 + 2 * a4 + 254);
          *(_WORD *)(v15 + 512) = *(_WORD *)(v16 + 2 * a4 + 510);
          v15 += 2;
        }
        while ( v12 < 16 );
        v10 = v30;
      }
      v8 += a3;
      v9 += 16;
      v10 += 16;
      v11 += a3;
      v7 = v31 + 1;
      v32 += 32;
      ++v31;
    }
    while ( v31 < a5 );
    v6 = v28;
  }
  if ( v7 < 8 )
  {
    v17 = v6 + 32 * v7;
    do
    {
      v18 = *(_WORD *)(v17 + 508);
      v19 = *(_WORD *)(v17 - 2);
      *(_WORD *)v17 = *(_WORD *)(v17 - 32);
      v20 = *(_WORD *)(v17 + 254);
      *(_WORD *)(v17 + 256) = *(_WORD *)(v17 + 224);
      ++v7;
      *(_WORD *)(v17 + 512) = *(_WORD *)(v17 + 480);
      *(_WORD *)(v17 + 2) = *(_WORD *)(v17 - 30);
      *(_WORD *)(v17 + 258) = *(_WORD *)(v17 + 226);
      *(_WORD *)(v17 + 514) = *(_WORD *)(v17 + 482);
      *(_WORD *)(v17 + 4) = *(_WORD *)(v17 - 28);
      *(_WORD *)(v17 + 260) = *(_WORD *)(v17 + 228);
      *(_WORD *)(v17 + 516) = *(_WORD *)(v17 + 484);
      *(_WORD *)(v17 + 6) = *(_WORD *)(v17 - 26);
      *(_WORD *)(v17 + 262) = *(_WORD *)(v17 + 230);
      *(_WORD *)(v17 + 518) = *(_WORD *)(v17 + 486);
      *(_WORD *)(v17 + 8) = *(_WORD *)(v17 - 24);
      *(_WORD *)(v17 + 264) = *(_WORD *)(v17 + 232);
      *(_WORD *)(v17 + 520) = *(_WORD *)(v17 + 488);
      *(_WORD *)(v17 + 10) = *(_WORD *)(v17 - 22);
      *(_WORD *)(v17 + 266) = *(_WORD *)(v17 + 234);
      *(_WORD *)(v17 + 522) = *(_WORD *)(v17 + 490);
      *(_WORD *)(v17 + 12) = *(_WORD *)(v17 - 20);
      *(_WORD *)(v17 + 268) = *(_WORD *)(v17 + 236);
      *(_WORD *)(v17 + 524) = *(_WORD *)(v17 + 492);
      *(_WORD *)(v17 + 14) = *(_WORD *)(v17 - 18);
      *(_WORD *)(v17 + 270) = *(_WORD *)(v17 + 238);
      *(_WORD *)(v17 + 526) = *(_WORD *)(v17 + 494);
      *(_WORD *)(v17 + 16) = *(_WORD *)(v17 - 16);
      *(_WORD *)(v17 + 272) = *(_WORD *)(v17 + 240);
      *(_WORD *)(v17 + 528) = *(_WORD *)(v17 + 496);
      *(_WORD *)(v17 + 18) = *(_WORD *)(v17 - 14);
      *(_WORD *)(v17 + 274) = *(_WORD *)(v17 + 242);
      *(_WORD *)(v17 + 530) = *(_WORD *)(v17 + 498);
      *(_WORD *)(v17 + 20) = *(_WORD *)(v17 - 12);
      *(_WORD *)(v17 + 276) = *(_WORD *)(v17 + 244);
      *(_WORD *)(v17 + 532) = *(_WORD *)(v17 + 500);
      *(_WORD *)(v17 + 22) = *(_WORD *)(v17 - 10);
      *(_WORD *)(v17 + 278) = *(_WORD *)(v17 + 246);
      *(_WORD *)(v17 + 534) = *(_WORD *)(v17 + 502);
      *(_WORD *)(v17 + 24) = *(_WORD *)(v17 - 8);
      *(_WORD *)(v17 + 280) = *(_WORD *)(v17 + 248);
      *(_WORD *)(v17 + 536) = *(_WORD *)(v17 + 504);
      *(_WORD *)(v17 + 26) = *(_WORD *)(v17 - 6);
      *(_WORD *)(v17 + 282) = *(_WORD *)(v17 + 250);
      *(_WORD *)(v17 + 538) = *(_WORD *)(v17 + 506);
      *(_WORD *)(v17 + 28) = *(_WORD *)(v17 - 4);
      *(_WORD *)(v17 + 284) = *(_WORD *)(v17 + 252);
      v21 = *(_WORD *)(v17 + 510);
      *(_WORD *)(v17 + 540) = v18;
      *(_WORD *)(v17 + 30) = v19;
      *(_WORD *)(v17 + 286) = v20;
      *(_WORD *)(v17 + 542) = v21;
      v17 += 32;
    }
    while ( v7 < 8 );
  }
  v22 = 0;
  result = 0;
  do
  {
    v24 = a6 + 2 * v22;
    v25 = v6 + 2 * result;
    v26 = v6 + 2 * result;
    v27 = result;
    do
    {
      *(_WORD *)v24 = *(_WORD *)v25 - 128;
      *(_WORD *)(v24 + 128) = *(_WORD *)(v25 + 16) - 128;
      *(_WORD *)(v24 + 256) = ((*(_WORD *)(v26 + 256) + 1 + *(_WORD *)(v26 + 258)) >> 1) - 128;
      *(_WORD *)(v24 + 384) = ((*(_WORD *)(v26 + 514) + 1 + *(_WORD *)(v26 + 512)) >> 1) - 128;
      v24 += 2;
      v25 += 2;
      v26 += 4;
    }
    while ( v6 + 32 + 2 * result > v26 );
    v22 += 8;
    result += 16;
  }
  while ( v27 + 16 < 128 );
  return result;
}

//----- (00775E30) --------------------------------------------------------
signed int __cdecl YCbYCr_to_YCbCr_422_Full_MCU_PX(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // edi@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // edx@1
  signed int result; // eax@1

  v5 = a1;
  v6 = a3;
  v7 = a4;
  v8 = a5;
  result = 0;
  do
  {
    ++result;
    *(_WORD *)v6 = *(_BYTE *)v5 - 128;
    *(_WORD *)(v6 + 2) = *(_BYTE *)(v5 + 2) - 128;
    *(_WORD *)(v6 + 4) = *(_BYTE *)(v5 + 4) - 128;
    *(_WORD *)(v6 + 6) = *(_BYTE *)(v5 + 6) - 128;
    *(_WORD *)(v6 + 8) = *(_BYTE *)(v5 + 8) - 128;
    *(_WORD *)(v6 + 10) = *(_BYTE *)(v5 + 10) - 128;
    *(_WORD *)(v6 + 12) = *(_BYTE *)(v5 + 12) - 128;
    *(_WORD *)(v6 + 14) = *(_BYTE *)(v5 + 14) - 128;
    *(_WORD *)(v6 + 128) = *(_BYTE *)(v5 + 16) - 128;
    *(_WORD *)(v6 + 130) = *(_BYTE *)(v5 + 18) - 128;
    *(_WORD *)(v6 + 132) = *(_BYTE *)(v5 + 20) - 128;
    *(_WORD *)(v6 + 134) = *(_BYTE *)(v5 + 22) - 128;
    *(_WORD *)(v6 + 136) = *(_BYTE *)(v5 + 24) - 128;
    *(_WORD *)(v6 + 138) = *(_BYTE *)(v5 + 26) - 128;
    *(_WORD *)(v6 + 140) = *(_BYTE *)(v5 + 28) - 128;
    *(_WORD *)(v6 + 142) = *(_BYTE *)(v5 + 30) - 128;
    *(_WORD *)v7 = *(_BYTE *)(v5 + 1) - 128;
    *(_WORD *)(v7 + 2) = *(_BYTE *)(v5 + 5) - 128;
    *(_WORD *)(v7 + 4) = *(_BYTE *)(v5 + 9) - 128;
    *(_WORD *)(v7 + 6) = *(_BYTE *)(v5 + 13) - 128;
    *(_WORD *)(v7 + 8) = *(_BYTE *)(v5 + 17) - 128;
    *(_WORD *)(v7 + 10) = *(_BYTE *)(v5 + 21) - 128;
    *(_WORD *)(v7 + 12) = *(_BYTE *)(v5 + 25) - 128;
    *(_WORD *)(v7 + 14) = *(_BYTE *)(v5 + 29) - 128;
    *(_WORD *)v8 = *(_BYTE *)(v5 + 3) - 128;
    *(_WORD *)(v8 + 2) = *(_BYTE *)(v5 + 7) - 128;
    *(_WORD *)(v8 + 4) = *(_BYTE *)(v5 + 11) - 128;
    *(_WORD *)(v8 + 6) = *(_BYTE *)(v5 + 15) - 128;
    *(_WORD *)(v8 + 8) = *(_BYTE *)(v5 + 19) - 128;
    *(_WORD *)(v8 + 10) = *(_BYTE *)(v5 + 23) - 128;
    *(_WORD *)(v8 + 12) = *(_BYTE *)(v5 + 27) - 128;
    *(_WORD *)(v8 + 14) = *(_BYTE *)(v5 + 31) - 128;
    v6 += 16;
    v7 += 16;
    v8 += 16;
    v5 += a2;
  }
  while ( result < 8 );
  return result;
}

//----- (00775FF0) --------------------------------------------------------
int __cdecl YCbYCr_to_YCbCr_422_Full_MCU_M5(int a1, int a2, int a3, int a4, int a5)
{
  return own_ycbycr_to_ycbcr_422_full_mcu_m5(a1, a2, a3, a4, a5);
}

//----- (00776030) --------------------------------------------------------
int __cdecl YCbYCr_to_YCbCr_422_Full_MCU_A6(int a1, int a2, int a3, int a4, int a5)
{
  return own_ycbycr_to_ycbcr_422_full_mcu_a6(a1, a2, a3, a4, a5);
}

//----- (00776070) --------------------------------------------------------
int __cdecl YCbYCr_to_YCbCr_422_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  signed int v3; // edi@1
  int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  signed int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 16;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 0xF) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 32);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 16 || v4 != 8 )
    result = sub_775890(v5, v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v12 + 35))(v7, v5, v6, v6 + 256, v6 + 384);
  return result;
}

//----- (00776180) --------------------------------------------------------
unsigned int __cdecl sub_776180(int a1, int a2, int a3, int a4, int a5)
{
  unsigned int result; // eax@1
  signed int v6; // esi@1
  int v7; // ebx@2
  int v8; // ecx@2
  int v9; // edx@2
  int v10; // eax@2
  signed int v11; // esi@3
  int v12; // ebp@5
  unsigned int v13; // ecx@5
  int v14; // edx@5
  __int16 v15; // di@6
  int v16; // ebp@8
  int v17; // edx@8
  unsigned int v18; // ecx@8
  __int16 v19; // ax@9
  int v20; // ecx@15
  int v21; // edx@15
  unsigned int v22; // ebx@15
  int v23; // ebp@18
  int v24; // ebx@18
  int v25; // ebp@21
  int v26; // edx@24
  __int16 v27; // di@25
  __int16 v28; // bp@25
  __int16 v29; // bx@25
  __int16 v30; // cx@25
  signed int v31; // edx@26
  char v32; // [sp+1Fh] [bp-D5h]@1
  int v33; // [sp+A0h] [bp-54h]@2
  int v34; // [sp+A4h] [bp-50h]@2
  int v35; // [sp+A8h] [bp-4Ch]@2
  int v36; // [sp+ACh] [bp-48h]@2
  int v37; // [sp+B0h] [bp-44h]@2
  int v38; // [sp+B4h] [bp-40h]@2
  int v39; // [sp+B8h] [bp-3Ch]@2
  int v40; // [sp+BCh] [bp-38h]@2
  unsigned int v41; // [sp+C0h] [bp-34h]@5
  int v42; // [sp+C4h] [bp-30h]@8
  unsigned int v43; // [sp+C8h] [bp-2Ch]@15
  int v44; // [sp+CCh] [bp-28h]@5
  unsigned int v45; // [sp+D0h] [bp-24h]@2
  int v46; // [sp+D4h] [bp-20h]@5
  int v47; // [sp+D8h] [bp-1Ch]@2
  unsigned int v48; // [sp+DCh] [bp-18h]@2

  result = (unsigned int)&v32 & 0xFFFFFFE0;
  v6 = 0;
  if ( a4 > 0 )
  {
    v40 = a3 & 1;
    v37 = 2 * a3 - 2;
    v36 = a3;
    v35 = a3 - 5;
    v38 = 0;
    v7 = a3;
    v33 = a2;
    v8 = 0;
    v39 = 0;
    v34 = a3;
    v48 = (unsigned int)&v32 & 0xFFFFFFE0;
    v47 = 0;
    v9 = a3;
    v45 = (unsigned int)&v32 & 0xFFFFFFE0;
    v10 = 0;
    do
    {
      v11 = 0;
      if ( a3 > 0 )
      {
        if ( v36 >= 5 )
        {
          v41 = v10;
          v12 = v8;
          v38 = v10;
          v46 = v8;
          v13 = v45;
          v34 = v9;
          v14 = v35;
          v44 = v7;
          do
          {
            v11 += 4;
            *(_WORD *)(v13 + 2 * v12) = *(_BYTE *)(v10 + a1);
            *(_WORD *)(v13 + 2 * v12 + 2) = *(_BYTE *)(v10 + a1 + 1);
            *(_WORD *)(v13 + 2 * v12 + 4) = *(_BYTE *)(v10 + a1 + 2);
            v15 = *(_BYTE *)(v10 + a1 + 3);
            v10 += 4;
            *(_WORD *)(v13 + 2 * v12 + 6) = v15;
            v12 += 4;
          }
          while ( v11 <= v14 );
          v10 = v38;
          v8 = v46;
          v9 = v34;
          v7 = v44;
        }
        v42 = v11 + v10;
        v16 = v11 + v8;
        v38 = v10;
        v46 = v8;
        v34 = v9;
        v17 = v11 + v10;
        v18 = v45;
        v44 = v7;
        do
        {
          v19 = *(_BYTE *)(v17++ + a1);
          ++v11;
          *(_WORD *)(v18 + 2 * v16++) = v19;
        }
        while ( v11 < a3 );
        v10 = v38;
        v8 = v46;
        v9 = v34;
        v7 = v44;
      }
      if ( v40 )
      {
        *(_WORD *)(v45 + 2 * v9 - 2) = *(_BYTE *)(v7 + a1 - 1);
        v11 = a3;
      }
      if ( v11 < 8 )
      {
        if ( 8 - v11 < 5 )
        {
          v41 = v48 + v37;
        }
        else
        {
          v43 = v45 + v39;
          v41 = v45 + v39 + v37;
          v42 = v11 + v8;
          v46 = v8;
          v20 = v45 + v39;
          v34 = v9;
          v21 = v42;
          v44 = v7;
          v22 = v45;
          do
          {
            v11 += 4;
            *(_WORD *)(v22 + 2 * v21) = *(_WORD *)(v20 + 2 * a3 - 2);
            *(_WORD *)(v22 + 2 * v21 + 2) = *(_WORD *)(v20 + 2 * a3 - 2);
            *(_WORD *)(v22 + 2 * v21 + 4) = *(_WORD *)(v20 + 2 * a3 - 2);
            *(_WORD *)(v22 + 2 * v21 + 6) = *(_WORD *)(v20 + 2 * a3 - 2);
            v21 += 4;
          }
          while ( v11 < 3 );
          v8 = v46;
          v9 = v34;
          v7 = v44;
        }
        v23 = v45 + 2 * (v11 + v8);
        v44 = v7;
        v24 = v41;
        do
        {
          ++v11;
          *(_WORD *)v23 = *(_WORD *)v24;
          v23 += 2;
        }
        while ( v11 < 8 );
        v7 = v44;
      }
      v10 += a2;
      v8 += 8;
      v9 += 8;
      v7 += v33;
      v25 = v47 + 1;
      v48 += 16;
      v39 += 16;
      ++v47;
    }
    while ( v47 < a4 );
    v6 = v25;
    result = v45;
  }
  if ( v6 < 8 )
  {
    v26 = result + 16 * v6;
    do
    {
      v27 = *(_WORD *)(v26 - 8);
      v28 = *(_WORD *)(v26 - 6);
      *(_WORD *)v26 = *(_WORD *)(v26 - 16);
      v29 = *(_WORD *)(v26 - 4);
      *(_WORD *)(v26 + 2) = *(_WORD *)(v26 - 14);
      ++v6;
      *(_WORD *)(v26 + 4) = *(_WORD *)(v26 - 12);
      *(_WORD *)(v26 + 6) = *(_WORD *)(v26 - 10);
      v30 = *(_WORD *)(v26 - 2);
      *(_WORD *)(v26 + 8) = v27;
      *(_WORD *)(v26 + 10) = v28;
      *(_WORD *)(v26 + 12) = v29;
      *(_WORD *)(v26 + 14) = v30;
      v26 += 16;
    }
    while ( v6 < 8 );
  }
  v31 = 0;
  do
  {
    *(_WORD *)(a5 + 2 * v31) = *(_WORD *)(result + 2 * v31) - 128;
    *(_WORD *)(a5 + 2 * v31 + 2) = *(_WORD *)(result + 2 * v31 + 2) - 128;
    *(_WORD *)(a5 + 2 * v31 + 4) = *(_WORD *)(result + 2 * v31 + 4) - 128;
    *(_WORD *)(a5 + 2 * v31 + 6) = *(_WORD *)(result + 2 * v31 + 6) - 128;
    *(_WORD *)(a5 + 2 * v31 + 8) = *(_WORD *)(result + 2 * v31 + 8) - 128;
    *(_WORD *)(a5 + 2 * v31 + 10) = *(_WORD *)(result + 2 * v31 + 10) - 128;
    *(_WORD *)(a5 + 2 * v31 + 12) = *(_WORD *)(result + 2 * v31 + 12) - 128;
    *(_WORD *)(a5 + 2 * v31 + 14) = *(_WORD *)(result + 2 * v31 + 14) - 128;
    v31 += 8;
  }
  while ( v31 < 64 );
  return result;
}

//----- (007765E0) --------------------------------------------------------
signed int __cdecl Y_to_Y_111_Full_MCU_PX(int a1, int a2, int a3)
{
  int v3; // ebx@1
  int v4; // edx@1
  signed int result; // eax@1

  v3 = a1;
  v4 = a3;
  result = 0;
  do
  {
    ++result;
    *(_WORD *)v4 = *(_BYTE *)v3 - 128;
    *(_WORD *)(v4 + 2) = *(_BYTE *)(v3 + 1) - 128;
    *(_WORD *)(v4 + 4) = *(_BYTE *)(v3 + 2) - 128;
    *(_WORD *)(v4 + 6) = *(_BYTE *)(v3 + 3) - 128;
    *(_WORD *)(v4 + 8) = *(_BYTE *)(v3 + 4) - 128;
    *(_WORD *)(v4 + 10) = *(_BYTE *)(v3 + 5) - 128;
    *(_WORD *)(v4 + 12) = *(_BYTE *)(v3 + 6) - 128;
    *(_WORD *)(v4 + 14) = *(_BYTE *)(v3 + 7) - 128;
    v3 += a2;
    v4 += 16;
  }
  while ( result < 8 );
  return result;
}

//----- (00776660) --------------------------------------------------------
void __cdecl Y_to_Y_111_Full_MCU_M5(__m64 *a1, int a2, int a3)
{
  own_y_to_y_111_full_mcu_m5(a1, a2, a3);
}

//----- (00776690) --------------------------------------------------------
unsigned int __cdecl Y_to_Y_111_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  int v3; // edi@1
  int v4; // esi@1
  int v5; // ebp@1
  int v6; // ebx@1
  int v7; // ecx@1
  int v8; // eax@2
  __int64 v9; // qax@7
  int v10; // eax@7
  unsigned int result; // eax@10
  void *v12; // [sp+1Ch] [bp-18h]@1

  v3 = 8;
  v4 = 8;
  v5 = a1->DIBLineBytes;
  v6 = (int)a1->MCUBuf;
  v7 = (int)a1->state.DIB_ptr;
  v12 = a1->state.ctx;
  if ( a1->numxMCUs - 1 == a2 )
  {
    v8 = (((unsigned __int64)a1->DIBWidth >> 32) ^ abs(a1->DIBWidth) & 7) - ((unsigned __int64)a1->DIBWidth >> 32);
    if ( v8 )
      v3 = v8;
    a1->state.DIB_ptr = &a1->DIBBytes[v5 * (8 * a3 + 8)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(v7 + 8);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v9 = abs(a1->DIBHeight);
    v10 = (HIDWORD(v9) ^ abs(v9) & 7) - HIDWORD(v9);
    if ( v10 )
      v4 = v10;
  }
  if ( v3 != 8 || v4 != 8 )
    result = sub_776180(v7, v5, v3, v4, v6);
  else
    result = (*((int (__cdecl **)(_DWORD, _DWORD, _DWORD))v12 + 25))(v7, v5, v6);
  return result;
}

//----- (00776780) --------------------------------------------------------
int __cdecl CC_SS_RGB_to_YCbCr_General_MCU(struct _JPEG_PROPERTIES *a1, int a2, int a3)
{
  struct _JPEG_PROPERTIES *v3; // ebx@1
  char *v4; // edi@1
  char *v5; // ebp@1
  int v6; // ecx@1
  int v7; // eax@1
  int v8; // edx@1
  int v9; // ecx@1
  signed int v10; // esi@1
  int v11; // edx@7
  unsigned int v12; // edx@9
  int v13; // ebp@9
  int v14; // esi@11
  unsigned int v15; // edi@11
  unsigned int v16; // eax@12
  int v17; // ebx@12
  signed int v18; // ecx@12
  int v19; // ebp@12
  unsigned int v20; // edx@13
  int v21; // ebx@15
  signed int v22; // ecx@15
  signed int v23; // eax@15
  __int16 v24; // di@16
  __int16 v25; // di@16
  int v26; // edx@21
  int v27; // esi@22
  int v28; // eax@22
  unsigned int v29; // eax@27
  int v30; // esi@27
  int v31; // edi@28
  int v32; // ebp@28
  int v33; // edx@29
  int v34; // ecx@30
  int v35; // eax@30
  int v36; // ebp@37
  int v37; // eax@38
  int v38; // esi@38
  int v39; // ebx@38
  unsigned int v40; // edi@38
  int v41; // ecx@39
  int v42; // edx@40
  int v43; // ebp@40
  int v44; // edi@41
  int v45; // eax@41
  signed int v46; // ebx@42
  int v47; // eax@44
  int v48; // edx@44
  int v49; // ecx@44
  _FRAME_COMPONENT *v50; // esi@51
  int v51; // ebp@51
  signed int v52; // edi@51
  int v53; // eax@51
  int v54; // edx@52
  int v55; // esi@52
  unsigned int v56; // eax@52
  int v57; // ecx@52
  int v58; // edi@52
  int v59; // ebx@53
  int v60; // ebp@54
  int v61; // edi@54
  int v62; // eax@55
  int v63; // ecx@56
  unsigned __int64 v64; // qdi@56
  signed int v65; // ebp@57
  int v66; // eax@59
  int v67; // ecx@59
  int v68; // edx@60
  int v69; // esi@60
  int v70; // edi@60
  int v71; // ebp@60
  int v72; // eax@62
  int v73; // ebx@62
  int v74; // edx@62
  int v75; // ebp@62
  int v76; // ecx@62
  int v77; // ecx@67
  int v78; // ebx@67
  int v79; // eax@67
  int v80; // eax@69
  int v81; // ecx@69
  unsigned int v82; // esi@69
  int v83; // eax@76
  int v84; // ebp@77
  signed int v85; // edi@77
  unsigned __int64 v86; // qax@77
  unsigned int v87; // ecx@78
  int v88; // esi@78
  int v89; // edi@78
  int v90; // ebx@79
  int v91; // ebp@80
  int v92; // edi@80
  int v93; // ecx@82
  int v94; // edi@82
  int v95; // esi@82
  int v96; // ebp@83
  unsigned int v97; // eax@85
  int v98; // ecx@85
  int v99; // edx@86
  int v100; // esi@86
  int v101; // edi@86
  int v102; // ebp@86
  int v103; // eax@88
  int v104; // ebx@88
  int v105; // edx@88
  int v106; // ebp@88
  unsigned int v107; // ecx@88
  int v108; // ebx@93
  int v109; // ecx@93
  int v110; // eax@93
  int v111; // ecx@95
  int v112; // ebx@95
  int v113; // esi@95
  unsigned __int64 v114; // qax@103
  _FRAME_COMPONENT *v115; // ebp@104
  int v116; // ecx@104
  int v117; // esi@104
  int v118; // ebp@104
  unsigned int v119; // edi@105
  int v120; // ebp@105
  int v121; // esi@105
  int v122; // ecx@106
  int v123; // ebx@107
  int v124; // edi@107
  int v125; // eax@108
  int v126; // edx@109
  unsigned int v127; // edi@109
  int v128; // ebx@109
  unsigned int v129; // ecx@110
  signed int v130; // ebp@111
  int v131; // eax@112
  int v132; // edi@112
  int v133; // esi@113
  int v134; // edx@113
  unsigned int v135; // eax@114
  int v136; // ecx@116
  int v137; // ebx@116
  int v138; // edi@119
  signed int v139; // eax@124
  int v140; // edx@125
  int v141; // edx@134
  char v143; // [sp+1Fh] [bp-A6Dh]@1
  int v144; // [sp+A20h] [bp-6Ch]@51
  int v145; // [sp+A24h] [bp-68h]@51
  int v146; // [sp+A28h] [bp-64h]@62
  int v147; // [sp+A2Ch] [bp-60h]@62
  unsigned int v148; // [sp+A30h] [bp-5Ch]@12
  int v149; // [sp+A34h] [bp-58h]@10
  int v150; // [sp+A38h] [bp-54h]@1
  int v151; // [sp+A3Ch] [bp-50h]@22
  unsigned __int64 v152; // [sp+A40h] [bp-4Ch]@15
  int v153; // [sp+A48h] [bp-44h]@12
  int v154; // [sp+A4Ch] [bp-40h]@12
  unsigned int v155; // [sp+A50h] [bp-3Ch]@15
  int v156; // [sp+A54h] [bp-38h]@10
  unsigned int v157; // [sp+A58h] [bp-34h]@10
  unsigned int v158; // [sp+A5Ch] [bp-30h]@1
  unsigned __int64 v159; // [sp+A60h] [bp-2Ch]@1
  int v160; // [sp+A68h] [bp-24h]@1
  int v161; // [sp+A6Ch] [bp-20h]@1
  unsigned int v162; // [sp+A70h] [bp-1Ch]@10
  int v163; // [sp+A74h] [bp-18h]@1

  v3 = a1;
  v4 = a1->MCUBuf;
  v158 = (unsigned int)&v143 & 0xFFFFFFE0;
  v5 = a1->state.DIB_ptr;
  v6 = a1->jframe.max_hsampling;
  v163 = (int)v4;
  HIDWORD(v159) = v5;
  v7 = 8 * v6;
  v8 = a1->numxMCUs;
  v161 = v6;
  v9 = a1->jframe.max_vsampling;
  v150 = v7;
  v160 = v7;
  v10 = 8 * v9;
  if ( v8 - 1 == a2 )
  {
    if ( a1->DIBWidth % v150 )
      v160 = a1->DIBWidth % v150;
    a1->state.DIB_ptr = &a1->DIBBytes[a1->DIBLineBytes * (v9 * 8 * a3 + 8 * v9)];
  }
  else
  {
    a1->state.DIB_ptr = (char *)(HIDWORD(v159) + v150 * a1->DIBChannels);
  }
  if ( a3 == a1->numyMCUs - 1 )
  {
    v11 = abs(a1->DIBHeight) % v10;
    if ( v11 )
      v10 = v11;
  }
  v12 = v158;
  v13 = 0;
  if ( a1->JPGChannels <= 0 )
  {
    LODWORD(v159) = v9 << 7;
  }
  else
  {
    v162 = 16 * v10;
    v156 = 2 * v160;
    v157 = v160 - 6;
    v149 = 32 * v10;
    do
    {
      v14 = HIDWORD(v159) + v13;
      v15 = 0;
      if ( (signed int)v162 > 0 )
      {
        v16 = 0;
        v148 = v12 + v156;
        v17 = v150;
        v18 = v160;
        v153 = v12;
        v154 = v13;
        v19 = v161;
        do
        {
          v20 = 0;
          if ( v18 > 0 )
          {
            if ( v18 < 6 )
            {
              v21 = v153 + v16;
            }
            else
            {
              v21 = v153 + v16;
              v161 = 1;
              LODWORD(v159) = 2;
              v22 = 2;
              v155 = 3;
              v150 = 4;
              v152 = __PAIR__(v15, v16);
              v23 = 1;
              do
              {
                *(_WORD *)(v21 + 2 * v20) = *(_BYTE *)(v20 * a1->DIBChannels + v14);
                v24 = *(_BYTE *)(v23 * a1->DIBChannels + v14);
                v23 += 5;
                *(_WORD *)(v21 + 2 * v20 + 2) = v24;
                v25 = *(_BYTE *)(v22 * a1->DIBChannels + v14);
                v22 += 5;
                *(_WORD *)(v21 + 2 * v20 + 4) = v25;
                *(_WORD *)(v21 + 2 * v20 + 6) = *(_BYTE *)(v155 * a1->DIBChannels + v14);
                *(_WORD *)(v21 + 2 * v20 + 8) = *(_BYTE *)(v150 * a1->DIBChannels + v14);
                v20 += 5;
                v155 += 5;
                v150 += 5;
              }
              while ( (signed int)v20 <= (signed int)v157 );
              v15 = HIDWORD(v152);
              v16 = v152;
              v18 = v160;
            }
            HIDWORD(v152) = v15;
            do
            {
              *(_WORD *)(v21 + 2 * v20) = *(_BYTE *)(v20 * a1->DIBChannels + v14);
              ++v20;
            }
            while ( (signed int)v20 < v18 );
            v15 = HIDWORD(v152);
            v19 = a1->jframe.max_hsampling;
            v17 = 8 * v19;
          }
          v26 = v18;
          if ( v18 < v17 )
          {
            v151 = v14;
            v27 = v148;
            v152 = __PAIR__(v15, v16);
            v28 = v153 + 2 * v15;
            do
            {
              *(_WORD *)(v28 + 2 * v26++) = *(_WORD *)(v27 + 2 * v15 - 2);
              v19 = a1->jframe.max_hsampling;
              v17 = 8 * v19;
            }
            while ( v26 < 8 * v19 );
            v14 = v151;
            v15 = HIDWORD(v152);
            v16 = v152;
            v18 = v160;
          }
          v16 += 32;
          v15 += 16;
          v14 += a1->DIBLineBytes;
        }
        while ( (signed int)v15 < (signed int)v162 );
        v150 = v17;
        v12 = v153;
        v3 = a1;
        v161 = v19;
        v13 = v154;
        v9 = a1->jframe.max_vsampling;
      }
      v29 = v162;
      v30 = v9 << 7;
      if ( (signed int)v162 < v9 << 7 )
      {
        v155 = v12 + v149;
        v31 = 2 * v162;
        v153 = v12;
        v154 = v13;
        v32 = v150;
        do
        {
          v33 = 0;
          if ( v32 > 0 )
          {
            v34 = v153 + v31;
            HIDWORD(v152) = v29;
            v35 = v155;
            do
            {
              *(_WORD *)(v34 + 2 * v33) = *(_WORD *)(v35 + 2 * v33 - 32);
              v32 = 8 * v3->jframe.max_hsampling;
              ++v33;
            }
            while ( v33 < v32 );
            v161 = v3->jframe.max_hsampling;
            v29 = HIDWORD(v152);
            v9 = v3->jframe.max_vsampling;
            v30 = v3->jframe.max_vsampling << 7;
          }
          v31 += 32;
          v29 += 16;
        }
        while ( (signed int)v29 < v30 );
        v150 = v32;
        v12 = v153;
        v13 = v154;
      }
      v12 += 1024;
      ++v13;
    }
    while ( v13 < v3->JPGChannels );
    LODWORD(v159) = v30;
  }
  v36 = 0;
  if ( (signed int)v159 > 0 )
  {
    v37 = 0;
    v38 = v159;
    v39 = v150;
    v40 = v158;
    do
    {
      v41 = 0;
      if ( v39 > 0 )
      {
        v42 = v37 + v40;
        v155 = v37;
        v154 = v36;
        LODWORD(v159) = v38;
        v43 = v163;
        do
        {
          v44 = v42;
          v45 = v42 + 256;
          v157 = v42;
          v156 = v41;
          v150 = v39;
          do
          {
            v46 = 0;
            HIDWORD(v159) = v45;
            do
            {
              if ( a1->DIBColor == 1 )
              {
                v47 = *(_WORD *)(v44 + 2 * v46);
                v48 = *(_WORD *)(v44 + 2 * v46 + 1024);
                v49 = *(_WORD *)(v44 + 2 * v46 + 2048);
              }
              else
              {
                v47 = (signed __int16)(255 - *(_WORD *)(v44 + 2 * v46));
                v48 = (signed __int16)(255 - *(_WORD *)(v44 + 2 * v4